ZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC8wMDEtcmRrYi1ldGgtbXRrLWNoYW5nZS1pZm5hbWUtZm9yLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40LzAwMS1yZGtiLWV0aC1tdGstY2hhbmdlLWlmbmFtZS1mb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBlZWE2NAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC8wMDEtcmRrYi1ldGgtbXRrLWNoYW5nZS1pZm5hbWUtZm9yLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKK2RpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuYworaW5kZXggMWJmNDNiMy4uMzAwMTUyNSAxMDA3NTUKKy0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmMKKysrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmMKK0BAIC0zMzk1LDYgKzMzOTUsNyBAQCBzdGF0aWMgaW50IG10a19hZGRfbWFjKHN0cnVjdCBtdGtfZXRoICpldGgsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCisgCisgCWV0aC0+bmV0ZGV2W2lkXS0+aXJxID0gZXRoLT5pcnFbMF07CisgCWV0aC0+bmV0ZGV2W2lkXS0+ZGV2Lm9mX25vZGUgPSBucDsKKysJc3ByaW50ZiAoZXRoLT5uZXRkZXZbaWRdLT5uYW1lLCAiZXRoJWQiLGlkKzEpOworIAorIAlyZXR1cm4gMDsKKyAKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC8wMDItcmRrYi1tdGQtdWJpLXJlbGF5b3V0LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40LzAwMi1yZGtiLW10ZC11YmktcmVsYXlvdXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE3NDg4OQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC8wMDItcmRrYi1tdGQtdWJpLXJlbGF5b3V0LnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK2RpZmYgLS1naXQgYS9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4Ni1zcGltLW5hbmQtcGFydGl0aW9uLmR0c2kgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4Ni1zcGltLW5hbmQtcGFydGl0aW9uLmR0c2kKK2luZGV4IDRjYzc5NjEuLjkyNGY4Y2MgMTAwNjQ0CistLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4Ni1zcGltLW5hbmQtcGFydGl0aW9uLmR0c2kKKysrKyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTg2LXNwaW0tbmFuZC1wYXJ0aXRpb24uZHRzaQorQEAgLTM0LDEwICszNCwxNiBAQAorIAkJCQlyZWcgPSA8MHgzODAwMDAgMHgwMjAwMDAwPjsKKyAJCQl9OworIAorLQkJCXBhcnRpdGlvbkA1ODAwMDAgeworLQkJCQlsYWJlbCA9ICJ1YmkiOworLQkJCQlyZWcgPSA8MHg1ODAwMDAgMHg0MDAwMDAwPjsKKy0JCQl9OworKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbkA1ODAwMDAgeworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSAiS2VybmVsIjsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IDwweDU4MDAwMCAweDgwMDAwMD47CisrICAgICAgICAgICAgICAgICAgICAgICAgfTsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb25ARDgwMDAwIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gInViaSI7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWcgPSA8MHhEODAwMDAgMHhGMjgwMDAwPjsKKysgICAgICAgICAgICAgICAgICAgICAgICB9OworKworIAkJfTsKKyAJfTsKKyB9OworZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL210Nzk4Ni1zcGltLW5hbmQtcGFydGl0aW9uLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9tdDc5ODYtc3BpbS1uYW5kLXBhcnRpdGlvbi5kdHNpCitpbmRleCA0Y2M3OTYxLi45MjRmOGNjIDEwMDY0NAorLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3OTg2LXNwaW0tbmFuZC1wYXJ0aXRpb24uZHRzaQorKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3OTg2LXNwaW0tbmFuZC1wYXJ0aXRpb24uZHRzaQorQEAgLTM0LDEwICszNCwxNiBAQAorIAkJCQlyZWcgPSA8MHgzODAwMDAgMHgwMjAwMDAwPjsKKyAJCQl9OworIAorLQkJCXBhcnRpdGlvbkA1ODAwMDAgeworLQkJCQlsYWJlbCA9ICJ1YmkiOworLQkJCQlyZWcgPSA8MHg1ODAwMDAgMHg0MDAwMDAwPjsKKy0JCQl9OworKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbkA1ODAwMDAgeworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSAiS2VybmVsIjsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IDwweDU4MDAwMCAweDgwMDAwMD47CisrICAgICAgICAgICAgICAgICAgICAgICAgfTsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb25ARDgwMDAwIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gInViaSI7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWcgPSA8MHhEODAwMDAgMHhGMjgwMDAwPjsKKysgICAgICAgICAgICAgICAgICAgICAgICB9OworKworIAkJfTsKKyAJfTsKKyB9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzAxMC1LYnVpbGQtZG9uLXQtaGFyZGNvZGUtcGF0aC10by1hd2staW4tc2NyaXB0cy1sZC12ZXJzLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzAxMC1LYnVpbGQtZG9uLXQtaGFyZGNvZGUtcGF0aC10by1hd2staW4tc2NyaXB0cy1sZC12ZXJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYzRmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDEwLUtidWlsZC1kb24tdC1oYXJkY29kZS1wYXRoLXRvLWF3ay1pbi1zY3JpcHRzLWxkLXZlcnMucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSAxM2IxZWNjMzQwMTY1M2EzNTU3OThlYjFkZWUxMGNjMTYwODIwMmY0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorRGF0ZTogTW9uLCAxOCBKYW4gMjAxNiAxMjoyNzo0OSArMDEwMAorU3ViamVjdDogW1BBVENIIDMzLzM0XSBLYnVpbGQ6IGRvbid0IGhhcmRjb2RlIHBhdGggdG8gYXdrIGluCisgc2NyaXB0cy9sZC12ZXJzaW9uLnNoCisKK09uIHNvbWUgc3lzdGVtcyAvdXNyL2Jpbi9hd2sgZG9lcyBub3QgZXhpc3QsIG9yIGlzIGJyb2tlbi4gRmluZCBpdCB2aWEKKyRQQVRIIGluc3RlYWQuCisKK1NpZ25lZC1vZmYtYnk6IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KKy0tLQorIHNjcmlwdHMvbGQtdmVyc2lvbi5zaCB8IDQgKysrLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworLS0tIGEvc2NyaXB0cy9sZC12ZXJzaW9uLnNoCisrKysgYi9zY3JpcHRzL2xkLXZlcnNpb24uc2gKK0BAIC0xLDYgKzEsNyBAQAorLSMhL3Vzci9iaW4vYXdrIC1mCisrIyEvYmluL3NoCisgIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorICMgZXh0cmFjdCBsaW5rZXIgdmVyc2lvbiBudW1iZXIgZnJvbSBzdGRpbiBhbmQgdHVybiBpbnRvIHNpbmdsZSBudW1iZXIKKytleGVjIGF3ayAnCisgCXsKKyAJZ3N1YigiLipcXCkiLCAiIik7CisgCWdzdWIoIi4qdmVyc2lvbiAiLCAiIik7CitAQCAtOSwzICsxMCw0IEBACisgCXByaW50IGFbMV0qMTAwMDAwMDAwICsgYVsyXSoxMDAwMDAwICsgYVszXSoxMDAwMDsKKyAJZXhpdAorIAl9CisrJwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzAxMS1rYnVpbGQtZXhwb3J0LVNVQkFSQ0gucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDExLWtidWlsZC1leHBvcnQtU1VCQVJDSC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGRlZmEzCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzAxMS1rYnVpbGQtZXhwb3J0LVNVQkFSQ0gucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorRnJvbSAxNzMwMTliNjZkY2M5ZDY4YWQ5MzMzYWE3NDRkYWQxZTM2OWI1YWE4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorRGF0ZTogU3VuLCA5IEp1bCAyMDE3IDAwOjI2OjUzICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMzQvMzRdIGtlcm5lbDogYWRkIGNvbXBpbGUgZml4IGZvciBsaW51eCA0Ljkgb24geDg2CisKK1NpZ25lZC1vZmYtYnk6IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KKy0tLQorIE1ha2VmaWxlIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtNDkzLDcgKzQ5Myw3IEBAIEtCVUlMRF9MREZMQUdTIDo9CisgR0NDX1BMVUdJTlNfQ0ZMQUdTIDo9CisgQ0xBTkdfRkxBR1MgOj0KKyAKKy1leHBvcnQgQVJDSCBTUkNBUkNIIENPTkZJR19TSEVMTCBCQVNIIEhPU1RDQyBLQlVJTERfSE9TVENGTEFHUyBDUk9TU19DT01QSUxFIExEIENDCisrZXhwb3J0IEFSQ0ggU1JDQVJDSCBTVUJBUkNIIENPTkZJR19TSEVMTCBCQVNIIEhPU1RDQyBLQlVJTERfSE9TVENGTEFHUyBDUk9TU19DT01QSUxFIExEIENDCisgZXhwb3J0IENQUCBBUiBOTSBTVFJJUCBPQkpDT1BZIE9CSkRVTVAgT0JKU0laRSBSRUFERUxGIFBBSE9MRSBMRVggWUFDQyBBV0sgSU5TVEFMTEtFUk5FTAorIGV4cG9ydCBQRVJMIFBZVEhPTiBQWVRIT04zIENIRUNLIENIRUNLRkxBR1MgTUFLRSBVVFNfTUFDSElORSBIT1NUQ1hYCisgZXhwb3J0IEtHWklQIEtCWklQMiBLTFpPUCBMWk1BIExaNCBYWgpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzAzMC1tb2Rwb3N0LWFkZC1hLWhlbHBlci10by1nZXQtZGF0YS1wb2ludGVkLWJ5LWEtc3ltYm9sLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzAzMC1tb2Rwb3N0LWFkZC1hLWhlbHBlci10by1nZXQtZGF0YS1wb2ludGVkLWJ5LWEtc3ltYm9sLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmODhjMGMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDMwLW1vZHBvc3QtYWRkLWEtaGVscGVyLXRvLWdldC1kYXRhLXBvaW50ZWQtYnktYS1zeW1ib2wucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorRnJvbSBhZmEwNDU5ZGFhN2IwOGM3YjJjODc5NzA1YjY5ZDM5YjczNGExMWQwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFzYWhpcm8gWWFtYWRhIDx5YW1hZGEubWFzYWhpcm9Ac29jaW9uZXh0LmNvbT4KK0RhdGU6IEZyaSwgMTUgTm92IDIwMTkgMDI6NDI6MjEgKzA5MDAKK1N1YmplY3Q6IFtQQVRDSF0gbW9kcG9zdDogYWRkIGEgaGVscGVyIHRvIGdldCBkYXRhIHBvaW50ZWQgYnkgYSBzeW1ib2wKKworV2hlbiBDT05GSUdfTU9EVUxFX1JFTF9DUkNTIGlzIGVuYWJsZWQsIHRoZSB2YWx1ZSBvZiBfX2NyY18qIGlzIG5vdAorYW4gYWJzb2x1dGUgdmFsdWUsIGJ1dCB0aGUgYWRkcmVzcyB0byB0aGUgQ1JDIGRhdGEgZW1iZWRkZWQgaW4gdGhlCisucm9kYXRhIHNlY3Rpb24uCisKK0dldHRpbmcgdGhlIGRhdGEgcG9pbnRlZCBieSB0aGUgc3ltYm9sIHZhbHVlIGlzIHNvbWV3aGF0IGNvbXBsZXguCitTcGxpdCBpdCBvdXQgaW50byBhIG5ldyBoZWxwZXIsIHN5bV9nZXRfZGF0YSgpLgorCitJIHdpbGwgcmV1c2UgaXQgdG8gcmVmYWN0b3IgbmFtZXNwYWNlX2Zyb21fa3N0cnRhYm5zKCkgaW4gdGhlIG5leHQKK2NvbW1pdC4KKworU2lnbmVkLW9mZi1ieTogTWFzYWhpcm8gWWFtYWRhIDx5YW1hZGEubWFzYWhpcm9Ac29jaW9uZXh0LmNvbT4KKy0tLQorIHNjcmlwdHMvbW9kL21vZHBvc3QuYyB8IDE3ICsrKysrKysrKysrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKKy0tLSBhL3NjcmlwdHMvbW9kL21vZHBvc3QuYworKysrIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCitAQCAtMzEyLDYgKzMxMiwxOCBAQCBzdGF0aWMgY29uc3QgY2hhciAqc2VjX25hbWUoc3RydWN0IGVsZl9pCisgCXJldHVybiBzZWNoX25hbWUoZWxmLCAmZWxmLT5zZWNoZHJzW3NlY2luZGV4XSk7CisgfQorIAorK3N0YXRpYyB2b2lkICpzeW1fZ2V0X2RhdGEoY29uc3Qgc3RydWN0IGVsZl9pbmZvICppbmZvLCBjb25zdCBFbGZfU3ltICpzeW0pCisreworKwlFbGZfU2hkciAqc2VjaGRyID0gJmluZm8tPnNlY2hkcnNbc3ltLT5zdF9zaG5keF07CisrCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworKworKwlvZmZzZXQgPSBzeW0tPnN0X3ZhbHVlOworKwlpZiAoaW5mby0+aGRyLT5lX3R5cGUgIT0gRVRfUkVMKQorKwkJb2Zmc2V0IC09IHNlY2hkci0+c2hfYWRkcjsKKysKKysJcmV0dXJuICh2b2lkICopaW5mby0+aGRyICsgc2VjaGRyLT5zaF9vZmZzZXQgKyBvZmZzZXQ7CisrfQorKworICNkZWZpbmUgc3Ryc3RhcnRzKHN0ciwgcHJlZml4KSAoc3RybmNtcChzdHIsIHByZWZpeCwgc3RybGVuKHByZWZpeCkpID09IDApCisgCisgc3RhdGljIGVudW0gZXhwb3J0IGV4cG9ydF9mcm9tX3NlY25hbWUoc3RydWN0IGVsZl9pbmZvICplbGYsIHVuc2lnbmVkIGludCBzZWMpCitAQCAtNzAxLDEwICs3MTMsNyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfbW9kdmVyc2lvbnMoc3RydWN0IG1vCisgCQkJdW5zaWduZWQgaW50ICpjcmNwOworIAorIAkJCS8qIHN5bWJvbCBwb2ludHMgdG8gdGhlIENSQyBpbiB0aGUgRUxGIG9iamVjdCAqLworLQkJCWNyY3AgPSAodm9pZCAqKWluZm8tPmhkciArIHN5bS0+c3RfdmFsdWUgKworLQkJCSAgICAgICBpbmZvLT5zZWNoZHJzW3N5bS0+c3Rfc2huZHhdLnNoX29mZnNldCAtCistCQkJICAgICAgIChpbmZvLT5oZHItPmVfdHlwZSAhPSBFVF9SRUwgPworLQkJCQlpbmZvLT5zZWNoZHJzW3N5bS0+c3Rfc2huZHhdLnNoX2FkZHIgOiAwKTsKKysJCQljcmNwID0gc3ltX2dldF9kYXRhKGluZm8sIHN5bSk7CisgCQkJY3JjID0gVE9fTkFUSVZFKCpjcmNwKTsKKyAJCX0KKyAJCXN5bV91cGRhdGVfY3JjKHN5bW5hbWUgKyBzdHJsZW4oIl9fY3JjXyIpLCBtb2QsIGNyYywKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wMzEtbW9kcG9zdC1yZWZhY3Rvci1uYW1lc3BhY2VfZnJvbV9rc3RydGFibnMtdG8tbm90LWhhci5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wMzEtbW9kcG9zdC1yZWZhY3Rvci1uYW1lc3BhY2VfZnJvbV9rc3RydGFibnMtdG8tbm90LWhhci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzBkYzZiCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzAzMS1tb2Rwb3N0LXJlZmFjdG9yLW5hbWVzcGFjZV9mcm9tX2tzdHJ0YWJucy10by1ub3QtaGFyLnBhdGNoCkBAIC0wLDAgKzEsNjIgQEAKK0Zyb20gZTg0ZjlmYmJlY2UxNTg1ZjQ1YTAzY2NjMTFlZWFiZTEyMWNhZGMxYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hc2FoaXJvIFlhbWFkYSA8eWFtYWRhLm1hc2FoaXJvQHNvY2lvbmV4dC5jb20+CitEYXRlOiBGcmksIDE1IE5vdiAyMDE5IDAyOjQyOjIyICswOTAwCitTdWJqZWN0OiBbUEFUQ0hdIG1vZHBvc3Q6IHJlZmFjdG9yIG5hbWVzcGFjZV9mcm9tX2tzdHJ0YWJucygpIHRvIG5vdCBoYXJkLWNvZGUKKyBzZWN0aW9uIG5hbWUKKworQ3VycmVudGx5LCBuYW1lc3BhY2VfZnJvbV9rc3RydGFibnMoKSByZWxpZXMgb24gdGhlIGZhY3QgdGhhdAorbmFtZXNwYWNlIHN0cmluZ3MgYXJlIHJlY29yZGVkIGluIHRoZSBfX2tzeW10YWJfc3RyaW5ncyBzZWN0aW9uLgorQWN0dWFsbHksIGl0IGlzIGNvZGVkIGluIGluY2x1ZGUvbGludXgvZXhwb3J0LmgsIGJ1dCBtb2Rwb3N0IGRvZXMKK25vdCBuZWVkIHRvIGhhcmQtY29kZSB0aGUgc2VjdGlvbiBuYW1lLgorCitFbGZfU3ltOjpzdF9zaG5keCBob2xkcyB0aGUgaW5kZXggb2YgdGhlIHJlbGV2YW50IHNlY3Rpb24uIFVzaW5nIGl0IGlzCithIG1vcmUgcG9ydGFibGUgd2F5IHRvIGdldCB0aGUgbmFtZXNwYWNlIHN0cmluZy4KKworTWFrZSBuYW1lc3BhY2VfZnJvbV9rc3RydGFibnMoKSBzaW1wbHkgY2FsbCBzeW1fZ2V0X2RhdGEoKSwgYW5kIGRlbGV0ZQordGhlIGluZm8tPmtzeW10YWJfc3RyaW5ncyAuCisKK1doaWxlIEkgd2FzIGhlcmUsIEkgYWRkZWQgbW9yZSAnY29uc3QnIHF1YWxpZmllcnMgdG8gcG9pbnRlcnMuCisKK1NpZ25lZC1vZmYtYnk6IE1hc2FoaXJvIFlhbWFkYSA8eWFtYWRhLm1hc2FoaXJvQHNvY2lvbmV4dC5jb20+CistLS0KKyBzY3JpcHRzL21vZC9tb2Rwb3N0LmMgfCAxMCArKystLS0tLS0tCisgc2NyaXB0cy9tb2QvbW9kcG9zdC5oIHwgIDEgLQorIDIgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCistLS0gYS9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKKysrKyBiL3NjcmlwdHMvbW9kL21vZHBvc3QuYworQEAgLTM2MCwxMCArMzYwLDEwIEBAIHN0YXRpYyBlbnVtIGV4cG9ydCBleHBvcnRfZnJvbV9zZWMoc3RydWMKKyAJCXJldHVybiBleHBvcnRfdW5rbm93bjsKKyB9CisgCistc3RhdGljIGNvbnN0IGNoYXIgKm5hbWVzcGFjZV9mcm9tX2tzdHJ0YWJucyhzdHJ1Y3QgZWxmX2luZm8gKmluZm8sCistCQkJCQkgICAgRWxmX1N5bSAqa3N0cnRhYm5zKQorK3N0YXRpYyBjb25zdCBjaGFyICpuYW1lc3BhY2VfZnJvbV9rc3RydGFibnMoY29uc3Qgc3RydWN0IGVsZl9pbmZvICppbmZvLAorKwkJCQkJICAgIGNvbnN0IEVsZl9TeW0gKnN5bSkKKyB7CistCWNoYXIgKnZhbHVlID0gaW5mby0+a3N5bXRhYl9zdHJpbmdzICsga3N0cnRhYm5zLT5zdF92YWx1ZTsKKysJY29uc3QgY2hhciAqdmFsdWUgPSBzeW1fZ2V0X2RhdGEoaW5mbywgc3ltKTsKKyAJcmV0dXJuIHZhbHVlWzBdID8gdmFsdWUgOiBOVUxMOworIH0KKyAKK0BAIC02MDUsMTAgKzYwNSw2IEBAIHN0YXRpYyBpbnQgcGFyc2VfZWxmKHN0cnVjdCBlbGZfaW5mbyAqaW4KKyAJCQlpbmZvLT5leHBvcnRfdW51c2VkX2dwbF9zZWMgPSBpOworIAkJZWxzZSBpZiAoc3RyY21wKHNlY25hbWUsICJfX2tzeW10YWJfZ3BsX2Z1dHVyZSIpID09IDApCisgCQkJaW5mby0+ZXhwb3J0X2dwbF9mdXR1cmVfc2VjID0gaTsKKy0JCWVsc2UgaWYgKHN0cmNtcChzZWNuYW1lLCAiX19rc3ltdGFiX3N0cmluZ3MiKSA9PSAwKQorLQkJCWluZm8tPmtzeW10YWJfc3RyaW5ncyA9ICh2b2lkICopaGRyICsKKy0JCQkJCQlzZWNoZHJzW2ldLnNoX29mZnNldCAtCistCQkJCQkJc2VjaGRyc1tpXS5zaF9hZGRyOworIAorIAkJaWYgKHNlY2hkcnNbaV0uc2hfdHlwZSA9PSBTSFRfU1lNVEFCKSB7CisgCQkJdW5zaWduZWQgaW50IHNoX2xpbmtfaWR4OworLS0tIGEvc2NyaXB0cy9tb2QvbW9kcG9zdC5oCisrKysgYi9zY3JpcHRzL21vZC9tb2Rwb3N0LmgKK0BAIC0xNDMsNyArMTQzLDYgQEAgc3RydWN0IGVsZl9pbmZvIHsKKyAJRWxmX1NlY3Rpb24gIGV4cG9ydF9ncGxfc2VjOworIAlFbGZfU2VjdGlvbiAgZXhwb3J0X3VudXNlZF9ncGxfc2VjOworIAlFbGZfU2VjdGlvbiAgZXhwb3J0X2dwbF9mdXR1cmVfc2VjOworLQljaGFyCSAgICAgKmtzeW10YWJfc3RyaW5nczsKKyAJY2hhciAgICAgICAgICpzdHJ0YWI7CisgCWNoYXIJICAgICAqbW9kaW5mbzsKKyAJdW5zaWduZWQgaW50IG1vZGluZm9fbGVuOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA0MS12NS41LWFybTY0LUltcGxlbWVudC1vcHRpbWlzZWQtY2hlY2tzdW0tcm91dGluZS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wNDEtdjUuNS1hcm02NC1JbXBsZW1lbnQtb3B0aW1pc2VkLWNoZWNrc3VtLXJvdXRpbmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBlYzdkMAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wNDEtdjUuNS1hcm02NC1JbXBsZW1lbnQtb3B0aW1pc2VkLWNoZWNrc3VtLXJvdXRpbmUucGF0Y2gKQEAgLTAsMCArMSwxNzYgQEAKK0Zyb206IFJvYmluIE11cnBoeSA8cm9iaW4ubXVycGh5QGFybS5jb20+CitEYXRlOiBXZWQsIDE1IEphbiAyMDIwIDE2OjQyOjM5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIGFybTY0OiBJbXBsZW1lbnQgb3B0aW1pc2VkIGNoZWNrc3VtIHJvdXRpbmUKKworQXBwYXJlbnRseSB0aGVyZSBleGlzdCBjZXJ0YWluIHdvcmtsb2FkcyB3aGljaCByZWx5IGhlYXZpbHkgb24gc29mdHdhcmUKK2NoZWNrc3VtbWluZywgZm9yIHdoaWNoIHRoZSBnZW5lcmljIGRvX2NzdW0oKSBpbXBsZW1lbnRhdGlvbiBiZWNvbWVzIGEKK3NpZ25pZmljYW50IGJvdHRsZW5lY2suIFRoZXJlZm9yZSBsZXQncyBnaXZlIGFybTY0IGl0cyBvd24gb3B0aW1pc2VkCit2ZXJzaW9uIC0gZm9yIGVhc2Ugb2YgbWFpbnRlbmFuY2UgdGhpcyBmb3JlZ29lcyBhc3NlbWJseSBvciBpbnRyaXNpY3MsCithbmQgaXMgdGh1cyBub3QgYWN0dWFsbHkgYXJtNjQtc3BlY2lmaWMsIGJ1dCBkb2VzIHJlbHkgaGVhdmlseSBvbiBDCitpZGlvbXMgdGhhdCB0cmFuc2xhdGUgd2VsbCB0byB0aGUgQTY0IElTQSBhbmQgdGhlIHR5cGljYWwgbG9hZC9zdG9yZQorY2FwYWJpbGl0aWVzIG9mIG1vc3QgQVJNdjggQ1BVIGNvcmVzLgorCitUaGUgcmVzdWx0aW5nIGluY3JlYXNlIGluIGNoZWNrc3VtIHRocm91Z2hwdXQgc2NhbGVzIG5pY2VseSB3aXRoIGJ1ZmZlcgorc2l6ZSwgdGVuZGluZyB0b3dhcmRzIDR4IGZvciBhIHNtYWxsIGluLW9yZGVyIGNvcmUgKENvcnRleC1BNTMpLCBhbmQgdXAKK3RvIDZ4IG9yIG1vcmUgZm9yIGFuIGFnZ3Jlc3NpdmUgYmlnIGNvcmUgKEFtcGVyZSBlTUFHKS4KKworUmVwb3J0ZWQtYnk6IExpbmd5YW4gSHVhbmcgPGh1YW5nbGluZ3lhbjJAaHVhd2VpLmNvbT4KK1Rlc3RlZC1ieTogTGluZ3lhbiBIdWFuZyA8aHVhbmdsaW5neWFuMkBodWF3ZWkuY29tPgorU2lnbmVkLW9mZi1ieTogUm9iaW4gTXVycGh5IDxyb2Jpbi5tdXJwaHlAYXJtLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFdpbGwgRGVhY29uIDx3aWxsQGtlcm5lbC5vcmc+CistLS0KKyBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC9hcm02NC9saWIvY3N1bS5jCisKKy0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY2hlY2tzdW0uaAorKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jaGVja3N1bS5oCitAQCAtMzYsNiArMzYsOSBAQCBzdGF0aWMgaW5saW5lIF9fc3VtMTYgaXBfZmFzdF9jc3VtKGNvbnN0CisgfQorICNkZWZpbmUgaXBfZmFzdF9jc3VtIGlwX2Zhc3RfY3N1bQorIAorK2V4dGVybiB1bnNpZ25lZCBpbnQgZG9fY3N1bShjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmLCBpbnQgbGVuKTsKKysjZGVmaW5lIGRvX2NzdW0gZG9fY3N1bQorKworICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9jaGVja3N1bS5oPgorIAorICNlbmRpZgkvKiBfX0FTTV9DSEVDS1NVTV9IICovCistLS0gYS9hcmNoL2FybTY0L2xpYi9NYWtlZmlsZQorKysrIGIvYXJjaC9hcm02NC9saWIvTWFrZWZpbGUKK0BAIC0xLDkgKzEsOSBAQAorICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKyBsaWIteQkJOj0gY2xlYXJfdXNlci5vIGRlbGF5Lm8gY29weV9mcm9tX3VzZXIubwkJXAorIAkJICAgY29weV90b191c2VyLm8gY29weV9pbl91c2VyLm8gY29weV9wYWdlLm8JCVwKKy0JCSAgIGNsZWFyX3BhZ2UubyBtZW1jaHIubyBtZW1jcHkubyBtZW1tb3ZlLm8gbWVtc2V0Lm8JXAorLQkJICAgbWVtY21wLm8gc3RyY21wLm8gc3RybmNtcC5vIHN0cmxlbi5vIHN0cm5sZW4ubwlcCistCQkgICBzdHJjaHIubyBzdHJyY2hyLm8gdGlzaGlmdC5vCisrCQkgICBjbGVhcl9wYWdlLm8gY3N1bS5vIG1lbWNoci5vIG1lbWNweS5vIG1lbW1vdmUubwlcCisrCQkgICBtZW1zZXQubyBtZW1jbXAubyBzdHJjbXAubyBzdHJuY21wLm8gc3RybGVuLm8JXAorKwkJICAgc3Rybmxlbi5vIHN0cmNoci5vIHN0cnJjaHIubyB0aXNoaWZ0Lm8KKyAKKyBpZmVxICgkKENPTkZJR19LRVJORUxfTU9ERV9ORU9OKSwgeSkKKyBvYmotJChDT05GSUdfWE9SX0JMT0NLUykJKz0geG9yLW5lb24ubworLS0tIC9kZXYvbnVsbAorKysrIGIvYXJjaC9hcm02NC9saWIvY3N1bS5jCitAQCAtMCwwICsxLDEyMyBAQAorKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKysvLyBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMCBBcm0gTHRkLgorKworKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorKyNpbmNsdWRlIDxsaW51eC9rYXNhbi1jaGVja3MuaD4KKysjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisrCisrI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgorKworKy8qIExvb2tzIGR1bWIsIGJ1dCBnZW5lcmF0ZXMgbmljZS1pc2ggY29kZSAqLworK3N0YXRpYyB1NjQgYWNjdW11bGF0ZSh1NjQgc3VtLCB1NjQgZGF0YSkKKyt7CisrCV9fdWludDEyOF90IHRtcCA9IChfX3VpbnQxMjhfdClzdW0gKyBkYXRhOworKwlyZXR1cm4gdG1wICsgKHRtcCA+PiA2NCk7CisrfQorKworK3Vuc2lnbmVkIGludCBkb19jc3VtKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmYsIGludCBsZW4pCisreworKwl1bnNpZ25lZCBpbnQgb2Zmc2V0LCBzaGlmdCwgc3VtOworKwljb25zdCB1NjQgKnB0cjsKKysJdTY0IGRhdGEsIHN1bTY0ID0gMDsKKysKKysJb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpYnVmZiAmIDc7CisrCS8qCisrCSAqIFRoaXMgaXMgdG8gYWxsIGludGVudHMgYW5kIHB1cnBvc2VzIHNhZmUsIHNpbmNlIHJvdW5kaW5nIGRvd24gY2Fubm90CisrCSAqIHJlc3VsdCBpbiBhIGRpZmZlcmVudCBwYWdlIG9yIGNhY2hlIGxpbmUgYmVpbmcgYWNjZXNzZWQsIGFuZCBAYnVmZgorKwkgKiBzaG91bGQgYWJzb2x1dGVseSBub3QgYmUgcG9pbnRpbmcgdG8gYW55dGhpbmcgcmVhZC1zZW5zaXRpdmUuIFdlIGRvLAorKwkgKiBob3dldmVyLCBoYXZlIHRvIGJlIGNhcmVmdWwgbm90IHRvIHBpc3Mgb2ZmIEtBU0FOLCB3aGljaCBtZWFucyB1c2luZworKwkgKiB1bmNoZWNrZWQgcmVhZHMgdG8gYWNjb21tb2RhdGUgdGhlIGhlYWQgYW5kIHRhaWwsIGZvciB3aGljaCB3ZSdsbAorKwkgKiBjb21wZW5zYXRlIHdpdGggYW4gZXhwbGljaXQgY2hlY2sgdXAtZnJvbnQuCisrCSAqLworKwlrYXNhbl9jaGVja19yZWFkKGJ1ZmYsIGxlbik7CisrCXB0ciA9ICh1NjQgKikoYnVmZiAtIG9mZnNldCk7CisrCWxlbiA9IGxlbiArIG9mZnNldCAtIDg7CisrCisrCS8qCisrCSAqIEhlYWQ6IHplcm8gb3V0IGFueSBleGNlc3MgbGVhZGluZyBieXRlcy4gU2hpZnRpbmcgYmFjayBieSB0aGUgc2FtZQorKwkgKiBhbW91bnQgc2hvdWxkIGJlIGF0IGxlYXN0IGFzIGZhc3QgYXMgYW55IG90aGVyIHdheSBvZiBoYW5kbGluZyB0aGUKKysJICogb2RkL2V2ZW4gYWxpZ25tZW50LCBhbmQgbWVhbnMgd2UgY2FuIGlnbm9yZSBpdCB1bnRpbCB0aGUgdmVyeSBlbmQuCisrCSAqLworKwlzaGlmdCA9IG9mZnNldCAqIDg7CisrCWRhdGEgPSBSRUFEX09OQ0VfTk9DSEVDSygqcHRyKyspOworKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KKysJZGF0YSA9IChkYXRhID4+IHNoaWZ0KSA8PCBzaGlmdDsKKysjZWxzZQorKwlkYXRhID0gKGRhdGEgPDwgc2hpZnQpID4+IHNoaWZ0OworKyNlbmRpZgorKworKwkvKgorKwkgKiBCb2R5OiBzdHJhaWdodGZvcndhcmQgYWxpZ25lZCBsb2FkcyBmcm9tIGhlcmUgb24gKHRoZSBwYWlyZWQgbG9hZHMKKysJICogdW5kZXJseWluZyB0aGUgcXVhZHdvcmQgdHlwZSBzdGlsbCBvbmx5IG5lZWQgZHdvcmQgYWxpZ25tZW50KS4gVGhlCisrCSAqIG1haW4gbG9vcCBzdHJpY3RseSBleGNsdWRlcyB0aGUgdGFpbCwgc28gdGhlIHNlY29uZCBsb29wIHdpbGwgYWx3YXlzCisrCSAqIHJ1biBhdCBsZWFzdCBvbmNlLgorKwkgKi8KKysJd2hpbGUgKHVubGlrZWx5KGxlbiA+IDY0KSkgeworKwkJX191aW50MTI4X3QgdG1wMSwgdG1wMiwgdG1wMywgdG1wNDsKKysKKysJCXRtcDEgPSBSRUFEX09OQ0VfTk9DSEVDSygqKF9fdWludDEyOF90ICopcHRyKTsKKysJCXRtcDIgPSBSRUFEX09OQ0VfTk9DSEVDSygqKF9fdWludDEyOF90ICopKHB0ciArIDIpKTsKKysJCXRtcDMgPSBSRUFEX09OQ0VfTk9DSEVDSygqKF9fdWludDEyOF90ICopKHB0ciArIDQpKTsKKysJCXRtcDQgPSBSRUFEX09OQ0VfTk9DSEVDSygqKF9fdWludDEyOF90ICopKHB0ciArIDYpKTsKKysKKysJCWxlbiAtPSA2NDsKKysJCXB0ciArPSA4OworKworKwkJLyogVGhpcyBpcyB0aGUgImRvbid0IGR1bXAgdGhlIGNhcnJ5IGZsYWcgaW50byBhIEdQUiIgaWRpb20gKi8KKysJCXRtcDEgKz0gKHRtcDEgPj4gNjQpIHwgKHRtcDEgPDwgNjQpOworKwkJdG1wMiArPSAodG1wMiA+PiA2NCkgfCAodG1wMiA8PCA2NCk7CisrCQl0bXAzICs9ICh0bXAzID4+IDY0KSB8ICh0bXAzIDw8IDY0KTsKKysJCXRtcDQgKz0gKHRtcDQgPj4gNjQpIHwgKHRtcDQgPDwgNjQpOworKwkJdG1wMSA9ICgodG1wMSA+PiA2NCkgPDwgNjQpIHwgKHRtcDIgPj4gNjQpOworKwkJdG1wMSArPSAodG1wMSA+PiA2NCkgfCAodG1wMSA8PCA2NCk7CisrCQl0bXAzID0gKCh0bXAzID4+IDY0KSA8PCA2NCkgfCAodG1wNCA+PiA2NCk7CisrCQl0bXAzICs9ICh0bXAzID4+IDY0KSB8ICh0bXAzIDw8IDY0KTsKKysJCXRtcDEgPSAoKHRtcDEgPj4gNjQpIDw8IDY0KSB8ICh0bXAzID4+IDY0KTsKKysJCXRtcDEgKz0gKHRtcDEgPj4gNjQpIHwgKHRtcDEgPDwgNjQpOworKwkJdG1wMSA9ICgodG1wMSA+PiA2NCkgPDwgNjQpIHwgc3VtNjQ7CisrCQl0bXAxICs9ICh0bXAxID4+IDY0KSB8ICh0bXAxIDw8IDY0KTsKKysJCXN1bTY0ID0gdG1wMSA+PiA2NDsKKysJfQorKwl3aGlsZSAobGVuID4gOCkgeworKwkJX191aW50MTI4X3QgdG1wOworKworKwkJc3VtNjQgPSBhY2N1bXVsYXRlKHN1bTY0LCBkYXRhKTsKKysJCXRtcCA9IFJFQURfT05DRV9OT0NIRUNLKCooX191aW50MTI4X3QgKilwdHIpOworKworKwkJbGVuIC09IDE2OworKwkJcHRyICs9IDI7CisrCisrI2lmZGVmIF9fTElUVExFX0VORElBTgorKwkJZGF0YSA9IHRtcCA+PiA2NDsKKysJCXN1bTY0ID0gYWNjdW11bGF0ZShzdW02NCwgdG1wKTsKKysjZWxzZQorKwkJZGF0YSA9IHRtcDsKKysJCXN1bTY0ID0gYWNjdW11bGF0ZShzdW02NCwgdG1wID4+IDY0KTsKKysjZW5kaWYKKysJfQorKwlpZiAobGVuID4gMCkgeworKwkJc3VtNjQgPSBhY2N1bXVsYXRlKHN1bTY0LCBkYXRhKTsKKysJCWRhdGEgPSBSRUFEX09OQ0VfTk9DSEVDSygqcHRyKTsKKysJCWxlbiAtPSA4OworKwl9CisrCS8qCisrCSAqIFRhaWw6IHplcm8gYW55IG92ZXItcmVhZCBieXRlcyBzaW1pbGFybHkgdG8gdGhlIGhlYWQsIGFnYWluCisrCSAqIHByZXNlcnZpbmcgb2RkL2V2ZW4gYWxpZ25tZW50LgorKwkgKi8KKysJc2hpZnQgPSBsZW4gKiAtODsKKysjaWZkZWYgX19MSVRUTEVfRU5ESUFOCisrCWRhdGEgPSAoZGF0YSA8PCBzaGlmdCkgPj4gc2hpZnQ7CisrI2Vsc2UKKysJZGF0YSA9IChkYXRhID4+IHNoaWZ0KSA8PCBzaGlmdDsKKysjZW5kaWYKKysJc3VtNjQgPSBhY2N1bXVsYXRlKHN1bTY0LCBkYXRhKTsKKysKKysJLyogRmluYWxseSwgZm9sZGluZyAqLworKwlzdW02NCArPSAoc3VtNjQgPj4gMzIpIHwgKHN1bTY0IDw8IDMyKTsKKysJc3VtID0gc3VtNjQgPj4gMzI7CisrCXN1bSArPSAoc3VtID4+IDE2KSB8IChzdW0gPDwgMTYpOworKwlpZiAob2Zmc2V0ICYgMSkKKysJCXJldHVybiAodTE2KXN3YWIzMihzdW0pOworKworKwlyZXR1cm4gc3VtID4+IDE2OworK30KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wNDItdjUuNS1hcm02NC1jc3VtLUZpeC1wYXRob2xvZ2ljYWwtemVyby1sZW5ndGgtY2FsbHMucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDQyLXY1LjUtYXJtNjQtY3N1bS1GaXgtcGF0aG9sb2dpY2FsLXplcm8tbGVuZ3RoLWNhbGxzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYjIxMGUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDQyLXY1LjUtYXJtNjQtY3N1bS1GaXgtcGF0aG9sb2dpY2FsLXplcm8tbGVuZ3RoLWNhbGxzLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb206IFJvYmluIE11cnBoeSA8cm9iaW4ubXVycGh5QGFybS5jb20+CitEYXRlOiBGcmksIDE3IEphbiAyMDIwIDE1OjQ4OjM5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIGFybTY0OiBjc3VtOiBGaXggcGF0aG9sb2dpY2FsIHplcm8tbGVuZ3RoIGNhbGxzCisKK0luIHZhbGlkYXRpbmcgdGhlIGNoZWNrc3VtbWluZyByZXN1bHRzIG9mIHRoZSBuZXcgcm91dGluZSwgSSBzYWRseQorbmVnbGVjdGVkIHRvIHRlc3QgaXRzIG5vdC1jaGVja3N1bW1pbmcgcmVzdWx0cy4gVGh1cyBpdCBzbGlwcGVkIHRocm91Z2gKK3RoYXQgdGhlIG9uZSBjYXNlIHdoZXJlIEBidWZmIGlzIGFscmVhZHkgZHdvcmQtYWxpZ25lZCBhbmQgQGxlbiA9IDAKK21hbmFnZXMgdG8gZGVmZWF0IHRoZSB0YWlsLW1hc2tpbmcgbG9naWMgYW5kIGJlaGF2ZSBhcyBpZiBAbGVuID0gOC4KK0ZvciBhIHplcm8gbGVuZ3RoIGl0IGRvZXNuJ3QgbWFrZSBtdWNoIHNlbnNlIHRvIGRlZmVyZW5jZSBAYnVmZiBhbnl3YXksCitzbyBqdXN0IGFkZCBhbiBlYXJseSByZXR1cm4gKHdoaWNoIGhhcyBlc3NlbnRpYWxseSB6ZXJvIGltcGFjdCBvbgorcGVyZm9ybWFuY2UpLgorCitTaWduZWQtb2ZmLWJ5OiBSb2JpbiBNdXJwaHkgPHJvYmluLm11cnBoeUBhcm0uY29tPgorU2lnbmVkLW9mZi1ieTogV2lsbCBEZWFjb24gPHdpbGxAa2VybmVsLm9yZz4KKy0tLQorCistLS0gYS9hcmNoL2FybTY0L2xpYi9jc3VtLmMKKysrKyBiL2FyY2gvYXJtNjQvbGliL2NzdW0uYworQEAgLTIwLDYgKzIwLDkgQEAgdW5zaWduZWQgaW50IGRvX2NzdW0oY29uc3QgdW5zaWduZWQgY2hhcgorIAljb25zdCB1NjQgKnB0cjsKKyAJdTY0IGRhdGEsIHN1bTY0ID0gMDsKKyAKKysJaWYgKHVubGlrZWx5KGxlbiA9PSAwKSkKKysJCXJldHVybiAwOworKworIAlvZmZzZXQgPSAodW5zaWduZWQgbG9uZylidWZmICYgNzsKKyAJLyoKKyAJICogVGhpcyBpcyB0byBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXMgc2FmZSwgc2luY2Ugcm91bmRpbmcgZG93biBjYW5ub3QKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMDEtY3J5cHRvLWxpYi10aWR5LXVwLWxpYi1jcnlwdG8tS2NvbmZpZy1hbmQtTWFrZWZpbGUucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDAxLWNyeXB0by1saWItdGlkeS11cC1saWItY3J5cHRvLUtjb25maWctYW5kLU1ha2VmaWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMmUxOGEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDAxLWNyeXB0by1saWItdGlkeS11cC1saWItY3J5cHRvLUtjb25maWctYW5kLU1ha2VmaWxlLnBhdGNoCkBAIC0wLDAgKzEsMTEyIEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgorRGF0ZTogRnJpLCA4IE5vdiAyMDE5IDEzOjIyOjA3ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyeXB0bzogbGliIC0gdGlkeSB1cCBsaWIvY3J5cHRvIEtjb25maWcgYW5kIE1ha2VmaWxlCisKK2NvbW1pdCA3NDZiMmUwMjRjNjdhYTYwNWFjMTJkMTM1Y2Q3MDg1YTQ5Y2Y5ZGM0IHVwc3RyZWFtLgorCitJbiBwcmVwYXJhdGlvbiBvZiBpbnRyb2R1Y2luZyBhIHNldCBvZiBjcnlwdG8gbGlicmFyeSBpbnRlcmZhY2VzLCB0aWR5Cit1cCB0aGUgTWFrZWZpbGUgYW5kIHNwbGl0IG9mZiB0aGUgS2NvbmZpZyBzeW1ib2xzIGludG8gYSBzZXBhcmF0ZSBmaWxlLgorCitTaWduZWQtb2ZmLWJ5OiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgorU2lnbmVkLW9mZi1ieTogSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBjcnlwdG8vS2NvbmZpZyAgICAgIHwgMTMgKy0tLS0tLS0tLS0tLQorIGxpYi9jcnlwdG8vS2NvbmZpZyAgfCAxNSArKysrKysrKysrKysrKysKKyBsaWIvY3J5cHRvL01ha2VmaWxlIHwgMTYgKysrKysrKystLS0tLS0tLQorIDMgZmlsZXMgY2hhbmdlZCwgMjQgaW5zZXJ0aW9ucygrKSwgMjAgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9jcnlwdG8vS2NvbmZpZworCistLS0gYS9jcnlwdG8vS2NvbmZpZworKysrIGIvY3J5cHRvL0tjb25maWcKK0BAIC04NzgsOSArODc4LDYgQEAgY29uZmlnIENSWVBUT19TSEExX1BQQ19TUEUKKyAJICBTSEEtMSBzZWN1cmUgaGFzaCBzdGFuZGFyZCAoREZJUFMgMTgwLTQpIGltcGxlbWVudGVkCisgCSAgdXNpbmcgcG93ZXJwYyBTUEUgU0lNRCBpbnN0cnVjdGlvbiBzZXQuCisgCistY29uZmlnIENSWVBUT19MSUJfU0hBMjU2CistCXRyaXN0YXRlCistCisgY29uZmlnIENSWVBUT19TSEEyNTYKKyAJdHJpc3RhdGUgIlNIQTIyNCBhbmQgU0hBMjU2IGRpZ2VzdCBhbGdvcml0aG0iCisgCXNlbGVjdCBDUllQVE9fSEFTSAorQEAgLTEwMTksOSArMTAxNiw2IEBAIGNvbmZpZyBDUllQVE9fR0hBU0hfQ0xNVUxfTklfSU5URUwKKyAKKyBjb21tZW50ICJDaXBoZXJzIgorIAorLWNvbmZpZyBDUllQVE9fTElCX0FFUworLQl0cmlzdGF0ZQorLQorIGNvbmZpZyBDUllQVE9fQUVTCisgCXRyaXN0YXRlICJBRVMgY2lwaGVyIGFsZ29yaXRobXMiCisgCXNlbGVjdCBDUllQVE9fQUxHQVBJCitAQCAtMTE1MCw5ICsxMTQ0LDYgQEAgY29uZmlnIENSWVBUT19BTlVCSVMKKyAJICA8aHR0cHM6Ly93d3cuY29zaWMuZXNhdC5rdWxldXZlbi5iZS9uZXNzaWUvcmVwb3J0cy8+CisgCSAgPGh0dHA6Ly93d3cubGFyYy51c3AuYnIvfnBiYXJyZXRvL0FudWJpc1BhZ2UuaHRtbD4KKyAKKy1jb25maWcgQ1JZUFRPX0xJQl9BUkM0CistCXRyaXN0YXRlCistCisgY29uZmlnIENSWVBUT19BUkM0CisgCXRyaXN0YXRlICJBUkM0IGNpcGhlciBhbGdvcml0aG0iCisgCXNlbGVjdCBDUllQVE9fQkxLQ0lQSEVSCitAQCAtMTMzOSw5ICsxMzMwLDYgQEAgY29uZmlnIENSWVBUT19DQVNUNl9BVlhfWDg2XzY0CisgCSAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIENhc3Q2IGNpcGhlciBhbGdvcml0aG0gdGhhdCBwcm9jZXNzZXMKKyAJICBlaWdodCBibG9ja3MgcGFyYWxsZWwgdXNpbmcgdGhlIEFWWCBpbnN0cnVjdGlvbiBzZXQuCisgCistY29uZmlnIENSWVBUT19MSUJfREVTCistCXRyaXN0YXRlCistCisgY29uZmlnIENSWVBUT19ERVMKKyAJdHJpc3RhdGUgIkRFUyBhbmQgVHJpcGxlIERFUyBFREUgY2lwaGVyIGFsZ29yaXRobXMiCisgCXNlbGVjdCBDUllQVE9fQUxHQVBJCitAQCAtMTg0NSw2ICsxODMzLDcgQEAgY29uZmlnIENSWVBUT19TVEFUUworIGNvbmZpZyBDUllQVE9fSEFTSF9JTkZPCisgCWJvb2wKKyAKKytzb3VyY2UgImxpYi9jcnlwdG8vS2NvbmZpZyIKKyBzb3VyY2UgImRyaXZlcnMvY3J5cHRvL0tjb25maWciCisgc291cmNlICJjcnlwdG8vYXN5bW1ldHJpY19rZXlzL0tjb25maWciCisgc291cmNlICJjZXJ0cy9LY29uZmlnIgorLS0tIC9kZXYvbnVsbAorKysrIGIvbGliL2NyeXB0by9LY29uZmlnCitAQCAtMCwwICsxLDE1IEBACisrIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorKworK2NvbW1lbnQgIkNyeXB0byBsaWJyYXJ5IHJvdXRpbmVzIgorKworK2NvbmZpZyBDUllQVE9fTElCX0FFUworKwl0cmlzdGF0ZQorKworK2NvbmZpZyBDUllQVE9fTElCX0FSQzQKKysJdHJpc3RhdGUKKysKKytjb25maWcgQ1JZUFRPX0xJQl9ERVMKKysJdHJpc3RhdGUKKysKKytjb25maWcgQ1JZUFRPX0xJQl9TSEEyNTYKKysJdHJpc3RhdGUKKy0tLSBhL2xpYi9jcnlwdG8vTWFrZWZpbGUKKysrKyBiL2xpYi9jcnlwdG8vTWFrZWZpbGUKK0BAIC0xLDEzICsxLDEzIEBACisgIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorIAorLW9iai0kKENPTkZJR19DUllQVE9fTElCX0FFUykgKz0gbGliYWVzLm8KKy1saWJhZXMteSA6PSBhZXMubworK29iai0kKENPTkZJR19DUllQVE9fTElCX0FFUykJCQkrPSBsaWJhZXMubworK2xpYmFlcy15CQkJCQk6PSBhZXMubworIAorLW9iai0kKENPTkZJR19DUllQVE9fTElCX0FSQzQpICs9IGxpYmFyYzQubworLWxpYmFyYzQteSA6PSBhcmM0Lm8KKytvYmotJChDT05GSUdfQ1JZUFRPX0xJQl9BUkM0KQkJCSs9IGxpYmFyYzQubworK2xpYmFyYzQteQkJCQkJOj0gYXJjNC5vCisgCistb2JqLSQoQ09ORklHX0NSWVBUT19MSUJfREVTKSArPSBsaWJkZXMubworLWxpYmRlcy15IDo9IGRlcy5vCisrb2JqLSQoQ09ORklHX0NSWVBUT19MSUJfREVTKQkJCSs9IGxpYmRlcy5vCisrbGliZGVzLXkJCQkJCTo9IGRlcy5vCisgCistb2JqLSQoQ09ORklHX0NSWVBUT19MSUJfU0hBMjU2KSArPSBsaWJzaGEyNTYubworLWxpYnNoYTI1Ni15IDo9IHNoYTI1Ni5vCisrb2JqLSQoQ09ORklHX0NSWVBUT19MSUJfU0hBMjU2KQkJCSs9IGxpYnNoYTI1Ni5vCisrbGlic2hhMjU2LXkJCQkJCTo9IHNoYTI1Ni5vCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDAyLWNyeXB0by1jaGFjaGEtbW92ZS1leGlzdGluZy1saWJyYXJ5LWNvZGUtaW50by1saWItY3IucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDAyLWNyeXB0by1jaGFjaGEtbW92ZS1leGlzdGluZy1saWJyYXJ5LWNvZGUtaW50by1saWItY3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc3YjU4NAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMDItY3J5cHRvLWNoYWNoYS1tb3ZlLWV4aXN0aW5nLWxpYnJhcnktY29kZS1pbnRvLWxpYi1jci5wYXRjaApAQCAtMCwwICsxLDY2OCBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQXJkIEJpZXNoZXV2ZWwgPGFyZGJAa2VybmVsLm9yZz4KK0RhdGU6IEZyaSwgOCBOb3YgMjAxOSAxMzoyMjowOCArMDEwMAorU3ViamVjdDogW1BBVENIXSBjcnlwdG86IGNoYWNoYSAtIG1vdmUgZXhpc3RpbmcgbGlicmFyeSBjb2RlIGludG8gbGliL2NyeXB0bworCitjb21taXQgNWZiOGVmMjU4MDNlZjMzZTJlYjYwYjYyNjQzNTgyOGI5MzdiZWQ3NSB1cHN0cmVhbS4KKworQ3VycmVudGx5LCBvdXIgZ2VuZXJpYyBDaGFDaGEgaW1wbGVtZW50YXRpb24gY29uc2lzdHMgb2YgYSBwZXJtdXRlCitmdW5jdGlvbiBpbiBsaWIvY2hhY2hhLmMgdGhhdCBvcGVyYXRlcyBvbiB0aGUgNjQtYnl0ZSBDaGFDaGEgc3RhdGUKK2RpcmVjdGx5IFthbmQgd2hpY2ggaXMgYWx3YXlzIGluY2x1ZGVkIGludG8gdGhlIGNvcmUga2VybmVsIHNpbmNlIGl0CitpcyB1c2VkIGJ5IHRoZSAvZGV2L3JhbmRvbSBkcml2ZXJdLCBhbmQgdGhlIGNyeXB0byBBUEkgcGx1bWJpbmcgdG8KK2V4cG9zZSBpdCBhcyBhIHNrY2lwaGVyLgorCitJbiBvcmRlciB0byBzdXBwb3J0IGluLWtlcm5lbCB1c2VycyB0aGF0IG5lZWQgdGhlIENoYUNoYSBzdHJlYW1jaXBoZXIKK2J1dCBoYXZlIG5vIG5lZWQgW29yIHRvbGVyYW5jZV0gZm9yIGdvaW5nIHRocm91Z2ggdGhlIGFic3RyYWN0aW9ucyBvZgordGhlIGNyeXB0byBBUEksIGxldCdzIGV4cG9zZSB0aGUgc3RyZWFtY2lwaGVyIGJpdHMgdmlhIGEgbGlicmFyeSBBUEkKK2FzIHdlbGwsIGluIGEgd2F5IHRoYXQgcGVybWl0cyB0aGUgaW1wbGVtZW50YXRpb24gdG8gYmUgc3VwZXJzZWRlZCBieQorYW4gYXJjaGl0ZWN0dXJlIHNwZWNpZmljIG9uZSBpZiBwcm92aWRlZC4KKworU28gbW92ZSB0aGUgc3RyZWFtY2lwaGVyIGNvZGUgaW50byBhIHNlcGFyYXRlIG1vZHVsZSBpbiBsaWIvY3J5cHRvLAorYW5kIGV4cG9zZSB0aGUgaW5pdCgpIGFuZCBjcnlwdCgpIHJvdXRpbmVzIHRvIHVzZXJzIG9mIHRoZSBsaWJyYXJ5LgorCitTaWduZWQtb2ZmLWJ5OiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgorU2lnbmVkLW9mZi1ieTogSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBhcmNoL2FybS9jcnlwdG8vY2hhY2hhLW5lb24tZ2x1ZS5jICAgfCAgMiArLQorIGFyY2gvYXJtNjQvY3J5cHRvL2NoYWNoYS1uZW9uLWdsdWUuYyB8ICAyICstCisgYXJjaC94ODYvY3J5cHRvL2NoYWNoYV9nbHVlLmMgICAgICAgIHwgIDIgKy0KKyBjcnlwdG8vS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgfCAgMSArCisgY3J5cHRvL2NoYWNoYV9nZW5lcmljLmMgICAgICAgICAgICAgIHwgNjAgKystLS0tLS0tLS0tLS0tLS0tLS0tLQorIGluY2x1ZGUvY3J5cHRvL2NoYWNoYS5oICAgICAgICAgICAgICB8IDc3ICsrKysrKysrKysrKysrKysrKysrKystLS0tLS0KKyBpbmNsdWRlL2NyeXB0by9pbnRlcm5hbC9jaGFjaGEuaCAgICAgfCA1MyArKysrKysrKysrKysrKysrKysrCisgbGliL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMgKy0KKyBsaWIvY3J5cHRvL0tjb25maWcgICAgICAgICAgICAgICAgICAgfCAyNiArKysrKysrKysrCisgbGliL2NyeXB0by9NYWtlZmlsZSAgICAgICAgICAgICAgICAgIHwgIDQgKysKKyBsaWIveyA9PiBjcnlwdG99L2NoYWNoYS5jICAgICAgICAgICAgfCAyMCArKysrLS0tLQorIGxpYi9jcnlwdG8vbGliY2hhY2hhLmMgICAgICAgICAgICAgICB8IDM1ICsrKysrKysrKysrKysKKyAxMiBmaWxlcyBjaGFuZ2VkLCAxOTkgaW5zZXJ0aW9ucygrKSwgODYgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvY3J5cHRvL2ludGVybmFsL2NoYWNoYS5oCisgcmVuYW1lIGxpYi97ID0+IGNyeXB0b30vY2hhY2hhLmMgKDg4JSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2NyeXB0by9saWJjaGFjaGEuYworCistLS0gYS9hcmNoL2FybS9jcnlwdG8vY2hhY2hhLW5lb24tZ2x1ZS5jCisrKysgYi9hcmNoL2FybS9jcnlwdG8vY2hhY2hhLW5lb24tZ2x1ZS5jCitAQCAtMjAsNyArMjAsNyBAQAorICAqLworIAorICNpbmNsdWRlIDxjcnlwdG8vYWxnYXBpLmg+CistI2luY2x1ZGUgPGNyeXB0by9jaGFjaGEuaD4KKysjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2NoYWNoYS5oPgorICNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvc2ltZC5oPgorICNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvc2tjaXBoZXIuaD4KKyAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CistLS0gYS9hcmNoL2FybTY0L2NyeXB0by9jaGFjaGEtbmVvbi1nbHVlLmMKKysrKyBiL2FyY2gvYXJtNjQvY3J5cHRvL2NoYWNoYS1uZW9uLWdsdWUuYworQEAgLTIwLDcgKzIwLDcgQEAKKyAgKi8KKyAKKyAjaW5jbHVkZSA8Y3J5cHRvL2FsZ2FwaS5oPgorLSNpbmNsdWRlIDxjcnlwdG8vY2hhY2hhLmg+CisrI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9jaGFjaGEuaD4KKyAjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL3NpbWQuaD4KKyAjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL3NrY2lwaGVyLmg+CisgI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorLS0tIGEvYXJjaC94ODYvY3J5cHRvL2NoYWNoYV9nbHVlLmMKKysrKyBiL2FyY2gveDg2L2NyeXB0by9jaGFjaGFfZ2x1ZS5jCitAQCAtNyw3ICs3LDcgQEAKKyAgKi8KKyAKKyAjaW5jbHVkZSA8Y3J5cHRvL2FsZ2FwaS5oPgorLSNpbmNsdWRlIDxjcnlwdG8vY2hhY2hhLmg+CisrI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9jaGFjaGEuaD4KKyAjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL3NpbWQuaD4KKyAjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL3NrY2lwaGVyLmg+CisgI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorLS0tIGEvY3J5cHRvL0tjb25maWcKKysrKyBiL2NyeXB0by9LY29uZmlnCitAQCAtMTM5Myw2ICsxMzkzLDcgQEAgY29uZmlnIENSWVBUT19TQUxTQTIwCisgCisgY29uZmlnIENSWVBUT19DSEFDSEEyMAorIAl0cmlzdGF0ZSAiQ2hhQ2hhIHN0cmVhbSBjaXBoZXIgYWxnb3JpdGhtcyIKKysJc2VsZWN0IENSWVBUT19MSUJfQ0hBQ0hBX0dFTkVSSUMKKyAJc2VsZWN0IENSWVBUT19CTEtDSVBIRVIKKyAJaGVscAorIAkgIFRoZSBDaGFDaGEyMCwgWENoYUNoYTIwLCBhbmQgWENoYUNoYTEyIHN0cmVhbSBjaXBoZXIgYWxnb3JpdGhtcy4KKy0tLSBhL2NyeXB0by9jaGFjaGFfZ2VuZXJpYy5jCisrKysgYi9jcnlwdG8vY2hhY2hhX2dlbmVyaWMuYworQEAgLTgsMjkgKzgsMTAgQEAKKyAKKyAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorICNpbmNsdWRlIDxjcnlwdG8vYWxnYXBpLmg+CistI2luY2x1ZGUgPGNyeXB0by9jaGFjaGEuaD4KKysjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2NoYWNoYS5oPgorICNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvc2tjaXBoZXIuaD4KKyAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisgCistc3RhdGljIHZvaWQgY2hhY2hhX2RvY3J5cHQodTMyICpzdGF0ZSwgdTggKmRzdCwgY29uc3QgdTggKnNyYywKKy0JCQkgICB1bnNpZ25lZCBpbnQgYnl0ZXMsIGludCBucm91bmRzKQorLXsKKy0JLyogYWxpZ25lZCB0byBwb3RlbnRpYWxseSBzcGVlZCB1cCBjcnlwdG9feG9yKCkgKi8KKy0JdTggc3RyZWFtW0NIQUNIQV9CTE9DS19TSVpFXSBfX2FsaWduZWQoc2l6ZW9mKGxvbmcpKTsKKy0KKy0Jd2hpbGUgKGJ5dGVzID49IENIQUNIQV9CTE9DS19TSVpFKSB7CistCQljaGFjaGFfYmxvY2soc3RhdGUsIHN0cmVhbSwgbnJvdW5kcyk7CistCQljcnlwdG9feG9yX2NweShkc3QsIHNyYywgc3RyZWFtLCBDSEFDSEFfQkxPQ0tfU0laRSk7CistCQlieXRlcyAtPSBDSEFDSEFfQkxPQ0tfU0laRTsKKy0JCWRzdCArPSBDSEFDSEFfQkxPQ0tfU0laRTsKKy0JCXNyYyArPSBDSEFDSEFfQkxPQ0tfU0laRTsKKy0JfQorLQlpZiAoYnl0ZXMpIHsKKy0JCWNoYWNoYV9ibG9jayhzdGF0ZSwgc3RyZWFtLCBucm91bmRzKTsKKy0JCWNyeXB0b194b3JfY3B5KGRzdCwgc3JjLCBzdHJlYW0sIGJ5dGVzKTsKKy0JfQorLX0KKy0KKyBzdGF0aWMgaW50IGNoYWNoYV9zdHJlYW1feG9yKHN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0ICpyZXEsCisgCQkJICAgICBjb25zdCBzdHJ1Y3QgY2hhY2hhX2N0eCAqY3R4LCBjb25zdCB1OCAqaXYpCisgeworQEAgLTQ4LDggKzI5LDggQEAgc3RhdGljIGludCBjaGFjaGFfc3RyZWFtX3hvcihzdHJ1Y3Qgc2tjaQorIAkJaWYgKG5ieXRlcyA8IHdhbGsudG90YWwpCisgCQkJbmJ5dGVzID0gcm91bmRfZG93bihuYnl0ZXMsIENIQUNIQV9CTE9DS19TSVpFKTsKKyAKKy0JCWNoYWNoYV9kb2NyeXB0KHN0YXRlLCB3YWxrLmRzdC52aXJ0LmFkZHIsIHdhbGsuc3JjLnZpcnQuYWRkciwKKy0JCQkgICAgICAgbmJ5dGVzLCBjdHgtPm5yb3VuZHMpOworKwkJY2hhY2hhX2NyeXB0X2dlbmVyaWMoc3RhdGUsIHdhbGsuZHN0LnZpcnQuYWRkciwKKysJCQkJICAgICB3YWxrLnNyYy52aXJ0LmFkZHIsIG5ieXRlcywgY3R4LT5ucm91bmRzKTsKKyAJCWVyciA9IHNrY2lwaGVyX3dhbGtfZG9uZSgmd2Fsaywgd2Fsay5uYnl0ZXMgLSBuYnl0ZXMpOworIAl9CisgCitAQCAtNTgsNDEgKzM5LDEwIEBAIHN0YXRpYyBpbnQgY2hhY2hhX3N0cmVhbV94b3Ioc3RydWN0IHNrY2kKKyAKKyB2b2lkIGNyeXB0b19jaGFjaGFfaW5pdCh1MzIgKnN0YXRlLCBjb25zdCBzdHJ1Y3QgY2hhY2hhX2N0eCAqY3R4LCBjb25zdCB1OCAqaXYpCisgeworLQlzdGF0ZVswXSAgPSAweDYxNzA3ODY1OyAvKiAiZXhwYSIgKi8KKy0Jc3RhdGVbMV0gID0gMHgzMzIwNjQ2ZTsgLyogIm5kIDMiICovCistCXN0YXRlWzJdICA9IDB4Nzk2MjJkMzI7IC8qICIyLWJ5IiAqLworLQlzdGF0ZVszXSAgPSAweDZiMjA2NTc0OyAvKiAidGUgayIgKi8KKy0Jc3RhdGVbNF0gID0gY3R4LT5rZXlbMF07CistCXN0YXRlWzVdICA9IGN0eC0+a2V5WzFdOworLQlzdGF0ZVs2XSAgPSBjdHgtPmtleVsyXTsKKy0Jc3RhdGVbN10gID0gY3R4LT5rZXlbM107CistCXN0YXRlWzhdICA9IGN0eC0+a2V5WzRdOworLQlzdGF0ZVs5XSAgPSBjdHgtPmtleVs1XTsKKy0Jc3RhdGVbMTBdID0gY3R4LT5rZXlbNl07CistCXN0YXRlWzExXSA9IGN0eC0+a2V5WzddOworLQlzdGF0ZVsxMl0gPSBnZXRfdW5hbGlnbmVkX2xlMzIoaXYgKyAgMCk7CistCXN0YXRlWzEzXSA9IGdldF91bmFsaWduZWRfbGUzMihpdiArICA0KTsKKy0Jc3RhdGVbMTRdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGl2ICsgIDgpOworLQlzdGF0ZVsxNV0gPSBnZXRfdW5hbGlnbmVkX2xlMzIoaXYgKyAxMik7CisrCWNoYWNoYV9pbml0X2dlbmVyaWMoc3RhdGUsIGN0eC0+a2V5LCBpdik7CisgfQorIEVYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19jaGFjaGFfaW5pdCk7CisgCistc3RhdGljIGludCBjaGFjaGFfc2V0a2V5KHN0cnVjdCBjcnlwdG9fc2tjaXBoZXIgKnRmbSwgY29uc3QgdTggKmtleSwKKy0JCQkgdW5zaWduZWQgaW50IGtleXNpemUsIGludCBucm91bmRzKQorLXsKKy0Jc3RydWN0IGNoYWNoYV9jdHggKmN0eCA9IGNyeXB0b19za2NpcGhlcl9jdHgodGZtKTsKKy0JaW50IGk7CistCistCWlmIChrZXlzaXplICE9IENIQUNIQV9LRVlfU0laRSkKKy0JCXJldHVybiAtRUlOVkFMOworLQorLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjdHgtPmtleSk7IGkrKykKKy0JCWN0eC0+a2V5W2ldID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGtleSArIGkgKiBzaXplb2YodTMyKSk7CistCistCWN0eC0+bnJvdW5kcyA9IG5yb3VuZHM7CistCXJldHVybiAwOworLX0KKy0KKyBpbnQgY3J5cHRvX2NoYWNoYTIwX3NldGtleShzdHJ1Y3QgY3J5cHRvX3NrY2lwaGVyICp0Zm0sIGNvbnN0IHU4ICprZXksCisgCQkJICAgdW5zaWduZWQgaW50IGtleXNpemUpCisgeworQEAgLTEyNiw3ICs3Niw3IEBAIGludCBjcnlwdG9feGNoYWNoYV9jcnlwdChzdHJ1Y3Qgc2tjaXBoZXIKKyAKKyAJLyogQ29tcHV0ZSB0aGUgc3Via2V5IGdpdmVuIHRoZSBvcmlnaW5hbCBrZXkgYW5kIGZpcnN0IDEyOCBub25jZSBiaXRzICovCisgCWNyeXB0b19jaGFjaGFfaW5pdChzdGF0ZSwgY3R4LCByZXEtPml2KTsKKy0JaGNoYWNoYV9ibG9jayhzdGF0ZSwgc3ViY3R4LmtleSwgY3R4LT5ucm91bmRzKTsKKysJaGNoYWNoYV9ibG9ja19nZW5lcmljKHN0YXRlLCBzdWJjdHgua2V5LCBjdHgtPm5yb3VuZHMpOworIAlzdWJjdHgubnJvdW5kcyA9IGN0eC0+bnJvdW5kczsKKyAKKyAJLyogQnVpbGQgdGhlIHJlYWwgSVYgKi8KKy0tLSBhL2luY2x1ZGUvY3J5cHRvL2NoYWNoYS5oCisrKysgYi9pbmNsdWRlL2NyeXB0by9jaGFjaGEuaAorQEAgLTE1LDkgKzE1LDggQEAKKyAjaWZuZGVmIF9DUllQVE9fQ0hBQ0hBX0gKKyAjZGVmaW5lIF9DUllQVE9fQ0hBQ0hBX0gKKyAKKy0jaW5jbHVkZSA8Y3J5cHRvL3NrY2lwaGVyLmg+CisrI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKyAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKy0jaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisgCisgLyogMzItYml0IHN0cmVhbSBwb3NpdGlvbiwgdGhlbiA5Ni1iaXQgbm9uY2UgKFJGQzc1MzkgY29udmVudGlvbikgKi8KKyAjZGVmaW5lIENIQUNIQV9JVl9TSVpFCQkxNgorQEAgLTI5LDI2ICsyOCw3MCBAQAorIC8qIDE5Mi1iaXQgbm9uY2UsIHRoZW4gNjQtYml0IHN0cmVhbSBwb3NpdGlvbiAqLworICNkZWZpbmUgWENIQUNIQV9JVl9TSVpFCQkzMgorIAorLXN0cnVjdCBjaGFjaGFfY3R4IHsKKy0JdTMyIGtleVs4XTsKKy0JaW50IG5yb3VuZHM7CistfTsKKy0KKy12b2lkIGNoYWNoYV9ibG9jayh1MzIgKnN0YXRlLCB1OCAqc3RyZWFtLCBpbnQgbnJvdW5kcyk7Cisrdm9pZCBjaGFjaGFfYmxvY2tfZ2VuZXJpYyh1MzIgKnN0YXRlLCB1OCAqc3RyZWFtLCBpbnQgbnJvdW5kcyk7Cisgc3RhdGljIGlubGluZSB2b2lkIGNoYWNoYTIwX2Jsb2NrKHUzMiAqc3RhdGUsIHU4ICpzdHJlYW0pCisgeworLQljaGFjaGFfYmxvY2soc3RhdGUsIHN0cmVhbSwgMjApOworKwljaGFjaGFfYmxvY2tfZ2VuZXJpYyhzdGF0ZSwgc3RyZWFtLCAyMCk7CisgfQorLXZvaWQgaGNoYWNoYV9ibG9jayhjb25zdCB1MzIgKmluLCB1MzIgKm91dCwgaW50IG5yb3VuZHMpOworIAorLXZvaWQgY3J5cHRvX2NoYWNoYV9pbml0KHUzMiAqc3RhdGUsIGNvbnN0IHN0cnVjdCBjaGFjaGFfY3R4ICpjdHgsIGNvbnN0IHU4ICppdik7Cisrdm9pZCBoY2hhY2hhX2Jsb2NrX2FyY2goY29uc3QgdTMyICpzdGF0ZSwgdTMyICpvdXQsIGludCBucm91bmRzKTsKKyt2b2lkIGhjaGFjaGFfYmxvY2tfZ2VuZXJpYyhjb25zdCB1MzIgKnN0YXRlLCB1MzIgKm91dCwgaW50IG5yb3VuZHMpOworKworK3N0YXRpYyBpbmxpbmUgdm9pZCBoY2hhY2hhX2Jsb2NrKGNvbnN0IHUzMiAqc3RhdGUsIHUzMiAqb3V0LCBpbnQgbnJvdW5kcykKKyt7CisrCWlmIChJU19FTkFCTEVEKENPTkZJR19DUllQVE9fQVJDSF9IQVZFX0xJQl9DSEFDSEEpKQorKwkJaGNoYWNoYV9ibG9ja19hcmNoKHN0YXRlLCBvdXQsIG5yb3VuZHMpOworKwllbHNlCisrCQloY2hhY2hhX2Jsb2NrX2dlbmVyaWMoc3RhdGUsIG91dCwgbnJvdW5kcyk7CisrfQorIAorLWludCBjcnlwdG9fY2hhY2hhMjBfc2V0a2V5KHN0cnVjdCBjcnlwdG9fc2tjaXBoZXIgKnRmbSwgY29uc3QgdTggKmtleSwKKy0JCQkgICB1bnNpZ25lZCBpbnQga2V5c2l6ZSk7CistaW50IGNyeXB0b19jaGFjaGExMl9zZXRrZXkoc3RydWN0IGNyeXB0b19za2NpcGhlciAqdGZtLCBjb25zdCB1OCAqa2V5LAorLQkJCSAgIHVuc2lnbmVkIGludCBrZXlzaXplKTsKKyt2b2lkIGNoYWNoYV9pbml0X2FyY2godTMyICpzdGF0ZSwgY29uc3QgdTMyICprZXksIGNvbnN0IHU4ICppdik7Cisrc3RhdGljIGlubGluZSB2b2lkIGNoYWNoYV9pbml0X2dlbmVyaWModTMyICpzdGF0ZSwgY29uc3QgdTMyICprZXksIGNvbnN0IHU4ICppdikKKyt7CisrCXN0YXRlWzBdICA9IDB4NjE3MDc4NjU7IC8qICJleHBhIiAqLworKwlzdGF0ZVsxXSAgPSAweDMzMjA2NDZlOyAvKiAibmQgMyIgKi8KKysJc3RhdGVbMl0gID0gMHg3OTYyMmQzMjsgLyogIjItYnkiICovCisrCXN0YXRlWzNdICA9IDB4NmIyMDY1NzQ7IC8qICJ0ZSBrIiAqLworKwlzdGF0ZVs0XSAgPSBrZXlbMF07CisrCXN0YXRlWzVdICA9IGtleVsxXTsKKysJc3RhdGVbNl0gID0ga2V5WzJdOworKwlzdGF0ZVs3XSAgPSBrZXlbM107CisrCXN0YXRlWzhdICA9IGtleVs0XTsKKysJc3RhdGVbOV0gID0ga2V5WzVdOworKwlzdGF0ZVsxMF0gPSBrZXlbNl07CisrCXN0YXRlWzExXSA9IGtleVs3XTsKKysJc3RhdGVbMTJdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGl2ICsgIDApOworKwlzdGF0ZVsxM10gPSBnZXRfdW5hbGlnbmVkX2xlMzIoaXYgKyAgNCk7CisrCXN0YXRlWzE0XSA9IGdldF91bmFsaWduZWRfbGUzMihpdiArICA4KTsKKysJc3RhdGVbMTVdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGl2ICsgMTIpOworK30KKyAKKy1pbnQgY3J5cHRvX2NoYWNoYV9jcnlwdChzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxKTsKKy1pbnQgY3J5cHRvX3hjaGFjaGFfY3J5cHQoc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSk7Cisrc3RhdGljIGlubGluZSB2b2lkIGNoYWNoYV9pbml0KHUzMiAqc3RhdGUsIGNvbnN0IHUzMiAqa2V5LCBjb25zdCB1OCAqaXYpCisreworKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfQ1JZUFRPX0FSQ0hfSEFWRV9MSUJfQ0hBQ0hBKSkKKysJCWNoYWNoYV9pbml0X2FyY2goc3RhdGUsIGtleSwgaXYpOworKwllbHNlCisrCQljaGFjaGFfaW5pdF9nZW5lcmljKHN0YXRlLCBrZXksIGl2KTsKKyt9CisrCisrdm9pZCBjaGFjaGFfY3J5cHRfYXJjaCh1MzIgKnN0YXRlLCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjLAorKwkJICAgICAgIHVuc2lnbmVkIGludCBieXRlcywgaW50IG5yb3VuZHMpOworK3ZvaWQgY2hhY2hhX2NyeXB0X2dlbmVyaWModTMyICpzdGF0ZSwgdTggKmRzdCwgY29uc3QgdTggKnNyYywKKysJCQkgIHVuc2lnbmVkIGludCBieXRlcywgaW50IG5yb3VuZHMpOworKworK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGFjaGFfY3J5cHQodTMyICpzdGF0ZSwgdTggKmRzdCwgY29uc3QgdTggKnNyYywKKysJCQkJdW5zaWduZWQgaW50IGJ5dGVzLCBpbnQgbnJvdW5kcykKKyt7CisrCWlmIChJU19FTkFCTEVEKENPTkZJR19DUllQVE9fQVJDSF9IQVZFX0xJQl9DSEFDSEEpKQorKwkJY2hhY2hhX2NyeXB0X2FyY2goc3RhdGUsIGRzdCwgc3JjLCBieXRlcywgbnJvdW5kcyk7CisrCWVsc2UKKysJCWNoYWNoYV9jcnlwdF9nZW5lcmljKHN0YXRlLCBkc3QsIHNyYywgYnl0ZXMsIG5yb3VuZHMpOworK30KKysKKytzdGF0aWMgaW5saW5lIHZvaWQgY2hhY2hhMjBfY3J5cHQodTMyICpzdGF0ZSwgdTggKmRzdCwgY29uc3QgdTggKnNyYywKKysJCQkJICB1bnNpZ25lZCBpbnQgYnl0ZXMpCisreworKwljaGFjaGFfY3J5cHQoc3RhdGUsIGRzdCwgc3JjLCBieXRlcywgMjApOworK30KKyAKKyAjZW5kaWYgLyogX0NSWVBUT19DSEFDSEFfSCAqLworLS0tIC9kZXYvbnVsbAorKysrIGIvaW5jbHVkZS9jcnlwdG8vaW50ZXJuYWwvY2hhY2hhLmgKK0BAIC0wLDAgKzEsNTMgQEAKKysvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworKworKyNpZm5kZWYgX0NSWVBUT19JTlRFUk5BTF9DSEFDSEFfSAorKyNkZWZpbmUgX0NSWVBUT19JTlRFUk5BTF9DSEFDSEFfSAorKworKyNpbmNsdWRlIDxjcnlwdG8vY2hhY2hhLmg+CisrI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9za2NpcGhlci5oPgorKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKysKKytzdHJ1Y3QgY2hhY2hhX2N0eCB7CisrCXUzMiBrZXlbOF07CisrCWludCBucm91bmRzOworK307CisrCisrdm9pZCBjcnlwdG9fY2hhY2hhX2luaXQodTMyICpzdGF0ZSwgY29uc3Qgc3RydWN0IGNoYWNoYV9jdHggKmN0eCwgY29uc3QgdTggKml2KTsKKysKKytzdGF0aWMgaW5saW5lIGludCBjaGFjaGFfc2V0a2V5KHN0cnVjdCBjcnlwdG9fc2tjaXBoZXIgKnRmbSwgY29uc3QgdTggKmtleSwKKysJCQkJdW5zaWduZWQgaW50IGtleXNpemUsIGludCBucm91bmRzKQorK3sKKysJc3RydWN0IGNoYWNoYV9jdHggKmN0eCA9IGNyeXB0b19za2NpcGhlcl9jdHgodGZtKTsKKysJaW50IGk7CisrCisrCWlmIChrZXlzaXplICE9IENIQUNIQV9LRVlfU0laRSkKKysJCXJldHVybiAtRUlOVkFMOworKworKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjdHgtPmtleSk7IGkrKykKKysJCWN0eC0+a2V5W2ldID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGtleSArIGkgKiBzaXplb2YodTMyKSk7CisrCisrCWN0eC0+bnJvdW5kcyA9IG5yb3VuZHM7CisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW5saW5lIGludCBjaGFjaGEyMF9zZXRrZXkoc3RydWN0IGNyeXB0b19za2NpcGhlciAqdGZtLCBjb25zdCB1OCAqa2V5LAorKwkJCQkgIHVuc2lnbmVkIGludCBrZXlzaXplKQorK3sKKysJcmV0dXJuIGNoYWNoYV9zZXRrZXkodGZtLCBrZXksIGtleXNpemUsIDIwKTsKKyt9CisrCisrc3RhdGljIGludCBpbmxpbmUgY2hhY2hhMTJfc2V0a2V5KHN0cnVjdCBjcnlwdG9fc2tjaXBoZXIgKnRmbSwgY29uc3QgdTggKmtleSwKKysJCQkJICB1bnNpZ25lZCBpbnQga2V5c2l6ZSkKKyt7CisrCXJldHVybiBjaGFjaGFfc2V0a2V5KHRmbSwga2V5LCBrZXlzaXplLCAxMik7CisrfQorKworK2ludCBjcnlwdG9fY2hhY2hhMjBfc2V0a2V5KHN0cnVjdCBjcnlwdG9fc2tjaXBoZXIgKnRmbSwgY29uc3QgdTggKmtleSwKKysJCQkgICB1bnNpZ25lZCBpbnQga2V5c2l6ZSk7CisraW50IGNyeXB0b19jaGFjaGExMl9zZXRrZXkoc3RydWN0IGNyeXB0b19za2NpcGhlciAqdGZtLCBjb25zdCB1OCAqa2V5LAorKwkJCSAgIHVuc2lnbmVkIGludCBrZXlzaXplKTsKKysKKytpbnQgY3J5cHRvX2NoYWNoYV9jcnlwdChzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxKTsKKytpbnQgY3J5cHRvX3hjaGFjaGFfY3J5cHQoc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSk7CisrCisrI2VuZGlmIC8qIF9DUllQVE9fQ0hBQ0hBX0ggKi8KKy0tLSBhL2xpYi9NYWtlZmlsZQorKysrIGIvbGliL01ha2VmaWxlCitAQCAtMjYsOCArMjYsNyBAQCBlbmRpZgorIAorIGxpYi15IDo9IGN0eXBlLm8gc3RyaW5nLm8gdnNwcmludGYubyBjbWRsaW5lLm8gXAorIAkgcmJ0cmVlLm8gcmFkaXgtdHJlZS5vIHRpbWVycXVldWUubyB4YXJyYXkubyBcCistCSBpZHIubyBleHRhYmxlLm8gXAorLQkgc2hhMS5vIGNoYWNoYS5vIGlycV9yZWdzLm8gYXJndl9zcGxpdC5vIFwKKysJIGlkci5vIGV4dGFibGUubyBzaGExLm8gaXJxX3JlZ3MubyBhcmd2X3NwbGl0Lm8gXAorIAkgZmxleF9wcm9wb3J0aW9ucy5vIHJhdGVsaW1pdC5vIHNob3dfbWVtLm8gXAorIAkgaXNfc2luZ2xlX3RocmVhZGVkLm8gcGxpc3QubyBkZWNvbXByZXNzLm8ga29iamVjdF91ZXZlbnQubyBcCisgCSBlYXJseWNwaW8ubyBzZXFfYnVmLm8gc2lwaGFzaC5vIGRlY19hbmRfbG9jay5vIFwKKy0tLSBhL2xpYi9jcnlwdG8vS2NvbmZpZworKysrIGIvbGliL2NyeXB0by9LY29uZmlnCitAQCAtOCw2ICs4LDMyIEBAIGNvbmZpZyBDUllQVE9fTElCX0FFUworIGNvbmZpZyBDUllQVE9fTElCX0FSQzQKKyAJdHJpc3RhdGUKKyAKKytjb25maWcgQ1JZUFRPX0FSQ0hfSEFWRV9MSUJfQ0hBQ0hBCisrCXRyaXN0YXRlCisrCWhlbHAKKysJICBEZWNsYXJlcyB3aGV0aGVyIHRoZSBhcmNoaXRlY3R1cmUgcHJvdmlkZXMgYW4gYXJjaC1zcGVjaWZpYworKwkgIGFjY2VsZXJhdGVkIGltcGxlbWVudGF0aW9uIG9mIHRoZSBDaGFDaGEgbGlicmFyeSBpbnRlcmZhY2UsCisrCSAgZWl0aGVyIGJ1aWx0aW4gb3IgYXMgYSBtb2R1bGUuCisrCisrY29uZmlnIENSWVBUT19MSUJfQ0hBQ0hBX0dFTkVSSUMKKysJdHJpc3RhdGUKKysJc2VsZWN0IENSWVBUT19BTEdBUEkKKysJaGVscAorKwkgIFRoaXMgc3ltYm9sIGNhbiBiZSBkZXBlbmRlZCB1cG9uIGJ5IGFyY2ggaW1wbGVtZW50YXRpb25zIG9mIHRoZQorKwkgIENoYUNoYSBsaWJyYXJ5IGludGVyZmFjZSB0aGF0IHJlcXVpcmUgdGhlIGdlbmVyaWMgY29kZSBhcyBhCisrCSAgZmFsbGJhY2ssIGUuZy4sIGZvciBTSU1EIGltcGxlbWVudGF0aW9ucy4gSWYgbm8gYXJjaCBzcGVjaWZpYworKwkgIGltcGxlbWVudGF0aW9uIGlzIGVuYWJsZWQsIHRoaXMgaW1wbGVtZW50YXRpb24gc2VydmVzIHRoZSB1c2VycworKwkgIG9mIENSWVBUT19MSUJfQ0hBQ0hBLgorKworK2NvbmZpZyBDUllQVE9fTElCX0NIQUNIQQorKwl0cmlzdGF0ZSAiQ2hhQ2hhIGxpYnJhcnkgaW50ZXJmYWNlIgorKwlkZXBlbmRzIG9uIENSWVBUT19BUkNIX0hBVkVfTElCX0NIQUNIQSB8fCAhQ1JZUFRPX0FSQ0hfSEFWRV9MSUJfQ0hBQ0hBCisrCXNlbGVjdCBDUllQVE9fTElCX0NIQUNIQV9HRU5FUklDIGlmIENSWVBUT19BUkNIX0hBVkVfTElCX0NIQUNIQT1uCisrCWhlbHAKKysJICBFbmFibGUgdGhlIENoYUNoYSBsaWJyYXJ5IGludGVyZmFjZS4gVGhpcyBpbnRlcmZhY2UgbWF5IGJlIGZ1bGZpbGxlZAorKwkgIGJ5IGVpdGhlciB0aGUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBvciBhbiBhcmNoLXNwZWNpZmljIG9uZSwgaWYgb25lCisrCSAgaXMgYXZhaWxhYmxlIGFuZCBlbmFibGVkLgorKworIGNvbmZpZyBDUllQVE9fTElCX0RFUworIAl0cmlzdGF0ZQorIAorLS0tIGEvbGliL2NyeXB0by9NYWtlZmlsZQorKysrIGIvbGliL2NyeXB0by9NYWtlZmlsZQorQEAgLTEsNSArMSw5IEBACisgIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorIAorKyMgY2hhY2hhIGlzIHVzZWQgYnkgdGhlIC9kZXYvcmFuZG9tIGRyaXZlciB3aGljaCBpcyBhbHdheXMgYnVpbHRpbgorK29iai15CQkJCQkJKz0gY2hhY2hhLm8KKytvYmotJChDT05GSUdfQ1JZUFRPX0xJQl9DSEFDSEFfR0VORVJJQykJCSs9IGxpYmNoYWNoYS5vCisrCisgb2JqLSQoQ09ORklHX0NSWVBUT19MSUJfQUVTKQkJCSs9IGxpYmFlcy5vCisgbGliYWVzLXkJCQkJCTo9IGFlcy5vCisgCistLS0gYS9saWIvY2hhY2hhLmMKKysrKyAvZGV2L251bGwKK0BAIC0xLDExMyArMCwwIEBACistLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKKy0vKgorLSAqIFRoZSAiaGFzaCBmdW5jdGlvbiIgdXNlZCBhcyB0aGUgY29yZSBvZiB0aGUgQ2hhQ2hhIHN0cmVhbSBjaXBoZXIgKFJGQzc1MzkpCistICoKKy0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgTWFydGluIFdpbGxpCistICovCistCistI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorLSNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KKy0jaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CistI2luY2x1ZGUgPGxpbnV4L2NyeXB0b2hhc2guaD4KKy0jaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorLSNpbmNsdWRlIDxjcnlwdG8vY2hhY2hhLmg+CistCistc3RhdGljIHZvaWQgY2hhY2hhX3Blcm11dGUodTMyICp4LCBpbnQgbnJvdW5kcykKKy17CistCWludCBpOworLQorLQkvKiB3aGl0ZWxpc3QgdGhlIGFsbG93ZWQgcm91bmQgY291bnRzICovCistCVdBUk5fT05fT05DRShucm91bmRzICE9IDIwICYmIG5yb3VuZHMgIT0gMTIpOworLQorLQlmb3IgKGkgPSAwOyBpIDwgbnJvdW5kczsgaSArPSAyKSB7CistCQl4WzBdICArPSB4WzRdOyAgICB4WzEyXSA9IHJvbDMyKHhbMTJdIF4geFswXSwgIDE2KTsKKy0JCXhbMV0gICs9IHhbNV07ICAgIHhbMTNdID0gcm9sMzIoeFsxM10gXiB4WzFdLCAgMTYpOworLQkJeFsyXSAgKz0geFs2XTsgICAgeFsxNF0gPSByb2wzMih4WzE0XSBeIHhbMl0sICAxNik7CistCQl4WzNdICArPSB4WzddOyAgICB4WzE1XSA9IHJvbDMyKHhbMTVdIF4geFszXSwgIDE2KTsKKy0KKy0JCXhbOF0gICs9IHhbMTJdOyAgIHhbNF0gID0gcm9sMzIoeFs0XSAgXiB4WzhdLCAgMTIpOworLQkJeFs5XSAgKz0geFsxM107ICAgeFs1XSAgPSByb2wzMih4WzVdICBeIHhbOV0sICAxMik7CistCQl4WzEwXSArPSB4WzE0XTsgICB4WzZdICA9IHJvbDMyKHhbNl0gIF4geFsxMF0sIDEyKTsKKy0JCXhbMTFdICs9IHhbMTVdOyAgIHhbN10gID0gcm9sMzIoeFs3XSAgXiB4WzExXSwgMTIpOworLQorLQkJeFswXSAgKz0geFs0XTsgICAgeFsxMl0gPSByb2wzMih4WzEyXSBeIHhbMF0sICAgOCk7CistCQl4WzFdICArPSB4WzVdOyAgICB4WzEzXSA9IHJvbDMyKHhbMTNdIF4geFsxXSwgICA4KTsKKy0JCXhbMl0gICs9IHhbNl07ICAgIHhbMTRdID0gcm9sMzIoeFsxNF0gXiB4WzJdLCAgIDgpOworLQkJeFszXSAgKz0geFs3XTsgICAgeFsxNV0gPSByb2wzMih4WzE1XSBeIHhbM10sICAgOCk7CistCistCQl4WzhdICArPSB4WzEyXTsgICB4WzRdICA9IHJvbDMyKHhbNF0gIF4geFs4XSwgICA3KTsKKy0JCXhbOV0gICs9IHhbMTNdOyAgIHhbNV0gID0gcm9sMzIoeFs1XSAgXiB4WzldLCAgIDcpOworLQkJeFsxMF0gKz0geFsxNF07ICAgeFs2XSAgPSByb2wzMih4WzZdICBeIHhbMTBdLCAgNyk7CistCQl4WzExXSArPSB4WzE1XTsgICB4WzddICA9IHJvbDMyKHhbN10gIF4geFsxMV0sICA3KTsKKy0KKy0JCXhbMF0gICs9IHhbNV07ICAgIHhbMTVdID0gcm9sMzIoeFsxNV0gXiB4WzBdLCAgMTYpOworLQkJeFsxXSAgKz0geFs2XTsgICAgeFsxMl0gPSByb2wzMih4WzEyXSBeIHhbMV0sICAxNik7CistCQl4WzJdICArPSB4WzddOyAgICB4WzEzXSA9IHJvbDMyKHhbMTNdIF4geFsyXSwgIDE2KTsKKy0JCXhbM10gICs9IHhbNF07ICAgIHhbMTRdID0gcm9sMzIoeFsxNF0gXiB4WzNdLCAgMTYpOworLQorLQkJeFsxMF0gKz0geFsxNV07ICAgeFs1XSAgPSByb2wzMih4WzVdICBeIHhbMTBdLCAxMik7CistCQl4WzExXSArPSB4WzEyXTsgICB4WzZdICA9IHJvbDMyKHhbNl0gIF4geFsxMV0sIDEyKTsKKy0JCXhbOF0gICs9IHhbMTNdOyAgIHhbN10gID0gcm9sMzIoeFs3XSAgXiB4WzhdLCAgMTIpOworLQkJeFs5XSAgKz0geFsxNF07ICAgeFs0XSAgPSByb2wzMih4WzRdICBeIHhbOV0sICAxMik7CistCistCQl4WzBdICArPSB4WzVdOyAgICB4WzE1XSA9IHJvbDMyKHhbMTVdIF4geFswXSwgICA4KTsKKy0JCXhbMV0gICs9IHhbNl07ICAgIHhbMTJdID0gcm9sMzIoeFsxMl0gXiB4WzFdLCAgIDgpOworLQkJeFsyXSAgKz0geFs3XTsgICAgeFsxM10gPSByb2wzMih4WzEzXSBeIHhbMl0sICAgOCk7CistCQl4WzNdICArPSB4WzRdOyAgICB4WzE0XSA9IHJvbDMyKHhbMTRdIF4geFszXSwgICA4KTsKKy0KKy0JCXhbMTBdICs9IHhbMTVdOyAgIHhbNV0gID0gcm9sMzIoeFs1XSAgXiB4WzEwXSwgIDcpOworLQkJeFsxMV0gKz0geFsxMl07ICAgeFs2XSAgPSByb2wzMih4WzZdICBeIHhbMTFdLCAgNyk7CistCQl4WzhdICArPSB4WzEzXTsgICB4WzddICA9IHJvbDMyKHhbN10gIF4geFs4XSwgICA3KTsKKy0JCXhbOV0gICs9IHhbMTRdOyAgIHhbNF0gID0gcm9sMzIoeFs0XSAgXiB4WzldLCAgIDcpOworLQl9CistfQorLQorLS8qKgorLSAqIGNoYWNoYV9ibG9jayAtIGdlbmVyYXRlIG9uZSBrZXlzdHJlYW0gYmxvY2sgYW5kIGluY3JlbWVudCBibG9jayBjb3VudGVyCistICogQHN0YXRlOiBpbnB1dCBzdGF0ZSBtYXRyaXggKDE2IDMyLWJpdCB3b3JkcykKKy0gKiBAc3RyZWFtOiBvdXRwdXQga2V5c3RyZWFtIGJsb2NrICg2NCBieXRlcykKKy0gKiBAbnJvdW5kczogbnVtYmVyIG9mIHJvdW5kcyAoMjAgb3IgMTI7IDIwIGlzIHJlY29tbWVuZGVkKQorLSAqCistICogVGhpcyBpcyB0aGUgQ2hhQ2hhIGNvcmUsIGEgZnVuY3Rpb24gZnJvbSA2NC1ieXRlIHN0cmluZ3MgdG8gNjQtYnl0ZSBzdHJpbmdzLgorLSAqIFRoZSBjYWxsZXIgaGFzIGFscmVhZHkgY29udmVydGVkIHRoZSBlbmRpYW5uZXNzIG9mIHRoZSBpbnB1dC4gIFRoaXMgZnVuY3Rpb24KKy0gKiBhbHNvIGhhbmRsZXMgaW5jcmVtZW50aW5nIHRoZSBibG9jayBjb3VudGVyIGluIHRoZSBpbnB1dCBtYXRyaXguCistICovCistdm9pZCBjaGFjaGFfYmxvY2sodTMyICpzdGF0ZSwgdTggKnN0cmVhbSwgaW50IG5yb3VuZHMpCisteworLQl1MzIgeFsxNl07CistCWludCBpOworLQorLQltZW1jcHkoeCwgc3RhdGUsIDY0KTsKKy0KKy0JY2hhY2hhX3Blcm11dGUoeCwgbnJvdW5kcyk7CistCistCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHgpOyBpKyspCistCQlwdXRfdW5hbGlnbmVkX2xlMzIoeFtpXSArIHN0YXRlW2ldLCAmc3RyZWFtW2kgKiBzaXplb2YodTMyKV0pOworLQorLQlzdGF0ZVsxMl0rKzsKKy19CistRVhQT1JUX1NZTUJPTChjaGFjaGFfYmxvY2spOworLQorLS8qKgorLSAqIGhjaGFjaGFfYmxvY2sgLSBhYmJyZXZpYXRlZCBDaGFDaGEgY29yZSwgZm9yIFhDaGFDaGEKKy0gKiBAaW46IGlucHV0IHN0YXRlIG1hdHJpeCAoMTYgMzItYml0IHdvcmRzKQorLSAqIEBvdXQ6IG91dHB1dCAoOCAzMi1iaXQgd29yZHMpCistICogQG5yb3VuZHM6IG51bWJlciBvZiByb3VuZHMgKDIwIG9yIDEyOyAyMCBpcyByZWNvbW1lbmRlZCkKKy0gKgorLSAqIEhDaGFDaGEgaXMgdGhlIENoYUNoYSBlcXVpdmFsZW50IG9mIEhTYWxzYSBhbmQgaXMgYW4gaW50ZXJtZWRpYXRlIHN0ZXAKKy0gKiB0b3dhcmRzIFhDaGFDaGEgKHNlZSBodHRwczovL2NyLnlwLnRvL3NudWZmbGUveHNhbHNhLTIwMDgxMTI4LnBkZikuICBIQ2hhQ2hhCistICogc2tpcHMgdGhlIGZpbmFsIGFkZGl0aW9uIG9mIHRoZSBpbml0aWFsIHN0YXRlLCBhbmQgb3V0cHV0cyBvbmx5IGNlcnRhaW4gd29yZHMKKy0gKiBvZiB0aGUgc3RhdGUuICBJdCBzaG91bGQgbm90IGJlIHVzZWQgZm9yIHN0cmVhbWluZyBkaXJlY3RseS4KKy0gKi8KKy12b2lkIGhjaGFjaGFfYmxvY2soY29uc3QgdTMyICppbiwgdTMyICpvdXQsIGludCBucm91bmRzKQorLXsKKy0JdTMyIHhbMTZdOworLQorLQltZW1jcHkoeCwgaW4sIDY0KTsKKy0KKy0JY2hhY2hhX3Blcm11dGUoeCwgbnJvdW5kcyk7CistCistCW1lbWNweSgmb3V0WzBdLCAmeFswXSwgMTYpOworLQltZW1jcHkoJm91dFs0XSwgJnhbMTJdLCAxNik7CistfQorLUVYUE9SVF9TWU1CT0woaGNoYWNoYV9ibG9jayk7CistLS0gL2Rldi9udWxsCisrKysgYi9saWIvY3J5cHRvL2NoYWNoYS5jCitAQCAtMCwwICsxLDExNSBAQAorKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCisrLyoKKysgKiBUaGUgImhhc2ggZnVuY3Rpb24iIHVzZWQgYXMgdGhlIGNvcmUgb2YgdGhlIENoYUNoYSBzdHJlYW0gY2lwaGVyIChSRkM3NTM5KQorKyAqCisrICogQ29weXJpZ2h0IChDKSAyMDE1IE1hcnRpbiBXaWxsaQorKyAqLworKworKyNpbmNsdWRlIDxsaW51eC9idWcuaD4KKysjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisrI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgorKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKysjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisrI2luY2x1ZGUgPGxpbnV4L2NyeXB0b2hhc2guaD4KKysjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorKyNpbmNsdWRlIDxjcnlwdG8vY2hhY2hhLmg+CisrCisrc3RhdGljIHZvaWQgY2hhY2hhX3Blcm11dGUodTMyICp4LCBpbnQgbnJvdW5kcykKKyt7CisrCWludCBpOworKworKwkvKiB3aGl0ZWxpc3QgdGhlIGFsbG93ZWQgcm91bmQgY291bnRzICovCisrCVdBUk5fT05fT05DRShucm91bmRzICE9IDIwICYmIG5yb3VuZHMgIT0gMTIpOworKworKwlmb3IgKGkgPSAwOyBpIDwgbnJvdW5kczsgaSArPSAyKSB7CisrCQl4WzBdICArPSB4WzRdOyAgICB4WzEyXSA9IHJvbDMyKHhbMTJdIF4geFswXSwgIDE2KTsKKysJCXhbMV0gICs9IHhbNV07ICAgIHhbMTNdID0gcm9sMzIoeFsxM10gXiB4WzFdLCAgMTYpOworKwkJeFsyXSAgKz0geFs2XTsgICAgeFsxNF0gPSByb2wzMih4WzE0XSBeIHhbMl0sICAxNik7CisrCQl4WzNdICArPSB4WzddOyAgICB4WzE1XSA9IHJvbDMyKHhbMTVdIF4geFszXSwgIDE2KTsKKysKKysJCXhbOF0gICs9IHhbMTJdOyAgIHhbNF0gID0gcm9sMzIoeFs0XSAgXiB4WzhdLCAgMTIpOworKwkJeFs5XSAgKz0geFsxM107ICAgeFs1XSAgPSByb2wzMih4WzVdICBeIHhbOV0sICAxMik7CisrCQl4WzEwXSArPSB4WzE0XTsgICB4WzZdICA9IHJvbDMyKHhbNl0gIF4geFsxMF0sIDEyKTsKKysJCXhbMTFdICs9IHhbMTVdOyAgIHhbN10gID0gcm9sMzIoeFs3XSAgXiB4WzExXSwgMTIpOworKworKwkJeFswXSAgKz0geFs0XTsgICAgeFsxMl0gPSByb2wzMih4WzEyXSBeIHhbMF0sICAgOCk7CisrCQl4WzFdICArPSB4WzVdOyAgICB4WzEzXSA9IHJvbDMyKHhbMTNdIF4geFsxXSwgICA4KTsKKysJCXhbMl0gICs9IHhbNl07ICAgIHhbMTRdID0gcm9sMzIoeFsxNF0gXiB4WzJdLCAgIDgpOworKwkJeFszXSAgKz0geFs3XTsgICAgeFsxNV0gPSByb2wzMih4WzE1XSBeIHhbM10sICAgOCk7CisrCisrCQl4WzhdICArPSB4WzEyXTsgICB4WzRdICA9IHJvbDMyKHhbNF0gIF4geFs4XSwgICA3KTsKKysJCXhbOV0gICs9IHhbMTNdOyAgIHhbNV0gID0gcm9sMzIoeFs1XSAgXiB4WzldLCAgIDcpOworKwkJeFsxMF0gKz0geFsxNF07ICAgeFs2XSAgPSByb2wzMih4WzZdICBeIHhbMTBdLCAgNyk7CisrCQl4WzExXSArPSB4WzE1XTsgICB4WzddICA9IHJvbDMyKHhbN10gIF4geFsxMV0sICA3KTsKKysKKysJCXhbMF0gICs9IHhbNV07ICAgIHhbMTVdID0gcm9sMzIoeFsxNV0gXiB4WzBdLCAgMTYpOworKwkJeFsxXSAgKz0geFs2XTsgICAgeFsxMl0gPSByb2wzMih4WzEyXSBeIHhbMV0sICAxNik7CisrCQl4WzJdICArPSB4WzddOyAgICB4WzEzXSA9IHJvbDMyKHhbMTNdIF4geFsyXSwgIDE2KTsKKysJCXhbM10gICs9IHhbNF07ICAgIHhbMTRdID0gcm9sMzIoeFsxNF0gXiB4WzNdLCAgMTYpOworKworKwkJeFsxMF0gKz0geFsxNV07ICAgeFs1XSAgPSByb2wzMih4WzVdICBeIHhbMTBdLCAxMik7CisrCQl4WzExXSArPSB4WzEyXTsgICB4WzZdICA9IHJvbDMyKHhbNl0gIF4geFsxMV0sIDEyKTsKKysJCXhbOF0gICs9IHhbMTNdOyAgIHhbN10gID0gcm9sMzIoeFs3XSAgXiB4WzhdLCAgMTIpOworKwkJeFs5XSAgKz0geFsxNF07ICAgeFs0XSAgPSByb2wzMih4WzRdICBeIHhbOV0sICAxMik7CisrCisrCQl4WzBdICArPSB4WzVdOyAgICB4WzE1XSA9IHJvbDMyKHhbMTVdIF4geFswXSwgICA4KTsKKysJCXhbMV0gICs9IHhbNl07ICAgIHhbMTJdID0gcm9sMzIoeFsxMl0gXiB4WzFdLCAgIDgpOworKwkJeFsyXSAgKz0geFs3XTsgICAgeFsxM10gPSByb2wzMih4WzEzXSBeIHhbMl0sICAgOCk7CisrCQl4WzNdICArPSB4WzRdOyAgICB4WzE0XSA9IHJvbDMyKHhbMTRdIF4geFszXSwgICA4KTsKKysKKysJCXhbMTBdICs9IHhbMTVdOyAgIHhbNV0gID0gcm9sMzIoeFs1XSAgXiB4WzEwXSwgIDcpOworKwkJeFsxMV0gKz0geFsxMl07ICAgeFs2XSAgPSByb2wzMih4WzZdICBeIHhbMTFdLCAgNyk7CisrCQl4WzhdICArPSB4WzEzXTsgICB4WzddICA9IHJvbDMyKHhbN10gIF4geFs4XSwgICA3KTsKKysJCXhbOV0gICs9IHhbMTRdOyAgIHhbNF0gID0gcm9sMzIoeFs0XSAgXiB4WzldLCAgIDcpOworKwl9CisrfQorKworKy8qKgorKyAqIGNoYWNoYV9ibG9jayAtIGdlbmVyYXRlIG9uZSBrZXlzdHJlYW0gYmxvY2sgYW5kIGluY3JlbWVudCBibG9jayBjb3VudGVyCisrICogQHN0YXRlOiBpbnB1dCBzdGF0ZSBtYXRyaXggKDE2IDMyLWJpdCB3b3JkcykKKysgKiBAc3RyZWFtOiBvdXRwdXQga2V5c3RyZWFtIGJsb2NrICg2NCBieXRlcykKKysgKiBAbnJvdW5kczogbnVtYmVyIG9mIHJvdW5kcyAoMjAgb3IgMTI7IDIwIGlzIHJlY29tbWVuZGVkKQorKyAqCisrICogVGhpcyBpcyB0aGUgQ2hhQ2hhIGNvcmUsIGEgZnVuY3Rpb24gZnJvbSA2NC1ieXRlIHN0cmluZ3MgdG8gNjQtYnl0ZSBzdHJpbmdzLgorKyAqIFRoZSBjYWxsZXIgaGFzIGFscmVhZHkgY29udmVydGVkIHRoZSBlbmRpYW5uZXNzIG9mIHRoZSBpbnB1dC4gIFRoaXMgZnVuY3Rpb24KKysgKiBhbHNvIGhhbmRsZXMgaW5jcmVtZW50aW5nIHRoZSBibG9jayBjb3VudGVyIGluIHRoZSBpbnB1dCBtYXRyaXguCisrICovCisrdm9pZCBjaGFjaGFfYmxvY2tfZ2VuZXJpYyh1MzIgKnN0YXRlLCB1OCAqc3RyZWFtLCBpbnQgbnJvdW5kcykKKyt7CisrCXUzMiB4WzE2XTsKKysJaW50IGk7CisrCisrCW1lbWNweSh4LCBzdGF0ZSwgNjQpOworKworKwljaGFjaGFfcGVybXV0ZSh4LCBucm91bmRzKTsKKysKKysJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoeCk7IGkrKykKKysJCXB1dF91bmFsaWduZWRfbGUzMih4W2ldICsgc3RhdGVbaV0sICZzdHJlYW1baSAqIHNpemVvZih1MzIpXSk7CisrCisrCXN0YXRlWzEyXSsrOworK30KKytFWFBPUlRfU1lNQk9MKGNoYWNoYV9ibG9ja19nZW5lcmljKTsKKysKKysvKioKKysgKiBoY2hhY2hhX2Jsb2NrX2dlbmVyaWMgLSBhYmJyZXZpYXRlZCBDaGFDaGEgY29yZSwgZm9yIFhDaGFDaGEKKysgKiBAc3RhdGU6IGlucHV0IHN0YXRlIG1hdHJpeCAoMTYgMzItYml0IHdvcmRzKQorKyAqIEBvdXQ6IG91dHB1dCAoOCAzMi1iaXQgd29yZHMpCisrICogQG5yb3VuZHM6IG51bWJlciBvZiByb3VuZHMgKDIwIG9yIDEyOyAyMCBpcyByZWNvbW1lbmRlZCkKKysgKgorKyAqIEhDaGFDaGEgaXMgdGhlIENoYUNoYSBlcXVpdmFsZW50IG9mIEhTYWxzYSBhbmQgaXMgYW4gaW50ZXJtZWRpYXRlIHN0ZXAKKysgKiB0b3dhcmRzIFhDaGFDaGEgKHNlZSBodHRwczovL2NyLnlwLnRvL3NudWZmbGUveHNhbHNhLTIwMDgxMTI4LnBkZikuICBIQ2hhQ2hhCisrICogc2tpcHMgdGhlIGZpbmFsIGFkZGl0aW9uIG9mIHRoZSBpbml0aWFsIHN0YXRlLCBhbmQgb3V0cHV0cyBvbmx5IGNlcnRhaW4gd29yZHMKKysgKiBvZiB0aGUgc3RhdGUuICBJdCBzaG91bGQgbm90IGJlIHVzZWQgZm9yIHN0cmVhbWluZyBkaXJlY3RseS4KKysgKi8KKyt2b2lkIGhjaGFjaGFfYmxvY2tfZ2VuZXJpYyhjb25zdCB1MzIgKnN0YXRlLCB1MzIgKnN0cmVhbSwgaW50IG5yb3VuZHMpCisreworKwl1MzIgeFsxNl07CisrCisrCW1lbWNweSh4LCBzdGF0ZSwgNjQpOworKworKwljaGFjaGFfcGVybXV0ZSh4LCBucm91bmRzKTsKKysKKysJbWVtY3B5KCZzdHJlYW1bMF0sICZ4WzBdLCAxNik7CisrCW1lbWNweSgmc3RyZWFtWzRdLCAmeFsxMl0sIDE2KTsKKyt9CisrRVhQT1JUX1NZTUJPTChoY2hhY2hhX2Jsb2NrX2dlbmVyaWMpOworLS0tIC9kZXYvbnVsbAorKysrIGIvbGliL2NyeXB0by9saWJjaGFjaGEuYworQEAgLTAsMCArMSwzNSBAQAorKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCisrLyoKKysgKiBUaGUgQ2hhQ2hhIHN0cmVhbSBjaXBoZXIgKFJGQzc1MzkpCisrICoKKysgKiBDb3B5cmlnaHQgKEMpIDIwMTUgTWFydGluIFdpbGxpCisrICovCisrCisrI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorKyNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KKysjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisrCisrI2luY2x1ZGUgPGNyeXB0by9hbGdhcGkuaD4gLy8gZm9yIGNyeXB0b194b3JfY3B5CisrI2luY2x1ZGUgPGNyeXB0by9jaGFjaGEuaD4KKysKKyt2b2lkIGNoYWNoYV9jcnlwdF9nZW5lcmljKHUzMiAqc3RhdGUsIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsCisrCQkJICB1bnNpZ25lZCBpbnQgYnl0ZXMsIGludCBucm91bmRzKQorK3sKKysJLyogYWxpZ25lZCB0byBwb3RlbnRpYWxseSBzcGVlZCB1cCBjcnlwdG9feG9yKCkgKi8KKysJdTggc3RyZWFtW0NIQUNIQV9CTE9DS19TSVpFXSBfX2FsaWduZWQoc2l6ZW9mKGxvbmcpKTsKKysKKysJd2hpbGUgKGJ5dGVzID49IENIQUNIQV9CTE9DS19TSVpFKSB7CisrCQljaGFjaGFfYmxvY2tfZ2VuZXJpYyhzdGF0ZSwgc3RyZWFtLCBucm91bmRzKTsKKysJCWNyeXB0b194b3JfY3B5KGRzdCwgc3JjLCBzdHJlYW0sIENIQUNIQV9CTE9DS19TSVpFKTsKKysJCWJ5dGVzIC09IENIQUNIQV9CTE9DS19TSVpFOworKwkJZHN0ICs9IENIQUNIQV9CTE9DS19TSVpFOworKwkJc3JjICs9IENIQUNIQV9CTE9DS19TSVpFOworKwl9CisrCWlmIChieXRlcykgeworKwkJY2hhY2hhX2Jsb2NrX2dlbmVyaWMoc3RhdGUsIHN0cmVhbSwgbnJvdW5kcyk7CisrCQljcnlwdG9feG9yX2NweShkc3QsIHNyYywgc3RyZWFtLCBieXRlcyk7CisrCX0KKyt9CisrRVhQT1JUX1NZTUJPTChjaGFjaGFfY3J5cHRfZ2VuZXJpYyk7CisrCisrTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAwMy1jcnlwdG8teDg2LWNoYWNoYS1kZXBlbmQtb24tZ2VuZXJpYy1jaGFjaGEtbGlicmFyeS1pLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAwMy1jcnlwdG8teDg2LWNoYWNoYS1kZXBlbmQtb24tZ2VuZXJpYy1jaGFjaGEtbGlicmFyeS1pLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZjU5Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDAzLWNyeXB0by14ODYtY2hhY2hhLWRlcGVuZC1vbi1nZW5lcmljLWNoYWNoYS1saWJyYXJ5LWkucGF0Y2gKQEAgLTAsMCArMSwxOTIgQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFyZCBCaWVzaGV1dmVsIDxhcmRiQGtlcm5lbC5vcmc+CitEYXRlOiBGcmksIDggTm92IDIwMTkgMTM6MjI6MDkgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gY3J5cHRvOiB4ODYvY2hhY2hhIC0gZGVwZW5kIG9uIGdlbmVyaWMgY2hhY2hhIGxpYnJhcnkgaW5zdGVhZAorIG9mIGNyeXB0byBkcml2ZXIKKworY29tbWl0IDI4ZThkODliMWNlOGQyZTdiYWRmYjVmNjk5NzFkZDYzNWFjYjg4NjMgdXBzdHJlYW0uCisKK0luIHByZXBhcmF0aW9uIG9mIGV4dGVuZGluZyB0aGUgeDg2IENoYUNoYSBkcml2ZXIgdG8gYWxzbyBleHBvc2UgdGhlIENoYUNoYQorbGlicmFyeSBpbnRlcmZhY2UsIGRyb3AgdGhlIGRlcGVuZGVuY3kgb24gdGhlIGNoYWNoYV9nZW5lcmljIGNyeXB0byBkcml2ZXIKK2FzIGEgbm9uLVNJTUQgZmFsbGJhY2ssIGFuZCBkZXBlbmQgb24gdGhlIGdlbmVyaWMgQ2hhQ2hhIGxpYnJhcnkgZGlyZWN0bHkuCitUaGlzIHdheSwgd2Ugb25seSBwdWxsIGluIHRoZSBjb2RlIHdlIGFjdHVhbGx5IG5lZWQsIHdpdGhvdXQgcmVnaXN0ZXJpbmcKK2Egc2V0IG9mIENoYUNoYSBza2NpcGhlcnMgdGhhdCB3ZSB3aWxsIG5ldmVyIHVzZS4KKworU2luY2UgdHVybmluZyB0aGUgRlBVIG9uIGFuZCBvZmYgaXMgY2hlYXAgdGhlc2UgZGF5cywgc2ltcGxpZnkgdGhlIFNJTUQKK3JvdXRpbmUgYnkgZHJvcHBpbmcgdGhlIHBlci1wYWdlIHlpZWxkLCB3aGljaCBtYWtlcyBmb3IgYSBjbGVhbmVyIHN3aXRjaAordG8gdGhlIGxpYnJhcnkgQVBJIGFzIHdlbGwuIFRoaXMgYWxzbyBhbGxvd3MgdXNlIHRvIGludm9rZSB0aGUgc2tjaXBoZXIKK3dhbGsgcm91dGluZXMgaW4gbm9uLWF0b21pYyBtb2RlLgorCitTaWduZWQtb2ZmLWJ5OiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgorU2lnbmVkLW9mZi1ieTogSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBhcmNoL3g4Ni9jcnlwdG8vY2hhY2hhX2dsdWUuYyB8IDkwICsrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgY3J5cHRvL0tjb25maWcgICAgICAgICAgICAgICAgfCAgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMzYgaW5zZXJ0aW9ucygrKSwgNTYgZGVsZXRpb25zKC0pCisKKy0tLSBhL2FyY2gveDg2L2NyeXB0by9jaGFjaGFfZ2x1ZS5jCisrKysgYi9hcmNoL3g4Ni9jcnlwdG8vY2hhY2hhX2dsdWUuYworQEAgLTEyMywzNyArMTIzLDM4IEBAIHN0YXRpYyB2b2lkIGNoYWNoYV9kb3NpbWQodTMyICpzdGF0ZSwgdTgKKyAJfQorIH0KKyAKKy1zdGF0aWMgaW50IGNoYWNoYV9zaW1kX3N0cmVhbV94b3Ioc3RydWN0IHNrY2lwaGVyX3dhbGsgKndhbGssCisrc3RhdGljIGludCBjaGFjaGFfc2ltZF9zdHJlYW1feG9yKHN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0ICpyZXEsCisgCQkJCSAgY29uc3Qgc3RydWN0IGNoYWNoYV9jdHggKmN0eCwgY29uc3QgdTggKml2KQorIHsKKyAJdTMyICpzdGF0ZSwgc3RhdGVfYnVmWzE2ICsgMl0gX19hbGlnbmVkKDgpOworLQlpbnQgbmV4dF95aWVsZCA9IDQwOTY7IC8qIGJ5dGVzIHVudGlsIG5leHQgRlBVIHlpZWxkICovCistCWludCBlcnIgPSAwOworKwlzdHJ1Y3Qgc2tjaXBoZXJfd2FsayB3YWxrOworKwlpbnQgZXJyOworKworKwllcnIgPSBza2NpcGhlcl93YWxrX3ZpcnQoJndhbGssIHJlcSwgZmFsc2UpOworIAorIAlCVUlMRF9CVUdfT04oQ0hBQ0hBX1NUQVRFX0FMSUdOICE9IDE2KTsKKyAJc3RhdGUgPSBQVFJfQUxJR04oc3RhdGVfYnVmICsgMCwgQ0hBQ0hBX1NUQVRFX0FMSUdOKTsKKyAKKy0JY3J5cHRvX2NoYWNoYV9pbml0KHN0YXRlLCBjdHgsIGl2KTsKKysJY2hhY2hhX2luaXRfZ2VuZXJpYyhzdGF0ZSwgY3R4LT5rZXksIGl2KTsKKyAKKy0Jd2hpbGUgKHdhbGstPm5ieXRlcyA+IDApIHsKKy0JCXVuc2lnbmVkIGludCBuYnl0ZXMgPSB3YWxrLT5uYnl0ZXM7CisrCXdoaWxlICh3YWxrLm5ieXRlcyA+IDApIHsKKysJCXVuc2lnbmVkIGludCBuYnl0ZXMgPSB3YWxrLm5ieXRlczsKKyAKKy0JCWlmIChuYnl0ZXMgPCB3YWxrLT50b3RhbCkgeworLQkJCW5ieXRlcyA9IHJvdW5kX2Rvd24obmJ5dGVzLCB3YWxrLT5zdHJpZGUpOworLQkJCW5leHRfeWllbGQgLT0gbmJ5dGVzOworLQkJfQorLQorLQkJY2hhY2hhX2Rvc2ltZChzdGF0ZSwgd2Fsay0+ZHN0LnZpcnQuYWRkciwgd2Fsay0+c3JjLnZpcnQuYWRkciwKKy0JCQkgICAgICBuYnl0ZXMsIGN0eC0+bnJvdW5kcyk7CisrCQlpZiAobmJ5dGVzIDwgd2Fsay50b3RhbCkKKysJCQluYnl0ZXMgPSByb3VuZF9kb3duKG5ieXRlcywgd2Fsay5zdHJpZGUpOworIAorLQkJaWYgKG5leHRfeWllbGQgPD0gMCkgeworLQkJCS8qIHRlbXBvcmFyaWx5IGFsbG93IHByZWVtcHRpb24gKi8KKy0JCQlrZXJuZWxfZnB1X2VuZCgpOworKwkJaWYgKCFjcnlwdG9fc2ltZF91c2FibGUoKSkgeworKwkJCWNoYWNoYV9jcnlwdF9nZW5lcmljKHN0YXRlLCB3YWxrLmRzdC52aXJ0LmFkZHIsCisrCQkJCQkgICAgIHdhbGsuc3JjLnZpcnQuYWRkciwgbmJ5dGVzLAorKwkJCQkJICAgICBjdHgtPm5yb3VuZHMpOworKwkJfSBlbHNlIHsKKyAJCQlrZXJuZWxfZnB1X2JlZ2luKCk7CistCQkJbmV4dF95aWVsZCA9IDQwOTY7CisrCQkJY2hhY2hhX2Rvc2ltZChzdGF0ZSwgd2Fsay5kc3QudmlydC5hZGRyLAorKwkJCQkgICAgICB3YWxrLnNyYy52aXJ0LmFkZHIsIG5ieXRlcywKKysJCQkJICAgICAgY3R4LT5ucm91bmRzKTsKKysJCQlrZXJuZWxfZnB1X2VuZCgpOworIAkJfQorLQorLQkJZXJyID0gc2tjaXBoZXJfd2Fsa19kb25lKHdhbGssIHdhbGstPm5ieXRlcyAtIG5ieXRlcyk7CisrCQllcnIgPSBza2NpcGhlcl93YWxrX2RvbmUoJndhbGssIHdhbGsubmJ5dGVzIC0gbmJ5dGVzKTsKKyAJfQorIAorIAlyZXR1cm4gZXJyOworQEAgLTE2Myw1NSArMTY0LDM0IEBAIHN0YXRpYyBpbnQgY2hhY2hhX3NpbWQoc3RydWN0IHNrY2lwaGVyX3IKKyB7CisgCXN0cnVjdCBjcnlwdG9fc2tjaXBoZXIgKnRmbSA9IGNyeXB0b19za2NpcGhlcl9yZXF0Zm0ocmVxKTsKKyAJc3RydWN0IGNoYWNoYV9jdHggKmN0eCA9IGNyeXB0b19za2NpcGhlcl9jdHgodGZtKTsKKy0Jc3RydWN0IHNrY2lwaGVyX3dhbGsgd2FsazsKKy0JaW50IGVycjsKKy0KKy0JaWYgKHJlcS0+Y3J5cHRsZW4gPD0gQ0hBQ0hBX0JMT0NLX1NJWkUgfHwgIWNyeXB0b19zaW1kX3VzYWJsZSgpKQorLQkJcmV0dXJuIGNyeXB0b19jaGFjaGFfY3J5cHQocmVxKTsKKyAKKy0JZXJyID0gc2tjaXBoZXJfd2Fsa192aXJ0KCZ3YWxrLCByZXEsIHRydWUpOworLQlpZiAoZXJyKQorLQkJcmV0dXJuIGVycjsKKy0KKy0Ja2VybmVsX2ZwdV9iZWdpbigpOworLQllcnIgPSBjaGFjaGFfc2ltZF9zdHJlYW1feG9yKCZ3YWxrLCBjdHgsIHJlcS0+aXYpOworLQlrZXJuZWxfZnB1X2VuZCgpOworLQlyZXR1cm4gZXJyOworKwlyZXR1cm4gY2hhY2hhX3NpbWRfc3RyZWFtX3hvcihyZXEsIGN0eCwgcmVxLT5pdik7CisgfQorIAorIHN0YXRpYyBpbnQgeGNoYWNoYV9zaW1kKHN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0ICpyZXEpCisgeworIAlzdHJ1Y3QgY3J5cHRvX3NrY2lwaGVyICp0Zm0gPSBjcnlwdG9fc2tjaXBoZXJfcmVxdGZtKHJlcSk7CisgCXN0cnVjdCBjaGFjaGFfY3R4ICpjdHggPSBjcnlwdG9fc2tjaXBoZXJfY3R4KHRmbSk7CistCXN0cnVjdCBza2NpcGhlcl93YWxrIHdhbGs7CistCXN0cnVjdCBjaGFjaGFfY3R4IHN1YmN0eDsKKyAJdTMyICpzdGF0ZSwgc3RhdGVfYnVmWzE2ICsgMl0gX19hbGlnbmVkKDgpOworKwlzdHJ1Y3QgY2hhY2hhX2N0eCBzdWJjdHg7CisgCXU4IHJlYWxfaXZbMTZdOworLQlpbnQgZXJyOworLQorLQlpZiAocmVxLT5jcnlwdGxlbiA8PSBDSEFDSEFfQkxPQ0tfU0laRSB8fCAhY3J5cHRvX3NpbWRfdXNhYmxlKCkpCistCQlyZXR1cm4gY3J5cHRvX3hjaGFjaGFfY3J5cHQocmVxKTsKKy0KKy0JZXJyID0gc2tjaXBoZXJfd2Fsa192aXJ0KCZ3YWxrLCByZXEsIHRydWUpOworLQlpZiAoZXJyKQorLQkJcmV0dXJuIGVycjsKKyAKKyAJQlVJTERfQlVHX09OKENIQUNIQV9TVEFURV9BTElHTiAhPSAxNik7CisgCXN0YXRlID0gUFRSX0FMSUdOKHN0YXRlX2J1ZiArIDAsIENIQUNIQV9TVEFURV9BTElHTik7CistCWNyeXB0b19jaGFjaGFfaW5pdChzdGF0ZSwgY3R4LCByZXEtPml2KTsKKysJY2hhY2hhX2luaXRfZ2VuZXJpYyhzdGF0ZSwgY3R4LT5rZXksIHJlcS0+aXYpOworIAorLQlrZXJuZWxfZnB1X2JlZ2luKCk7CistCistCWhjaGFjaGFfYmxvY2tfc3NzZTMoc3RhdGUsIHN1YmN0eC5rZXksIGN0eC0+bnJvdW5kcyk7CisrCWlmIChyZXEtPmNyeXB0bGVuID4gQ0hBQ0hBX0JMT0NLX1NJWkUgJiYgY3J5cHRvX3NpbWRfdXNhYmxlKCkpIHsKKysJCWtlcm5lbF9mcHVfYmVnaW4oKTsKKysJCWhjaGFjaGFfYmxvY2tfc3NzZTMoc3RhdGUsIHN1YmN0eC5rZXksIGN0eC0+bnJvdW5kcyk7CisrCQlrZXJuZWxfZnB1X2VuZCgpOworKwl9IGVsc2UgeworKwkJaGNoYWNoYV9ibG9ja19nZW5lcmljKHN0YXRlLCBzdWJjdHgua2V5LCBjdHgtPm5yb3VuZHMpOworKwl9CisgCXN1YmN0eC5ucm91bmRzID0gY3R4LT5ucm91bmRzOworIAorIAltZW1jcHkoJnJlYWxfaXZbMF0sIHJlcS0+aXYgKyAyNCwgOCk7CisgCW1lbWNweSgmcmVhbF9pdls4XSwgcmVxLT5pdiArIDE2LCA4KTsKKy0JZXJyID0gY2hhY2hhX3NpbWRfc3RyZWFtX3hvcigmd2FsaywgJnN1YmN0eCwgcmVhbF9pdik7CistCistCWtlcm5lbF9mcHVfZW5kKCk7CistCistCXJldHVybiBlcnI7CisrCXJldHVybiBjaGFjaGFfc2ltZF9zdHJlYW1feG9yKHJlcSwgJnN1YmN0eCwgcmVhbF9pdik7CisgfQorIAorIHN0YXRpYyBzdHJ1Y3Qgc2tjaXBoZXJfYWxnIGFsZ3NbXSA9IHsKK0BAIC0yMjcsNyArMjA3LDcgQEAgc3RhdGljIHN0cnVjdCBza2NpcGhlcl9hbGcgYWxnc1tdID0geworIAkJLm1heF9rZXlzaXplCQk9IENIQUNIQV9LRVlfU0laRSwKKyAJCS5pdnNpemUJCQk9IENIQUNIQV9JVl9TSVpFLAorIAkJLmNodW5rc2l6ZQkJPSBDSEFDSEFfQkxPQ0tfU0laRSwKKy0JCS5zZXRrZXkJCQk9IGNyeXB0b19jaGFjaGEyMF9zZXRrZXksCisrCQkuc2V0a2V5CQkJPSBjaGFjaGEyMF9zZXRrZXksCisgCQkuZW5jcnlwdAkJPSBjaGFjaGFfc2ltZCwKKyAJCS5kZWNyeXB0CQk9IGNoYWNoYV9zaW1kLAorIAl9LCB7CitAQCAtMjQyLDcgKzIyMiw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tjaXBoZXJfYWxnIGFsZ3NbXSA9IHsKKyAJCS5tYXhfa2V5c2l6ZQkJPSBDSEFDSEFfS0VZX1NJWkUsCisgCQkuaXZzaXplCQkJPSBYQ0hBQ0hBX0lWX1NJWkUsCisgCQkuY2h1bmtzaXplCQk9IENIQUNIQV9CTE9DS19TSVpFLAorLQkJLnNldGtleQkJCT0gY3J5cHRvX2NoYWNoYTIwX3NldGtleSwKKysJCS5zZXRrZXkJCQk9IGNoYWNoYTIwX3NldGtleSwKKyAJCS5lbmNyeXB0CQk9IHhjaGFjaGFfc2ltZCwKKyAJCS5kZWNyeXB0CQk9IHhjaGFjaGFfc2ltZCwKKyAJfSwgeworQEAgLTI1Nyw3ICsyMzcsNyBAQCBzdGF0aWMgc3RydWN0IHNrY2lwaGVyX2FsZyBhbGdzW10gPSB7CisgCQkubWF4X2tleXNpemUJCT0gQ0hBQ0hBX0tFWV9TSVpFLAorIAkJLml2c2l6ZQkJCT0gWENIQUNIQV9JVl9TSVpFLAorIAkJLmNodW5rc2l6ZQkJPSBDSEFDSEFfQkxPQ0tfU0laRSwKKy0JCS5zZXRrZXkJCQk9IGNyeXB0b19jaGFjaGExMl9zZXRrZXksCisrCQkuc2V0a2V5CQkJPSBjaGFjaGExMl9zZXRrZXksCisgCQkuZW5jcnlwdAkJPSB4Y2hhY2hhX3NpbWQsCisgCQkuZGVjcnlwdAkJPSB4Y2hhY2hhX3NpbWQsCisgCX0sCistLS0gYS9jcnlwdG8vS2NvbmZpZworKysrIGIvY3J5cHRvL0tjb25maWcKK0BAIC0xNDE3LDcgKzE0MTcsNyBAQCBjb25maWcgQ1JZUFRPX0NIQUNIQTIwX1g4Nl82NAorIAl0cmlzdGF0ZSAiQ2hhQ2hhIHN0cmVhbSBjaXBoZXIgYWxnb3JpdGhtcyAoeDg2XzY0L1NTU0UzL0FWWDIvQVZYLTUxMlZMKSIKKyAJZGVwZW5kcyBvbiBYODYgJiYgNjRCSVQKKyAJc2VsZWN0IENSWVBUT19CTEtDSVBIRVIKKy0Jc2VsZWN0IENSWVBUT19DSEFDSEEyMAorKwlzZWxlY3QgQ1JZUFRPX0xJQl9DSEFDSEFfR0VORVJJQworIAloZWxwCisgCSAgU1NTRTMsIEFWWDIsIGFuZCBBVlgtNTEyVkwgb3B0aW1pemVkIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgQ2hhQ2hhMjAsCisgCSAgWENoYUNoYTIwLCBhbmQgWENoYUNoYTEyIHN0cmVhbSBjaXBoZXJzLgpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAwNC1jcnlwdG8teDg2LWNoYWNoYS1leHBvc2UtU0lNRC1DaGFDaGEtcm91dGluZS1hcy1saWJyLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAwNC1jcnlwdG8teDg2LWNoYWNoYS1leHBvc2UtU0lNRC1DaGFDaGEtcm91dGluZS1hcy1saWJyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNTQ2MjgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDA0LWNyeXB0by14ODYtY2hhY2hhLWV4cG9zZS1TSU1ELUNoYUNoYS1yb3V0aW5lLWFzLWxpYnIucGF0Y2gKQEAgLTAsMCArMSwyMDUgQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFyZCBCaWVzaGV1dmVsIDxhcmRiQGtlcm5lbC5vcmc+CitEYXRlOiBGcmksIDggTm92IDIwMTkgMTM6MjI6MTAgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gY3J5cHRvOiB4ODYvY2hhY2hhIC0gZXhwb3NlIFNJTUQgQ2hhQ2hhIHJvdXRpbmUgYXMgbGlicmFyeQorIGZ1bmN0aW9uCisKK2NvbW1pdCA4NGUwM2ZhMzlmYmU5NWE1NTY3ZDQzYmZmNDU4YzZkM2IzYTIzYWQxIHVwc3RyZWFtLgorCitXaXJlIHRoZSBleGlzdGluZyB4ODYgU0lNRCBDaGFDaGEgY29kZSBpbnRvIHRoZSBuZXcgQ2hhQ2hhIGxpYnJhcnkKK2ludGVyZmFjZSwgc28gdGhhdCB1c2VycyBvZiB0aGUgbGlicmFyeSBpbnRlcmZhY2Ugd2lsbCBnZXQgdGhlCithY2NlbGVyYXRlZCB2ZXJzaW9uIHdoZW4gYXZhaWxhYmxlLgorCitHaXZlbiB0aGF0IGNhbGxzIGludG8gdGhlIGxpYnJhcnkgQVBJIHdpbGwgYWx3YXlzIGdvIHRocm91Z2ggdGhlCityb3V0aW5lcyBpbiB0aGlzIG1vZHVsZSBpZiBpdCBpcyBlbmFibGVkLCBzd2l0Y2ggdG8gc3RhdGljIGtleXMKK3RvIHNlbGVjdCB0aGUgb3B0aW1hbCBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUgKHdoaWNoIG1heSBiZSBub25lCithdCBhbGwsIGluIHdoaWNoIGNhc2Ugd2UgZGVmZXIgdG8gdGhlIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gZm9yCithbGwgaW52b2NhdGlvbnMpLgorCitTaWduZWQtb2ZmLWJ5OiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgorU2lnbmVkLW9mZi1ieTogSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBhcmNoL3g4Ni9jcnlwdG8vY2hhY2hhX2dsdWUuYyB8IDkxICsrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tCisgY3J5cHRvL0tjb25maWcgICAgICAgICAgICAgICAgfCAgMSArCisgaW5jbHVkZS9jcnlwdG8vY2hhY2hhLmggICAgICAgfCAgNiArKysKKyAzIGZpbGVzIGNoYW5nZWQsIDczIGluc2VydGlvbnMoKyksIDI1IGRlbGV0aW9ucygtKQorCistLS0gYS9hcmNoL3g4Ni9jcnlwdG8vY2hhY2hhX2dsdWUuYworKysrIGIvYXJjaC94ODYvY3J5cHRvL2NoYWNoYV9nbHVlLmMKK0BAIC0yMSwyNCArMjEsMjQgQEAgYXNtbGlua2FnZSB2b2lkIGNoYWNoYV9ibG9ja194b3Jfc3NzZTModQorIGFzbWxpbmthZ2Ugdm9pZCBjaGFjaGFfNGJsb2NrX3hvcl9zc3NlMyh1MzIgKnN0YXRlLCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjLAorIAkJCQkJdW5zaWduZWQgaW50IGxlbiwgaW50IG5yb3VuZHMpOworIGFzbWxpbmthZ2Ugdm9pZCBoY2hhY2hhX2Jsb2NrX3Nzc2UzKGNvbnN0IHUzMiAqc3RhdGUsIHUzMiAqb3V0LCBpbnQgbnJvdW5kcyk7CistI2lmZGVmIENPTkZJR19BU19BVlgyCisrCisgYXNtbGlua2FnZSB2b2lkIGNoYWNoYV8yYmxvY2tfeG9yX2F2eDIodTMyICpzdGF0ZSwgdTggKmRzdCwgY29uc3QgdTggKnNyYywKKyAJCQkJICAgICAgIHVuc2lnbmVkIGludCBsZW4sIGludCBucm91bmRzKTsKKyBhc21saW5rYWdlIHZvaWQgY2hhY2hhXzRibG9ja194b3JfYXZ4Mih1MzIgKnN0YXRlLCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjLAorIAkJCQkgICAgICAgdW5zaWduZWQgaW50IGxlbiwgaW50IG5yb3VuZHMpOworIGFzbWxpbmthZ2Ugdm9pZCBjaGFjaGFfOGJsb2NrX3hvcl9hdngyKHUzMiAqc3RhdGUsIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsCisgCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbGVuLCBpbnQgbnJvdW5kcyk7Cistc3RhdGljIGJvb2wgY2hhY2hhX3VzZV9hdngyOworLSNpZmRlZiBDT05GSUdfQVNfQVZYNTEyCisrCisgYXNtbGlua2FnZSB2b2lkIGNoYWNoYV8yYmxvY2tfeG9yX2F2eDUxMnZsKHUzMiAqc3RhdGUsIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsCisgCQkJCQkgICB1bnNpZ25lZCBpbnQgbGVuLCBpbnQgbnJvdW5kcyk7CisgYXNtbGlua2FnZSB2b2lkIGNoYWNoYV80YmxvY2tfeG9yX2F2eDUxMnZsKHUzMiAqc3RhdGUsIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsCisgCQkJCQkgICB1bnNpZ25lZCBpbnQgbGVuLCBpbnQgbnJvdW5kcyk7CisgYXNtbGlua2FnZSB2b2lkIGNoYWNoYV84YmxvY2tfeG9yX2F2eDUxMnZsKHUzMiAqc3RhdGUsIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsCisgCQkJCQkgICB1bnNpZ25lZCBpbnQgbGVuLCBpbnQgbnJvdW5kcyk7Cistc3RhdGljIGJvb2wgY2hhY2hhX3VzZV9hdng1MTJ2bDsKKy0jZW5kaWYKKy0jZW5kaWYKKysKKytzdGF0aWMgX19yb19hZnRlcl9pbml0IERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGNoYWNoYV91c2Vfc2ltZCk7Cisrc3RhdGljIF9fcm9fYWZ0ZXJfaW5pdCBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShjaGFjaGFfdXNlX2F2eDIpOworK3N0YXRpYyBfX3JvX2FmdGVyX2luaXQgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoY2hhY2hhX3VzZV9hdng1MTJ2bCk7CisgCisgc3RhdGljIHVuc2lnbmVkIGludCBjaGFjaGFfYWR2YW5jZSh1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgbWF4YmxvY2tzKQorIHsKK0BAIC00OSw5ICs0OSw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgY2hhY2hhX2FkdmFuY2UodW5zaWcKKyBzdGF0aWMgdm9pZCBjaGFjaGFfZG9zaW1kKHUzMiAqc3RhdGUsIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsCisgCQkJICB1bnNpZ25lZCBpbnQgYnl0ZXMsIGludCBucm91bmRzKQorIHsKKy0jaWZkZWYgQ09ORklHX0FTX0FWWDIKKy0jaWZkZWYgQ09ORklHX0FTX0FWWDUxMgorLQlpZiAoY2hhY2hhX3VzZV9hdng1MTJ2bCkgeworKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfQVNfQVZYNTEyKSAmJgorKwkgICAgc3RhdGljX2JyYW5jaF9saWtlbHkoJmNoYWNoYV91c2VfYXZ4NTEydmwpKSB7CisgCQl3aGlsZSAoYnl0ZXMgPj0gQ0hBQ0hBX0JMT0NLX1NJWkUgKiA4KSB7CisgCQkJY2hhY2hhXzhibG9ja194b3JfYXZ4NTEydmwoc3RhdGUsIGRzdCwgc3JjLCBieXRlcywKKyAJCQkJCQkgICBucm91bmRzKTsKK0BAIC03OSw4ICs3OCw5IEBAIHN0YXRpYyB2b2lkIGNoYWNoYV9kb3NpbWQodTMyICpzdGF0ZSwgdTgKKyAJCQlyZXR1cm47CisgCQl9CisgCX0KKy0jZW5kaWYKKy0JaWYgKGNoYWNoYV91c2VfYXZ4MikgeworKworKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfQVNfQVZYMikgJiYKKysJICAgIHN0YXRpY19icmFuY2hfbGlrZWx5KCZjaGFjaGFfdXNlX2F2eDIpKSB7CisgCQl3aGlsZSAoYnl0ZXMgPj0gQ0hBQ0hBX0JMT0NLX1NJWkUgKiA4KSB7CisgCQkJY2hhY2hhXzhibG9ja194b3JfYXZ4MihzdGF0ZSwgZHN0LCBzcmMsIGJ5dGVzLCBucm91bmRzKTsKKyAJCQlieXRlcyAtPSBDSEFDSEFfQkxPQ0tfU0laRSAqIDg7CitAQCAtMTA0LDcgKzEwNCw3IEBAIHN0YXRpYyB2b2lkIGNoYWNoYV9kb3NpbWQodTMyICpzdGF0ZSwgdTgKKyAJCQlyZXR1cm47CisgCQl9CisgCX0KKy0jZW5kaWYKKysKKyAJd2hpbGUgKGJ5dGVzID49IENIQUNIQV9CTE9DS19TSVpFICogNCkgeworIAkJY2hhY2hhXzRibG9ja194b3Jfc3NzZTMoc3RhdGUsIGRzdCwgc3JjLCBieXRlcywgbnJvdW5kcyk7CisgCQlieXRlcyAtPSBDSEFDSEFfQkxPQ0tfU0laRSAqIDQ7CitAQCAtMTIzLDYgKzEyMyw0MyBAQCBzdGF0aWMgdm9pZCBjaGFjaGFfZG9zaW1kKHUzMiAqc3RhdGUsIHU4CisgCX0KKyB9CisgCisrdm9pZCBoY2hhY2hhX2Jsb2NrX2FyY2goY29uc3QgdTMyICpzdGF0ZSwgdTMyICpzdHJlYW0sIGludCBucm91bmRzKQorK3sKKysJc3RhdGUgPSBQVFJfQUxJR04oc3RhdGUsIENIQUNIQV9TVEFURV9BTElHTik7CisrCisrCWlmICghc3RhdGljX2JyYW5jaF9saWtlbHkoJmNoYWNoYV91c2Vfc2ltZCkgfHwgIWNyeXB0b19zaW1kX3VzYWJsZSgpKSB7CisrCQloY2hhY2hhX2Jsb2NrX2dlbmVyaWMoc3RhdGUsIHN0cmVhbSwgbnJvdW5kcyk7CisrCX0gZWxzZSB7CisrCQlrZXJuZWxfZnB1X2JlZ2luKCk7CisrCQloY2hhY2hhX2Jsb2NrX3Nzc2UzKHN0YXRlLCBzdHJlYW0sIG5yb3VuZHMpOworKwkJa2VybmVsX2ZwdV9lbmQoKTsKKysJfQorK30KKytFWFBPUlRfU1lNQk9MKGhjaGFjaGFfYmxvY2tfYXJjaCk7CisrCisrdm9pZCBjaGFjaGFfaW5pdF9hcmNoKHUzMiAqc3RhdGUsIGNvbnN0IHUzMiAqa2V5LCBjb25zdCB1OCAqaXYpCisreworKwlzdGF0ZSA9IFBUUl9BTElHTihzdGF0ZSwgQ0hBQ0hBX1NUQVRFX0FMSUdOKTsKKysKKysJY2hhY2hhX2luaXRfZ2VuZXJpYyhzdGF0ZSwga2V5LCBpdik7CisrfQorK0VYUE9SVF9TWU1CT0woY2hhY2hhX2luaXRfYXJjaCk7CisrCisrdm9pZCBjaGFjaGFfY3J5cHRfYXJjaCh1MzIgKnN0YXRlLCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCB1bnNpZ25lZCBpbnQgYnl0ZXMsCisrCQkgICAgICAgaW50IG5yb3VuZHMpCisreworKwlzdGF0ZSA9IFBUUl9BTElHTihzdGF0ZSwgQ0hBQ0hBX1NUQVRFX0FMSUdOKTsKKysKKysJaWYgKCFzdGF0aWNfYnJhbmNoX2xpa2VseSgmY2hhY2hhX3VzZV9zaW1kKSB8fCAhY3J5cHRvX3NpbWRfdXNhYmxlKCkgfHwKKysJICAgIGJ5dGVzIDw9IENIQUNIQV9CTE9DS19TSVpFKQorKwkJcmV0dXJuIGNoYWNoYV9jcnlwdF9nZW5lcmljKHN0YXRlLCBkc3QsIHNyYywgYnl0ZXMsIG5yb3VuZHMpOworKworKwlrZXJuZWxfZnB1X2JlZ2luKCk7CisrCWNoYWNoYV9kb3NpbWQoc3RhdGUsIGRzdCwgc3JjLCBieXRlcywgbnJvdW5kcyk7CisrCWtlcm5lbF9mcHVfZW5kKCk7CisrfQorK0VYUE9SVF9TWU1CT0woY2hhY2hhX2NyeXB0X2FyY2gpOworKworIHN0YXRpYyBpbnQgY2hhY2hhX3NpbWRfc3RyZWFtX3hvcihzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxLAorIAkJCQkgIGNvbnN0IHN0cnVjdCBjaGFjaGFfY3R4ICpjdHgsIGNvbnN0IHU4ICppdikKKyB7CitAQCAtMTQzLDcgKzE4MCw4IEBAIHN0YXRpYyBpbnQgY2hhY2hhX3NpbWRfc3RyZWFtX3hvcihzdHJ1Y3QKKyAJCWlmIChuYnl0ZXMgPCB3YWxrLnRvdGFsKQorIAkJCW5ieXRlcyA9IHJvdW5kX2Rvd24obmJ5dGVzLCB3YWxrLnN0cmlkZSk7CisgCistCQlpZiAoIWNyeXB0b19zaW1kX3VzYWJsZSgpKSB7CisrCQlpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KCZjaGFjaGFfdXNlX3NpbWQpIHx8CisrCQkgICAgIWNyeXB0b19zaW1kX3VzYWJsZSgpKSB7CisgCQkJY2hhY2hhX2NyeXB0X2dlbmVyaWMoc3RhdGUsIHdhbGsuZHN0LnZpcnQuYWRkciwKKyAJCQkJCSAgICAgd2Fsay5zcmMudmlydC5hZGRyLCBuYnl0ZXMsCisgCQkJCQkgICAgIGN0eC0+bnJvdW5kcyk7CitAQCAtMjQ2LDE4ICsyODQsMjEgQEAgc3RhdGljIHN0cnVjdCBza2NpcGhlcl9hbGcgYWxnc1tdID0geworIHN0YXRpYyBpbnQgX19pbml0IGNoYWNoYV9zaW1kX21vZF9pbml0KHZvaWQpCisgeworIAlpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9TU1NFMykpCistCQlyZXR1cm4gLUVOT0RFVjsKKysJCXJldHVybiAwOworIAorLSNpZmRlZiBDT05GSUdfQVNfQVZYMgorLQljaGFjaGFfdXNlX2F2eDIgPSBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVZYKSAmJgorLQkJCSAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0FWWDIpICYmCistCQkJICBjcHVfaGFzX3hmZWF0dXJlcyhYRkVBVFVSRV9NQVNLX1NTRSB8IFhGRUFUVVJFX01BU0tfWU1NLCBOVUxMKTsKKy0jaWZkZWYgQ09ORklHX0FTX0FWWDUxMgorLQljaGFjaGFfdXNlX2F2eDUxMnZsID0gY2hhY2hhX3VzZV9hdngyICYmCistCQkJICAgICAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0FWWDUxMlZMKSAmJgorLQkJCSAgICAgIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BVlg1MTJCVyk7IC8qIGttb3ZxICovCistI2VuZGlmCistI2VuZGlmCisrCXN0YXRpY19icmFuY2hfZW5hYmxlKCZjaGFjaGFfdXNlX3NpbWQpOworKworKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfQVNfQVZYMikgJiYKKysJICAgIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BVlgpICYmCisrCSAgICBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVZYMikgJiYKKysJICAgIGNwdV9oYXNfeGZlYXR1cmVzKFhGRUFUVVJFX01BU0tfU1NFIHwgWEZFQVRVUkVfTUFTS19ZTU0sIE5VTEwpKSB7CisrCQlzdGF0aWNfYnJhbmNoX2VuYWJsZSgmY2hhY2hhX3VzZV9hdngyKTsKKysKKysJCWlmIChJU19FTkFCTEVEKENPTkZJR19BU19BVlg1MTIpICYmCisrCQkgICAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0FWWDUxMlZMKSAmJgorKwkJICAgIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BVlg1MTJCVykpIC8qIGttb3ZxICovCisrCQkJc3RhdGljX2JyYW5jaF9lbmFibGUoJmNoYWNoYV91c2VfYXZ4NTEydmwpOworKwl9CisgCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfc2tjaXBoZXJzKGFsZ3MsIEFSUkFZX1NJWkUoYWxncykpOworIH0KKyAKKy0tLSBhL2NyeXB0by9LY29uZmlnCisrKysgYi9jcnlwdG8vS2NvbmZpZworQEAgLTE0MTgsNiArMTQxOCw3IEBAIGNvbmZpZyBDUllQVE9fQ0hBQ0hBMjBfWDg2XzY0CisgCWRlcGVuZHMgb24gWDg2ICYmIDY0QklUCisgCXNlbGVjdCBDUllQVE9fQkxLQ0lQSEVSCisgCXNlbGVjdCBDUllQVE9fTElCX0NIQUNIQV9HRU5FUklDCisrCXNlbGVjdCBDUllQVE9fQVJDSF9IQVZFX0xJQl9DSEFDSEEKKyAJaGVscAorIAkgIFNTU0UzLCBBVlgyLCBhbmQgQVZYLTUxMlZMIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIENoYUNoYTIwLAorIAkgIFhDaGFDaGEyMCwgYW5kIFhDaGFDaGExMiBzdHJlYW0gY2lwaGVycy4KKy0tLSBhL2luY2x1ZGUvY3J5cHRvL2NoYWNoYS5oCisrKysgYi9pbmNsdWRlL2NyeXB0by9jaGFjaGEuaAorQEAgLTI1LDYgKzI1LDEyIEBACisgI2RlZmluZSBDSEFDSEFfQkxPQ0tfU0laRQk2NAorICNkZWZpbmUgQ0hBQ0hBUE9MWV9JVl9TSVpFCTEyCisgCisrI2lmZGVmIENPTkZJR19YODZfNjQKKysjZGVmaW5lIENIQUNIQV9TVEFURV9XT1JEUwkoKENIQUNIQV9CTE9DS19TSVpFICsgMTIpIC8gc2l6ZW9mKHUzMikpCisrI2Vsc2UKKysjZGVmaW5lIENIQUNIQV9TVEFURV9XT1JEUwkoQ0hBQ0hBX0JMT0NLX1NJWkUgLyBzaXplb2YodTMyKSkKKysjZW5kaWYKKysKKyAvKiAxOTItYml0IG5vbmNlLCB0aGVuIDY0LWJpdCBzdHJlYW0gcG9zaXRpb24gKi8KKyAjZGVmaW5lIFhDSEFDSEFfSVZfU0laRQkJMzIKKyAKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMDUtY3J5cHRvLWFybTY0LWNoYWNoYS1kZXBlbmQtb24tZ2VuZXJpYy1jaGFjaGEtbGlicmFyeS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMDUtY3J5cHRvLWFybTY0LWNoYWNoYS1kZXBlbmQtb24tZ2VuZXJpYy1jaGFjaGEtbGlicmFyeS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGU0OWMxCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAwNS1jcnlwdG8tYXJtNjQtY2hhY2hhLWRlcGVuZC1vbi1nZW5lcmljLWNoYWNoYS1saWJyYXJ5LnBhdGNoCkBAIC0wLDAgKzEsMTI5IEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgorRGF0ZTogRnJpLCA4IE5vdiAyMDE5IDEzOjIyOjExICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyeXB0bzogYXJtNjQvY2hhY2hhIC0gZGVwZW5kIG9uIGdlbmVyaWMgY2hhY2hhIGxpYnJhcnkKKyBpbnN0ZWFkIG9mIGNyeXB0byBkcml2ZXIKKworY29tbWl0IGM3N2RhNDg2N2NiYjc4NDExNzcyNzVkYmIyNTBmNWMwOTY3OWZhZTQgdXBzdHJlYW0uCisKK0RlcGVuZCBvbiB0aGUgZ2VuZXJpYyBDaGFDaGEgbGlicmFyeSByb3V0aW5lcyBpbnN0ZWFkIG9mIHB1bGxpbmcgaW4gdGhlCitnZW5lcmljIENoYUNoYSBza2NpcGhlciBkcml2ZXIsIHdoaWNoIGlzIG1vcmUgdGhhbiB3ZSBuZWVkLCBhbmQgbWFrZXMKK21hbmFnaW5nIHRoZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGUgZ2VuZXJpYyBsaWJyYXJ5LCBnZW5lcmljIGRyaXZlciwKK2FjY2VsZXJhdGVkIGxpYnJhcnkgYW5kIGRyaXZlciBtb3JlIGNvbXBsaWNhdGVkLgorCitXaGlsZSBhdCBpdCwgZHJvcCB0aGUgbG9naWMgdG8gcHJlZmVyIHRoZSBzY2FsYXIgY29kZSBvbiBzaG9ydCBpbnB1dHMuCitUdXJuaW5nIHRoZSBORU9OIG9uIGFuZCBvZmYgaXMgY2hlYXAgdGhlc2UgZGF5cywgYW5kIG9uZSBtYWpvciB1c2UgY2FzZQorZm9yIENoYUNoYTIwIGlzIENoYUNoYTIwLVBvbHkxMzA1LCB3aGljaCBpcyBndWFyYW50ZWVkIHRvIGhpdCB0aGUgc2NhbGFyCitwYXRoIHVwb24gZXZlcnkgaW52b2NhdGlvbiAgKHdoZW4gZG9pbmcgdGhlIFBvbHkxMzA1IG5vbmNlIGdlbmVyYXRpb24pCisKK1NpZ25lZC1vZmYtYnk6IEFyZCBCaWVzaGV1dmVsIDxhcmRiQGtlcm5lbC5vcmc+CitTaWduZWQtb2ZmLWJ5OiBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGFyY2gvYXJtNjQvY3J5cHRvL0tjb25maWcgICAgICAgICAgICB8ICAyICstCisgYXJjaC9hcm02NC9jcnlwdG8vY2hhY2hhLW5lb24tZ2x1ZS5jIHwgNDAgKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMjMgaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCisKKy0tLSBhL2FyY2gvYXJtNjQvY3J5cHRvL0tjb25maWcKKysrKyBiL2FyY2gvYXJtNjQvY3J5cHRvL0tjb25maWcKK0BAIC0xMDMsNyArMTAzLDcgQEAgY29uZmlnIENSWVBUT19DSEFDSEEyMF9ORU9OCisgCXRyaXN0YXRlICJDaGFDaGEyMCwgWENoYUNoYTIwLCBhbmQgWENoYUNoYTEyIHN0cmVhbSBjaXBoZXJzIHVzaW5nIE5FT04gaW5zdHJ1Y3Rpb25zIgorIAlkZXBlbmRzIG9uIEtFUk5FTF9NT0RFX05FT04KKyAJc2VsZWN0IENSWVBUT19CTEtDSVBIRVIKKy0Jc2VsZWN0IENSWVBUT19DSEFDSEEyMAorKwlzZWxlY3QgQ1JZUFRPX0xJQl9DSEFDSEFfR0VORVJJQworIAorIGNvbmZpZyBDUllQVE9fTkhQT0xZMTMwNV9ORU9OCisgCXRyaXN0YXRlICJOSFBvbHkxMzA1IGhhc2ggZnVuY3Rpb24gdXNpbmcgTkVPTiBpbnN0cnVjdGlvbnMgKGZvciBBZGlhbnR1bSkiCistLS0gYS9hcmNoL2FybTY0L2NyeXB0by9jaGFjaGEtbmVvbi1nbHVlLmMKKysrKyBiL2FyY2gvYXJtNjQvY3J5cHRvL2NoYWNoYS1uZW9uLWdsdWUuYworQEAgLTY4LDcgKzY4LDcgQEAgc3RhdGljIGludCBjaGFjaGFfbmVvbl9zdHJlYW1feG9yKHN0cnVjdAorIAorIAllcnIgPSBza2NpcGhlcl93YWxrX3ZpcnQoJndhbGssIHJlcSwgZmFsc2UpOworIAorLQljcnlwdG9fY2hhY2hhX2luaXQoc3RhdGUsIGN0eCwgaXYpOworKwljaGFjaGFfaW5pdF9nZW5lcmljKHN0YXRlLCBjdHgtPmtleSwgaXYpOworIAorIAl3aGlsZSAod2Fsay5uYnl0ZXMgPiAwKSB7CisgCQl1bnNpZ25lZCBpbnQgbmJ5dGVzID0gd2Fsay5uYnl0ZXM7CitAQCAtNzYsMTAgKzc2LDE2IEBAIHN0YXRpYyBpbnQgY2hhY2hhX25lb25fc3RyZWFtX3hvcihzdHJ1Y3QKKyAJCWlmIChuYnl0ZXMgPCB3YWxrLnRvdGFsKQorIAkJCW5ieXRlcyA9IHJvdW5kZG93bihuYnl0ZXMsIHdhbGsuc3RyaWRlKTsKKyAKKy0JCWtlcm5lbF9uZW9uX2JlZ2luKCk7CistCQljaGFjaGFfZG9uZW9uKHN0YXRlLCB3YWxrLmRzdC52aXJ0LmFkZHIsIHdhbGsuc3JjLnZpcnQuYWRkciwKKy0JCQkgICAgICBuYnl0ZXMsIGN0eC0+bnJvdW5kcyk7CistCQlrZXJuZWxfbmVvbl9lbmQoKTsKKysJCWlmICghY3J5cHRvX3NpbWRfdXNhYmxlKCkpIHsKKysJCQljaGFjaGFfY3J5cHRfZ2VuZXJpYyhzdGF0ZSwgd2Fsay5kc3QudmlydC5hZGRyLAorKwkJCQkJICAgICB3YWxrLnNyYy52aXJ0LmFkZHIsIG5ieXRlcywKKysJCQkJCSAgICAgY3R4LT5ucm91bmRzKTsKKysJCX0gZWxzZSB7CisrCQkJa2VybmVsX25lb25fYmVnaW4oKTsKKysJCQljaGFjaGFfZG9uZW9uKHN0YXRlLCB3YWxrLmRzdC52aXJ0LmFkZHIsCisrCQkJCSAgICAgIHdhbGsuc3JjLnZpcnQuYWRkciwgbmJ5dGVzLCBjdHgtPm5yb3VuZHMpOworKwkJCWtlcm5lbF9uZW9uX2VuZCgpOworKwkJfQorIAkJZXJyID0gc2tjaXBoZXJfd2Fsa19kb25lKCZ3YWxrLCB3YWxrLm5ieXRlcyAtIG5ieXRlcyk7CisgCX0KKyAKK0BAIC05MSw5ICs5Nyw2IEBAIHN0YXRpYyBpbnQgY2hhY2hhX25lb24oc3RydWN0IHNrY2lwaGVyX3IKKyAJc3RydWN0IGNyeXB0b19za2NpcGhlciAqdGZtID0gY3J5cHRvX3NrY2lwaGVyX3JlcXRmbShyZXEpOworIAlzdHJ1Y3QgY2hhY2hhX2N0eCAqY3R4ID0gY3J5cHRvX3NrY2lwaGVyX2N0eCh0Zm0pOworIAorLQlpZiAocmVxLT5jcnlwdGxlbiA8PSBDSEFDSEFfQkxPQ0tfU0laRSB8fCAhY3J5cHRvX3NpbWRfdXNhYmxlKCkpCistCQlyZXR1cm4gY3J5cHRvX2NoYWNoYV9jcnlwdChyZXEpOworLQorIAlyZXR1cm4gY2hhY2hhX25lb25fc3RyZWFtX3hvcihyZXEsIGN0eCwgcmVxLT5pdik7CisgfQorIAorQEAgLTEwNSwxNCArMTA4LDE1IEBAIHN0YXRpYyBpbnQgeGNoYWNoYV9uZW9uKHN0cnVjdCBza2NpcGhlcl8KKyAJdTMyIHN0YXRlWzE2XTsKKyAJdTggcmVhbF9pdlsxNl07CisgCistCWlmIChyZXEtPmNyeXB0bGVuIDw9IENIQUNIQV9CTE9DS19TSVpFIHx8ICFjcnlwdG9fc2ltZF91c2FibGUoKSkKKy0JCXJldHVybiBjcnlwdG9feGNoYWNoYV9jcnlwdChyZXEpOworLQorLQljcnlwdG9fY2hhY2hhX2luaXQoc3RhdGUsIGN0eCwgcmVxLT5pdik7CisrCWNoYWNoYV9pbml0X2dlbmVyaWMoc3RhdGUsIGN0eC0+a2V5LCByZXEtPml2KTsKKyAKKy0Ja2VybmVsX25lb25fYmVnaW4oKTsKKy0JaGNoYWNoYV9ibG9ja19uZW9uKHN0YXRlLCBzdWJjdHgua2V5LCBjdHgtPm5yb3VuZHMpOworLQlrZXJuZWxfbmVvbl9lbmQoKTsKKysJaWYgKGNyeXB0b19zaW1kX3VzYWJsZSgpKSB7CisrCQlrZXJuZWxfbmVvbl9iZWdpbigpOworKwkJaGNoYWNoYV9ibG9ja19uZW9uKHN0YXRlLCBzdWJjdHgua2V5LCBjdHgtPm5yb3VuZHMpOworKwkJa2VybmVsX25lb25fZW5kKCk7CisrCX0gZWxzZSB7CisrCQloY2hhY2hhX2Jsb2NrX2dlbmVyaWMoc3RhdGUsIHN1YmN0eC5rZXksIGN0eC0+bnJvdW5kcyk7CisrCX0KKyAJc3ViY3R4Lm5yb3VuZHMgPSBjdHgtPm5yb3VuZHM7CisgCisgCW1lbWNweSgmcmVhbF9pdlswXSwgcmVxLT5pdiArIDI0LCA4KTsKK0BAIC0xMzQsNyArMTM4LDcgQEAgc3RhdGljIHN0cnVjdCBza2NpcGhlcl9hbGcgYWxnc1tdID0geworIAkJLml2c2l6ZQkJCT0gQ0hBQ0hBX0lWX1NJWkUsCisgCQkuY2h1bmtzaXplCQk9IENIQUNIQV9CTE9DS19TSVpFLAorIAkJLndhbGtzaXplCQk9IDUgKiBDSEFDSEFfQkxPQ0tfU0laRSwKKy0JCS5zZXRrZXkJCQk9IGNyeXB0b19jaGFjaGEyMF9zZXRrZXksCisrCQkuc2V0a2V5CQkJPSBjaGFjaGEyMF9zZXRrZXksCisgCQkuZW5jcnlwdAkJPSBjaGFjaGFfbmVvbiwKKyAJCS5kZWNyeXB0CQk9IGNoYWNoYV9uZW9uLAorIAl9LCB7CitAQCAtMTUwLDcgKzE1NCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tjaXBoZXJfYWxnIGFsZ3NbXSA9IHsKKyAJCS5pdnNpemUJCQk9IFhDSEFDSEFfSVZfU0laRSwKKyAJCS5jaHVua3NpemUJCT0gQ0hBQ0hBX0JMT0NLX1NJWkUsCisgCQkud2Fsa3NpemUJCT0gNSAqIENIQUNIQV9CTE9DS19TSVpFLAorLQkJLnNldGtleQkJCT0gY3J5cHRvX2NoYWNoYTIwX3NldGtleSwKKysJCS5zZXRrZXkJCQk9IGNoYWNoYTIwX3NldGtleSwKKyAJCS5lbmNyeXB0CQk9IHhjaGFjaGFfbmVvbiwKKyAJCS5kZWNyeXB0CQk9IHhjaGFjaGFfbmVvbiwKKyAJfSwgeworQEAgLTE2Niw3ICsxNzAsNyBAQCBzdGF0aWMgc3RydWN0IHNrY2lwaGVyX2FsZyBhbGdzW10gPSB7CisgCQkuaXZzaXplCQkJPSBYQ0hBQ0hBX0lWX1NJWkUsCisgCQkuY2h1bmtzaXplCQk9IENIQUNIQV9CTE9DS19TSVpFLAorIAkJLndhbGtzaXplCQk9IDUgKiBDSEFDSEFfQkxPQ0tfU0laRSwKKy0JCS5zZXRrZXkJCQk9IGNyeXB0b19jaGFjaGExMl9zZXRrZXksCisrCQkuc2V0a2V5CQkJPSBjaGFjaGExMl9zZXRrZXksCisgCQkuZW5jcnlwdAkJPSB4Y2hhY2hhX25lb24sCisgCQkuZGVjcnlwdAkJPSB4Y2hhY2hhX25lb24sCisgCX0KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMDYtY3J5cHRvLWFybTY0LWNoYWNoYS1leHBvc2UtYXJtNjQtQ2hhQ2hhLXJvdXRpbmUtYXMtbC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMDYtY3J5cHRvLWFybTY0LWNoYWNoYS1leHBvc2UtYXJtNjQtQ2hhQ2hhLXJvdXRpbmUtYXMtbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTY2NWU4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAwNi1jcnlwdG8tYXJtNjQtY2hhY2hhLWV4cG9zZS1hcm02NC1DaGFDaGEtcm91dGluZS1hcy1sLnBhdGNoCkBAIC0wLDAgKzEsMTM4IEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgorRGF0ZTogRnJpLCA4IE5vdiAyMDE5IDEzOjIyOjEyICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyeXB0bzogYXJtNjQvY2hhY2hhIC0gZXhwb3NlIGFybTY0IENoYUNoYSByb3V0aW5lIGFzIGxpYnJhcnkKKyBmdW5jdGlvbgorCitjb21taXQgYjNhYWQ1YmFkMjZhMDFhNGJkOGM0OWE1YzVmNTJhZWM2NjVmM2I3YyB1cHN0cmVhbS4KKworRXhwb3NlIHRoZSBhY2NlbGVyYXRlZCBORU9OIENoYUNoYSByb3V0aW5lIGRpcmVjdGx5IGFzIGEgc3ltYm9sCitleHBvcnQgc28gdGhhdCB1c2VycyBvZiB0aGUgQ2hhQ2hhIGxpYnJhcnkgQVBJIGNhbiB1c2UgaXQgZGlyZWN0bHkuCisKK0dpdmVuIHRoYXQgY2FsbHMgaW50byB0aGUgbGlicmFyeSBBUEkgd2lsbCBhbHdheXMgZ28gdGhyb3VnaCB0aGUKK3JvdXRpbmVzIGluIHRoaXMgbW9kdWxlIGlmIGl0IGlzIGVuYWJsZWQsIHN3aXRjaCB0byBzdGF0aWMga2V5cwordG8gc2VsZWN0IHRoZSBvcHRpbWFsIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSAod2hpY2ggbWF5IGJlIG5vbmUKK2F0IGFsbCwgaW4gd2hpY2ggY2FzZSB3ZSBkZWZlciB0byB0aGUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBmb3IKK2FsbCBpbnZvY2F0aW9ucykuCisKK1NpZ25lZC1vZmYtYnk6IEFyZCBCaWVzaGV1dmVsIDxhcmRiQGtlcm5lbC5vcmc+CitTaWduZWQtb2ZmLWJ5OiBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGFyY2gvYXJtNjQvY3J5cHRvL0tjb25maWcgICAgICAgICAgICB8ICAxICsKKyBhcmNoL2FybTY0L2NyeXB0by9jaGFjaGEtbmVvbi1nbHVlLmMgfCA1MyArKysrKysrKysrKysrKysrKysrKysrLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA0MyBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKKworLS0tIGEvYXJjaC9hcm02NC9jcnlwdG8vS2NvbmZpZworKysrIGIvYXJjaC9hcm02NC9jcnlwdG8vS2NvbmZpZworQEAgLTEwNCw2ICsxMDQsNyBAQCBjb25maWcgQ1JZUFRPX0NIQUNIQTIwX05FT04KKyAJZGVwZW5kcyBvbiBLRVJORUxfTU9ERV9ORU9OCisgCXNlbGVjdCBDUllQVE9fQkxLQ0lQSEVSCisgCXNlbGVjdCBDUllQVE9fTElCX0NIQUNIQV9HRU5FUklDCisrCXNlbGVjdCBDUllQVE9fQVJDSF9IQVZFX0xJQl9DSEFDSEEKKyAKKyBjb25maWcgQ1JZUFRPX05IUE9MWTEzMDVfTkVPTgorIAl0cmlzdGF0ZSAiTkhQb2x5MTMwNSBoYXNoIGZ1bmN0aW9uIHVzaW5nIE5FT04gaW5zdHJ1Y3Rpb25zIChmb3IgQWRpYW50dW0pIgorLS0tIGEvYXJjaC9hcm02NC9jcnlwdG8vY2hhY2hhLW5lb24tZ2x1ZS5jCisrKysgYi9hcmNoL2FybTY0L2NyeXB0by9jaGFjaGEtbmVvbi1nbHVlLmMKK0BAIC0yMyw2ICsyMyw3IEBACisgI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9jaGFjaGEuaD4KKyAjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL3NpbWQuaD4KKyAjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL3NrY2lwaGVyLmg+CisrI2luY2x1ZGUgPGxpbnV4L2p1bXBfbGFiZWwuaD4KKyAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisgI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorIAorQEAgLTM2LDYgKzM3LDggQEAgYXNtbGlua2FnZSB2b2lkIGNoYWNoYV80YmxvY2tfeG9yX25lb24odQorIAkJCQkgICAgICAgaW50IG5yb3VuZHMsIGludCBieXRlcyk7CisgYXNtbGlua2FnZSB2b2lkIGhjaGFjaGFfYmxvY2tfbmVvbihjb25zdCB1MzIgKnN0YXRlLCB1MzIgKm91dCwgaW50IG5yb3VuZHMpOworIAorK3N0YXRpYyBfX3JvX2FmdGVyX2luaXQgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoaGF2ZV9uZW9uKTsKKysKKyBzdGF0aWMgdm9pZCBjaGFjaGFfZG9uZW9uKHUzMiAqc3RhdGUsIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsCisgCQkJICBpbnQgYnl0ZXMsIGludCBucm91bmRzKQorIHsKK0BAIC01OSw2ICs2MiwzNyBAQCBzdGF0aWMgdm9pZCBjaGFjaGFfZG9uZW9uKHUzMiAqc3RhdGUsIHU4CisgCX0KKyB9CisgCisrdm9pZCBoY2hhY2hhX2Jsb2NrX2FyY2goY29uc3QgdTMyICpzdGF0ZSwgdTMyICpzdHJlYW0sIGludCBucm91bmRzKQorK3sKKysJaWYgKCFzdGF0aWNfYnJhbmNoX2xpa2VseSgmaGF2ZV9uZW9uKSB8fCAhY3J5cHRvX3NpbWRfdXNhYmxlKCkpIHsKKysJCWhjaGFjaGFfYmxvY2tfZ2VuZXJpYyhzdGF0ZSwgc3RyZWFtLCBucm91bmRzKTsKKysJfSBlbHNlIHsKKysJCWtlcm5lbF9uZW9uX2JlZ2luKCk7CisrCQloY2hhY2hhX2Jsb2NrX25lb24oc3RhdGUsIHN0cmVhbSwgbnJvdW5kcyk7CisrCQlrZXJuZWxfbmVvbl9lbmQoKTsKKysJfQorK30KKytFWFBPUlRfU1lNQk9MKGhjaGFjaGFfYmxvY2tfYXJjaCk7CisrCisrdm9pZCBjaGFjaGFfaW5pdF9hcmNoKHUzMiAqc3RhdGUsIGNvbnN0IHUzMiAqa2V5LCBjb25zdCB1OCAqaXYpCisreworKwljaGFjaGFfaW5pdF9nZW5lcmljKHN0YXRlLCBrZXksIGl2KTsKKyt9CisrRVhQT1JUX1NZTUJPTChjaGFjaGFfaW5pdF9hcmNoKTsKKysKKyt2b2lkIGNoYWNoYV9jcnlwdF9hcmNoKHUzMiAqc3RhdGUsIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsIHVuc2lnbmVkIGludCBieXRlcywKKysJCSAgICAgICBpbnQgbnJvdW5kcykKKyt7CisrCWlmICghc3RhdGljX2JyYW5jaF9saWtlbHkoJmhhdmVfbmVvbikgfHwgYnl0ZXMgPD0gQ0hBQ0hBX0JMT0NLX1NJWkUgfHwKKysJICAgICFjcnlwdG9fc2ltZF91c2FibGUoKSkKKysJCXJldHVybiBjaGFjaGFfY3J5cHRfZ2VuZXJpYyhzdGF0ZSwgZHN0LCBzcmMsIGJ5dGVzLCBucm91bmRzKTsKKysKKysJa2VybmVsX25lb25fYmVnaW4oKTsKKysJY2hhY2hhX2RvbmVvbihzdGF0ZSwgZHN0LCBzcmMsIGJ5dGVzLCBucm91bmRzKTsKKysJa2VybmVsX25lb25fZW5kKCk7CisrfQorK0VYUE9SVF9TWU1CT0woY2hhY2hhX2NyeXB0X2FyY2gpOworKworIHN0YXRpYyBpbnQgY2hhY2hhX25lb25fc3RyZWFtX3hvcihzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxLAorIAkJCQkgIGNvbnN0IHN0cnVjdCBjaGFjaGFfY3R4ICpjdHgsIGNvbnN0IHU4ICppdikKKyB7CitAQCAtNzYsNyArMTEwLDggQEAgc3RhdGljIGludCBjaGFjaGFfbmVvbl9zdHJlYW1feG9yKHN0cnVjdAorIAkJaWYgKG5ieXRlcyA8IHdhbGsudG90YWwpCisgCQkJbmJ5dGVzID0gcm91bmRkb3duKG5ieXRlcywgd2Fsay5zdHJpZGUpOworIAorLQkJaWYgKCFjcnlwdG9fc2ltZF91c2FibGUoKSkgeworKwkJaWYgKCFzdGF0aWNfYnJhbmNoX2xpa2VseSgmaGF2ZV9uZW9uKSB8fAorKwkJICAgICFjcnlwdG9fc2ltZF91c2FibGUoKSkgeworIAkJCWNoYWNoYV9jcnlwdF9nZW5lcmljKHN0YXRlLCB3YWxrLmRzdC52aXJ0LmFkZHIsCisgCQkJCQkgICAgIHdhbGsuc3JjLnZpcnQuYWRkciwgbmJ5dGVzLAorIAkJCQkJICAgICBjdHgtPm5yb3VuZHMpOworQEAgLTEwOSwxNCArMTQ0LDcgQEAgc3RhdGljIGludCB4Y2hhY2hhX25lb24oc3RydWN0IHNrY2lwaGVyXworIAl1OCByZWFsX2l2WzE2XTsKKyAKKyAJY2hhY2hhX2luaXRfZ2VuZXJpYyhzdGF0ZSwgY3R4LT5rZXksIHJlcS0+aXYpOworLQorLQlpZiAoY3J5cHRvX3NpbWRfdXNhYmxlKCkpIHsKKy0JCWtlcm5lbF9uZW9uX2JlZ2luKCk7CistCQloY2hhY2hhX2Jsb2NrX25lb24oc3RhdGUsIHN1YmN0eC5rZXksIGN0eC0+bnJvdW5kcyk7CistCQlrZXJuZWxfbmVvbl9lbmQoKTsKKy0JfSBlbHNlIHsKKy0JCWhjaGFjaGFfYmxvY2tfZ2VuZXJpYyhzdGF0ZSwgc3ViY3R4LmtleSwgY3R4LT5ucm91bmRzKTsKKy0JfQorKwloY2hhY2hhX2Jsb2NrX2FyY2goc3RhdGUsIHN1YmN0eC5rZXksIGN0eC0+bnJvdW5kcyk7CisgCXN1YmN0eC5ucm91bmRzID0gY3R4LT5ucm91bmRzOworIAorIAltZW1jcHkoJnJlYWxfaXZbMF0sIHJlcS0+aXYgKyAyNCwgOCk7CitAQCAtMTc5LDE0ICsyMDcsMTcgQEAgc3RhdGljIHN0cnVjdCBza2NpcGhlcl9hbGcgYWxnc1tdID0geworIHN0YXRpYyBpbnQgX19pbml0IGNoYWNoYV9zaW1kX21vZF9pbml0KHZvaWQpCisgeworIAlpZiAoIWNwdV9oYXZlX25hbWVkX2ZlYXR1cmUoQVNJTUQpKQorLQkJcmV0dXJuIC1FTk9ERVY7CisrCQlyZXR1cm4gMDsKKysKKysJc3RhdGljX2JyYW5jaF9lbmFibGUoJmhhdmVfbmVvbik7CisgCisgCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfc2tjaXBoZXJzKGFsZ3MsIEFSUkFZX1NJWkUoYWxncykpOworIH0KKyAKKyBzdGF0aWMgdm9pZCBfX2V4aXQgY2hhY2hhX3NpbWRfbW9kX2Zpbmkodm9pZCkKKyB7CistCWNyeXB0b191bnJlZ2lzdGVyX3NrY2lwaGVycyhhbGdzLCBBUlJBWV9TSVpFKGFsZ3MpKTsKKysJaWYgKGNwdV9oYXZlX25hbWVkX2ZlYXR1cmUoQVNJTUQpKQorKwkJY3J5cHRvX3VucmVnaXN0ZXJfc2tjaXBoZXJzKGFsZ3MsIEFSUkFZX1NJWkUoYWxncykpOworIH0KKyAKKyBtb2R1bGVfaW5pdChjaGFjaGFfc2ltZF9tb2RfaW5pdCk7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDA3LWNyeXB0by1hcm0tY2hhY2hhLWltcG9ydC1FcmljLUJpZ2dlcnMtcy1zY2FsYXItYWNjZWwucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDA3LWNyeXB0by1hcm0tY2hhY2hhLWltcG9ydC1FcmljLUJpZ2dlcnMtcy1zY2FsYXItYWNjZWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc4ZjJmNQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMDctY3J5cHRvLWFybS1jaGFjaGEtaW1wb3J0LUVyaWMtQmlnZ2Vycy1zLXNjYWxhci1hY2NlbC5wYXRjaApAQCAtMCwwICsxLDQ4MCBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQXJkIEJpZXNoZXV2ZWwgPGFyZGJAa2VybmVsLm9yZz4KK0RhdGU6IEZyaSwgOCBOb3YgMjAxOSAxMzoyMjoxMyArMDEwMAorU3ViamVjdDogW1BBVENIXSBjcnlwdG86IGFybS9jaGFjaGEgLSBpbXBvcnQgRXJpYyBCaWdnZXJzJ3Mgc2NhbGFyIGFjY2VsZXJhdGVkCisgQ2hhQ2hhIGNvZGUKKworY29tbWl0IDI5NjIxZDA5OWY5YzY0MmIyMmE2OWRjOGU3ZTIwYzEwODQ3M2EzOTIgdXBzdHJlYW0uCisKK1NpZ25lZC1vZmYtYnk6IEFyZCBCaWVzaGV1dmVsIDxhcmRiQGtlcm5lbC5vcmc+CitTaWduZWQtb2ZmLWJ5OiBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGFyY2gvYXJtL2NyeXB0by9jaGFjaGEtc2NhbGFyLWNvcmUuUyB8IDQ2MSArKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNDYxIGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC9hcm0vY3J5cHRvL2NoYWNoYS1zY2FsYXItY29yZS5TCisKKy0tLSAvZGV2L251bGwKKysrKyBiL2FyY2gvYXJtL2NyeXB0by9jaGFjaGEtc2NhbGFyLWNvcmUuUworQEAgLTAsMCArMSw0NjEgQEAKKysvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworKy8qCisrICogQ29weXJpZ2h0IChDKSAyMDE4IEdvb2dsZSwgSW5jLgorKyAqLworKworKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisrI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKysKKysvKgorKyAqIERlc2lnbiBub3RlczoKKysgKgorKyAqIDE2IHJlZ2lzdGVycyB3b3VsZCBiZSBuZWVkZWQgdG8gaG9sZCB0aGUgc3RhdGUgbWF0cml4LCBidXQgb25seSAxNCBhcmUKKysgKiBhdmFpbGFibGUgYmVjYXVzZSAnc3AnIGFuZCAncGMnIGNhbm5vdCBiZSB1c2VkLiAgU28gd2Ugc3BpbGwgdGhlIGVsZW1lbnRzCisrICogKHg4LCB4OSkgdG8gdGhlIHN0YWNrIGFuZCBzd2FwIHRoZW0gb3V0IHdpdGggKHgxMCwgeDExKS4gIFRoaXMgYWRkcyBvbmUKKysgKiAnbGRyZCcgYW5kIG9uZSAnc3RyZCcgaW5zdHJ1Y3Rpb24gcGVyIHJvdW5kLgorKyAqCisrICogQWxsIHJvdGF0ZXMgYXJlIHBlcmZvcm1lZCB1c2luZyB0aGUgaW1wbGljaXQgcm90YXRlIG9wZXJhbmQgYWNjZXB0ZWQgYnkgdGhlCisrICogJ2FkZCcgYW5kICdlb3InIGluc3RydWN0aW9ucy4gIFRoaXMgaXMgZmFzdGVyIHRoYW4gdXNpbmcgZXhwbGljaXQgcm90YXRlCisrICogaW5zdHJ1Y3Rpb25zLiAgVG8gbWFrZSB0aGlzIHdvcmssIHdlIGFsbG93IHRoZSB2YWx1ZXMgaW4gdGhlIHNlY29uZCBhbmQgbGFzdAorKyAqIHJvd3Mgb2YgdGhlIENoYUNoYSBzdGF0ZSBtYXRyaXggKHJvd3MgJ2InIGFuZCAnZCcpIHRvIHRlbXBvcmFyaWx5IGhhdmUgdGhlCisrICogd3Jvbmcgcm90YXRpb24gYW1vdW50LiAgVGhlIHJvdGF0aW9uIGFtb3VudCBpcyB0aGVuIGZpeGVkIHVwIGp1c3QgaW4gdGltZQorKyAqIHdoZW4gdGhlIHZhbHVlcyBhcmUgdXNlZC4gICdicm90JyBpcyB0aGUgbnVtYmVyIG9mIGJpdHMgdGhlIHZhbHVlcyBpbiByb3cgJ2InCisrICogbmVlZCB0byBiZSByb3RhdGVkIHJpZ2h0IHRvIGFycml2ZSBhdCB0aGUgY29ycmVjdCB2YWx1ZXMsIGFuZCAnZHJvdCcKKysgKiBzaW1pbGFybHkgZm9yIHJvdyAnZCcuICAoYnJvdCwgZHJvdCkgc3RhcnQgb3V0IGFzICgwLCAwKSBidXQgd2UgbWFrZSBpdCBzdWNoCisrICogdGhhdCB0aGV5IGVuZCB1cCBhcyAoMjUsIDI0KSBhZnRlciBldmVyeSByb3VuZC4KKysgKi8KKysKKysJLy8gQ2hhQ2hhIHN0YXRlIHJlZ2lzdGVycworKwlYMAkucmVxCXIwCisrCVgxCS5yZXEJcjEKKysJWDIJLnJlcQlyMgorKwlYMwkucmVxCXIzCisrCVg0CS5yZXEJcjQKKysJWDUJLnJlcQlyNQorKwlYNgkucmVxCXI2CisrCVg3CS5yZXEJcjcKKysJWDhfWDEwCS5yZXEJcjgJLy8gc2hhcmVkIGJ5IHg4IGFuZCB4MTAKKysJWDlfWDExCS5yZXEJcjkJLy8gc2hhcmVkIGJ5IHg5IGFuZCB4MTEKKysJWDEyCS5yZXEJcjEwCisrCVgxMwkucmVxCXIxMQorKwlYMTQJLnJlcQlyMTIKKysJWDE1CS5yZXEJcjE0CisrCisrLkxleHBhbmRfMzJieXRlX2s6CisrCS8vICJleHBhbmQgMzItYnl0ZSBrIgorKwkud29yZAkweDYxNzA3ODY1LCAweDMzMjA2NDZlLCAweDc5NjIyZDMyLCAweDZiMjA2NTc0CisrCisrI2lmZGVmIF9fdGh1bWIyX18KKysjICBkZWZpbmUgYWRybCBhZHIKKysjZW5kaWYKKysKKysubWFjcm8gX19yZXYJCW91dCwgaW4sICB0MCwgdDEsIHQyCisrLmlmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA2CisrCXJldgkJXG91dCwgXGluCisrLmVsc2UKKysJbHNsCQlcdDAsIFxpbiwgIzI0CisrCWFuZAkJXHQxLCBcaW4sICMweGZmMDAKKysJYW5kCQlcdDIsIFxpbiwgIzB4ZmYwMDAwCisrCW9ycgkJXG91dCwgXHQwLCBcaW4sIGxzciAjMjQKKysJb3JyCQlcb3V0LCBcb3V0LCBcdDEsIGxzbCAjOAorKwlvcnIJCVxvdXQsIFxvdXQsIFx0MiwgbHNyICM4CisrLmVuZGlmCisrLmVuZG0KKysKKysubWFjcm8gX2xlMzJfYnN3YXAJeCwgIHQwLCB0MSwgdDIKKysjaWZkZWYgX19BUk1FQl9fCisrCV9fcmV2CQlceCwgXHgsICBcdDAsIFx0MSwgXHQyCisrI2VuZGlmCisrLmVuZG0KKysKKysubWFjcm8gX2xlMzJfYnN3YXBfNHgJYSwgYiwgYywgZCwgIHQwLCB0MSwgdDIKKysJX2xlMzJfYnN3YXAJXGEsICBcdDAsIFx0MSwgXHQyCisrCV9sZTMyX2Jzd2FwCVxiLCAgXHQwLCBcdDEsIFx0MgorKwlfbGUzMl9ic3dhcAlcYywgIFx0MCwgXHQxLCBcdDIKKysJX2xlMzJfYnN3YXAJXGQsICBcdDAsIFx0MSwgXHQyCisrLmVuZG0KKysKKysubWFjcm8gX19sZHJkCQlhLCBiLCBzcmMsIG9mZnNldAorKyNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPj0gNgorKwlsZHJkCQlcYSwgXGIsIFtcc3JjLCAjXG9mZnNldF0KKysjZWxzZQorKwlsZHIJCVxhLCBbXHNyYywgI1xvZmZzZXRdCisrCWxkcgkJXGIsIFtcc3JjLCAjXG9mZnNldCArIDRdCisrI2VuZGlmCisrLmVuZG0KKysKKysubWFjcm8gX19zdHJkCQlhLCBiLCBkc3QsIG9mZnNldAorKyNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPj0gNgorKwlzdHJkCQlcYSwgXGIsIFtcZHN0LCAjXG9mZnNldF0KKysjZWxzZQorKwlzdHIJCVxhLCBbXGRzdCwgI1xvZmZzZXRdCisrCXN0cgkJXGIsIFtcZHN0LCAjXG9mZnNldCArIDRdCisrI2VuZGlmCisrLmVuZG0KKysKKysubWFjcm8gX2hhbGZyb3VuZAlhMSwgYjEsIGMxLCBkMSwgIGEyLCBiMiwgYzIsIGQyCisrCisrCS8vIGEgKz0gYjsgZCBePSBhOyBkID0gcm9sKGQsIDE2KTsKKysJYWRkCQlcYTEsIFxhMSwgXGIxLCByb3IgI2Jyb3QKKysJYWRkCQlcYTIsIFxhMiwgXGIyLCByb3IgI2Jyb3QKKysJZW9yCQlcZDEsIFxhMSwgXGQxLCByb3IgI2Ryb3QKKysJZW9yCQlcZDIsIFxhMiwgXGQyLCByb3IgI2Ryb3QKKysJLy8gZHJvdCA9PSAzMiAtIDE2ID09IDE2CisrCisrCS8vIGMgKz0gZDsgYiBePSBjOyBiID0gcm9sKGIsIDEyKTsKKysJYWRkCQlcYzEsIFxjMSwgXGQxLCByb3IgIzE2CisrCWFkZAkJXGMyLCBcYzIsIFxkMiwgcm9yICMxNgorKwllb3IJCVxiMSwgXGMxLCBcYjEsIHJvciAjYnJvdAorKwllb3IJCVxiMiwgXGMyLCBcYjIsIHJvciAjYnJvdAorKwkvLyBicm90ID09IDMyIC0gMTIgPT0gMjAKKysKKysJLy8gYSArPSBiOyBkIF49IGE7IGQgPSByb2woZCwgOCk7CisrCWFkZAkJXGExLCBcYTEsIFxiMSwgcm9yICMyMAorKwlhZGQJCVxhMiwgXGEyLCBcYjIsIHJvciAjMjAKKysJZW9yCQlcZDEsIFxhMSwgXGQxLCByb3IgIzE2CisrCWVvcgkJXGQyLCBcYTIsIFxkMiwgcm9yICMxNgorKwkvLyBkcm90ID09IDMyIC0gOCA9PSAyNAorKworKwkvLyBjICs9IGQ7IGIgXj0gYzsgYiA9IHJvbChiLCA3KTsKKysJYWRkCQlcYzEsIFxjMSwgXGQxLCByb3IgIzI0CisrCWFkZAkJXGMyLCBcYzIsIFxkMiwgcm9yICMyNAorKwllb3IJCVxiMSwgXGMxLCBcYjEsIHJvciAjMjAKKysJZW9yCQlcYjIsIFxjMiwgXGIyLCByb3IgIzIwCisrCS8vIGJyb3QgPT0gMzIgLSA3ID09IDI1CisrLmVuZG0KKysKKysubWFjcm8gX2RvdWJsZXJvdW5kCisrCisrCS8vIGNvbHVtbiByb3VuZAorKworKwkvLyBxdWFydGVycm91bmRzOiAoeDAsIHg0LCB4OCwgeDEyKSBhbmQgKHgxLCB4NSwgeDksIHgxMykKKysJX2hhbGZyb3VuZAlYMCwgWDQsIFg4X1gxMCwgWDEyLCAgWDEsIFg1LCBYOV9YMTEsIFgxMworKworKwkvLyBzYXZlICh4OCwgeDkpOyByZXN0b3JlICh4MTAsIHgxMSkKKysJX19zdHJkCQlYOF9YMTAsIFg5X1gxMSwgc3AsIDAKKysJX19sZHJkCQlYOF9YMTAsIFg5X1gxMSwgc3AsIDgKKysKKysJLy8gcXVhcnRlcnJvdW5kczogKHgyLCB4NiwgeDEwLCB4MTQpIGFuZCAoeDMsIHg3LCB4MTEsIHgxNSkKKysJX2hhbGZyb3VuZAlYMiwgWDYsIFg4X1gxMCwgWDE0LCAgWDMsIFg3LCBYOV9YMTEsIFgxNQorKworKwkuc2V0IGJyb3QsIDI1CisrCS5zZXQgZHJvdCwgMjQKKysKKysJLy8gZGlhZ29uYWwgcm91bmQKKysKKysJLy8gcXVhcnRlcnJvdW5kczogKHgwLCB4NSwgeDEwLCB4MTUpIGFuZCAoeDEsIHg2LCB4MTEsIHgxMikKKysJX2hhbGZyb3VuZAlYMCwgWDUsIFg4X1gxMCwgWDE1LCAgWDEsIFg2LCBYOV9YMTEsIFgxMgorKworKwkvLyBzYXZlICh4MTAsIHgxMSk7IHJlc3RvcmUgKHg4LCB4OSkKKysJX19zdHJkCQlYOF9YMTAsIFg5X1gxMSwgc3AsIDgKKysJX19sZHJkCQlYOF9YMTAsIFg5X1gxMSwgc3AsIDAKKysKKysJLy8gcXVhcnRlcnJvdW5kczogKHgyLCB4NywgeDgsIHgxMykgYW5kICh4MywgeDQsIHg5LCB4MTQpCisrCV9oYWxmcm91bmQJWDIsIFg3LCBYOF9YMTAsIFgxMywgIFgzLCBYNCwgWDlfWDExLCBYMTQKKysuZW5kbQorKworKy5tYWNybyBfY2hhY2hhX3Blcm11dGUJbnJvdW5kcworKwkuc2V0IGJyb3QsIDAKKysJLnNldCBkcm90LCAwCisrCS5yZXB0IFxucm91bmRzIC8gMgorKwkgX2RvdWJsZXJvdW5kCisrCS5lbmRyCisrLmVuZG0KKysKKysubWFjcm8gX2NoYWNoYQkJbnJvdW5kcworKworKy5MbmV4dF9ibG9ja1xAOgorKwkvLyBTdGFjazogdW51c2VkMC11bnVzZWQxIHgxMC14MTEgeDAteDE1IE9VVCBJTiBMRU4KKysJLy8gUmVnaXN0ZXJzIGNvbnRhaW4geDAteDkseDEyLXgxNS4KKysKKysJLy8gRG8gdGhlIGNvcmUgQ2hhQ2hhIHBlcm11dGF0aW9uIHRvIHVwZGF0ZSB4MC14MTUuCisrCV9jaGFjaGFfcGVybXV0ZQlcbnJvdW5kcworKworKwlhZGQJCXNwLCAjOAorKwkvLyBTdGFjazogeDEwLXgxMSBvcmlnX3gwLW9yaWdfeDE1IE9VVCBJTiBMRU4KKysJLy8gUmVnaXN0ZXJzIGNvbnRhaW4geDAteDkseDEyLXgxNS4KKysJLy8geDQteDcgYXJlIHJvdGF0ZWQgYnkgJ2Jyb3QnOyB4MTIteDE1IGFyZSByb3RhdGVkIGJ5ICdkcm90Jy4KKysKKysJLy8gRnJlZSB1cCBzb21lIHJlZ2lzdGVycyAocjgtcjEyLHIxNCkgYnkgcHVzaGluZyAoeDgteDkseDEyLXgxNSkuCisrCXB1c2gJCXtYOF9YMTAsIFg5X1gxMSwgWDEyLCBYMTMsIFgxNCwgWDE1fQorKworKwkvLyBMb2FkIChPVVQsIElOLCBMRU4pLgorKwlsZHIJCXIxNCwgW3NwLCAjOTZdCisrCWxkcgkJcjEyLCBbc3AsICMxMDBdCisrCWxkcgkJcjExLCBbc3AsICMxMDRdCisrCisrCW9ycgkJcjEwLCByMTQsIHIxMgorKworKwkvLyBVc2Ugc2xvdyBwYXRoIGlmIGZld2VyIHRoYW4gNjQgYnl0ZXMgcmVtYWluLgorKwljbXAJCXIxMSwgIzY0CisrCWJsdAkJLkx4b3Jfc2xvd3BhdGhcQAorKworKwkvLyBVc2Ugc2xvdyBwYXRoIGlmIElOIGFuZC9vciBPVVQgaXNuJ3QgNC1ieXRlIGFsaWduZWQuICBOZWVkZWQgZXZlbiBvbgorKwkvLyBBUk12NissIHNpbmNlIGxkbWlhIGFuZCBzdG1pYSAodXNlZCBiZWxvdykgc3RpbGwgcmVxdWlyZSBhbGlnbm1lbnQuCisrCXRzdAkJcjEwLCAjMworKwlibmUJCS5MeG9yX3Nsb3dwYXRoXEAKKysKKysJLy8gRmFzdCBwYXRoOiBYT1IgNjQgYnl0ZXMgb2YgYWxpZ25lZCBkYXRhLgorKworKwkvLyBTdGFjazogeDgteDkgeDEyLXgxNSB4MTAteDExIG9yaWdfeDAtb3JpZ194MTUgT1VUIElOIExFTgorKwkvLyBSZWdpc3RlcnM6IHIwLXI3IGFyZSB4MC14NzsgcjgtcjExIGFyZSBmcmVlOyByMTIgaXMgSU47IHIxNCBpcyBPVVQuCisrCS8vIHg0LXg3IGFyZSByb3RhdGVkIGJ5ICdicm90JzsgeDEyLXgxNSBhcmUgcm90YXRlZCBieSAnZHJvdCcuCisrCisrCS8vIHgwLXgzCisrCV9fbGRyZAkJcjgsIHI5LCBzcCwgMzIKKysJX19sZHJkCQlyMTAsIHIxMSwgc3AsIDQwCisrCWFkZAkJWDAsIFgwLCByOAorKwlhZGQJCVgxLCBYMSwgcjkKKysJYWRkCQlYMiwgWDIsIHIxMAorKwlhZGQJCVgzLCBYMywgcjExCisrCV9sZTMyX2Jzd2FwXzR4CVgwLCBYMSwgWDIsIFgzLCAgcjgsIHI5LCByMTAKKysJbGRtaWEJCXIxMiEsIHtyOC1yMTF9CisrCWVvcgkJWDAsIFgwLCByOAorKwllb3IJCVgxLCBYMSwgcjkKKysJZW9yCQlYMiwgWDIsIHIxMAorKwllb3IJCVgzLCBYMywgcjExCisrCXN0bWlhCQlyMTQhLCB7WDAtWDN9CisrCisrCS8vIHg0LXg3CisrCV9fbGRyZAkJcjgsIHI5LCBzcCwgNDgKKysJX19sZHJkCQlyMTAsIHIxMSwgc3AsIDU2CisrCWFkZAkJWDQsIHI4LCBYNCwgcm9yICNicm90CisrCWFkZAkJWDUsIHI5LCBYNSwgcm9yICNicm90CisrCWxkbWlhCQlyMTIhLCB7WDAtWDN9CisrCWFkZAkJWDYsIHIxMCwgWDYsIHJvciAjYnJvdAorKwlhZGQJCVg3LCByMTEsIFg3LCByb3IgI2Jyb3QKKysJX2xlMzJfYnN3YXBfNHgJWDQsIFg1LCBYNiwgWDcsICByOCwgcjksIHIxMAorKwllb3IJCVg0LCBYNCwgWDAKKysJZW9yCQlYNSwgWDUsIFgxCisrCWVvcgkJWDYsIFg2LCBYMgorKwllb3IJCVg3LCBYNywgWDMKKysJc3RtaWEJCXIxNCEsIHtYNC1YN30KKysKKysJLy8geDgteDE1CisrCXBvcAkJe3IwLXI3fQkJCS8vICh4OC14OSx4MTIteDE1LHgxMC14MTEpCisrCV9fbGRyZAkJcjgsIHI5LCBzcCwgMzIKKysJX19sZHJkCQlyMTAsIHIxMSwgc3AsIDQwCisrCWFkZAkJcjAsIHIwLCByOAkJLy8geDgKKysJYWRkCQlyMSwgcjEsIHI5CQkvLyB4OQorKwlhZGQJCXI2LCByNiwgcjEwCQkvLyB4MTAKKysJYWRkCQlyNywgcjcsIHIxMQkJLy8geDExCisrCV9sZTMyX2Jzd2FwXzR4CXIwLCByMSwgcjYsIHI3LCAgcjgsIHI5LCByMTAKKysJbGRtaWEJCXIxMiEsIHtyOC1yMTF9CisrCWVvcgkJcjAsIHIwLCByOAkJLy8geDgKKysJZW9yCQlyMSwgcjEsIHI5CQkvLyB4OQorKwllb3IJCXI2LCByNiwgcjEwCQkvLyB4MTAKKysJZW9yCQlyNywgcjcsIHIxMQkJLy8geDExCisrCXN0bWlhCQlyMTQhLCB7cjAscjEscjYscjd9CisrCWxkbWlhCQlyMTIhLCB7cjAscjEscjYscjd9CisrCV9fbGRyZAkJcjgsIHI5LCBzcCwgNDgKKysJX19sZHJkCQlyMTAsIHIxMSwgc3AsIDU2CisrCWFkZAkJcjIsIHI4LCByMiwgcm9yICNkcm90CS8vIHgxMgorKwlhZGQJCXIzLCByOSwgcjMsIHJvciAjZHJvdAkvLyB4MTMKKysJYWRkCQlyNCwgcjEwLCByNCwgcm9yICNkcm90CS8vIHgxNAorKwlhZGQJCXI1LCByMTEsIHI1LCByb3IgI2Ryb3QJLy8geDE1CisrCV9sZTMyX2Jzd2FwXzR4CXIyLCByMywgcjQsIHI1LCAgcjksIHIxMCwgcjExCisrCSAgbGRyCQlyOSwgW3NwLCAjNzJdCQkvLyBsb2FkIExFTgorKwllb3IJCXIyLCByMiwgcjAJCS8vIHgxMgorKwllb3IJCXIzLCByMywgcjEJCS8vIHgxMworKwllb3IJCXI0LCByNCwgcjYJCS8vIHgxNAorKwllb3IJCXI1LCByNSwgcjcJCS8vIHgxNQorKwkgIHN1YnMJCXI5LCAjNjQJCQkvLyBkZWNyZW1lbnQgYW5kIGNoZWNrIExFTgorKwlzdG1pYQkJcjE0ISwge3IyLXI1fQorKworKwliZXEJCS5MZG9uZVxACisrCisrLkxwcmVwYXJlX2Zvcl9uZXh0X2Jsb2NrXEA6CisrCisrCS8vIFN0YWNrOiB4MC14MTUgT1VUIElOIExFTgorKworKwkvLyBJbmNyZW1lbnQgYmxvY2sgY291bnRlciAoeDEyKQorKwlhZGQJCXI4LCAjMQorKworKwkvLyBTdG9yZSB1cGRhdGVkIChPVVQsIElOLCBMRU4pCisrCXN0cgkJcjE0LCBbc3AsICM2NF0KKysJc3RyCQlyMTIsIFtzcCwgIzY4XQorKwlzdHIJCXI5LCBbc3AsICM3Ml0KKysKKysJICBtb3YJCXIxNCwgc3AKKysKKysJLy8gU3RvcmUgdXBkYXRlZCBibG9jayBjb3VudGVyICh4MTIpCisrCXN0cgkJcjgsIFtzcCwgIzQ4XQorKworKwkgIHN1YgkJc3AsICMxNgorKworKwkvLyBSZWxvYWQgc3RhdGUgYW5kIGRvIG5leHQgYmxvY2sKKysJbGRtaWEJCXIxNCEsIHtyMC1yMTF9CQkvLyBsb2FkIHgwLXgxMQorKwlfX3N0cmQJCXIxMCwgcjExLCBzcCwgOAkJLy8gc3RvcmUgeDEwLXgxMSBiZWZvcmUgc3RhdGUKKysJbGRtaWEJCXIxNCwge3IxMC1yMTIscjE0fQkvLyBsb2FkIHgxMi14MTUKKysJYgkJLkxuZXh0X2Jsb2NrXEAKKysKKysuTHhvcl9zbG93cGF0aFxAOgorKwkvLyBTbG93IHBhdGg6IDwgNjQgYnl0ZXMgcmVtYWluaW5nLCBvciB1bmFsaWduZWQgaW5wdXQgb3Igb3V0cHV0IGJ1ZmZlci4KKysJLy8gV2UgaGFuZGxlIGl0IGJ5IHN0b3JpbmcgdGhlIDY0IGJ5dGVzIG9mIGtleXN0cmVhbSB0byB0aGUgc3RhY2ssIHRoZW4KKysJLy8gWE9SLWluZyB0aGUgbmVlZGVkIHBvcnRpb24gd2l0aCB0aGUgZGF0YS4KKysKKysJLy8gQWxsb2NhdGUga2V5c3RyZWFtIGJ1ZmZlcgorKwlzdWIJCXNwLCAjNjQKKysJbW92CQlyMTQsIHNwCisrCisrCS8vIFN0YWNrOiBrczAta3MxNSB4OC14OSB4MTIteDE1IHgxMC14MTEgb3JpZ194MC1vcmlnX3gxNSBPVVQgSU4gTEVOCisrCS8vIFJlZ2lzdGVyczogcjAtcjcgYXJlIHgwLXg3OyByOC1yMTEgYXJlIGZyZWU7IHIxMiBpcyBJTjsgcjE0IGlzICZrczAuCisrCS8vIHg0LXg3IGFyZSByb3RhdGVkIGJ5ICdicm90JzsgeDEyLXgxNSBhcmUgcm90YXRlZCBieSAnZHJvdCcuCisrCisrCS8vIFNhdmUga2V5c3RyZWFtIGZvciB4MC14MworKwlfX2xkcmQJCXI4LCByOSwgc3AsIDk2CisrCV9fbGRyZAkJcjEwLCByMTEsIHNwLCAxMDQKKysJYWRkCQlYMCwgWDAsIHI4CisrCWFkZAkJWDEsIFgxLCByOQorKwlhZGQJCVgyLCBYMiwgcjEwCisrCWFkZAkJWDMsIFgzLCByMTEKKysJX2xlMzJfYnN3YXBfNHgJWDAsIFgxLCBYMiwgWDMsICByOCwgcjksIHIxMAorKwlzdG1pYQkJcjE0ISwge1gwLVgzfQorKworKwkvLyBTYXZlIGtleXN0cmVhbSBmb3IgeDQteDcKKysJX19sZHJkCQlyOCwgcjksIHNwLCAxMTIKKysJX19sZHJkCQlyMTAsIHIxMSwgc3AsIDEyMAorKwlhZGQJCVg0LCByOCwgWDQsIHJvciAjYnJvdAorKwlhZGQJCVg1LCByOSwgWDUsIHJvciAjYnJvdAorKwlhZGQJCVg2LCByMTAsIFg2LCByb3IgI2Jyb3QKKysJYWRkCQlYNywgcjExLCBYNywgcm9yICNicm90CisrCV9sZTMyX2Jzd2FwXzR4CVg0LCBYNSwgWDYsIFg3LCAgcjgsIHI5LCByMTAKKysJICBhZGQJCXI4LCBzcCwgIzY0CisrCXN0bWlhCQlyMTQhLCB7WDQtWDd9CisrCisrCS8vIFNhdmUga2V5c3RyZWFtIGZvciB4OC14MTUKKysJbGRtCQlyOCwge3IwLXI3fQkJLy8gKHg4LXg5LHgxMi14MTUseDEwLXgxMSkKKysJX19sZHJkCQlyOCwgcjksIHNwLCAxMjgKKysJX19sZHJkCQlyMTAsIHIxMSwgc3AsIDEzNgorKwlhZGQJCXIwLCByMCwgcjgJCS8vIHg4CisrCWFkZAkJcjEsIHIxLCByOQkJLy8geDkKKysJYWRkCQlyNiwgcjYsIHIxMAkJLy8geDEwCisrCWFkZAkJcjcsIHI3LCByMTEJCS8vIHgxMQorKwlfbGUzMl9ic3dhcF80eAlyMCwgcjEsIHI2LCByNywgIHI4LCByOSwgcjEwCisrCXN0bWlhCQlyMTQhLCB7cjAscjEscjYscjd9CisrCV9fbGRyZAkJcjgsIHI5LCBzcCwgMTQ0CisrCV9fbGRyZAkJcjEwLCByMTEsIHNwLCAxNTIKKysJYWRkCQlyMiwgcjgsIHIyLCByb3IgI2Ryb3QJLy8geDEyCisrCWFkZAkJcjMsIHI5LCByMywgcm9yICNkcm90CS8vIHgxMworKwlhZGQJCXI0LCByMTAsIHI0LCByb3IgI2Ryb3QJLy8geDE0CisrCWFkZAkJcjUsIHIxMSwgcjUsIHJvciAjZHJvdAkvLyB4MTUKKysJX2xlMzJfYnN3YXBfNHgJcjIsIHIzLCByNCwgcjUsICByOSwgcjEwLCByMTEKKysJc3RtaWEJCXIxNCwge3IyLXI1fQorKworKwkvLyBTdGFjazoga3MwLWtzMTUgdW51c2VkMC11bnVzZWQ3IHgwLXgxNSBPVVQgSU4gTEVOCisrCS8vIFJlZ2lzdGVyczogcjggaXMgYmxvY2sgY291bnRlciwgcjEyIGlzIElOLgorKworKwlsZHIJCXI5LCBbc3AsICMxNjhdCQkvLyBMRU4KKysJbGRyCQlyMTQsIFtzcCwgIzE2MF0JCS8vIE9VVAorKwljbXAJCXI5LCAjNjQKKysJICBtb3YJCXIwLCBzcAorKwltb3ZsZQkJcjEsIHI5CisrCW1vdmd0CQlyMSwgIzY0CisrCS8vIHIxIGlzIG51bWJlciBvZiBieXRlcyB0byBYT1IsIGluIHJhbmdlIFsxLCA2NF0KKysKKysuaWYgX19MSU5VWF9BUk1fQVJDSF9fIDwgNgorKwlvcnIJCXIyLCByMTIsIHIxNAorKwl0c3QJCXIyLCAjMwkJCS8vIElOIG9yIE9VVCBtaXNhbGlnbmVkPworKwlibmUJCS5MeG9yX25leHRfYnl0ZVxACisrLmVuZGlmCisrCisrCS8vIFhPUiBhIHdvcmQgYXQgYSB0aW1lCisrLnJlcHQgMTYKKysJc3VicwkJcjEsICM0CisrCWJsdAkJLkx4b3Jfd29yZHNfZG9uZVxACisrCWxkcgkJcjIsIFtyMTJdLCAjNAorKwlsZHIJCXIzLCBbcjBdLCAjNAorKwllb3IJCXIyLCByMiwgcjMKKysJc3RyCQlyMiwgW3IxNF0sICM0CisrLmVuZHIKKysJYgkJLkx4b3Jfc2xvd3BhdGhfZG9uZVxACisrLkx4b3Jfd29yZHNfZG9uZVxAOgorKwlhbmRzCQlyMSwgcjEsICMzCisrCWJlcQkJLkx4b3Jfc2xvd3BhdGhfZG9uZVxACisrCisrCS8vIFhPUiBhIGJ5dGUgYXQgYSB0aW1lCisrLkx4b3JfbmV4dF9ieXRlXEA6CisrCWxkcmIJCXIyLCBbcjEyXSwgIzEKKysJbGRyYgkJcjMsIFtyMF0sICMxCisrCWVvcgkJcjIsIHIyLCByMworKwlzdHJiCQlyMiwgW3IxNF0sICMxCisrCXN1YnMJCXIxLCAjMQorKwlibmUJCS5MeG9yX25leHRfYnl0ZVxACisrCisrLkx4b3Jfc2xvd3BhdGhfZG9uZVxAOgorKwlzdWJzCQlyOSwgIzY0CisrCWFkZAkJc3AsICM5NgorKwliZ3QJCS5McHJlcGFyZV9mb3JfbmV4dF9ibG9ja1xACisrCisrLkxkb25lXEA6CisrLmVuZG0JLy8gX2NoYWNoYQorKworKy8qCisrICogdm9pZCBjaGFjaGEyMF9hcm0odTggKm91dCwgY29uc3QgdTggKmluLCBzaXplX3QgbGVuLCBjb25zdCB1MzIga2V5WzhdLAorKyAqCQkgICAgIGNvbnN0IHUzMiBpdls0XSk7CisrICovCisrRU5UUlkoY2hhY2hhMjBfYXJtKQorKwljbXAJCXIyLCAjMAkJCS8vIGxlbiA9PSAwPworKwlyZXRlcQkJbHIKKysKKysJcHVzaAkJe3IwLXIyLHI0LXIxMSxscn0KKysKKysJLy8gUHVzaCBzdGF0ZSB4MC14MTUgb250byBzdGFjay4KKysJLy8gQWxzbyBzdG9yZSBhbiBleHRyYSBjb3B5IG9mIHgxMC14MTEganVzdCBiZWZvcmUgdGhlIHN0YXRlLgorKworKwlsZHIJCXI0LCBbc3AsICM0OF0JCS8vIGl2CisrCW1vdgkJcjAsIHNwCisrCXN1YgkJc3AsICM4MAorKworKwkvLyBpdjogeDEyLXgxNQorKwlsZG0JCXI0LCB7WDEyLFgxMyxYMTQsWDE1fQorKwlzdG1kYgkJcjAhLCB7WDEyLFgxMyxYMTQsWDE1fQorKworKwkvLyBrZXk6IHg0LXgxMQorKwlfX2xkcmQJCVg4X1gxMCwgWDlfWDExLCByMywgMjQKKysJX19zdHJkCQlYOF9YMTAsIFg5X1gxMSwgc3AsIDgKKysJc3RtZGIJCXIwISwge1g4X1gxMCwgWDlfWDExfQorKwlsZG0JCXIzLCB7WDQtWDlfWDExfQorKwlzdG1kYgkJcjAhLCB7WDQtWDlfWDExfQorKworKwkvLyBjb25zdGFudHM6IHgwLXgzCisrCWFkcmwJCVgzLCAuTGV4cGFuZF8zMmJ5dGVfaworKwlsZG0JCVgzLCB7WDAtWDN9CisrCV9fc3RyZAkJWDAsIFgxLCBzcCwgMTYKKysJX19zdHJkCQlYMiwgWDMsIHNwLCAyNAorKworKwlfY2hhY2hhCQkyMAorKworKwlhZGQJCXNwLCAjNzYKKysJcG9wCQl7cjQtcjExLCBwY30KKytFTkRQUk9DKGNoYWNoYTIwX2FybSkKKysKKysvKgorKyAqIHZvaWQgaGNoYWNoYTIwX2FybShjb25zdCB1MzIgc3RhdGVbMTZdLCB1MzIgb3V0WzhdKTsKKysgKi8KKytFTlRSWShoY2hhY2hhMjBfYXJtKQorKwlwdXNoCQl7cjEscjQtcjExLGxyfQorKworKwltb3YJCXIxNCwgcjAKKysJbGRtaWEJCXIxNCEsIHtyMC1yMTF9CQkvLyBsb2FkIHgwLXgxMQorKwlwdXNoCQl7cjEwLXIxMX0JCS8vIHN0b3JlIHgxMC14MTEgdG8gc3RhY2sKKysJbGRtCQlyMTQsIHtyMTAtcjEyLHIxNH0JLy8gbG9hZCB4MTIteDE1CisrCXN1YgkJc3AsICM4CisrCisrCV9jaGFjaGFfcGVybXV0ZQkyMAorKworKwkvLyBTa2lwIG92ZXIgKHVudXNlZDAtdW51c2VkMSwgeDEwLXgxMSkKKysJYWRkCQlzcCwgIzE2CisrCisrCS8vIEZpeCB1cCByb3RhdGlvbnMgb2YgeDEyLXgxNQorKwlyb3IJCVgxMiwgWDEyLCAjZHJvdAorKwlyb3IJCVgxMywgWDEzLCAjZHJvdAorKwkgIHBvcAkJe3I0fQkJCS8vIGxvYWQgJ291dCcKKysJcm9yCQlYMTQsIFgxNCwgI2Ryb3QKKysJcm9yCQlYMTUsIFgxNSwgI2Ryb3QKKysKKysJLy8gU3RvcmUgKHgwLXgzLHgxMi14MTUpIHRvICdvdXQnCisrCXN0bQkJcjQsIHtYMCxYMSxYMixYMyxYMTIsWDEzLFgxNCxYMTV9CisrCisrCXBvcAkJe3I0LXIxMSxwY30KKytFTkRQUk9DKGhjaGFjaGEyMF9hcm0pCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDA4LWNyeXB0by1hcm0tY2hhY2hhLXJlbW92ZS1kZXBlbmRlbmN5LW9uLWdlbmVyaWMtQ2hhQ2gucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDA4LWNyeXB0by1hcm0tY2hhY2hhLXJlbW92ZS1kZXBlbmRlbmN5LW9uLWdlbmVyaWMtQ2hhQ2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhjOTczOAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMDgtY3J5cHRvLWFybS1jaGFjaGEtcmVtb3ZlLWRlcGVuZGVuY3ktb24tZ2VuZXJpYy1DaGFDaC5wYXRjaApAQCAtMCwwICsxLDY5MSBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQXJkIEJpZXNoZXV2ZWwgPGFyZGJAa2VybmVsLm9yZz4KK0RhdGU6IEZyaSwgOCBOb3YgMjAxOSAxMzoyMjoxNCArMDEwMAorU3ViamVjdDogW1BBVENIXSBjcnlwdG86IGFybS9jaGFjaGEgLSByZW1vdmUgZGVwZW5kZW5jeSBvbiBnZW5lcmljIENoYUNoYQorIGRyaXZlcgorCitjb21taXQgYjM2ZDhjMDllNzEwYzcxZjZhOTY5MGI2NTg2ZmVhMmQxYzllMWUyNyB1cHN0cmVhbS4KKworSW5zdGVhZCBvZiBmYWxsaW5nIGJhY2sgdG8gdGhlIGdlbmVyaWMgQ2hhQ2hhIHNrY2lwaGVyIGRyaXZlciBmb3IKK25vbi1TSU1EIGNhc2VzLCB1c2UgYSBmYXN0IHNjYWxhciBpbXBsZW1lbnRhdGlvbiBmb3IgQVJNIGF1dGhvcmVkCitieSBFcmljIEJpZ2dlcnMuIFRoaXMgcmVtb3ZlcyB0aGUgbW9kdWxlIGRlcGVuZGVuY3kgb24gY2hhY2hhLWdlbmVyaWMKK2FsdG9nZXRoZXIsIHdoaWNoIGFsc28gc2ltcGxpZmllcyB0aGluZ3Mgd2hlbiB3ZSBleHBvc2UgdGhlIENoYUNoYQorbGlicmFyeSBpbnRlcmZhY2UgZnJvbSB0aGlzIG1vZHVsZS4KKworU2lnbmVkLW9mZi1ieTogQXJkIEJpZXNoZXV2ZWwgPGFyZGJAa2VybmVsLm9yZz4KK1NpZ25lZC1vZmYtYnk6IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgYXJjaC9hcm0vY3J5cHRvL0tjb25maWcgICAgICAgICAgICAgIHwgICA0ICstCisgYXJjaC9hcm0vY3J5cHRvL01ha2VmaWxlICAgICAgICAgICAgIHwgICAzICstCisgYXJjaC9hcm0vY3J5cHRvL2NoYWNoYS1nbHVlLmMgICAgICAgIHwgMzA0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKworIGFyY2gvYXJtL2NyeXB0by9jaGFjaGEtbmVvbi1nbHVlLmMgICB8IDIwMiAtLS0tLS0tLS0tLS0tLS0tLS0KKyBhcmNoL2FybS9jcnlwdG8vY2hhY2hhLXNjYWxhci1jb3JlLlMgfCAgNjUgKysrLS0tCisgYXJjaC9hcm02NC9jcnlwdG8vY2hhY2hhLW5lb24tZ2x1ZS5jIHwgICAyICstCisgNiBmaWxlcyBjaGFuZ2VkLCAzNDAgaW5zZXJ0aW9ucygrKSwgMjQwIGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBhcmNoL2FybS9jcnlwdG8vY2hhY2hhLWdsdWUuYworIGRlbGV0ZSBtb2RlIDEwMDY0NCBhcmNoL2FybS9jcnlwdG8vY2hhY2hhLW5lb24tZ2x1ZS5jCisKKy0tLSBhL2FyY2gvYXJtL2NyeXB0by9LY29uZmlnCisrKysgYi9hcmNoL2FybS9jcnlwdG8vS2NvbmZpZworQEAgLTEyNywxMCArMTI3LDggQEAgY29uZmlnIENSWVBUT19DUkMzMl9BUk1fQ0UKKyAJc2VsZWN0IENSWVBUT19IQVNICisgCisgY29uZmlnIENSWVBUT19DSEFDSEEyMF9ORU9OCistCXRyaXN0YXRlICJORU9OIGFjY2VsZXJhdGVkIENoYUNoYSBzdHJlYW0gY2lwaGVyIGFsZ29yaXRobXMiCistCWRlcGVuZHMgb24gS0VSTkVMX01PREVfTkVPTgorKwl0cmlzdGF0ZSAiTkVPTiBhbmQgc2NhbGFyIGFjY2VsZXJhdGVkIENoYUNoYSBzdHJlYW0gY2lwaGVyIGFsZ29yaXRobXMiCisgCXNlbGVjdCBDUllQVE9fQkxLQ0lQSEVSCistCXNlbGVjdCBDUllQVE9fQ0hBQ0hBMjAKKyAKKyBjb25maWcgQ1JZUFRPX05IUE9MWTEzMDVfTkVPTgorIAl0cmlzdGF0ZSAiTkVPTiBhY2NlbGVyYXRlZCBOSFBvbHkxMzA1IGhhc2ggZnVuY3Rpb24gKGZvciBBZGlhbnR1bSkiCistLS0gYS9hcmNoL2FybS9jcnlwdG8vTWFrZWZpbGUKKysrKyBiL2FyY2gvYXJtL2NyeXB0by9NYWtlZmlsZQorQEAgLTUzLDcgKzUzLDggQEAgYWVzLWFybS1jZS15CTo9IGFlcy1jZS1jb3JlLm8gYWVzLWNlLWdsdQorIGdoYXNoLWFybS1jZS15CTo9IGdoYXNoLWNlLWNvcmUubyBnaGFzaC1jZS1nbHVlLm8KKyBjcmN0MTBkaWYtYXJtLWNlLXkJOj0gY3JjdDEwZGlmLWNlLWNvcmUubyBjcmN0MTBkaWYtY2UtZ2x1ZS5vCisgY3JjMzItYXJtLWNlLXk6PSBjcmMzMi1jZS1jb3JlLm8gY3JjMzItY2UtZ2x1ZS5vCistY2hhY2hhLW5lb24teSA6PSBjaGFjaGEtbmVvbi1jb3JlLm8gY2hhY2hhLW5lb24tZ2x1ZS5vCisrY2hhY2hhLW5lb24teSA6PSBjaGFjaGEtc2NhbGFyLWNvcmUubyBjaGFjaGEtZ2x1ZS5vCisrY2hhY2hhLW5lb24tJChDT05GSUdfS0VSTkVMX01PREVfTkVPTikgKz0gY2hhY2hhLW5lb24tY29yZS5vCisgbmhwb2x5MTMwNS1uZW9uLXkgOj0gbmgtbmVvbi1jb3JlLm8gbmhwb2x5MTMwNS1uZW9uLWdsdWUubworIAorIGlmZGVmIFJFR0VORVJBVEVfQVJNX0NSWVBUTworLS0tIC9kZXYvbnVsbAorKysrIGIvYXJjaC9hcm0vY3J5cHRvL2NoYWNoYS1nbHVlLmMKK0BAIC0wLDAgKzEsMzA0IEBACisrLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKysvKgorKyAqIEFSTSBORU9OIGFjY2VsZXJhdGVkIENoYUNoYSBhbmQgWENoYUNoYSBzdHJlYW0gY2lwaGVycywKKysgKiBpbmNsdWRpbmcgQ2hhQ2hhMjAgKFJGQzc1MzkpCisrICoKKysgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBMaW5hcm8sIEx0ZC4gPGFyZC5iaWVzaGV1dmVsQGxpbmFyby5vcmc+CisrICogQ29weXJpZ2h0IChDKSAyMDE1IE1hcnRpbiBXaWxsaQorKyAqLworKworKyNpbmNsdWRlIDxjcnlwdG8vYWxnYXBpLmg+CisrI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9jaGFjaGEuaD4KKysjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL3NpbWQuaD4KKysjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL3NrY2lwaGVyLmg+CisrI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKysKKysjaW5jbHVkZSA8YXNtL2NwdXR5cGUuaD4KKysjaW5jbHVkZSA8YXNtL2h3Y2FwLmg+CisrI2luY2x1ZGUgPGFzbS9uZW9uLmg+CisrI2luY2x1ZGUgPGFzbS9zaW1kLmg+CisrCisrYXNtbGlua2FnZSB2b2lkIGNoYWNoYV9ibG9ja194b3JfbmVvbihjb25zdCB1MzIgKnN0YXRlLCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjLAorKwkJCQkgICAgICBpbnQgbnJvdW5kcyk7CisrYXNtbGlua2FnZSB2b2lkIGNoYWNoYV80YmxvY2tfeG9yX25lb24oY29uc3QgdTMyICpzdGF0ZSwgdTggKmRzdCwgY29uc3QgdTggKnNyYywKKysJCQkJICAgICAgIGludCBucm91bmRzKTsKKythc21saW5rYWdlIHZvaWQgaGNoYWNoYV9ibG9ja19hcm0oY29uc3QgdTMyICpzdGF0ZSwgdTMyICpvdXQsIGludCBucm91bmRzKTsKKythc21saW5rYWdlIHZvaWQgaGNoYWNoYV9ibG9ja19uZW9uKGNvbnN0IHUzMiAqc3RhdGUsIHUzMiAqb3V0LCBpbnQgbnJvdW5kcyk7CisrCisrYXNtbGlua2FnZSB2b2lkIGNoYWNoYV9kb2FybSh1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCB1bnNpZ25lZCBpbnQgYnl0ZXMsCisrCQkJICAgICBjb25zdCB1MzIgKnN0YXRlLCBpbnQgbnJvdW5kcyk7CisrCisrc3RhdGljIGlubGluZSBib29sIG5lb25fdXNhYmxlKHZvaWQpCisreworKwlyZXR1cm4gY3J5cHRvX3NpbWRfdXNhYmxlKCk7CisrfQorKworK3N0YXRpYyB2b2lkIGNoYWNoYV9kb25lb24odTMyICpzdGF0ZSwgdTggKmRzdCwgY29uc3QgdTggKnNyYywKKysJCQkgIHVuc2lnbmVkIGludCBieXRlcywgaW50IG5yb3VuZHMpCisreworKwl1OCBidWZbQ0hBQ0hBX0JMT0NLX1NJWkVdOworKworKwl3aGlsZSAoYnl0ZXMgPj0gQ0hBQ0hBX0JMT0NLX1NJWkUgKiA0KSB7CisrCQljaGFjaGFfNGJsb2NrX3hvcl9uZW9uKHN0YXRlLCBkc3QsIHNyYywgbnJvdW5kcyk7CisrCQlieXRlcyAtPSBDSEFDSEFfQkxPQ0tfU0laRSAqIDQ7CisrCQlzcmMgKz0gQ0hBQ0hBX0JMT0NLX1NJWkUgKiA0OworKwkJZHN0ICs9IENIQUNIQV9CTE9DS19TSVpFICogNDsKKysJCXN0YXRlWzEyXSArPSA0OworKwl9CisrCXdoaWxlIChieXRlcyA+PSBDSEFDSEFfQkxPQ0tfU0laRSkgeworKwkJY2hhY2hhX2Jsb2NrX3hvcl9uZW9uKHN0YXRlLCBkc3QsIHNyYywgbnJvdW5kcyk7CisrCQlieXRlcyAtPSBDSEFDSEFfQkxPQ0tfU0laRTsKKysJCXNyYyArPSBDSEFDSEFfQkxPQ0tfU0laRTsKKysJCWRzdCArPSBDSEFDSEFfQkxPQ0tfU0laRTsKKysJCXN0YXRlWzEyXSsrOworKwl9CisrCWlmIChieXRlcykgeworKwkJbWVtY3B5KGJ1Ziwgc3JjLCBieXRlcyk7CisrCQljaGFjaGFfYmxvY2tfeG9yX25lb24oc3RhdGUsIGJ1ZiwgYnVmLCBucm91bmRzKTsKKysJCW1lbWNweShkc3QsIGJ1ZiwgYnl0ZXMpOworKwl9CisrfQorKworK3N0YXRpYyBpbnQgY2hhY2hhX3N0cmVhbV94b3Ioc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSwKKysJCQkgICAgIGNvbnN0IHN0cnVjdCBjaGFjaGFfY3R4ICpjdHgsIGNvbnN0IHU4ICppdiwKKysJCQkgICAgIGJvb2wgbmVvbikKKyt7CisrCXN0cnVjdCBza2NpcGhlcl93YWxrIHdhbGs7CisrCXUzMiBzdGF0ZVsxNl07CisrCWludCBlcnI7CisrCisrCWVyciA9IHNrY2lwaGVyX3dhbGtfdmlydCgmd2FsaywgcmVxLCBmYWxzZSk7CisrCisrCWNoYWNoYV9pbml0X2dlbmVyaWMoc3RhdGUsIGN0eC0+a2V5LCBpdik7CisrCisrCXdoaWxlICh3YWxrLm5ieXRlcyA+IDApIHsKKysJCXVuc2lnbmVkIGludCBuYnl0ZXMgPSB3YWxrLm5ieXRlczsKKysKKysJCWlmIChuYnl0ZXMgPCB3YWxrLnRvdGFsKQorKwkJCW5ieXRlcyA9IHJvdW5kX2Rvd24obmJ5dGVzLCB3YWxrLnN0cmlkZSk7CisrCisrCQlpZiAoIW5lb24pIHsKKysJCQljaGFjaGFfZG9hcm0od2Fsay5kc3QudmlydC5hZGRyLCB3YWxrLnNyYy52aXJ0LmFkZHIsCisrCQkJCSAgICAgbmJ5dGVzLCBzdGF0ZSwgY3R4LT5ucm91bmRzKTsKKysJCQlzdGF0ZVsxMl0gKz0gRElWX1JPVU5EX1VQKG5ieXRlcywgQ0hBQ0hBX0JMT0NLX1NJWkUpOworKwkJfSBlbHNlIHsKKysJCQlrZXJuZWxfbmVvbl9iZWdpbigpOworKwkJCWNoYWNoYV9kb25lb24oc3RhdGUsIHdhbGsuZHN0LnZpcnQuYWRkciwKKysJCQkJICAgICAgd2Fsay5zcmMudmlydC5hZGRyLCBuYnl0ZXMsIGN0eC0+bnJvdW5kcyk7CisrCQkJa2VybmVsX25lb25fZW5kKCk7CisrCQl9CisrCQllcnIgPSBza2NpcGhlcl93YWxrX2RvbmUoJndhbGssIHdhbGsubmJ5dGVzIC0gbmJ5dGVzKTsKKysJfQorKworKwlyZXR1cm4gZXJyOworK30KKysKKytzdGF0aWMgaW50IGRvX2NoYWNoYShzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxLCBib29sIG5lb24pCisreworKwlzdHJ1Y3QgY3J5cHRvX3NrY2lwaGVyICp0Zm0gPSBjcnlwdG9fc2tjaXBoZXJfcmVxdGZtKHJlcSk7CisrCXN0cnVjdCBjaGFjaGFfY3R4ICpjdHggPSBjcnlwdG9fc2tjaXBoZXJfY3R4KHRmbSk7CisrCisrCXJldHVybiBjaGFjaGFfc3RyZWFtX3hvcihyZXEsIGN0eCwgcmVxLT5pdiwgbmVvbik7CisrfQorKworK3N0YXRpYyBpbnQgY2hhY2hhX2FybShzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxKQorK3sKKysJcmV0dXJuIGRvX2NoYWNoYShyZXEsIGZhbHNlKTsKKyt9CisrCisrc3RhdGljIGludCBjaGFjaGFfbmVvbihzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxKQorK3sKKysJcmV0dXJuIGRvX2NoYWNoYShyZXEsIG5lb25fdXNhYmxlKCkpOworK30KKysKKytzdGF0aWMgaW50IGRvX3hjaGFjaGEoc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSwgYm9vbCBuZW9uKQorK3sKKysJc3RydWN0IGNyeXB0b19za2NpcGhlciAqdGZtID0gY3J5cHRvX3NrY2lwaGVyX3JlcXRmbShyZXEpOworKwlzdHJ1Y3QgY2hhY2hhX2N0eCAqY3R4ID0gY3J5cHRvX3NrY2lwaGVyX2N0eCh0Zm0pOworKwlzdHJ1Y3QgY2hhY2hhX2N0eCBzdWJjdHg7CisrCXUzMiBzdGF0ZVsxNl07CisrCXU4IHJlYWxfaXZbMTZdOworKworKwljaGFjaGFfaW5pdF9nZW5lcmljKHN0YXRlLCBjdHgtPmtleSwgcmVxLT5pdik7CisrCisrCWlmICghbmVvbikgeworKwkJaGNoYWNoYV9ibG9ja19hcm0oc3RhdGUsIHN1YmN0eC5rZXksIGN0eC0+bnJvdW5kcyk7CisrCX0gZWxzZSB7CisrCQlrZXJuZWxfbmVvbl9iZWdpbigpOworKwkJaGNoYWNoYV9ibG9ja19uZW9uKHN0YXRlLCBzdWJjdHgua2V5LCBjdHgtPm5yb3VuZHMpOworKwkJa2VybmVsX25lb25fZW5kKCk7CisrCX0KKysJc3ViY3R4Lm5yb3VuZHMgPSBjdHgtPm5yb3VuZHM7CisrCisrCW1lbWNweSgmcmVhbF9pdlswXSwgcmVxLT5pdiArIDI0LCA4KTsKKysJbWVtY3B5KCZyZWFsX2l2WzhdLCByZXEtPml2ICsgMTYsIDgpOworKwlyZXR1cm4gY2hhY2hhX3N0cmVhbV94b3IocmVxLCAmc3ViY3R4LCByZWFsX2l2LCBuZW9uKTsKKyt9CisrCisrc3RhdGljIGludCB4Y2hhY2hhX2FybShzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxKQorK3sKKysJcmV0dXJuIGRvX3hjaGFjaGEocmVxLCBmYWxzZSk7CisrfQorKworK3N0YXRpYyBpbnQgeGNoYWNoYV9uZW9uKHN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0ICpyZXEpCisreworKwlyZXR1cm4gZG9feGNoYWNoYShyZXEsIG5lb25fdXNhYmxlKCkpOworK30KKysKKytzdGF0aWMgc3RydWN0IHNrY2lwaGVyX2FsZyBhcm1fYWxnc1tdID0geworKwl7CisrCQkuYmFzZS5jcmFfbmFtZQkJPSAiY2hhY2hhMjAiLAorKwkJLmJhc2UuY3JhX2RyaXZlcl9uYW1lCT0gImNoYWNoYTIwLWFybSIsCisrCQkuYmFzZS5jcmFfcHJpb3JpdHkJPSAyMDAsCisrCQkuYmFzZS5jcmFfYmxvY2tzaXplCT0gMSwKKysJCS5iYXNlLmNyYV9jdHhzaXplCT0gc2l6ZW9mKHN0cnVjdCBjaGFjaGFfY3R4KSwKKysJCS5iYXNlLmNyYV9tb2R1bGUJPSBUSElTX01PRFVMRSwKKysKKysJCS5taW5fa2V5c2l6ZQkJPSBDSEFDSEFfS0VZX1NJWkUsCisrCQkubWF4X2tleXNpemUJCT0gQ0hBQ0hBX0tFWV9TSVpFLAorKwkJLml2c2l6ZQkJCT0gQ0hBQ0hBX0lWX1NJWkUsCisrCQkuY2h1bmtzaXplCQk9IENIQUNIQV9CTE9DS19TSVpFLAorKwkJLnNldGtleQkJCT0gY2hhY2hhMjBfc2V0a2V5LAorKwkJLmVuY3J5cHQJCT0gY2hhY2hhX2FybSwKKysJCS5kZWNyeXB0CQk9IGNoYWNoYV9hcm0sCisrCX0sIHsKKysJCS5iYXNlLmNyYV9uYW1lCQk9ICJ4Y2hhY2hhMjAiLAorKwkJLmJhc2UuY3JhX2RyaXZlcl9uYW1lCT0gInhjaGFjaGEyMC1hcm0iLAorKwkJLmJhc2UuY3JhX3ByaW9yaXR5CT0gMjAwLAorKwkJLmJhc2UuY3JhX2Jsb2Nrc2l6ZQk9IDEsCisrCQkuYmFzZS5jcmFfY3R4c2l6ZQk9IHNpemVvZihzdHJ1Y3QgY2hhY2hhX2N0eCksCisrCQkuYmFzZS5jcmFfbW9kdWxlCT0gVEhJU19NT0RVTEUsCisrCisrCQkubWluX2tleXNpemUJCT0gQ0hBQ0hBX0tFWV9TSVpFLAorKwkJLm1heF9rZXlzaXplCQk9IENIQUNIQV9LRVlfU0laRSwKKysJCS5pdnNpemUJCQk9IFhDSEFDSEFfSVZfU0laRSwKKysJCS5jaHVua3NpemUJCT0gQ0hBQ0hBX0JMT0NLX1NJWkUsCisrCQkuc2V0a2V5CQkJPSBjaGFjaGEyMF9zZXRrZXksCisrCQkuZW5jcnlwdAkJPSB4Y2hhY2hhX2FybSwKKysJCS5kZWNyeXB0CQk9IHhjaGFjaGFfYXJtLAorKwl9LCB7CisrCQkuYmFzZS5jcmFfbmFtZQkJPSAieGNoYWNoYTEyIiwKKysJCS5iYXNlLmNyYV9kcml2ZXJfbmFtZQk9ICJ4Y2hhY2hhMTItYXJtIiwKKysJCS5iYXNlLmNyYV9wcmlvcml0eQk9IDIwMCwKKysJCS5iYXNlLmNyYV9ibG9ja3NpemUJPSAxLAorKwkJLmJhc2UuY3JhX2N0eHNpemUJPSBzaXplb2Yoc3RydWN0IGNoYWNoYV9jdHgpLAorKwkJLmJhc2UuY3JhX21vZHVsZQk9IFRISVNfTU9EVUxFLAorKworKwkJLm1pbl9rZXlzaXplCQk9IENIQUNIQV9LRVlfU0laRSwKKysJCS5tYXhfa2V5c2l6ZQkJPSBDSEFDSEFfS0VZX1NJWkUsCisrCQkuaXZzaXplCQkJPSBYQ0hBQ0hBX0lWX1NJWkUsCisrCQkuY2h1bmtzaXplCQk9IENIQUNIQV9CTE9DS19TSVpFLAorKwkJLnNldGtleQkJCT0gY2hhY2hhMTJfc2V0a2V5LAorKwkJLmVuY3J5cHQJCT0geGNoYWNoYV9hcm0sCisrCQkuZGVjcnlwdAkJPSB4Y2hhY2hhX2FybSwKKysJfSwKKyt9OworKworK3N0YXRpYyBzdHJ1Y3Qgc2tjaXBoZXJfYWxnIG5lb25fYWxnc1tdID0geworKwl7CisrCQkuYmFzZS5jcmFfbmFtZQkJPSAiY2hhY2hhMjAiLAorKwkJLmJhc2UuY3JhX2RyaXZlcl9uYW1lCT0gImNoYWNoYTIwLW5lb24iLAorKwkJLmJhc2UuY3JhX3ByaW9yaXR5CT0gMzAwLAorKwkJLmJhc2UuY3JhX2Jsb2Nrc2l6ZQk9IDEsCisrCQkuYmFzZS5jcmFfY3R4c2l6ZQk9IHNpemVvZihzdHJ1Y3QgY2hhY2hhX2N0eCksCisrCQkuYmFzZS5jcmFfbW9kdWxlCT0gVEhJU19NT0RVTEUsCisrCisrCQkubWluX2tleXNpemUJCT0gQ0hBQ0hBX0tFWV9TSVpFLAorKwkJLm1heF9rZXlzaXplCQk9IENIQUNIQV9LRVlfU0laRSwKKysJCS5pdnNpemUJCQk9IENIQUNIQV9JVl9TSVpFLAorKwkJLmNodW5rc2l6ZQkJPSBDSEFDSEFfQkxPQ0tfU0laRSwKKysJCS53YWxrc2l6ZQkJPSA0ICogQ0hBQ0hBX0JMT0NLX1NJWkUsCisrCQkuc2V0a2V5CQkJPSBjaGFjaGEyMF9zZXRrZXksCisrCQkuZW5jcnlwdAkJPSBjaGFjaGFfbmVvbiwKKysJCS5kZWNyeXB0CQk9IGNoYWNoYV9uZW9uLAorKwl9LCB7CisrCQkuYmFzZS5jcmFfbmFtZQkJPSAieGNoYWNoYTIwIiwKKysJCS5iYXNlLmNyYV9kcml2ZXJfbmFtZQk9ICJ4Y2hhY2hhMjAtbmVvbiIsCisrCQkuYmFzZS5jcmFfcHJpb3JpdHkJPSAzMDAsCisrCQkuYmFzZS5jcmFfYmxvY2tzaXplCT0gMSwKKysJCS5iYXNlLmNyYV9jdHhzaXplCT0gc2l6ZW9mKHN0cnVjdCBjaGFjaGFfY3R4KSwKKysJCS5iYXNlLmNyYV9tb2R1bGUJPSBUSElTX01PRFVMRSwKKysKKysJCS5taW5fa2V5c2l6ZQkJPSBDSEFDSEFfS0VZX1NJWkUsCisrCQkubWF4X2tleXNpemUJCT0gQ0hBQ0hBX0tFWV9TSVpFLAorKwkJLml2c2l6ZQkJCT0gWENIQUNIQV9JVl9TSVpFLAorKwkJLmNodW5rc2l6ZQkJPSBDSEFDSEFfQkxPQ0tfU0laRSwKKysJCS53YWxrc2l6ZQkJPSA0ICogQ0hBQ0hBX0JMT0NLX1NJWkUsCisrCQkuc2V0a2V5CQkJPSBjaGFjaGEyMF9zZXRrZXksCisrCQkuZW5jcnlwdAkJPSB4Y2hhY2hhX25lb24sCisrCQkuZGVjcnlwdAkJPSB4Y2hhY2hhX25lb24sCisrCX0sIHsKKysJCS5iYXNlLmNyYV9uYW1lCQk9ICJ4Y2hhY2hhMTIiLAorKwkJLmJhc2UuY3JhX2RyaXZlcl9uYW1lCT0gInhjaGFjaGExMi1uZW9uIiwKKysJCS5iYXNlLmNyYV9wcmlvcml0eQk9IDMwMCwKKysJCS5iYXNlLmNyYV9ibG9ja3NpemUJPSAxLAorKwkJLmJhc2UuY3JhX2N0eHNpemUJPSBzaXplb2Yoc3RydWN0IGNoYWNoYV9jdHgpLAorKwkJLmJhc2UuY3JhX21vZHVsZQk9IFRISVNfTU9EVUxFLAorKworKwkJLm1pbl9rZXlzaXplCQk9IENIQUNIQV9LRVlfU0laRSwKKysJCS5tYXhfa2V5c2l6ZQkJPSBDSEFDSEFfS0VZX1NJWkUsCisrCQkuaXZzaXplCQkJPSBYQ0hBQ0hBX0lWX1NJWkUsCisrCQkuY2h1bmtzaXplCQk9IENIQUNIQV9CTE9DS19TSVpFLAorKwkJLndhbGtzaXplCQk9IDQgKiBDSEFDSEFfQkxPQ0tfU0laRSwKKysJCS5zZXRrZXkJCQk9IGNoYWNoYTEyX3NldGtleSwKKysJCS5lbmNyeXB0CQk9IHhjaGFjaGFfbmVvbiwKKysJCS5kZWNyeXB0CQk9IHhjaGFjaGFfbmVvbiwKKysJfQorK307CisrCisrc3RhdGljIGludCBfX2luaXQgY2hhY2hhX3NpbWRfbW9kX2luaXQodm9pZCkKKyt7CisrCWludCBlcnI7CisrCisrCWVyciA9IGNyeXB0b19yZWdpc3Rlcl9za2NpcGhlcnMoYXJtX2FsZ3MsIEFSUkFZX1NJWkUoYXJtX2FsZ3MpKTsKKysJaWYgKGVycikKKysJCXJldHVybiBlcnI7CisrCisrCWlmIChJU19FTkFCTEVEKENPTkZJR19LRVJORUxfTU9ERV9ORU9OKSAmJiAoZWxmX2h3Y2FwICYgSFdDQVBfTkVPTikpIHsKKysJCWludCBpOworKworKwkJc3dpdGNoIChyZWFkX2NwdWlkX3BhcnQoKSkgeworKwkJY2FzZSBBUk1fQ1BVX1BBUlRfQ09SVEVYX0E3OgorKwkJY2FzZSBBUk1fQ1BVX1BBUlRfQ09SVEVYX0E1OgorKwkJCS8qCisrCQkJICogVGhlIENvcnRleC1BNyBhbmQgQ29ydGV4LUE1IGRvIG5vdCBwZXJmb3JtIHdlbGwgd2l0aAorKwkJCSAqIHRoZSBORU9OIGltcGxlbWVudGF0aW9uIGJ1dCBkbyBpbmNyZWRpYmx5IHdpdGggdGhlCisrCQkJICogc2NhbGFyIG9uZSBhbmQgdXNlIGxlc3MgcG93ZXIuCisrCQkJICovCisrCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobmVvbl9hbGdzKTsgaSsrKQorKwkJCQluZW9uX2FsZ3NbaV0uYmFzZS5jcmFfcHJpb3JpdHkgPSAwOworKwkJCWJyZWFrOworKwkJfQorKworKwkJZXJyID0gY3J5cHRvX3JlZ2lzdGVyX3NrY2lwaGVycyhuZW9uX2FsZ3MsIEFSUkFZX1NJWkUobmVvbl9hbGdzKSk7CisrCQlpZiAoZXJyKQorKwkJCWNyeXB0b191bnJlZ2lzdGVyX3NrY2lwaGVycyhhcm1fYWxncywgQVJSQVlfU0laRShhcm1fYWxncykpOworKwl9CisrCXJldHVybiBlcnI7CisrfQorKworK3N0YXRpYyB2b2lkIF9fZXhpdCBjaGFjaGFfc2ltZF9tb2RfZmluaSh2b2lkKQorK3sKKysJY3J5cHRvX3VucmVnaXN0ZXJfc2tjaXBoZXJzKGFybV9hbGdzLCBBUlJBWV9TSVpFKGFybV9hbGdzKSk7CisrCWlmIChJU19FTkFCTEVEKENPTkZJR19LRVJORUxfTU9ERV9ORU9OKSAmJiAoZWxmX2h3Y2FwICYgSFdDQVBfTkVPTikpCisrCQljcnlwdG9fdW5yZWdpc3Rlcl9za2NpcGhlcnMobmVvbl9hbGdzLCBBUlJBWV9TSVpFKG5lb25fYWxncykpOworK30KKysKKyttb2R1bGVfaW5pdChjaGFjaGFfc2ltZF9tb2RfaW5pdCk7CisrbW9kdWxlX2V4aXQoY2hhY2hhX3NpbWRfbW9kX2ZpbmkpOworKworK01PRFVMRV9ERVNDUklQVElPTigiQ2hhQ2hhIGFuZCBYQ2hhQ2hhIHN0cmVhbSBjaXBoZXJzIChzY2FsYXIgYW5kIE5FT04gYWNjZWxlcmF0ZWQpIik7CisrTU9EVUxFX0FVVEhPUigiQXJkIEJpZXNoZXV2ZWwgPGFyZC5iaWVzaGV1dmVsQGxpbmFyby5vcmc+Iik7CisrTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworK01PRFVMRV9BTElBU19DUllQVE8oImNoYWNoYTIwIik7CisrTU9EVUxFX0FMSUFTX0NSWVBUTygiY2hhY2hhMjAtYXJtIik7CisrTU9EVUxFX0FMSUFTX0NSWVBUTygieGNoYWNoYTIwIik7CisrTU9EVUxFX0FMSUFTX0NSWVBUTygieGNoYWNoYTIwLWFybSIpOworK01PRFVMRV9BTElBU19DUllQVE8oInhjaGFjaGExMiIpOworK01PRFVMRV9BTElBU19DUllQVE8oInhjaGFjaGExMi1hcm0iKTsKKysjaWZkZWYgQ09ORklHX0tFUk5FTF9NT0RFX05FT04KKytNT0RVTEVfQUxJQVNfQ1JZUFRPKCJjaGFjaGEyMC1uZW9uIik7CisrTU9EVUxFX0FMSUFTX0NSWVBUTygieGNoYWNoYTIwLW5lb24iKTsKKytNT0RVTEVfQUxJQVNfQ1JZUFRPKCJ4Y2hhY2hhMTItbmVvbiIpOworKyNlbmRpZgorLS0tIGEvYXJjaC9hcm0vY3J5cHRvL2NoYWNoYS1uZW9uLWdsdWUuYworKysrIC9kZXYvbnVsbAorQEAgLTEsMjAyICswLDAgQEAKKy0vKgorLSAqIEFSTSBORU9OIGFjY2VsZXJhdGVkIENoYUNoYSBhbmQgWENoYUNoYSBzdHJlYW0gY2lwaGVycywKKy0gKiBpbmNsdWRpbmcgQ2hhQ2hhMjAgKFJGQzc1MzkpCistICoKKy0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgTGluYXJvLCBMdGQuIDxhcmQuYmllc2hldXZlbEBsaW5hcm8ub3JnPgorLSAqCistICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorLSAqCistICogQmFzZWQgb246CistICogQ2hhQ2hhMjAgMjU2LWJpdCBjaXBoZXIgYWxnb3JpdGhtLCBSRkM3NTM5LCBTSU1EIGdsdWUgY29kZQorLSAqCistICogQ29weXJpZ2h0IChDKSAyMDE1IE1hcnRpbiBXaWxsaQorLSAqCistICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCistICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0gKi8KKy0KKy0jaW5jbHVkZSA8Y3J5cHRvL2FsZ2FwaS5oPgorLSNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvY2hhY2hhLmg+CistI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9zaW1kLmg+CistI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9za2NpcGhlci5oPgorLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKy0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CistCistI2luY2x1ZGUgPGFzbS9od2NhcC5oPgorLSNpbmNsdWRlIDxhc20vbmVvbi5oPgorLSNpbmNsdWRlIDxhc20vc2ltZC5oPgorLQorLWFzbWxpbmthZ2Ugdm9pZCBjaGFjaGFfYmxvY2tfeG9yX25lb24oY29uc3QgdTMyICpzdGF0ZSwgdTggKmRzdCwgY29uc3QgdTggKnNyYywKKy0JCQkJICAgICAgaW50IG5yb3VuZHMpOworLWFzbWxpbmthZ2Ugdm9pZCBjaGFjaGFfNGJsb2NrX3hvcl9uZW9uKGNvbnN0IHUzMiAqc3RhdGUsIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsCistCQkJCSAgICAgICBpbnQgbnJvdW5kcyk7CistYXNtbGlua2FnZSB2b2lkIGhjaGFjaGFfYmxvY2tfbmVvbihjb25zdCB1MzIgKnN0YXRlLCB1MzIgKm91dCwgaW50IG5yb3VuZHMpOworLQorLXN0YXRpYyB2b2lkIGNoYWNoYV9kb25lb24odTMyICpzdGF0ZSwgdTggKmRzdCwgY29uc3QgdTggKnNyYywKKy0JCQkgIHVuc2lnbmVkIGludCBieXRlcywgaW50IG5yb3VuZHMpCisteworLQl1OCBidWZbQ0hBQ0hBX0JMT0NLX1NJWkVdOworLQorLQl3aGlsZSAoYnl0ZXMgPj0gQ0hBQ0hBX0JMT0NLX1NJWkUgKiA0KSB7CistCQljaGFjaGFfNGJsb2NrX3hvcl9uZW9uKHN0YXRlLCBkc3QsIHNyYywgbnJvdW5kcyk7CistCQlieXRlcyAtPSBDSEFDSEFfQkxPQ0tfU0laRSAqIDQ7CistCQlzcmMgKz0gQ0hBQ0hBX0JMT0NLX1NJWkUgKiA0OworLQkJZHN0ICs9IENIQUNIQV9CTE9DS19TSVpFICogNDsKKy0JCXN0YXRlWzEyXSArPSA0OworLQl9CistCXdoaWxlIChieXRlcyA+PSBDSEFDSEFfQkxPQ0tfU0laRSkgeworLQkJY2hhY2hhX2Jsb2NrX3hvcl9uZW9uKHN0YXRlLCBkc3QsIHNyYywgbnJvdW5kcyk7CistCQlieXRlcyAtPSBDSEFDSEFfQkxPQ0tfU0laRTsKKy0JCXNyYyArPSBDSEFDSEFfQkxPQ0tfU0laRTsKKy0JCWRzdCArPSBDSEFDSEFfQkxPQ0tfU0laRTsKKy0JCXN0YXRlWzEyXSsrOworLQl9CistCWlmIChieXRlcykgeworLQkJbWVtY3B5KGJ1Ziwgc3JjLCBieXRlcyk7CistCQljaGFjaGFfYmxvY2tfeG9yX25lb24oc3RhdGUsIGJ1ZiwgYnVmLCBucm91bmRzKTsKKy0JCW1lbWNweShkc3QsIGJ1ZiwgYnl0ZXMpOworLQl9CistfQorLQorLXN0YXRpYyBpbnQgY2hhY2hhX25lb25fc3RyZWFtX3hvcihzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxLAorLQkJCQkgIGNvbnN0IHN0cnVjdCBjaGFjaGFfY3R4ICpjdHgsIGNvbnN0IHU4ICppdikKKy17CistCXN0cnVjdCBza2NpcGhlcl93YWxrIHdhbGs7CistCXUzMiBzdGF0ZVsxNl07CistCWludCBlcnI7CistCistCWVyciA9IHNrY2lwaGVyX3dhbGtfdmlydCgmd2FsaywgcmVxLCBmYWxzZSk7CistCistCWNyeXB0b19jaGFjaGFfaW5pdChzdGF0ZSwgY3R4LCBpdik7CistCistCXdoaWxlICh3YWxrLm5ieXRlcyA+IDApIHsKKy0JCXVuc2lnbmVkIGludCBuYnl0ZXMgPSB3YWxrLm5ieXRlczsKKy0KKy0JCWlmIChuYnl0ZXMgPCB3YWxrLnRvdGFsKQorLQkJCW5ieXRlcyA9IHJvdW5kX2Rvd24obmJ5dGVzLCB3YWxrLnN0cmlkZSk7CistCistCQlrZXJuZWxfbmVvbl9iZWdpbigpOworLQkJY2hhY2hhX2RvbmVvbihzdGF0ZSwgd2Fsay5kc3QudmlydC5hZGRyLCB3YWxrLnNyYy52aXJ0LmFkZHIsCistCQkJICAgICAgbmJ5dGVzLCBjdHgtPm5yb3VuZHMpOworLQkJa2VybmVsX25lb25fZW5kKCk7CistCQllcnIgPSBza2NpcGhlcl93YWxrX2RvbmUoJndhbGssIHdhbGsubmJ5dGVzIC0gbmJ5dGVzKTsKKy0JfQorLQorLQlyZXR1cm4gZXJyOworLX0KKy0KKy1zdGF0aWMgaW50IGNoYWNoYV9uZW9uKHN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0ICpyZXEpCisteworLQlzdHJ1Y3QgY3J5cHRvX3NrY2lwaGVyICp0Zm0gPSBjcnlwdG9fc2tjaXBoZXJfcmVxdGZtKHJlcSk7CistCXN0cnVjdCBjaGFjaGFfY3R4ICpjdHggPSBjcnlwdG9fc2tjaXBoZXJfY3R4KHRmbSk7CistCistCWlmIChyZXEtPmNyeXB0bGVuIDw9IENIQUNIQV9CTE9DS19TSVpFIHx8ICFjcnlwdG9fc2ltZF91c2FibGUoKSkKKy0JCXJldHVybiBjcnlwdG9fY2hhY2hhX2NyeXB0KHJlcSk7CistCistCXJldHVybiBjaGFjaGFfbmVvbl9zdHJlYW1feG9yKHJlcSwgY3R4LCByZXEtPml2KTsKKy19CistCistc3RhdGljIGludCB4Y2hhY2hhX25lb24oc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSkKKy17CistCXN0cnVjdCBjcnlwdG9fc2tjaXBoZXIgKnRmbSA9IGNyeXB0b19za2NpcGhlcl9yZXF0Zm0ocmVxKTsKKy0Jc3RydWN0IGNoYWNoYV9jdHggKmN0eCA9IGNyeXB0b19za2NpcGhlcl9jdHgodGZtKTsKKy0Jc3RydWN0IGNoYWNoYV9jdHggc3ViY3R4OworLQl1MzIgc3RhdGVbMTZdOworLQl1OCByZWFsX2l2WzE2XTsKKy0KKy0JaWYgKHJlcS0+Y3J5cHRsZW4gPD0gQ0hBQ0hBX0JMT0NLX1NJWkUgfHwgIWNyeXB0b19zaW1kX3VzYWJsZSgpKQorLQkJcmV0dXJuIGNyeXB0b194Y2hhY2hhX2NyeXB0KHJlcSk7CistCistCWNyeXB0b19jaGFjaGFfaW5pdChzdGF0ZSwgY3R4LCByZXEtPml2KTsKKy0KKy0Ja2VybmVsX25lb25fYmVnaW4oKTsKKy0JaGNoYWNoYV9ibG9ja19uZW9uKHN0YXRlLCBzdWJjdHgua2V5LCBjdHgtPm5yb3VuZHMpOworLQlrZXJuZWxfbmVvbl9lbmQoKTsKKy0Jc3ViY3R4Lm5yb3VuZHMgPSBjdHgtPm5yb3VuZHM7CistCistCW1lbWNweSgmcmVhbF9pdlswXSwgcmVxLT5pdiArIDI0LCA4KTsKKy0JbWVtY3B5KCZyZWFsX2l2WzhdLCByZXEtPml2ICsgMTYsIDgpOworLQlyZXR1cm4gY2hhY2hhX25lb25fc3RyZWFtX3hvcihyZXEsICZzdWJjdHgsIHJlYWxfaXYpOworLX0KKy0KKy1zdGF0aWMgc3RydWN0IHNrY2lwaGVyX2FsZyBhbGdzW10gPSB7CistCXsKKy0JCS5iYXNlLmNyYV9uYW1lCQk9ICJjaGFjaGEyMCIsCistCQkuYmFzZS5jcmFfZHJpdmVyX25hbWUJPSAiY2hhY2hhMjAtbmVvbiIsCistCQkuYmFzZS5jcmFfcHJpb3JpdHkJPSAzMDAsCistCQkuYmFzZS5jcmFfYmxvY2tzaXplCT0gMSwKKy0JCS5iYXNlLmNyYV9jdHhzaXplCT0gc2l6ZW9mKHN0cnVjdCBjaGFjaGFfY3R4KSwKKy0JCS5iYXNlLmNyYV9tb2R1bGUJPSBUSElTX01PRFVMRSwKKy0KKy0JCS5taW5fa2V5c2l6ZQkJPSBDSEFDSEFfS0VZX1NJWkUsCistCQkubWF4X2tleXNpemUJCT0gQ0hBQ0hBX0tFWV9TSVpFLAorLQkJLml2c2l6ZQkJCT0gQ0hBQ0hBX0lWX1NJWkUsCistCQkuY2h1bmtzaXplCQk9IENIQUNIQV9CTE9DS19TSVpFLAorLQkJLndhbGtzaXplCQk9IDQgKiBDSEFDSEFfQkxPQ0tfU0laRSwKKy0JCS5zZXRrZXkJCQk9IGNyeXB0b19jaGFjaGEyMF9zZXRrZXksCistCQkuZW5jcnlwdAkJPSBjaGFjaGFfbmVvbiwKKy0JCS5kZWNyeXB0CQk9IGNoYWNoYV9uZW9uLAorLQl9LCB7CistCQkuYmFzZS5jcmFfbmFtZQkJPSAieGNoYWNoYTIwIiwKKy0JCS5iYXNlLmNyYV9kcml2ZXJfbmFtZQk9ICJ4Y2hhY2hhMjAtbmVvbiIsCistCQkuYmFzZS5jcmFfcHJpb3JpdHkJPSAzMDAsCistCQkuYmFzZS5jcmFfYmxvY2tzaXplCT0gMSwKKy0JCS5iYXNlLmNyYV9jdHhzaXplCT0gc2l6ZW9mKHN0cnVjdCBjaGFjaGFfY3R4KSwKKy0JCS5iYXNlLmNyYV9tb2R1bGUJPSBUSElTX01PRFVMRSwKKy0KKy0JCS5taW5fa2V5c2l6ZQkJPSBDSEFDSEFfS0VZX1NJWkUsCistCQkubWF4X2tleXNpemUJCT0gQ0hBQ0hBX0tFWV9TSVpFLAorLQkJLml2c2l6ZQkJCT0gWENIQUNIQV9JVl9TSVpFLAorLQkJLmNodW5rc2l6ZQkJPSBDSEFDSEFfQkxPQ0tfU0laRSwKKy0JCS53YWxrc2l6ZQkJPSA0ICogQ0hBQ0hBX0JMT0NLX1NJWkUsCistCQkuc2V0a2V5CQkJPSBjcnlwdG9fY2hhY2hhMjBfc2V0a2V5LAorLQkJLmVuY3J5cHQJCT0geGNoYWNoYV9uZW9uLAorLQkJLmRlY3J5cHQJCT0geGNoYWNoYV9uZW9uLAorLQl9LCB7CistCQkuYmFzZS5jcmFfbmFtZQkJPSAieGNoYWNoYTEyIiwKKy0JCS5iYXNlLmNyYV9kcml2ZXJfbmFtZQk9ICJ4Y2hhY2hhMTItbmVvbiIsCistCQkuYmFzZS5jcmFfcHJpb3JpdHkJPSAzMDAsCistCQkuYmFzZS5jcmFfYmxvY2tzaXplCT0gMSwKKy0JCS5iYXNlLmNyYV9jdHhzaXplCT0gc2l6ZW9mKHN0cnVjdCBjaGFjaGFfY3R4KSwKKy0JCS5iYXNlLmNyYV9tb2R1bGUJPSBUSElTX01PRFVMRSwKKy0KKy0JCS5taW5fa2V5c2l6ZQkJPSBDSEFDSEFfS0VZX1NJWkUsCistCQkubWF4X2tleXNpemUJCT0gQ0hBQ0hBX0tFWV9TSVpFLAorLQkJLml2c2l6ZQkJCT0gWENIQUNIQV9JVl9TSVpFLAorLQkJLmNodW5rc2l6ZQkJPSBDSEFDSEFfQkxPQ0tfU0laRSwKKy0JCS53YWxrc2l6ZQkJPSA0ICogQ0hBQ0hBX0JMT0NLX1NJWkUsCistCQkuc2V0a2V5CQkJPSBjcnlwdG9fY2hhY2hhMTJfc2V0a2V5LAorLQkJLmVuY3J5cHQJCT0geGNoYWNoYV9uZW9uLAorLQkJLmRlY3J5cHQJCT0geGNoYWNoYV9uZW9uLAorLQl9CistfTsKKy0KKy1zdGF0aWMgaW50IF9faW5pdCBjaGFjaGFfc2ltZF9tb2RfaW5pdCh2b2lkKQorLXsKKy0JaWYgKCEoZWxmX2h3Y2FwICYgSFdDQVBfTkVPTikpCistCQlyZXR1cm4gLUVOT0RFVjsKKy0KKy0JcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9za2NpcGhlcnMoYWxncywgQVJSQVlfU0laRShhbGdzKSk7CistfQorLQorLXN0YXRpYyB2b2lkIF9fZXhpdCBjaGFjaGFfc2ltZF9tb2RfZmluaSh2b2lkKQorLXsKKy0JY3J5cHRvX3VucmVnaXN0ZXJfc2tjaXBoZXJzKGFsZ3MsIEFSUkFZX1NJWkUoYWxncykpOworLX0KKy0KKy1tb2R1bGVfaW5pdChjaGFjaGFfc2ltZF9tb2RfaW5pdCk7CistbW9kdWxlX2V4aXQoY2hhY2hhX3NpbWRfbW9kX2ZpbmkpOworLQorLU1PRFVMRV9ERVNDUklQVElPTigiQ2hhQ2hhIGFuZCBYQ2hhQ2hhIHN0cmVhbSBjaXBoZXJzIChORU9OIGFjY2VsZXJhdGVkKSIpOworLU1PRFVMRV9BVVRIT1IoIkFyZCBCaWVzaGV1dmVsIDxhcmQuYmllc2hldXZlbEBsaW5hcm8ub3JnPiIpOworLU1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKKy1NT0RVTEVfQUxJQVNfQ1JZUFRPKCJjaGFjaGEyMCIpOworLU1PRFVMRV9BTElBU19DUllQVE8oImNoYWNoYTIwLW5lb24iKTsKKy1NT0RVTEVfQUxJQVNfQ1JZUFRPKCJ4Y2hhY2hhMjAiKTsKKy1NT0RVTEVfQUxJQVNfQ1JZUFRPKCJ4Y2hhY2hhMjAtbmVvbiIpOworLU1PRFVMRV9BTElBU19DUllQVE8oInhjaGFjaGExMiIpOworLU1PRFVMRV9BTElBU19DUllQVE8oInhjaGFjaGExMi1uZW9uIik7CistLS0gYS9hcmNoL2FybS9jcnlwdG8vY2hhY2hhLXNjYWxhci1jb3JlLlMKKysrKyBiL2FyY2gvYXJtL2NyeXB0by9jaGFjaGEtc2NhbGFyLWNvcmUuUworQEAgLTQxLDE0ICs0MSw2IEBACisgCVgxNAkucmVxCXIxMgorIAlYMTUJLnJlcQlyMTQKKyAKKy0uTGV4cGFuZF8zMmJ5dGVfazoKKy0JLy8gImV4cGFuZCAzMi1ieXRlIGsiCistCS53b3JkCTB4NjE3MDc4NjUsIDB4MzMyMDY0NmUsIDB4Nzk2MjJkMzIsIDB4NmIyMDY1NzQKKy0KKy0jaWZkZWYgX190aHVtYjJfXworLSMgIGRlZmluZSBhZHJsIGFkcgorLSNlbmRpZgorLQorIC5tYWNybyBfX3JldgkJb3V0LCBpbiwgIHQwLCB0MSwgdDIKKyAuaWYgX19MSU5VWF9BUk1fQVJDSF9fID49IDYKKyAJcmV2CQlcb3V0LCBcaW4KK0BAIC0zOTEsNjEgKzM4Myw2NSBAQAorIC5lbmRtCS8vIF9jaGFjaGEKKyAKKyAvKgorLSAqIHZvaWQgY2hhY2hhMjBfYXJtKHU4ICpvdXQsIGNvbnN0IHU4ICppbiwgc2l6ZV90IGxlbiwgY29uc3QgdTMyIGtleVs4XSwKKy0gKgkJICAgICBjb25zdCB1MzIgaXZbNF0pOworKyAqIHZvaWQgY2hhY2hhX2RvYXJtKHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsIHVuc2lnbmVkIGludCBieXRlcywKKysgKgkJICAgICBjb25zdCB1MzIgKnN0YXRlLCBpbnQgbnJvdW5kcyk7CisgICovCistRU5UUlkoY2hhY2hhMjBfYXJtKQorK0VOVFJZKGNoYWNoYV9kb2FybSkKKyAJY21wCQlyMiwgIzAJCQkvLyBsZW4gPT0gMD8KKyAJcmV0ZXEJCWxyCisgCisrCWxkcgkJaXAsIFtzcF0KKysJY21wCQlpcCwgIzEyCisrCisgCXB1c2gJCXtyMC1yMixyNC1yMTEsbHJ9CisgCisgCS8vIFB1c2ggc3RhdGUgeDAteDE1IG9udG8gc3RhY2suCisgCS8vIEFsc28gc3RvcmUgYW4gZXh0cmEgY29weSBvZiB4MTAteDExIGp1c3QgYmVmb3JlIHRoZSBzdGF0ZS4KKyAKKy0JbGRyCQlyNCwgW3NwLCAjNDhdCQkvLyBpdgorLQltb3YJCXIwLCBzcAorLQlzdWIJCXNwLCAjODAKKy0KKy0JLy8gaXY6IHgxMi14MTUKKy0JbGRtCQlyNCwge1gxMixYMTMsWDE0LFgxNX0KKy0Jc3RtZGIJCXIwISwge1gxMixYMTMsWDE0LFgxNX0KKysJYWRkCQlYMTIsIHIzLCAjNDgKKysJbGRtCQlYMTIsIHtYMTIsWDEzLFgxNCxYMTV9CisrCXB1c2gJCXtYMTIsWDEzLFgxNCxYMTV9CisrCXN1YgkJc3AsIHNwLCAjNjQKKyAKKy0JLy8ga2V5OiB4NC14MTEKKy0JX19sZHJkCQlYOF9YMTAsIFg5X1gxMSwgcjMsIDI0CisrCV9fbGRyZAkJWDhfWDEwLCBYOV9YMTEsIHIzLCA0MAorIAlfX3N0cmQJCVg4X1gxMCwgWDlfWDExLCBzcCwgOAorLQlzdG1kYgkJcjAhLCB7WDhfWDEwLCBYOV9YMTF9CistCWxkbQkJcjMsIHtYNC1YOV9YMTF9CistCXN0bWRiCQlyMCEsIHtYNC1YOV9YMTF9CistCistCS8vIGNvbnN0YW50czogeDAteDMKKy0JYWRybAkJWDMsIC5MZXhwYW5kXzMyYnl0ZV9rCistCWxkbQkJWDMsIHtYMC1YM30KKysJX19zdHJkCQlYOF9YMTAsIFg5X1gxMSwgc3AsIDU2CisrCWxkbQkJcjMsIHtYMC1YOV9YMTF9CisgCV9fc3RyZAkJWDAsIFgxLCBzcCwgMTYKKyAJX19zdHJkCQlYMiwgWDMsIHNwLCAyNAorKwlfX3N0cmQJCVg0LCBYNSwgc3AsIDMyCisrCV9fc3RyZAkJWDYsIFg3LCBzcCwgNDAKKysJX19zdHJkCQlYOF9YMTAsIFg5X1gxMSwgc3AsIDQ4CisgCisrCWJlcQkJMWYKKyAJX2NoYWNoYQkJMjAKKyAKKy0JYWRkCQlzcCwgIzc2CisrMDoJYWRkCQlzcCwgIzc2CisgCXBvcAkJe3I0LXIxMSwgcGN9CistRU5EUFJPQyhjaGFjaGEyMF9hcm0pCisrCisrMToJX2NoYWNoYQkJMTIKKysJYgkJMGIKKytFTkRQUk9DKGNoYWNoYV9kb2FybSkKKyAKKyAvKgorLSAqIHZvaWQgaGNoYWNoYTIwX2FybShjb25zdCB1MzIgc3RhdGVbMTZdLCB1MzIgb3V0WzhdKTsKKysgKiB2b2lkIGhjaGFjaGFfYmxvY2tfYXJtKGNvbnN0IHUzMiBzdGF0ZVsxNl0sIHUzMiBvdXRbOF0sIGludCBucm91bmRzKTsKKyAgKi8KKy1FTlRSWShoY2hhY2hhMjBfYXJtKQorK0VOVFJZKGhjaGFjaGFfYmxvY2tfYXJtKQorIAlwdXNoCQl7cjEscjQtcjExLGxyfQorIAorKwljbXAJCXIyLCAjMTIJCQkvLyBDaGFDaGExMiA/CisrCisgCW1vdgkJcjE0LCByMAorIAlsZG1pYQkJcjE0ISwge3IwLXIxMX0JCS8vIGxvYWQgeDAteDExCisgCXB1c2gJCXtyMTAtcjExfQkJLy8gc3RvcmUgeDEwLXgxMSB0byBzdGFjaworIAlsZG0JCXIxNCwge3IxMC1yMTIscjE0fQkvLyBsb2FkIHgxMi14MTUKKyAJc3ViCQlzcCwgIzgKKyAKKysJYmVxCQkxZgorIAlfY2hhY2hhX3Blcm11dGUJMjAKKyAKKyAJLy8gU2tpcCBvdmVyICh1bnVzZWQwLXVudXNlZDEsIHgxMC14MTEpCistCWFkZAkJc3AsICMxNgorKzA6CWFkZAkJc3AsICMxNgorIAorIAkvLyBGaXggdXAgcm90YXRpb25zIG9mIHgxMi14MTUKKyAJcm9yCQlYMTIsIFgxMiwgI2Ryb3QKK0BAIC00NTgsNCArNDU0LDcgQEAgRU5UUlkoaGNoYWNoYTIwX2FybSkKKyAJc3RtCQlyNCwge1gwLFgxLFgyLFgzLFgxMixYMTMsWDE0LFgxNX0KKyAKKyAJcG9wCQl7cjQtcjExLHBjfQorLUVORFBST0MoaGNoYWNoYTIwX2FybSkKKysKKysxOglfY2hhY2hhX3Blcm11dGUJMTIKKysJYgkJMGIKKytFTkRQUk9DKGhjaGFjaGFfYmxvY2tfYXJtKQorLS0tIGEvYXJjaC9hcm02NC9jcnlwdG8vY2hhY2hhLW5lb24tZ2x1ZS5jCisrKysgYi9hcmNoL2FybTY0L2NyeXB0by9jaGFjaGEtbmVvbi1nbHVlLmMKK0BAIC0xLDUgKzEsNSBAQAorIC8qCistICogQVJNIE5FT04gYWNjZWxlcmF0ZWQgQ2hhQ2hhIGFuZCBYQ2hhQ2hhIHN0cmVhbSBjaXBoZXJzLAorKyAqIEFSTSBORU9OIGFuZCBzY2FsYXIgYWNjZWxlcmF0ZWQgQ2hhQ2hhIGFuZCBYQ2hhQ2hhIHN0cmVhbSBjaXBoZXJzLAorICAqIGluY2x1ZGluZyBDaGFDaGEyMCAoUkZDNzUzOSkKKyAgKgorICAqIENvcHlyaWdodCAoQykgMjAxNiAtIDIwMTcgTGluYXJvLCBMdGQuIDxhcmQuYmllc2hldXZlbEBsaW5hcm8ub3JnPgpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAwOS1jcnlwdG8tYXJtLWNoYWNoYS1leHBvc2UtQVJNLUNoYUNoYS1yb3V0aW5lLWFzLWxpYnJhLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAwOS1jcnlwdG8tYXJtLWNoYWNoYS1leHBvc2UtQVJNLUNoYUNoYS1yb3V0aW5lLWFzLWxpYnJhLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMDZkYzYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDA5LWNyeXB0by1hcm0tY2hhY2hhLWV4cG9zZS1BUk0tQ2hhQ2hhLXJvdXRpbmUtYXMtbGlicmEucGF0Y2gKQEAgLTAsMCArMSwxMDggQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFyZCBCaWVzaGV1dmVsIDxhcmRiQGtlcm5lbC5vcmc+CitEYXRlOiBGcmksIDggTm92IDIwMTkgMTM6MjI6MTUgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gY3J5cHRvOiBhcm0vY2hhY2hhIC0gZXhwb3NlIEFSTSBDaGFDaGEgcm91dGluZSBhcyBsaWJyYXJ5CisgZnVuY3Rpb24KKworY29tbWl0IGE0NGEzNDMwZDcxYmFkNGVlNTY3ODhhNTlmZmYwOTliMjkxZWE1NGMgdXBzdHJlYW0uCisKK0V4cG9zZSB0aGUgYWNjZWxlcmF0ZWQgTkVPTiBDaGFDaGEgcm91dGluZSBkaXJlY3RseSBhcyBhIHN5bWJvbAorZXhwb3J0IHNvIHRoYXQgdXNlcnMgb2YgdGhlIENoYUNoYSBsaWJyYXJ5IEFQSSBjYW4gdXNlIGl0IGRpcmVjdGx5LgorCitHaXZlbiB0aGF0IGNhbGxzIGludG8gdGhlIGxpYnJhcnkgQVBJIHdpbGwgYWx3YXlzIGdvIHRocm91Z2ggdGhlCityb3V0aW5lcyBpbiB0aGlzIG1vZHVsZSBpZiBpdCBpcyBlbmFibGVkLCBzd2l0Y2ggdG8gc3RhdGljIGtleXMKK3RvIHNlbGVjdCB0aGUgb3B0aW1hbCBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUgKHdoaWNoIG1heSBiZSBub25lCithdCBhbGwsIGluIHdoaWNoIGNhc2Ugd2UgZGVmZXIgdG8gdGhlIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gZm9yCithbGwgaW52b2NhdGlvbnMpLgorCitTaWduZWQtb2ZmLWJ5OiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgorU2lnbmVkLW9mZi1ieTogSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBhcmNoL2FybS9jcnlwdG8vS2NvbmZpZyAgICAgICB8ICAxICsKKyBhcmNoL2FybS9jcnlwdG8vY2hhY2hhLWdsdWUuYyB8IDQxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCisgMiBmaWxlcyBjaGFuZ2VkLCA0MSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSBhL2FyY2gvYXJtL2NyeXB0by9LY29uZmlnCisrKysgYi9hcmNoL2FybS9jcnlwdG8vS2NvbmZpZworQEAgLTEyOSw2ICsxMjksNyBAQCBjb25maWcgQ1JZUFRPX0NSQzMyX0FSTV9DRQorIGNvbmZpZyBDUllQVE9fQ0hBQ0hBMjBfTkVPTgorIAl0cmlzdGF0ZSAiTkVPTiBhbmQgc2NhbGFyIGFjY2VsZXJhdGVkIENoYUNoYSBzdHJlYW0gY2lwaGVyIGFsZ29yaXRobXMiCisgCXNlbGVjdCBDUllQVE9fQkxLQ0lQSEVSCisrCXNlbGVjdCBDUllQVE9fQVJDSF9IQVZFX0xJQl9DSEFDSEEKKyAKKyBjb25maWcgQ1JZUFRPX05IUE9MWTEzMDVfTkVPTgorIAl0cmlzdGF0ZSAiTkVPTiBhY2NlbGVyYXRlZCBOSFBvbHkxMzA1IGhhc2ggZnVuY3Rpb24gKGZvciBBZGlhbnR1bSkiCistLS0gYS9hcmNoL2FybS9jcnlwdG8vY2hhY2hhLWdsdWUuYworKysrIGIvYXJjaC9hcm0vY3J5cHRvL2NoYWNoYS1nbHVlLmMKK0BAIC0xMSw2ICsxMSw3IEBACisgI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9jaGFjaGEuaD4KKyAjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL3NpbWQuaD4KKyAjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL3NrY2lwaGVyLmg+CisrI2luY2x1ZGUgPGxpbnV4L2p1bXBfbGFiZWwuaD4KKyAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisgI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorIAorQEAgLTI5LDkgKzMwLDExIEBAIGFzbWxpbmthZ2Ugdm9pZCBoY2hhY2hhX2Jsb2NrX25lb24oY29uc3QKKyBhc21saW5rYWdlIHZvaWQgY2hhY2hhX2RvYXJtKHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsIHVuc2lnbmVkIGludCBieXRlcywKKyAJCQkgICAgIGNvbnN0IHUzMiAqc3RhdGUsIGludCBucm91bmRzKTsKKyAKKytzdGF0aWMgX19yb19hZnRlcl9pbml0IERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHVzZV9uZW9uKTsKKysKKyBzdGF0aWMgaW5saW5lIGJvb2wgbmVvbl91c2FibGUodm9pZCkKKyB7CistCXJldHVybiBjcnlwdG9fc2ltZF91c2FibGUoKTsKKysJcmV0dXJuIHN0YXRpY19icmFuY2hfbGlrZWx5KCZ1c2VfbmVvbikgJiYgY3J5cHRvX3NpbWRfdXNhYmxlKCk7CisgfQorIAorIHN0YXRpYyB2b2lkIGNoYWNoYV9kb25lb24odTMyICpzdGF0ZSwgdTggKmRzdCwgY29uc3QgdTggKnNyYywKK0BAIC02MCw2ICs2Myw0MCBAQCBzdGF0aWMgdm9pZCBjaGFjaGFfZG9uZW9uKHUzMiAqc3RhdGUsIHU4CisgCX0KKyB9CisgCisrdm9pZCBoY2hhY2hhX2Jsb2NrX2FyY2goY29uc3QgdTMyICpzdGF0ZSwgdTMyICpzdHJlYW0sIGludCBucm91bmRzKQorK3sKKysJaWYgKCFJU19FTkFCTEVEKENPTkZJR19LRVJORUxfTU9ERV9ORU9OKSB8fCAhbmVvbl91c2FibGUoKSkgeworKwkJaGNoYWNoYV9ibG9ja19hcm0oc3RhdGUsIHN0cmVhbSwgbnJvdW5kcyk7CisrCX0gZWxzZSB7CisrCQlrZXJuZWxfbmVvbl9iZWdpbigpOworKwkJaGNoYWNoYV9ibG9ja19uZW9uKHN0YXRlLCBzdHJlYW0sIG5yb3VuZHMpOworKwkJa2VybmVsX25lb25fZW5kKCk7CisrCX0KKyt9CisrRVhQT1JUX1NZTUJPTChoY2hhY2hhX2Jsb2NrX2FyY2gpOworKworK3ZvaWQgY2hhY2hhX2luaXRfYXJjaCh1MzIgKnN0YXRlLCBjb25zdCB1MzIgKmtleSwgY29uc3QgdTggKml2KQorK3sKKysJY2hhY2hhX2luaXRfZ2VuZXJpYyhzdGF0ZSwga2V5LCBpdik7CisrfQorK0VYUE9SVF9TWU1CT0woY2hhY2hhX2luaXRfYXJjaCk7CisrCisrdm9pZCBjaGFjaGFfY3J5cHRfYXJjaCh1MzIgKnN0YXRlLCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCB1bnNpZ25lZCBpbnQgYnl0ZXMsCisrCQkgICAgICAgaW50IG5yb3VuZHMpCisreworKwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0tFUk5FTF9NT0RFX05FT04pIHx8ICFuZW9uX3VzYWJsZSgpIHx8CisrCSAgICBieXRlcyA8PSBDSEFDSEFfQkxPQ0tfU0laRSkgeworKwkJY2hhY2hhX2RvYXJtKGRzdCwgc3JjLCBieXRlcywgc3RhdGUsIG5yb3VuZHMpOworKwkJc3RhdGVbMTJdICs9IERJVl9ST1VORF9VUChieXRlcywgQ0hBQ0hBX0JMT0NLX1NJWkUpOworKwkJcmV0dXJuOworKwl9CisrCisrCWtlcm5lbF9uZW9uX2JlZ2luKCk7CisrCWNoYWNoYV9kb25lb24oc3RhdGUsIGRzdCwgc3JjLCBieXRlcywgbnJvdW5kcyk7CisrCWtlcm5lbF9uZW9uX2VuZCgpOworK30KKytFWFBPUlRfU1lNQk9MKGNoYWNoYV9jcnlwdF9hcmNoKTsKKysKKyBzdGF0aWMgaW50IGNoYWNoYV9zdHJlYW1feG9yKHN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0ICpyZXEsCisgCQkJICAgICBjb25zdCBzdHJ1Y3QgY2hhY2hhX2N0eCAqY3R4LCBjb25zdCB1OCAqaXYsCisgCQkJICAgICBib29sIG5lb24pCitAQCAtMjY5LDYgKzMwNiw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGNoYWNoYV9zaW1kX21vZF9pbml0KHYKKyAJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShuZW9uX2FsZ3MpOyBpKyspCisgCQkJCW5lb25fYWxnc1tpXS5iYXNlLmNyYV9wcmlvcml0eSA9IDA7CisgCQkJYnJlYWs7CisrCQlkZWZhdWx0OgorKwkJCXN0YXRpY19icmFuY2hfZW5hYmxlKCZ1c2VfbmVvbik7CisgCQl9CisgCisgCQllcnIgPSBjcnlwdG9fcmVnaXN0ZXJfc2tjaXBoZXJzKG5lb25fYWxncywgQVJSQVlfU0laRShuZW9uX2FsZ3MpKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMTAtY3J5cHRvLW1pcHMtY2hhY2hhLWltcG9ydC0zMnIyLUNoYUNoYS1jb2RlLWZyb20tWmluYy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMTAtY3J5cHRvLW1pcHMtY2hhY2hhLWltcG9ydC0zMnIyLUNoYUNoYS1jb2RlLWZyb20tWmluYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTJiNGM0Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAxMC1jcnlwdG8tbWlwcy1jaGFjaGEtaW1wb3J0LTMycjItQ2hhQ2hhLWNvZGUtZnJvbS1aaW5jLnBhdGNoCkBAIC0wLDAgKzEsNDUxIEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogRnJpLCA4IE5vdiAyMDE5IDEzOjIyOjE2ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyeXB0bzogbWlwcy9jaGFjaGEgLSBpbXBvcnQgMzJyMiBDaGFDaGEgY29kZSBmcm9tIFppbmMKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworY29tbWl0IDQ5YWE3YzAwZWRkZjhkOGY0NjJiMDI1NmJkODJlODE3NjJkN2IwYzYgdXBzdHJlYW0uCisKK1RoaXMgaW1wb3J0cyB0aGUgYWNjZWxlcmF0ZWQgTUlQUyAzMnIyIENoYUNoYTIwIGltcGxlbWVudGF0aW9uIGZyb20gdGhlCitaaW5jIHBhdGNoIHNldC4KKworQ28tZGV2ZWxvcGVkLWJ5OiBSZW7DqSB2YW4gRG9yc3QgPG9wZW5zb3VyY2VAdmRvcnN0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IFJlbsOpIHZhbiBEb3JzdCA8b3BlbnNvdXJjZUB2ZG9yc3QuY29tPgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CitTaWduZWQtb2ZmLWJ5OiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgorU2lnbmVkLW9mZi1ieTogSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBhcmNoL21pcHMvY3J5cHRvL2NoYWNoYS1jb3JlLlMgfCA0MjQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDQyNCBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGFyY2gvbWlwcy9jcnlwdG8vY2hhY2hhLWNvcmUuUworCistLS0gL2Rldi9udWxsCisrKysgYi9hcmNoL21pcHMvY3J5cHRvL2NoYWNoYS1jb3JlLlMKK0BAIC0wLDAgKzEsNDI0IEBACisrLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUICovCisrLyoKKysgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBSZW7DqSB2YW4gRG9yc3QgPG9wZW5zb3VyY2VAdmRvcnN0LmNvbT4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisrICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKyAqLworKworKyNkZWZpbmUgTUFTS19VMzIJCTB4M2MKKysjZGVmaW5lIENIQUNIQTIwX0JMT0NLX1NJWkUJNjQKKysjZGVmaW5lIFNUQUNLX1NJWkUJCTMyCisrCisrI2RlZmluZSBYMAkkdDAKKysjZGVmaW5lIFgxCSR0MQorKyNkZWZpbmUgWDIJJHQyCisrI2RlZmluZSBYMwkkdDMKKysjZGVmaW5lIFg0CSR0NAorKyNkZWZpbmUgWDUJJHQ1CisrI2RlZmluZSBYNgkkdDYKKysjZGVmaW5lIFg3CSR0NworKyNkZWZpbmUgWDgJJHQ4CisrI2RlZmluZSBYOQkkdDkKKysjZGVmaW5lIFgxMAkkdjEKKysjZGVmaW5lIFgxMQkkczYKKysjZGVmaW5lIFgxMgkkczUKKysjZGVmaW5lIFgxMwkkczQKKysjZGVmaW5lIFgxNAkkczMKKysjZGVmaW5lIFgxNQkkczIKKysvKiBVc2UgcmVncyB3aGljaCBhcmUgb3ZlcndyaXR0ZW4gb24gZXhpdCBmb3IgVHggc28gd2UgZG9uJ3QgbGVhayBjbGVhciBkYXRhLiAqLworKyNkZWZpbmUgVDAJJHMxCisrI2RlZmluZSBUMQkkczAKKysjZGVmaW5lIFQobikJVCAjIyBuCisrI2RlZmluZSBYKG4pCVggIyMgbgorKworKy8qIElucHV0IGFyZ3VtZW50cyAqLworKyNkZWZpbmUgU1RBVEUJCSRhMAorKyNkZWZpbmUgT1VUCQkkYTEKKysjZGVmaW5lIElOCQkkYTIKKysjZGVmaW5lIEJZVEVTCQkkYTMKKysKKysvKiBPdXRwdXQgYXJndW1lbnQgKi8KKysvKiBOT05DRVswXSBpcyBrZXB0IGluIGEgcmVnaXN0ZXIgYW5kIG5vdCBpbiBtZW1vcnkuCisrICogV2UgZG9uJ3Qgd2FudCB0byB0b3VjaCBvcmlnaW5hbCB2YWx1ZSBpbiBtZW1vcnkuCisrICogTXVzdCBiZSBpbmNyZW1lbnRlZCBldmVyeSBsb29wIGl0ZXJhdGlvbi4KKysgKi8KKysjZGVmaW5lIE5PTkNFXzAJCSR2MAorKworKy8qIFNBVkVEX1ggYW5kIFNBVkVEX0NBIGFyZSBzZXQgaW4gdGhlIGp1bXAgdGFibGUuCisrICogVXNlIHJlZ3Mgd2hpY2ggYXJlIG92ZXJ3cml0dGVuIG9uIGV4aXQgZWxzZSB3ZSBkb24ndCBsZWFrIGNsZWFyIGRhdGEuCisrICogVGhleSBhcmUgdXNlZCB0byBoYW5kbGluZyB0aGUgbGFzdCBieXRlcyB3aGljaCBhcmUgbm90IG11bHRpcGxlIG9mIDQuCisrICovCisrI2RlZmluZSBTQVZFRF9YCQlYMTUKKysjZGVmaW5lIFNBVkVEX0NBCSRzNworKworKyNkZWZpbmUgSVNfVU5BTElHTkVECSRzNworKworKyNpZiBfX0JZVEVfT1JERVJfXyA9PSBfX09SREVSX0JJR19FTkRJQU5fXworKyNkZWZpbmUgTVNCIDAKKysjZGVmaW5lIExTQiAzCisrI2RlZmluZSBST1R4IHJvdGwKKysjZGVmaW5lIFJPVFIobikgcm90ciBuLCAyNAorKyNkZWZpbmUJQ1BVX1RPX0xFMzIobikgXAorKwl3c2JoCW47IFwKKysJcm90cgluLCAxNjsKKysjZWxzZQorKyNkZWZpbmUgTVNCIDMKKysjZGVmaW5lIExTQiAwCisrI2RlZmluZSBST1R4IHJvdHIKKysjZGVmaW5lIENQVV9UT19MRTMyKG4pCisrI2RlZmluZSBST1RSKG4pCisrI2VuZGlmCisrCisrI2RlZmluZSBGT1JfRUFDSF9XT1JEKHgpIFwKKysJeCggMCk7IFwKKysJeCggMSk7IFwKKysJeCggMik7IFwKKysJeCggMyk7IFwKKysJeCggNCk7IFwKKysJeCggNSk7IFwKKysJeCggNik7IFwKKysJeCggNyk7IFwKKysJeCggOCk7IFwKKysJeCggOSk7IFwKKysJeCgxMCk7IFwKKysJeCgxMSk7IFwKKysJeCgxMik7IFwKKysJeCgxMyk7IFwKKysJeCgxNCk7IFwKKysJeCgxNSk7CisrCisrI2RlZmluZSBGT1JfRUFDSF9XT1JEX1JFVih4KSBcCisrCXgoMTUpOyBcCisrCXgoMTQpOyBcCisrCXgoMTMpOyBcCisrCXgoMTIpOyBcCisrCXgoMTEpOyBcCisrCXgoMTApOyBcCisrCXgoIDkpOyBcCisrCXgoIDgpOyBcCisrCXgoIDcpOyBcCisrCXgoIDYpOyBcCisrCXgoIDUpOyBcCisrCXgoIDQpOyBcCisrCXgoIDMpOyBcCisrCXgoIDIpOyBcCisrCXgoIDEpOyBcCisrCXgoIDApOworKworKyNkZWZpbmUgUExVU19PTkVfMAkgMQorKyNkZWZpbmUgUExVU19PTkVfMQkgMgorKyNkZWZpbmUgUExVU19PTkVfMgkgMworKyNkZWZpbmUgUExVU19PTkVfMwkgNAorKyNkZWZpbmUgUExVU19PTkVfNAkgNQorKyNkZWZpbmUgUExVU19PTkVfNQkgNgorKyNkZWZpbmUgUExVU19PTkVfNgkgNworKyNkZWZpbmUgUExVU19PTkVfNwkgOAorKyNkZWZpbmUgUExVU19PTkVfOAkgOQorKyNkZWZpbmUgUExVU19PTkVfOQkxMAorKyNkZWZpbmUgUExVU19PTkVfMTAJMTEKKysjZGVmaW5lIFBMVVNfT05FXzExCTEyCisrI2RlZmluZSBQTFVTX09ORV8xMgkxMworKyNkZWZpbmUgUExVU19PTkVfMTMJMTQKKysjZGVmaW5lIFBMVVNfT05FXzE0CTE1CisrI2RlZmluZSBQTFVTX09ORV8xNQkxNgorKyNkZWZpbmUgUExVU19PTkUoeCkJUExVU19PTkVfICMjIHgKKysjZGVmaW5lIF9DT05DQVQzKGEsYixjKQlhICMjIGIgIyMgYworKyNkZWZpbmUgQ09OQ0FUMyhhLGIsYykJX0NPTkNBVDMoYSxiLGMpCisrCisrI2RlZmluZSBTVE9SRV9VTkFMSUdORUQoeCkgXAorK0NPTkNBVDMoLkxjaGFjaGEyMF9taXBzX3hvcl91bmFsaWduZWRfLCBQTFVTX09ORSh4KSwgX2I6IDspIFwKKysJLmlmICh4ICE9IDEyKTsgXAorKwkJbHcJVDAsICh4KjQpKFNUQVRFKTsgXAorKwkuZW5kaWY7IFwKKysJbHdsCVQxLCAoeCo0KStNU0IgIyMgKElOKTsgXAorKwlsd3IJVDEsICh4KjQpK0xTQiAjIyAoSU4pOyBcCisrCS5pZiAoeCA9PSAxMik7IFwKKysJCWFkZHUJWCAjIyB4LCBOT05DRV8wOyBcCisrCS5lbHNlOyBcCisrCQlhZGR1CVggIyMgeCwgVDA7IFwKKysJLmVuZGlmOyBcCisrCUNQVV9UT19MRTMyKFggIyMgeCk7IFwKKysJeG9yCVggIyMgeCwgVDE7IFwKKysJc3dsCVggIyMgeCwgKHgqNCkrTVNCICMjIChPVVQpOyBcCisrCXN3cglYICMjIHgsICh4KjQpK0xTQiAjIyAoT1VUKTsKKysKKysjZGVmaW5lIFNUT1JFX0FMSUdORUQoeCkgXAorK0NPTkNBVDMoLkxjaGFjaGEyMF9taXBzX3hvcl9hbGlnbmVkXywgUExVU19PTkUoeCksIF9iOiA7KSBcCisrCS5pZiAoeCAhPSAxMik7IFwKKysJCWx3CVQwLCAoeCo0KShTVEFURSk7IFwKKysJLmVuZGlmOyBcCisrCWx3CVQxLCAoeCo0KSAjIyAoSU4pOyBcCisrCS5pZiAoeCA9PSAxMik7IFwKKysJCWFkZHUJWCAjIyB4LCBOT05DRV8wOyBcCisrCS5lbHNlOyBcCisrCQlhZGR1CVggIyMgeCwgVDA7IFwKKysJLmVuZGlmOyBcCisrCUNQVV9UT19MRTMyKFggIyMgeCk7IFwKKysJeG9yCVggIyMgeCwgVDE7IFwKKysJc3cJWCAjIyB4LCAoeCo0KSAjIyAoT1VUKTsKKysKKysvKiBKdW1wIHRhYmxlIG1hY3JvLgorKyAqIFVzZWQgZm9yIHNldHVwIGFuZCBoYW5kbGluZyB0aGUgbGFzdCBieXRlcywgd2hpY2ggYXJlIG5vdCBtdWx0aXBsZSBvZiA0LgorKyAqIFgxNSBpcyBmcmVlIHRvIHN0b3JlIFhuCisrICogRXZlcnkganVtcHRhYmxlIGVudHJ5IG11c3QgYmUgZXF1YWwgaW4gc2l6ZS4KKysgKi8KKysjZGVmaW5lIEpNUFRCTF9BTElHTkVEKHgpIFwKKysuTGNoYWNoYTIwX21pcHNfam1wdGJsX2FsaWduZWRfICMjIHg6IDsgXAorKwkuc2V0CW5vcmVvcmRlcjsgXAorKwliCS5MY2hhY2hhMjBfbWlwc194b3JfYWxpZ25lZF8gIyMgeCAjIyBfYjsgXAorKwkuaWYgKHggPT0gMTIpOyBcCisrCQlhZGR1CVNBVkVEX1gsIFggIyMgeCwgTk9OQ0VfMDsgXAorKwkuZWxzZTsgXAorKwkJYWRkdQlTQVZFRF9YLCBYICMjIHgsIFNBVkVEX0NBOyBcCisrCS5lbmRpZjsgXAorKwkuc2V0CXJlb3JkZXIKKysKKysjZGVmaW5lIEpNUFRCTF9VTkFMSUdORUQoeCkgXAorKy5MY2hhY2hhMjBfbWlwc19qbXB0YmxfdW5hbGlnbmVkXyAjIyB4OiA7IFwKKysJLnNldAlub3Jlb3JkZXI7IFwKKysJYgkuTGNoYWNoYTIwX21pcHNfeG9yX3VuYWxpZ25lZF8gIyMgeCAjIyBfYjsgXAorKwkuaWYgKHggPT0gMTIpOyBcCisrCQlhZGR1CVNBVkVEX1gsIFggIyMgeCwgTk9OQ0VfMDsgXAorKwkuZWxzZTsgXAorKwkJYWRkdQlTQVZFRF9YLCBYICMjIHgsIFNBVkVEX0NBOyBcCisrCS5lbmRpZjsgXAorKwkuc2V0CXJlb3JkZXIKKysKKysjZGVmaW5lIEFYUihBLCBCLCBDLCBELCAgSywgTCwgTSwgTiwgIFYsIFcsIFksIFosICBTKSBcCisrCWFkZHUJWChBKSwgWChLKTsgXAorKwlhZGR1CVgoQiksIFgoTCk7IFwKKysJYWRkdQlYKEMpLCBYKE0pOyBcCisrCWFkZHUJWChEKSwgWChOKTsgXAorKwl4b3IJWChWKSwgWChBKTsgXAorKwl4b3IJWChXKSwgWChCKTsgXAorKwl4b3IJWChZKSwgWChDKTsgXAorKwl4b3IJWChaKSwgWChEKTsgXAorKwlyb3RsCVgoViksIFM7ICAgIFwKKysJcm90bAlYKFcpLCBTOyAgICBcCisrCXJvdGwJWChZKSwgUzsgICAgXAorKwlyb3RsCVgoWiksIFM7CisrCisrLnRleHQKKysuc2V0CXJlb3JkZXIKKysuc2V0CW5vYXQKKysuZ2xvYmwJY2hhY2hhMjBfbWlwcworKy5lbnQJY2hhY2hhMjBfbWlwcworK2NoYWNoYTIwX21pcHM6CisrCS5mcmFtZQkkc3AsIFNUQUNLX1NJWkUsICRyYQorKworKwlhZGRpdQkkc3AsIC1TVEFDS19TSVpFCisrCisrCS8qIFJldHVybiBieXRlcyA9IDAuICovCisrCWJlcXoJQllURVMsIC5MY2hhY2hhMjBfbWlwc19lbmQKKysKKysJbHcJTk9OQ0VfMCwgNDgoU1RBVEUpCisrCisrCS8qIFNhdmUgczAtczcgKi8KKysJc3cJJHMwLCAgMCgkc3ApCisrCXN3CSRzMSwgIDQoJHNwKQorKwlzdwkkczIsICA4KCRzcCkKKysJc3cJJHMzLCAxMigkc3ApCisrCXN3CSRzNCwgMTYoJHNwKQorKwlzdwkkczUsIDIwKCRzcCkKKysJc3cJJHM2LCAyNCgkc3ApCisrCXN3CSRzNywgMjgoJHNwKQorKworKwkvKiBUZXN0IElOIG9yIE9VVCBpcyB1bmFsaWduZWQuCisrCSAqIElTX1VOQUxJR05FRCA9ICggSU4gfCBPVVQgKSAmIDB4MDAwMDAwMDMKKysJICovCisrCW9yCUlTX1VOQUxJR05FRCwgSU4sIE9VVAorKwlhbmRpCUlTX1VOQUxJR05FRCwgMHgzCisrCisrCS8qIFNldCBudW1iZXIgb2Ygcm91bmRzICovCisrCWxpCSRhdCwgMjAKKysKKysJYgkuTGNoYWNoYTIwX3JvdW5kc19zdGFydAorKworKy5hbGlnbiA0CisrLkxvb3BfY2hhY2hhMjBfcm91bmRzOgorKwlhZGRpdQlJTiwgIENIQUNIQTIwX0JMT0NLX1NJWkUKKysJYWRkaXUJT1VULCBDSEFDSEEyMF9CTE9DS19TSVpFCisrCWFkZGl1CU5PTkNFXzAsIDEKKysKKysuTGNoYWNoYTIwX3JvdW5kc19zdGFydDoKKysJbHcJWDAsICAwKFNUQVRFKQorKwlsdwlYMSwgIDQoU1RBVEUpCisrCWx3CVgyLCAgOChTVEFURSkKKysJbHcJWDMsICAxMihTVEFURSkKKysKKysJbHcJWDQsICAxNihTVEFURSkKKysJbHcJWDUsICAyMChTVEFURSkKKysJbHcJWDYsICAyNChTVEFURSkKKysJbHcJWDcsICAyOChTVEFURSkKKysJbHcJWDgsICAzMihTVEFURSkKKysJbHcJWDksICAzNihTVEFURSkKKysJbHcJWDEwLCA0MChTVEFURSkKKysJbHcJWDExLCA0NChTVEFURSkKKysKKysJbW92ZQlYMTIsIE5PTkNFXzAKKysJbHcJWDEzLCA1MihTVEFURSkKKysJbHcJWDE0LCA1NihTVEFURSkKKysJbHcJWDE1LCA2MChTVEFURSkKKysKKysuTG9vcF9jaGFjaGEyMF94b3Jfcm91bmRzOgorKwlhZGRpdQkkYXQsIC0yCisrCUFYUiggMCwgMSwgMiwgMywgIDQsIDUsIDYsIDcsIDEyLDEzLDE0LDE1LCAxNik7CisrCUFYUiggOCwgOSwxMCwxMSwgMTIsMTMsMTQsMTUsICA0LCA1LCA2LCA3LCAxMik7CisrCUFYUiggMCwgMSwgMiwgMywgIDQsIDUsIDYsIDcsIDEyLDEzLDE0LDE1LCAgOCk7CisrCUFYUiggOCwgOSwxMCwxMSwgMTIsMTMsMTQsMTUsICA0LCA1LCA2LCA3LCAgNyk7CisrCUFYUiggMCwgMSwgMiwgMywgIDUsIDYsIDcsIDQsIDE1LDEyLDEzLDE0LCAxNik7CisrCUFYUigxMCwxMSwgOCwgOSwgMTUsMTIsMTMsMTQsICA1LCA2LCA3LCA0LCAxMik7CisrCUFYUiggMCwgMSwgMiwgMywgIDUsIDYsIDcsIDQsIDE1LDEyLDEzLDE0LCAgOCk7CisrCUFYUigxMCwxMSwgOCwgOSwgMTUsMTIsMTMsMTQsICA1LCA2LCA3LCA0LCAgNyk7CisrCWJuZXoJJGF0LCAuTG9vcF9jaGFjaGEyMF94b3Jfcm91bmRzCisrCisrCWFkZGl1CUJZVEVTLCAtKENIQUNIQTIwX0JMT0NLX1NJWkUpCisrCisrCS8qIElzIGRhdGEgc3JjL2RzdCB1bmFsaWduZWQ/IEp1bXAgKi8KKysJYm5leglJU19VTkFMSUdORUQsIC5Mb29wX2NoYWNoYTIwX3VuYWxpZ25lZAorKworKwkvKiBTZXQgbnVtYmVyIHJvdW5kcyBoZXJlIHRvIGZpbGwgZGVsYXlzbG90LiAqLworKwlsaQkkYXQsIDIwCisrCisrCS8qIEJZVEVTIDwgMCwgaXQgaGFzIG5vIGZ1bGwgYmxvY2suICovCisrCWJsdHoJQllURVMsIC5MY2hhY2hhMjBfbWlwc19ub19mdWxsX2Jsb2NrX2FsaWduZWQKKysKKysJRk9SX0VBQ0hfV09SRF9SRVYoU1RPUkVfQUxJR05FRCkKKysKKysJLyogQllURVMgPiAwPyBMb29wIGFnYWluLiAqLworKwliZ3R6CUJZVEVTLCAuTG9vcF9jaGFjaGEyMF9yb3VuZHMKKysKKysJLyogUGxhY2UgdGhpcyBoZXJlIHRvIGZpbGwgZGVsYXkgc2xvdCAqLworKwlhZGRpdQlOT05DRV8wLCAxCisrCisrCS8qIEJZVEVTIDwgMD8gSGFuZGxlIGxhc3QgYnl0ZXMgKi8KKysJYmx0eglCWVRFUywgLkxjaGFjaGEyMF9taXBzX3hvcl9ieXRlcworKworKy5MY2hhY2hhMjBfbWlwc194b3JfZG9uZToKKysJLyogUmVzdG9yZSB1c2VkIHJlZ2lzdGVycyAqLworKwlsdwkkczAsICAwKCRzcCkKKysJbHcJJHMxLCAgNCgkc3ApCisrCWx3CSRzMiwgIDgoJHNwKQorKwlsdwkkczMsIDEyKCRzcCkKKysJbHcJJHM0LCAxNigkc3ApCisrCWx3CSRzNSwgMjAoJHNwKQorKwlsdwkkczYsIDI0KCRzcCkKKysJbHcJJHM3LCAyOCgkc3ApCisrCisrCS8qIFdyaXRlIE5PTkNFXzAgYmFjayB0byByaWdodCBsb2NhdGlvbiBpbiBzdGF0ZSAqLworKwlzdwlOT05DRV8wLCA0OChTVEFURSkKKysKKysuTGNoYWNoYTIwX21pcHNfZW5kOgorKwlhZGRpdQkkc3AsIFNUQUNLX1NJWkUKKysJanIJJHJhCisrCisrLkxjaGFjaGEyMF9taXBzX25vX2Z1bGxfYmxvY2tfYWxpZ25lZDoKKysJLyogUmVzdG9yZSB0aGUgb2Zmc2V0IG9uIEJZVEVTICovCisrCWFkZGl1CUJZVEVTLCBDSEFDSEEyMF9CTE9DS19TSVpFCisrCisrCS8qIEdldCBudW1iZXIgb2YgZnVsbCBXT1JEUyAqLworKwlhbmRpCSRhdCwgQllURVMsIE1BU0tfVTMyCisrCisrCS8qIExvYWQgdXBwZXIgaGFsZiBvZiBqdW1wIHRhYmxlIGFkZHIgKi8KKysJbHVpCVQwLCAlaGkoLkxjaGFjaGEyMF9taXBzX2ptcHRibF9hbGlnbmVkXzApCisrCisrCS8qIENhbGN1bGF0ZSBsb3dlciBoYWxmIGp1bXAgdGFibGUgb2Zmc2V0ICovCisrCWlucwlUMCwgJGF0LCAxLCA2CisrCisrCS8qIEFkZCBvZmZzZXQgdG8gU1RBVEUgKi8KKysJYWRkdQlUMSwgU1RBVEUsICRhdAorKworKwkvKiBBZGQgbG93ZXIgaGFsZiBqdW1wIHRhYmxlIGFkZHIgKi8KKysJYWRkaXUJVDAsICVsbyguTGNoYWNoYTIwX21pcHNfam1wdGJsX2FsaWduZWRfMCkKKysKKysJLyogUmVhZCB2YWx1ZSBmcm9tIFNUQVRFICovCisrCWx3CVNBVkVEX0NBLCAwKFQxKQorKworKwkvKiBTdG9yZSByZW1haW5pbmcgYnl0ZWNvdW50ZXIgYXMgbmVnYXRpdmUgdmFsdWUgKi8KKysJc3VidQlCWVRFUywgJGF0LCBCWVRFUworKworKwlqcglUMAorKworKwkvKiBKdW1wIHRhYmxlICovCisrCUZPUl9FQUNIX1dPUkQoSk1QVEJMX0FMSUdORUQpCisrCisrCisrLkxvb3BfY2hhY2hhMjBfdW5hbGlnbmVkOgorKwkvKiBTZXQgbnVtYmVyIHJvdW5kcyBoZXJlIHRvIGZpbGwgZGVsYXlzbG90LiAqLworKwlsaQkkYXQsIDIwCisrCisrCS8qIEJZVEVTID4gMCwgaXQgaGFzIG5vIGZ1bGwgYmxvY2suICovCisrCWJsdHoJQllURVMsIC5MY2hhY2hhMjBfbWlwc19ub19mdWxsX2Jsb2NrX3VuYWxpZ25lZAorKworKwlGT1JfRUFDSF9XT1JEX1JFVihTVE9SRV9VTkFMSUdORUQpCisrCisrCS8qIEJZVEVTID4gMD8gTG9vcCBhZ2Fpbi4gKi8KKysJYmd0eglCWVRFUywgLkxvb3BfY2hhY2hhMjBfcm91bmRzCisrCisrCS8qIFdyaXRlIE5PTkNFXzAgYmFjayB0byByaWdodCBsb2NhdGlvbiBpbiBzdGF0ZSAqLworKwlzdwlOT05DRV8wLCA0OChTVEFURSkKKysKKysJLnNldCBub3Jlb3JkZXIKKysJLyogRmFsbCB0aHJvdWdoIHRvIGJ5dGUgaGFuZGxpbmcgKi8KKysJYmdleglCWVRFUywgLkxjaGFjaGEyMF9taXBzX3hvcl9kb25lCisrLkxjaGFjaGEyMF9taXBzX3hvcl91bmFsaWduZWRfMF9iOgorKy5MY2hhY2hhMjBfbWlwc194b3JfYWxpZ25lZF8wX2I6CisrCS8qIFBsYWNlIHRoaXMgaGVyZSB0byBmaWxsIGRlbGF5IHNsb3QgKi8KKysJYWRkaXUJTk9OQ0VfMCwgMQorKwkuc2V0IHJlb3JkZXIKKysKKysuTGNoYWNoYTIwX21pcHNfeG9yX2J5dGVzOgorKwlhZGR1CUlOLCAkYXQKKysJYWRkdQlPVVQsICRhdAorKwkvKiBGaXJzdCBieXRlICovCisrCWxidQlUMSwgMChJTikKKysJYWRkaXUJJGF0LCBCWVRFUywgMQorKwlDUFVfVE9fTEUzMihTQVZFRF9YKQorKwlST1RSKFNBVkVEX1gpCisrCXhvcglUMSwgU0FWRURfWAorKwlzYglUMSwgMChPVVQpCisrCWJlcXoJJGF0LCAuTGNoYWNoYTIwX21pcHNfeG9yX2RvbmUKKysJLyogU2Vjb25kIGJ5dGUgKi8KKysJbGJ1CVQxLCAxKElOKQorKwlhZGRpdQkkYXQsIEJZVEVTLCAyCisrCVJPVHgJU0FWRURfWCwgOAorKwl4b3IJVDEsIFNBVkVEX1gKKysJc2IJVDEsIDEoT1VUKQorKwliZXF6CSRhdCwgLkxjaGFjaGEyMF9taXBzX3hvcl9kb25lCisrCS8qIFRoaXJkIGJ5dGUgKi8KKysJbGJ1CVQxLCAyKElOKQorKwlST1R4CVNBVkVEX1gsIDgKKysJeG9yCVQxLCBTQVZFRF9YCisrCXNiCVQxLCAyKE9VVCkKKysJYgkuTGNoYWNoYTIwX21pcHNfeG9yX2RvbmUKKysKKysuTGNoYWNoYTIwX21pcHNfbm9fZnVsbF9ibG9ja191bmFsaWduZWQ6CisrCS8qIFJlc3RvcmUgdGhlIG9mZnNldCBvbiBCWVRFUyAqLworKwlhZGRpdQlCWVRFUywgQ0hBQ0hBMjBfQkxPQ0tfU0laRQorKworKwkvKiBHZXQgbnVtYmVyIG9mIGZ1bGwgV09SRFMgKi8KKysJYW5kaQkkYXQsIEJZVEVTLCBNQVNLX1UzMgorKworKwkvKiBMb2FkIHVwcGVyIGhhbGYgb2YganVtcCB0YWJsZSBhZGRyICovCisrCWx1aQlUMCwgJWhpKC5MY2hhY2hhMjBfbWlwc19qbXB0YmxfdW5hbGlnbmVkXzApCisrCisrCS8qIENhbGN1bGF0ZSBsb3dlciBoYWxmIGp1bXAgdGFibGUgb2Zmc2V0ICovCisrCWlucwlUMCwgJGF0LCAxLCA2CisrCisrCS8qIEFkZCBvZmZzZXQgdG8gU1RBVEUgKi8KKysJYWRkdQlUMSwgU1RBVEUsICRhdAorKworKwkvKiBBZGQgbG93ZXIgaGFsZiBqdW1wIHRhYmxlIGFkZHIgKi8KKysJYWRkaXUJVDAsICVsbyguTGNoYWNoYTIwX21pcHNfam1wdGJsX3VuYWxpZ25lZF8wKQorKworKwkvKiBSZWFkIHZhbHVlIGZyb20gU1RBVEUgKi8KKysJbHcJU0FWRURfQ0EsIDAoVDEpCisrCisrCS8qIFN0b3JlIHJlbWFpbmluZyBieXRlY291bnRlciBhcyBuZWdhdGl2ZSB2YWx1ZSAqLworKwlzdWJ1CUJZVEVTLCAkYXQsIEJZVEVTCisrCisrCWpyCVQwCisrCisrCS8qIEp1bXAgdGFibGUgKi8KKysJRk9SX0VBQ0hfV09SRChKTVBUQkxfVU5BTElHTkVEKQorKy5lbmQgY2hhY2hhMjBfbWlwcworKy5zZXQgYXQKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMTEtY3J5cHRvLW1pcHMtY2hhY2hhLXdpcmUtdXAtYWNjZWxlcmF0ZWQtMzJyMi1jb2RlLWZyby5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMTEtY3J5cHRvLW1pcHMtY2hhY2hhLXdpcmUtdXAtYWNjZWxlcmF0ZWQtMzJyMi1jb2RlLWZyby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDI0Y2UyCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAxMS1jcnlwdG8tbWlwcy1jaGFjaGEtd2lyZS11cC1hY2NlbGVyYXRlZC0zMnIyLWNvZGUtZnJvLnBhdGNoCkBAIC0wLDAgKzEsNTU5IEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgorRGF0ZTogRnJpLCA4IE5vdiAyMDE5IDEzOjIyOjE3ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyeXB0bzogbWlwcy9jaGFjaGEgLSB3aXJlIHVwIGFjY2VsZXJhdGVkIDMycjIgY29kZSBmcm9tIFppbmMKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworY29tbWl0IDNhMmY1OGYzYmE0ZjZmNDRlMzNkMWE0ODI0MGQ1ZWFkYjg4MmNiNTkgdXBzdHJlYW0uCisKK1RoaXMgaW50ZWdyYXRlcyB0aGUgYWNjZWxlcmF0ZWQgTUlQUyAzMnIyIGltcGxlbWVudGF0aW9uIG9mIENoYUNoYQoraW50byBib3RoIHRoZSBBUEkgYW5kIGxpYnJhcnkgaW50ZXJmYWNlcyBvZiB0aGUga2VybmVsIGNyeXB0byBzdGFjay4KKworVGhlIHNpZ25pZmljYW5jZSBvZiB0aGlzIGlzIHRoYXQsIGluIGFkZGl0aW9uIHRvIGJlY29taW5nIGF2YWlsYWJsZQorYXMgYW4gYWNjZWxlcmF0ZWQgbGlicmFyeSBpbXBsZW1lbnRhdGlvbiwgaXQgY2FuIGFsc28gYmUgdXNlZCBieQorZXhpc3RpbmcgY3J5cHRvIEFQSSBjb2RlIHN1Y2ggYXMgQWRpYW50dW0gKGZvciBibG9jayBlbmNyeXB0aW9uIG9uCit1bHRyYSBsb3cgcGVyZm9ybWFuY2UgY29yZXMpIG9yIElQc2VjIHVzaW5nIGNoYWNoYTIwcG9seTEzMDUuIFRoZXNlCithcmUgdXNlIGNhc2VzIHRoYXQgaGF2ZSBhbHJlYWR5IG9wdGVkIGludG8gdXNpbmcgdGhlIGFic3RyYWN0IGNyeXB0bworQVBJLiBJbiBvcmRlciB0byBzdXBwb3J0IEFkaWFudHVtLCB0aGUgY29yZSBhc3NlbWJsZXIgcm91dGluZSBoYXMKK2JlZW4gYWRhcHRlZCB0byB0YWtlIHRoZSByb3VuZCBjb3VudCBhcyBhIGZ1bmN0aW9uIGFyZ3VtZW50IHJhdGhlcgordGhhbiBoYXJkY29kaW5nIGl0IHRvIDIwLgorCitDby1kZXZlbG9wZWQtYnk6IFJlbsOpIHZhbiBEb3JzdCA8b3BlbnNvdXJjZUB2ZG9yc3QuY29tPgorU2lnbmVkLW9mZi1ieTogUmVuw6kgdmFuIERvcnN0IDxvcGVuc291cmNlQHZkb3JzdC5jb20+CitTaWduZWQtb2ZmLWJ5OiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgorU2lnbmVkLW9mZi1ieTogSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBhcmNoL21pcHMvTWFrZWZpbGUgICAgICAgICAgICAgfCAgIDIgKy0KKyBhcmNoL21pcHMvY3J5cHRvL01ha2VmaWxlICAgICAgfCAgIDQgKworIGFyY2gvbWlwcy9jcnlwdG8vY2hhY2hhLWNvcmUuUyB8IDE1OSArKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0KKyBhcmNoL21pcHMvY3J5cHRvL2NoYWNoYS1nbHVlLmMgfCAxNTAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIGNyeXB0by9LY29uZmlnICAgICAgICAgICAgICAgICB8ICAgNiArKworIDUgZmlsZXMgY2hhbmdlZCwgMjc3IGluc2VydGlvbnMoKyksIDQ0IGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBhcmNoL21pcHMvY3J5cHRvL2NoYWNoYS1nbHVlLmMKKworLS0tIGEvYXJjaC9taXBzL01ha2VmaWxlCisrKysgYi9hcmNoL21pcHMvTWFrZWZpbGUKK0BAIC0zMzQsNyArMzM0LDcgQEAgbGlicy0kKENPTkZJR19NSVBTX0ZQX1NVUFBPUlQpICs9IGFyY2gvbQorICMgU2VlIGFyY2gvbWlwcy9LYnVpbGQgZm9yIGNvbnRlbnQgb2YgY29yZSBwYXJ0IG9mIHRoZSBrZXJuZWwKKyBjb3JlLXkgKz0gYXJjaC9taXBzLworIAorLWRyaXZlcnMtJChDT05GSUdfTUlQU19DUkNfU1VQUE9SVCkgKz0gYXJjaC9taXBzL2NyeXB0by8KKytkcml2ZXJzLXkJCQkrPSBhcmNoL21pcHMvY3J5cHRvLworIGRyaXZlcnMtJChDT05GSUdfT1BST0ZJTEUpCSs9IGFyY2gvbWlwcy9vcHJvZmlsZS8KKyAKKyAjIHN1c3BlbmQgYW5kIGhpYmVybmF0aW9uIHN1cHBvcnQKKy0tLSBhL2FyY2gvbWlwcy9jcnlwdG8vTWFrZWZpbGUKKysrKyBiL2FyY2gvbWlwcy9jcnlwdG8vTWFrZWZpbGUKK0BAIC00LDMgKzQsNyBAQAorICMKKyAKKyBvYmotJChDT05GSUdfQ1JZUFRPX0NSQzMyX01JUFMpICs9IGNyYzMyLW1pcHMubworKworK29iai0kKENPTkZJR19DUllQVE9fQ0hBQ0hBX01JUFMpICs9IGNoYWNoYS1taXBzLm8KKytjaGFjaGEtbWlwcy15IDo9IGNoYWNoYS1jb3JlLm8gY2hhY2hhLWdsdWUubworK0FGTEFHU19jaGFjaGEtY29yZS5vICs9IC1PMiAjIG5lZWRlZCB0byBmaWxsIGJyYW5jaCBkZWxheSBzbG90cworLS0tIGEvYXJjaC9taXBzL2NyeXB0by9jaGFjaGEtY29yZS5TCisrKysgYi9hcmNoL21pcHMvY3J5cHRvL2NoYWNoYS1jb3JlLlMKK0BAIC0xMjUsNyArMTI1LDcgQEAKKyAjZGVmaW5lIENPTkNBVDMoYSxiLGMpCV9DT05DQVQzKGEsYixjKQorIAorICNkZWZpbmUgU1RPUkVfVU5BTElHTkVEKHgpIFwKKy1DT05DQVQzKC5MY2hhY2hhMjBfbWlwc194b3JfdW5hbGlnbmVkXywgUExVU19PTkUoeCksIF9iOiA7KSBcCisrQ09OQ0FUMyguTGNoYWNoYV9taXBzX3hvcl91bmFsaWduZWRfLCBQTFVTX09ORSh4KSwgX2I6IDspIFwKKyAJLmlmICh4ICE9IDEyKTsgXAorIAkJbHcJVDAsICh4KjQpKFNUQVRFKTsgXAorIAkuZW5kaWY7IFwKK0BAIC0xNDIsNyArMTQyLDcgQEAgQ09OQ0FUMyguTGNoYWNoYTIwX21pcHNfeG9yX3VuYWxpZ25lZF8sCisgCXN3cglYICMjIHgsICh4KjQpK0xTQiAjIyAoT1VUKTsKKyAKKyAjZGVmaW5lIFNUT1JFX0FMSUdORUQoeCkgXAorLUNPTkNBVDMoLkxjaGFjaGEyMF9taXBzX3hvcl9hbGlnbmVkXywgUExVU19PTkUoeCksIF9iOiA7KSBcCisrQ09OQ0FUMyguTGNoYWNoYV9taXBzX3hvcl9hbGlnbmVkXywgUExVU19PTkUoeCksIF9iOiA7KSBcCisgCS5pZiAoeCAhPSAxMik7IFwKKyAJCWx3CVQwLCAoeCo0KShTVEFURSk7IFwKKyAJLmVuZGlmOyBcCitAQCAtMTYyLDkgKzE2Miw5IEBAIENPTkNBVDMoLkxjaGFjaGEyMF9taXBzX3hvcl9hbGlnbmVkXywgUEwKKyAgKiBFdmVyeSBqdW1wdGFibGUgZW50cnkgbXVzdCBiZSBlcXVhbCBpbiBzaXplLgorICAqLworICNkZWZpbmUgSk1QVEJMX0FMSUdORUQoeCkgXAorLS5MY2hhY2hhMjBfbWlwc19qbXB0YmxfYWxpZ25lZF8gIyMgeDogOyBcCisrLkxjaGFjaGFfbWlwc19qbXB0YmxfYWxpZ25lZF8gIyMgeDogOyBcCisgCS5zZXQJbm9yZW9yZGVyOyBcCistCWIJLkxjaGFjaGEyMF9taXBzX3hvcl9hbGlnbmVkXyAjIyB4ICMjIF9iOyBcCisrCWIJLkxjaGFjaGFfbWlwc194b3JfYWxpZ25lZF8gIyMgeCAjIyBfYjsgXAorIAkuaWYgKHggPT0gMTIpOyBcCisgCQlhZGR1CVNBVkVEX1gsIFggIyMgeCwgTk9OQ0VfMDsgXAorIAkuZWxzZTsgXAorQEAgLTE3Myw5ICsxNzMsOSBAQCBDT05DQVQzKC5MY2hhY2hhMjBfbWlwc194b3JfYWxpZ25lZF8sIFBMCisgCS5zZXQJcmVvcmRlcgorIAorICNkZWZpbmUgSk1QVEJMX1VOQUxJR05FRCh4KSBcCistLkxjaGFjaGEyMF9taXBzX2ptcHRibF91bmFsaWduZWRfICMjIHg6IDsgXAorKy5MY2hhY2hhX21pcHNfam1wdGJsX3VuYWxpZ25lZF8gIyMgeDogOyBcCisgCS5zZXQJbm9yZW9yZGVyOyBcCistCWIJLkxjaGFjaGEyMF9taXBzX3hvcl91bmFsaWduZWRfICMjIHggIyMgX2I7IFwKKysJYgkuTGNoYWNoYV9taXBzX3hvcl91bmFsaWduZWRfICMjIHggIyMgX2I7IFwKKyAJLmlmICh4ID09IDEyKTsgXAorIAkJYWRkdQlTQVZFRF9YLCBYICMjIHgsIE5PTkNFXzA7IFwKKyAJLmVsc2U7IFwKK0BAIC0yMDAsMTUgKzIwMCwxOCBAQCBDT05DQVQzKC5MY2hhY2hhMjBfbWlwc194b3JfYWxpZ25lZF8sIFBMCisgLnRleHQKKyAuc2V0CXJlb3JkZXIKKyAuc2V0CW5vYXQKKy0uZ2xvYmwJY2hhY2hhMjBfbWlwcworLS5lbnQJY2hhY2hhMjBfbWlwcworLWNoYWNoYTIwX21pcHM6CisrLmdsb2JsCWNoYWNoYV9jcnlwdF9hcmNoCisrLmVudAljaGFjaGFfY3J5cHRfYXJjaAorK2NoYWNoYV9jcnlwdF9hcmNoOgorIAkuZnJhbWUJJHNwLCBTVEFDS19TSVpFLCAkcmEKKyAKKysJLyogTG9hZCBudW1iZXIgb2Ygcm91bmRzICovCisrCWx3CSRhdCwgMTYoJHNwKQorKworIAlhZGRpdQkkc3AsIC1TVEFDS19TSVpFCisgCisgCS8qIFJldHVybiBieXRlcyA9IDAuICovCistCWJlcXoJQllURVMsIC5MY2hhY2hhMjBfbWlwc19lbmQKKysJYmVxeglCWVRFUywgLkxjaGFjaGFfbWlwc19lbmQKKyAKKyAJbHcJTk9OQ0VfMCwgNDgoU1RBVEUpCisgCitAQCAtMjI4LDE4ICsyMzEsMTUgQEAgY2hhY2hhMjBfbWlwczoKKyAJb3IJSVNfVU5BTElHTkVELCBJTiwgT1VUCisgCWFuZGkJSVNfVU5BTElHTkVELCAweDMKKyAKKy0JLyogU2V0IG51bWJlciBvZiByb3VuZHMgKi8KKy0JbGkJJGF0LCAyMAorLQorLQliCS5MY2hhY2hhMjBfcm91bmRzX3N0YXJ0CisrCWIJLkxjaGFjaGFfcm91bmRzX3N0YXJ0CisgCisgLmFsaWduIDQKKy0uTG9vcF9jaGFjaGEyMF9yb3VuZHM6CisrLkxvb3BfY2hhY2hhX3JvdW5kczoKKyAJYWRkaXUJSU4sICBDSEFDSEEyMF9CTE9DS19TSVpFCisgCWFkZGl1CU9VVCwgQ0hBQ0hBMjBfQkxPQ0tfU0laRQorIAlhZGRpdQlOT05DRV8wLCAxCisgCistLkxjaGFjaGEyMF9yb3VuZHNfc3RhcnQ6CisrLkxjaGFjaGFfcm91bmRzX3N0YXJ0OgorIAlsdwlYMCwgIDAoU1RBVEUpCisgCWx3CVgxLCAgNChTVEFURSkKKyAJbHcJWDIsICA4KFNUQVRFKQorQEAgLTI1OSw3ICsyNTksNyBAQCBjaGFjaGEyMF9taXBzOgorIAlsdwlYMTQsIDU2KFNUQVRFKQorIAlsdwlYMTUsIDYwKFNUQVRFKQorIAorLS5Mb29wX2NoYWNoYTIwX3hvcl9yb3VuZHM6CisrLkxvb3BfY2hhY2hhX3hvcl9yb3VuZHM6CisgCWFkZGl1CSRhdCwgLTIKKyAJQVhSKCAwLCAxLCAyLCAzLCAgNCwgNSwgNiwgNywgMTIsMTMsMTQsMTUsIDE2KTsKKyAJQVhSKCA4LCA5LDEwLDExLCAxMiwxMywxNCwxNSwgIDQsIDUsIDYsIDcsIDEyKTsKK0BAIC0yNjksMzEgKzI2OSwzMSBAQCBjaGFjaGEyMF9taXBzOgorIAlBWFIoMTAsMTEsIDgsIDksIDE1LDEyLDEzLDE0LCAgNSwgNiwgNywgNCwgMTIpOworIAlBWFIoIDAsIDEsIDIsIDMsICA1LCA2LCA3LCA0LCAxNSwxMiwxMywxNCwgIDgpOworIAlBWFIoMTAsMTEsIDgsIDksIDE1LDEyLDEzLDE0LCAgNSwgNiwgNywgNCwgIDcpOworLQlibmV6CSRhdCwgLkxvb3BfY2hhY2hhMjBfeG9yX3JvdW5kcworKwlibmV6CSRhdCwgLkxvb3BfY2hhY2hhX3hvcl9yb3VuZHMKKyAKKyAJYWRkaXUJQllURVMsIC0oQ0hBQ0hBMjBfQkxPQ0tfU0laRSkKKyAKKyAJLyogSXMgZGF0YSBzcmMvZHN0IHVuYWxpZ25lZD8gSnVtcCAqLworLQlibmV6CUlTX1VOQUxJR05FRCwgLkxvb3BfY2hhY2hhMjBfdW5hbGlnbmVkCisrCWJuZXoJSVNfVU5BTElHTkVELCAuTG9vcF9jaGFjaGFfdW5hbGlnbmVkCisgCisgCS8qIFNldCBudW1iZXIgcm91bmRzIGhlcmUgdG8gZmlsbCBkZWxheXNsb3QuICovCistCWxpCSRhdCwgMjAKKysJbHcJJGF0LCAoU1RBQ0tfU0laRSsxNikoJHNwKQorIAorIAkvKiBCWVRFUyA8IDAsIGl0IGhhcyBubyBmdWxsIGJsb2NrLiAqLworLQlibHR6CUJZVEVTLCAuTGNoYWNoYTIwX21pcHNfbm9fZnVsbF9ibG9ja19hbGlnbmVkCisrCWJsdHoJQllURVMsIC5MY2hhY2hhX21pcHNfbm9fZnVsbF9ibG9ja19hbGlnbmVkCisgCisgCUZPUl9FQUNIX1dPUkRfUkVWKFNUT1JFX0FMSUdORUQpCisgCisgCS8qIEJZVEVTID4gMD8gTG9vcCBhZ2Fpbi4gKi8KKy0JYmd0eglCWVRFUywgLkxvb3BfY2hhY2hhMjBfcm91bmRzCisrCWJndHoJQllURVMsIC5Mb29wX2NoYWNoYV9yb3VuZHMKKyAKKyAJLyogUGxhY2UgdGhpcyBoZXJlIHRvIGZpbGwgZGVsYXkgc2xvdCAqLworIAlhZGRpdQlOT05DRV8wLCAxCisgCisgCS8qIEJZVEVTIDwgMD8gSGFuZGxlIGxhc3QgYnl0ZXMgKi8KKy0JYmx0eglCWVRFUywgLkxjaGFjaGEyMF9taXBzX3hvcl9ieXRlcworKwlibHR6CUJZVEVTLCAuTGNoYWNoYV9taXBzX3hvcl9ieXRlcworIAorLS5MY2hhY2hhMjBfbWlwc194b3JfZG9uZToKKysuTGNoYWNoYV9taXBzX3hvcl9kb25lOgorIAkvKiBSZXN0b3JlIHVzZWQgcmVnaXN0ZXJzICovCisgCWx3CSRzMCwgIDAoJHNwKQorIAlsdwkkczEsICA0KCRzcCkKK0BAIC0zMDcsMTEgKzMwNywxMSBAQCBjaGFjaGEyMF9taXBzOgorIAkvKiBXcml0ZSBOT05DRV8wIGJhY2sgdG8gcmlnaHQgbG9jYXRpb24gaW4gc3RhdGUgKi8KKyAJc3cJTk9OQ0VfMCwgNDgoU1RBVEUpCisgCistLkxjaGFjaGEyMF9taXBzX2VuZDoKKysuTGNoYWNoYV9taXBzX2VuZDoKKyAJYWRkaXUJJHNwLCBTVEFDS19TSVpFCisgCWpyCSRyYQorIAorLS5MY2hhY2hhMjBfbWlwc19ub19mdWxsX2Jsb2NrX2FsaWduZWQ6CisrLkxjaGFjaGFfbWlwc19ub19mdWxsX2Jsb2NrX2FsaWduZWQ6CisgCS8qIFJlc3RvcmUgdGhlIG9mZnNldCBvbiBCWVRFUyAqLworIAlhZGRpdQlCWVRFUywgQ0hBQ0hBMjBfQkxPQ0tfU0laRQorIAorQEAgLTMxOSw3ICszMTksNyBAQCBjaGFjaGEyMF9taXBzOgorIAlhbmRpCSRhdCwgQllURVMsIE1BU0tfVTMyCisgCisgCS8qIExvYWQgdXBwZXIgaGFsZiBvZiBqdW1wIHRhYmxlIGFkZHIgKi8KKy0JbHVpCVQwLCAlaGkoLkxjaGFjaGEyMF9taXBzX2ptcHRibF9hbGlnbmVkXzApCisrCWx1aQlUMCwgJWhpKC5MY2hhY2hhX21pcHNfam1wdGJsX2FsaWduZWRfMCkKKyAKKyAJLyogQ2FsY3VsYXRlIGxvd2VyIGhhbGYganVtcCB0YWJsZSBvZmZzZXQgKi8KKyAJaW5zCVQwLCAkYXQsIDEsIDYKK0BAIC0zMjgsNyArMzI4LDcgQEAgY2hhY2hhMjBfbWlwczoKKyAJYWRkdQlUMSwgU1RBVEUsICRhdAorIAorIAkvKiBBZGQgbG93ZXIgaGFsZiBqdW1wIHRhYmxlIGFkZHIgKi8KKy0JYWRkaXUJVDAsICVsbyguTGNoYWNoYTIwX21pcHNfam1wdGJsX2FsaWduZWRfMCkKKysJYWRkaXUJVDAsICVsbyguTGNoYWNoYV9taXBzX2ptcHRibF9hbGlnbmVkXzApCisgCisgCS8qIFJlYWQgdmFsdWUgZnJvbSBTVEFURSAqLworIAlsdwlTQVZFRF9DQSwgMChUMSkKK0BAIC0zNDIsMzEgKzM0MiwzMSBAQCBjaGFjaGEyMF9taXBzOgorIAlGT1JfRUFDSF9XT1JEKEpNUFRCTF9BTElHTkVEKQorIAorIAorLS5Mb29wX2NoYWNoYTIwX3VuYWxpZ25lZDoKKysuTG9vcF9jaGFjaGFfdW5hbGlnbmVkOgorIAkvKiBTZXQgbnVtYmVyIHJvdW5kcyBoZXJlIHRvIGZpbGwgZGVsYXlzbG90LiAqLworLQlsaQkkYXQsIDIwCisrCWx3CSRhdCwgKFNUQUNLX1NJWkUrMTYpKCRzcCkKKyAKKyAJLyogQllURVMgPiAwLCBpdCBoYXMgbm8gZnVsbCBibG9jay4gKi8KKy0JYmx0eglCWVRFUywgLkxjaGFjaGEyMF9taXBzX25vX2Z1bGxfYmxvY2tfdW5hbGlnbmVkCisrCWJsdHoJQllURVMsIC5MY2hhY2hhX21pcHNfbm9fZnVsbF9ibG9ja191bmFsaWduZWQKKyAKKyAJRk9SX0VBQ0hfV09SRF9SRVYoU1RPUkVfVU5BTElHTkVEKQorIAorIAkvKiBCWVRFUyA+IDA/IExvb3AgYWdhaW4uICovCistCWJndHoJQllURVMsIC5Mb29wX2NoYWNoYTIwX3JvdW5kcworKwliZ3R6CUJZVEVTLCAuTG9vcF9jaGFjaGFfcm91bmRzCisgCisgCS8qIFdyaXRlIE5PTkNFXzAgYmFjayB0byByaWdodCBsb2NhdGlvbiBpbiBzdGF0ZSAqLworIAlzdwlOT05DRV8wLCA0OChTVEFURSkKKyAKKyAJLnNldCBub3Jlb3JkZXIKKyAJLyogRmFsbCB0aHJvdWdoIHRvIGJ5dGUgaGFuZGxpbmcgKi8KKy0JYmdleglCWVRFUywgLkxjaGFjaGEyMF9taXBzX3hvcl9kb25lCistLkxjaGFjaGEyMF9taXBzX3hvcl91bmFsaWduZWRfMF9iOgorLS5MY2hhY2hhMjBfbWlwc194b3JfYWxpZ25lZF8wX2I6CisrCWJnZXoJQllURVMsIC5MY2hhY2hhX21pcHNfeG9yX2RvbmUKKysuTGNoYWNoYV9taXBzX3hvcl91bmFsaWduZWRfMF9iOgorKy5MY2hhY2hhX21pcHNfeG9yX2FsaWduZWRfMF9iOgorIAkvKiBQbGFjZSB0aGlzIGhlcmUgdG8gZmlsbCBkZWxheSBzbG90ICovCisgCWFkZGl1CU5PTkNFXzAsIDEKKyAJLnNldCByZW9yZGVyCisgCistLkxjaGFjaGEyMF9taXBzX3hvcl9ieXRlczoKKysuTGNoYWNoYV9taXBzX3hvcl9ieXRlczoKKyAJYWRkdQlJTiwgJGF0CisgCWFkZHUJT1VULCAkYXQKKyAJLyogRmlyc3QgYnl0ZSAqLworQEAgLTM3NiwyMiArMzc2LDIyIEBAIGNoYWNoYTIwX21pcHM6CisgCVJPVFIoU0FWRURfWCkKKyAJeG9yCVQxLCBTQVZFRF9YCisgCXNiCVQxLCAwKE9VVCkKKy0JYmVxegkkYXQsIC5MY2hhY2hhMjBfbWlwc194b3JfZG9uZQorKwliZXF6CSRhdCwgLkxjaGFjaGFfbWlwc194b3JfZG9uZQorIAkvKiBTZWNvbmQgYnl0ZSAqLworIAlsYnUJVDEsIDEoSU4pCisgCWFkZGl1CSRhdCwgQllURVMsIDIKKyAJUk9UeAlTQVZFRF9YLCA4CisgCXhvcglUMSwgU0FWRURfWAorIAlzYglUMSwgMShPVVQpCistCWJlcXoJJGF0LCAuTGNoYWNoYTIwX21pcHNfeG9yX2RvbmUKKysJYmVxegkkYXQsIC5MY2hhY2hhX21pcHNfeG9yX2RvbmUKKyAJLyogVGhpcmQgYnl0ZSAqLworIAlsYnUJVDEsIDIoSU4pCisgCVJPVHgJU0FWRURfWCwgOAorIAl4b3IJVDEsIFNBVkVEX1gKKyAJc2IJVDEsIDIoT1VUKQorLQliCS5MY2hhY2hhMjBfbWlwc194b3JfZG9uZQorKwliCS5MY2hhY2hhX21pcHNfeG9yX2RvbmUKKyAKKy0uTGNoYWNoYTIwX21pcHNfbm9fZnVsbF9ibG9ja191bmFsaWduZWQ6CisrLkxjaGFjaGFfbWlwc19ub19mdWxsX2Jsb2NrX3VuYWxpZ25lZDoKKyAJLyogUmVzdG9yZSB0aGUgb2Zmc2V0IG9uIEJZVEVTICovCisgCWFkZGl1CUJZVEVTLCBDSEFDSEEyMF9CTE9DS19TSVpFCisgCitAQCAtMzk5LDcgKzM5OSw3IEBAIGNoYWNoYTIwX21pcHM6CisgCWFuZGkJJGF0LCBCWVRFUywgTUFTS19VMzIKKyAKKyAJLyogTG9hZCB1cHBlciBoYWxmIG9mIGp1bXAgdGFibGUgYWRkciAqLworLQlsdWkJVDAsICVoaSguTGNoYWNoYTIwX21pcHNfam1wdGJsX3VuYWxpZ25lZF8wKQorKwlsdWkJVDAsICVoaSguTGNoYWNoYV9taXBzX2ptcHRibF91bmFsaWduZWRfMCkKKyAKKyAJLyogQ2FsY3VsYXRlIGxvd2VyIGhhbGYganVtcCB0YWJsZSBvZmZzZXQgKi8KKyAJaW5zCVQwLCAkYXQsIDEsIDYKK0BAIC00MDgsNyArNDA4LDcgQEAgY2hhY2hhMjBfbWlwczoKKyAJYWRkdQlUMSwgU1RBVEUsICRhdAorIAorIAkvKiBBZGQgbG93ZXIgaGFsZiBqdW1wIHRhYmxlIGFkZHIgKi8KKy0JYWRkaXUJVDAsICVsbyguTGNoYWNoYTIwX21pcHNfam1wdGJsX3VuYWxpZ25lZF8wKQorKwlhZGRpdQlUMCwgJWxvKC5MY2hhY2hhX21pcHNfam1wdGJsX3VuYWxpZ25lZF8wKQorIAorIAkvKiBSZWFkIHZhbHVlIGZyb20gU1RBVEUgKi8KKyAJbHcJU0FWRURfQ0EsIDAoVDEpCitAQCAtNDIwLDUgKzQyMCw3OCBAQCBjaGFjaGEyMF9taXBzOgorIAorIAkvKiBKdW1wIHRhYmxlICovCisgCUZPUl9FQUNIX1dPUkQoSk1QVEJMX1VOQUxJR05FRCkKKy0uZW5kIGNoYWNoYTIwX21pcHMKKysuZW5kIGNoYWNoYV9jcnlwdF9hcmNoCisrLnNldCBhdAorKworKy8qIElucHV0IGFyZ3VtZW50cworKyAqIFNUQVRFCSRhMAorKyAqIE9VVAkJJGExCisrICogTlJPVU5ECSRhMgorKyAqLworKworKyN1bmRlZiBYMTIKKysjdW5kZWYgWDEzCisrI3VuZGVmIFgxNAorKyN1bmRlZiBYMTUKKysKKysjZGVmaW5lIFgxMgkkYTMKKysjZGVmaW5lIFgxMwkkYXQKKysjZGVmaW5lIFgxNAkkdjAKKysjZGVmaW5lIFgxNQlTVEFURQorKworKy5zZXQgbm9hdAorKy5nbG9ibAloY2hhY2hhX2Jsb2NrX2FyY2gKKysuZW50CWhjaGFjaGFfYmxvY2tfYXJjaAorK2hjaGFjaGFfYmxvY2tfYXJjaDoKKysJLmZyYW1lCSRzcCwgU1RBQ0tfU0laRSwgJHJhCisrCisrCWFkZGl1CSRzcCwgLVNUQUNLX1NJWkUKKysKKysJLyogU2F2ZSBYMTEoczYpICovCisrCXN3CVgxMSwgMCgkc3ApCisrCisrCWx3CVgwLCAgMChTVEFURSkKKysJbHcJWDEsICA0KFNUQVRFKQorKwlsdwlYMiwgIDgoU1RBVEUpCisrCWx3CVgzLCAgMTIoU1RBVEUpCisrCWx3CVg0LCAgMTYoU1RBVEUpCisrCWx3CVg1LCAgMjAoU1RBVEUpCisrCWx3CVg2LCAgMjQoU1RBVEUpCisrCWx3CVg3LCAgMjgoU1RBVEUpCisrCWx3CVg4LCAgMzIoU1RBVEUpCisrCWx3CVg5LCAgMzYoU1RBVEUpCisrCWx3CVgxMCwgNDAoU1RBVEUpCisrCWx3CVgxMSwgNDQoU1RBVEUpCisrCWx3CVgxMiwgNDgoU1RBVEUpCisrCWx3CVgxMywgNTIoU1RBVEUpCisrCWx3CVgxNCwgNTYoU1RBVEUpCisrCWx3CVgxNSwgNjAoU1RBVEUpCisrCisrLkxvb3BfaGNoYWNoYV94b3Jfcm91bmRzOgorKwlhZGRpdQkkYTIsIC0yCisrCUFYUiggMCwgMSwgMiwgMywgIDQsIDUsIDYsIDcsIDEyLDEzLDE0LDE1LCAxNik7CisrCUFYUiggOCwgOSwxMCwxMSwgMTIsMTMsMTQsMTUsICA0LCA1LCA2LCA3LCAxMik7CisrCUFYUiggMCwgMSwgMiwgMywgIDQsIDUsIDYsIDcsIDEyLDEzLDE0LDE1LCAgOCk7CisrCUFYUiggOCwgOSwxMCwxMSwgMTIsMTMsMTQsMTUsICA0LCA1LCA2LCA3LCAgNyk7CisrCUFYUiggMCwgMSwgMiwgMywgIDUsIDYsIDcsIDQsIDE1LDEyLDEzLDE0LCAxNik7CisrCUFYUigxMCwxMSwgOCwgOSwgMTUsMTIsMTMsMTQsICA1LCA2LCA3LCA0LCAxMik7CisrCUFYUiggMCwgMSwgMiwgMywgIDUsIDYsIDcsIDQsIDE1LDEyLDEzLDE0LCAgOCk7CisrCUFYUigxMCwxMSwgOCwgOSwgMTUsMTIsMTMsMTQsICA1LCA2LCA3LCA0LCAgNyk7CisrCWJuZXoJJGEyLCAuTG9vcF9oY2hhY2hhX3hvcl9yb3VuZHMKKysKKysJLyogUmVzdG9yZSB1c2VkIHJlZ2lzdGVyICovCisrCWx3CVgxMSwgMCgkc3ApCisrCisrCXN3CVgwLCAgMChPVVQpCisrCXN3CVgxLCAgNChPVVQpCisrCXN3CVgyLCAgOChPVVQpCisrCXN3CVgzLCAgMTIoT1VUKQorKwlzdwlYMTIsIDE2KE9VVCkKKysJc3cJWDEzLCAyMChPVVQpCisrCXN3CVgxNCwgMjQoT1VUKQorKwlzdwlYMTUsIDI4KE9VVCkKKysKKysJYWRkaXUJJHNwLCBTVEFDS19TSVpFCisrCWpyCSRyYQorKy5lbmQgaGNoYWNoYV9ibG9ja19hcmNoCisgLnNldCBhdAorLS0tIC9kZXYvbnVsbAorKysrIGIvYXJjaC9taXBzL2NyeXB0by9jaGFjaGEtZ2x1ZS5jCitAQCAtMCwwICsxLDE1MCBAQAorKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisrLyoKKysgKiBNSVBTIGFjY2VsZXJhdGVkIENoYUNoYSBhbmQgWENoYUNoYSBzdHJlYW0gY2lwaGVycywKKysgKiBpbmNsdWRpbmcgQ2hhQ2hhMjAgKFJGQzc1MzkpCisrICoKKysgKiBDb3B5cmlnaHQgKEMpIDIwMTkgTGluYXJvLCBMdGQuIDxhcmQuYmllc2hldXZlbEBsaW5hcm8ub3JnPgorKyAqLworKworKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisrI2luY2x1ZGUgPGNyeXB0by9hbGdhcGkuaD4KKysjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2NoYWNoYS5oPgorKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvc2tjaXBoZXIuaD4KKysjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisrI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorKworK2FzbWxpbmthZ2Ugdm9pZCBjaGFjaGFfY3J5cHRfYXJjaCh1MzIgKnN0YXRlLCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjLAorKwkJCQkgIHVuc2lnbmVkIGludCBieXRlcywgaW50IG5yb3VuZHMpOworK0VYUE9SVF9TWU1CT0woY2hhY2hhX2NyeXB0X2FyY2gpOworKworK2FzbWxpbmthZ2Ugdm9pZCBoY2hhY2hhX2Jsb2NrX2FyY2goY29uc3QgdTMyICpzdGF0ZSwgdTMyICpzdHJlYW0sIGludCBucm91bmRzKTsKKytFWFBPUlRfU1lNQk9MKGhjaGFjaGFfYmxvY2tfYXJjaCk7CisrCisrdm9pZCBjaGFjaGFfaW5pdF9hcmNoKHUzMiAqc3RhdGUsIGNvbnN0IHUzMiAqa2V5LCBjb25zdCB1OCAqaXYpCisreworKwljaGFjaGFfaW5pdF9nZW5lcmljKHN0YXRlLCBrZXksIGl2KTsKKyt9CisrRVhQT1JUX1NZTUJPTChjaGFjaGFfaW5pdF9hcmNoKTsKKysKKytzdGF0aWMgaW50IGNoYWNoYV9taXBzX3N0cmVhbV94b3Ioc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSwKKysJCQkJICBjb25zdCBzdHJ1Y3QgY2hhY2hhX2N0eCAqY3R4LCBjb25zdCB1OCAqaXYpCisreworKwlzdHJ1Y3Qgc2tjaXBoZXJfd2FsayB3YWxrOworKwl1MzIgc3RhdGVbMTZdOworKwlpbnQgZXJyOworKworKwllcnIgPSBza2NpcGhlcl93YWxrX3ZpcnQoJndhbGssIHJlcSwgZmFsc2UpOworKworKwljaGFjaGFfaW5pdF9nZW5lcmljKHN0YXRlLCBjdHgtPmtleSwgaXYpOworKworKwl3aGlsZSAod2Fsay5uYnl0ZXMgPiAwKSB7CisrCQl1bnNpZ25lZCBpbnQgbmJ5dGVzID0gd2Fsay5uYnl0ZXM7CisrCisrCQlpZiAobmJ5dGVzIDwgd2Fsay50b3RhbCkKKysJCQluYnl0ZXMgPSByb3VuZF9kb3duKG5ieXRlcywgd2Fsay5zdHJpZGUpOworKworKwkJY2hhY2hhX2NyeXB0KHN0YXRlLCB3YWxrLmRzdC52aXJ0LmFkZHIsIHdhbGsuc3JjLnZpcnQuYWRkciwKKysJCQkgICAgIG5ieXRlcywgY3R4LT5ucm91bmRzKTsKKysJCWVyciA9IHNrY2lwaGVyX3dhbGtfZG9uZSgmd2Fsaywgd2Fsay5uYnl0ZXMgLSBuYnl0ZXMpOworKwl9CisrCisrCXJldHVybiBlcnI7CisrfQorKworK3N0YXRpYyBpbnQgY2hhY2hhX21pcHMoc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSkKKyt7CisrCXN0cnVjdCBjcnlwdG9fc2tjaXBoZXIgKnRmbSA9IGNyeXB0b19za2NpcGhlcl9yZXF0Zm0ocmVxKTsKKysJc3RydWN0IGNoYWNoYV9jdHggKmN0eCA9IGNyeXB0b19za2NpcGhlcl9jdHgodGZtKTsKKysKKysJcmV0dXJuIGNoYWNoYV9taXBzX3N0cmVhbV94b3IocmVxLCBjdHgsIHJlcS0+aXYpOworK30KKysKKytzdGF0aWMgaW50IHhjaGFjaGFfbWlwcyhzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxKQorK3sKKysJc3RydWN0IGNyeXB0b19za2NpcGhlciAqdGZtID0gY3J5cHRvX3NrY2lwaGVyX3JlcXRmbShyZXEpOworKwlzdHJ1Y3QgY2hhY2hhX2N0eCAqY3R4ID0gY3J5cHRvX3NrY2lwaGVyX2N0eCh0Zm0pOworKwlzdHJ1Y3QgY2hhY2hhX2N0eCBzdWJjdHg7CisrCXUzMiBzdGF0ZVsxNl07CisrCXU4IHJlYWxfaXZbMTZdOworKworKwljaGFjaGFfaW5pdF9nZW5lcmljKHN0YXRlLCBjdHgtPmtleSwgcmVxLT5pdik7CisrCisrCWhjaGFjaGFfYmxvY2soc3RhdGUsIHN1YmN0eC5rZXksIGN0eC0+bnJvdW5kcyk7CisrCXN1YmN0eC5ucm91bmRzID0gY3R4LT5ucm91bmRzOworKworKwltZW1jcHkoJnJlYWxfaXZbMF0sIHJlcS0+aXYgKyAyNCwgOCk7CisrCW1lbWNweSgmcmVhbF9pdls4XSwgcmVxLT5pdiArIDE2LCA4KTsKKysJcmV0dXJuIGNoYWNoYV9taXBzX3N0cmVhbV94b3IocmVxLCAmc3ViY3R4LCByZWFsX2l2KTsKKyt9CisrCisrc3RhdGljIHN0cnVjdCBza2NpcGhlcl9hbGcgYWxnc1tdID0geworKwl7CisrCQkuYmFzZS5jcmFfbmFtZQkJPSAiY2hhY2hhMjAiLAorKwkJLmJhc2UuY3JhX2RyaXZlcl9uYW1lCT0gImNoYWNoYTIwLW1pcHMiLAorKwkJLmJhc2UuY3JhX3ByaW9yaXR5CT0gMjAwLAorKwkJLmJhc2UuY3JhX2Jsb2Nrc2l6ZQk9IDEsCisrCQkuYmFzZS5jcmFfY3R4c2l6ZQk9IHNpemVvZihzdHJ1Y3QgY2hhY2hhX2N0eCksCisrCQkuYmFzZS5jcmFfbW9kdWxlCT0gVEhJU19NT0RVTEUsCisrCisrCQkubWluX2tleXNpemUJCT0gQ0hBQ0hBX0tFWV9TSVpFLAorKwkJLm1heF9rZXlzaXplCQk9IENIQUNIQV9LRVlfU0laRSwKKysJCS5pdnNpemUJCQk9IENIQUNIQV9JVl9TSVpFLAorKwkJLmNodW5rc2l6ZQkJPSBDSEFDSEFfQkxPQ0tfU0laRSwKKysJCS5zZXRrZXkJCQk9IGNoYWNoYTIwX3NldGtleSwKKysJCS5lbmNyeXB0CQk9IGNoYWNoYV9taXBzLAorKwkJLmRlY3J5cHQJCT0gY2hhY2hhX21pcHMsCisrCX0sIHsKKysJCS5iYXNlLmNyYV9uYW1lCQk9ICJ4Y2hhY2hhMjAiLAorKwkJLmJhc2UuY3JhX2RyaXZlcl9uYW1lCT0gInhjaGFjaGEyMC1taXBzIiwKKysJCS5iYXNlLmNyYV9wcmlvcml0eQk9IDIwMCwKKysJCS5iYXNlLmNyYV9ibG9ja3NpemUJPSAxLAorKwkJLmJhc2UuY3JhX2N0eHNpemUJPSBzaXplb2Yoc3RydWN0IGNoYWNoYV9jdHgpLAorKwkJLmJhc2UuY3JhX21vZHVsZQk9IFRISVNfTU9EVUxFLAorKworKwkJLm1pbl9rZXlzaXplCQk9IENIQUNIQV9LRVlfU0laRSwKKysJCS5tYXhfa2V5c2l6ZQkJPSBDSEFDSEFfS0VZX1NJWkUsCisrCQkuaXZzaXplCQkJPSBYQ0hBQ0hBX0lWX1NJWkUsCisrCQkuY2h1bmtzaXplCQk9IENIQUNIQV9CTE9DS19TSVpFLAorKwkJLnNldGtleQkJCT0gY2hhY2hhMjBfc2V0a2V5LAorKwkJLmVuY3J5cHQJCT0geGNoYWNoYV9taXBzLAorKwkJLmRlY3J5cHQJCT0geGNoYWNoYV9taXBzLAorKwl9LCB7CisrCQkuYmFzZS5jcmFfbmFtZQkJPSAieGNoYWNoYTEyIiwKKysJCS5iYXNlLmNyYV9kcml2ZXJfbmFtZQk9ICJ4Y2hhY2hhMTItbWlwcyIsCisrCQkuYmFzZS5jcmFfcHJpb3JpdHkJPSAyMDAsCisrCQkuYmFzZS5jcmFfYmxvY2tzaXplCT0gMSwKKysJCS5iYXNlLmNyYV9jdHhzaXplCT0gc2l6ZW9mKHN0cnVjdCBjaGFjaGFfY3R4KSwKKysJCS5iYXNlLmNyYV9tb2R1bGUJPSBUSElTX01PRFVMRSwKKysKKysJCS5taW5fa2V5c2l6ZQkJPSBDSEFDSEFfS0VZX1NJWkUsCisrCQkubWF4X2tleXNpemUJCT0gQ0hBQ0hBX0tFWV9TSVpFLAorKwkJLml2c2l6ZQkJCT0gWENIQUNIQV9JVl9TSVpFLAorKwkJLmNodW5rc2l6ZQkJPSBDSEFDSEFfQkxPQ0tfU0laRSwKKysJCS5zZXRrZXkJCQk9IGNoYWNoYTEyX3NldGtleSwKKysJCS5lbmNyeXB0CQk9IHhjaGFjaGFfbWlwcywKKysJCS5kZWNyeXB0CQk9IHhjaGFjaGFfbWlwcywKKysJfQorK307CisrCisrc3RhdGljIGludCBfX2luaXQgY2hhY2hhX3NpbWRfbW9kX2luaXQodm9pZCkKKyt7CisrCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfc2tjaXBoZXJzKGFsZ3MsIEFSUkFZX1NJWkUoYWxncykpOworK30KKysKKytzdGF0aWMgdm9pZCBfX2V4aXQgY2hhY2hhX3NpbWRfbW9kX2Zpbmkodm9pZCkKKyt7CisrCWNyeXB0b191bnJlZ2lzdGVyX3NrY2lwaGVycyhhbGdzLCBBUlJBWV9TSVpFKGFsZ3MpKTsKKyt9CisrCisrbW9kdWxlX2luaXQoY2hhY2hhX3NpbWRfbW9kX2luaXQpOworK21vZHVsZV9leGl0KGNoYWNoYV9zaW1kX21vZF9maW5pKTsKKysKKytNT0RVTEVfREVTQ1JJUFRJT04oIkNoYUNoYSBhbmQgWENoYUNoYSBzdHJlYW0gY2lwaGVycyAoTUlQUyBhY2NlbGVyYXRlZCkiKTsKKytNT0RVTEVfQVVUSE9SKCJBcmQgQmllc2hldXZlbCA8YXJkLmJpZXNoZXV2ZWxAbGluYXJvLm9yZz4iKTsKKytNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CisrTU9EVUxFX0FMSUFTX0NSWVBUTygiY2hhY2hhMjAiKTsKKytNT0RVTEVfQUxJQVNfQ1JZUFRPKCJjaGFjaGEyMC1taXBzIik7CisrTU9EVUxFX0FMSUFTX0NSWVBUTygieGNoYWNoYTIwIik7CisrTU9EVUxFX0FMSUFTX0NSWVBUTygieGNoYWNoYTIwLW1pcHMiKTsKKytNT0RVTEVfQUxJQVNfQ1JZUFRPKCJ4Y2hhY2hhMTIiKTsKKytNT0RVTEVfQUxJQVNfQ1JZUFRPKCJ4Y2hhY2hhMTItbWlwcyIpOworLS0tIGEvY3J5cHRvL0tjb25maWcKKysrKyBiL2NyeXB0by9LY29uZmlnCitAQCAtMTQyMyw2ICsxNDIzLDEyIEBAIGNvbmZpZyBDUllQVE9fQ0hBQ0hBMjBfWDg2XzY0CisgCSAgU1NTRTMsIEFWWDIsIGFuZCBBVlgtNTEyVkwgb3B0aW1pemVkIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgQ2hhQ2hhMjAsCisgCSAgWENoYUNoYTIwLCBhbmQgWENoYUNoYTEyIHN0cmVhbSBjaXBoZXJzLgorIAorK2NvbmZpZyBDUllQVE9fQ0hBQ0hBX01JUFMKKysJdHJpc3RhdGUgIkNoYUNoYSBzdHJlYW0gY2lwaGVyIGFsZ29yaXRobXMgKE1JUFMgMzJyMiBvcHRpbWl6ZWQpIgorKwlkZXBlbmRzIG9uIENQVV9NSVBTMzJfUjIKKysJc2VsZWN0IENSWVBUT19CTEtDSVBIRVIKKysJc2VsZWN0IENSWVBUT19BUkNIX0hBVkVfTElCX0NIQUNIQQorKworIGNvbmZpZyBDUllQVE9fU0VFRAorIAl0cmlzdGF0ZSAiU0VFRCBjaXBoZXIgYWxnb3JpdGhtIgorIAlzZWxlY3QgQ1JZUFRPX0FMR0FQSQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAxMi1jcnlwdG8tY2hhY2hhLXVuZXhwb3J0LWNoYWNoYV9nZW5lcmljLXJvdXRpbmVzLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAxMi1jcnlwdG8tY2hhY2hhLXVuZXhwb3J0LWNoYWNoYV9nZW5lcmljLXJvdXRpbmVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNmY0N2EKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDEyLWNyeXB0by1jaGFjaGEtdW5leHBvcnQtY2hhY2hhX2dlbmVyaWMtcm91dGluZXMucGF0Y2gKQEAgLTAsMCArMSwxMTUgQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFyZCBCaWVzaGV1dmVsIDxhcmRiQGtlcm5lbC5vcmc+CitEYXRlOiBGcmksIDggTm92IDIwMTkgMTM6MjI6MTggKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gY3J5cHRvOiBjaGFjaGEgLSB1bmV4cG9ydCBjaGFjaGFfZ2VuZXJpYyByb3V0aW5lcworCitjb21taXQgMjJjZjcwNTM2MDcwN2NlZDE1ZjlmZTU0MjM5MzhmMzEzYzdkZjUzNiB1cHN0cmVhbS4KKworTm93IHRoYXQgYWxsIHVzZXJzIG9mIGdlbmVyaWMgQ2hhQ2hhIGNvZGUgaGF2ZSBtb3ZlZCB0byB0aGUgY29yZSBsaWJyYXJ5LAordGhlcmUgaXMgbm8gbG9uZ2VyIGEgbmVlZCBmb3IgdGhlIGdlbmVyaWMgQ2hhQ2hhIHNrY3BpaGVyIGRyaXZlciB0bworZXhwb3J0IHBhcnRzIG9mIGl0IGltcGxlbWVudGF0aW9uIGZvciByZXVzZSBieSBvdGhlciBkcml2ZXJzLiBTbyBkcm9wCit0aGUgZXhwb3J0cywgYW5kIG1ha2UgdGhlIHN5bWJvbHMgc3RhdGljLgorCitTaWduZWQtb2ZmLWJ5OiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgorU2lnbmVkLW9mZi1ieTogSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBjcnlwdG8vY2hhY2hhX2dlbmVyaWMuYyAgICAgICAgICB8IDI2ICsrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tCisgaW5jbHVkZS9jcnlwdG8vaW50ZXJuYWwvY2hhY2hhLmggfCAxMCAtLS0tLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDI4IGRlbGV0aW9ucygtKQorCistLS0gYS9jcnlwdG8vY2hhY2hhX2dlbmVyaWMuYworKysrIGIvY3J5cHRvL2NoYWNoYV9nZW5lcmljLmMKK0BAIC0yMSw3ICsyMSw3IEBAIHN0YXRpYyBpbnQgY2hhY2hhX3N0cmVhbV94b3Ioc3RydWN0IHNrY2kKKyAKKyAJZXJyID0gc2tjaXBoZXJfd2Fsa192aXJ0KCZ3YWxrLCByZXEsIGZhbHNlKTsKKyAKKy0JY3J5cHRvX2NoYWNoYV9pbml0KHN0YXRlLCBjdHgsIGl2KTsKKysJY2hhY2hhX2luaXRfZ2VuZXJpYyhzdGF0ZSwgY3R4LT5rZXksIGl2KTsKKyAKKyAJd2hpbGUgKHdhbGsubmJ5dGVzID4gMCkgeworIAkJdW5zaWduZWQgaW50IG5ieXRlcyA9IHdhbGsubmJ5dGVzOworQEAgLTM3LDM2ICszNywyNyBAQCBzdGF0aWMgaW50IGNoYWNoYV9zdHJlYW1feG9yKHN0cnVjdCBza2NpCisgCXJldHVybiBlcnI7CisgfQorIAorLXZvaWQgY3J5cHRvX2NoYWNoYV9pbml0KHUzMiAqc3RhdGUsIGNvbnN0IHN0cnVjdCBjaGFjaGFfY3R4ICpjdHgsIGNvbnN0IHU4ICppdikKKy17CistCWNoYWNoYV9pbml0X2dlbmVyaWMoc3RhdGUsIGN0eC0+a2V5LCBpdik7CistfQorLUVYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19jaGFjaGFfaW5pdCk7CistCistaW50IGNyeXB0b19jaGFjaGEyMF9zZXRrZXkoc3RydWN0IGNyeXB0b19za2NpcGhlciAqdGZtLCBjb25zdCB1OCAqa2V5LAorLQkJCSAgIHVuc2lnbmVkIGludCBrZXlzaXplKQorK3N0YXRpYyBpbnQgY3J5cHRvX2NoYWNoYTIwX3NldGtleShzdHJ1Y3QgY3J5cHRvX3NrY2lwaGVyICp0Zm0sIGNvbnN0IHU4ICprZXksCisrCQkJCSAgdW5zaWduZWQgaW50IGtleXNpemUpCisgeworIAlyZXR1cm4gY2hhY2hhX3NldGtleSh0Zm0sIGtleSwga2V5c2l6ZSwgMjApOworIH0KKy1FWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fY2hhY2hhMjBfc2V0a2V5KTsKKyAKKy1pbnQgY3J5cHRvX2NoYWNoYTEyX3NldGtleShzdHJ1Y3QgY3J5cHRvX3NrY2lwaGVyICp0Zm0sIGNvbnN0IHU4ICprZXksCistCQkJICAgdW5zaWduZWQgaW50IGtleXNpemUpCisrc3RhdGljIGludCBjcnlwdG9fY2hhY2hhMTJfc2V0a2V5KHN0cnVjdCBjcnlwdG9fc2tjaXBoZXIgKnRmbSwgY29uc3QgdTggKmtleSwKKysJCQkJIHVuc2lnbmVkIGludCBrZXlzaXplKQorIHsKKyAJcmV0dXJuIGNoYWNoYV9zZXRrZXkodGZtLCBrZXksIGtleXNpemUsIDEyKTsKKyB9CistRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX2NoYWNoYTEyX3NldGtleSk7CisgCistaW50IGNyeXB0b19jaGFjaGFfY3J5cHQoc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSkKKytzdGF0aWMgaW50IGNyeXB0b19jaGFjaGFfY3J5cHQoc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSkKKyB7CisgCXN0cnVjdCBjcnlwdG9fc2tjaXBoZXIgKnRmbSA9IGNyeXB0b19za2NpcGhlcl9yZXF0Zm0ocmVxKTsKKyAJc3RydWN0IGNoYWNoYV9jdHggKmN0eCA9IGNyeXB0b19za2NpcGhlcl9jdHgodGZtKTsKKyAKKyAJcmV0dXJuIGNoYWNoYV9zdHJlYW1feG9yKHJlcSwgY3R4LCByZXEtPml2KTsKKyB9CistRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX2NoYWNoYV9jcnlwdCk7CisgCistaW50IGNyeXB0b194Y2hhY2hhX2NyeXB0KHN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0ICpyZXEpCisrc3RhdGljIGludCBjcnlwdG9feGNoYWNoYV9jcnlwdChzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxKQorIHsKKyAJc3RydWN0IGNyeXB0b19za2NpcGhlciAqdGZtID0gY3J5cHRvX3NrY2lwaGVyX3JlcXRmbShyZXEpOworIAlzdHJ1Y3QgY2hhY2hhX2N0eCAqY3R4ID0gY3J5cHRvX3NrY2lwaGVyX2N0eCh0Zm0pOworQEAgLTc1LDcgKzY2LDcgQEAgaW50IGNyeXB0b194Y2hhY2hhX2NyeXB0KHN0cnVjdCBza2NpcGhlcgorIAl1OCByZWFsX2l2WzE2XTsKKyAKKyAJLyogQ29tcHV0ZSB0aGUgc3Via2V5IGdpdmVuIHRoZSBvcmlnaW5hbCBrZXkgYW5kIGZpcnN0IDEyOCBub25jZSBiaXRzICovCistCWNyeXB0b19jaGFjaGFfaW5pdChzdGF0ZSwgY3R4LCByZXEtPml2KTsKKysJY2hhY2hhX2luaXRfZ2VuZXJpYyhzdGF0ZSwgY3R4LT5rZXksIHJlcS0+aXYpOworIAloY2hhY2hhX2Jsb2NrX2dlbmVyaWMoc3RhdGUsIHN1YmN0eC5rZXksIGN0eC0+bnJvdW5kcyk7CisgCXN1YmN0eC5ucm91bmRzID0gY3R4LT5ucm91bmRzOworIAorQEAgLTg2LDcgKzc3LDYgQEAgaW50IGNyeXB0b194Y2hhY2hhX2NyeXB0KHN0cnVjdCBza2NpcGhlcgorIAkvKiBHZW5lcmF0ZSB0aGUgc3RyZWFtIGFuZCBYT1IgaXQgd2l0aCB0aGUgZGF0YSAqLworIAlyZXR1cm4gY2hhY2hhX3N0cmVhbV94b3IocmVxLCAmc3ViY3R4LCByZWFsX2l2KTsKKyB9CistRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX3hjaGFjaGFfY3J5cHQpOworIAorIHN0YXRpYyBzdHJ1Y3Qgc2tjaXBoZXJfYWxnIGFsZ3NbXSA9IHsKKyAJeworLS0tIGEvaW5jbHVkZS9jcnlwdG8vaW50ZXJuYWwvY2hhY2hhLmgKKysrKyBiL2luY2x1ZGUvY3J5cHRvL2ludGVybmFsL2NoYWNoYS5oCitAQCAtMTIsOCArMTIsNiBAQCBzdHJ1Y3QgY2hhY2hhX2N0eCB7CisgCWludCBucm91bmRzOworIH07CisgCistdm9pZCBjcnlwdG9fY2hhY2hhX2luaXQodTMyICpzdGF0ZSwgY29uc3Qgc3RydWN0IGNoYWNoYV9jdHggKmN0eCwgY29uc3QgdTggKml2KTsKKy0KKyBzdGF0aWMgaW5saW5lIGludCBjaGFjaGFfc2V0a2V5KHN0cnVjdCBjcnlwdG9fc2tjaXBoZXIgKnRmbSwgY29uc3QgdTggKmtleSwKKyAJCQkJdW5zaWduZWQgaW50IGtleXNpemUsIGludCBucm91bmRzKQorIHsKK0BAIC00MiwxMiArNDAsNCBAQCBzdGF0aWMgaW50IGlubGluZSBjaGFjaGExMl9zZXRrZXkoc3RydWN0CisgCXJldHVybiBjaGFjaGFfc2V0a2V5KHRmbSwga2V5LCBrZXlzaXplLCAxMik7CisgfQorIAorLWludCBjcnlwdG9fY2hhY2hhMjBfc2V0a2V5KHN0cnVjdCBjcnlwdG9fc2tjaXBoZXIgKnRmbSwgY29uc3QgdTggKmtleSwKKy0JCQkgICB1bnNpZ25lZCBpbnQga2V5c2l6ZSk7CistaW50IGNyeXB0b19jaGFjaGExMl9zZXRrZXkoc3RydWN0IGNyeXB0b19za2NpcGhlciAqdGZtLCBjb25zdCB1OCAqa2V5LAorLQkJCSAgIHVuc2lnbmVkIGludCBrZXlzaXplKTsKKy0KKy1pbnQgY3J5cHRvX2NoYWNoYV9jcnlwdChzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxKTsKKy1pbnQgY3J5cHRvX3hjaGFjaGFfY3J5cHQoc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSk7CistCisgI2VuZGlmIC8qIF9DUllQVE9fQ0hBQ0hBX0ggKi8KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMTMtY3J5cHRvLXBvbHkxMzA1LW1vdmUtY29yZS1yb3V0aW5lcy1pbnRvLWEtc2VwYXJhdGUtbC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMTMtY3J5cHRvLXBvbHkxMzA1LW1vdmUtY29yZS1yb3V0aW5lcy1pbnRvLWEtc2VwYXJhdGUtbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjAzMDBkCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAxMy1jcnlwdG8tcG9seTEzMDUtbW92ZS1jb3JlLXJvdXRpbmVzLWludG8tYS1zZXBhcmF0ZS1sLnBhdGNoCkBAIC0wLDAgKzEsNjQ5IEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgorRGF0ZTogRnJpLCA4IE5vdiAyMDE5IDEzOjIyOjE5ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyeXB0bzogcG9seTEzMDUgLSBtb3ZlIGNvcmUgcm91dGluZXMgaW50byBhIHNlcGFyYXRlIGxpYnJhcnkKKworY29tbWl0IDQ4ZWE4YzZlYmM5NmJjMDk5MGUxMmVlMWM0M2QwODMyYzIzNTc2YmIgdXBzdHJlYW0uCisKK01vdmUgdGhlIGNvcmUgUG9seTEzMDUgcm91dGluZXMgc2hhcmVkIGJldHdlZW4gdGhlIGdlbmVyaWMgUG9seTEzMDUKK3NoYXNoIGRyaXZlciBhbmQgdGhlIEFkaWFudHVtIGFuZCBOSFBvbHkxMzA1IGRyaXZlcnMgaW50byBhIHNlcGFyYXRlCitsaWJyYXJ5IHNvIHRoYXQgdXNpbmcganVzdCB0aGlzIHBpZWNlcyBkb2VzIG5vdCBwdWxsIGluIHRoZSBjcnlwdG8KK0FQSSBwaWVjZXMgb2YgdGhlIGdlbmVyaWMgUG9seTEzMDUgcm91dGluZS4KKworSW4gYSBzdWJzZXF1ZW50IHBhdGNoLCB3ZSB3aWxsIGF1Z21lbnQgdGhpcyBnZW5lcmljIGxpYnJhcnkgd2l0aAoraW5pdC91cGRhdGUvZmluYWwgcm91dGluZXMgc28gdGhhdCBQb3lsMTMwNSBhbGdvcml0aG0gY2FuIGJlIHVzZWQKK2RpcmVjdGx5IHdpdGhvdXQgdGhlIG5lZWQgZm9yIHVzaW5nIHRoZSBjcnlwdG8gQVBJJ3Mgc2hhc2ggYWJzdHJhY3Rpb24uCisKK1NpZ25lZC1vZmYtYnk6IEFyZCBCaWVzaGV1dmVsIDxhcmRiQGtlcm5lbC5vcmc+CitTaWduZWQtb2ZmLWJ5OiBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGFyY2gveDg2L2NyeXB0by9wb2x5MTMwNV9nbHVlLmMgICAgfCAgIDIgKy0KKyBjcnlwdG8vS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgIHwgICA1ICstCisgY3J5cHRvL2FkaWFudHVtLmMgICAgICAgICAgICAgICAgICB8ICAgNSArLQorIGNyeXB0by9uaHBvbHkxMzA1LmMgICAgICAgICAgICAgICAgfCAgIDMgKy0KKyBjcnlwdG8vcG9seTEzMDVfZ2VuZXJpYy5jICAgICAgICAgIHwgMTk1ICsrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgaW5jbHVkZS9jcnlwdG8vaW50ZXJuYWwvcG9seTEzMDUuaCB8ICA2NyArKysrKysrKysrCisgaW5jbHVkZS9jcnlwdG8vcG9seTEzMDUuaCAgICAgICAgICB8ICAyMyAtLS0tCisgbGliL2NyeXB0by9LY29uZmlnICAgICAgICAgICAgICAgICB8ICAgMyArCisgbGliL2NyeXB0by9NYWtlZmlsZSAgICAgICAgICAgICAgICB8ICAgMyArCisgbGliL2NyeXB0by9wb2x5MTMwNS5jICAgICAgICAgICAgICB8IDE1OCArKysrKysrKysrKysrKysrKysrKysrKworIDEwIGZpbGVzIGNoYW5nZWQsIDI0OCBpbnNlcnRpb25zKCspLCAyMTYgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvY3J5cHRvL2ludGVybmFsL3BvbHkxMzA1LmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2NyeXB0by9wb2x5MTMwNS5jCisKKy0tLSBhL2FyY2gveDg2L2NyeXB0by9wb2x5MTMwNV9nbHVlLmMKKysrKyBiL2FyY2gveDg2L2NyeXB0by9wb2x5MTMwNV9nbHVlLmMKK0BAIC03LDggKzcsOCBAQAorIAorICNpbmNsdWRlIDxjcnlwdG8vYWxnYXBpLmg+CisgI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9oYXNoLmg+CisrI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9wb2x5MTMwNS5oPgorICNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvc2ltZC5oPgorLSNpbmNsdWRlIDxjcnlwdG8vcG9seTEzMDUuaD4KKyAjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisgI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKy0tLSBhL2NyeXB0by9LY29uZmlnCisrKysgYi9jcnlwdG8vS2NvbmZpZworQEAgLTQ0Niw3ICs0NDYsNyBAQCBjb25maWcgQ1JZUFRPX0tFWVdSQVAKKyBjb25maWcgQ1JZUFRPX05IUE9MWTEzMDUKKyAJdHJpc3RhdGUKKyAJc2VsZWN0IENSWVBUT19IQVNICistCXNlbGVjdCBDUllQVE9fUE9MWTEzMDUKKysJc2VsZWN0IENSWVBUT19MSUJfUE9MWTEzMDVfR0VORVJJQworIAorIGNvbmZpZyBDUllQVE9fTkhQT0xZMTMwNV9TU0UyCisgCXRyaXN0YXRlICJOSFBvbHkxMzA1IGhhc2ggZnVuY3Rpb24gKHg4Nl82NCBTU0UyIGltcGxlbWVudGF0aW9uKSIKK0BAIC00NjcsNyArNDY3LDcgQEAgY29uZmlnIENSWVBUT19OSFBPTFkxMzA1X0FWWDIKKyBjb25maWcgQ1JZUFRPX0FESUFOVFVNCisgCXRyaXN0YXRlICJBZGlhbnR1bSBzdXBwb3J0IgorIAlzZWxlY3QgQ1JZUFRPX0NIQUNIQTIwCistCXNlbGVjdCBDUllQVE9fUE9MWTEzMDUKKysJc2VsZWN0IENSWVBUT19MSUJfUE9MWTEzMDVfR0VORVJJQworIAlzZWxlY3QgQ1JZUFRPX05IUE9MWTEzMDUKKyAJc2VsZWN0IENSWVBUT19NQU5BR0VSCisgCWhlbHAKK0BAIC02ODYsNiArNjg2LDcgQEAgY29uZmlnIENSWVBUT19HSEFTSAorIGNvbmZpZyBDUllQVE9fUE9MWTEzMDUKKyAJdHJpc3RhdGUgIlBvbHkxMzA1IGF1dGhlbnRpY2F0b3IgYWxnb3JpdGhtIgorIAlzZWxlY3QgQ1JZUFRPX0hBU0gKKysJc2VsZWN0IENSWVBUT19MSUJfUE9MWTEzMDVfR0VORVJJQworIAloZWxwCisgCSAgUG9seTEzMDUgYXV0aGVudGljYXRvciBhbGdvcml0aG0sIFJGQzc1MzkuCisgCistLS0gYS9jcnlwdG8vYWRpYW50dW0uYworKysrIGIvY3J5cHRvL2FkaWFudHVtLmMKK0BAIC0zMyw2ICszMyw3IEBACisgI2luY2x1ZGUgPGNyeXB0by9iMTI4b3BzLmg+CisgI2luY2x1ZGUgPGNyeXB0by9jaGFjaGEuaD4KKyAjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2hhc2guaD4KKysjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL3BvbHkxMzA1Lmg+CisgI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9za2NpcGhlci5oPgorICNpbmNsdWRlIDxjcnlwdG8vbmhwb2x5MTMwNS5oPgorICNpbmNsdWRlIDxjcnlwdG8vc2NhdHRlcndhbGsuaD4KK0BAIC0yNDIsMTEgKzI0MywxMSBAQCBzdGF0aWMgdm9pZCBhZGlhbnR1bV9oYXNoX2hlYWRlcihzdHJ1Y3QKKyAKKyAJQlVJTERfQlVHX09OKHNpemVvZihoZWFkZXIpICUgUE9MWTEzMDVfQkxPQ0tfU0laRSAhPSAwKTsKKyAJcG9seTEzMDVfY29yZV9ibG9ja3MoJnN0YXRlLCAmdGN0eC0+aGVhZGVyX2hhc2hfa2V5LAorLQkJCSAgICAgJmhlYWRlciwgc2l6ZW9mKGhlYWRlcikgLyBQT0xZMTMwNV9CTE9DS19TSVpFKTsKKysJCQkgICAgICZoZWFkZXIsIHNpemVvZihoZWFkZXIpIC8gUE9MWTEzMDVfQkxPQ0tfU0laRSwgMSk7CisgCisgCUJVSUxEX0JVR19PTihUV0VBS19TSVpFICUgUE9MWTEzMDVfQkxPQ0tfU0laRSAhPSAwKTsKKyAJcG9seTEzMDVfY29yZV9ibG9ja3MoJnN0YXRlLCAmdGN0eC0+aGVhZGVyX2hhc2hfa2V5LCByZXEtPml2LAorLQkJCSAgICAgVFdFQUtfU0laRSAvIFBPTFkxMzA1X0JMT0NLX1NJWkUpOworKwkJCSAgICAgVFdFQUtfU0laRSAvIFBPTFkxMzA1X0JMT0NLX1NJWkUsIDEpOworIAorIAlwb2x5MTMwNV9jb3JlX2VtaXQoJnN0YXRlLCAmcmN0eC0+aGVhZGVyX2hhc2gpOworIH0KKy0tLSBhL2NyeXB0by9uaHBvbHkxMzA1LmMKKysrKyBiL2NyeXB0by9uaHBvbHkxMzA1LmMKK0BAIC0zMyw2ICszMyw3IEBACisgI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKyAjaW5jbHVkZSA8Y3J5cHRvL2FsZ2FwaS5oPgorICNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvaGFzaC5oPgorKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvcG9seTEzMDUuaD4KKyAjaW5jbHVkZSA8Y3J5cHRvL25ocG9seTEzMDUuaD4KKyAjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisgI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorQEAgLTc4LDcgKzc5LDcgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19uaF9oYXNoX3ZhbHVlKHN0cnVjdAorIAlCVUlMRF9CVUdfT04oTkhfSEFTSF9CWVRFUyAlIFBPTFkxMzA1X0JMT0NLX1NJWkUgIT0gMCk7CisgCisgCXBvbHkxMzA1X2NvcmVfYmxvY2tzKCZzdGF0ZS0+cG9seV9zdGF0ZSwgJmtleS0+cG9seV9rZXksIHN0YXRlLT5uaF9oYXNoLAorLQkJCSAgICAgTkhfSEFTSF9CWVRFUyAvIFBPTFkxMzA1X0JMT0NLX1NJWkUpOworKwkJCSAgICAgTkhfSEFTSF9CWVRFUyAvIFBPTFkxMzA1X0JMT0NLX1NJWkUsIDEpOworIH0KKyAKKyAvKgorLS0tIGEvY3J5cHRvL3BvbHkxMzA1X2dlbmVyaWMuYworKysrIGIvY3J5cHRvL3BvbHkxMzA1X2dlbmVyaWMuYworQEAgLTEzLDI3ICsxMywxMiBAQAorIAorICNpbmNsdWRlIDxjcnlwdG8vYWxnYXBpLmg+CisgI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9oYXNoLmg+CistI2luY2x1ZGUgPGNyeXB0by9wb2x5MTMwNS5oPgorKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvcG9seTEzMDUuaD4KKyAjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisgI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorIAorLXN0YXRpYyBpbmxpbmUgdTY0IG1sdCh1NjQgYSwgdTY0IGIpCisteworLQlyZXR1cm4gYSAqIGI7CistfQorLQorLXN0YXRpYyBpbmxpbmUgdTMyIHNyKHU2NCB2LCB1X2NoYXIgbikKKy17CistCXJldHVybiB2ID4+IG47CistfQorLQorLXN0YXRpYyBpbmxpbmUgdTMyIGFuZCh1MzIgdiwgdTMyIG1hc2spCisteworLQlyZXR1cm4gdiAmIG1hc2s7CistfQorLQorIGludCBjcnlwdG9fcG9seTEzMDVfaW5pdChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYykKKyB7CisgCXN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCAqZGN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworQEAgLTQ3LDEyNCArMzIsOCBAQCBpbnQgY3J5cHRvX3BvbHkxMzA1X2luaXQoc3RydWN0IHNoYXNoX2RlCisgfQorIEVYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19wb2x5MTMwNV9pbml0KTsKKyAKKy12b2lkIHBvbHkxMzA1X2NvcmVfc2V0a2V5KHN0cnVjdCBwb2x5MTMwNV9rZXkgKmtleSwgY29uc3QgdTggKnJhd19rZXkpCisteworLQkvKiByICY9IDB4ZmZmZmZmYzBmZmZmZmZjMGZmZmZmZmMwZmZmZmZmZiAqLworLQlrZXktPnJbMF0gPSAoZ2V0X3VuYWxpZ25lZF9sZTMyKHJhd19rZXkgKyAgMCkgPj4gMCkgJiAweDNmZmZmZmY7CistCWtleS0+clsxXSA9IChnZXRfdW5hbGlnbmVkX2xlMzIocmF3X2tleSArICAzKSA+PiAyKSAmIDB4M2ZmZmYwMzsKKy0Ja2V5LT5yWzJdID0gKGdldF91bmFsaWduZWRfbGUzMihyYXdfa2V5ICsgIDYpID4+IDQpICYgMHgzZmZjMGZmOworLQlrZXktPnJbM10gPSAoZ2V0X3VuYWxpZ25lZF9sZTMyKHJhd19rZXkgKyAgOSkgPj4gNikgJiAweDNmMDNmZmY7CistCWtleS0+cls0XSA9IChnZXRfdW5hbGlnbmVkX2xlMzIocmF3X2tleSArIDEyKSA+PiA4KSAmIDB4MDBmZmZmZjsKKy19CistRVhQT1JUX1NZTUJPTF9HUEwocG9seTEzMDVfY29yZV9zZXRrZXkpOworLQorLS8qCistICogUG9seTEzMDUgcmVxdWlyZXMgYSB1bmlxdWUga2V5IGZvciBlYWNoIHRhZywgd2hpY2ggaW1wbGllcyB0aGF0IHdlIGNhbid0IHNldAorLSAqIGl0IG9uIHRoZSB0Zm0gdGhhdCBnZXRzIGFjY2Vzc2VkIGJ5IG11bHRpcGxlIHVzZXJzIHNpbXVsdGFuZW91c2x5LiBJbnN0ZWFkIHdlCistICogZXhwZWN0IHRoZSBrZXkgYXMgdGhlIGZpcnN0IDMyIGJ5dGVzIGluIHRoZSB1cGRhdGUoKSBjYWxsLgorLSAqLworLXVuc2lnbmVkIGludCBjcnlwdG9fcG9seTEzMDVfc2V0ZGVzY2tleShzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRjdHgsCistCQkJCQljb25zdCB1OCAqc3JjLCB1bnNpZ25lZCBpbnQgc3JjbGVuKQorLXsKKy0JaWYgKCFkY3R4LT5zc2V0KSB7CistCQlpZiAoIWRjdHgtPnJzZXQgJiYgc3JjbGVuID49IFBPTFkxMzA1X0JMT0NLX1NJWkUpIHsKKy0JCQlwb2x5MTMwNV9jb3JlX3NldGtleSgmZGN0eC0+ciwgc3JjKTsKKy0JCQlzcmMgKz0gUE9MWTEzMDVfQkxPQ0tfU0laRTsKKy0JCQlzcmNsZW4gLT0gUE9MWTEzMDVfQkxPQ0tfU0laRTsKKy0JCQlkY3R4LT5yc2V0ID0gdHJ1ZTsKKy0JCX0KKy0JCWlmIChzcmNsZW4gPj0gUE9MWTEzMDVfQkxPQ0tfU0laRSkgeworLQkJCWRjdHgtPnNbMF0gPSBnZXRfdW5hbGlnbmVkX2xlMzIoc3JjICsgIDApOworLQkJCWRjdHgtPnNbMV0gPSBnZXRfdW5hbGlnbmVkX2xlMzIoc3JjICsgIDQpOworLQkJCWRjdHgtPnNbMl0gPSBnZXRfdW5hbGlnbmVkX2xlMzIoc3JjICsgIDgpOworLQkJCWRjdHgtPnNbM10gPSBnZXRfdW5hbGlnbmVkX2xlMzIoc3JjICsgMTIpOworLQkJCXNyYyArPSBQT0xZMTMwNV9CTE9DS19TSVpFOworLQkJCXNyY2xlbiAtPSBQT0xZMTMwNV9CTE9DS19TSVpFOworLQkJCWRjdHgtPnNzZXQgPSB0cnVlOworLQkJfQorLQl9CistCXJldHVybiBzcmNsZW47CistfQorLUVYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19wb2x5MTMwNV9zZXRkZXNja2V5KTsKKy0KKy1zdGF0aWMgdm9pZCBwb2x5MTMwNV9ibG9ja3NfaW50ZXJuYWwoc3RydWN0IHBvbHkxMzA1X3N0YXRlICpzdGF0ZSwKKy0JCQkJICAgICBjb25zdCBzdHJ1Y3QgcG9seTEzMDVfa2V5ICprZXksCistCQkJCSAgICAgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBpbnQgbmJsb2NrcywKKy0JCQkJICAgICB1MzIgaGliaXQpCisteworLQl1MzIgcjAsIHIxLCByMiwgcjMsIHI0OworLQl1MzIgczEsIHMyLCBzMywgczQ7CistCXUzMiBoMCwgaDEsIGgyLCBoMywgaDQ7CistCXU2NCBkMCwgZDEsIGQyLCBkMywgZDQ7CistCistCWlmICghbmJsb2NrcykKKy0JCXJldHVybjsKKy0KKy0JcjAgPSBrZXktPnJbMF07CistCXIxID0ga2V5LT5yWzFdOworLQlyMiA9IGtleS0+clsyXTsKKy0JcjMgPSBrZXktPnJbM107CistCXI0ID0ga2V5LT5yWzRdOworLQorLQlzMSA9IHIxICogNTsKKy0JczIgPSByMiAqIDU7CistCXMzID0gcjMgKiA1OworLQlzNCA9IHI0ICogNTsKKy0KKy0JaDAgPSBzdGF0ZS0+aFswXTsKKy0JaDEgPSBzdGF0ZS0+aFsxXTsKKy0JaDIgPSBzdGF0ZS0+aFsyXTsKKy0JaDMgPSBzdGF0ZS0+aFszXTsKKy0JaDQgPSBzdGF0ZS0+aFs0XTsKKy0KKy0JZG8geworLQkJLyogaCArPSBtW2ldICovCistCQloMCArPSAoZ2V0X3VuYWxpZ25lZF9sZTMyKHNyYyArICAwKSA+PiAwKSAmIDB4M2ZmZmZmZjsKKy0JCWgxICs9IChnZXRfdW5hbGlnbmVkX2xlMzIoc3JjICsgIDMpID4+IDIpICYgMHgzZmZmZmZmOworLQkJaDIgKz0gKGdldF91bmFsaWduZWRfbGUzMihzcmMgKyAgNikgPj4gNCkgJiAweDNmZmZmZmY7CistCQloMyArPSAoZ2V0X3VuYWxpZ25lZF9sZTMyKHNyYyArICA5KSA+PiA2KSAmIDB4M2ZmZmZmZjsKKy0JCWg0ICs9IChnZXRfdW5hbGlnbmVkX2xlMzIoc3JjICsgMTIpID4+IDgpIHwgaGliaXQ7CistCistCQkvKiBoICo9IHIgKi8KKy0JCWQwID0gbWx0KGgwLCByMCkgKyBtbHQoaDEsIHM0KSArIG1sdChoMiwgczMpICsKKy0JCSAgICAgbWx0KGgzLCBzMikgKyBtbHQoaDQsIHMxKTsKKy0JCWQxID0gbWx0KGgwLCByMSkgKyBtbHQoaDEsIHIwKSArIG1sdChoMiwgczQpICsKKy0JCSAgICAgbWx0KGgzLCBzMykgKyBtbHQoaDQsIHMyKTsKKy0JCWQyID0gbWx0KGgwLCByMikgKyBtbHQoaDEsIHIxKSArIG1sdChoMiwgcjApICsKKy0JCSAgICAgbWx0KGgzLCBzNCkgKyBtbHQoaDQsIHMzKTsKKy0JCWQzID0gbWx0KGgwLCByMykgKyBtbHQoaDEsIHIyKSArIG1sdChoMiwgcjEpICsKKy0JCSAgICAgbWx0KGgzLCByMCkgKyBtbHQoaDQsIHM0KTsKKy0JCWQ0ID0gbWx0KGgwLCByNCkgKyBtbHQoaDEsIHIzKSArIG1sdChoMiwgcjIpICsKKy0JCSAgICAgbWx0KGgzLCByMSkgKyBtbHQoaDQsIHIwKTsKKy0KKy0JCS8qIChwYXJ0aWFsKSBoICU9IHAgKi8KKy0JCWQxICs9IHNyKGQwLCAyNik7ICAgICBoMCA9IGFuZChkMCwgMHgzZmZmZmZmKTsKKy0JCWQyICs9IHNyKGQxLCAyNik7ICAgICBoMSA9IGFuZChkMSwgMHgzZmZmZmZmKTsKKy0JCWQzICs9IHNyKGQyLCAyNik7ICAgICBoMiA9IGFuZChkMiwgMHgzZmZmZmZmKTsKKy0JCWQ0ICs9IHNyKGQzLCAyNik7ICAgICBoMyA9IGFuZChkMywgMHgzZmZmZmZmKTsKKy0JCWgwICs9IHNyKGQ0LCAyNikgKiA1OyBoNCA9IGFuZChkNCwgMHgzZmZmZmZmKTsKKy0JCWgxICs9IGgwID4+IDI2OyAgICAgICBoMCA9IGgwICYgMHgzZmZmZmZmOworLQorLQkJc3JjICs9IFBPTFkxMzA1X0JMT0NLX1NJWkU7CistCX0gd2hpbGUgKC0tbmJsb2Nrcyk7CistCistCXN0YXRlLT5oWzBdID0gaDA7CistCXN0YXRlLT5oWzFdID0gaDE7CistCXN0YXRlLT5oWzJdID0gaDI7CistCXN0YXRlLT5oWzNdID0gaDM7CistCXN0YXRlLT5oWzRdID0gaDQ7CistfQorLQorLXZvaWQgcG9seTEzMDVfY29yZV9ibG9ja3Moc3RydWN0IHBvbHkxMzA1X3N0YXRlICpzdGF0ZSwKKy0JCQkgIGNvbnN0IHN0cnVjdCBwb2x5MTMwNV9rZXkgKmtleSwKKy0JCQkgIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgaW50IG5ibG9ja3MpCisteworLQlwb2x5MTMwNV9ibG9ja3NfaW50ZXJuYWwoc3RhdGUsIGtleSwgc3JjLCBuYmxvY2tzLCAxIDw8IDI0KTsKKy19CistRVhQT1JUX1NZTUJPTF9HUEwocG9seTEzMDVfY29yZV9ibG9ja3MpOworLQorLXN0YXRpYyB2b2lkIHBvbHkxMzA1X2Jsb2NrcyhzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRjdHgsCistCQkJICAgIGNvbnN0IHU4ICpzcmMsIHVuc2lnbmVkIGludCBzcmNsZW4sIHUzMiBoaWJpdCkKKytzdGF0aWMgdm9pZCBwb2x5MTMwNV9ibG9ja3Moc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4ICpkY3R4LCBjb25zdCB1OCAqc3JjLAorKwkJCSAgICB1bnNpZ25lZCBpbnQgc3JjbGVuKQorIHsKKyAJdW5zaWduZWQgaW50IGRhdGFsZW47CisgCitAQCAtMTc0LDggKzQzLDggQEAgc3RhdGljIHZvaWQgcG9seTEzMDVfYmxvY2tzKHN0cnVjdCBwb2x5MQorIAkJc3JjbGVuID0gZGF0YWxlbjsKKyAJfQorIAorLQlwb2x5MTMwNV9ibG9ja3NfaW50ZXJuYWwoJmRjdHgtPmgsICZkY3R4LT5yLAorLQkJCQkgc3JjLCBzcmNsZW4gLyBQT0xZMTMwNV9CTE9DS19TSVpFLCBoaWJpdCk7CisrCXBvbHkxMzA1X2NvcmVfYmxvY2tzKCZkY3R4LT5oLCAmZGN0eC0+ciwgc3JjLAorKwkJCSAgICAgc3JjbGVuIC8gUE9MWTEzMDVfQkxPQ0tfU0laRSwgMSk7CisgfQorIAorIGludCBjcnlwdG9fcG9seTEzMDVfdXBkYXRlKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLAorQEAgLTE5MywxMyArNjIsMTMgQEAgaW50IGNyeXB0b19wb2x5MTMwNV91cGRhdGUoc3RydWN0IHNoYXNoXworIAorIAkJaWYgKGRjdHgtPmJ1ZmxlbiA9PSBQT0xZMTMwNV9CTE9DS19TSVpFKSB7CisgCQkJcG9seTEzMDVfYmxvY2tzKGRjdHgsIGRjdHgtPmJ1ZiwKKy0JCQkJCVBPTFkxMzA1X0JMT0NLX1NJWkUsIDEgPDwgMjQpOworKwkJCQkJUE9MWTEzMDVfQkxPQ0tfU0laRSk7CisgCQkJZGN0eC0+YnVmbGVuID0gMDsKKyAJCX0KKyAJfQorIAorIAlpZiAobGlrZWx5KHNyY2xlbiA+PSBQT0xZMTMwNV9CTE9DS19TSVpFKSkgeworLQkJcG9seTEzMDVfYmxvY2tzKGRjdHgsIHNyYywgc3JjbGVuLCAxIDw8IDI0KTsKKysJCXBvbHkxMzA1X2Jsb2NrcyhkY3R4LCBzcmMsIHNyY2xlbik7CisgCQlzcmMgKz0gc3JjbGVuIC0gKHNyY2xlbiAlIFBPTFkxMzA1X0JMT0NLX1NJWkUpOworIAkJc3JjbGVuICU9IFBPTFkxMzA1X0JMT0NLX1NJWkU7CisgCX0KK0BAIC0yMTMsNTQgKzgyLDYgQEAgaW50IGNyeXB0b19wb2x5MTMwNV91cGRhdGUoc3RydWN0IHNoYXNoXworIH0KKyBFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fcG9seTEzMDVfdXBkYXRlKTsKKyAKKy12b2lkIHBvbHkxMzA1X2NvcmVfZW1pdChjb25zdCBzdHJ1Y3QgcG9seTEzMDVfc3RhdGUgKnN0YXRlLCB2b2lkICpkc3QpCisteworLQl1MzIgaDAsIGgxLCBoMiwgaDMsIGg0OworLQl1MzIgZzAsIGcxLCBnMiwgZzMsIGc0OworLQl1MzIgbWFzazsKKy0KKy0JLyogZnVsbHkgY2FycnkgaCAqLworLQloMCA9IHN0YXRlLT5oWzBdOworLQloMSA9IHN0YXRlLT5oWzFdOworLQloMiA9IHN0YXRlLT5oWzJdOworLQloMyA9IHN0YXRlLT5oWzNdOworLQloNCA9IHN0YXRlLT5oWzRdOworLQorLQloMiArPSAoaDEgPj4gMjYpOyAgICAgaDEgPSBoMSAmIDB4M2ZmZmZmZjsKKy0JaDMgKz0gKGgyID4+IDI2KTsgICAgIGgyID0gaDIgJiAweDNmZmZmZmY7CistCWg0ICs9IChoMyA+PiAyNik7ICAgICBoMyA9IGgzICYgMHgzZmZmZmZmOworLQloMCArPSAoaDQgPj4gMjYpICogNTsgaDQgPSBoNCAmIDB4M2ZmZmZmZjsKKy0JaDEgKz0gKGgwID4+IDI2KTsgICAgIGgwID0gaDAgJiAweDNmZmZmZmY7CistCistCS8qIGNvbXB1dGUgaCArIC1wICovCistCWcwID0gaDAgKyA1OworLQlnMSA9IGgxICsgKGcwID4+IDI2KTsgICAgICAgICAgICAgZzAgJj0gMHgzZmZmZmZmOworLQlnMiA9IGgyICsgKGcxID4+IDI2KTsgICAgICAgICAgICAgZzEgJj0gMHgzZmZmZmZmOworLQlnMyA9IGgzICsgKGcyID4+IDI2KTsgICAgICAgICAgICAgZzIgJj0gMHgzZmZmZmZmOworLQlnNCA9IGg0ICsgKGczID4+IDI2KSAtICgxIDw8IDI2KTsgZzMgJj0gMHgzZmZmZmZmOworLQorLQkvKiBzZWxlY3QgaCBpZiBoIDwgcCwgb3IgaCArIC1wIGlmIGggPj0gcCAqLworLQltYXNrID0gKGc0ID4+ICgoc2l6ZW9mKHUzMikgKiA4KSAtIDEpKSAtIDE7CistCWcwICY9IG1hc2s7CistCWcxICY9IG1hc2s7CistCWcyICY9IG1hc2s7CistCWczICY9IG1hc2s7CistCWc0ICY9IG1hc2s7CistCW1hc2sgPSB+bWFzazsKKy0JaDAgPSAoaDAgJiBtYXNrKSB8IGcwOworLQloMSA9IChoMSAmIG1hc2spIHwgZzE7CistCWgyID0gKGgyICYgbWFzaykgfCBnMjsKKy0JaDMgPSAoaDMgJiBtYXNrKSB8IGczOworLQloNCA9IChoNCAmIG1hc2spIHwgZzQ7CistCistCS8qIGggPSBoICUgKDJeMTI4KSAqLworLQlwdXRfdW5hbGlnbmVkX2xlMzIoKGgwID4+ICAwKSB8IChoMSA8PCAyNiksIGRzdCArICAwKTsKKy0JcHV0X3VuYWxpZ25lZF9sZTMyKChoMSA+PiAgNikgfCAoaDIgPDwgMjApLCBkc3QgKyAgNCk7CistCXB1dF91bmFsaWduZWRfbGUzMigoaDIgPj4gMTIpIHwgKGgzIDw8IDE0KSwgZHN0ICsgIDgpOworLQlwdXRfdW5hbGlnbmVkX2xlMzIoKGgzID4+IDE4KSB8IChoNCA8PCAgOCksIGRzdCArIDEyKTsKKy19CistRVhQT1JUX1NZTUJPTF9HUEwocG9seTEzMDVfY29yZV9lbWl0KTsKKy0KKyBpbnQgY3J5cHRvX3BvbHkxMzA1X2ZpbmFsKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCB1OCAqZHN0KQorIHsKKyAJc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4ICpkY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CitAQCAtMjc0LDcgKzk1LDcgQEAgaW50IGNyeXB0b19wb2x5MTMwNV9maW5hbChzdHJ1Y3Qgc2hhc2hfZAorIAkJZGN0eC0+YnVmW2RjdHgtPmJ1ZmxlbisrXSA9IDE7CisgCQltZW1zZXQoZGN0eC0+YnVmICsgZGN0eC0+YnVmbGVuLCAwLAorIAkJICAgICAgIFBPTFkxMzA1X0JMT0NLX1NJWkUgLSBkY3R4LT5idWZsZW4pOworLQkJcG9seTEzMDVfYmxvY2tzKGRjdHgsIGRjdHgtPmJ1ZiwgUE9MWTEzMDVfQkxPQ0tfU0laRSwgMCk7CisrCQlwb2x5MTMwNV9jb3JlX2Jsb2NrcygmZGN0eC0+aCwgJmRjdHgtPnIsIGRjdHgtPmJ1ZiwgMSwgMCk7CisgCX0KKyAKKyAJcG9seTEzMDVfY29yZV9lbWl0KCZkY3R4LT5oLCBkaWdlc3QpOworLS0tIC9kZXYvbnVsbAorKysrIGIvaW5jbHVkZS9jcnlwdG8vaW50ZXJuYWwvcG9seTEzMDUuaAorQEAgLTAsMCArMSw2NyBAQAorKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisrLyoKKysgKiBDb21tb24gdmFsdWVzIGZvciB0aGUgUG9seTEzMDUgYWxnb3JpdGhtCisrICovCisrCisrI2lmbmRlZiBfQ1JZUFRPX0lOVEVSTkFMX1BPTFkxMzA1X0gKKysjZGVmaW5lIF9DUllQVE9fSU5URVJOQUxfUE9MWTEzMDVfSAorKworKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisrI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisrI2luY2x1ZGUgPGNyeXB0by9wb2x5MTMwNS5oPgorKworK3N0cnVjdCBzaGFzaF9kZXNjOworKworKy8qCisrICogUG9seTEzMDUgY29yZSBmdW5jdGlvbnMuICBUaGVzZSBpbXBsZW1lbnQgdGhlIM61LWFsbW9zdC3iiIYtdW5pdmVyc2FsIGhhc2gKKysgKiBmdW5jdGlvbiB1bmRlcmx5aW5nIHRoZSBQb2x5MTMwNSBNQUMsIGkuZS4gdGhleSBkb24ndCBhZGQgYW4gZW5jcnlwdGVkIG5vbmNlCisrICogKCJzIGtleSIpIGF0IHRoZSBlbmQuICBUaGV5IGFsc28gb25seSBzdXBwb3J0IGJsb2NrLWFsaWduZWQgaW5wdXRzLgorKyAqLworK3ZvaWQgcG9seTEzMDVfY29yZV9zZXRrZXkoc3RydWN0IHBvbHkxMzA1X2tleSAqa2V5LCBjb25zdCB1OCAqcmF3X2tleSk7Cisrc3RhdGljIGlubGluZSB2b2lkIHBvbHkxMzA1X2NvcmVfaW5pdChzdHJ1Y3QgcG9seTEzMDVfc3RhdGUgKnN0YXRlKQorK3sKKysJKnN0YXRlID0gKHN0cnVjdCBwb2x5MTMwNV9zdGF0ZSl7fTsKKyt9CisrCisrdm9pZCBwb2x5MTMwNV9jb3JlX2Jsb2NrcyhzdHJ1Y3QgcG9seTEzMDVfc3RhdGUgKnN0YXRlLAorKwkJCSAgY29uc3Qgc3RydWN0IHBvbHkxMzA1X2tleSAqa2V5LCBjb25zdCB2b2lkICpzcmMsCisrCQkJICB1bnNpZ25lZCBpbnQgbmJsb2NrcywgdTMyIGhpYml0KTsKKyt2b2lkIHBvbHkxMzA1X2NvcmVfZW1pdChjb25zdCBzdHJ1Y3QgcG9seTEzMDVfc3RhdGUgKnN0YXRlLCB2b2lkICpkc3QpOworKworKy8qIENyeXB0byBBUEkgaGVscGVyIGZ1bmN0aW9ucyBmb3IgdGhlIFBvbHkxMzA1IE1BQyAqLworK2ludCBjcnlwdG9fcG9seTEzMDVfaW5pdChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYyk7CisrCisraW50IGNyeXB0b19wb2x5MTMwNV91cGRhdGUoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsCisrCQkJICAgY29uc3QgdTggKnNyYywgdW5zaWduZWQgaW50IHNyY2xlbik7CisraW50IGNyeXB0b19wb2x5MTMwNV9maW5hbChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgdTggKmRzdCk7CisrCisrLyoKKysgKiBQb2x5MTMwNSByZXF1aXJlcyBhIHVuaXF1ZSBrZXkgZm9yIGVhY2ggdGFnLCB3aGljaCBpbXBsaWVzIHRoYXQgd2UgY2FuJ3Qgc2V0CisrICogaXQgb24gdGhlIHRmbSB0aGF0IGdldHMgYWNjZXNzZWQgYnkgbXVsdGlwbGUgdXNlcnMgc2ltdWx0YW5lb3VzbHkuIEluc3RlYWQgd2UKKysgKiBleHBlY3QgdGhlIGtleSBhcyB0aGUgZmlyc3QgMzIgYnl0ZXMgaW4gdGhlIHVwZGF0ZSgpIGNhbGwuCisrICovCisrc3RhdGljIGlubGluZQorK3Vuc2lnbmVkIGludCBjcnlwdG9fcG9seTEzMDVfc2V0ZGVzY2tleShzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRjdHgsCisrCQkJCQljb25zdCB1OCAqc3JjLCB1bnNpZ25lZCBpbnQgc3JjbGVuKQorK3sKKysJaWYgKCFkY3R4LT5zc2V0KSB7CisrCQlpZiAoIWRjdHgtPnJzZXQgJiYgc3JjbGVuID49IFBPTFkxMzA1X0JMT0NLX1NJWkUpIHsKKysJCQlwb2x5MTMwNV9jb3JlX3NldGtleSgmZGN0eC0+ciwgc3JjKTsKKysJCQlzcmMgKz0gUE9MWTEzMDVfQkxPQ0tfU0laRTsKKysJCQlzcmNsZW4gLT0gUE9MWTEzMDVfQkxPQ0tfU0laRTsKKysJCQlkY3R4LT5yc2V0ID0gdHJ1ZTsKKysJCX0KKysJCWlmIChzcmNsZW4gPj0gUE9MWTEzMDVfQkxPQ0tfU0laRSkgeworKwkJCWRjdHgtPnNbMF0gPSBnZXRfdW5hbGlnbmVkX2xlMzIoc3JjICsgIDApOworKwkJCWRjdHgtPnNbMV0gPSBnZXRfdW5hbGlnbmVkX2xlMzIoc3JjICsgIDQpOworKwkJCWRjdHgtPnNbMl0gPSBnZXRfdW5hbGlnbmVkX2xlMzIoc3JjICsgIDgpOworKwkJCWRjdHgtPnNbM10gPSBnZXRfdW5hbGlnbmVkX2xlMzIoc3JjICsgMTIpOworKwkJCXNyYyArPSBQT0xZMTMwNV9CTE9DS19TSVpFOworKwkJCXNyY2xlbiAtPSBQT0xZMTMwNV9CTE9DS19TSVpFOworKwkJCWRjdHgtPnNzZXQgPSB0cnVlOworKwkJfQorKwl9CisrCXJldHVybiBzcmNsZW47CisrfQorKworKyNlbmRpZgorLS0tIGEvaW5jbHVkZS9jcnlwdG8vcG9seTEzMDUuaAorKysrIGIvaW5jbHVkZS9jcnlwdG8vcG9seTEzMDUuaAorQEAgLTM4LDI3ICszOCw0IEBAIHN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCB7CisgCWJvb2wgc3NldDsKKyB9OworIAorLS8qCistICogUG9seTEzMDUgY29yZSBmdW5jdGlvbnMuICBUaGVzZSBpbXBsZW1lbnQgdGhlIM61LWFsbW9zdC3iiIYtdW5pdmVyc2FsIGhhc2gKKy0gKiBmdW5jdGlvbiB1bmRlcmx5aW5nIHRoZSBQb2x5MTMwNSBNQUMsIGkuZS4gdGhleSBkb24ndCBhZGQgYW4gZW5jcnlwdGVkIG5vbmNlCistICogKCJzIGtleSIpIGF0IHRoZSBlbmQuICBUaGV5IGFsc28gb25seSBzdXBwb3J0IGJsb2NrLWFsaWduZWQgaW5wdXRzLgorLSAqLworLXZvaWQgcG9seTEzMDVfY29yZV9zZXRrZXkoc3RydWN0IHBvbHkxMzA1X2tleSAqa2V5LCBjb25zdCB1OCAqcmF3X2tleSk7Cistc3RhdGljIGlubGluZSB2b2lkIHBvbHkxMzA1X2NvcmVfaW5pdChzdHJ1Y3QgcG9seTEzMDVfc3RhdGUgKnN0YXRlKQorLXsKKy0JbWVtc2V0KHN0YXRlLT5oLCAwLCBzaXplb2Yoc3RhdGUtPmgpKTsKKy19Cistdm9pZCBwb2x5MTMwNV9jb3JlX2Jsb2NrcyhzdHJ1Y3QgcG9seTEzMDVfc3RhdGUgKnN0YXRlLAorLQkJCSAgY29uc3Qgc3RydWN0IHBvbHkxMzA1X2tleSAqa2V5LAorLQkJCSAgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBpbnQgbmJsb2Nrcyk7Cistdm9pZCBwb2x5MTMwNV9jb3JlX2VtaXQoY29uc3Qgc3RydWN0IHBvbHkxMzA1X3N0YXRlICpzdGF0ZSwgdm9pZCAqZHN0KTsKKy0KKy0vKiBDcnlwdG8gQVBJIGhlbHBlciBmdW5jdGlvbnMgZm9yIHRoZSBQb2x5MTMwNSBNQUMgKi8KKy1pbnQgY3J5cHRvX3BvbHkxMzA1X2luaXQoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MpOworLXVuc2lnbmVkIGludCBjcnlwdG9fcG9seTEzMDVfc2V0ZGVzY2tleShzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRjdHgsCistCQkJCQljb25zdCB1OCAqc3JjLCB1bnNpZ25lZCBpbnQgc3JjbGVuKTsKKy1pbnQgY3J5cHRvX3BvbHkxMzA1X3VwZGF0ZShzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywKKy0JCQkgICBjb25zdCB1OCAqc3JjLCB1bnNpZ25lZCBpbnQgc3JjbGVuKTsKKy1pbnQgY3J5cHRvX3BvbHkxMzA1X2ZpbmFsKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCB1OCAqZHN0KTsKKy0KKyAjZW5kaWYKKy0tLSBhL2xpYi9jcnlwdG8vS2NvbmZpZworKysrIGIvbGliL2NyeXB0by9LY29uZmlnCitAQCAtMzcsNSArMzcsOCBAQCBjb25maWcgQ1JZUFRPX0xJQl9DSEFDSEEKKyBjb25maWcgQ1JZUFRPX0xJQl9ERVMKKyAJdHJpc3RhdGUKKyAKKytjb25maWcgQ1JZUFRPX0xJQl9QT0xZMTMwNV9HRU5FUklDCisrCXRyaXN0YXRlCisrCisgY29uZmlnIENSWVBUT19MSUJfU0hBMjU2CisgCXRyaXN0YXRlCistLS0gYS9saWIvY3J5cHRvL01ha2VmaWxlCisrKysgYi9saWIvY3J5cHRvL01ha2VmaWxlCitAQCAtMTMsNSArMTMsOCBAQCBsaWJhcmM0LXkJCQkJCTo9IGFyYzQubworIG9iai0kKENPTkZJR19DUllQVE9fTElCX0RFUykJCQkrPSBsaWJkZXMubworIGxpYmRlcy15CQkJCQk6PSBkZXMubworIAorK29iai0kKENPTkZJR19DUllQVE9fTElCX1BPTFkxMzA1X0dFTkVSSUMpCSs9IGxpYnBvbHkxMzA1Lm8KKytsaWJwb2x5MTMwNS15CQkJCQk6PSBwb2x5MTMwNS5vCisrCisgb2JqLSQoQ09ORklHX0NSWVBUT19MSUJfU0hBMjU2KQkJCSs9IGxpYnNoYTI1Ni5vCisgbGlic2hhMjU2LXkJCQkJCTo9IHNoYTI1Ni5vCistLS0gL2Rldi9udWxsCisrKysgYi9saWIvY3J5cHRvL3BvbHkxMzA1LmMKK0BAIC0wLDAgKzEsMTU4IEBACisrLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKKysvKgorKyAqIFBvbHkxMzA1IGF1dGhlbnRpY2F0b3IgYWxnb3JpdGhtLCBSRkM3NTM5CisrICoKKysgKiBDb3B5cmlnaHQgKEMpIDIwMTUgTWFydGluIFdpbGxpCisrICoKKysgKiBCYXNlZCBvbiBwdWJsaWMgZG9tYWluIGNvZGUgYnkgQW5kcmV3IE1vb24gYW5kIERhbmllbCBKLiBCZXJuc3RlaW4uCisrICovCisrCisrI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9wb2x5MTMwNS5oPgorKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKysjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisrI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKysKKytzdGF0aWMgaW5saW5lIHU2NCBtbHQodTY0IGEsIHU2NCBiKQorK3sKKysJcmV0dXJuIGEgKiBiOworK30KKysKKytzdGF0aWMgaW5saW5lIHUzMiBzcih1NjQgdiwgdV9jaGFyIG4pCisreworKwlyZXR1cm4gdiA+PiBuOworK30KKysKKytzdGF0aWMgaW5saW5lIHUzMiBhbmQodTMyIHYsIHUzMiBtYXNrKQorK3sKKysJcmV0dXJuIHYgJiBtYXNrOworK30KKysKKyt2b2lkIHBvbHkxMzA1X2NvcmVfc2V0a2V5KHN0cnVjdCBwb2x5MTMwNV9rZXkgKmtleSwgY29uc3QgdTggKnJhd19rZXkpCisreworKwkvKiByICY9IDB4ZmZmZmZmYzBmZmZmZmZjMGZmZmZmZmMwZmZmZmZmZiAqLworKwlrZXktPnJbMF0gPSAoZ2V0X3VuYWxpZ25lZF9sZTMyKHJhd19rZXkgKyAgMCkgPj4gMCkgJiAweDNmZmZmZmY7CisrCWtleS0+clsxXSA9IChnZXRfdW5hbGlnbmVkX2xlMzIocmF3X2tleSArICAzKSA+PiAyKSAmIDB4M2ZmZmYwMzsKKysJa2V5LT5yWzJdID0gKGdldF91bmFsaWduZWRfbGUzMihyYXdfa2V5ICsgIDYpID4+IDQpICYgMHgzZmZjMGZmOworKwlrZXktPnJbM10gPSAoZ2V0X3VuYWxpZ25lZF9sZTMyKHJhd19rZXkgKyAgOSkgPj4gNikgJiAweDNmMDNmZmY7CisrCWtleS0+cls0XSA9IChnZXRfdW5hbGlnbmVkX2xlMzIocmF3X2tleSArIDEyKSA+PiA4KSAmIDB4MDBmZmZmZjsKKyt9CisrRVhQT1JUX1NZTUJPTF9HUEwocG9seTEzMDVfY29yZV9zZXRrZXkpOworKworK3ZvaWQgcG9seTEzMDVfY29yZV9ibG9ja3Moc3RydWN0IHBvbHkxMzA1X3N0YXRlICpzdGF0ZSwKKysJCQkgIGNvbnN0IHN0cnVjdCBwb2x5MTMwNV9rZXkgKmtleSwgY29uc3Qgdm9pZCAqc3JjLAorKwkJCSAgdW5zaWduZWQgaW50IG5ibG9ja3MsIHUzMiBoaWJpdCkKKyt7CisrCXUzMiByMCwgcjEsIHIyLCByMywgcjQ7CisrCXUzMiBzMSwgczIsIHMzLCBzNDsKKysJdTMyIGgwLCBoMSwgaDIsIGgzLCBoNDsKKysJdTY0IGQwLCBkMSwgZDIsIGQzLCBkNDsKKysKKysJaWYgKCFuYmxvY2tzKQorKwkJcmV0dXJuOworKworKwlyMCA9IGtleS0+clswXTsKKysJcjEgPSBrZXktPnJbMV07CisrCXIyID0ga2V5LT5yWzJdOworKwlyMyA9IGtleS0+clszXTsKKysJcjQgPSBrZXktPnJbNF07CisrCisrCXMxID0gcjEgKiA1OworKwlzMiA9IHIyICogNTsKKysJczMgPSByMyAqIDU7CisrCXM0ID0gcjQgKiA1OworKworKwloMCA9IHN0YXRlLT5oWzBdOworKwloMSA9IHN0YXRlLT5oWzFdOworKwloMiA9IHN0YXRlLT5oWzJdOworKwloMyA9IHN0YXRlLT5oWzNdOworKwloNCA9IHN0YXRlLT5oWzRdOworKworKwlkbyB7CisrCQkvKiBoICs9IG1baV0gKi8KKysJCWgwICs9IChnZXRfdW5hbGlnbmVkX2xlMzIoc3JjICsgIDApID4+IDApICYgMHgzZmZmZmZmOworKwkJaDEgKz0gKGdldF91bmFsaWduZWRfbGUzMihzcmMgKyAgMykgPj4gMikgJiAweDNmZmZmZmY7CisrCQloMiArPSAoZ2V0X3VuYWxpZ25lZF9sZTMyKHNyYyArICA2KSA+PiA0KSAmIDB4M2ZmZmZmZjsKKysJCWgzICs9IChnZXRfdW5hbGlnbmVkX2xlMzIoc3JjICsgIDkpID4+IDYpICYgMHgzZmZmZmZmOworKwkJaDQgKz0gKGdldF91bmFsaWduZWRfbGUzMihzcmMgKyAxMikgPj4gOCkgfCAoaGliaXQgPDwgMjQpOworKworKwkJLyogaCAqPSByICovCisrCQlkMCA9IG1sdChoMCwgcjApICsgbWx0KGgxLCBzNCkgKyBtbHQoaDIsIHMzKSArCisrCQkgICAgIG1sdChoMywgczIpICsgbWx0KGg0LCBzMSk7CisrCQlkMSA9IG1sdChoMCwgcjEpICsgbWx0KGgxLCByMCkgKyBtbHQoaDIsIHM0KSArCisrCQkgICAgIG1sdChoMywgczMpICsgbWx0KGg0LCBzMik7CisrCQlkMiA9IG1sdChoMCwgcjIpICsgbWx0KGgxLCByMSkgKyBtbHQoaDIsIHIwKSArCisrCQkgICAgIG1sdChoMywgczQpICsgbWx0KGg0LCBzMyk7CisrCQlkMyA9IG1sdChoMCwgcjMpICsgbWx0KGgxLCByMikgKyBtbHQoaDIsIHIxKSArCisrCQkgICAgIG1sdChoMywgcjApICsgbWx0KGg0LCBzNCk7CisrCQlkNCA9IG1sdChoMCwgcjQpICsgbWx0KGgxLCByMykgKyBtbHQoaDIsIHIyKSArCisrCQkgICAgIG1sdChoMywgcjEpICsgbWx0KGg0LCByMCk7CisrCisrCQkvKiAocGFydGlhbCkgaCAlPSBwICovCisrCQlkMSArPSBzcihkMCwgMjYpOyAgICAgaDAgPSBhbmQoZDAsIDB4M2ZmZmZmZik7CisrCQlkMiArPSBzcihkMSwgMjYpOyAgICAgaDEgPSBhbmQoZDEsIDB4M2ZmZmZmZik7CisrCQlkMyArPSBzcihkMiwgMjYpOyAgICAgaDIgPSBhbmQoZDIsIDB4M2ZmZmZmZik7CisrCQlkNCArPSBzcihkMywgMjYpOyAgICAgaDMgPSBhbmQoZDMsIDB4M2ZmZmZmZik7CisrCQloMCArPSBzcihkNCwgMjYpICogNTsgaDQgPSBhbmQoZDQsIDB4M2ZmZmZmZik7CisrCQloMSArPSBoMCA+PiAyNjsgICAgICAgaDAgPSBoMCAmIDB4M2ZmZmZmZjsKKysKKysJCXNyYyArPSBQT0xZMTMwNV9CTE9DS19TSVpFOworKwl9IHdoaWxlICgtLW5ibG9ja3MpOworKworKwlzdGF0ZS0+aFswXSA9IGgwOworKwlzdGF0ZS0+aFsxXSA9IGgxOworKwlzdGF0ZS0+aFsyXSA9IGgyOworKwlzdGF0ZS0+aFszXSA9IGgzOworKwlzdGF0ZS0+aFs0XSA9IGg0OworK30KKytFWFBPUlRfU1lNQk9MX0dQTChwb2x5MTMwNV9jb3JlX2Jsb2Nrcyk7CisrCisrdm9pZCBwb2x5MTMwNV9jb3JlX2VtaXQoY29uc3Qgc3RydWN0IHBvbHkxMzA1X3N0YXRlICpzdGF0ZSwgdm9pZCAqZHN0KQorK3sKKysJdTMyIGgwLCBoMSwgaDIsIGgzLCBoNDsKKysJdTMyIGcwLCBnMSwgZzIsIGczLCBnNDsKKysJdTMyIG1hc2s7CisrCisrCS8qIGZ1bGx5IGNhcnJ5IGggKi8KKysJaDAgPSBzdGF0ZS0+aFswXTsKKysJaDEgPSBzdGF0ZS0+aFsxXTsKKysJaDIgPSBzdGF0ZS0+aFsyXTsKKysJaDMgPSBzdGF0ZS0+aFszXTsKKysJaDQgPSBzdGF0ZS0+aFs0XTsKKysKKysJaDIgKz0gKGgxID4+IDI2KTsgICAgIGgxID0gaDEgJiAweDNmZmZmZmY7CisrCWgzICs9IChoMiA+PiAyNik7ICAgICBoMiA9IGgyICYgMHgzZmZmZmZmOworKwloNCArPSAoaDMgPj4gMjYpOyAgICAgaDMgPSBoMyAmIDB4M2ZmZmZmZjsKKysJaDAgKz0gKGg0ID4+IDI2KSAqIDU7IGg0ID0gaDQgJiAweDNmZmZmZmY7CisrCWgxICs9IChoMCA+PiAyNik7ICAgICBoMCA9IGgwICYgMHgzZmZmZmZmOworKworKwkvKiBjb21wdXRlIGggKyAtcCAqLworKwlnMCA9IGgwICsgNTsKKysJZzEgPSBoMSArIChnMCA+PiAyNik7ICAgICAgICAgICAgIGcwICY9IDB4M2ZmZmZmZjsKKysJZzIgPSBoMiArIChnMSA+PiAyNik7ICAgICAgICAgICAgIGcxICY9IDB4M2ZmZmZmZjsKKysJZzMgPSBoMyArIChnMiA+PiAyNik7ICAgICAgICAgICAgIGcyICY9IDB4M2ZmZmZmZjsKKysJZzQgPSBoNCArIChnMyA+PiAyNikgLSAoMSA8PCAyNik7IGczICY9IDB4M2ZmZmZmZjsKKysKKysJLyogc2VsZWN0IGggaWYgaCA8IHAsIG9yIGggKyAtcCBpZiBoID49IHAgKi8KKysJbWFzayA9IChnNCA+PiAoKHNpemVvZih1MzIpICogOCkgLSAxKSkgLSAxOworKwlnMCAmPSBtYXNrOworKwlnMSAmPSBtYXNrOworKwlnMiAmPSBtYXNrOworKwlnMyAmPSBtYXNrOworKwlnNCAmPSBtYXNrOworKwltYXNrID0gfm1hc2s7CisrCWgwID0gKGgwICYgbWFzaykgfCBnMDsKKysJaDEgPSAoaDEgJiBtYXNrKSB8IGcxOworKwloMiA9IChoMiAmIG1hc2spIHwgZzI7CisrCWgzID0gKGgzICYgbWFzaykgfCBnMzsKKysJaDQgPSAoaDQgJiBtYXNrKSB8IGc0OworKworKwkvKiBoID0gaCAlICgyXjEyOCkgKi8KKysJcHV0X3VuYWxpZ25lZF9sZTMyKChoMCA+PiAgMCkgfCAoaDEgPDwgMjYpLCBkc3QgKyAgMCk7CisrCXB1dF91bmFsaWduZWRfbGUzMigoaDEgPj4gIDYpIHwgKGgyIDw8IDIwKSwgZHN0ICsgIDQpOworKwlwdXRfdW5hbGlnbmVkX2xlMzIoKGgyID4+IDEyKSB8IChoMyA8PCAxNCksIGRzdCArICA4KTsKKysJcHV0X3VuYWxpZ25lZF9sZTMyKChoMyA+PiAxOCkgfCAoaDQgPDwgIDgpLCBkc3QgKyAxMik7CisrfQorK0VYUE9SVF9TWU1CT0xfR1BMKHBvbHkxMzA1X2NvcmVfZW1pdCk7CisrCisrTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworK01PRFVMRV9BVVRIT1IoIk1hcnRpbiBXaWxsaSA8bWFydGluQHN0cm9uZ3N3YW4ub3JnPiIpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAxNC1jcnlwdG8teDg2LXBvbHkxMzA1LXVuaWZ5LVBvbHkxMzA1LXN0YXRlLXN0cnVjdC13aXRoLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAxNC1jcnlwdG8teDg2LXBvbHkxMzA1LXVuaWZ5LVBvbHkxMzA1LXN0YXRlLXN0cnVjdC13aXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMjM3NTQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDE0LWNyeXB0by14ODYtcG9seTEzMDUtdW5pZnktUG9seTEzMDUtc3RhdGUtc3RydWN0LXdpdGgucGF0Y2gKQEAgLTAsMCArMSwyNTEgQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFyZCBCaWVzaGV1dmVsIDxhcmRiQGtlcm5lbC5vcmc+CitEYXRlOiBGcmksIDggTm92IDIwMTkgMTM6MjI6MjAgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gY3J5cHRvOiB4ODYvcG9seTEzMDUgLSB1bmlmeSBQb2x5MTMwNSBzdGF0ZSBzdHJ1Y3Qgd2l0aAorIGdlbmVyaWMgY29kZQorCitjb21taXQgYWQ4ZjViODgzODNlYTY4NWYyYjhkZjJhMTJlZTNlMDgwODlhMTI4NyB1cHN0cmVhbS4KKworSW4gcHJlcGFyYXRpb24gb2YgZXhwb3NpbmcgYSBQb2x5MTMwNSBsaWJyYXJ5IGludGVyZmFjZSBkaXJlY3RseSBmcm9tCit0aGUgYWNjZWxlcmF0ZWQgeDg2IGRyaXZlciwgYWxpZ24gdGhlIHN0YXRlIGRlc2NyaXB0b3Igb2YgdGhlIHg4NiBjb2RlCit3aXRoIHRoZSBvbmUgdXNlZCBieSB0aGUgZ2VuZXJpYyBkcml2ZXIuIFRoaXMgaXMgbmVlZGVkIHRvIG1ha2UgdGhlCitsaWJyYXJ5IGludGVyZmFjZSB1bmlmaWVkIGJldHdlZW4gYWxsIGltcGxlbWVudGF0aW9ucy4KKworU2lnbmVkLW9mZi1ieTogQXJkIEJpZXNoZXV2ZWwgPGFyZGJAa2VybmVsLm9yZz4KK1NpZ25lZC1vZmYtYnk6IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgYXJjaC94ODYvY3J5cHRvL3BvbHkxMzA1X2dsdWUuYyAgICB8IDg4ICsrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLQorIGNyeXB0by9wb2x5MTMwNV9nZW5lcmljLmMgICAgICAgICAgfCAgNiArLQorIGluY2x1ZGUvY3J5cHRvL2ludGVybmFsL3BvbHkxMzA1LmggfCAgNCArLQorIGluY2x1ZGUvY3J5cHRvL3BvbHkxMzA1LmggICAgICAgICAgfCAxOCArKystLS0KKyA0IGZpbGVzIGNoYW5nZWQsIDQzIGluc2VydGlvbnMoKyksIDczIGRlbGV0aW9ucygtKQorCistLS0gYS9hcmNoL3g4Ni9jcnlwdG8vcG9seTEzMDVfZ2x1ZS5jCisrKysgYi9hcmNoL3g4Ni9jcnlwdG8vcG9seTEzMDVfZ2x1ZS5jCitAQCAtMTQsNDAgKzE0LDE0IEBACisgI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorICNpbmNsdWRlIDxhc20vc2ltZC5oPgorIAorLXN0cnVjdCBwb2x5MTMwNV9zaW1kX2Rlc2NfY3R4IHsKKy0Jc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4IGJhc2U7CistCS8qIGRlcml2ZWQga2V5IHUgc2V0PyAqLworLQlib29sIHVzZXQ7CistI2lmZGVmIENPTkZJR19BU19BVlgyCistCS8qIGRlcml2ZWQga2V5cyByXjMsIHJeNCBzZXQ/ICovCistCWJvb2wgd3NldDsKKy0jZW5kaWYKKy0JLyogZGVyaXZlZCBQb2x5MTMwNSBrZXkgcl4yICovCistCXUzMiB1WzVdOworLQkvKiAuLi4gc2lsZW50bHkgYXBwZW5kZWQgcl4zIGFuZCByXjQgd2hlbiB1c2luZyBBVlgyICovCistfTsKKy0KKyBhc21saW5rYWdlIHZvaWQgcG9seTEzMDVfYmxvY2tfc3NlMih1MzIgKmgsIGNvbnN0IHU4ICpzcmMsCisgCQkJCSAgICBjb25zdCB1MzIgKnIsIHVuc2lnbmVkIGludCBibG9ja3MpOworIGFzbWxpbmthZ2Ugdm9pZCBwb2x5MTMwNV8yYmxvY2tfc3NlMih1MzIgKmgsIGNvbnN0IHU4ICpzcmMsIGNvbnN0IHUzMiAqciwKKyAJCQkJICAgICB1bnNpZ25lZCBpbnQgYmxvY2tzLCBjb25zdCB1MzIgKnUpOworLSNpZmRlZiBDT05GSUdfQVNfQVZYMgorIGFzbWxpbmthZ2Ugdm9pZCBwb2x5MTMwNV80YmxvY2tfYXZ4Mih1MzIgKmgsIGNvbnN0IHU4ICpzcmMsIGNvbnN0IHUzMiAqciwKKyAJCQkJICAgICB1bnNpZ25lZCBpbnQgYmxvY2tzLCBjb25zdCB1MzIgKnUpOworLXN0YXRpYyBib29sIHBvbHkxMzA1X3VzZV9hdngyOworLSNlbmRpZgorIAorLXN0YXRpYyBpbnQgcG9seTEzMDVfc2ltZF9pbml0KHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjKQorLXsKKy0Jc3RydWN0IHBvbHkxMzA1X3NpbWRfZGVzY19jdHggKnNjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKy0KKy0Jc2N0eC0+dXNldCA9IGZhbHNlOworLSNpZmRlZiBDT05GSUdfQVNfQVZYMgorLQlzY3R4LT53c2V0ID0gZmFsc2U7CistI2VuZGlmCistCistCXJldHVybiBjcnlwdG9fcG9seTEzMDVfaW5pdChkZXNjKTsKKy19Cisrc3RhdGljIGJvb2wgcG9seTEzMDVfdXNlX2F2eDIgX19yb19hZnRlcl9pbml0OworIAorIHN0YXRpYyB2b2lkIHBvbHkxMzA1X3NpbWRfbXVsdCh1MzIgKmEsIGNvbnN0IHUzMiAqYikKKyB7CitAQCAtNjMsNTMgKzM3LDQ5IEBAIHN0YXRpYyB2b2lkIHBvbHkxMzA1X3NpbWRfbXVsdCh1MzIgKmEsIGMKKyBzdGF0aWMgdW5zaWduZWQgaW50IHBvbHkxMzA1X3NpbWRfYmxvY2tzKHN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCAqZGN0eCwKKyAJCQkJCSBjb25zdCB1OCAqc3JjLCB1bnNpZ25lZCBpbnQgc3JjbGVuKQorIHsKKy0Jc3RydWN0IHBvbHkxMzA1X3NpbWRfZGVzY19jdHggKnNjdHg7CisgCXVuc2lnbmVkIGludCBibG9ja3MsIGRhdGFsZW47CisgCistCUJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgcG9seTEzMDVfc2ltZF9kZXNjX2N0eCwgYmFzZSkpOworLQlzY3R4ID0gY29udGFpbmVyX29mKGRjdHgsIHN0cnVjdCBwb2x5MTMwNV9zaW1kX2Rlc2NfY3R4LCBiYXNlKTsKKy0KKyAJaWYgKHVubGlrZWx5KCFkY3R4LT5zc2V0KSkgeworIAkJZGF0YWxlbiA9IGNyeXB0b19wb2x5MTMwNV9zZXRkZXNja2V5KGRjdHgsIHNyYywgc3JjbGVuKTsKKyAJCXNyYyArPSBzcmNsZW4gLSBkYXRhbGVuOworIAkJc3JjbGVuID0gZGF0YWxlbjsKKyAJfQorIAorLSNpZmRlZiBDT05GSUdfQVNfQVZYMgorLQlpZiAocG9seTEzMDVfdXNlX2F2eDIgJiYgc3JjbGVuID49IFBPTFkxMzA1X0JMT0NLX1NJWkUgKiA0KSB7CistCQlpZiAodW5saWtlbHkoIXNjdHgtPndzZXQpKSB7CistCQkJaWYgKCFzY3R4LT51c2V0KSB7CistCQkJCW1lbWNweShzY3R4LT51LCBkY3R4LT5yLnIsIHNpemVvZihzY3R4LT51KSk7CistCQkJCXBvbHkxMzA1X3NpbWRfbXVsdChzY3R4LT51LCBkY3R4LT5yLnIpOworLQkJCQlzY3R4LT51c2V0ID0gdHJ1ZTsKKysJaWYgKElTX0VOQUJMRUQoQ09ORklHX0FTX0FWWDIpICYmCisrCSAgICBwb2x5MTMwNV91c2VfYXZ4MiAmJgorKwkgICAgc3JjbGVuID49IFBPTFkxMzA1X0JMT0NLX1NJWkUgKiA0KSB7CisrCQlpZiAodW5saWtlbHkoZGN0eC0+cnNldCA8IDQpKSB7CisrCQkJaWYgKGRjdHgtPnJzZXQgPCAyKSB7CisrCQkJCWRjdHgtPnJbMV0gPSBkY3R4LT5yWzBdOworKwkJCQlwb2x5MTMwNV9zaW1kX211bHQoZGN0eC0+clsxXS5yLCBkY3R4LT5yWzBdLnIpOworIAkJCX0KKy0JCQltZW1jcHkoc2N0eC0+dSArIDUsIHNjdHgtPnUsIHNpemVvZihzY3R4LT51KSk7CistCQkJcG9seTEzMDVfc2ltZF9tdWx0KHNjdHgtPnUgKyA1LCBkY3R4LT5yLnIpOworLQkJCW1lbWNweShzY3R4LT51ICsgMTAsIHNjdHgtPnUgKyA1LCBzaXplb2Yoc2N0eC0+dSkpOworLQkJCXBvbHkxMzA1X3NpbWRfbXVsdChzY3R4LT51ICsgMTAsIGRjdHgtPnIucik7CistCQkJc2N0eC0+d3NldCA9IHRydWU7CisrCQkJZGN0eC0+clsyXSA9IGRjdHgtPnJbMV07CisrCQkJcG9seTEzMDVfc2ltZF9tdWx0KGRjdHgtPnJbMl0uciwgZGN0eC0+clswXS5yKTsKKysJCQlkY3R4LT5yWzNdID0gZGN0eC0+clsyXTsKKysJCQlwb2x5MTMwNV9zaW1kX211bHQoZGN0eC0+clszXS5yLCBkY3R4LT5yWzBdLnIpOworKwkJCWRjdHgtPnJzZXQgPSA0OworIAkJfQorIAkJYmxvY2tzID0gc3JjbGVuIC8gKFBPTFkxMzA1X0JMT0NLX1NJWkUgKiA0KTsKKy0JCXBvbHkxMzA1XzRibG9ja19hdngyKGRjdHgtPmguaCwgc3JjLCBkY3R4LT5yLnIsIGJsb2NrcywKKy0JCQkJICAgICBzY3R4LT51KTsKKysJCXBvbHkxMzA1XzRibG9ja19hdngyKGRjdHgtPmguaCwgc3JjLCBkY3R4LT5yWzBdLnIsIGJsb2NrcywKKysJCQkJICAgICBkY3R4LT5yWzFdLnIpOworIAkJc3JjICs9IFBPTFkxMzA1X0JMT0NLX1NJWkUgKiA0ICogYmxvY2tzOworIAkJc3JjbGVuIC09IFBPTFkxMzA1X0JMT0NLX1NJWkUgKiA0ICogYmxvY2tzOworIAl9CistI2VuZGlmCisrCisgCWlmIChsaWtlbHkoc3JjbGVuID49IFBPTFkxMzA1X0JMT0NLX1NJWkUgKiAyKSkgeworLQkJaWYgKHVubGlrZWx5KCFzY3R4LT51c2V0KSkgeworLQkJCW1lbWNweShzY3R4LT51LCBkY3R4LT5yLnIsIHNpemVvZihzY3R4LT51KSk7CistCQkJcG9seTEzMDVfc2ltZF9tdWx0KHNjdHgtPnUsIGRjdHgtPnIucik7CistCQkJc2N0eC0+dXNldCA9IHRydWU7CisrCQlpZiAodW5saWtlbHkoZGN0eC0+cnNldCA8IDIpKSB7CisrCQkJZGN0eC0+clsxXSA9IGRjdHgtPnJbMF07CisrCQkJcG9seTEzMDVfc2ltZF9tdWx0KGRjdHgtPnJbMV0uciwgZGN0eC0+clswXS5yKTsKKysJCQlkY3R4LT5yc2V0ID0gMjsKKyAJCX0KKyAJCWJsb2NrcyA9IHNyY2xlbiAvIChQT0xZMTMwNV9CTE9DS19TSVpFICogMik7CistCQlwb2x5MTMwNV8yYmxvY2tfc3NlMihkY3R4LT5oLmgsIHNyYywgZGN0eC0+ci5yLCBibG9ja3MsCistCQkJCSAgICAgc2N0eC0+dSk7CisrCQlwb2x5MTMwNV8yYmxvY2tfc3NlMihkY3R4LT5oLmgsIHNyYywgZGN0eC0+clswXS5yLAorKwkJCQkgICAgIGJsb2NrcywgZGN0eC0+clsxXS5yKTsKKyAJCXNyYyArPSBQT0xZMTMwNV9CTE9DS19TSVpFICogMiAqIGJsb2NrczsKKyAJCXNyY2xlbiAtPSBQT0xZMTMwNV9CTE9DS19TSVpFICogMiAqIGJsb2NrczsKKyAJfQorIAlpZiAoc3JjbGVuID49IFBPTFkxMzA1X0JMT0NLX1NJWkUpIHsKKy0JCXBvbHkxMzA1X2Jsb2NrX3NzZTIoZGN0eC0+aC5oLCBzcmMsIGRjdHgtPnIuciwgMSk7CisrCQlwb2x5MTMwNV9ibG9ja19zc2UyKGRjdHgtPmguaCwgc3JjLCBkY3R4LT5yWzBdLnIsIDEpOworIAkJc3JjbGVuIC09IFBPTFkxMzA1X0JMT0NLX1NJWkU7CisgCX0KKyAJcmV0dXJuIHNyY2xlbjsKK0BAIC0xNTksMTAgKzEyOSwxMCBAQCBzdGF0aWMgaW50IHBvbHkxMzA1X3NpbWRfdXBkYXRlKHN0cnVjdCBzCisgCisgc3RhdGljIHN0cnVjdCBzaGFzaF9hbGcgYWxnID0geworIAkuZGlnZXN0c2l6ZQk9IFBPTFkxMzA1X0RJR0VTVF9TSVpFLAorLQkuaW5pdAkJPSBwb2x5MTMwNV9zaW1kX2luaXQsCisrCS5pbml0CQk9IGNyeXB0b19wb2x5MTMwNV9pbml0LAorIAkudXBkYXRlCQk9IHBvbHkxMzA1X3NpbWRfdXBkYXRlLAorIAkuZmluYWwJCT0gY3J5cHRvX3BvbHkxMzA1X2ZpbmFsLAorLQkuZGVzY3NpemUJPSBzaXplb2Yoc3RydWN0IHBvbHkxMzA1X3NpbWRfZGVzY19jdHgpLAorKwkuZGVzY3NpemUJPSBzaXplb2Yoc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4KSwKKyAJLmJhc2UJCT0geworIAkJLmNyYV9uYW1lCQk9ICJwb2x5MTMwNSIsCisgCQkuY3JhX2RyaXZlcl9uYW1lCT0gInBvbHkxMzA1LXNpbWQiLAorQEAgLTE3NywxNCArMTQ3LDE0IEBAIHN0YXRpYyBpbnQgX19pbml0IHBvbHkxMzA1X3NpbWRfbW9kX2luaXQKKyAJaWYgKCFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWE1NMikpCisgCQlyZXR1cm4gLUVOT0RFVjsKKyAKKy0jaWZkZWYgQ09ORklHX0FTX0FWWDIKKy0JcG9seTEzMDVfdXNlX2F2eDIgPSBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVZYKSAmJgorKwlwb2x5MTMwNV91c2VfYXZ4MiA9IElTX0VOQUJMRUQoQ09ORklHX0FTX0FWWDIpICYmCisrCQkJICAgIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BVlgpICYmCisgCQkJICAgIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BVlgyKSAmJgorIAkJCSAgICBjcHVfaGFzX3hmZWF0dXJlcyhYRkVBVFVSRV9NQVNLX1NTRSB8IFhGRUFUVVJFX01BU0tfWU1NLCBOVUxMKTsKKy0JYWxnLmRlc2NzaXplID0gc2l6ZW9mKHN0cnVjdCBwb2x5MTMwNV9zaW1kX2Rlc2NfY3R4KTsKKysJYWxnLmRlc2NzaXplID0gc2l6ZW9mKHN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCkgKyA1ICogc2l6ZW9mKHUzMik7CisgCWlmIChwb2x5MTMwNV91c2VfYXZ4MikKKyAJCWFsZy5kZXNjc2l6ZSArPSAxMCAqIHNpemVvZih1MzIpOworLSNlbmRpZgorKworIAlyZXR1cm4gY3J5cHRvX3JlZ2lzdGVyX3NoYXNoKCZhbGcpOworIH0KKyAKKy0tLSBhL2NyeXB0by9wb2x5MTMwNV9nZW5lcmljLmMKKysrKyBiL2NyeXB0by9wb2x5MTMwNV9nZW5lcmljLmMKK0BAIC0yNSw3ICsyNSw3IEBAIGludCBjcnlwdG9fcG9seTEzMDVfaW5pdChzdHJ1Y3Qgc2hhc2hfZGUKKyAKKyAJcG9seTEzMDVfY29yZV9pbml0KCZkY3R4LT5oKTsKKyAJZGN0eC0+YnVmbGVuID0gMDsKKy0JZGN0eC0+cnNldCA9IGZhbHNlOworKwlkY3R4LT5yc2V0ID0gMDsKKyAJZGN0eC0+c3NldCA9IGZhbHNlOworIAorIAlyZXR1cm4gMDsKK0BAIC00Myw3ICs0Myw3IEBAIHN0YXRpYyB2b2lkIHBvbHkxMzA1X2Jsb2NrcyhzdHJ1Y3QgcG9seTEKKyAJCXNyY2xlbiA9IGRhdGFsZW47CisgCX0KKyAKKy0JcG9seTEzMDVfY29yZV9ibG9ja3MoJmRjdHgtPmgsICZkY3R4LT5yLCBzcmMsCisrCXBvbHkxMzA1X2NvcmVfYmxvY2tzKCZkY3R4LT5oLCBkY3R4LT5yLCBzcmMsCisgCQkJICAgICBzcmNsZW4gLyBQT0xZMTMwNV9CTE9DS19TSVpFLCAxKTsKKyB9CisgCitAQCAtOTUsNyArOTUsNyBAQCBpbnQgY3J5cHRvX3BvbHkxMzA1X2ZpbmFsKHN0cnVjdCBzaGFzaF9kCisgCQlkY3R4LT5idWZbZGN0eC0+YnVmbGVuKytdID0gMTsKKyAJCW1lbXNldChkY3R4LT5idWYgKyBkY3R4LT5idWZsZW4sIDAsCisgCQkgICAgICAgUE9MWTEzMDVfQkxPQ0tfU0laRSAtIGRjdHgtPmJ1Zmxlbik7CistCQlwb2x5MTMwNV9jb3JlX2Jsb2NrcygmZGN0eC0+aCwgJmRjdHgtPnIsIGRjdHgtPmJ1ZiwgMSwgMCk7CisrCQlwb2x5MTMwNV9jb3JlX2Jsb2NrcygmZGN0eC0+aCwgZGN0eC0+ciwgZGN0eC0+YnVmLCAxLCAwKTsKKyAJfQorIAorIAlwb2x5MTMwNV9jb3JlX2VtaXQoJmRjdHgtPmgsIGRpZ2VzdCk7CistLS0gYS9pbmNsdWRlL2NyeXB0by9pbnRlcm5hbC9wb2x5MTMwNS5oCisrKysgYi9pbmNsdWRlL2NyeXB0by9pbnRlcm5hbC9wb2x5MTMwNS5oCitAQCAtNDYsMTAgKzQ2LDEwIEBAIHVuc2lnbmVkIGludCBjcnlwdG9fcG9seTEzMDVfc2V0ZGVzY2tleSgKKyB7CisgCWlmICghZGN0eC0+c3NldCkgeworIAkJaWYgKCFkY3R4LT5yc2V0ICYmIHNyY2xlbiA+PSBQT0xZMTMwNV9CTE9DS19TSVpFKSB7CistCQkJcG9seTEzMDVfY29yZV9zZXRrZXkoJmRjdHgtPnIsIHNyYyk7CisrCQkJcG9seTEzMDVfY29yZV9zZXRrZXkoZGN0eC0+ciwgc3JjKTsKKyAJCQlzcmMgKz0gUE9MWTEzMDVfQkxPQ0tfU0laRTsKKyAJCQlzcmNsZW4gLT0gUE9MWTEzMDVfQkxPQ0tfU0laRTsKKy0JCQlkY3R4LT5yc2V0ID0gdHJ1ZTsKKysJCQlkY3R4LT5yc2V0ID0gMTsKKyAJCX0KKyAJCWlmIChzcmNsZW4gPj0gUE9MWTEzMDVfQkxPQ0tfU0laRSkgeworIAkJCWRjdHgtPnNbMF0gPSBnZXRfdW5hbGlnbmVkX2xlMzIoc3JjICsgIDApOworLS0tIGEvaW5jbHVkZS9jcnlwdG8vcG9seTEzMDUuaAorKysrIGIvaW5jbHVkZS9jcnlwdG8vcG9seTEzMDUuaAorQEAgLTIyLDIwICsyMiwyMCBAQCBzdHJ1Y3QgcG9seTEzMDVfc3RhdGUgeworIH07CisgCisgc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4IHsKKy0JLyoga2V5ICovCistCXN0cnVjdCBwb2x5MTMwNV9rZXkgcjsKKy0JLyogZmluYWxpemUga2V5ICovCistCXUzMiBzWzRdOworLQkvKiBhY2N1bXVsYXRvciAqLworLQlzdHJ1Y3QgcG9seTEzMDVfc3RhdGUgaDsKKyAJLyogcGFydGlhbCBidWZmZXIgKi8KKyAJdTggYnVmW1BPTFkxMzA1X0JMT0NLX1NJWkVdOworIAkvKiBieXRlcyB1c2VkIGluIHBhcnRpYWwgYnVmZmVyICovCisgCXVuc2lnbmVkIGludCBidWZsZW47CistCS8qIHIga2V5IGhhcyBiZWVuIHNldCAqLworLQlib29sIHJzZXQ7CistCS8qIHMga2V5IGhhcyBiZWVuIHNldCAqLworKwkvKiBob3cgbWFueSBrZXlzIGhhdmUgYmVlbiBzZXQgaW4gcltdICovCisrCXVuc2lnbmVkIHNob3J0IHJzZXQ7CisrCS8qIHdoZXRoZXIgc1tdIGhhcyBiZWVuIHNldCAqLworIAlib29sIHNzZXQ7CisrCS8qIGZpbmFsaXplIGtleSAqLworKwl1MzIgc1s0XTsKKysJLyogYWNjdW11bGF0b3IgKi8KKysJc3RydWN0IHBvbHkxMzA1X3N0YXRlIGg7CisrCS8qIGtleSAqLworKwlzdHJ1Y3QgcG9seTEzMDVfa2V5IHJbMV07CisgfTsKKyAKKyAjZW5kaWYKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMTUtY3J5cHRvLXBvbHkxMzA1LWV4cG9zZS1pbml0LXVwZGF0ZS1maW5hbC1saWJyYXJ5LWludC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMTUtY3J5cHRvLXBvbHkxMzA1LWV4cG9zZS1pbml0LXVwZGF0ZS1maW5hbC1saWJyYXJ5LWludC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjhlOTBiCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAxNS1jcnlwdG8tcG9seTEzMDUtZXhwb3NlLWluaXQtdXBkYXRlLWZpbmFsLWxpYnJhcnktaW50LnBhdGNoCkBAIC0wLDAgKzEsMjI0IEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgorRGF0ZTogRnJpLCA4IE5vdiAyMDE5IDEzOjIyOjIxICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyeXB0bzogcG9seTEzMDUgLSBleHBvc2UgaW5pdC91cGRhdGUvZmluYWwgbGlicmFyeSBpbnRlcmZhY2UKKworY29tbWl0IGExZDkzMDY0MDk0Y2M1ZTI0ZDY0ZTM1Y2YwOTNlNzE5MWQwYzkzNDQgdXBzdHJlYW0uCisKK0V4cG9zZSB0aGUgZXhpc3RpbmcgZ2VuZXJpYyBQb2x5MTMwNSBjb2RlIHZpYSBhIGluaXQvdXBkYXRlL2ZpbmFsCitsaWJyYXJ5IGludGVyZmFjZSBzbyB0aGF0IGNhbGxlcnMgYXJlIG5vdCByZXF1aXJlZCB0byBnbyB0aHJvdWdoCit0aGUgY3J5cHRvIEFQSSdzIHNoYXNoIGFic3RyYWN0aW9uIHRvIGFjY2VzcyBpdC4gQXQgdGhlIHNhbWUgdGltZSwKK21ha2Ugc29tZSBwcmVwYXJhdGlvbnMgc28gdGhhdCB0aGUgbGlicmFyeSBpbXBsZW1lbnRhdGlvbiBjYW4gYmUKK3N1cGVyc2VkZWQgYnkgYW4gYWNjZWxlcmF0ZWQgYXJjaC1zcGVjaWZpYyB2ZXJzaW9uIGluIHRoZSBmdXR1cmUuCisKK1NpZ25lZC1vZmYtYnk6IEFyZCBCaWVzaGV1dmVsIDxhcmRiQGtlcm5lbC5vcmc+CitTaWduZWQtb2ZmLWJ5OiBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGNyeXB0by9wb2x5MTMwNV9nZW5lcmljLmMgfCAyMiArLS0tLS0tLS0tLS0KKyBpbmNsdWRlL2NyeXB0by9wb2x5MTMwNS5oIHwgMzggKysrKysrKysrKysrKysrKysrKy0KKyBsaWIvY3J5cHRvL0tjb25maWcgICAgICAgIHwgMjYgKysrKysrKysrKysrKysKKyBsaWIvY3J5cHRvL3BvbHkxMzA1LmMgICAgIHwgNzQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgNCBmaWxlcyBjaGFuZ2VkLCAxMzggaW5zZXJ0aW9ucygrKSwgMjIgZGVsZXRpb25zKC0pCisKKy0tLSBhL2NyeXB0by9wb2x5MTMwNV9nZW5lcmljLmMKKysrKyBiL2NyeXB0by9wb2x5MTMwNV9nZW5lcmljLmMKK0BAIC04NSwzMSArODUsMTEgQEAgRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX3BvbHkxMzA1X3VwZGF0ZQorIGludCBjcnlwdG9fcG9seTEzMDVfZmluYWwoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIHU4ICpkc3QpCisgeworIAlzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKy0JX19sZTMyIGRpZ2VzdFs0XTsKKy0JdTY0IGYgPSAwOworIAorIAlpZiAodW5saWtlbHkoIWRjdHgtPnNzZXQpKQorIAkJcmV0dXJuIC1FTk9LRVk7CisgCistCWlmICh1bmxpa2VseShkY3R4LT5idWZsZW4pKSB7CistCQlkY3R4LT5idWZbZGN0eC0+YnVmbGVuKytdID0gMTsKKy0JCW1lbXNldChkY3R4LT5idWYgKyBkY3R4LT5idWZsZW4sIDAsCistCQkgICAgICAgUE9MWTEzMDVfQkxPQ0tfU0laRSAtIGRjdHgtPmJ1Zmxlbik7CistCQlwb2x5MTMwNV9jb3JlX2Jsb2NrcygmZGN0eC0+aCwgZGN0eC0+ciwgZGN0eC0+YnVmLCAxLCAwKTsKKy0JfQorLQorLQlwb2x5MTMwNV9jb3JlX2VtaXQoJmRjdHgtPmgsIGRpZ2VzdCk7CistCistCS8qIG1hYyA9IChoICsgcykgJSAoMl4xMjgpICovCistCWYgPSAoZiA+PiAzMikgKyBsZTMyX3RvX2NwdShkaWdlc3RbMF0pICsgZGN0eC0+c1swXTsKKy0JcHV0X3VuYWxpZ25lZF9sZTMyKGYsIGRzdCArIDApOworLQlmID0gKGYgPj4gMzIpICsgbGUzMl90b19jcHUoZGlnZXN0WzFdKSArIGRjdHgtPnNbMV07CistCXB1dF91bmFsaWduZWRfbGUzMihmLCBkc3QgKyA0KTsKKy0JZiA9IChmID4+IDMyKSArIGxlMzJfdG9fY3B1KGRpZ2VzdFsyXSkgKyBkY3R4LT5zWzJdOworLQlwdXRfdW5hbGlnbmVkX2xlMzIoZiwgZHN0ICsgOCk7CistCWYgPSAoZiA+PiAzMikgKyBsZTMyX3RvX2NwdShkaWdlc3RbM10pICsgZGN0eC0+c1szXTsKKy0JcHV0X3VuYWxpZ25lZF9sZTMyKGYsIGRzdCArIDEyKTsKKy0KKysJcG9seTEzMDVfZmluYWxfZ2VuZXJpYyhkY3R4LCBkc3QpOworIAlyZXR1cm4gMDsKKyB9CisgRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX3BvbHkxMzA1X2ZpbmFsKTsKKy0tLSBhL2luY2x1ZGUvY3J5cHRvL3BvbHkxMzA1LmgKKysrKyBiL2luY2x1ZGUvY3J5cHRvL3BvbHkxMzA1LmgKK0BAIC0zNSw3ICszNSw0MyBAQCBzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggeworIAkvKiBhY2N1bXVsYXRvciAqLworIAlzdHJ1Y3QgcG9seTEzMDVfc3RhdGUgaDsKKyAJLyoga2V5ICovCistCXN0cnVjdCBwb2x5MTMwNV9rZXkgclsxXTsKKysJc3RydWN0IHBvbHkxMzA1X2tleSByW0NPTkZJR19DUllQVE9fTElCX1BPTFkxMzA1X1JTSVpFXTsKKyB9OworIAorK3ZvaWQgcG9seTEzMDVfaW5pdF9hcmNoKHN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCAqZGVzYywgY29uc3QgdTggKmtleSk7Cisrdm9pZCBwb2x5MTMwNV9pbml0X2dlbmVyaWMoc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4ICpkZXNjLCBjb25zdCB1OCAqa2V5KTsKKysKKytzdGF0aWMgaW5saW5lIHZvaWQgcG9seTEzMDVfaW5pdChzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRlc2MsIGNvbnN0IHU4ICprZXkpCisreworKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfQ1JZUFRPX0FSQ0hfSEFWRV9MSUJfUE9MWTEzMDUpKQorKwkJcG9seTEzMDVfaW5pdF9hcmNoKGRlc2MsIGtleSk7CisrCWVsc2UKKysJCXBvbHkxMzA1X2luaXRfZ2VuZXJpYyhkZXNjLCBrZXkpOworK30KKysKKyt2b2lkIHBvbHkxMzA1X3VwZGF0ZV9hcmNoKHN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCAqZGVzYywgY29uc3QgdTggKnNyYywKKysJCQkgIHVuc2lnbmVkIGludCBuYnl0ZXMpOworK3ZvaWQgcG9seTEzMDVfdXBkYXRlX2dlbmVyaWMoc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4ICpkZXNjLCBjb25zdCB1OCAqc3JjLAorKwkJCSAgICAgdW5zaWduZWQgaW50IG5ieXRlcyk7CisrCisrc3RhdGljIGlubGluZSB2b2lkIHBvbHkxMzA1X3VwZGF0ZShzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRlc2MsCisrCQkJCSAgIGNvbnN0IHU4ICpzcmMsIHVuc2lnbmVkIGludCBuYnl0ZXMpCisreworKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfQ1JZUFRPX0FSQ0hfSEFWRV9MSUJfUE9MWTEzMDUpKQorKwkJcG9seTEzMDVfdXBkYXRlX2FyY2goZGVzYywgc3JjLCBuYnl0ZXMpOworKwllbHNlCisrCQlwb2x5MTMwNV91cGRhdGVfZ2VuZXJpYyhkZXNjLCBzcmMsIG5ieXRlcyk7CisrfQorKworK3ZvaWQgcG9seTEzMDVfZmluYWxfYXJjaChzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRlc2MsIHU4ICpkaWdlc3QpOworK3ZvaWQgcG9seTEzMDVfZmluYWxfZ2VuZXJpYyhzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRlc2MsIHU4ICpkaWdlc3QpOworKworK3N0YXRpYyBpbmxpbmUgdm9pZCBwb2x5MTMwNV9maW5hbChzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRlc2MsIHU4ICpkaWdlc3QpCisreworKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfQ1JZUFRPX0FSQ0hfSEFWRV9MSUJfUE9MWTEzMDUpKQorKwkJcG9seTEzMDVfZmluYWxfYXJjaChkZXNjLCBkaWdlc3QpOworKwllbHNlCisrCQlwb2x5MTMwNV9maW5hbF9nZW5lcmljKGRlc2MsIGRpZ2VzdCk7CisrfQorKworICNlbmRpZgorLS0tIGEvbGliL2NyeXB0by9LY29uZmlnCisrKysgYi9saWIvY3J5cHRvL0tjb25maWcKK0BAIC0zNyw4ICszNywzNCBAQCBjb25maWcgQ1JZUFRPX0xJQl9DSEFDSEEKKyBjb25maWcgQ1JZUFRPX0xJQl9ERVMKKyAJdHJpc3RhdGUKKyAKKytjb25maWcgQ1JZUFRPX0xJQl9QT0xZMTMwNV9SU0laRQorKwlpbnQKKysJZGVmYXVsdCAxCisrCisrY29uZmlnIENSWVBUT19BUkNIX0hBVkVfTElCX1BPTFkxMzA1CisrCXRyaXN0YXRlCisrCWhlbHAKKysJICBEZWNsYXJlcyB3aGV0aGVyIHRoZSBhcmNoaXRlY3R1cmUgcHJvdmlkZXMgYW4gYXJjaC1zcGVjaWZpYworKwkgIGFjY2VsZXJhdGVkIGltcGxlbWVudGF0aW9uIG9mIHRoZSBQb2x5MTMwNSBsaWJyYXJ5IGludGVyZmFjZSwKKysJICBlaXRoZXIgYnVpbHRpbiBvciBhcyBhIG1vZHVsZS4KKysKKyBjb25maWcgQ1JZUFRPX0xJQl9QT0xZMTMwNV9HRU5FUklDCisgCXRyaXN0YXRlCisrCWhlbHAKKysJICBUaGlzIHN5bWJvbCBjYW4gYmUgZGVwZW5kZWQgdXBvbiBieSBhcmNoIGltcGxlbWVudGF0aW9ucyBvZiB0aGUKKysJICBQb2x5MTMwNSBsaWJyYXJ5IGludGVyZmFjZSB0aGF0IHJlcXVpcmUgdGhlIGdlbmVyaWMgY29kZSBhcyBhCisrCSAgZmFsbGJhY2ssIGUuZy4sIGZvciBTSU1EIGltcGxlbWVudGF0aW9ucy4gSWYgbm8gYXJjaCBzcGVjaWZpYworKwkgIGltcGxlbWVudGF0aW9uIGlzIGVuYWJsZWQsIHRoaXMgaW1wbGVtZW50YXRpb24gc2VydmVzIHRoZSB1c2VycworKwkgIG9mIENSWVBUT19MSUJfUE9MWTEzMDUuCisrCisrY29uZmlnIENSWVBUT19MSUJfUE9MWTEzMDUKKysJdHJpc3RhdGUgIlBvbHkxMzA1IGxpYnJhcnkgaW50ZXJmYWNlIgorKwlkZXBlbmRzIG9uIENSWVBUT19BUkNIX0hBVkVfTElCX1BPTFkxMzA1IHx8ICFDUllQVE9fQVJDSF9IQVZFX0xJQl9QT0xZMTMwNQorKwlzZWxlY3QgQ1JZUFRPX0xJQl9QT0xZMTMwNV9HRU5FUklDIGlmIENSWVBUT19BUkNIX0hBVkVfTElCX1BPTFkxMzA1PW4KKysJaGVscAorKwkgIEVuYWJsZSB0aGUgUG9seTEzMDUgbGlicmFyeSBpbnRlcmZhY2UuIFRoaXMgaW50ZXJmYWNlIG1heSBiZSBmdWxmaWxsZWQKKysJICBieSBlaXRoZXIgdGhlIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gb3IgYW4gYXJjaC1zcGVjaWZpYyBvbmUsIGlmIG9uZQorKwkgIGlzIGF2YWlsYWJsZSBhbmQgZW5hYmxlZC4KKyAKKyBjb25maWcgQ1JZUFRPX0xJQl9TSEEyNTYKKyAJdHJpc3RhdGUKKy0tLSBhL2xpYi9jcnlwdG8vcG9seTEzMDUuYworKysrIGIvbGliL2NyeXB0by9wb2x5MTMwNS5jCitAQCAtMTU0LDUgKzE1NCw3OSBAQCB2b2lkIHBvbHkxMzA1X2NvcmVfZW1pdChjb25zdCBzdHJ1Y3QgcG9sCisgfQorIEVYUE9SVF9TWU1CT0xfR1BMKHBvbHkxMzA1X2NvcmVfZW1pdCk7CisgCisrdm9pZCBwb2x5MTMwNV9pbml0X2dlbmVyaWMoc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4ICpkZXNjLCBjb25zdCB1OCAqa2V5KQorK3sKKysJcG9seTEzMDVfY29yZV9zZXRrZXkoZGVzYy0+ciwga2V5KTsKKysJZGVzYy0+c1swXSA9IGdldF91bmFsaWduZWRfbGUzMihrZXkgKyAxNik7CisrCWRlc2MtPnNbMV0gPSBnZXRfdW5hbGlnbmVkX2xlMzIoa2V5ICsgMjApOworKwlkZXNjLT5zWzJdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGtleSArIDI0KTsKKysJZGVzYy0+c1szXSA9IGdldF91bmFsaWduZWRfbGUzMihrZXkgKyAyOCk7CisrCXBvbHkxMzA1X2NvcmVfaW5pdCgmZGVzYy0+aCk7CisrCWRlc2MtPmJ1ZmxlbiA9IDA7CisrCWRlc2MtPnNzZXQgPSB0cnVlOworKwlkZXNjLT5yc2V0ID0gMTsKKyt9CisrRVhQT1JUX1NZTUJPTF9HUEwocG9seTEzMDVfaW5pdF9nZW5lcmljKTsKKysKKyt2b2lkIHBvbHkxMzA1X3VwZGF0ZV9nZW5lcmljKHN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCAqZGVzYywgY29uc3QgdTggKnNyYywKKysJCQkgICAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCisreworKwl1bnNpZ25lZCBpbnQgYnl0ZXM7CisrCisrCWlmICh1bmxpa2VseShkZXNjLT5idWZsZW4pKSB7CisrCQlieXRlcyA9IG1pbihuYnl0ZXMsIFBPTFkxMzA1X0JMT0NLX1NJWkUgLSBkZXNjLT5idWZsZW4pOworKwkJbWVtY3B5KGRlc2MtPmJ1ZiArIGRlc2MtPmJ1Zmxlbiwgc3JjLCBieXRlcyk7CisrCQlzcmMgKz0gYnl0ZXM7CisrCQluYnl0ZXMgLT0gYnl0ZXM7CisrCQlkZXNjLT5idWZsZW4gKz0gYnl0ZXM7CisrCisrCQlpZiAoZGVzYy0+YnVmbGVuID09IFBPTFkxMzA1X0JMT0NLX1NJWkUpIHsKKysJCQlwb2x5MTMwNV9jb3JlX2Jsb2NrcygmZGVzYy0+aCwgZGVzYy0+ciwgZGVzYy0+YnVmLCAxLCAxKTsKKysJCQlkZXNjLT5idWZsZW4gPSAwOworKwkJfQorKwl9CisrCisrCWlmIChsaWtlbHkobmJ5dGVzID49IFBPTFkxMzA1X0JMT0NLX1NJWkUpKSB7CisrCQlwb2x5MTMwNV9jb3JlX2Jsb2NrcygmZGVzYy0+aCwgZGVzYy0+ciwgc3JjLAorKwkJCQkgICAgIG5ieXRlcyAvIFBPTFkxMzA1X0JMT0NLX1NJWkUsIDEpOworKwkJc3JjICs9IG5ieXRlcyAtIChuYnl0ZXMgJSBQT0xZMTMwNV9CTE9DS19TSVpFKTsKKysJCW5ieXRlcyAlPSBQT0xZMTMwNV9CTE9DS19TSVpFOworKwl9CisrCisrCWlmICh1bmxpa2VseShuYnl0ZXMpKSB7CisrCQlkZXNjLT5idWZsZW4gPSBuYnl0ZXM7CisrCQltZW1jcHkoZGVzYy0+YnVmLCBzcmMsIG5ieXRlcyk7CisrCX0KKyt9CisrRVhQT1JUX1NZTUJPTF9HUEwocG9seTEzMDVfdXBkYXRlX2dlbmVyaWMpOworKworK3ZvaWQgcG9seTEzMDVfZmluYWxfZ2VuZXJpYyhzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRlc2MsIHU4ICpkc3QpCisreworKwlfX2xlMzIgZGlnZXN0WzRdOworKwl1NjQgZiA9IDA7CisrCisrCWlmICh1bmxpa2VseShkZXNjLT5idWZsZW4pKSB7CisrCQlkZXNjLT5idWZbZGVzYy0+YnVmbGVuKytdID0gMTsKKysJCW1lbXNldChkZXNjLT5idWYgKyBkZXNjLT5idWZsZW4sIDAsCisrCQkgICAgICAgUE9MWTEzMDVfQkxPQ0tfU0laRSAtIGRlc2MtPmJ1Zmxlbik7CisrCQlwb2x5MTMwNV9jb3JlX2Jsb2NrcygmZGVzYy0+aCwgZGVzYy0+ciwgZGVzYy0+YnVmLCAxLCAwKTsKKysJfQorKworKwlwb2x5MTMwNV9jb3JlX2VtaXQoJmRlc2MtPmgsIGRpZ2VzdCk7CisrCisrCS8qIG1hYyA9IChoICsgcykgJSAoMl4xMjgpICovCisrCWYgPSAoZiA+PiAzMikgKyBsZTMyX3RvX2NwdShkaWdlc3RbMF0pICsgZGVzYy0+c1swXTsKKysJcHV0X3VuYWxpZ25lZF9sZTMyKGYsIGRzdCArIDApOworKwlmID0gKGYgPj4gMzIpICsgbGUzMl90b19jcHUoZGlnZXN0WzFdKSArIGRlc2MtPnNbMV07CisrCXB1dF91bmFsaWduZWRfbGUzMihmLCBkc3QgKyA0KTsKKysJZiA9IChmID4+IDMyKSArIGxlMzJfdG9fY3B1KGRpZ2VzdFsyXSkgKyBkZXNjLT5zWzJdOworKwlwdXRfdW5hbGlnbmVkX2xlMzIoZiwgZHN0ICsgOCk7CisrCWYgPSAoZiA+PiAzMikgKyBsZTMyX3RvX2NwdShkaWdlc3RbM10pICsgZGVzYy0+c1szXTsKKysJcHV0X3VuYWxpZ25lZF9sZTMyKGYsIGRzdCArIDEyKTsKKysKKysJKmRlc2MgPSAoc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4KXt9OworK30KKytFWFBPUlRfU1lNQk9MX0dQTChwb2x5MTMwNV9maW5hbF9nZW5lcmljKTsKKysKKyBNT0RVTEVfTElDRU5TRSgiR1BMIik7CisgTU9EVUxFX0FVVEhPUigiTWFydGluIFdpbGxpIDxtYXJ0aW5Ac3Ryb25nc3dhbi5vcmc+Iik7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDE2LWNyeXB0by14ODYtcG9seTEzMDUtZGVwZW5kLW9uLWdlbmVyaWMtbGlicmFyeS1ub3QtZ2UucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDE2LWNyeXB0by14ODYtcG9seTEzMDUtZGVwZW5kLW9uLWdlbmVyaWMtbGlicmFyeS1ub3QtZ2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVhNjNmMwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMTYtY3J5cHRvLXg4Ni1wb2x5MTMwNS1kZXBlbmQtb24tZ2VuZXJpYy1saWJyYXJ5LW5vdC1nZS5wYXRjaApAQCAtMCwwICsxLDIxNyBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQXJkIEJpZXNoZXV2ZWwgPGFyZGJAa2VybmVsLm9yZz4KK0RhdGU6IEZyaSwgOCBOb3YgMjAxOSAxMzoyMjoyMiArMDEwMAorU3ViamVjdDogW1BBVENIXSBjcnlwdG86IHg4Ni9wb2x5MTMwNSAtIGRlcGVuZCBvbiBnZW5lcmljIGxpYnJhcnkgbm90IGdlbmVyaWMKKyBzaGFzaAorCitjb21taXQgMWIyYzZhNTEyMDQ4OWQ0MWM4ZWEzYjhkYWNkMGI0NTg2Mjg5YjE1OCB1cHN0cmVhbS4KKworUmVtb3ZlIHRoZSBkZXBlbmRlbmN5IG9uIHRoZSBnZW5lcmljIFBvbHkxMzA1IGRyaXZlci4gSW5zdGVhZCwgZGVwZW5kCitvbiB0aGUgZ2VuZXJpYyBsaWJyYXJ5IHNvIHRoYXQgd2Ugb25seSByZXVzZSBjb2RlIHdpdGhvdXQgcHVsbGluZyBpbgordGhlIGdlbmVyaWMgc2tjaXBoZXIgaW1wbGVtZW50YXRpb24gYXMgd2VsbC4KKworV2hpbGUgYXQgaXQsIHJlbW92ZSB0aGUgbG9naWMgdGhhdCBwcmVmZXJzIHRoZSBub24tU0lNRCBwYXRoIGZvciBzaG9ydAoraW5wdXRzIC0gdGhpcyBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IGFmdGVyIHJlY2VudCBGUFUgaGFuZGxpbmcgY2hhbmdlcworb24geDg2LgorCitTaW5jZSB0aGlzIHJlbW92ZXMgdGhlIGxhc3QgcmVtYWluaW5nIHVzZXIgb2YgdGhlIHJvdXRpbmVzIGV4cG9ydGVkCitieSB0aGUgZ2VuZXJpYyBzaGFzaCBkcml2ZXIsIHVuZXhwb3J0IHRoZW0gYW5kIG1ha2UgdGhlbSBzdGF0aWMuCisKK1NpZ25lZC1vZmYtYnk6IEFyZCBCaWVzaGV1dmVsIDxhcmRiQGtlcm5lbC5vcmc+CitTaWduZWQtb2ZmLWJ5OiBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGFyY2gveDg2L2NyeXB0by9wb2x5MTMwNV9nbHVlLmMgICAgfCA2NiArKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0KKyBjcnlwdG8vS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyBjcnlwdG8vcG9seTEzMDVfZ2VuZXJpYy5jICAgICAgICAgIHwgMTEgKystLS0KKyBpbmNsdWRlL2NyeXB0by9pbnRlcm5hbC9wb2x5MTMwNS5oIHwgIDkgLS0tLQorIDQgZmlsZXMgY2hhbmdlZCwgNjAgaW5zZXJ0aW9ucygrKSwgMjggZGVsZXRpb25zKC0pCisKKy0tLSBhL2FyY2gveDg2L2NyeXB0by9wb2x5MTMwNV9nbHVlLmMKKysrKyBiL2FyY2gveDg2L2NyeXB0by9wb2x5MTMwNV9nbHVlLmMKK0BAIC0zNCw2ICszNCwyNCBAQCBzdGF0aWMgdm9pZCBwb2x5MTMwNV9zaW1kX211bHQodTMyICphLCBjCisgCXBvbHkxMzA1X2Jsb2NrX3NzZTIoYSwgbSwgYiwgMSk7CisgfQorIAorK3N0YXRpYyB1bnNpZ25lZCBpbnQgcG9seTEzMDVfc2NhbGFyX2Jsb2NrcyhzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRjdHgsCisrCQkJCQkgICBjb25zdCB1OCAqc3JjLCB1bnNpZ25lZCBpbnQgc3JjbGVuKQorK3sKKysJdW5zaWduZWQgaW50IGRhdGFsZW47CisrCisrCWlmICh1bmxpa2VseSghZGN0eC0+c3NldCkpIHsKKysJCWRhdGFsZW4gPSBjcnlwdG9fcG9seTEzMDVfc2V0ZGVzY2tleShkY3R4LCBzcmMsIHNyY2xlbik7CisrCQlzcmMgKz0gc3JjbGVuIC0gZGF0YWxlbjsKKysJCXNyY2xlbiA9IGRhdGFsZW47CisrCX0KKysJaWYgKHNyY2xlbiA+PSBQT0xZMTMwNV9CTE9DS19TSVpFKSB7CisrCQlwb2x5MTMwNV9jb3JlX2Jsb2NrcygmZGN0eC0+aCwgZGN0eC0+ciwgc3JjLAorKwkJCQkgICAgIHNyY2xlbiAvIFBPTFkxMzA1X0JMT0NLX1NJWkUsIDEpOworKwkJc3JjbGVuICU9IFBPTFkxMzA1X0JMT0NLX1NJWkU7CisrCX0KKysJcmV0dXJuIHNyY2xlbjsKKyt9CisrCisgc3RhdGljIHVuc2lnbmVkIGludCBwb2x5MTMwNV9zaW1kX2Jsb2NrcyhzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRjdHgsCisgCQkJCQkgY29uc3QgdTggKnNyYywgdW5zaWduZWQgaW50IHNyY2xlbikKKyB7CitAQCAtOTEsMTIgKzEwOSw2IEBAIHN0YXRpYyBpbnQgcG9seTEzMDVfc2ltZF91cGRhdGUoc3RydWN0IHMKKyAJc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4ICpkY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisgCXVuc2lnbmVkIGludCBieXRlczsKKyAKKy0JLyoga2VybmVsX2ZwdV9iZWdpbi9lbmQgaXMgY29zdGx5LCB1c2UgZmFsbGJhY2sgZm9yIHNtYWxsIHVwZGF0ZXMgKi8KKy0JaWYgKHNyY2xlbiA8PSAyODggfHwgIWNyeXB0b19zaW1kX3VzYWJsZSgpKQorLQkJcmV0dXJuIGNyeXB0b19wb2x5MTMwNV91cGRhdGUoZGVzYywgc3JjLCBzcmNsZW4pOworLQorLQlrZXJuZWxfZnB1X2JlZ2luKCk7CistCisgCWlmICh1bmxpa2VseShkY3R4LT5idWZsZW4pKSB7CisgCQlieXRlcyA9IG1pbihzcmNsZW4sIFBPTFkxMzA1X0JMT0NLX1NJWkUgLSBkY3R4LT5idWZsZW4pOworIAkJbWVtY3B5KGRjdHgtPmJ1ZiArIGRjdHgtPmJ1Zmxlbiwgc3JjLCBieXRlcyk7CitAQCAtMTA1LDI1ICsxMTcsNTcgQEAgc3RhdGljIGludCBwb2x5MTMwNV9zaW1kX3VwZGF0ZShzdHJ1Y3QgcworIAkJZGN0eC0+YnVmbGVuICs9IGJ5dGVzOworIAorIAkJaWYgKGRjdHgtPmJ1ZmxlbiA9PSBQT0xZMTMwNV9CTE9DS19TSVpFKSB7CistCQkJcG9seTEzMDVfc2ltZF9ibG9ja3MoZGN0eCwgZGN0eC0+YnVmLAorLQkJCQkJICAgICBQT0xZMTMwNV9CTE9DS19TSVpFKTsKKysJCQlpZiAobGlrZWx5KGNyeXB0b19zaW1kX3VzYWJsZSgpKSkgeworKwkJCQlrZXJuZWxfZnB1X2JlZ2luKCk7CisrCQkJCXBvbHkxMzA1X3NpbWRfYmxvY2tzKGRjdHgsIGRjdHgtPmJ1ZiwKKysJCQkJCQkgICAgIFBPTFkxMzA1X0JMT0NLX1NJWkUpOworKwkJCQlrZXJuZWxfZnB1X2VuZCgpOworKwkJCX0gZWxzZSB7CisrCQkJCXBvbHkxMzA1X3NjYWxhcl9ibG9ja3MoZGN0eCwgZGN0eC0+YnVmLAorKwkJCQkJCSAgICAgICBQT0xZMTMwNV9CTE9DS19TSVpFKTsKKysJCQl9CisgCQkJZGN0eC0+YnVmbGVuID0gMDsKKyAJCX0KKyAJfQorIAorIAlpZiAobGlrZWx5KHNyY2xlbiA+PSBQT0xZMTMwNV9CTE9DS19TSVpFKSkgeworLQkJYnl0ZXMgPSBwb2x5MTMwNV9zaW1kX2Jsb2NrcyhkY3R4LCBzcmMsIHNyY2xlbik7CisrCQlpZiAobGlrZWx5KGNyeXB0b19zaW1kX3VzYWJsZSgpKSkgeworKwkJCWtlcm5lbF9mcHVfYmVnaW4oKTsKKysJCQlieXRlcyA9IHBvbHkxMzA1X3NpbWRfYmxvY2tzKGRjdHgsIHNyYywgc3JjbGVuKTsKKysJCQlrZXJuZWxfZnB1X2VuZCgpOworKwkJfSBlbHNlIHsKKysJCQlieXRlcyA9IHBvbHkxMzA1X3NjYWxhcl9ibG9ja3MoZGN0eCwgc3JjLCBzcmNsZW4pOworKwkJfQorIAkJc3JjICs9IHNyY2xlbiAtIGJ5dGVzOworIAkJc3JjbGVuID0gYnl0ZXM7CisgCX0KKyAKKy0Ja2VybmVsX2ZwdV9lbmQoKTsKKy0KKyAJaWYgKHVubGlrZWx5KHNyY2xlbikpIHsKKyAJCWRjdHgtPmJ1ZmxlbiA9IHNyY2xlbjsKKyAJCW1lbWNweShkY3R4LT5idWYsIHNyYywgc3JjbGVuKTsKKyAJfQorK30KKysKKytzdGF0aWMgaW50IGNyeXB0b19wb2x5MTMwNV9pbml0KHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjKQorK3sKKysJc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4ICpkY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisrCisrCXBvbHkxMzA1X2NvcmVfaW5pdCgmZGN0eC0+aCk7CisrCWRjdHgtPmJ1ZmxlbiA9IDA7CisrCWRjdHgtPnJzZXQgPSAwOworKwlkY3R4LT5zc2V0ID0gZmFsc2U7CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IGNyeXB0b19wb2x5MTMwNV9maW5hbChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgdTggKmRzdCkKKyt7CisrCXN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCAqZGN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworKworKwlpZiAodW5saWtlbHkoIWRjdHgtPnNzZXQpKQorKwkJcmV0dXJuIC1FTk9LRVk7CisgCisrCXBvbHkxMzA1X2ZpbmFsX2dlbmVyaWMoZGN0eCwgZHN0KTsKKyAJcmV0dXJuIDA7CisgfQorIAorLS0tIGEvY3J5cHRvL0tjb25maWcKKysrKyBiL2NyeXB0by9LY29uZmlnCitAQCAtNjk3LDcgKzY5Nyw3IEBAIGNvbmZpZyBDUllQVE9fUE9MWTEzMDUKKyBjb25maWcgQ1JZUFRPX1BPTFkxMzA1X1g4Nl82NAorIAl0cmlzdGF0ZSAiUG9seTEzMDUgYXV0aGVudGljYXRvciBhbGdvcml0aG0gKHg4Nl82NC9TU0UyL0FWWDIpIgorIAlkZXBlbmRzIG9uIFg4NiAmJiA2NEJJVAorLQlzZWxlY3QgQ1JZUFRPX1BPTFkxMzA1CisrCXNlbGVjdCBDUllQVE9fTElCX1BPTFkxMzA1X0dFTkVSSUMKKyAJaGVscAorIAkgIFBvbHkxMzA1IGF1dGhlbnRpY2F0b3IgYWxnb3JpdGhtLCBSRkM3NTM5LgorIAorLS0tIGEvY3J5cHRvL3BvbHkxMzA1X2dlbmVyaWMuYworKysrIGIvY3J5cHRvL3BvbHkxMzA1X2dlbmVyaWMuYworQEAgLTE5LDcgKzE5LDcgQEAKKyAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisgI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKyAKKy1pbnQgY3J5cHRvX3BvbHkxMzA1X2luaXQoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MpCisrc3RhdGljIGludCBjcnlwdG9fcG9seTEzMDVfaW5pdChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYykKKyB7CisgCXN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCAqZGN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworIAorQEAgLTMwLDcgKzMwLDYgQEAgaW50IGNyeXB0b19wb2x5MTMwNV9pbml0KHN0cnVjdCBzaGFzaF9kZQorIAorIAlyZXR1cm4gMDsKKyB9CistRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX3BvbHkxMzA1X2luaXQpOworIAorIHN0YXRpYyB2b2lkIHBvbHkxMzA1X2Jsb2NrcyhzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRjdHgsIGNvbnN0IHU4ICpzcmMsCisgCQkJICAgIHVuc2lnbmVkIGludCBzcmNsZW4pCitAQCAtNDcsOCArNDYsOCBAQCBzdGF0aWMgdm9pZCBwb2x5MTMwNV9ibG9ja3Moc3RydWN0IHBvbHkxCisgCQkJICAgICBzcmNsZW4gLyBQT0xZMTMwNV9CTE9DS19TSVpFLCAxKTsKKyB9CisgCistaW50IGNyeXB0b19wb2x5MTMwNV91cGRhdGUoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsCistCQkJICAgY29uc3QgdTggKnNyYywgdW5zaWduZWQgaW50IHNyY2xlbikKKytzdGF0aWMgaW50IGNyeXB0b19wb2x5MTMwNV91cGRhdGUoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsCisrCQkJCSAgY29uc3QgdTggKnNyYywgdW5zaWduZWQgaW50IHNyY2xlbikKKyB7CisgCXN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCAqZGN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworIAl1bnNpZ25lZCBpbnQgYnl0ZXM7CitAQCAtODAsOSArNzksOCBAQCBpbnQgY3J5cHRvX3BvbHkxMzA1X3VwZGF0ZShzdHJ1Y3Qgc2hhc2hfCisgCisgCXJldHVybiAwOworIH0KKy1FWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fcG9seTEzMDVfdXBkYXRlKTsKKyAKKy1pbnQgY3J5cHRvX3BvbHkxMzA1X2ZpbmFsKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCB1OCAqZHN0KQorK3N0YXRpYyBpbnQgY3J5cHRvX3BvbHkxMzA1X2ZpbmFsKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCB1OCAqZHN0KQorIHsKKyAJc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4ICpkY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisgCitAQCAtOTIsNyArOTAsNiBAQCBpbnQgY3J5cHRvX3BvbHkxMzA1X2ZpbmFsKHN0cnVjdCBzaGFzaF9kCisgCXBvbHkxMzA1X2ZpbmFsX2dlbmVyaWMoZGN0eCwgZHN0KTsKKyAJcmV0dXJuIDA7CisgfQorLUVYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19wb2x5MTMwNV9maW5hbCk7CisgCisgc3RhdGljIHN0cnVjdCBzaGFzaF9hbGcgcG9seTEzMDVfYWxnID0geworIAkuZGlnZXN0c2l6ZQk9IFBPTFkxMzA1X0RJR0VTVF9TSVpFLAorLS0tIGEvaW5jbHVkZS9jcnlwdG8vaW50ZXJuYWwvcG9seTEzMDUuaAorKysrIGIvaW5jbHVkZS9jcnlwdG8vaW50ZXJuYWwvcG9seTEzMDUuaAorQEAgLTEwLDggKzEwLDYgQEAKKyAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyAjaW5jbHVkZSA8Y3J5cHRvL3BvbHkxMzA1Lmg+CisgCistc3RydWN0IHNoYXNoX2Rlc2M7CistCisgLyoKKyAgKiBQb2x5MTMwNSBjb3JlIGZ1bmN0aW9ucy4gIFRoZXNlIGltcGxlbWVudCB0aGUgzrUtYWxtb3N0LeKIhi11bml2ZXJzYWwgaGFzaAorICAqIGZ1bmN0aW9uIHVuZGVybHlpbmcgdGhlIFBvbHkxMzA1IE1BQywgaS5lLiB0aGV5IGRvbid0IGFkZCBhbiBlbmNyeXB0ZWQgbm9uY2UKK0BAIC0yOCwxMyArMjYsNiBAQCB2b2lkIHBvbHkxMzA1X2NvcmVfYmxvY2tzKHN0cnVjdCBwb2x5MTMwCisgCQkJICB1bnNpZ25lZCBpbnQgbmJsb2NrcywgdTMyIGhpYml0KTsKKyB2b2lkIHBvbHkxMzA1X2NvcmVfZW1pdChjb25zdCBzdHJ1Y3QgcG9seTEzMDVfc3RhdGUgKnN0YXRlLCB2b2lkICpkc3QpOworIAorLS8qIENyeXB0byBBUEkgaGVscGVyIGZ1bmN0aW9ucyBmb3IgdGhlIFBvbHkxMzA1IE1BQyAqLworLWludCBjcnlwdG9fcG9seTEzMDVfaW5pdChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYyk7CistCistaW50IGNyeXB0b19wb2x5MTMwNV91cGRhdGUoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsCistCQkJICAgY29uc3QgdTggKnNyYywgdW5zaWduZWQgaW50IHNyY2xlbik7CistaW50IGNyeXB0b19wb2x5MTMwNV9maW5hbChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgdTggKmRzdCk7CistCisgLyoKKyAgKiBQb2x5MTMwNSByZXF1aXJlcyBhIHVuaXF1ZSBrZXkgZm9yIGVhY2ggdGFnLCB3aGljaCBpbXBsaWVzIHRoYXQgd2UgY2FuJ3Qgc2V0CisgICogaXQgb24gdGhlIHRmbSB0aGF0IGdldHMgYWNjZXNzZWQgYnkgbXVsdGlwbGUgdXNlcnMgc2ltdWx0YW5lb3VzbHkuIEluc3RlYWQgd2UKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMTctY3J5cHRvLXg4Ni1wb2x5MTMwNS1leHBvc2UtZXhpc3RpbmctZHJpdmVyLWFzLXBvbHkxMy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMTctY3J5cHRvLXg4Ni1wb2x5MTMwNS1leHBvc2UtZXhpc3RpbmctZHJpdmVyLWFzLXBvbHkxMy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTE0OTg3Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAxNy1jcnlwdG8teDg2LXBvbHkxMzA1LWV4cG9zZS1leGlzdGluZy1kcml2ZXItYXMtcG9seTEzLnBhdGNoCkBAIC0wLDAgKzEsMTYzIEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgorRGF0ZTogRnJpLCA4IE5vdiAyMDE5IDEzOjIyOjIzICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyeXB0bzogeDg2L3BvbHkxMzA1IC0gZXhwb3NlIGV4aXN0aW5nIGRyaXZlciBhcyBwb2x5MTMwNQorIGxpYnJhcnkKKworY29tbWl0IGYwZTg5YmNmYmI4OTRlNTg0NGNkMWJiZjZiM2NmN2M2M2NiMGY1YWMgdXBzdHJlYW0uCisKK0ltcGxlbWVudCB0aGUgYXJjaCBpbml0L3VwZGF0ZS9maW5hbCBQb2x5MTMwNSBsaWJyYXJ5IHJvdXRpbmVzIGluIHRoZQorYWNjZWxlcmF0ZWQgU0lNRCBkcml2ZXIgZm9yIHg4NiBzbyB0aGV5IGFyZSBhY2Nlc3NpYmxlIHRvIHVzZXJzIG9mCit0aGUgUG9seTEzMDUgbGlicmFyeSBpbnRlcmZhY2UgYXMgd2VsbC4KKworU2lnbmVkLW9mZi1ieTogQXJkIEJpZXNoZXV2ZWwgPGFyZGJAa2VybmVsLm9yZz4KK1NpZ25lZC1vZmYtYnk6IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgYXJjaC94ODYvY3J5cHRvL3BvbHkxMzA1X2dsdWUuYyB8IDU3ICsrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLQorIGNyeXB0by9LY29uZmlnICAgICAgICAgICAgICAgICAgfCAgMSArCisgbGliL2NyeXB0by9LY29uZmlnICAgICAgICAgICAgICB8ICAxICsKKyAzIGZpbGVzIGNoYW5nZWQsIDQzIGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9ucygtKQorCistLS0gYS9hcmNoL3g4Ni9jcnlwdG8vcG9seTEzMDVfZ2x1ZS5jCisrKysgYi9hcmNoL3g4Ni9jcnlwdG8vcG9seTEzMDVfZ2x1ZS5jCitAQCAtMTAsNiArMTAsNyBAQAorICNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvcG9seTEzMDUuaD4KKyAjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL3NpbWQuaD4KKyAjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisrI2luY2x1ZGUgPGxpbnV4L2p1bXBfbGFiZWwuaD4KKyAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisgI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorICNpbmNsdWRlIDxhc20vc2ltZC5oPgorQEAgLTIxLDcgKzIyLDggQEAgYXNtbGlua2FnZSB2b2lkIHBvbHkxMzA1XzJibG9ja19zc2UyKHUzMgorIGFzbWxpbmthZ2Ugdm9pZCBwb2x5MTMwNV80YmxvY2tfYXZ4Mih1MzIgKmgsIGNvbnN0IHU4ICpzcmMsIGNvbnN0IHUzMiAqciwKKyAJCQkJICAgICB1bnNpZ25lZCBpbnQgYmxvY2tzLCBjb25zdCB1MzIgKnUpOworIAorLXN0YXRpYyBib29sIHBvbHkxMzA1X3VzZV9hdngyIF9fcm9fYWZ0ZXJfaW5pdDsKKytzdGF0aWMgX19yb19hZnRlcl9pbml0IERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHBvbHkxMzA1X3VzZV9zaW1kKTsKKytzdGF0aWMgX19yb19hZnRlcl9pbml0IERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHBvbHkxMzA1X3VzZV9hdngyKTsKKyAKKyBzdGF0aWMgdm9pZCBwb2x5MTMwNV9zaW1kX211bHQodTMyICphLCBjb25zdCB1MzIgKmIpCisgeworQEAgLTY0LDcgKzY2LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBwb2x5MTMwNV9zaW1kX2Jsb2NrcworIAl9CisgCisgCWlmIChJU19FTkFCTEVEKENPTkZJR19BU19BVlgyKSAmJgorLQkgICAgcG9seTEzMDVfdXNlX2F2eDIgJiYKKysJICAgIHN0YXRpY19icmFuY2hfbGlrZWx5KCZwb2x5MTMwNV91c2VfYXZ4MikgJiYKKyAJICAgIHNyY2xlbiA+PSBQT0xZMTMwNV9CTE9DS19TSVpFICogNCkgeworIAkJaWYgKHVubGlrZWx5KGRjdHgtPnJzZXQgPCA0KSkgeworIAkJCWlmIChkY3R4LT5yc2V0IDwgMikgeworQEAgLTEwMywxMCArMTA1LDE1IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgcG9seTEzMDVfc2ltZF9ibG9ja3MKKyAJcmV0dXJuIHNyY2xlbjsKKyB9CisgCistc3RhdGljIGludCBwb2x5MTMwNV9zaW1kX3VwZGF0ZShzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywKKy0JCQkJY29uc3QgdTggKnNyYywgdW5zaWduZWQgaW50IHNyY2xlbikKKyt2b2lkIHBvbHkxMzA1X2luaXRfYXJjaChzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRlc2MsIGNvbnN0IHU4ICprZXkpCisreworKwlwb2x5MTMwNV9pbml0X2dlbmVyaWMoZGVzYywga2V5KTsKKyt9CisrRVhQT1JUX1NZTUJPTChwb2x5MTMwNV9pbml0X2FyY2gpOworKworK3ZvaWQgcG9seTEzMDVfdXBkYXRlX2FyY2goc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4ICpkY3R4LCBjb25zdCB1OCAqc3JjLAorKwkJCSAgdW5zaWduZWQgaW50IHNyY2xlbikKKyB7CistCXN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCAqZGN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworIAl1bnNpZ25lZCBpbnQgYnl0ZXM7CisgCisgCWlmICh1bmxpa2VseShkY3R4LT5idWZsZW4pKSB7CitAQCAtMTE3LDcgKzEyNCw4IEBAIHN0YXRpYyBpbnQgcG9seTEzMDVfc2ltZF91cGRhdGUoc3RydWN0IHMKKyAJCWRjdHgtPmJ1ZmxlbiArPSBieXRlczsKKyAKKyAJCWlmIChkY3R4LT5idWZsZW4gPT0gUE9MWTEzMDVfQkxPQ0tfU0laRSkgeworLQkJCWlmIChsaWtlbHkoY3J5cHRvX3NpbWRfdXNhYmxlKCkpKSB7CisrCQkJaWYgKHN0YXRpY19icmFuY2hfbGlrZWx5KCZwb2x5MTMwNV91c2Vfc2ltZCkgJiYKKysJCQkgICAgbGlrZWx5KGNyeXB0b19zaW1kX3VzYWJsZSgpKSkgeworIAkJCQlrZXJuZWxfZnB1X2JlZ2luKCk7CisgCQkJCXBvbHkxMzA1X3NpbWRfYmxvY2tzKGRjdHgsIGRjdHgtPmJ1ZiwKKyAJCQkJCQkgICAgIFBPTFkxMzA1X0JMT0NLX1NJWkUpOworQEAgLTEzMSw3ICsxMzksOCBAQCBzdGF0aWMgaW50IHBvbHkxMzA1X3NpbWRfdXBkYXRlKHN0cnVjdCBzCisgCX0KKyAKKyAJaWYgKGxpa2VseShzcmNsZW4gPj0gUE9MWTEzMDVfQkxPQ0tfU0laRSkpIHsKKy0JCWlmIChsaWtlbHkoY3J5cHRvX3NpbWRfdXNhYmxlKCkpKSB7CisrCQlpZiAoc3RhdGljX2JyYW5jaF9saWtlbHkoJnBvbHkxMzA1X3VzZV9zaW1kKSAmJgorKwkJICAgIGxpa2VseShjcnlwdG9fc2ltZF91c2FibGUoKSkpIHsKKyAJCQlrZXJuZWxfZnB1X2JlZ2luKCk7CisgCQkJYnl0ZXMgPSBwb2x5MTMwNV9zaW1kX2Jsb2NrcyhkY3R4LCBzcmMsIHNyY2xlbik7CisgCQkJa2VybmVsX2ZwdV9lbmQoKTsKK0BAIC0xNDcsNiArMTU2LDEzIEBAIHN0YXRpYyBpbnQgcG9seTEzMDVfc2ltZF91cGRhdGUoc3RydWN0IHMKKyAJCW1lbWNweShkY3R4LT5idWYsIHNyYywgc3JjbGVuKTsKKyAJfQorIH0KKytFWFBPUlRfU1lNQk9MKHBvbHkxMzA1X3VwZGF0ZV9hcmNoKTsKKysKKyt2b2lkIHBvbHkxMzA1X2ZpbmFsX2FyY2goc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4ICpkZXNjLCB1OCAqZGlnZXN0KQorK3sKKysJcG9seTEzMDVfZmluYWxfZ2VuZXJpYyhkZXNjLCBkaWdlc3QpOworK30KKytFWFBPUlRfU1lNQk9MKHBvbHkxMzA1X2ZpbmFsX2FyY2gpOworIAorIHN0YXRpYyBpbnQgY3J5cHRvX3BvbHkxMzA1X2luaXQoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MpCisgeworQEAgLTE3MSw2ICsxODcsMTUgQEAgc3RhdGljIGludCBjcnlwdG9fcG9seTEzMDVfZmluYWwoc3RydWN0CisgCXJldHVybiAwOworIH0KKyAKKytzdGF0aWMgaW50IHBvbHkxMzA1X3NpbWRfdXBkYXRlKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLAorKwkJCQljb25zdCB1OCAqc3JjLCB1bnNpZ25lZCBpbnQgc3JjbGVuKQorK3sKKysJc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4ICpkY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisrCisrCXBvbHkxMzA1X3VwZGF0ZV9hcmNoKGRjdHgsIHNyYywgc3JjbGVuKTsKKysJcmV0dXJuIDA7CisrfQorKworIHN0YXRpYyBzdHJ1Y3Qgc2hhc2hfYWxnIGFsZyA9IHsKKyAJLmRpZ2VzdHNpemUJPSBQT0xZMTMwNV9ESUdFU1RfU0laRSwKKyAJLmluaXQJCT0gY3J5cHRvX3BvbHkxMzA1X2luaXQsCitAQCAtMTg5LDE1ICsyMTQsMTUgQEAgc3RhdGljIHN0cnVjdCBzaGFzaF9hbGcgYWxnID0geworIHN0YXRpYyBpbnQgX19pbml0IHBvbHkxMzA1X3NpbWRfbW9kX2luaXQodm9pZCkKKyB7CisgCWlmICghYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1hNTTIpKQorLQkJcmV0dXJuIC1FTk9ERVY7CisrCQlyZXR1cm4gMDsKKyAKKy0JcG9seTEzMDVfdXNlX2F2eDIgPSBJU19FTkFCTEVEKENPTkZJR19BU19BVlgyKSAmJgorLQkJCSAgICBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVZYKSAmJgorLQkJCSAgICBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVZYMikgJiYKKy0JCQkgICAgY3B1X2hhc194ZmVhdHVyZXMoWEZFQVRVUkVfTUFTS19TU0UgfCBYRkVBVFVSRV9NQVNLX1lNTSwgTlVMTCk7CistCWFsZy5kZXNjc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHgpICsgNSAqIHNpemVvZih1MzIpOworLQlpZiAocG9seTEzMDVfdXNlX2F2eDIpCistCQlhbGcuZGVzY3NpemUgKz0gMTAgKiBzaXplb2YodTMyKTsKKysJc3RhdGljX2JyYW5jaF9lbmFibGUoJnBvbHkxMzA1X3VzZV9zaW1kKTsKKysKKysJaWYgKElTX0VOQUJMRUQoQ09ORklHX0FTX0FWWDIpICYmCisrCSAgICBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVZYKSAmJgorKwkgICAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0FWWDIpICYmCisrCSAgICBjcHVfaGFzX3hmZWF0dXJlcyhYRkVBVFVSRV9NQVNLX1NTRSB8IFhGRUFUVVJFX01BU0tfWU1NLCBOVUxMKSkKKysJCXN0YXRpY19icmFuY2hfZW5hYmxlKCZwb2x5MTMwNV91c2VfYXZ4Mik7CisgCisgCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfc2hhc2goJmFsZyk7CisgfQorLS0tIGEvY3J5cHRvL0tjb25maWcKKysrKyBiL2NyeXB0by9LY29uZmlnCitAQCAtNjk4LDYgKzY5OCw3IEBAIGNvbmZpZyBDUllQVE9fUE9MWTEzMDVfWDg2XzY0CisgCXRyaXN0YXRlICJQb2x5MTMwNSBhdXRoZW50aWNhdG9yIGFsZ29yaXRobSAoeDg2XzY0L1NTRTIvQVZYMikiCisgCWRlcGVuZHMgb24gWDg2ICYmIDY0QklUCisgCXNlbGVjdCBDUllQVE9fTElCX1BPTFkxMzA1X0dFTkVSSUMKKysJc2VsZWN0IENSWVBUT19BUkNIX0hBVkVfTElCX1BPTFkxMzA1CisgCWhlbHAKKyAJICBQb2x5MTMwNSBhdXRoZW50aWNhdG9yIGFsZ29yaXRobSwgUkZDNzUzOS4KKyAKKy0tLSBhL2xpYi9jcnlwdG8vS2NvbmZpZworKysrIGIvbGliL2NyeXB0by9LY29uZmlnCitAQCAtMzksNiArMzksNyBAQCBjb25maWcgQ1JZUFRPX0xJQl9ERVMKKyAKKyBjb25maWcgQ1JZUFRPX0xJQl9QT0xZMTMwNV9SU0laRQorIAlpbnQKKysJZGVmYXVsdCA0IGlmIFg4Nl82NAorIAlkZWZhdWx0IDEKKyAKKyBjb25maWcgQ1JZUFRPX0FSQ0hfSEFWRV9MSUJfUE9MWTEzMDUKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMTgtY3J5cHRvLWFybTY0LXBvbHkxMzA1LWluY29ycG9yYXRlLU9wZW5TU0wtQ1JZUFRPR0FNUy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMTgtY3J5cHRvLWFybTY0LXBvbHkxMzA1LWluY29ycG9yYXRlLU9wZW5TU0wtQ1JZUFRPR0FNUy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjRjNjU2Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAxOC1jcnlwdG8tYXJtNjQtcG9seTEzMDUtaW5jb3Jwb3JhdGUtT3BlblNTTC1DUllQVE9HQU1TLnBhdGNoCkBAIC0wLDAgKzEsMjA4MyBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQXJkIEJpZXNoZXV2ZWwgPGFyZGJAa2VybmVsLm9yZz4KK0RhdGU6IEZyaSwgOCBOb3YgMjAxOSAxMzoyMjoyNCArMDEwMAorU3ViamVjdDogW1BBVENIXSBjcnlwdG86IGFybTY0L3BvbHkxMzA1IC0gaW5jb3Jwb3JhdGUgT3BlblNTTC9DUllQVE9HQU1TIE5FT04KKyBpbXBsZW1lbnRhdGlvbgorCitjb21taXQgZjU2OWNhMTY0NzUxNTUwMTM1MjU2ODZkMGY3M2JjMzc5YzY3ZTYzNSB1cHN0cmVhbS4KKworVGhpcyBpcyBhIHN0cmFpZ2h0IGltcG9ydCBvZiB0aGUgT3BlblNTTC9DUllQVE9HQU1TIFBvbHkxMzA1IGltcGxlbWVudGF0aW9uCitmb3IgTkVPTiBhdXRob3JlZCBieSBBbmR5IFBvbHlha292LCBhbmQgY29udHJpYnV0ZWQgYnkgaGltIHRvIHRoZSBPcGVuU1NMCitwcm9qZWN0LiBUaGUgZmlsZSAncG9seTEzMDUtYXJtdjgucGwnIGlzIHRha2VuIHN0cmFpZ2h0IGZyb20gdGhpcyB1cHN0cmVhbQorR2l0SHViIHJlcG9zaXRvcnkgWzBdIGF0IGNvbW1pdCBlYzU1YTA4ZGMwMjQ0Y2U1NzBjNGZjN2NhZGUzMzBjNjA3OTg5NTJmLAorYW5kIGFscmVhZHkgY29udGFpbnMgYWxsIHRoZSBjaGFuZ2VzIHJlcXVpcmVkIHRvIGJ1aWxkIGl0IGFzIHBhcnQgb2YgYQorTGludXgga2VybmVsIG1vZHVsZS4KKworWzBdIGh0dHBzOi8vZ2l0aHViLmNvbS9kb3QtYXNtL2NyeXB0b2dhbXMKKworQ28tZGV2ZWxvcGVkLWJ5OiBBbmR5IFBvbHlha292IDxhcHByb0BjcnlwdG9nYW1zLm9yZz4KK1NpZ25lZC1vZmYtYnk6IEFuZHkgUG9seWFrb3YgPGFwcHJvQGNyeXB0b2dhbXMub3JnPgorU2lnbmVkLW9mZi1ieTogQXJkIEJpZXNoZXV2ZWwgPGFyZGJAa2VybmVsLm9yZz4KK1NpZ25lZC1vZmYtYnk6IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgYXJjaC9hcm02NC9jcnlwdG8vS2NvbmZpZyAgICAgICAgICAgICAgICAgfCAgIDYgKworIGFyY2gvYXJtNjQvY3J5cHRvL01ha2VmaWxlICAgICAgICAgICAgICAgIHwgIDEwICstCisgYXJjaC9hcm02NC9jcnlwdG8vcG9seTEzMDUtYXJtdjgucGwgICAgICAgfCA5MTMgKysrKysrKysrKysrKysrKysrKysrKworIGFyY2gvYXJtNjQvY3J5cHRvL3BvbHkxMzA1LWNvcmUuU19zaGlwcGVkIHwgODM1ICsrKysrKysrKysrKysrKysrKysrCisgYXJjaC9hcm02NC9jcnlwdG8vcG9seTEzMDUtZ2x1ZS5jICAgICAgICAgfCAyMzcgKysrKysrCisgbGliL2NyeXB0by9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKworIDYgZmlsZXMgY2hhbmdlZCwgMjAwMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGFyY2gvYXJtNjQvY3J5cHRvL3BvbHkxMzA1LWFybXY4LnBsCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGFyY2gvYXJtNjQvY3J5cHRvL3BvbHkxMzA1LWNvcmUuU19zaGlwcGVkCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGFyY2gvYXJtNjQvY3J5cHRvL3BvbHkxMzA1LWdsdWUuYworCistLS0gYS9hcmNoL2FybTY0L2NyeXB0by9LY29uZmlnCisrKysgYi9hcmNoL2FybTY0L2NyeXB0by9LY29uZmlnCitAQCAtMTA2LDYgKzEwNiwxMiBAQCBjb25maWcgQ1JZUFRPX0NIQUNIQTIwX05FT04KKyAJc2VsZWN0IENSWVBUT19MSUJfQ0hBQ0hBX0dFTkVSSUMKKyAJc2VsZWN0IENSWVBUT19BUkNIX0hBVkVfTElCX0NIQUNIQQorIAorK2NvbmZpZyBDUllQVE9fUE9MWTEzMDVfTkVPTgorKwl0cmlzdGF0ZSAiUG9seTEzMDUgaGFzaCBmdW5jdGlvbiB1c2luZyBzY2FsYXIgb3IgTkVPTiBpbnN0cnVjdGlvbnMiCisrCWRlcGVuZHMgb24gS0VSTkVMX01PREVfTkVPTgorKwlzZWxlY3QgQ1JZUFRPX0hBU0gKKysJc2VsZWN0IENSWVBUT19BUkNIX0hBVkVfTElCX1BPTFkxMzA1CisrCisgY29uZmlnIENSWVBUT19OSFBPTFkxMzA1X05FT04KKyAJdHJpc3RhdGUgIk5IUG9seTEzMDUgaGFzaCBmdW5jdGlvbiB1c2luZyBORU9OIGluc3RydWN0aW9ucyAoZm9yIEFkaWFudHVtKSIKKyAJZGVwZW5kcyBvbiBLRVJORUxfTU9ERV9ORU9OCistLS0gYS9hcmNoL2FybTY0L2NyeXB0by9NYWtlZmlsZQorKysrIGIvYXJjaC9hcm02NC9jcnlwdG8vTWFrZWZpbGUKK0BAIC01MCw2ICs1MCwxMCBAQCBzaGE1MTItYXJtNjQteSA6PSBzaGE1MTItZ2x1ZS5vIHNoYTUxMi1jCisgb2JqLSQoQ09ORklHX0NSWVBUT19DSEFDSEEyMF9ORU9OKSArPSBjaGFjaGEtbmVvbi5vCisgY2hhY2hhLW5lb24teSA6PSBjaGFjaGEtbmVvbi1jb3JlLm8gY2hhY2hhLW5lb24tZ2x1ZS5vCisgCisrb2JqLSQoQ09ORklHX0NSWVBUT19QT0xZMTMwNV9ORU9OKSArPSBwb2x5MTMwNS1uZW9uLm8KKytwb2x5MTMwNS1uZW9uLXkgOj0gcG9seTEzMDUtY29yZS5vIHBvbHkxMzA1LWdsdWUubworK0FGTEFHU19wb2x5MTMwNS1jb3JlLm8gKz0gLURwb2x5MTMwNV9pbml0PXBvbHkxMzA1X2luaXRfYXJtNjQKKysKKyBvYmotJChDT05GSUdfQ1JZUFRPX05IUE9MWTEzMDVfTkVPTikgKz0gbmhwb2x5MTMwNS1uZW9uLm8KKyBuaHBvbHkxMzA1LW5lb24teSA6PSBuaC1uZW9uLWNvcmUubyBuaHBvbHkxMzA1LW5lb24tZ2x1ZS5vCisgCitAQCAtNjgsMTEgKzcyLDE1IEBAIGlmZGVmIFJFR0VORVJBVEVfQVJNNjRfQ1JZUFRPCisgcXVpZXRfY21kX3Blcmxhc20gPSBQRVJMQVNNICRACisgICAgICAgY21kX3Blcmxhc20gPSAkKFBFUkwpICQoPCkgdm9pZCAkKEApCisgCisrJChzcmMpL3BvbHkxMzA1LWNvcmUuU19zaGlwcGVkOiAkKHNyYykvcG9seTEzMDUtYXJtdjgucGwKKysJJChjYWxsIGNtZCxwZXJsYXNtKQorKworICQoc3JjKS9zaGEyNTYtY29yZS5TX3NoaXBwZWQ6ICQoc3JjKS9zaGE1MTItYXJtdjgucGwKKyAJJChjYWxsIGNtZCxwZXJsYXNtKQorIAorICQoc3JjKS9zaGE1MTItY29yZS5TX3NoaXBwZWQ6ICQoc3JjKS9zaGE1MTItYXJtdjgucGwKKyAJJChjYWxsIGNtZCxwZXJsYXNtKQorKworIGVuZGlmCisgCistY2xlYW4tZmlsZXMgKz0gc2hhMjU2LWNvcmUuUyBzaGE1MTItY29yZS5TCisrY2xlYW4tZmlsZXMgKz0gcG9seTEzMDUtY29yZS5TIHNoYTI1Ni1jb3JlLlMgc2hhNTEyLWNvcmUuUworLS0tIC9kZXYvbnVsbAorKysrIGIvYXJjaC9hcm02NC9jcnlwdG8vcG9seTEzMDUtYXJtdjgucGwKK0BAIC0wLDAgKzEsOTEzIEBACisrIyEvdXNyL2Jpbi9lbnYgcGVybAorKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0xLjArIE9SIEJTRC0zLUNsYXVzZQorKyMKKysjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YsIEBkb3QtYXNtLCBpbml0aWFsbHkgZm9yIHRoZSBPcGVuU1NMCisrIyBwcm9qZWN0LgorKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysjCisrIyBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIFBvbHkxMzA1IGhhc2ggZm9yIEFSTXY4LgorKyMKKysjIEp1bmUgMjAxNQorKyMKKysjIE51bWJlcnMgYXJlIGN5Y2xlcyBwZXIgcHJvY2Vzc2VkIGJ5dGUgd2l0aCBwb2x5MTMwNV9ibG9ja3MgYWxvbmUuCisrIworKyMJCUlBTFUvZ2NjLTQuOQlORU9OCisrIworKyMgQXBwbGUgQTcJMS44Ni8rNSUJMC43MgorKyMgQ29ydGV4LUE1MwkyLjY5Lys1OCUJMS40NworKyMgQ29ydGV4LUE1NwkyLjcwLys3JQkxLjE0CisrIyBEZW52ZXIJMS42NC8rNTAlCTEuMTgoKikKKysjIFgtR2VuZQkyLjEzLys2OCUJMi4yNworKyMgTW9uZ29vc2UJMS43Ny8rNzUlCTEuMTIKKysjIEtyeW8JCTIuNzAvKzU1JQkxLjEzCisrIyBUaHVuZGVyWDIJMS4xNy8rOTUlCTEuMzYKKysjCisrIyAoKikJZXN0aW1hdGUgYmFzZWQgb24gcmVzb3VyY2VzIGF2YWlsYWJpbGl0eSBpcyBsZXNzIHRoYW4gMS4wLAorKyMJaS5lLiBtZWFzdXJlZCByZXN1bHQgaXMgd29yc2UgdGhhbiBleHBlY3RlZCwgcHJlc3VtYWJseSBiaW5hcnkKKysjCXRyYW5zbGF0b3IgaXMgbm90IGFsbWlnaHR5OworKworKyRmbGF2b3VyPXNoaWZ0OworKyRvdXRwdXQ9c2hpZnQ7CisrCisraWYgKCRmbGF2b3VyICYmICRmbGF2b3VyIG5lICJ2b2lkIikgeworKyAgICAkMCA9fiBtLyguKltcL1xcXSlbXlwvXFxdKyQvOyAkZGlyPSQxOworKyAgICAoICR4bGF0ZT0iJHtkaXJ9YXJtLXhsYXRlLnBsIiBhbmQgLWYgJHhsYXRlICkgb3IKKysgICAgKCAkeGxhdGU9IiR7ZGlyfS4uLy4uL3Blcmxhc20vYXJtLXhsYXRlLnBsIiBhbmQgLWYgJHhsYXRlKSBvcgorKyAgICBkaWUgImNhbid0IGxvY2F0ZSBhcm0teGxhdGUucGwiOworKworKyAgICBvcGVuIFNURE9VVCwifCBcIiReWFwiICR4bGF0ZSAkZmxhdm91ciAkb3V0cHV0IjsKKyt9IGVsc2UgeworKyAgICBvcGVuIFNURE9VVCwiPiRvdXRwdXQiOworK30KKysKKytteSAoJGN0eCwkaW5wLCRsZW4sJHBhZGJpdCkgPSBtYXAoIngkXyIsKDAuLjMpKTsKKytteSAoJG1hYywkbm9uY2UpPSgkaW5wLCRsZW4pOworKworK215ICgkaDAsJGgxLCRoMiwkcjAsJHIxLCRzMSwkdDAsJHQxLCRkMCwkZDEsJGQyKSA9IG1hcCgieCRfIiwoNC4uMTQpKTsKKysKKyskY29kZS49PDxfX187CisrI2lmbmRlZiBfX0tFUk5FTF9fCisrIyBpbmNsdWRlICJhcm1fYXJjaC5oIgorKy5leHRlcm4JT1BFTlNTTF9hcm1jYXBfUAorKyNlbmRpZgorKworKy50ZXh0CisrCisrLy8gZm9yd2FyZCAiZGVjbGFyYXRpb25zIiBhcmUgcmVxdWlyZWQgZm9yIEFwcGxlCisrLmdsb2JsCXBvbHkxMzA1X2Jsb2NrcworKy5nbG9ibAlwb2x5MTMwNV9lbWl0CisrCisrLmdsb2JsCXBvbHkxMzA1X2luaXQKKysudHlwZQlwb2x5MTMwNV9pbml0LCVmdW5jdGlvbgorKy5hbGlnbgk1CisrcG9seTEzMDVfaW5pdDoKKysJY21wCSRpbnAseHpyCisrCXN0cAl4enIseHpyLFskY3R4XQkJLy8gemVybyBoYXNoIHZhbHVlCisrCXN0cAl4enIseHpyLFskY3R4LCMxNl0JLy8gW2Fsb25nIHdpdGggaXNfYmFzZTJfMjZdCisrCisrCWNzZWwJeDAseHpyLHgwLGVxCisrCWIuZXEJLkxub19rZXkKKysKKysjaWZuZGVmCV9fS0VSTkVMX18KKysJYWRycAl4MTcsT1BFTlNTTF9hcm1jYXBfUAorKwlsZHIJdzE3LFt4MTcsIzpsbzEyOk9QRU5TU0xfYXJtY2FwX1BdCisrI2VuZGlmCisrCisrCWxkcAkkcjAsJHIxLFskaW5wXQkJLy8gbG9hZCBrZXkKKysJbW92CSRzMSwjMHhmZmZmZmZmYzBmZmZmZmZmCisrCW1vdmsJJHMxLCMweDBmZmYsbHNsIzQ4CisrI2lmZGVmCV9fQUFSQ0g2NEVCX18KKysJcmV2CSRyMCwkcjAJCQkvLyBmbGlwIGJ5dGVzCisrCXJldgkkcjEsJHIxCisrI2VuZGlmCisrCWFuZAkkcjAsJHIwLCRzMQkJLy8gJj0wZmZmZmZmYzBmZmZmZmZmCisrCWFuZAkkczEsJHMxLCMtNAorKwlhbmQJJHIxLCRyMSwkczEJCS8vICY9MGZmZmZmZmMwZmZmZmZmYworKwltb3YJdyMkczEsIy0xCisrCXN0cAkkcjAsJHIxLFskY3R4LCMzMl0JLy8gc2F2ZSBrZXkgdmFsdWUKKysJc3RyCXcjJHMxLFskY3R4LCM0OF0JLy8gaW1wb3NzaWJsZSBrZXkgcG93ZXIgdmFsdWUKKysKKysjaWZuZGVmCV9fS0VSTkVMX18KKysJdHN0CXcxNywjQVJNVjdfTkVPTgorKworKwlhZHIJJGQwLC5McG9seTEzMDVfYmxvY2tzCisrCWFkcgkkcjAsLkxwb2x5MTMwNV9ibG9ja3NfbmVvbgorKwlhZHIJJGQxLC5McG9seTEzMDVfZW1pdAorKworKwljc2VsCSRkMCwkZDAsJHIwLGVxCisrCisrIyBpZmRlZglfX0lMUDMyX18KKysJc3RwCXcjJGQwLHcjJGQxLFskbGVuXQorKyMgZWxzZQorKwlzdHAJJGQwLCRkMSxbJGxlbl0KKysjIGVuZGlmCisrI2VuZGlmCisrCW1vdgl4MCwjMQorKy5Mbm9fa2V5OgorKwlyZXQKKysuc2l6ZQlwb2x5MTMwNV9pbml0LC4tcG9seTEzMDVfaW5pdAorKworKy50eXBlCXBvbHkxMzA1X2Jsb2NrcywlZnVuY3Rpb24KKysuYWxpZ24JNQorK3BvbHkxMzA1X2Jsb2NrczoKKysuTHBvbHkxMzA1X2Jsb2NrczoKKysJYW5kcwkkbGVuLCRsZW4sIy0xNgorKwliLmVxCS5Mbm9fZGF0YQorKworKwlsZHAJJGgwLCRoMSxbJGN0eF0JCS8vIGxvYWQgaGFzaCB2YWx1ZQorKwlsZHAJJGgyLHgxNyxbJGN0eCwjMTZdCS8vIFthbG9uZyB3aXRoIGlzX2Jhc2UyXzI2XQorKwlsZHAJJHIwLCRyMSxbJGN0eCwjMzJdCS8vIGxvYWQga2V5IHZhbHVlCisrCisrI2lmZGVmCV9fQUFSQ0g2NEVCX18KKysJbHNyCSRkMCwkaDAsIzMyCisrCW1vdgl3IyRkMSx3IyRoMAorKwlsc3IJJGQyLCRoMSwjMzIKKysJbW92CXcxNSx3IyRoMQorKwlsc3IJeDE2LCRoMiwjMzIKKysjZWxzZQorKwltb3YJdyMkZDAsdyMkaDAKKysJbHNyCSRkMSwkaDAsIzMyCisrCW1vdgl3IyRkMix3IyRoMQorKwlsc3IJeDE1LCRoMSwjMzIKKysJbW92CXcxNix3IyRoMgorKyNlbmRpZgorKworKwlhZGQJJGQwLCRkMCwkZDEsbHNsIzI2CS8vIGJhc2UgMl4yNiAtPiBiYXNlIDJeNjQKKysJbHNyCSRkMSwkZDIsIzEyCisrCWFkZHMJJGQwLCRkMCwkZDIsbHNsIzUyCisrCWFkZAkkZDEsJGQxLHgxNSxsc2wjMTQKKysJYWRjCSRkMSwkZDEseHpyCisrCWxzcgkkZDIseDE2LCMyNAorKwlhZGRzCSRkMSwkZDEseDE2LGxzbCM0MAorKwlhZGMJJGQyLCRkMix4enIKKysKKysJY21wCXgxNywjMAkJCS8vIGlzX2Jhc2UyXzI2PworKwlhZGQJJHMxLCRyMSwkcjEsbHNyIzIJLy8gczEgPSByMSArIChyMSA+PiAyKQorKwljc2VsCSRoMCwkaDAsJGQwLGVxCQkvLyBjaG9vc2UgYmV0d2VlbiByYWRpeGVzCisrCWNzZWwJJGgxLCRoMSwkZDEsZXEKKysJY3NlbAkkaDIsJGgyLCRkMixlcQorKworKy5Mb29wOgorKwlsZHAJJHQwLCR0MSxbJGlucF0sIzE2CS8vIGxvYWQgaW5wdXQKKysJc3ViCSRsZW4sJGxlbiwjMTYKKysjaWZkZWYJX19BQVJDSDY0RUJfXworKwlyZXYJJHQwLCR0MAorKwlyZXYJJHQxLCR0MQorKyNlbmRpZgorKwlhZGRzCSRoMCwkaDAsJHQwCQkvLyBhY2N1bXVsYXRlIGlucHV0CisrCWFkY3MJJGgxLCRoMSwkdDEKKysKKysJbXVsCSRkMCwkaDAsJHIwCQkvLyBoMCpyMAorKwlhZGMJJGgyLCRoMiwkcGFkYml0CisrCXVtdWxoCSRkMSwkaDAsJHIwCisrCisrCW11bAkkdDAsJGgxLCRzMQkJLy8gaDEqNSpyMQorKwl1bXVsaAkkdDEsJGgxLCRzMQorKworKwlhZGRzCSRkMCwkZDAsJHQwCisrCW11bAkkdDAsJGgwLCRyMQkJLy8gaDAqcjEKKysJYWRjCSRkMSwkZDEsJHQxCisrCXVtdWxoCSRkMiwkaDAsJHIxCisrCisrCWFkZHMJJGQxLCRkMSwkdDAKKysJbXVsCSR0MCwkaDEsJHIwCQkvLyBoMSpyMAorKwlhZGMJJGQyLCRkMix4enIKKysJdW11bGgJJHQxLCRoMSwkcjAKKysKKysJYWRkcwkkZDEsJGQxLCR0MAorKwltdWwJJHQwLCRoMiwkczEJCS8vIGgyKjUqcjEKKysJYWRjCSRkMiwkZDIsJHQxCisrCW11bAkkdDEsJGgyLCRyMAkJLy8gaDIqcjAKKysKKysJYWRkcwkkZDEsJGQxLCR0MAorKwlhZGMJJGQyLCRkMiwkdDEKKysKKysJYW5kCSR0MCwkZDIsIy00CQkvLyBmaW5hbCByZWR1Y3Rpb24KKysJYW5kCSRoMiwkZDIsIzMKKysJYWRkCSR0MCwkdDAsJGQyLGxzciMyCisrCWFkZHMJJGgwLCRkMCwkdDAKKysJYWRjcwkkaDEsJGQxLHh6cgorKwlhZGMJJGgyLCRoMix4enIKKysKKysJY2JuegkkbGVuLC5Mb29wCisrCisrCXN0cAkkaDAsJGgxLFskY3R4XQkJLy8gc3RvcmUgaGFzaCB2YWx1ZQorKwlzdHAJJGgyLHh6cixbJGN0eCwjMTZdCS8vIFthbmQgY2xlYXIgaXNfYmFzZTJfMjZdCisrCisrLkxub19kYXRhOgorKwlyZXQKKysuc2l6ZQlwb2x5MTMwNV9ibG9ja3MsLi1wb2x5MTMwNV9ibG9ja3MKKysKKysudHlwZQlwb2x5MTMwNV9lbWl0LCVmdW5jdGlvbgorKy5hbGlnbgk1CisrcG9seTEzMDVfZW1pdDoKKysuTHBvbHkxMzA1X2VtaXQ6CisrCWxkcAkkaDAsJGgxLFskY3R4XQkJLy8gbG9hZCBoYXNoIGJhc2UgMl42NAorKwlsZHAJJGgyLCRyMCxbJGN0eCwjMTZdCS8vIFthbG9uZyB3aXRoIGlzX2Jhc2UyXzI2XQorKwlsZHAJJHQwLCR0MSxbJG5vbmNlXQkvLyBsb2FkIG5vbmNlCisrCisrI2lmZGVmCV9fQUFSQ0g2NEVCX18KKysJbHNyCSRkMCwkaDAsIzMyCisrCW1vdgl3IyRkMSx3IyRoMAorKwlsc3IJJGQyLCRoMSwjMzIKKysJbW92CXcxNSx3IyRoMQorKwlsc3IJeDE2LCRoMiwjMzIKKysjZWxzZQorKwltb3YJdyMkZDAsdyMkaDAKKysJbHNyCSRkMSwkaDAsIzMyCisrCW1vdgl3IyRkMix3IyRoMQorKwlsc3IJeDE1LCRoMSwjMzIKKysJbW92CXcxNix3IyRoMgorKyNlbmRpZgorKworKwlhZGQJJGQwLCRkMCwkZDEsbHNsIzI2CS8vIGJhc2UgMl4yNiAtPiBiYXNlIDJeNjQKKysJbHNyCSRkMSwkZDIsIzEyCisrCWFkZHMJJGQwLCRkMCwkZDIsbHNsIzUyCisrCWFkZAkkZDEsJGQxLHgxNSxsc2wjMTQKKysJYWRjCSRkMSwkZDEseHpyCisrCWxzcgkkZDIseDE2LCMyNAorKwlhZGRzCSRkMSwkZDEseDE2LGxzbCM0MAorKwlhZGMJJGQyLCRkMix4enIKKysKKysJY21wCSRyMCwjMAkJCS8vIGlzX2Jhc2UyXzI2PworKwljc2VsCSRoMCwkaDAsJGQwLGVxCQkvLyBjaG9vc2UgYmV0d2VlbiByYWRpeGVzCisrCWNzZWwJJGgxLCRoMSwkZDEsZXEKKysJY3NlbAkkaDIsJGgyLCRkMixlcQorKworKwlhZGRzCSRkMCwkaDAsIzUJCS8vIGNvbXBhcmUgdG8gbW9kdWx1cworKwlhZGNzCSRkMSwkaDEseHpyCisrCWFkYwkkZDIsJGgyLHh6cgorKworKwl0c3QJJGQyLCMtNAkJCS8vIHNlZSBpZiBpdCdzIGNhcnJpZWQvYm9ycm93ZWQKKysKKysJY3NlbAkkaDAsJGgwLCRkMCxlcQorKwljc2VsCSRoMSwkaDEsJGQxLGVxCisrCisrI2lmZGVmCV9fQUFSQ0g2NEVCX18KKysJcm9yCSR0MCwkdDAsIzMyCQkvLyBmbGlwIG5vbmNlIHdvcmRzCisrCXJvcgkkdDEsJHQxLCMzMgorKyNlbmRpZgorKwlhZGRzCSRoMCwkaDAsJHQwCQkvLyBhY2N1bXVsYXRlIG5vbmNlCisrCWFkYwkkaDEsJGgxLCR0MQorKyNpZmRlZglfX0FBUkNINjRFQl9fCisrCXJldgkkaDAsJGgwCQkJLy8gZmxpcCBvdXRwdXQgYnl0ZXMKKysJcmV2CSRoMSwkaDEKKysjZW5kaWYKKysJc3RwCSRoMCwkaDEsWyRtYWNdCQkvLyB3cml0ZSByZXN1bHQKKysKKysJcmV0CisrLnNpemUJcG9seTEzMDVfZW1pdCwuLXBvbHkxMzA1X2VtaXQKKytfX18KKytteSAoJFIwLCRSMSwkUzEsJFIyLCRTMiwkUjMsJFMzLCRSNCwkUzQpID0gbWFwKCJ2JF8uNHMiLCgwLi44KSk7CisrbXkgKCRJTjAxXzAsJElOMDFfMSwkSU4wMV8yLCRJTjAxXzMsJElOMDFfNCkgPSBtYXAoInYkXy4ycyIsKDkuLjEzKSk7CisrbXkgKCRJTjIzXzAsJElOMjNfMSwkSU4yM18yLCRJTjIzXzMsJElOMjNfNCkgPSBtYXAoInYkXy4ycyIsKDE0Li4xOCkpOworK215ICgkQUNDMCwkQUNDMSwkQUNDMiwkQUNDMywkQUNDNCkgPSBtYXAoInYkXy4yZCIsKDE5Li4yMykpOworK215ICgkSDAsJEgxLCRIMiwkSDMsJEg0KSA9IG1hcCgidiRfLjJzIiwoMjQuLjI4KSk7CisrbXkgKCRUMCwkVDEsJE1BU0spID0gbWFwKCJ2JF8iLCgyOS4uMzEpKTsKKysKKytteSAoJGluMiwkemVyb3MpPSgieDE2IiwieDE3Iik7CisrbXkgJGlzX2Jhc2UyXzI2ID0gJHplcm9zOwkJIyBib3Jyb3cKKysKKyskY29kZS49PDxfX187CisrLnR5cGUJcG9seTEzMDVfbXVsdCwlZnVuY3Rpb24KKysuYWxpZ24JNQorK3BvbHkxMzA1X211bHQ6CisrCW11bAkkZDAsJGgwLCRyMAkJLy8gaDAqcjAKKysJdW11bGgJJGQxLCRoMCwkcjAKKysKKysJbXVsCSR0MCwkaDEsJHMxCQkvLyBoMSo1KnIxCisrCXVtdWxoCSR0MSwkaDEsJHMxCisrCisrCWFkZHMJJGQwLCRkMCwkdDAKKysJbXVsCSR0MCwkaDAsJHIxCQkvLyBoMCpyMQorKwlhZGMJJGQxLCRkMSwkdDEKKysJdW11bGgJJGQyLCRoMCwkcjEKKysKKysJYWRkcwkkZDEsJGQxLCR0MAorKwltdWwJJHQwLCRoMSwkcjAJCS8vIGgxKnIwCisrCWFkYwkkZDIsJGQyLHh6cgorKwl1bXVsaAkkdDEsJGgxLCRyMAorKworKwlhZGRzCSRkMSwkZDEsJHQwCisrCW11bAkkdDAsJGgyLCRzMQkJLy8gaDIqNSpyMQorKwlhZGMJJGQyLCRkMiwkdDEKKysJbXVsCSR0MSwkaDIsJHIwCQkvLyBoMipyMAorKworKwlhZGRzCSRkMSwkZDEsJHQwCisrCWFkYwkkZDIsJGQyLCR0MQorKworKwlhbmQJJHQwLCRkMiwjLTQJCS8vIGZpbmFsIHJlZHVjdGlvbgorKwlhbmQJJGgyLCRkMiwjMworKwlhZGQJJHQwLCR0MCwkZDIsbHNyIzIKKysJYWRkcwkkaDAsJGQwLCR0MAorKwlhZGNzCSRoMSwkZDEseHpyCisrCWFkYwkkaDIsJGgyLHh6cgorKworKwlyZXQKKysuc2l6ZQlwb2x5MTMwNV9tdWx0LC4tcG9seTEzMDVfbXVsdAorKworKy50eXBlCXBvbHkxMzA1X3NwbGF0LCVmdW5jdGlvbgorKy5hbGlnbgk0CisrcG9seTEzMDVfc3BsYXQ6CisrCWFuZAl4MTIsJGgwLCMweDAzZmZmZmZmCS8vIGJhc2UgMl42NCAtPiBiYXNlIDJeMjYKKysJdWJmeAl4MTMsJGgwLCMyNiwjMjYKKysJZXh0cgl4MTQsJGgxLCRoMCwjNTIKKysJYW5kCXgxNCx4MTQsIzB4MDNmZmZmZmYKKysJdWJmeAl4MTUsJGgxLCMxNCwjMjYKKysJZXh0cgl4MTYsJGgyLCRoMSwjNDAKKysKKysJc3RyCXcxMixbJGN0eCwjMTYqMF0JLy8gcjAKKysJYWRkCXcxMix3MTMsdzEzLGxzbCMyCS8vIHIxKjUKKysJc3RyCXcxMyxbJGN0eCwjMTYqMV0JLy8gcjEKKysJYWRkCXcxMyx3MTQsdzE0LGxzbCMyCS8vIHIyKjUKKysJc3RyCXcxMixbJGN0eCwjMTYqMl0JLy8gczEKKysJc3RyCXcxNCxbJGN0eCwjMTYqM10JLy8gcjIKKysJYWRkCXcxNCx3MTUsdzE1LGxzbCMyCS8vIHIzKjUKKysJc3RyCXcxMyxbJGN0eCwjMTYqNF0JLy8gczIKKysJc3RyCXcxNSxbJGN0eCwjMTYqNV0JLy8gcjMKKysJYWRkCXcxNSx3MTYsdzE2LGxzbCMyCS8vIHI0KjUKKysJc3RyCXcxNCxbJGN0eCwjMTYqNl0JLy8gczMKKysJc3RyCXcxNixbJGN0eCwjMTYqN10JLy8gcjQKKysJc3RyCXcxNSxbJGN0eCwjMTYqOF0JLy8gczQKKysKKysJcmV0CisrLnNpemUJcG9seTEzMDVfc3BsYXQsLi1wb2x5MTMwNV9zcGxhdAorKworKyNpZmRlZglfX0tFUk5FTF9fCisrLmdsb2JsCXBvbHkxMzA1X2Jsb2Nrc19uZW9uCisrI2VuZGlmCisrLnR5cGUJcG9seTEzMDVfYmxvY2tzX25lb24sJWZ1bmN0aW9uCisrLmFsaWduCTUKKytwb2x5MTMwNV9ibG9ja3NfbmVvbjoKKysuTHBvbHkxMzA1X2Jsb2Nrc19uZW9uOgorKwlsZHIJJGlzX2Jhc2UyXzI2LFskY3R4LCMyNF0KKysJY21wCSRsZW4sIzEyOAorKwliLmxvCS5McG9seTEzMDVfYmxvY2tzCisrCisrCS5pbnN0CTB4ZDUwMzIzM2YJCS8vIHBhY2lhc3AKKysJc3RwCXgyOSx4MzAsW3NwLCMtODBdIQorKwlhZGQJeDI5LHNwLCMwCisrCisrCXN0cAlkOCxkOSxbc3AsIzE2XQkJLy8gbWVldCBBQkkgcmVxdWlyZW1lbnRzCisrCXN0cAlkMTAsZDExLFtzcCwjMzJdCisrCXN0cAlkMTIsZDEzLFtzcCwjNDhdCisrCXN0cAlkMTQsZDE1LFtzcCwjNjRdCisrCisrCWNiegkkaXNfYmFzZTJfMjYsLkxiYXNlMl82NF9uZW9uCisrCisrCWxkcAl3MTAsdzExLFskY3R4XQkJLy8gbG9hZCBoYXNoIHZhbHVlIGJhc2UgMl4yNgorKwlsZHAJdzEyLHcxMyxbJGN0eCwjOF0KKysJbGRyCXcxNCxbJGN0eCwjMTZdCisrCisrCXRzdAkkbGVuLCMzMQorKwliLmVxCS5MZXZlbl9uZW9uCisrCisrCWxkcAkkcjAsJHIxLFskY3R4LCMzMl0JLy8gbG9hZCBrZXkgdmFsdWUKKysKKysJYWRkCSRoMCx4MTAseDExLGxzbCMyNgkvLyBiYXNlIDJeMjYgLT4gYmFzZSAyXjY0CisrCWxzcgkkaDEseDEyLCMxMgorKwlhZGRzCSRoMCwkaDAseDEyLGxzbCM1MgorKwlhZGQJJGgxLCRoMSx4MTMsbHNsIzE0CisrCWFkYwkkaDEsJGgxLHh6cgorKwlsc3IJJGgyLHgxNCwjMjQKKysJYWRkcwkkaDEsJGgxLHgxNCxsc2wjNDAKKysJYWRjCSRkMiwkaDIseHpyCQkvLyBjYW4gYmUgcGFydGlhbGx5IHJlZHVjZWQuLi4KKysKKysJbGRwCSRkMCwkZDEsWyRpbnBdLCMxNgkvLyBsb2FkIGlucHV0CisrCXN1YgkkbGVuLCRsZW4sIzE2CisrCWFkZAkkczEsJHIxLCRyMSxsc3IjMgkvLyBzMSA9IHIxICsgKHIxID4+IDIpCisrCisrI2lmZGVmCV9fQUFSQ0g2NEVCX18KKysJcmV2CSRkMCwkZDAKKysJcmV2CSRkMSwkZDEKKysjZW5kaWYKKysJYWRkcwkkaDAsJGgwLCRkMAkJLy8gYWNjdW11bGF0ZSBpbnB1dAorKwlhZGNzCSRoMSwkaDEsJGQxCisrCWFkYwkkaDIsJGgyLCRwYWRiaXQKKysKKysJYmwJcG9seTEzMDVfbXVsdAorKworKwlhbmQJeDEwLCRoMCwjMHgwM2ZmZmZmZgkvLyBiYXNlIDJeNjQgLT4gYmFzZSAyXjI2CisrCXViZngJeDExLCRoMCwjMjYsIzI2CisrCWV4dHIJeDEyLCRoMSwkaDAsIzUyCisrCWFuZAl4MTIseDEyLCMweDAzZmZmZmZmCisrCXViZngJeDEzLCRoMSwjMTQsIzI2CisrCWV4dHIJeDE0LCRoMiwkaDEsIzQwCisrCisrCWIJLkxldmVuX25lb24KKysKKysuYWxpZ24JNAorKy5MYmFzZTJfNjRfbmVvbjoKKysJbGRwCSRyMCwkcjEsWyRjdHgsIzMyXQkvLyBsb2FkIGtleSB2YWx1ZQorKworKwlsZHAJJGgwLCRoMSxbJGN0eF0JCS8vIGxvYWQgaGFzaCB2YWx1ZSBiYXNlIDJeNjQKKysJbGRyCSRoMixbJGN0eCwjMTZdCisrCisrCXRzdAkkbGVuLCMzMQorKwliLmVxCS5MaW5pdF9uZW9uCisrCisrCWxkcAkkZDAsJGQxLFskaW5wXSwjMTYJLy8gbG9hZCBpbnB1dAorKwlzdWIJJGxlbiwkbGVuLCMxNgorKwlhZGQJJHMxLCRyMSwkcjEsbHNyIzIJLy8gczEgPSByMSArIChyMSA+PiAyKQorKyNpZmRlZglfX0FBUkNINjRFQl9fCisrCXJldgkkZDAsJGQwCisrCXJldgkkZDEsJGQxCisrI2VuZGlmCisrCWFkZHMJJGgwLCRoMCwkZDAJCS8vIGFjY3VtdWxhdGUgaW5wdXQKKysJYWRjcwkkaDEsJGgxLCRkMQorKwlhZGMJJGgyLCRoMiwkcGFkYml0CisrCisrCWJsCXBvbHkxMzA1X211bHQKKysKKysuTGluaXRfbmVvbjoKKysJbGRyCXcxNyxbJGN0eCwjNDhdCQkvLyBmaXJzdCB0YWJsZSBlbGVtZW50CisrCWFuZAl4MTAsJGgwLCMweDAzZmZmZmZmCS8vIGJhc2UgMl42NCAtPiBiYXNlIDJeMjYKKysJdWJmeAl4MTEsJGgwLCMyNiwjMjYKKysJZXh0cgl4MTIsJGgxLCRoMCwjNTIKKysJYW5kCXgxMix4MTIsIzB4MDNmZmZmZmYKKysJdWJmeAl4MTMsJGgxLCMxNCwjMjYKKysJZXh0cgl4MTQsJGgyLCRoMSwjNDAKKysKKysJY21wCXcxNywjLTEJCQkvLyBpcyB2YWx1ZSBpbXBvc3NpYmxlPworKwliLm5lCS5MZXZlbl9uZW9uCisrCisrCWZtb3YJJHtIMH0seDEwCisrCWZtb3YJJHtIMX0seDExCisrCWZtb3YJJHtIMn0seDEyCisrCWZtb3YJJHtIM30seDEzCisrCWZtb3YJJHtINH0seDE0CisrCisrCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gaW5pdGlhbGl6ZSByXm4gdGFibGUKKysJbW92CSRoMCwkcjAJCQkvLyByXjEKKysJYWRkCSRzMSwkcjEsJHIxLGxzciMyCS8vIHMxID0gcjEgKyAocjEgPj4gMikKKysJbW92CSRoMSwkcjEKKysJbW92CSRoMix4enIKKysJYWRkCSRjdHgsJGN0eCwjNDgrMTIKKysJYmwJcG9seTEzMDVfc3BsYXQKKysKKysJYmwJcG9seTEzMDVfbXVsdAkJLy8gcl4yCisrCXN1YgkkY3R4LCRjdHgsIzQKKysJYmwJcG9seTEzMDVfc3BsYXQKKysKKysJYmwJcG9seTEzMDVfbXVsdAkJLy8gcl4zCisrCXN1YgkkY3R4LCRjdHgsIzQKKysJYmwJcG9seTEzMDVfc3BsYXQKKysKKysJYmwJcG9seTEzMDVfbXVsdAkJLy8gcl40CisrCXN1YgkkY3R4LCRjdHgsIzQKKysJYmwJcG9seTEzMDVfc3BsYXQKKysJc3ViCSRjdHgsJGN0eCwjNDgJCS8vIHJlc3RvcmUgb3JpZ2luYWwgJGN0eAorKwliCS5MZG9fbmVvbgorKworKy5hbGlnbgk0CisrLkxldmVuX25lb246CisrCWZtb3YJJHtIMH0seDEwCisrCWZtb3YJJHtIMX0seDExCisrCWZtb3YJJHtIMn0seDEyCisrCWZtb3YJJHtIM30seDEzCisrCWZtb3YJJHtINH0seDE0CisrCisrLkxkb19uZW9uOgorKwlsZHAJeDgseDEyLFskaW5wLCMzMl0JLy8gaW5wWzI6M10KKysJc3VicwkkbGVuLCRsZW4sIzY0CisrCWxkcAl4OSx4MTMsWyRpbnAsIzQ4XQorKwlhZGQJJGluMiwkaW5wLCM5NgorKwlhZHIJJHplcm9zLC5MemVyb3MKKysKKysJbHNsCSRwYWRiaXQsJHBhZGJpdCwjMjQKKysJYWRkCXgxNSwkY3R4LCM0OAorKworKyNpZmRlZglfX0FBUkNINjRFQl9fCisrCXJldgl4OCx4OAorKwlyZXYJeDEyLHgxMgorKwlyZXYJeDkseDkKKysJcmV2CXgxMyx4MTMKKysjZW5kaWYKKysJYW5kCXg0LHg4LCMweDAzZmZmZmZmCS8vIGJhc2UgMl42NCAtPiBiYXNlIDJeMjYKKysJYW5kCXg1LHg5LCMweDAzZmZmZmZmCisrCXViZngJeDYseDgsIzI2LCMyNgorKwl1YmZ4CXg3LHg5LCMyNiwjMjYKKysJYWRkCXg0LHg0LHg1LGxzbCMzMgkJLy8gYmZpCXg0LHg1LCMzMiwjMzIKKysJZXh0cgl4OCx4MTIseDgsIzUyCisrCWV4dHIJeDkseDEzLHg5LCM1MgorKwlhZGQJeDYseDYseDcsbHNsIzMyCQkvLyBiZmkJeDYseDcsIzMyLCMzMgorKwlmbW92CSRJTjIzXzAseDQKKysJYW5kCXg4LHg4LCMweDAzZmZmZmZmCisrCWFuZAl4OSx4OSwjMHgwM2ZmZmZmZgorKwl1YmZ4CXgxMCx4MTIsIzE0LCMyNgorKwl1YmZ4CXgxMSx4MTMsIzE0LCMyNgorKwlhZGQJeDEyLCRwYWRiaXQseDEyLGxzciM0MAorKwlhZGQJeDEzLCRwYWRiaXQseDEzLGxzciM0MAorKwlhZGQJeDgseDgseDksbHNsIzMyCQkvLyBiZmkJeDgseDksIzMyLCMzMgorKwlmbW92CSRJTjIzXzEseDYKKysJYWRkCXgxMCx4MTAseDExLGxzbCMzMgkvLyBiZmkJeDEwLHgxMSwjMzIsIzMyCisrCWFkZAl4MTIseDEyLHgxMyxsc2wjMzIJLy8gYmZpCXgxMix4MTMsIzMyLCMzMgorKwlmbW92CSRJTjIzXzIseDgKKysJZm1vdgkkSU4yM18zLHgxMAorKwlmbW92CSRJTjIzXzQseDEyCisrCisrCWxkcAl4OCx4MTIsWyRpbnBdLCMxNgkvLyBpbnBbMDoxXQorKwlsZHAJeDkseDEzLFskaW5wXSwjNDgKKysKKysJbGQxCXskUjAsJFIxLCRTMSwkUjJ9LFt4MTVdLCM2NAorKwlsZDEJeyRTMiwkUjMsJFMzLCRSNH0sW3gxNV0sIzY0CisrCWxkMQl7JFM0fSxbeDE1XQorKworKyNpZmRlZglfX0FBUkNINjRFQl9fCisrCXJldgl4OCx4OAorKwlyZXYJeDEyLHgxMgorKwlyZXYJeDkseDkKKysJcmV2CXgxMyx4MTMKKysjZW5kaWYKKysJYW5kCXg0LHg4LCMweDAzZmZmZmZmCS8vIGJhc2UgMl42NCAtPiBiYXNlIDJeMjYKKysJYW5kCXg1LHg5LCMweDAzZmZmZmZmCisrCXViZngJeDYseDgsIzI2LCMyNgorKwl1YmZ4CXg3LHg5LCMyNiwjMjYKKysJYWRkCXg0LHg0LHg1LGxzbCMzMgkJLy8gYmZpCXg0LHg1LCMzMiwjMzIKKysJZXh0cgl4OCx4MTIseDgsIzUyCisrCWV4dHIJeDkseDEzLHg5LCM1MgorKwlhZGQJeDYseDYseDcsbHNsIzMyCQkvLyBiZmkJeDYseDcsIzMyLCMzMgorKwlmbW92CSRJTjAxXzAseDQKKysJYW5kCXg4LHg4LCMweDAzZmZmZmZmCisrCWFuZAl4OSx4OSwjMHgwM2ZmZmZmZgorKwl1YmZ4CXgxMCx4MTIsIzE0LCMyNgorKwl1YmZ4CXgxMSx4MTMsIzE0LCMyNgorKwlhZGQJeDEyLCRwYWRiaXQseDEyLGxzciM0MAorKwlhZGQJeDEzLCRwYWRiaXQseDEzLGxzciM0MAorKwlhZGQJeDgseDgseDksbHNsIzMyCQkvLyBiZmkJeDgseDksIzMyLCMzMgorKwlmbW92CSRJTjAxXzEseDYKKysJYWRkCXgxMCx4MTAseDExLGxzbCMzMgkvLyBiZmkJeDEwLHgxMSwjMzIsIzMyCisrCWFkZAl4MTIseDEyLHgxMyxsc2wjMzIJLy8gYmZpCXgxMix4MTMsIzMyLCMzMgorKwltb3ZpCSRNQVNLLjJkLCMtMQorKwlmbW92CSRJTjAxXzIseDgKKysJZm1vdgkkSU4wMV8zLHgxMAorKwlmbW92CSRJTjAxXzQseDEyCisrCXVzaHIJJE1BU0suMmQsJE1BU0suMmQsIzM4CisrCisrCWIubHMJLkxza2lwX2xvb3AKKysKKysuYWxpZ24JNAorKy5Mb29wX25lb246CisrCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysJLy8gKChpbnBbMF0qcl40K2lucFsyXSpyXjIraW5wWzRdKSpyXjQraW5wWzZdKnJeMgorKwkvLyAoKGlucFsxXSpyXjQraW5wWzNdKnJeMitpbnBbNV0pKnJeMytpbnBbN10qcgorKwkvLyAgIFxfX19fX19fX19fX19fX19fX19fLworKwkvLyAoKGlucFswXSpyXjQraW5wWzJdKnJeMitpbnBbNF0pKnJeNCtpbnBbNl0qcl4yK2lucFs4XSkqcl4yCisrCS8vICgoaW5wWzFdKnJeNCtpbnBbM10qcl4yK2lucFs1XSkqcl40K2lucFs3XSpyXjIraW5wWzldKSpyCisrCS8vICAgXF9fX19fX19fX19fX19fX19fX18vIFxfX19fX19fX19fX19fX19fX19fXy8KKysJLy8KKysJLy8gTm90ZSB0aGF0IHdlIHN0YXJ0IHdpdGggaW5wWzI6M10qcl4yLiBUaGlzIGlzIGJlY2F1c2UgaXQKKysJLy8gZG9lc24ndCBkZXBlbmQgb24gcmVkdWN0aW9uIGluIHByZXZpb3VzIGl0ZXJhdGlvbi4KKysJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKwkvLyBkNCA9IGgwKnI0ICsgaDEqcjMgICArIGgyKnIyICAgKyBoMypyMSAgICsgaDQqcjAKKysJLy8gZDMgPSBoMCpyMyArIGgxKnIyICAgKyBoMipyMSAgICsgaDMqcjAgICArIGg0KjUqcjQKKysJLy8gZDIgPSBoMCpyMiArIGgxKnIxICAgKyBoMipyMCAgICsgaDMqNSpyNCArIGg0KjUqcjMKKysJLy8gZDEgPSBoMCpyMSArIGgxKnIwICAgKyBoMio1KnI0ICsgaDMqNSpyMyArIGg0KjUqcjIKKysJLy8gZDAgPSBoMCpyMCArIGgxKjUqcjQgKyBoMio1KnIzICsgaDMqNSpyMiArIGg0KjUqcjEKKysKKysJc3VicwkkbGVuLCRsZW4sIzY0CisrCXVtdWxsCSRBQ0M0LCRJTjIzXzAsJHtSNH1bMl0KKysJY3NlbAkkaW4yLCR6ZXJvcywkaW4yLGxvCisrCXVtdWxsCSRBQ0MzLCRJTjIzXzAsJHtSM31bMl0KKysJdW11bGwJJEFDQzIsJElOMjNfMCwke1IyfVsyXQorKwkgbGRwCXg4LHgxMixbJGluMl0sIzE2CS8vIGlucFsyOjNdIChvciB6ZXJvKQorKwl1bXVsbAkkQUNDMSwkSU4yM18wLCR7UjF9WzJdCisrCSBsZHAJeDkseDEzLFskaW4yXSwjNDgKKysJdW11bGwJJEFDQzAsJElOMjNfMCwke1IwfVsyXQorKyNpZmRlZglfX0FBUkNINjRFQl9fCisrCSByZXYJeDgseDgKKysJIHJldgl4MTIseDEyCisrCSByZXYJeDkseDkKKysJIHJldgl4MTMseDEzCisrI2VuZGlmCisrCisrCXVtbGFsCSRBQ0M0LCRJTjIzXzEsJHtSM31bMl0KKysJIGFuZAl4NCx4OCwjMHgwM2ZmZmZmZgkvLyBiYXNlIDJeNjQgLT4gYmFzZSAyXjI2CisrCXVtbGFsCSRBQ0MzLCRJTjIzXzEsJHtSMn1bMl0KKysJIGFuZAl4NSx4OSwjMHgwM2ZmZmZmZgorKwl1bWxhbAkkQUNDMiwkSU4yM18xLCR7UjF9WzJdCisrCSB1YmZ4CXg2LHg4LCMyNiwjMjYKKysJdW1sYWwJJEFDQzEsJElOMjNfMSwke1IwfVsyXQorKwkgdWJmeAl4Nyx4OSwjMjYsIzI2CisrCXVtbGFsCSRBQ0MwLCRJTjIzXzEsJHtTNH1bMl0KKysJIGFkZAl4NCx4NCx4NSxsc2wjMzIJCS8vIGJmaQl4NCx4NSwjMzIsIzMyCisrCisrCXVtbGFsCSRBQ0M0LCRJTjIzXzIsJHtSMn1bMl0KKysJIGV4dHIJeDgseDEyLHg4LCM1MgorKwl1bWxhbAkkQUNDMywkSU4yM18yLCR7UjF9WzJdCisrCSBleHRyCXg5LHgxMyx4OSwjNTIKKysJdW1sYWwJJEFDQzIsJElOMjNfMiwke1IwfVsyXQorKwkgYWRkCXg2LHg2LHg3LGxzbCMzMgkJLy8gYmZpCXg2LHg3LCMzMiwjMzIKKysJdW1sYWwJJEFDQzEsJElOMjNfMiwke1M0fVsyXQorKwkgZm1vdgkkSU4yM18wLHg0CisrCXVtbGFsCSRBQ0MwLCRJTjIzXzIsJHtTM31bMl0KKysJIGFuZAl4OCx4OCwjMHgwM2ZmZmZmZgorKworKwl1bWxhbAkkQUNDNCwkSU4yM18zLCR7UjF9WzJdCisrCSBhbmQJeDkseDksIzB4MDNmZmZmZmYKKysJdW1sYWwJJEFDQzMsJElOMjNfMywke1IwfVsyXQorKwkgdWJmeAl4MTAseDEyLCMxNCwjMjYKKysJdW1sYWwJJEFDQzIsJElOMjNfMywke1M0fVsyXQorKwkgdWJmeAl4MTEseDEzLCMxNCwjMjYKKysJdW1sYWwJJEFDQzEsJElOMjNfMywke1MzfVsyXQorKwkgYWRkCXg4LHg4LHg5LGxzbCMzMgkJLy8gYmZpCXg4LHg5LCMzMiwjMzIKKysJdW1sYWwJJEFDQzAsJElOMjNfMywke1MyfVsyXQorKwkgZm1vdgkkSU4yM18xLHg2CisrCisrCWFkZAkkSU4wMV8yLCRJTjAxXzIsJEgyCisrCSBhZGQJeDEyLCRwYWRiaXQseDEyLGxzciM0MAorKwl1bWxhbAkkQUNDNCwkSU4yM180LCR7UjB9WzJdCisrCSBhZGQJeDEzLCRwYWRiaXQseDEzLGxzciM0MAorKwl1bWxhbAkkQUNDMywkSU4yM180LCR7UzR9WzJdCisrCSBhZGQJeDEwLHgxMCx4MTEsbHNsIzMyCS8vIGJmaQl4MTAseDExLCMzMiwjMzIKKysJdW1sYWwJJEFDQzIsJElOMjNfNCwke1MzfVsyXQorKwkgYWRkCXgxMix4MTIseDEzLGxzbCMzMgkvLyBiZmkJeDEyLHgxMywjMzIsIzMyCisrCXVtbGFsCSRBQ0MxLCRJTjIzXzQsJHtTMn1bMl0KKysJIGZtb3YJJElOMjNfMix4OAorKwl1bWxhbAkkQUNDMCwkSU4yM180LCR7UzF9WzJdCisrCSBmbW92CSRJTjIzXzMseDEwCisrCisrCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysJLy8gKGhhc2graW5wWzA6MV0pKnJeNCBhbmQgYWNjdW11bGF0ZQorKworKwlhZGQJJElOMDFfMCwkSU4wMV8wLCRIMAorKwkgZm1vdgkkSU4yM180LHgxMgorKwl1bWxhbAkkQUNDMywkSU4wMV8yLCR7UjF9WzBdCisrCSBsZHAJeDgseDEyLFskaW5wXSwjMTYJLy8gaW5wWzA6MV0KKysJdW1sYWwJJEFDQzAsJElOMDFfMiwke1MzfVswXQorKwkgbGRwCXg5LHgxMyxbJGlucF0sIzQ4CisrCXVtbGFsCSRBQ0M0LCRJTjAxXzIsJHtSMn1bMF0KKysJdW1sYWwJJEFDQzEsJElOMDFfMiwke1M0fVswXQorKwl1bWxhbAkkQUNDMiwkSU4wMV8yLCR7UjB9WzBdCisrI2lmZGVmCV9fQUFSQ0g2NEVCX18KKysJIHJldgl4OCx4OAorKwkgcmV2CXgxMix4MTIKKysJIHJldgl4OSx4OQorKwkgcmV2CXgxMyx4MTMKKysjZW5kaWYKKysKKysJYWRkCSRJTjAxXzEsJElOMDFfMSwkSDEKKysJdW1sYWwJJEFDQzMsJElOMDFfMCwke1IzfVswXQorKwl1bWxhbAkkQUNDNCwkSU4wMV8wLCR7UjR9WzBdCisrCSBhbmQJeDQseDgsIzB4MDNmZmZmZmYJLy8gYmFzZSAyXjY0IC0+IGJhc2UgMl4yNgorKwl1bWxhbAkkQUNDMiwkSU4wMV8wLCR7UjJ9WzBdCisrCSBhbmQJeDUseDksIzB4MDNmZmZmZmYKKysJdW1sYWwJJEFDQzAsJElOMDFfMCwke1IwfVswXQorKwkgdWJmeAl4Nix4OCwjMjYsIzI2CisrCXVtbGFsCSRBQ0MxLCRJTjAxXzAsJHtSMX1bMF0KKysJIHViZngJeDcseDksIzI2LCMyNgorKworKwlhZGQJJElOMDFfMywkSU4wMV8zLCRIMworKwkgYWRkCXg0LHg0LHg1LGxzbCMzMgkJLy8gYmZpCXg0LHg1LCMzMiwjMzIKKysJdW1sYWwJJEFDQzMsJElOMDFfMSwke1IyfVswXQorKwkgZXh0cgl4OCx4MTIseDgsIzUyCisrCXVtbGFsCSRBQ0M0LCRJTjAxXzEsJHtSM31bMF0KKysJIGV4dHIJeDkseDEzLHg5LCM1MgorKwl1bWxhbAkkQUNDMCwkSU4wMV8xLCR7UzR9WzBdCisrCSBhZGQJeDYseDYseDcsbHNsIzMyCQkvLyBiZmkJeDYseDcsIzMyLCMzMgorKwl1bWxhbAkkQUNDMiwkSU4wMV8xLCR7UjF9WzBdCisrCSBmbW92CSRJTjAxXzAseDQKKysJdW1sYWwJJEFDQzEsJElOMDFfMSwke1IwfVswXQorKwkgYW5kCXg4LHg4LCMweDAzZmZmZmZmCisrCisrCWFkZAkkSU4wMV80LCRJTjAxXzQsJEg0CisrCSBhbmQJeDkseDksIzB4MDNmZmZmZmYKKysJdW1sYWwJJEFDQzMsJElOMDFfMywke1IwfVswXQorKwkgdWJmeAl4MTAseDEyLCMxNCwjMjYKKysJdW1sYWwJJEFDQzAsJElOMDFfMywke1MyfVswXQorKwkgdWJmeAl4MTEseDEzLCMxNCwjMjYKKysJdW1sYWwJJEFDQzQsJElOMDFfMywke1IxfVswXQorKwkgYWRkCXg4LHg4LHg5LGxzbCMzMgkJLy8gYmZpCXg4LHg5LCMzMiwjMzIKKysJdW1sYWwJJEFDQzEsJElOMDFfMywke1MzfVswXQorKwkgZm1vdgkkSU4wMV8xLHg2CisrCXVtbGFsCSRBQ0MyLCRJTjAxXzMsJHtTNH1bMF0KKysJIGFkZAl4MTIsJHBhZGJpdCx4MTIsbHNyIzQwCisrCisrCXVtbGFsCSRBQ0MzLCRJTjAxXzQsJHtTNH1bMF0KKysJIGFkZAl4MTMsJHBhZGJpdCx4MTMsbHNyIzQwCisrCXVtbGFsCSRBQ0MwLCRJTjAxXzQsJHtTMX1bMF0KKysJIGFkZAl4MTAseDEwLHgxMSxsc2wjMzIJLy8gYmZpCXgxMCx4MTEsIzMyLCMzMgorKwl1bWxhbAkkQUNDNCwkSU4wMV80LCR7UjB9WzBdCisrCSBhZGQJeDEyLHgxMix4MTMsbHNsIzMyCS8vIGJmaQl4MTIseDEzLCMzMiwjMzIKKysJdW1sYWwJJEFDQzEsJElOMDFfNCwke1MyfVswXQorKwkgZm1vdgkkSU4wMV8yLHg4CisrCXVtbGFsCSRBQ0MyLCRJTjAxXzQsJHtTM31bMF0KKysJIGZtb3YJJElOMDFfMyx4MTAKKysJIGZtb3YJJElOMDFfNCx4MTIKKysKKysJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysJLy8gbGF6eSByZWR1Y3Rpb24gYXMgZGlzY3Vzc2VkIGluICJORU9OIGNyeXB0byIgYnkgRC5KLiBCZXJuc3RlaW4KKysJLy8gYW5kIFAuIFNjaHdhYmUKKysJLy8KKysJLy8gW3NlZSBkaXNjdXNzaW9uIGluIHBvbHkxMzA1LWFybXY0IG1vZHVsZV0KKysKKysJdXNocgkkVDAuMmQsJEFDQzMsIzI2CisrCXh0bgkkSDMsJEFDQzMKKysJIHVzaHIJJFQxLjJkLCRBQ0MwLCMyNgorKwkgYW5kCSRBQ0MwLCRBQ0MwLCRNQVNLLjJkCisrCWFkZAkkQUNDNCwkQUNDNCwkVDAuMmQJLy8gaDMgLT4gaDQKKysJYmljCSRIMywjMHhmYyxsc2wjMjQJLy8gJj0weDAzZmZmZmZmCisrCSBhZGQJJEFDQzEsJEFDQzEsJFQxLjJkCS8vIGgwIC0+IGgxCisrCisrCXVzaHIJJFQwLjJkLCRBQ0M0LCMyNgorKwl4dG4JJEg0LCRBQ0M0CisrCSB1c2hyCSRUMS4yZCwkQUNDMSwjMjYKKysJIHh0bgkkSDEsJEFDQzEKKysJYmljCSRINCwjMHhmYyxsc2wjMjQKKysJIGFkZAkkQUNDMiwkQUNDMiwkVDEuMmQJLy8gaDEgLT4gaDIKKysKKysJYWRkCSRBQ0MwLCRBQ0MwLCRUMC4yZAorKwlzaGwJJFQwLjJkLCRUMC4yZCwjMgorKwkgc2hybgkkVDEuMnMsJEFDQzIsIzI2CisrCSB4dG4JJEgyLCRBQ0MyCisrCWFkZAkkQUNDMCwkQUNDMCwkVDAuMmQJLy8gaDQgLT4gaDAKKysJIGJpYwkkSDEsIzB4ZmMsbHNsIzI0CisrCSBhZGQJJEgzLCRIMywkVDEuMnMJCS8vIGgyIC0+IGgzCisrCSBiaWMJJEgyLCMweGZjLGxzbCMyNAorKworKwlzaHJuCSRUMC4ycywkQUNDMCwjMjYKKysJeHRuCSRIMCwkQUNDMAorKwkgdXNocgkkVDEuMnMsJEgzLCMyNgorKwkgYmljCSRIMywjMHhmYyxsc2wjMjQKKysJIGJpYwkkSDAsIzB4ZmMsbHNsIzI0CisrCWFkZAkkSDEsJEgxLCRUMC4ycwkJLy8gaDAgLT4gaDEKKysJIGFkZAkkSDQsJEg0LCRUMS4ycwkJLy8gaDMgLT4gaDQKKysKKysJYi5oaQkuTG9vcF9uZW9uCisrCisrLkxza2lwX2xvb3A6CisrCWR1cAkkSU4yM18yLCR7SU4yM18yfVswXQorKwlhZGQJJElOMDFfMiwkSU4wMV8yLCRIMgorKworKwkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCS8vIG11bHRpcGx5IChpbnBbMDoxXStoYXNoKSBvciBpbnBbMjozXSBieSByXjI6cl4xCisrCisrCWFkZHMJJGxlbiwkbGVuLCMzMgorKwliLm5lCS5Mb25nX3RhaWwKKysKKysJZHVwCSRJTjIzXzIsJHtJTjAxXzJ9WzBdCisrCWFkZAkkSU4yM18wLCRJTjAxXzAsJEgwCisrCWFkZAkkSU4yM18zLCRJTjAxXzMsJEgzCisrCWFkZAkkSU4yM18xLCRJTjAxXzEsJEgxCisrCWFkZAkkSU4yM180LCRJTjAxXzQsJEg0CisrCisrLkxvbmdfdGFpbDoKKysJZHVwCSRJTjIzXzAsJHtJTjIzXzB9WzBdCisrCXVtdWxsMgkkQUNDMCwkSU4yM18yLCR7UzN9CisrCXVtdWxsMgkkQUNDMywkSU4yM18yLCR7UjF9CisrCXVtdWxsMgkkQUNDNCwkSU4yM18yLCR7UjJ9CisrCXVtdWxsMgkkQUNDMiwkSU4yM18yLCR7UjB9CisrCXVtdWxsMgkkQUNDMSwkSU4yM18yLCR7UzR9CisrCisrCWR1cAkkSU4yM18xLCR7SU4yM18xfVswXQorKwl1bWxhbDIJJEFDQzAsJElOMjNfMCwke1IwfQorKwl1bWxhbDIJJEFDQzIsJElOMjNfMCwke1IyfQorKwl1bWxhbDIJJEFDQzMsJElOMjNfMCwke1IzfQorKwl1bWxhbDIJJEFDQzQsJElOMjNfMCwke1I0fQorKwl1bWxhbDIJJEFDQzEsJElOMjNfMCwke1IxfQorKworKwlkdXAJJElOMjNfMywke0lOMjNfM31bMF0KKysJdW1sYWwyCSRBQ0MwLCRJTjIzXzEsJHtTNH0KKysJdW1sYWwyCSRBQ0MzLCRJTjIzXzEsJHtSMn0KKysJdW1sYWwyCSRBQ0MyLCRJTjIzXzEsJHtSMX0KKysJdW1sYWwyCSRBQ0M0LCRJTjIzXzEsJHtSM30KKysJdW1sYWwyCSRBQ0MxLCRJTjIzXzEsJHtSMH0KKysKKysJZHVwCSRJTjIzXzQsJHtJTjIzXzR9WzBdCisrCXVtbGFsMgkkQUNDMywkSU4yM18zLCR7UjB9CisrCXVtbGFsMgkkQUNDNCwkSU4yM18zLCR7UjF9CisrCXVtbGFsMgkkQUNDMCwkSU4yM18zLCR7UzJ9CisrCXVtbGFsMgkkQUNDMSwkSU4yM18zLCR7UzN9CisrCXVtbGFsMgkkQUNDMiwkSU4yM18zLCR7UzR9CisrCisrCXVtbGFsMgkkQUNDMywkSU4yM180LCR7UzR9CisrCXVtbGFsMgkkQUNDMCwkSU4yM180LCR7UzF9CisrCXVtbGFsMgkkQUNDNCwkSU4yM180LCR7UjB9CisrCXVtbGFsMgkkQUNDMSwkSU4yM180LCR7UzJ9CisrCXVtbGFsMgkkQUNDMiwkSU4yM180LCR7UzN9CisrCisrCWIuZXEJLkxzaG9ydF90YWlsCisrCisrCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysJLy8gKGhhc2graW5wWzA6MV0pKnJeNDpyXjMgYW5kIGFjY3VtdWxhdGUKKysKKysJYWRkCSRJTjAxXzAsJElOMDFfMCwkSDAKKysJdW1sYWwJJEFDQzMsJElOMDFfMiwke1IxfQorKwl1bWxhbAkkQUNDMCwkSU4wMV8yLCR7UzN9CisrCXVtbGFsCSRBQ0M0LCRJTjAxXzIsJHtSMn0KKysJdW1sYWwJJEFDQzEsJElOMDFfMiwke1M0fQorKwl1bWxhbAkkQUNDMiwkSU4wMV8yLCR7UjB9CisrCisrCWFkZAkkSU4wMV8xLCRJTjAxXzEsJEgxCisrCXVtbGFsCSRBQ0MzLCRJTjAxXzAsJHtSM30KKysJdW1sYWwJJEFDQzAsJElOMDFfMCwke1IwfQorKwl1bWxhbAkkQUNDNCwkSU4wMV8wLCR7UjR9CisrCXVtbGFsCSRBQ0MxLCRJTjAxXzAsJHtSMX0KKysJdW1sYWwJJEFDQzIsJElOMDFfMCwke1IyfQorKworKwlhZGQJJElOMDFfMywkSU4wMV8zLCRIMworKwl1bWxhbAkkQUNDMywkSU4wMV8xLCR7UjJ9CisrCXVtbGFsCSRBQ0MwLCRJTjAxXzEsJHtTNH0KKysJdW1sYWwJJEFDQzQsJElOMDFfMSwke1IzfQorKwl1bWxhbAkkQUNDMSwkSU4wMV8xLCR7UjB9CisrCXVtbGFsCSRBQ0MyLCRJTjAxXzEsJHtSMX0KKysKKysJYWRkCSRJTjAxXzQsJElOMDFfNCwkSDQKKysJdW1sYWwJJEFDQzMsJElOMDFfMywke1IwfQorKwl1bWxhbAkkQUNDMCwkSU4wMV8zLCR7UzJ9CisrCXVtbGFsCSRBQ0M0LCRJTjAxXzMsJHtSMX0KKysJdW1sYWwJJEFDQzEsJElOMDFfMywke1MzfQorKwl1bWxhbAkkQUNDMiwkSU4wMV8zLCR7UzR9CisrCisrCXVtbGFsCSRBQ0MzLCRJTjAxXzQsJHtTNH0KKysJdW1sYWwJJEFDQzAsJElOMDFfNCwke1MxfQorKwl1bWxhbAkkQUNDNCwkSU4wMV80LCR7UjB9CisrCXVtbGFsCSRBQ0MxLCRJTjAxXzQsJHtTMn0KKysJdW1sYWwJJEFDQzIsJElOMDFfNCwke1MzfQorKworKy5Mc2hvcnRfdGFpbDoKKysJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKwkvLyBob3Jpem9udGFsIGFkZAorKworKwlhZGRwCSRBQ0MzLCRBQ0MzLCRBQ0MzCisrCSBsZHAJZDgsZDksW3NwLCMxNl0JCS8vIG1lZXQgQUJJIHJlcXVpcmVtZW50cworKwlhZGRwCSRBQ0MwLCRBQ0MwLCRBQ0MwCisrCSBsZHAJZDEwLGQxMSxbc3AsIzMyXQorKwlhZGRwCSRBQ0M0LCRBQ0M0LCRBQ0M0CisrCSBsZHAJZDEyLGQxMyxbc3AsIzQ4XQorKwlhZGRwCSRBQ0MxLCRBQ0MxLCRBQ0MxCisrCSBsZHAJZDE0LGQxNSxbc3AsIzY0XQorKwlhZGRwCSRBQ0MyLCRBQ0MyLCRBQ0MyCisrCSBsZHIJeDMwLFtzcCwjOF0KKysJIC5pbnN0CTB4ZDUwMzIzYmYJCS8vIGF1dGlhc3AKKysKKysJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKwkvLyBsYXp5IHJlZHVjdGlvbiwgYnV0IHdpdGhvdXQgbmFycm93aW5nCisrCisrCXVzaHIJJFQwLjJkLCRBQ0MzLCMyNgorKwlhbmQJJEFDQzMsJEFDQzMsJE1BU0suMmQKKysJIHVzaHIJJFQxLjJkLCRBQ0MwLCMyNgorKwkgYW5kCSRBQ0MwLCRBQ0MwLCRNQVNLLjJkCisrCisrCWFkZAkkQUNDNCwkQUNDNCwkVDAuMmQJLy8gaDMgLT4gaDQKKysJIGFkZAkkQUNDMSwkQUNDMSwkVDEuMmQJLy8gaDAgLT4gaDEKKysKKysJdXNocgkkVDAuMmQsJEFDQzQsIzI2CisrCWFuZAkkQUNDNCwkQUNDNCwkTUFTSy4yZAorKwkgdXNocgkkVDEuMmQsJEFDQzEsIzI2CisrCSBhbmQJJEFDQzEsJEFDQzEsJE1BU0suMmQKKysJIGFkZAkkQUNDMiwkQUNDMiwkVDEuMmQJLy8gaDEgLT4gaDIKKysKKysJYWRkCSRBQ0MwLCRBQ0MwLCRUMC4yZAorKwlzaGwJJFQwLjJkLCRUMC4yZCwjMgorKwkgdXNocgkkVDEuMmQsJEFDQzIsIzI2CisrCSBhbmQJJEFDQzIsJEFDQzIsJE1BU0suMmQKKysJYWRkCSRBQ0MwLCRBQ0MwLCRUMC4yZAkvLyBoNCAtPiBoMAorKwkgYWRkCSRBQ0MzLCRBQ0MzLCRUMS4yZAkvLyBoMiAtPiBoMworKworKwl1c2hyCSRUMC4yZCwkQUNDMCwjMjYKKysJYW5kCSRBQ0MwLCRBQ0MwLCRNQVNLLjJkCisrCSB1c2hyCSRUMS4yZCwkQUNDMywjMjYKKysJIGFuZAkkQUNDMywkQUNDMywkTUFTSy4yZAorKwlhZGQJJEFDQzEsJEFDQzEsJFQwLjJkCS8vIGgwIC0+IGgxCisrCSBhZGQJJEFDQzQsJEFDQzQsJFQxLjJkCS8vIGgzIC0+IGg0CisrCisrCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysJLy8gd3JpdGUgdGhlIHJlc3VsdCwgY2FuIGJlIHBhcnRpYWxseSByZWR1Y2VkCisrCisrCXN0NAl7JEFDQzAsJEFDQzEsJEFDQzIsJEFDQzN9WzBdLFskY3R4XSwjMTYKKysJbW92CXg0LCMxCisrCXN0MQl7JEFDQzR9WzBdLFskY3R4XQorKwlzdHIJeDQsWyRjdHgsIzhdCQkvLyBzZXQgaXNfYmFzZTJfMjYKKysKKysJbGRyCXgyOSxbc3BdLCM4MAorKwlyZXQKKysuc2l6ZQlwb2x5MTMwNV9ibG9ja3NfbmVvbiwuLXBvbHkxMzA1X2Jsb2Nrc19uZW9uCisrCisrLmFsaWduCTUKKysuTHplcm9zOgorKy5sb25nCTAsMCwwLDAsMCwwLDAsMAorKy5hc2NpegkiUG9seTEzMDUgZm9yIEFSTXY4LCBDUllQVE9HQU1TIGJ5IFxAZG90LWFzbSIKKysuYWxpZ24JMgorKyNpZiAhZGVmaW5lZChfX0tFUk5FTF9fKSAmJiAhZGVmaW5lZChfV0lONjQpCisrLmNvbW0JT1BFTlNTTF9hcm1jYXBfUCw0LDQKKysuaGlkZGVuCU9QRU5TU0xfYXJtY2FwX1AKKysjZW5kaWYKKytfX18KKysKKytmb3JlYWNoIChzcGxpdCgiXG4iLCRjb2RlKSkgeworKwlzL1xiKHNocm5ccyt2WzAtOV0rKVwuWzI0XWQvJDEuMnMvCQkJb3IKKysJcy9cYihmbW92XHMrKXYoWzAtOV0rKVteLF0qLFxzKngoWzAtOV0rKS8kMWQkMix4JDMvCW9yCisrCShtL1xiZHVwXGIvIGFuZCAocy9cLlsyNF1zLy4yZC9nIG9yIDEpKQkJCW9yCisrCShtL1xiKGVvcnxhbmQpLyBhbmQgKHMvXC5bMjQ4XVtzZGhdLy4xNmIvZyBvciAxKSkJb3IKKysJKG0vXGJ1bSh1bHxsYSlsXGIvIGFuZCAocy9cLjRzLy4ycy9nIG9yIDEpKQkJb3IKKysJKG0vXGJ1bSh1bHxsYSlsMlxiLyBhbmQgKHMvXC4ycy8uNHMvZyBvciAxKSkJCW9yCisrCShtL1xic3RbMS00XVxzK3tbXn1dK31cWy8gYW5kIChzL1wuWzI0XWQvLnMvZyBvciAxKSk7CisrCisrCXMvXC5bMTI0XShbc2RdKVxbLy4kMVxbLzsKKysJcy93I3goWzAtOV0rKS93JDEvZzsKKysKKysJcHJpbnQgJF8sIlxuIjsKKyt9CisrY2xvc2UgU1RET1VUOworLS0tIC9kZXYvbnVsbAorKysrIGIvYXJjaC9hcm02NC9jcnlwdG8vcG9seTEzMDUtY29yZS5TX3NoaXBwZWQKK0BAIC0wLDAgKzEsODM1IEBACisrI2lmbmRlZiBfX0tFUk5FTF9fCisrIyBpbmNsdWRlICJhcm1fYXJjaC5oIgorKy5leHRlcm4JT1BFTlNTTF9hcm1jYXBfUAorKyNlbmRpZgorKworKy50ZXh0CisrCisrLy8gZm9yd2FyZCAiZGVjbGFyYXRpb25zIiBhcmUgcmVxdWlyZWQgZm9yIEFwcGxlCisrLmdsb2JsCXBvbHkxMzA1X2Jsb2NrcworKy5nbG9ibAlwb2x5MTMwNV9lbWl0CisrCisrLmdsb2JsCXBvbHkxMzA1X2luaXQKKysudHlwZQlwb2x5MTMwNV9pbml0LCVmdW5jdGlvbgorKy5hbGlnbgk1CisrcG9seTEzMDVfaW5pdDoKKysJY21wCXgxLHh6cgorKwlzdHAJeHpyLHh6cixbeDBdCQkvLyB6ZXJvIGhhc2ggdmFsdWUKKysJc3RwCXh6cix4enIsW3gwLCMxNl0JLy8gW2Fsb25nIHdpdGggaXNfYmFzZTJfMjZdCisrCisrCWNzZWwJeDAseHpyLHgwLGVxCisrCWIuZXEJLkxub19rZXkKKysKKysjaWZuZGVmCV9fS0VSTkVMX18KKysJYWRycAl4MTcsT1BFTlNTTF9hcm1jYXBfUAorKwlsZHIJdzE3LFt4MTcsIzpsbzEyOk9QRU5TU0xfYXJtY2FwX1BdCisrI2VuZGlmCisrCisrCWxkcAl4Nyx4OCxbeDFdCQkvLyBsb2FkIGtleQorKwltb3YJeDksIzB4ZmZmZmZmZmMwZmZmZmZmZgorKwltb3ZrCXg5LCMweDBmZmYsbHNsIzQ4CisrI2lmZGVmCV9fQUFSQ0g2NEVCX18KKysJcmV2CXg3LHg3CQkJLy8gZmxpcCBieXRlcworKwlyZXYJeDgseDgKKysjZW5kaWYKKysJYW5kCXg3LHg3LHg5CQkvLyAmPTBmZmZmZmZjMGZmZmZmZmYKKysJYW5kCXg5LHg5LCMtNAorKwlhbmQJeDgseDgseDkJCS8vICY9MGZmZmZmZmMwZmZmZmZmYworKwltb3YJdzksIy0xCisrCXN0cAl4Nyx4OCxbeDAsIzMyXQkvLyBzYXZlIGtleSB2YWx1ZQorKwlzdHIJdzksW3gwLCM0OF0JLy8gaW1wb3NzaWJsZSBrZXkgcG93ZXIgdmFsdWUKKysKKysjaWZuZGVmCV9fS0VSTkVMX18KKysJdHN0CXcxNywjQVJNVjdfTkVPTgorKworKwlhZHIJeDEyLC5McG9seTEzMDVfYmxvY2tzCisrCWFkcgl4NywuTHBvbHkxMzA1X2Jsb2Nrc19uZW9uCisrCWFkcgl4MTMsLkxwb2x5MTMwNV9lbWl0CisrCisrCWNzZWwJeDEyLHgxMix4NyxlcQorKworKyMgaWZkZWYJX19JTFAzMl9fCisrCXN0cAl3MTIsdzEzLFt4Ml0KKysjIGVsc2UKKysJc3RwCXgxMix4MTMsW3gyXQorKyMgZW5kaWYKKysjZW5kaWYKKysJbW92CXgwLCMxCisrLkxub19rZXk6CisrCXJldAorKy5zaXplCXBvbHkxMzA1X2luaXQsLi1wb2x5MTMwNV9pbml0CisrCisrLnR5cGUJcG9seTEzMDVfYmxvY2tzLCVmdW5jdGlvbgorKy5hbGlnbgk1CisrcG9seTEzMDVfYmxvY2tzOgorKy5McG9seTEzMDVfYmxvY2tzOgorKwlhbmRzCXgyLHgyLCMtMTYKKysJYi5lcQkuTG5vX2RhdGEKKysKKysJbGRwCXg0LHg1LFt4MF0JCS8vIGxvYWQgaGFzaCB2YWx1ZQorKwlsZHAJeDYseDE3LFt4MCwjMTZdCS8vIFthbG9uZyB3aXRoIGlzX2Jhc2UyXzI2XQorKwlsZHAJeDcseDgsW3gwLCMzMl0JLy8gbG9hZCBrZXkgdmFsdWUKKysKKysjaWZkZWYJX19BQVJDSDY0RUJfXworKwlsc3IJeDEyLHg0LCMzMgorKwltb3YJdzEzLHc0CisrCWxzcgl4MTQseDUsIzMyCisrCW1vdgl3MTUsdzUKKysJbHNyCXgxNix4NiwjMzIKKysjZWxzZQorKwltb3YJdzEyLHc0CisrCWxzcgl4MTMseDQsIzMyCisrCW1vdgl3MTQsdzUKKysJbHNyCXgxNSx4NSwjMzIKKysJbW92CXcxNix3NgorKyNlbmRpZgorKworKwlhZGQJeDEyLHgxMix4MTMsbHNsIzI2CS8vIGJhc2UgMl4yNiAtPiBiYXNlIDJeNjQKKysJbHNyCXgxMyx4MTQsIzEyCisrCWFkZHMJeDEyLHgxMix4MTQsbHNsIzUyCisrCWFkZAl4MTMseDEzLHgxNSxsc2wjMTQKKysJYWRjCXgxMyx4MTMseHpyCisrCWxzcgl4MTQseDE2LCMyNAorKwlhZGRzCXgxMyx4MTMseDE2LGxzbCM0MAorKwlhZGMJeDE0LHgxNCx4enIKKysKKysJY21wCXgxNywjMAkJCS8vIGlzX2Jhc2UyXzI2PworKwlhZGQJeDkseDgseDgsbHNyIzIJLy8gczEgPSByMSArIChyMSA+PiAyKQorKwljc2VsCXg0LHg0LHgxMixlcQkJLy8gY2hvb3NlIGJldHdlZW4gcmFkaXhlcworKwljc2VsCXg1LHg1LHgxMyxlcQorKwljc2VsCXg2LHg2LHgxNCxlcQorKworKy5Mb29wOgorKwlsZHAJeDEwLHgxMSxbeDFdLCMxNgkvLyBsb2FkIGlucHV0CisrCXN1Ygl4Mix4MiwjMTYKKysjaWZkZWYJX19BQVJDSDY0RUJfXworKwlyZXYJeDEwLHgxMAorKwlyZXYJeDExLHgxMQorKyNlbmRpZgorKwlhZGRzCXg0LHg0LHgxMAkJLy8gYWNjdW11bGF0ZSBpbnB1dAorKwlhZGNzCXg1LHg1LHgxMQorKworKwltdWwJeDEyLHg0LHg3CQkvLyBoMCpyMAorKwlhZGMJeDYseDYseDMKKysJdW11bGgJeDEzLHg0LHg3CisrCisrCW11bAl4MTAseDUseDkJCS8vIGgxKjUqcjEKKysJdW11bGgJeDExLHg1LHg5CisrCisrCWFkZHMJeDEyLHgxMix4MTAKKysJbXVsCXgxMCx4NCx4OAkJLy8gaDAqcjEKKysJYWRjCXgxMyx4MTMseDExCisrCXVtdWxoCXgxNCx4NCx4OAorKworKwlhZGRzCXgxMyx4MTMseDEwCisrCW11bAl4MTAseDUseDcJCS8vIGgxKnIwCisrCWFkYwl4MTQseDE0LHh6cgorKwl1bXVsaAl4MTEseDUseDcKKysKKysJYWRkcwl4MTMseDEzLHgxMAorKwltdWwJeDEwLHg2LHg5CQkvLyBoMio1KnIxCisrCWFkYwl4MTQseDE0LHgxMQorKwltdWwJeDExLHg2LHg3CQkvLyBoMipyMAorKworKwlhZGRzCXgxMyx4MTMseDEwCisrCWFkYwl4MTQseDE0LHgxMQorKworKwlhbmQJeDEwLHgxNCwjLTQJCS8vIGZpbmFsIHJlZHVjdGlvbgorKwlhbmQJeDYseDE0LCMzCisrCWFkZAl4MTAseDEwLHgxNCxsc3IjMgorKwlhZGRzCXg0LHgxMix4MTAKKysJYWRjcwl4NSx4MTMseHpyCisrCWFkYwl4Nix4Nix4enIKKysKKysJY2Juegl4MiwuTG9vcAorKworKwlzdHAJeDQseDUsW3gwXQkJLy8gc3RvcmUgaGFzaCB2YWx1ZQorKwlzdHAJeDYseHpyLFt4MCwjMTZdCS8vIFthbmQgY2xlYXIgaXNfYmFzZTJfMjZdCisrCisrLkxub19kYXRhOgorKwlyZXQKKysuc2l6ZQlwb2x5MTMwNV9ibG9ja3MsLi1wb2x5MTMwNV9ibG9ja3MKKysKKysudHlwZQlwb2x5MTMwNV9lbWl0LCVmdW5jdGlvbgorKy5hbGlnbgk1CisrcG9seTEzMDVfZW1pdDoKKysuTHBvbHkxMzA1X2VtaXQ6CisrCWxkcAl4NCx4NSxbeDBdCQkvLyBsb2FkIGhhc2ggYmFzZSAyXjY0CisrCWxkcAl4Nix4NyxbeDAsIzE2XQkvLyBbYWxvbmcgd2l0aCBpc19iYXNlMl8yNl0KKysJbGRwCXgxMCx4MTEsW3gyXQkvLyBsb2FkIG5vbmNlCisrCisrI2lmZGVmCV9fQUFSQ0g2NEVCX18KKysJbHNyCXgxMix4NCwjMzIKKysJbW92CXcxMyx3NAorKwlsc3IJeDE0LHg1LCMzMgorKwltb3YJdzE1LHc1CisrCWxzcgl4MTYseDYsIzMyCisrI2Vsc2UKKysJbW92CXcxMix3NAorKwlsc3IJeDEzLHg0LCMzMgorKwltb3YJdzE0LHc1CisrCWxzcgl4MTUseDUsIzMyCisrCW1vdgl3MTYsdzYKKysjZW5kaWYKKysKKysJYWRkCXgxMix4MTIseDEzLGxzbCMyNgkvLyBiYXNlIDJeMjYgLT4gYmFzZSAyXjY0CisrCWxzcgl4MTMseDE0LCMxMgorKwlhZGRzCXgxMix4MTIseDE0LGxzbCM1MgorKwlhZGQJeDEzLHgxMyx4MTUsbHNsIzE0CisrCWFkYwl4MTMseDEzLHh6cgorKwlsc3IJeDE0LHgxNiwjMjQKKysJYWRkcwl4MTMseDEzLHgxNixsc2wjNDAKKysJYWRjCXgxNCx4MTQseHpyCisrCisrCWNtcAl4NywjMAkJCS8vIGlzX2Jhc2UyXzI2PworKwljc2VsCXg0LHg0LHgxMixlcQkJLy8gY2hvb3NlIGJldHdlZW4gcmFkaXhlcworKwljc2VsCXg1LHg1LHgxMyxlcQorKwljc2VsCXg2LHg2LHgxNCxlcQorKworKwlhZGRzCXgxMix4NCwjNQkJLy8gY29tcGFyZSB0byBtb2R1bHVzCisrCWFkY3MJeDEzLHg1LHh6cgorKwlhZGMJeDE0LHg2LHh6cgorKworKwl0c3QJeDE0LCMtNAkJCS8vIHNlZSBpZiBpdCdzIGNhcnJpZWQvYm9ycm93ZWQKKysKKysJY3NlbAl4NCx4NCx4MTIsZXEKKysJY3NlbAl4NSx4NSx4MTMsZXEKKysKKysjaWZkZWYJX19BQVJDSDY0RUJfXworKwlyb3IJeDEwLHgxMCwjMzIJCS8vIGZsaXAgbm9uY2Ugd29yZHMKKysJcm9yCXgxMSx4MTEsIzMyCisrI2VuZGlmCisrCWFkZHMJeDQseDQseDEwCQkvLyBhY2N1bXVsYXRlIG5vbmNlCisrCWFkYwl4NSx4NSx4MTEKKysjaWZkZWYJX19BQVJDSDY0RUJfXworKwlyZXYJeDQseDQJCQkvLyBmbGlwIG91dHB1dCBieXRlcworKwlyZXYJeDUseDUKKysjZW5kaWYKKysJc3RwCXg0LHg1LFt4MV0JCS8vIHdyaXRlIHJlc3VsdAorKworKwlyZXQKKysuc2l6ZQlwb2x5MTMwNV9lbWl0LC4tcG9seTEzMDVfZW1pdAorKy50eXBlCXBvbHkxMzA1X211bHQsJWZ1bmN0aW9uCisrLmFsaWduCTUKKytwb2x5MTMwNV9tdWx0OgorKwltdWwJeDEyLHg0LHg3CQkvLyBoMCpyMAorKwl1bXVsaAl4MTMseDQseDcKKysKKysJbXVsCXgxMCx4NSx4OQkJLy8gaDEqNSpyMQorKwl1bXVsaAl4MTEseDUseDkKKysKKysJYWRkcwl4MTIseDEyLHgxMAorKwltdWwJeDEwLHg0LHg4CQkvLyBoMCpyMQorKwlhZGMJeDEzLHgxMyx4MTEKKysJdW11bGgJeDE0LHg0LHg4CisrCisrCWFkZHMJeDEzLHgxMyx4MTAKKysJbXVsCXgxMCx4NSx4NwkJLy8gaDEqcjAKKysJYWRjCXgxNCx4MTQseHpyCisrCXVtdWxoCXgxMSx4NSx4NworKworKwlhZGRzCXgxMyx4MTMseDEwCisrCW11bAl4MTAseDYseDkJCS8vIGgyKjUqcjEKKysJYWRjCXgxNCx4MTQseDExCisrCW11bAl4MTEseDYseDcJCS8vIGgyKnIwCisrCisrCWFkZHMJeDEzLHgxMyx4MTAKKysJYWRjCXgxNCx4MTQseDExCisrCisrCWFuZAl4MTAseDE0LCMtNAkJLy8gZmluYWwgcmVkdWN0aW9uCisrCWFuZAl4Nix4MTQsIzMKKysJYWRkCXgxMCx4MTAseDE0LGxzciMyCisrCWFkZHMJeDQseDEyLHgxMAorKwlhZGNzCXg1LHgxMyx4enIKKysJYWRjCXg2LHg2LHh6cgorKworKwlyZXQKKysuc2l6ZQlwb2x5MTMwNV9tdWx0LC4tcG9seTEzMDVfbXVsdAorKworKy50eXBlCXBvbHkxMzA1X3NwbGF0LCVmdW5jdGlvbgorKy5hbGlnbgk0CisrcG9seTEzMDVfc3BsYXQ6CisrCWFuZAl4MTIseDQsIzB4MDNmZmZmZmYJLy8gYmFzZSAyXjY0IC0+IGJhc2UgMl4yNgorKwl1YmZ4CXgxMyx4NCwjMjYsIzI2CisrCWV4dHIJeDE0LHg1LHg0LCM1MgorKwlhbmQJeDE0LHgxNCwjMHgwM2ZmZmZmZgorKwl1YmZ4CXgxNSx4NSwjMTQsIzI2CisrCWV4dHIJeDE2LHg2LHg1LCM0MAorKworKwlzdHIJdzEyLFt4MCwjMTYqMF0JLy8gcjAKKysJYWRkCXcxMix3MTMsdzEzLGxzbCMyCS8vIHIxKjUKKysJc3RyCXcxMyxbeDAsIzE2KjFdCS8vIHIxCisrCWFkZAl3MTMsdzE0LHcxNCxsc2wjMgkvLyByMio1CisrCXN0cgl3MTIsW3gwLCMxNioyXQkvLyBzMQorKwlzdHIJdzE0LFt4MCwjMTYqM10JLy8gcjIKKysJYWRkCXcxNCx3MTUsdzE1LGxzbCMyCS8vIHIzKjUKKysJc3RyCXcxMyxbeDAsIzE2KjRdCS8vIHMyCisrCXN0cgl3MTUsW3gwLCMxNio1XQkvLyByMworKwlhZGQJdzE1LHcxNix3MTYsbHNsIzIJLy8gcjQqNQorKwlzdHIJdzE0LFt4MCwjMTYqNl0JLy8gczMKKysJc3RyCXcxNixbeDAsIzE2KjddCS8vIHI0CisrCXN0cgl3MTUsW3gwLCMxNio4XQkvLyBzNAorKworKwlyZXQKKysuc2l6ZQlwb2x5MTMwNV9zcGxhdCwuLXBvbHkxMzA1X3NwbGF0CisrCisrI2lmZGVmCV9fS0VSTkVMX18KKysuZ2xvYmwJcG9seTEzMDVfYmxvY2tzX25lb24KKysjZW5kaWYKKysudHlwZQlwb2x5MTMwNV9ibG9ja3NfbmVvbiwlZnVuY3Rpb24KKysuYWxpZ24JNQorK3BvbHkxMzA1X2Jsb2Nrc19uZW9uOgorKy5McG9seTEzMDVfYmxvY2tzX25lb246CisrCWxkcgl4MTcsW3gwLCMyNF0KKysJY21wCXgyLCMxMjgKKysJYi5sbwkuTHBvbHkxMzA1X2Jsb2NrcworKworKwkuaW5zdAkweGQ1MDMyMzNmCQkvLyBwYWNpYXNwCisrCXN0cAl4MjkseDMwLFtzcCwjLTgwXSEKKysJYWRkCXgyOSxzcCwjMAorKworKwlzdHAJZDgsZDksW3NwLCMxNl0JCS8vIG1lZXQgQUJJIHJlcXVpcmVtZW50cworKwlzdHAJZDEwLGQxMSxbc3AsIzMyXQorKwlzdHAJZDEyLGQxMyxbc3AsIzQ4XQorKwlzdHAJZDE0LGQxNSxbc3AsIzY0XQorKworKwljYnoJeDE3LC5MYmFzZTJfNjRfbmVvbgorKworKwlsZHAJdzEwLHcxMSxbeDBdCQkvLyBsb2FkIGhhc2ggdmFsdWUgYmFzZSAyXjI2CisrCWxkcAl3MTIsdzEzLFt4MCwjOF0KKysJbGRyCXcxNCxbeDAsIzE2XQorKworKwl0c3QJeDIsIzMxCisrCWIuZXEJLkxldmVuX25lb24KKysKKysJbGRwCXg3LHg4LFt4MCwjMzJdCS8vIGxvYWQga2V5IHZhbHVlCisrCisrCWFkZAl4NCx4MTAseDExLGxzbCMyNgkvLyBiYXNlIDJeMjYgLT4gYmFzZSAyXjY0CisrCWxzcgl4NSx4MTIsIzEyCisrCWFkZHMJeDQseDQseDEyLGxzbCM1MgorKwlhZGQJeDUseDUseDEzLGxzbCMxNAorKwlhZGMJeDUseDUseHpyCisrCWxzcgl4Nix4MTQsIzI0CisrCWFkZHMJeDUseDUseDE0LGxzbCM0MAorKwlhZGMJeDE0LHg2LHh6cgkJLy8gY2FuIGJlIHBhcnRpYWxseSByZWR1Y2VkLi4uCisrCisrCWxkcAl4MTIseDEzLFt4MV0sIzE2CS8vIGxvYWQgaW5wdXQKKysJc3ViCXgyLHgyLCMxNgorKwlhZGQJeDkseDgseDgsbHNyIzIJLy8gczEgPSByMSArIChyMSA+PiAyKQorKworKyNpZmRlZglfX0FBUkNINjRFQl9fCisrCXJldgl4MTIseDEyCisrCXJldgl4MTMseDEzCisrI2VuZGlmCisrCWFkZHMJeDQseDQseDEyCQkvLyBhY2N1bXVsYXRlIGlucHV0CisrCWFkY3MJeDUseDUseDEzCisrCWFkYwl4Nix4Nix4MworKworKwlibAlwb2x5MTMwNV9tdWx0CisrCisrCWFuZAl4MTAseDQsIzB4MDNmZmZmZmYJLy8gYmFzZSAyXjY0IC0+IGJhc2UgMl4yNgorKwl1YmZ4CXgxMSx4NCwjMjYsIzI2CisrCWV4dHIJeDEyLHg1LHg0LCM1MgorKwlhbmQJeDEyLHgxMiwjMHgwM2ZmZmZmZgorKwl1YmZ4CXgxMyx4NSwjMTQsIzI2CisrCWV4dHIJeDE0LHg2LHg1LCM0MAorKworKwliCS5MZXZlbl9uZW9uCisrCisrLmFsaWduCTQKKysuTGJhc2UyXzY0X25lb246CisrCWxkcAl4Nyx4OCxbeDAsIzMyXQkvLyBsb2FkIGtleSB2YWx1ZQorKworKwlsZHAJeDQseDUsW3gwXQkJLy8gbG9hZCBoYXNoIHZhbHVlIGJhc2UgMl42NAorKwlsZHIJeDYsW3gwLCMxNl0KKysKKysJdHN0CXgyLCMzMQorKwliLmVxCS5MaW5pdF9uZW9uCisrCisrCWxkcAl4MTIseDEzLFt4MV0sIzE2CS8vIGxvYWQgaW5wdXQKKysJc3ViCXgyLHgyLCMxNgorKwlhZGQJeDkseDgseDgsbHNyIzIJLy8gczEgPSByMSArIChyMSA+PiAyKQorKyNpZmRlZglfX0FBUkNINjRFQl9fCisrCXJldgl4MTIseDEyCisrCXJldgl4MTMseDEzCisrI2VuZGlmCisrCWFkZHMJeDQseDQseDEyCQkvLyBhY2N1bXVsYXRlIGlucHV0CisrCWFkY3MJeDUseDUseDEzCisrCWFkYwl4Nix4Nix4MworKworKwlibAlwb2x5MTMwNV9tdWx0CisrCisrLkxpbml0X25lb246CisrCWxkcgl3MTcsW3gwLCM0OF0JCS8vIGZpcnN0IHRhYmxlIGVsZW1lbnQKKysJYW5kCXgxMCx4NCwjMHgwM2ZmZmZmZgkvLyBiYXNlIDJeNjQgLT4gYmFzZSAyXjI2CisrCXViZngJeDExLHg0LCMyNiwjMjYKKysJZXh0cgl4MTIseDUseDQsIzUyCisrCWFuZAl4MTIseDEyLCMweDAzZmZmZmZmCisrCXViZngJeDEzLHg1LCMxNCwjMjYKKysJZXh0cgl4MTQseDYseDUsIzQwCisrCisrCWNtcAl3MTcsIy0xCQkJLy8gaXMgdmFsdWUgaW1wb3NzaWJsZT8KKysJYi5uZQkuTGV2ZW5fbmVvbgorKworKwlmbW92CWQyNCx4MTAKKysJZm1vdglkMjUseDExCisrCWZtb3YJZDI2LHgxMgorKwlmbW92CWQyNyx4MTMKKysJZm1vdglkMjgseDE0CisrCisrCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gaW5pdGlhbGl6ZSByXm4gdGFibGUKKysJbW92CXg0LHg3CQkJLy8gcl4xCisrCWFkZAl4OSx4OCx4OCxsc3IjMgkvLyBzMSA9IHIxICsgKHIxID4+IDIpCisrCW1vdgl4NSx4OAorKwltb3YJeDYseHpyCisrCWFkZAl4MCx4MCwjNDgrMTIKKysJYmwJcG9seTEzMDVfc3BsYXQKKysKKysJYmwJcG9seTEzMDVfbXVsdAkJLy8gcl4yCisrCXN1Ygl4MCx4MCwjNAorKwlibAlwb2x5MTMwNV9zcGxhdAorKworKwlibAlwb2x5MTMwNV9tdWx0CQkvLyByXjMKKysJc3ViCXgwLHgwLCM0CisrCWJsCXBvbHkxMzA1X3NwbGF0CisrCisrCWJsCXBvbHkxMzA1X211bHQJCS8vIHJeNAorKwlzdWIJeDAseDAsIzQKKysJYmwJcG9seTEzMDVfc3BsYXQKKysJc3ViCXgwLHgwLCM0OAkJLy8gcmVzdG9yZSBvcmlnaW5hbCB4MAorKwliCS5MZG9fbmVvbgorKworKy5hbGlnbgk0CisrLkxldmVuX25lb246CisrCWZtb3YJZDI0LHgxMAorKwlmbW92CWQyNSx4MTEKKysJZm1vdglkMjYseDEyCisrCWZtb3YJZDI3LHgxMworKwlmbW92CWQyOCx4MTQKKysKKysuTGRvX25lb246CisrCWxkcAl4OCx4MTIsW3gxLCMzMl0JLy8gaW5wWzI6M10KKysJc3Vicwl4Mix4MiwjNjQKKysJbGRwCXg5LHgxMyxbeDEsIzQ4XQorKwlhZGQJeDE2LHgxLCM5NgorKwlhZHIJeDE3LC5MemVyb3MKKysKKysJbHNsCXgzLHgzLCMyNAorKwlhZGQJeDE1LHgwLCM0OAorKworKyNpZmRlZglfX0FBUkNINjRFQl9fCisrCXJldgl4OCx4OAorKwlyZXYJeDEyLHgxMgorKwlyZXYJeDkseDkKKysJcmV2CXgxMyx4MTMKKysjZW5kaWYKKysJYW5kCXg0LHg4LCMweDAzZmZmZmZmCS8vIGJhc2UgMl42NCAtPiBiYXNlIDJeMjYKKysJYW5kCXg1LHg5LCMweDAzZmZmZmZmCisrCXViZngJeDYseDgsIzI2LCMyNgorKwl1YmZ4CXg3LHg5LCMyNiwjMjYKKysJYWRkCXg0LHg0LHg1LGxzbCMzMgkJLy8gYmZpCXg0LHg1LCMzMiwjMzIKKysJZXh0cgl4OCx4MTIseDgsIzUyCisrCWV4dHIJeDkseDEzLHg5LCM1MgorKwlhZGQJeDYseDYseDcsbHNsIzMyCQkvLyBiZmkJeDYseDcsIzMyLCMzMgorKwlmbW92CWQxNCx4NAorKwlhbmQJeDgseDgsIzB4MDNmZmZmZmYKKysJYW5kCXg5LHg5LCMweDAzZmZmZmZmCisrCXViZngJeDEwLHgxMiwjMTQsIzI2CisrCXViZngJeDExLHgxMywjMTQsIzI2CisrCWFkZAl4MTIseDMseDEyLGxzciM0MAorKwlhZGQJeDEzLHgzLHgxMyxsc3IjNDAKKysJYWRkCXg4LHg4LHg5LGxzbCMzMgkJLy8gYmZpCXg4LHg5LCMzMiwjMzIKKysJZm1vdglkMTUseDYKKysJYWRkCXgxMCx4MTAseDExLGxzbCMzMgkvLyBiZmkJeDEwLHgxMSwjMzIsIzMyCisrCWFkZAl4MTIseDEyLHgxMyxsc2wjMzIJLy8gYmZpCXgxMix4MTMsIzMyLCMzMgorKwlmbW92CWQxNix4OAorKwlmbW92CWQxNyx4MTAKKysJZm1vdglkMTgseDEyCisrCisrCWxkcAl4OCx4MTIsW3gxXSwjMTYJLy8gaW5wWzA6MV0KKysJbGRwCXg5LHgxMyxbeDFdLCM0OAorKworKwlsZDEJe3YwLjRzLHYxLjRzLHYyLjRzLHYzLjRzfSxbeDE1XSwjNjQKKysJbGQxCXt2NC40cyx2NS40cyx2Ni40cyx2Ny40c30sW3gxNV0sIzY0CisrCWxkMQl7djguNHN9LFt4MTVdCisrCisrI2lmZGVmCV9fQUFSQ0g2NEVCX18KKysJcmV2CXg4LHg4CisrCXJldgl4MTIseDEyCisrCXJldgl4OSx4OQorKwlyZXYJeDEzLHgxMworKyNlbmRpZgorKwlhbmQJeDQseDgsIzB4MDNmZmZmZmYJLy8gYmFzZSAyXjY0IC0+IGJhc2UgMl4yNgorKwlhbmQJeDUseDksIzB4MDNmZmZmZmYKKysJdWJmeAl4Nix4OCwjMjYsIzI2CisrCXViZngJeDcseDksIzI2LCMyNgorKwlhZGQJeDQseDQseDUsbHNsIzMyCQkvLyBiZmkJeDQseDUsIzMyLCMzMgorKwlleHRyCXg4LHgxMix4OCwjNTIKKysJZXh0cgl4OSx4MTMseDksIzUyCisrCWFkZAl4Nix4Nix4Nyxsc2wjMzIJCS8vIGJmaQl4Nix4NywjMzIsIzMyCisrCWZtb3YJZDkseDQKKysJYW5kCXg4LHg4LCMweDAzZmZmZmZmCisrCWFuZAl4OSx4OSwjMHgwM2ZmZmZmZgorKwl1YmZ4CXgxMCx4MTIsIzE0LCMyNgorKwl1YmZ4CXgxMSx4MTMsIzE0LCMyNgorKwlhZGQJeDEyLHgzLHgxMixsc3IjNDAKKysJYWRkCXgxMyx4Myx4MTMsbHNyIzQwCisrCWFkZAl4OCx4OCx4OSxsc2wjMzIJCS8vIGJmaQl4OCx4OSwjMzIsIzMyCisrCWZtb3YJZDEwLHg2CisrCWFkZAl4MTAseDEwLHgxMSxsc2wjMzIJLy8gYmZpCXgxMCx4MTEsIzMyLCMzMgorKwlhZGQJeDEyLHgxMix4MTMsbHNsIzMyCS8vIGJmaQl4MTIseDEzLCMzMiwjMzIKKysJbW92aQl2MzEuMmQsIy0xCisrCWZtb3YJZDExLHg4CisrCWZtb3YJZDEyLHgxMAorKwlmbW92CWQxMyx4MTIKKysJdXNocgl2MzEuMmQsdjMxLjJkLCMzOAorKworKwliLmxzCS5Mc2tpcF9sb29wCisrCisrLmFsaWduCTQKKysuTG9vcF9uZW9uOgorKwkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCS8vICgoaW5wWzBdKnJeNCtpbnBbMl0qcl4yK2lucFs0XSkqcl40K2lucFs2XSpyXjIKKysJLy8gKChpbnBbMV0qcl40K2lucFszXSpyXjIraW5wWzVdKSpyXjMraW5wWzddKnIKKysJLy8gICBfX19fX19fX19fX19fX19fX19fLworKwkvLyAoKGlucFswXSpyXjQraW5wWzJdKnJeMitpbnBbNF0pKnJeNCtpbnBbNl0qcl4yK2lucFs4XSkqcl4yCisrCS8vICgoaW5wWzFdKnJeNCtpbnBbM10qcl4yK2lucFs1XSkqcl40K2lucFs3XSpyXjIraW5wWzldKSpyCisrCS8vICAgX19fX19fX19fX19fX19fX19fXy8gX19fX19fX19fX19fX19fX19fX18vCisrCS8vCisrCS8vIE5vdGUgdGhhdCB3ZSBzdGFydCB3aXRoIGlucFsyOjNdKnJeMi4gVGhpcyBpcyBiZWNhdXNlIGl0CisrCS8vIGRvZXNuJ3QgZGVwZW5kIG9uIHJlZHVjdGlvbiBpbiBwcmV2aW91cyBpdGVyYXRpb24uCisrCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysJLy8gZDQgPSBoMCpyNCArIGgxKnIzICAgKyBoMipyMiAgICsgaDMqcjEgICArIGg0KnIwCisrCS8vIGQzID0gaDAqcjMgKyBoMSpyMiAgICsgaDIqcjEgICArIGgzKnIwICAgKyBoNCo1KnI0CisrCS8vIGQyID0gaDAqcjIgKyBoMSpyMSAgICsgaDIqcjAgICArIGgzKjUqcjQgKyBoNCo1KnIzCisrCS8vIGQxID0gaDAqcjEgKyBoMSpyMCAgICsgaDIqNSpyNCArIGgzKjUqcjMgKyBoNCo1KnIyCisrCS8vIGQwID0gaDAqcjAgKyBoMSo1KnI0ICsgaDIqNSpyMyArIGgzKjUqcjIgKyBoNCo1KnIxCisrCisrCXN1YnMJeDIseDIsIzY0CisrCXVtdWxsCXYyMy4yZCx2MTQuMnMsdjcuc1syXQorKwljc2VsCXgxNix4MTcseDE2LGxvCisrCXVtdWxsCXYyMi4yZCx2MTQuMnMsdjUuc1syXQorKwl1bXVsbAl2MjEuMmQsdjE0LjJzLHYzLnNbMl0KKysJIGxkcAl4OCx4MTIsW3gxNl0sIzE2CS8vIGlucFsyOjNdIChvciB6ZXJvKQorKwl1bXVsbAl2MjAuMmQsdjE0LjJzLHYxLnNbMl0KKysJIGxkcAl4OSx4MTMsW3gxNl0sIzQ4CisrCXVtdWxsCXYxOS4yZCx2MTQuMnMsdjAuc1syXQorKyNpZmRlZglfX0FBUkNINjRFQl9fCisrCSByZXYJeDgseDgKKysJIHJldgl4MTIseDEyCisrCSByZXYJeDkseDkKKysJIHJldgl4MTMseDEzCisrI2VuZGlmCisrCisrCXVtbGFsCXYyMy4yZCx2MTUuMnMsdjUuc1syXQorKwkgYW5kCXg0LHg4LCMweDAzZmZmZmZmCS8vIGJhc2UgMl42NCAtPiBiYXNlIDJeMjYKKysJdW1sYWwJdjIyLjJkLHYxNS4ycyx2My5zWzJdCisrCSBhbmQJeDUseDksIzB4MDNmZmZmZmYKKysJdW1sYWwJdjIxLjJkLHYxNS4ycyx2MS5zWzJdCisrCSB1YmZ4CXg2LHg4LCMyNiwjMjYKKysJdW1sYWwJdjIwLjJkLHYxNS4ycyx2MC5zWzJdCisrCSB1YmZ4CXg3LHg5LCMyNiwjMjYKKysJdW1sYWwJdjE5LjJkLHYxNS4ycyx2OC5zWzJdCisrCSBhZGQJeDQseDQseDUsbHNsIzMyCQkvLyBiZmkJeDQseDUsIzMyLCMzMgorKworKwl1bWxhbAl2MjMuMmQsdjE2LjJzLHYzLnNbMl0KKysJIGV4dHIJeDgseDEyLHg4LCM1MgorKwl1bWxhbAl2MjIuMmQsdjE2LjJzLHYxLnNbMl0KKysJIGV4dHIJeDkseDEzLHg5LCM1MgorKwl1bWxhbAl2MjEuMmQsdjE2LjJzLHYwLnNbMl0KKysJIGFkZAl4Nix4Nix4Nyxsc2wjMzIJCS8vIGJmaQl4Nix4NywjMzIsIzMyCisrCXVtbGFsCXYyMC4yZCx2MTYuMnMsdjguc1syXQorKwkgZm1vdglkMTQseDQKKysJdW1sYWwJdjE5LjJkLHYxNi4ycyx2Ni5zWzJdCisrCSBhbmQJeDgseDgsIzB4MDNmZmZmZmYKKysKKysJdW1sYWwJdjIzLjJkLHYxNy4ycyx2MS5zWzJdCisrCSBhbmQJeDkseDksIzB4MDNmZmZmZmYKKysJdW1sYWwJdjIyLjJkLHYxNy4ycyx2MC5zWzJdCisrCSB1YmZ4CXgxMCx4MTIsIzE0LCMyNgorKwl1bWxhbAl2MjEuMmQsdjE3LjJzLHY4LnNbMl0KKysJIHViZngJeDExLHgxMywjMTQsIzI2CisrCXVtbGFsCXYyMC4yZCx2MTcuMnMsdjYuc1syXQorKwkgYWRkCXg4LHg4LHg5LGxzbCMzMgkJLy8gYmZpCXg4LHg5LCMzMiwjMzIKKysJdW1sYWwJdjE5LjJkLHYxNy4ycyx2NC5zWzJdCisrCSBmbW92CWQxNSx4NgorKworKwlhZGQJdjExLjJzLHYxMS4ycyx2MjYuMnMKKysJIGFkZAl4MTIseDMseDEyLGxzciM0MAorKwl1bWxhbAl2MjMuMmQsdjE4LjJzLHYwLnNbMl0KKysJIGFkZAl4MTMseDMseDEzLGxzciM0MAorKwl1bWxhbAl2MjIuMmQsdjE4LjJzLHY4LnNbMl0KKysJIGFkZAl4MTAseDEwLHgxMSxsc2wjMzIJLy8gYmZpCXgxMCx4MTEsIzMyLCMzMgorKwl1bWxhbAl2MjEuMmQsdjE4LjJzLHY2LnNbMl0KKysJIGFkZAl4MTIseDEyLHgxMyxsc2wjMzIJLy8gYmZpCXgxMix4MTMsIzMyLCMzMgorKwl1bWxhbAl2MjAuMmQsdjE4LjJzLHY0LnNbMl0KKysJIGZtb3YJZDE2LHg4CisrCXVtbGFsCXYxOS4yZCx2MTguMnMsdjIuc1syXQorKwkgZm1vdglkMTcseDEwCisrCisrCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKysJLy8gKGhhc2graW5wWzA6MV0pKnJeNCBhbmQgYWNjdW11bGF0ZQorKworKwlhZGQJdjkuMnMsdjkuMnMsdjI0LjJzCisrCSBmbW92CWQxOCx4MTIKKysJdW1sYWwJdjIyLjJkLHYxMS4ycyx2MS5zWzBdCisrCSBsZHAJeDgseDEyLFt4MV0sIzE2CS8vIGlucFswOjFdCisrCXVtbGFsCXYxOS4yZCx2MTEuMnMsdjYuc1swXQorKwkgbGRwCXg5LHgxMyxbeDFdLCM0OAorKwl1bWxhbAl2MjMuMmQsdjExLjJzLHYzLnNbMF0KKysJdW1sYWwJdjIwLjJkLHYxMS4ycyx2OC5zWzBdCisrCXVtbGFsCXYyMS4yZCx2MTEuMnMsdjAuc1swXQorKyNpZmRlZglfX0FBUkNINjRFQl9fCisrCSByZXYJeDgseDgKKysJIHJldgl4MTIseDEyCisrCSByZXYJeDkseDkKKysJIHJldgl4MTMseDEzCisrI2VuZGlmCisrCisrCWFkZAl2MTAuMnMsdjEwLjJzLHYyNS4ycworKwl1bWxhbAl2MjIuMmQsdjkuMnMsdjUuc1swXQorKwl1bWxhbAl2MjMuMmQsdjkuMnMsdjcuc1swXQorKwkgYW5kCXg0LHg4LCMweDAzZmZmZmZmCS8vIGJhc2UgMl42NCAtPiBiYXNlIDJeMjYKKysJdW1sYWwJdjIxLjJkLHY5LjJzLHYzLnNbMF0KKysJIGFuZAl4NSx4OSwjMHgwM2ZmZmZmZgorKwl1bWxhbAl2MTkuMmQsdjkuMnMsdjAuc1swXQorKwkgdWJmeAl4Nix4OCwjMjYsIzI2CisrCXVtbGFsCXYyMC4yZCx2OS4ycyx2MS5zWzBdCisrCSB1YmZ4CXg3LHg5LCMyNiwjMjYKKysKKysJYWRkCXYxMi4ycyx2MTIuMnMsdjI3LjJzCisrCSBhZGQJeDQseDQseDUsbHNsIzMyCQkvLyBiZmkJeDQseDUsIzMyLCMzMgorKwl1bWxhbAl2MjIuMmQsdjEwLjJzLHYzLnNbMF0KKysJIGV4dHIJeDgseDEyLHg4LCM1MgorKwl1bWxhbAl2MjMuMmQsdjEwLjJzLHY1LnNbMF0KKysJIGV4dHIJeDkseDEzLHg5LCM1MgorKwl1bWxhbAl2MTkuMmQsdjEwLjJzLHY4LnNbMF0KKysJIGFkZAl4Nix4Nix4Nyxsc2wjMzIJCS8vIGJmaQl4Nix4NywjMzIsIzMyCisrCXVtbGFsCXYyMS4yZCx2MTAuMnMsdjEuc1swXQorKwkgZm1vdglkOSx4NAorKwl1bWxhbAl2MjAuMmQsdjEwLjJzLHYwLnNbMF0KKysJIGFuZAl4OCx4OCwjMHgwM2ZmZmZmZgorKworKwlhZGQJdjEzLjJzLHYxMy4ycyx2MjguMnMKKysJIGFuZAl4OSx4OSwjMHgwM2ZmZmZmZgorKwl1bWxhbAl2MjIuMmQsdjEyLjJzLHYwLnNbMF0KKysJIHViZngJeDEwLHgxMiwjMTQsIzI2CisrCXVtbGFsCXYxOS4yZCx2MTIuMnMsdjQuc1swXQorKwkgdWJmeAl4MTEseDEzLCMxNCwjMjYKKysJdW1sYWwJdjIzLjJkLHYxMi4ycyx2MS5zWzBdCisrCSBhZGQJeDgseDgseDksbHNsIzMyCQkvLyBiZmkJeDgseDksIzMyLCMzMgorKwl1bWxhbAl2MjAuMmQsdjEyLjJzLHY2LnNbMF0KKysJIGZtb3YJZDEwLHg2CisrCXVtbGFsCXYyMS4yZCx2MTIuMnMsdjguc1swXQorKwkgYWRkCXgxMix4Myx4MTIsbHNyIzQwCisrCisrCXVtbGFsCXYyMi4yZCx2MTMuMnMsdjguc1swXQorKwkgYWRkCXgxMyx4Myx4MTMsbHNyIzQwCisrCXVtbGFsCXYxOS4yZCx2MTMuMnMsdjIuc1swXQorKwkgYWRkCXgxMCx4MTAseDExLGxzbCMzMgkvLyBiZmkJeDEwLHgxMSwjMzIsIzMyCisrCXVtbGFsCXYyMy4yZCx2MTMuMnMsdjAuc1swXQorKwkgYWRkCXgxMix4MTIseDEzLGxzbCMzMgkvLyBiZmkJeDEyLHgxMywjMzIsIzMyCisrCXVtbGFsCXYyMC4yZCx2MTMuMnMsdjQuc1swXQorKwkgZm1vdglkMTEseDgKKysJdW1sYWwJdjIxLjJkLHYxMy4ycyx2Ni5zWzBdCisrCSBmbW92CWQxMix4MTAKKysJIGZtb3YJZDEzLHgxMgorKworKwkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKwkvLyBsYXp5IHJlZHVjdGlvbiBhcyBkaXNjdXNzZWQgaW4gIk5FT04gY3J5cHRvIiBieSBELkouIEJlcm5zdGVpbgorKwkvLyBhbmQgUC4gU2Nod2FiZQorKwkvLworKwkvLyBbc2VlIGRpc2N1c3Npb24gaW4gcG9seTEzMDUtYXJtdjQgbW9kdWxlXQorKworKwl1c2hyCXYyOS4yZCx2MjIuMmQsIzI2CisrCXh0bgl2MjcuMnMsdjIyLjJkCisrCSB1c2hyCXYzMC4yZCx2MTkuMmQsIzI2CisrCSBhbmQJdjE5LjE2Yix2MTkuMTZiLHYzMS4xNmIKKysJYWRkCXYyMy4yZCx2MjMuMmQsdjI5LjJkCS8vIGgzIC0+IGg0CisrCWJpYwl2MjcuMnMsIzB4ZmMsbHNsIzI0CS8vICY9MHgwM2ZmZmZmZgorKwkgYWRkCXYyMC4yZCx2MjAuMmQsdjMwLjJkCS8vIGgwIC0+IGgxCisrCisrCXVzaHIJdjI5LjJkLHYyMy4yZCwjMjYKKysJeHRuCXYyOC4ycyx2MjMuMmQKKysJIHVzaHIJdjMwLjJkLHYyMC4yZCwjMjYKKysJIHh0bgl2MjUuMnMsdjIwLjJkCisrCWJpYwl2MjguMnMsIzB4ZmMsbHNsIzI0CisrCSBhZGQJdjIxLjJkLHYyMS4yZCx2MzAuMmQJLy8gaDEgLT4gaDIKKysKKysJYWRkCXYxOS4yZCx2MTkuMmQsdjI5LjJkCisrCXNobAl2MjkuMmQsdjI5LjJkLCMyCisrCSBzaHJuCXYzMC4ycyx2MjEuMmQsIzI2CisrCSB4dG4JdjI2LjJzLHYyMS4yZAorKwlhZGQJdjE5LjJkLHYxOS4yZCx2MjkuMmQJLy8gaDQgLT4gaDAKKysJIGJpYwl2MjUuMnMsIzB4ZmMsbHNsIzI0CisrCSBhZGQJdjI3LjJzLHYyNy4ycyx2MzAuMnMJCS8vIGgyIC0+IGgzCisrCSBiaWMJdjI2LjJzLCMweGZjLGxzbCMyNAorKworKwlzaHJuCXYyOS4ycyx2MTkuMmQsIzI2CisrCXh0bgl2MjQuMnMsdjE5LjJkCisrCSB1c2hyCXYzMC4ycyx2MjcuMnMsIzI2CisrCSBiaWMJdjI3LjJzLCMweGZjLGxzbCMyNAorKwkgYmljCXYyNC4ycywjMHhmYyxsc2wjMjQKKysJYWRkCXYyNS4ycyx2MjUuMnMsdjI5LjJzCQkvLyBoMCAtPiBoMQorKwkgYWRkCXYyOC4ycyx2MjguMnMsdjMwLjJzCQkvLyBoMyAtPiBoNAorKworKwliLmhpCS5Mb29wX25lb24KKysKKysuTHNraXBfbG9vcDoKKysJZHVwCXYxNi4yZCx2MTYuZFswXQorKwlhZGQJdjExLjJzLHYxMS4ycyx2MjYuMnMKKysKKysJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKwkvLyBtdWx0aXBseSAoaW5wWzA6MV0raGFzaCkgb3IgaW5wWzI6M10gYnkgcl4yOnJeMQorKworKwlhZGRzCXgyLHgyLCMzMgorKwliLm5lCS5Mb25nX3RhaWwKKysKKysJZHVwCXYxNi4yZCx2MTEuZFswXQorKwlhZGQJdjE0LjJzLHY5LjJzLHYyNC4ycworKwlhZGQJdjE3LjJzLHYxMi4ycyx2MjcuMnMKKysJYWRkCXYxNS4ycyx2MTAuMnMsdjI1LjJzCisrCWFkZAl2MTguMnMsdjEzLjJzLHYyOC4ycworKworKy5Mb25nX3RhaWw6CisrCWR1cAl2MTQuMmQsdjE0LmRbMF0KKysJdW11bGwyCXYxOS4yZCx2MTYuNHMsdjYuNHMKKysJdW11bGwyCXYyMi4yZCx2MTYuNHMsdjEuNHMKKysJdW11bGwyCXYyMy4yZCx2MTYuNHMsdjMuNHMKKysJdW11bGwyCXYyMS4yZCx2MTYuNHMsdjAuNHMKKysJdW11bGwyCXYyMC4yZCx2MTYuNHMsdjguNHMKKysKKysJZHVwCXYxNS4yZCx2MTUuZFswXQorKwl1bWxhbDIJdjE5LjJkLHYxNC40cyx2MC40cworKwl1bWxhbDIJdjIxLjJkLHYxNC40cyx2My40cworKwl1bWxhbDIJdjIyLjJkLHYxNC40cyx2NS40cworKwl1bWxhbDIJdjIzLjJkLHYxNC40cyx2Ny40cworKwl1bWxhbDIJdjIwLjJkLHYxNC40cyx2MS40cworKworKwlkdXAJdjE3LjJkLHYxNy5kWzBdCisrCXVtbGFsMgl2MTkuMmQsdjE1LjRzLHY4LjRzCisrCXVtbGFsMgl2MjIuMmQsdjE1LjRzLHYzLjRzCisrCXVtbGFsMgl2MjEuMmQsdjE1LjRzLHYxLjRzCisrCXVtbGFsMgl2MjMuMmQsdjE1LjRzLHY1LjRzCisrCXVtbGFsMgl2MjAuMmQsdjE1LjRzLHYwLjRzCisrCisrCWR1cAl2MTguMmQsdjE4LmRbMF0KKysJdW1sYWwyCXYyMi4yZCx2MTcuNHMsdjAuNHMKKysJdW1sYWwyCXYyMy4yZCx2MTcuNHMsdjEuNHMKKysJdW1sYWwyCXYxOS4yZCx2MTcuNHMsdjQuNHMKKysJdW1sYWwyCXYyMC4yZCx2MTcuNHMsdjYuNHMKKysJdW1sYWwyCXYyMS4yZCx2MTcuNHMsdjguNHMKKysKKysJdW1sYWwyCXYyMi4yZCx2MTguNHMsdjguNHMKKysJdW1sYWwyCXYxOS4yZCx2MTguNHMsdjIuNHMKKysJdW1sYWwyCXYyMy4yZCx2MTguNHMsdjAuNHMKKysJdW1sYWwyCXYyMC4yZCx2MTguNHMsdjQuNHMKKysJdW1sYWwyCXYyMS4yZCx2MTguNHMsdjYuNHMKKysKKysJYi5lcQkuTHNob3J0X3RhaWwKKysKKysJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKwkvLyAoaGFzaCtpbnBbMDoxXSkqcl40OnJeMyBhbmQgYWNjdW11bGF0ZQorKworKwlhZGQJdjkuMnMsdjkuMnMsdjI0LjJzCisrCXVtbGFsCXYyMi4yZCx2MTEuMnMsdjEuMnMKKysJdW1sYWwJdjE5LjJkLHYxMS4ycyx2Ni4ycworKwl1bWxhbAl2MjMuMmQsdjExLjJzLHYzLjJzCisrCXVtbGFsCXYyMC4yZCx2MTEuMnMsdjguMnMKKysJdW1sYWwJdjIxLjJkLHYxMS4ycyx2MC4ycworKworKwlhZGQJdjEwLjJzLHYxMC4ycyx2MjUuMnMKKysJdW1sYWwJdjIyLjJkLHY5LjJzLHY1LjJzCisrCXVtbGFsCXYxOS4yZCx2OS4ycyx2MC4ycworKwl1bWxhbAl2MjMuMmQsdjkuMnMsdjcuMnMKKysJdW1sYWwJdjIwLjJkLHY5LjJzLHYxLjJzCisrCXVtbGFsCXYyMS4yZCx2OS4ycyx2My4ycworKworKwlhZGQJdjEyLjJzLHYxMi4ycyx2MjcuMnMKKysJdW1sYWwJdjIyLjJkLHYxMC4ycyx2My4ycworKwl1bWxhbAl2MTkuMmQsdjEwLjJzLHY4LjJzCisrCXVtbGFsCXYyMy4yZCx2MTAuMnMsdjUuMnMKKysJdW1sYWwJdjIwLjJkLHYxMC4ycyx2MC4ycworKwl1bWxhbAl2MjEuMmQsdjEwLjJzLHYxLjJzCisrCisrCWFkZAl2MTMuMnMsdjEzLjJzLHYyOC4ycworKwl1bWxhbAl2MjIuMmQsdjEyLjJzLHYwLjJzCisrCXVtbGFsCXYxOS4yZCx2MTIuMnMsdjQuMnMKKysJdW1sYWwJdjIzLjJkLHYxMi4ycyx2MS4ycworKwl1bWxhbAl2MjAuMmQsdjEyLjJzLHY2LjJzCisrCXVtbGFsCXYyMS4yZCx2MTIuMnMsdjguMnMKKysKKysJdW1sYWwJdjIyLjJkLHYxMy4ycyx2OC4ycworKwl1bWxhbAl2MTkuMmQsdjEzLjJzLHYyLjJzCisrCXVtbGFsCXYyMy4yZCx2MTMuMnMsdjAuMnMKKysJdW1sYWwJdjIwLjJkLHYxMy4ycyx2NC4ycworKwl1bWxhbAl2MjEuMmQsdjEzLjJzLHY2LjJzCisrCisrLkxzaG9ydF90YWlsOgorKwkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCS8vIGhvcml6b250YWwgYWRkCisrCisrCWFkZHAJdjIyLjJkLHYyMi4yZCx2MjIuMmQKKysJIGxkcAlkOCxkOSxbc3AsIzE2XQkJLy8gbWVldCBBQkkgcmVxdWlyZW1lbnRzCisrCWFkZHAJdjE5LjJkLHYxOS4yZCx2MTkuMmQKKysJIGxkcAlkMTAsZDExLFtzcCwjMzJdCisrCWFkZHAJdjIzLjJkLHYyMy4yZCx2MjMuMmQKKysJIGxkcAlkMTIsZDEzLFtzcCwjNDhdCisrCWFkZHAJdjIwLjJkLHYyMC4yZCx2MjAuMmQKKysJIGxkcAlkMTQsZDE1LFtzcCwjNjRdCisrCWFkZHAJdjIxLjJkLHYyMS4yZCx2MjEuMmQKKysJIGxkcgl4MzAsW3NwLCM4XQorKwkgLmluc3QJMHhkNTAzMjNiZgkJLy8gYXV0aWFzcAorKworKwkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCS8vIGxhenkgcmVkdWN0aW9uLCBidXQgd2l0aG91dCBuYXJyb3dpbmcKKysKKysJdXNocgl2MjkuMmQsdjIyLjJkLCMyNgorKwlhbmQJdjIyLjE2Yix2MjIuMTZiLHYzMS4xNmIKKysJIHVzaHIJdjMwLjJkLHYxOS4yZCwjMjYKKysJIGFuZAl2MTkuMTZiLHYxOS4xNmIsdjMxLjE2YgorKworKwlhZGQJdjIzLjJkLHYyMy4yZCx2MjkuMmQJLy8gaDMgLT4gaDQKKysJIGFkZAl2MjAuMmQsdjIwLjJkLHYzMC4yZAkvLyBoMCAtPiBoMQorKworKwl1c2hyCXYyOS4yZCx2MjMuMmQsIzI2CisrCWFuZAl2MjMuMTZiLHYyMy4xNmIsdjMxLjE2YgorKwkgdXNocgl2MzAuMmQsdjIwLjJkLCMyNgorKwkgYW5kCXYyMC4xNmIsdjIwLjE2Yix2MzEuMTZiCisrCSBhZGQJdjIxLjJkLHYyMS4yZCx2MzAuMmQJLy8gaDEgLT4gaDIKKysKKysJYWRkCXYxOS4yZCx2MTkuMmQsdjI5LjJkCisrCXNobAl2MjkuMmQsdjI5LjJkLCMyCisrCSB1c2hyCXYzMC4yZCx2MjEuMmQsIzI2CisrCSBhbmQJdjIxLjE2Yix2MjEuMTZiLHYzMS4xNmIKKysJYWRkCXYxOS4yZCx2MTkuMmQsdjI5LjJkCS8vIGg0IC0+IGgwCisrCSBhZGQJdjIyLjJkLHYyMi4yZCx2MzAuMmQJLy8gaDIgLT4gaDMKKysKKysJdXNocgl2MjkuMmQsdjE5LjJkLCMyNgorKwlhbmQJdjE5LjE2Yix2MTkuMTZiLHYzMS4xNmIKKysJIHVzaHIJdjMwLjJkLHYyMi4yZCwjMjYKKysJIGFuZAl2MjIuMTZiLHYyMi4xNmIsdjMxLjE2YgorKwlhZGQJdjIwLjJkLHYyMC4yZCx2MjkuMmQJLy8gaDAgLT4gaDEKKysJIGFkZAl2MjMuMmQsdjIzLjJkLHYzMC4yZAkvLyBoMyAtPiBoNAorKworKwkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisrCS8vIHdyaXRlIHRoZSByZXN1bHQsIGNhbiBiZSBwYXJ0aWFsbHkgcmVkdWNlZAorKworKwlzdDQJe3YxOS5zLHYyMC5zLHYyMS5zLHYyMi5zfVswXSxbeDBdLCMxNgorKwltb3YJeDQsIzEKKysJc3QxCXt2MjMuc31bMF0sW3gwXQorKwlzdHIJeDQsW3gwLCM4XQkJLy8gc2V0IGlzX2Jhc2UyXzI2CisrCisrCWxkcgl4MjksW3NwXSwjODAKKysJcmV0CisrLnNpemUJcG9seTEzMDVfYmxvY2tzX25lb24sLi1wb2x5MTMwNV9ibG9ja3NfbmVvbgorKworKy5hbGlnbgk1CisrLkx6ZXJvczoKKysubG9uZwkwLDAsMCwwLDAsMCwwLDAKKysuYXNjaXoJIlBvbHkxMzA1IGZvciBBUk12OCwgQ1JZUFRPR0FNUyBieSBAZG90LWFzbSIKKysuYWxpZ24JMgorKyNpZiAhZGVmaW5lZChfX0tFUk5FTF9fKSAmJiAhZGVmaW5lZChfV0lONjQpCisrLmNvbW0JT1BFTlNTTF9hcm1jYXBfUCw0LDQKKysuaGlkZGVuCU9QRU5TU0xfYXJtY2FwX1AKKysjZW5kaWYKKy0tLSAvZGV2L251bGwKKysrKyBiL2FyY2gvYXJtNjQvY3J5cHRvL3BvbHkxMzA1LWdsdWUuYworQEAgLTAsMCArMSwyMzcgQEAKKysvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorKy8qCisrICogT3BlblNTTC9DcnlwdG9nYW1zIGFjY2VsZXJhdGVkIFBvbHkxMzA1IHRyYW5zZm9ybSBmb3IgYXJtNjQKKysgKgorKyAqIENvcHlyaWdodCAoQykgMjAxOSBMaW5hcm8gTHRkLiA8YXJkLmJpZXNoZXV2ZWxAbGluYXJvLm9yZz4KKysgKi8KKysKKysjaW5jbHVkZSA8YXNtL2h3Y2FwLmg+CisrI2luY2x1ZGUgPGFzbS9uZW9uLmg+CisrI2luY2x1ZGUgPGFzbS9zaW1kLmg+CisrI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKysjaW5jbHVkZSA8Y3J5cHRvL2FsZ2FwaS5oPgorKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvaGFzaC5oPgorKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvcG9seTEzMDUuaD4KKysjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL3NpbWQuaD4KKysjaW5jbHVkZSA8bGludXgvY3B1ZmVhdHVyZS5oPgorKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKysjaW5jbHVkZSA8bGludXgvanVtcF9sYWJlbC5oPgorKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKysKKythc21saW5rYWdlIHZvaWQgcG9seTEzMDVfaW5pdF9hcm02NCh2b2lkICpzdGF0ZSwgY29uc3QgdTggKmtleSk7CisrYXNtbGlua2FnZSB2b2lkIHBvbHkxMzA1X2Jsb2Nrcyh2b2lkICpzdGF0ZSwgY29uc3QgdTggKnNyYywgdTMyIGxlbiwgdTMyIGhpYml0KTsKKythc21saW5rYWdlIHZvaWQgcG9seTEzMDVfYmxvY2tzX25lb24odm9pZCAqc3RhdGUsIGNvbnN0IHU4ICpzcmMsIHUzMiBsZW4sIHUzMiBoaWJpdCk7CisrYXNtbGlua2FnZSB2b2lkIHBvbHkxMzA1X2VtaXQodm9pZCAqc3RhdGUsIF9fbGUzMiAqZGlnZXN0LCBjb25zdCB1MzIgKm5vbmNlKTsKKysKKytzdGF0aWMgX19yb19hZnRlcl9pbml0IERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGhhdmVfbmVvbik7CisrCisrdm9pZCBwb2x5MTMwNV9pbml0X2FyY2goc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4ICpkY3R4LCBjb25zdCB1OCAqa2V5KQorK3sKKysJcG9seTEzMDVfaW5pdF9hcm02NCgmZGN0eC0+aCwga2V5KTsKKysJZGN0eC0+c1swXSA9IGdldF91bmFsaWduZWRfbGUzMihrZXkgKyAxNik7CisrCWRjdHgtPnNbMV0gPSBnZXRfdW5hbGlnbmVkX2xlMzIoa2V5ICsgMjApOworKwlkY3R4LT5zWzJdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGtleSArIDI0KTsKKysJZGN0eC0+c1szXSA9IGdldF91bmFsaWduZWRfbGUzMihrZXkgKyAyOCk7CisrCWRjdHgtPmJ1ZmxlbiA9IDA7CisrfQorK0VYUE9SVF9TWU1CT0wocG9seTEzMDVfaW5pdF9hcmNoKTsKKysKKytzdGF0aWMgaW50IG5lb25fcG9seTEzMDVfaW5pdChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYykKKyt7CisrCXN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCAqZGN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworKworKwlkY3R4LT5idWZsZW4gPSAwOworKwlkY3R4LT5yc2V0ID0gMDsKKysJZGN0eC0+c3NldCA9IGZhbHNlOworKworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIHZvaWQgbmVvbl9wb2x5MTMwNV9ibG9ja3Moc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4ICpkY3R4LCBjb25zdCB1OCAqc3JjLAorKwkJCQkgdTMyIGxlbiwgdTMyIGhpYml0LCBib29sIGRvX25lb24pCisreworKwlpZiAodW5saWtlbHkoIWRjdHgtPnNzZXQpKSB7CisrCQlpZiAoIWRjdHgtPnJzZXQpIHsKKysJCQlwb2x5MTMwNV9pbml0X2FyY2goZGN0eCwgc3JjKTsKKysJCQlzcmMgKz0gUE9MWTEzMDVfQkxPQ0tfU0laRTsKKysJCQlsZW4gLT0gUE9MWTEzMDVfQkxPQ0tfU0laRTsKKysJCQlkY3R4LT5yc2V0ID0gMTsKKysJCX0KKysJCWlmIChsZW4gPj0gUE9MWTEzMDVfQkxPQ0tfU0laRSkgeworKwkJCWRjdHgtPnNbMF0gPSBnZXRfdW5hbGlnbmVkX2xlMzIoc3JjICsgIDApOworKwkJCWRjdHgtPnNbMV0gPSBnZXRfdW5hbGlnbmVkX2xlMzIoc3JjICsgIDQpOworKwkJCWRjdHgtPnNbMl0gPSBnZXRfdW5hbGlnbmVkX2xlMzIoc3JjICsgIDgpOworKwkJCWRjdHgtPnNbM10gPSBnZXRfdW5hbGlnbmVkX2xlMzIoc3JjICsgMTIpOworKwkJCXNyYyArPSBQT0xZMTMwNV9CTE9DS19TSVpFOworKwkJCWxlbiAtPSBQT0xZMTMwNV9CTE9DS19TSVpFOworKwkJCWRjdHgtPnNzZXQgPSB0cnVlOworKwkJfQorKwkJaWYgKGxlbiA8IFBPTFkxMzA1X0JMT0NLX1NJWkUpCisrCQkJcmV0dXJuOworKwl9CisrCisrCWxlbiAmPSB+KFBPTFkxMzA1X0JMT0NLX1NJWkUgLSAxKTsKKysKKysJaWYgKHN0YXRpY19icmFuY2hfbGlrZWx5KCZoYXZlX25lb24pICYmIGxpa2VseShkb19uZW9uKSkKKysJCXBvbHkxMzA1X2Jsb2Nrc19uZW9uKCZkY3R4LT5oLCBzcmMsIGxlbiwgaGliaXQpOworKwllbHNlCisrCQlwb2x5MTMwNV9ibG9ja3MoJmRjdHgtPmgsIHNyYywgbGVuLCBoaWJpdCk7CisrfQorKworK3N0YXRpYyB2b2lkIG5lb25fcG9seTEzMDVfZG9fdXBkYXRlKHN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCAqZGN0eCwKKysJCQkJICAgIGNvbnN0IHU4ICpzcmMsIHUzMiBsZW4sIGJvb2wgZG9fbmVvbikKKyt7CisrCWlmICh1bmxpa2VseShkY3R4LT5idWZsZW4pKSB7CisrCQl1MzIgYnl0ZXMgPSBtaW4obGVuLCBQT0xZMTMwNV9CTE9DS19TSVpFIC0gZGN0eC0+YnVmbGVuKTsKKysKKysJCW1lbWNweShkY3R4LT5idWYgKyBkY3R4LT5idWZsZW4sIHNyYywgYnl0ZXMpOworKwkJc3JjICs9IGJ5dGVzOworKwkJbGVuIC09IGJ5dGVzOworKwkJZGN0eC0+YnVmbGVuICs9IGJ5dGVzOworKworKwkJaWYgKGRjdHgtPmJ1ZmxlbiA9PSBQT0xZMTMwNV9CTE9DS19TSVpFKSB7CisrCQkJbmVvbl9wb2x5MTMwNV9ibG9ja3MoZGN0eCwgZGN0eC0+YnVmLAorKwkJCQkJICAgICBQT0xZMTMwNV9CTE9DS19TSVpFLCAxLCBmYWxzZSk7CisrCQkJZGN0eC0+YnVmbGVuID0gMDsKKysJCX0KKysJfQorKworKwlpZiAobGlrZWx5KGxlbiA+PSBQT0xZMTMwNV9CTE9DS19TSVpFKSkgeworKwkJbmVvbl9wb2x5MTMwNV9ibG9ja3MoZGN0eCwgc3JjLCBsZW4sIDEsIGRvX25lb24pOworKwkJc3JjICs9IHJvdW5kX2Rvd24obGVuLCBQT0xZMTMwNV9CTE9DS19TSVpFKTsKKysJCWxlbiAlPSBQT0xZMTMwNV9CTE9DS19TSVpFOworKwl9CisrCisrCWlmICh1bmxpa2VseShsZW4pKSB7CisrCQlkY3R4LT5idWZsZW4gPSBsZW47CisrCQltZW1jcHkoZGN0eC0+YnVmLCBzcmMsIGxlbik7CisrCX0KKyt9CisrCisrc3RhdGljIGludCBuZW9uX3BvbHkxMzA1X3VwZGF0ZShzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywKKysJCQkJY29uc3QgdTggKnNyYywgdW5zaWduZWQgaW50IHNyY2xlbikKKyt7CisrCWJvb2wgZG9fbmVvbiA9IGNyeXB0b19zaW1kX3VzYWJsZSgpICYmIHNyY2xlbiA+IDEyODsKKysJc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4ICpkY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisrCisrCWlmIChzdGF0aWNfYnJhbmNoX2xpa2VseSgmaGF2ZV9uZW9uKSAmJiBkb19uZW9uKQorKwkJa2VybmVsX25lb25fYmVnaW4oKTsKKysJbmVvbl9wb2x5MTMwNV9kb191cGRhdGUoZGN0eCwgc3JjLCBzcmNsZW4sIGRvX25lb24pOworKwlpZiAoc3RhdGljX2JyYW5jaF9saWtlbHkoJmhhdmVfbmVvbikgJiYgZG9fbmVvbikKKysJCWtlcm5lbF9uZW9uX2VuZCgpOworKwlyZXR1cm4gMDsKKyt9CisrCisrdm9pZCBwb2x5MTMwNV91cGRhdGVfYXJjaChzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRjdHgsIGNvbnN0IHU4ICpzcmMsCisrCQkJICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQorK3sKKysJaWYgKHVubGlrZWx5KGRjdHgtPmJ1ZmxlbikpIHsKKysJCXUzMiBieXRlcyA9IG1pbihuYnl0ZXMsIFBPTFkxMzA1X0JMT0NLX1NJWkUgLSBkY3R4LT5idWZsZW4pOworKworKwkJbWVtY3B5KGRjdHgtPmJ1ZiArIGRjdHgtPmJ1Zmxlbiwgc3JjLCBieXRlcyk7CisrCQlzcmMgKz0gYnl0ZXM7CisrCQluYnl0ZXMgLT0gYnl0ZXM7CisrCQlkY3R4LT5idWZsZW4gKz0gYnl0ZXM7CisrCisrCQlpZiAoZGN0eC0+YnVmbGVuID09IFBPTFkxMzA1X0JMT0NLX1NJWkUpIHsKKysJCQlwb2x5MTMwNV9ibG9ja3MoJmRjdHgtPmgsIGRjdHgtPmJ1ZiwgUE9MWTEzMDVfQkxPQ0tfU0laRSwgMSk7CisrCQkJZGN0eC0+YnVmbGVuID0gMDsKKysJCX0KKysJfQorKworKwlpZiAobGlrZWx5KG5ieXRlcyA+PSBQT0xZMTMwNV9CTE9DS19TSVpFKSkgeworKwkJdW5zaWduZWQgaW50IGxlbiA9IHJvdW5kX2Rvd24obmJ5dGVzLCBQT0xZMTMwNV9CTE9DS19TSVpFKTsKKysKKysJCWlmIChzdGF0aWNfYnJhbmNoX2xpa2VseSgmaGF2ZV9uZW9uKSAmJiBjcnlwdG9fc2ltZF91c2FibGUoKSkgeworKwkJCWtlcm5lbF9uZW9uX2JlZ2luKCk7CisrCQkJcG9seTEzMDVfYmxvY2tzX25lb24oJmRjdHgtPmgsIHNyYywgbGVuLCAxKTsKKysJCQlrZXJuZWxfbmVvbl9lbmQoKTsKKysJCX0gZWxzZSB7CisrCQkJcG9seTEzMDVfYmxvY2tzKCZkY3R4LT5oLCBzcmMsIGxlbiwgMSk7CisrCQl9CisrCQlzcmMgKz0gbGVuOworKwkJbmJ5dGVzICU9IFBPTFkxMzA1X0JMT0NLX1NJWkU7CisrCX0KKysKKysJaWYgKHVubGlrZWx5KG5ieXRlcykpIHsKKysJCWRjdHgtPmJ1ZmxlbiA9IG5ieXRlczsKKysJCW1lbWNweShkY3R4LT5idWYsIHNyYywgbmJ5dGVzKTsKKysJfQorK30KKytFWFBPUlRfU1lNQk9MKHBvbHkxMzA1X3VwZGF0ZV9hcmNoKTsKKysKKyt2b2lkIHBvbHkxMzA1X2ZpbmFsX2FyY2goc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4ICpkY3R4LCB1OCAqZHN0KQorK3sKKysJX19sZTMyIGRpZ2VzdFs0XTsKKysJdTY0IGYgPSAwOworKworKwlpZiAodW5saWtlbHkoZGN0eC0+YnVmbGVuKSkgeworKwkJZGN0eC0+YnVmW2RjdHgtPmJ1ZmxlbisrXSA9IDE7CisrCQltZW1zZXQoZGN0eC0+YnVmICsgZGN0eC0+YnVmbGVuLCAwLAorKwkJICAgICAgIFBPTFkxMzA1X0JMT0NLX1NJWkUgLSBkY3R4LT5idWZsZW4pOworKwkJcG9seTEzMDVfYmxvY2tzKCZkY3R4LT5oLCBkY3R4LT5idWYsIFBPTFkxMzA1X0JMT0NLX1NJWkUsIDApOworKwl9CisrCisrCXBvbHkxMzA1X2VtaXQoJmRjdHgtPmgsIGRpZ2VzdCwgZGN0eC0+cyk7CisrCisrCS8qIG1hYyA9IChoICsgcykgJSAoMl4xMjgpICovCisrCWYgPSAoZiA+PiAzMikgKyBsZTMyX3RvX2NwdShkaWdlc3RbMF0pOworKwlwdXRfdW5hbGlnbmVkX2xlMzIoZiwgZHN0KTsKKysJZiA9IChmID4+IDMyKSArIGxlMzJfdG9fY3B1KGRpZ2VzdFsxXSk7CisrCXB1dF91bmFsaWduZWRfbGUzMihmLCBkc3QgKyA0KTsKKysJZiA9IChmID4+IDMyKSArIGxlMzJfdG9fY3B1KGRpZ2VzdFsyXSk7CisrCXB1dF91bmFsaWduZWRfbGUzMihmLCBkc3QgKyA4KTsKKysJZiA9IChmID4+IDMyKSArIGxlMzJfdG9fY3B1KGRpZ2VzdFszXSk7CisrCXB1dF91bmFsaWduZWRfbGUzMihmLCBkc3QgKyAxMik7CisrCisrCSpkY3R4ID0gKHN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCl7fTsKKyt9CisrRVhQT1JUX1NZTUJPTChwb2x5MTMwNV9maW5hbF9hcmNoKTsKKysKKytzdGF0aWMgaW50IG5lb25fcG9seTEzMDVfZmluYWwoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIHU4ICpkc3QpCisreworKwlzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKysKKysJaWYgKHVubGlrZWx5KCFkY3R4LT5zc2V0KSkKKysJCXJldHVybiAtRU5PS0VZOworKworKwlwb2x5MTMwNV9maW5hbF9hcmNoKGRjdHgsIGRzdCk7CisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgc3RydWN0IHNoYXNoX2FsZyBuZW9uX3BvbHkxMzA1X2FsZyA9IHsKKysJLmluaXQJCQk9IG5lb25fcG9seTEzMDVfaW5pdCwKKysJLnVwZGF0ZQkJCT0gbmVvbl9wb2x5MTMwNV91cGRhdGUsCisrCS5maW5hbAkJCT0gbmVvbl9wb2x5MTMwNV9maW5hbCwKKysJLmRpZ2VzdHNpemUJCT0gUE9MWTEzMDVfRElHRVNUX1NJWkUsCisrCS5kZXNjc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4KSwKKysKKysJLmJhc2UuY3JhX25hbWUJCT0gInBvbHkxMzA1IiwKKysJLmJhc2UuY3JhX2RyaXZlcl9uYW1lCT0gInBvbHkxMzA1LW5lb24iLAorKwkuYmFzZS5jcmFfcHJpb3JpdHkJPSAyMDAsCisrCS5iYXNlLmNyYV9ibG9ja3NpemUJPSBQT0xZMTMwNV9CTE9DS19TSVpFLAorKwkuYmFzZS5jcmFfbW9kdWxlCT0gVEhJU19NT0RVTEUsCisrfTsKKysKKytzdGF0aWMgaW50IF9faW5pdCBuZW9uX3BvbHkxMzA1X21vZF9pbml0KHZvaWQpCisreworKwlpZiAoIWNwdV9oYXZlX25hbWVkX2ZlYXR1cmUoQVNJTUQpKQorKwkJcmV0dXJuIDA7CisrCisrCXN0YXRpY19icmFuY2hfZW5hYmxlKCZoYXZlX25lb24pOworKworKwlyZXR1cm4gY3J5cHRvX3JlZ2lzdGVyX3NoYXNoKCZuZW9uX3BvbHkxMzA1X2FsZyk7CisrfQorKworK3N0YXRpYyB2b2lkIF9fZXhpdCBuZW9uX3BvbHkxMzA1X21vZF9leGl0KHZvaWQpCisreworKwlpZiAoY3B1X2hhdmVfbmFtZWRfZmVhdHVyZShBU0lNRCkpCisrCQljcnlwdG9fdW5yZWdpc3Rlcl9zaGFzaCgmbmVvbl9wb2x5MTMwNV9hbGcpOworK30KKysKKyttb2R1bGVfaW5pdChuZW9uX3BvbHkxMzA1X21vZF9pbml0KTsKKyttb2R1bGVfZXhpdChuZW9uX3BvbHkxMzA1X21vZF9leGl0KTsKKysKKytNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CisrTU9EVUxFX0FMSUFTX0NSWVBUTygicG9seTEzMDUiKTsKKytNT0RVTEVfQUxJQVNfQ1JZUFRPKCJwb2x5MTMwNS1uZW9uIik7CistLS0gYS9saWIvY3J5cHRvL0tjb25maWcKKysrKyBiL2xpYi9jcnlwdG8vS2NvbmZpZworQEAgLTQwLDYgKzQwLDcgQEAgY29uZmlnIENSWVBUT19MSUJfREVTCisgY29uZmlnIENSWVBUT19MSUJfUE9MWTEzMDVfUlNJWkUKKyAJaW50CisgCWRlZmF1bHQgNCBpZiBYODZfNjQKKysJZGVmYXVsdCA5IGlmIEFSTTY0CisgCWRlZmF1bHQgMQorIAorIGNvbmZpZyBDUllQVE9fQVJDSF9IQVZFX0xJQl9QT0xZMTMwNQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAxOS1jcnlwdG8tYXJtLXBvbHkxMzA1LWluY29ycG9yYXRlLU9wZW5TU0wtQ1JZUFRPR0FNUy1OLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAxOS1jcnlwdG8tYXJtLXBvbHkxMzA1LWluY29ycG9yYXRlLU9wZW5TU0wtQ1JZUFRPR0FNUy1OLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2N2IyMGYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDE5LWNyeXB0by1hcm0tcG9seTEzMDUtaW5jb3Jwb3JhdGUtT3BlblNTTC1DUllQVE9HQU1TLU4ucGF0Y2gKQEAgLTAsMCArMSwyNzc2IEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgorRGF0ZTogRnJpLCA4IE5vdiAyMDE5IDEzOjIyOjI1ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyeXB0bzogYXJtL3BvbHkxMzA1IC0gaW5jb3Jwb3JhdGUgT3BlblNTTC9DUllQVE9HQU1TIE5FT04KKyBpbXBsZW1lbnRhdGlvbgorCitjb21taXQgYTZiODAzYjNkZGM3OTNkNmRiMGMxNmYxMmZjMTJkMzBkMjBmYTljYyB1cHN0cmVhbS4KKworVGhpcyBpcyBhIHN0cmFpZ2h0IGltcG9ydCBvZiB0aGUgT3BlblNTTC9DUllQVE9HQU1TIFBvbHkxMzA1IGltcGxlbWVudGF0aW9uCitmb3IgTkVPTiBhdXRob3JlZCBieSBBbmR5IFBvbHlha292LCBhbmQgY29udHJpYnV0ZWQgYnkgaGltIHRvIHRoZSBPcGVuU1NMCitwcm9qZWN0LiBUaGUgZmlsZSAncG9seTEzMDUtYXJtdjQucGwnIGlzIHRha2VuIHN0cmFpZ2h0IGZyb20gdGhpcyB1cHN0cmVhbQorR2l0SHViIHJlcG9zaXRvcnkgWzBdIGF0IGNvbW1pdCBlYzU1YTA4ZGMwMjQ0Y2U1NzBjNGZjN2NhZGUzMzBjNjA3OTg5NTJmLAorYW5kIGFscmVhZHkgY29udGFpbnMgYWxsIHRoZSBjaGFuZ2VzIHJlcXVpcmVkIHRvIGJ1aWxkIGl0IGFzIHBhcnQgb2YgYQorTGludXgga2VybmVsIG1vZHVsZS4KKworWzBdIGh0dHBzOi8vZ2l0aHViLmNvbS9kb3QtYXNtL2NyeXB0b2dhbXMKKworQ28tZGV2ZWxvcGVkLWJ5OiBBbmR5IFBvbHlha292IDxhcHByb0BjcnlwdG9nYW1zLm9yZz4KK1NpZ25lZC1vZmYtYnk6IEFuZHkgUG9seWFrb3YgPGFwcHJvQGNyeXB0b2dhbXMub3JnPgorU2lnbmVkLW9mZi1ieTogQXJkIEJpZXNoZXV2ZWwgPGFyZGJAa2VybmVsLm9yZz4KK1NpZ25lZC1vZmYtYnk6IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgYXJjaC9hcm0vY3J5cHRvL0tjb25maWcgICAgICAgICAgICAgICAgIHwgICAgNSArCisgYXJjaC9hcm0vY3J5cHRvL01ha2VmaWxlICAgICAgICAgICAgICAgIHwgICAxMiArLQorIGFyY2gvYXJtL2NyeXB0by9wb2x5MTMwNS1hcm12NC5wbCAgICAgICB8IDEyMzYgKysrKysrKysrKysrKysrKysrKysrKysKKyBhcmNoL2FybS9jcnlwdG8vcG9seTEzMDUtY29yZS5TX3NoaXBwZWQgfCAxMTU4ICsrKysrKysrKysrKysrKysrKysrKworIGFyY2gvYXJtL2NyeXB0by9wb2x5MTMwNS1nbHVlLmMgICAgICAgICB8ICAyNzYgKysrKysKKyBsaWIvY3J5cHRvL0tjb25maWcgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICstCisgNiBmaWxlcyBjaGFuZ2VkLCAyNjg3IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGFyY2gvYXJtL2NyeXB0by9wb2x5MTMwNS1hcm12NC5wbAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBhcmNoL2FybS9jcnlwdG8vcG9seTEzMDUtY29yZS5TX3NoaXBwZWQKKyBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC9hcm0vY3J5cHRvL3BvbHkxMzA1LWdsdWUuYworCistLS0gYS9hcmNoL2FybS9jcnlwdG8vS2NvbmZpZworKysrIGIvYXJjaC9hcm0vY3J5cHRvL0tjb25maWcKK0BAIC0xMzEsNiArMTMxLDExIEBAIGNvbmZpZyBDUllQVE9fQ0hBQ0hBMjBfTkVPTgorIAlzZWxlY3QgQ1JZUFRPX0JMS0NJUEhFUgorIAlzZWxlY3QgQ1JZUFRPX0FSQ0hfSEFWRV9MSUJfQ0hBQ0hBCisgCisrY29uZmlnIENSWVBUT19QT0xZMTMwNV9BUk0KKysJdHJpc3RhdGUgIkFjY2VsZXJhdGVkIHNjYWxhciBhbmQgU0lNRCBQb2x5MTMwNSBoYXNoIGltcGxlbWVudGF0aW9ucyIKKysJc2VsZWN0IENSWVBUT19IQVNICisrCXNlbGVjdCBDUllQVE9fQVJDSF9IQVZFX0xJQl9QT0xZMTMwNQorKworIGNvbmZpZyBDUllQVE9fTkhQT0xZMTMwNV9ORU9OCisgCXRyaXN0YXRlICJORU9OIGFjY2VsZXJhdGVkIE5IUG9seTEzMDUgaGFzaCBmdW5jdGlvbiAoZm9yIEFkaWFudHVtKSIKKyAJZGVwZW5kcyBvbiBLRVJORUxfTU9ERV9ORU9OCistLS0gYS9hcmNoL2FybS9jcnlwdG8vTWFrZWZpbGUKKysrKyBiL2FyY2gvYXJtL2NyeXB0by9NYWtlZmlsZQorQEAgLTEwLDYgKzEwLDcgQEAgb2JqLSQoQ09ORklHX0NSWVBUT19TSEExX0FSTV9ORU9OKSArPSBzaAorIG9iai0kKENPTkZJR19DUllQVE9fU0hBMjU2X0FSTSkgKz0gc2hhMjU2LWFybS5vCisgb2JqLSQoQ09ORklHX0NSWVBUT19TSEE1MTJfQVJNKSArPSBzaGE1MTItYXJtLm8KKyBvYmotJChDT05GSUdfQ1JZUFRPX0NIQUNIQTIwX05FT04pICs9IGNoYWNoYS1uZW9uLm8KKytvYmotJChDT05GSUdfQ1JZUFRPX1BPTFkxMzA1X0FSTSkgKz0gcG9seTEzMDUtYXJtLm8KKyBvYmotJChDT05GSUdfQ1JZUFRPX05IUE9MWTEzMDVfTkVPTikgKz0gbmhwb2x5MTMwNS1uZW9uLm8KKyAKKyBjZS1vYmotJChDT05GSUdfQ1JZUFRPX0FFU19BUk1fQ0UpICs9IGFlcy1hcm0tY2UubworQEAgLTU1LDEyICs1NiwxNiBAQCBjcmN0MTBkaWYtYXJtLWNlLXkJOj0gY3JjdDEwZGlmLWNlLWNvcmUuCisgY3JjMzItYXJtLWNlLXk6PSBjcmMzMi1jZS1jb3JlLm8gY3JjMzItY2UtZ2x1ZS5vCisgY2hhY2hhLW5lb24teSA6PSBjaGFjaGEtc2NhbGFyLWNvcmUubyBjaGFjaGEtZ2x1ZS5vCisgY2hhY2hhLW5lb24tJChDT05GSUdfS0VSTkVMX01PREVfTkVPTikgKz0gY2hhY2hhLW5lb24tY29yZS5vCisrcG9seTEzMDUtYXJtLXkgOj0gcG9seTEzMDUtY29yZS5vIHBvbHkxMzA1LWdsdWUubworIG5ocG9seTEzMDUtbmVvbi15IDo9IG5oLW5lb24tY29yZS5vIG5ocG9seTEzMDUtbmVvbi1nbHVlLm8KKyAKKyBpZmRlZiBSRUdFTkVSQVRFX0FSTV9DUllQVE8KKyBxdWlldF9jbWRfcGVybCA9IFBFUkwgICAgJEAKKyAgICAgICBjbWRfcGVybCA9ICQoUEVSTCkgJCg8KSA+ICQoQCkKKyAKKyskKHNyYykvcG9seTEzMDUtY29yZS5TX3NoaXBwZWQ6ICQoc3JjKS9wb2x5MTMwNS1hcm12NC5wbAorKwkkKGNhbGwgY21kLHBlcmwpCisrCisgJChzcmMpL3NoYTI1Ni1jb3JlLlNfc2hpcHBlZDogJChzcmMpL3NoYTI1Ni1hcm12NC5wbAorIAkkKGNhbGwgY21kLHBlcmwpCisgCitAQCAtNjgsNCArNzMsOSBAQCAkKHNyYykvc2hhNTEyLWNvcmUuU19zaGlwcGVkOiAkKHNyYykvc2hhCisgCSQoY2FsbCBjbWQscGVybCkKKyBlbmRpZgorIAorLWNsZWFuLWZpbGVzICs9IHNoYTI1Ni1jb3JlLlMgc2hhNTEyLWNvcmUuUworK2NsZWFuLWZpbGVzICs9IHBvbHkxMzA1LWNvcmUuUyBzaGEyNTYtY29yZS5TIHNoYTUxMi1jb3JlLlMKKysKKysjIG1hc3NhZ2UgdGhlIHBlcmxhc20gY29kZSBhIGJpdCBzbyB3ZSBvbmx5IGdldCB0aGUgTkVPTiByb3V0aW5lIGlmIHdlIG5lZWQgaXQKKytwb2x5MTMwNS1hZmxhZ3MtJChDT05GSUdfQ1BVX1Y3KSA6PSAtVV9fTElOVVhfQVJNX0FSQ0hfXyAtRF9fTElOVVhfQVJNX0FSQ0hfXz01CisrcG9seTEzMDUtYWZsYWdzLSQoQ09ORklHX0tFUk5FTF9NT0RFX05FT04pIDo9IC1VX19MSU5VWF9BUk1fQVJDSF9fIC1EX19MSU5VWF9BUk1fQVJDSF9fPTcKKytBRkxBR1NfcG9seTEzMDUtY29yZS5vICs9ICQocG9seTEzMDUtYWZsYWdzLXkpCistLS0gL2Rldi9udWxsCisrKysgYi9hcmNoL2FybS9jcnlwdG8vcG9seTEzMDUtYXJtdjQucGwKK0BAIC0wLDAgKzEsMTIzNiBAQAorKyMhL3Vzci9iaW4vZW52IHBlcmwKKysjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMS4wKyBPUiBCU0QtMy1DbGF1c2UKKysjCisrIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyMgV3JpdHRlbiBieSBBbmR5IFBvbHlha292LCBAZG90LWFzbSwgaW5pdGlhbGx5IGZvciB0aGUgT3BlblNTTAorKyMgcHJvamVjdC4KKysjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrIworKyMJCQlJQUxVKCopL2djYy00LjQJCU5FT04KKysjCisrIyBBUk0xMXh4KEFSTXY2KQk3Ljc4LysxMDAlCQktCisrIyBDb3J0ZXgtQTUJCTYuMzUvKzEzMCUJCTMuMDAKKysjIENvcnRleC1BOAkJNi4yNS8rMTE1JQkJMi4zNgorKyMgQ29ydGV4LUE5CQk1LjEwLys5NSUJCTIuNTUKKysjIENvcnRleC1BMTUJCTMuODUvKzg1JQkJMS4yNSgqKikKKysjIFNuYXBkcmFnb24gUzQJCTUuNzAvKzEwMCUJCTEuNDgoKiopCisrIworKyMgKCopCXRoaXMgaXMgZm9yIC1tYXJjaD1hcm12NiwgaS5lLiB3aXRoIGJ1bmNoIG9mIGxkcmIgbG9hZGluZyBkYXRhOworKyMgKCoqKQl0aGVzZSBhcmUgdHJhZGUtb2ZmIHJlc3VsdHMsIHRoZXkgY2FuIGJlIGltcHJvdmVkIGJ5IH44JSBidXQgYXQKKysjCXRoZSBjb3N0IG9mIDE1LzEyJSByZWdyZXNzaW9uIG9uIENvcnRleC1BNS9BNywgaXQncyBldmVuIHBvc3NpYmxlCisrIwl0byBpbXByb3ZlIENvcnRleC1BOSByZXN1bHQsIGJ1dCB0aGVuIEE1L0E3IGxvb3NlIG1vcmUgdGhhbiAyMCU7CisrCisrJGZsYXZvdXIgPSBzaGlmdDsKKytpZiAoJGZsYXZvdXI9fi9cd1tcd1wtXSpcLlx3KyQvKSB7ICRvdXRwdXQ9JGZsYXZvdXI7IHVuZGVmICRmbGF2b3VyOyB9CisrZWxzZSB7IHdoaWxlICgoJG91dHB1dD1zaGlmdCkgJiYgKCRvdXRwdXQhfi9cd1tcd1wtXSpcLlx3KyQvKSkge30gfQorKworK2lmICgkZmxhdm91ciAmJiAkZmxhdm91ciBuZSAidm9pZCIpIHsKKysgICAgJDAgPX4gbS8oLipbXC9cXF0pW15cL1xcXSskLzsgJGRpcj0kMTsKKysgICAgKCAkeGxhdGU9IiR7ZGlyfWFybS14bGF0ZS5wbCIgYW5kIC1mICR4bGF0ZSApIG9yCisrICAgICggJHhsYXRlPSIke2Rpcn0uLi8uLi9wZXJsYXNtL2FybS14bGF0ZS5wbCIgYW5kIC1mICR4bGF0ZSkgb3IKKysgICAgZGllICJjYW4ndCBsb2NhdGUgYXJtLXhsYXRlLnBsIjsKKysKKysgICAgb3BlbiBTVERPVVQsInwgXCIkXlhcIiAkeGxhdGUgJGZsYXZvdXIgJG91dHB1dCI7CisrfSBlbHNlIHsKKysgICAgb3BlbiBTVERPVVQsIj4kb3V0cHV0IjsKKyt9CisrCisrKCRjdHgsJGlucCwkbGVuLCRwYWRiaXQpPW1hcCgiciRfIiwoMC4uMykpOworKworKyRjb2RlLj08PF9fXzsKKysjaWZuZGVmCV9fS0VSTkVMX18KKysjIGluY2x1ZGUgImFybV9hcmNoLmgiCisrI2Vsc2UKKysjIGRlZmluZSBfX0FSTV9BUkNIX18gX19MSU5VWF9BUk1fQVJDSF9fCisrIyBkZWZpbmUgX19BUk1fTUFYX0FSQ0hfXyBfX0xJTlVYX0FSTV9BUkNIX18KKysjIGRlZmluZSBwb2x5MTMwNV9pbml0ICAgcG9seTEzMDVfaW5pdF9hcm0KKysjIGRlZmluZSBwb2x5MTMwNV9ibG9ja3MgcG9seTEzMDVfYmxvY2tzX2FybQorKyMgZGVmaW5lIHBvbHkxMzA1X2VtaXQgICBwb2x5MTMwNV9lbWl0X2FybQorKy5nbG9ibAlwb2x5MTMwNV9ibG9ja3NfbmVvbgorKyNlbmRpZgorKworKyNpZiBkZWZpbmVkKF9fdGh1bWIyX18pCisrLnN5bnRheAl1bmlmaWVkCisrLnRodW1iCisrI2Vsc2UKKysuY29kZQkzMgorKyNlbmRpZgorKworKy50ZXh0CisrCisrLmdsb2JsCXBvbHkxMzA1X2VtaXQKKysuZ2xvYmwJcG9seTEzMDVfYmxvY2tzCisrLmdsb2JsCXBvbHkxMzA1X2luaXQKKysudHlwZQlwb2x5MTMwNV9pbml0LCVmdW5jdGlvbgorKy5hbGlnbgk1CisrcG9seTEzMDVfaW5pdDoKKysuTHBvbHkxMzA1X2luaXQ6CisrCXN0bWRiCXNwISx7cjQtcjExfQorKworKwllb3IJcjMscjMscjMKKysJY21wCSRpbnAsIzAKKysJc3RyCXIzLFskY3R4LCMwXQkJQCB6ZXJvIGhhc2ggdmFsdWUKKysJc3RyCXIzLFskY3R4LCM0XQorKwlzdHIJcjMsWyRjdHgsIzhdCisrCXN0cglyMyxbJGN0eCwjMTJdCisrCXN0cglyMyxbJGN0eCwjMTZdCisrCXN0cglyMyxbJGN0eCwjMzZdCQlAIGNsZWFyIGlzX2Jhc2UyXzI2CisrCWFkZAkkY3R4LCRjdHgsIzIwCisrCisrI2lmZGVmCV9fdGh1bWIyX18KKysJaXQJZXEKKysjZW5kaWYKKysJbW92ZXEJcjAsIzAKKysJYmVxCS5Mbm9fa2V5CisrCisrI2lmCV9fQVJNX01BWF9BUkNIX18+PTcKKysJbW92CXIzLCMtMQorKwlzdHIJcjMsWyRjdHgsIzI4XQkJQCBpbXBvc3NpYmxlIGtleSBwb3dlciB2YWx1ZQorKyMgaWZuZGVmIF9fS0VSTkVMX18KKysJYWRyCXIxMSwuTHBvbHkxMzA1X2luaXQKKysJbGRyCXIxMiwuTE9QRU5TU0xfYXJtY2FwCisrIyBlbmRpZgorKyNlbmRpZgorKwlsZHJiCXI0LFskaW5wLCMwXQorKwltb3YJcjEwLCMweDBmZmZmZmZmCisrCWxkcmIJcjUsWyRpbnAsIzFdCisrCWFuZAlyMyxyMTAsIy00CQlAIDB4MGZmZmZmZmMKKysJbGRyYglyNixbJGlucCwjMl0KKysJbGRyYglyNyxbJGlucCwjM10KKysJb3JyCXI0LHI0LHI1LGxzbCM4CisrCWxkcmIJcjUsWyRpbnAsIzRdCisrCW9ycglyNCxyNCxyNixsc2wjMTYKKysJbGRyYglyNixbJGlucCwjNV0KKysJb3JyCXI0LHI0LHI3LGxzbCMyNAorKwlsZHJiCXI3LFskaW5wLCM2XQorKwlhbmQJcjQscjQscjEwCisrCisrI2lmCV9fQVJNX01BWF9BUkNIX18+PTcgJiYgIWRlZmluZWQoX19LRVJORUxfXykKKysjIGlmICFkZWZpbmVkKF9XSU4zMikKKysJbGRyCXIxMixbcjExLHIxMl0JCUAgT1BFTlNTTF9hcm1jYXBfUAorKyMgZW5kaWYKKysjIGlmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9XSU4zMikKKysJbGRyCXIxMixbcjEyXQorKyMgZW5kaWYKKysjZW5kaWYKKysJbGRyYglyOCxbJGlucCwjN10KKysJb3JyCXI1LHI1LHI2LGxzbCM4CisrCWxkcmIJcjYsWyRpbnAsIzhdCisrCW9ycglyNSxyNSxyNyxsc2wjMTYKKysJbGRyYglyNyxbJGlucCwjOV0KKysJb3JyCXI1LHI1LHI4LGxzbCMyNAorKwlsZHJiCXI4LFskaW5wLCMxMF0KKysJYW5kCXI1LHI1LHIzCisrCisrI2lmCV9fQVJNX01BWF9BUkNIX18+PTcgJiYgIWRlZmluZWQoX19LRVJORUxfXykKKysJdHN0CXIxMiwjQVJNVjdfTkVPTgkJQCBjaGVjayBmb3IgTkVPTgorKyMgaWZkZWYJX190aHVtYjJfXworKwlhZHIJcjksLkxwb2x5MTMwNV9ibG9ja3NfbmVvbgorKwlhZHIJcjExLC5McG9seTEzMDVfYmxvY2tzCisrCWl0CW5lCisrCW1vdm5lCXIxMSxyOQorKwlhZHIJcjEyLC5McG9seTEzMDVfZW1pdAorKwlvcnIJcjExLHIxMSwjMQkJQCB0aHVtYi1pZnkgYWRkcmVzc2VzCisrCW9ycglyMTIscjEyLCMxCisrIyBlbHNlCisrCWFkZAlyMTIscjExLCMoLkxwb2x5MTMwNV9lbWl0LS5McG9seTEzMDVfaW5pdCkKKysJaXRlCWVxCisrCWFkZGVxCXIxMSxyMTEsIyguTHBvbHkxMzA1X2Jsb2Nrcy0uTHBvbHkxMzA1X2luaXQpCisrCWFkZG5lCXIxMSxyMTEsIyguTHBvbHkxMzA1X2Jsb2Nrc19uZW9uLS5McG9seTEzMDVfaW5pdCkKKysjIGVuZGlmCisrI2VuZGlmCisrCWxkcmIJcjksWyRpbnAsIzExXQorKwlvcnIJcjYscjYscjcsbHNsIzgKKysJbGRyYglyNyxbJGlucCwjMTJdCisrCW9ycglyNixyNixyOCxsc2wjMTYKKysJbGRyYglyOCxbJGlucCwjMTNdCisrCW9ycglyNixyNixyOSxsc2wjMjQKKysJbGRyYglyOSxbJGlucCwjMTRdCisrCWFuZAlyNixyNixyMworKworKwlsZHJiCXIxMCxbJGlucCwjMTVdCisrCW9ycglyNyxyNyxyOCxsc2wjOAorKwlzdHIJcjQsWyRjdHgsIzBdCisrCW9ycglyNyxyNyxyOSxsc2wjMTYKKysJc3RyCXI1LFskY3R4LCM0XQorKwlvcnIJcjcscjcscjEwLGxzbCMyNAorKwlzdHIJcjYsWyRjdHgsIzhdCisrCWFuZAlyNyxyNyxyMworKwlzdHIJcjcsWyRjdHgsIzEyXQorKyNpZglfX0FSTV9NQVhfQVJDSF9fPj03ICYmICFkZWZpbmVkKF9fS0VSTkVMX18pCisrCXN0bWlhCXIyLHtyMTEscjEyfQkJQCBmaWxsIGZ1bmN0aW9ucyB0YWJsZQorKwltb3YJcjAsIzEKKysjZWxzZQorKwltb3YJcjAsIzAKKysjZW5kaWYKKysuTG5vX2tleToKKysJbGRtaWEJc3AhLHtyNC1yMTF9CisrI2lmCV9fQVJNX0FSQ0hfXz49NQorKwlyZXQJCQkJQCBieAlscgorKyNlbHNlCisrCXRzdAlsciwjMQorKwltb3ZlcQlwYyxscgkJCUAgYmUgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBWNCwgeWV0CisrCWJ4CWxyCQkJQCBpbnRlcm9wZXJhYmxlIHdpdGggVGh1bWIgSVNBOi0pCisrI2VuZGlmCisrLnNpemUJcG9seTEzMDVfaW5pdCwuLXBvbHkxMzA1X2luaXQKKytfX18KKyt7CisrbXkgKCRoMCwkaDEsJGgyLCRoMywkaDQsJHIwLCRyMSwkcjIsJHIzKT1tYXAoInIkXyIsKDQuLjEyKSk7CisrbXkgKCRzMSwkczIsJHMzKT0oJHIxLCRyMiwkcjMpOworKworKyRjb2RlLj08PF9fXzsKKysudHlwZQlwb2x5MTMwNV9ibG9ja3MsJWZ1bmN0aW9uCisrLmFsaWduCTUKKytwb2x5MTMwNV9ibG9ja3M6CisrLkxwb2x5MTMwNV9ibG9ja3M6CisrCXN0bWRiCXNwISx7cjMtcjExLGxyfQorKworKwlhbmRzCSRsZW4sJGxlbiwjLTE2CisrCWJlcQkuTG5vX2RhdGEKKysKKysJYWRkCSRsZW4sJGxlbiwkaW5wCQlAIGVuZCBwb2ludGVyCisrCXN1YglzcCxzcCwjMzIKKysKKysjaWYgX19BUk1fQVJDSF9fPDcKKysJbGRtaWEJJGN0eCx7JGgwLSRyM30JCUAgbG9hZCBjb250ZXh0CisrCWFkZAkkY3R4LCRjdHgsIzIwCisrCXN0cgkkbGVuLFtzcCwjMTZdCQlAIG9mZmxvYWQgc3R1ZmYKKysJc3RyCSRjdHgsW3NwLCMxMl0KKysjZWxzZQorKwlsZHIJbHIsWyRjdHgsIzM2XQkJQCBpc19iYXNlMl8yNgorKwlsZG1pYQkkY3R4ISx7JGgwLSRoNH0JCUAgbG9hZCBoYXNoIHZhbHVlCisrCXN0cgkkbGVuLFtzcCwjMTZdCQlAIG9mZmxvYWQgc3R1ZmYKKysJc3RyCSRjdHgsW3NwLCMxMl0KKysKKysJYWRkcwkkcjAsJGgwLCRoMSxsc2wjMjYJQCBiYXNlIDJeMjYgLT4gYmFzZSAyXjMyCisrCW1vdgkkcjEsJGgxLGxzciM2CisrCWFkY3MJJHIxLCRyMSwkaDIsbHNsIzIwCisrCW1vdgkkcjIsJGgyLGxzciMxMgorKwlhZGNzCSRyMiwkcjIsJGgzLGxzbCMxNAorKwltb3YJJHIzLCRoMyxsc3IjMTgKKysJYWRjcwkkcjMsJHIzLCRoNCxsc2wjOAorKwltb3YJJGxlbiwjMAorKwl0ZXEJbHIsIzAKKysJc3RyCSRsZW4sWyRjdHgsIzE2XQkJQCBjbGVhciBpc19iYXNlMl8yNgorKwlhZGMJJGxlbiwkbGVuLCRoNCxsc3IjMjQKKysKKysJaXR0dHQJbmUKKysJbW92bmUJJGgwLCRyMAkJCUAgY2hvb3NlIGJldHdlZW4gcmFkaXhlcworKwltb3ZuZQkkaDEsJHIxCisrCW1vdm5lCSRoMiwkcjIKKysJbW92bmUJJGgzLCRyMworKwlsZG1pYQkkY3R4LHskcjAtJHIzfQkJQCBsb2FkIGtleQorKwlpdAluZQorKwltb3ZuZQkkaDQsJGxlbgorKyNlbmRpZgorKworKwltb3YJbHIsJGlucAorKwljbXAJJHBhZGJpdCwjMAorKwlzdHIJJHIxLFtzcCwjMjBdCisrCXN0cgkkcjIsW3NwLCMyNF0KKysJc3RyCSRyMyxbc3AsIzI4XQorKwliCS5Mb29wCisrCisrLmFsaWduCTQKKysuTG9vcDoKKysjaWYgX19BUk1fQVJDSF9fPDcKKysJbGRyYglyMCxbbHJdLCMxNgkJQCBsb2FkIGlucHV0CisrIyBpZmRlZglfX3RodW1iMl9fCisrCWl0CWhpCisrIyBlbmRpZgorKwlhZGRoaQkkaDQsJGg0LCMxCQlAIDE8PDEyOAorKwlsZHJiCXIxLFtsciwjLTE1XQorKwlsZHJiCXIyLFtsciwjLTE0XQorKwlsZHJiCXIzLFtsciwjLTEzXQorKwlvcnIJcjEscjAscjEsbHNsIzgKKysJbGRyYglyMCxbbHIsIy0xMl0KKysJb3JyCXIyLHIxLHIyLGxzbCMxNgorKwlsZHJiCXIxLFtsciwjLTExXQorKwlvcnIJcjMscjIscjMsbHNsIzI0CisrCWxkcmIJcjIsW2xyLCMtMTBdCisrCWFkZHMJJGgwLCRoMCxyMwkJQCBhY2N1bXVsYXRlIGlucHV0CisrCisrCWxkcmIJcjMsW2xyLCMtOV0KKysJb3JyCXIxLHIwLHIxLGxzbCM4CisrCWxkcmIJcjAsW2xyLCMtOF0KKysJb3JyCXIyLHIxLHIyLGxzbCMxNgorKwlsZHJiCXIxLFtsciwjLTddCisrCW9ycglyMyxyMixyMyxsc2wjMjQKKysJbGRyYglyMixbbHIsIy02XQorKwlhZGNzCSRoMSwkaDEscjMKKysKKysJbGRyYglyMyxbbHIsIy01XQorKwlvcnIJcjEscjAscjEsbHNsIzgKKysJbGRyYglyMCxbbHIsIy00XQorKwlvcnIJcjIscjEscjIsbHNsIzE2CisrCWxkcmIJcjEsW2xyLCMtM10KKysJb3JyCXIzLHIyLHIzLGxzbCMyNAorKwlsZHJiCXIyLFtsciwjLTJdCisrCWFkY3MJJGgyLCRoMixyMworKworKwlsZHJiCXIzLFtsciwjLTFdCisrCW9ycglyMSxyMCxyMSxsc2wjOAorKwlzdHIJbHIsW3NwLCM4XQkJQCBvZmZsb2FkIGlucHV0IHBvaW50ZXIKKysJb3JyCXIyLHIxLHIyLGxzbCMxNgorKwlhZGQJJHMxLCRyMSwkcjEsbHNyIzIKKysJb3JyCXIzLHIyLHIzLGxzbCMyNAorKyNlbHNlCisrCWxkcglyMCxbbHJdLCMxNgkJQCBsb2FkIGlucHV0CisrCWl0CWhpCisrCWFkZGhpCSRoNCwkaDQsIzEJCUAgcGFkYml0CisrCWxkcglyMSxbbHIsIy0xMl0KKysJbGRyCXIyLFtsciwjLThdCisrCWxkcglyMyxbbHIsIy00XQorKyMgaWZkZWYJX19BUk1FQl9fCisrCXJldglyMCxyMAorKwlyZXYJcjEscjEKKysJcmV2CXIyLHIyCisrCXJldglyMyxyMworKyMgZW5kaWYKKysJYWRkcwkkaDAsJGgwLHIwCQlAIGFjY3VtdWxhdGUgaW5wdXQKKysJc3RyCWxyLFtzcCwjOF0JCUAgb2ZmbG9hZCBpbnB1dCBwb2ludGVyCisrCWFkY3MJJGgxLCRoMSxyMQorKwlhZGQJJHMxLCRyMSwkcjEsbHNyIzIKKysJYWRjcwkkaDIsJGgyLHIyCisrI2VuZGlmCisrCWFkZAkkczIsJHIyLCRyMixsc3IjMgorKwlhZGNzCSRoMywkaDMscjMKKysJYWRkCSRzMywkcjMsJHIzLGxzciMyCisrCisrCXVtdWxsCXIyLHIzLCRoMSwkcjAKKysJIGFkYwkkaDQsJGg0LCMwCisrCXVtdWxsCXIwLHIxLCRoMCwkcjAKKysJdW1sYWwJcjIscjMsJGg0LCRzMQorKwl1bWxhbAlyMCxyMSwkaDMsJHMxCisrCWxkcgkkcjEsW3NwLCMyMF0JCUAgcmVsb2FkICRyMQorKwl1bWxhbAlyMixyMywkaDIsJHMzCisrCXVtbGFsCXIwLHIxLCRoMSwkczMKKysJdW1sYWwJcjIscjMsJGgzLCRzMgorKwl1bWxhbAlyMCxyMSwkaDIsJHMyCisrCXVtbGFsCXIyLHIzLCRoMCwkcjEKKysJc3RyCXIwLFtzcCwjMF0JCUAgZnV0dXJlICRoMAorKwkgbXVsCXIwLCRzMiwkaDQKKysJbGRyCSRyMixbc3AsIzI0XQkJQCByZWxvYWQgJHIyCisrCWFkZHMJcjIscjIscjEJCUAgZDErPWQwPj4zMgorKwkgZW9yCXIxLHIxLHIxCisrCWFkYwlscixyMywjMAkJQCBmdXR1cmUgJGgyCisrCXN0cglyMixbc3AsIzRdCQlAIGZ1dHVyZSAkaDEKKysKKysJbXVsCXIyLCRzMywkaDQKKysJZW9yCXIzLHIzLHIzCisrCXVtbGFsCXIwLHIxLCRoMywkczMKKysJbGRyCSRyMyxbc3AsIzI4XQkJQCByZWxvYWQgJHIzCisrCXVtbGFsCXIyLHIzLCRoMywkcjAKKysJdW1sYWwJcjAscjEsJGgyLCRyMAorKwl1bWxhbAlyMixyMywkaDIsJHIxCisrCXVtbGFsCXIwLHIxLCRoMSwkcjEKKysJdW1sYWwJcjIscjMsJGgxLCRyMgorKwl1bWxhbAlyMCxyMSwkaDAsJHIyCisrCXVtbGFsCXIyLHIzLCRoMCwkcjMKKysJbGRyCSRoMCxbc3AsIzBdCisrCW11bAkkaDQsJHIwLCRoNAorKwlsZHIJJGgxLFtzcCwjNF0KKysKKysJYWRkcwkkaDIsbHIscjAJCUAgZDIrPWQxPj4zMgorKwlsZHIJbHIsW3NwLCM4XQkJQCByZWxvYWQgaW5wdXQgcG9pbnRlcgorKwlhZGMJcjEscjEsIzAKKysJYWRkcwkkaDMscjIscjEJCUAgZDMrPWQyPj4zMgorKwlsZHIJcjAsW3NwLCMxNl0JCUAgcmVsb2FkIGVuZCBwb2ludGVyCisrCWFkYwlyMyxyMywjMAorKwlhZGQJJGg0LCRoNCxyMwkJQCBoNCs9ZDM+PjMyCisrCisrCWFuZAlyMSwkaDQsIy00CisrCWFuZAkkaDQsJGg0LCMzCisrCWFkZAlyMSxyMSxyMSxsc3IjMgkJQCAqPTUKKysJYWRkcwkkaDAsJGgwLHIxCisrCWFkY3MJJGgxLCRoMSwjMAorKwlhZGNzCSRoMiwkaDIsIzAKKysJYWRjcwkkaDMsJGgzLCMwCisrCWFkYwkkaDQsJGg0LCMwCisrCisrCWNtcAlyMCxscgkJCUAgZG9uZSB5ZXQ/CisrCWJoaQkuTG9vcAorKworKwlsZHIJJGN0eCxbc3AsIzEyXQorKwlhZGQJc3Asc3AsIzMyCisrCXN0bWRiCSRjdHgseyRoMC0kaDR9CQlAIHN0b3JlIHRoZSByZXN1bHQKKysKKysuTG5vX2RhdGE6CisrI2lmCV9fQVJNX0FSQ0hfXz49NQorKwlsZG1pYQlzcCEse3IzLXIxMSxwY30KKysjZWxzZQorKwlsZG1pYQlzcCEse3IzLXIxMSxscn0KKysJdHN0CWxyLCMxCisrCW1vdmVxCXBjLGxyCQkJQCBiZSBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIFY0LCB5ZXQKKysJYngJbHIJCQlAIGludGVyb3BlcmFibGUgd2l0aCBUaHVtYiBJU0E6LSkKKysjZW5kaWYKKysuc2l6ZQlwb2x5MTMwNV9ibG9ja3MsLi1wb2x5MTMwNV9ibG9ja3MKKytfX18KKyt9CisreworK215ICgkY3R4LCRtYWMsJG5vbmNlKT1tYXAoInIkXyIsKDAuLjIpKTsKKytteSAoJGgwLCRoMSwkaDIsJGgzLCRoNCwkZzAsJGcxLCRnMiwkZzMpPW1hcCgiciRfIiwoMy4uMTEpKTsKKytteSAkZzQ9JGN0eDsKKysKKyskY29kZS49PDxfX187CisrLnR5cGUJcG9seTEzMDVfZW1pdCwlZnVuY3Rpb24KKysuYWxpZ24JNQorK3BvbHkxMzA1X2VtaXQ6CisrLkxwb2x5MTMwNV9lbWl0OgorKwlzdG1kYglzcCEse3I0LXIxMX0KKysKKysJbGRtaWEJJGN0eCx7JGgwLSRoNH0KKysKKysjaWYgX19BUk1fQVJDSF9fPj03CisrCWxkcglpcCxbJGN0eCwjMzZdCQlAIGlzX2Jhc2UyXzI2CisrCisrCWFkZHMJJGcwLCRoMCwkaDEsbHNsIzI2CUAgYmFzZSAyXjI2IC0+IGJhc2UgMl4zMgorKwltb3YJJGcxLCRoMSxsc3IjNgorKwlhZGNzCSRnMSwkZzEsJGgyLGxzbCMyMAorKwltb3YJJGcyLCRoMixsc3IjMTIKKysJYWRjcwkkZzIsJGcyLCRoMyxsc2wjMTQKKysJbW92CSRnMywkaDMsbHNyIzE4CisrCWFkY3MJJGczLCRnMywkaDQsbHNsIzgKKysJbW92CSRnNCwjMAorKwlhZGMJJGc0LCRnNCwkaDQsbHNyIzI0CisrCisrCXRzdAlpcCxpcAorKwlpdHR0dAluZQorKwltb3ZuZQkkaDAsJGcwCisrCW1vdm5lCSRoMSwkZzEKKysJbW92bmUJJGgyLCRnMgorKwltb3ZuZQkkaDMsJGczCisrCWl0CW5lCisrCW1vdm5lCSRoNCwkZzQKKysjZW5kaWYKKysKKysJYWRkcwkkZzAsJGgwLCM1CQlAIGNvbXBhcmUgdG8gbW9kdWx1cworKwlhZGNzCSRnMSwkaDEsIzAKKysJYWRjcwkkZzIsJGgyLCMwCisrCWFkY3MJJGczLCRoMywjMAorKwlhZGMJJGc0LCRoNCwjMAorKwl0c3QJJGc0LCM0CQkJQCBkaWQgaXQgY2FycnkvYm9ycm93PworKworKyNpZmRlZglfX3RodW1iMl9fCisrCWl0CW5lCisrI2VuZGlmCisrCW1vdm5lCSRoMCwkZzAKKysJbGRyCSRnMCxbJG5vbmNlLCMwXQorKyNpZmRlZglfX3RodW1iMl9fCisrCWl0CW5lCisrI2VuZGlmCisrCW1vdm5lCSRoMSwkZzEKKysJbGRyCSRnMSxbJG5vbmNlLCM0XQorKyNpZmRlZglfX3RodW1iMl9fCisrCWl0CW5lCisrI2VuZGlmCisrCW1vdm5lCSRoMiwkZzIKKysJbGRyCSRnMixbJG5vbmNlLCM4XQorKyNpZmRlZglfX3RodW1iMl9fCisrCWl0CW5lCisrI2VuZGlmCisrCW1vdm5lCSRoMywkZzMKKysJbGRyCSRnMyxbJG5vbmNlLCMxMl0KKysKKysJYWRkcwkkaDAsJGgwLCRnMAorKwlhZGNzCSRoMSwkaDEsJGcxCisrCWFkY3MJJGgyLCRoMiwkZzIKKysJYWRjCSRoMywkaDMsJGczCisrCisrI2lmIF9fQVJNX0FSQ0hfXz49NworKyMgaWZkZWYgX19BUk1FQl9fCisrCXJldgkkaDAsJGgwCisrCXJldgkkaDEsJGgxCisrCXJldgkkaDIsJGgyCisrCXJldgkkaDMsJGgzCisrIyBlbmRpZgorKwlzdHIJJGgwLFskbWFjLCMwXQorKwlzdHIJJGgxLFskbWFjLCM0XQorKwlzdHIJJGgyLFskbWFjLCM4XQorKwlzdHIJJGgzLFskbWFjLCMxMl0KKysjZWxzZQorKwlzdHJiCSRoMCxbJG1hYywjMF0KKysJbW92CSRoMCwkaDAsbHNyIzgKKysJc3RyYgkkaDEsWyRtYWMsIzRdCisrCW1vdgkkaDEsJGgxLGxzciM4CisrCXN0cmIJJGgyLFskbWFjLCM4XQorKwltb3YJJGgyLCRoMixsc3IjOAorKwlzdHJiCSRoMyxbJG1hYywjMTJdCisrCW1vdgkkaDMsJGgzLGxzciM4CisrCisrCXN0cmIJJGgwLFskbWFjLCMxXQorKwltb3YJJGgwLCRoMCxsc3IjOAorKwlzdHJiCSRoMSxbJG1hYywjNV0KKysJbW92CSRoMSwkaDEsbHNyIzgKKysJc3RyYgkkaDIsWyRtYWMsIzldCisrCW1vdgkkaDIsJGgyLGxzciM4CisrCXN0cmIJJGgzLFskbWFjLCMxM10KKysJbW92CSRoMywkaDMsbHNyIzgKKysKKysJc3RyYgkkaDAsWyRtYWMsIzJdCisrCW1vdgkkaDAsJGgwLGxzciM4CisrCXN0cmIJJGgxLFskbWFjLCM2XQorKwltb3YJJGgxLCRoMSxsc3IjOAorKwlzdHJiCSRoMixbJG1hYywjMTBdCisrCW1vdgkkaDIsJGgyLGxzciM4CisrCXN0cmIJJGgzLFskbWFjLCMxNF0KKysJbW92CSRoMywkaDMsbHNyIzgKKysKKysJc3RyYgkkaDAsWyRtYWMsIzNdCisrCXN0cmIJJGgxLFskbWFjLCM3XQorKwlzdHJiCSRoMixbJG1hYywjMTFdCisrCXN0cmIJJGgzLFskbWFjLCMxNV0KKysjZW5kaWYKKysJbGRtaWEJc3AhLHtyNC1yMTF9CisrI2lmCV9fQVJNX0FSQ0hfXz49NQorKwlyZXQJCQkJQCBieAlscgorKyNlbHNlCisrCXRzdAlsciwjMQorKwltb3ZlcQlwYyxscgkJCUAgYmUgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBWNCwgeWV0CisrCWJ4CWxyCQkJQCBpbnRlcm9wZXJhYmxlIHdpdGggVGh1bWIgSVNBOi0pCisrI2VuZGlmCisrLnNpemUJcG9seTEzMDVfZW1pdCwuLXBvbHkxMzA1X2VtaXQKKytfX18KKyt7CisrbXkgKCRSMCwkUjEsJFMxLCRSMiwkUzIsJFIzLCRTMywkUjQsJFM0KSA9IG1hcCgiZCRfIiwoMC4uOSkpOworK215ICgkRDAsJEQxLCREMiwkRDMsJEQ0LCAkSDAsJEgxLCRIMiwkSDMsJEg0KSA9IG1hcCgicSRfIiwoNS4uMTQpKTsKKytteSAoJFQwLCRUMSwkTUFTSykgPSBtYXAoInEkXyIsKDE1LDQsMCkpOworKworK215ICgkaW4yLCR6ZXJvcywkdGJsMCwkdGJsMSkgPSBtYXAoInIkXyIsKDQuLjcpKTsKKysKKyskY29kZS49PDxfX187CisrI2lmCV9fQVJNX01BWF9BUkNIX18+PTcKKysuZnB1CW5lb24KKysKKysudHlwZQlwb2x5MTMwNV9pbml0X25lb24sJWZ1bmN0aW9uCisrLmFsaWduCTUKKytwb2x5MTMwNV9pbml0X25lb246CisrLkxwb2x5MTMwNV9pbml0X25lb246CisrCWxkcglyMyxbJGN0eCwjNDhdCQlAIGZpcnN0IHRhYmxlIGVsZW1lbnQKKysJY21wCXIzLCMtMQkJCUAgaXMgdmFsdWUgaW1wb3NzaWJsZT8KKysJYm5lCS5Mbm9faW5pdF9uZW9uCisrCisrCWxkcglyNCxbJGN0eCwjMjBdCQlAIGxvYWQga2V5IGJhc2UgMl4zMgorKwlsZHIJcjUsWyRjdHgsIzI0XQorKwlsZHIJcjYsWyRjdHgsIzI4XQorKwlsZHIJcjcsWyRjdHgsIzMyXQorKworKwlhbmQJcjIscjQsIzB4MDNmZmZmZmYJQCBiYXNlIDJeMzIgLT4gYmFzZSAyXjI2CisrCW1vdglyMyxyNCxsc3IjMjYKKysJbW92CXI0LHI1LGxzciMyMAorKwlvcnIJcjMscjMscjUsbHNsIzYKKysJbW92CXI1LHI2LGxzciMxNAorKwlvcnIJcjQscjQscjYsbHNsIzEyCisrCW1vdglyNixyNyxsc3IjOAorKwlvcnIJcjUscjUscjcsbHNsIzE4CisrCWFuZAlyMyxyMywjMHgwM2ZmZmZmZgorKwlhbmQJcjQscjQsIzB4MDNmZmZmZmYKKysJYW5kCXI1LHI1LCMweDAzZmZmZmZmCisrCisrCXZkdXAuMzIJJFIwLHIyCQkJQCByXjEgaW4gYm90aCBsYW5lcworKwlhZGQJcjIscjMscjMsbHNsIzIJCUAgKjUKKysJdmR1cC4zMgkkUjEscjMKKysJYWRkCXIzLHI0LHI0LGxzbCMyCisrCXZkdXAuMzIJJFMxLHIyCisrCXZkdXAuMzIJJFIyLHI0CisrCWFkZAlyNCxyNSxyNSxsc2wjMgorKwl2ZHVwLjMyCSRTMixyMworKwl2ZHVwLjMyCSRSMyxyNQorKwlhZGQJcjUscjYscjYsbHNsIzIKKysJdmR1cC4zMgkkUzMscjQKKysJdmR1cC4zMgkkUjQscjYKKysJdmR1cC4zMgkkUzQscjUKKysKKysJbW92CSR6ZXJvcywjMgkJQCBjb3VudGVyCisrCisrLkxzcXVhcmVfbmVvbjoKKysJQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAorKwlAIGQwID0gaDAqcjAgKyBoNCo1KnIxICsgaDMqNSpyMiArIGgyKjUqcjMgKyBoMSo1KnI0CisrCUAgZDEgPSBoMSpyMCArIGgwKnIxICAgKyBoNCo1KnIyICsgaDMqNSpyMyArIGgyKjUqcjQKKysJQCBkMiA9IGgyKnIwICsgaDEqcjEgICArIGgwKnIyICAgKyBoNCo1KnIzICsgaDMqNSpyNAorKwlAIGQzID0gaDMqcjAgKyBoMipyMSAgICsgaDEqcjIgICArIGgwKnIzICAgKyBoNCo1KnI0CisrCUAgZDQgPSBoNCpyMCArIGgzKnIxICAgKyBoMipyMiAgICsgaDEqcjMgICArIGgwKnI0CisrCisrCXZtdWxsLnUzMgkkRDAsJFIwLCR7UjB9WzFdCisrCXZtdWxsLnUzMgkkRDEsJFIxLCR7UjB9WzFdCisrCXZtdWxsLnUzMgkkRDIsJFIyLCR7UjB9WzFdCisrCXZtdWxsLnUzMgkkRDMsJFIzLCR7UjB9WzFdCisrCXZtdWxsLnUzMgkkRDQsJFI0LCR7UjB9WzFdCisrCisrCXZtbGFsLnUzMgkkRDAsJFI0LCR7UzF9WzFdCisrCXZtbGFsLnUzMgkkRDEsJFIwLCR7UjF9WzFdCisrCXZtbGFsLnUzMgkkRDIsJFIxLCR7UjF9WzFdCisrCXZtbGFsLnUzMgkkRDMsJFIyLCR7UjF9WzFdCisrCXZtbGFsLnUzMgkkRDQsJFIzLCR7UjF9WzFdCisrCisrCXZtbGFsLnUzMgkkRDAsJFIzLCR7UzJ9WzFdCisrCXZtbGFsLnUzMgkkRDEsJFI0LCR7UzJ9WzFdCisrCXZtbGFsLnUzMgkkRDMsJFIxLCR7UjJ9WzFdCisrCXZtbGFsLnUzMgkkRDIsJFIwLCR7UjJ9WzFdCisrCXZtbGFsLnUzMgkkRDQsJFIyLCR7UjJ9WzFdCisrCisrCXZtbGFsLnUzMgkkRDAsJFIyLCR7UzN9WzFdCisrCXZtbGFsLnUzMgkkRDMsJFIwLCR7UjN9WzFdCisrCXZtbGFsLnUzMgkkRDEsJFIzLCR7UzN9WzFdCisrCXZtbGFsLnUzMgkkRDIsJFI0LCR7UzN9WzFdCisrCXZtbGFsLnUzMgkkRDQsJFIxLCR7UjN9WzFdCisrCisrCXZtbGFsLnUzMgkkRDMsJFI0LCR7UzR9WzFdCisrCXZtbGFsLnUzMgkkRDAsJFIxLCR7UzR9WzFdCisrCXZtbGFsLnUzMgkkRDEsJFIyLCR7UzR9WzFdCisrCXZtbGFsLnUzMgkkRDIsJFIzLCR7UzR9WzFdCisrCXZtbGFsLnUzMgkkRDQsJFIwLCR7UjR9WzFdCisrCisrCUBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAKKysJQCBsYXp5IHJlZHVjdGlvbiBhcyBkaXNjdXNzZWQgaW4gIk5FT04gY3J5cHRvIiBieSBELkouIEJlcm5zdGVpbgorKwlAIGFuZCBQLiBTY2h3YWJlCisrCUAKKysJQCBIMD4+K0gxPj4rSDI+PitIMz4+K0g0CisrCUAgSDM+PitIND4+KjUrSDA+PitIMQorKwlACisrCUAgVHJpdmlhLgorKwlACisrCUAgUmVzdWx0IG9mIG11bHRpcGxpY2F0aW9uIG9mIG4tYml0IG51bWJlciBieSBtLWJpdCBudW1iZXIgaXMKKysJQCBuK20gYml0cyB3aWRlLiBIb3dldmVyISBFdmVuIHRob3VnaCAyXm4gaXMgYSBuKzEtYml0IG51bWJlciwKKysJQCBtLWJpdCBudW1iZXIgbXVsdGlwbGllZCBieSAyXm4gaXMgc3RpbGwgbittIGJpdHMgd2lkZS4KKysJQAorKwlAIFN1bSBvZiB0d28gbi1iaXQgbnVtYmVycyBpcyBuKzEgYml0cyB3aWRlLCBzdW0gb2YgdGhyZWUgLSBuKzIsCisrCUAgYW5kIHNvIGlzIHN1bSBvZiBmb3VyLiBTdW0gb2YgMl5tIG4tbS1iaXQgbnVtYmVycyBhbmQgbi1iaXQKKysJQCBvbmUgaXMgbisxIGJpdHMgd2lkZS4KKysJQAorKwlAID4+KyBkZW5vdGVzIEhuZXh0ICs9IEhuPj4yNiwgSG4gJj0gMHgzZmZmZmZmLiBUaGlzIG1lYW5zIHRoYXQKKysJQCBIMCwgSDIsIEgzIGFyZSBndWFyYW50ZWVkIHRvIGJlIDI2IGJpdHMgd2lkZSwgd2hpbGUgSDEgYW5kIEg0CisrCUAgY2FuIGJlIDI3LiBIb3dldmVyISBJbiBjYXNlcyB3aGVuIHRoZWlyIHdpZHRoIGV4Y2VlZHMgMjYgYml0cworKwlAIHRoZXkgYXJlIGxpbWl0ZWQgYnkgMl4yNisyXjYuIFRoaXMgaW4gdHVybiBtZWFucyB0aGF0ICpzdW0qCisrCUAgb2YgdGhlIHByb2R1Y3RzIHdpdGggdGhlc2UgdmFsdWVzIGNhbiBzdGlsbCBiZSB2aWV3ZWQgYXMgc3VtCisrCUAgb2YgNTItYml0IG51bWJlcnMgYXMgbG9uZyBhcyB0aGUgYW1vdW50IG9mIGFkZGVuZHMgaXMgbm90IGEKKysJQCBwb3dlciBvZiAyLiBGb3IgZXhhbXBsZSwKKysJQAorKwlAIEg0ID0gSDQqUjAgKyBIMypSMSArIEgyKlIyICsgSDEqUjMgKyBIMCAqIFI0LAorKwlACisrCUAgd2hpY2ggY2FuJ3QgYmUgbGFyZ2VyIHRoYW4gNSAqICgyXjI2ICsgMl42KSAqICgyXjI2ICsgMl42KSwgb3IKKysJQCA1ICogKDJeNTIgKyAyKjJeMzIgKyAyXjEyKSwgd2hpY2ggaW4gdHVybiBpcyBzbWFsbGVyIHRoYW4KKysJQCA4ICogKDJeNTIpIG9yIDJeNTUuIEhvd2V2ZXIsIHRoZSB2YWx1ZSBpcyB0aGVuIG11bHRpcGxpZWQgYnkKKysJQCBieSA1LCBzbyB3ZSBzaG91bGQgYmUgbG9va2luZyBhdCA1ICogNSAqICgyXjUyICsgMl4zMyArIDJeMTIpLAorKwlAIHdoaWNoIGlzIGxlc3MgdGhhbiAzMiAqICgyXjUyKSBvciAyXjU3LiBBbmQgd2hlbiBwcm9jZXNzaW5nCisrCUAgZGF0YSB3ZSBhcmUgbG9va2luZyBhdCB0cmlwbGUgYXMgbWFueSBhZGRlbmRzLi4uCisrCUAKKysJQCBJbiBrZXkgc2V0dXAgcHJvY2VkdXJlIHByZS1yZWR1Y2VkIEgwIGlzIGxpbWl0ZWQgYnkgNSo0KzEgYW5kCisrCUAgNSpINCAtIGJ5IDUqNSA1Mi1iaXQgYWRkZW5kcywgb3IgNTcgYml0cy4gQnV0IHdoZW4gaGFzaGluZyB0aGUKKysJQCBpbnB1dCBIMCBpcyBsaW1pdGVkIGJ5ICg1KjQrMSkqMyBhZGRlbmRzLCBvciA1OCBiaXRzLCB3aGlsZQorKwlAIDUqSDQgYnkgNSo1KjMsIG9yIDU5WyFdIGJpdHMuIEhvdyBpcyB0aGlzIHJlbGV2YW50PyB2bWxhbC51MzIKKysJQCBpbnN0cnVjdGlvbiBhY2NlcHRzIDJ4MzItYml0IGlucHV0IGFuZCB3cml0ZXMgMng2NC1iaXQgcmVzdWx0LgorKwlAIFRoaXMgbWVhbnMgdGhhdCByZXN1bHQgb2YgcmVkdWN0aW9uIGhhdmUgdG8gYmUgY29tcHJlc3NlZCB1cG9uCisrCUAgbG9vcCB3cmFwLWFyb3VuZC4gVGhpcyBjYW4gYmUgZG9uZSBpbiB0aGUgcHJvY2VzcyBvZiByZWR1Y3Rpb24KKysJQCB0byBtaW5pbWl6ZSBhbW91bnQgb2YgaW5zdHJ1Y3Rpb25zIFthcyB3ZWxsIGFzIGFtb3VudCBvZgorKwlAIDEyOC1iaXQgaW5zdHJ1Y3Rpb25zLCB3aGljaCBiZW5lZml0cyBsb3ctZW5kIHByb2Nlc3NvcnNdLCBidXQKKysJQCBvbmUgaGFzIHRvIHdhdGNoIGZvciBIMiAod2hpY2ggaXMgbmFycm93ZXIgdGhhbiBIMCkgYW5kIDUqSDQKKysJQCBub3QgYmVpbmcgd2lkZXIgdGhhbiA1OCBiaXRzLCBzbyB0aGF0IHJlc3VsdCBvZiByaWdodCBzaGlmdAorKwlAIGJ5IDI2IGJpdHMgZml0cyBpbiAzMiBiaXRzLiBUaGlzIGlzIGFsc28gdXNlZnVsIG9uIHg4NiwKKysJQCBiZWNhdXNlIGl0IGFsbG93cyB0byB1c2UgcGFkZGQgaW4gcGxhY2UgZm9yIHBhZGRxLCB3aGljaAorKwlAIGJlbmVmaXRzIEF0b20sIHdoZXJlIHBhZGRxIGlzIHJpZGljdWxvdXNseSBzbG93LgorKworKwl2c2hyLnU2NAkkVDAsJEQzLCMyNgorKwl2bW92bi5pNjQJJEQzI2xvLCREMworKwkgdnNoci51NjQJJFQxLCREMCwjMjYKKysJIHZtb3ZuLmk2NAkkRDAjbG8sJEQwCisrCXZhZGQuaTY0CSRENCwkRDQsJFQwCQlAIGgzIC0+IGg0CisrCXZiaWMuaTMyCSREMyNsbywjMHhmYzAwMDAwMAlAICY9MHgwM2ZmZmZmZgorKwkgdmFkZC5pNjQJJEQxLCREMSwkVDEJCUAgaDAgLT4gaDEKKysJIHZiaWMuaTMyCSREMCNsbywjMHhmYzAwMDAwMAorKworKwl2c2hybi51NjQJJFQwI2xvLCRENCwjMjYKKysJdm1vdm4uaTY0CSRENCNsbywkRDQKKysJIHZzaHIudTY0CSRUMSwkRDEsIzI2CisrCSB2bW92bi5pNjQJJEQxI2xvLCREMQorKwkgdmFkZC5pNjQJJEQyLCREMiwkVDEJCUAgaDEgLT4gaDIKKysJdmJpYy5pMzIJJEQ0I2xvLCMweGZjMDAwMDAwCisrCSB2YmljLmkzMgkkRDEjbG8sIzB4ZmMwMDAwMDAKKysKKysJdmFkZC5pMzIJJEQwI2xvLCREMCNsbywkVDAjbG8KKysJdnNobC51MzIJJFQwI2xvLCRUMCNsbywjMgorKwkgdnNocm4udTY0CSRUMSNsbywkRDIsIzI2CisrCSB2bW92bi5pNjQJJEQyI2xvLCREMgorKwl2YWRkLmkzMgkkRDAjbG8sJEQwI2xvLCRUMCNsbwlAIGg0IC0+IGgwCisrCSB2YWRkLmkzMgkkRDMjbG8sJEQzI2xvLCRUMSNsbwlAIGgyIC0+IGgzCisrCSB2YmljLmkzMgkkRDIjbG8sIzB4ZmMwMDAwMDAKKysKKysJdnNoci51MzIJJFQwI2xvLCREMCNsbywjMjYKKysJdmJpYy5pMzIJJEQwI2xvLCMweGZjMDAwMDAwCisrCSB2c2hyLnUzMgkkVDEjbG8sJEQzI2xvLCMyNgorKwkgdmJpYy5pMzIJJEQzI2xvLCMweGZjMDAwMDAwCisrCXZhZGQuaTMyCSREMSNsbywkRDEjbG8sJFQwI2xvCUAgaDAgLT4gaDEKKysJIHZhZGQuaTMyCSRENCNsbywkRDQjbG8sJFQxI2xvCUAgaDMgLT4gaDQKKysKKysJc3VicwkJJHplcm9zLCR6ZXJvcywjMQorKwliZXEJCS5Mc3F1YXJlX2JyZWFrX25lb24KKysKKysJYWRkCQkkdGJsMCwkY3R4LCMoNDgrMCo5KjQpCisrCWFkZAkJJHRibDEsJGN0eCwjKDQ4KzEqOSo0KQorKworKwl2dHJuLjMyCQkkUjAsJEQwI2xvCQlAIHJeMjpyXjEKKysJdnRybi4zMgkJJFIyLCREMiNsbworKwl2dHJuLjMyCQkkUjMsJEQzI2xvCisrCXZ0cm4uMzIJCSRSMSwkRDEjbG8KKysJdnRybi4zMgkJJFI0LCRENCNsbworKworKwl2c2hsLnUzMgkkUzIsJFIyLCMyCQlAICo1CisrCXZzaGwudTMyCSRTMywkUjMsIzIKKysJdnNobC51MzIJJFMxLCRSMSwjMgorKwl2c2hsLnUzMgkkUzQsJFI0LCMyCisrCXZhZGQuaTMyCSRTMiwkUzIsJFIyCisrCXZhZGQuaTMyCSRTMSwkUzEsJFIxCisrCXZhZGQuaTMyCSRTMywkUzMsJFIzCisrCXZhZGQuaTMyCSRTNCwkUzQsJFI0CisrCisrCXZzdDQuMzIJCXske1IwfVswXSwke1IxfVswXSwke1MxfVswXSwke1IyfVswXX0sWyR0YmwwXSEKKysJdnN0NC4zMgkJeyR7UjB9WzFdLCR7UjF9WzFdLCR7UzF9WzFdLCR7UjJ9WzFdfSxbJHRibDFdIQorKwl2c3Q0LjMyCQl7JHtTMn1bMF0sJHtSM31bMF0sJHtTM31bMF0sJHtSNH1bMF19LFskdGJsMF0hCisrCXZzdDQuMzIJCXske1MyfVsxXSwke1IzfVsxXSwke1MzfVsxXSwke1I0fVsxXX0sWyR0YmwxXSEKKysJdnN0MS4zMgkJeyR7UzR9WzBdfSxbJHRibDAsOjMyXQorKwl2c3QxLjMyCQl7JHtTNH1bMV19LFskdGJsMSw6MzJdCisrCisrCWIJCS5Mc3F1YXJlX25lb24KKysKKysuYWxpZ24JNAorKy5Mc3F1YXJlX2JyZWFrX25lb246CisrCWFkZAkJJHRibDAsJGN0eCwjKDQ4KzIqNCo5KQorKwlhZGQJCSR0YmwxLCRjdHgsIyg0OCszKjQqOSkKKysKKysJdm1vdgkJJFIwLCREMCNsbwkJQCByXjQ6cl4zCisrCXZzaGwudTMyCSRTMSwkRDEjbG8sIzIJCUAgKjUKKysJdm1vdgkJJFIxLCREMSNsbworKwl2c2hsLnUzMgkkUzIsJEQyI2xvLCMyCisrCXZtb3YJCSRSMiwkRDIjbG8KKysJdnNobC51MzIJJFMzLCREMyNsbywjMgorKwl2bW92CQkkUjMsJEQzI2xvCisrCXZzaGwudTMyCSRTNCwkRDQjbG8sIzIKKysJdm1vdgkJJFI0LCRENCNsbworKwl2YWRkLmkzMgkkUzEsJFMxLCREMSNsbworKwl2YWRkLmkzMgkkUzIsJFMyLCREMiNsbworKwl2YWRkLmkzMgkkUzMsJFMzLCREMyNsbworKwl2YWRkLmkzMgkkUzQsJFM0LCRENCNsbworKworKwl2c3Q0LjMyCQl7JHtSMH1bMF0sJHtSMX1bMF0sJHtTMX1bMF0sJHtSMn1bMF19LFskdGJsMF0hCisrCXZzdDQuMzIJCXske1IwfVsxXSwke1IxfVsxXSwke1MxfVsxXSwke1IyfVsxXX0sWyR0YmwxXSEKKysJdnN0NC4zMgkJeyR7UzJ9WzBdLCR7UjN9WzBdLCR7UzN9WzBdLCR7UjR9WzBdfSxbJHRibDBdIQorKwl2c3Q0LjMyCQl7JHtTMn1bMV0sJHtSM31bMV0sJHtTM31bMV0sJHtSNH1bMV19LFskdGJsMV0hCisrCXZzdDEuMzIJCXske1M0fVswXX0sWyR0YmwwXQorKwl2c3QxLjMyCQl7JHtTNH1bMV19LFskdGJsMV0KKysKKysuTG5vX2luaXRfbmVvbjoKKysJcmV0CQkJCUAgYngJbHIKKysuc2l6ZQlwb2x5MTMwNV9pbml0X25lb24sLi1wb2x5MTMwNV9pbml0X25lb24KKysKKysudHlwZQlwb2x5MTMwNV9ibG9ja3NfbmVvbiwlZnVuY3Rpb24KKysuYWxpZ24JNQorK3BvbHkxMzA1X2Jsb2Nrc19uZW9uOgorKy5McG9seTEzMDVfYmxvY2tzX25lb246CisrCWxkcglpcCxbJGN0eCwjMzZdCQlAIGlzX2Jhc2UyXzI2CisrCisrCWNtcAkkbGVuLCM2NAorKwlibG8JLkxwb2x5MTMwNV9ibG9ja3MKKysKKysJc3RtZGIJc3AhLHtyNC1yN30KKysJdnN0bWRiCXNwISx7ZDgtZDE1fQkJQCBBQkkgc3BlY2lmaWNhdGlvbiBzYXlzIHNvCisrCisrCXRzdAlpcCxpcAkJCUAgaXNfYmFzZTJfMjY/CisrCWJuZQkuTGJhc2UyXzI2X25lb24KKysKKysJc3RtZGIJc3AhLHtyMS1yMyxscn0KKysJYmwJLkxwb2x5MTMwNV9pbml0X25lb24KKysKKysJbGRyCXI0LFskY3R4LCMwXQkJQCBsb2FkIGhhc2ggdmFsdWUgYmFzZSAyXjMyCisrCWxkcglyNSxbJGN0eCwjNF0KKysJbGRyCXI2LFskY3R4LCM4XQorKwlsZHIJcjcsWyRjdHgsIzEyXQorKwlsZHIJaXAsWyRjdHgsIzE2XQorKworKwlhbmQJcjIscjQsIzB4MDNmZmZmZmYJQCBiYXNlIDJeMzIgLT4gYmFzZSAyXjI2CisrCW1vdglyMyxyNCxsc3IjMjYKKysJIHZlb3IJJEQwI2xvLCREMCNsbywkRDAjbG8KKysJbW92CXI0LHI1LGxzciMyMAorKwlvcnIJcjMscjMscjUsbHNsIzYKKysJIHZlb3IJJEQxI2xvLCREMSNsbywkRDEjbG8KKysJbW92CXI1LHI2LGxzciMxNAorKwlvcnIJcjQscjQscjYsbHNsIzEyCisrCSB2ZW9yCSREMiNsbywkRDIjbG8sJEQyI2xvCisrCW1vdglyNixyNyxsc3IjOAorKwlvcnIJcjUscjUscjcsbHNsIzE4CisrCSB2ZW9yCSREMyNsbywkRDMjbG8sJEQzI2xvCisrCWFuZAlyMyxyMywjMHgwM2ZmZmZmZgorKwlvcnIJcjYscjYsaXAsbHNsIzI0CisrCSB2ZW9yCSRENCNsbywkRDQjbG8sJEQ0I2xvCisrCWFuZAlyNCxyNCwjMHgwM2ZmZmZmZgorKwltb3YJcjEsIzEKKysJYW5kCXI1LHI1LCMweDAzZmZmZmZmCisrCXN0cglyMSxbJGN0eCwjMzZdCQlAIHNldCBpc19iYXNlMl8yNgorKworKwl2bW92LjMyCSREMCNsb1swXSxyMgorKwl2bW92LjMyCSREMSNsb1swXSxyMworKwl2bW92LjMyCSREMiNsb1swXSxyNAorKwl2bW92LjMyCSREMyNsb1swXSxyNQorKwl2bW92LjMyCSRENCNsb1swXSxyNgorKwlhZHIJJHplcm9zLC5MemVyb3MKKysKKysJbGRtaWEJc3AhLHtyMS1yMyxscn0KKysJYgkuTGhhc2hfbG9hZGVkCisrCisrLmFsaWduCTQKKysuTGJhc2UyXzI2X25lb246CisrCUBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAKKysJQCBsb2FkIGhhc2ggdmFsdWUKKysKKysJdmVvcgkJJEQwI2xvLCREMCNsbywkRDAjbG8KKysJdmVvcgkJJEQxI2xvLCREMSNsbywkRDEjbG8KKysJdmVvcgkJJEQyI2xvLCREMiNsbywkRDIjbG8KKysJdmVvcgkJJEQzI2xvLCREMyNsbywkRDMjbG8KKysJdmVvcgkJJEQ0I2xvLCRENCNsbywkRDQjbG8KKysJdmxkNC4zMgkJeyREMCNsb1swXSwkRDEjbG9bMF0sJEQyI2xvWzBdLCREMyNsb1swXX0sWyRjdHhdIQorKwlhZHIJCSR6ZXJvcywuTHplcm9zCisrCXZsZDEuMzIJCXskRDQjbG9bMF19LFskY3R4XQorKwlzdWIJCSRjdHgsJGN0eCwjMTYJCUAgcmV3aW5kCisrCisrLkxoYXNoX2xvYWRlZDoKKysJYWRkCQkkaW4yLCRpbnAsIzMyCisrCW1vdgkJJHBhZGJpdCwkcGFkYml0LGxzbCMyNAorKwl0c3QJCSRsZW4sIzMxCisrCWJlcQkJLkxldmVuCisrCisrCXZsZDQuMzIJCXskSDAjbG9bMF0sJEgxI2xvWzBdLCRIMiNsb1swXSwkSDMjbG9bMF19LFskaW5wXSEKKysJdm1vdi4zMgkJJEg0I2xvWzBdLCRwYWRiaXQKKysJc3ViCQkkbGVuLCRsZW4sIzE2CisrCWFkZAkJJGluMiwkaW5wLCMzMgorKworKyMgaWZkZWYJX19BUk1FQl9fCisrCXZyZXYzMi44CSRIMCwkSDAKKysJdnJldjMyLjgJJEgzLCRIMworKwl2cmV2MzIuOAkkSDEsJEgxCisrCXZyZXYzMi44CSRIMiwkSDIKKysjIGVuZGlmCisrCXZzcmkudTMyCSRINCNsbywkSDMjbG8sIzgJQCBiYXNlIDJeMzIgLT4gYmFzZSAyXjI2CisrCXZzaGwudTMyCSRIMyNsbywkSDMjbG8sIzE4CisrCisrCXZzcmkudTMyCSRIMyNsbywkSDIjbG8sIzE0CisrCXZzaGwudTMyCSRIMiNsbywkSDIjbG8sIzEyCisrCXZhZGQuaTMyCSRINCNoaSwkSDQjbG8sJEQ0I2xvCUAgYWRkIGhhc2ggdmFsdWUgYW5kIG1vdmUgdG8gI2hpCisrCisrCXZiaWMuaTMyCSRIMyNsbywjMHhmYzAwMDAwMAorKwl2c3JpLnUzMgkkSDIjbG8sJEgxI2xvLCMyMAorKwl2c2hsLnUzMgkkSDEjbG8sJEgxI2xvLCM2CisrCisrCXZiaWMuaTMyCSRIMiNsbywjMHhmYzAwMDAwMAorKwl2c3JpLnUzMgkkSDEjbG8sJEgwI2xvLCMyNgorKwl2YWRkLmkzMgkkSDMjaGksJEgzI2xvLCREMyNsbworKworKwl2YmljLmkzMgkkSDAjbG8sIzB4ZmMwMDAwMDAKKysJdmJpYy5pMzIJJEgxI2xvLCMweGZjMDAwMDAwCisrCXZhZGQuaTMyCSRIMiNoaSwkSDIjbG8sJEQyI2xvCisrCisrCXZhZGQuaTMyCSRIMCNoaSwkSDAjbG8sJEQwI2xvCisrCXZhZGQuaTMyCSRIMSNoaSwkSDEjbG8sJEQxI2xvCisrCisrCW1vdgkJJHRibDEsJHplcm9zCisrCWFkZAkJJHRibDAsJGN0eCwjNDgKKysKKysJY21wCQkkbGVuLCRsZW4KKysJYgkJLkxvbmdfdGFpbAorKworKy5hbGlnbgk0CisrLkxldmVuOgorKwlzdWJzCQkkbGVuLCRsZW4sIzY0CisrCWl0CQlsbworKwltb3ZsbwkJJGluMiwkemVyb3MKKysKKysJdm1vdi5pMzIJJEg0LCMxPDwyNAkJQCBwYWRiaXQsIHllcywgYWx3YXlzCisrCXZsZDQuMzIJCXskSDAjbG8sJEgxI2xvLCRIMiNsbywkSDMjbG99LFskaW5wXQlAIGlucFswOjFdCisrCWFkZAkJJGlucCwkaW5wLCM2NAorKwl2bGQ0LjMyCQl7JEgwI2hpLCRIMSNoaSwkSDIjaGksJEgzI2hpfSxbJGluMl0JQCBpbnBbMjozXSAob3IgMCkKKysJYWRkCQkkaW4yLCRpbjIsIzY0CisrCWl0dAkJaGkKKysJYWRkaGkJCSR0YmwxLCRjdHgsIyg0OCsxKjkqNCkKKysJYWRkaGkJCSR0YmwwLCRjdHgsIyg0OCszKjkqNCkKKysKKysjIGlmZGVmCV9fQVJNRUJfXworKwl2cmV2MzIuOAkkSDAsJEgwCisrCXZyZXYzMi44CSRIMywkSDMKKysJdnJldjMyLjgJJEgxLCRIMQorKwl2cmV2MzIuOAkkSDIsJEgyCisrIyBlbmRpZgorKwl2c3JpLnUzMgkkSDQsJEgzLCM4CQlAIGJhc2UgMl4zMiAtPiBiYXNlIDJeMjYKKysJdnNobC51MzIJJEgzLCRIMywjMTgKKysKKysJdnNyaS51MzIJJEgzLCRIMiwjMTQKKysJdnNobC51MzIJJEgyLCRIMiwjMTIKKysKKysJdmJpYy5pMzIJJEgzLCMweGZjMDAwMDAwCisrCXZzcmkudTMyCSRIMiwkSDEsIzIwCisrCXZzaGwudTMyCSRIMSwkSDEsIzYKKysKKysJdmJpYy5pMzIJJEgyLCMweGZjMDAwMDAwCisrCXZzcmkudTMyCSRIMSwkSDAsIzI2CisrCisrCXZiaWMuaTMyCSRIMCwjMHhmYzAwMDAwMAorKwl2YmljLmkzMgkkSDEsIzB4ZmMwMDAwMDAKKysKKysJYmxzCQkuTHNraXBfbG9vcAorKworKwl2bGQ0LjMyCQl7JHtSMH1bMV0sJHtSMX1bMV0sJHtTMX1bMV0sJHtSMn1bMV19LFskdGJsMV0hCUAgbG9hZCByXjIKKysJdmxkNC4zMgkJeyR7UjB9WzBdLCR7UjF9WzBdLCR7UzF9WzBdLCR7UjJ9WzBdfSxbJHRibDBdIQlAIGxvYWQgcl40CisrCXZsZDQuMzIJCXske1MyfVsxXSwke1IzfVsxXSwke1MzfVsxXSwke1I0fVsxXX0sWyR0YmwxXSEKKysJdmxkNC4zMgkJeyR7UzJ9WzBdLCR7UjN9WzBdLCR7UzN9WzBdLCR7UjR9WzBdfSxbJHRibDBdIQorKwliCQkuTG9vcF9uZW9uCisrCisrLmFsaWduCTUKKysuTG9vcF9uZW9uOgorKwlAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBACisrCUAgKChpbnBbMF0qcl40K2lucFsyXSpyXjIraW5wWzRdKSpyXjQraW5wWzZdKnJeMgorKwlAICgoaW5wWzFdKnJeNCtpbnBbM10qcl4yK2lucFs1XSkqcl4zK2lucFs3XSpyCisrCUAgICBcX19fX19fX19fX19fX19fX19fXy8KKysJQCAoKGlucFswXSpyXjQraW5wWzJdKnJeMitpbnBbNF0pKnJeNCtpbnBbNl0qcl4yK2lucFs4XSkqcl4yCisrCUAgKChpbnBbMV0qcl40K2lucFszXSpyXjIraW5wWzVdKSpyXjQraW5wWzddKnJeMitpbnBbOV0pKnIKKysJQCAgIFxfX19fX19fX19fX19fX19fX19fLyBcX19fX19fX19fX19fX19fX19fX18vCisrCUAKKysJQCBOb3RlIHRoYXQgd2Ugc3RhcnQgd2l0aCBpbnBbMjozXSpyXjIuIFRoaXMgaXMgYmVjYXVzZSBpdAorKwlAIGRvZXNuJ3QgZGVwZW5kIG9uIHJlZHVjdGlvbiBpbiBwcmV2aW91cyBpdGVyYXRpb24uCisrCUBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAKKysJQCBkNCA9IGg0KnIwICsgaDMqcjEgICArIGgyKnIyICAgKyBoMSpyMyAgICsgaDAqcjQKKysJQCBkMyA9IGgzKnIwICsgaDIqcjEgICArIGgxKnIyICAgKyBoMCpyMyAgICsgaDQqNSpyNAorKwlAIGQyID0gaDIqcjAgKyBoMSpyMSAgICsgaDAqcjIgICArIGg0KjUqcjMgKyBoMyo1KnI0CisrCUAgZDEgPSBoMSpyMCArIGgwKnIxICAgKyBoNCo1KnIyICsgaDMqNSpyMyArIGgyKjUqcjQKKysJQCBkMCA9IGgwKnIwICsgaDQqNSpyMSArIGgzKjUqcjIgKyBoMio1KnIzICsgaDEqNSpyNAorKworKwlAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBACisrCUAgaW5wWzI6M10qcl4yCisrCisrCXZhZGQuaTMyCSRIMiNsbywkSDIjbG8sJEQyI2xvCUAgYWNjdW11bGF0ZSBpbnBbMDoxXQorKwl2bXVsbC51MzIJJEQyLCRIMiNoaSwke1IwfVsxXQorKwl2YWRkLmkzMgkkSDAjbG8sJEgwI2xvLCREMCNsbworKwl2bXVsbC51MzIJJEQwLCRIMCNoaSwke1IwfVsxXQorKwl2YWRkLmkzMgkkSDMjbG8sJEgzI2xvLCREMyNsbworKwl2bXVsbC51MzIJJEQzLCRIMyNoaSwke1IwfVsxXQorKwl2bWxhbC51MzIJJEQyLCRIMSNoaSwke1IxfVsxXQorKwl2YWRkLmkzMgkkSDEjbG8sJEgxI2xvLCREMSNsbworKwl2bXVsbC51MzIJJEQxLCRIMSNoaSwke1IwfVsxXQorKworKwl2YWRkLmkzMgkkSDQjbG8sJEg0I2xvLCRENCNsbworKwl2bXVsbC51MzIJJEQ0LCRINCNoaSwke1IwfVsxXQorKwlzdWJzCQkkbGVuLCRsZW4sIzY0CisrCXZtbGFsLnUzMgkkRDAsJEg0I2hpLCR7UzF9WzFdCisrCWl0CQlsbworKwltb3ZsbwkJJGluMiwkemVyb3MKKysJdm1sYWwudTMyCSREMywkSDIjaGksJHtSMX1bMV0KKysJdmxkMS4zMgkJJHtTNH1bMV0sWyR0YmwxLDozMl0KKysJdm1sYWwudTMyCSREMSwkSDAjaGksJHtSMX1bMV0KKysJdm1sYWwudTMyCSRENCwkSDMjaGksJHtSMX1bMV0KKysKKysJdm1sYWwudTMyCSREMCwkSDMjaGksJHtTMn1bMV0KKysJdm1sYWwudTMyCSREMywkSDEjaGksJHtSMn1bMV0KKysJdm1sYWwudTMyCSRENCwkSDIjaGksJHtSMn1bMV0KKysJdm1sYWwudTMyCSREMSwkSDQjaGksJHtTMn1bMV0KKysJdm1sYWwudTMyCSREMiwkSDAjaGksJHtSMn1bMV0KKysKKysJdm1sYWwudTMyCSREMywkSDAjaGksJHtSM31bMV0KKysJdm1sYWwudTMyCSREMCwkSDIjaGksJHtTM31bMV0KKysJdm1sYWwudTMyCSRENCwkSDEjaGksJHtSM31bMV0KKysJdm1sYWwudTMyCSREMSwkSDMjaGksJHtTM31bMV0KKysJdm1sYWwudTMyCSREMiwkSDQjaGksJHtTM31bMV0KKysKKysJdm1sYWwudTMyCSREMywkSDQjaGksJHtTNH1bMV0KKysJdm1sYWwudTMyCSREMCwkSDEjaGksJHtTNH1bMV0KKysJdm1sYWwudTMyCSRENCwkSDAjaGksJHtSNH1bMV0KKysJdm1sYWwudTMyCSREMSwkSDIjaGksJHtTNH1bMV0KKysJdm1sYWwudTMyCSREMiwkSDMjaGksJHtTNH1bMV0KKysKKysJdmxkNC4zMgkJeyRIMCNoaSwkSDEjaGksJEgyI2hpLCRIMyNoaX0sWyRpbjJdCUAgaW5wWzI6M10gKG9yIDApCisrCWFkZAkJJGluMiwkaW4yLCM2NAorKworKwlAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBACisrCUAgKGhhc2graW5wWzA6MV0pKnJeNCBhbmQgYWNjdW11bGF0ZQorKworKwl2bWxhbC51MzIJJEQzLCRIMyNsbywke1IwfVswXQorKwl2bWxhbC51MzIJJEQwLCRIMCNsbywke1IwfVswXQorKwl2bWxhbC51MzIJJEQ0LCRINCNsbywke1IwfVswXQorKwl2bWxhbC51MzIJJEQxLCRIMSNsbywke1IwfVswXQorKwl2bWxhbC51MzIJJEQyLCRIMiNsbywke1IwfVswXQorKwl2bGQxLjMyCQkke1M0fVswXSxbJHRibDAsOjMyXQorKworKwl2bWxhbC51MzIJJEQzLCRIMiNsbywke1IxfVswXQorKwl2bWxhbC51MzIJJEQwLCRINCNsbywke1MxfVswXQorKwl2bWxhbC51MzIJJEQ0LCRIMyNsbywke1IxfVswXQorKwl2bWxhbC51MzIJJEQxLCRIMCNsbywke1IxfVswXQorKwl2bWxhbC51MzIJJEQyLCRIMSNsbywke1IxfVswXQorKworKwl2bWxhbC51MzIJJEQzLCRIMSNsbywke1IyfVswXQorKwl2bWxhbC51MzIJJEQwLCRIMyNsbywke1MyfVswXQorKwl2bWxhbC51MzIJJEQ0LCRIMiNsbywke1IyfVswXQorKwl2bWxhbC51MzIJJEQxLCRINCNsbywke1MyfVswXQorKwl2bWxhbC51MzIJJEQyLCRIMCNsbywke1IyfVswXQorKworKwl2bWxhbC51MzIJJEQzLCRIMCNsbywke1IzfVswXQorKwl2bWxhbC51MzIJJEQwLCRIMiNsbywke1MzfVswXQorKwl2bWxhbC51MzIJJEQ0LCRIMSNsbywke1IzfVswXQorKwl2bWxhbC51MzIJJEQxLCRIMyNsbywke1MzfVswXQorKwl2bWxhbC51MzIJJEQzLCRINCNsbywke1M0fVswXQorKworKwl2bWxhbC51MzIJJEQyLCRINCNsbywke1MzfVswXQorKwl2bWxhbC51MzIJJEQwLCRIMSNsbywke1M0fVswXQorKwl2bWxhbC51MzIJJEQ0LCRIMCNsbywke1I0fVswXQorKwl2bW92LmkzMgkkSDQsIzE8PDI0CQlAIHBhZGJpdCwgeWVzLCBhbHdheXMKKysJdm1sYWwudTMyCSREMSwkSDIjbG8sJHtTNH1bMF0KKysJdm1sYWwudTMyCSREMiwkSDMjbG8sJHtTNH1bMF0KKysKKysJdmxkNC4zMgkJeyRIMCNsbywkSDEjbG8sJEgyI2xvLCRIMyNsb30sWyRpbnBdCUAgaW5wWzA6MV0KKysJYWRkCQkkaW5wLCRpbnAsIzY0CisrIyBpZmRlZglfX0FSTUVCX18KKysJdnJldjMyLjgJJEgwLCRIMAorKwl2cmV2MzIuOAkkSDEsJEgxCisrCXZyZXYzMi44CSRIMiwkSDIKKysJdnJldjMyLjgJJEgzLCRIMworKyMgZW5kaWYKKysKKysJQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAorKwlAIGxhenkgcmVkdWN0aW9uIGludGVybGVhdmVkIHdpdGggYmFzZSAyXjMyIC0+IGJhc2UgMl4yNiBvZgorKwlAIGlucFswOjNdIHByZXZpb3VzbHkgbG9hZGVkIHRvICRIMC0kSDMgYW5kIHNtYXNoZWQgdG8gJEgwLSRINC4KKysKKysJdnNoci51NjQJJFQwLCREMywjMjYKKysJdm1vdm4uaTY0CSREMyNsbywkRDMKKysJIHZzaHIudTY0CSRUMSwkRDAsIzI2CisrCSB2bW92bi5pNjQJJEQwI2xvLCREMAorKwl2YWRkLmk2NAkkRDQsJEQ0LCRUMAkJQCBoMyAtPiBoNAorKwl2YmljLmkzMgkkRDMjbG8sIzB4ZmMwMDAwMDAKKysJICB2c3JpLnUzMgkkSDQsJEgzLCM4CQlAIGJhc2UgMl4zMiAtPiBiYXNlIDJeMjYKKysJIHZhZGQuaTY0CSREMSwkRDEsJFQxCQlAIGgwIC0+IGgxCisrCSAgdnNobC51MzIJJEgzLCRIMywjMTgKKysJIHZiaWMuaTMyCSREMCNsbywjMHhmYzAwMDAwMAorKworKwl2c2hybi51NjQJJFQwI2xvLCRENCwjMjYKKysJdm1vdm4uaTY0CSRENCNsbywkRDQKKysJIHZzaHIudTY0CSRUMSwkRDEsIzI2CisrCSB2bW92bi5pNjQJJEQxI2xvLCREMQorKwkgdmFkZC5pNjQJJEQyLCREMiwkVDEJCUAgaDEgLT4gaDIKKysJICB2c3JpLnUzMgkkSDMsJEgyLCMxNAorKwl2YmljLmkzMgkkRDQjbG8sIzB4ZmMwMDAwMDAKKysJICB2c2hsLnUzMgkkSDIsJEgyLCMxMgorKwkgdmJpYy5pMzIJJEQxI2xvLCMweGZjMDAwMDAwCisrCisrCXZhZGQuaTMyCSREMCNsbywkRDAjbG8sJFQwI2xvCisrCXZzaGwudTMyCSRUMCNsbywkVDAjbG8sIzIKKysJICB2YmljLmkzMgkkSDMsIzB4ZmMwMDAwMDAKKysJIHZzaHJuLnU2NAkkVDEjbG8sJEQyLCMyNgorKwkgdm1vdm4uaTY0CSREMiNsbywkRDIKKysJdmFkZGwudTMyCSREMCwkRDAjbG8sJFQwI2xvCUAgaDQgLT4gaDAgW3dpZGVuIGZvciBhIHNlY10KKysJICB2c3JpLnUzMgkkSDIsJEgxLCMyMAorKwkgdmFkZC5pMzIJJEQzI2xvLCREMyNsbywkVDEjbG8JQCBoMiAtPiBoMworKwkgIHZzaGwudTMyCSRIMSwkSDEsIzYKKysJIHZiaWMuaTMyCSREMiNsbywjMHhmYzAwMDAwMAorKwkgIHZiaWMuaTMyCSRIMiwjMHhmYzAwMDAwMAorKworKwl2c2hybi51NjQJJFQwI2xvLCREMCwjMjYJCUAgcmUtbmFycm93CisrCXZtb3ZuLmk2NAkkRDAjbG8sJEQwCisrCSAgdnNyaS51MzIJJEgxLCRIMCwjMjYKKysJICB2YmljLmkzMgkkSDAsIzB4ZmMwMDAwMDAKKysJIHZzaHIudTMyCSRUMSNsbywkRDMjbG8sIzI2CisrCSB2YmljLmkzMgkkRDMjbG8sIzB4ZmMwMDAwMDAKKysJdmJpYy5pMzIJJEQwI2xvLCMweGZjMDAwMDAwCisrCXZhZGQuaTMyCSREMSNsbywkRDEjbG8sJFQwI2xvCUAgaDAgLT4gaDEKKysJIHZhZGQuaTMyCSRENCNsbywkRDQjbG8sJFQxI2xvCUAgaDMgLT4gaDQKKysJICB2YmljLmkzMgkkSDEsIzB4ZmMwMDAwMDAKKysKKysJYmhpCQkuTG9vcF9uZW9uCisrCisrLkxza2lwX2xvb3A6CisrCUBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAKKysJQCBtdWx0aXBseSAoaW5wWzA6MV0raGFzaCkgb3IgaW5wWzI6M10gYnkgcl4yOnJeMQorKworKwlhZGQJCSR0YmwxLCRjdHgsIyg0OCswKjkqNCkKKysJYWRkCQkkdGJsMCwkY3R4LCMoNDgrMSo5KjQpCisrCWFkZHMJCSRsZW4sJGxlbiwjMzIKKysJaXQJCW5lCisrCW1vdm5lCQkkbGVuLCMwCisrCWJuZQkJLkxvbmdfdGFpbAorKworKwl2YWRkLmkzMgkkSDIjaGksJEgyI2xvLCREMiNsbwlAIGFkZCBoYXNoIHZhbHVlIGFuZCBtb3ZlIHRvICNoaQorKwl2YWRkLmkzMgkkSDAjaGksJEgwI2xvLCREMCNsbworKwl2YWRkLmkzMgkkSDMjaGksJEgzI2xvLCREMyNsbworKwl2YWRkLmkzMgkkSDEjaGksJEgxI2xvLCREMSNsbworKwl2YWRkLmkzMgkkSDQjaGksJEg0I2xvLCRENCNsbworKworKy5Mb25nX3RhaWw6CisrCXZsZDQuMzIJCXske1IwfVsxXSwke1IxfVsxXSwke1MxfVsxXSwke1IyfVsxXX0sWyR0YmwxXSEJQCBsb2FkIHJeMQorKwl2bGQ0LjMyCQl7JHtSMH1bMF0sJHtSMX1bMF0sJHtTMX1bMF0sJHtSMn1bMF19LFskdGJsMF0hCUAgbG9hZCByXjIKKysKKysJdmFkZC5pMzIJJEgyI2xvLCRIMiNsbywkRDIjbG8JQCBjYW4gYmUgcmVkdW5kYW50CisrCXZtdWxsLnUzMgkkRDIsJEgyI2hpLCRSMAorKwl2YWRkLmkzMgkkSDAjbG8sJEgwI2xvLCREMCNsbworKwl2bXVsbC51MzIJJEQwLCRIMCNoaSwkUjAKKysJdmFkZC5pMzIJJEgzI2xvLCRIMyNsbywkRDMjbG8KKysJdm11bGwudTMyCSREMywkSDMjaGksJFIwCisrCXZhZGQuaTMyCSRIMSNsbywkSDEjbG8sJEQxI2xvCisrCXZtdWxsLnUzMgkkRDEsJEgxI2hpLCRSMAorKwl2YWRkLmkzMgkkSDQjbG8sJEg0I2xvLCRENCNsbworKwl2bXVsbC51MzIJJEQ0LCRINCNoaSwkUjAKKysKKysJdm1sYWwudTMyCSREMCwkSDQjaGksJFMxCisrCXZsZDQuMzIJCXske1MyfVsxXSwke1IzfVsxXSwke1MzfVsxXSwke1I0fVsxXX0sWyR0YmwxXSEKKysJdm1sYWwudTMyCSREMywkSDIjaGksJFIxCisrCXZsZDQuMzIJCXske1MyfVswXSwke1IzfVswXSwke1MzfVswXSwke1I0fVswXX0sWyR0YmwwXSEKKysJdm1sYWwudTMyCSREMSwkSDAjaGksJFIxCisrCXZtbGFsLnUzMgkkRDQsJEgzI2hpLCRSMQorKwl2bWxhbC51MzIJJEQyLCRIMSNoaSwkUjEKKysKKysJdm1sYWwudTMyCSREMywkSDEjaGksJFIyCisrCXZsZDEuMzIJCSR7UzR9WzFdLFskdGJsMSw6MzJdCisrCXZtbGFsLnUzMgkkRDAsJEgzI2hpLCRTMgorKwl2bGQxLjMyCQkke1M0fVswXSxbJHRibDAsOjMyXQorKwl2bWxhbC51MzIJJEQ0LCRIMiNoaSwkUjIKKysJdm1sYWwudTMyCSREMSwkSDQjaGksJFMyCisrCXZtbGFsLnUzMgkkRDIsJEgwI2hpLCRSMgorKworKwl2bWxhbC51MzIJJEQzLCRIMCNoaSwkUjMKKysJIGl0CQluZQorKwkgYWRkbmUJCSR0YmwxLCRjdHgsIyg0OCsyKjkqNCkKKysJdm1sYWwudTMyCSREMCwkSDIjaGksJFMzCisrCSBpdAkJbmUKKysJIGFkZG5lCQkkdGJsMCwkY3R4LCMoNDgrMyo5KjQpCisrCXZtbGFsLnUzMgkkRDQsJEgxI2hpLCRSMworKwl2bWxhbC51MzIJJEQxLCRIMyNoaSwkUzMKKysJdm1sYWwudTMyCSREMiwkSDQjaGksJFMzCisrCisrCXZtbGFsLnUzMgkkRDMsJEg0I2hpLCRTNAorKwkgdm9ybgkJJE1BU0ssJE1BU0ssJE1BU0sJQCBhbGwtb25lcywgY2FuIGJlIHJlZHVuZGFudAorKwl2bWxhbC51MzIJJEQwLCRIMSNoaSwkUzQKKysJIHZzaHIudTY0CSRNQVNLLCRNQVNLLCMzOAorKwl2bWxhbC51MzIJJEQ0LCRIMCNoaSwkUjQKKysJdm1sYWwudTMyCSREMSwkSDIjaGksJFM0CisrCXZtbGFsLnUzMgkkRDIsJEgzI2hpLCRTNAorKworKwliZXEJCS5Mc2hvcnRfdGFpbAorKworKwlAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBACisrCUAgKGhhc2graW5wWzA6MV0pKnJeNDpyXjMgYW5kIGFjY3VtdWxhdGUKKysKKysJdmxkNC4zMgkJeyR7UjB9WzFdLCR7UjF9WzFdLCR7UzF9WzFdLCR7UjJ9WzFdfSxbJHRibDFdIQlAIGxvYWQgcl4zCisrCXZsZDQuMzIJCXske1IwfVswXSwke1IxfVswXSwke1MxfVswXSwke1IyfVswXX0sWyR0YmwwXSEJQCBsb2FkIHJeNAorKworKwl2bWxhbC51MzIJJEQyLCRIMiNsbywkUjAKKysJdm1sYWwudTMyCSREMCwkSDAjbG8sJFIwCisrCXZtbGFsLnUzMgkkRDMsJEgzI2xvLCRSMAorKwl2bWxhbC51MzIJJEQxLCRIMSNsbywkUjAKKysJdm1sYWwudTMyCSRENCwkSDQjbG8sJFIwCisrCisrCXZtbGFsLnUzMgkkRDAsJEg0I2xvLCRTMQorKwl2bGQ0LjMyCQl7JHtTMn1bMV0sJHtSM31bMV0sJHtTM31bMV0sJHtSNH1bMV19LFskdGJsMV0hCisrCXZtbGFsLnUzMgkkRDMsJEgyI2xvLCRSMQorKwl2bGQ0LjMyCQl7JHtTMn1bMF0sJHtSM31bMF0sJHtTM31bMF0sJHtSNH1bMF19LFskdGJsMF0hCisrCXZtbGFsLnUzMgkkRDEsJEgwI2xvLCRSMQorKwl2bWxhbC51MzIJJEQ0LCRIMyNsbywkUjEKKysJdm1sYWwudTMyCSREMiwkSDEjbG8sJFIxCisrCisrCXZtbGFsLnUzMgkkRDMsJEgxI2xvLCRSMgorKwl2bGQxLjMyCQkke1M0fVsxXSxbJHRibDEsOjMyXQorKwl2bWxhbC51MzIJJEQwLCRIMyNsbywkUzIKKysJdmxkMS4zMgkJJHtTNH1bMF0sWyR0YmwwLDozMl0KKysJdm1sYWwudTMyCSRENCwkSDIjbG8sJFIyCisrCXZtbGFsLnUzMgkkRDEsJEg0I2xvLCRTMgorKwl2bWxhbC51MzIJJEQyLCRIMCNsbywkUjIKKysKKysJdm1sYWwudTMyCSREMywkSDAjbG8sJFIzCisrCXZtbGFsLnUzMgkkRDAsJEgyI2xvLCRTMworKwl2bWxhbC51MzIJJEQ0LCRIMSNsbywkUjMKKysJdm1sYWwudTMyCSREMSwkSDMjbG8sJFMzCisrCXZtbGFsLnUzMgkkRDIsJEg0I2xvLCRTMworKworKwl2bWxhbC51MzIJJEQzLCRINCNsbywkUzQKKysJIHZvcm4JCSRNQVNLLCRNQVNLLCRNQVNLCUAgYWxsLW9uZXMKKysJdm1sYWwudTMyCSREMCwkSDEjbG8sJFM0CisrCSB2c2hyLnU2NAkkTUFTSywkTUFTSywjMzgKKysJdm1sYWwudTMyCSRENCwkSDAjbG8sJFI0CisrCXZtbGFsLnUzMgkkRDEsJEgyI2xvLCRTNAorKwl2bWxhbC51MzIJJEQyLCRIMyNsbywkUzQKKysKKysuTHNob3J0X3RhaWw6CisrCUBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAKKysJQCBob3Jpem9udGFsIGFkZGl0aW9uCisrCisrCXZhZGQuaTY0CSREMyNsbywkRDMjbG8sJEQzI2hpCisrCXZhZGQuaTY0CSREMCNsbywkRDAjbG8sJEQwI2hpCisrCXZhZGQuaTY0CSRENCNsbywkRDQjbG8sJEQ0I2hpCisrCXZhZGQuaTY0CSREMSNsbywkRDEjbG8sJEQxI2hpCisrCXZhZGQuaTY0CSREMiNsbywkRDIjbG8sJEQyI2hpCisrCisrCUBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAKKysJQCBsYXp5IHJlZHVjdGlvbiwgYnV0IHdpdGhvdXQgbmFycm93aW5nCisrCisrCXZzaHIudTY0CSRUMCwkRDMsIzI2CisrCXZhbmQuaTY0CSREMywkRDMsJE1BU0sKKysJIHZzaHIudTY0CSRUMSwkRDAsIzI2CisrCSB2YW5kLmk2NAkkRDAsJEQwLCRNQVNLCisrCXZhZGQuaTY0CSRENCwkRDQsJFQwCQlAIGgzIC0+IGg0CisrCSB2YWRkLmk2NAkkRDEsJEQxLCRUMQkJQCBoMCAtPiBoMQorKworKwl2c2hyLnU2NAkkVDAsJEQ0LCMyNgorKwl2YW5kLmk2NAkkRDQsJEQ0LCRNQVNLCisrCSB2c2hyLnU2NAkkVDEsJEQxLCMyNgorKwkgdmFuZC5pNjQJJEQxLCREMSwkTUFTSworKwkgdmFkZC5pNjQJJEQyLCREMiwkVDEJCUAgaDEgLT4gaDIKKysKKysJdmFkZC5pNjQJJEQwLCREMCwkVDAKKysJdnNobC51NjQJJFQwLCRUMCwjMgorKwkgdnNoci51NjQJJFQxLCREMiwjMjYKKysJIHZhbmQuaTY0CSREMiwkRDIsJE1BU0sKKysJdmFkZC5pNjQJJEQwLCREMCwkVDAJCUAgaDQgLT4gaDAKKysJIHZhZGQuaTY0CSREMywkRDMsJFQxCQlAIGgyIC0+IGgzCisrCisrCXZzaHIudTY0CSRUMCwkRDAsIzI2CisrCXZhbmQuaTY0CSREMCwkRDAsJE1BU0sKKysJIHZzaHIudTY0CSRUMSwkRDMsIzI2CisrCSB2YW5kLmk2NAkkRDMsJEQzLCRNQVNLCisrCXZhZGQuaTY0CSREMSwkRDEsJFQwCQlAIGgwIC0+IGgxCisrCSB2YWRkLmk2NAkkRDQsJEQ0LCRUMQkJQCBoMyAtPiBoNAorKworKwljbXAJCSRsZW4sIzAKKysJYm5lCQkuTGV2ZW4KKysKKysJQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAorKwlAIHN0b3JlIGhhc2ggdmFsdWUKKysKKysJdnN0NC4zMgkJeyREMCNsb1swXSwkRDEjbG9bMF0sJEQyI2xvWzBdLCREMyNsb1swXX0sWyRjdHhdIQorKwl2c3QxLjMyCQl7JEQ0I2xvWzBdfSxbJGN0eF0KKysKKysJdmxkbWlhCXNwISx7ZDgtZDE1fQkJCUAgZXBpbG9ndWUKKysJbGRtaWEJc3AhLHtyNC1yN30KKysJcmV0CQkJCQlAIGJ4CWxyCisrLnNpemUJcG9seTEzMDVfYmxvY2tzX25lb24sLi1wb2x5MTMwNV9ibG9ja3NfbmVvbgorKworKy5hbGlnbgk1CisrLkx6ZXJvczoKKysubG9uZwkwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCisrI2lmbmRlZglfX0tFUk5FTF9fCisrLkxPUEVOU1NMX2FybWNhcDoKKysjIGlmZGVmCV9XSU4zMgorKy53b3JkCU9QRU5TU0xfYXJtY2FwX1AKKysjIGVsc2UKKysud29yZAlPUEVOU1NMX2FybWNhcF9QLS5McG9seTEzMDVfaW5pdAorKyMgZW5kaWYKKysuY29tbQlPUEVOU1NMX2FybWNhcF9QLDQsNAorKy5oaWRkZW4JT1BFTlNTTF9hcm1jYXBfUAorKyNlbmRpZgorKyNlbmRpZgorK19fXworK30JfQorKyRjb2RlLj08PF9fXzsKKysuYXNjaXoJIlBvbHkxMzA1IGZvciBBUk12NC9ORU9OLCBDUllQVE9HQU1TIGJ5IFxAZG90LWFzbSIKKysuYWxpZ24JMgorK19fXworKworK2ZvcmVhY2ggKHNwbGl0KCJcbiIsJGNvZGUpKSB7CisrCXMvXGAoW15cYF0qKVxgL2V2YWwgJDEvZ2VvOworKworKwlzL1xicShbMC05XSspIyhsb3xoaSkvc3ByaW50ZiAiZCVkIiwyKiQxKygkMiBlcSAiaGkiKS9nZW8Jb3IKKysJcy9cYnJldFxiL2J4CWxyL2dvCQkJCQkJb3IKKysJcy9cYmJ4XHMrbHJcYi8ud29yZFx0MHhlMTJmZmYxZS9nbzsJIyBtYWtlIGl0IHBvc3NpYmxlIHRvIGNvbXBpbGUgd2l0aCAtbWFyY2g9YXJtdjQKKysKKysJcHJpbnQgJF8sIlxuIjsKKyt9CisrY2xvc2UgU1RET1VUOyAjIGVuZm9yY2UgZmx1c2gKKy0tLSAvZGV2L251bGwKKysrKyBiL2FyY2gvYXJtL2NyeXB0by9wb2x5MTMwNS1jb3JlLlNfc2hpcHBlZAorQEAgLTAsMCArMSwxMTU4IEBACisrI2lmbmRlZglfX0tFUk5FTF9fCisrIyBpbmNsdWRlICJhcm1fYXJjaC5oIgorKyNlbHNlCisrIyBkZWZpbmUgX19BUk1fQVJDSF9fIF9fTElOVVhfQVJNX0FSQ0hfXworKyMgZGVmaW5lIF9fQVJNX01BWF9BUkNIX18gX19MSU5VWF9BUk1fQVJDSF9fCisrIyBkZWZpbmUgcG9seTEzMDVfaW5pdCAgIHBvbHkxMzA1X2luaXRfYXJtCisrIyBkZWZpbmUgcG9seTEzMDVfYmxvY2tzIHBvbHkxMzA1X2Jsb2Nrc19hcm0KKysjIGRlZmluZSBwb2x5MTMwNV9lbWl0ICAgcG9seTEzMDVfZW1pdF9hcm0KKysuZ2xvYmwJcG9seTEzMDVfYmxvY2tzX25lb24KKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZChfX3RodW1iMl9fKQorKy5zeW50YXgJdW5pZmllZAorKy50aHVtYgorKyNlbHNlCisrLmNvZGUJMzIKKysjZW5kaWYKKysKKysudGV4dAorKworKy5nbG9ibAlwb2x5MTMwNV9lbWl0CisrLmdsb2JsCXBvbHkxMzA1X2Jsb2NrcworKy5nbG9ibAlwb2x5MTMwNV9pbml0CisrLnR5cGUJcG9seTEzMDVfaW5pdCwlZnVuY3Rpb24KKysuYWxpZ24JNQorK3BvbHkxMzA1X2luaXQ6CisrLkxwb2x5MTMwNV9pbml0OgorKwlzdG1kYglzcCEse3I0LXIxMX0KKysKKysJZW9yCXIzLHIzLHIzCisrCWNtcAlyMSwjMAorKwlzdHIJcjMsW3IwLCMwXQkJQCB6ZXJvIGhhc2ggdmFsdWUKKysJc3RyCXIzLFtyMCwjNF0KKysJc3RyCXIzLFtyMCwjOF0KKysJc3RyCXIzLFtyMCwjMTJdCisrCXN0cglyMyxbcjAsIzE2XQorKwlzdHIJcjMsW3IwLCMzNl0JCUAgY2xlYXIgaXNfYmFzZTJfMjYKKysJYWRkCXIwLHIwLCMyMAorKworKyNpZmRlZglfX3RodW1iMl9fCisrCWl0CWVxCisrI2VuZGlmCisrCW1vdmVxCXIwLCMwCisrCWJlcQkuTG5vX2tleQorKworKyNpZglfX0FSTV9NQVhfQVJDSF9fPj03CisrCW1vdglyMywjLTEKKysJc3RyCXIzLFtyMCwjMjhdCQlAIGltcG9zc2libGUga2V5IHBvd2VyIHZhbHVlCisrIyBpZm5kZWYgX19LRVJORUxfXworKwlhZHIJcjExLC5McG9seTEzMDVfaW5pdAorKwlsZHIJcjEyLC5MT1BFTlNTTF9hcm1jYXAKKysjIGVuZGlmCisrI2VuZGlmCisrCWxkcmIJcjQsW3IxLCMwXQorKwltb3YJcjEwLCMweDBmZmZmZmZmCisrCWxkcmIJcjUsW3IxLCMxXQorKwlhbmQJcjMscjEwLCMtNAkJQCAweDBmZmZmZmZjCisrCWxkcmIJcjYsW3IxLCMyXQorKwlsZHJiCXI3LFtyMSwjM10KKysJb3JyCXI0LHI0LHI1LGxzbCM4CisrCWxkcmIJcjUsW3IxLCM0XQorKwlvcnIJcjQscjQscjYsbHNsIzE2CisrCWxkcmIJcjYsW3IxLCM1XQorKwlvcnIJcjQscjQscjcsbHNsIzI0CisrCWxkcmIJcjcsW3IxLCM2XQorKwlhbmQJcjQscjQscjEwCisrCisrI2lmCV9fQVJNX01BWF9BUkNIX18+PTcgJiYgIWRlZmluZWQoX19LRVJORUxfXykKKysjIGlmICFkZWZpbmVkKF9XSU4zMikKKysJbGRyCXIxMixbcjExLHIxMl0JCUAgT1BFTlNTTF9hcm1jYXBfUAorKyMgZW5kaWYKKysjIGlmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9XSU4zMikKKysJbGRyCXIxMixbcjEyXQorKyMgZW5kaWYKKysjZW5kaWYKKysJbGRyYglyOCxbcjEsIzddCisrCW9ycglyNSxyNSxyNixsc2wjOAorKwlsZHJiCXI2LFtyMSwjOF0KKysJb3JyCXI1LHI1LHI3LGxzbCMxNgorKwlsZHJiCXI3LFtyMSwjOV0KKysJb3JyCXI1LHI1LHI4LGxzbCMyNAorKwlsZHJiCXI4LFtyMSwjMTBdCisrCWFuZAlyNSxyNSxyMworKworKyNpZglfX0FSTV9NQVhfQVJDSF9fPj03ICYmICFkZWZpbmVkKF9fS0VSTkVMX18pCisrCXRzdAlyMTIsI0FSTVY3X05FT04JCUAgY2hlY2sgZm9yIE5FT04KKysjIGlmZGVmCV9fdGh1bWIyX18KKysJYWRyCXI5LC5McG9seTEzMDVfYmxvY2tzX25lb24KKysJYWRyCXIxMSwuTHBvbHkxMzA1X2Jsb2NrcworKwlpdAluZQorKwltb3ZuZQlyMTEscjkKKysJYWRyCXIxMiwuTHBvbHkxMzA1X2VtaXQKKysJb3JyCXIxMSxyMTEsIzEJCUAgdGh1bWItaWZ5IGFkZHJlc3NlcworKwlvcnIJcjEyLHIxMiwjMQorKyMgZWxzZQorKwlhZGQJcjEyLHIxMSwjKC5McG9seTEzMDVfZW1pdC0uTHBvbHkxMzA1X2luaXQpCisrCWl0ZQllcQorKwlhZGRlcQlyMTEscjExLCMoLkxwb2x5MTMwNV9ibG9ja3MtLkxwb2x5MTMwNV9pbml0KQorKwlhZGRuZQlyMTEscjExLCMoLkxwb2x5MTMwNV9ibG9ja3NfbmVvbi0uTHBvbHkxMzA1X2luaXQpCisrIyBlbmRpZgorKyNlbmRpZgorKwlsZHJiCXI5LFtyMSwjMTFdCisrCW9ycglyNixyNixyNyxsc2wjOAorKwlsZHJiCXI3LFtyMSwjMTJdCisrCW9ycglyNixyNixyOCxsc2wjMTYKKysJbGRyYglyOCxbcjEsIzEzXQorKwlvcnIJcjYscjYscjksbHNsIzI0CisrCWxkcmIJcjksW3IxLCMxNF0KKysJYW5kCXI2LHI2LHIzCisrCisrCWxkcmIJcjEwLFtyMSwjMTVdCisrCW9ycglyNyxyNyxyOCxsc2wjOAorKwlzdHIJcjQsW3IwLCMwXQorKwlvcnIJcjcscjcscjksbHNsIzE2CisrCXN0cglyNSxbcjAsIzRdCisrCW9ycglyNyxyNyxyMTAsbHNsIzI0CisrCXN0cglyNixbcjAsIzhdCisrCWFuZAlyNyxyNyxyMworKwlzdHIJcjcsW3IwLCMxMl0KKysjaWYJX19BUk1fTUFYX0FSQ0hfXz49NyAmJiAhZGVmaW5lZChfX0tFUk5FTF9fKQorKwlzdG1pYQlyMix7cjExLHIxMn0JCUAgZmlsbCBmdW5jdGlvbnMgdGFibGUKKysJbW92CXIwLCMxCisrI2Vsc2UKKysJbW92CXIwLCMwCisrI2VuZGlmCisrLkxub19rZXk6CisrCWxkbWlhCXNwISx7cjQtcjExfQorKyNpZglfX0FSTV9BUkNIX18+PTUKKysJYngJbHIJCQkJQCBieAlscgorKyNlbHNlCisrCXRzdAlsciwjMQorKwltb3ZlcQlwYyxscgkJCUAgYmUgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBWNCwgeWV0CisrCS53b3JkCTB4ZTEyZmZmMWUJCQlAIGludGVyb3BlcmFibGUgd2l0aCBUaHVtYiBJU0E6LSkKKysjZW5kaWYKKysuc2l6ZQlwb2x5MTMwNV9pbml0LC4tcG9seTEzMDVfaW5pdAorKy50eXBlCXBvbHkxMzA1X2Jsb2NrcywlZnVuY3Rpb24KKysuYWxpZ24JNQorK3BvbHkxMzA1X2Jsb2NrczoKKysuTHBvbHkxMzA1X2Jsb2NrczoKKysJc3RtZGIJc3AhLHtyMy1yMTEsbHJ9CisrCisrCWFuZHMJcjIscjIsIy0xNgorKwliZXEJLkxub19kYXRhCisrCisrCWFkZAlyMixyMixyMQkJQCBlbmQgcG9pbnRlcgorKwlzdWIJc3Asc3AsIzMyCisrCisrI2lmIF9fQVJNX0FSQ0hfXzw3CisrCWxkbWlhCXIwLHtyNC1yMTJ9CQlAIGxvYWQgY29udGV4dAorKwlhZGQJcjAscjAsIzIwCisrCXN0cglyMixbc3AsIzE2XQkJQCBvZmZsb2FkIHN0dWZmCisrCXN0cglyMCxbc3AsIzEyXQorKyNlbHNlCisrCWxkcglscixbcjAsIzM2XQkJQCBpc19iYXNlMl8yNgorKwlsZG1pYQlyMCEse3I0LXI4fQkJQCBsb2FkIGhhc2ggdmFsdWUKKysJc3RyCXIyLFtzcCwjMTZdCQlAIG9mZmxvYWQgc3R1ZmYKKysJc3RyCXIwLFtzcCwjMTJdCisrCisrCWFkZHMJcjkscjQscjUsbHNsIzI2CUAgYmFzZSAyXjI2IC0+IGJhc2UgMl4zMgorKwltb3YJcjEwLHI1LGxzciM2CisrCWFkY3MJcjEwLHIxMCxyNixsc2wjMjAKKysJbW92CXIxMSxyNixsc3IjMTIKKysJYWRjcwlyMTEscjExLHI3LGxzbCMxNAorKwltb3YJcjEyLHI3LGxzciMxOAorKwlhZGNzCXIxMixyMTIscjgsbHNsIzgKKysJbW92CXIyLCMwCisrCXRlcQlsciwjMAorKwlzdHIJcjIsW3IwLCMxNl0JCUAgY2xlYXIgaXNfYmFzZTJfMjYKKysJYWRjCXIyLHIyLHI4LGxzciMyNAorKworKwlpdHR0dAluZQorKwltb3ZuZQlyNCxyOQkJCUAgY2hvb3NlIGJldHdlZW4gcmFkaXhlcworKwltb3ZuZQlyNSxyMTAKKysJbW92bmUJcjYscjExCisrCW1vdm5lCXI3LHIxMgorKwlsZG1pYQlyMCx7cjktcjEyfQkJQCBsb2FkIGtleQorKwlpdAluZQorKwltb3ZuZQlyOCxyMgorKyNlbmRpZgorKworKwltb3YJbHIscjEKKysJY21wCXIzLCMwCisrCXN0cglyMTAsW3NwLCMyMF0KKysJc3RyCXIxMSxbc3AsIzI0XQorKwlzdHIJcjEyLFtzcCwjMjhdCisrCWIJLkxvb3AKKysKKysuYWxpZ24JNAorKy5Mb29wOgorKyNpZiBfX0FSTV9BUkNIX188NworKwlsZHJiCXIwLFtscl0sIzE2CQlAIGxvYWQgaW5wdXQKKysjIGlmZGVmCV9fdGh1bWIyX18KKysJaXQJaGkKKysjIGVuZGlmCisrCWFkZGhpCXI4LHI4LCMxCQlAIDE8PDEyOAorKwlsZHJiCXIxLFtsciwjLTE1XQorKwlsZHJiCXIyLFtsciwjLTE0XQorKwlsZHJiCXIzLFtsciwjLTEzXQorKwlvcnIJcjEscjAscjEsbHNsIzgKKysJbGRyYglyMCxbbHIsIy0xMl0KKysJb3JyCXIyLHIxLHIyLGxzbCMxNgorKwlsZHJiCXIxLFtsciwjLTExXQorKwlvcnIJcjMscjIscjMsbHNsIzI0CisrCWxkcmIJcjIsW2xyLCMtMTBdCisrCWFkZHMJcjQscjQscjMJCUAgYWNjdW11bGF0ZSBpbnB1dAorKworKwlsZHJiCXIzLFtsciwjLTldCisrCW9ycglyMSxyMCxyMSxsc2wjOAorKwlsZHJiCXIwLFtsciwjLThdCisrCW9ycglyMixyMSxyMixsc2wjMTYKKysJbGRyYglyMSxbbHIsIy03XQorKwlvcnIJcjMscjIscjMsbHNsIzI0CisrCWxkcmIJcjIsW2xyLCMtNl0KKysJYWRjcwlyNSxyNSxyMworKworKwlsZHJiCXIzLFtsciwjLTVdCisrCW9ycglyMSxyMCxyMSxsc2wjOAorKwlsZHJiCXIwLFtsciwjLTRdCisrCW9ycglyMixyMSxyMixsc2wjMTYKKysJbGRyYglyMSxbbHIsIy0zXQorKwlvcnIJcjMscjIscjMsbHNsIzI0CisrCWxkcmIJcjIsW2xyLCMtMl0KKysJYWRjcwlyNixyNixyMworKworKwlsZHJiCXIzLFtsciwjLTFdCisrCW9ycglyMSxyMCxyMSxsc2wjOAorKwlzdHIJbHIsW3NwLCM4XQkJQCBvZmZsb2FkIGlucHV0IHBvaW50ZXIKKysJb3JyCXIyLHIxLHIyLGxzbCMxNgorKwlhZGQJcjEwLHIxMCxyMTAsbHNyIzIKKysJb3JyCXIzLHIyLHIzLGxzbCMyNAorKyNlbHNlCisrCWxkcglyMCxbbHJdLCMxNgkJQCBsb2FkIGlucHV0CisrCWl0CWhpCisrCWFkZGhpCXI4LHI4LCMxCQlAIHBhZGJpdAorKwlsZHIJcjEsW2xyLCMtMTJdCisrCWxkcglyMixbbHIsIy04XQorKwlsZHIJcjMsW2xyLCMtNF0KKysjIGlmZGVmCV9fQVJNRUJfXworKwlyZXYJcjAscjAKKysJcmV2CXIxLHIxCisrCXJldglyMixyMgorKwlyZXYJcjMscjMKKysjIGVuZGlmCisrCWFkZHMJcjQscjQscjAJCUAgYWNjdW11bGF0ZSBpbnB1dAorKwlzdHIJbHIsW3NwLCM4XQkJQCBvZmZsb2FkIGlucHV0IHBvaW50ZXIKKysJYWRjcwlyNSxyNSxyMQorKwlhZGQJcjEwLHIxMCxyMTAsbHNyIzIKKysJYWRjcwlyNixyNixyMgorKyNlbmRpZgorKwlhZGQJcjExLHIxMSxyMTEsbHNyIzIKKysJYWRjcwlyNyxyNyxyMworKwlhZGQJcjEyLHIxMixyMTIsbHNyIzIKKysKKysJdW11bGwJcjIscjMscjUscjkKKysJIGFkYwlyOCxyOCwjMAorKwl1bXVsbAlyMCxyMSxyNCxyOQorKwl1bWxhbAlyMixyMyxyOCxyMTAKKysJdW1sYWwJcjAscjEscjcscjEwCisrCWxkcglyMTAsW3NwLCMyMF0JCUAgcmVsb2FkIHIxMAorKwl1bWxhbAlyMixyMyxyNixyMTIKKysJdW1sYWwJcjAscjEscjUscjEyCisrCXVtbGFsCXIyLHIzLHI3LHIxMQorKwl1bWxhbAlyMCxyMSxyNixyMTEKKysJdW1sYWwJcjIscjMscjQscjEwCisrCXN0cglyMCxbc3AsIzBdCQlAIGZ1dHVyZSByNAorKwkgbXVsCXIwLHIxMSxyOAorKwlsZHIJcjExLFtzcCwjMjRdCQlAIHJlbG9hZCByMTEKKysJYWRkcwlyMixyMixyMQkJQCBkMSs9ZDA+PjMyCisrCSBlb3IJcjEscjEscjEKKysJYWRjCWxyLHIzLCMwCQlAIGZ1dHVyZSByNgorKwlzdHIJcjIsW3NwLCM0XQkJQCBmdXR1cmUgcjUKKysKKysJbXVsCXIyLHIxMixyOAorKwllb3IJcjMscjMscjMKKysJdW1sYWwJcjAscjEscjcscjEyCisrCWxkcglyMTIsW3NwLCMyOF0JCUAgcmVsb2FkIHIxMgorKwl1bWxhbAlyMixyMyxyNyxyOQorKwl1bWxhbAlyMCxyMSxyNixyOQorKwl1bWxhbAlyMixyMyxyNixyMTAKKysJdW1sYWwJcjAscjEscjUscjEwCisrCXVtbGFsCXIyLHIzLHI1LHIxMQorKwl1bWxhbAlyMCxyMSxyNCxyMTEKKysJdW1sYWwJcjIscjMscjQscjEyCisrCWxkcglyNCxbc3AsIzBdCisrCW11bAlyOCxyOSxyOAorKwlsZHIJcjUsW3NwLCM0XQorKworKwlhZGRzCXI2LGxyLHIwCQlAIGQyKz1kMT4+MzIKKysJbGRyCWxyLFtzcCwjOF0JCUAgcmVsb2FkIGlucHV0IHBvaW50ZXIKKysJYWRjCXIxLHIxLCMwCisrCWFkZHMJcjcscjIscjEJCUAgZDMrPWQyPj4zMgorKwlsZHIJcjAsW3NwLCMxNl0JCUAgcmVsb2FkIGVuZCBwb2ludGVyCisrCWFkYwlyMyxyMywjMAorKwlhZGQJcjgscjgscjMJCUAgaDQrPWQzPj4zMgorKworKwlhbmQJcjEscjgsIy00CisrCWFuZAlyOCxyOCwjMworKwlhZGQJcjEscjEscjEsbHNyIzIJCUAgKj01CisrCWFkZHMJcjQscjQscjEKKysJYWRjcwlyNSxyNSwjMAorKwlhZGNzCXI2LHI2LCMwCisrCWFkY3MJcjcscjcsIzAKKysJYWRjCXI4LHI4LCMwCisrCisrCWNtcAlyMCxscgkJCUAgZG9uZSB5ZXQ/CisrCWJoaQkuTG9vcAorKworKwlsZHIJcjAsW3NwLCMxMl0KKysJYWRkCXNwLHNwLCMzMgorKwlzdG1kYglyMCx7cjQtcjh9CQlAIHN0b3JlIHRoZSByZXN1bHQKKysKKysuTG5vX2RhdGE6CisrI2lmCV9fQVJNX0FSQ0hfXz49NQorKwlsZG1pYQlzcCEse3IzLXIxMSxwY30KKysjZWxzZQorKwlsZG1pYQlzcCEse3IzLXIxMSxscn0KKysJdHN0CWxyLCMxCisrCW1vdmVxCXBjLGxyCQkJQCBiZSBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIFY0LCB5ZXQKKysJLndvcmQJMHhlMTJmZmYxZQkJCUAgaW50ZXJvcGVyYWJsZSB3aXRoIFRodW1iIElTQTotKQorKyNlbmRpZgorKy5zaXplCXBvbHkxMzA1X2Jsb2NrcywuLXBvbHkxMzA1X2Jsb2NrcworKy50eXBlCXBvbHkxMzA1X2VtaXQsJWZ1bmN0aW9uCisrLmFsaWduCTUKKytwb2x5MTMwNV9lbWl0OgorKy5McG9seTEzMDVfZW1pdDoKKysJc3RtZGIJc3AhLHtyNC1yMTF9CisrCisrCWxkbWlhCXIwLHtyMy1yN30KKysKKysjaWYgX19BUk1fQVJDSF9fPj03CisrCWxkcglpcCxbcjAsIzM2XQkJQCBpc19iYXNlMl8yNgorKworKwlhZGRzCXI4LHIzLHI0LGxzbCMyNglAIGJhc2UgMl4yNiAtPiBiYXNlIDJeMzIKKysJbW92CXI5LHI0LGxzciM2CisrCWFkY3MJcjkscjkscjUsbHNsIzIwCisrCW1vdglyMTAscjUsbHNyIzEyCisrCWFkY3MJcjEwLHIxMCxyNixsc2wjMTQKKysJbW92CXIxMSxyNixsc3IjMTgKKysJYWRjcwlyMTEscjExLHI3LGxzbCM4CisrCW1vdglyMCwjMAorKwlhZGMJcjAscjAscjcsbHNyIzI0CisrCisrCXRzdAlpcCxpcAorKwlpdHR0dAluZQorKwltb3ZuZQlyMyxyOAorKwltb3ZuZQlyNCxyOQorKwltb3ZuZQlyNSxyMTAKKysJbW92bmUJcjYscjExCisrCWl0CW5lCisrCW1vdm5lCXI3LHIwCisrI2VuZGlmCisrCisrCWFkZHMJcjgscjMsIzUJCUAgY29tcGFyZSB0byBtb2R1bHVzCisrCWFkY3MJcjkscjQsIzAKKysJYWRjcwlyMTAscjUsIzAKKysJYWRjcwlyMTEscjYsIzAKKysJYWRjCXIwLHI3LCMwCisrCXRzdAlyMCwjNAkJCUAgZGlkIGl0IGNhcnJ5L2JvcnJvdz8KKysKKysjaWZkZWYJX190aHVtYjJfXworKwlpdAluZQorKyNlbmRpZgorKwltb3ZuZQlyMyxyOAorKwlsZHIJcjgsW3IyLCMwXQorKyNpZmRlZglfX3RodW1iMl9fCisrCWl0CW5lCisrI2VuZGlmCisrCW1vdm5lCXI0LHI5CisrCWxkcglyOSxbcjIsIzRdCisrI2lmZGVmCV9fdGh1bWIyX18KKysJaXQJbmUKKysjZW5kaWYKKysJbW92bmUJcjUscjEwCisrCWxkcglyMTAsW3IyLCM4XQorKyNpZmRlZglfX3RodW1iMl9fCisrCWl0CW5lCisrI2VuZGlmCisrCW1vdm5lCXI2LHIxMQorKwlsZHIJcjExLFtyMiwjMTJdCisrCisrCWFkZHMJcjMscjMscjgKKysJYWRjcwlyNCxyNCxyOQorKwlhZGNzCXI1LHI1LHIxMAorKwlhZGMJcjYscjYscjExCisrCisrI2lmIF9fQVJNX0FSQ0hfXz49NworKyMgaWZkZWYgX19BUk1FQl9fCisrCXJldglyMyxyMworKwlyZXYJcjQscjQKKysJcmV2CXI1LHI1CisrCXJldglyNixyNgorKyMgZW5kaWYKKysJc3RyCXIzLFtyMSwjMF0KKysJc3RyCXI0LFtyMSwjNF0KKysJc3RyCXI1LFtyMSwjOF0KKysJc3RyCXI2LFtyMSwjMTJdCisrI2Vsc2UKKysJc3RyYglyMyxbcjEsIzBdCisrCW1vdglyMyxyMyxsc3IjOAorKwlzdHJiCXI0LFtyMSwjNF0KKysJbW92CXI0LHI0LGxzciM4CisrCXN0cmIJcjUsW3IxLCM4XQorKwltb3YJcjUscjUsbHNyIzgKKysJc3RyYglyNixbcjEsIzEyXQorKwltb3YJcjYscjYsbHNyIzgKKysKKysJc3RyYglyMyxbcjEsIzFdCisrCW1vdglyMyxyMyxsc3IjOAorKwlzdHJiCXI0LFtyMSwjNV0KKysJbW92CXI0LHI0LGxzciM4CisrCXN0cmIJcjUsW3IxLCM5XQorKwltb3YJcjUscjUsbHNyIzgKKysJc3RyYglyNixbcjEsIzEzXQorKwltb3YJcjYscjYsbHNyIzgKKysKKysJc3RyYglyMyxbcjEsIzJdCisrCW1vdglyMyxyMyxsc3IjOAorKwlzdHJiCXI0LFtyMSwjNl0KKysJbW92CXI0LHI0LGxzciM4CisrCXN0cmIJcjUsW3IxLCMxMF0KKysJbW92CXI1LHI1LGxzciM4CisrCXN0cmIJcjYsW3IxLCMxNF0KKysJbW92CXI2LHI2LGxzciM4CisrCisrCXN0cmIJcjMsW3IxLCMzXQorKwlzdHJiCXI0LFtyMSwjN10KKysJc3RyYglyNSxbcjEsIzExXQorKwlzdHJiCXI2LFtyMSwjMTVdCisrI2VuZGlmCisrCWxkbWlhCXNwISx7cjQtcjExfQorKyNpZglfX0FSTV9BUkNIX18+PTUKKysJYngJbHIJCQkJQCBieAlscgorKyNlbHNlCisrCXRzdAlsciwjMQorKwltb3ZlcQlwYyxscgkJCUAgYmUgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCBWNCwgeWV0CisrCS53b3JkCTB4ZTEyZmZmMWUJCQlAIGludGVyb3BlcmFibGUgd2l0aCBUaHVtYiBJU0E6LSkKKysjZW5kaWYKKysuc2l6ZQlwb2x5MTMwNV9lbWl0LC4tcG9seTEzMDVfZW1pdAorKyNpZglfX0FSTV9NQVhfQVJDSF9fPj03CisrLmZwdQluZW9uCisrCisrLnR5cGUJcG9seTEzMDVfaW5pdF9uZW9uLCVmdW5jdGlvbgorKy5hbGlnbgk1CisrcG9seTEzMDVfaW5pdF9uZW9uOgorKy5McG9seTEzMDVfaW5pdF9uZW9uOgorKwlsZHIJcjMsW3IwLCM0OF0JCUAgZmlyc3QgdGFibGUgZWxlbWVudAorKwljbXAJcjMsIy0xCQkJQCBpcyB2YWx1ZSBpbXBvc3NpYmxlPworKwlibmUJLkxub19pbml0X25lb24KKysKKysJbGRyCXI0LFtyMCwjMjBdCQlAIGxvYWQga2V5IGJhc2UgMl4zMgorKwlsZHIJcjUsW3IwLCMyNF0KKysJbGRyCXI2LFtyMCwjMjhdCisrCWxkcglyNyxbcjAsIzMyXQorKworKwlhbmQJcjIscjQsIzB4MDNmZmZmZmYJQCBiYXNlIDJeMzIgLT4gYmFzZSAyXjI2CisrCW1vdglyMyxyNCxsc3IjMjYKKysJbW92CXI0LHI1LGxzciMyMAorKwlvcnIJcjMscjMscjUsbHNsIzYKKysJbW92CXI1LHI2LGxzciMxNAorKwlvcnIJcjQscjQscjYsbHNsIzEyCisrCW1vdglyNixyNyxsc3IjOAorKwlvcnIJcjUscjUscjcsbHNsIzE4CisrCWFuZAlyMyxyMywjMHgwM2ZmZmZmZgorKwlhbmQJcjQscjQsIzB4MDNmZmZmZmYKKysJYW5kCXI1LHI1LCMweDAzZmZmZmZmCisrCisrCXZkdXAuMzIJZDAscjIJCQlAIHJeMSBpbiBib3RoIGxhbmVzCisrCWFkZAlyMixyMyxyMyxsc2wjMgkJQCAqNQorKwl2ZHVwLjMyCWQxLHIzCisrCWFkZAlyMyxyNCxyNCxsc2wjMgorKwl2ZHVwLjMyCWQyLHIyCisrCXZkdXAuMzIJZDMscjQKKysJYWRkCXI0LHI1LHI1LGxzbCMyCisrCXZkdXAuMzIJZDQscjMKKysJdmR1cC4zMglkNSxyNQorKwlhZGQJcjUscjYscjYsbHNsIzIKKysJdmR1cC4zMglkNixyNAorKwl2ZHVwLjMyCWQ3LHI2CisrCXZkdXAuMzIJZDgscjUKKysKKysJbW92CXI1LCMyCQlAIGNvdW50ZXIKKysKKysuTHNxdWFyZV9uZW9uOgorKwlAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBACisrCUAgZDAgPSBoMCpyMCArIGg0KjUqcjEgKyBoMyo1KnIyICsgaDIqNSpyMyArIGgxKjUqcjQKKysJQCBkMSA9IGgxKnIwICsgaDAqcjEgICArIGg0KjUqcjIgKyBoMyo1KnIzICsgaDIqNSpyNAorKwlAIGQyID0gaDIqcjAgKyBoMSpyMSAgICsgaDAqcjIgICArIGg0KjUqcjMgKyBoMyo1KnI0CisrCUAgZDMgPSBoMypyMCArIGgyKnIxICAgKyBoMSpyMiAgICsgaDAqcjMgICArIGg0KjUqcjQKKysJQCBkNCA9IGg0KnIwICsgaDMqcjEgICArIGgyKnIyICAgKyBoMSpyMyAgICsgaDAqcjQKKysKKysJdm11bGwudTMyCXE1LGQwLGQwWzFdCisrCXZtdWxsLnUzMglxNixkMSxkMFsxXQorKwl2bXVsbC51MzIJcTcsZDMsZDBbMV0KKysJdm11bGwudTMyCXE4LGQ1LGQwWzFdCisrCXZtdWxsLnUzMglxOSxkNyxkMFsxXQorKworKwl2bWxhbC51MzIJcTUsZDcsZDJbMV0KKysJdm1sYWwudTMyCXE2LGQwLGQxWzFdCisrCXZtbGFsLnUzMglxNyxkMSxkMVsxXQorKwl2bWxhbC51MzIJcTgsZDMsZDFbMV0KKysJdm1sYWwudTMyCXE5LGQ1LGQxWzFdCisrCisrCXZtbGFsLnUzMglxNSxkNSxkNFsxXQorKwl2bWxhbC51MzIJcTYsZDcsZDRbMV0KKysJdm1sYWwudTMyCXE4LGQxLGQzWzFdCisrCXZtbGFsLnUzMglxNyxkMCxkM1sxXQorKwl2bWxhbC51MzIJcTksZDMsZDNbMV0KKysKKysJdm1sYWwudTMyCXE1LGQzLGQ2WzFdCisrCXZtbGFsLnUzMglxOCxkMCxkNVsxXQorKwl2bWxhbC51MzIJcTYsZDUsZDZbMV0KKysJdm1sYWwudTMyCXE3LGQ3LGQ2WzFdCisrCXZtbGFsLnUzMglxOSxkMSxkNVsxXQorKworKwl2bWxhbC51MzIJcTgsZDcsZDhbMV0KKysJdm1sYWwudTMyCXE1LGQxLGQ4WzFdCisrCXZtbGFsLnUzMglxNixkMyxkOFsxXQorKwl2bWxhbC51MzIJcTcsZDUsZDhbMV0KKysJdm1sYWwudTMyCXE5LGQwLGQ3WzFdCisrCisrCUBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAKKysJQCBsYXp5IHJlZHVjdGlvbiBhcyBkaXNjdXNzZWQgaW4gIk5FT04gY3J5cHRvIiBieSBELkouIEJlcm5zdGVpbgorKwlAIGFuZCBQLiBTY2h3YWJlCisrCUAKKysJQCBIMD4+K0gxPj4rSDI+PitIMz4+K0g0CisrCUAgSDM+PitIND4+KjUrSDA+PitIMQorKwlACisrCUAgVHJpdmlhLgorKwlACisrCUAgUmVzdWx0IG9mIG11bHRpcGxpY2F0aW9uIG9mIG4tYml0IG51bWJlciBieSBtLWJpdCBudW1iZXIgaXMKKysJQCBuK20gYml0cyB3aWRlLiBIb3dldmVyISBFdmVuIHRob3VnaCAyXm4gaXMgYSBuKzEtYml0IG51bWJlciwKKysJQCBtLWJpdCBudW1iZXIgbXVsdGlwbGllZCBieSAyXm4gaXMgc3RpbGwgbittIGJpdHMgd2lkZS4KKysJQAorKwlAIFN1bSBvZiB0d28gbi1iaXQgbnVtYmVycyBpcyBuKzEgYml0cyB3aWRlLCBzdW0gb2YgdGhyZWUgLSBuKzIsCisrCUAgYW5kIHNvIGlzIHN1bSBvZiBmb3VyLiBTdW0gb2YgMl5tIG4tbS1iaXQgbnVtYmVycyBhbmQgbi1iaXQKKysJQCBvbmUgaXMgbisxIGJpdHMgd2lkZS4KKysJQAorKwlAID4+KyBkZW5vdGVzIEhuZXh0ICs9IEhuPj4yNiwgSG4gJj0gMHgzZmZmZmZmLiBUaGlzIG1lYW5zIHRoYXQKKysJQCBIMCwgSDIsIEgzIGFyZSBndWFyYW50ZWVkIHRvIGJlIDI2IGJpdHMgd2lkZSwgd2hpbGUgSDEgYW5kIEg0CisrCUAgY2FuIGJlIDI3LiBIb3dldmVyISBJbiBjYXNlcyB3aGVuIHRoZWlyIHdpZHRoIGV4Y2VlZHMgMjYgYml0cworKwlAIHRoZXkgYXJlIGxpbWl0ZWQgYnkgMl4yNisyXjYuIFRoaXMgaW4gdHVybiBtZWFucyB0aGF0ICpzdW0qCisrCUAgb2YgdGhlIHByb2R1Y3RzIHdpdGggdGhlc2UgdmFsdWVzIGNhbiBzdGlsbCBiZSB2aWV3ZWQgYXMgc3VtCisrCUAgb2YgNTItYml0IG51bWJlcnMgYXMgbG9uZyBhcyB0aGUgYW1vdW50IG9mIGFkZGVuZHMgaXMgbm90IGEKKysJQCBwb3dlciBvZiAyLiBGb3IgZXhhbXBsZSwKKysJQAorKwlAIEg0ID0gSDQqUjAgKyBIMypSMSArIEgyKlIyICsgSDEqUjMgKyBIMCAqIFI0LAorKwlACisrCUAgd2hpY2ggY2FuJ3QgYmUgbGFyZ2VyIHRoYW4gNSAqICgyXjI2ICsgMl42KSAqICgyXjI2ICsgMl42KSwgb3IKKysJQCA1ICogKDJeNTIgKyAyKjJeMzIgKyAyXjEyKSwgd2hpY2ggaW4gdHVybiBpcyBzbWFsbGVyIHRoYW4KKysJQCA4ICogKDJeNTIpIG9yIDJeNTUuIEhvd2V2ZXIsIHRoZSB2YWx1ZSBpcyB0aGVuIG11bHRpcGxpZWQgYnkKKysJQCBieSA1LCBzbyB3ZSBzaG91bGQgYmUgbG9va2luZyBhdCA1ICogNSAqICgyXjUyICsgMl4zMyArIDJeMTIpLAorKwlAIHdoaWNoIGlzIGxlc3MgdGhhbiAzMiAqICgyXjUyKSBvciAyXjU3LiBBbmQgd2hlbiBwcm9jZXNzaW5nCisrCUAgZGF0YSB3ZSBhcmUgbG9va2luZyBhdCB0cmlwbGUgYXMgbWFueSBhZGRlbmRzLi4uCisrCUAKKysJQCBJbiBrZXkgc2V0dXAgcHJvY2VkdXJlIHByZS1yZWR1Y2VkIEgwIGlzIGxpbWl0ZWQgYnkgNSo0KzEgYW5kCisrCUAgNSpINCAtIGJ5IDUqNSA1Mi1iaXQgYWRkZW5kcywgb3IgNTcgYml0cy4gQnV0IHdoZW4gaGFzaGluZyB0aGUKKysJQCBpbnB1dCBIMCBpcyBsaW1pdGVkIGJ5ICg1KjQrMSkqMyBhZGRlbmRzLCBvciA1OCBiaXRzLCB3aGlsZQorKwlAIDUqSDQgYnkgNSo1KjMsIG9yIDU5WyFdIGJpdHMuIEhvdyBpcyB0aGlzIHJlbGV2YW50PyB2bWxhbC51MzIKKysJQCBpbnN0cnVjdGlvbiBhY2NlcHRzIDJ4MzItYml0IGlucHV0IGFuZCB3cml0ZXMgMng2NC1iaXQgcmVzdWx0LgorKwlAIFRoaXMgbWVhbnMgdGhhdCByZXN1bHQgb2YgcmVkdWN0aW9uIGhhdmUgdG8gYmUgY29tcHJlc3NlZCB1cG9uCisrCUAgbG9vcCB3cmFwLWFyb3VuZC4gVGhpcyBjYW4gYmUgZG9uZSBpbiB0aGUgcHJvY2VzcyBvZiByZWR1Y3Rpb24KKysJQCB0byBtaW5pbWl6ZSBhbW91bnQgb2YgaW5zdHJ1Y3Rpb25zIFthcyB3ZWxsIGFzIGFtb3VudCBvZgorKwlAIDEyOC1iaXQgaW5zdHJ1Y3Rpb25zLCB3aGljaCBiZW5lZml0cyBsb3ctZW5kIHByb2Nlc3NvcnNdLCBidXQKKysJQCBvbmUgaGFzIHRvIHdhdGNoIGZvciBIMiAod2hpY2ggaXMgbmFycm93ZXIgdGhhbiBIMCkgYW5kIDUqSDQKKysJQCBub3QgYmVpbmcgd2lkZXIgdGhhbiA1OCBiaXRzLCBzbyB0aGF0IHJlc3VsdCBvZiByaWdodCBzaGlmdAorKwlAIGJ5IDI2IGJpdHMgZml0cyBpbiAzMiBiaXRzLiBUaGlzIGlzIGFsc28gdXNlZnVsIG9uIHg4NiwKKysJQCBiZWNhdXNlIGl0IGFsbG93cyB0byB1c2UgcGFkZGQgaW4gcGxhY2UgZm9yIHBhZGRxLCB3aGljaAorKwlAIGJlbmVmaXRzIEF0b20sIHdoZXJlIHBhZGRxIGlzIHJpZGljdWxvdXNseSBzbG93LgorKworKwl2c2hyLnU2NAlxMTUscTgsIzI2CisrCXZtb3ZuLmk2NAlkMTYscTgKKysJIHZzaHIudTY0CXE0LHE1LCMyNgorKwkgdm1vdm4uaTY0CWQxMCxxNQorKwl2YWRkLmk2NAlxOSxxOSxxMTUJCUAgaDMgLT4gaDQKKysJdmJpYy5pMzIJZDE2LCMweGZjMDAwMDAwCUAgJj0weDAzZmZmZmZmCisrCSB2YWRkLmk2NAlxNixxNixxNAkJQCBoMCAtPiBoMQorKwkgdmJpYy5pMzIJZDEwLCMweGZjMDAwMDAwCisrCisrCXZzaHJuLnU2NAlkMzAscTksIzI2CisrCXZtb3ZuLmk2NAlkMTgscTkKKysJIHZzaHIudTY0CXE0LHE2LCMyNgorKwkgdm1vdm4uaTY0CWQxMixxNgorKwkgdmFkZC5pNjQJcTcscTcscTQJCUAgaDEgLT4gaDIKKysJdmJpYy5pMzIJZDE4LCMweGZjMDAwMDAwCisrCSB2YmljLmkzMglkMTIsIzB4ZmMwMDAwMDAKKysKKysJdmFkZC5pMzIJZDEwLGQxMCxkMzAKKysJdnNobC51MzIJZDMwLGQzMCwjMgorKwkgdnNocm4udTY0CWQ4LHE3LCMyNgorKwkgdm1vdm4uaTY0CWQxNCxxNworKwl2YWRkLmkzMglkMTAsZDEwLGQzMAlAIGg0IC0+IGgwCisrCSB2YWRkLmkzMglkMTYsZDE2LGQ4CUAgaDIgLT4gaDMKKysJIHZiaWMuaTMyCWQxNCwjMHhmYzAwMDAwMAorKworKwl2c2hyLnUzMglkMzAsZDEwLCMyNgorKwl2YmljLmkzMglkMTAsIzB4ZmMwMDAwMDAKKysJIHZzaHIudTMyCWQ4LGQxNiwjMjYKKysJIHZiaWMuaTMyCWQxNiwjMHhmYzAwMDAwMAorKwl2YWRkLmkzMglkMTIsZDEyLGQzMAlAIGgwIC0+IGgxCisrCSB2YWRkLmkzMglkMTgsZDE4LGQ4CUAgaDMgLT4gaDQKKysKKysJc3VicwkJcjUscjUsIzEKKysJYmVxCQkuTHNxdWFyZV9icmVha19uZW9uCisrCisrCWFkZAkJcjYscjAsIyg0OCswKjkqNCkKKysJYWRkCQlyNyxyMCwjKDQ4KzEqOSo0KQorKworKwl2dHJuLjMyCQlkMCxkMTAJCUAgcl4yOnJeMQorKwl2dHJuLjMyCQlkMyxkMTQKKysJdnRybi4zMgkJZDUsZDE2CisrCXZ0cm4uMzIJCWQxLGQxMgorKwl2dHJuLjMyCQlkNyxkMTgKKysKKysJdnNobC51MzIJZDQsZDMsIzIJCUAgKjUKKysJdnNobC51MzIJZDYsZDUsIzIKKysJdnNobC51MzIJZDIsZDEsIzIKKysJdnNobC51MzIJZDgsZDcsIzIKKysJdmFkZC5pMzIJZDQsZDQsZDMKKysJdmFkZC5pMzIJZDIsZDIsZDEKKysJdmFkZC5pMzIJZDYsZDYsZDUKKysJdmFkZC5pMzIJZDgsZDgsZDcKKysKKysJdnN0NC4zMgkJe2QwWzBdLGQxWzBdLGQyWzBdLGQzWzBdfSxbcjZdIQorKwl2c3Q0LjMyCQl7ZDBbMV0sZDFbMV0sZDJbMV0sZDNbMV19LFtyN10hCisrCXZzdDQuMzIJCXtkNFswXSxkNVswXSxkNlswXSxkN1swXX0sW3I2XSEKKysJdnN0NC4zMgkJe2Q0WzFdLGQ1WzFdLGQ2WzFdLGQ3WzFdfSxbcjddIQorKwl2c3QxLjMyCQl7ZDhbMF19LFtyNiw6MzJdCisrCXZzdDEuMzIJCXtkOFsxXX0sW3I3LDozMl0KKysKKysJYgkJLkxzcXVhcmVfbmVvbgorKworKy5hbGlnbgk0CisrLkxzcXVhcmVfYnJlYWtfbmVvbjoKKysJYWRkCQlyNixyMCwjKDQ4KzIqNCo5KQorKwlhZGQJCXI3LHIwLCMoNDgrMyo0KjkpCisrCisrCXZtb3YJCWQwLGQxMAkJQCByXjQ6cl4zCisrCXZzaGwudTMyCWQyLGQxMiwjMgkJQCAqNQorKwl2bW92CQlkMSxkMTIKKysJdnNobC51MzIJZDQsZDE0LCMyCisrCXZtb3YJCWQzLGQxNAorKwl2c2hsLnUzMglkNixkMTYsIzIKKysJdm1vdgkJZDUsZDE2CisrCXZzaGwudTMyCWQ4LGQxOCwjMgorKwl2bW92CQlkNyxkMTgKKysJdmFkZC5pMzIJZDIsZDIsZDEyCisrCXZhZGQuaTMyCWQ0LGQ0LGQxNAorKwl2YWRkLmkzMglkNixkNixkMTYKKysJdmFkZC5pMzIJZDgsZDgsZDE4CisrCisrCXZzdDQuMzIJCXtkMFswXSxkMVswXSxkMlswXSxkM1swXX0sW3I2XSEKKysJdnN0NC4zMgkJe2QwWzFdLGQxWzFdLGQyWzFdLGQzWzFdfSxbcjddIQorKwl2c3Q0LjMyCQl7ZDRbMF0sZDVbMF0sZDZbMF0sZDdbMF19LFtyNl0hCisrCXZzdDQuMzIJCXtkNFsxXSxkNVsxXSxkNlsxXSxkN1sxXX0sW3I3XSEKKysJdnN0MS4zMgkJe2Q4WzBdfSxbcjZdCisrCXZzdDEuMzIJCXtkOFsxXX0sW3I3XQorKworKy5Mbm9faW5pdF9uZW9uOgorKwlieAlscgkJCQlAIGJ4CWxyCisrLnNpemUJcG9seTEzMDVfaW5pdF9uZW9uLC4tcG9seTEzMDVfaW5pdF9uZW9uCisrCisrLnR5cGUJcG9seTEzMDVfYmxvY2tzX25lb24sJWZ1bmN0aW9uCisrLmFsaWduCTUKKytwb2x5MTMwNV9ibG9ja3NfbmVvbjoKKysuTHBvbHkxMzA1X2Jsb2Nrc19uZW9uOgorKwlsZHIJaXAsW3IwLCMzNl0JCUAgaXNfYmFzZTJfMjYKKysKKysJY21wCXIyLCM2NAorKwlibG8JLkxwb2x5MTMwNV9ibG9ja3MKKysKKysJc3RtZGIJc3AhLHtyNC1yN30KKysJdnN0bWRiCXNwISx7ZDgtZDE1fQkJQCBBQkkgc3BlY2lmaWNhdGlvbiBzYXlzIHNvCisrCisrCXRzdAlpcCxpcAkJCUAgaXNfYmFzZTJfMjY/CisrCWJuZQkuTGJhc2UyXzI2X25lb24KKysKKysJc3RtZGIJc3AhLHtyMS1yMyxscn0KKysJYmwJLkxwb2x5MTMwNV9pbml0X25lb24KKysKKysJbGRyCXI0LFtyMCwjMF0JCUAgbG9hZCBoYXNoIHZhbHVlIGJhc2UgMl4zMgorKwlsZHIJcjUsW3IwLCM0XQorKwlsZHIJcjYsW3IwLCM4XQorKwlsZHIJcjcsW3IwLCMxMl0KKysJbGRyCWlwLFtyMCwjMTZdCisrCisrCWFuZAlyMixyNCwjMHgwM2ZmZmZmZglAIGJhc2UgMl4zMiAtPiBiYXNlIDJeMjYKKysJbW92CXIzLHI0LGxzciMyNgorKwkgdmVvcglkMTAsZDEwLGQxMAorKwltb3YJcjQscjUsbHNyIzIwCisrCW9ycglyMyxyMyxyNSxsc2wjNgorKwkgdmVvcglkMTIsZDEyLGQxMgorKwltb3YJcjUscjYsbHNyIzE0CisrCW9ycglyNCxyNCxyNixsc2wjMTIKKysJIHZlb3IJZDE0LGQxNCxkMTQKKysJbW92CXI2LHI3LGxzciM4CisrCW9ycglyNSxyNSxyNyxsc2wjMTgKKysJIHZlb3IJZDE2LGQxNixkMTYKKysJYW5kCXIzLHIzLCMweDAzZmZmZmZmCisrCW9ycglyNixyNixpcCxsc2wjMjQKKysJIHZlb3IJZDE4LGQxOCxkMTgKKysJYW5kCXI0LHI0LCMweDAzZmZmZmZmCisrCW1vdglyMSwjMQorKwlhbmQJcjUscjUsIzB4MDNmZmZmZmYKKysJc3RyCXIxLFtyMCwjMzZdCQlAIHNldCBpc19iYXNlMl8yNgorKworKwl2bW92LjMyCWQxMFswXSxyMgorKwl2bW92LjMyCWQxMlswXSxyMworKwl2bW92LjMyCWQxNFswXSxyNAorKwl2bW92LjMyCWQxNlswXSxyNQorKwl2bW92LjMyCWQxOFswXSxyNgorKwlhZHIJcjUsLkx6ZXJvcworKworKwlsZG1pYQlzcCEse3IxLXIzLGxyfQorKwliCS5MaGFzaF9sb2FkZWQKKysKKysuYWxpZ24JNAorKy5MYmFzZTJfMjZfbmVvbjoKKysJQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAorKwlAIGxvYWQgaGFzaCB2YWx1ZQorKworKwl2ZW9yCQlkMTAsZDEwLGQxMAorKwl2ZW9yCQlkMTIsZDEyLGQxMgorKwl2ZW9yCQlkMTQsZDE0LGQxNAorKwl2ZW9yCQlkMTYsZDE2LGQxNgorKwl2ZW9yCQlkMTgsZDE4LGQxOAorKwl2bGQ0LjMyCQl7ZDEwWzBdLGQxMlswXSxkMTRbMF0sZDE2WzBdfSxbcjBdIQorKwlhZHIJCXI1LC5MemVyb3MKKysJdmxkMS4zMgkJe2QxOFswXX0sW3IwXQorKwlzdWIJCXIwLHIwLCMxNgkJQCByZXdpbmQKKysKKysuTGhhc2hfbG9hZGVkOgorKwlhZGQJCXI0LHIxLCMzMgorKwltb3YJCXIzLHIzLGxzbCMyNAorKwl0c3QJCXIyLCMzMQorKwliZXEJCS5MZXZlbgorKworKwl2bGQ0LjMyCQl7ZDIwWzBdLGQyMlswXSxkMjRbMF0sZDI2WzBdfSxbcjFdIQorKwl2bW92LjMyCQlkMjhbMF0scjMKKysJc3ViCQlyMixyMiwjMTYKKysJYWRkCQlyNCxyMSwjMzIKKysKKysjIGlmZGVmCV9fQVJNRUJfXworKwl2cmV2MzIuOAlxMTAscTEwCisrCXZyZXYzMi44CXExMyxxMTMKKysJdnJldjMyLjgJcTExLHExMQorKwl2cmV2MzIuOAlxMTIscTEyCisrIyBlbmRpZgorKwl2c3JpLnUzMglkMjgsZDI2LCM4CUAgYmFzZSAyXjMyIC0+IGJhc2UgMl4yNgorKwl2c2hsLnUzMglkMjYsZDI2LCMxOAorKworKwl2c3JpLnUzMglkMjYsZDI0LCMxNAorKwl2c2hsLnUzMglkMjQsZDI0LCMxMgorKwl2YWRkLmkzMglkMjksZDI4LGQxOAlAIGFkZCBoYXNoIHZhbHVlIGFuZCBtb3ZlIHRvICNoaQorKworKwl2YmljLmkzMglkMjYsIzB4ZmMwMDAwMDAKKysJdnNyaS51MzIJZDI0LGQyMiwjMjAKKysJdnNobC51MzIJZDIyLGQyMiwjNgorKworKwl2YmljLmkzMglkMjQsIzB4ZmMwMDAwMDAKKysJdnNyaS51MzIJZDIyLGQyMCwjMjYKKysJdmFkZC5pMzIJZDI3LGQyNixkMTYKKysKKysJdmJpYy5pMzIJZDIwLCMweGZjMDAwMDAwCisrCXZiaWMuaTMyCWQyMiwjMHhmYzAwMDAwMAorKwl2YWRkLmkzMglkMjUsZDI0LGQxNAorKworKwl2YWRkLmkzMglkMjEsZDIwLGQxMAorKwl2YWRkLmkzMglkMjMsZDIyLGQxMgorKworKwltb3YJCXI3LHI1CisrCWFkZAkJcjYscjAsIzQ4CisrCisrCWNtcAkJcjIscjIKKysJYgkJLkxvbmdfdGFpbAorKworKy5hbGlnbgk0CisrLkxldmVuOgorKwlzdWJzCQlyMixyMiwjNjQKKysJaXQJCWxvCisrCW1vdmxvCQlyNCxyNQorKworKwl2bW92LmkzMglxMTQsIzE8PDI0CQlAIHBhZGJpdCwgeWVzLCBhbHdheXMKKysJdmxkNC4zMgkJe2QyMCxkMjIsZDI0LGQyNn0sW3IxXQlAIGlucFswOjFdCisrCWFkZAkJcjEscjEsIzY0CisrCXZsZDQuMzIJCXtkMjEsZDIzLGQyNSxkMjd9LFtyNF0JQCBpbnBbMjozXSAob3IgMCkKKysJYWRkCQlyNCxyNCwjNjQKKysJaXR0CQloaQorKwlhZGRoaQkJcjcscjAsIyg0OCsxKjkqNCkKKysJYWRkaGkJCXI2LHIwLCMoNDgrMyo5KjQpCisrCisrIyBpZmRlZglfX0FSTUVCX18KKysJdnJldjMyLjgJcTEwLHExMAorKwl2cmV2MzIuOAlxMTMscTEzCisrCXZyZXYzMi44CXExMSxxMTEKKysJdnJldjMyLjgJcTEyLHExMgorKyMgZW5kaWYKKysJdnNyaS51MzIJcTE0LHExMywjOAkJQCBiYXNlIDJeMzIgLT4gYmFzZSAyXjI2CisrCXZzaGwudTMyCXExMyxxMTMsIzE4CisrCisrCXZzcmkudTMyCXExMyxxMTIsIzE0CisrCXZzaGwudTMyCXExMixxMTIsIzEyCisrCisrCXZiaWMuaTMyCXExMywjMHhmYzAwMDAwMAorKwl2c3JpLnUzMglxMTIscTExLCMyMAorKwl2c2hsLnUzMglxMTEscTExLCM2CisrCisrCXZiaWMuaTMyCXExMiwjMHhmYzAwMDAwMAorKwl2c3JpLnUzMglxMTEscTEwLCMyNgorKworKwl2YmljLmkzMglxMTAsIzB4ZmMwMDAwMDAKKysJdmJpYy5pMzIJcTExLCMweGZjMDAwMDAwCisrCisrCWJscwkJLkxza2lwX2xvb3AKKysKKysJdmxkNC4zMgkJe2QwWzFdLGQxWzFdLGQyWzFdLGQzWzFdfSxbcjddIQlAIGxvYWQgcl4yCisrCXZsZDQuMzIJCXtkMFswXSxkMVswXSxkMlswXSxkM1swXX0sW3I2XSEJQCBsb2FkIHJeNAorKwl2bGQ0LjMyCQl7ZDRbMV0sZDVbMV0sZDZbMV0sZDdbMV19LFtyN10hCisrCXZsZDQuMzIJCXtkNFswXSxkNVswXSxkNlswXSxkN1swXX0sW3I2XSEKKysJYgkJLkxvb3BfbmVvbgorKworKy5hbGlnbgk1CisrLkxvb3BfbmVvbjoKKysJQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAorKwlAICgoaW5wWzBdKnJeNCtpbnBbMl0qcl4yK2lucFs0XSkqcl40K2lucFs2XSpyXjIKKysJQCAoKGlucFsxXSpyXjQraW5wWzNdKnJeMitpbnBbNV0pKnJeMytpbnBbN10qcgorKwlAICAgX19fX19fX19fX19fX19fX19fXy8KKysJQCAoKGlucFswXSpyXjQraW5wWzJdKnJeMitpbnBbNF0pKnJeNCtpbnBbNl0qcl4yK2lucFs4XSkqcl4yCisrCUAgKChpbnBbMV0qcl40K2lucFszXSpyXjIraW5wWzVdKSpyXjQraW5wWzddKnJeMitpbnBbOV0pKnIKKysJQCAgIF9fX19fX19fX19fX19fX19fX18vIF9fX19fX19fX19fX19fX19fX19fLworKwlACisrCUAgTm90ZSB0aGF0IHdlIHN0YXJ0IHdpdGggaW5wWzI6M10qcl4yLiBUaGlzIGlzIGJlY2F1c2UgaXQKKysJQCBkb2Vzbid0IGRlcGVuZCBvbiByZWR1Y3Rpb24gaW4gcHJldmlvdXMgaXRlcmF0aW9uLgorKwlAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBACisrCUAgZDQgPSBoNCpyMCArIGgzKnIxICAgKyBoMipyMiAgICsgaDEqcjMgICArIGgwKnI0CisrCUAgZDMgPSBoMypyMCArIGgyKnIxICAgKyBoMSpyMiAgICsgaDAqcjMgICArIGg0KjUqcjQKKysJQCBkMiA9IGgyKnIwICsgaDEqcjEgICArIGgwKnIyICAgKyBoNCo1KnIzICsgaDMqNSpyNAorKwlAIGQxID0gaDEqcjAgKyBoMCpyMSAgICsgaDQqNSpyMiArIGgzKjUqcjMgKyBoMio1KnI0CisrCUAgZDAgPSBoMCpyMCArIGg0KjUqcjEgKyBoMyo1KnIyICsgaDIqNSpyMyArIGgxKjUqcjQKKysKKysJQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAorKwlAIGlucFsyOjNdKnJeMgorKworKwl2YWRkLmkzMglkMjQsZDI0LGQxNAlAIGFjY3VtdWxhdGUgaW5wWzA6MV0KKysJdm11bGwudTMyCXE3LGQyNSxkMFsxXQorKwl2YWRkLmkzMglkMjAsZDIwLGQxMAorKwl2bXVsbC51MzIJcTUsZDIxLGQwWzFdCisrCXZhZGQuaTMyCWQyNixkMjYsZDE2CisrCXZtdWxsLnUzMglxOCxkMjcsZDBbMV0KKysJdm1sYWwudTMyCXE3LGQyMyxkMVsxXQorKwl2YWRkLmkzMglkMjIsZDIyLGQxMgorKwl2bXVsbC51MzIJcTYsZDIzLGQwWzFdCisrCisrCXZhZGQuaTMyCWQyOCxkMjgsZDE4CisrCXZtdWxsLnUzMglxOSxkMjksZDBbMV0KKysJc3VicwkJcjIscjIsIzY0CisrCXZtbGFsLnUzMglxNSxkMjksZDJbMV0KKysJaXQJCWxvCisrCW1vdmxvCQlyNCxyNQorKwl2bWxhbC51MzIJcTgsZDI1LGQxWzFdCisrCXZsZDEuMzIJCWQ4WzFdLFtyNyw6MzJdCisrCXZtbGFsLnUzMglxNixkMjEsZDFbMV0KKysJdm1sYWwudTMyCXE5LGQyNyxkMVsxXQorKworKwl2bWxhbC51MzIJcTUsZDI3LGQ0WzFdCisrCXZtbGFsLnUzMglxOCxkMjMsZDNbMV0KKysJdm1sYWwudTMyCXE5LGQyNSxkM1sxXQorKwl2bWxhbC51MzIJcTYsZDI5LGQ0WzFdCisrCXZtbGFsLnUzMglxNyxkMjEsZDNbMV0KKysKKysJdm1sYWwudTMyCXE4LGQyMSxkNVsxXQorKwl2bWxhbC51MzIJcTUsZDI1LGQ2WzFdCisrCXZtbGFsLnUzMglxOSxkMjMsZDVbMV0KKysJdm1sYWwudTMyCXE2LGQyNyxkNlsxXQorKwl2bWxhbC51MzIJcTcsZDI5LGQ2WzFdCisrCisrCXZtbGFsLnUzMglxOCxkMjksZDhbMV0KKysJdm1sYWwudTMyCXE1LGQyMyxkOFsxXQorKwl2bWxhbC51MzIJcTksZDIxLGQ3WzFdCisrCXZtbGFsLnUzMglxNixkMjUsZDhbMV0KKysJdm1sYWwudTMyCXE3LGQyNyxkOFsxXQorKworKwl2bGQ0LjMyCQl7ZDIxLGQyMyxkMjUsZDI3fSxbcjRdCUAgaW5wWzI6M10gKG9yIDApCisrCWFkZAkJcjQscjQsIzY0CisrCisrCUBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAKKysJQCAoaGFzaCtpbnBbMDoxXSkqcl40IGFuZCBhY2N1bXVsYXRlCisrCisrCXZtbGFsLnUzMglxOCxkMjYsZDBbMF0KKysJdm1sYWwudTMyCXE1LGQyMCxkMFswXQorKwl2bWxhbC51MzIJcTksZDI4LGQwWzBdCisrCXZtbGFsLnUzMglxNixkMjIsZDBbMF0KKysJdm1sYWwudTMyCXE3LGQyNCxkMFswXQorKwl2bGQxLjMyCQlkOFswXSxbcjYsOjMyXQorKworKwl2bWxhbC51MzIJcTgsZDI0LGQxWzBdCisrCXZtbGFsLnUzMglxNSxkMjgsZDJbMF0KKysJdm1sYWwudTMyCXE5LGQyNixkMVswXQorKwl2bWxhbC51MzIJcTYsZDIwLGQxWzBdCisrCXZtbGFsLnUzMglxNyxkMjIsZDFbMF0KKysKKysJdm1sYWwudTMyCXE4LGQyMixkM1swXQorKwl2bWxhbC51MzIJcTUsZDI2LGQ0WzBdCisrCXZtbGFsLnUzMglxOSxkMjQsZDNbMF0KKysJdm1sYWwudTMyCXE2LGQyOCxkNFswXQorKwl2bWxhbC51MzIJcTcsZDIwLGQzWzBdCisrCisrCXZtbGFsLnUzMglxOCxkMjAsZDVbMF0KKysJdm1sYWwudTMyCXE1LGQyNCxkNlswXQorKwl2bWxhbC51MzIJcTksZDIyLGQ1WzBdCisrCXZtbGFsLnUzMglxNixkMjYsZDZbMF0KKysJdm1sYWwudTMyCXE4LGQyOCxkOFswXQorKworKwl2bWxhbC51MzIJcTcsZDI4LGQ2WzBdCisrCXZtbGFsLnUzMglxNSxkMjIsZDhbMF0KKysJdm1sYWwudTMyCXE5LGQyMCxkN1swXQorKwl2bW92LmkzMglxMTQsIzE8PDI0CQlAIHBhZGJpdCwgeWVzLCBhbHdheXMKKysJdm1sYWwudTMyCXE2LGQyNCxkOFswXQorKwl2bWxhbC51MzIJcTcsZDI2LGQ4WzBdCisrCisrCXZsZDQuMzIJCXtkMjAsZDIyLGQyNCxkMjZ9LFtyMV0JQCBpbnBbMDoxXQorKwlhZGQJCXIxLHIxLCM2NAorKyMgaWZkZWYJX19BUk1FQl9fCisrCXZyZXYzMi44CXExMCxxMTAKKysJdnJldjMyLjgJcTExLHExMQorKwl2cmV2MzIuOAlxMTIscTEyCisrCXZyZXYzMi44CXExMyxxMTMKKysjIGVuZGlmCisrCisrCUBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAKKysJQCBsYXp5IHJlZHVjdGlvbiBpbnRlcmxlYXZlZCB3aXRoIGJhc2UgMl4zMiAtPiBiYXNlIDJeMjYgb2YKKysJQCBpbnBbMDozXSBwcmV2aW91c2x5IGxvYWRlZCB0byBxMTAtcTEzIGFuZCBzbWFzaGVkIHRvIHExMC1xMTQuCisrCisrCXZzaHIudTY0CXExNSxxOCwjMjYKKysJdm1vdm4uaTY0CWQxNixxOAorKwkgdnNoci51NjQJcTQscTUsIzI2CisrCSB2bW92bi5pNjQJZDEwLHE1CisrCXZhZGQuaTY0CXE5LHE5LHExNQkJQCBoMyAtPiBoNAorKwl2YmljLmkzMglkMTYsIzB4ZmMwMDAwMDAKKysJICB2c3JpLnUzMglxMTQscTEzLCM4CQlAIGJhc2UgMl4zMiAtPiBiYXNlIDJeMjYKKysJIHZhZGQuaTY0CXE2LHE2LHE0CQlAIGgwIC0+IGgxCisrCSAgdnNobC51MzIJcTEzLHExMywjMTgKKysJIHZiaWMuaTMyCWQxMCwjMHhmYzAwMDAwMAorKworKwl2c2hybi51NjQJZDMwLHE5LCMyNgorKwl2bW92bi5pNjQJZDE4LHE5CisrCSB2c2hyLnU2NAlxNCxxNiwjMjYKKysJIHZtb3ZuLmk2NAlkMTIscTYKKysJIHZhZGQuaTY0CXE3LHE3LHE0CQlAIGgxIC0+IGgyCisrCSAgdnNyaS51MzIJcTEzLHExMiwjMTQKKysJdmJpYy5pMzIJZDE4LCMweGZjMDAwMDAwCisrCSAgdnNobC51MzIJcTEyLHExMiwjMTIKKysJIHZiaWMuaTMyCWQxMiwjMHhmYzAwMDAwMAorKworKwl2YWRkLmkzMglkMTAsZDEwLGQzMAorKwl2c2hsLnUzMglkMzAsZDMwLCMyCisrCSAgdmJpYy5pMzIJcTEzLCMweGZjMDAwMDAwCisrCSB2c2hybi51NjQJZDgscTcsIzI2CisrCSB2bW92bi5pNjQJZDE0LHE3CisrCXZhZGRsLnUzMglxNSxkMTAsZDMwCUAgaDQgLT4gaDAgW3dpZGVuIGZvciBhIHNlY10KKysJICB2c3JpLnUzMglxMTIscTExLCMyMAorKwkgdmFkZC5pMzIJZDE2LGQxNixkOAlAIGgyIC0+IGgzCisrCSAgdnNobC51MzIJcTExLHExMSwjNgorKwkgdmJpYy5pMzIJZDE0LCMweGZjMDAwMDAwCisrCSAgdmJpYy5pMzIJcTEyLCMweGZjMDAwMDAwCisrCisrCXZzaHJuLnU2NAlkMzAscTUsIzI2CQlAIHJlLW5hcnJvdworKwl2bW92bi5pNjQJZDEwLHE1CisrCSAgdnNyaS51MzIJcTExLHExMCwjMjYKKysJICB2YmljLmkzMglxMTAsIzB4ZmMwMDAwMDAKKysJIHZzaHIudTMyCWQ4LGQxNiwjMjYKKysJIHZiaWMuaTMyCWQxNiwjMHhmYzAwMDAwMAorKwl2YmljLmkzMglkMTAsIzB4ZmMwMDAwMDAKKysJdmFkZC5pMzIJZDEyLGQxMixkMzAJQCBoMCAtPiBoMQorKwkgdmFkZC5pMzIJZDE4LGQxOCxkOAlAIGgzIC0+IGg0CisrCSAgdmJpYy5pMzIJcTExLCMweGZjMDAwMDAwCisrCisrCWJoaQkJLkxvb3BfbmVvbgorKworKy5Mc2tpcF9sb29wOgorKwlAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBACisrCUAgbXVsdGlwbHkgKGlucFswOjFdK2hhc2gpIG9yIGlucFsyOjNdIGJ5IHJeMjpyXjEKKysKKysJYWRkCQlyNyxyMCwjKDQ4KzAqOSo0KQorKwlhZGQJCXI2LHIwLCMoNDgrMSo5KjQpCisrCWFkZHMJCXIyLHIyLCMzMgorKwlpdAkJbmUKKysJbW92bmUJCXIyLCMwCisrCWJuZQkJLkxvbmdfdGFpbAorKworKwl2YWRkLmkzMglkMjUsZDI0LGQxNAlAIGFkZCBoYXNoIHZhbHVlIGFuZCBtb3ZlIHRvICNoaQorKwl2YWRkLmkzMglkMjEsZDIwLGQxMAorKwl2YWRkLmkzMglkMjcsZDI2LGQxNgorKwl2YWRkLmkzMglkMjMsZDIyLGQxMgorKwl2YWRkLmkzMglkMjksZDI4LGQxOAorKworKy5Mb25nX3RhaWw6CisrCXZsZDQuMzIJCXtkMFsxXSxkMVsxXSxkMlsxXSxkM1sxXX0sW3I3XSEJQCBsb2FkIHJeMQorKwl2bGQ0LjMyCQl7ZDBbMF0sZDFbMF0sZDJbMF0sZDNbMF19LFtyNl0hCUAgbG9hZCByXjIKKysKKysJdmFkZC5pMzIJZDI0LGQyNCxkMTQJQCBjYW4gYmUgcmVkdW5kYW50CisrCXZtdWxsLnUzMglxNyxkMjUsZDAKKysJdmFkZC5pMzIJZDIwLGQyMCxkMTAKKysJdm11bGwudTMyCXE1LGQyMSxkMAorKwl2YWRkLmkzMglkMjYsZDI2LGQxNgorKwl2bXVsbC51MzIJcTgsZDI3LGQwCisrCXZhZGQuaTMyCWQyMixkMjIsZDEyCisrCXZtdWxsLnUzMglxNixkMjMsZDAKKysJdmFkZC5pMzIJZDI4LGQyOCxkMTgKKysJdm11bGwudTMyCXE5LGQyOSxkMAorKworKwl2bWxhbC51MzIJcTUsZDI5LGQyCisrCXZsZDQuMzIJCXtkNFsxXSxkNVsxXSxkNlsxXSxkN1sxXX0sW3I3XSEKKysJdm1sYWwudTMyCXE4LGQyNSxkMQorKwl2bGQ0LjMyCQl7ZDRbMF0sZDVbMF0sZDZbMF0sZDdbMF19LFtyNl0hCisrCXZtbGFsLnUzMglxNixkMjEsZDEKKysJdm1sYWwudTMyCXE5LGQyNyxkMQorKwl2bWxhbC51MzIJcTcsZDIzLGQxCisrCisrCXZtbGFsLnUzMglxOCxkMjMsZDMKKysJdmxkMS4zMgkJZDhbMV0sW3I3LDozMl0KKysJdm1sYWwudTMyCXE1LGQyNyxkNAorKwl2bGQxLjMyCQlkOFswXSxbcjYsOjMyXQorKwl2bWxhbC51MzIJcTksZDI1LGQzCisrCXZtbGFsLnUzMglxNixkMjksZDQKKysJdm1sYWwudTMyCXE3LGQyMSxkMworKworKwl2bWxhbC51MzIJcTgsZDIxLGQ1CisrCSBpdAkJbmUKKysJIGFkZG5lCQlyNyxyMCwjKDQ4KzIqOSo0KQorKwl2bWxhbC51MzIJcTUsZDI1LGQ2CisrCSBpdAkJbmUKKysJIGFkZG5lCQlyNixyMCwjKDQ4KzMqOSo0KQorKwl2bWxhbC51MzIJcTksZDIzLGQ1CisrCXZtbGFsLnUzMglxNixkMjcsZDYKKysJdm1sYWwudTMyCXE3LGQyOSxkNgorKworKwl2bWxhbC51MzIJcTgsZDI5LGQ4CisrCSB2b3JuCQlxMCxxMCxxMAlAIGFsbC1vbmVzLCBjYW4gYmUgcmVkdW5kYW50CisrCXZtbGFsLnUzMglxNSxkMjMsZDgKKysJIHZzaHIudTY0CXEwLHEwLCMzOAorKwl2bWxhbC51MzIJcTksZDIxLGQ3CisrCXZtbGFsLnUzMglxNixkMjUsZDgKKysJdm1sYWwudTMyCXE3LGQyNyxkOAorKworKwliZXEJCS5Mc2hvcnRfdGFpbAorKworKwlAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBACisrCUAgKGhhc2graW5wWzA6MV0pKnJeNDpyXjMgYW5kIGFjY3VtdWxhdGUKKysKKysJdmxkNC4zMgkJe2QwWzFdLGQxWzFdLGQyWzFdLGQzWzFdfSxbcjddIQlAIGxvYWQgcl4zCisrCXZsZDQuMzIJCXtkMFswXSxkMVswXSxkMlswXSxkM1swXX0sW3I2XSEJQCBsb2FkIHJeNAorKworKwl2bWxhbC51MzIJcTcsZDI0LGQwCisrCXZtbGFsLnUzMglxNSxkMjAsZDAKKysJdm1sYWwudTMyCXE4LGQyNixkMAorKwl2bWxhbC51MzIJcTYsZDIyLGQwCisrCXZtbGFsLnUzMglxOSxkMjgsZDAKKysKKysJdm1sYWwudTMyCXE1LGQyOCxkMgorKwl2bGQ0LjMyCQl7ZDRbMV0sZDVbMV0sZDZbMV0sZDdbMV19LFtyN10hCisrCXZtbGFsLnUzMglxOCxkMjQsZDEKKysJdmxkNC4zMgkJe2Q0WzBdLGQ1WzBdLGQ2WzBdLGQ3WzBdfSxbcjZdIQorKwl2bWxhbC51MzIJcTYsZDIwLGQxCisrCXZtbGFsLnUzMglxOSxkMjYsZDEKKysJdm1sYWwudTMyCXE3LGQyMixkMQorKworKwl2bWxhbC51MzIJcTgsZDIyLGQzCisrCXZsZDEuMzIJCWQ4WzFdLFtyNyw6MzJdCisrCXZtbGFsLnUzMglxNSxkMjYsZDQKKysJdmxkMS4zMgkJZDhbMF0sW3I2LDozMl0KKysJdm1sYWwudTMyCXE5LGQyNCxkMworKwl2bWxhbC51MzIJcTYsZDI4LGQ0CisrCXZtbGFsLnUzMglxNyxkMjAsZDMKKysKKysJdm1sYWwudTMyCXE4LGQyMCxkNQorKwl2bWxhbC51MzIJcTUsZDI0LGQ2CisrCXZtbGFsLnUzMglxOSxkMjIsZDUKKysJdm1sYWwudTMyCXE2LGQyNixkNgorKwl2bWxhbC51MzIJcTcsZDI4LGQ2CisrCisrCXZtbGFsLnUzMglxOCxkMjgsZDgKKysJIHZvcm4JCXEwLHEwLHEwCUAgYWxsLW9uZXMKKysJdm1sYWwudTMyCXE1LGQyMixkOAorKwkgdnNoci51NjQJcTAscTAsIzM4CisrCXZtbGFsLnUzMglxOSxkMjAsZDcKKysJdm1sYWwudTMyCXE2LGQyNCxkOAorKwl2bWxhbC51MzIJcTcsZDI2LGQ4CisrCisrLkxzaG9ydF90YWlsOgorKwlAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBACisrCUAgaG9yaXpvbnRhbCBhZGRpdGlvbgorKworKwl2YWRkLmk2NAlkMTYsZDE2LGQxNworKwl2YWRkLmk2NAlkMTAsZDEwLGQxMQorKwl2YWRkLmk2NAlkMTgsZDE4LGQxOQorKwl2YWRkLmk2NAlkMTIsZDEyLGQxMworKwl2YWRkLmk2NAlkMTQsZDE0LGQxNQorKworKwlAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBACisrCUAgbGF6eSByZWR1Y3Rpb24sIGJ1dCB3aXRob3V0IG5hcnJvd2luZworKworKwl2c2hyLnU2NAlxMTUscTgsIzI2CisrCXZhbmQuaTY0CXE4LHE4LHEwCisrCSB2c2hyLnU2NAlxNCxxNSwjMjYKKysJIHZhbmQuaTY0CXE1LHE1LHEwCisrCXZhZGQuaTY0CXE5LHE5LHExNQkJQCBoMyAtPiBoNAorKwkgdmFkZC5pNjQJcTYscTYscTQJCUAgaDAgLT4gaDEKKysKKysJdnNoci51NjQJcTE1LHE5LCMyNgorKwl2YW5kLmk2NAlxOSxxOSxxMAorKwkgdnNoci51NjQJcTQscTYsIzI2CisrCSB2YW5kLmk2NAlxNixxNixxMAorKwkgdmFkZC5pNjQJcTcscTcscTQJCUAgaDEgLT4gaDIKKysKKysJdmFkZC5pNjQJcTUscTUscTE1CisrCXZzaGwudTY0CXExNSxxMTUsIzIKKysJIHZzaHIudTY0CXE0LHE3LCMyNgorKwkgdmFuZC5pNjQJcTcscTcscTAKKysJdmFkZC5pNjQJcTUscTUscTE1CQlAIGg0IC0+IGgwCisrCSB2YWRkLmk2NAlxOCxxOCxxNAkJQCBoMiAtPiBoMworKworKwl2c2hyLnU2NAlxMTUscTUsIzI2CisrCXZhbmQuaTY0CXE1LHE1LHEwCisrCSB2c2hyLnU2NAlxNCxxOCwjMjYKKysJIHZhbmQuaTY0CXE4LHE4LHEwCisrCXZhZGQuaTY0CXE2LHE2LHExNQkJQCBoMCAtPiBoMQorKwkgdmFkZC5pNjQJcTkscTkscTQJCUAgaDMgLT4gaDQKKysKKysJY21wCQlyMiwjMAorKwlibmUJCS5MZXZlbgorKworKwlAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBACisrCUAgc3RvcmUgaGFzaCB2YWx1ZQorKworKwl2c3Q0LjMyCQl7ZDEwWzBdLGQxMlswXSxkMTRbMF0sZDE2WzBdfSxbcjBdIQorKwl2c3QxLjMyCQl7ZDE4WzBdfSxbcjBdCisrCisrCXZsZG1pYQlzcCEse2Q4LWQxNX0JCQlAIGVwaWxvZ3VlCisrCWxkbWlhCXNwISx7cjQtcjd9CisrCWJ4CWxyCQkJCQlAIGJ4CWxyCisrLnNpemUJcG9seTEzMDVfYmxvY2tzX25lb24sLi1wb2x5MTMwNV9ibG9ja3NfbmVvbgorKworKy5hbGlnbgk1CisrLkx6ZXJvczoKKysubG9uZwkwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCisrI2lmbmRlZglfX0tFUk5FTF9fCisrLkxPUEVOU1NMX2FybWNhcDoKKysjIGlmZGVmCV9XSU4zMgorKy53b3JkCU9QRU5TU0xfYXJtY2FwX1AKKysjIGVsc2UKKysud29yZAlPUEVOU1NMX2FybWNhcF9QLS5McG9seTEzMDVfaW5pdAorKyMgZW5kaWYKKysuY29tbQlPUEVOU1NMX2FybWNhcF9QLDQsNAorKy5oaWRkZW4JT1BFTlNTTF9hcm1jYXBfUAorKyNlbmRpZgorKyNlbmRpZgorKy5hc2NpegkiUG9seTEzMDUgZm9yIEFSTXY0L05FT04sIENSWVBUT0dBTVMgYnkgQGRvdC1hc20iCisrLmFsaWduCTIKKy0tLSAvZGV2L251bGwKKysrKyBiL2FyY2gvYXJtL2NyeXB0by9wb2x5MTMwNS1nbHVlLmMKK0BAIC0wLDAgKzEsMjc2IEBACisrLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKysvKgorKyAqIE9wZW5TU0wvQ3J5cHRvZ2FtcyBhY2NlbGVyYXRlZCBQb2x5MTMwNSB0cmFuc2Zvcm0gZm9yIEFSTQorKyAqCisrICogQ29weXJpZ2h0IChDKSAyMDE5IExpbmFybyBMdGQuIDxhcmQuYmllc2hldXZlbEBsaW5hcm8ub3JnPgorKyAqLworKworKyNpbmNsdWRlIDxhc20vaHdjYXAuaD4KKysjaW5jbHVkZSA8YXNtL25lb24uaD4KKysjaW5jbHVkZSA8YXNtL3NpbWQuaD4KKysjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorKyNpbmNsdWRlIDxjcnlwdG8vYWxnYXBpLmg+CisrI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9oYXNoLmg+CisrI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9wb2x5MTMwNS5oPgorKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvc2ltZC5oPgorKyNpbmNsdWRlIDxsaW51eC9jcHVmZWF0dXJlLmg+CisrI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorKyNpbmNsdWRlIDxsaW51eC9qdW1wX2xhYmVsLmg+CisrI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorKworK3ZvaWQgcG9seTEzMDVfaW5pdF9hcm0odm9pZCAqc3RhdGUsIGNvbnN0IHU4ICprZXkpOworK3ZvaWQgcG9seTEzMDVfYmxvY2tzX2FybSh2b2lkICpzdGF0ZSwgY29uc3QgdTggKnNyYywgdTMyIGxlbiwgdTMyIGhpYml0KTsKKyt2b2lkIHBvbHkxMzA1X2VtaXRfYXJtKHZvaWQgKnN0YXRlLCBfX2xlMzIgKmRpZ2VzdCwgY29uc3QgdTMyICpub25jZSk7CisrCisrdm9pZCBfX3dlYWsgcG9seTEzMDVfYmxvY2tzX25lb24odm9pZCAqc3RhdGUsIGNvbnN0IHU4ICpzcmMsIHUzMiBsZW4sIHUzMiBoaWJpdCkKKyt7CisrfQorKworK3N0YXRpYyBfX3JvX2FmdGVyX2luaXQgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoaGF2ZV9uZW9uKTsKKysKKyt2b2lkIHBvbHkxMzA1X2luaXRfYXJjaChzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRjdHgsIGNvbnN0IHU4ICprZXkpCisreworKwlwb2x5MTMwNV9pbml0X2FybSgmZGN0eC0+aCwga2V5KTsKKysJZGN0eC0+c1swXSA9IGdldF91bmFsaWduZWRfbGUzMihrZXkgKyAxNik7CisrCWRjdHgtPnNbMV0gPSBnZXRfdW5hbGlnbmVkX2xlMzIoa2V5ICsgMjApOworKwlkY3R4LT5zWzJdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGtleSArIDI0KTsKKysJZGN0eC0+c1szXSA9IGdldF91bmFsaWduZWRfbGUzMihrZXkgKyAyOCk7CisrCWRjdHgtPmJ1ZmxlbiA9IDA7CisrfQorK0VYUE9SVF9TWU1CT0wocG9seTEzMDVfaW5pdF9hcmNoKTsKKysKKytzdGF0aWMgaW50IGFybV9wb2x5MTMwNV9pbml0KHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjKQorK3sKKysJc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4ICpkY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisrCisrCWRjdHgtPmJ1ZmxlbiA9IDA7CisrCWRjdHgtPnJzZXQgPSAwOworKwlkY3R4LT5zc2V0ID0gZmFsc2U7CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgdm9pZCBhcm1fcG9seTEzMDVfYmxvY2tzKHN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCAqZGN0eCwgY29uc3QgdTggKnNyYywKKysJCQkJIHUzMiBsZW4sIHUzMiBoaWJpdCwgYm9vbCBkb19uZW9uKQorK3sKKysJaWYgKHVubGlrZWx5KCFkY3R4LT5zc2V0KSkgeworKwkJaWYgKCFkY3R4LT5yc2V0KSB7CisrCQkJcG9seTEzMDVfaW5pdF9hcm0oJmRjdHgtPmgsIHNyYyk7CisrCQkJc3JjICs9IFBPTFkxMzA1X0JMT0NLX1NJWkU7CisrCQkJbGVuIC09IFBPTFkxMzA1X0JMT0NLX1NJWkU7CisrCQkJZGN0eC0+cnNldCA9IDE7CisrCQl9CisrCQlpZiAobGVuID49IFBPTFkxMzA1X0JMT0NLX1NJWkUpIHsKKysJCQlkY3R4LT5zWzBdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNyYyArICAwKTsKKysJCQlkY3R4LT5zWzFdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNyYyArICA0KTsKKysJCQlkY3R4LT5zWzJdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNyYyArICA4KTsKKysJCQlkY3R4LT5zWzNdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNyYyArIDEyKTsKKysJCQlzcmMgKz0gUE9MWTEzMDVfQkxPQ0tfU0laRTsKKysJCQlsZW4gLT0gUE9MWTEzMDVfQkxPQ0tfU0laRTsKKysJCQlkY3R4LT5zc2V0ID0gdHJ1ZTsKKysJCX0KKysJCWlmIChsZW4gPCBQT0xZMTMwNV9CTE9DS19TSVpFKQorKwkJCXJldHVybjsKKysJfQorKworKwlsZW4gJj0gfihQT0xZMTMwNV9CTE9DS19TSVpFIC0gMSk7CisrCisrCWlmIChzdGF0aWNfYnJhbmNoX2xpa2VseSgmaGF2ZV9uZW9uKSAmJiBsaWtlbHkoZG9fbmVvbikpCisrCQlwb2x5MTMwNV9ibG9ja3NfbmVvbigmZGN0eC0+aCwgc3JjLCBsZW4sIGhpYml0KTsKKysJZWxzZQorKwkJcG9seTEzMDVfYmxvY2tzX2FybSgmZGN0eC0+aCwgc3JjLCBsZW4sIGhpYml0KTsKKyt9CisrCisrc3RhdGljIHZvaWQgYXJtX3BvbHkxMzA1X2RvX3VwZGF0ZShzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRjdHgsCisrCQkJCSAgICBjb25zdCB1OCAqc3JjLCB1MzIgbGVuLCBib29sIGRvX25lb24pCisreworKwlpZiAodW5saWtlbHkoZGN0eC0+YnVmbGVuKSkgeworKwkJdTMyIGJ5dGVzID0gbWluKGxlbiwgUE9MWTEzMDVfQkxPQ0tfU0laRSAtIGRjdHgtPmJ1Zmxlbik7CisrCisrCQltZW1jcHkoZGN0eC0+YnVmICsgZGN0eC0+YnVmbGVuLCBzcmMsIGJ5dGVzKTsKKysJCXNyYyArPSBieXRlczsKKysJCWxlbiAtPSBieXRlczsKKysJCWRjdHgtPmJ1ZmxlbiArPSBieXRlczsKKysKKysJCWlmIChkY3R4LT5idWZsZW4gPT0gUE9MWTEzMDVfQkxPQ0tfU0laRSkgeworKwkJCWFybV9wb2x5MTMwNV9ibG9ja3MoZGN0eCwgZGN0eC0+YnVmLAorKwkJCQkJICAgIFBPTFkxMzA1X0JMT0NLX1NJWkUsIDEsIGZhbHNlKTsKKysJCQlkY3R4LT5idWZsZW4gPSAwOworKwkJfQorKwl9CisrCisrCWlmIChsaWtlbHkobGVuID49IFBPTFkxMzA1X0JMT0NLX1NJWkUpKSB7CisrCQlhcm1fcG9seTEzMDVfYmxvY2tzKGRjdHgsIHNyYywgbGVuLCAxLCBkb19uZW9uKTsKKysJCXNyYyArPSByb3VuZF9kb3duKGxlbiwgUE9MWTEzMDVfQkxPQ0tfU0laRSk7CisrCQlsZW4gJT0gUE9MWTEzMDVfQkxPQ0tfU0laRTsKKysJfQorKworKwlpZiAodW5saWtlbHkobGVuKSkgeworKwkJZGN0eC0+YnVmbGVuID0gbGVuOworKwkJbWVtY3B5KGRjdHgtPmJ1Ziwgc3JjLCBsZW4pOworKwl9CisrfQorKworK3N0YXRpYyBpbnQgYXJtX3BvbHkxMzA1X3VwZGF0ZShzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywKKysJCQkgICAgICAgY29uc3QgdTggKnNyYywgdW5zaWduZWQgaW50IHNyY2xlbikKKyt7CisrCXN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCAqZGN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworKworKwlhcm1fcG9seTEzMDVfZG9fdXBkYXRlKGRjdHgsIHNyYywgc3JjbGVuLCBmYWxzZSk7CisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIGFybV9wb2x5MTMwNV91cGRhdGVfbmVvbihzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywKKysJCQkJCQkgICBjb25zdCB1OCAqc3JjLAorKwkJCQkJCSAgIHVuc2lnbmVkIGludCBzcmNsZW4pCisreworKwlzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKysJYm9vbCBkb19uZW9uID0gY3J5cHRvX3NpbWRfdXNhYmxlKCkgJiYgc3JjbGVuID4gMTI4OworKworKwlpZiAoc3RhdGljX2JyYW5jaF9saWtlbHkoJmhhdmVfbmVvbikgJiYgZG9fbmVvbikKKysJCWtlcm5lbF9uZW9uX2JlZ2luKCk7CisrCWFybV9wb2x5MTMwNV9kb191cGRhdGUoZGN0eCwgc3JjLCBzcmNsZW4sIGRvX25lb24pOworKwlpZiAoc3RhdGljX2JyYW5jaF9saWtlbHkoJmhhdmVfbmVvbikgJiYgZG9fbmVvbikKKysJCWtlcm5lbF9uZW9uX2VuZCgpOworKwlyZXR1cm4gMDsKKyt9CisrCisrdm9pZCBwb2x5MTMwNV91cGRhdGVfYXJjaChzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRjdHgsIGNvbnN0IHU4ICpzcmMsCisrCQkJICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQorK3sKKysJYm9vbCBkb19uZW9uID0gSVNfRU5BQkxFRChDT05GSUdfS0VSTkVMX01PREVfTkVPTikgJiYKKysJCSAgICAgICBjcnlwdG9fc2ltZF91c2FibGUoKTsKKysKKysJaWYgKHVubGlrZWx5KGRjdHgtPmJ1ZmxlbikpIHsKKysJCXUzMiBieXRlcyA9IG1pbihuYnl0ZXMsIFBPTFkxMzA1X0JMT0NLX1NJWkUgLSBkY3R4LT5idWZsZW4pOworKworKwkJbWVtY3B5KGRjdHgtPmJ1ZiArIGRjdHgtPmJ1Zmxlbiwgc3JjLCBieXRlcyk7CisrCQlzcmMgKz0gYnl0ZXM7CisrCQluYnl0ZXMgLT0gYnl0ZXM7CisrCQlkY3R4LT5idWZsZW4gKz0gYnl0ZXM7CisrCisrCQlpZiAoZGN0eC0+YnVmbGVuID09IFBPTFkxMzA1X0JMT0NLX1NJWkUpIHsKKysJCQlwb2x5MTMwNV9ibG9ja3NfYXJtKCZkY3R4LT5oLCBkY3R4LT5idWYsCisrCQkJCQkgICAgUE9MWTEzMDVfQkxPQ0tfU0laRSwgMSk7CisrCQkJZGN0eC0+YnVmbGVuID0gMDsKKysJCX0KKysJfQorKworKwlpZiAobGlrZWx5KG5ieXRlcyA+PSBQT0xZMTMwNV9CTE9DS19TSVpFKSkgeworKwkJdW5zaWduZWQgaW50IGxlbiA9IHJvdW5kX2Rvd24obmJ5dGVzLCBQT0xZMTMwNV9CTE9DS19TSVpFKTsKKysKKysJCWlmIChzdGF0aWNfYnJhbmNoX2xpa2VseSgmaGF2ZV9uZW9uKSAmJiBkb19uZW9uKSB7CisrCQkJa2VybmVsX25lb25fYmVnaW4oKTsKKysJCQlwb2x5MTMwNV9ibG9ja3NfbmVvbigmZGN0eC0+aCwgc3JjLCBsZW4sIDEpOworKwkJCWtlcm5lbF9uZW9uX2VuZCgpOworKwkJfSBlbHNlIHsKKysJCQlwb2x5MTMwNV9ibG9ja3NfYXJtKCZkY3R4LT5oLCBzcmMsIGxlbiwgMSk7CisrCQl9CisrCQlzcmMgKz0gbGVuOworKwkJbmJ5dGVzICU9IFBPTFkxMzA1X0JMT0NLX1NJWkU7CisrCX0KKysKKysJaWYgKHVubGlrZWx5KG5ieXRlcykpIHsKKysJCWRjdHgtPmJ1ZmxlbiA9IG5ieXRlczsKKysJCW1lbWNweShkY3R4LT5idWYsIHNyYywgbmJ5dGVzKTsKKysJfQorK30KKytFWFBPUlRfU1lNQk9MKHBvbHkxMzA1X3VwZGF0ZV9hcmNoKTsKKysKKyt2b2lkIHBvbHkxMzA1X2ZpbmFsX2FyY2goc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4ICpkY3R4LCB1OCAqZHN0KQorK3sKKysJX19sZTMyIGRpZ2VzdFs0XTsKKysJdTY0IGYgPSAwOworKworKwlpZiAodW5saWtlbHkoZGN0eC0+YnVmbGVuKSkgeworKwkJZGN0eC0+YnVmW2RjdHgtPmJ1ZmxlbisrXSA9IDE7CisrCQltZW1zZXQoZGN0eC0+YnVmICsgZGN0eC0+YnVmbGVuLCAwLAorKwkJICAgICAgIFBPTFkxMzA1X0JMT0NLX1NJWkUgLSBkY3R4LT5idWZsZW4pOworKwkJcG9seTEzMDVfYmxvY2tzX2FybSgmZGN0eC0+aCwgZGN0eC0+YnVmLCBQT0xZMTMwNV9CTE9DS19TSVpFLCAwKTsKKysJfQorKworKwlwb2x5MTMwNV9lbWl0X2FybSgmZGN0eC0+aCwgZGlnZXN0LCBkY3R4LT5zKTsKKysKKysJLyogbWFjID0gKGggKyBzKSAlICgyXjEyOCkgKi8KKysJZiA9IChmID4+IDMyKSArIGxlMzJfdG9fY3B1KGRpZ2VzdFswXSk7CisrCXB1dF91bmFsaWduZWRfbGUzMihmLCBkc3QpOworKwlmID0gKGYgPj4gMzIpICsgbGUzMl90b19jcHUoZGlnZXN0WzFdKTsKKysJcHV0X3VuYWxpZ25lZF9sZTMyKGYsIGRzdCArIDQpOworKwlmID0gKGYgPj4gMzIpICsgbGUzMl90b19jcHUoZGlnZXN0WzJdKTsKKysJcHV0X3VuYWxpZ25lZF9sZTMyKGYsIGRzdCArIDgpOworKwlmID0gKGYgPj4gMzIpICsgbGUzMl90b19jcHUoZGlnZXN0WzNdKTsKKysJcHV0X3VuYWxpZ25lZF9sZTMyKGYsIGRzdCArIDEyKTsKKysKKysJKmRjdHggPSAoc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4KXt9OworK30KKytFWFBPUlRfU1lNQk9MKHBvbHkxMzA1X2ZpbmFsX2FyY2gpOworKworK3N0YXRpYyBpbnQgYXJtX3BvbHkxMzA1X2ZpbmFsKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCB1OCAqZHN0KQorK3sKKysJc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4ICpkY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisrCisrCWlmICh1bmxpa2VseSghZGN0eC0+c3NldCkpCisrCQlyZXR1cm4gLUVOT0tFWTsKKysKKysJcG9seTEzMDVfZmluYWxfYXJjaChkY3R4LCBkc3QpOworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIHN0cnVjdCBzaGFzaF9hbGcgYXJtX3BvbHkxMzA1X2FsZ3NbXSA9IHt7CisrCS5pbml0CQkJPSBhcm1fcG9seTEzMDVfaW5pdCwKKysJLnVwZGF0ZQkJCT0gYXJtX3BvbHkxMzA1X3VwZGF0ZSwKKysJLmZpbmFsCQkJPSBhcm1fcG9seTEzMDVfZmluYWwsCisrCS5kaWdlc3RzaXplCQk9IFBPTFkxMzA1X0RJR0VTVF9TSVpFLAorKwkuZGVzY3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCksCisrCisrCS5iYXNlLmNyYV9uYW1lCQk9ICJwb2x5MTMwNSIsCisrCS5iYXNlLmNyYV9kcml2ZXJfbmFtZQk9ICJwb2x5MTMwNS1hcm0iLAorKwkuYmFzZS5jcmFfcHJpb3JpdHkJPSAxNTAsCisrCS5iYXNlLmNyYV9ibG9ja3NpemUJPSBQT0xZMTMwNV9CTE9DS19TSVpFLAorKwkuYmFzZS5jcmFfbW9kdWxlCT0gVEhJU19NT0RVTEUsCisrI2lmZGVmIENPTkZJR19LRVJORUxfTU9ERV9ORU9OCisrfSwgeworKwkuaW5pdAkJCT0gYXJtX3BvbHkxMzA1X2luaXQsCisrCS51cGRhdGUJCQk9IGFybV9wb2x5MTMwNV91cGRhdGVfbmVvbiwKKysJLmZpbmFsCQkJPSBhcm1fcG9seTEzMDVfZmluYWwsCisrCS5kaWdlc3RzaXplCQk9IFBPTFkxMzA1X0RJR0VTVF9TSVpFLAorKwkuZGVzY3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCksCisrCisrCS5iYXNlLmNyYV9uYW1lCQk9ICJwb2x5MTMwNSIsCisrCS5iYXNlLmNyYV9kcml2ZXJfbmFtZQk9ICJwb2x5MTMwNS1uZW9uIiwKKysJLmJhc2UuY3JhX3ByaW9yaXR5CT0gMjAwLAorKwkuYmFzZS5jcmFfYmxvY2tzaXplCT0gUE9MWTEzMDVfQkxPQ0tfU0laRSwKKysJLmJhc2UuY3JhX21vZHVsZQk9IFRISVNfTU9EVUxFLAorKyNlbmRpZgorK319OworKworK3N0YXRpYyBpbnQgX19pbml0IGFybV9wb2x5MTMwNV9tb2RfaW5pdCh2b2lkKQorK3sKKysJaWYgKElTX0VOQUJMRUQoQ09ORklHX0tFUk5FTF9NT0RFX05FT04pICYmCisrCSAgICAoZWxmX2h3Y2FwICYgSFdDQVBfTkVPTikpCisrCQlzdGF0aWNfYnJhbmNoX2VuYWJsZSgmaGF2ZV9uZW9uKTsKKysJZWxzZQorKwkJLyogcmVnaXN0ZXIgb25seSB0aGUgZmlyc3QgZW50cnkgKi8KKysJCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfc2hhc2goJmFybV9wb2x5MTMwNV9hbGdzWzBdKTsKKysKKysJcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9zaGFzaGVzKGFybV9wb2x5MTMwNV9hbGdzLAorKwkJCQkgICAgICAgQVJSQVlfU0laRShhcm1fcG9seTEzMDVfYWxncykpOworK30KKysKKytzdGF0aWMgdm9pZCBfX2V4aXQgYXJtX3BvbHkxMzA1X21vZF9leGl0KHZvaWQpCisreworKwlpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KCZoYXZlX25lb24pKSB7CisrCQljcnlwdG9fdW5yZWdpc3Rlcl9zaGFzaCgmYXJtX3BvbHkxMzA1X2FsZ3NbMF0pOworKwkJcmV0dXJuOworKwl9CisrCWNyeXB0b191bnJlZ2lzdGVyX3NoYXNoZXMoYXJtX3BvbHkxMzA1X2FsZ3MsCisrCQkJCSAgQVJSQVlfU0laRShhcm1fcG9seTEzMDVfYWxncykpOworK30KKysKKyttb2R1bGVfaW5pdChhcm1fcG9seTEzMDVfbW9kX2luaXQpOworK21vZHVsZV9leGl0KGFybV9wb2x5MTMwNV9tb2RfZXhpdCk7CisrCisrTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworK01PRFVMRV9BTElBU19DUllQVE8oInBvbHkxMzA1Iik7CisrTU9EVUxFX0FMSUFTX0NSWVBUTygicG9seTEzMDUtYXJtIik7CisrTU9EVUxFX0FMSUFTX0NSWVBUTygicG9seTEzMDUtbmVvbiIpOworLS0tIGEvbGliL2NyeXB0by9LY29uZmlnCisrKysgYi9saWIvY3J5cHRvL0tjb25maWcKK0BAIC00MCw3ICs0MCw3IEBAIGNvbmZpZyBDUllQVE9fTElCX0RFUworIGNvbmZpZyBDUllQVE9fTElCX1BPTFkxMzA1X1JTSVpFCisgCWludAorIAlkZWZhdWx0IDQgaWYgWDg2XzY0CistCWRlZmF1bHQgOSBpZiBBUk02NAorKwlkZWZhdWx0IDkgaWYgQVJNIHx8IEFSTTY0CisgCWRlZmF1bHQgMQorIAorIGNvbmZpZyBDUllQVE9fQVJDSF9IQVZFX0xJQl9QT0xZMTMwNQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAyMC1jcnlwdG8tbWlwcy1wb2x5MTMwNS1pbmNvcnBvcmF0ZS1PcGVuU1NMLUNSWVBUT0dBTVMtLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAyMC1jcnlwdG8tbWlwcy1wb2x5MTMwNS1pbmNvcnBvcmF0ZS1PcGVuU1NMLUNSWVBUT0dBTVMtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MmUxNzkKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDIwLWNyeXB0by1taXBzLXBvbHkxMzA1LWluY29ycG9yYXRlLU9wZW5TU0wtQ1JZUFRPR0FNUy0ucGF0Y2gKQEAgLTAsMCArMSwxNTYzIEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgorRGF0ZTogRnJpLCA4IE5vdiAyMDE5IDEzOjIyOjI2ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyeXB0bzogbWlwcy9wb2x5MTMwNSAtIGluY29ycG9yYXRlIE9wZW5TU0wvQ1JZUFRPR0FNUworIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbgorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitjb21taXQgYTExZDA1NWU3YTY0YWMzNGE1ZTk5YjZmZTczMTI5OTQ0OWNiY2Q1OCB1cHN0cmVhbS4KKworVGhpcyBpcyBhIHN0cmFpZ2h0IGltcG9ydCBvZiB0aGUgT3BlblNTTC9DUllQVE9HQU1TIFBvbHkxMzA1IGltcGxlbWVudGF0aW9uIGZvcgorTUlQUyBhdXRob3JlZCBieSBBbmR5IFBvbHlha292LCBhIHByaW9yIDY0LWJpdCBvbmx5IHZlcnNpb24gb2Ygd2hpY2ggaGFzIGJlZW4KK2NvbnRyaWJ1dGVkIGJ5IGhpbSB0byB0aGUgT3BlblNTTCBwcm9qZWN0LiBUaGUgZmlsZSAncG9seTEzMDUtbWlwcy5wbCcgaXMgdGFrZW4KK3N0cmFpZ2h0IGZyb20gdGhpcyB1cHN0cmVhbSBHaXRIdWIgcmVwb3NpdG9yeSBbMF0gYXQgY29tbWl0CitkMjJhZGUzMTJhN2FmOTU4ZWM5NTU2MjBiMGQyNDFjZjQyYzM3ZmViLCBhbmQgYWxyZWFkeSBjb250YWlucyBhbGwgdGhlIGNoYW5nZXMKK3JlcXVpcmVkIHRvIGJ1aWxkIGl0IGFzIHBhcnQgb2YgYSBMaW51eCBrZXJuZWwgbW9kdWxlLgorCitbMF0gaHR0cHM6Ly9naXRodWIuY29tL2RvdC1hc20vY3J5cHRvZ2FtcworCitDby1kZXZlbG9wZWQtYnk6IEFuZHkgUG9seWFrb3YgPGFwcHJvQGNyeXB0b2dhbXMub3JnPgorU2lnbmVkLW9mZi1ieTogQW5keSBQb2x5YWtvdiA8YXBwcm9AY3J5cHRvZ2Ftcy5vcmc+CitDby1kZXZlbG9wZWQtYnk6IFJlbsOpIHZhbiBEb3JzdCA8b3BlbnNvdXJjZUB2ZG9yc3QuY29tPgorU2lnbmVkLW9mZi1ieTogUmVuw6kgdmFuIERvcnN0IDxvcGVuc291cmNlQHZkb3JzdC5jb20+CitTaWduZWQtb2ZmLWJ5OiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgorU2lnbmVkLW9mZi1ieTogSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBhcmNoL21pcHMvY3J5cHRvL01ha2VmaWxlICAgICAgICAgfCAgIDE0ICsKKyBhcmNoL21pcHMvY3J5cHRvL3BvbHkxMzA1LWdsdWUuYyAgfCAgMjAzICsrKysrCisgYXJjaC9taXBzL2NyeXB0by9wb2x5MTMwNS1taXBzLnBsIHwgMTI3MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIGNyeXB0by9LY29uZmlnICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKworIGxpYi9jcnlwdG8vS2NvbmZpZyAgICAgICAgICAgICAgICB8ICAgIDEgKworIDUgZmlsZXMgY2hhbmdlZCwgMTQ5NiBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGFyY2gvbWlwcy9jcnlwdG8vcG9seTEzMDUtZ2x1ZS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGFyY2gvbWlwcy9jcnlwdG8vcG9seTEzMDUtbWlwcy5wbAorCistLS0gYS9hcmNoL21pcHMvY3J5cHRvL01ha2VmaWxlCisrKysgYi9hcmNoL21pcHMvY3J5cHRvL01ha2VmaWxlCitAQCAtOCwzICs4LDE3IEBAIG9iai0kKENPTkZJR19DUllQVE9fQ1JDMzJfTUlQUykgKz0gY3JjMzIKKyBvYmotJChDT05GSUdfQ1JZUFRPX0NIQUNIQV9NSVBTKSArPSBjaGFjaGEtbWlwcy5vCisgY2hhY2hhLW1pcHMteSA6PSBjaGFjaGEtY29yZS5vIGNoYWNoYS1nbHVlLm8KKyBBRkxBR1NfY2hhY2hhLWNvcmUubyArPSAtTzIgIyBuZWVkZWQgdG8gZmlsbCBicmFuY2ggZGVsYXkgc2xvdHMKKysKKytvYmotJChDT05GSUdfQ1JZUFRPX1BPTFkxMzA1X01JUFMpICs9IHBvbHkxMzA1LW1pcHMubworK3BvbHkxMzA1LW1pcHMteSA6PSBwb2x5MTMwNS1jb3JlLm8gcG9seTEzMDUtZ2x1ZS5vCisrCisrcGVybGFzbS1mbGF2b3VyLSQoQ09ORklHX0NQVV9NSVBTMzIpIDo9IG8zMgorK3Blcmxhc20tZmxhdm91ci0kKENPTkZJR19DUFVfTUlQUzY0KSA6PSA2NAorKworK3F1aWV0X2NtZF9wZXJsYXNtID0gUEVSTEFTTSAkQAorKyAgICAgIGNtZF9wZXJsYXNtID0gJChQRVJMKSAkKDwpICQocGVybGFzbS1mbGF2b3VyLXkpICQoQCkKKysKKyskKG9iaikvcG9seTEzMDUtY29yZS5TOiAkKHNyYykvcG9seTEzMDUtbWlwcy5wbCBGT1JDRQorKwkkKGNhbGwgaWZfY2hhbmdlZCxwZXJsYXNtKQorKworK3RhcmdldHMgKz0gcG9seTEzMDUtY29yZS5TCistLS0gL2Rldi9udWxsCisrKysgYi9hcmNoL21pcHMvY3J5cHRvL3BvbHkxMzA1LWdsdWUuYworQEAgLTAsMCArMSwyMDMgQEAKKysvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorKy8qCisrICogT3BlblNTTC9DcnlwdG9nYW1zIGFjY2VsZXJhdGVkIFBvbHkxMzA1IHRyYW5zZm9ybSBmb3IgTUlQUworKyAqCisrICogQ29weXJpZ2h0IChDKSAyMDE5IExpbmFybyBMdGQuIDxhcmQuYmllc2hldXZlbEBsaW5hcm8ub3JnPgorKyAqLworKworKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisrI2luY2x1ZGUgPGNyeXB0by9hbGdhcGkuaD4KKysjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2hhc2guaD4KKysjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL3BvbHkxMzA1Lmg+CisrI2luY2x1ZGUgPGxpbnV4L2NwdWZlYXR1cmUuaD4KKysjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisrI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorKworK2FzbWxpbmthZ2Ugdm9pZCBwb2x5MTMwNV9pbml0X21pcHModm9pZCAqc3RhdGUsIGNvbnN0IHU4ICprZXkpOworK2FzbWxpbmthZ2Ugdm9pZCBwb2x5MTMwNV9ibG9ja3NfbWlwcyh2b2lkICpzdGF0ZSwgY29uc3QgdTggKnNyYywgdTMyIGxlbiwgdTMyIGhpYml0KTsKKythc21saW5rYWdlIHZvaWQgcG9seTEzMDVfZW1pdF9taXBzKHZvaWQgKnN0YXRlLCBfX2xlMzIgKmRpZ2VzdCwgY29uc3QgdTMyICpub25jZSk7CisrCisrdm9pZCBwb2x5MTMwNV9pbml0X2FyY2goc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4ICpkY3R4LCBjb25zdCB1OCAqa2V5KQorK3sKKysJcG9seTEzMDVfaW5pdF9taXBzKCZkY3R4LT5oLCBrZXkpOworKwlkY3R4LT5zWzBdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGtleSArIDE2KTsKKysJZGN0eC0+c1sxXSA9IGdldF91bmFsaWduZWRfbGUzMihrZXkgKyAyMCk7CisrCWRjdHgtPnNbMl0gPSBnZXRfdW5hbGlnbmVkX2xlMzIoa2V5ICsgMjQpOworKwlkY3R4LT5zWzNdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGtleSArIDI4KTsKKysJZGN0eC0+YnVmbGVuID0gMDsKKyt9CisrRVhQT1JUX1NZTUJPTChwb2x5MTMwNV9pbml0X2FyY2gpOworKworK3N0YXRpYyBpbnQgbWlwc19wb2x5MTMwNV9pbml0KHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjKQorK3sKKysJc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4ICpkY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisrCisrCWRjdHgtPmJ1ZmxlbiA9IDA7CisrCWRjdHgtPnJzZXQgPSAwOworKwlkY3R4LT5zc2V0ID0gZmFsc2U7CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgdm9pZCBtaXBzX3BvbHkxMzA1X2Jsb2NrcyhzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRjdHgsIGNvbnN0IHU4ICpzcmMsCisrCQkJCSB1MzIgbGVuLCB1MzIgaGliaXQpCisreworKwlpZiAodW5saWtlbHkoIWRjdHgtPnNzZXQpKSB7CisrCQlpZiAoIWRjdHgtPnJzZXQpIHsKKysJCQlwb2x5MTMwNV9pbml0X21pcHMoJmRjdHgtPmgsIHNyYyk7CisrCQkJc3JjICs9IFBPTFkxMzA1X0JMT0NLX1NJWkU7CisrCQkJbGVuIC09IFBPTFkxMzA1X0JMT0NLX1NJWkU7CisrCQkJZGN0eC0+cnNldCA9IDE7CisrCQl9CisrCQlpZiAobGVuID49IFBPTFkxMzA1X0JMT0NLX1NJWkUpIHsKKysJCQlkY3R4LT5zWzBdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNyYyArICAwKTsKKysJCQlkY3R4LT5zWzFdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNyYyArICA0KTsKKysJCQlkY3R4LT5zWzJdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNyYyArICA4KTsKKysJCQlkY3R4LT5zWzNdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNyYyArIDEyKTsKKysJCQlzcmMgKz0gUE9MWTEzMDVfQkxPQ0tfU0laRTsKKysJCQlsZW4gLT0gUE9MWTEzMDVfQkxPQ0tfU0laRTsKKysJCQlkY3R4LT5zc2V0ID0gdHJ1ZTsKKysJCX0KKysJCWlmIChsZW4gPCBQT0xZMTMwNV9CTE9DS19TSVpFKQorKwkJCXJldHVybjsKKysJfQorKworKwlsZW4gJj0gfihQT0xZMTMwNV9CTE9DS19TSVpFIC0gMSk7CisrCisrCXBvbHkxMzA1X2Jsb2Nrc19taXBzKCZkY3R4LT5oLCBzcmMsIGxlbiwgaGliaXQpOworK30KKysKKytzdGF0aWMgaW50IG1pcHNfcG9seTEzMDVfdXBkYXRlKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCBjb25zdCB1OCAqc3JjLAorKwkJCQl1bnNpZ25lZCBpbnQgbGVuKQorK3sKKysJc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4ICpkY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisrCisrCWlmICh1bmxpa2VseShkY3R4LT5idWZsZW4pKSB7CisrCQl1MzIgYnl0ZXMgPSBtaW4obGVuLCBQT0xZMTMwNV9CTE9DS19TSVpFIC0gZGN0eC0+YnVmbGVuKTsKKysKKysJCW1lbWNweShkY3R4LT5idWYgKyBkY3R4LT5idWZsZW4sIHNyYywgYnl0ZXMpOworKwkJc3JjICs9IGJ5dGVzOworKwkJbGVuIC09IGJ5dGVzOworKwkJZGN0eC0+YnVmbGVuICs9IGJ5dGVzOworKworKwkJaWYgKGRjdHgtPmJ1ZmxlbiA9PSBQT0xZMTMwNV9CTE9DS19TSVpFKSB7CisrCQkJbWlwc19wb2x5MTMwNV9ibG9ja3MoZGN0eCwgZGN0eC0+YnVmLCBQT0xZMTMwNV9CTE9DS19TSVpFLCAxKTsKKysJCQlkY3R4LT5idWZsZW4gPSAwOworKwkJfQorKwl9CisrCisrCWlmIChsaWtlbHkobGVuID49IFBPTFkxMzA1X0JMT0NLX1NJWkUpKSB7CisrCQltaXBzX3BvbHkxMzA1X2Jsb2NrcyhkY3R4LCBzcmMsIGxlbiwgMSk7CisrCQlzcmMgKz0gcm91bmRfZG93bihsZW4sIFBPTFkxMzA1X0JMT0NLX1NJWkUpOworKwkJbGVuICU9IFBPTFkxMzA1X0JMT0NLX1NJWkU7CisrCX0KKysKKysJaWYgKHVubGlrZWx5KGxlbikpIHsKKysJCWRjdHgtPmJ1ZmxlbiA9IGxlbjsKKysJCW1lbWNweShkY3R4LT5idWYsIHNyYywgbGVuKTsKKysJfQorKwlyZXR1cm4gMDsKKyt9CisrCisrdm9pZCBwb2x5MTMwNV91cGRhdGVfYXJjaChzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRjdHgsIGNvbnN0IHU4ICpzcmMsCisrCQkJICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQorK3sKKysJaWYgKHVubGlrZWx5KGRjdHgtPmJ1ZmxlbikpIHsKKysJCXUzMiBieXRlcyA9IG1pbihuYnl0ZXMsIFBPTFkxMzA1X0JMT0NLX1NJWkUgLSBkY3R4LT5idWZsZW4pOworKworKwkJbWVtY3B5KGRjdHgtPmJ1ZiArIGRjdHgtPmJ1Zmxlbiwgc3JjLCBieXRlcyk7CisrCQlzcmMgKz0gYnl0ZXM7CisrCQluYnl0ZXMgLT0gYnl0ZXM7CisrCQlkY3R4LT5idWZsZW4gKz0gYnl0ZXM7CisrCisrCQlpZiAoZGN0eC0+YnVmbGVuID09IFBPTFkxMzA1X0JMT0NLX1NJWkUpIHsKKysJCQlwb2x5MTMwNV9ibG9ja3NfbWlwcygmZGN0eC0+aCwgZGN0eC0+YnVmLAorKwkJCQkJICAgICBQT0xZMTMwNV9CTE9DS19TSVpFLCAxKTsKKysJCQlkY3R4LT5idWZsZW4gPSAwOworKwkJfQorKwl9CisrCisrCWlmIChsaWtlbHkobmJ5dGVzID49IFBPTFkxMzA1X0JMT0NLX1NJWkUpKSB7CisrCQl1bnNpZ25lZCBpbnQgbGVuID0gcm91bmRfZG93bihuYnl0ZXMsIFBPTFkxMzA1X0JMT0NLX1NJWkUpOworKworKwkJcG9seTEzMDVfYmxvY2tzX21pcHMoJmRjdHgtPmgsIHNyYywgbGVuLCAxKTsKKysJCXNyYyArPSBsZW47CisrCQluYnl0ZXMgJT0gUE9MWTEzMDVfQkxPQ0tfU0laRTsKKysJfQorKworKwlpZiAodW5saWtlbHkobmJ5dGVzKSkgeworKwkJZGN0eC0+YnVmbGVuID0gbmJ5dGVzOworKwkJbWVtY3B5KGRjdHgtPmJ1Ziwgc3JjLCBuYnl0ZXMpOworKwl9CisrfQorK0VYUE9SVF9TWU1CT0wocG9seTEzMDVfdXBkYXRlX2FyY2gpOworKworK3ZvaWQgcG9seTEzMDVfZmluYWxfYXJjaChzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRjdHgsIHU4ICpkc3QpCisreworKwlfX2xlMzIgZGlnZXN0WzRdOworKwl1NjQgZiA9IDA7CisrCisrCWlmICh1bmxpa2VseShkY3R4LT5idWZsZW4pKSB7CisrCQlkY3R4LT5idWZbZGN0eC0+YnVmbGVuKytdID0gMTsKKysJCW1lbXNldChkY3R4LT5idWYgKyBkY3R4LT5idWZsZW4sIDAsCisrCQkgICAgICAgUE9MWTEzMDVfQkxPQ0tfU0laRSAtIGRjdHgtPmJ1Zmxlbik7CisrCQlwb2x5MTMwNV9ibG9ja3NfbWlwcygmZGN0eC0+aCwgZGN0eC0+YnVmLCBQT0xZMTMwNV9CTE9DS19TSVpFLCAwKTsKKysJfQorKworKwlwb2x5MTMwNV9lbWl0X21pcHMoJmRjdHgtPmgsIGRpZ2VzdCwgZGN0eC0+cyk7CisrCisrCS8qIG1hYyA9IChoICsgcykgJSAoMl4xMjgpICovCisrCWYgPSAoZiA+PiAzMikgKyBsZTMyX3RvX2NwdShkaWdlc3RbMF0pOworKwlwdXRfdW5hbGlnbmVkX2xlMzIoZiwgZHN0KTsKKysJZiA9IChmID4+IDMyKSArIGxlMzJfdG9fY3B1KGRpZ2VzdFsxXSk7CisrCXB1dF91bmFsaWduZWRfbGUzMihmLCBkc3QgKyA0KTsKKysJZiA9IChmID4+IDMyKSArIGxlMzJfdG9fY3B1KGRpZ2VzdFsyXSk7CisrCXB1dF91bmFsaWduZWRfbGUzMihmLCBkc3QgKyA4KTsKKysJZiA9IChmID4+IDMyKSArIGxlMzJfdG9fY3B1KGRpZ2VzdFszXSk7CisrCXB1dF91bmFsaWduZWRfbGUzMihmLCBkc3QgKyAxMik7CisrCisrCSpkY3R4ID0gKHN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCl7fTsKKyt9CisrRVhQT1JUX1NZTUJPTChwb2x5MTMwNV9maW5hbF9hcmNoKTsKKysKKytzdGF0aWMgaW50IG1pcHNfcG9seTEzMDVfZmluYWwoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIHU4ICpkc3QpCisreworKwlzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKysKKysJaWYgKHVubGlrZWx5KCFkY3R4LT5zc2V0KSkKKysJCXJldHVybiAtRU5PS0VZOworKworKwlwb2x5MTMwNV9maW5hbF9hcmNoKGRjdHgsIGRzdCk7CisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgc3RydWN0IHNoYXNoX2FsZyBtaXBzX3BvbHkxMzA1X2FsZyA9IHsKKysJLmluaXQJCQk9IG1pcHNfcG9seTEzMDVfaW5pdCwKKysJLnVwZGF0ZQkJCT0gbWlwc19wb2x5MTMwNV91cGRhdGUsCisrCS5maW5hbAkJCT0gbWlwc19wb2x5MTMwNV9maW5hbCwKKysJLmRpZ2VzdHNpemUJCT0gUE9MWTEzMDVfRElHRVNUX1NJWkUsCisrCS5kZXNjc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4KSwKKysKKysJLmJhc2UuY3JhX25hbWUJCT0gInBvbHkxMzA1IiwKKysJLmJhc2UuY3JhX2RyaXZlcl9uYW1lCT0gInBvbHkxMzA1LW1pcHMiLAorKwkuYmFzZS5jcmFfcHJpb3JpdHkJPSAyMDAsCisrCS5iYXNlLmNyYV9ibG9ja3NpemUJPSBQT0xZMTMwNV9CTE9DS19TSVpFLAorKwkuYmFzZS5jcmFfbW9kdWxlCT0gVEhJU19NT0RVTEUsCisrfTsKKysKKytzdGF0aWMgaW50IF9faW5pdCBtaXBzX3BvbHkxMzA1X21vZF9pbml0KHZvaWQpCisreworKwlyZXR1cm4gY3J5cHRvX3JlZ2lzdGVyX3NoYXNoKCZtaXBzX3BvbHkxMzA1X2FsZyk7CisrfQorKworK3N0YXRpYyB2b2lkIF9fZXhpdCBtaXBzX3BvbHkxMzA1X21vZF9leGl0KHZvaWQpCisreworKwljcnlwdG9fdW5yZWdpc3Rlcl9zaGFzaCgmbWlwc19wb2x5MTMwNV9hbGcpOworK30KKysKKyttb2R1bGVfaW5pdChtaXBzX3BvbHkxMzA1X21vZF9pbml0KTsKKyttb2R1bGVfZXhpdChtaXBzX3BvbHkxMzA1X21vZF9leGl0KTsKKysKKytNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CisrTU9EVUxFX0FMSUFTX0NSWVBUTygicG9seTEzMDUiKTsKKytNT0RVTEVfQUxJQVNfQ1JZUFRPKCJwb2x5MTMwNS1taXBzIik7CistLS0gL2Rldi9udWxsCisrKysgYi9hcmNoL21pcHMvY3J5cHRvL3BvbHkxMzA1LW1pcHMucGwKK0BAIC0wLDAgKzEsMTI3MyBAQAorKyMhL3Vzci9iaW4vZW52IHBlcmwKKysjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMS4wKyBPUiBCU0QtMy1DbGF1c2UKKysjCisrIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyMgV3JpdHRlbiBieSBBbmR5IFBvbHlha292LCBAZG90LWFzbSwgb3JpZ2luYWxseSBmb3IgdGhlIE9wZW5TU0wKKysjIHByb2plY3QuCisrIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKworKyMgUG9seTEzMDUgaGFzaCBmb3IgTUlQUy4KKysjCisrIyBNYXkgMjAxNgorKyMKKysjIE51bWJlcnMgYXJlIGN5Y2xlcyBwZXIgcHJvY2Vzc2VkIGJ5dGUgd2l0aCBwb2x5MTMwNV9ibG9ja3MgYWxvbmUuCisrIworKyMJCUlBTFUvZ2NjCisrIyBSMXgwMDAJfjUuNS8rMTMwJQkoYmlnLWVuZGlhbikKKysjIE9jdGVvbiBJSQkyLjUwLys3MCUJKGxpdHRsZS1lbmRpYW4pCisrIworKyMgTWFyY2ggMjAxOQorKyMKKysjIEFkZCAzMi1iaXQgY29kZSBwYXRoLgorKyMKKysjIE9jdG9iZXIgMjAxOQorKyMKKysjIE1vZHVsby1zY2hlZHVsaW5nIHJlZHVjdGlvbiBhbGxvd3MgdG8gb21pdCBkZXBlbmRlbmN5IGNoYWluIGF0IHRoZQorKyMgZW5kIG9mIGlubmVyIGxvb3AgYW5kIGltcHJvdmUgcGVyZm9ybWFuY2UuIEFsc28gb3B0aW1pemUgTUlQUzMyUjIKKysjIGNvZGUgcGF0aCBmb3IgTUlQUyAxMDA0SyBjb3JlLiBQZXIgUmVuw6kgdm9uIERvcnN0J3Mgc3VnZ2VzdGlvbnMuCisrIworKyMJCUlBTFUvZ2NjCisrIyBSMXgwMDAJfjkuOC8/CQkoYmlnLWVuZGlhbikKKysjIE9jdGVvbiBJSQkzLjY1LysxNDAlCShsaXR0bGUtZW5kaWFuKQorKyMgTVQ3NjIxLzEwMDRLCTQuNzUvPwkJKGxpdHRsZS1lbmRpYW4pCisrIworKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysjIFRoZXJlIGlzIGEgbnVtYmVyIG9mIE1JUFMgQUJJIGluIHVzZSwgTzMyIGFuZCBOMzIvNjQgYXJlIG1vc3QKKysjIHdpZGVseSB1c2VkLiBUaGVuIHRoZXJlIGlzIGEgbmV3IGNvbnRlbmRlcjogTlVCSS4gSXQgYXBwZWFycyB0aGF0IGlmCisrIyBvbmUgcGlja3MgdGhlIGxhdHRlciwgaXQncyBwb3NzaWJsZSB0byBhcnJhbmdlIGNvZGUgaW4gQUJJIG5ldXRyYWwKKysjIG1hbm5lci4gVGhlcmVmb3JlIGxldCdzIHN0aWNrIHRvIE5VQkkgcmVnaXN0ZXIgbGF5b3V0OgorKyMKKysoJHplcm8sJGF0LCR0MCwkdDEsJHQyKT1tYXAoIlwkJF8iLCgwLi4yLDI0LDI1KSk7CisrKCRhMCwkYTEsJGEyLCRhMywkYTQsJGE1LCRhNiwkYTcpPW1hcCgiXCQkXyIsKDQuLjExKSk7CisrKCRzMCwkczEsJHMyLCRzMywkczQsJHM1LCRzNiwkczcsJHM4LCRzOSwkczEwLCRzMTEpPW1hcCgiXCQkXyIsKDEyLi4yMykpOworKygkZ3AsJHRwLCRzcCwkZnAsJHJhKT1tYXAoIlwkJF8iLCgzLDI4Li4zMSkpOworKyMKKysjIFRoZSByZXR1cm4gdmFsdWUgaXMgcGxhY2VkIGluICRhMC4gRm9sbG93aW5nIGNvZGluZyBydWxlcyBmYWNpbGl0YXRlCisrIyBpbnRlcm9wZXJhYmlsaXR5OgorKyMKKysjIC0gbmV2ZXIgZXZlciB0b3VjaCAkdHAsICJ0aHJlYWQgcG9pbnRlciIsIGZvcm1lciAkZ3AgW28zMiBjYW4gYmUKKysjICAgZXhjbHVkZWQgZnJvbSB0aGUgcnVsZSwgYmVjYXVzZSBpdCdzIHNwZWNpZmllZCB2b2xhdGlsZV07CisrIyAtIGNvcHkgcmV0dXJuIHZhbHVlIHRvICR0MCwgZm9ybWVyICR2MCBbb3IgdG8gJGEwIGlmIHlvdSdyZSBhZGFwdGluZworKyMgICBvbGQgY29kZV07CisrIyAtIG9uIE8zMiBwb3B1bGF0ZSAkYTQtJGE3IHdpdGggJ2x3ICRhTiw0Kk4oJHNwKScgaWYgbmVjZXNzYXJ5OworKyMKKysjIEZvciByZWZlcmVuY2UgaGVyZSBpcyByZWdpc3RlciBsYXlvdXQgZm9yIE4zMi82NCBNSVBTIEFCSXM6CisrIworKyMgKCR6ZXJvLCRhdCwkdjAsJHYxKT1tYXAoIlwkJF8iLCgwLi4zKSk7CisrIyAoJGEwLCRhMSwkYTIsJGEzLCRhNCwkYTUsJGE2LCRhNyk9bWFwKCJcJCRfIiwoNC4uMTEpKTsKKysjICgkdDAsJHQxLCR0MiwkdDMsJHQ4LCR0OSk9bWFwKCJcJCRfIiwoMTIuLjE1LDI0LDI1KSk7CisrIyAoJHMwLCRzMSwkczIsJHMzLCRzNCwkczUsJHM2LCRzNyk9bWFwKCJcJCRfIiwoMTYuLjIzKSk7CisrIyAoJGdwLCRzcCwkZnAsJHJhKT1tYXAoIlwkJF8iLCgyOC4uMzEpKTsKKysjCisrIyA8YXBwcm9Ab3BlbnNzbC5vcmc+CisrIworKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysKKyskZmxhdm91ciA9IHNoaWZ0IHx8ICI2NCI7ICMgc3VwcG9ydGVkIGZsYXZvdXJzIGFyZSBvMzIsbjMyLDY0LG51YmkzMixudWJpNjQKKysKKyskdjAgPSAoJGZsYXZvdXIgPX4gL251YmkvaSkgPyAkYTAgOiAkdDA7CisrCisraWYgKCRmbGF2b3VyID1+IC82NHxuMzIvaSkge3t7CisrIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKyMgNjQtYml0IGNvZGUgcGF0aAorKyMKKysKKytteSAoJGN0eCwkaW5wLCRsZW4sJHBhZGJpdCkgPSAoJGEwLCRhMSwkYTIsJGEzKTsKKytteSAoJGluMCwkaW4xLCR0bXAwLCR0bXAxLCR0bXAyLCR0bXAzLCR0bXA0KSA9ICgkYTQsJGE1LCRhNiwkYTcsJGF0LCR0MCwkdDEpOworKworKyRjb2RlLj08PF9fXzsKKysjaWYgKGRlZmluZWQoX01JUFNfQVJDSF9NSVBTNjRSMykgfHwgZGVmaW5lZChfTUlQU19BUkNIX01JUFM2NFI1KSB8fCBcXAorKyAgICAgZGVmaW5lZChfTUlQU19BUkNIX01JUFM2NFI2KSkgXFwKKysgICAgICYmICFkZWZpbmVkKF9NSVBTX0FSQ0hfTUlQUzY0UjIpCisrIyBkZWZpbmUgX01JUFNfQVJDSF9NSVBTNjRSMgorKyNlbmRpZgorKworKyNpZiBkZWZpbmVkKF9NSVBTX0FSQ0hfTUlQUzY0UjYpCisrIyBkZWZpbmUgZG11bHR1KHJzLHJ0KQorKyMgZGVmaW5lIG1mbG8ocmQscnMscnQpCWRtdWx1CXJkLHJzLHJ0CisrIyBkZWZpbmUgbWZoaShyZCxycyxydCkJZG11aHUJcmQscnMscnQKKysjZWxzZQorKyMgZGVmaW5lIGRtdWx0dShycyxydCkJCWRtdWx0dQlycyxydAorKyMgZGVmaW5lIG1mbG8ocmQscnMscnQpCW1mbG8JcmQKKysjIGRlZmluZSBtZmhpKHJkLHJzLHJ0KQltZmhpCXJkCisrI2VuZGlmCisrCisrI2lmZGVmCV9fS0VSTkVMX18KKysjIGRlZmluZSBwb2x5MTMwNV9pbml0ICAgcG9seTEzMDVfaW5pdF9taXBzCisrIyBkZWZpbmUgcG9seTEzMDVfYmxvY2tzIHBvbHkxMzA1X2Jsb2Nrc19taXBzCisrIyBkZWZpbmUgcG9seTEzMDVfZW1pdCAgIHBvbHkxMzA1X2VtaXRfbWlwcworKyNlbmRpZgorKworKyNpZiBkZWZpbmVkKF9fTUlQU0VCX18pICYmICFkZWZpbmVkKE1JUFNFQikKKysjIGRlZmluZSBNSVBTRUIKKysjZW5kaWYKKysKKysjaWZkZWYgTUlQU0VCCisrIyBkZWZpbmUgTVNCIDAKKysjIGRlZmluZSBMU0IgNworKyNlbHNlCisrIyBkZWZpbmUgTVNCIDcKKysjIGRlZmluZSBMU0IgMAorKyNlbmRpZgorKworKy50ZXh0CisrLnNldAlub2F0CisrLnNldAlub3Jlb3JkZXIKKysKKysuYWxpZ24JNQorKy5nbG9ibAlwb2x5MTMwNV9pbml0CisrLmVudAlwb2x5MTMwNV9pbml0CisrcG9seTEzMDVfaW5pdDoKKysJLmZyYW1lCSRzcCwwLCRyYQorKwkuc2V0CXJlb3JkZXIKKysKKysJc2QJJHplcm8sMCgkY3R4KQorKwlzZAkkemVybyw4KCRjdHgpCisrCXNkCSR6ZXJvLDE2KCRjdHgpCisrCisrCWJlcXoJJGlucCwuTG5vX2tleQorKworKyNpZiBkZWZpbmVkKF9NSVBTX0FSQ0hfTUlQUzY0UjYpCisrCWFuZGkJJHRtcDAsJGlucCw3CQkjICRpbnAgJSA4CisrCWRzdWJ1CSRpbnAsJGlucCwkdG1wMAkJIyBhbGlnbiAkaW5wCisrCXNsbAkkdG1wMCwkdG1wMCwzCQkjIGJ5dGUgdG8gYml0IG9mZnNldAorKwlsZAkkaW4wLDAoJGlucCkKKysJbGQJJGluMSw4KCRpbnApCisrCWJlcXoJJHRtcDAsLkxhbGlnbmVkX2tleQorKwlsZAkkdG1wMiwxNigkaW5wKQorKworKwlzdWJ1CSR0bXAxLCR6ZXJvLCR0bXAwCisrIyBpZmRlZglNSVBTRUIKKysJZHNsbHYJJGluMCwkaW4wLCR0bXAwCisrCWRzcmx2CSR0bXAzLCRpbjEsJHRtcDEKKysJZHNsbHYJJGluMSwkaW4xLCR0bXAwCisrCWRzcmx2CSR0bXAyLCR0bXAyLCR0bXAxCisrIyBlbHNlCisrCWRzcmx2CSRpbjAsJGluMCwkdG1wMAorKwlkc2xsdgkkdG1wMywkaW4xLCR0bXAxCisrCWRzcmx2CSRpbjEsJGluMSwkdG1wMAorKwlkc2xsdgkkdG1wMiwkdG1wMiwkdG1wMQorKyMgZW5kaWYKKysJb3IJJGluMCwkaW4wLCR0bXAzCisrCW9yCSRpbjEsJGluMSwkdG1wMgorKy5MYWxpZ25lZF9rZXk6CisrI2Vsc2UKKysJbGRsCSRpbjAsMCtNU0IoJGlucCkKKysJbGRsCSRpbjEsOCtNU0IoJGlucCkKKysJbGRyCSRpbjAsMCtMU0IoJGlucCkKKysJbGRyCSRpbjEsOCtMU0IoJGlucCkKKysjZW5kaWYKKysjaWZkZWYJTUlQU0VCCisrIyBpZiBkZWZpbmVkKF9NSVBTX0FSQ0hfTUlQUzY0UjIpCisrCWRzYmgJJGluMCwkaW4wCQkjIGJ5dGUgc3dhcAorKwkgZHNiaAkkaW4xLCRpbjEKKysJZHNoZAkkaW4wLCRpbjAKKysJIGRzaGQJJGluMSwkaW4xCisrIyBlbHNlCisrCW9yaQkkdG1wMCwkemVybywweEZGCisrCWRzbGwJJHRtcDIsJHRtcDAsMzIKKysJb3IJJHRtcDAsJHRtcDIJCSMgMHgwMDAwMDBGRjAwMDAwMEZGCisrCisrCWFuZAkkdG1wMSwkaW4wLCR0bXAwCSMgYnl0ZSBzd2FwCisrCSBhbmQJJHRtcDMsJGluMSwkdG1wMAorKwlkc3JsCSR0bXAyLCRpbjAsMjQKKysJIGRzcmwJJHRtcDQsJGluMSwyNAorKwlkc2xsCSR0bXAxLDI0CisrCSBkc2xsCSR0bXAzLDI0CisrCWFuZAkkdG1wMiwkdG1wMAorKwkgYW5kCSR0bXA0LCR0bXAwCisrCWRzbGwJJHRtcDAsOAkJCSMgMHgwMDAwRkYwMDAwMDBGRjAwCisrCW9yCSR0bXAxLCR0bXAyCisrCSBvcgkkdG1wMywkdG1wNAorKwlhbmQJJHRtcDIsJGluMCwkdG1wMAorKwkgYW5kCSR0bXA0LCRpbjEsJHRtcDAKKysJZHNybAkkaW4wLDgKKysJIGRzcmwJJGluMSw4CisrCWRzbGwJJHRtcDIsOAorKwkgZHNsbAkkdG1wNCw4CisrCWFuZAkkaW4wLCR0bXAwCisrCSBhbmQJJGluMSwkdG1wMAorKwlvcgkkdG1wMSwkdG1wMgorKwkgb3IJJHRtcDMsJHRtcDQKKysJb3IJJGluMCwkdG1wMQorKwkgb3IJJGluMSwkdG1wMworKwlkc3JsCSR0bXAxLCRpbjAsMzIKKysJIGRzcmwJJHRtcDMsJGluMSwzMgorKwlkc2xsCSRpbjAsMzIKKysJIGRzbGwJJGluMSwzMgorKwlvcgkkaW4wLCR0bXAxCisrCSBvcgkkaW4xLCR0bXAzCisrIyBlbmRpZgorKyNlbmRpZgorKwlsaQkkdG1wMCwxCisrCWRzbGwJJHRtcDAsMzIJCSMgMHgwMDAwMDAwMTAwMDAwMDAwCisrCWRhZGRpdQkkdG1wMCwtNjMJCSMgMHgwMDAwMDAwMGZmZmZmZmMxCisrCWRzbGwJJHRtcDAsMjgJCSMgMHgwZmZmZmZmYzEwMDAwMDAwCisrCWRhZGRpdQkkdG1wMCwtMQkJIyAweDBmZmZmZmZjMGZmZmZmZmYKKysKKysJYW5kCSRpbjAsJHRtcDAKKysJZGFkZGl1CSR0bXAwLC0zCQkjIDB4MGZmZmZmZmMwZmZmZmZmYworKwlhbmQJJGluMSwkdG1wMAorKworKwlzZAkkaW4wLDI0KCRjdHgpCisrCWRzcmwJJHRtcDAsJGluMSwyCisrCXNkCSRpbjEsMzIoJGN0eCkKKysJZGFkZHUJJHRtcDAsJGluMQkJIyBzMSA9IHIxICsgKHIxID4+IDIpCisrCXNkCSR0bXAwLDQwKCRjdHgpCisrCisrLkxub19rZXk6CisrCWxpCSR2MCwwCQkJIyByZXR1cm4gMAorKwlqcgkkcmEKKysuZW5kCXBvbHkxMzA1X2luaXQKKytfX18KKyt7CisrbXkgJFNBVkVEX1JFR1NfTUFTSyA9ICgkZmxhdm91ciA9fiAvbnViaS9pKSA/ICIweDAwMDNmMDAwIiA6ICIweDAwMDMwMDAwIjsKKysKKytteSAoJGgwLCRoMSwkaDIsJHIwLCRyMSwkcnMxLCRkMCwkZDEsJGQyKSA9CisrICAgKCRzMCwkczEsJHMyLCRzMywkczQsJHM1LCRpbjAsJGluMSwkdDIpOworK215ICgkc2hyLCRzaGwpID0gKCRzNiwkczcpOwkJIyB1c2VkIG9uIFI2CisrCisrJGNvZGUuPTw8X19fOworKy5hbGlnbgk1CisrLmdsb2JsCXBvbHkxMzA1X2Jsb2NrcworKy5lbnQJcG9seTEzMDVfYmxvY2tzCisrcG9seTEzMDVfYmxvY2tzOgorKwkuc2V0CW5vcmVvcmRlcgorKwlkc3JsCSRsZW4sNAkJCSMgbnVtYmVyIG9mIGNvbXBsZXRlIGJsb2NrcworKwlibmV6CSRsZW4scG9seTEzMDVfYmxvY2tzX2ludGVybmFsCisrCW5vcAorKwlqcgkkcmEKKysJbm9wCisrLmVuZAlwb2x5MTMwNV9ibG9ja3MKKysKKysuYWxpZ24JNQorKy5lbnQJcG9seTEzMDVfYmxvY2tzX2ludGVybmFsCisrcG9seTEzMDVfYmxvY2tzX2ludGVybmFsOgorKwkuc2V0CW5vcmVvcmRlcgorKyNpZiBkZWZpbmVkKF9NSVBTX0FSQ0hfTUlQUzY0UjYpCisrCS5mcmFtZQkkc3AsOCo4LCRyYQorKwkubWFzawkkU0FWRURfUkVHU19NQVNLfDB4MDAwYzAwMDAsLTgKKysJZHN1YnUJJHNwLDgqOAorKwlzZAkkczcsNTYoJHNwKQorKwlzZAkkczYsNDgoJHNwKQorKyNlbHNlCisrCS5mcmFtZQkkc3AsNio4LCRyYQorKwkubWFzawkkU0FWRURfUkVHU19NQVNLLC04CisrCWRzdWJ1CSRzcCw2KjgKKysjZW5kaWYKKysJc2QJJHM1LDQwKCRzcCkKKysJc2QJJHM0LDMyKCRzcCkKKytfX18KKyskY29kZS49PDxfX18gaWYgKCRmbGF2b3VyID1+IC9udWJpL2kpOwkjIG9wdGltaXplIG5vbi1udWJpIHByb2xvZ3VlCisrCXNkCSRzMywyNCgkc3ApCisrCXNkCSRzMiwxNigkc3ApCisrCXNkCSRzMSw4KCRzcCkKKysJc2QJJHMwLDAoJHNwKQorK19fXworKyRjb2RlLj08PF9fXzsKKysJLnNldAlyZW9yZGVyCisrCisrI2lmIGRlZmluZWQoX01JUFNfQVJDSF9NSVBTNjRSNikKKysJYW5kaQkkc2hyLCRpbnAsNworKwlkc3VidQkkaW5wLCRpbnAsJHNocgkJIyBhbGlnbiAkaW5wCisrCXNsbAkkc2hyLCRzaHIsMwkJIyBieXRlIHRvIGJpdCBvZmZzZXQKKysJc3VidQkkc2hsLCR6ZXJvLCRzaHIKKysjZW5kaWYKKysKKysJbGQJJGgwLDAoJGN0eCkJCSMgbG9hZCBoYXNoIHZhbHVlCisrCWxkCSRoMSw4KCRjdHgpCisrCWxkCSRoMiwxNigkY3R4KQorKworKwlsZAkkcjAsMjQoJGN0eCkJCSMgbG9hZCBrZXkKKysJbGQJJHIxLDMyKCRjdHgpCisrCWxkCSRyczEsNDAoJGN0eCkKKysKKysJZHNsbAkkbGVuLDQKKysJZGFkZHUJJGxlbiwkaW5wCQkjIGVuZCBvZiBidWZmZXIKKysJYgkuTG9vcAorKworKy5hbGlnbgk0CisrLkxvb3A6CisrI2lmIGRlZmluZWQoX01JUFNfQVJDSF9NSVBTNjRSNikKKysJbGQJJGluMCwwKCRpbnApCQkjIGxvYWQgaW5wdXQKKysJbGQJJGluMSw4KCRpbnApCisrCWJlcXoJJHNociwuTGFsaWduZWRfaW5wCisrCisrCWxkCSR0bXAyLDE2KCRpbnApCisrIyBpZmRlZglNSVBTRUIKKysJZHNsbHYJJGluMCwkaW4wLCRzaHIKKysJZHNybHYJJHRtcDMsJGluMSwkc2hsCisrCWRzbGx2CSRpbjEsJGluMSwkc2hyCisrCWRzcmx2CSR0bXAyLCR0bXAyLCRzaGwKKysjIGVsc2UKKysJZHNybHYJJGluMCwkaW4wLCRzaHIKKysJZHNsbHYJJHRtcDMsJGluMSwkc2hsCisrCWRzcmx2CSRpbjEsJGluMSwkc2hyCisrCWRzbGx2CSR0bXAyLCR0bXAyLCRzaGwKKysjIGVuZGlmCisrCW9yCSRpbjAsJGluMCwkdG1wMworKwlvcgkkaW4xLCRpbjEsJHRtcDIKKysuTGFsaWduZWRfaW5wOgorKyNlbHNlCisrCWxkbAkkaW4wLDArTVNCKCRpbnApCSMgbG9hZCBpbnB1dAorKwlsZGwJJGluMSw4K01TQigkaW5wKQorKwlsZHIJJGluMCwwK0xTQigkaW5wKQorKwlsZHIJJGluMSw4K0xTQigkaW5wKQorKyNlbmRpZgorKwlkYWRkaXUJJGlucCwxNgorKyNpZmRlZglNSVBTRUIKKysjIGlmIGRlZmluZWQoX01JUFNfQVJDSF9NSVBTNjRSMikKKysJZHNiaAkkaW4wLCRpbjAJCSMgYnl0ZSBzd2FwCisrCSBkc2JoCSRpbjEsJGluMQorKwlkc2hkCSRpbjAsJGluMAorKwkgZHNoZAkkaW4xLCRpbjEKKysjIGVsc2UKKysJb3JpCSR0bXAwLCR6ZXJvLDB4RkYKKysJZHNsbAkkdG1wMiwkdG1wMCwzMgorKwlvcgkkdG1wMCwkdG1wMgkJIyAweDAwMDAwMEZGMDAwMDAwRkYKKysKKysJYW5kCSR0bXAxLCRpbjAsJHRtcDAJIyBieXRlIHN3YXAKKysJIGFuZAkkdG1wMywkaW4xLCR0bXAwCisrCWRzcmwJJHRtcDIsJGluMCwyNAorKwkgZHNybAkkdG1wNCwkaW4xLDI0CisrCWRzbGwJJHRtcDEsMjQKKysJIGRzbGwJJHRtcDMsMjQKKysJYW5kCSR0bXAyLCR0bXAwCisrCSBhbmQJJHRtcDQsJHRtcDAKKysJZHNsbAkkdG1wMCw4CQkJIyAweDAwMDBGRjAwMDAwMEZGMDAKKysJb3IJJHRtcDEsJHRtcDIKKysJIG9yCSR0bXAzLCR0bXA0CisrCWFuZAkkdG1wMiwkaW4wLCR0bXAwCisrCSBhbmQJJHRtcDQsJGluMSwkdG1wMAorKwlkc3JsCSRpbjAsOAorKwkgZHNybAkkaW4xLDgKKysJZHNsbAkkdG1wMiw4CisrCSBkc2xsCSR0bXA0LDgKKysJYW5kCSRpbjAsJHRtcDAKKysJIGFuZAkkaW4xLCR0bXAwCisrCW9yCSR0bXAxLCR0bXAyCisrCSBvcgkkdG1wMywkdG1wNAorKwlvcgkkaW4wLCR0bXAxCisrCSBvcgkkaW4xLCR0bXAzCisrCWRzcmwJJHRtcDEsJGluMCwzMgorKwkgZHNybAkkdG1wMywkaW4xLDMyCisrCWRzbGwJJGluMCwzMgorKwkgZHNsbAkkaW4xLDMyCisrCW9yCSRpbjAsJHRtcDEKKysJIG9yCSRpbjEsJHRtcDMKKysjIGVuZGlmCisrI2VuZGlmCisrCWRzcmwJJHRtcDEsJGgyLDIJCSMgbW9kdWxvLXNjaGVkdWxlZCByZWR1Y3Rpb24KKysJYW5kaQkkaDIsJGgyLDMKKysJZHNsbAkkdG1wMCwkdG1wMSwyCisrCisrCWRhZGR1CSRkMCwkaDAsJGluMAkJIyBhY2N1bXVsYXRlIGlucHV0CisrCSBkYWRkdQkkdG1wMSwkdG1wMAorKwlzbHR1CSR0bXAwLCRkMCwkaDAKKysJZGFkZHUJJGQwLCRkMCwkdG1wMQkJIyAuLi4gYW5kIHJlc2lkdWUKKysJc2x0dQkkdG1wMSwkZDAsJHRtcDEKKysJZGFkZHUJJGQxLCRoMSwkaW4xCisrCWRhZGR1CSR0bXAwLCR0bXAxCisrCXNsdHUJJHRtcDEsJGQxLCRoMQorKwlkYWRkdQkkZDEsJHRtcDAKKysKKysJZG11bHR1CSgkcjAsJGQwKQkJIyBoMCpyMAorKwkgZGFkZHUJJGQyLCRoMiwkcGFkYml0CisrCSBzbHR1CSR0bXAwLCRkMSwkdG1wMAorKwltZmxvCSgkaDAsJHIwLCRkMCkKKysJbWZoaQkoJGgxLCRyMCwkZDApCisrCisrCWRtdWx0dQkoJHJzMSwkZDEpCQkjIGgxKjUqcjEKKysJIGRhZGR1CSRkMiwkdG1wMQorKwkgZGFkZHUJJGQyLCR0bXAwCisrCW1mbG8JKCR0bXAwLCRyczEsJGQxKQorKwltZmhpCSgkdG1wMSwkcnMxLCRkMSkKKysKKysJZG11bHR1CSgkcjEsJGQwKQkJIyBoMCpyMQorKwltZmxvCSgkdG1wMiwkcjEsJGQwKQorKwltZmhpCSgkaDIsJHIxLCRkMCkKKysJIGRhZGR1CSRoMCwkdG1wMAorKwkgZGFkZHUJJGgxLCR0bXAxCisrCSBzbHR1CSR0bXAwLCRoMCwkdG1wMAorKworKwlkbXVsdHUJKCRyMCwkZDEpCQkjIGgxKnIwCisrCSBkYWRkdQkkaDEsJHRtcDAKKysJIGRhZGR1CSRoMSwkdG1wMgorKwltZmxvCSgkdG1wMCwkcjAsJGQxKQorKwltZmhpCSgkdG1wMSwkcjAsJGQxKQorKworKwlkbXVsdHUJKCRyczEsJGQyKQkJIyBoMio1KnIxCisrCSBzbHR1CSR0bXAyLCRoMSwkdG1wMgorKwkgZGFkZHUJJGgyLCR0bXAyCisrCW1mbG8JKCR0bXAyLCRyczEsJGQyKQorKworKwlkbXVsdHUJKCRyMCwkZDIpCQkjIGgyKnIwCisrCSBkYWRkdQkkaDEsJHRtcDAKKysJIGRhZGR1CSRoMiwkdG1wMQorKwltZmxvCSgkdG1wMywkcjAsJGQyKQorKwkgc2x0dQkkdG1wMCwkaDEsJHRtcDAKKysJIGRhZGR1CSRoMiwkdG1wMAorKworKwlkYWRkdQkkaDEsJHRtcDIKKysJc2x0dQkkdG1wMiwkaDEsJHRtcDIKKysJZGFkZHUJJGgyLCR0bXAyCisrCWRhZGR1CSRoMiwkdG1wMworKworKwlibmUJJGlucCwkbGVuLC5Mb29wCisrCisrCXNkCSRoMCwwKCRjdHgpCQkjIHN0b3JlIGhhc2ggdmFsdWUKKysJc2QJJGgxLDgoJGN0eCkKKysJc2QJJGgyLDE2KCRjdHgpCisrCisrCS5zZXQJbm9yZW9yZGVyCisrI2lmIGRlZmluZWQoX01JUFNfQVJDSF9NSVBTNjRSNikKKysJbGQJJHM3LDU2KCRzcCkKKysJbGQJJHM2LDQ4KCRzcCkKKysjZW5kaWYKKysJbGQJJHM1LDQwKCRzcCkJCSMgZXBpbG9ndWUKKysJbGQJJHM0LDMyKCRzcCkKKytfX18KKyskY29kZS49PDxfX18gaWYgKCRmbGF2b3VyID1+IC9udWJpL2kpOwkjIG9wdGltaXplIG5vbi1udWJpIGVwaWxvZ3VlCisrCWxkCSRzMywyNCgkc3ApCisrCWxkCSRzMiwxNigkc3ApCisrCWxkCSRzMSw4KCRzcCkKKysJbGQJJHMwLDAoJHNwKQorK19fXworKyRjb2RlLj08PF9fXzsKKysJanIJJHJhCisrI2lmIGRlZmluZWQoX01JUFNfQVJDSF9NSVBTNjRSNikKKysJZGFkZHUJJHNwLDgqOAorKyNlbHNlCisrCWRhZGR1CSRzcCw2KjgKKysjZW5kaWYKKysuZW5kCXBvbHkxMzA1X2Jsb2Nrc19pbnRlcm5hbAorK19fXworK30KKyt7CisrbXkgKCRjdHgsJG1hYywkbm9uY2UpID0gKCRhMCwkYTEsJGEyKTsKKysKKyskY29kZS49PDxfX187CisrLmFsaWduCTUKKysuZ2xvYmwJcG9seTEzMDVfZW1pdAorKy5lbnQJcG9seTEzMDVfZW1pdAorK3BvbHkxMzA1X2VtaXQ6CisrCS5mcmFtZQkkc3AsMCwkcmEKKysJLnNldAlyZW9yZGVyCisrCisrCWxkCSR0bXAyLDE2KCRjdHgpCisrCWxkCSR0bXAwLDAoJGN0eCkKKysJbGQJJHRtcDEsOCgkY3R4KQorKworKwlsaQkkaW4wLC00CQkJIyBmaW5hbCByZWR1Y3Rpb24KKysJZHNybAkkaW4xLCR0bXAyLDIKKysJYW5kCSRpbjAsJHRtcDIKKysJYW5kaQkkdG1wMiwkdG1wMiwzCisrCWRhZGR1CSRpbjAsJGluMQorKworKwlkYWRkdQkkdG1wMCwkdG1wMCwkaW4wCisrCXNsdHUJJGluMSwkdG1wMCwkaW4wCisrCSBkYWRkaXUJJGluMCwkdG1wMCw1CQkjIGNvbXBhcmUgdG8gbW9kdWx1cworKwlkYWRkdQkkdG1wMSwkdG1wMSwkaW4xCisrCSBzbHRpdQkkdG1wMywkaW4wLDUKKysJc2x0dQkkdG1wNCwkdG1wMSwkaW4xCisrCSBkYWRkdQkkaW4xLCR0bXAxLCR0bXAzCisrCWRhZGR1CSR0bXAyLCR0bXAyLCR0bXA0CisrCSBzbHR1CSR0bXAzLCRpbjEsJHRtcDMKKysJIGRhZGR1CSR0bXAyLCR0bXAyLCR0bXAzCisrCisrCWRzcmwJJHRtcDIsMgkJCSMgc2VlIGlmIGl0IGNhcnJpZWQvYm9ycm93ZWQKKysJZHN1YnUJJHRtcDIsJHplcm8sJHRtcDIKKysKKysJeG9yCSRpbjAsJHRtcDAKKysJeG9yCSRpbjEsJHRtcDEKKysJYW5kCSRpbjAsJHRtcDIKKysJYW5kCSRpbjEsJHRtcDIKKysJeG9yCSRpbjAsJHRtcDAKKysJeG9yCSRpbjEsJHRtcDEKKysKKysJbHd1CSR0bXAwLDAoJG5vbmNlKQkJIyBsb2FkIG5vbmNlCisrCWx3dQkkdG1wMSw0KCRub25jZSkKKysJbHd1CSR0bXAyLDgoJG5vbmNlKQorKwlsd3UJJHRtcDMsMTIoJG5vbmNlKQorKwlkc2xsCSR0bXAxLDMyCisrCWRzbGwJJHRtcDMsMzIKKysJb3IJJHRtcDAsJHRtcDEKKysJb3IJJHRtcDIsJHRtcDMKKysKKysJZGFkZHUJJGluMCwkdG1wMAkJIyBhY2N1bXVsYXRlIG5vbmNlCisrCWRhZGR1CSRpbjEsJHRtcDIKKysJc2x0dQkkdG1wMCwkaW4wLCR0bXAwCisrCWRhZGR1CSRpbjEsJHRtcDAKKysKKysJZHNybAkkdG1wMCwkaW4wLDgJCSMgd3JpdGUgbWFjIHZhbHVlCisrCWRzcmwJJHRtcDEsJGluMCwxNgorKwlkc3JsCSR0bXAyLCRpbjAsMjQKKysJc2IJJGluMCwwKCRtYWMpCisrCWRzcmwJJHRtcDMsJGluMCwzMgorKwlzYgkkdG1wMCwxKCRtYWMpCisrCWRzcmwJJHRtcDAsJGluMCw0MAorKwlzYgkkdG1wMSwyKCRtYWMpCisrCWRzcmwJJHRtcDEsJGluMCw0OAorKwlzYgkkdG1wMiwzKCRtYWMpCisrCWRzcmwJJHRtcDIsJGluMCw1NgorKwlzYgkkdG1wMyw0KCRtYWMpCisrCWRzcmwJJHRtcDMsJGluMSw4CisrCXNiCSR0bXAwLDUoJG1hYykKKysJZHNybAkkdG1wMCwkaW4xLDE2CisrCXNiCSR0bXAxLDYoJG1hYykKKysJZHNybAkkdG1wMSwkaW4xLDI0CisrCXNiCSR0bXAyLDcoJG1hYykKKysKKysJc2IJJGluMSw4KCRtYWMpCisrCWRzcmwJJHRtcDIsJGluMSwzMgorKwlzYgkkdG1wMyw5KCRtYWMpCisrCWRzcmwJJHRtcDMsJGluMSw0MAorKwlzYgkkdG1wMCwxMCgkbWFjKQorKwlkc3JsCSR0bXAwLCRpbjEsNDgKKysJc2IJJHRtcDEsMTEoJG1hYykKKysJZHNybAkkdG1wMSwkaW4xLDU2CisrCXNiCSR0bXAyLDEyKCRtYWMpCisrCXNiCSR0bXAzLDEzKCRtYWMpCisrCXNiCSR0bXAwLDE0KCRtYWMpCisrCXNiCSR0bXAxLDE1KCRtYWMpCisrCisrCWpyCSRyYQorKy5lbmQJcG9seTEzMDVfZW1pdAorKy5yZGF0YQorKy5hc2NpaXoJIlBvbHkxMzA1IGZvciBNSVBTNjQsIENSWVBUT0dBTVMgYnkgXEBkb3QtYXNtIgorKy5hbGlnbgkyCisrX19fCisrfQorK319fSBlbHNlIHt7eworKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysjIDMyLWJpdCBjb2RlIHBhdGgKKysjCisrCisrbXkgKCRjdHgsJGlucCwkbGVuLCRwYWRiaXQpID0gKCRhMCwkYTEsJGEyLCRhMyk7CisrbXkgKCRpbjAsJGluMSwkaW4yLCRpbjMsJHRtcDAsJHRtcDEsJHRtcDIsJHRtcDMpID0KKysgICAoJGE0LCRhNSwkYTYsJGE3LCRhdCwkdDAsJHQxLCR0Mik7CisrCisrJGNvZGUuPTw8X19fOworKyNpZiAoZGVmaW5lZChfTUlQU19BUkNIX01JUFMzMlIzKSB8fCBkZWZpbmVkKF9NSVBTX0FSQ0hfTUlQUzMyUjUpIHx8IFxcCisrICAgICBkZWZpbmVkKF9NSVBTX0FSQ0hfTUlQUzMyUjYpKSBcXAorKyAgICAgJiYgIWRlZmluZWQoX01JUFNfQVJDSF9NSVBTMzJSMikKKysjIGRlZmluZSBfTUlQU19BUkNIX01JUFMzMlIyCisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQoX01JUFNfQVJDSF9NSVBTMzJSNikKKysjIGRlZmluZSBtdWx0dShycyxydCkKKysjIGRlZmluZSBtZmxvKHJkLHJzLHJ0KQltdWx1CXJkLHJzLHJ0CisrIyBkZWZpbmUgbWZoaShyZCxycyxydCkJbXVodQlyZCxycyxydAorKyNlbHNlCisrIyBkZWZpbmUgbXVsdHUocnMscnQpCW11bHR1CXJzLHJ0CisrIyBkZWZpbmUgbWZsbyhyZCxycyxydCkJbWZsbwlyZAorKyMgZGVmaW5lIG1maGkocmQscnMscnQpCW1maGkJcmQKKysjZW5kaWYKKysKKysjaWZkZWYJX19LRVJORUxfXworKyMgZGVmaW5lIHBvbHkxMzA1X2luaXQgICBwb2x5MTMwNV9pbml0X21pcHMKKysjIGRlZmluZSBwb2x5MTMwNV9ibG9ja3MgcG9seTEzMDVfYmxvY2tzX21pcHMKKysjIGRlZmluZSBwb2x5MTMwNV9lbWl0ICAgcG9seTEzMDVfZW1pdF9taXBzCisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQoX19NSVBTRUJfXykgJiYgIWRlZmluZWQoTUlQU0VCKQorKyMgZGVmaW5lIE1JUFNFQgorKyNlbmRpZgorKworKyNpZmRlZiBNSVBTRUIKKysjIGRlZmluZSBNU0IgMAorKyMgZGVmaW5lIExTQiAzCisrI2Vsc2UKKysjIGRlZmluZSBNU0IgMworKyMgZGVmaW5lIExTQiAwCisrI2VuZGlmCisrCisrLnRleHQKKysuc2V0CW5vYXQKKysuc2V0CW5vcmVvcmRlcgorKworKy5hbGlnbgk1CisrLmdsb2JsCXBvbHkxMzA1X2luaXQKKysuZW50CXBvbHkxMzA1X2luaXQKKytwb2x5MTMwNV9pbml0OgorKwkuZnJhbWUJJHNwLDAsJHJhCisrCS5zZXQJcmVvcmRlcgorKworKwlzdwkkemVybywwKCRjdHgpCisrCXN3CSR6ZXJvLDQoJGN0eCkKKysJc3cJJHplcm8sOCgkY3R4KQorKwlzdwkkemVybywxMigkY3R4KQorKwlzdwkkemVybywxNigkY3R4KQorKworKwliZXF6CSRpbnAsLkxub19rZXkKKysKKysjaWYgZGVmaW5lZChfTUlQU19BUkNIX01JUFMzMlI2KQorKwlhbmRpCSR0bXAwLCRpbnAsMwkJIyAkaW5wICUgNAorKwlzdWJ1CSRpbnAsJGlucCwkdG1wMAkJIyBhbGlnbiAkaW5wCisrCXNsbAkkdG1wMCwkdG1wMCwzCQkjIGJ5dGUgdG8gYml0IG9mZnNldAorKwlsdwkkaW4wLDAoJGlucCkKKysJbHcJJGluMSw0KCRpbnApCisrCWx3CSRpbjIsOCgkaW5wKQorKwlsdwkkaW4zLDEyKCRpbnApCisrCWJlcXoJJHRtcDAsLkxhbGlnbmVkX2tleQorKworKwlsdwkkdG1wMiwxNigkaW5wKQorKwlzdWJ1CSR0bXAxLCR6ZXJvLCR0bXAwCisrIyBpZmRlZglNSVBTRUIKKysJc2xsdgkkaW4wLCRpbjAsJHRtcDAKKysJc3JsdgkkdG1wMywkaW4xLCR0bXAxCisrCXNsbHYJJGluMSwkaW4xLCR0bXAwCisrCW9yCSRpbjAsJGluMCwkdG1wMworKwlzcmx2CSR0bXAzLCRpbjIsJHRtcDEKKysJc2xsdgkkaW4yLCRpbjIsJHRtcDAKKysJb3IJJGluMSwkaW4xLCR0bXAzCisrCXNybHYJJHRtcDMsJGluMywkdG1wMQorKwlzbGx2CSRpbjMsJGluMywkdG1wMAorKwlvcgkkaW4yLCRpbjIsJHRtcDMKKysJc3JsdgkkdG1wMiwkdG1wMiwkdG1wMQorKwlvcgkkaW4zLCRpbjMsJHRtcDIKKysjIGVsc2UKKysJc3JsdgkkaW4wLCRpbjAsJHRtcDAKKysJc2xsdgkkdG1wMywkaW4xLCR0bXAxCisrCXNybHYJJGluMSwkaW4xLCR0bXAwCisrCW9yCSRpbjAsJGluMCwkdG1wMworKwlzbGx2CSR0bXAzLCRpbjIsJHRtcDEKKysJc3JsdgkkaW4yLCRpbjIsJHRtcDAKKysJb3IJJGluMSwkaW4xLCR0bXAzCisrCXNsbHYJJHRtcDMsJGluMywkdG1wMQorKwlzcmx2CSRpbjMsJGluMywkdG1wMAorKwlvcgkkaW4yLCRpbjIsJHRtcDMKKysJc2xsdgkkdG1wMiwkdG1wMiwkdG1wMQorKwlvcgkkaW4zLCRpbjMsJHRtcDIKKysjIGVuZGlmCisrLkxhbGlnbmVkX2tleToKKysjZWxzZQorKwlsd2wJJGluMCwwK01TQigkaW5wKQorKwlsd2wJJGluMSw0K01TQigkaW5wKQorKwlsd2wJJGluMiw4K01TQigkaW5wKQorKwlsd2wJJGluMywxMitNU0IoJGlucCkKKysJbHdyCSRpbjAsMCtMU0IoJGlucCkKKysJbHdyCSRpbjEsNCtMU0IoJGlucCkKKysJbHdyCSRpbjIsOCtMU0IoJGlucCkKKysJbHdyCSRpbjMsMTIrTFNCKCRpbnApCisrI2VuZGlmCisrI2lmZGVmCU1JUFNFQgorKyMgaWYgZGVmaW5lZChfTUlQU19BUkNIX01JUFMzMlIyKQorKwl3c2JoCSRpbjAsJGluMAkJIyBieXRlIHN3YXAKKysJd3NiaAkkaW4xLCRpbjEKKysJd3NiaAkkaW4yLCRpbjIKKysJd3NiaAkkaW4zLCRpbjMKKysJcm90cgkkaW4wLCRpbjAsMTYKKysJcm90cgkkaW4xLCRpbjEsMTYKKysJcm90cgkkaW4yLCRpbjIsMTYKKysJcm90cgkkaW4zLCRpbjMsMTYKKysjIGVsc2UKKysJc3JsCSR0bXAwLCRpbjAsMjQJCSMgYnl0ZSBzd2FwCisrCXNybAkkdG1wMSwkaW4wLDgKKysJYW5kaQkkdG1wMiwkaW4wLDB4RkYwMAorKwlzbGwJJGluMCwkaW4wLDI0CisrCWFuZGkJJHRtcDEsMHhGRjAwCisrCXNsbAkkdG1wMiwkdG1wMiw4CisrCW9yCSRpbjAsJHRtcDAKKysJIHNybAkkdG1wMCwkaW4xLDI0CisrCW9yCSR0bXAxLCR0bXAyCisrCSBzcmwJJHRtcDIsJGluMSw4CisrCW9yCSRpbjAsJHRtcDEKKysJIGFuZGkJJHRtcDEsJGluMSwweEZGMDAKKysJIHNsbAkkaW4xLCRpbjEsMjQKKysJIGFuZGkJJHRtcDIsMHhGRjAwCisrCSBzbGwJJHRtcDEsJHRtcDEsOAorKwkgb3IJJGluMSwkdG1wMAorKwlzcmwJJHRtcDAsJGluMiwyNAorKwkgb3IJJHRtcDIsJHRtcDEKKysJc3JsCSR0bXAxLCRpbjIsOAorKwkgb3IJJGluMSwkdG1wMgorKwlhbmRpCSR0bXAyLCRpbjIsMHhGRjAwCisrCXNsbAkkaW4yLCRpbjIsMjQKKysJYW5kaQkkdG1wMSwweEZGMDAKKysJc2xsCSR0bXAyLCR0bXAyLDgKKysJb3IJJGluMiwkdG1wMAorKwkgc3JsCSR0bXAwLCRpbjMsMjQKKysJb3IJJHRtcDEsJHRtcDIKKysJIHNybAkkdG1wMiwkaW4zLDgKKysJb3IJJGluMiwkdG1wMQorKwkgYW5kaQkkdG1wMSwkaW4zLDB4RkYwMAorKwkgc2xsCSRpbjMsJGluMywyNAorKwkgYW5kaQkkdG1wMiwweEZGMDAKKysJIHNsbAkkdG1wMSwkdG1wMSw4CisrCSBvcgkkaW4zLCR0bXAwCisrCSBvcgkkdG1wMiwkdG1wMQorKwkgb3IJJGluMywkdG1wMgorKyMgZW5kaWYKKysjZW5kaWYKKysJbHVpCSR0bXAwLDB4MGZmZgorKwlvcmkJJHRtcDAsMHhmZmZmCQkjIDB4MGZmZmZmZmYKKysJYW5kCSRpbjAsJGluMCwkdG1wMAorKwlzdWJ1CSR0bXAwLDMJCQkjIDB4MGZmZmZmZmMKKysJYW5kCSRpbjEsJGluMSwkdG1wMAorKwlhbmQJJGluMiwkaW4yLCR0bXAwCisrCWFuZAkkaW4zLCRpbjMsJHRtcDAKKysKKysJc3cJJGluMCwyMCgkY3R4KQorKwlzdwkkaW4xLDI0KCRjdHgpCisrCXN3CSRpbjIsMjgoJGN0eCkKKysJc3cJJGluMywzMigkY3R4KQorKworKwlzcmwJJHRtcDEsJGluMSwyCisrCXNybAkkdG1wMiwkaW4yLDIKKysJc3JsCSR0bXAzLCRpbjMsMgorKwlhZGR1CSRpbjEsJGluMSwkdG1wMQkJIyBzMSA9IHIxICsgKHIxID4+IDIpCisrCWFkZHUJJGluMiwkaW4yLCR0bXAyCisrCWFkZHUJJGluMywkaW4zLCR0bXAzCisrCXN3CSRpbjEsMzYoJGN0eCkKKysJc3cJJGluMiw0MCgkY3R4KQorKwlzdwkkaW4zLDQ0KCRjdHgpCisrLkxub19rZXk6CisrCWxpCSR2MCwwCisrCWpyCSRyYQorKy5lbmQJcG9seTEzMDVfaW5pdAorK19fXworK3sKKytteSAkU0FWRURfUkVHU19NQVNLID0gKCRmbGF2b3VyID1+IC9udWJpL2kpID8gIjB4MDBmZmYwMDAiIDogIjB4MDBmZjAwMDAiOworKworK215ICgkaDAsJGgxLCRoMiwkaDMsJGg0LCAkcjAsJHIxLCRyMiwkcjMsICRyczEsJHJzMiwkcnMzKSA9CisrICAgKCRzMCwkczEsJHMyLCRzMywkczQsICRzNSwkczYsJHM3LCRzOCwgJHM5LCRzMTAsJHMxMSk7CisrbXkgKCRkMCwkZDEsJGQyLCRkMykgPQorKyAgICgkYTQsJGE1LCRhNiwkYTcpOworK215ICRzaHIgPSAkdDI7CQkjIHVzZWQgb24gUjYKKytteSAkb25lID0gJHQyOwkJIyB1c2VkIG9uIFIyCisrCisrJGNvZGUuPTw8X19fOworKy5nbG9ibAlwb2x5MTMwNV9ibG9ja3MKKysuYWxpZ24JNQorKy5lbnQJcG9seTEzMDVfYmxvY2tzCisrcG9seTEzMDVfYmxvY2tzOgorKwkuZnJhbWUJJHNwLDE2KjQsJHJhCisrCS5tYXNrCSRTQVZFRF9SRUdTX01BU0ssLTQKKysJLnNldAlub3Jlb3JkZXIKKysJc3VidQkkc3AsICRzcCw0KjEyCisrCXN3CSRzMTEsNCoxMSgkc3ApCisrCXN3CSRzMTAsNCoxMCgkc3ApCisrCXN3CSRzOSwgNCo5KCRzcCkKKysJc3cJJHM4LCA0KjgoJHNwKQorKwlzdwkkczcsIDQqNygkc3ApCisrCXN3CSRzNiwgNCo2KCRzcCkKKysJc3cJJHM1LCA0KjUoJHNwKQorKwlzdwkkczQsIDQqNCgkc3ApCisrX19fCisrJGNvZGUuPTw8X19fIGlmICgkZmxhdm91ciA9fiAvbnViaS9pKTsJIyBvcHRpbWl6ZSBub24tbnViaSBwcm9sb2d1ZQorKwlzdwkkczMsIDQqMygkc3ApCisrCXN3CSRzMiwgNCoyKCRzcCkKKysJc3cJJHMxLCA0KjEoJHNwKQorKwlzdwkkczAsIDQqMCgkc3ApCisrX19fCisrJGNvZGUuPTw8X19fOworKwkuc2V0CXJlb3JkZXIKKysKKysJc3JsCSRsZW4sNAkJCSMgbnVtYmVyIG9mIGNvbXBsZXRlIGJsb2NrcworKwlsaQkkb25lLDEKKysJYmVxegkkbGVuLC5MYWJvcnQKKysKKysjaWYgZGVmaW5lZChfTUlQU19BUkNIX01JUFMzMlI2KQorKwlhbmRpCSRzaHIsJGlucCwzCisrCXN1YnUJJGlucCwkaW5wLCRzaHIJCSMgYWxpZ24gJGlucAorKwlzbGwJJHNociwkc2hyLDMJCSMgYnl0ZSB0byBiaXQgb2Zmc2V0CisrI2VuZGlmCisrCisrCWx3CSRoMCwwKCRjdHgpCQkjIGxvYWQgaGFzaCB2YWx1ZQorKwlsdwkkaDEsNCgkY3R4KQorKwlsdwkkaDIsOCgkY3R4KQorKwlsdwkkaDMsMTIoJGN0eCkKKysJbHcJJGg0LDE2KCRjdHgpCisrCisrCWx3CSRyMCwyMCgkY3R4KQkJIyBsb2FkIGtleQorKwlsdwkkcjEsMjQoJGN0eCkKKysJbHcJJHIyLDI4KCRjdHgpCisrCWx3CSRyMywzMigkY3R4KQorKwlsdwkkcnMxLDM2KCRjdHgpCisrCWx3CSRyczIsNDAoJGN0eCkKKysJbHcJJHJzMyw0NCgkY3R4KQorKworKwlzbGwJJGxlbiw0CisrCWFkZHUJJGxlbiwkbGVuLCRpbnAJCSMgZW5kIG9mIGJ1ZmZlcgorKwliCS5Mb29wCisrCisrLmFsaWduCTQKKysuTG9vcDoKKysjaWYgZGVmaW5lZChfTUlQU19BUkNIX01JUFMzMlI2KQorKwlsdwkkZDAsMCgkaW5wKQkJIyBsb2FkIGlucHV0CisrCWx3CSRkMSw0KCRpbnApCisrCWx3CSRkMiw4KCRpbnApCisrCWx3CSRkMywxMigkaW5wKQorKwliZXF6CSRzaHIsLkxhbGlnbmVkX2lucAorKworKwlsdwkkdDAsMTYoJGlucCkKKysJc3VidQkkdDEsJHplcm8sJHNocgorKyMgaWZkZWYJTUlQU0VCCisrCXNsbHYJJGQwLCRkMCwkc2hyCisrCXNybHYJJGF0LCRkMSwkdDEKKysJc2xsdgkkZDEsJGQxLCRzaHIKKysJb3IJJGQwLCRkMCwkYXQKKysJc3JsdgkkYXQsJGQyLCR0MQorKwlzbGx2CSRkMiwkZDIsJHNocgorKwlvcgkkZDEsJGQxLCRhdAorKwlzcmx2CSRhdCwkZDMsJHQxCisrCXNsbHYJJGQzLCRkMywkc2hyCisrCW9yCSRkMiwkZDIsJGF0CisrCXNybHYJJHQwLCR0MCwkdDEKKysJb3IJJGQzLCRkMywkdDAKKysjIGVsc2UKKysJc3JsdgkkZDAsJGQwLCRzaHIKKysJc2xsdgkkYXQsJGQxLCR0MQorKwlzcmx2CSRkMSwkZDEsJHNocgorKwlvcgkkZDAsJGQwLCRhdAorKwlzbGx2CSRhdCwkZDIsJHQxCisrCXNybHYJJGQyLCRkMiwkc2hyCisrCW9yCSRkMSwkZDEsJGF0CisrCXNsbHYJJGF0LCRkMywkdDEKKysJc3JsdgkkZDMsJGQzLCRzaHIKKysJb3IJJGQyLCRkMiwkYXQKKysJc2xsdgkkdDAsJHQwLCR0MQorKwlvcgkkZDMsJGQzLCR0MAorKyMgZW5kaWYKKysuTGFsaWduZWRfaW5wOgorKyNlbHNlCisrCWx3bAkkZDAsMCtNU0IoJGlucCkJCSMgbG9hZCBpbnB1dAorKwlsd2wJJGQxLDQrTVNCKCRpbnApCisrCWx3bAkkZDIsOCtNU0IoJGlucCkKKysJbHdsCSRkMywxMitNU0IoJGlucCkKKysJbHdyCSRkMCwwK0xTQigkaW5wKQorKwlsd3IJJGQxLDQrTFNCKCRpbnApCisrCWx3cgkkZDIsOCtMU0IoJGlucCkKKysJbHdyCSRkMywxMitMU0IoJGlucCkKKysjZW5kaWYKKysjaWZkZWYJTUlQU0VCCisrIyBpZiBkZWZpbmVkKF9NSVBTX0FSQ0hfTUlQUzMyUjIpCisrCXdzYmgJJGQwLCRkMAkJCSMgYnl0ZSBzd2FwCisrCXdzYmgJJGQxLCRkMQorKwl3c2JoCSRkMiwkZDIKKysJd3NiaAkkZDMsJGQzCisrCXJvdHIJJGQwLCRkMCwxNgorKwlyb3RyCSRkMSwkZDEsMTYKKysJcm90cgkkZDIsJGQyLDE2CisrCXJvdHIJJGQzLCRkMywxNgorKyMgZWxzZQorKwlzcmwJJGF0LCRkMCwyNAkJIyBieXRlIHN3YXAKKysJc3JsCSR0MCwkZDAsOAorKwlhbmRpCSR0MSwkZDAsMHhGRjAwCisrCXNsbAkkZDAsJGQwLDI0CisrCWFuZGkJJHQwLDB4RkYwMAorKwlzbGwJJHQxLCR0MSw4CisrCW9yCSRkMCwkYXQKKysJIHNybAkkYXQsJGQxLDI0CisrCW9yCSR0MCwkdDEKKysJIHNybAkkdDEsJGQxLDgKKysJb3IJJGQwLCR0MAorKwkgYW5kaQkkdDAsJGQxLDB4RkYwMAorKwkgc2xsCSRkMSwkZDEsMjQKKysJIGFuZGkJJHQxLDB4RkYwMAorKwkgc2xsCSR0MCwkdDAsOAorKwkgb3IJJGQxLCRhdAorKwlzcmwJJGF0LCRkMiwyNAorKwkgb3IJJHQxLCR0MAorKwlzcmwJJHQwLCRkMiw4CisrCSBvcgkkZDEsJHQxCisrCWFuZGkJJHQxLCRkMiwweEZGMDAKKysJc2xsCSRkMiwkZDIsMjQKKysJYW5kaQkkdDAsMHhGRjAwCisrCXNsbAkkdDEsJHQxLDgKKysJb3IJJGQyLCRhdAorKwkgc3JsCSRhdCwkZDMsMjQKKysJb3IJJHQwLCR0MQorKwkgc3JsCSR0MSwkZDMsOAorKwlvcgkkZDIsJHQwCisrCSBhbmRpCSR0MCwkZDMsMHhGRjAwCisrCSBzbGwJJGQzLCRkMywyNAorKwkgYW5kaQkkdDEsMHhGRjAwCisrCSBzbGwJJHQwLCR0MCw4CisrCSBvcgkkZDMsJGF0CisrCSBvcgkkdDEsJHQwCisrCSBvcgkkZDMsJHQxCisrIyBlbmRpZgorKyNlbmRpZgorKwlzcmwJJHQwLCRoNCwyCQkjIG1vZHVsby1zY2hlZHVsZWQgcmVkdWN0aW9uCisrCWFuZGkJJGg0LCRoNCwzCisrCXNsbAkkYXQsJHQwLDIKKysKKysJYWRkdQkkZDAsJGQwLCRoMAkJIyBhY2N1bXVsYXRlIGlucHV0CisrCSBhZGR1CSR0MCwkdDAsJGF0CisrCXNsdHUJJGgwLCRkMCwkaDAKKysJYWRkdQkkZDAsJGQwLCR0MAkJIyAuLi4gYW5kIHJlc2lkdWUKKysJc2x0dQkkYXQsJGQwLCR0MAorKworKwlhZGR1CSRkMSwkZDEsJGgxCisrCSBhZGR1CSRoMCwkaDAsJGF0CQkjIGNhcnJ5CisrCXNsdHUJJGgxLCRkMSwkaDEKKysJYWRkdQkkZDEsJGQxLCRoMAorKwlzbHR1CSRoMCwkZDEsJGgwCisrCisrCWFkZHUJJGQyLCRkMiwkaDIKKysJIGFkZHUJJGgxLCRoMSwkaDAJCSMgY2FycnkKKysJc2x0dQkkaDIsJGQyLCRoMgorKwlhZGR1CSRkMiwkZDIsJGgxCisrCXNsdHUJJGgxLCRkMiwkaDEKKysKKysJYWRkdQkkZDMsJGQzLCRoMworKwkgYWRkdQkkaDIsJGgyLCRoMQkJIyBjYXJyeQorKwlzbHR1CSRoMywkZDMsJGgzCisrCWFkZHUJJGQzLCRkMywkaDIKKysKKysjaWYgZGVmaW5lZChfTUlQU19BUkNIX01JUFMzMlIyKSAmJiAhZGVmaW5lZChfTUlQU19BUkNIX01JUFMzMlI2KQorKwltdWx0dQkkcjAsJGQwCQkJIyBkMCpyMAorKwkgc2x0dQkkaDIsJGQzLCRoMgorKwltYWRkdQkkcnMzLCRkMQkJIyBkMSpzMworKwkgYWRkdQkkaDMsJGgzLCRoMgkJIyBjYXJyeQorKwltYWRkdQkkcnMyLCRkMgkJIyBkMipzMgorKwkgYWRkdQkkaDQsJGg0LCRwYWRiaXQKKysJbWFkZHUJJHJzMSwkZDMJCSMgZDMqczEKKysJIGFkZHUJJGg0LCRoNCwkaDMKKysJbWZoaQkkYXQKKysJbWZsbwkkaDAKKysKKysJbXVsdHUJJHIxLCRkMAkJCSMgZDAqcjEKKysJbWFkZHUJJHIwLCRkMQkJCSMgZDEqcjAKKysJbWFkZHUJJHJzMywkZDIJCSMgZDIqczMKKysJbWFkZHUJJHJzMiwkZDMJCSMgZDMqczIKKysJbWFkZHUJJHJzMSwkaDQJCSMgaDQqczEKKysJbWFkZHUJJGF0LCRvbmUJCSMgaGkqMQorKwltZmhpCSRhdAorKwltZmxvCSRoMQorKworKwltdWx0dQkkcjIsJGQwCQkJIyBkMCpyMgorKwltYWRkdQkkcjEsJGQxCQkJIyBkMSpyMQorKwltYWRkdQkkcjAsJGQyCQkJIyBkMipyMAorKwltYWRkdQkkcnMzLCRkMwkJIyBkMypzMworKwltYWRkdQkkcnMyLCRoNAkJIyBoNCpzMgorKwltYWRkdQkkYXQsJG9uZQkJIyBoaSoxCisrCW1maGkJJGF0CisrCW1mbG8JJGgyCisrCisrCW11bAkkdDAsJHIwLCRoNAkJIyBoNCpyMAorKworKwltdWx0dQkkcjMsJGQwCQkJIyBkMCpyMworKwltYWRkdQkkcjIsJGQxCQkJIyBkMSpyMgorKwltYWRkdQkkcjEsJGQyCQkJIyBkMipyMQorKwltYWRkdQkkcjAsJGQzCQkJIyBkMypyMAorKwltYWRkdQkkcnMzLCRoNAkJIyBoNCpzMworKwltYWRkdQkkYXQsJG9uZQkJIyBoaSoxCisrCW1maGkJJGF0CisrCW1mbG8JJGgzCisrCisrCSBhZGRpdQkkaW5wLCRpbnAsMTYKKysKKysJYWRkdQkkaDQsJHQwLCRhdAorKyNlbHNlCisrCW11bHR1CSgkcjAsJGQwKQkJIyBkMCpyMAorKwltZmxvCSgkaDAsJHIwLCRkMCkKKysJbWZoaQkoJGgxLCRyMCwkZDApCisrCisrCSBzbHR1CSRoMiwkZDMsJGgyCisrCSBhZGR1CSRoMywkaDMsJGgyCQkjIGNhcnJ5CisrCisrCW11bHR1CSgkcnMzLCRkMSkJCSMgZDEqczMKKysJbWZsbwkoJGF0LCRyczMsJGQxKQorKwltZmhpCSgkdDAsJHJzMywkZDEpCisrCisrCSBhZGR1CSRoNCwkaDQsJHBhZGJpdAorKwkgYWRkaXUJJGlucCwkaW5wLDE2CisrCSBhZGR1CSRoNCwkaDQsJGgzCisrCisrCW11bHR1CSgkcnMyLCRkMikJCSMgZDIqczIKKysJbWZsbwkoJGEzLCRyczIsJGQyKQorKwltZmhpCSgkdDEsJHJzMiwkZDIpCisrCSBhZGR1CSRoMCwkaDAsJGF0CisrCSBhZGR1CSRoMSwkaDEsJHQwCisrCW11bHR1CSgkcnMxLCRkMykJCSMgZDMqczEKKysJIHNsdHUJJGF0LCRoMCwkYXQKKysJIGFkZHUJJGgxLCRoMSwkYXQKKysKKysJbWZsbwkoJGF0LCRyczEsJGQzKQorKwltZmhpCSgkdDAsJHJzMSwkZDMpCisrCSBhZGR1CSRoMCwkaDAsJGEzCisrCSBhZGR1CSRoMSwkaDEsJHQxCisrCW11bHR1CSgkcjEsJGQwKQkJIyBkMCpyMQorKwkgc2x0dQkkYTMsJGgwLCRhMworKwkgYWRkdQkkaDEsJGgxLCRhMworKworKworKwltZmxvCSgkYTMsJHIxLCRkMCkKKysJbWZoaQkoJGgyLCRyMSwkZDApCisrCSBhZGR1CSRoMCwkaDAsJGF0CisrCSBhZGR1CSRoMSwkaDEsJHQwCisrCW11bHR1CSgkcjAsJGQxKQkJIyBkMSpyMAorKwkgc2x0dQkkYXQsJGgwLCRhdAorKwkgYWRkdQkkaDEsJGgxLCRhdAorKworKwltZmxvCSgkYXQsJHIwLCRkMSkKKysJbWZoaQkoJHQwLCRyMCwkZDEpCisrCSBhZGR1CSRoMSwkaDEsJGEzCisrCSBzbHR1CSRhMywkaDEsJGEzCisrCW11bHR1CSgkcnMzLCRkMikJCSMgZDIqczMKKysJIGFkZHUJJGgyLCRoMiwkYTMKKysKKysJbWZsbwkoJGEzLCRyczMsJGQyKQorKwltZmhpCSgkdDEsJHJzMywkZDIpCisrCSBhZGR1CSRoMSwkaDEsJGF0CisrCSBhZGR1CSRoMiwkaDIsJHQwCisrCW11bHR1CSgkcnMyLCRkMykJCSMgZDMqczIKKysJIHNsdHUJJGF0LCRoMSwkYXQKKysJIGFkZHUJJGgyLCRoMiwkYXQKKysKKysJbWZsbwkoJGF0LCRyczIsJGQzKQorKwltZmhpCSgkdDAsJHJzMiwkZDMpCisrCSBhZGR1CSRoMSwkaDEsJGEzCisrCSBhZGR1CSRoMiwkaDIsJHQxCisrCW11bHR1CSgkcnMxLCRoNCkJCSMgaDQqczEKKysJIHNsdHUJJGEzLCRoMSwkYTMKKysJIGFkZHUJJGgyLCRoMiwkYTMKKysKKysJbWZsbwkoJGEzLCRyczEsJGg0KQorKwkgYWRkdQkkaDEsJGgxLCRhdAorKwkgYWRkdQkkaDIsJGgyLCR0MAorKwltdWx0dQkoJHIyLCRkMCkJCSMgZDAqcjIKKysJIHNsdHUJJGF0LCRoMSwkYXQKKysJIGFkZHUJJGgyLCRoMiwkYXQKKysKKysKKysJbWZsbwkoJGF0LCRyMiwkZDApCisrCW1maGkJKCRoMywkcjIsJGQwKQorKwkgYWRkdQkkaDEsJGgxLCRhMworKwkgc2x0dQkkYTMsJGgxLCRhMworKwltdWx0dQkoJHIxLCRkMSkJCSMgZDEqcjEKKysJIGFkZHUJJGgyLCRoMiwkYTMKKysKKysJbWZsbwkoJGEzLCRyMSwkZDEpCisrCW1maGkJKCR0MSwkcjEsJGQxKQorKwkgYWRkdQkkaDIsJGgyLCRhdAorKwkgc2x0dQkkYXQsJGgyLCRhdAorKwltdWx0dQkoJHIwLCRkMikJCSMgZDIqcjAKKysJIGFkZHUJJGgzLCRoMywkYXQKKysKKysJbWZsbwkoJGF0LCRyMCwkZDIpCisrCW1maGkJKCR0MCwkcjAsJGQyKQorKwkgYWRkdQkkaDIsJGgyLCRhMworKwkgYWRkdQkkaDMsJGgzLCR0MQorKwltdWx0dQkoJHJzMywkZDMpCQkjIGQzKnMzCisrCSBzbHR1CSRhMywkaDIsJGEzCisrCSBhZGR1CSRoMywkaDMsJGEzCisrCisrCW1mbG8JKCRhMywkcnMzLCRkMykKKysJbWZoaQkoJHQxLCRyczMsJGQzKQorKwkgYWRkdQkkaDIsJGgyLCRhdAorKwkgYWRkdQkkaDMsJGgzLCR0MAorKwltdWx0dQkoJHJzMiwkaDQpCQkjIGg0KnMyCisrCSBzbHR1CSRhdCwkaDIsJGF0CisrCSBhZGR1CSRoMywkaDMsJGF0CisrCisrCW1mbG8JKCRhdCwkcnMyLCRoNCkKKysJIGFkZHUJJGgyLCRoMiwkYTMKKysJIGFkZHUJJGgzLCRoMywkdDEKKysJbXVsdHUJKCRyMywkZDApCQkjIGQwKnIzCisrCSBzbHR1CSRhMywkaDIsJGEzCisrCSBhZGR1CSRoMywkaDMsJGEzCisrCisrCisrCW1mbG8JKCRhMywkcjMsJGQwKQorKwltZmhpCSgkdDEsJHIzLCRkMCkKKysJIGFkZHUJJGgyLCRoMiwkYXQKKysJIHNsdHUJJGF0LCRoMiwkYXQKKysJbXVsdHUJKCRyMiwkZDEpCQkjIGQxKnIyCisrCSBhZGR1CSRoMywkaDMsJGF0CisrCisrCW1mbG8JKCRhdCwkcjIsJGQxKQorKwltZmhpCSgkdDAsJHIyLCRkMSkKKysJIGFkZHUJJGgzLCRoMywkYTMKKysJIHNsdHUJJGEzLCRoMywkYTMKKysJbXVsdHUJKCRyMCwkZDMpCQkjIGQzKnIwCisrCSBhZGR1CSR0MSwkdDEsJGEzCisrCisrCW1mbG8JKCRhMywkcjAsJGQzKQorKwltZmhpCSgkZDMsJHIwLCRkMykKKysJIGFkZHUJJGgzLCRoMywkYXQKKysJIGFkZHUJJHQxLCR0MSwkdDAKKysJbXVsdHUJKCRyMSwkZDIpCQkjIGQyKnIxCisrCSBzbHR1CSRhdCwkaDMsJGF0CisrCSBhZGR1CSR0MSwkdDEsJGF0CisrCisrCW1mbG8JKCRhdCwkcjEsJGQyKQorKwltZmhpCSgkdDAsJHIxLCRkMikKKysJIGFkZHUJJGgzLCRoMywkYTMKKysJIGFkZHUJJHQxLCR0MSwkZDMKKysJbXVsdHUJKCRyczMsJGg0KQkJIyBoNCpzMworKwkgc2x0dQkkYTMsJGgzLCRhMworKwkgYWRkdQkkdDEsJHQxLCRhMworKworKwltZmxvCSgkYTMsJHJzMywkaDQpCisrCSBhZGR1CSRoMywkaDMsJGF0CisrCSBhZGR1CSR0MSwkdDEsJHQwCisrCW11bHR1CSgkcjAsJGg0KQkJIyBoNCpyMAorKwkgc2x0dQkkYXQsJGgzLCRhdAorKwkgYWRkdQkkdDEsJHQxLCRhdAorKworKworKwltZmxvCSgkaDQsJHIwLCRoNCkKKysJIGFkZHUJJGgzLCRoMywkYTMKKysJIHNsdHUJJGEzLCRoMywkYTMKKysJIGFkZHUJJHQxLCR0MSwkYTMKKysJYWRkdQkkaDQsJGg0LCR0MQorKworKwlsaQkkcGFkYml0LDEJCSMgaWYgd2UgbG9vcCwgcGFkYml0IGlzIDEKKysjZW5kaWYKKysJYm5lCSRpbnAsJGxlbiwuTG9vcAorKworKwlzdwkkaDAsMCgkY3R4KQkJIyBzdG9yZSBoYXNoIHZhbHVlCisrCXN3CSRoMSw0KCRjdHgpCisrCXN3CSRoMiw4KCRjdHgpCisrCXN3CSRoMywxMigkY3R4KQorKwlzdwkkaDQsMTYoJGN0eCkKKysKKysJLnNldAlub3Jlb3JkZXIKKysuTGFib3J0OgorKwlsdwkkczExLDQqMTEoJHNwKQorKwlsdwkkczEwLDQqMTAoJHNwKQorKwlsdwkkczksIDQqOSgkc3ApCisrCWx3CSRzOCwgNCo4KCRzcCkKKysJbHcJJHM3LCA0KjcoJHNwKQorKwlsdwkkczYsIDQqNigkc3ApCisrCWx3CSRzNSwgNCo1KCRzcCkKKysJbHcJJHM0LCA0KjQoJHNwKQorK19fXworKyRjb2RlLj08PF9fXyBpZiAoJGZsYXZvdXIgPX4gL251YmkvaSk7CSMgb3B0aW1pemUgbm9uLW51YmkgcHJvbG9ndWUKKysJbHcJJHMzLCA0KjMoJHNwKQorKwlsdwkkczIsIDQqMigkc3ApCisrCWx3CSRzMSwgNCoxKCRzcCkKKysJbHcJJHMwLCA0KjAoJHNwKQorK19fXworKyRjb2RlLj08PF9fXzsKKysJanIJJHJhCisrCWFkZHUJJHNwLCRzcCw0KjEyCisrLmVuZAlwb2x5MTMwNV9ibG9ja3MKKytfX18KKyt9CisreworK215ICgkY3R4LCRtYWMsJG5vbmNlLCR0bXA0KSA9ICgkYTAsJGExLCRhMiwkYTMpOworKworKyRjb2RlLj08PF9fXzsKKysuYWxpZ24JNQorKy5nbG9ibAlwb2x5MTMwNV9lbWl0CisrLmVudAlwb2x5MTMwNV9lbWl0CisrcG9seTEzMDVfZW1pdDoKKysJLmZyYW1lCSRzcCwwLCRyYQorKwkuc2V0CXJlb3JkZXIKKysKKysJbHcJJHRtcDQsMTYoJGN0eCkKKysJbHcJJHRtcDAsMCgkY3R4KQorKwlsdwkkdG1wMSw0KCRjdHgpCisrCWx3CSR0bXAyLDgoJGN0eCkKKysJbHcJJHRtcDMsMTIoJGN0eCkKKysKKysJbGkJJGluMCwtNAkJCSMgZmluYWwgcmVkdWN0aW9uCisrCXNybAkkY3R4LCR0bXA0LDIKKysJYW5kCSRpbjAsJGluMCwkdG1wNAorKwlhbmRpCSR0bXA0LCR0bXA0LDMKKysJYWRkdQkkY3R4LCRjdHgsJGluMAorKworKwlhZGR1CSR0bXAwLCR0bXAwLCRjdHgKKysJc2x0dQkkY3R4LCR0bXAwLCRjdHgKKysJIGFkZGl1CSRpbjAsJHRtcDAsNQkJIyBjb21wYXJlIHRvIG1vZHVsdXMKKysJYWRkdQkkdG1wMSwkdG1wMSwkY3R4CisrCSBzbHRpdQkkaW4xLCRpbjAsNQorKwlzbHR1CSRjdHgsJHRtcDEsJGN0eAorKwkgYWRkdQkkaW4xLCRpbjEsJHRtcDEKKysJYWRkdQkkdG1wMiwkdG1wMiwkY3R4CisrCSBzbHR1CSRpbjIsJGluMSwkdG1wMQorKwlzbHR1CSRjdHgsJHRtcDIsJGN0eAorKwkgYWRkdQkkaW4yLCRpbjIsJHRtcDIKKysJYWRkdQkkdG1wMywkdG1wMywkY3R4CisrCSBzbHR1CSRpbjMsJGluMiwkdG1wMgorKwlzbHR1CSRjdHgsJHRtcDMsJGN0eAorKwkgYWRkdQkkaW4zLCRpbjMsJHRtcDMKKysJYWRkdQkkdG1wNCwkdG1wNCwkY3R4CisrCSBzbHR1CSRjdHgsJGluMywkdG1wMworKwkgYWRkdQkkY3R4LCR0bXA0CisrCisrCXNybAkkY3R4LDIJCQkjIHNlZSBpZiBpdCBjYXJyaWVkL2JvcnJvd2VkCisrCXN1YnUJJGN0eCwkemVybywkY3R4CisrCisrCXhvcgkkaW4wLCR0bXAwCisrCXhvcgkkaW4xLCR0bXAxCisrCXhvcgkkaW4yLCR0bXAyCisrCXhvcgkkaW4zLCR0bXAzCisrCWFuZAkkaW4wLCRjdHgKKysJYW5kCSRpbjEsJGN0eAorKwlhbmQJJGluMiwkY3R4CisrCWFuZAkkaW4zLCRjdHgKKysJeG9yCSRpbjAsJHRtcDAKKysJeG9yCSRpbjEsJHRtcDEKKysJeG9yCSRpbjIsJHRtcDIKKysJeG9yCSRpbjMsJHRtcDMKKysKKysJbHcJJHRtcDAsMCgkbm9uY2UpCQkjIGxvYWQgbm9uY2UKKysJbHcJJHRtcDEsNCgkbm9uY2UpCisrCWx3CSR0bXAyLDgoJG5vbmNlKQorKwlsdwkkdG1wMywxMigkbm9uY2UpCisrCisrCWFkZHUJJGluMCwkdG1wMAkJIyBhY2N1bXVsYXRlIG5vbmNlCisrCXNsdHUJJGN0eCwkaW4wLCR0bXAwCisrCisrCWFkZHUJJGluMSwkdG1wMQorKwlzbHR1CSR0bXAxLCRpbjEsJHRtcDEKKysJYWRkdQkkaW4xLCRjdHgKKysJc2x0dQkkY3R4LCRpbjEsJGN0eAorKwlhZGR1CSRjdHgsJHRtcDEKKysKKysJYWRkdQkkaW4yLCR0bXAyCisrCXNsdHUJJHRtcDIsJGluMiwkdG1wMgorKwlhZGR1CSRpbjIsJGN0eAorKwlzbHR1CSRjdHgsJGluMiwkY3R4CisrCWFkZHUJJGN0eCwkdG1wMgorKworKwlhZGR1CSRpbjMsJHRtcDMKKysJYWRkdQkkaW4zLCRjdHgKKysKKysJc3JsCSR0bXAwLCRpbjAsOAkJIyB3cml0ZSBtYWMgdmFsdWUKKysJc3JsCSR0bXAxLCRpbjAsMTYKKysJc3JsCSR0bXAyLCRpbjAsMjQKKysJc2IJJGluMCwgMCgkbWFjKQorKwlzYgkkdG1wMCwxKCRtYWMpCisrCXNybAkkdG1wMCwkaW4xLDgKKysJc2IJJHRtcDEsMigkbWFjKQorKwlzcmwJJHRtcDEsJGluMSwxNgorKwlzYgkkdG1wMiwzKCRtYWMpCisrCXNybAkkdG1wMiwkaW4xLDI0CisrCXNiCSRpbjEsIDQoJG1hYykKKysJc2IJJHRtcDAsNSgkbWFjKQorKwlzcmwJJHRtcDAsJGluMiw4CisrCXNiCSR0bXAxLDYoJG1hYykKKysJc3JsCSR0bXAxLCRpbjIsMTYKKysJc2IJJHRtcDIsNygkbWFjKQorKwlzcmwJJHRtcDIsJGluMiwyNAorKwlzYgkkaW4yLCA4KCRtYWMpCisrCXNiCSR0bXAwLDkoJG1hYykKKysJc3JsCSR0bXAwLCRpbjMsOAorKwlzYgkkdG1wMSwxMCgkbWFjKQorKwlzcmwJJHRtcDEsJGluMywxNgorKwlzYgkkdG1wMiwxMSgkbWFjKQorKwlzcmwJJHRtcDIsJGluMywyNAorKwlzYgkkaW4zLCAxMigkbWFjKQorKwlzYgkkdG1wMCwxMygkbWFjKQorKwlzYgkkdG1wMSwxNCgkbWFjKQorKwlzYgkkdG1wMiwxNSgkbWFjKQorKworKwlqcgkkcmEKKysuZW5kCXBvbHkxMzA1X2VtaXQKKysucmRhdGEKKysuYXNjaWl6CSJQb2x5MTMwNSBmb3IgTUlQUzMyLCBDUllQVE9HQU1TIGJ5IFxAZG90LWFzbSIKKysuYWxpZ24JMgorK19fXworK30KKyt9fX0KKysKKyskb3V0cHV0PXBvcCBhbmQgb3BlbiBTVERPVVQsIj4kb3V0cHV0IjsKKytwcmludCAkY29kZTsKKytjbG9zZSBTVERPVVQ7CistLS0gYS9jcnlwdG8vS2NvbmZpZworKysrIGIvY3J5cHRvL0tjb25maWcKK0BAIC03MDcsNiArNzA3LDExIEBAIGNvbmZpZyBDUllQVE9fUE9MWTEzMDVfWDg2XzY0CisgCSAgaW4gSUVURiBwcm90b2NvbHMuIFRoaXMgaXMgdGhlIHg4Nl82NCBhc3NlbWJsZXIgaW1wbGVtZW50YXRpb24gdXNpbmcgU0lNRAorIAkgIGluc3RydWN0aW9ucy4KKyAKKytjb25maWcgQ1JZUFRPX1BPTFkxMzA1X01JUFMKKysJdHJpc3RhdGUgIlBvbHkxMzA1IGF1dGhlbnRpY2F0b3IgYWxnb3JpdGhtIChNSVBTIG9wdGltaXplZCkiCisrCWRlcGVuZHMgb24gQ1BVX01JUFMzMiB8fCAoQ1BVX01JUFM2NCAmJiA2NEJJVCkKKysJc2VsZWN0IENSWVBUT19BUkNIX0hBVkVfTElCX1BPTFkxMzA1CisrCisgY29uZmlnIENSWVBUT19NRDQKKyAJdHJpc3RhdGUgIk1ENCBkaWdlc3QgYWxnb3JpdGhtIgorIAlzZWxlY3QgQ1JZUFRPX0hBU0gKKy0tLSBhL2xpYi9jcnlwdG8vS2NvbmZpZworKysrIGIvbGliL2NyeXB0by9LY29uZmlnCitAQCAtMzksNiArMzksNyBAQCBjb25maWcgQ1JZUFRPX0xJQl9ERVMKKyAKKyBjb25maWcgQ1JZUFRPX0xJQl9QT0xZMTMwNV9SU0laRQorIAlpbnQKKysJZGVmYXVsdCAyIGlmIE1JUFMKKyAJZGVmYXVsdCA0IGlmIFg4Nl82NAorIAlkZWZhdWx0IDkgaWYgQVJNIHx8IEFSTTY0CisgCWRlZmF1bHQgMQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAyMS1jcnlwdG8tYmxha2Uycy1nZW5lcmljLUMtbGlicmFyeS1pbXBsZW1lbnRhdGlvbi1hbmQtLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAyMS1jcnlwdG8tYmxha2Uycy1nZW5lcmljLUMtbGlicmFyeS1pbXBsZW1lbnRhdGlvbi1hbmQtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZjczYjkKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDIxLWNyeXB0by1ibGFrZTJzLWdlbmVyaWMtQy1saWJyYXJ5LWltcGxlbWVudGF0aW9uLWFuZC0ucGF0Y2gKQEAgLTAsMCArMSwxMDk3IEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogRnJpLCA4IE5vdiAyMDE5IDEzOjIyOjI4ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyeXB0bzogYmxha2UycyAtIGdlbmVyaWMgQyBsaWJyYXJ5IGltcGxlbWVudGF0aW9uIGFuZAorIHNlbGZ0ZXN0CisKK2NvbW1pdCA2NmQ3ZmI5NGU0ZmZlNWFjYzU4OWUwYjJiNDcxMGFlY2MxZjA3YTI4IHVwc3RyZWFtLgorCitUaGUgQyBpbXBsZW1lbnRhdGlvbiB3YXMgb3JpZ2luYWxseSBiYXNlZCBvbiBTYW11ZWwgTmV2ZXMnIHB1YmxpYworZG9tYWluIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBidXQgaGFzIHNpbmNlIGJlZW4gaGVhdmlseSBtb2RpZmllZAorZm9yIHRoZSBrZXJuZWwuIFdlJ3JlIGFibGUgdG8gZG8gY29tcGlsZS10aW1lIG9wdGltaXphdGlvbnMgYnkgbW92aW5nCitzb21lIHNjYWZmb2xkaW5nIGFyb3VuZCB0aGUgZmluYWwgZnVuY3Rpb24gaW50byB0aGUgaGVhZGVyIGZpbGUuCisKK0luZm9ybWF0aW9uOiBodHRwczovL2JsYWtlMi5uZXQvCisKK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorU2lnbmVkLW9mZi1ieTogU2FtdWVsIE5ldmVzIDxzbmV2ZXNAZGVpLnVjLnB0PgorQ28tZGV2ZWxvcGVkLWJ5OiBTYW11ZWwgTmV2ZXMgPHNuZXZlc0BkZWkudWMucHQ+CitbYXJkYjogLSBtb3ZlIGZyb20gbGliL3ppbmMgdG8gbGliL2NyeXB0bworICAgICAgIC0gcmVtb3ZlIHNpbWQgaGFuZGxpbmcKKyAgICAgICAtIHJld3JvdGUgc2VsZnRlc3QgZm9yIGJldHRlciBjb3ZlcmFnZQorICAgICAgIC0gdXNlIGZpeGVkIGRpZ2VzdCBsZW5ndGggZm9yIGJsYWtlMnNfaG1hYygpIGFuZCByZW5hbWUgdG8KKyAgICAgICAgIGJsYWtlMnMyNTZfaG1hYygpIF0KK1NpZ25lZC1vZmYtYnk6IEFyZCBCaWVzaGV1dmVsIDxhcmRiQGtlcm5lbC5vcmc+CitTaWduZWQtb2ZmLWJ5OiBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGluY2x1ZGUvY3J5cHRvL2JsYWtlMnMuaCAgICAgICAgICB8IDEwNiArKysrKworIGluY2x1ZGUvY3J5cHRvL2ludGVybmFsL2JsYWtlMnMuaCB8ICAxOSArCisgbGliL2NyeXB0by9LY29uZmlnICAgICAgICAgICAgICAgIHwgIDI1ICsrCisgbGliL2NyeXB0by9NYWtlZmlsZSAgICAgICAgICAgICAgIHwgIDEwICsKKyBsaWIvY3J5cHRvL2JsYWtlMnMtZ2VuZXJpYy5jICAgICAgfCAxMTEgKysrKysrCisgbGliL2NyeXB0by9ibGFrZTJzLXNlbGZ0ZXN0LmMgICAgIHwgNjIyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIGxpYi9jcnlwdG8vYmxha2Uycy5jICAgICAgICAgICAgICB8IDEyNiArKysrKysKKyA3IGZpbGVzIGNoYW5nZWQsIDEwMTkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2NyeXB0by9ibGFrZTJzLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9jcnlwdG8vaW50ZXJuYWwvYmxha2Uycy5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9jcnlwdG8vYmxha2Uycy1nZW5lcmljLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2NyeXB0by9ibGFrZTJzLXNlbGZ0ZXN0LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2NyeXB0by9ibGFrZTJzLmMKKworLS0tIC9kZXYvbnVsbAorKysrIGIvaW5jbHVkZS9jcnlwdG8vYmxha2Uycy5oCitAQCAtMCwwICsxLDEwNiBAQAorKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVCAqLworKy8qCisrICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKyAqLworKworKyNpZm5kZWYgQkxBS0UyU19ICisrI2RlZmluZSBCTEFLRTJTX0gKKysKKysjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKysjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisrI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorKworKyNpbmNsdWRlIDxhc20vYnVnLmg+CisrCisrZW51bSBibGFrZTJzX2xlbmd0aHMgeworKwlCTEFLRTJTX0JMT0NLX1NJWkUgPSA2NCwKKysJQkxBS0UyU19IQVNIX1NJWkUgPSAzMiwKKysJQkxBS0UyU19LRVlfU0laRSA9IDMyLAorKworKwlCTEFLRTJTXzEyOF9IQVNIX1NJWkUgPSAxNiwKKysJQkxBS0UyU18xNjBfSEFTSF9TSVpFID0gMjAsCisrCUJMQUtFMlNfMjI0X0hBU0hfU0laRSA9IDI4LAorKwlCTEFLRTJTXzI1Nl9IQVNIX1NJWkUgPSAzMiwKKyt9OworKworK3N0cnVjdCBibGFrZTJzX3N0YXRlIHsKKysJdTMyIGhbOF07CisrCXUzMiB0WzJdOworKwl1MzIgZlsyXTsKKysJdTggYnVmW0JMQUtFMlNfQkxPQ0tfU0laRV07CisrCXVuc2lnbmVkIGludCBidWZsZW47CisrCXVuc2lnbmVkIGludCBvdXRsZW47CisrfTsKKysKKytlbnVtIGJsYWtlMnNfaXYgeworKwlCTEFLRTJTX0lWMCA9IDB4NkEwOUU2NjdVTCwKKysJQkxBS0UyU19JVjEgPSAweEJCNjdBRTg1VUwsCisrCUJMQUtFMlNfSVYyID0gMHgzQzZFRjM3MlVMLAorKwlCTEFLRTJTX0lWMyA9IDB4QTU0RkY1M0FVTCwKKysJQkxBS0UyU19JVjQgPSAweDUxMEU1MjdGVUwsCisrCUJMQUtFMlNfSVY1ID0gMHg5QjA1Njg4Q1VMLAorKwlCTEFLRTJTX0lWNiA9IDB4MUY4M0Q5QUJVTCwKKysJQkxBS0UyU19JVjcgPSAweDVCRTBDRDE5VUwsCisrfTsKKysKKyt2b2lkIGJsYWtlMnNfdXBkYXRlKHN0cnVjdCBibGFrZTJzX3N0YXRlICpzdGF0ZSwgY29uc3QgdTggKmluLCBzaXplX3QgaW5sZW4pOworK3ZvaWQgYmxha2Uyc19maW5hbChzdHJ1Y3QgYmxha2Uyc19zdGF0ZSAqc3RhdGUsIHU4ICpvdXQpOworKworK3N0YXRpYyBpbmxpbmUgdm9pZCBibGFrZTJzX2luaXRfcGFyYW0oc3RydWN0IGJsYWtlMnNfc3RhdGUgKnN0YXRlLAorKwkJCQkgICAgICBjb25zdCB1MzIgcGFyYW0pCisreworKwkqc3RhdGUgPSAoc3RydWN0IGJsYWtlMnNfc3RhdGUpe3sKKysJCUJMQUtFMlNfSVYwIF4gcGFyYW0sCisrCQlCTEFLRTJTX0lWMSwKKysJCUJMQUtFMlNfSVYyLAorKwkJQkxBS0UyU19JVjMsCisrCQlCTEFLRTJTX0lWNCwKKysJCUJMQUtFMlNfSVY1LAorKwkJQkxBS0UyU19JVjYsCisrCQlCTEFLRTJTX0lWNywKKysJfX07CisrfQorKworK3N0YXRpYyBpbmxpbmUgdm9pZCBibGFrZTJzX2luaXQoc3RydWN0IGJsYWtlMnNfc3RhdGUgKnN0YXRlLAorKwkJCQljb25zdCBzaXplX3Qgb3V0bGVuKQorK3sKKysJYmxha2Uyc19pbml0X3BhcmFtKHN0YXRlLCAweDAxMDEwMDAwIHwgb3V0bGVuKTsKKysJc3RhdGUtPm91dGxlbiA9IG91dGxlbjsKKyt9CisrCisrc3RhdGljIGlubGluZSB2b2lkIGJsYWtlMnNfaW5pdF9rZXkoc3RydWN0IGJsYWtlMnNfc3RhdGUgKnN0YXRlLAorKwkJCQkgICAgY29uc3Qgc2l6ZV90IG91dGxlbiwgY29uc3Qgdm9pZCAqa2V5LAorKwkJCQkgICAgY29uc3Qgc2l6ZV90IGtleWxlbikKKyt7CisrCVdBUk5fT04oSVNfRU5BQkxFRChERUJVRykgJiYgKCFvdXRsZW4gfHwgb3V0bGVuID4gQkxBS0UyU19IQVNIX1NJWkUgfHwKKysJCSFrZXkgfHwgIWtleWxlbiB8fCBrZXlsZW4gPiBCTEFLRTJTX0tFWV9TSVpFKSk7CisrCisrCWJsYWtlMnNfaW5pdF9wYXJhbShzdGF0ZSwgMHgwMTAxMDAwMCB8IGtleWxlbiA8PCA4IHwgb3V0bGVuKTsKKysJbWVtY3B5KHN0YXRlLT5idWYsIGtleSwga2V5bGVuKTsKKysJc3RhdGUtPmJ1ZmxlbiA9IEJMQUtFMlNfQkxPQ0tfU0laRTsKKysJc3RhdGUtPm91dGxlbiA9IG91dGxlbjsKKyt9CisrCisrc3RhdGljIGlubGluZSB2b2lkIGJsYWtlMnModTggKm91dCwgY29uc3QgdTggKmluLCBjb25zdCB1OCAqa2V5LAorKwkJCSAgIGNvbnN0IHNpemVfdCBvdXRsZW4sIGNvbnN0IHNpemVfdCBpbmxlbiwKKysJCQkgICBjb25zdCBzaXplX3Qga2V5bGVuKQorK3sKKysJc3RydWN0IGJsYWtlMnNfc3RhdGUgc3RhdGU7CisrCisrCVdBUk5fT04oSVNfRU5BQkxFRChERUJVRykgJiYgKCghaW4gJiYgaW5sZW4gPiAwKSB8fCAhb3V0IHx8ICFvdXRsZW4gfHwKKysJCW91dGxlbiA+IEJMQUtFMlNfSEFTSF9TSVpFIHx8IGtleWxlbiA+IEJMQUtFMlNfS0VZX1NJWkUgfHwKKysJCSgha2V5ICYmIGtleWxlbikpKTsKKysKKysJaWYgKGtleWxlbikKKysJCWJsYWtlMnNfaW5pdF9rZXkoJnN0YXRlLCBvdXRsZW4sIGtleSwga2V5bGVuKTsKKysJZWxzZQorKwkJYmxha2Uyc19pbml0KCZzdGF0ZSwgb3V0bGVuKTsKKysKKysJYmxha2Uyc191cGRhdGUoJnN0YXRlLCBpbiwgaW5sZW4pOworKwlibGFrZTJzX2ZpbmFsKCZzdGF0ZSwgb3V0KTsKKyt9CisrCisrdm9pZCBibGFrZTJzMjU2X2htYWModTggKm91dCwgY29uc3QgdTggKmluLCBjb25zdCB1OCAqa2V5LCBjb25zdCBzaXplX3QgaW5sZW4sCisrCQkgICAgIGNvbnN0IHNpemVfdCBrZXlsZW4pOworKworKyNlbmRpZiAvKiBCTEFLRTJTX0ggKi8KKy0tLSAvZGV2L251bGwKKysrKyBiL2luY2x1ZGUvY3J5cHRvL2ludGVybmFsL2JsYWtlMnMuaAorQEAgLTAsMCArMSwxOSBAQAorKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVCAqLworKworKyNpZm5kZWYgQkxBS0UyU19JTlRFUk5BTF9ICisrI2RlZmluZSBCTEFLRTJTX0lOVEVSTkFMX0gKKysKKysjaW5jbHVkZSA8Y3J5cHRvL2JsYWtlMnMuaD4KKysKKyt2b2lkIGJsYWtlMnNfY29tcHJlc3NfZ2VuZXJpYyhzdHJ1Y3QgYmxha2Uyc19zdGF0ZSAqc3RhdGUsY29uc3QgdTggKmJsb2NrLAorKwkJCSAgICAgIHNpemVfdCBuYmxvY2tzLCBjb25zdCB1MzIgaW5jKTsKKysKKyt2b2lkIGJsYWtlMnNfY29tcHJlc3NfYXJjaChzdHJ1Y3QgYmxha2Uyc19zdGF0ZSAqc3RhdGUsY29uc3QgdTggKmJsb2NrLAorKwkJCSAgIHNpemVfdCBuYmxvY2tzLCBjb25zdCB1MzIgaW5jKTsKKysKKytzdGF0aWMgaW5saW5lIHZvaWQgYmxha2Uyc19zZXRfbGFzdGJsb2NrKHN0cnVjdCBibGFrZTJzX3N0YXRlICpzdGF0ZSkKKyt7CisrCXN0YXRlLT5mWzBdID0gLTE7CisrfQorKworKyNlbmRpZiAvKiBCTEFLRTJTX0lOVEVSTkFMX0ggKi8KKy0tLSBhL2xpYi9jcnlwdG8vS2NvbmZpZworKysrIGIvbGliL2NyeXB0by9LY29uZmlnCitAQCAtOCw2ICs4LDMxIEBAIGNvbmZpZyBDUllQVE9fTElCX0FFUworIGNvbmZpZyBDUllQVE9fTElCX0FSQzQKKyAJdHJpc3RhdGUKKyAKKytjb25maWcgQ1JZUFRPX0FSQ0hfSEFWRV9MSUJfQkxBS0UyUworKwl0cmlzdGF0ZQorKwloZWxwCisrCSAgRGVjbGFyZXMgd2hldGhlciB0aGUgYXJjaGl0ZWN0dXJlIHByb3ZpZGVzIGFuIGFyY2gtc3BlY2lmaWMKKysJICBhY2NlbGVyYXRlZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQmxha2UycyBsaWJyYXJ5IGludGVyZmFjZSwKKysJICBlaXRoZXIgYnVpbHRpbiBvciBhcyBhIG1vZHVsZS4KKysKKytjb25maWcgQ1JZUFRPX0xJQl9CTEFLRTJTX0dFTkVSSUMKKysJdHJpc3RhdGUKKysJaGVscAorKwkgIFRoaXMgc3ltYm9sIGNhbiBiZSBkZXBlbmRlZCB1cG9uIGJ5IGFyY2ggaW1wbGVtZW50YXRpb25zIG9mIHRoZQorKwkgIEJsYWtlMnMgbGlicmFyeSBpbnRlcmZhY2UgdGhhdCByZXF1aXJlIHRoZSBnZW5lcmljIGNvZGUgYXMgYQorKwkgIGZhbGxiYWNrLCBlLmcuLCBmb3IgU0lNRCBpbXBsZW1lbnRhdGlvbnMuIElmIG5vIGFyY2ggc3BlY2lmaWMKKysJICBpbXBsZW1lbnRhdGlvbiBpcyBlbmFibGVkLCB0aGlzIGltcGxlbWVudGF0aW9uIHNlcnZlcyB0aGUgdXNlcnMKKysJICBvZiBDUllQVE9fTElCX0JMQUtFMlMuCisrCisrY29uZmlnIENSWVBUT19MSUJfQkxBS0UyUworKwl0cmlzdGF0ZSAiQkxBS0UycyBoYXNoIGZ1bmN0aW9uIGxpYnJhcnkiCisrCWRlcGVuZHMgb24gQ1JZUFRPX0FSQ0hfSEFWRV9MSUJfQkxBS0UyUyB8fCAhQ1JZUFRPX0FSQ0hfSEFWRV9MSUJfQkxBS0UyUworKwlzZWxlY3QgQ1JZUFRPX0xJQl9CTEFLRTJTX0dFTkVSSUMgaWYgQ1JZUFRPX0FSQ0hfSEFWRV9MSUJfQkxBS0UyUz1uCisrCWhlbHAKKysJICBFbmFibGUgdGhlIEJsYWtlMnMgbGlicmFyeSBpbnRlcmZhY2UuIFRoaXMgaW50ZXJmYWNlIG1heSBiZSBmdWxmaWxsZWQKKysJICBieSBlaXRoZXIgdGhlIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gb3IgYW4gYXJjaC1zcGVjaWZpYyBvbmUsIGlmIG9uZQorKwkgIGlzIGF2YWlsYWJsZSBhbmQgZW5hYmxlZC4KKysKKyBjb25maWcgQ1JZUFRPX0FSQ0hfSEFWRV9MSUJfQ0hBQ0hBCisgCXRyaXN0YXRlCisgCWhlbHAKKy0tLSBhL2xpYi9jcnlwdG8vTWFrZWZpbGUKKysrKyBiL2xpYi9jcnlwdG8vTWFrZWZpbGUKK0BAIC0xMCw2ICsxMCwxMiBAQCBsaWJhZXMteQkJCQkJOj0gYWVzLm8KKyBvYmotJChDT05GSUdfQ1JZUFRPX0xJQl9BUkM0KQkJCSs9IGxpYmFyYzQubworIGxpYmFyYzQteQkJCQkJOj0gYXJjNC5vCisgCisrb2JqLSQoQ09ORklHX0NSWVBUT19MSUJfQkxBS0UyU19HRU5FUklDKQkrPSBsaWJibGFrZTJzLWdlbmVyaWMubworK2xpYmJsYWtlMnMtZ2VuZXJpYy15CQkJCSs9IGJsYWtlMnMtZ2VuZXJpYy5vCisrCisrb2JqLSQoQ09ORklHX0NSWVBUT19MSUJfQkxBS0UyUykJCSs9IGxpYmJsYWtlMnMubworK2xpYmJsYWtlMnMteQkJCQkJKz0gYmxha2Uycy5vCisrCisgb2JqLSQoQ09ORklHX0NSWVBUT19MSUJfREVTKQkJCSs9IGxpYmRlcy5vCisgbGliZGVzLXkJCQkJCTo9IGRlcy5vCisgCitAQCAtMTgsMyArMjQsNyBAQCBsaWJwb2x5MTMwNS15CQkJCQk6PSBwb2x5MTMwNS5vCisgCisgb2JqLSQoQ09ORklHX0NSWVBUT19MSUJfU0hBMjU2KQkJCSs9IGxpYnNoYTI1Ni5vCisgbGlic2hhMjU2LXkJCQkJCTo9IHNoYTI1Ni5vCisrCisraWZuZXEgKCQoQ09ORklHX0NSWVBUT19NQU5BR0VSX0RJU0FCTEVfVEVTVFMpLHkpCisrbGliYmxha2Uycy15CQkJCQkrPSBibGFrZTJzLXNlbGZ0ZXN0Lm8KKytlbmRpZgorLS0tIC9kZXYvbnVsbAorKysrIGIvbGliL2NyeXB0by9ibGFrZTJzLWdlbmVyaWMuYworQEAgLTAsMCArMSwxMTEgQEAKKysvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBNSVQKKysvKgorKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKysgKgorKyAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIEJMQUtFMnMgaGFzaCBhbmQgUFJGIGZ1bmN0aW9ucy4KKysgKgorKyAqIEluZm9ybWF0aW9uOiBodHRwczovL2JsYWtlMi5uZXQvCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2JsYWtlMnMuaD4KKysjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKysjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisrI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKysjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorKyNpbmNsdWRlIDxsaW51eC9idWcuaD4KKysjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorKworK3N0YXRpYyBjb25zdCB1OCBibGFrZTJzX3NpZ21hWzEwXVsxNl0gPSB7CisrCXsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSB9LAorKwl7IDE0LCAxMCwgNCwgOCwgOSwgMTUsIDEzLCA2LCAxLCAxMiwgMCwgMiwgMTEsIDcsIDUsIDMgfSwKKysJeyAxMSwgOCwgMTIsIDAsIDUsIDIsIDE1LCAxMywgMTAsIDE0LCAzLCA2LCA3LCAxLCA5LCA0IH0sCisrCXsgNywgOSwgMywgMSwgMTMsIDEyLCAxMSwgMTQsIDIsIDYsIDUsIDEwLCA0LCAwLCAxNSwgOCB9LAorKwl7IDksIDAsIDUsIDcsIDIsIDQsIDEwLCAxNSwgMTQsIDEsIDExLCAxMiwgNiwgOCwgMywgMTMgfSwKKysJeyAyLCAxMiwgNiwgMTAsIDAsIDExLCA4LCAzLCA0LCAxMywgNywgNSwgMTUsIDE0LCAxLCA5IH0sCisrCXsgMTIsIDUsIDEsIDE1LCAxNCwgMTMsIDQsIDEwLCAwLCA3LCA2LCAzLCA5LCAyLCA4LCAxMSB9LAorKwl7IDEzLCAxMSwgNywgMTQsIDEyLCAxLCAzLCA5LCA1LCAwLCAxNSwgNCwgOCwgNiwgMiwgMTAgfSwKKysJeyA2LCAxNSwgMTQsIDksIDExLCAzLCAwLCA4LCAxMiwgMiwgMTMsIDcsIDEsIDQsIDEwLCA1IH0sCisrCXsgMTAsIDIsIDgsIDQsIDcsIDYsIDEsIDUsIDE1LCAxMSwgOSwgMTQsIDMsIDEyLCAxMywgMCB9LAorK307CisrCisrc3RhdGljIGlubGluZSB2b2lkIGJsYWtlMnNfaW5jcmVtZW50X2NvdW50ZXIoc3RydWN0IGJsYWtlMnNfc3RhdGUgKnN0YXRlLAorKwkJCQkJICAgICBjb25zdCB1MzIgaW5jKQorK3sKKysJc3RhdGUtPnRbMF0gKz0gaW5jOworKwlzdGF0ZS0+dFsxXSArPSAoc3RhdGUtPnRbMF0gPCBpbmMpOworK30KKysKKyt2b2lkIGJsYWtlMnNfY29tcHJlc3NfZ2VuZXJpYyhzdHJ1Y3QgYmxha2Uyc19zdGF0ZSAqc3RhdGUsY29uc3QgdTggKmJsb2NrLAorKwkJCSAgICAgIHNpemVfdCBuYmxvY2tzLCBjb25zdCB1MzIgaW5jKQorK3sKKysJdTMyIG1bMTZdOworKwl1MzIgdlsxNl07CisrCWludCBpOworKworKwlXQVJOX09OKElTX0VOQUJMRUQoREVCVUcpICYmCisrCQkobmJsb2NrcyA+IDEgJiYgaW5jICE9IEJMQUtFMlNfQkxPQ0tfU0laRSkpOworKworKwl3aGlsZSAobmJsb2NrcyA+IDApIHsKKysJCWJsYWtlMnNfaW5jcmVtZW50X2NvdW50ZXIoc3RhdGUsIGluYyk7CisrCQltZW1jcHkobSwgYmxvY2ssIEJMQUtFMlNfQkxPQ0tfU0laRSk7CisrCQlsZTMyX3RvX2NwdV9hcnJheShtLCBBUlJBWV9TSVpFKG0pKTsKKysJCW1lbWNweSh2LCBzdGF0ZS0+aCwgMzIpOworKwkJdlsgOF0gPSBCTEFLRTJTX0lWMDsKKysJCXZbIDldID0gQkxBS0UyU19JVjE7CisrCQl2WzEwXSA9IEJMQUtFMlNfSVYyOworKwkJdlsxMV0gPSBCTEFLRTJTX0lWMzsKKysJCXZbMTJdID0gQkxBS0UyU19JVjQgXiBzdGF0ZS0+dFswXTsKKysJCXZbMTNdID0gQkxBS0UyU19JVjUgXiBzdGF0ZS0+dFsxXTsKKysJCXZbMTRdID0gQkxBS0UyU19JVjYgXiBzdGF0ZS0+ZlswXTsKKysJCXZbMTVdID0gQkxBS0UyU19JVjcgXiBzdGF0ZS0+ZlsxXTsKKysKKysjZGVmaW5lIEcociwgaSwgYSwgYiwgYywgZCkgZG8geyBcCisrCWEgKz0gYiArIG1bYmxha2Uyc19zaWdtYVtyXVsyICogaSArIDBdXTsgXAorKwlkID0gcm9yMzIoZCBeIGEsIDE2KTsgXAorKwljICs9IGQ7IFwKKysJYiA9IHJvcjMyKGIgXiBjLCAxMik7IFwKKysJYSArPSBiICsgbVtibGFrZTJzX3NpZ21hW3JdWzIgKiBpICsgMV1dOyBcCisrCWQgPSByb3IzMihkIF4gYSwgOCk7IFwKKysJYyArPSBkOyBcCisrCWIgPSByb3IzMihiIF4gYywgNyk7IFwKKyt9IHdoaWxlICgwKQorKworKyNkZWZpbmUgUk9VTkQocikgZG8geyBcCisrCUcociwgMCwgdlswXSwgdlsgNF0sIHZbIDhdLCB2WzEyXSk7IFwKKysJRyhyLCAxLCB2WzFdLCB2WyA1XSwgdlsgOV0sIHZbMTNdKTsgXAorKwlHKHIsIDIsIHZbMl0sIHZbIDZdLCB2WzEwXSwgdlsxNF0pOyBcCisrCUcociwgMywgdlszXSwgdlsgN10sIHZbMTFdLCB2WzE1XSk7IFwKKysJRyhyLCA0LCB2WzBdLCB2WyA1XSwgdlsxMF0sIHZbMTVdKTsgXAorKwlHKHIsIDUsIHZbMV0sIHZbIDZdLCB2WzExXSwgdlsxMl0pOyBcCisrCUcociwgNiwgdlsyXSwgdlsgN10sIHZbIDhdLCB2WzEzXSk7IFwKKysJRyhyLCA3LCB2WzNdLCB2WyA0XSwgdlsgOV0sIHZbMTRdKTsgXAorK30gd2hpbGUgKDApCisrCQlST1VORCgwKTsKKysJCVJPVU5EKDEpOworKwkJUk9VTkQoMik7CisrCQlST1VORCgzKTsKKysJCVJPVU5EKDQpOworKwkJUk9VTkQoNSk7CisrCQlST1VORCg2KTsKKysJCVJPVU5EKDcpOworKwkJUk9VTkQoOCk7CisrCQlST1VORCg5KTsKKysKKysjdW5kZWYgRworKyN1bmRlZiBST1VORAorKworKwkJZm9yIChpID0gMDsgaSA8IDg7ICsraSkKKysJCQlzdGF0ZS0+aFtpXSBePSB2W2ldIF4gdltpICsgOF07CisrCisrCQlibG9jayArPSBCTEFLRTJTX0JMT0NLX1NJWkU7CisrCQktLW5ibG9ja3M7CisrCX0KKyt9CisrCisrRVhQT1JUX1NZTUJPTChibGFrZTJzX2NvbXByZXNzX2dlbmVyaWMpOworKworK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKKytNT0RVTEVfREVTQ1JJUFRJT04oIkJMQUtFMnMgaGFzaCBmdW5jdGlvbiIpOworK01PRFVMRV9BVVRIT1IoIkphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPiIpOworLS0tIC9kZXYvbnVsbAorKysrIGIvbGliL2NyeXB0by9ibGFrZTJzLXNlbGZ0ZXN0LmMKK0BAIC0wLDAgKzEsNjIyIEBACisrLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCisrLyoKKysgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisrICovCisrCisrI2luY2x1ZGUgPGNyeXB0by9ibGFrZTJzLmg+CisrI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorKworKy8qCisrICogYmxha2Uyc190ZXN0dmVjc1tdIGdlbmVyYXRlZCB3aXRoIHRoZSBwcm9ncmFtIGJlbG93ICh1c2luZyBsaWJiMi1kZXYgYW5kCisrICogbGlic3NsLWRldiBbT3BlblNTTF0pCisrICoKKysgKiAjaW5jbHVkZSA8Ymxha2UyLmg+CisrICogI2luY2x1ZGUgPHN0ZGludC5oPgorKyAqICNpbmNsdWRlIDxzdGRpby5oPgorKyAqCisrICogI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrICogI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKyAqCisrICogI2RlZmluZSBCTEFLRTJTX1RFU1RWRUNfQ09VTlQJMjU2CisrICoKKysgKiBzdGF0aWMgdm9pZCBwcmludF92ZWMoY29uc3QgdWludDhfdCB2ZWNbXSwgaW50IGxlbikKKysgKiB7CisrICoJaW50IGk7CisrICoKKysgKglwcmludGYoIiAgeyAiKTsKKysgKglmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKysgKgkJaWYgKGkgJiYgKGkgJSAxMikgPT0gMCkKKysgKgkJCXByaW50ZigiXG4gICAgIik7CisrICoJCXByaW50ZigiMHglMDJ4LCAiLCB2ZWNbaV0pOworKyAqCX0KKysgKglwcmludGYoIn0sXG4iKTsKKysgKiB9CisrICoKKysgKiBpbnQgbWFpbih2b2lkKQorKyAqIHsKKysgKgl1aW50OF90IGtleVtCTEFLRTJTX0tFWUJZVEVTXTsKKysgKgl1aW50OF90IGJ1ZltCTEFLRTJTX1RFU1RWRUNfQ09VTlRdOworKyAqCXVpbnQ4X3QgaGFzaFtCTEFLRTJTX09VVEJZVEVTXTsKKysgKglpbnQgaSwgajsKKysgKgorKyAqCWtleVswXSA9IGtleVsxXSA9IDE7CisrICoJZm9yIChpID0gMjsgaSA8IEJMQUtFMlNfS0VZQllURVM7ICsraSkKKysgKgkJa2V5W2ldID0ga2V5W2kgLSAyXSArIGtleVtpIC0gMV07CisrICoKKysgKglmb3IgKGkgPSAwOyBpIDwgQkxBS0UyU19URVNUVkVDX0NPVU5UOyArK2kpCisrICoJCWJ1ZltpXSA9ICh1aW50OF90KWk7CisrICoKKysgKglwcmludGYoInN0YXRpYyBjb25zdCB1OCBibGFrZTJzX3Rlc3R2ZWNzW11bQkxBS0UyU19IQVNIX1NJWkVdIF9faW5pdGNvbnN0ID0ge1xuIik7CisrICoKKysgKglmb3IgKGkgPSAwOyBpIDwgQkxBS0UyU19URVNUVkVDX0NPVU5UOyArK2kpIHsKKysgKgkJaW50IG91dGxlbiA9IDEgKyBpICUgQkxBS0UyU19PVVRCWVRFUzsKKysgKgkJaW50IGtleWxlbiA9ICgxMyAqIGkpICUgKEJMQUtFMlNfS0VZQllURVMgKyAxKTsKKysgKgorKyAqCQlibGFrZTJzKGhhc2gsIGJ1Ziwga2V5ICsgQkxBS0UyU19LRVlCWVRFUyAtIGtleWxlbiwgb3V0bGVuLCBpLAorKyAqCQkJa2V5bGVuKTsKKysgKgkJcHJpbnRfdmVjKGhhc2gsIG91dGxlbik7CisrICoJfQorKyAqCXByaW50ZigifTtcblxuIik7CisrICoKKysgKglwcmludGYoInN0YXRpYyBjb25zdCB1OCBibGFrZTJzX2htYWNfdGVzdHZlY3NbXVtCTEFLRTJTX0hBU0hfU0laRV0gX19pbml0Y29uc3QgPSB7XG4iKTsKKysgKgorKyAqCUhNQUMoRVZQX2JsYWtlMnMyNTYoKSwga2V5LCBzaXplb2Yoa2V5KSwgYnVmLCBzaXplb2YoYnVmKSwgaGFzaCwgTlVMTCk7CisrICoJcHJpbnRfdmVjKGhhc2gsIEJMQUtFMlNfT1VUQllURVMpOworKyAqCisrICoJSE1BQyhFVlBfYmxha2UyczI1NigpLCBidWYsIHNpemVvZihidWYpLCBrZXksIHNpemVvZihrZXkpLCBoYXNoLCBOVUxMKTsKKysgKglwcmludF92ZWMoaGFzaCwgQkxBS0UyU19PVVRCWVRFUyk7CisrICoKKysgKglwcmludGYoIn07XG4iKTsKKysgKgorKyAqCXJldHVybiAwOworKyAqfQorKyAqLworK3N0YXRpYyBjb25zdCB1OCBibGFrZTJzX3Rlc3R2ZWNzW11bQkxBS0UyU19IQVNIX1NJWkVdIF9faW5pdGNvbnN0ID0geworKyAgeyAweGExLCB9LAorKyAgeyAweDdjLCAweDg5LCB9LAorKyAgeyAweDc0LCAweDBlLCAweGQ0LCB9LAorKyAgeyAweDQ3LCAweDBjLCAweDIxLCAweDE1LCB9LAorKyAgeyAweDE4LCAweGQ2LCAweDljLCAweGE2LCAweGM0LCB9LAorKyAgeyAweDEzLCAweDVkLCAweDE2LCAweDYzLCAweDJlLCAweGY5LCB9LAorKyAgeyAweDJjLCAweGI1LCAweDA0LCAweGI3LCAweDk5LCAweGUyLCAweDczLCB9LAorKyAgeyAweDlhLCAweDBmLCAweGQyLCAweDM5LCAweGQ2LCAweDY4LCAweDFiLCAweDkyLCB9LAorKyAgeyAweGM4LCAweGRlLCAweDdhLCAweGVhLCAweDJmLCAweGY0LCAweGQyLCAweGUzLCAweDJiLCB9LAorKyAgeyAweDViLCAweGY5LCAweDQzLCAweDUyLCAweDBjLCAweDEyLCAweGJhLCAweGI1LCAweDkzLCAweDlmLCB9LAorKyAgeyAweGM2LCAweDJjLCAweDRlLCAweDgwLCAweGZjLCAweDMyLCAweDViLCAweDMzLCAweGI4LCAweGI4LCAweDBhLCB9LAorKyAgeyAweGE3LCAweDVjLCAweGZkLCAweDNhLCAweGNjLCAweGJmLCAweDkwLCAweGNhLCAweGI3LCAweDk3LCAweGRlLCAweGQ4LCB9LAorKyAgeyAweDY2LCAweGNhLCAweDNjLCAweGM0LCAweDE5LCAweGVmLCAweDkyLCAweDY2LCAweDNmLCAweDIxLCAweDhmLCAweGRhLAorKyAgICAweGI3LCB9LAorKyAgeyAweGJhLCAweGU1LCAweGJiLCAweDMwLCAweDI1LCAweDk0LCAweDZkLCAweGMzLCAweDg5LCAweDA5LCAweGM0LCAweDI1LAorKyAgICAweDUyLCAweDNlLCB9LAorKyAgeyAweGEyLCAweGVmLCAweDBlLCAweDUyLCAweDBiLCAweDVmLCAweGEyLCAweDAxLCAweDZkLCAweDBhLCAweDI1LCAweGJjLAorKyAgICAweDU3LCAweGUyLCAweDI3LCB9LAorKyAgeyAweDRmLCAweGUwLCAweGY5LCAweDUyLCAweDEyLCAweGRhLCAweDg0LCAweGI3LCAweGFiLCAweGFlLCAweGIwLCAweGE2LAorKyAgICAweDQ3LCAweDJhLCAweGM3LCAweGY1LCB9LAorKyAgeyAweDU2LCAweGU3LCAweGE4LCAweDFjLCAweDRjLCAweGNhLCAweGVkLCAweDkwLCAweDMxLCAweGVjLCAweDg3LCAweDQzLAorKyAgICAweGU3LCAweDcyLCAweDA4LCAweGVjLCAweGJlLCB9LAorKyAgeyAweDdlLCAweGRmLCAweDgwLCAweDFjLCAweDkzLCAweDMzLCAweGZkLCAweDUzLCAweDQ0LCAweGJhLCAweGZkLCAweDk2LAorKyAgICAweGUxLCAweGJiLCAweGI1LCAweDY1LCAweGE1LCAweDAwLCB9LAorKyAgeyAweGVjLCAweDZiLCAweGVkLCAweGY3LCAweDdiLCAweDYyLCAweDFkLCAweDdkLCAweGY0LCAweDgyLCAweGYzLCAweDFlLAorKyAgICAweDE4LCAweGZmLCAweDJiLCAweGM0LCAweDA2LCAweDIwLCAweDJhLCB9LAorKyAgeyAweDc0LCAweDk4LCAweGQ3LCAweDY4LCAweDYzLCAweGVkLCAweDg3LCAweGU0LCAweDVkLCAweDhkLCAweDllLCAweDFkLAorKyAgICAweGZkLCAweDJhLCAweGJiLCAweDg2LCAweGFjLCAweGU5LCAweDJhLCAweDg5LCB9LAorKyAgeyAweDg5LCAweGMzLCAweDg4LCAweGNlLCAweDJiLCAweDMzLCAweDFlLCAweDEwLCAweGQxLCAweDM3LCAweDIwLCAweDg2LAorKyAgICAweDI4LCAweDQzLCAweDcwLCAweGQ5LCAweGZiLCAweDk2LCAweGQ5LCAweGI1LCAweGQzLCB9LAorKyAgeyAweGNiLCAweDU2LCAweDc0LCAweDQxLCAweDhkLCAweDgwLCAweDAxLCAweDlhLCAweDZiLCAweDM4LCAweGUxLCAweDQxLAorKyAgICAweGFkLCAweDljLCAweDYyLCAweDc0LCAweGNlLCAweDM1LCAweGQ1LCAweDZjLCAweDg5LCAweDZlLCB9LAorKyAgeyAweDc5LCAweGFmLCAweDk0LCAweDU5LCAweDk5LCAweDI2LCAweGUxLCAweGM5LCAweDM0LCAweGZlLCAweDdjLCAweDIyLAorKyAgICAweGY3LCAweDQzLCAweGQ3LCAweDY1LCAweGQ0LCAweDQ4LCAweDE4LCAweGFjLCAweDNkLCAweGZkLCAweDkzLCB9LAorKyAgeyAweDg1LCAweDBkLCAweGZmLCAweGI4LCAweDNlLCAweDg3LCAweDQxLCAweGIwLCAweDk1LCAweGQzLCAweDNkLCAweDAwLAorKyAgICAweDQ3LCAweDU1LCAweDllLCAweGQyLCAweDY5LCAweGVhLCAweGJmLCAweGU5LCAweDdhLCAweDJkLCAweDYxLCAweDQ1LCB9LAorKyAgeyAweDAzLCAweGUwLCAweDg1LCAweGVjLCAweDU0LCAweGI1LCAweDE2LCAweDUzLCAweGE4LCAweGM0LCAweDcxLCAweGU5LAorKyAgICAweDZhLCAweGU3LCAweGNiLCAweGM0LCAweDE1LCAweDAyLCAweGZjLCAweDM0LCAweGE0LCAweGE0LCAweDI4LCAweDEzLAorKyAgICAweGQxLCB9LAorKyAgeyAweGUzLCAweDM0LCAweDRiLCAweGUxLCAweGQwLCAweDRiLCAweDU1LCAweDYxLCAweDhmLCAweGMwLCAweDI0LCAweDA1LAorKyAgICAweGU2LCAweGUwLCAweDNkLCAweDcwLCAweDI0LCAweDRkLCAweGRhLCAweGI4LCAweDkxLCAweDA1LCAweDI5LCAweDA3LAorKyAgICAweDAxLCAweDNlLCB9LAorKyAgeyAweDYxLCAweGZmLCAweDAxLCAweDcyLCAweGIxLCAweDRkLCAweGY2LCAweGZlLCAweGQxLCAweGQxLCAweDA4LCAweDc0LAorKyAgICAweGU2LCAweDkxLCAweDQ0LCAweGViLCAweDYxLCAweGRhLCAweDQwLCAweGFmLCAweGZjLCAweDhjLCAweDkxLCAweDZiLAorKyAgICAweGVjLCAweDEzLCAweGVkLCB9LAorKyAgeyAweGQ0LCAweDQwLCAweGQyLCAweGEwLCAweDdmLCAweGMxLCAweDU4LCAweDBjLCAweDg1LCAweGEwLCAweDg2LCAweGM3LAorKyAgICAweDg2LCAweGI5LCAweDYxLCAweGM5LCAweGVhLCAweDE5LCAweDg2LCAweDFmLCAweGFiLCAweDA3LCAweGNlLCAweDM3LAorKyAgICAweDcyLCAweDY3LCAweDA5LCAweGZjLCB9LAorKyAgeyAweDllLCAweGY4LCAweDE4LCAweDY3LCAweDkzLCAweDEwLCAweDliLCAweDM5LCAweDc1LCAweGU4LCAweDhiLCAweDM4LAorKyAgICAweDgyLCAweDdkLCAweGI4LCAweGI3LCAweGE1LCAweGFmLCAweGU2LCAweDZhLCAweDIyLCAweDVlLCAweDFmLCAweDljLAorKyAgICAweDk1LCAweDI5LCAweDE5LCAweGYyLCAweDRiLCB9LAorKyAgeyAweGM4LCAweDYyLCAweDI1LCAweGY1LCAweDk4LCAweGM5LCAweGVhLCAweGU1LCAweDI5LCAweDNhLCAweGQzLCAweDIyLAorKyAgICAweGViLCAweGViLCAweDA3LCAweDdjLCAweDE1LCAweDA3LCAweGVlLCAweDE1LCAweDYxLCAweGJiLCAweDA1LCAweDMwLAorKyAgICAweDk5LCAweDdmLCAweDExLCAweGY2LCAweDBhLCAweDFkLCB9LAorKyAgeyAweDY4LCAweDcwLCAweGY3LCAweDkwLCAweGExLCAweDhiLCAweDFmLCAweDBmLCAweGJiLCAweGNlLCAweGQyLCAweDBlLAorKyAgICAweDMzLCAweDFmLCAweDdmLCAweGE5LCAweDc4LCAweGE4LCAweGE2LCAweDgxLCAweDY2LCAweGFiLCAweDhkLCAweGNkLAorKyAgICAweDU4LCAweDU1LCAweDNhLCAweDBiLCAweDdhLCAweGRiLCAweGI1LCB9LAorKyAgeyAweGRkLCAweDM1LCAweGQyLCAweGI0LCAweGY2LCAweGM3LCAweGVhLCAweGFiLCAweDY0LCAweDI0LCAweDRlLCAweGZlLAorKyAgICAweGU1LCAweDNkLCAweDRlLCAweDk1LCAweDhiLCAweDZkLCAweDZjLCAweGJjLCAweGIwLCAweGY4LCAweDg4LCAweDYxLAorKyAgICAweDA5LCAweGI3LCAweDc4LCAweGEzLCAweDMxLCAweGZlLCAweGQ5LCAweDJmLCB9LAorKyAgeyAweDBhLCB9LAorKyAgeyAweDZlLCAweGQ0LCB9LAorKyAgeyAweDY0LCAweGU5LCAweGQxLCB9LAorKyAgeyAweDMwLCAweGRkLCAweDcxLCAweGVmLCB9LAorKyAgeyAweDExLCAweGI1LCAweDBjLCAweDg3LCAweGM5LCB9LAorKyAgeyAweDA2LCAweDFjLCAweDZkLCAweDA0LCAweDgyLCAweGQwLCB9LAorKyAgeyAweDVjLCAweDQyLCAweDBiLCAweGVlLCAweGM1LCAweDljLCAweGIyLCB9LAorKyAgeyAweGU4LCAweDI5LCAweGQ2LCAweGI0LCAweDVkLCAweGY3LCAweDJiLCAweDkzLCB9LAorKyAgeyAweDE4LCAweGNhLCAweDI3LCAweDcyLCAweDQzLCAweDM5LCAweDE2LCAweGJjLCAweDZhLCB9LAorKyAgeyAweDM5LCAweDhmLCAweGZkLCAweDY0LCAweGY1LCAweDU3LCAweDIzLCAweGIwLCAweDQ1LCAweGY4LCB9LAorKyAgeyAweGJiLCAweDNhLCAweDc4LCAweDZiLCAweDAyLCAweDFkLCAweDBiLCAweDE2LCAweGUzLCAweGIyLCAweDlhLCB9LAorKyAgeyAweGI4LCAweGI0LCAweDBiLCAweGU1LCAweGQ0LCAweDFkLCAweDBkLCAweDg1LCAweDQ5LCAweDkxLCAweDM1LCAweGZhLCB9LAorKyAgeyAweDZkLCAweDQ4LCAweDJhLCAweDBjLCAweDQyLCAweDA4LCAweGJkLCAweGE5LCAweDc4LCAweDZmLCAweDE4LCAweGFmLAorKyAgICAweGUyLCB9LAorKyAgeyAweDEwLCAweDQ1LCAweGQ0LCAweDU4LCAweDg4LCAweGVjLCAweDRlLCAweDFlLCAweGY2LCAweDE0LCAweDkyLCAweDY0LAorKyAgICAweDdlLCAweGIwLCB9LAorKyAgeyAweDhiLCAweDBiLCAweDk1LCAweGVlLCAweDkyLCAweGM2LCAweDNiLCAweDkxLCAweGYxLCAweDFlLCAweGViLCAweDUxLAorKyAgICAweDk4LCAweDBhLCAweDhkLCB9LAorKyAgeyAweGEzLCAweDUwLCAweDRkLCAweGE1LCAweDFkLCAweDAzLCAweDY4LCAweGU5LCAweDU3LCAweDc4LCAweGQ2LCAweDA0LAorKyAgICAweGYxLCAweGMzLCAweDk0LCAweGQ4LCB9LAorKyAgeyAweGI4LCAweDY2LCAweDZlLCAweGRkLCAweDQ2LCAweDE1LCAweGFlLCAweDNkLCAweDgzLCAweDdlLCAweGNmLCAweGU3LAorKyAgICAweDJjLCAweGU4LCAweDhmLCAweGM3LCAweDM0LCB9LAorKyAgeyAweDJlLCAweGMwLCAweDFmLCAweDI5LCAweGVhLCAweGY2LCAweGI5LCAweGUyLCAweGMyLCAweDkzLCAweGViLCAweDQxLAorKyAgICAweDBkLCAweGYwLCAweDBhLCAweDEzLCAweDBlLCAweGEyLCB9LAorKyAgeyAweDcxLCAweGI4LCAweDMzLCAweGE5LCAweDFiLCAweGFjLCAweGYxLCAweGI1LCAweDQyLCAweDhmLCAweDVlLCAweDgxLAorKyAgICAweDM0LCAweDQzLCAweGI3LCAweGE0LCAweDE4LCAweDVjLCAweDQ3LCB9LAorKyAgeyAweGRhLCAweDQ1LCAweGI4LCAweDJlLCAweDgyLCAweDFlLCAweGMwLCAweDU5LCAweDc3LCAweDlkLCAweGZhLCAweGI0LAorKyAgICAweDFjLCAweDVlLCAweGEwLCAweDJiLCAweDMzLCAweDk2LCAweDVhLCAweDU4LCB9LAorKyAgeyAweGUzLCAweDA5LCAweDA1LCAweGE5LCAweGViLCAweDQ4LCAweDEzLCAweGFkLCAweDcxLCAweDg4LCAweDgxLCAweDlhLAorKyAgICAweDNlLCAweDJjLCAweGUxLCAweDIzLCAweDk5LCAweDEzLCAweDM1LCAweDlmLCAweGI1LCB9LAorKyAgeyAweGI3LCAweDg2LCAweDJkLCAweDE2LCAweGUxLCAweDA0LCAweDAwLCAweDQ3LCAweDQ3LCAweDYxLCAweDMxLCAweGZiLAorKyAgICAweDE0LCAweGFjLCAweGQ4LCAweGU5LCAweGUzLCAweDQ5LCAweGJkLCAweGY3LCAweDljLCAweDNmLCB9LAorKyAgeyAweDdmLCAweGQ5LCAweDk1LCAweGE4LCAweGE3LCAweGEwLCAweGNjLCAweGJhLCAweGVmLCAweGIxLCAweDBhLCAweGE5LAorKyAgICAweDIxLCAweDYyLCAweDA4LCAweDBmLCAweDFiLCAweGZmLCAweDdiLCAweDlkLCAweGFlLCAweGIyLCAweDk1LCB9LAorKyAgeyAweDg1LCAweDk5LCAweGVhLCAweDMzLCAweGUwLCAweDU2LCAweGZmLCAweDEzLCAweGM2LCAweDYxLCAweDhjLCAweGY5LAorKyAgICAweDU3LCAweDA1LCAweDAzLCAweDExLCAweGY5LCAweGZiLCAweDNhLCAweGY3LCAweGNlLCAweGJiLCAweDUyLCAweDMwLCB9LAorKyAgeyAweGIyLCAweDcyLCAweDljLCAweGY4LCAweDc3LCAweDRlLCAweDhmLCAweDZiLCAweDAxLCAweDZjLCAweGZmLCAweDRlLAorKyAgICAweDRmLCAweDAyLCAweGQyLCAweGJjLCAweGViLCAweDUxLCAweDI4LCAweDk5LCAweDUwLCAweGFiLCAweGM0LCAweDQyLAorKyAgICAweGUzLCB9LAorKyAgeyAweDhiLCAweDBhLCAweGI1LCAweDkwLCAweDhmLCAweGY1LCAweDdiLCAweGRkLCAweGJhLCAweDQ3LCAweDM3LCAweGM5LAorKyAgICAweDJhLCAweGQ1LCAweDRiLCAweDI1LCAweDA4LCAweDhiLCAweDAyLCAweDE3LCAweGE3LCAweDllLCAweDZiLCAweDZlLAorKyAgICAweGUzLCAweDkwLCB9LAorKyAgeyAweDkwLCAweGRkLCAweGY3LCAweDc1LCAweGE3LCAweGEzLCAweDk5LCAweDVlLCAweDViLCAweDdkLCAweDc1LCAweGMzLAorKyAgICAweDM5LCAweDZiLCAweGEwLCAweGUyLCAweDQ0LCAweDUzLCAweGIxLCAweDllLCAweGM4LCAweGYxLCAweDc3LCAweDEwLAorKyAgICAweDU4LCAweDA2LCAweDlhLCB9LAorKyAgeyAweDk5LCAweDUyLCAweGYwLCAweDQ5LCAweGE4LCAweDhjLCAweGVjLCAweGE2LCAweDk3LCAweDMyLCAweDEzLCAweGI1LAorKyAgICAweGY3LCAweGEzLCAweDhlLCAweGZiLCAweDRiLCAweDU5LCAweDMxLCAweDNkLCAweDAxLCAweDU5LCAweDk4LCAweDVkLAorKyAgICAweDUzLCAweDAzLCAweDFhLCAweDM5LCB9LAorKyAgeyAweDlmLCAweGUwLCAweGMyLCAweGU1LCAweDVkLCAweDkzLCAweGQ2LCAweDliLCAweDQ3LCAweDhmLCAweDliLCAweGUwLAorKyAgICAweDI2LCAweDM1LCAweDg0LCAweDIwLCAweDFkLCAweGM1LCAweDUzLCAweDEwLCAweDBmLCAweDIyLCAweGI5LCAweGI1LAorKyAgICAweGQ0LCAweDM2LCAweGIxLCAweGFjLCAweDczLCB9LAorKyAgeyAweDMwLCAweDMyLCAweDIwLCAweDNiLCAweDEwLCAweDI4LCAweGVjLCAweDFmLCAweDRmLCAweDliLCAweDQ3LCAweDU5LAorKyAgICAweGViLCAweDdiLCAweGVlLCAweDQ1LCAweGZiLCAweDBjLCAweDQ5LCAweGQ4LCAweDNkLCAweDY5LCAweGJkLCAweDkwLAorKyAgICAweDJjLCAweGYwLCAweDllLCAweDhkLCAweGJmLCAweGQ1LCB9LAorKyAgeyAweDJhLCAweDM3LCAweDczLCAweDdmLCAweGY5LCAweDk2LCAweDE5LCAweGFhLCAweDI1LCAweGQ4LCAweDEzLCAweDI4LAorKyAgICAweDAxLCAweDI5LCAweDg5LCAweGRmLCAweDZlLCAweDBjLCAweDliLCAweDQzLCAweDQ0LCAweDUxLCAweGU5LCAweDc1LAorKyAgICAweDI2LCAweDBjLCAweGI3LCAweDg3LCAweDY2LCAweDBiLCAweDVmLCB9LAorKyAgeyAweDIzLCAweGRmLCAweDk2LCAweDY4LCAweDkxLCAweDg2LCAweGQwLCAweDkzLCAweDU1LCAweDMzLCAweDI0LCAweGY2LAorKyAgICAweGJhLCAweDA4LCAweDc1LCAweDViLCAweDU5LCAweDExLCAweDY5LCAweGI4LCAweGI5LCAweGU1LCAweDJjLCAweDc3LAorKyAgICAweDAyLCAweGY2LCAweDQ3LCAweGVlLCAweDgxLCAweGRkLCAweGI5LCAweDA2LCB9LAorKyAgeyAweDlkLCB9LAorKyAgeyAweDlkLCAweDdkLCB9LAorKyAgeyAweGZkLCAweGMzLCAweGRhLCB9LAorKyAgeyAweGU4LCAweDgyLCAweGNkLCAweDIxLCB9LAorKyAgeyAweGMzLCAweDFkLCAweDQyLCAweDRjLCAweDc0LCB9LAorKyAgeyAweGU5LCAweGRhLCAweGYxLCAweGEyLCAweGU1LCAweDdjLCB9LAorKyAgeyAweDUyLCAweGI4LCAweDZmLCAweDgxLCAweDVjLCAweDNhLCAweDRjLCB9LAorKyAgeyAweDViLCAweDM5LCAweDI2LCAweGZjLCAweDkyLCAweDVlLCAweGUwLCAweDQ5LCB9LAorKyAgeyAweDU5LCAweGU0LCAweDdjLCAweDkzLCAweDFjLCAweGY5LCAweDI4LCAweDkzLCAweGRlLCB9LAorKyAgeyAweGRlLCAweGRmLCAweGIyLCAweDQzLCAweDYxLCAweDBiLCAweDg2LCAweDE2LCAweDRjLCAweDJlLCB9LAorKyAgeyAweDE0LCAweDhmLCAweDc1LCAweDUxLCAweGFmLCAweGI5LCAweGVlLCAweDUxLCAweDVhLCAweGFlLCAweDIzLCB9LAorKyAgeyAweDQzLCAweDVmLCAweDUwLCAweGQ1LCAweDcwLCAweGIwLCAweDViLCAweDg3LCAweGY1LCAweGQ5LCAweGIzLCAweDZkLCB9LAorKyAgeyAweDY2LCAweDBhLCAweDY0LCAweDkzLCAweDc5LCAweDcxLCAweDk0LCAweDQwLCAweGI3LCAweDY4LCAweDJkLCAweGQzLAorKyAgICAweDYzLCB9LAorKyAgeyAweDE1LCAweDAwLCAweGM0LCAweDBjLCAweDdkLCAweDFiLCAweDEwLCAweGE5LCAweDczLCAweDFiLCAweDkwLCAweDZmLAorKyAgICAweGU2LCAweGE5LCB9LAorKyAgeyAweDM0LCAweDc1LCAweGYzLCAweDg2LCAweDhmLCAweDU2LCAweGNmLCAweDJhLCAweDBhLCAweGYyLCAweDYyLCAweDBhLAorKyAgICAweGY2LCAweDBlLCAweDIwLCB9LAorKyAgeyAweGIxLCAweGRlLCAweGM5LCAweGY1LCAweGRiLCAweGYzLCAweDJmLCAweDRjLCAweGQ2LCAweDQxLCAweDdkLCAweDM5LAorKyAgICAweDE4LCAweDNlLCAweGM3LCAweGMzLCB9LAorKyAgeyAweGM1LCAweDg5LCAweGIyLCAweGY4LCAweGI4LCAweGMwLCAweGEzLCAweGI5LCAweDNiLCAweDEwLCAweDZkLCAweDdjLAorKyAgICAweDkyLCAweGZjLCAweDdmLCAweDM0LCAweDQxLCB9LAorKyAgeyAweGM0LCAweGQ4LCAweGVmLCAweGJhLCAweGVmLCAweGQyLCAweGFhLCAweGM1LCAweDZjLCAweDhlLCAweDNlLCAweGJiLAorKyAgICAweDEyLCAweGZjLCAweDBmLCAweDcyLCAweGJmLCAweDBmLCB9LAorKyAgeyAweGRkLCAweDkxLCAweGQxLCAweDE1LCAweDllLCAweDdkLCAweGY4LCAweGMxLCAweGI5LCAweDE0LCAweDYzLCAweDk2LAorKyAgICAweGI1LCAweGNiLCAweDgzLCAweDFkLCAweDM1LCAweDFjLCAweGVjLCB9LAorKyAgeyAweGE5LCAweGY4LCAweDUyLCAweGM5LCAweDY3LCAweDc2LCAweDJiLCAweGFkLCAweGZiLCAweGQ4LCAweDNhLCAweGE2LAorKyAgICAweDc0LCAweDAyLCAweGFlLCAweGI4LCAweDI1LCAweDJjLCAweDYzLCAweDQ5LCB9LAorKyAgeyAweDc3LCAweDFmLCAweDY2LCAweDcwLCAweGZkLCAweDUwLCAweDI5LCAweGFhLCAweGViLCAweGRjLCAweGVlLCAweGJhLAorKyAgICAweDc1LCAweDk4LCAweGRjLCAweDkzLCAweDEyLCAweDNmLCAweGRjLCAweDdjLCAweDM4LCB9LAorKyAgeyAweGUyLCAweGUxLCAweDg5LCAweDVjLCAweDM3LCAweDM4LCAweDZhLCAweGEzLCAweDQwLCAweGFjLCAweDNmLCAweGIwLAorKyAgICAweGNhLCAweGZjLCAweGE3LCAweGYzLCAweGVhLCAweGY5LCAweDBmLCAweDVkLCAweDhlLCAweDM5LCB9LAorKyAgeyAweDBmLCAweDY3LCAweGM4LCAweDM4LCAweDAxLCAweGIxLCAweGI3LCAweGI4LCAweGEyLCAweGU3LCAweDBhLCAweDZkLAorKyAgICAweGQyLCAweDYzLCAweDY5LCAweDllLCAweGNjLCAweGYwLCAweGYyLCAweGJlLCAweDliLCAweDk4LCAweGRkLCB9LAorKyAgeyAweDEzLCAweGUxLCAweDM2LCAweDMwLCAweGZlLCAweGM2LCAweDAxLCAweDhhLCAweGExLCAweDYzLCAweDk2LCAweDU5LAorKyAgICAweGMyLCAweGE5LCAweDY4LCAweDNmLCAweDU4LCAweGQ0LCAweDE5LCAweDBjLCAweDQwLCAweGYzLCAweGRlLCAweDAyLCB9LAorKyAgeyAweGEzLCAweDllLCAweGNlLCAweGRhLCAweDQyLCAweGVlLCAweDhjLCAweDZjLCAweDVhLCAweDdkLCAweGRjLCAweDg5LAorKyAgICAweDAyLCAweDc3LCAweGRkLCAweGU3LCAweDk1LCAweGJiLCAweGZmLCAweDBkLCAweGE0LCAweGI1LCAweDM4LCAweDFlLAorKyAgICAweGFmLCB9LAorKyAgeyAweDlhLCAweGY2LCAweGI1LCAweDlhLCAweDRmLCAweGE5LCAweDRmLCAweDJjLCAweDM1LCAweDNjLCAweDI0LCAweGRjLAorKyAgICAweDk3LCAweDZmLCAweGQ5LCAweGExLCAweDdkLCAweDFhLCAweDg1LCAweDBiLCAweGY1LCAweGRhLCAweDJlLCAweGU3LAorKyAgICAweGIxLCAweDFkLCB9LAorKyAgeyAweDg0LCAweDFlLCAweDhlLCAweDNkLCAweDQ1LCAweGE1LCAweGYyLCAweDI3LCAweGYzLCAweDMxLCAweGZlLCAweGI5LAorKyAgICAweGZiLCAweGM1LCAweDQ1LCAweDk5LCAweDk5LCAweGRkLCAweDkzLCAweDQzLCAweDAyLCAweGVlLCAweDU4LCAweGFmLAorKyAgICAweGVlLCAweDZhLCAweGJlLCB9LAorKyAgeyAweDA3LCAweDJmLCAweGMwLCAweGEyLCAweDA0LCAweGM0LCAweGFiLCAweDdjLCAweDI2LCAweGJiLCAweGE4LCAweGQ4LAorKyAgICAweGUzLCAweDFjLCAweDc1LCAweDE1LCAweDY0LCAweDVkLCAweDAyLCAweDZhLCAweGYwLCAweDg2LCAweGU5LCAweGNkLAorKyAgICAweDVjLCAweGVmLCAweGEzLCAweDI1LCB9LAorKyAgeyAweDJmLCAweDNiLCAweDFmLCAweGI1LCAweDkxLCAweDhmLCAweDg2LCAweGUwLCAweGRjLCAweDMxLCAweDQ4LCAweGI2LAorKyAgICAweGExLCAweDhjLCAweGZkLCAweDc1LCAweGJiLCAweDdkLCAweDNkLCAweGMxLCAweGYwLCAweDEwLCAweDlhLCAweGQ4LAorKyAgICAweDRiLCAweDBlLCAweGUzLCAweDk0LCAweDlmLCB9LAorKyAgeyAweDI5LCAweGJiLCAweDhmLCAweDZjLCAweGQxLCAweGYyLCAweGI2LCAweGFmLCAweGU1LCAweGUzLCAweDJkLCAweGRjLAorKyAgICAweDZmLCAweGE0LCAweDUzLCAweDg4LCAweGQ4LCAweGNmLCAweDRkLCAweDQ1LCAweDQyLCAweDYyLCAweGRiLCAweGRmLAorKyAgICAweGY4LCAweDQ1LCAweGMyLCAweDEzLCAweGVjLCAweDM1LCB9LAorKyAgeyAweDA2LCAweDNjLCAweGUzLCAweDJjLCAweDE1LCAweGM2LCAweDQzLCAweDAzLCAweDgxLCAweGZiLCAweDA4LCAweDc2LAorKyAgICAweDMzLCAweGNiLCAweDAyLCAweGMxLCAweGJhLCAweDMzLCAweGU1LCAweGUwLCAweGQxLCAweDkyLCAweGE4LCAweDQ2LAorKyAgICAweDI4LCAweDNmLCAweDNlLCAweDlkLCAweDJjLCAweDQ0LCAweDU0LCB9LAorKyAgeyAweGVhLCAweGJiLCAweDk2LCAweGY4LCAweGQxLCAweDhiLCAweDA0LCAweDExLCAweDQwLCAweDc4LCAweDQyLCAweDAyLAorKyAgICAweDE5LCAweGQxLCAweGJjLCAweDY1LCAweDkyLCAweGQzLCAweGMzLCAweGQ2LCAweGQ5LCAweDE5LCAweGU3LCAweGMzLAorKyAgICAweDQwLCAweDk3LCAweGJkLCAweGQ0LCAweGVkLCAweGZhLCAweDVlLCAweDI4LCB9LAorKyAgeyAweDAyLCB9LAorKyAgeyAweDUyLCAweGE4LCB9LAorKyAgeyAweDM4LCAweDI1LCAweDBkLCB9LAorKyAgeyAweGUzLCAweDA0LCAweGQ0LCAweDkyLCB9LAorKyAgeyAweDk3LCAweGRiLCAweGY3LCAweDgxLCAweGNhLCB9LAorKyAgeyAweDhhLCAweDU2LCAweDlkLCAweDYyLCAweDU2LCAweGNjLCB9LAorKyAgeyAweGExLCAweDhlLCAweDNjLCAweDcyLCAweDhmLCAweDYzLCAweDAzLCB9LAorKyAgeyAweGY3LCAweGYzLCAweDM5LCAweDA5LCAweDBhLCAweGExLCAweGJiLCAweDIzLCB9LAorKyAgeyAweDZiLCAweDAzLCAweGMwLCAweGU5LCAweGQ5LCAweDgzLCAweDA1LCAweDIyLCAweDAxLCB9LAorKyAgeyAweDFiLCAweDRiLCAweGY1LCAweGQ2LCAweDRmLCAweDA1LCAweDc1LCAweDkxLCAweDRjLCAweDdmLCB9LAorKyAgeyAweDRjLCAweDhjLCAweDI1LCAweDIwLCAweDIxLCAweGNiLCAweGMyLCAweDRiLCAweDNhLCAweDViLCAweDhkLCB9LAorKyAgeyAweDU2LCAweGUyLCAweDc3LCAweGEwLCAweGI2LCAweDlmLCAweDgxLCAweGVjLCAweDgzLCAweDc1LCAweGM0LCAweGY5LCB9LAorKyAgeyAweDcxLCAweDcwLCAweDBmLCAweGFkLCAweDRkLCAweDM1LCAweDgxLCAweDlkLCAweDg4LCAweDY5LCAweGY5LCAweGFhLAorKyAgICAweGQzLCB9LAorKyAgeyAweDUwLCAweDZlLCAweDg2LCAweDZlLCAweDQzLCAweGMwLCAweGMyLCAweDQ0LCAweGMyLCAweGUyLCAweGEwLCAweDFjLAorKyAgICAweGI3LCAweDlhLCB9LAorKyAgeyAweGU0LCAweDdlLCAweDcyLCAweGM2LCAweDEyLCAweDhlLCAweDdjLCAweGZjLCAweGJkLCAweGUyLCAweDA4LCAweDMxLAorKyAgICAweDNkLCAweDQ3LCAweDNkLCB9LAorKyAgeyAweDA4LCAweDk3LCAweDViLCAweDgwLCAweGFlLCAweGM0LCAweDFkLCAweDUwLCAweDc3LCAweGRmLCAweDFmLCAweGQwLAorKyAgICAweDI0LCAweGYwLCAweDE3LCAweGMwLCB9LAorKyAgeyAweDAxLCAweGI2LCAweDI5LCAweGY0LCAweGFmLCAweDc4LCAweDVmLCAweGI2LCAweDkxLCAweGRkLCAweDc2LCAweDc2LAorKyAgICAweGQyLCAweGZkLCAweDBjLCAweDQ3LCAweDQwLCB9LAorKyAgeyAweGExLCAweGQ4LCAweDA5LCAweDk3LCAweDdhLCAweGE2LCAweGM4LCAweDk0LCAweGY2LCAweDkxLCAweDdiLCAweGFlLAorKyAgICAweDJiLCAweDlmLCAweDBkLCAweDgzLCAweDQ4LCAweGY3LCB9LAorKyAgeyAweDEyLCAweGQ1LCAweDUzLCAweDdkLCAweDlhLCAweGIwLCAweGJlLCAweGQ5LCAweGVkLCAweGU5LCAweDllLCAweGVlLAorKyAgICAweDYxLCAweDViLCAweDQyLCAweGYyLCAweGMwLCAweDczLCAweGMwLCB9LAorKyAgeyAweGQ1LCAweDc3LCAweGQ2LCAweDVjLCAweDZlLCAweGE1LCAweDY5LCAweDJiLCAweDNiLCAweDhjLCAweGQ2LCAweDdkLAorKyAgICAweDFkLCAweGJlLCAweDJjLCAweGExLCAweDAyLCAweDIxLCAweGNkLCAweDI5LCB9LAorKyAgeyAweGE0LCAweDk4LCAweDgwLCAweGNhLCAweDIyLCAweGNmLCAweDZhLCAweGFiLCAweDVlLCAweDQwLCAweDBkLCAweDYxLAorKyAgICAweDA4LCAweDIxLCAweGVmLCAweGMwLCAweDZjLCAweDUyLCAweGI0LCAweGIwLCAweDUzLCB9LAorKyAgeyAweGJmLCAweGFmLCAweDhmLCAweDNiLCAweDdhLCAweDk3LCAweDMzLCAweGU1LCAweGNhLCAweDA3LCAweDM3LCAweGZkLAorKyAgICAweDE1LCAweGRmLCAweGNlLCAweDI2LCAweDJhLCAweGIxLCAweGE3LCAweDBiLCAweGIzLCAweGFjLCB9LAorKyAgeyAweDE2LCAweDIyLCAweGUxLCAweGJjLCAweDk5LCAweDRlLCAweDAxLCAweGYwLCAweGZhLCAweGZmLCAweDhmLCAweGE1LAorKyAgICAweDBjLCAweDYxLCAweGIwLCAweGFkLCAweGNjLCAweGIxLCAweGUxLCAweDIxLCAweDQ2LCAweGZhLCAweDJlLCB9LAorKyAgeyAweDExLCAweDViLCAweDBiLCAweDJiLCAweGU2LCAweDE0LCAweGMxLCAweGQ1LCAweDRkLCAweDcxLCAweDVlLCAweDE3LAorKyAgICAweGVhLCAweDIzLCAweGRkLCAweDZjLCAweGJkLCAweDFkLCAweGJlLCAweDEyLCAweDFiLCAweGVlLCAweDRjLCAweDFhLCB9LAorKyAgeyAweDQwLCAweDg4LCAweDIyLCAweGYzLCAweDIwLCAweDZjLCAweGVkLCAweGUxLCAweDM2LCAweDM0LCAweDYyLCAweDJjLAorKyAgICAweDk4LCAweDgzLCAweDUyLCAweGUyLCAweDI1LCAweGVlLCAweGU5LCAweGY1LCAweGUxLCAweDE3LCAweGYwLCAweDVjLAorKyAgICAweGFlLCB9LAorKyAgeyAweGMzLCAweDc2LCAweDM3LCAweGRlLCAweDk1LCAweDhjLCAweGNhLCAweDJiLCAweDBjLCAweDIzLCAweGU3LCAweGI1LAorKyAgICAweDM4LCAweDcwLCAweDYxLCAweGNjLCAweGZmLCAweGQzLCAweDk1LCAweDdiLCAweGYzLCAweGZmLCAweDFmLCAweDlkLAorKyAgICAweDU5LCAweDAwLCB9LAorKyAgeyAweDBjLCAweDE5LCAweDUyLCAweDA1LCAweDIyLCAweDUzLCAweGNiLCAweDQ4LCAweGQ3LCAweDEwLCAweDBlLCAweDdlLAorKyAgICAweDE0LCAweDY5LCAweGI1LCAweGEyLCAweDkyLCAweDQzLCAweGEzLCAweDllLCAweDRiLCAweDhmLCAweDUxLCAweDJjLAorKyAgICAweDVhLCAweDJjLCAweDNiLCB9LAorKyAgeyAweGUxLCAweDlkLCAweDcwLCAweDcwLCAweDI4LCAweGVjLCAweDg2LCAweDQwLCAweDU1LCAweDMzLCAweDU2LCAweGRhLAorKyAgICAweDg4LCAweGNhLCAweGVlLCAweGM4LCAweDZhLCAweDIwLCAweGIxLCAweGU1LCAweDNkLCAweDU3LCAweGY4LCAweDNjLAorKyAgICAweDEwLCAweDA3LCAweDJhLCAweGM0LCB9LAorKyAgeyAweDBiLCAweGFlLCAweGYxLCAweGM0LCAweDc5LCAweGVlLCAweDFiLCAweDNkLCAweDI3LCAweDM1LCAweDhkLCAweDE0LAorKyAgICAweGQ2LCAweGFlLCAweDRlLCAweDNjLCAweGU5LCAweDUzLCAweDUwLCAweGI1LCAweGNjLCAweDBjLCAweGY3LCAweGRmLAorKyAgICAweGVlLCAweGExLCAweDc0LCAweGQ2LCAweDcxLCB9LAorKyAgeyAweGU2LCAweGE0LCAweGY0LCAweDk5LCAweDk4LCAweGI5LCAweDgwLCAweGVhLCAweDk2LCAweDdmLCAweDRmLCAweDMzLAorKyAgICAweGNmLCAweDc0LCAweDI1LCAweDZmLCAweDE3LCAweDZjLCAweGJmLCAweGY1LCAweDVjLCAweDM4LCAweGQwLCAweGZmLAorKyAgICAweDk2LCAweGNiLCAweDEzLCAweGY5LCAweGRmLCAweGZkLCB9LAorKyAgeyAweGJlLCAweDkyLCAweGViLCAweGJhLCAweDQ0LCAweDJjLCAweDI0LCAweDc0LCAweGQ0LCAweDAzLCAweDI3LCAweDNjLAorKyAgICAweDVkLCAweDViLCAweDAzLCAweDMwLCAweDg3LCAweDYzLCAweDY5LCAweGUwLCAweGI4LCAweDk0LCAweGY0LCAweDQ0LAorKyAgICAweDdlLCAweGFkLCAweGNkLCAweDIwLCAweDEyLCAweDE2LCAweDc5LCB9LAorKyAgeyAweDMwLCAweGYxLCAweGM0LCAweDhlLCAweDA1LCAweDkwLCAweDJhLCAweDk3LCAweDYzLCAweDk0LCAweDQ2LCAweGZmLAorKyAgICAweGNlLCAweGQ4LCAweDY3LCAweGE3LCAweGFjLCAweDMzLCAweDhjLCAweDk1LCAweGI3LCAweGNkLCAweGEzLCAweDIzLAorKyAgICAweDk4LCAweDlkLCAweDc2LCAweDZjLCAweDlkLCAweGE4LCAweGQ2LCAweDhhLCB9LAorKyAgeyAweGJlLCB9LAorKyAgeyAweDE3LCAweDZjLCB9LAorKyAgeyAweDFhLCAweDQyLCAweDRmLCB9LAorKyAgeyAweGJhLCAweGFmLCAweGI3LCAweDY1LCB9LAorKyAgeyAweGMyLCAweDYzLCAweDQzLCAweDZhLCAweGVhLCB9LAorKyAgeyAweGU0LCAweDRkLCAweGFkLCAweGYyLCAweDBiLCAweDAyLCB9LAorKyAgeyAweDA0LCAweGM3LCAweGM0LCAweDdmLCAweGE5LCAweDJiLCAweGNlLCB9LAorKyAgeyAweDY2LCAweGY2LCAweDY3LCAweGNiLCAweDAzLCAweDUzLCAweGM4LCAweGYxLCB9LAorKyAgeyAweDU2LCAweGEzLCAweDYwLCAweDc4LCAweGM5LCAweDVmLCAweDcwLCAweDFiLCAweDVlLCB9LAorKyAgeyAweDk5LCAweGZmLCAweDgxLCAweDdjLCAweDEzLCAweDNjLCAweDI5LCAweDc5LCAweDRiLCAweDY1LCB9LAorKyAgeyAweDUxLCAweDEwLCAweDUwLCAweDkzLCAweDAxLCAweDkzLCAweGI3LCAweDAxLCAweGM5LCAweDE4LCAweGI3LCB9LAorKyAgeyAweDhlLCAweDNjLCAweDQyLCAweDFlLCAweDVlLCAweDdkLCAweGMxLCAweDUwLCAweDcwLCAweDFmLCAweDAwLCAweDk4LCB9LAorKyAgeyAweDVmLCAweGQ5LCAweDliLCAweGM4LCAweGQ3LCAweGIyLCAweDcyLCAweDYyLCAweDFhLCAweDFlLCAweGJhLCAweDkyLAorKyAgICAweGU5LCB9LAorKyAgeyAweDcwLCAweDJiLCAweGJhLCAweGZlLCAweGFkLCAweDVkLCAweDk2LCAweDNmLCAweDI3LCAweGMyLCAweDQxLCAweDZkLAorKyAgICAweGM0LCAweGIzLCB9LAorKyAgeyAweGFlLCAweGUwLCAweGQ1LCAweGQ0LCAweGM3LCAweGFlLCAweDE1LCAweDVlLCAweGRjLCAweGRkLCAweDMzLCAweDYwLAorKyAgICAweGQ3LCAweGQzLCAweDVlLCB9LAorKyAgeyAweDc5LCAweDhlLCAweGJjLCAweDllLCAweDIwLCAweGI5LCAweDE5LCAweDRiLCAweDYzLCAweDgwLCAweGYzLCAweDE2LAorKyAgICAweGFmLCAweDM5LCAweGJkLCAweDkyLCB9LAorKyAgeyAweGMyLCAweDBlLCAweDg1LCAweGEwLCAweDBiLCAweDlhLCAweGIwLCAweGVjLCAweGRlLCAweDM4LCAweGQzLCAweDEwLAorKyAgICAweGQ5LCAweGE3LCAweDY2LCAweDI3LCAweGNmLCB9LAorKyAgeyAweDBlLCAweDNiLCAweDc1LCAweDgwLCAweDY3LCAweDE0LCAweDBjLCAweDAyLCAweDkwLCAweGQ2LCAweGIzLCAweDAyLAorKyAgICAweDgxLCAweGY2LCAweGE2LCAweDg3LCAweGNlLCAweDU4LCB9LAorKyAgeyAweDc5LCAweGI1LCAweGU5LCAweDVkLCAweDUyLCAweDRkLCAweGY3LCAweDU5LCAweGY0LCAweDJlLCAweDI3LCAweGRkLAorKyAgICAweGIzLCAweGVkLCAweDU3LCAweDViLCAweDgyLCAweGVhLCAweDZmLCB9LAorKyAgeyAweGEyLCAweDk3LCAweGY1LCAweDgwLCAweDAyLCAweDNkLCAweGRlLCAweGEzLCAweGY5LCAweGY2LCAweGFiLCAweGUzLAorKyAgICAweDU3LCAweDYzLCAweDdiLCAweDliLCAweDEwLCAweDQyLCAweDZmLCAweGYyLCB9LAorKyAgeyAweDEyLCAweDdhLCAweGZjLCAweGI3LCAweDY3LCAweDA2LCAweDBjLCAweDc4LCAweDFhLCAweGZlLCAweDg4LCAweDRmLAorKyAgICAweGM2LCAweGFjLCAweDUyLCAweDk2LCAweDY0LCAweDI4LCAweDk3LCAweDg0LCAweDA2LCB9LAorKyAgeyAweGM1LCAweDA0LCAweDQ0LCAweDZiLCAweGIyLCAweGE1LCAweGE0LCAweDY2LCAweGUxLCAweDc2LCAweGEyLCAweDUxLAorKyAgICAweGY5LCAweDU5LCAweDY5LCAweDk3LCAweDU2LCAweDBiLCAweGJmLCAweDUwLCAweGIzLCAweDM0LCB9LAorKyAgeyAweDIxLCAweDMyLCAweDZiLCAweDQyLCAweGI1LCAweGVkLCAweDcxLCAweDhkLCAweGY3LCAweDVhLCAweDM1LCAweGUzLAorKyAgICAweDkwLCAweGUyLCAweGVlLCAweGFhLCAweDg5LCAweGY2LCAweGM5LCAweDljLCAweDRkLCAweDczLCAweGY0LCB9LAorKyAgeyAweDRjLCAweGE2LCAweDA5LCAweGY0LCAweDQ4LCAweGU3LCAweDQ2LCAweGJjLCAweDQ5LCAweGZjLCAweGU1LCAweGRhLAorKyAgICAweGQxLCAweDg3LCAweDEzLCAweDE3LCAweDRjLCAweDU5LCAweDcxLCAweDI2LCAweDViLCAweDJjLCAweDQyLCAweGI3LCB9LAorKyAgeyAweDEzLCAweDYzLCAweGYzLCAweDQwLCAweDAyLCAweGU1LCAweGEzLCAweDNhLCAweDVlLCAweDhlLCAweGY4LCAweGI2LAorKyAgICAweDhhLCAweDQ5LCAweDYwLCAweDc2LCAweDM0LCAweDcyLCAweDk0LCAweDczLCAweGY2LCAweGQ5LCAweDIxLCAweDZhLAorKyAgICAweDI2LCB9LAorKyAgeyAweGRmLCAweDc1LCAweDE2LCAweDEwLCAweDFiLCAweDVlLCAweDgxLCAweGMzLCAweGM4LCAweGRlLCAweDM0LCAweDI0LAorKyAgICAweGIwLCAweDk4LCAweGViLCAweDFiLCAweDhmLCAweGExLCAweDliLCAweDA1LCAweGVlLCAweGE1LCAweGU5LCAweDM1LAorKyAgICAweGY0LCAweDFkLCB9LAorKyAgeyAweGNkLCAweDIxLCAweDkzLCAweDZlLCAweDViLCAweGEwLCAweDI2LCAweDJiLCAweDIxLCAweDBlLCAweGEwLCAweGI5LAorKyAgICAweDFjLCAweGI1LCAweGJiLCAweGI4LCAweGY4LCAweDFlLCAweGZmLCAweDVjLCAweGE4LCAweGY5LCAweDM5LCAweDQ2LAorKyAgICAweDRlLCAweDI5LCAweDI2LCB9LAorKyAgeyAweDczLCAweDdmLCAweDBlLCAweDNiLCAweDBiLCAweDVjLCAweGY5LCAweDYwLCAweGFhLCAweDg4LCAweGExLCAweDA5LAorKyAgICAweGIxLCAweDVkLCAweDM4LCAweDdiLCAweDg2LCAweDhmLCAweDEzLCAweDdhLCAweDhkLCAweDcyLCAweDdhLCAweDk4LAorKyAgICAweDFhLCAweDViLCAweGZmLCAweGM5LCB9LAorKyAgeyAweGQzLCAweDNjLCAweDYxLCAweDcxLCAweDQ0LCAweDdlLCAweDMxLCAweDc0LCAweDk4LCAweDlkLCAweDlhLCAweGQyLAorKyAgICAweDI3LCAweGYzLCAweDQ2LCAweDQzLCAweDQyLCAweDUxLCAweGQwLCAweDVmLCAweGU5LCAweDFjLCAweDVjLCAweDY5LAorKyAgICAweGJmLCAweGY2LCAweGJlLCAweDNjLCAweDQwLCB9LAorKyAgeyAweDMxLCAweDk5LCAweDMxLCAweDlmLCAweGFhLCAweDQzLCAweDJlLCAweDc3LCAweDNlLCAweDc0LCAweDI2LCAweDMxLAorKyAgICAweDVlLCAweDYxLCAweGYxLCAweDg3LCAweGUyLCAweGViLCAweDliLCAweGNkLCAweGQwLCAweDNhLCAweGVlLCAweDIwLAorKyAgICAweDdlLCAweDEwLCAweDBhLCAweDBiLCAweDdlLCAweGZhLCB9LAorKyAgeyAweGE0LCAweDI3LCAweDgwLCAweDY3LCAweDgxLCAweDJhLCAweGE3LCAweDYyLCAweGY3LCAweDZlLCAweGRhLCAweGQ0LAorKyAgICAweDVjLCAweDM5LCAweDc0LCAweGFkLCAweDdlLCAweGJlLCAweGFkLCAweGE1LCAweDg0LCAweDdmLCAweGE5LCAweDMwLAorKyAgICAweDVkLCAweGRiLCAweGUyLCAweDA1LCAweDQzLCAweGY3LCAweDFiLCB9LAorKyAgeyAweDBiLCAweDM3LCAweGQ4LCAweDAyLCAweGUxLCAweDgzLCAweGQ2LCAweDgwLCAweGYyLCAweDM1LCAweGMyLCAweGIwLAorKyAgICAweDM3LCAweGVmLCAweGVmLCAweDVlLCAweDQzLCAweDkzLCAweGYwLCAweDQ5LCAweDQ1LCAweDBhLCAweGVmLCAweGI1LAorKyAgICAweDc2LCAweDcwLCAweDEyLCAweDQ0LCAweGM0LCAweGRiLCAweGY1LCAweDdhLCB9LAorKyAgeyAweDFmLCB9LAorKyAgeyAweDgyLCAweDYwLCB9LAorKyAgeyAweGNjLCAweGUzLCAweDA4LCB9LAorKyAgeyAweDU2LCAweDE3LCAweGU0LCAweDU5LCB9LAorKyAgeyAweGUyLCAweGQ3LCAweDllLCAweGM0LCAweDRjLCB9LAorKyAgeyAweGIyLCAweGFkLCAweGQzLCAweDc4LCAweDU4LCAweDVhLCB9LAorKyAgeyAweGNlLCAweDQzLCAweGI0LCAweDAyLCAweDk2LCAweGFiLCAweDNjLCB9LAorKyAgeyAweGU2LCAweDA1LCAweDFhLCAweDczLCAweDIyLCAweDMyLCAweGJiLCAweDc3LCB9LAorKyAgeyAweDIzLCAweGU3LCAweGRhLCAweGZlLCAweDJjLCAweGVmLCAweDhjLCAweDIyLCAweGVjLCB9LAorKyAgeyAweGU5LCAweDhlLCAweDU1LCAweDM4LCAweGQxLCAweGQ3LCAweDM1LCAweDIzLCAweDk4LCAweGM3LCB9LAorKyAgeyAweGI1LCAweDgxLCAweDFhLCAweGU1LCAweGI1LCAweGE1LCAweGQ5LCAweDRkLCAweGNhLCAweDQxLCAweGU3LCB9LAorKyAgeyAweDQxLCAweDE2LCAweDE2LCAweDk1LCAweDhkLCAweDllLCAweDBjLCAweGVhLCAweDhjLCAweDcxLCAweDlhLCAweGMxLCB9LAorKyAgeyAweDdjLCAweDMzLCAweGMwLCAweGE0LCAweDAwLCAweDYyLCAweGVhLCAweDYwLCAweDY3LCAweGU0LCAweDIwLCAweGJjLAorKyAgICAweDViLCB9LAorKyAgeyAweGRiLCAweGIxLCAweGRjLCAweGZkLCAweDA4LCAweGMwLCAweGRlLCAweDgyLCAweGQxLCAweGRlLCAweDM4LCAweGMwLAorKyAgICAweDkwLCAweDQ4LCB9LAorKyAgeyAweDM3LCAweDE4LCAweDJlLCAweDBkLCAweDYxLCAweGFhLCAweDYxLCAweGQ3LCAweDg2LCAweDIwLCAweDE2LCAweDYwLAorKyAgICAweDA0LCAweGQ5LCAweGQ1LCB9LAorKyAgeyAweGIwLCAweGNmLCAweDJjLCAweDRjLCAweDVlLCAweDViLCAweDRmLCAweDJhLCAweDIzLCAweDI1LCAweDU4LCAweDQ3LAorKyAgICAweGU1LCAweDMxLCAweDA2LCAweDcwLCB9LAorKyAgeyAweDkxLCAweGEwLCAweGEzLCAweDg2LCAweDRlLCAweGUwLCAweDcyLCAweDM4LCAweDA2LCAweDY3LCAweDU5LCAweDVjLAorKyAgICAweDcwLCAweDI1LCAweGRiLCAweDMzLCAweDI3LCB9LAorKyAgeyAweDQ0LCAweDU4LCAweDY2LCAweGI4LCAweDU4LCAweGM3LCAweDEzLCAweGVkLCAweDRjLCAweGMwLCAweGY0LCAweDlhLAorKyAgICAweDFlLCAweDY3LCAweDc1LCAweDMzLCAweGI2LCAweGI4LCB9LAorKyAgeyAweDdmLCAweDk4LCAweDRhLCAweDhlLCAweDUwLCAweGEyLCAweDVjLCAweGNkLCAweDU5LCAweGRlLCAweDcyLCAweGIzLAorKyAgICAweDlkLCAweGMzLCAweDA5LCAweDhhLCAweGFiLCAweDU2LCAweGYxLCB9LAorKyAgeyAweDgwLCAweDk2LCAweDQ5LCAweDFhLCAweDU5LCAweGEyLCAweGM1LCAweGQ1LCAweGE3LCAweDIwLCAweDhhLCAweGI3LAorKyAgICAweDI3LCAweDYyLCAweDg0LCAweDQzLCAweGM2LCAweGUxLCAweDFiLCAweDVkLCB9LAorKyAgeyAweDZiLCAweGI3LCAweDJiLCAweDI2LCAweDYyLCAweDE0LCAweDcwLCAweDE5LCAweDNkLCAweDRkLCAweGFjLCAweGFjLAorKyAgICAweDYzLCAweDU4LCAweDVlLCAweDk0LCAweGI1LCAweGI3LCAweGU4LCAweGU4LCAweGEyLCB9LAorKyAgeyAweDIwLCAweGE4LCAweGMwLCAweGZkLCAweDYzLCAweDNkLCAweDZlLCAweDk4LCAweGNmLCAweDBjLCAweDQ5LCAweDk4LAorKyAgICAweGU0LCAweDVhLCAweGZlLCAweDhjLCAweGFhLCAweDcwLCAweDgyLCAweDFjLCAweDdiLCAweDc0LCB9LAorKyAgeyAweGM4LCAweGU4LCAweGRkLCAweGRmLCAweDY5LCAweDMwLCAweDAxLCAweGMyLCAweDBmLCAweDdlLCAweDJmLCAweDExLAorKyAgICAweGNjLCAweDNlLCAweDE3LCAweGE1LCAweDY5LCAweDQwLCAweDNmLCAweDBlLCAweDc5LCAweDdmLCAweGNmLCB9LAorKyAgeyAweGRiLCAweDYxLCAweGMwLCAweGUyLCAweDJlLCAweDQ5LCAweDA3LCAweDMxLCAweDFkLCAweDkxLCAweDQyLCAweDhhLAorKyAgICAweGZjLCAweDVlLCAweGQzLCAweGY4LCAweDU2LCAweDFmLCAweDJiLCAweDczLCAweGZkLCAweDlmLCAweGIyLCAweDhlLCB9LAorKyAgeyAweDBjLCAweDg5LCAweDU1LCAweDBjLCAweDFmLCAweDU5LCAweDJjLCAweDlkLCAweDFiLCAweDI5LCAweDFkLCAweDQxLAorKyAgICAweDFkLCAweGU2LCAweDQ3LCAweDhmLCAweDhjLCAweDJiLCAweGVhLCAweDhmLCAweGYwLCAweGZmLCAweDIxLCAweDcwLAorKyAgICAweDg4LCB9LAorKyAgeyAweDEyLCAweDE4LCAweDk1LCAweGE2LCAweDU5LCAweGIxLCAweDMxLCAweDI0LCAweDQ1LCAweDY3LCAweDU1LCAweGE0LAorKyAgICAweDFhLCAweDJkLCAweDQ4LCAweDY3LCAweDFiLCAweDQzLCAweDg4LCAweDJkLCAweDhlLCAweGEwLCAweDcwLCAweGIzLAorKyAgICAweGM2LCAweGJiLCB9LAorKyAgeyAweGU3LCAweGIxLCAweDFkLCAweGIyLCAweDc2LCAweDRkLCAweDY4LCAweDY4LCAweDY4LCAweDIzLCAweDAyLCAweDU1LAorKyAgICAweDNhLCAweGUyLCAweGU1LCAweGQ1LCAweDRiLCAweDQzLCAweGY5LCAweDM0LCAweDc3LCAweDVjLCAweGExLCAweGY1LAorKyAgICAweDU1LCAweGZkLCAweDRmLCB9LAorKyAgeyAweDhjLCAweDg3LCAweDVhLCAweDA4LCAweDNhLCAweDczLCAweGFkLCAweDYxLCAweGUxLCAweGU3LCAweDk5LCAweDdlLAorKyAgICAweGYwLCAweDVkLCAweGU5LCAweDVkLCAweDE2LCAweDQzLCAweDgwLCAweDJmLCAweGQwLCAweDY2LCAweDM0LCAweGUyLAorKyAgICAweDQyLCAweDY0LCAweDNiLCAweDFhLCB9LAorKyAgeyAweDM5LCAweGMxLCAweDk5LCAweGNmLCAweDIyLCAweGJmLCAweDE2LCAweDhmLCAweDlmLCAweDgwLCAweDdmLCAweDk1LAorKyAgICAweDBhLCAweDA1LCAweDY3LCAweDI3LCAweGU3LCAweDE1LCAweGRmLCAweDlkLCAweGIyLCAweGZlLCAweDFjLCAweGI1LAorKyAgICAweDFkLCAweDYwLCAweDhmLCAweDhhLCAweDFkLCB9LAorKyAgeyAweDliLCAweDZlLCAweDA4LCAweDA5LCAweDA2LCAweDczLCAweGFiLCAweDY4LCAweDAyLCAweDYyLCAweDFhLCAweGU0LAorKyAgICAweGQ0LCAweGRmLCAweGM3LCAweDAyLCAweDRjLCAweDZhLCAweDVmLCAweGZkLCAweDIzLCAweGFjLCAweGFlLCAweDZkLAorKyAgICAweDQzLCAweGE0LCAweDdhLCAweDUwLCAweDYwLCAweDNjLCB9LAorKyAgeyAweDFkLCAweGI0LCAweGM2LCAweGUxLCAweGIxLCAweDRiLCAweGUzLCAweGYyLCAweGUyLCAweDFhLCAweDczLCAweDFiLAorKyAgICAweGEwLCAweDkyLCAweGE3LCAweGY1LCAweGZmLCAweDhmLCAweDhiLCAweDVkLCAweGRmLCAweGE4LCAweDA0LCAweGIzLAorKyAgICAweGIwLCAweGY3LCAweGNjLCAweDEyLCAweGZhLCAweDM1LCAweDQ2LCB9LAorKyAgeyAweDQ5LCAweDQ1LCAweDk3LCAweDExLCAweDBmLCAweDFjLCAweDYwLCAweDhlLCAweGU4LCAweDQ3LCAweDMwLCAweGNmLAorKyAgICAweDYwLCAweGE4LCAweDcxLCAweGM1LCAweDFiLCAweGU5LCAweDM5LCAweDRkLCAweDQ5LCAweGI2LCAweDEyLCAweDFmLAorKyAgICAweDI0LCAweGFiLCAweDM3LCAweGZmLCAweDgzLCAweGMyLCAweGUxLCAweDNhLCB9LAorKyAgeyAweDYwLCB9LAorKyAgeyAweDI0LCAweDI2LCB9LAorKyAgeyAweDQ3LCAweGViLCAweGM5LCB9LAorKyAgeyAweDRhLCAweGQwLCAweGJjLCAweGYwLCB9LAorKyAgeyAweDhlLCAweDJiLCAweGM5LCAweDg1LCAweDNjLCB9LAorKyAgeyAweGEyLCAweDA3LCAweDE1LCAweGI4LCAweDEyLCAweDc0LCB9LAorKyAgeyAweDBmLCAweGRiLCAweDViLCAweDMzLCAweDY5LCAweGZlLCAweDRiLCB9LAorKyAgeyAweGEyLCAweDg2LCAweDU0LCAweGY0LCAweGZkLCAweGIyLCAweGQ0LCAweGU2LCB9LAorKyAgeyAweGJiLCAweDg0LCAweDc4LCAweDQ5LCAweDI3LCAweDhlLCAweDYxLCAweGRhLCAweDYwLCB9LAorKyAgeyAweDA0LCAweGMzLCAweGNkLCAweGFhLCAweDhmLCAweGE3LCAweDAzLCAweGM5LCAweGY5LCAweGI2LCB9LAorKyAgeyAweGY4LCAweDI3LCAweDFkLCAweDYxLCAweGRjLCAweDIxLCAweDQyLCAweGRkLCAweGFkLCAweDkyLCAweDQwLCB9LAorKyAgeyAweDEyLCAweDg3LCAweGRmLCAweGMyLCAweDQxLCAweDQ1LCAweDVhLCAweDM2LCAweDQ4LCAweDViLCAweDUxLCAweDJiLCB9LAorKyAgeyAweGJiLCAweDM3LCAweDVkLCAweDFmLCAweGYxLCAweDY4LCAweDdhLCAweGM0LCAweGE1LCAweGQyLCAweGE0LCAweDkxLAorKyAgICAweDhkLCB9LAorKyAgeyAweDViLCAweDI3LCAweGQxLCAweDA0LCAweDU0LCAweDUyLCAweDlmLCAweGEzLCAweDQ3LCAweDg2LCAweDMzLCAweDMzLAorKyAgICAweGJmLCAweGEwLCB9LAorKyAgeyAweGNmLCAweDA0LCAweGVhLCAweGY4LCAweDAzLCAweDJhLCAweDQzLCAweGZmLCAweGE2LCAweDY4LCAweDIxLCAweDRjLAorKyAgICAweGQ1LCAweDRiLCAweGVkLCB9LAorKyAgeyAweGFmLCAweGI4LCAweGJjLCAweDYzLCAweDBmLCAweDE4LCAweDRkLCAweGUyLCAweDdhLCAweGRkLCAweDQ2LCAweDQ0LAorKyAgICAweGM4LCAweDI0LCAweDBhLCAweGI3LCB9LAorKyAgeyAweDNlLCAweGRjLCAweDM2LCAweGU0LCAweDg5LCAweGIxLCAweGZhLCAweGM2LCAweDQwLCAweDkzLCAweDJlLCAweDc1LAorKyAgICAweGIyLCAweDE1LCAweGQxLCAweGIxLCAweDEwLCB9LAorKyAgeyAweDZjLCAweGQ4LCAweDIwLCAweDNiLCAweDgyLCAweDc5LCAweGY5LCAweGM4LCAweGJjLCAweDlkLCAweGUwLCAweDM1LAorKyAgICAweGJlLCAweDFiLCAweDQ5LCAweDFhLCAweGJjLCAweDNhLCB9LAorKyAgeyAweDc4LCAweDY1LCAweDJjLCAweGJlLCAweDM1LCAweDY3LCAweGRjLCAweDc4LCAweGQ0LCAweDQxLCAweGY2LCAweGM5LAorKyAgICAweGRlLCAweGRlLCAweDFmLCAweDE4LCAweDEzLCAweDMxLCAweDExLCB9LAorKyAgeyAweDhhLCAweDdmLCAweGIxLCAweDMzLCAweDhmLCAweDBjLCAweDNjLCAweDBhLCAweDA2LCAweDYxLCAweGYwLCAweDQ3LAorKyAgICAweDI5LCAweDFiLCAweDI5LCAweGJjLCAweDFjLCAweDQ3LCAweGVmLCAweDdhLCB9LAorKyAgeyAweDY1LCAweDkxLCAweGYxLCAweGU2LCAweGIzLCAweDk2LCAweGQzLCAweDhjLCAweGMyLCAweDRhLCAweDU5LCAweDM1LAorKyAgICAweDcyLCAweDhlLCAweDBiLCAweDlhLCAweDg3LCAweGNhLCAweDM0LCAweDdiLCAweDYzLCB9LAorKyAgeyAweDVmLCAweDA4LCAweDg3LCAweDgwLCAweDU2LCAweDI1LCAweDg5LCAweDc3LCAweDYxLCAweDhjLCAweDY0LCAweGExLAorKyAgICAweDU5LCAweDZkLCAweDU5LCAweDYyLCAweGU4LCAweDRhLCAweGM4LCAweDU4LCAweDk5LCAweGQxLCB9LAorKyAgeyAweDIzLCAweDg3LCAweDFkLCAweGVkLCAweDZmLCAweGYyLCAweDkxLCAweDkwLCAweGUyLCAweGZlLCAweDQzLCAweDIxLAorKyAgICAweGFmLCAweDk3LCAweGM2LCAweGJjLCAweGQ3LCAweDE1LCAweGM3LCAweDJkLCAweDA4LCAweDc3LCAweDkxLCB9LAorKyAgeyAweDkwLCAweDQ3LCAweDlhLCAweDllLCAweDNhLCAweGRmLCAweGYzLCAweGM5LCAweDRjLCAweDFlLCAweGE3LCAweGQ0LAorKyAgICAweDZhLCAweDMyLCAweDkwLCAweGZlLCAweGI3LCAweGI2LCAweDdiLCAweGZhLCAweDk2LCAweDYxLCAweGZiLCAweGE0LCB9LAorKyAgeyAweGIxLCAweDY3LCAweDYwLCAweDQ1LCAweGIwLCAweDk2LCAweGM1LCAweDE1LCAweDlmLCAweDRkLCAweDI2LCAweGQ3LAorKyAgICAweDlkLCAweGYxLCAweGY1LCAweDZkLCAweDIxLCAweDAwLCAweDk0LCAweDMxLCAweDY0LCAweDk0LCAweGQzLCAweGE3LAorKyAgICAweGQzLCB9LAorKyAgeyAweDAyLCAweDNlLCAweGFmLCAweGYzLCAweDc5LCAweDczLCAweGE1LCAweGY1LCAweGNjLCAweDdhLCAweDdmLCAweGZiLAorKyAgICAweDc5LCAweDJiLCAweDg1LCAweDhjLCAweDg4LCAweDcyLCAweDA2LCAweGJlLCAweGZlLCAweGFmLCAweGMxLCAweDE2LAorKyAgICAweGE2LCAweGQ2LCB9LAorKyAgeyAweDJhLCAweGIwLCAweDFhLCAweGU1LCAweGFhLCAweDZlLCAweGIzLCAweGFlLCAweDUzLCAweDg1LCAweDMzLCAweDgwLAorKyAgICAweDc1LCAweGFlLCAweDMwLCAweGU2LCAweGI4LCAweDcyLCAweDQyLCAweGY2LCAweDI1LCAweDRmLCAweDM4LCAweDg4LAorKyAgICAweDU1LCAweGQxLCAweGE5LCB9LAorKyAgeyAweDkwLCAweGQ4LCAweDBjLCAweGMwLCAweDkzLCAweDRiLCAweDRmLCAweDllLCAweDY1LCAweDZjLCAweGExLCAweDU0LAorKyAgICAweGE2LCAweGY2LCAweDZlLCAweGNhLCAweGQyLCAweGJiLCAweDdlLCAweDZhLCAweDFjLCAweGQzLCAweGNlLCAweDQ2LAorKyAgICAweGVmLCAweGIwLCAweDAwLCAweDhkLCB9LAorKyAgeyAweGVkLCAweDljLCAweDQ5LCAweGNkLCAweGMyLCAweGRlLCAweDM4LCAweDBlLCAweGU5LCAweDk4LCAweDZjLCAweGM4LAorKyAgICAweDkwLCAweDllLCAweDNjLCAweGQ0LCAweGQzLCAweGViLCAweDg4LCAweDMyLCAweGM3LCAweDI4LCAweGUzLCAweDk0LAorKyAgICAweDFjLCAweDlmLCAweDhiLCAweGYzLCAweGNiLCB9LAorKyAgeyAweGFjLCAweGU3LCAweDkyLCAweDE2LCAweGI0LCAweDE0LCAweGEwLCAweGU0LCAweDA0LCAweDc5LCAweGEyLCAweGY0LAorKyAgICAweDMxLCAweGU2LCAweDBjLCAweDI2LCAweGRjLCAweGJmLCAweDJmLCAweDY5LCAweDFiLCAweDU1LCAweDk0LCAweDY3LAorKyAgICAweGRhLCAweDBjLCAweGQ3LCAweDMyLCAweDFmLCAweGVmLCB9LAorKyAgeyAweDY4LCAweDYzLCAweDg1LCAweDU3LCAweDk1LCAweDllLCAweDQyLCAweDI3LCAweDQxLCAweDQzLCAweDQyLCAweDAyLAorKyAgICAweGE1LCAweDc4LCAweGE3LCAweGM2LCAweDQzLCAweGMxLCAweDZhLCAweGJhLCAweDcwLCAweDgwLCAweGNkLCAweDA0LAorKyAgICAweGI2LCAweDc4LCAweDc2LCAweDI5LCAweGYzLCAweGU4LCAweGEwLCB9LAorKyAgeyAweGU2LCAweGFjLCAweDhkLCAweDlkLCAweGYwLCAweGMwLCAweGY3LCAweGY3LCAweGUzLCAweDNlLCAweDRlLCAweDI4LAorKyAgICAweDBmLCAweDU5LCAweGIyLCAweDY3LCAweDllLCAweDg0LCAweDM0LCAweDQyLCAweDk2LCAweDMwLCAweDJiLCAweGNhLAorKyAgICAweDQ5LCAweGI2LCAweGM1LCAweDlhLCAweDg0LCAweDU5LCAweGE3LCAweDgxLCB9LAorKyAgeyAweDdlLCB9LAorKyAgeyAweDFlLCAweDIxLCB9LAorKyAgeyAweDI2LCAweGQzLCAweGRkLCB9LAorKyAgeyAweDJjLCAweGQ0LCAweGIzLCAweDNkLCB9LAorKyAgeyAweDg2LCAweDdiLCAweDc2LCAweDNjLCAweGYwLCB9LAorKyAgeyAweDEyLCAweGMzLCAweDcwLCAweDFkLCAweDU1LCAweDE4LCB9LAorKyAgeyAweDk2LCAweGMyLCAweGJkLCAweDYxLCAweDU1LCAweGY0LCAweDI0LCB9LAorKyAgeyAweDIwLCAweDUxLCAweGY3LCAweDg2LCAweDU4LCAweDhmLCAweDA3LCAweDJhLCB9LAorKyAgeyAweDkzLCAweDE1LCAweGE4LCAweDFkLCAweGRhLCAweDk3LCAweGVlLCAweDBlLCAweDZjLCB9LAorKyAgeyAweDM5LCAweDkzLCAweGRmLCAweGQ1LCAweDBlLCAweGNhLCAweGRjLCAweDdhLCAweDkyLCAweGNlLCB9LAorKyAgeyAweDYwLCAweGQ1LCAweGZkLCAweGY1LCAweDFiLCAweDI2LCAweDgyLCAweDI2LCAweDczLCAweDAyLCAweGJjLCB9LAorKyAgeyAweDk4LCAweGYyLCAweDM0LCAweGUxLCAweGY1LCAweGZiLCAweDAwLCAweGFjLCAweDEwLCAweDRhLCAweDM4LCAweDlmLCB9LAorKyAgeyAweGRhLCAweDNhLCAweDkyLCAweDhhLCAweGQwLCAweGNkLCAweDEyLCAweGNkLCAweDE1LCAweGJiLCAweGFiLCAweDc3LAorKyAgICAweDY2LCB9LAorKyAgeyAweGEyLCAweDkyLCAweDFhLCAweGU1LCAweGNhLCAweDBjLCAweDMwLCAweDc1LCAweGViLCAweGFmLCAweDAwLCAweDMxLAorKyAgICAweDU1LCAweDY2LCB9LAorKyAgeyAweDA2LCAweGVhLCAweGZkLCAweDNlLCAweDg2LCAweDM4LCAweDYyLCAweDRlLCAweGE5LCAweDEyLCAweGE0LCAweDEyLAorKyAgICAweDQzLCAweGJmLCAweGExLCB9LAorKyAgeyAweGU0LCAweDcxLCAweDdiLCAweDk0LCAweGRiLCAweGEwLCAweGQyLCAweGZmLCAweDliLCAweGViLCAweGFkLCAweDhlLAorKyAgICAweDk1LCAweDhhLCAweGM1LCAweGVkLCB9LAorKyAgeyAweDI1LCAweDVhLCAweDc3LCAweDcxLCAweDQxLCAweDBlLCAweDdhLCAweGU5LCAweGVkLCAweDBjLCAweDEwLCAweGVmLAorKyAgICAweGY2LCAweDJiLCAweDNhLCAweGJhLCAweDYwLCB9LAorKyAgeyAweGVlLCAweGUyLCAweGEzLCAweDY3LCAweDY0LCAweDFkLCAweGM2LCAweDA0LCAweGM0LCAweGUxLCAweDY4LCAweGQyLAorKyAgICAweDZlLCAweGQyLCAweDkxLCAweDc1LCAweDUzLCAweDA3LCB9LAorKyAgeyAweGUwLCAweGY2LCAweDRkLCAweDhmLCAweDY4LCAweGZjLCAweDA2LCAweDdlLCAweDE4LCAweDc5LCAweDdmLCAweDJiLAorKyAgICAweDZkLCAweGVmLCAweDQ2LCAweDdmLCAweGFiLCAweGIyLCAweGFkLCB9LAorKyAgeyAweDNkLCAweDM1LCAweDg4LCAweDlmLCAweDJlLCAweGNmLCAweDk2LCAweDQ1LCAweDA3LCAweDYwLCAweDcxLCAweDk0LAorKyAgICAweDAwLCAweDhkLCAweGJmLCAweGY0LCAweGVmLCAweDQ2LCAweDJlLCAweDNjLCB9LAorKyAgeyAweDQzLCAweGNmLCAweDk4LCAweGY3LCAweDJkLCAweGY0LCAweDE3LCAweGU3LCAweDhjLCAweDA1LCAweDJkLCAweDliLAorKyAgICAweDI0LCAweGZiLCAweDRkLCAweGVhLCAweDRhLCAweGVjLCAweDAxLCAweDI1LCAweDI5LCB9LAorKyAgeyAweDhlLCAweDczLCAweDlhLCAweDc4LCAweDExLCAweGZlLCAweDQ4LCAweGEwLCAweDNiLCAweDFhLCAweDI2LCAweGRmLAorKyAgICAweDI1LCAweGU5LCAweDU5LCAweDFjLCAweDcwLCAweDA3LCAweDlmLCAweGRjLCAweGEwLCAweGE2LCB9LAorKyAgeyAweGU4LCAweDQ3LCAweDcxLCAweGM3LCAweDNlLCAweGRmLCAweGI1LCAweDEzLCAweGI5LCAweDg1LCAweDEzLCAweGE4LAorKyAgICAweDU0LCAweDQ3LCAweDZlLCAweDU5LCAweDk2LCAweDA5LCAweDEzLCAweDVmLCAweDgyLCAweDE2LCAweDBiLCB9LAorKyAgeyAweGZiLCAweGMwLCAweDhjLCAweDAzLCAweDIxLCAweGIzLCAweGM0LCAweGI1LCAweDQzLCAweDMyLCAweDZjLCAweGVhLAorKyAgICAweDdmLCAweGE4LCAweDQzLCAweDkxLCAweGU4LCAweDRlLCAweDNmLCAweGJmLCAweDQ1LCAweDU4LCAweDZhLCAweGEzLCB9LAorKyAgeyAweDU1LCAweGY4LCAweGYzLCAweDAwLCAweDc2LCAweDA5LCAweGVmLCAweDY5LCAweDVkLCAweGQyLCAweDhhLCAweGYyLAorKyAgICAweDY1LCAweGMzLCAweGNiLCAweDliLCAweDQzLCAweGZkLCAweGIxLCAweDdlLCAweDdmLCAweGExLCAweDk0LCAweGIwLAorKyAgICAweGQ3LCB9LAorKyAgeyAweGFhLCAweDEzLCAweGMxLCAweDUxLCAweDQwLCAweDZkLCAweDhkLCAweDRjLCAweDBhLCAweDk1LCAweDY0LCAweDdiLAorKyAgICAweGQxLCAweDk2LCAweGI2LCAweDU2LCAweGI0LCAweDViLCAweGNmLCAweGQ2LCAweGQ5LCAweDE1LCAweDk3LCAweGRkLAorKyAgICAweGI2LCAweGVmLCB9LAorKyAgeyAweGFmLCAweGI3LCAweDM2LCAweGIwLCAweDA0LCAweGRiLCAweGQ3LCAweDljLCAweDlhLCAweDQ0LCAweGM0LCAweGY2LAorKyAgICAweDFmLCAweDEyLCAweDIxLCAweDJkLCAweDU5LCAweDMwLCAweDU0LCAweGFiLCAweDI3LCAweDYxLCAweGEzLCAweDU3LAorKyAgICAweGVmLCAweGY4LCAweDUzLCB9LAorKyAgeyAweDk3LCAweDM0LCAweDQ1LCAweDNlLCAweGNlLCAweDdjLCAweDM1LCAweGEyLCAweGRhLCAweDlmLCAweDRiLCAweDQ2LAorKyAgICAweDZjLCAweDExLCAweDY3LCAweGZmLCAweDJmLCAweDc2LCAweDU4LCAweDE1LCAweDcxLCAweGZhLCAweDQ0LCAweDg5LAorKyAgICAweDg5LCAweGZkLCAweGY3LCAweDk5LCB9LAorKyAgeyAweDFmLCAweGIxLCAweDYyLCAweGViLCAweDgzLCAweGM1LCAweDljLCAweDg5LCAweGY5LCAweDJjLCAweGQyLCAweDAzLAorKyAgICAweDYxLCAweGJjLCAweGJiLCAweGE1LCAweDc0LCAweDBlLCAweDliLCAweDdlLCAweDgyLCAweDNlLCAweDcwLCAweDBhLAorKyAgICAweGE5LCAweDhmLCAweDJiLCAweDU5LCAweGZiLCB9LAorKyAgeyAweGY4LCAweGNhLCAweDVlLCAweDNhLCAweDRmLCAweDllLCAweDEwLCAweDY5LCAweDEwLCAweGQ1LCAweDRjLCAweGViLAorKyAgICAweDFhLCAweDBmLCAweDNjLCAweDZhLCAweDk4LCAweGY1LCAweGIwLCAweDk3LCAweDViLCAweDM3LCAweDJmLCAweDBkLAorKyAgICAweGJkLCAweDQyLCAweDRiLCAweDY5LCAweGExLCAweDgyLCB9LAorKyAgeyAweDEyLCAweDhjLCAweDZkLCAweDUyLCAweDA4LCAweGVmLCAweDc0LCAweGIyLCAweGU2LCAweGFhLCAweGQzLCAweGIwLAorKyAgICAweDI2LCAweGIwLCAweGQ5LCAweDk0LCAweGI2LCAweDExLCAweDQ1LCAweDBlLCAweDM2LCAweDcxLCAweDE0LCAweDJkLAorKyAgICAweDQxLCAweDhjLCAweDIxLCAweDUzLCAweDMxLCAweGU5LCAweDY4LCB9LAorKyAgeyAweGVlLCAweGVhLCAweDBkLCAweDg5LCAweDQ3LCAweDdlLCAweDcyLCAweGQxLCAweGQ4LCAweGNlLCAweDU4LCAweDRjLAorKyAgICAweDk0LCAweDFmLCAweDBkLCAweDUxLCAweDA4LCAweGEzLCAweGI2LCAweDNkLCAweGU3LCAweDgyLCAweDQ2LCAweDkyLAorKyAgICAweGQ2LCAweDk4LCAweDZiLCAweDA3LCAweDEwLCAweDY1LCAweDUyLCAweDY1LCB9LAorK307CisrCisrc3RhdGljIGNvbnN0IHU4IGJsYWtlMnNfaG1hY190ZXN0dmVjc1tdW0JMQUtFMlNfSEFTSF9TSVpFXSBfX2luaXRjb25zdCA9IHsKKysgIHsgMHhjZSwgMHhlMSwgMHg1NywgMHg2OSwgMHg4MiwgMHhkYywgMHhiZiwgMHg0MywgMHhhZCwgMHg1NiwgMHg0YywgMHg3MCwKKysgICAgMHhlZCwgMHg2OCwgMHgxNiwgMHg5NiwgMHhjZiwgMHhhNCwgMHg3MywgMHhlOCwgMHhlOCwgMHhmYywgMHgzMiwgMHg3OSwKKysgICAgMHgwOCwgMHgwYSwgMHg3NSwgMHg4MiwgMHhkYSwgMHgzZiwgMHgwNSwgMHgxMSwgfSwKKysgIHsgMHg3NywgMHgyZiwgMHgwYywgMHg3MSwgMHg0MSwgMHhmNCwgMHg0YiwgMHgyYiwgMHhiMywgMHhjNiwgMHhiNiwgMHhmOSwKKysgICAgMHg2MCwgMHhkZSwgMHhlNCwgMHg1MiwgMHgzOCwgMHg2NiwgMHhlOCwgMHhiZiwgMHg5YiwgMHg5NiwgMHhjNCwgMHg5ZiwKKysgICAgMHg2MCwgMHhkOSwgMHgyNCwgMHgzNywgMHg5OSwgMHhkNiwgMHhlYywgMHgzMSwgfSwKKyt9OworKworK2Jvb2wgX19pbml0IGJsYWtlMnNfc2VsZnRlc3Qodm9pZCkKKyt7CisrCXU4IGtleVtCTEFLRTJTX0tFWV9TSVpFXTsKKysJdTggYnVmW0FSUkFZX1NJWkUoYmxha2Uyc190ZXN0dmVjcyldOworKwl1OCBoYXNoW0JMQUtFMlNfSEFTSF9TSVpFXTsKKysJc3RydWN0IGJsYWtlMnNfc3RhdGUgc3RhdGU7CisrCWJvb2wgc3VjY2VzcyA9IHRydWU7CisrCWludCBpLCBsOworKworKwlrZXlbMF0gPSBrZXlbMV0gPSAxOworKwlmb3IgKGkgPSAyOyBpIDwgc2l6ZW9mKGtleSk7ICsraSkKKysJCWtleVtpXSA9IGtleVtpIC0gMl0gKyBrZXlbaSAtIDFdOworKworKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGJ1Zik7ICsraSkKKysJCWJ1ZltpXSA9ICh1OClpOworKworKwlmb3IgKGkgPSBsID0gMDsgaSA8IEFSUkFZX1NJWkUoYmxha2Uyc190ZXN0dmVjcyk7IGwgPSAobCArIDM3KSAlICsraSkgeworKwkJaW50IG91dGxlbiA9IDEgKyBpICUgQkxBS0UyU19IQVNIX1NJWkU7CisrCQlpbnQga2V5bGVuID0gKDEzICogaSkgJSAoQkxBS0UyU19LRVlfU0laRSArIDEpOworKworKwkJYmxha2UycyhoYXNoLCBidWYsIGtleSArIEJMQUtFMlNfS0VZX1NJWkUgLSBrZXlsZW4sIG91dGxlbiwgaSwKKysJCQlrZXlsZW4pOworKwkJaWYgKG1lbWNtcChoYXNoLCBibGFrZTJzX3Rlc3R2ZWNzW2ldLCBvdXRsZW4pKSB7CisrCQkJcHJfZXJyKCJibGFrZTJzIHNlbGYtdGVzdCAlZDogRkFJTFxuIiwgaSArIDEpOworKwkJCXN1Y2Nlc3MgPSBmYWxzZTsKKysJCX0KKysKKysJCWlmICgha2V5bGVuKQorKwkJCWJsYWtlMnNfaW5pdCgmc3RhdGUsIG91dGxlbik7CisrCQllbHNlCisrCQkJYmxha2Uyc19pbml0X2tleSgmc3RhdGUsIG91dGxlbiwKKysJCQkJCSBrZXkgKyBCTEFLRTJTX0tFWV9TSVpFIC0ga2V5bGVuLAorKwkJCQkJIGtleWxlbik7CisrCisrCQlibGFrZTJzX3VwZGF0ZSgmc3RhdGUsIGJ1ZiwgbCk7CisrCQlibGFrZTJzX3VwZGF0ZSgmc3RhdGUsIGJ1ZiArIGwsIGkgLSBsKTsKKysJCWJsYWtlMnNfZmluYWwoJnN0YXRlLCBoYXNoKTsKKysJCWlmIChtZW1jbXAoaGFzaCwgYmxha2Uyc190ZXN0dmVjc1tpXSwgb3V0bGVuKSkgeworKwkJCXByX2VycigiYmxha2UycyBpbml0L3VwZGF0ZS9maW5hbCBzZWxmLXRlc3QgJWQ6IEZBSUxcbiIsCisrCQkJICAgICAgIGkgKyAxKTsKKysJCQlzdWNjZXNzID0gZmFsc2U7CisrCQl9CisrCX0KKysKKysJaWYgKHN1Y2Nlc3MpIHsKKysJCWJsYWtlMnMyNTZfaG1hYyhoYXNoLCBidWYsIGtleSwgc2l6ZW9mKGJ1ZiksIHNpemVvZihrZXkpKTsKKysJCXN1Y2Nlc3MgJj0gIW1lbWNtcChoYXNoLCBibGFrZTJzX2htYWNfdGVzdHZlY3NbMF0sIEJMQUtFMlNfSEFTSF9TSVpFKTsKKysKKysJCWJsYWtlMnMyNTZfaG1hYyhoYXNoLCBrZXksIGJ1Ziwgc2l6ZW9mKGtleSksIHNpemVvZihidWYpKTsKKysJCXN1Y2Nlc3MgJj0gIW1lbWNtcChoYXNoLCBibGFrZTJzX2htYWNfdGVzdHZlY3NbMV0sIEJMQUtFMlNfSEFTSF9TSVpFKTsKKysKKysJCWlmICghc3VjY2VzcykKKysJCQlwcl9lcnIoImJsYWtlMnMyNTZfaG1hYyBzZWxmLXRlc3Q6IEZBSUxcbiIpOworKwl9CisrCisrCXJldHVybiBzdWNjZXNzOworK30KKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYi9jcnlwdG8vYmxha2Uycy5jCitAQCAtMCwwICsxLDEyNiBAQAorKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVAorKy8qCisrICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKyAqCisrICogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQkxBS0UycyBoYXNoIGFuZCBQUkYgZnVuY3Rpb25zLgorKyAqCisrICogSW5mb3JtYXRpb246IGh0dHBzOi8vYmxha2UyLm5ldC8KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvYmxha2Uycy5oPgorKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKysjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisrI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisrI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgorKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisrCisrYm9vbCBibGFrZTJzX3NlbGZ0ZXN0KHZvaWQpOworKworK3ZvaWQgYmxha2Uyc191cGRhdGUoc3RydWN0IGJsYWtlMnNfc3RhdGUgKnN0YXRlLCBjb25zdCB1OCAqaW4sIHNpemVfdCBpbmxlbikKKyt7CisrCWNvbnN0IHNpemVfdCBmaWxsID0gQkxBS0UyU19CTE9DS19TSVpFIC0gc3RhdGUtPmJ1ZmxlbjsKKysKKysJaWYgKHVubGlrZWx5KCFpbmxlbikpCisrCQlyZXR1cm47CisrCWlmIChpbmxlbiA+IGZpbGwpIHsKKysJCW1lbWNweShzdGF0ZS0+YnVmICsgc3RhdGUtPmJ1ZmxlbiwgaW4sIGZpbGwpOworKwkJaWYgKElTX0VOQUJMRUQoQ09ORklHX0NSWVBUT19BUkNIX0hBVkVfTElCX0JMQUtFMlMpKQorKwkJCWJsYWtlMnNfY29tcHJlc3NfYXJjaChzdGF0ZSwgc3RhdGUtPmJ1ZiwgMSwKKysJCQkJCSAgICAgIEJMQUtFMlNfQkxPQ0tfU0laRSk7CisrCQllbHNlCisrCQkJYmxha2Uyc19jb21wcmVzc19nZW5lcmljKHN0YXRlLCBzdGF0ZS0+YnVmLCAxLAorKwkJCQkJCSBCTEFLRTJTX0JMT0NLX1NJWkUpOworKwkJc3RhdGUtPmJ1ZmxlbiA9IDA7CisrCQlpbiArPSBmaWxsOworKwkJaW5sZW4gLT0gZmlsbDsKKysJfQorKwlpZiAoaW5sZW4gPiBCTEFLRTJTX0JMT0NLX1NJWkUpIHsKKysJCWNvbnN0IHNpemVfdCBuYmxvY2tzID0gRElWX1JPVU5EX1VQKGlubGVuLCBCTEFLRTJTX0JMT0NLX1NJWkUpOworKwkJLyogSGFzaCBvbmUgbGVzcyAoZnVsbCkgYmxvY2sgdGhhbiBzdHJpY3RseSBwb3NzaWJsZSAqLworKwkJaWYgKElTX0VOQUJMRUQoQ09ORklHX0NSWVBUT19BUkNIX0hBVkVfTElCX0JMQUtFMlMpKQorKwkJCWJsYWtlMnNfY29tcHJlc3NfYXJjaChzdGF0ZSwgaW4sIG5ibG9ja3MgLSAxLAorKwkJCQkJICAgICAgQkxBS0UyU19CTE9DS19TSVpFKTsKKysJCWVsc2UKKysJCQlibGFrZTJzX2NvbXByZXNzX2dlbmVyaWMoc3RhdGUsIGluLCBuYmxvY2tzIC0gMSwKKysJCQkJCQkgQkxBS0UyU19CTE9DS19TSVpFKTsKKysJCWluICs9IEJMQUtFMlNfQkxPQ0tfU0laRSAqIChuYmxvY2tzIC0gMSk7CisrCQlpbmxlbiAtPSBCTEFLRTJTX0JMT0NLX1NJWkUgKiAobmJsb2NrcyAtIDEpOworKwl9CisrCW1lbWNweShzdGF0ZS0+YnVmICsgc3RhdGUtPmJ1ZmxlbiwgaW4sIGlubGVuKTsKKysJc3RhdGUtPmJ1ZmxlbiArPSBpbmxlbjsKKyt9CisrRVhQT1JUX1NZTUJPTChibGFrZTJzX3VwZGF0ZSk7CisrCisrdm9pZCBibGFrZTJzX2ZpbmFsKHN0cnVjdCBibGFrZTJzX3N0YXRlICpzdGF0ZSwgdTggKm91dCkKKyt7CisrCVdBUk5fT04oSVNfRU5BQkxFRChERUJVRykgJiYgIW91dCk7CisrCWJsYWtlMnNfc2V0X2xhc3RibG9jayhzdGF0ZSk7CisrCW1lbXNldChzdGF0ZS0+YnVmICsgc3RhdGUtPmJ1ZmxlbiwgMCwKKysJICAgICAgIEJMQUtFMlNfQkxPQ0tfU0laRSAtIHN0YXRlLT5idWZsZW4pOyAvKiBQYWRkaW5nICovCisrCWlmIChJU19FTkFCTEVEKENPTkZJR19DUllQVE9fQVJDSF9IQVZFX0xJQl9CTEFLRTJTKSkKKysJCWJsYWtlMnNfY29tcHJlc3NfYXJjaChzdGF0ZSwgc3RhdGUtPmJ1ZiwgMSwgc3RhdGUtPmJ1Zmxlbik7CisrCWVsc2UKKysJCWJsYWtlMnNfY29tcHJlc3NfZ2VuZXJpYyhzdGF0ZSwgc3RhdGUtPmJ1ZiwgMSwgc3RhdGUtPmJ1Zmxlbik7CisrCWNwdV90b19sZTMyX2FycmF5KHN0YXRlLT5oLCBBUlJBWV9TSVpFKHN0YXRlLT5oKSk7CisrCW1lbWNweShvdXQsIHN0YXRlLT5oLCBzdGF0ZS0+b3V0bGVuKTsKKysJbWVtemVyb19leHBsaWNpdChzdGF0ZSwgc2l6ZW9mKCpzdGF0ZSkpOworK30KKytFWFBPUlRfU1lNQk9MKGJsYWtlMnNfZmluYWwpOworKworK3ZvaWQgYmxha2UyczI1Nl9obWFjKHU4ICpvdXQsIGNvbnN0IHU4ICppbiwgY29uc3QgdTggKmtleSwgY29uc3Qgc2l6ZV90IGlubGVuLAorKwkJICAgICBjb25zdCBzaXplX3Qga2V5bGVuKQorK3sKKysJc3RydWN0IGJsYWtlMnNfc3RhdGUgc3RhdGU7CisrCXU4IHhfa2V5W0JMQUtFMlNfQkxPQ0tfU0laRV0gX19hbGlnbmVkKF9fYWxpZ25vZl9fKHUzMikpID0geyAwIH07CisrCXU4IGlfaGFzaFtCTEFLRTJTX0hBU0hfU0laRV0gX19hbGlnbmVkKF9fYWxpZ25vZl9fKHUzMikpOworKwlpbnQgaTsKKysKKysJaWYgKGtleWxlbiA+IEJMQUtFMlNfQkxPQ0tfU0laRSkgeworKwkJYmxha2Uyc19pbml0KCZzdGF0ZSwgQkxBS0UyU19IQVNIX1NJWkUpOworKwkJYmxha2Uyc191cGRhdGUoJnN0YXRlLCBrZXksIGtleWxlbik7CisrCQlibGFrZTJzX2ZpbmFsKCZzdGF0ZSwgeF9rZXkpOworKwl9IGVsc2UKKysJCW1lbWNweSh4X2tleSwga2V5LCBrZXlsZW4pOworKworKwlmb3IgKGkgPSAwOyBpIDwgQkxBS0UyU19CTE9DS19TSVpFOyArK2kpCisrCQl4X2tleVtpXSBePSAweDM2OworKworKwlibGFrZTJzX2luaXQoJnN0YXRlLCBCTEFLRTJTX0hBU0hfU0laRSk7CisrCWJsYWtlMnNfdXBkYXRlKCZzdGF0ZSwgeF9rZXksIEJMQUtFMlNfQkxPQ0tfU0laRSk7CisrCWJsYWtlMnNfdXBkYXRlKCZzdGF0ZSwgaW4sIGlubGVuKTsKKysJYmxha2Uyc19maW5hbCgmc3RhdGUsIGlfaGFzaCk7CisrCisrCWZvciAoaSA9IDA7IGkgPCBCTEFLRTJTX0JMT0NLX1NJWkU7ICsraSkKKysJCXhfa2V5W2ldIF49IDB4NWMgXiAweDM2OworKworKwlibGFrZTJzX2luaXQoJnN0YXRlLCBCTEFLRTJTX0hBU0hfU0laRSk7CisrCWJsYWtlMnNfdXBkYXRlKCZzdGF0ZSwgeF9rZXksIEJMQUtFMlNfQkxPQ0tfU0laRSk7CisrCWJsYWtlMnNfdXBkYXRlKCZzdGF0ZSwgaV9oYXNoLCBCTEFLRTJTX0hBU0hfU0laRSk7CisrCWJsYWtlMnNfZmluYWwoJnN0YXRlLCBpX2hhc2gpOworKworKwltZW1jcHkob3V0LCBpX2hhc2gsIEJMQUtFMlNfSEFTSF9TSVpFKTsKKysJbWVtemVyb19leHBsaWNpdCh4X2tleSwgQkxBS0UyU19CTE9DS19TSVpFKTsKKysJbWVtemVyb19leHBsaWNpdChpX2hhc2gsIEJMQUtFMlNfSEFTSF9TSVpFKTsKKyt9CisrRVhQT1JUX1NZTUJPTChibGFrZTJzMjU2X2htYWMpOworKworK3N0YXRpYyBpbnQgX19pbml0IG1vZF9pbml0KHZvaWQpCisreworKwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0NSWVBUT19NQU5BR0VSX0RJU0FCTEVfVEVTVFMpICYmCisrCSAgICBXQVJOX09OKCFibGFrZTJzX3NlbGZ0ZXN0KCkpKQorKwkJcmV0dXJuIC1FTk9ERVY7CisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgdm9pZCBfX2V4aXQgbW9kX2V4aXQodm9pZCkKKyt7CisrfQorKworK21vZHVsZV9pbml0KG1vZF9pbml0KTsKKyttb2R1bGVfZXhpdChtb2RfZXhpdCk7CisrTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworK01PRFVMRV9ERVNDUklQVElPTigiQkxBS0UycyBoYXNoIGZ1bmN0aW9uIik7CisrTU9EVUxFX0FVVEhPUigiSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+Iik7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDIyLWNyeXB0by10ZXN0bWdyLWFkZC10ZXN0LWNhc2VzLWZvci1CbGFrZTJzLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAyMi1jcnlwdG8tdGVzdG1nci1hZGQtdGVzdC1jYXNlcy1mb3ItQmxha2Uycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWRjNzVlCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAyMi1jcnlwdG8tdGVzdG1nci1hZGQtdGVzdC1jYXNlcy1mb3ItQmxha2Uycy5wYXRjaApAQCAtMCwwICsxLDMyMiBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQXJkIEJpZXNoZXV2ZWwgPGFyZGJAa2VybmVsLm9yZz4KK0RhdGU6IEZyaSwgOCBOb3YgMjAxOSAxMzoyMjoyOSArMDEwMAorU3ViamVjdDogW1BBVENIXSBjcnlwdG86IHRlc3RtZ3IgLSBhZGQgdGVzdCBjYXNlcyBmb3IgQmxha2UycworCitjb21taXQgMTdlMWRmNjcwMjNhNWM5Y2NhZWI1ZGU4YmY1Yjg4ZjYzMTI3ZWNmNyB1cHN0cmVhbS4KKworQXMgc3VnZ2VzdGVkIGJ5IEVyaWMgZm9yIHRoZSBCbGFrZTJiIGltcGxlbWVudGF0aW9uIGNvbnRyaWJ1dGVkIGJ5CitEYXZpZCwgaW50cm9kdWNlIGEgc2V0IG9mIHRlc3QgdmVjdG9ycyBmb3IgQmxha2UycyBjb3ZlcmluZyBkaWZmZXJlbnQKK2RpZ2VzdCBhbmQga2V5IHNpemVzLgorCisgICAgICAgICAgYmxha2Uycy0xMjggIGJsYWtlMnMtMTYwICBibGFrZTJzLTIyNCAgYmxha2Uycy0yNTYKKyAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbGVuPTAgICB8IGtsZW49MCAgICAgICBrbGVuPTEgICAgICAga2xlbj0xNiAgICAgIGtsZW49MzIKK2xlbj0xICAgfCBrbGVuPTE2ICAgICAga2xlbj0zMiAgICAgIGtsZW49MCAgICAgICBrbGVuPTEKK2xlbj03ICAgfCBrbGVuPTMyICAgICAga2xlbj0wICAgICAgIGtsZW49MSAgICAgICBrbGVuPTE2CitsZW49MTUgIHwga2xlbj0xICAgICAgIGtsZW49MTYgICAgICBrbGVuPTMyICAgICAga2xlbj0wCitsZW49NjQgIHwga2xlbj0wICAgICAgIGtsZW49MSAgICAgICBrbGVuPTE2ICAgICAga2xlbj0zMgorbGVuPTI0NyB8IGtsZW49MTYgICAgICBrbGVuPTMyICAgICAga2xlbj0wICAgICAgIGtsZW49MQorbGVuPTI1NiB8IGtsZW49MzIgICAgICBrbGVuPTAgICAgICAga2xlbj0xICAgICAgIGtsZW49MTYKKworQ2M6IERhdmlkIFN0ZXJiYSA8ZHN0ZXJiYUBzdXNlLmNvbT4KK0NjOiBFcmljIEJpZ2dlcnMgPGViaWdnZXJzQGdvb2dsZS5jb20+CitTaWduZWQtb2ZmLWJ5OiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgorU2lnbmVkLW9mZi1ieTogSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBjcnlwdG8vdGVzdG1nci5jIHwgIDI0ICsrKysrCisgY3J5cHRvL3Rlc3RtZ3IuaCB8IDI1MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMjc1IGluc2VydGlvbnMoKykKKworLS0tIGEvY3J5cHRvL3Rlc3RtZ3IuYworKysrIGIvY3J5cHRvL3Rlc3RtZ3IuYworQEAgLTQwMzUsNiArNDAzNSwzMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFsZ190ZXN0X2Rlc2MgYWxnX3RlCisgCQkudGVzdCA9IGFsZ190ZXN0X251bGwsCisgCQkuZmlwc19hbGxvd2VkID0gMSwKKyAJfSwgeworKwkJLmFsZyA9ICJibGFrZTJzLTEyOCIsCisrCQkudGVzdCA9IGFsZ190ZXN0X2hhc2gsCisrCQkuc3VpdGUgPSB7CisrCQkJLmhhc2ggPSBfX1ZFQ1MoYmxha2VzMnNfMTI4X3R2X3RlbXBsYXRlKQorKwkJfQorKwl9LCB7CisrCQkuYWxnID0gImJsYWtlMnMtMTYwIiwKKysJCS50ZXN0ID0gYWxnX3Rlc3RfaGFzaCwKKysJCS5zdWl0ZSA9IHsKKysJCQkuaGFzaCA9IF9fVkVDUyhibGFrZXMyc18xNjBfdHZfdGVtcGxhdGUpCisrCQl9CisrCX0sIHsKKysJCS5hbGcgPSAiYmxha2Uycy0yMjQiLAorKwkJLnRlc3QgPSBhbGdfdGVzdF9oYXNoLAorKwkJLnN1aXRlID0geworKwkJCS5oYXNoID0gX19WRUNTKGJsYWtlczJzXzIyNF90dl90ZW1wbGF0ZSkKKysJCX0KKysJfSwgeworKwkJLmFsZyA9ICJibGFrZTJzLTI1NiIsCisrCQkudGVzdCA9IGFsZ190ZXN0X2hhc2gsCisrCQkuc3VpdGUgPSB7CisrCQkJLmhhc2ggPSBfX1ZFQ1MoYmxha2VzMnNfMjU2X3R2X3RlbXBsYXRlKQorKwkJfQorKwl9LCB7CisgCQkuYWxnID0gImNiYyhhZXMpIiwKKyAJCS50ZXN0ID0gYWxnX3Rlc3Rfc2tjaXBoZXIsCisgCQkuZmlwc19hbGxvd2VkID0gMSwKKy0tLSBhL2NyeXB0by90ZXN0bWdyLmgKKysrKyBiL2NyeXB0by90ZXN0bWdyLmgKK0BAIC0zMTU2Nyw0ICszMTU2NywyNTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhZWFkX3Rlc3R2ZWMgZXNzaXZfaAorIAl9LAorIH07CisgCisrc3RhdGljIGNvbnN0IGNoYXIgYmxha2UyX29yZGVyZWRfc2VxdWVuY2VbXSA9CisrCSJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwNyIKKysJIlx4MDhceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmIgorKwkiXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTciCisrCSJceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiIKKysJIlx4MjBceDIxXHgyMlx4MjNceDI0XHgyNVx4MjZceDI3IgorKwkiXHgyOFx4MjlceDJhXHgyYlx4MmNceDJkXHgyZVx4MmYiCisrCSJceDMwXHgzMVx4MzJceDMzXHgzNFx4MzVceDM2XHgzNyIKKysJIlx4MzhceDM5XHgzYVx4M2JceDNjXHgzZFx4M2VceDNmIgorKwkiXHg0MFx4NDFceDQyXHg0M1x4NDRceDQ1XHg0Nlx4NDciCisrCSJceDQ4XHg0OVx4NGFceDRiXHg0Y1x4NGRceDRlXHg0ZiIKKysJIlx4NTBceDUxXHg1Mlx4NTNceDU0XHg1NVx4NTZceDU3IgorKwkiXHg1OFx4NTlceDVhXHg1Ylx4NWNceDVkXHg1ZVx4NWYiCisrCSJceDYwXHg2MVx4NjJceDYzXHg2NFx4NjVceDY2XHg2NyIKKysJIlx4NjhceDY5XHg2YVx4NmJceDZjXHg2ZFx4NmVceDZmIgorKwkiXHg3MFx4NzFceDcyXHg3M1x4NzRceDc1XHg3Nlx4NzciCisrCSJceDc4XHg3OVx4N2FceDdiXHg3Y1x4N2RceDdlXHg3ZiIKKysJIlx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3IgorKwkiXHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGYiCisrCSJceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5NyIKKysJIlx4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmIgorKwkiXHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTciCisrCSJceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZiIKKysJIlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3IgorKwkiXHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmYiCisrCSJceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjNyIKKysJIlx4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmIgorKwkiXHhkMFx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDciCisrCSJceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRceGRlXHhkZiIKKysJIlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3IgorKwkiXHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWYiCisrCSJceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmNyIKKysJIlx4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx4ZmVceGZmIjsKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IGhhc2hfdGVzdHZlYyBibGFrZXMyc18xMjhfdHZfdGVtcGxhdGVbXSA9IHt7CisrCS5kaWdlc3QgPSAodThbXSl7IDB4NjQsIDB4NTUsIDB4MGQsIDB4NmYsIDB4ZmUsIDB4MmMsIDB4MGEsIDB4MDEsCisrCQkJICAweGExLCAweDRhLCAweGJhLCAweDFlLCAweGFkLCAweGUwLCAweDIwLCAweDBjLCB9LAorK30sIHsKKysJLnBsYWludGV4dCA9IGJsYWtlMl9vcmRlcmVkX3NlcXVlbmNlLAorKwkucHNpemUgPSA2NCwKKysJLmRpZ2VzdCA9ICh1OFtdKXsgMHhkYywgMHg2NiwgMHhjYSwgMHg4ZiwgMHgwMywgMHg4NiwgMHg1OCwgMHgwMSwKKysJCQkgIDB4YjAsIDB4ZmYsIDB4ZTAsIDB4NmUsIDB4ZDgsIDB4YTEsIDB4YTksIDB4MGUsIH0sCisrfSwgeworKwkua3NpemUgPSAxNiwKKysJLmtleSA9IGJsYWtlMl9vcmRlcmVkX3NlcXVlbmNlLAorKwkucGxhaW50ZXh0ID0gYmxha2UyX29yZGVyZWRfc2VxdWVuY2UsCisrCS5wc2l6ZSA9IDEsCisrCS5kaWdlc3QgPSAodThbXSl7IDB4ODgsIDB4MWUsIDB4NDIsIDB4ZTcsIDB4YmIsIDB4MzUsIDB4ODAsIDB4ODIsCisrCQkJICAweDYzLCAweDdjLCAweDBhLCAweDBmLCAweGQ3LCAweGVjLCAweDZjLCAweDJmLCB9LAorK30sIHsKKysJLmtzaXplID0gMzIsCisrCS5rZXkgPSBibGFrZTJfb3JkZXJlZF9zZXF1ZW5jZSwKKysJLnBsYWludGV4dCA9IGJsYWtlMl9vcmRlcmVkX3NlcXVlbmNlLAorKwkucHNpemUgPSA3LAorKwkuZGlnZXN0ID0gKHU4W10peyAweGNmLCAweDllLCAweDA3LCAweDJhLCAweGQ1LCAweDIyLCAweGYyLCAweGNkLAorKwkJCSAgMHhhMiwgMHhkOCwgMHgyNSwgMHgyMSwgMHg4MCwgMHg4NiwgMHg3MywgMHgxYywgfSwKKyt9LCB7CisrCS5rc2l6ZSA9IDEsCisrCS5rZXkgPSAiQiIsCisrCS5wbGFpbnRleHQgPSBibGFrZTJfb3JkZXJlZF9zZXF1ZW5jZSwKKysJLnBzaXplID0gMTUsCisrCS5kaWdlc3QgPSAodThbXSl7IDB4ZjYsIDB4MzMsIDB4NWEsIDB4MmMsIDB4MjIsIDB4YTAsIDB4NjQsIDB4YjIsCisrCQkJICAweGI2LCAweDNmLCAweGViLCAweGJjLCAweGQxLCAweGMzLCAweGU1LCAweGIyLCB9LAorK30sIHsKKysJLmtzaXplID0gMTYsCisrCS5rZXkgPSBibGFrZTJfb3JkZXJlZF9zZXF1ZW5jZSwKKysJLnBsYWludGV4dCA9IGJsYWtlMl9vcmRlcmVkX3NlcXVlbmNlLAorKwkucHNpemUgPSAyNDcsCisrCS5kaWdlc3QgPSAodThbXSl7IDB4NzIsIDB4NjYsIDB4NDksIDB4NjAsIDB4ZjksIDB4NGEsIDB4ZWEsIDB4YmUsCisrCQkJICAweDFmLCAweGY0LCAweDYwLCAweGNlLCAweGI3LCAweDgxLCAweGNiLCAweDA5LCB9LAorK30sIHsKKysJLmtzaXplID0gMzIsCisrCS5rZXkgPSBibGFrZTJfb3JkZXJlZF9zZXF1ZW5jZSwKKysJLnBsYWludGV4dCA9IGJsYWtlMl9vcmRlcmVkX3NlcXVlbmNlLAorKwkucHNpemUgPSAyNTYsCisrCS5kaWdlc3QgPSAodThbXSl7IDB4ZDUsIDB4YTQsIDB4MGUsIDB4YzMsIDB4MTYsIDB4YzcsIDB4NTEsIDB4YTYsCisrCQkJICAweDNjLCAweGQwLCAweGQ5LCAweDExLCAweDU3LCAweGZhLCAweDFlLCAweGJiLCB9LAorK319OworKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGFzaF90ZXN0dmVjIGJsYWtlczJzXzE2MF90dl90ZW1wbGF0ZVtdID0ge3sKKysJLnBsYWludGV4dCA9IGJsYWtlMl9vcmRlcmVkX3NlcXVlbmNlLAorKwkucHNpemUgPSA3LAorKwkuZGlnZXN0ID0gKHU4W10peyAweGI0LCAweGYyLCAweDAzLCAweDQ5LCAweDM3LCAweGVkLCAweGIxLCAweDNlLAorKwkJCSAgMHg1YiwgMHgyYSwgMHhjYSwgMHg2NCwgMHg4MiwgMHg3NCwgMHhmNiwgMHg2MiwKKysJCQkgIDB4ZTMsIDB4ZjIsIDB4ODQsIDB4ZmYsIH0sCisrfSwgeworKwkucGxhaW50ZXh0ID0gYmxha2UyX29yZGVyZWRfc2VxdWVuY2UsCisrCS5wc2l6ZSA9IDI1NiwKKysJLmRpZ2VzdCA9ICh1OFtdKXsgMHhhYSwgMHg1NiwgMHg5YiwgMHhkYywgMHg5OCwgMHgxNywgMHg3NSwgMHhmMiwKKysJCQkgIDB4YjMsIDB4NjgsIDB4ODMsIDB4YjcsIDB4OWIsIDB4OGQsIDB4NDgsIDB4YjEsCisrCQkJICAweDliLCAweDJkLCAweDM1LCAweDA1LCB9LAorK30sIHsKKysJLmtzaXplID0gMSwKKysJLmtleSA9ICJCIiwKKysJLmRpZ2VzdCA9ICh1OFtdKXsgMHg1MCwgMHgxNiwgMHhlNywgMHgwYywgMHgwMSwgMHhkMCwgMHhkMywgMHhjMywKKysJCQkgIDB4ZjQsIDB4M2UsIDB4YjEsIDB4NmUsIDB4OTcsIDB4YTksIDB4NGUsIDB4ZDEsCisrCQkJICAweDc5LCAweDY1LCAweDMyLCAweDkzLCB9LAorK30sIHsKKysJLmtzaXplID0gMzIsCisrCS5rZXkgPSBibGFrZTJfb3JkZXJlZF9zZXF1ZW5jZSwKKysJLnBsYWludGV4dCA9IGJsYWtlMl9vcmRlcmVkX3NlcXVlbmNlLAorKwkucHNpemUgPSAxLAorKwkuZGlnZXN0ID0gKHU4W10peyAweDFjLCAweDJiLCAweGNkLCAweDlhLCAweDY4LCAweGNhLCAweDhjLCAweDcxLAorKwkJCSAgMHg5MCwgMHgyOSwgMHg2YywgMHg1NCwgMHhmYSwgMHg1NiwgMHg0YSwgMHhlZiwKKysJCQkgIDB4YTIsIDB4M2EsIDB4NTYsIDB4OWMsIH0sCisrfSwgeworKwkua3NpemUgPSAxNiwKKysJLmtleSA9IGJsYWtlMl9vcmRlcmVkX3NlcXVlbmNlLAorKwkucGxhaW50ZXh0ID0gYmxha2UyX29yZGVyZWRfc2VxdWVuY2UsCisrCS5wc2l6ZSA9IDE1LAorKwkuZGlnZXN0ID0gKHU4W10peyAweDM2LCAweGMzLCAweDVmLCAweDlhLCAweGRjLCAweDdlLCAweGJmLCAweDE5LAorKwkJCSAgMHg2OCwgMHhhYSwgMHhjYSwgMHhkOCwgMHg4MSwgMHhiZiwgMHgwOSwgMHgzNCwKKysJCQkgIDB4ODMsIDB4MzksIDB4MGYsIDB4MzAsIH0sCisrfSwgeworKwkua3NpemUgPSAxLAorKwkua2V5ID0gIkIiLAorKwkucGxhaW50ZXh0ID0gYmxha2UyX29yZGVyZWRfc2VxdWVuY2UsCisrCS5wc2l6ZSA9IDY0LAorKwkuZGlnZXN0ID0gKHU4W10peyAweDg2LCAweDgwLCAweDc4LCAweGE0LCAweDE0LCAweGVjLCAweDAzLCAweGU1LAorKwkJCSAgMHhiNiwgMHg5YSwgMHg1MiwgMHgwZSwgMHg0MiwgMHhlZSwgMHgzOSwgMHg5ZCwKKysJCQkgIDB4YWMsIDB4YTYsIDB4ODEsIDB4NjMsIH0sCisrfSwgeworKwkua3NpemUgPSAzMiwKKysJLmtleSA9IGJsYWtlMl9vcmRlcmVkX3NlcXVlbmNlLAorKwkucGxhaW50ZXh0ID0gYmxha2UyX29yZGVyZWRfc2VxdWVuY2UsCisrCS5wc2l6ZSA9IDI0NywKKysJLmRpZ2VzdCA9ICh1OFtdKXsgMHgyZCwgMHhkOCwgMHhkMiwgMHg1MywgMHg2NiwgMHhmYSwgMHhhOSwgMHgwMSwKKysJCQkgIDB4MWMsIDB4OWMsIDB4YWYsIDB4YTMsIDB4ZTIsIDB4OWQsIDB4OWIsIDB4MTAsCisrCQkJICAweDBhLCAweGY2LCAweDczLCAweGU4LCB9LAorK319OworKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGFzaF90ZXN0dmVjIGJsYWtlczJzXzIyNF90dl90ZW1wbGF0ZVtdID0ge3sKKysJLnBsYWludGV4dCA9IGJsYWtlMl9vcmRlcmVkX3NlcXVlbmNlLAorKwkucHNpemUgPSAxLAorKwkuZGlnZXN0ID0gKHU4W10peyAweDYxLCAweGI5LCAweDRlLCAweGM5LCAweDQ2LCAweDIyLCAweGEzLCAweDkxLAorKwkJCSAgMHhkMiwgMHhhZSwgMHg0MiwgMHhlNiwgMHg0NSwgMHg2YywgMHg5MCwgMHgxMiwKKysJCQkgIDB4ZDUsIDB4ODAsIDB4MDcsIDB4OTcsIDB4YjgsIDB4ODYsIDB4NWEsIDB4ZmMsCisrCQkJICAweDQ4LCAweDIxLCAweDk3LCAweGJiLCB9LAorK30sIHsKKysJLnBsYWludGV4dCA9IGJsYWtlMl9vcmRlcmVkX3NlcXVlbmNlLAorKwkucHNpemUgPSAyNDcsCisrCS5kaWdlc3QgPSAodThbXSl7IDB4OWUsIDB4ZGEsIDB4YzcsIDB4MjAsIDB4MmMsIDB4ZDgsIDB4NDgsIDB4MmUsCisrCQkJICAweDMxLCAweDk0LCAweGFiLCAweDQ2LCAweDZkLCAweDk0LCAweGQ4LCAweGI0LAorKwkJCSAgMHg2OSwgMHhjZCwgMHhhZSwgMHgxOSwgMHg2ZCwgMHg5ZSwgMHg0MSwgMHhjYywKKysJCQkgIDB4MmIsIDB4YTQsIDB4ZDUsIDB4ZjYsIH0sCisrfSwgeworKwkua3NpemUgPSAxNiwKKysJLmtleSA9IGJsYWtlMl9vcmRlcmVkX3NlcXVlbmNlLAorKwkuZGlnZXN0ID0gKHU4W10peyAweDMyLCAweGMwLCAweGFjLCAweGY0LCAweDNiLCAweGQzLCAweDA3LCAweDlmLAorKwkJCSAgMHhiZSwgMHhmYiwgMHhmYSwgMHg0ZCwgMHg2YiwgMHg0ZSwgMHg1NiwgMHhiMywKKysJCQkgIDB4YWEsIDB4ZDMsIDB4MjcsIDB4ZjYsIDB4MTQsIDB4YmYsIDB4YjksIDB4MzIsCisrCQkJICAweGE3LCAweDE5LCAweGZjLCAweGI4LCB9LAorK30sIHsKKysJLmtzaXplID0gMSwKKysJLmtleSA9ICJCIiwKKysJLnBsYWludGV4dCA9IGJsYWtlMl9vcmRlcmVkX3NlcXVlbmNlLAorKwkucHNpemUgPSA3LAorKwkuZGlnZXN0ID0gKHU4W10peyAweDczLCAweGFkLCAweDVlLCAweDZkLCAweGI5LCAweDAyLCAweDhlLCAweDc2LAorKwkJCSAgMHhmMiwgMHg2NiwgMHg0MiwgMHg0YiwgMHg0YywgMHhmYSwgMHgxZiwgMHhlNiwKKysJCQkgIDB4MmUsIDB4NTYsIDB4NDAsIDB4ZTUsIDB4YTIsIDB4YjAsIDB4M2MsIDB4ZTgsCisrCQkJICAweDdiLCAweDQ1LCAweGZlLCAweDA1LCB9LAorK30sIHsKKysJLmtzaXplID0gMzIsCisrCS5rZXkgPSBibGFrZTJfb3JkZXJlZF9zZXF1ZW5jZSwKKysJLnBsYWludGV4dCA9IGJsYWtlMl9vcmRlcmVkX3NlcXVlbmNlLAorKwkucHNpemUgPSAxNSwKKysJLmRpZ2VzdCA9ICh1OFtdKXsgMHgxNiwgMHg2MCwgMHhmYiwgMHg5MiwgMHg1NCwgMHhiMywgMHg2ZSwgMHgzNiwKKysJCQkgIDB4ODEsIDB4ZjQsIDB4MTYsIDB4NDEsIDB4YzMsIDB4M2QsIDB4ZDMsIDB4NDMsCisrCQkJICAweDg0LCAweGVkLCAweDEwLCAweDZmLCAweDY1LCAweDgwLCAweDdhLCAweDNlLAorKwkJCSAgMHgyNSwgMHhhYiwgMHhjNSwgMHgwMiwgfSwKKyt9LCB7CisrCS5rc2l6ZSA9IDE2LAorKwkua2V5ID0gYmxha2UyX29yZGVyZWRfc2VxdWVuY2UsCisrCS5wbGFpbnRleHQgPSBibGFrZTJfb3JkZXJlZF9zZXF1ZW5jZSwKKysJLnBzaXplID0gNjQsCisrCS5kaWdlc3QgPSAodThbXSl7IDB4Y2EsIDB4YWEsIDB4MzksIDB4NjcsIDB4OWMsIDB4ZjcsIDB4NmIsIDB4YzcsCisrCQkJICAweGI2LCAweDgyLCAweGNhLCAweDBlLCAweDY1LCAweDM2LCAweDViLCAweDdjLAorKwkJCSAgMHgyNCwgMHgwMCwgMHhmYSwgMHg1ZiwgMHhkYSwgMHgwNiwgMHg5MSwgMHg5MywKKysJCQkgIDB4NmEsIDB4MzEsIDB4ODMsIDB4YjUsIH0sCisrfSwgeworKwkua3NpemUgPSAxLAorKwkua2V5ID0gIkIiLAorKwkucGxhaW50ZXh0ID0gYmxha2UyX29yZGVyZWRfc2VxdWVuY2UsCisrCS5wc2l6ZSA9IDI1NiwKKysJLmRpZ2VzdCA9ICh1OFtdKXsgMHg5MCwgMHgwMiwgMHgyNiwgMHhiNSwgMHgwNiwgMHg5YywgMHgzNiwgMHg4NiwKKysJCQkgIDB4OTQsIDB4OTEsIDB4OTAsIDB4MWUsIDB4N2QsIDB4MmEsIDB4NzEsIDB4YjIsCisrCQkJICAweDQ4LCAweGI1LCAweGU4LCAweDE2LCAweGZkLCAweDY0LCAweDMzLCAweDQ1LAorKwkJCSAgMHhiMywgMHhkNywgMHhlYywgMHhjYywgfSwKKyt9fTsKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IGhhc2hfdGVzdHZlYyBibGFrZXMyc18yNTZfdHZfdGVtcGxhdGVbXSA9IHt7CisrCS5wbGFpbnRleHQgPSBibGFrZTJfb3JkZXJlZF9zZXF1ZW5jZSwKKysJLnBzaXplID0gMTUsCisrCS5kaWdlc3QgPSAodThbXSl7IDB4ZDksIDB4N2MsIDB4ODIsIDB4OGQsIDB4ODEsIDB4ODIsIDB4YTcsIDB4MjEsCisrCQkJICAweDgwLCAweGEwLCAweDZhLCAweDc4LCAweDI2LCAweDgzLCAweDMwLCAweDY3LAorKwkJCSAgMHgzZiwgMHg3YywgMHg0ZSwgMHgwNiwgMHgzNSwgMHg5NCwgMHg3YywgMHgwNCwKKysJCQkgIDB4YzAsIDB4MjMsIDB4MjMsIDB4ZmQsIDB4NDUsIDB4YzAsIDB4YTUsIDB4MmQsIH0sCisrfSwgeworKwkua3NpemUgPSAzMiwKKysJLmtleSA9IGJsYWtlMl9vcmRlcmVkX3NlcXVlbmNlLAorKwkuZGlnZXN0ID0gKHU4W10peyAweDQ4LCAweGE4LCAweDk5LCAweDdkLCAweGE0LCAweDA3LCAweDg3LCAweDZiLAorKwkJCSAgMHgzZCwgMHg3OSwgMHhjMCwgMHhkOSwgMHgyMywgMHgyNSwgMHhhZCwgMHgzYiwKKysJCQkgIDB4ODksIDB4Y2IsIDB4YjcsIDB4NTQsIDB4ZDgsIDB4NmEsIDB4YjcsIDB4MWEsCisrCQkJICAweGVlLCAweDA0LCAweDdhLCAweGQzLCAweDQ1LCAweGZkLCAweDJjLCAweDQ5LCB9LAorK30sIHsKKysJLmtzaXplID0gMSwKKysJLmtleSA9ICJCIiwKKysJLnBsYWludGV4dCA9IGJsYWtlMl9vcmRlcmVkX3NlcXVlbmNlLAorKwkucHNpemUgPSAxLAorKwkuZGlnZXN0ID0gKHU4W10peyAweDIyLCAweDI3LCAweGFlLCAweGFhLCAweDZlLCAweDgxLCAweDU2LCAweDAzLAorKwkJCSAgMHhhNywgMHhlMywgMHhhMSwgMHgxOCwgMHhhNSwgMHg5YSwgMHgyYywgMHgxOCwKKysJCQkgIDB4ZjQsIDB4NjMsIDB4YmMsIDB4MTYsIDB4NzAsIDB4ZjEsIDB4ZTcsIDB4NGIsCisrCQkJICAweDAwLCAweDZkLCAweDY2LCAweDE2LCAweGFlLCAweDllLCAweDc0LCAweDRlLCB9LAorK30sIHsKKysJLmtzaXplID0gMTYsCisrCS5rZXkgPSBibGFrZTJfb3JkZXJlZF9zZXF1ZW5jZSwKKysJLnBsYWludGV4dCA9IGJsYWtlMl9vcmRlcmVkX3NlcXVlbmNlLAorKwkucHNpemUgPSA3LAorKwkuZGlnZXN0ID0gKHU4W10peyAweDU4LCAweDVkLCAweGE4LCAweDYwLCAweDFjLCAweGE0LCAweGQ4LCAweDAzLAorKwkJCSAgMHg4NiwgMHg4NiwgMHg4NCwgMHg2NCwgMHhkNywgMHhhMCwgMHg4ZSwgMHgxNSwKKysJCQkgIDB4MmYsIDB4MDUsIDB4YTIsIDB4MWIsIDB4YmMsIDB4ZWYsIDB4N2EsIDB4MzQsCisrCQkJICAweGIzLCAweGM1LCAweGJjLCAweDRiLCAweGYwLCAweDMyLCAweGViLCAweDEyLCB9LAorK30sIHsKKysJLmtzaXplID0gMzIsCisrCS5rZXkgPSBibGFrZTJfb3JkZXJlZF9zZXF1ZW5jZSwKKysJLnBsYWludGV4dCA9IGJsYWtlMl9vcmRlcmVkX3NlcXVlbmNlLAorKwkucHNpemUgPSA2NCwKKysJLmRpZ2VzdCA9ICh1OFtdKXsgMHg4OSwgMHg3NSwgMHhiMCwgMHg1NywgMHg3ZiwgMHhkMywgMHg1NSwgMHg2NiwKKysJCQkgIDB4ZDcsIDB4NTAsIDB4YjMsIDB4NjIsIDB4YjAsIDB4ODksIDB4N2EsIDB4MjYsCisrCQkJICAweGMzLCAweDk5LCAweDEzLCAweDZkLCAweGYwLCAweDdiLCAweGFiLCAweGFiLAorKwkJCSAgMHhiZCwgMHhlNiwgMHgyMCwgMHgzZiwgMHhmMiwgMHg5NSwgMHg0ZSwgMHhkNCwgfSwKKyt9LCB7CisrCS5rc2l6ZSA9IDEsCisrCS5rZXkgPSAiQiIsCisrCS5wbGFpbnRleHQgPSBibGFrZTJfb3JkZXJlZF9zZXF1ZW5jZSwKKysJLnBzaXplID0gMjQ3LAorKwkuZGlnZXN0ID0gKHU4W10peyAweDJlLCAweDc0LCAweDFjLCAweDFkLCAweDAzLCAweGY0LCAweDlkLCAweDg0LAorKwkJCSAgMHg2ZiwgMHhmYywgMHg4NiwgMHgzMiwgMHg5MiwgMHg0OSwgMHg3ZSwgMHg2NiwKKysJCQkgIDB4ZDcsIDB4YzMsIDB4MTAsIDB4ODgsIDB4ZmUsIDB4MjgsIDB4YjMsIDB4ZTAsCisrCQkJICAweGJmLCAweDUwLCAweDc1LCAweGFkLCAweDhlLCAweGE0LCAweGU2LCAweGIyLCB9LAorK30sIHsKKysJLmtzaXplID0gMTYsCisrCS5rZXkgPSBibGFrZTJfb3JkZXJlZF9zZXF1ZW5jZSwKKysJLnBsYWludGV4dCA9IGJsYWtlMl9vcmRlcmVkX3NlcXVlbmNlLAorKwkucHNpemUgPSAyNTYsCisrCS5kaWdlc3QgPSAodThbXSl7IDB4YjksIDB4ZDIsIDB4ODEsIDB4MGUsIDB4M2EsIDB4YjEsIDB4NjIsIDB4OWIsCisrCQkJICAweGFkLCAweDQ0LCAweDA1LCAweGY0LCAweDkyLCAweDJlLCAweDk5LCAweGMxLAorKwkJCSAgMHg0YSwgMHg0NywgMHhiYiwgMHg1YiwgMHg2ZiwgMHhiMiwgMHg5NiwgMHhlZCwKKysJCQkgIDB4ZDUsIDB4MDYsIDB4YjUsIDB4M2EsIDB4N2MsIDB4N2EsIDB4NjUsIDB4MWQsIH0sCisrfX07CisrCisgI2VuZGlmCS8qIF9DUllQVE9fVEVTVE1HUl9IICovCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDIzLWNyeXB0by1ibGFrZTJzLWltcGxlbWVudC1nZW5lcmljLXNoYXNoLWRyaXZlci5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMjMtY3J5cHRvLWJsYWtlMnMtaW1wbGVtZW50LWdlbmVyaWMtc2hhc2gtZHJpdmVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNWVkZjUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDIzLWNyeXB0by1ibGFrZTJzLWltcGxlbWVudC1nZW5lcmljLXNoYXNoLWRyaXZlci5wYXRjaApAQCAtMCwwICsxLDI0NSBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQXJkIEJpZXNoZXV2ZWwgPGFyZGJAa2VybmVsLm9yZz4KK0RhdGU6IEZyaSwgOCBOb3YgMjAxOSAxMzoyMjozMCArMDEwMAorU3ViamVjdDogW1BBVENIXSBjcnlwdG86IGJsYWtlMnMgLSBpbXBsZW1lbnQgZ2VuZXJpYyBzaGFzaCBkcml2ZXIKKworY29tbWl0IDdmOWIwODgwOTI1ZjFmOWQ3ZDU5NTA0ZWEwODkyZDJhZTljZmMyMzMgdXBzdHJlYW0uCisKK1dpcmUgdXAgb3VyIG5ld2x5IGFkZGVkIEJsYWtlMnMgaW1wbGVtZW50YXRpb24gdmlhIHRoZSBzaGFzaCBBUEkuCisKK1NpZ25lZC1vZmYtYnk6IEFyZCBCaWVzaGV1dmVsIDxhcmRiQGtlcm5lbC5vcmc+CitTaWduZWQtb2ZmLWJ5OiBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGNyeXB0by9LY29uZmlnICAgICAgICAgICAgICAgICAgICB8ICAxOCArKysrCisgY3J5cHRvL01ha2VmaWxlICAgICAgICAgICAgICAgICAgIHwgICAxICsKKyBjcnlwdG8vYmxha2Uyc19nZW5lcmljLmMgICAgICAgICAgfCAxNzEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgaW5jbHVkZS9jcnlwdG8vaW50ZXJuYWwvYmxha2Uycy5oIHwgICA1ICsKKyA0IGZpbGVzIGNoYW5nZWQsIDE5NSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGNyeXB0by9ibGFrZTJzX2dlbmVyaWMuYworCistLS0gYS9jcnlwdG8vS2NvbmZpZworKysrIGIvY3J5cHRvL0tjb25maWcKK0BAIC02MzksNiArNjM5LDI0IEBAIGNvbmZpZyBDUllQVE9fWFhIQVNICisgCSAgeHhIYXNoIG5vbi1jcnlwdG9ncmFwaGljIGhhc2ggYWxnb3JpdGhtLiBFeHRyZW1lbHkgZmFzdCwgd29ya2luZyBhdAorIAkgIHNwZWVkcyBjbG9zZSB0byBSQU0gbGltaXRzLgorIAorK2NvbmZpZyBDUllQVE9fQkxBS0UyUworKwl0cmlzdGF0ZSAiQkxBS0UycyBkaWdlc3QgYWxnb3JpdGhtIgorKwlzZWxlY3QgQ1JZUFRPX0xJQl9CTEFLRTJTX0dFTkVSSUMKKysJc2VsZWN0IENSWVBUT19IQVNICisrCWhlbHAKKysJICBJbXBsZW1lbnRhdGlvbiBvZiBjcnlwdG9ncmFwaGljIGhhc2ggZnVuY3Rpb24gQkxBS0UycworKwkgIG9wdGltaXplZCBmb3IgOC0zMmJpdCBwbGF0Zm9ybXMgYW5kIGNhbiBwcm9kdWNlIGRpZ2VzdHMgb2YgYW55IHNpemUKKysJICBiZXR3ZWVuIDEgdG8gMzIuICBUaGUga2V5ZWQgaGFzaCBpcyBhbHNvIGltcGxlbWVudGVkLgorKworKwkgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtczoKKysKKysJICAtIGJsYWtlMnMtMTI4CisrCSAgLSBibGFrZTJzLTE2MAorKwkgIC0gYmxha2Uycy0yMjQKKysJICAtIGJsYWtlMnMtMjU2CisrCisrCSAgU2VlIGh0dHBzOi8vYmxha2UyLm5ldCBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi4KKysKKyBjb25maWcgQ1JZUFRPX0NSQ1QxMERJRgorIAl0cmlzdGF0ZSAiQ1JDVDEwRElGIGFsZ29yaXRobSIKKyAJc2VsZWN0IENSWVBUT19IQVNICistLS0gYS9jcnlwdG8vTWFrZWZpbGUKKysrKyBiL2NyeXB0by9NYWtlZmlsZQorQEAgLTc0LDYgKzc0LDcgQEAgb2JqLSQoQ09ORklHX0NSWVBUT19TVFJFRUJPRykgKz0gc3RyZWVibworIG9iai0kKENPTkZJR19DUllQVE9fV1A1MTIpICs9IHdwNTEyLm8KKyBDRkxBR1Nfd3A1MTIubyA6PSAkKGNhbGwgY2Mtb3B0aW9uLC1mbm8tc2NoZWR1bGUtaW5zbnMpICAjIGh0dHBzOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTc5MTQ5Cisgb2JqLSQoQ09ORklHX0NSWVBUT19UR1IxOTIpICs9IHRncjE5Mi5vCisrb2JqLSQoQ09ORklHX0NSWVBUT19CTEFLRTJTKSArPSBibGFrZTJzX2dlbmVyaWMubworIG9iai0kKENPTkZJR19DUllQVE9fR0YxMjhNVUwpICs9IGdmMTI4bXVsLm8KKyBvYmotJChDT05GSUdfQ1JZUFRPX0VDQikgKz0gZWNiLm8KKyBvYmotJChDT05GSUdfQ1JZUFRPX0NCQykgKz0gY2JjLm8KKy0tLSAvZGV2L251bGwKKysrKyBiL2NyeXB0by9ibGFrZTJzX2dlbmVyaWMuYworQEAgLTAsMCArMSwxNzEgQEAKKysvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBNSVQKKysvKgorKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKysgKi8KKysKKysjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2JsYWtlMnMuaD4KKysjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL3NpbWQuaD4KKysjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2hhc2guaD4KKysKKysjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKysjaW5jbHVkZSA8bGludXgvanVtcF9sYWJlbC5oPgorKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKysjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisrCisrc3RhdGljIGludCBjcnlwdG9fYmxha2Uyc19zZXRrZXkoc3RydWN0IGNyeXB0b19zaGFzaCAqdGZtLCBjb25zdCB1OCAqa2V5LAorKwkJCQkgdW5zaWduZWQgaW50IGtleWxlbikKKyt7CisrCXN0cnVjdCBibGFrZTJzX3RmbV9jdHggKnRjdHggPSBjcnlwdG9fc2hhc2hfY3R4KHRmbSk7CisrCisrCWlmIChrZXlsZW4gPT0gMCB8fCBrZXlsZW4gPiBCTEFLRTJTX0tFWV9TSVpFKSB7CisrCQljcnlwdG9fc2hhc2hfc2V0X2ZsYWdzKHRmbSwgQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9MRU4pOworKwkJcmV0dXJuIC1FSU5WQUw7CisrCX0KKysKKysJbWVtY3B5KHRjdHgtPmtleSwga2V5LCBrZXlsZW4pOworKwl0Y3R4LT5rZXlsZW4gPSBrZXlsZW47CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IGNyeXB0b19ibGFrZTJzX2luaXQoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MpCisreworKwlzdHJ1Y3QgYmxha2Uyc190Zm1fY3R4ICp0Y3R4ID0gY3J5cHRvX3NoYXNoX2N0eChkZXNjLT50Zm0pOworKwlzdHJ1Y3QgYmxha2Uyc19zdGF0ZSAqc3RhdGUgPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKysJY29uc3QgaW50IG91dGxlbiA9IGNyeXB0b19zaGFzaF9kaWdlc3RzaXplKGRlc2MtPnRmbSk7CisrCisrCWlmICh0Y3R4LT5rZXlsZW4pCisrCQlibGFrZTJzX2luaXRfa2V5KHN0YXRlLCBvdXRsZW4sIHRjdHgtPmtleSwgdGN0eC0+a2V5bGVuKTsKKysJZWxzZQorKwkJYmxha2Uyc19pbml0KHN0YXRlLCBvdXRsZW4pOworKworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGludCBjcnlwdG9fYmxha2Uyc191cGRhdGUoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIGNvbnN0IHU4ICppbiwKKysJCQkJIHVuc2lnbmVkIGludCBpbmxlbikKKyt7CisrCXN0cnVjdCBibGFrZTJzX3N0YXRlICpzdGF0ZSA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworKwljb25zdCBzaXplX3QgZmlsbCA9IEJMQUtFMlNfQkxPQ0tfU0laRSAtIHN0YXRlLT5idWZsZW47CisrCisrCWlmICh1bmxpa2VseSghaW5sZW4pKQorKwkJcmV0dXJuIDA7CisrCWlmIChpbmxlbiA+IGZpbGwpIHsKKysJCW1lbWNweShzdGF0ZS0+YnVmICsgc3RhdGUtPmJ1ZmxlbiwgaW4sIGZpbGwpOworKwkJYmxha2Uyc19jb21wcmVzc19nZW5lcmljKHN0YXRlLCBzdGF0ZS0+YnVmLCAxLCBCTEFLRTJTX0JMT0NLX1NJWkUpOworKwkJc3RhdGUtPmJ1ZmxlbiA9IDA7CisrCQlpbiArPSBmaWxsOworKwkJaW5sZW4gLT0gZmlsbDsKKysJfQorKwlpZiAoaW5sZW4gPiBCTEFLRTJTX0JMT0NLX1NJWkUpIHsKKysJCWNvbnN0IHNpemVfdCBuYmxvY2tzID0gRElWX1JPVU5EX1VQKGlubGVuLCBCTEFLRTJTX0JMT0NLX1NJWkUpOworKwkJLyogSGFzaCBvbmUgbGVzcyAoZnVsbCkgYmxvY2sgdGhhbiBzdHJpY3RseSBwb3NzaWJsZSAqLworKwkJYmxha2Uyc19jb21wcmVzc19nZW5lcmljKHN0YXRlLCBpbiwgbmJsb2NrcyAtIDEsIEJMQUtFMlNfQkxPQ0tfU0laRSk7CisrCQlpbiArPSBCTEFLRTJTX0JMT0NLX1NJWkUgKiAobmJsb2NrcyAtIDEpOworKwkJaW5sZW4gLT0gQkxBS0UyU19CTE9DS19TSVpFICogKG5ibG9ja3MgLSAxKTsKKysJfQorKwltZW1jcHkoc3RhdGUtPmJ1ZiArIHN0YXRlLT5idWZsZW4sIGluLCBpbmxlbik7CisrCXN0YXRlLT5idWZsZW4gKz0gaW5sZW47CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IGNyeXB0b19ibGFrZTJzX2ZpbmFsKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCB1OCAqb3V0KQorK3sKKysJc3RydWN0IGJsYWtlMnNfc3RhdGUgKnN0YXRlID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisrCisrCWJsYWtlMnNfc2V0X2xhc3RibG9jayhzdGF0ZSk7CisrCW1lbXNldChzdGF0ZS0+YnVmICsgc3RhdGUtPmJ1ZmxlbiwgMCwKKysJICAgICAgIEJMQUtFMlNfQkxPQ0tfU0laRSAtIHN0YXRlLT5idWZsZW4pOyAvKiBQYWRkaW5nICovCisrCWJsYWtlMnNfY29tcHJlc3NfZ2VuZXJpYyhzdGF0ZSwgc3RhdGUtPmJ1ZiwgMSwgc3RhdGUtPmJ1Zmxlbik7CisrCWNwdV90b19sZTMyX2FycmF5KHN0YXRlLT5oLCBBUlJBWV9TSVpFKHN0YXRlLT5oKSk7CisrCW1lbWNweShvdXQsIHN0YXRlLT5oLCBzdGF0ZS0+b3V0bGVuKTsKKysJbWVtemVyb19leHBsaWNpdChzdGF0ZSwgc2l6ZW9mKCpzdGF0ZSkpOworKworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIHN0cnVjdCBzaGFzaF9hbGcgYmxha2Uyc19hbGdzW10gPSB7eworKwkuYmFzZS5jcmFfbmFtZQkJPSAiYmxha2Uycy0xMjgiLAorKwkuYmFzZS5jcmFfZHJpdmVyX25hbWUJPSAiYmxha2Uycy0xMjgtZ2VuZXJpYyIsCisrCS5iYXNlLmNyYV9mbGFncwkJPSBDUllQVE9fQUxHX09QVElPTkFMX0tFWSwKKysJLmJhc2UuY3JhX2N0eHNpemUJPSBzaXplb2Yoc3RydWN0IGJsYWtlMnNfdGZtX2N0eCksCisrCS5iYXNlLmNyYV9wcmlvcml0eQk9IDIwMCwKKysJLmJhc2UuY3JhX2Jsb2Nrc2l6ZSAgICAgPSBCTEFLRTJTX0JMT0NLX1NJWkUsCisrCS5iYXNlLmNyYV9tb2R1bGUJPSBUSElTX01PRFVMRSwKKysKKysJLmRpZ2VzdHNpemUJCT0gQkxBS0UyU18xMjhfSEFTSF9TSVpFLAorKwkuc2V0a2V5CQkJPSBjcnlwdG9fYmxha2Uyc19zZXRrZXksCisrCS5pbml0CQkJPSBjcnlwdG9fYmxha2Uyc19pbml0LAorKwkudXBkYXRlCQkJPSBjcnlwdG9fYmxha2Uyc191cGRhdGUsCisrCS5maW5hbAkJCT0gY3J5cHRvX2JsYWtlMnNfZmluYWwsCisrCS5kZXNjc2l6ZQkJPSBzaXplb2Yoc3RydWN0IGJsYWtlMnNfc3RhdGUpLAorK30sIHsKKysJLmJhc2UuY3JhX25hbWUJCT0gImJsYWtlMnMtMTYwIiwKKysJLmJhc2UuY3JhX2RyaXZlcl9uYW1lCT0gImJsYWtlMnMtMTYwLWdlbmVyaWMiLAorKwkuYmFzZS5jcmFfZmxhZ3MJCT0gQ1JZUFRPX0FMR19PUFRJT05BTF9LRVksCisrCS5iYXNlLmNyYV9jdHhzaXplCT0gc2l6ZW9mKHN0cnVjdCBibGFrZTJzX3RmbV9jdHgpLAorKwkuYmFzZS5jcmFfcHJpb3JpdHkJPSAyMDAsCisrCS5iYXNlLmNyYV9ibG9ja3NpemUgICAgID0gQkxBS0UyU19CTE9DS19TSVpFLAorKwkuYmFzZS5jcmFfbW9kdWxlCT0gVEhJU19NT0RVTEUsCisrCisrCS5kaWdlc3RzaXplCQk9IEJMQUtFMlNfMTYwX0hBU0hfU0laRSwKKysJLnNldGtleQkJCT0gY3J5cHRvX2JsYWtlMnNfc2V0a2V5LAorKwkuaW5pdAkJCT0gY3J5cHRvX2JsYWtlMnNfaW5pdCwKKysJLnVwZGF0ZQkJCT0gY3J5cHRvX2JsYWtlMnNfdXBkYXRlLAorKwkuZmluYWwJCQk9IGNyeXB0b19ibGFrZTJzX2ZpbmFsLAorKwkuZGVzY3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBibGFrZTJzX3N0YXRlKSwKKyt9LCB7CisrCS5iYXNlLmNyYV9uYW1lCQk9ICJibGFrZTJzLTIyNCIsCisrCS5iYXNlLmNyYV9kcml2ZXJfbmFtZQk9ICJibGFrZTJzLTIyNC1nZW5lcmljIiwKKysJLmJhc2UuY3JhX2ZsYWdzCQk9IENSWVBUT19BTEdfT1BUSU9OQUxfS0VZLAorKwkuYmFzZS5jcmFfY3R4c2l6ZQk9IHNpemVvZihzdHJ1Y3QgYmxha2Uyc190Zm1fY3R4KSwKKysJLmJhc2UuY3JhX3ByaW9yaXR5CT0gMjAwLAorKwkuYmFzZS5jcmFfYmxvY2tzaXplICAgICA9IEJMQUtFMlNfQkxPQ0tfU0laRSwKKysJLmJhc2UuY3JhX21vZHVsZQk9IFRISVNfTU9EVUxFLAorKworKwkuZGlnZXN0c2l6ZQkJPSBCTEFLRTJTXzIyNF9IQVNIX1NJWkUsCisrCS5zZXRrZXkJCQk9IGNyeXB0b19ibGFrZTJzX3NldGtleSwKKysJLmluaXQJCQk9IGNyeXB0b19ibGFrZTJzX2luaXQsCisrCS51cGRhdGUJCQk9IGNyeXB0b19ibGFrZTJzX3VwZGF0ZSwKKysJLmZpbmFsCQkJPSBjcnlwdG9fYmxha2Uyc19maW5hbCwKKysJLmRlc2NzaXplCQk9IHNpemVvZihzdHJ1Y3QgYmxha2Uyc19zdGF0ZSksCisrfSwgeworKwkuYmFzZS5jcmFfbmFtZQkJPSAiYmxha2Uycy0yNTYiLAorKwkuYmFzZS5jcmFfZHJpdmVyX25hbWUJPSAiYmxha2Uycy0yNTYtZ2VuZXJpYyIsCisrCS5iYXNlLmNyYV9mbGFncwkJPSBDUllQVE9fQUxHX09QVElPTkFMX0tFWSwKKysJLmJhc2UuY3JhX2N0eHNpemUJPSBzaXplb2Yoc3RydWN0IGJsYWtlMnNfdGZtX2N0eCksCisrCS5iYXNlLmNyYV9wcmlvcml0eQk9IDIwMCwKKysJLmJhc2UuY3JhX2Jsb2Nrc2l6ZSAgICAgPSBCTEFLRTJTX0JMT0NLX1NJWkUsCisrCS5iYXNlLmNyYV9tb2R1bGUJPSBUSElTX01PRFVMRSwKKysKKysJLmRpZ2VzdHNpemUJCT0gQkxBS0UyU18yNTZfSEFTSF9TSVpFLAorKwkuc2V0a2V5CQkJPSBjcnlwdG9fYmxha2Uyc19zZXRrZXksCisrCS5pbml0CQkJPSBjcnlwdG9fYmxha2Uyc19pbml0LAorKwkudXBkYXRlCQkJPSBjcnlwdG9fYmxha2Uyc191cGRhdGUsCisrCS5maW5hbAkJCT0gY3J5cHRvX2JsYWtlMnNfZmluYWwsCisrCS5kZXNjc2l6ZQkJPSBzaXplb2Yoc3RydWN0IGJsYWtlMnNfc3RhdGUpLAorK319OworKworK3N0YXRpYyBpbnQgX19pbml0IGJsYWtlMnNfbW9kX2luaXQodm9pZCkKKyt7CisrCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfc2hhc2hlcyhibGFrZTJzX2FsZ3MsIEFSUkFZX1NJWkUoYmxha2Uyc19hbGdzKSk7CisrfQorKworK3N0YXRpYyB2b2lkIF9fZXhpdCBibGFrZTJzX21vZF9leGl0KHZvaWQpCisreworKwljcnlwdG9fdW5yZWdpc3Rlcl9zaGFzaGVzKGJsYWtlMnNfYWxncywgQVJSQVlfU0laRShibGFrZTJzX2FsZ3MpKTsKKyt9CisrCisrc3Vic3lzX2luaXRjYWxsKGJsYWtlMnNfbW9kX2luaXQpOworK21vZHVsZV9leGl0KGJsYWtlMnNfbW9kX2V4aXQpOworKworK01PRFVMRV9BTElBU19DUllQVE8oImJsYWtlMnMtMTI4Iik7CisrTU9EVUxFX0FMSUFTX0NSWVBUTygiYmxha2Uycy0xMjgtZ2VuZXJpYyIpOworK01PRFVMRV9BTElBU19DUllQVE8oImJsYWtlMnMtMTYwIik7CisrTU9EVUxFX0FMSUFTX0NSWVBUTygiYmxha2Uycy0xNjAtZ2VuZXJpYyIpOworK01PRFVMRV9BTElBU19DUllQVE8oImJsYWtlMnMtMjI0Iik7CisrTU9EVUxFX0FMSUFTX0NSWVBUTygiYmxha2Uycy0yMjQtZ2VuZXJpYyIpOworK01PRFVMRV9BTElBU19DUllQVE8oImJsYWtlMnMtMjU2Iik7CisrTU9EVUxFX0FMSUFTX0NSWVBUTygiYmxha2Uycy0yNTYtZ2VuZXJpYyIpOworK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKKy0tLSBhL2luY2x1ZGUvY3J5cHRvL2ludGVybmFsL2JsYWtlMnMuaAorKysrIGIvaW5jbHVkZS9jcnlwdG8vaW50ZXJuYWwvYmxha2Uycy5oCitAQCAtNSw2ICs1LDExIEBACisgCisgI2luY2x1ZGUgPGNyeXB0by9ibGFrZTJzLmg+CisgCisrc3RydWN0IGJsYWtlMnNfdGZtX2N0eCB7CisrCXU4IGtleVtCTEFLRTJTX0tFWV9TSVpFXTsKKysJdW5zaWduZWQgaW50IGtleWxlbjsKKyt9OworKworIHZvaWQgYmxha2Uyc19jb21wcmVzc19nZW5lcmljKHN0cnVjdCBibGFrZTJzX3N0YXRlICpzdGF0ZSxjb25zdCB1OCAqYmxvY2ssCisgCQkJICAgICAgc2l6ZV90IG5ibG9ja3MsIGNvbnN0IHUzMiBpbmMpOworIApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAyNC1jcnlwdG8tYmxha2Uycy14ODZfNjQtU0lNRC1pbXBsZW1lbnRhdGlvbi5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMjQtY3J5cHRvLWJsYWtlMnMteDg2XzY0LVNJTUQtaW1wbGVtZW50YXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ0MDU1OAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMjQtY3J5cHRvLWJsYWtlMnMteDg2XzY0LVNJTUQtaW1wbGVtZW50YXRpb24ucGF0Y2gKQEAgLTAsMCArMSw1NTcgQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJKYXNvbiBBLiBEb25lbmZlbGQiIDxKYXNvbkB6eDJjNC5jb20+CitEYXRlOiBGcmksIDggTm92IDIwMTkgMTM6MjI6MzEgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gY3J5cHRvOiBibGFrZTJzIC0geDg2XzY0IFNJTUQgaW1wbGVtZW50YXRpb24KKworY29tbWl0IGVkMDM1NmVkYTE1M2Y2YTk1NjQ5ZTExZmViN2IwNzA4M2NhZjllMjAgdXBzdHJlYW0uCisKK1RoZXNlIGltcGxlbWVudGF0aW9ucyBmcm9tIFNhbXVlbCBOZXZlcyBzdXBwb3J0IEFWWCBhbmQgQVZYLTUxMlZMLgorT3JpZ2luYWxseSB0aGlzIHVzZWQgQVZYLTUxMkYsIGJ1dCBTa3lsYWtlIHRoZXJtYWwgdGhyb3R0bGluZyBtYWRlCitBVlgtNTEyVkwgbW9yZSBhdHRyYWN0aXZlIGFuZCBwb3NzaWJsZSB0byBkbyB3aXRoIG5lZ2xpZ2FibGUgZGlmZmVyZW5jZS4KKworU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CitTaWduZWQtb2ZmLWJ5OiBTYW11ZWwgTmV2ZXMgPHNuZXZlc0BkZWkudWMucHQ+CitDby1kZXZlbG9wZWQtYnk6IFNhbXVlbCBOZXZlcyA8c25ldmVzQGRlaS51Yy5wdD4KK1thcmRiOiBtb3ZlIHRvIGFyY2gveDg2L2NyeXB0bywgd2lyZSBpbnRvIGxpYi9jcnlwdG8gZnJhbWV3b3JrXQorU2lnbmVkLW9mZi1ieTogQXJkIEJpZXNoZXV2ZWwgPGFyZGJAa2VybmVsLm9yZz4KK1NpZ25lZC1vZmYtYnk6IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlICAgICAgIHwgICAyICsKKyBhcmNoL3g4Ni9jcnlwdG8vYmxha2Uycy1jb3JlLlMgfCAyNTggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgYXJjaC94ODYvY3J5cHRvL2JsYWtlMnMtZ2x1ZS5jIHwgMjMzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgY3J5cHRvL0tjb25maWcgICAgICAgICAgICAgICAgIHwgICA2ICsKKyA0IGZpbGVzIGNoYW5nZWQsIDQ5OSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGFyY2gveDg2L2NyeXB0by9ibGFrZTJzLWNvcmUuUworIGNyZWF0ZSBtb2RlIDEwMDY0NCBhcmNoL3g4Ni9jcnlwdG8vYmxha2Uycy1nbHVlLmMKKworLS0tIGEvYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlCisrKysgYi9hcmNoL3g4Ni9jcnlwdG8vTWFrZWZpbGUKK0BAIC00OCw2ICs0OCw3IEBAIGlmZXEgKCQoYXZ4X3N1cHBvcnRlZCkseWVzKQorIAlvYmotJChDT05GSUdfQ1JZUFRPX0NBU1Q2X0FWWF9YODZfNjQpICs9IGNhc3Q2LWF2eC14ODZfNjQubworIAlvYmotJChDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQVZYX1g4Nl82NCkgKz0gdHdvZmlzaC1hdngteDg2XzY0Lm8KKyAJb2JqLSQoQ09ORklHX0NSWVBUT19TRVJQRU5UX0FWWF9YODZfNjQpICs9IHNlcnBlbnQtYXZ4LXg4Nl82NC5vCisrCW9iai0kKENPTkZJR19DUllQVE9fQkxBS0UyU19YODYpICs9IGJsYWtlMnMteDg2XzY0Lm8KKyBlbmRpZgorIAorICMgVGhlc2UgbW9kdWxlcyByZXF1aXJlIGFzc2VtYmxlciB0byBzdXBwb3J0IEFWWDIuCitAQCAtNzAsNiArNzEsNyBAQCBzZXJwZW50LXNzZTIteDg2XzY0LXkgOj0gc2VycGVudC1zc2UyLXg4CisgYWVnaXMxMjgtYWVzbmkteSA6PSBhZWdpczEyOC1hZXNuaS1hc20ubyBhZWdpczEyOC1hZXNuaS1nbHVlLm8KKyAKKyBuaHBvbHkxMzA1LXNzZTIteSA6PSBuaC1zc2UyLXg4Nl82NC5vIG5ocG9seTEzMDUtc3NlMi1nbHVlLm8KKytibGFrZTJzLXg4Nl82NC15IDo9IGJsYWtlMnMtY29yZS5vIGJsYWtlMnMtZ2x1ZS5vCisgCisgaWZlcSAoJChhdnhfc3VwcG9ydGVkKSx5ZXMpCisgCWNhbWVsbGlhLWFlc25pLWF2eC14ODZfNjQteSA6PSBjYW1lbGxpYS1hZXNuaS1hdngtYXNtXzY0Lm8gXAorLS0tIC9kZXYvbnVsbAorKysrIGIvYXJjaC94ODYvY3J5cHRvL2JsYWtlMnMtY29yZS5TCitAQCAtMCwwICsxLDI1OCBAQAorKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVCAqLworKy8qCisrICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IFNhbXVlbCBOZXZlcyA8c25ldmVzQGRlaS51Yy5wdD4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisrICovCisrCisrI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKysKKysuc2VjdGlvbiAucm9kYXRhLmNzdDMyLkJMQUtFMlNfSVYsICJhTSIsIEBwcm9nYml0cywgMzIKKysuYWxpZ24gMzIKKytJVjoJLm9jdGEgMHhBNTRGRjUzQTNDNkVGMzcyQkI2N0FFODU2QTA5RTY2NworKwkub2N0YSAweDVCRTBDRDE5MUY4M0Q5QUI5QjA1Njg4QzUxMEU1MjdGCisrLnNlY3Rpb24gLnJvZGF0YS5jc3QxNi5ST1QxNiwgImFNIiwgQHByb2diaXRzLCAxNgorKy5hbGlnbiAxNgorK1JPVDE2Ogkub2N0YSAweDBEMEMwRjBFMDkwODBCMEEwNTA0MDcwNjAxMDAwMzAyCisrLnNlY3Rpb24gLnJvZGF0YS5jc3QxNi5ST1IzMjgsICJhTSIsIEBwcm9nYml0cywgMTYKKysuYWxpZ24gMTYKKytST1IzMjg6CS5vY3RhIDB4MEMwRjBFMEQwODBCMEEwOTA0MDcwNjA1MDAwMzAyMDEKKysuc2VjdGlvbiAucm9kYXRhLmNzdDY0LkJMQUtFMlNfU0lHTUEsICJhTSIsIEBwcm9nYml0cywgMTYwCisrLmFsaWduIDY0CisrU0lHTUE6CisrLmJ5dGUgIDAsICAyLCAgNCwgIDYsICAxLCAgMywgIDUsICA3LCAxNCwgIDgsIDEwLCAxMiwgMTUsICA5LCAxMSwgMTMKKysuYnl0ZSAxNCwgIDQsICA5LCAxMywgMTAsICA4LCAxNSwgIDYsICA1LCAgMSwgIDAsIDExLCAgMywgMTIsICAyLCAgNworKy5ieXRlIDExLCAxMiwgIDUsIDE1LCAgOCwgIDAsICAyLCAxMywgIDksIDEwLCAgMywgIDcsICA0LCAxNCwgIDYsICAxCisrLmJ5dGUgIDcsICAzLCAxMywgMTEsICA5LCAgMSwgMTIsIDE0LCAxNSwgIDIsICA1LCAgNCwgIDgsICA2LCAxMCwgIDAKKysuYnl0ZSAgOSwgIDUsICAyLCAxMCwgIDAsICA3LCAgNCwgMTUsICAzLCAxNCwgMTEsICA2LCAxMywgIDEsIDEyLCAgOAorKy5ieXRlICAyLCAgNiwgIDAsICA4LCAxMiwgMTAsIDExLCAgMywgIDEsICA0LCAgNywgMTUsICA5LCAxMywgIDUsIDE0CisrLmJ5dGUgMTIsICAxLCAxNCwgIDQsICA1LCAxNSwgMTMsIDEwLCAgOCwgIDAsICA2LCAgOSwgMTEsICA3LCAgMywgIDIKKysuYnl0ZSAxMywgIDcsIDEyLCAgMywgMTEsIDE0LCAgMSwgIDksICAyLCAgNSwgMTUsICA4LCAxMCwgIDAsICA0LCAgNgorKy5ieXRlICA2LCAxNCwgMTEsICAwLCAxNSwgIDksICAzLCAgOCwgMTAsIDEyLCAxMywgIDEsICA1LCAgMiwgIDcsICA0CisrLmJ5dGUgMTAsICA4LCAgNywgIDEsICAyLCAgNCwgIDYsICA1LCAxMywgMTUsICA5LCAgMywgIDAsIDExLCAxNCwgMTIKKysjaWZkZWYgQ09ORklHX0FTX0FWWDUxMgorKy5zZWN0aW9uIC5yb2RhdGEuY3N0NjQuQkxBS0UyU19TSUdNQTIsICJhTSIsIEBwcm9nYml0cywgNjQwCisrLmFsaWduIDY0CisrU0lHTUEyOgorKy5sb25nICAwLCAgMiwgIDQsICA2LCAgMSwgIDMsICA1LCAgNywgMTQsICA4LCAxMCwgMTIsIDE1LCAgOSwgMTEsIDEzCisrLmxvbmcgIDgsICAyLCAxMywgMTUsIDEwLCAgOSwgMTIsICAzLCAgNiwgIDQsICAwLCAxNCwgIDUsIDExLCAgMSwgIDcKKysubG9uZyAxMSwgMTMsICA4LCAgNiwgIDUsIDEwLCAxNCwgIDMsICAyLCAgNCwgMTIsIDE1LCAgMSwgIDAsICA3LCAgOQorKy5sb25nIDExLCAxMCwgIDcsICAwLCAgOCwgMTUsICAxLCAxMywgIDMsICA2LCAgMiwgMTIsICA0LCAxNCwgIDksICA1CisrLmxvbmcgIDQsIDEwLCAgOSwgMTQsIDE1LCAgMCwgMTEsICA4LCAgMSwgIDcsICAzLCAxMywgIDIsICA1LCAgNiwgMTIKKysubG9uZyAgMiwgMTEsICA0LCAxNSwgMTQsICAzLCAxMCwgIDgsIDEzLCAgNiwgIDUsICA3LCAgMCwgMTIsICAxLCAgOQorKy5sb25nICA0LCAgOCwgMTUsICA5LCAxNCwgMTEsIDEzLCAgNSwgIDMsICAyLCAgMSwgMTIsICA2LCAxMCwgIDcsICAwCisrLmxvbmcgIDYsIDEzLCAgMCwgMTQsIDEyLCAgMiwgIDEsIDExLCAxNSwgIDQsICA1LCAgOCwgIDcsICA5LCAgMywgMTAKKysubG9uZyAxNSwgIDUsICA0LCAxMywgMTAsICA3LCAgMywgMTEsIDEyLCAgMiwgIDAsICA2LCAgOSwgIDgsICAxLCAxNAorKy5sb25nICA4LCAgNywgMTQsIDExLCAxMywgMTUsICAwLCAxMiwgMTAsICA0LCAgNSwgIDYsICAzLCAgMiwgIDEsICA5CisrI2VuZGlmIC8qIENPTkZJR19BU19BVlg1MTIgKi8KKysKKysudGV4dAorKyNpZmRlZiBDT05GSUdfQVNfU1NTRTMKKytFTlRSWShibGFrZTJzX2NvbXByZXNzX3Nzc2UzKQorKwl0ZXN0cQkJJXJkeCwlcmR4CisrCWplCQkuTGVuZG9mbG9vcAorKwltb3ZkcXUJCSglcmRpKSwleG1tMAorKwltb3ZkcXUJCTB4MTAoJXJkaSksJXhtbTEKKysJbW92ZHFhCQlST1QxNiglcmlwKSwleG1tMTIKKysJbW92ZHFhCQlST1IzMjgoJXJpcCksJXhtbTEzCisrCW1vdmRxdQkJMHgyMCglcmRpKSwleG1tMTQKKysJbW92cQkJJXJjeCwleG1tMTUKKysJbGVhcQkJU0lHTUErMHhhMCglcmlwKSwlcjgKKysJam1wCQkuTGJlZ2lub2Zsb29wCisrCS5hbGlnbgkJMzIKKysuTGJlZ2lub2Zsb29wOgorKwltb3ZkcWEJCSV4bW0wLCV4bW0xMAorKwltb3ZkcWEJCSV4bW0xLCV4bW0xMQorKwlwYWRkcQkJJXhtbTE1LCV4bW0xNAorKwltb3ZkcWEJCUlWKCVyaXApLCV4bW0yCisrCW1vdmRxYQkJJXhtbTE0LCV4bW0zCisrCXB4b3IJCUlWKzB4MTAoJXJpcCksJXhtbTMKKysJbGVhcQkJU0lHTUEoJXJpcCksJXJjeAorKy5Mcm91bmRsb29wOgorKwltb3Z6YmwJCSglcmN4KSwlZWF4CisrCW1vdmQJCSglcnNpLCVyYXgsNCksJXhtbTQKKysJbW92emJsCQkweDEoJXJjeCksJWVheAorKwltb3ZkCQkoJXJzaSwlcmF4LDQpLCV4bW01CisrCW1vdnpibAkJMHgyKCVyY3gpLCVlYXgKKysJbW92ZAkJKCVyc2ksJXJheCw0KSwleG1tNgorKwltb3Z6YmwJCTB4MyglcmN4KSwlZWF4CisrCW1vdmQJCSglcnNpLCVyYXgsNCksJXhtbTcKKysJcHVucGNrbGRxCSV4bW01LCV4bW00CisrCXB1bnBja2xkcQkleG1tNywleG1tNgorKwlwdW5wY2tscWRxCSV4bW02LCV4bW00CisrCXBhZGRkCQkleG1tNCwleG1tMAorKwlwYWRkZAkJJXhtbTEsJXhtbTAKKysJcHhvcgkJJXhtbTAsJXhtbTMKKysJcHNodWZiCQkleG1tMTIsJXhtbTMKKysJcGFkZGQJCSV4bW0zLCV4bW0yCisrCXB4b3IJCSV4bW0yLCV4bW0xCisrCW1vdmRxYQkJJXhtbTEsJXhtbTgKKysJcHNybGQJCSQweGMsJXhtbTEKKysJcHNsbGQJCSQweDE0LCV4bW04CisrCXBvcgkJJXhtbTgsJXhtbTEKKysJbW92emJsCQkweDQoJXJjeCksJWVheAorKwltb3ZkCQkoJXJzaSwlcmF4LDQpLCV4bW01CisrCW1vdnpibAkJMHg1KCVyY3gpLCVlYXgKKysJbW92ZAkJKCVyc2ksJXJheCw0KSwleG1tNgorKwltb3Z6YmwJCTB4NiglcmN4KSwlZWF4CisrCW1vdmQJCSglcnNpLCVyYXgsNCksJXhtbTcKKysJbW92emJsCQkweDcoJXJjeCksJWVheAorKwltb3ZkCQkoJXJzaSwlcmF4LDQpLCV4bW00CisrCXB1bnBja2xkcQkleG1tNiwleG1tNQorKwlwdW5wY2tsZHEJJXhtbTQsJXhtbTcKKysJcHVucGNrbHFkcQkleG1tNywleG1tNQorKwlwYWRkZAkJJXhtbTUsJXhtbTAKKysJcGFkZGQJCSV4bW0xLCV4bW0wCisrCXB4b3IJCSV4bW0wLCV4bW0zCisrCXBzaHVmYgkJJXhtbTEzLCV4bW0zCisrCXBhZGRkCQkleG1tMywleG1tMgorKwlweG9yCQkleG1tMiwleG1tMQorKwltb3ZkcWEJCSV4bW0xLCV4bW04CisrCXBzcmxkCQkkMHg3LCV4bW0xCisrCXBzbGxkCQkkMHgxOSwleG1tOAorKwlwb3IJCSV4bW04LCV4bW0xCisrCXBzaHVmZAkJJDB4OTMsJXhtbTAsJXhtbTAKKysJcHNodWZkCQkkMHg0ZSwleG1tMywleG1tMworKwlwc2h1ZmQJCSQweDM5LCV4bW0yLCV4bW0yCisrCW1vdnpibAkJMHg4KCVyY3gpLCVlYXgKKysJbW92ZAkJKCVyc2ksJXJheCw0KSwleG1tNgorKwltb3Z6YmwJCTB4OSglcmN4KSwlZWF4CisrCW1vdmQJCSglcnNpLCVyYXgsNCksJXhtbTcKKysJbW92emJsCQkweGEoJXJjeCksJWVheAorKwltb3ZkCQkoJXJzaSwlcmF4LDQpLCV4bW00CisrCW1vdnpibAkJMHhiKCVyY3gpLCVlYXgKKysJbW92ZAkJKCVyc2ksJXJheCw0KSwleG1tNQorKwlwdW5wY2tsZHEJJXhtbTcsJXhtbTYKKysJcHVucGNrbGRxCSV4bW01LCV4bW00CisrCXB1bnBja2xxZHEJJXhtbTQsJXhtbTYKKysJcGFkZGQJCSV4bW02LCV4bW0wCisrCXBhZGRkCQkleG1tMSwleG1tMAorKwlweG9yCQkleG1tMCwleG1tMworKwlwc2h1ZmIJCSV4bW0xMiwleG1tMworKwlwYWRkZAkJJXhtbTMsJXhtbTIKKysJcHhvcgkJJXhtbTIsJXhtbTEKKysJbW92ZHFhCQkleG1tMSwleG1tOAorKwlwc3JsZAkJJDB4YywleG1tMQorKwlwc2xsZAkJJDB4MTQsJXhtbTgKKysJcG9yCQkleG1tOCwleG1tMQorKwltb3Z6YmwJCTB4YyglcmN4KSwlZWF4CisrCW1vdmQJCSglcnNpLCVyYXgsNCksJXhtbTcKKysJbW92emJsCQkweGQoJXJjeCksJWVheAorKwltb3ZkCQkoJXJzaSwlcmF4LDQpLCV4bW00CisrCW1vdnpibAkJMHhlKCVyY3gpLCVlYXgKKysJbW92ZAkJKCVyc2ksJXJheCw0KSwleG1tNQorKwltb3Z6YmwJCTB4ZiglcmN4KSwlZWF4CisrCW1vdmQJCSglcnNpLCVyYXgsNCksJXhtbTYKKysJcHVucGNrbGRxCSV4bW00LCV4bW03CisrCXB1bnBja2xkcQkleG1tNiwleG1tNQorKwlwdW5wY2tscWRxCSV4bW01LCV4bW03CisrCXBhZGRkCQkleG1tNywleG1tMAorKwlwYWRkZAkJJXhtbTEsJXhtbTAKKysJcHhvcgkJJXhtbTAsJXhtbTMKKysJcHNodWZiCQkleG1tMTMsJXhtbTMKKysJcGFkZGQJCSV4bW0zLCV4bW0yCisrCXB4b3IJCSV4bW0yLCV4bW0xCisrCW1vdmRxYQkJJXhtbTEsJXhtbTgKKysJcHNybGQJCSQweDcsJXhtbTEKKysJcHNsbGQJCSQweDE5LCV4bW04CisrCXBvcgkJJXhtbTgsJXhtbTEKKysJcHNodWZkCQkkMHgzOSwleG1tMCwleG1tMAorKwlwc2h1ZmQJCSQweDRlLCV4bW0zLCV4bW0zCisrCXBzaHVmZAkJJDB4OTMsJXhtbTIsJXhtbTIKKysJYWRkcQkJJDB4MTAsJXJjeAorKwljbXBxCQklcjgsJXJjeAorKwlqbnoJCS5Mcm91bmRsb29wCisrCXB4b3IJCSV4bW0yLCV4bW0wCisrCXB4b3IJCSV4bW0zLCV4bW0xCisrCXB4b3IJCSV4bW0xMCwleG1tMAorKwlweG9yCQkleG1tMTEsJXhtbTEKKysJYWRkcQkJJDB4NDAsJXJzaQorKwlkZWNxCQklcmR4CisrCWpuegkJLkxiZWdpbm9mbG9vcAorKwltb3ZkcXUJCSV4bW0wLCglcmRpKQorKwltb3ZkcXUJCSV4bW0xLDB4MTAoJXJkaSkKKysJbW92ZHF1CQkleG1tMTQsMHgyMCglcmRpKQorKy5MZW5kb2Zsb29wOgorKwlyZXQKKytFTkRQUk9DKGJsYWtlMnNfY29tcHJlc3Nfc3NzZTMpCisrI2VuZGlmIC8qIENPTkZJR19BU19TU1NFMyAqLworKworKyNpZmRlZiBDT05GSUdfQVNfQVZYNTEyCisrRU5UUlkoYmxha2Uyc19jb21wcmVzc19hdng1MTIpCisrCXZtb3ZkcXUJCSglcmRpKSwleG1tMAorKwl2bW92ZHF1CQkweDEwKCVyZGkpLCV4bW0xCisrCXZtb3ZkcXUJCTB4MjAoJXJkaSksJXhtbTQKKysJdm1vdnEJCSVyY3gsJXhtbTUKKysJdm1vdmRxYQkJSVYoJXJpcCksJXhtbTE0CisrCXZtb3ZkcWEJCUlWKzE2KCVyaXApLCV4bW0xNQorKwlqbXAJCS5MYmxha2Uyc19jb21wcmVzc19hdng1MTJfbWFpbmxvb3AKKysuYWxpZ24gMzIKKysuTGJsYWtlMnNfY29tcHJlc3NfYXZ4NTEyX21haW5sb29wOgorKwl2bW92ZHFhCQkleG1tMCwleG1tMTAKKysJdm1vdmRxYQkJJXhtbTEsJXhtbTExCisrCXZwYWRkcQkJJXhtbTUsJXhtbTQsJXhtbTQKKysJdm1vdmRxYQkJJXhtbTE0LCV4bW0yCisrCXZweG9yCQkleG1tMTUsJXhtbTQsJXhtbTMKKysJdm1vdmRxdQkJKCVyc2kpLCV5bW02CisrCXZtb3ZkcXUJCTB4MjAoJXJzaSksJXltbTcKKysJYWRkcQkJJDB4NDAsJXJzaQorKwlsZWFxCQlTSUdNQTIoJXJpcCksJXJheAorKwltb3ZiCQkkMHhhLCVjbAorKy5MYmxha2Uyc19jb21wcmVzc19hdng1MTJfcm91bmRsb29wOgorKwlhZGRxCQkkMHg0MCwlcmF4CisrCXZtb3ZkcWEJCS0weDQwKCVyYXgpLCV5bW04CisrCXZtb3ZkcWEJCS0weDIwKCVyYXgpLCV5bW05CisrCXZwZXJtaTJkCSV5bW03LCV5bW02LCV5bW04CisrCXZwZXJtaTJkCSV5bW03LCV5bW02LCV5bW05CisrCXZtb3ZkcWEJCSV5bW04LCV5bW02CisrCXZtb3ZkcWEJCSV5bW05LCV5bW03CisrCXZwYWRkZAkJJXhtbTgsJXhtbTAsJXhtbTAKKysJdnBhZGRkCQkleG1tMSwleG1tMCwleG1tMAorKwl2cHhvcgkJJXhtbTAsJXhtbTMsJXhtbTMKKysJdnByb3JkCQkkMHgxMCwleG1tMywleG1tMworKwl2cGFkZGQJCSV4bW0zLCV4bW0yLCV4bW0yCisrCXZweG9yCQkleG1tMiwleG1tMSwleG1tMQorKwl2cHJvcmQJCSQweGMsJXhtbTEsJXhtbTEKKysJdmV4dHJhY3RpMTI4CSQweDEsJXltbTgsJXhtbTgKKysJdnBhZGRkCQkleG1tOCwleG1tMCwleG1tMAorKwl2cGFkZGQJCSV4bW0xLCV4bW0wLCV4bW0wCisrCXZweG9yCQkleG1tMCwleG1tMywleG1tMworKwl2cHJvcmQJCSQweDgsJXhtbTMsJXhtbTMKKysJdnBhZGRkCQkleG1tMywleG1tMiwleG1tMgorKwl2cHhvcgkJJXhtbTIsJXhtbTEsJXhtbTEKKysJdnByb3JkCQkkMHg3LCV4bW0xLCV4bW0xCisrCXZwc2h1ZmQJCSQweDkzLCV4bW0wLCV4bW0wCisrCXZwc2h1ZmQJCSQweDRlLCV4bW0zLCV4bW0zCisrCXZwc2h1ZmQJCSQweDM5LCV4bW0yLCV4bW0yCisrCXZwYWRkZAkJJXhtbTksJXhtbTAsJXhtbTAKKysJdnBhZGRkCQkleG1tMSwleG1tMCwleG1tMAorKwl2cHhvcgkJJXhtbTAsJXhtbTMsJXhtbTMKKysJdnByb3JkCQkkMHgxMCwleG1tMywleG1tMworKwl2cGFkZGQJCSV4bW0zLCV4bW0yLCV4bW0yCisrCXZweG9yCQkleG1tMiwleG1tMSwleG1tMQorKwl2cHJvcmQJCSQweGMsJXhtbTEsJXhtbTEKKysJdmV4dHJhY3RpMTI4CSQweDEsJXltbTksJXhtbTkKKysJdnBhZGRkCQkleG1tOSwleG1tMCwleG1tMAorKwl2cGFkZGQJCSV4bW0xLCV4bW0wLCV4bW0wCisrCXZweG9yCQkleG1tMCwleG1tMywleG1tMworKwl2cHJvcmQJCSQweDgsJXhtbTMsJXhtbTMKKysJdnBhZGRkCQkleG1tMywleG1tMiwleG1tMgorKwl2cHhvcgkJJXhtbTIsJXhtbTEsJXhtbTEKKysJdnByb3JkCQkkMHg3LCV4bW0xLCV4bW0xCisrCXZwc2h1ZmQJCSQweDM5LCV4bW0wLCV4bW0wCisrCXZwc2h1ZmQJCSQweDRlLCV4bW0zLCV4bW0zCisrCXZwc2h1ZmQJCSQweDkzLCV4bW0yLCV4bW0yCisrCWRlY2IJCSVjbAorKwlqbmUJCS5MYmxha2Uyc19jb21wcmVzc19hdng1MTJfcm91bmRsb29wCisrCXZweG9yCQkleG1tMTAsJXhtbTAsJXhtbTAKKysJdnB4b3IJCSV4bW0xMSwleG1tMSwleG1tMQorKwl2cHhvcgkJJXhtbTIsJXhtbTAsJXhtbTAKKysJdnB4b3IJCSV4bW0zLCV4bW0xLCV4bW0xCisrCWRlY3EJCSVyZHgKKysJam5lCQkuTGJsYWtlMnNfY29tcHJlc3NfYXZ4NTEyX21haW5sb29wCisrCXZtb3ZkcXUJCSV4bW0wLCglcmRpKQorKwl2bW92ZHF1CQkleG1tMSwweDEwKCVyZGkpCisrCXZtb3ZkcXUJCSV4bW00LDB4MjAoJXJkaSkKKysJdnplcm91cHBlcgorKwlyZXRxCisrRU5EUFJPQyhibGFrZTJzX2NvbXByZXNzX2F2eDUxMikKKysjZW5kaWYgLyogQ09ORklHX0FTX0FWWDUxMiAqLworLS0tIC9kZXYvbnVsbAorKysrIGIvYXJjaC94ODYvY3J5cHRvL2JsYWtlMnMtZ2x1ZS5jCitAQCAtMCwwICsxLDIzMyBAQAorKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVAorKy8qCisrICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKyAqLworKworKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvYmxha2Uycy5oPgorKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvc2ltZC5oPgorKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvaGFzaC5oPgorKworKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorKyNpbmNsdWRlIDxsaW51eC9qdW1wX2xhYmVsLmg+CisrI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKysKKysjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KKysjaW5jbHVkZSA8YXNtL2ZwdS9hcGkuaD4KKysjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorKyNpbmNsdWRlIDxhc20vc2ltZC5oPgorKworK2FzbWxpbmthZ2Ugdm9pZCBibGFrZTJzX2NvbXByZXNzX3Nzc2UzKHN0cnVjdCBibGFrZTJzX3N0YXRlICpzdGF0ZSwKKysJCQkJICAgICAgIGNvbnN0IHU4ICpibG9jaywgY29uc3Qgc2l6ZV90IG5ibG9ja3MsCisrCQkJCSAgICAgICBjb25zdCB1MzIgaW5jKTsKKythc21saW5rYWdlIHZvaWQgYmxha2Uyc19jb21wcmVzc19hdng1MTIoc3RydWN0IGJsYWtlMnNfc3RhdGUgKnN0YXRlLAorKwkJCQkJY29uc3QgdTggKmJsb2NrLCBjb25zdCBzaXplX3QgbmJsb2NrcywKKysJCQkJCWNvbnN0IHUzMiBpbmMpOworKworK3N0YXRpYyBfX3JvX2FmdGVyX2luaXQgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoYmxha2Uyc191c2Vfc3NzZTMpOworK3N0YXRpYyBfX3JvX2FmdGVyX2luaXQgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoYmxha2Uyc191c2VfYXZ4NTEyKTsKKysKKyt2b2lkIGJsYWtlMnNfY29tcHJlc3NfYXJjaChzdHJ1Y3QgYmxha2Uyc19zdGF0ZSAqc3RhdGUsCisrCQkJICAgY29uc3QgdTggKmJsb2NrLCBzaXplX3QgbmJsb2NrcywKKysJCQkgICBjb25zdCB1MzIgaW5jKQorK3sKKysJLyogU0lNRCBkaXNhYmxlcyBwcmVlbXB0aW9uLCBzbyByZWxheCBhZnRlciBwcm9jZXNzaW5nIGVhY2ggcGFnZS4gKi8KKysJQlVJTERfQlVHX09OKFBBR0VfU0laRSAvIEJMQUtFMlNfQkxPQ0tfU0laRSA8IDgpOworKworKwlpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KCZibGFrZTJzX3VzZV9zc3NlMykgfHwgIWNyeXB0b19zaW1kX3VzYWJsZSgpKSB7CisrCQlibGFrZTJzX2NvbXByZXNzX2dlbmVyaWMoc3RhdGUsIGJsb2NrLCBuYmxvY2tzLCBpbmMpOworKwkJcmV0dXJuOworKwl9CisrCisrCWZvciAoOzspIHsKKysJCWNvbnN0IHNpemVfdCBibG9ja3MgPSBtaW5fdChzaXplX3QsIG5ibG9ja3MsCisrCQkJCQkgICAgUEFHRV9TSVpFIC8gQkxBS0UyU19CTE9DS19TSVpFKTsKKysKKysJCWtlcm5lbF9mcHVfYmVnaW4oKTsKKysJCWlmIChJU19FTkFCTEVEKENPTkZJR19BU19BVlg1MTIpICYmCisrCQkgICAgc3RhdGljX2JyYW5jaF9saWtlbHkoJmJsYWtlMnNfdXNlX2F2eDUxMikpCisrCQkJYmxha2Uyc19jb21wcmVzc19hdng1MTIoc3RhdGUsIGJsb2NrLCBibG9ja3MsIGluYyk7CisrCQllbHNlCisrCQkJYmxha2Uyc19jb21wcmVzc19zc3NlMyhzdGF0ZSwgYmxvY2ssIGJsb2NrcywgaW5jKTsKKysJCWtlcm5lbF9mcHVfZW5kKCk7CisrCisrCQluYmxvY2tzIC09IGJsb2NrczsKKysJCWlmICghbmJsb2NrcykKKysJCQlicmVhazsKKysJCWJsb2NrICs9IGJsb2NrcyAqIEJMQUtFMlNfQkxPQ0tfU0laRTsKKysJfQorK30KKytFWFBPUlRfU1lNQk9MKGJsYWtlMnNfY29tcHJlc3NfYXJjaCk7CisrCisrc3RhdGljIGludCBjcnlwdG9fYmxha2Uyc19zZXRrZXkoc3RydWN0IGNyeXB0b19zaGFzaCAqdGZtLCBjb25zdCB1OCAqa2V5LAorKwkJCQkgdW5zaWduZWQgaW50IGtleWxlbikKKyt7CisrCXN0cnVjdCBibGFrZTJzX3RmbV9jdHggKnRjdHggPSBjcnlwdG9fc2hhc2hfY3R4KHRmbSk7CisrCisrCWlmIChrZXlsZW4gPT0gMCB8fCBrZXlsZW4gPiBCTEFLRTJTX0tFWV9TSVpFKSB7CisrCQljcnlwdG9fc2hhc2hfc2V0X2ZsYWdzKHRmbSwgQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9MRU4pOworKwkJcmV0dXJuIC1FSU5WQUw7CisrCX0KKysKKysJbWVtY3B5KHRjdHgtPmtleSwga2V5LCBrZXlsZW4pOworKwl0Y3R4LT5rZXlsZW4gPSBrZXlsZW47CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IGNyeXB0b19ibGFrZTJzX2luaXQoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MpCisreworKwlzdHJ1Y3QgYmxha2Uyc190Zm1fY3R4ICp0Y3R4ID0gY3J5cHRvX3NoYXNoX2N0eChkZXNjLT50Zm0pOworKwlzdHJ1Y3QgYmxha2Uyc19zdGF0ZSAqc3RhdGUgPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKysJY29uc3QgaW50IG91dGxlbiA9IGNyeXB0b19zaGFzaF9kaWdlc3RzaXplKGRlc2MtPnRmbSk7CisrCisrCWlmICh0Y3R4LT5rZXlsZW4pCisrCQlibGFrZTJzX2luaXRfa2V5KHN0YXRlLCBvdXRsZW4sIHRjdHgtPmtleSwgdGN0eC0+a2V5bGVuKTsKKysJZWxzZQorKwkJYmxha2Uyc19pbml0KHN0YXRlLCBvdXRsZW4pOworKworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGludCBjcnlwdG9fYmxha2Uyc191cGRhdGUoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIGNvbnN0IHU4ICppbiwKKysJCQkJIHVuc2lnbmVkIGludCBpbmxlbikKKyt7CisrCXN0cnVjdCBibGFrZTJzX3N0YXRlICpzdGF0ZSA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworKwljb25zdCBzaXplX3QgZmlsbCA9IEJMQUtFMlNfQkxPQ0tfU0laRSAtIHN0YXRlLT5idWZsZW47CisrCisrCWlmICh1bmxpa2VseSghaW5sZW4pKQorKwkJcmV0dXJuIDA7CisrCWlmIChpbmxlbiA+IGZpbGwpIHsKKysJCW1lbWNweShzdGF0ZS0+YnVmICsgc3RhdGUtPmJ1ZmxlbiwgaW4sIGZpbGwpOworKwkJYmxha2Uyc19jb21wcmVzc19hcmNoKHN0YXRlLCBzdGF0ZS0+YnVmLCAxLCBCTEFLRTJTX0JMT0NLX1NJWkUpOworKwkJc3RhdGUtPmJ1ZmxlbiA9IDA7CisrCQlpbiArPSBmaWxsOworKwkJaW5sZW4gLT0gZmlsbDsKKysJfQorKwlpZiAoaW5sZW4gPiBCTEFLRTJTX0JMT0NLX1NJWkUpIHsKKysJCWNvbnN0IHNpemVfdCBuYmxvY2tzID0gRElWX1JPVU5EX1VQKGlubGVuLCBCTEFLRTJTX0JMT0NLX1NJWkUpOworKwkJLyogSGFzaCBvbmUgbGVzcyAoZnVsbCkgYmxvY2sgdGhhbiBzdHJpY3RseSBwb3NzaWJsZSAqLworKwkJYmxha2Uyc19jb21wcmVzc19hcmNoKHN0YXRlLCBpbiwgbmJsb2NrcyAtIDEsIEJMQUtFMlNfQkxPQ0tfU0laRSk7CisrCQlpbiArPSBCTEFLRTJTX0JMT0NLX1NJWkUgKiAobmJsb2NrcyAtIDEpOworKwkJaW5sZW4gLT0gQkxBS0UyU19CTE9DS19TSVpFICogKG5ibG9ja3MgLSAxKTsKKysJfQorKwltZW1jcHkoc3RhdGUtPmJ1ZiArIHN0YXRlLT5idWZsZW4sIGluLCBpbmxlbik7CisrCXN0YXRlLT5idWZsZW4gKz0gaW5sZW47CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IGNyeXB0b19ibGFrZTJzX2ZpbmFsKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCB1OCAqb3V0KQorK3sKKysJc3RydWN0IGJsYWtlMnNfc3RhdGUgKnN0YXRlID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CisrCisrCWJsYWtlMnNfc2V0X2xhc3RibG9jayhzdGF0ZSk7CisrCW1lbXNldChzdGF0ZS0+YnVmICsgc3RhdGUtPmJ1ZmxlbiwgMCwKKysJICAgICAgIEJMQUtFMlNfQkxPQ0tfU0laRSAtIHN0YXRlLT5idWZsZW4pOyAvKiBQYWRkaW5nICovCisrCWJsYWtlMnNfY29tcHJlc3NfYXJjaChzdGF0ZSwgc3RhdGUtPmJ1ZiwgMSwgc3RhdGUtPmJ1Zmxlbik7CisrCWNwdV90b19sZTMyX2FycmF5KHN0YXRlLT5oLCBBUlJBWV9TSVpFKHN0YXRlLT5oKSk7CisrCW1lbWNweShvdXQsIHN0YXRlLT5oLCBzdGF0ZS0+b3V0bGVuKTsKKysJbWVtemVyb19leHBsaWNpdChzdGF0ZSwgc2l6ZW9mKCpzdGF0ZSkpOworKworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIHN0cnVjdCBzaGFzaF9hbGcgYmxha2Uyc19hbGdzW10gPSB7eworKwkuYmFzZS5jcmFfbmFtZQkJPSAiYmxha2Uycy0xMjgiLAorKwkuYmFzZS5jcmFfZHJpdmVyX25hbWUJPSAiYmxha2Uycy0xMjgteDg2IiwKKysJLmJhc2UuY3JhX2ZsYWdzCQk9IENSWVBUT19BTEdfT1BUSU9OQUxfS0VZLAorKwkuYmFzZS5jcmFfY3R4c2l6ZQk9IHNpemVvZihzdHJ1Y3QgYmxha2Uyc190Zm1fY3R4KSwKKysJLmJhc2UuY3JhX3ByaW9yaXR5CT0gMjAwLAorKwkuYmFzZS5jcmFfYmxvY2tzaXplICAgICA9IEJMQUtFMlNfQkxPQ0tfU0laRSwKKysJLmJhc2UuY3JhX21vZHVsZQk9IFRISVNfTU9EVUxFLAorKworKwkuZGlnZXN0c2l6ZQkJPSBCTEFLRTJTXzEyOF9IQVNIX1NJWkUsCisrCS5zZXRrZXkJCQk9IGNyeXB0b19ibGFrZTJzX3NldGtleSwKKysJLmluaXQJCQk9IGNyeXB0b19ibGFrZTJzX2luaXQsCisrCS51cGRhdGUJCQk9IGNyeXB0b19ibGFrZTJzX3VwZGF0ZSwKKysJLmZpbmFsCQkJPSBjcnlwdG9fYmxha2Uyc19maW5hbCwKKysJLmRlc2NzaXplCQk9IHNpemVvZihzdHJ1Y3QgYmxha2Uyc19zdGF0ZSksCisrfSwgeworKwkuYmFzZS5jcmFfbmFtZQkJPSAiYmxha2Uycy0xNjAiLAorKwkuYmFzZS5jcmFfZHJpdmVyX25hbWUJPSAiYmxha2Uycy0xNjAteDg2IiwKKysJLmJhc2UuY3JhX2ZsYWdzCQk9IENSWVBUT19BTEdfT1BUSU9OQUxfS0VZLAorKwkuYmFzZS5jcmFfY3R4c2l6ZQk9IHNpemVvZihzdHJ1Y3QgYmxha2Uyc190Zm1fY3R4KSwKKysJLmJhc2UuY3JhX3ByaW9yaXR5CT0gMjAwLAorKwkuYmFzZS5jcmFfYmxvY2tzaXplICAgICA9IEJMQUtFMlNfQkxPQ0tfU0laRSwKKysJLmJhc2UuY3JhX21vZHVsZQk9IFRISVNfTU9EVUxFLAorKworKwkuZGlnZXN0c2l6ZQkJPSBCTEFLRTJTXzE2MF9IQVNIX1NJWkUsCisrCS5zZXRrZXkJCQk9IGNyeXB0b19ibGFrZTJzX3NldGtleSwKKysJLmluaXQJCQk9IGNyeXB0b19ibGFrZTJzX2luaXQsCisrCS51cGRhdGUJCQk9IGNyeXB0b19ibGFrZTJzX3VwZGF0ZSwKKysJLmZpbmFsCQkJPSBjcnlwdG9fYmxha2Uyc19maW5hbCwKKysJLmRlc2NzaXplCQk9IHNpemVvZihzdHJ1Y3QgYmxha2Uyc19zdGF0ZSksCisrfSwgeworKwkuYmFzZS5jcmFfbmFtZQkJPSAiYmxha2Uycy0yMjQiLAorKwkuYmFzZS5jcmFfZHJpdmVyX25hbWUJPSAiYmxha2Uycy0yMjQteDg2IiwKKysJLmJhc2UuY3JhX2ZsYWdzCQk9IENSWVBUT19BTEdfT1BUSU9OQUxfS0VZLAorKwkuYmFzZS5jcmFfY3R4c2l6ZQk9IHNpemVvZihzdHJ1Y3QgYmxha2Uyc190Zm1fY3R4KSwKKysJLmJhc2UuY3JhX3ByaW9yaXR5CT0gMjAwLAorKwkuYmFzZS5jcmFfYmxvY2tzaXplICAgICA9IEJMQUtFMlNfQkxPQ0tfU0laRSwKKysJLmJhc2UuY3JhX21vZHVsZQk9IFRISVNfTU9EVUxFLAorKworKwkuZGlnZXN0c2l6ZQkJPSBCTEFLRTJTXzIyNF9IQVNIX1NJWkUsCisrCS5zZXRrZXkJCQk9IGNyeXB0b19ibGFrZTJzX3NldGtleSwKKysJLmluaXQJCQk9IGNyeXB0b19ibGFrZTJzX2luaXQsCisrCS51cGRhdGUJCQk9IGNyeXB0b19ibGFrZTJzX3VwZGF0ZSwKKysJLmZpbmFsCQkJPSBjcnlwdG9fYmxha2Uyc19maW5hbCwKKysJLmRlc2NzaXplCQk9IHNpemVvZihzdHJ1Y3QgYmxha2Uyc19zdGF0ZSksCisrfSwgeworKwkuYmFzZS5jcmFfbmFtZQkJPSAiYmxha2Uycy0yNTYiLAorKwkuYmFzZS5jcmFfZHJpdmVyX25hbWUJPSAiYmxha2Uycy0yNTYteDg2IiwKKysJLmJhc2UuY3JhX2ZsYWdzCQk9IENSWVBUT19BTEdfT1BUSU9OQUxfS0VZLAorKwkuYmFzZS5jcmFfY3R4c2l6ZQk9IHNpemVvZihzdHJ1Y3QgYmxha2Uyc190Zm1fY3R4KSwKKysJLmJhc2UuY3JhX3ByaW9yaXR5CT0gMjAwLAorKwkuYmFzZS5jcmFfYmxvY2tzaXplICAgICA9IEJMQUtFMlNfQkxPQ0tfU0laRSwKKysJLmJhc2UuY3JhX21vZHVsZQk9IFRISVNfTU9EVUxFLAorKworKwkuZGlnZXN0c2l6ZQkJPSBCTEFLRTJTXzI1Nl9IQVNIX1NJWkUsCisrCS5zZXRrZXkJCQk9IGNyeXB0b19ibGFrZTJzX3NldGtleSwKKysJLmluaXQJCQk9IGNyeXB0b19ibGFrZTJzX2luaXQsCisrCS51cGRhdGUJCQk9IGNyeXB0b19ibGFrZTJzX3VwZGF0ZSwKKysJLmZpbmFsCQkJPSBjcnlwdG9fYmxha2Uyc19maW5hbCwKKysJLmRlc2NzaXplCQk9IHNpemVvZihzdHJ1Y3QgYmxha2Uyc19zdGF0ZSksCisrfX07CisrCisrc3RhdGljIGludCBfX2luaXQgYmxha2Uyc19tb2RfaW5pdCh2b2lkKQorK3sKKysJaWYgKCFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1NTRTMpKQorKwkJcmV0dXJuIDA7CisrCisrCXN0YXRpY19icmFuY2hfZW5hYmxlKCZibGFrZTJzX3VzZV9zc3NlMyk7CisrCisrCWlmIChJU19FTkFCTEVEKENPTkZJR19BU19BVlg1MTIpICYmCisrCSAgICBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVZYKSAmJgorKwkgICAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0FWWDIpICYmCisrCSAgICBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVZYNTEyRikgJiYKKysJICAgIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BVlg1MTJWTCkgJiYKKysJICAgIGNwdV9oYXNfeGZlYXR1cmVzKFhGRUFUVVJFX01BU0tfU1NFIHwgWEZFQVRVUkVfTUFTS19ZTU0gfAorKwkJCSAgICAgIFhGRUFUVVJFX01BU0tfQVZYNTEyLCBOVUxMKSkKKysJCXN0YXRpY19icmFuY2hfZW5hYmxlKCZibGFrZTJzX3VzZV9hdng1MTIpOworKworKwlyZXR1cm4gY3J5cHRvX3JlZ2lzdGVyX3NoYXNoZXMoYmxha2Uyc19hbGdzLCBBUlJBWV9TSVpFKGJsYWtlMnNfYWxncykpOworK30KKysKKytzdGF0aWMgdm9pZCBfX2V4aXQgYmxha2Uyc19tb2RfZXhpdCh2b2lkKQorK3sKKysJaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9TU1NFMykpCisrCQljcnlwdG9fdW5yZWdpc3Rlcl9zaGFzaGVzKGJsYWtlMnNfYWxncywgQVJSQVlfU0laRShibGFrZTJzX2FsZ3MpKTsKKyt9CisrCisrbW9kdWxlX2luaXQoYmxha2Uyc19tb2RfaW5pdCk7CisrbW9kdWxlX2V4aXQoYmxha2Uyc19tb2RfZXhpdCk7CisrCisrTU9EVUxFX0FMSUFTX0NSWVBUTygiYmxha2Uycy0xMjgiKTsKKytNT0RVTEVfQUxJQVNfQ1JZUFRPKCJibGFrZTJzLTEyOC14ODYiKTsKKytNT0RVTEVfQUxJQVNfQ1JZUFRPKCJibGFrZTJzLTE2MCIpOworK01PRFVMRV9BTElBU19DUllQVE8oImJsYWtlMnMtMTYwLXg4NiIpOworK01PRFVMRV9BTElBU19DUllQVE8oImJsYWtlMnMtMjI0Iik7CisrTU9EVUxFX0FMSUFTX0NSWVBUTygiYmxha2Uycy0yMjQteDg2Iik7CisrTU9EVUxFX0FMSUFTX0NSWVBUTygiYmxha2Uycy0yNTYiKTsKKytNT0RVTEVfQUxJQVNfQ1JZUFRPKCJibGFrZTJzLTI1Ni14ODYiKTsKKytNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CistLS0gYS9jcnlwdG8vS2NvbmZpZworKysrIGIvY3J5cHRvL0tjb25maWcKK0BAIC02NTcsNiArNjU3LDEyIEBAIGNvbmZpZyBDUllQVE9fQkxBS0UyUworIAorIAkgIFNlZSBodHRwczovL2JsYWtlMi5uZXQgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uCisgCisrY29uZmlnIENSWVBUT19CTEFLRTJTX1g4NgorKwl0cmlzdGF0ZSAiQkxBS0UycyBkaWdlc3QgYWxnb3JpdGhtICh4ODYgYWNjZWxlcmF0ZWQgdmVyc2lvbikiCisrCWRlcGVuZHMgb24gWDg2ICYmIDY0QklUCisrCXNlbGVjdCBDUllQVE9fTElCX0JMQUtFMlNfR0VORVJJQworKwlzZWxlY3QgQ1JZUFRPX0FSQ0hfSEFWRV9MSUJfQkxBS0UyUworKworIGNvbmZpZyBDUllQVE9fQ1JDVDEwRElGCisgCXRyaXN0YXRlICJDUkNUMTBESUYgYWxnb3JpdGhtIgorIAlzZWxlY3QgQ1JZUFRPX0hBU0gKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMjUtY3J5cHRvLWN1cnZlMjU1MTktZ2VuZXJpYy1DLWxpYnJhcnktaW1wbGVtZW50YXRpb25zLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAyNS1jcnlwdG8tY3VydmUyNTUxOS1nZW5lcmljLUMtbGlicmFyeS1pbXBsZW1lbnRhdGlvbnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU4ZGRhOQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMjUtY3J5cHRvLWN1cnZlMjU1MTktZ2VuZXJpYy1DLWxpYnJhcnktaW1wbGVtZW50YXRpb25zLnBhdGNoCkBAIC0wLDAgKzEsMTg0OSBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIkphc29uIEEuIERvbmVuZmVsZCIgPEphc29uQHp4MmM0LmNvbT4KK0RhdGU6IEZyaSwgOCBOb3YgMjAxOSAxMzoyMjozMiArMDEwMAorU3ViamVjdDogW1BBVENIXSBjcnlwdG86IGN1cnZlMjU1MTkgLSBnZW5lcmljIEMgbGlicmFyeSBpbXBsZW1lbnRhdGlvbnMKKworY29tbWl0IDBlZDQyYTZmNDMxZTkzMGIyZThmYWUyMTk1NTQwNmUwOWZlNzVkNzAgdXBzdHJlYW0uCisKK1RoaXMgY29udGFpbnMgdHdvIGZvcm1hbGx5IHZlcmlmaWVkIEMgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBDdXJ2ZTI1NTE5CitzY2FsYXIgbXVsdGlwbGljYXRpb24gZnVuY3Rpb24sIG9uZSBmb3IgMzItYml0IHN5c3RlbXMsIGFuZCBvbmUgZm9yCis2NC1iaXQgc3lzdGVtcyB3aG9zZSBjb21waWxlciBzdXBwb3J0cyBlZmZpY2llbnQgMTI4LWJpdCBpbnRlZ2VyIHR5cGVzLgorTm90IG9ubHkgYXJlIHRoZXNlIGltcGxlbWVudGF0aW9ucyBmb3JtYWxseSB2ZXJpZmllZCwgYnV0IHRoZXkgYXJlIGFsc28KK3RoZSBmYXN0ZXN0IGF2YWlsYWJsZSBDIGltcGxlbWVudGF0aW9ucy4gVGhleSBoYXZlIGJlZW4gbW9kaWZpZWQgdG8gYmUKK2ZyaWVuZGx5IHRvIGtlcm5lbCBzcGFjZSBhbmQgdG8gYmUgZ2VuZXJhbGx5IGxlc3MgaG9ycmVuZG91cyBsb29raW5nLAorYnV0IHN0aWxsIGFuIGVmZm9ydCBoYXMgYmVlbiBtYWRlIHRvIHJldGFpbiB0aGVpciBmb3JtYWxseSB2ZXJpZmllZAorY2hhcmFjdGVyaXN0aWMsIGFuZCBzbyB0aGUgQyBtaWdodCBsb29rIHNsaWdodGx5IHVuaWRpb21hdGljLgorCitUaGUgNjQtYml0IHZlcnNpb24gY29tZXMgZnJvbSBIQUNMKjogaHR0cHM6Ly9naXRodWIuY29tL3Byb2plY3QtZXZlcmVzdC9oYWNsLXN0YXIKK1RoZSAzMi1iaXQgdmVyc2lvbiBjb21lcyBmcm9tIEZpYXQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9taXQtcGx2L2ZpYXQtY3J5cHRvCisKK0luZm9ybWF0aW9uOiBodHRwczovL2NyLnlwLnRvL2VjZGguaHRtbAorCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KK1thcmRiOiAtIG1vdmUgZnJvbSBsaWIvemluYyB0byBsaWIvY3J5cHRvCisgICAgICAgLSByZXBsYWNlIC5jICNpbmNsdWRlcyB3aXRoIEtjb25maWcgYmFzZWQgb2JqZWN0IHNlbGVjdGlvbgorICAgICAgIC0gZHJvcCBzaW1kIGhhbmRsaW5nIGFuZCBzaW1wbGlmeSBzdXBwb3J0IGZvciBwZXItYXJjaCB2ZXJzaW9ucyBdCitTaWduZWQtb2ZmLWJ5OiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgorU2lnbmVkLW9mZi1ieTogSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBpbmNsdWRlL2NyeXB0by9jdXJ2ZTI1NTE5LmggICAgfCAgNzEgKysrCisgbGliL2NyeXB0by9LY29uZmlnICAgICAgICAgICAgIHwgIDI1ICsKKyBsaWIvY3J5cHRvL01ha2VmaWxlICAgICAgICAgICAgfCAgIDUgKworIGxpYi9jcnlwdG8vY3VydmUyNTUxOS1maWF0MzIuYyB8IDg2NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBsaWIvY3J5cHRvL2N1cnZlMjU1MTktaGFjbDY0LmMgfCA3ODggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgbGliL2NyeXB0by9jdXJ2ZTI1NTE5LmMgICAgICAgIHwgIDI1ICsKKyA2IGZpbGVzIGNoYW5nZWQsIDE3NzggaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2NyeXB0by9jdXJ2ZTI1NTE5LmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2NyeXB0by9jdXJ2ZTI1NTE5LWZpYXQzMi5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9jcnlwdG8vY3VydmUyNTUxOS1oYWNsNjQuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvY3J5cHRvL2N1cnZlMjU1MTkuYworCistLS0gL2Rldi9udWxsCisrKysgYi9pbmNsdWRlL2NyeXB0by9jdXJ2ZTI1NTE5LmgKK0BAIC0wLDAgKzEsNzEgQEAKKysvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBNSVQgKi8KKysvKgorKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKysgKi8KKysKKysjaWZuZGVmIENVUlZFMjU1MTlfSAorKyNkZWZpbmUgQ1VSVkUyNTUxOV9ICisrCisrI2luY2x1ZGUgPGNyeXB0by9hbGdhcGkuaD4gLy8gRm9yIGNyeXB0b19tZW1uZXEuCisrI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisrI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorKworK2VudW0gY3VydmUyNTUxOV9sZW5ndGhzIHsKKysJQ1VSVkUyNTUxOV9LRVlfU0laRSA9IDMyCisrfTsKKysKKytleHRlcm4gY29uc3QgdTggY3VydmUyNTUxOV9udWxsX3BvaW50W107CisrZXh0ZXJuIGNvbnN0IHU4IGN1cnZlMjU1MTlfYmFzZV9wb2ludFtdOworKworK3ZvaWQgY3VydmUyNTUxOV9nZW5lcmljKHU4IG91dFtDVVJWRTI1NTE5X0tFWV9TSVpFXSwKKysJCQljb25zdCB1OCBzY2FsYXJbQ1VSVkUyNTUxOV9LRVlfU0laRV0sCisrCQkJY29uc3QgdTggcG9pbnRbQ1VSVkUyNTUxOV9LRVlfU0laRV0pOworKworK3ZvaWQgY3VydmUyNTUxOV9hcmNoKHU4IG91dFtDVVJWRTI1NTE5X0tFWV9TSVpFXSwKKysJCSAgICAgY29uc3QgdTggc2NhbGFyW0NVUlZFMjU1MTlfS0VZX1NJWkVdLAorKwkJICAgICBjb25zdCB1OCBwb2ludFtDVVJWRTI1NTE5X0tFWV9TSVpFXSk7CisrCisrdm9pZCBjdXJ2ZTI1NTE5X2Jhc2VfYXJjaCh1OCBwdWJbQ1VSVkUyNTUxOV9LRVlfU0laRV0sCisrCQkJICBjb25zdCB1OCBzZWNyZXRbQ1VSVkUyNTUxOV9LRVlfU0laRV0pOworKworK3N0YXRpYyBpbmxpbmUKKytib29sIF9fbXVzdF9jaGVjayBjdXJ2ZTI1NTE5KHU4IG15cHVibGljW0NVUlZFMjU1MTlfS0VZX1NJWkVdLAorKwkJCSAgICAgY29uc3QgdTggc2VjcmV0W0NVUlZFMjU1MTlfS0VZX1NJWkVdLAorKwkJCSAgICAgY29uc3QgdTggYmFzZXBvaW50W0NVUlZFMjU1MTlfS0VZX1NJWkVdKQorK3sKKysJaWYgKElTX0VOQUJMRUQoQ09ORklHX0NSWVBUT19BUkNIX0hBVkVfTElCX0NVUlZFMjU1MTkpKQorKwkJY3VydmUyNTUxOV9hcmNoKG15cHVibGljLCBzZWNyZXQsIGJhc2Vwb2ludCk7CisrCWVsc2UKKysJCWN1cnZlMjU1MTlfZ2VuZXJpYyhteXB1YmxpYywgc2VjcmV0LCBiYXNlcG9pbnQpOworKwlyZXR1cm4gY3J5cHRvX21lbW5lcShteXB1YmxpYywgY3VydmUyNTUxOV9udWxsX3BvaW50LAorKwkJCSAgICAgQ1VSVkUyNTUxOV9LRVlfU0laRSk7CisrfQorKworK3N0YXRpYyBpbmxpbmUgYm9vbAorK19fbXVzdF9jaGVjayBjdXJ2ZTI1NTE5X2dlbmVyYXRlX3B1YmxpYyh1OCBwdWJbQ1VSVkUyNTUxOV9LRVlfU0laRV0sCisrCQkJCQljb25zdCB1OCBzZWNyZXRbQ1VSVkUyNTUxOV9LRVlfU0laRV0pCisreworKwlpZiAodW5saWtlbHkoIWNyeXB0b19tZW1uZXEoc2VjcmV0LCBjdXJ2ZTI1NTE5X251bGxfcG9pbnQsCisrCQkJCSAgICBDVVJWRTI1NTE5X0tFWV9TSVpFKSkpCisrCQlyZXR1cm4gZmFsc2U7CisrCisrCWlmIChJU19FTkFCTEVEKENPTkZJR19DUllQVE9fQVJDSF9IQVZFX0xJQl9DVVJWRTI1NTE5KSkKKysJCWN1cnZlMjU1MTlfYmFzZV9hcmNoKHB1Yiwgc2VjcmV0KTsKKysJZWxzZQorKwkJY3VydmUyNTUxOV9nZW5lcmljKHB1Yiwgc2VjcmV0LCBjdXJ2ZTI1NTE5X2Jhc2VfcG9pbnQpOworKwlyZXR1cm4gY3J5cHRvX21lbW5lcShwdWIsIGN1cnZlMjU1MTlfbnVsbF9wb2ludCwgQ1VSVkUyNTUxOV9LRVlfU0laRSk7CisrfQorKworK3N0YXRpYyBpbmxpbmUgdm9pZCBjdXJ2ZTI1NTE5X2NsYW1wX3NlY3JldCh1OCBzZWNyZXRbQ1VSVkUyNTUxOV9LRVlfU0laRV0pCisreworKwlzZWNyZXRbMF0gJj0gMjQ4OworKwlzZWNyZXRbMzFdID0gKHNlY3JldFszMV0gJiAxMjcpIHwgNjQ7CisrfQorKworK3N0YXRpYyBpbmxpbmUgdm9pZCBjdXJ2ZTI1NTE5X2dlbmVyYXRlX3NlY3JldCh1OCBzZWNyZXRbQ1VSVkUyNTUxOV9LRVlfU0laRV0pCisreworKwlnZXRfcmFuZG9tX2J5dGVzX3dhaXQoc2VjcmV0LCBDVVJWRTI1NTE5X0tFWV9TSVpFKTsKKysJY3VydmUyNTUxOV9jbGFtcF9zZWNyZXQoc2VjcmV0KTsKKyt9CisrCisrI2VuZGlmIC8qIENVUlZFMjU1MTlfSCAqLworLS0tIGEvbGliL2NyeXB0by9LY29uZmlnCisrKysgYi9saWIvY3J5cHRvL0tjb25maWcKK0BAIC01OSw2ICs1OSwzMSBAQCBjb25maWcgQ1JZUFRPX0xJQl9DSEFDSEEKKyAJICBieSBlaXRoZXIgdGhlIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gb3IgYW4gYXJjaC1zcGVjaWZpYyBvbmUsIGlmIG9uZQorIAkgIGlzIGF2YWlsYWJsZSBhbmQgZW5hYmxlZC4KKyAKKytjb25maWcgQ1JZUFRPX0FSQ0hfSEFWRV9MSUJfQ1VSVkUyNTUxOQorKwl0cmlzdGF0ZQorKwloZWxwCisrCSAgRGVjbGFyZXMgd2hldGhlciB0aGUgYXJjaGl0ZWN0dXJlIHByb3ZpZGVzIGFuIGFyY2gtc3BlY2lmaWMKKysJICBhY2NlbGVyYXRlZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQ3VydmUyNTUxOSBsaWJyYXJ5IGludGVyZmFjZSwKKysJICBlaXRoZXIgYnVpbHRpbiBvciBhcyBhIG1vZHVsZS4KKysKKytjb25maWcgQ1JZUFRPX0xJQl9DVVJWRTI1NTE5X0dFTkVSSUMKKysJdHJpc3RhdGUKKysJaGVscAorKwkgIFRoaXMgc3ltYm9sIGNhbiBiZSBkZXBlbmRlZCB1cG9uIGJ5IGFyY2ggaW1wbGVtZW50YXRpb25zIG9mIHRoZQorKwkgIEN1cnZlMjU1MTkgbGlicmFyeSBpbnRlcmZhY2UgdGhhdCByZXF1aXJlIHRoZSBnZW5lcmljIGNvZGUgYXMgYQorKwkgIGZhbGxiYWNrLCBlLmcuLCBmb3IgU0lNRCBpbXBsZW1lbnRhdGlvbnMuIElmIG5vIGFyY2ggc3BlY2lmaWMKKysJICBpbXBsZW1lbnRhdGlvbiBpcyBlbmFibGVkLCB0aGlzIGltcGxlbWVudGF0aW9uIHNlcnZlcyB0aGUgdXNlcnMKKysJICBvZiBDUllQVE9fTElCX0NVUlZFMjU1MTkuCisrCisrY29uZmlnIENSWVBUT19MSUJfQ1VSVkUyNTUxOQorKwl0cmlzdGF0ZSAiQ3VydmUyNTUxOSBzY2FsYXIgbXVsdGlwbGljYXRpb24gbGlicmFyeSIKKysJZGVwZW5kcyBvbiBDUllQVE9fQVJDSF9IQVZFX0xJQl9DVVJWRTI1NTE5IHx8ICFDUllQVE9fQVJDSF9IQVZFX0xJQl9DVVJWRTI1NTE5CisrCXNlbGVjdCBDUllQVE9fTElCX0NVUlZFMjU1MTlfR0VORVJJQyBpZiBDUllQVE9fQVJDSF9IQVZFX0xJQl9DVVJWRTI1NTE5PW4KKysJaGVscAorKwkgIEVuYWJsZSB0aGUgQ3VydmUyNTUxOSBsaWJyYXJ5IGludGVyZmFjZS4gVGhpcyBpbnRlcmZhY2UgbWF5IGJlCisrCSAgZnVsZmlsbGVkIGJ5IGVpdGhlciB0aGUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBvciBhbiBhcmNoLXNwZWNpZmljCisrCSAgb25lLCBpZiBvbmUgaXMgYXZhaWxhYmxlIGFuZCBlbmFibGVkLgorKworIGNvbmZpZyBDUllQVE9fTElCX0RFUworIAl0cmlzdGF0ZQorIAorLS0tIGEvbGliL2NyeXB0by9NYWtlZmlsZQorKysrIGIvbGliL2NyeXB0by9NYWtlZmlsZQorQEAgLTE2LDYgKzE2LDExIEBAIGxpYmJsYWtlMnMtZ2VuZXJpYy15CQkJCSs9IGJsYWtlMnMtZ2VuZXIKKyBvYmotJChDT05GSUdfQ1JZUFRPX0xJQl9CTEFLRTJTKQkJKz0gbGliYmxha2Uycy5vCisgbGliYmxha2Uycy15CQkJCQkrPSBibGFrZTJzLm8KKyAKKytvYmotJChDT05GSUdfQ1JZUFRPX0xJQl9DVVJWRTI1NTE5X0dFTkVSSUMpCSs9IGxpYmN1cnZlMjU1MTkubworK2xpYmN1cnZlMjU1MTkteQkJCQkJOj0gY3VydmUyNTUxOS1maWF0MzIubworK2xpYmN1cnZlMjU1MTktJChDT05GSUdfQVJDSF9TVVBQT1JUU19JTlQxMjgpCTo9IGN1cnZlMjU1MTktaGFjbDY0Lm8KKytsaWJjdXJ2ZTI1NTE5LXkJCQkJCSs9IGN1cnZlMjU1MTkubworKworIG9iai0kKENPTkZJR19DUllQVE9fTElCX0RFUykJCQkrPSBsaWJkZXMubworIGxpYmRlcy15CQkJCQk6PSBkZXMubworIAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGliL2NyeXB0by9jdXJ2ZTI1NTE5LWZpYXQzMi5jCitAQCAtMCwwICsxLDg2NCBAQAorKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVAorKy8qCisrICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgVGhlIGZpYXQtY3J5cHRvIEF1dGhvcnMuCisrICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMTkgSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKyAqCisrICogVGhpcyBpcyBhIG1hY2hpbmUtZ2VuZXJhdGVkIGZvcm1hbGx5IHZlcmlmaWVkIGltcGxlbWVudGF0aW9uIG9mIEN1cnZlMjU1MTkKKysgKiBFQ0RIIGZyb206IDxodHRwczovL2dpdGh1Yi5jb20vbWl0LXBsdi9maWF0LWNyeXB0bz4uIFRob3VnaCBvcmlnaW5hbGx5CisrICogbWFjaGluZSBnZW5lcmF0ZWQsIGl0IGhhcyBiZWVuIHR3ZWFrZWQgdG8gYmUgc3VpdGFibGUgZm9yIHVzZSBpbiB0aGUga2VybmVsLgorKyAqIEl0IGlzIG9wdGltaXplZCBmb3IgMzItYml0IG1hY2hpbmVzIGFuZCBtYWNoaW5lcyB0aGF0IGNhbm5vdCB3b3JrIGVmZmljaWVudGx5CisrICogd2l0aCAxMjgtYml0IGludGVnZXIgdHlwZXMuCisrICovCisrCisrI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKysjaW5jbHVkZSA8Y3J5cHRvL2N1cnZlMjU1MTkuaD4KKysjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisrCisrLyogZmUgbWVhbnMgZmllbGQgZWxlbWVudC4gSGVyZSB0aGUgZmllbGQgaXMgXFovKDJeMjU1LTE5KS4gQW4gZWxlbWVudCB0LAorKyAqIGVudHJpZXMgdFswXS4uLnRbOV0sIHJlcHJlc2VudHMgdGhlIGludGVnZXIgdFswXSsyXjI2IHRbMV0rMl41MSB0WzJdKzJeNzcKKysgKiB0WzNdKzJeMTAyIHRbNF0rLi4uKzJeMjMwIHRbOV0uCisrICogZmUgbGltYnMgYXJlIGJvdW5kZWQgYnkgMS4xMjUqMl4yNiwxLjEyNSoyXjI1LDEuMTI1KjJeMjYsMS4xMjUqMl4yNSxldGMuCisrICogTXVsdGlwbGljYXRpb24gYW5kIGNhcnJ5aW5nIHByb2R1Y2UgZmUgZnJvbSBmZV9sb29zZS4KKysgKi8KKyt0eXBlZGVmIHN0cnVjdCBmZSB7IHUzMiB2WzEwXTsgfSBmZTsKKysKKysvKiBmZV9sb29zZSBsaW1icyBhcmUgYm91bmRlZCBieSAzLjM3NSoyXjI2LDMuMzc1KjJeMjUsMy4zNzUqMl4yNiwzLjM3NSoyXjI1LGV0YworKyAqIEFkZGl0aW9uIGFuZCBzdWJ0cmFjdGlvbiBwcm9kdWNlIGZlX2xvb3NlIGZyb20gKGZlLCBmZSkuCisrICovCisrdHlwZWRlZiBzdHJ1Y3QgZmVfbG9vc2UgeyB1MzIgdlsxMF07IH0gZmVfbG9vc2U7CisrCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGZlX2Zyb21ieXRlc19pbXBsKHUzMiBoWzEwXSwgY29uc3QgdTggKnMpCisreworKwkvKiBJZ25vcmVzIHRvcCBiaXQgb2Ygcy4gKi8KKysJdTMyIGEwID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHMpOworKwl1MzIgYTEgPSBnZXRfdW5hbGlnbmVkX2xlMzIocys0KTsKKysJdTMyIGEyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHMrOCk7CisrCXUzMiBhMyA9IGdldF91bmFsaWduZWRfbGUzMihzKzEyKTsKKysJdTMyIGE0ID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHMrMTYpOworKwl1MzIgYTUgPSBnZXRfdW5hbGlnbmVkX2xlMzIocysyMCk7CisrCXUzMiBhNiA9IGdldF91bmFsaWduZWRfbGUzMihzKzI0KTsKKysJdTMyIGE3ID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHMrMjgpOworKwloWzBdID0gYTAmKCgxPDwyNiktMSk7ICAgICAgICAgICAgICAgICAgICAvKiAyNiB1c2VkLCAzMi0yNiBsZWZ0LiAgIDI2ICovCisrCWhbMV0gPSAoYTA+PjI2KSB8ICgoYTEmKCgxPDwxOSktMSkpPDwgNik7IC8qICgzMi0yNikgKyAxOSA9ICA2KzE5ID0gMjUgKi8KKysJaFsyXSA9IChhMT4+MTkpIHwgKChhMiYoKDE8PDEzKS0xKSk8PDEzKTsgLyogKDMyLTE5KSArIDEzID0gMTMrMTMgPSAyNiAqLworKwloWzNdID0gKGEyPj4xMykgfCAoKGEzJigoMTw8IDYpLTEpKTw8MTkpOyAvKiAoMzItMTMpICsgIDYgPSAxOSsgNiA9IDI1ICovCisrCWhbNF0gPSAoYTM+PiA2KTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICgzMi0gNikgICAgICAgICAgICAgID0gMjYgKi8KKysJaFs1XSA9IGE0JigoMTw8MjUpLTEpOyAgICAgICAgICAgICAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAyNSAqLworKwloWzZdID0gKGE0Pj4yNSkgfCAoKGE1JigoMTw8MTkpLTEpKTw8IDcpOyAvKiAoMzItMjUpICsgMTkgPSAgNysxOSA9IDI2ICovCisrCWhbN10gPSAoYTU+PjE5KSB8ICgoYTYmKCgxPDwxMiktMSkpPDwxMyk7IC8qICgzMi0xOSkgKyAxMiA9IDEzKzEyID0gMjUgKi8KKysJaFs4XSA9IChhNj4+MTIpIHwgKChhNyYoKDE8PCA2KS0xKSk8PDIwKTsgLyogKDMyLTEyKSArICA2ID0gMjArIDYgPSAyNiAqLworKwloWzldID0gKGE3Pj4gNikmKCgxPDwyNSktMSk7IC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1ICovCisrfQorKworK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBmZV9mcm9tYnl0ZXMoZmUgKmgsIGNvbnN0IHU4ICpzKQorK3sKKysJZmVfZnJvbWJ5dGVzX2ltcGwoaC0+diwgcyk7CisrfQorKworK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTggLypib29sKi8KKythZGRjYXJyeXhfdTI1KHU4IC8qYm9vbCovIGMsIHUzMiBhLCB1MzIgYiwgdTMyICpsb3cpCisreworKwkvKiBUaGlzIGZ1bmN0aW9uIGV4dHJhY3RzIDI1IGJpdHMgb2YgcmVzdWx0IGFuZCAxIGJpdCBvZiBjYXJyeQorKwkgKiAoMjYgdG90YWwpLCBzbyBhIDMyLWJpdCBpbnRlcm1lZGlhdGUgaXMgc3VmZmljaWVudC4KKysJICovCisrCXUzMiB4ID0gYSArIGIgKyBjOworKwkqbG93ID0geCAmICgoMSA8PCAyNSkgLSAxKTsKKysJcmV0dXJuICh4ID4+IDI1KSAmIDE7CisrfQorKworK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTggLypib29sKi8KKythZGRjYXJyeXhfdTI2KHU4IC8qYm9vbCovIGMsIHUzMiBhLCB1MzIgYiwgdTMyICpsb3cpCisreworKwkvKiBUaGlzIGZ1bmN0aW9uIGV4dHJhY3RzIDI2IGJpdHMgb2YgcmVzdWx0IGFuZCAxIGJpdCBvZiBjYXJyeQorKwkgKiAoMjcgdG90YWwpLCBzbyBhIDMyLWJpdCBpbnRlcm1lZGlhdGUgaXMgc3VmZmljaWVudC4KKysJICovCisrCXUzMiB4ID0gYSArIGIgKyBjOworKwkqbG93ID0geCAmICgoMSA8PCAyNikgLSAxKTsKKysJcmV0dXJuICh4ID4+IDI2KSAmIDE7CisrfQorKworK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTggLypib29sKi8KKytzdWJib3Jyb3dfdTI1KHU4IC8qYm9vbCovIGMsIHUzMiBhLCB1MzIgYiwgdTMyICpsb3cpCisreworKwkvKiBUaGlzIGZ1bmN0aW9uIGV4dHJhY3RzIDI1IGJpdHMgb2YgcmVzdWx0IGFuZCAxIGJpdCBvZiBib3Jyb3cKKysJICogKDI2IHRvdGFsKSwgc28gYSAzMi1iaXQgaW50ZXJtZWRpYXRlIGlzIHN1ZmZpY2llbnQuCisrCSAqLworKwl1MzIgeCA9IGEgLSBiIC0gYzsKKysJKmxvdyA9IHggJiAoKDEgPDwgMjUpIC0gMSk7CisrCXJldHVybiB4ID4+IDMxOworK30KKysKKytzdGF0aWMgX19hbHdheXNfaW5saW5lIHU4IC8qYm9vbCovCisrc3ViYm9ycm93X3UyNih1OCAvKmJvb2wqLyBjLCB1MzIgYSwgdTMyIGIsIHUzMiAqbG93KQorK3sKKysJLyogVGhpcyBmdW5jdGlvbiBleHRyYWN0cyAyNiBiaXRzIG9mIHJlc3VsdCBhbmQgMSBiaXQgb2YgYm9ycm93CisrCSAqKDI3IHRvdGFsKSwgc28gYSAzMi1iaXQgaW50ZXJtZWRpYXRlIGlzIHN1ZmZpY2llbnQuCisrCSAqLworKwl1MzIgeCA9IGEgLSBiIC0gYzsKKysJKmxvdyA9IHggJiAoKDEgPDwgMjYpIC0gMSk7CisrCXJldHVybiB4ID4+IDMxOworK30KKysKKytzdGF0aWMgX19hbHdheXNfaW5saW5lIHUzMiBjbW92em56MzIodTMyIHQsIHUzMiB6LCB1MzIgbnopCisreworKwl0ID0gLSEhdDsgLyogYWxsIHNldCBpZiBub256ZXJvLCAwIGlmIDAgKi8KKysJcmV0dXJuICh0Jm56KSB8ICgofnQpJnopOworK30KKysKKytzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgZmVfZnJlZXplKHUzMiBvdXRbMTBdLCBjb25zdCB1MzIgaW4xWzEwXSkKKyt7CisrCXsgY29uc3QgdTMyIHgxNyA9IGluMVs5XTsKKysJeyBjb25zdCB1MzIgeDE4ID0gaW4xWzhdOworKwl7IGNvbnN0IHUzMiB4MTYgPSBpbjFbN107CisrCXsgY29uc3QgdTMyIHgxNCA9IGluMVs2XTsKKysJeyBjb25zdCB1MzIgeDEyID0gaW4xWzVdOworKwl7IGNvbnN0IHUzMiB4MTAgPSBpbjFbNF07CisrCXsgY29uc3QgdTMyIHg4ID0gaW4xWzNdOworKwl7IGNvbnN0IHUzMiB4NiA9IGluMVsyXTsKKysJeyBjb25zdCB1MzIgeDQgPSBpbjFbMV07CisrCXsgY29uc3QgdTMyIHgyID0gaW4xWzBdOworKwl7IHUzMiB4MjA7IHU4Lypib29sKi8geDIxID0gc3ViYm9ycm93X3UyNigweDAsIHgyLCAweDNmZmZmZWQsICZ4MjApOworKwl7IHUzMiB4MjM7IHU4Lypib29sKi8geDI0ID0gc3ViYm9ycm93X3UyNSh4MjEsIHg0LCAweDFmZmZmZmYsICZ4MjMpOworKwl7IHUzMiB4MjY7IHU4Lypib29sKi8geDI3ID0gc3ViYm9ycm93X3UyNih4MjQsIHg2LCAweDNmZmZmZmYsICZ4MjYpOworKwl7IHUzMiB4Mjk7IHU4Lypib29sKi8geDMwID0gc3ViYm9ycm93X3UyNSh4MjcsIHg4LCAweDFmZmZmZmYsICZ4MjkpOworKwl7IHUzMiB4MzI7IHU4Lypib29sKi8geDMzID0gc3ViYm9ycm93X3UyNih4MzAsIHgxMCwgMHgzZmZmZmZmLCAmeDMyKTsKKysJeyB1MzIgeDM1OyB1OC8qYm9vbCovIHgzNiA9IHN1YmJvcnJvd191MjUoeDMzLCB4MTIsIDB4MWZmZmZmZiwgJngzNSk7CisrCXsgdTMyIHgzODsgdTgvKmJvb2wqLyB4MzkgPSBzdWJib3Jyb3dfdTI2KHgzNiwgeDE0LCAweDNmZmZmZmYsICZ4MzgpOworKwl7IHUzMiB4NDE7IHU4Lypib29sKi8geDQyID0gc3ViYm9ycm93X3UyNSh4MzksIHgxNiwgMHgxZmZmZmZmLCAmeDQxKTsKKysJeyB1MzIgeDQ0OyB1OC8qYm9vbCovIHg0NSA9IHN1YmJvcnJvd191MjYoeDQyLCB4MTgsIDB4M2ZmZmZmZiwgJng0NCk7CisrCXsgdTMyIHg0NzsgdTgvKmJvb2wqLyB4NDggPSBzdWJib3Jyb3dfdTI1KHg0NSwgeDE3LCAweDFmZmZmZmYsICZ4NDcpOworKwl7IHUzMiB4NDkgPSBjbW92em56MzIoeDQ4LCAweDAsIDB4ZmZmZmZmZmYpOworKwl7IHUzMiB4NTAgPSAoeDQ5ICYgMHgzZmZmZmVkKTsKKysJeyB1MzIgeDUyOyB1OC8qYm9vbCovIHg1MyA9IGFkZGNhcnJ5eF91MjYoMHgwLCB4MjAsIHg1MCwgJng1Mik7CisrCXsgdTMyIHg1NCA9ICh4NDkgJiAweDFmZmZmZmYpOworKwl7IHUzMiB4NTY7IHU4Lypib29sKi8geDU3ID0gYWRkY2Fycnl4X3UyNSh4NTMsIHgyMywgeDU0LCAmeDU2KTsKKysJeyB1MzIgeDU4ID0gKHg0OSAmIDB4M2ZmZmZmZik7CisrCXsgdTMyIHg2MDsgdTgvKmJvb2wqLyB4NjEgPSBhZGRjYXJyeXhfdTI2KHg1NywgeDI2LCB4NTgsICZ4NjApOworKwl7IHUzMiB4NjIgPSAoeDQ5ICYgMHgxZmZmZmZmKTsKKysJeyB1MzIgeDY0OyB1OC8qYm9vbCovIHg2NSA9IGFkZGNhcnJ5eF91MjUoeDYxLCB4MjksIHg2MiwgJng2NCk7CisrCXsgdTMyIHg2NiA9ICh4NDkgJiAweDNmZmZmZmYpOworKwl7IHUzMiB4Njg7IHU4Lypib29sKi8geDY5ID0gYWRkY2Fycnl4X3UyNih4NjUsIHgzMiwgeDY2LCAmeDY4KTsKKysJeyB1MzIgeDcwID0gKHg0OSAmIDB4MWZmZmZmZik7CisrCXsgdTMyIHg3MjsgdTgvKmJvb2wqLyB4NzMgPSBhZGRjYXJyeXhfdTI1KHg2OSwgeDM1LCB4NzAsICZ4NzIpOworKwl7IHUzMiB4NzQgPSAoeDQ5ICYgMHgzZmZmZmZmKTsKKysJeyB1MzIgeDc2OyB1OC8qYm9vbCovIHg3NyA9IGFkZGNhcnJ5eF91MjYoeDczLCB4MzgsIHg3NCwgJng3Nik7CisrCXsgdTMyIHg3OCA9ICh4NDkgJiAweDFmZmZmZmYpOworKwl7IHUzMiB4ODA7IHU4Lypib29sKi8geDgxID0gYWRkY2Fycnl4X3UyNSh4NzcsIHg0MSwgeDc4LCAmeDgwKTsKKysJeyB1MzIgeDgyID0gKHg0OSAmIDB4M2ZmZmZmZik7CisrCXsgdTMyIHg4NDsgdTgvKmJvb2wqLyB4ODUgPSBhZGRjYXJyeXhfdTI2KHg4MSwgeDQ0LCB4ODIsICZ4ODQpOworKwl7IHUzMiB4ODYgPSAoeDQ5ICYgMHgxZmZmZmZmKTsKKysJeyB1MzIgeDg4OyBhZGRjYXJyeXhfdTI1KHg4NSwgeDQ3LCB4ODYsICZ4ODgpOworKwlvdXRbMF0gPSB4NTI7CisrCW91dFsxXSA9IHg1NjsKKysJb3V0WzJdID0geDYwOworKwlvdXRbM10gPSB4NjQ7CisrCW91dFs0XSA9IHg2ODsKKysJb3V0WzVdID0geDcyOworKwlvdXRbNl0gPSB4NzY7CisrCW91dFs3XSA9IHg4MDsKKysJb3V0WzhdID0geDg0OworKwlvdXRbOV0gPSB4ODg7CisrCX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19CisrfQorKworK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBmZV90b2J5dGVzKHU4IHNbMzJdLCBjb25zdCBmZSAqZikKKyt7CisrCXUzMiBoWzEwXTsKKysJZmVfZnJlZXplKGgsIGYtPnYpOworKwlzWzBdID0gaFswXSA+PiAwOworKwlzWzFdID0gaFswXSA+PiA4OworKwlzWzJdID0gaFswXSA+PiAxNjsKKysJc1szXSA9IChoWzBdID4+IDI0KSB8IChoWzFdIDw8IDIpOworKwlzWzRdID0gaFsxXSA+PiA2OworKwlzWzVdID0gaFsxXSA+PiAxNDsKKysJc1s2XSA9IChoWzFdID4+IDIyKSB8IChoWzJdIDw8IDMpOworKwlzWzddID0gaFsyXSA+PiA1OworKwlzWzhdID0gaFsyXSA+PiAxMzsKKysJc1s5XSA9IChoWzJdID4+IDIxKSB8IChoWzNdIDw8IDUpOworKwlzWzEwXSA9IGhbM10gPj4gMzsKKysJc1sxMV0gPSBoWzNdID4+IDExOworKwlzWzEyXSA9IChoWzNdID4+IDE5KSB8IChoWzRdIDw8IDYpOworKwlzWzEzXSA9IGhbNF0gPj4gMjsKKysJc1sxNF0gPSBoWzRdID4+IDEwOworKwlzWzE1XSA9IGhbNF0gPj4gMTg7CisrCXNbMTZdID0gaFs1XSA+PiAwOworKwlzWzE3XSA9IGhbNV0gPj4gODsKKysJc1sxOF0gPSBoWzVdID4+IDE2OworKwlzWzE5XSA9IChoWzVdID4+IDI0KSB8IChoWzZdIDw8IDEpOworKwlzWzIwXSA9IGhbNl0gPj4gNzsKKysJc1syMV0gPSBoWzZdID4+IDE1OworKwlzWzIyXSA9IChoWzZdID4+IDIzKSB8IChoWzddIDw8IDMpOworKwlzWzIzXSA9IGhbN10gPj4gNTsKKysJc1syNF0gPSBoWzddID4+IDEzOworKwlzWzI1XSA9IChoWzddID4+IDIxKSB8IChoWzhdIDw8IDQpOworKwlzWzI2XSA9IGhbOF0gPj4gNDsKKysJc1syN10gPSBoWzhdID4+IDEyOworKwlzWzI4XSA9IChoWzhdID4+IDIwKSB8IChoWzldIDw8IDYpOworKwlzWzI5XSA9IGhbOV0gPj4gMjsKKysJc1szMF0gPSBoWzldID4+IDEwOworKwlzWzMxXSA9IGhbOV0gPj4gMTg7CisrfQorKworKy8qIGggPSBmICovCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGZlX2NvcHkoZmUgKmgsIGNvbnN0IGZlICpmKQorK3sKKysJbWVtbW92ZShoLCBmLCBzaXplb2YodTMyKSAqIDEwKTsKKyt9CisrCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGZlX2NvcHlfbHQoZmVfbG9vc2UgKmgsIGNvbnN0IGZlICpmKQorK3sKKysJbWVtbW92ZShoLCBmLCBzaXplb2YodTMyKSAqIDEwKTsKKyt9CisrCisrLyogaCA9IDAgKi8KKytzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgZmVfMChmZSAqaCkKKyt7CisrCW1lbXNldChoLCAwLCBzaXplb2YodTMyKSAqIDEwKTsKKyt9CisrCisrLyogaCA9IDEgKi8KKytzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgZmVfMShmZSAqaCkKKyt7CisrCW1lbXNldChoLCAwLCBzaXplb2YodTMyKSAqIDEwKTsKKysJaC0+dlswXSA9IDE7CisrfQorKworK3N0YXRpYyB2b2lkIGZlX2FkZF9pbXBsKHUzMiBvdXRbMTBdLCBjb25zdCB1MzIgaW4xWzEwXSwgY29uc3QgdTMyIGluMlsxMF0pCisreworKwl7IGNvbnN0IHUzMiB4MjAgPSBpbjFbOV07CisrCXsgY29uc3QgdTMyIHgyMSA9IGluMVs4XTsKKysJeyBjb25zdCB1MzIgeDE5ID0gaW4xWzddOworKwl7IGNvbnN0IHUzMiB4MTcgPSBpbjFbNl07CisrCXsgY29uc3QgdTMyIHgxNSA9IGluMVs1XTsKKysJeyBjb25zdCB1MzIgeDEzID0gaW4xWzRdOworKwl7IGNvbnN0IHUzMiB4MTEgPSBpbjFbM107CisrCXsgY29uc3QgdTMyIHg5ID0gaW4xWzJdOworKwl7IGNvbnN0IHUzMiB4NyA9IGluMVsxXTsKKysJeyBjb25zdCB1MzIgeDUgPSBpbjFbMF07CisrCXsgY29uc3QgdTMyIHgzOCA9IGluMls5XTsKKysJeyBjb25zdCB1MzIgeDM5ID0gaW4yWzhdOworKwl7IGNvbnN0IHUzMiB4MzcgPSBpbjJbN107CisrCXsgY29uc3QgdTMyIHgzNSA9IGluMls2XTsKKysJeyBjb25zdCB1MzIgeDMzID0gaW4yWzVdOworKwl7IGNvbnN0IHUzMiB4MzEgPSBpbjJbNF07CisrCXsgY29uc3QgdTMyIHgyOSA9IGluMlszXTsKKysJeyBjb25zdCB1MzIgeDI3ID0gaW4yWzJdOworKwl7IGNvbnN0IHUzMiB4MjUgPSBpbjJbMV07CisrCXsgY29uc3QgdTMyIHgyMyA9IGluMlswXTsKKysJb3V0WzBdID0gKHg1ICsgeDIzKTsKKysJb3V0WzFdID0gKHg3ICsgeDI1KTsKKysJb3V0WzJdID0gKHg5ICsgeDI3KTsKKysJb3V0WzNdID0gKHgxMSArIHgyOSk7CisrCW91dFs0XSA9ICh4MTMgKyB4MzEpOworKwlvdXRbNV0gPSAoeDE1ICsgeDMzKTsKKysJb3V0WzZdID0gKHgxNyArIHgzNSk7CisrCW91dFs3XSA9ICh4MTkgKyB4MzcpOworKwlvdXRbOF0gPSAoeDIxICsgeDM5KTsKKysJb3V0WzldID0gKHgyMCArIHgzOCk7CisrCX19fX19fX19fX19fX19fX19fX19CisrfQorKworKy8qIGggPSBmICsgZworKyAqIENhbiBvdmVybGFwIGggd2l0aCBmIG9yIGcuCisrICovCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGZlX2FkZChmZV9sb29zZSAqaCwgY29uc3QgZmUgKmYsIGNvbnN0IGZlICpnKQorK3sKKysJZmVfYWRkX2ltcGwoaC0+diwgZi0+diwgZy0+dik7CisrfQorKworK3N0YXRpYyB2b2lkIGZlX3N1Yl9pbXBsKHUzMiBvdXRbMTBdLCBjb25zdCB1MzIgaW4xWzEwXSwgY29uc3QgdTMyIGluMlsxMF0pCisreworKwl7IGNvbnN0IHUzMiB4MjAgPSBpbjFbOV07CisrCXsgY29uc3QgdTMyIHgyMSA9IGluMVs4XTsKKysJeyBjb25zdCB1MzIgeDE5ID0gaW4xWzddOworKwl7IGNvbnN0IHUzMiB4MTcgPSBpbjFbNl07CisrCXsgY29uc3QgdTMyIHgxNSA9IGluMVs1XTsKKysJeyBjb25zdCB1MzIgeDEzID0gaW4xWzRdOworKwl7IGNvbnN0IHUzMiB4MTEgPSBpbjFbM107CisrCXsgY29uc3QgdTMyIHg5ID0gaW4xWzJdOworKwl7IGNvbnN0IHUzMiB4NyA9IGluMVsxXTsKKysJeyBjb25zdCB1MzIgeDUgPSBpbjFbMF07CisrCXsgY29uc3QgdTMyIHgzOCA9IGluMls5XTsKKysJeyBjb25zdCB1MzIgeDM5ID0gaW4yWzhdOworKwl7IGNvbnN0IHUzMiB4MzcgPSBpbjJbN107CisrCXsgY29uc3QgdTMyIHgzNSA9IGluMls2XTsKKysJeyBjb25zdCB1MzIgeDMzID0gaW4yWzVdOworKwl7IGNvbnN0IHUzMiB4MzEgPSBpbjJbNF07CisrCXsgY29uc3QgdTMyIHgyOSA9IGluMlszXTsKKysJeyBjb25zdCB1MzIgeDI3ID0gaW4yWzJdOworKwl7IGNvbnN0IHUzMiB4MjUgPSBpbjJbMV07CisrCXsgY29uc3QgdTMyIHgyMyA9IGluMlswXTsKKysJb3V0WzBdID0gKCgweDdmZmZmZGEgKyB4NSkgLSB4MjMpOworKwlvdXRbMV0gPSAoKDB4M2ZmZmZmZSArIHg3KSAtIHgyNSk7CisrCW91dFsyXSA9ICgoMHg3ZmZmZmZlICsgeDkpIC0geDI3KTsKKysJb3V0WzNdID0gKCgweDNmZmZmZmUgKyB4MTEpIC0geDI5KTsKKysJb3V0WzRdID0gKCgweDdmZmZmZmUgKyB4MTMpIC0geDMxKTsKKysJb3V0WzVdID0gKCgweDNmZmZmZmUgKyB4MTUpIC0geDMzKTsKKysJb3V0WzZdID0gKCgweDdmZmZmZmUgKyB4MTcpIC0geDM1KTsKKysJb3V0WzddID0gKCgweDNmZmZmZmUgKyB4MTkpIC0geDM3KTsKKysJb3V0WzhdID0gKCgweDdmZmZmZmUgKyB4MjEpIC0geDM5KTsKKysJb3V0WzldID0gKCgweDNmZmZmZmUgKyB4MjApIC0geDM4KTsKKysJfX19fX19fX19fX19fX19fX19fX0KKyt9CisrCisrLyogaCA9IGYgLSBnCisrICogQ2FuIG92ZXJsYXAgaCB3aXRoIGYgb3IgZy4KKysgKi8KKytzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgZmVfc3ViKGZlX2xvb3NlICpoLCBjb25zdCBmZSAqZiwgY29uc3QgZmUgKmcpCisreworKwlmZV9zdWJfaW1wbChoLT52LCBmLT52LCBnLT52KTsKKyt9CisrCisrc3RhdGljIHZvaWQgZmVfbXVsX2ltcGwodTMyIG91dFsxMF0sIGNvbnN0IHUzMiBpbjFbMTBdLCBjb25zdCB1MzIgaW4yWzEwXSkKKyt7CisrCXsgY29uc3QgdTMyIHgyMCA9IGluMVs5XTsKKysJeyBjb25zdCB1MzIgeDIxID0gaW4xWzhdOworKwl7IGNvbnN0IHUzMiB4MTkgPSBpbjFbN107CisrCXsgY29uc3QgdTMyIHgxNyA9IGluMVs2XTsKKysJeyBjb25zdCB1MzIgeDE1ID0gaW4xWzVdOworKwl7IGNvbnN0IHUzMiB4MTMgPSBpbjFbNF07CisrCXsgY29uc3QgdTMyIHgxMSA9IGluMVszXTsKKysJeyBjb25zdCB1MzIgeDkgPSBpbjFbMl07CisrCXsgY29uc3QgdTMyIHg3ID0gaW4xWzFdOworKwl7IGNvbnN0IHUzMiB4NSA9IGluMVswXTsKKysJeyBjb25zdCB1MzIgeDM4ID0gaW4yWzldOworKwl7IGNvbnN0IHUzMiB4MzkgPSBpbjJbOF07CisrCXsgY29uc3QgdTMyIHgzNyA9IGluMls3XTsKKysJeyBjb25zdCB1MzIgeDM1ID0gaW4yWzZdOworKwl7IGNvbnN0IHUzMiB4MzMgPSBpbjJbNV07CisrCXsgY29uc3QgdTMyIHgzMSA9IGluMls0XTsKKysJeyBjb25zdCB1MzIgeDI5ID0gaW4yWzNdOworKwl7IGNvbnN0IHUzMiB4MjcgPSBpbjJbMl07CisrCXsgY29uc3QgdTMyIHgyNSA9IGluMlsxXTsKKysJeyBjb25zdCB1MzIgeDIzID0gaW4yWzBdOworKwl7IHU2NCB4NDAgPSAoKHU2NCl4MjMgKiB4NSk7CisrCXsgdTY0IHg0MSA9ICgoKHU2NCl4MjMgKiB4NykgKyAoKHU2NCl4MjUgKiB4NSkpOworKwl7IHU2NCB4NDIgPSAoKCgodTY0KSgweDIgKiB4MjUpICogeDcpICsgKCh1NjQpeDIzICogeDkpKSArICgodTY0KXgyNyAqIHg1KSk7CisrCXsgdTY0IHg0MyA9ICgoKCgodTY0KXgyNSAqIHg5KSArICgodTY0KXgyNyAqIHg3KSkgKyAoKHU2NCl4MjMgKiB4MTEpKSArICgodTY0KXgyOSAqIHg1KSk7CisrCXsgdTY0IHg0NCA9ICgoKCgodTY0KXgyNyAqIHg5KSArICgweDIgKiAoKCh1NjQpeDI1ICogeDExKSArICgodTY0KXgyOSAqIHg3KSkpKSArICgodTY0KXgyMyAqIHgxMykpICsgKCh1NjQpeDMxICogeDUpKTsKKysJeyB1NjQgeDQ1ID0gKCgoKCgoKHU2NCl4MjcgKiB4MTEpICsgKCh1NjQpeDI5ICogeDkpKSArICgodTY0KXgyNSAqIHgxMykpICsgKCh1NjQpeDMxICogeDcpKSArICgodTY0KXgyMyAqIHgxNSkpICsgKCh1NjQpeDMzICogeDUpKTsKKysJeyB1NjQgeDQ2ID0gKCgoKCgweDIgKiAoKCgodTY0KXgyOSAqIHgxMSkgKyAoKHU2NCl4MjUgKiB4MTUpKSArICgodTY0KXgzMyAqIHg3KSkpICsgKCh1NjQpeDI3ICogeDEzKSkgKyAoKHU2NCl4MzEgKiB4OSkpICsgKCh1NjQpeDIzICogeDE3KSkgKyAoKHU2NCl4MzUgKiB4NSkpOworKwl7IHU2NCB4NDcgPSAoKCgoKCgoKCh1NjQpeDI5ICogeDEzKSArICgodTY0KXgzMSAqIHgxMSkpICsgKCh1NjQpeDI3ICogeDE1KSkgKyAoKHU2NCl4MzMgKiB4OSkpICsgKCh1NjQpeDI1ICogeDE3KSkgKyAoKHU2NCl4MzUgKiB4NykpICsgKCh1NjQpeDIzICogeDE5KSkgKyAoKHU2NCl4MzcgKiB4NSkpOworKwl7IHU2NCB4NDggPSAoKCgoKCgodTY0KXgzMSAqIHgxMykgKyAoMHgyICogKCgoKCh1NjQpeDI5ICogeDE1KSArICgodTY0KXgzMyAqIHgxMSkpICsgKCh1NjQpeDI1ICogeDE5KSkgKyAoKHU2NCl4MzcgKiB4NykpKSkgKyAoKHU2NCl4MjcgKiB4MTcpKSArICgodTY0KXgzNSAqIHg5KSkgKyAoKHU2NCl4MjMgKiB4MjEpKSArICgodTY0KXgzOSAqIHg1KSk7CisrCXsgdTY0IHg0OSA9ICgoKCgoKCgoKCgodTY0KXgzMSAqIHgxNSkgKyAoKHU2NCl4MzMgKiB4MTMpKSArICgodTY0KXgyOSAqIHgxNykpICsgKCh1NjQpeDM1ICogeDExKSkgKyAoKHU2NCl4MjcgKiB4MTkpKSArICgodTY0KXgzNyAqIHg5KSkgKyAoKHU2NCl4MjUgKiB4MjEpKSArICgodTY0KXgzOSAqIHg3KSkgKyAoKHU2NCl4MjMgKiB4MjApKSArICgodTY0KXgzOCAqIHg1KSk7CisrCXsgdTY0IHg1MCA9ICgoKCgoMHgyICogKCgoKCgodTY0KXgzMyAqIHgxNSkgKyAoKHU2NCl4MjkgKiB4MTkpKSArICgodTY0KXgzNyAqIHgxMSkpICsgKCh1NjQpeDI1ICogeDIwKSkgKyAoKHU2NCl4MzggKiB4NykpKSArICgodTY0KXgzMSAqIHgxNykpICsgKCh1NjQpeDM1ICogeDEzKSkgKyAoKHU2NCl4MjcgKiB4MjEpKSArICgodTY0KXgzOSAqIHg5KSk7CisrCXsgdTY0IHg1MSA9ICgoKCgoKCgoKHU2NCl4MzMgKiB4MTcpICsgKCh1NjQpeDM1ICogeDE1KSkgKyAoKHU2NCl4MzEgKiB4MTkpKSArICgodTY0KXgzNyAqIHgxMykpICsgKCh1NjQpeDI5ICogeDIxKSkgKyAoKHU2NCl4MzkgKiB4MTEpKSArICgodTY0KXgyNyAqIHgyMCkpICsgKCh1NjQpeDM4ICogeDkpKTsKKysJeyB1NjQgeDUyID0gKCgoKCh1NjQpeDM1ICogeDE3KSArICgweDIgKiAoKCgoKHU2NCl4MzMgKiB4MTkpICsgKCh1NjQpeDM3ICogeDE1KSkgKyAoKHU2NCl4MjkgKiB4MjApKSArICgodTY0KXgzOCAqIHgxMSkpKSkgKyAoKHU2NCl4MzEgKiB4MjEpKSArICgodTY0KXgzOSAqIHgxMykpOworKwl7IHU2NCB4NTMgPSAoKCgoKCgodTY0KXgzNSAqIHgxOSkgKyAoKHU2NCl4MzcgKiB4MTcpKSArICgodTY0KXgzMyAqIHgyMSkpICsgKCh1NjQpeDM5ICogeDE1KSkgKyAoKHU2NCl4MzEgKiB4MjApKSArICgodTY0KXgzOCAqIHgxMykpOworKwl7IHU2NCB4NTQgPSAoKCgweDIgKiAoKCgodTY0KXgzNyAqIHgxOSkgKyAoKHU2NCl4MzMgKiB4MjApKSArICgodTY0KXgzOCAqIHgxNSkpKSArICgodTY0KXgzNSAqIHgyMSkpICsgKCh1NjQpeDM5ICogeDE3KSk7CisrCXsgdTY0IHg1NSA9ICgoKCgodTY0KXgzNyAqIHgyMSkgKyAoKHU2NCl4MzkgKiB4MTkpKSArICgodTY0KXgzNSAqIHgyMCkpICsgKCh1NjQpeDM4ICogeDE3KSk7CisrCXsgdTY0IHg1NiA9ICgoKHU2NCl4MzkgKiB4MjEpICsgKDB4MiAqICgoKHU2NCl4MzcgKiB4MjApICsgKCh1NjQpeDM4ICogeDE5KSkpKTsKKysJeyB1NjQgeDU3ID0gKCgodTY0KXgzOSAqIHgyMCkgKyAoKHU2NCl4MzggKiB4MjEpKTsKKysJeyB1NjQgeDU4ID0gKCh1NjQpKDB4MiAqIHgzOCkgKiB4MjApOworKwl7IHU2NCB4NTkgPSAoeDQ4ICsgKHg1OCA8PCAweDQpKTsKKysJeyB1NjQgeDYwID0gKHg1OSArICh4NTggPDwgMHgxKSk7CisrCXsgdTY0IHg2MSA9ICh4NjAgKyB4NTgpOworKwl7IHU2NCB4NjIgPSAoeDQ3ICsgKHg1NyA8PCAweDQpKTsKKysJeyB1NjQgeDYzID0gKHg2MiArICh4NTcgPDwgMHgxKSk7CisrCXsgdTY0IHg2NCA9ICh4NjMgKyB4NTcpOworKwl7IHU2NCB4NjUgPSAoeDQ2ICsgKHg1NiA8PCAweDQpKTsKKysJeyB1NjQgeDY2ID0gKHg2NSArICh4NTYgPDwgMHgxKSk7CisrCXsgdTY0IHg2NyA9ICh4NjYgKyB4NTYpOworKwl7IHU2NCB4NjggPSAoeDQ1ICsgKHg1NSA8PCAweDQpKTsKKysJeyB1NjQgeDY5ID0gKHg2OCArICh4NTUgPDwgMHgxKSk7CisrCXsgdTY0IHg3MCA9ICh4NjkgKyB4NTUpOworKwl7IHU2NCB4NzEgPSAoeDQ0ICsgKHg1NCA8PCAweDQpKTsKKysJeyB1NjQgeDcyID0gKHg3MSArICh4NTQgPDwgMHgxKSk7CisrCXsgdTY0IHg3MyA9ICh4NzIgKyB4NTQpOworKwl7IHU2NCB4NzQgPSAoeDQzICsgKHg1MyA8PCAweDQpKTsKKysJeyB1NjQgeDc1ID0gKHg3NCArICh4NTMgPDwgMHgxKSk7CisrCXsgdTY0IHg3NiA9ICh4NzUgKyB4NTMpOworKwl7IHU2NCB4NzcgPSAoeDQyICsgKHg1MiA8PCAweDQpKTsKKysJeyB1NjQgeDc4ID0gKHg3NyArICh4NTIgPDwgMHgxKSk7CisrCXsgdTY0IHg3OSA9ICh4NzggKyB4NTIpOworKwl7IHU2NCB4ODAgPSAoeDQxICsgKHg1MSA8PCAweDQpKTsKKysJeyB1NjQgeDgxID0gKHg4MCArICh4NTEgPDwgMHgxKSk7CisrCXsgdTY0IHg4MiA9ICh4ODEgKyB4NTEpOworKwl7IHU2NCB4ODMgPSAoeDQwICsgKHg1MCA8PCAweDQpKTsKKysJeyB1NjQgeDg0ID0gKHg4MyArICh4NTAgPDwgMHgxKSk7CisrCXsgdTY0IHg4NSA9ICh4ODQgKyB4NTApOworKwl7IHU2NCB4ODYgPSAoeDg1ID4+IDB4MWEpOworKwl7IHUzMiB4ODcgPSAoKHUzMil4ODUgJiAweDNmZmZmZmYpOworKwl7IHU2NCB4ODggPSAoeDg2ICsgeDgyKTsKKysJeyB1NjQgeDg5ID0gKHg4OCA+PiAweDE5KTsKKysJeyB1MzIgeDkwID0gKCh1MzIpeDg4ICYgMHgxZmZmZmZmKTsKKysJeyB1NjQgeDkxID0gKHg4OSArIHg3OSk7CisrCXsgdTY0IHg5MiA9ICh4OTEgPj4gMHgxYSk7CisrCXsgdTMyIHg5MyA9ICgodTMyKXg5MSAmIDB4M2ZmZmZmZik7CisrCXsgdTY0IHg5NCA9ICh4OTIgKyB4NzYpOworKwl7IHU2NCB4OTUgPSAoeDk0ID4+IDB4MTkpOworKwl7IHUzMiB4OTYgPSAoKHUzMil4OTQgJiAweDFmZmZmZmYpOworKwl7IHU2NCB4OTcgPSAoeDk1ICsgeDczKTsKKysJeyB1NjQgeDk4ID0gKHg5NyA+PiAweDFhKTsKKysJeyB1MzIgeDk5ID0gKCh1MzIpeDk3ICYgMHgzZmZmZmZmKTsKKysJeyB1NjQgeDEwMCA9ICh4OTggKyB4NzApOworKwl7IHU2NCB4MTAxID0gKHgxMDAgPj4gMHgxOSk7CisrCXsgdTMyIHgxMDIgPSAoKHUzMil4MTAwICYgMHgxZmZmZmZmKTsKKysJeyB1NjQgeDEwMyA9ICh4MTAxICsgeDY3KTsKKysJeyB1NjQgeDEwNCA9ICh4MTAzID4+IDB4MWEpOworKwl7IHUzMiB4MTA1ID0gKCh1MzIpeDEwMyAmIDB4M2ZmZmZmZik7CisrCXsgdTY0IHgxMDYgPSAoeDEwNCArIHg2NCk7CisrCXsgdTY0IHgxMDcgPSAoeDEwNiA+PiAweDE5KTsKKysJeyB1MzIgeDEwOCA9ICgodTMyKXgxMDYgJiAweDFmZmZmZmYpOworKwl7IHU2NCB4MTA5ID0gKHgxMDcgKyB4NjEpOworKwl7IHU2NCB4MTEwID0gKHgxMDkgPj4gMHgxYSk7CisrCXsgdTMyIHgxMTEgPSAoKHUzMil4MTA5ICYgMHgzZmZmZmZmKTsKKysJeyB1NjQgeDExMiA9ICh4MTEwICsgeDQ5KTsKKysJeyB1NjQgeDExMyA9ICh4MTEyID4+IDB4MTkpOworKwl7IHUzMiB4MTE0ID0gKCh1MzIpeDExMiAmIDB4MWZmZmZmZik7CisrCXsgdTY0IHgxMTUgPSAoeDg3ICsgKDB4MTMgKiB4MTEzKSk7CisrCXsgdTMyIHgxMTYgPSAodTMyKSAoeDExNSA+PiAweDFhKTsKKysJeyB1MzIgeDExNyA9ICgodTMyKXgxMTUgJiAweDNmZmZmZmYpOworKwl7IHUzMiB4MTE4ID0gKHgxMTYgKyB4OTApOworKwl7IHUzMiB4MTE5ID0gKHgxMTggPj4gMHgxOSk7CisrCXsgdTMyIHgxMjAgPSAoeDExOCAmIDB4MWZmZmZmZik7CisrCW91dFswXSA9IHgxMTc7CisrCW91dFsxXSA9IHgxMjA7CisrCW91dFsyXSA9ICh4MTE5ICsgeDkzKTsKKysJb3V0WzNdID0geDk2OworKwlvdXRbNF0gPSB4OTk7CisrCW91dFs1XSA9IHgxMDI7CisrCW91dFs2XSA9IHgxMDU7CisrCW91dFs3XSA9IHgxMDg7CisrCW91dFs4XSA9IHgxMTE7CisrCW91dFs5XSA9IHgxMTQ7CisrCX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19CisrfQorKworK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBmZV9tdWxfdHR0KGZlICpoLCBjb25zdCBmZSAqZiwgY29uc3QgZmUgKmcpCisreworKwlmZV9tdWxfaW1wbChoLT52LCBmLT52LCBnLT52KTsKKyt9CisrCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGZlX211bF90bHQoZmUgKmgsIGNvbnN0IGZlX2xvb3NlICpmLCBjb25zdCBmZSAqZykKKyt7CisrCWZlX211bF9pbXBsKGgtPnYsIGYtPnYsIGctPnYpOworK30KKysKKytzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQKKytmZV9tdWxfdGxsKGZlICpoLCBjb25zdCBmZV9sb29zZSAqZiwgY29uc3QgZmVfbG9vc2UgKmcpCisreworKwlmZV9tdWxfaW1wbChoLT52LCBmLT52LCBnLT52KTsKKyt9CisrCisrc3RhdGljIHZvaWQgZmVfc3FyX2ltcGwodTMyIG91dFsxMF0sIGNvbnN0IHUzMiBpbjFbMTBdKQorK3sKKysJeyBjb25zdCB1MzIgeDE3ID0gaW4xWzldOworKwl7IGNvbnN0IHUzMiB4MTggPSBpbjFbOF07CisrCXsgY29uc3QgdTMyIHgxNiA9IGluMVs3XTsKKysJeyBjb25zdCB1MzIgeDE0ID0gaW4xWzZdOworKwl7IGNvbnN0IHUzMiB4MTIgPSBpbjFbNV07CisrCXsgY29uc3QgdTMyIHgxMCA9IGluMVs0XTsKKysJeyBjb25zdCB1MzIgeDggPSBpbjFbM107CisrCXsgY29uc3QgdTMyIHg2ID0gaW4xWzJdOworKwl7IGNvbnN0IHUzMiB4NCA9IGluMVsxXTsKKysJeyBjb25zdCB1MzIgeDIgPSBpbjFbMF07CisrCXsgdTY0IHgxOSA9ICgodTY0KXgyICogeDIpOworKwl7IHU2NCB4MjAgPSAoKHU2NCkoMHgyICogeDIpICogeDQpOworKwl7IHU2NCB4MjEgPSAoMHgyICogKCgodTY0KXg0ICogeDQpICsgKCh1NjQpeDIgKiB4NikpKTsKKysJeyB1NjQgeDIyID0gKDB4MiAqICgoKHU2NCl4NCAqIHg2KSArICgodTY0KXgyICogeDgpKSk7CisrCXsgdTY0IHgyMyA9ICgoKCh1NjQpeDYgKiB4NikgKyAoKHU2NCkoMHg0ICogeDQpICogeDgpKSArICgodTY0KSgweDIgKiB4MikgKiB4MTApKTsKKysJeyB1NjQgeDI0ID0gKDB4MiAqICgoKCh1NjQpeDYgKiB4OCkgKyAoKHU2NCl4NCAqIHgxMCkpICsgKCh1NjQpeDIgKiB4MTIpKSk7CisrCXsgdTY0IHgyNSA9ICgweDIgKiAoKCgoKHU2NCl4OCAqIHg4KSArICgodTY0KXg2ICogeDEwKSkgKyAoKHU2NCl4MiAqIHgxNCkpICsgKCh1NjQpKDB4MiAqIHg0KSAqIHgxMikpKTsKKysJeyB1NjQgeDI2ID0gKDB4MiAqICgoKCgodTY0KXg4ICogeDEwKSArICgodTY0KXg2ICogeDEyKSkgKyAoKHU2NCl4NCAqIHgxNCkpICsgKCh1NjQpeDIgKiB4MTYpKSk7CisrCXsgdTY0IHgyNyA9ICgoKHU2NCl4MTAgKiB4MTApICsgKDB4MiAqICgoKCh1NjQpeDYgKiB4MTQpICsgKCh1NjQpeDIgKiB4MTgpKSArICgweDIgKiAoKCh1NjQpeDQgKiB4MTYpICsgKCh1NjQpeDggKiB4MTIpKSkpKSk7CisrCXsgdTY0IHgyOCA9ICgweDIgKiAoKCgoKCh1NjQpeDEwICogeDEyKSArICgodTY0KXg4ICogeDE0KSkgKyAoKHU2NCl4NiAqIHgxNikpICsgKCh1NjQpeDQgKiB4MTgpKSArICgodTY0KXgyICogeDE3KSkpOworKwl7IHU2NCB4MjkgPSAoMHgyICogKCgoKCh1NjQpeDEyICogeDEyKSArICgodTY0KXgxMCAqIHgxNCkpICsgKCh1NjQpeDYgKiB4MTgpKSArICgweDIgKiAoKCh1NjQpeDggKiB4MTYpICsgKCh1NjQpeDQgKiB4MTcpKSkpKTsKKysJeyB1NjQgeDMwID0gKDB4MiAqICgoKCgodTY0KXgxMiAqIHgxNCkgKyAoKHU2NCl4MTAgKiB4MTYpKSArICgodTY0KXg4ICogeDE4KSkgKyAoKHU2NCl4NiAqIHgxNykpKTsKKysJeyB1NjQgeDMxID0gKCgodTY0KXgxNCAqIHgxNCkgKyAoMHgyICogKCgodTY0KXgxMCAqIHgxOCkgKyAoMHgyICogKCgodTY0KXgxMiAqIHgxNikgKyAoKHU2NCl4OCAqIHgxNykpKSkpKTsKKysJeyB1NjQgeDMyID0gKDB4MiAqICgoKCh1NjQpeDE0ICogeDE2KSArICgodTY0KXgxMiAqIHgxOCkpICsgKCh1NjQpeDEwICogeDE3KSkpOworKwl7IHU2NCB4MzMgPSAoMHgyICogKCgoKHU2NCl4MTYgKiB4MTYpICsgKCh1NjQpeDE0ICogeDE4KSkgKyAoKHU2NCkoMHgyICogeDEyKSAqIHgxNykpKTsKKysJeyB1NjQgeDM0ID0gKDB4MiAqICgoKHU2NCl4MTYgKiB4MTgpICsgKCh1NjQpeDE0ICogeDE3KSkpOworKwl7IHU2NCB4MzUgPSAoKCh1NjQpeDE4ICogeDE4KSArICgodTY0KSgweDQgKiB4MTYpICogeDE3KSk7CisrCXsgdTY0IHgzNiA9ICgodTY0KSgweDIgKiB4MTgpICogeDE3KTsKKysJeyB1NjQgeDM3ID0gKCh1NjQpKDB4MiAqIHgxNykgKiB4MTcpOworKwl7IHU2NCB4MzggPSAoeDI3ICsgKHgzNyA8PCAweDQpKTsKKysJeyB1NjQgeDM5ID0gKHgzOCArICh4MzcgPDwgMHgxKSk7CisrCXsgdTY0IHg0MCA9ICh4MzkgKyB4MzcpOworKwl7IHU2NCB4NDEgPSAoeDI2ICsgKHgzNiA8PCAweDQpKTsKKysJeyB1NjQgeDQyID0gKHg0MSArICh4MzYgPDwgMHgxKSk7CisrCXsgdTY0IHg0MyA9ICh4NDIgKyB4MzYpOworKwl7IHU2NCB4NDQgPSAoeDI1ICsgKHgzNSA8PCAweDQpKTsKKysJeyB1NjQgeDQ1ID0gKHg0NCArICh4MzUgPDwgMHgxKSk7CisrCXsgdTY0IHg0NiA9ICh4NDUgKyB4MzUpOworKwl7IHU2NCB4NDcgPSAoeDI0ICsgKHgzNCA8PCAweDQpKTsKKysJeyB1NjQgeDQ4ID0gKHg0NyArICh4MzQgPDwgMHgxKSk7CisrCXsgdTY0IHg0OSA9ICh4NDggKyB4MzQpOworKwl7IHU2NCB4NTAgPSAoeDIzICsgKHgzMyA8PCAweDQpKTsKKysJeyB1NjQgeDUxID0gKHg1MCArICh4MzMgPDwgMHgxKSk7CisrCXsgdTY0IHg1MiA9ICh4NTEgKyB4MzMpOworKwl7IHU2NCB4NTMgPSAoeDIyICsgKHgzMiA8PCAweDQpKTsKKysJeyB1NjQgeDU0ID0gKHg1MyArICh4MzIgPDwgMHgxKSk7CisrCXsgdTY0IHg1NSA9ICh4NTQgKyB4MzIpOworKwl7IHU2NCB4NTYgPSAoeDIxICsgKHgzMSA8PCAweDQpKTsKKysJeyB1NjQgeDU3ID0gKHg1NiArICh4MzEgPDwgMHgxKSk7CisrCXsgdTY0IHg1OCA9ICh4NTcgKyB4MzEpOworKwl7IHU2NCB4NTkgPSAoeDIwICsgKHgzMCA8PCAweDQpKTsKKysJeyB1NjQgeDYwID0gKHg1OSArICh4MzAgPDwgMHgxKSk7CisrCXsgdTY0IHg2MSA9ICh4NjAgKyB4MzApOworKwl7IHU2NCB4NjIgPSAoeDE5ICsgKHgyOSA8PCAweDQpKTsKKysJeyB1NjQgeDYzID0gKHg2MiArICh4MjkgPDwgMHgxKSk7CisrCXsgdTY0IHg2NCA9ICh4NjMgKyB4MjkpOworKwl7IHU2NCB4NjUgPSAoeDY0ID4+IDB4MWEpOworKwl7IHUzMiB4NjYgPSAoKHUzMil4NjQgJiAweDNmZmZmZmYpOworKwl7IHU2NCB4NjcgPSAoeDY1ICsgeDYxKTsKKysJeyB1NjQgeDY4ID0gKHg2NyA+PiAweDE5KTsKKysJeyB1MzIgeDY5ID0gKCh1MzIpeDY3ICYgMHgxZmZmZmZmKTsKKysJeyB1NjQgeDcwID0gKHg2OCArIHg1OCk7CisrCXsgdTY0IHg3MSA9ICh4NzAgPj4gMHgxYSk7CisrCXsgdTMyIHg3MiA9ICgodTMyKXg3MCAmIDB4M2ZmZmZmZik7CisrCXsgdTY0IHg3MyA9ICh4NzEgKyB4NTUpOworKwl7IHU2NCB4NzQgPSAoeDczID4+IDB4MTkpOworKwl7IHUzMiB4NzUgPSAoKHUzMil4NzMgJiAweDFmZmZmZmYpOworKwl7IHU2NCB4NzYgPSAoeDc0ICsgeDUyKTsKKysJeyB1NjQgeDc3ID0gKHg3NiA+PiAweDFhKTsKKysJeyB1MzIgeDc4ID0gKCh1MzIpeDc2ICYgMHgzZmZmZmZmKTsKKysJeyB1NjQgeDc5ID0gKHg3NyArIHg0OSk7CisrCXsgdTY0IHg4MCA9ICh4NzkgPj4gMHgxOSk7CisrCXsgdTMyIHg4MSA9ICgodTMyKXg3OSAmIDB4MWZmZmZmZik7CisrCXsgdTY0IHg4MiA9ICh4ODAgKyB4NDYpOworKwl7IHU2NCB4ODMgPSAoeDgyID4+IDB4MWEpOworKwl7IHUzMiB4ODQgPSAoKHUzMil4ODIgJiAweDNmZmZmZmYpOworKwl7IHU2NCB4ODUgPSAoeDgzICsgeDQzKTsKKysJeyB1NjQgeDg2ID0gKHg4NSA+PiAweDE5KTsKKysJeyB1MzIgeDg3ID0gKCh1MzIpeDg1ICYgMHgxZmZmZmZmKTsKKysJeyB1NjQgeDg4ID0gKHg4NiArIHg0MCk7CisrCXsgdTY0IHg4OSA9ICh4ODggPj4gMHgxYSk7CisrCXsgdTMyIHg5MCA9ICgodTMyKXg4OCAmIDB4M2ZmZmZmZik7CisrCXsgdTY0IHg5MSA9ICh4ODkgKyB4MjgpOworKwl7IHU2NCB4OTIgPSAoeDkxID4+IDB4MTkpOworKwl7IHUzMiB4OTMgPSAoKHUzMil4OTEgJiAweDFmZmZmZmYpOworKwl7IHU2NCB4OTQgPSAoeDY2ICsgKDB4MTMgKiB4OTIpKTsKKysJeyB1MzIgeDk1ID0gKHUzMikgKHg5NCA+PiAweDFhKTsKKysJeyB1MzIgeDk2ID0gKCh1MzIpeDk0ICYgMHgzZmZmZmZmKTsKKysJeyB1MzIgeDk3ID0gKHg5NSArIHg2OSk7CisrCXsgdTMyIHg5OCA9ICh4OTcgPj4gMHgxOSk7CisrCXsgdTMyIHg5OSA9ICh4OTcgJiAweDFmZmZmZmYpOworKwlvdXRbMF0gPSB4OTY7CisrCW91dFsxXSA9IHg5OTsKKysJb3V0WzJdID0gKHg5OCArIHg3Mik7CisrCW91dFszXSA9IHg3NTsKKysJb3V0WzRdID0geDc4OworKwlvdXRbNV0gPSB4ODE7CisrCW91dFs2XSA9IHg4NDsKKysJb3V0WzddID0geDg3OworKwlvdXRbOF0gPSB4OTA7CisrCW91dFs5XSA9IHg5MzsKKysJfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fQorK30KKysKKytzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgZmVfc3FfdGwoZmUgKmgsIGNvbnN0IGZlX2xvb3NlICpmKQorK3sKKysJZmVfc3FyX2ltcGwoaC0+diwgZi0+dik7CisrfQorKworK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBmZV9zcV90dChmZSAqaCwgY29uc3QgZmUgKmYpCisreworKwlmZV9zcXJfaW1wbChoLT52LCBmLT52KTsKKyt9CisrCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGZlX2xvb3NlX2ludmVydChmZSAqb3V0LCBjb25zdCBmZV9sb29zZSAqeikKKyt7CisrCWZlIHQwOworKwlmZSB0MTsKKysJZmUgdDI7CisrCWZlIHQzOworKwlpbnQgaTsKKysKKysJZmVfc3FfdGwoJnQwLCB6KTsKKysJZmVfc3FfdHQoJnQxLCAmdDApOworKwlmb3IgKGkgPSAxOyBpIDwgMjsgKytpKQorKwkJZmVfc3FfdHQoJnQxLCAmdDEpOworKwlmZV9tdWxfdGx0KCZ0MSwgeiwgJnQxKTsKKysJZmVfbXVsX3R0dCgmdDAsICZ0MCwgJnQxKTsKKysJZmVfc3FfdHQoJnQyLCAmdDApOworKwlmZV9tdWxfdHR0KCZ0MSwgJnQxLCAmdDIpOworKwlmZV9zcV90dCgmdDIsICZ0MSk7CisrCWZvciAoaSA9IDE7IGkgPCA1OyArK2kpCisrCQlmZV9zcV90dCgmdDIsICZ0Mik7CisrCWZlX211bF90dHQoJnQxLCAmdDIsICZ0MSk7CisrCWZlX3NxX3R0KCZ0MiwgJnQxKTsKKysJZm9yIChpID0gMTsgaSA8IDEwOyArK2kpCisrCQlmZV9zcV90dCgmdDIsICZ0Mik7CisrCWZlX211bF90dHQoJnQyLCAmdDIsICZ0MSk7CisrCWZlX3NxX3R0KCZ0MywgJnQyKTsKKysJZm9yIChpID0gMTsgaSA8IDIwOyArK2kpCisrCQlmZV9zcV90dCgmdDMsICZ0Myk7CisrCWZlX211bF90dHQoJnQyLCAmdDMsICZ0Mik7CisrCWZlX3NxX3R0KCZ0MiwgJnQyKTsKKysJZm9yIChpID0gMTsgaSA8IDEwOyArK2kpCisrCQlmZV9zcV90dCgmdDIsICZ0Mik7CisrCWZlX211bF90dHQoJnQxLCAmdDIsICZ0MSk7CisrCWZlX3NxX3R0KCZ0MiwgJnQxKTsKKysJZm9yIChpID0gMTsgaSA8IDUwOyArK2kpCisrCQlmZV9zcV90dCgmdDIsICZ0Mik7CisrCWZlX211bF90dHQoJnQyLCAmdDIsICZ0MSk7CisrCWZlX3NxX3R0KCZ0MywgJnQyKTsKKysJZm9yIChpID0gMTsgaSA8IDEwMDsgKytpKQorKwkJZmVfc3FfdHQoJnQzLCAmdDMpOworKwlmZV9tdWxfdHR0KCZ0MiwgJnQzLCAmdDIpOworKwlmZV9zcV90dCgmdDIsICZ0Mik7CisrCWZvciAoaSA9IDE7IGkgPCA1MDsgKytpKQorKwkJZmVfc3FfdHQoJnQyLCAmdDIpOworKwlmZV9tdWxfdHR0KCZ0MSwgJnQyLCAmdDEpOworKwlmZV9zcV90dCgmdDEsICZ0MSk7CisrCWZvciAoaSA9IDE7IGkgPCA1OyArK2kpCisrCQlmZV9zcV90dCgmdDEsICZ0MSk7CisrCWZlX211bF90dHQob3V0LCAmdDEsICZ0MCk7CisrfQorKworK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBmZV9pbnZlcnQoZmUgKm91dCwgY29uc3QgZmUgKnopCisreworKwlmZV9sb29zZSBsOworKwlmZV9jb3B5X2x0KCZsLCB6KTsKKysJZmVfbG9vc2VfaW52ZXJ0KG91dCwgJmwpOworK30KKysKKysvKiBSZXBsYWNlIChmLGcpIHdpdGggKGcsZikgaWYgYiA9PSAxOworKyAqIHJlcGxhY2UgKGYsZykgd2l0aCAoZixnKSBpZiBiID09IDAuCisrICoKKysgKiBQcmVjb25kaXRpb25zOiBiIGluIHswLDF9CisrICovCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGZlX2Nzd2FwKGZlICpmLCBmZSAqZywgdW5zaWduZWQgaW50IGIpCisreworKwl1bnNpZ25lZCBpOworKwliID0gMCAtIGI7CisrCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisrCQl1MzIgeCA9IGYtPnZbaV0gXiBnLT52W2ldOworKwkJeCAmPSBiOworKwkJZi0+dltpXSBePSB4OworKwkJZy0+dltpXSBePSB4OworKwl9CisrfQorKworKy8qIE5PVEU6IGJhc2VkIG9uIGZpYXQtY3J5cHRvIGZlX211bCwgZWRpdGVkIGZvciBpbjI9MTIxNjY2LCAwLCAwLiovCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGZlX211bF8xMjE2NjZfaW1wbCh1MzIgb3V0WzEwXSwgY29uc3QgdTMyIGluMVsxMF0pCisreworKwl7IGNvbnN0IHUzMiB4MjAgPSBpbjFbOV07CisrCXsgY29uc3QgdTMyIHgyMSA9IGluMVs4XTsKKysJeyBjb25zdCB1MzIgeDE5ID0gaW4xWzddOworKwl7IGNvbnN0IHUzMiB4MTcgPSBpbjFbNl07CisrCXsgY29uc3QgdTMyIHgxNSA9IGluMVs1XTsKKysJeyBjb25zdCB1MzIgeDEzID0gaW4xWzRdOworKwl7IGNvbnN0IHUzMiB4MTEgPSBpbjFbM107CisrCXsgY29uc3QgdTMyIHg5ID0gaW4xWzJdOworKwl7IGNvbnN0IHUzMiB4NyA9IGluMVsxXTsKKysJeyBjb25zdCB1MzIgeDUgPSBpbjFbMF07CisrCXsgY29uc3QgdTMyIHgzOCA9IDA7CisrCXsgY29uc3QgdTMyIHgzOSA9IDA7CisrCXsgY29uc3QgdTMyIHgzNyA9IDA7CisrCXsgY29uc3QgdTMyIHgzNSA9IDA7CisrCXsgY29uc3QgdTMyIHgzMyA9IDA7CisrCXsgY29uc3QgdTMyIHgzMSA9IDA7CisrCXsgY29uc3QgdTMyIHgyOSA9IDA7CisrCXsgY29uc3QgdTMyIHgyNyA9IDA7CisrCXsgY29uc3QgdTMyIHgyNSA9IDA7CisrCXsgY29uc3QgdTMyIHgyMyA9IDEyMTY2NjsKKysJeyB1NjQgeDQwID0gKCh1NjQpeDIzICogeDUpOworKwl7IHU2NCB4NDEgPSAoKCh1NjQpeDIzICogeDcpICsgKCh1NjQpeDI1ICogeDUpKTsKKysJeyB1NjQgeDQyID0gKCgoKHU2NCkoMHgyICogeDI1KSAqIHg3KSArICgodTY0KXgyMyAqIHg5KSkgKyAoKHU2NCl4MjcgKiB4NSkpOworKwl7IHU2NCB4NDMgPSAoKCgoKHU2NCl4MjUgKiB4OSkgKyAoKHU2NCl4MjcgKiB4NykpICsgKCh1NjQpeDIzICogeDExKSkgKyAoKHU2NCl4MjkgKiB4NSkpOworKwl7IHU2NCB4NDQgPSAoKCgoKHU2NCl4MjcgKiB4OSkgKyAoMHgyICogKCgodTY0KXgyNSAqIHgxMSkgKyAoKHU2NCl4MjkgKiB4NykpKSkgKyAoKHU2NCl4MjMgKiB4MTMpKSArICgodTY0KXgzMSAqIHg1KSk7CisrCXsgdTY0IHg0NSA9ICgoKCgoKCh1NjQpeDI3ICogeDExKSArICgodTY0KXgyOSAqIHg5KSkgKyAoKHU2NCl4MjUgKiB4MTMpKSArICgodTY0KXgzMSAqIHg3KSkgKyAoKHU2NCl4MjMgKiB4MTUpKSArICgodTY0KXgzMyAqIHg1KSk7CisrCXsgdTY0IHg0NiA9ICgoKCgoMHgyICogKCgoKHU2NCl4MjkgKiB4MTEpICsgKCh1NjQpeDI1ICogeDE1KSkgKyAoKHU2NCl4MzMgKiB4NykpKSArICgodTY0KXgyNyAqIHgxMykpICsgKCh1NjQpeDMxICogeDkpKSArICgodTY0KXgyMyAqIHgxNykpICsgKCh1NjQpeDM1ICogeDUpKTsKKysJeyB1NjQgeDQ3ID0gKCgoKCgoKCgodTY0KXgyOSAqIHgxMykgKyAoKHU2NCl4MzEgKiB4MTEpKSArICgodTY0KXgyNyAqIHgxNSkpICsgKCh1NjQpeDMzICogeDkpKSArICgodTY0KXgyNSAqIHgxNykpICsgKCh1NjQpeDM1ICogeDcpKSArICgodTY0KXgyMyAqIHgxOSkpICsgKCh1NjQpeDM3ICogeDUpKTsKKysJeyB1NjQgeDQ4ID0gKCgoKCgoKHU2NCl4MzEgKiB4MTMpICsgKDB4MiAqICgoKCgodTY0KXgyOSAqIHgxNSkgKyAoKHU2NCl4MzMgKiB4MTEpKSArICgodTY0KXgyNSAqIHgxOSkpICsgKCh1NjQpeDM3ICogeDcpKSkpICsgKCh1NjQpeDI3ICogeDE3KSkgKyAoKHU2NCl4MzUgKiB4OSkpICsgKCh1NjQpeDIzICogeDIxKSkgKyAoKHU2NCl4MzkgKiB4NSkpOworKwl7IHU2NCB4NDkgPSAoKCgoKCgoKCgoKHU2NCl4MzEgKiB4MTUpICsgKCh1NjQpeDMzICogeDEzKSkgKyAoKHU2NCl4MjkgKiB4MTcpKSArICgodTY0KXgzNSAqIHgxMSkpICsgKCh1NjQpeDI3ICogeDE5KSkgKyAoKHU2NCl4MzcgKiB4OSkpICsgKCh1NjQpeDI1ICogeDIxKSkgKyAoKHU2NCl4MzkgKiB4NykpICsgKCh1NjQpeDIzICogeDIwKSkgKyAoKHU2NCl4MzggKiB4NSkpOworKwl7IHU2NCB4NTAgPSAoKCgoKDB4MiAqICgoKCgoKHU2NCl4MzMgKiB4MTUpICsgKCh1NjQpeDI5ICogeDE5KSkgKyAoKHU2NCl4MzcgKiB4MTEpKSArICgodTY0KXgyNSAqIHgyMCkpICsgKCh1NjQpeDM4ICogeDcpKSkgKyAoKHU2NCl4MzEgKiB4MTcpKSArICgodTY0KXgzNSAqIHgxMykpICsgKCh1NjQpeDI3ICogeDIxKSkgKyAoKHU2NCl4MzkgKiB4OSkpOworKwl7IHU2NCB4NTEgPSAoKCgoKCgoKCh1NjQpeDMzICogeDE3KSArICgodTY0KXgzNSAqIHgxNSkpICsgKCh1NjQpeDMxICogeDE5KSkgKyAoKHU2NCl4MzcgKiB4MTMpKSArICgodTY0KXgyOSAqIHgyMSkpICsgKCh1NjQpeDM5ICogeDExKSkgKyAoKHU2NCl4MjcgKiB4MjApKSArICgodTY0KXgzOCAqIHg5KSk7CisrCXsgdTY0IHg1MiA9ICgoKCgodTY0KXgzNSAqIHgxNykgKyAoMHgyICogKCgoKCh1NjQpeDMzICogeDE5KSArICgodTY0KXgzNyAqIHgxNSkpICsgKCh1NjQpeDI5ICogeDIwKSkgKyAoKHU2NCl4MzggKiB4MTEpKSkpICsgKCh1NjQpeDMxICogeDIxKSkgKyAoKHU2NCl4MzkgKiB4MTMpKTsKKysJeyB1NjQgeDUzID0gKCgoKCgoKHU2NCl4MzUgKiB4MTkpICsgKCh1NjQpeDM3ICogeDE3KSkgKyAoKHU2NCl4MzMgKiB4MjEpKSArICgodTY0KXgzOSAqIHgxNSkpICsgKCh1NjQpeDMxICogeDIwKSkgKyAoKHU2NCl4MzggKiB4MTMpKTsKKysJeyB1NjQgeDU0ID0gKCgoMHgyICogKCgoKHU2NCl4MzcgKiB4MTkpICsgKCh1NjQpeDMzICogeDIwKSkgKyAoKHU2NCl4MzggKiB4MTUpKSkgKyAoKHU2NCl4MzUgKiB4MjEpKSArICgodTY0KXgzOSAqIHgxNykpOworKwl7IHU2NCB4NTUgPSAoKCgoKHU2NCl4MzcgKiB4MjEpICsgKCh1NjQpeDM5ICogeDE5KSkgKyAoKHU2NCl4MzUgKiB4MjApKSArICgodTY0KXgzOCAqIHgxNykpOworKwl7IHU2NCB4NTYgPSAoKCh1NjQpeDM5ICogeDIxKSArICgweDIgKiAoKCh1NjQpeDM3ICogeDIwKSArICgodTY0KXgzOCAqIHgxOSkpKSk7CisrCXsgdTY0IHg1NyA9ICgoKHU2NCl4MzkgKiB4MjApICsgKCh1NjQpeDM4ICogeDIxKSk7CisrCXsgdTY0IHg1OCA9ICgodTY0KSgweDIgKiB4MzgpICogeDIwKTsKKysJeyB1NjQgeDU5ID0gKHg0OCArICh4NTggPDwgMHg0KSk7CisrCXsgdTY0IHg2MCA9ICh4NTkgKyAoeDU4IDw8IDB4MSkpOworKwl7IHU2NCB4NjEgPSAoeDYwICsgeDU4KTsKKysJeyB1NjQgeDYyID0gKHg0NyArICh4NTcgPDwgMHg0KSk7CisrCXsgdTY0IHg2MyA9ICh4NjIgKyAoeDU3IDw8IDB4MSkpOworKwl7IHU2NCB4NjQgPSAoeDYzICsgeDU3KTsKKysJeyB1NjQgeDY1ID0gKHg0NiArICh4NTYgPDwgMHg0KSk7CisrCXsgdTY0IHg2NiA9ICh4NjUgKyAoeDU2IDw8IDB4MSkpOworKwl7IHU2NCB4NjcgPSAoeDY2ICsgeDU2KTsKKysJeyB1NjQgeDY4ID0gKHg0NSArICh4NTUgPDwgMHg0KSk7CisrCXsgdTY0IHg2OSA9ICh4NjggKyAoeDU1IDw8IDB4MSkpOworKwl7IHU2NCB4NzAgPSAoeDY5ICsgeDU1KTsKKysJeyB1NjQgeDcxID0gKHg0NCArICh4NTQgPDwgMHg0KSk7CisrCXsgdTY0IHg3MiA9ICh4NzEgKyAoeDU0IDw8IDB4MSkpOworKwl7IHU2NCB4NzMgPSAoeDcyICsgeDU0KTsKKysJeyB1NjQgeDc0ID0gKHg0MyArICh4NTMgPDwgMHg0KSk7CisrCXsgdTY0IHg3NSA9ICh4NzQgKyAoeDUzIDw8IDB4MSkpOworKwl7IHU2NCB4NzYgPSAoeDc1ICsgeDUzKTsKKysJeyB1NjQgeDc3ID0gKHg0MiArICh4NTIgPDwgMHg0KSk7CisrCXsgdTY0IHg3OCA9ICh4NzcgKyAoeDUyIDw8IDB4MSkpOworKwl7IHU2NCB4NzkgPSAoeDc4ICsgeDUyKTsKKysJeyB1NjQgeDgwID0gKHg0MSArICh4NTEgPDwgMHg0KSk7CisrCXsgdTY0IHg4MSA9ICh4ODAgKyAoeDUxIDw8IDB4MSkpOworKwl7IHU2NCB4ODIgPSAoeDgxICsgeDUxKTsKKysJeyB1NjQgeDgzID0gKHg0MCArICh4NTAgPDwgMHg0KSk7CisrCXsgdTY0IHg4NCA9ICh4ODMgKyAoeDUwIDw8IDB4MSkpOworKwl7IHU2NCB4ODUgPSAoeDg0ICsgeDUwKTsKKysJeyB1NjQgeDg2ID0gKHg4NSA+PiAweDFhKTsKKysJeyB1MzIgeDg3ID0gKCh1MzIpeDg1ICYgMHgzZmZmZmZmKTsKKysJeyB1NjQgeDg4ID0gKHg4NiArIHg4Mik7CisrCXsgdTY0IHg4OSA9ICh4ODggPj4gMHgxOSk7CisrCXsgdTMyIHg5MCA9ICgodTMyKXg4OCAmIDB4MWZmZmZmZik7CisrCXsgdTY0IHg5MSA9ICh4ODkgKyB4NzkpOworKwl7IHU2NCB4OTIgPSAoeDkxID4+IDB4MWEpOworKwl7IHUzMiB4OTMgPSAoKHUzMil4OTEgJiAweDNmZmZmZmYpOworKwl7IHU2NCB4OTQgPSAoeDkyICsgeDc2KTsKKysJeyB1NjQgeDk1ID0gKHg5NCA+PiAweDE5KTsKKysJeyB1MzIgeDk2ID0gKCh1MzIpeDk0ICYgMHgxZmZmZmZmKTsKKysJeyB1NjQgeDk3ID0gKHg5NSArIHg3Myk7CisrCXsgdTY0IHg5OCA9ICh4OTcgPj4gMHgxYSk7CisrCXsgdTMyIHg5OSA9ICgodTMyKXg5NyAmIDB4M2ZmZmZmZik7CisrCXsgdTY0IHgxMDAgPSAoeDk4ICsgeDcwKTsKKysJeyB1NjQgeDEwMSA9ICh4MTAwID4+IDB4MTkpOworKwl7IHUzMiB4MTAyID0gKCh1MzIpeDEwMCAmIDB4MWZmZmZmZik7CisrCXsgdTY0IHgxMDMgPSAoeDEwMSArIHg2Nyk7CisrCXsgdTY0IHgxMDQgPSAoeDEwMyA+PiAweDFhKTsKKysJeyB1MzIgeDEwNSA9ICgodTMyKXgxMDMgJiAweDNmZmZmZmYpOworKwl7IHU2NCB4MTA2ID0gKHgxMDQgKyB4NjQpOworKwl7IHU2NCB4MTA3ID0gKHgxMDYgPj4gMHgxOSk7CisrCXsgdTMyIHgxMDggPSAoKHUzMil4MTA2ICYgMHgxZmZmZmZmKTsKKysJeyB1NjQgeDEwOSA9ICh4MTA3ICsgeDYxKTsKKysJeyB1NjQgeDExMCA9ICh4MTA5ID4+IDB4MWEpOworKwl7IHUzMiB4MTExID0gKCh1MzIpeDEwOSAmIDB4M2ZmZmZmZik7CisrCXsgdTY0IHgxMTIgPSAoeDExMCArIHg0OSk7CisrCXsgdTY0IHgxMTMgPSAoeDExMiA+PiAweDE5KTsKKysJeyB1MzIgeDExNCA9ICgodTMyKXgxMTIgJiAweDFmZmZmZmYpOworKwl7IHU2NCB4MTE1ID0gKHg4NyArICgweDEzICogeDExMykpOworKwl7IHUzMiB4MTE2ID0gKHUzMikgKHgxMTUgPj4gMHgxYSk7CisrCXsgdTMyIHgxMTcgPSAoKHUzMil4MTE1ICYgMHgzZmZmZmZmKTsKKysJeyB1MzIgeDExOCA9ICh4MTE2ICsgeDkwKTsKKysJeyB1MzIgeDExOSA9ICh4MTE4ID4+IDB4MTkpOworKwl7IHUzMiB4MTIwID0gKHgxMTggJiAweDFmZmZmZmYpOworKwlvdXRbMF0gPSB4MTE3OworKwlvdXRbMV0gPSB4MTIwOworKwlvdXRbMl0gPSAoeDExOSArIHg5Myk7CisrCW91dFszXSA9IHg5NjsKKysJb3V0WzRdID0geDk5OworKwlvdXRbNV0gPSB4MTAyOworKwlvdXRbNl0gPSB4MTA1OworKwlvdXRbN10gPSB4MTA4OworKwlvdXRbOF0gPSB4MTExOworKwlvdXRbOV0gPSB4MTE0OworKwl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fQorK30KKysKKytzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgZmVfbXVsMTIxNjY2KGZlICpoLCBjb25zdCBmZV9sb29zZSAqZikKKyt7CisrCWZlX211bF8xMjE2NjZfaW1wbChoLT52LCBmLT52KTsKKyt9CisrCisrdm9pZCBjdXJ2ZTI1NTE5X2dlbmVyaWModTggb3V0W0NVUlZFMjU1MTlfS0VZX1NJWkVdLAorKwkJCWNvbnN0IHU4IHNjYWxhcltDVVJWRTI1NTE5X0tFWV9TSVpFXSwKKysJCQljb25zdCB1OCBwb2ludFtDVVJWRTI1NTE5X0tFWV9TSVpFXSkKKyt7CisrCWZlIHgxLCB4MiwgejIsIHgzLCB6MzsKKysJZmVfbG9vc2UgeDJsLCB6MmwsIHgzbDsKKysJdW5zaWduZWQgc3dhcCA9IDA7CisrCWludCBwb3M7CisrCXU4IGVbMzJdOworKworKwltZW1jcHkoZSwgc2NhbGFyLCAzMik7CisrCWN1cnZlMjU1MTlfY2xhbXBfc2VjcmV0KGUpOworKworKwkvKiBUaGUgZm9sbG93aW5nIGltcGxlbWVudGF0aW9uIHdhcyB0cmFuc2NyaWJlZCB0byBDb3EgYW5kIHByb3ZlbiB0bworKwkgKiBjb3JyZXNwb25kIHRvIHVuYXJ5IHNjYWxhciBtdWx0aXBsaWNhdGlvbiBpbiBhZmZpbmUgY29vcmRpbmF0ZXMgZ2l2ZW4KKysJICogdGhhdCB4MSAhPSAwIGlzIHRoZSB4IGNvb3JkaW5hdGUgb2Ygc29tZSBwb2ludCBvbiB0aGUgY3VydmUuIEl0IHdhcworKwkgKiBhbHNvIGNoZWNrZWQgaW4gQ29xIHRoYXQgZG9pbmcgYSBsYWRkZXJzdGVwIHdpdGggeDEgPSB4MyA9IDAgZ2l2ZXMKKysJICogejInID0gejMnID0gMCwgYW5kIHoyID0gejMgPSAwIGdpdmVzIHoyJyA9IHozJyA9IDAuIFRoZSBzdGF0ZW1lbnQgd2FzCisrCSAqIHF1YW50aWZpZWQgb3ZlciB0aGUgdW5kZXJseWluZyBmaWVsZCwgc28gaXQgYXBwbGllcyB0byBDdXJ2ZTI1NTE5CisrCSAqIGl0c2VsZiBhbmQgdGhlIHF1YWRyYXRpYyB0d2lzdCBvZiBDdXJ2ZTI1NTE5LiBJdCB3YXMgbm90IHByb3ZlbiBpbgorKwkgKiBDb3EgdGhhdCBwcmltZS1maWVsZCBhcml0aG1ldGljIGNvcnJlY3RseSBzaW11bGF0ZXMgZXh0ZW5zaW9uLWZpZWxkCisrCSAqIGFyaXRobWV0aWMgb24gcHJpbWUtZmllbGQgdmFsdWVzLiBUaGUgZGVjb2Rpbmcgb2YgdGhlIGJ5dGUgYXJyYXkKKysJICogcmVwcmVzZW50YXRpb24gb2YgZSB3YXMgbm90IGNvbnNpZGVyZWQuCisrCSAqCisrCSAqIFNwZWNpZmljYXRpb24gb2YgTW9udGdvbWVyeSBjdXJ2ZXMgaW4gYWZmaW5lIGNvb3JkaW5hdGVzOgorKwkgKiA8aHR0cHM6Ly9naXRodWIuY29tL21pdC1wbHYvZmlhdC1jcnlwdG8vYmxvYi8yNDU2ZDgyMTgyNTUyMWY3ZTAzZTY1ODgyY2MzNTIxNzk1YjAzMjBmL3NyYy9TcGVjL01vbnRnb21lcnlDdXJ2ZS52I0wyNz4KKysJICoKKysJICogUHJvb2YgdGhhdCB0aGVzZSBmb3JtIGEgZ3JvdXAgdGhhdCBpcyBpc29tb3JwaGljIHRvIGEgV2VpZXJzdHJhc3MKKysJICogY3VydmU6CisrCSAqIDxodHRwczovL2dpdGh1Yi5jb20vbWl0LXBsdi9maWF0LWNyeXB0by9ibG9iLzI0NTZkODIxODI1NTIxZjdlMDNlNjU4ODJjYzM1MjE3OTViMDMyMGYvc3JjL0N1cnZlcy9Nb250Z29tZXJ5L0FmZmluZVByb29mcy52I0wzNT4KKysJICoKKysJICogQ29xIHRyYW5zY3JpcHRpb24gYW5kIGNvcnJlY3RuZXNzIHByb29mIG9mIHRoZSBsb29wCisrCSAqICh3aGVyZSBzY2FsYXJiaXRzPTI1NSk6CisrCSAqIDxodHRwczovL2dpdGh1Yi5jb20vbWl0LXBsdi9maWF0LWNyeXB0by9ibG9iLzI0NTZkODIxODI1NTIxZjdlMDNlNjU4ODJjYzM1MjE3OTViMDMyMGYvc3JjL0N1cnZlcy9Nb250Z29tZXJ5L1haLnYjTDExOD4KKysJICogPGh0dHBzOi8vZ2l0aHViLmNvbS9taXQtcGx2L2ZpYXQtY3J5cHRvL2Jsb2IvMjQ1NmQ4MjE4MjU1MjFmN2UwM2U2NTg4MmNjMzUyMTc5NWIwMzIwZi9zcmMvQ3VydmVzL01vbnRnb21lcnkvWFpQcm9vZnMudiNMMjc4PgorKwkgKiBwcmVjb25kaXRpb25zOiAwIDw9IGUgPCAyXjI1NSAobm90IG5lY2Vzc2FyaWx5IGUgPCBvcmRlciksCisrCSAqIGZlX2ludmVydCgwKSA9IDAKKysJICovCisrCWZlX2Zyb21ieXRlcygmeDEsIHBvaW50KTsKKysJZmVfMSgmeDIpOworKwlmZV8wKCZ6Mik7CisrCWZlX2NvcHkoJngzLCAmeDEpOworKwlmZV8xKCZ6Myk7CisrCisrCWZvciAocG9zID0gMjU0OyBwb3MgPj0gMDsgLS1wb3MpIHsKKysJCWZlIHRtcDAsIHRtcDE7CisrCQlmZV9sb29zZSB0bXAwbCwgdG1wMWw7CisrCQkvKiBsb29wIGludmFyaWFudCBhcyBvZiByaWdodCBiZWZvcmUgdGhlIHRlc3QsIGZvciB0aGUgY2FzZQorKwkJICogd2hlcmUgeDEgIT0gMDoKKysJCSAqICAgcG9zID49IC0xOyBpZiB6MiA9IDAgdGhlbiB4MiBpcyBub256ZXJvOyBpZiB6MyA9IDAgdGhlbiB4MworKwkJICogICBpcyBub256ZXJvCisrCQkgKiAgIGxldCByIDo9IGUgPj4gKHBvcysxKSBpbiB0aGUgZm9sbG93aW5nIGVxdWFsaXRpZXMgb2YKKysJCSAqICAgcHJvamVjdGl2ZSBwb2ludHM6CisrCQkgKiAgIHRvX3h6IChyKlApICAgICA9PT0gaWYgc3dhcCB0aGVuICh4MywgejMpIGVsc2UgKHgyLCB6MikKKysJCSAqICAgdG9feHogKChyKzEpKlApID09PSBpZiBzd2FwIHRoZW4gKHgyLCB6MikgZWxzZSAoeDMsIHozKQorKwkJICogICB4MSBpcyB0aGUgbm9uemVybyB4IGNvb3JkaW5hdGUgb2YgdGhlIG5vbnplcm8KKysJCSAqICAgcG9pbnQgKHIqUC0ocisxKSpQKQorKwkJICovCisrCQl1bnNpZ25lZCBiID0gMSAmIChlW3BvcyAvIDhdID4+IChwb3MgJiA3KSk7CisrCQlzd2FwIF49IGI7CisrCQlmZV9jc3dhcCgmeDIsICZ4Mywgc3dhcCk7CisrCQlmZV9jc3dhcCgmejIsICZ6Mywgc3dhcCk7CisrCQlzd2FwID0gYjsKKysJCS8qIENvcSB0cmFuc2NyaXB0aW9uIG9mIGxhZGRlcnN0ZXAgZm9ybXVsYSAoY2FsbGVkIGZyb20KKysJCSAqIHRyYW5zY3JpYmVkIGxvb3ApOgorKwkJICogPGh0dHBzOi8vZ2l0aHViLmNvbS9taXQtcGx2L2ZpYXQtY3J5cHRvL2Jsb2IvMjQ1NmQ4MjE4MjU1MjFmN2UwM2U2NTg4MmNjMzUyMTc5NWIwMzIwZi9zcmMvQ3VydmVzL01vbnRnb21lcnkvWFoudiNMODk+CisrCQkgKiA8aHR0cHM6Ly9naXRodWIuY29tL21pdC1wbHYvZmlhdC1jcnlwdG8vYmxvYi8yNDU2ZDgyMTgyNTUyMWY3ZTAzZTY1ODgyY2MzNTIxNzk1YjAzMjBmL3NyYy9DdXJ2ZXMvTW9udGdvbWVyeS9YWlByb29mcy52I0wxMzE+CisrCQkgKiB4MSAhPSAwIDxodHRwczovL2dpdGh1Yi5jb20vbWl0LXBsdi9maWF0LWNyeXB0by9ibG9iLzI0NTZkODIxODI1NTIxZjdlMDNlNjU4ODJjYzM1MjE3OTViMDMyMGYvc3JjL0N1cnZlcy9Nb250Z29tZXJ5L1haUHJvb2ZzLnYjTDIxNz4KKysJCSAqIHgxICA9IDAgPGh0dHBzOi8vZ2l0aHViLmNvbS9taXQtcGx2L2ZpYXQtY3J5cHRvL2Jsb2IvMjQ1NmQ4MjE4MjU1MjFmN2UwM2U2NTg4MmNjMzUyMTc5NWIwMzIwZi9zcmMvQ3VydmVzL01vbnRnb21lcnkvWFpQcm9vZnMudiNMMTQ3PgorKwkJICovCisrCQlmZV9zdWIoJnRtcDBsLCAmeDMsICZ6Myk7CisrCQlmZV9zdWIoJnRtcDFsLCAmeDIsICZ6Mik7CisrCQlmZV9hZGQoJngybCwgJngyLCAmejIpOworKwkJZmVfYWRkKCZ6MmwsICZ4MywgJnozKTsKKysJCWZlX211bF90bGwoJnozLCAmdG1wMGwsICZ4MmwpOworKwkJZmVfbXVsX3RsbCgmejIsICZ6MmwsICZ0bXAxbCk7CisrCQlmZV9zcV90bCgmdG1wMCwgJnRtcDFsKTsKKysJCWZlX3NxX3RsKCZ0bXAxLCAmeDJsKTsKKysJCWZlX2FkZCgmeDNsLCAmejMsICZ6Mik7CisrCQlmZV9zdWIoJnoybCwgJnozLCAmejIpOworKwkJZmVfbXVsX3R0dCgmeDIsICZ0bXAxLCAmdG1wMCk7CisrCQlmZV9zdWIoJnRtcDFsLCAmdG1wMSwgJnRtcDApOworKwkJZmVfc3FfdGwoJnoyLCAmejJsKTsKKysJCWZlX211bDEyMTY2NigmejMsICZ0bXAxbCk7CisrCQlmZV9zcV90bCgmeDMsICZ4M2wpOworKwkJZmVfYWRkKCZ0bXAwbCwgJnRtcDAsICZ6Myk7CisrCQlmZV9tdWxfdHR0KCZ6MywgJngxLCAmejIpOworKwkJZmVfbXVsX3RsbCgmejIsICZ0bXAxbCwgJnRtcDBsKTsKKysJfQorKwkvKiBoZXJlIHBvcz0tMSwgc28gcj1lLCBzbyB0b194eiAoZSpQKSA9PT0gaWYgc3dhcCB0aGVuICh4MywgejMpCisrCSAqIGVsc2UgKHgyLCB6MikKKysJICovCisrCWZlX2Nzd2FwKCZ4MiwgJngzLCBzd2FwKTsKKysJZmVfY3N3YXAoJnoyLCAmejMsIHN3YXApOworKworKwlmZV9pbnZlcnQoJnoyLCAmejIpOworKwlmZV9tdWxfdHR0KCZ4MiwgJngyLCAmejIpOworKwlmZV90b2J5dGVzKG91dCwgJngyKTsKKysKKysJbWVtemVyb19leHBsaWNpdCgmeDEsIHNpemVvZih4MSkpOworKwltZW16ZXJvX2V4cGxpY2l0KCZ4Miwgc2l6ZW9mKHgyKSk7CisrCW1lbXplcm9fZXhwbGljaXQoJnoyLCBzaXplb2YoejIpKTsKKysJbWVtemVyb19leHBsaWNpdCgmeDMsIHNpemVvZih4MykpOworKwltZW16ZXJvX2V4cGxpY2l0KCZ6Mywgc2l6ZW9mKHozKSk7CisrCW1lbXplcm9fZXhwbGljaXQoJngybCwgc2l6ZW9mKHgybCkpOworKwltZW16ZXJvX2V4cGxpY2l0KCZ6MmwsIHNpemVvZih6MmwpKTsKKysJbWVtemVyb19leHBsaWNpdCgmeDNsLCBzaXplb2YoeDNsKSk7CisrCW1lbXplcm9fZXhwbGljaXQoJmUsIHNpemVvZihlKSk7CisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGliL2NyeXB0by9jdXJ2ZTI1NTE5LWhhY2w2NC5jCitAQCAtMCwwICsxLDc4OCBAQAorKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVAorKy8qCisrICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgSU5SSUEgYW5kIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4KKysgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisrICoKKysgKiBUaGlzIGlzIGEgbWFjaGluZS1nZW5lcmF0ZWQgZm9ybWFsbHkgdmVyaWZpZWQgaW1wbGVtZW50YXRpb24gb2YgQ3VydmUyNTUxOQorKyAqIEVDREggZnJvbTogPGh0dHBzOi8vZ2l0aHViLmNvbS9taXRscy9oYWNsLXN0YXI+LiBUaG91Z2ggb3JpZ2luYWxseSBtYWNoaW5lCisrICogZ2VuZXJhdGVkLCBpdCBoYXMgYmVlbiB0d2Vha2VkIHRvIGJlIHN1aXRhYmxlIGZvciB1c2UgaW4gdGhlIGtlcm5lbC4gSXQgaXMKKysgKiBvcHRpbWl6ZWQgZm9yIDY0LWJpdCBtYWNoaW5lcyB0aGF0IGNhbiBlZmZpY2llbnRseSB3b3JrIHdpdGggMTI4LWJpdAorKyAqIGludGVnZXIgdHlwZXMuCisrICovCisrCisrI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKysjaW5jbHVkZSA8Y3J5cHRvL2N1cnZlMjU1MTkuaD4KKysjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisrCisrdHlwZWRlZiBfX3VpbnQxMjhfdCB1MTI4OworKworK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTY0IHU2NF9lcV9tYXNrKHU2NCBhLCB1NjQgYikKKyt7CisrCXU2NCB4ID0gYSBeIGI7CisrCXU2NCBtaW51c194ID0gfnggKyAodTY0KTFVOworKwl1NjQgeF9vcl9taW51c194ID0geCB8IG1pbnVzX3g7CisrCXU2NCB4bnggPSB4X29yX21pbnVzX3ggPj4gKHUzMik2M1U7CisrCXU2NCBjID0geG54IC0gKHU2NCkxVTsKKysJcmV0dXJuIGM7CisrfQorKworK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdTY0IHU2NF9ndGVfbWFzayh1NjQgYSwgdTY0IGIpCisreworKwl1NjQgeCA9IGE7CisrCXU2NCB5ID0gYjsKKysJdTY0IHhfeG9yX3kgPSB4IF4geTsKKysJdTY0IHhfc3ViX3kgPSB4IC0geTsKKysJdTY0IHhfc3ViX3lfeG9yX3kgPSB4X3N1Yl95IF4geTsKKysJdTY0IHEgPSB4X3hvcl95IHwgeF9zdWJfeV94b3JfeTsKKysJdTY0IHhfeG9yX3EgPSB4IF4gcTsKKysJdTY0IHhfeG9yX3FfID0geF94b3JfcSA+PiAodTMyKTYzVTsKKysJdTY0IGMgPSB4X3hvcl9xXyAtICh1NjQpMVU7CisrCXJldHVybiBjOworK30KKysKKytzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbW9kdWxvX2NhcnJ5X3RvcCh1NjQgKmIpCisreworKwl1NjQgYjQgPSBiWzRdOworKwl1NjQgYjAgPSBiWzBdOworKwl1NjQgYjRfID0gYjQgJiAweDdmZmZmZmZmZmZmZmZMTFU7CisrCXU2NCBiMF8gPSBiMCArIDE5ICogKGI0ID4+IDUxKTsKKysJYls0XSA9IGI0XzsKKysJYlswXSA9IGIwXzsKKyt9CisrCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGZwcm9kdWN0X2NvcHlfZnJvbV93aWRlXyh1NjQgKm91dHB1dCwgdTEyOCAqaW5wdXQpCisreworKwl7CisrCQl1MTI4IHhpID0gaW5wdXRbMF07CisrCQlvdXRwdXRbMF0gPSAoKHU2NCkoeGkpKTsKKysJfQorKwl7CisrCQl1MTI4IHhpID0gaW5wdXRbMV07CisrCQlvdXRwdXRbMV0gPSAoKHU2NCkoeGkpKTsKKysJfQorKwl7CisrCQl1MTI4IHhpID0gaW5wdXRbMl07CisrCQlvdXRwdXRbMl0gPSAoKHU2NCkoeGkpKTsKKysJfQorKwl7CisrCQl1MTI4IHhpID0gaW5wdXRbM107CisrCQlvdXRwdXRbM10gPSAoKHU2NCkoeGkpKTsKKysJfQorKwl7CisrCQl1MTI4IHhpID0gaW5wdXRbNF07CisrCQlvdXRwdXRbNF0gPSAoKHU2NCkoeGkpKTsKKysJfQorK30KKysKKytzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQKKytmcHJvZHVjdF9zdW1fc2NhbGFyX211bHRpcGxpY2F0aW9uXyh1MTI4ICpvdXRwdXQsIHU2NCAqaW5wdXQsIHU2NCBzKQorK3sKKysJb3V0cHV0WzBdICs9ICh1MTI4KWlucHV0WzBdICogczsKKysJb3V0cHV0WzFdICs9ICh1MTI4KWlucHV0WzFdICogczsKKysJb3V0cHV0WzJdICs9ICh1MTI4KWlucHV0WzJdICogczsKKysJb3V0cHV0WzNdICs9ICh1MTI4KWlucHV0WzNdICogczsKKysJb3V0cHV0WzRdICs9ICh1MTI4KWlucHV0WzRdICogczsKKyt9CisrCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGZwcm9kdWN0X2NhcnJ5X3dpZGVfKHUxMjggKnRtcCkKKyt7CisrCXsKKysJCXUzMiBjdHIgPSAwOworKwkJdTEyOCB0Y3RyID0gdG1wW2N0cl07CisrCQl1MTI4IHRjdHJwMSA9IHRtcFtjdHIgKyAxXTsKKysJCXU2NCByMCA9ICgodTY0KSh0Y3RyKSkgJiAweDdmZmZmZmZmZmZmZmZMTFU7CisrCQl1MTI4IGMgPSAoKHRjdHIpID4+ICg1MSkpOworKwkJdG1wW2N0cl0gPSAoKHUxMjgpKHIwKSk7CisrCQl0bXBbY3RyICsgMV0gPSAoKHRjdHJwMSkgKyAoYykpOworKwl9CisrCXsKKysJCXUzMiBjdHIgPSAxOworKwkJdTEyOCB0Y3RyID0gdG1wW2N0cl07CisrCQl1MTI4IHRjdHJwMSA9IHRtcFtjdHIgKyAxXTsKKysJCXU2NCByMCA9ICgodTY0KSh0Y3RyKSkgJiAweDdmZmZmZmZmZmZmZmZMTFU7CisrCQl1MTI4IGMgPSAoKHRjdHIpID4+ICg1MSkpOworKwkJdG1wW2N0cl0gPSAoKHUxMjgpKHIwKSk7CisrCQl0bXBbY3RyICsgMV0gPSAoKHRjdHJwMSkgKyAoYykpOworKwl9CisrCisrCXsKKysJCXUzMiBjdHIgPSAyOworKwkJdTEyOCB0Y3RyID0gdG1wW2N0cl07CisrCQl1MTI4IHRjdHJwMSA9IHRtcFtjdHIgKyAxXTsKKysJCXU2NCByMCA9ICgodTY0KSh0Y3RyKSkgJiAweDdmZmZmZmZmZmZmZmZMTFU7CisrCQl1MTI4IGMgPSAoKHRjdHIpID4+ICg1MSkpOworKwkJdG1wW2N0cl0gPSAoKHUxMjgpKHIwKSk7CisrCQl0bXBbY3RyICsgMV0gPSAoKHRjdHJwMSkgKyAoYykpOworKwl9CisrCXsKKysJCXUzMiBjdHIgPSAzOworKwkJdTEyOCB0Y3RyID0gdG1wW2N0cl07CisrCQl1MTI4IHRjdHJwMSA9IHRtcFtjdHIgKyAxXTsKKysJCXU2NCByMCA9ICgodTY0KSh0Y3RyKSkgJiAweDdmZmZmZmZmZmZmZmZMTFU7CisrCQl1MTI4IGMgPSAoKHRjdHIpID4+ICg1MSkpOworKwkJdG1wW2N0cl0gPSAoKHUxMjgpKHIwKSk7CisrCQl0bXBbY3RyICsgMV0gPSAoKHRjdHJwMSkgKyAoYykpOworKwl9CisrfQorKworK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBmbXVsX3NoaWZ0X3JlZHVjZSh1NjQgKm91dHB1dCkKKyt7CisrCXU2NCB0bXAgPSBvdXRwdXRbNF07CisrCXU2NCBiMDsKKysJeworKwkJdTMyIGN0ciA9IDUgLSAwIC0gMTsKKysJCXU2NCB6ID0gb3V0cHV0W2N0ciAtIDFdOworKwkJb3V0cHV0W2N0cl0gPSB6OworKwl9CisrCXsKKysJCXUzMiBjdHIgPSA1IC0gMSAtIDE7CisrCQl1NjQgeiA9IG91dHB1dFtjdHIgLSAxXTsKKysJCW91dHB1dFtjdHJdID0gejsKKysJfQorKwl7CisrCQl1MzIgY3RyID0gNSAtIDIgLSAxOworKwkJdTY0IHogPSBvdXRwdXRbY3RyIC0gMV07CisrCQlvdXRwdXRbY3RyXSA9IHo7CisrCX0KKysJeworKwkJdTMyIGN0ciA9IDUgLSAzIC0gMTsKKysJCXU2NCB6ID0gb3V0cHV0W2N0ciAtIDFdOworKwkJb3V0cHV0W2N0cl0gPSB6OworKwl9CisrCW91dHB1dFswXSA9IHRtcDsKKysJYjAgPSBvdXRwdXRbMF07CisrCW91dHB1dFswXSA9IDE5ICogYjA7CisrfQorKworK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBmbXVsX211bF9zaGlmdF9yZWR1Y2VfKHUxMjggKm91dHB1dCwgdTY0ICppbnB1dCwKKysJCQkJCQkgICB1NjQgKmlucHV0MjEpCisreworKwl1MzIgaTsKKysJdTY0IGlucHV0Mmk7CisrCXsKKysJCXU2NCBpbnB1dDJpID0gaW5wdXQyMVswXTsKKysJCWZwcm9kdWN0X3N1bV9zY2FsYXJfbXVsdGlwbGljYXRpb25fKG91dHB1dCwgaW5wdXQsIGlucHV0MmkpOworKwkJZm11bF9zaGlmdF9yZWR1Y2UoaW5wdXQpOworKwl9CisrCXsKKysJCXU2NCBpbnB1dDJpID0gaW5wdXQyMVsxXTsKKysJCWZwcm9kdWN0X3N1bV9zY2FsYXJfbXVsdGlwbGljYXRpb25fKG91dHB1dCwgaW5wdXQsIGlucHV0MmkpOworKwkJZm11bF9zaGlmdF9yZWR1Y2UoaW5wdXQpOworKwl9CisrCXsKKysJCXU2NCBpbnB1dDJpID0gaW5wdXQyMVsyXTsKKysJCWZwcm9kdWN0X3N1bV9zY2FsYXJfbXVsdGlwbGljYXRpb25fKG91dHB1dCwgaW5wdXQsIGlucHV0MmkpOworKwkJZm11bF9zaGlmdF9yZWR1Y2UoaW5wdXQpOworKwl9CisrCXsKKysJCXU2NCBpbnB1dDJpID0gaW5wdXQyMVszXTsKKysJCWZwcm9kdWN0X3N1bV9zY2FsYXJfbXVsdGlwbGljYXRpb25fKG91dHB1dCwgaW5wdXQsIGlucHV0MmkpOworKwkJZm11bF9zaGlmdF9yZWR1Y2UoaW5wdXQpOworKwl9CisrCWkgPSA0OworKwlpbnB1dDJpID0gaW5wdXQyMVtpXTsKKysJZnByb2R1Y3Rfc3VtX3NjYWxhcl9tdWx0aXBsaWNhdGlvbl8ob3V0cHV0LCBpbnB1dCwgaW5wdXQyaSk7CisrfQorKworK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBmbXVsX2ZtdWwodTY0ICpvdXRwdXQsIHU2NCAqaW5wdXQsIHU2NCAqaW5wdXQyMSkKKyt7CisrCXU2NCB0bXBbNV0gPSB7IGlucHV0WzBdLCBpbnB1dFsxXSwgaW5wdXRbMl0sIGlucHV0WzNdLCBpbnB1dFs0XSB9OworKwl7CisrCQl1MTI4IGI0OworKwkJdTEyOCBiMDsKKysJCXUxMjggYjRfOworKwkJdTEyOCBiMF87CisrCQl1NjQgaTA7CisrCQl1NjQgaTE7CisrCQl1NjQgaTBfOworKwkJdTY0IGkxXzsKKysJCXUxMjggdFs1XSA9IHsgMCB9OworKwkJZm11bF9tdWxfc2hpZnRfcmVkdWNlXyh0LCB0bXAsIGlucHV0MjEpOworKwkJZnByb2R1Y3RfY2Fycnlfd2lkZV8odCk7CisrCQliNCA9IHRbNF07CisrCQliMCA9IHRbMF07CisrCQliNF8gPSAoKGI0KSAmICgoKHUxMjgpKDB4N2ZmZmZmZmZmZmZmZkxMVSkpKSk7CisrCQliMF8gPSAoKGIwKSArICgoKHUxMjgpKDE5KSAqICgoKHU2NCkoKChiNCkgPj4gKDUxKSkpKSkpKSk7CisrCQl0WzRdID0gYjRfOworKwkJdFswXSA9IGIwXzsKKysJCWZwcm9kdWN0X2NvcHlfZnJvbV93aWRlXyhvdXRwdXQsIHQpOworKwkJaTAgPSBvdXRwdXRbMF07CisrCQlpMSA9IG91dHB1dFsxXTsKKysJCWkwXyA9IGkwICYgMHg3ZmZmZmZmZmZmZmZmTExVOworKwkJaTFfID0gaTEgKyAoaTAgPj4gNTEpOworKwkJb3V0cHV0WzBdID0gaTBfOworKwkJb3V0cHV0WzFdID0gaTFfOworKwl9CisrfQorKworK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBmc3F1YXJlX2ZzcXVhcmVfXyh1MTI4ICp0bXAsIHU2NCAqb3V0cHV0KQorK3sKKysJdTY0IHIwID0gb3V0cHV0WzBdOworKwl1NjQgcjEgPSBvdXRwdXRbMV07CisrCXU2NCByMiA9IG91dHB1dFsyXTsKKysJdTY0IHIzID0gb3V0cHV0WzNdOworKwl1NjQgcjQgPSBvdXRwdXRbNF07CisrCXU2NCBkMCA9IHIwICogMjsKKysJdTY0IGQxID0gcjEgKiAyOworKwl1NjQgZDIgPSByMiAqIDIgKiAxOTsKKysJdTY0IGQ0MTkgPSByNCAqIDE5OworKwl1NjQgZDQgPSBkNDE5ICogMjsKKysJdTEyOCBzMCA9ICgoKCgoKHUxMjgpKHIwKSAqIChyMCkpKSArICgoKHUxMjgpKGQ0KSAqIChyMSkpKSkpICsKKysJCSAgICgoKHUxMjgpKGQyKSAqIChyMykpKSk7CisrCXUxMjggczEgPSAoKCgoKCh1MTI4KShkMCkgKiAocjEpKSkgKyAoKCh1MTI4KShkNCkgKiAocjIpKSkpKSArCisrCQkgICAoKCh1MTI4KShyMyAqIDE5KSAqIChyMykpKSk7CisrCXUxMjggczIgPSAoKCgoKCh1MTI4KShkMCkgKiAocjIpKSkgKyAoKCh1MTI4KShyMSkgKiAocjEpKSkpKSArCisrCQkgICAoKCh1MTI4KShkNCkgKiAocjMpKSkpOworKwl1MTI4IHMzID0gKCgoKCgodTEyOCkoZDApICogKHIzKSkpICsgKCgodTEyOCkoZDEpICogKHIyKSkpKSkgKworKwkJICAgKCgodTEyOCkocjQpICogKGQ0MTkpKSkpOworKwl1MTI4IHM0ID0gKCgoKCgodTEyOCkoZDApICogKHI0KSkpICsgKCgodTEyOCkoZDEpICogKHIzKSkpKSkgKworKwkJICAgKCgodTEyOCkocjIpICogKHIyKSkpKTsKKysJdG1wWzBdID0gczA7CisrCXRtcFsxXSA9IHMxOworKwl0bXBbMl0gPSBzMjsKKysJdG1wWzNdID0gczM7CisrCXRtcFs0XSA9IHM0OworK30KKysKKytzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgZnNxdWFyZV9mc3F1YXJlXyh1MTI4ICp0bXAsIHU2NCAqb3V0cHV0KQorK3sKKysJdTEyOCBiNDsKKysJdTEyOCBiMDsKKysJdTEyOCBiNF87CisrCXUxMjggYjBfOworKwl1NjQgaTA7CisrCXU2NCBpMTsKKysJdTY0IGkwXzsKKysJdTY0IGkxXzsKKysJZnNxdWFyZV9mc3F1YXJlX18odG1wLCBvdXRwdXQpOworKwlmcHJvZHVjdF9jYXJyeV93aWRlXyh0bXApOworKwliNCA9IHRtcFs0XTsKKysJYjAgPSB0bXBbMF07CisrCWI0XyA9ICgoYjQpICYgKCgodTEyOCkoMHg3ZmZmZmZmZmZmZmZmTExVKSkpKTsKKysJYjBfID0gKChiMCkgKyAoKCh1MTI4KSgxOSkgKiAoKCh1NjQpKCgoYjQpID4+ICg1MSkpKSkpKSkpOworKwl0bXBbNF0gPSBiNF87CisrCXRtcFswXSA9IGIwXzsKKysJZnByb2R1Y3RfY29weV9mcm9tX3dpZGVfKG91dHB1dCwgdG1wKTsKKysJaTAgPSBvdXRwdXRbMF07CisrCWkxID0gb3V0cHV0WzFdOworKwlpMF8gPSBpMCAmIDB4N2ZmZmZmZmZmZmZmZkxMVTsKKysJaTFfID0gaTEgKyAoaTAgPj4gNTEpOworKwlvdXRwdXRbMF0gPSBpMF87CisrCW91dHB1dFsxXSA9IGkxXzsKKyt9CisrCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGZzcXVhcmVfZnNxdWFyZV90aW1lc18odTY0ICpvdXRwdXQsIHUxMjggKnRtcCwKKysJCQkJCQkgICB1MzIgY291bnQxKQorK3sKKysJdTMyIGk7CisrCWZzcXVhcmVfZnNxdWFyZV8odG1wLCBvdXRwdXQpOworKwlmb3IgKGkgPSAxOyBpIDwgY291bnQxOyArK2kpCisrCQlmc3F1YXJlX2ZzcXVhcmVfKHRtcCwgb3V0cHV0KTsKKyt9CisrCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGZzcXVhcmVfZnNxdWFyZV90aW1lcyh1NjQgKm91dHB1dCwgdTY0ICppbnB1dCwKKysJCQkJCQkgIHUzMiBjb3VudDEpCisreworKwl1MTI4IHRbNV07CisrCW1lbWNweShvdXRwdXQsIGlucHV0LCA1ICogc2l6ZW9mKCppbnB1dCkpOworKwlmc3F1YXJlX2ZzcXVhcmVfdGltZXNfKG91dHB1dCwgdCwgY291bnQxKTsKKyt9CisrCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGZzcXVhcmVfZnNxdWFyZV90aW1lc19pbnBsYWNlKHU2NCAqb3V0cHV0LAorKwkJCQkJCQkgIHUzMiBjb3VudDEpCisreworKwl1MTI4IHRbNV07CisrCWZzcXVhcmVfZnNxdWFyZV90aW1lc18ob3V0cHV0LCB0LCBjb3VudDEpOworK30KKysKKytzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgY3JlY2lwX2NyZWNpcCh1NjQgKm91dCwgdTY0ICp6KQorK3sKKysJdTY0IGJ1ZlsyMF0gPSB7IDAgfTsKKysJdTY0ICphMCA9IGJ1ZjsKKysJdTY0ICp0MDAgPSBidWYgKyA1OworKwl1NjQgKmIwID0gYnVmICsgMTA7CisrCXU2NCAqdDAxOworKwl1NjQgKmIxOworKwl1NjQgKmMwOworKwl1NjQgKmE7CisrCXU2NCAqdDA7CisrCXU2NCAqYjsKKysJdTY0ICpjOworKwlmc3F1YXJlX2ZzcXVhcmVfdGltZXMoYTAsIHosIDEpOworKwlmc3F1YXJlX2ZzcXVhcmVfdGltZXModDAwLCBhMCwgMik7CisrCWZtdWxfZm11bChiMCwgdDAwLCB6KTsKKysJZm11bF9mbXVsKGEwLCBiMCwgYTApOworKwlmc3F1YXJlX2ZzcXVhcmVfdGltZXModDAwLCBhMCwgMSk7CisrCWZtdWxfZm11bChiMCwgdDAwLCBiMCk7CisrCWZzcXVhcmVfZnNxdWFyZV90aW1lcyh0MDAsIGIwLCA1KTsKKysJdDAxID0gYnVmICsgNTsKKysJYjEgPSBidWYgKyAxMDsKKysJYzAgPSBidWYgKyAxNTsKKysJZm11bF9mbXVsKGIxLCB0MDEsIGIxKTsKKysJZnNxdWFyZV9mc3F1YXJlX3RpbWVzKHQwMSwgYjEsIDEwKTsKKysJZm11bF9mbXVsKGMwLCB0MDEsIGIxKTsKKysJZnNxdWFyZV9mc3F1YXJlX3RpbWVzKHQwMSwgYzAsIDIwKTsKKysJZm11bF9mbXVsKHQwMSwgdDAxLCBjMCk7CisrCWZzcXVhcmVfZnNxdWFyZV90aW1lc19pbnBsYWNlKHQwMSwgMTApOworKwlmbXVsX2ZtdWwoYjEsIHQwMSwgYjEpOworKwlmc3F1YXJlX2ZzcXVhcmVfdGltZXModDAxLCBiMSwgNTApOworKwlhID0gYnVmOworKwl0MCA9IGJ1ZiArIDU7CisrCWIgPSBidWYgKyAxMDsKKysJYyA9IGJ1ZiArIDE1OworKwlmbXVsX2ZtdWwoYywgdDAsIGIpOworKwlmc3F1YXJlX2ZzcXVhcmVfdGltZXModDAsIGMsIDEwMCk7CisrCWZtdWxfZm11bCh0MCwgdDAsIGMpOworKwlmc3F1YXJlX2ZzcXVhcmVfdGltZXNfaW5wbGFjZSh0MCwgNTApOworKwlmbXVsX2ZtdWwodDAsIHQwLCBiKTsKKysJZnNxdWFyZV9mc3F1YXJlX3RpbWVzX2lucGxhY2UodDAsIDUpOworKwlmbXVsX2ZtdWwob3V0LCB0MCwgYSk7CisrfQorKworK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBmc3VtKHU2NCAqYSwgdTY0ICpiKQorK3sKKysJYVswXSArPSBiWzBdOworKwlhWzFdICs9IGJbMV07CisrCWFbMl0gKz0gYlsyXTsKKysJYVszXSArPSBiWzNdOworKwlhWzRdICs9IGJbNF07CisrfQorKworK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBmZGlmZmVyZW5jZSh1NjQgKmEsIHU2NCAqYikKKyt7CisrCXU2NCB0bXBbNV0gPSB7IDAgfTsKKysJdTY0IGIwOworKwl1NjQgYjE7CisrCXU2NCBiMjsKKysJdTY0IGIzOworKwl1NjQgYjQ7CisrCW1lbWNweSh0bXAsIGIsIDUgKiBzaXplb2YoKmIpKTsKKysJYjAgPSB0bXBbMF07CisrCWIxID0gdG1wWzFdOworKwliMiA9IHRtcFsyXTsKKysJYjMgPSB0bXBbM107CisrCWI0ID0gdG1wWzRdOworKwl0bXBbMF0gPSBiMCArIDB4M2ZmZmZmZmZmZmZmNjhMTFU7CisrCXRtcFsxXSA9IGIxICsgMHgzZmZmZmZmZmZmZmZmOExMVTsKKysJdG1wWzJdID0gYjIgKyAweDNmZmZmZmZmZmZmZmY4TExVOworKwl0bXBbM10gPSBiMyArIDB4M2ZmZmZmZmZmZmZmZjhMTFU7CisrCXRtcFs0XSA9IGI0ICsgMHgzZmZmZmZmZmZmZmZmOExMVTsKKysJeworKwkJdTY0IHhpID0gYVswXTsKKysJCXU2NCB5aSA9IHRtcFswXTsKKysJCWFbMF0gPSB5aSAtIHhpOworKwl9CisrCXsKKysJCXU2NCB4aSA9IGFbMV07CisrCQl1NjQgeWkgPSB0bXBbMV07CisrCQlhWzFdID0geWkgLSB4aTsKKysJfQorKwl7CisrCQl1NjQgeGkgPSBhWzJdOworKwkJdTY0IHlpID0gdG1wWzJdOworKwkJYVsyXSA9IHlpIC0geGk7CisrCX0KKysJeworKwkJdTY0IHhpID0gYVszXTsKKysJCXU2NCB5aSA9IHRtcFszXTsKKysJCWFbM10gPSB5aSAtIHhpOworKwl9CisrCXsKKysJCXU2NCB4aSA9IGFbNF07CisrCQl1NjQgeWkgPSB0bXBbNF07CisrCQlhWzRdID0geWkgLSB4aTsKKysJfQorK30KKysKKytzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgZnNjYWxhcih1NjQgKm91dHB1dCwgdTY0ICpiLCB1NjQgcykKKyt7CisrCXUxMjggdG1wWzVdOworKwl1MTI4IGI0OworKwl1MTI4IGIwOworKwl1MTI4IGI0XzsKKysJdTEyOCBiMF87CisrCXsKKysJCXU2NCB4aSA9IGJbMF07CisrCQl0bXBbMF0gPSAoKHUxMjgpKHhpKSAqIChzKSk7CisrCX0KKysJeworKwkJdTY0IHhpID0gYlsxXTsKKysJCXRtcFsxXSA9ICgodTEyOCkoeGkpICogKHMpKTsKKysJfQorKwl7CisrCQl1NjQgeGkgPSBiWzJdOworKwkJdG1wWzJdID0gKCh1MTI4KSh4aSkgKiAocykpOworKwl9CisrCXsKKysJCXU2NCB4aSA9IGJbM107CisrCQl0bXBbM10gPSAoKHUxMjgpKHhpKSAqIChzKSk7CisrCX0KKysJeworKwkJdTY0IHhpID0gYls0XTsKKysJCXRtcFs0XSA9ICgodTEyOCkoeGkpICogKHMpKTsKKysJfQorKwlmcHJvZHVjdF9jYXJyeV93aWRlXyh0bXApOworKwliNCA9IHRtcFs0XTsKKysJYjAgPSB0bXBbMF07CisrCWI0XyA9ICgoYjQpICYgKCgodTEyOCkoMHg3ZmZmZmZmZmZmZmZmTExVKSkpKTsKKysJYjBfID0gKChiMCkgKyAoKCh1MTI4KSgxOSkgKiAoKCh1NjQpKCgoYjQpID4+ICg1MSkpKSkpKSkpOworKwl0bXBbNF0gPSBiNF87CisrCXRtcFswXSA9IGIwXzsKKysJZnByb2R1Y3RfY29weV9mcm9tX3dpZGVfKG91dHB1dCwgdG1wKTsKKyt9CisrCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGZtdWwodTY0ICpvdXRwdXQsIHU2NCAqYSwgdTY0ICpiKQorK3sKKysJZm11bF9mbXVsKG91dHB1dCwgYSwgYik7CisrfQorKworK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBjcmVjaXAodTY0ICpvdXRwdXQsIHU2NCAqaW5wdXQpCisreworKwljcmVjaXBfY3JlY2lwKG91dHB1dCwgaW5wdXQpOworK30KKysKKytzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgcG9pbnRfc3dhcF9jb25kaXRpb25hbF9zdGVwKHU2NCAqYSwgdTY0ICpiLAorKwkJCQkJCQl1NjQgc3dhcDEsIHUzMiBjdHIpCisreworKwl1MzIgaSA9IGN0ciAtIDE7CisrCXU2NCBhaSA9IGFbaV07CisrCXU2NCBiaSA9IGJbaV07CisrCXU2NCB4ID0gc3dhcDEgJiAoYWkgXiBiaSk7CisrCXU2NCBhaTEgPSBhaSBeIHg7CisrCXU2NCBiaTEgPSBiaSBeIHg7CisrCWFbaV0gPSBhaTE7CisrCWJbaV0gPSBiaTE7CisrfQorKworK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBwb2ludF9zd2FwX2NvbmRpdGlvbmFsNSh1NjQgKmEsIHU2NCAqYiwgdTY0IHN3YXAxKQorK3sKKysJcG9pbnRfc3dhcF9jb25kaXRpb25hbF9zdGVwKGEsIGIsIHN3YXAxLCA1KTsKKysJcG9pbnRfc3dhcF9jb25kaXRpb25hbF9zdGVwKGEsIGIsIHN3YXAxLCA0KTsKKysJcG9pbnRfc3dhcF9jb25kaXRpb25hbF9zdGVwKGEsIGIsIHN3YXAxLCAzKTsKKysJcG9pbnRfc3dhcF9jb25kaXRpb25hbF9zdGVwKGEsIGIsIHN3YXAxLCAyKTsKKysJcG9pbnRfc3dhcF9jb25kaXRpb25hbF9zdGVwKGEsIGIsIHN3YXAxLCAxKTsKKyt9CisrCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHBvaW50X3N3YXBfY29uZGl0aW9uYWwodTY0ICphLCB1NjQgKmIsIHU2NCBpc3dhcCkKKyt7CisrCXU2NCBzd2FwMSA9IDAgLSBpc3dhcDsKKysJcG9pbnRfc3dhcF9jb25kaXRpb25hbDUoYSwgYiwgc3dhcDEpOworKwlwb2ludF9zd2FwX2NvbmRpdGlvbmFsNShhICsgNSwgYiArIDUsIHN3YXAxKTsKKyt9CisrCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHBvaW50X2NvcHkodTY0ICpvdXRwdXQsIHU2NCAqaW5wdXQpCisreworKwltZW1jcHkob3V0cHV0LCBpbnB1dCwgNSAqIHNpemVvZigqaW5wdXQpKTsKKysJbWVtY3B5KG91dHB1dCArIDUsIGlucHV0ICsgNSwgNSAqIHNpemVvZigqaW5wdXQpKTsKKyt9CisrCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGFkZGFuZGRvdWJsZV9mbW9udHkodTY0ICpwcCwgdTY0ICpwcHEsIHU2NCAqcCwKKysJCQkJCQl1NjQgKnBxLCB1NjQgKnFtcXApCisreworKwl1NjQgKnF4ID0gcW1xcDsKKysJdTY0ICp4MiA9IHBwOworKwl1NjQgKnoyID0gcHAgKyA1OworKwl1NjQgKngzID0gcHBxOworKwl1NjQgKnozID0gcHBxICsgNTsKKysJdTY0ICp4ID0gcDsKKysJdTY0ICp6ID0gcCArIDU7CisrCXU2NCAqeHByaW1lID0gcHE7CisrCXU2NCAqenByaW1lID0gcHEgKyA1OworKwl1NjQgYnVmWzQwXSA9IHsgMCB9OworKwl1NjQgKm9yaWd4ID0gYnVmOworKwl1NjQgKm9yaWd4cHJpbWUwID0gYnVmICsgNTsKKysJdTY0ICp4eHByaW1lMDsKKysJdTY0ICp6enByaW1lMDsKKysJdTY0ICpvcmlneHByaW1lOworKwl4eHByaW1lMCA9IGJ1ZiArIDI1OworKwl6enByaW1lMCA9IGJ1ZiArIDMwOworKwltZW1jcHkob3JpZ3gsIHgsIDUgKiBzaXplb2YoKngpKTsKKysJZnN1bSh4LCB6KTsKKysJZmRpZmZlcmVuY2Uoeiwgb3JpZ3gpOworKwltZW1jcHkob3JpZ3hwcmltZTAsIHhwcmltZSwgNSAqIHNpemVvZigqeHByaW1lKSk7CisrCWZzdW0oeHByaW1lLCB6cHJpbWUpOworKwlmZGlmZmVyZW5jZSh6cHJpbWUsIG9yaWd4cHJpbWUwKTsKKysJZm11bCh4eHByaW1lMCwgeHByaW1lLCB6KTsKKysJZm11bCh6enByaW1lMCwgeCwgenByaW1lKTsKKysJb3JpZ3hwcmltZSA9IGJ1ZiArIDU7CisrCXsKKysJCXU2NCAqeHgwOworKwkJdTY0ICp6ejA7CisrCQl1NjQgKnh4cHJpbWU7CisrCQl1NjQgKnp6cHJpbWU7CisrCQl1NjQgKnp6enByaW1lOworKwkJeHgwID0gYnVmICsgMTU7CisrCQl6ejAgPSBidWYgKyAyMDsKKysJCXh4cHJpbWUgPSBidWYgKyAyNTsKKysJCXp6cHJpbWUgPSBidWYgKyAzMDsKKysJCXp6enByaW1lID0gYnVmICsgMzU7CisrCQltZW1jcHkob3JpZ3hwcmltZSwgeHhwcmltZSwgNSAqIHNpemVvZigqeHhwcmltZSkpOworKwkJZnN1bSh4eHByaW1lLCB6enByaW1lKTsKKysJCWZkaWZmZXJlbmNlKHp6cHJpbWUsIG9yaWd4cHJpbWUpOworKwkJZnNxdWFyZV9mc3F1YXJlX3RpbWVzKHgzLCB4eHByaW1lLCAxKTsKKysJCWZzcXVhcmVfZnNxdWFyZV90aW1lcyh6enpwcmltZSwgenpwcmltZSwgMSk7CisrCQlmbXVsKHozLCB6enpwcmltZSwgcXgpOworKwkJZnNxdWFyZV9mc3F1YXJlX3RpbWVzKHh4MCwgeCwgMSk7CisrCQlmc3F1YXJlX2ZzcXVhcmVfdGltZXMoenowLCB6LCAxKTsKKysJCXsKKysJCQl1NjQgKnp6ejsKKysJCQl1NjQgKnh4OworKwkJCXU2NCAqeno7CisrCQkJdTY0IHNjYWxhcjsKKysJCQl6enogPSBidWYgKyAxMDsKKysJCQl4eCA9IGJ1ZiArIDE1OworKwkJCXp6ID0gYnVmICsgMjA7CisrCQkJZm11bCh4MiwgeHgsIHp6KTsKKysJCQlmZGlmZmVyZW5jZSh6eiwgeHgpOworKwkJCXNjYWxhciA9IDEyMTY2NTsKKysJCQlmc2NhbGFyKHp6eiwgenosIHNjYWxhcik7CisrCQkJZnN1bSh6enosIHh4KTsKKysJCQlmbXVsKHoyLCB6enosIHp6KTsKKysJCX0KKysJfQorK30KKysKKytzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQKKytsYWRkZXJfc21hbGxsb29wX2NtdWx0X3NtYWxsX2xvb3Bfc3RlcCh1NjQgKm5xLCB1NjQgKm5xcHEsIHU2NCAqbnEyLCB1NjQgKm5xcHEyLAorKwkJCQkgICAgICAgdTY0ICpxLCB1OCBieXQpCisreworKwl1NjQgYml0MCA9ICh1NjQpKGJ5dCA+PiA3KTsKKysJdTY0IGJpdDsKKysJcG9pbnRfc3dhcF9jb25kaXRpb25hbChucSwgbnFwcSwgYml0MCk7CisrCWFkZGFuZGRvdWJsZV9mbW9udHkobnEyLCBucXBxMiwgbnEsIG5xcHEsIHEpOworKwliaXQgPSAodTY0KShieXQgPj4gNyk7CisrCXBvaW50X3N3YXBfY29uZGl0aW9uYWwobnEyLCBucXBxMiwgYml0KTsKKyt9CisrCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkCisrbGFkZGVyX3NtYWxsbG9vcF9jbXVsdF9zbWFsbF9sb29wX2RvdWJsZV9zdGVwKHU2NCAqbnEsIHU2NCAqbnFwcSwgdTY0ICpucTIsCisrCQkJCQkgICAgICB1NjQgKm5xcHEyLCB1NjQgKnEsIHU4IGJ5dCkKKyt7CisrCXU4IGJ5dDE7CisrCWxhZGRlcl9zbWFsbGxvb3BfY211bHRfc21hbGxfbG9vcF9zdGVwKG5xLCBucXBxLCBucTIsIG5xcHEyLCBxLCBieXQpOworKwlieXQxID0gYnl0IDw8IDE7CisrCWxhZGRlcl9zbWFsbGxvb3BfY211bHRfc21hbGxfbG9vcF9zdGVwKG5xMiwgbnFwcTIsIG5xLCBucXBxLCBxLCBieXQxKTsKKyt9CisrCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkCisrbGFkZGVyX3NtYWxsbG9vcF9jbXVsdF9zbWFsbF9sb29wKHU2NCAqbnEsIHU2NCAqbnFwcSwgdTY0ICpucTIsIHU2NCAqbnFwcTIsCisrCQkJCSAgdTY0ICpxLCB1OCBieXQsIHUzMiBpKQorK3sKKysJd2hpbGUgKGktLSkgeworKwkJbGFkZGVyX3NtYWxsbG9vcF9jbXVsdF9zbWFsbF9sb29wX2RvdWJsZV9zdGVwKG5xLCBucXBxLCBucTIsCisrCQkJCQkJCSAgICAgIG5xcHEyLCBxLCBieXQpOworKwkJYnl0IDw8PSAyOworKwl9CisrfQorKworK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBsYWRkZXJfYmlnbG9vcF9jbXVsdF9iaWdfbG9vcCh1OCAqbjEsIHU2NCAqbnEsCisrCQkJCQkJCSAgdTY0ICpucXBxLCB1NjQgKm5xMiwKKysJCQkJCQkJICB1NjQgKm5xcHEyLCB1NjQgKnEsCisrCQkJCQkJCSAgdTMyIGkpCisreworKwl3aGlsZSAoaS0tKSB7CisrCQl1OCBieXRlID0gbjFbaV07CisrCQlsYWRkZXJfc21hbGxsb29wX2NtdWx0X3NtYWxsX2xvb3AobnEsIG5xcHEsIG5xMiwgbnFwcTIsIHEsCisrCQkJCQkJICBieXRlLCA0KTsKKysJfQorK30KKysKKytzdGF0aWMgdm9pZCBsYWRkZXJfY211bHQodTY0ICpyZXN1bHQsIHU4ICpuMSwgdTY0ICpxKQorK3sKKysJdTY0IHBvaW50X2J1Zls0MF0gPSB7IDAgfTsKKysJdTY0ICpucSA9IHBvaW50X2J1ZjsKKysJdTY0ICpucXBxID0gcG9pbnRfYnVmICsgMTA7CisrCXU2NCAqbnEyID0gcG9pbnRfYnVmICsgMjA7CisrCXU2NCAqbnFwcTIgPSBwb2ludF9idWYgKyAzMDsKKysJcG9pbnRfY29weShucXBxLCBxKTsKKysJbnFbMF0gPSAxOworKwlsYWRkZXJfYmlnbG9vcF9jbXVsdF9iaWdfbG9vcChuMSwgbnEsIG5xcHEsIG5xMiwgbnFwcTIsIHEsIDMyKTsKKysJcG9pbnRfY29weShyZXN1bHQsIG5xKTsKKyt9CisrCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGZvcm1hdF9mZXhwYW5kKHU2NCAqb3V0cHV0LCBjb25zdCB1OCAqaW5wdXQpCisreworKwljb25zdCB1OCAqeDAwID0gaW5wdXQgKyA2OworKwljb25zdCB1OCAqeDAxID0gaW5wdXQgKyAxMjsKKysJY29uc3QgdTggKngwMiA9IGlucHV0ICsgMTk7CisrCWNvbnN0IHU4ICp4MCA9IGlucHV0ICsgMjQ7CisrCXU2NCBpMCwgaTEsIGkyLCBpMywgaTQsIG91dHB1dDAsIG91dHB1dDEsIG91dHB1dDIsIG91dHB1dDMsIG91dHB1dDQ7CisrCWkwID0gZ2V0X3VuYWxpZ25lZF9sZTY0KGlucHV0KTsKKysJaTEgPSBnZXRfdW5hbGlnbmVkX2xlNjQoeDAwKTsKKysJaTIgPSBnZXRfdW5hbGlnbmVkX2xlNjQoeDAxKTsKKysJaTMgPSBnZXRfdW5hbGlnbmVkX2xlNjQoeDAyKTsKKysJaTQgPSBnZXRfdW5hbGlnbmVkX2xlNjQoeDApOworKwlvdXRwdXQwID0gaTAgJiAweDdmZmZmZmZmZmZmZmZMTFU7CisrCW91dHB1dDEgPSBpMSA+PiAzICYgMHg3ZmZmZmZmZmZmZmZmTExVOworKwlvdXRwdXQyID0gaTIgPj4gNiAmIDB4N2ZmZmZmZmZmZmZmZkxMVTsKKysJb3V0cHV0MyA9IGkzID4+IDEgJiAweDdmZmZmZmZmZmZmZmZMTFU7CisrCW91dHB1dDQgPSBpNCA+PiAxMiAmIDB4N2ZmZmZmZmZmZmZmZkxMVTsKKysJb3V0cHV0WzBdID0gb3V0cHV0MDsKKysJb3V0cHV0WzFdID0gb3V0cHV0MTsKKysJb3V0cHV0WzJdID0gb3V0cHV0MjsKKysJb3V0cHV0WzNdID0gb3V0cHV0MzsKKysJb3V0cHV0WzRdID0gb3V0cHV0NDsKKyt9CisrCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGZvcm1hdF9mY29udHJhY3RfZmlyc3RfY2FycnlfcGFzcyh1NjQgKmlucHV0KQorK3sKKysJdTY0IHQwID0gaW5wdXRbMF07CisrCXU2NCB0MSA9IGlucHV0WzFdOworKwl1NjQgdDIgPSBpbnB1dFsyXTsKKysJdTY0IHQzID0gaW5wdXRbM107CisrCXU2NCB0NCA9IGlucHV0WzRdOworKwl1NjQgdDFfID0gdDEgKyAodDAgPj4gNTEpOworKwl1NjQgdDBfID0gdDAgJiAweDdmZmZmZmZmZmZmZmZMTFU7CisrCXU2NCB0Ml8gPSB0MiArICh0MV8gPj4gNTEpOworKwl1NjQgdDFfXyA9IHQxXyAmIDB4N2ZmZmZmZmZmZmZmZkxMVTsKKysJdTY0IHQzXyA9IHQzICsgKHQyXyA+PiA1MSk7CisrCXU2NCB0Ml9fID0gdDJfICYgMHg3ZmZmZmZmZmZmZmZmTExVOworKwl1NjQgdDRfID0gdDQgKyAodDNfID4+IDUxKTsKKysJdTY0IHQzX18gPSB0M18gJiAweDdmZmZmZmZmZmZmZmZMTFU7CisrCWlucHV0WzBdID0gdDBfOworKwlpbnB1dFsxXSA9IHQxX187CisrCWlucHV0WzJdID0gdDJfXzsKKysJaW5wdXRbM10gPSB0M19fOworKwlpbnB1dFs0XSA9IHQ0XzsKKyt9CisrCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGZvcm1hdF9mY29udHJhY3RfZmlyc3RfY2FycnlfZnVsbCh1NjQgKmlucHV0KQorK3sKKysJZm9ybWF0X2Zjb250cmFjdF9maXJzdF9jYXJyeV9wYXNzKGlucHV0KTsKKysJbW9kdWxvX2NhcnJ5X3RvcChpbnB1dCk7CisrfQorKworK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBmb3JtYXRfZmNvbnRyYWN0X3NlY29uZF9jYXJyeV9wYXNzKHU2NCAqaW5wdXQpCisreworKwl1NjQgdDAgPSBpbnB1dFswXTsKKysJdTY0IHQxID0gaW5wdXRbMV07CisrCXU2NCB0MiA9IGlucHV0WzJdOworKwl1NjQgdDMgPSBpbnB1dFszXTsKKysJdTY0IHQ0ID0gaW5wdXRbNF07CisrCXU2NCB0MV8gPSB0MSArICh0MCA+PiA1MSk7CisrCXU2NCB0MF8gPSB0MCAmIDB4N2ZmZmZmZmZmZmZmZkxMVTsKKysJdTY0IHQyXyA9IHQyICsgKHQxXyA+PiA1MSk7CisrCXU2NCB0MV9fID0gdDFfICYgMHg3ZmZmZmZmZmZmZmZmTExVOworKwl1NjQgdDNfID0gdDMgKyAodDJfID4+IDUxKTsKKysJdTY0IHQyX18gPSB0Ml8gJiAweDdmZmZmZmZmZmZmZmZMTFU7CisrCXU2NCB0NF8gPSB0NCArICh0M18gPj4gNTEpOworKwl1NjQgdDNfXyA9IHQzXyAmIDB4N2ZmZmZmZmZmZmZmZkxMVTsKKysJaW5wdXRbMF0gPSB0MF87CisrCWlucHV0WzFdID0gdDFfXzsKKysJaW5wdXRbMl0gPSB0Ml9fOworKwlpbnB1dFszXSA9IHQzX187CisrCWlucHV0WzRdID0gdDRfOworK30KKysKKytzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgZm9ybWF0X2Zjb250cmFjdF9zZWNvbmRfY2FycnlfZnVsbCh1NjQgKmlucHV0KQorK3sKKysJdTY0IGkwOworKwl1NjQgaTE7CisrCXU2NCBpMF87CisrCXU2NCBpMV87CisrCWZvcm1hdF9mY29udHJhY3Rfc2Vjb25kX2NhcnJ5X3Bhc3MoaW5wdXQpOworKwltb2R1bG9fY2FycnlfdG9wKGlucHV0KTsKKysJaTAgPSBpbnB1dFswXTsKKysJaTEgPSBpbnB1dFsxXTsKKysJaTBfID0gaTAgJiAweDdmZmZmZmZmZmZmZmZMTFU7CisrCWkxXyA9IGkxICsgKGkwID4+IDUxKTsKKysJaW5wdXRbMF0gPSBpMF87CisrCWlucHV0WzFdID0gaTFfOworK30KKysKKytzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgZm9ybWF0X2Zjb250cmFjdF90cmltKHU2NCAqaW5wdXQpCisreworKwl1NjQgYTAgPSBpbnB1dFswXTsKKysJdTY0IGExID0gaW5wdXRbMV07CisrCXU2NCBhMiA9IGlucHV0WzJdOworKwl1NjQgYTMgPSBpbnB1dFszXTsKKysJdTY0IGE0ID0gaW5wdXRbNF07CisrCXU2NCBtYXNrMCA9IHU2NF9ndGVfbWFzayhhMCwgMHg3ZmZmZmZmZmZmZmVkTExVKTsKKysJdTY0IG1hc2sxID0gdTY0X2VxX21hc2soYTEsIDB4N2ZmZmZmZmZmZmZmZkxMVSk7CisrCXU2NCBtYXNrMiA9IHU2NF9lcV9tYXNrKGEyLCAweDdmZmZmZmZmZmZmZmZMTFUpOworKwl1NjQgbWFzazMgPSB1NjRfZXFfbWFzayhhMywgMHg3ZmZmZmZmZmZmZmZmTExVKTsKKysJdTY0IG1hc2s0ID0gdTY0X2VxX21hc2soYTQsIDB4N2ZmZmZmZmZmZmZmZkxMVSk7CisrCXU2NCBtYXNrID0gKCgobWFzazAgJiBtYXNrMSkgJiBtYXNrMikgJiBtYXNrMykgJiBtYXNrNDsKKysJdTY0IGEwXyA9IGEwIC0gKDB4N2ZmZmZmZmZmZmZlZExMVSAmIG1hc2spOworKwl1NjQgYTFfID0gYTEgLSAoMHg3ZmZmZmZmZmZmZmZmTExVICYgbWFzayk7CisrCXU2NCBhMl8gPSBhMiAtICgweDdmZmZmZmZmZmZmZmZMTFUgJiBtYXNrKTsKKysJdTY0IGEzXyA9IGEzIC0gKDB4N2ZmZmZmZmZmZmZmZkxMVSAmIG1hc2spOworKwl1NjQgYTRfID0gYTQgLSAoMHg3ZmZmZmZmZmZmZmZmTExVICYgbWFzayk7CisrCWlucHV0WzBdID0gYTBfOworKwlpbnB1dFsxXSA9IGExXzsKKysJaW5wdXRbMl0gPSBhMl87CisrCWlucHV0WzNdID0gYTNfOworKwlpbnB1dFs0XSA9IGE0XzsKKyt9CisrCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGZvcm1hdF9mY29udHJhY3Rfc3RvcmUodTggKm91dHB1dCwgdTY0ICppbnB1dCkKKyt7CisrCXU2NCB0MCA9IGlucHV0WzBdOworKwl1NjQgdDEgPSBpbnB1dFsxXTsKKysJdTY0IHQyID0gaW5wdXRbMl07CisrCXU2NCB0MyA9IGlucHV0WzNdOworKwl1NjQgdDQgPSBpbnB1dFs0XTsKKysJdTY0IG8wID0gdDEgPDwgNTEgfCB0MDsKKysJdTY0IG8xID0gdDIgPDwgMzggfCB0MSA+PiAxMzsKKysJdTY0IG8yID0gdDMgPDwgMjUgfCB0MiA+PiAyNjsKKysJdTY0IG8zID0gdDQgPDwgMTIgfCB0MyA+PiAzOTsKKysJdTggKmIwID0gb3V0cHV0OworKwl1OCAqYjEgPSBvdXRwdXQgKyA4OworKwl1OCAqYjIgPSBvdXRwdXQgKyAxNjsKKysJdTggKmIzID0gb3V0cHV0ICsgMjQ7CisrCXB1dF91bmFsaWduZWRfbGU2NChvMCwgYjApOworKwlwdXRfdW5hbGlnbmVkX2xlNjQobzEsIGIxKTsKKysJcHV0X3VuYWxpZ25lZF9sZTY0KG8yLCBiMik7CisrCXB1dF91bmFsaWduZWRfbGU2NChvMywgYjMpOworK30KKysKKytzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgZm9ybWF0X2Zjb250cmFjdCh1OCAqb3V0cHV0LCB1NjQgKmlucHV0KQorK3sKKysJZm9ybWF0X2Zjb250cmFjdF9maXJzdF9jYXJyeV9mdWxsKGlucHV0KTsKKysJZm9ybWF0X2Zjb250cmFjdF9zZWNvbmRfY2FycnlfZnVsbChpbnB1dCk7CisrCWZvcm1hdF9mY29udHJhY3RfdHJpbShpbnB1dCk7CisrCWZvcm1hdF9mY29udHJhY3Rfc3RvcmUob3V0cHV0LCBpbnB1dCk7CisrfQorKworK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBmb3JtYXRfc2NhbGFyX29mX3BvaW50KHU4ICpzY2FsYXIsIHU2NCAqcG9pbnQpCisreworKwl1NjQgKnggPSBwb2ludDsKKysJdTY0ICp6ID0gcG9pbnQgKyA1OworKwl1NjQgYnVmWzEwXSBfX2FsaWduZWQoMzIpID0geyAwIH07CisrCXU2NCAqem1vbmUgPSBidWY7CisrCXU2NCAqc2MgPSBidWYgKyA1OworKwljcmVjaXAoem1vbmUsIHopOworKwlmbXVsKHNjLCB4LCB6bW9uZSk7CisrCWZvcm1hdF9mY29udHJhY3Qoc2NhbGFyLCBzYyk7CisrfQorKworK3ZvaWQgY3VydmUyNTUxOV9nZW5lcmljKHU4IG15cHVibGljW0NVUlZFMjU1MTlfS0VZX1NJWkVdLAorKwkJCWNvbnN0IHU4IHNlY3JldFtDVVJWRTI1NTE5X0tFWV9TSVpFXSwKKysJCQljb25zdCB1OCBiYXNlcG9pbnRbQ1VSVkUyNTUxOV9LRVlfU0laRV0pCisreworKwl1NjQgYnVmMFsxMF0gX19hbGlnbmVkKDMyKSA9IHsgMCB9OworKwl1NjQgKngwID0gYnVmMDsKKysJdTY0ICp6ID0gYnVmMCArIDU7CisrCXU2NCAqcTsKKysJZm9ybWF0X2ZleHBhbmQoeDAsIGJhc2Vwb2ludCk7CisrCXpbMF0gPSAxOworKwlxID0gYnVmMDsKKysJeworKwkJdTggZVszMl0gX19hbGlnbmVkKDMyKSA9IHsgMCB9OworKwkJdTggKnNjYWxhcjsKKysJCW1lbWNweShlLCBzZWNyZXQsIDMyKTsKKysJCWN1cnZlMjU1MTlfY2xhbXBfc2VjcmV0KGUpOworKwkJc2NhbGFyID0gZTsKKysJCXsKKysJCQl1NjQgYnVmWzE1XSA9IHsgMCB9OworKwkJCXU2NCAqbnEgPSBidWY7CisrCQkJdTY0ICp4ID0gbnE7CisrCQkJeFswXSA9IDE7CisrCQkJbGFkZGVyX2NtdWx0KG5xLCBzY2FsYXIsIHEpOworKwkJCWZvcm1hdF9zY2FsYXJfb2ZfcG9pbnQobXlwdWJsaWMsIG5xKTsKKysJCQltZW16ZXJvX2V4cGxpY2l0KGJ1Ziwgc2l6ZW9mKGJ1ZikpOworKwkJfQorKwkJbWVtemVyb19leHBsaWNpdChlLCBzaXplb2YoZSkpOworKwl9CisrCW1lbXplcm9fZXhwbGljaXQoYnVmMCwgc2l6ZW9mKGJ1ZjApKTsKKyt9CistLS0gL2Rldi9udWxsCisrKysgYi9saWIvY3J5cHRvL2N1cnZlMjU1MTkuYworQEAgLTAsMCArMSwyNSBAQAorKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVAorKy8qCisrICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKyAqCisrICogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQ3VydmUyNTUxOSBFQ0RIIGFsZ29yaXRobSwgdXNpbmcgZWl0aGVyCisrICogYSAzMi1iaXQgaW1wbGVtZW50YXRpb24gb3IgYSA2NC1iaXQgaW1wbGVtZW50YXRpb24gd2l0aCAxMjgtYml0IGludGVnZXJzLAorKyAqIGRlcGVuZGluZyBvbiB3aGF0IGlzIHN1cHBvcnRlZCBieSB0aGUgdGFyZ2V0IGNvbXBpbGVyLgorKyAqCisrICogSW5mb3JtYXRpb246IGh0dHBzOi8vY3IueXAudG8vZWNkaC5odG1sCisrICovCisrCisrI2luY2x1ZGUgPGNyeXB0by9jdXJ2ZTI1NTE5Lmg+CisrI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisrCisrY29uc3QgdTggY3VydmUyNTUxOV9udWxsX3BvaW50W0NVUlZFMjU1MTlfS0VZX1NJWkVdIF9fYWxpZ25lZCgzMikgPSB7IDAgfTsKKytjb25zdCB1OCBjdXJ2ZTI1NTE5X2Jhc2VfcG9pbnRbQ1VSVkUyNTUxOV9LRVlfU0laRV0gX19hbGlnbmVkKDMyKSA9IHsgOSB9OworKworK0VYUE9SVF9TWU1CT0woY3VydmUyNTUxOV9udWxsX3BvaW50KTsKKytFWFBPUlRfU1lNQk9MKGN1cnZlMjU1MTlfYmFzZV9wb2ludCk7CisrRVhQT1JUX1NZTUJPTChjdXJ2ZTI1NTE5X2dlbmVyaWMpOworKworK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKKytNT0RVTEVfREVTQ1JJUFRJT04oIkN1cnZlMjU1MTkgc2NhbGFyIG11bHRpcGxpY2F0aW9uIik7CisrTU9EVUxFX0FVVEhPUigiSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+Iik7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDI2LWNyeXB0by1jdXJ2ZTI1NTE5LWFkZC1rcHAtc2VsZnRlc3QucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDI2LWNyeXB0by1jdXJ2ZTI1NTE5LWFkZC1rcHAtc2VsZnRlc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI4MTNhZQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMjYtY3J5cHRvLWN1cnZlMjU1MTktYWRkLWtwcC1zZWxmdGVzdC5wYXRjaApAQCAtMCwwICsxLDEyNjggQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFyZCBCaWVzaGV1dmVsIDxhcmRiQGtlcm5lbC5vcmc+CitEYXRlOiBGcmksIDggTm92IDIwMTkgMTM6MjI6MzMgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gY3J5cHRvOiBjdXJ2ZTI1NTE5IC0gYWRkIGtwcCBzZWxmdGVzdAorCitjb21taXQgZjYxMzQ1N2E3YWYwODU3MjgyOTdiZWY3MTIzM2MzN2ZhZjNjMDFiMSB1cHN0cmVhbS4KKworSW4gcHJlcGFyYXRpb24gb2YgaW50cm9kdWNpbmcgS1BQIGltcGxlbWVudGF0aW9ucyBvZiBDdXJ2ZTI1NTE5LCBpbXBvcnQKK3RoZSBzZXQgb2YgdGVzdCBjYXNlcyBwcm9wb3NlZCBieSB0aGUgWmluYyBwYXRjaCBzZXQsIGJ1dCBjb252ZXJ0ZWQgdG8KK3RoZSBLUFAgZm9ybWF0LgorCitTaWduZWQtb2ZmLWJ5OiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgorU2lnbmVkLW9mZi1ieTogSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBjcnlwdG8vdGVzdG1nci5jIHwgICAgNiArCisgY3J5cHRvL3Rlc3RtZ3IuaCB8IDEyMjUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMTIzMSBpbnNlcnRpb25zKCspCisKKy0tLSBhL2NyeXB0by90ZXN0bWdyLmMKKysrKyBiL2NyeXB0by90ZXN0bWdyLmMKK0BAIC00Mjk2LDYgKzQyOTYsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhbGdfdGVzdF9kZXNjIGFsZ190ZQorIAkJLnRlc3QgPSBhbGdfdGVzdF9udWxsLAorIAkJLmZpcHNfYWxsb3dlZCA9IDEsCisgCX0sIHsKKysJCS5hbGcgPSAiY3VydmUyNTUxOSIsCisrCQkudGVzdCA9IGFsZ190ZXN0X2twcCwKKysJCS5zdWl0ZSA9IHsKKysJCQkua3BwID0gX19WRUNTKGN1cnZlMjU1MTlfdHZfdGVtcGxhdGUpCisrCQl9CisrCX0sIHsKKyAJCS5hbGcgPSAiZGVmbGF0ZSIsCisgCQkudGVzdCA9IGFsZ190ZXN0X2NvbXAsCisgCQkuZmlwc19hbGxvd2VkID0gMSwKKy0tLSBhL2NyeXB0by90ZXN0bWdyLmgKKysrKyBiL2NyeXB0by90ZXN0bWdyLmgKK0BAIC0xMDMwLDYgKzEwMzAsMTIzMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGtwcF90ZXN0dmVjIGRoX3R2X3RlCisgCX0KKyB9OworIAorK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3BwX3Rlc3R2ZWMgY3VydmUyNTUxOV90dl90ZW1wbGF0ZVtdID0geworK3sKKysJLnNlY3JldCA9ICh1OFszMl0peyAweDc3LCAweDA3LCAweDZkLCAweDBhLCAweDczLCAweDE4LCAweGE1LCAweDdkLAorKwkJICAgICAweDNjLCAweDE2LCAweGMxLCAweDcyLCAweDUxLCAweGIyLCAweDY2LCAweDQ1LAorKwkJICAgICAweGRmLCAweDRjLCAweDJmLCAweDg3LCAweGViLCAweGMwLCAweDk5LCAweDJhLAorKwkJICAgICAweGIxLCAweDc3LCAweGZiLCAweGE1LCAweDFkLCAweGI5LCAweDJjLCAweDJhIH0sCisrCS5iX3B1YmxpYyA9ICh1OFszMl0peyAweGRlLCAweDllLCAweGRiLCAweDdkLCAweDdiLCAweDdkLCAweGMxLCAweGI0LAorKwkJICAgIDB4ZDMsIDB4NWIsIDB4NjEsIDB4YzIsIDB4ZWMsIDB4ZTQsIDB4MzUsIDB4MzcsCisrCQkgICAgMHgzZiwgMHg4MywgMHg0MywgMHhjOCwgMHg1YiwgMHg3OCwgMHg2NywgMHg0ZCwKKysJCSAgICAweGFkLCAweGZjLCAweDdlLCAweDE0LCAweDZmLCAweDg4LCAweDJiLCAweDRmIH0sCisrCS5leHBlY3RlZF9zcyA9ICh1OFszMl0peyAweDRhLCAweDVkLCAweDlkLCAweDViLCAweGE0LCAweGNlLCAweDJkLCAweGUxLAorKwkJICAgIDB4NzIsIDB4OGUsIDB4M2IsIDB4ZjQsIDB4ODAsIDB4MzUsIDB4MGYsIDB4MjUsCisrCQkgICAgMHhlMCwgMHg3ZSwgMHgyMSwgMHhjOSwgMHg0NywgMHhkMSwgMHg5ZSwgMHgzMywKKysJCSAgICAweDc2LCAweGYwLCAweDliLCAweDNjLCAweDFlLCAweDE2LCAweDE3LCAweDQyIH0sCisrCS5zZWNyZXRfc2l6ZSA9IDMyLAorKwkuYl9wdWJsaWNfc2l6ZSA9IDMyLAorKwkuZXhwZWN0ZWRfc3Nfc2l6ZSA9IDMyLAorKworK30sCisreworKwkuc2VjcmV0ID0gKHU4WzMyXSl7IDB4NWQsIDB4YWIsIDB4MDgsIDB4N2UsIDB4NjIsIDB4NGEsIDB4OGEsIDB4NGIsCisrCQkgICAgIDB4NzksIDB4ZTEsIDB4N2YsIDB4OGIsIDB4ODMsIDB4ODAsIDB4MGUsIDB4ZTYsCisrCQkgICAgIDB4NmYsIDB4M2IsIDB4YjEsIDB4MjksIDB4MjYsIDB4MTgsIDB4YjYsIDB4ZmQsCisrCQkgICAgIDB4MWMsIDB4MmYsIDB4OGIsIDB4MjcsIDB4ZmYsIDB4ODgsIDB4ZTAsIDB4ZWIgfSwKKysJLmJfcHVibGljID0gKHU4WzMyXSl7IDB4ODUsIDB4MjAsIDB4ZjAsIDB4MDksIDB4ODksIDB4MzAsIDB4YTcsIDB4NTQsCisrCQkgICAgMHg3NCwgMHg4YiwgMHg3ZCwgMHhkYywgMHhiNCwgMHgzZSwgMHhmNywgMHg1YSwKKysJCSAgICAweDBkLCAweGJmLCAweDNhLCAweDBkLCAweDI2LCAweDM4LCAweDFhLCAweGY0LAorKwkJICAgIDB4ZWIsIDB4YTQsIDB4YTksIDB4OGUsIDB4YWEsIDB4OWIsIDB4NGUsIDB4NmEgfSwKKysJLmV4cGVjdGVkX3NzID0gKHU4WzMyXSl7IDB4NGEsIDB4NWQsIDB4OWQsIDB4NWIsIDB4YTQsIDB4Y2UsIDB4MmQsIDB4ZTEsCisrCQkgICAgMHg3MiwgMHg4ZSwgMHgzYiwgMHhmNCwgMHg4MCwgMHgzNSwgMHgwZiwgMHgyNSwKKysJCSAgICAweGUwLCAweDdlLCAweDIxLCAweGM5LCAweDQ3LCAweGQxLCAweDllLCAweDMzLAorKwkJICAgIDB4NzYsIDB4ZjAsIDB4OWIsIDB4M2MsIDB4MWUsIDB4MTYsIDB4MTcsIDB4NDIgfSwKKysJLnNlY3JldF9zaXplID0gMzIsCisrCS5iX3B1YmxpY19zaXplID0gMzIsCisrCS5leHBlY3RlZF9zc19zaXplID0gMzIsCisrCisrfSwKKyt7CisrCS5zZWNyZXQgPSAodThbMzJdKXsgMSB9LAorKwkuYl9wdWJsaWMgPSAodThbMzJdKXsgMHgyNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorKwkuZXhwZWN0ZWRfc3MgPSAodThbMzJdKXsgMHgzYywgMHg3NywgMHg3NywgMHhjYSwgMHhmOSwgMHg5NywgMHhiMiwgMHg2NCwKKysJCSAgICAweDQxLCAweDYwLCAweDc3LCAweDY2LCAweDViLCAweDRlLCAweDIyLCAweDlkLAorKwkJICAgIDB4MGIsIDB4OTUsIDB4NDgsIDB4ZGMsIDB4MGMsIDB4ZDgsIDB4MTksIDB4OTgsCisrCQkgICAgMHhkZCwgMHhjZCwgMHhjNSwgMHhjOCwgMHg1MywgMHgzYywgMHg3OSwgMHg3ZiB9LAorKwkuc2VjcmV0X3NpemUgPSAzMiwKKysJLmJfcHVibGljX3NpemUgPSAzMiwKKysJLmV4cGVjdGVkX3NzX3NpemUgPSAzMiwKKysKKyt9LAorK3sKKysJLnNlY3JldCA9ICh1OFszMl0peyAxIH0sCisrCS5iX3B1YmxpYyA9ICh1OFszMl0peyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmIH0sCisrCS5leHBlY3RlZF9zcyA9ICh1OFszMl0peyAweGIzLCAweDJkLCAweDEzLCAweDYyLCAweGMyLCAweDQ4LCAweGQ2LCAweDJmLAorKwkJICAgIDB4ZTYsIDB4MjYsIDB4MTksIDB4Y2YsIDB4ZjAsIDB4NGQsIDB4ZDQsIDB4M2QsCisrCQkgICAgMHhiNywgMHgzZiwgMHhmYywgMHgxYiwgMHg2MywgMHgwOCwgMHhlZCwgMHhlMywKKysJCSAgICAweDBiLCAweDc4LCAweGQ4LCAweDczLCAweDgwLCAweGYxLCAweGU4LCAweDM0IH0sCisrCS5zZWNyZXRfc2l6ZSA9IDMyLAorKwkuYl9wdWJsaWNfc2l6ZSA9IDMyLAorKwkuZXhwZWN0ZWRfc3Nfc2l6ZSA9IDMyLAorKworK30sCisreworKwkuc2VjcmV0ID0gKHU4WzMyXSl7IDB4YTUsIDB4NDYsIDB4ZTMsIDB4NmIsIDB4ZjAsIDB4NTIsIDB4N2MsIDB4OWQsCisrCQkgICAgIDB4M2IsIDB4MTYsIDB4MTUsIDB4NGIsIDB4ODIsIDB4NDYsIDB4NWUsIDB4ZGQsCisrCQkgICAgIDB4NjIsIDB4MTQsIDB4NGMsIDB4MGEsIDB4YzEsIDB4ZmMsIDB4NWEsIDB4MTgsCisrCQkgICAgIDB4NTAsIDB4NmEsIDB4MjIsIDB4NDQsIDB4YmEsIDB4NDQsIDB4OWEsIDB4YzQgfSwKKysJLmJfcHVibGljID0gKHU4WzMyXSl7IDB4ZTYsIDB4ZGIsIDB4NjgsIDB4NjcsIDB4NTgsIDB4MzAsIDB4MzAsIDB4ZGIsCisrCQkgICAgMHgzNSwgMHg5NCwgMHhjMSwgMHhhNCwgMHgyNCwgMHhiMSwgMHg1ZiwgMHg3YywKKysJCSAgICAweDcyLCAweDY2LCAweDI0LCAweGVjLCAweDI2LCAweGIzLCAweDM1LCAweDNiLAorKwkJICAgIDB4MTAsIDB4YTksIDB4MDMsIDB4YTYsIDB4ZDAsIDB4YWIsIDB4MWMsIDB4NGMgfSwKKysJLmV4cGVjdGVkX3NzID0gKHU4WzMyXSl7IDB4YzMsIDB4ZGEsIDB4NTUsIDB4MzcsIDB4OWQsIDB4ZTksIDB4YzYsIDB4OTAsCisrCQkgICAgMHg4ZSwgMHg5NCwgMHhlYSwgMHg0ZCwgMHhmMiwgMHg4ZCwgMHgwOCwgMHg0ZiwKKysJCSAgICAweDMyLCAweGVjLCAweGNmLCAweDAzLCAweDQ5LCAweDFjLCAweDcxLCAweGY3LAorKwkJICAgIDB4NTQsIDB4YjQsIDB4MDcsIDB4NTUsIDB4NzcsIDB4YTIsIDB4ODUsIDB4NTIgfSwKKysJLnNlY3JldF9zaXplID0gMzIsCisrCS5iX3B1YmxpY19zaXplID0gMzIsCisrCS5leHBlY3RlZF9zc19zaXplID0gMzIsCisrCisrfSwKKyt7CisrCS5zZWNyZXQgPSAodThbMzJdKXsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwYSwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCSAgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCSAgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCSAgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9LAorKwkuYl9wdWJsaWMgPSAodThbMzJdKXsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwYSwgMHgwMCwgMHhmYiwgMHg5ZiB9LAorKwkuZXhwZWN0ZWRfc3MgPSAodThbMzJdKXsgMHg3NywgMHg1MiwgMHhiNiwgMHgxOCwgMHhjMSwgMHgyZCwgMHg0OCwgMHhkMiwKKysJCSAgICAweGM2LCAweDkzLCAweDQ2LCAweDgzLCAweDgxLCAweDdjLCAweGM2LCAweDU3LAorKwkJICAgIDB4ZjMsIDB4MzEsIDB4MDMsIDB4MTksIDB4NDksIDB4NDgsIDB4MjAsIDB4MDUsCisrCQkgICAgMHg0MiwgMHgyYiwgMHg0ZSwgMHhhZSwgMHg4ZCwgMHgxZCwgMHg0MywgMHgyMyB9LAorKwkuc2VjcmV0X3NpemUgPSAzMiwKKysJLmJfcHVibGljX3NpemUgPSAzMiwKKysJLmV4cGVjdGVkX3NzX3NpemUgPSAzMiwKKysKKyt9LAorK3sKKysJLnNlY3JldCA9ICh1OFszMl0peyAweDhlLCAweDBhLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisrCS5iX3B1YmxpYyA9ICh1OFszMl0peyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDhlLCAweDA2IH0sCisrCS5leHBlY3RlZF9zcyA9ICh1OFszMl0peyAweDVhLCAweGRmLCAweGFhLCAweDI1LCAweDg2LCAweDhlLCAweDMyLCAweDNkLAorKwkJICAgIDB4YWUsIDB4NDksIDB4NjIsIDB4YzEsIDB4MDEsIDB4NWMsIDB4YjMsIDB4MTIsCisrCQkgICAgMHhlMSwgMHhjNSwgMHhjNywgMHg5ZSwgMHg5NSwgMHgzZiwgMHgwMywgMHg5OSwKKysJCSAgICAweGIwLCAweGJhLCAweDE2LCAweDIyLCAweGYzLCAweGI2LCAweGY3LCAweDBjIH0sCisrCS5zZWNyZXRfc2l6ZSA9IDMyLAorKwkuYl9wdWJsaWNfc2l6ZSA9IDMyLAorKwkuZXhwZWN0ZWRfc3Nfc2l6ZSA9IDMyLAorKworK30sCisrLyogd3ljaGVwcm9vZiAtIG5vcm1hbCBjYXNlICovCisreworKwkuc2VjcmV0ID0gKHU4WzMyXSl7IDB4NDgsIDB4NTIsIDB4ODMsIDB4NGQsIDB4OWQsIDB4NmIsIDB4NzcsIDB4ZGEsCisrCQkgICAgIDB4ZGUsIDB4YWIsIDB4YWEsIDB4ZjIsIDB4ZTEsIDB4MWQsIDB4Y2EsIDB4NjYsCisrCQkgICAgIDB4ZDEsIDB4OWYsIDB4ZTcsIDB4NDksIDB4OTMsIDB4YTcsIDB4YmUsIDB4YzMsCisrCQkgICAgIDB4NmMsIDB4NmUsIDB4MTYsIDB4YTAsIDB4OTgsIDB4M2YsIDB4ZWEsIDB4YmEgfSwKKysJLmJfcHVibGljID0gKHU4WzMyXSl7IDB4OWMsIDB4NjQsIDB4N2QsIDB4OWEsIDB4ZTUsIDB4ODksIDB4YjksIDB4ZjUsCisrCQkgICAgMHg4ZiwgMHhkYywgMHgzYywgMHhhNCwgMHg5NCwgMHg3ZSwgMHhmYiwgMHhjOSwKKysJCSAgICAweDE1LCAweGM0LCAweGIyLCAweGUwLCAweDhlLCAweDc0LCAweDRhLCAweDBlLAorKwkJICAgIDB4ZGYsIDB4NDYsIDB4OWQsIDB4YWMsIDB4NTksIDB4YzgsIDB4ZjgsIDB4NWEgfSwKKysJLmV4cGVjdGVkX3NzID0gKHU4WzMyXSl7IDB4ODcsIDB4YjcsIDB4ZjIsIDB4MTIsIDB4YjYsIDB4MjcsIDB4ZjcsIDB4YTUsCisrCQkgICAgMHg0YywgMHhhNSwgMHhlMCwgMHhiYywgMHhkYSwgMHhkZCwgMHhkNSwgMHgzOCwKKysJCSAgICAweDlkLCAweDlkLCAweGU2LCAweDE1LCAweDZjLCAweGRiLCAweGNmLCAweDhlLAorKwkJICAgIDB4YmUsIDB4MTQsIDB4ZmYsIDB4YmMsIDB4ZmIsIDB4NDMsIDB4NjUsIDB4NTEgfSwKKysJLnNlY3JldF9zaXplID0gMzIsCisrCS5iX3B1YmxpY19zaXplID0gMzIsCisrCS5leHBlY3RlZF9zc19zaXplID0gMzIsCisrCisrfSwKKysvKiB3eWNoZXByb29mIC0gcHVibGljIGtleSBvbiB0d2lzdCAqLworK3sKKysJLnNlY3JldCA9ICh1OFszMl0peyAweDU4LCAweDhjLCAweDA2LCAweDFhLCAweDUwLCAweDgwLCAweDRhLCAweGM0LAorKwkJICAgICAweDg4LCAweGFkLCAweDc3LCAweDRhLCAweGM3LCAweDE2LCAweGMzLCAweGY1LAorKwkJICAgICAweGJhLCAweDcxLCAweDRiLCAweDI3LCAweDEyLCAweGUwLCAweDQ4LCAweDQ5LAorKwkJICAgICAweDEzLCAweDc5LCAweGE1LCAweDAwLCAweDIxLCAweDE5LCAweDk4LCAweGE4IH0sCisrCS5iX3B1YmxpYyA9ICh1OFszMl0peyAweDYzLCAweGFhLCAweDQwLCAweGM2LCAweGUzLCAweDgzLCAweDQ2LCAweGM1LAorKwkJICAgIDB4Y2EsIDB4ZjIsIDB4M2EsIDB4NmQsIDB4ZjAsIDB4YTUsIDB4ZTYsIDB4YzgsCisrCQkgICAgMHgwOCwgMHg4OSwgMHhhMCwgMHg4NiwgMHg0NywgMHhlNSwgMHg1MSwgMHhiMywKKysJCSAgICAweDU2LCAweDM0LCAweDQ5LCAweGJlLCAweGZjLCAweGZjLCAweDk3LCAweDMzIH0sCisrCS5leHBlY3RlZF9zcyA9ICh1OFszMl0peyAweGIxLCAweGE3LCAweDA3LCAweDUxLCAweDk0LCAweDk1LCAweGZmLCAweGZmLAorKwkJICAgIDB4YjIsIDB4OTgsIDB4ZmYsIDB4OTQsIDB4MTcsIDB4MTYsIDB4YjAsIDB4NmQsCisrCQkgICAgMHhmYSwgMHhiOCwgMHg3YywgMHhmOCwgMHhkOSwgMHgxMSwgMHgyMywgMHhmZSwKKysJCSAgICAweDJiLCAweGU5LCAweGEyLCAweDMzLCAweGRkLCAweGEyLCAweDIyLCAweDEyIH0sCisrCS5zZWNyZXRfc2l6ZSA9IDMyLAorKwkuYl9wdWJsaWNfc2l6ZSA9IDMyLAorKwkuZXhwZWN0ZWRfc3Nfc2l6ZSA9IDMyLAorKworK30sCisrLyogd3ljaGVwcm9vZiAtIHB1YmxpYyBrZXkgb24gdHdpc3QgKi8KKyt7CisrCS5zZWNyZXQgPSAodThbMzJdKXsgMHhiMCwgMHg1YiwgMHhmZCwgMHgzMiwgMHhlNSwgMHg1MywgMHgyNSwgMHhkOSwKKysJCSAgICAgMHhmZCwgMHg2NCwgMHg4YywgMHhiMywgMHgwMiwgMHg4NCwgMHg4MCwgMHgzOSwKKysJCSAgICAgMHgwMCwgMHgwYiwgMHgzOSwgMHgwZSwgMHg0NCwgMHhkNSwgMHgyMSwgMHhlNSwKKysJCSAgICAgMHg4YSwgMHhhYiwgMHgzYiwgMHgyOSwgMHhhNiwgMHg5NiwgMHgwYiwgMHhhOCB9LAorKwkuYl9wdWJsaWMgPSAodThbMzJdKXsgMHgwZiwgMHg4MywgMHhjMywgMHg2ZiwgMHhkZSwgMHhkOSwgMHhkMywgMHgyZiwKKysJCSAgICAweGFkLCAweGY0LCAweGVmLCAweGEzLCAweGFlLCAweDkzLCAweGE5LCAweDBiLAorKwkJICAgIDB4YjUsIDB4Y2YsIDB4YTYsIDB4NjgsIDB4OTMsIDB4YmMsIDB4NDEsIDB4MmMsCisrCQkgICAgMHg0MywgMHhmYSwgMHg3MiwgMHg4NywgMHhkYiwgMHhiOSwgMHg5NywgMHg3OSB9LAorKwkuZXhwZWN0ZWRfc3MgPSAodThbMzJdKXsgMHg2NywgMHhkZCwgMHg0YSwgMHg2ZSwgMHgxNiwgMHg1NSwgMHgzMywgMHg1MywKKysJCSAgICAweDRjLCAweDBlLCAweDNmLCAweDE3LCAweDJlLCAweDRhLCAweGI4LCAweDU3LAorKwkJICAgIDB4NmIsIDB4Y2EsIDB4OTIsIDB4M2EsIDB4NWYsIDB4MDcsIDB4YjIsIDB4YzAsCisrCQkgICAgMHg2OSwgMHhiNCwgMHhjMywgMHgxMCwgMHhmZiwgMHgyZSwgMHg5MywgMHg1YiB9LAorKwkuc2VjcmV0X3NpemUgPSAzMiwKKysJLmJfcHVibGljX3NpemUgPSAzMiwKKysJLmV4cGVjdGVkX3NzX3NpemUgPSAzMiwKKysKKyt9LAorKy8qIHd5Y2hlcHJvb2YgLSBwdWJsaWMga2V5IG9uIHR3aXN0ICovCisreworKwkuc2VjcmV0ID0gKHU4WzMyXSl7IDB4NzAsIDB4ZTMsIDB4NGIsIDB4Y2IsIDB4ZTEsIDB4ZjQsIDB4N2YsIDB4YmMsCisrCQkgICAgIDB4MGYsIDB4ZGQsIDB4ZmQsIDB4N2MsIDB4MWUsIDB4MWEsIDB4YTUsIDB4M2QsCisrCQkgICAgIDB4NTcsIDB4YmYsIDB4ZTAsIDB4ZjYsIDB4NmQsIDB4MjQsIDB4MzAsIDB4NjcsCisrCQkgICAgIDB4YjQsIDB4MjQsIDB4YmIsIDB4NjIsIDB4MTAsIDB4YmUsIDB4ZDEsIDB4OWMgfSwKKysJLmJfcHVibGljID0gKHU4WzMyXSl7IDB4MGIsIDB4ODIsIDB4MTEsIDB4YTIsIDB4YjYsIDB4MDQsIDB4OTAsIDB4OTcsCisrCQkgICAgMHhmNiwgMHg4NywgMHgxYywgMHg2YywgMHgwNSwgMHgyZCwgMHgzYywgMHg1ZiwKKysJCSAgICAweGMxLCAweGJhLCAweDE3LCAweGRhLCAweDllLCAweDMyLCAweGFlLCAweDQ1LAorKwkJICAgIDB4ODQsIDB4MDMsIDB4YjAsIDB4NWIsIDB4YjIsIDB4ODMsIDB4MDksIDB4MmEgfSwKKysJLmV4cGVjdGVkX3NzID0gKHU4WzMyXSl7IDB4NGEsIDB4MDYsIDB4MzgsIDB4Y2YsIDB4YWEsIDB4OWUsIDB4ZjEsIDB4OTMsCisrCQkgICAgMHgzYiwgMHg0NywgMHhmOCwgMHg5MywgMHg5MiwgMHg5NiwgMHhhNiwgMHhiMiwKKysJCSAgICAweDViLCAweGU1LCAweDQxLCAweGVmLCAweDdmLCAweDcwLCAweGU4LCAweDQ0LAorKwkJICAgIDB4YzAsIDB4YmMsIDB4YzAsIDB4MGIsIDB4MTMsIDB4NGQsIDB4ZTYsIDB4NGEgfSwKKysJLnNlY3JldF9zaXplID0gMzIsCisrCS5iX3B1YmxpY19zaXplID0gMzIsCisrCS5leHBlY3RlZF9zc19zaXplID0gMzIsCisrCisrfSwKKysvKiB3eWNoZXByb29mIC0gcHVibGljIGtleSBvbiB0d2lzdCAqLworK3sKKysJLnNlY3JldCA9ICh1OFszMl0peyAweDY4LCAweGMxLCAweGYzLCAweGE2LCAweDUzLCAweGE0LCAweGNkLCAweGIxLAorKwkJICAgICAweGQzLCAweDdiLCAweGJhLCAweDk0LCAweDczLCAweDhmLCAweDhiLCAweDk1LAorKwkJICAgICAweDdhLCAweDU3LCAweGJlLCAweGIyLCAweDRkLCAweDY0LCAweDZlLCAweDk5LAorKwkJICAgICAweDRkLCAweGMyLCAweDlhLCAweDI3LCAweDZhLCAweGFkLCAweDQ1LCAweDhkIH0sCisrCS5iX3B1YmxpYyA9ICh1OFszMl0peyAweDM0LCAweDNhLCAweGMyLCAweDBhLCAweDNiLCAweDljLCAweDZhLCAweDI3LAorKwkJICAgIDB4YjEsIDB4MDAsIDB4ODEsIDB4NzYsIDB4NTAsIDB4OWEsIDB4ZDMsIDB4MDcsCisrCQkgICAgMHgzNSwgMHg4NSwgMHg2ZSwgMHhjMSwgMHhjOCwgMHhkOCwgMHhmYywgMHhhZSwKKysJCSAgICAweDEzLCAweDkxLCAweDJkLCAweDA4LCAweGQxLCAweDUyLCAweGY0LCAweDZjIH0sCisrCS5leHBlY3RlZF9zcyA9ICh1OFszMl0peyAweDM5LCAweDk0LCAweDkxLCAweGZjLCAweGU4LCAweGRmLCAweGFiLCAweDczLAorKwkJICAgIDB4YjQsIDB4ZjksIDB4ZjYsIDB4MTEsIDB4ZGUsIDB4OGUsIDB4YTAsIDB4YjIsCisrCQkgICAgMHg3YiwgMHgyOCwgMHhmOCwgMHg1OSwgMHg5NCwgMHgyNSwgMHgwYiwgMHgwZiwKKysJCSAgICAweDQ3LCAweDVkLCAweDU4LCAweDVkLCAweDA0LCAweDJhLCAweGMyLCAweDA3IH0sCisrCS5zZWNyZXRfc2l6ZSA9IDMyLAorKwkuYl9wdWJsaWNfc2l6ZSA9IDMyLAorKwkuZXhwZWN0ZWRfc3Nfc2l6ZSA9IDMyLAorKworK30sCisrLyogd3ljaGVwcm9vZiAtIHB1YmxpYyBrZXkgb24gdHdpc3QgKi8KKyt7CisrCS5zZWNyZXQgPSAodThbMzJdKXsgMHhkOCwgMHg3NywgMHhiMiwgMHg2ZCwgMHgwNiwgMHhkZiwgMHhmOSwgMHhkOSwKKysJCSAgICAgMHhmNywgMHhmZCwgMHg0YywgMHg1YiwgMHgzNywgMHg2OSwgMHhmOCwgMHhjZCwKKysJCSAgICAgMHhkNSwgMHhiMywgMHgwNSwgMHgxNiwgMHhhNSwgMHhhYiwgMHg4MCwgMHg2YiwKKysJCSAgICAgMHhlMywgMHgyNCwgMHhmZiwgMHgzZSwgMHhiNiwgMHg5ZSwgMHhhMCwgMHhiMiB9LAorKwkuYl9wdWJsaWMgPSAodThbMzJdKXsgMHhmYSwgMHg2OSwgMHg1ZiwgMHhjNywgMHhiZSwgMHg4ZCwgMHgxYiwgMHhlNSwKKysJCSAgICAweGJmLCAweDcwLCAweDQ4LCAweDk4LCAweGYzLCAweDg4LCAweGM0LCAweDUyLAorKwkJICAgIDB4YmEsIDB4ZmQsIDB4ZDMsIDB4YjgsIDB4ZWEsIDB4ZTgsIDB4MDUsIDB4ZjgsCisrCQkgICAgMHg2OCwgMHgxYSwgMHg4ZCwgMHgxNSwgMHhjMiwgMHhkNCwgMHhlMSwgMHg0MiB9LAorKwkuZXhwZWN0ZWRfc3MgPSAodThbMzJdKXsgMHgyYywgMHg0ZiwgMHhlMSwgMHgxZCwgMHg0OSwgMHgwYSwgMHg1MywgMHg4NiwKKysJCSAgICAweDE3LCAweDc2LCAweGIxLCAweDNiLCAweDQzLCAweDU0LCAweGFiLCAweGQ0LAorKwkJICAgIDB4Y2YsIDB4NWEsIDB4OTcsIDB4NjksIDB4OWQsIDB4YjYsIDB4ZTYsIDB4YzYsCisrCQkgICAgMHg4YywgMHgxNiwgMHgyNiwgMHhkMCwgMHg3NiwgMHg2MiwgMHhmNywgMHg1OCB9LAorKwkuc2VjcmV0X3NpemUgPSAzMiwKKysJLmJfcHVibGljX3NpemUgPSAzMiwKKysJLmV4cGVjdGVkX3NzX3NpemUgPSAzMiwKKysKKyt9LAorKy8qIHd5Y2hlcHJvb2YgLSBlZGdlIGNhc2Ugb24gdHdpc3QgKi8KKyt7CisrCS5zZWNyZXQgPSAodThbMzJdKXsgMHgzOCwgMHhkZCwgMHhlOSwgMHhmMywgMHhlNywgMHhiNywgMHg5OSwgMHgwNCwKKysJCSAgICAgMHg1ZiwgMHg5YSwgMHhjMywgMHg3OSwgMHgzZCwgMHg0YSwgMHg5MiwgMHg3NywKKysJCSAgICAgMHhkYSwgMHhkZSwgMHhhZCwgMHhjNCwgMHgxYiwgMHhlYywgMHgwMiwgMHg5MCwKKysJCSAgICAgMHhmOCwgMHgxZiwgMHg3NCwgMHg0ZiwgMHg3MywgMHg3NywgMHg1ZiwgMHg4NCB9LAorKwkuYl9wdWJsaWMgPSAodThbMzJdKXsgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorKwkuZXhwZWN0ZWRfc3MgPSAodThbMzJdKXsgMHg5YSwgMHgyYywgMHhmZSwgMHg4NCwgMHhmZiwgMHg5YywgMHg0YSwgMHg5NywKKysJCSAgICAweDM5LCAweDYyLCAweDVjLCAweGFlLCAweDRhLCAweDNiLCAweDgyLCAweGE5LAorKwkJICAgIDB4MDYsIDB4ODcsIDB4N2EsIDB4NDQsIDB4MTksIDB4NDYsIDB4ZjgsIDB4ZDcsCisrCQkgICAgMHhiMywgMHhkNywgMHg5NSwgMHhmZSwgMHg4ZiwgMHg1ZCwgMHgxNiwgMHgzOSB9LAorKwkuc2VjcmV0X3NpemUgPSAzMiwKKysJLmJfcHVibGljX3NpemUgPSAzMiwKKysJLmV4cGVjdGVkX3NzX3NpemUgPSAzMiwKKysKKyt9LAorKy8qIHd5Y2hlcHJvb2YgLSBlZGdlIGNhc2Ugb24gdHdpc3QgKi8KKyt7CisrCS5zZWNyZXQgPSAodThbMzJdKXsgMHg5OCwgMHg1NywgMHhhOSwgMHgxNCwgMHhlMywgMHhjMiwgMHg5MCwgMHgzNiwKKysJCSAgICAgMHhmZCwgMHg5YSwgMHg0NCwgMHgyYiwgMHhhNSwgMHgyNiwgMHhiNSwgMHhjZCwKKysJCSAgICAgMHhjZCwgMHhmMiwgMHg4MiwgMHgxNiwgMHgxNSwgMHgzZSwgMHg2MywgMHg2YywKKysJCSAgICAgMHgxMCwgMHg2NywgMHg3YSwgMHhjYSwgMHhiNiwgMHhiZCwgMHg2YSwgMHhhNSB9LAorKwkuYl9wdWJsaWMgPSAodThbMzJdKXsgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorKwkuZXhwZWN0ZWRfc3MgPSAodThbMzJdKXsgMHg0ZCwgMHhhNCwgMHhlMCwgMHhhYSwgMHgwNywgMHgyYywgMHgyMywgMHgyZSwKKysJCSAgICAweGUyLCAweGYwLCAweGZhLCAweDRlLCAweDUxLCAweDlhLCAweGU1LCAweDBiLAorKwkJICAgIDB4NTIsIDB4YzEsIDB4ZWQsIDB4ZDAsIDB4OGEsIDB4NTMsIDB4NGQsIDB4NGUsCisrCQkgICAgMHhmMywgMHg0NiwgMHhjMiwgMHhlMSwgMHgwNiwgMHhkMiwgMHgxZCwgMHg2MCB9LAorKwkuc2VjcmV0X3NpemUgPSAzMiwKKysJLmJfcHVibGljX3NpemUgPSAzMiwKKysJLmV4cGVjdGVkX3NzX3NpemUgPSAzMiwKKysKKyt9LAorKy8qIHd5Y2hlcHJvb2YgLSBlZGdlIGNhc2Ugb24gdHdpc3QgKi8KKyt7CisrCS5zZWNyZXQgPSAodThbMzJdKXsgMHg0OCwgMHhlMiwgMHgxMywgMHgwZCwgMHg3MiwgMHgzMywgMHgwNSwgMHhlZCwKKysJCSAgICAgMHgwNSwgMHhlNiwgMHhlNSwgMHg4OSwgMHg0ZCwgMHgzOSwgMHg4YSwgMHg1ZSwKKysJCSAgICAgMHgzMywgMHgzNiwgMHg3YSwgMHg4YywgMHg2YSwgMHhhYywgMHg4ZiwgMHhjZCwKKysJCSAgICAgMHhmMCwgMHhhOCwgMHg4ZSwgMHg0YiwgMHg0MiwgMHg4MiwgMHgwZCwgMHhiNyB9LAorKwkuYl9wdWJsaWMgPSAodThbMzJdKXsgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMywgMHgwMCwgMHgwMCwgMHhmOCwgMHhmZiwKKysJCSAgICAweGZmLCAweDFmLCAweDAwLCAweDAwLCAweGMwLCAweGZmLCAweGZmLCAweGZmLAorKwkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4MDcsIDB4MDAsCisrCQkgICAgMHgwMCwgMHhmMCwgMHhmZiwgMHhmZiwgMHgzZiwgMHgwMCwgMHgwMCwgMHgwMCB9LAorKwkuZXhwZWN0ZWRfc3MgPSAodThbMzJdKXsgMHg5ZSwgMHhkMSwgMHgwYywgMHg1MywgMHg3NCwgMHg3ZiwgMHg2NCwgMHg3ZiwKKysJCSAgICAweDgyLCAweGY0LCAweDUxLCAweDI1LCAweGQzLCAweGRlLCAweDE1LCAweGExLAorKwkJICAgIDB4ZTYsIDB4YjgsIDB4MjQsIDB4NDksIDB4NmEsIDB4YjQsIDB4MDQsIDB4MTAsCisrCQkgICAgMHhmZiwgMHhjYywgMHgzYywgMHhmZSwgMHg5NSwgMHg3NiwgMHgwZiwgMHgzYiB9LAorKwkuc2VjcmV0X3NpemUgPSAzMiwKKysJLmJfcHVibGljX3NpemUgPSAzMiwKKysJLmV4cGVjdGVkX3NzX3NpemUgPSAzMiwKKysKKyt9LAorKy8qIHd5Y2hlcHJvb2YgLSBlZGdlIGNhc2Ugb24gdHdpc3QgKi8KKyt7CisrCS5zZWNyZXQgPSAodThbMzJdKXsgMHgyOCwgMHhmNCwgMHgxMCwgMHgxMSwgMHg2OSwgMHgxOCwgMHg1MSwgMHhiMywKKysJCSAgICAgMHhhNiwgMHgyYiwgMHg2NCwgMHgxNSwgMHg1MywgMHhiMywgMHgwZCwgMHgwZCwKKysJCSAgICAgMHhmZCwgMHhkYywgMHhiOCwgMHhmZiwgMHhmYywgMHhmNSwgMHgzNywgMHgwMCwKKysJCSAgICAgMHhhNywgMHhiZSwgMHgyZiwgMHg2YSwgMHg4NywgMHgyZSwgMHg5ZiwgMHhiMCB9LAorKwkuYl9wdWJsaWMgPSAodThbMzJdKXsgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHhmZiwgMHhmZiwgMHgwNywgMHgwMCwKKysJCSAgICAweDAwLCAweGUwLCAweGZmLCAweGZmLCAweDNmLCAweDAwLCAweDAwLCAweDAwLAorKwkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZmYsCisrCQkgICAgMHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHhjMCwgMHhmZiwgMHhmZiwgMHg3ZiB9LAorKwkuZXhwZWN0ZWRfc3MgPSAodThbMzJdKXsgMHhjZiwgMHg3MiwgMHhiNCwgMHhhYSwgMHg2YSwgMHhhMSwgMHhjOSwgMHhmOCwKKysJCSAgICAweDk0LCAweGY0LCAweDE2LCAweDViLCAweDg2LCAweDEwLCAweDlhLCAweGE0LAorKwkJICAgIDB4NjgsIDB4NTEsIDB4NzYsIDB4NDgsIDB4ZTEsIDB4ZjAsIDB4Y2MsIDB4NzAsCisrCQkgICAgMHhlMSwgMHhhYiwgMHgwOCwgMHg0NiwgMHgwMSwgMHg3NiwgMHg1MCwgMHg2YiB9LAorKwkuc2VjcmV0X3NpemUgPSAzMiwKKysJLmJfcHVibGljX3NpemUgPSAzMiwKKysJLmV4cGVjdGVkX3NzX3NpemUgPSAzMiwKKysKKyt9LAorKy8qIHd5Y2hlcHJvb2YgLSBlZGdlIGNhc2Ugb24gdHdpc3QgKi8KKyt7CisrCS5zZWNyZXQgPSAodThbMzJdKXsgMHgxOCwgMHhhOSwgMHgzYiwgMHg2NCwgMHg5OSwgMHhiOSwgMHhmNiwgMHhiMywKKysJCSAgICAgMHgyMiwgMHg1YywgMHhhMCwgMHgyZiwgMHhlZiwgMHg0MSwgMHgwZSwgMHgwYSwKKysJCSAgICAgMHhkZSwgMHhjMiwgMHgzNSwgMHgzMiwgMHgzMiwgMHgxZCwgMHgyZCwgMHg4ZSwKKysJCSAgICAgMHhmMSwgMHhhNiwgMHhkNiwgMHgwMiwgMHhhOCwgMHhjNiwgMHg1YiwgMHg4MyB9LAorKwkuYl9wdWJsaWMgPSAodThbMzJdKXsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiB9LAorKwkuZXhwZWN0ZWRfc3MgPSAodThbMzJdKXsgMHg1ZCwgMHg1MCwgMHhiNiwgMHgyOCwgMHgzNiwgMHhiYiwgMHg2OSwgMHg1NywKKysJCSAgICAweDk0LCAweDEwLCAweDM4LCAweDZjLCAweGY3LCAweGJiLCAweDgxLCAweDFjLAorKwkJICAgIDB4MTQsIDB4YmYsIDB4ODUsIDB4YjEsIDB4YzcsIDB4YjEsIDB4N2UsIDB4NTksCisrCQkgICAgMHgyNCwgMHhjNywgMHhmZiwgMHhlYSwgMHg5MSwgMHhlZiwgMHg5ZSwgMHgxMiB9LAorKwkuc2VjcmV0X3NpemUgPSAzMiwKKysJLmJfcHVibGljX3NpemUgPSAzMiwKKysJLmV4cGVjdGVkX3NzX3NpemUgPSAzMiwKKysKKyt9LAorKy8qIHd5Y2hlcHJvb2YgLSBlZGdlIGNhc2Ugb24gdHdpc3QgKi8KKyt7CisrCS5zZWNyZXQgPSAodThbMzJdKXsgMHhjMCwgMHgxZCwgMHgxMywgMHgwNSwgMHhhMSwgMHgzMywgMHg4YSwgMHgxZiwKKysJCSAgICAgMHhjYSwgMHhjMiwgMHhiYSwgMHg3ZSwgMHgyZSwgMHgwMywgMHgyYiwgMHg0MiwKKysJCSAgICAgMHg3ZSwgMHgwYiwgMHgwNCwgMHg5MCwgMHgzMSwgMHg2NSwgMHhhYywgMHhhOSwKKysJCSAgICAgMHg1NywgMHhkOCwgMHhkMCwgMHg1NSwgMHgzZCwgMHg4NywgMHgxNywgMHhiMCB9LAorKwkuYl9wdWJsaWMgPSAodThbMzJdKXsgMHhlYSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiB9LAorKwkuZXhwZWN0ZWRfc3MgPSAodThbMzJdKXsgMHgxOSwgMHgyMywgMHgwZSwgMHhiMSwgMHg0OCwgMHhkNSwgMHhkNiwgMHg3YywKKysJCSAgICAweDNjLCAweDIyLCAweGFiLCAweDFkLCAweGFlLCAweGZmLCAweDgwLCAweGE1LAorKwkJICAgIDB4N2UsIDB4YWUsIDB4NDIsIDB4NjUsIDB4Y2UsIDB4MjgsIDB4NzIsIDB4NjUsCisrCQkgICAgMHg3YiwgMHgyYywgMHg4MCwgMHg5OSwgMHhmYywgMHg2OSwgMHg4ZSwgMHg1MCB9LAorKwkuc2VjcmV0X3NpemUgPSAzMiwKKysJLmJfcHVibGljX3NpemUgPSAzMiwKKysJLmV4cGVjdGVkX3NzX3NpemUgPSAzMiwKKysKKyt9LAorKy8qIHd5Y2hlcHJvb2YgLSBlZGdlIGNhc2UgZm9yIHB1YmxpYyBrZXkgKi8KKyt7CisrCS5zZWNyZXQgPSAodThbMzJdKXsgMHgzOCwgMHg2ZiwgMHg3ZiwgMHgxNiwgMHhjNSwgMHgwNywgMHgzMSwgMHhkNiwKKysJCSAgICAgMHg0ZiwgMHg4MiwgMHhlNiwgMHhhMSwgMHg3MCwgMHhiMSwgMHg0MiwgMHhhNCwKKysJCSAgICAgMHhlMywgMHg0ZiwgMHgzMSwgMHhmZCwgMHg3NywgMHg2OCwgMHhmYywgMHhiOCwKKysJCSAgICAgMHg5MCwgMHgyOSwgMHgyNSwgMHhlNywgMHhkMSwgMHhlMiwgMHgxYSwgMHhiZSB9LAorKwkuYl9wdWJsaWMgPSAodThbMzJdKXsgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorKwkuZXhwZWN0ZWRfc3MgPSAodThbMzJdKXsgMHgwZiwgMHhjYSwgMHhiNSwgMHhkOCwgMHg0MiwgMHhhMCwgMHg3OCwgMHhkNywKKysJCSAgICAweGE3LCAweDFmLCAweGM1LCAweDliLCAweDU3LCAweGJmLCAweGI0LCAweGNhLAorKwkJICAgIDB4MGIsIDB4ZTYsIDB4ODcsIDB4M2IsIDB4NDksIDB4ZGMsIDB4ZGIsIDB4OWYsCisrCQkgICAgMHg0NCwgMHhlMSwgMHg0YSwgMHhlOCwgMHhmYiwgMHhkZiwgMHhhNSwgMHg0MiB9LAorKwkuc2VjcmV0X3NpemUgPSAzMiwKKysJLmJfcHVibGljX3NpemUgPSAzMiwKKysJLmV4cGVjdGVkX3NzX3NpemUgPSAzMiwKKysKKyt9LAorKy8qIHd5Y2hlcHJvb2YgLSBlZGdlIGNhc2UgZm9yIHB1YmxpYyBrZXkgKi8KKyt7CisrCS5zZWNyZXQgPSAodThbMzJdKXsgMHhlMCwgMHgyMywgMHhhMiwgMHg4OSwgMHhiZCwgMHg1ZSwgMHg5MCwgMHhmYSwKKysJCSAgICAgMHgyOCwgMHgwNCwgMHhkZCwgMHhjMCwgMHgxOSwgMHhhMCwgMHg1ZSwgMHhmMywKKysJCSAgICAgMHhlNywgMHg5ZCwgMHg0MywgMHg0YiwgMHhiNiwgMHhlYSwgMHgyZiwgMHg1MiwKKysJCSAgICAgMHgyZSwgMHhjYiwgMHg2NCwgMHgzYSwgMHg3NSwgMHgyOSwgMHg2ZSwgMHg5NSB9LAorKwkuYl9wdWJsaWMgPSAodThbMzJdKXsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorKwkuZXhwZWN0ZWRfc3MgPSAodThbMzJdKXsgMHg1NCwgMHhjZSwgMHg4ZiwgMHgyMiwgMHg3NSwgMHhjMCwgMHg3NywgMHhlMywKKysJCSAgICAweGIxLCAweDMwLCAweDZhLCAweDM5LCAweDM5LCAweGM1LCAweGUwLCAweDNlLAorKwkJICAgIDB4ZWYsIDB4NmIsIDB4YmIsIDB4ODgsIDB4MDYsIDB4MDUsIDB4NDQsIDB4NzUsCisrCQkgICAgMHg4ZCwgMHg5ZiwgMHhlZiwgMHg1OSwgMHhiMCwgMHhiYywgMHgzZSwgMHg0ZiB9LAorKwkuc2VjcmV0X3NpemUgPSAzMiwKKysJLmJfcHVibGljX3NpemUgPSAzMiwKKysJLmV4cGVjdGVkX3NzX3NpemUgPSAzMiwKKysKKyt9LAorKy8qIHd5Y2hlcHJvb2YgLSBlZGdlIGNhc2UgZm9yIHB1YmxpYyBrZXkgKi8KKyt7CisrCS5zZWNyZXQgPSAodThbMzJdKXsgMHg2OCwgMHhmMCwgMHgxMCwgMHhkNiwgMHgyZSwgMHhlOCwgMHhkOSwgMHgyNiwKKysJCSAgICAgMHgwNSwgMHgzYSwgMHgzNiwgMHgxYywgMHgzYSwgMHg3NSwgMHhjNiwgMHhlYSwKKysJCSAgICAgMHg0ZSwgMHhiZCwgMHhjOCwgMHg2MCwgMHg2YSwgMHhiMiwgMHg4NSwgMHgwMCwKKysJCSAgICAgMHgzYSwgMHg2ZiwgMHg4ZiwgMHg0MCwgMHg3NiwgMHhiMCwgMHgxZSwgMHg4MyB9LAorKwkuYl9wdWJsaWMgPSAodThbMzJdKXsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMyB9LAorKwkuZXhwZWN0ZWRfc3MgPSAodThbMzJdKXsgMHhmMSwgMHgzNiwgMHg3NywgMHg1YywgMHg1YiwgMHhlYiwgMHgwYSwgMHhmOCwKKysJCSAgICAweDExLCAweDBhLCAweGYxLCAweDBiLCAweDIwLCAweDM3LCAweDIzLCAweDMyLAorKwkJICAgIDB4MDQsIDB4M2MsIDB4YWIsIDB4NzUsIDB4MjQsIDB4MTksIDB4NjcsIDB4ODcsCisrCQkgICAgMHg3NSwgMHhhMiwgMHgyMywgMHhkZiwgMHg1NywgMHhjOSwgMHhkMywgMHgwZCB9LAorKwkuc2VjcmV0X3NpemUgPSAzMiwKKysJLmJfcHVibGljX3NpemUgPSAzMiwKKysJLmV4cGVjdGVkX3NzX3NpemUgPSAzMiwKKysKKyt9LAorKy8qIHd5Y2hlcHJvb2YgLSBlZGdlIGNhc2UgZm9yIHB1YmxpYyBrZXkgKi8KKyt7CisrCS5zZWNyZXQgPSAodThbMzJdKXsgMHg1OCwgMHhlYiwgMHhjYiwgMHgzNSwgMHhiMCwgMHhmOCwgMHg4NCwgMHg1YywKKysJCSAgICAgMHhhZiwgMHgxZSwgMHhjNiwgMHgzMCwgMHhmOSwgMHg2NSwgMHg3NiwgMHhiNiwKKysJCSAgICAgMHgyYywgMHg0YiwgMHg3YiwgMHg2YywgMHgzNiwgMHhiMiwgMHg5ZCwgMHhlYiwKKysJCSAgICAgMHgyYywgMHhiMCwgMHgwOCwgMHg0NiwgMHg1MSwgMHg3NSwgMHg1YywgMHg5NiB9LAorKwkuYl9wdWJsaWMgPSAodThbMzJdKXsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmYiwgMHhmZiwgMHhmZiwgMHhmYiwgMHhmZiwKKysJCSAgICAweGZmLCAweGRmLCAweGZmLCAweGZmLCAweGRmLCAweGZmLCAweGZmLCAweGZmLAorKwkJICAgIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ZmYsCisrCQkgICAgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHhiZiwgMHhmZiwgMHhmZiwgMHgzZiB9LAorKwkuZXhwZWN0ZWRfc3MgPSAodThbMzJdKXsgMHhiZiwgMHg5YSwgMHhmZiwgMHhkMCwgMHg2YiwgMHg4NCwgMHg0MCwgMHg4NSwKKysJCSAgICAweDU4LCAweDY0LCAweDYwLCAweDk2LCAweDJlLCAweGYyLCAweDE0LCAweDZmLAorKwkJICAgIDB4ZjMsIDB4ZDQsIDB4NTMsIDB4M2QsIDB4OTQsIDB4NDQsIDB4YWEsIDB4YjAsCisrCQkgICAgMHgwNiwgMHhlYiwgMHg4OCwgMHhjYywgMHgzMCwgMHg1NCwgMHg0MCwgMHg3ZCB9LAorKwkuc2VjcmV0X3NpemUgPSAzMiwKKysJLmJfcHVibGljX3NpemUgPSAzMiwKKysJLmV4cGVjdGVkX3NzX3NpemUgPSAzMiwKKysKKyt9LAorKy8qIHd5Y2hlcHJvb2YgLSBlZGdlIGNhc2UgZm9yIHB1YmxpYyBrZXkgKi8KKyt7CisrCS5zZWNyZXQgPSAodThbMzJdKXsgMHgxOCwgMHg4YywgMHg0YiwgMHhjNSwgMHhiOSwgMHhjNCwgMHg0YiwgMHgzOCwKKysJCSAgICAgMHhiYiwgMHg2NSwgMHg4YiwgMHg5YiwgMHgyYSwgMHhlOCwgMHgyZCwgMHg1YiwKKysJCSAgICAgMHgwMSwgMHgwMSwgMHg1ZSwgMHgwOSwgMHgzMSwgMHg4NCwgMHhiMSwgMHg3YywKKysJCSAgICAgMHhiNywgMHg4NiwgMHgzNSwgMHgwMywgMHhhNywgMHg4MywgMHhlMSwgMHhiYiB9LAorKwkuYl9wdWJsaWMgPSAodThbMzJdKXsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgzZiB9LAorKwkuZXhwZWN0ZWRfc3MgPSAodThbMzJdKXsgMHhkNCwgMHg4MCwgMHhkZSwgMHgwNCwgMHhmNiwgMHg5OSwgMHhjYiwgMHgzYiwKKysJCSAgICAweGUwLCAweDY4LCAweDRhLCAweDljLCAweGMyLCAweGUzLCAweDEyLCAweDgxLAorKwkJICAgIDB4ZWEsIDB4MGIsIDB4YzUsIDB4YTksIDB4ZGMsIDB4YzEsIDB4NTcsIDB4ZDMsCisrCQkgICAgMHhkMiwgMHgwMSwgMHg1OCwgMHhkNCwgMHg2YywgMHhhNSwgMHgyNCwgMHg2ZCB9LAorKwkuc2VjcmV0X3NpemUgPSAzMiwKKysJLmJfcHVibGljX3NpemUgPSAzMiwKKysJLmV4cGVjdGVkX3NzX3NpemUgPSAzMiwKKysKKyt9LAorKy8qIHd5Y2hlcHJvb2YgLSBlZGdlIGNhc2UgZm9yIHB1YmxpYyBrZXkgKi8KKyt7CisrCS5zZWNyZXQgPSAodThbMzJdKXsgMHhlMCwgMHg2YywgMHgxMSwgMHhiYiwgMHgyZSwgMHgxMywgMHhjZSwgMHgzZCwKKysJCSAgICAgMHhjNywgMHg2NywgMHgzZiwgMHg2NywgMHhmNSwgMHg0OCwgMHgyMiwgMHg0MiwKKysJCSAgICAgMHg5MCwgMHg5NCwgMHgyMywgMHhhOSwgMHhhZSwgMHg5NSwgMHhlZSwgMHg5OCwKKysJCSAgICAgMHg2YSwgMHg5OCwgMHg4ZCwgMHg5OCwgMHhmYSwgMHhlZSwgMHgyMywgMHhhMiB9LAorKwkuYl9wdWJsaWMgPSAodThbMzJdKXsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHhmZiwgMHhmZiwgMHg3ZiwKKysJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZlLCAweGZmLCAweGZmLCAweDdmLAorKwkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4N2YsCisrCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZSwgMHhmZiwgMHhmZiwgMHg3ZiB9LAorKwkuZXhwZWN0ZWRfc3MgPSAodThbMzJdKXsgMHg0YywgMHg0NCwgMHgwMSwgMHhjYywgMHhlNiwgMHhiNSwgMHgxZSwgMHg0YywKKysJCSAgICAweGIxLCAweDhmLCAweDI3LCAweDkwLCAweDI0LCAweDZjLCAweDliLCAweGY5LAorKwkJICAgIDB4MTQsIDB4ZGIsIDB4NjYsIDB4NzcsIDB4NTAsIDB4YTEsIDB4Y2IsIDB4ODksCisrCQkgICAgMHgwNiwgMHg5MCwgMHg5MiwgMHhhZiwgMHgwNywgMHgyOSwgMHgyMiwgMHg3NiB9LAorKwkuc2VjcmV0X3NpemUgPSAzMiwKKysJLmJfcHVibGljX3NpemUgPSAzMiwKKysJLmV4cGVjdGVkX3NzX3NpemUgPSAzMiwKKysKKyt9LAorKy8qIHd5Y2hlcHJvb2YgLSBlZGdlIGNhc2UgZm9yIHB1YmxpYyBrZXkgKi8KKyt7CisrCS5zZWNyZXQgPSAodThbMzJdKXsgMHhjMCwgMHg2NSwgMHg4YywgMHg0NiwgMHhkZCwgMHhlMSwgMHg4MSwgMHgyOSwKKysJCSAgICAgMHgyOSwgMHgzOCwgMHg3NywgMHg1MywgMHg1YiwgMHgxMSwgMHg2MiwgMHhiNiwKKysJCSAgICAgMHhmOSwgMHhmNSwgMHg0MSwgMHg0YSwgMHgyMywgMHhjZiwgMHg0ZCwgMHgyYywKKysJCSAgICAgMHhiYywgMHgxNCwgMHgwYSwgMHg0ZCwgMHg5OSwgMHhkYSwgMHgyYiwgMHg4ZiB9LAorKwkuYl9wdWJsaWMgPSAodThbMzJdKXsgMHhlYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiB9LAorKwkuZXhwZWN0ZWRfc3MgPSAodThbMzJdKXsgMHg1NywgMHg4YiwgMHhhOCwgMHhjYywgMHgyZCwgMHhiZCwgMHhjNSwgMHg3NSwKKysJCSAgICAweGFmLCAweGNmLCAweDlkLCAweGYyLCAweGIzLCAweGVlLCAweDYxLCAweDg5LAorKwkJICAgIDB4ZjUsIDB4MzMsIDB4N2QsIDB4NjgsIDB4NTQsIDB4YzcsIDB4OWIsIDB4NGMsCisrCQkgICAgMHhlMSwgMHg2NSwgMHhlYSwgMHgxMiwgMHgyOSwgMHgzYiwgMHgzYSwgMHgwZiB9LAorKwkuc2VjcmV0X3NpemUgPSAzMiwKKysJLmJfcHVibGljX3NpemUgPSAzMiwKKysJLmV4cGVjdGVkX3NzX3NpemUgPSAzMiwKKysKKyt9LAorKy8qIHd5Y2hlcHJvb2YgLSBwdWJsaWMga2V5ID49IHAgKi8KKyt7CisrCS5zZWNyZXQgPSAodThbMzJdKXsgMHhmMCwgMHgxZSwgMHg0OCwgMHhkYSwgMHhmYSwgMHhjOSwgMHhkNywgMHhiYywKKysJCSAgICAgMHhmNSwgMHg4OSwgMHhjYiwgMHhjMywgMHg4MiwgMHhjOCwgMHg3OCwgMHhkMSwKKysJCSAgICAgMHg4YiwgMHhkYSwgMHgzNSwgMHg1MCwgMHg1OCwgMHg5ZiwgMHhmYiwgMHg1ZCwKKysJCSAgICAgMHg1MCwgMHhiNSwgMHgyMywgMHhiZSwgMHhiZSwgMHgzMiwgMHg5ZCwgMHhhZSB9LAorKwkuYl9wdWJsaWMgPSAodThbMzJdKXsgMHhlZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiB9LAorKwkuZXhwZWN0ZWRfc3MgPSAodThbMzJdKXsgMHhiZCwgMHgzNiwgMHhhMCwgMHg3OSwgMHgwZSwgMHhiOCwgMHg4MywgMHgwOSwKKysJCSAgICAweDhjLCAweDk4LCAweDhiLCAweDIxLCAweDc4LCAweDY3LCAweDczLCAweGRlLAorKwkJICAgIDB4MGIsIDB4M2EsIDB4NGQsIDB4ZjEsIDB4NjIsIDB4MjgsIDB4MmMsIDB4ZjEsCisrCQkgICAgMHgxMCwgMHhkZSwgMHgxOCwgMHhkZCwgMHg0OCwgMHg0YywgMHhlNywgMHg0YiB9LAorKwkuc2VjcmV0X3NpemUgPSAzMiwKKysJLmJfcHVibGljX3NpemUgPSAzMiwKKysJLmV4cGVjdGVkX3NzX3NpemUgPSAzMiwKKysKKyt9LAorKy8qIHd5Y2hlcHJvb2YgLSBwdWJsaWMga2V5ID49IHAgKi8KKyt7CisrCS5zZWNyZXQgPSAodThbMzJdKXsgMHgyOCwgMHg4NywgMHg5NiwgMHhiYywgMHg1YSwgMHhmZiwgMHg0YiwgMHg4MSwKKysJCSAgICAgMHhhMywgMHg3NSwgMHgwMSwgMHg3NSwgMHg3YiwgMHhjMCwgMHg3NSwgMHgzYSwKKysJCSAgICAgMHgzYywgMHgyMSwgMHg5NiwgMHg0NywgMHg5MCwgMHhkMywgMHg4NiwgMHg5OSwKKysJCSAgICAgMHgzMCwgMHg4ZCwgMHhlYiwgMHhjMSwgMHg3YSwgMHg2ZSwgMHhhZiwgMHg4ZCB9LAorKwkuYl9wdWJsaWMgPSAodThbMzJdKXsgMHhmMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiB9LAorKwkuZXhwZWN0ZWRfc3MgPSAodThbMzJdKXsgMHhiNCwgMHhlMCwgMHhkZCwgMHg3NiwgMHhkYSwgMHg3YiwgMHgwNywgMHgxNywKKysJCSAgICAweDI4LCAweGI2LCAweDFmLCAweDg1LCAweDY3LCAweDcxLCAweGFhLCAweDM1LAorKwkJICAgIDB4NmUsIDB4NTcsIDB4ZWQsIDB4YTcsIDB4OGEsIDB4NWIsIDB4MTYsIDB4NTUsCisrCQkgICAgMHhjYywgMHgzOCwgMHgyMCwgMHhmYiwgMHg1ZiwgMHg4NSwgMHg0YywgMHg1YyB9LAorKwkuc2VjcmV0X3NpemUgPSAzMiwKKysJLmJfcHVibGljX3NpemUgPSAzMiwKKysJLmV4cGVjdGVkX3NzX3NpemUgPSAzMiwKKysKKyt9LAorKy8qIHd5Y2hlcHJvb2YgLSBwdWJsaWMga2V5ID49IHAgKi8KKyt7CisrCS5zZWNyZXQgPSAodThbMzJdKXsgMHg5OCwgMHhkZiwgMHg4NCwgMHg1ZiwgMHg2NiwgMHg1MSwgMHhiZiwgMHgxMSwKKysJCSAgICAgMHgzOCwgMHgyMiwgMHgxZiwgMHgxMSwgMHg5MCwgMHg0MSwgMHhmNywgMHgyYiwKKysJCSAgICAgMHg2ZCwgMHhiYywgMHgzYywgMHg0YSwgMHhjZSwgMHg3MSwgMHg0MywgMHhkOSwKKysJCSAgICAgMHg5ZiwgMHhkNSwgMHg1YSwgMHhkOCwgMHg2NywgMHg0OCwgMHgwZCwgMHhhOCB9LAorKwkuYl9wdWJsaWMgPSAodThbMzJdKXsgMHhmMSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiB9LAorKwkuZXhwZWN0ZWRfc3MgPSAodThbMzJdKXsgMHg2ZiwgMHhkZiwgMHg2YywgMHgzNywgMHg2MSwgMHgxZCwgMHhiZCwgMHg1MywKKysJCSAgICAweDA0LCAweGRjLCAweDBmLCAweDJlLCAweGI3LCAweGM5LCAweDUxLCAweDdlLAorKwkJICAgIDB4YjMsIDB4YzUsIDB4MGUsIDB4MTIsIDB4ZmQsIDB4MDUsIDB4MGEsIDB4YzYsCisrCQkgICAgMHhkZSwgMHhjMiwgMHg3MCwgMHg3MSwgMHhkNCwgMHhiZiwgMHhjMCwgMHgzNCB9LAorKwkuc2VjcmV0X3NpemUgPSAzMiwKKysJLmJfcHVibGljX3NpemUgPSAzMiwKKysJLmV4cGVjdGVkX3NzX3NpemUgPSAzMiwKKysKKyt9LAorKy8qIHd5Y2hlcHJvb2YgLSBwdWJsaWMga2V5ID49IHAgKi8KKyt7CisrCS5zZWNyZXQgPSAodThbMzJdKXsgMHhmMCwgMHg5NCwgMHg5OCwgMHhlNCwgMHg2ZiwgMHgwMiwgMHhmOCwgMHg3OCwKKysJCSAgICAgMHg4MiwgMHg5ZSwgMHg3OCwgMHhiOCwgMHgwMywgMHhkMywgMHgxNiwgMHhhMiwKKysJCSAgICAgMHhlZCwgMHg2OSwgMHg1ZCwgMHgwNCwgMHg5OCwgMHhhMCwgMHg4YSwgMHhiZCwKKysJCSAgICAgMHhmOCwgMHgyNywgMHg2OSwgMHgzMCwgMHhlMiwgMHg0ZSwgMHhkYywgMHhiMCB9LAorKwkuYl9wdWJsaWMgPSAodThbMzJdKXsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiB9LAorKwkuZXhwZWN0ZWRfc3MgPSAodThbMzJdKXsgMHg0YywgMHg4ZiwgMHhjNCwgMHhiMSwgMHhjNiwgMHhhYiwgMHg4OCwgMHhmYiwKKysJCSAgICAweDIxLCAweGYxLCAweDhmLCAweDZkLCAweDRjLCAweDgxLCAweDAyLCAweDQwLAorKwkJICAgIDB4ZDQsIDB4ZTksIDB4NDYsIDB4NTEsIDB4YmEsIDB4NDQsIDB4ZjcsIDB4YTIsCisrCQkgICAgMHhjOCwgMHg2MywgMHhjZSwgMHhjNywgMHhkYywgMHg1NiwgMHg2MCwgMHgyZCB9LAorKwkuc2VjcmV0X3NpemUgPSAzMiwKKysJLmJfcHVibGljX3NpemUgPSAzMiwKKysJLmV4cGVjdGVkX3NzX3NpemUgPSAzMiwKKysKKyt9LAorKy8qIHd5Y2hlcHJvb2YgLSBwdWJsaWMga2V5ID49IHAgKi8KKyt7CisrCS5zZWNyZXQgPSAodThbMzJdKXsgMHgxOCwgMHgxMywgMHhjMSwgMHgwYSwgMHg1YywgMHg3ZiwgMHgyMSwgMHhmOSwKKysJCSAgICAgMHg2ZSwgMHgxNywgMHhmMiwgMHg4OCwgMHhjMCwgMHhjYywgMHgzNywgMHg2MCwKKysJCSAgICAgMHg3YywgMHgwNCwgMHhjNSwgMHhmNSwgMHhhZSwgMHhhMiwgMHhkYiwgMHgxMywKKysJCSAgICAgMHg0ZiwgMHg5ZSwgMHgyZiwgMHhmYywgMHg2NiwgMHhiZCwgMHg5ZCwgMHhiOCB9LAorKwkuYl9wdWJsaWMgPSAodThbMzJdKXsgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCB9LAorKwkuZXhwZWN0ZWRfc3MgPSAodThbMzJdKXsgMHgxYywgMHhkMCwgMHhiMiwgMHg4MiwgMHg2NywgMHhkYywgMHg1NCwgMHgxYywKKysJCSAgICAweDY0LCAweDJkLCAweDZkLCAweDdkLCAweGNhLCAweDQ0LCAweGE4LCAweGIzLAorKwkJICAgIDB4OGEsIDB4NjMsIDB4NzMsIDB4NmUsIDB4ZWYsIDB4NWMsIDB4NGUsIDB4NjUsCisrCQkgICAgMHgwMSwgMHhmZiwgMHhiYiwgMHhiMSwgMHg3OCwgMHgwYywgMHgwMywgMHgzYyB9LAorKwkuc2VjcmV0X3NpemUgPSAzMiwKKysJLmJfcHVibGljX3NpemUgPSAzMiwKKysJLmV4cGVjdGVkX3NzX3NpemUgPSAzMiwKKysKKyt9LAorKy8qIHd5Y2hlcHJvb2YgLSBwdWJsaWMga2V5ID49IHAgKi8KKyt7CisrCS5zZWNyZXQgPSAodThbMzJdKXsgMHg3OCwgMHg1NywgMHhmYiwgMHg4MCwgMHg4NiwgMHg1MywgMHg2NCwgMHg1YSwKKysJCSAgICAgMHgwYiwgMHhlYiwgMHgxMywgMHg4YSwgMHg2NCwgMHhmNSwgMHhmNCwgMHhkNywKKysJCSAgICAgMHgzMywgMHhhNCwgMHg1ZSwgMHhhOCwgMHg0YywgMHgzYywgMHhkYSwgMHgxMSwKKysJCSAgICAgMHhhOSwgMHhjMCwgMHg2ZiwgMHg3ZSwgMHg3MSwgMHgzOSwgMHgxNCwgMHg5ZSB9LAorKwkuYl9wdWJsaWMgPSAodThbMzJdKXsgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCB9LAorKwkuZXhwZWN0ZWRfc3MgPSAodThbMzJdKXsgMHg4NywgMHg1NSwgMHhiZSwgMHgwMSwgMHhjNiwgMHgwYSwgMHg3ZSwgMHg4MiwKKysJCSAgICAweDVjLCAweGZmLCAweDNlLCAweDBlLCAweDc4LCAweGNiLCAweDNhLCAweGE0LAorKwkJICAgIDB4MzMsIDB4MzgsIDB4NjEsIDB4NTEsIDB4NmEsIDB4YTUsIDB4OWIsIDB4MWMsCisrCQkgICAgMHg1MSwgMHhhOCwgMHhiMiwgMHhhNSwgMHg0MywgMHhkZiwgMHhhOCwgMHgyMiB9LAorKwkuc2VjcmV0X3NpemUgPSAzMiwKKysJLmJfcHVibGljX3NpemUgPSAzMiwKKysJLmV4cGVjdGVkX3NzX3NpemUgPSAzMiwKKysKKyt9LAorKy8qIHd5Y2hlcHJvb2YgLSBwdWJsaWMga2V5ID49IHAgKi8KKyt7CisrCS5zZWNyZXQgPSAodThbMzJdKXsgMHhlMCwgMHgzYSwgMHhhOCwgMHg0MiwgMHhlMiwgMHhhYiwgMHhjNSwgMHg2ZSwKKysJCSAgICAgMHg4MSwgMHhlOCwgMHg3YiwgMHg4YiwgMHg5ZiwgMHg0MSwgMHg3YiwgMHgyYSwKKysJCSAgICAgMHgxZSwgMHg1OSwgMHgxMywgMHhjNywgMHgyMywgMHhlZSwgMHhkMiwgMHg4ZCwKKysJCSAgICAgMHg3NSwgMHgyZiwgMHg4ZCwgMHg0NywgMHhhNSwgMHg5ZiwgMHg0OSwgMHg4ZiB9LAorKwkuYl9wdWJsaWMgPSAodThbMzJdKXsgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCB9LAorKwkuZXhwZWN0ZWRfc3MgPSAodThbMzJdKXsgMHg1NCwgMHhjOSwgMHhhMSwgMHhlZCwgMHg5NSwgMHhlNSwgMHg0NiwgMHhkMiwKKysJCSAgICAweDc4LCAweDIyLCAweGEzLCAweDYwLCAweDkzLCAweDFkLCAweGRhLCAweDYwLAorKwkJICAgIDB4YTEsIDB4ZGYsIDB4MDQsIDB4OWQsIDB4YTYsIDB4ZjksIDB4MDQsIDB4MjUsCisrCQkgICAgMHgzYywgMHgwNiwgMHgxMiwgMHhiYiwgMHhkYywgMHgwOCwgMHg3NCwgMHg3NiB9LAorKwkuc2VjcmV0X3NpemUgPSAzMiwKKysJLmJfcHVibGljX3NpemUgPSAzMiwKKysJLmV4cGVjdGVkX3NzX3NpemUgPSAzMiwKKysKKyt9LAorKy8qIHd5Y2hlcHJvb2YgLSBwdWJsaWMga2V5ID49IHAgKi8KKyt7CisrCS5zZWNyZXQgPSAodThbMzJdKXsgMHhmOCwgMHhmNywgMHgwNywgMHhiNywgMHg5OSwgMHg5YiwgMHgxOCwgMHhjYiwKKysJCSAgICAgMHgwZCwgMHg2YiwgMHg5NiwgMHgxMiwgMHg0ZiwgMHgyMCwgMHg0NSwgMHg5NywKKysJCSAgICAgMHgyYywgMHhhMiwgMHg3NCwgMHhiZiwgMHhjMSwgMHg1NCwgMHhhZCwgMHgwYywKKysJCSAgICAgMHg4NywgMHgwMywgMHg4YywgMHgyNCwgMHhjNiwgMHhkMCwgMHhkNCwgMHhiMiB9LAorKwkuYl9wdWJsaWMgPSAodThbMzJdKXsgMHhkYSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9LAorKwkuZXhwZWN0ZWRfc3MgPSAodThbMzJdKXsgMHhjYywgMHgxZiwgMHg0MCwgMHhkNywgMHg0MywgMHhjZCwgMHhjMiwgMHgyMywKKysJCSAgICAweDBlLCAweDEwLCAweDQzLCAweGRhLCAweGJhLCAweDhiLCAweDc1LCAweGU4LAorKwkJICAgIDB4MTAsIDB4ZjEsIDB4ZmIsIDB4YWIsIDB4N2YsIDB4MjUsIDB4NTIsIDB4NjksCisrCQkgICAgMHhiZCwgMHg5ZSwgMHhiYiwgMHgyOSwgMHhlNiwgMHhiZiwgMHg0OSwgMHg0ZiB9LAorKwkuc2VjcmV0X3NpemUgPSAzMiwKKysJLmJfcHVibGljX3NpemUgPSAzMiwKKysJLmV4cGVjdGVkX3NzX3NpemUgPSAzMiwKKysKKyt9LAorKy8qIHd5Y2hlcHJvb2YgLSBwdWJsaWMga2V5ID49IHAgKi8KKyt7CisrCS5zZWNyZXQgPSAodThbMzJdKXsgMHhhMCwgMHgzNCwgMHhmNiwgMHg4NCwgMHhmYSwgMHg2MywgMHgxZSwgMHgxYSwKKysJCSAgICAgMHgzNCwgMHg4MSwgMHgxOCwgMHhjMSwgMHhjZSwgMHg0YywgMHg5OCwgMHgyMywKKysJCSAgICAgMHgxZiwgMHgyZCwgMHg5ZSwgMHhlYywgMHg5YiwgMHhhNSwgMHgzNiwgMHg1YiwKKysJCSAgICAgMHg0YSwgMHgwNSwgMHhkNiwgMHg5YSwgMHg3OCwgMHg1YiwgMHgwNywgMHg5NiB9LAorKwkuYl9wdWJsaWMgPSAodThbMzJdKXsgMHhkYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9LAorKwkuZXhwZWN0ZWRfc3MgPSAodThbMzJdKXsgMHg1NCwgMHg5OSwgMHg4ZSwgMHhlNCwgMHgzYSwgMHg1YiwgMHgwMCwgMHg3YiwKKysJCSAgICAweGY0LCAweDk5LCAweGYwLCAweDc4LCAweGU3LCAweDM2LCAweDUyLCAweDQ0LAorKwkJICAgIDB4MDAsIDB4YTgsIDB4YjUsIDB4YzcsIDB4ZTksIDB4YjksIDB4YjQsIDB4MzcsCisrCQkgICAgMHg3MSwgMHg3NCwgMHg4YywgMHg3YywgMHhkZiwgMHg4OCwgMHgwNCwgMHgxMiB9LAorKwkuc2VjcmV0X3NpemUgPSAzMiwKKysJLmJfcHVibGljX3NpemUgPSAzMiwKKysJLmV4cGVjdGVkX3NzX3NpemUgPSAzMiwKKysKKyt9LAorKy8qIHd5Y2hlcHJvb2YgLSBwdWJsaWMga2V5ID49IHAgKi8KKyt7CisrCS5zZWNyZXQgPSAodThbMzJdKXsgMHgzMCwgMHhiNiwgMHhjNiwgMHhhMCwgMHhmMiwgMHhmZiwgMHhhNiwgMHg4MCwKKysJCSAgICAgMHg3NiwgMHg4ZiwgMHg5OSwgMHgyYiwgMHhhOCwgMHg5ZSwgMHgxNSwgMHgyZCwKKysJCSAgICAgMHg1YiwgMHhjOSwgMHg4OSwgMHgzZCwgMHgzOCwgMHhjOSwgMHgxMSwgMHg5YiwKKysJCSAgICAgMHhlNCwgMHhmNywgMHg2NywgMHhiZiwgMHhhYiwgMHg2ZSwgMHgwYywgMHhhNSB9LAorKwkuYl9wdWJsaWMgPSAodThbMzJdKXsgMHhkYywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9LAorKwkuZXhwZWN0ZWRfc3MgPSAodThbMzJdKXsgMHhlYSwgMHhkOSwgMHhiMywgMHg4ZSwgMHhmZCwgMHhkNywgMHgyMywgMHg2MywKKysJCSAgICAweDc5LCAweDM0LCAweGU1LCAweDVhLCAweGI3LCAweDE3LCAweGE3LCAweGFlLAorKwkJICAgIDB4MDksIDB4ZWIsIDB4ODYsIDB4YTIsIDB4MWQsIDB4YzMsIDB4NmEsIDB4M2YsCisrCQkgICAgMHhlZSwgMHhiOCwgMHg4YiwgMHg3NSwgMHg5ZSwgMHgzOSwgMHgxZSwgMHgwOSB9LAorKwkuc2VjcmV0X3NpemUgPSAzMiwKKysJLmJfcHVibGljX3NpemUgPSAzMiwKKysJLmV4cGVjdGVkX3NzX3NpemUgPSAzMiwKKysKKyt9LAorKy8qIHd5Y2hlcHJvb2YgLSBwdWJsaWMga2V5ID49IHAgKi8KKyt7CisrCS5zZWNyZXQgPSAodThbMzJdKXsgMHg5MCwgMHgxYiwgMHg5ZCwgMHhjZiwgMHg4OCwgMHgxZSwgMHgwMSwgMHhlMCwKKysJCSAgICAgMHgyNywgMHg1NywgMHg1MCwgMHgzNSwgMHhkNCwgMHgwYiwgMHg0MywgMHhiZCwKKysJCSAgICAgMHhjMSwgMHhjNSwgMHgyNCwgMHgyZSwgMHgwMywgMHgwOCwgMHg0NywgMHg0OSwKKysJCSAgICAgMHg1YiwgMHgwYywgMHg3MiwgMHg4NiwgMHg0NiwgMHg5YiwgMHg2NSwgMHg5MSB9LAorKwkuYl9wdWJsaWMgPSAodThbMzJdKXsgMHhlYSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9LAorKwkuZXhwZWN0ZWRfc3MgPSAodThbMzJdKXsgMHg2MCwgMHgyZiwgMHhmNCwgMHgwNywgMHg4OSwgMHhiNSwgMHg0YiwgMHg0MSwKKysJCSAgICAweDgwLCAweDU5LCAweDE1LCAweGZlLCAweDJhLCAweDYyLCAweDIxLCAweGYwLAorKwkJICAgIDB4N2EsIDB4NTAsIDB4ZmYsIDB4YzIsIDB4YzMsIDB4ZmMsIDB4OTQsIDB4Y2YsCisrCQkgICAgMHg2MSwgMHhmMSwgMHgzZCwgMHg3OSwgMHgwNCwgMHhlOCwgMHg4ZSwgMHgwZSB9LAorKwkuc2VjcmV0X3NpemUgPSAzMiwKKysJLmJfcHVibGljX3NpemUgPSAzMiwKKysJLmV4cGVjdGVkX3NzX3NpemUgPSAzMiwKKysKKyt9LAorKy8qIHd5Y2hlcHJvb2YgLSBwdWJsaWMga2V5ID49IHAgKi8KKyt7CisrCS5zZWNyZXQgPSAodThbMzJdKXsgMHg4MCwgMHg0NiwgMHg2NywgMHg3YywgMHgyOCwgMHhmZCwgMHg4MiwgMHhjOSwKKysJCSAgICAgMHhhMSwgMHhiZCwgMHhiNywgMHgxYSwgMHgxYSwgMHgxYSwgMHgzNCwgMHhmYSwKKysJCSAgICAgMHhiYSwgMHgxMiwgMHgyNSwgMHhlMiwgMHg1MCwgMHg3ZiwgMHhlMywgMHhmNSwKKysJCSAgICAgMHg0ZCwgMHgxMCwgMHhiZCwgMHg1YiwgMHgwZCwgMHg4NiwgMHg1ZiwgMHg4ZSB9LAorKwkuYl9wdWJsaWMgPSAodThbMzJdKXsgMHhlYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9LAorKwkuZXhwZWN0ZWRfc3MgPSAodThbMzJdKXsgMHhlMCwgMHgwYSwgMHhlOCwgMHhiMSwgMHg0MywgMHg0NywgMHgxMiwgMHg0NywKKysJCSAgICAweGJhLCAweDI0LCAweGYxLCAweDJjLCAweDg4LCAweDU1LCAweDM2LCAweGMzLAorKwkJICAgIDB4Y2IsIDB4OTgsIDB4MWIsIDB4NTgsIDB4ZTEsIDB4ZTUsIDB4NmIsIDB4MmIsCisrCQkgICAgMHhhZiwgMHgzNSwgMHhjMSwgMHgyYSwgMHhlMSwgMHhmNywgMHg5YywgMHgyNiB9LAorKwkuc2VjcmV0X3NpemUgPSAzMiwKKysJLmJfcHVibGljX3NpemUgPSAzMiwKKysJLmV4cGVjdGVkX3NzX3NpemUgPSAzMiwKKysKKyt9LAorKy8qIHd5Y2hlcHJvb2YgLSBwdWJsaWMga2V5ID49IHAgKi8KKyt7CisrCS5zZWNyZXQgPSAodThbMzJdKXsgMHg2MCwgMHgyZiwgMHg3ZSwgMHgyZiwgMHg2OCwgMHhhOCwgMHg0NiwgMHhiOCwKKysJCSAgICAgMHgyYywgMHhjMiwgMHg2OSwgMHhiMSwgMHhkNCwgMHg4ZSwgMHg5MywgMHg5OCwKKysJCSAgICAgMHg4NiwgMHhhZSwgMHg1NCwgMHhmZCwgMHg2MywgMHg2YywgMHgxZiwgMHhlMCwKKysJCSAgICAgMHg3NCwgMHhkNywgMHgxMCwgMHgxMiwgMHg3ZCwgMHg0NywgMHgyNCwgMHg5MSB9LAorKwkuYl9wdWJsaWMgPSAodThbMzJdKXsgMHhlZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9LAorKwkuZXhwZWN0ZWRfc3MgPSAodThbMzJdKXsgMHg5OCwgMHhjYiwgMHg5YiwgMHg1MCwgMHhkZCwgMHgzZiwgMHhjMiwgMHhiMCwKKysJCSAgICAweGQ0LCAweGYyLCAweGQyLCAweGJmLCAweDdjLCAweDVjLCAweGZkLCAweGQxLAorKwkJICAgIDB4MGMsIDB4OGYsIDB4Y2QsIDB4MzEsIDB4ZmMsIDB4NDAsIDB4YWYsIDB4MWEsCisrCQkgICAgMHhkNCwgMHg0ZiwgMHg0NywgMHhjMSwgMHgzMSwgMHgzNywgMHg2MywgMHg2MiB9LAorKwkuc2VjcmV0X3NpemUgPSAzMiwKKysJLmJfcHVibGljX3NpemUgPSAzMiwKKysJLmV4cGVjdGVkX3NzX3NpemUgPSAzMiwKKysKKyt9LAorKy8qIHd5Y2hlcHJvb2YgLSBwdWJsaWMga2V5ID49IHAgKi8KKyt7CisrCS5zZWNyZXQgPSAodThbMzJdKXsgMHg2MCwgMHg4OCwgMHg3YiwgMHgzZCwgMHhjNywgMHgyNCwgMHg0MywgMHgwMiwKKysJCSAgICAgMHg2ZSwgMHhiZSwgMHhkYiwgMHhiYiwgMHhiNywgMHgwNiwgMHg2NSwgMHhmNCwKKysJCSAgICAgMHgyYiwgMHg4NywgMHhhZCwgMHhkMSwgMHg0NCwgMHgwZSwgMHg3NywgMHg2OCwKKysJCSAgICAgMHhmYiwgMHhkNywgMHhlOCwgMHhlMiwgMHhjZSwgMHg1ZiwgMHg2MywgMHg5ZCB9LAorKwkuYl9wdWJsaWMgPSAodThbMzJdKXsgMHhmMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9LAorKwkuZXhwZWN0ZWRfc3MgPSAodThbMzJdKXsgMHgzOCwgMHhkNiwgMHgzMCwgMHg0YywgMHg0YSwgMHg3ZSwgMHg2ZCwgMHg5ZiwKKysJCSAgICAweDc5LCAweDU5LCAweDMzLCAweDRmLCAweGI1LCAweDI0LCAweDViLCAweGQyLAorKwkJICAgIDB4YzcsIDB4NTQsIDB4NTIsIDB4NWQsIDB4NGMsIDB4OTEsIDB4ZGIsIDB4OTUsCisrCQkgICAgMHgwMiwgMHgwNiwgMHg5MiwgMHg2MiwgMHgzNCwgMHhjMSwgMHhmNiwgMHgzMyB9LAorKwkuc2VjcmV0X3NpemUgPSAzMiwKKysJLmJfcHVibGljX3NpemUgPSAzMiwKKysJLmV4cGVjdGVkX3NzX3NpemUgPSAzMiwKKysKKyt9LAorKy8qIHd5Y2hlcHJvb2YgLSBwdWJsaWMga2V5ID49IHAgKi8KKyt7CisrCS5zZWNyZXQgPSAodThbMzJdKXsgMHg3OCwgMHhkMywgMHgxZCwgMHhmYSwgMHg4NSwgMHg0NCwgMHg5NywgMHhkNywKKysJCSAgICAgMHgyZCwgMHg4ZCwgMHhlZiwgMHg4YSwgMHgxYiwgMHg3ZiwgMHhiMCwgMHgwNiwKKysJCSAgICAgMHhjZSwgMHhjMiwgMHhkOCwgMHhjNCwgMHg5MiwgMHg0NiwgMHg0NywgMHhjOSwKKysJCSAgICAgMHgzOCwgMHgxNCwgMHhhZSwgMHg1NiwgMHhmYSwgMHhlZCwgMHhhNCwgMHg5NSB9LAorKwkuYl9wdWJsaWMgPSAodThbMzJdKXsgMHhmMSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9LAorKwkuZXhwZWN0ZWRfc3MgPSAodThbMzJdKXsgMHg3OCwgMHg2YywgMHhkNSwgMHg0OSwgMHg5NiwgMHhmMCwgMHgxNCwgMHhhNSwKKysJCSAgICAweGEwLCAweDMxLCAweGVjLCAweDE0LCAweGRiLCAweDgxLCAweDJlLCAweGQwLAorKwkJICAgIDB4ODMsIDB4NTUsIDB4MDYsIDB4MWYsIDB4ZGIsIDB4NWQsIDB4ZTYsIDB4ODAsCisrCQkgICAgMHhhOCwgMHgwMCwgMHhhYywgMHg1MiwgMHgxZiwgMHgzMSwgMHg4ZSwgMHgyMyB9LAorKwkuc2VjcmV0X3NpemUgPSAzMiwKKysJLmJfcHVibGljX3NpemUgPSAzMiwKKysJLmV4cGVjdGVkX3NzX3NpemUgPSAzMiwKKysKKyt9LAorKy8qIHd5Y2hlcHJvb2YgLSBwdWJsaWMga2V5ID49IHAgKi8KKyt7CisrCS5zZWNyZXQgPSAodThbMzJdKXsgMHhjMCwgMHg0YywgMHg1YiwgMHhhZSwgMHhmYSwgMHg4MywgMHgwMiwgMHhkZCwKKysJCSAgICAgMHhkZSwgMHhkNiwgMHhhNCwgMHhiYiwgMHg5NSwgMHg3NywgMHg2MSwgMHhiNCwKKysJCSAgICAgMHhlYiwgMHg5NywgMHhhZSwgMHhmYSwgMHg0ZiwgMHhjMywgMHhiOCwgMHgwNCwKKysJCSAgICAgMHgzMCwgMHg4NSwgMHhmOSwgMHg2YSwgMHg1NiwgMHg1OSwgMHhiMywgMHhhNSB9LAorKwkuYl9wdWJsaWMgPSAodThbMzJdKXsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9LAorKwkuZXhwZWN0ZWRfc3MgPSAodThbMzJdKXsgMHgyOSwgMHhhZSwgMHg4YiwgMHhjNywgMHgzZSwgMHg5YiwgMHgxMCwgMHhhMCwKKysJCSAgICAweDhiLCAweDRmLCAweDY4LCAweDFjLCAweDQzLCAweGMzLCAweGUwLCAweGFjLAorKwkJICAgIDB4MWEsIDB4MTcsIDB4MWQsIDB4MzEsIDB4YjMsIDB4OGYsIDB4MWEsIDB4NDgsCisrCQkgICAgMHhlZiwgMHhiYSwgMHgyOSwgMHhhZSwgMHg2MywgMHg5ZSwgMHhhMSwgMHgzNCB9LAorKwkuc2VjcmV0X3NpemUgPSAzMiwKKysJLmJfcHVibGljX3NpemUgPSAzMiwKKysJLmV4cGVjdGVkX3NzX3NpemUgPSAzMiwKKysKKyt9LAorKy8qIHd5Y2hlcHJvb2YgLSBSRkMgNzc0OCAqLworK3sKKysJLnNlY3JldCA9ICh1OFszMl0peyAweGEwLCAweDQ2LCAweGUzLCAweDZiLCAweGYwLCAweDUyLCAweDdjLCAweDlkLAorKwkJICAgICAweDNiLCAweDE2LCAweDE1LCAweDRiLCAweDgyLCAweDQ2LCAweDVlLCAweGRkLAorKwkJICAgICAweDYyLCAweDE0LCAweDRjLCAweDBhLCAweGMxLCAweGZjLCAweDVhLCAweDE4LAorKwkJICAgICAweDUwLCAweDZhLCAweDIyLCAweDQ0LCAweGJhLCAweDQ0LCAweDlhLCAweDQ0IH0sCisrCS5iX3B1YmxpYyA9ICh1OFszMl0peyAweGU2LCAweGRiLCAweDY4LCAweDY3LCAweDU4LCAweDMwLCAweDMwLCAweGRiLAorKwkJICAgIDB4MzUsIDB4OTQsIDB4YzEsIDB4YTQsIDB4MjQsIDB4YjEsIDB4NWYsIDB4N2MsCisrCQkgICAgMHg3MiwgMHg2NiwgMHgyNCwgMHhlYywgMHgyNiwgMHhiMywgMHgzNSwgMHgzYiwKKysJCSAgICAweDEwLCAweGE5LCAweDAzLCAweGE2LCAweGQwLCAweGFiLCAweDFjLCAweDRjIH0sCisrCS5leHBlY3RlZF9zcyA9ICh1OFszMl0peyAweGMzLCAweGRhLCAweDU1LCAweDM3LCAweDlkLCAweGU5LCAweGM2LCAweDkwLAorKwkJICAgIDB4OGUsIDB4OTQsIDB4ZWEsIDB4NGQsIDB4ZjIsIDB4OGQsIDB4MDgsIDB4NGYsCisrCQkgICAgMHgzMiwgMHhlYywgMHhjZiwgMHgwMywgMHg0OSwgMHgxYywgMHg3MSwgMHhmNywKKysJCSAgICAweDU0LCAweGI0LCAweDA3LCAweDU1LCAweDc3LCAweGEyLCAweDg1LCAweDUyIH0sCisrCS5zZWNyZXRfc2l6ZSA9IDMyLAorKwkuYl9wdWJsaWNfc2l6ZSA9IDMyLAorKwkuZXhwZWN0ZWRfc3Nfc2l6ZSA9IDMyLAorKworK30sCisrLyogd3ljaGVwcm9vZiAtIFJGQyA3NzQ4ICovCisreworKwkuc2VjcmV0ID0gKHU4WzMyXSl7IDB4NDgsIDB4NjYsIDB4ZTksIDB4ZDQsIDB4ZDEsIDB4YjQsIDB4NjcsIDB4M2MsCisrCQkgICAgIDB4NWEsIDB4ZDIsIDB4MjYsIDB4OTEsIDB4OTUsIDB4N2QsIDB4NmEsIDB4ZjUsCisrCQkgICAgIDB4YzEsIDB4MWIsIDB4NjQsIDB4MjEsIDB4ZTAsIDB4ZWEsIDB4MDEsIDB4ZDQsCisrCQkgICAgIDB4MmMsIDB4YTQsIDB4MTYsIDB4OWUsIDB4NzksIDB4MTgsIDB4YmEsIDB4NGQgfSwKKysJLmJfcHVibGljID0gKHU4WzMyXSl7IDB4ZTUsIDB4MjEsIDB4MGYsIDB4MTIsIDB4NzgsIDB4NjgsIDB4MTEsIDB4ZDMsCisrCQkgICAgMHhmNCwgMHhiNywgMHg5NSwgMHg5ZCwgMHgwNSwgMHgzOCwgMHhhZSwgMHgyYywKKysJCSAgICAweDMxLCAweGRiLCAweGU3LCAweDEwLCAweDZmLCAweGMwLCAweDNjLCAweDNlLAorKwkJICAgIDB4ZmMsIDB4NGMsIDB4ZDUsIDB4NDksIDB4YzcsIDB4MTUsIDB4YTQsIDB4MTMgfSwKKysJLmV4cGVjdGVkX3NzID0gKHU4WzMyXSl7IDB4OTUsIDB4Y2IsIDB4ZGUsIDB4OTQsIDB4NzYsIDB4ZTgsIDB4OTAsIDB4N2QsCisrCQkgICAgMHg3YSwgMHhhZCwgMHhlNCwgMHg1YywgMHhiNCwgMHhiOCwgMHg3MywgMHhmOCwKKysJCSAgICAweDhiLCAweDU5LCAweDVhLCAweDY4LCAweDc5LCAweDlmLCAweGExLCAweDUyLAorKwkJICAgIDB4ZTYsIDB4ZjgsIDB4ZjcsIDB4NjQsIDB4N2EsIDB4YWMsIDB4NzksIDB4NTcgfSwKKysJLnNlY3JldF9zaXplID0gMzIsCisrCS5iX3B1YmxpY19zaXplID0gMzIsCisrCS5leHBlY3RlZF9zc19zaXplID0gMzIsCisrCisrfSwKKysvKiB3eWNoZXByb29mIC0gZWRnZSBjYXNlIGZvciBzaGFyZWQgc2VjcmV0ICovCisreworKwkuc2VjcmV0ID0gKHU4WzMyXSl7IDB4YTAsIDB4YTQsIDB4ZjEsIDB4MzAsIDB4YjksIDB4OGEsIDB4NWIsIDB4ZTQsCisrCQkgICAgIDB4YjEsIDB4Y2UsIDB4ZGIsIDB4N2MsIDB4YjgsIDB4NTUsIDB4ODQsIDB4YTMsCisrCQkgICAgIDB4NTIsIDB4MGUsIDB4MTQsIDB4MmQsIDB4NDcsIDB4NGQsIDB4YzksIDB4Y2MsCisrCQkgICAgIDB4YjksIDB4MDksIDB4YTAsIDB4NzMsIDB4YTksIDB4NzYsIDB4YmYsIDB4NjMgfSwKKysJLmJfcHVibGljID0gKHU4WzMyXSl7IDB4MGEsIDB4YjQsIDB4ZTcsIDB4NjMsIDB4ODAsIDB4ZDgsIDB4NGQsIDB4ZGUsCisrCQkgICAgMHg0ZiwgMHg2OCwgMHgzMywgMHhjNSwgMHg4ZiwgMHgyYSwgMHg5ZiwgMHhiOCwKKysJCSAgICAweGY4LCAweDNiLCAweGIwLCAweDE2LCAweDliLCAweDE3LCAweDJiLCAweGU0LAorKwkJICAgIDB4YjYsIDB4ZTAsIDB4NTksIDB4MjgsIDB4ODcsIDB4NzQsIDB4MWEsIDB4MzYgfSwKKysJLmV4cGVjdGVkX3NzID0gKHU4WzMyXSl7IDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKysJLnNlY3JldF9zaXplID0gMzIsCisrCS5iX3B1YmxpY19zaXplID0gMzIsCisrCS5leHBlY3RlZF9zc19zaXplID0gMzIsCisrCisrfSwKKysvKiB3eWNoZXByb29mIC0gZWRnZSBjYXNlIGZvciBzaGFyZWQgc2VjcmV0ICovCisreworKwkuc2VjcmV0ID0gKHU4WzMyXSl7IDB4YTAsIDB4YTQsIDB4ZjEsIDB4MzAsIDB4YjksIDB4OGEsIDB4NWIsIDB4ZTQsCisrCQkgICAgIDB4YjEsIDB4Y2UsIDB4ZGIsIDB4N2MsIDB4YjgsIDB4NTUsIDB4ODQsIDB4YTMsCisrCQkgICAgIDB4NTIsIDB4MGUsIDB4MTQsIDB4MmQsIDB4NDcsIDB4NGQsIDB4YzksIDB4Y2MsCisrCQkgICAgIDB4YjksIDB4MDksIDB4YTAsIDB4NzMsIDB4YTksIDB4NzYsIDB4YmYsIDB4NjMgfSwKKysJLmJfcHVibGljID0gKHU4WzMyXSl7IDB4ODksIDB4ZTEsIDB4MGQsIDB4NTcsIDB4MDEsIDB4YjQsIDB4MzMsIDB4N2QsCisrCQkgICAgMHgyZCwgMHgwMywgMHgyMSwgMHg4MSwgMHg1MywgMHg4YiwgMHgxMCwgMHg2NCwKKysJCSAgICAweGJkLCAweDQwLCAweDg0LCAweDQwLCAweDFjLCAweGVjLCAweGExLCAweGZkLAorKwkJICAgIDB4MTIsIDB4NjYsIDB4M2EsIDB4MTksIDB4NTksIDB4MzgsIDB4ODAsIDB4MDAgfSwKKysJLmV4cGVjdGVkX3NzID0gKHU4WzMyXSl7IDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKysJLnNlY3JldF9zaXplID0gMzIsCisrCS5iX3B1YmxpY19zaXplID0gMzIsCisrCS5leHBlY3RlZF9zc19zaXplID0gMzIsCisrCisrfSwKKysvKiB3eWNoZXByb29mIC0gZWRnZSBjYXNlIGZvciBzaGFyZWQgc2VjcmV0ICovCisreworKwkuc2VjcmV0ID0gKHU4WzMyXSl7IDB4YTAsIDB4YTQsIDB4ZjEsIDB4MzAsIDB4YjksIDB4OGEsIDB4NWIsIDB4ZTQsCisrCQkgICAgIDB4YjEsIDB4Y2UsIDB4ZGIsIDB4N2MsIDB4YjgsIDB4NTUsIDB4ODQsIDB4YTMsCisrCQkgICAgIDB4NTIsIDB4MGUsIDB4MTQsIDB4MmQsIDB4NDcsIDB4NGQsIDB4YzksIDB4Y2MsCisrCQkgICAgIDB4YjksIDB4MDksIDB4YTAsIDB4NzMsIDB4YTksIDB4NzYsIDB4YmYsIDB4NjMgfSwKKysJLmJfcHVibGljID0gKHU4WzMyXSl7IDB4MmIsIDB4NTUsIDB4ZDMsIDB4YWEsIDB4NGEsIDB4OGYsIDB4ODAsIDB4YzgsCisrCQkgICAgMHhjMCwgMHhiMiwgMHhhZSwgMHg1ZiwgMHg5MywgMHgzZSwgMHg4NSwgMHhhZiwKKysJCSAgICAweDQ5LCAweGJlLCAweGFjLCAweDM2LCAweGMyLCAweGZhLCAweDczLCAweDk0LAorKwkJICAgIDB4YmEsIDB4YjcsIDB4NmMsIDB4ODksIDB4MzMsIDB4ZjgsIDB4ZjgsIDB4MWQgfSwKKysJLmV4cGVjdGVkX3NzID0gKHU4WzMyXSl7IDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKysJLnNlY3JldF9zaXplID0gMzIsCisrCS5iX3B1YmxpY19zaXplID0gMzIsCisrCS5leHBlY3RlZF9zc19zaXplID0gMzIsCisrCisrfSwKKysvKiB3eWNoZXByb29mIC0gZWRnZSBjYXNlIGZvciBzaGFyZWQgc2VjcmV0ICovCisreworKwkuc2VjcmV0ID0gKHU4WzMyXSl7IDB4YTAsIDB4YTQsIDB4ZjEsIDB4MzAsIDB4YjksIDB4OGEsIDB4NWIsIDB4ZTQsCisrCQkgICAgIDB4YjEsIDB4Y2UsIDB4ZGIsIDB4N2MsIDB4YjgsIDB4NTUsIDB4ODQsIDB4YTMsCisrCQkgICAgIDB4NTIsIDB4MGUsIDB4MTQsIDB4MmQsIDB4NDcsIDB4NGQsIDB4YzksIDB4Y2MsCisrCQkgICAgIDB4YjksIDB4MDksIDB4YTAsIDB4NzMsIDB4YTksIDB4NzYsIDB4YmYsIDB4NjMgfSwKKysJLmJfcHVibGljID0gKHU4WzMyXSl7IDB4NjMsIDB4ZTUsIDB4YjEsIDB4ZmUsIDB4OTYsIDB4MDEsIDB4ZmUsIDB4ODQsCisrCQkgICAgMHgzOCwgMHg1ZCwgMHg4OCwgMHg2NiwgMHhiMCwgMHg0MiwgMHgxMiwgMHg2MiwKKysJCSAgICAweGY3LCAweDhmLCAweGJmLCAweGE1LCAweGFmLCAweGY5LCAweDU4LCAweDVlLAorKwkJICAgIDB4NjIsIDB4NjYsIDB4NzksIDB4YjEsIDB4ODUsIDB4NDcsIDB4ZDksIDB4NTkgfSwKKysJLmV4cGVjdGVkX3NzID0gKHU4WzMyXSl7IDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4M2YgfSwKKysJLnNlY3JldF9zaXplID0gMzIsCisrCS5iX3B1YmxpY19zaXplID0gMzIsCisrCS5leHBlY3RlZF9zc19zaXplID0gMzIsCisrCisrfSwKKysvKiB3eWNoZXByb29mIC0gZWRnZSBjYXNlIGZvciBzaGFyZWQgc2VjcmV0ICovCisreworKwkuc2VjcmV0ID0gKHU4WzMyXSl7IDB4YTAsIDB4YTQsIDB4ZjEsIDB4MzAsIDB4YjksIDB4OGEsIDB4NWIsIDB4ZTQsCisrCQkgICAgIDB4YjEsIDB4Y2UsIDB4ZGIsIDB4N2MsIDB4YjgsIDB4NTUsIDB4ODQsIDB4YTMsCisrCQkgICAgIDB4NTIsIDB4MGUsIDB4MTQsIDB4MmQsIDB4NDcsIDB4NGQsIDB4YzksIDB4Y2MsCisrCQkgICAgIDB4YjksIDB4MDksIDB4YTAsIDB4NzMsIDB4YTksIDB4NzYsIDB4YmYsIDB4NjMgfSwKKysJLmJfcHVibGljID0gKHU4WzMyXSl7IDB4ZTQsIDB4MjgsIDB4ZjMsIDB4ZGEsIDB4YzEsIDB4NzgsIDB4MDksIDB4ZjgsCisrCQkgICAgMHgyNywgMHhhNSwgMHgyMiwgMHhjZSwgMHgzMiwgMHgzNSwgMHg1MCwgMHg1OCwKKysJCSAgICAweGQwLCAweDczLCAweDY5LCAweDM2LCAweDRhLCAweGE3LCAweDg5LCAweDAyLAorKwkJICAgIDB4ZWUsIDB4MTAsIDB4MTMsIDB4OWIsIDB4OWYsIDB4OWQsIDB4ZDYsIDB4NTMgfSwKKysJLmV4cGVjdGVkX3NzID0gKHU4WzMyXSl7IDB4ZmMsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4M2YgfSwKKysJLnNlY3JldF9zaXplID0gMzIsCisrCS5iX3B1YmxpY19zaXplID0gMzIsCisrCS5leHBlY3RlZF9zc19zaXplID0gMzIsCisrCisrfSwKKysvKiB3eWNoZXByb29mIC0gZWRnZSBjYXNlIGZvciBzaGFyZWQgc2VjcmV0ICovCisreworKwkuc2VjcmV0ID0gKHU4WzMyXSl7IDB4YTAsIDB4YTQsIDB4ZjEsIDB4MzAsIDB4YjksIDB4OGEsIDB4NWIsIDB4ZTQsCisrCQkgICAgIDB4YjEsIDB4Y2UsIDB4ZGIsIDB4N2MsIDB4YjgsIDB4NTUsIDB4ODQsIDB4YTMsCisrCQkgICAgIDB4NTIsIDB4MGUsIDB4MTQsIDB4MmQsIDB4NDcsIDB4NGQsIDB4YzksIDB4Y2MsCisrCQkgICAgIDB4YjksIDB4MDksIDB4YTAsIDB4NzMsIDB4YTksIDB4NzYsIDB4YmYsIDB4NjMgfSwKKysJLmJfcHVibGljID0gKHU4WzMyXSl7IDB4YjMsIDB4YjUsIDB4MGUsIDB4M2UsIDB4ZDMsIDB4YTQsIDB4MDcsIDB4YjksCisrCQkgICAgMHg1ZCwgMHhlOSwgMHg0MiwgMHhlZiwgMHg3NCwgMHg1NywgMHg1YiwgMHg1YSwKKysJCSAgICAweGI4LCAweGExLCAweDBjLCAweDA5LCAweGVlLCAweDEwLCAweDM1LCAweDQ0LAorKwkJICAgIDB4ZDYsIDB4MGIsIDB4ZGYsIDB4ZWQsIDB4ODEsIDB4MzgsIDB4YWIsIDB4MmIgfSwKKysJLmV4cGVjdGVkX3NzID0gKHU4WzMyXSl7IDB4ZjksIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4M2YgfSwKKysJLnNlY3JldF9zaXplID0gMzIsCisrCS5iX3B1YmxpY19zaXplID0gMzIsCisrCS5leHBlY3RlZF9zc19zaXplID0gMzIsCisrCisrfSwKKysvKiB3eWNoZXByb29mIC0gZWRnZSBjYXNlIGZvciBzaGFyZWQgc2VjcmV0ICovCisreworKwkuc2VjcmV0ID0gKHU4WzMyXSl7IDB4YTAsIDB4YTQsIDB4ZjEsIDB4MzAsIDB4YjksIDB4OGEsIDB4NWIsIDB4ZTQsCisrCQkgICAgIDB4YjEsIDB4Y2UsIDB4ZGIsIDB4N2MsIDB4YjgsIDB4NTUsIDB4ODQsIDB4YTMsCisrCQkgICAgIDB4NTIsIDB4MGUsIDB4MTQsIDB4MmQsIDB4NDcsIDB4NGQsIDB4YzksIDB4Y2MsCisrCQkgICAgIDB4YjksIDB4MDksIDB4YTAsIDB4NzMsIDB4YTksIDB4NzYsIDB4YmYsIDB4NjMgfSwKKysJLmJfcHVibGljID0gKHU4WzMyXSl7IDB4MjEsIDB4M2YsIDB4ZmYsIDB4ZTksIDB4M2QsIDB4NWUsIDB4YTgsIDB4Y2QsCisrCQkgICAgMHgyNCwgMHgyZSwgMHg0NiwgMHgyOCwgMHg0NCwgMHgwMiwgMHg5OSwgMHgyMiwKKysJCSAgICAweGM0LCAweDNjLCAweDc3LCAweGM5LCAweGUzLCAweGU0LCAweDJmLCAweDU2LAorKwkJICAgIDB4MmYsIDB4NDgsIDB4NWQsIDB4MjQsIDB4YzUsIDB4MDEsIDB4YTIsIDB4MGIgfSwKKysJLmV4cGVjdGVkX3NzID0gKHU4WzMyXSl7IDB4ZjMsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4M2YgfSwKKysJLnNlY3JldF9zaXplID0gMzIsCisrCS5iX3B1YmxpY19zaXplID0gMzIsCisrCS5leHBlY3RlZF9zc19zaXplID0gMzIsCisrCisrfSwKKysvKiB3eWNoZXByb29mIC0gZWRnZSBjYXNlIGZvciBzaGFyZWQgc2VjcmV0ICovCisreworKwkuc2VjcmV0ID0gKHU4WzMyXSl7IDB4YTAsIDB4YTQsIDB4ZjEsIDB4MzAsIDB4YjksIDB4OGEsIDB4NWIsIDB4ZTQsCisrCQkgICAgIDB4YjEsIDB4Y2UsIDB4ZGIsIDB4N2MsIDB4YjgsIDB4NTUsIDB4ODQsIDB4YTMsCisrCQkgICAgIDB4NTIsIDB4MGUsIDB4MTQsIDB4MmQsIDB4NDcsIDB4NGQsIDB4YzksIDB4Y2MsCisrCQkgICAgIDB4YjksIDB4MDksIDB4YTAsIDB4NzMsIDB4YTksIDB4NzYsIDB4YmYsIDB4NjMgfSwKKysJLmJfcHVibGljID0gKHU4WzMyXSl7IDB4OTEsIDB4YjIsIDB4MzIsIDB4YTEsIDB4NzgsIDB4YjMsIDB4Y2QsIDB4NTMsCisrCQkgICAgMHgwOSwgMHgzMiwgMHg0NCwgMHgxZSwgMHg2MSwgMHgzOSwgMHg0MSwgMHg4ZiwKKysJCSAgICAweDcyLCAweDE3LCAweDIyLCAweDkyLCAweGYxLCAweGRhLCAweDRjLCAweDE4LAorKwkJICAgIDB4MzQsIDB4ZmMsIDB4NWUsIDB4YmYsIDB4ZWYsIDB4YjUsIDB4MWUsIDB4M2YgfSwKKysJLmV4cGVjdGVkX3NzID0gKHU4WzMyXSl7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDMgfSwKKysJLnNlY3JldF9zaXplID0gMzIsCisrCS5iX3B1YmxpY19zaXplID0gMzIsCisrCS5leHBlY3RlZF9zc19zaXplID0gMzIsCisrCisrfSwKKysvKiB3eWNoZXByb29mIC0gZWRnZSBjYXNlIGZvciBzaGFyZWQgc2VjcmV0ICovCisreworKwkuc2VjcmV0ID0gKHU4WzMyXSl7IDB4YTAsIDB4YTQsIDB4ZjEsIDB4MzAsIDB4YjksIDB4OGEsIDB4NWIsIDB4ZTQsCisrCQkgICAgIDB4YjEsIDB4Y2UsIDB4ZGIsIDB4N2MsIDB4YjgsIDB4NTUsIDB4ODQsIDB4YTMsCisrCQkgICAgIDB4NTIsIDB4MGUsIDB4MTQsIDB4MmQsIDB4NDcsIDB4NGQsIDB4YzksIDB4Y2MsCisrCQkgICAgIDB4YjksIDB4MDksIDB4YTAsIDB4NzMsIDB4YTksIDB4NzYsIDB4YmYsIDB4NjMgfSwKKysJLmJfcHVibGljID0gKHU4WzMyXSl7IDB4MDQsIDB4NWMsIDB4NmUsIDB4MTEsIDB4YzUsIDB4ZDMsIDB4MzIsIDB4NTUsCisrCQkgICAgMHg2YywgMHg3OCwgMHgyMiwgMHhmZSwgMHg5NCwgMHhlYiwgMHhmOCwgMHg5YiwKKysJCSAgICAweDU2LCAweGEzLCAweDg3LCAweDhkLCAweGMyLCAweDdjLCAweGEwLCAweDc5LAorKwkJICAgIDB4MTAsIDB4MzAsIDB4NTgsIDB4ODQsIDB4OWYsIDB4YWIsIDB4Y2IsIDB4NGYgfSwKKysJLmV4cGVjdGVkX3NzID0gKHU4WzMyXSl7IDB4ZTUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YgfSwKKysJLnNlY3JldF9zaXplID0gMzIsCisrCS5iX3B1YmxpY19zaXplID0gMzIsCisrCS5leHBlY3RlZF9zc19zaXplID0gMzIsCisrCisrfSwKKysvKiB3eWNoZXByb29mIC0gZWRnZSBjYXNlIGZvciBzaGFyZWQgc2VjcmV0ICovCisreworKwkuc2VjcmV0ID0gKHU4WzMyXSl7IDB4YTAsIDB4YTQsIDB4ZjEsIDB4MzAsIDB4YjksIDB4OGEsIDB4NWIsIDB4ZTQsCisrCQkgICAgIDB4YjEsIDB4Y2UsIDB4ZGIsIDB4N2MsIDB4YjgsIDB4NTUsIDB4ODQsIDB4YTMsCisrCQkgICAgIDB4NTIsIDB4MGUsIDB4MTQsIDB4MmQsIDB4NDcsIDB4NGQsIDB4YzksIDB4Y2MsCisrCQkgICAgIDB4YjksIDB4MDksIDB4YTAsIDB4NzMsIDB4YTksIDB4NzYsIDB4YmYsIDB4NjMgfSwKKysJLmJfcHVibGljID0gKHU4WzMyXSl7IDB4MWMsIDB4YTIsIDB4MTksIDB4MGIsIDB4NzEsIDB4MTYsIDB4MzUsIDB4MzksCisrCQkgICAgMHgwNiwgMHgzYywgMHgzNSwgMHg3NywgMHgzYiwgMHhkYSwgMHgwYywgMHg5YywKKysJCSAgICAweDkyLCAweDhlLCAweDkxLCAweDM2LCAweGYwLCAweDYyLCAweDBhLCAweGViLAorKwkJICAgIDB4MDksIDB4M2YsIDB4MDksIDB4OTEsIDB4OTcsIDB4YjcsIDB4ZjcsIDB4NGUgfSwKKysJLmV4cGVjdGVkX3NzID0gKHU4WzMyXSl7IDB4ZTMsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YgfSwKKysJLnNlY3JldF9zaXplID0gMzIsCisrCS5iX3B1YmxpY19zaXplID0gMzIsCisrCS5leHBlY3RlZF9zc19zaXplID0gMzIsCisrCisrfSwKKysvKiB3eWNoZXByb29mIC0gZWRnZSBjYXNlIGZvciBzaGFyZWQgc2VjcmV0ICovCisreworKwkuc2VjcmV0ID0gKHU4WzMyXSl7IDB4YTAsIDB4YTQsIDB4ZjEsIDB4MzAsIDB4YjksIDB4OGEsIDB4NWIsIDB4ZTQsCisrCQkgICAgIDB4YjEsIDB4Y2UsIDB4ZGIsIDB4N2MsIDB4YjgsIDB4NTUsIDB4ODQsIDB4YTMsCisrCQkgICAgIDB4NTIsIDB4MGUsIDB4MTQsIDB4MmQsIDB4NDcsIDB4NGQsIDB4YzksIDB4Y2MsCisrCQkgICAgIDB4YjksIDB4MDksIDB4YTAsIDB4NzMsIDB4YTksIDB4NzYsIDB4YmYsIDB4NjMgfSwKKysJLmJfcHVibGljID0gKHU4WzMyXSl7IDB4ZjcsIDB4NmUsIDB4OTAsIDB4MTAsIDB4YWMsIDB4MzMsIDB4YzUsIDB4MDQsCisrCQkgICAgMHgzYiwgMHgyZCwgMHgzYiwgMHg3NiwgMHhhOCwgMHg0MiwgMHgxNywgMHgxMCwKKysJCSAgICAweDAwLCAweGM0LCAweDkxLCAweDYyLCAweDIyLCAweGU5LCAweGU4LCAweDU4LAorKwkJICAgIDB4OTcsIDB4YTAsIDB4YWUsIDB4YzcsIDB4ZjYsIDB4MzUsIDB4MGIsIDB4M2MgfSwKKysJLmV4cGVjdGVkX3NzID0gKHU4WzMyXSl7IDB4ZGQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YgfSwKKysJLnNlY3JldF9zaXplID0gMzIsCisrCS5iX3B1YmxpY19zaXplID0gMzIsCisrCS5leHBlY3RlZF9zc19zaXplID0gMzIsCisrCisrfSwKKysvKiB3eWNoZXByb29mIC0gZWRnZSBjYXNlIGZvciBzaGFyZWQgc2VjcmV0ICovCisreworKwkuc2VjcmV0ID0gKHU4WzMyXSl7IDB4YTAsIDB4YTQsIDB4ZjEsIDB4MzAsIDB4YjksIDB4OGEsIDB4NWIsIDB4ZTQsCisrCQkgICAgIDB4YjEsIDB4Y2UsIDB4ZGIsIDB4N2MsIDB4YjgsIDB4NTUsIDB4ODQsIDB4YTMsCisrCQkgICAgIDB4NTIsIDB4MGUsIDB4MTQsIDB4MmQsIDB4NDcsIDB4NGQsIDB4YzksIDB4Y2MsCisrCQkgICAgIDB4YjksIDB4MDksIDB4YTAsIDB4NzMsIDB4YTksIDB4NzYsIDB4YmYsIDB4NjMgfSwKKysJLmJfcHVibGljID0gKHU4WzMyXSl7IDB4YmIsIDB4NzIsIDB4NjgsIDB4OGQsIDB4OGYsIDB4OGEsIDB4YTcsIDB4YTMsCisrCQkgICAgMHg5YywgMHhkNiwgMHgwNiwgMHgwYywgMHhkNSwgMHhjOCwgMHgwOSwgMHgzYywKKysJCSAgICAweGRlLCAweGM2LCAweGZlLCAweDM0LCAweDE5LCAweDM3LCAweGMzLCAweDg4LAorKwkJICAgIDB4NmEsIDB4OTksIDB4MzQsIDB4NmMsIDB4ZDAsIDB4N2YsIDB4YWEsIDB4NTUgfSwKKysJLmV4cGVjdGVkX3NzID0gKHU4WzMyXSl7IDB4ZGIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YgfSwKKysJLnNlY3JldF9zaXplID0gMzIsCisrCS5iX3B1YmxpY19zaXplID0gMzIsCisrCS5leHBlY3RlZF9zc19zaXplID0gMzIsCisrCisrfSwKKysvKiB3eWNoZXByb29mIC0gZWRnZSBjYXNlIGZvciBzaGFyZWQgc2VjcmV0ICovCisreworKwkuc2VjcmV0ID0gKHU4WzMyXSl7IDB4YTAsIDB4YTQsIDB4ZjEsIDB4MzAsIDB4YjksIDB4OGEsIDB4NWIsIDB4ZTQsCisrCQkgICAgIDB4YjEsIDB4Y2UsIDB4ZGIsIDB4N2MsIDB4YjgsIDB4NTUsIDB4ODQsIDB4YTMsCisrCQkgICAgIDB4NTIsIDB4MGUsIDB4MTQsIDB4MmQsIDB4NDcsIDB4NGQsIDB4YzksIDB4Y2MsCisrCQkgICAgIDB4YjksIDB4MDksIDB4YTAsIDB4NzMsIDB4YTksIDB4NzYsIDB4YmYsIDB4NjMgfSwKKysJLmJfcHVibGljID0gKHU4WzMyXSl7IDB4ODgsIDB4ZmQsIDB4ZGUsIDB4YTEsIDB4OTMsIDB4MzksIDB4MWMsIDB4NmEsCisrCQkgICAgMHg1OSwgMHgzMywgMHhlZiwgMHg5YiwgMHg3MSwgMHg5MCwgMHgxNSwgMHg0OSwKKysJCSAgICAweDQ0LCAweDcyLCAweDA1LCAweGFhLCAweGU5LCAweGRhLCAweDkyLCAweDhhLAorKwkJICAgIDB4NmIsIDB4OTEsIDB4YTMsIDB4NTIsIDB4YmEsIDB4MTAsIDB4ZjQsIDB4MWYgfSwKKysJLmV4cGVjdGVkX3NzID0gKHU4WzMyXSl7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIgfSwKKysJLnNlY3JldF9zaXplID0gMzIsCisrCS5iX3B1YmxpY19zaXplID0gMzIsCisrCS5leHBlY3RlZF9zc19zaXplID0gMzIsCisrCisrfSwKKysvKiB3eWNoZXByb29mIC0gZWRnZSBjYXNlIGZvciBzaGFyZWQgc2VjcmV0ICovCisreworKwkuc2VjcmV0ID0gKHU4WzMyXSl7IDB4YTAsIDB4YTQsIDB4ZjEsIDB4MzAsIDB4YjksIDB4OGEsIDB4NWIsIDB4ZTQsCisrCQkgICAgIDB4YjEsIDB4Y2UsIDB4ZGIsIDB4N2MsIDB4YjgsIDB4NTUsIDB4ODQsIDB4YTMsCisrCQkgICAgIDB4NTIsIDB4MGUsIDB4MTQsIDB4MmQsIDB4NDcsIDB4NGQsIDB4YzksIDB4Y2MsCisrCQkgICAgIDB4YjksIDB4MDksIDB4YTAsIDB4NzMsIDB4YTksIDB4NzYsIDB4YmYsIDB4NjMgfSwKKysJLmJfcHVibGljID0gKHU4WzMyXSl7IDB4MzAsIDB4M2IsIDB4MzksIDB4MmYsIDB4MTUsIDB4MzEsIDB4MTYsIDB4Y2EsCisrCQkgICAgMHhkOSwgMHhjYywgMHg2OCwgMHgyYSwgMHgwMCwgMHhjYywgMHhjNCwgMHg0YywKKysJCSAgICAweDk1LCAweGZmLCAweDBkLCAweDNiLCAweGJlLCAweDU2LCAweDhiLCAweGViLAorKwkJICAgIDB4NmMsIDB4NGUsIDB4NzMsIDB4OWIsIDB4YWYsIDB4ZGMsIDB4MmMsIDB4NjggfSwKKysJLmV4cGVjdGVkX3NzID0gKHU4WzMyXSl7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAgfSwKKysJLnNlY3JldF9zaXplID0gMzIsCisrCS5iX3B1YmxpY19zaXplID0gMzIsCisrCS5leHBlY3RlZF9zc19zaXplID0gMzIsCisrCisrfSwKKysvKiB3eWNoZXByb29mIC0gY2hlY2tpbmcgZm9yIG92ZXJmbG93ICovCisreworKwkuc2VjcmV0ID0gKHU4WzMyXSl7IDB4YzgsIDB4MTcsIDB4MjQsIDB4NzAsIDB4NDAsIDB4MDAsIDB4YjIsIDB4NmQsCisrCQkgICAgIDB4MzEsIDB4NzAsIDB4M2MsIDB4YzksIDB4N2UsIDB4M2EsIDB4MzcsIDB4OGQsCisrCQkgICAgIDB4NTYsIDB4ZmEsIDB4ZDgsIDB4MjEsIDB4OTMsIDB4NjEsIDB4YzgsIDB4OGMsCisrCQkgICAgIDB4Y2EsIDB4OGIsIDB4ZDcsIDB4YzUsIDB4NzEsIDB4OWIsIDB4MTIsIDB4YjIgfSwKKysJLmJfcHVibGljID0gKHU4WzMyXSl7IDB4ZmQsIDB4MzAsIDB4MGEsIDB4ZWIsIDB4NDAsIDB4ZTEsIDB4ZmEsIDB4NTgsCisrCQkgICAgMHgyNSwgMHgxOCwgMHg0MSwgMHgyYiwgMHg0OSwgMHhiMiwgMHgwOCwgMHhhNywKKysJCSAgICAweDg0LCAweDJiLCAweDFlLCAweDFmLCAweDA1LCAweDZhLCAweDA0LCAweDAxLAorKwkJICAgIDB4NzgsIDB4ZWEsIDB4NDEsIDB4NDEsIDB4NTMsIDB4NGYsIDB4NjUsIDB4MmQgfSwKKysJLmV4cGVjdGVkX3NzID0gKHU4WzMyXSl7IDB4YjcsIDB4MzQsIDB4MTAsIDB4NWQsIDB4YzIsIDB4NTcsIDB4NTgsIDB4NWQsCisrCQkgICAgMHg3MywgMHhiNSwgMHg2NiwgMHhjYywgMHhiNywgMHg2ZiwgMHgwNiwgMHgyNywKKysJCSAgICAweDk1LCAweGNjLCAweGJlLCAweGM4LCAweDkxLCAweDI4LCAweGU1LCAweDJiLAorKwkJICAgIDB4MDIsIDB4ZjMsIDB4ZTUsIDB4OTYsIDB4MzksIDB4ZjEsIDB4M2MsIDB4NDYgfSwKKysJLnNlY3JldF9zaXplID0gMzIsCisrCS5iX3B1YmxpY19zaXplID0gMzIsCisrCS5leHBlY3RlZF9zc19zaXplID0gMzIsCisrCisrfSwKKysvKiB3eWNoZXByb29mIC0gY2hlY2tpbmcgZm9yIG92ZXJmbG93ICovCisreworKwkuc2VjcmV0ID0gKHU4WzMyXSl7IDB4YzgsIDB4MTcsIDB4MjQsIDB4NzAsIDB4NDAsIDB4MDAsIDB4YjIsIDB4NmQsCisrCQkgICAgIDB4MzEsIDB4NzAsIDB4M2MsIDB4YzksIDB4N2UsIDB4M2EsIDB4MzcsIDB4OGQsCisrCQkgICAgIDB4NTYsIDB4ZmEsIDB4ZDgsIDB4MjEsIDB4OTMsIDB4NjEsIDB4YzgsIDB4OGMsCisrCQkgICAgIDB4Y2EsIDB4OGIsIDB4ZDcsIDB4YzUsIDB4NzEsIDB4OWIsIDB4MTIsIDB4YjIgfSwKKysJLmJfcHVibGljID0gKHU4WzMyXSl7IDB4YzgsIDB4ZWYsIDB4NzksIDB4YjUsIDB4MTQsIDB4ZDcsIDB4NjgsIDB4MjYsCisrCQkgICAgMHg3NywgMHhiYywgMHg3OSwgMHgzMSwgMHhlMCwgMHg2ZSwgMHhlNSwgMHhjMiwKKysJCSAgICAweDdjLCAweDliLCAweDM5LCAweDJiLCAweDRhLCAweGU5LCAweDQ4LCAweDQ0LAorKwkJICAgIDB4NzMsIDB4ZjUsIDB4NTQsIDB4ZTYsIDB4NjcsIDB4OGUsIDB4Y2MsIDB4MmUgfSwKKysJLmV4cGVjdGVkX3NzID0gKHU4WzMyXSl7IDB4NjQsIDB4N2EsIDB4NDYsIDB4YjYsIDB4ZmMsIDB4M2YsIDB4NDAsIDB4ZDYsCisrCQkgICAgMHgyMSwgMHg0MSwgMHhlZSwgMHgzYywgMHhlZSwgMHg3MCwgMHg2YiwgMHg0ZCwKKysJCSAgICAweDdhLCAweDkyLCAweDcxLCAweDU5LCAweDNhLCAweDdiLCAweDE0LCAweDNlLAorKwkJICAgIDB4OGUsIDB4MmUsIDB4MjIsIDB4NzksIDB4ODgsIDB4M2UsIDB4NDUsIDB4NTAgfSwKKysJLnNlY3JldF9zaXplID0gMzIsCisrCS5iX3B1YmxpY19zaXplID0gMzIsCisrCS5leHBlY3RlZF9zc19zaXplID0gMzIsCisrCisrfSwKKysvKiB3eWNoZXByb29mIC0gY2hlY2tpbmcgZm9yIG92ZXJmbG93ICovCisreworKwkuc2VjcmV0ID0gKHU4WzMyXSl7IDB4YzgsIDB4MTcsIDB4MjQsIDB4NzAsIDB4NDAsIDB4MDAsIDB4YjIsIDB4NmQsCisrCQkgICAgIDB4MzEsIDB4NzAsIDB4M2MsIDB4YzksIDB4N2UsIDB4M2EsIDB4MzcsIDB4OGQsCisrCQkgICAgIDB4NTYsIDB4ZmEsIDB4ZDgsIDB4MjEsIDB4OTMsIDB4NjEsIDB4YzgsIDB4OGMsCisrCQkgICAgIDB4Y2EsIDB4OGIsIDB4ZDcsIDB4YzUsIDB4NzEsIDB4OWIsIDB4MTIsIDB4YjIgfSwKKysJLmJfcHVibGljID0gKHU4WzMyXSl7IDB4NjQsIDB4YWUsIDB4YWMsIDB4MjUsIDB4MDQsIDB4MTQsIDB4NDgsIDB4NjEsCisrCQkgICAgMHg1MywgMHgyYiwgMHg3YiwgMHhiYywgMHhiNiwgMHhjOCwgMHg3ZCwgMHg2NywKKysJCSAgICAweGRkLCAweDRjLCAweDFmLCAweDA3LCAweGViLCAweGMyLCAweGUwLCAweDZlLAorKwkJICAgIDB4ZmYsIDB4YjksIDB4NWEsIDB4ZWMsIDB4YzYsIDB4MTcsIDB4MGIsIDB4MmMgfSwKKysJLmV4cGVjdGVkX3NzID0gKHU4WzMyXSl7IDB4NGYsIDB4ZjAsIDB4M2QsIDB4NWYsIDB4YjQsIDB4M2MsIDB4ZDgsIDB4NjUsCisrCQkgICAgMHg3YSwgMHgzYywgMHhmMywgMHg3YywgMHgxMywgMHg4YywgMHhhZCwgMHhjZSwKKysJCSAgICAweGNjLCAweGU1LCAweDA5LCAweGU0LCAweGViLCAweGEwLCAweDg5LCAweGQwLAorKwkJICAgIDB4ZWYsIDB4NDAsIDB4YjQsIDB4ZTQsIDB4ZmIsIDB4OTQsIDB4NjEsIDB4NTUgfSwKKysJLnNlY3JldF9zaXplID0gMzIsCisrCS5iX3B1YmxpY19zaXplID0gMzIsCisrCS5leHBlY3RlZF9zc19zaXplID0gMzIsCisrCisrfSwKKysvKiB3eWNoZXByb29mIC0gY2hlY2tpbmcgZm9yIG92ZXJmbG93ICovCisreworKwkuc2VjcmV0ID0gKHU4WzMyXSl7IDB4YzgsIDB4MTcsIDB4MjQsIDB4NzAsIDB4NDAsIDB4MDAsIDB4YjIsIDB4NmQsCisrCQkgICAgIDB4MzEsIDB4NzAsIDB4M2MsIDB4YzksIDB4N2UsIDB4M2EsIDB4MzcsIDB4OGQsCisrCQkgICAgIDB4NTYsIDB4ZmEsIDB4ZDgsIDB4MjEsIDB4OTMsIDB4NjEsIDB4YzgsIDB4OGMsCisrCQkgICAgIDB4Y2EsIDB4OGIsIDB4ZDcsIDB4YzUsIDB4NzEsIDB4OWIsIDB4MTIsIDB4YjIgfSwKKysJLmJfcHVibGljID0gKHU4WzMyXSl7IDB4YmYsIDB4NjgsIDB4ZTMsIDB4NWUsIDB4OWIsIDB4ZGIsIDB4N2UsIDB4ZWUsCisrCQkgICAgMHgxYiwgMHg1MCwgMHg1NywgMHgwMiwgMHgyMSwgMHg4NiwgMHgwZiwgMHg1ZCwKKysJCSAgICAweGNkLCAweGFkLCAweDhhLCAweGNiLCAweGFiLCAweDAzLCAweDFiLCAweDE0LAorKwkJICAgIDB4OTcsIDB4NGMsIDB4YzQsIDB4OTAsIDB4MTMsIDB4YzQsIDB4OTgsIDB4MzEgfSwKKysJLmV4cGVjdGVkX3NzID0gKHU4WzMyXSl7IDB4MjEsIDB4Y2UsIDB4ZTUsIDB4MmUsIDB4ZmQsIDB4YmMsIDB4ODEsIDB4MmUsCisrCQkgICAgMHgxZCwgMHgwMiwgMHgxYSwgMHg0YSwgMHhmMSwgMHhlMSwgMHhkOCwgMHhiYywKKysJCSAgICAweDRkLCAweGIzLCAweGM0LCAweDAwLCAweGU0LCAweGQyLCAweGEyLCAweGM1LAorKwkJICAgIDB4NmEsIDB4MzksIDB4MjYsIDB4ZGIsIDB4NGQsIDB4OTksIDB4YzYsIDB4NWIgfSwKKysJLnNlY3JldF9zaXplID0gMzIsCisrCS5iX3B1YmxpY19zaXplID0gMzIsCisrCS5leHBlY3RlZF9zc19zaXplID0gMzIsCisrCisrfSwKKysvKiB3eWNoZXByb29mIC0gY2hlY2tpbmcgZm9yIG92ZXJmbG93ICovCisreworKwkuc2VjcmV0ID0gKHU4WzMyXSl7IDB4YzgsIDB4MTcsIDB4MjQsIDB4NzAsIDB4NDAsIDB4MDAsIDB4YjIsIDB4NmQsCisrCQkgICAgIDB4MzEsIDB4NzAsIDB4M2MsIDB4YzksIDB4N2UsIDB4M2EsIDB4MzcsIDB4OGQsCisrCQkgICAgIDB4NTYsIDB4ZmEsIDB4ZDgsIDB4MjEsIDB4OTMsIDB4NjEsIDB4YzgsIDB4OGMsCisrCQkgICAgIDB4Y2EsIDB4OGIsIDB4ZDcsIDB4YzUsIDB4NzEsIDB4OWIsIDB4MTIsIDB4YjIgfSwKKysJLmJfcHVibGljID0gKHU4WzMyXSl7IDB4NTMsIDB4NDcsIDB4YzQsIDB4OTEsIDB4MzMsIDB4MWEsIDB4NjQsIDB4YjQsCisrCQkgICAgMHgzZCwgMHhkYywgMHg2OCwgMHgzMCwgMHgzNCwgMHhlNiwgMHg3NywgMHhmNSwKKysJCSAgICAweDNkLCAweGMzLCAweDJiLCAweDUyLCAweGE1LCAweDJhLCAweDU3LCAweDdjLAorKwkJICAgIDB4MTUsIDB4YTgsIDB4M2IsIDB4ZjIsIDB4OTgsIDB4ZTksIDB4OWYsIDB4MTkgfSwKKysJLmV4cGVjdGVkX3NzID0gKHU4WzMyXSl7IDB4MTgsIDB4Y2IsIDB4ODksIDB4ZTQsIDB4ZTIsIDB4MGMsIDB4MGMsIDB4MmIsCisrCQkgICAgMHhkMywgMHgyNCwgMHgzMCwgMHg1MiwgMHg0NSwgMHgyNiwgMHg2YywgMHg5MywKKysJCSAgICAweDI3LCAweDY5LCAweDBiLCAweGJlLCAweDc5LCAweGFjLCAweGI4LCAweDhmLAorKwkJICAgIDB4NWIsIDB4OGYsIDB4YjMsIDB4ZjcsIDB4NGUsIDB4Y2EsIDB4M2UsIDB4NTIgfSwKKysJLnNlY3JldF9zaXplID0gMzIsCisrCS5iX3B1YmxpY19zaXplID0gMzIsCisrCS5leHBlY3RlZF9zc19zaXplID0gMzIsCisrCisrfSwKKysvKiB3eWNoZXByb29mIC0gcHJpdmF0ZSBrZXkgPT0gLTEgKG1vZCBvcmRlcikgKi8KKyt7CisrCS5zZWNyZXQgPSAodThbMzJdKXsgMHhhMCwgMHgyMywgMHhjZCwgMHhkMCwgMHg4MywgMHhlZiwgMHg1YiwgMHhiOCwKKysJCSAgICAgMHgyZiwgMHgxMCwgMHhkNiwgMHgyZSwgMHg1OSwgMHhlMSwgMHg1YSwgMHg2OCwKKysJCSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCB9LAorKwkuYl9wdWJsaWMgPSAodThbMzJdKXsgMHgyNSwgMHg4ZSwgMHgwNCwgMHg1MiwgMHgzYiwgMHg4ZCwgMHgyNSwgMHgzZSwKKysJCSAgICAweGU2LCAweDU3LCAweDE5LCAweGZjLCAweDY5LCAweDA2LCAweGM2LCAweDU3LAorKwkJICAgIDB4MTksIDB4MmQsIDB4ODAsIDB4NzEsIDB4N2UsIDB4ZGMsIDB4ODIsIDB4OGYsCisrCQkgICAgMHhhMCwgMHhhZiwgMHgyMSwgMHg2OCwgMHg2ZSwgMHgyZiwgMHhhYSwgMHg3NSB9LAorKwkuZXhwZWN0ZWRfc3MgPSAodThbMzJdKXsgMHgyNSwgMHg4ZSwgMHgwNCwgMHg1MiwgMHgzYiwgMHg4ZCwgMHgyNSwgMHgzZSwKKysJCSAgICAweGU2LCAweDU3LCAweDE5LCAweGZjLCAweDY5LCAweDA2LCAweGM2LCAweDU3LAorKwkJICAgIDB4MTksIDB4MmQsIDB4ODAsIDB4NzEsIDB4N2UsIDB4ZGMsIDB4ODIsIDB4OGYsCisrCQkgICAgMHhhMCwgMHhhZiwgMHgyMSwgMHg2OCwgMHg2ZSwgMHgyZiwgMHhhYSwgMHg3NSB9LAorKwkuc2VjcmV0X3NpemUgPSAzMiwKKysJLmJfcHVibGljX3NpemUgPSAzMiwKKysJLmV4cGVjdGVkX3NzX3NpemUgPSAzMiwKKysKKyt9LAorKy8qIHd5Y2hlcHJvb2YgLSBwcml2YXRlIGtleSA9PSAxIChtb2Qgb3JkZXIpIG9uIHR3aXN0ICovCisreworKwkuc2VjcmV0ID0gKHU4WzMyXSl7IDB4NTgsIDB4MDgsIDB4M2QsIDB4ZDIsIDB4NjEsIDB4YWQsIDB4OTEsIDB4ZWYsCisrCQkgICAgIDB4ZjksIDB4NTIsIDB4MzIsIDB4MmUsIDB4YzgsIDB4MjQsIDB4YzYsIDB4ODIsCisrCQkgICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkgICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4NWYgfSwKKysJLmJfcHVibGljID0gKHU4WzMyXSl7IDB4MmUsIDB4YWUsIDB4NWUsIDB4YzMsIDB4ZGQsIDB4NDksIDB4NGUsIDB4OWYsCisrCQkgICAgMHgyZCwgMHgzNywgMHhkMiwgMHg1OCwgMHhmOCwgMHg3MywgMHhhOCwgMHhlNiwKKysJCSAgICAweGU5LCAweGQwLCAweGRiLCAweGQxLCAweGUzLCAweDgzLCAweGVmLCAweDY0LAorKwkJICAgIDB4ZDksIDB4OGIsIDB4YjksIDB4MWIsIDB4M2UsIDB4MGIsIDB4ZTAsIDB4MzUgfSwKKysJLmV4cGVjdGVkX3NzID0gKHU4WzMyXSl7IDB4MmUsIDB4YWUsIDB4NWUsIDB4YzMsIDB4ZGQsIDB4NDksIDB4NGUsIDB4OWYsCisrCQkgICAgMHgyZCwgMHgzNywgMHhkMiwgMHg1OCwgMHhmOCwgMHg3MywgMHhhOCwgMHhlNiwKKysJCSAgICAweGU5LCAweGQwLCAweGRiLCAweGQxLCAweGUzLCAweDgzLCAweGVmLCAweDY0LAorKwkJICAgIDB4ZDksIDB4OGIsIDB4YjksIDB4MWIsIDB4M2UsIDB4MGIsIDB4ZTAsIDB4MzUgfSwKKysJLnNlY3JldF9zaXplID0gMzIsCisrCS5iX3B1YmxpY19zaXplID0gMzIsCisrCS5leHBlY3RlZF9zc19zaXplID0gMzIsCisrCisrfQorK307CisrCisgc3RhdGljIGNvbnN0IHN0cnVjdCBrcHBfdGVzdHZlYyBlY2RoX3R2X3RlbXBsYXRlW10gPSB7CisgCXsKKyAjaWZuZGVmIENPTkZJR19DUllQVE9fRklQUwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAyNy1jcnlwdG8tY3VydmUyNTUxOS1pbXBsZW1lbnQtZ2VuZXJpYy1LUFAtZHJpdmVyLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAyNy1jcnlwdG8tY3VydmUyNTUxOS1pbXBsZW1lbnQtZ2VuZXJpYy1LUFAtZHJpdmVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MDk1NjEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDI3LWNyeXB0by1jdXJ2ZTI1NTE5LWltcGxlbWVudC1nZW5lcmljLUtQUC1kcml2ZXIucGF0Y2gKQEAgLTAsMCArMSwxMzYgQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFyZCBCaWVzaGV1dmVsIDxhcmRiQGtlcm5lbC5vcmc+CitEYXRlOiBGcmksIDggTm92IDIwMTkgMTM6MjI6MzQgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gY3J5cHRvOiBjdXJ2ZTI1NTE5IC0gaW1wbGVtZW50IGdlbmVyaWMgS1BQIGRyaXZlcgorCitjb21taXQgZWU3NzJjYjY0MTEzNTczOWMxNTMwNjQ3MzkxZDVhMDRjMzlkYjE5MiB1cHN0cmVhbS4KKworRXhwb3NlIHRoZSBnZW5lcmljIEN1cnZlMjU1MTkgbGlicmFyeSB2aWEgdGhlIGNyeXB0byBBUEkgS1BQIGludGVyZmFjZS4KKworU2lnbmVkLW9mZi1ieTogQXJkIEJpZXNoZXV2ZWwgPGFyZGJAa2VybmVsLm9yZz4KK1NpZ25lZC1vZmYtYnk6IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgY3J5cHRvL0tjb25maWcgICAgICAgICAgICAgIHwgIDUgKysrCisgY3J5cHRvL01ha2VmaWxlICAgICAgICAgICAgIHwgIDEgKworIGNyeXB0by9jdXJ2ZTI1NTE5LWdlbmVyaWMuYyB8IDkwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDk2IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgY3J5cHRvL2N1cnZlMjU1MTktZ2VuZXJpYy5jCisKKy0tLSBhL2NyeXB0by9LY29uZmlnCisrKysgYi9jcnlwdG8vS2NvbmZpZworQEAgLTI2NCw2ICsyNjQsMTEgQEAgY29uZmlnIENSWVBUT19FQ1JEU0EKKyAJICBzdGFuZGFyZCBhbGdvcml0aG1zIChjYWxsZWQgR09TVCBhbGdvcml0aG1zKS4gT25seSBzaWduYXR1cmUgdmVyaWZpY2F0aW9uCisgCSAgaXMgaW1wbGVtZW50ZWQuCisgCisrY29uZmlnIENSWVBUT19DVVJWRTI1NTE5CisrCXRyaXN0YXRlICJDdXJ2ZTI1NTE5IGFsZ29yaXRobSIKKysJc2VsZWN0IENSWVBUT19LUFAKKysJc2VsZWN0IENSWVBUT19MSUJfQ1VSVkUyNTUxOV9HRU5FUklDCisrCisgY29tbWVudCAiQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhIgorIAorIGNvbmZpZyBDUllQVE9fQ0NNCistLS0gYS9jcnlwdG8vTWFrZWZpbGUKKysrKyBiL2NyeXB0by9NYWtlZmlsZQorQEAgLTE2Nyw2ICsxNjcsNyBAQCBvYmotJChDT05GSUdfQ1JZUFRPX1pTVEQpICs9IHpzdGQubworIG9iai0kKENPTkZJR19DUllQVE9fT0ZCKSArPSBvZmIubworIG9iai0kKENPTkZJR19DUllQVE9fRUNDKSArPSBlY2MubworIG9iai0kKENPTkZJR19DUllQVE9fRVNTSVYpICs9IGVzc2l2Lm8KKytvYmotJChDT05GSUdfQ1JZUFRPX0NVUlZFMjU1MTkpICs9IGN1cnZlMjU1MTktZ2VuZXJpYy5vCisgCisgZWNkaF9nZW5lcmljLXkgKz0gZWNkaC5vCisgZWNkaF9nZW5lcmljLXkgKz0gZWNkaF9oZWxwZXIubworLS0tIC9kZXYvbnVsbAorKysrIGIvY3J5cHRvL2N1cnZlMjU1MTktZ2VuZXJpYy5jCitAQCAtMCwwICsxLDkwIEBACisrLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKKysKKysjaW5jbHVkZSA8Y3J5cHRvL2N1cnZlMjU1MTkuaD4KKysjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2twcC5oPgorKyNpbmNsdWRlIDxjcnlwdG8va3BwLmg+CisrI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorKworK3N0YXRpYyBpbnQgY3VydmUyNTUxOV9zZXRfc2VjcmV0KHN0cnVjdCBjcnlwdG9fa3BwICp0Zm0sIGNvbnN0IHZvaWQgKmJ1ZiwKKysJCQkJIHVuc2lnbmVkIGludCBsZW4pCisreworKwl1OCAqc2VjcmV0ID0ga3BwX3RmbV9jdHgodGZtKTsKKysKKysJaWYgKCFsZW4pCisrCQljdXJ2ZTI1NTE5X2dlbmVyYXRlX3NlY3JldChzZWNyZXQpOworKwllbHNlIGlmIChsZW4gPT0gQ1VSVkUyNTUxOV9LRVlfU0laRSAmJgorKwkJIGNyeXB0b19tZW1uZXEoYnVmLCBjdXJ2ZTI1NTE5X251bGxfcG9pbnQsIENVUlZFMjU1MTlfS0VZX1NJWkUpKQorKwkJbWVtY3B5KHNlY3JldCwgYnVmLCBDVVJWRTI1NTE5X0tFWV9TSVpFKTsKKysJZWxzZQorKwkJcmV0dXJuIC1FSU5WQUw7CisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IGN1cnZlMjU1MTlfY29tcHV0ZV92YWx1ZShzdHJ1Y3Qga3BwX3JlcXVlc3QgKnJlcSkKKyt7CisrCXN0cnVjdCBjcnlwdG9fa3BwICp0Zm0gPSBjcnlwdG9fa3BwX3JlcXRmbShyZXEpOworKwljb25zdCB1OCAqc2VjcmV0ID0ga3BwX3RmbV9jdHgodGZtKTsKKysJdTggcHVibGljX2tleVtDVVJWRTI1NTE5X0tFWV9TSVpFXTsKKysJdTggYnVmW0NVUlZFMjU1MTlfS0VZX1NJWkVdOworKwlpbnQgY29waWVkLCBuYnl0ZXM7CisrCXU4IGNvbnN0ICpicDsKKysKKysJaWYgKHJlcS0+c3JjKSB7CisrCQljb3BpZWQgPSBzZ19jb3B5X3RvX2J1ZmZlcihyZXEtPnNyYywKKysJCQkJCSAgIHNnX25lbnRzX2Zvcl9sZW4ocmVxLT5zcmMsCisrCQkJCQkJCSAgICBDVVJWRTI1NTE5X0tFWV9TSVpFKSwKKysJCQkJCSAgIHB1YmxpY19rZXksIENVUlZFMjU1MTlfS0VZX1NJWkUpOworKwkJaWYgKGNvcGllZCAhPSBDVVJWRTI1NTE5X0tFWV9TSVpFKQorKwkJCXJldHVybiAtRUlOVkFMOworKwkJYnAgPSBwdWJsaWNfa2V5OworKwl9IGVsc2UgeworKwkJYnAgPSBjdXJ2ZTI1NTE5X2Jhc2VfcG9pbnQ7CisrCX0KKysKKysJY3VydmUyNTUxOV9nZW5lcmljKGJ1Ziwgc2VjcmV0LCBicCk7CisrCisrCS8qIG1pZ2h0IHdhbnQgbGVzcyB0aGFuIHdlJ3ZlIGdvdCAqLworKwluYnl0ZXMgPSBtaW5fdChzaXplX3QsIENVUlZFMjU1MTlfS0VZX1NJWkUsIHJlcS0+ZHN0X2xlbik7CisrCWNvcGllZCA9IHNnX2NvcHlfZnJvbV9idWZmZXIocmVxLT5kc3QsIHNnX25lbnRzX2Zvcl9sZW4ocmVxLT5kc3QsCisrCQkJCQkJCQluYnl0ZXMpLAorKwkJCQkgICAgIGJ1ZiwgbmJ5dGVzKTsKKysJaWYgKGNvcGllZCAhPSBuYnl0ZXMpCisrCQlyZXR1cm4gLUVJTlZBTDsKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyB1bnNpZ25lZCBpbnQgY3VydmUyNTUxOV9tYXhfc2l6ZShzdHJ1Y3QgY3J5cHRvX2twcCAqdGZtKQorK3sKKysJcmV0dXJuIENVUlZFMjU1MTlfS0VZX1NJWkU7CisrfQorKworK3N0YXRpYyBzdHJ1Y3Qga3BwX2FsZyBjdXJ2ZTI1NTE5X2FsZyA9IHsKKysJLmJhc2UuY3JhX25hbWUJCT0gImN1cnZlMjU1MTkiLAorKwkuYmFzZS5jcmFfZHJpdmVyX25hbWUJPSAiY3VydmUyNTUxOS1nZW5lcmljIiwKKysJLmJhc2UuY3JhX3ByaW9yaXR5CT0gMTAwLAorKwkuYmFzZS5jcmFfbW9kdWxlCT0gVEhJU19NT0RVTEUsCisrCS5iYXNlLmNyYV9jdHhzaXplCT0gQ1VSVkUyNTUxOV9LRVlfU0laRSwKKysKKysJLnNldF9zZWNyZXQJCT0gY3VydmUyNTUxOV9zZXRfc2VjcmV0LAorKwkuZ2VuZXJhdGVfcHVibGljX2tleQk9IGN1cnZlMjU1MTlfY29tcHV0ZV92YWx1ZSwKKysJLmNvbXB1dGVfc2hhcmVkX3NlY3JldAk9IGN1cnZlMjU1MTlfY29tcHV0ZV92YWx1ZSwKKysJLm1heF9zaXplCQk9IGN1cnZlMjU1MTlfbWF4X3NpemUsCisrfTsKKysKKytzdGF0aWMgaW50IGN1cnZlMjU1MTlfaW5pdCh2b2lkKQorK3sKKysJcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9rcHAoJmN1cnZlMjU1MTlfYWxnKTsKKyt9CisrCisrc3RhdGljIHZvaWQgY3VydmUyNTUxOV9leGl0KHZvaWQpCisreworKwljcnlwdG9fdW5yZWdpc3Rlcl9rcHAoJmN1cnZlMjU1MTlfYWxnKTsKKyt9CisrCisrc3Vic3lzX2luaXRjYWxsKGN1cnZlMjU1MTlfaW5pdCk7CisrbW9kdWxlX2V4aXQoY3VydmUyNTUxOV9leGl0KTsKKysKKytNT0RVTEVfQUxJQVNfQ1JZUFRPKCJjdXJ2ZTI1NTE5Iik7CisrTU9EVUxFX0FMSUFTX0NSWVBUTygiY3VydmUyNTUxOS1nZW5lcmljIik7CisrTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAyOC1jcnlwdG8tbGliLWN1cnZlMjU1MTktd29yay1hcm91bmQtQ2xhbmctc3RhY2stc3BpbGxpLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAyOC1jcnlwdG8tbGliLWN1cnZlMjU1MTktd29yay1hcm91bmQtQ2xhbmctc3RhY2stc3BpbGxpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YjU5YzkKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDI4LWNyeXB0by1saWItY3VydmUyNTUxOS13b3JrLWFyb3VuZC1DbGFuZy1zdGFjay1zcGlsbGkucGF0Y2gKQEAgLTAsMCArMSw3NSBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQXJkIEJpZXNoZXV2ZWwgPGFyZGJAa2VybmVsLm9yZz4KK0RhdGU6IEZyaSwgOCBOb3YgMjAxOSAxMzoyMjozNSArMDEwMAorU3ViamVjdDogW1BBVENIXSBjcnlwdG86IGxpYi9jdXJ2ZTI1NTE5IC0gd29yayBhcm91bmQgQ2xhbmcgc3RhY2sgc3BpbGxpbmcKKyBpc3N1ZQorCitjb21taXQgNjYwYmI4ZTFmODMzZWE2MzE4NWZlODBmZGU4NDdlM2U0MmYxOGUzYiB1cHN0cmVhbS4KKworQXJuZCByZXBvcnRzIHRoYXQgdGhlIDMyLWJpdCBnZW5lcmljIGxpYnJhcnkgY29kZSBmb3IgQ3VydmUyNTExOSBlbmRzCit1cCB1c2luZyBhbiBleGNlc3NpdmUgYW1vdW50IG9mIHN0YWNrIHNwYWNlIHdoZW4gYnVpbHQgd2l0aCBDbGFuZzoKKworICBsaWIvY3J5cHRvL2N1cnZlMjU1MTktZmlhdDMyLmM6NzU2OjY6IGVycm9yOiBzdGFjayBmcmFtZSBzaXplCisgICAgICBvZiAxMzg0IGJ5dGVzIGluIGZ1bmN0aW9uICdjdXJ2ZTI1NTE5X2dlbmVyaWMnCisgICAgICBbLVdlcnJvciwtV2ZyYW1lLWxhcmdlci10aGFuPV0KKworTGV0J3MgZ2l2ZSBzb21lIGhpbnRzIHRvIHRoZSBjb21waWxlciByZWdhcmRpbmcgd2hpY2ggcm91dGluZXMgc2hvdWxkCitub3QgYmUgaW5saW5lZCwgdG8gcHJldmVudCBpdCBmcm9tIHJ1bm5pbmcgb3V0IG9mIHJlZ2lzdGVycyBhbmQgc3BpbGxpbmcKK3RvIHRoZSBzdGFjay4gVGhlIHJlc3VsdGluZyBjb2RlIHBlcmZvcm1zIGlkZW50aWNhbGx5IHVuZGVyIGJvdGggR0NDCithbmQgQ2xhbmcsIGFuZCBtYWtlcyB0aGUgd2FybmluZyBnbyBhd2F5LgorCitTdWdnZXN0ZWQtYnk6IEFybmQgQmVyZ21hbm4gPGFybmRAYXJuZGIuZGU+CitTaWduZWQtb2ZmLWJ5OiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgorU2lnbmVkLW9mZi1ieTogSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBsaWIvY3J5cHRvL2N1cnZlMjU1MTktZmlhdDMyLmMgfCAxMCArKysrKy0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworLS0tIGEvbGliL2NyeXB0by9jdXJ2ZTI1NTE5LWZpYXQzMi5jCisrKysgYi9saWIvY3J5cHRvL2N1cnZlMjU1MTktZmlhdDMyLmMKK0BAIC0yMjMsNyArMjIzLDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGZlXzEoZmUgKmgpCisgCWgtPnZbMF0gPSAxOworIH0KKyAKKy1zdGF0aWMgdm9pZCBmZV9hZGRfaW1wbCh1MzIgb3V0WzEwXSwgY29uc3QgdTMyIGluMVsxMF0sIGNvbnN0IHUzMiBpbjJbMTBdKQorK3N0YXRpYyBub2lubGluZSB2b2lkIGZlX2FkZF9pbXBsKHUzMiBvdXRbMTBdLCBjb25zdCB1MzIgaW4xWzEwXSwgY29uc3QgdTMyIGluMlsxMF0pCisgeworIAl7IGNvbnN0IHUzMiB4MjAgPSBpbjFbOV07CisgCXsgY29uc3QgdTMyIHgyMSA9IGluMVs4XTsKK0BAIC0yNjYsNyArMjY2LDcgQEAgc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGZlX2FkZChmZV9sbworIAlmZV9hZGRfaW1wbChoLT52LCBmLT52LCBnLT52KTsKKyB9CisgCistc3RhdGljIHZvaWQgZmVfc3ViX2ltcGwodTMyIG91dFsxMF0sIGNvbnN0IHUzMiBpbjFbMTBdLCBjb25zdCB1MzIgaW4yWzEwXSkKKytzdGF0aWMgbm9pbmxpbmUgdm9pZCBmZV9zdWJfaW1wbCh1MzIgb3V0WzEwXSwgY29uc3QgdTMyIGluMVsxMF0sIGNvbnN0IHUzMiBpbjJbMTBdKQorIHsKKyAJeyBjb25zdCB1MzIgeDIwID0gaW4xWzldOworIAl7IGNvbnN0IHUzMiB4MjEgPSBpbjFbOF07CitAQCAtMzA5LDcgKzMwOSw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBmZV9zdWIoZmVfbG8KKyAJZmVfc3ViX2ltcGwoaC0+diwgZi0+diwgZy0+dik7CisgfQorIAorLXN0YXRpYyB2b2lkIGZlX211bF9pbXBsKHUzMiBvdXRbMTBdLCBjb25zdCB1MzIgaW4xWzEwXSwgY29uc3QgdTMyIGluMlsxMF0pCisrc3RhdGljIG5vaW5saW5lIHZvaWQgZmVfbXVsX2ltcGwodTMyIG91dFsxMF0sIGNvbnN0IHUzMiBpbjFbMTBdLCBjb25zdCB1MzIgaW4yWzEwXSkKKyB7CisgCXsgY29uc3QgdTMyIHgyMCA9IGluMVs5XTsKKyAJeyBjb25zdCB1MzIgeDIxID0gaW4xWzhdOworQEAgLTQ0MSw3ICs0NDEsNyBAQCBmZV9tdWxfdGxsKGZlICpoLCBjb25zdCBmZV9sb29zZSAqZiwgY29uCisgCWZlX211bF9pbXBsKGgtPnYsIGYtPnYsIGctPnYpOworIH0KKyAKKy1zdGF0aWMgdm9pZCBmZV9zcXJfaW1wbCh1MzIgb3V0WzEwXSwgY29uc3QgdTMyIGluMVsxMF0pCisrc3RhdGljIG5vaW5saW5lIHZvaWQgZmVfc3FyX2ltcGwodTMyIG91dFsxMF0sIGNvbnN0IHUzMiBpbjFbMTBdKQorIHsKKyAJeyBjb25zdCB1MzIgeDE3ID0gaW4xWzldOworIAl7IGNvbnN0IHUzMiB4MTggPSBpbjFbOF07CitAQCAtNjE5LDcgKzYxOSw3IEBAIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBmZV9pbnZlcnQoZmUKKyAgKgorICAqIFByZWNvbmRpdGlvbnM6IGIgaW4gezAsMX0KKyAgKi8KKy1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgZmVfY3N3YXAoZmUgKmYsIGZlICpnLCB1bnNpZ25lZCBpbnQgYikKKytzdGF0aWMgbm9pbmxpbmUgdm9pZCBmZV9jc3dhcChmZSAqZiwgZmUgKmcsIHVuc2lnbmVkIGludCBiKQorIHsKKyAJdW5zaWduZWQgaTsKKyAJYiA9IDAgLSBiOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAyOS1jcnlwdG8tY3VydmUyNTUxOS14ODZfNjQtbGlicmFyeS1hbmQtS1BQLWltcGxlbWVudGF0LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAyOS1jcnlwdG8tY3VydmUyNTUxOS14ODZfNjQtbGlicmFyeS1hbmQtS1BQLWltcGxlbWVudGF0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZmQ5NzAKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDI5LWNyeXB0by1jdXJ2ZTI1NTE5LXg4Nl82NC1saWJyYXJ5LWFuZC1LUFAtaW1wbGVtZW50YXQucGF0Y2gKQEAgLTAsMCArMSwyNTM2IEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogRnJpLCA4IE5vdiAyMDE5IDEzOjIyOjM2ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyeXB0bzogY3VydmUyNTUxOSAtIHg4Nl82NCBsaWJyYXJ5IGFuZCBLUFAgaW1wbGVtZW50YXRpb25zCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK2NvbW1pdCBiYjYxMWJkZmQ2YmUzNGQ5ZjgyMmM3MzMwNWZjYzgzNzIwNDk5ZDM4IHVwc3RyZWFtLgorCitUaGlzIGltcGxlbWVudGF0aW9uIGlzIHRoZSBmYXN0ZXN0IGF2YWlsYWJsZSB4ODZfNjQgaW1wbGVtZW50YXRpb24sIGFuZAordW5saWtlIFNhbmR5MngsIGl0IGRvZXNuJ3QgcmVxdWllIHVzZSBvZiB0aGUgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIGF0CithbGwuIEluc3RlYWQgaXQgbWFrZXMgdXNlIG9mIEJNSTIgYW5kIEFEWCwgYXZhaWxhYmxlIG9uIHJlY2VudAorbWljcm9hcmNoaXRlY3R1cmVzLiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gYnkgQXJtYW5kbworRmF6LUhlcm7DoW5kZXogd2l0aCBjb250cmlidXRpb25zICh1cHN0cmVhbSkgZnJvbSBTYW11ZWwgTmV2ZXMgYW5kIG1lLAoraW4gYWRkaXRpb24gdG8gZnVydGhlciBjaGFuZ2VzIGluIHRoZSBrZXJuZWwgaW1wbGVtZW50YXRpb24gZnJvbSB1cy4KKworU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CitTaWduZWQtb2ZmLWJ5OiBTYW11ZWwgTmV2ZXMgPHNuZXZlc0BkZWkudWMucHQ+CitDby1kZXZlbG9wZWQtYnk6IFNhbXVlbCBOZXZlcyA8c25ldmVzQGRlaS51Yy5wdD4KK1thcmRiOiAtIG1vdmUgdG8gYXJjaC94ODYvY3J5cHRvCisgICAgICAgLSB3aXJlIGludG8gbGliL2NyeXB0byBmcmFtZXdvcmsKKyAgICAgICAtIGltcGxlbWVudCBjcnlwdG8gQVBJIEtQUCBob29rcyBdCitTaWduZWQtb2ZmLWJ5OiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgorU2lnbmVkLW9mZi1ieTogSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBhcmNoL3g4Ni9jcnlwdG8vTWFrZWZpbGUgICAgICAgICAgICB8ICAgIDEgKworIGFyY2gveDg2L2NyeXB0by9jdXJ2ZTI1NTE5LXg4Nl82NC5jIHwgMjQ3NSArKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBjcnlwdG8vS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYgKworIDMgZmlsZXMgY2hhbmdlZCwgMjQ4MiBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGFyY2gveDg2L2NyeXB0by9jdXJ2ZTI1NTE5LXg4Nl82NC5jCisKKy0tLSBhL2FyY2gveDg2L2NyeXB0by9NYWtlZmlsZQorKysrIGIvYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlCitAQCAtMzksNiArMzksNyBAQCBvYmotJChDT05GSUdfQ1JZUFRPX0FFR0lTMTI4X0FFU05JX1NTRTIpCisgCisgb2JqLSQoQ09ORklHX0NSWVBUT19OSFBPTFkxMzA1X1NTRTIpICs9IG5ocG9seTEzMDUtc3NlMi5vCisgb2JqLSQoQ09ORklHX0NSWVBUT19OSFBPTFkxMzA1X0FWWDIpICs9IG5ocG9seTEzMDUtYXZ4Mi5vCisrb2JqLSQoQ09ORklHX0NSWVBUT19DVVJWRTI1NTE5X1g4NikgKz0gY3VydmUyNTUxOS14ODZfNjQubworIAorICMgVGhlc2UgbW9kdWxlcyByZXF1aXJlIGFzc2VtYmxlciB0byBzdXBwb3J0IEFWWC4KKyBpZmVxICgkKGF2eF9zdXBwb3J0ZWQpLHllcykKKy0tLSAvZGV2L251bGwKKysrKyBiL2FyY2gveDg2L2NyeXB0by9jdXJ2ZTI1NTE5LXg4Nl82NC5jCitAQCAtMCwwICsxLDI0NzUgQEAKKysvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2UKKysvKgorKyAqIENvcHlyaWdodCAoYykgMjAxNyBBcm1hbmRvIEZheiA8YXJtZmF6aEBpYy51bmljYW1wLmJyPi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKysgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisrICogQ29weXJpZ2h0IChDKSAyMDE4IFNhbXVlbCBOZXZlcyA8c25ldmVzQGRlaS51Yy5wdD4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisrICovCisrCisrI2luY2x1ZGUgPGNyeXB0by9jdXJ2ZTI1NTE5Lmg+CisrI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9rcHAuaD4KKysKKysjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKysjaW5jbHVkZSA8bGludXgvanVtcF9sYWJlbC5oPgorKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKysjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisrCisrI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CisrI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKysKKytzdGF0aWMgX19yb19hZnRlcl9pbml0IERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGN1cnZlMjU1MTlfdXNlX2JtaTIpOworK3N0YXRpYyBfX3JvX2FmdGVyX2luaXQgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoY3VydmUyNTUxOV91c2VfYWR4KTsKKysKKytlbnVtIHsgTlVNX1dPUkRTX0VMVEZQMjU1MTkgPSA0IH07CisrdHlwZWRlZiBfX2FsaWduZWQoMzIpIHU2NCBlbHRmcDI1NTE5XzF3W05VTV9XT1JEU19FTFRGUDI1NTE5XTsKKyt0eXBlZGVmIF9fYWxpZ25lZCgzMikgdTY0IGVsdGZwMjU1MTlfMXdfYnVmZmVyWzIgKiBOVU1fV09SRFNfRUxURlAyNTUxOV07CisrCisrI2RlZmluZSBtdWxfZWx0ZnAyNTUxOV8xd19hZHgoYywgYSwgYikgZG8geyBcCisrCW11bF8yNTZ4MjU2X2ludGVnZXJfYWR4KG0uYnVmZmVyLCBhLCBiKTsgXAorKwlyZWRfZWx0ZnAyNTUxOV8xd19hZHgoYywgbS5idWZmZXIpOyBcCisrfSB3aGlsZSAoMCkKKysKKysjZGVmaW5lIG11bF9lbHRmcDI1NTE5XzF3X2JtaTIoYywgYSwgYikgZG8geyBcCisrCW11bF8yNTZ4MjU2X2ludGVnZXJfYm1pMihtLmJ1ZmZlciwgYSwgYik7IFwKKysJcmVkX2VsdGZwMjU1MTlfMXdfYm1pMihjLCBtLmJ1ZmZlcik7IFwKKyt9IHdoaWxlICgwKQorKworKyNkZWZpbmUgc3FyX2VsdGZwMjU1MTlfMXdfYWR4KGEpIGRvIHsgXAorKwlzcXJfMjU2eDI1Nl9pbnRlZ2VyX2FkeChtLmJ1ZmZlciwgYSk7IFwKKysJcmVkX2VsdGZwMjU1MTlfMXdfYWR4KGEsIG0uYnVmZmVyKTsgXAorK30gd2hpbGUgKDApCisrCisrI2RlZmluZSBzcXJfZWx0ZnAyNTUxOV8xd19ibWkyKGEpIGRvIHsgXAorKwlzcXJfMjU2eDI1Nl9pbnRlZ2VyX2JtaTIobS5idWZmZXIsIGEpOyBcCisrCXJlZF9lbHRmcDI1NTE5XzF3X2JtaTIoYSwgbS5idWZmZXIpOyBcCisrfSB3aGlsZSAoMCkKKysKKysjZGVmaW5lIG11bF9lbHRmcDI1NTE5XzJ3X2FkeChjLCBhLCBiKSBkbyB7IFwKKysJbXVsMl8yNTZ4MjU2X2ludGVnZXJfYWR4KG0uYnVmZmVyLCBhLCBiKTsgXAorKwlyZWRfZWx0ZnAyNTUxOV8yd19hZHgoYywgbS5idWZmZXIpOyBcCisrfSB3aGlsZSAoMCkKKysKKysjZGVmaW5lIG11bF9lbHRmcDI1NTE5XzJ3X2JtaTIoYywgYSwgYikgZG8geyBcCisrCW11bDJfMjU2eDI1Nl9pbnRlZ2VyX2JtaTIobS5idWZmZXIsIGEsIGIpOyBcCisrCXJlZF9lbHRmcDI1NTE5XzJ3X2JtaTIoYywgbS5idWZmZXIpOyBcCisrfSB3aGlsZSAoMCkKKysKKysjZGVmaW5lIHNxcl9lbHRmcDI1NTE5XzJ3X2FkeChhKSBkbyB7IFwKKysJc3FyMl8yNTZ4MjU2X2ludGVnZXJfYWR4KG0uYnVmZmVyLCBhKTsgXAorKwlyZWRfZWx0ZnAyNTUxOV8yd19hZHgoYSwgbS5idWZmZXIpOyBcCisrfSB3aGlsZSAoMCkKKysKKysjZGVmaW5lIHNxcl9lbHRmcDI1NTE5XzJ3X2JtaTIoYSkgZG8geyBcCisrCXNxcjJfMjU2eDI1Nl9pbnRlZ2VyX2JtaTIobS5idWZmZXIsIGEpOyBcCisrCXJlZF9lbHRmcDI1NTE5XzJ3X2JtaTIoYSwgbS5idWZmZXIpOyBcCisrfSB3aGlsZSAoMCkKKysKKysjZGVmaW5lIHNxcm5fZWx0ZnAyNTUxOV8xd19hZHgoYSwgdGltZXMpIGRvIHsgXAorKwlpbnQgX19fX2NvdW50ZXIgPSAodGltZXMpOyBcCisrCXdoaWxlIChfX19fY291bnRlci0tID4gMCkgXAorKwkJc3FyX2VsdGZwMjU1MTlfMXdfYWR4KGEpOyBcCisrfSB3aGlsZSAoMCkKKysKKysjZGVmaW5lIHNxcm5fZWx0ZnAyNTUxOV8xd19ibWkyKGEsIHRpbWVzKSBkbyB7IFwKKysJaW50IF9fX19jb3VudGVyID0gKHRpbWVzKTsgXAorKwl3aGlsZSAoX19fX2NvdW50ZXItLSA+IDApIFwKKysJCXNxcl9lbHRmcDI1NTE5XzF3X2JtaTIoYSk7IFwKKyt9IHdoaWxlICgwKQorKworKyNkZWZpbmUgY29weV9lbHRmcDI1NTE5XzF3KEMsIEEpIGRvIHsgXAorKwkoQylbMF0gPSAoQSlbMF07IFwKKysJKEMpWzFdID0gKEEpWzFdOyBcCisrCShDKVsyXSA9IChBKVsyXTsgXAorKwkoQylbM10gPSAoQSlbM107IFwKKyt9IHdoaWxlICgwKQorKworKyNkZWZpbmUgc2V0emVyb19lbHRmcDI1NTE5XzF3KEMpIGRvIHsgXAorKwkoQylbMF0gPSAwOyBcCisrCShDKVsxXSA9IDA7IFwKKysJKEMpWzJdID0gMDsgXAorKwkoQylbM10gPSAwOyBcCisrfSB3aGlsZSAoMCkKKysKKytfX2FsaWduZWQoMzIpIHN0YXRpYyBjb25zdCB1NjQgdGFibGVfbGFkZGVyXzhrWzI1MiAqIE5VTV9XT1JEU19FTFRGUDI1NTE5XSA9IHsKKysJLyogICAxICovIDB4ZmZmZmZmZmZmZmZmZmZmM1VMLCAweGZmZmZmZmZmZmZmZmZmZmZVTCwKKysJCSAgMHhmZmZmZmZmZmZmZmZmZmZmVUwsIDB4NWZmZmZmZmZmZmZmZmZmZlVMLAorKwkvKiAgIDIgKi8gMHg2YjgyMjBmNDE2YWFmZTk2VUwsIDB4ODJlYmViMmI0ZjU2NmEzNFVMLAorKwkJICAweGQ1YTlhNWIwNzVhNTk1MGZVTCwgMHg1MTQyYjJjZjRiMjQ4OGY0VUwsCisrCS8qICAgMyAqLyAweDZhYWViYzc1MDA2OTY4MGNVTCwgMHg4OWNmNzgyMGEwZjk5YzQxVUwsCisrCQkgIDB4MmE1OGQ5MTgzYjU2ZDBmNFVMLCAweDRiNWFjYTgwZTM2MDExYTRVTCwKKysJLyogICA0ICovIDB4MzI5MTMyMzQ4YzI5NzQ1ZFVMLCAweGY0YTJlNjE2ZTE2NDJmZDdVTCwKKysJCSAgMHgxZTQ1YmIwM2ZmNjdiYzM0VUwsIDB4MzA2OTEyZDBmNDJhOWI0YVVMLAorKwkvKiAgIDUgKi8gMHhmZjg4NjUwN2U2YWY3MTU0VUwsIDB4MDRmNTBlMTNkZmVlYzgyZlVMLAorKwkJICAweGFhNTEyZmU4MmFiYWI1Y2VVTCwgMHgxNzRlMjUxYTY4ZDVmMjIyVUwsCisrCS8qICAgNiAqLyAweGNmOTY3MDBkODIwMjg4OThVTCwgMHgxNzQzZTMzNzBhMmMwMmM1VUwsCisrCQkgIDB4Mzc5ZWVjOThiNGU4NmVhYVVMLCAweDBjNTk4ODhhNTFlMDQ4MmVVTCwKKysJLyogICA3ICovIDB4ZmJjYmYxZDY5OWI1ZDE4OVVMLCAweGFjYWVmMGQ1OGU5ZmRjODRVTCwKKysJCSAgMHhjMWMyMGQwNjIzMWY3NjE0VUwsIDB4MjkzODIxOGRhMjc0Zjk3MlVMLAorKwkvKiAgIDggKi8gMHhmNmFmNDliZWZmMWQ3ZjE4VUwsIDB4Y2M1NDFjMjIzODdhYzljMlVMLAorKwkJICAweDk2ZmNjOWVmNDAxNWM1NmJVTCwgMHg2OWMxNjI3YzY5MDkxM2E5VUwsCisrCS8qICAgOSAqLyAweDdhODZmZDJmNDczM2RiMGVVTCwgMHhmZGI4YzRmMjllMDg3ZGU5VUwsCisrCQkgIDB4MDk1ZTRiMWE4ZWEyYTIyOVVMLCAweDFhZDdhN2M4MjliMzdhNzlVTCwKKysJLyogIDEwICovIDB4MzQyZDg5Y2FkMTdlYTBjMFVMLCAweDY3YmVkZGE2Y2NlZDIwNTFVTCwKKysJCSAgMHgxOWNhMzFiZjJiYjQyZjc0VUwsIDB4M2RmN2I0Yzg0OTgwYWNiYlVMLAorKwkvKiAgMTEgKi8gMHhhOGM2NDQ0ZGM4MGFkODgzVUwsIDB4YjkxZTQ0MDM2NmUzYWI4NVVMLAorKwkJICAweGMyMTVjZGEwMDE2NGY2ZDhVTCwgMHgzZDg2N2M2ZWYyNDdlNjY4VUwsCisrCS8qICAxMiAqLyAweGM3ZGQ1ODJiY2MzZTY1OGNVTCwgMHhmZDJjNDc0OGVlMGU1NTI4VUwsCisrCQkgIDB4YTBmZDliOTVjYzlmNGY3MVVMLCAweDc1MjlkODcxYjA2NzVkZGZVTCwKKysJLyogIDEzICovIDB4YjhmNTY4YjQyZDNjYmQ3OFVMLCAweDEyMzMwMTFiOTFmM2RhODJVTCwKKysJCSAgMHgyZGNlNmNjZDRhN2MzYjYyVUwsIDB4NzVlN2ZjOGU5ZTQ5ODYwM1VMLAorKwkvKiAgMTQgKi8gMHgyZjRmMTNmMWZjZDBiNmVjVUwsIDB4ZjFhOGNhMWYyOWZmN2E0NVVMLAorKwkJICAweGMyNDljMWE3Mjk4MWUyOWJVTCwgMHg2ZWJlMGRiYjhjODNiNTZhVUwsCisrCS8qICAxNSAqLyAweDcxMTRmYThkMTcwYmIyMjJVTCwgMHg2NWEyZGNkNWJmOTM5MzVmVUwsCisrCQkgIDB4YmRjNDFmNjhiNTljOTc5YVVMLCAweDJmMGVlZjc5YTJjZTkyODlVTCwKKysJLyogIDE2ICovIDB4NDJlY2JmMGMwODNjMzdjZVVMLCAweDI5MzBiYzA5ZWM0OTYzMjJVTCwKKysJCSAgMHhmMjk0YjBjMTljZmVhYzBkVUwsIDB4Mzc4MGFhNGJlZGZhYmI4MFVMLAorKwkvKiAgMTcgKi8gMHg1NmMxN2QzZTdjZWFkOTI5VUwsIDB4ZTdjYjRiZWIyZTU3MjJjNVVMLAorKwkJICAweDBjZTkzMTczMmRiZmUxNWFVTCwgMHg0MWI4ODNjNzYyMTA1MmY4VUwsCisrCS8qICAxOCAqLyAweGRiZjc1Y2EwYzNkMjUzNTBVTCwgMHgyOTM2YmUwODZlYjFlMzUxVUwsCisrCQkgIDB4YzkzNmUwM2NiNGE5YjIxMlVMLCAweDFkNDViZjgyMzIyMjI1YWFVTCwKKysJLyogIDE5ICovIDB4ZTgxYWIxMDM2YTAyNGNjNVVMLCAweGUyMTIyMDFjMzA0YzlhNzJVTCwKKysJCSAgMHhjNWQ3M2ZiYTY4MzJiMWZjVUwsIDB4MjBmZmRiNWE0ZDgzOTU4MVVMLAorKwkvKiAgMjAgKi8gMHhhMjgzZDM2N2JlNWQwZmFkVUwsIDB4NmMyYjI1Y2E4YjE2NDQ3NVVMLAorKwkJICAweDlkNDkzNTQ2N2NhYWYyMmVVTCwgMHg1MTY2NDA4ZWVlODVmZjQ5VUwsCisrCS8qICAyMSAqLyAweDNjNjdiYWEyZmFiNGUzNjFVTCwgMHhiM2U0MzNjNjdlZjM1Y2VmVUwsCisrCQkgIDB4NTI1OTcyOTI0MTE1OWIxY1VMLCAweDZhNjIxODkyZDViMGFiMzNVTCwKKysJLyogIDIyICovIDB4MjBiNzRhMzg3NTU1Y2RjYlVMLCAweDUzMmFhMTBlMTIwODkyM2ZVTCwKKysJCSAgMHhlYWExN2I3NzYyMjgxZGQxVUwsIDB4NjFhYjM0NDNmMDVjNDRiZlVMLAorKwkvKiAgMjMgKi8gMHgyNTdhNmM0MjIzMjRkZWY4VUwsIDB4MTMxYzZjMTAxN2UzY2Y3ZlVMLAorKwkJICAweDIzNzU4NzM5ZjYzMGEyNTdVTCwgMHgyOTVhNDA3YTAxYTc4NTgwVUwsCisrCS8qICAyNCAqLyAweGY4YzQ0MzI0NmQ1ZGE4ZDlVTCwgMHgxOWQ3NzU0NTBjNTJmYTVkVUwsCisrCQkgIDB4MmFmY2ZjOTI3MzFiZjgzZFVMLCAweDdkMTBjOGU4MWIyYjQ3MDBVTCwKKysJLyogIDI1ICovIDB4YzhlMDI3MWY3MGJhYTIwYlVMLCAweDk5Mzc0ODg2N2NhNjM5NTdVTCwKKysJCSAgMHg1NDEyZWZiM2NiN2VkNGJiVUwsIDB4MzE5NmQzNjE3M2U2Mjk3NVVMLAorKwkvKiAgMjYgKi8gMHhkZTViY2FkMTQxYzdkZmZjVUwsIDB4NDdjYzhjZDJiMzk1Yzg0OFVMLAorKwkJICAweGEzNGNkOTQyZTExYWYzY2JVTCwgMHgwMjU2ZGJmMmQwNGVjZWMyVUwsCisrCS8qICAyNyAqLyAweDg3NWFiN2U5NGIwZTY2N2ZVTCwgMHhjYWQ0ZGQ4M2MwODUwZDEwVUwsCisrCQkgIDB4NDdmMTJlOGY0ZTcyYzc5ZlVMLCAweDVmMWE4N2JiOGM4NWIxOWJVTCwKKysJLyogIDI4ICovIDB4N2FlOWQwYjY0MzdmNTFiOFVMLCAweDEyYzdjZTU1MTg4NzkwNjVVTCwKKysJCSAgMHgyYWRlMDlmZTVjZjc3YWVlVUwsIDB4MjNhMDVhMmY3ZDJjNTYyN1VMLAorKwkvKiAgMjkgKi8gMHg1OTA4ZTEyOGYxN2MxNjlhVUwsIDB4Zjc3NDk4ZGQ4YWQwODUyZFVMLAorKwkJICAweDc0YjRjNGNlYWIxMDJmNjRVTCwgMHgxODNhYmFkZDEwMTM5ODQ1VUwsCisrCS8qICAzMCAqLyAweGIxNjViYThkYWE5MmFhYWNVTCwgMHhkNWM1ZWY5NTk5Mzg2NzA1VUwsCisrCQkgIDB4YmUyZjhmMGNmOGZjNDBkMVVMLCAweDI3MDFlNjM1ZWUyMDQ1MTRVTCwKKysJLyogIDMxICovIDB4NjI5ZmE4MDAyMDE1NjUxNFVMLCAweGYyMjM4Njg3NjRhOGMxY2VVTCwKKysJCSAgMHg1Yjg5NGZmZjBiM2YwNjBlVUwsIDB4NjBkOTk0NGNmNzA4YTNmYVVMLAorKwkvKiAgMzIgKi8gMHhhZWVhMDAxYTFjN2EyMDFmVUwsIDB4ZWJmMTZhNjMzZWUyY2U2M1VMLAorKwkJICAweDZmNzcwOTU5NGM3YTA3ZTFVTCwgMHg3OWI5NTgxNTBkMDIwOGNiVUwsCisrCS8qICAzMyAqLyAweDI0YjU1ZTUzMDFkNDEwZTdVTCwgMHhlM2EzNGVkZmYzZmRjODRkVUwsCisrCQkgIDB4ZDg4NzY4ZTQ5MDQwMzJkOFVMLCAweDEzMTM4NDQyN2IzYWFlZWNVTCwKKysJLyogIDM0ICovIDB4ODQwNWU1MTI4NjIzNGYxNFVMLCAweDE0ZGM0NzM5YWRiNGM1MjlVTCwKKysJCSAgMHhiOGEyYjViMjUwNjM0ZmZkVUwsIDB4MmZlMmE5NGFkOGE3ZmY5M1VMLAorKwkvKiAgMzUgKi8gMHhlYzVjNTdlZmU4NDNmYWRkVUwsIDB4Mjg0M2NlNDBmMGJiOTkxOFVMLAorKwkJICAweGE0YjU2MWQ2Y2YzZDYzMDVVTCwgMHg3NDM2MjliZGU4ZmI3NzdlVUwsCisrCS8qICAzNiAqLyAweDM0M2VkZDQ2YmJhZjczOGZVTCwgMHhlZDk4MTgyOGIxMDFhNjUxVUwsCisrCQkgIDB4YTQwMTc2MGI4ODJjNzk3YVVMLCAweDFmYzIyM2UyOGRjODg3MzBVTCwKKysJLyogIDM3ICovIDB4NDg2MDRlOTFmYzBmYmEwZVVMLCAweGI2MzdmNzhmMDUyYzZmYTRVTCwKKysJCSAgMHg5MWNjYWMzZDA5ZTkyMzljVUwsIDB4MjNmN2VlZDQ0MzdhNjg3Y1VMLAorKwkvKiAgMzggKi8gMHg1MTczYjExMThkOWJkODAwVUwsIDB4MjlkNjQxYjYzMTg5ZDRhN1VMLAorKwkJICAweGZkYmYxNzc5ODhiYmM1ODZVTCwgMHgyOTU5ODk0ZmNhZDgxZGY1VUwsCisrCS8qICAzOSAqLyAweGFlYmM4ZWYzYjRiYmM4OTlVTCwgMHg0MTQ4OTk1YWIyNjk5MmI5VUwsCisrCQkgIDB4MjRlMjBiMDEzNGY5MmNmYlVMLCAweDQwZDE1ODg5NGEwNWRlZThVTCwKKysJLyogIDQwICovIDB4NDZiMDBiMTE4NWFmNzZmNlVMLCAweDI2YmFjNzc4NzMxODdhNzlVTCwKKysJCSAgMHgzZGMwYmY5NWFiOGZmZjVmVUwsIDB4MmE2MDhiZDg5NDU1MjRkN1VMLAorKwkvKiAgNDEgKi8gMHgyNjQ0OTU4OGJkNDQ2MzAyVUwsIDB4N2M0YmMyMWMwMzg4NDM5Y1VMLAorKwkJICAweDhlOThhNGYzODNiZDExYjJVTCwgMHgyNjIxOGQ3YmM5ZDg3NmI5VUwsCisrCS8qICA0MiAqLyAweGUzMDgxNTQyOTk3YzE3OGFVTCwgMHgzYzJkMjlhODZmYjY2MDZmVUwsCisrCQkgIDB4NWMyMTc3MzZmYTI3OTM3NFVMLCAweDdkZGUwNTczNGFmZWIxZmFVTCwKKysJLyogIDQzICovIDB4M2JmMTBlMzkwNmQ0MmJhYlVMLCAweGU0Zjc4MDNlMTk4MDY0OWNVTCwKKysJCSAgMHhlNjA1M2JmODk1OTViZjdhVUwsIDB4Mzk0ZmFmMzhkYTI0NTUzMFVMLAorKwkvKiAgNDQgKi8gMHg3YThlZmI1ODg5NjkyOGY0VUwsIDB4ZmJjNzc4ZTljYzZhMTEzY1VMLAorKwkJICAweDcyNjcwY2UzMzBhZjU5NmZVTCwgMHg0OGYyMjJhODFkM2Q2Y2Y3VUwsCisrCS8qICA0NSAqLyAweGYwMWZjZTQxMGQ3MmNhYTdVTCwgMHg1YTIwZWNjNzIxM2I1NTk1VUwsCisrCQkgIDB4N2JjMjExNjVjMWZhMTQ4M1VMLCAweDA3Zjg5YWUzMWRhOGE3NDFVTCwKKysJLyogIDQ2ICovIDB4MDVkMmMyYjRjNjgzMGZmOVVMLCAweGQ0M2UzMzBmYzYzMTYyOTNVTCwKKysJCSAgMHhhNWE1NTkwYTk2ZDNhOTA0VUwsIDB4NzA1ZWRiOTFhNjUzMzNiNlVMLAorKwkvKiAgNDcgKi8gMHgwNDhlZTE1ZTBiYjlhNWY3VUwsIDB4MzI0MGNmY2E5ZTBhYWY1ZFVMLAorKwkJICAweDhmNGI3MWNlZWRjNGE0MGJVTCwgMHg2MjFjMGRhM2RlNTQ0YTZkVUwsCisrCS8qICA0OCAqLyAweDkyODcyODM2YTA4YzQwOTFVTCwgMHhjZTgzNzViMDEwYzkxNDQ1VUwsCisrCQkgIDB4OGE3MmViNTI0ZjI3NjM5NFVMLCAweDI2NjdmY2ZhN2VjODM2MzVVTCwKKysJLyogIDQ5ICovIDB4N2Y0YzE3MzM0NWU4NzUyYVVMLCAweDA2MWI0N2ZlZWU3MDc5YTVVTCwKKysJCSAgMHgyNWRkOWFmYTlmODZmZjM0VUwsIDB4Mzc4MGNlZjU0MjVkYzg5Y1VMLAorKwkvKiAgNTAgKi8gMHgxYTQ2MDM1YTUxM2JiNGU5VUwsIDB4M2UxZWYzNzlhYzU3NWFkYVVMLAorKwkJICAweGM3OGM1ZjFjNWZhMjRiNTBVTCwgMHgzMjFhOTY3NjM0ZmQ5ZjIyVUwsCisrCS8qICA1MSAqLyAweDk0NjcwN2I4ODI2ZTI3ZmFVTCwgMHgzZGNhODRkNjRjNTA2ZmQwVUwsCisrCQkgIDB4YzE4OTIxODA3NWU5MTQzNlVMLCAweDZkOTI4NDE2OWIzYjg0ODRVTCwKKysJLyogIDUyICovIDB4M2E2N2U4NDAzODNmMmRkZlVMLCAweDMzZWVjOWEzMGM0ZjliNzVVTCwKKysJCSAgMHgzZWM3Yzg2ZmE3ODNlZjQ3VUwsIDB4MjZlYzQ0OWZiYWM5ZmJjNFVMLAorKwkvKiAgNTMgKi8gMHg1YzBmMzhjYmEwOWI5ZTdkVUwsIDB4ODExNjhjYzc2MmEzNDc4Y1VMLAorKwkJICAweDNlMjNiMGQzMDZmYzEyMWNVTCwgMHg1YTIzOGFhMGE1ZWZkY2RkVUwsCisrCS8qICA1NCAqLyAweDFiYTI2MTIxYzRlYTQzZmZVTCwgMHgzNmY4Yzc3ZjdjODgzMmI1VUwsCisrCQkgIDB4ODhmYmVhMGIwYWRjZjk5YVVMLCAweDVjYTk5MzhlYzI1YmViZjlVTCwKKysJLyogIDU1ICovIDB4ZDU0MzZhNWU1MWZjY2RhMFVMLCAweDFkYmM0Nzk3YzJjZDg5M2JVTCwKKysJCSAgMHgxOTM0NmE2NWQzMjI0YTA4VUwsIDB4MGY1MDM0ZTQ5YjlhZjQ2NlVMLAorKwkvKiAgNTYgKi8gMHhmMjNjMzk2N2ExZTBiOTZlVUwsIDB4ZTU4YjA4ZmE4NjdhNGQ4OFVMLAorKwkJICAweGZiMmZhYmM2YTczNDE2NzlVTCwgMHgyYTc1MzgxZWI2MDI2OTQ2VUwsCisrCS8qICA1NyAqLyAweGM4MGEzYmU0YzE5NDIwYWNVTCwgMHg2NmIxZjZjNjgxZjJiNmRjVUwsCisrCQkgIDB4N2NmNzAzNjc2MWU5MzM4OFVMLCAweDI1YWJiYmQ4YTY2MGE0YzRVTCwKKysJLyogIDU4ICovIDB4OTFlYTEyYmExNGZkNTE5OFVMLCAweDY4NDk1MGZjNGEzY2ZmYTlVTCwKKysJCSAgMHhmODI2ODQyMTMwZjVhZDI4VUwsIDB4M2VhOTg4Zjc1MzAxYTQ0MVVMLAorKwkvKiAgNTkgKi8gMHhjOTc4MTA5YTY5NWY4YzZmVUwsIDB4MTc0NmViNGEwNTMwYzNmM1VMLAorKwkJICAweDQ0NGQ2ZDc3YjQ0NTk5OTVVTCwgMHg3NTk1MmI4YzA1NGU1Y2M3VUwsCisrCS8qICA2MCAqLyAweGEzNzAzZjc5MTVmNGQ2YWFVTCwgMHg2NmMzNDYyMDJmMjY0N2Q4VUwsCisrCQkgIDB4ZDAxNDY5ZGY4MTFkNjQ0YlVMLCAweDc3ZmVhNDdkODFhNWQ3MWZVTCwKKysJLyogIDYxICovIDB4YzVlOTUyOWVmNTdjYTM4MVVMLCAweDZlZWViNGI5Y2UyZjg4MWFVTCwKKysJCSAgMHhiNmU5MWEyOGU4MDA5YmQ2VUwsIDB4NGI4MGJlM2U5YWZjM2ZlY1VMLAorKwkvKiAgNjIgKi8gMHg3ZTM3NzNjNTI2YWVkMmM1VUwsIDB4MWI0YWZjYjQ1M2M5YTQ5ZFVMLAorKwkJICAweGE5MjBiZGQ3YmFmZmIyNGRVTCwgMHg3YzU0Njk5ZjEyMmQ0MDBlVUwsCisrCS8qICA2MyAqLyAweGVmNDZjOGUxNGZhOTRiYzhVTCwgMHhlMGIwNzRjZTI5NTJlZDVlVUwsCisrCQkgIDB4YmVhNDUwZTFkYmQ4ODVkNVVMLCAweDYxYjY4NjQ5MzIwZjcxMmNVTCwKKysJLyogIDY0ICovIDB4OGE0ODVmNzMwOWNjYmRkMVVMLCAweGJkMDYzMjBkN2Q0ZDFhMmRVTCwKKysJCSAgMHgyNTIzMjk3MzMyMmRiZWY0VUwsIDB4NDQ1ZGM0NzU4YzE3Zjc3MFVMLAorKwkvKiAgNjUgKi8gMHhkYjA0MzQxNzdjYzg5MzNjVUwsIDB4ZWQ2ZmU4MjE3NWVhMDU5ZlVMLAorKwkJICAweDFlZmViZWZkYzA1M2RiMzRVTCwgMHg0YWRiZTg2N2M2NWRhZjk5VUwsCisrCS8qICA2NiAqLyAweDNhY2Q3MWEyYTkwNjA5ZGZVTCwgMHhlNWU5OTE4NTZkZDA0MDUwVUwsCisrCQkgIDB4MWVjNjliNjg4MTU3YzIzY1VMLCAweDY5NzQyN2Y2ODg1Y2ZlNGRVTCwKKysJLyogIDY3ICovIDB4ZDdiZTdiOWI2NWUxYTg1MVVMLCAweGEwM2QyOGQ1MjJjNTM2ZGRVTCwKKysJCSAgMHgyODM5OWQ2NThmZDJiNjQ1VUwsIDB4NDllNWI3ZTE3YzI2NDFlMVVMLAorKwkvKiAgNjggKi8gMHg2ZjhjM2E5ODcwMDQ1N2E0VUwsIDB4NTA3OGYwYTI1ZWJiNjc3OFVMLAorKwkJICAweGQxM2MzY2NiYzM4Mjk2MGZVTCwgMHgyZTAwMzI1OGE3ZGY4NGIxVUwsCisrCS8qICA2OSAqLyAweDhhZDFmMzliZTYyOTZhMWNVTCwgMHhjMWVlYWE2NTJhNWZiZmIyVUwsCisrCQkgIDB4MzNlZTA2NzNmZDI2ZjNjYlVMLCAweDU5MjU2MTczYTY5ZDJjY2NVTCwKKysJLyogIDcwICovIDB4NDFlYTA3YWE0ZTE4ZmM0MVVMLCAweGQ5ZmMxOTUyN2M4N2E1MWVVTCwKKysJCSAgMHhiZGFhY2I4MDU4MzFjYTZmVUwsIDB4NDQ1YjY1MmRjOTE2Njk0ZlVMLAorKwkvKiAgNzEgKi8gMHhjZTkyYTNhN2YyMTcyMzE1VUwsIDB4MWVkYzI4MmRlMTFiOTk2NFVMLAorKwkJICAweGExODIzYWFmZTA0YzMxNGFVTCwgMHg3OTBhMmQ5NDQzN2NmNTg2VUwsCisrCS8qICA3MiAqLyAweDcxYzQ0N2ZiOTNmNmUwMDlVTCwgMHg4OTIyYTU2NzIyODQ1Mjc2VUwsCisrCQkgIDB4YmY3MDkwM2IyMDRmNTE2OVVMLCAweDJmN2E4OTg5MWJhMzE5ZmVVTCwKKysJLyogIDczICovIDB4MDJhMDhlYjU3N2UyMTQwY1VMLCAweGVkOWE0ZWQ0NDI3YmRjZjRVTCwKKysJCSAgMHg1MjUzZWM0NGU0MzIzY2QxVUwsIDB4M2U4ODM2M2MxNGU5MzU1YlVMLAorKwkvKiAgNzQgKi8gMHhhYTY2YzE0Mjc3MTEwYjhjVUwsIDB4MWFlMDM5MTYxMGEyMzM5MFVMLAorKwkJICAweDIwMzBiZDEyYzkzZmMyYTJVTCwgMHgzZWUxNDE1Nzk1NTVjN2FiVUwsCisrCS8qICA3NSAqLyAweDkyMTRkZTNhNmQ2ZTdkNDFVTCwgMHgzY2NkZDg4NjA3ZjE3ZWZlVUwsCisrCQkgIDB4Njc0ZjEyODhmOGUxMTIxN1VMLCAweDU2ODIyNTBmMzI5ZjkzZDBVTCwKKysJLyogIDc2ICovIDB4NmNmMDBiMTM2ZDJlMzk2ZVVMLCAweDZlNGNmODZmMTAxNGRlYmZVTCwKKysJCSAgMHg1OTMwYjFiNWJmY2M0ZTgzVUwsIDB4MDQ3MDY5YjQ4YWJhMTZiNlVMLAorKwkvKiAgNzcgKi8gMHgwZDRjZTRhYjY5YjIwNzkzVUwsIDB4YjI0ZGI5MWE5N2QwZmI5ZVVMLAorKwkJICAweGNkZmE1MGY1NGUwMGQwMWRVTCwgMHgyMjFiMTA4NTM2OGJkZGI1VUwsCisrCS8qICA3OCAqLyAweGU3ZTU5NDY4YjFlM2Q4ZDJVTCwgMHg1M2M1NjU2M2JkMTIyZjkzVUwsCisrCQkgIDB4ZWVlOGE5MDNlMDY2M2YwOVVMLCAweDYxZWZhNjYyY2JiZTNkNDJVTCwKKysJLyogIDc5ICovIDB4MmNmOGRkZGRkZTZlYWIyYVVMLCAweDliZjgwYWQ1MTQzNWYyMzFVTCwKKysJCSAgMHg1ZGVhZGFjZWM5ZjA0OTczVUwsIDB4MjkyNzViNWQ0MWQyOWIyN1VMLAorKwkvKiAgODAgKi8gMHhjZmRlMGYwODk1ZWJmMTRmVUwsIDB4YjlhYWI5NmIwNTQ5MDVhN1VMLAorKwkJICAweGNhZTgwZGQ5YTFjNDIwZmRVTCwgMHgwYTYzYmYyZjE2NzNiYmM3VUwsCisrCS8qICA4MSAqLyAweDA5MmY2ZTExOTU4ZmJjOGNVTCwgMHg2NzJhODFlODA0ODIyZmFkVUwsCisrCQkgIDB4Y2FjODM1MTU2MGQ1MjUxN1VMLCAweDZmM2Y3NzIyYzhmMTkyZjhVTCwKKysJLyogIDgyICovIDB4ZjhiYTkwY2NjMmU4OTRiN1VMLCAweDJjNzU1N2E0MzhmZjlmMGRVTCwKKysJCSAgMHg4OTRkMWQ4NTVhZTUyMzU5VUwsIDB4NjhlMTIyMTU3Yjc0M2Q2OVVMLAorKwkvKiAgODMgKi8gMHhkODdlNTU3MGNmYjkxOWYzVUwsIDB4M2YyY2RlY2Q5NTc5OGRiOVVMLAorKwkJICAweDIxMjExNTQ3MTBjMGEyY2VVTCwgMHgzYzY2YTExNTI0NmRjNWIyVUwsCisrCS8qICA4NCAqLyAweGNiZWRjNTYyMjk0ZWNiNzJVTCwgMHhiYTcxNDNjMzZhMjgwYjE2VUwsCisrCQkgIDB4OTYxMGMyZWZkNDA3OGI2N1VMLCAweDYxNDQ3MzVkOTQ2YTRiMWVVTCwKKysJLyogIDg1ICovIDB4NTM2ZjExMWVkNzViMzM1MFVMLCAweDAyMTFkYjhjMjA0MWQ4MWJVTCwKKysJCSAgMHhmOTNjYjEwMDBlMTA0MTNjVUwsIDB4MTQ5ZGZkM2MwMzllODg3NlVMLAorKwkvKiAgODYgKi8gMHhkNDc5ZGRlNDZiNjMxNTViVUwsIDB4YjY2ZTE1ZTkzYzgzNzk3NlVMLAorKwkJICAweGRhZmRlNDNiMWYxM2UwMzhVTCwgMHg1ZmFmZGExYTJlNGIwYjM1VUwsCisrCS8qICA4NyAqLyAweDM2MDBiYmRmMTcxOTc1ODFVTCwgMHgzOTcyMDUwYmJlM2NkMmMyVUwsCisrCQkgIDB4NTkzODkwNmRiZGQ1YmU4NlVMLCAweDM0ZmNlNWU0M2Y5Yjg2MGZVTCwKKysJLyogIDg4ICovIDB4NzVhOGE0Y2Q0MmQxNGQwMlVMLCAweDgyOGRhYmM1MzQ0MWRmNjVVTCwKKysJCSAgMHgzM2RjYWJlZGQyZTEzMWQzVUwsIDB4M2ViYWQ3NmZiODE0ZDI1ZlVMLAorKwkvKiAgODkgKi8gMHhkNDkwNmY1NjZmNzBlMTBmVUwsIDB4NWQxMmY3YWE1MTY5MGY1YVVMLAorKwkJICAweDQ1YWRiMTZlNzZjZWZjZjJVTCwgMHgwMWY3NjhhZWFkMjMyOTk5VUwsCisrCS8qICA5MCAqLyAweDJiNmNjNzdiNjI0OGZlYmRVTCwgMHgzY2QzMDYyOGVjM2FhZmZkVUwsCisrCQkgIDB4Y2UxYzBiODBkNGVmNDg2YVVMLCAweDRjM2JmZjJlYTZmNjZjMjNVTCwKKysJLyogIDkxICovIDB4M2YyZWM0MDk0YWVhZWI1ZlVMLCAweDYxYjE5YjI4NmUzNzJjYTdVTCwKKysJCSAgMHg1ZWVmYTk2NmRlMmE3MDFkVUwsIDB4MjNiMjA1NjVkZTU1ZTNlZlVMLAorKwkvKiAgOTIgKi8gMHhlMzAxY2E1Mjc5ZDU4NTU3VUwsIDB4MDdiMmQ0Y2UyN2MyODc0ZlVMLAorKwkJICAweGE1MzJjZDhhOWRjZjFkNjdVTCwgMHgyYTUyZmVlMjNmMmJmZjU2VUwsCisrCS8qICA5MyAqLyAweDg2MjRlZmIzN2NkODY2M2RVTCwgMHhiYmM3YWMyMGZmYmQ3NTk0VUwsCisrCQkgIDB4NTdiODVlOWM4MmQzNzQ0NVVMLCAweDdiMzA1MmNiODZhNmVjNjZVTCwKKysJLyogIDk0ICovIDB4MzQ4MmYwYWQyNTI1ZTkxZVVMLCAweDJjYjY4MDQzZDI4ZWRjYTBVTCwKKysJCSAgMHhhZjRmNmQwNTJlMWIwMDNhVUwsIDB4MTg1ZjhjMjUyOTc4MWIwYVVMLAorKwkvKiAgOTUgKi8gMHhhYTQxZGU1YmQ4MGNlMGQ2VUwsIDB4OTQwN2IyNDE2ODUzZTlkNlVMLAorKwkJICAweDU2M2VjMzZlMzU3ZjRjM2FVTCwgMHg0Y2M0YjhkZDBlMjk3YmNlVUwsCisrCS8qICA5NiAqLyAweGEyZmMxYTUyZmZiODczMGVVTCwgMHgxODExZjE2ZTY3MDU4ZTM3VUwsCisrCQkgIDB4MTBmOWEzNjZjZGRmNGVlMVVMLCAweDcyZjRhMGM0YTBiOWYwOTlVTCwKKysJLyogIDk3ICovIDB4OGMxNmMwNmY2NjNmNGVhN1VMLCAweDY5M2IzYWY3NGU5NzBmYmFVTCwKKysJCSAgMHgyMTAyZTdmMWQ2OWVjMzQ1VUwsIDB4MGJhNTNjYmM5NjhhODA4OVVMLAorKwkvKiAgOTggKi8gMHhjYTNkOWRjN2ZlYTE1NTM3VUwsIDB4NGM2ODI0YmI1MTUzNjQ5M1VMLAorKwkJICAweGI5ODg2MzE0ODQ0MDA2YjFVTCwgMHg0MGQyYTcyYWI0NTRjYzYwVUwsCisrCS8qICA5OSAqLyAweDU5MzZhMWI3MTI1NzA5NzVVTCwgMHg5MWI5ZDY0OGRlYmRhNjU3VUwsCisrCQkgIDB4MzM0NDA5NGJiNjQzMzBlYVVMLCAweDAwNmJhMTBkMTJlZTUxZDBVTCwKKysJLyogMTAwICovIDB4MTkyMjg0NjhmNWRlNWQ1OFVMLCAweDBlYjEyZjRjMzhjYzA1YjBVTCwKKysJCSAgMHhhMTAzOWY5ZGQ1NjAxOTkwVUwsIDB4NDUwMmQ0Y2U0ZmZmMGUwYlVMLAorKwkvKiAxMDEgKi8gMHhlYjIwNTQxMDY4MzdjMTg5VUwsIDB4ZDBmNjU0NGM2ZGQzYjkzY1VMLAorKwkJICAweDQwNzI3MDY0YzQxNmQ3NGZVTCwgMHg2ZTE1YzYxMTRiNTAyZWYwVUwsCisrCS8qIDEwMiAqLyAweDRkZjJhMzk4Y2ZiMWE3NmJVTCwgMHgxMTI1NmM3NDE5ZjJmNmIxVUwsCisrCQkgIDB4NGE0OTc5NjIwNjZlNjA0M1VMLCAweDcwNWIzYWFiNDEzNTViNDRVTCwKKysJLyogMTAzICovIDB4MzY1ZWY1MzZkNzk3YjFkOFVMLCAweDAwMDc2YmQ2MjJkZGYwZGJVTCwKKysJCSAgMHgzYmJmMzNiMGUwNTc1YTg4VUwsIDB4Mzc3N2FhMDVjOGU0Y2E0ZFVMLAorKwkvKiAxMDQgKi8gMHgzOTI3NDVjODU1NzhkYjVmVUwsIDB4NmZkYTQxNDlkYmFlNWFlMlVMLAorKwkJICAweGIxZjBiMDBiOGFkYzk4NjdVTCwgMHgwOTk2MzQzN2QzNmYxZGEzVUwsCisrCS8qIDEwNSAqLyAweDdlODI0ZTkwYTVkYzM4NTNVTCwgMHhjY2I1ZjY2NDFmMTM1Y2JkVUwsCisrCQkgIDB4NjczNmQ4NmM4N2NlOGZjY1VMLCAweDYyNWYzY2UyNjYwNDI0OWZVTCwKKysJLyogMTA2ICovIDB4YWY4YWM4MDU5NTAyZjYzZlVMLCAweDBjMDVlNzBhMmUzNTE0NjlVTCwKKysJCSAgMHgzNTI5MmU5Yzc2NGI2MzA1VUwsIDB4MWEzOTQzNjBjN2UyM2FjM1VMLAorKwkvKiAxMDcgKi8gMHhkNWM2ZDUzMjUxMTgzMjY0VUwsIDB4NjIwNjVhYmQ0M2MyYjc0ZlVMLAorKwkJICAweGI1ZmJmNWQwM2I5NzNmOWJVTCwgMHgxM2EzZGEzNjYxMjA2ZTVlVUwsCisrCS8qIDEwOCAqLyAweGM2YmQ1ODM3NzI1ZDk0ZTVVTCwgMHgxOGUzMDkxMjIwNTAxNmM1VUwsCisrCQkgIDB4MjA4OGNlMTU3MDAzM2M2OFVMLCAweDdmYmExZjQ5NWM4Mzc5ODdVTCwKKysJLyogMTA5ICovIDB4NWE4Yzc0MjNmMmY5MDc5ZFVMLCAweDE3MzUxNTdiMzQwMjNmYzVVTCwKKysJCSAgMHhlNGY5YjQ5YWQyZmFiMzUxVUwsIDB4NjY5MWZmNzJjODc4ZTMzY1VMLAorKwkvKiAxMTAgKi8gMHgxMjJjMmFkZWRjNWVmZjNlVUwsIDB4ZjhkZDRiZjFkODk1NmNmNFVMLAorKwkJICAweGViODYyMDVkOWU5ZTViZGFVTCwgMHgwNDliOTJiOWQ5NzVjNzQzVUwsCisrCS8qIDExMSAqLyAweGE1Mzc5NzMwYjBmNmMwNWFVTCwgMHg3MmEwZmZhY2M2ZjNhNTUzVUwsCisrCQkgIDB4YjAwMzJjMzRiMjBkY2Q2ZFVMLCAweDQ3MGU5ZGJjODhkNTE2NGFVTCwKKysJLyogMTEyICovIDB4YjE5Y2YxMGNhMjM3YzA0N1VMLCAweGI2NTQ2NjcxMWY2YzgxYTJVTCwKKysJCSAgMHhiMzMyMWJkMTZkZDgwYjQzVUwsIDB4NDhjMTRmNjAwYzVmYmU4ZVVMLAorKwkvKiAxMTMgKi8gMHg2NjQ1MWMyNjRhYTZjODAzVUwsIDB4YjY2ZTM5MDRhNGZhN2RhNlVMLAorKwkJICAweGQ0NWYxOWIwYjMxMjgzOTVVTCwgMHgzMTYwMjYyN2MzYzliYzEwVUwsCisrCS8qIDExNCAqLyAweDMxMjBkYzQ4MzJlNGUxMGRVTCwgMHhlYjIwYzQ2NzU2YzcxN2Y3VUwsCisrCQkgIDB4MDBmNTJlM2Y2NzI4MDI5NFVMLCAweDU2NmQ0ZmMxNDczMGM1MDlVTCwKKysJLyogMTE1ICovIDB4N2UzYTVkNDBmZDgzNzIwNlVMLCAweGMxZTkyNmRjNzE1OTU0N2FVTCwKKysJCSAgMHgyMTY3MzBmYmE2OGQ2MDk1VUwsIDB4MjJlOGMzODQzZjY5Y2VhN1VMLAorKwkvKiAxMTYgKi8gMHgzM2QwNzRlODkzMGU0YjJiVUwsIDB4YjZlNDM1MGU4NGQxNTgxNlVMLAorKwkJICAweDU1MzRjMjZhZDZiYTIzNjVVTCwgMHg3NzczYzEyZjg5ZjFmM2YzVUwsCisrCS8qIDExNyAqLyAweDhjYmE0MDRkYTU3OTYyYWFVTCwgMHg1Yjk4OTdhODE5OTljZTU2VUwsCisrCQkgIDB4NTA4ZTg2MmYxMjE2OTJmY1VMLCAweDNhODE5MDdmYTA5M2MyOTFVTCwKKysJLyogMTE4ICovIDB4MGRkZWQwZmY0NzI1YTUxMFVMLCAweDEwZDhjYzEwNjczZmM1MDNVTCwKKysJCSAgMHg1YjlkMTUxYzlmMWY0ZTg5VUwsIDB4MzJhNWMxZDVjYjA5YTQ0Y1VMLAorKwkvKiAxMTkgKi8gMHgxZTBhYTQ0MmI5MDU0MWZiVUwsIDB4NWY4NWViN2NjMWI0ODVkYlVMLAorKwkJICAweGJlZTU5NWNlOGE5ZGYyZTVVTCwgMHgyNWU0OTZjNzIyNDIyMjM2VUwsCisrCS8qIDEyMCAqLyAweDVlZGYzYzQ2Y2QwZmU1YjlVTCwgMHgzNGU3NWE3ZWQyYTQzMzg4VUwsCisrCQkgIDB4ZTQ4OGRlMTFkNzYxZTM1MlVMLCAweDBlODc4YTAxYTA4NTU0NWNVTCwKKysJLyogMTIxICovIDB4YmE0OTNjNzdlMDIxYmIwNFVMLCAweDJiNGQxODQzYzdkZjg5OWFVTCwKKysJCSAgMHg5ZWEzN2E0ODdhZTgwZDY3VUwsIDB4NjdhOTk1ODAxMWU0MTc5NFVMLAorKwkvKiAxMjIgKi8gMHg0YjU4MDUxYTY2OTdiMDY1VUwsIDB4NDdlMzNmN2Q4ZDZiYTZkNFVMLAorKwkJICAweGJiNGRhOGQ0ODNjYTQ2YzFVTCwgMHg2OGJlY2FhMTgxYzJkYjBkVUwsCisrCS8qIDEyMyAqLyAweDhkODk4MGU5MGI5ODlhYTVVTCwgMHhmOTVlYjE0YTJjOTNjOTliVUwsCisrCQkgIDB4NTFjNmM3YzQ3OTZlNzNhMlVMLCAweDZlMjI4MzYzYjVlZmI1NjlVTCwKKysJLyogMTI0ICovIDB4YzZiYmMwYjAyZGQ2MjRjOFVMLCAweDc3N2ViNDdkZWM4MTcwZWVVTCwKKysJCSAgMHgzY2RlMTVhMDA0Y2ZhZmE5VUwsIDB4MWRjNmJjMDg3MTYwYmY5YlVMLAorKwkvKiAxMjUgKi8gMHgyZTA3ZTA0M2VlYzM0MDAyVUwsIDB4MThlOWZjNjc3YTY4ZGM3ZlVMLAorKwkJICAweGQ4ZGEwMzE4OGJkMTViOWFVTCwgMHg0OGZiYzNiYjAwNTY4MjUzVUwsCisrCS8qIDEyNiAqLyAweDU3NTQ3ZDRjZmI2NTRjZTFVTCwgMHhkMzU2NWI4MmEwNThlMmFkVUwsCisrCQkgIDB4ZjYzZWFmMGJiZjE1NDQ3OFVMLCAweDQ3NTMxZWYxMTRkZmJiMThVTCwKKysJLyogMTI3ICovIDB4ZTFlYzYzMGE0Mjc4YzU4N1VMLCAweDU1MDdkNTQ2Y2E4ZTgzZjNVTCwKKysJCSAgMHg4NWUxMzVjNjNhZGMwYzJiVUwsIDB4MGFhN2VmYTg1NjgyODQ0ZVVMLAorKwkvKiAxMjggKi8gMHg3MjY5MWJhOGIzZTFmNjE1VUwsIDB4MzJiNGU5NzAxZmJlM2ZmYVVMLAorKwkJICAweDk3YjZkOTJlMzliYjc4NjhVTCwgMHgyY2ZlNTNkZWEwMmUzOWU4VUwsCisrCS8qIDEyOSAqLyAweDY4NzM5MmNkODVjZDUyYjBVTCwgMHgyN2ZmNjZjOTEwZTI5ODMxVUwsCisrCQkgIDB4OTcxMzQ1NTZhOTgzMmQwNlVMLCAweDI2OWJiMDM2MGE4NGY4YTBVTCwKKysJLyogMTMwICovIDB4NzA2ZTU1NDU3NjQzZjg1Y1VMLCAweDM3MzRhNDhjOWI1OTdkMWJVTCwKKysJCSAgMHg3YWVlOTFlOGM2ZWZhNDcyVUwsIDB4NWNkNmFiYzE5OGE5ZDllMFVMLAorKwkvKiAxMzEgKi8gMHgwZTA0ZGUwNmNiM2NlNDFhVUwsIDB4ZDhjNmViODkzNDAyZTEzOFVMLAorKwkJICAweDkwNDY1OWJiNjg2ZTM3NzJVTCwgMHg3MjE1YzM3MTc0NmJhOGM4VUwsCisrCS8qIDEzMiAqLyAweGZkMTJhOTdlZWFlNGEyZDlVTCwgMHg5NTE0Yjc1MTYzOTRmMmM1VUwsCisrCQkgIDB4MjY2ZmQ1ODA5MjA4ZjI5NFVMLCAweDVjODQ3MDg1NjE5YTI2YjlVTCwKKysJLyogMTMzICovIDB4NTI5ODU0MTBmZWQ2OTRlYVVMLCAweDNjOTA1YjkzNGEyZWQyNTRVTCwKKysJCSAgMHgxMGJiNDc2OTJkM2JlNDY3VUwsIDB4MDYzYjNkMmQ2OWU1ZTllMVVMLAorKwkvKiAxMzQgKi8gMHg0NzI3MjZlZWRkYTU3ZGViVUwsIDB4ZWZiNmM0YWUxMGY0MTg5MVVMLAorKwkJICAweDJiMTY0MTkxN2IzMDc2MTRVTCwgMHgxMTdjNTU0ZmM0ZjQ1YjdjVUwsCisrCS8qIDEzNSAqLyAweGMwN2NmMzExOGY5ZDg4MTJVTCwgMHgwMWRiZDgyMDUwMDE3OTM5VUwsCisrCQkgIDB4ZDdlODAzZjQxNzFiMjgyN1VMLCAweDEwMTVlODc0ODdkMjI1ZWFVTCwKKysJLyogMTM2ICovIDB4YzU4ZGUzZmVkMjNhY2M0ZFVMLCAweDUwZGI5MWMyOTRhN2JlMmRVTCwKKysJCSAgMHgwYjk0ZDQzZDFjOWNmNDU3VUwsIDB4NmIxNjQwZmE2ZTM3NTI0YVVMLAorKwkvKiAxMzcgKi8gMHg2OTJmMzQ2YzVmZGEwZDA5VUwsIDB4MjAwYjFjNTlmYTRkMzE1MVVMLAorKwkJICAweGI4YzQ2Zjc2MDc3N2EyOTZVTCwgMHg0YjM4Mzk1ZjNmZmRmYmNmVUwsCisrCS8qIDEzOCAqLyAweDE4ZDI1ZTAwYmU1NGQ2NzFVTCwgMHg2MGQ1MDU4MmJlYzhhYmE2VUwsCisrCQkgIDB4ODdhZDhmMjYzYjc4Yjk4MlVMLCAweDUwZmRmNjRlOWNkYTA0MzJVTCwKKysJLyogMTM5ICovIDB4OTBmNTY3YWFjNTc4ZGNmMFVMLCAweGVmMWU5YjBlZjJhMzEzM2JVTCwKKysJCSAgMHgwZWViYmE5MjQyZDlkZTcxVUwsIDB4MTU0NzNjOWJmMDMxMDFjN1VMLAorKwkvKiAxNDAgKi8gMHg3Yzc3ZThhZTU2Yjc4MDk1VUwsIDB4YjY3OGU3NjY2ZTZmMDc4ZVVMLAorKwkJICAweDJkYTBiOTYxNTM0OGJhMWZVTCwgMHg3Y2Y5MzFjMWZmNzMzZjBiVUwsCisrCS8qIDE0MSAqLyAweDI2YjM1N2Y1MGEwYTM2NmNVTCwgMHhlOTcwOGNmNDJiODdkNzMyVUwsCisrCQkgIDB4YzEzYWVlYTVmOTFjYjJjMFVMLCAweDM1ZDkwYzk5MTE0M2JiNGNVTCwKKysJLyogMTQyICovIDB4NDdjMWM0MDRhOWEwZDlkY1VMLCAweDY1OWU1ODQ1MTk3MmQyNTFVTCwKKysJCSAgMHgzODc1YThjNDczYjM4YzMxVUwsIDB4MWZiZDllZDM3OTU2MWYyNFVMLAorKwkvKiAxNDMgKi8gMHgxMWZhYmM2ZmQ0MWVjMjhkVUwsIDB4N2VmOGRmZTNjZDJhMmRjYVVMLAorKwkJICAweDcyZTczYjVkOGM0MDQ1OTVVTCwgMHg2MTM1ZmE0OTU0YjcyZjI3VUwsCisrCS8qIDE0NCAqLyAweGNjZmMzMmEyZGUyNGI2OWNVTCwgMHgzZjU1Njk4YzFmMDk1ZDg4VUwsCisrCQkgIDB4YmUzMzUwZWQ1YWMzZjkyOVVMLCAweDVlOWJmODA2Y2E0NzdlZWJVTCwKKysJLyogMTQ1ICovIDB4ZTljZThmYjYzYzMwOWY2OFVMLCAweDUzNzZmNjM1NjVlMWY5ZjRVTCwKKysJCSAgMHhkMWFmY2ZiMzVhNjM5M2YxVUwsIDB4NjYzMmExZWRlNTYyMzUwNlVMLAorKwkvKiAxNDYgKi8gMHgwYjdkNmMzOTBjMmRlZDRjVUwsIDB4NTZjYjMyODFkZjA0Y2IxZlVMLAorKwkJICAweDY2MzA1YTEyNDllY2MzYzdVTCwgMHg1ZDU4OGI2MGEzOGNhNzJhVUwsCisrCS8qIDE0NyAqLyAweGE2ZWNiZjc4ZThlNWY0MmRVTCwgMHg4NmVlYjQ0YjNjOGEzZWVjVUwsCisrCQkgIDB4ZWMyMTljNDhmYmQyMTYwNFVMLCAweDFhYWYxYWY1MTdjMzY3MzFVTCwKKysJLyogMTQ4ICovIDB4YzMwNmEyODM2NzY5YmRlN1VMLCAweDIwODI4MDYyMmIxZTJhZGJVTCwKKysJCSAgMHg4MDI3ZjUxZmZiZmY5NGE2VUwsIDB4NzZjZmExY2UxMTI0ZjI2YlVMLAorKwkvKiAxNDkgKi8gMHgxOGViMDA1NjI0MjJhYmI2VUwsIDB4ZjM3N2M0ZDU4ZjhjMjljM1VMLAorKwkJICAweDRkYmJjMjA3ZjUzMTU2MWFVTCwgMHgwMjUzYjdmMDgyMTI4YTI3VUwsCisrCS8qIDE1MCAqLyAweDNkMWYwOTFjYjYyYzE3ZTBVTCwgMHg0ODYwZTFhYmQ2NDYyOGE5VUwsCisrCQkgIDB4NTJkMTc0MzYzMDlkNDI1M1VMLCAweDM1NmY5N2UxM2VmYWU1NzZVTCwKKysJLyogMTUxICovIDB4ZDM1MWUxMWFhMTUwNTM1YlVMLCAweDNlNmI0NWJiMWRkODc4Y2NVTCwKKysJCSAgMHgwYzc3NjEyOGJlZDkyYzk4VUwsIDB4MWQzNGFlOTMwMzI4ODViOFVMLAorKwkvKiAxNTIgKi8gMHg0YmEwNDg4Y2E4NWJhNGMzVUwsIDB4OTg1MzQ4YzMzYzljZTZjZVVMLAorKwkJICAweDY2MTI0YzZmOTdiZGE3NzBVTCwgMHgwZjgxYTAyOTA2NTQxMjRhVUwsCisrCS8qIDE1MyAqLyAweDllZDA5Y2E2NTY5Yjg2ZmRVTCwgMHg4MTEwMDlmZDE4YWY5YTJkVUwsCisrCQkgIDB4ZmYwOGQwM2Y5M2Q4YzIwYVVMLCAweDUyYTE0ODE5OWZhZWYyNmJVTCwKKysJLyogMTU0ICovIDB4M2UwM2Y5ZGMyZDhkMWI3M1VMLCAweDQyMDU4MDE4NzM5NjFhNzBVTCwKKysJCSAgMHhjMGQ5ODdmMDQxYTM1OTcwVUwsIDB4MDdhYTFmMTVhMWMwZDU0OVVMLAorKwkvKiAxNTUgKi8gMHhkZmQ0NmNlMDhjZDI3MjI0VUwsIDB4NmQwYTAyNGY5MzRlNDIzOVVMLAorKwkJICAweDgwOGE3YTYzOTk4OTdiNTlVTCwgMHgwYTQ1NTZlOWUxM2Q5NWEyVUwsCisrCS8qIDE1NiAqLyAweGQyMWE5OTFmZTljMTMwNDVVTCwgMHg5YjBlODU0OGZlNzc1MWI4VUwsCisrCQkgIDB4NWRhNjQzY2I0YmYzMDAzNVVMLCAweDc3ZGIyOGQ2Mzk0MGY3MjFVTCwKKysJLyogMTU3ICovIDB4ZmM1ZWViNjE0YWRjOTAxMVVMLCAweDUyMjk0MTlhZThjNDExZWJVTCwKKysJCSAgMHg5ZWMzZTc3ODdkMWRjZjc0VUwsIDB4MzQwZDA1M2UyMTZlNGNiNVVMLAorKwkvKiAxNTggKi8gMHhjYWM3YWYzOWI0OGRmMmI0VUwsIDB4YzBmYWVjMjg3MWExMGE5NFVMLAorKwkJICAweDE0MGE2OTI0NWNhNTc1ZWRVTCwgMHgwY2YxYzM3MTM0MjczYTRjVUwsCisrCS8qIDE1OSAqLyAweGM4ZWUzMDZhYzIyNGI4YTVVTCwgMHg1N2VhZWU3Y2NiNDkzMGIwVUwsCisrCQkgIDB4YTFlODA2YmRhYWNiZTc0ZlVMLCAweDdkOWE2Mjc0MmVlYjY1N2RVTCwKKysJLyogMTYwICovIDB4OWViNmI2ZWY1NDZjNDgzMFVMLCAweDg4NWNjYTFmZGRiMzZlMmVVTCwKKysJCSAgMHhlNmI5ZjM4M2VmMGQ3MTA1VUwsIDB4NTg2NTRmZWY5ZDJlMDQxMlVMLAorKwkvKiAxNjEgKi8gMHhhOTA1YzRmZmJlMGU4ZTI2VUwsIDB4OTQyZGU1ZGY5YjMxODE2ZVVMLAorKwkJICAweDQ5N2Q3MjNmODAyZTg4ZTFVTCwgMHgzMDY4NGRlYTYwMmY0MDhkVUwsCisrCS8qIDE2MiAqLyAweDIxZTVhMjc4YTNlNmNiMzRVTCwgMHhhZWZiNmU2ZjViMTUxZGM0VUwsCisrCQkgIDB4YjMwYjhlMDQ5ZDc3Y2ExNVVMLCAweDI4YzNjOWNmNTNiOTg5ODFVTCwKKysJLyogMTYzICovIDB4Mjg3ZmI3MjE1NTZjZGQyYVVMLCAweDBkMzE3Y2E4OTcwMjIyNzRVTCwKKysJCSAgMHg3NDY4Yzc0MjNhNTQzMjU4VUwsIDB4NGE3ZjExNDY0ZWI1NjQyZlVMLAorKwkvKiAxNjQgKi8gMHhhMjM3YTQ3NzRkMTkzYWE2VUwsIDB4ZDg2NTk4NmVhOTIxMjlhMVVMLAorKwkJICAweDI0YzUxNWVjZjg3YzFhODhVTCwgMHg2MDQwMDM1NzVmMzlmNWViVUwsCisrCS8qIDE2NSAqLyAweDQ3YjlmMTg5NTcwYTliMjdVTCwgMHgyYjk4Y2VkZTQ2NWU0Yjc4VUwsCisrCQkgIDB4MDI2ZGY1NTFkYmI4NWMyMFVMLCAweDc0ZmNkOTEwNDdlMjE5MDFVTCwKKysJLyogMTY2ICovIDB4MTNlMmE5MGEyM2MxYmZhM1VMLCAweDBjYjAwNzRlNDc4NTE5ZjZVTCwKKysJCSAgMHg1ZmYxY2JiZTNhZjZjZjQ0VUwsIDB4NjdmZTU0MzhiZTgxMmRiZVVMLAorKwkvKiAxNjcgKi8gMHhkMTNjZjY0ZmE0MGYwNWIwVUwsIDB4MDU0ZGZiMmYzMjI4Mzc4N1VMLAorKwkJICAweDQxNzM5MTViN2YwZDJhZWFVTCwgMHg0ODJmMTQ0ZjFmNjEwZDRlVUwsCisrCS8qIDE2OCAqLyAweGY2MjEwMjAxYjQ3ZjgyMzRVTCwgMHg1ZDBhZTE5MjllNzBiOTkwVUwsCisrCQkgIDB4ZGNkN2Y0NTViMDQ5NTY3Y1VMLCAweDdlOTNkMGYxZjA5MTZmMDFVTCwKKysJLyogMTY5ICovIDB4ZGQ3OWNiZjE4YTdkYjRmYVVMLCAweGJlODM5MWJmNmY3NGM2MmZVTCwKKysJCSAgMHgwMjcxNDVkMTRiODI5MWJkVUwsIDB4NTg1YTczZWEyY2JmMTcwNVVMLAorKwkvKiAxNzAgKi8gMHg0ODVjYTAzZTkyOGEwZGIyVUwsIDB4MTBmYzAxYTU3NDI4NTdlN1VMLAorKwkJICAweDJmNDgyZWRiZDZkNTUxYTdVTCwgMHgwZjA0MzNiNTA0OGZkYjhhVUwsCisrCS8qIDE3MSAqLyAweDYwZGEyZThkZDdkYzYyNDdVTCwgMHg4OGI0YzlkMzhjZDQ4MTlhVUwsCisrCQkgIDB4MTMwMzNhYzAwMWY2NjY5N1VMLCAweDI3M2IyNGZlM2IzNjdkNzVVTCwKKysJLyogMTcyICovIDB4YzZlOGY2NmEzMWIzYjlkNFVMLCAweDI4MTUxNGE0OTRkZjQ5ZDVVTCwKKysJCSAgMHhkMTcyNmZkZmM4YjIzZGE3VUwsIDB4NGIzYWU3ZDEwM2RlZTU0OFVMLAorKwkvKiAxNzMgKi8gMHhjNjI1NmUxOWNlNGI5ZDdlVUwsIDB4ZmY1YzVjZjE4NmUzYzYxY1VMLAorKwkJICAweGFjYzYzY2EzNGI4ZWMxNDVVTCwgMHg3NDYyMTg4OGZlZTY2NTc0VUwsCisrCS8qIDE3NCAqLyAweDk1NmY0MDk2NDUyOTBhMWVVTCwgMHhlZjBiZjhlMzI2M2E5NjJlVUwsCisrCQkgIDB4ZWQ2YTUwZWI1ZWMyNjQ3YlVMLCAweDA2OTQyODNhOWRjYTc1MDJVTCwKKysJLyogMTc1ICovIDB4NzY5Yjk2MzY0M2EyZGNkMVVMLCAweDQyYjdjOGVhMDlmYzUzNTNVTCwKKysJCSAgMHg0ZjAwMmFlZTEzMzk3ZWFiVUwsIDB4NjMwMDVlMmMxOWI3ZDYzYVVMLAorKwkvKiAxNzYgKi8gMHhjYTY3MzZkYTYzMDIzYmVhVUwsIDB4OTY2YzdmNmRiMTJhOTliN1VMLAorKwkJICAweGFjZTA5MzkwYzUzN2M1ZTFVTCwgMHgwYjY5NjA2M2ExYWE4OWVlVUwsCisrCS8qIDE3NyAqLyAweGViYjAzZTk3Mjg4YzU2ZTVVTCwgMHg0MzJhOWY5ZjkzOGM4YmU4VUwsCisrCQkgIDB4YTZhNWE5M2Q1YjcxN2Y3MVVMLCAweDFhNWZiNGMzZTE4ZjlkOTdVTCwKKysJLyogMTc4ICovIDB4MWM5NGU3YWQxYzYwY2RjZVVMLCAweGVlMjAyYTQzZmMwMmM0YTBVTCwKKysJCSAgMHg4ZGFmZTRkODY3YzQ2YTIwVUwsIDB4MGExMDI2M2M4YWMyN2I1OFVMLAorKwkvKiAxNzkgKi8gMHhkMGRlYTlkZmU0NDMyYTRhVUwsIDB4ODU2YWY4N2JiZTkyNzdjNVVMLAorKwkJICAweGNlODQ3MmFjYzIxMmM3MWFVTCwgMHg2ZjE1MWI2ZDliYmIxZTkxVUwsCisrCS8qIDE4MCAqLyAweDI2Nzc2YzUyN2NlZWQ1NmFVTCwgMHg3ZDIxMWNiN2ZiZjhmYWVjVUwsCisrCQkgIDB4MzdhZTY2YTZmZDQ2MDljY1VMLCAweDFmODFiNzAyZDI3NzBjNDJVTCwKKysJLyogMTgxICovIDB4MmZiMGIwNTdlYWM1ODM5MlVMLCAweGUxZGQ4OWZlMjk3NDRlOWRVTCwKKysJCSAgMHhjOTY0ZjhlYjE3YmViNGY4VUwsIDB4Mjk1NzEwNzNjOWEyZDQxZVVMLAorKwkvKiAxODIgKi8gMHhhOTQ4YTE4OTgxYzBlMjU0VUwsIDB4MmRmNjM2OWI2NWIyMjgzMFVMLAorKwkJICAweGEzM2ViMmQ3NWZjZmQzYzZVTCwgMHgwNzhjZDZlYzQxOTlhMDFmVUwsCisrCS8qIDE4MyAqLyAweDRhNTg0YTQxYWQ5MDBkMmZVTCwgMHgzMjE0MmI3OGUyYzc0YzUyVUwsCisrCQkgIDB4NjhjNGU4MzM4NDMxYzk3OFVMLCAweDdmNjllYTkwMDg2ODlmYzJVTCwKKysJLyogMTg0ICovIDB4NTJmMmM4MWU0NmEzODI2NVVMLCAweGZkNzgwNzJkMDRhODMyZmRVTCwKKysJCSAgMHg4Y2Q3ZDVmYTI1MzU5ZTk0VUwsIDB4NGRlNzFiNzQ1NGNjMjlkMlVMLAorKwkvKiAxODUgKi8gMHg0MmViNjBhZDFlZGE2YWM5VUwsIDB4MGFhZDM3ZGZkYmMwOWMzYVVMLAorKwkJICAweDgxMDA0YjcxZTMzY2MxOTFVTCwgMHg0NGU2YmUzNDUxMjI4MDNjVUwsCisrCS8qIDE4NiAqLyAweDAzZmU4Mzg4YmExOTIwZGJVTCwgMHhmNWQ1N2MzMjE1MGRiMDA4VUwsCisrCQkgIDB4NDljOGM0MjgxYWY2MGMyOVVMLCAweDIxZWRiNTE4ZGU3MDFhZWVVTCwKKysJLyogMTg3ICovIDB4N2ZiNjNlNDE4ZjA2ZGM5OVVMLCAweGE0NDYwZDk5YzE2NmQ3YjhVTCwKKysJCSAgMHgyNGRkNTI0OGNlNTIwYTgzVUwsIDB4NWVjM2FkNzEyYjkyODM1OFVMLAorKwkvKiAxODggKi8gMHgxNTAyMmE1ZmJkMTc5MzBmVUwsIDB4YTRmNjRhNzdkODI1NzBlM1VMLAorKwkJICAweDEyYmM4ZDY5MTU3ODM3MTJVTCwgMHg0OTgxOTRjMGZjNjIwYWJiVUwsCisrCS8qIDE4OSAqLyAweDM4YTJkOWQyNTU2ODZjODJVTCwgMHg3ODVjNmJkOTE5M2UyMWYwVUwsCisrCQkgIDB4ZTRkNWM4MWFiMjRhNTQ4NFVMLCAweDU2MzA3ODYwYjJlMjA5ODlVTCwKKysJLyogMTkwICovIDB4NDI5ZDU1Zjc4YjRkNzRjNFVMLCAweDIyZjE4MzQ2NDMzNTAxMzFVTCwKKysJCSAgMHgxZTYwYzI0NTk4YzcxZmZmVUwsIDB4NTlmMmYwMTQ5Nzk5ODNlZlVMLAorKwkvKiAxOTEgKi8gMHg0NmE0N2Q1NmViNDk0YTQ0VUwsIDB4M2UyMmE4NTRkNjM2YTE4ZVVMLAorKwkJICAweGIzNDZlMTUyNzQ0OTFjM2JVTCwgMHgyY2VhZmQ0ZTUzOTBjZGU3VUwsCisrCS8qIDE5MiAqLyAweGJhOGE4NTM4YmUwZDY2NzVVTCwgMHg0YjkwNzRiYjUwODE4ZTIzVUwsCisrCQkgIDB4Y2JkYWI4OTA4NWQzMDRjM1VMLCAweDYxYTI0ZmUwZTU2MTkyYzRVTCwKKysJLyogMTkzICovIDB4Y2I3NjE1ZTZkYjUyNWJjYlVMLCAweGRkN2Q4YzM1YTU2N2U0Y2FVTCwKKysJCSAgMHhlNmI0MTUzYWNhZmNkZDY5VUwsIDB4MmQ2NjhlMDk3ZjNjOTc2NlVMLAorKwkvKiAxOTQgKi8gMHhhNTdlN2UyNjVjZTU1ZWYwVUwsIDB4NWQ5ZjRlNTI3Y2Q0Yjk2N1VMLAorKwkJICAweGZiYzgzNjA2NDkyZmQxZTVVTCwgMHgwOTBkNTJiZWI3YzNmN2FlVUwsCisrCS8qIDE5NSAqLyAweDA5Yjk1MTVhMWU3YjRkN2NVTCwgMHgxZjI2NmEyNTk5ZGE0NGMwVUwsCisrCQkgIDB4YTFjNDk1NDhlMmM1NTUwNFVMLCAweDdlZjA0Mjg3MTI2ZjE1Y2NVTCwKKysJLyogMTk2ICovIDB4ZmVkMTY1OWRiZDMwZWYxNVVMLCAweDhiNGFiOWVlYzRlMDI3N2JVTCwKKysJCSAgMHg4ODRkNjIzNmE1ZGYzMjkxVUwsIDB4MWZkOTZlYTZiZjVjZjc4OFVMLAorKwkvKiAxOTcgKi8gMHg0MmExNjE5ODFmMTkwZDlhVUwsIDB4NjFkODQ5NTA3ZTYwNTJjMVVMLAorKwkJICAweDlmZTExM2JmMjg1YTJjZDVVTCwgMHg3YzIyZDY3NmRiYWQ4NWQ4VUwsCisrCS8qIDE5OCAqLyAweDgyZTc3MGVkMmJmYmQyN2RVTCwgMHg0YzA1YjJlY2U5OTZmNWE1VUwsCisrCQkgIDB4Y2Q0MGE5YzJiMDkwMDE1MFVMLCAweDU4OTUzMTkyMTNkOWJmNjRVTCwKKysJLyogMTk5ICovIDB4ZTdjYzVkNzAzZmVhMmUwOFVMLCAweGI1MGM0OTEyNThlMjE4OGNVTCwKKysJCSAgMHhjY2UzMGJhYTQ4MjA1YmYwVUwsIDB4NTM3YzY1OWNjZmEzMmQ2MlVMLAorKwkvKiAyMDAgKi8gMHgzN2I2NjIzYTk4Y2ZjMDg4VUwsIDB4ZmU5YmVkMWZhNGQ2YWNhNFVMLAorKwkJICAweDA0ZDI5YjhlNTZhOGQxYjBVTCwgMHg3MjVmNzFjNDBiNTE5NTc1VUwsCisrCS8qIDIwMSAqLyAweDI4YzdmODljZDAzMzljZTZVTCwgMHg4MzY3YjE0NDY5ZGRjMThiVUwsCisrCQkgIDB4ODgzYWRhODNhNmExNjUyY1VMLCAweDU4NWYxOTc0MDM0ZDZjMTdVTCwKKysJLyogMjAyICovIDB4ODljZmIyNjZmMWIxOTE4OFVMLCAweGU2M2I0ODYzZTdjMzUyMTdVTCwKKysJCSAgMHhkODhjOWRhNmI0YzA1MjZhVUwsIDB4M2UwMzVjOWRmMDk1NDYzNVVMLAorKwkvKiAyMDMgKi8gMHhkZDlkNTQxMmZiNDVkZTlkVUwsIDB4ZGQ2ODQ1MzJlNGNmZjQwZFVMLAorKwkJICAweDRiNWM5OTliMTUxZDY3MWNVTCwgMHgyZDhjMmNjODExZTdmNjkwVUwsCisrCS8qIDIwNCAqLyAweDdmNTRiZTFkOTAwNTVkNDBVTCwgMHhhNDY0YzVkZjQ2NGFhZjQwVUwsCisrCQkgIDB4MzM5Nzk2MjRmMGU5MTdiZVVMLCAweDJjMDE4ZGM1MjczNTZiMzBVTCwKKysJLyogMjA1ICovIDB4YTU0MTUwMjRlMzMwYjNkNFVMLCAweDczZmYzZDk2NjkxNjUyZDNVTCwKKysJCSAgMHg5NGVjNDJjNGVmOWI1OWYxVUwsIDB4MDc0NzIwMTYxOGQwOGU1YVVMLAorKwkvKiAyMDYgKi8gMHg0ZDZjYTQ4YWNhNDExYzUzVUwsIDB4NjY0MTVmMmZjZmE2NjExOVVMLAorKwkJICAweDljNGRkNDAwNTFlMjI3ZmZVTCwgMHg1OTgxMGJjMDlhMDJmN2ViVUwsCisrCS8qIDIwNyAqLyAweDJhN2ViMTcxYjNkYzEwMWRVTCwgMHg0NDFjNWFiOTlmZmVmNjhlVUwsCisrCQkgIDB4MzIwMjVjOWI5M2IzNTllYVVMLCAweDVlOGNlMGE3MWU5ZDExMmZVTCwKKysJLyogMjA4ICovIDB4YmZjY2NiOTI0Mjk1MDNmZFVMLCAweGQyNzFiYTc1MmYwOTVkNTVVTCwKKysJCSAgMHgzNDVlYWQ1ZTk3MmQwOTFlVUwsIDB4MThjOGRmMTFhODMxMDNiYVVMLAorKwkvKiAyMDkgKi8gMHg5MGNkOTQ5YTlhZWQwZjRjVUwsIDB4YzVkMWY0Y2I2NjYwZTM3ZVVMLAorKwkJICAweGI4Y2FjNTJkNTZjNTJlMGJVTCwgMHg2ZTQyZTQwMGM1ODA4ZTBkVUwsCisrCS8qIDIxMCAqLyAweGEzYjQ2OTY2ZWVhZWZkMjNVTCwgMHgwYzRmMWYwYmUzOWVjZGNhVUwsCisrCQkgIDB4MTg5ZGM4YzlkNjgzYTUxZFVMLCAweDUxZjI3ZjA1NGMwOTM1MWJVTCwKKysJLyogMjExICovIDB4NGM0ODdjY2QyYTMyMDY4MlVMLCAweDU4N2VhOTViYjNkZjFjOTZVTCwKKysJCSAgMHhjOGNjZjc5ZTU1NWNiOGU4VUwsIDB4NTQ3ZGM4MjlhMjA2ZDczZFVMLAorKwkvKiAyMTIgKi8gMHhiODIyYTZjZDgwYzM5YjA2VUwsIDB4ZTk2ZDU0NzMyMDAwZDRjNlVMLAorKwkJICAweDI4NTM1YjZmOTE0NjNiNGRVTCwgMHgyMjhmNDY2MGUyNDg2ZTFkVUwsCisrCS8qIDIxMyAqLyAweDk4Nzk5NTM4ZGU4ZDNhYmZVTCwgMHg4Y2Q4MzMwMDQ1ZWJjYTZlVUwsCisrCQkgIDB4Nzk5NTJhMDA4MjIxZTczOFVMLCAweDQzMjJlMWE3NTM1Y2QyYmJVTCwKKysJLyogMjE0ICovIDB4YjExNGMxMTgxOWQxODAxY1VMLCAweDIwMTZlNGQ4NGYzZjVlYzdVTCwKKysJCSAgMHhkZDBlMmRmNDA5MjYwZjRjVUwsIDB4NWVjMzYyYzBhZTVmNzI2NlVMLAorKwkvKiAyMTUgKi8gMHhjMDQ2MmIxOGI4YjJiNGVlVUwsIDB4N2NjOGQ5NTAyNzRkMWFmYlVMLAorKwkJICAweGYyNWY3MTA1NDM2YjAyZDJVTCwgMHg0M2JiZjhkY2JmZjljY2QzVUwsCisrCS8qIDIxNiAqLyAweGI2YWQxNzY3YTAzOWU5ZGZVTCwgMHhiMDcxNGRhOGY2OWQzNTgzVUwsCisrCQkgIDB4NWU1NWZhMThiNDI5MzFmNVVMLCAweDRlZDU1NThmMzNjNjA5NjFVTCwKKysJLyogMjE3ICovIDB4MWZlMzc5MDFjNjQ3YTVkZFVMLCAweDU5M2RkZjFmODA4MWQzNTdVTCwKKysJCSAgMHgwMjQ5YTRmZDgxM2ZkN2E2VUwsIDB4NjlhY2NhMjc0ZTljYWY2MVVMLAorKwkvKiAyMTggKi8gMHgwNDdiYTNlYTMzMDcyMWM5VUwsIDB4ODM0MjNmYzIwZTdlMWVhMFVMLAorKwkJICAweDFkZjRjMGFmMDEzMTRhNjBVTCwgMHgwOWE2MmRhYjg5Mjg5NTI3VUwsCisrCS8qIDIxOSAqLyAweGE1YjMyNWE0OWNjNmNiMDBVTCwgMHhlOTRiNWRjNjU0YjU2Y2I2VUwsCisrCQkgIDB4M2JlMjg3NzlhZGM5OTRhMFVMLCAweDQyOTZlOGY4YmEzYTRhYWRVTCwKKysJLyogMjIwICovIDB4MzI4Njg5NzYxZTQ1MWVhYlVMLCAweDJlNGQ1OThiZmY1OTU5NGFVTCwKKysJCSAgMHg0OWI5Njg1M2Q3YTcwODRhVUwsIDB4NDk4MGEzMTk2MDE0MjBhOFVMLAorKwkvKiAyMjEgKi8gMHg5NTY1YjllMTJmNTUyYzQyVUwsIDB4OGE1MzE4ZGI3MTAwZmU5NlVMLAorKwkJICAweDA1YzkwYjRkNDNhZGQwZDdVTCwgMHg1MzhiNGNkNjZhNWQ0ZWRhVUwsCisrCS8qIDIyMiAqLyAweGY0ZTk0ZmMzZTg5ZjAzOWZVTCwgMHg1OTJjOWFmMjZmNjE4MDQ1VUwsCisrCQkgIDB4MDhhMzZlYjVmZDRiOTU1MFVMLCAweDI1ZmZmYWY2YzJlZDE0MTlVTCwKKysJLyogMjIzICovIDB4MzQ0MzQ0NTljYzc5ZDM1NFVMLCAweGVlZWNiZmI0YjFkNTQ3NmJVTCwKKysJCSAgMHhkZGViMzRhMDYxNjE1ZDk5VUwsIDB4NTEyOWNlY2NlYjY0Yjc3M1VMLAorKwkvKiAyMjQgKi8gMHhlZTQzMjE1ODk0OTkzNTIwVUwsIDB4NzcyZjljN2NmMTRjMGIzYlVMLAorKwkJICAweGQyZTJmY2UzMDZiZWRhZDVVTCwgMHg3MTVmNDJiNTQ2ZjA2YTk3VUwsCisrCS8qIDIyNSAqLyAweDQzNGVjZGNlZGE1YjVmMWFVTCwgMHgwZGExNzExNWE0OTc0MWE5VUwsCisrCQkgIDB4NjgwYmQ3N2M3M2VkYWQyZVVMLCAweDQ4N2MwMjM1NGVkZDkwNDFVTCwKKysJLyogMjI2ICovIDB4YjhlZmVmZjNhNzBlZDljNFVMLCAweDU2YTMyYWEzZTg1N2UzMDJVTCwKKysJCSAgMHhkZjNhNjhiZDQ4YTJhNWEwVUwsIDB4MDdmNjUwYjczMTc2YzQ0NFVMLAorKwkvKiAyMjcgKi8gMHhlMzhiOWIxNjI2ZTBjY2IxVUwsIDB4NzllMDUzYzE4YjA5ZmIzNlVMLAorKwkJICAweDU2ZDkwMzE5YzlmOTQ5NjRVTCwgMHgxY2E5NDFlN2FjOWZmNWM0VUwsCisrCS8qIDIyOCAqLyAweDQ5YzRkZjI5MTYyZmEwYmJVTCwgMHg4NDg4Y2YzMjgyYjMzMzA1VUwsCisrCQkgIDB4OTVkZmRhMTRjYWJiNDM3ZFVMLCAweDMzOTFmNzgyNjRkNWFkODZVTCwKKysJLyogMjI5ICovIDB4NzI5YWUwNmFlMmI1MDk1ZFVMLCAweGQ1OGE1OGQ3MzI1OWE5NDZVTCwKKysJCSAgMHhlOTgzNDI2MmQxMzkyMWVkVUwsIDB4MjdmZWRhZmFhNTRiYjU5MlVMLAorKwkvKiAyMzAgKi8gMHhhOTlkYzViODI5YWQ0OGJiVUwsIDB4NWYwMjU3NDI0OTllZTI2MFVMLAorKwkJICAweDgwMmM4ZWNkNWQ3NTEzZmRVTCwgMHg3OGNlYjNlZjNmNmRkOTM4VUwsCisrCS8qIDIzMSAqLyAweGMzNDJmNDRmOGExMzVkOTRVTCwgMHg3YjllZGI0NDgyOGNkZGEzVUwsCisrCQkgIDB4OTQzNmQxMWEwNTM3Y2ZlN1VMLCAweDUwNjRiMTY0ZWMxYWI0YzhVTCwKKysJLyogMjMyICovIDB4NzAyMGVjY2ZkMzdlYjJmY1VMLCAweDFmMzFlYTNlZDkwZDI1ZmNVTCwKKysJCSAgMHgxYjkzMGQ3YmRmYTFiYjM0VUwsIDB4NTM0NDQ2N2E0ODExMzA0NFVMLAorKwkvKiAyMzMgKi8gMHg3MDA3MzE3MGYyNWU2ZGZiVUwsIDB4ZTM4NWRjMWE1MDExNGNjOFVMLAorKwkJICAweDIzNDg2OThhYzhmYzRmMDBVTCwgMHgyYTc3YTU1Mjg0ZGQ0MGQ4VUwsCisrCS8qIDIzNCAqLyAweGZlMDZhZmUwYzk4YzZjZTRVTCwgMHhjMjM1ZGY5NmRkZGZkNmU0VUwsCisrCQkgIDB4MTQyOGQwMWUzM2JmMWVkM1VMLCAweDc4NTc2OGVjOTMwMGJkYWZVTCwKKysJLyogMjM1ICovIDB4OTcwMmU1N2E5MWRlYjYzYlVMLCAweDYxYmRiOGJmZTVjZThiODBVTCwKKysJCSAgMHg2NDViNDI2ZjNkMWQ1OGFjVUwsIDB4NDgwNGE4MjIyN2E1NTdiY1VMLAorKwkvKiAyMzYgKi8gMHg4ZTU3MDQ4YWI0NGQyNjAxVUwsIDB4NjhkNjUwMWE0YjNhNjkzNVVMLAorKwkJICAweGMzOWM5ZWMzZjllMWMyOTNVTCwgMHg0MTcyZjI1N2Q0ZGU2M2UyVUwsCisrCS8qIDIzNyAqLyAweGQzNjhiNDUwMzMwYzY0MDFVTCwgMHgwNDBkMzAxNzQxOGYyMzkxVUwsCisrCQkgIDB4MmMzNGJiNjA5MGI3ZDkwZFVMLCAweDE2ZjY0OTIyOGZkZmQ1MWZVTCwKKysJLyogMjM4ICovIDB4YmVhNjgxOGUyYjkyOGVmNVVMLCAweGUyOGNjZjkxY2RjMTFlNzJVTCwKKysJCSAgMHg1OTRhYWE2OGU3N2EzNmNkVUwsIDB4MzEzMDM0ODA2YzdmZmQwZlVMLAorKwkvKiAyMzkgKi8gMHg4YTlkMjdhYzIyNDliZDY1VUwsIDB4MTlhM2I0NjQwMThlOTUxMlVMLAorKwkJICAweGMyNmNjZmYzNTJiMzdlYzdVTCwgMHgwNTZmNjgzNDFkNzk3YjIxVUwsCisrCS8qIDI0MCAqLyAweDVlNzlkNjc1N2VmZDIzMjdVTCwgMHhmYWJkYmNiNjU1M2FmZTE1VUwsCisrCQkgIDB4ZDNlNzIyMmM2ZWFmNWE2MFVMLCAweDcwNDZjNzZkNGRhZTc0M2JVTCwKKysJLyogMjQxICovIDB4NjYwYmU4NzJiMThkNGE1NVVMLCAweDE5OTkyNTE4NTc0ZTE0OTZVTCwKKysJCSAgMHhjMTAzMDUzYTMwMmJkY2JiVUwsIDB4M2VkOGU5ODAwYjIxOGU4ZVVMLAorKwkvKiAyNDIgKi8gMHg3YjBiOTIzOWZhNzVlMDNlVUwsIDB4ZWZlOWZiNjg0NjMzYzA4M1VMLAorKwkJICAweDk4YTM1ZmJlMzkxYTc3OTNVTCwgMHg2MDY1NTEwZmUyZDBmZTM0VUwsCisrCS8qIDI0MyAqLyAweDU1Y2I2Njg1NDhhYmFkMGNVTCwgMHhiNDU4NDU0OGRhODdlNTI3VUwsCisrCQkgIDB4MmM0M2VjZWEwMTA3YzFkZFVMLCAweDUyNjAyODgwOTM3MmRlMzVVTCwKKysJLyogMjQ0ICovIDB4MzQxNWM1NmFmOTIxM2IxZlVMLCAweDViZWUxYTRkMDE3ZTk4ZGJVTCwKKysJCSAgMHgxM2Y2YjEwNWI1Y2Y3MDliVUwsIDB4NWZmMjBlMzQ4MmIyOWFiNlVMLAorKwkvKiAyNDUgKi8gMHgwYWEyOWM3NWNjMmU2YzkwVUwsIDB4ZmM3ZDczY2EzYTcwZTIwNlVMLAorKwkJICAweDg5OWZjMzhmYzRiNWM1MTVVTCwgMHgyNTAzODZiMTI0ZmZjMjA3VUwsCisrCS8qIDI0NiAqLyAweDU0ZWEyOGQ1YWUzZDJiNTZVTCwgMHg5OTEzMTQ5ZGQ2ZGU2MGNlVUwsCisrCQkgIDB4MTY2OTRmYzU4ZjA2ZDZjMVVMLCAweDQ2YjIzOTc1ZWIwMThmYzdVTCwKKysJLyogMjQ3ICovIDB4NDcwYTZhMGZiNGI3YjRlMlVMLCAweDVkOTI0NzVhOGY3MjUzZGVVTCwKKysJCSAgMHhhYmVlZTViNTJmYmQzYWRiVUwsIDB4N2ZhMjA4MDFhMDgwNjk2OFVMLAorKwkvKiAyNDggKi8gMHg3NmYzZmFmMTlmNzcxNGQyVUwsIDB4YjNlODQwYzEyZjQ2NjBjM1VMLAorKwkJICAweDBmYjRjZDhkZjIxMjc0NGVVTCwgMHg0YjA2NWEyNTFkM2EyZGQyVUwsCisrCS8qIDI0OSAqLyAweDVjZWJkZTM4M2Q3N2NkNGFVTCwgMHg2YWRmMzlkZjg4MmM5Y2IxVUwsCisrCQkgIDB4YTJkZDI0MmViMDlhZjc1OVVMLCAweDMxNDdjMGU1MGU1ZjY0MjJVTCwKKysJLyogMjUwICovIDB4MTY0Y2E1MTAxZDEzNTBkYlVMLCAweGY4ZDEzNDc5YzMzZmM5NjJVTCwKKysJCSAgMHhlNjQwY2U0ZDEzZTVkYTA4VUwsIDB4NGJkZWUwYzQ1MDYxZjhiYVVMLAorKwkvKiAyNTEgKi8gMHhkN2M0NmRjMWE0ZWRiMWM5VUwsIDB4NTUxNGQ3YjY0MzdmZDk4YVVMLAorKwkJICAweDU4OTQyZjZiYjJhMWMwMGJVTCwgMHgyZGZmYjJhYjFkNzA3MTBlVUwsCisrCS8qIDI1MiAqLyAweGNjZGZjZjJmYzE4YjZkNjhVTCwgMHhhOGViY2JhOGI3ODA2MTY3VUwsCisrCQkgIDB4OTgwNjk3Zjk1ZTI5MzdlM1VMLCAweDAyZmJiYTFjZDAxMjZlOGNVTAorK307CisrCisrLyogYyBpcyB0d28gNTEyLWJpdCBwcm9kdWN0czogYzBbMDo3XT1hMFswOjNdKmIwWzA6M10gYW5kIGMxWzg6MTVdPWExWzQ6N10qYjFbNDo3XQorKyAqIGEgaXMgdHdvIDI1Ni1iaXQgaW50ZWdlcnM6IGEwWzA6M10gYW5kIGExWzQ6N10KKysgKiBiIGlzIHR3byAyNTYtYml0IGludGVnZXJzOiBiMFswOjNdIGFuZCBiMVs0OjddCisrICovCisrc3RhdGljIHZvaWQgbXVsMl8yNTZ4MjU2X2ludGVnZXJfYWR4KHU2NCAqY29uc3QgYywgY29uc3QgdTY0ICpjb25zdCBhLAorKwkJCQkgICAgIGNvbnN0IHU2NCAqY29uc3QgYikKKyt7CisrCWFzbSB2b2xhdGlsZSgKKysJCSJ4b3JsICUlcjE0ZCwgJSVyMTRkIDsiCisrCQkibW92cSAgICglMSksICUlcmR4OyAiCS8qIEFbMF0gKi8KKysJCSJtdWx4ICAgKCUyKSwgICUlcjgsICUlcjE1OyAiIC8qIEFbMF0qQlswXSAqLworKwkJInhvcmwgJSVyMTBkLCAlJXIxMGQgOyIKKysJCSJtb3ZxICUlcjgsICglMCkgOyIKKysJCSJtdWx4ICA4KCUyKSwgJSVyMTAsICUlcmF4OyAiIC8qIEFbMF0qQlsxXSAqLworKwkJImFkb3ggJSVyMTAsICUlcjE1IDsiCisrCQkibXVseCAxNiglMiksICAlJXI4LCAlJXJieDsgIiAvKiBBWzBdKkJbMl0gKi8KKysJCSJhZG94ICAlJXI4LCAlJXJheCA7IgorKwkJIm11bHggMjQoJTIpLCAlJXIxMCwgJSVyY3g7ICIgLyogQVswXSpCWzNdICovCisrCQkiYWRveCAlJXIxMCwgJSVyYnggOyIKKysJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCQkiYWRveCAlJXIxNCwgJSVyY3ggOyIKKysKKysJCSJtb3ZxICA4KCUxKSwgJSVyZHg7ICIJLyogQVsxXSAqLworKwkJIm11bHggICAoJTIpLCAgJSVyOCwgICUlcjk7ICIgLyogQVsxXSpCWzBdICovCisrCQkiYWRveCAlJXIxNSwgICUlcjggOyIKKysJCSJtb3ZxICAlJXI4LCA4KCUwKSA7IgorKwkJIm11bHggIDgoJTIpLCAlJXIxMCwgJSVyMTE7ICIgLyogQVsxXSpCWzFdICovCisrCQkiYWRveCAlJXIxMCwgICUlcjkgOyIKKysJCSJhZGN4ICAlJXI5LCAlJXJheCA7IgorKwkJIm11bHggMTYoJTIpLCAgJSVyOCwgJSVyMTM7ICIgLyogQVsxXSpCWzJdICovCisrCQkiYWRveCAgJSVyOCwgJSVyMTEgOyIKKysJCSJhZGN4ICUlcjExLCAlJXJieCA7IgorKwkJIm11bHggMjQoJTIpLCAlJXIxMCwgJSVyMTU7ICIgLyogQVsxXSpCWzNdICovCisrCQkiYWRveCAlJXIxMCwgJSVyMTMgOyIKKysJCSJhZGN4ICUlcjEzLCAlJXJjeCA7IgorKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysJCSJhZG94ICUlcjE0LCAlJXIxNSA7IgorKwkJImFkY3ggJSVyMTQsICUlcjE1IDsiCisrCisrCQkibW92cSAxNiglMSksICUlcmR4OyAiIC8qIEFbMl0gKi8KKysJCSJ4b3JsICUlcjEwZCwgJSVyMTBkIDsiCisrCQkibXVseCAgICglMiksICAlJXI4LCAgJSVyOTsgIiAvKiBBWzJdKkJbMF0gKi8KKysJCSJhZG94ICUlcmF4LCAgJSVyOCA7IgorKwkJIm1vdnEgJSVyOCwgMTYoJTApIDsiCisrCQkibXVseCAgOCglMiksICUlcjEwLCAlJXIxMTsgIiAvKiBBWzJdKkJbMV0gKi8KKysJCSJhZG94ICUlcjEwLCAgJSVyOSA7IgorKwkJImFkY3ggICUlcjksICUlcmJ4IDsiCisrCQkibXVseCAxNiglMiksICAlJXI4LCAlJXIxMzsgIiAvKiBBWzJdKkJbMl0gKi8KKysJCSJhZG94ICAlJXI4LCAlJXIxMSA7IgorKwkJImFkY3ggJSVyMTEsICUlcmN4IDsiCisrCQkibXVseCAyNCglMiksICUlcjEwLCAlJXJheDsgIiAvKiBBWzJdKkJbM10gKi8KKysJCSJhZG94ICUlcjEwLCAlJXIxMyA7IgorKwkJImFkY3ggJSVyMTMsICUlcjE1IDsiCisrCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKwkJImFkb3ggJSVyMTQsICUlcmF4IDsiCisrCQkiYWRjeCAlJXIxNCwgJSVyYXggOyIKKysKKysJCSJtb3ZxIDI0KCUxKSwgJSVyZHg7ICIgLyogQVszXSAqLworKwkJInhvcmwgJSVyMTBkLCAlJXIxMGQgOyIKKysJCSJtdWx4ICAgKCUyKSwgICUlcjgsICAlJXI5OyAiIC8qIEFbM10qQlswXSAqLworKwkJImFkb3ggJSVyYngsICAlJXI4IDsiCisrCQkibW92cSAlJXI4LCAyNCglMCkgOyIKKysJCSJtdWx4ICA4KCUyKSwgJSVyMTAsICUlcjExOyAiIC8qIEFbM10qQlsxXSAqLworKwkJImFkb3ggJSVyMTAsICAlJXI5IDsiCisrCQkiYWRjeCAgJSVyOSwgJSVyY3ggOyIKKysJCSJtb3ZxICUlcmN4LCAzMiglMCkgOyIKKysJCSJtdWx4IDE2KCUyKSwgICUlcjgsICUlcjEzOyAiIC8qIEFbM10qQlsyXSAqLworKwkJImFkb3ggICUlcjgsICUlcjExIDsiCisrCQkiYWRjeCAlJXIxMSwgJSVyMTUgOyIKKysJCSJtb3ZxICUlcjE1LCA0MCglMCkgOyIKKysJCSJtdWx4IDI0KCUyKSwgJSVyMTAsICUlcmJ4OyAiIC8qIEFbM10qQlszXSAqLworKwkJImFkb3ggJSVyMTAsICUlcjEzIDsiCisrCQkiYWRjeCAlJXIxMywgJSVyYXggOyIKKysJCSJtb3ZxICUlcmF4LCA0OCglMCkgOyIKKysJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCQkiYWRveCAlJXIxNCwgJSVyYnggOyIKKysJCSJhZGN4ICUlcjE0LCAlJXJieCA7IgorKwkJIm1vdnEgJSVyYngsIDU2KCUwKSA7IgorKworKwkJIm1vdnEgMzIoJTEpLCAlJXJkeDsgIgkvKiBDWzBdICovCisrCQkibXVseCAzMiglMiksICAlJXI4LCAlJXIxNTsgIiAvKiBDWzBdKkRbMF0gKi8KKysJCSJ4b3JsICUlcjEwZCwgJSVyMTBkIDsiCisrCQkibW92cSAlJXI4LCA2NCglMCk7IgorKwkJIm11bHggNDAoJTIpLCAlJXIxMCwgJSVyYXg7ICIgLyogQ1swXSpEWzFdICovCisrCQkiYWRveCAlJXIxMCwgJSVyMTUgOyIKKysJCSJtdWx4IDQ4KCUyKSwgICUlcjgsICUlcmJ4OyAiIC8qIENbMF0qRFsyXSAqLworKwkJImFkb3ggICUlcjgsICUlcmF4IDsiCisrCQkibXVseCA1NiglMiksICUlcjEwLCAlJXJjeDsgIiAvKiBDWzBdKkRbM10gKi8KKysJCSJhZG94ICUlcjEwLCAlJXJieCA7IgorKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysJCSJhZG94ICUlcjE0LCAlJXJjeCA7IgorKworKwkJIm1vdnEgNDAoJTEpLCAlJXJkeDsgIiAvKiBDWzFdICovCisrCQkieG9ybCAlJXIxMGQsICUlcjEwZCA7IgorKwkJIm11bHggMzIoJTIpLCAgJSVyOCwgICUlcjk7ICIgLyogQ1sxXSpEWzBdICovCisrCQkiYWRveCAlJXIxNSwgICUlcjggOyIKKysJCSJtb3ZxICAlJXI4LCA3MiglMCk7IgorKwkJIm11bHggNDAoJTIpLCAlJXIxMCwgJSVyMTE7ICIgLyogQ1sxXSpEWzFdICovCisrCQkiYWRveCAlJXIxMCwgICUlcjkgOyIKKysJCSJhZGN4ICAlJXI5LCAlJXJheCA7IgorKwkJIm11bHggNDgoJTIpLCAgJSVyOCwgJSVyMTM7ICIgLyogQ1sxXSpEWzJdICovCisrCQkiYWRveCAgJSVyOCwgJSVyMTEgOyIKKysJCSJhZGN4ICUlcjExLCAlJXJieCA7IgorKwkJIm11bHggNTYoJTIpLCAlJXIxMCwgJSVyMTU7ICIgLyogQ1sxXSpEWzNdICovCisrCQkiYWRveCAlJXIxMCwgJSVyMTMgOyIKKysJCSJhZGN4ICUlcjEzLCAlJXJjeCA7IgorKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysJCSJhZG94ICUlcjE0LCAlJXIxNSA7IgorKwkJImFkY3ggJSVyMTQsICUlcjE1IDsiCisrCisrCQkibW92cSA0OCglMSksICUlcmR4OyAiIC8qIENbMl0gKi8KKysJCSJ4b3JsICUlcjEwZCwgJSVyMTBkIDsiCisrCQkibXVseCAzMiglMiksICAlJXI4LCAgJSVyOTsgIiAvKiBDWzJdKkRbMF0gKi8KKysJCSJhZG94ICUlcmF4LCAgJSVyOCA7IgorKwkJIm1vdnEgICUlcjgsIDgwKCUwKTsiCisrCQkibXVseCA0MCglMiksICUlcjEwLCAlJXIxMTsgIiAvKiBDWzJdKkRbMV0gKi8KKysJCSJhZG94ICUlcjEwLCAgJSVyOSA7IgorKwkJImFkY3ggICUlcjksICUlcmJ4IDsiCisrCQkibXVseCA0OCglMiksICAlJXI4LCAlJXIxMzsgIiAvKiBDWzJdKkRbMl0gKi8KKysJCSJhZG94ICAlJXI4LCAlJXIxMSA7IgorKwkJImFkY3ggJSVyMTEsICUlcmN4IDsiCisrCQkibXVseCA1NiglMiksICUlcjEwLCAlJXJheDsgIiAvKiBDWzJdKkRbM10gKi8KKysJCSJhZG94ICUlcjEwLCAlJXIxMyA7IgorKwkJImFkY3ggJSVyMTMsICUlcjE1IDsiCisrCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKwkJImFkb3ggJSVyMTQsICUlcmF4IDsiCisrCQkiYWRjeCAlJXIxNCwgJSVyYXggOyIKKysKKysJCSJtb3ZxIDU2KCUxKSwgJSVyZHg7ICIgLyogQ1szXSAqLworKwkJInhvcmwgJSVyMTBkLCAlJXIxMGQgOyIKKysJCSJtdWx4IDMyKCUyKSwgICUlcjgsICAlJXI5OyAiIC8qIENbM10qRFswXSAqLworKwkJImFkb3ggJSVyYngsICAlJXI4IDsiCisrCQkibW92cSAgJSVyOCwgODgoJTApOyIKKysJCSJtdWx4IDQwKCUyKSwgJSVyMTAsICUlcjExOyAiIC8qIENbM10qRFsxXSAqLworKwkJImFkb3ggJSVyMTAsICAlJXI5IDsiCisrCQkiYWRjeCAgJSVyOSwgJSVyY3ggOyIKKysJCSJtb3ZxICUlcmN4LCAgOTYoJTApIDsiCisrCQkibXVseCA0OCglMiksICAlJXI4LCAlJXIxMzsgIiAvKiBDWzNdKkRbMl0gKi8KKysJCSJhZG94ICAlJXI4LCAlJXIxMSA7IgorKwkJImFkY3ggJSVyMTEsICUlcjE1IDsiCisrCQkibW92cSAlJXIxNSwgMTA0KCUwKSA7IgorKwkJIm11bHggNTYoJTIpLCAlJXIxMCwgJSVyYng7ICIgLyogQ1szXSpEWzNdICovCisrCQkiYWRveCAlJXIxMCwgJSVyMTMgOyIKKysJCSJhZGN4ICUlcjEzLCAlJXJheCA7IgorKwkJIm1vdnEgJSVyYXgsIDExMiglMCkgOyIKKysJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCQkiYWRveCAlJXIxNCwgJSVyYnggOyIKKysJCSJhZGN4ICUlcjE0LCAlJXJieCA7IgorKwkJIm1vdnEgJSVyYngsIDEyMCglMCkgOyIKKysJCToKKysJCTogInIiKGMpLCAiciIoYSksICJyIihiKQorKwkJOiAibWVtb3J5IiwgImNjIiwgIiVyYXgiLCAiJXJieCIsICIlcmN4IiwgIiVyZHgiLCAiJXI4IiwgIiVyOSIsCisrCQkgICIlcjEwIiwgIiVyMTEiLCAiJXIxMyIsICIlcjE0IiwgIiVyMTUiKTsKKyt9CisrCisrc3RhdGljIHZvaWQgbXVsMl8yNTZ4MjU2X2ludGVnZXJfYm1pMih1NjQgKmNvbnN0IGMsIGNvbnN0IHU2NCAqY29uc3QgYSwKKysJCQkJICAgICAgY29uc3QgdTY0ICpjb25zdCBiKQorK3sKKysJYXNtIHZvbGF0aWxlKAorKwkJIm1vdnEgICAoJTEpLCAlJXJkeDsgIgkvKiBBWzBdICovCisrCQkibXVseCAgICglMiksICAlJXI4LCAlJXIxNTsgIiAvKiBBWzBdKkJbMF0gKi8KKysJCSJtb3ZxICUlcjgsICAoJTApIDsiCisrCQkibXVseCAgOCglMiksICUlcjEwLCAlJXJheDsgIiAvKiBBWzBdKkJbMV0gKi8KKysJCSJhZGRxICUlcjEwLCAlJXIxNSA7IgorKwkJIm11bHggMTYoJTIpLCAgJSVyOCwgJSVyYng7ICIgLyogQVswXSpCWzJdICovCisrCQkiYWRjcSAgJSVyOCwgJSVyYXggOyIKKysJCSJtdWx4IDI0KCUyKSwgJSVyMTAsICUlcmN4OyAiIC8qIEFbMF0qQlszXSAqLworKwkJImFkY3EgJSVyMTAsICUlcmJ4IDsiCisrCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKwkJImFkY3EgICAgJDAsICUlcmN4IDsiCisrCisrCQkibW92cSAgOCglMSksICUlcmR4OyAiCS8qIEFbMV0gKi8KKysJCSJtdWx4ICAgKCUyKSwgICUlcjgsICAlJXI5OyAiIC8qIEFbMV0qQlswXSAqLworKwkJImFkZHEgJSVyMTUsICAlJXI4IDsiCisrCQkibW92cSAlJXI4LCA4KCUwKSA7IgorKwkJIm11bHggIDgoJTIpLCAlJXIxMCwgJSVyMTE7ICIgLyogQVsxXSpCWzFdICovCisrCQkiYWRjcSAlJXIxMCwgICUlcjkgOyIKKysJCSJtdWx4IDE2KCUyKSwgICUlcjgsICUlcjEzOyAiIC8qIEFbMV0qQlsyXSAqLworKwkJImFkY3EgICUlcjgsICUlcjExIDsiCisrCQkibXVseCAyNCglMiksICUlcjEwLCAlJXIxNTsgIiAvKiBBWzFdKkJbM10gKi8KKysJCSJhZGNxICUlcjEwLCAlJXIxMyA7IgorKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysJCSJhZGNxICAgICQwLCAlJXIxNSA7IgorKworKwkJImFkZHEgICUlcjksICUlcmF4IDsiCisrCQkiYWRjcSAlJXIxMSwgJSVyYnggOyIKKysJCSJhZGNxICUlcjEzLCAlJXJjeCA7IgorKwkJImFkY3EgICAgJDAsICUlcjE1IDsiCisrCisrCQkibW92cSAxNiglMSksICUlcmR4OyAiCS8qIEFbMl0gKi8KKysJCSJtdWx4ICAgKCUyKSwgICUlcjgsICAlJXI5OyAiIC8qIEFbMl0qQlswXSAqLworKwkJImFkZHEgJSVyYXgsICAlJXI4IDsiCisrCQkibW92cSAlJXI4LCAxNiglMCkgOyIKKysJCSJtdWx4ICA4KCUyKSwgJSVyMTAsICUlcjExOyAiIC8qIEFbMl0qQlsxXSAqLworKwkJImFkY3EgJSVyMTAsICAlJXI5IDsiCisrCQkibXVseCAxNiglMiksICAlJXI4LCAlJXIxMzsgIiAvKiBBWzJdKkJbMl0gKi8KKysJCSJhZGNxICAlJXI4LCAlJXIxMSA7IgorKwkJIm11bHggMjQoJTIpLCAlJXIxMCwgJSVyYXg7ICIgLyogQVsyXSpCWzNdICovCisrCQkiYWRjcSAlJXIxMCwgJSVyMTMgOyIKKysJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCQkiYWRjcSAgICAkMCwgJSVyYXggOyIKKysKKysJCSJhZGRxICAlJXI5LCAlJXJieCA7IgorKwkJImFkY3EgJSVyMTEsICUlcmN4IDsiCisrCQkiYWRjcSAlJXIxMywgJSVyMTUgOyIKKysJCSJhZGNxICAgICQwLCAlJXJheCA7IgorKworKwkJIm1vdnEgMjQoJTEpLCAlJXJkeDsgIgkvKiBBWzNdICovCisrCQkibXVseCAgICglMiksICAlJXI4LCAgJSVyOTsgIiAvKiBBWzNdKkJbMF0gKi8KKysJCSJhZGRxICUlcmJ4LCAgJSVyOCA7IgorKwkJIm1vdnEgJSVyOCwgMjQoJTApIDsiCisrCQkibXVseCAgOCglMiksICUlcjEwLCAlJXIxMTsgIiAvKiBBWzNdKkJbMV0gKi8KKysJCSJhZGNxICUlcjEwLCAgJSVyOSA7IgorKwkJIm11bHggMTYoJTIpLCAgJSVyOCwgJSVyMTM7ICIgLyogQVszXSpCWzJdICovCisrCQkiYWRjcSAgJSVyOCwgJSVyMTEgOyIKKysJCSJtdWx4IDI0KCUyKSwgJSVyMTAsICUlcmJ4OyAiIC8qIEFbM10qQlszXSAqLworKwkJImFkY3EgJSVyMTAsICUlcjEzIDsiCisrCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKwkJImFkY3EgICAgJDAsICUlcmJ4IDsiCisrCisrCQkiYWRkcSAgJSVyOSwgJSVyY3ggOyIKKysJCSJtb3ZxICUlcmN4LCAzMiglMCkgOyIKKysJCSJhZGNxICUlcjExLCAlJXIxNSA7IgorKwkJIm1vdnEgJSVyMTUsIDQwKCUwKSA7IgorKwkJImFkY3EgJSVyMTMsICUlcmF4IDsiCisrCQkibW92cSAlJXJheCwgNDgoJTApIDsiCisrCQkiYWRjcSAgICAkMCwgJSVyYnggOyIKKysJCSJtb3ZxICUlcmJ4LCA1NiglMCkgOyIKKysKKysJCSJtb3ZxIDMyKCUxKSwgJSVyZHg7ICIJLyogQ1swXSAqLworKwkJIm11bHggMzIoJTIpLCAgJSVyOCwgJSVyMTU7ICIgLyogQ1swXSpEWzBdICovCisrCQkibW92cSAlJXI4LCA2NCglMCkgOyIKKysJCSJtdWx4IDQwKCUyKSwgJSVyMTAsICUlcmF4OyAiIC8qIENbMF0qRFsxXSAqLworKwkJImFkZHEgJSVyMTAsICUlcjE1IDsiCisrCQkibXVseCA0OCglMiksICAlJXI4LCAlJXJieDsgIiAvKiBDWzBdKkRbMl0gKi8KKysJCSJhZGNxICAlJXI4LCAlJXJheCA7IgorKwkJIm11bHggNTYoJTIpLCAlJXIxMCwgJSVyY3g7ICIgLyogQ1swXSpEWzNdICovCisrCQkiYWRjcSAlJXIxMCwgJSVyYnggOyIKKysJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCQkiYWRjcSAgICAkMCwgJSVyY3ggOyIKKysKKysJCSJtb3ZxIDQwKCUxKSwgJSVyZHg7ICIJLyogQ1sxXSAqLworKwkJIm11bHggMzIoJTIpLCAgJSVyOCwgICUlcjk7ICIgLyogQ1sxXSpEWzBdICovCisrCQkiYWRkcSAlJXIxNSwgICUlcjggOyIKKysJCSJtb3ZxICUlcjgsIDcyKCUwKSA7IgorKwkJIm11bHggNDAoJTIpLCAlJXIxMCwgJSVyMTE7ICIgLyogQ1sxXSpEWzFdICovCisrCQkiYWRjcSAlJXIxMCwgICUlcjkgOyIKKysJCSJtdWx4IDQ4KCUyKSwgICUlcjgsICUlcjEzOyAiIC8qIENbMV0qRFsyXSAqLworKwkJImFkY3EgICUlcjgsICUlcjExIDsiCisrCQkibXVseCA1NiglMiksICUlcjEwLCAlJXIxNTsgIiAvKiBDWzFdKkRbM10gKi8KKysJCSJhZGNxICUlcjEwLCAlJXIxMyA7IgorKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysJCSJhZGNxICAgICQwLCAlJXIxNSA7IgorKworKwkJImFkZHEgICUlcjksICUlcmF4IDsiCisrCQkiYWRjcSAlJXIxMSwgJSVyYnggOyIKKysJCSJhZGNxICUlcjEzLCAlJXJjeCA7IgorKwkJImFkY3EgICAgJDAsICUlcjE1IDsiCisrCisrCQkibW92cSA0OCglMSksICUlcmR4OyAiCS8qIENbMl0gKi8KKysJCSJtdWx4IDMyKCUyKSwgICUlcjgsICAlJXI5OyAiIC8qIENbMl0qRFswXSAqLworKwkJImFkZHEgJSVyYXgsICAlJXI4IDsiCisrCQkibW92cSAlJXI4LCA4MCglMCkgOyIKKysJCSJtdWx4IDQwKCUyKSwgJSVyMTAsICUlcjExOyAiIC8qIENbMl0qRFsxXSAqLworKwkJImFkY3EgJSVyMTAsICAlJXI5IDsiCisrCQkibXVseCA0OCglMiksICAlJXI4LCAlJXIxMzsgIiAvKiBDWzJdKkRbMl0gKi8KKysJCSJhZGNxICAlJXI4LCAlJXIxMSA7IgorKwkJIm11bHggNTYoJTIpLCAlJXIxMCwgJSVyYXg7ICIgLyogQ1syXSpEWzNdICovCisrCQkiYWRjcSAlJXIxMCwgJSVyMTMgOyIKKysJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCQkiYWRjcSAgICAkMCwgJSVyYXggOyIKKysKKysJCSJhZGRxICAlJXI5LCAlJXJieCA7IgorKwkJImFkY3EgJSVyMTEsICUlcmN4IDsiCisrCQkiYWRjcSAlJXIxMywgJSVyMTUgOyIKKysJCSJhZGNxICAgICQwLCAlJXJheCA7IgorKworKwkJIm1vdnEgNTYoJTEpLCAlJXJkeDsgIgkvKiBDWzNdICovCisrCQkibXVseCAzMiglMiksICAlJXI4LCAgJSVyOTsgIiAvKiBDWzNdKkRbMF0gKi8KKysJCSJhZGRxICUlcmJ4LCAgJSVyOCA7IgorKwkJIm1vdnEgJSVyOCwgODgoJTApIDsiCisrCQkibXVseCA0MCglMiksICUlcjEwLCAlJXIxMTsgIiAvKiBDWzNdKkRbMV0gKi8KKysJCSJhZGNxICUlcjEwLCAgJSVyOSA7IgorKwkJIm11bHggNDgoJTIpLCAgJSVyOCwgJSVyMTM7ICIgLyogQ1szXSpEWzJdICovCisrCQkiYWRjcSAgJSVyOCwgJSVyMTEgOyIKKysJCSJtdWx4IDU2KCUyKSwgJSVyMTAsICUlcmJ4OyAiIC8qIENbM10qRFszXSAqLworKwkJImFkY3EgJSVyMTAsICUlcjEzIDsiCisrCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKwkJImFkY3EgICAgJDAsICUlcmJ4IDsiCisrCisrCQkiYWRkcSAgJSVyOSwgJSVyY3ggOyIKKysJCSJtb3ZxICUlcmN4LCAgOTYoJTApIDsiCisrCQkiYWRjcSAlJXIxMSwgJSVyMTUgOyIKKysJCSJtb3ZxICUlcjE1LCAxMDQoJTApIDsiCisrCQkiYWRjcSAlJXIxMywgJSVyYXggOyIKKysJCSJtb3ZxICUlcmF4LCAxMTIoJTApIDsiCisrCQkiYWRjcSAgICAkMCwgJSVyYnggOyIKKysJCSJtb3ZxICUlcmJ4LCAxMjAoJTApIDsiCisrCQk6CisrCQk6ICJyIihjKSwgInIiKGEpLCAiciIoYikKKysJCTogIm1lbW9yeSIsICJjYyIsICIlcmF4IiwgIiVyYngiLCAiJXJjeCIsICIlcmR4IiwgIiVyOCIsICIlcjkiLAorKwkJICAiJXIxMCIsICIlcjExIiwgIiVyMTMiLCAiJXIxNSIpOworK30KKysKKytzdGF0aWMgdm9pZCBzcXIyXzI1NngyNTZfaW50ZWdlcl9hZHgodTY0ICpjb25zdCBjLCBjb25zdCB1NjQgKmNvbnN0IGEpCisreworKwlhc20gdm9sYXRpbGUoCisrCQkibW92cSAgICglMSksICUlcmR4ICAgICAgICA7IiAvKiBBWzBdICAgICAgKi8KKysJCSJtdWx4ICA4KCUxKSwgICUlcjgsICUlcjE0IDsiIC8qIEFbMV0qQVswXSAqLworKwkJInhvcmwgJSVyMTVkLCAlJXIxNWQ7IgorKwkJIm11bHggMTYoJTEpLCAgJSVyOSwgJSVyMTAgOyIgLyogQVsyXSpBWzBdICovCisrCQkiYWRjeCAlJXIxNCwgICUlcjkgOyIKKysJCSJtdWx4IDI0KCUxKSwgJSVyYXgsICUlcmN4IDsiIC8qIEFbM10qQVswXSAqLworKwkJImFkY3ggJSVyYXgsICUlcjEwIDsiCisrCQkibW92cSAyNCglMSksICUlcmR4ICAgICAgICA7IiAvKiBBWzNdICAgICAgKi8KKysJCSJtdWx4ICA4KCUxKSwgJSVyMTEsICUlcmJ4IDsiIC8qIEFbMV0qQVszXSAqLworKwkJImFkY3ggJSVyY3gsICUlcjExIDsiCisrCQkibXVseCAxNiglMSksICUlcmF4LCAlJXIxMyA7IiAvKiBBWzJdKkFbM10gKi8KKysJCSJhZGN4ICUlcmF4LCAlJXJieCA7IgorKwkJIm1vdnEgIDgoJTEpLCAlJXJkeCAgICAgICAgOyIgLyogQVsxXSAgICAgICovCisrCQkiYWRjeCAlJXIxNSwgJSVyMTMgOyIKKysJCSJtdWx4IDE2KCUxKSwgJSVyYXgsICUlcmN4IDsiIC8qIEFbMl0qQVsxXSAqLworKwkJIm1vdnEgICAgJDAsICUlcjE0IDsiCisrCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKwkJImFkY3ggJSVyMTUsICUlcjE0IDsiCisrCisrCQkieG9ybCAlJXIxNWQsICUlcjE1ZDsiCisrCQkiYWRveCAlJXJheCwgJSVyMTAgOyIKKysJCSJhZGN4ICAlJXI4LCAgJSVyOCA7IgorKwkJImFkb3ggJSVyY3gsICUlcjExIDsiCisrCQkiYWRjeCAgJSVyOSwgICUlcjkgOyIKKysJCSJhZG94ICUlcjE1LCAlJXJieCA7IgorKwkJImFkY3ggJSVyMTAsICUlcjEwIDsiCisrCQkiYWRveCAlJXIxNSwgJSVyMTMgOyIKKysJCSJhZGN4ICUlcjExLCAlJXIxMSA7IgorKwkJImFkb3ggJSVyMTUsICUlcjE0IDsiCisrCQkiYWRjeCAlJXJieCwgJSVyYnggOyIKKysJCSJhZGN4ICUlcjEzLCAlJXIxMyA7IgorKwkJImFkY3ggJSVyMTQsICUlcjE0IDsiCisrCisrCQkibW92cSAgICglMSksICUlcmR4IDsiCisrCQkibXVseCAlJXJkeCwgJSVyYXgsICUlcmN4IDsiIC8qIEFbMF1eMiAqLworKwkJLyoqKioqKioqKioqKioqKioqKiovCisrCQkibW92cSAlJXJheCwgIDAoJTApIDsiCisrCQkiYWRkcSAlJXJjeCwgICUlcjggOyIKKysJCSJtb3ZxICAlJXI4LCAgOCglMCkgOyIKKysJCSJtb3ZxICA4KCUxKSwgJSVyZHggOyIKKysJCSJtdWx4ICUlcmR4LCAlJXJheCwgJSVyY3ggOyIgLyogQVsxXV4yICovCisrCQkiYWRjcSAlJXJheCwgICUlcjkgOyIKKysJCSJtb3ZxICAlJXI5LCAxNiglMCkgOyIKKysJCSJhZGNxICUlcmN4LCAlJXIxMCA7IgorKwkJIm1vdnEgJSVyMTAsIDI0KCUwKSA7IgorKwkJIm1vdnEgMTYoJTEpLCAlJXJkeCA7IgorKwkJIm11bHggJSVyZHgsICUlcmF4LCAlJXJjeCA7IiAvKiBBWzJdXjIgKi8KKysJCSJhZGNxICUlcmF4LCAlJXIxMSA7IgorKwkJIm1vdnEgJSVyMTEsIDMyKCUwKSA7IgorKwkJImFkY3EgJSVyY3gsICUlcmJ4IDsiCisrCQkibW92cSAlJXJieCwgNDAoJTApIDsiCisrCQkibW92cSAyNCglMSksICUlcmR4IDsiCisrCQkibXVseCAlJXJkeCwgJSVyYXgsICUlcmN4IDsiIC8qIEFbM11eMiAqLworKwkJImFkY3EgJSVyYXgsICUlcjEzIDsiCisrCQkibW92cSAlJXIxMywgNDgoJTApIDsiCisrCQkiYWRjcSAlJXJjeCwgJSVyMTQgOyIKKysJCSJtb3ZxICUlcjE0LCA1NiglMCkgOyIKKysKKysKKysJCSJtb3ZxIDMyKCUxKSwgJSVyZHggICAgICAgIDsiIC8qIEJbMF0gICAgICAqLworKwkJIm11bHggNDAoJTEpLCAgJSVyOCwgJSVyMTQgOyIgLyogQlsxXSpCWzBdICovCisrCQkieG9ybCAlJXIxNWQsICUlcjE1ZDsiCisrCQkibXVseCA0OCglMSksICAlJXI5LCAlJXIxMCA7IiAvKiBCWzJdKkJbMF0gKi8KKysJCSJhZGN4ICUlcjE0LCAgJSVyOSA7IgorKwkJIm11bHggNTYoJTEpLCAlJXJheCwgJSVyY3ggOyIgLyogQlszXSpCWzBdICovCisrCQkiYWRjeCAlJXJheCwgJSVyMTAgOyIKKysJCSJtb3ZxIDU2KCUxKSwgJSVyZHggICAgICAgIDsiIC8qIEJbM10gICAgICAqLworKwkJIm11bHggNDAoJTEpLCAlJXIxMSwgJSVyYnggOyIgLyogQlsxXSpCWzNdICovCisrCQkiYWRjeCAlJXJjeCwgJSVyMTEgOyIKKysJCSJtdWx4IDQ4KCUxKSwgJSVyYXgsICUlcjEzIDsiIC8qIEJbMl0qQlszXSAqLworKwkJImFkY3ggJSVyYXgsICUlcmJ4IDsiCisrCQkibW92cSA0MCglMSksICUlcmR4ICAgICAgICA7IiAvKiBCWzFdICAgICAgKi8KKysJCSJhZGN4ICUlcjE1LCAlJXIxMyA7IgorKwkJIm11bHggNDgoJTEpLCAlJXJheCwgJSVyY3ggOyIgLyogQlsyXSpCWzFdICovCisrCQkibW92cSAgICAkMCwgJSVyMTQgOyIKKysJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCQkiYWRjeCAlJXIxNSwgJSVyMTQgOyIKKysKKysJCSJ4b3JsICUlcjE1ZCwgJSVyMTVkOyIKKysJCSJhZG94ICUlcmF4LCAlJXIxMCA7IgorKwkJImFkY3ggICUlcjgsICAlJXI4IDsiCisrCQkiYWRveCAlJXJjeCwgJSVyMTEgOyIKKysJCSJhZGN4ICAlJXI5LCAgJSVyOSA7IgorKwkJImFkb3ggJSVyMTUsICUlcmJ4IDsiCisrCQkiYWRjeCAlJXIxMCwgJSVyMTAgOyIKKysJCSJhZG94ICUlcjE1LCAlJXIxMyA7IgorKwkJImFkY3ggJSVyMTEsICUlcjExIDsiCisrCQkiYWRveCAlJXIxNSwgJSVyMTQgOyIKKysJCSJhZGN4ICUlcmJ4LCAlJXJieCA7IgorKwkJImFkY3ggJSVyMTMsICUlcjEzIDsiCisrCQkiYWRjeCAlJXIxNCwgJSVyMTQgOyIKKysKKysJCSJtb3ZxIDMyKCUxKSwgJSVyZHggOyIKKysJCSJtdWx4ICUlcmR4LCAlJXJheCwgJSVyY3ggOyIgLyogQlswXV4yICovCisrCQkvKioqKioqKioqKioqKioqKioqKi8KKysJCSJtb3ZxICUlcmF4LCAgNjQoJTApIDsiCisrCQkiYWRkcSAlJXJjeCwgICUlcjggOyIKKysJCSJtb3ZxICAlJXI4LCAgNzIoJTApIDsiCisrCQkibW92cSA0MCglMSksICUlcmR4IDsiCisrCQkibXVseCAlJXJkeCwgJSVyYXgsICUlcmN4IDsiIC8qIEJbMV1eMiAqLworKwkJImFkY3EgJSVyYXgsICAlJXI5IDsiCisrCQkibW92cSAgJSVyOSwgIDgwKCUwKSA7IgorKwkJImFkY3EgJSVyY3gsICUlcjEwIDsiCisrCQkibW92cSAlJXIxMCwgIDg4KCUwKSA7IgorKwkJIm1vdnEgNDgoJTEpLCAlJXJkeCA7IgorKwkJIm11bHggJSVyZHgsICUlcmF4LCAlJXJjeCA7IiAvKiBCWzJdXjIgKi8KKysJCSJhZGNxICUlcmF4LCAlJXIxMSA7IgorKwkJIm1vdnEgJSVyMTEsICA5NiglMCkgOyIKKysJCSJhZGNxICUlcmN4LCAlJXJieCA7IgorKwkJIm1vdnEgJSVyYngsIDEwNCglMCkgOyIKKysJCSJtb3ZxIDU2KCUxKSwgJSVyZHggOyIKKysJCSJtdWx4ICUlcmR4LCAlJXJheCwgJSVyY3ggOyIgLyogQlszXV4yICovCisrCQkiYWRjcSAlJXJheCwgJSVyMTMgOyIKKysJCSJtb3ZxICUlcjEzLCAxMTIoJTApIDsiCisrCQkiYWRjcSAlJXJjeCwgJSVyMTQgOyIKKysJCSJtb3ZxICUlcjE0LCAxMjAoJTApIDsiCisrCQk6CisrCQk6ICJyIihjKSwgInIiKGEpCisrCQk6ICJtZW1vcnkiLCAiY2MiLCAiJXJheCIsICIlcmJ4IiwgIiVyY3giLCAiJXJkeCIsICIlcjgiLCAiJXI5IiwKKysJCSAgIiVyMTAiLCAiJXIxMSIsICIlcjEzIiwgIiVyMTQiLCAiJXIxNSIpOworK30KKysKKytzdGF0aWMgdm9pZCBzcXIyXzI1NngyNTZfaW50ZWdlcl9ibWkyKHU2NCAqY29uc3QgYywgY29uc3QgdTY0ICpjb25zdCBhKQorK3sKKysJYXNtIHZvbGF0aWxlKAorKwkJIm1vdnEgIDgoJTEpLCAlJXJkeCAgICAgICAgOyIgLyogQVsxXSAgICAgICovCisrCQkibXVseCAgICglMSksICAlJXI4LCAgJSVyOSA7IiAvKiBBWzBdKkFbMV0gKi8KKysJCSJtdWx4IDE2KCUxKSwgJSVyMTAsICUlcjExIDsiIC8qIEFbMl0qQVsxXSAqLworKwkJIm11bHggMjQoJTEpLCAlJXJjeCwgJSVyMTQgOyIgLyogQVszXSpBWzFdICovCisrCisrCQkibW92cSAxNiglMSksICUlcmR4ICAgICAgICA7IiAvKiBBWzJdICAgICAgKi8KKysJCSJtdWx4IDI0KCUxKSwgJSVyMTUsICUlcjEzIDsiIC8qIEFbM10qQVsyXSAqLworKwkJIm11bHggICAoJTEpLCAlJXJheCwgJSVyZHggOyIgLyogQVswXSpBWzJdICovCisrCisrCQkiYWRkcSAlJXJheCwgICUlcjkgOyIKKysJCSJhZGNxICUlcmR4LCAlJXIxMCA7IgorKwkJImFkY3EgJSVyY3gsICUlcjExIDsiCisrCQkiYWRjcSAlJXIxNCwgJSVyMTUgOyIKKysJCSJhZGNxICAgICQwLCAlJXIxMyA7IgorKwkJIm1vdnEgICAgJDAsICUlcjE0IDsiCisrCQkiYWRjcSAgICAkMCwgJSVyMTQgOyIKKysKKysJCSJtb3ZxICAgKCUxKSwgJSVyZHggICAgICAgIDsiIC8qIEFbMF0gICAgICAqLworKwkJIm11bHggMjQoJTEpLCAlJXJheCwgJSVyY3ggOyIgLyogQVswXSpBWzNdICovCisrCisrCQkiYWRkcSAlJXJheCwgJSVyMTAgOyIKKysJCSJhZGNxICUlcmN4LCAlJXIxMSA7IgorKwkJImFkY3EgICAgJDAsICUlcjE1IDsiCisrCQkiYWRjcSAgICAkMCwgJSVyMTMgOyIKKysJCSJhZGNxICAgICQwLCAlJXIxNCA7IgorKworKwkJInNobGRxICQxLCAlJXIxMywgJSVyMTQgOyIKKysJCSJzaGxkcSAkMSwgJSVyMTUsICUlcjEzIDsiCisrCQkic2hsZHEgJDEsICUlcjExLCAlJXIxNSA7IgorKwkJInNobGRxICQxLCAlJXIxMCwgJSVyMTEgOyIKKysJCSJzaGxkcSAkMSwgICUlcjksICUlcjEwIDsiCisrCQkic2hsZHEgJDEsICAlJXI4LCAgJSVyOSA7IgorKwkJInNobHEgICQxLCAgJSVyOCAgICAgICAgOyIKKysKKysJCS8qKioqKioqKioqKioqKioqKioqLworKwkJIm11bHggJSVyZHgsICUlcmF4LCAlJXJjeCA7ICIgLyogQVswXV4yICovCisrCQkvKioqKioqKioqKioqKioqKioqKi8KKysJCSJtb3ZxICUlcmF4LCAgMCglMCkgOyIKKysJCSJhZGRxICUlcmN4LCAgJSVyOCA7IgorKwkJIm1vdnEgICUlcjgsICA4KCUwKSA7IgorKwkJIm1vdnEgIDgoJTEpLCAlJXJkeCA7IgorKwkJIm11bHggJSVyZHgsICUlcmF4LCAlJXJjeCA7ICIgLyogQVsxXV4yICovCisrCQkiYWRjcSAlJXJheCwgICUlcjkgOyIKKysJCSJtb3ZxICAlJXI5LCAxNiglMCkgOyIKKysJCSJhZGNxICUlcmN4LCAlJXIxMCA7IgorKwkJIm1vdnEgJSVyMTAsIDI0KCUwKSA7IgorKwkJIm1vdnEgMTYoJTEpLCAlJXJkeCA7IgorKwkJIm11bHggJSVyZHgsICUlcmF4LCAlJXJjeCA7ICIgLyogQVsyXV4yICovCisrCQkiYWRjcSAlJXJheCwgJSVyMTEgOyIKKysJCSJtb3ZxICUlcjExLCAzMiglMCkgOyIKKysJCSJhZGNxICUlcmN4LCAlJXIxNSA7IgorKwkJIm1vdnEgJSVyMTUsIDQwKCUwKSA7IgorKwkJIm1vdnEgMjQoJTEpLCAlJXJkeCA7IgorKwkJIm11bHggJSVyZHgsICUlcmF4LCAlJXJjeCA7ICIgLyogQVszXV4yICovCisrCQkiYWRjcSAlJXJheCwgJSVyMTMgOyIKKysJCSJtb3ZxICUlcjEzLCA0OCglMCkgOyIKKysJCSJhZGNxICUlcmN4LCAlJXIxNCA7IgorKwkJIm1vdnEgJSVyMTQsIDU2KCUwKSA7IgorKworKwkJIm1vdnEgNDAoJTEpLCAlJXJkeCAgICAgICAgOyIgLyogQlsxXSAgICAgICovCisrCQkibXVseCAzMiglMSksICAlJXI4LCAgJSVyOSA7IiAvKiBCWzBdKkJbMV0gKi8KKysJCSJtdWx4IDQ4KCUxKSwgJSVyMTAsICUlcjExIDsiIC8qIEJbMl0qQlsxXSAqLworKwkJIm11bHggNTYoJTEpLCAlJXJjeCwgJSVyMTQgOyIgLyogQlszXSpCWzFdICovCisrCisrCQkibW92cSA0OCglMSksICUlcmR4ICAgICAgICA7IiAvKiBCWzJdICAgICAgKi8KKysJCSJtdWx4IDU2KCUxKSwgJSVyMTUsICUlcjEzIDsiIC8qIEJbM10qQlsyXSAqLworKwkJIm11bHggMzIoJTEpLCAlJXJheCwgJSVyZHggOyIgLyogQlswXSpCWzJdICovCisrCisrCQkiYWRkcSAlJXJheCwgICUlcjkgOyIKKysJCSJhZGNxICUlcmR4LCAlJXIxMCA7IgorKwkJImFkY3EgJSVyY3gsICUlcjExIDsiCisrCQkiYWRjcSAlJXIxNCwgJSVyMTUgOyIKKysJCSJhZGNxICAgICQwLCAlJXIxMyA7IgorKwkJIm1vdnEgICAgJDAsICUlcjE0IDsiCisrCQkiYWRjcSAgICAkMCwgJSVyMTQgOyIKKysKKysJCSJtb3ZxIDMyKCUxKSwgJSVyZHggICAgICAgIDsiIC8qIEJbMF0gICAgICAqLworKwkJIm11bHggNTYoJTEpLCAlJXJheCwgJSVyY3ggOyIgLyogQlswXSpCWzNdICovCisrCisrCQkiYWRkcSAlJXJheCwgJSVyMTAgOyIKKysJCSJhZGNxICUlcmN4LCAlJXIxMSA7IgorKwkJImFkY3EgICAgJDAsICUlcjE1IDsiCisrCQkiYWRjcSAgICAkMCwgJSVyMTMgOyIKKysJCSJhZGNxICAgICQwLCAlJXIxNCA7IgorKworKwkJInNobGRxICQxLCAlJXIxMywgJSVyMTQgOyIKKysJCSJzaGxkcSAkMSwgJSVyMTUsICUlcjEzIDsiCisrCQkic2hsZHEgJDEsICUlcjExLCAlJXIxNSA7IgorKwkJInNobGRxICQxLCAlJXIxMCwgJSVyMTEgOyIKKysJCSJzaGxkcSAkMSwgICUlcjksICUlcjEwIDsiCisrCQkic2hsZHEgJDEsICAlJXI4LCAgJSVyOSA7IgorKwkJInNobHEgICQxLCAgJSVyOCAgICAgICAgOyIKKysKKysJCS8qKioqKioqKioqKioqKioqKioqLworKwkJIm11bHggJSVyZHgsICUlcmF4LCAlJXJjeCA7ICIgLyogQlswXV4yICovCisrCQkvKioqKioqKioqKioqKioqKioqKi8KKysJCSJtb3ZxICUlcmF4LCAgNjQoJTApIDsiCisrCQkiYWRkcSAlJXJjeCwgICUlcjggOyIKKysJCSJtb3ZxICAlJXI4LCAgNzIoJTApIDsiCisrCQkibW92cSA0MCglMSksICUlcmR4IDsiCisrCQkibXVseCAlJXJkeCwgJSVyYXgsICUlcmN4IDsgIiAvKiBCWzFdXjIgKi8KKysJCSJhZGNxICUlcmF4LCAgJSVyOSA7IgorKwkJIm1vdnEgICUlcjksICA4MCglMCkgOyIKKysJCSJhZGNxICUlcmN4LCAlJXIxMCA7IgorKwkJIm1vdnEgJSVyMTAsICA4OCglMCkgOyIKKysJCSJtb3ZxIDQ4KCUxKSwgJSVyZHggOyIKKysJCSJtdWx4ICUlcmR4LCAlJXJheCwgJSVyY3ggOyAiIC8qIEJbMl1eMiAqLworKwkJImFkY3EgJSVyYXgsICUlcjExIDsiCisrCQkibW92cSAlJXIxMSwgIDk2KCUwKSA7IgorKwkJImFkY3EgJSVyY3gsICUlcjE1IDsiCisrCQkibW92cSAlJXIxNSwgMTA0KCUwKSA7IgorKwkJIm1vdnEgNTYoJTEpLCAlJXJkeCA7IgorKwkJIm11bHggJSVyZHgsICUlcmF4LCAlJXJjeCA7ICIgLyogQlszXV4yICovCisrCQkiYWRjcSAlJXJheCwgJSVyMTMgOyIKKysJCSJtb3ZxICUlcjEzLCAxMTIoJTApIDsiCisrCQkiYWRjcSAlJXJjeCwgJSVyMTQgOyIKKysJCSJtb3ZxICUlcjE0LCAxMjAoJTApIDsiCisrCQk6CisrCQk6ICJyIihjKSwgInIiKGEpCisrCQk6ICJtZW1vcnkiLCAiY2MiLCAiJXJheCIsICIlcmN4IiwgIiVyZHgiLCAiJXI4IiwgIiVyOSIsICIlcjEwIiwKKysJCSAgIiVyMTEiLCAiJXIxMyIsICIlcjE0IiwgIiVyMTUiKTsKKyt9CisrCisrc3RhdGljIHZvaWQgcmVkX2VsdGZwMjU1MTlfMndfYWR4KHU2NCAqY29uc3QgYywgY29uc3QgdTY0ICpjb25zdCBhKQorK3sKKysJYXNtIHZvbGF0aWxlKAorKwkJIm1vdmwgICAgJDM4LCAlJWVkeDsgIgkvKiAyKmMgPSAzOCA9IDJeMjU2ICovCisrCQkibXVseCAzMiglMSksICAlJXI4LCAlJXIxMDsgIiAvKiBjKkNbNF0gKi8KKysJCSJ4b3JsICUlZWJ4LCAlJWVieCA7IgorKwkJImFkb3ggICAoJTEpLCAgJSVyOCA7IgorKwkJIm11bHggNDAoJTEpLCAgJSVyOSwgJSVyMTE7ICIgLyogYypDWzVdICovCisrCQkiYWRjeCAlJXIxMCwgICUlcjkgOyIKKysJCSJhZG94ICA4KCUxKSwgICUlcjkgOyIKKysJCSJtdWx4IDQ4KCUxKSwgJSVyMTAsICUlcmF4OyAiIC8qIGMqQ1s2XSAqLworKwkJImFkY3ggJSVyMTEsICUlcjEwIDsiCisrCQkiYWRveCAxNiglMSksICUlcjEwIDsiCisrCQkibXVseCA1NiglMSksICUlcjExLCAlJXJjeDsgIiAvKiBjKkNbN10gKi8KKysJCSJhZGN4ICUlcmF4LCAlJXIxMSA7IgorKwkJImFkb3ggMjQoJTEpLCAlJXIxMSA7IgorKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysJCSJhZGN4ICUlcmJ4LCAlJXJjeCA7IgorKwkJImFkb3ggICUlcmJ4LCAlJXJjeCA7IgorKwkJImltdWwgJSVyZHgsICUlcmN4IDsiIC8qIGMqQ1s0XSwgY2Y9MCwgb2Y9MCAqLworKwkJImFkY3ggJSVyY3gsICAlJXI4IDsiCisrCQkiYWRjeCAlJXJieCwgICUlcjkgOyIKKysJCSJtb3ZxICAlJXI5LCAgOCglMCkgOyIKKysJCSJhZGN4ICUlcmJ4LCAlJXIxMCA7IgorKwkJIm1vdnEgJSVyMTAsIDE2KCUwKSA7IgorKwkJImFkY3ggJSVyYngsICUlcjExIDsiCisrCQkibW92cSAlJXIxMSwgMjQoJTApIDsiCisrCQkibW92ICAgICAkMCwgJSVlY3ggOyIKKysJCSJjbW92YyAlJWVkeCwgJSVlY3ggOyIKKysJCSJhZGRxICUlcmN4LCAgJSVyOCA7IgorKwkJIm1vdnEgICUlcjgsICAgKCUwKSA7IgorKworKwkJIm11bHggIDk2KCUxKSwgICUlcjgsICUlcjEwOyAiIC8qIGMqQ1s0XSAqLworKwkJInhvcmwgJSVlYngsICUlZWJ4IDsiCisrCQkiYWRveCA2NCglMSksICAlJXI4IDsiCisrCQkibXVseCAxMDQoJTEpLCAgJSVyOSwgJSVyMTE7ICIgLyogYypDWzVdICovCisrCQkiYWRjeCAlJXIxMCwgICUlcjkgOyIKKysJCSJhZG94IDcyKCUxKSwgICUlcjkgOyIKKysJCSJtdWx4IDExMiglMSksICUlcjEwLCAlJXJheDsgIiAvKiBjKkNbNl0gKi8KKysJCSJhZGN4ICUlcjExLCAlJXIxMCA7IgorKwkJImFkb3ggODAoJTEpLCAlJXIxMCA7IgorKwkJIm11bHggMTIwKCUxKSwgJSVyMTEsICUlcmN4OyAiIC8qIGMqQ1s3XSAqLworKwkJImFkY3ggJSVyYXgsICUlcjExIDsiCisrCQkiYWRveCA4OCglMSksICUlcjExIDsiCisrCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysJCSJhZGN4ICUlcmJ4LCAlJXJjeCA7IgorKwkJImFkb3ggICUlcmJ4LCAlJXJjeCA7IgorKwkJImltdWwgJSVyZHgsICUlcmN4IDsiIC8qIGMqQ1s0XSwgY2Y9MCwgb2Y9MCAqLworKwkJImFkY3ggJSVyY3gsICAlJXI4IDsiCisrCQkiYWRjeCAlJXJieCwgICUlcjkgOyIKKysJCSJtb3ZxICAlJXI5LCA0MCglMCkgOyIKKysJCSJhZGN4ICUlcmJ4LCAlJXIxMCA7IgorKwkJIm1vdnEgJSVyMTAsIDQ4KCUwKSA7IgorKwkJImFkY3ggJSVyYngsICUlcjExIDsiCisrCQkibW92cSAlJXIxMSwgNTYoJTApIDsiCisrCQkibW92ICAgICAkMCwgJSVlY3ggOyIKKysJCSJjbW92YyAlJWVkeCwgJSVlY3ggOyIKKysJCSJhZGRxICUlcmN4LCAgJSVyOCA7IgorKwkJIm1vdnEgICUlcjgsIDMyKCUwKSA7IgorKwkJOgorKwkJOiAiciIoYyksICJyIihhKQorKwkJOiAibWVtb3J5IiwgImNjIiwgIiVyYXgiLCAiJXJieCIsICIlcmN4IiwgIiVyZHgiLCAiJXI4IiwgIiVyOSIsCisrCQkgICIlcjEwIiwgIiVyMTEiKTsKKyt9CisrCisrc3RhdGljIHZvaWQgcmVkX2VsdGZwMjU1MTlfMndfYm1pMih1NjQgKmNvbnN0IGMsIGNvbnN0IHU2NCAqY29uc3QgYSkKKyt7CisrCWFzbSB2b2xhdGlsZSgKKysJCSJtb3ZsICAgICQzOCwgJSVlZHggOyAiICAgICAgIC8qIDIqYyA9IDM4ID0gMl4yNTYgKi8KKysJCSJtdWx4IDMyKCUxKSwgICUlcjgsICUlcjEwIDsiIC8qIGMqQ1s0XSAqLworKwkJIm11bHggNDAoJTEpLCAgJSVyOSwgJSVyMTEgOyIgLyogYypDWzVdICovCisrCQkiYWRkcSAlJXIxMCwgICUlcjkgOyIKKysJCSJtdWx4IDQ4KCUxKSwgJSVyMTAsICUlcmF4IDsiIC8qIGMqQ1s2XSAqLworKwkJImFkY3EgJSVyMTEsICUlcjEwIDsiCisrCQkibXVseCA1NiglMSksICUlcjExLCAlJXJjeCA7IiAvKiBjKkNbN10gKi8KKysJCSJhZGNxICUlcmF4LCAlJXIxMSA7IgorKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysJCSJhZGNxICAgICQwLCAlJXJjeCA7IgorKwkJImFkZHEgICAoJTEpLCAgJSVyOCA7IgorKwkJImFkY3EgIDgoJTEpLCAgJSVyOSA7IgorKwkJImFkY3EgMTYoJTEpLCAlJXIxMCA7IgorKwkJImFkY3EgMjQoJTEpLCAlJXIxMSA7IgorKwkJImFkY3EgICAgICQwLCAlJXJjeCA7IgorKwkJImltdWwgJSVyZHgsICUlcmN4IDsiIC8qIGMqQ1s0XSwgY2Y9MCAqLworKwkJImFkZHEgJSVyY3gsICAlJXI4IDsiCisrCQkiYWRjcSAgICAkMCwgICUlcjkgOyIKKysJCSJtb3ZxICAlJXI5LCAgOCglMCkgOyIKKysJCSJhZGNxICAgICQwLCAlJXIxMCA7IgorKwkJIm1vdnEgJSVyMTAsIDE2KCUwKSA7IgorKwkJImFkY3EgICAgJDAsICUlcjExIDsiCisrCQkibW92cSAlJXIxMSwgMjQoJTApIDsiCisrCQkibW92ICAgICAkMCwgJSVlY3ggOyIKKysJCSJjbW92YyAlJWVkeCwgJSVlY3ggOyIKKysJCSJhZGRxICUlcmN4LCAgJSVyOCA7IgorKwkJIm1vdnEgICUlcjgsICAgKCUwKSA7IgorKworKwkJIm11bHggIDk2KCUxKSwgICUlcjgsICUlcjEwIDsiIC8qIGMqQ1s0XSAqLworKwkJIm11bHggMTA0KCUxKSwgICUlcjksICUlcjExIDsiIC8qIGMqQ1s1XSAqLworKwkJImFkZHEgJSVyMTAsICAlJXI5IDsiCisrCQkibXVseCAxMTIoJTEpLCAlJXIxMCwgJSVyYXggOyIgLyogYypDWzZdICovCisrCQkiYWRjcSAlJXIxMSwgJSVyMTAgOyIKKysJCSJtdWx4IDEyMCglMSksICUlcjExLCAlJXJjeCA7IiAvKiBjKkNbN10gKi8KKysJCSJhZGNxICUlcmF4LCAlJXIxMSA7IgorKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCQkiYWRjcSAgICAkMCwgJSVyY3ggOyIKKysJCSJhZGRxIDY0KCUxKSwgICUlcjggOyIKKysJCSJhZGNxIDcyKCUxKSwgICUlcjkgOyIKKysJCSJhZGNxIDgwKCUxKSwgJSVyMTAgOyIKKysJCSJhZGNxIDg4KCUxKSwgJSVyMTEgOyIKKysJCSJhZGNxICAgICAkMCwgJSVyY3ggOyIKKysJCSJpbXVsICUlcmR4LCAlJXJjeCA7IiAvKiBjKkNbNF0sIGNmPTAgKi8KKysJCSJhZGRxICUlcmN4LCAgJSVyOCA7IgorKwkJImFkY3EgICAgJDAsICAlJXI5IDsiCisrCQkibW92cSAgJSVyOSwgNDAoJTApIDsiCisrCQkiYWRjcSAgICAkMCwgJSVyMTAgOyIKKysJCSJtb3ZxICUlcjEwLCA0OCglMCkgOyIKKysJCSJhZGNxICAgICQwLCAlJXIxMSA7IgorKwkJIm1vdnEgJSVyMTEsIDU2KCUwKSA7IgorKwkJIm1vdiAgICAgJDAsICUlZWN4IDsiCisrCQkiY21vdmMgJSVlZHgsICUlZWN4IDsiCisrCQkiYWRkcSAlJXJjeCwgICUlcjggOyIKKysJCSJtb3ZxICAlJXI4LCAzMiglMCkgOyIKKysJCToKKysJCTogInIiKGMpLCAiciIoYSkKKysJCTogIm1lbW9yeSIsICJjYyIsICIlcmF4IiwgIiVyY3giLCAiJXJkeCIsICIlcjgiLCAiJXI5IiwgIiVyMTAiLAorKwkJICAiJXIxMSIpOworK30KKysKKytzdGF0aWMgdm9pZCBtdWxfMjU2eDI1Nl9pbnRlZ2VyX2FkeCh1NjQgKmNvbnN0IGMsIGNvbnN0IHU2NCAqY29uc3QgYSwKKysJCQkJICAgIGNvbnN0IHU2NCAqY29uc3QgYikKKyt7CisrCWFzbSB2b2xhdGlsZSgKKysJCSJtb3ZxICAgKCUxKSwgJSVyZHg7ICIJLyogQVswXSAqLworKwkJIm11bHggICAoJTIpLCAgJSVyOCwgICUlcjk7ICIgLyogQVswXSpCWzBdICovCisrCQkieG9ybCAlJXIxMGQsICUlcjEwZCA7IgorKwkJIm1vdnEgICUlcjgsICAoJTApIDsiCisrCQkibXVseCAgOCglMiksICUlcjEwLCAlJXIxMTsgIiAvKiBBWzBdKkJbMV0gKi8KKysJCSJhZG94ICAlJXI5LCAlJXIxMCA7IgorKwkJIm1vdnEgJSVyMTAsIDgoJTApIDsiCisrCQkibXVseCAxNiglMiksICUlcjE1LCAlJXIxMzsgIiAvKiBBWzBdKkJbMl0gKi8KKysJCSJhZG94ICUlcjExLCAlJXIxNSA7IgorKwkJIm11bHggMjQoJTIpLCAlJXIxNCwgJSVyZHg7ICIgLyogQVswXSpCWzNdICovCisrCQkiYWRveCAlJXIxMywgJSVyMTQgOyIKKysJCSJtb3ZxICQwLCAlJXJheCA7IgorKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysJCSJhZG94ICUlcmR4LCAlJXJheCA7IgorKworKwkJIm1vdnEgIDgoJTEpLCAlJXJkeDsgIgkvKiBBWzFdICovCisrCQkibXVseCAgICglMiksICAlJXI4LCAgJSVyOTsgIiAvKiBBWzFdKkJbMF0gKi8KKysJCSJ4b3JsICUlcjEwZCwgJSVyMTBkIDsiCisrCQkiYWRjeCA4KCUwKSwgICUlcjggOyIKKysJCSJtb3ZxICAlJXI4LCAgOCglMCkgOyIKKysJCSJtdWx4ICA4KCUyKSwgJSVyMTAsICUlcjExOyAiIC8qIEFbMV0qQlsxXSAqLworKwkJImFkb3ggICUlcjksICUlcjEwIDsiCisrCQkiYWRjeCAlJXIxNSwgJSVyMTAgOyIKKysJCSJtb3ZxICUlcjEwLCAxNiglMCkgOyIKKysJCSJtdWx4IDE2KCUyKSwgJSVyMTUsICUlcjEzOyAiIC8qIEFbMV0qQlsyXSAqLworKwkJImFkb3ggJSVyMTEsICUlcjE1IDsiCisrCQkiYWRjeCAlJXIxNCwgJSVyMTUgOyIKKysJCSJtb3ZxICQwLCAlJXI4ICA7IgorKwkJIm11bHggMjQoJTIpLCAlJXIxNCwgJSVyZHg7ICIgLyogQVsxXSpCWzNdICovCisrCQkiYWRveCAlJXIxMywgJSVyMTQgOyIKKysJCSJhZGN4ICUlcmF4LCAlJXIxNCA7IgorKwkJIm1vdnEgJDAsICUlcmF4IDsiCisrCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKwkJImFkb3ggJSVyZHgsICUlcmF4IDsiCisrCQkiYWRjeCAgJSVyOCwgJSVyYXggOyIKKysKKysJCSJtb3ZxIDE2KCUxKSwgJSVyZHg7ICIJLyogQVsyXSAqLworKwkJIm11bHggICAoJTIpLCAgJSVyOCwgICUlcjk7ICIgLyogQVsyXSpCWzBdICovCisrCQkieG9ybCAlJXIxMGQsICUlcjEwZCA7IgorKwkJImFkY3ggMTYoJTApLCAlJXI4IDsiCisrCQkibW92cSAgJSVyOCwgMTYoJTApIDsiCisrCQkibXVseCAgOCglMiksICUlcjEwLCAlJXIxMTsgIiAvKiBBWzJdKkJbMV0gKi8KKysJCSJhZG94ICAlJXI5LCAlJXIxMCA7IgorKwkJImFkY3ggJSVyMTUsICUlcjEwIDsiCisrCQkibW92cSAlJXIxMCwgMjQoJTApIDsiCisrCQkibXVseCAxNiglMiksICUlcjE1LCAlJXIxMzsgIiAvKiBBWzJdKkJbMl0gKi8KKysJCSJhZG94ICUlcjExLCAlJXIxNSA7IgorKwkJImFkY3ggJSVyMTQsICUlcjE1IDsiCisrCQkibW92cSAkMCwgJSVyOCAgOyIKKysJCSJtdWx4IDI0KCUyKSwgJSVyMTQsICUlcmR4OyAiIC8qIEFbMl0qQlszXSAqLworKwkJImFkb3ggJSVyMTMsICUlcjE0IDsiCisrCQkiYWRjeCAlJXJheCwgJSVyMTQgOyIKKysJCSJtb3ZxICQwLCAlJXJheCA7IgorKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysJCSJhZG94ICUlcmR4LCAlJXJheCA7IgorKwkJImFkY3ggICUlcjgsICUlcmF4IDsiCisrCisrCQkibW92cSAyNCglMSksICUlcmR4OyAiCS8qIEFbM10gKi8KKysJCSJtdWx4ICAgKCUyKSwgICUlcjgsICAlJXI5OyAiIC8qIEFbM10qQlswXSAqLworKwkJInhvcmwgJSVyMTBkLCAlJXIxMGQgOyIKKysJCSJhZGN4IDI0KCUwKSwgJSVyOCA7IgorKwkJIm1vdnEgICUlcjgsIDI0KCUwKSA7IgorKwkJIm11bHggIDgoJTIpLCAlJXIxMCwgJSVyMTE7ICIgLyogQVszXSpCWzFdICovCisrCQkiYWRveCAgJSVyOSwgJSVyMTAgOyIKKysJCSJhZGN4ICUlcjE1LCAlJXIxMCA7IgorKwkJIm1vdnEgJSVyMTAsIDMyKCUwKSA7IgorKwkJIm11bHggMTYoJTIpLCAlJXIxNSwgJSVyMTM7ICIgLyogQVszXSpCWzJdICovCisrCQkiYWRveCAlJXIxMSwgJSVyMTUgOyIKKysJCSJhZGN4ICUlcjE0LCAlJXIxNSA7IgorKwkJIm1vdnEgJSVyMTUsIDQwKCUwKSA7IgorKwkJIm1vdnEgJDAsICUlcjggIDsiCisrCQkibXVseCAyNCglMiksICUlcjE0LCAlJXJkeDsgIiAvKiBBWzNdKkJbM10gKi8KKysJCSJhZG94ICUlcjEzLCAlJXIxNCA7IgorKwkJImFkY3ggJSVyYXgsICUlcjE0IDsiCisrCQkibW92cSAlJXIxNCwgNDgoJTApIDsiCisrCQkibW92cSAkMCwgJSVyYXggOyIKKysJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCQkiYWRveCAlJXJkeCwgJSVyYXggOyIKKysJCSJhZGN4ICAlJXI4LCAlJXJheCA7IgorKwkJIm1vdnEgJSVyYXgsIDU2KCUwKSA7IgorKwkJOgorKwkJOiAiciIoYyksICJyIihhKSwgInIiKGIpCisrCQk6ICJtZW1vcnkiLCAiY2MiLCAiJXJheCIsICIlcmR4IiwgIiVyOCIsICIlcjkiLCAiJXIxMCIsICIlcjExIiwKKysJCSAgIiVyMTMiLCAiJXIxNCIsICIlcjE1Iik7CisrfQorKworK3N0YXRpYyB2b2lkIG11bF8yNTZ4MjU2X2ludGVnZXJfYm1pMih1NjQgKmNvbnN0IGMsIGNvbnN0IHU2NCAqY29uc3QgYSwKKysJCQkJICAgICBjb25zdCB1NjQgKmNvbnN0IGIpCisreworKwlhc20gdm9sYXRpbGUoCisrCQkibW92cSAgICglMSksICUlcmR4OyAiCS8qIEFbMF0gKi8KKysJCSJtdWx4ICAgKCUyKSwgICUlcjgsICUlcjE1OyAiIC8qIEFbMF0qQlswXSAqLworKwkJIm1vdnEgJSVyOCwgICglMCkgOyIKKysJCSJtdWx4ICA4KCUyKSwgJSVyMTAsICUlcmF4OyAiIC8qIEFbMF0qQlsxXSAqLworKwkJImFkZHEgJSVyMTAsICUlcjE1IDsiCisrCQkibXVseCAxNiglMiksICAlJXI4LCAlJXJieDsgIiAvKiBBWzBdKkJbMl0gKi8KKysJCSJhZGNxICAlJXI4LCAlJXJheCA7IgorKwkJIm11bHggMjQoJTIpLCAlJXIxMCwgJSVyY3g7ICIgLyogQVswXSpCWzNdICovCisrCQkiYWRjcSAlJXIxMCwgJSVyYnggOyIKKysJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCQkiYWRjcSAgICAkMCwgJSVyY3ggOyIKKysKKysJCSJtb3ZxICA4KCUxKSwgJSVyZHg7ICIJLyogQVsxXSAqLworKwkJIm11bHggICAoJTIpLCAgJSVyOCwgICUlcjk7ICIgLyogQVsxXSpCWzBdICovCisrCQkiYWRkcSAlJXIxNSwgICUlcjggOyIKKysJCSJtb3ZxICUlcjgsIDgoJTApIDsiCisrCQkibXVseCAgOCglMiksICUlcjEwLCAlJXIxMTsgIiAvKiBBWzFdKkJbMV0gKi8KKysJCSJhZGNxICUlcjEwLCAgJSVyOSA7IgorKwkJIm11bHggMTYoJTIpLCAgJSVyOCwgJSVyMTM7ICIgLyogQVsxXSpCWzJdICovCisrCQkiYWRjcSAgJSVyOCwgJSVyMTEgOyIKKysJCSJtdWx4IDI0KCUyKSwgJSVyMTAsICUlcjE1OyAiIC8qIEFbMV0qQlszXSAqLworKwkJImFkY3EgJSVyMTAsICUlcjEzIDsiCisrCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKwkJImFkY3EgICAgJDAsICUlcjE1IDsiCisrCisrCQkiYWRkcSAgJSVyOSwgJSVyYXggOyIKKysJCSJhZGNxICUlcjExLCAlJXJieCA7IgorKwkJImFkY3EgJSVyMTMsICUlcmN4IDsiCisrCQkiYWRjcSAgICAkMCwgJSVyMTUgOyIKKysKKysJCSJtb3ZxIDE2KCUxKSwgJSVyZHg7ICIJLyogQVsyXSAqLworKwkJIm11bHggICAoJTIpLCAgJSVyOCwgICUlcjk7ICIgLyogQVsyXSpCWzBdICovCisrCQkiYWRkcSAlJXJheCwgICUlcjggOyIKKysJCSJtb3ZxICUlcjgsIDE2KCUwKSA7IgorKwkJIm11bHggIDgoJTIpLCAlJXIxMCwgJSVyMTE7ICIgLyogQVsyXSpCWzFdICovCisrCQkiYWRjcSAlJXIxMCwgICUlcjkgOyIKKysJCSJtdWx4IDE2KCUyKSwgICUlcjgsICUlcjEzOyAiIC8qIEFbMl0qQlsyXSAqLworKwkJImFkY3EgICUlcjgsICUlcjExIDsiCisrCQkibXVseCAyNCglMiksICUlcjEwLCAlJXJheDsgIiAvKiBBWzJdKkJbM10gKi8KKysJCSJhZGNxICUlcjEwLCAlJXIxMyA7IgorKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysJCSJhZGNxICAgICQwLCAlJXJheCA7IgorKworKwkJImFkZHEgICUlcjksICUlcmJ4IDsiCisrCQkiYWRjcSAlJXIxMSwgJSVyY3ggOyIKKysJCSJhZGNxICUlcjEzLCAlJXIxNSA7IgorKwkJImFkY3EgICAgJDAsICUlcmF4IDsiCisrCisrCQkibW92cSAyNCglMSksICUlcmR4OyAiCS8qIEFbM10gKi8KKysJCSJtdWx4ICAgKCUyKSwgICUlcjgsICAlJXI5OyAiIC8qIEFbM10qQlswXSAqLworKwkJImFkZHEgJSVyYngsICAlJXI4IDsiCisrCQkibW92cSAlJXI4LCAyNCglMCkgOyIKKysJCSJtdWx4ICA4KCUyKSwgJSVyMTAsICUlcjExOyAiIC8qIEFbM10qQlsxXSAqLworKwkJImFkY3EgJSVyMTAsICAlJXI5IDsiCisrCQkibXVseCAxNiglMiksICAlJXI4LCAlJXIxMzsgIiAvKiBBWzNdKkJbMl0gKi8KKysJCSJhZGNxICAlJXI4LCAlJXIxMSA7IgorKwkJIm11bHggMjQoJTIpLCAlJXIxMCwgJSVyYng7ICIgLyogQVszXSpCWzNdICovCisrCQkiYWRjcSAlJXIxMCwgJSVyMTMgOyIKKysJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCQkiYWRjcSAgICAkMCwgJSVyYnggOyIKKysKKysJCSJhZGRxICAlJXI5LCAlJXJjeCA7IgorKwkJIm1vdnEgJSVyY3gsIDMyKCUwKSA7IgorKwkJImFkY3EgJSVyMTEsICUlcjE1IDsiCisrCQkibW92cSAlJXIxNSwgNDAoJTApIDsiCisrCQkiYWRjcSAlJXIxMywgJSVyYXggOyIKKysJCSJtb3ZxICUlcmF4LCA0OCglMCkgOyIKKysJCSJhZGNxICAgICQwLCAlJXJieCA7IgorKwkJIm1vdnEgJSVyYngsIDU2KCUwKSA7IgorKwkJOgorKwkJOiAiciIoYyksICJyIihhKSwgInIiKGIpCisrCQk6ICJtZW1vcnkiLCAiY2MiLCAiJXJheCIsICIlcmJ4IiwgIiVyY3giLCAiJXJkeCIsICIlcjgiLCAiJXI5IiwKKysJCSAgIiVyMTAiLCAiJXIxMSIsICIlcjEzIiwgIiVyMTUiKTsKKyt9CisrCisrc3RhdGljIHZvaWQgc3FyXzI1NngyNTZfaW50ZWdlcl9hZHgodTY0ICpjb25zdCBjLCBjb25zdCB1NjQgKmNvbnN0IGEpCisreworKwlhc20gdm9sYXRpbGUoCisrCQkibW92cSAgICglMSksICUlcmR4ICAgICAgICA7IiAvKiBBWzBdICAgICAgKi8KKysJCSJtdWx4ICA4KCUxKSwgICUlcjgsICUlcjE0IDsiIC8qIEFbMV0qQVswXSAqLworKwkJInhvcmwgJSVyMTVkLCAlJXIxNWQ7IgorKwkJIm11bHggMTYoJTEpLCAgJSVyOSwgJSVyMTAgOyIgLyogQVsyXSpBWzBdICovCisrCQkiYWRjeCAlJXIxNCwgICUlcjkgOyIKKysJCSJtdWx4IDI0KCUxKSwgJSVyYXgsICUlcmN4IDsiIC8qIEFbM10qQVswXSAqLworKwkJImFkY3ggJSVyYXgsICUlcjEwIDsiCisrCQkibW92cSAyNCglMSksICUlcmR4ICAgICAgICA7IiAvKiBBWzNdICAgICAgKi8KKysJCSJtdWx4ICA4KCUxKSwgJSVyMTEsICUlcmJ4IDsiIC8qIEFbMV0qQVszXSAqLworKwkJImFkY3ggJSVyY3gsICUlcjExIDsiCisrCQkibXVseCAxNiglMSksICUlcmF4LCAlJXIxMyA7IiAvKiBBWzJdKkFbM10gKi8KKysJCSJhZGN4ICUlcmF4LCAlJXJieCA7IgorKwkJIm1vdnEgIDgoJTEpLCAlJXJkeCAgICAgICAgOyIgLyogQVsxXSAgICAgICovCisrCQkiYWRjeCAlJXIxNSwgJSVyMTMgOyIKKysJCSJtdWx4IDE2KCUxKSwgJSVyYXgsICUlcmN4IDsiIC8qIEFbMl0qQVsxXSAqLworKwkJIm1vdnEgICAgJDAsICUlcjE0IDsiCisrCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKwkJImFkY3ggJSVyMTUsICUlcjE0IDsiCisrCisrCQkieG9ybCAlJXIxNWQsICUlcjE1ZDsiCisrCQkiYWRveCAlJXJheCwgJSVyMTAgOyIKKysJCSJhZGN4ICAlJXI4LCAgJSVyOCA7IgorKwkJImFkb3ggJSVyY3gsICUlcjExIDsiCisrCQkiYWRjeCAgJSVyOSwgICUlcjkgOyIKKysJCSJhZG94ICUlcjE1LCAlJXJieCA7IgorKwkJImFkY3ggJSVyMTAsICUlcjEwIDsiCisrCQkiYWRveCAlJXIxNSwgJSVyMTMgOyIKKysJCSJhZGN4ICUlcjExLCAlJXIxMSA7IgorKwkJImFkb3ggJSVyMTUsICUlcjE0IDsiCisrCQkiYWRjeCAlJXJieCwgJSVyYnggOyIKKysJCSJhZGN4ICUlcjEzLCAlJXIxMyA7IgorKwkJImFkY3ggJSVyMTQsICUlcjE0IDsiCisrCisrCQkibW92cSAgICglMSksICUlcmR4IDsiCisrCQkibXVseCAlJXJkeCwgJSVyYXgsICUlcmN4IDsiIC8qIEFbMF1eMiAqLworKwkJLyoqKioqKioqKioqKioqKioqKiovCisrCQkibW92cSAlJXJheCwgIDAoJTApIDsiCisrCQkiYWRkcSAlJXJjeCwgICUlcjggOyIKKysJCSJtb3ZxICAlJXI4LCAgOCglMCkgOyIKKysJCSJtb3ZxICA4KCUxKSwgJSVyZHggOyIKKysJCSJtdWx4ICUlcmR4LCAlJXJheCwgJSVyY3ggOyIgLyogQVsxXV4yICovCisrCQkiYWRjcSAlJXJheCwgICUlcjkgOyIKKysJCSJtb3ZxICAlJXI5LCAxNiglMCkgOyIKKysJCSJhZGNxICUlcmN4LCAlJXIxMCA7IgorKwkJIm1vdnEgJSVyMTAsIDI0KCUwKSA7IgorKwkJIm1vdnEgMTYoJTEpLCAlJXJkeCA7IgorKwkJIm11bHggJSVyZHgsICUlcmF4LCAlJXJjeCA7IiAvKiBBWzJdXjIgKi8KKysJCSJhZGNxICUlcmF4LCAlJXIxMSA7IgorKwkJIm1vdnEgJSVyMTEsIDMyKCUwKSA7IgorKwkJImFkY3EgJSVyY3gsICUlcmJ4IDsiCisrCQkibW92cSAlJXJieCwgNDAoJTApIDsiCisrCQkibW92cSAyNCglMSksICUlcmR4IDsiCisrCQkibXVseCAlJXJkeCwgJSVyYXgsICUlcmN4IDsiIC8qIEFbM11eMiAqLworKwkJImFkY3EgJSVyYXgsICUlcjEzIDsiCisrCQkibW92cSAlJXIxMywgNDgoJTApIDsiCisrCQkiYWRjcSAlJXJjeCwgJSVyMTQgOyIKKysJCSJtb3ZxICUlcjE0LCA1NiglMCkgOyIKKysJCToKKysJCTogInIiKGMpLCAiciIoYSkKKysJCTogIm1lbW9yeSIsICJjYyIsICIlcmF4IiwgIiVyYngiLCAiJXJjeCIsICIlcmR4IiwgIiVyOCIsICIlcjkiLAorKwkJICAiJXIxMCIsICIlcjExIiwgIiVyMTMiLCAiJXIxNCIsICIlcjE1Iik7CisrfQorKworK3N0YXRpYyB2b2lkIHNxcl8yNTZ4MjU2X2ludGVnZXJfYm1pMih1NjQgKmNvbnN0IGMsIGNvbnN0IHU2NCAqY29uc3QgYSkKKyt7CisrCWFzbSB2b2xhdGlsZSgKKysJCSJtb3ZxICA4KCUxKSwgJSVyZHggICAgICAgIDsiIC8qIEFbMV0gICAgICAqLworKwkJIm11bHggICAoJTEpLCAgJSVyOCwgICUlcjkgOyIgLyogQVswXSpBWzFdICovCisrCQkibXVseCAxNiglMSksICUlcjEwLCAlJXIxMSA7IiAvKiBBWzJdKkFbMV0gKi8KKysJCSJtdWx4IDI0KCUxKSwgJSVyY3gsICUlcjE0IDsiIC8qIEFbM10qQVsxXSAqLworKworKwkJIm1vdnEgMTYoJTEpLCAlJXJkeCAgICAgICAgOyIgLyogQVsyXSAgICAgICovCisrCQkibXVseCAyNCglMSksICUlcjE1LCAlJXIxMyA7IiAvKiBBWzNdKkFbMl0gKi8KKysJCSJtdWx4ICAgKCUxKSwgJSVyYXgsICUlcmR4IDsiIC8qIEFbMF0qQVsyXSAqLworKworKwkJImFkZHEgJSVyYXgsICAlJXI5IDsiCisrCQkiYWRjcSAlJXJkeCwgJSVyMTAgOyIKKysJCSJhZGNxICUlcmN4LCAlJXIxMSA7IgorKwkJImFkY3EgJSVyMTQsICUlcjE1IDsiCisrCQkiYWRjcSAgICAkMCwgJSVyMTMgOyIKKysJCSJtb3ZxICAgICQwLCAlJXIxNCA7IgorKwkJImFkY3EgICAgJDAsICUlcjE0IDsiCisrCisrCQkibW92cSAgICglMSksICUlcmR4ICAgICAgICA7IiAvKiBBWzBdICAgICAgKi8KKysJCSJtdWx4IDI0KCUxKSwgJSVyYXgsICUlcmN4IDsiIC8qIEFbMF0qQVszXSAqLworKworKwkJImFkZHEgJSVyYXgsICUlcjEwIDsiCisrCQkiYWRjcSAlJXJjeCwgJSVyMTEgOyIKKysJCSJhZGNxICAgICQwLCAlJXIxNSA7IgorKwkJImFkY3EgICAgJDAsICUlcjEzIDsiCisrCQkiYWRjcSAgICAkMCwgJSVyMTQgOyIKKysKKysJCSJzaGxkcSAkMSwgJSVyMTMsICUlcjE0IDsiCisrCQkic2hsZHEgJDEsICUlcjE1LCAlJXIxMyA7IgorKwkJInNobGRxICQxLCAlJXIxMSwgJSVyMTUgOyIKKysJCSJzaGxkcSAkMSwgJSVyMTAsICUlcjExIDsiCisrCQkic2hsZHEgJDEsICAlJXI5LCAlJXIxMCA7IgorKwkJInNobGRxICQxLCAgJSVyOCwgICUlcjkgOyIKKysJCSJzaGxxICAkMSwgICUlcjggICAgICAgIDsiCisrCisrCQkvKioqKioqKioqKioqKioqKioqKi8KKysJCSJtdWx4ICUlcmR4LCAlJXJheCwgJSVyY3ggOyIgLyogQVswXV4yICovCisrCQkvKioqKioqKioqKioqKioqKioqKi8KKysJCSJtb3ZxICUlcmF4LCAgMCglMCkgOyIKKysJCSJhZGRxICUlcmN4LCAgJSVyOCA7IgorKwkJIm1vdnEgICUlcjgsICA4KCUwKSA7IgorKwkJIm1vdnEgIDgoJTEpLCAlJXJkeCA7IgorKwkJIm11bHggJSVyZHgsICUlcmF4LCAlJXJjeCA7IiAvKiBBWzFdXjIgKi8KKysJCSJhZGNxICUlcmF4LCAgJSVyOSA7IgorKwkJIm1vdnEgICUlcjksIDE2KCUwKSA7IgorKwkJImFkY3EgJSVyY3gsICUlcjEwIDsiCisrCQkibW92cSAlJXIxMCwgMjQoJTApIDsiCisrCQkibW92cSAxNiglMSksICUlcmR4IDsiCisrCQkibXVseCAlJXJkeCwgJSVyYXgsICUlcmN4IDsiIC8qIEFbMl1eMiAqLworKwkJImFkY3EgJSVyYXgsICUlcjExIDsiCisrCQkibW92cSAlJXIxMSwgMzIoJTApIDsiCisrCQkiYWRjcSAlJXJjeCwgJSVyMTUgOyIKKysJCSJtb3ZxICUlcjE1LCA0MCglMCkgOyIKKysJCSJtb3ZxIDI0KCUxKSwgJSVyZHggOyIKKysJCSJtdWx4ICUlcmR4LCAlJXJheCwgJSVyY3ggOyIgLyogQVszXV4yICovCisrCQkiYWRjcSAlJXJheCwgJSVyMTMgOyIKKysJCSJtb3ZxICUlcjEzLCA0OCglMCkgOyIKKysJCSJhZGNxICUlcmN4LCAlJXIxNCA7IgorKwkJIm1vdnEgJSVyMTQsIDU2KCUwKSA7IgorKwkJOgorKwkJOiAiciIoYyksICJyIihhKQorKwkJOiAibWVtb3J5IiwgImNjIiwgIiVyYXgiLCAiJXJjeCIsICIlcmR4IiwgIiVyOCIsICIlcjkiLCAiJXIxMCIsCisrCQkgICIlcjExIiwgIiVyMTMiLCAiJXIxNCIsICIlcjE1Iik7CisrfQorKworK3N0YXRpYyB2b2lkIHJlZF9lbHRmcDI1NTE5XzF3X2FkeCh1NjQgKmNvbnN0IGMsIGNvbnN0IHU2NCAqY29uc3QgYSkKKyt7CisrCWFzbSB2b2xhdGlsZSgKKysJCSJtb3ZsICAgICQzOCwgJSVlZHggOyIJLyogMipjID0gMzggPSAyXjI1NiAqLworKwkJIm11bHggMzIoJTEpLCAgJSVyOCwgJSVyMTAgOyIgLyogYypDWzRdICovCisrCQkieG9ybCAlJWVieCwgJSVlYnggOyIKKysJCSJhZG94ICAgKCUxKSwgICUlcjggOyIKKysJCSJtdWx4IDQwKCUxKSwgICUlcjksICUlcjExIDsiIC8qIGMqQ1s1XSAqLworKwkJImFkY3ggJSVyMTAsICAlJXI5IDsiCisrCQkiYWRveCAgOCglMSksICAlJXI5IDsiCisrCQkibXVseCA0OCglMSksICUlcjEwLCAlJXJheCA7IiAvKiBjKkNbNl0gKi8KKysJCSJhZGN4ICUlcjExLCAlJXIxMCA7IgorKwkJImFkb3ggMTYoJTEpLCAlJXIxMCA7IgorKwkJIm11bHggNTYoJTEpLCAlJXIxMSwgJSVyY3ggOyIgLyogYypDWzddICovCisrCQkiYWRjeCAlJXJheCwgJSVyMTEgOyIKKysJCSJhZG94IDI0KCUxKSwgJSVyMTEgOyIKKysJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCQkiYWRjeCAlJXJieCwgJSVyY3ggOyIKKysJCSJhZG94ICAlJXJieCwgJSVyY3ggOyIKKysJCSJpbXVsICUlcmR4LCAlJXJjeCA7IiAvKiBjKkNbNF0sIGNmPTAsIG9mPTAgKi8KKysJCSJhZGN4ICUlcmN4LCAgJSVyOCA7IgorKwkJImFkY3ggJSVyYngsICAlJXI5IDsiCisrCQkibW92cSAgJSVyOSwgIDgoJTApIDsiCisrCQkiYWRjeCAlJXJieCwgJSVyMTAgOyIKKysJCSJtb3ZxICUlcjEwLCAxNiglMCkgOyIKKysJCSJhZGN4ICUlcmJ4LCAlJXIxMSA7IgorKwkJIm1vdnEgJSVyMTEsIDI0KCUwKSA7IgorKwkJIm1vdiAgICAgJDAsICUlZWN4IDsiCisrCQkiY21vdmMgJSVlZHgsICUlZWN4IDsiCisrCQkiYWRkcSAlJXJjeCwgICUlcjggOyIKKysJCSJtb3ZxICAlJXI4LCAgICglMCkgOyIKKysJCToKKysJCTogInIiKGMpLCAiciIoYSkKKysJCTogIm1lbW9yeSIsICJjYyIsICIlcmF4IiwgIiVyYngiLCAiJXJjeCIsICIlcmR4IiwgIiVyOCIsICIlcjkiLAorKwkJICAiJXIxMCIsICIlcjExIik7CisrfQorKworK3N0YXRpYyB2b2lkIHJlZF9lbHRmcDI1NTE5XzF3X2JtaTIodTY0ICpjb25zdCBjLCBjb25zdCB1NjQgKmNvbnN0IGEpCisreworKwlhc20gdm9sYXRpbGUoCisrCQkibW92bCAgICAkMzgsICUlZWR4IDsiCS8qIDIqYyA9IDM4ID0gMl4yNTYgKi8KKysJCSJtdWx4IDMyKCUxKSwgICUlcjgsICUlcjEwIDsiIC8qIGMqQ1s0XSAqLworKwkJIm11bHggNDAoJTEpLCAgJSVyOSwgJSVyMTEgOyIgLyogYypDWzVdICovCisrCQkiYWRkcSAlJXIxMCwgICUlcjkgOyIKKysJCSJtdWx4IDQ4KCUxKSwgJSVyMTAsICUlcmF4IDsiIC8qIGMqQ1s2XSAqLworKwkJImFkY3EgJSVyMTEsICUlcjEwIDsiCisrCQkibXVseCA1NiglMSksICUlcjExLCAlJXJjeCA7IiAvKiBjKkNbN10gKi8KKysJCSJhZGNxICUlcmF4LCAlJXIxMSA7IgorKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysJCSJhZGNxICAgICQwLCAlJXJjeCA7IgorKwkJImFkZHEgICAoJTEpLCAgJSVyOCA7IgorKwkJImFkY3EgIDgoJTEpLCAgJSVyOSA7IgorKwkJImFkY3EgMTYoJTEpLCAlJXIxMCA7IgorKwkJImFkY3EgMjQoJTEpLCAlJXIxMSA7IgorKwkJImFkY3EgICAgICQwLCAlJXJjeCA7IgorKwkJImltdWwgJSVyZHgsICUlcmN4IDsiIC8qIGMqQ1s0XSwgY2Y9MCAqLworKwkJImFkZHEgJSVyY3gsICAlJXI4IDsiCisrCQkiYWRjcSAgICAkMCwgICUlcjkgOyIKKysJCSJtb3ZxICAlJXI5LCAgOCglMCkgOyIKKysJCSJhZGNxICAgICQwLCAlJXIxMCA7IgorKwkJIm1vdnEgJSVyMTAsIDE2KCUwKSA7IgorKwkJImFkY3EgICAgJDAsICUlcjExIDsiCisrCQkibW92cSAlJXIxMSwgMjQoJTApIDsiCisrCQkibW92ICAgICAkMCwgJSVlY3ggOyIKKysJCSJjbW92YyAlJWVkeCwgJSVlY3ggOyIKKysJCSJhZGRxICUlcmN4LCAgJSVyOCA7IgorKwkJIm1vdnEgICUlcjgsICAgKCUwKSA7IgorKwkJOgorKwkJOiAiciIoYyksICJyIihhKQorKwkJOiAibWVtb3J5IiwgImNjIiwgIiVyYXgiLCAiJXJjeCIsICIlcmR4IiwgIiVyOCIsICIlcjkiLCAiJXIxMCIsCisrCQkgICIlcjExIik7CisrfQorKworK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZAorK2FkZF9lbHRmcDI1NTE5XzF3X2FkeCh1NjQgKmNvbnN0IGMsIGNvbnN0IHU2NCAqY29uc3QgYSwgY29uc3QgdTY0ICpjb25zdCBiKQorK3sKKysJYXNtIHZvbGF0aWxlKAorKwkJIm1vdiAgICAgJDM4LCAlJWVheCA7IgorKwkJInhvcmwgICUlZWN4LCAlJWVjeCA7IgorKwkJIm1vdnEgICAoJTIpLCAgJSVyOCA7IgorKwkJImFkY3ggICAoJTEpLCAgJSVyOCA7IgorKwkJIm1vdnEgIDgoJTIpLCAgJSVyOSA7IgorKwkJImFkY3ggIDgoJTEpLCAgJSVyOSA7IgorKwkJIm1vdnEgMTYoJTIpLCAlJXIxMCA7IgorKwkJImFkY3ggMTYoJTEpLCAlJXIxMCA7IgorKwkJIm1vdnEgMjQoJTIpLCAlJXIxMSA7IgorKwkJImFkY3ggMjQoJTEpLCAlJXIxMSA7IgorKwkJImNtb3ZjICUlZWF4LCAlJWVjeCA7IgorKwkJInhvcmwgJSVlYXgsICUlZWF4ICA7IgorKwkJImFkY3ggJSVyY3gsICAlJXI4ICA7IgorKwkJImFkY3ggJSVyYXgsICAlJXI5ICA7IgorKwkJIm1vdnEgICUlcjksICA4KCUwKSA7IgorKwkJImFkY3ggJSVyYXgsICUlcjEwICA7IgorKwkJIm1vdnEgJSVyMTAsIDE2KCUwKSA7IgorKwkJImFkY3ggJSVyYXgsICUlcjExICA7IgorKwkJIm1vdnEgJSVyMTEsIDI0KCUwKSA7IgorKwkJIm1vdiAgICAgJDM4LCAlJWVjeCA7IgorKwkJImNtb3ZjICUlZWN4LCAlJWVheCA7IgorKwkJImFkZHEgJSVyYXgsICAlJXI4ICA7IgorKwkJIm1vdnEgICUlcjgsICAgKCUwKSA7IgorKwkJOgorKwkJOiAiciIoYyksICJyIihhKSwgInIiKGIpCisrCQk6ICJtZW1vcnkiLCAiY2MiLCAiJXJheCIsICIlcmN4IiwgIiVyOCIsICIlcjkiLCAiJXIxMCIsICIlcjExIik7CisrfQorKworK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZAorK2FkZF9lbHRmcDI1NTE5XzF3X2JtaTIodTY0ICpjb25zdCBjLCBjb25zdCB1NjQgKmNvbnN0IGEsIGNvbnN0IHU2NCAqY29uc3QgYikKKyt7CisrCWFzbSB2b2xhdGlsZSgKKysJCSJtb3YgICAgICQzOCwgJSVlYXggOyIKKysJCSJtb3ZxICAgKCUyKSwgICUlcjggOyIKKysJCSJhZGRxICAgKCUxKSwgICUlcjggOyIKKysJCSJtb3ZxICA4KCUyKSwgICUlcjkgOyIKKysJCSJhZGNxICA4KCUxKSwgICUlcjkgOyIKKysJCSJtb3ZxIDE2KCUyKSwgJSVyMTAgOyIKKysJCSJhZGNxIDE2KCUxKSwgJSVyMTAgOyIKKysJCSJtb3ZxIDI0KCUyKSwgJSVyMTEgOyIKKysJCSJhZGNxIDI0KCUxKSwgJSVyMTEgOyIKKysJCSJtb3YgICAgICAkMCwgJSVlY3ggOyIKKysJCSJjbW92YyAlJWVheCwgJSVlY3ggOyIKKysJCSJhZGRxICUlcmN4LCAgJSVyOCAgOyIKKysJCSJhZGNxICAgICQwLCAgJSVyOSAgOyIKKysJCSJtb3ZxICAlJXI5LCAgOCglMCkgOyIKKysJCSJhZGNxICAgICQwLCAlJXIxMCAgOyIKKysJCSJtb3ZxICUlcjEwLCAxNiglMCkgOyIKKysJCSJhZGNxICAgICQwLCAlJXIxMSAgOyIKKysJCSJtb3ZxICUlcjExLCAyNCglMCkgOyIKKysJCSJtb3YgICAgICQwLCAlJWVjeCAgOyIKKysJCSJjbW92YyAlJWVheCwgJSVlY3ggOyIKKysJCSJhZGRxICUlcmN4LCAgJSVyOCAgOyIKKysJCSJtb3ZxICAlJXI4LCAgICglMCkgOyIKKysJCToKKysJCTogInIiKGMpLCAiciIoYSksICJyIihiKQorKwkJOiAibWVtb3J5IiwgImNjIiwgIiVyYXgiLCAiJXJjeCIsICIlcjgiLCAiJXI5IiwgIiVyMTAiLCAiJXIxMSIpOworK30KKysKKytzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQKKytzdWJfZWx0ZnAyNTUxOV8xdyh1NjQgKmNvbnN0IGMsIGNvbnN0IHU2NCAqY29uc3QgYSwgY29uc3QgdTY0ICpjb25zdCBiKQorK3sKKysJYXNtIHZvbGF0aWxlKAorKwkJIm1vdiAgICAgJDM4LCAlJWVheCA7IgorKwkJIm1vdnEgICAoJTEpLCAgJSVyOCA7IgorKwkJInN1YnEgICAoJTIpLCAgJSVyOCA7IgorKwkJIm1vdnEgIDgoJTEpLCAgJSVyOSA7IgorKwkJInNiYnEgIDgoJTIpLCAgJSVyOSA7IgorKwkJIm1vdnEgMTYoJTEpLCAlJXIxMCA7IgorKwkJInNiYnEgMTYoJTIpLCAlJXIxMCA7IgorKwkJIm1vdnEgMjQoJTEpLCAlJXIxMSA7IgorKwkJInNiYnEgMjQoJTIpLCAlJXIxMSA7IgorKwkJIm1vdiAgICAgICQwLCAlJWVjeCA7IgorKwkJImNtb3ZjICUlZWF4LCAlJWVjeCA7IgorKwkJInN1YnEgJSVyY3gsICAlJXI4ICA7IgorKwkJInNiYnEgICAgJDAsICAlJXI5ICA7IgorKwkJIm1vdnEgICUlcjksICA4KCUwKSA7IgorKwkJInNiYnEgICAgJDAsICUlcjEwICA7IgorKwkJIm1vdnEgJSVyMTAsIDE2KCUwKSA7IgorKwkJInNiYnEgICAgJDAsICUlcjExICA7IgorKwkJIm1vdnEgJSVyMTEsIDI0KCUwKSA7IgorKwkJIm1vdiAgICAgJDAsICUlZWN4ICA7IgorKwkJImNtb3ZjICUlZWF4LCAlJWVjeCA7IgorKwkJInN1YnEgJSVyY3gsICAlJXI4ICA7IgorKwkJIm1vdnEgICUlcjgsICAgKCUwKSA7IgorKwkJOgorKwkJOiAiciIoYyksICJyIihhKSwgInIiKGIpCisrCQk6ICJtZW1vcnkiLCAiY2MiLCAiJXJheCIsICIlcmN4IiwgIiVyOCIsICIlcjkiLCAiJXIxMCIsICIlcjExIik7CisrfQorKworKy8qIE11bHRpcGxpY2F0aW9uIGJ5IGEyNCA9IChBKzIpLzQgPSAoNDg2NjYyKzIpLzQgPSAxMjE2NjYgKi8KKytzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQKKyttdWxfYTI0X2VsdGZwMjU1MTlfMXcodTY0ICpjb25zdCBjLCBjb25zdCB1NjQgKmNvbnN0IGEpCisreworKwljb25zdCB1NjQgYTI0ID0gMTIxNjY2OworKwlhc20gdm9sYXRpbGUoCisrCQkibW92cSAgICAgJTIsICUlcmR4IDsiCisrCQkibXVseCAgICglMSksICAlJXI4LCAlJXIxMCA7IgorKwkJIm11bHggIDgoJTEpLCAgJSVyOSwgJSVyMTEgOyIKKysJCSJhZGRxICUlcjEwLCAgJSVyOSA7IgorKwkJIm11bHggMTYoJTEpLCAlJXIxMCwgJSVyYXggOyIKKysJCSJhZGNxICUlcjExLCAlJXIxMCA7IgorKwkJIm11bHggMjQoJTEpLCAlJXIxMSwgJSVyY3ggOyIKKysJCSJhZGNxICUlcmF4LCAlJXIxMSA7IgorKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworKwkJImFkY3EgICAgJDAsICUlcmN4IDsiCisrCQkibW92bCAgICQzOCwgJSVlZHggOyIgLyogMipjID0gMzggPSAyXjI1NiBtb2QgMl4yNTUtMTkqLworKwkJImltdWwgJSVyZHgsICUlcmN4IDsiCisrCQkiYWRkcSAlJXJjeCwgICUlcjggOyIKKysJCSJhZGNxICAgICQwLCAgJSVyOSA7IgorKwkJIm1vdnEgICUlcjksICA4KCUwKSA7IgorKwkJImFkY3EgICAgJDAsICUlcjEwIDsiCisrCQkibW92cSAlJXIxMCwgMTYoJTApIDsiCisrCQkiYWRjcSAgICAkMCwgJSVyMTEgOyIKKysJCSJtb3ZxICUlcjExLCAyNCglMCkgOyIKKysJCSJtb3YgICAgICQwLCAlJWVjeCA7IgorKwkJImNtb3ZjICUlZWR4LCAlJWVjeCA7IgorKwkJImFkZHEgJSVyY3gsICAlJXI4IDsiCisrCQkibW92cSAgJSVyOCwgICAoJTApIDsiCisrCQk6CisrCQk6ICJyIihjKSwgInIiKGEpLCAiciIoYTI0KQorKwkJOiAibWVtb3J5IiwgImNjIiwgIiVyYXgiLCAiJXJjeCIsICIlcmR4IiwgIiVyOCIsICIlcjkiLCAiJXIxMCIsCisrCQkgICIlcjExIik7CisrfQorKworK3N0YXRpYyB2b2lkIGludl9lbHRmcDI1NTE5XzF3X2FkeCh1NjQgKmNvbnN0IGMsIGNvbnN0IHU2NCAqY29uc3QgYSkKKyt7CisrCXN0cnVjdCB7CisrCQllbHRmcDI1NTE5XzF3X2J1ZmZlciBidWZmZXI7CisrCQllbHRmcDI1NTE5XzF3IHgwLCB4MSwgeDI7CisrCX0gX19hbGlnbmVkKDMyKSBtOworKwl1NjQgKlRbNF07CisrCisrCVRbMF0gPSBtLngwOworKwlUWzFdID0gYzsgLyogeF4oLTEpICovCisrCVRbMl0gPSBtLngxOworKwlUWzNdID0gbS54MjsKKysKKysJY29weV9lbHRmcDI1NTE5XzF3KFRbMV0sIGEpOworKwlzcXJuX2VsdGZwMjU1MTlfMXdfYWR4KFRbMV0sIDEpOworKwljb3B5X2VsdGZwMjU1MTlfMXcoVFsyXSwgVFsxXSk7CisrCXNxcm5fZWx0ZnAyNTUxOV8xd19hZHgoVFsyXSwgMik7CisrCW11bF9lbHRmcDI1NTE5XzF3X2FkeChUWzBdLCBhLCBUWzJdKTsKKysJbXVsX2VsdGZwMjU1MTlfMXdfYWR4KFRbMV0sIFRbMV0sIFRbMF0pOworKwljb3B5X2VsdGZwMjU1MTlfMXcoVFsyXSwgVFsxXSk7CisrCXNxcm5fZWx0ZnAyNTUxOV8xd19hZHgoVFsyXSwgMSk7CisrCW11bF9lbHRmcDI1NTE5XzF3X2FkeChUWzBdLCBUWzBdLCBUWzJdKTsKKysJY29weV9lbHRmcDI1NTE5XzF3KFRbMl0sIFRbMF0pOworKwlzcXJuX2VsdGZwMjU1MTlfMXdfYWR4KFRbMl0sIDUpOworKwltdWxfZWx0ZnAyNTUxOV8xd19hZHgoVFswXSwgVFswXSwgVFsyXSk7CisrCWNvcHlfZWx0ZnAyNTUxOV8xdyhUWzJdLCBUWzBdKTsKKysJc3Fybl9lbHRmcDI1NTE5XzF3X2FkeChUWzJdLCAxMCk7CisrCW11bF9lbHRmcDI1NTE5XzF3X2FkeChUWzJdLCBUWzJdLCBUWzBdKTsKKysJY29weV9lbHRmcDI1NTE5XzF3KFRbM10sIFRbMl0pOworKwlzcXJuX2VsdGZwMjU1MTlfMXdfYWR4KFRbM10sIDIwKTsKKysJbXVsX2VsdGZwMjU1MTlfMXdfYWR4KFRbM10sIFRbM10sIFRbMl0pOworKwlzcXJuX2VsdGZwMjU1MTlfMXdfYWR4KFRbM10sIDEwKTsKKysJbXVsX2VsdGZwMjU1MTlfMXdfYWR4KFRbM10sIFRbM10sIFRbMF0pOworKwljb3B5X2VsdGZwMjU1MTlfMXcoVFswXSwgVFszXSk7CisrCXNxcm5fZWx0ZnAyNTUxOV8xd19hZHgoVFswXSwgNTApOworKwltdWxfZWx0ZnAyNTUxOV8xd19hZHgoVFswXSwgVFswXSwgVFszXSk7CisrCWNvcHlfZWx0ZnAyNTUxOV8xdyhUWzJdLCBUWzBdKTsKKysJc3Fybl9lbHRmcDI1NTE5XzF3X2FkeChUWzJdLCAxMDApOworKwltdWxfZWx0ZnAyNTUxOV8xd19hZHgoVFsyXSwgVFsyXSwgVFswXSk7CisrCXNxcm5fZWx0ZnAyNTUxOV8xd19hZHgoVFsyXSwgNTApOworKwltdWxfZWx0ZnAyNTUxOV8xd19hZHgoVFsyXSwgVFsyXSwgVFszXSk7CisrCXNxcm5fZWx0ZnAyNTUxOV8xd19hZHgoVFsyXSwgNSk7CisrCW11bF9lbHRmcDI1NTE5XzF3X2FkeChUWzFdLCBUWzFdLCBUWzJdKTsKKysKKysJbWVtemVyb19leHBsaWNpdCgmbSwgc2l6ZW9mKG0pKTsKKyt9CisrCisrc3RhdGljIHZvaWQgaW52X2VsdGZwMjU1MTlfMXdfYm1pMih1NjQgKmNvbnN0IGMsIGNvbnN0IHU2NCAqY29uc3QgYSkKKyt7CisrCXN0cnVjdCB7CisrCQllbHRmcDI1NTE5XzF3X2J1ZmZlciBidWZmZXI7CisrCQllbHRmcDI1NTE5XzF3IHgwLCB4MSwgeDI7CisrCX0gX19hbGlnbmVkKDMyKSBtOworKwl1NjQgKlRbNV07CisrCisrCVRbMF0gPSBtLngwOworKwlUWzFdID0gYzsgLyogeF4oLTEpICovCisrCVRbMl0gPSBtLngxOworKwlUWzNdID0gbS54MjsKKysKKysJY29weV9lbHRmcDI1NTE5XzF3KFRbMV0sIGEpOworKwlzcXJuX2VsdGZwMjU1MTlfMXdfYm1pMihUWzFdLCAxKTsKKysJY29weV9lbHRmcDI1NTE5XzF3KFRbMl0sIFRbMV0pOworKwlzcXJuX2VsdGZwMjU1MTlfMXdfYm1pMihUWzJdLCAyKTsKKysJbXVsX2VsdGZwMjU1MTlfMXdfYm1pMihUWzBdLCBhLCBUWzJdKTsKKysJbXVsX2VsdGZwMjU1MTlfMXdfYm1pMihUWzFdLCBUWzFdLCBUWzBdKTsKKysJY29weV9lbHRmcDI1NTE5XzF3KFRbMl0sIFRbMV0pOworKwlzcXJuX2VsdGZwMjU1MTlfMXdfYm1pMihUWzJdLCAxKTsKKysJbXVsX2VsdGZwMjU1MTlfMXdfYm1pMihUWzBdLCBUWzBdLCBUWzJdKTsKKysJY29weV9lbHRmcDI1NTE5XzF3KFRbMl0sIFRbMF0pOworKwlzcXJuX2VsdGZwMjU1MTlfMXdfYm1pMihUWzJdLCA1KTsKKysJbXVsX2VsdGZwMjU1MTlfMXdfYm1pMihUWzBdLCBUWzBdLCBUWzJdKTsKKysJY29weV9lbHRmcDI1NTE5XzF3KFRbMl0sIFRbMF0pOworKwlzcXJuX2VsdGZwMjU1MTlfMXdfYm1pMihUWzJdLCAxMCk7CisrCW11bF9lbHRmcDI1NTE5XzF3X2JtaTIoVFsyXSwgVFsyXSwgVFswXSk7CisrCWNvcHlfZWx0ZnAyNTUxOV8xdyhUWzNdLCBUWzJdKTsKKysJc3Fybl9lbHRmcDI1NTE5XzF3X2JtaTIoVFszXSwgMjApOworKwltdWxfZWx0ZnAyNTUxOV8xd19ibWkyKFRbM10sIFRbM10sIFRbMl0pOworKwlzcXJuX2VsdGZwMjU1MTlfMXdfYm1pMihUWzNdLCAxMCk7CisrCW11bF9lbHRmcDI1NTE5XzF3X2JtaTIoVFszXSwgVFszXSwgVFswXSk7CisrCWNvcHlfZWx0ZnAyNTUxOV8xdyhUWzBdLCBUWzNdKTsKKysJc3Fybl9lbHRmcDI1NTE5XzF3X2JtaTIoVFswXSwgNTApOworKwltdWxfZWx0ZnAyNTUxOV8xd19ibWkyKFRbMF0sIFRbMF0sIFRbM10pOworKwljb3B5X2VsdGZwMjU1MTlfMXcoVFsyXSwgVFswXSk7CisrCXNxcm5fZWx0ZnAyNTUxOV8xd19ibWkyKFRbMl0sIDEwMCk7CisrCW11bF9lbHRmcDI1NTE5XzF3X2JtaTIoVFsyXSwgVFsyXSwgVFswXSk7CisrCXNxcm5fZWx0ZnAyNTUxOV8xd19ibWkyKFRbMl0sIDUwKTsKKysJbXVsX2VsdGZwMjU1MTlfMXdfYm1pMihUWzJdLCBUWzJdLCBUWzNdKTsKKysJc3Fybl9lbHRmcDI1NTE5XzF3X2JtaTIoVFsyXSwgNSk7CisrCW11bF9lbHRmcDI1NTE5XzF3X2JtaTIoVFsxXSwgVFsxXSwgVFsyXSk7CisrCisrCW1lbXplcm9fZXhwbGljaXQoJm0sIHNpemVvZihtKSk7CisrfQorKworKy8qIEdpdmVuIGMsIGEgMjU2LWJpdCBudW1iZXIsIGZyZWRfZWx0ZnAyNTUxOV8xdyB1cGRhdGVzIGMKKysgKiB3aXRoIGEgbnVtYmVyIHN1Y2ggdGhhdCAwIDw9IEMgPCAyKioyNTUtMTkuCisrICovCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGZyZWRfZWx0ZnAyNTUxOV8xdyh1NjQgKmNvbnN0IGMpCisreworKwl1NjQgdG1wMCA9IDM4LCB0bXAxID0gMTk7CisrCWFzbSB2b2xhdGlsZSgKKysJCSJidHJxICAgJDYzLCAgICAlMyA7IiAvKiBQdXQgYml0IDI1NSBpbiBjYXJyeSBmbGFnIGFuZCBjbGVhciAqLworKwkJImNtb3ZuY2wgJWs1LCAgICVrNCA7IiAvKiBjWzI1NV0gPyAzOCA6IDE5ICovCisrCisrCQkvKiBBZGQgZWl0aGVyIDE5IG9yIDM4IHRvIGMgKi8KKysJCSJhZGRxICAgICU0LCAgICUwIDsiCisrCQkiYWRjcSAgICAkMCwgICAlMSA7IgorKwkJImFkY3EgICAgJDAsICAgJTIgOyIKKysJCSJhZGNxICAgICQwLCAgICUzIDsiCisrCisrCQkvKiBUZXN0IGZvciBiaXQgMjU1IGFnYWluOyBvbmx5IHRyaWdnZXJlZCBvbiBvdmVyZmxvdyBtb2R1bG8gMl4yNTUtMTkgKi8KKysJCSJtb3ZsICAgICQwLCAgJWs0IDsiCisrCQkiY21vdm5zbCAlazUsICAlazQgOyIgLyogY1syNTVdID8gMCA6IDE5ICovCisrCQkiYnRycSAgICQ2MywgICAlMyA7IiAvKiBDbGVhciBiaXQgMjU1ICovCisrCisrCQkvKiBTdWJ0cmFjdCAxOSBpZiBuZWNlc3NhcnkgKi8KKysJCSJzdWJxICAgICU0LCAgICUwIDsiCisrCQkic2JicSAgICAkMCwgICAlMSA7IgorKwkJInNiYnEgICAgJDAsICAgJTIgOyIKKysJCSJzYmJxICAgICQwLCAgICUzIDsiCisrCisrCQk6ICIrciIoY1swXSksICIrciIoY1sxXSksICIrciIoY1syXSksICIrciIoY1szXSksICIrciIodG1wMCksCisrCQkgICIrciIodG1wMSkKKysJCToKKysJCTogIm1lbW9yeSIsICJjYyIpOworK30KKysKKytzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgY3N3YXAodTggYml0LCB1NjQgKmNvbnN0IHB4LCB1NjQgKmNvbnN0IHB5KQorK3sKKysJdTY0IHRlbXA7CisrCWFzbSB2b2xhdGlsZSgKKysJCSJ0ZXN0ICU5LCAlOSA7IgorKwkJIm1vdnEgJTAsICU4IDsiCisrCQkiY21vdm56cSAlNCwgJTAgOyIKKysJCSJjbW92bnpxICU4LCAlNCA7IgorKwkJIm1vdnEgJTEsICU4IDsiCisrCQkiY21vdm56cSAlNSwgJTEgOyIKKysJCSJjbW92bnpxICU4LCAlNSA7IgorKwkJIm1vdnEgJTIsICU4IDsiCisrCQkiY21vdm56cSAlNiwgJTIgOyIKKysJCSJjbW92bnpxICU4LCAlNiA7IgorKwkJIm1vdnEgJTMsICU4IDsiCisrCQkiY21vdm56cSAlNywgJTMgOyIKKysJCSJjbW92bnpxICU4LCAlNyA7IgorKwkJOiAiK3IiKHB4WzBdKSwgIityIihweFsxXSksICIrciIocHhbMl0pLCAiK3IiKHB4WzNdKSwKKysJCSAgIityIihweVswXSksICIrciIocHlbMV0pLCAiK3IiKHB5WzJdKSwgIityIihweVszXSksCisrCQkgICI9ciIodGVtcCkKKysJCTogInIiKGJpdCkKKysJCTogImNjIgorKwkpOworK30KKysKKytzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgY3NlbGVjdCh1OCBiaXQsIHU2NCAqY29uc3QgcHgsIGNvbnN0IHU2NCAqY29uc3QgcHkpCisreworKwlhc20gdm9sYXRpbGUoCisrCQkidGVzdCAlNCwgJTQgOyIKKysJCSJjbW92bnpxICU1LCAlMCA7IgorKwkJImNtb3ZuenEgJTYsICUxIDsiCisrCQkiY21vdm56cSAlNywgJTIgOyIKKysJCSJjbW92bnpxICU4LCAlMyA7IgorKwkJOiAiK3IiKHB4WzBdKSwgIityIihweFsxXSksICIrciIocHhbMl0pLCAiK3IiKHB4WzNdKQorKwkJOiAiciIoYml0KSwgInJtIihweVswXSksICJybSIocHlbMV0pLCAicm0iKHB5WzJdKSwgInJtIihweVszXSkKKysJCTogImNjIgorKwkpOworK30KKysKKytzdGF0aWMgdm9pZCBjdXJ2ZTI1NTE5X2FkeCh1OCBzaGFyZWRbQ1VSVkUyNTUxOV9LRVlfU0laRV0sCisrCQkJICAgY29uc3QgdTggcHJpdmF0ZV9rZXlbQ1VSVkUyNTUxOV9LRVlfU0laRV0sCisrCQkJICAgY29uc3QgdTggc2Vzc2lvbl9rZXlbQ1VSVkUyNTUxOV9LRVlfU0laRV0pCisreworKwlzdHJ1Y3QgeworKwkJdTY0IGJ1ZmZlcls0ICogTlVNX1dPUkRTX0VMVEZQMjU1MTldOworKwkJdTY0IGNvb3JkaW5hdGVzWzQgKiBOVU1fV09SRFNfRUxURlAyNTUxOV07CisrCQl1NjQgd29ya3NwYWNlWzYgKiBOVU1fV09SRFNfRUxURlAyNTUxOV07CisrCQl1OCBzZXNzaW9uW0NVUlZFMjU1MTlfS0VZX1NJWkVdOworKwkJdTggcHJpdmF0ZVtDVVJWRTI1NTE5X0tFWV9TSVpFXTsKKysJfSBfX2FsaWduZWQoMzIpIG07CisrCisrCWludCBpID0gMCwgaiA9IDA7CisrCXU2NCBwcmV2ID0gMDsKKysJdTY0ICpjb25zdCBYMSA9ICh1NjQgKiltLnNlc3Npb247CisrCXU2NCAqY29uc3Qga2V5ID0gKHU2NCAqKW0ucHJpdmF0ZTsKKysJdTY0ICpjb25zdCBQeCA9IG0uY29vcmRpbmF0ZXMgKyAwOworKwl1NjQgKmNvbnN0IFB6ID0gbS5jb29yZGluYXRlcyArIDQ7CisrCXU2NCAqY29uc3QgUXggPSBtLmNvb3JkaW5hdGVzICsgODsKKysJdTY0ICpjb25zdCBReiA9IG0uY29vcmRpbmF0ZXMgKyAxMjsKKysJdTY0ICpjb25zdCBYMiA9IFF4OworKwl1NjQgKmNvbnN0IFoyID0gUXo7CisrCXU2NCAqY29uc3QgWDMgPSBQeDsKKysJdTY0ICpjb25zdCBaMyA9IFB6OworKwl1NjQgKmNvbnN0IFgyWjIgPSBReDsKKysJdTY0ICpjb25zdCBYM1ozID0gUHg7CisrCisrCXU2NCAqY29uc3QgQSA9IG0ud29ya3NwYWNlICsgMDsKKysJdTY0ICpjb25zdCBCID0gbS53b3Jrc3BhY2UgKyA0OworKwl1NjQgKmNvbnN0IEQgPSBtLndvcmtzcGFjZSArIDg7CisrCXU2NCAqY29uc3QgQyA9IG0ud29ya3NwYWNlICsgMTI7CisrCXU2NCAqY29uc3QgREEgPSBtLndvcmtzcGFjZSArIDE2OworKwl1NjQgKmNvbnN0IENCID0gbS53b3Jrc3BhY2UgKyAyMDsKKysJdTY0ICpjb25zdCBBQiA9IEE7CisrCXU2NCAqY29uc3QgREMgPSBEOworKwl1NjQgKmNvbnN0IERBQ0IgPSBEQTsKKysKKysJbWVtY3B5KG0ucHJpdmF0ZSwgcHJpdmF0ZV9rZXksIHNpemVvZihtLnByaXZhdGUpKTsKKysJbWVtY3B5KG0uc2Vzc2lvbiwgc2Vzc2lvbl9rZXksIHNpemVvZihtLnNlc3Npb24pKTsKKysKKysJY3VydmUyNTUxOV9jbGFtcF9zZWNyZXQobS5wcml2YXRlKTsKKysKKysJLyogQXMgaW4gdGhlIGRyYWZ0OgorKwkgKiBXaGVuIHJlY2VpdmluZyBzdWNoIGFuIGFycmF5LCBpbXBsZW1lbnRhdGlvbnMgb2YgY3VydmUyNTUxOQorKwkgKiBNVVNUIG1hc2sgdGhlIG1vc3Qtc2lnbmlmaWNhbnQgYml0IGluIHRoZSBmaW5hbCBieXRlLiBUaGlzCisrCSAqIGlzIGRvbmUgdG8gcHJlc2VydmUgY29tcGF0aWJpbGl0eSB3aXRoIHBvaW50IGZvcm1hdHMgd2hpY2gKKysJICogcmVzZXJ2ZSB0aGUgc2lnbiBiaXQgZm9yIHVzZSBpbiBvdGhlciBwcm90b2NvbHMgYW5kIHRvCisrCSAqIGluY3JlYXNlIHJlc2lzdGFuY2UgdG8gaW1wbGVtZW50YXRpb24gZmluZ2VycHJpbnRpbmcKKysJICovCisrCW0uc2Vzc2lvbltDVVJWRTI1NTE5X0tFWV9TSVpFIC0gMV0gJj0gKDEgPDwgKDI1NSAlIDgpKSAtIDE7CisrCisrCWNvcHlfZWx0ZnAyNTUxOV8xdyhQeCwgWDEpOworKwlzZXR6ZXJvX2VsdGZwMjU1MTlfMXcoUHopOworKwlzZXR6ZXJvX2VsdGZwMjU1MTlfMXcoUXgpOworKwlzZXR6ZXJvX2VsdGZwMjU1MTlfMXcoUXopOworKworKwlQelswXSA9IDE7CisrCVF4WzBdID0gMTsKKysKKysJLyogbWFpbi1sb29wICovCisrCXByZXYgPSAwOworKwlqID0gNjI7CisrCWZvciAoaSA9IDM7IGkgPj0gMDsgLS1pKSB7CisrCQl3aGlsZSAoaiA+PSAwKSB7CisrCQkJdTY0IGJpdCA9IChrZXlbaV0gPj4gaikgJiAweDE7CisrCQkJdTY0IHN3YXAgPSBiaXQgXiBwcmV2OworKwkJCXByZXYgPSBiaXQ7CisrCisrCQkJYWRkX2VsdGZwMjU1MTlfMXdfYWR4KEEsIFgyLCBaMik7CS8qIEEgPSAoWDIrWjIpICovCisrCQkJc3ViX2VsdGZwMjU1MTlfMXcoQiwgWDIsIFoyKTsJCS8qIEIgPSAoWDItWjIpICovCisrCQkJYWRkX2VsdGZwMjU1MTlfMXdfYWR4KEMsIFgzLCBaMyk7CS8qIEMgPSAoWDMrWjMpICovCisrCQkJc3ViX2VsdGZwMjU1MTlfMXcoRCwgWDMsIFozKTsJCS8qIEQgPSAoWDMtWjMpICovCisrCQkJbXVsX2VsdGZwMjU1MTlfMndfYWR4KERBQ0IsIEFCLCBEQyk7CS8qIFtEQXxDQl0gPSBbQXxCXSpbRHxDXSAqLworKworKwkJCWNzZWxlY3Qoc3dhcCwgQSwgQyk7CisrCQkJY3NlbGVjdChzd2FwLCBCLCBEKTsKKysKKysJCQlzcXJfZWx0ZnAyNTUxOV8yd19hZHgoQUIpOwkJLyogW0FBfEJCXSA9IFtBXjJ8Ql4yXSAqLworKwkJCWFkZF9lbHRmcDI1NTE5XzF3X2FkeChYMywgREEsIENCKTsJLyogWDMgPSAoREErQ0IpICovCisrCQkJc3ViX2VsdGZwMjU1MTlfMXcoWjMsIERBLCBDQik7CQkvKiBaMyA9IChEQS1DQikgKi8KKysJCQlzcXJfZWx0ZnAyNTUxOV8yd19hZHgoWDNaMyk7CQkvKiBbWDN8WjNdID0gWyhEQStDQil8KERBK0NCKV1eMiAqLworKworKwkJCWNvcHlfZWx0ZnAyNTUxOV8xdyhYMiwgQik7CQkvKiBYMiA9IEJeMiAqLworKwkJCXN1Yl9lbHRmcDI1NTE5XzF3KFoyLCBBLCBCKTsJCS8qIFoyID0gRSA9IEFBLUJCICovCisrCisrCQkJbXVsX2EyNF9lbHRmcDI1NTE5XzF3KEIsIFoyKTsJCS8qIEIgPSBhMjQqRSAqLworKwkJCWFkZF9lbHRmcDI1NTE5XzF3X2FkeChCLCBCLCBYMik7CS8qIEIgPSBhMjQqRStCICovCisrCQkJbXVsX2VsdGZwMjU1MTlfMndfYWR4KFgyWjIsIFgyWjIsIEFCKTsJLyogW1gyfFoyXSA9IFtCfEVdKltBfGEyNCpFK0JdICovCisrCQkJbXVsX2VsdGZwMjU1MTlfMXdfYWR4KFozLCBaMywgWDEpOwkvKiBaMyA9IFozKlgxICovCisrCQkJLS1qOworKwkJfQorKwkJaiA9IDYzOworKwl9CisrCisrCWludl9lbHRmcDI1NTE5XzF3X2FkeChBLCBReik7CisrCW11bF9lbHRmcDI1NTE5XzF3X2FkeCgodTY0ICopc2hhcmVkLCBReCwgQSk7CisrCWZyZWRfZWx0ZnAyNTUxOV8xdygodTY0ICopc2hhcmVkKTsKKysKKysJbWVtemVyb19leHBsaWNpdCgmbSwgc2l6ZW9mKG0pKTsKKyt9CisrCisrc3RhdGljIHZvaWQgY3VydmUyNTUxOV9hZHhfYmFzZSh1OCBzZXNzaW9uX2tleVtDVVJWRTI1NTE5X0tFWV9TSVpFXSwKKysJCQkJY29uc3QgdTggcHJpdmF0ZV9rZXlbQ1VSVkUyNTUxOV9LRVlfU0laRV0pCisreworKwlzdHJ1Y3QgeworKwkJdTY0IGJ1ZmZlcls0ICogTlVNX1dPUkRTX0VMVEZQMjU1MTldOworKwkJdTY0IGNvb3JkaW5hdGVzWzQgKiBOVU1fV09SRFNfRUxURlAyNTUxOV07CisrCQl1NjQgd29ya3NwYWNlWzQgKiBOVU1fV09SRFNfRUxURlAyNTUxOV07CisrCQl1OCBwcml2YXRlW0NVUlZFMjU1MTlfS0VZX1NJWkVdOworKwl9IF9fYWxpZ25lZCgzMikgbTsKKysKKysJY29uc3QgaW50IGl0ZVs0XSA9IHsgNjQsIDY0LCA2NCwgNjMgfTsKKysJY29uc3QgaW50IHEgPSAzOworKwl1NjQgc3dhcCA9IDE7CisrCisrCWludCBpID0gMCwgaiA9IDAsIGsgPSAwOworKwl1NjQgKmNvbnN0IGtleSA9ICh1NjQgKiltLnByaXZhdGU7CisrCXU2NCAqY29uc3QgVXIxID0gbS5jb29yZGluYXRlcyArIDA7CisrCXU2NCAqY29uc3QgWnIxID0gbS5jb29yZGluYXRlcyArIDQ7CisrCXU2NCAqY29uc3QgVXIyID0gbS5jb29yZGluYXRlcyArIDg7CisrCXU2NCAqY29uc3QgWnIyID0gbS5jb29yZGluYXRlcyArIDEyOworKworKwl1NjQgKmNvbnN0IFVacjEgPSBtLmNvb3JkaW5hdGVzICsgMDsKKysJdTY0ICpjb25zdCBaVXIyID0gbS5jb29yZGluYXRlcyArIDg7CisrCisrCXU2NCAqY29uc3QgQSA9IG0ud29ya3NwYWNlICsgMDsKKysJdTY0ICpjb25zdCBCID0gbS53b3Jrc3BhY2UgKyA0OworKwl1NjQgKmNvbnN0IEMgPSBtLndvcmtzcGFjZSArIDg7CisrCXU2NCAqY29uc3QgRCA9IG0ud29ya3NwYWNlICsgMTI7CisrCisrCXU2NCAqY29uc3QgQUIgPSBtLndvcmtzcGFjZSArIDA7CisrCXU2NCAqY29uc3QgQ0QgPSBtLndvcmtzcGFjZSArIDg7CisrCisrCWNvbnN0IHU2NCAqY29uc3QgUCA9IHRhYmxlX2xhZGRlcl84azsKKysKKysJbWVtY3B5KG0ucHJpdmF0ZSwgcHJpdmF0ZV9rZXksIHNpemVvZihtLnByaXZhdGUpKTsKKysKKysJY3VydmUyNTUxOV9jbGFtcF9zZWNyZXQobS5wcml2YXRlKTsKKysKKysJc2V0emVyb19lbHRmcDI1NTE5XzF3KFVyMSk7CisrCXNldHplcm9fZWx0ZnAyNTUxOV8xdyhacjEpOworKwlzZXR6ZXJvX2VsdGZwMjU1MTlfMXcoWnIyKTsKKysJVXIxWzBdID0gMTsKKysJWnIxWzBdID0gMTsKKysJWnIyWzBdID0gMTsKKysKKysJLyogRy1TICovCisrCVVyMlszXSA9IDB4MWVhZWNkZWVlMjdjYWIzNFVMOworKwlVcjJbMl0gPSAweGFkYzdhMGI5MjM1ZDQ4ZTJVTDsKKysJVXIyWzFdID0gMHhiYmYwOTVhZTE0YjJlZGY4VUw7CisrCVVyMlswXSA9IDB4N2U5NGUxZmVjODJmYWFiZFVMOworKworKwkvKiBtYWluLWxvb3AgKi8KKysJaiA9IHE7CisrCWZvciAoaSA9IDA7IGkgPCBOVU1fV09SRFNfRUxURlAyNTUxOTsgKytpKSB7CisrCQl3aGlsZSAoaiA8IGl0ZVtpXSkgeworKwkJCXU2NCBiaXQgPSAoa2V5W2ldID4+IGopICYgMHgxOworKwkJCWsgPSAoNjQgKiBpICsgaiAtIHEpOworKwkJCXN3YXAgPSBzd2FwIF4gYml0OworKwkJCWNzd2FwKHN3YXAsIFVyMSwgVXIyKTsKKysJCQljc3dhcChzd2FwLCBacjEsIFpyMik7CisrCQkJc3dhcCA9IGJpdDsKKysJCQkvKiBBZGRpdGlvbiAqLworKwkJCXN1Yl9lbHRmcDI1NTE5XzF3KEIsIFVyMSwgWnIxKTsJCS8qIEIgPSBVcjEtWnIxICovCisrCQkJYWRkX2VsdGZwMjU1MTlfMXdfYWR4KEEsIFVyMSwgWnIxKTsJLyogQSA9IFVyMStacjEgKi8KKysJCQltdWxfZWx0ZnAyNTUxOV8xd19hZHgoQywgJlBbNCAqIGtdLCBCKTsJLyogQyA9IE0wLUIgKi8KKysJCQlzdWJfZWx0ZnAyNTUxOV8xdyhCLCBBLCBDKTsJCS8qIEIgPSAoVXIxK1pyMSkgLSBNKihVcjEtWnIxKSAqLworKwkJCWFkZF9lbHRmcDI1NTE5XzF3X2FkeChBLCBBLCBDKTsJCS8qIEEgPSAoVXIxK1pyMSkgKyBNKihVcjEtWnIxKSAqLworKwkJCXNxcl9lbHRmcDI1NTE5XzJ3X2FkeChBQik7CQkvKiBBID0gQV4yICAgICAgfCAgQiA9IEJeMiAqLworKwkJCW11bF9lbHRmcDI1NTE5XzJ3X2FkeChVWnIxLCBaVXIyLCBBQik7CS8qIFVyMSA9IFpyMipBICB8ICBacjEgPSBVcjIqQiAqLworKwkJCSsrajsKKysJCX0KKysJCWogPSAwOworKwl9CisrCisrCS8qIERvdWJsaW5nICovCisrCWZvciAoaSA9IDA7IGkgPCBxOyArK2kpIHsKKysJCWFkZF9lbHRmcDI1NTE5XzF3X2FkeChBLCBVcjEsIFpyMSk7CS8qICBBID0gVXIxK1pyMSAqLworKwkJc3ViX2VsdGZwMjU1MTlfMXcoQiwgVXIxLCBacjEpOwkJLyogIEIgPSBVcjEtWnIxICovCisrCQlzcXJfZWx0ZnAyNTUxOV8yd19hZHgoQUIpOwkJLyogIEEgPSBBKioyICAgICBCID0gQioqMiAqLworKwkJY29weV9lbHRmcDI1NTE5XzF3KEMsIEIpOwkJLyogIEMgPSBCICovCisrCQlzdWJfZWx0ZnAyNTUxOV8xdyhCLCBBLCBCKTsJCS8qICBCID0gQS1CICovCisrCQltdWxfYTI0X2VsdGZwMjU1MTlfMXcoRCwgQik7CQkvKiAgRCA9IG15X2EyNCpCICovCisrCQlhZGRfZWx0ZnAyNTUxOV8xd19hZHgoRCwgRCwgQyk7CQkvKiAgRCA9IEQrQyAqLworKwkJbXVsX2VsdGZwMjU1MTlfMndfYWR4KFVacjEsIEFCLCBDRCk7CS8qICBVcjEgPSBBKkIgICBacjEgPSBacjEqQSAqLworKwl9CisrCisrCS8qIENvbnZlcnQgdG8gYWZmaW5lIGNvb3JkaW5hdGVzICovCisrCWludl9lbHRmcDI1NTE5XzF3X2FkeChBLCBacjEpOworKwltdWxfZWx0ZnAyNTUxOV8xd19hZHgoKHU2NCAqKXNlc3Npb25fa2V5LCBVcjEsIEEpOworKwlmcmVkX2VsdGZwMjU1MTlfMXcoKHU2NCAqKXNlc3Npb25fa2V5KTsKKysKKysJbWVtemVyb19leHBsaWNpdCgmbSwgc2l6ZW9mKG0pKTsKKyt9CisrCisrc3RhdGljIHZvaWQgY3VydmUyNTUxOV9ibWkyKHU4IHNoYXJlZFtDVVJWRTI1NTE5X0tFWV9TSVpFXSwKKysJCQkgICAgY29uc3QgdTggcHJpdmF0ZV9rZXlbQ1VSVkUyNTUxOV9LRVlfU0laRV0sCisrCQkJICAgIGNvbnN0IHU4IHNlc3Npb25fa2V5W0NVUlZFMjU1MTlfS0VZX1NJWkVdKQorK3sKKysJc3RydWN0IHsKKysJCXU2NCBidWZmZXJbNCAqIE5VTV9XT1JEU19FTFRGUDI1NTE5XTsKKysJCXU2NCBjb29yZGluYXRlc1s0ICogTlVNX1dPUkRTX0VMVEZQMjU1MTldOworKwkJdTY0IHdvcmtzcGFjZVs2ICogTlVNX1dPUkRTX0VMVEZQMjU1MTldOworKwkJdTggc2Vzc2lvbltDVVJWRTI1NTE5X0tFWV9TSVpFXTsKKysJCXU4IHByaXZhdGVbQ1VSVkUyNTUxOV9LRVlfU0laRV07CisrCX0gX19hbGlnbmVkKDMyKSBtOworKworKwlpbnQgaSA9IDAsIGogPSAwOworKwl1NjQgcHJldiA9IDA7CisrCXU2NCAqY29uc3QgWDEgPSAodTY0ICopbS5zZXNzaW9uOworKwl1NjQgKmNvbnN0IGtleSA9ICh1NjQgKiltLnByaXZhdGU7CisrCXU2NCAqY29uc3QgUHggPSBtLmNvb3JkaW5hdGVzICsgMDsKKysJdTY0ICpjb25zdCBQeiA9IG0uY29vcmRpbmF0ZXMgKyA0OworKwl1NjQgKmNvbnN0IFF4ID0gbS5jb29yZGluYXRlcyArIDg7CisrCXU2NCAqY29uc3QgUXogPSBtLmNvb3JkaW5hdGVzICsgMTI7CisrCXU2NCAqY29uc3QgWDIgPSBReDsKKysJdTY0ICpjb25zdCBaMiA9IFF6OworKwl1NjQgKmNvbnN0IFgzID0gUHg7CisrCXU2NCAqY29uc3QgWjMgPSBQejsKKysJdTY0ICpjb25zdCBYMloyID0gUXg7CisrCXU2NCAqY29uc3QgWDNaMyA9IFB4OworKworKwl1NjQgKmNvbnN0IEEgPSBtLndvcmtzcGFjZSArIDA7CisrCXU2NCAqY29uc3QgQiA9IG0ud29ya3NwYWNlICsgNDsKKysJdTY0ICpjb25zdCBEID0gbS53b3Jrc3BhY2UgKyA4OworKwl1NjQgKmNvbnN0IEMgPSBtLndvcmtzcGFjZSArIDEyOworKwl1NjQgKmNvbnN0IERBID0gbS53b3Jrc3BhY2UgKyAxNjsKKysJdTY0ICpjb25zdCBDQiA9IG0ud29ya3NwYWNlICsgMjA7CisrCXU2NCAqY29uc3QgQUIgPSBBOworKwl1NjQgKmNvbnN0IERDID0gRDsKKysJdTY0ICpjb25zdCBEQUNCID0gREE7CisrCisrCW1lbWNweShtLnByaXZhdGUsIHByaXZhdGVfa2V5LCBzaXplb2YobS5wcml2YXRlKSk7CisrCW1lbWNweShtLnNlc3Npb24sIHNlc3Npb25fa2V5LCBzaXplb2YobS5zZXNzaW9uKSk7CisrCisrCWN1cnZlMjU1MTlfY2xhbXBfc2VjcmV0KG0ucHJpdmF0ZSk7CisrCisrCS8qIEFzIGluIHRoZSBkcmFmdDoKKysJICogV2hlbiByZWNlaXZpbmcgc3VjaCBhbiBhcnJheSwgaW1wbGVtZW50YXRpb25zIG9mIGN1cnZlMjU1MTkKKysJICogTVVTVCBtYXNrIHRoZSBtb3N0LXNpZ25pZmljYW50IGJpdCBpbiB0aGUgZmluYWwgYnl0ZS4gVGhpcworKwkgKiBpcyBkb25lIHRvIHByZXNlcnZlIGNvbXBhdGliaWxpdHkgd2l0aCBwb2ludCBmb3JtYXRzIHdoaWNoCisrCSAqIHJlc2VydmUgdGhlIHNpZ24gYml0IGZvciB1c2UgaW4gb3RoZXIgcHJvdG9jb2xzIGFuZCB0bworKwkgKiBpbmNyZWFzZSByZXNpc3RhbmNlIHRvIGltcGxlbWVudGF0aW9uIGZpbmdlcnByaW50aW5nCisrCSAqLworKwltLnNlc3Npb25bQ1VSVkUyNTUxOV9LRVlfU0laRSAtIDFdICY9ICgxIDw8ICgyNTUgJSA4KSkgLSAxOworKworKwljb3B5X2VsdGZwMjU1MTlfMXcoUHgsIFgxKTsKKysJc2V0emVyb19lbHRmcDI1NTE5XzF3KFB6KTsKKysJc2V0emVyb19lbHRmcDI1NTE5XzF3KFF4KTsKKysJc2V0emVyb19lbHRmcDI1NTE5XzF3KFF6KTsKKysKKysJUHpbMF0gPSAxOworKwlReFswXSA9IDE7CisrCisrCS8qIG1haW4tbG9vcCAqLworKwlwcmV2ID0gMDsKKysJaiA9IDYyOworKwlmb3IgKGkgPSAzOyBpID49IDA7IC0taSkgeworKwkJd2hpbGUgKGogPj0gMCkgeworKwkJCXU2NCBiaXQgPSAoa2V5W2ldID4+IGopICYgMHgxOworKwkJCXU2NCBzd2FwID0gYml0IF4gcHJldjsKKysJCQlwcmV2ID0gYml0OworKworKwkJCWFkZF9lbHRmcDI1NTE5XzF3X2JtaTIoQSwgWDIsIFoyKTsJLyogQSA9IChYMitaMikgKi8KKysJCQlzdWJfZWx0ZnAyNTUxOV8xdyhCLCBYMiwgWjIpOwkJLyogQiA9IChYMi1aMikgKi8KKysJCQlhZGRfZWx0ZnAyNTUxOV8xd19ibWkyKEMsIFgzLCBaMyk7CS8qIEMgPSAoWDMrWjMpICovCisrCQkJc3ViX2VsdGZwMjU1MTlfMXcoRCwgWDMsIFozKTsJCS8qIEQgPSAoWDMtWjMpICovCisrCQkJbXVsX2VsdGZwMjU1MTlfMndfYm1pMihEQUNCLCBBQiwgREMpOwkvKiBbREF8Q0JdID0gW0F8Ql0qW0R8Q10gKi8KKysKKysJCQljc2VsZWN0KHN3YXAsIEEsIEMpOworKwkJCWNzZWxlY3Qoc3dhcCwgQiwgRCk7CisrCisrCQkJc3FyX2VsdGZwMjU1MTlfMndfYm1pMihBQik7CQkvKiBbQUF8QkJdID0gW0FeMnxCXjJdICovCisrCQkJYWRkX2VsdGZwMjU1MTlfMXdfYm1pMihYMywgREEsIENCKTsJLyogWDMgPSAoREErQ0IpICovCisrCQkJc3ViX2VsdGZwMjU1MTlfMXcoWjMsIERBLCBDQik7CQkvKiBaMyA9IChEQS1DQikgKi8KKysJCQlzcXJfZWx0ZnAyNTUxOV8yd19ibWkyKFgzWjMpOwkJLyogW1gzfFozXSA9IFsoREErQ0IpfChEQStDQildXjIgKi8KKysKKysJCQljb3B5X2VsdGZwMjU1MTlfMXcoWDIsIEIpOwkJLyogWDIgPSBCXjIgKi8KKysJCQlzdWJfZWx0ZnAyNTUxOV8xdyhaMiwgQSwgQik7CQkvKiBaMiA9IEUgPSBBQS1CQiAqLworKworKwkJCW11bF9hMjRfZWx0ZnAyNTUxOV8xdyhCLCBaMik7CQkvKiBCID0gYTI0KkUgKi8KKysJCQlhZGRfZWx0ZnAyNTUxOV8xd19ibWkyKEIsIEIsIFgyKTsJLyogQiA9IGEyNCpFK0IgKi8KKysJCQltdWxfZWx0ZnAyNTUxOV8yd19ibWkyKFgyWjIsIFgyWjIsIEFCKTsJLyogW1gyfFoyXSA9IFtCfEVdKltBfGEyNCpFK0JdICovCisrCQkJbXVsX2VsdGZwMjU1MTlfMXdfYm1pMihaMywgWjMsIFgxKTsJLyogWjMgPSBaMypYMSAqLworKwkJCS0tajsKKysJCX0KKysJCWogPSA2MzsKKysJfQorKworKwlpbnZfZWx0ZnAyNTUxOV8xd19ibWkyKEEsIFF6KTsKKysJbXVsX2VsdGZwMjU1MTlfMXdfYm1pMigodTY0ICopc2hhcmVkLCBReCwgQSk7CisrCWZyZWRfZWx0ZnAyNTUxOV8xdygodTY0ICopc2hhcmVkKTsKKysKKysJbWVtemVyb19leHBsaWNpdCgmbSwgc2l6ZW9mKG0pKTsKKyt9CisrCisrc3RhdGljIHZvaWQgY3VydmUyNTUxOV9ibWkyX2Jhc2UodTggc2Vzc2lvbl9rZXlbQ1VSVkUyNTUxOV9LRVlfU0laRV0sCisrCQkJCSBjb25zdCB1OCBwcml2YXRlX2tleVtDVVJWRTI1NTE5X0tFWV9TSVpFXSkKKyt7CisrCXN0cnVjdCB7CisrCQl1NjQgYnVmZmVyWzQgKiBOVU1fV09SRFNfRUxURlAyNTUxOV07CisrCQl1NjQgY29vcmRpbmF0ZXNbNCAqIE5VTV9XT1JEU19FTFRGUDI1NTE5XTsKKysJCXU2NCB3b3Jrc3BhY2VbNCAqIE5VTV9XT1JEU19FTFRGUDI1NTE5XTsKKysJCXU4IHByaXZhdGVbQ1VSVkUyNTUxOV9LRVlfU0laRV07CisrCX0gX19hbGlnbmVkKDMyKSBtOworKworKwljb25zdCBpbnQgaXRlWzRdID0geyA2NCwgNjQsIDY0LCA2MyB9OworKwljb25zdCBpbnQgcSA9IDM7CisrCXU2NCBzd2FwID0gMTsKKysKKysJaW50IGkgPSAwLCBqID0gMCwgayA9IDA7CisrCXU2NCAqY29uc3Qga2V5ID0gKHU2NCAqKW0ucHJpdmF0ZTsKKysJdTY0ICpjb25zdCBVcjEgPSBtLmNvb3JkaW5hdGVzICsgMDsKKysJdTY0ICpjb25zdCBacjEgPSBtLmNvb3JkaW5hdGVzICsgNDsKKysJdTY0ICpjb25zdCBVcjIgPSBtLmNvb3JkaW5hdGVzICsgODsKKysJdTY0ICpjb25zdCBacjIgPSBtLmNvb3JkaW5hdGVzICsgMTI7CisrCisrCXU2NCAqY29uc3QgVVpyMSA9IG0uY29vcmRpbmF0ZXMgKyAwOworKwl1NjQgKmNvbnN0IFpVcjIgPSBtLmNvb3JkaW5hdGVzICsgODsKKysKKysJdTY0ICpjb25zdCBBID0gbS53b3Jrc3BhY2UgKyAwOworKwl1NjQgKmNvbnN0IEIgPSBtLndvcmtzcGFjZSArIDQ7CisrCXU2NCAqY29uc3QgQyA9IG0ud29ya3NwYWNlICsgODsKKysJdTY0ICpjb25zdCBEID0gbS53b3Jrc3BhY2UgKyAxMjsKKysKKysJdTY0ICpjb25zdCBBQiA9IG0ud29ya3NwYWNlICsgMDsKKysJdTY0ICpjb25zdCBDRCA9IG0ud29ya3NwYWNlICsgODsKKysKKysJY29uc3QgdTY0ICpjb25zdCBQID0gdGFibGVfbGFkZGVyXzhrOworKworKwltZW1jcHkobS5wcml2YXRlLCBwcml2YXRlX2tleSwgc2l6ZW9mKG0ucHJpdmF0ZSkpOworKworKwljdXJ2ZTI1NTE5X2NsYW1wX3NlY3JldChtLnByaXZhdGUpOworKworKwlzZXR6ZXJvX2VsdGZwMjU1MTlfMXcoVXIxKTsKKysJc2V0emVyb19lbHRmcDI1NTE5XzF3KFpyMSk7CisrCXNldHplcm9fZWx0ZnAyNTUxOV8xdyhacjIpOworKwlVcjFbMF0gPSAxOworKwlacjFbMF0gPSAxOworKwlacjJbMF0gPSAxOworKworKwkvKiBHLVMgKi8KKysJVXIyWzNdID0gMHgxZWFlY2RlZWUyN2NhYjM0VUw7CisrCVVyMlsyXSA9IDB4YWRjN2EwYjkyMzVkNDhlMlVMOworKwlVcjJbMV0gPSAweGJiZjA5NWFlMTRiMmVkZjhVTDsKKysJVXIyWzBdID0gMHg3ZTk0ZTFmZWM4MmZhYWJkVUw7CisrCisrCS8qIG1haW4tbG9vcCAqLworKwlqID0gcTsKKysJZm9yIChpID0gMDsgaSA8IE5VTV9XT1JEU19FTFRGUDI1NTE5OyArK2kpIHsKKysJCXdoaWxlIChqIDwgaXRlW2ldKSB7CisrCQkJdTY0IGJpdCA9IChrZXlbaV0gPj4gaikgJiAweDE7CisrCQkJayA9ICg2NCAqIGkgKyBqIC0gcSk7CisrCQkJc3dhcCA9IHN3YXAgXiBiaXQ7CisrCQkJY3N3YXAoc3dhcCwgVXIxLCBVcjIpOworKwkJCWNzd2FwKHN3YXAsIFpyMSwgWnIyKTsKKysJCQlzd2FwID0gYml0OworKwkJCS8qIEFkZGl0aW9uICovCisrCQkJc3ViX2VsdGZwMjU1MTlfMXcoQiwgVXIxLCBacjEpOwkJLyogQiA9IFVyMS1acjEgKi8KKysJCQlhZGRfZWx0ZnAyNTUxOV8xd19ibWkyKEEsIFVyMSwgWnIxKTsJLyogQSA9IFVyMStacjEgKi8KKysJCQltdWxfZWx0ZnAyNTUxOV8xd19ibWkyKEMsICZQWzQgKiBrXSwgQik7LyogQyA9IE0wLUIgKi8KKysJCQlzdWJfZWx0ZnAyNTUxOV8xdyhCLCBBLCBDKTsJCS8qIEIgPSAoVXIxK1pyMSkgLSBNKihVcjEtWnIxKSAqLworKwkJCWFkZF9lbHRmcDI1NTE5XzF3X2JtaTIoQSwgQSwgQyk7CS8qIEEgPSAoVXIxK1pyMSkgKyBNKihVcjEtWnIxKSAqLworKwkJCXNxcl9lbHRmcDI1NTE5XzJ3X2JtaTIoQUIpOwkJLyogQSA9IEFeMiAgICAgIHwgIEIgPSBCXjIgKi8KKysJCQltdWxfZWx0ZnAyNTUxOV8yd19ibWkyKFVacjEsIFpVcjIsIEFCKTsJLyogVXIxID0gWnIyKkEgIHwgIFpyMSA9IFVyMipCICovCisrCQkJKytqOworKwkJfQorKwkJaiA9IDA7CisrCX0KKysKKysJLyogRG91YmxpbmcgKi8KKysJZm9yIChpID0gMDsgaSA8IHE7ICsraSkgeworKwkJYWRkX2VsdGZwMjU1MTlfMXdfYm1pMihBLCBVcjEsIFpyMSk7CS8qICBBID0gVXIxK1pyMSAqLworKwkJc3ViX2VsdGZwMjU1MTlfMXcoQiwgVXIxLCBacjEpOwkJLyogIEIgPSBVcjEtWnIxICovCisrCQlzcXJfZWx0ZnAyNTUxOV8yd19ibWkyKEFCKTsJCS8qICBBID0gQSoqMiAgICAgQiA9IEIqKjIgKi8KKysJCWNvcHlfZWx0ZnAyNTUxOV8xdyhDLCBCKTsJCS8qICBDID0gQiAqLworKwkJc3ViX2VsdGZwMjU1MTlfMXcoQiwgQSwgQik7CQkvKiAgQiA9IEEtQiAqLworKwkJbXVsX2EyNF9lbHRmcDI1NTE5XzF3KEQsIEIpOwkJLyogIEQgPSBteV9hMjQqQiAqLworKwkJYWRkX2VsdGZwMjU1MTlfMXdfYm1pMihELCBELCBDKTsJLyogIEQgPSBEK0MgKi8KKysJCW11bF9lbHRmcDI1NTE5XzJ3X2JtaTIoVVpyMSwgQUIsIENEKTsJLyogIFVyMSA9IEEqQiAgIFpyMSA9IFpyMSpBICovCisrCX0KKysKKysJLyogQ29udmVydCB0byBhZmZpbmUgY29vcmRpbmF0ZXMgKi8KKysJaW52X2VsdGZwMjU1MTlfMXdfYm1pMihBLCBacjEpOworKwltdWxfZWx0ZnAyNTUxOV8xd19ibWkyKCh1NjQgKilzZXNzaW9uX2tleSwgVXIxLCBBKTsKKysJZnJlZF9lbHRmcDI1NTE5XzF3KCh1NjQgKilzZXNzaW9uX2tleSk7CisrCisrCW1lbXplcm9fZXhwbGljaXQoJm0sIHNpemVvZihtKSk7CisrfQorKworK3ZvaWQgY3VydmUyNTUxOV9hcmNoKHU4IG15cHVibGljW0NVUlZFMjU1MTlfS0VZX1NJWkVdLAorKwkJICAgICBjb25zdCB1OCBzZWNyZXRbQ1VSVkUyNTUxOV9LRVlfU0laRV0sCisrCQkgICAgIGNvbnN0IHU4IGJhc2Vwb2ludFtDVVJWRTI1NTE5X0tFWV9TSVpFXSkKKyt7CisrCWlmIChzdGF0aWNfYnJhbmNoX2xpa2VseSgmY3VydmUyNTUxOV91c2VfYWR4KSkKKysJCWN1cnZlMjU1MTlfYWR4KG15cHVibGljLCBzZWNyZXQsIGJhc2Vwb2ludCk7CisrCWVsc2UgaWYgKHN0YXRpY19icmFuY2hfbGlrZWx5KCZjdXJ2ZTI1NTE5X3VzZV9ibWkyKSkKKysJCWN1cnZlMjU1MTlfYm1pMihteXB1YmxpYywgc2VjcmV0LCBiYXNlcG9pbnQpOworKwllbHNlCisrCQljdXJ2ZTI1NTE5X2dlbmVyaWMobXlwdWJsaWMsIHNlY3JldCwgYmFzZXBvaW50KTsKKyt9CisrRVhQT1JUX1NZTUJPTChjdXJ2ZTI1NTE5X2FyY2gpOworKworK3ZvaWQgY3VydmUyNTUxOV9iYXNlX2FyY2godTggcHViW0NVUlZFMjU1MTlfS0VZX1NJWkVdLAorKwkJCSAgY29uc3QgdTggc2VjcmV0W0NVUlZFMjU1MTlfS0VZX1NJWkVdKQorK3sKKysJaWYgKHN0YXRpY19icmFuY2hfbGlrZWx5KCZjdXJ2ZTI1NTE5X3VzZV9hZHgpKQorKwkJY3VydmUyNTUxOV9hZHhfYmFzZShwdWIsIHNlY3JldCk7CisrCWVsc2UgaWYgKHN0YXRpY19icmFuY2hfbGlrZWx5KCZjdXJ2ZTI1NTE5X3VzZV9ibWkyKSkKKysJCWN1cnZlMjU1MTlfYm1pMl9iYXNlKHB1Yiwgc2VjcmV0KTsKKysJZWxzZQorKwkJY3VydmUyNTUxOV9nZW5lcmljKHB1Yiwgc2VjcmV0LCBjdXJ2ZTI1NTE5X2Jhc2VfcG9pbnQpOworK30KKytFWFBPUlRfU1lNQk9MKGN1cnZlMjU1MTlfYmFzZV9hcmNoKTsKKysKKytzdGF0aWMgaW50IGN1cnZlMjU1MTlfc2V0X3NlY3JldChzdHJ1Y3QgY3J5cHRvX2twcCAqdGZtLCBjb25zdCB2b2lkICpidWYsCisrCQkJCSB1bnNpZ25lZCBpbnQgbGVuKQorK3sKKysJdTggKnNlY3JldCA9IGtwcF90Zm1fY3R4KHRmbSk7CisrCisrCWlmICghbGVuKQorKwkJY3VydmUyNTUxOV9nZW5lcmF0ZV9zZWNyZXQoc2VjcmV0KTsKKysJZWxzZSBpZiAobGVuID09IENVUlZFMjU1MTlfS0VZX1NJWkUgJiYKKysJCSBjcnlwdG9fbWVtbmVxKGJ1ZiwgY3VydmUyNTUxOV9udWxsX3BvaW50LCBDVVJWRTI1NTE5X0tFWV9TSVpFKSkKKysJCW1lbWNweShzZWNyZXQsIGJ1ZiwgQ1VSVkUyNTUxOV9LRVlfU0laRSk7CisrCWVsc2UKKysJCXJldHVybiAtRUlOVkFMOworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGludCBjdXJ2ZTI1NTE5X2dlbmVyYXRlX3B1YmxpY19rZXkoc3RydWN0IGtwcF9yZXF1ZXN0ICpyZXEpCisreworKwlzdHJ1Y3QgY3J5cHRvX2twcCAqdGZtID0gY3J5cHRvX2twcF9yZXF0Zm0ocmVxKTsKKysJY29uc3QgdTggKnNlY3JldCA9IGtwcF90Zm1fY3R4KHRmbSk7CisrCXU4IGJ1ZltDVVJWRTI1NTE5X0tFWV9TSVpFXTsKKysJaW50IGNvcGllZCwgbmJ5dGVzOworKworKwlpZiAocmVxLT5zcmMpCisrCQlyZXR1cm4gLUVJTlZBTDsKKysKKysJY3VydmUyNTUxOV9iYXNlX2FyY2goYnVmLCBzZWNyZXQpOworKworKwkvKiBtaWdodCB3YW50IGxlc3MgdGhhbiB3ZSd2ZSBnb3QgKi8KKysJbmJ5dGVzID0gbWluX3Qoc2l6ZV90LCBDVVJWRTI1NTE5X0tFWV9TSVpFLCByZXEtPmRzdF9sZW4pOworKwljb3BpZWQgPSBzZ19jb3B5X2Zyb21fYnVmZmVyKHJlcS0+ZHN0LCBzZ19uZW50c19mb3JfbGVuKHJlcS0+ZHN0LAorKwkJCQkJCQkJbmJ5dGVzKSwKKysJCQkJICAgICBidWYsIG5ieXRlcyk7CisrCWlmIChjb3BpZWQgIT0gbmJ5dGVzKQorKwkJcmV0dXJuIC1FSU5WQUw7CisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IGN1cnZlMjU1MTlfY29tcHV0ZV9zaGFyZWRfc2VjcmV0KHN0cnVjdCBrcHBfcmVxdWVzdCAqcmVxKQorK3sKKysJc3RydWN0IGNyeXB0b19rcHAgKnRmbSA9IGNyeXB0b19rcHBfcmVxdGZtKHJlcSk7CisrCWNvbnN0IHU4ICpzZWNyZXQgPSBrcHBfdGZtX2N0eCh0Zm0pOworKwl1OCBwdWJsaWNfa2V5W0NVUlZFMjU1MTlfS0VZX1NJWkVdOworKwl1OCBidWZbQ1VSVkUyNTUxOV9LRVlfU0laRV07CisrCWludCBjb3BpZWQsIG5ieXRlczsKKysKKysJaWYgKCFyZXEtPnNyYykKKysJCXJldHVybiAtRUlOVkFMOworKworKwljb3BpZWQgPSBzZ19jb3B5X3RvX2J1ZmZlcihyZXEtPnNyYywKKysJCQkJICAgc2dfbmVudHNfZm9yX2xlbihyZXEtPnNyYywKKysJCQkJCQkgICAgQ1VSVkUyNTUxOV9LRVlfU0laRSksCisrCQkJCSAgIHB1YmxpY19rZXksIENVUlZFMjU1MTlfS0VZX1NJWkUpOworKwlpZiAoY29waWVkICE9IENVUlZFMjU1MTlfS0VZX1NJWkUpCisrCQlyZXR1cm4gLUVJTlZBTDsKKysKKysJY3VydmUyNTUxOV9hcmNoKGJ1Ziwgc2VjcmV0LCBwdWJsaWNfa2V5KTsKKysKKysJLyogbWlnaHQgd2FudCBsZXNzIHRoYW4gd2UndmUgZ290ICovCisrCW5ieXRlcyA9IG1pbl90KHNpemVfdCwgQ1VSVkUyNTUxOV9LRVlfU0laRSwgcmVxLT5kc3RfbGVuKTsKKysJY29waWVkID0gc2dfY29weV9mcm9tX2J1ZmZlcihyZXEtPmRzdCwgc2dfbmVudHNfZm9yX2xlbihyZXEtPmRzdCwKKysJCQkJCQkJCW5ieXRlcyksCisrCQkJCSAgICAgYnVmLCBuYnl0ZXMpOworKwlpZiAoY29waWVkICE9IG5ieXRlcykKKysJCXJldHVybiAtRUlOVkFMOworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIHVuc2lnbmVkIGludCBjdXJ2ZTI1NTE5X21heF9zaXplKHN0cnVjdCBjcnlwdG9fa3BwICp0Zm0pCisreworKwlyZXR1cm4gQ1VSVkUyNTUxOV9LRVlfU0laRTsKKyt9CisrCisrc3RhdGljIHN0cnVjdCBrcHBfYWxnIGN1cnZlMjU1MTlfYWxnID0geworKwkuYmFzZS5jcmFfbmFtZQkJPSAiY3VydmUyNTUxOSIsCisrCS5iYXNlLmNyYV9kcml2ZXJfbmFtZQk9ICJjdXJ2ZTI1NTE5LXg4NiIsCisrCS5iYXNlLmNyYV9wcmlvcml0eQk9IDIwMCwKKysJLmJhc2UuY3JhX21vZHVsZQk9IFRISVNfTU9EVUxFLAorKwkuYmFzZS5jcmFfY3R4c2l6ZQk9IENVUlZFMjU1MTlfS0VZX1NJWkUsCisrCisrCS5zZXRfc2VjcmV0CQk9IGN1cnZlMjU1MTlfc2V0X3NlY3JldCwKKysJLmdlbmVyYXRlX3B1YmxpY19rZXkJPSBjdXJ2ZTI1NTE5X2dlbmVyYXRlX3B1YmxpY19rZXksCisrCS5jb21wdXRlX3NoYXJlZF9zZWNyZXQJPSBjdXJ2ZTI1NTE5X2NvbXB1dGVfc2hhcmVkX3NlY3JldCwKKysJLm1heF9zaXplCQk9IGN1cnZlMjU1MTlfbWF4X3NpemUsCisrfTsKKysKKytzdGF0aWMgaW50IF9faW5pdCBjdXJ2ZTI1NTE5X21vZF9pbml0KHZvaWQpCisreworKwlpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0JNSTIpKQorKwkJc3RhdGljX2JyYW5jaF9lbmFibGUoJmN1cnZlMjU1MTlfdXNlX2JtaTIpOworKwllbHNlIGlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQURYKSkKKysJCXN0YXRpY19icmFuY2hfZW5hYmxlKCZjdXJ2ZTI1NTE5X3VzZV9hZHgpOworKwllbHNlCisrCQlyZXR1cm4gMDsKKysJcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9rcHAoJmN1cnZlMjU1MTlfYWxnKTsKKyt9CisrCisrc3RhdGljIHZvaWQgX19leGl0IGN1cnZlMjU1MTlfbW9kX2V4aXQodm9pZCkKKyt7CisrCWlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQk1JMikgfHwKKysJICAgIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BRFgpKQorKwkJY3J5cHRvX3VucmVnaXN0ZXJfa3BwKCZjdXJ2ZTI1NTE5X2FsZyk7CisrfQorKworK21vZHVsZV9pbml0KGN1cnZlMjU1MTlfbW9kX2luaXQpOworK21vZHVsZV9leGl0KGN1cnZlMjU1MTlfbW9kX2V4aXQpOworKworK01PRFVMRV9BTElBU19DUllQVE8oImN1cnZlMjU1MTkiKTsKKytNT0RVTEVfQUxJQVNfQ1JZUFRPKCJjdXJ2ZTI1NTE5LXg4NiIpOworK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKKy0tLSBhL2NyeXB0by9LY29uZmlnCisrKysgYi9jcnlwdG8vS2NvbmZpZworQEAgLTI2OSw2ICsyNjksMTIgQEAgY29uZmlnIENSWVBUT19DVVJWRTI1NTE5CisgCXNlbGVjdCBDUllQVE9fS1BQCisgCXNlbGVjdCBDUllQVE9fTElCX0NVUlZFMjU1MTlfR0VORVJJQworIAorK2NvbmZpZyBDUllQVE9fQ1VSVkUyNTUxOV9YODYKKysJdHJpc3RhdGUgIng4Nl82NCBhY2NlbGVyYXRlZCBDdXJ2ZTI1NTE5IHNjYWxhciBtdWx0aXBsaWNhdGlvbiBsaWJyYXJ5IgorKwlkZXBlbmRzIG9uIFg4NiAmJiA2NEJJVAorKwlzZWxlY3QgQ1JZUFRPX0xJQl9DVVJWRTI1NTE5X0dFTkVSSUMKKysJc2VsZWN0IENSWVBUT19BUkNIX0hBVkVfTElCX0NVUlZFMjU1MTkKKysKKyBjb21tZW50ICJBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEiCisgCisgY29uZmlnIENSWVBUT19DQ00KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMzAtY3J5cHRvLWFybS1jdXJ2ZTI1NTE5LWltcG9ydC1CZXJuc3RlaW4tYW5kLVNjaHdhYmUtcy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMzAtY3J5cHRvLWFybS1jdXJ2ZTI1NTE5LWltcG9ydC1CZXJuc3RlaW4tYW5kLVNjaHdhYmUtcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmRhMjVkCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAzMC1jcnlwdG8tYXJtLWN1cnZlMjU1MTktaW1wb3J0LUJlcm5zdGVpbi1hbmQtU2Nod2FiZS1zLnBhdGNoCkBAIC0wLDAgKzEsMjEzNSBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIkphc29uIEEuIERvbmVuZmVsZCIgPEphc29uQHp4MmM0LmNvbT4KK0RhdGU6IEZyaSwgOCBOb3YgMjAxOSAxMzoyMjozNyArMDEwMAorU3ViamVjdDogW1BBVENIXSBjcnlwdG86IGFybS9jdXJ2ZTI1NTE5IC0gaW1wb3J0IEJlcm5zdGVpbiBhbmQgU2Nod2FiZSdzCisgQ3VydmUyNTUxOSBBUk0gaW1wbGVtZW50YXRpb24KKworY29tbWl0IGYwZmIwMDZiNjA0Zjk4ZTIzMDlhMzBmMzRlZjQ1NWFjNzM0ZjdjMWMgdXBzdHJlYW0uCisKK1RoaXMgY29tZXMgZnJvbSBEYW4gQmVybnN0ZWluIGFuZCBQZXRlciBTY2h3YWJlJ3MgcHVibGljIGRvbWFpbiBORU9OCitjb2RlLCBhbmQgaXMgaW5jbHVkZWQgaGVyZSBpbiByYXcgZm9ybSBzbyB0aGF0IHN1YnNlcXVlbnQgY29tbWl0cyB0aGF0CitmaXggdGhlc2UgdXAgZm9yIHRoZSBrZXJuZWwgY2FuIHNlZSBob3cgaXQgaGFzIGNoYW5nZWQuIFRoaXMgY29kZSBkb2VzCitoYXZlIHNvbWUgZW50aXJlbHkgY29zbWV0aWMgZm9ybWF0dGluZyBkaWZmZXJlbmNlcywgYWRkaW5nIGluZGVudGF0aW9uCithbmQgc28gZm9ydGgsIHNvIHRoYXQgd2hlbiB3ZSBhY3R1YWxseSBwb3J0IGl0IGZvciB1c2UgaW4gdGhlIGtlcm5lbCBpbgordGhlIHN1YnNlcXVlbnQgY29tbWl0LCBpdCdzIG9idmlvdXMgd2hhdCdzIGNoYW5nZWQgaW4gdGhlIHByb2Nlc3MuCisKK1RoaXMgY29kZSBvcmlnaW5hdGVzIGZyb20gU1VQRVJDT1AgMjAxODA4MTgsIGF2YWlsYWJsZSBhdAorPGh0dHBzOi8vYmVuY2guY3IueXAudG8vc3VwZXJjb3AuaHRtbD4uCisKK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorU2lnbmVkLW9mZi1ieTogQXJkIEJpZXNoZXV2ZWwgPGFyZGJAa2VybmVsLm9yZz4KK1NpZ25lZC1vZmYtYnk6IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgYXJjaC9hcm0vY3J5cHRvL2N1cnZlMjU1MTktY29yZS5TIHwgMjEwNSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAyMTA1IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC9hcm0vY3J5cHRvL2N1cnZlMjU1MTktY29yZS5TCisKKy0tLSAvZGV2L251bGwKKysrKyBiL2FyY2gvYXJtL2NyeXB0by9jdXJ2ZTI1NTE5LWNvcmUuUworQEAgLTAsMCArMSwyMTA1IEBACisrLyoKKysgKiBQdWJsaWMgZG9tYWluIGNvZGUgZnJvbSBEYW5pZWwgSi4gQmVybnN0ZWluIGFuZCBQZXRlciBTY2h3YWJlLCBmcm9tCisrICogU1VQRVJDT1AncyBjdXJ2ZTI1NTE5L25lb24yL3NjYWxhcm11bHQucy4KKysgKi8KKysKKysuZnB1IG5lb24KKysudGV4dAorKy5hbGlnbiA0CisrLmdsb2JhbCBfY3J5cHRvX3NjYWxhcm11bHRfY3VydmUyNTUxOV9uZW9uMgorKy5nbG9iYWwgY3J5cHRvX3NjYWxhcm11bHRfY3VydmUyNTUxOV9uZW9uMgorKy50eXBlIF9jcnlwdG9fc2NhbGFybXVsdF9jdXJ2ZTI1NTE5X25lb24yIFNUVF9GVU5DCisrLnR5cGUgY3J5cHRvX3NjYWxhcm11bHRfY3VydmUyNTUxOV9uZW9uMiBTVFRfRlVOQworKwlfY3J5cHRvX3NjYWxhcm11bHRfY3VydmUyNTUxOV9uZW9uMjoKKysJY3J5cHRvX3NjYWxhcm11bHRfY3VydmUyNTUxOV9uZW9uMjoKKysJdnB1c2gJCXtxNCwgcTUsIHE2LCBxN30KKysJbW92CQlyMTIsIHNwCisrCXN1YgkJc3AsIHNwLCAjNzM2CisrCWFuZAkJc3AsIHNwLCAjMHhmZmZmZmZlMAorKwlzdHJkCQlyNCwgW3NwLCAjMF0KKysJc3RyZAkJcjYsIFtzcCwgIzhdCisrCXN0cmQJCXI4LCBbc3AsICMxNl0KKysJc3RyZAkJcjEwLCBbc3AsICMyNF0KKysJc3RyCQlyMTIsIFtzcCwgIzQ4MF0KKysJc3RyCQlyMTQsIFtzcCwgIzQ4NF0KKysJbW92CQlyMCwgcjAKKysJbW92CQlyMSwgcjEKKysJbW92CQlyMiwgcjIKKysJYWRkCQlyMywgc3AsICMzMgorKwlsZHIJCXI0LCA9MAorKwlsZHIJCXI1LCA9MjU0CisrCXZtb3YuaTMyCXEwLCAjMQorKwl2c2hyLnU2NAlxMSwgcTAsICM3CisrCXZzaHIudTY0CXEwLCBxMCwgIzgKKysJdm1vdi5pMzIJZDQsICMxOQorKwl2bW92LmkzMglkNSwgIzM4CisrCWFkZAkJcjYsIHNwLCAjNTEyCisrCXZzdDEuOAkJe2QyLWQzfSwgW3I2LCA6IDEyOF0KKysJYWRkCQlyNiwgc3AsICM1MjgKKysJdnN0MS44CQl7ZDAtZDF9LCBbcjYsIDogMTI4XQorKwlhZGQJCXI2LCBzcCwgIzU0NAorKwl2c3QxLjgJCXtkNC1kNX0sIFtyNiwgOiAxMjhdCisrCWFkZAkJcjYsIHIzLCAjMAorKwl2bW92LmkzMglxMiwgIzAKKysJdnN0MS44CQl7ZDQtZDV9LCBbcjYsIDogMTI4XSEKKysJdnN0MS44CQl7ZDQtZDV9LCBbcjYsIDogMTI4XSEKKysJdnN0MS44CQlkNCwgW3I2LCA6IDY0XQorKwlhZGQJCXI2LCByMywgIzAKKysJbGRyCQlyNywgPTk2MAorKwlzdWIJCXI3LCByNywgIzIKKysJbmVnCQlyNywgcjcKKysJc3ViCQlyNywgcjcsIHI3LCBMU0wgIzcKKysJc3RyCQlyNywgW3I2XQorKwlhZGQJCXI2LCBzcCwgIzcwNAorKwl2bGQxLjgJCXtkNC1kNX0sIFtyMV0hCisrCXZsZDEuOAkJe2Q2LWQ3fSwgW3IxXQorKwl2c3QxLjgJCXtkNC1kNX0sIFtyNiwgOiAxMjhdIQorKwl2c3QxLjgJCXtkNi1kN30sIFtyNiwgOiAxMjhdCisrCXN1YgkJcjEsIHI2LCAjMTYKKysJbGRyYgkJcjYsIFtyMV0KKysJYW5kCQlyNiwgcjYsICMyNDgKKysJc3RyYgkJcjYsIFtyMV0KKysJbGRyYgkJcjYsIFtyMSwgIzMxXQorKwlhbmQJCXI2LCByNiwgIzEyNworKwlvcnIJCXI2LCByNiwgIzY0CisrCXN0cmIJCXI2LCBbcjEsICMzMV0KKysJdm1vdi5pNjQJcTIsICMweGZmZmZmZmZmCisrCXZzaHIudTY0CXEzLCBxMiwgIzcKKysJdnNoci51NjQJcTIsIHEyLCAjNgorKwl2bGQxLjgJCXtkOH0sIFtyMl0KKysJdmxkMS44CQl7ZDEwfSwgW3IyXQorKwlhZGQJCXIyLCByMiwgIzYKKysJdmxkMS44CQl7ZDEyfSwgW3IyXQorKwl2bGQxLjgJCXtkMTR9LCBbcjJdCisrCWFkZAkJcjIsIHIyLCAjNgorKwl2bGQxLjgJCXtkMTZ9LCBbcjJdCisrCWFkZAkJcjIsIHIyLCAjNAorKwl2bGQxLjgJCXtkMTh9LCBbcjJdCisrCXZsZDEuOAkJe2QyMH0sIFtyMl0KKysJYWRkCQlyMiwgcjIsICM2CisrCXZsZDEuOAkJe2QyMn0sIFtyMl0KKysJYWRkCQlyMiwgcjIsICMyCisrCXZsZDEuOAkJe2QyNH0sIFtyMl0KKysJdmxkMS44CQl7ZDI2fSwgW3IyXQorKwl2c2hyLnU2NAlxNSwgcTUsICMyNgorKwl2c2hyLnU2NAlxNiwgcTYsICMzCisrCXZzaHIudTY0CXE3LCBxNywgIzI5CisrCXZzaHIudTY0CXE4LCBxOCwgIzYKKysJdnNoci51NjQJcTEwLCBxMTAsICMyNQorKwl2c2hyLnU2NAlxMTEsIHExMSwgIzMKKysJdnNoci51NjQJcTEyLCBxMTIsICMxMgorKwl2c2hyLnU2NAlxMTMsIHExMywgIzM4CisrCXZhbmQJCXE0LCBxNCwgcTIKKysJdmFuZAkJcTYsIHE2LCBxMgorKwl2YW5kCQlxOCwgcTgsIHEyCisrCXZhbmQJCXExMCwgcTEwLCBxMgorKwl2YW5kCQlxMiwgcTEyLCBxMgorKwl2YW5kCQlxNSwgcTUsIHEzCisrCXZhbmQJCXE3LCBxNywgcTMKKysJdmFuZAkJcTksIHE5LCBxMworKwl2YW5kCQlxMTEsIHExMSwgcTMKKysJdmFuZAkJcTMsIHExMywgcTMKKysJYWRkCQlyMiwgcjMsICM0OAorKwl2YWRkLmk2NAlxMTIsIHE0LCBxMQorKwl2YWRkLmk2NAlxMTMsIHExMCwgcTEKKysJdnNoci5zNjQJcTEyLCBxMTIsICMyNgorKwl2c2hyLnM2NAlxMTMsIHExMywgIzI2CisrCXZhZGQuaTY0CXE1LCBxNSwgcTEyCisrCXZzaGwuaTY0CXExMiwgcTEyLCAjMjYKKysJdmFkZC5pNjQJcTE0LCBxNSwgcTAKKysJdmFkZC5pNjQJcTExLCBxMTEsIHExMworKwl2c2hsLmk2NAlxMTMsIHExMywgIzI2CisrCXZhZGQuaTY0CXExNSwgcTExLCBxMAorKwl2c3ViLmk2NAlxNCwgcTQsIHExMgorKwl2c2hyLnM2NAlxMTIsIHExNCwgIzI1CisrCXZzdWIuaTY0CXExMCwgcTEwLCBxMTMKKysJdnNoci5zNjQJcTEzLCBxMTUsICMyNQorKwl2YWRkLmk2NAlxNiwgcTYsIHExMgorKwl2c2hsLmk2NAlxMTIsIHExMiwgIzI1CisrCXZhZGQuaTY0CXExNCwgcTYsIHExCisrCXZhZGQuaTY0CXEyLCBxMiwgcTEzCisrCXZzdWIuaTY0CXE1LCBxNSwgcTEyCisrCXZzaHIuczY0CXExMiwgcTE0LCAjMjYKKysJdnNobC5pNjQJcTEzLCBxMTMsICMyNQorKwl2YWRkLmk2NAlxMTQsIHEyLCBxMQorKwl2YWRkLmk2NAlxNywgcTcsIHExMgorKwl2c2hsLmk2NAlxMTIsIHExMiwgIzI2CisrCXZhZGQuaTY0CXExNSwgcTcsIHEwCisrCXZzdWIuaTY0CXExMSwgcTExLCBxMTMKKysJdnNoci5zNjQJcTEzLCBxMTQsICMyNgorKwl2c3ViLmk2NAlxNiwgcTYsIHExMgorKwl2c2hyLnM2NAlxMTIsIHExNSwgIzI1CisrCXZhZGQuaTY0CXEzLCBxMywgcTEzCisrCXZzaGwuaTY0CXExMywgcTEzLCAjMjYKKysJdmFkZC5pNjQJcTE0LCBxMywgcTAKKysJdmFkZC5pNjQJcTgsIHE4LCBxMTIKKysJdnNobC5pNjQJcTEyLCBxMTIsICMyNQorKwl2YWRkLmk2NAlxMTUsIHE4LCBxMQorKwlhZGQJCXIyLCByMiwgIzgKKysJdnN1Yi5pNjQJcTIsIHEyLCBxMTMKKysJdnNoci5zNjQJcTEzLCBxMTQsICMyNQorKwl2c3ViLmk2NAlxNywgcTcsIHExMgorKwl2c2hyLnM2NAlxMTIsIHExNSwgIzI2CisrCXZhZGQuaTY0CXExNCwgcTEzLCBxMTMKKysJdmFkZC5pNjQJcTksIHE5LCBxMTIKKysJdnRybi4zMgkJZDEyLCBkMTQKKysJdnNobC5pNjQJcTEyLCBxMTIsICMyNgorKwl2dHJuLjMyCQlkMTMsIGQxNQorKwl2YWRkLmk2NAlxMCwgcTksIHEwCisrCXZhZGQuaTY0CXE0LCBxNCwgcTE0CisrCXZzdDEuOAkJZDEyLCBbcjIsIDogNjRdIQorKwl2c2hsLmk2NAlxNiwgcTEzLCAjNAorKwl2c3ViLmk2NAlxNywgcTgsIHExMgorKwl2c2hyLnM2NAlxMCwgcTAsICMyNQorKwl2YWRkLmk2NAlxNCwgcTQsIHE2CisrCXZhZGQuaTY0CXE2LCBxMTAsIHEwCisrCXZzaGwuaTY0CXEwLCBxMCwgIzI1CisrCXZhZGQuaTY0CXE4LCBxNiwgcTEKKysJdmFkZC5pNjQJcTQsIHE0LCBxMTMKKysJdnNobC5pNjQJcTEwLCBxMTMsICMyNQorKwl2YWRkLmk2NAlxMSwgcTQsIHExCisrCXZzdWIuaTY0CXEwLCBxOSwgcTAKKysJdnNoci5zNjQJcTgsIHE4LCAjMjYKKysJdnN1Yi5pNjQJcTMsIHEzLCBxMTAKKysJdnRybi4zMgkJZDE0LCBkMAorKwl2c2hyLnM2NAlxMSwgcTEsICMyNgorKwl2dHJuLjMyCQlkMTUsIGQxCisrCXZhZGQuaTY0CXEwLCBxMTEsIHE4CisrCXZzdDEuOAkJZDE0LCBbcjIsIDogNjRdCisrCXZzaGwuaTY0CXE3LCBxOCwgIzI2CisrCXZhZGQuaTY0CXE1LCBxNSwgcTEKKysJdnRybi4zMgkJZDQsIGQ2CisrCXZzaGwuaTY0CXExLCBxMSwgIzI2CisrCXZ0cm4uMzIJCWQ1LCBkNworKwl2c3ViLmk2NAlxMywgcTYsIHE3CisrCWFkZAkJcjIsIHIyLCAjMTYKKysJdnN1Yi5pNjQJcTEsIHE0LCBxMQorKwl2c3QxLjgJCWQ0LCBbcjIsIDogNjRdCisrCXZ0cm4uMzIJCWQ2LCBkMAorKwl2dHJuLjMyCQlkNywgZDEKKysJc3ViCQlyMiwgcjIsICM4CisrCXZ0cm4uMzIJCWQyLCBkMTAKKysJdnRybi4zMgkJZDMsIGQxMQorKwl2c3QxLjgJCWQ2LCBbcjIsIDogNjRdCisrCXN1YgkJcjIsIHIyLCAjMjQKKysJdnN0MS44CQlkMiwgW3IyLCA6IDY0XQorKwlhZGQJCXIyLCByMywgIzk2CisrCXZtb3YuaTMyCXEwLCAjMAorKwl2bW92Lmk2NAlkMiwgIzB4ZmYKKysJdm1vdi5pNjQJZDMsICMwCisrCXZzaHIudTMyCXExLCBxMSwgIzcKKysJdnN0MS44CQl7ZDItZDN9LCBbcjIsIDogMTI4XSEKKysJdnN0MS44CQl7ZDAtZDF9LCBbcjIsIDogMTI4XSEKKysJdnN0MS44CQlkMCwgW3IyLCA6IDY0XQorKwlhZGQJCXIyLCByMywgIzE0NAorKwl2bW92LmkzMglxMCwgIzAKKysJdnN0MS44CQl7ZDAtZDF9LCBbcjIsIDogMTI4XSEKKysJdnN0MS44CQl7ZDAtZDF9LCBbcjIsIDogMTI4XSEKKysJdnN0MS44CQlkMCwgW3IyLCA6IDY0XQorKwlhZGQJCXIyLCByMywgIzI0MAorKwl2bW92LmkzMglxMCwgIzAKKysJdm1vdi5pNjQJZDIsICMweGZmCisrCXZtb3YuaTY0CWQzLCAjMAorKwl2c2hyLnUzMglxMSwgcTEsICM3CisrCXZzdDEuOAkJe2QyLWQzfSwgW3IyLCA6IDEyOF0hCisrCXZzdDEuOAkJe2QwLWQxfSwgW3IyLCA6IDEyOF0hCisrCXZzdDEuOAkJZDAsIFtyMiwgOiA2NF0KKysJYWRkCQlyMiwgcjMsICM0OAorKwlhZGQJCXI2LCByMywgIzE5MgorKwl2bGQxLjgJCXtkMC1kMX0sIFtyMiwgOiAxMjhdIQorKwl2bGQxLjgJCXtkMi1kM30sIFtyMiwgOiAxMjhdIQorKwl2bGQxLjgJCXtkNH0sIFtyMiwgOiA2NF0KKysJdnN0MS44CQl7ZDAtZDF9LCBbcjYsIDogMTI4XSEKKysJdnN0MS44CQl7ZDItZDN9LCBbcjYsIDogMTI4XSEKKysJdnN0MS44CQlkNCwgW3I2LCA6IDY0XQorKy5fbWFpbmxvb3A6CisrCW1vdgkJcjIsIHI1LCBMU1IgIzMKKysJYW5kCQlyNiwgcjUsICM3CisrCWxkcmIJCXIyLCBbcjEsIHIyXQorKwltb3YJCXIyLCByMiwgTFNSIHI2CisrCWFuZAkJcjIsIHIyLCAjMQorKwlzdHIJCXI1LCBbc3AsICM0ODhdCisrCWVvcgkJcjQsIHI0LCByMgorKwlzdHIJCXIyLCBbc3AsICM0OTJdCisrCW5lZwkJcjIsIHI0CisrCWFkZAkJcjQsIHIzLCAjOTYKKysJYWRkCQlyNSwgcjMsICMxOTIKKysJYWRkCQlyNiwgcjMsICMxNDQKKysJdmxkMS44CQl7ZDgtZDl9LCBbcjQsIDogMTI4XSEKKysJYWRkCQlyNywgcjMsICMyNDAKKysJdmxkMS44CQl7ZDEwLWQxMX0sIFtyNSwgOiAxMjhdIQorKwl2ZW9yCQlxNiwgcTQsIHE1CisrCXZsZDEuOAkJe2QxNC1kMTV9LCBbcjYsIDogMTI4XSEKKysJdmR1cC5pMzIJcTgsIHIyCisrCXZsZDEuOAkJe2QxOC1kMTl9LCBbcjcsIDogMTI4XSEKKysJdmVvcgkJcTEwLCBxNywgcTkKKysJdmxkMS44CQl7ZDIyLWQyM30sIFtyNCwgOiAxMjhdIQorKwl2YW5kCQlxNiwgcTYsIHE4CisrCXZsZDEuOAkJe2QyNC1kMjV9LCBbcjUsIDogMTI4XSEKKysJdmFuZAkJcTEwLCBxMTAsIHE4CisrCXZsZDEuOAkJe2QyNi1kMjd9LCBbcjYsIDogMTI4XSEKKysJdmVvcgkJcTQsIHE0LCBxNgorKwl2bGQxLjgJCXtkMjgtZDI5fSwgW3I3LCA6IDEyOF0hCisrCXZlb3IJCXE1LCBxNSwgcTYKKysJdmxkMS44CQl7ZDB9LCBbcjQsIDogNjRdCisrCXZlb3IJCXE2LCBxNywgcTEwCisrCXZsZDEuOAkJe2QyfSwgW3I1LCA6IDY0XQorKwl2ZW9yCQlxNywgcTksIHExMAorKwl2bGQxLjgJCXtkNH0sIFtyNiwgOiA2NF0KKysJdmVvcgkJcTksIHExMSwgcTEyCisrCXZsZDEuOAkJe2Q2fSwgW3I3LCA6IDY0XQorKwl2ZW9yCQlxMTAsIHEwLCBxMQorKwlzdWIJCXIyLCByNCwgIzMyCisrCXZhbmQJCXE5LCBxOSwgcTgKKysJc3ViCQlyNCwgcjUsICMzMgorKwl2YW5kCQlxMTAsIHExMCwgcTgKKysJc3ViCQlyNSwgcjYsICMzMgorKwl2ZW9yCQlxMTEsIHExMSwgcTkKKysJc3ViCQlyNiwgcjcsICMzMgorKwl2ZW9yCQlxMCwgcTAsIHExMAorKwl2ZW9yCQlxOSwgcTEyLCBxOQorKwl2ZW9yCQlxMSwgcTEsIHExMAorKwl2ZW9yCQlxMTAsIHExMywgcTE0CisrCXZlb3IJCXExMiwgcTIsIHEzCisrCXZhbmQJCXExMCwgcTEwLCBxOAorKwl2YW5kCQlxOCwgcTEyLCBxOAorKwl2ZW9yCQlxMTIsIHExMywgcTEwCisrCXZlb3IJCXEyLCBxMiwgcTgKKysJdmVvcgkJcTEwLCBxMTQsIHExMAorKwl2ZW9yCQlxMywgcTMsIHE4CisrCXZhZGQuaTMyCXE4LCBxNCwgcTYKKysJdnN1Yi5pMzIJcTQsIHE0LCBxNgorKwl2c3QxLjgJCXtkMTYtZDE3fSwgW3IyLCA6IDEyOF0hCisrCXZhZGQuaTMyCXE2LCBxMTEsIHExMgorKwl2c3QxLjgJCXtkOC1kOX0sIFtyNSwgOiAxMjhdIQorKwl2c3ViLmkzMglxNCwgcTExLCBxMTIKKysJdnN0MS44CQl7ZDEyLWQxM30sIFtyMiwgOiAxMjhdIQorKwl2YWRkLmkzMglxNiwgcTAsIHEyCisrCXZzdDEuOAkJe2Q4LWQ5fSwgW3I1LCA6IDEyOF0hCisrCXZzdWIuaTMyCXEwLCBxMCwgcTIKKysJdnN0MS44CQlkMTIsIFtyMiwgOiA2NF0KKysJdmFkZC5pMzIJcTIsIHE1LCBxNworKwl2c3QxLjgJCWQwLCBbcjUsIDogNjRdCisrCXZzdWIuaTMyCXEwLCBxNSwgcTcKKysJdnN0MS44CQl7ZDQtZDV9LCBbcjQsIDogMTI4XSEKKysJdmFkZC5pMzIJcTIsIHE5LCBxMTAKKysJdnN0MS44CQl7ZDAtZDF9LCBbcjYsIDogMTI4XSEKKysJdnN1Yi5pMzIJcTAsIHE5LCBxMTAKKysJdnN0MS44CQl7ZDQtZDV9LCBbcjQsIDogMTI4XSEKKysJdmFkZC5pMzIJcTIsIHExLCBxMworKwl2c3QxLjgJCXtkMC1kMX0sIFtyNiwgOiAxMjhdIQorKwl2c3ViLmkzMglxMCwgcTEsIHEzCisrCXZzdDEuOAkJZDQsIFtyNCwgOiA2NF0KKysJdnN0MS44CQlkMCwgW3I2LCA6IDY0XQorKwlhZGQJCXIyLCBzcCwgIzU0NAorKwlhZGQJCXI0LCByMywgIzk2CisrCWFkZAkJcjUsIHIzLCAjMTQ0CisrCXZsZDEuOAkJe2QwLWQxfSwgW3IyLCA6IDEyOF0KKysJdmxkMS44CQl7ZDItZDN9LCBbcjQsIDogMTI4XSEKKysJdmxkMS44CQl7ZDQtZDV9LCBbcjUsIDogMTI4XSEKKysJdnppcC5pMzIJcTEsIHEyCisrCXZsZDEuOAkJe2Q2LWQ3fSwgW3I0LCA6IDEyOF0hCisrCXZsZDEuOAkJe2Q4LWQ5fSwgW3I1LCA6IDEyOF0hCisrCXZzaGwuaTMyCXE1LCBxMSwgIzEKKysJdnppcC5pMzIJcTMsIHE0CisrCXZzaGwuaTMyCXE2LCBxMiwgIzEKKysJdmxkMS44CQl7ZDE0fSwgW3I0LCA6IDY0XQorKwl2c2hsLmkzMglxOCwgcTMsICMxCisrCXZsZDEuOAkJe2QxNX0sIFtyNSwgOiA2NF0KKysJdnNobC5pMzIJcTksIHE0LCAjMQorKwl2bXVsLmkzMglkMjEsIGQ3LCBkMQorKwl2dHJuLjMyCQlkMTQsIGQxNQorKwl2bXVsLmkzMglxMTEsIHE0LCBxMAorKwl2bXVsLmkzMglxMCwgcTcsIHEwCisrCXZtdWxsLnMzMglxMTIsIGQyLCBkMgorKwl2bWxhbC5zMzIJcTEyLCBkMTEsIGQxCisrCXZtbGFsLnMzMglxMTIsIGQxMiwgZDAKKysJdm1sYWwuczMyCXExMiwgZDEzLCBkMjMKKysJdm1sYWwuczMyCXExMiwgZDE2LCBkMjIKKysJdm1sYWwuczMyCXExMiwgZDcsIGQyMQorKwl2bXVsbC5zMzIJcTEwLCBkMiwgZDExCisrCXZtbGFsLnMzMglxMTAsIGQ0LCBkMQorKwl2bWxhbC5zMzIJcTEwLCBkMTMsIGQwCisrCXZtbGFsLnMzMglxMTAsIGQ2LCBkMjMKKysJdm1sYWwuczMyCXExMCwgZDE3LCBkMjIKKysJdm11bGwuczMyCXExMywgZDEwLCBkNAorKwl2bWxhbC5zMzIJcTEzLCBkMTEsIGQzCisrCXZtbGFsLnMzMglxMTMsIGQxMywgZDEKKysJdm1sYWwuczMyCXExMywgZDE2LCBkMAorKwl2bWxhbC5zMzIJcTEzLCBkMTcsIGQyMworKwl2bWxhbC5zMzIJcTEzLCBkOCwgZDIyCisrCXZtdWxsLnMzMglxMSwgZDEwLCBkNQorKwl2bWxhbC5zMzIJcTEsIGQxMSwgZDQKKysJdm1sYWwuczMyCXExLCBkNiwgZDEKKysJdm1sYWwuczMyCXExLCBkMTcsIGQwCisrCXZtbGFsLnMzMglxMSwgZDgsIGQyMworKwl2bXVsbC5zMzIJcTE0LCBkMTAsIGQ2CisrCXZtbGFsLnMzMglxMTQsIGQxMSwgZDEzCisrCXZtbGFsLnMzMglxMTQsIGQ0LCBkNAorKwl2bWxhbC5zMzIJcTE0LCBkMTcsIGQxCisrCXZtbGFsLnMzMglxMTQsIGQxOCwgZDAKKysJdm1sYWwuczMyCXExNCwgZDksIGQyMworKwl2bXVsbC5zMzIJcTExLCBkMTAsIGQ3CisrCXZtbGFsLnMzMglxMTEsIGQxMSwgZDYKKysJdm1sYWwuczMyCXExMSwgZDEyLCBkNQorKwl2bWxhbC5zMzIJcTExLCBkOCwgZDEKKysJdm1sYWwuczMyCXExMSwgZDE5LCBkMAorKwl2bXVsbC5zMzIJcTE1LCBkMTAsIGQ4CisrCXZtbGFsLnMzMglxMTUsIGQxMSwgZDE3CisrCXZtbGFsLnMzMglxMTUsIGQxMiwgZDYKKysJdm1sYWwuczMyCXExNSwgZDEzLCBkNQorKwl2bWxhbC5zMzIJcTE1LCBkMTksIGQxCisrCXZtbGFsLnMzMglxMTUsIGQxNCwgZDAKKysJdm11bGwuczMyCXEyLCBkMTAsIGQ5CisrCXZtbGFsLnMzMglxMiwgZDExLCBkOAorKwl2bWxhbC5zMzIJcTIsIGQxMiwgZDcKKysJdm1sYWwuczMyCXEyLCBkMTMsIGQ2CisrCXZtbGFsLnMzMglxMiwgZDE0LCBkMQorKwl2bXVsbC5zMzIJcTAsIGQxNSwgZDEKKysJdm1sYWwuczMyCXEwLCBkMTAsIGQxNAorKwl2bWxhbC5zMzIJcTAsIGQxMSwgZDE5CisrCXZtbGFsLnMzMglxMCwgZDEyLCBkOAorKwl2bWxhbC5zMzIJcTAsIGQxMywgZDE3CisrCXZtbGFsLnMzMglxMCwgZDYsIGQ2CisrCWFkZAkJcjIsIHNwLCAjNTEyCisrCXZsZDEuOAkJe2QxOC1kMTl9LCBbcjIsIDogMTI4XQorKwl2bXVsbC5zMzIJcTMsIGQxNiwgZDcKKysJdm1sYWwuczMyCXEzLCBkMTAsIGQxNQorKwl2bWxhbC5zMzIJcTMsIGQxMSwgZDE0CisrCXZtbGFsLnMzMglxMywgZDEyLCBkOQorKwl2bWxhbC5zMzIJcTMsIGQxMywgZDgKKysJYWRkCQlyMiwgc3AsICM1MjgKKysJdmxkMS44CQl7ZDgtZDl9LCBbcjIsIDogMTI4XQorKwl2YWRkLmk2NAlxNSwgcTEyLCBxOQorKwl2YWRkLmk2NAlxNiwgcTE1LCBxOQorKwl2c2hyLnM2NAlxNSwgcTUsICMyNgorKwl2c2hyLnM2NAlxNiwgcTYsICMyNgorKwl2YWRkLmk2NAlxNywgcTEwLCBxNQorKwl2c2hsLmk2NAlxNSwgcTUsICMyNgorKwl2YWRkLmk2NAlxOCwgcTcsIHE0CisrCXZhZGQuaTY0CXEyLCBxMiwgcTYKKysJdnNobC5pNjQJcTYsIHE2LCAjMjYKKysJdmFkZC5pNjQJcTEwLCBxMiwgcTQKKysJdnN1Yi5pNjQJcTUsIHExMiwgcTUKKysJdnNoci5zNjQJcTgsIHE4LCAjMjUKKysJdnN1Yi5pNjQJcTYsIHExNSwgcTYKKysJdnNoci5zNjQJcTEwLCBxMTAsICMyNQorKwl2YWRkLmk2NAlxMTIsIHExMywgcTgKKysJdnNobC5pNjQJcTgsIHE4LCAjMjUKKysJdmFkZC5pNjQJcTEzLCBxMTIsIHE5CisrCXZhZGQuaTY0CXEwLCBxMCwgcTEwCisrCXZzdWIuaTY0CXE3LCBxNywgcTgKKysJdnNoci5zNjQJcTgsIHExMywgIzI2CisrCXZzaGwuaTY0CXExMCwgcTEwLCAjMjUKKysJdmFkZC5pNjQJcTEzLCBxMCwgcTkKKysJdmFkZC5pNjQJcTEsIHExLCBxOAorKwl2c2hsLmk2NAlxOCwgcTgsICMyNgorKwl2YWRkLmk2NAlxMTUsIHExLCBxNAorKwl2c3ViLmk2NAlxMiwgcTIsIHExMAorKwl2c2hyLnM2NAlxMTAsIHExMywgIzI2CisrCXZzdWIuaTY0CXE4LCBxMTIsIHE4CisrCXZzaHIuczY0CXExMiwgcTE1LCAjMjUKKysJdmFkZC5pNjQJcTMsIHEzLCBxMTAKKysJdnNobC5pNjQJcTEwLCBxMTAsICMyNgorKwl2YWRkLmk2NAlxMTMsIHEzLCBxNAorKwl2YWRkLmk2NAlxMTQsIHExNCwgcTEyCisrCWFkZAkJcjIsIHIzLCAjMjg4CisrCXZzaGwuaTY0CXExMiwgcTEyLCAjMjUKKysJYWRkCQlyNCwgcjMsICMzMzYKKysJdmFkZC5pNjQJcTE1LCBxMTQsIHE5CisrCWFkZAkJcjIsIHIyLCAjOAorKwl2c3ViLmk2NAlxMCwgcTAsIHExMAorKwlhZGQJCXI0LCByNCwgIzgKKysJdnNoci5zNjQJcTEwLCBxMTMsICMyNQorKwl2c3ViLmk2NAlxMSwgcTEsIHExMgorKwl2c2hyLnM2NAlxMTIsIHExNSwgIzI2CisrCXZhZGQuaTY0CXExMywgcTEwLCBxMTAKKysJdmFkZC5pNjQJcTExLCBxMTEsIHExMgorKwl2dHJuLjMyCQlkMTYsIGQyCisrCXZzaGwuaTY0CXExMiwgcTEyLCAjMjYKKysJdnRybi4zMgkJZDE3LCBkMworKwl2YWRkLmk2NAlxMSwgcTExLCBxNAorKwl2YWRkLmk2NAlxNCwgcTUsIHExMworKwl2c3QxLjgJCWQxNiwgW3IyLCA6IDY0XSEKKysJdnNobC5pNjQJcTUsIHExMCwgIzQKKysJdnN0MS44CQlkMTcsIFtyNCwgOiA2NF0hCisrCXZzdWIuaTY0CXE4LCBxMTQsIHExMgorKwl2c2hyLnM2NAlxMSwgcTEsICMyNQorKwl2YWRkLmk2NAlxNCwgcTQsIHE1CisrCXZhZGQuaTY0CXE1LCBxNiwgcTEKKysJdnNobC5pNjQJcTEsIHExLCAjMjUKKysJdmFkZC5pNjQJcTYsIHE1LCBxOQorKwl2YWRkLmk2NAlxNCwgcTQsIHExMAorKwl2c2hsLmk2NAlxMTAsIHExMCwgIzI1CisrCXZhZGQuaTY0CXE5LCBxNCwgcTkKKysJdnN1Yi5pNjQJcTEsIHExMSwgcTEKKysJdnNoci5zNjQJcTYsIHE2LCAjMjYKKysJdnN1Yi5pNjQJcTMsIHEzLCBxMTAKKysJdnRybi4zMgkJZDE2LCBkMgorKwl2c2hyLnM2NAlxOSwgcTksICMyNgorKwl2dHJuLjMyCQlkMTcsIGQzCisrCXZhZGQuaTY0CXExLCBxMiwgcTYKKysJdnN0MS44CQlkMTYsIFtyMiwgOiA2NF0KKysJdnNobC5pNjQJcTIsIHE2LCAjMjYKKysJdnN0MS44CQlkMTcsIFtyNCwgOiA2NF0KKysJdmFkZC5pNjQJcTYsIHE3LCBxOQorKwl2dHJuLjMyCQlkMCwgZDYKKysJdnNobC5pNjQJcTcsIHE5LCAjMjYKKysJdnRybi4zMgkJZDEsIGQ3CisrCXZzdWIuaTY0CXEyLCBxNSwgcTIKKysJYWRkCQlyMiwgcjIsICMxNgorKwl2c3ViLmk2NAlxMywgcTQsIHE3CisrCXZzdDEuOAkJZDAsIFtyMiwgOiA2NF0KKysJYWRkCQlyNCwgcjQsICMxNgorKwl2c3QxLjgJCWQxLCBbcjQsIDogNjRdCisrCXZ0cm4uMzIJCWQ0LCBkMgorKwl2dHJuLjMyCQlkNSwgZDMKKysJc3ViCQlyMiwgcjIsICM4CisrCXN1YgkJcjQsIHI0LCAjOAorKwl2dHJuLjMyCQlkNiwgZDEyCisrCXZ0cm4uMzIJCWQ3LCBkMTMKKysJdnN0MS44CQlkNCwgW3IyLCA6IDY0XQorKwl2c3QxLjgJCWQ1LCBbcjQsIDogNjRdCisrCXN1YgkJcjIsIHIyLCAjMjQKKysJc3ViCQlyNCwgcjQsICMyNAorKwl2c3QxLjgJCWQ2LCBbcjIsIDogNjRdCisrCXZzdDEuOAkJZDcsIFtyNCwgOiA2NF0KKysJYWRkCQlyMiwgcjMsICMyNDAKKysJYWRkCQlyNCwgcjMsICM5NgorKwl2bGQxLjgJCXtkMC1kMX0sIFtyNCwgOiAxMjhdIQorKwl2bGQxLjgJCXtkMi1kM30sIFtyNCwgOiAxMjhdIQorKwl2bGQxLjgJCXtkNH0sIFtyNCwgOiA2NF0KKysJYWRkCQlyNCwgcjMsICMxNDQKKysJdmxkMS44CQl7ZDYtZDd9LCBbcjQsIDogMTI4XSEKKysJdnRybi4zMgkJcTAsIHEzCisrCXZsZDEuOAkJe2Q4LWQ5fSwgW3I0LCA6IDEyOF0hCisrCXZzaGwuaTMyCXE1LCBxMCwgIzQKKysJdnRybi4zMgkJcTEsIHE0CisrCXZzaGwuaTMyCXE2LCBxMywgIzQKKysJdmFkZC5pMzIJcTUsIHE1LCBxMAorKwl2YWRkLmkzMglxNiwgcTYsIHEzCisrCXZzaGwuaTMyCXE3LCBxMSwgIzQKKysJdmxkMS44CQl7ZDV9LCBbcjQsIDogNjRdCisrCXZzaGwuaTMyCXE4LCBxNCwgIzQKKysJdnRybi4zMgkJZDQsIGQ1CisrCXZhZGQuaTMyCXE3LCBxNywgcTEKKysJdmFkZC5pMzIJcTgsIHE4LCBxNAorKwl2bGQxLjgJCXtkMTgtZDE5fSwgW3IyLCA6IDEyOF0hCisrCXZzaGwuaTMyCXExMCwgcTIsICM0CisrCXZsZDEuOAkJe2QyMi1kMjN9LCBbcjIsIDogMTI4XSEKKysJdmFkZC5pMzIJcTEwLCBxMTAsIHEyCisrCXZsZDEuOAkJe2QyNH0sIFtyMiwgOiA2NF0KKysJdmFkZC5pMzIJcTUsIHE1LCBxMAorKwlhZGQJCXIyLCByMywgIzE5MgorKwl2bGQxLjgJCXtkMjYtZDI3fSwgW3IyLCA6IDEyOF0hCisrCXZhZGQuaTMyCXE2LCBxNiwgcTMKKysJdmxkMS44CQl7ZDI4LWQyOX0sIFtyMiwgOiAxMjhdIQorKwl2YWRkLmkzMglxOCwgcTgsIHE0CisrCXZsZDEuOAkJe2QyNX0sIFtyMiwgOiA2NF0KKysJdmFkZC5pMzIJcTEwLCBxMTAsIHEyCisrCXZ0cm4uMzIJCXE5LCBxMTMKKysJdmFkZC5pMzIJcTcsIHE3LCBxMQorKwl2YWRkLmkzMglxNSwgcTUsIHEwCisrCXZ0cm4uMzIJCXExMSwgcTE0CisrCXZhZGQuaTMyCXE2LCBxNiwgcTMKKysJYWRkCQlyMiwgc3AsICM1NjAKKysJdmFkZC5pMzIJcTEwLCBxMTAsIHEyCisrCXZ0cm4uMzIJCWQyNCwgZDI1CisrCXZzdDEuOAkJe2QxMi1kMTN9LCBbcjIsIDogMTI4XQorKwl2c2hsLmkzMglxNiwgcTEzLCAjMQorKwlhZGQJCXIyLCBzcCwgIzU3NgorKwl2c3QxLjgJCXtkMjAtZDIxfSwgW3IyLCA6IDEyOF0KKysJdnNobC5pMzIJcTEwLCBxMTQsICMxCisrCWFkZAkJcjIsIHNwLCAjNTkyCisrCXZzdDEuOAkJe2QxMi1kMTN9LCBbcjIsIDogMTI4XQorKwl2c2hsLmkzMglxMTUsIHExMiwgIzEKKysJdmFkZC5pMzIJcTgsIHE4LCBxNAorKwl2ZXh0LjMyCQlkMTAsIGQzMSwgZDMwLCAjMAorKwl2YWRkLmkzMglxNywgcTcsIHExCisrCWFkZAkJcjIsIHNwLCAjNjA4CisrCXZzdDEuOAkJe2QxNi1kMTd9LCBbcjIsIDogMTI4XQorKwl2bXVsbC5zMzIJcTgsIGQxOCwgZDUKKysJdm1sYWwuczMyCXE4LCBkMjYsIGQ0CisrCXZtbGFsLnMzMglxOCwgZDE5LCBkOQorKwl2bWxhbC5zMzIJcTgsIGQyNywgZDMKKysJdm1sYWwuczMyCXE4LCBkMjIsIGQ4CisrCXZtbGFsLnMzMglxOCwgZDI4LCBkMgorKwl2bWxhbC5zMzIJcTgsIGQyMywgZDcKKysJdm1sYWwuczMyCXE4LCBkMjksIGQxCisrCXZtbGFsLnMzMglxOCwgZDI0LCBkNgorKwl2bWxhbC5zMzIJcTgsIGQyNSwgZDAKKysJYWRkCQlyMiwgc3AsICM2MjQKKysJdnN0MS44CQl7ZDE0LWQxNX0sIFtyMiwgOiAxMjhdCisrCXZtdWxsLnMzMglxMiwgZDE4LCBkNAorKwl2bWxhbC5zMzIJcTIsIGQxMiwgZDkKKysJdm1sYWwuczMyCXEyLCBkMTMsIGQ4CisrCXZtbGFsLnMzMglxMiwgZDE5LCBkMworKwl2bWxhbC5zMzIJcTIsIGQyMiwgZDIKKysJdm1sYWwuczMyCXEyLCBkMjMsIGQxCisrCXZtbGFsLnMzMglxMiwgZDI0LCBkMAorKwlhZGQJCXIyLCBzcCwgIzY0MAorKwl2c3QxLjgJCXtkMjAtZDIxfSwgW3IyLCA6IDEyOF0KKysJdm11bGwuczMyCXE3LCBkMTgsIGQ5CisrCXZtbGFsLnMzMglxNywgZDI2LCBkMworKwl2bWxhbC5zMzIJcTcsIGQxOSwgZDgKKysJdm1sYWwuczMyCXE3LCBkMjcsIGQyCisrCXZtbGFsLnMzMglxNywgZDIyLCBkNworKwl2bWxhbC5zMzIJcTcsIGQyOCwgZDEKKysJdm1sYWwuczMyCXE3LCBkMjMsIGQ2CisrCXZtbGFsLnMzMglxNywgZDI5LCBkMAorKwlhZGQJCXIyLCBzcCwgIzY1NgorKwl2c3QxLjgJCXtkMTAtZDExfSwgW3IyLCA6IDEyOF0KKysJdm11bGwuczMyCXE1LCBkMTgsIGQzCisrCXZtbGFsLnMzMglxNSwgZDE5LCBkMgorKwl2bWxhbC5zMzIJcTUsIGQyMiwgZDEKKysJdm1sYWwuczMyCXE1LCBkMjMsIGQwCisrCXZtbGFsLnMzMglxNSwgZDEyLCBkOAorKwlhZGQJCXIyLCBzcCwgIzY3MgorKwl2c3QxLjgJCXtkMTYtZDE3fSwgW3IyLCA6IDEyOF0KKysJdm11bGwuczMyCXE0LCBkMTgsIGQ4CisrCXZtbGFsLnMzMglxNCwgZDI2LCBkMgorKwl2bWxhbC5zMzIJcTQsIGQxOSwgZDcKKysJdm1sYWwuczMyCXE0LCBkMjcsIGQxCisrCXZtbGFsLnMzMglxNCwgZDIyLCBkNgorKwl2bWxhbC5zMzIJcTQsIGQyOCwgZDAKKysJdm11bGwuczMyCXE4LCBkMTgsIGQ3CisrCXZtbGFsLnMzMglxOCwgZDI2LCBkMQorKwl2bWxhbC5zMzIJcTgsIGQxOSwgZDYKKysJdm1sYWwuczMyCXE4LCBkMjcsIGQwCisrCWFkZAkJcjIsIHNwLCAjNTc2CisrCXZsZDEuOAkJe2QyMC1kMjF9LCBbcjIsIDogMTI4XQorKwl2bWxhbC5zMzIJcTcsIGQyNCwgZDIxCisrCXZtbGFsLnMzMglxNywgZDI1LCBkMjAKKysJdm1sYWwuczMyCXE0LCBkMjMsIGQyMQorKwl2bWxhbC5zMzIJcTQsIGQyOSwgZDIwCisrCXZtbGFsLnMzMglxOCwgZDIyLCBkMjEKKysJdm1sYWwuczMyCXE4LCBkMjgsIGQyMAorKwl2bWxhbC5zMzIJcTUsIGQyNCwgZDIwCisrCWFkZAkJcjIsIHNwLCAjNTc2CisrCXZzdDEuOAkJe2QxNC1kMTV9LCBbcjIsIDogMTI4XQorKwl2bXVsbC5zMzIJcTcsIGQxOCwgZDYKKysJdm1sYWwuczMyCXE3LCBkMjYsIGQwCisrCWFkZAkJcjIsIHNwLCAjNjU2CisrCXZsZDEuOAkJe2QzMC1kMzF9LCBbcjIsIDogMTI4XQorKwl2bWxhbC5zMzIJcTIsIGQzMCwgZDIxCisrCXZtbGFsLnMzMglxNywgZDE5LCBkMjEKKysJdm1sYWwuczMyCXE3LCBkMjcsIGQyMAorKwlhZGQJCXIyLCBzcCwgIzYyNAorKwl2bGQxLjgJCXtkMjYtZDI3fSwgW3IyLCA6IDEyOF0KKysJdm1sYWwuczMyCXE0LCBkMjUsIGQyNworKwl2bWxhbC5zMzIJcTgsIGQyOSwgZDI3CisrCXZtbGFsLnMzMglxOCwgZDI1LCBkMjYKKysJdm1sYWwuczMyCXE3LCBkMjgsIGQyNworKwl2bWxhbC5zMzIJcTcsIGQyOSwgZDI2CisrCWFkZAkJcjIsIHNwLCAjNjA4CisrCXZsZDEuOAkJe2QyOC1kMjl9LCBbcjIsIDogMTI4XQorKwl2bWxhbC5zMzIJcTQsIGQyNCwgZDI5CisrCXZtbGFsLnMzMglxOCwgZDIzLCBkMjkKKysJdm1sYWwuczMyCXE4LCBkMjQsIGQyOAorKwl2bWxhbC5zMzIJcTcsIGQyMiwgZDI5CisrCXZtbGFsLnMzMglxNywgZDIzLCBkMjgKKysJYWRkCQlyMiwgc3AsICM2MDgKKysJdnN0MS44CQl7ZDgtZDl9LCBbcjIsIDogMTI4XQorKwlhZGQJCXIyLCBzcCwgIzU2MAorKwl2bGQxLjgJCXtkOC1kOX0sIFtyMiwgOiAxMjhdCisrCXZtbGFsLnMzMglxNywgZDI0LCBkOQorKwl2bWxhbC5zMzIJcTcsIGQyNSwgZDMxCisrCXZtdWxsLnMzMglxMSwgZDE4LCBkMgorKwl2bWxhbC5zMzIJcTEsIGQxOSwgZDEKKysJdm1sYWwuczMyCXExLCBkMjIsIGQwCisrCXZtbGFsLnMzMglxMSwgZDI0LCBkMjcKKysJdm1sYWwuczMyCXExLCBkMjMsIGQyMAorKwl2bWxhbC5zMzIJcTEsIGQxMiwgZDcKKysJdm1sYWwuczMyCXExLCBkMTMsIGQ2CisrCXZtdWxsLnMzMglxNiwgZDE4LCBkMQorKwl2bWxhbC5zMzIJcTYsIGQxOSwgZDAKKysJdm1sYWwuczMyCXE2LCBkMjMsIGQyNworKwl2bWxhbC5zMzIJcTYsIGQyMiwgZDIwCisrCXZtbGFsLnMzMglxNiwgZDI0LCBkMjYKKysJdm11bGwuczMyCXEwLCBkMTgsIGQwCisrCXZtbGFsLnMzMglxMCwgZDIyLCBkMjcKKysJdm1sYWwuczMyCXEwLCBkMjMsIGQyNgorKwl2bWxhbC5zMzIJcTAsIGQyNCwgZDMxCisrCXZtbGFsLnMzMglxMCwgZDE5LCBkMjAKKysJYWRkCQlyMiwgc3AsICM2NDAKKysJdmxkMS44CQl7ZDE4LWQxOX0sIFtyMiwgOiAxMjhdCisrCXZtbGFsLnMzMglxMiwgZDE4LCBkNworKwl2bWxhbC5zMzIJcTIsIGQxOSwgZDYKKysJdm1sYWwuczMyCXE1LCBkMTgsIGQ2CisrCXZtbGFsLnMzMglxNSwgZDE5LCBkMjEKKysJdm1sYWwuczMyCXExLCBkMTgsIGQyMQorKwl2bWxhbC5zMzIJcTEsIGQxOSwgZDI5CisrCXZtbGFsLnMzMglxMCwgZDE4LCBkMjgKKysJdm1sYWwuczMyCXEwLCBkMTksIGQ5CisrCXZtbGFsLnMzMglxNiwgZDE4LCBkMjkKKysJdm1sYWwuczMyCXE2LCBkMTksIGQyOAorKwlhZGQJCXIyLCBzcCwgIzU5MgorKwl2bGQxLjgJCXtkMTgtZDE5fSwgW3IyLCA6IDEyOF0KKysJYWRkCQlyMiwgc3AsICM1MTIKKysJdmxkMS44CQl7ZDIyLWQyM30sIFtyMiwgOiAxMjhdCisrCXZtbGFsLnMzMglxNSwgZDE5LCBkNworKwl2bWxhbC5zMzIJcTAsIGQxOCwgZDIxCisrCXZtbGFsLnMzMglxMCwgZDE5LCBkMjkKKysJdm1sYWwuczMyCXE2LCBkMTgsIGQ2CisrCWFkZAkJcjIsIHNwLCAjNTI4CisrCXZsZDEuOAkJe2Q2LWQ3fSwgW3IyLCA6IDEyOF0KKysJdm1sYWwuczMyCXE2LCBkMTksIGQyMQorKwlhZGQJCXIyLCBzcCwgIzU3NgorKwl2bGQxLjgJCXtkMTgtZDE5fSwgW3IyLCA6IDEyOF0KKysJdm1sYWwuczMyCXEwLCBkMzAsIGQ4CisrCWFkZAkJcjIsIHNwLCAjNjcyCisrCXZsZDEuOAkJe2QyMC1kMjF9LCBbcjIsIDogMTI4XQorKwl2bWxhbC5zMzIJcTUsIGQzMCwgZDI5CisrCWFkZAkJcjIsIHNwLCAjNjA4CisrCXZsZDEuOAkJe2QyNC1kMjV9LCBbcjIsIDogMTI4XQorKwl2bWxhbC5zMzIJcTEsIGQzMCwgZDI4CisrCXZhZGQuaTY0CXExMywgcTAsIHExMQorKwl2YWRkLmk2NAlxMTQsIHE1LCBxMTEKKysJdm1sYWwuczMyCXE2LCBkMzAsIGQ5CisrCXZzaHIuczY0CXE0LCBxMTMsICMyNgorKwl2c2hyLnM2NAlxMTMsIHExNCwgIzI2CisrCXZhZGQuaTY0CXE3LCBxNywgcTQKKysJdnNobC5pNjQJcTQsIHE0LCAjMjYKKysJdmFkZC5pNjQJcTE0LCBxNywgcTMKKysJdmFkZC5pNjQJcTksIHE5LCBxMTMKKysJdnNobC5pNjQJcTEzLCBxMTMsICMyNgorKwl2YWRkLmk2NAlxMTUsIHE5LCBxMworKwl2c3ViLmk2NAlxMCwgcTAsIHE0CisrCXZzaHIuczY0CXE0LCBxMTQsICMyNQorKwl2c3ViLmk2NAlxNSwgcTUsIHExMworKwl2c2hyLnM2NAlxMTMsIHExNSwgIzI1CisrCXZhZGQuaTY0CXE2LCBxNiwgcTQKKysJdnNobC5pNjQJcTQsIHE0LCAjMjUKKysJdmFkZC5pNjQJcTE0LCBxNiwgcTExCisrCXZhZGQuaTY0CXEyLCBxMiwgcTEzCisrCXZzdWIuaTY0CXE0LCBxNywgcTQKKysJdnNoci5zNjQJcTcsIHExNCwgIzI2CisrCXZzaGwuaTY0CXExMywgcTEzLCAjMjUKKysJdmFkZC5pNjQJcTE0LCBxMiwgcTExCisrCXZhZGQuaTY0CXE4LCBxOCwgcTcKKysJdnNobC5pNjQJcTcsIHE3LCAjMjYKKysJdmFkZC5pNjQJcTE1LCBxOCwgcTMKKysJdnN1Yi5pNjQJcTksIHE5LCBxMTMKKysJdnNoci5zNjQJcTEzLCBxMTQsICMyNgorKwl2c3ViLmk2NAlxNiwgcTYsIHE3CisrCXZzaHIuczY0CXE3LCBxMTUsICMyNQorKwl2YWRkLmk2NAlxMTAsIHExMCwgcTEzCisrCXZzaGwuaTY0CXExMywgcTEzLCAjMjYKKysJdmFkZC5pNjQJcTE0LCBxMTAsIHEzCisrCXZhZGQuaTY0CXExLCBxMSwgcTcKKysJYWRkCQlyMiwgcjMsICMxNDQKKysJdnNobC5pNjQJcTcsIHE3LCAjMjUKKysJYWRkCQlyNCwgcjMsICM5NgorKwl2YWRkLmk2NAlxMTUsIHExLCBxMTEKKysJYWRkCQlyMiwgcjIsICM4CisrCXZzdWIuaTY0CXEyLCBxMiwgcTEzCisrCWFkZAkJcjQsIHI0LCAjOAorKwl2c2hyLnM2NAlxMTMsIHExNCwgIzI1CisrCXZzdWIuaTY0CXE3LCBxOCwgcTcKKysJdnNoci5zNjQJcTgsIHExNSwgIzI2CisrCXZhZGQuaTY0CXExNCwgcTEzLCBxMTMKKysJdmFkZC5pNjQJcTEyLCBxMTIsIHE4CisrCXZ0cm4uMzIJCWQxMiwgZDE0CisrCXZzaGwuaTY0CXE4LCBxOCwgIzI2CisrCXZ0cm4uMzIJCWQxMywgZDE1CisrCXZhZGQuaTY0CXEzLCBxMTIsIHEzCisrCXZhZGQuaTY0CXEwLCBxMCwgcTE0CisrCXZzdDEuOAkJZDEyLCBbcjIsIDogNjRdIQorKwl2c2hsLmk2NAlxNywgcTEzLCAjNAorKwl2c3QxLjgJCWQxMywgW3I0LCA6IDY0XSEKKysJdnN1Yi5pNjQJcTEsIHExLCBxOAorKwl2c2hyLnM2NAlxMywgcTMsICMyNQorKwl2YWRkLmk2NAlxMCwgcTAsIHE3CisrCXZhZGQuaTY0CXE1LCBxNSwgcTMKKysJdnNobC5pNjQJcTMsIHEzLCAjMjUKKysJdmFkZC5pNjQJcTYsIHE1LCBxMTEKKysJdmFkZC5pNjQJcTAsIHEwLCBxMTMKKysJdnNobC5pNjQJcTcsIHExMywgIzI1CisrCXZhZGQuaTY0CXE4LCBxMCwgcTExCisrCXZzdWIuaTY0CXEzLCBxMTIsIHEzCisrCXZzaHIuczY0CXE2LCBxNiwgIzI2CisrCXZzdWIuaTY0CXE3LCBxMTAsIHE3CisrCXZ0cm4uMzIJCWQyLCBkNgorKwl2c2hyLnM2NAlxOCwgcTgsICMyNgorKwl2dHJuLjMyCQlkMywgZDcKKysJdmFkZC5pNjQJcTMsIHE5LCBxNgorKwl2c3QxLjgJCWQyLCBbcjIsIDogNjRdCisrCXZzaGwuaTY0CXE2LCBxNiwgIzI2CisrCXZzdDEuOAkJZDMsIFtyNCwgOiA2NF0KKysJdmFkZC5pNjQJcTEsIHE0LCBxOAorKwl2dHJuLjMyCQlkNCwgZDE0CisrCXZzaGwuaTY0CXE0LCBxOCwgIzI2CisrCXZ0cm4uMzIJCWQ1LCBkMTUKKysJdnN1Yi5pNjQJcTUsIHE1LCBxNgorKwlhZGQJCXIyLCByMiwgIzE2CisrCXZzdWIuaTY0CXEwLCBxMCwgcTQKKysJdnN0MS44CQlkNCwgW3IyLCA6IDY0XQorKwlhZGQJCXI0LCByNCwgIzE2CisrCXZzdDEuOAkJZDUsIFtyNCwgOiA2NF0KKysJdnRybi4zMgkJZDEwLCBkNgorKwl2dHJuLjMyCQlkMTEsIGQ3CisrCXN1YgkJcjIsIHIyLCAjOAorKwlzdWIJCXI0LCByNCwgIzgKKysJdnRybi4zMgkJZDAsIGQyCisrCXZ0cm4uMzIJCWQxLCBkMworKwl2c3QxLjgJCWQxMCwgW3IyLCA6IDY0XQorKwl2c3QxLjgJCWQxMSwgW3I0LCA6IDY0XQorKwlzdWIJCXIyLCByMiwgIzI0CisrCXN1YgkJcjQsIHI0LCAjMjQKKysJdnN0MS44CQlkMCwgW3IyLCA6IDY0XQorKwl2c3QxLjgJCWQxLCBbcjQsIDogNjRdCisrCWFkZAkJcjIsIHIzLCAjMjg4CisrCWFkZAkJcjQsIHIzLCAjMzM2CisrCXZsZDEuOAkJe2QwLWQxfSwgW3IyLCA6IDEyOF0hCisrCXZsZDEuOAkJe2QyLWQzfSwgW3I0LCA6IDEyOF0hCisrCXZzdWIuaTMyCXEwLCBxMCwgcTEKKysJdmxkMS44CQl7ZDItZDN9LCBbcjIsIDogMTI4XSEKKysJdmxkMS44CQl7ZDQtZDV9LCBbcjQsIDogMTI4XSEKKysJdnN1Yi5pMzIJcTEsIHExLCBxMgorKwlhZGQJCXI1LCByMywgIzI0MAorKwl2bGQxLjgJCXtkNH0sIFtyMiwgOiA2NF0KKysJdmxkMS44CQl7ZDZ9LCBbcjQsIDogNjRdCisrCXZzdWIuaTMyCXEyLCBxMiwgcTMKKysJdnN0MS44CQl7ZDAtZDF9LCBbcjUsIDogMTI4XSEKKysJdnN0MS44CQl7ZDItZDN9LCBbcjUsIDogMTI4XSEKKysJdnN0MS44CQlkNCwgW3I1LCA6IDY0XQorKwlhZGQJCXIyLCByMywgIzE0NAorKwlhZGQJCXI0LCByMywgIzk2CisrCWFkZAkJcjUsIHIzLCAjMTQ0CisrCWFkZAkJcjYsIHIzLCAjMTkyCisrCXZsZDEuOAkJe2QwLWQxfSwgW3IyLCA6IDEyOF0hCisrCXZsZDEuOAkJe2QyLWQzfSwgW3I0LCA6IDEyOF0hCisrCXZzdWIuaTMyCXEyLCBxMCwgcTEKKysJdmFkZC5pMzIJcTAsIHEwLCBxMQorKwl2bGQxLjgJCXtkMi1kM30sIFtyMiwgOiAxMjhdIQorKwl2bGQxLjgJCXtkNi1kN30sIFtyNCwgOiAxMjhdIQorKwl2c3ViLmkzMglxNCwgcTEsIHEzCisrCXZhZGQuaTMyCXExLCBxMSwgcTMKKysJdmxkMS44CQl7ZDZ9LCBbcjIsIDogNjRdCisrCXZsZDEuOAkJe2QxMH0sIFtyNCwgOiA2NF0KKysJdnN1Yi5pMzIJcTYsIHEzLCBxNQorKwl2YWRkLmkzMglxMywgcTMsIHE1CisrCXZzdDEuOAkJe2Q0LWQ1fSwgW3I1LCA6IDEyOF0hCisrCXZzdDEuOAkJe2QwLWQxfSwgW3I2LCA6IDEyOF0hCisrCXZzdDEuOAkJe2Q4LWQ5fSwgW3I1LCA6IDEyOF0hCisrCXZzdDEuOAkJe2QyLWQzfSwgW3I2LCA6IDEyOF0hCisrCXZzdDEuOAkJZDEyLCBbcjUsIDogNjRdCisrCXZzdDEuOAkJZDYsIFtyNiwgOiA2NF0KKysJYWRkCQlyMiwgcjMsICMwCisrCWFkZAkJcjQsIHIzLCAjMjQwCisrCXZsZDEuOAkJe2QwLWQxfSwgW3I0LCA6IDEyOF0hCisrCXZsZDEuOAkJe2QyLWQzfSwgW3I0LCA6IDEyOF0hCisrCXZsZDEuOAkJe2Q0fSwgW3I0LCA6IDY0XQorKwlhZGQJCXI0LCByMywgIzMzNgorKwl2bGQxLjgJCXtkNi1kN30sIFtyNCwgOiAxMjhdIQorKwl2dHJuLjMyCQlxMCwgcTMKKysJdmxkMS44CQl7ZDgtZDl9LCBbcjQsIDogMTI4XSEKKysJdnNobC5pMzIJcTUsIHEwLCAjNAorKwl2dHJuLjMyCQlxMSwgcTQKKysJdnNobC5pMzIJcTYsIHEzLCAjNAorKwl2YWRkLmkzMglxNSwgcTUsIHEwCisrCXZhZGQuaTMyCXE2LCBxNiwgcTMKKysJdnNobC5pMzIJcTcsIHExLCAjNAorKwl2bGQxLjgJCXtkNX0sIFtyNCwgOiA2NF0KKysJdnNobC5pMzIJcTgsIHE0LCAjNAorKwl2dHJuLjMyCQlkNCwgZDUKKysJdmFkZC5pMzIJcTcsIHE3LCBxMQorKwl2YWRkLmkzMglxOCwgcTgsIHE0CisrCXZsZDEuOAkJe2QxOC1kMTl9LCBbcjIsIDogMTI4XSEKKysJdnNobC5pMzIJcTEwLCBxMiwgIzQKKysJdmxkMS44CQl7ZDIyLWQyM30sIFtyMiwgOiAxMjhdIQorKwl2YWRkLmkzMglxMTAsIHExMCwgcTIKKysJdmxkMS44CQl7ZDI0fSwgW3IyLCA6IDY0XQorKwl2YWRkLmkzMglxNSwgcTUsIHEwCisrCWFkZAkJcjIsIHIzLCAjMjg4CisrCXZsZDEuOAkJe2QyNi1kMjd9LCBbcjIsIDogMTI4XSEKKysJdmFkZC5pMzIJcTYsIHE2LCBxMworKwl2bGQxLjgJCXtkMjgtZDI5fSwgW3IyLCA6IDEyOF0hCisrCXZhZGQuaTMyCXE4LCBxOCwgcTQKKysJdmxkMS44CQl7ZDI1fSwgW3IyLCA6IDY0XQorKwl2YWRkLmkzMglxMTAsIHExMCwgcTIKKysJdnRybi4zMgkJcTksIHExMworKwl2YWRkLmkzMglxNywgcTcsIHExCisrCXZhZGQuaTMyCXE1LCBxNSwgcTAKKysJdnRybi4zMgkJcTExLCBxMTQKKysJdmFkZC5pMzIJcTYsIHE2LCBxMworKwlhZGQJCXIyLCBzcCwgIzU2MAorKwl2YWRkLmkzMglxMTAsIHExMCwgcTIKKysJdnRybi4zMgkJZDI0LCBkMjUKKysJdnN0MS44CQl7ZDEyLWQxM30sIFtyMiwgOiAxMjhdCisrCXZzaGwuaTMyCXE2LCBxMTMsICMxCisrCWFkZAkJcjIsIHNwLCAjNTc2CisrCXZzdDEuOAkJe2QyMC1kMjF9LCBbcjIsIDogMTI4XQorKwl2c2hsLmkzMglxMTAsIHExNCwgIzEKKysJYWRkCQlyMiwgc3AsICM1OTIKKysJdnN0MS44CQl7ZDEyLWQxM30sIFtyMiwgOiAxMjhdCisrCXZzaGwuaTMyCXExNSwgcTEyLCAjMQorKwl2YWRkLmkzMglxOCwgcTgsIHE0CisrCXZleHQuMzIJCWQxMCwgZDMxLCBkMzAsICMwCisrCXZhZGQuaTMyCXE3LCBxNywgcTEKKysJYWRkCQlyMiwgc3AsICM2MDgKKysJdnN0MS44CQl7ZDE2LWQxN30sIFtyMiwgOiAxMjhdCisrCXZtdWxsLnMzMglxOCwgZDE4LCBkNQorKwl2bWxhbC5zMzIJcTgsIGQyNiwgZDQKKysJdm1sYWwuczMyCXE4LCBkMTksIGQ5CisrCXZtbGFsLnMzMglxOCwgZDI3LCBkMworKwl2bWxhbC5zMzIJcTgsIGQyMiwgZDgKKysJdm1sYWwuczMyCXE4LCBkMjgsIGQyCisrCXZtbGFsLnMzMglxOCwgZDIzLCBkNworKwl2bWxhbC5zMzIJcTgsIGQyOSwgZDEKKysJdm1sYWwuczMyCXE4LCBkMjQsIGQ2CisrCXZtbGFsLnMzMglxOCwgZDI1LCBkMAorKwlhZGQJCXIyLCBzcCwgIzYyNAorKwl2c3QxLjgJCXtkMTQtZDE1fSwgW3IyLCA6IDEyOF0KKysJdm11bGwuczMyCXEyLCBkMTgsIGQ0CisrCXZtbGFsLnMzMglxMiwgZDEyLCBkOQorKwl2bWxhbC5zMzIJcTIsIGQxMywgZDgKKysJdm1sYWwuczMyCXEyLCBkMTksIGQzCisrCXZtbGFsLnMzMglxMiwgZDIyLCBkMgorKwl2bWxhbC5zMzIJcTIsIGQyMywgZDEKKysJdm1sYWwuczMyCXEyLCBkMjQsIGQwCisrCWFkZAkJcjIsIHNwLCAjNjQwCisrCXZzdDEuOAkJe2QyMC1kMjF9LCBbcjIsIDogMTI4XQorKwl2bXVsbC5zMzIJcTcsIGQxOCwgZDkKKysJdm1sYWwuczMyCXE3LCBkMjYsIGQzCisrCXZtbGFsLnMzMglxNywgZDE5LCBkOAorKwl2bWxhbC5zMzIJcTcsIGQyNywgZDIKKysJdm1sYWwuczMyCXE3LCBkMjIsIGQ3CisrCXZtbGFsLnMzMglxNywgZDI4LCBkMQorKwl2bWxhbC5zMzIJcTcsIGQyMywgZDYKKysJdm1sYWwuczMyCXE3LCBkMjksIGQwCisrCWFkZAkJcjIsIHNwLCAjNjU2CisrCXZzdDEuOAkJe2QxMC1kMTF9LCBbcjIsIDogMTI4XQorKwl2bXVsbC5zMzIJcTUsIGQxOCwgZDMKKysJdm1sYWwuczMyCXE1LCBkMTksIGQyCisrCXZtbGFsLnMzMglxNSwgZDIyLCBkMQorKwl2bWxhbC5zMzIJcTUsIGQyMywgZDAKKysJdm1sYWwuczMyCXE1LCBkMTIsIGQ4CisrCWFkZAkJcjIsIHNwLCAjNjcyCisrCXZzdDEuOAkJe2QxNi1kMTd9LCBbcjIsIDogMTI4XQorKwl2bXVsbC5zMzIJcTQsIGQxOCwgZDgKKysJdm1sYWwuczMyCXE0LCBkMjYsIGQyCisrCXZtbGFsLnMzMglxNCwgZDE5LCBkNworKwl2bWxhbC5zMzIJcTQsIGQyNywgZDEKKysJdm1sYWwuczMyCXE0LCBkMjIsIGQ2CisrCXZtbGFsLnMzMglxNCwgZDI4LCBkMAorKwl2bXVsbC5zMzIJcTgsIGQxOCwgZDcKKysJdm1sYWwuczMyCXE4LCBkMjYsIGQxCisrCXZtbGFsLnMzMglxOCwgZDE5LCBkNgorKwl2bWxhbC5zMzIJcTgsIGQyNywgZDAKKysJYWRkCQlyMiwgc3AsICM1NzYKKysJdmxkMS44CQl7ZDIwLWQyMX0sIFtyMiwgOiAxMjhdCisrCXZtbGFsLnMzMglxNywgZDI0LCBkMjEKKysJdm1sYWwuczMyCXE3LCBkMjUsIGQyMAorKwl2bWxhbC5zMzIJcTQsIGQyMywgZDIxCisrCXZtbGFsLnMzMglxNCwgZDI5LCBkMjAKKysJdm1sYWwuczMyCXE4LCBkMjIsIGQyMQorKwl2bWxhbC5zMzIJcTgsIGQyOCwgZDIwCisrCXZtbGFsLnMzMglxNSwgZDI0LCBkMjAKKysJYWRkCQlyMiwgc3AsICM1NzYKKysJdnN0MS44CQl7ZDE0LWQxNX0sIFtyMiwgOiAxMjhdCisrCXZtdWxsLnMzMglxNywgZDE4LCBkNgorKwl2bWxhbC5zMzIJcTcsIGQyNiwgZDAKKysJYWRkCQlyMiwgc3AsICM2NTYKKysJdmxkMS44CQl7ZDMwLWQzMX0sIFtyMiwgOiAxMjhdCisrCXZtbGFsLnMzMglxMiwgZDMwLCBkMjEKKysJdm1sYWwuczMyCXE3LCBkMTksIGQyMQorKwl2bWxhbC5zMzIJcTcsIGQyNywgZDIwCisrCWFkZAkJcjIsIHNwLCAjNjI0CisrCXZsZDEuOAkJe2QyNi1kMjd9LCBbcjIsIDogMTI4XQorKwl2bWxhbC5zMzIJcTQsIGQyNSwgZDI3CisrCXZtbGFsLnMzMglxOCwgZDI5LCBkMjcKKysJdm1sYWwuczMyCXE4LCBkMjUsIGQyNgorKwl2bWxhbC5zMzIJcTcsIGQyOCwgZDI3CisrCXZtbGFsLnMzMglxNywgZDI5LCBkMjYKKysJYWRkCQlyMiwgc3AsICM2MDgKKysJdmxkMS44CQl7ZDI4LWQyOX0sIFtyMiwgOiAxMjhdCisrCXZtbGFsLnMzMglxNCwgZDI0LCBkMjkKKysJdm1sYWwuczMyCXE4LCBkMjMsIGQyOQorKwl2bWxhbC5zMzIJcTgsIGQyNCwgZDI4CisrCXZtbGFsLnMzMglxNywgZDIyLCBkMjkKKysJdm1sYWwuczMyCXE3LCBkMjMsIGQyOAorKwlhZGQJCXIyLCBzcCwgIzYwOAorKwl2c3QxLjgJCXtkOC1kOX0sIFtyMiwgOiAxMjhdCisrCWFkZAkJcjIsIHNwLCAjNTYwCisrCXZsZDEuOAkJe2Q4LWQ5fSwgW3IyLCA6IDEyOF0KKysJdm1sYWwuczMyCXE3LCBkMjQsIGQ5CisrCXZtbGFsLnMzMglxNywgZDI1LCBkMzEKKysJdm11bGwuczMyCXExLCBkMTgsIGQyCisrCXZtbGFsLnMzMglxMSwgZDE5LCBkMQorKwl2bWxhbC5zMzIJcTEsIGQyMiwgZDAKKysJdm1sYWwuczMyCXExLCBkMjQsIGQyNworKwl2bWxhbC5zMzIJcTEsIGQyMywgZDIwCisrCXZtbGFsLnMzMglxMSwgZDEyLCBkNworKwl2bWxhbC5zMzIJcTEsIGQxMywgZDYKKysJdm11bGwuczMyCXE2LCBkMTgsIGQxCisrCXZtbGFsLnMzMglxNiwgZDE5LCBkMAorKwl2bWxhbC5zMzIJcTYsIGQyMywgZDI3CisrCXZtbGFsLnMzMglxNiwgZDIyLCBkMjAKKysJdm1sYWwuczMyCXE2LCBkMjQsIGQyNgorKwl2bXVsbC5zMzIJcTAsIGQxOCwgZDAKKysJdm1sYWwuczMyCXEwLCBkMjIsIGQyNworKwl2bWxhbC5zMzIJcTAsIGQyMywgZDI2CisrCXZtbGFsLnMzMglxMCwgZDI0LCBkMzEKKysJdm1sYWwuczMyCXEwLCBkMTksIGQyMAorKwlhZGQJCXIyLCBzcCwgIzY0MAorKwl2bGQxLjgJCXtkMTgtZDE5fSwgW3IyLCA6IDEyOF0KKysJdm1sYWwuczMyCXEyLCBkMTgsIGQ3CisrCXZtbGFsLnMzMglxMiwgZDE5LCBkNgorKwl2bWxhbC5zMzIJcTUsIGQxOCwgZDYKKysJdm1sYWwuczMyCXE1LCBkMTksIGQyMQorKwl2bWxhbC5zMzIJcTEsIGQxOCwgZDIxCisrCXZtbGFsLnMzMglxMSwgZDE5LCBkMjkKKysJdm1sYWwuczMyCXEwLCBkMTgsIGQyOAorKwl2bWxhbC5zMzIJcTAsIGQxOSwgZDkKKysJdm1sYWwuczMyCXE2LCBkMTgsIGQyOQorKwl2bWxhbC5zMzIJcTYsIGQxOSwgZDI4CisrCWFkZAkJcjIsIHNwLCAjNTkyCisrCXZsZDEuOAkJe2QxOC1kMTl9LCBbcjIsIDogMTI4XQorKwlhZGQJCXIyLCBzcCwgIzUxMgorKwl2bGQxLjgJCXtkMjItZDIzfSwgW3IyLCA6IDEyOF0KKysJdm1sYWwuczMyCXE1LCBkMTksIGQ3CisrCXZtbGFsLnMzMglxMCwgZDE4LCBkMjEKKysJdm1sYWwuczMyCXEwLCBkMTksIGQyOQorKwl2bWxhbC5zMzIJcTYsIGQxOCwgZDYKKysJYWRkCQlyMiwgc3AsICM1MjgKKysJdmxkMS44CQl7ZDYtZDd9LCBbcjIsIDogMTI4XQorKwl2bWxhbC5zMzIJcTYsIGQxOSwgZDIxCisrCWFkZAkJcjIsIHNwLCAjNTc2CisrCXZsZDEuOAkJe2QxOC1kMTl9LCBbcjIsIDogMTI4XQorKwl2bWxhbC5zMzIJcTAsIGQzMCwgZDgKKysJYWRkCQlyMiwgc3AsICM2NzIKKysJdmxkMS44CQl7ZDIwLWQyMX0sIFtyMiwgOiAxMjhdCisrCXZtbGFsLnMzMglxNSwgZDMwLCBkMjkKKysJYWRkCQlyMiwgc3AsICM2MDgKKysJdmxkMS44CQl7ZDI0LWQyNX0sIFtyMiwgOiAxMjhdCisrCXZtbGFsLnMzMglxMSwgZDMwLCBkMjgKKysJdmFkZC5pNjQJcTEzLCBxMCwgcTExCisrCXZhZGQuaTY0CXExNCwgcTUsIHExMQorKwl2bWxhbC5zMzIJcTYsIGQzMCwgZDkKKysJdnNoci5zNjQJcTQsIHExMywgIzI2CisrCXZzaHIuczY0CXExMywgcTE0LCAjMjYKKysJdmFkZC5pNjQJcTcsIHE3LCBxNAorKwl2c2hsLmk2NAlxNCwgcTQsICMyNgorKwl2YWRkLmk2NAlxMTQsIHE3LCBxMworKwl2YWRkLmk2NAlxOSwgcTksIHExMworKwl2c2hsLmk2NAlxMTMsIHExMywgIzI2CisrCXZhZGQuaTY0CXExNSwgcTksIHEzCisrCXZzdWIuaTY0CXEwLCBxMCwgcTQKKysJdnNoci5zNjQJcTQsIHExNCwgIzI1CisrCXZzdWIuaTY0CXE1LCBxNSwgcTEzCisrCXZzaHIuczY0CXExMywgcTE1LCAjMjUKKysJdmFkZC5pNjQJcTYsIHE2LCBxNAorKwl2c2hsLmk2NAlxNCwgcTQsICMyNQorKwl2YWRkLmk2NAlxMTQsIHE2LCBxMTEKKysJdmFkZC5pNjQJcTIsIHEyLCBxMTMKKysJdnN1Yi5pNjQJcTQsIHE3LCBxNAorKwl2c2hyLnM2NAlxNywgcTE0LCAjMjYKKysJdnNobC5pNjQJcTEzLCBxMTMsICMyNQorKwl2YWRkLmk2NAlxMTQsIHEyLCBxMTEKKysJdmFkZC5pNjQJcTgsIHE4LCBxNworKwl2c2hsLmk2NAlxNywgcTcsICMyNgorKwl2YWRkLmk2NAlxMTUsIHE4LCBxMworKwl2c3ViLmk2NAlxOSwgcTksIHExMworKwl2c2hyLnM2NAlxMTMsIHExNCwgIzI2CisrCXZzdWIuaTY0CXE2LCBxNiwgcTcKKysJdnNoci5zNjQJcTcsIHExNSwgIzI1CisrCXZhZGQuaTY0CXExMCwgcTEwLCBxMTMKKysJdnNobC5pNjQJcTEzLCBxMTMsICMyNgorKwl2YWRkLmk2NAlxMTQsIHExMCwgcTMKKysJdmFkZC5pNjQJcTEsIHExLCBxNworKwlhZGQJCXIyLCByMywgIzI4OAorKwl2c2hsLmk2NAlxNywgcTcsICMyNQorKwlhZGQJCXI0LCByMywgIzk2CisrCXZhZGQuaTY0CXExNSwgcTEsIHExMQorKwlhZGQJCXIyLCByMiwgIzgKKysJdnN1Yi5pNjQJcTIsIHEyLCBxMTMKKysJYWRkCQlyNCwgcjQsICM4CisrCXZzaHIuczY0CXExMywgcTE0LCAjMjUKKysJdnN1Yi5pNjQJcTcsIHE4LCBxNworKwl2c2hyLnM2NAlxOCwgcTE1LCAjMjYKKysJdmFkZC5pNjQJcTE0LCBxMTMsIHExMworKwl2YWRkLmk2NAlxMTIsIHExMiwgcTgKKysJdnRybi4zMgkJZDEyLCBkMTQKKysJdnNobC5pNjQJcTgsIHE4LCAjMjYKKysJdnRybi4zMgkJZDEzLCBkMTUKKysJdmFkZC5pNjQJcTMsIHExMiwgcTMKKysJdmFkZC5pNjQJcTAsIHEwLCBxMTQKKysJdnN0MS44CQlkMTIsIFtyMiwgOiA2NF0hCisrCXZzaGwuaTY0CXE3LCBxMTMsICM0CisrCXZzdDEuOAkJZDEzLCBbcjQsIDogNjRdIQorKwl2c3ViLmk2NAlxMSwgcTEsIHE4CisrCXZzaHIuczY0CXEzLCBxMywgIzI1CisrCXZhZGQuaTY0CXEwLCBxMCwgcTcKKysJdmFkZC5pNjQJcTUsIHE1LCBxMworKwl2c2hsLmk2NAlxMywgcTMsICMyNQorKwl2YWRkLmk2NAlxNiwgcTUsIHExMQorKwl2YWRkLmk2NAlxMCwgcTAsIHExMworKwl2c2hsLmk2NAlxNywgcTEzLCAjMjUKKysJdmFkZC5pNjQJcTgsIHEwLCBxMTEKKysJdnN1Yi5pNjQJcTMsIHExMiwgcTMKKysJdnNoci5zNjQJcTYsIHE2LCAjMjYKKysJdnN1Yi5pNjQJcTcsIHExMCwgcTcKKysJdnRybi4zMgkJZDIsIGQ2CisrCXZzaHIuczY0CXE4LCBxOCwgIzI2CisrCXZ0cm4uMzIJCWQzLCBkNworKwl2YWRkLmk2NAlxMywgcTksIHE2CisrCXZzdDEuOAkJZDIsIFtyMiwgOiA2NF0KKysJdnNobC5pNjQJcTYsIHE2LCAjMjYKKysJdnN0MS44CQlkMywgW3I0LCA6IDY0XQorKwl2YWRkLmk2NAlxMSwgcTQsIHE4CisrCXZ0cm4uMzIJCWQ0LCBkMTQKKysJdnNobC5pNjQJcTQsIHE4LCAjMjYKKysJdnRybi4zMgkJZDUsIGQxNQorKwl2c3ViLmk2NAlxNSwgcTUsIHE2CisrCWFkZAkJcjIsIHIyLCAjMTYKKysJdnN1Yi5pNjQJcTAsIHEwLCBxNAorKwl2c3QxLjgJCWQ0LCBbcjIsIDogNjRdCisrCWFkZAkJcjQsIHI0LCAjMTYKKysJdnN0MS44CQlkNSwgW3I0LCA6IDY0XQorKwl2dHJuLjMyCQlkMTAsIGQ2CisrCXZ0cm4uMzIJCWQxMSwgZDcKKysJc3ViCQlyMiwgcjIsICM4CisrCXN1YgkJcjQsIHI0LCAjOAorKwl2dHJuLjMyCQlkMCwgZDIKKysJdnRybi4zMgkJZDEsIGQzCisrCXZzdDEuOAkJZDEwLCBbcjIsIDogNjRdCisrCXZzdDEuOAkJZDExLCBbcjQsIDogNjRdCisrCXN1YgkJcjIsIHIyLCAjMjQKKysJc3ViCQlyNCwgcjQsICMyNAorKwl2c3QxLjgJCWQwLCBbcjIsIDogNjRdCisrCXZzdDEuOAkJZDEsIFtyNCwgOiA2NF0KKysJYWRkCQlyMiwgc3AsICM1NDQKKysJYWRkCQlyNCwgcjMsICMxNDQKKysJYWRkCQlyNSwgcjMsICMxOTIKKysJdmxkMS44CQl7ZDAtZDF9LCBbcjIsIDogMTI4XQorKwl2bGQxLjgJCXtkMi1kM30sIFtyNCwgOiAxMjhdIQorKwl2bGQxLjgJCXtkNC1kNX0sIFtyNSwgOiAxMjhdIQorKwl2emlwLmkzMglxMSwgcTIKKysJdmxkMS44CQl7ZDYtZDd9LCBbcjQsIDogMTI4XSEKKysJdmxkMS44CQl7ZDgtZDl9LCBbcjUsIDogMTI4XSEKKysJdnNobC5pMzIJcTUsIHExLCAjMQorKwl2emlwLmkzMglxMywgcTQKKysJdnNobC5pMzIJcTYsIHEyLCAjMQorKwl2bGQxLjgJCXtkMTR9LCBbcjQsIDogNjRdCisrCXZzaGwuaTMyCXE4LCBxMywgIzEKKysJdmxkMS44CQl7ZDE1fSwgW3I1LCA6IDY0XQorKwl2c2hsLmkzMglxOSwgcTQsICMxCisrCXZtdWwuaTMyCWQyMSwgZDcsIGQxCisrCXZ0cm4uMzIJCWQxNCwgZDE1CisrCXZtdWwuaTMyCXExMSwgcTQsIHEwCisrCXZtdWwuaTMyCXEwLCBxNywgcTAKKysJdm11bGwuczMyCXExMiwgZDIsIGQyCisrCXZtbGFsLnMzMglxMTIsIGQxMSwgZDEKKysJdm1sYWwuczMyCXExMiwgZDEyLCBkMAorKwl2bWxhbC5zMzIJcTEyLCBkMTMsIGQyMworKwl2bWxhbC5zMzIJcTEyLCBkMTYsIGQyMgorKwl2bWxhbC5zMzIJcTEyLCBkNywgZDIxCisrCXZtdWxsLnMzMglxMTAsIGQyLCBkMTEKKysJdm1sYWwuczMyCXExMCwgZDQsIGQxCisrCXZtbGFsLnMzMglxMTAsIGQxMywgZDAKKysJdm1sYWwuczMyCXExMCwgZDYsIGQyMworKwl2bWxhbC5zMzIJcTEwLCBkMTcsIGQyMgorKwl2bXVsbC5zMzIJcTEzLCBkMTAsIGQ0CisrCXZtbGFsLnMzMglxMTMsIGQxMSwgZDMKKysJdm1sYWwuczMyCXExMywgZDEzLCBkMQorKwl2bWxhbC5zMzIJcTEzLCBkMTYsIGQwCisrCXZtbGFsLnMzMglxMTMsIGQxNywgZDIzCisrCXZtbGFsLnMzMglxMTMsIGQ4LCBkMjIKKysJdm11bGwuczMyCXExLCBkMTAsIGQ1CisrCXZtbGFsLnMzMglxMSwgZDExLCBkNAorKwl2bWxhbC5zMzIJcTEsIGQ2LCBkMQorKwl2bWxhbC5zMzIJcTEsIGQxNywgZDAKKysJdm1sYWwuczMyCXExLCBkOCwgZDIzCisrCXZtdWxsLnMzMglxMTQsIGQxMCwgZDYKKysJdm1sYWwuczMyCXExNCwgZDExLCBkMTMKKysJdm1sYWwuczMyCXExNCwgZDQsIGQ0CisrCXZtbGFsLnMzMglxMTQsIGQxNywgZDEKKysJdm1sYWwuczMyCXExNCwgZDE4LCBkMAorKwl2bWxhbC5zMzIJcTE0LCBkOSwgZDIzCisrCXZtdWxsLnMzMglxMTEsIGQxMCwgZDcKKysJdm1sYWwuczMyCXExMSwgZDExLCBkNgorKwl2bWxhbC5zMzIJcTExLCBkMTIsIGQ1CisrCXZtbGFsLnMzMglxMTEsIGQ4LCBkMQorKwl2bWxhbC5zMzIJcTExLCBkMTksIGQwCisrCXZtdWxsLnMzMglxMTUsIGQxMCwgZDgKKysJdm1sYWwuczMyCXExNSwgZDExLCBkMTcKKysJdm1sYWwuczMyCXExNSwgZDEyLCBkNgorKwl2bWxhbC5zMzIJcTE1LCBkMTMsIGQ1CisrCXZtbGFsLnMzMglxMTUsIGQxOSwgZDEKKysJdm1sYWwuczMyCXExNSwgZDE0LCBkMAorKwl2bXVsbC5zMzIJcTIsIGQxMCwgZDkKKysJdm1sYWwuczMyCXEyLCBkMTEsIGQ4CisrCXZtbGFsLnMzMglxMiwgZDEyLCBkNworKwl2bWxhbC5zMzIJcTIsIGQxMywgZDYKKysJdm1sYWwuczMyCXEyLCBkMTQsIGQxCisrCXZtdWxsLnMzMglxMCwgZDE1LCBkMQorKwl2bWxhbC5zMzIJcTAsIGQxMCwgZDE0CisrCXZtbGFsLnMzMglxMCwgZDExLCBkMTkKKysJdm1sYWwuczMyCXEwLCBkMTIsIGQ4CisrCXZtbGFsLnMzMglxMCwgZDEzLCBkMTcKKysJdm1sYWwuczMyCXEwLCBkNiwgZDYKKysJYWRkCQlyMiwgc3AsICM1MTIKKysJdmxkMS44CQl7ZDE4LWQxOX0sIFtyMiwgOiAxMjhdCisrCXZtdWxsLnMzMglxMywgZDE2LCBkNworKwl2bWxhbC5zMzIJcTMsIGQxMCwgZDE1CisrCXZtbGFsLnMzMglxMywgZDExLCBkMTQKKysJdm1sYWwuczMyCXEzLCBkMTIsIGQ5CisrCXZtbGFsLnMzMglxMywgZDEzLCBkOAorKwlhZGQJCXIyLCBzcCwgIzUyOAorKwl2bGQxLjgJCXtkOC1kOX0sIFtyMiwgOiAxMjhdCisrCXZhZGQuaTY0CXE1LCBxMTIsIHE5CisrCXZhZGQuaTY0CXE2LCBxMTUsIHE5CisrCXZzaHIuczY0CXE1LCBxNSwgIzI2CisrCXZzaHIuczY0CXE2LCBxNiwgIzI2CisrCXZhZGQuaTY0CXE3LCBxMTAsIHE1CisrCXZzaGwuaTY0CXE1LCBxNSwgIzI2CisrCXZhZGQuaTY0CXE4LCBxNywgcTQKKysJdmFkZC5pNjQJcTIsIHEyLCBxNgorKwl2c2hsLmk2NAlxNiwgcTYsICMyNgorKwl2YWRkLmk2NAlxMTAsIHEyLCBxNAorKwl2c3ViLmk2NAlxNSwgcTEyLCBxNQorKwl2c2hyLnM2NAlxOCwgcTgsICMyNQorKwl2c3ViLmk2NAlxNiwgcTE1LCBxNgorKwl2c2hyLnM2NAlxMTAsIHExMCwgIzI1CisrCXZhZGQuaTY0CXExMiwgcTEzLCBxOAorKwl2c2hsLmk2NAlxOCwgcTgsICMyNQorKwl2YWRkLmk2NAlxMTMsIHExMiwgcTkKKysJdmFkZC5pNjQJcTAsIHEwLCBxMTAKKysJdnN1Yi5pNjQJcTcsIHE3LCBxOAorKwl2c2hyLnM2NAlxOCwgcTEzLCAjMjYKKysJdnNobC5pNjQJcTEwLCBxMTAsICMyNQorKwl2YWRkLmk2NAlxMTMsIHEwLCBxOQorKwl2YWRkLmk2NAlxMSwgcTEsIHE4CisrCXZzaGwuaTY0CXE4LCBxOCwgIzI2CisrCXZhZGQuaTY0CXExNSwgcTEsIHE0CisrCXZzdWIuaTY0CXEyLCBxMiwgcTEwCisrCXZzaHIuczY0CXExMCwgcTEzLCAjMjYKKysJdnN1Yi5pNjQJcTgsIHExMiwgcTgKKysJdnNoci5zNjQJcTEyLCBxMTUsICMyNQorKwl2YWRkLmk2NAlxMywgcTMsIHExMAorKwl2c2hsLmk2NAlxMTAsIHExMCwgIzI2CisrCXZhZGQuaTY0CXExMywgcTMsIHE0CisrCXZhZGQuaTY0CXExNCwgcTE0LCBxMTIKKysJYWRkCQlyMiwgcjMsICMxNDQKKysJdnNobC5pNjQJcTEyLCBxMTIsICMyNQorKwlhZGQJCXI0LCByMywgIzE5MgorKwl2YWRkLmk2NAlxMTUsIHExNCwgcTkKKysJYWRkCQlyMiwgcjIsICM4CisrCXZzdWIuaTY0CXEwLCBxMCwgcTEwCisrCWFkZAkJcjQsIHI0LCAjOAorKwl2c2hyLnM2NAlxMTAsIHExMywgIzI1CisrCXZzdWIuaTY0CXExLCBxMSwgcTEyCisrCXZzaHIuczY0CXExMiwgcTE1LCAjMjYKKysJdmFkZC5pNjQJcTEzLCBxMTAsIHExMAorKwl2YWRkLmk2NAlxMTEsIHExMSwgcTEyCisrCXZ0cm4uMzIJCWQxNiwgZDIKKysJdnNobC5pNjQJcTEyLCBxMTIsICMyNgorKwl2dHJuLjMyCQlkMTcsIGQzCisrCXZhZGQuaTY0CXExLCBxMTEsIHE0CisrCXZhZGQuaTY0CXE0LCBxNSwgcTEzCisrCXZzdDEuOAkJZDE2LCBbcjIsIDogNjRdIQorKwl2c2hsLmk2NAlxNSwgcTEwLCAjNAorKwl2c3QxLjgJCWQxNywgW3I0LCA6IDY0XSEKKysJdnN1Yi5pNjQJcTgsIHExNCwgcTEyCisrCXZzaHIuczY0CXExLCBxMSwgIzI1CisrCXZhZGQuaTY0CXE0LCBxNCwgcTUKKysJdmFkZC5pNjQJcTUsIHE2LCBxMQorKwl2c2hsLmk2NAlxMSwgcTEsICMyNQorKwl2YWRkLmk2NAlxNiwgcTUsIHE5CisrCXZhZGQuaTY0CXE0LCBxNCwgcTEwCisrCXZzaGwuaTY0CXExMCwgcTEwLCAjMjUKKysJdmFkZC5pNjQJcTksIHE0LCBxOQorKwl2c3ViLmk2NAlxMSwgcTExLCBxMQorKwl2c2hyLnM2NAlxNiwgcTYsICMyNgorKwl2c3ViLmk2NAlxMywgcTMsIHExMAorKwl2dHJuLjMyCQlkMTYsIGQyCisrCXZzaHIuczY0CXE5LCBxOSwgIzI2CisrCXZ0cm4uMzIJCWQxNywgZDMKKysJdmFkZC5pNjQJcTEsIHEyLCBxNgorKwl2c3QxLjgJCWQxNiwgW3IyLCA6IDY0XQorKwl2c2hsLmk2NAlxMiwgcTYsICMyNgorKwl2c3QxLjgJCWQxNywgW3I0LCA6IDY0XQorKwl2YWRkLmk2NAlxNiwgcTcsIHE5CisrCXZ0cm4uMzIJCWQwLCBkNgorKwl2c2hsLmk2NAlxNywgcTksICMyNgorKwl2dHJuLjMyCQlkMSwgZDcKKysJdnN1Yi5pNjQJcTIsIHE1LCBxMgorKwlhZGQJCXIyLCByMiwgIzE2CisrCXZzdWIuaTY0CXEzLCBxNCwgcTcKKysJdnN0MS44CQlkMCwgW3IyLCA6IDY0XQorKwlhZGQJCXI0LCByNCwgIzE2CisrCXZzdDEuOAkJZDEsIFtyNCwgOiA2NF0KKysJdnRybi4zMgkJZDQsIGQyCisrCXZ0cm4uMzIJCWQ1LCBkMworKwlzdWIJCXIyLCByMiwgIzgKKysJc3ViCQlyNCwgcjQsICM4CisrCXZ0cm4uMzIJCWQ2LCBkMTIKKysJdnRybi4zMgkJZDcsIGQxMworKwl2c3QxLjgJCWQ0LCBbcjIsIDogNjRdCisrCXZzdDEuOAkJZDUsIFtyNCwgOiA2NF0KKysJc3ViCQlyMiwgcjIsICMyNAorKwlzdWIJCXI0LCByNCwgIzI0CisrCXZzdDEuOAkJZDYsIFtyMiwgOiA2NF0KKysJdnN0MS44CQlkNywgW3I0LCA6IDY0XQorKwlhZGQJCXIyLCByMywgIzMzNgorKwlhZGQJCXI0LCByMywgIzI4OAorKwl2bGQxLjgJCXtkMC1kMX0sIFtyMiwgOiAxMjhdIQorKwl2bGQxLjgJCXtkMi1kM30sIFtyNCwgOiAxMjhdIQorKwl2YWRkLmkzMglxMCwgcTAsIHExCisrCXZsZDEuOAkJe2QyLWQzfSwgW3IyLCA6IDEyOF0hCisrCXZsZDEuOAkJe2Q0LWQ1fSwgW3I0LCA6IDEyOF0hCisrCXZhZGQuaTMyCXExLCBxMSwgcTIKKysJYWRkCQlyNSwgcjMsICMyODgKKysJdmxkMS44CQl7ZDR9LCBbcjIsIDogNjRdCisrCXZsZDEuOAkJe2Q2fSwgW3I0LCA6IDY0XQorKwl2YWRkLmkzMglxMiwgcTIsIHEzCisrCXZzdDEuOAkJe2QwLWQxfSwgW3I1LCA6IDEyOF0hCisrCXZzdDEuOAkJe2QyLWQzfSwgW3I1LCA6IDEyOF0hCisrCXZzdDEuOAkJZDQsIFtyNSwgOiA2NF0KKysJYWRkCQlyMiwgcjMsICM0OAorKwlhZGQJCXI0LCByMywgIzE0NAorKwl2bGQxLjgJCXtkMC1kMX0sIFtyNCwgOiAxMjhdIQorKwl2bGQxLjgJCXtkMi1kM30sIFtyNCwgOiAxMjhdIQorKwl2bGQxLjgJCXtkNH0sIFtyNCwgOiA2NF0KKysJYWRkCQlyNCwgcjMsICMyODgKKysJdmxkMS44CQl7ZDYtZDd9LCBbcjQsIDogMTI4XSEKKysJdnRybi4zMgkJcTAsIHEzCisrCXZsZDEuOAkJe2Q4LWQ5fSwgW3I0LCA6IDEyOF0hCisrCXZzaGwuaTMyCXE1LCBxMCwgIzQKKysJdnRybi4zMgkJcTEsIHE0CisrCXZzaGwuaTMyCXE2LCBxMywgIzQKKysJdmFkZC5pMzIJcTUsIHE1LCBxMAorKwl2YWRkLmkzMglxNiwgcTYsIHEzCisrCXZzaGwuaTMyCXE3LCBxMSwgIzQKKysJdmxkMS44CQl7ZDV9LCBbcjQsIDogNjRdCisrCXZzaGwuaTMyCXE4LCBxNCwgIzQKKysJdnRybi4zMgkJZDQsIGQ1CisrCXZhZGQuaTMyCXE3LCBxNywgcTEKKysJdmFkZC5pMzIJcTgsIHE4LCBxNAorKwl2bGQxLjgJCXtkMTgtZDE5fSwgW3IyLCA6IDEyOF0hCisrCXZzaGwuaTMyCXExMCwgcTIsICM0CisrCXZsZDEuOAkJe2QyMi1kMjN9LCBbcjIsIDogMTI4XSEKKysJdmFkZC5pMzIJcTEwLCBxMTAsIHEyCisrCXZsZDEuOAkJe2QyNH0sIFtyMiwgOiA2NF0KKysJdmFkZC5pMzIJcTUsIHE1LCBxMAorKwlhZGQJCXIyLCByMywgIzI0MAorKwl2bGQxLjgJCXtkMjYtZDI3fSwgW3IyLCA6IDEyOF0hCisrCXZhZGQuaTMyCXE2LCBxNiwgcTMKKysJdmxkMS44CQl7ZDI4LWQyOX0sIFtyMiwgOiAxMjhdIQorKwl2YWRkLmkzMglxOCwgcTgsIHE0CisrCXZsZDEuOAkJe2QyNX0sIFtyMiwgOiA2NF0KKysJdmFkZC5pMzIJcTEwLCBxMTAsIHEyCisrCXZ0cm4uMzIJCXE5LCBxMTMKKysJdmFkZC5pMzIJcTcsIHE3LCBxMQorKwl2YWRkLmkzMglxNSwgcTUsIHEwCisrCXZ0cm4uMzIJCXExMSwgcTE0CisrCXZhZGQuaTMyCXE2LCBxNiwgcTMKKysJYWRkCQlyMiwgc3AsICM1NjAKKysJdmFkZC5pMzIJcTEwLCBxMTAsIHEyCisrCXZ0cm4uMzIJCWQyNCwgZDI1CisrCXZzdDEuOAkJe2QxMi1kMTN9LCBbcjIsIDogMTI4XQorKwl2c2hsLmkzMglxNiwgcTEzLCAjMQorKwlhZGQJCXIyLCBzcCwgIzU3NgorKwl2c3QxLjgJCXtkMjAtZDIxfSwgW3IyLCA6IDEyOF0KKysJdnNobC5pMzIJcTEwLCBxMTQsICMxCisrCWFkZAkJcjIsIHNwLCAjNTkyCisrCXZzdDEuOAkJe2QxMi1kMTN9LCBbcjIsIDogMTI4XQorKwl2c2hsLmkzMglxMTUsIHExMiwgIzEKKysJdmFkZC5pMzIJcTgsIHE4LCBxNAorKwl2ZXh0LjMyCQlkMTAsIGQzMSwgZDMwLCAjMAorKwl2YWRkLmkzMglxNywgcTcsIHExCisrCWFkZAkJcjIsIHNwLCAjNjA4CisrCXZzdDEuOAkJe2QxNi1kMTd9LCBbcjIsIDogMTI4XQorKwl2bXVsbC5zMzIJcTgsIGQxOCwgZDUKKysJdm1sYWwuczMyCXE4LCBkMjYsIGQ0CisrCXZtbGFsLnMzMglxOCwgZDE5LCBkOQorKwl2bWxhbC5zMzIJcTgsIGQyNywgZDMKKysJdm1sYWwuczMyCXE4LCBkMjIsIGQ4CisrCXZtbGFsLnMzMglxOCwgZDI4LCBkMgorKwl2bWxhbC5zMzIJcTgsIGQyMywgZDcKKysJdm1sYWwuczMyCXE4LCBkMjksIGQxCisrCXZtbGFsLnMzMglxOCwgZDI0LCBkNgorKwl2bWxhbC5zMzIJcTgsIGQyNSwgZDAKKysJYWRkCQlyMiwgc3AsICM2MjQKKysJdnN0MS44CQl7ZDE0LWQxNX0sIFtyMiwgOiAxMjhdCisrCXZtdWxsLnMzMglxMiwgZDE4LCBkNAorKwl2bWxhbC5zMzIJcTIsIGQxMiwgZDkKKysJdm1sYWwuczMyCXEyLCBkMTMsIGQ4CisrCXZtbGFsLnMzMglxMiwgZDE5LCBkMworKwl2bWxhbC5zMzIJcTIsIGQyMiwgZDIKKysJdm1sYWwuczMyCXEyLCBkMjMsIGQxCisrCXZtbGFsLnMzMglxMiwgZDI0LCBkMAorKwlhZGQJCXIyLCBzcCwgIzY0MAorKwl2c3QxLjgJCXtkMjAtZDIxfSwgW3IyLCA6IDEyOF0KKysJdm11bGwuczMyCXE3LCBkMTgsIGQ5CisrCXZtbGFsLnMzMglxNywgZDI2LCBkMworKwl2bWxhbC5zMzIJcTcsIGQxOSwgZDgKKysJdm1sYWwuczMyCXE3LCBkMjcsIGQyCisrCXZtbGFsLnMzMglxNywgZDIyLCBkNworKwl2bWxhbC5zMzIJcTcsIGQyOCwgZDEKKysJdm1sYWwuczMyCXE3LCBkMjMsIGQ2CisrCXZtbGFsLnMzMglxNywgZDI5LCBkMAorKwlhZGQJCXIyLCBzcCwgIzY1NgorKwl2c3QxLjgJCXtkMTAtZDExfSwgW3IyLCA6IDEyOF0KKysJdm11bGwuczMyCXE1LCBkMTgsIGQzCisrCXZtbGFsLnMzMglxNSwgZDE5LCBkMgorKwl2bWxhbC5zMzIJcTUsIGQyMiwgZDEKKysJdm1sYWwuczMyCXE1LCBkMjMsIGQwCisrCXZtbGFsLnMzMglxNSwgZDEyLCBkOAorKwlhZGQJCXIyLCBzcCwgIzY3MgorKwl2c3QxLjgJCXtkMTYtZDE3fSwgW3IyLCA6IDEyOF0KKysJdm11bGwuczMyCXE0LCBkMTgsIGQ4CisrCXZtbGFsLnMzMglxNCwgZDI2LCBkMgorKwl2bWxhbC5zMzIJcTQsIGQxOSwgZDcKKysJdm1sYWwuczMyCXE0LCBkMjcsIGQxCisrCXZtbGFsLnMzMglxNCwgZDIyLCBkNgorKwl2bWxhbC5zMzIJcTQsIGQyOCwgZDAKKysJdm11bGwuczMyCXE4LCBkMTgsIGQ3CisrCXZtbGFsLnMzMglxOCwgZDI2LCBkMQorKwl2bWxhbC5zMzIJcTgsIGQxOSwgZDYKKysJdm1sYWwuczMyCXE4LCBkMjcsIGQwCisrCWFkZAkJcjIsIHNwLCAjNTc2CisrCXZsZDEuOAkJe2QyMC1kMjF9LCBbcjIsIDogMTI4XQorKwl2bWxhbC5zMzIJcTcsIGQyNCwgZDIxCisrCXZtbGFsLnMzMglxNywgZDI1LCBkMjAKKysJdm1sYWwuczMyCXE0LCBkMjMsIGQyMQorKwl2bWxhbC5zMzIJcTQsIGQyOSwgZDIwCisrCXZtbGFsLnMzMglxOCwgZDIyLCBkMjEKKysJdm1sYWwuczMyCXE4LCBkMjgsIGQyMAorKwl2bWxhbC5zMzIJcTUsIGQyNCwgZDIwCisrCWFkZAkJcjIsIHNwLCAjNTc2CisrCXZzdDEuOAkJe2QxNC1kMTV9LCBbcjIsIDogMTI4XQorKwl2bXVsbC5zMzIJcTcsIGQxOCwgZDYKKysJdm1sYWwuczMyCXE3LCBkMjYsIGQwCisrCWFkZAkJcjIsIHNwLCAjNjU2CisrCXZsZDEuOAkJe2QzMC1kMzF9LCBbcjIsIDogMTI4XQorKwl2bWxhbC5zMzIJcTIsIGQzMCwgZDIxCisrCXZtbGFsLnMzMglxNywgZDE5LCBkMjEKKysJdm1sYWwuczMyCXE3LCBkMjcsIGQyMAorKwlhZGQJCXIyLCBzcCwgIzYyNAorKwl2bGQxLjgJCXtkMjYtZDI3fSwgW3IyLCA6IDEyOF0KKysJdm1sYWwuczMyCXE0LCBkMjUsIGQyNworKwl2bWxhbC5zMzIJcTgsIGQyOSwgZDI3CisrCXZtbGFsLnMzMglxOCwgZDI1LCBkMjYKKysJdm1sYWwuczMyCXE3LCBkMjgsIGQyNworKwl2bWxhbC5zMzIJcTcsIGQyOSwgZDI2CisrCWFkZAkJcjIsIHNwLCAjNjA4CisrCXZsZDEuOAkJe2QyOC1kMjl9LCBbcjIsIDogMTI4XQorKwl2bWxhbC5zMzIJcTQsIGQyNCwgZDI5CisrCXZtbGFsLnMzMglxOCwgZDIzLCBkMjkKKysJdm1sYWwuczMyCXE4LCBkMjQsIGQyOAorKwl2bWxhbC5zMzIJcTcsIGQyMiwgZDI5CisrCXZtbGFsLnMzMglxNywgZDIzLCBkMjgKKysJYWRkCQlyMiwgc3AsICM2MDgKKysJdnN0MS44CQl7ZDgtZDl9LCBbcjIsIDogMTI4XQorKwlhZGQJCXIyLCBzcCwgIzU2MAorKwl2bGQxLjgJCXtkOC1kOX0sIFtyMiwgOiAxMjhdCisrCXZtbGFsLnMzMglxNywgZDI0LCBkOQorKwl2bWxhbC5zMzIJcTcsIGQyNSwgZDMxCisrCXZtdWxsLnMzMglxMSwgZDE4LCBkMgorKwl2bWxhbC5zMzIJcTEsIGQxOSwgZDEKKysJdm1sYWwuczMyCXExLCBkMjIsIGQwCisrCXZtbGFsLnMzMglxMSwgZDI0LCBkMjcKKysJdm1sYWwuczMyCXExLCBkMjMsIGQyMAorKwl2bWxhbC5zMzIJcTEsIGQxMiwgZDcKKysJdm1sYWwuczMyCXExLCBkMTMsIGQ2CisrCXZtdWxsLnMzMglxNiwgZDE4LCBkMQorKwl2bWxhbC5zMzIJcTYsIGQxOSwgZDAKKysJdm1sYWwuczMyCXE2LCBkMjMsIGQyNworKwl2bWxhbC5zMzIJcTYsIGQyMiwgZDIwCisrCXZtbGFsLnMzMglxNiwgZDI0LCBkMjYKKysJdm11bGwuczMyCXEwLCBkMTgsIGQwCisrCXZtbGFsLnMzMglxMCwgZDIyLCBkMjcKKysJdm1sYWwuczMyCXEwLCBkMjMsIGQyNgorKwl2bWxhbC5zMzIJcTAsIGQyNCwgZDMxCisrCXZtbGFsLnMzMglxMCwgZDE5LCBkMjAKKysJYWRkCQlyMiwgc3AsICM2NDAKKysJdmxkMS44CQl7ZDE4LWQxOX0sIFtyMiwgOiAxMjhdCisrCXZtbGFsLnMzMglxMiwgZDE4LCBkNworKwl2bWxhbC5zMzIJcTIsIGQxOSwgZDYKKysJdm1sYWwuczMyCXE1LCBkMTgsIGQ2CisrCXZtbGFsLnMzMglxNSwgZDE5LCBkMjEKKysJdm1sYWwuczMyCXExLCBkMTgsIGQyMQorKwl2bWxhbC5zMzIJcTEsIGQxOSwgZDI5CisrCXZtbGFsLnMzMglxMCwgZDE4LCBkMjgKKysJdm1sYWwuczMyCXEwLCBkMTksIGQ5CisrCXZtbGFsLnMzMglxNiwgZDE4LCBkMjkKKysJdm1sYWwuczMyCXE2LCBkMTksIGQyOAorKwlhZGQJCXIyLCBzcCwgIzU5MgorKwl2bGQxLjgJCXtkMTgtZDE5fSwgW3IyLCA6IDEyOF0KKysJYWRkCQlyMiwgc3AsICM1MTIKKysJdmxkMS44CQl7ZDIyLWQyM30sIFtyMiwgOiAxMjhdCisrCXZtbGFsLnMzMglxNSwgZDE5LCBkNworKwl2bWxhbC5zMzIJcTAsIGQxOCwgZDIxCisrCXZtbGFsLnMzMglxMCwgZDE5LCBkMjkKKysJdm1sYWwuczMyCXE2LCBkMTgsIGQ2CisrCWFkZAkJcjIsIHNwLCAjNTI4CisrCXZsZDEuOAkJe2Q2LWQ3fSwgW3IyLCA6IDEyOF0KKysJdm1sYWwuczMyCXE2LCBkMTksIGQyMQorKwlhZGQJCXIyLCBzcCwgIzU3NgorKwl2bGQxLjgJCXtkMTgtZDE5fSwgW3IyLCA6IDEyOF0KKysJdm1sYWwuczMyCXEwLCBkMzAsIGQ4CisrCWFkZAkJcjIsIHNwLCAjNjcyCisrCXZsZDEuOAkJe2QyMC1kMjF9LCBbcjIsIDogMTI4XQorKwl2bWxhbC5zMzIJcTUsIGQzMCwgZDI5CisrCWFkZAkJcjIsIHNwLCAjNjA4CisrCXZsZDEuOAkJe2QyNC1kMjV9LCBbcjIsIDogMTI4XQorKwl2bWxhbC5zMzIJcTEsIGQzMCwgZDI4CisrCXZhZGQuaTY0CXExMywgcTAsIHExMQorKwl2YWRkLmk2NAlxMTQsIHE1LCBxMTEKKysJdm1sYWwuczMyCXE2LCBkMzAsIGQ5CisrCXZzaHIuczY0CXE0LCBxMTMsICMyNgorKwl2c2hyLnM2NAlxMTMsIHExNCwgIzI2CisrCXZhZGQuaTY0CXE3LCBxNywgcTQKKysJdnNobC5pNjQJcTQsIHE0LCAjMjYKKysJdmFkZC5pNjQJcTE0LCBxNywgcTMKKysJdmFkZC5pNjQJcTksIHE5LCBxMTMKKysJdnNobC5pNjQJcTEzLCBxMTMsICMyNgorKwl2YWRkLmk2NAlxMTUsIHE5LCBxMworKwl2c3ViLmk2NAlxMCwgcTAsIHE0CisrCXZzaHIuczY0CXE0LCBxMTQsICMyNQorKwl2c3ViLmk2NAlxNSwgcTUsIHExMworKwl2c2hyLnM2NAlxMTMsIHExNSwgIzI1CisrCXZhZGQuaTY0CXE2LCBxNiwgcTQKKysJdnNobC5pNjQJcTQsIHE0LCAjMjUKKysJdmFkZC5pNjQJcTE0LCBxNiwgcTExCisrCXZhZGQuaTY0CXEyLCBxMiwgcTEzCisrCXZzdWIuaTY0CXE0LCBxNywgcTQKKysJdnNoci5zNjQJcTcsIHExNCwgIzI2CisrCXZzaGwuaTY0CXExMywgcTEzLCAjMjUKKysJdmFkZC5pNjQJcTE0LCBxMiwgcTExCisrCXZhZGQuaTY0CXE4LCBxOCwgcTcKKysJdnNobC5pNjQJcTcsIHE3LCAjMjYKKysJdmFkZC5pNjQJcTE1LCBxOCwgcTMKKysJdnN1Yi5pNjQJcTksIHE5LCBxMTMKKysJdnNoci5zNjQJcTEzLCBxMTQsICMyNgorKwl2c3ViLmk2NAlxNiwgcTYsIHE3CisrCXZzaHIuczY0CXE3LCBxMTUsICMyNQorKwl2YWRkLmk2NAlxMTAsIHExMCwgcTEzCisrCXZzaGwuaTY0CXExMywgcTEzLCAjMjYKKysJdmFkZC5pNjQJcTE0LCBxMTAsIHEzCisrCXZhZGQuaTY0CXExLCBxMSwgcTcKKysJYWRkCQlyMiwgcjMsICMyNDAKKysJdnNobC5pNjQJcTcsIHE3LCAjMjUKKysJYWRkCQlyNCwgcjMsICMxNDQKKysJdmFkZC5pNjQJcTE1LCBxMSwgcTExCisrCWFkZAkJcjIsIHIyLCAjOAorKwl2c3ViLmk2NAlxMiwgcTIsIHExMworKwlhZGQJCXI0LCByNCwgIzgKKysJdnNoci5zNjQJcTEzLCBxMTQsICMyNQorKwl2c3ViLmk2NAlxNywgcTgsIHE3CisrCXZzaHIuczY0CXE4LCBxMTUsICMyNgorKwl2YWRkLmk2NAlxMTQsIHExMywgcTEzCisrCXZhZGQuaTY0CXExMiwgcTEyLCBxOAorKwl2dHJuLjMyCQlkMTIsIGQxNAorKwl2c2hsLmk2NAlxOCwgcTgsICMyNgorKwl2dHJuLjMyCQlkMTMsIGQxNQorKwl2YWRkLmk2NAlxMywgcTEyLCBxMworKwl2YWRkLmk2NAlxMCwgcTAsIHExNAorKwl2c3QxLjgJCWQxMiwgW3IyLCA6IDY0XSEKKysJdnNobC5pNjQJcTcsIHExMywgIzQKKysJdnN0MS44CQlkMTMsIFtyNCwgOiA2NF0hCisrCXZzdWIuaTY0CXExLCBxMSwgcTgKKysJdnNoci5zNjQJcTMsIHEzLCAjMjUKKysJdmFkZC5pNjQJcTAsIHEwLCBxNworKwl2YWRkLmk2NAlxNSwgcTUsIHEzCisrCXZzaGwuaTY0CXEzLCBxMywgIzI1CisrCXZhZGQuaTY0CXE2LCBxNSwgcTExCisrCXZhZGQuaTY0CXEwLCBxMCwgcTEzCisrCXZzaGwuaTY0CXE3LCBxMTMsICMyNQorKwl2YWRkLmk2NAlxOCwgcTAsIHExMQorKwl2c3ViLmk2NAlxMywgcTEyLCBxMworKwl2c2hyLnM2NAlxNiwgcTYsICMyNgorKwl2c3ViLmk2NAlxNywgcTEwLCBxNworKwl2dHJuLjMyCQlkMiwgZDYKKysJdnNoci5zNjQJcTgsIHE4LCAjMjYKKysJdnRybi4zMgkJZDMsIGQ3CisrCXZhZGQuaTY0CXEzLCBxOSwgcTYKKysJdnN0MS44CQlkMiwgW3IyLCA6IDY0XQorKwl2c2hsLmk2NAlxNiwgcTYsICMyNgorKwl2c3QxLjgJCWQzLCBbcjQsIDogNjRdCisrCXZhZGQuaTY0CXExLCBxNCwgcTgKKysJdnRybi4zMgkJZDQsIGQxNAorKwl2c2hsLmk2NAlxNCwgcTgsICMyNgorKwl2dHJuLjMyCQlkNSwgZDE1CisrCXZzdWIuaTY0CXE1LCBxNSwgcTYKKysJYWRkCQlyMiwgcjIsICMxNgorKwl2c3ViLmk2NAlxMCwgcTAsIHE0CisrCXZzdDEuOAkJZDQsIFtyMiwgOiA2NF0KKysJYWRkCQlyNCwgcjQsICMxNgorKwl2c3QxLjgJCWQ1LCBbcjQsIDogNjRdCisrCXZ0cm4uMzIJCWQxMCwgZDYKKysJdnRybi4zMgkJZDExLCBkNworKwlzdWIJCXIyLCByMiwgIzgKKysJc3ViCQlyNCwgcjQsICM4CisrCXZ0cm4uMzIJCWQwLCBkMgorKwl2dHJuLjMyCQlkMSwgZDMKKysJdnN0MS44CQlkMTAsIFtyMiwgOiA2NF0KKysJdnN0MS44CQlkMTEsIFtyNCwgOiA2NF0KKysJc3ViCQlyMiwgcjIsICMyNAorKwlzdWIJCXI0LCByNCwgIzI0CisrCXZzdDEuOAkJZDAsIFtyMiwgOiA2NF0KKysJdnN0MS44CQlkMSwgW3I0LCA6IDY0XQorKwlsZHIJCXIyLCBbc3AsICM0ODhdCisrCWxkcgkJcjQsIFtzcCwgIzQ5Ml0KKysJc3VicwkJcjUsIHIyLCAjMQorKwliZ2UJCS5fbWFpbmxvb3AKKysJYWRkCQlyMSwgcjMsICMxNDQKKysJYWRkCQlyMiwgcjMsICMzMzYKKysJdmxkMS44CQl7ZDAtZDF9LCBbcjEsIDogMTI4XSEKKysJdmxkMS44CQl7ZDItZDN9LCBbcjEsIDogMTI4XSEKKysJdmxkMS44CQl7ZDR9LCBbcjEsIDogNjRdCisrCXZzdDEuOAkJe2QwLWQxfSwgW3IyLCA6IDEyOF0hCisrCXZzdDEuOAkJe2QyLWQzfSwgW3IyLCA6IDEyOF0hCisrCXZzdDEuOAkJZDQsIFtyMiwgOiA2NF0KKysJbGRyCQlyMSwgPTAKKysuX2ludmVydGxvb3A6CisrCWFkZAkJcjIsIHIzLCAjMTQ0CisrCWxkcgkJcjQsID0wCisrCWxkcgkJcjUsID0yCisrCWNtcAkJcjEsICMxCisrCWxkcmVxCQlyNSwgPTEKKysJYWRkZXEJCXIyLCByMywgIzMzNgorKwlhZGRlcQkJcjQsIHIzLCAjNDgKKysJY21wCQlyMSwgIzIKKysJbGRyZXEJCXI1LCA9MQorKwlhZGRlcQkJcjIsIHIzLCAjNDgKKysJY21wCQlyMSwgIzMKKysJbGRyZXEJCXI1LCA9NQorKwlhZGRlcQkJcjQsIHIzLCAjMzM2CisrCWNtcAkJcjEsICM0CisrCWxkcmVxCQlyNSwgPTEwCisrCWNtcAkJcjEsICM1CisrCWxkcmVxCQlyNSwgPTIwCisrCWNtcAkJcjEsICM2CisrCWxkcmVxCQlyNSwgPTEwCisrCWFkZGVxCQlyMiwgcjMsICMzMzYKKysJYWRkZXEJCXI0LCByMywgIzMzNgorKwljbXAJCXIxLCAjNworKwlsZHJlcQkJcjUsID01MAorKwljbXAJCXIxLCAjOAorKwlsZHJlcQkJcjUsID0xMDAKKysJY21wCQlyMSwgIzkKKysJbGRyZXEJCXI1LCA9NTAKKysJYWRkZXEJCXIyLCByMywgIzMzNgorKwljbXAJCXIxLCAjMTAKKysJbGRyZXEJCXI1LCA9NQorKwlhZGRlcQkJcjIsIHIzLCAjNDgKKysJY21wCQlyMSwgIzExCisrCWxkcmVxCQlyNSwgPTAKKysJYWRkZXEJCXIyLCByMywgIzk2CisrCWFkZAkJcjYsIHIzLCAjMTQ0CisrCWFkZAkJcjcsIHIzLCAjMjg4CisrCXZsZDEuOAkJe2QwLWQxfSwgW3I2LCA6IDEyOF0hCisrCXZsZDEuOAkJe2QyLWQzfSwgW3I2LCA6IDEyOF0hCisrCXZsZDEuOAkJe2Q0fSwgW3I2LCA6IDY0XQorKwl2c3QxLjgJCXtkMC1kMX0sIFtyNywgOiAxMjhdIQorKwl2c3QxLjgJCXtkMi1kM30sIFtyNywgOiAxMjhdIQorKwl2c3QxLjgJCWQ0LCBbcjcsIDogNjRdCisrCWNtcAkJcjUsICMwCisrCWJlcQkJLl9za2lwc3F1YXJpbmdsb29wCisrLl9zcXVhcmluZ2xvb3A6CisrCWFkZAkJcjYsIHIzLCAjMjg4CisrCWFkZAkJcjcsIHIzLCAjMjg4CisrCWFkZAkJcjgsIHIzLCAjMjg4CisrCXZtb3YuaTMyCXEwLCAjMTkKKysJdm1vdi5pMzIJcTEsICMwCisrCXZtb3YuaTMyCXEyLCAjMQorKwl2emlwLmkzMglxMSwgcTIKKysJdmxkMS44CQl7ZDQtZDV9LCBbcjcsIDogMTI4XSEKKysJdmxkMS44CQl7ZDYtZDd9LCBbcjcsIDogMTI4XSEKKysJdmxkMS44CQl7ZDl9LCBbcjcsIDogNjRdCisrCXZsZDEuOAkJe2QxMC1kMTF9LCBbcjYsIDogMTI4XSEKKysJYWRkCQlyNywgc3AsICM0MTYKKysJdmxkMS44CQl7ZDEyLWQxM30sIFtyNiwgOiAxMjhdIQorKwl2bXVsLmkzMglxNywgcTIsIHEwCisrCXZsZDEuOAkJe2Q4fSwgW3I2LCA6IDY0XQorKwl2ZXh0LjMyCQlkMTcsIGQxMSwgZDEwLCAjMQorKwl2bXVsLmkzMglxOSwgcTMsIHEwCisrCXZleHQuMzIJCWQxNiwgZDEwLCBkOCwgIzEKKysJdnNobC51MzIJcTEwLCBxNSwgcTEKKysJdmV4dC4zMgkJZDIyLCBkMTQsIGQ0LCAjMQorKwl2ZXh0LjMyCQlkMjQsIGQxOCwgZDYsICMxCisrCXZzaGwudTMyCXExMywgcTYsIHExCisrCXZzaGwudTMyCWQyOCwgZDgsIGQyCisrCXZyZXY2NC5pMzIJZDIyLCBkMjIKKysJdm11bC5pMzIJZDEsIGQ5LCBkMQorKwl2cmV2NjQuaTMyCWQyNCwgZDI0CisrCXZleHQuMzIJCWQyOSwgZDgsIGQxMywgIzEKKysJdmV4dC4zMgkJZDAsIGQxLCBkOSwgIzEKKysJdnJldjY0LmkzMglkMCwgZDAKKysJdmV4dC4zMgkJZDIsIGQ5LCBkMSwgIzEKKysJdmV4dC4zMgkJZDIzLCBkMTUsIGQ1LCAjMQorKwl2bXVsbC5zMzIJcTQsIGQyMCwgZDQKKysJdnJldjY0LmkzMglkMjMsIGQyMworKwl2bWxhbC5zMzIJcTQsIGQyMSwgZDEKKysJdnJldjY0LmkzMglkMiwgZDIKKysJdm1sYWwuczMyCXE0LCBkMjYsIGQxOQorKwl2ZXh0LjMyCQlkMywgZDUsIGQxNSwgIzEKKysJdm1sYWwuczMyCXE0LCBkMjcsIGQxOAorKwl2cmV2NjQuaTMyCWQzLCBkMworKwl2bWxhbC5zMzIJcTQsIGQyOCwgZDE1CisrCXZleHQuMzIJCWQxNCwgZDEyLCBkMTEsICMxCisrCXZtdWxsLnMzMglxNSwgZDE2LCBkMjMKKysJdmV4dC4zMgkJZDE1LCBkMTMsIGQxMiwgIzEKKysJdm1sYWwuczMyCXE1LCBkMTcsIGQ0CisrCXZzdDEuOAkJZDgsIFtyNywgOiA2NF0hCisrCXZtbGFsLnMzMglxNSwgZDE0LCBkMQorKwl2ZXh0LjMyCQlkMTIsIGQ5LCBkOCwgIzAKKysJdm1sYWwuczMyCXE1LCBkMTUsIGQxOQorKwl2bW92Lmk2NAlkMTMsICMwCisrCXZtbGFsLnMzMglxNSwgZDI5LCBkMTgKKysJdmV4dC4zMgkJZDI1LCBkMTksIGQ3LCAjMQorKwl2bWxhbC5zMzIJcTYsIGQyMCwgZDUKKysJdnJldjY0LmkzMglkMjUsIGQyNQorKwl2bWxhbC5zMzIJcTYsIGQyMSwgZDQKKysJdnN0MS44CQlkMTEsIFtyNywgOiA2NF0hCisrCXZtbGFsLnMzMglxNiwgZDI2LCBkMQorKwl2ZXh0LjMyCQlkOSwgZDEwLCBkMTAsICMwCisrCXZtbGFsLnMzMglxNiwgZDI3LCBkMTkKKysJdm1vdi5pNjQJZDgsICMwCisrCXZtbGFsLnMzMglxNiwgZDI4LCBkMTgKKysJdm1sYWwuczMyCXE0LCBkMTYsIGQyNAorKwl2bWxhbC5zMzIJcTQsIGQxNywgZDUKKysJdm1sYWwuczMyCXE0LCBkMTQsIGQ0CisrCXZzdDEuOAkJZDEyLCBbcjcsIDogNjRdIQorKwl2bWxhbC5zMzIJcTQsIGQxNSwgZDEKKysJdmV4dC4zMgkJZDEwLCBkMTMsIGQxMiwgIzAKKysJdm1sYWwuczMyCXE0LCBkMjksIGQxOQorKwl2bW92Lmk2NAlkMTEsICMwCisrCXZtbGFsLnMzMglxNSwgZDIwLCBkNgorKwl2bWxhbC5zMzIJcTUsIGQyMSwgZDUKKysJdm1sYWwuczMyCXE1LCBkMjYsIGQ0CisrCXZleHQuMzIJCWQxMywgZDgsIGQ4LCAjMAorKwl2bWxhbC5zMzIJcTUsIGQyNywgZDEKKysJdm1vdi5pNjQJZDEyLCAjMAorKwl2bWxhbC5zMzIJcTUsIGQyOCwgZDE5CisrCXZzdDEuOAkJZDksIFtyNywgOiA2NF0hCisrCXZtbGFsLnMzMglxNiwgZDE2LCBkMjUKKysJdm1sYWwuczMyCXE2LCBkMTcsIGQ2CisrCXZzdDEuOAkJZDEwLCBbcjcsIDogNjRdCisrCXZtbGFsLnMzMglxNiwgZDE0LCBkNQorKwl2ZXh0LjMyCQlkOCwgZDExLCBkMTAsICMwCisrCXZtbGFsLnMzMglxNiwgZDE1LCBkNAorKwl2bW92Lmk2NAlkOSwgIzAKKysJdm1sYWwuczMyCXE2LCBkMjksIGQxCisrCXZtbGFsLnMzMglxNCwgZDIwLCBkNworKwl2bWxhbC5zMzIJcTQsIGQyMSwgZDYKKysJdm1sYWwuczMyCXE0LCBkMjYsIGQ1CisrCXZleHQuMzIJCWQxMSwgZDEyLCBkMTIsICMwCisrCXZtbGFsLnMzMglxNCwgZDI3LCBkNAorKwl2bW92Lmk2NAlkMTAsICMwCisrCXZtbGFsLnMzMglxNCwgZDI4LCBkMQorKwl2bWxhbC5zMzIJcTUsIGQxNiwgZDAKKysJc3ViCQlyNiwgcjcsICMzMgorKwl2bWxhbC5zMzIJcTUsIGQxNywgZDcKKysJdm1sYWwuczMyCXE1LCBkMTQsIGQ2CisrCXZleHQuMzIJCWQzMCwgZDksIGQ4LCAjMAorKwl2bWxhbC5zMzIJcTUsIGQxNSwgZDUKKysJdmxkMS44CQl7ZDMxfSwgW3I2LCA6IDY0XSEKKysJdm1sYWwuczMyCXE1LCBkMjksIGQ0CisrCXZtbGFsLnMzMglxMTUsIGQyMCwgZDAKKysJdmV4dC4zMgkJZDAsIGQ2LCBkMTgsICMxCisrCXZtbGFsLnMzMglxMTUsIGQyMSwgZDI1CisrCXZyZXY2NC5pMzIJZDAsIGQwCisrCXZtbGFsLnMzMglxMTUsIGQyNiwgZDI0CisrCXZleHQuMzIJCWQxLCBkNywgZDE5LCAjMQorKwl2ZXh0LjMyCQlkNywgZDEwLCBkMTAsICMwCisrCXZtbGFsLnMzMglxMTUsIGQyNywgZDIzCisrCXZyZXY2NC5pMzIJZDEsIGQxCisrCXZsZDEuOAkJe2Q2fSwgW3I2LCA6IDY0XQorKwl2bWxhbC5zMzIJcTE1LCBkMjgsIGQyMgorKwl2bWxhbC5zMzIJcTMsIGQxNiwgZDQKKysJYWRkCQlyNiwgcjYsICMyNAorKwl2bWxhbC5zMzIJcTMsIGQxNywgZDIKKysJdmV4dC4zMgkJZDQsIGQzMSwgZDMwLCAjMAorKwl2bW92CQlkMTcsIGQxMQorKwl2bWxhbC5zMzIJcTMsIGQxNCwgZDEKKysJdmV4dC4zMgkJZDExLCBkMTMsIGQxMywgIzAKKysJdmV4dC4zMgkJZDEzLCBkMzAsIGQzMCwgIzAKKysJdm1sYWwuczMyCXEzLCBkMTUsIGQwCisrCXZleHQuMzIJCWQxLCBkOCwgZDgsICMwCisrCXZtbGFsLnMzMglxMywgZDI5LCBkMworKwl2bGQxLjgJCXtkNX0sIFtyNiwgOiA2NF0KKysJc3ViCQlyNiwgcjYsICMxNgorKwl2ZXh0LjMyCQlkMTAsIGQ2LCBkNiwgIzAKKysJdm1vdi5pMzIJcTEsICMweGZmZmZmZmZmCisrCXZzaGwuaTY0CXE0LCBxMSwgIzI1CisrCWFkZAkJcjcsIHNwLCAjNTEyCisrCXZsZDEuOAkJe2QxNC1kMTV9LCBbcjcsIDogMTI4XQorKwl2YWRkLmk2NAlxOSwgcTIsIHE3CisrCXZzaGwuaTY0CXExLCBxMSwgIzI2CisrCXZzaHIuczY0CXExMCwgcTksICMyNgorKwl2bGQxLjgJCXtkMH0sIFtyNiwgOiA2NF0hCisrCXZhZGQuaTY0CXE1LCBxNSwgcTEwCisrCXZhbmQJCXE5LCBxOSwgcTEKKysJdmxkMS44CQl7ZDE2fSwgW3I2LCA6IDY0XSEKKysJYWRkCQlyNiwgc3AsICM1MjgKKysJdmxkMS44CQl7ZDIwLWQyMX0sIFtyNiwgOiAxMjhdCisrCXZhZGQuaTY0CXExMSwgcTUsIHExMAorKwl2c3ViLmk2NAlxMiwgcTIsIHE5CisrCXZzaHIuczY0CXE5LCBxMTEsICMyNQorKwl2ZXh0LjMyCQlkMTIsIGQ1LCBkNCwgIzAKKysJdmFuZAkJcTExLCBxMTEsIHE0CisrCXZhZGQuaTY0CXEwLCBxMCwgcTkKKysJdm1vdgkJZDE5LCBkNworKwl2YWRkLmk2NAlxMywgcTAsIHE3CisrCXZzdWIuaTY0CXE1LCBxNSwgcTExCisrCXZzaHIuczY0CXExMSwgcTMsICMyNgorKwl2ZXh0LjMyCQlkMTgsIGQxMSwgZDEwLCAjMAorKwl2YW5kCQlxMywgcTMsIHExCisrCXZhZGQuaTY0CXE4LCBxOCwgcTExCisrCXZhZGQuaTY0CXExMSwgcTgsIHExMAorKwl2c3ViLmk2NAlxMCwgcTAsIHEzCisrCXZzaHIuczY0CXEzLCBxMTEsICMyNQorKwl2YW5kCQlxMTEsIHExMSwgcTQKKysJdmFkZC5pNjQJcTMsIHE2LCBxMworKwl2YWRkLmk2NAlxNiwgcTMsIHE3CisrCXZzdWIuaTY0CXE4LCBxOCwgcTExCisrCXZzaHIuczY0CXExMSwgcTYsICMyNgorKwl2YW5kCQlxNiwgcTYsIHExCisrCXZhZGQuaTY0CXE5LCBxOSwgcTExCisrCXZhZGQuaTY0CWQyNSwgZDE5LCBkMjEKKysJdnN1Yi5pNjQJcTMsIHEzLCBxNgorKwl2c2hyLnM2NAlkMjMsIGQyNSwgIzI1CisrCXZhbmQJCXE0LCBxMTIsIHE0CisrCXZhZGQuaTY0CWQyMSwgZDIzLCBkMjMKKysJdnNobC5pNjQJZDI1LCBkMjMsICM0CisrCXZhZGQuaTY0CWQyMSwgZDIxLCBkMjMKKysJdmFkZC5pNjQJZDI1LCBkMjUsIGQyMQorKwl2YWRkLmk2NAlkNCwgZDQsIGQyNQorKwl2emlwLmkzMglxMCwgcTgKKysJdmFkZC5pNjQJZDEyLCBkNCwgZDE0CisrCWFkZAkJcjYsIHI4LCAjOAorKwl2c3QxLjgJCWQwLCBbcjYsIDogNjRdCisrCXZzdWIuaTY0CWQxOSwgZDE5LCBkOQorKwlhZGQJCXI2LCByNiwgIzE2CisrCXZzdDEuOAkJZDE2LCBbcjYsIDogNjRdCisrCXZzaHIuczY0CWQyMiwgZDEyLCAjMjYKKysJdmFuZAkJcTAsIHE2LCBxMQorKwl2YWRkLmk2NAlkMTAsIGQxMCwgZDIyCisrCXZ6aXAuaTMyCXEzLCBxOQorKwl2c3ViLmk2NAlkNCwgZDQsIGQwCisrCXN1YgkJcjYsIHI2LCAjOAorKwl2c3QxLjgJCWQ2LCBbcjYsIDogNjRdCisrCWFkZAkJcjYsIHI2LCAjMTYKKysJdnN0MS44CQlkMTgsIFtyNiwgOiA2NF0KKysJdnppcC5pMzIJcTIsIHE1CisrCXN1YgkJcjYsIHI2LCAjMzIKKysJdnN0MS44CQlkNCwgW3I2LCA6IDY0XQorKwlzdWJzCQlyNSwgcjUsICMxCisrCWJoaQkJLl9zcXVhcmluZ2xvb3AKKysuX3NraXBzcXVhcmluZ2xvb3A6CisrCW1vdgkJcjIsIHIyCisrCWFkZAkJcjUsIHIzLCAjMjg4CisrCWFkZAkJcjYsIHIzLCAjMTQ0CisrCXZtb3YuaTMyCXEwLCAjMTkKKysJdm1vdi5pMzIJcTEsICMwCisrCXZtb3YuaTMyCXEyLCAjMQorKwl2emlwLmkzMglxMSwgcTIKKysJdmxkMS44CQl7ZDQtZDV9LCBbcjUsIDogMTI4XSEKKysJdmxkMS44CQl7ZDYtZDd9LCBbcjUsIDogMTI4XSEKKysJdmxkMS44CQl7ZDl9LCBbcjUsIDogNjRdCisrCXZsZDEuOAkJe2QxMC1kMTF9LCBbcjIsIDogMTI4XSEKKysJYWRkCQlyNSwgc3AsICM0MTYKKysJdmxkMS44CQl7ZDEyLWQxM30sIFtyMiwgOiAxMjhdIQorKwl2bXVsLmkzMglxNywgcTIsIHEwCisrCXZsZDEuOAkJe2Q4fSwgW3IyLCA6IDY0XQorKwl2ZXh0LjMyCQlkMTcsIGQxMSwgZDEwLCAjMQorKwl2bXVsLmkzMglxOSwgcTMsIHEwCisrCXZleHQuMzIJCWQxNiwgZDEwLCBkOCwgIzEKKysJdnNobC51MzIJcTEwLCBxNSwgcTEKKysJdmV4dC4zMgkJZDIyLCBkMTQsIGQ0LCAjMQorKwl2ZXh0LjMyCQlkMjQsIGQxOCwgZDYsICMxCisrCXZzaGwudTMyCXExMywgcTYsIHExCisrCXZzaGwudTMyCWQyOCwgZDgsIGQyCisrCXZyZXY2NC5pMzIJZDIyLCBkMjIKKysJdm11bC5pMzIJZDEsIGQ5LCBkMQorKwl2cmV2NjQuaTMyCWQyNCwgZDI0CisrCXZleHQuMzIJCWQyOSwgZDgsIGQxMywgIzEKKysJdmV4dC4zMgkJZDAsIGQxLCBkOSwgIzEKKysJdnJldjY0LmkzMglkMCwgZDAKKysJdmV4dC4zMgkJZDIsIGQ5LCBkMSwgIzEKKysJdmV4dC4zMgkJZDIzLCBkMTUsIGQ1LCAjMQorKwl2bXVsbC5zMzIJcTQsIGQyMCwgZDQKKysJdnJldjY0LmkzMglkMjMsIGQyMworKwl2bWxhbC5zMzIJcTQsIGQyMSwgZDEKKysJdnJldjY0LmkzMglkMiwgZDIKKysJdm1sYWwuczMyCXE0LCBkMjYsIGQxOQorKwl2ZXh0LjMyCQlkMywgZDUsIGQxNSwgIzEKKysJdm1sYWwuczMyCXE0LCBkMjcsIGQxOAorKwl2cmV2NjQuaTMyCWQzLCBkMworKwl2bWxhbC5zMzIJcTQsIGQyOCwgZDE1CisrCXZleHQuMzIJCWQxNCwgZDEyLCBkMTEsICMxCisrCXZtdWxsLnMzMglxNSwgZDE2LCBkMjMKKysJdmV4dC4zMgkJZDE1LCBkMTMsIGQxMiwgIzEKKysJdm1sYWwuczMyCXE1LCBkMTcsIGQ0CisrCXZzdDEuOAkJZDgsIFtyNSwgOiA2NF0hCisrCXZtbGFsLnMzMglxNSwgZDE0LCBkMQorKwl2ZXh0LjMyCQlkMTIsIGQ5LCBkOCwgIzAKKysJdm1sYWwuczMyCXE1LCBkMTUsIGQxOQorKwl2bW92Lmk2NAlkMTMsICMwCisrCXZtbGFsLnMzMglxNSwgZDI5LCBkMTgKKysJdmV4dC4zMgkJZDI1LCBkMTksIGQ3LCAjMQorKwl2bWxhbC5zMzIJcTYsIGQyMCwgZDUKKysJdnJldjY0LmkzMglkMjUsIGQyNQorKwl2bWxhbC5zMzIJcTYsIGQyMSwgZDQKKysJdnN0MS44CQlkMTEsIFtyNSwgOiA2NF0hCisrCXZtbGFsLnMzMglxNiwgZDI2LCBkMQorKwl2ZXh0LjMyCQlkOSwgZDEwLCBkMTAsICMwCisrCXZtbGFsLnMzMglxNiwgZDI3LCBkMTkKKysJdm1vdi5pNjQJZDgsICMwCisrCXZtbGFsLnMzMglxNiwgZDI4LCBkMTgKKysJdm1sYWwuczMyCXE0LCBkMTYsIGQyNAorKwl2bWxhbC5zMzIJcTQsIGQxNywgZDUKKysJdm1sYWwuczMyCXE0LCBkMTQsIGQ0CisrCXZzdDEuOAkJZDEyLCBbcjUsIDogNjRdIQorKwl2bWxhbC5zMzIJcTQsIGQxNSwgZDEKKysJdmV4dC4zMgkJZDEwLCBkMTMsIGQxMiwgIzAKKysJdm1sYWwuczMyCXE0LCBkMjksIGQxOQorKwl2bW92Lmk2NAlkMTEsICMwCisrCXZtbGFsLnMzMglxNSwgZDIwLCBkNgorKwl2bWxhbC5zMzIJcTUsIGQyMSwgZDUKKysJdm1sYWwuczMyCXE1LCBkMjYsIGQ0CisrCXZleHQuMzIJCWQxMywgZDgsIGQ4LCAjMAorKwl2bWxhbC5zMzIJcTUsIGQyNywgZDEKKysJdm1vdi5pNjQJZDEyLCAjMAorKwl2bWxhbC5zMzIJcTUsIGQyOCwgZDE5CisrCXZzdDEuOAkJZDksIFtyNSwgOiA2NF0hCisrCXZtbGFsLnMzMglxNiwgZDE2LCBkMjUKKysJdm1sYWwuczMyCXE2LCBkMTcsIGQ2CisrCXZzdDEuOAkJZDEwLCBbcjUsIDogNjRdCisrCXZtbGFsLnMzMglxNiwgZDE0LCBkNQorKwl2ZXh0LjMyCQlkOCwgZDExLCBkMTAsICMwCisrCXZtbGFsLnMzMglxNiwgZDE1LCBkNAorKwl2bW92Lmk2NAlkOSwgIzAKKysJdm1sYWwuczMyCXE2LCBkMjksIGQxCisrCXZtbGFsLnMzMglxNCwgZDIwLCBkNworKwl2bWxhbC5zMzIJcTQsIGQyMSwgZDYKKysJdm1sYWwuczMyCXE0LCBkMjYsIGQ1CisrCXZleHQuMzIJCWQxMSwgZDEyLCBkMTIsICMwCisrCXZtbGFsLnMzMglxNCwgZDI3LCBkNAorKwl2bW92Lmk2NAlkMTAsICMwCisrCXZtbGFsLnMzMglxNCwgZDI4LCBkMQorKwl2bWxhbC5zMzIJcTUsIGQxNiwgZDAKKysJc3ViCQlyMiwgcjUsICMzMgorKwl2bWxhbC5zMzIJcTUsIGQxNywgZDcKKysJdm1sYWwuczMyCXE1LCBkMTQsIGQ2CisrCXZleHQuMzIJCWQzMCwgZDksIGQ4LCAjMAorKwl2bWxhbC5zMzIJcTUsIGQxNSwgZDUKKysJdmxkMS44CQl7ZDMxfSwgW3IyLCA6IDY0XSEKKysJdm1sYWwuczMyCXE1LCBkMjksIGQ0CisrCXZtbGFsLnMzMglxMTUsIGQyMCwgZDAKKysJdmV4dC4zMgkJZDAsIGQ2LCBkMTgsICMxCisrCXZtbGFsLnMzMglxMTUsIGQyMSwgZDI1CisrCXZyZXY2NC5pMzIJZDAsIGQwCisrCXZtbGFsLnMzMglxMTUsIGQyNiwgZDI0CisrCXZleHQuMzIJCWQxLCBkNywgZDE5LCAjMQorKwl2ZXh0LjMyCQlkNywgZDEwLCBkMTAsICMwCisrCXZtbGFsLnMzMglxMTUsIGQyNywgZDIzCisrCXZyZXY2NC5pMzIJZDEsIGQxCisrCXZsZDEuOAkJe2Q2fSwgW3IyLCA6IDY0XQorKwl2bWxhbC5zMzIJcTE1LCBkMjgsIGQyMgorKwl2bWxhbC5zMzIJcTMsIGQxNiwgZDQKKysJYWRkCQlyMiwgcjIsICMyNAorKwl2bWxhbC5zMzIJcTMsIGQxNywgZDIKKysJdmV4dC4zMgkJZDQsIGQzMSwgZDMwLCAjMAorKwl2bW92CQlkMTcsIGQxMQorKwl2bWxhbC5zMzIJcTMsIGQxNCwgZDEKKysJdmV4dC4zMgkJZDExLCBkMTMsIGQxMywgIzAKKysJdmV4dC4zMgkJZDEzLCBkMzAsIGQzMCwgIzAKKysJdm1sYWwuczMyCXEzLCBkMTUsIGQwCisrCXZleHQuMzIJCWQxLCBkOCwgZDgsICMwCisrCXZtbGFsLnMzMglxMywgZDI5LCBkMworKwl2bGQxLjgJCXtkNX0sIFtyMiwgOiA2NF0KKysJc3ViCQlyMiwgcjIsICMxNgorKwl2ZXh0LjMyCQlkMTAsIGQ2LCBkNiwgIzAKKysJdm1vdi5pMzIJcTEsICMweGZmZmZmZmZmCisrCXZzaGwuaTY0CXE0LCBxMSwgIzI1CisrCWFkZAkJcjUsIHNwLCAjNTEyCisrCXZsZDEuOAkJe2QxNC1kMTV9LCBbcjUsIDogMTI4XQorKwl2YWRkLmk2NAlxOSwgcTIsIHE3CisrCXZzaGwuaTY0CXExLCBxMSwgIzI2CisrCXZzaHIuczY0CXExMCwgcTksICMyNgorKwl2bGQxLjgJCXtkMH0sIFtyMiwgOiA2NF0hCisrCXZhZGQuaTY0CXE1LCBxNSwgcTEwCisrCXZhbmQJCXE5LCBxOSwgcTEKKysJdmxkMS44CQl7ZDE2fSwgW3IyLCA6IDY0XSEKKysJYWRkCQlyMiwgc3AsICM1MjgKKysJdmxkMS44CQl7ZDIwLWQyMX0sIFtyMiwgOiAxMjhdCisrCXZhZGQuaTY0CXExMSwgcTUsIHExMAorKwl2c3ViLmk2NAlxMiwgcTIsIHE5CisrCXZzaHIuczY0CXE5LCBxMTEsICMyNQorKwl2ZXh0LjMyCQlkMTIsIGQ1LCBkNCwgIzAKKysJdmFuZAkJcTExLCBxMTEsIHE0CisrCXZhZGQuaTY0CXEwLCBxMCwgcTkKKysJdm1vdgkJZDE5LCBkNworKwl2YWRkLmk2NAlxMywgcTAsIHE3CisrCXZzdWIuaTY0CXE1LCBxNSwgcTExCisrCXZzaHIuczY0CXExMSwgcTMsICMyNgorKwl2ZXh0LjMyCQlkMTgsIGQxMSwgZDEwLCAjMAorKwl2YW5kCQlxMywgcTMsIHExCisrCXZhZGQuaTY0CXE4LCBxOCwgcTExCisrCXZhZGQuaTY0CXExMSwgcTgsIHExMAorKwl2c3ViLmk2NAlxMCwgcTAsIHEzCisrCXZzaHIuczY0CXEzLCBxMTEsICMyNQorKwl2YW5kCQlxMTEsIHExMSwgcTQKKysJdmFkZC5pNjQJcTMsIHE2LCBxMworKwl2YWRkLmk2NAlxNiwgcTMsIHE3CisrCXZzdWIuaTY0CXE4LCBxOCwgcTExCisrCXZzaHIuczY0CXExMSwgcTYsICMyNgorKwl2YW5kCQlxNiwgcTYsIHExCisrCXZhZGQuaTY0CXE5LCBxOSwgcTExCisrCXZhZGQuaTY0CWQyNSwgZDE5LCBkMjEKKysJdnN1Yi5pNjQJcTMsIHEzLCBxNgorKwl2c2hyLnM2NAlkMjMsIGQyNSwgIzI1CisrCXZhbmQJCXE0LCBxMTIsIHE0CisrCXZhZGQuaTY0CWQyMSwgZDIzLCBkMjMKKysJdnNobC5pNjQJZDI1LCBkMjMsICM0CisrCXZhZGQuaTY0CWQyMSwgZDIxLCBkMjMKKysJdmFkZC5pNjQJZDI1LCBkMjUsIGQyMQorKwl2YWRkLmk2NAlkNCwgZDQsIGQyNQorKwl2emlwLmkzMglxMCwgcTgKKysJdmFkZC5pNjQJZDEyLCBkNCwgZDE0CisrCWFkZAkJcjIsIHI2LCAjOAorKwl2c3QxLjgJCWQwLCBbcjIsIDogNjRdCisrCXZzdWIuaTY0CWQxOSwgZDE5LCBkOQorKwlhZGQJCXIyLCByMiwgIzE2CisrCXZzdDEuOAkJZDE2LCBbcjIsIDogNjRdCisrCXZzaHIuczY0CWQyMiwgZDEyLCAjMjYKKysJdmFuZAkJcTAsIHE2LCBxMQorKwl2YWRkLmk2NAlkMTAsIGQxMCwgZDIyCisrCXZ6aXAuaTMyCXEzLCBxOQorKwl2c3ViLmk2NAlkNCwgZDQsIGQwCisrCXN1YgkJcjIsIHIyLCAjOAorKwl2c3QxLjgJCWQ2LCBbcjIsIDogNjRdCisrCWFkZAkJcjIsIHIyLCAjMTYKKysJdnN0MS44CQlkMTgsIFtyMiwgOiA2NF0KKysJdnppcC5pMzIJcTIsIHE1CisrCXN1YgkJcjIsIHIyLCAjMzIKKysJdnN0MS44CQlkNCwgW3IyLCA6IDY0XQorKwljbXAJCXI0LCAjMAorKwliZXEJCS5fc2tpcHBvc3Rjb3B5CisrCWFkZAkJcjIsIHIzLCAjMTQ0CisrCW1vdgkJcjQsIHI0CisrCXZsZDEuOAkJe2QwLWQxfSwgW3IyLCA6IDEyOF0hCisrCXZsZDEuOAkJe2QyLWQzfSwgW3IyLCA6IDEyOF0hCisrCXZsZDEuOAkJe2Q0fSwgW3IyLCA6IDY0XQorKwl2c3QxLjgJCXtkMC1kMX0sIFtyNCwgOiAxMjhdIQorKwl2c3QxLjgJCXtkMi1kM30sIFtyNCwgOiAxMjhdIQorKwl2c3QxLjgJCWQ0LCBbcjQsIDogNjRdCisrLl9za2lwcG9zdGNvcHk6CisrCWNtcAkJcjEsICMxCisrCWJuZQkJLl9za2lwZmluYWxjb3B5CisrCWFkZAkJcjIsIHIzLCAjMjg4CisrCWFkZAkJcjQsIHIzLCAjMTQ0CisrCXZsZDEuOAkJe2QwLWQxfSwgW3IyLCA6IDEyOF0hCisrCXZsZDEuOAkJe2QyLWQzfSwgW3IyLCA6IDEyOF0hCisrCXZsZDEuOAkJe2Q0fSwgW3IyLCA6IDY0XQorKwl2c3QxLjgJCXtkMC1kMX0sIFtyNCwgOiAxMjhdIQorKwl2c3QxLjgJCXtkMi1kM30sIFtyNCwgOiAxMjhdIQorKwl2c3QxLjgJCWQ0LCBbcjQsIDogNjRdCisrLl9za2lwZmluYWxjb3B5OgorKwlhZGQJCXIxLCByMSwgIzEKKysJY21wCQlyMSwgIzEyCisrCWJsbwkJLl9pbnZlcnRsb29wCisrCWFkZAkJcjEsIHIzLCAjMTQ0CisrCWxkcgkJcjIsIFtyMV0sICM0CisrCWxkcgkJcjMsIFtyMV0sICM0CisrCWxkcgkJcjQsIFtyMV0sICM0CisrCWxkcgkJcjUsIFtyMV0sICM0CisrCWxkcgkJcjYsIFtyMV0sICM0CisrCWxkcgkJcjcsIFtyMV0sICM0CisrCWxkcgkJcjgsIFtyMV0sICM0CisrCWxkcgkJcjksIFtyMV0sICM0CisrCWxkcgkJcjEwLCBbcjFdLCAjNAorKwlsZHIJCXIxLCBbcjFdCisrCWFkZAkJcjExLCByMSwgcjEsIExTTCAjNAorKwlhZGQJCXIxMSwgcjExLCByMSwgTFNMICMxCisrCWFkZAkJcjExLCByMTEsICMxNjc3NzIxNgorKwltb3YJCXIxMSwgcjExLCBBU1IgIzI1CisrCWFkZAkJcjExLCByMTEsIHIyCisrCW1vdgkJcjExLCByMTEsIEFTUiAjMjYKKysJYWRkCQlyMTEsIHIxMSwgcjMKKysJbW92CQlyMTEsIHIxMSwgQVNSICMyNQorKwlhZGQJCXIxMSwgcjExLCByNAorKwltb3YJCXIxMSwgcjExLCBBU1IgIzI2CisrCWFkZAkJcjExLCByMTEsIHI1CisrCW1vdgkJcjExLCByMTEsIEFTUiAjMjUKKysJYWRkCQlyMTEsIHIxMSwgcjYKKysJbW92CQlyMTEsIHIxMSwgQVNSICMyNgorKwlhZGQJCXIxMSwgcjExLCByNworKwltb3YJCXIxMSwgcjExLCBBU1IgIzI1CisrCWFkZAkJcjExLCByMTEsIHI4CisrCW1vdgkJcjExLCByMTEsIEFTUiAjMjYKKysJYWRkCQlyMTEsIHIxMSwgcjkKKysJbW92CQlyMTEsIHIxMSwgQVNSICMyNQorKwlhZGQJCXIxMSwgcjExLCByMTAKKysJbW92CQlyMTEsIHIxMSwgQVNSICMyNgorKwlhZGQJCXIxMSwgcjExLCByMQorKwltb3YJCXIxMSwgcjExLCBBU1IgIzI1CisrCWFkZAkJcjIsIHIyLCByMTEKKysJYWRkCQlyMiwgcjIsIHIxMSwgTFNMICMxCisrCWFkZAkJcjIsIHIyLCByMTEsIExTTCAjNAorKwltb3YJCXIxMSwgcjIsIEFTUiAjMjYKKysJYWRkCQlyMywgcjMsIHIxMQorKwlzdWIJCXIyLCByMiwgcjExLCBMU0wgIzI2CisrCW1vdgkJcjExLCByMywgQVNSICMyNQorKwlhZGQJCXI0LCByNCwgcjExCisrCXN1YgkJcjMsIHIzLCByMTEsIExTTCAjMjUKKysJbW92CQlyMTEsIHI0LCBBU1IgIzI2CisrCWFkZAkJcjUsIHI1LCByMTEKKysJc3ViCQlyNCwgcjQsIHIxMSwgTFNMICMyNgorKwltb3YJCXIxMSwgcjUsIEFTUiAjMjUKKysJYWRkCQlyNiwgcjYsIHIxMQorKwlzdWIJCXI1LCByNSwgcjExLCBMU0wgIzI1CisrCW1vdgkJcjExLCByNiwgQVNSICMyNgorKwlhZGQJCXI3LCByNywgcjExCisrCXN1YgkJcjYsIHI2LCByMTEsIExTTCAjMjYKKysJbW92CQlyMTEsIHI3LCBBU1IgIzI1CisrCWFkZAkJcjgsIHI4LCByMTEKKysJc3ViCQlyNywgcjcsIHIxMSwgTFNMICMyNQorKwltb3YJCXIxMSwgcjgsIEFTUiAjMjYKKysJYWRkCQlyOSwgcjksIHIxMQorKwlzdWIJCXI4LCByOCwgcjExLCBMU0wgIzI2CisrCW1vdgkJcjExLCByOSwgQVNSICMyNQorKwlhZGQJCXIxMCwgcjEwLCByMTEKKysJc3ViCQlyOSwgcjksIHIxMSwgTFNMICMyNQorKwltb3YJCXIxMSwgcjEwLCBBU1IgIzI2CisrCWFkZAkJcjEsIHIxLCByMTEKKysJc3ViCQlyMTAsIHIxMCwgcjExLCBMU0wgIzI2CisrCW1vdgkJcjExLCByMSwgQVNSICMyNQorKwlzdWIJCXIxLCByMSwgcjExLCBMU0wgIzI1CisrCWFkZAkJcjIsIHIyLCByMywgTFNMICMyNgorKwltb3YJCXIzLCByMywgTFNSICM2CisrCWFkZAkJcjMsIHIzLCByNCwgTFNMICMxOQorKwltb3YJCXI0LCByNCwgTFNSICMxMworKwlhZGQJCXI0LCByNCwgcjUsIExTTCAjMTMKKysJbW92CQlyNSwgcjUsIExTUiAjMTkKKysJYWRkCQlyNSwgcjUsIHI2LCBMU0wgIzYKKysJYWRkCQlyNiwgcjcsIHI4LCBMU0wgIzI1CisrCW1vdgkJcjcsIHI4LCBMU1IgIzcKKysJYWRkCQlyNywgcjcsIHI5LCBMU0wgIzE5CisrCW1vdgkJcjgsIHI5LCBMU1IgIzEzCisrCWFkZAkJcjgsIHI4LCByMTAsIExTTCAjMTIKKysJbW92CQlyOSwgcjEwLCBMU1IgIzIwCisrCWFkZAkJcjEsIHI5LCByMSwgTFNMICM2CisrCXN0cgkJcjIsIFtyMF0sICM0CisrCXN0cgkJcjMsIFtyMF0sICM0CisrCXN0cgkJcjQsIFtyMF0sICM0CisrCXN0cgkJcjUsIFtyMF0sICM0CisrCXN0cgkJcjYsIFtyMF0sICM0CisrCXN0cgkJcjcsIFtyMF0sICM0CisrCXN0cgkJcjgsIFtyMF0sICM0CisrCXN0cgkJcjEsIFtyMF0KKysJbGRyZAkJcjQsIFtzcCwgIzBdCisrCWxkcmQJCXI2LCBbc3AsICM4XQorKwlsZHJkCQlyOCwgW3NwLCAjMTZdCisrCWxkcmQJCXIxMCwgW3NwLCAjMjRdCisrCWxkcgkJcjEyLCBbc3AsICM0ODBdCisrCWxkcgkJcjE0LCBbc3AsICM0ODRdCisrCWxkcgkJcjAsID0wCisrCW1vdgkJc3AsIHIxMgorKwl2cG9wCQl7cTQsIHE1LCBxNiwgcTd9CisrCWJ4CQlscgpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAzMS1jcnlwdG8tYXJtLWN1cnZlMjU1MTktd2lyZS11cC1ORU9OLWltcGxlbWVudGF0aW9uLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAzMS1jcnlwdG8tYXJtLWN1cnZlMjU1MTktd2lyZS11cC1ORU9OLWltcGxlbWVudGF0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NDcyNmIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDMxLWNyeXB0by1hcm0tY3VydmUyNTUxOS13aXJlLXVwLU5FT04taW1wbGVtZW50YXRpb24ucGF0Y2gKQEAgLTAsMCArMSwxMDU4IEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogRnJpLCA4IE5vdiAyMDE5IDEzOjIyOjM4ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyeXB0bzogYXJtL2N1cnZlMjU1MTkgLSB3aXJlIHVwIE5FT04gaW1wbGVtZW50YXRpb24KKworY29tbWl0IGQ4ZjEzMDhhMDI1ZmM3ZTAwNDE0MTk0ZWQ3NDJkNWYwNWEyMWUxM2MgdXBzdHJlYW0uCisKK1RoaXMgcG9ydHMgdGhlIFNVUEVSQ09QIGltcGxlbWVudGF0aW9uIGZvciB1c2FnZSBpbiBrZXJuZWwgc3BhY2UuIEluCithZGRpdGlvbiB0byB0aGUgdXN1YWwgaGVhZGVyLCBtYWNybywgYW5kIHN0eWxlIGNoYW5nZXMgcmVxdWlyZWQgZm9yCitrZXJuZWwgc3BhY2UsIGl0IG1ha2VzIGEgZmV3IHNtYWxsIGNoYW5nZXMgdG8gdGhlIGNvZGU6CisKKyAgLSBUaGUgc3RhY2sgYWxpZ25tZW50IGlzIHJlbGF4ZWQgdG8gMTYgYnl0ZXMuCisgIC0gU3VwZXJmbHVvdXMgbW92IHN0YXRlbWVudHMgaGF2ZSBiZWVuIHJlbW92ZWQuCisgIC0gbGRyIGZvciBjb25zdGFudHMgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBtb3Z3LgorICAtIGxkcmVxIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggbW92ZXEuCisgIC0gVGhlIHN0ciBlcGlsb2d1ZSBoYXMgYmVlbiBtYWRlIG1vcmUgaWRpb21hdGljLgorICAtIFNJTUQgcmVnaXN0ZXJzIGFyZSBub3QgcHVzaGVkIGFuZCBwb3BwZWQgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kLgorICAtIFRoZSBwcm9sb2d1ZSBhbmQgZXBpbG9ndWUgaGF2ZSBiZWVuIG1hZGUgaWRpb21hdGljLgorICAtIEEgaG9sZSBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIHN0YWNrLCBzYXZpbmcgMzIgYnl0ZXMuCisgIC0gV2Ugd3JpdGUtYmFjayB0aGUgYmFzZSByZWdpc3RlciB3aGVuZXZlciBwb3NzaWJsZSBmb3IgdmxkMS44LgorICAtIFNvbWUgbXVsdGlwbGljYXRpb25zIGhhdmUgYmVlbiByZW9yZGVyZWQgZm9yIGJldHRlciBBNyBwZXJmb3JtYW5jZS4KKworVGhlcmUgYXJlIG1vcmUgb3Bwb3J0dW5pdGllcyBmb3IgY2xlYW51cCwgc2luY2UgdGhpcyBjb2RlIGlzIGZyb20gcWhhc20sCit3aGljaCBkb2Vzbid0IGFsd2F5cyBkbyB0aGUgbW9zdCBvcHBvcnR1bmUgdGhpbmcuIEJ1dCBldmVuIHByaW9yIHRvCitleHRlbnNpdmUgaGFuZCBvcHRpbWl6YXRpb25zLCB0aGlzIGNvZGUgZGVsaXZlcnMgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UKK2ltcHJvdmVtZW50cyAoZ2l2ZW4gaW4gZ2V0X2N5Y2xlcygpIHBlciBjYWxsKToKKworCQkgICAgICAtLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tCisJICAgICAgICAgICAgIHwgZ2VuZXJpYyBDIHwgdGhpcyBjb21taXQgfAorCSAtLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tLQorCXwgQ29ydGV4LUE3ICB8ICAgICA0OTEzNiB8ICAgICAgIDIyMzk1IHwKKwkgLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0tIC0tLS0tLS0tLS0tLS0KKwl8IENvcnRleC1BMTcgfCAgICAgMTczMjYgfCAgICAgICAgNDk4MyB8CisJIC0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tCisKK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorW2FyZGI6IC0gbW92ZSB0byBhcmNoL2FybS9jcnlwdG8KKyAgICAgICAtIHdpcmUgaW50byBsaWIvY3J5cHRvIGZyYW1ld29yaworICAgICAgIC0gaW1wbGVtZW50IGNyeXB0byBBUEkgS1BQIGhvb2tzIF0KK1NpZ25lZC1vZmYtYnk6IEFyZCBCaWVzaGV1dmVsIDxhcmRiQGtlcm5lbC5vcmc+CitTaWduZWQtb2ZmLWJ5OiBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGFyY2gvYXJtL2NyeXB0by9LY29uZmlnICAgICAgICAgICB8ICAgNiArCisgYXJjaC9hcm0vY3J5cHRvL01ha2VmaWxlICAgICAgICAgIHwgICAyICsKKyBhcmNoL2FybS9jcnlwdG8vY3VydmUyNTUxOS1jb3JlLlMgfCAzNDcgKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tCisgYXJjaC9hcm0vY3J5cHRvL2N1cnZlMjU1MTktZ2x1ZS5jIHwgMTI3ICsrKysrKysrKysrCisgNCBmaWxlcyBjaGFuZ2VkLCAyODcgaW5zZXJ0aW9ucygrKSwgMTk1IGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBhcmNoL2FybS9jcnlwdG8vY3VydmUyNTUxOS1nbHVlLmMKKworLS0tIGEvYXJjaC9hcm0vY3J5cHRvL0tjb25maWcKKysrKyBiL2FyY2gvYXJtL2NyeXB0by9LY29uZmlnCitAQCAtMTQxLDQgKzE0MSwxMCBAQCBjb25maWcgQ1JZUFRPX05IUE9MWTEzMDVfTkVPTgorIAlkZXBlbmRzIG9uIEtFUk5FTF9NT0RFX05FT04KKyAJc2VsZWN0IENSWVBUT19OSFBPTFkxMzA1CisgCisrY29uZmlnIENSWVBUT19DVVJWRTI1NTE5X05FT04KKysJdHJpc3RhdGUgIk5FT04gYWNjZWxlcmF0ZWQgQ3VydmUyNTUxOSBzY2FsYXIgbXVsdGlwbGljYXRpb24gbGlicmFyeSIKKysJZGVwZW5kcyBvbiBLRVJORUxfTU9ERV9ORU9OCisrCXNlbGVjdCBDUllQVE9fTElCX0NVUlZFMjU1MTlfR0VORVJJQworKwlzZWxlY3QgQ1JZUFRPX0FSQ0hfSEFWRV9MSUJfQ1VSVkUyNTUxOQorKworIGVuZGlmCistLS0gYS9hcmNoL2FybS9jcnlwdG8vTWFrZWZpbGUKKysrKyBiL2FyY2gvYXJtL2NyeXB0by9NYWtlZmlsZQorQEAgLTEyLDYgKzEyLDcgQEAgb2JqLSQoQ09ORklHX0NSWVBUT19TSEE1MTJfQVJNKSArPSBzaGE1MQorIG9iai0kKENPTkZJR19DUllQVE9fQ0hBQ0hBMjBfTkVPTikgKz0gY2hhY2hhLW5lb24ubworIG9iai0kKENPTkZJR19DUllQVE9fUE9MWTEzMDVfQVJNKSArPSBwb2x5MTMwNS1hcm0ubworIG9iai0kKENPTkZJR19DUllQVE9fTkhQT0xZMTMwNV9ORU9OKSArPSBuaHBvbHkxMzA1LW5lb24ubworK29iai0kKENPTkZJR19DUllQVE9fQ1VSVkUyNTUxOV9ORU9OKSArPSBjdXJ2ZTI1NTE5LW5lb24ubworIAorIGNlLW9iai0kKENPTkZJR19DUllQVE9fQUVTX0FSTV9DRSkgKz0gYWVzLWFybS1jZS5vCisgY2Utb2JqLSQoQ09ORklHX0NSWVBUT19TSEExX0FSTV9DRSkgKz0gc2hhMS1hcm0tY2UubworQEAgLTU4LDYgKzU5LDcgQEAgY2hhY2hhLW5lb24teSA6PSBjaGFjaGEtc2NhbGFyLWNvcmUubyBjaAorIGNoYWNoYS1uZW9uLSQoQ09ORklHX0tFUk5FTF9NT0RFX05FT04pICs9IGNoYWNoYS1uZW9uLWNvcmUubworIHBvbHkxMzA1LWFybS15IDo9IHBvbHkxMzA1LWNvcmUubyBwb2x5MTMwNS1nbHVlLm8KKyBuaHBvbHkxMzA1LW5lb24teSA6PSBuaC1uZW9uLWNvcmUubyBuaHBvbHkxMzA1LW5lb24tZ2x1ZS5vCisrY3VydmUyNTUxOS1uZW9uLXkgOj0gY3VydmUyNTUxOS1jb3JlLm8gY3VydmUyNTUxOS1nbHVlLm8KKyAKKyBpZmRlZiBSRUdFTkVSQVRFX0FSTV9DUllQVE8KKyBxdWlldF9jbWRfcGVybCA9IFBFUkwgICAgJEAKKy0tLSBhL2FyY2gvYXJtL2NyeXB0by9jdXJ2ZTI1NTE5LWNvcmUuUworKysrIGIvYXJjaC9hcm0vY3J5cHRvL2N1cnZlMjU1MTktY29yZS5TCitAQCAtMSw0MyArMSwzNSBAQAorKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVCAqLworIC8qCistICogUHVibGljIGRvbWFpbiBjb2RlIGZyb20gRGFuaWVsIEouIEJlcm5zdGVpbiBhbmQgUGV0ZXIgU2Nod2FiZSwgZnJvbQorLSAqIFNVUEVSQ09QJ3MgY3VydmUyNTUxOS9uZW9uMi9zY2FsYXJtdWx0LnMuCisrICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKyAqCisrICogQmFzZWQgb24gcHVibGljIGRvbWFpbiBjb2RlIGZyb20gRGFuaWVsIEouIEJlcm5zdGVpbiBhbmQgUGV0ZXIgU2Nod2FiZS4gVGhpcworKyAqIGJlZ2FuIGZyb20gU1VQRVJDT1AncyBjdXJ2ZTI1NTE5L25lb24yL3NjYWxhcm11bHQucywgYnV0IGhhcyBzdWJzZXF1ZW50bHkgYmVlbgorKyAqIG1hbnVhbGx5IHJld29ya2VkIGZvciB1c2UgaW4ga2VybmVsIHNwYWNlLgorICAqLworIAorLS5mcHUgbmVvbgorKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisrCisgLnRleHQKKysuZnB1IG5lb24KKysuYXJjaCBhcm12Ny1hCisgLmFsaWduIDQKKy0uZ2xvYmFsIF9jcnlwdG9fc2NhbGFybXVsdF9jdXJ2ZTI1NTE5X25lb24yCistLmdsb2JhbCBjcnlwdG9fc2NhbGFybXVsdF9jdXJ2ZTI1NTE5X25lb24yCistLnR5cGUgX2NyeXB0b19zY2FsYXJtdWx0X2N1cnZlMjU1MTlfbmVvbjIgU1RUX0ZVTkMKKy0udHlwZSBjcnlwdG9fc2NhbGFybXVsdF9jdXJ2ZTI1NTE5X25lb24yIFNUVF9GVU5DCistCV9jcnlwdG9fc2NhbGFybXVsdF9jdXJ2ZTI1NTE5X25lb24yOgorLQljcnlwdG9fc2NhbGFybXVsdF9jdXJ2ZTI1NTE5X25lb24yOgorLQl2cHVzaAkJe3E0LCBxNSwgcTYsIHE3fQorLQltb3YJCXIxMiwgc3AKKy0Jc3ViCQlzcCwgc3AsICM3MzYKKy0JYW5kCQlzcCwgc3AsICMweGZmZmZmZmUwCistCXN0cmQJCXI0LCBbc3AsICMwXQorLQlzdHJkCQlyNiwgW3NwLCAjOF0KKy0Jc3RyZAkJcjgsIFtzcCwgIzE2XQorLQlzdHJkCQlyMTAsIFtzcCwgIzI0XQorLQlzdHIJCXIxMiwgW3NwLCAjNDgwXQorLQlzdHIJCXIxNCwgW3NwLCAjNDg0XQorLQltb3YJCXIwLCByMAorLQltb3YJCXIxLCByMQorLQltb3YJCXIyLCByMgorLQlhZGQJCXIzLCBzcCwgIzMyCistCWxkcgkJcjQsID0wCistCWxkcgkJcjUsID0yNTQKKysKKytFTlRSWShjdXJ2ZTI1NTE5X25lb24pCisrCXB1c2gJCXtyNC1yMTEsIGxyfQorKwltb3YJCWlwLCBzcAorKwlzdWIJCXIzLCBzcCwgIzcwNAorKwlhbmQJCXIzLCByMywgIzB4ZmZmZmZmZjAKKysJbW92CQlzcCwgcjMKKysJbW92dwkJcjQsICMwCisrCW1vdncJCXI1LCAjMjU0CisgCXZtb3YuaTMyCXEwLCAjMQorIAl2c2hyLnU2NAlxMSwgcTAsICM3CisgCXZzaHIudTY0CXEwLCBxMCwgIzgKKyAJdm1vdi5pMzIJZDQsICMxOQorIAl2bW92LmkzMglkNSwgIzM4CistCWFkZAkJcjYsIHNwLCAjNTEyCistCXZzdDEuOAkJe2QyLWQzfSwgW3I2LCA6IDEyOF0KKy0JYWRkCQlyNiwgc3AsICM1MjgKKy0JdnN0MS44CQl7ZDAtZDF9LCBbcjYsIDogMTI4XQorLQlhZGQJCXI2LCBzcCwgIzU0NAorKwlhZGQJCXI2LCBzcCwgIzQ4MAorKwl2c3QxLjgJCXtkMi1kM30sIFtyNiwgOiAxMjhdIQorKwl2c3QxLjgJCXtkMC1kMX0sIFtyNiwgOiAxMjhdIQorIAl2c3QxLjgJCXtkNC1kNX0sIFtyNiwgOiAxMjhdCisgCWFkZAkJcjYsIHIzLCAjMAorIAl2bW92LmkzMglxMiwgIzAKK0BAIC00NSwxMiArMzcsMTIgQEAKKyAJdnN0MS44CQl7ZDQtZDV9LCBbcjYsIDogMTI4XSEKKyAJdnN0MS44CQlkNCwgW3I2LCA6IDY0XQorIAlhZGQJCXI2LCByMywgIzAKKy0JbGRyCQlyNywgPTk2MAorKwltb3Z3CQlyNywgIzk2MAorIAlzdWIJCXI3LCByNywgIzIKKyAJbmVnCQlyNywgcjcKKyAJc3ViCQlyNywgcjcsIHI3LCBMU0wgIzcKKyAJc3RyCQlyNywgW3I2XQorLQlhZGQJCXI2LCBzcCwgIzcwNAorKwlhZGQJCXI2LCBzcCwgIzY3MgorIAl2bGQxLjgJCXtkNC1kNX0sIFtyMV0hCisgCXZsZDEuOAkJe2Q2LWQ3fSwgW3IxXQorIAl2c3QxLjgJCXtkNC1kNX0sIFtyNiwgOiAxMjhdIQorQEAgLTIxMiwxNSArMjA0LDE1IEBACisgCXZzdDEuOAkJe2QwLWQxfSwgW3I2LCA6IDEyOF0hCisgCXZzdDEuOAkJe2QyLWQzfSwgW3I2LCA6IDEyOF0hCisgCXZzdDEuOAkJZDQsIFtyNiwgOiA2NF0KKy0uX21haW5sb29wOgorKy5MbWFpbmxvb3A6CisgCW1vdgkJcjIsIHI1LCBMU1IgIzMKKyAJYW5kCQlyNiwgcjUsICM3CisgCWxkcmIJCXIyLCBbcjEsIHIyXQorIAltb3YJCXIyLCByMiwgTFNSIHI2CisgCWFuZAkJcjIsIHIyLCAjMQorLQlzdHIJCXI1LCBbc3AsICM0ODhdCisrCXN0cgkJcjUsIFtzcCwgIzQ1Nl0KKyAJZW9yCQlyNCwgcjQsIHIyCistCXN0cgkJcjIsIFtzcCwgIzQ5Ml0KKysJc3RyCQlyMiwgW3NwLCAjNDYwXQorIAluZWcJCXIyLCByNAorIAlhZGQJCXI0LCByMywgIzk2CisgCWFkZAkJcjUsIHIzLCAjMTkyCitAQCAtMjkxLDcgKzI4Myw3IEBACisgCXZzdWIuaTMyCXEwLCBxMSwgcTMKKyAJdnN0MS44CQlkNCwgW3I0LCA6IDY0XQorIAl2c3QxLjgJCWQwLCBbcjYsIDogNjRdCistCWFkZAkJcjIsIHNwLCAjNTQ0CisrCWFkZAkJcjIsIHNwLCAjNTEyCisgCWFkZAkJcjQsIHIzLCAjOTYKKyAJYWRkCQlyNSwgcjMsICMxNDQKKyAJdmxkMS44CQl7ZDAtZDF9LCBbcjIsIDogMTI4XQorQEAgLTM2MSwxNCArMzUzLDEzIEBACisgCXZtbGFsLnMzMglxMCwgZDEyLCBkOAorIAl2bWxhbC5zMzIJcTAsIGQxMywgZDE3CisgCXZtbGFsLnMzMglxMCwgZDYsIGQ2CistCWFkZAkJcjIsIHNwLCAjNTEyCistCXZsZDEuOAkJe2QxOC1kMTl9LCBbcjIsIDogMTI4XQorKwlhZGQJCXIyLCBzcCwgIzQ4MAorKwl2bGQxLjgJCXtkMTgtZDE5fSwgW3IyLCA6IDEyOF0hCisgCXZtdWxsLnMzMglxMywgZDE2LCBkNworIAl2bWxhbC5zMzIJcTMsIGQxMCwgZDE1CisgCXZtbGFsLnMzMglxMywgZDExLCBkMTQKKyAJdm1sYWwuczMyCXEzLCBkMTIsIGQ5CisgCXZtbGFsLnMzMglxMywgZDEzLCBkOAorLQlhZGQJCXIyLCBzcCwgIzUyOAorIAl2bGQxLjgJCXtkOC1kOX0sIFtyMiwgOiAxMjhdCisgCXZhZGQuaTY0CXE1LCBxMTIsIHE5CisgCXZhZGQuaTY0CXE2LCBxMTUsIHE5CitAQCAtNTAyLDIyICs0OTMsMTkgQEAKKyAJdmFkZC5pMzIJcTUsIHE1LCBxMAorIAl2dHJuLjMyCQlxMTEsIHExNAorIAl2YWRkLmkzMglxNiwgcTYsIHEzCistCWFkZAkJcjIsIHNwLCAjNTYwCisrCWFkZAkJcjIsIHNwLCAjNTI4CisgCXZhZGQuaTMyCXExMCwgcTEwLCBxMgorIAl2dHJuLjMyCQlkMjQsIGQyNQorLQl2c3QxLjgJCXtkMTItZDEzfSwgW3IyLCA6IDEyOF0KKysJdnN0MS44CQl7ZDEyLWQxM30sIFtyMiwgOiAxMjhdIQorIAl2c2hsLmkzMglxNiwgcTEzLCAjMQorLQlhZGQJCXIyLCBzcCwgIzU3NgorLQl2c3QxLjgJCXtkMjAtZDIxfSwgW3IyLCA6IDEyOF0KKysJdnN0MS44CQl7ZDIwLWQyMX0sIFtyMiwgOiAxMjhdIQorIAl2c2hsLmkzMglxMTAsIHExNCwgIzEKKy0JYWRkCQlyMiwgc3AsICM1OTIKKy0JdnN0MS44CQl7ZDEyLWQxM30sIFtyMiwgOiAxMjhdCisrCXZzdDEuOAkJe2QxMi1kMTN9LCBbcjIsIDogMTI4XSEKKyAJdnNobC5pMzIJcTE1LCBxMTIsICMxCisgCXZhZGQuaTMyCXE4LCBxOCwgcTQKKyAJdmV4dC4zMgkJZDEwLCBkMzEsIGQzMCwgIzAKKyAJdmFkZC5pMzIJcTcsIHE3LCBxMQorLQlhZGQJCXIyLCBzcCwgIzYwOAorLQl2c3QxLjgJCXtkMTYtZDE3fSwgW3IyLCA6IDEyOF0KKysJdnN0MS44CQl7ZDE2LWQxN30sIFtyMiwgOiAxMjhdIQorIAl2bXVsbC5zMzIJcTgsIGQxOCwgZDUKKyAJdm1sYWwuczMyCXE4LCBkMjYsIGQ0CisgCXZtbGFsLnMzMglxOCwgZDE5LCBkOQorQEAgLTUyOCw4ICs1MTYsNyBAQAorIAl2bWxhbC5zMzIJcTgsIGQyOSwgZDEKKyAJdm1sYWwuczMyCXE4LCBkMjQsIGQ2CisgCXZtbGFsLnMzMglxOCwgZDI1LCBkMAorLQlhZGQJCXIyLCBzcCwgIzYyNAorLQl2c3QxLjgJCXtkMTQtZDE1fSwgW3IyLCA6IDEyOF0KKysJdnN0MS44CQl7ZDE0LWQxNX0sIFtyMiwgOiAxMjhdIQorIAl2bXVsbC5zMzIJcTIsIGQxOCwgZDQKKyAJdm1sYWwuczMyCXEyLCBkMTIsIGQ5CisgCXZtbGFsLnMzMglxMiwgZDEzLCBkOAorQEAgLTUzNyw4ICs1MjQsNyBAQAorIAl2bWxhbC5zMzIJcTIsIGQyMiwgZDIKKyAJdm1sYWwuczMyCXEyLCBkMjMsIGQxCisgCXZtbGFsLnMzMglxMiwgZDI0LCBkMAorLQlhZGQJCXIyLCBzcCwgIzY0MAorLQl2c3QxLjgJCXtkMjAtZDIxfSwgW3IyLCA6IDEyOF0KKysJdnN0MS44CQl7ZDIwLWQyMX0sIFtyMiwgOiAxMjhdIQorIAl2bXVsbC5zMzIJcTcsIGQxOCwgZDkKKyAJdm1sYWwuczMyCXE3LCBkMjYsIGQzCisgCXZtbGFsLnMzMglxNywgZDE5LCBkOAorQEAgLTU0NywxNCArNTMzLDEyIEBACisgCXZtbGFsLnMzMglxNywgZDI4LCBkMQorIAl2bWxhbC5zMzIJcTcsIGQyMywgZDYKKyAJdm1sYWwuczMyCXE3LCBkMjksIGQwCistCWFkZAkJcjIsIHNwLCAjNjU2CistCXZzdDEuOAkJe2QxMC1kMTF9LCBbcjIsIDogMTI4XQorKwl2c3QxLjgJCXtkMTAtZDExfSwgW3IyLCA6IDEyOF0hCisgCXZtdWxsLnMzMglxNSwgZDE4LCBkMworIAl2bWxhbC5zMzIJcTUsIGQxOSwgZDIKKyAJdm1sYWwuczMyCXE1LCBkMjIsIGQxCisgCXZtbGFsLnMzMglxNSwgZDIzLCBkMAorIAl2bWxhbC5zMzIJcTUsIGQxMiwgZDgKKy0JYWRkCQlyMiwgc3AsICM2NzIKKyAJdnN0MS44CQl7ZDE2LWQxN30sIFtyMiwgOiAxMjhdCisgCXZtdWxsLnMzMglxNCwgZDE4LCBkOAorIAl2bWxhbC5zMzIJcTQsIGQyNiwgZDIKK0BAIC01NjYsNyArNTUwLDcgQEAKKyAJdm1sYWwuczMyCXE4LCBkMjYsIGQxCisgCXZtbGFsLnMzMglxOCwgZDE5LCBkNgorIAl2bWxhbC5zMzIJcTgsIGQyNywgZDAKKy0JYWRkCQlyMiwgc3AsICM1NzYKKysJYWRkCQlyMiwgc3AsICM1NDQKKyAJdmxkMS44CQl7ZDIwLWQyMX0sIFtyMiwgOiAxMjhdCisgCXZtbGFsLnMzMglxNywgZDI0LCBkMjEKKyAJdm1sYWwuczMyCXE3LCBkMjUsIGQyMAorQEAgLTU3NSwzMiArNTU5LDMwIEBACisgCXZtbGFsLnMzMglxOCwgZDIyLCBkMjEKKyAJdm1sYWwuczMyCXE4LCBkMjgsIGQyMAorIAl2bWxhbC5zMzIJcTUsIGQyNCwgZDIwCistCWFkZAkJcjIsIHNwLCAjNTc2CisgCXZzdDEuOAkJe2QxNC1kMTV9LCBbcjIsIDogMTI4XQorIAl2bXVsbC5zMzIJcTcsIGQxOCwgZDYKKyAJdm1sYWwuczMyCXE3LCBkMjYsIGQwCistCWFkZAkJcjIsIHNwLCAjNjU2CisrCWFkZAkJcjIsIHNwLCAjNjI0CisgCXZsZDEuOAkJe2QzMC1kMzF9LCBbcjIsIDogMTI4XQorIAl2bWxhbC5zMzIJcTIsIGQzMCwgZDIxCisgCXZtbGFsLnMzMglxNywgZDE5LCBkMjEKKyAJdm1sYWwuczMyCXE3LCBkMjcsIGQyMAorLQlhZGQJCXIyLCBzcCwgIzYyNAorKwlhZGQJCXIyLCBzcCwgIzU5MgorIAl2bGQxLjgJCXtkMjYtZDI3fSwgW3IyLCA6IDEyOF0KKyAJdm1sYWwuczMyCXE0LCBkMjUsIGQyNworIAl2bWxhbC5zMzIJcTgsIGQyOSwgZDI3CisgCXZtbGFsLnMzMglxOCwgZDI1LCBkMjYKKyAJdm1sYWwuczMyCXE3LCBkMjgsIGQyNworIAl2bWxhbC5zMzIJcTcsIGQyOSwgZDI2CistCWFkZAkJcjIsIHNwLCAjNjA4CisrCWFkZAkJcjIsIHNwLCAjNTc2CisgCXZsZDEuOAkJe2QyOC1kMjl9LCBbcjIsIDogMTI4XQorIAl2bWxhbC5zMzIJcTQsIGQyNCwgZDI5CisgCXZtbGFsLnMzMglxOCwgZDIzLCBkMjkKKyAJdm1sYWwuczMyCXE4LCBkMjQsIGQyOAorIAl2bWxhbC5zMzIJcTcsIGQyMiwgZDI5CisgCXZtbGFsLnMzMglxNywgZDIzLCBkMjgKKy0JYWRkCQlyMiwgc3AsICM2MDgKKyAJdnN0MS44CQl7ZDgtZDl9LCBbcjIsIDogMTI4XQorLQlhZGQJCXIyLCBzcCwgIzU2MAorKwlhZGQJCXIyLCBzcCwgIzUyOAorIAl2bGQxLjgJCXtkOC1kOX0sIFtyMiwgOiAxMjhdCisgCXZtbGFsLnMzMglxNywgZDI0LCBkOQorIAl2bWxhbC5zMzIJcTcsIGQyNSwgZDMxCitAQCAtNjIxLDM2ICs2MDMsMzYgQEAKKyAJdm1sYWwuczMyCXEwLCBkMjMsIGQyNgorIAl2bWxhbC5zMzIJcTAsIGQyNCwgZDMxCisgCXZtbGFsLnMzMglxMCwgZDE5LCBkMjAKKy0JYWRkCQlyMiwgc3AsICM2NDAKKysJYWRkCQlyMiwgc3AsICM2MDgKKyAJdmxkMS44CQl7ZDE4LWQxOX0sIFtyMiwgOiAxMjhdCisgCXZtbGFsLnMzMglxMiwgZDE4LCBkNworLQl2bWxhbC5zMzIJcTIsIGQxOSwgZDYKKyAJdm1sYWwuczMyCXE1LCBkMTgsIGQ2CistCXZtbGFsLnMzMglxNSwgZDE5LCBkMjEKKyAJdm1sYWwuczMyCXExLCBkMTgsIGQyMQorLQl2bWxhbC5zMzIJcTEsIGQxOSwgZDI5CisgCXZtbGFsLnMzMglxMCwgZDE4LCBkMjgKKy0Jdm1sYWwuczMyCXEwLCBkMTksIGQ5CisgCXZtbGFsLnMzMglxNiwgZDE4LCBkMjkKKysJdm1sYWwuczMyCXEyLCBkMTksIGQ2CisrCXZtbGFsLnMzMglxNSwgZDE5LCBkMjEKKysJdm1sYWwuczMyCXExLCBkMTksIGQyOQorKwl2bWxhbC5zMzIJcTAsIGQxOSwgZDkKKyAJdm1sYWwuczMyCXE2LCBkMTksIGQyOAorLQlhZGQJCXIyLCBzcCwgIzU5MgorKwlhZGQJCXIyLCBzcCwgIzU2MAorIAl2bGQxLjgJCXtkMTgtZDE5fSwgW3IyLCA6IDEyOF0KKy0JYWRkCQlyMiwgc3AsICM1MTIKKysJYWRkCQlyMiwgc3AsICM0ODAKKyAJdmxkMS44CQl7ZDIyLWQyM30sIFtyMiwgOiAxMjhdCisgCXZtbGFsLnMzMglxNSwgZDE5LCBkNworIAl2bWxhbC5zMzIJcTAsIGQxOCwgZDIxCisgCXZtbGFsLnMzMglxMCwgZDE5LCBkMjkKKyAJdm1sYWwuczMyCXE2LCBkMTgsIGQ2CistCWFkZAkJcjIsIHNwLCAjNTI4CisrCWFkZAkJcjIsIHNwLCAjNDk2CisgCXZsZDEuOAkJe2Q2LWQ3fSwgW3IyLCA6IDEyOF0KKyAJdm1sYWwuczMyCXE2LCBkMTksIGQyMQorLQlhZGQJCXIyLCBzcCwgIzU3NgorKwlhZGQJCXIyLCBzcCwgIzU0NAorIAl2bGQxLjgJCXtkMTgtZDE5fSwgW3IyLCA6IDEyOF0KKyAJdm1sYWwuczMyCXEwLCBkMzAsIGQ4CistCWFkZAkJcjIsIHNwLCAjNjcyCisrCWFkZAkJcjIsIHNwLCAjNjQwCisgCXZsZDEuOAkJe2QyMC1kMjF9LCBbcjIsIDogMTI4XQorIAl2bWxhbC5zMzIJcTUsIGQzMCwgZDI5CistCWFkZAkJcjIsIHNwLCAjNjA4CisrCWFkZAkJcjIsIHNwLCAjNTc2CisgCXZsZDEuOAkJe2QyNC1kMjV9LCBbcjIsIDogMTI4XQorIAl2bWxhbC5zMzIJcTEsIGQzMCwgZDI4CisgCXZhZGQuaTY0CXExMywgcTAsIHExMQorQEAgLTgyMywyMiArODA1LDE5IEBACisgCXZhZGQuaTMyCXE1LCBxNSwgcTAKKyAJdnRybi4zMgkJcTExLCBxMTQKKyAJdmFkZC5pMzIJcTYsIHE2LCBxMworLQlhZGQJCXIyLCBzcCwgIzU2MAorKwlhZGQJCXIyLCBzcCwgIzUyOAorIAl2YWRkLmkzMglxMTAsIHExMCwgcTIKKyAJdnRybi4zMgkJZDI0LCBkMjUKKy0JdnN0MS44CQl7ZDEyLWQxM30sIFtyMiwgOiAxMjhdCisrCXZzdDEuOAkJe2QxMi1kMTN9LCBbcjIsIDogMTI4XSEKKyAJdnNobC5pMzIJcTYsIHExMywgIzEKKy0JYWRkCQlyMiwgc3AsICM1NzYKKy0JdnN0MS44CQl7ZDIwLWQyMX0sIFtyMiwgOiAxMjhdCisrCXZzdDEuOAkJe2QyMC1kMjF9LCBbcjIsIDogMTI4XSEKKyAJdnNobC5pMzIJcTEwLCBxMTQsICMxCistCWFkZAkJcjIsIHNwLCAjNTkyCistCXZzdDEuOAkJe2QxMi1kMTN9LCBbcjIsIDogMTI4XQorKwl2c3QxLjgJCXtkMTItZDEzfSwgW3IyLCA6IDEyOF0hCisgCXZzaGwuaTMyCXExNSwgcTEyLCAjMQorIAl2YWRkLmkzMglxOCwgcTgsIHE0CisgCXZleHQuMzIJCWQxMCwgZDMxLCBkMzAsICMwCisgCXZhZGQuaTMyCXE3LCBxNywgcTEKKy0JYWRkCQlyMiwgc3AsICM2MDgKKy0JdnN0MS44CQl7ZDE2LWQxN30sIFtyMiwgOiAxMjhdCisrCXZzdDEuOAkJe2QxNi1kMTd9LCBbcjIsIDogMTI4XSEKKyAJdm11bGwuczMyCXE4LCBkMTgsIGQ1CisgCXZtbGFsLnMzMglxOCwgZDI2LCBkNAorIAl2bWxhbC5zMzIJcTgsIGQxOSwgZDkKK0BAIC04NDksOCArODI4LDcgQEAKKyAJdm1sYWwuczMyCXE4LCBkMjksIGQxCisgCXZtbGFsLnMzMglxOCwgZDI0LCBkNgorIAl2bWxhbC5zMzIJcTgsIGQyNSwgZDAKKy0JYWRkCQlyMiwgc3AsICM2MjQKKy0JdnN0MS44CQl7ZDE0LWQxNX0sIFtyMiwgOiAxMjhdCisrCXZzdDEuOAkJe2QxNC1kMTV9LCBbcjIsIDogMTI4XSEKKyAJdm11bGwuczMyCXEyLCBkMTgsIGQ0CisgCXZtbGFsLnMzMglxMiwgZDEyLCBkOQorIAl2bWxhbC5zMzIJcTIsIGQxMywgZDgKK0BAIC04NTgsOCArODM2LDcgQEAKKyAJdm1sYWwuczMyCXEyLCBkMjIsIGQyCisgCXZtbGFsLnMzMglxMiwgZDIzLCBkMQorIAl2bWxhbC5zMzIJcTIsIGQyNCwgZDAKKy0JYWRkCQlyMiwgc3AsICM2NDAKKy0JdnN0MS44CQl7ZDIwLWQyMX0sIFtyMiwgOiAxMjhdCisrCXZzdDEuOAkJe2QyMC1kMjF9LCBbcjIsIDogMTI4XSEKKyAJdm11bGwuczMyCXE3LCBkMTgsIGQ5CisgCXZtbGFsLnMzMglxNywgZDI2LCBkMworIAl2bWxhbC5zMzIJcTcsIGQxOSwgZDgKK0BAIC04NjgsMTUgKzg0NSwxMyBAQAorIAl2bWxhbC5zMzIJcTcsIGQyOCwgZDEKKyAJdm1sYWwuczMyCXE3LCBkMjMsIGQ2CisgCXZtbGFsLnMzMglxNywgZDI5LCBkMAorLQlhZGQJCXIyLCBzcCwgIzY1NgorLQl2c3QxLjgJCXtkMTAtZDExfSwgW3IyLCA6IDEyOF0KKysJdnN0MS44CQl7ZDEwLWQxMX0sIFtyMiwgOiAxMjhdIQorIAl2bXVsbC5zMzIJcTUsIGQxOCwgZDMKKyAJdm1sYWwuczMyCXE1LCBkMTksIGQyCisgCXZtbGFsLnMzMglxNSwgZDIyLCBkMQorIAl2bWxhbC5zMzIJcTUsIGQyMywgZDAKKyAJdm1sYWwuczMyCXE1LCBkMTIsIGQ4CistCWFkZAkJcjIsIHNwLCAjNjcyCistCXZzdDEuOAkJe2QxNi1kMTd9LCBbcjIsIDogMTI4XQorKwl2c3QxLjgJCXtkMTYtZDE3fSwgW3IyLCA6IDEyOF0hCisgCXZtdWxsLnMzMglxNCwgZDE4LCBkOAorIAl2bWxhbC5zMzIJcTQsIGQyNiwgZDIKKyAJdm1sYWwuczMyCXE0LCBkMTksIGQ3CitAQCAtODg3LDcgKzg2Miw3IEBACisgCXZtbGFsLnMzMglxOCwgZDI2LCBkMQorIAl2bWxhbC5zMzIJcTgsIGQxOSwgZDYKKyAJdm1sYWwuczMyCXE4LCBkMjcsIGQwCistCWFkZAkJcjIsIHNwLCAjNTc2CisrCWFkZAkJcjIsIHNwLCAjNTQ0CisgCXZsZDEuOAkJe2QyMC1kMjF9LCBbcjIsIDogMTI4XQorIAl2bWxhbC5zMzIJcTcsIGQyNCwgZDIxCisgCXZtbGFsLnMzMglxNywgZDI1LCBkMjAKK0BAIC04OTYsMzIgKzg3MSwzMCBAQAorIAl2bWxhbC5zMzIJcTgsIGQyMiwgZDIxCisgCXZtbGFsLnMzMglxOCwgZDI4LCBkMjAKKyAJdm1sYWwuczMyCXE1LCBkMjQsIGQyMAorLQlhZGQJCXIyLCBzcCwgIzU3NgorIAl2c3QxLjgJCXtkMTQtZDE1fSwgW3IyLCA6IDEyOF0KKyAJdm11bGwuczMyCXE3LCBkMTgsIGQ2CisgCXZtbGFsLnMzMglxNywgZDI2LCBkMAorLQlhZGQJCXIyLCBzcCwgIzY1NgorKwlhZGQJCXIyLCBzcCwgIzYyNAorIAl2bGQxLjgJCXtkMzAtZDMxfSwgW3IyLCA6IDEyOF0KKyAJdm1sYWwuczMyCXEyLCBkMzAsIGQyMQorIAl2bWxhbC5zMzIJcTcsIGQxOSwgZDIxCisgCXZtbGFsLnMzMglxNywgZDI3LCBkMjAKKy0JYWRkCQlyMiwgc3AsICM2MjQKKysJYWRkCQlyMiwgc3AsICM1OTIKKyAJdmxkMS44CQl7ZDI2LWQyN30sIFtyMiwgOiAxMjhdCisgCXZtbGFsLnMzMglxNCwgZDI1LCBkMjcKKyAJdm1sYWwuczMyCXE4LCBkMjksIGQyNworIAl2bWxhbC5zMzIJcTgsIGQyNSwgZDI2CisgCXZtbGFsLnMzMglxNywgZDI4LCBkMjcKKyAJdm1sYWwuczMyCXE3LCBkMjksIGQyNgorLQlhZGQJCXIyLCBzcCwgIzYwOAorKwlhZGQJCXIyLCBzcCwgIzU3NgorIAl2bGQxLjgJCXtkMjgtZDI5fSwgW3IyLCA6IDEyOF0KKyAJdm1sYWwuczMyCXE0LCBkMjQsIGQyOQorIAl2bWxhbC5zMzIJcTgsIGQyMywgZDI5CisgCXZtbGFsLnMzMglxOCwgZDI0LCBkMjgKKyAJdm1sYWwuczMyCXE3LCBkMjIsIGQyOQorIAl2bWxhbC5zMzIJcTcsIGQyMywgZDI4CistCWFkZAkJcjIsIHNwLCAjNjA4CisgCXZzdDEuOAkJe2Q4LWQ5fSwgW3IyLCA6IDEyOF0KKy0JYWRkCQlyMiwgc3AsICM1NjAKKysJYWRkCQlyMiwgc3AsICM1MjgKKyAJdmxkMS44CQl7ZDgtZDl9LCBbcjIsIDogMTI4XQorIAl2bWxhbC5zMzIJcTcsIGQyNCwgZDkKKyAJdm1sYWwuczMyCXE3LCBkMjUsIGQzMQorQEAgLTk0MiwzNiArOTE1LDM2IEBACisgCXZtbGFsLnMzMglxMCwgZDIzLCBkMjYKKyAJdm1sYWwuczMyCXEwLCBkMjQsIGQzMQorIAl2bWxhbC5zMzIJcTAsIGQxOSwgZDIwCistCWFkZAkJcjIsIHNwLCAjNjQwCisrCWFkZAkJcjIsIHNwLCAjNjA4CisgCXZsZDEuOAkJe2QxOC1kMTl9LCBbcjIsIDogMTI4XQorIAl2bWxhbC5zMzIJcTIsIGQxOCwgZDcKKy0Jdm1sYWwuczMyCXEyLCBkMTksIGQ2CisgCXZtbGFsLnMzMglxNSwgZDE4LCBkNgorLQl2bWxhbC5zMzIJcTUsIGQxOSwgZDIxCisgCXZtbGFsLnMzMglxMSwgZDE4LCBkMjEKKy0Jdm1sYWwuczMyCXExLCBkMTksIGQyOQorIAl2bWxhbC5zMzIJcTAsIGQxOCwgZDI4CistCXZtbGFsLnMzMglxMCwgZDE5LCBkOQorIAl2bWxhbC5zMzIJcTYsIGQxOCwgZDI5CisrCXZtbGFsLnMzMglxMiwgZDE5LCBkNgorKwl2bWxhbC5zMzIJcTUsIGQxOSwgZDIxCisrCXZtbGFsLnMzMglxMSwgZDE5LCBkMjkKKysJdm1sYWwuczMyCXEwLCBkMTksIGQ5CisgCXZtbGFsLnMzMglxNiwgZDE5LCBkMjgKKy0JYWRkCQlyMiwgc3AsICM1OTIKKysJYWRkCQlyMiwgc3AsICM1NjAKKyAJdmxkMS44CQl7ZDE4LWQxOX0sIFtyMiwgOiAxMjhdCistCWFkZAkJcjIsIHNwLCAjNTEyCisrCWFkZAkJcjIsIHNwLCAjNDgwCisgCXZsZDEuOAkJe2QyMi1kMjN9LCBbcjIsIDogMTI4XQorIAl2bWxhbC5zMzIJcTUsIGQxOSwgZDcKKyAJdm1sYWwuczMyCXEwLCBkMTgsIGQyMQorIAl2bWxhbC5zMzIJcTAsIGQxOSwgZDI5CisgCXZtbGFsLnMzMglxNiwgZDE4LCBkNgorLQlhZGQJCXIyLCBzcCwgIzUyOAorKwlhZGQJCXIyLCBzcCwgIzQ5NgorIAl2bGQxLjgJCXtkNi1kN30sIFtyMiwgOiAxMjhdCisgCXZtbGFsLnMzMglxNiwgZDE5LCBkMjEKKy0JYWRkCQlyMiwgc3AsICM1NzYKKysJYWRkCQlyMiwgc3AsICM1NDQKKyAJdmxkMS44CQl7ZDE4LWQxOX0sIFtyMiwgOiAxMjhdCisgCXZtbGFsLnMzMglxMCwgZDMwLCBkOAorLQlhZGQJCXIyLCBzcCwgIzY3MgorKwlhZGQJCXIyLCBzcCwgIzY0MAorIAl2bGQxLjgJCXtkMjAtZDIxfSwgW3IyLCA6IDEyOF0KKyAJdm1sYWwuczMyCXE1LCBkMzAsIGQyOQorLQlhZGQJCXIyLCBzcCwgIzYwOAorKwlhZGQJCXIyLCBzcCwgIzU3NgorIAl2bGQxLjgJCXtkMjQtZDI1fSwgW3IyLCA6IDEyOF0KKyAJdm1sYWwuczMyCXExLCBkMzAsIGQyOAorIAl2YWRkLmk2NAlxMTMsIHEwLCBxMTEKK0BAIC0xMDY5LDcgKzEwNDIsNyBAQAorIAlzdWIJCXI0LCByNCwgIzI0CisgCXZzdDEuOAkJZDAsIFtyMiwgOiA2NF0KKyAJdnN0MS44CQlkMSwgW3I0LCA6IDY0XQorLQlhZGQJCXIyLCBzcCwgIzU0NAorKwlhZGQJCXIyLCBzcCwgIzUxMgorIAlhZGQJCXI0LCByMywgIzE0NAorIAlhZGQJCXI1LCByMywgIzE5MgorIAl2bGQxLjgJCXtkMC1kMX0sIFtyMiwgOiAxMjhdCitAQCAtMTEzOSwxNCArMTExMiwxMyBAQAorIAl2bWxhbC5zMzIJcTAsIGQxMiwgZDgKKyAJdm1sYWwuczMyCXEwLCBkMTMsIGQxNworIAl2bWxhbC5zMzIJcTAsIGQ2LCBkNgorLQlhZGQJCXIyLCBzcCwgIzUxMgorLQl2bGQxLjgJCXtkMTgtZDE5fSwgW3IyLCA6IDEyOF0KKysJYWRkCQlyMiwgc3AsICM0ODAKKysJdmxkMS44CQl7ZDE4LWQxOX0sIFtyMiwgOiAxMjhdIQorIAl2bXVsbC5zMzIJcTMsIGQxNiwgZDcKKyAJdm1sYWwuczMyCXEzLCBkMTAsIGQxNQorIAl2bWxhbC5zMzIJcTMsIGQxMSwgZDE0CisgCXZtbGFsLnMzMglxMywgZDEyLCBkOQorIAl2bWxhbC5zMzIJcTMsIGQxMywgZDgKKy0JYWRkCQlyMiwgc3AsICM1MjgKKyAJdmxkMS44CQl7ZDgtZDl9LCBbcjIsIDogMTI4XQorIAl2YWRkLmk2NAlxNSwgcTEyLCBxOQorIAl2YWRkLmk2NAlxNiwgcTE1LCBxOQorQEAgLTEyOTUsMjIgKzEyNjcsMTkgQEAKKyAJdmFkZC5pMzIJcTUsIHE1LCBxMAorIAl2dHJuLjMyCQlxMTEsIHExNAorIAl2YWRkLmkzMglxNiwgcTYsIHEzCistCWFkZAkJcjIsIHNwLCAjNTYwCisrCWFkZAkJcjIsIHNwLCAjNTI4CisgCXZhZGQuaTMyCXExMCwgcTEwLCBxMgorIAl2dHJuLjMyCQlkMjQsIGQyNQorLQl2c3QxLjgJCXtkMTItZDEzfSwgW3IyLCA6IDEyOF0KKysJdnN0MS44CQl7ZDEyLWQxM30sIFtyMiwgOiAxMjhdIQorIAl2c2hsLmkzMglxNiwgcTEzLCAjMQorLQlhZGQJCXIyLCBzcCwgIzU3NgorLQl2c3QxLjgJCXtkMjAtZDIxfSwgW3IyLCA6IDEyOF0KKysJdnN0MS44CQl7ZDIwLWQyMX0sIFtyMiwgOiAxMjhdIQorIAl2c2hsLmkzMglxMTAsIHExNCwgIzEKKy0JYWRkCQlyMiwgc3AsICM1OTIKKy0JdnN0MS44CQl7ZDEyLWQxM30sIFtyMiwgOiAxMjhdCisrCXZzdDEuOAkJe2QxMi1kMTN9LCBbcjIsIDogMTI4XSEKKyAJdnNobC5pMzIJcTE1LCBxMTIsICMxCisgCXZhZGQuaTMyCXE4LCBxOCwgcTQKKyAJdmV4dC4zMgkJZDEwLCBkMzEsIGQzMCwgIzAKKyAJdmFkZC5pMzIJcTcsIHE3LCBxMQorLQlhZGQJCXIyLCBzcCwgIzYwOAorLQl2c3QxLjgJCXtkMTYtZDE3fSwgW3IyLCA6IDEyOF0KKysJdnN0MS44CQl7ZDE2LWQxN30sIFtyMiwgOiAxMjhdIQorIAl2bXVsbC5zMzIJcTgsIGQxOCwgZDUKKyAJdm1sYWwuczMyCXE4LCBkMjYsIGQ0CisgCXZtbGFsLnMzMglxOCwgZDE5LCBkOQorQEAgLTEzMjEsOCArMTI5MCw3IEBACisgCXZtbGFsLnMzMglxOCwgZDI5LCBkMQorIAl2bWxhbC5zMzIJcTgsIGQyNCwgZDYKKyAJdm1sYWwuczMyCXE4LCBkMjUsIGQwCistCWFkZAkJcjIsIHNwLCAjNjI0CistCXZzdDEuOAkJe2QxNC1kMTV9LCBbcjIsIDogMTI4XQorKwl2c3QxLjgJCXtkMTQtZDE1fSwgW3IyLCA6IDEyOF0hCisgCXZtdWxsLnMzMglxMiwgZDE4LCBkNAorIAl2bWxhbC5zMzIJcTIsIGQxMiwgZDkKKyAJdm1sYWwuczMyCXEyLCBkMTMsIGQ4CitAQCAtMTMzMCw4ICsxMjk4LDcgQEAKKyAJdm1sYWwuczMyCXEyLCBkMjIsIGQyCisgCXZtbGFsLnMzMglxMiwgZDIzLCBkMQorIAl2bWxhbC5zMzIJcTIsIGQyNCwgZDAKKy0JYWRkCQlyMiwgc3AsICM2NDAKKy0JdnN0MS44CQl7ZDIwLWQyMX0sIFtyMiwgOiAxMjhdCisrCXZzdDEuOAkJe2QyMC1kMjF9LCBbcjIsIDogMTI4XSEKKyAJdm11bGwuczMyCXE3LCBkMTgsIGQ5CisgCXZtbGFsLnMzMglxNywgZDI2LCBkMworIAl2bWxhbC5zMzIJcTcsIGQxOSwgZDgKK0BAIC0xMzQwLDE1ICsxMzA3LDEzIEBACisgCXZtbGFsLnMzMglxNywgZDI4LCBkMQorIAl2bWxhbC5zMzIJcTcsIGQyMywgZDYKKyAJdm1sYWwuczMyCXE3LCBkMjksIGQwCistCWFkZAkJcjIsIHNwLCAjNjU2CistCXZzdDEuOAkJe2QxMC1kMTF9LCBbcjIsIDogMTI4XQorKwl2c3QxLjgJCXtkMTAtZDExfSwgW3IyLCA6IDEyOF0hCisgCXZtdWxsLnMzMglxNSwgZDE4LCBkMworIAl2bWxhbC5zMzIJcTUsIGQxOSwgZDIKKyAJdm1sYWwuczMyCXE1LCBkMjIsIGQxCisgCXZtbGFsLnMzMglxNSwgZDIzLCBkMAorIAl2bWxhbC5zMzIJcTUsIGQxMiwgZDgKKy0JYWRkCQlyMiwgc3AsICM2NzIKKy0JdnN0MS44CQl7ZDE2LWQxN30sIFtyMiwgOiAxMjhdCisrCXZzdDEuOAkJe2QxNi1kMTd9LCBbcjIsIDogMTI4XSEKKyAJdm11bGwuczMyCXE0LCBkMTgsIGQ4CisgCXZtbGFsLnMzMglxNCwgZDI2LCBkMgorIAl2bWxhbC5zMzIJcTQsIGQxOSwgZDcKK0BAIC0xMzU5LDcgKzEzMjQsNyBAQAorIAl2bWxhbC5zMzIJcTgsIGQyNiwgZDEKKyAJdm1sYWwuczMyCXE4LCBkMTksIGQ2CisgCXZtbGFsLnMzMglxOCwgZDI3LCBkMAorLQlhZGQJCXIyLCBzcCwgIzU3NgorKwlhZGQJCXIyLCBzcCwgIzU0NAorIAl2bGQxLjgJCXtkMjAtZDIxfSwgW3IyLCA6IDEyOF0KKyAJdm1sYWwuczMyCXE3LCBkMjQsIGQyMQorIAl2bWxhbC5zMzIJcTcsIGQyNSwgZDIwCitAQCAtMTM2OCwzMiArMTMzMywzMCBAQAorIAl2bWxhbC5zMzIJcTgsIGQyMiwgZDIxCisgCXZtbGFsLnMzMglxOCwgZDI4LCBkMjAKKyAJdm1sYWwuczMyCXE1LCBkMjQsIGQyMAorLQlhZGQJCXIyLCBzcCwgIzU3NgorIAl2c3QxLjgJCXtkMTQtZDE1fSwgW3IyLCA6IDEyOF0KKyAJdm11bGwuczMyCXE3LCBkMTgsIGQ2CisgCXZtbGFsLnMzMglxNywgZDI2LCBkMAorLQlhZGQJCXIyLCBzcCwgIzY1NgorKwlhZGQJCXIyLCBzcCwgIzYyNAorIAl2bGQxLjgJCXtkMzAtZDMxfSwgW3IyLCA6IDEyOF0KKyAJdm1sYWwuczMyCXEyLCBkMzAsIGQyMQorIAl2bWxhbC5zMzIJcTcsIGQxOSwgZDIxCisgCXZtbGFsLnMzMglxNywgZDI3LCBkMjAKKy0JYWRkCQlyMiwgc3AsICM2MjQKKysJYWRkCQlyMiwgc3AsICM1OTIKKyAJdmxkMS44CQl7ZDI2LWQyN30sIFtyMiwgOiAxMjhdCisgCXZtbGFsLnMzMglxNCwgZDI1LCBkMjcKKyAJdm1sYWwuczMyCXE4LCBkMjksIGQyNworIAl2bWxhbC5zMzIJcTgsIGQyNSwgZDI2CisgCXZtbGFsLnMzMglxNywgZDI4LCBkMjcKKyAJdm1sYWwuczMyCXE3LCBkMjksIGQyNgorLQlhZGQJCXIyLCBzcCwgIzYwOAorKwlhZGQJCXIyLCBzcCwgIzU3NgorIAl2bGQxLjgJCXtkMjgtZDI5fSwgW3IyLCA6IDEyOF0KKyAJdm1sYWwuczMyCXE0LCBkMjQsIGQyOQorIAl2bWxhbC5zMzIJcTgsIGQyMywgZDI5CisgCXZtbGFsLnMzMglxOCwgZDI0LCBkMjgKKyAJdm1sYWwuczMyCXE3LCBkMjIsIGQyOQorIAl2bWxhbC5zMzIJcTcsIGQyMywgZDI4CistCWFkZAkJcjIsIHNwLCAjNjA4CisgCXZzdDEuOAkJe2Q4LWQ5fSwgW3IyLCA6IDEyOF0KKy0JYWRkCQlyMiwgc3AsICM1NjAKKysJYWRkCQlyMiwgc3AsICM1MjgKKyAJdmxkMS44CQl7ZDgtZDl9LCBbcjIsIDogMTI4XQorIAl2bWxhbC5zMzIJcTcsIGQyNCwgZDkKKyAJdm1sYWwuczMyCXE3LCBkMjUsIGQzMQorQEAgLTE0MTQsMzYgKzEzNzcsMzYgQEAKKyAJdm1sYWwuczMyCXEwLCBkMjMsIGQyNgorIAl2bWxhbC5zMzIJcTAsIGQyNCwgZDMxCisgCXZtbGFsLnMzMglxMCwgZDE5LCBkMjAKKy0JYWRkCQlyMiwgc3AsICM2NDAKKysJYWRkCQlyMiwgc3AsICM2MDgKKyAJdmxkMS44CQl7ZDE4LWQxOX0sIFtyMiwgOiAxMjhdCisgCXZtbGFsLnMzMglxMiwgZDE4LCBkNworLQl2bWxhbC5zMzIJcTIsIGQxOSwgZDYKKyAJdm1sYWwuczMyCXE1LCBkMTgsIGQ2CistCXZtbGFsLnMzMglxNSwgZDE5LCBkMjEKKyAJdm1sYWwuczMyCXExLCBkMTgsIGQyMQorLQl2bWxhbC5zMzIJcTEsIGQxOSwgZDI5CisgCXZtbGFsLnMzMglxMCwgZDE4LCBkMjgKKy0Jdm1sYWwuczMyCXEwLCBkMTksIGQ5CisgCXZtbGFsLnMzMglxNiwgZDE4LCBkMjkKKysJdm1sYWwuczMyCXEyLCBkMTksIGQ2CisrCXZtbGFsLnMzMglxNSwgZDE5LCBkMjEKKysJdm1sYWwuczMyCXExLCBkMTksIGQyOQorKwl2bWxhbC5zMzIJcTAsIGQxOSwgZDkKKyAJdm1sYWwuczMyCXE2LCBkMTksIGQyOAorLQlhZGQJCXIyLCBzcCwgIzU5MgorKwlhZGQJCXIyLCBzcCwgIzU2MAorIAl2bGQxLjgJCXtkMTgtZDE5fSwgW3IyLCA6IDEyOF0KKy0JYWRkCQlyMiwgc3AsICM1MTIKKysJYWRkCQlyMiwgc3AsICM0ODAKKyAJdmxkMS44CQl7ZDIyLWQyM30sIFtyMiwgOiAxMjhdCisgCXZtbGFsLnMzMglxNSwgZDE5LCBkNworIAl2bWxhbC5zMzIJcTAsIGQxOCwgZDIxCisgCXZtbGFsLnMzMglxMCwgZDE5LCBkMjkKKyAJdm1sYWwuczMyCXE2LCBkMTgsIGQ2CistCWFkZAkJcjIsIHNwLCAjNTI4CisrCWFkZAkJcjIsIHNwLCAjNDk2CisgCXZsZDEuOAkJe2Q2LWQ3fSwgW3IyLCA6IDEyOF0KKyAJdm1sYWwuczMyCXE2LCBkMTksIGQyMQorLQlhZGQJCXIyLCBzcCwgIzU3NgorKwlhZGQJCXIyLCBzcCwgIzU0NAorIAl2bGQxLjgJCXtkMTgtZDE5fSwgW3IyLCA6IDEyOF0KKyAJdm1sYWwuczMyCXEwLCBkMzAsIGQ4CistCWFkZAkJcjIsIHNwLCAjNjcyCisrCWFkZAkJcjIsIHNwLCAjNjQwCisgCXZsZDEuOAkJe2QyMC1kMjF9LCBbcjIsIDogMTI4XQorIAl2bWxhbC5zMzIJcTUsIGQzMCwgZDI5CistCWFkZAkJcjIsIHNwLCAjNjA4CisrCWFkZAkJcjIsIHNwLCAjNTc2CisgCXZsZDEuOAkJe2QyNC1kMjV9LCBbcjIsIDogMTI4XQorIAl2bWxhbC5zMzIJcTEsIGQzMCwgZDI4CisgCXZhZGQuaTY0CXExMywgcTAsIHExMQorQEAgLTE1NDEsMTAgKzE1MDQsMTAgQEAKKyAJc3ViCQlyNCwgcjQsICMyNAorIAl2c3QxLjgJCWQwLCBbcjIsIDogNjRdCisgCXZzdDEuOAkJZDEsIFtyNCwgOiA2NF0KKy0JbGRyCQlyMiwgW3NwLCAjNDg4XQorLQlsZHIJCXI0LCBbc3AsICM0OTJdCisrCWxkcgkJcjIsIFtzcCwgIzQ1Nl0KKysJbGRyCQlyNCwgW3NwLCAjNDYwXQorIAlzdWJzCQlyNSwgcjIsICMxCistCWJnZQkJLl9tYWlubG9vcAorKwliZ2UJCS5MbWFpbmxvb3AKKyAJYWRkCQlyMSwgcjMsICMxNDQKKyAJYWRkCQlyMiwgcjMsICMzMzYKKyAJdmxkMS44CQl7ZDAtZDF9LCBbcjEsIDogMTI4XSEKK0BAIC0xNTUzLDQxICsxNTE2LDQxIEBACisgCXZzdDEuOAkJe2QwLWQxfSwgW3IyLCA6IDEyOF0hCisgCXZzdDEuOAkJe2QyLWQzfSwgW3IyLCA6IDEyOF0hCisgCXZzdDEuOAkJZDQsIFtyMiwgOiA2NF0KKy0JbGRyCQlyMSwgPTAKKy0uX2ludmVydGxvb3A6CisrCW1vdncJCXIxLCAjMAorKy5MaW52ZXJ0bG9vcDoKKyAJYWRkCQlyMiwgcjMsICMxNDQKKy0JbGRyCQlyNCwgPTAKKy0JbGRyCQlyNSwgPTIKKysJbW92dwkJcjQsICMwCisrCW1vdncJCXI1LCAjMgorIAljbXAJCXIxLCAjMQorLQlsZHJlcQkJcjUsID0xCisrCW1vdmVxCQlyNSwgIzEKKyAJYWRkZXEJCXIyLCByMywgIzMzNgorIAlhZGRlcQkJcjQsIHIzLCAjNDgKKyAJY21wCQlyMSwgIzIKKy0JbGRyZXEJCXI1LCA9MQorKwltb3ZlcQkJcjUsICMxCisgCWFkZGVxCQlyMiwgcjMsICM0OAorIAljbXAJCXIxLCAjMworLQlsZHJlcQkJcjUsID01CisrCW1vdmVxCQlyNSwgIzUKKyAJYWRkZXEJCXI0LCByMywgIzMzNgorIAljbXAJCXIxLCAjNAorLQlsZHJlcQkJcjUsID0xMAorKwltb3ZlcQkJcjUsICMxMAorIAljbXAJCXIxLCAjNQorLQlsZHJlcQkJcjUsID0yMAorKwltb3ZlcQkJcjUsICMyMAorIAljbXAJCXIxLCAjNgorLQlsZHJlcQkJcjUsID0xMAorKwltb3ZlcQkJcjUsICMxMAorIAlhZGRlcQkJcjIsIHIzLCAjMzM2CisgCWFkZGVxCQlyNCwgcjMsICMzMzYKKyAJY21wCQlyMSwgIzcKKy0JbGRyZXEJCXI1LCA9NTAKKysJbW92ZXEJCXI1LCAjNTAKKyAJY21wCQlyMSwgIzgKKy0JbGRyZXEJCXI1LCA9MTAwCisrCW1vdmVxCQlyNSwgIzEwMAorIAljbXAJCXIxLCAjOQorLQlsZHJlcQkJcjUsID01MAorKwltb3ZlcQkJcjUsICM1MAorIAlhZGRlcQkJcjIsIHIzLCAjMzM2CisgCWNtcAkJcjEsICMxMAorLQlsZHJlcQkJcjUsID01CisrCW1vdmVxCQlyNSwgIzUKKyAJYWRkZXEJCXIyLCByMywgIzQ4CisgCWNtcAkJcjEsICMxMQorLQlsZHJlcQkJcjUsID0wCisrCW1vdmVxCQlyNSwgIzAKKyAJYWRkZXEJCXIyLCByMywgIzk2CisgCWFkZAkJcjYsIHIzLCAjMTQ0CisgCWFkZAkJcjcsIHIzLCAjMjg4CitAQCAtMTU5OCw4ICsxNTYxLDggQEAKKyAJdnN0MS44CQl7ZDItZDN9LCBbcjcsIDogMTI4XSEKKyAJdnN0MS44CQlkNCwgW3I3LCA6IDY0XQorIAljbXAJCXI1LCAjMAorLQliZXEJCS5fc2tpcHNxdWFyaW5nbG9vcAorLS5fc3F1YXJpbmdsb29wOgorKwliZXEJCS5Mc2tpcHNxdWFyaW5nbG9vcAorKy5Mc3F1YXJpbmdsb29wOgorIAlhZGQJCXI2LCByMywgIzI4OAorIAlhZGQJCXI3LCByMywgIzI4OAorIAlhZGQJCXI4LCByMywgIzI4OAorQEAgLTE2MTEsNyArMTU3NCw3IEBACisgCXZsZDEuOAkJe2Q2LWQ3fSwgW3I3LCA6IDEyOF0hCisgCXZsZDEuOAkJe2Q5fSwgW3I3LCA6IDY0XQorIAl2bGQxLjgJCXtkMTAtZDExfSwgW3I2LCA6IDEyOF0hCistCWFkZAkJcjcsIHNwLCAjNDE2CisrCWFkZAkJcjcsIHNwLCAjMzg0CisgCXZsZDEuOAkJe2QxMi1kMTN9LCBbcjYsIDogMTI4XSEKKyAJdm11bC5pMzIJcTcsIHEyLCBxMAorIAl2bGQxLjgJCXtkOH0sIFtyNiwgOiA2NF0KK0BAIC0xNzI2LDcgKzE2ODksNyBAQAorIAl2ZXh0LjMyCQlkMTAsIGQ2LCBkNiwgIzAKKyAJdm1vdi5pMzIJcTEsICMweGZmZmZmZmZmCisgCXZzaGwuaTY0CXE0LCBxMSwgIzI1CistCWFkZAkJcjcsIHNwLCAjNTEyCisrCWFkZAkJcjcsIHNwLCAjNDgwCisgCXZsZDEuOAkJe2QxNC1kMTV9LCBbcjcsIDogMTI4XQorIAl2YWRkLmk2NAlxOSwgcTIsIHE3CisgCXZzaGwuaTY0CXExLCBxMSwgIzI2CitAQCAtMTczNSw3ICsxNjk4LDcgQEAKKyAJdmFkZC5pNjQJcTUsIHE1LCBxMTAKKyAJdmFuZAkJcTksIHE5LCBxMQorIAl2bGQxLjgJCXtkMTZ9LCBbcjYsIDogNjRdIQorLQlhZGQJCXI2LCBzcCwgIzUyOAorKwlhZGQJCXI2LCBzcCwgIzQ5NgorIAl2bGQxLjgJCXtkMjAtZDIxfSwgW3I2LCA6IDEyOF0KKyAJdmFkZC5pNjQJcTExLCBxNSwgcTEwCisgCXZzdWIuaTY0CXEyLCBxMiwgcTkKK0BAIC0xNzg5LDggKzE3NTIsOCBAQAorIAlzdWIJCXI2LCByNiwgIzMyCisgCXZzdDEuOAkJZDQsIFtyNiwgOiA2NF0KKyAJc3VicwkJcjUsIHI1LCAjMQorLQliaGkJCS5fc3F1YXJpbmdsb29wCistLl9za2lwc3F1YXJpbmdsb29wOgorKwliaGkJCS5Mc3F1YXJpbmdsb29wCisrLkxza2lwc3F1YXJpbmdsb29wOgorIAltb3YJCXIyLCByMgorIAlhZGQJCXI1LCByMywgIzI4OAorIAlhZGQJCXI2LCByMywgIzE0NAorQEAgLTE4MDIsNyArMTc2NSw3IEBACisgCXZsZDEuOAkJe2Q2LWQ3fSwgW3I1LCA6IDEyOF0hCisgCXZsZDEuOAkJe2Q5fSwgW3I1LCA6IDY0XQorIAl2bGQxLjgJCXtkMTAtZDExfSwgW3IyLCA6IDEyOF0hCistCWFkZAkJcjUsIHNwLCAjNDE2CisrCWFkZAkJcjUsIHNwLCAjMzg0CisgCXZsZDEuOAkJe2QxMi1kMTN9LCBbcjIsIDogMTI4XSEKKyAJdm11bC5pMzIJcTcsIHEyLCBxMAorIAl2bGQxLjgJCXtkOH0sIFtyMiwgOiA2NF0KK0BAIC0xOTE3LDcgKzE4ODAsNyBAQAorIAl2ZXh0LjMyCQlkMTAsIGQ2LCBkNiwgIzAKKyAJdm1vdi5pMzIJcTEsICMweGZmZmZmZmZmCisgCXZzaGwuaTY0CXE0LCBxMSwgIzI1CistCWFkZAkJcjUsIHNwLCAjNTEyCisrCWFkZAkJcjUsIHNwLCAjNDgwCisgCXZsZDEuOAkJe2QxNC1kMTV9LCBbcjUsIDogMTI4XQorIAl2YWRkLmk2NAlxOSwgcTIsIHE3CisgCXZzaGwuaTY0CXExLCBxMSwgIzI2CitAQCAtMTkyNiw3ICsxODg5LDcgQEAKKyAJdmFkZC5pNjQJcTUsIHE1LCBxMTAKKyAJdmFuZAkJcTksIHE5LCBxMQorIAl2bGQxLjgJCXtkMTZ9LCBbcjIsIDogNjRdIQorLQlhZGQJCXIyLCBzcCwgIzUyOAorKwlhZGQJCXIyLCBzcCwgIzQ5NgorIAl2bGQxLjgJCXtkMjAtZDIxfSwgW3IyLCA6IDEyOF0KKyAJdmFkZC5pNjQJcTExLCBxNSwgcTEwCisgCXZzdWIuaTY0CXEyLCBxMiwgcTkKK0BAIC0xOTgwLDcgKzE5NDMsNyBAQAorIAlzdWIJCXIyLCByMiwgIzMyCisgCXZzdDEuOAkJZDQsIFtyMiwgOiA2NF0KKyAJY21wCQlyNCwgIzAKKy0JYmVxCQkuX3NraXBwb3N0Y29weQorKwliZXEJCS5Mc2tpcHBvc3Rjb3B5CisgCWFkZAkJcjIsIHIzLCAjMTQ0CisgCW1vdgkJcjQsIHI0CisgCXZsZDEuOAkJe2QwLWQxfSwgW3IyLCA6IDEyOF0hCitAQCAtMTk4OSw5ICsxOTUyLDkgQEAKKyAJdnN0MS44CQl7ZDAtZDF9LCBbcjQsIDogMTI4XSEKKyAJdnN0MS44CQl7ZDItZDN9LCBbcjQsIDogMTI4XSEKKyAJdnN0MS44CQlkNCwgW3I0LCA6IDY0XQorLS5fc2tpcHBvc3Rjb3B5OgorKy5Mc2tpcHBvc3Rjb3B5OgorIAljbXAJCXIxLCAjMQorLQlibmUJCS5fc2tpcGZpbmFsY29weQorKwlibmUJCS5Mc2tpcGZpbmFsY29weQorIAlhZGQJCXIyLCByMywgIzI4OAorIAlhZGQJCXI0LCByMywgIzE0NAorIAl2bGQxLjgJCXtkMC1kMX0sIFtyMiwgOiAxMjhdIQorQEAgLTIwMDAsMTAgKzE5NjMsMTAgQEAKKyAJdnN0MS44CQl7ZDAtZDF9LCBbcjQsIDogMTI4XSEKKyAJdnN0MS44CQl7ZDItZDN9LCBbcjQsIDogMTI4XSEKKyAJdnN0MS44CQlkNCwgW3I0LCA6IDY0XQorLS5fc2tpcGZpbmFsY29weToKKysuTHNraXBmaW5hbGNvcHk6CisgCWFkZAkJcjEsIHIxLCAjMQorIAljbXAJCXIxLCAjMTIKKy0JYmxvCQkuX2ludmVydGxvb3AKKysJYmxvCQkuTGludmVydGxvb3AKKyAJYWRkCQlyMSwgcjMsICMxNDQKKyAJbGRyCQlyMiwgW3IxXSwgIzQKKyAJbGRyCQlyMywgW3IxXSwgIzQKK0BAIC0yMDg1LDIxICsyMDQ4LDE1IEBACisgCWFkZAkJcjgsIHI4LCByMTAsIExTTCAjMTIKKyAJbW92CQlyOSwgcjEwLCBMU1IgIzIwCisgCWFkZAkJcjEsIHI5LCByMSwgTFNMICM2CistCXN0cgkJcjIsIFtyMF0sICM0CistCXN0cgkJcjMsIFtyMF0sICM0CistCXN0cgkJcjQsIFtyMF0sICM0CistCXN0cgkJcjUsIFtyMF0sICM0CistCXN0cgkJcjYsIFtyMF0sICM0CistCXN0cgkJcjcsIFtyMF0sICM0CistCXN0cgkJcjgsIFtyMF0sICM0CistCXN0cgkJcjEsIFtyMF0KKy0JbGRyZAkJcjQsIFtzcCwgIzBdCistCWxkcmQJCXI2LCBbc3AsICM4XQorLQlsZHJkCQlyOCwgW3NwLCAjMTZdCistCWxkcmQJCXIxMCwgW3NwLCAjMjRdCistCWxkcgkJcjEyLCBbc3AsICM0ODBdCistCWxkcgkJcjE0LCBbc3AsICM0ODRdCistCWxkcgkJcjAsID0wCistCW1vdgkJc3AsIHIxMgorLQl2cG9wCQl7cTQsIHE1LCBxNiwgcTd9CistCWJ4CQlscgorKwlzdHIJCXIyLCBbcjBdCisrCXN0cgkJcjMsIFtyMCwgIzRdCisrCXN0cgkJcjQsIFtyMCwgIzhdCisrCXN0cgkJcjUsIFtyMCwgIzEyXQorKwlzdHIJCXI2LCBbcjAsICMxNl0KKysJc3RyCQlyNywgW3IwLCAjMjBdCisrCXN0cgkJcjgsIFtyMCwgIzI0XQorKwlzdHIJCXIxLCBbcjAsICMyOF0KKysJbW92dwkJcjAsICMwCisrCW1vdgkJc3AsIGlwCisrCXBvcAkJe3I0LXIxMSwgcGN9CisrRU5EUFJPQyhjdXJ2ZTI1NTE5X25lb24pCistLS0gL2Rldi9udWxsCisrKysgYi9hcmNoL2FybS9jcnlwdG8vY3VydmUyNTUxOS1nbHVlLmMKK0BAIC0wLDAgKzEsMTI3IEBACisrLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCisrLyoKKysgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisrICoKKysgKiBCYXNlZCBvbiBwdWJsaWMgZG9tYWluIGNvZGUgZnJvbSBEYW5pZWwgSi4gQmVybnN0ZWluIGFuZCBQZXRlciBTY2h3YWJlLiBUaGlzCisrICogYmVnYW4gZnJvbSBTVVBFUkNPUCdzIGN1cnZlMjU1MTkvbmVvbjIvc2NhbGFybXVsdC5zLCBidXQgaGFzIHN1YnNlcXVlbnRseSBiZWVuCisrICogbWFudWFsbHkgcmV3b3JrZWQgZm9yIHVzZSBpbiBrZXJuZWwgc3BhY2UuCisrICovCisrCisrI2luY2x1ZGUgPGFzbS9od2NhcC5oPgorKyNpbmNsdWRlIDxhc20vbmVvbi5oPgorKyNpbmNsdWRlIDxhc20vc2ltZC5oPgorKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwva3BwLmg+CisrI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9zaW1kLmg+CisrI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisrI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisrI2luY2x1ZGUgPGxpbnV4L2p1bXBfbGFiZWwuaD4KKysjaW5jbHVkZSA8Y3J5cHRvL2N1cnZlMjU1MTkuaD4KKysKKythc21saW5rYWdlIHZvaWQgY3VydmUyNTUxOV9uZW9uKHU4IG15cHVibGljW0NVUlZFMjU1MTlfS0VZX1NJWkVdLAorKwkJCQljb25zdCB1OCBzZWNyZXRbQ1VSVkUyNTUxOV9LRVlfU0laRV0sCisrCQkJCWNvbnN0IHU4IGJhc2Vwb2ludFtDVVJWRTI1NTE5X0tFWV9TSVpFXSk7CisrCisrc3RhdGljIF9fcm9fYWZ0ZXJfaW5pdCBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShoYXZlX25lb24pOworKworK3ZvaWQgY3VydmUyNTUxOV9hcmNoKHU4IG91dFtDVVJWRTI1NTE5X0tFWV9TSVpFXSwKKysJCSAgICAgY29uc3QgdTggc2NhbGFyW0NVUlZFMjU1MTlfS0VZX1NJWkVdLAorKwkJICAgICBjb25zdCB1OCBwb2ludFtDVVJWRTI1NTE5X0tFWV9TSVpFXSkKKyt7CisrCWlmIChzdGF0aWNfYnJhbmNoX2xpa2VseSgmaGF2ZV9uZW9uKSAmJiBjcnlwdG9fc2ltZF91c2FibGUoKSkgeworKwkJa2VybmVsX25lb25fYmVnaW4oKTsKKysJCWN1cnZlMjU1MTlfbmVvbihvdXQsIHNjYWxhciwgcG9pbnQpOworKwkJa2VybmVsX25lb25fZW5kKCk7CisrCX0gZWxzZSB7CisrCQljdXJ2ZTI1NTE5X2dlbmVyaWMob3V0LCBzY2FsYXIsIHBvaW50KTsKKysJfQorK30KKytFWFBPUlRfU1lNQk9MKGN1cnZlMjU1MTlfYXJjaCk7CisrCisrc3RhdGljIGludCBjdXJ2ZTI1NTE5X3NldF9zZWNyZXQoc3RydWN0IGNyeXB0b19rcHAgKnRmbSwgY29uc3Qgdm9pZCAqYnVmLAorKwkJCQkgdW5zaWduZWQgaW50IGxlbikKKyt7CisrCXU4ICpzZWNyZXQgPSBrcHBfdGZtX2N0eCh0Zm0pOworKworKwlpZiAoIWxlbikKKysJCWN1cnZlMjU1MTlfZ2VuZXJhdGVfc2VjcmV0KHNlY3JldCk7CisrCWVsc2UgaWYgKGxlbiA9PSBDVVJWRTI1NTE5X0tFWV9TSVpFICYmCisrCQkgY3J5cHRvX21lbW5lcShidWYsIGN1cnZlMjU1MTlfbnVsbF9wb2ludCwgQ1VSVkUyNTUxOV9LRVlfU0laRSkpCisrCQltZW1jcHkoc2VjcmV0LCBidWYsIENVUlZFMjU1MTlfS0VZX1NJWkUpOworKwllbHNlCisrCQlyZXR1cm4gLUVJTlZBTDsKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQgY3VydmUyNTUxOV9jb21wdXRlX3ZhbHVlKHN0cnVjdCBrcHBfcmVxdWVzdCAqcmVxKQorK3sKKysJc3RydWN0IGNyeXB0b19rcHAgKnRmbSA9IGNyeXB0b19rcHBfcmVxdGZtKHJlcSk7CisrCWNvbnN0IHU4ICpzZWNyZXQgPSBrcHBfdGZtX2N0eCh0Zm0pOworKwl1OCBwdWJsaWNfa2V5W0NVUlZFMjU1MTlfS0VZX1NJWkVdOworKwl1OCBidWZbQ1VSVkUyNTUxOV9LRVlfU0laRV07CisrCWludCBjb3BpZWQsIG5ieXRlczsKKysJdTggY29uc3QgKmJwOworKworKwlpZiAocmVxLT5zcmMpIHsKKysJCWNvcGllZCA9IHNnX2NvcHlfdG9fYnVmZmVyKHJlcS0+c3JjLAorKwkJCQkJICAgc2dfbmVudHNfZm9yX2xlbihyZXEtPnNyYywKKysJCQkJCQkJICAgIENVUlZFMjU1MTlfS0VZX1NJWkUpLAorKwkJCQkJICAgcHVibGljX2tleSwgQ1VSVkUyNTUxOV9LRVlfU0laRSk7CisrCQlpZiAoY29waWVkICE9IENVUlZFMjU1MTlfS0VZX1NJWkUpCisrCQkJcmV0dXJuIC1FSU5WQUw7CisrCQlicCA9IHB1YmxpY19rZXk7CisrCX0gZWxzZSB7CisrCQlicCA9IGN1cnZlMjU1MTlfYmFzZV9wb2ludDsKKysJfQorKworKwljdXJ2ZTI1NTE5X2FyY2goYnVmLCBzZWNyZXQsIGJwKTsKKysKKysJLyogbWlnaHQgd2FudCBsZXNzIHRoYW4gd2UndmUgZ290ICovCisrCW5ieXRlcyA9IG1pbl90KHNpemVfdCwgQ1VSVkUyNTUxOV9LRVlfU0laRSwgcmVxLT5kc3RfbGVuKTsKKysJY29waWVkID0gc2dfY29weV9mcm9tX2J1ZmZlcihyZXEtPmRzdCwgc2dfbmVudHNfZm9yX2xlbihyZXEtPmRzdCwKKysJCQkJCQkJCW5ieXRlcyksCisrCQkJCSAgICAgYnVmLCBuYnl0ZXMpOworKwlpZiAoY29waWVkICE9IG5ieXRlcykKKysJCXJldHVybiAtRUlOVkFMOworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIHVuc2lnbmVkIGludCBjdXJ2ZTI1NTE5X21heF9zaXplKHN0cnVjdCBjcnlwdG9fa3BwICp0Zm0pCisreworKwlyZXR1cm4gQ1VSVkUyNTUxOV9LRVlfU0laRTsKKyt9CisrCisrc3RhdGljIHN0cnVjdCBrcHBfYWxnIGN1cnZlMjU1MTlfYWxnID0geworKwkuYmFzZS5jcmFfbmFtZQkJPSAiY3VydmUyNTUxOSIsCisrCS5iYXNlLmNyYV9kcml2ZXJfbmFtZQk9ICJjdXJ2ZTI1NTE5LW5lb24iLAorKwkuYmFzZS5jcmFfcHJpb3JpdHkJPSAyMDAsCisrCS5iYXNlLmNyYV9tb2R1bGUJPSBUSElTX01PRFVMRSwKKysJLmJhc2UuY3JhX2N0eHNpemUJPSBDVVJWRTI1NTE5X0tFWV9TSVpFLAorKworKwkuc2V0X3NlY3JldAkJPSBjdXJ2ZTI1NTE5X3NldF9zZWNyZXQsCisrCS5nZW5lcmF0ZV9wdWJsaWNfa2V5CT0gY3VydmUyNTUxOV9jb21wdXRlX3ZhbHVlLAorKwkuY29tcHV0ZV9zaGFyZWRfc2VjcmV0CT0gY3VydmUyNTUxOV9jb21wdXRlX3ZhbHVlLAorKwkubWF4X3NpemUJCT0gY3VydmUyNTUxOV9tYXhfc2l6ZSwKKyt9OworKworK3N0YXRpYyBpbnQgX19pbml0IG1vZF9pbml0KHZvaWQpCisreworKwlpZiAoZWxmX2h3Y2FwICYgSFdDQVBfTkVPTikgeworKwkJc3RhdGljX2JyYW5jaF9lbmFibGUoJmhhdmVfbmVvbik7CisrCQlyZXR1cm4gY3J5cHRvX3JlZ2lzdGVyX2twcCgmY3VydmUyNTUxOV9hbGcpOworKwl9CisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgdm9pZCBfX2V4aXQgbW9kX2V4aXQodm9pZCkKKyt7CisrCWlmIChlbGZfaHdjYXAgJiBIV0NBUF9ORU9OKQorKwkJY3J5cHRvX3VucmVnaXN0ZXJfa3BwKCZjdXJ2ZTI1NTE5X2FsZyk7CisrfQorKworK21vZHVsZV9pbml0KG1vZF9pbml0KTsKKyttb2R1bGVfZXhpdChtb2RfZXhpdCk7CisrCisrTU9EVUxFX0FMSUFTX0NSWVBUTygiY3VydmUyNTUxOSIpOworK01PRFVMRV9BTElBU19DUllQVE8oImN1cnZlMjU1MTktbmVvbiIpOworK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMzItY3J5cHRvLWNoYWNoYTIwcG9seTEzMDUtaW1wb3J0LWNvbnN0cnVjdGlvbi1hbmQtc2VsZi5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMzItY3J5cHRvLWNoYWNoYTIwcG9seTEzMDUtaW1wb3J0LWNvbnN0cnVjdGlvbi1hbmQtc2VsZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDU2MDFkCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAzMi1jcnlwdG8tY2hhY2hhMjBwb2x5MTMwNS1pbXBvcnQtY29uc3RydWN0aW9uLWFuZC1zZWxmLnBhdGNoCkBAIC0wLDAgKzEsNzY3NyBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQXJkIEJpZXNoZXV2ZWwgPGFyZGJAa2VybmVsLm9yZz4KK0RhdGU6IEZyaSwgOCBOb3YgMjAxOSAxMzoyMjozOSArMDEwMAorU3ViamVjdDogW1BBVENIXSBjcnlwdG86IGNoYWNoYTIwcG9seTEzMDUgLSBpbXBvcnQgY29uc3RydWN0aW9uIGFuZCBzZWxmdGVzdAorIGZyb20gWmluYworCitjb21taXQgZWQyMDA3OGI3ZTMzMzFlODI4MjhiZTM1NzE0N2FmNmEzMjgyZTRjZSB1cHN0cmVhbS4KKworVGhpcyBpbmNvcnBvcmF0ZXMgdGhlIGNoYWNoYTIwcG9seTEzMDUgZnJvbSB0aGUgWmluYyBsaWJyYXJ5LCByZXRhaW5pbmcKK3RoZSBsaWJyYXJ5IGludGVyZmFjZSwgYnV0IHJlcGxhY2luZyB0aGUgaW1wbGVtZW50YXRpb24gd2l0aCBjYWxscyBpbnRvCit0aGUgY29kZSB0aGF0IGFscmVhZHkgZXhpc3RlZCBpbiB0aGUga2VybmVsJ3MgY3J5cHRvIEFQSS4KKworTm90ZSB0aGF0IHRoaXMgbGlicmFyeSBBUEkgZG9lcyBub3QgaW1wbGVtZW50IFJGQzc1MzkgZnVsbHksIGdpdmVuIHRoYXQKK2l0IGlzIGxpbWl0ZWQgdG8gNjQtYml0IG5vbmNlcy4gKFRoZSA5Ni1iaXQgbm9uY2UgdmVyc2lvbiB0aGF0IHdhcyBwYXJ0CitvZiB0aGUgc2VsZnRlc3Qgb25seSBoYXMgYmVlbiByZW1vdmVkLCBhbG9uZyB3aXRoIHRoZSA5Ni1iaXQgbm9uY2UgdGVzdAordmVjdG9ycyB0aGF0IG9ubHkgdGVzdGVkIHRoZSBzZWxmdGVzdCBidXQgbm90IHRoZSBhY3R1YWwgbGlicmFyeSBpdHNlbGYpCisKK1NpZ25lZC1vZmYtYnk6IEFyZCBCaWVzaGV1dmVsIDxhcmRiQGtlcm5lbC5vcmc+CitTaWduZWQtb2ZmLWJ5OiBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGluY2x1ZGUvY3J5cHRvL2NoYWNoYTIwcG9seTEzMDUuaCAgICAgIHwgICAzNyArCisgbGliL2NyeXB0by9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgfCAgICA3ICsKKyBsaWIvY3J5cHRvL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKworIGxpYi9jcnlwdG8vY2hhY2hhMjBwb2x5MTMwNS1zZWxmdGVzdC5jIHwgNzM0OCArKysrKysrKysrKysrKysrKysrKysrKysKKyBsaWIvY3J5cHRvL2NoYWNoYTIwcG9seTEzMDUuYyAgICAgICAgICB8ICAyMTkgKworIDUgZmlsZXMgY2hhbmdlZCwgNzYxNSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvY3J5cHRvL2NoYWNoYTIwcG9seTEzMDUuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvY3J5cHRvL2NoYWNoYTIwcG9seTEzMDUtc2VsZnRlc3QuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvY3J5cHRvL2NoYWNoYTIwcG9seTEzMDUuYworCistLS0gL2Rldi9udWxsCisrKysgYi9pbmNsdWRlL2NyeXB0by9jaGFjaGEyMHBvbHkxMzA1LmgKK0BAIC0wLDAgKzEsMzcgQEAKKysvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBNSVQgKi8KKysvKgorKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKysgKi8KKysKKysjaWZuZGVmIF9fQ0hBQ0hBMjBQT0xZMTMwNV9ICisrI2RlZmluZSBfX0NIQUNIQTIwUE9MWTEzMDVfSAorKworKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorKworK2VudW0gY2hhY2hhMjBwb2x5MTMwNV9sZW5ndGhzIHsKKysJWENIQUNIQTIwUE9MWTEzMDVfTk9OQ0VfU0laRSA9IDI0LAorKwlDSEFDSEEyMFBPTFkxMzA1X0tFWV9TSVpFID0gMzIsCisrCUNIQUNIQTIwUE9MWTEzMDVfQVVUSFRBR19TSVpFID0gMTYKKyt9OworKworK3ZvaWQgY2hhY2hhMjBwb2x5MTMwNV9lbmNyeXB0KHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsIGNvbnN0IHNpemVfdCBzcmNfbGVuLAorKwkJCSAgICAgIGNvbnN0IHU4ICphZCwgY29uc3Qgc2l6ZV90IGFkX2xlbiwKKysJCQkgICAgICBjb25zdCB1NjQgbm9uY2UsCisrCQkJICAgICAgY29uc3QgdTgga2V5W0NIQUNIQTIwUE9MWTEzMDVfS0VZX1NJWkVdKTsKKysKKytib29sIF9fbXVzdF9jaGVjaworK2NoYWNoYTIwcG9seTEzMDVfZGVjcnlwdCh1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCBjb25zdCBzaXplX3Qgc3JjX2xlbiwKKysJCQkgY29uc3QgdTggKmFkLCBjb25zdCBzaXplX3QgYWRfbGVuLCBjb25zdCB1NjQgbm9uY2UsCisrCQkJIGNvbnN0IHU4IGtleVtDSEFDSEEyMFBPTFkxMzA1X0tFWV9TSVpFXSk7CisrCisrdm9pZCB4Y2hhY2hhMjBwb2x5MTMwNV9lbmNyeXB0KHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsIGNvbnN0IHNpemVfdCBzcmNfbGVuLAorKwkJCSAgICAgICBjb25zdCB1OCAqYWQsIGNvbnN0IHNpemVfdCBhZF9sZW4sCisrCQkJICAgICAgIGNvbnN0IHU4IG5vbmNlW1hDSEFDSEEyMFBPTFkxMzA1X05PTkNFX1NJWkVdLAorKwkJCSAgICAgICBjb25zdCB1OCBrZXlbQ0hBQ0hBMjBQT0xZMTMwNV9LRVlfU0laRV0pOworKworK2Jvb2wgX19tdXN0X2NoZWNrIHhjaGFjaGEyMHBvbHkxMzA1X2RlY3J5cHQoCisrCXU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsIGNvbnN0IHNpemVfdCBzcmNfbGVuLCBjb25zdCB1OCAqYWQsCisrCWNvbnN0IHNpemVfdCBhZF9sZW4sIGNvbnN0IHU4IG5vbmNlW1hDSEFDSEEyMFBPTFkxMzA1X05PTkNFX1NJWkVdLAorKwljb25zdCB1OCBrZXlbQ0hBQ0hBMjBQT0xZMTMwNV9LRVlfU0laRV0pOworKworKyNlbmRpZiAvKiBfX0NIQUNIQTIwUE9MWTEzMDVfSCAqLworLS0tIGEvbGliL2NyeXB0by9LY29uZmlnCisrKysgYi9saWIvY3J5cHRvL0tjb25maWcKK0BAIC0xMTksNSArMTE5LDEyIEBAIGNvbmZpZyBDUllQVE9fTElCX1BPTFkxMzA1CisgCSAgYnkgZWl0aGVyIHRoZSBnZW5lcmljIGltcGxlbWVudGF0aW9uIG9yIGFuIGFyY2gtc3BlY2lmaWMgb25lLCBpZiBvbmUKKyAJICBpcyBhdmFpbGFibGUgYW5kIGVuYWJsZWQuCisgCisrY29uZmlnIENSWVBUT19MSUJfQ0hBQ0hBMjBQT0xZMTMwNQorKwl0cmlzdGF0ZSAiQ2hhQ2hhMjAtUG9seTEzMDUgQUVBRCBzdXBwb3J0ICg4LWJ5dGUgbm9uY2UgbGlicmFyeSB2ZXJzaW9uKSIKKysJZGVwZW5kcyBvbiBDUllQVE9fQVJDSF9IQVZFX0xJQl9DSEFDSEEgfHwgIUNSWVBUT19BUkNIX0hBVkVfTElCX0NIQUNIQQorKwlkZXBlbmRzIG9uIENSWVBUT19BUkNIX0hBVkVfTElCX1BPTFkxMzA1IHx8ICFDUllQVE9fQVJDSF9IQVZFX0xJQl9QT0xZMTMwNQorKwlzZWxlY3QgQ1JZUFRPX0xJQl9DSEFDSEEKKysJc2VsZWN0IENSWVBUT19MSUJfUE9MWTEzMDUKKysKKyBjb25maWcgQ1JZUFRPX0xJQl9TSEEyNTYKKyAJdHJpc3RhdGUKKy0tLSBhL2xpYi9jcnlwdG8vTWFrZWZpbGUKKysrKyBiL2xpYi9jcnlwdG8vTWFrZWZpbGUKK0BAIC0xNiw2ICsxNiw5IEBAIGxpYmJsYWtlMnMtZ2VuZXJpYy15CQkJCSs9IGJsYWtlMnMtZ2VuZXIKKyBvYmotJChDT05GSUdfQ1JZUFRPX0xJQl9CTEFLRTJTKQkJKz0gbGliYmxha2Uycy5vCisgbGliYmxha2Uycy15CQkJCQkrPSBibGFrZTJzLm8KKyAKKytvYmotJChDT05GSUdfQ1JZUFRPX0xJQl9DSEFDSEEyMFBPTFkxMzA1KQkrPSBsaWJjaGFjaGEyMHBvbHkxMzA1Lm8KKytsaWJjaGFjaGEyMHBvbHkxMzA1LXkJCQkJKz0gY2hhY2hhMjBwb2x5MTMwNS5vCisrCisgb2JqLSQoQ09ORklHX0NSWVBUT19MSUJfQ1VSVkUyNTUxOV9HRU5FUklDKQkrPSBsaWJjdXJ2ZTI1NTE5Lm8KKyBsaWJjdXJ2ZTI1NTE5LXkJCQkJCTo9IGN1cnZlMjU1MTktZmlhdDMyLm8KKyBsaWJjdXJ2ZTI1NTE5LSQoQ09ORklHX0FSQ0hfU1VQUE9SVFNfSU5UMTI4KQk6PSBjdXJ2ZTI1NTE5LWhhY2w2NC5vCitAQCAtMzIsNCArMzUsNSBAQCBsaWJzaGEyNTYteQkJCQkJOj0gc2hhMjU2Lm8KKyAKKyBpZm5lcSAoJChDT05GSUdfQ1JZUFRPX01BTkFHRVJfRElTQUJMRV9URVNUUykseSkKKyBsaWJibGFrZTJzLXkJCQkJCSs9IGJsYWtlMnMtc2VsZnRlc3QubworK2xpYmNoYWNoYTIwcG9seTEzMDUteQkJCQkrPSBjaGFjaGEyMHBvbHkxMzA1LXNlbGZ0ZXN0Lm8KKyBlbmRpZgorLS0tIC9kZXYvbnVsbAorKysrIGIvbGliL2NyeXB0by9jaGFjaGEyMHBvbHkxMzA1LXNlbGZ0ZXN0LmMKK0BAIC0wLDAgKzEsNzM0OCBAQAorKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVAorKy8qCisrICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKyAqLworKworKyNpbmNsdWRlIDxjcnlwdG8vY2hhY2hhMjBwb2x5MTMwNS5oPgorKyNpbmNsdWRlIDxjcnlwdG8vcG9seTEzMDUuaD4KKysKKysjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorKyNpbmNsdWRlIDxsaW51eC9idWcuaD4KKysjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKysjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorKworK3N0cnVjdCBjaGFjaGEyMHBvbHkxMzA1X3Rlc3R2ZWMgeworKwljb25zdCB1OCAqaW5wdXQsICpvdXRwdXQsICphc3NvYywgKm5vbmNlLCAqa2V5OworKwlzaXplX3QgaWxlbiwgYWxlbiwgbmxlbjsKKysJYm9vbCBmYWlsdXJlOworK307CisrCisrLyogVGhlIGZpcnN0IG9mIHRoZXNlIGFyZSB0aGUgQ2hhQ2hhMjAtUG9seTEzMDUgQUVBRCB0ZXN0IHZlY3RvcnMgZnJvbSBSRkM3NTM5CisrICogMi44LjIuIEFmdGVyIHRoZXkgYXJlIGdlbmVyYXRlZCBieSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb25zLiBBbmQgdGhlIGZpbmFsCisrICogbWFya2VkIG9uZXMgYXJlIHRha2VuIGZyb20gd3ljaGVwcm9vZiwgYnV0IHdlIG9ubHkgZG8gdGhlc2UgZm9yIHRoZSBlbmNyeXB0CisrICogc2lkZSwgYmVjYXVzZSBtb3N0bHkgd2UncmUgc3RyZXNzaW5nIHRoZSBwcmltaXRpdmVzIHJhdGhlciB0aGFuIHRoZSBhY3R1YWwKKysgKiBjaGFwb2x5IGNvbnN0cnVjdGlvbi4KKysgKi8KKysKKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDAxW10gX19pbml0Y29uc3QgPSB7CisrCTB4NDksIDB4NmUsIDB4NzQsIDB4NjUsIDB4NzIsIDB4NmUsIDB4NjUsIDB4NzQsCisrCTB4MmQsIDB4NDQsIDB4NzIsIDB4NjEsIDB4NjYsIDB4NzQsIDB4NzMsIDB4MjAsCisrCTB4NjEsIDB4NzIsIDB4NjUsIDB4MjAsIDB4NjQsIDB4NzIsIDB4NjEsIDB4NjYsCisrCTB4NzQsIDB4MjAsIDB4NjQsIDB4NmYsIDB4NjMsIDB4NzUsIDB4NmQsIDB4NjUsCisrCTB4NmUsIDB4NzQsIDB4NzMsIDB4MjAsIDB4NzYsIDB4NjEsIDB4NmMsIDB4NjksCisrCTB4NjQsIDB4MjAsIDB4NjYsIDB4NmYsIDB4NzIsIDB4MjAsIDB4NjEsIDB4MjAsCisrCTB4NmQsIDB4NjEsIDB4NzgsIDB4NjksIDB4NmQsIDB4NzUsIDB4NmQsIDB4MjAsCisrCTB4NmYsIDB4NjYsIDB4MjAsIDB4NzMsIDB4NjksIDB4NzgsIDB4MjAsIDB4NmQsCisrCTB4NmYsIDB4NmUsIDB4NzQsIDB4NjgsIDB4NzMsIDB4MjAsIDB4NjEsIDB4NmUsCisrCTB4NjQsIDB4MjAsIDB4NmQsIDB4NjEsIDB4NzksIDB4MjAsIDB4NjIsIDB4NjUsCisrCTB4MjAsIDB4NzUsIDB4NzAsIDB4NjQsIDB4NjEsIDB4NzQsIDB4NjUsIDB4NjQsCisrCTB4MmMsIDB4MjAsIDB4NzIsIDB4NjUsIDB4NzAsIDB4NmMsIDB4NjEsIDB4NjMsCisrCTB4NjUsIDB4NjQsIDB4MmMsIDB4MjAsIDB4NmYsIDB4NzIsIDB4MjAsIDB4NmYsCisrCTB4NjIsIDB4NzMsIDB4NmYsIDB4NmMsIDB4NjUsIDB4NzQsIDB4NjUsIDB4NjQsCisrCTB4MjAsIDB4NjIsIDB4NzksIDB4MjAsIDB4NmYsIDB4NzQsIDB4NjgsIDB4NjUsCisrCTB4NzIsIDB4MjAsIDB4NjQsIDB4NmYsIDB4NjMsIDB4NzUsIDB4NmQsIDB4NjUsCisrCTB4NmUsIDB4NzQsIDB4NzMsIDB4MjAsIDB4NjEsIDB4NzQsIDB4MjAsIDB4NjEsCisrCTB4NmUsIDB4NzksIDB4MjAsIDB4NzQsIDB4NjksIDB4NmQsIDB4NjUsIDB4MmUsCisrCTB4MjAsIDB4NDksIDB4NzQsIDB4MjAsIDB4NjksIDB4NzMsIDB4MjAsIDB4NjksCisrCTB4NmUsIDB4NjEsIDB4NzAsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NzAsIDB4NzIsCisrCTB4NjksIDB4NjEsIDB4NzQsIDB4NjUsIDB4MjAsIDB4NzQsIDB4NmYsIDB4MjAsCisrCTB4NzUsIDB4NzMsIDB4NjUsIDB4MjAsIDB4NDksIDB4NmUsIDB4NzQsIDB4NjUsCisrCTB4NzIsIDB4NmUsIDB4NjUsIDB4NzQsIDB4MmQsIDB4NDQsIDB4NzIsIDB4NjEsCisrCTB4NjYsIDB4NzQsIDB4NzMsIDB4MjAsIDB4NjEsIDB4NzMsIDB4MjAsIDB4NzIsCisrCTB4NjUsIDB4NjYsIDB4NjUsIDB4NzIsIDB4NjUsIDB4NmUsIDB4NjMsIDB4NjUsCisrCTB4MjAsIDB4NmQsIDB4NjEsIDB4NzQsIDB4NjUsIDB4NzIsIDB4NjksIDB4NjEsCisrCTB4NmMsIDB4MjAsIDB4NmYsIDB4NzIsIDB4MjAsIDB4NzQsIDB4NmYsIDB4MjAsCisrCTB4NjMsIDB4NjksIDB4NzQsIDB4NjUsIDB4MjAsIDB4NzQsIDB4NjgsIDB4NjUsCisrCTB4NmQsIDB4MjAsIDB4NmYsIDB4NzQsIDB4NjgsIDB4NjUsIDB4NzIsIDB4MjAsCisrCTB4NzQsIDB4NjgsIDB4NjEsIDB4NmUsIDB4MjAsIDB4NjEsIDB4NzMsIDB4MjAsCisrCTB4MmYsIDB4ZTIsIDB4ODAsIDB4OWMsIDB4NzcsIDB4NmYsIDB4NzIsIDB4NmIsCisrCTB4MjAsIDB4NjksIDB4NmUsIDB4MjAsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NjcsCisrCTB4NzIsIDB4NjUsIDB4NzMsIDB4NzMsIDB4MmUsIDB4MmYsIDB4ZTIsIDB4ODAsCisrCTB4OWQKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDAxW10gX19pbml0Y29uc3QgPSB7CisrCTB4NjQsIDB4YTAsIDB4ODYsIDB4MTUsIDB4NzUsIDB4ODYsIDB4MWEsIDB4ZjQsCisrCTB4NjAsIDB4ZjAsIDB4NjIsIDB4YzcsIDB4OWIsIDB4ZTYsIDB4NDMsIDB4YmQsCisrCTB4NWUsIDB4ODAsIDB4NWMsIDB4ZmQsIDB4MzQsIDB4NWMsIDB4ZjMsIDB4ODksCisrCTB4ZjEsIDB4MDgsIDB4NjcsIDB4MGEsIDB4YzcsIDB4NmMsIDB4OGMsIDB4YjIsCisrCTB4NGMsIDB4NmMsIDB4ZmMsIDB4MTgsIDB4NzUsIDB4NWQsIDB4NDMsIDB4ZWUsCisrCTB4YTAsIDB4OWUsIDB4ZTksIDB4NGUsIDB4MzgsIDB4MmQsIDB4MjYsIDB4YjAsCisrCTB4YmQsIDB4YjcsIDB4YjcsIDB4M2MsIDB4MzIsIDB4MWIsIDB4MDEsIDB4MDAsCisrCTB4ZDQsIDB4ZjAsIDB4M2IsIDB4N2YsIDB4MzUsIDB4NTgsIDB4OTQsIDB4Y2YsCisrCTB4MzMsIDB4MmYsIDB4ODMsIDB4MGUsIDB4NzEsIDB4MGIsIDB4OTcsIDB4Y2UsCisrCTB4OTgsIDB4YzgsIDB4YTgsIDB4NGEsIDB4YmQsIDB4MGIsIDB4OTQsIDB4ODEsCisrCTB4MTQsIDB4YWQsIDB4MTcsIDB4NmUsIDB4MDAsIDB4OGQsIDB4MzMsIDB4YmQsCisrCTB4NjAsIDB4ZjksIDB4ODIsIDB4YjEsIDB4ZmYsIDB4MzcsIDB4YzgsIDB4NTUsCisrCTB4OTcsIDB4OTcsIDB4YTAsIDB4NmUsIDB4ZjQsIDB4ZjAsIDB4ZWYsIDB4NjEsCisrCTB4YzEsIDB4ODYsIDB4MzIsIDB4NGUsIDB4MmIsIDB4MzUsIDB4MDYsIDB4MzgsCisrCTB4MzYsIDB4MDYsIDB4OTAsIDB4N2IsIDB4NmEsIDB4N2MsIDB4MDIsIDB4YjAsCisrCTB4ZjksIDB4ZjYsIDB4MTUsIDB4N2IsIDB4NTMsIDB4YzgsIDB4NjcsIDB4ZTQsCisrCTB4YjksIDB4MTYsIDB4NmMsIDB4NzYsIDB4N2IsIDB4ODAsIDB4NGQsIDB4NDYsCisrCTB4YTUsIDB4OWIsIDB4NTIsIDB4MTYsIDB4Y2QsIDB4ZTcsIDB4YTQsIDB4ZTksCisrCTB4OTAsIDB4NDAsIDB4YzUsIDB4YTQsIDB4MDQsIDB4MzMsIDB4MjIsIDB4NWUsCisrCTB4ZTIsIDB4ODIsIDB4YTEsIDB4YjAsIDB4YTAsIDB4NmMsIDB4NTIsIDB4M2UsCisrCTB4YWYsIDB4NDUsIDB4MzQsIDB4ZDcsIDB4ZjgsIDB4M2YsIDB4YTEsIDB4MTUsCisrCTB4NWIsIDB4MDAsIDB4NDcsIDB4NzEsIDB4OGMsIDB4YmMsIDB4NTQsIDB4NmEsCisrCTB4MGQsIDB4MDcsIDB4MmIsIDB4MDQsIDB4YjMsIDB4NTYsIDB4NGUsIDB4ZWEsCisrCTB4MWIsIDB4NDIsIDB4MjIsIDB4NzMsIDB4ZjUsIDB4NDgsIDB4MjcsIDB4MWEsCisrCTB4MGIsIDB4YjIsIDB4MzEsIDB4NjAsIDB4NTMsIDB4ZmEsIDB4NzYsIDB4OTksCisrCTB4MTksIDB4NTUsIDB4ZWIsIDB4ZDYsIDB4MzEsIDB4NTksIDB4NDMsIDB4NGUsCisrCTB4Y2UsIDB4YmIsIDB4NGUsIDB4NDYsIDB4NmQsIDB4YWUsIDB4NWEsIDB4MTAsCisrCTB4NzMsIDB4YTYsIDB4NzIsIDB4NzYsIDB4MjcsIDB4MDksIDB4N2EsIDB4MTAsCisrCTB4NDksIDB4ZTYsIDB4MTcsIDB4ZDksIDB4MWQsIDB4MzYsIDB4MTAsIDB4OTQsCisrCTB4ZmEsIDB4NjgsIDB4ZjAsIDB4ZmYsIDB4NzcsIDB4OTgsIDB4NzEsIDB4MzAsCisrCTB4MzAsIDB4NWIsIDB4ZWEsIDB4YmEsIDB4MmUsIDB4ZGEsIDB4MDQsIDB4ZGYsCisrCTB4OTksIDB4N2IsIDB4NzEsIDB4NGQsIDB4NmMsIDB4NmYsIDB4MmMsIDB4MjksCisrCTB4YTYsIDB4YWQsIDB4NWMsIDB4YjQsIDB4MDIsIDB4MmIsIDB4MDIsIDB4NzAsCisrCTB4OWIsIDB4ZWUsIDB4YWQsIDB4OWQsIDB4NjcsIDB4ODksIDB4MGMsIDB4YmIsCisrCTB4MjIsIDB4MzksIDB4MjMsIDB4MzYsIDB4ZmUsIDB4YTEsIDB4ODUsIDB4MWYsCisrCTB4MzgKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwMDFbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmMywgMHgzMywgMHg4OCwgMHg4NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJMHgwMCwgMHgwMCwgMHg0ZSwgMHg5MQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTAwMVtdIF9faW5pdGNvbnN0ID0geworKwkweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDA4CisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTAwMVtdIF9faW5pdGNvbnN0ID0geworKwkweDFjLCAweDkyLCAweDQwLCAweGE1LCAweGViLCAweDU1LCAweGQzLCAweDhhLAorKwkweGYzLCAweDMzLCAweDg4LCAweDg2LCAweDA0LCAweGY2LCAweGI1LCAweGYwLAorKwkweDQ3LCAweDM5LCAweDE3LCAweGMxLCAweDQwLCAweDJiLCAweDgwLCAweDA5LAorKwkweDlkLCAweGNhLCAweDVjLCAweGJjLCAweDIwLCAweDcwLCAweDc1LCAweGMwCisrfTsKKysKKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDAyW10gX19pbml0Y29uc3QgPSB7IH07Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQwMDJbXSBfX2luaXRjb25zdCA9IHsKKysJMHhlYSwgMHhlMCwgMHgxZSwgMHg5ZSwgMHgyYywgMHg5MSwgMHhhYSwgMHhlMSwKKysJMHhkYiwgMHg1ZCwgMHg5OSwgMHgzZiwgMHg4YSwgMHhmNywgMHg2OSwgMHg5MgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzAwMltdIF9faW5pdGNvbnN0ID0geyB9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UwMDJbXSBfX2luaXRjb25zdCA9IHsKKysJMHhjYSwgMHhiZiwgMHgzMywgMHg3MSwgMHgzMiwgMHg0NSwgMHg3NywgMHg4ZQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkwMDJbXSBfX2luaXRjb25zdCA9IHsKKysJMHg0YywgMHhmNSwgMHg5NiwgMHg4MywgMHgzOCwgMHhlNiwgMHhhZSwgMHg3ZiwKKysJMHgyZCwgMHgyOSwgMHgyNSwgMHg3NiwgMHhkNSwgMHg3NSwgMHgyNywgMHg4NiwKKysJMHg5MSwgMHg5YSwgMHgyNywgMHg3YSwgMHhmYiwgMHg0NiwgMHhjNSwgMHhlZiwKKysJMHg5NCwgMHg4MSwgMHg3OSwgMHg1NywgMHgxNCwgMHg1OSwgMHg0MCwgMHg2OAorK307CisrCisrc3RhdGljIGNvbnN0IHU4IGVuY19pbnB1dDAwM1tdIF9faW5pdGNvbnN0ID0geyB9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDAzW10gX19pbml0Y29uc3QgPSB7CisrCTB4ZGQsIDB4NmIsIDB4M2IsIDB4ODIsIDB4Y2UsIDB4NWEsIDB4YmQsIDB4ZDYsCisrCTB4YTksIDB4MzUsIDB4ODMsIDB4ZDgsIDB4OGMsIDB4M2QsIDB4ODUsIDB4NzcKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwMDNbXSBfX2luaXRjb25zdCA9IHsKKysJMHgzMywgMHgxMCwgMHg0MSwgMHgxMiwgMHgxZiwgMHhmMywgMHhkMiwgMHg2YgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTAwM1tdIF9faW5pdGNvbnN0ID0geworKwkweDNkLCAweDg2LCAweGI1LCAweDZiLCAweGM4LCAweGEzLCAweDFmLCAweDFkCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTAwM1tdIF9faW5pdGNvbnN0ID0geworKwkweDJkLCAweGIwLCAweDVkLCAweDQwLCAweGM4LCAweGVkLCAweDQ0LCAweDg4LAorKwkweDM0LCAweGQxLCAweDEzLCAweGFmLCAweDU3LCAweGExLCAweGViLCAweDNhLAorKwkweDJhLCAweDgwLCAweDUxLCAweDM2LCAweGVjLCAweDViLCAweGJjLCAweDA4LAorKwkweDkzLCAweDg0LCAweDIxLCAweGI1LCAweDEzLCAweDg4LCAweDNjLCAweDBkCisrfTsKKysKKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDA0W10gX19pbml0Y29uc3QgPSB7CisrCTB4YTQKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDA0W10gX19pbml0Y29uc3QgPSB7CisrCTB4YjcsIDB4MWIsIDB4YjAsIDB4NzMsIDB4NTksIDB4YjAsIDB4ODQsIDB4YjIsCisrCTB4NmQsIDB4OGUsIDB4YWIsIDB4OTQsIDB4MzEsIDB4YTEsIDB4YWUsIDB4YWMsCisrCTB4ODkKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwMDRbXSBfX2luaXRjb25zdCA9IHsKKysJMHg2YSwgMHhlMiwgMHhhZCwgMHgzZiwgMHg4OCwgMHgzOSwgMHg1YSwgMHg0MAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTAwNFtdIF9faW5pdGNvbnN0ID0geworKwkweGQyLCAweDMyLCAweDFmLCAweDI5LCAweDI4LCAweGM2LCAweGM0LCAweGM0CisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTAwNFtdIF9faW5pdGNvbnN0ID0geworKwkweDRiLCAweDI4LCAweDRiLCAweGEzLCAweDdiLCAweGJlLCAweGU5LCAweGY4LAorKwkweDMxLCAweDgwLCAweDgyLCAweGQ3LCAweGQ4LCAweGU4LCAweGI1LCAweGExLAorKwkweGUyLCAweDE4LCAweDE4LCAweDhhLCAweDljLCAweGZhLCAweGEzLCAweDNkLAorKwkweDI1LCAweDcxLCAweDNlLCAweDQwLCAweGJjLCAweDU0LCAweDdhLCAweDNlCisrfTsKKysKKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDA1W10gX19pbml0Y29uc3QgPSB7CisrCTB4MmQKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDA1W10gX19pbml0Y29uc3QgPSB7CisrCTB4YmYsIDB4ZTEsIDB4NWIsIDB4MGIsIDB4ZGIsIDB4NmIsIDB4ZjUsIDB4NWUsCisrCTB4NmMsIDB4NWQsIDB4ODQsIDB4NDQsIDB4MzksIDB4ODEsIDB4YzEsIDB4OWMsCisrCTB4YWMKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwMDVbXSBfX2luaXRjb25zdCA9IHsgfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX25vbmNlMDA1W10gX19pbml0Y29uc3QgPSB7CisrCTB4MjAsIDB4MWMsIDB4YWEsIDB4NWYsIDB4OWMsIDB4YmYsIDB4OTIsIDB4MzAKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfa2V5MDA1W10gX19pbml0Y29uc3QgPSB7CisrCTB4NjYsIDB4Y2EsIDB4OWMsIDB4MjMsIDB4MmEsIDB4NGIsIDB4NGIsIDB4MzEsCisrCTB4MGUsIDB4OTIsIDB4ODksIDB4OGIsIDB4ZjQsIDB4OTMsIDB4YzcsIDB4ODcsCisrCTB4OTgsIDB4YTMsIDB4ZDgsIDB4MzksIDB4ZjgsIDB4ZjQsIDB4YTcsIDB4MDEsCisrCTB4YzAsIDB4MmUsIDB4MGEsIDB4YTYsIDB4N2UsIDB4NWEsIDB4NzgsIDB4ODcKKyt9OworKworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwMDZbXSBfX2luaXRjb25zdCA9IHsKKysJMHgzMywgMHgyZiwgMHg5NCwgMHhjMSwgMHhhNCwgMHhlZiwgMHhjYywgMHgyYSwKKysJMHg1YiwgMHhhNiwgMHhlNSwgMHg4ZiwgMHgxZCwgMHg0MCwgMHhmMCwgMHg5MiwKKysJMHgzYywgMHhkOSwgMHgyNCwgMHgxMSwgMHhhOSwgMHg3MSwgMHhmOSwgMHgzNywKKysJMHgxNCwgMHg5OSwgMHhmYSwgMHhiZSwgMHhlNiwgMHg4MCwgMHhkZSwgMHg1MCwKKysJMHhjOSwgMHg5NiwgMHhkNCwgMHhiMCwgMHhlYywgMHg5ZSwgMHgxNywgMHhlYywKKysJMHhkMiwgMHg1ZSwgMHg3MiwgMHg5OSwgMHhmYywgMHgwYSwgMHhlMSwgMHhjYiwKKysJMHg0OCwgMHhkMiwgMHg4NSwgMHhkZCwgMHgyZiwgMHg5MCwgMHhlMCwgMHg2NiwKKysJMHgzYiwgMHhlNiwgMHgyMCwgMHg3NCwgMHhiZSwgMHgyMywgMHg4ZiwgMHhjYiwKKysJMHhiNCwgMHhlNCwgMHhkYSwgMHg0OCwgMHg0MCwgMHhhNiwgMHhkMSwgMHgxYiwKKysJMHhjNywgMHg0MiwgMHhjZSwgMHgyZiwgMHgwYywgMHhhNiwgMHg4NSwgMHg2ZSwKKysJMHg4NywgMHgzNywgMHgwMywgMHhiMSwgMHg3YywgMHgyNSwgMHg5NiwgMHhhMywKKysJMHgwNSwgMHhkOCwgMHhiMCwgMHhmNCwgMHhlZCwgMHhlYSwgMHhjMiwgMHhmMCwKKysJMHgzMSwgMHg5OCwgMHg2YywgMHhkMSwgMHgxNCwgMHgyNSwgMHhjMCwgMHhjYiwKKysJMHgwMSwgMHg3NCwgMHhkMCwgMHg4MiwgMHhmNCwgMHgzNiwgMHhmNSwgMHg0MSwKKysJMHhkNSwgMHhkYywgMHhjYSwgMHhjNSwgMHhiYiwgMHg5OCwgMHhmZSwgMHhmYywKKysJMHg2OSwgMHgyMSwgMHg3MCwgMHhkOCwgMHhhNCwgMHg0YiwgMHhjOCwgMHhkZSwKKysJMHg4ZgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQwMDZbXSBfX2luaXRjb25zdCA9IHsKKysJMHg4YiwgMHgwNiwgMHhkMywgMHgzMSwgMHhiMCwgMHg5MywgMHg0NSwgMHhiMSwKKysJMHg3NSwgMHg2ZSwgMHgyNiwgMHhmOSwgMHg2NywgMHhiYywgMHg5MCwgMHgxNSwKKysJMHg4MSwgMHgyYywgMHhiNSwgMHhmMCwgMHhjNiwgMHgyYiwgMHhjNywgMHg4YywKKysJMHg1NiwgMHhkMSwgMHhiZiwgMHg2OSwgMHg2YywgMHgwNywgMHhhMCwgMHhkYSwKKysJMHg2NSwgMHgyNywgMHhjOSwgMHg5MCwgMHgzZCwgMHhlZiwgMHg0YiwgMHgxMSwKKysJMHgwZiwgMHgxOSwgMHgwNywgMHhmZCwgMHgyOSwgMHg5MiwgMHhkOSwgMHhjOCwKKysJMHhmNywgMHg5OSwgMHgyZSwgMHg0YSwgMHhkMCwgMHhiOCwgMHgyYywgMHhkYywKKysJMHg5MywgMHhmNSwgMHg5ZSwgMHgzMywgMHg3OCwgMHhkMSwgMHgzNywgMHhjMywKKysJMHg2NiwgMHhkNywgMHg1ZSwgMHhiYywgMHg0NCwgMHhiZiwgMHg1MywgMHhhNSwKKysJMHhiYywgMHhjNCwgMHhjYiwgMHg3YiwgMHgzYSwgMHg4ZSwgMHg3ZiwgMHgwMiwKKysJMHhiZCwgMHhiYiwgMHhlNywgMHhjYSwgMHhhNiwgMHg2YywgMHg2YiwgMHg5MywKKysJMHgyMSwgMHg5MywgMHgxMCwgMHg2MSwgMHhlNywgMHg2OSwgMHhkMCwgMHg3OCwKKysJMHhmMywgMHgwNywgMHg1YSwgMHgxYSwgMHg4ZiwgMHg3MywgMHhhYSwgMHhiMSwKKysJMHg0ZSwgMHhkMywgMHhkYSwgMHg0ZiwgMHhmMywgMHgzMiwgMHhlMSwgMHg2NiwKKysJMHgzZSwgMHg2YywgMHhjNiwgMHgxMywgMHhiYSwgMHgwNiwgMHg1YiwgMHhmYywKKysJMHg2YSwgMHhlNSwgMHg2ZiwgMHg2MCwgMHhmYiwgMHgwNywgMHg0MCwgMHhiMCwKKysJMHg4YywgMHg5ZCwgMHg4NCwgMHg0MywgMHg2YiwgMHhjMSwgMHhmNywgMHg4ZCwKKysJMHg4ZCwgMHgzMSwgMHhmNywgMHg3YSwgMHgzOSwgMHg0ZCwgMHg4ZiwgMHg5YSwKKysJMHhlYgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzAwNltdIF9faW5pdGNvbnN0ID0geworKwkweDcwLCAweGQzLCAweDMzLCAweGYzLCAweDhiLCAweDE4LCAweDBiCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX25vbmNlMDA2W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZGYsIDB4NTEsIDB4ODQsIDB4ODIsIDB4NDIsIDB4MGMsIDB4NzUsIDB4OWMKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfa2V5MDA2W10gX19pbml0Y29uc3QgPSB7CisrCTB4NjgsIDB4N2IsIDB4OGQsIDB4OGUsIDB4ZTMsIDB4YzQsIDB4ZGQsIDB4YWUsCisrCTB4ZGYsIDB4NzIsIDB4N2YsIDB4NTMsIDB4NzIsIDB4MjUsIDB4MWUsIDB4NzgsCisrCTB4OTEsIDB4Y2IsIDB4NjksIDB4NzYsIDB4MWYsIDB4NDksIDB4OTMsIDB4ZjksCisrCTB4NmYsIDB4MjEsIDB4Y2MsIDB4MzksIDB4OWMsIDB4YWQsIDB4YjEsIDB4MDEKKyt9OworKworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwMDdbXSBfX2luaXRjb25zdCA9IHsKKysJMHg5YiwgMHgxOCwgMHhkYiwgMHhkZCwgMHg5YSwgMHgwZiwgMHgzZSwgMHhhNSwKKysJMHgxNSwgMHgxNywgMHhkZSwgMHhkZiwgMHgwOCwgMHg5ZCwgMHg2NSwgMHgwYSwKKysJMHg2NywgMHgzMCwgMHgxMiwgMHhlMiwgMHgzNCwgMHg3NywgMHg0YiwgMHhjMSwKKysJMHhkOSwgMHhjNiwgMHgxZiwgMHhhYiwgMHhjNiwgMHgxOCwgMHg1MCwgMHgxNywKKysJMHhhNywgMHg5ZCwgMHgzYywgMHhhNiwgMHhjNSwgMHgzNSwgMHg4YywgMHgxYywKKysJMHhjMCwgMHhhMSwgMHg3YywgMHg5ZiwgMHgwMywgMHg4OSwgMHhjYSwgMHhlMSwKKysJMHhlNiwgMHhlOSwgMHhkNCwgMHhkMywgMHg4OCwgMHhkYiwgMHhiNCwgMHg1MSwKKysJMHg5ZCwgMHhlYywgMHhiNCwgMHhmYywgMHg1MiwgMHhlZSwgMHg2ZCwgMHhmMSwKKysJMHg3NSwgMHg0MiwgMHhjNiwgMHhmZCwgMHhiZCwgMHg3YSwgMHg4ZSwgMHg4NiwKKysJMHhmYywgMHg0NCwgMHhiMywgMHg0ZiwgMHhmMywgMHhlYSwgMHg2NywgMHg1YSwKKysJMHg0MSwgMHgxMywgMHhiYSwgMHhiMCwgMHhkYywgMHhlMSwgMHhkMywgMHgyYSwKKysJMHg3YywgMHgyMiwgMHhiMywgMHhjYSwgMHhhYywgMHg2YSwgMHgzNywgMHg5OCwKKysJMHgzZSwgMHgxZCwgMHg0MCwgMHg5NywgMHhmNywgMHg5YiwgMHgxZCwgMHgzNiwKKysJMHg2YiwgMHhiMywgMHgyOCwgMHhiZCwgMHg2MCwgMHg4MiwgMHg0NywgMHgzNCwKKysJMHhhYSwgMHgyZiwgMHg3ZCwgMHhlOSwgMHhhOCwgMHg3MCwgMHg4MSwgMHg1NywKKysJMHhkNCwgMHhiOSwgMHg3NywgMHgwYSwgMHg5ZCwgMHgyOSwgMHhhNywgMHg4NCwKKysJMHg1MiwgMHg0ZiwgMHhjMiwgMHg0YSwgMHg0MCwgMHgzYiwgMHgzYywgMHhkNCwKKysJMHhjOSwgMHgyYSwgMHhkYiwgMHg0YSwgMHg1MywgMHhjNCwgMHhiZSwgMHg4MCwKKysJMHhlOSwgMHg1MSwgMHg3ZiwgMHg4ZiwgMHhjNywgMHhhMiwgMHhjZSwgMHg4MiwKKysJMHg1YywgMHg5MSwgMHgxZSwgMHg3NCwgMHhkOSwgMHhkMCwgMHhiZCwgMHhkNSwKKysJMHhmMywgMHhmZCwgMHhkYSwgMHg0ZCwgMHgyNSwgMHhiNCwgMHhiYiwgMHgyZCwKKysJMHhhYywgMHgyZiwgMHgzZCwgMHg3MSwgMHg4NSwgMHg3YiwgMHhjZiwgMHgzYywKKysJMHg3YiwgMHgzZSwgMHgwZSwgMHgyMiwgMHg3OCwgMHgwYywgMHgyOSwgMHhiZiwKKysJMHhlNCwgMHhmNCwgMHg1NywgMHhiMywgMHhjYiwgMHg0OSwgMHhhMCwgMHhmYywKKysJMHgxZSwgMHgwNSwgMHg0ZSwgMHgxNiwgMHhiYywgMHhkNSwgMHhhOCwgMHhhMywKKysJMHhlZSwgMHgwNSwgMHgzNSwgMHhjNiwgMHg3YywgMHhhYiwgMHg2MCwgMHgxNCwKKysJMHg1NSwgMHgxYSwgMHg4ZSwgMHhjNSwgMHg4OCwgMHg1ZCwgMHhkNSwgMHg4MSwKKysJMHhjMiwgMHg4MSwgMHhhNSwgMHhjNCwgMHg2MCwgMHhkYiwgMHhhZiwgMHg3NywKKysJMHg5MSwgMHhlMSwgMHhjZSwgMHhhMiwgMHg3ZSwgMHg3ZiwgMHg0MiwgMHhlMywKKysJMHhiMCwgMHgxMywgMHgxYywgMHgxZiwgMHgyNSwgMHg2MCwgMHgyMSwgMHhlMiwKKysJMHg0MCwgMHg1ZiwgMHg5OSwgMHhiNywgMHg3MywgMHhlYywgMHg5YiwgMHgyYiwKKysJMHhmMCwgMHg2NSwgMHgxMSwgMHhjOCwgMHhkMCwgMHgwYSwgMHg5ZiwgMHhkMworK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQwMDdbXSBfX2luaXRjb25zdCA9IHsKKysJMHg4NSwgMHgwNCwgMHhjMiwgMHhlZCwgMHg4ZCwgMHhmZCwgMHg5NywgMHg1YywKKysJMHhkMiwgMHhiNywgMHhlMiwgMHhjMSwgMHg2YiwgMHhhMywgMHhiYSwgMHhmOCwKKysJMHhjOSwgMHg1MCwgMHhjMywgMHhjNiwgMHhhNSwgMHhlMywgMHhhNCwgMHg3YywKKysJMHhjMywgMHgyMywgMHg0OSwgMHg1ZSwgMHhhOSwgMHhiOSwgMHgzMiwgMHhlYiwKKysJMHg4YSwgMHg3YywgMHhjYSwgMHhlNSwgMHhlYywgMHhmYiwgMHg3YywgMHhjMCwKKysJMHhjYiwgMHg3ZCwgMHhkYywgMHgyYywgMHg5ZCwgMHg5MiwgMHg1NSwgMHgyMSwKKysJMHgwYSwgMHhjOCwgMHg0MywgMHg2MywgMHg1OSwgMHgwYSwgMHgzMSwgMHg3MCwKKysJMHg4MiwgMHg2NywgMHg0MSwgMHgwMywgMHhmOCwgMHhkZiwgMHhmMiwgMHhhYywKKysJMHhhNywgMHgwMiwgMHhkNCwgMHhkNSwgMHg4YSwgMHgyZCwgMHhjOCwgMHg5OSwKKysJMHgxOSwgMHg2NiwgMHhkMCwgMHhmNiwgMHg4OCwgMHgyYywgMHg3NywgMHhkOSwKKysJMHhkNCwgMHgwZCwgMHg2YywgMHhiZCwgMHg5OCwgMHhkZSwgMHhlNywgMHg3ZiwKKysJMHhhZCwgMHg3ZSwgMHg4YSwgMHhmYiwgMHhlOSwgMHg0YiwgMHhlNSwgMHhmNywKKysJMHhlNSwgMHg1MCwgMHhhMCwgMHg5MCwgMHgzZiwgMHhkNiwgMHgyMiwgMHg1MywKKysJMHhlMywgMHhmZSwgMHgxYiwgMHhjYywgMHg3OSwgMHgzYiwgMHhlYywgMHgxMiwKKysJMHg0NywgMHg1MiwgMHhhNywgMHhkNiwgMHgwNCwgMHhlMywgMHg1MiwgMHhlNiwKKysJMHg5MywgMHg5MCwgMHg5MSwgMHgzMiwgMHg3MywgMHg3OSwgMHhiOCwgMHhkMCwKKysJMHgzMSwgMHhkZSwgMHgxZiwgMHg5ZiwgMHgyZiwgMHgwNSwgMHgzOCwgMHg1NCwKKysJMHgyZiwgMHgzNSwgMHgwNCwgMHgzOSwgMHhlMCwgMHhhNywgMHhiYSwgMHhjNiwKKysJMHg1MiwgMHhmNiwgMHgzNywgMHg2NSwgMHg0YywgMHgwNywgMHhhOSwgMHg3ZSwKKysJMHhiMywgMHgyMSwgMHg2ZiwgMHg3NCwgMHg4YywgMHhjOSwgMHhkZSwgMHhkYiwKKysJMHg2NSwgMHgxYiwgMHg5YiwgMHhhYSwgMHg2MCwgMHhiMSwgMHgwMywgMHgzMCwKKysJMHg2YiwgMHhiMiwgMHgwMywgMHhjNCwgMHgxYywgMHgwNCwgMHhmOCwgMHgwZiwKKysJMHg2NCwgMHhhZiwgMHg0NiwgMHhlNCwgMHg2NSwgMHg5OSwgMHg0OSwgMHhlMiwKKysJMHhlYSwgMHhjZSwgMHg3OCwgMHgwMCwgMHhkOCwgMHg4YiwgMHhkNSwgMHgyZSwKKysJMHhjZiwgMHhmYywgMHg0MCwgMHg0OSwgMHhlOCwgMHg1OCwgMHhkYywgMHgzNCwKKysJMHg5YywgMHg4YywgMHg2MSwgMHhiZiwgMHgwYSwgMHg4ZSwgMHhlYywgMHgzOSwKKysJMHhhOSwgMHgzMCwgMHgwNSwgMHg1YSwgMHhkMiwgMHg1NiwgMHgwMSwgMHhjNywKKysJMHhkYSwgMHg4ZiwgMHg0ZSwgMHhiYiwgMHg0MywgMHhhMywgMHgzYSwgMHhmOSwKKysJMHgxNSwgMHgyYSwgMHhkMCwgMHhhMCwgMHg3YSwgMHg4NywgMHgzNCwgMHg4MiwKKysJMHhmZSwgMHg4YSwgMHhkMSwgMHgyZCwgMHg1ZSwgMHhjNywgMHhiZiwgMHgwNCwKKysJMHg1MywgMHg1ZiwgMHgzYiwgMHgzNiwgMHhkNCwgMHgyNSwgMHg1YywgMHgzNCwKKysJMHg3YSwgMHg4ZCwgMHhkNSwgMHgwNSwgMHhjZSwgMHg3MiwgMHhjYSwgMHhlZiwKKysJMHg3YSwgMHg0YiwgMHhiYywgMHhiMCwgMHgxMCwgMHg1YywgMHg5NiwgMHg0MiwKKysJMHgzYSwgMHgwMCwgMHg5OCwgMHhjZCwgMHgxNSwgMHhlOCwgMHhiNywgMHg1MworK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzAwN1tdIF9faW5pdGNvbnN0ID0geyB9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UwMDdbXSBfX2luaXRjb25zdCA9IHsKKysJMHhkZSwgMHg3YiwgMHhlZiwgMHhjMywgMHg2NSwgMHgxYiwgMHg2OCwgMHhiMAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkwMDdbXSBfX2luaXRjb25zdCA9IHsKKysJMHg4ZCwgMHhiOCwgMHg5MSwgMHg0OCwgMHhmMCwgMHhlNywgMHgwYSwgMHhiZCwKKysJMHhmOSwgMHgzZiwgMHhjZCwgMHhkOSwgMHhhMCwgMHgxZSwgMHg0MiwgMHg0YywKKysJMHhlNywgMHhkZSwgMHgyNSwgMHgzZCwgMHhhMywgMHhkNywgMHgwNSwgMHg4MCwKKysJMHg4ZCwgMHhmMiwgMHg4MiwgMHhhYywgMHg0NCwgMHgxNiwgMHg1MSwgMHgwMQorK307CisrCisrc3RhdGljIGNvbnN0IHU4IGVuY19pbnB1dDAwOFtdIF9faW5pdGNvbnN0ID0geworKwkweGMzLCAweDA5LCAweDk0LCAweDYyLCAweGU2LCAweDQ2LCAweDJlLCAweDEwLAorKwkweGJlLCAweDAwLCAweGU0LCAweGZjLCAweGYzLCAweDQwLCAweGEzLCAweGUyLAorKwkweDBmLCAweGMyLCAweDhiLCAweDI4LCAweGRjLCAweGJhLCAweGI0LCAweDNjLAorKwkweGU0LCAweDIxLCAweDU4LCAweDYxLCAweGNkLCAweDhiLCAweGNkLCAweGZiLAorKwkweGFjLCAweDk0LCAweGExLCAweDQ1LCAweGY1LCAweDFjLCAweGUxLCAweDEyLAorKwkweGUwLCAweDNiLCAweDY3LCAweDIxLCAweDU0LCAweDVlLCAweDhjLCAweGFhLAorKwkweGNmLCAweGRiLCAweGI0LCAweDUxLCAweGQ0LCAweDEzLCAweGRhLCAweGU2LAorKwkweDgzLCAweDg5LCAweGI2LCAweDkyLCAweGU5LCAweDIxLCAweDc2LCAweGE0LAorKwkweDkzLCAweDdkLCAweDBlLCAweGZkLCAweDk2LCAweDM2LCAweDAzLCAweDkxLAorKwkweDQzLCAweDVjLCAweDkyLCAweDQ5LCAweDYyLCAweDYxLCAweDdiLCAweGViLAorKwkweDQzLCAweDg5LCAweGI4LCAweDEyLCAweDIwLCAweDQzLCAweGQ0LCAweDQ3LAorKwkweDA2LCAweDg0LCAweGVlLCAweDQ3LCAweGU5LCAweDhhLCAweDczLCAweDE1LAorKwkweDBmLCAweDcyLCAweGNmLCAweGVkLCAweGNlLCAweDk2LCAweGIyLCAweDdmLAorKwkweDIxLCAweDQ1LCAweDc2LCAweGViLCAweDI2LCAweDI4LCAweDgzLCAweDZhLAorKwkweGFkLCAweGFhLCAweGE2LCAweDgxLCAweGQ4LCAweDU1LCAweGIxLCAweGEzLAorKwkweDg1LCAweGIzLCAweDBjLCAweGRmLCAweGYxLCAweDY5LCAweDJkLCAweDk3LAorKwkweDA1LCAweDJhLCAweGJjLCAweDdjLCAweDdiLCAweDI1LCAweGY4LCAweDgwLAorKwkweDlkLCAweDM5LCAweDI1LCAweGYzLCAweDYyLCAweGYwLCAweDY2LCAweDVlLAorKwkweGY0LCAweGEwLCAweGNmLCAweGQ4LCAweGZkLCAweDRmLCAweGIxLCAweDFmLAorKwkweDYwLCAweDNhLCAweDA4LCAweDQ3LCAweGFmLCAweGUxLCAweGY2LCAweDEwLAorKwkweDc3LCAweDA5LCAweGE3LCAweDI3LCAweDhmLCAweDlhLCAweDk3LCAweDVhLAorKwkweDI2LCAweGZhLCAweGZlLCAweDQxLCAweDMyLCAweDgzLCAweDEwLCAweGUwLAorKwkweDFkLCAweGJmLCAweDY0LCAweDBkLCAweGY0LCAweDFjLCAweDMyLCAweDM1LAorKwkweGU1LCAweDFiLCAweDM2LCAweGVmLCAweGQ0LCAweDRhLCAweDkzLCAweDRkLAorKwkweDAwLCAweDdjLCAweGVjLCAweDAyLCAweDA3LCAweDhiLCAweDVkLCAweDdkLAorKwkweDFiLCAweDBlLCAweGQxLCAweGE2LCAweGE1LCAweDVkLCAweDdkLCAweDU3LAorKwkweDg4LCAweGE4LCAweGNjLCAweDgxLCAweGI0LCAweDg2LCAweDRlLCAweGI0LAorKwkweDQwLCAweGU5LCAweDFkLCAweGMzLCAweGIxLCAweDI0LCAweDNlLCAweDdmLAorKwkweGNjLCAweDhhLCAweDI0LCAweDliLCAweGRmLCAweDZkLCAweGYwLCAweDM5LAorKwkweDY5LCAweDNlLCAweDRjLCAweGMwLCAweDk2LCAweGU0LCAweDEzLCAweGRhLAorKwkweDkwLCAweGRhLCAweGY0LCAweDk1LCAweDY2LCAweDhiLCAweDE3LCAweDE3LAorKwkweGZlLCAweDM5LCAweDQzLCAweDI1LCAweGFhLCAweGRhLCAweGEwLCAweDQzLAorKwkweDNjLCAweGIxLCAweDQxLCAweDAyLCAweGEzLCAweGYwLCAweGE3LCAweDE5LAorKwkweDU5LCAweGJjLCAweDFkLCAweDdkLCAweDZjLCAweDZkLCAweDkxLCAweDA5LAorKwkweDVjLCAweGI3LCAweDViLCAweDAxLCAweGQxLCAweDZmLCAweDE3LCAweDIxLAorKwkweDk3LCAweGJmLCAweDg5LCAweDcxLCAweGE1LCAweGIwLCAweDZlLCAweDA3LAorKwkweDQ1LCAweGZkLCAweDlkLCAweGVhLCAweDA3LCAweGY2LCAweDdhLCAweDlmLAorKwkweDEwLCAweDE4LCAweDIyLCAweDMwLCAweDczLCAweGFjLCAweGQ0LCAweDZiLAorKwkweDcyLCAweDQ0LCAweGVkLCAweGQ5LCAweDE5LCAweDliLCAweDJkLCAweDRhLAorKwkweDQxLCAweGRkLCAweGQxLCAweDg1LCAweDVlLCAweDM3LCAweDE5LCAweGVkLAorKwkweGQyLCAweDE1LCAweDhmLCAweDVlLCAweDkxLCAweGRiLCAweDMzLCAweGYyLAorKwkweGU0LCAweGRiLCAweGZmLCAweDk4LCAweGZiLCAweGEzLCAweGI1LCAweGNhLAorKwkweDIxLCAweDY5LCAweDA4LCAweGU3LCAweDhhLCAweGRmLCAweDkwLCAweGZmLAorKwkweDNlLCAweGU5LCAweDIwLCAweDg2LCAweDNjLCAweGU5LCAweGZjLCAweDBiLAorKwkweGZlLCAweDVjLCAweDYxLCAweGFhLCAweDEzLCAweDkyLCAweDdmLCAweDdiLAorKwkweGVjLCAweGUwLCAweDZkLCAweGE4LCAweDIzLCAweDIyLCAweGY2LCAweDZiLAorKwkweDc3LCAweGM0LCAweGZlLCAweDQwLCAweDA3LCAweDNiLCAweGI2LCAweGY2LAorKwkweDhlLCAweDVmLCAweGQ0LCAweGI5LCAweGI3LCAweDBmLCAweDIxLCAweDA0LAorKwkweGVmLCAweDgzLCAweDYzLCAweDkxLCAweDY5LCAweDQwLCAweGEzLCAweDQ4LAorKwkweDVjLCAweGQyLCAweDYwLCAweGY5LCAweDRmLCAweDZjLCAweDQ3LCAweDhiLAorKwkweDNiLCAweGIxLCAweDlmLCAweDhlLCAweGVlLCAweDE2LCAweDhhLCAweDEzLAorKwkweGZjLCAweDQ2LCAweDE3LCAweGMzLCAweGMzLCAweDMyLCAweDU2LCAweGY4LAorKwkweDNjLCAweDg1LCAweDNhLCAweGI2LCAweDNlLCAweGFhLCAweDg5LCAweDRmLAorKwkweGIzLCAweGRmLCAweDM4LCAweGZkLCAweGYxLCAweGU0LCAweDNhLCAweGMwLAorKwkweGU2LCAweDU4LCAweGI1LCAweDhmLCAweGM1LCAweDI5LCAweGEyLCAweDkyLAorKwkweDRhLCAweGI2LCAweGEwLCAweDM0LCAweDdmLCAweGFiLCAweGI1LCAweDhhLAorKwkweDkwLCAweGExLCAweGRiLCAweDRkLCAweGNhLCAweGI2LCAweDJjLCAweDQxLAorKwkweDNjLCAweGY3LCAweDJiLCAweDIxLCAweGMzLCAweGZkLCAweGY0LCAweDE3LAorKwkweDVjLCAweGI1LCAweDMzLCAweDE3LCAweDY4LCAweDJiLCAweDA4LCAweDMwLAorKwkweGYzLCAweGY3LCAweDMwLCAweDNjLCAweDk2LCAweGU2LCAweDZhLCAweDIwLAorKwkweDk3LCAweGU3LCAweDRkLCAweDEwLCAweDVmLCAweDQ3LCAweDVmLCAweDQ5LAorKwkweDk2LCAweDA5LCAweGYwLCAweDI3LCAweDkxLCAweGM4LCAweGY4LCAweDVhLAorKwkweDJlLCAweDc5LCAweGI1LCAweGUyLCAweGI4LCAweGU4LCAweGI5LCAweDdiLAorKwkweGQ1LCAweDEwLCAweGNiLCAweGZmLCAweDVkLCAweDE0LCAweDczLCAweGYzCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX291dHB1dDAwOFtdIF9faW5pdGNvbnN0ID0geworKwkweDE0LCAweGY2LCAweDQxLCAweDM3LCAweGE2LCAweGQ0LCAweDI3LCAweGNkLAorKwkweGRiLCAweDA2LCAweDNlLCAweDlhLCAweDRlLCAweGFiLCAweGQ1LCAweGIxLAorKwkweDFlLCAweDZiLCAweGQyLCAweGJjLCAweDExLCAweGY0LCAweDI4LCAweDkzLAorKwkweDYzLCAweDU0LCAweGVmLCAweGJiLCAweDVlLCAweDFkLCAweDNhLCAweDFkLAorKwkweDM3LCAweDNjLCAweDBhLCAweDZjLCAweDFlLCAweGMyLCAweGQxLCAweDJjLAorKwkweGI1LCAweGEzLCAweGI1LCAweDdiLCAweGI4LCAweDhmLCAweDI1LCAweGE2LAorKwkweDFiLCAweDYxLCAweDFjLCAweGVjLCAweDI4LCAweDU4LCAweDI2LCAweGE0LAorKwkweGE4LCAweDMzLCAweDI4LCAweDI1LCAweDVjLCAweDQ1LCAweDA1LCAweGU1LAorKwkweDZjLCAweDk5LCAweGU1LCAweDQ1LCAweGM0LCAweGEyLCAweDAzLCAweDg0LAorKwkweDAzLCAweDczLCAweDFlLCAweDhjLCAweDQ5LCAweGFjLCAweDIwLCAweGRkLAorKwkweDhkLCAweGIzLCAweGM0LCAweGY1LCAweGU3LCAweDRmLCAweGYxLCAweGVkLAorKwkweGExLCAweDk4LCAweGRlLCAweGE0LCAweDk2LCAweGRkLCAweDJmLCAweGFiLAorKwkweGFiLCAweDk3LCAweGNmLCAweDNlLCAweGQyLCAweDllLCAweGI4LCAweDEzLAorKwkweDA3LCAweDI4LCAweDI5LCAweDE5LCAweGFmLCAweGZkLCAweGYyLCAweDQ5LAorKwkweDQzLCAweGVhLCAweDQ5LCAweDI2LCAweDkxLCAweGMxLCAweDA3LCAweGQ2LAorKwkweGJiLCAweDgxLCAweDc1LCAweDM1LCAweDBkLCAweDI0LCAweDdmLCAweGM4LAorKwkweGRhLCAweGQ0LCAweGI3LCAweGViLCAweGU4LCAweDVjLCAweDA5LCAweGEyLAorKwkweDJmLCAweGRjLCAweDI4LCAweDdkLCAweDNhLCAweDAzLCAweGZhLCAweDk0LAorKwkweGI1LCAweDFkLCAweDE3LCAweDk5LCAweDM2LCAweGMzLCAweDFjLCAweDE4LAorKwkweDM0LCAweGUzLCAweDlmLCAweGY1LCAweDU1LCAweDdjLCAweGIwLCAweDYwLAorKwkweDlkLCAweGZmLCAweGFjLCAweGQ0LCAweDYxLCAweGYyLCAweGFkLCAweGY4LAorKwkweGNlLCAweGM3LCAweGJlLCAweDVjLCAweGQyLCAweDk1LCAweGE4LCAweDRiLAorKwkweDc3LCAweDEzLCAweDE5LCAweDU5LCAweDI2LCAweGM5LCAweGI3LCAweDhmLAorKwkweDZhLCAweGNiLCAweDJkLCAweDM3LCAweDkxLCAweGVhLCAweDkyLCAweDljLAorKwkweDk0LCAweDViLCAweGRhLCAweDBiLCAweGNlLCAweGZlLCAweDMwLCAweDIwLAorKwkweGY4LCAweDUxLCAweGFkLCAweGYyLCAweGJlLCAweGU3LCAweGM3LCAweGZmLAorKwkweGIzLCAweDMzLCAweDkxLCAweDZhLCAweGM5LCAweDFhLCAweDQxLCAweGM5LAorKwkweDBmLCAweGYzLCAweDEwLCAweDBlLCAweGZkLCAweDUzLCAweGZmLCAweDZjLAorKwkweDE2LCAweDUyLCAweGQ5LCAweGYzLCAweGY3LCAweDk4LCAweDJlLCAweGM5LAorKwkweDA3LCAweDMxLCAweDJjLCAweDBjLCAweDcyLCAweGQ3LCAweGM1LCAweGM2LAorKwkweDA4LCAweDJhLCAweDdiLCAweGRhLCAweGJkLCAweDdlLCAweDAyLCAweGVhLAorKwkweDFhLCAweGJiLCAweGYyLCAweDA0LCAweDI3LCAweDYxLCAweDI4LCAweDhlLAorKwkweGY1LCAweDA0LCAweDAzLCAweDFmLCAweDRjLCAweDA3LCAweDU1LCAweDgyLAorKwkweGVjLCAweDFlLCAweGQ3LCAweDhiLCAweDJmLCAweDY1LCAweDU2LCAweGQxLAorKwkweGQ5LCAweDFlLCAweDNjLCAweGU5LCAweDFmLCAweDVlLCAweDk4LCAweDcwLAorKwkweDM4LCAweDRhLCAweDhjLCAweDQ5LCAweGM1LCAweDQzLCAweGEwLCAweGExLAorKwkweDhiLCAweDc0LCAweDlkLCAweDRjLCAweDYyLCAweDBkLCAweDEwLCAweDBjLAorKwkweGY0LCAweDZjLCAweDhmLCAweGUwLCAweGFhLCAweDlhLCAweDhkLCAweGI3LAorKwkweGUwLCAweGJlLCAweDRjLCAweDg3LCAweGYxLCAweDk4LCAweDJmLCAweGNjLAorKwkweGVkLCAweGMwLCAweDUyLCAweDI5LCAweGRjLCAweDgzLCAweGY4LCAweGZjLAorKwkweDJjLCAweDBlLCAweGE4LCAweDUxLCAweDRkLCAweDgwLCAweDBkLCAweGEzLAorKwkweGZlLCAweGQ4LCAweDM3LCAweGU3LCAweDQxLCAweDI0LCAweGZjLCAweGZiLAorKwkweDc1LCAweGUzLCAweDcxLCAweDdiLCAweDU3LCAweDQ1LCAweGY1LCAweDk3LAorKwkweDczLCAweDY1LCAweDYzLCAweDE0LCAweDc0LCAweGI4LCAweDgyLCAweDlmLAorKwkweGY4LCAweDYwLCAweDJmLCAweDhhLCAweGYyLCAweDRlLCAweGYxLCAweDM5LAorKwkweGRhLCAweDMzLCAweDkxLCAweGY4LCAweDM2LCAweGUwLCAweDhkLCAweDNmLAorKwkweDFmLCAweDNiLCAweDU2LCAweGRjLCAweGEwLCAweDhmLCAweDNjLCAweDlkLAorKwkweDcxLCAweDUyLCAweGE3LCAweGI4LCAweGMwLCAweGE1LCAweGM2LCAweGEyLAorKwkweDczLCAweGRhLCAweGY0LCAweDRiLCAweDc0LCAweDViLCAweDAwLCAweDNkLAorKwkweDk5LCAweGQ3LCAweDk2LCAweGJhLCAweGU2LCAweGUxLCAweGE2LCAweDk2LAorKwkweDM4LCAweGFkLCAweGIzLCAweGMwLCAweGQyLCAweGJhLCAweDkxLCAweDZiLAorKwkweGY5LCAweDE5LCAweGRkLCAweDNiLCAweGJlLCAweGJlLCAweDljLCAweDIwLAorKwkweDUwLCAweGJhLCAweGExLCAweGQwLCAweGNlLCAweDExLCAweGJkLCAweDk1LAorKwkweGQ4LCAweGQxLCAweGRkLCAweDMzLCAweDg1LCAweDc0LCAweGRjLCAweGRiLAorKwkweDY2LCAweDc2LCAweDQ0LCAweGRjLCAweDAzLCAweDc0LCAweDQ4LCAweDM1LAorKwkweDk4LCAweGIxLCAweDE4LCAweDQ3LCAweDk0LCAweDdkLCAweGZmLCAweDYyLAorKwkweGU0LCAweDU4LCAweDc4LCAweGFiLCAweGVkLCAweDk1LCAweDM2LCAweGQ5LAorKwkweDg0LCAweDkxLCAweDgyLCAweDY0LCAweDQxLCAweGJiLCAweDU4LCAweGU2LAorKwkweDFjLCAweDIwLCAweDZkLCAweDE1LCAweDZiLCAweDEzLCAweDk2LCAweGU4LAorKwkweDM1LCAweDdmLCAweGRjLCAweDQwLCAweDJjLCAweGU5LCAweGJjLCAweDhhLAorKwkweDRmLCAweDkyLCAweGVjLCAweDA2LCAweDJkLCAweDUwLCAweGRmLCAweDkzLAorKwkweDVkLCAweDY1LCAweDVhLCAweGE4LCAweGZjLCAweDIwLCAweDUwLCAweDE0LAorKwkweGE5LCAweDhhLCAweDdlLCAweDFkLCAweDA4LCAweDFmLCAweGUyLCAweDk5LAorKwkweGQwLCAweGJlLCAweGZiLCAweDNhLCAweDIxLCAweDlkLCAweGFkLCAweDg2LAorKwkweDU0LCAweGZkLCAweDBkLCAweDk4LCAweDFjLCAweDVhLCAweDZmLCAweDFmLAorKwkweDlhLCAweDQwLCAweGNkLCAweGEyLCAweGZmLCAweDZhLCAweGYxLCAweDU0CisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2Fzc29jMDA4W10gX19pbml0Y29uc3QgPSB7IH07Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTAwOFtdIF9faW5pdGNvbnN0ID0geworKwkweDBlLCAweDBkLCAweDU3LCAweGJiLCAweDdiLCAweDQwLCAweDU0LCAweDAyCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTAwOFtdIF9faW5pdGNvbnN0ID0geworKwkweGYyLCAweGFhLCAweDRmLCAweDk5LCAweGZkLCAweDNlLCAweGE4LCAweDUzLAorKwkweGMxLCAweDQ0LCAweGU5LCAweDgxLCAweDE4LCAweGRjLCAweGY1LCAweGYwLAorKwkweDNlLCAweDQ0LCAweDE1LCAweDU5LCAweGUwLCAweGM1LCAweDQ0LCAweDg2LAorKwkweGMzLCAweDkxLCAweGE4LCAweDc1LCAweGMwLCAweDEyLCAweDQ2LCAweGJhCisrfTsKKysKKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDA5W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZTYsIDB4YzMsIDB4ZGIsIDB4NjMsIDB4NTUsIDB4MTUsIDB4ZTMsIDB4NWIsCisrCTB4YjcsIDB4NGIsIDB4MjcsIDB4OGIsIDB4NWEsIDB4ZGQsIDB4YzIsIDB4ZTgsCisrCTB4M2EsIDB4NmIsIDB4ZDcsIDB4ODEsIDB4OTYsIDB4MzUsIDB4OTcsIDB4Y2EsCisrCTB4ZDcsIDB4NjgsIDB4ZTgsIDB4ZWYsIDB4Y2UsIDB4YWIsIDB4ZGEsIDB4MDksCisrCTB4NmUsIDB4ZDYsIDB4OGUsIDB4Y2IsIDB4NTUsIDB4YjUsIDB4ZTEsIDB4ZTUsCisrCTB4NTcsIDB4ZmQsIDB4YzQsIDB4ZTMsIDB4ZTAsIDB4MTgsIDB4NGYsIDB4ODUsCisrCTB4ZjUsIDB4M2YsIDB4N2UsIDB4NGIsIDB4ODgsIDB4YzksIDB4NTIsIDB4NDQsCisrCTB4MGYsIDB4ZWEsIDB4YWYsIDB4MWYsIDB4NzEsIDB4NDgsIDB4OWYsIDB4OTcsCisrCTB4NmQsIDB4YjksIDB4NmYsIDB4MDAsIDB4YTYsIDB4ZGUsIDB4MmIsIDB4NzcsCisrCTB4OGIsIDB4MTUsIDB4YWQsIDB4MTAsIDB4YTAsIDB4MmIsIDB4N2IsIDB4NDEsCisrCTB4OTAsIDB4MDMsIDB4MmQsIDB4NjksIDB4YWUsIDB4Y2MsIDB4NzcsIDB4N2MsCisrCTB4YTUsIDB4OWQsIDB4MjksIDB4MjIsIDB4YzIsIDB4ZWEsIDB4YjQsIDB4MDAsCisrCTB4MWEsIDB4ZDIsIDB4N2EsIDB4OTgsIDB4OGEsIDB4ZjksIDB4ZjcsIDB4ODIsCisrCTB4YjAsIDB4YWIsIDB4ZDgsIDB4YTYsIDB4OTQsIDB4OGQsIDB4NTgsIDB4MmYsCisrCTB4MDEsIDB4OWUsIDB4MDAsIDB4MjAsIDB4ZmMsIDB4NDksIDB4ZGMsIDB4MGUsCisrCTB4MDMsIDB4ZTgsIDB4NDUsIDB4MTAsIDB4ZDYsIDB4YTgsIDB4ZGEsIDB4NTUsCisrCTB4MTAsIDB4OWEsIDB4ZGYsIDB4NjcsIDB4MjIsIDB4OGIsIDB4NDMsIDB4YWIsCisrCTB4MDAsIDB4YmIsIDB4MDIsIDB4YzgsIDB4ZGQsIDB4N2IsIDB4OTcsIDB4MTcsCisrCTB4ZDcsIDB4MWQsIDB4OWUsIDB4MDIsIDB4NWUsIDB4NDgsIDB4ZGUsIDB4OGUsCisrCTB4Y2YsIDB4OTksIDB4MDcsIDB4OTUsIDB4OTIsIDB4M2MsIDB4NWYsIDB4OWYsCisrCTB4YzUsIDB4OGEsIDB4YzAsIDB4MjMsIDB4YWEsIDB4ZDUsIDB4OGMsIDB4ODIsCisrCTB4NmUsIDB4MTYsIDB4OTIsIDB4YjEsIDB4MTIsIDB4MTcsIDB4MDcsIDB4YzMsCisrCTB4ZmIsIDB4MzYsIDB4ZjUsIDB4NmMsIDB4MzUsIDB4ZDYsIDB4MDYsIDB4MWYsCisrCTB4OWYsIDB4YTcsIDB4OTQsIDB4YTIsIDB4MzgsIDB4NjMsIDB4OWMsIDB4YjAsCisrCTB4NzEsIDB4YjMsIDB4YTUsIDB4ZDIsIDB4ZDgsIDB4YmEsIDB4OWYsIDB4MDgsCisrCTB4MDEsIDB4YjMsIDB4ZmYsIDB4MDQsIDB4OTcsIDB4NzMsIDB4NDUsIDB4MWIsCisrCTB4ZDUsIDB4YTksIDB4OWMsIDB4ODAsIDB4YWYsIDB4MDQsIDB4OWEsIDB4ODUsCisrCTB4ZGIsIDB4MzIsIDB4NWIsIDB4NWQsIDB4MWEsIDB4YzEsIDB4MzYsIDB4MjgsCisrCTB4MTAsIDB4NzksIDB4ZjEsIDB4M2MsIDB4YmYsIDB4MWEsIDB4NDEsIDB4NWMsCisrCTB4NGUsIDB4ZGYsIDB4YjIsIDB4N2MsIDB4NzksIDB4M2IsIDB4N2EsIDB4NjIsCisrCTB4M2QsIDB4NGIsIDB4YzksIDB4OWIsIDB4MmEsIDB4MmUsIDB4N2MsIDB4YTIsCisrCTB4YjEsIDB4MTEsIDB4OTgsIDB4YTcsIDB4MzQsIDB4MWEsIDB4MDAsIDB4ZjMsCisrCTB4ZDEsIDB4YmMsIDB4MTgsIDB4MjIsIDB4YmEsIDB4MDIsIDB4NTYsIDB4NjIsCisrCTB4MzEsIDB4MTAsIDB4MTEsIDB4NmQsIDB4ZTAsIDB4NTQsIDB4OWQsIDB4NDAsCisrCTB4MWYsIDB4MjYsIDB4ODAsIDB4NDEsIDB4Y2EsIDB4M2YsIDB4NjgsIDB4MGYsCisrCTB4MzIsIDB4MWQsIDB4MGEsIDB4OGUsIDB4NzksIDB4ZDgsIDB4YTQsIDB4MWIsCisrCTB4MjksIDB4MWMsIDB4OTAsIDB4OGUsIDB4YzUsIDB4ZTMsIDB4YjQsIDB4OTEsCisrCTB4MzcsIDB4OWEsIDB4OTcsIDB4ODYsIDB4OTksIDB4ZDUsIDB4MDksIDB4YzUsCisrCTB4YmIsIDB4YTMsIDB4M2YsIDB4MjEsIDB4MjksIDB4ODIsIDB4MTQsIDB4NWMsCisrCTB4YWIsIDB4MjUsIDB4ZmIsIDB4ZjIsIDB4NGYsIDB4NTgsIDB4MjYsIDB4ZDQsCisrCTB4ODMsIDB4YWEsIDB4NjYsIDB4ODksIDB4NjcsIDB4N2UsIDB4YzAsIDB4NDksCisrCTB4ZTEsIDB4MTEsIDB4MTAsIDB4N2YsIDB4N2EsIDB4ZGEsIDB4MjksIDB4MDQsCisrCTB4ZmYsIDB4ZjAsIDB4Y2IsIDB4MDksIDB4N2MsIDB4OWQsIDB4ZmEsIDB4MDMsCisrCTB4NmYsIDB4ODEsIDB4MDksIDB4MzEsIDB4NjAsIDB4ZmIsIDB4MDgsIDB4ZmEsCisrCTB4NzQsIDB4ZDMsIDB4NjQsIDB4NDQsIDB4N2MsIDB4NTUsIDB4ODUsIDB4ZWMsCisrCTB4OWMsIDB4NmUsIDB4MjUsIDB4YjcsIDB4NmMsIDB4YzUsIDB4MzcsIDB4YjYsCisrCTB4ODMsIDB4ODcsIDB4NzIsIDB4OTUsIDB4OGIsIDB4OWQsIDB4ZTEsIDB4NjksCisrCTB4NWMsIDB4MzEsIDB4OTUsIDB4NDIsIDB4YTYsIDB4MmMsIDB4ZDEsIDB4MzYsCisrCTB4NDcsIDB4MWYsIDB4ZWMsIDB4NTQsIDB4YWIsIDB4YTIsIDB4MWMsIDB4ZDgsCisrCTB4MDAsIDB4Y2MsIDB4YmMsIDB4MGQsIDB4NjUsIDB4ZTIsIDB4NjcsIDB4YmYsCisrCTB4YmMsIDB4ZWEsIDB4ZWUsIDB4OWUsIDB4ZTQsIDB4MzYsIDB4OTUsIDB4YmUsCisrCTB4NzMsIDB4ZDksIDB4YTYsIDB4ZDksIDB4MGYsIDB4YTAsIDB4Y2MsIDB4ODIsCisrCTB4NzYsIDB4MjYsIDB4YWQsIDB4NWIsIDB4NTgsIDB4NmMsIDB4NGUsIDB4YWIsCisrCTB4MjksIDB4NjQsIDB4ZDMsIDB4ZDksIDB4YTksIDB4MDgsIDB4OGMsIDB4MWQsCisrCTB4YTEsIDB4NGYsIDB4ODAsIDB4ZDgsIDB4M2YsIDB4OTQsIDB4ZmIsIDB4ZDMsCisrCTB4N2IsIDB4ZmMsIDB4ZDEsIDB4MmIsIDB4YzMsIDB4MjEsIDB4ZWIsIDB4ZTUsCisrCTB4MWMsIDB4ODQsIDB4MjMsIDB4N2YsIDB4NGIsIDB4ZmEsIDB4ZGIsIDB4MzQsCisrCTB4MTgsIDB4YTIsIDB4YzIsIDB4ZTUsIDB4MTMsIDB4ZmUsIDB4NmMsIDB4NDksCisrCTB4ODEsIDB4ZDIsIDB4NzMsIDB4ZTcsIDB4ZTIsIDB4ZDcsIDB4ZTQsIDB4NGYsCisrCTB4NGIsIDB4MDgsIDB4NmUsIDB4YjEsIDB4MTIsIDB4MjIsIDB4MTAsIDB4OWQsCisrCTB4YWMsIDB4NTEsIDB4MWUsIDB4MTcsIDB4ZDksIDB4OGEsIDB4MGIsIDB4NDIsCisrCTB4ODgsIDB4MTYsIDB4ODEsIDB4MzcsIDB4N2MsIDB4NmEsIDB4ZjcsIDB4ZWYsCisrCTB4MmQsIDB4ZTMsIDB4ZDksIDB4ZjgsIDB4NWYsIDB4ZTAsIDB4NTMsIDB4MjcsCisrCTB4NzQsIDB4YjksIDB4ZTIsIDB4ZDYsIDB4MWMsIDB4ODAsIDB4MmMsIDB4NTIsCisrCTB4NjUKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDA5W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmQsIDB4ODEsIDB4OGQsIDB4ZDAsIDB4M2QsIDB4YjQsIDB4ZDUsIDB4ZGYsCisrCTB4ZDMsIDB4NDIsIDB4NDcsIDB4NWEsIDB4NmQsIDB4MTksIDB4MjcsIDB4NjYsCisrCTB4NGIsIDB4MmUsIDB4MGMsIDB4MjcsIDB4OWMsIDB4OTYsIDB4NGMsIDB4NzIsCisrCTB4MDIsIDB4YTMsIDB4NjUsIDB4YzMsIDB4YjMsIDB4NmYsIDB4MmUsIDB4YmQsCisrCTB4NjMsIDB4OGEsIDB4NGEsIDB4NWQsIDB4MjksIDB4YTIsIDB4ZDAsIDB4MjgsCisrCTB4NDgsIDB4YzUsIDB4M2QsIDB4OTgsIDB4YTMsIDB4YmMsIDB4ZTAsIDB4YmUsCisrCTB4M2IsIDB4M2YsIDB4ZTYsIDB4OGEsIDB4YTQsIDB4N2YsIDB4NTMsIDB4MDYsCisrCTB4ZmEsIDB4N2YsIDB4MjcsIDB4NzYsIDB4NzIsIDB4MzEsIDB4YTEsIDB4ZjUsCisrCTB4ZDYsIDB4MGMsIDB4NTIsIDB4NDcsIDB4YmEsIDB4Y2QsIDB4NGYsIDB4ZDcsCisrCTB4ZWIsIDB4MDUsIDB4NDgsIDB4MGQsIDB4N2MsIDB4MzUsIDB4NGEsIDB4MDksCisrCTB4YzksIDB4NzYsIDB4NzEsIDB4MDIsIDB4YTMsIDB4ZmIsIDB4YjcsIDB4MWEsCisrCTB4NjUsIDB4YjcsIDB4ZWQsIDB4OTgsIDB4YzYsIDB4MzAsIDB4OGEsIDB4MDAsCisrCTB4YWUsIDB4YTEsIDB4MzEsIDB4ZTUsIDB4YjUsIDB4OWUsIDB4NmQsIDB4NjIsCisrCTB4ZGEsIDB4ZGEsIDB4MDcsIDB4MGYsIDB4MzgsIDB4MzgsIDB4ZDMsIDB4Y2IsCisrCTB4YzEsIDB4YjAsIDB4YWQsIDB4ZWMsIDB4NzIsIDB4ZWMsIDB4YjEsIDB4YTIsCisrCTB4N2IsIDB4NTksIDB4ZjMsIDB4M2QsIDB4MmIsIDB4ZWYsIDB4Y2QsIDB4MjgsCisrCTB4NWIsIDB4ODMsIDB4Y2MsIDB4MTgsIDB4OTEsIDB4ODgsIDB4YjAsIDB4MmUsCisrCTB4ZjksIDB4MjksIDB4MzEsIDB4MTgsIDB4ZjksIDB4NGUsIDB4ZTksIDB4MGEsCisrCTB4OTEsIDB4OTIsIDB4OWYsIDB4YWUsIDB4MmQsIDB4YWQsIDB4ZjQsIDB4ZTYsCisrCTB4MWEsIDB4ZTIsIDB4YTQsIDB4ZWUsIDB4NDcsIDB4MTUsIDB4YmYsIDB4ODMsCisrCTB4NmUsIDB4ZDcsIDB4NzIsIDB4MTIsIDB4M2IsIDB4MmQsIDB4MjQsIDB4ZTksCisrCTB4YjIsIDB4NTUsIDB4Y2IsIDB4M2MsIDB4MTAsIDB4ZjAsIDB4MjQsIDB4OGEsCisrCTB4NGEsIDB4MDIsIDB4ZWEsIDB4OTAsIDB4MjUsIDB4ZjAsIDB4YjQsIDB4NzksCisrCTB4M2EsIDB4ZWYsIDB4NmUsIDB4ZjUsIDB4NTIsIDB4ZGYsIDB4YjAsIDB4MGEsCisrCTB4Y2QsIDB4MjQsIDB4MWMsIDB4ZDMsIDB4MmUsIDB4MjIsIDB4NzQsIDB4ZWEsCisrCTB4MjEsIDB4NmYsIDB4ZTksIDB4YmQsIDB4YzgsIDB4M2UsIDB4MzYsIDB4NWIsCisrCTB4MTksIDB4ZjEsIDB4Y2EsIDB4OTksIDB4MGEsIDB4YjQsIDB4YTcsIDB4NTIsCisrCTB4MWEsIDB4NGUsIDB4ZjIsIDB4YWQsIDB4OGQsIDB4NTYsIDB4ODUsIDB4YmIsCisrCTB4NjQsIDB4ODksIDB4YmEsIDB4MjYsIDB4ZjksIDB4YzcsIDB4ZTEsIDB4ODksCisrCTB4MTksIDB4MjIsIDB4NzcsIDB4YzMsIDB4YTgsIDB4ZmMsIDB4ZmYsIDB4YWQsCisrCTB4ZmUsIDB4YjksIDB4NDgsIDB4YWUsIDB4MTIsIDB4MzAsIDB4OWYsIDB4MTksCisrCTB4ZmIsIDB4MWIsIDB4ZWYsIDB4MTQsIDB4ODcsIDB4OGEsIDB4NzgsIDB4NzEsCisrCTB4ZjMsIDB4ZjQsIDB4YjcsIDB4MDAsIDB4OWMsIDB4MWQsIDB4YjUsIDB4M2QsCisrCTB4NDksIDB4MDAsIDB4MGMsIDB4MDYsIDB4ZDQsIDB4NTAsIDB4ZjksIDB4NTQsCisrCTB4NDUsIDB4YjIsIDB4NWIsIDB4NDMsIDB4ZGIsIDB4NmQsIDB4Y2YsIDB4MWEsCisrCTB4ZTksIDB4N2EsIDB4N2EsIDB4Y2YsIDB4ZmMsIDB4OGEsIDB4NGUsIDB4NGQsCisrCTB4MGIsIDB4MDcsIDB4NjMsIDB4MjgsIDB4ZDgsIDB4ZTcsIDB4MDgsIDB4OTUsCisrCTB4ZGYsIDB4YTYsIDB4NzIsIDB4OTMsIDB4MmUsIDB4YmIsIDB4YTAsIDB4NDIsCisrCTB4ODksIDB4MTYsIDB4ZjEsIDB4ZDksIDB4MGMsIDB4ZjksIDB4YTEsIDB4MTYsCisrCTB4ZmQsIDB4ZDksIDB4MDMsIDB4YjQsIDB4M2IsIDB4OGEsIDB4ZjUsIDB4ZjYsCisrCTB4ZTcsIDB4NmIsIDB4MmUsIDB4OGUsIDB4NGMsIDB4M2QsIDB4ZTIsIDB4YWYsCisrCTB4MDgsIDB4NDUsIDB4MDMsIDB4ZmYsIDB4MDksIDB4YjYsIDB4ZWIsIDB4MmQsCisrCTB4YzYsIDB4MWIsIDB4ODgsIDB4OTQsIDB4YWMsIDB4M2UsIDB4ZjEsIDB4OWYsCisrCTB4MGUsIDB4MGUsIDB4MmIsIDB4ZDUsIDB4MDAsIDB4NGQsIDB4M2YsIDB4M2IsCisrCTB4NTMsIDB4YWUsIDB4YWYsIDB4MWMsIDB4MzMsIDB4NWYsIDB4NTUsIDB4NmUsCisrCTB4OGQsIDB4YWYsIDB4MDUsIDB4N2EsIDB4MTAsIDB4MzQsIDB4YzksIDB4ZjQsCisrCTB4NjYsIDB4Y2IsIDB4NjIsIDB4MTIsIDB4YTYsIDB4ZWUsIDB4ZTgsIDB4MWMsCisrCTB4NWQsIDB4MTIsIDB4ODYsIDB4ZGIsIDB4NmYsIDB4MWMsIDB4MzMsIDB4YzQsCisrCTB4MWMsIDB4ZGEsIDB4ODIsIDB4MmQsIDB4M2IsIDB4NTksIDB4ZmUsIDB4YjEsCisrCTB4YTQsIDB4NTksIDB4NDEsIDB4ODYsIDB4ZDAsIDB4ZWYsIDB4YWUsIDB4ZmIsCisrCTB4ZGEsIDB4NmQsIDB4MTEsIDB4YjgsIDB4Y2EsIDB4ZTksIDB4NmUsIDB4ZmYsCisrCTB4ZjcsIDB4YTksIDB4ZDksIDB4NzAsIDB4MzAsIDB4ZmMsIDB4NTMsIDB4ZTIsCisrCTB4ZDcsIDB4YTIsIDB4NGUsIDB4YzcsIDB4OTEsIDB4ZDksIDB4MDcsIDB4MDYsCisrCTB4YWEsIDB4ZGQsIDB4YjAsIDB4NTksIDB4MjgsIDB4MWQsIDB4MDAsIDB4NjYsCisrCTB4YzUsIDB4NTQsIDB4YzIsIDB4ZmMsIDB4MDYsIDB4ZGEsIDB4MDUsIDB4OTAsCisrCTB4NTIsIDB4MWQsIDB4MzcsIDB4NjYsIDB4ZWUsIDB4ZjAsIDB4YjIsIDB4NTUsCisrCTB4OGEsIDB4NWQsIDB4ZDIsIDB4MzgsIDB4ODYsIDB4OTQsIDB4OWIsIDB4ZmMsCisrCTB4MTAsIDB4NGMsIDB4YTEsIDB4YjksIDB4NjQsIDB4M2UsIDB4NDQsIDB4YjgsCisrCTB4NWYsIDB4YjAsIDB4MGMsIDB4ZWMsIDB4ZTAsIDB4YzksIDB4ZTUsIDB4NjIsCisrCTB4NzUsIDB4M2YsIDB4MDksIDB4ZDUsIDB4ZjUsIDB4ZDksIDB4MjYsIDB4YmEsCisrCTB4OWUsIDB4ZDIsIDB4ZjQsIDB4YjksIDB4NDgsIDB4MGEsIDB4YmMsIDB4YTIsCisrCTB4ZDYsIDB4N2MsIDB4MzYsIDB4MTEsIDB4N2QsIDB4MjYsIDB4ODEsIDB4ODksCisrCTB4Y2YsIDB4YTQsIDB4YWQsIDB4NzMsIDB4MGUsIDB4ZWUsIDB4Y2MsIDB4MDYsCisrCTB4YTksIDB4ZGIsIDB4YjEsIDB4ZmQsIDB4ZmIsIDB4MDksIDB4N2YsIDB4OTAsCisrCTB4NDIsIDB4MzcsIDB4MmYsIDB4ZTEsIDB4OWMsIDB4MGYsIDB4NmYsIDB4Y2YsCisrCTB4NDMsIDB4YjUsIDB4ZDksIDB4OTAsIDB4ZTEsIDB4ODUsIDB4ZjUsIDB4YTgsCisrCTB4YWUKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwMDlbXSBfX2luaXRjb25zdCA9IHsKKysJMHg1YSwgMHgyNywgMHhmZiwgMHhlYiwgMHhkZiwgMHg4NCwgMHhiMiwgMHg5ZSwKKysJMHhlZgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTAwOVtdIF9faW5pdGNvbnN0ID0geworKwkweGVmLCAweDJkLCAweDYzLCAweGVlLCAweDZiLCAweDgwLCAweDhiLCAweDc4CisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTAwOVtdIF9faW5pdGNvbnN0ID0geworKwkweGVhLCAweGJjLCAweDU2LCAweDk5LCAweGUzLCAweDUwLCAweGZmLCAweGM1LAorKwkweGNjLCAweDFhLCAweGQ3LCAweGMxLCAweDU3LCAweDcyLCAweGVhLCAweDg2LAorKwkweDViLCAweDg5LCAweDg4LCAweDYxLCAweDNkLCAweDJmLCAweDliLCAweGIyLAorKwkweGU3LCAweDljLCAweGVjLCAweDc0LCAweDZlLCAweDNlLCAweGY0LCAweDNiCisrfTsKKysKKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDEwW10gX19pbml0Y29uc3QgPSB7CisrCTB4NDIsIDB4OTMsIDB4ZTQsIDB4ZWIsIDB4OTcsIDB4YjAsIDB4NTcsIDB4YmYsCisrCTB4MWEsIDB4OGIsIDB4MWYsIDB4ZTQsIDB4NWYsIDB4MzYsIDB4MjAsIDB4M2MsCisrCTB4ZWYsIDB4MGEsIDB4YTksIDB4NDgsIDB4NWYsIDB4NWYsIDB4MzcsIDB4MjIsCisrCTB4M2EsIDB4ZGUsIDB4ZTMsIDB4YWUsIDB4YmUsIDB4YWQsIDB4MDcsIDB4Y2MsCisrCTB4YjEsIDB4ZjYsIDB4ZjUsIDB4ZjksIDB4NTYsIDB4ZGQsIDB4ZTcsIDB4MTYsCisrCTB4MWUsIDB4N2YsIDB4ZGYsIDB4N2EsIDB4OWUsIDB4NzUsIDB4YjcsIDB4YzcsCisrCTB4YmUsIDB4YmUsIDB4OGEsIDB4MzYsIDB4MDQsIDB4YzAsIDB4MTAsIDB4ZjQsCisrCTB4OTUsIDB4MjAsIDB4MDMsIDB4ZWMsIDB4ZGMsIDB4MDUsIDB4YTEsIDB4N2QsCisrCTB4YzQsIDB4YTksIDB4MmMsIDB4ODIsIDB4ZDAsIDB4YmMsIDB4OGIsIDB4YzUsCisrCTB4YzcsIDB4NDUsIDB4NTAsIDB4ZjYsIDB4YTIsIDB4MWEsIDB4YjUsIDB4NDYsCisrCTB4M2IsIDB4NzMsIDB4MDIsIDB4YTYsIDB4ODMsIDB4NGIsIDB4NzMsIDB4ODIsCisrCTB4NTgsIDB4NWUsIDB4M2IsIDB4NjUsIDB4MmYsIDB4MGUsIDB4ZmQsIDB4MmIsCisrCTB4NTksIDB4MTYsIDB4Y2UsIDB4YTEsIDB4NjAsIDB4OWMsIDB4ZTgsIDB4M2EsCisrCTB4OTksIDB4ZWQsIDB4OGQsIDB4NWEsIDB4Y2YsIDB4ZjYsIDB4ODMsIDB4YWYsCisrCTB4YmEsIDB4ZDcsIDB4NzMsIDB4NzMsIDB4NDAsIDB4OTcsIDB4M2QsIDB4Y2EsCisrCTB4ZWYsIDB4MDcsIDB4NTcsIDB4ZTYsIDB4ZDksIDB4NzAsIDB4MGUsIDB4OTUsCisrCTB4YWUsIDB4YTYsIDB4OGQsIDB4MDQsIDB4Y2MsIDB4ZWUsIDB4ZjcsIDB4MDksCisrCTB4MzEsIDB4NzcsIDB4MTIsIDB4YTMsIDB4MjMsIDB4OTcsIDB4NjIsIDB4YjMsCisrCTB4N2IsIDB4MzIsIDB4ZmIsIDB4ODAsIDB4MTQsIDB4NDgsIDB4ODEsIDB4YzMsCisrCTB4ZTUsIDB4ZWEsIDB4OTEsIDB4MzksIDB4NTIsIDB4ODEsIDB4YTIsIDB4NGYsCisrCTB4ZTQsIDB4YjMsIDB4MDksIDB4ZmYsIDB4ZGUsIDB4NWUsIDB4ZTksIDB4NTgsCisrCTB4ODQsIDB4NmUsIDB4ZjksIDB4M2QsIDB4ZGYsIDB4MjUsIDB4ZWEsIDB4YWQsCisrCTB4YWUsIDB4ZTYsIDB4OWEsIDB4ZDEsIDB4ODksIDB4NTUsIDB4ZDMsIDB4ZGUsCisrCTB4NmMsIDB4NTIsIDB4ZGIsIDB4NzAsIDB4ZmUsIDB4MzcsIDB4Y2UsIDB4NDQsCisrCTB4MGEsIDB4YTgsIDB4MjUsIDB4NWYsIDB4OTIsIDB4YzEsIDB4MzMsIDB4NGEsCisrCTB4NGYsIDB4OWIsIDB4NjIsIDB4MzUsIDB4ZmYsIDB4Y2UsIDB4YzAsIDB4YTksCisrCTB4NjAsIDB4Y2UsIDB4NTIsIDB4MDAsIDB4OTcsIDB4NTEsIDB4MzUsIDB4MjYsCisrCTB4MmUsIDB4YjksIDB4MzYsIDB4YTksIDB4ODcsIDB4NmUsIDB4MWUsIDB4Y2MsCisrCTB4OTEsIDB4NzgsIDB4NTMsIDB4OTgsIDB4ODYsIDB4NWIsIDB4OWMsIDB4NzQsCisrCTB4N2QsIDB4ODgsIDB4MzMsIDB4ZTEsIDB4ZGYsIDB4MzcsIDB4NjksIDB4MmIsCisrCTB4YmIsIDB4ZjEsIDB4NGQsIDB4ZjQsIDB4ZDEsIDB4ZjEsIDB4MzksIDB4OTMsCisrCTB4MTcsIDB4NTEsIDB4MTksIDB4ZTMsIDB4MTksIDB4MWUsIDB4NzYsIDB4MzcsCisrCTB4MjUsIDB4ZmIsIDB4MDksIDB4MjcsIDB4NmEsIDB4YWIsIDB4NjcsIDB4NmYsCisrCTB4MTQsIDB4MTIsIDB4NjQsIDB4ZTcsIDB4YzQsIDB4MDcsIDB4ZGYsIDB4NGQsCisrCTB4MTcsIDB4YmIsIDB4NmQsIDB4ZTAsIDB4ZTksIDB4YjksIDB4YWIsIDB4Y2EsCisrCTB4MTAsIDB4NjgsIDB4YWYsIDB4N2UsIDB4YjcsIDB4MzMsIDB4NTQsIDB4NzMsCisrCTB4MDcsIDB4NmUsIDB4ZjcsIDB4ODEsIDB4OTcsIDB4OWMsIDB4MDUsIDB4NmYsCisrCTB4ODQsIDB4NWYsIDB4ZDIsIDB4NDIsIDB4ZmIsIDB4MzgsIDB4Y2YsIDB4ZDEsCisrCTB4MmYsIDB4MTQsIDB4MzAsIDB4ODgsIDB4OTgsIDB4NGQsIDB4NWEsIDB4YTksCisrCTB4NzYsIDB4ZDUsIDB4NGYsIDB4M2UsIDB4NzAsIDB4NmMsIDB4ODUsIDB4NzYsCisrCTB4ZDcsIDB4MDEsIDB4YTAsIDB4MWEsIDB4YzgsIDB4NGUsIDB4YWEsIDB4YWMsCisrCTB4NzgsIDB4ZmUsIDB4NDYsIDB4ZGUsIDB4NmEsIDB4MDUsIDB4NDYsIDB4YTcsCisrCTB4NDMsIDB4MGMsIDB4YjksIDB4ZGUsIDB4YjksIDB4NjgsIDB4ZmIsIDB4Y2UsCisrCTB4NDIsIDB4OTksIDB4MDcsIDB4NGQsIDB4MGIsIDB4M2IsIDB4NWEsIDB4MzAsCisrCTB4MzUsIDB4YTgsIDB4ZjksIDB4M2EsIDB4NzMsIDB4ZWYsIDB4MGYsIDB4ZGIsCisrCTB4MWUsIDB4MTYsIDB4NDIsIDB4YzQsIDB4YmEsIDB4YWUsIDB4NTgsIDB4YWEsCisrCTB4ZjgsIDB4ZTUsIDB4NzUsIDB4MmYsIDB4MWIsIDB4MTUsIDB4NWMsIDB4ZmQsCisrCTB4MGEsIDB4OTcsIDB4ZDAsIDB4ZTQsIDB4MzcsIDB4ODMsIDB4NjEsIDB4NWYsCisrCTB4NDMsIDB4YTYsIDB4YzcsIDB4M2YsIDB4MzgsIDB4NTksIDB4ZTYsIDB4ZWIsCisrCTB4YTMsIDB4OTAsIDB4YzMsIDB4YWEsIDB4YWEsIDB4NWEsIDB4ZDMsIDB4MzQsCisrCTB4ZDQsIDB4MTcsIDB4YzgsIDB4NjUsIDB4M2UsIDB4NTcsIDB4YmMsIDB4NWUsCisrCTB4ZGQsIDB4OWUsIDB4YjcsIDB4ZjAsIDB4MmUsIDB4NWIsIDB4YjIsIDB4MWYsCisrCTB4OGEsIDB4MDgsIDB4MGQsIDB4NDUsIDB4OTEsIDB4MGIsIDB4MjksIDB4NTMsCisrCTB4NGYsIDB4NGMsIDB4NWEsIDB4NzMsIDB4NTYsIDB4ZmUsIDB4YWYsIDB4NDEsCisrCTB4MDEsIDB4MzksIDB4MGEsIDB4MjQsIDB4M2MsIDB4N2UsIDB4YmUsIDB4NGUsCisrCTB4NTMsIDB4ZjMsIDB4ZWIsIDB4MDYsIDB4NjYsIDB4NTEsIDB4MjgsIDB4MWQsCisrCTB4YmQsIDB4NDEsIDB4MGEsIDB4MDEsIDB4YWIsIDB4MTYsIDB4NDcsIDB4MjcsCisrCTB4NDcsIDB4NDcsIDB4ZjcsIDB4Y2IsIDB4NDYsIDB4MGEsIDB4NzAsIDB4OWUsCisrCTB4MDEsIDB4OWMsIDB4MDksIDB4ZTEsIDB4MmEsIDB4MDAsIDB4MWEsIDB4ZDgsCisrCTB4ZDQsIDB4NzksIDB4OWQsIDB4ODAsIDB4MTUsIDB4OGUsIDB4NTMsIDB4MmEsCisrCTB4NjUsIDB4ODMsIDB4NzgsIDB4M2UsIDB4MDMsIDB4MDAsIDB4MDcsIDB4MTIsCisrCTB4MWYsIDB4MzMsIDB4M2UsIDB4N2IsIDB4MTMsIDB4MzcsIDB4ZjEsIDB4YzMsCisrCTB4ZWYsIDB4YjcsIDB4YzEsIDB4MjAsIDB4M2MsIDB4M2UsIDB4NjcsIDB4NjYsCisrCTB4NWQsIDB4ODgsIDB4YTcsIDB4N2QsIDB4MzMsIDB4NTAsIDB4NzcsIDB4YjAsCisrCTB4MjgsIDB4OGUsIDB4ZTcsIDB4MmMsIDB4MmUsIDB4N2EsIDB4ZjQsIDB4M2MsCisrCTB4OGQsIDB4NzQsIDB4ODMsIDB4YWYsIDB4OGUsIDB4ODcsIDB4MGYsIDB4ZTQsCisrCTB4NTAsIDB4ZmYsIDB4ODQsIDB4NWMsIDB4NDcsIDB4MGMsIDB4NmEsIDB4NDksCisrCTB4YmYsIDB4NDIsIDB4ODYsIDB4NzcsIDB4MTUsIDB4NDgsIDB4YTUsIDB4OTAsCisrCTB4NWQsIDB4OTMsIDB4ZDYsIDB4MmEsIDB4MTEsIDB4ZDUsIDB4ZDUsIDB4MTEsCisrCTB4YWEsIDB4Y2UsIDB4ZTcsIDB4NmYsIDB4YTUsIDB4YjAsIDB4MDksIDB4MmMsCisrCTB4OGQsIDB4ZDMsIDB4OTIsIDB4ZjAsIDB4NWEsIDB4MmEsIDB4ZGEsIDB4NWIsCisrCTB4MWUsIDB4ZDUsIDB4OWEsIDB4YzQsIDB4YzQsIDB4ZjMsIDB4NDksIDB4NzQsCisrCTB4NDEsIDB4Y2EsIDB4ZTgsIDB4YzEsIDB4ZjgsIDB4NDQsIDB4ZDYsIDB4M2MsCisrCTB4YWUsIDB4NmMsIDB4MWQsIDB4OWEsIDB4MzAsIDB4MDQsIDB4NGQsIDB4MjcsCisrCTB4MGUsIDB4YjEsIDB4NWYsIDB4NTksIDB4YTIsIDB4MjQsIDB4ZTgsIDB4ZTEsCisrCTB4OTgsIDB4YzUsIDB4NmEsIDB4NGMsIDB4ZmUsIDB4NDEsIDB4ZDIsIDB4MjcsCisrCTB4NDIsIDB4NTIsIDB4ZTEsIDB4ZTksIDB4N2QsIDB4NjIsIDB4ZTQsIDB4ODgsCisrCTB4MGYsIDB4YWQsIDB4YjIsIDB4NzAsIDB4Y2IsIDB4OWQsIDB4NGMsIDB4MjcsCisrCTB4MmUsIDB4NzYsIDB4MWUsIDB4MWEsIDB4NjMsIDB4NjUsIDB4ZjUsIDB4M2IsCisrCTB4ZjgsIDB4NTcsIDB4NjksIDB4ZWIsIDB4NWIsIDB4MzgsIDB4MjYsIDB4MzksCisrCTB4MzMsIDB4MjUsIDB4NDUsIDB4M2UsIDB4OTEsIDB4YjgsIDB4ZDgsIDB4YzcsCisrCTB4ZDUsIDB4NDIsIDB4YzAsIDB4MjIsIDB4MzEsIDB4NzQsIDB4ZjQsIDB4YmMsCisrCTB4MGMsIDB4MjMsIDB4ZjEsIDB4Y2EsIDB4YzEsIDB4OGQsIDB4ZDcsIDB4YmUsCisrCTB4YzksIDB4NjIsIDB4ZTQsIDB4MDgsIDB4MWEsIDB4Y2YsIDB4MzYsIDB4ZDUsCisrCTB4ZmUsIDB4NTUsIDB4MjEsIDB4NTksIDB4OTEsIDB4ODcsIDB4ODcsIDB4ZGYsCisrCTB4MDYsIDB4ZGIsIDB4ZGYsIDB4OTYsIDB4NDUsIDB4NTgsIDB4ZGEsIDB4MDUsCisrCTB4Y2QsIDB4NTAsIDB4NGQsIDB4ZDIsIDB4N2QsIDB4MDUsIDB4MTgsIDB4NzMsCisrCTB4NmEsIDB4OGQsIDB4MTEsIDB4ODUsIDB4YTYsIDB4ODgsIDB4ZTgsIDB4ZGEsCisrCTB4ZTYsIDB4MzAsIDB4MzMsIDB4YTQsIDB4ODksIDB4MzEsIDB4NzUsIDB4YmUsCisrCTB4NjksIDB4NDMsIDB4ODQsIDB4NDMsIDB4NTAsIDB4ODcsIDB4ZGQsIDB4NzEsCisrCTB4MzYsIDB4ODMsIDB4YzMsIDB4NzgsIDB4NzQsIDB4MjQsIDB4MGEsIDB4ZWQsCisrCTB4N2IsIDB4ZGIsIDB4YTQsIDB4MjQsIDB4MGIsIDB4YjksIDB4N2UsIDB4NWQsCisrCTB4ZmYsIDB4ZGUsIDB4YjEsIDB4ZWYsIDB4NjEsIDB4NWEsIDB4NDUsIDB4MzMsCisrCTB4ZjYsIDB4MTcsIDB4MDcsIDB4MDgsIDB4OTgsIDB4ODMsIDB4OTIsIDB4MGYsCisrCTB4MjMsIDB4NmQsIDB4ZTYsIDB4YWEsIDB4MTcsIDB4NTQsIDB4YWQsIDB4NmEsCisrCTB4YzgsIDB4ZGIsIDB4MjYsIDB4YmUsIDB4YjgsIDB4YjYsIDB4MDgsIDB4ZmEsCisrCTB4NjgsIDB4ZjEsIDB4ZDcsIDB4NzksIDB4NmYsIDB4MTgsIDB4YjQsIDB4OWUsCisrCTB4MmQsIDB4M2YsIDB4MWIsIDB4NjQsIDB4YWYsIDB4OGQsIDB4MDYsIDB4MGUsCisrCTB4NDksIDB4MjgsIDB4ZTAsIDB4NWQsIDB4NDUsIDB4NjgsIDB4MTMsIDB4ODcsCisrCTB4ZmEsIDB4ZGUsIDB4NDAsIDB4N2IsIDB4ZDIsIDB4YzMsIDB4OTQsIDB4ZDUsCisrCTB4ZTEsIDB4ZDksIDB4YzIsIDB4YWYsIDB4NTUsIDB4ODksIDB4ZWIsIDB4YjQsCisrCTB4MTIsIDB4NTksIDB4YTgsIDB4ZDQsIDB4YzUsIDB4MjksIDB4NjYsIDB4MzgsCisrCTB4ZTYsIDB4YWMsIDB4MjIsIDB4MjIsIDB4ZDksIDB4NjQsIDB4OWIsIDB4MzQsCisrCTB4MGEsIDB4MzIsIDB4OWYsIDB4YzIsIDB4YmYsIDB4MTcsIDB4NmMsIDB4M2YsCisrCTB4NzEsIDB4N2EsIDB4MzgsIDB4NmIsIDB4OTgsIDB4ZmIsIDB4NDksIDB4MzYsCisrCTB4ODksIDB4YzksIDB4ZTIsIDB4ZDYsIDB4YzcsIDB4NWQsIDB4ZDAsIDB4NjksCisrCTB4NWYsIDB4MjMsIDB4MzUsIDB4YzksIDB4MzAsIDB4ZTIsIDB4ZmQsIDB4NDQsCisrCTB4NTgsIDB4MzksIDB4ZDcsIDB4OTcsIDB4ZmIsIDB4NWMsIDB4MDAsIDB4ZDUsCisrCTB4NGYsIDB4N2EsIDB4MWEsIDB4OTUsIDB4OGIsIDB4NjIsIDB4NGIsIDB4Y2UsCisrCTB4ZTUsIDB4OTEsIDB4MjEsIDB4N2IsIDB4MzAsIDB4MDAsIDB4ZDYsIDB4ZGQsCisrCTB4NmQsIDB4MDIsIDB4ODYsIDB4NDksIDB4MGYsIDB4M2MsIDB4MWEsIDB4MjcsCisrCTB4M2MsIDB4ZDMsIDB4MGUsIDB4NzEsIDB4ZjIsIDB4ZmYsIDB4ZjUsIDB4MmYsCisrCTB4ODcsIDB4YWMsIDB4NjcsIDB4NTksIDB4ODEsIDB4YTMsIDB4ZjcsIDB4ZjgsCisrCTB4ZDYsIDB4MTEsIDB4MGMsIDB4ODQsIDB4YTksIDB4MDMsIDB4ZWUsIDB4MmEsCisrCTB4YzQsIDB4ZjMsIDB4MjIsIDB4YWIsIDB4N2MsIDB4ZTIsIDB4MjUsIDB4ZjUsCisrCTB4NjcsIDB4YTMsIDB4ZTQsIDB4MTEsIDB4ZTAsIDB4NTksIDB4YjMsIDB4Y2EsCisrCTB4ODcsIDB4YTAsIDB4YWUsIDB4YzksIDB4YTYsIDB4NjIsIDB4MWIsIDB4NmUsCisrCTB4NGQsIDB4MDIsIDB4NmIsIDB4MDcsIDB4OWQsIDB4ZmQsIDB4ZDAsIDB4OTIsCisrCTB4MDYsIDB4ZTEsIDB4YjIsIDB4OWEsIDB4NGEsIDB4MWYsIDB4MWYsIDB4MTMsCisrCTB4NDksIDB4OTksIDB4OTcsIDB4MDgsIDB4ZGUsIDB4N2YsIDB4OTgsIDB4YWYsCisrCTB4NTEsIDB4OTgsIDB4ZWUsIDB4MmMsIDB4Y2IsIDB4ZjAsIDB4MGIsIDB4YzYsCisrCTB4YjYsIDB4YjcsIDB4MmQsIDB4OWEsIDB4YjEsIDB4YWMsIDB4YTYsIDB4ZTMsCisrCTB4MTUsIDB4NzcsIDB4OWQsIDB4NmIsIDB4MWEsIDB4ZTQsIDB4ZmMsIDB4OGIsCisrCTB4ZjIsIDB4MTcsIDB4NTksIDB4MDgsIDB4MDQsIDB4NTgsIDB4ODEsIDB4OWQsCisrCTB4MWIsIDB4MWIsIDB4NjksIDB4NTUsIDB4YzIsIDB4YjQsIDB4M2MsIDB4MWYsCisrCTB4NTAsIDB4ZjEsIDB4N2YsIDB4NzcsIDB4OTAsIDB4NGMsIDB4NjYsIDB4NDAsCisrCTB4NWEsIDB4YzAsIDB4MzMsIDB4MWYsIDB4Y2IsIDB4MDUsIDB4NmQsIDB4NWMsCisrCTB4MDYsIDB4ODcsIDB4NTIsIDB4YTIsIDB4OGYsIDB4MjYsIDB4ZDUsIDB4NGYKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDEwW10gX19pbml0Y29uc3QgPSB7CisrCTB4ZTUsIDB4MjYsIDB4YTQsIDB4M2QsIDB4YmQsIDB4MzMsIDB4ZDAsIDB4NGIsCisrCTB4NmYsIDB4MDUsIDB4YTcsIDB4NmUsIDB4MTIsIDB4N2EsIDB4ZDIsIDB4NzQsCisrCTB4YTYsIDB4ZGQsIDB4YmQsIDB4OTUsIDB4ZWIsIDB4ZjksIDB4YTQsIDB4ZjEsCisrCTB4NTksIDB4OTMsIDB4OTEsIDB4NzAsIDB4ZDksIDB4ZmUsIDB4OWEsIDB4Y2QsCisrCTB4NTMsIDB4MWYsIDB4M2EsIDB4YWIsIDB4YTYsIDB4N2MsIDB4OWYsIDB4YTYsCisrCTB4OWUsIDB4YmQsIDB4OTksIDB4ZDksIDB4YjUsIDB4OTcsIDB4NDQsIDB4ZDUsCisrCTB4MTQsIDB4NDgsIDB4NGQsIDB4OWQsIDB4YzAsIDB4ZDAsIDB4MDUsIDB4OTYsCisrCTB4ZWIsIDB4NGMsIDB4NzgsIDB4NTUsIDB4MDksIDB4MDgsIDB4MDEsIDB4MDIsCisrCTB4MzAsIDB4OTAsIDB4N2IsIDB4OTYsIDB4N2EsIDB4N2IsIDB4NWYsIDB4MzAsCisrCTB4NDEsIDB4MjQsIDB4Y2UsIDB4NjgsIDB4NjEsIDB4NDksIDB4ODYsIDB4NTcsCisrCTB4ODIsIDB4ZGQsIDB4NTMsIDB4MWMsIDB4NTEsIDB4MjgsIDB4MmIsIDB4NTMsCisrCTB4NmUsIDB4MmQsIDB4YzIsIDB4MjAsIDB4NGMsIDB4ZGQsIDB4OGYsIDB4NjUsCisrCTB4MTAsIDB4MjAsIDB4NTAsIDB4ZGQsIDB4OWQsIDB4NTAsIDB4ZTUsIDB4NzEsCisrCTB4NDAsIDB4NTMsIDB4NjksIDB4ZmMsIDB4NzcsIDB4NDgsIDB4MTEsIDB4YjksCisrCTB4ZGUsIDB4YTQsIDB4OGQsIDB4NTgsIDB4ZTQsIDB4YTYsIDB4MWEsIDB4MTgsCisrCTB4NDcsIDB4ODEsIDB4N2UsIDB4ZmMsIDB4ZGQsIDB4ZjYsIDB4ZWYsIDB4Y2UsCisrCTB4MmYsIDB4NDMsIDB4NjgsIDB4ZDYsIDB4MDYsIDB4ZTIsIDB4NzQsIDB4NmEsCisrCTB4YWQsIDB4OTAsIDB4ZjUsIDB4MzcsIDB4ZjMsIDB4M2QsIDB4ODIsIDB4NjksCisrCTB4NDAsIDB4ZTksIDB4NmIsIDB4YTcsIDB4M2QsIDB4YTgsIDB4MWUsIDB4ZDIsCisrCTB4MDIsIDB4N2MsIDB4YjcsIDB4OWIsIDB4ZTQsIDB4ZGEsIDB4OGYsIDB4OTUsCisrCTB4MDYsIDB4YzUsIDB4ZGYsIDB4NzMsIDB4YTMsIDB4MjAsIDB4OWEsIDB4NDksCisrCTB4ZGUsIDB4OWMsIDB4YmMsIDB4ZWUsIDB4MTQsIDB4M2YsIDB4ODEsIDB4NWUsCisrCTB4ZjgsIDB4M2IsIDB4NTksIDB4M2MsIDB4ZTEsIDB4NjgsIDB4MTIsIDB4NWEsCisrCTB4M2EsIDB4NzYsIDB4M2EsIDB4M2YsIDB4ZjcsIDB4ODcsIDB4MzMsIDB4MGEsCisrCTB4MDEsIDB4YjgsIDB4ZDQsIDB4ZWQsIDB4YjYsIDB4YmUsIDB4OTQsIDB4NWUsCisrCTB4NzAsIDB4NDAsIDB4NTYsIDB4NjcsIDB4MWYsIDB4NTAsIDB4NDQsIDB4MTksCisrCTB4Y2UsIDB4ODIsIDB4NzAsIDB4MTAsIDB4ODcsIDB4MTMsIDB4MjAsIDB4MGIsCisrCTB4NGMsIDB4NWEsIDB4YjYsIDB4ZjYsIDB4YTcsIDB4YWUsIDB4ODEsIDB4NzUsCisrCTB4MDEsIDB4ODEsIDB4ZTYsIDB4NGIsIDB4NTcsIDB4N2MsIDB4ZGQsIDB4NmQsCisrCTB4ZjgsIDB4MWMsIDB4MjksIDB4MzIsIDB4ZjcsIDB4ZGEsIDB4M2MsIDB4MmQsCisrCTB4ZjgsIDB4OWIsIDB4MjUsIDB4NmUsIDB4MDAsIDB4YjQsIDB4ZjcsIDB4MmYsCisrCTB4ZjcsIDB4MDQsIDB4ZjcsIDB4YTEsIDB4NTYsIDB4YWMsIDB4NGYsIDB4MWEsCisrCTB4NjQsIDB4YjgsIDB4NDcsIDB4NTUsIDB4MTgsIDB4N2IsIDB4MDcsIDB4NGQsCisrCTB4YmQsIDB4NDcsIDB4MjQsIDB4ODAsIDB4NWQsIDB4YTIsIDB4NzAsIDB4YzUsCisrCTB4ZGQsIDB4OGUsIDB4ODIsIDB4ZDQsIDB4ZWIsIDB4ZWMsIDB4YjIsIDB4MGMsCisrCTB4MzksIDB4ZDIsIDB4OTcsIDB4YzEsIDB4Y2IsIDB4ZWIsIDB4ZjQsIDB4NzcsCisrCTB4NTksIDB4YjQsIDB4ODcsIDB4ZWYsIDB4Y2IsIDB4NDMsIDB4MmQsIDB4NDYsCisrCTB4NTQsIDB4ZDEsIDB4YTcsIDB4ZDcsIDB4MTUsIDB4OTksIDB4MGEsIDB4NDMsCisrCTB4YTEsIDB4ZTAsIDB4OTksIDB4MzMsIDB4NzEsIDB4YzEsIDB4ZWQsIDB4ZmUsCisrCTB4NzIsIDB4NDYsIDB4MzMsIDB4OGUsIDB4OTEsIDB4MDgsIDB4OWYsIDB4YzgsCisrCTB4MmUsIDB4Y2EsIDB4ZmEsIDB4ZGMsIDB4NTksIDB4ZDUsIDB4YzMsIDB4NzYsCisrCTB4ODQsIDB4OWYsIDB4YTMsIDB4MzcsIDB4NjgsIDB4YzMsIDB4ZjAsIDB4NDcsCisrCTB4MmMsIDB4NjgsIDB4ZGIsIDB4NWUsIDB4YzMsIDB4NDksIDB4NGMsIDB4ZTgsCisrCTB4OTIsIDB4ODUsIDB4ZTIsIDB4MjMsIDB4ZDMsIDB4M2YsIDB4YWQsIDB4MzIsCisrCTB4ZTUsIDB4MmIsIDB4ODIsIDB4ZDcsIDB4OGYsIDB4OTksIDB4MGEsIDB4NTksCisrCTB4NWMsIDB4NDUsIDB4ZDksIDB4YjQsIDB4NTEsIDB4NTIsIDB4YzIsIDB4YWUsCisrCTB4YmYsIDB4ODAsIDB4Y2YsIDB4YzksIDB4YzksIDB4NTEsIDB4MjQsIDB4MmEsCisrCTB4M2IsIDB4M2EsIDB4NGQsIDB4YWUsIDB4ZWIsIDB4YmQsIDB4MjIsIDB4YzMsCisrCTB4MGUsIDB4MGYsIDB4NTksIDB4MjUsIDB4OTIsIDB4MTcsIDB4ZTksIDB4NzQsCisrCTB4YzcsIDB4OGIsIDB4NzAsIDB4NzAsIDB4MzYsIDB4NTUsIDB4OTUsIDB4NzUsCisrCTB4NGIsIDB4YWQsIDB4NjEsIDB4MmIsIDB4MDksIDB4YmMsIDB4ODIsIDB4ZjIsCisrCTB4NmUsIDB4OTQsIDB4NDMsIDB4YWUsIDB4YzMsIDB4ZDUsIDB4Y2QsIDB4OGUsCisrCTB4ZmUsIDB4NWIsIDB4OWEsIDB4ODgsIDB4NDMsIDB4MDEsIDB4NzUsIDB4YjIsCisrCTB4MjMsIDB4MDksIDB4ZjcsIDB4ODksIDB4ODMsIDB4ZTcsIDB4ZmEsIDB4ZjksCisrCTB4YjQsIDB4OWIsIDB4ZjgsIDB4ZWYsIDB4YmQsIDB4MWMsIDB4OTIsIDB4YzEsCisrCTB4ZGEsIDB4N2UsIDB4ZmUsIDB4MDUsIDB4YmEsIDB4NWEsIDB4Y2QsIDB4MDcsCisrCTB4NmEsIDB4NzgsIDB4OWUsIDB4NWQsIDB4ZmIsIDB4MTEsIDB4MmYsIDB4NzksCisrCTB4MzgsIDB4YjYsIDB4YzIsIDB4NWIsIDB4NmIsIDB4NTEsIDB4YjQsIDB4NzEsCisrCTB4ZGQsIDB4ZjcsIDB4MmEsIDB4ZTQsIDB4ZjQsIDB4NzIsIDB4NzYsIDB4YWQsCisrCTB4YzIsIDB4ZGQsIDB4NjQsIDB4NWQsIDB4NzksIDB4YjYsIDB4ZjUsIDB4N2EsCisrCTB4NzcsIDB4MjAsIDB4MDUsIDB4M2QsIDB4MzAsIDB4MDYsIDB4ZDQsIDB4NGMsCisrCTB4MGEsIDB4MmMsIDB4OTgsIDB4NWEsIDB4YjksIDB4ZDQsIDB4OTgsIDB4YTksCisrCTB4M2YsIDB4YzYsIDB4MTIsIDB4ZWEsIDB4M2IsIDB4NGIsIDB4YzUsIDB4NzksCisrCTB4NjQsIDB4NjMsIDB4NmIsIDB4MDksIDB4NTQsIDB4M2IsIDB4MTQsIDB4MjcsCisrCTB4YmEsIDB4OTksIDB4ODAsIDB4YzgsIDB4NzIsIDB4YTgsIDB4MTIsIDB4OTAsCisrCTB4MjksIDB4YmEsIDB4NDAsIDB4NTQsIDB4OTcsIDB4MmIsIDB4N2IsIDB4ZmUsCisrCTB4ZWIsIDB4Y2QsIDB4MDEsIDB4MDUsIDB4NDQsIDB4NzIsIDB4ZGIsIDB4OTksCisrCTB4ZTQsIDB4NjEsIDB4YzksIDB4NjksIDB4ZDYsIDB4YjksIDB4MjgsIDB4ZDEsCisrCTB4MDUsIDB4M2UsIDB4ZjksIDB4MGIsIDB4NDksIDB4MGEsIDB4NDksIDB4ZTksCisrCTB4OGQsIDB4MGUsIDB4YTcsIDB4NGEsIDB4MGYsIDB4YWYsIDB4MzIsIDB4ZDAsCisrCTB4ZTAsIDB4YjIsIDB4M2EsIDB4NTUsIDB4NTgsIDB4ZmUsIDB4NWMsIDB4MjgsCisrCTB4NzAsIDB4NTEsIDB4MjMsIDB4YjAsIDB4N2IsIDB4NmEsIDB4NWYsIDB4MWUsCisrCTB4YjgsIDB4MTcsIDB4ZDcsIDB4OTQsIDB4MTUsIDB4OGYsIDB4ZWUsIDB4MjAsCisrCTB4YzcsIDB4NDIsIDB4MjUsIDB4M2UsIDB4OWEsIDB4MTQsIDB4ZDcsIDB4NjAsCisrCTB4NzIsIDB4MzksIDB4NDcsIDB4NDgsIDB4YTksIDB4ZmUsIDB4ZGQsIDB4NDcsCisrCTB4MGEsIDB4YjEsIDB4ZTYsIDB4NjAsIDB4MjgsIDB4OGMsIDB4MTEsIDB4NjgsCisrCTB4ZTEsIDB4ZmYsIDB4ZDcsIDB4Y2UsIDB4YzgsIDB4YmUsIDB4YjMsIDB4ZmUsCisrCTB4MjcsIDB4MzAsIDB4MDksIDB4NzAsIDB4ZDcsIDB4ZmEsIDB4MDIsIDB4MzMsCisrCTB4M2EsIDB4NjEsIDB4MmUsIDB4YzcsIDB4ZmYsIDB4YTQsIDB4MmEsIDB4YTgsCisrCTB4NmUsIDB4YjQsIDB4NzksIDB4MzUsIDB4NmQsIDB4NGMsIDB4MWUsIDB4MzgsCisrCTB4ZjgsIDB4ZWUsIDB4ZDQsIDB4ODQsIDB4NGUsIDB4NmUsIDB4MjgsIDB4YTcsCisrCTB4Y2UsIDB4YzgsIDB4YzEsIDB4Y2YsIDB4ODAsIDB4MDUsIDB4ZjMsIDB4MDQsCisrCTB4ZWYsIDB4YzgsIDB4MTgsIDB4MjgsIDB4MmUsIDB4OGQsIDB4NWUsIDB4MGMsCisrCTB4ZGYsIDB4YjgsIDB4NWYsIDB4OTYsIDB4ZTgsIDB4YzYsIDB4OWMsIDB4MmYsCisrCTB4ZTUsIDB4YTYsIDB4NDQsIDB4ZDcsIDB4ZTcsIDB4OTksIDB4NDQsIDB4MGMsCisrCTB4ZWMsIDB4ZDcsIDB4MDUsIDB4NjAsIDB4OTcsIDB4YmIsIDB4NzQsIDB4NzcsCisrCTB4NTgsIDB4ZDUsIDB4YmIsIDB4NDgsIDB4ZGUsIDB4NWEsIDB4YjIsIDB4NTQsCisrCTB4N2YsIDB4MGUsIDB4NDYsIDB4NzAsIDB4NmEsIDB4NmYsIDB4NzgsIDB4YTUsCisrCTB4MDgsIDB4ODksIDB4MDUsIDB4NGUsIDB4N2UsIDB4YTAsIDB4NjksIDB4YjQsCisrCTB4NDAsIDB4NjAsIDB4NTUsIDB4NzcsIDB4NzUsIDB4OWIsIDB4MTksIDB4ZjIsCisrCTB4ZDUsIDB4MTMsIDB4ODAsIDB4NzcsIDB4ZjksIDB4NGIsIDB4M2YsIDB4MWUsCisrCTB4ZWUsIDB4ZTYsIDB4NzYsIDB4ODQsIDB4N2IsIDB4OGMsIDB4ZTUsIDB4MjcsCisrCTB4YTgsIDB4MGEsIDB4OTEsIDB4MDEsIDB4NjgsIDB4NzEsIDB4OGEsIDB4M2YsCisrCTB4MDYsIDB4YWIsIDB4ZjYsIDB4YTksIDB4YTUsIDB4ZTYsIDB4NzIsIDB4OTIsCisrCTB4ZTQsIDB4NjcsIDB4ZTIsIDB4YTIsIDB4NDYsIDB4MzUsIDB4ODQsIDB4NTUsCisrCTB4N2QsIDB4Y2EsIDB4YTgsIDB4ODUsIDB4ZDAsIDB4ZjEsIDB4M2YsIDB4YmUsCisrCTB4ZDcsIDB4MzQsIDB4NjQsIDB4ZmMsIDB4YWUsIDB4ZTMsIDB4ZTQsIDB4MDQsCisrCTB4OWYsIDB4NjYsIDB4MDIsIDB4YjksIDB4ODgsIDB4MTAsIDB4ZDksIDB4YzQsCisrCTB4NGMsIDB4MzEsIDB4NDMsIDB4N2EsIDB4OTMsIDB4ZTIsIDB4OWIsIDB4NTYsCisrCTB4NDMsIDB4ODQsIDB4ZGMsIDB4ZGMsIDB4ZGUsIDB4MWQsIDB4YTQsIDB4MDIsCisrCTB4MGUsIDB4YzIsIDB4ZWYsIDB4YzMsIDB4ZjgsIDB4NzgsIDB4ZDEsIDB4YjIsCisrCTB4NmIsIDB4NjMsIDB4MTgsIDB4YzksIDB4YTksIDB4ZTUsIDB4NzIsIDB4ZDgsCisrCTB4ZjMsIDB4YjksIDB4ZDEsIDB4OGEsIDB4YzcsIDB4MWEsIDB4MDIsIDB4MjcsCisrCTB4MjAsIDB4NzcsIDB4MTAsIDB4ZTUsIDB4YzgsIDB4ZDQsIDB4NGEsIDB4NDcsCisrCTB4ZTUsIDB4ZGYsIDB4NWYsIDB4MDEsIDB4YWEsIDB4YjAsIDB4ZDQsIDB4MTAsCisrCTB4YmIsIDB4NjksIDB4ZTMsIDB4MzYsIDB4YzgsIDB4ZTEsIDB4M2QsIDB4NDMsCisrCTB4ZmIsIDB4ODYsIDB4Y2QsIDB4Y2MsIDB4YmYsIDB4ZjQsIDB4ODgsIDB4ZTAsCisrCTB4MjAsIDB4Y2EsIDB4YjcsIDB4MWIsIDB4ZjEsIDB4MmYsIDB4NWMsIDB4ZWUsCisrCTB4ZDQsIDB4ZDMsIDB4YTMsIDB4Y2MsIDB4YTQsIDB4MWUsIDB4MWMsIDB4NDcsCisrCTB4ZmIsIDB4YmYsIDB4ZmMsIDB4YTIsIDB4NDEsIDB4NTUsIDB4OWQsIDB4ZjYsCisrCTB4NWEsIDB4NWUsIDB4NjUsIDB4MzIsIDB4MzQsIDB4N2IsIDB4NTIsIDB4OGQsCisrCTB4ZDUsIDB4ZDAsIDB4MjAsIDB4NjAsIDB4MDMsIDB4YWIsIDB4M2YsIDB4OGMsCisrCTB4ZDQsIDB4MjEsIDB4ZWEsIDB4MmEsIDB4ZDksIDB4YzQsIDB4ZDAsIDB4ZDMsCisrCTB4NjUsIDB4ZDgsIDB4N2EsIDB4MTMsIDB4MjgsIDB4NjIsIDB4MzIsIDB4NGIsCisrCTB4MmMsIDB4ODcsIDB4OTMsIDB4YTgsIDB4YjQsIDB4NTIsIDB4NDUsIDB4MDksCisrCTB4NDQsIDB4ZWMsIDB4ZWMsIDB4YzMsIDB4MTcsIDB4ZGIsIDB4OWEsIDB4NGQsCisrCTB4NWMsIDB4YTksIDB4MTEsIDB4ZDQsIDB4N2QsIDB4YWYsIDB4OWUsIDB4ZjEsCisrCTB4MmQsIDB4YjIsIDB4NjYsIDB4YzUsIDB4MWQsIDB4ZWQsIDB4YjcsIDB4Y2QsCisrCTB4MGIsIDB4MjUsIDB4NWUsIDB4MzAsIDB4NDcsIDB4M2YsIDB4NDAsIDB4ZjQsCisrCTB4YTEsIDB4YTAsIDB4MDAsIDB4OTQsIDB4MTAsIDB4YzUsIDB4NmEsIDB4NjMsCisrCTB4MWEsIDB4ZDUsIDB4ODgsIDB4OTIsIDB4OGUsIDB4ODIsIDB4MzksIDB4ODcsCisrCTB4M2MsIDB4NzgsIDB4NjUsIDB4NTgsIDB4NDIsIDB4NzUsIDB4NWIsIDB4ZGQsCisrCTB4NzcsIDB4M2UsIDB4MDksIDB4NGUsIDB4NzYsIDB4NWIsIDB4ZTYsIDB4MGUsCisrCTB4NGQsIDB4MzgsIDB4YjIsIDB4YzAsIDB4YjgsIDB4OTUsIDB4MDEsIDB4N2EsCisrCTB4MTAsIDB4ZTAsIDB4ZmIsIDB4MDcsIDB4ZjIsIDB4YWIsIDB4MmQsIDB4OGMsCisrCTB4MzIsIDB4ZWQsIDB4MmIsIDB4YzAsIDB4NDYsIDB4YzIsIDB4ZjUsIDB4MzgsCisrCTB4ODMsIDB4ZjAsIDB4MTcsIDB4ZWMsIDB4YzEsIDB4MjAsIDB4NmEsIDB4OWEsCisrCTB4MGIsIDB4MDAsIDB4YTAsIDB4OTgsIDB4MjIsIDB4NTAsIDB4MjMsIDB4ZDUsCisrCTB4ODAsIDB4NmIsIDB4ZjYsIDB4MWYsIDB4YzMsIDB4Y2MsIDB4OTcsIDB4YzksCisrCTB4MjQsIDB4OWYsIDB4ZjMsIDB4YWYsIDB4NDMsIDB4MTQsIDB4ZDUsIDB4YTAKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwMTBbXSBfX2luaXRjb25zdCA9IHsKKysJMHhkMiwgMHhhMSwgMHg3MCwgMHhkYiwgMHg3YSwgMHhmOCwgMHhmYSwgMHgyNywKKysJMHhiYSwgMHg3MywgMHgwZiwgMHhiZiwgMHgzZCwgMHgxZSwgMHg4MiwgMHhiMgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTAxMFtdIF9faW5pdGNvbnN0ID0geworKwkweGRiLCAweDkyLCAweDBmLCAweDdmLCAweDE3LCAweDU0LCAweDBjLCAweDMwCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTAxMFtdIF9faW5pdGNvbnN0ID0geworKwkweDQ3LCAweDExLCAweGViLCAweDg2LCAweDJiLCAweDJjLCAweGFiLCAweDQ0LAorKwkweDM0LCAweGRhLCAweDdmLCAweDU3LCAweDAzLCAweDM5LCAweDBjLCAweGFmLAorKwkweDJjLCAweDE0LCAweGZkLCAweDY1LCAweDIzLCAweGU5LCAweDhlLCAweDc0LAorKwkweGQ1LCAweDA4LCAweDY4LCAweDA4LCAweGU3LCAweGI0LCAweDcyLCAweGQ3CisrfTsKKysKKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDExW10gX19pbml0Y29uc3QgPSB7CisrCTB4N2EsIDB4NTcsIDB4ZjIsIDB4YzcsIDB4MDYsIDB4M2YsIDB4NTAsIDB4N2IsCisrCTB4MzYsIDB4MWEsIDB4NjYsIDB4NWMsIDB4YjksIDB4MGUsIDB4NWUsIDB4M2IsCisrCTB4NDUsIDB4NjAsIDB4YmUsIDB4OWEsIDB4MzEsIDB4OWYsIDB4ZmYsIDB4NWQsCisrCTB4NjYsIDB4MzQsIDB4YjQsIDB4ZGMsIDB4ZmIsIDB4OWQsIDB4OGUsIDB4ZWUsCisrCTB4NmEsIDB4MzMsIDB4YTQsIDB4MDcsIDB4M2MsIDB4ZjksIDB4NGMsIDB4MzAsCisrCTB4YTEsIDB4MjQsIDB4NTIsIDB4ZjksIDB4NTAsIDB4NDYsIDB4ODgsIDB4MjAsCisrCTB4MDIsIDB4MzIsIDB4M2EsIDB4MGUsIDB4OTksIDB4NjMsIDB4YWYsIDB4MWYsCisrCTB4MTUsIDB4MjgsIDB4MmEsIDB4MDUsIDB4ZmYsIDB4NTcsIDB4NTksIDB4NWUsCisrCTB4MTgsIDB4YTEsIDB4MWYsIDB4ZDAsIDB4OTIsIDB4NWMsIDB4ODgsIDB4NjYsCisrCTB4MWIsIDB4MDAsIDB4NjQsIDB4YTUsIDB4OTMsIDB4OGQsIDB4MDYsIDB4NDYsCisrCTB4YjAsIDB4NjQsIDB4OGIsIDB4OGIsIDB4ZWYsIDB4OTksIDB4MDUsIDB4MzUsCisrCTB4ODUsIDB4YjMsIDB4ZjMsIDB4MzMsIDB4YmIsIDB4ZWMsIDB4NjYsIDB4YjYsCisrCTB4M2QsIDB4NTcsIDB4NDIsIDB4ZTMsIDB4YjQsIDB4YzYsIDB4YWEsIDB4YjAsCisrCTB4NDEsIDB4MmEsIDB4YjksIDB4NTksIDB4YTksIDB4ZjYsIDB4M2UsIDB4MTUsCisrCTB4MjYsIDB4MTIsIDB4MDMsIDB4MjEsIDB4NGMsIDB4NzQsIDB4NDMsIDB4MTMsCisrCTB4MmEsIDB4MDMsIDB4MjcsIDB4MDksIDB4YjQsIDB4ZmIsIDB4ZTcsIDB4YjcsCisrCTB4NDAsIDB4ZmYsIDB4NWUsIDB4Y2UsIDB4NDgsIDB4OWEsIDB4NjAsIDB4ZTMsCisrCTB4OGIsIDB4ODAsIDB4OGMsIDB4MzgsIDB4MmQsIDB4Y2IsIDB4OTMsIDB4MzcsCisrCTB4NzQsIDB4MDUsIDB4NTIsIDB4NmYsIDB4NzMsIDB4M2UsIDB4YzMsIDB4YmMsCisrCTB4Y2EsIDB4NzIsIDB4MGEsIDB4ZWIsIDB4ZjEsIDB4M2IsIDB4YTAsIDB4OTUsCisrCTB4ZGMsIDB4OGEsIDB4YzQsIDB4YTksIDB4ZGMsIDB4Y2EsIDB4NDQsIDB4ZDgsCisrCTB4MDgsIDB4NjMsIDB4NmEsIDB4MzYsIDB4ZDMsIDB4M2MsIDB4YjgsIDB4YWMsCisrCTB4NDYsIDB4N2QsIDB4ZmQsIDB4YWEsIDB4ZWIsIDB4M2UsIDB4MGYsIDB4NDUsCisrCTB4OGYsIDB4NDksIDB4ZGEsIDB4MmIsIDB4ZjIsIDB4MTIsIDB4YmQsIDB4YWYsCisrCTB4NjcsIDB4OGEsIDB4NjMsIDB4NDgsIDB4NGIsIDB4NTUsIDB4NWYsIDB4NmQsCisrCTB4OGMsIDB4YjksIDB4NzYsIDB4MzQsIDB4ODQsIDB4YWUsIDB4YzIsIDB4ZmMsCisrCTB4NTIsIDB4NjQsIDB4ODIsIDB4ZjcsIDB4YjAsIDB4MDYsIDB4ZjAsIDB4NDUsCisrCTB4NzMsIDB4MTIsIDB4NTAsIDB4MzAsIDB4NzIsIDB4ZWEsIDB4NzgsIDB4OWEsCisrCTB4YTgsIDB4YWYsIDB4YjUsIDB4ZTMsIDB4YmIsIDB4NzcsIDB4NTIsIDB4ZWMsCisrCTB4NTksIDB4ODQsIDB4YmYsIDB4NmIsIDB4OGYsIDB4Y2UsIDB4ODYsIDB4NWUsCisrCTB4MWYsIDB4MjMsIDB4ZTksIDB4ZmIsIDB4MDgsIDB4ODYsIDB4ZjcsIDB4MTAsCisrCTB4YjksIDB4ZjIsIDB4NDQsIDB4OTYsIDB4NDQsIDB4NjMsIDB4YTksIDB4YTgsCisrCTB4NzgsIDB4MDAsIDB4MjMsIDB4ZDYsIDB4YzcsIDB4ZTcsIDB4NmUsIDB4NjYsCisrCTB4NGYsIDB4Y2MsIDB4ZWUsIDB4MTUsIDB4YjMsIDB4YmQsIDB4MWQsIDB4YTAsCisrCTB4ZTUsIDB4OWMsIDB4MWIsIDB4MjQsIDB4MmMsIDB4NGQsIDB4M2MsIDB4NjIsCisrCTB4MzUsIDB4OWMsIDB4ODgsIDB4NTksIDB4MDksIDB4ZGQsIDB4ODIsIDB4MWIsCisrCTB4Y2YsIDB4MGEsIDB4ODMsIDB4NmIsIDB4M2YsIDB4YWUsIDB4MDMsIDB4YzQsCisrCTB4YjQsIDB4ZGQsIDB4N2UsIDB4NWIsIDB4MjgsIDB4NzYsIDB4MjUsIDB4OTYsCisrCTB4ZDksIDB4YzksIDB4OWQsIDB4NWYsIDB4ODYsIDB4ZmEsIDB4ZjYsIDB4ZDcsCisrCTB4ZDIsIDB4ZTYsIDB4NzYsIDB4MWQsIDB4MGYsIDB4YTEsIDB4ZGMsIDB4NzQsCisrCTB4MDUsIDB4MWIsIDB4MWQsIDB4ZTAsIDB4Y2QsIDB4MTYsIDB4YjAsIDB4YTgsCisrCTB4OGEsIDB4MzQsIDB4N2IsIDB4MTUsIDB4MTEsIDB4NzcsIDB4ZTUsIDB4N2IsCisrCTB4N2UsIDB4MjAsIDB4ZjcsIDB4ZGEsIDB4MzgsIDB4ZGEsIDB4Y2UsIDB4NzAsCisrCTB4ZTksIDB4ZjUsIDB4NmMsIDB4ZDksIDB4YmUsIDB4MGMsIDB4NGMsIDB4OTUsCisrCTB4NGMsIDB4YzIsIDB4OWIsIDB4MzQsIDB4NTUsIDB4NTUsIDB4ZTEsIDB4ZjMsCisrCTB4NDYsIDB4OGUsIDB4NDgsIDB4NzQsIDB4MTQsIDB4NGYsIDB4OWQsIDB4YzksCisrCTB4ZjUsIDB4ZTgsIDB4MWEsIDB4ZjAsIDB4MTEsIDB4NGEsIDB4YzEsIDB4OGQsCisrCTB4ZTAsIDB4OTMsIDB4YTAsIDB4YmUsIDB4MDksIDB4MWMsIDB4MmIsIDB4NGUsCisrCTB4MGYsIDB4YjIsIDB4ODcsIDB4OGIsIDB4ODQsIDB4ZmUsIDB4OTIsIDB4MzIsCisrCTB4MTQsIDB4ZDcsIDB4OTMsIDB4ZGYsIDB4ZTcsIDB4NDQsIDB4YmMsIDB4YzUsCisrCTB4YWUsIDB4NTMsIDB4NjksIDB4ZDgsIDB4YjMsIDB4NzksIDB4MzcsIDB4ODAsCisrCTB4ZTMsIDB4MTcsIDB4NWMsIDB4ZWMsIDB4NTMsIDB4MDAsIDB4OWEsIDB4ZTMsCisrCTB4OGUsIDB4ZGMsIDB4MzgsIDB4YjgsIDB4NjYsIDB4ZjAsIDB4ZDMsIDB4YWQsCisrCTB4MWQsIDB4MDIsIDB4OTYsIDB4ODYsIDB4M2UsIDB4OWQsIDB4M2IsIDB4NWQsCisrCTB4YTUsIDB4N2YsIDB4MjEsIDB4MTAsIDB4ZjEsIDB4MWYsIDB4MTMsIDB4MjAsCisrCTB4ZjksIDB4NTcsIDB4ODcsIDB4MjAsIDB4ZjUsIDB4NWYsIDB4ZjEsIDB4MTcsCisrCTB4NDgsIDB4MGEsIDB4NTEsIDB4NWEsIDB4Y2QsIDB4MTksIDB4MDMsIDB4YTYsCisrCTB4NWEsIDB4ZDEsIDB4MTIsIDB4OTcsIDB4ZTksIDB4NDgsIDB4ZTIsIDB4MWQsCisrCTB4ODMsIDB4NzUsIDB4NTAsIDB4ZDksIDB4NzUsIDB4N2QsIDB4NmEsIDB4ODIsCisrCTB4YTEsIDB4ZjksIDB4NGUsIDB4NTQsIDB4ODcsIDB4ODksIDB4YzksIDB4MGMsCisrCTB4YjcsIDB4NWIsIDB4NmEsIDB4OTEsIDB4YzEsIDB4OWMsIDB4YjIsIDB4YTksCisrCTB4ZGMsIDB4OWEsIDB4YTQsIDB4NDksIDB4MGEsIDB4NmQsIDB4MGQsIDB4YmIsCisrCTB4ZGUsIDB4ODYsIDB4NDQsIDB4ZGQsIDB4NWQsIDB4ODksIDB4MmIsIDB4OTYsCisrCTB4MGYsIDB4MjMsIDB4OTUsIDB4YWQsIDB4Y2MsIDB4YTIsIDB4YjMsIDB4YjksCisrCTB4N2UsIDB4NzQsIDB4MzgsIDB4YmEsIDB4OWYsIDB4NzMsIDB4YWUsIDB4NWYsCisrCTB4ZjgsIDB4NjgsIDB4YTIsIDB4ZTAsIDB4YTksIDB4Y2UsIDB4YmQsIDB4NDAsCisrCTB4ZDQsIDB4NGMsIDB4NmIsIDB4ZDIsIDB4NTYsIDB4NjIsIDB4YjAsIDB4Y2MsCisrCTB4NjMsIDB4N2UsIDB4NWIsIDB4ZDMsIDB4YWUsIDB4ZDEsIDB4NzUsIDB4Y2UsCisrCTB4YmIsIDB4YjQsIDB4NWIsIDB4YTgsIDB4ZjgsIDB4YjQsIDB4YWMsIDB4NzEsCisrCTB4NzUsIDB4YWEsIDB4YzksIDB4OWYsIDB4YmIsIDB4NmMsIDB4YWQsIDB4MGYsCisrCTB4NTUsIDB4NWQsIDB4ZTgsIDB4ODUsIDB4N2QsIDB4ZjksIDB4MjEsIDB4MzUsCisrCTB4ZWEsIDB4OTIsIDB4ODUsIDB4MmIsIDB4MDAsIDB4ZWMsIDB4ODQsIDB4OTAsCisrCTB4MGEsIDB4NjMsIDB4OTYsIDB4ZTQsIDB4NmIsIDB4YTksIDB4NzcsIDB4YjgsCisrCTB4OTEsIDB4ZjgsIDB4NDYsIDB4MTUsIDB4NzIsIDB4NjMsIDB4NzAsIDB4MDEsCisrCTB4NDAsIDB4YTMsIDB4YTUsIDB4NzYsIDB4NjIsIDB4MmIsIDB4YmYsIDB4ZjEsCisrCTB4ZTUsIDB4OGQsIDB4OWYsIDB4YTMsIDB4ZmEsIDB4OWIsIDB4MDMsIDB4YmUsCisrCTB4ZmUsIDB4NjUsIDB4NmYsIDB4YTIsIDB4MjksIDB4MGQsIDB4NTQsIDB4YjQsCisrCTB4NzEsIDB4Y2UsIDB4YTksIDB4ZDYsIDB4M2QsIDB4ODgsIDB4ZjksIDB4YWYsCisrCTB4NmIsIDB4YTgsIDB4OWUsIDB4ZjQsIDB4MTYsIDB4OTYsIDB4MzYsIDB4YjksCisrCTB4MDAsIDB4ZGMsIDB4MTAsIDB4YWIsIDB4YjUsIDB4MDgsIDB4MzEsIDB4MWYsCisrCTB4MDAsIDB4YjEsIDB4M2MsIDB4ZDksIDB4MzgsIDB4M2UsIDB4YzYsIDB4MDQsCisrCTB4YTcsIDB4NGUsIDB4ZTgsIDB4YWUsIDB4ZWQsIDB4OTgsIDB4YzIsIDB4ZjcsCisrCTB4YjksIDB4MDAsIDB4NWYsIDB4OGMsIDB4NjAsIDB4ZDEsIDB4ZTUsIDB4MTUsCisrCTB4ZjcsIDB4YWUsIDB4MWUsIDB4ODQsIDB4ODgsIDB4ZDEsIDB4ZjYsIDB4YmMsCisrCTB4M2EsIDB4ODksIDB4MzUsIDB4MjIsIDB4ODMsIDB4N2MsIDB4Y2EsIDB4ZjAsCisrCTB4MzMsIDB4ODIsIDB4NGMsIDB4NzksIDB4M2MsIDB4ZmQsIDB4YjEsIDB4YWUsCisrCTB4NTIsIDB4NjIsIDB4NTUsIDB4ZDIsIDB4NDEsIDB4NjAsIDB4YzYsIDB4YmIsCisrCTB4ZmEsIDB4MGUsIDB4NTksIDB4ZDYsIDB4YTgsIDB4ZmUsIDB4NWQsIDB4ZWQsCisrCTB4NDcsIDB4M2QsIDB4ZTAsIDB4ZWEsIDB4MWYsIDB4NmUsIDB4NDMsIDB4NTEsCisrCTB4ZWMsIDB4MTAsIDB4NTIsIDB4NTYsIDB4NzcsIDB4NDIsIDB4NmIsIDB4NTIsCisrCTB4ODcsIDB4ZDgsIDB4ZWMsIDB4ZTAsIDB4YWEsIDB4NzYsIDB4YTUsIDB4ODQsCisrCTB4MmEsIDB4MjIsIDB4MjQsIDB4ZmQsIDB4OTIsIDB4NDAsIDB4ODgsIDB4ZDUsCisrCTB4ODUsIDB4MWMsIDB4MWYsIDB4NmIsIDB4NDcsIDB4YTAsIDB4YzQsIDB4ZTQsCisrCTB4ZWYsIDB4ZjQsIDB4ZWEsIDB4ZDcsIDB4NTksIDB4YWMsIDB4MmEsIDB4OWUsCisrCTB4OGMsIDB4ZmEsIDB4MWYsIDB4NDIsIDB4MDgsIDB4ZmUsIDB4NGYsIDB4NzQsCisrCTB4YTAsIDB4MjYsIDB4ZjUsIDB4YjMsIDB4ODQsIDB4ZjYsIDB4NTgsIDB4NWYsCisrCTB4MjYsIDB4NjYsIDB4M2UsIDB4ZDcsIDB4ZTQsIDB4MjIsIDB4OTEsIDB4MTMsCisrCTB4YzgsIDB4YWMsIDB4MjUsIDB4OTYsIDB4MjMsIDB4ZDgsIDB4MDksIDB4ZWEsCisrCTB4NDUsIDB4NzUsIDB4MjMsIDB4YjgsIDB4NWYsIDB4YzIsIDB4OTAsIDB4OGIsCisrCTB4MDksIDB4YzQsIDB4ZmMsIDB4NDcsIDB4NmMsIDB4NmQsIDB4MGEsIDB4ZWYsCisrCTB4NjksIDB4YTQsIDB4MzgsIDB4MTksIDB4Y2YsIDB4N2QsIDB4ZjksIDB4MDksCisrCTB4NzMsIDB4OWIsIDB4NjAsIDB4NWEsIDB4ZjcsIDB4MzcsIDB4YjUsIDB4ZmUsCisrCTB4OWYsIDB4ZTMsIDB4MmIsIDB4NGMsIDB4MGQsIDB4NmUsIDB4MTksIDB4ZjEsCisrCTB4ZDYsIDB4YzAsIDB4NzAsIDB4ZjMsIDB4OWQsIDB4MjIsIDB4M2MsIDB4ZjksCisrCTB4NDksIDB4Y2UsIDB4MzAsIDB4OGUsIDB4NDQsIDB4YjUsIDB4NzYsIDB4MTUsCisrCTB4OGYsIDB4NTIsIDB4ZmQsIDB4YTUsIDB4MDQsIDB4YjgsIDB4NTUsIDB4NmEsCisrCTB4MzYsIDB4NTksIDB4N2MsIDB4YzQsIDB4NDgsIDB4YjgsIDB4ZDcsIDB4YWIsCisrCTB4MDUsIDB4NjYsIDB4ZTksIDB4NWUsIDB4MjEsIDB4NmYsIDB4NmIsIDB4MzYsCisrCTB4MjksIDB4YmIsIDB4ZTksIDB4ZTMsIDB4YTIsIDB4OWEsIDB4YTgsIDB4Y2QsCisrCTB4NTUsIDB4MjUsIDB4MTEsIDB4YmEsIDB4NWEsIDB4NTgsIDB4YTAsIDB4ZGUsCisrCTB4YWUsIDB4MTksIDB4MmEsIDB4NDgsIDB4NWEsIDB4ZmYsIDB4MzYsIDB4Y2QsCisrCTB4NmQsIDB4MTYsIDB4N2EsIDB4NzMsIDB4MzgsIDB4NDYsIDB4ZTUsIDB4NDcsCisrCTB4NTksIDB4YzgsIDB4YTIsIDB4ZjYsIDB4ZTIsIDB4NmMsIDB4ODMsIDB4YzUsCisrCTB4MzYsIDB4MmMsIDB4ODMsIDB4N2QsIDB4YjQsIDB4MDEsIDB4MDUsIDB4NjksCisrCTB4ZTcsIDB4YWYsIDB4NWMsIDB4YzQsIDB4NjQsIDB4ODIsIDB4MTIsIDB4MjEsCisrCTB4ZWYsIDB4ZjcsIDB4ZDEsIDB4N2QsIDB4YjgsIDB4OGQsIDB4OGMsIDB4OTgsCisrCTB4N2MsIDB4NWYsIDB4N2QsIDB4OTIsIDB4ODgsIDB4YjksIDB4OTQsIDB4MDcsCisrCTB4OWMsIDB4ZDgsIDB4ZTksIDB4OWMsIDB4MTcsIDB4MzgsIDB4ZTMsIDB4NTcsCisrCTB4NmMsIDB4ZTAsIDB4ZGMsIDB4YTUsIDB4OTIsIDB4NDIsIDB4YjMsIDB4YmQsCisrCTB4NTAsIDB4YTIsIDB4N2UsIDB4YjUsIDB4YjEsIDB4NTIsIDB4NzIsIDB4MDMsCisrCTB4OTcsIDB4ZDgsIDB4YWEsIDB4OWEsIDB4MWUsIDB4NzUsIDB4NDEsIDB4MTEsCisrCTB4YTMsIDB4NGYsIDB4Y2MsIDB4ZDQsIDB4ZTMsIDB4NzMsIDB4YWQsIDB4OTYsCisrCTB4ZGMsIDB4NDcsIDB4NDEsIDB4OWYsIDB4YjAsIDB4YmUsIDB4NzksIDB4OTEsCisrCTB4ZjUsIDB4YjYsIDB4MTgsIDB4ZmUsIDB4YzIsIDB4ODMsIDB4MTgsIDB4N2QsCisrCTB4NzMsIDB4ZDksIDB4NGYsIDB4ODMsIDB4ODQsIDB4MDMsIDB4YjMsIDB4ZjAsCisrCTB4NzcsIDB4NjYsIDB4M2QsIDB4ODMsIDB4NjMsIDB4MmUsIDB4MmMsIDB4ZjksCisrCTB4ZGQsIDB4YTYsIDB4MWYsIDB4ODksIDB4ODIsIDB4YjgsIDB4MjMsIDB4NDIsCisrCTB4ZWIsIDB4ZTIsIDB4Y2EsIDB4NzAsIDB4ODIsIDB4NjEsIDB4NDEsIDB4MGEsCisrCTB4NmQsIDB4NWYsIDB4NzUsIDB4YzUsIDB4ZTIsIDB4YzQsIDB4OTEsIDB4MTgsCisrCTB4NDQsIDB4MjIsIDB4ZmEsIDB4MzQsIDB4MTAsIDB4ZjUsIDB4MjAsIDB4ZGMsCisrCTB4YjcsIDB4ZGQsIDB4MmEsIDB4MjAsIDB4NzcsIDB4ZjUsIDB4ZjksIDB4Y2UsCisrCTB4ZGIsIDB4YTAsIDB4MGEsIDB4NTIsIDB4MmEsIDB4NGUsIDB4ZGQsIDB4Y2MsCisrCTB4OTcsIDB4ZGYsIDB4MDUsIDB4ZTQsIDB4NWUsIDB4YjcsIDB4YWEsIDB4ZjAsCisrCTB4ZTIsIDB4ODAsIDB4ZmYsIDB4YmEsIDB4MWEsIDB4MGYsIDB4YWMsIDB4ZGYsCisrCTB4MDIsIDB4MzIsIDB4ZTYsIDB4ZjcsIDB4YzcsIDB4MTcsIDB4MTMsIDB4YjcsCisrCTB4ZmMsIDB4OTgsIDB4NDgsIDB4OGMsIDB4MGQsIDB4ODIsIDB4YzksIDB4ODAsCisrCTB4N2EsIDB4ZTIsIDB4MGEsIDB4YzUsIDB4YjQsIDB4ZGUsIDB4N2MsIDB4M2MsCisrCTB4NzksIDB4ODEsIDB4MGUsIDB4MjgsIDB4NjUsIDB4NzksIDB4NjcsIDB4ODIsCisrCTB4NjksIDB4NDQsIDB4NjYsIDB4MDksIDB4ZjcsIDB4MTYsIDB4MWEsIDB4ZjksCisrCTB4N2QsIDB4ODAsIDB4YTEsIDB4NzksIDB4MTQsIDB4YTksIDB4YzgsIDB4MjAsCisrCTB4ZmIsIDB4YTIsIDB4NDYsIDB4YmUsIDB4MDgsIDB4MzUsIDB4MTcsIDB4NTgsCisrCTB4YzEsIDB4MWEsIDB4ZGEsIDB4MmEsIDB4NmIsIDB4MmUsIDB4MWUsIDB4ZTYsCisrCTB4MjcsIDB4NTUsIDB4N2IsIDB4MTksIDB4ZTIsIDB4ZmIsIDB4NjQsIDB4ZmMsCisrCTB4NWUsIDB4MTUsIDB4NTQsIDB4M2MsIDB4ZTcsIDB4YzIsIDB4MTEsIDB4NTAsCisrCTB4MzAsIDB4YjgsIDB4NzIsIDB4MDMsIDB4MGIsIDB4MWEsIDB4OWYsIDB4ODYsCisrCTB4MjcsIDB4MTEsIDB4NWMsIDB4MDYsIDB4MmIsIDB4YmQsIDB4NzUsIDB4MWEsCisrCTB4MGEsIDB4ZGEsIDB4MDEsIDB4ZmEsIDB4NWMsIDB4NGEsIDB4YzEsIDB4ODAsCisrCTB4M2EsIDB4NmUsIDB4MzAsIDB4YzgsIDB4MmMsIDB4ZWIsIDB4NTYsIDB4ZWMsCisrCTB4ODksIDB4ZmEsIDB4MzUsIDB4N2IsIDB4YjIsIDB4ZjAsIDB4OTcsIDB4MDgsCisrCTB4ODYsIDB4NTMsIDB4YmUsIDB4YmQsIDB4NDAsIDB4NDEsIDB4MzgsIDB4MWMsCisrCTB4YjQsIDB4OGIsIDB4NzksIDB4MmUsIDB4MTgsIDB4OTYsIDB4OTQsIDB4ZGUsCisrCTB4ZTgsIDB4Y2EsIDB4ZTUsIDB4OWYsIDB4OTIsIDB4OWYsIDB4MTUsIDB4NWQsCisrCTB4NTYsIDB4NjAsIDB4NWMsIDB4MDksIDB4ZjksIDB4MTYsIDB4ZjQsIDB4MTcsCisrCTB4MGYsIDB4ZjYsIDB4NGMsIDB4ZGEsIDB4ZTYsIDB4NjcsIDB4ODksIDB4OWYsCisrCTB4Y2EsIDB4NmMsIDB4ZTcsIDB4OWIsIDB4MDQsIDB4NjIsIDB4MGUsIDB4MjYsCisrCTB4YTYsIDB4NTIsIDB4YmQsIDB4MjksIDB4ZmYsIDB4YzcsIDB4YTQsIDB4OTYsCisrCTB4ZTYsIDB4NmEsIDB4MDIsIDB4YTUsIDB4MmUsIDB4N2IsIDB4ZmUsIDB4OTcsCisrCTB4NjgsIDB4M2UsIDB4MmUsIDB4NWYsIDB4M2IsIDB4MGYsIDB4MzYsIDB4ZDYsCisrCTB4OTgsIDB4MTksIDB4NTksIDB4NDgsIDB4ZDIsIDB4YzYsIDB4ZTEsIDB4NTUsCisrCTB4MWEsIDB4NmUsIDB4ZDYsIDB4ZWQsIDB4MmMsIDB4YmEsIDB4YzMsIDB4OWUsCisrCTB4NjQsIDB4YzksIDB4OTUsIDB4ODYsIDB4MzUsIDB4NWUsIDB4M2UsIDB4ODgsCisrCTB4NjksIDB4OTksIDB4NGIsIDB4ZWUsIDB4YmUsIDB4OWEsIDB4OTksIDB4YjUsCisrCTB4NmUsIDB4NTgsIDB4YWUsIDB4ZGQsIDB4MjIsIDB4ZGIsIDB4ZGQsIDB4NmIsCisrCTB4ZmMsIDB4YWYsIDB4OTAsIDB4YTMsIDB4M2QsIDB4YTQsIDB4YzEsIDB4MTUsCisrCTB4OTIsIDB4MTgsIDB4OGQsIDB4ZDIsIDB4NGIsIDB4N2IsIDB4MDYsIDB4ZDEsCisrCTB4MzcsIDB4YjUsIDB4ZTIsIDB4N2MsIDB4MmMsIDB4ZjAsIDB4MjUsIDB4ZTQsCisrCTB4OTQsIDB4MmEsIDB4YmQsIDB4ZTMsIDB4ODIsIDB4NzAsIDB4NzgsIDB4YTMsCisrCTB4ODIsIDB4MTAsIDB4NWEsIDB4OTAsIDB4ZDcsIDB4YTQsIDB4ZmEsIDB4YWYsCisrCTB4MWEsIDB4ODgsIDB4NTksIDB4ZGMsIDB4NzQsIDB4MTIsIDB4YjQsIDB4OGUsCisrCTB4ZDcsIDB4MTksIDB4NDYsIDB4ZjQsIDB4ODQsIDB4NjksIDB4OWYsIDB4YmIsCisrCTB4NzAsIDB4YTgsIDB4NGMsIDB4NTIsIDB4ODEsIDB4YTksIDB4ZmYsIDB4NzYsCisrCTB4MWMsIDB4YWUsIDB4ZDgsIDB4MTEsIDB4M2QsIDB4N2YsIDB4N2QsIDB4YzUsCisrCTB4MTIsIDB4NTksIDB4MjgsIDB4MTgsIDB4YzIsIDB4YTIsIDB4YjcsIDB4MWMsCisrCTB4ODgsIDB4ZjgsIDB4ZDYsIDB4MWIsIDB4YTYsIDB4N2QsIDB4OWUsIDB4ZGUsCisrCTB4MjksIDB4ZjgsIDB4ZWQsIDB4ZmYsIDB4ZWIsIDB4OTIsIDB4MjQsIDB4NGYsCisrCTB4MDUsIDB4YWEsIDB4ZDksIDB4NDksIDB4YmEsIDB4ODcsIDB4NTksIDB4NTEsCisrCTB4YzksIDB4MjAsIDB4NWMsIDB4OWIsIDB4NzQsIDB4Y2YsIDB4MDMsIDB4ZDksCisrCTB4MmQsIDB4MzQsIDB4YzcsIDB4NWIsIDB4YTUsIDB4NDAsIDB4YjIsIDB4OTksCisrCTB4ZjUsIDB4Y2IsIDB4YjQsIDB4ZjYsIDB4YjcsIDB4NzIsIDB4NGEsIDB4ZDYsCisrCTB4YmQsIDB4YjAsIDB4ZjMsIDB4OTMsIDB4ZTAsIDB4MWIsIDB4YTgsIDB4MDQsCisrCTB4MWUsIDB4MzUsIDB4ZDQsIDB4ODAsIDB4MjAsIDB4ZjQsIDB4OWMsIDB4MzEsCisrCTB4NmIsIDB4NDUsIDB4YjksIDB4MTUsIDB4YjAsIDB4NWUsIDB4ZGQsIDB4MGEsCisrCTB4MzMsIDB4OWMsIDB4ODMsIDB4Y2QsIDB4NTgsIDB4ODksIDB4NTAsIDB4NTYsCisrCTB4YmIsIDB4ODEsIDB4MDAsIDB4OTEsIDB4MzIsIDB4ZjMsIDB4MWIsIDB4M2UsCisrCTB4Y2YsIDB4NDUsIDB4ZTEsIDB4ZjksIDB4ZTEsIDB4MmMsIDB4MjYsIDB4NzgsCisrCTB4OTMsIDB4OWEsIDB4NjAsIDB4NDYsIDB4YzksIDB4YjUsIDB4NWUsIDB4NmEsCisrCTB4MjgsIDB4OTIsIDB4ODcsIDB4M2YsIDB4NjMsIDB4N2IsIDB4ZGIsIDB4ZjcsCisrCTB4ZDAsIDB4MTMsIDB4OWQsIDB4MzIsIDB4NDAsIDB4NWUsIDB4Y2YsIDB4ZmIsCisrCTB4NzksIDB4NjgsIDB4NDcsIDB4NGMsIDB4ZmQsIDB4MDEsIDB4MTcsIDB4ZTYsCisrCTB4OTcsIDB4OTMsIDB4NzgsIDB4YmIsIDB4YTYsIDB4MjcsIDB4YTMsIDB4ZTgsCisrCTB4MWEsIDB4ZTgsIDB4OTQsIDB4NTUsIDB4N2QsIDB4MDgsIDB4ZTUsIDB4ZGMsCisrCTB4NjYsIDB4YTMsIDB4NjksIDB4YzgsIDB4Y2EsIDB4YzUsIDB4YTEsIDB4ODQsCisrCTB4NTUsIDB4ZGUsIDB4MDgsIDB4OTEsIDB4MTYsIDB4M2EsIDB4MGMsIDB4ODYsCisrCTB4YWIsIDB4MjcsIDB4MmIsIDB4NjQsIDB4MzQsIDB4MDIsIDB4NmMsIDB4NzYsCisrCTB4OGIsIDB4YzYsIDB4YWYsIDB4Y2MsIDB4ZTEsIDB4ZDYsIDB4OGMsIDB4MmEsCisrCTB4MTgsIDB4M2QsIDB4YTYsIDB4MWIsIDB4MzcsIDB4NzUsIDB4NDUsIDB4NzMsCisrCTB4YzIsIDB4NzUsIDB4ZDcsIDB4NTMsIDB4NzgsIDB4M2EsIDB4ZDYsIDB4ZTgsCisrCTB4MjksIDB4ZDIsIDB4NGEsIDB4YTgsIDB4MWUsIDB4ODIsIDB4ZjYsIDB4YjYsCisrCTB4ODEsIDB4ZGUsIDB4MjEsIDB4ZWQsIDB4MmIsIDB4NTYsIDB4YmIsIDB4ZjIsCisrCTB4ZDAsIDB4NTcsIDB4YzEsIDB4N2MsIDB4ZDIsIDB4NmEsIDB4ZDIsIDB4NTYsCisrCTB4ZjUsIDB4MTMsIDB4NWYsIDB4MWMsIDB4NmEsIDB4MGIsIDB4NzQsIDB4ZmIsCisrCTB4ZTksIDB4ZmUsIDB4OWUsIDB4ZWEsIDB4OTUsIDB4YjIsIDB4NDYsIDB4YWIsCisrCTB4MGEsIDB4ZmMsIDB4ZmQsIDB4ZjMsIDB4YmIsIDB4MDQsIDB4MmIsIDB4NzYsCisrCTB4MWIsIDB4YTQsIDB4NzQsIDB4YjAsIDB4YzEsIDB4NzgsIDB4YzMsIDB4NjksCisrCTB4ZTIsIDB4YjAsIDB4MDEsIDB4ZTEsIDB4ZGUsIDB4MzIsIDB4NGMsIDB4OGQsCisrCTB4MWEsIDB4YjMsIDB4MzgsIDB4MDgsIDB4ZDUsIDB4ZmMsIDB4MWYsIDB4ZGMsCisrCTB4MGUsIDB4MmMsIDB4OWMsIDB4YjEsIDB4YTEsIDB4NjMsIDB4MTcsIDB4MjIsCisrCTB4ZjUsIDB4NmMsIDB4OTMsIDB4NzAsIDB4NzQsIDB4MDAsIDB4ZjgsIDB4MzksCisrCTB4MDEsIDB4OTQsIDB4ZDEsIDB4MzIsIDB4MjMsIDB4NTYsIDB4NWQsIDB4YTYsCisrCTB4MDIsIDB4NzYsIDB4NzYsIDB4OTMsIDB4Y2UsIDB4MmYsIDB4MTksIDB4ZTksCisrCTB4MTcsIDB4NTIsIDB4YWUsIDB4NmUsIDB4MmMsIDB4NmQsIDB4NjEsIDB4N2YsCisrCTB4M2IsIDB4YWEsIDB4ZTAsIDB4NTIsIDB4ODUsIDB4YzUsIDB4NjUsIDB4YzEsCisrCTB4YmIsIDB4OGUsIDB4NWIsIDB4MjEsIDB4ZDUsIDB4YzksIDB4NzgsIDB4ODMsCisrCTB4MDcsIDB4OTcsIDB4NGMsIDB4NjIsIDB4NjEsIDB4NDEsIDB4ZDQsIDB4ZmMsCisrCTB4YzksIDB4MzksIDB4ZTMsIDB4OWIsIDB4ZDAsIDB4Y2MsIDB4NzUsIDB4YzQsCisrCTB4OTcsIDB4ZTYsIDB4ZGQsIDB4MmEsIDB4NWYsIDB4YTYsIDB4ZTgsIDB4NTksCisrCTB4NmMsIDB4OTgsIDB4YjksIDB4MDIsIDB4ZTIsIDB4YTIsIDB4ZDYsIDB4NjgsCisrCTB4ZWUsIDB4M2IsIDB4MWQsIDB4ZTMsIDB4NGQsIDB4NWIsIDB4MzAsIDB4ZWYsCisrCTB4MDMsIDB4ZjIsIDB4ZWIsIDB4MTgsIDB4NTcsIDB4MzYsIDB4ZTgsIDB4YTEsCisrCTB4ZjQsIDB4NDcsIDB4ZmIsIDB4Y2IsIDB4OGYsIDB4Y2IsIDB4YzgsIDB4ZjMsCisrCTB4NGYsIDB4NzQsIDB4OWQsIDB4OWQsIDB4YjEsIDB4OGQsIDB4MTQsIDB4NDQsCisrCTB4ZDksIDB4MTksIDB4YjQsIDB4NTQsIDB4NGYsIDB4NzUsIDB4MTksIDB4MDksCisrCTB4YTAsIDB4NzUsIDB4YmMsIDB4M2IsIDB4ODIsIDB4YzYsIDB4M2YsIDB4YjgsCisrCTB4ODMsIDB4MTksIDB4NmUsIDB4ZDYsIDB4MzcsIDB4ZmUsIDB4NmUsIDB4OGEsCisrCTB4NGUsIDB4ZTAsIDB4NGEsIDB4YWIsIDB4N2IsIDB4YzgsIDB4YjQsIDB4MWQsCisrCTB4ZjQsIDB4ZWQsIDB4MjcsIDB4MDMsIDB4NjUsIDB4YTIsIDB4YTEsIDB4YWUsCisrCTB4MTEsIDB4ZTcsIDB4OTgsIDB4NzgsIDB4NDgsIDB4OTEsIDB4ZDIsIDB4ZDIsCisrCTB4ZDQsIDB4MjMsIDB4NzgsIDB4NTAsIDB4YjEsIDB4NWIsIDB4ODUsIDB4MTAsCisrCTB4OGQsIDB4Y2EsIDB4NWYsIDB4MGYsIDB4NzEsIDB4YWUsIDB4NzIsIDB4OWEsCisrCTB4ZjYsIDB4MjUsIDB4MTksIDB4NjAsIDB4MDYsIDB4ZjcsIDB4MTAsIDB4MzQsCisrCTB4MTgsIDB4MGQsIDB4YzksIDB4OWYsIDB4N2IsIDB4MGMsIDB4OWIsIDB4OGYsCisrCTB4OTEsIDB4MWIsIDB4OWYsIDB4Y2QsIDB4MTAsIDB4ZWUsIDB4NzUsIDB4ZjksCisrCTB4OTcsIDB4NjYsIDB4ZmMsIDB4NGQsIDB4MzMsIDB4NmUsIDB4MjgsIDB4MmIsCisrCTB4OTIsIDB4ODUsIDB4NGYsIDB4YWIsIDB4NDMsIDB4OGQsIDB4OGYsIDB4N2QsCisrCTB4ODYsIDB4YTcsIDB4YzcsIDB4ZDgsIDB4ZDMsIDB4MGIsIDB4OGIsIDB4NTcsCisrCTB4YjYsIDB4MWQsIDB4OTUsIDB4MGQsIDB4ZTksIDB4YmMsIDB4ZDksIDB4MDMsCisrCTB4ZDksIDB4MTAsIDB4MTksIDB4YzMsIDB4NDYsIDB4NjMsIDB4NTUsIDB4ODcsCisrCTB4NjEsIDB4NzksIDB4NmMsIDB4OTUsIDB4MGUsIDB4OWMsIDB4ZGQsIDB4Y2EsCisrCTB4YzMsIDB4ZjMsIDB4NjQsIDB4ZjAsIDB4N2QsIDB4NzYsIDB4YjcsIDB4NTMsCisrCTB4NjcsIDB4MmIsIDB4MWUsIDB4NDQsIDB4NTYsIDB4ODEsIDB4ZWEsIDB4OGYsCisrCTB4NWMsIDB4NDIsIDB4MTYsIDB4YjgsIDB4MjgsIDB4ZWIsIDB4MWIsIDB4NjEsCisrCTB4MTAsIDB4MWUsIDB4YmYsIDB4ZWMsIDB4YTgKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDExW10gX19pbml0Y29uc3QgPSB7CisrCTB4NmEsIDB4ZmMsIDB4NGIsIDB4MjUsIDB4ZGYsIDB4YzAsIDB4ZTQsIDB4ZTgsCisrCTB4MTcsIDB4NGQsIDB4NGMsIDB4YzksIDB4N2UsIDB4ZGUsIDB4M2EsIDB4Y2MsCisrCTB4M2MsIDB4YmEsIDB4NmEsIDB4NzcsIDB4NDcsIDB4ZGIsIDB4ZTMsIDB4NzQsCisrCTB4N2EsIDB4NGQsIDB4NWYsIDB4OGQsIDB4MzcsIDB4NTUsIDB4ODAsIDB4NzMsCisrCTB4OTAsIDB4NjYsIDB4NWQsIDB4M2EsIDB4N2QsIDB4NWQsIDB4ODYsIDB4NWUsCisrCTB4OGQsIDB4ZmQsIDB4ODMsIDB4ZmYsIDB4NGUsIDB4NzQsIDB4NmYsIDB4ZjksCisrCTB4ZTYsIDB4NzAsIDB4MTcsIDB4NzAsIDB4M2UsIDB4OTYsIDB4YTcsIDB4N2UsCisrCTB4Y2IsIDB4YWIsIDB4OGYsIDB4NTgsIDB4MjQsIDB4OWIsIDB4MDEsIDB4ZmQsCisrCTB4Y2IsIDB4ZTYsIDB4NGQsIDB4OWIsIDB4ZjAsIDB4ODgsIDB4OTQsIDB4NTcsCisrCTB4NjYsIDB4ZWYsIDB4NzIsIDB4NGMsIDB4NDIsIDB4NmUsIDB4MTYsIDB4MTksCisrCTB4MTUsIDB4ZWEsIDB4NzAsIDB4NWIsIDB4YWMsIDB4MTMsIDB4ZGIsIDB4OWYsCisrCTB4MTgsIDB4ZTIsIDB4M2MsIDB4MjYsIDB4OTcsIDB4YmMsIDB4ZGMsIDB4NDUsCisrCTB4OGMsIDB4NmMsIDB4MjQsIDB4NjksIDB4OWMsIDB4ZjcsIDB4NjUsIDB4MWUsCisrCTB4MTgsIDB4NTksIDB4MzEsIDB4N2MsIDB4ZTQsIDB4NzMsIDB4YmMsIDB4MzksCisrCTB4NjIsIDB4YzYsIDB4NWMsIDB4OWYsIDB4YmYsIDB4ZmEsIDB4OTAsIDB4MDMsCisrCTB4YzksIDB4NzIsIDB4MjYsIDB4YjYsIDB4MWIsIDB4YzIsIDB4YjcsIDB4M2YsCisrCTB4ZjIsIDB4MTMsIDB4NzcsIDB4ZjIsIDB4OGQsIDB4YjksIDB4NDcsIDB4ZDAsCisrCTB4NTMsIDB4ZGQsIDB4YzgsIDB4OTEsIDB4ODMsIDB4OGIsIDB4YjEsIDB4Y2UsCisrCTB4YTMsIDB4ZmUsIDB4Y2QsIDB4ZDksIDB4ZGQsIDB4OTIsIDB4N2IsIDB4ZGIsCisrCTB4YjgsIDB4ZmIsIDB4YzksIDB4MmQsIDB4MDEsIDB4NTksIDB4MzksIDB4NTIsCisrCTB4YWQsIDB4MWIsIDB4ZWMsIDB4Y2YsIDB4ZDcsIDB4NzAsIDB4MTMsIDB4MjEsCisrCTB4ZjUsIDB4NDcsIDB4YWEsIDB4MTgsIDB4MjEsIDB4NWMsIDB4YzksIDB4OWEsCisrCTB4ZDIsIDB4NmIsIDB4MDUsIDB4OWMsIDB4MDEsIDB4YTEsIDB4ZGEsIDB4MzUsCisrCTB4NWQsIDB4YjMsIDB4NzAsIDB4ZTYsIDB4YTksIDB4ODAsIDB4OGIsIDB4OTEsCisrCTB4YjcsIDB4YjMsIDB4NWYsIDB4MjQsIDB4OWEsIDB4YjcsIDB4ZDEsIDB4NmIsCisrCTB4YTEsIDB4MWMsIDB4NTAsIDB4YmEsIDB4NDksIDB4ZTAsIDB4ZWUsIDB4MmUsCisrCTB4NzUsIDB4YWMsIDB4NjksIDB4YzAsIDB4ZWIsIDB4MDMsIDB4ZGQsIDB4MTksCisrCTB4ZTUsIDB4ZjYsIDB4MDYsIDB4ZGQsIDB4YzMsIDB4ZDcsIDB4MmIsIDB4MDcsCisrCTB4MDcsIDB4MzAsIDB4YTcsIDB4MTksIDB4MGMsIDB4YmYsIDB4ZTYsIDB4MTgsCisrCTB4Y2MsIDB4YjEsIDB4MDEsIDB4MTEsIDB4ODUsIDB4NzcsIDB4MWQsIDB4OTYsCisrCTB4YTcsIDB4YTMsIDB4MDAsIDB4ODQsIDB4MDIsIDB4YTIsIDB4ODMsIDB4NjgsCisrCTB4ZGEsIDB4MTcsIDB4MjcsIDB4YzgsIDB4N2YsIDB4MjMsIDB4YjcsIDB4ZjQsCisrCTB4MTMsIDB4ODUsIDB4Y2YsIDB4ZGQsIDB4N2EsIDB4N2QsIDB4MjQsIDB4NTcsCisrCTB4ZmUsIDB4MDUsIDB4OTMsIDB4ZjUsIDB4NzQsIDB4Y2UsIDB4ZWQsIDB4MGMsCisrCTB4MjAsIDB4OTgsIDB4OGQsIDB4OTIsIDB4MzAsIDB4YTEsIDB4MjksIDB4MjMsCisrCTB4MWEsIDB4YTAsIDB4NGYsIDB4NjksIDB4NTYsIDB4NGMsIDB4ZTEsIDB4YzgsCisrCTB4Y2UsIDB4ZjYsIDB4OWEsIDB4MGMsIDB4YTQsIDB4ZmEsIDB4MDQsIDB4ZjYsCisrCTB4NjIsIDB4OTUsIDB4ZjIsIDB4ZmEsIDB4YzcsIDB4NDAsIDB4NjgsIDB4NDAsCisrCTB4OGYsIDB4NDEsIDB4ZGEsIDB4YjQsIDB4MjYsIDB4NmYsIDB4NzAsIDB4YWIsCisrCTB4NDAsIDB4NjEsIDB4YTQsIDB4MGUsIDB4NzUsIDB4ZmIsIDB4ODYsIDB4ZWIsCisrCTB4OWQsIDB4OWEsIDB4MWYsIDB4ZWMsIDB4NzYsIDB4OTksIDB4ZTcsIDB4ZWEsCisrCTB4YWEsIDB4MWUsIDB4MmQsIDB4YjUsIDB4ZDQsIDB4YTYsIDB4MWEsIDB4YjgsCisrCTB4NjEsIDB4MGEsIDB4MWQsIDB4MTYsIDB4NWIsIDB4OTgsIDB4YzIsIDB4MzEsCisrCTB4NDAsIDB4ZTcsIDB4MjMsIDB4MWQsIDB4NjYsIDB4OTksIDB4YzgsIDB4YzAsCisrCTB4ZDcsIDB4Y2UsIDB4ZjMsIDB4NTcsIDB4NDAsIDB4MDQsIDB4M2YsIDB4ZmMsCisrCTB4ZWEsIDB4YjMsIDB4ZmMsIDB4ZDIsIDB4ZDMsIDB4OTksIDB4YTQsIDB4OTQsCisrCTB4NjksIDB4YTAsIDB4ZWYsIDB4ZDEsIDB4ODUsIDB4YjMsIDB4YTYsIDB4YjEsCisrCTB4MjgsIDB4YmYsIDB4OTQsIDB4NjcsIDB4MjIsIDB4YzMsIDB4MzYsIDB4NDYsCisrCTB4ZjgsIDB4ZDIsIDB4MGYsIDB4NWYsIDB4ZjQsIDB4NTksIDB4ODAsIDB4ZTYsCisrCTB4MmQsIDB4NDMsIDB4MDgsIDB4N2QsIDB4MTksIDB4MDksIDB4OTcsIDB4YTcsCisrCTB4NGMsIDB4M2QsIDB4OGQsIDB4YmEsIDB4NjUsIDB4NjIsIDB4YTMsIDB4NzEsCisrCTB4MzMsIDB4MjksIDB4NjIsIDB4ZGIsIDB4YzEsIDB4MzMsIDB4MzQsIDB4MWEsCisrCTB4NjMsIDB4MzMsIDB4MTYsIDB4YjYsIDB4NjQsIDB4N2UsIDB4YWIsIDB4MzMsCisrCTB4ZjAsIDB4ZTYsIDB4MjYsIDB4NjgsIDB4YmEsIDB4MWQsIDB4MmUsIDB4MzgsCisrCTB4MDgsIDB4ZTYsIDB4MDIsIDB4ZDMsIDB4MjUsIDB4MmMsIDB4NDcsIDB4MjMsCisrCTB4NTgsIDB4MzQsIDB4MGYsIDB4OWQsIDB4NjMsIDB4NGYsIDB4NjMsIDB4YmIsCisrCTB4N2YsIDB4M2IsIDB4MzQsIDB4MzgsIDB4YTcsIDB4YjUsIDB4OGQsIDB4NjUsCisrCTB4ZDksIDB4OWYsIDB4NzksIDB4NTUsIDB4M2UsIDB4NGQsIDB4ZTcsIDB4NzMsCisrCTB4ZDgsIDB4ZjYsIDB4OTgsIDB4OTcsIDB4ODQsIDB4NjAsIDB4OWMsIDB4YzgsCisrCTB4YTksIDB4M2MsIDB4ZjYsIDB4ZGMsIDB4MTIsIDB4NWMsIDB4ZTEsIDB4YmIsCisrCTB4MGIsIDB4OGIsIDB4OTgsIDB4OWMsIDB4OWQsIDB4MjYsIDB4N2MsIDB4NGEsCisrCTB4ZTYsIDB4NDYsIDB4MzYsIDB4NTgsIDB4MjEsIDB4NGEsIDB4ZWUsIDB4Y2EsCisrCTB4ZDcsIDB4M2IsIDB4YzIsIDB4NmMsIDB4NDksIDB4MmYsIDB4ZTUsIDB4ZDUsCisrCTB4MDMsIDB4NTksIDB4ODQsIDB4NTMsIDB4Y2IsIDB4ZmUsIDB4OTIsIDB4NzEsCisrCTB4MmUsIDB4N2MsIDB4MjEsIDB4Y2MsIDB4OTksIDB4ODUsIDB4N2YsIDB4YjgsCisrCTB4NzQsIDB4OTAsIDB4MTMsIDB4NDIsIDB4M2YsIDB4ZTAsIDB4NmIsIDB4MWQsCisrCTB4ZjIsIDB4NGQsIDB4NTQsIDB4ZDQsIDB4ZmMsIDB4M2EsIDB4MDUsIDB4ZTYsCisrCTB4NzQsIDB4YWYsIDB4YTYsIDB4YTAsIDB4MmEsIDB4MjAsIDB4MjMsIDB4NWQsCisrCTB4MzQsIDB4NWMsIDB4ZDksIDB4M2UsIDB4NGUsIDB4ZmEsIDB4OTMsIDB4ZTcsCisrCTB4YWEsIDB4ZTksIDB4NmYsIDB4MDgsIDB4NDMsIDB4NjcsIDB4NDEsIDB4YzUsCisrCTB4YWQsIDB4ZmIsIDB4MzEsIDB4OTUsIDB4ODIsIDB4NzMsIDB4MzIsIDB4ZDgsCisrCTB4YTYsIDB4YTMsIDB4ZWQsIDB4MGUsIDB4MmQsIDB4ZjYsIDB4NWYsIDB4ZmQsCisrCTB4ODAsIDB4YTYsIDB4N2EsIDB4ZTAsIDB4ZGYsIDB4NzgsIDB4MTUsIDB4MjksCisrCTB4NzQsIDB4MzMsIDB4ZDAsIDB4OWUsIDB4ODMsIDB4ODYsIDB4NzIsIDB4MjIsCisrCTB4NTcsIDB4MjksIDB4YjksIDB4OWUsIDB4NWQsIDB4ZDMsIDB4MWEsIDB4YjUsCisrCTB4OTYsIDB4NzIsIDB4NDEsIDB4M2QsIDB4ZjEsIDB4NjQsIDB4NDMsIDB4NjcsCisrCTB4ZWUsIDB4YWEsIDB4NWMsIDB4ZDMsIDB4OWEsIDB4OTYsIDB4MTMsIDB4MTEsCisrCTB4NWQsIDB4ZjMsIDB4MGMsIDB4ODcsIDB4ODIsIDB4MWUsIDB4NDEsIDB4OWUsCisrCTB4ZDAsIDB4MjcsIDB4ZDcsIDB4NTQsIDB4M2IsIDB4NjcsIDB4NzMsIDB4MDksCisrCTB4OTEsIDB4ZTksIDB4ZDUsIDB4MzYsIDB4YTcsIDB4YjUsIDB4NTUsIDB4ZTQsCisrCTB4ZjMsIDB4MjEsIDB4NTEsIDB4NDksIDB4MjIsIDB4MDcsIDB4NTUsIDB4NGYsCisrCTB4NDQsIDB4NGIsIDB4ZDIsIDB4MTUsIDB4OTMsIDB4MTcsIDB4MmEsIDB4ZmEsCisrCTB4NGQsIDB4NGEsIDB4NTcsIDB4ZGIsIDB4NGMsIDB4YTYsIDB4ZWIsIDB4ZWMsCisrCTB4NTMsIDB4MjUsIDB4NmMsIDB4MjEsIDB4ZWQsIDB4MDAsIDB4NGMsIDB4M2IsCisrCTB4Y2EsIDB4MTQsIDB4NTcsIDB4YTksIDB4ZDYsIDB4NmEsIDB4Y2QsIDB4OGQsCisrCTB4NWUsIDB4NzQsIDB4YWMsIDB4NzIsIDB4YzEsIDB4OTcsIDB4ZTUsIDB4MWIsCisrCTB4NDUsIDB4NGUsIDB4ZGEsIDB4ZmMsIDB4Y2MsIDB4NDAsIDB4ZTgsIDB4NDgsCisrCTB4ODgsIDB4MGIsIDB4YTMsIDB4ZTMsIDB4OGQsIDB4ODMsIDB4NDIsIDB4YzMsCisrCTB4MjMsIDB4ZmQsIDB4NjgsIDB4YjUsIDB4OGUsIDB4ZjEsIDB4OWQsIDB4NjMsCisrCTB4NzcsIDB4ZTksIDB4YTMsIDB4OGUsIDB4OGMsIDB4MjYsIDB4NmIsIDB4YmQsCisrCTB4NzIsIDB4NzMsIDB4MzUsIDB4MGMsIDB4MDMsIDB4ZjgsIDB4NDMsIDB4NzgsCisrCTB4NTIsIDB4NzEsIDB4MTUsIDB4MWYsIDB4NzEsIDB4NWQsIDB4NmUsIDB4ZWQsCisrCTB4YjksIDB4Y2MsIDB4ODYsIDB4MzAsIDB4ZGIsIDB4MmIsIDB4ZDMsIDB4ODIsCisrCTB4ODgsIDB4MjMsIDB4NzEsIDB4OTAsIDB4NTMsIDB4NWMsIDB4YTksIDB4MmYsCisrCTB4NzYsIDB4MDEsIDB4YjcsIDB4OWEsIDB4ZmUsIDB4NDMsIDB4NTUsIDB4YTMsCisrCTB4MDQsIDB4OWIsIDB4MGUsIDB4ZTQsIDB4NTksIDB4ZGYsIDB4YzksIDB4ZTksCisrCTB4YjEsIDB4ZWEsIDB4MjksIDB4MjgsIDB4M2MsIDB4NWMsIDB4YWUsIDB4NzIsCisrCTB4ODQsIDB4YjYsIDB4YzYsIDB4ZWIsIDB4MGMsIDB4MjcsIDB4MDcsIDB4NzQsCisrCTB4OTAsIDB4MGQsIDB4MzEsIDB4YjAsIDB4MDAsIDB4NzcsIDB4ZTksIDB4NDAsCisrCTB4NzAsIDB4NmYsIDB4NjgsIDB4YTcsIDB4ZmQsIDB4MDYsIDB4ZWMsIDB4NGIsCisrCTB4YzAsIDB4YjcsIDB4YWMsIDB4YmMsIDB4MzMsIDB4YjcsIDB4NmQsIDB4MGEsCisrCTB4YmQsIDB4MTIsIDB4MWIsIDB4NTksIDB4Y2IsIDB4ZGQsIDB4MzIsIDB4ZjUsCisrCTB4MWQsIDB4OTQsIDB4NTcsIDB4NzYsIDB4OWUsIDB4MGMsIDB4MTgsIDB4OTgsCisrCTB4NzEsIDB4ZDcsIDB4MmEsIDB4ZGIsIDB4MGIsIDB4N2IsIDB4YTcsIDB4NzEsCisrCTB4YjcsIDB4NjcsIDB4ODEsIDB4MjMsIDB4OTYsIDB4YWUsIDB4YjksIDB4N2UsCisrCTB4MzIsIDB4NDMsIDB4OTIsIDB4OGEsIDB4MTksIDB4YTAsIDB4YzQsIDB4ZDQsCisrCTB4M2IsIDB4NTcsIDB4ZjksIDB4NGEsIDB4MmMsIDB4ZmIsIDB4NTEsIDB4NDYsCisrCTB4YmIsIDB4Y2IsIDB4NWQsIDB4YjMsIDB4ZWYsIDB4MTMsIDB4OTMsIDB4NmUsCisrCTB4NjgsIDB4NDIsIDB4NTQsIDB4NTcsIDB4ZDMsIDB4NmEsIDB4M2EsIDB4OGYsCisrCTB4OWQsIDB4NjYsIDB4YmYsIDB4YmQsIDB4MzYsIDB4MjMsIDB4ZjUsIDB4OTMsCisrCTB4ODMsIDB4N2IsIDB4OWMsIDB4YzAsIDB4ZGQsIDB4YzUsIDB4NDksIDB4YzAsCisrCTB4NjQsIDB4ZWQsIDB4MDcsIDB4MTIsIDB4YjMsIDB4ZTYsIDB4ZTQsIDB4ZTUsCisrCTB4MzgsIDB4OTUsIDB4MjMsIDB4YjEsIDB4YTAsIDB4M2IsIDB4MWEsIDB4NjEsCisrCTB4ZGEsIDB4MTcsIDB4YWMsIDB4YzMsIDB4NTgsIDB4ZGQsIDB4NzQsIDB4NjQsCisrCTB4MjIsIDB4MTEsIDB4ZTgsIDB4MzIsIDB4MWQsIDB4MTYsIDB4OTMsIDB4ODUsCisrCTB4OTksIDB4YTUsIDB4OWMsIDB4MzQsIDB4NTUsIDB4YjEsIDB4ZTksIDB4MjAsCisrCTB4NzIsIDB4YzksIDB4MjgsIDB4N2IsIDB4NzksIDB4MDAsIDB4YTEsIDB4YTYsCisrCTB4YTMsIDB4MjcsIDB4NDAsIDB4MTgsIDB4OGEsIDB4NTQsIDB4ZTAsIDB4Y2MsCisrCTB4ZTgsIDB4NGUsIDB4OGUsIDB4NDMsIDB4OTYsIDB4ZTcsIDB4M2YsIDB4YzgsCisrCTB4ZTksIDB4YjIsIDB4ZjksIDB4YzksIDB4ZGEsIDB4MDQsIDB4NzEsIDB4NTAsCisrCTB4NDcsIDB4ZTQsIDB4YWEsIDB4Y2UsIDB4YTIsIDB4MzAsIDB4YzgsIDB4ZTQsCisrCTB4YWMsIDB4YzcsIDB4MGQsIDB4MDYsIDB4MmUsIDB4ZTYsIDB4ZTgsIDB4ODAsCisrCTB4MzYsIDB4MjksIDB4OWUsIDB4MDEsIDB4YjgsIDB4YzMsIDB4ZjAsIDB4YTAsCisrCTB4NWQsIDB4N2EsIDB4Y2EsIDB4NGQsIDB4YTAsIDB4NTcsIDB4YmQsIDB4MmEsCisrCTB4NDUsIDB4YTcsIDB4N2YsIDB4OWMsIDB4OTMsIDB4MDcsIDB4OGYsIDB4MzUsCisrCTB4NjcsIDB4OTIsIDB4ZTMsIDB4ZTksIDB4N2YsIDB4YTgsIDB4NjEsIDB4NDMsCisrCTB4OWUsIDB4MjUsIDB4NGYsIDB4MzMsIDB4NzYsIDB4MTMsIDB4NmUsIDB4MTIsCisrCTB4YjksIDB4ZGQsIDB4YTQsIDB4N2MsIDB4MDgsIDB4OWYsIDB4N2MsIDB4ZTcsCisrCTB4MGEsIDB4OGQsIDB4ODQsIDB4MDYsIDB4YTQsIDB4MzMsIDB4MTcsIDB4MzQsCisrCTB4NWUsIDB4MTAsIDB4N2MsIDB4YzAsIDB4YTgsIDB4M2QsIDB4MWYsIDB4NDIsCisrCTB4MjAsIDB4NTEsIDB4NjUsIDB4NWQsIDB4MDksIDB4YzMsIDB4YWEsIDB4YzAsCisrCTB4YzgsIDB4MGQsIDB4ZjAsIDB4NzksIDB4YmMsIDB4MjAsIDB4MWIsIDB4OTUsCisrCTB4ZTcsIDB4MDYsIDB4N2QsIDB4NDcsIDB4MjAsIDB4MDMsIDB4MWEsIDB4NzQsCisrCTB4ZGQsIDB4ZTIsIDB4ZDQsIDB4YWUsIDB4MzgsIDB4NzEsIDB4OWIsIDB4ZjUsCisrCTB4ODAsIDB4ZWMsIDB4MDgsIDB4NGUsIDB4NTYsIDB4YmEsIDB4NzYsIDB4MTIsCisrCTB4MWEsIDB4ZGYsIDB4NDgsIDB4ZjMsIDB4YWUsIDB4YjMsIDB4ZTYsIDB4ZTYsCisrCTB4YmUsIDB4YzAsIDB4OTEsIDB4MmUsIDB4MDEsIDB4YjMsIDB4MDEsIDB4ODYsCisrCTB4YTIsIDB4YjksIDB4NTIsIDB4ZDEsIDB4MjEsIDB4YWUsIDB4ZDQsIDB4OTcsCisrCTB4MWQsIDB4ZWYsIDB4NDEsIDB4MTIsIDB4OTUsIDB4M2QsIDB4NDgsIDB4NDUsCisrCTB4MWMsIDB4NTYsIDB4MzIsIDB4OGYsIDB4YjgsIDB4NDMsIDB4YmIsIDB4MTksCisrCTB4ZjMsIDB4Y2EsIDB4ZTksIDB4ZWIsIDB4NmQsIDB4ODQsIDB4YmUsIDB4ODYsCisrCTB4MDYsIDB4ZTIsIDB4MzYsIDB4YjIsIDB4NjIsIDB4OWQsIDB4ZDMsIDB4NGMsCisrCTB4NDgsIDB4MTgsIDB4NTQsIDB4MTMsIDB4NGUsIDB4Y2YsIDB4ZmQsIDB4YmEsCisrCTB4ODQsIDB4YjksIDB4MzAsIDB4NTMsIDB4Y2YsIDB4ZmIsIDB4YjksIDB4MjksCisrCTB4OGYsIDB4ZGMsIDB4OWYsIDB4ZWYsIDB4NjAsIDB4MGIsIDB4NjQsIDB4ZjYsCisrCTB4OGIsIDB4ZWUsIDB4YTYsIDB4OTEsIDB4YzIsIDB4NDEsIDB4NmMsIDB4ZjYsCisrCTB4ZmEsIDB4NzksIDB4NjcsIDB4NGIsIDB4YzEsIDB4M2YsIDB4YWYsIDB4MDksCisrCTB4ODEsIDB4ZDQsIDB4NWQsIDB4Y2IsIDB4MDksIDB4ZGYsIDB4MzYsIDB4MzEsCisrCTB4YzAsIDB4MTQsIDB4M2MsIDB4N2MsIDB4MGUsIDB4NjUsIDB4OTUsIDB4OTksCisrCTB4NmQsIDB4YTMsIDB4ZjQsIDB4ZDcsIDB4MzgsIDB4ZWUsIDB4MWEsIDB4MmIsCisrCTB4MzcsIDB4ZTIsIDB4YTQsIDB4M2IsIDB4NGIsIDB4ZDAsIDB4NjUsIDB4Y2EsCisrCTB4ZjgsIDB4YzMsIDB4ZTgsIDB4MTUsIDB4MjAsIDB4ZWYsIDB4ZjIsIDB4MDAsCisrCTB4ZmQsIDB4MDEsIDB4MDksIDB4YzUsIDB4YzgsIDB4MTcsIDB4MDQsIDB4OTMsCisrCTB4ZDAsIDB4OTMsIDB4MDMsIDB4NTUsIDB4YzUsIDB4ZmUsIDB4MzIsIDB4YTMsCisrCTB4M2UsIDB4MjgsIDB4MmQsIDB4M2IsIDB4OTMsIDB4OGEsIDB4Y2MsIDB4MDcsCisrCTB4NzIsIDB4ODAsIDB4OGIsIDB4NzQsIDB4MTYsIDB4MjQsIDB4YmIsIDB4ZGEsCisrCTB4OTQsIDB4MzksIDB4MzAsIDB4OGYsIDB4YjEsIDB4Y2QsIDB4NGEsIDB4OTAsCisrCTB4OTIsIDB4N2MsIDB4MTQsIDB4OGYsIDB4OTUsIDB4NGUsIDB4YWMsIDB4OWIsCisrCTB4ZDgsIDB4OGYsIDB4MWEsIDB4ODcsIDB4YTQsIDB4MzIsIDB4MjcsIDB4OGEsCisrCTB4YmEsIDB4ZjcsIDB4NDEsIDB4Y2YsIDB4ODQsIDB4MzcsIDB4MTksIDB4ZTYsCisrCTB4MDYsIDB4ZjUsIDB4MGUsIDB4Y2YsIDB4MzYsIDB4ZjUsIDB4OWUsIDB4NmMsCisrCTB4ZGUsIDB4YmMsIDB4ZmYsIDB4NjQsIDB4N2UsIDB4NGUsIDB4NTksIDB4NTcsCisrCTB4NDgsIDB4ZmUsIDB4MTQsIDB4ZjcsIDB4OWMsIDB4OTMsIDB4NWQsIDB4MTUsCisrCTB4YWQsIDB4Y2MsIDB4MTEsIDB4YjEsIDB4MTcsIDB4MTgsIDB4YjIsIDB4N2UsCisrCTB4Y2MsIDB4YWIsIDB4ZTksIDB4Y2UsIDB4N2QsIDB4NzcsIDB4NWIsIDB4NTEsCisrCTB4MWIsIDB4MWUsIDB4MjAsIDB4YTgsIDB4MzIsIDB4MDYsIDB4MGUsIDB4NzUsCisrCTB4OTMsIDB4YWMsIDB4ZGIsIDB4MzUsIDB4MzcsIDB4MWYsIDB4ZTksIDB4MTksCisrCTB4MWQsIDB4YjQsIDB4NzEsIDB4OTcsIDB4ZDYsIDB4NGUsIDB4MmMsIDB4MDgsCisrCTB4YTUsIDB4MTMsIDB4ZjksIDB4MGUsIDB4N2UsIDB4NzgsIDB4NmUsIDB4MTQsCisrCTB4ZTAsIDB4YTksIDB4YjksIDB4OTYsIDB4NGMsIDB4ODAsIDB4ODIsIDB4YmEsCisrCTB4MTcsIDB4YjMsIDB4OWQsIDB4NjksIDB4YjAsIDB4ODQsIDB4NDYsIDB4ZmYsCisrCTB4ZjksIDB4NTIsIDB4NzksIDB4OTQsIDB4NTgsIDB4M2EsIDB4NjIsIDB4OTAsCisrCTB4MTUsIDB4MzUsIDB4NzEsIDB4MTAsIDB4MzcsIDB4ZWQsIDB4YTEsIDB4OGUsCisrCTB4NTMsIDB4NmUsIDB4ZjQsIDB4MjYsIDB4NTcsIDB4OTMsIDB4MTUsIDB4OTMsCisrCTB4ZjYsIDB4ODEsIDB4MmMsIDB4NWEsIDB4MTAsIDB4ZGEsIDB4OTIsIDB4YWQsCisrCTB4MmYsIDB4ZGIsIDB4MjgsIDB4MzEsIDB4MmQsIDB4NTUsIDB4MDQsIDB4ZDIsCisrCTB4MDYsIDB4MjgsIDB4OGMsIDB4MWUsIDB4ZGMsIDB4ZWEsIDB4NTQsIDB4YWMsCisrCTB4ZmYsIDB4YjcsIDB4NmMsIDB4MzAsIDB4MTUsIDB4ZDQsIDB4YjQsIDB4MGQsCisrCTB4MDAsIDB4OTMsIDB4NTcsIDB4ZGQsIDB4ZDIsIDB4MDcsIDB4MDcsIDB4MDYsCisrCTB4ZDksIDB4NDMsIDB4OWIsIDB4Y2QsIDB4M2EsIDB4ZjQsIDB4N2QsIDB4NGMsCisrCTB4MzYsIDB4NWQsIDB4MjMsIDB4YTIsIDB4Y2MsIDB4NTcsIDB4NDAsIDB4OTEsCisrCTB4ZTksIDB4MmMsIDB4MmYsIDB4MmMsIDB4ZDUsIDB4MzAsIDB4OWIsIDB4MTcsCisrCTB4YjAsIDB4YzksIDB4ZjcsIDB4YTcsIDB4MmYsIDB4ZDEsIDB4OTMsIDB4MjAsCisrCTB4NmIsIDB4YzYsIDB4YzEsIDB4ZTQsIDB4NmYsIDB4Y2IsIDB4ZDEsIDB4ZTcsCisrCTB4MDksIDB4MGYsIDB4OWUsIDB4ZGMsIDB4YWEsIDB4OWYsIDB4MmYsIDB4ZGYsCisrCTB4NTYsIDB4OWYsIDB4ZDQsIDB4MzMsIDB4MDQsIDB4YWYsIDB4ZDMsIDB4NmMsCisrCTB4NTgsIDB4NjEsIDB4ZjAsIDB4MzAsIDB4ZWMsIDB4ZjIsIDB4N2YsIDB4ZjIsCisrCTB4OWMsIDB4ZGYsIDB4MzksIDB4YmIsIDB4NmYsIDB4YTIsIDB4OGMsIDB4N2UsCisrCTB4YzQsIDB4MjIsIDB4NTEsIDB4NzEsIDB4YzAsIDB4NGQsIDB4MTQsIDB4MWEsCisrCTB4YzQsIDB4Y2QsIDB4MDQsIDB4ZDksIDB4ODcsIDB4MDgsIDB4NTAsIDB4MDUsCisrCTB4Y2MsIDB4YWYsIDB4ZjYsIDB4ZjAsIDB4OGYsIDB4OTIsIDB4NTQsIDB4NTgsCisrCTB4YzIsIDB4YzcsIDB4MDksIDB4N2EsIDB4NTksIDB4MDIsIDB4MDUsIDB4ZTgsCisrCTB4YjAsIDB4ODYsIDB4ZDksIDB4YmYsIDB4N2IsIDB4MzUsIDB4NTEsIDB4NGQsCisrCTB4YWYsIDB4MDgsIDB4OTcsIDB4MmMsIDB4NjUsIDB4ZGEsIDB4MmEsIDB4NzEsCisrCTB4M2EsIDB4YTgsIDB4NTEsIDB4Y2MsIDB4ZjIsIDB4NzMsIDB4MjcsIDB4YzMsCisrCTB4ZmQsIDB4NjIsIDB4Y2YsIDB4ZTMsIDB4YjIsIDB4Y2EsIDB4Y2IsIDB4YmUsCisrCTB4MWEsIDB4MGEsIDB4YTEsIDB4MzQsIDB4N2IsIDB4NzcsIDB4YzQsIDB4NjIsCisrCTB4NjgsIDB4NzgsIDB4NWYsIDB4OTQsIDB4MDcsIDB4MDQsIDB4NjUsIDB4MTYsCisrCTB4NGIsIDB4NjEsIDB4Y2IsIDB4ZmYsIDB4NzUsIDB4MjYsIDB4NTAsIDB4NjYsCisrCTB4MWYsIDB4NmUsIDB4OTMsIDB4ZjgsIDB4YzUsIDB4NTEsIDB4ZWIsIDB4YTQsCisrCTB4NGEsIDB4NDgsIDB4NjgsIDB4NmIsIDB4ZTIsIDB4NWUsIDB4NDQsIDB4YjIsCisrCTB4NTAsIDB4MmMsIDB4NmMsIDB4YWUsIDB4NzksIDB4NGUsIDB4NjYsIDB4MzUsCisrCTB4ODEsIDB4NTAsIDB4YWMsIDB4YmMsIDB4M2YsIDB4YjEsIDB4MGMsIDB4ZjMsCisrCTB4MDUsIDB4M2MsIDB4NGEsIDB4YTMsIDB4NmMsIDB4MmEsIDB4NzksIDB4YjQsCisrCTB4YjcsIDB4YWIsIDB4Y2EsIDB4YzcsIDB4OWIsIDB4OGUsIDB4Y2QsIDB4NWYsCisrCTB4MTEsIDB4MDMsIDB4Y2IsIDB4MzAsIDB4YTMsIDB4YWIsIDB4ZGEsIDB4ZmUsCisrCTB4NjQsIDB4YjksIDB4YmIsIDB4ZDgsIDB4NWUsIDB4M2EsIDB4MWEsIDB4NTYsCisrCTB4ZTUsIDB4MDUsIDB4NDgsIDB4OTAsIDB4MWUsIDB4NjEsIDB4NjksIDB4MWIsCisrCTB4MjIsIDB4ZTYsIDB4MWEsIDB4M2MsIDB4NzUsIDB4YWQsIDB4MWYsIDB4MzcsCisrCTB4MjgsIDB4ZGMsIDB4ZTQsIDB4NmQsIDB4YmQsIDB4NDIsIDB4ZGMsIDB4ZDMsCisrCTB4YzgsIDB4YjYsIDB4MWMsIDB4NDgsIDB4ZmUsIDB4OTQsIDB4NzcsIDB4N2YsCisrCTB4YmQsIDB4NjIsIDB4YWMsIDB4YTMsIDB4NDcsIDB4MjcsIDB4Y2YsIDB4NWYsCisrCTB4ZDksIDB4ZGIsIDB4YWYsIDB4ZWMsIDB4ZjcsIDB4NWUsIDB4YzEsIDB4YjAsCisrCTB4OWQsIDB4MDEsIDB4MjYsIDB4OTksIDB4N2UsIDB4OGYsIDB4MDMsIDB4NzAsCisrCTB4YjUsIDB4NDIsIDB4YmUsIDB4NjcsIDB4MjgsIDB4MWIsIDB4N2MsIDB4YmQsCisrCTB4NjEsIDB4MjEsIDB4OTcsIDB4Y2MsIDB4NWMsIDB4ZTEsIDB4OTcsIDB4OGYsCisrCTB4OGQsIDB4ZGUsIDB4MmIsIDB4YWEsIDB4YTcsIDB4NzEsIDB4MWQsIDB4MWUsCisrCTB4MDIsIDB4NzMsIDB4NzAsIDB4NTgsIDB4MzIsIDB4NWIsIDB4MWQsIDB4NjcsCisrCTB4M2QsIDB4ZTAsIDB4NzQsIDB4NGYsIDB4MDMsIDB4ZjIsIDB4NzAsIDB4NTEsCisrCTB4NzksIDB4ZjEsIDB4NjEsIDB4NzAsIDB4MTUsIDB4NzQsIDB4OWQsIDB4MjMsCisrCTB4ODksIDB4ZGUsIDB4YWMsIDB4ZmQsIDB4ZGUsIDB4ZDAsIDB4MWYsIDB4YzMsCisrCTB4ODcsIDB4NDQsIDB4MzUsIDB4NGIsIDB4ZTUsIDB4YjAsIDB4NjAsIDB4YzUsCisrCTB4MjIsIDB4ZTQsIDB4OWUsIDB4Y2EsIDB4ZWIsIDB4ZDUsIDB4M2EsIDB4MDksCisrCTB4NDUsIDB4YTQsIDB4ZGIsIDB4ZmEsIDB4M2YsIDB4ZWIsIDB4MWIsIDB4YzcsCisrCTB4YzgsIDB4MTQsIDB4OTksIDB4NTEsIDB4OTIsIDB4MTAsIDB4ZWQsIDB4ZWQsCisrCTB4MjgsIDB4ZTAsIDB4YTEsIDB4ZjgsIDB4MjYsIDB4Y2YsIDB4Y2QsIDB4Y2IsCisrCTB4NjMsIDB4YTEsIDB4M2IsIDB4ZTMsIDB4ZGYsIDB4N2UsIDB4ZmUsIDB4YTYsCisrCTB4ZjAsIDB4ODEsIDB4OWEsIDB4YmYsIDB4NTUsIDB4ZGUsIDB4NTQsIDB4ZDUsCisrCTB4NTYsIDB4NjAsIDB4OTgsIDB4MTAsIDB4NjgsIDB4ZjQsIDB4MzgsIDB4OTYsCisrCTB4OGUsIDB4NmYsIDB4MWQsIDB4NDQsIDB4N2YsIDB4ZDYsIDB4MmYsIDB4ZmUsCisrCTB4NTUsIDB4ZmIsIDB4MGMsIDB4N2UsIDB4NjcsIDB4ZTIsIDB4NjEsIDB4NDQsCisrCTB4ZWQsIDB4ZjIsIDB4MzUsIDB4MzAsIDB4NWQsIDB4ZTksIDB4YzcsIDB4ZDYsCisrCTB4NmQsIDB4ZTAsIDB4YTAsIDB4ZWQsIDB4ZjMsIDB4ZmMsIDB4ZDgsIDB4M2UsCisrCTB4MGEsIDB4N2IsIDB4Y2QsIDB4YWYsIDB4NjUsIDB4NjgsIDB4MTgsIDB4YzAsCisrCTB4ZWMsIDB4MDQsIDB4MWMsIDB4NzQsIDB4NmQsIDB4ZTIsIDB4NmUsIDB4NzksCisrCTB4ZDQsIDB4MTEsIDB4MmIsIDB4NjIsIDB4ZDUsIDB4MjcsIDB4YWQsIDB4NGYsCisrCTB4MDEsIDB4NTksIDB4NzMsIDB4Y2MsIDB4NmEsIDB4NTMsIDB4ZmIsIDB4MmQsCisrCTB4ZDUsIDB4NGUsIDB4OTksIDB4MjEsIDB4NjUsIDB4NGQsIDB4ZjUsIDB4ODIsCisrCTB4ZjcsIDB4ZDgsIDB4NDIsIDB4Y2UsIDB4NmYsIDB4M2QsIDB4MzYsIDB4NDcsCisrCTB4ZjEsIDB4MDUsIDB4MTYsIDB4ZTgsIDB4MWIsIDB4NmEsIDB4OGYsIDB4OTMsCisrCTB4ZjIsIDB4OGYsIDB4MzcsIDB4NDAsIDB4MTIsIDB4MjgsIDB4YTMsIDB4ZTYsCisrCTB4YjksIDB4MTcsIDB4NGEsIDB4MWYsIDB4YjEsIDB4ZDEsIDB4NjYsIDB4NjksCisrCTB4ODYsIDB4YzQsIDB4ZmMsIDB4OTcsIDB4YWUsIDB4M2YsIDB4OGYsIDB4MWUsCisrCTB4MmIsIDB4ZGYsIDB4Y2QsIDB4ZjksIDB4M2MKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwMTFbXSBfX2luaXRjb25zdCA9IHsKKysJMHhkNiwgMHgzMSwgMHhkYSwgMHg1ZCwgMHg0MiwgMHg1ZSwgMHhkNworK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTAxMVtdIF9faW5pdGNvbnN0ID0geworKwkweGZkLCAweDg3LCAweGQ0LCAweGQ4LCAweDYyLCAweGZkLCAweGVjLCAweGFhCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTAxMVtdIF9faW5pdGNvbnN0ID0geworKwkweDM1LCAweDRlLCAweGI1LCAweDcwLCAweDUwLCAweDQyLCAweDhhLCAweDg1LAorKwkweGYyLCAweGZiLCAweGVkLCAweDdiLCAweGQwLCAweDllLCAweDk3LCAweGNhLAorKwkweGZhLCAweDk4LCAweDY2LCAweDYzLCAweGVlLCAweDM3LCAweGNjLCAweDUyLAorKwkweGZlLCAweGQxLCAweGRmLCAweDk1LCAweDE1LCAweDM0LCAweDI5LCAweDM4CisrfTsKKysKKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDEyW10gX19pbml0Y29uc3QgPSB7CisrCTB4NzQsIDB4YTYsIDB4M2UsIDB4ZTQsIDB4YjEsIDB4Y2IsIDB4YWYsIDB4YjAsCisrCTB4NDAsIDB4ZTUsIDB4MGYsIDB4OWUsIDB4ZjEsIDB4ZjIsIDB4ODksIDB4YjUsCisrCTB4NDIsIDB4MzQsIDB4OGEsIDB4YTEsIDB4MDMsIDB4YjcsIDB4ZTksIDB4NTcsCisrCTB4NDYsIDB4YmUsIDB4MjAsIDB4ZTQsIDB4NmUsIDB4YjAsIDB4ZWIsIDB4ZmYsCisrCTB4ZWEsIDB4MDcsIDB4N2UsIDB4ZWYsIDB4ZTIsIDB4NTUsIDB4OWYsIDB4ZTUsCisrCTB4NzgsIDB4M2EsIDB4YjcsIDB4ODMsIDB4YzIsIDB4MTgsIDB4NDAsIDB4N2IsCisrCTB4ZWIsIDB4Y2QsIDB4ODEsIDB4ZmIsIDB4OTAsIDB4MTIsIDB4OWUsIDB4NDYsCisrCTB4YTksIDB4ZDYsIDB4NGEsIDB4YmEsIDB4YjAsIDB4NjIsIDB4ZGIsIDB4NmIsCisrCTB4OTksIDB4YzQsIDB4ZGIsIDB4NTQsIDB4NGIsIDB4YjgsIDB4YTUsIDB4NzEsCisrCTB4Y2IsIDB4Y2QsIDB4NjMsIDB4MzIsIDB4NTUsIDB4ZmIsIDB4MzEsIDB4ZjAsCisrCTB4MzgsIDB4ZjUsIDB4YmUsIDB4NzgsIDB4ZTQsIDB4NDUsIDB4Y2UsIDB4MWIsCisrCTB4NmEsIDB4NWIsIDB4MGUsIDB4ZjQsIDB4MTYsIDB4ZTQsIDB4YjEsIDB4M2QsCisrCTB4ZjYsIDB4NjMsIDB4N2IsIDB4YTcsIDB4MGMsIDB4ZGUsIDB4NmYsIDB4OGYsCisrCTB4NzQsIDB4ZGYsIDB4ZTAsIDB4MWUsIDB4OWQsIDB4Y2UsIDB4OGYsIDB4MjQsCisrCTB4ZWYsIDB4MjMsIDB4MzUsIDB4MzMsIDB4N2IsIDB4ODMsIDB4MzQsIDB4MjMsCisrCTB4NTgsIDB4NzQsIDB4MTQsIDB4NzcsIDB4MWYsIDB4YzIsIDB4NGYsIDB4NGUsCisrCTB4YzYsIDB4ODksIDB4ZjksIDB4NTIsIDB4MDksIDB4MzcsIDB4NjQsIDB4MTQsCisrCTB4YzQsIDB4MDEsIDB4NmIsIDB4OWQsIDB4NzcsIDB4ZTgsIDB4OTAsIDB4NWQsCisrCTB4YTgsIDB4NGEsIDB4MmEsIDB4ZWYsIDB4NWMsIDB4N2YsIDB4ZWIsIDB4YmIsCisrCTB4YjIsIDB4YzYsIDB4OTMsIDB4OTksIDB4NjYsIDB4ZGMsIDB4N2YsIDB4ZDQsCisrCTB4OWUsIDB4MmEsIDB4Y2EsIDB4OGQsIDB4ZGIsIDB4ZTcsIDB4MjAsIDB4Y2YsCisrCTB4ZTQsIDB4NzMsIDB4YWUsIDB4NDksIDB4N2QsIDB4NjQsIDB4MGYsIDB4MGUsCisrCTB4MjgsIDB4NDYsIDB4YTksIDB4YTgsIDB4MzIsIDB4ZTQsIDB4MGUsIDB4ZjYsCisrCTB4NTEsIDB4NTMsIDB4YjgsIDB4M2MsIDB4YjEsIDB4ZmYsIDB4YTMsIDB4MzMsCisrCTB4NDEsIDB4NzUsIDB4ZmYsIDB4ZjEsIDB4NmYsIDB4ZjEsIDB4ZmIsIDB4YmIsCisrCTB4ODMsIDB4N2YsIDB4MDYsIDB4OWIsIDB4ZTcsIDB4MWIsIDB4MGEsIDB4ZTAsCisrCTB4NWMsIDB4MzMsIDB4NjAsIDB4NWIsIDB4ZGIsIDB4NWIsIDB4ZWQsIDB4ZmUsCisrCTB4YTUsIDB4MTYsIDB4MTksIDB4NzIsIDB4YTMsIDB4NjQsIDB4MjMsIDB4MDAsCisrCTB4MDIsIDB4YzcsIDB4ZjMsIDB4NmEsIDB4ODEsIDB4M2UsIDB4NDQsIDB4MWQsCisrCTB4NzksIDB4MTUsIDB4NWYsIDB4OWEsIDB4ZGUsIDB4ZTIsIDB4ZmQsIDB4MWIsCisrCTB4NzMsIDB4YzEsIDB4YmMsIDB4MjMsIDB4YmEsIDB4MzEsIDB4ZDIsIDB4NTAsCisrCTB4ZDUsIDB4YWQsIDB4N2YsIDB4NzQsIDB4YTcsIDB4YzksIDB4ZjgsIDB4M2UsCisrCTB4MmIsIDB4MjYsIDB4MTAsIDB4ZjYsIDB4MDMsIDB4MzYsIDB4NzQsIDB4ZTQsCisrCTB4MGUsIDB4NmEsIDB4NzIsIDB4YjcsIDB4NzMsIDB4MGEsIDB4NDIsIDB4MjgsCisrCTB4YzIsIDB4YWQsIDB4NWUsIDB4MDMsIDB4YmUsIDB4YjgsIDB4MGIsIDB4YTgsCisrCTB4NWIsIDB4ZDQsIDB4YjgsIDB4YmEsIDB4NTIsIDB4ODksIDB4YjEsIDB4OWIsCisrCTB4YzEsIDB4YzMsIDB4NjUsIDB4ODcsIDB4ZWQsIDB4YTUsIDB4ZjQsIDB4ODYsCisrCTB4ZmQsIDB4NDEsIDB4ODAsIDB4OTEsIDB4MjcsIDB4NTksIDB4NTMsIDB4NjcsCisrCTB4MTUsIDB4NzgsIDB4NTQsIDB4OGIsIDB4MmQsIDB4M2QsIDB4YzcsIDB4ZmYsCisrCTB4MDIsIDB4OTIsIDB4MDcsIDB4NWYsIDB4N2EsIDB4NGIsIDB4NjAsIDB4NTksCisrCTB4M2MsIDB4NmYsIDB4NWMsIDB4ZDgsIDB4ZWMsIDB4OTUsIDB4ZDIsIDB4ZmUsCisrCTB4YTAsIDB4M2IsIDB4ZDgsIDB4M2YsIDB4ZDEsIDB4NjksIDB4YTYsIDB4ZDYsCisrCTB4NDEsIDB4YjIsIDB4ZjQsIDB4NGQsIDB4MTIsIDB4ZjQsIDB4NTgsIDB4M2UsCisrCTB4NjYsIDB4NjQsIDB4ODAsIDB4MzEsIDB4OWIsIDB4YTgsIDB4NGMsIDB4OGIsCisrCTB4MDcsIDB4YjIsIDB4ZWMsIDB4NjYsIDB4OTQsIDB4NjYsIDB4NDcsIDB4NTAsCisrCTB4NTAsIDB4NWYsIDB4MTgsIDB4MGIsIDB4MGUsIDB4ZDYsIDB4YzAsIDB4MzksCisrCTB4MjEsIDB4MTMsIDB4OWUsIDB4MzMsIDB4YmMsIDB4NzksIDB4MzYsIDB4MDIsCisrCTB4OTYsIDB4NzAsIDB4ZjAsIDB4NDgsIDB4NjcsIDB4MmYsIDB4MjYsIDB4ZTksCisrCTB4NmQsIDB4MTAsIDB4YmIsIDB4ZDYsIDB4M2YsIDB4ZDEsIDB4NjQsIDB4N2EsCisrCTB4MmUsIDB4YmUsIDB4MGMsIDB4NjEsIDB4ZjAsIDB4NzUsIDB4NDIsIDB4MzgsCisrCTB4MjMsIDB4YjEsIDB4OWUsIDB4OWYsIDB4N2MsIDB4NjcsIDB4NjYsIDB4ZDksCisrCTB4NTgsIDB4OWEsIDB4ZjEsIDB4YmIsIDB4NDEsIDB4MmEsIDB4OGQsIDB4NjUsCisrCTB4ODQsIDB4OTQsIDB4ZmMsIDB4ZGMsIDB4NmEsIDB4NTAsIDB4NjQsIDB4ZGIsCisrCTB4NTYsIDB4MzMsIDB4NzYsIDB4MDAsIDB4MTAsIDB4ZWQsIDB4YmUsIDB4ZDIsCisrCTB4MTIsIDB4ZjYsIDB4ZjYsIDB4MWIsIDB4YTIsIDB4MTYsIDB4ZGUsIDB4YWUsCisrCTB4MzEsIDB4OTUsIDB4ZGQsIDB4YjEsIDB4MDgsIDB4N2UsIDB4NGUsIDB4ZWUsCisrCTB4ZTcsIDB4ZjksIDB4YTUsIDB4ZmIsIDB4NWIsIDB4NjEsIDB4NDMsIDB4MDAsCisrCTB4NDAsIDB4ZjYsIDB4N2UsIDB4MDIsIDB4MDQsIDB4MzIsIDB4NGUsIDB4MGMsCisrCTB4ZTIsIDB4NjYsIDB4MGQsIDB4ZDcsIDB4MDcsIDB4OTgsIDB4MGUsIDB4ZjgsCisrCTB4NzIsIDB4MzQsIDB4NmQsIDB4OTUsIDB4ODYsIDB4ZDcsIDB4Y2IsIDB4MzEsCisrCTB4NTQsIDB4NDcsIDB4ZDAsIDB4MzgsIDB4MjksIDB4OWMsIDB4NWEsIDB4NjgsCisrCTB4ZDQsIDB4ODcsIDB4NzYsIDB4YzksIDB4ZTcsIDB4N2UsIDB4ZTMsIDB4ZjQsCisrCTB4ODEsIDB4NmQsIDB4MTgsIDB4Y2IsIDB4YzksIDB4MDUsIDB4YWYsIDB4YTAsCisrCTB4ZmIsIDB4NjYsIDB4ZjcsIDB4ZjEsIDB4MWMsIDB4YzYsIDB4MTQsIDB4MTEsCisrCTB4NGYsIDB4MmIsIDB4NzksIDB4NDIsIDB4OGIsIDB4YmMsIDB4YWMsIDB4ZTcsCisrCTB4NmMsIDB4ZmUsIDB4MGYsIDB4NTgsIDB4ZTcsIDB4N2MsIDB4NzgsIDB4MzksCisrCTB4MzAsIDB4YjAsIDB4NjYsIDB4MmMsIDB4OWIsIDB4NmQsIDB4M2EsIDB4ZTEsCisrCTB4Y2YsIDB4YzksIDB4YTQsIDB4MGUsIDB4NmQsIDB4NmQsIDB4OGEsIDB4YTEsCisrCTB4M2EsIDB4ZTcsIDB4MjgsIDB4ZDQsIDB4NzgsIDB4NGMsIDB4YTYsIDB4YTIsCisrCTB4MmEsIDB4YTYsIDB4MDMsIDB4MzAsIDB4ZDcsIDB4YTgsIDB4MjUsIDB4NjYsCisrCTB4ODcsIDB4MmYsIDB4NjksIDB4NWMsIDB4NGUsIDB4ZGQsIDB4YTUsIDB4NDksCisrCTB4NWQsIDB4MzcsIDB4NGEsIDB4NTksIDB4YzQsIDB4YWYsIDB4MWYsIDB4YTIsCisrCTB4ZTQsIDB4ZjgsIDB4YTYsIDB4MTIsIDB4OTcsIDB4ZDUsIDB4NzksIDB4ZjUsCisrCTB4ZTIsIDB4NGEsIDB4MmIsIDB4NWYsIDB4NjEsIDB4ZTQsIDB4OWUsIDB4ZTMsCisrCTB4ZWUsIDB4YjgsIDB4YTcsIDB4NWIsIDB4MmYsIDB4ZjQsIDB4OWUsIDB4NmMsCisrCTB4ZmIsIDB4ZDEsIDB4YzYsIDB4NTYsIDB4NzcsIDB4YmEsIDB4NzUsIDB4YWEsCisrCTB4M2QsIDB4MWEsIDB4YTgsIDB4MGIsIDB4YjMsIDB4NjgsIDB4MjQsIDB4MDAsCisrCTB4MTAsIDB4N2YsIDB4ZmQsIDB4ZDcsIDB4YTEsIDB4OGQsIDB4ODMsIDB4NTQsCisrCTB4NGYsIDB4MWYsIDB4ZDgsIDB4MmEsIDB4YmUsIDB4OGEsIDB4MGMsIDB4ODcsCisrCTB4YWIsIDB4YTIsIDB4ZGUsIDB4YzMsIDB4MzksIDB4YmYsIDB4MDksIDB4MDMsCisrCTB4YTUsIDB4ZjMsIDB4MDUsIDB4MjgsIDB4ZTEsIDB4ZTEsIDB4ZWUsIDB4MzksCisrCTB4NzAsIDB4OWMsIDB4ZDgsIDB4ODEsIDB4MTIsIDB4MWUsIDB4MDIsIDB4NDAsCisrCTB4ZDIsIDB4NmUsIDB4ZjAsIDB4ZWIsIDB4MWIsIDB4M2QsIDB4MjIsIDB4YzYsCisrCTB4ZTUsIDB4ZTMsIDB4YjQsIDB4NWEsIDB4OTgsIDB4YmIsIDB4ZjAsIDB4MjIsCisrCTB4MjgsIDB4OGQsIDB4ZTUsIDB4ZDMsIDB4MTYsIDB4NDgsIDB4MjQsIDB4YTUsCisrCTB4ZTYsIDB4NjYsIDB4MGMsIDB4ZjksIDB4MDgsIDB4ZjksIDB4N2UsIDB4MWUsCisrCTB4ZTEsIDB4MjgsIDB4MjYsIDB4MjIsIDB4YzcsIDB4YzcsIDB4MGEsIDB4MzIsCisrCTB4NDcsIDB4ZmEsIDB4YTMsIDB4YmUsIDB4M2MsIDB4YzQsIDB4YzUsIDB4NTMsCisrCTB4MGEsIDB4ZDUsIDB4OTQsIDB4NGEsIDB4ZDcsIDB4OTMsIDB4ZDgsIDB4NDIsCisrCTB4OTksIDB4YjksIDB4MGEsIDB4ZGIsIDB4NTYsIDB4ZjcsIDB4YjksIDB4MWMsCisrCTB4NTMsIDB4NGYsIDB4ZmEsIDB4ZDMsIDB4NzQsIDB4YWQsIDB4ZDksIDB4NjgsCisrCTB4ZjEsIDB4MWIsIDB4ZGYsIDB4NjEsIDB4YzYsIDB4NWUsIDB4YTgsIDB4NDgsCisrCTB4ZmMsIDB4ZDQsIDB4NGEsIDB4NGMsIDB4M2MsIDB4MzIsIDB4ZjcsIDB4MWMsCisrCTB4OTYsIDB4MjEsIDB4OWIsIDB4ZjksIDB4YTMsIDB4Y2MsIDB4NWEsIDB4Y2UsCisrCTB4ZDUsIDB4ZDcsIDB4MDgsIDB4MjQsIDB4ZjYsIDB4MWMsIDB4ZmQsIDB4ZGQsCisrCTB4MzgsIDB4YzIsIDB4MzIsIDB4ZTksIDB4YjgsIDB4ZTcsIDB4YjYsIDB4ZmEsCisrCTB4OWQsIDB4NDUsIDB4MTMsIDB4MmMsIDB4ODMsIDB4ZmQsIDB4NGEsIDB4NjksCisrCTB4ODIsIDB4Y2QsIDB4ZGMsIDB4YjMsIDB4NzYsIDB4MGMsIDB4OWUsIDB4ZDgsCisrCTB4ZjQsIDB4MWIsIDB4NDUsIDB4MTUsIDB4YjQsIDB4OTcsIDB4ZTcsIDB4NTgsCisrCTB4MzQsIDB4ZTIsIDB4MDMsIDB4MjksIDB4NWEsIDB4YmYsIDB4YjYsIDB4ZTAsCisrCTB4NWQsIDB4MTMsIDB4ZDksIDB4MmIsIDB4YjQsIDB4ODAsIDB4YjIsIDB4NDUsCisrCTB4ODEsIDB4NmEsIDB4MmUsIDB4NmMsIDB4ODksIDB4N2QsIDB4ZWUsIDB4YmIsCisrCTB4NTIsIDB4ZGQsIDB4MWYsIDB4MTgsIDB4ZTcsIDB4MTMsIDB4NmIsIDB4MzMsCisrCTB4MGUsIDB4ZWEsIDB4MzYsIDB4OTIsIDB4NzcsIDB4N2IsIDB4NmQsIDB4OWMsCisrCTB4NWEsIDB4NWYsIDB4NDUsIDB4N2IsIDB4N2IsIDB4MzUsIDB4NjIsIDB4MjMsCisrCTB4ZDEsIDB4YmYsIDB4MGYsIDB4ZDAsIDB4MDgsIDB4MWIsIDB4MmIsIDB4ODAsCisrCTB4NmIsIDB4N2UsIDB4ZjEsIDB4MjEsIDB4NDcsIDB4YjAsIDB4NTcsIDB4ZDEsCisrCTB4OTgsIDB4NzIsIDB4OTAsIDB4MzQsIDB4MWMsIDB4MjAsIDB4MDQsIDB4ZmYsCisrCTB4M2QsIDB4NWMsIDB4ZWUsIDB4MGUsIDB4NTcsIDB4NWYsIDB4NmYsIDB4MjQsCisrCTB4NGUsIDB4M2MsIDB4ZWEsIDB4ZmMsIDB4YTUsIDB4YTksIDB4ODMsIDB4YzksCisrCTB4NjEsIDB4YjQsIDB4NTEsIDB4MjQsIDB4ZjgsIDB4MjcsIDB4NWUsIDB4NDYsCisrCTB4OGMsIDB4YjEsIDB4NTMsIDB4MDIsIDB4OTYsIDB4MzUsIDB4YmEsIDB4YjgsCisrCTB4NGMsIDB4NzEsIDB4ZDMsIDB4MTUsIDB4NTksIDB4MzUsIDB4MjIsIDB4MjAsCisrCTB4YWQsIDB4MDMsIDB4OWYsIDB4NjYsIDB4NDQsIDB4M2IsIDB4OWMsIDB4MzUsCisrCTB4MzcsIDB4MWYsIDB4OWIsIDB4YmIsIDB4ZjMsIDB4ZGIsIDB4MzUsIDB4NjMsCisrCTB4MzAsIDB4NjQsIDB4YWEsIDB4YTIsIDB4MDYsIDB4YTgsIDB4NWQsIDB4YmIsCisrCTB4ZTEsIDB4OWYsIDB4NzAsIDB4ZWMsIDB4ODIsIDB4MTEsIDB4MDYsIDB4MzYsCisrCTB4ZWMsIDB4OGIsIDB4NjksIDB4NjYsIDB4MjQsIDB4NDQsIDB4YzksIDB4NGEsCisrCTB4NTcsIDB4YmIsIDB4OWIsIDB4NzgsIDB4MTMsIDB4Y2UsIDB4OWMsIDB4MGMsCisrCTB4YmEsIDB4OTIsIDB4OTMsIDB4NjMsIDB4YjgsIDB4ZTIsIDB4OTUsIDB4MGYsCisrCTB4MGYsIDB4MTYsIDB4MzksIDB4NTIsIDB4ZmQsIDB4M2EsIDB4NmQsIDB4MDIsCisrCTB4NGIsIDB4ZGYsIDB4MTMsIDB4ZDMsIDB4MmEsIDB4MjIsIDB4YjQsIDB4MDMsCisrCTB4N2MsIDB4NTQsIDB4NDksIDB4OTYsIDB4NjgsIDB4NTQsIDB4MTAsIDB4ZmEsCisrCTB4ZWYsIDB4YWEsIDB4NmMsIDB4ZTgsIDB4MjIsIDB4ZGMsIDB4NzEsIDB4MTYsCisrCTB4MTMsIDB4MWEsIDB4ZjYsIDB4MjgsIDB4ZTUsIDB4NmQsIDB4NzcsIDB4M2QsCisrCTB4Y2QsIDB4MzAsIDB4NjMsIDB4YjEsIDB4NzAsIDB4NTIsIDB4YTEsIDB4YzUsCisrCTB4OTQsIDB4NWYsIDB4Y2YsIDB4ZTgsIDB4YjgsIDB4MjYsIDB4OTgsIDB4ZjcsCisrCTB4MDYsIDB4YTAsIDB4MGEsIDB4NzAsIDB4ZmEsIDB4MDMsIDB4ODAsIDB4YWMsCisrCTB4YzEsIDB4ZWMsIDB4ZDYsIDB4NGMsIDB4NTQsIDB4ZDcsIDB4ZmUsIDB4NDcsCisrCTB4YjYsIDB4ODgsIDB4NGEsIDB4ZjcsIDB4NzEsIDB4MjQsIDB4ZWUsIDB4ZjMsCisrCTB4ZDIsIDB4YzIsIDB4NGEsIDB4N2YsIDB4ZmUsIDB4NjEsIDB4YzcsIDB4MzUsCisrCTB4YzksIDB4MzcsIDB4NjcsIDB4Y2IsIDB4MjQsIDB4MzUsIDB4ZGEsIDB4N2UsCisrCTB4Y2EsIDB4NWYsIDB4ZjMsIDB4OGQsIDB4ZDQsIDB4MTMsIDB4OGUsIDB4ZDYsCisrCTB4Y2IsIDB4NGQsIDB4NTMsIDB4OGYsIDB4NTMsIDB4MWYsIDB4YzAsIDB4NzQsCisrCTB4ZjcsIDB4NTMsIDB4YjksIDB4NWUsIDB4MjMsIDB4MzcsIDB4YmEsIDB4NmUsCisrCTB4ZTMsIDB4OWQsIDB4MDcsIDB4NTUsIDB4MjUsIDB4N2IsIDB4ZTYsIDB4MmEsCisrCTB4NjQsIDB4ZDEsIDB4MzIsIDB4ZGQsIDB4NTQsIDB4MWIsIDB4NGIsIDB4YzAsCisrCTB4ZTEsIDB4ZDcsIDB4NjksIDB4NTgsIDB4ZjgsIDB4OTMsIDB4MjksIDB4YzQsCisrCTB4ZGQsIDB4MjMsIDB4MmYsIDB4YTUsIDB4ZmMsIDB4OWQsIDB4N2UsIDB4ZjgsCisrCTB4ZDQsIDB4OTAsIDB4Y2QsIDB4ODIsIDB4NTUsIDB4ZGMsIDB4MTYsIDB4MTYsCisrCTB4OWYsIDB4MDcsIDB4NTIsIDB4OWIsIDB4OWQsIDB4MjUsIDB4ZWQsIDB4MzIsCisrCTB4YzUsIDB4N2IsIDB4ZGYsIDB4ZjYsIDB4ODMsIDB4NDYsIDB4M2QsIDB4NjUsCisrCTB4YjcsIDB4ZWYsIDB4ODcsIDB4N2EsIDB4MTIsIDB4NjksIDB4OGYsIDB4MDYsCisrCTB4N2MsIDB4NTEsIDB4MTUsIDB4NGEsIDB4MDgsIDB4ZTgsIDB4YWMsIDB4OWEsCisrCTB4MGMsIDB4MjQsIDB4YTcsIDB4MjcsIDB4ZDgsIDB4NDYsIDB4MmYsIDB4ZTcsCisrCTB4MDEsIDB4MGUsIDB4MWMsIDB4YzYsIDB4OTEsIDB4YjAsIDB4NmUsIDB4ODUsCisrCTB4NjUsIDB4ZjAsIDB4MjksIDB4MGQsIDB4MmUsIDB4NmIsIDB4M2IsIDB4ZmIsCisrCTB4NGIsIDB4ZGYsIDB4ZTQsIDB4ODAsIDB4OTMsIDB4MDMsIDB4NjYsIDB4NDYsCisrCTB4M2UsIDB4OGEsIDB4NmUsIDB4ZjMsIDB4NWUsIDB4NGQsIDB4NjIsIDB4MGUsCisrCTB4NDksIDB4MDUsIDB4YWYsIDB4ZDQsIDB4ZjgsIDB4MjEsIDB4MjAsIDB4NjEsCisrCTB4MWQsIDB4MzksIDB4MTcsIDB4ZjQsIDB4NjEsIDB4NDcsIDB4OTUsIDB4ZmIsCisrCTB4MTUsIDB4MmUsIDB4YjMsIDB4NGYsIDB4ZDAsIDB4NWQsIDB4ZjUsIDB4N2QsCisrCTB4NDAsIDB4ZGEsIDB4OTAsIDB4M2MsIDB4NmIsIDB4Y2IsIDB4MTcsIDB4MDAsCisrCTB4MTMsIDB4M2IsIDB4NjQsIDB4MzQsIDB4MWIsIDB4ZjAsIDB4ZjIsIDB4ZTUsCisrCTB4M2IsIDB4YjIsIDB4YzcsIDB4ZDMsIDB4NWYsIDB4M2EsIDB4NDQsIDB4YTYsCisrCTB4OWIsIDB4YjcsIDB4NzgsIDB4MGUsIDB4NDIsIDB4NWQsIDB4NGMsIDB4YzEsCisrCTB4ZTksIDB4ZDIsIDB4Y2IsIDB4YjcsIDB4NzgsIDB4ZDEsIDB4ZmUsIDB4OWEsCisrCTB4YjUsIDB4MDcsIDB4ZTksIDB4ZTAsIDB4YmUsIDB4ZTIsIDB4OGEsIDB4YTcsCisrCTB4MDEsIDB4ODMsIDB4MDAsIDB4OGMsIDB4NWMsIDB4MDgsIDB4ZTYsIDB4NjMsCisrCTB4MTIsIDB4OTIsIDB4YjcsIDB4YjcsIDB4YTYsIDB4MTksIDB4N2QsIDB4MzgsCisrCTB4MTMsIDB4MzgsIDB4OTIsIDB4ODcsIDB4MjQsIDB4ZjksIDB4NDgsIDB4YjMsCisrCTB4NWUsIDB4ODcsIDB4NmEsIDB4NDAsIDB4MzksIDB4NWMsIDB4M2YsIDB4ZWQsCisrCTB4OGYsIDB4ZWUsIDB4ZGIsIDB4MTUsIDB4ODIsIDB4MDYsIDB4ZGEsIDB4NDksCisrCTB4MjEsIDB4MmIsIDB4YjUsIDB4YmYsIDB4MzIsIDB4N2MsIDB4OWYsIDB4NDIsCisrCTB4MjgsIDB4NjMsIDB4Y2YsIDB4YWYsIDB4MWUsIDB4ZjgsIDB4YzYsIDB4YTAsCisrCTB4ZDEsIDB4MDIsIDB4NDMsIDB4NTcsIDB4NjIsIDB4ZWMsIDB4OWIsIDB4MGYsCisrCTB4MDEsIDB4OWUsIDB4NzEsIDB4ZDgsIDB4ODcsIDB4OWQsIDB4MDEsIDB4YzEsCisrCTB4NTgsIDB4NzcsIDB4ZDksIDB4YWYsIDB4YjEsIDB4MTAsIDB4N2UsIDB4ZGQsCisrCTB4YTYsIDB4NTAsIDB4OTYsIDB4ZTUsIDB4ZjAsIDB4NzIsIDB4MDAsIDB4NmQsCisrCTB4NGIsIDB4ZjgsIDB4MmEsIDB4OGYsIDB4MTksIDB4ZjMsIDB4MjIsIDB4ODgsCisrCTB4MTEsIDB4NGEsIDB4OGIsIDB4N2MsIDB4ZmQsIDB4YjcsIDB4ZWQsIDB4ZTEsCisrCTB4ZjYsIDB4NDAsIDB4MzksIDB4ZTAsIDB4ZTksIDB4ZjYsIDB4M2QsIDB4MjUsCisrCTB4ZTYsIDB4NzQsIDB4M2MsIDB4NTgsIDB4NTcsIDB4N2YsIDB4ZTEsIDB4MjIsCisrCTB4OTYsIDB4NDcsIDB4MzEsIDB4OTEsIDB4YmEsIDB4NzAsIDB4ODUsIDB4MjgsCisrCTB4NmIsIDB4OWYsIDB4NmUsIDB4MjUsIDB4YWMsIDB4MjMsIDB4NjYsIDB4MmYsCisrCTB4MjksIDB4ODgsIDB4MjgsIDB4Y2UsIDB4OGMsIDB4NWMsIDB4ODgsIDB4NTMsCisrCTB4ZDEsIDB4M2IsIDB4Y2MsIDB4NmEsIDB4NTEsIDB4YjIsIDB4ZTEsIDB4MjgsCisrCTB4M2YsIDB4OTEsIDB4YjQsIDB4MGQsIDB4MDAsIDB4M2EsIDB4ZTMsIDB4ZjgsCisrCTB4YzMsIDB4OGYsIDB4ZDcsIDB4OTYsIDB4NjIsIDB4MGUsIDB4MmUsIDB4ZmMsCisrCTB4YzgsIDB4NmMsIDB4NzcsIDB4YTYsIDB4MWQsIDB4MjIsIDB4YzEsIDB4YjgsCisrCTB4ZTYsIDB4NjEsIDB4ZDcsIDB4NjcsIDB4MzYsIDB4MTMsIDB4N2IsIDB4YmIsCisrCTB4OWIsIDB4NTksIDB4MDksIDB4YTYsIDB4ZGYsIDB4ZjcsIDB4NmIsIDB4YTMsCisrCTB4NDAsIDB4MWEsIDB4ZjUsIDB4NGYsIDB4YjQsIDB4ZGEsIDB4ZDMsIDB4ZjMsCisrCTB4ODEsIDB4OTMsIDB4YzYsIDB4MTgsIDB4ZDksIDB4MjYsIDB4ZWUsIDB4YWMsCisrCTB4ZjAsIDB4YWEsIDB4ZGYsIDB4YzUsIDB4OWMsIDB4Y2EsIDB4YzIsIDB4YTIsCisrCTB4Y2MsIDB4N2IsIDB4NWMsIDB4MjQsIDB4YjAsIDB4YmMsIDB4ZDAsIDB4NmEsCisrCTB4NGQsIDB4ODksIDB4MDksIDB4YjgsIDB4MDcsIDB4ZmUsIDB4ODcsIDB4YWQsCisrCTB4MGEsIDB4ZWEsIDB4YjgsIDB4NDIsIDB4ZjksIDB4NWUsIDB4YjMsIDB4M2UsCisrCTB4MzYsIDB4NGMsIDB4YWYsIDB4NzUsIDB4OWUsIDB4MWMsIDB4ZWIsIDB4YmQsCisrCTB4YmMsIDB4YmIsIDB4ODAsIDB4NDAsIDB4YTcsIDB4M2EsIDB4MzAsIDB4YmYsCisrCTB4YTgsIDB4NDQsIDB4ZjQsIDB4ZWIsIDB4MzgsIDB4YWQsIDB4MjksIDB4YmEsCisrCTB4MjMsIDB4ZWQsIDB4NDEsIDB4MGMsIDB4ZWEsIDB4ZDIsIDB4YmIsIDB4NDEsCisrCTB4MTgsIDB4ZDYsIDB4YjksIDB4YmEsIDB4NjUsIDB4MmIsIDB4YTMsIDB4OTEsCisrCTB4NmQsIDB4MWYsIDB4YTksIDB4ZjQsIDB4ZDEsIDB4MjUsIDB4OGQsIDB4NGQsCisrCTB4MzgsIDB4ZmYsIDB4NjQsIDB4YTAsIDB4ZWMsIDB4ZGUsIDB4YTYsIDB4YjYsCisrCTB4NzksIDB4YWIsIDB4OGUsIDB4MzMsIDB4NmMsIDB4NDcsIDB4ZGUsIDB4YWYsCisrCTB4OTQsIDB4YTQsIDB4YTUsIDB4ODYsIDB4NzcsIDB4NTUsIDB4MDksIDB4OTIsCisrCTB4ODEsIDB4MzEsIDB4NzYsIDB4YzcsIDB4MzQsIDB4MjIsIDB4ODksIDB4OGUsCisrCTB4M2QsIDB4MjYsIDB4MjYsIDB4ZDcsIDB4ZmMsIDB4MWUsIDB4MTYsIDB4NzIsCisrCTB4MTMsIDB4MzMsIDB4NjMsIDB4ZDUsIDB4MjIsIDB4YmUsIDB4YjgsIDB4MDQsCisrCTB4MzQsIDB4ODQsIDB4NDEsIDB4YmIsIDB4ODAsIDB4ZDAsIDB4OWYsIDB4NDYsCisrCTB4NDgsIDB4MDcsIDB4YTcsIDB4ZmMsIDB4MmIsIDB4M2EsIDB4NzUsIDB4NTUsCisrCTB4OGMsIDB4YzcsIDB4NmEsIDB4YmQsIDB4N2UsIDB4NDYsIDB4MDgsIDB4ODQsCisrCTB4MGYsIDB4ZDUsIDB4NzQsIDB4YzAsIDB4ODIsIDB4OGUsIDB4YWEsIDB4NjEsCisrCTB4MDUsIDB4MDEsIDB4YjIsIDB4NDcsIDB4NmUsIDB4MjAsIDB4NmEsIDB4MmQsCisrCTB4NTgsIDB4NzAsIDB4NDgsIDB4MzIsIDB4YTcsIDB4MzcsIDB4ZDIsIDB4YjgsCisrCTB4ODIsIDB4MWEsIDB4NTEsIDB4YjksIDB4NjEsIDB4ZGQsIDB4ZmQsIDB4OWQsCisrCTB4NmIsIDB4MGUsIDB4MTgsIDB4OTcsIDB4ZjgsIDB4NDUsIDB4NWYsIDB4ODcsCisrCTB4MTAsIDB4Y2YsIDB4MzQsIDB4NzIsIDB4NDUsIDB4MjYsIDB4NDksIDB4NzAsCisrCTB4ZTcsIDB4YTMsIDB4NzgsIDB4ZTAsIDB4NTIsIDB4ODksIDB4ODQsIDB4OTQsCisrCTB4ODMsIDB4ODIsIDB4YzIsIDB4NjksIDB4OGYsIDB4ZTMsIDB4ZTEsIDB4M2YsCisrCTB4NjAsIDB4NzQsIDB4ODgsIDB4YzQsIDB4ZjcsIDB4NzUsIDB4MmMsIDB4ZmIsCisrCTB4YmQsIDB4YjYsIDB4YzQsIDB4N2UsIDB4MTAsIDB4MGEsIDB4NmMsIDB4OTAsCisrCTB4MDQsIDB4OWUsIDB4YzMsIDB4M2YsIDB4NTksIDB4N2MsIDB4Y2UsIDB4MzEsCisrCTB4MTgsIDB4NjAsIDB4NTcsIDB4NzMsIDB4NDYsIDB4OTQsIDB4N2QsIDB4MDYsCisrCTB4YTAsIDB4NmQsIDB4NDQsIDB4ZWMsIDB4YTIsIDB4MGEsIDB4OWUsIDB4MDUsCisrCTB4MTUsIDB4ZWYsIDB4Y2EsIDB4NWMsIDB4YmYsIDB4MDAsIDB4ZWIsIDB4ZjcsCisrCTB4M2QsIDB4MzIsIDB4ZDQsIDB4YTUsIDB4ZWYsIDB4NDksIDB4ODksIDB4NWUsCisrCTB4NDYsIDB4YjAsIDB4YTYsIDB4NjMsIDB4NWIsIDB4OGEsIDB4NzMsIDB4YWUsCisrCTB4NmYsIDB4ZDUsIDB4OWQsIDB4ZjgsIDB4NGYsIDB4NDAsIDB4YjUsIDB4YjIsCisrCTB4NmUsIDB4ZDMsIDB4YjYsIDB4MDEsIDB4YTksIDB4MjYsIDB4YTIsIDB4MjEsCisrCTB4Y2YsIDB4MzMsIDB4N2EsIDB4M2EsIDB4YTQsIDB4MjMsIDB4MTMsIDB4YjAsCisrCTB4NjksIDB4NmEsIDB4ZWUsIDB4Y2UsIDB4ZDgsIDB4OWQsIDB4MDEsIDB4MWQsCisrCTB4NTAsIDB4YzEsIDB4MzAsIDB4NmMsIDB4YjEsIDB4Y2QsIDB4YTAsIDB4ZjAsCisrCTB4ZjAsIDB4YTIsIDB4NjQsIDB4NmYsIDB4YmIsIDB4YmYsIDB4NWUsIDB4ZTYsCisrCTB4YWIsIDB4ODcsIDB4YjQsIDB4MGYsIDB4NGYsIDB4MTUsIDB4YWYsIDB4YjUsCisrCTB4MjUsIDB4YTEsIDB4YjIsIDB4ZDAsIDB4ODAsIDB4MmMsIDB4ZmIsIDB4ZjksCisrCTB4ZmUsIDB4ZDIsIDB4MzMsIDB4YmIsIDB4NzYsIDB4ZmUsIDB4N2MsIDB4YTgsCisrCTB4NjYsIDB4ZjcsIDB4ZTcsIDB4ODUsIDB4OWYsIDB4MWYsIDB4ODUsIDB4NTcsCisrCTB4ODgsIDB4ZTEsIDB4ZTksIDB4NjMsIDB4ZTQsIDB4ZDgsIDB4MWMsIDB4YTEsCisrCTB4ZmIsIDB4ZGEsIDB4NDQsIDB4MDUsIDB4MmUsIDB4MWQsIDB4M2EsIDB4MWMsCisrCTB4ZmYsIDB4YzgsIDB4M2IsIDB4YzAsIDB4ZmUsIDB4ZGEsIDB4MjIsIDB4MGIsCisrCTB4NDMsIDB4ZDYsIDB4ODgsIDB4MzksIDB4NGMsIDB4NGEsIDB4YTYsIDB4NjksCisrCTB4MTgsIDB4OTMsIDB4NDIsIDB4NGUsIDB4YjUsIDB4Y2MsIDB4NjYsIDB4MGQsCisrCTB4MDksIDB4ZjgsIDB4MWUsIDB4N2MsIDB4ZDMsIDB4M2MsIDB4OTksIDB4MGQsCisrCTB4NTAsIDB4MWQsIDB4NjIsIDB4ZTksIDB4NTcsIDB4MDYsIDB4YmYsIDB4MTksCisrCTB4ODgsIDB4ZGQsIDB4YWQsIDB4N2IsIDB4NGYsIDB4ZjksIDB4YzcsIDB4ODIsCisrCTB4NmQsIDB4OGQsIDB4YzgsIDB4YzQsIDB4YzUsIDB4NzgsIDB4MTcsIDB4MjAsCisrCTB4MTUsIDB4YzUsIDB4NTIsIDB4NDEsIDB4Y2YsIDB4NWIsIDB4ZDYsIDB4N2YsCisrCTB4OTQsIDB4MDIsIDB4NDEsIDB4ZTAsIDB4NDAsIDB4MjIsIDB4MDMsIDB4NWUsCisrCTB4ZDEsIDB4NTMsIDB4ZDQsIDB4ODYsIDB4ZDMsIDB4MmMsIDB4OWYsIDB4MGYsCisrCTB4OTYsIDB4ZTMsIDB4NmIsIDB4OWEsIDB4NzYsIDB4MzIsIDB4MDYsIDB4NDcsCisrCTB4NGIsIDB4MTEsIDB4YjMsIDB4ZGQsIDB4MDMsIDB4NjUsIDB4YmQsIDB4OWIsCisrCTB4MDEsIDB4ZGEsIDB4OWMsIDB4YjksIDB4N2UsIDB4M2YsIDB4NmEsIDB4YzQsCisrCTB4N2IsIDB4ZWEsIDB4ZDQsIDB4M2MsIDB4YjksIDB4ZmIsIDB4NWMsIDB4NmIsCisrCTB4NjQsIDB4MzMsIDB4NTIsIDB4YmEsIDB4NjQsIDB4NzgsIDB4OGYsIDB4YTQsCisrCTB4YWYsIDB4N2EsIDB4NjEsIDB4OGQsIDB4YmMsIDB4YzUsIDB4NzMsIDB4ZTksCisrCTB4NmIsIDB4NTgsIDB4OTcsIDB4NGIsIDB4YmYsIDB4NjMsIDB4MjIsIDB4ZDMsCisrCTB4MzcsIDB4MDIsIDB4NTQsIDB4YzUsIDB4YjksIDB4MTYsIDB4NGEsIDB4ZjAsCisrCTB4MTksIDB4ZDgsIDB4OTQsIDB4NTcsIDB4YjgsIDB4OGEsIDB4YjMsIDB4MTYsCisrCTB4M2IsIDB4ZDAsIDB4ODQsIDB4OGUsIDB4NjcsIDB4YTYsIDB4YTMsIDB4N2QsCisrCTB4NzgsIDB4ZWMsIDB4MDAKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDEyW10gX19pbml0Y29uc3QgPSB7CisrCTB4NTIsIDB4MzQsIDB4YjMsIDB4NjUsIDB4M2IsIDB4YjcsIDB4ZTUsIDB4ZDMsCisrCTB4YWIsIDB4NDksIDB4MTcsIDB4NjAsIDB4ZDIsIDB4NTIsIDB4NTYsIDB4ZGYsCisrCTB4ZGYsIDB4MzQsIDB4NTYsIDB4ODIsIDB4ZTIsIDB4YmUsIDB4ZTUsIDB4ZTEsCisrCTB4MjgsIDB4ZDEsIDB4NGUsIDB4NWYsIDB4NGYsIDB4MDEsIDB4N2QsIDB4M2YsCisrCTB4OTksIDB4NmIsIDB4MzAsIDB4NmUsIDB4MWEsIDB4N2MsIDB4NGMsIDB4OGUsCisrCTB4NjIsIDB4ODEsIDB4YWUsIDB4ODYsIDB4M2YsIDB4NmIsIDB4ZDAsIDB4YjUsCisrCTB4YTksIDB4Y2YsIDB4NTAsIDB4ZjEsIDB4MDIsIDB4MTIsIDB4YTAsIDB4MGIsCisrCTB4MjQsIDB4ZTksIDB4ZTYsIDB4NzIsIDB4ODksIDB4MmMsIDB4NTIsIDB4MWIsCisrCTB4MzQsIDB4MzgsIDB4ZjgsIDB4NzUsIDB4NWYsIDB4YTAsIDB4NzQsIDB4ZTIsCisrCTB4OTksIDB4ZGQsIDB4YTYsIDB4NGIsIDB4MTQsIDB4NTAsIDB4NGUsIDB4ZjEsCisrCTB4YmUsIDB4ZDYsIDB4OWUsIDB4ZGIsIDB4YjIsIDB4MjQsIDB4MjcsIDB4NzQsCisrCTB4MTIsIDB4NGEsIDB4NzgsIDB4NzgsIDB4MTcsIDB4YTUsIDB4NTgsIDB4OGUsCisrCTB4MmYsIDB4ZjksIDB4ZjQsIDB4OGQsIDB4ZWUsIDB4MDMsIDB4ODgsIDB4YWUsCisrCTB4YjgsIDB4MjksIDB4YTEsIDB4MmYsIDB4NGIsIDB4ZWUsIDB4OTIsIDB4YmQsCisrCTB4ODcsIDB4YjMsIDB4Y2UsIDB4MzQsIDB4MjEsIDB4NTcsIDB4NDYsIDB4MDQsCisrCTB4NDksIDB4MGMsIDB4ODAsIDB4ZjIsIDB4MDEsIDB4MTMsIDB4YTEsIDB4NTUsCisrCTB4YjMsIDB4ZmYsIDB4NDQsIDB4MzAsIDB4M2MsIDB4MWMsIDB4ZDAsIDB4ZWYsCisrCTB4YmMsIDB4MTgsIDB4NzQsIDB4MjYsIDB4YWQsIDB4NDEsIDB4NWIsIDB4NWIsCisrCTB4M2UsIDB4OWEsIDB4N2EsIDB4NDYsIDB4NGYsIDB4MTYsIDB4ZDYsIDB4NzQsCisrCTB4NWEsIDB4YjcsIDB4M2EsIDB4MjgsIDB4MzEsIDB4ZDgsIDB4YWUsIDB4MjYsCisrCTB4YWMsIDB4NTAsIDB4NTMsIDB4ODYsIDB4ZjIsIDB4NTYsIDB4ZDcsIDB4M2YsCisrCTB4MjksIDB4YmMsIDB4NDUsIDB4NjgsIDB4OGUsIDB4Y2IsIDB4OTgsIDB4NjQsCisrCTB4ZGQsIDB4YzksIDB4YmEsIDB4YjgsIDB4NGIsIDB4N2IsIDB4ODIsIDB4ZGQsCisrCTB4MTQsIDB4YTcsIDB4Y2IsIDB4NzEsIDB4NzIsIDB4MDAsIDB4NWMsIDB4YWQsCisrCTB4N2IsIDB4NmEsIDB4ODksIDB4YTQsIDB4M2QsIDB4YmYsIDB4YjUsIDB4NGIsCisrCTB4M2UsIDB4N2MsIDB4NWEsIDB4Y2YsIDB4YjgsIDB4YTEsIDB4YzUsIDB4NmUsCisrCTB4YzgsIDB4YjYsIDB4MzEsIDB4NTcsIDB4N2IsIDB4ZGYsIDB4YTUsIDB4N2UsCisrCTB4YjEsIDB4ZDYsIDB4NDIsIDB4MmEsIDB4MzEsIDB4MzYsIDB4ZDEsIDB4ZDAsCisrCTB4M2YsIDB4N2EsIDB4ZTUsIDB4OTQsIDB4ZDYsIDB4MzYsIDB4YTAsIDB4NmYsCisrCTB4YjcsIDB4NDAsIDB4N2QsIDB4MzcsIDB4YzYsIDB4NTUsIDB4N2MsIDB4NTAsCisrCTB4NDAsIDB4NmQsIDB4MjksIDB4ODksIDB4ZTMsIDB4NWEsIDB4YWUsIDB4OTcsCisrCTB4ZTcsIDB4NDQsIDB4NDksIDB4NmUsIDB4YmQsIDB4ODEsIDB4M2QsIDB4MDMsCisrCTB4OTMsIDB4MDYsIDB4MTIsIDB4MDYsIDB4ZTIsIDB4NDEsIDB4MTIsIDB4NGEsCisrCTB4ZjEsIDB4NmEsIDB4YTQsIDB4NTgsIDB4YTIsIDB4ZmIsIDB4ZDIsIDB4MTUsCisrCTB4YmEsIDB4YzksIDB4NzksIDB4YzksIDB4Y2UsIDB4NWUsIDB4MTMsIDB4YmIsCisrCTB4ZjEsIDB4MDksIDB4MDQsIDB4Y2MsIDB4ZmQsIDB4ZTgsIDB4NTEsIDB4MzQsCisrCTB4NmEsIDB4ZTgsIDB4NjEsIDB4ODgsIDB4ZGEsIDB4ZWQsIDB4MDEsIDB4NDcsCisrCTB4ODQsIDB4ZjUsIDB4NzMsIDB4MjUsIDB4ZjksIDB4MWMsIDB4NDIsIDB4ODYsCisrCTB4MDcsIDB4ZjMsIDB4NWIsIDB4MWEsIDB4MDEsIDB4YjMsIDB4ZWIsIDB4MjQsCisrCTB4MzIsIDB4OGQsIDB4ZjYsIDB4ZWQsIDB4N2MsIDB4NGIsIDB4ZWIsIDB4M2MsCisrCTB4MzYsIDB4NDIsIDB4MjgsIDB4ZGYsIDB4ZGYsIDB4YjYsIDB4YmUsIDB4ZDksCisrCTB4OGMsIDB4NTIsIDB4ZDMsIDB4MmIsIDB4MDgsIDB4OTAsIDB4OGMsIDB4ZTcsCisrCTB4OTgsIDB4MzEsIDB4ZTIsIDB4MzIsIDB4OGUsIDB4ZmMsIDB4MTEsIDB4NDgsCisrCTB4MDAsIDB4YTgsIDB4NmEsIDB4NDIsIDB4NGEsIDB4MDIsIDB4YzYsIDB4NGIsCisrCTB4MDksIDB4ZjEsIDB4ZTMsIDB4NDksIDB4ZjMsIDB4NDUsIDB4MWYsIDB4MGUsCisrCTB4YmMsIDB4NTYsIDB4ZTIsIDB4ZTQsIDB4ZGYsIDB4ZmIsIDB4ZWIsIDB4NjEsCisrCTB4ZmEsIDB4MjQsIDB4YzEsIDB4NjMsIDB4NzUsIDB4YmIsIDB4NDcsIDB4NzUsCisrCTB4YWYsIDB4ZTEsIDB4NTMsIDB4MTYsIDB4OTYsIDB4MjEsIDB4ODUsIDB4MjYsCisrCTB4MTEsIDB4YjMsIDB4NzYsIDB4ZTMsIDB4MjMsIDB4YTEsIDB4NmIsIDB4NzQsCisrCTB4MzcsIDB4ZDAsIDB4ZGUsIDB4MDYsIDB4OTAsIDB4NzEsIDB4NWQsIDB4NDMsCisrCTB4ODgsIDB4OWIsIDB4MDAsIDB4NTQsIDB4YTYsIDB4NzUsIDB4MmYsIDB4YTEsCisrCTB4YzIsIDB4MGIsIDB4NzMsIDB4MjAsIDB4MWQsIDB4YjYsIDB4MjEsIDB4NzksCisrCTB4NTcsIDB4M2YsIDB4ZmEsIDB4MDksIDB4YmUsIDB4OGEsIDB4MzMsIDB4YzMsCisrCTB4NTIsIDB4ZjAsIDB4MWQsIDB4ODIsIDB4MzEsIDB4ZDEsIDB4NTUsIDB4YjUsCisrCTB4NmMsIDB4OTksIDB4MjUsIDB4Y2YsIDB4NWMsIDB4MzIsIDB4Y2UsIDB4ZTksCisrCTB4MGQsIDB4ZmEsIDB4NjksIDB4MmMsIDB4ZDUsIDB4MGQsIDB4YzUsIDB4NmQsCisrCTB4ODYsIDB4ZDAsIDB4MGMsIDB4M2IsIDB4MDYsIDB4NTAsIDB4NzksIDB4ZTgsCisrCTB4YzMsIDB4YWUsIDB4MDQsIDB4ZTYsIDB4Y2QsIDB4NTEsIDB4ZTQsIDB4MjYsCisrCTB4OWIsIDB4NGYsIDB4N2UsIDB4YTYsIDB4MGYsIDB4YWIsIDB4ZDgsIDB4ZTUsCisrCTB4ZGUsIDB4YTksIDB4MDAsIDB4OTUsIDB4YmUsIDB4YTMsIDB4OWQsIDB4NWQsCisrCTB4YjIsIDB4MDksIDB4NzAsIDB4MTgsIDB4MWMsIDB4ZjAsIDB4YWMsIDB4MjksCisrCTB4MjMsIDB4MDIsIDB4MjksIDB4MjgsIDB4ZDIsIDB4NzQsIDB4MzUsIDB4NTcsCisrCTB4NjIsIDB4MGYsIDB4MjQsIDB4ZWEsIDB4NWUsIDB4MzMsIDB4YzIsIDB4OTIsCisrCTB4ZjMsIDB4NzgsIDB4NGQsIDB4MzAsIDB4MWUsIDB4YTEsIDB4OTksIDB4YTksCisrCTB4ODIsIDB4YjAsIDB4NDIsIDB4MzEsIDB4OGQsIDB4YWQsIDB4OGEsIDB4YmMsCisrCTB4ZmMsIDB4ZDQsIDB4NTcsIDB4NDcsIDB4M2UsIDB4YjQsIDB4NTAsIDB4ZGQsCisrCTB4NmUsIDB4MmMsIDB4ODAsIDB4NGQsIDB4MjIsIDB4ZjEsIDB4ZmIsIDB4NTcsCisrCTB4YzQsIDB4ZGQsIDB4MTcsIDB4ZTEsIDB4OGEsIDB4MzYsIDB4NGEsIDB4YjMsCisrCTB4MzcsIDB4Y2EsIDB4YzksIDB4NGUsIDB4YWIsIDB4ZDUsIDB4NjksIDB4YzQsCisrCTB4ZjQsIDB4YmMsIDB4MGIsIDB4M2IsIDB4NDQsIDB4NGIsIDB4MjksIDB4OWMsCisrCTB4ZWUsIDB4ZDQsIDB4MzUsIDB4MjIsIDB4MjEsIDB4YjAsIDB4MWYsIDB4MjcsCisrCTB4NjQsIDB4YTgsIDB4NTEsIDB4MWIsIDB4ZjAsIDB4OWYsIDB4MTksIDB4NWMsCisrCTB4ZmIsIDB4NWEsIDB4NjQsIDB4NzQsIDB4NzAsIDB4NDUsIDB4MDksIDB4ZjUsCisrCTB4NjQsIDB4ZmUsIDB4MWEsIDB4MmQsIDB4YzksIDB4MTQsIDB4MDQsIDB4MTQsCisrCTB4Y2YsIDB4ZDUsIDB4N2QsIDB4NjAsIDB4YWYsIDB4OTQsIDB4MzksIDB4OTQsCisrCTB4ZTIsIDB4N2QsIDB4NzksIDB4ODIsIDB4ZDAsIDB4NjUsIDB4M2IsIDB4NmIsCisrCTB4OWMsIDB4MTksIDB4ODQsIDB4YjQsIDB4NmQsIDB4YjMsIDB4MGMsIDB4OTksCisrCTB4YzAsIDB4NTYsIDB4YTgsIDB4YmQsIDB4NzMsIDB4Y2UsIDB4MDUsIDB4ODQsCisrCTB4M2UsIDB4MzAsIDB4YWEsIDB4YzQsIDB4OWIsIDB4MWIsIDB4MDQsIDB4MmEsCisrCTB4OWYsIDB4ZDcsIDB4NDMsIDB4MmIsIDB4MjMsIDB4ZGYsIDB4YmYsIDB4YWEsCisrCTB4ZDUsIDB4YzIsIDB4NDMsIDB4MmQsIDB4NzAsIDB4YWIsIDB4ZGMsIDB4NzUsCisrCTB4YWQsIDB4YWMsIDB4ZjcsIDB4YzAsIDB4YmUsIDB4NjcsIDB4YjIsIDB4NzQsCisrCTB4ZWQsIDB4NjcsIDB4MTAsIDB4NGEsIDB4OTIsIDB4NjAsIDB4YzEsIDB4NDAsCisrCTB4NTAsIDB4MTksIDB4OGEsIDB4OGEsIDB4OGMsIDB4MDksIDB4MGUsIDB4NzIsCisrCTB4ZTEsIDB4NzMsIDB4NWUsIDB4ZTgsIDB4NDEsIDB4ODUsIDB4NjMsIDB4OWYsCisrCTB4M2YsIDB4ZDcsIDB4N2QsIDB4YzQsIDB4ZmIsIDB4MjIsIDB4NWQsIDB4OTIsCisrCTB4NmMsIDB4YjMsIDB4MWUsIDB4ZTIsIDB4NTAsIDB4MmYsIDB4ODIsIDB4YTgsCisrCTB4MjgsIDB4YzAsIDB4YjUsIDB4ZDcsIDB4NWYsIDB4NjgsIDB4MGQsIDB4MmMsCisrCTB4MmQsIDB4YWYsIDB4N2UsIDB4ZmEsIDB4MmUsIDB4MDgsIDB4MGYsIDB4MWYsCisrCTB4NzAsIDB4OWYsIDB4ZTksIDB4MTksIDB4NzIsIDB4NTUsIDB4ZjgsIDB4ZmIsCisrCTB4NTEsIDB4ZDIsIDB4MzMsIDB4NWQsIDB4YTAsIDB4ZDMsIDB4MmIsIDB4MGEsCisrCTB4NmMsIDB4YmMsIDB4NGUsIDB4Y2YsIDB4MzYsIDB4NGQsIDB4ZGMsIDB4M2IsCisrCTB4ZTksIDB4M2UsIDB4ODEsIDB4N2MsIDB4NjEsIDB4ZGIsIDB4MjAsIDB4MmQsCisrCTB4M2EsIDB4YzMsIDB4YjMsIDB4MGMsIDB4MWUsIDB4MDAsIDB4YjksIDB4N2MsCisrCTB4ZjUsIDB4Y2EsIDB4MTAsIDB4NWYsIDB4M2EsIDB4NzEsIDB4YjMsIDB4ZTQsCisrCTB4MjAsIDB4ZGIsIDB4MGMsIDB4MmEsIDB4OTgsIDB4NjMsIDB4NDUsIDB4MDAsCisrCTB4NTgsIDB4ZjYsIDB4NjgsIDB4ZTQsIDB4MGIsIDB4ZGEsIDB4MTMsIDB4M2IsCisrCTB4NjAsIDB4NWMsIDB4NzYsIDB4ZGIsIDB4YjksIDB4OTcsIDB4NzEsIDB4ZTQsCisrCTB4ZDksIDB4YjcsIDB4ZGIsIDB4YmQsIDB4NjgsIDB4YzcsIDB4ODQsIDB4ODQsCisrCTB4YWEsIDB4N2MsIDB4NjgsIDB4NjIsIDB4NWUsIDB4MTYsIDB4ZmMsIDB4YmEsCisrCTB4NzIsIDB4YWEsIDB4OWEsIDB4YTksIDB4ZWIsIDB4N2MsIDB4NzUsIDB4NDcsCisrCTB4OTcsIDB4N2UsIDB4YWQsIDB4ZTIsIDB4ZDksIDB4OTEsIDB4ZTgsIDB4ZTQsCisrCTB4YTUsIDB4MzEsIDB4ZDcsIDB4MDEsIDB4OGUsIDB4YTIsIDB4MTEsIDB4ODgsCisrCTB4OTUsIDB4YjksIDB4ZjIsIDB4OWIsIDB4ZDMsIDB4N2YsIDB4MWIsIDB4ODEsCisrCTB4MjIsIDB4ZjcsIDB4OTgsIDB4NjAsIDB4MGEsIDB4NjQsIDB4YTYsIDB4YzEsCisrCTB4ZjYsIDB4NDksIDB4YzcsIDB4ZTMsIDB4MDcsIDB4NGQsIDB4OTQsIDB4N2EsCisrCTB4Y2YsIDB4NmUsIDB4NjgsIDB4MGMsIDB4MWIsIDB4M2YsIDB4NmUsIDB4MmUsCisrCTB4ZWUsIDB4OTIsIDB4ZmEsIDB4NTIsIDB4YjMsIDB4NTksIDB4ZjgsIDB4ZjEsCisrCTB4OGYsIDB4NmEsIDB4NjYsIDB4YTMsIDB4ODIsIDB4NzYsIDB4NGEsIDB4MDcsCisrCTB4MWEsIDB4YzcsIDB4ZGQsIDB4ZjUsIDB4ZGEsIDB4OWMsIDB4M2MsIDB4MjQsCisrCTB4YmYsIDB4ZmQsIDB4NDIsIDB4YTEsIDB4MTAsIDB4NjQsIDB4NmEsIDB4MGYsCisrCTB4ODksIDB4ZWUsIDB4MzYsIDB4YTUsIDB4Y2UsIDB4OTksIDB4NDgsIDB4NmEsCisrCTB4ZjAsIDB4OWYsIDB4OWUsIDB4NjksIDB4YTQsIDB4NDAsIDB4MjAsIDB4ZTksCisrCTB4MTYsIDB4MTUsIDB4ZjcsIDB4ZGIsIDB4NzUsIDB4MDIsIDB4Y2IsIDB4ZTksCisrCTB4NzMsIDB4OGIsIDB4M2IsIDB4NDksIDB4MmYsIDB4ZjAsIDB4YWYsIDB4NTEsCisrCTB4MDYsIDB4NWMsIDB4ZGYsIDB4MjcsIDB4MjcsIDB4NDksIDB4NmEsIDB4ZDEsCisrCTB4Y2MsIDB4YzcsIDB4YjUsIDB4NjMsIDB4YjUsIDB4ZmMsIDB4YjgsIDB4NWMsCisrCTB4ODcsIDB4N2YsIDB4ODQsIDB4YjQsIDB4Y2MsIDB4MTQsIDB4YTksIDB4NTMsCisrCTB4ZGEsIDB4YTQsIDB4NTYsIDB4ZjgsIDB4YjYsIDB4MWIsIDB4Y2MsIDB4NDAsCisrCTB4MjcsIDB4NTIsIDB4MDYsIDB4NWEsIDB4MTMsIDB4ODEsIDB4ZDcsIDB4M2EsCisrCTB4ZDQsIDB4M2IsIDB4ZmIsIDB4NDksIDB4NjUsIDB4MzEsIDB4MzMsIDB4YjIsCisrCTB4ZmEsIDB4Y2QsIDB4YWQsIDB4NTgsIDB4NGUsIDB4MmIsIDB4YWUsIDB4ZDIsCisrCTB4MjAsIDB4ZmIsIDB4MWEsIDB4NDgsIDB4YjQsIDB4M2YsIDB4OWEsIDB4ZDgsCisrCTB4N2EsIDB4MzUsIDB4NGEsIDB4YzgsIDB4ZWUsIDB4ODgsIDB4NWUsIDB4MDcsCisrCTB4NjYsIDB4NTQsIDB4YjksIDB4ZWMsIDB4OWYsIDB4YTMsIDB4ZTMsIDB4YjksCisrCTB4MzcsIDB4YWEsIDB4NDksIDB4NzYsIDB4MzEsIDB4ZGEsIDB4NzQsIDB4MmQsCisrCTB4M2MsIDB4YTQsIDB4NjUsIDB4MTAsIDB4MzIsIDB4MzgsIDB4ZjAsIDB4ZGUsCisrCTB4ZDMsIDB4OTksIDB4MTcsIDB4YWEsIDB4NzEsIDB4YWEsIDB4OGYsIDB4MGYsCisrCTB4OGMsIDB4YWYsIDB4YTIsIDB4ZjgsIDB4NWQsIDB4NjQsIDB4YmEsIDB4MWQsCisrCTB4YTMsIDB4ZWYsIDB4OTYsIDB4NzMsIDB4ZTgsIDB4YTEsIDB4MDIsIDB4OGQsCisrCTB4MGMsIDB4NmQsIDB4YjgsIDB4MDYsIDB4OTAsIDB4YjgsIDB4MDgsIDB4NTYsCisrCTB4MmMsIDB4YTcsIDB4MDYsIDB4YzksIDB4YzIsIDB4MzgsIDB4ZGIsIDB4N2MsCisrCTB4NjMsIDB4YjEsIDB4NTcsIDB4OGUsIDB4ZWEsIDB4N2MsIDB4NzksIDB4ZjMsCisrCTB4NDksIDB4MWQsIDB4ZmUsIDB4OWYsIDB4ZjMsIDB4NmUsIDB4YjEsIDB4MWQsCisrCTB4YmEsIDB4MTksIDB4ODAsIDB4MWEsIDB4MGEsIDB4ZDMsIDB4YjAsIDB4MjYsCisrCTB4MjEsIDB4NDAsIDB4YjEsIDB4N2MsIDB4ZjksIDB4NGQsIDB4OGQsIDB4MTAsCisrCTB4YzEsIDB4N2UsIDB4ZjQsIDB4ZjYsIDB4M2MsIDB4YTgsIDB4ZmQsIDB4N2MsCisrCTB4YTMsIDB4OTIsIDB4YjIsIDB4MGYsIDB4YWEsIDB4Y2MsIDB4YTYsIDB4MTEsCisrCTB4ZmUsIDB4MDQsIDB4ZTMsIDB4ZDEsIDB4N2EsIDB4MzIsIDB4ODksIDB4ZGYsCisrCTB4MGQsIDB4YzQsIDB4OGYsIDB4NzksIDB4NmIsIDB4Y2EsIDB4MTYsIDB4N2MsCisrCTB4NmUsIDB4ZjksIDB4YWQsIDB4MGYsIDB4ZjYsIDB4ZmUsIDB4MjcsIDB4ZGIsCisrCTB4YzQsIDB4MTMsIDB4NzAsIDB4ZjEsIDB4NjIsIDB4MWEsIDB4NGYsIDB4NzksCisrCTB4NDAsIDB4YzksIDB4OWIsIDB4OGIsIDB4MjEsIDB4ZWEsIDB4ODQsIDB4ZmEsCisrCTB4ZjUsIDB4ZjEsIDB4ODksIDB4Y2UsIDB4YjcsIDB4NTUsIDB4MGEsIDB4ODAsCisrCTB4MzksIDB4MmYsIDB4NTUsIDB4MzYsIDB4MTYsIDB4OWMsIDB4N2IsIDB4MDgsCisrCTB4YmQsIDB4ODcsIDB4MGQsIDB4YTUsIDB4MzIsIDB4ZjEsIDB4NTIsIDB4N2MsCisrCTB4ZTgsIDB4NTUsIDB4NjAsIDB4NWIsIDB4ZDcsIDB4NjksIDB4ZTQsIDB4ZmMsCisrCTB4ZmEsIDB4MTIsIDB4ODUsIDB4OTYsIDB4ZWEsIDB4NTAsIDB4MjgsIDB4YWIsCisrCTB4OGEsIDB4ZjcsIDB4YmIsIDB4MGUsIDB4NTMsIDB4NzQsIDB4Y2EsIDB4YTYsCisrCTB4MjcsIDB4MDksIDB4YzIsIDB4YjUsIDB4ZGUsIDB4MTgsIDB4MTQsIDB4ZDksCisrCTB4ZWEsIDB4ZTUsIDB4MjksIDB4MWMsIDB4NDAsIDB4NTYsIDB4Y2YsIDB4ZDcsCisrCTB4YWUsIDB4MDUsIDB4M2YsIDB4NjUsIDB4YWYsIDB4MDUsIDB4NzMsIDB4ZTIsCisrCTB4MzUsIDB4OTYsIDB4MjcsIDB4MDcsIDB4MTQsIDB4YzAsIDB4YWQsIDB4MzMsCisrCTB4ZjEsIDB4ZGMsIDB4NDQsIDB4N2EsIDB4ODksIDB4MTcsIDB4NzcsIDB4ZDIsCisrCTB4OWMsIDB4NTgsIDB4NjAsIDB4ZjAsIDB4M2YsIDB4N2IsIDB4MmQsIDB4MmUsCisrCTB4NTcsIDB4OTUsIDB4NTQsIDB4ODcsIDB4ZWQsIDB4ZjIsIDB4YzcsIDB4NGMsCisrCTB4ZjAsIDB4YWUsIDB4NTYsIDB4MjksIDB4MTksIDB4N2QsIDB4NjYsIDB4NGIsCisrCTB4OWIsIDB4ODMsIDB4ODQsIDB4NDIsIDB4M2IsIDB4MDEsIDB4MjUsIDB4NjYsCisrCTB4OGUsIDB4MDIsIDB4ZGUsIDB4YjksIDB4ODMsIDB4NTQsIDB4MTksIDB4ZjYsCisrCTB4OWYsIDB4NzksIDB4MGQsIDB4NjcsIDB4YzUsIDB4MWQsIDB4N2EsIDB4NDQsCisrCTB4MDIsIDB4OTgsIDB4YTcsIDB4MTYsIDB4MWMsIDB4MjksIDB4MGQsIDB4NzQsCisrCTB4ZmYsIDB4ODUsIDB4NDAsIDB4MDYsIDB4ZWYsIDB4MmMsIDB4YTksIDB4YzYsCisrCTB4ZjUsIDB4NTMsIDB4MDcsIDB4MDYsIDB4YWUsIDB4ZTQsIDB4ZmEsIDB4NWYsCisrCTB4ZDgsIDB4MzksIDB4NGQsIDB4ZjEsIDB4OWIsIDB4NmIsIDB4ZDksIDB4MjQsCisrCTB4ODQsIDB4ZmUsIDB4MDMsIDB4NGMsIDB4YjIsIDB4M2YsIDB4ZGYsIDB4YTEsCisrCTB4MDUsIDB4OWUsIDB4NTAsIDB4MTQsIDB4NWEsIDB4ZDksIDB4MWEsIDB4YTIsCisrCTB4YTcsIDB4ZmEsIDB4ZmEsIDB4MTcsIDB4ZjcsIDB4NzgsIDB4ZDYsIDB4YjUsCisrCTB4OTIsIDB4NjEsIDB4OTEsIDB4YWMsIDB4MzYsIDB4ZmEsIDB4NTYsIDB4MGQsCisrCTB4MzgsIDB4MzIsIDB4MTgsIDB4ODUsIDB4MDgsIDB4NTgsIDB4MzcsIDB4ZjAsCisrCTB4NGIsIDB4ZGIsIDB4NTksIDB4ZTcsIDB4YTQsIDB4MzQsIDB4YzAsIDB4MWIsCisrCTB4MDEsIDB4YWYsIDB4MmQsIDB4ZGUsIDB4YTEsIDB4YWEsIDB4NWQsIDB4ZDMsCisrCTB4ZWMsIDB4ZTEsIDB4ZDQsIDB4ZjcsIDB4ZTYsIDB4NTQsIDB4NjgsIDB4ZjAsCisrCTB4NTEsIDB4OTcsIDB4YTcsIDB4ODksIDB4ZWEsIDB4MjQsIDB4YWQsIDB4ZDMsCisrCTB4NmUsIDB4NDcsIDB4OTMsIDB4OGIsIDB4NGIsIDB4YjQsIDB4ZjcsIDB4MWMsCisrCTB4NDIsIDB4MDYsIDB4NjcsIDB4ZTgsIDB4OTksIDB4ZjYsIDB4ZjUsIDB4N2IsCisrCTB4ODUsIDB4YjUsIDB4NjUsIDB4YjUsIDB4YjUsIDB4ZDIsIDB4MzcsIDB4ZjUsCisrCTB4ZjMsIDB4MDIsIDB4YTYsIDB4NGQsIDB4MTEsIDB4YTcsIDB4ZGMsIDB4NTEsCisrCTB4MDksIDB4N2YsIDB4YTAsIDB4ZDgsIDB4ODgsIDB4MWMsIDB4MTMsIDB4NzEsCisrCTB4YWUsIDB4OWMsIDB4YjcsIDB4N2IsIDB4MzQsIDB4ZDYsIDB4NGUsIDB4NjgsCisrCTB4MjYsIDB4ODMsIDB4NTEsIDB4YWYsIDB4MWQsIDB4ZWUsIDB4OGIsIDB4YmIsCisrCTB4NjksIDB4NDMsIDB4MmIsIDB4OWUsIDB4OGEsIDB4YmMsIDB4MDIsIDB4MGUsCisrCTB4YTAsIDB4MWIsIDB4ZTAsIDB4YTgsIDB4NWYsIDB4NmYsIDB4YWYsIDB4MWIsCisrCTB4OGYsIDB4ZTcsIDB4NjQsIDB4NzEsIDB4NzQsIDB4MTEsIDB4N2UsIDB4YTgsCisrCTB4ZDgsIDB4ZjksIDB4OTcsIDB4MDYsIDB4YzMsIDB4YjYsIDB4ZmIsIDB4ZmIsCisrCTB4YjcsIDB4M2QsIDB4MzUsIDB4OWQsIDB4M2IsIDB4NTIsIDB4ZWQsIDB4NTQsCisrCTB4Y2EsIDB4ZjQsIDB4ODEsIDB4MDEsIDB4MmQsIDB4MWIsIDB4YzMsIDB4YTcsCisrCTB4MDAsIDB4M2QsIDB4MWEsIDB4MzksIDB4NTQsIDB4ZTEsIDB4ZjYsIDB4ZmYsCisrCTB4ZWQsIDB4NmYsIDB4MGIsIDB4NWEsIDB4NjgsIDB4ZGEsIDB4NTgsIDB4ZGQsCisrCTB4YTksIDB4Y2YsIDB4NWMsIDB4NGEsIDB4ZTUsIDB4MDksIDB4NGUsIDB4ZGUsCisrCTB4OWQsIDB4YmMsIDB4M2UsIDB4ZWUsIDB4NWEsIDB4MDAsIDB4M2IsIDB4MmMsCisrCTB4ODcsIDB4MTAsIDB4NjUsIDB4NjAsIDB4ZGQsIDB4ZDcsIDB4NTYsIDB4ZDEsCisrCTB4NGMsIDB4NjQsIDB4NDUsIDB4ZTQsIDB4MjEsIDB4ZWMsIDB4NzgsIDB4ZjgsCisrCTB4MjUsIDB4N2EsIDB4M2UsIDB4MTYsIDB4NWQsIDB4MDksIDB4NTMsIDB4MTQsCisrCTB4YmUsIDB4NGYsIDB4YWUsIDB4ODcsIDB4ZDgsIDB4ZDEsIDB4YWEsIDB4M2MsCisrCTB4ZjYsIDB4M2UsIDB4YTQsIDB4NzAsIDB4OGMsIDB4NWUsIDB4NzAsIDB4YTQsCisrCTB4YjMsIDB4NmIsIDB4NjYsIDB4NzMsIDB4ZDMsIDB4YmYsIDB4MzEsIDB4MDYsCisrCTB4MTksIDB4NjIsIDB4OTMsIDB4MTUsIDB4ZjIsIDB4ODYsIDB4ZTQsIDB4NTIsCisrCTB4N2UsIDB4NTMsIDB4NGMsIDB4MTIsIDB4MzgsIDB4Y2MsIDB4MzQsIDB4N2QsCisrCTB4NTcsIDB4ZjYsIDB4NDIsIDB4OTMsIDB4OGEsIDB4YzQsIDB4ZWUsIDB4NWMsCisrCTB4OGEsIDB4ZTEsIDB4NTIsIDB4OGYsIDB4NTYsIDB4NjQsIDB4ZjYsIDB4YTYsCisrCTB4ZDEsIDB4OTEsIDB4NTcsIDB4NzAsIDB4Y2QsIDB4MTEsIDB4NzYsIDB4ZjUsCisrCTB4NTksIDB4NjAsIDB4NjAsIDB4M2MsIDB4YzEsIDB4YzMsIDB4MGIsIDB4N2YsCisrCTB4NTgsIDB4MWEsIDB4NTAsIDB4OTEsIDB4ZjEsIDB4NjgsIDB4OGYsIDB4NmUsCisrCTB4NzQsIDB4NzQsIDB4YTgsIDB4NTEsIDB4MGIsIDB4ZjcsIDB4N2EsIDB4OTgsCisrCTB4MzcsIDB4ZjIsIDB4MGEsIDB4MGUsIDB4YTQsIDB4OTcsIDB4MDQsIDB4YjgsCisrCTB4OWIsIDB4ZmQsIDB4YTAsIDB4ZWEsIDB4ZjcsIDB4MGQsIDB4ZTEsIDB4ZGIsCisrCTB4MDMsIDB4ZjAsIDB4MzEsIDB4MjksIDB4ZjgsIDB4ZGQsIDB4NmIsIDB4OGIsCisrCTB4NWQsIDB4ZDgsIDB4NTksIDB4YTksIDB4MjksIDB4Y2YsIDB4OWEsIDB4NzksCisrCTB4ODksIDB4MTksIDB4NjMsIDB4NDYsIDB4MDksIDB4NzksIDB4NmEsIDB4MTEsCisrCTB4ZGEsIDB4NjMsIDB4NjgsIDB4NDgsIDB4NzcsIDB4MjMsIDB4ZmIsIDB4N2QsCisrCTB4M2EsIDB4NDMsIDB4Y2IsIDB4MDIsIDB4M2IsIDB4N2EsIDB4NmQsIDB4MTAsCisrCTB4MmEsIDB4OWUsIDB4YWMsIDB4ZjEsIDB4ZDQsIDB4MTksIDB4ZjgsIDB4MjMsCisrCTB4NjQsIDB4MWQsIDB4MmMsIDB4NWYsIDB4ZjIsIDB4YjAsIDB4NWMsIDB4MjMsCisrCTB4MjcsIDB4ZjcsIDB4MjcsIDB4MzAsIDB4MTYsIDB4MzcsIDB4YjEsIDB4OTAsCisrCTB4YWIsIDB4MzgsIDB4ZmIsIDB4NTUsIDB4Y2QsIDB4NzgsIDB4NTgsIDB4ZDQsCisrCTB4N2QsIDB4NDMsIDB4ZjYsIDB4NDUsIDB4NWUsIDB4NTUsIDB4OGQsIDB4YjEsCisrCTB4MDIsIDB4NjUsIDB4NTgsIDB4YjQsIDB4MTMsIDB4NGIsIDB4MzYsIDB4ZjcsCisrCTB4Y2MsIDB4ZmUsIDB4M2QsIDB4MGIsIDB4ODIsIDB4ZTIsIDB4MTIsIDB4MTEsCisrCTB4YmIsIDB4ZTYsIDB4YjgsIDB4M2EsIDB4NDgsIDB4NzEsIDB4YzcsIDB4NTAsCisrCTB4MDYsIDB4MTYsIDB4M2EsIDB4ZTYsIDB4N2MsIDB4MDUsIDB4YzcsIDB4YzgsCisrCTB4NGQsIDB4MmYsIDB4MDgsIDB4NmEsIDB4MTcsIDB4OWEsIDB4OTUsIDB4OTcsCisrCTB4NTAsIDB4NjgsIDB4ZGMsIDB4MjgsIDB4MTgsIDB4YzQsIDB4NjEsIDB4MzgsCisrCTB4YjksIDB4ZTAsIDB4M2UsIDB4NzgsIDB4ZGIsIDB4MjksIDB4ZTAsIDB4OWYsCisrCTB4NTIsIDB4ZGQsIDB4ZjgsIDB4NGYsIDB4OTEsIDB4YzEsIDB4ZDAsIDB4MzMsCisrCTB4YTEsIDB4N2EsIDB4OGUsIDB4MzAsIDB4MTMsIDB4ODIsIDB4MDcsIDB4OWYsCisrCTB4ZDMsIDB4MzEsIDB4MGYsIDB4MjMsIDB4YmUsIDB4MzIsIDB4NWEsIDB4NzUsCisrCTB4Y2YsIDB4OTYsIDB4YjIsIDB4ZWMsIDB4YjUsIDB4MzIsIDB4YWMsIDB4MjEsCisrCTB4ZDEsIDB4ODIsIDB4MzMsIDB4ZDMsIDB4MTUsIDB4NzQsIDB4YmQsIDB4OTAsCisrCTB4ZjEsIDB4MmMsIDB4ZTYsIDB4NWYsIDB4OGQsIDB4ZTMsIDB4MDIsIDB4ZTgsCisrCTB4ZTksIDB4YzQsIDB4Y2EsIDB4OTYsIDB4ZWIsIDB4MGUsIDB4YmMsIDB4OTEsCisrCTB4ZjQsIDB4YjksIDB4ZWEsIDB4ZDksIDB4MWIsIDB4NzUsIDB4YmQsIDB4ZTEsCisrCTB4YWMsIDB4MmEsIDB4MDUsIDB4MzcsIDB4NTIsIDB4OWIsIDB4MWIsIDB4M2YsCisrCTB4NWEsIDB4ZGMsIDB4MjEsIDB4YzMsIDB4OTgsIDB4YmIsIDB4YWYsIDB4YTMsCisrCTB4ZjIsIDB4MDAsIDB4YmYsIDB4MGQsIDB4MzAsIDB4ODksIDB4MDUsIDB4Y2MsCisrCTB4YTUsIDB4NzYsIDB4ZjUsIDB4MDYsIDB4ZjAsIDB4YzYsIDB4NTQsIDB4OGEsCisrCTB4NWQsIDB4ZDQsIDB4MWUsIDB4YzEsIDB4ZjIsIDB4Y2UsIDB4YjAsIDB4NjIsCisrCTB4YzgsIDB4ZmMsIDB4NTksIDB4NDIsIDB4OWEsIDB4OTAsIDB4NjAsIDB4NTUsCisrCTB4ZmUsIDB4ODgsIDB4YTUsIDB4OGIsIDB4YjgsIDB4MzMsIDB4MGMsIDB4MjMsCisrCTB4MjQsIDB4MGQsIDB4MTUsIDB4NzAsIDB4MzcsIDB4MWUsIDB4M2QsIDB4ZjYsCisrCTB4ZDIsIDB4ZWEsIDB4OTIsIDB4MTAsIDB4YjIsIDB4YzQsIDB4NTEsIDB4YWMsCisrCTB4ZjIsIDB4YWMsIDB4ZjMsIDB4NmIsIDB4NmMsIDB4YWEsIDB4Y2YsIDB4MTIsCisrCTB4YzUsIDB4NmMsIDB4OTAsIDB4NTAsIDB4YjUsIDB4MGMsIDB4ZmMsIDB4MWEsCisrCTB4MTUsIDB4NTIsIDB4ZTksIDB4MjYsIDB4YzYsIDB4NTIsIDB4YTQsIDB4ZTcsCisrCTB4ODEsIDB4NjksIDB4ZTEsIDB4ZTcsIDB4OWUsIDB4MzAsIDB4MDEsIDB4ZWMsCisrCTB4ODQsIDB4ODksIDB4YjIsIDB4MGQsIDB4NjYsIDB4ZGQsIDB4Y2UsIDB4MjgsCisrCTB4NWMsIDB4ZWMsIDB4OTgsIDB4NDYsIDB4NjgsIDB4MjEsIDB4OWYsIDB4ODgsCisrCTB4M2YsIDB4MWYsIDB4NDIsIDB4NzcsIDB4Y2UsIDB4ZDAsIDB4NjEsIDB4ZDQsCisrCTB4MjAsIDB4YTcsIDB4ZmYsIDB4NTMsIDB4YWQsIDB4MzcsIDB4ZDAsIDB4MTcsCisrCTB4MzUsIDB4YzksIDB4ZmMsIDB4YmEsIDB4MGEsIDB4NzgsIDB4M2YsIDB4ZjIsCisrCTB4Y2MsIDB4ODYsIDB4ODksIDB4ZTgsIDB4NGIsIDB4M2MsIDB4NDgsIDB4MzMsCisrCTB4MDksIDB4N2YsIDB4YzYsIDB4YzAsIDB4ZGQsIDB4YjgsIDB4ZmQsIDB4N2EsCisrCTB4NjYsIDB4NjYsIDB4NjUsIDB4ZWIsIDB4NDcsIDB4YTcsIDB4MDQsIDB4MjgsCisrCTB4YTMsIDB4MTksIDB4OGUsIDB4YTksIDB4YjEsIDB4MTMsIDB4NjcsIDB4NjIsCisrCTB4NzAsIDB4Y2YsIDB4ZDYKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwMTJbXSBfX2luaXRjb25zdCA9IHsKKysJMHhiMSwgMHg2OSwgMHg4MywgMHg4NywgMHgzMCwgMHhhYSwgMHg1ZCwgMHhiOCwKKysJMHg3NywgMHhlOCwgMHgyMSwgMHhmZiwgMHgwNiwgMHg1OSwgMHgzNSwgMHhjZSwKKysJMHg3NSwgMHhmZSwgMHgzOCwgMHhlZiwgMHhiOCwgMHg5MSwgMHg0MywgMHg4YywKKysJMHhjZiwgMHg3MCwgMHhkZCwgMHgwYSwgMHg2OCwgMHhiZiwgMHhkNCwgMHhiYywKKysJMHgxNiwgMHg3NiwgMHg5OSwgMHgzNiwgMHgxZSwgMHg1OCwgMHg3OSwgMHg1ZSwKKysJMHhkNCwgMHgyOSwgMHhmNywgMHgzMywgMHg5MywgMHg0OCwgMHhkYiwgMHg1ZiwKKysJMHgwMSwgMHhhZSwgMHg5YywgMHhiNiwgMHhlNCwgMHg4OCwgMHg2ZCwgMHgyYiwKKysJMHg3NiwgMHg3NSwgMHhlMCwgMHhmMywgMHg3NCwgMHhlMiwgMHhjOQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTAxMltdIF9faW5pdGNvbnN0ID0geworKwkweDA1LCAweGEzLCAweDkzLCAweGVkLCAweDMwLCAweGM1LCAweGEyLCAweDA2CisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTAxMltdIF9faW5pdGNvbnN0ID0geworKwkweGIzLCAweDM1LCAweDUwLCAweDAzLCAweDU0LCAweDJlLCAweDQwLCAweDVlLAorKwkweDhmLCAweDU5LCAweDhlLCAweGM1LCAweDkwLCAweGQ1LCAweDI3LCAweDJkLAorKwkweGJhLCAweDI5LCAweDJlLCAweGNiLCAweDFiLCAweDcwLCAweDQ0LCAweDFlLAorKwkweDY1LCAweDkxLCAweDZlLCAweDJhLCAweDc5LCAweDIyLCAweGRhLCAweDY0CisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gbWlzYyAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwNTNbXSBfX2luaXRjb25zdCA9IHsKKysJMHgyNSwgMHg2ZCwgMHg0MCwgMHg4OCwgMHg4MCwgMHg5NCwgMHgxNywgMHg4MywKKysJMHg1NSwgMHhkMywgMHgwNCwgMHg4NCwgMHg2NCwgMHg0MywgMHhmZSwgMHhlOCwKKysJMHhkZiwgMHg5OSwgMHg0NywgMHgwMywgMHgwMywgMHhmYiwgMHgzYiwgMHg3YiwKKysJMHg4MCwgMHhlMCwgMHgzMCwgMHhiZSwgMHhlYiwgMHhkMywgMHgyOSwgMHhiZQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQwNTNbXSBfX2luaXRjb25zdCA9IHsKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJMHhlNiwgMHhkMywgMHhkNywgMHgzMiwgMHg0YSwgMHgxYywgMHhiYiwgMHhhNywKKysJMHg3NywgMHhiYiwgMHhiMCwgMHhlYywgMHhkZCwgMHhhMywgMHg3OCwgMHgwNworK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzA1M1tdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX25vbmNlMDUzW10gX19pbml0Y29uc3QgPSB7CisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZWUsIDB4MzIsIDB4MDAKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfa2V5MDUzW10gX19pbml0Y29uc3QgPSB7CisrCTB4ODAsIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCisrCTB4ODgsIDB4ODksIDB4OGEsIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsCisrCTB4OTAsIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsCisrCTB4OTgsIDB4OTksIDB4OWEsIDB4OWIsIDB4OWMsIDB4OWQsIDB4OWUsIDB4OWYKKyt9OworKworKy8qIHd5Y2hlcHJvb2YgLSBtaXNjICovCisrc3RhdGljIGNvbnN0IHU4IGVuY19pbnB1dDA1NFtdIF9faW5pdGNvbnN0ID0geworKwkweDI1LCAweDZkLCAweDQwLCAweDg4LCAweDgwLCAweDk0LCAweDE3LCAweDgzLAorKwkweDU1LCAweGQzLCAweDA0LCAweDg0LCAweDY0LCAweDQzLCAweGZlLCAweGU4LAorKwkweGRmLCAweDk5LCAweDQ3LCAweDAzLCAweDAzLCAweGZiLCAweDNiLCAweDdiLAorKwkweDgwLCAweGUwLCAweDMwLCAweGJlLCAweGViLCAweGQzLCAweDI5LCAweGJlLAorKwkweGUzLCAweGJjLCAweGRiLCAweDViLCAweDFlLCAweGRlLCAweGZjLCAweGZlLAorKwkweDhiLCAweGNkLCAweGExLCAweGI2LCAweGExLCAweDVjLCAweDhjLCAweDJiLAorKwkweDA4LCAweDY5LCAweGZmLCAweGQyLCAweGVjLCAweDVlLCAweDI2LCAweGU1LAorKwkweDUzLCAweGI3LCAweGIyLCAweDI3LCAweGZlLCAweDg3LCAweGZkLCAweGJkCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX291dHB1dDA1NFtdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkweDA2LCAweDJkLCAweGU2LCAweDc5LCAweDVmLCAweDI3LCAweDRmLCAweGQyLAorKwkweGEzLCAweDA1LCAweGQ3LCAweDY5LCAweDgwLCAweGJjLCAweDljLCAweGNlCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2Fzc29jMDU0W10gX19pbml0Y29uc3QgPSB7CisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UwNTRbXSBfX2luaXRjb25zdCA9IHsKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhlZSwgMHgzMiwgMHgwMAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkwNTRbXSBfX2luaXRjb25zdCA9IHsKKysJMHg4MCwgMHg4MSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywKKysJMHg4OCwgMHg4OSwgMHg4YSwgMHg4YiwgMHg4YywgMHg4ZCwgMHg4ZSwgMHg4ZiwKKysJMHg5MCwgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywKKysJMHg5OCwgMHg5OSwgMHg5YSwgMHg5YiwgMHg5YywgMHg5ZCwgMHg5ZSwgMHg5ZgorK307CisrCisrLyogd3ljaGVwcm9vZiAtIG1pc2MgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDU1W10gX19pbml0Y29uc3QgPSB7CisrCTB4MjUsIDB4NmQsIDB4NDAsIDB4ODgsIDB4ODAsIDB4OTQsIDB4MTcsIDB4ODMsCisrCTB4NTUsIDB4ZDMsIDB4MDQsIDB4ODQsIDB4NjQsIDB4NDMsIDB4ZmUsIDB4ZTgsCisrCTB4ZGYsIDB4OTksIDB4NDcsIDB4MDMsIDB4MDMsIDB4ZmIsIDB4M2IsIDB4N2IsCisrCTB4ODAsIDB4ZTAsIDB4MzAsIDB4YmUsIDB4ZWIsIDB4ZDMsIDB4MjksIDB4YmUsCisrCTB4ZTMsIDB4YmMsIDB4ZGIsIDB4NWIsIDB4MWUsIDB4ZGUsIDB4ZmMsIDB4ZmUsCisrCTB4OGIsIDB4Y2QsIDB4YTEsIDB4YjYsIDB4YTEsIDB4NWMsIDB4OGMsIDB4MmIsCisrCTB4MDgsIDB4NjksIDB4ZmYsIDB4ZDIsIDB4ZWMsIDB4NWUsIDB4MjYsIDB4ZTUsCisrCTB4NTMsIDB4YjcsIDB4YjIsIDB4MjcsIDB4ZmUsIDB4ODcsIDB4ZmQsIDB4YmQsCisrCTB4N2EsIDB4ZGEsIDB4NDQsIDB4NDIsIDB4NDIsIDB4NjksIDB4YmYsIDB4ZmEsCisrCTB4NTUsIDB4MjcsIDB4ZjIsIDB4NzAsIDB4YWMsIDB4ZjYsIDB4ODUsIDB4MDIsCisrCTB4YjcsIDB4NGMsIDB4NWEsIDB4ZTIsIDB4ZTYsIDB4MGMsIDB4MDUsIDB4ODAsCisrCTB4OTgsIDB4MWEsIDB4NDksIDB4MzgsIDB4NDUsIDB4OTMsIDB4OTIsIDB4YzQsCisrCTB4OWIsIDB4YjIsIDB4ZjIsIDB4ODQsIDB4YjYsIDB4NDYsIDB4ZWYsIDB4YzcsCisrCTB4ZjMsIDB4ZjAsIDB4YjEsIDB4MzYsIDB4MWQsIDB4YzMsIDB4NDgsIDB4ZWQsCisrCTB4NzcsIDB4ZDMsIDB4MGIsIDB4YzUsIDB4NzYsIDB4OTIsIDB4ZWQsIDB4MzgsCisrCTB4ZmIsIDB4YWMsIDB4MDEsIDB4ODgsIDB4MzgsIDB4MDQsIDB4ODgsIDB4YzcKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDU1W10gX19pbml0Y29uc3QgPSB7CisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4ZDgsIDB4YjQsIDB4NzksIDB4MDIsIDB4YmEsIDB4YWUsIDB4YWYsIDB4YjMsCisrCTB4NDIsIDB4MDMsIDB4MDUsIDB4MTUsIDB4MjksIDB4YWYsIDB4MjgsIDB4MmUKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwNTVbXSBfX2luaXRjb25zdCA9IHsKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTA1NVtdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGVlLCAweDMyLCAweDAwCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTA1NVtdIF9faW5pdGNvbnN0ID0geworKwkweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAorKwkweDg4LCAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAweDhmLAorKwkweDkwLCAweDkxLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LAorKwkweDk4LCAweDk5LCAweDlhLCAweDliLCAweDljLCAweDlkLCAweDllLCAweDlmCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gbWlzYyAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwNTZbXSBfX2luaXRjb25zdCA9IHsKKysJMHhkYSwgMHg5MiwgMHhiZiwgMHg3NywgMHg3ZiwgMHg2YiwgMHhlOCwgMHg3YywKKysJMHhhYSwgMHgyYywgMHhmYiwgMHg3YiwgMHg5YiwgMHhiYywgMHgwMSwgMHgxNywKKysJMHgyMCwgMHg2NiwgMHhiOCwgMHhmYywgMHhmYywgMHgwNCwgMHhjNCwgMHg4NCwKKysJMHg3ZiwgMHgxZiwgMHhjZiwgMHg0MSwgMHgxNCwgMHgyYywgMHhkNiwgMHg0MQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQwNTZbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhiMywgMHg4OSwgMHgxYywgMHg4NCwgMHg5YywgMHhiNSwgMHgyYywgMHgyNywKKysJMHg3NCwgMHg3ZSwgMHhkZiwgMHhjZiwgMHgzMSwgMHgyMSwgMHgzYiwgMHhiNgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzA1NltdIF9faW5pdGNvbnN0ID0geworKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX25vbmNlMDU2W10gX19pbml0Y29uc3QgPSB7CisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZWUsIDB4MzIsIDB4MDAKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfa2V5MDU2W10gX19pbml0Y29uc3QgPSB7CisrCTB4ODAsIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCisrCTB4ODgsIDB4ODksIDB4OGEsIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsCisrCTB4OTAsIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsCisrCTB4OTgsIDB4OTksIDB4OWEsIDB4OWIsIDB4OWMsIDB4OWQsIDB4OWUsIDB4OWYKKyt9OworKworKy8qIHd5Y2hlcHJvb2YgLSBtaXNjICovCisrc3RhdGljIGNvbnN0IHU4IGVuY19pbnB1dDA1N1tdIF9faW5pdGNvbnN0ID0geworKwkweGRhLCAweDkyLCAweGJmLCAweDc3LCAweDdmLCAweDZiLCAweGU4LCAweDdjLAorKwkweGFhLCAweDJjLCAweGZiLCAweDdiLCAweDliLCAweGJjLCAweDAxLCAweDE3LAorKwkweDIwLCAweDY2LCAweGI4LCAweGZjLCAweGZjLCAweDA0LCAweGM0LCAweDg0LAorKwkweDdmLCAweDFmLCAweGNmLCAweDQxLCAweDE0LCAweDJjLCAweGQ2LCAweDQxLAorKwkweDFjLCAweDQzLCAweDI0LCAweGE0LCAweGUxLCAweDIxLCAweDAzLCAweDAxLAorKwkweDc0LCAweDMyLCAweDVlLCAweDQ5LCAweDVlLCAweGEzLCAweDczLCAweGQ0LAorKwkweGY3LCAweDk2LCAweDAwLCAweDJkLCAweDEzLCAweGExLCAweGQ5LCAweDFhLAorKwkweGFjLCAweDQ4LCAweDRkLCAweGQ4LCAweDAxLCAweDc4LCAweDAyLCAweDQyCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX291dHB1dDA1N1tdIF9faW5pdGNvbnN0ID0geworKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGYwLCAweGMxLCAweDJkLCAweDI2LCAweGVmLCAweDAzLCAweDAyLCAweDliLAorKwkweDYyLCAweGMwLCAweDA4LCAweGRhLCAweDI3LCAweGM1LCAweGRjLCAweDY4CisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2Fzc29jMDU3W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UwNTdbXSBfX2luaXRjb25zdCA9IHsKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhlZSwgMHgzMiwgMHgwMAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkwNTdbXSBfX2luaXRjb25zdCA9IHsKKysJMHg4MCwgMHg4MSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywKKysJMHg4OCwgMHg4OSwgMHg4YSwgMHg4YiwgMHg4YywgMHg4ZCwgMHg4ZSwgMHg4ZiwKKysJMHg5MCwgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywKKysJMHg5OCwgMHg5OSwgMHg5YSwgMHg5YiwgMHg5YywgMHg5ZCwgMHg5ZSwgMHg5ZgorK307CisrCisrLyogd3ljaGVwcm9vZiAtIG1pc2MgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDU4W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZGEsIDB4OTIsIDB4YmYsIDB4NzcsIDB4N2YsIDB4NmIsIDB4ZTgsIDB4N2MsCisrCTB4YWEsIDB4MmMsIDB4ZmIsIDB4N2IsIDB4OWIsIDB4YmMsIDB4MDEsIDB4MTcsCisrCTB4MjAsIDB4NjYsIDB4YjgsIDB4ZmMsIDB4ZmMsIDB4MDQsIDB4YzQsIDB4ODQsCisrCTB4N2YsIDB4MWYsIDB4Y2YsIDB4NDEsIDB4MTQsIDB4MmMsIDB4ZDYsIDB4NDEsCisrCTB4MWMsIDB4NDMsIDB4MjQsIDB4YTQsIDB4ZTEsIDB4MjEsIDB4MDMsIDB4MDEsCisrCTB4NzQsIDB4MzIsIDB4NWUsIDB4NDksIDB4NWUsIDB4YTMsIDB4NzMsIDB4ZDQsCisrCTB4ZjcsIDB4OTYsIDB4MDAsIDB4MmQsIDB4MTMsIDB4YTEsIDB4ZDksIDB4MWEsCisrCTB4YWMsIDB4NDgsIDB4NGQsIDB4ZDgsIDB4MDEsIDB4NzgsIDB4MDIsIDB4NDIsCisrCTB4ODUsIDB4MjUsIDB4YmIsIDB4YmQsIDB4YmQsIDB4OTYsIDB4NDAsIDB4MDUsCisrCTB4YWEsIDB4ZDgsIDB4MGQsIDB4OGYsIDB4NTMsIDB4MDksIDB4N2EsIDB4ZmQsCisrCTB4NDgsIDB4YjMsIDB4YTUsIDB4MWQsIDB4MTksIDB4ZjMsIDB4ZmEsIDB4N2YsCisrCTB4NjcsIDB4ZTUsIDB4YjYsIDB4YzcsIDB4YmEsIDB4NmMsIDB4NmQsIDB4M2IsCisrCTB4NjQsIDB4NGQsIDB4MGQsIDB4N2IsIDB4NDksIDB4YjksIDB4MTAsIDB4MzgsCisrCTB4MGMsIDB4MGYsIDB4NGUsIDB4YzksIDB4ZTIsIDB4M2MsIDB4YjcsIDB4MTIsCisrCTB4ODgsIDB4MmMsIDB4ZjQsIDB4M2EsIDB4ODksIDB4NmQsIDB4MTIsIDB4YzcsCisrCTB4MDQsIDB4NTMsIDB4ZmUsIDB4NzcsIDB4YzcsIDB4ZmIsIDB4NzcsIDB4MzgKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDU4W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZWUsIDB4NjUsIDB4NzgsIDB4MzAsIDB4MDEsIDB4YzIsIDB4NTYsIDB4OTEsCisrCTB4ZmEsIDB4MjgsIDB4ZDAsIDB4ZjUsIDB4ZjEsIDB4YzEsIDB4ZDcsIDB4NjIKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwNThbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTA1OFtdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGVlLCAweDMyLCAweDAwCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTA1OFtdIF9faW5pdGNvbnN0ID0geworKwkweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAorKwkweDg4LCAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAweDhmLAorKwkweDkwLCAweDkxLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LAorKwkweDk4LCAweDk5LCAweDlhLCAweDliLCAweDljLCAweDlkLCAweDllLCAweDlmCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gbWlzYyAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwNTlbXSBfX2luaXRjb25zdCA9IHsKKysJMHgyNSwgMHg2ZCwgMHg0MCwgMHgwOCwgMHg4MCwgMHg5NCwgMHgxNywgMHgwMywKKysJMHg1NSwgMHhkMywgMHgwNCwgMHgwNCwgMHg2NCwgMHg0MywgMHhmZSwgMHg2OCwKKysJMHhkZiwgMHg5OSwgMHg0NywgMHg4MywgMHgwMywgMHhmYiwgMHgzYiwgMHhmYiwKKysJMHg4MCwgMHhlMCwgMHgzMCwgMHgzZSwgMHhlYiwgMHhkMywgMHgyOSwgMHgzZQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQwNTlbXSBfX2luaXRjb25zdCA9IHsKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwKKysJMHg3OSwgMHhiYSwgMHg3YSwgMHgyOSwgMHhmNSwgMHhhNywgMHhiYiwgMHg3NSwKKysJMHg3OSwgMHg3YSwgMHhmOCwgMHg3YSwgMHg2MSwgMHgwMSwgMHgyOSwgMHhhNAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzA1OVtdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLAorKwkweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDgwCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX25vbmNlMDU5W10gX19pbml0Y29uc3QgPSB7CisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZWUsIDB4MzIsIDB4MDAKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfa2V5MDU5W10gX19pbml0Y29uc3QgPSB7CisrCTB4ODAsIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCisrCTB4ODgsIDB4ODksIDB4OGEsIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsCisrCTB4OTAsIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsCisrCTB4OTgsIDB4OTksIDB4OWEsIDB4OWIsIDB4OWMsIDB4OWQsIDB4OWUsIDB4OWYKKyt9OworKworKy8qIHd5Y2hlcHJvb2YgLSBtaXNjICovCisrc3RhdGljIGNvbnN0IHU4IGVuY19pbnB1dDA2MFtdIF9faW5pdGNvbnN0ID0geworKwkweDI1LCAweDZkLCAweDQwLCAweDA4LCAweDgwLCAweDk0LCAweDE3LCAweDAzLAorKwkweDU1LCAweGQzLCAweDA0LCAweDA0LCAweDY0LCAweDQzLCAweGZlLCAweDY4LAorKwkweGRmLCAweDk5LCAweDQ3LCAweDgzLCAweDAzLCAweGZiLCAweDNiLCAweGZiLAorKwkweDgwLCAweGUwLCAweDMwLCAweDNlLCAweGViLCAweGQzLCAweDI5LCAweDNlLAorKwkweGUzLCAweGJjLCAweGRiLCAweGRiLCAweDFlLCAweGRlLCAweGZjLCAweDdlLAorKwkweDhiLCAweGNkLCAweGExLCAweDM2LCAweGExLCAweDVjLCAweDhjLCAweGFiLAorKwkweDA4LCAweDY5LCAweGZmLCAweDUyLCAweGVjLCAweDVlLCAweDI2LCAweDY1LAorKwkweDUzLCAweGI3LCAweGIyLCAweGE3LCAweGZlLCAweDg3LCAweGZkLCAweDNkCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX291dHB1dDA2MFtdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLAorKwkweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLAorKwkweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLAorKwkweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLAorKwkweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLAorKwkweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLAorKwkweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLAorKwkweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLAorKwkweDM2LCAweGIxLCAweDc0LCAweDM4LCAweDE5LCAweGUxLCAweGI5LCAweGJhLAorKwkweDE1LCAweDUxLCAweGU4LCAweGVkLCAweDkyLCAweDJhLCAweDk1LCAweDlhCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2Fzc29jMDYwW10gX19pbml0Y29uc3QgPSB7CisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UwNjBbXSBfX2luaXRjb25zdCA9IHsKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhlZSwgMHgzMiwgMHgwMAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkwNjBbXSBfX2luaXRjb25zdCA9IHsKKysJMHg4MCwgMHg4MSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywKKysJMHg4OCwgMHg4OSwgMHg4YSwgMHg4YiwgMHg4YywgMHg4ZCwgMHg4ZSwgMHg4ZiwKKysJMHg5MCwgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywKKysJMHg5OCwgMHg5OSwgMHg5YSwgMHg5YiwgMHg5YywgMHg5ZCwgMHg5ZSwgMHg5ZgorK307CisrCisrLyogd3ljaGVwcm9vZiAtIG1pc2MgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDYxW10gX19pbml0Y29uc3QgPSB7CisrCTB4MjUsIDB4NmQsIDB4NDAsIDB4MDgsIDB4ODAsIDB4OTQsIDB4MTcsIDB4MDMsCisrCTB4NTUsIDB4ZDMsIDB4MDQsIDB4MDQsIDB4NjQsIDB4NDMsIDB4ZmUsIDB4NjgsCisrCTB4ZGYsIDB4OTksIDB4NDcsIDB4ODMsIDB4MDMsIDB4ZmIsIDB4M2IsIDB4ZmIsCisrCTB4ODAsIDB4ZTAsIDB4MzAsIDB4M2UsIDB4ZWIsIDB4ZDMsIDB4MjksIDB4M2UsCisrCTB4ZTMsIDB4YmMsIDB4ZGIsIDB4ZGIsIDB4MWUsIDB4ZGUsIDB4ZmMsIDB4N2UsCisrCTB4OGIsIDB4Y2QsIDB4YTEsIDB4MzYsIDB4YTEsIDB4NWMsIDB4OGMsIDB4YWIsCisrCTB4MDgsIDB4NjksIDB4ZmYsIDB4NTIsIDB4ZWMsIDB4NWUsIDB4MjYsIDB4NjUsCisrCTB4NTMsIDB4YjcsIDB4YjIsIDB4YTcsIDB4ZmUsIDB4ODcsIDB4ZmQsIDB4M2QsCisrCTB4N2EsIDB4ZGEsIDB4NDQsIDB4YzIsIDB4NDIsIDB4NjksIDB4YmYsIDB4N2EsCisrCTB4NTUsIDB4MjcsIDB4ZjIsIDB4ZjAsIDB4YWMsIDB4ZjYsIDB4ODUsIDB4ODIsCisrCTB4YjcsIDB4NGMsIDB4NWEsIDB4NjIsIDB4ZTYsIDB4MGMsIDB4MDUsIDB4MDAsCisrCTB4OTgsIDB4MWEsIDB4NDksIDB4YjgsIDB4NDUsIDB4OTMsIDB4OTIsIDB4NDQsCisrCTB4OWIsIDB4YjIsIDB4ZjIsIDB4MDQsIDB4YjYsIDB4NDYsIDB4ZWYsIDB4NDcsCisrCTB4ZjMsIDB4ZjAsIDB4YjEsIDB4YjYsIDB4MWQsIDB4YzMsIDB4NDgsIDB4NmQsCisrCTB4NzcsIDB4ZDMsIDB4MGIsIDB4NDUsIDB4NzYsIDB4OTIsIDB4ZWQsIDB4YjgsCisrCTB4ZmIsIDB4YWMsIDB4MDEsIDB4MDgsIDB4MzgsIDB4MDQsIDB4ODgsIDB4NDcKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDYxW10gX19pbml0Y29uc3QgPSB7CisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCisrCTB4ZmUsIDB4YWMsIDB4NDksIDB4NTUsIDB4NTUsIDB4NGUsIDB4ODAsIDB4NmYsCisrCTB4M2EsIDB4MTksIDB4MDIsIDB4ZTIsIDB4NDQsIDB4MzIsIDB4YzAsIDB4OGEKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwNjFbXSBfX2luaXRjb25zdCA9IHsKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTA2MVtdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGVlLCAweDMyLCAweDAwCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTA2MVtdIF9faW5pdGNvbnN0ID0geworKwkweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAorKwkweDg4LCAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAweDhmLAorKwkweDkwLCAweDkxLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LAorKwkweDk4LCAweDk5LCAweDlhLCAweDliLCAweDljLCAweDlkLCAweDllLCAweDlmCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gbWlzYyAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwNjJbXSBfX2luaXRjb25zdCA9IHsKKysJMHhkYSwgMHg5MiwgMHhiZiwgMHhmNywgMHg3ZiwgMHg2YiwgMHhlOCwgMHhmYywKKysJMHhhYSwgMHgyYywgMHhmYiwgMHhmYiwgMHg5YiwgMHhiYywgMHgwMSwgMHg5NywKKysJMHgyMCwgMHg2NiwgMHhiOCwgMHg3YywgMHhmYywgMHgwNCwgMHhjNCwgMHgwNCwKKysJMHg3ZiwgMHgxZiwgMHhjZiwgMHhjMSwgMHgxNCwgMHgyYywgMHhkNiwgMHhjMQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQwNjJbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwKKysJMHgyMCwgMHhhMywgMHg3OSwgMHg4ZCwgMHhmMSwgMHgyOSwgMHgyYywgMHg1OSwKKysJMHg3MiwgMHhiZiwgMHg5NywgMHg0MSwgMHhhZSwgMHhjMywgMHg4YSwgMHgxOQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzA2MltdIF9faW5pdGNvbnN0ID0geworKwkweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLAorKwkweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweDdmCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX25vbmNlMDYyW10gX19pbml0Y29uc3QgPSB7CisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZWUsIDB4MzIsIDB4MDAKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfa2V5MDYyW10gX19pbml0Y29uc3QgPSB7CisrCTB4ODAsIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCisrCTB4ODgsIDB4ODksIDB4OGEsIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsCisrCTB4OTAsIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsCisrCTB4OTgsIDB4OTksIDB4OWEsIDB4OWIsIDB4OWMsIDB4OWQsIDB4OWUsIDB4OWYKKyt9OworKworKy8qIHd5Y2hlcHJvb2YgLSBtaXNjICovCisrc3RhdGljIGNvbnN0IHU4IGVuY19pbnB1dDA2M1tdIF9faW5pdGNvbnN0ID0geworKwkweGRhLCAweDkyLCAweGJmLCAweGY3LCAweDdmLCAweDZiLCAweGU4LCAweGZjLAorKwkweGFhLCAweDJjLCAweGZiLCAweGZiLCAweDliLCAweGJjLCAweDAxLCAweDk3LAorKwkweDIwLCAweDY2LCAweGI4LCAweDdjLCAweGZjLCAweDA0LCAweGM0LCAweDA0LAorKwkweDdmLCAweDFmLCAweGNmLCAweGMxLCAweDE0LCAweDJjLCAweGQ2LCAweGMxLAorKwkweDFjLCAweDQzLCAweDI0LCAweDI0LCAweGUxLCAweDIxLCAweDAzLCAweDgxLAorKwkweDc0LCAweDMyLCAweDVlLCAweGM5LCAweDVlLCAweGEzLCAweDczLCAweDU0LAorKwkweGY3LCAweDk2LCAweDAwLCAweGFkLCAweDEzLCAweGExLCAweGQ5LCAweDlhLAorKwkweGFjLCAweDQ4LCAweDRkLCAweDU4LCAweDAxLCAweDc4LCAweDAyLCAweGMyCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX291dHB1dDA2M1tdIF9faW5pdGNvbnN0ID0geworKwkweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLAorKwkweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLAorKwkweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLAorKwkweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLAorKwkweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLAorKwkweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLAorKwkweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLAorKwkweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLAorKwkweGMwLCAweDNkLCAweDlmLCAweDY3LCAweDM1LCAweDRhLCAweDk3LCAweGIyLAorKwkweGYwLCAweDc0LCAweGY3LCAweDU1LCAweDE1LCAweDU3LCAweGU0LCAweDljCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2Fzc29jMDYzW10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UwNjNbXSBfX2luaXRjb25zdCA9IHsKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhlZSwgMHgzMiwgMHgwMAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkwNjNbXSBfX2luaXRjb25zdCA9IHsKKysJMHg4MCwgMHg4MSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywKKysJMHg4OCwgMHg4OSwgMHg4YSwgMHg4YiwgMHg4YywgMHg4ZCwgMHg4ZSwgMHg4ZiwKKysJMHg5MCwgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywKKysJMHg5OCwgMHg5OSwgMHg5YSwgMHg5YiwgMHg5YywgMHg5ZCwgMHg5ZSwgMHg5ZgorK307CisrCisrLyogd3ljaGVwcm9vZiAtIG1pc2MgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDY0W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZGEsIDB4OTIsIDB4YmYsIDB4ZjcsIDB4N2YsIDB4NmIsIDB4ZTgsIDB4ZmMsCisrCTB4YWEsIDB4MmMsIDB4ZmIsIDB4ZmIsIDB4OWIsIDB4YmMsIDB4MDEsIDB4OTcsCisrCTB4MjAsIDB4NjYsIDB4YjgsIDB4N2MsIDB4ZmMsIDB4MDQsIDB4YzQsIDB4MDQsCisrCTB4N2YsIDB4MWYsIDB4Y2YsIDB4YzEsIDB4MTQsIDB4MmMsIDB4ZDYsIDB4YzEsCisrCTB4MWMsIDB4NDMsIDB4MjQsIDB4MjQsIDB4ZTEsIDB4MjEsIDB4MDMsIDB4ODEsCisrCTB4NzQsIDB4MzIsIDB4NWUsIDB4YzksIDB4NWUsIDB4YTMsIDB4NzMsIDB4NTQsCisrCTB4ZjcsIDB4OTYsIDB4MDAsIDB4YWQsIDB4MTMsIDB4YTEsIDB4ZDksIDB4OWEsCisrCTB4YWMsIDB4NDgsIDB4NGQsIDB4NTgsIDB4MDEsIDB4NzgsIDB4MDIsIDB4YzIsCisrCTB4ODUsIDB4MjUsIDB4YmIsIDB4M2QsIDB4YmQsIDB4OTYsIDB4NDAsIDB4ODUsCisrCTB4YWEsIDB4ZDgsIDB4MGQsIDB4MGYsIDB4NTMsIDB4MDksIDB4N2EsIDB4N2QsCisrCTB4NDgsIDB4YjMsIDB4YTUsIDB4OWQsIDB4MTksIDB4ZjMsIDB4ZmEsIDB4ZmYsCisrCTB4NjcsIDB4ZTUsIDB4YjYsIDB4NDcsIDB4YmEsIDB4NmMsIDB4NmQsIDB4YmIsCisrCTB4NjQsIDB4NGQsIDB4MGQsIDB4ZmIsIDB4NDksIDB4YjksIDB4MTAsIDB4YjgsCisrCTB4MGMsIDB4MGYsIDB4NGUsIDB4NDksIDB4ZTIsIDB4M2MsIDB4YjcsIDB4OTIsCisrCTB4ODgsIDB4MmMsIDB4ZjQsIDB4YmEsIDB4ODksIDB4NmQsIDB4MTIsIDB4NDcsCisrCTB4MDQsIDB4NTMsIDB4ZmUsIDB4ZjcsIDB4YzcsIDB4ZmIsIDB4NzcsIDB4YjgKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDY0W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsCisrCTB4YzgsIDB4NmQsIDB4YTgsIDB4ZGQsIDB4NjUsIDB4MjIsIDB4ODYsIDB4ZDUsCisrCTB4MDIsIDB4MTMsIDB4ZDMsIDB4MjgsIDB4ZDYsIDB4M2UsIDB4NDAsIDB4MDYKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwNjRbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTA2NFtdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGVlLCAweDMyLCAweDAwCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTA2NFtdIF9faW5pdGNvbnN0ID0geworKwkweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAorKwkweDg4LCAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAweDhmLAorKwkweDkwLCAweDkxLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LAorKwkweDk4LCAweDk5LCAweDlhLCAweDliLCAweDljLCAweDlkLCAweDllLCAweDlmCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gbWlzYyAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwNjVbXSBfX2luaXRjb25zdCA9IHsKKysJMHg1YSwgMHg5MiwgMHhiZiwgMHg3NywgMHhmZiwgMHg2YiwgMHhlOCwgMHg3YywKKysJMHgyYSwgMHgyYywgMHhmYiwgMHg3YiwgMHgxYiwgMHhiYywgMHgwMSwgMHgxNywKKysJMHhhMCwgMHg2NiwgMHhiOCwgMHhmYywgMHg3YywgMHgwNCwgMHhjNCwgMHg4NCwKKysJMHhmZiwgMHgxZiwgMHhjZiwgMHg0MSwgMHg5NCwgMHgyYywgMHhkNiwgMHg0MQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQwNjVbXSBfX2luaXRjb25zdCA9IHsKKysJMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhiZSwgMHhkZSwgMHg5MCwgMHg4MywgMHhjZSwgMHhiMywgMHg2ZCwgMHhkZiwKKysJMHhlNSwgMHhmYSwgMHg4MSwgMHgxZiwgMHg5NSwgMHg0NywgMHgxYywgMHg2NworK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzA2NVtdIF9faW5pdGNvbnN0ID0geworKwkweDdmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDdmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX25vbmNlMDY1W10gX19pbml0Y29uc3QgPSB7CisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZWUsIDB4MzIsIDB4MDAKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfa2V5MDY1W10gX19pbml0Y29uc3QgPSB7CisrCTB4ODAsIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCisrCTB4ODgsIDB4ODksIDB4OGEsIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsCisrCTB4OTAsIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsCisrCTB4OTgsIDB4OTksIDB4OWEsIDB4OWIsIDB4OWMsIDB4OWQsIDB4OWUsIDB4OWYKKyt9OworKworKy8qIHd5Y2hlcHJvb2YgLSBtaXNjICovCisrc3RhdGljIGNvbnN0IHU4IGVuY19pbnB1dDA2NltdIF9faW5pdGNvbnN0ID0geworKwkweDVhLCAweDkyLCAweGJmLCAweDc3LCAweGZmLCAweDZiLCAweGU4LCAweDdjLAorKwkweDJhLCAweDJjLCAweGZiLCAweDdiLCAweDFiLCAweGJjLCAweDAxLCAweDE3LAorKwkweGEwLCAweDY2LCAweGI4LCAweGZjLCAweDdjLCAweDA0LCAweGM0LCAweDg0LAorKwkweGZmLCAweDFmLCAweGNmLCAweDQxLCAweDk0LCAweDJjLCAweGQ2LCAweDQxLAorKwkweDljLCAweDQzLCAweDI0LCAweGE0LCAweDYxLCAweDIxLCAweDAzLCAweDAxLAorKwkweGY0LCAweDMyLCAweDVlLCAweDQ5LCAweGRlLCAweGEzLCAweDczLCAweGQ0LAorKwkweDc3LCAweDk2LCAweDAwLCAweDJkLCAweDkzLCAweGExLCAweGQ5LCAweDFhLAorKwkweDJjLCAweDQ4LCAweDRkLCAweGQ4LCAweDgxLCAweDc4LCAweDAyLCAweDQyCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX291dHB1dDA2NltdIF9faW5pdGNvbnN0ID0geworKwkweDdmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDdmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDdmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDdmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDdmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDdmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDdmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDdmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDMwLCAweDA4LCAweDc0LCAweGJiLCAweDA2LCAweDkyLCAweGI2LCAweDg5LAorKwkweGRlLCAweGFkLCAweDlhLCAweGUxLCAweDViLCAweDA2LCAweDczLCAweDkwCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2Fzc29jMDY2W10gX19pbml0Y29uc3QgPSB7CisrCTB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UwNjZbXSBfX2luaXRjb25zdCA9IHsKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhlZSwgMHgzMiwgMHgwMAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkwNjZbXSBfX2luaXRjb25zdCA9IHsKKysJMHg4MCwgMHg4MSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywKKysJMHg4OCwgMHg4OSwgMHg4YSwgMHg4YiwgMHg4YywgMHg4ZCwgMHg4ZSwgMHg4ZiwKKysJMHg5MCwgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywKKysJMHg5OCwgMHg5OSwgMHg5YSwgMHg5YiwgMHg5YywgMHg5ZCwgMHg5ZSwgMHg5ZgorK307CisrCisrLyogd3ljaGVwcm9vZiAtIG1pc2MgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDY3W10gX19pbml0Y29uc3QgPSB7CisrCTB4NWEsIDB4OTIsIDB4YmYsIDB4NzcsIDB4ZmYsIDB4NmIsIDB4ZTgsIDB4N2MsCisrCTB4MmEsIDB4MmMsIDB4ZmIsIDB4N2IsIDB4MWIsIDB4YmMsIDB4MDEsIDB4MTcsCisrCTB4YTAsIDB4NjYsIDB4YjgsIDB4ZmMsIDB4N2MsIDB4MDQsIDB4YzQsIDB4ODQsCisrCTB4ZmYsIDB4MWYsIDB4Y2YsIDB4NDEsIDB4OTQsIDB4MmMsIDB4ZDYsIDB4NDEsCisrCTB4OWMsIDB4NDMsIDB4MjQsIDB4YTQsIDB4NjEsIDB4MjEsIDB4MDMsIDB4MDEsCisrCTB4ZjQsIDB4MzIsIDB4NWUsIDB4NDksIDB4ZGUsIDB4YTMsIDB4NzMsIDB4ZDQsCisrCTB4NzcsIDB4OTYsIDB4MDAsIDB4MmQsIDB4OTMsIDB4YTEsIDB4ZDksIDB4MWEsCisrCTB4MmMsIDB4NDgsIDB4NGQsIDB4ZDgsIDB4ODEsIDB4NzgsIDB4MDIsIDB4NDIsCisrCTB4MDUsIDB4MjUsIDB4YmIsIDB4YmQsIDB4M2QsIDB4OTYsIDB4NDAsIDB4MDUsCisrCTB4MmEsIDB4ZDgsIDB4MGQsIDB4OGYsIDB4ZDMsIDB4MDksIDB4N2EsIDB4ZmQsCisrCTB4YzgsIDB4YjMsIDB4YTUsIDB4MWQsIDB4OTksIDB4ZjMsIDB4ZmEsIDB4N2YsCisrCTB4ZTcsIDB4ZTUsIDB4YjYsIDB4YzcsIDB4M2EsIDB4NmMsIDB4NmQsIDB4M2IsCisrCTB4ZTQsIDB4NGQsIDB4MGQsIDB4N2IsIDB4YzksIDB4YjksIDB4MTAsIDB4MzgsCisrCTB4OGMsIDB4MGYsIDB4NGUsIDB4YzksIDB4NjIsIDB4M2MsIDB4YjcsIDB4MTIsCisrCTB4MDgsIDB4MmMsIDB4ZjQsIDB4M2EsIDB4MDksIDB4NmQsIDB4MTIsIDB4YzcsCisrCTB4ODQsIDB4NTMsIDB4ZmUsIDB4NzcsIDB4NDcsIDB4ZmIsIDB4NzcsIDB4MzgKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDY3W10gX19pbml0Y29uc3QgPSB7CisrCTB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4OTksIDB4Y2EsIDB4ZDgsIDB4NWYsIDB4NDUsIDB4Y2EsIDB4NDAsIDB4OTQsCisrCTB4MmQsIDB4MGQsIDB4NGQsIDB4NWUsIDB4OTUsIDB4MGEsIDB4ZGUsIDB4MjIKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwNjdbXSBfX2luaXRjb25zdCA9IHsKKysJMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTA2N1tdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGVlLCAweDMyLCAweDAwCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTA2N1tdIF9faW5pdGNvbnN0ID0geworKwkweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAorKwkweDg4LCAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAweDhmLAorKwkweDkwLCAweDkxLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LAorKwkweDk4LCAweDk5LCAweDlhLCAweDliLCAweDljLCAweDlkLCAweDllLCAweDlmCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gbWlzYyAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwNjhbXSBfX2luaXRjb25zdCA9IHsKKysJMHgyNSwgMHg2ZCwgMHg0MCwgMHg4OCwgMHg3ZiwgMHg2YiwgMHhlOCwgMHg3YywKKysJMHg1NSwgMHhkMywgMHgwNCwgMHg4NCwgMHg5YiwgMHhiYywgMHgwMSwgMHgxNywKKysJMHhkZiwgMHg5OSwgMHg0NywgMHgwMywgMHhmYywgMHgwNCwgMHhjNCwgMHg4NCwKKysJMHg4MCwgMHhlMCwgMHgzMCwgMHhiZSwgMHgxNCwgMHgyYywgMHhkNiwgMHg0MQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQwNjhbXSBfX2luaXRjb25zdCA9IHsKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHg4YiwgMHhiZSwgMHgxNCwgMHg1MiwgMHg3MiwgMHhlNywgMHhjMiwgMHhkOSwKKysJMHhhMSwgMHg4OSwgMHgxYSwgMHgzYSwgMHhiMCwgMHg5OCwgMHgzZCwgMHg5ZAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzA2OFtdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX25vbmNlMDY4W10gX19pbml0Y29uc3QgPSB7CisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZWUsIDB4MzIsIDB4MDAKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfa2V5MDY4W10gX19pbml0Y29uc3QgPSB7CisrCTB4ODAsIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCisrCTB4ODgsIDB4ODksIDB4OGEsIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsCisrCTB4OTAsIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsCisrCTB4OTgsIDB4OTksIDB4OWEsIDB4OWIsIDB4OWMsIDB4OWQsIDB4OWUsIDB4OWYKKyt9OworKworKy8qIHd5Y2hlcHJvb2YgLSBtaXNjICovCisrc3RhdGljIGNvbnN0IHU4IGVuY19pbnB1dDA2OVtdIF9faW5pdGNvbnN0ID0geworKwkweDI1LCAweDZkLCAweDQwLCAweDg4LCAweDdmLCAweDZiLCAweGU4LCAweDdjLAorKwkweDU1LCAweGQzLCAweDA0LCAweDg0LCAweDliLCAweGJjLCAweDAxLCAweDE3LAorKwkweGRmLCAweDk5LCAweDQ3LCAweDAzLCAweGZjLCAweDA0LCAweGM0LCAweDg0LAorKwkweDgwLCAweGUwLCAweDMwLCAweGJlLCAweDE0LCAweDJjLCAweGQ2LCAweDQxLAorKwkweGUzLCAweGJjLCAweGRiLCAweDViLCAweGUxLCAweDIxLCAweDAzLCAweDAxLAorKwkweDhiLCAweGNkLCAweGExLCAweGI2LCAweDVlLCAweGEzLCAweDczLCAweGQ0LAorKwkweDA4LCAweDY5LCAweGZmLCAweGQyLCAweDEzLCAweGExLCAweGQ5LCAweDFhLAorKwkweDUzLCAweGI3LCAweGIyLCAweDI3LCAweDAxLCAweDc4LCAweDAyLCAweDQyCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX291dHB1dDA2OVtdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDNiLCAweDQxLCAweDg2LCAweDE5LCAweDEzLCAweGE4LCAweGY2LCAweGRlLAorKwkweDdmLCAweDYxLCAweGUyLCAweDI1LCAweDYzLCAweDFiLCAweGMzLCAweDgyCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2Fzc29jMDY5W10gX19pbml0Y29uc3QgPSB7CisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UwNjlbXSBfX2luaXRjb25zdCA9IHsKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhlZSwgMHgzMiwgMHgwMAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkwNjlbXSBfX2luaXRjb25zdCA9IHsKKysJMHg4MCwgMHg4MSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywKKysJMHg4OCwgMHg4OSwgMHg4YSwgMHg4YiwgMHg4YywgMHg4ZCwgMHg4ZSwgMHg4ZiwKKysJMHg5MCwgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywKKysJMHg5OCwgMHg5OSwgMHg5YSwgMHg5YiwgMHg5YywgMHg5ZCwgMHg5ZSwgMHg5ZgorK307CisrCisrLyogd3ljaGVwcm9vZiAtIG1pc2MgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDcwW10gX19pbml0Y29uc3QgPSB7CisrCTB4MjUsIDB4NmQsIDB4NDAsIDB4ODgsIDB4N2YsIDB4NmIsIDB4ZTgsIDB4N2MsCisrCTB4NTUsIDB4ZDMsIDB4MDQsIDB4ODQsIDB4OWIsIDB4YmMsIDB4MDEsIDB4MTcsCisrCTB4ZGYsIDB4OTksIDB4NDcsIDB4MDMsIDB4ZmMsIDB4MDQsIDB4YzQsIDB4ODQsCisrCTB4ODAsIDB4ZTAsIDB4MzAsIDB4YmUsIDB4MTQsIDB4MmMsIDB4ZDYsIDB4NDEsCisrCTB4ZTMsIDB4YmMsIDB4ZGIsIDB4NWIsIDB4ZTEsIDB4MjEsIDB4MDMsIDB4MDEsCisrCTB4OGIsIDB4Y2QsIDB4YTEsIDB4YjYsIDB4NWUsIDB4YTMsIDB4NzMsIDB4ZDQsCisrCTB4MDgsIDB4NjksIDB4ZmYsIDB4ZDIsIDB4MTMsIDB4YTEsIDB4ZDksIDB4MWEsCisrCTB4NTMsIDB4YjcsIDB4YjIsIDB4MjcsIDB4MDEsIDB4NzgsIDB4MDIsIDB4NDIsCisrCTB4N2EsIDB4ZGEsIDB4NDQsIDB4NDIsIDB4YmQsIDB4OTYsIDB4NDAsIDB4MDUsCisrCTB4NTUsIDB4MjcsIDB4ZjIsIDB4NzAsIDB4NTMsIDB4MDksIDB4N2EsIDB4ZmQsCisrCTB4YjcsIDB4NGMsIDB4NWEsIDB4ZTIsIDB4MTksIDB4ZjMsIDB4ZmEsIDB4N2YsCisrCTB4OTgsIDB4MWEsIDB4NDksIDB4MzgsIDB4YmEsIDB4NmMsIDB4NmQsIDB4M2IsCisrCTB4OWIsIDB4YjIsIDB4ZjIsIDB4ODQsIDB4NDksIDB4YjksIDB4MTAsIDB4MzgsCisrCTB4ZjMsIDB4ZjAsIDB4YjEsIDB4MzYsIDB4ZTIsIDB4M2MsIDB4YjcsIDB4MTIsCisrCTB4NzcsIDB4ZDMsIDB4MGIsIDB4YzUsIDB4ODksIDB4NmQsIDB4MTIsIDB4YzcsCisrCTB4ZmIsIDB4YWMsIDB4MDEsIDB4ODgsIDB4YzcsIDB4ZmIsIDB4NzcsIDB4MzgKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDcwW10gX19pbml0Y29uc3QgPSB7CisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ODQsIDB4MjgsIDB4YmMsIDB4ZjAsIDB4MjMsIDB4ZWMsIDB4NmIsIDB4ZjMsCisrCTB4MWYsIDB4ZDksIDB4ZWYsIDB4YjIsIDB4MDMsIDB4ZmYsIDB4MDgsIDB4NzEKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwNzBbXSBfX2luaXRjb25zdCA9IHsKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTA3MFtdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGVlLCAweDMyLCAweDAwCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTA3MFtdIF9faW5pdGNvbnN0ID0geworKwkweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAorKwkweDg4LCAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAweDhmLAorKwkweDkwLCAweDkxLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LAorKwkweDk4LCAweDk5LCAweDlhLCAweDliLCAweDljLCAweDlkLCAweDllLCAweDlmCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gbWlzYyAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwNzFbXSBfX2luaXRjb25zdCA9IHsKKysJMHhkYSwgMHg5MiwgMHhiZiwgMHg3NywgMHg4MCwgMHg5NCwgMHgxNywgMHg4MywKKysJMHhhYSwgMHgyYywgMHhmYiwgMHg3YiwgMHg2NCwgMHg0MywgMHhmZSwgMHhlOCwKKysJMHgyMCwgMHg2NiwgMHhiOCwgMHhmYywgMHgwMywgMHhmYiwgMHgzYiwgMHg3YiwKKysJMHg3ZiwgMHgxZiwgMHhjZiwgMHg0MSwgMHhlYiwgMHhkMywgMHgyOSwgMHhiZQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQwNzFbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJMHgxMywgMHg5ZiwgMHhkZiwgMHg2NCwgMHg3NCwgMHhlYSwgMHgyNCwgMHhmNSwKKysJMHg0OSwgMHhiMCwgMHg3NSwgMHg4MiwgMHg1ZiwgMHgyYywgMHg3NiwgMHgyMAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzA3MVtdIF9faW5pdGNvbnN0ID0geworKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX25vbmNlMDcxW10gX19pbml0Y29uc3QgPSB7CisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZWUsIDB4MzIsIDB4MDAKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfa2V5MDcxW10gX19pbml0Y29uc3QgPSB7CisrCTB4ODAsIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCisrCTB4ODgsIDB4ODksIDB4OGEsIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsCisrCTB4OTAsIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsCisrCTB4OTgsIDB4OTksIDB4OWEsIDB4OWIsIDB4OWMsIDB4OWQsIDB4OWUsIDB4OWYKKyt9OworKworKy8qIHd5Y2hlcHJvb2YgLSBtaXNjICovCisrc3RhdGljIGNvbnN0IHU4IGVuY19pbnB1dDA3MltdIF9faW5pdGNvbnN0ID0geworKwkweGRhLCAweDkyLCAweGJmLCAweDc3LCAweDgwLCAweDk0LCAweDE3LCAweDgzLAorKwkweGFhLCAweDJjLCAweGZiLCAweDdiLCAweDY0LCAweDQzLCAweGZlLCAweGU4LAorKwkweDIwLCAweDY2LCAweGI4LCAweGZjLCAweDAzLCAweGZiLCAweDNiLCAweDdiLAorKwkweDdmLCAweDFmLCAweGNmLCAweDQxLCAweGViLCAweGQzLCAweDI5LCAweGJlLAorKwkweDFjLCAweDQzLCAweDI0LCAweGE0LCAweDFlLCAweGRlLCAweGZjLCAweGZlLAorKwkweDc0LCAweDMyLCAweDVlLCAweDQ5LCAweGExLCAweDVjLCAweDhjLCAweDJiLAorKwkweGY3LCAweDk2LCAweDAwLCAweDJkLCAweGVjLCAweDVlLCAweDI2LCAweGU1LAorKwkweGFjLCAweDQ4LCAweDRkLCAweGQ4LCAweGZlLCAweDg3LCAweGZkLCAweGJkCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX291dHB1dDA3MltdIF9faW5pdGNvbnN0ID0geworKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkweGJiLCAweGFkLCAweDhkLCAweDg2LCAweDNiLCAweDgzLCAweDVhLCAweDhlLAorKwkweDg2LCAweDY0LCAweGZkLCAweDFkLCAweDQ1LCAweDY2LCAweGI2LCAweGI0CisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2Fzc29jMDcyW10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UwNzJbXSBfX2luaXRjb25zdCA9IHsKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhlZSwgMHgzMiwgMHgwMAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkwNzJbXSBfX2luaXRjb25zdCA9IHsKKysJMHg4MCwgMHg4MSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywKKysJMHg4OCwgMHg4OSwgMHg4YSwgMHg4YiwgMHg4YywgMHg4ZCwgMHg4ZSwgMHg4ZiwKKysJMHg5MCwgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywKKysJMHg5OCwgMHg5OSwgMHg5YSwgMHg5YiwgMHg5YywgMHg5ZCwgMHg5ZSwgMHg5ZgorK307CisrCisrLyogd3ljaGVwcm9vZiAtIG1pc2MgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDczW10gX19pbml0Y29uc3QgPSB7CisrCTB4ZGEsIDB4OTIsIDB4YmYsIDB4NzcsIDB4ODAsIDB4OTQsIDB4MTcsIDB4ODMsCisrCTB4YWEsIDB4MmMsIDB4ZmIsIDB4N2IsIDB4NjQsIDB4NDMsIDB4ZmUsIDB4ZTgsCisrCTB4MjAsIDB4NjYsIDB4YjgsIDB4ZmMsIDB4MDMsIDB4ZmIsIDB4M2IsIDB4N2IsCisrCTB4N2YsIDB4MWYsIDB4Y2YsIDB4NDEsIDB4ZWIsIDB4ZDMsIDB4MjksIDB4YmUsCisrCTB4MWMsIDB4NDMsIDB4MjQsIDB4YTQsIDB4MWUsIDB4ZGUsIDB4ZmMsIDB4ZmUsCisrCTB4NzQsIDB4MzIsIDB4NWUsIDB4NDksIDB4YTEsIDB4NWMsIDB4OGMsIDB4MmIsCisrCTB4ZjcsIDB4OTYsIDB4MDAsIDB4MmQsIDB4ZWMsIDB4NWUsIDB4MjYsIDB4ZTUsCisrCTB4YWMsIDB4NDgsIDB4NGQsIDB4ZDgsIDB4ZmUsIDB4ODcsIDB4ZmQsIDB4YmQsCisrCTB4ODUsIDB4MjUsIDB4YmIsIDB4YmQsIDB4NDIsIDB4NjksIDB4YmYsIDB4ZmEsCisrCTB4YWEsIDB4ZDgsIDB4MGQsIDB4OGYsIDB4YWMsIDB4ZjYsIDB4ODUsIDB4MDIsCisrCTB4NDgsIDB4YjMsIDB4YTUsIDB4MWQsIDB4ZTYsIDB4MGMsIDB4MDUsIDB4ODAsCisrCTB4NjcsIDB4ZTUsIDB4YjYsIDB4YzcsIDB4NDUsIDB4OTMsIDB4OTIsIDB4YzQsCisrCTB4NjQsIDB4NGQsIDB4MGQsIDB4N2IsIDB4YjYsIDB4NDYsIDB4ZWYsIDB4YzcsCisrCTB4MGMsIDB4MGYsIDB4NGUsIDB4YzksIDB4MWQsIDB4YzMsIDB4NDgsIDB4ZWQsCisrCTB4ODgsIDB4MmMsIDB4ZjQsIDB4M2EsIDB4NzYsIDB4OTIsIDB4ZWQsIDB4MzgsCisrCTB4MDQsIDB4NTMsIDB4ZmUsIDB4NzcsIDB4MzgsIDB4MDQsIDB4ODgsIDB4YzcKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDczW10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4NDIsIDB4ZjIsIDB4MzUsIDB4NDIsIDB4OTcsIDB4ODQsIDB4OWEsIDB4NTEsCisrCTB4MWQsIDB4NTMsIDB4ZTUsIDB4NTcsIDB4MTcsIDB4NzIsIDB4ZjcsIDB4MWYKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwNzNbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTA3M1tdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGVlLCAweDMyLCAweDAwCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTA3M1tdIF9faW5pdGNvbnN0ID0geworKwkweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAorKwkweDg4LCAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAweDhmLAorKwkweDkwLCAweDkxLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LAorKwkweDk4LCAweDk5LCAweDlhLCAweDliLCAweDljLCAweDlkLCAweDllLCAweDlmCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gY2hlY2tpbmcgZm9yIGludCBvdmVyZmxvd3MgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDc2W10gX19pbml0Y29uc3QgPSB7CisrCTB4MWIsIDB4OTksIDB4NmYsIDB4OWEsIDB4M2MsIDB4Y2MsIDB4NjcsIDB4ODUsCisrCTB4ZGUsIDB4MjIsIDB4ZmYsIDB4NWIsIDB4OGEsIDB4ZGQsIDB4OTUsIDB4MDIsCisrCTB4Y2UsIDB4MDMsIDB4YTAsIDB4ZmEsIDB4ZjUsIDB4OTksIDB4MmEsIDB4MDksCisrCTB4NTIsIDB4MmMsIDB4ZGQsIDB4MTIsIDB4MDYsIDB4ZDIsIDB4MjAsIDB4YjgsCisrCTB4ZjgsIDB4YmQsIDB4MDcsIDB4ZDEsIDB4ZjEsIDB4ZjUsIDB4YTEsIDB4YmQsCisrCTB4OWEsIDB4NzEsIDB4ZDEsIDB4MWMsIDB4N2YsIDB4NTcsIDB4OWIsIDB4ODUsCisrCTB4NTgsIDB4MTgsIDB4YzAsIDB4OGQsIDB4NGQsIDB4ZTAsIDB4MzYsIDB4MzksCisrCTB4MzEsIDB4ODMsIDB4YjcsIDB4ZjUsIDB4OTAsIDB4YjMsIDB4MzUsIDB4YWUsCisrCTB4ZDgsIDB4ZGUsIDB4NWIsIDB4NTcsIDB4YjEsIDB4M2MsIDB4NWYsIDB4ZWQsCisrCTB4ZTIsIDB4NDQsIDB4MWMsIDB4M2UsIDB4MTgsIDB4NGEsIDB4YTksIDB4ZDQsCisrCTB4NmUsIDB4NjEsIDB4NTksIDB4ODUsIDB4MDYsIDB4YjMsIDB4ZTEsIDB4MWMsCisrCTB4NDMsIDB4YzYsIDB4MmMsIDB4YmMsIDB4YWMsIDB4ZWMsIDB4ZWQsIDB4MzMsCisrCTB4MTksIDB4MDgsIDB4NzUsIDB4YjAsIDB4MTIsIDB4MjEsIDB4OGIsIDB4MTksCisrCTB4MzAsIDB4ZmIsIDB4N2MsIDB4MzgsIDB4ZWMsIDB4NDUsIDB4YWMsIDB4MTEsCisrCTB4YzMsIDB4NTMsIDB4ZDAsIDB4Y2YsIDB4OTMsIDB4OGQsIDB4Y2MsIDB4YjksCisrCTB4ZWYsIDB4YWQsIDB4OGYsIDB4ZWQsIDB4YmUsIDB4NDYsIDB4ZGEsIDB4YTUKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDc2W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4NGIsIDB4MGIsIDB4ZGEsIDB4OGEsIDB4ZDAsIDB4NDMsIDB4ODMsIDB4MGQsCisrCTB4ODMsIDB4MTksIDB4YWIsIDB4ODIsIDB4YzUsIDB4MGMsIDB4NzYsIDB4NjMKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwNzZbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTA3NltdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweGI0LCAweGYwCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTA3NltdIF9faW5pdGNvbnN0ID0geworKwkweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLAorKwkweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLAorKwkweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLAorKwkweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gY2hlY2tpbmcgZm9yIGludCBvdmVyZmxvd3MgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDc3W10gX19pbml0Y29uc3QgPSB7CisrCTB4ODYsIDB4Y2IsIDB4YWMsIDB4YWUsIDB4NGQsIDB4M2YsIDB4NzQsIDB4YWUsCisrCTB4MDEsIDB4MjEsIDB4M2UsIDB4MDUsIDB4NTEsIDB4Y2MsIDB4MTUsIDB4MTYsCisrCTB4MGUsIDB4YTEsIDB4YmUsIDB4ODQsIDB4MDgsIDB4ZTMsIDB4ZDUsIDB4ZDcsCisrCTB4NGYsIDB4MDEsIDB4NDYsIDB4NDksIDB4OTUsIDB4YTYsIDB4OWUsIDB4NjEsCisrCTB4NzYsIDB4Y2IsIDB4OWUsIDB4MDIsIDB4YjIsIDB4MjQsIDB4N2UsIDB4ZDIsCisrCTB4OTksIDB4ODksIDB4MmYsIDB4OTEsIDB4ODIsIDB4YTQsIDB4NWMsIDB4YWYsCisrCTB4NGMsIDB4NjksIDB4NDAsIDB4NTYsIDB4MTEsIDB4NzYsIDB4NmUsIDB4ZGYsCisrCTB4YWYsIDB4ZGMsIDB4MjgsIDB4NTUsIDB4MTksIDB4ZWEsIDB4MzAsIDB4NDgsCisrCTB4MGMsIDB4NDQsIDB4ZjAsIDB4NWUsIDB4NzgsIDB4MWUsIDB4YWMsIDB4ZjgsCisrCTB4ZmMsIDB4ZWMsIDB4YzcsIDB4MDksIDB4MGEsIDB4YmIsIDB4MjgsIDB4ZmEsCisrCTB4NWYsIDB4ZDUsIDB4ODUsIDB4YWMsIDB4OGMsIDB4ZGEsIDB4N2UsIDB4ODcsCisrCTB4NzIsIDB4ZTUsIDB4OTQsIDB4ZTQsIDB4Y2UsIDB4NmMsIDB4ODgsIDB4MzIsCisrCTB4ODEsIDB4OTMsIDB4MmUsIDB4MGYsIDB4ODksIDB4ZjgsIDB4NzcsIDB4YTEsCisrCTB4ZjAsIDB4NGQsIDB4OWMsIDB4MzIsIDB4YjAsIDB4NmMsIDB4ZjksIDB4MGIsCisrCTB4MGUsIDB4NzYsIDB4MmIsIDB4NDMsIDB4MGMsIDB4NGQsIDB4NTEsIDB4N2MsCisrCTB4OTcsIDB4MTAsIDB4NzAsIDB4NjgsIDB4ZjQsIDB4OTgsIDB4ZWYsIDB4N2YKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDc3W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4NGIsIDB4YzksIDB4OGYsIDB4NzIsIDB4YzQsIDB4OTQsIDB4YzIsIDB4YTQsCisrCTB4M2MsIDB4MmIsIDB4MTUsIDB4YTEsIDB4MDQsIDB4M2YsIDB4MWMsIDB4ZmEKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwNzdbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTA3N1tdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweGZiLCAweDY2CisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTA3N1tdIF9faW5pdGNvbnN0ID0geworKwkweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLAorKwkweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLAorKwkweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLAorKwkweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gY2hlY2tpbmcgZm9yIGludCBvdmVyZmxvd3MgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDc4W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmEsIDB4YjEsIDB4Y2QsIDB4ZGYsIDB4NGYsIDB4ZTEsIDB4OTgsIDB4ZWYsCisrCTB4NjMsIDB4YWQsIDB4ZDgsIDB4ODEsIDB4ZDYsIDB4ZWEsIDB4ZDYsIDB4YzUsCisrCTB4NzYsIDB4MzcsIDB4YmIsIDB4ZTksIDB4MjAsIDB4MTgsIDB4Y2EsIDB4N2MsCisrCTB4MGIsIDB4OTYsIDB4ZmIsIDB4YTAsIDB4ODcsIDB4MWUsIDB4OTMsIDB4MmQsCisrCTB4YjEsIDB4ZmIsIDB4ZjksIDB4MDcsIDB4NjEsIDB4YmUsIDB4MjUsIDB4ZGYsCisrCTB4OGQsIDB4ZmEsIDB4ZjksIDB4MzEsIDB4Y2UsIDB4NTcsIDB4NTcsIDB4ZTYsCisrCTB4MTcsIDB4YjMsIDB4ZDcsIDB4YTksIDB4ZjAsIDB4YmYsIDB4MGYsIDB4ZmUsCisrCTB4NWQsIDB4NTksIDB4MWEsIDB4MzMsIDB4YzEsIDB4NDMsIDB4YjgsIDB4ZjUsCisrCTB4M2YsIDB4ZDAsIDB4YjUsIDB4YTEsIDB4OTYsIDB4MDksIDB4ZmQsIDB4NjIsCisrCTB4ZTUsIDB4YzIsIDB4NTEsIDB4YTQsIDB4MjgsIDB4MWEsIDB4MjAsIDB4MGMsCisrCTB4ZmQsIDB4YzMsIDB4NGYsIDB4MjgsIDB4MTcsIDB4MTAsIDB4NDAsIDB4NmYsCisrCTB4NGUsIDB4MzcsIDB4NjIsIDB4NTQsIDB4NDYsIDB4ZmYsIDB4NmUsIDB4ZjIsCisrCTB4MjQsIDB4OTEsIDB4M2QsIDB4ZWIsIDB4MGQsIDB4ODksIDB4YWYsIDB4MzMsCisrCTB4NzEsIDB4MjgsIDB4ZTMsIDB4ZDEsIDB4NTUsIDB4ZDEsIDB4NmQsIDB4M2UsCisrCTB4YzMsIDB4MjQsIDB4NjAsIDB4NDEsIDB4NDMsIDB4MjEsIDB4NDMsIDB4ZTksCisrCTB4YWIsIDB4M2EsIDB4NmQsIDB4MmMsIDB4Y2MsIDB4MmYsIDB4NGQsIDB4NjIKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDc4W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZjcsIDB4ZTksIDB4ZTEsIDB4NTEsIDB4YjAsIDB4MjUsIDB4MzMsIDB4YzcsCisrCTB4NDYsIDB4NTgsIDB4YmYsIDB4YzcsIDB4NzMsIDB4N2MsIDB4NjgsIDB4MGQKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwNzhbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTA3OFtdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweGJiLCAweDkwCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTA3OFtdIF9faW5pdGNvbnN0ID0geworKwkweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLAorKwkweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLAorKwkweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLAorKwkweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gY2hlY2tpbmcgZm9yIGludCBvdmVyZmxvd3MgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDc5W10gX19pbml0Y29uc3QgPSB7CisrCTB4MjIsIDB4NzIsIDB4MDIsIDB4YmUsIDB4N2YsIDB4MzUsIDB4MTUsIDB4ZTksCisrCTB4ZDEsIDB4YzAsIDB4MmUsIDB4ZWEsIDB4MmYsIDB4MTksIDB4NTAsIDB4YjYsCisrCTB4NDgsIDB4MWIsIDB4MDQsIDB4OGEsIDB4NGMsIDB4OTEsIDB4NTAsIDB4NmMsCisrCTB4YjQsIDB4MGQsIDB4NTAsIDB4NGUsIDB4NmMsIDB4OTQsIDB4OWYsIDB4ODIsCisrCTB4ZDEsIDB4OTcsIDB4YzIsIDB4NWEsIDB4ZDEsIDB4N2QsIDB4YzcsIDB4MjEsCisrCTB4NjUsIDB4MTEsIDB4MjUsIDB4NzgsIDB4MmEsIDB4YzcsIDB4YTcsIDB4MTIsCisrCTB4NDcsIDB4ZmUsIDB4YWUsIDB4ZjMsIDB4MmYsIDB4MWYsIDB4MjUsIDB4MGMsCisrCTB4ZTQsIDB4YmIsIDB4OGYsIDB4NzksIDB4YWMsIDB4YWEsIDB4MTcsIDB4OWQsCisrCTB4NDUsIDB4YTcsIDB4YjAsIDB4NTQsIDB4NWYsIDB4MDksIDB4MjQsIDB4MzIsCisrCTB4NWUsIDB4ZmEsIDB4ODcsIDB4ZDUsIDB4ZTQsIDB4NDEsIDB4ZDIsIDB4ODQsCisrCTB4NzgsIDB4YzYsIDB4MWYsIDB4MjIsIDB4MjMsIDB4ZWUsIDB4NjcsIDB4YzMsCisrCTB4YjQsIDB4MWYsIDB4NDMsIDB4OTQsIDB4NTMsIDB4NWUsIDB4MmEsIDB4MjQsCisrCTB4MzYsIDB4OWEsIDB4MmUsIDB4MTYsIDB4NjEsIDB4M2MsIDB4NDUsIDB4OTQsCisrCTB4OTAsIDB4YzEsIDB4NGYsIDB4YjEsIDB4ZDcsIDB4NTUsIDB4ZmUsIDB4NTMsCisrCTB4ZmIsIDB4ZTEsIDB4ZWUsIDB4NDUsIDB4YjEsIDB4YjIsIDB4MWYsIDB4NzEsCisrCTB4NjIsIDB4ZTIsIDB4ZmMsIDB4YWEsIDB4NzQsIDB4MmEsIDB4YmUsIDB4ZmQKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDc5W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4NzksIDB4NWIsIDB4Y2YsIDB4ZjYsIDB4NDcsIDB4YzUsIDB4NTMsIDB4YzIsCisrCTB4ZTQsIDB4ZWIsIDB4NmUsIDB4MGUsIDB4YWYsIDB4ZDksIDB4ZTAsIDB4NGUKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwNzlbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTA3OVtdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDQ4LCAweDRhCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTA3OVtdIF9faW5pdGNvbnN0ID0geworKwkweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLAorKwkweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLAorKwkweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLAorKwkweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gY2hlY2tpbmcgZm9yIGludCBvdmVyZmxvd3MgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDgwW10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmEsIDB4ZTUsIDB4ODMsIDB4NDUsIDB4YzEsIDB4NmMsIDB4YjAsIDB4ZjUsCisrCTB4Y2MsIDB4NTMsIDB4N2YsIDB4MmIsIDB4MWIsIDB4MzQsIDB4NjksIDB4YzksCisrCTB4NjksIDB4NDYsIDB4M2IsIDB4M2UsIDB4YTcsIDB4MWIsIDB4Y2YsIDB4NmIsCisrCTB4OTgsIDB4ZDYsIDB4NjksIDB4YTgsIDB4ZTYsIDB4MGUsIDB4MDQsIDB4ZmMsCisrCTB4MDgsIDB4ZDUsIDB4ZmQsIDB4MDYsIDB4OWMsIDB4MzYsIDB4MjYsIDB4MzgsCisrCTB4ZTMsIDB4NDAsIDB4MGUsIDB4ZjQsIDB4Y2IsIDB4MjQsIDB4MmUsIDB4MjcsCisrCTB4ZTIsIDB4MjQsIDB4NWUsIDB4NjgsIDB4Y2IsIDB4OWUsIDB4YzUsIDB4ODMsCisrCTB4ZGEsIDB4NTMsIDB4NDAsIDB4YjEsIDB4MmUsIDB4ZGYsIDB4NDIsIDB4M2IsCisrCTB4NzMsIDB4MjYsIDB4YWQsIDB4MjAsIDB4ZmUsIDB4ZWIsIDB4NTcsIDB4ZGEsCisrCTB4Y2EsIDB4MmUsIDB4MDQsIDB4NjcsIDB4YTMsIDB4MjgsIDB4OTksIDB4YjQsCisrCTB4MmQsIDB4ZjgsIDB4ZTUsIDB4NmQsIDB4ODQsIDB4ZTAsIDB4MDYsIDB4YmMsCisrCTB4OGEsIDB4N2EsIDB4Y2MsIDB4NzMsIDB4MWUsIDB4N2MsIDB4MWYsIDB4NmIsCisrCTB4ZWMsIDB4YjUsIDB4NzEsIDB4OWYsIDB4NzAsIDB4NzcsIDB4ZjAsIDB4ZDQsCisrCTB4ZjQsIDB4YzYsIDB4MWEsIDB4YjEsIDB4MWUsIDB4YmEsIDB4YzEsIDB4MDAsCisrCTB4MTgsIDB4MDEsIDB4Y2UsIDB4MzMsIDB4YzQsIDB4ZTQsIDB4YTcsIDB4N2QsCisrCTB4ODMsIDB4MWQsIDB4M2MsIDB4ZTMsIDB4NGUsIDB4ODQsIDB4MTAsIDB4ZTEKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDgwW10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4MTksIDB4NDYsIDB4ZDYsIDB4NTMsIDB4OTYsIDB4MGYsIDB4OTQsIDB4N2EsCisrCTB4NzQsIDB4ZDMsIDB4ZTgsIDB4MDksIDB4M2MsIDB4ZjQsIDB4ODUsIDB4MDIKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwODBbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTA4MFtdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDkzLCAweDJmLCAweDQwCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTA4MFtdIF9faW5pdGNvbnN0ID0geworKwkweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLAorKwkweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLAorKwkweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLAorKwkweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gY2hlY2tpbmcgZm9yIGludCBvdmVyZmxvd3MgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDgxW10gX19pbml0Y29uc3QgPSB7CisrCTB4ZWIsIDB4YjIsIDB4MTYsIDB4ZGQsIDB4ZDcsIDB4Y2EsIDB4NzAsIDB4OTIsCisrCTB4MTUsIDB4ZjUsIDB4MDMsIDB4ZGYsIDB4OWMsIDB4ZTYsIDB4M2MsIDB4NWMsCisrCTB4ZDIsIDB4MTksIDB4NGUsIDB4N2QsIDB4OTAsIDB4OTksIDB4ZTgsIDB4YTksCisrCTB4MGIsIDB4MmEsIDB4ZmEsIDB4YWQsIDB4NWUsIDB4YmEsIDB4MzUsIDB4MDYsCisrCTB4OTksIDB4MjUsIDB4YTYsIDB4MDMsIDB4ZmQsIDB4YmMsIDB4MzQsIDB4MWEsCisrCTB4YWUsIDB4ZDQsIDB4MTUsIDB4MDUsIDB4YjEsIDB4MDksIDB4NDEsIDB4ZmEsCisrCTB4MzgsIDB4NTYsIDB4YTcsIDB4ZTIsIDB4NDcsIDB4YjEsIDB4MDQsIDB4MDcsCisrCTB4MDksIDB4NzQsIDB4NmMsIDB4ZmMsIDB4MjAsIDB4OTYsIDB4Y2EsIDB4YTYsCisrCTB4MzEsIDB4YjIsIDB4ZmYsIDB4ZjQsIDB4MWMsIDB4MjUsIDB4MDUsIDB4MDYsCisrCTB4ZDgsIDB4ODksIDB4YzEsIDB4YzksIDB4MDYsIDB4NzEsIDB4YWQsIDB4ZTgsCisrCTB4NTMsIDB4ZWUsIDB4NjMsIDB4OTQsIDB4YzEsIDB4OTEsIDB4OTIsIDB4YTUsCisrCTB4Y2YsIDB4MzcsIDB4MTAsIDB4ZDEsIDB4MDcsIDB4MzAsIDB4OTksIDB4ZTUsCisrCTB4YmMsIDB4OTQsIDB4NjUsIDB4ODIsIDB4ZmMsIDB4MGYsIDB4YWIsIDB4OWYsCisrCTB4NTQsIDB4M2MsIDB4NzEsIDB4NmEsIDB4ZTIsIDB4NDgsIDB4NmEsIDB4ODYsCisrCTB4ODMsIDB4ZmQsIDB4Y2EsIDB4MzksIDB4ZDIsIDB4ZTEsIDB4NGYsIDB4MjMsCisrCTB4ZDAsIDB4MGEsIDB4NTgsIDB4MjYsIDB4NjQsIDB4ZjQsIDB4ZWMsIDB4YjEKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDgxW10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4MzYsIDB4YzMsIDB4MDAsIDB4MjksIDB4ODUsIDB4ZGQsIDB4MjEsIDB4YmEsCisrCTB4ZjgsIDB4OTUsIDB4ZDYsIDB4MzMsIDB4NTcsIDB4M2YsIDB4MTIsIDB4YzAKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwODFbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTA4MVtdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUyLCAweDkzLCAweDM1CisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTA4MVtdIF9faW5pdGNvbnN0ID0geworKwkweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLAorKwkweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLAorKwkweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLAorKwkweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMwCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gY2hlY2tpbmcgZm9yIGludCBvdmVyZmxvd3MgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDgyW10gX19pbml0Y29uc3QgPSB7CisrCTB4NDAsIDB4OGEsIDB4ZTYsIDB4ZWYsIDB4MWMsIDB4N2UsIDB4ZjAsIDB4ZmIsCisrCTB4MmMsIDB4MmQsIDB4NjEsIDB4MDgsIDB4MTYsIDB4ZmMsIDB4NzgsIDB4NDksCisrCTB4ZWYsIDB4YTUsIDB4OGYsIDB4NzgsIDB4MjcsIDB4M2YsIDB4NWYsIDB4MTYsCisrCTB4NmUsIDB4YTYsIDB4NWYsIDB4ODEsIDB4YjUsIDB4NzUsIDB4NzQsIDB4N2QsCisrCTB4MDMsIDB4NWIsIDB4MzAsIDB4NDAsIDB4ZmUsIDB4ZGUsIDB4MWUsIDB4YjksCisrCTB4NDUsIDB4OTcsIDB4ODgsIDB4NjYsIDB4OTcsIDB4ODgsIDB4NDAsIDB4OGUsCisrCTB4MDAsIDB4NDEsIDB4M2IsIDB4M2UsIDB4MzcsIDB4NmQsIDB4MTUsIDB4MmQsCisrCTB4MjAsIDB4NGEsIDB4YTIsIDB4YjcsIDB4YTgsIDB4MzUsIDB4NTgsIDB4ZmMsCisrCTB4ZDQsIDB4OGEsIDB4MGUsIDB4ZjcsIDB4YTIsIDB4NmIsIDB4MWMsIDB4ZDYsCisrCTB4ZDMsIDB4NWQsIDB4MjMsIDB4YjMsIDB4ZjUsIDB4ZGYsIDB4ZTAsIDB4Y2EsCisrCTB4NzcsIDB4YTQsIDB4Y2UsIDB4MzIsIDB4YjksIDB4NGEsIDB4YmYsIDB4ODMsCisrCTB4ZGEsIDB4MmEsIDB4ZWYsIDB4Y2EsIDB4ZjAsIDB4NjgsIDB4MzgsIDB4MDgsCisrCTB4NzksIDB4ZTgsIDB4OWYsIDB4YjAsIDB4YTMsIDB4ODIsIDB4OTUsIDB4OTUsCisrCTB4Y2YsIDB4NDQsIDB4YzMsIDB4ODUsIDB4MmEsIDB4ZTIsIDB4Y2MsIDB4NjYsCisrCTB4MmIsIDB4NjgsIDB4OWYsIDB4OTMsIDB4NTUsIDB4ZDksIDB4YzEsIDB4ODMsCisrCTB4ODAsIDB4MWYsIDB4NmEsIDB4Y2MsIDB4MzEsIDB4M2YsIDB4ODksIDB4MDcKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDgyW10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4NjUsIDB4MTQsIDB4NTEsIDB4OGUsIDB4MGEsIDB4MjYsIDB4NDEsIDB4NDIsCisrCTB4ZTAsIDB4YjcsIDB4MzUsIDB4MWYsIDB4OTYsIDB4N2YsIDB4YzIsIDB4YWUKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwODJbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTA4MltdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBlLCAweGY3LCAweGQ1CisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTA4MltdIF9faW5pdGNvbnN0ID0geworKwkweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAorKwkweDg4LCAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAweDhmLAorKwkweDkwLCAweDkxLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LAorKwkweDk4LCAweDk5LCAweDlhLCAweDliLCAweDljLCAweDlkLCAweDllLCAweDlmCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gY2hlY2tpbmcgZm9yIGludCBvdmVyZmxvd3MgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDgzW10gX19pbml0Y29uc3QgPSB7CisrCTB4MGEsIDB4MGEsIDB4MjQsIDB4NDksIDB4OWIsIDB4Y2EsIDB4ZGUsIDB4NTgsCisrCTB4Y2YsIDB4MTUsIDB4NzYsIDB4YzMsIDB4MTIsIDB4YWMsIDB4YTksIDB4ODQsCisrCTB4NzEsIDB4OGMsIDB4YjQsIDB4Y2MsIDB4N2UsIDB4MDEsIDB4NTMsIDB4ZjUsCisrCTB4YTksIDB4MDEsIDB4NTgsIDB4MTAsIDB4ODUsIDB4OTYsIDB4NDQsIDB4ZGYsCisrCTB4YzAsIDB4MjEsIDB4MTcsIDB4NGUsIDB4MGIsIDB4MDYsIDB4MGEsIDB4MzksCisrCTB4NzQsIDB4NDgsIDB4ZGUsIDB4OGIsIDB4NDgsIDB4NGEsIDB4ODYsIDB4MDMsCisrCTB4YmUsIDB4NjgsIDB4MGEsIDB4NjksIDB4MzQsIDB4YzAsIDB4OTAsIDB4NmYsCisrCTB4MzAsIDB4ZGQsIDB4MTcsIDB4ZWEsIDB4ZTIsIDB4ZDQsIDB4YzUsIDB4ZmEsCisrCTB4YTcsIDB4NzcsIDB4ZjgsIDB4Y2EsIDB4NTMsIDB4MzcsIDB4MGUsIDB4MDgsCisrCTB4MzMsIDB4MWIsIDB4ODgsIDB4YzMsIDB4NDIsIDB4YmEsIDB4YzksIDB4NTksCisrCTB4NzgsIDB4N2IsIDB4YmIsIDB4MzMsIDB4OTMsIDB4MGUsIDB4M2IsIDB4NTYsCisrCTB4YmUsIDB4ODYsIDB4ZGEsIDB4N2YsIDB4MmEsIDB4NmUsIDB4YjEsIDB4ZjksCisrCTB4NDAsIDB4ODksIDB4ZDEsIDB4ZDEsIDB4ODEsIDB4MDcsIDB4NGQsIDB4NDMsCisrCTB4MDIsIDB4ZjgsIDB4ZTAsIDB4NTUsIDB4MmQsIDB4MGQsIDB4ZTEsIDB4ZmEsCisrCTB4YjMsIDB4MDYsIDB4YTIsIDB4MWIsIDB4NDIsIDB4ZDQsIDB4YzMsIDB4YmEsCisrCTB4NmUsIDB4NmYsIDB4MGMsIDB4YmMsIDB4YzgsIDB4MWUsIDB4ODcsIDB4N2EKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDgzW10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4NGMsIDB4MTksIDB4NGQsIDB4YTYsIDB4YTksIDB4OWYsIDB4ZDYsIDB4NWIsCisrCTB4NDAsIDB4ZTksIDB4Y2EsIDB4ZDcsIDB4OTgsIDB4ZjQsIDB4NGIsIDB4MTkKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwODNbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTA4M1tdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNkLCAweGZjLCAweGU0CisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTA4M1tdIF9faW5pdGNvbnN0ID0geworKwkweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAorKwkweDg4LCAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAweDhmLAorKwkweDkwLCAweDkxLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LAorKwkweDk4LCAweDk5LCAweDlhLCAweDliLCAweDljLCAweDlkLCAweDllLCAweDlmCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gY2hlY2tpbmcgZm9yIGludCBvdmVyZmxvd3MgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDg0W10gX19pbml0Y29uc3QgPSB7CisrCTB4NGEsIDB4MGEsIDB4YWYsIDB4ZjgsIDB4NDksIDB4NDcsIDB4MjksIDB4MTgsCisrCTB4ODYsIDB4OTEsIDB4NzAsIDB4MTMsIDB4NDAsIDB4ZjMsIDB4Y2UsIDB4MmIsCisrCTB4OGEsIDB4NzgsIDB4ZWUsIDB4ZDMsIDB4YTAsIDB4ZjAsIDB4NjUsIDB4OTksCisrCTB4NGIsIDB4NzIsIDB4NDgsIDB4NGUsIDB4NzksIDB4OTEsIDB4ZDIsIDB4NWMsCisrCTB4MjksIDB4YWEsIDB4MDcsIDB4NWUsIDB4YjEsIDB4ZmMsIDB4MTYsIDB4ZGUsCisrCTB4OTMsIDB4ZmUsIDB4MDYsIDB4OTAsIDB4NTgsIDB4MTEsIDB4MmEsIDB4YjIsCisrCTB4ODQsIDB4YTMsIDB4ZWQsIDB4MTgsIDB4NzgsIDB4MDMsIDB4MjYsIDB4ZDEsCisrCTB4MjUsIDB4OGEsIDB4NDcsIDB4MjIsIDB4MmYsIDB4YTYsIDB4MzMsIDB4ZDgsCisrCTB4YjIsIDB4OWYsIDB4M2IsIDB4ZDksIDB4MTUsIDB4MGIsIDB4MjMsIDB4OWIsCisrCTB4MTUsIDB4NDYsIDB4YzIsIDB4YmIsIDB4OWIsIDB4OWYsIDB4NDEsIDB4MGYsCisrCTB4ZWIsIDB4ZWEsIDB4ZDMsIDB4OTYsIDB4MDAsIDB4MGUsIDB4ZTQsIDB4NzcsCisrCTB4NzAsIDB4MTUsIDB4MzIsIDB4YzMsIDB4ZDAsIDB4ZjUsIDB4ZmIsIDB4ZjgsCisrCTB4OTUsIDB4ZDIsIDB4ODAsIDB4MTksIDB4NmQsIDB4MmYsIDB4NzMsIDB4N2MsCisrCTB4NWUsIDB4OWYsIDB4ZWMsIDB4NTAsIDB4ZDksIDB4MmIsIDB4YjAsIDB4ZGYsCisrCTB4NWQsIDB4N2UsIDB4NTEsIDB4M2IsIDB4ZTUsIDB4YjgsIDB4ZWEsIDB4OTcsCisrCTB4MTMsIDB4MTAsIDB4ZDUsIDB4YmYsIDB4MTYsIDB4YmEsIDB4N2EsIDB4ZWUKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDg0W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4YzgsIDB4YWUsIDB4NzcsIDB4ODgsIDB4Y2QsIDB4MjgsIDB4NzQsIDB4YWIsCisrCTB4YzEsIDB4MzgsIDB4NTQsIDB4MWUsIDB4MTEsIDB4ZmQsIDB4MDUsIDB4ODcKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwODRbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTA4NFtdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg0LCAweDg2LCAweGE4CisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTA4NFtdIF9faW5pdGNvbnN0ID0geworKwkweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAorKwkweDg4LCAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAweDhmLAorKwkweDkwLCAweDkxLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LAorKwkweDk4LCAweDk5LCAweDlhLCAweDliLCAweDljLCAweDlkLCAweDllLCAweDlmCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gY2hlY2tpbmcgZm9yIGludCBvdmVyZmxvd3MgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDg1W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4OTQsIDB4MjgsIDB4ZDAsIDB4NzksIDB4MzUsIDB4MWYsIDB4NjYsCisrCTB4NWMsIDB4ZDAsIDB4MDEsIDB4MzUsIDB4NDMsIDB4MTksIDB4ODcsIDB4NWMsCisrCTB4NzgsIDB4M2QsIDB4MzUsIDB4ZjYsIDB4MTMsIDB4ZTYsIDB4ZDksIDB4MDksCisrCTB4M2QsIDB4MzgsIDB4ZTksIDB4NzUsIDB4YzMsIDB4OGYsIDB4ZTMsIDB4YjgsCisrCTB4OWYsIDB4N2EsIDB4ZWQsIDB4MzUsIDB4Y2IsIDB4NWEsIDB4MmYsIDB4Y2EsCisrCTB4YTAsIDB4MzQsIDB4NmUsIDB4ZmIsIDB4OTMsIDB4NjUsIDB4NTQsIDB4NjQsCisrCTB4OWMsIDB4ZjYsIDB4MzcsIDB4ODEsIDB4NzEsIDB4ZWEsIDB4ZTQsIDB4MzksCisrCTB4NmUsIDB4YTEsIDB4NWQsIDB4YzIsIDB4NDAsIDB4ZDEsIDB4YWIsIDB4ZjQsCisrCTB4NDcsIDB4MmQsIDB4OTAsIDB4OTYsIDB4NTIsIDB4NGYsIDB4YTEsIDB4YjIsCisrCTB4YjAsIDB4MjMsIDB4YjgsIDB4YjIsIDB4ODgsIDB4MjIsIDB4MjcsIDB4NzMsCisrCTB4ZDQsIDB4ZDIsIDB4MDYsIDB4NjEsIDB4NmYsIDB4OTIsIDB4OTMsIDB4ZjYsCisrCTB4NWIsIDB4NDUsIDB4ZGIsIDB4YmMsIDB4NzQsIDB4ZTcsIDB4YzIsIDB4ZWQsCisrCTB4ZmIsIDB4Y2IsIDB4YmYsIDB4MWMsIDB4ZmIsIDB4NjcsIDB4OWIsIDB4YjcsCisrCTB4MzksIDB4YTUsIDB4ODYsIDB4MmQsIDB4ZTIsIDB4YmMsIDB4YjksIDB4MzcsCisrCTB4ZjcsIDB4NGQsIDB4NWIsIDB4ZjgsIDB4NjcsIDB4MWMsIDB4NWEsIDB4OGEsCisrCTB4NTAsIDB4OTIsIDB4ZjYsIDB4MWQsIDB4NTQsIDB4YzksIDB4YWEsIDB4NWIKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDg1W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4OTMsIDB4M2EsIDB4NTEsIDB4NjMsIDB4YzcsIDB4ZjYsIDB4MjMsIDB4NjgsCisrCTB4MzIsIDB4N2IsIDB4M2YsIDB4YmMsIDB4MTAsIDB4MzYsIDB4YzksIDB4NDMKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwODVbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTA4NVtdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDRjLCAweDJkLCAweDUyCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTA4NVtdIF9faW5pdGNvbnN0ID0geworKwkweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAorKwkweDg4LCAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAweDhmLAorKwkweDkwLCAweDkxLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LAorKwkweDk4LCAweDk5LCAweDlhLCAweDliLCAweDljLCAweDlkLCAweDllLCAweDlmCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gZWRnZSBjYXNlIGludGVybWVkaWF0ZSBzdW1zIGluIHBvbHkxMzA1ICovCisrc3RhdGljIGNvbnN0IHU4IGVuY19pbnB1dDA5M1tdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDUyLCAweDM1LCAweGQyLCAweGE5LCAweDE5LCAweGYyLCAweDhkLAorKwkweDNkLCAweGI3LCAweDY2LCAweDRhLCAweDM0LCAweGFlLCAweDZiLCAweDQ0LAorKwkweDRkLCAweDNkLCAweDM1LCAweGY2LCAweDEzLCAweGU2LCAweGQ5LCAweDA5LAorKwkweDNkLCAweDM4LCAweGU5LCAweDc1LCAweGMzLCAweDhmLCAweGUzLCAweGI4LAorKwkweDViLCAweDhiLCAweDk0LCAweDUwLCAweDllLCAweDJiLCAweDc0LCAweGEzLAorKwkweDZkLCAweDM0LCAweDZlLCAweDMzLCAweGQ1LCAweDcyLCAweDY1LCAweDliLAorKwkweGE5LCAweGY2LCAweDM3LCAweDgxLCAweDcxLCAweGVhLCAweGU0LCAweDM5LAorKwkweDZlLCAweGExLCAweDVkLCAweGMyLCAweDQwLCAweGQxLCAweGFiLCAweGY0LAorKwkweDgzLCAweGRjLCAweGU5LCAweGYzLCAweDA3LCAweDNlLCAweGZhLCAweGRiLAorKwkweDdkLCAweDIzLCAweGI4LCAweDdhLCAweGNlLCAweDM1LCAweDE2LCAweDhjCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX291dHB1dDA5M1tdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDM5LCAweGUyLCAweGZkLCAweDJmLCAweGQzLCAweDEyLCAweDE0LAorKwkweDllLCAweDk4LCAweDk4LCAweDgwLCAweDg4LCAweDQ4LCAweDEzLCAweGU3LAorKwkweGNhLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDNiLCAweDBlLCAweDg2LCAweDlhLCAweGFhLCAweDhlLCAweGE0LCAweDk2LAorKwkweDMyLCAweGZmLCAweGZmLCAweDM3LCAweGI5LCAweGU4LCAweGNlLCAweDAwLAorKwkweGNhLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDNiLCAweDBlLCAweDg2LCAweDlhLCAweGFhLCAweDhlLCAweGE0LCAweDk2LAorKwkweDMyLCAweGZmLCAweGZmLCAweDM3LCAweGI5LCAweGU4LCAweGNlLCAweDAwLAorKwkweGE1LCAweDE5LCAweGFjLCAweDFhLCAweDM1LCAweGI0LCAweGE1LCAweDc3LAorKwkweDg3LCAweDUxLCAweDBhLCAweGY3LCAweDhkLCAweDhkLCAweDIwLCAweDBhCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2Fzc29jMDkzW10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UwOTNbXSBfX2luaXRjb25zdCA9IHsKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg0YywgMHgyZCwgMHg1MgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkwOTNbXSBfX2luaXRjb25zdCA9IHsKKysJMHg4MCwgMHg4MSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywKKysJMHg4OCwgMHg4OSwgMHg4YSwgMHg4YiwgMHg4YywgMHg4ZCwgMHg4ZSwgMHg4ZiwKKysJMHg5MCwgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywKKysJMHg5OCwgMHg5OSwgMHg5YSwgMHg5YiwgMHg5YywgMHg5ZCwgMHg5ZSwgMHg5ZgorK307CisrCisrLyogd3ljaGVwcm9vZiAtIGVkZ2UgY2FzZSBpbnRlcm1lZGlhdGUgc3VtcyBpbiBwb2x5MTMwNSAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwOTRbXSBfX2luaXRjb25zdCA9IHsKKysJMHhkMywgMHg5NCwgMHgyOCwgMHhkMCwgMHg3OSwgMHgzNSwgMHgxZiwgMHg2NiwKKysJMHg1YywgMHhkMCwgMHgwMSwgMHgzNSwgMHg0MywgMHgxOSwgMHg4NywgMHg1YywKKysJMHhlNSwgMHhkYSwgMHg3OCwgMHg3NiwgMHg2ZiwgMHhhMSwgMHg5MiwgMHg5MCwKKysJMHhjMCwgMHgzMSwgMHhmNywgMHg1MiwgMHgwOCwgMHg1MCwgMHg2NywgMHg0NSwKKysJMHhhZSwgMHg3YSwgMHhlZCwgMHgzNSwgMHhjYiwgMHg1YSwgMHgyZiwgMHhjYSwKKysJMHhhMCwgMHgzNCwgMHg2ZSwgMHhmYiwgMHg5MywgMHg2NSwgMHg1NCwgMHg2NCwKKysJMHg0OSwgMHg2ZCwgMHhkZSwgMHhiMCwgMHg1NSwgMHgwOSwgMHhjNiwgMHhlZiwKKysJMHhmZiwgMHhhYiwgMHg3NSwgMHhlYiwgMHgyZCwgMHhmNCwgMHhhYiwgMHgwOSwKKysJMHg3NiwgMHgyZCwgMHg5MCwgMHg5NiwgMHg1MiwgMHg0ZiwgMHhhMSwgMHhiMiwKKysJMHhiMCwgMHgyMywgMHhiOCwgMHhiMiwgMHg4OCwgMHgyMiwgMHgyNywgMHg3MywKKysJMHgwMSwgMHg0OSwgMHhlZiwgMHg1MCwgMHg0YiwgMHg3MSwgMHhiMSwgMHgyMCwKKysJMHhjYSwgMHg0ZiwgMHhmMywgMHg5NSwgMHgxOSwgMHhjMiwgMHhjMiwgMHgxMAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQwOTRbXSBfX2luaXRjb25zdCA9IHsKKysJMHhkMywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHg2MiwgMHgxOCwgMHhiMiwgMHg3ZiwgMHg4MywgMHhiOCwgMHhiNCwgMHg2NiwKKysJMHgwMiwgMHhmNiwgMHhlMSwgMHhkOCwgMHgzNCwgMHgyMCwgMHg3YiwgMHgwMiwKKysJMHhjZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHgyYSwgMHg2NCwgMHgxNiwgMHhjZSwgMHhkYiwgMHgxYywgMHhkZCwgMHgyOSwKKysJMHg2ZSwgMHhmNSwgMHhkNywgMHhkNiwgMHg5MiwgMHhkYSwgMHhmZiwgMHgwMiwKKysJMHhjZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHgyYSwgMHg2NCwgMHgxNiwgMHhjZSwgMHhkYiwgMHgxYywgMHhkZCwgMHgyOSwKKysJMHg2ZSwgMHhmNSwgMHhkNywgMHhkNiwgMHg5MiwgMHhkYSwgMHhmZiwgMHgwMiwKKysJMHgzMCwgMHgyZiwgMHhlOCwgMHgyYSwgMHhiMCwgMHhhMCwgMHg5YSwgMHhmNiwKKysJMHg0NCwgMHgwMCwgMHhkMCwgMHgxNSwgMHhhZSwgMHg4MywgMHhkOSwgMHhjYworK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzA5NFtdIF9faW5pdGNvbnN0ID0geworKwkweGZmLCAweGZmLCAweGZmLCAweGZmCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX25vbmNlMDk0W10gX19pbml0Y29uc3QgPSB7CisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4NGMsIDB4MmQsIDB4NTIKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfa2V5MDk0W10gX19pbml0Y29uc3QgPSB7CisrCTB4ODAsIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCisrCTB4ODgsIDB4ODksIDB4OGEsIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsCisrCTB4OTAsIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsCisrCTB4OTgsIDB4OTksIDB4OWEsIDB4OWIsIDB4OWMsIDB4OWQsIDB4OWUsIDB4OWYKKyt9OworKworKy8qIHd5Y2hlcHJvb2YgLSBlZGdlIGNhc2UgaW50ZXJtZWRpYXRlIHN1bXMgaW4gcG9seTEzMDUgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDk1W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZTksIDB4OTQsIDB4MjgsIDB4ZDAsIDB4NzksIDB4MzUsIDB4MWYsIDB4NjYsCisrCTB4NWMsIDB4ZDAsIDB4MDEsIDB4MzUsIDB4NDMsIDB4MTksIDB4ODcsIDB4NWMsCisrCTB4NmQsIDB4ZjEsIDB4MzksIDB4NGUsIDB4ZGMsIDB4NTMsIDB4OWIsIDB4NWIsCisrCTB4M2EsIDB4MDksIDB4NTcsIDB4YmUsIDB4MGYsIDB4YjgsIDB4NTksIDB4NDYsCisrCTB4ODAsIDB4N2EsIDB4ZWQsIDB4MzUsIDB4Y2IsIDB4NWEsIDB4MmYsIDB4Y2EsCisrCTB4YTAsIDB4MzQsIDB4NmUsIDB4ZmIsIDB4OTMsIDB4NjUsIDB4NTQsIDB4NjQsCisrCTB4ZDEsIDB4NzYsIDB4OWYsIDB4ZTgsIDB4MDYsIDB4YmIsIDB4ZmUsIDB4YjYsCisrCTB4ZjUsIDB4OTAsIDB4OTUsIDB4MGYsIDB4MmUsIDB4YWMsIDB4OWUsIDB4MGEsCisrCTB4NTgsIDB4MmQsIDB4OTAsIDB4OTYsIDB4NTIsIDB4NGYsIDB4YTEsIDB4YjIsCisrCTB4YjAsIDB4MjMsIDB4YjgsIDB4YjIsIDB4ODgsIDB4MjIsIDB4MjcsIDB4NzMsCisrCTB4OTksIDB4NTIsIDB4YWUsIDB4MDgsIDB4MTgsIDB4YzMsIDB4ODksIDB4NzksCisrCTB4YzAsIDB4NzQsIDB4MTMsIDB4NzEsIDB4MWEsIDB4OWEsIDB4ZjcsIDB4MTMKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDk1W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZTksIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZWEsIDB4MzMsIDB4ZjMsIDB4NDcsIDB4MzAsIDB4NGEsIDB4YmQsIDB4YWQsCisrCTB4ZjgsIDB4Y2UsIDB4NDEsIDB4MzQsIDB4MzMsIDB4YzgsIDB4NDUsIDB4MDEsCisrCTB4ZTAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4YjIsIDB4N2YsIDB4NTcsIDB4OTYsIDB4ODgsIDB4YWUsIDB4ZTUsIDB4NzAsCisrCTB4NjQsIDB4Y2UsIDB4MzcsIDB4MzIsIDB4OTEsIDB4ODIsIDB4Y2EsIDB4MDEsCisrCTB4ZTAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4YjIsIDB4N2YsIDB4NTcsIDB4OTYsIDB4ODgsIDB4YWUsIDB4ZTUsIDB4NzAsCisrCTB4NjQsIDB4Y2UsIDB4MzcsIDB4MzIsIDB4OTEsIDB4ODIsIDB4Y2EsIDB4MDEsCisrCTB4OTgsIDB4YTcsIDB4ZTgsIDB4MzYsIDB4ZTAsIDB4ZWUsIDB4NGQsIDB4MDIsCisrCTB4MzUsIDB4MDAsIDB4ZDAsIDB4NTUsIDB4N2UsIDB4YzIsIDB4Y2IsIDB4ZTAKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwOTVbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTA5NVtdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDRjLCAweDJkLCAweDUyCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTA5NVtdIF9faW5pdGNvbnN0ID0geworKwkweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAorKwkweDg4LCAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAweDhmLAorKwkweDkwLCAweDkxLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LAorKwkweDk4LCAweDk5LCAweDlhLCAweDliLCAweDljLCAweDlkLCAweDllLCAweDlmCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gZWRnZSBjYXNlIGludGVybWVkaWF0ZSBzdW1zIGluIHBvbHkxMzA1ICovCisrc3RhdGljIGNvbnN0IHU4IGVuY19pbnB1dDA5NltdIF9faW5pdGNvbnN0ID0geworKwkweGZmLCAweDk0LCAweDI4LCAweGQwLCAweDc5LCAweDM1LCAweDFmLCAweDY2LAorKwkweDVjLCAweGQwLCAweDAxLCAweDM1LCAweDQzLCAweDE5LCAweDg3LCAweDVjLAorKwkweDY0LCAweGY5LCAweDBmLCAweDViLCAweDI2LCAweDkyLCAweGI4LCAweDYwLAorKwkweGQ0LCAweDU5LCAweDZmLCAweGY0LCAweGIzLCAweDQwLCAweDJjLCAweDVjLAorKwkweDAwLCAweGI5LCAweGJiLCAweDUzLCAweDcwLCAweDdhLCAweGE2LCAweDY3LAorKwkweGQzLCAweDU2LCAweGZlLCAweDUwLCAweGM3LCAweDE5LCAweDk2LCAweDk0LAorKwkweDAzLCAweDM1LCAweDYxLCAweGU3LCAweGNhLCAweGNhLCAweDZkLCAweDk0LAorKwkweDFkLCAweGMzLCAweGNkLCAweDY5LCAweDE0LCAweGFkLCAweDY5LCAweDA0CisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX291dHB1dDA5NltdIF9faW5pdGNvbnN0ID0geworKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGUzLCAweDNiLCAweGM1LCAweDUyLCAweGNhLCAweDhiLCAweDllLCAweDk2LAorKwkweDE2LCAweDllLCAweDc5LCAweDdlLCAweDhmLCAweDMwLCAweDMwLCAweDFiLAorKwkweDYwLCAweDNjLCAweGE5LCAweDk5LCAweDQ0LCAweGRmLCAweDc2LCAweDUyLAorKwkweDhjLCAweDlkLCAweDZmLCAweDU0LCAweGFiLCAweDgzLCAweDNkLCAweDBmLAorKwkweDYwLCAweDNjLCAweGE5LCAweDk5LCAweDQ0LCAweGRmLCAweDc2LCAweDUyLAorKwkweDhjLCAweDlkLCAweDZmLCAweDU0LCAweGFiLCAweDgzLCAweDNkLCAweDBmLAorKwkweDZhLCAweGI4LCAweGRjLCAweGUyLCAweGM1LCAweDlkLCAweGE0LCAweDczLAorKwkweDcxLCAweDMwLCAweGIwLCAweDI1LCAweDJmLCAweDY4LCAweGE4LCAweGQ4CisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2Fzc29jMDk2W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UwOTZbXSBfX2luaXRjb25zdCA9IHsKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg0YywgMHgyZCwgMHg1MgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkwOTZbXSBfX2luaXRjb25zdCA9IHsKKysJMHg4MCwgMHg4MSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywKKysJMHg4OCwgMHg4OSwgMHg4YSwgMHg4YiwgMHg4YywgMHg4ZCwgMHg4ZSwgMHg4ZiwKKysJMHg5MCwgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywKKysJMHg5OCwgMHg5OSwgMHg5YSwgMHg5YiwgMHg5YywgMHg5ZCwgMHg5ZSwgMHg5ZgorK307CisrCisrLyogd3ljaGVwcm9vZiAtIGVkZ2UgY2FzZSBpbnRlcm1lZGlhdGUgc3VtcyBpbiBwb2x5MTMwNSAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwOTdbXSBfX2luaXRjb25zdCA9IHsKKysJMHg2OCwgMHg5NCwgMHgyOCwgMHhkMCwgMHg3OSwgMHgzNSwgMHgxZiwgMHg2NiwKKysJMHg1YywgMHhkMCwgMHgwMSwgMHgzNSwgMHg0MywgMHgxOSwgMHg4NywgMHg1YywKKysJMHhiMCwgMHg4ZiwgMHgyNSwgMHg2NywgMHg1YiwgMHg5YiwgMHhjYiwgMHhmNiwKKysJMHhlMywgMHg4NCwgMHgwNywgMHhkZSwgMHgyZSwgMHhjNywgMHg1YSwgMHg0NywKKysJMHg5ZiwgMHg3YSwgMHhlZCwgMHgzNSwgMHhjYiwgMHg1YSwgMHgyZiwgMHhjYSwKKysJMHhhMCwgMHgzNCwgMHg2ZSwgMHhmYiwgMHg5MywgMHg2NSwgMHg1NCwgMHg2NCwKKysJMHgyZCwgMHgyYSwgMHhmNywgMHhjZCwgMHg2YiwgMHgwOCwgMHgwNSwgMHgwMSwKKysJMHhkMywgMHgxYiwgMHhhNSwgMHg0ZiwgMHhiMiwgMHhlYiwgMHg3NSwgMHg5NiwKKysJMHg0NywgMHgyZCwgMHg5MCwgMHg5NiwgMHg1MiwgMHg0ZiwgMHhhMSwgMHhiMiwKKysJMHhiMCwgMHgyMywgMHhiOCwgMHhiMiwgMHg4OCwgMHgyMiwgMHgyNywgMHg3MywKKysJMHg2NSwgMHgwZSwgMHhjNiwgMHgyZCwgMHg3NSwgMHg3MCwgMHg3MiwgMHhjZSwKKysJMHhlNiwgMHhmZiwgMHgyMywgMHgzMSwgMHg4NiwgMHhkZCwgMHgxYywgMHg4ZgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQwOTdbXSBfX2luaXRjb25zdCA9IHsKKysJMHg2OCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHgzNywgMHg0ZCwgMHhlZiwgMHg2ZSwgMHhiNywgMHg4MiwgMHhlZCwgMHgwMCwKKysJMHgyMSwgMHg0MywgMHgxMSwgMHg1NCwgMHgxMiwgMHhiNywgMHg0NiwgMHgwMCwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHg0ZSwgMHgyMywgMHgzZiwgMHhiMywgMHhlNSwgMHgxZCwgMHgxZSwgMHhjNywKKysJMHg0MiwgMHg0NSwgMHgwNywgMHg3MiwgMHgwZCwgMHhjNSwgMHgyMSwgMHg5ZCwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHg0ZSwgMHgyMywgMHgzZiwgMHhiMywgMHhlNSwgMHgxZCwgMHgxZSwgMHhjNywKKysJMHg0MiwgMHg0NSwgMHgwNywgMHg3MiwgMHgwZCwgMHhjNSwgMHgyMSwgMHg5ZCwKKysJMHgwNCwgMHg0ZCwgMHhlYSwgMHg2MCwgMHg4OCwgMHg4MCwgMHg0MSwgMHgyYiwKKysJMHhmZCwgMHhmZiwgMHhjZiwgMHgzNSwgMHg1NywgMHg5ZSwgMHg5YiwgMHgyNgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzA5N1tdIF9faW5pdGNvbnN0ID0geworKwkweGZmLCAweGZmLCAweGZmLCAweGZmCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX25vbmNlMDk3W10gX19pbml0Y29uc3QgPSB7CisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4NGMsIDB4MmQsIDB4NTIKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfa2V5MDk3W10gX19pbml0Y29uc3QgPSB7CisrCTB4ODAsIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCisrCTB4ODgsIDB4ODksIDB4OGEsIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsCisrCTB4OTAsIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsCisrCTB4OTgsIDB4OTksIDB4OWEsIDB4OWIsIDB4OWMsIDB4OWQsIDB4OWUsIDB4OWYKKyt9OworKworKy8qIHd5Y2hlcHJvb2YgLSBlZGdlIGNhc2UgaW50ZXJtZWRpYXRlIHN1bXMgaW4gcG9seTEzMDUgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDk4W10gX19pbml0Y29uc3QgPSB7CisrCTB4NmQsIDB4OTQsIDB4MjgsIDB4ZDAsIDB4NzksIDB4MzUsIDB4MWYsIDB4NjYsCisrCTB4NWMsIDB4ZDAsIDB4MDEsIDB4MzUsIDB4NDMsIDB4MTksIDB4ODcsIDB4NWMsCisrCTB4YTEsIDB4NjEsIDB4YjUsIDB4YWIsIDB4MDQsIDB4MDksIDB4MDAsIDB4NjIsCisrCTB4OWUsIDB4ZmUsIDB4ZmYsIDB4NzgsIDB4ZDcsIDB4ZDgsIDB4NmIsIDB4NDUsCisrCTB4OWYsIDB4N2EsIDB4ZWQsIDB4MzUsIDB4Y2IsIDB4NWEsIDB4MmYsIDB4Y2EsCisrCTB4YTAsIDB4MzQsIDB4NmUsIDB4ZmIsIDB4OTMsIDB4NjUsIDB4NTQsIDB4NjQsCisrCTB4YzYsIDB4ZjgsIDB4MDcsIDB4OGMsIDB4YzgsIDB4ZWYsIDB4MTIsIDB4YTAsCisrCTB4ZmYsIDB4NjUsIDB4N2QsIDB4NmQsIDB4MDgsIDB4ZGIsIDB4MTAsIDB4YjgsCisrCTB4NDcsIDB4MmQsIDB4OTAsIDB4OTYsIDB4NTIsIDB4NGYsIDB4YTEsIDB4YjIsCisrCTB4YjAsIDB4MjMsIDB4YjgsIDB4YjIsIDB4ODgsIDB4MjIsIDB4MjcsIDB4NzMsCisrCTB4OGUsIDB4ZGMsIDB4MzYsIDB4NmMsIDB4ZDYsIDB4OTcsIDB4NjUsIDB4NmYsCisrCTB4Y2EsIDB4ODEsIDB4ZmIsIDB4MTMsIDB4M2MsIDB4ZWQsIDB4NzksIDB4YTEKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDk4W10gX19pbml0Y29uc3QgPSB7CisrCTB4NmQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4MjYsIDB4YTMsIDB4N2YsIDB4YTIsIDB4ZTgsIDB4MTAsIDB4MjYsIDB4OTQsCisrCTB4NWMsIDB4MzksIDB4ZTksIDB4ZjIsIDB4ZWIsIDB4YTgsIDB4NzcsIDB4MDIsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4YTUsIDB4ZjEsIDB4Y2YsIDB4ZjIsIDB4NDYsIDB4ZmEsIDB4MDksIDB4NjYsCisrCTB4NmUsIDB4M2IsIDB4ZGYsIDB4NTAsIDB4YjcsIDB4ZjUsIDB4NDQsIDB4YjMsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4YTUsIDB4ZjEsIDB4Y2YsIDB4ZjIsIDB4NDYsIDB4ZmEsIDB4MDksIDB4NjYsCisrCTB4NmUsIDB4M2IsIDB4ZGYsIDB4NTAsIDB4YjcsIDB4ZjUsIDB4NDQsIDB4YjMsCisrCTB4MWUsIDB4NmIsIDB4ZWEsIDB4NjMsIDB4MTQsIDB4NTQsIDB4MmUsIDB4MmUsCisrCTB4ZjksIDB4ZmYsIDB4Y2YsIDB4NDUsIDB4MGIsIDB4MmUsIDB4OTgsIDB4MmIKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwOThbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTA5OFtdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDRjLCAweDJkLCAweDUyCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTA5OFtdIF9faW5pdGNvbnN0ID0geworKwkweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAorKwkweDg4LCAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAweDhmLAorKwkweDkwLCAweDkxLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LAorKwkweDk4LCAweDk5LCAweDlhLCAweDliLCAweDljLCAweDlkLCAweDllLCAweDlmCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gZWRnZSBjYXNlIGludGVybWVkaWF0ZSBzdW1zIGluIHBvbHkxMzA1ICovCisrc3RhdGljIGNvbnN0IHU4IGVuY19pbnB1dDA5OVtdIF9faW5pdGNvbnN0ID0geworKwkweGZmLCAweDk0LCAweDI4LCAweGQwLCAweDc5LCAweDM1LCAweDFmLCAweDY2LAorKwkweDVjLCAweGQwLCAweDAxLCAweDM1LCAweDQzLCAweDE5LCAweDg3LCAweDVjLAorKwkweGZjLCAweDAxLCAweGI4LCAweDkxLCAweGU1LCAweGYwLCAweGY5LCAweDEyLAorKwkweDhkLCAweDdkLCAweDFjLCAweDU3LCAweDkxLCAweDkyLCAweGI2LCAweDk4LAorKwkweDYzLCAweDQxLCAweDQ0LCAweDE1LCAweGI2LCAweDk5LCAweDY4LCAweDk1LAorKwkweDlhLCAweDcyLCAweDkxLCAweGI3LCAweGE1LCAweGFmLCAweDEzLCAweDQ4LAorKwkweDYwLCAweGNkLCAweDllLCAweGExLCAweDBjLCAweDI5LCAweGEzLCAweDY2LAorKwkweDU0LCAweGU3LCAweGEyLCAweDhlLCAweDc2LCAweDFiLCAweGVjLCAweGQ4CisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX291dHB1dDA5OVtdIF9faW5pdGNvbnN0ID0geworKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDdiLCAweGMzLCAweDcyLCAweDk4LCAweDA5LCAweGU5LCAweGRmLCAweGU0LAorKwkweDRmLCAweGJhLCAweDBhLCAweGRkLCAweGFkLCAweGUyLCAweGFhLCAweGRmLAorKwkweDAzLCAweGM0LCAweDU2LCAweGRmLCAweDgyLCAweDNjLCAweGI4LCAweGEwLAorKwkweGM1LCAweGI5LCAweDAwLCAweGIzLCAweGM5LCAweDM1LCAweGI4LCAweGQzLAorKwkweDAzLCAweGM0LCAweDU2LCAweGRmLCAweDgyLCAweDNjLCAweGI4LCAweGEwLAorKwkweGM1LCAweGI5LCAweDAwLCAweGIzLCAweGM5LCAweDM1LCAweGI4LCAweGQzLAorKwkweGVkLCAweDIwLCAweDE3LCAweGM4LCAweGRiLCAweGE0LCAweDc3LCAweDU2LAorKwkweDI5LCAweDA0LCAweDlkLCAweDc4LCAweDZlLCAweDNiLCAweGNlLCAweGIxCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2Fzc29jMDk5W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UwOTlbXSBfX2luaXRjb25zdCA9IHsKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg0YywgMHgyZCwgMHg1MgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkwOTlbXSBfX2luaXRjb25zdCA9IHsKKysJMHg4MCwgMHg4MSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywKKysJMHg4OCwgMHg4OSwgMHg4YSwgMHg4YiwgMHg4YywgMHg4ZCwgMHg4ZSwgMHg4ZiwKKysJMHg5MCwgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywKKysJMHg5OCwgMHg5OSwgMHg5YSwgMHg5YiwgMHg5YywgMHg5ZCwgMHg5ZSwgMHg5ZgorK307CisrCisrLyogd3ljaGVwcm9vZiAtIGVkZ2UgY2FzZSBpbnRlcm1lZGlhdGUgc3VtcyBpbiBwb2x5MTMwNSAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQxMDBbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHg5NCwgMHgyOCwgMHhkMCwgMHg3OSwgMHgzNSwgMHgxZiwgMHg2NiwKKysJMHg1YywgMHhkMCwgMHgwMSwgMHgzNSwgMHg0MywgMHgxOSwgMHg4NywgMHg1YywKKysJMHg2YiwgMHg2ZCwgMHhjOSwgMHhkMiwgMHgxYSwgMHg4MSwgMHg5ZSwgMHg3MCwKKysJMHhiNSwgMHg3NywgMHhmNCwgMHg0MSwgMHgzNywgMHhkMywgMHhkNiwgMHhiZCwKKysJMHgxMywgMHgzNSwgMHhmNSwgMHhlYiwgMHg0NCwgMHg0OSwgMHg0MCwgMHg3NywKKysJMHhiMiwgMHg2NCwgMHg0OSwgMHhhNSwgMHg0YiwgMHg2YywgMHg3YywgMHg3NSwKKysJMHgxMCwgMHhiOSwgMHgyZiwgMHg1ZiwgMHhmZSwgMHhmOSwgMHg4YiwgMHg4NCwKKysJMHg3YywgMHhmMSwgMHg3YSwgMHg5YywgMHg5OCwgMHhkOCwgMHg4MywgMHhlNQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQxMDBbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhlYywgMHhhZiwgMHgwMywgMHhkYiwgMHhmNiwgMHg5OCwgMHhiOCwgMHg4NiwKKysJMHg3NywgMHhiMCwgMHhlMiwgMHhjYiwgMHgwYiwgMHhhMywgMHhjYSwgMHhmYSwKKysJMHg3MywgMHhiMCwgMHhlNywgMHgyMSwgMHg3MCwgMHhlYywgMHg5MCwgMHg0MiwKKysJMHhlZCwgMHhhZiwgMHhkOCwgMHhhMSwgMHgyNywgMHhmNiwgMHhkNywgMHhlZSwKKysJMHg3MywgMHhiMCwgMHhlNywgMHgyMSwgMHg3MCwgMHhlYywgMHg5MCwgMHg0MiwKKysJMHhlZCwgMHhhZiwgMHhkOCwgMHhhMSwgMHgyNywgMHhmNiwgMHhkNywgMHhlZSwKKysJMHgwNywgMHgzZiwgMHgxNywgMHhjYiwgMHg2NywgMHg3OCwgMHg2NCwgMHg1OSwKKysJMHgyNSwgMHgwNCwgMHg5ZCwgMHg4OCwgMHgyMiwgMHhjYiwgMHhjYSwgMHhiNgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzEwMFtdIF9faW5pdGNvbnN0ID0geworKwkweGZmLCAweGZmLCAweGZmLCAweGZmCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX25vbmNlMTAwW10gX19pbml0Y29uc3QgPSB7CisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4NGMsIDB4MmQsIDB4NTIKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfa2V5MTAwW10gX19pbml0Y29uc3QgPSB7CisrCTB4ODAsIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCisrCTB4ODgsIDB4ODksIDB4OGEsIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsCisrCTB4OTAsIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsCisrCTB4OTgsIDB4OTksIDB4OWEsIDB4OWIsIDB4OWMsIDB4OWQsIDB4OWUsIDB4OWYKKyt9OworKworKy8qIHd5Y2hlcHJvb2YgLSBlZGdlIGNhc2UgaW50ZXJtZWRpYXRlIHN1bXMgaW4gcG9seTEzMDUgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MTAxW10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4Y2IsIDB4MmIsIDB4MTEsIDB4MDYsIDB4ZjgsIDB4MjMsIDB4NGMsCisrCTB4NWUsIDB4OTksIDB4ZDQsIDB4ZGIsIDB4NGMsIDB4NzAsIDB4NDgsIDB4ZGUsCisrCTB4MzIsIDB4M2QsIDB4MzUsIDB4ZjYsIDB4MTMsIDB4ZTYsIDB4ZDksIDB4MDksCisrCTB4M2QsIDB4MzgsIDB4ZTksIDB4NzUsIDB4YzMsIDB4OGYsIDB4ZTMsIDB4YjgsCisrCTB4MTYsIDB4ZTksIDB4ODgsIDB4NGEsIDB4MTEsIDB4NGYsIDB4MGUsIDB4OTIsCisrCTB4NjYsIDB4Y2UsIDB4YTMsIDB4ODgsIDB4NWYsIDB4ZTMsIDB4NmIsIDB4OWYsCisrCTB4ZDYsIDB4ZjYsIDB4MzcsIDB4ODEsIDB4NzEsIDB4ZWEsIDB4ZTQsIDB4MzksCisrCTB4NmUsIDB4YTEsIDB4NWQsIDB4YzIsIDB4NDAsIDB4ZDEsIDB4YWIsIDB4ZjQsCisrCTB4Y2UsIDB4YmUsIDB4ZjUsIDB4ZTksIDB4ODgsIDB4NWEsIDB4ODAsIDB4ZWEsCisrCTB4NzYsIDB4ZDksIDB4NzUsIDB4YzEsIDB4NDQsIDB4YTQsIDB4MTgsIDB4ODgKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MTAxW10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4YTAsIDB4ZmMsIDB4M2UsIDB4ODAsIDB4MzIsIDB4YzMsIDB4ZDUsCisrCTB4ZmQsIDB4YjYsIDB4MmEsIDB4MTEsIDB4ZjAsIDB4OTYsIDB4MzAsIDB4N2QsCisrCTB4YjUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4NzYsIDB4NmMsIDB4OWEsIDB4ODAsIDB4MjUsIDB4ZWEsIDB4ZGUsIDB4YTcsCisrCTB4MzksIDB4MDUsIDB4MzIsIDB4OGMsIDB4MzMsIDB4NzksIDB4YzAsIDB4MDQsCisrCTB4YjUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4NzYsIDB4NmMsIDB4OWEsIDB4ODAsIDB4MjUsIDB4ZWEsIDB4ZGUsIDB4YTcsCisrCTB4MzksIDB4MDUsIDB4MzIsIDB4OGMsIDB4MzMsIDB4NzksIDB4YzAsIDB4MDQsCisrCTB4OGIsIDB4OWIsIDB4YjQsIDB4YjQsIDB4ODYsIDB4MTIsIDB4ODksIDB4NjUsCisrCTB4OGMsIDB4NjksIDB4NmEsIDB4ODMsIDB4NDAsIDB4MTUsIDB4MDQsIDB4MDUKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MxMDFbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTEwMVtdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDRjLCAweDJkLCAweDUyCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTEwMVtdIF9faW5pdGNvbnN0ID0geworKwkweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAorKwkweDg4LCAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAweDhmLAorKwkweDkwLCAweDkxLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LAorKwkweDk4LCAweDk5LCAweDlhLCAweDliLCAweDljLCAweDlkLCAweDllLCAweDlmCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gZWRnZSBjYXNlIGludGVybWVkaWF0ZSBzdW1zIGluIHBvbHkxMzA1ICovCisrc3RhdGljIGNvbnN0IHU4IGVuY19pbnB1dDEwMltdIF9faW5pdGNvbnN0ID0geworKwkweDZmLCAweDllLCAweDcwLCAweGVkLCAweDNiLCAweDhiLCAweGFjLCAweGEwLAorKwkweDI2LCAweGU0LCAweDZhLCAweDVhLCAweDA5LCAweDQzLCAweDE1LCAweDhkLAorKwkweDIxLCAweDNkLCAweDM1LCAweGY2LCAweDEzLCAweGU2LCAweGQ5LCAweDA5LAorKwkweDNkLCAweDM4LCAweGU5LCAweDc1LCAweGMzLCAweDhmLCAweGUzLCAweGI4LAorKwkweDBjLCAweDYxLCAweDJjLCAweDVlLCAweDhkLCAweDg5LCAweGE4LCAweDczLAorKwkweGRiLCAweGNhLCAweGFkLCAweDViLCAweDczLCAweDQ2LCAweDQyLCAweDliLAorKwkweGM1LCAweGY2LCAweDM3LCAweDgxLCAweDcxLCAweGVhLCAweGU0LCAweDM5LAorKwkweDZlLCAweGExLCAweDVkLCAweGMyLCAweDQwLCAweGQxLCAweGFiLCAweGY0LAorKwkweGQ0LCAweDM2LCAweDUxLCAweGZkLCAweDE0LCAweDljLCAweDI2LCAweDBiLAorKwkweGNiLCAweGRkLCAweDdiLCAweDEyLCAweDY4LCAweDAxLCAweDMxLCAweDhjCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX291dHB1dDEwMltdIF9faW5pdGNvbnN0ID0geworKwkweDZmLCAweGY1LCAweGE3LCAweGMyLCAweGJkLCAweDQxLCAweDRjLCAweDM5LAorKwkweDg1LCAweGNiLCAweDk0LCAweDkwLCAweGI1LCAweGE1LCAweDZkLCAweDJlLAorKwkweGE2LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDZjLCAweGU0LCAweDNlLCAweDk0LCAweGI5LCAweDJjLCAweDc4LCAweDQ2LAorKwkweDg0LCAweDAxLCAweDNjLCAweDVmLCAweDFmLCAweGRjLCAweGU5LCAweDAwLAorKwkweGE2LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDZjLCAweGU0LCAweDNlLCAweDk0LCAweGI5LCAweDJjLCAweDc4LCAweDQ2LAorKwkweDg0LCAweDAxLCAweDNjLCAweDVmLCAweDFmLCAweGRjLCAweGU5LCAweDAwLAorKwkweDhiLCAweDNiLCAweGJkLCAweDUxLCAweDY0LCAweDQ0LCAweDU5LCAweDU2LAorKwkweDhkLCAweDgxLCAweGNhLCAweDFmLCAweGE3LCAweDJjLCAweGU0LCAweDA0CisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2Fzc29jMTAyW10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UxMDJbXSBfX2luaXRjb25zdCA9IHsKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg0YywgMHgyZCwgMHg1MgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkxMDJbXSBfX2luaXRjb25zdCA9IHsKKysJMHg4MCwgMHg4MSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywKKysJMHg4OCwgMHg4OSwgMHg4YSwgMHg4YiwgMHg4YywgMHg4ZCwgMHg4ZSwgMHg4ZiwKKysJMHg5MCwgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywKKysJMHg5OCwgMHg5OSwgMHg5YSwgMHg5YiwgMHg5YywgMHg5ZCwgMHg5ZSwgMHg5ZgorK307CisrCisrLyogd3ljaGVwcm9vZiAtIGVkZ2UgY2FzZSBpbnRlcm1lZGlhdGUgc3VtcyBpbiBwb2x5MTMwNSAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQxMDNbXSBfX2luaXRjb25zdCA9IHsKKysJMHg0MSwgMHgyYiwgMHgwOCwgMHgwYSwgMHgzZSwgMHgxOSwgMHhjMSwgMHgwZCwKKysJMHg0NCwgMHhhMSwgMHhhZiwgMHgxZSwgMHhhYiwgMHhkZSwgMHhiNCwgMHhjZSwKKysJMHgzNSwgMHgzZCwgMHgzNSwgMHhmNiwgMHgxMywgMHhlNiwgMHhkOSwgMHgwOSwKKysJMHgzZCwgMHgzOCwgMHhlOSwgMHg3NSwgMHhjMywgMHg4ZiwgMHhlMywgMHhiOCwKKysJMHg2YiwgMHg4MywgMHg5NCwgMHgzMywgMHgwOSwgMHgyMSwgMHg0OCwgMHg2YywKKysJMHhhMSwgMHgxZCwgMHgyOSwgMHgxYywgMHgzZSwgMHg5NywgMHhlZSwgMHg5YSwKKysJMHhkMSwgMHhmNiwgMHgzNywgMHg4MSwgMHg3MSwgMHhlYSwgMHhlNCwgMHgzOSwKKysJMHg2ZSwgMHhhMSwgMHg1ZCwgMHhjMiwgMHg0MCwgMHhkMSwgMHhhYiwgMHhmNCwKKysJMHhiMywgMHhkNCwgMHhlOSwgMHg5MCwgMHg5MCwgMHgzNCwgMHhjNiwgMHgxNCwKKysJMHhiMSwgMHgwYSwgMHhmZiwgMHg1NSwgMHgyNSwgMHhkMCwgMHg5ZCwgMHg4ZAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQxMDNbXSBfX2luaXRjb25zdCA9IHsKKysJMHg0MSwgMHg0MCwgMHhkZiwgMHgyNSwgMHhiOCwgMHhkMywgMHgyMSwgMHg5NCwKKysJMHhlNywgMHg4ZSwgMHg1MSwgMHhkNCwgMHgxNywgMHgzOCwgMHhjYywgMHg2ZCwKKysJMHhiMiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHgwYiwgMHgwNiwgMHg4NiwgMHhmOSwgMHgzZCwgMHg4NCwgMHg5OCwgMHg1OSwKKysJMHhmZSwgMHhkNiwgMHhiOCwgMHgxOCwgMHg1MiwgMHgwZCwgMHg0NSwgMHgwMSwKKysJMHhiMiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHgwYiwgMHgwNiwgMHg4NiwgMHhmOSwgMHgzZCwgMHg4NCwgMHg5OCwgMHg1OSwKKysJMHhmZSwgMHhkNiwgMHhiOCwgMHgxOCwgMHg1MiwgMHgwZCwgMHg0NSwgMHgwMSwKKysJMHg4NiwgMHhmYiwgMHhhYiwgMHgyYiwgMHg0YSwgMHg5NCwgMHhmNCwgMHg3YSwKKysJMHhhNSwgMHg2ZiwgMHgwYSwgMHhlYSwgMHg2NSwgMHhkMSwgMHgxMCwgMHgwOAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzEwM1tdIF9faW5pdGNvbnN0ID0geworKwkweGZmLCAweGZmLCAweGZmLCAweGZmCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX25vbmNlMTAzW10gX19pbml0Y29uc3QgPSB7CisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4NGMsIDB4MmQsIDB4NTIKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfa2V5MTAzW10gX19pbml0Y29uc3QgPSB7CisrCTB4ODAsIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCisrCTB4ODgsIDB4ODksIDB4OGEsIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsCisrCTB4OTAsIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsCisrCTB4OTgsIDB4OTksIDB4OWEsIDB4OWIsIDB4OWMsIDB4OWQsIDB4OWUsIDB4OWYKKyt9OworKworKy8qIHd5Y2hlcHJvb2YgLSBlZGdlIGNhc2UgaW50ZXJtZWRpYXRlIHN1bXMgaW4gcG9seTEzMDUgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MTA0W10gX19pbml0Y29uc3QgPSB7CisrCTB4YjIsIDB4NDcsIDB4YTcsIDB4NDcsIDB4MjMsIDB4NDksIDB4MWEsIDB4YWMsCisrCTB4YWMsIDB4YWEsIDB4ZDcsIDB4MDksIDB4YzksIDB4MWUsIDB4OTMsIDB4MmIsCisrCTB4MzEsIDB4M2QsIDB4MzUsIDB4ZjYsIDB4MTMsIDB4ZTYsIDB4ZDksIDB4MDksCisrCTB4M2QsIDB4MzgsIDB4ZTksIDB4NzUsIDB4YzMsIDB4OGYsIDB4ZTMsIDB4YjgsCisrCTB4OWEsIDB4ZGUsIDB4MDQsIDB4ZTcsIDB4NWIsIDB4YjcsIDB4MDEsIDB4ZDksCisrCTB4NjYsIDB4MDYsIDB4MDEsIDB4YjMsIDB4NDcsIDB4NjUsIDB4ZGUsIDB4OTgsCisrCTB4ZDUsIDB4ZjYsIDB4MzcsIDB4ODEsIDB4NzEsIDB4ZWEsIDB4ZTQsIDB4MzksCisrCTB4NmUsIDB4YTEsIDB4NWQsIDB4YzIsIDB4NDAsIDB4ZDEsIDB4YWIsIDB4ZjQsCisrCTB4NDIsIDB4ODksIDB4NzksIDB4NDQsIDB4YzIsIDB4YTIsIDB4OGYsIDB4YTEsCisrCTB4NzYsIDB4MTEsIDB4ZDcsIDB4ZmEsIDB4NWMsIDB4MjIsIDB4YWQsIDB4OGYKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MTA0W10gX19pbml0Y29uc3QgPSB7CisrCTB4YjIsIDB4MmMsIDB4NzAsIDB4NjgsIDB4YTUsIDB4ODMsIDB4ZmEsIDB4MzUsCisrCTB4MGYsIDB4ODUsIDB4MjksIDB4YzMsIDB4NzUsIDB4ZjgsIDB4ZWIsIDB4ODgsCisrCTB4YjYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmEsIDB4NWIsIDB4MTYsIDB4MmQsIDB4NmYsIDB4MTIsIDB4ZDEsIDB4ZWMsCisrCTB4MzksIDB4Y2QsIDB4OTAsIDB4YjcsIDB4MmIsIDB4ZmYsIDB4NzUsIDB4MDMsCisrCTB4YjYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmEsIDB4NWIsIDB4MTYsIDB4MmQsIDB4NmYsIDB4MTIsIDB4ZDEsIDB4ZWMsCisrCTB4MzksIDB4Y2QsIDB4OTAsIDB4YjcsIDB4MmIsIDB4ZmYsIDB4NzUsIDB4MDMsCisrCTB4YTAsIDB4MTksIDB4YWMsIDB4MmUsIDB4ZDYsIDB4NjcsIDB4ZTEsIDB4N2QsCisrCTB4YTEsIDB4NmYsIDB4MGEsIDB4ZmEsIDB4MTksIDB4NjEsIDB4MGQsIDB4MGQKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MxMDRbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTEwNFtdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDRjLCAweDJkLCAweDUyCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTEwNFtdIF9faW5pdGNvbnN0ID0geworKwkweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAorKwkweDg4LCAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAweDhmLAorKwkweDkwLCAweDkxLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LAorKwkweDk4LCAweDk5LCAweDlhLCAweDliLCAweDljLCAweDlkLCAweDllLCAweDlmCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gZWRnZSBjYXNlIGludGVybWVkaWF0ZSBzdW1zIGluIHBvbHkxMzA1ICovCisrc3RhdGljIGNvbnN0IHU4IGVuY19pbnB1dDEwNVtdIF9faW5pdGNvbnN0ID0geworKwkweDc0LCAweDBmLCAweDllLCAweDQ5LCAweGY2LCAweDEwLCAweGVmLCAweGE1LAorKwkweDg1LCAweGI2LCAweDU5LCAweGNhLCAweDZlLCAweGQ4LCAweGI0LCAweDk5LAorKwkweDJkLCAweDNkLCAweDM1LCAweGY2LCAweDEzLCAweGU2LCAweGQ5LCAweDA5LAorKwkweDNkLCAweDM4LCAweGU5LCAweDc1LCAweGMzLCAweDhmLCAweGUzLCAweGI4LAorKwkweDQxLCAweDJkLCAweDk2LCAweGFmLCAweGJlLCAweDgwLCAweGVjLCAweDNlLAorKwkweDc5LCAweGQ0LCAweDUxLCAweGIwLCAweDBhLCAweDJkLCAweGIyLCAweDlhLAorKwkweGM5LCAweGY2LCAweDM3LCAweDgxLCAweDcxLCAweGVhLCAweGU0LCAweDM5LAorKwkweDZlLCAweGExLCAweDVkLCAweGMyLCAweDQwLCAweGQxLCAweGFiLCAweGY0LAorKwkweDk5LCAweDdhLCAweGViLCAweDBjLCAweDI3LCAweDk1LCAweDYyLCAweDQ2LAorKwkweDY5LCAweGMzLCAweDg3LCAweGY5LCAweDExLCAweDZhLCAweGMxLCAweDhkCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX291dHB1dDEwNVtdIF9faW5pdGNvbnN0ID0geworKwkweDc0LCAweDY0LCAweDQ5LCAweDY2LCAweDcwLCAweGRhLCAweDBmLCAweDNjLAorKwkweDI2LCAweDk5LCAweGE3LCAweDAwLCAweGQyLCAweDNlLCAweGNjLCAweDNhLAorKwkweGFhLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDIxLCAweGE4LCAweDg0LCAweDY1LCAweDhhLCAweDI1LCAweDNjLCAweDBiLAorKwkweDI2LCAweDFmLCAweGMwLCAweGI0LCAweDY2LCAweGI3LCAweDE5LCAweDAxLAorKwkweGFhLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDIxLCAweGE4LCAweDg0LCAweDY1LCAweDhhLCAweDI1LCAweDNjLCAweDBiLAorKwkweDI2LCAweDFmLCAweGMwLCAweGI0LCAweDY2LCAweGI3LCAweDE5LCAweDAxLAorKwkweDczLCAweDZlLCAweDE4LCAweDE4LCAweDE2LCAweDk2LCAweGE1LCAweDg4LAorKwkweDljLCAweDMxLCAweDU5LCAweGZhLCAweGFiLCAweGFiLCAweDIwLCAweGZkCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2Fzc29jMTA1W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UxMDVbXSBfX2luaXRjb25zdCA9IHsKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg0YywgMHgyZCwgMHg1MgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkxMDVbXSBfX2luaXRjb25zdCA9IHsKKysJMHg4MCwgMHg4MSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywKKysJMHg4OCwgMHg4OSwgMHg4YSwgMHg4YiwgMHg4YywgMHg4ZCwgMHg4ZSwgMHg4ZiwKKysJMHg5MCwgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywKKysJMHg5OCwgMHg5OSwgMHg5YSwgMHg5YiwgMHg5YywgMHg5ZCwgMHg5ZSwgMHg5ZgorK307CisrCisrLyogd3ljaGVwcm9vZiAtIGVkZ2UgY2FzZSBpbnRlcm1lZGlhdGUgc3VtcyBpbiBwb2x5MTMwNSAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQxMDZbXSBfX2luaXRjb25zdCA9IHsKKysJMHhhZCwgMHhiYSwgMHg1ZCwgMHgxMCwgMHg1YiwgMHhjOCwgMHhhYSwgMHgwNiwKKysJMHgyYywgMHgyMywgMHgzNiwgMHhjYiwgMHg4OCwgMHg5ZCwgMHhkYiwgMHhkNSwKKysJMHgzNywgMHgzZCwgMHgzNSwgMHhmNiwgMHgxMywgMHhlNiwgMHhkOSwgMHgwOSwKKysJMHgzZCwgMHgzOCwgMHhlOSwgMHg3NSwgMHhjMywgMHg4ZiwgMHhlMywgMHhiOCwKKysJMHgxNywgMHg3YywgMHg1ZiwgMHhmZSwgMHgyOCwgMHg3NSwgMHhmNCwgMHg2OCwKKysJMHhmNiwgMHhjMiwgMHg5NiwgMHg1NywgMHg0OCwgMHhmMywgMHg1OSwgMHg5YSwKKysJMHhkMywgMHhmNiwgMHgzNywgMHg4MSwgMHg3MSwgMHhlYSwgMHhlNCwgMHgzOSwKKysJMHg2ZSwgMHhhMSwgMHg1ZCwgMHhjMiwgMHg0MCwgMHhkMSwgMHhhYiwgMHhmNCwKKysJMHhjZiwgMHgyYiwgMHgyMiwgMHg1ZCwgMHhiMSwgMHg2MCwgMHg3YSwgMHgxMCwKKysJMHhlNiwgMHhkNSwgMHg0MCwgMHgxZSwgMHg1MywgMHhiNCwgMHgyYSwgMHg4ZAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQxMDZbXSBfX2luaXRjb25zdCA9IHsKKysJMHhhZCwgMHhkMSwgMHg4YSwgMHgzZiwgMHhkZCwgMHgwMiwgMHg0YSwgMHg5ZiwKKysJMHg4ZiwgMHgwYywgMHhjOCwgMHgwMSwgMHgzNCwgMHg3YiwgMHhhMywgMHg3NiwKKysJMHhiMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHg3NywgMHhmOSwgMHg0ZCwgMHgzNCwgMHgxYywgMHhkMCwgMHgyNCwgMHg1ZCwKKysJMHhhOSwgMHgwOSwgMHgwNywgMHg1MywgMHgyNCwgMHg2OSwgMHhmMiwgMHgwMSwKKysJMHhiMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHg3NywgMHhmOSwgMHg0ZCwgMHgzNCwgMHgxYywgMHhkMCwgMHgyNCwgMHg1ZCwKKysJMHhhOSwgMHgwOSwgMHgwNywgMHg1MywgMHgyNCwgMHg2OSwgMHhmMiwgMHgwMSwKKysJMHhiYSwgMHhkNSwgMHg4ZiwgMHgxMCwgMHhhOSwgMHgxZSwgMHg2YSwgMHg4OCwKKysJMHg5YSwgMHhiYSwgMHgzMiwgMHhmZCwgMHgxNywgMHhkOCwgMHgzMywgMHgxYQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzEwNltdIF9faW5pdGNvbnN0ID0geworKwkweGZmLCAweGZmLCAweGZmLCAweGZmCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX25vbmNlMTA2W10gX19pbml0Y29uc3QgPSB7CisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4NGMsIDB4MmQsIDB4NTIKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfa2V5MTA2W10gX19pbml0Y29uc3QgPSB7CisrCTB4ODAsIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCisrCTB4ODgsIDB4ODksIDB4OGEsIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsCisrCTB4OTAsIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsCisrCTB4OTgsIDB4OTksIDB4OWEsIDB4OWIsIDB4OWMsIDB4OWQsIDB4OWUsIDB4OWYKKyt9OworKworKy8qIHd5Y2hlcHJvb2YgLSBlZGdlIGNhc2UgaW50ZXJtZWRpYXRlIHN1bXMgaW4gcG9seTEzMDUgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MTA3W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmUsIDB4OTQsIDB4MjgsIDB4ZDAsIDB4NzksIDB4MzUsIDB4MWYsIDB4NjYsCisrCTB4NWMsIDB4ZDAsIDB4MDEsIDB4MzUsIDB4NDMsIDB4MTksIDB4ODcsIDB4NWMsCisrCTB4YzAsIDB4MDEsIDB4ZWQsIDB4YzUsIDB4ZGEsIDB4NDQsIDB4MmUsIDB4NzEsCisrCTB4OWIsIDB4Y2UsIDB4OWEsIDB4YmUsIDB4MjcsIDB4M2EsIDB4ZjEsIDB4NDQsCisrCTB4YjQsIDB4N2EsIDB4ZWQsIDB4MzUsIDB4Y2IsIDB4NWEsIDB4MmYsIDB4Y2EsCisrCTB4YTAsIDB4MzQsIDB4NmUsIDB4ZmIsIDB4OTMsIDB4NjUsIDB4NTQsIDB4NjQsCisrCTB4NDgsIDB4MDIsIDB4NWYsIDB4NDEsIDB4ZmEsIDB4NGUsIDB4MzMsIDB4NmMsCisrCTB4NzgsIDB4NjksIDB4NTcsIDB4YTIsIDB4YTcsIDB4YzQsIDB4OTMsIDB4MGEsCisrCTB4NmMsIDB4MmQsIDB4OTAsIDB4OTYsIDB4NTIsIDB4NGYsIDB4YTEsIDB4YjIsCisrCTB4YjAsIDB4MjMsIDB4YjgsIDB4YjIsIDB4ODgsIDB4MjIsIDB4MjcsIDB4NzMsCisrCTB4MDAsIDB4MjYsIDB4NmUsIDB4YTEsIDB4ZTQsIDB4MzYsIDB4NDQsIDB4YTMsCisrCTB4NGQsIDB4OGQsIDB4ZDEsIDB4ZGMsIDB4OTMsIDB4ZjIsIDB4ZmEsIDB4MTMKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MTA3W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4NDcsIDB4YzMsIDB4MjcsIDB4Y2MsIDB4MzYsIDB4NWQsIDB4MDgsIDB4ODcsCisrCTB4NTksIDB4MDksIDB4OGMsIDB4MzQsIDB4MWIsIDB4NGEsIDB4ZWQsIDB4MDMsCisrCTB4ZDQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4MmIsIDB4MGIsIDB4OTcsIDB4M2YsIDB4NzQsIDB4NWIsIDB4MjgsIDB4YWEsCisrCTB4ZTksIDB4MzcsIDB4ZjUsIDB4OWYsIDB4MTgsIDB4ZWEsIDB4YzcsIDB4MDEsCisrCTB4ZDQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4MmIsIDB4MGIsIDB4OTcsIDB4M2YsIDB4NzQsIDB4NWIsIDB4MjgsIDB4YWEsCisrCTB4ZTksIDB4MzcsIDB4ZjUsIDB4OWYsIDB4MTgsIDB4ZWEsIDB4YzcsIDB4MDEsCisrCTB4ZDYsIDB4OGMsIDB4ZTEsIDB4NzQsIDB4MDcsIDB4OWEsIDB4ZGQsIDB4MDIsCisrCTB4OGQsIDB4ZDAsIDB4NWMsIDB4ZjgsIDB4MTQsIDB4NjMsIDB4MDQsIDB4ODgKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MxMDdbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTEwN1tdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDRjLCAweDJkLCAweDUyCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTEwN1tdIF9faW5pdGNvbnN0ID0geworKwkweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAorKwkweDg4LCAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAweDhmLAorKwkweDkwLCAweDkxLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LAorKwkweDk4LCAweDk5LCAweDlhLCAweDliLCAweDljLCAweDlkLCAweDllLCAweDlmCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gZWRnZSBjYXNlIGludGVybWVkaWF0ZSBzdW1zIGluIHBvbHkxMzA1ICovCisrc3RhdGljIGNvbnN0IHU4IGVuY19pbnB1dDEwOFtdIF9faW5pdGNvbnN0ID0geworKwkweGI1LCAweDEzLCAweGIwLCAweDZhLCAweGI5LCAweGFjLCAweDE0LCAweDQzLAorKwkweDVhLCAweGNiLCAweDhhLCAweGEzLCAweGEzLCAweDdhLCAweGZkLCAweGI2LAorKwkweDU0LCAweDNkLCAweDM1LCAweGY2LCAweDEzLCAweGU2LCAweGQ5LCAweDA5LAorKwkweDNkLCAweDM4LCAweGU5LCAweDc1LCAweGMzLCAweDhmLCAweGUzLCAweGI4LAorKwkweDYxLCAweDk1LCAweDAxLCAweDkzLCAweGIxLCAweGJmLCAweDAzLCAweDExLAorKwkweGZmLCAweDExLCAweDc5LCAweDg5LCAweGFlLCAweGQ5LCAweGE5LCAweDk5LAorKwkweGIwLCAweGY2LCAweDM3LCAweDgxLCAweDcxLCAweGVhLCAweGU0LCAweDM5LAorKwkweDZlLCAweGExLCAweDVkLCAweGMyLCAweDQwLCAweGQxLCAweGFiLCAweGY0LAorKwkweGI5LCAweGMyLCAweDdjLCAweDMwLCAweDI4LCAweGFhLCAweDhkLCAweDY5LAorKwkweGVmLCAweDA2LCAweGFmLCAweGMwLCAweGI1LCAweDllLCAweGRhLCAweDhlCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX291dHB1dDEwOFtdIF9faW5pdGNvbnN0ID0geworKwkweGI1LCAweDc4LCAweDY3LCAweDQ1LCAweDNmLCAweDY2LCAweGY0LCAweGRhLAorKwkweGY5LCAweGU0LCAweDc0LCAweDY5LCAweDFmLCAweDljLCAweDg1LCAweDE1LAorKwkweGQzLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDAxLCAweDEwLCAweDEzLCAweDU5LCAweDg1LCAweDFhLCAweGQzLCAweDI0LAorKwkweGEwLCAweGRhLCAweGU4LCAweDhkLCAweGMyLCAweDQzLCAweDAyLCAweDAyLAorKwkweGQzLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDAxLCAweDEwLCAweDEzLCAweDU5LCAweDg1LCAweDFhLCAweGQzLCAweDI0LAorKwkweGEwLCAweGRhLCAweGU4LCAweDhkLCAweGMyLCAweDQzLCAweDAyLCAweDAyLAorKwkweGFhLCAweDQ4LCAweGEzLCAweDg4LCAweDdkLCAweDRiLCAweDA1LCAweDk2LAorKwkweDk5LCAweGMyLCAweGZkLCAweGY5LCAweGM2LCAweDc4LCAweDdlLCAweDBhCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2Fzc29jMTA4W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UxMDhbXSBfX2luaXRjb25zdCA9IHsKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg0YywgMHgyZCwgMHg1MgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkxMDhbXSBfX2luaXRjb25zdCA9IHsKKysJMHg4MCwgMHg4MSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywKKysJMHg4OCwgMHg4OSwgMHg4YSwgMHg4YiwgMHg4YywgMHg4ZCwgMHg4ZSwgMHg4ZiwKKysJMHg5MCwgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywKKysJMHg5OCwgMHg5OSwgMHg5YSwgMHg5YiwgMHg5YywgMHg5ZCwgMHg5ZSwgMHg5ZgorK307CisrCisrLyogd3ljaGVwcm9vZiAtIGVkZ2UgY2FzZSBpbnRlcm1lZGlhdGUgc3VtcyBpbiBwb2x5MTMwNSAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQxMDlbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHg5NCwgMHgyOCwgMHhkMCwgMHg3OSwgMHgzNSwgMHgxZiwgMHg2NiwKKysJMHg1YywgMHhkMCwgMHgwMSwgMHgzNSwgMHg0MywgMHgxOSwgMHg4NywgMHg1YywKKysJMHhkNCwgMHhmMSwgMHgwOSwgMHhlOCwgMHgxNCwgMHhjZSwgMHhhOCwgMHg1YSwKKysJMHgwOCwgMHhjMCwgMHgxMSwgMHhkOCwgMHg1MCwgMHhkZCwgMHgxZCwgMHhjYiwKKysJMHhjZiwgMHg3YSwgMHhlZCwgMHgzNSwgMHhjYiwgMHg1YSwgMHgyZiwgMHhjYSwKKysJMHhhMCwgMHgzNCwgMHg2ZSwgMHhmYiwgMHg5MywgMHg2NSwgMHg1NCwgMHg2NCwKKysJMHg1MywgMHg0MCwgMHhiOCwgMHg1YSwgMHg5YSwgMHhhMCwgMHg4MiwgMHg5NiwKKysJMHhiNywgMHg3YSwgMHg1ZiwgMHhjMywgMHg5NiwgMHgxZiwgMHg2NiwgMHgwZiwKKysJMHgxNywgMHgyZCwgMHg5MCwgMHg5NiwgMHg1MiwgMHg0ZiwgMHhhMSwgMHhiMiwKKysJMHhiMCwgMHgyMywgMHhiOCwgMHhiMiwgMHg4OCwgMHgyMiwgMHgyNywgMHg3MywKKysJMHgxYiwgMHg2NCwgMHg4OSwgMHhiYSwgMHg4NCwgMHhkOCwgMHhmNSwgMHg1OSwKKysJMHg4MiwgMHg5ZSwgMHhkOSwgMHhiZCwgMHhhMiwgMHgyOSwgMHgwZiwgMHgxNgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQxMDlbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHg1MywgMHgzMywgMHhjMywgMHhlMSwgMHhmOCwgMHhkNywgMHg4ZSwgMHhhYywKKysJMHhjYSwgMHgwNywgMHgwNywgMHg1MiwgMHg2YywgMHhhZCwgMHgwMSwgMHg4YywKKysJMHhhZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHgzMCwgMHg0OSwgMHg3MCwgMHgyNCwgMHgxNCwgMHhiNSwgMHg5OSwgMHg1MCwKKysJMHgyNiwgMHgyNCwgMHhmZCwgMHhmZSwgMHgyOSwgMHgzMSwgMHgzMiwgMHgwNCwKKysJMHhhZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHgzMCwgMHg0OSwgMHg3MCwgMHgyNCwgMHgxNCwgMHhiNSwgMHg5OSwgMHg1MCwKKysJMHgyNiwgMHgyNCwgMHhmZCwgMHhmZSwgMHgyOSwgMHgzMSwgMHgzMiwgMHgwNCwKKysJMHhiOSwgMHgzNiwgMHhhOCwgMHgxNywgMHhmMiwgMHgyMSwgMHgxYSwgMHhmMSwKKysJMHgyOSwgMHhlMiwgMHhjZiwgMHgxNiwgMHgwZiwgMHhkNCwgMHgyYiwgMHhjYgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzEwOVtdIF9faW5pdGNvbnN0ID0geworKwkweGZmLCAweGZmLCAweGZmLCAweGZmCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX25vbmNlMTA5W10gX19pbml0Y29uc3QgPSB7CisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4NGMsIDB4MmQsIDB4NTIKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfa2V5MTA5W10gX19pbml0Y29uc3QgPSB7CisrCTB4ODAsIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCisrCTB4ODgsIDB4ODksIDB4OGEsIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsCisrCTB4OTAsIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsCisrCTB4OTgsIDB4OTksIDB4OWEsIDB4OWIsIDB4OWMsIDB4OWQsIDB4OWUsIDB4OWYKKyt9OworKworKy8qIHd5Y2hlcHJvb2YgLSBlZGdlIGNhc2UgaW50ZXJtZWRpYXRlIHN1bXMgaW4gcG9seTEzMDUgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MTEwW10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4OTQsIDB4MjgsIDB4ZDAsIDB4NzksIDB4MzUsIDB4MWYsIDB4NjYsCisrCTB4NWMsIDB4ZDAsIDB4MDEsIDB4MzUsIDB4NDMsIDB4MTksIDB4ODcsIDB4NWMsCisrCTB4ZGYsIDB4NGMsIDB4NjIsIDB4MDMsIDB4MmQsIDB4NDEsIDB4MTksIDB4YjUsCisrCTB4ODgsIDB4NDcsIDB4N2UsIDB4OTksIDB4OTIsIDB4NWEsIDB4NTYsIDB4ZDksCisrCTB4ZDYsIDB4N2EsIDB4ZWQsIDB4MzUsIDB4Y2IsIDB4NWEsIDB4MmYsIDB4Y2EsCisrCTB4YTAsIDB4MzQsIDB4NmUsIDB4ZmIsIDB4OTMsIDB4NjUsIDB4NTQsIDB4NjQsCisrCTB4ZmEsIDB4ODQsIDB4ZjAsIDB4NjQsIDB4NTUsIDB4MzYsIDB4NDIsIDB4MWIsCisrCTB4MmIsIDB4YjksIDB4MjQsIDB4NmUsIDB4YzIsIDB4MTksIDB4ZWQsIDB4MGIsCisrCTB4MGUsIDB4MmQsIDB4OTAsIDB4OTYsIDB4NTIsIDB4NGYsIDB4YTEsIDB4YjIsCisrCTB4YjAsIDB4MjMsIDB4YjgsIDB4YjIsIDB4ODgsIDB4MjIsIDB4MjcsIDB4NzMsCisrCTB4YjIsIDB4YTAsIDB4YzEsIDB4ODQsIDB4NGIsIDB4NGUsIDB4MzUsIDB4ZDQsCisrCTB4MWUsIDB4NWQsIDB4YTIsIDB4MTAsIDB4ZjYsIDB4MmYsIDB4ODQsIDB4MTIKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MTEwW10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4NTgsIDB4OGUsIDB4YTgsIDB4MGEsIDB4YzEsIDB4NTgsIDB4M2YsIDB4NDMsCisrCTB4NGEsIDB4ODAsIDB4NjgsIDB4MTMsIDB4YWUsIDB4MmEsIDB4NGEsIDB4OWUsCisrCTB4YjYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4OTksIDB4OGQsIDB4MzgsIDB4MWEsIDB4ZGIsIDB4MjMsIDB4NTksIDB4ZGQsCisrCTB4YmEsIDB4ZTcsIDB4ODYsIDB4NTMsIDB4N2QsIDB4MzcsIDB4YjksIDB4MDAsCisrCTB4YjYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4OTksIDB4OGQsIDB4MzgsIDB4MWEsIDB4ZGIsIDB4MjMsIDB4NTksIDB4ZGQsCisrCTB4YmEsIDB4ZTcsIDB4ODYsIDB4NTMsIDB4N2QsIDB4MzcsIDB4YjksIDB4MDAsCisrCTB4OWYsIDB4N2EsIDB4YzQsIDB4MzUsIDB4MWYsIDB4NmIsIDB4OTEsIDB4ZTYsCisrCTB4MzAsIDB4OTcsIDB4YTcsIDB4MTMsIDB4MTEsIDB4NWQsIDB4MDUsIDB4YmUKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MxMTBbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTExMFtdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDRjLCAweDJkLCAweDUyCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTExMFtdIF9faW5pdGNvbnN0ID0geworKwkweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAorKwkweDg4LCAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAweDhmLAorKwkweDkwLCAweDkxLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LAorKwkweDk4LCAweDk5LCAweDlhLCAweDliLCAweDljLCAweDlkLCAweDllLCAweDlmCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gZWRnZSBjYXNlIGludGVybWVkaWF0ZSBzdW1zIGluIHBvbHkxMzA1ICovCisrc3RhdGljIGNvbnN0IHU4IGVuY19pbnB1dDExMVtdIF9faW5pdGNvbnN0ID0geworKwkweGZmLCAweDk0LCAweDI4LCAweGQwLCAweDc5LCAweDM1LCAweDFmLCAweDY2LAorKwkweDVjLCAweGQwLCAweDAxLCAweDM1LCAweDQzLCAweDE5LCAweDg3LCAweDVjLAorKwkweDEzLCAweGY4LCAweDBhLCAweDAwLCAweDZkLCAweGMxLCAweGJiLCAweGRhLAorKwkweGQ2LCAweDM5LCAweGE5LCAweDJmLCAweGM3LCAweGVjLCAweGE2LCAweDU1LAorKwkweGY3LCAweDdhLCAweGVkLCAweDM1LCAweGNiLCAweDVhLCAweDJmLCAweGNhLAorKwkweGEwLCAweDM0LCAweDZlLCAweGZiLCAweDkzLCAweDY1LCAweDU0LCAweDY0LAorKwkweDYzLCAweDQ4LCAweGI4LCAweGZkLCAweDI5LCAweGJmLCAweDk2LCAweGQ1LAorKwkweDYzLCAweGE1LCAweDE3LCAweGUyLCAweDdkLCAweDdiLCAweGZjLCAweDBmLAorKwkweDJmLCAweDJkLCAweDkwLCAweDk2LCAweDUyLCAweDRmLCAweGExLCAweGIyLAorKwkweGIwLCAweDIzLCAweGI4LCAweGIyLCAweDg4LCAweDIyLCAweDI3LCAweDczLAorKwkweDJiLCAweDZjLCAweDg5LCAweDFkLCAweDM3LCAweGM3LCAweGUxLCAweDFhLAorKwkweDU2LCAweDQxLCAweDkxLCAweDljLCAweDQ5LCAweDRkLCAweDk1LCAweDE2CisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX291dHB1dDExMVtdIF9faW5pdGNvbnN0ID0geworKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDk0LCAweDNhLCAweGMwLCAweDA5LCAweDgxLCAweGQ4LCAweDlkLCAweDJjLAorKwkweDE0LCAweGZlLCAweGJmLCAweGE1LCAweGZiLCAweDljLCAweGJhLCAweDEyLAorKwkweDk3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDAwLCAweDQxLCAweDcwLCAweDgzLCAweGE3LCAweGFhLCAweDhkLCAweDEzLAorKwkweGYyLCAweGZiLCAweGI1LCAweGRmLCAweGMyLCAweDU1LCAweGE4LCAweDA0LAorKwkweDk3LCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDAwLCAweDQxLCAweDcwLCAweDgzLCAweGE3LCAweGFhLCAweDhkLCAweDEzLAorKwkweGYyLCAweGZiLCAweGI1LCAweGRmLCAweGMyLCAweDU1LCAweGE4LCAweDA0LAorKwkweDlhLCAweDE4LCAweGE4LCAweDI4LCAweDA3LCAweDAyLCAweDY5LCAweGY0LAorKwkweDQ3LCAweDAwLCAweGQwLCAweDA5LCAweGU3LCAweDE3LCAweDFjLCAweGM5CisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2Fzc29jMTExW10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UxMTFbXSBfX2luaXRjb25zdCA9IHsKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg0YywgMHgyZCwgMHg1MgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkxMTFbXSBfX2luaXRjb25zdCA9IHsKKysJMHg4MCwgMHg4MSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywKKysJMHg4OCwgMHg4OSwgMHg4YSwgMHg4YiwgMHg4YywgMHg4ZCwgMHg4ZSwgMHg4ZiwKKysJMHg5MCwgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywKKysJMHg5OCwgMHg5OSwgMHg5YSwgMHg5YiwgMHg5YywgMHg5ZCwgMHg5ZSwgMHg5ZgorK307CisrCisrLyogd3ljaGVwcm9vZiAtIGVkZ2UgY2FzZSBpbnRlcm1lZGlhdGUgc3VtcyBpbiBwb2x5MTMwNSAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQxMTJbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHg5NCwgMHgyOCwgMHhkMCwgMHg3OSwgMHgzNSwgMHgxZiwgMHg2NiwKKysJMHg1YywgMHhkMCwgMHgwMSwgMHgzNSwgMHg0MywgMHgxOSwgMHg4NywgMHg1YywKKysJMHg4MiwgMHhlNSwgMHg5YiwgMHg0NSwgMHg4MiwgMHg5MSwgMHg1MCwgMHgzOCwKKysJMHhmOSwgMHgzMywgMHg4MSwgMHgxZSwgMHg2NSwgMHgyZCwgMHhjNiwgMHg2YSwKKysJMHhmYywgMHg3YSwgMHhlZCwgMHgzNSwgMHhjYiwgMHg1YSwgMHgyZiwgMHhjYSwKKysJMHhhMCwgMHgzNCwgMHg2ZSwgMHhmYiwgMHg5MywgMHg2NSwgMHg1NCwgMHg2NCwKKysJMHhiNiwgMHg3MSwgMHhjOCwgMHhjYSwgMHhjMiwgMHg3MCwgMHhjMiwgMHg2NSwKKysJMHhhMCwgMHhhYywgMHgyZiwgMHg1MywgMHg1NywgMHg5OSwgMHg4OCwgMHgwYSwKKysJMHgyNCwgMHgyZCwgMHg5MCwgMHg5NiwgMHg1MiwgMHg0ZiwgMHhhMSwgMHhiMiwKKysJMHhiMCwgMHgyMywgMHhiOCwgMHhiMiwgMHg4OCwgMHgyMiwgMHgyNywgMHg3MywKKysJMHhmZSwgMHg1NSwgMHhmOSwgMHgyYSwgMHhkYywgMHgwOCwgMHhiNSwgMHhhYSwKKysJMHg5NSwgMHg0OCwgMHhhOSwgMHgyZCwgMHg2MywgMHhhZiwgMHhlMSwgMHgxMworK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQxMTJbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHgwNSwgMHgyNywgMHg1MSwgMHg0YywgMHg2ZSwgMHg4OCwgMHg3NiwgMHhjZSwKKysJMHgzYiwgMHhmNCwgMHg5NywgMHg5NCwgMHg1OSwgMHg1ZCwgMHhkYSwgMHgyZCwKKysJMHg5YywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhkNSwgMHg3OCwgMHgwMCwgMHhiNCwgMHg0YywgMHg2NSwgMHhkOSwgMHhhMywKKysJMHgzMSwgMHhmMiwgMHg4ZCwgMHg2ZSwgMHhlOCwgMHhiNywgMHhkYywgMHgwMSwKKysJMHg5YywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhkNSwgMHg3OCwgMHgwMCwgMHhiNCwgMHg0YywgMHg2NSwgMHhkOSwgMHhhMywKKysJMHgzMSwgMHhmMiwgMHg4ZCwgMHg2ZSwgMHhlOCwgMHhiNywgMHhkYywgMHgwMSwKKysJMHhiNCwgMHgzNiwgMHhhOCwgMHgyYiwgMHg5MywgMHhkNSwgMHg1NSwgMHhmNywKKysJMHg0MywgMHgwMCwgMHhkMCwgMHgxOSwgMHg5YiwgMHhhNywgMHgxOCwgMHhjZQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzExMltdIF9faW5pdGNvbnN0ID0geworKwkweGZmLCAweGZmLCAweGZmLCAweGZmCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX25vbmNlMTEyW10gX19pbml0Y29uc3QgPSB7CisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4NGMsIDB4MmQsIDB4NTIKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfa2V5MTEyW10gX19pbml0Y29uc3QgPSB7CisrCTB4ODAsIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCisrCTB4ODgsIDB4ODksIDB4OGEsIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsCisrCTB4OTAsIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsCisrCTB4OTgsIDB4OTksIDB4OWEsIDB4OWIsIDB4OWMsIDB4OWQsIDB4OWUsIDB4OWYKKyt9OworKworKy8qIHd5Y2hlcHJvb2YgLSBlZGdlIGNhc2UgaW50ZXJtZWRpYXRlIHN1bXMgaW4gcG9seTEzMDUgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MTEzW10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4OTQsIDB4MjgsIDB4ZDAsIDB4NzksIDB4MzUsIDB4MWYsIDB4NjYsCisrCTB4NWMsIDB4ZDAsIDB4MDEsIDB4MzUsIDB4NDMsIDB4MTksIDB4ODcsIDB4NWMsCisrCTB4ZjEsIDB4ZDEsIDB4MjgsIDB4ODcsIDB4YjcsIDB4MjEsIDB4NjksIDB4ODYsCisrCTB4YTEsIDB4MmQsIDB4NzksIDB4MDksIDB4OGIsIDB4NmQsIDB4ZTYsIDB4MGYsCisrCTB4YzAsIDB4N2EsIDB4ZWQsIDB4MzUsIDB4Y2IsIDB4NWEsIDB4MmYsIDB4Y2EsCisrCTB4YTAsIDB4MzQsIDB4NmUsIDB4ZmIsIDB4OTMsIDB4NjUsIDB4NTQsIDB4NjQsCisrCTB4YTcsIDB4YzcsIDB4NTgsIDB4OTksIDB4ZjMsIDB4ZTYsIDB4MGEsIDB4ZjEsCisrCTB4ZmMsIDB4YjYsIDB4YzcsIDB4MzAsIDB4N2QsIDB4ODcsIDB4NTksIDB4MGYsCisrCTB4MTgsIDB4MmQsIDB4OTAsIDB4OTYsIDB4NTIsIDB4NGYsIDB4YTEsIDB4YjIsCisrCTB4YjAsIDB4MjMsIDB4YjgsIDB4YjIsIDB4ODgsIDB4MjIsIDB4MjcsIDB4NzMsCisrCTB4ZWYsIDB4ZTMsIDB4NjksIDB4NzksIDB4ZWQsIDB4OWUsIDB4N2QsIDB4M2UsCisrCTB4YzksIDB4NTIsIDB4NDEsIDB4NGUsIDB4NDksIDB4YjEsIDB4MzAsIDB4MTYKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MTEzW10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4NzYsIDB4MTMsIDB4ZTIsIDB4OGUsIDB4NWIsIDB4MzgsIDB4NGYsIDB4NzAsCisrCTB4NjMsIDB4ZWEsIDB4NmYsIDB4ODMsIDB4YjcsIDB4MWQsIDB4ZmEsIDB4NDgsCisrCTB4YTAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4YzQsIDB4Y2UsIDB4OTAsIDB4ZTcsIDB4N2QsIDB4ZjMsIDB4MTEsIDB4MzcsCisrCTB4NmQsIDB4ZTgsIDB4NjUsIDB4MGQsIDB4YzIsIDB4YTksIDB4MGQsIDB4MDQsCisrCTB4YTAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4YzQsIDB4Y2UsIDB4OTAsIDB4ZTcsIDB4N2QsIDB4ZjMsIDB4MTEsIDB4MzcsCisrCTB4NmQsIDB4ZTgsIDB4NjUsIDB4MGQsIDB4YzIsIDB4YTksIDB4MGQsIDB4MDQsCisrCTB4Y2UsIDB4NTQsIDB4YTgsIDB4MmUsIDB4MWYsIDB4YTksIDB4NDIsIDB4ZmEsCisrCTB4M2YsIDB4MDAsIDB4ZDAsIDB4MjksIDB4NGYsIDB4MzcsIDB4MTUsIDB4ZDMKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MxMTNbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTExM1tdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDRjLCAweDJkLCAweDUyCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTExM1tdIF9faW5pdGNvbnN0ID0geworKwkweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAorKwkweDg4LCAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAweDhmLAorKwkweDkwLCAweDkxLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LAorKwkweDk4LCAweDk5LCAweDlhLCAweDliLCAweDljLCAweDlkLCAweDllLCAweDlmCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gZWRnZSBjYXNlIGludGVybWVkaWF0ZSBzdW1zIGluIHBvbHkxMzA1ICovCisrc3RhdGljIGNvbnN0IHU4IGVuY19pbnB1dDExNFtdIF9faW5pdGNvbnN0ID0geworKwkweGNiLCAweGYxLCAweGRhLCAweDllLCAweDBiLCAweGE5LCAweDM3LCAweDczLAorKwkweDc0LCAweGU2LCAweDllLCAweDFjLCAweDBlLCAweDYwLCAweDBjLCAweGZjLAorKwkweDM0LCAweDNkLCAweDM1LCAweGY2LCAweDEzLCAweGU2LCAweGQ5LCAweDA5LAorKwkweDNkLCAweDM4LCAweGU5LCAweDc1LCAweGMzLCAweDhmLCAweGUzLCAweGI4LAorKwkweGJlLCAweDNmLCAweGE2LCAweDZiLCAweDZjLCAweGU3LCAweDgwLCAweDhhLAorKwkweGEzLCAweGU0LCAweDU5LCAweDQ5LCAweGY5LCAweDQ0LCAweDY0LCAweDlmLAorKwkweGQwLCAweGY2LCAweDM3LCAweDgxLCAweDcxLCAweGVhLCAweGU0LCAweDM5LAorKwkweDZlLCAweGExLCAweDVkLCAweGMyLCAweDQwLCAweGQxLCAweGFiLCAweGY0LAorKwkweDY2LCAweDY4LCAweGRiLCAweGM4LCAweGY1LCAweGYyLCAweDBlLCAweGYyLAorKwkweGIzLCAweGYzLCAweDhmLCAweDAwLCAweGUyLCAweDAzLCAweDE3LCAweDg4CisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX291dHB1dDExNFtdIF9faW5pdGNvbnN0ID0geworKwkweGNiLCAweDlhLCAweDBkLCAweGIxLCAweDhkLCAweDYzLCAweGQ3LCAweGVhLAorKwkweGQ3LCAweGM5LCAweDYwLCAweGQ2LCAweGIyLCAweDg2LCAweDc0LCAweDVmLAorKwkweGIzLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGRlLCAweGJhLCAweGI0LCAweGExLCAweDU4LCAweDQyLCAweDUwLCAweGJmLAorKwkweGZjLCAweDJmLCAweGM4LCAweDRkLCAweDk1LCAweGRlLCAweGNmLCAweDA0LAorKwkweGIzLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGRlLCAweGJhLCAweGI0LCAweGExLCAweDU4LCAweDQyLCAweDUwLCAweGJmLAorKwkweGZjLCAweDJmLCAweGM4LCAweDRkLCAweDk1LCAweGRlLCAweGNmLCAweDA0LAorKwkweDIzLCAweDgzLCAweGFiLCAweDBiLCAweDc5LCAweDkyLCAweDA1LCAweDY5LAorKwkweDliLCAweDUxLCAweDBhLCAweGE3LCAweDA5LCAweGJmLCAweDMxLCAweGYxCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2Fzc29jMTE0W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UxMTRbXSBfX2luaXRjb25zdCA9IHsKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg0YywgMHgyZCwgMHg1MgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkxMTRbXSBfX2luaXRjb25zdCA9IHsKKysJMHg4MCwgMHg4MSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywKKysJMHg4OCwgMHg4OSwgMHg4YSwgMHg4YiwgMHg4YywgMHg4ZCwgMHg4ZSwgMHg4ZiwKKysJMHg5MCwgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywKKysJMHg5OCwgMHg5OSwgMHg5YSwgMHg5YiwgMHg5YywgMHg5ZCwgMHg5ZSwgMHg5ZgorK307CisrCisrLyogd3ljaGVwcm9vZiAtIGVkZ2UgY2FzZSBpbnRlcm1lZGlhdGUgc3VtcyBpbiBwb2x5MTMwNSAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQxMTVbXSBfX2luaXRjb25zdCA9IHsKKysJMHg4ZiwgMHgyNywgMHg4NiwgMHg5NCwgMHhjNCwgMHhlOSwgMHhkYSwgMHhlYiwKKysJMHhkNSwgMHg4ZCwgMHgzZSwgMHg1YiwgMHg5NiwgMHg2ZSwgMHg4YiwgMHg2OCwKKysJMHg0MiwgMHgzZCwgMHgzNSwgMHhmNiwgMHgxMywgMHhlNiwgMHhkOSwgMHgwOSwKKysJMHgzZCwgMHgzOCwgMHhlOSwgMHg3NSwgMHhjMywgMHg4ZiwgMHhlMywgMHhiOCwKKysJMHgwNiwgMHg1MywgMHhlNywgMHhhMywgMHgzMSwgMHg3MSwgMHg4OCwgMHgzMywKKysJMHhhYywgMHhjMywgMHhiOSwgMHhhZCwgMHhmZiwgMHgxYywgMHgzMSwgMHg5OCwKKysJMHhhNiwgMHhmNiwgMHgzNywgMHg4MSwgMHg3MSwgMHhlYSwgMHhlNCwgMHgzOSwKKysJMHg2ZSwgMHhhMSwgMHg1ZCwgMHhjMiwgMHg0MCwgMHhkMSwgMHhhYiwgMHhmNCwKKysJMHhkZSwgMHgwNCwgMHg5YSwgMHgwMCwgMHhhOCwgMHg2NCwgMHgwNiwgMHg0YiwKKysJMHhiYywgMHhkNCwgMHg2ZiwgMHhlNCwgMHhlNCwgMHg1YiwgMHg0MiwgMHg4ZgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQxMTVbXSBfX2luaXRjb25zdCA9IHsKKysJMHg4ZiwgMHg0YywgMHg1MSwgMHhiYiwgMHg0MiwgMHgyMywgMHgzYSwgMHg3MiwKKysJMHg3NiwgMHhhMiwgMHhjMCwgMHg5MSwgMHgyYSwgMHg4OCwgMHhmMywgMHhjYiwKKysJMHhjNSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHg2NiwgMHhkNiwgMHhmNSwgMHg2OSwgMHgwNSwgMHhkNCwgMHg1OCwgMHgwNiwKKysJMHhmMywgMHgwOCwgMHgyOCwgMHhhOSwgMHg5MywgMHg4NiwgMHg5YSwgMHgwMywKKysJMHhjNSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHg2NiwgMHhkNiwgMHhmNSwgMHg2OSwgMHgwNSwgMHhkNCwgMHg1OCwgMHgwNiwKKysJMHhmMywgMHgwOCwgMHgyOCwgMHhhOSwgMHg5MywgMHg4NiwgMHg5YSwgMHgwMywKKysJMHg4YiwgMHhmYiwgMHhhYiwgMHgxNywgMHhhOSwgMHhlMCwgMHhiOCwgMHg3NCwKKysJMHg4YiwgMHg1MSwgMHgwYSwgMHhlNywgMHhkOSwgMHhmZCwgMHgyMywgMHgwNQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzExNVtdIF9faW5pdGNvbnN0ID0geworKwkweGZmLCAweGZmLCAweGZmLCAweGZmCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX25vbmNlMTE1W10gX19pbml0Y29uc3QgPSB7CisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4NGMsIDB4MmQsIDB4NTIKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfa2V5MTE1W10gX19pbml0Y29uc3QgPSB7CisrCTB4ODAsIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCisrCTB4ODgsIDB4ODksIDB4OGEsIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsCisrCTB4OTAsIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsCisrCTB4OTgsIDB4OTksIDB4OWEsIDB4OWIsIDB4OWMsIDB4OWQsIDB4OWUsIDB4OWYKKyt9OworKworKy8qIHd5Y2hlcHJvb2YgLSBlZGdlIGNhc2UgaW50ZXJtZWRpYXRlIHN1bXMgaW4gcG9seTEzMDUgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MTE2W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZDUsIDB4OTQsIDB4MjgsIDB4ZDAsIDB4NzksIDB4MzUsIDB4MWYsIDB4NjYsCisrCTB4NWMsIDB4ZDAsIDB4MDEsIDB4MzUsIDB4NDMsIDB4MTksIDB4ODcsIDB4NWMsCisrCTB4OWEsIDB4MjIsIDB4ZDcsIDB4MGEsIDB4NDgsIDB4ZTIsIDB4NGYsIDB4ZGQsCisrCTB4Y2QsIDB4ZDQsIDB4NDEsIDB4OWQsIDB4ZTYsIDB4NGMsIDB4OGYsIDB4NDQsCisrCTB4ZmMsIDB4N2EsIDB4ZWQsIDB4MzUsIDB4Y2IsIDB4NWEsIDB4MmYsIDB4Y2EsCisrCTB4YTAsIDB4MzQsIDB4NmUsIDB4ZmIsIDB4OTMsIDB4NjUsIDB4NTQsIDB4NjQsCisrCTB4NzcsIDB4YjUsIDB4YzksIDB4MDcsIDB4ZDksIDB4YzksIDB4ZTEsIDB4ZWEsCisrCTB4NTEsIDB4ODUsIDB4MWEsIDB4MjAsIDB4NGEsIDB4YWQsIDB4OWYsIDB4MGEsCisrCTB4MjQsIDB4MmQsIDB4OTAsIDB4OTYsIDB4NTIsIDB4NGYsIDB4YTEsIDB4YjIsCisrCTB4YjAsIDB4MjMsIDB4YjgsIDB4YjIsIDB4ODgsIDB4MjIsIDB4MjcsIDB4NzMsCisrCTB4M2YsIDB4OTEsIDB4ZjgsIDB4ZTcsIDB4YzcsIDB4YjEsIDB4OTYsIDB4MjUsCisrCTB4NjQsIDB4NjEsIDB4OWMsIDB4NWUsIDB4N2UsIDB4OWIsIDB4ZjYsIDB4MTMKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MTE2W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZDUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4MWQsIDB4ZTAsIDB4MWQsIDB4MDMsIDB4YTQsIDB4ZmIsIDB4NjksIDB4MmIsCisrCTB4MGYsIDB4MTMsIDB4NTcsIDB4MTcsIDB4ZGEsIDB4M2MsIDB4OTMsIDB4MDMsCisrCTB4OWMsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4MTQsIDB4YmMsIDB4MDEsIDB4NzksIDB4NTcsIDB4ZGMsIDB4ZmEsIDB4MmMsCisrCTB4YzAsIDB4ZGIsIDB4YjgsIDB4MWQsIDB4ZjUsIDB4ODMsIDB4Y2IsIDB4MDEsCisrCTB4OWMsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4MTQsIDB4YmMsIDB4MDEsIDB4NzksIDB4NTcsIDB4ZGMsIDB4ZmEsIDB4MmMsCisrCTB4YzAsIDB4ZGIsIDB4YjgsIDB4MWQsIDB4ZjUsIDB4ODMsIDB4Y2IsIDB4MDEsCisrCTB4NDksIDB4YmMsIDB4NmUsIDB4OWYsIDB4YzUsIDB4MWMsIDB4NGQsIDB4NTAsCisrCTB4MzAsIDB4MzYsIDB4NjQsIDB4NGQsIDB4ODQsIDB4MjcsIDB4NzMsIDB4ZDIKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MxMTZbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTExNltdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDRjLCAweDJkLCAweDUyCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTExNltdIF9faW5pdGNvbnN0ID0geworKwkweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAorKwkweDg4LCAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAweDhmLAorKwkweDkwLCAweDkxLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LAorKwkweDk4LCAweDk5LCAweDlhLCAweDliLCAweDljLCAweDlkLCAweDllLCAweDlmCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gZWRnZSBjYXNlIGludGVybWVkaWF0ZSBzdW1zIGluIHBvbHkxMzA1ICovCisrc3RhdGljIGNvbnN0IHU4IGVuY19pbnB1dDExN1tdIF9faW5pdGNvbnN0ID0geworKwkweGRiLCAweDk0LCAweDI4LCAweGQwLCAweDc5LCAweDM1LCAweDFmLCAweDY2LAorKwkweDVjLCAweGQwLCAweDAxLCAweDM1LCAweDQzLCAweDE5LCAweDg3LCAweDVjLAorKwkweDc1LCAweGQ1LCAweDY0LCAweDNhLCAweGE1LCAweGFmLCAweDkzLCAweDRkLAorKwkweDhjLCAweGNlLCAweDM5LCAweDJjLCAweGMzLCAweGVlLCAweGRiLCAweDQ3LAorKwkweGMwLCAweDdhLCAweGVkLCAweDM1LCAweGNiLCAweDVhLCAweDJmLCAweGNhLAorKwkweGEwLCAweDM0LCAweDZlLCAweGZiLCAweDkzLCAweDY1LCAweDU0LCAweDY0LAorKwkweDYwLCAweDFiLCAweDVhLCAweGQyLCAweDA2LCAweDdmLCAweDI4LCAweDA2LAorKwkweDZhLCAweDhmLCAweDMyLCAweDgxLCAweDcxLCAweDViLCAweGE4LCAweDA4LAorKwkweDE4LCAweDJkLCAweDkwLCAweDk2LCAweDUyLCAweDRmLCAweGExLCAweGIyLAorKwkweGIwLCAweDIzLCAweGI4LCAweGIyLCAweDg4LCAweDIyLCAweDI3LCAweDczLAorKwkweDI4LCAweDNmLCAweDZiLCAweDMyLCAweDE4LCAweDA3LCAweDVmLCAweGM5LAorKwkweDVmLCAweDZiLCAweGI0LCAweGZmLCAweDQ1LCAweDZkLCAweGMxLCAweDExCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX291dHB1dDExN1tdIF9faW5pdGNvbnN0ID0geworKwkweGRiLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGYyLCAweDE3LCAweGFlLCAweDMzLCAweDQ5LCAweGI2LCAweGI1LCAweGJiLAorKwkweDRlLCAweDA5LCAweDJmLCAweGE2LCAweGZmLCAweDllLCAweGM3LCAweDAwLAorKwkweGEwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDAzLCAweDEyLCAweDkyLCAweGFjLCAweDg4LCAweDZhLCAweDMzLCAweGMwLAorKwkweGZiLCAweGQxLCAweDkwLCAweGJjLCAweGNlLCAweDc1LCAweGZjLCAweDAzLAorKwkweGEwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDAzLCAweDEyLCAweDkyLCAweGFjLCAweDg4LCAweDZhLCAweDMzLCAweGMwLAorKwkweGZiLCAweGQxLCAweDkwLCAweGJjLCAweGNlLCAweDc1LCAweGZjLCAweDAzLAorKwkweDYzLCAweGRhLCAweDZlLCAweGEyLCAweDUxLCAweGYwLCAweDM5LCAweDUzLAorKwkweDJjLCAweDM2LCAweDY0LCAweDVkLCAweDM4LCAweGI3LCAweDZmLCAweGQ3CisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2Fzc29jMTE3W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UxMTdbXSBfX2luaXRjb25zdCA9IHsKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg0YywgMHgyZCwgMHg1MgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkxMTdbXSBfX2luaXRjb25zdCA9IHsKKysJMHg4MCwgMHg4MSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywKKysJMHg4OCwgMHg4OSwgMHg4YSwgMHg4YiwgMHg4YywgMHg4ZCwgMHg4ZSwgMHg4ZiwKKysJMHg5MCwgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywKKysJMHg5OCwgMHg5OSwgMHg5YSwgMHg5YiwgMHg5YywgMHg5ZCwgMHg5ZSwgMHg5ZgorK307CisrCisrLyogd3ljaGVwcm9vZiAtIGVkZ2UgY2FzZSBpbnRlcm1lZGlhdGUgc3VtcyBpbiBwb2x5MTMwNSAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQxMThbXSBfX2luaXRjb25zdCA9IHsKKysJMHg5MywgMHg5NCwgMHgyOCwgMHhkMCwgMHg3OSwgMHgzNSwgMHgxZiwgMHg2NiwKKysJMHg1YywgMHhkMCwgMHgwMSwgMHgzNSwgMHg0MywgMHgxOSwgMHg4NywgMHg1YywKKysJMHg2MiwgMHg0OCwgMHgzOSwgMHg2MCwgMHg0MiwgMHgxNiwgMHhlNCwgMHgwMywKKysJMHhlYiwgMHhjYywgMHg2YSwgMHhmNSwgMHg1OSwgMHhlYywgMHg4YiwgMHg0MywKKysJMHg5NywgMHg3YSwgMHhlZCwgMHgzNSwgMHhjYiwgMHg1YSwgMHgyZiwgMHhjYSwKKysJMHhhMCwgMHgzNCwgMHg2ZSwgMHhmYiwgMHg5MywgMHg2NSwgMHg1NCwgMHg2NCwKKysJMHhkOCwgMHhjOCwgMHhjMywgMHhmYSwgMHgxYSwgMHg5ZSwgMHg0NywgMHg0YSwKKysJMHhiZSwgMHg1MiwgMHhkMCwgMHgyYywgMHg4MSwgMHg4NywgMHhlOSwgMHgwZiwKKysJMHg0ZiwgMHgyZCwgMHg5MCwgMHg5NiwgMHg1MiwgMHg0ZiwgMHhhMSwgMHhiMiwKKysJMHhiMCwgMHgyMywgMHhiOCwgMHhiMiwgMHg4OCwgMHgyMiwgMHgyNywgMHg3MywKKysJMHg5MCwgMHhlYywgMHhmMiwgMHgxYSwgMHgwNCwgMHhlNiwgMHgzMCwgMHg4NSwKKysJMHg4YiwgMHhiNiwgMHg1NiwgMHg1MiwgMHhiNSwgMHhiMSwgMHg4MCwgMHgxNgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQxMThbXSBfX2luaXRjb25zdCA9IHsKKysJMHg5MywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhlNSwgMHg4YSwgMHhmMywgMHg2OSwgMHhhZSwgMHgwZiwgMHhjMiwgMHhmNSwKKysJMHgyOSwgMHgwYiwgMHg3YywgMHg3ZiwgMHg2NSwgMHg5YywgMHg5NywgMHgwNCwKKysJMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhiYiwgMHhjMSwgMHgwYiwgMHg4NCwgMHg5NCwgMHg4YiwgMHg1YywgMHg4YywKKysJMHgyZiwgMHgwYywgMHg3MiwgMHgxMSwgMHgzZSwgMHhhOSwgMHhiZCwgMHgwNCwKKysJMHhmNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhiYiwgMHhjMSwgMHgwYiwgMHg4NCwgMHg5NCwgMHg4YiwgMHg1YywgMHg4YywKKysJMHgyZiwgMHgwYywgMHg3MiwgMHgxMSwgMHgzZSwgMHhhOSwgMHhiZCwgMHgwNCwKKysJMHg3MywgMHhlYiwgMHgyNywgMHgyNCwgMHhiNSwgMHhjNCwgMHgwNSwgMHhmMCwKKysJMHg0ZCwgMHgwMCwgMHhkMCwgMHhmMSwgMHg1OCwgMHg0MCwgMHhhMSwgMHhjMQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzExOFtdIF9faW5pdGNvbnN0ID0geworKwkweGZmLCAweGZmLCAweGZmLCAweGZmCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX25vbmNlMTE4W10gX19pbml0Y29uc3QgPSB7CisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4NGMsIDB4MmQsIDB4NTIKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfa2V5MTE4W10gX19pbml0Y29uc3QgPSB7CisrCTB4ODAsIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCisrCTB4ODgsIDB4ODksIDB4OGEsIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsCisrCTB4OTAsIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsCisrCTB4OTgsIDB4OTksIDB4OWEsIDB4OWIsIDB4OWMsIDB4OWQsIDB4OWUsIDB4OWYKKyt9OworKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2hhY2hhMjBwb2x5MTMwNV90ZXN0dmVjCisrY2hhY2hhMjBwb2x5MTMwNV9lbmNfdmVjdG9yc1tdIF9faW5pdGNvbnN0ID0geworKwl7IGVuY19pbnB1dDAwMSwgZW5jX291dHB1dDAwMSwgZW5jX2Fzc29jMDAxLCBlbmNfbm9uY2UwMDEsIGVuY19rZXkwMDEsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAwMSksIHNpemVvZihlbmNfYXNzb2MwMDEpLCBzaXplb2YoZW5jX25vbmNlMDAxKSB9LAorKwl7IGVuY19pbnB1dDAwMiwgZW5jX291dHB1dDAwMiwgZW5jX2Fzc29jMDAyLCBlbmNfbm9uY2UwMDIsIGVuY19rZXkwMDIsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAwMiksIHNpemVvZihlbmNfYXNzb2MwMDIpLCBzaXplb2YoZW5jX25vbmNlMDAyKSB9LAorKwl7IGVuY19pbnB1dDAwMywgZW5jX291dHB1dDAwMywgZW5jX2Fzc29jMDAzLCBlbmNfbm9uY2UwMDMsIGVuY19rZXkwMDMsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAwMyksIHNpemVvZihlbmNfYXNzb2MwMDMpLCBzaXplb2YoZW5jX25vbmNlMDAzKSB9LAorKwl7IGVuY19pbnB1dDAwNCwgZW5jX291dHB1dDAwNCwgZW5jX2Fzc29jMDA0LCBlbmNfbm9uY2UwMDQsIGVuY19rZXkwMDQsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAwNCksIHNpemVvZihlbmNfYXNzb2MwMDQpLCBzaXplb2YoZW5jX25vbmNlMDA0KSB9LAorKwl7IGVuY19pbnB1dDAwNSwgZW5jX291dHB1dDAwNSwgZW5jX2Fzc29jMDA1LCBlbmNfbm9uY2UwMDUsIGVuY19rZXkwMDUsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAwNSksIHNpemVvZihlbmNfYXNzb2MwMDUpLCBzaXplb2YoZW5jX25vbmNlMDA1KSB9LAorKwl7IGVuY19pbnB1dDAwNiwgZW5jX291dHB1dDAwNiwgZW5jX2Fzc29jMDA2LCBlbmNfbm9uY2UwMDYsIGVuY19rZXkwMDYsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAwNiksIHNpemVvZihlbmNfYXNzb2MwMDYpLCBzaXplb2YoZW5jX25vbmNlMDA2KSB9LAorKwl7IGVuY19pbnB1dDAwNywgZW5jX291dHB1dDAwNywgZW5jX2Fzc29jMDA3LCBlbmNfbm9uY2UwMDcsIGVuY19rZXkwMDcsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAwNyksIHNpemVvZihlbmNfYXNzb2MwMDcpLCBzaXplb2YoZW5jX25vbmNlMDA3KSB9LAorKwl7IGVuY19pbnB1dDAwOCwgZW5jX291dHB1dDAwOCwgZW5jX2Fzc29jMDA4LCBlbmNfbm9uY2UwMDgsIGVuY19rZXkwMDgsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAwOCksIHNpemVvZihlbmNfYXNzb2MwMDgpLCBzaXplb2YoZW5jX25vbmNlMDA4KSB9LAorKwl7IGVuY19pbnB1dDAwOSwgZW5jX291dHB1dDAwOSwgZW5jX2Fzc29jMDA5LCBlbmNfbm9uY2UwMDksIGVuY19rZXkwMDksCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAwOSksIHNpemVvZihlbmNfYXNzb2MwMDkpLCBzaXplb2YoZW5jX25vbmNlMDA5KSB9LAorKwl7IGVuY19pbnB1dDAxMCwgZW5jX291dHB1dDAxMCwgZW5jX2Fzc29jMDEwLCBlbmNfbm9uY2UwMTAsIGVuY19rZXkwMTAsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAxMCksIHNpemVvZihlbmNfYXNzb2MwMTApLCBzaXplb2YoZW5jX25vbmNlMDEwKSB9LAorKwl7IGVuY19pbnB1dDAxMSwgZW5jX291dHB1dDAxMSwgZW5jX2Fzc29jMDExLCBlbmNfbm9uY2UwMTEsIGVuY19rZXkwMTEsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAxMSksIHNpemVvZihlbmNfYXNzb2MwMTEpLCBzaXplb2YoZW5jX25vbmNlMDExKSB9LAorKwl7IGVuY19pbnB1dDAxMiwgZW5jX291dHB1dDAxMiwgZW5jX2Fzc29jMDEyLCBlbmNfbm9uY2UwMTIsIGVuY19rZXkwMTIsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAxMiksIHNpemVvZihlbmNfYXNzb2MwMTIpLCBzaXplb2YoZW5jX25vbmNlMDEyKSB9LAorKwl7IGVuY19pbnB1dDA1MywgZW5jX291dHB1dDA1MywgZW5jX2Fzc29jMDUzLCBlbmNfbm9uY2UwNTMsIGVuY19rZXkwNTMsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA1MyksIHNpemVvZihlbmNfYXNzb2MwNTMpLCBzaXplb2YoZW5jX25vbmNlMDUzKSB9LAorKwl7IGVuY19pbnB1dDA1NCwgZW5jX291dHB1dDA1NCwgZW5jX2Fzc29jMDU0LCBlbmNfbm9uY2UwNTQsIGVuY19rZXkwNTQsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA1NCksIHNpemVvZihlbmNfYXNzb2MwNTQpLCBzaXplb2YoZW5jX25vbmNlMDU0KSB9LAorKwl7IGVuY19pbnB1dDA1NSwgZW5jX291dHB1dDA1NSwgZW5jX2Fzc29jMDU1LCBlbmNfbm9uY2UwNTUsIGVuY19rZXkwNTUsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA1NSksIHNpemVvZihlbmNfYXNzb2MwNTUpLCBzaXplb2YoZW5jX25vbmNlMDU1KSB9LAorKwl7IGVuY19pbnB1dDA1NiwgZW5jX291dHB1dDA1NiwgZW5jX2Fzc29jMDU2LCBlbmNfbm9uY2UwNTYsIGVuY19rZXkwNTYsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA1NiksIHNpemVvZihlbmNfYXNzb2MwNTYpLCBzaXplb2YoZW5jX25vbmNlMDU2KSB9LAorKwl7IGVuY19pbnB1dDA1NywgZW5jX291dHB1dDA1NywgZW5jX2Fzc29jMDU3LCBlbmNfbm9uY2UwNTcsIGVuY19rZXkwNTcsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA1NyksIHNpemVvZihlbmNfYXNzb2MwNTcpLCBzaXplb2YoZW5jX25vbmNlMDU3KSB9LAorKwl7IGVuY19pbnB1dDA1OCwgZW5jX291dHB1dDA1OCwgZW5jX2Fzc29jMDU4LCBlbmNfbm9uY2UwNTgsIGVuY19rZXkwNTgsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA1OCksIHNpemVvZihlbmNfYXNzb2MwNTgpLCBzaXplb2YoZW5jX25vbmNlMDU4KSB9LAorKwl7IGVuY19pbnB1dDA1OSwgZW5jX291dHB1dDA1OSwgZW5jX2Fzc29jMDU5LCBlbmNfbm9uY2UwNTksIGVuY19rZXkwNTksCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA1OSksIHNpemVvZihlbmNfYXNzb2MwNTkpLCBzaXplb2YoZW5jX25vbmNlMDU5KSB9LAorKwl7IGVuY19pbnB1dDA2MCwgZW5jX291dHB1dDA2MCwgZW5jX2Fzc29jMDYwLCBlbmNfbm9uY2UwNjAsIGVuY19rZXkwNjAsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA2MCksIHNpemVvZihlbmNfYXNzb2MwNjApLCBzaXplb2YoZW5jX25vbmNlMDYwKSB9LAorKwl7IGVuY19pbnB1dDA2MSwgZW5jX291dHB1dDA2MSwgZW5jX2Fzc29jMDYxLCBlbmNfbm9uY2UwNjEsIGVuY19rZXkwNjEsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA2MSksIHNpemVvZihlbmNfYXNzb2MwNjEpLCBzaXplb2YoZW5jX25vbmNlMDYxKSB9LAorKwl7IGVuY19pbnB1dDA2MiwgZW5jX291dHB1dDA2MiwgZW5jX2Fzc29jMDYyLCBlbmNfbm9uY2UwNjIsIGVuY19rZXkwNjIsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA2MiksIHNpemVvZihlbmNfYXNzb2MwNjIpLCBzaXplb2YoZW5jX25vbmNlMDYyKSB9LAorKwl7IGVuY19pbnB1dDA2MywgZW5jX291dHB1dDA2MywgZW5jX2Fzc29jMDYzLCBlbmNfbm9uY2UwNjMsIGVuY19rZXkwNjMsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA2MyksIHNpemVvZihlbmNfYXNzb2MwNjMpLCBzaXplb2YoZW5jX25vbmNlMDYzKSB9LAorKwl7IGVuY19pbnB1dDA2NCwgZW5jX291dHB1dDA2NCwgZW5jX2Fzc29jMDY0LCBlbmNfbm9uY2UwNjQsIGVuY19rZXkwNjQsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA2NCksIHNpemVvZihlbmNfYXNzb2MwNjQpLCBzaXplb2YoZW5jX25vbmNlMDY0KSB9LAorKwl7IGVuY19pbnB1dDA2NSwgZW5jX291dHB1dDA2NSwgZW5jX2Fzc29jMDY1LCBlbmNfbm9uY2UwNjUsIGVuY19rZXkwNjUsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA2NSksIHNpemVvZihlbmNfYXNzb2MwNjUpLCBzaXplb2YoZW5jX25vbmNlMDY1KSB9LAorKwl7IGVuY19pbnB1dDA2NiwgZW5jX291dHB1dDA2NiwgZW5jX2Fzc29jMDY2LCBlbmNfbm9uY2UwNjYsIGVuY19rZXkwNjYsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA2NiksIHNpemVvZihlbmNfYXNzb2MwNjYpLCBzaXplb2YoZW5jX25vbmNlMDY2KSB9LAorKwl7IGVuY19pbnB1dDA2NywgZW5jX291dHB1dDA2NywgZW5jX2Fzc29jMDY3LCBlbmNfbm9uY2UwNjcsIGVuY19rZXkwNjcsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA2NyksIHNpemVvZihlbmNfYXNzb2MwNjcpLCBzaXplb2YoZW5jX25vbmNlMDY3KSB9LAorKwl7IGVuY19pbnB1dDA2OCwgZW5jX291dHB1dDA2OCwgZW5jX2Fzc29jMDY4LCBlbmNfbm9uY2UwNjgsIGVuY19rZXkwNjgsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA2OCksIHNpemVvZihlbmNfYXNzb2MwNjgpLCBzaXplb2YoZW5jX25vbmNlMDY4KSB9LAorKwl7IGVuY19pbnB1dDA2OSwgZW5jX291dHB1dDA2OSwgZW5jX2Fzc29jMDY5LCBlbmNfbm9uY2UwNjksIGVuY19rZXkwNjksCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA2OSksIHNpemVvZihlbmNfYXNzb2MwNjkpLCBzaXplb2YoZW5jX25vbmNlMDY5KSB9LAorKwl7IGVuY19pbnB1dDA3MCwgZW5jX291dHB1dDA3MCwgZW5jX2Fzc29jMDcwLCBlbmNfbm9uY2UwNzAsIGVuY19rZXkwNzAsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA3MCksIHNpemVvZihlbmNfYXNzb2MwNzApLCBzaXplb2YoZW5jX25vbmNlMDcwKSB9LAorKwl7IGVuY19pbnB1dDA3MSwgZW5jX291dHB1dDA3MSwgZW5jX2Fzc29jMDcxLCBlbmNfbm9uY2UwNzEsIGVuY19rZXkwNzEsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA3MSksIHNpemVvZihlbmNfYXNzb2MwNzEpLCBzaXplb2YoZW5jX25vbmNlMDcxKSB9LAorKwl7IGVuY19pbnB1dDA3MiwgZW5jX291dHB1dDA3MiwgZW5jX2Fzc29jMDcyLCBlbmNfbm9uY2UwNzIsIGVuY19rZXkwNzIsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA3MiksIHNpemVvZihlbmNfYXNzb2MwNzIpLCBzaXplb2YoZW5jX25vbmNlMDcyKSB9LAorKwl7IGVuY19pbnB1dDA3MywgZW5jX291dHB1dDA3MywgZW5jX2Fzc29jMDczLCBlbmNfbm9uY2UwNzMsIGVuY19rZXkwNzMsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA3MyksIHNpemVvZihlbmNfYXNzb2MwNzMpLCBzaXplb2YoZW5jX25vbmNlMDczKSB9LAorKwl7IGVuY19pbnB1dDA3NiwgZW5jX291dHB1dDA3NiwgZW5jX2Fzc29jMDc2LCBlbmNfbm9uY2UwNzYsIGVuY19rZXkwNzYsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA3NiksIHNpemVvZihlbmNfYXNzb2MwNzYpLCBzaXplb2YoZW5jX25vbmNlMDc2KSB9LAorKwl7IGVuY19pbnB1dDA3NywgZW5jX291dHB1dDA3NywgZW5jX2Fzc29jMDc3LCBlbmNfbm9uY2UwNzcsIGVuY19rZXkwNzcsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA3NyksIHNpemVvZihlbmNfYXNzb2MwNzcpLCBzaXplb2YoZW5jX25vbmNlMDc3KSB9LAorKwl7IGVuY19pbnB1dDA3OCwgZW5jX291dHB1dDA3OCwgZW5jX2Fzc29jMDc4LCBlbmNfbm9uY2UwNzgsIGVuY19rZXkwNzgsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA3OCksIHNpemVvZihlbmNfYXNzb2MwNzgpLCBzaXplb2YoZW5jX25vbmNlMDc4KSB9LAorKwl7IGVuY19pbnB1dDA3OSwgZW5jX291dHB1dDA3OSwgZW5jX2Fzc29jMDc5LCBlbmNfbm9uY2UwNzksIGVuY19rZXkwNzksCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA3OSksIHNpemVvZihlbmNfYXNzb2MwNzkpLCBzaXplb2YoZW5jX25vbmNlMDc5KSB9LAorKwl7IGVuY19pbnB1dDA4MCwgZW5jX291dHB1dDA4MCwgZW5jX2Fzc29jMDgwLCBlbmNfbm9uY2UwODAsIGVuY19rZXkwODAsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA4MCksIHNpemVvZihlbmNfYXNzb2MwODApLCBzaXplb2YoZW5jX25vbmNlMDgwKSB9LAorKwl7IGVuY19pbnB1dDA4MSwgZW5jX291dHB1dDA4MSwgZW5jX2Fzc29jMDgxLCBlbmNfbm9uY2UwODEsIGVuY19rZXkwODEsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA4MSksIHNpemVvZihlbmNfYXNzb2MwODEpLCBzaXplb2YoZW5jX25vbmNlMDgxKSB9LAorKwl7IGVuY19pbnB1dDA4MiwgZW5jX291dHB1dDA4MiwgZW5jX2Fzc29jMDgyLCBlbmNfbm9uY2UwODIsIGVuY19rZXkwODIsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA4MiksIHNpemVvZihlbmNfYXNzb2MwODIpLCBzaXplb2YoZW5jX25vbmNlMDgyKSB9LAorKwl7IGVuY19pbnB1dDA4MywgZW5jX291dHB1dDA4MywgZW5jX2Fzc29jMDgzLCBlbmNfbm9uY2UwODMsIGVuY19rZXkwODMsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA4MyksIHNpemVvZihlbmNfYXNzb2MwODMpLCBzaXplb2YoZW5jX25vbmNlMDgzKSB9LAorKwl7IGVuY19pbnB1dDA4NCwgZW5jX291dHB1dDA4NCwgZW5jX2Fzc29jMDg0LCBlbmNfbm9uY2UwODQsIGVuY19rZXkwODQsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA4NCksIHNpemVvZihlbmNfYXNzb2MwODQpLCBzaXplb2YoZW5jX25vbmNlMDg0KSB9LAorKwl7IGVuY19pbnB1dDA4NSwgZW5jX291dHB1dDA4NSwgZW5jX2Fzc29jMDg1LCBlbmNfbm9uY2UwODUsIGVuY19rZXkwODUsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA4NSksIHNpemVvZihlbmNfYXNzb2MwODUpLCBzaXplb2YoZW5jX25vbmNlMDg1KSB9LAorKwl7IGVuY19pbnB1dDA5MywgZW5jX291dHB1dDA5MywgZW5jX2Fzc29jMDkzLCBlbmNfbm9uY2UwOTMsIGVuY19rZXkwOTMsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA5MyksIHNpemVvZihlbmNfYXNzb2MwOTMpLCBzaXplb2YoZW5jX25vbmNlMDkzKSB9LAorKwl7IGVuY19pbnB1dDA5NCwgZW5jX291dHB1dDA5NCwgZW5jX2Fzc29jMDk0LCBlbmNfbm9uY2UwOTQsIGVuY19rZXkwOTQsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA5NCksIHNpemVvZihlbmNfYXNzb2MwOTQpLCBzaXplb2YoZW5jX25vbmNlMDk0KSB9LAorKwl7IGVuY19pbnB1dDA5NSwgZW5jX291dHB1dDA5NSwgZW5jX2Fzc29jMDk1LCBlbmNfbm9uY2UwOTUsIGVuY19rZXkwOTUsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA5NSksIHNpemVvZihlbmNfYXNzb2MwOTUpLCBzaXplb2YoZW5jX25vbmNlMDk1KSB9LAorKwl7IGVuY19pbnB1dDA5NiwgZW5jX291dHB1dDA5NiwgZW5jX2Fzc29jMDk2LCBlbmNfbm9uY2UwOTYsIGVuY19rZXkwOTYsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA5NiksIHNpemVvZihlbmNfYXNzb2MwOTYpLCBzaXplb2YoZW5jX25vbmNlMDk2KSB9LAorKwl7IGVuY19pbnB1dDA5NywgZW5jX291dHB1dDA5NywgZW5jX2Fzc29jMDk3LCBlbmNfbm9uY2UwOTcsIGVuY19rZXkwOTcsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA5NyksIHNpemVvZihlbmNfYXNzb2MwOTcpLCBzaXplb2YoZW5jX25vbmNlMDk3KSB9LAorKwl7IGVuY19pbnB1dDA5OCwgZW5jX291dHB1dDA5OCwgZW5jX2Fzc29jMDk4LCBlbmNfbm9uY2UwOTgsIGVuY19rZXkwOTgsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA5OCksIHNpemVvZihlbmNfYXNzb2MwOTgpLCBzaXplb2YoZW5jX25vbmNlMDk4KSB9LAorKwl7IGVuY19pbnB1dDA5OSwgZW5jX291dHB1dDA5OSwgZW5jX2Fzc29jMDk5LCBlbmNfbm9uY2UwOTksIGVuY19rZXkwOTksCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA5OSksIHNpemVvZihlbmNfYXNzb2MwOTkpLCBzaXplb2YoZW5jX25vbmNlMDk5KSB9LAorKwl7IGVuY19pbnB1dDEwMCwgZW5jX291dHB1dDEwMCwgZW5jX2Fzc29jMTAwLCBlbmNfbm9uY2UxMDAsIGVuY19rZXkxMDAsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDEwMCksIHNpemVvZihlbmNfYXNzb2MxMDApLCBzaXplb2YoZW5jX25vbmNlMTAwKSB9LAorKwl7IGVuY19pbnB1dDEwMSwgZW5jX291dHB1dDEwMSwgZW5jX2Fzc29jMTAxLCBlbmNfbm9uY2UxMDEsIGVuY19rZXkxMDEsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDEwMSksIHNpemVvZihlbmNfYXNzb2MxMDEpLCBzaXplb2YoZW5jX25vbmNlMTAxKSB9LAorKwl7IGVuY19pbnB1dDEwMiwgZW5jX291dHB1dDEwMiwgZW5jX2Fzc29jMTAyLCBlbmNfbm9uY2UxMDIsIGVuY19rZXkxMDIsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDEwMiksIHNpemVvZihlbmNfYXNzb2MxMDIpLCBzaXplb2YoZW5jX25vbmNlMTAyKSB9LAorKwl7IGVuY19pbnB1dDEwMywgZW5jX291dHB1dDEwMywgZW5jX2Fzc29jMTAzLCBlbmNfbm9uY2UxMDMsIGVuY19rZXkxMDMsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDEwMyksIHNpemVvZihlbmNfYXNzb2MxMDMpLCBzaXplb2YoZW5jX25vbmNlMTAzKSB9LAorKwl7IGVuY19pbnB1dDEwNCwgZW5jX291dHB1dDEwNCwgZW5jX2Fzc29jMTA0LCBlbmNfbm9uY2UxMDQsIGVuY19rZXkxMDQsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDEwNCksIHNpemVvZihlbmNfYXNzb2MxMDQpLCBzaXplb2YoZW5jX25vbmNlMTA0KSB9LAorKwl7IGVuY19pbnB1dDEwNSwgZW5jX291dHB1dDEwNSwgZW5jX2Fzc29jMTA1LCBlbmNfbm9uY2UxMDUsIGVuY19rZXkxMDUsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDEwNSksIHNpemVvZihlbmNfYXNzb2MxMDUpLCBzaXplb2YoZW5jX25vbmNlMTA1KSB9LAorKwl7IGVuY19pbnB1dDEwNiwgZW5jX291dHB1dDEwNiwgZW5jX2Fzc29jMTA2LCBlbmNfbm9uY2UxMDYsIGVuY19rZXkxMDYsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDEwNiksIHNpemVvZihlbmNfYXNzb2MxMDYpLCBzaXplb2YoZW5jX25vbmNlMTA2KSB9LAorKwl7IGVuY19pbnB1dDEwNywgZW5jX291dHB1dDEwNywgZW5jX2Fzc29jMTA3LCBlbmNfbm9uY2UxMDcsIGVuY19rZXkxMDcsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDEwNyksIHNpemVvZihlbmNfYXNzb2MxMDcpLCBzaXplb2YoZW5jX25vbmNlMTA3KSB9LAorKwl7IGVuY19pbnB1dDEwOCwgZW5jX291dHB1dDEwOCwgZW5jX2Fzc29jMTA4LCBlbmNfbm9uY2UxMDgsIGVuY19rZXkxMDgsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDEwOCksIHNpemVvZihlbmNfYXNzb2MxMDgpLCBzaXplb2YoZW5jX25vbmNlMTA4KSB9LAorKwl7IGVuY19pbnB1dDEwOSwgZW5jX291dHB1dDEwOSwgZW5jX2Fzc29jMTA5LCBlbmNfbm9uY2UxMDksIGVuY19rZXkxMDksCisrCSAgc2l6ZW9mKGVuY19pbnB1dDEwOSksIHNpemVvZihlbmNfYXNzb2MxMDkpLCBzaXplb2YoZW5jX25vbmNlMTA5KSB9LAorKwl7IGVuY19pbnB1dDExMCwgZW5jX291dHB1dDExMCwgZW5jX2Fzc29jMTEwLCBlbmNfbm9uY2UxMTAsIGVuY19rZXkxMTAsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDExMCksIHNpemVvZihlbmNfYXNzb2MxMTApLCBzaXplb2YoZW5jX25vbmNlMTEwKSB9LAorKwl7IGVuY19pbnB1dDExMSwgZW5jX291dHB1dDExMSwgZW5jX2Fzc29jMTExLCBlbmNfbm9uY2UxMTEsIGVuY19rZXkxMTEsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDExMSksIHNpemVvZihlbmNfYXNzb2MxMTEpLCBzaXplb2YoZW5jX25vbmNlMTExKSB9LAorKwl7IGVuY19pbnB1dDExMiwgZW5jX291dHB1dDExMiwgZW5jX2Fzc29jMTEyLCBlbmNfbm9uY2UxMTIsIGVuY19rZXkxMTIsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDExMiksIHNpemVvZihlbmNfYXNzb2MxMTIpLCBzaXplb2YoZW5jX25vbmNlMTEyKSB9LAorKwl7IGVuY19pbnB1dDExMywgZW5jX291dHB1dDExMywgZW5jX2Fzc29jMTEzLCBlbmNfbm9uY2UxMTMsIGVuY19rZXkxMTMsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDExMyksIHNpemVvZihlbmNfYXNzb2MxMTMpLCBzaXplb2YoZW5jX25vbmNlMTEzKSB9LAorKwl7IGVuY19pbnB1dDExNCwgZW5jX291dHB1dDExNCwgZW5jX2Fzc29jMTE0LCBlbmNfbm9uY2UxMTQsIGVuY19rZXkxMTQsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDExNCksIHNpemVvZihlbmNfYXNzb2MxMTQpLCBzaXplb2YoZW5jX25vbmNlMTE0KSB9LAorKwl7IGVuY19pbnB1dDExNSwgZW5jX291dHB1dDExNSwgZW5jX2Fzc29jMTE1LCBlbmNfbm9uY2UxMTUsIGVuY19rZXkxMTUsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDExNSksIHNpemVvZihlbmNfYXNzb2MxMTUpLCBzaXplb2YoZW5jX25vbmNlMTE1KSB9LAorKwl7IGVuY19pbnB1dDExNiwgZW5jX291dHB1dDExNiwgZW5jX2Fzc29jMTE2LCBlbmNfbm9uY2UxMTYsIGVuY19rZXkxMTYsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDExNiksIHNpemVvZihlbmNfYXNzb2MxMTYpLCBzaXplb2YoZW5jX25vbmNlMTE2KSB9LAorKwl7IGVuY19pbnB1dDExNywgZW5jX291dHB1dDExNywgZW5jX2Fzc29jMTE3LCBlbmNfbm9uY2UxMTcsIGVuY19rZXkxMTcsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDExNyksIHNpemVvZihlbmNfYXNzb2MxMTcpLCBzaXplb2YoZW5jX25vbmNlMTE3KSB9LAorKwl7IGVuY19pbnB1dDExOCwgZW5jX291dHB1dDExOCwgZW5jX2Fzc29jMTE4LCBlbmNfbm9uY2UxMTgsIGVuY19rZXkxMTgsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDExOCksIHNpemVvZihlbmNfYXNzb2MxMTgpLCBzaXplb2YoZW5jX25vbmNlMTE4KSB9CisrfTsKKysKKytzdGF0aWMgY29uc3QgdTggZGVjX2lucHV0MDAxW10gX19pbml0Y29uc3QgPSB7CisrCTB4NjQsIDB4YTAsIDB4ODYsIDB4MTUsIDB4NzUsIDB4ODYsIDB4MWEsIDB4ZjQsCisrCTB4NjAsIDB4ZjAsIDB4NjIsIDB4YzcsIDB4OWIsIDB4ZTYsIDB4NDMsIDB4YmQsCisrCTB4NWUsIDB4ODAsIDB4NWMsIDB4ZmQsIDB4MzQsIDB4NWMsIDB4ZjMsIDB4ODksCisrCTB4ZjEsIDB4MDgsIDB4NjcsIDB4MGEsIDB4YzcsIDB4NmMsIDB4OGMsIDB4YjIsCisrCTB4NGMsIDB4NmMsIDB4ZmMsIDB4MTgsIDB4NzUsIDB4NWQsIDB4NDMsIDB4ZWUsCisrCTB4YTAsIDB4OWUsIDB4ZTksIDB4NGUsIDB4MzgsIDB4MmQsIDB4MjYsIDB4YjAsCisrCTB4YmQsIDB4YjcsIDB4YjcsIDB4M2MsIDB4MzIsIDB4MWIsIDB4MDEsIDB4MDAsCisrCTB4ZDQsIDB4ZjAsIDB4M2IsIDB4N2YsIDB4MzUsIDB4NTgsIDB4OTQsIDB4Y2YsCisrCTB4MzMsIDB4MmYsIDB4ODMsIDB4MGUsIDB4NzEsIDB4MGIsIDB4OTcsIDB4Y2UsCisrCTB4OTgsIDB4YzgsIDB4YTgsIDB4NGEsIDB4YmQsIDB4MGIsIDB4OTQsIDB4ODEsCisrCTB4MTQsIDB4YWQsIDB4MTcsIDB4NmUsIDB4MDAsIDB4OGQsIDB4MzMsIDB4YmQsCisrCTB4NjAsIDB4ZjksIDB4ODIsIDB4YjEsIDB4ZmYsIDB4MzcsIDB4YzgsIDB4NTUsCisrCTB4OTcsIDB4OTcsIDB4YTAsIDB4NmUsIDB4ZjQsIDB4ZjAsIDB4ZWYsIDB4NjEsCisrCTB4YzEsIDB4ODYsIDB4MzIsIDB4NGUsIDB4MmIsIDB4MzUsIDB4MDYsIDB4MzgsCisrCTB4MzYsIDB4MDYsIDB4OTAsIDB4N2IsIDB4NmEsIDB4N2MsIDB4MDIsIDB4YjAsCisrCTB4ZjksIDB4ZjYsIDB4MTUsIDB4N2IsIDB4NTMsIDB4YzgsIDB4NjcsIDB4ZTQsCisrCTB4YjksIDB4MTYsIDB4NmMsIDB4NzYsIDB4N2IsIDB4ODAsIDB4NGQsIDB4NDYsCisrCTB4YTUsIDB4OWIsIDB4NTIsIDB4MTYsIDB4Y2QsIDB4ZTcsIDB4YTQsIDB4ZTksCisrCTB4OTAsIDB4NDAsIDB4YzUsIDB4YTQsIDB4MDQsIDB4MzMsIDB4MjIsIDB4NWUsCisrCTB4ZTIsIDB4ODIsIDB4YTEsIDB4YjAsIDB4YTAsIDB4NmMsIDB4NTIsIDB4M2UsCisrCTB4YWYsIDB4NDUsIDB4MzQsIDB4ZDcsIDB4ZjgsIDB4M2YsIDB4YTEsIDB4MTUsCisrCTB4NWIsIDB4MDAsIDB4NDcsIDB4NzEsIDB4OGMsIDB4YmMsIDB4NTQsIDB4NmEsCisrCTB4MGQsIDB4MDcsIDB4MmIsIDB4MDQsIDB4YjMsIDB4NTYsIDB4NGUsIDB4ZWEsCisrCTB4MWIsIDB4NDIsIDB4MjIsIDB4NzMsIDB4ZjUsIDB4NDgsIDB4MjcsIDB4MWEsCisrCTB4MGIsIDB4YjIsIDB4MzEsIDB4NjAsIDB4NTMsIDB4ZmEsIDB4NzYsIDB4OTksCisrCTB4MTksIDB4NTUsIDB4ZWIsIDB4ZDYsIDB4MzEsIDB4NTksIDB4NDMsIDB4NGUsCisrCTB4Y2UsIDB4YmIsIDB4NGUsIDB4NDYsIDB4NmQsIDB4YWUsIDB4NWEsIDB4MTAsCisrCTB4NzMsIDB4YTYsIDB4NzIsIDB4NzYsIDB4MjcsIDB4MDksIDB4N2EsIDB4MTAsCisrCTB4NDksIDB4ZTYsIDB4MTcsIDB4ZDksIDB4MWQsIDB4MzYsIDB4MTAsIDB4OTQsCisrCTB4ZmEsIDB4NjgsIDB4ZjAsIDB4ZmYsIDB4NzcsIDB4OTgsIDB4NzEsIDB4MzAsCisrCTB4MzAsIDB4NWIsIDB4ZWEsIDB4YmEsIDB4MmUsIDB4ZGEsIDB4MDQsIDB4ZGYsCisrCTB4OTksIDB4N2IsIDB4NzEsIDB4NGQsIDB4NmMsIDB4NmYsIDB4MmMsIDB4MjksCisrCTB4YTYsIDB4YWQsIDB4NWMsIDB4YjQsIDB4MDIsIDB4MmIsIDB4MDIsIDB4NzAsCisrCTB4OWIsIDB4ZWUsIDB4YWQsIDB4OWQsIDB4NjcsIDB4ODksIDB4MGMsIDB4YmIsCisrCTB4MjIsIDB4MzksIDB4MjMsIDB4MzYsIDB4ZmUsIDB4YTEsIDB4ODUsIDB4MWYsCisrCTB4MzgKKyt9OworK3N0YXRpYyBjb25zdCB1OCBkZWNfb3V0cHV0MDAxW10gX19pbml0Y29uc3QgPSB7CisrCTB4NDksIDB4NmUsIDB4NzQsIDB4NjUsIDB4NzIsIDB4NmUsIDB4NjUsIDB4NzQsCisrCTB4MmQsIDB4NDQsIDB4NzIsIDB4NjEsIDB4NjYsIDB4NzQsIDB4NzMsIDB4MjAsCisrCTB4NjEsIDB4NzIsIDB4NjUsIDB4MjAsIDB4NjQsIDB4NzIsIDB4NjEsIDB4NjYsCisrCTB4NzQsIDB4MjAsIDB4NjQsIDB4NmYsIDB4NjMsIDB4NzUsIDB4NmQsIDB4NjUsCisrCTB4NmUsIDB4NzQsIDB4NzMsIDB4MjAsIDB4NzYsIDB4NjEsIDB4NmMsIDB4NjksCisrCTB4NjQsIDB4MjAsIDB4NjYsIDB4NmYsIDB4NzIsIDB4MjAsIDB4NjEsIDB4MjAsCisrCTB4NmQsIDB4NjEsIDB4NzgsIDB4NjksIDB4NmQsIDB4NzUsIDB4NmQsIDB4MjAsCisrCTB4NmYsIDB4NjYsIDB4MjAsIDB4NzMsIDB4NjksIDB4NzgsIDB4MjAsIDB4NmQsCisrCTB4NmYsIDB4NmUsIDB4NzQsIDB4NjgsIDB4NzMsIDB4MjAsIDB4NjEsIDB4NmUsCisrCTB4NjQsIDB4MjAsIDB4NmQsIDB4NjEsIDB4NzksIDB4MjAsIDB4NjIsIDB4NjUsCisrCTB4MjAsIDB4NzUsIDB4NzAsIDB4NjQsIDB4NjEsIDB4NzQsIDB4NjUsIDB4NjQsCisrCTB4MmMsIDB4MjAsIDB4NzIsIDB4NjUsIDB4NzAsIDB4NmMsIDB4NjEsIDB4NjMsCisrCTB4NjUsIDB4NjQsIDB4MmMsIDB4MjAsIDB4NmYsIDB4NzIsIDB4MjAsIDB4NmYsCisrCTB4NjIsIDB4NzMsIDB4NmYsIDB4NmMsIDB4NjUsIDB4NzQsIDB4NjUsIDB4NjQsCisrCTB4MjAsIDB4NjIsIDB4NzksIDB4MjAsIDB4NmYsIDB4NzQsIDB4NjgsIDB4NjUsCisrCTB4NzIsIDB4MjAsIDB4NjQsIDB4NmYsIDB4NjMsIDB4NzUsIDB4NmQsIDB4NjUsCisrCTB4NmUsIDB4NzQsIDB4NzMsIDB4MjAsIDB4NjEsIDB4NzQsIDB4MjAsIDB4NjEsCisrCTB4NmUsIDB4NzksIDB4MjAsIDB4NzQsIDB4NjksIDB4NmQsIDB4NjUsIDB4MmUsCisrCTB4MjAsIDB4NDksIDB4NzQsIDB4MjAsIDB4NjksIDB4NzMsIDB4MjAsIDB4NjksCisrCTB4NmUsIDB4NjEsIDB4NzAsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NzAsIDB4NzIsCisrCTB4NjksIDB4NjEsIDB4NzQsIDB4NjUsIDB4MjAsIDB4NzQsIDB4NmYsIDB4MjAsCisrCTB4NzUsIDB4NzMsIDB4NjUsIDB4MjAsIDB4NDksIDB4NmUsIDB4NzQsIDB4NjUsCisrCTB4NzIsIDB4NmUsIDB4NjUsIDB4NzQsIDB4MmQsIDB4NDQsIDB4NzIsIDB4NjEsCisrCTB4NjYsIDB4NzQsIDB4NzMsIDB4MjAsIDB4NjEsIDB4NzMsIDB4MjAsIDB4NzIsCisrCTB4NjUsIDB4NjYsIDB4NjUsIDB4NzIsIDB4NjUsIDB4NmUsIDB4NjMsIDB4NjUsCisrCTB4MjAsIDB4NmQsIDB4NjEsIDB4NzQsIDB4NjUsIDB4NzIsIDB4NjksIDB4NjEsCisrCTB4NmMsIDB4MjAsIDB4NmYsIDB4NzIsIDB4MjAsIDB4NzQsIDB4NmYsIDB4MjAsCisrCTB4NjMsIDB4NjksIDB4NzQsIDB4NjUsIDB4MjAsIDB4NzQsIDB4NjgsIDB4NjUsCisrCTB4NmQsIDB4MjAsIDB4NmYsIDB4NzQsIDB4NjgsIDB4NjUsIDB4NzIsIDB4MjAsCisrCTB4NzQsIDB4NjgsIDB4NjEsIDB4NmUsIDB4MjAsIDB4NjEsIDB4NzMsIDB4MjAsCisrCTB4MmYsIDB4ZTIsIDB4ODAsIDB4OWMsIDB4NzcsIDB4NmYsIDB4NzIsIDB4NmIsCisrCTB4MjAsIDB4NjksIDB4NmUsIDB4MjAsIDB4NzAsIDB4NzIsIDB4NmYsIDB4NjcsCisrCTB4NzIsIDB4NjUsIDB4NzMsIDB4NzMsIDB4MmUsIDB4MmYsIDB4ZTIsIDB4ODAsCisrCTB4OWQKKyt9OworK3N0YXRpYyBjb25zdCB1OCBkZWNfYXNzb2MwMDFbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmMywgMHgzMywgMHg4OCwgMHg4NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJMHgwMCwgMHgwMCwgMHg0ZSwgMHg5MQorK307Cisrc3RhdGljIGNvbnN0IHU4IGRlY19ub25jZTAwMVtdIF9faW5pdGNvbnN0ID0geworKwkweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDA4CisrfTsKKytzdGF0aWMgY29uc3QgdTggZGVjX2tleTAwMVtdIF9faW5pdGNvbnN0ID0geworKwkweDFjLCAweDkyLCAweDQwLCAweGE1LCAweGViLCAweDU1LCAweGQzLCAweDhhLAorKwkweGYzLCAweDMzLCAweDg4LCAweDg2LCAweDA0LCAweGY2LCAweGI1LCAweGYwLAorKwkweDQ3LCAweDM5LCAweDE3LCAweGMxLCAweDQwLCAweDJiLCAweDgwLCAweDA5LAorKwkweDlkLCAweGNhLCAweDVjLCAweGJjLCAweDIwLCAweDcwLCAweDc1LCAweGMwCisrfTsKKysKKytzdGF0aWMgY29uc3QgdTggZGVjX2lucHV0MDAyW10gX19pbml0Y29uc3QgPSB7CisrCTB4ZWEsIDB4ZTAsIDB4MWUsIDB4OWUsIDB4MmMsIDB4OTEsIDB4YWEsIDB4ZTEsCisrCTB4ZGIsIDB4NWQsIDB4OTksIDB4M2YsIDB4OGEsIDB4ZjcsIDB4NjksIDB4OTIKKyt9OworK3N0YXRpYyBjb25zdCB1OCBkZWNfb3V0cHV0MDAyW10gX19pbml0Y29uc3QgPSB7IH07Cisrc3RhdGljIGNvbnN0IHU4IGRlY19hc3NvYzAwMltdIF9faW5pdGNvbnN0ID0geyB9OworK3N0YXRpYyBjb25zdCB1OCBkZWNfbm9uY2UwMDJbXSBfX2luaXRjb25zdCA9IHsKKysJMHhjYSwgMHhiZiwgMHgzMywgMHg3MSwgMHgzMiwgMHg0NSwgMHg3NywgMHg4ZQorK307Cisrc3RhdGljIGNvbnN0IHU4IGRlY19rZXkwMDJbXSBfX2luaXRjb25zdCA9IHsKKysJMHg0YywgMHhmNSwgMHg5NiwgMHg4MywgMHgzOCwgMHhlNiwgMHhhZSwgMHg3ZiwKKysJMHgyZCwgMHgyOSwgMHgyNSwgMHg3NiwgMHhkNSwgMHg3NSwgMHgyNywgMHg4NiwKKysJMHg5MSwgMHg5YSwgMHgyNywgMHg3YSwgMHhmYiwgMHg0NiwgMHhjNSwgMHhlZiwKKysJMHg5NCwgMHg4MSwgMHg3OSwgMHg1NywgMHgxNCwgMHg1OSwgMHg0MCwgMHg2OAorK307CisrCisrc3RhdGljIGNvbnN0IHU4IGRlY19pbnB1dDAwM1tdIF9faW5pdGNvbnN0ID0geworKwkweGRkLCAweDZiLCAweDNiLCAweDgyLCAweGNlLCAweDVhLCAweGJkLCAweGQ2LAorKwkweGE5LCAweDM1LCAweDgzLCAweGQ4LCAweDhjLCAweDNkLCAweDg1LCAweDc3CisrfTsKKytzdGF0aWMgY29uc3QgdTggZGVjX291dHB1dDAwM1tdIF9faW5pdGNvbnN0ID0geyB9OworK3N0YXRpYyBjb25zdCB1OCBkZWNfYXNzb2MwMDNbXSBfX2luaXRjb25zdCA9IHsKKysJMHgzMywgMHgxMCwgMHg0MSwgMHgxMiwgMHgxZiwgMHhmMywgMHhkMiwgMHg2YgorK307Cisrc3RhdGljIGNvbnN0IHU4IGRlY19ub25jZTAwM1tdIF9faW5pdGNvbnN0ID0geworKwkweDNkLCAweDg2LCAweGI1LCAweDZiLCAweGM4LCAweGEzLCAweDFmLCAweDFkCisrfTsKKytzdGF0aWMgY29uc3QgdTggZGVjX2tleTAwM1tdIF9faW5pdGNvbnN0ID0geworKwkweDJkLCAweGIwLCAweDVkLCAweDQwLCAweGM4LCAweGVkLCAweDQ0LCAweDg4LAorKwkweDM0LCAweGQxLCAweDEzLCAweGFmLCAweDU3LCAweGExLCAweGViLCAweDNhLAorKwkweDJhLCAweDgwLCAweDUxLCAweDM2LCAweGVjLCAweDViLCAweGJjLCAweDA4LAorKwkweDkzLCAweDg0LCAweDIxLCAweGI1LCAweDEzLCAweDg4LCAweDNjLCAweDBkCisrfTsKKysKKytzdGF0aWMgY29uc3QgdTggZGVjX2lucHV0MDA0W10gX19pbml0Y29uc3QgPSB7CisrCTB4YjcsIDB4MWIsIDB4YjAsIDB4NzMsIDB4NTksIDB4YjAsIDB4ODQsIDB4YjIsCisrCTB4NmQsIDB4OGUsIDB4YWIsIDB4OTQsIDB4MzEsIDB4YTEsIDB4YWUsIDB4YWMsCisrCTB4ODkKKyt9OworK3N0YXRpYyBjb25zdCB1OCBkZWNfb3V0cHV0MDA0W10gX19pbml0Y29uc3QgPSB7CisrCTB4YTQKKyt9OworK3N0YXRpYyBjb25zdCB1OCBkZWNfYXNzb2MwMDRbXSBfX2luaXRjb25zdCA9IHsKKysJMHg2YSwgMHhlMiwgMHhhZCwgMHgzZiwgMHg4OCwgMHgzOSwgMHg1YSwgMHg0MAorK307Cisrc3RhdGljIGNvbnN0IHU4IGRlY19ub25jZTAwNFtdIF9faW5pdGNvbnN0ID0geworKwkweGQyLCAweDMyLCAweDFmLCAweDI5LCAweDI4LCAweGM2LCAweGM0LCAweGM0CisrfTsKKytzdGF0aWMgY29uc3QgdTggZGVjX2tleTAwNFtdIF9faW5pdGNvbnN0ID0geworKwkweDRiLCAweDI4LCAweDRiLCAweGEzLCAweDdiLCAweGJlLCAweGU5LCAweGY4LAorKwkweDMxLCAweDgwLCAweDgyLCAweGQ3LCAweGQ4LCAweGU4LCAweGI1LCAweGExLAorKwkweGUyLCAweDE4LCAweDE4LCAweDhhLCAweDljLCAweGZhLCAweGEzLCAweDNkLAorKwkweDI1LCAweDcxLCAweDNlLCAweDQwLCAweGJjLCAweDU0LCAweDdhLCAweDNlCisrfTsKKysKKytzdGF0aWMgY29uc3QgdTggZGVjX2lucHV0MDA1W10gX19pbml0Y29uc3QgPSB7CisrCTB4YmYsIDB4ZTEsIDB4NWIsIDB4MGIsIDB4ZGIsIDB4NmIsIDB4ZjUsIDB4NWUsCisrCTB4NmMsIDB4NWQsIDB4ODQsIDB4NDQsIDB4MzksIDB4ODEsIDB4YzEsIDB4OWMsCisrCTB4YWMKKyt9OworK3N0YXRpYyBjb25zdCB1OCBkZWNfb3V0cHV0MDA1W10gX19pbml0Y29uc3QgPSB7CisrCTB4MmQKKyt9OworK3N0YXRpYyBjb25zdCB1OCBkZWNfYXNzb2MwMDVbXSBfX2luaXRjb25zdCA9IHsgfTsKKytzdGF0aWMgY29uc3QgdTggZGVjX25vbmNlMDA1W10gX19pbml0Y29uc3QgPSB7CisrCTB4MjAsIDB4MWMsIDB4YWEsIDB4NWYsIDB4OWMsIDB4YmYsIDB4OTIsIDB4MzAKKyt9OworK3N0YXRpYyBjb25zdCB1OCBkZWNfa2V5MDA1W10gX19pbml0Y29uc3QgPSB7CisrCTB4NjYsIDB4Y2EsIDB4OWMsIDB4MjMsIDB4MmEsIDB4NGIsIDB4NGIsIDB4MzEsCisrCTB4MGUsIDB4OTIsIDB4ODksIDB4OGIsIDB4ZjQsIDB4OTMsIDB4YzcsIDB4ODcsCisrCTB4OTgsIDB4YTMsIDB4ZDgsIDB4MzksIDB4ZjgsIDB4ZjQsIDB4YTcsIDB4MDEsCisrCTB4YzAsIDB4MmUsIDB4MGEsIDB4YTYsIDB4N2UsIDB4NWEsIDB4NzgsIDB4ODcKKyt9OworKworK3N0YXRpYyBjb25zdCB1OCBkZWNfaW5wdXQwMDZbXSBfX2luaXRjb25zdCA9IHsKKysJMHg4YiwgMHgwNiwgMHhkMywgMHgzMSwgMHhiMCwgMHg5MywgMHg0NSwgMHhiMSwKKysJMHg3NSwgMHg2ZSwgMHgyNiwgMHhmOSwgMHg2NywgMHhiYywgMHg5MCwgMHgxNSwKKysJMHg4MSwgMHgyYywgMHhiNSwgMHhmMCwgMHhjNiwgMHgyYiwgMHhjNywgMHg4YywKKysJMHg1NiwgMHhkMSwgMHhiZiwgMHg2OSwgMHg2YywgMHgwNywgMHhhMCwgMHhkYSwKKysJMHg2NSwgMHgyNywgMHhjOSwgMHg5MCwgMHgzZCwgMHhlZiwgMHg0YiwgMHgxMSwKKysJMHgwZiwgMHgxOSwgMHgwNywgMHhmZCwgMHgyOSwgMHg5MiwgMHhkOSwgMHhjOCwKKysJMHhmNywgMHg5OSwgMHgyZSwgMHg0YSwgMHhkMCwgMHhiOCwgMHgyYywgMHhkYywKKysJMHg5MywgMHhmNSwgMHg5ZSwgMHgzMywgMHg3OCwgMHhkMSwgMHgzNywgMHhjMywKKysJMHg2NiwgMHhkNywgMHg1ZSwgMHhiYywgMHg0NCwgMHhiZiwgMHg1MywgMHhhNSwKKysJMHhiYywgMHhjNCwgMHhjYiwgMHg3YiwgMHgzYSwgMHg4ZSwgMHg3ZiwgMHgwMiwKKysJMHhiZCwgMHhiYiwgMHhlNywgMHhjYSwgMHhhNiwgMHg2YywgMHg2YiwgMHg5MywKKysJMHgyMSwgMHg5MywgMHgxMCwgMHg2MSwgMHhlNywgMHg2OSwgMHhkMCwgMHg3OCwKKysJMHhmMywgMHgwNywgMHg1YSwgMHgxYSwgMHg4ZiwgMHg3MywgMHhhYSwgMHhiMSwKKysJMHg0ZSwgMHhkMywgMHhkYSwgMHg0ZiwgMHhmMywgMHgzMiwgMHhlMSwgMHg2NiwKKysJMHgzZSwgMHg2YywgMHhjNiwgMHgxMywgMHhiYSwgMHgwNiwgMHg1YiwgMHhmYywKKysJMHg2YSwgMHhlNSwgMHg2ZiwgMHg2MCwgMHhmYiwgMHgwNywgMHg0MCwgMHhiMCwKKysJMHg4YywgMHg5ZCwgMHg4NCwgMHg0MywgMHg2YiwgMHhjMSwgMHhmNywgMHg4ZCwKKysJMHg4ZCwgMHgzMSwgMHhmNywgMHg3YSwgMHgzOSwgMHg0ZCwgMHg4ZiwgMHg5YSwKKysJMHhlYgorK307Cisrc3RhdGljIGNvbnN0IHU4IGRlY19vdXRwdXQwMDZbXSBfX2luaXRjb25zdCA9IHsKKysJMHgzMywgMHgyZiwgMHg5NCwgMHhjMSwgMHhhNCwgMHhlZiwgMHhjYywgMHgyYSwKKysJMHg1YiwgMHhhNiwgMHhlNSwgMHg4ZiwgMHgxZCwgMHg0MCwgMHhmMCwgMHg5MiwKKysJMHgzYywgMHhkOSwgMHgyNCwgMHgxMSwgMHhhOSwgMHg3MSwgMHhmOSwgMHgzNywKKysJMHgxNCwgMHg5OSwgMHhmYSwgMHhiZSwgMHhlNiwgMHg4MCwgMHhkZSwgMHg1MCwKKysJMHhjOSwgMHg5NiwgMHhkNCwgMHhiMCwgMHhlYywgMHg5ZSwgMHgxNywgMHhlYywKKysJMHhkMiwgMHg1ZSwgMHg3MiwgMHg5OSwgMHhmYywgMHgwYSwgMHhlMSwgMHhjYiwKKysJMHg0OCwgMHhkMiwgMHg4NSwgMHhkZCwgMHgyZiwgMHg5MCwgMHhlMCwgMHg2NiwKKysJMHgzYiwgMHhlNiwgMHgyMCwgMHg3NCwgMHhiZSwgMHgyMywgMHg4ZiwgMHhjYiwKKysJMHhiNCwgMHhlNCwgMHhkYSwgMHg0OCwgMHg0MCwgMHhhNiwgMHhkMSwgMHgxYiwKKysJMHhjNywgMHg0MiwgMHhjZSwgMHgyZiwgMHgwYywgMHhhNiwgMHg4NSwgMHg2ZSwKKysJMHg4NywgMHgzNywgMHgwMywgMHhiMSwgMHg3YywgMHgyNSwgMHg5NiwgMHhhMywKKysJMHgwNSwgMHhkOCwgMHhiMCwgMHhmNCwgMHhlZCwgMHhlYSwgMHhjMiwgMHhmMCwKKysJMHgzMSwgMHg5OCwgMHg2YywgMHhkMSwgMHgxNCwgMHgyNSwgMHhjMCwgMHhjYiwKKysJMHgwMSwgMHg3NCwgMHhkMCwgMHg4MiwgMHhmNCwgMHgzNiwgMHhmNSwgMHg0MSwKKysJMHhkNSwgMHhkYywgMHhjYSwgMHhjNSwgMHhiYiwgMHg5OCwgMHhmZSwgMHhmYywKKysJMHg2OSwgMHgyMSwgMHg3MCwgMHhkOCwgMHhhNCwgMHg0YiwgMHhjOCwgMHhkZSwKKysJMHg4ZgorK307Cisrc3RhdGljIGNvbnN0IHU4IGRlY19hc3NvYzAwNltdIF9faW5pdGNvbnN0ID0geworKwkweDcwLCAweGQzLCAweDMzLCAweGYzLCAweDhiLCAweDE4LCAweDBiCisrfTsKKytzdGF0aWMgY29uc3QgdTggZGVjX25vbmNlMDA2W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZGYsIDB4NTEsIDB4ODQsIDB4ODIsIDB4NDIsIDB4MGMsIDB4NzUsIDB4OWMKKyt9OworK3N0YXRpYyBjb25zdCB1OCBkZWNfa2V5MDA2W10gX19pbml0Y29uc3QgPSB7CisrCTB4NjgsIDB4N2IsIDB4OGQsIDB4OGUsIDB4ZTMsIDB4YzQsIDB4ZGQsIDB4YWUsCisrCTB4ZGYsIDB4NzIsIDB4N2YsIDB4NTMsIDB4NzIsIDB4MjUsIDB4MWUsIDB4NzgsCisrCTB4OTEsIDB4Y2IsIDB4NjksIDB4NzYsIDB4MWYsIDB4NDksIDB4OTMsIDB4ZjksCisrCTB4NmYsIDB4MjEsIDB4Y2MsIDB4MzksIDB4OWMsIDB4YWQsIDB4YjEsIDB4MDEKKyt9OworKworK3N0YXRpYyBjb25zdCB1OCBkZWNfaW5wdXQwMDdbXSBfX2luaXRjb25zdCA9IHsKKysJMHg4NSwgMHgwNCwgMHhjMiwgMHhlZCwgMHg4ZCwgMHhmZCwgMHg5NywgMHg1YywKKysJMHhkMiwgMHhiNywgMHhlMiwgMHhjMSwgMHg2YiwgMHhhMywgMHhiYSwgMHhmOCwKKysJMHhjOSwgMHg1MCwgMHhjMywgMHhjNiwgMHhhNSwgMHhlMywgMHhhNCwgMHg3YywKKysJMHhjMywgMHgyMywgMHg0OSwgMHg1ZSwgMHhhOSwgMHhiOSwgMHgzMiwgMHhlYiwKKysJMHg4YSwgMHg3YywgMHhjYSwgMHhlNSwgMHhlYywgMHhmYiwgMHg3YywgMHhjMCwKKysJMHhjYiwgMHg3ZCwgMHhkYywgMHgyYywgMHg5ZCwgMHg5MiwgMHg1NSwgMHgyMSwKKysJMHgwYSwgMHhjOCwgMHg0MywgMHg2MywgMHg1OSwgMHgwYSwgMHgzMSwgMHg3MCwKKysJMHg4MiwgMHg2NywgMHg0MSwgMHgwMywgMHhmOCwgMHhkZiwgMHhmMiwgMHhhYywKKysJMHhhNywgMHgwMiwgMHhkNCwgMHhkNSwgMHg4YSwgMHgyZCwgMHhjOCwgMHg5OSwKKysJMHgxOSwgMHg2NiwgMHhkMCwgMHhmNiwgMHg4OCwgMHgyYywgMHg3NywgMHhkOSwKKysJMHhkNCwgMHgwZCwgMHg2YywgMHhiZCwgMHg5OCwgMHhkZSwgMHhlNywgMHg3ZiwKKysJMHhhZCwgMHg3ZSwgMHg4YSwgMHhmYiwgMHhlOSwgMHg0YiwgMHhlNSwgMHhmNywKKysJMHhlNSwgMHg1MCwgMHhhMCwgMHg5MCwgMHgzZiwgMHhkNiwgMHgyMiwgMHg1MywKKysJMHhlMywgMHhmZSwgMHgxYiwgMHhjYywgMHg3OSwgMHgzYiwgMHhlYywgMHgxMiwKKysJMHg0NywgMHg1MiwgMHhhNywgMHhkNiwgMHgwNCwgMHhlMywgMHg1MiwgMHhlNiwKKysJMHg5MywgMHg5MCwgMHg5MSwgMHgzMiwgMHg3MywgMHg3OSwgMHhiOCwgMHhkMCwKKysJMHgzMSwgMHhkZSwgMHgxZiwgMHg5ZiwgMHgyZiwgMHgwNSwgMHgzOCwgMHg1NCwKKysJMHgyZiwgMHgzNSwgMHgwNCwgMHgzOSwgMHhlMCwgMHhhNywgMHhiYSwgMHhjNiwKKysJMHg1MiwgMHhmNiwgMHgzNywgMHg2NSwgMHg0YywgMHgwNywgMHhhOSwgMHg3ZSwKKysJMHhiMywgMHgyMSwgMHg2ZiwgMHg3NCwgMHg4YywgMHhjOSwgMHhkZSwgMHhkYiwKKysJMHg2NSwgMHgxYiwgMHg5YiwgMHhhYSwgMHg2MCwgMHhiMSwgMHgwMywgMHgzMCwKKysJMHg2YiwgMHhiMiwgMHgwMywgMHhjNCwgMHgxYywgMHgwNCwgMHhmOCwgMHgwZiwKKysJMHg2NCwgMHhhZiwgMHg0NiwgMHhlNCwgMHg2NSwgMHg5OSwgMHg0OSwgMHhlMiwKKysJMHhlYSwgMHhjZSwgMHg3OCwgMHgwMCwgMHhkOCwgMHg4YiwgMHhkNSwgMHgyZSwKKysJMHhjZiwgMHhmYywgMHg0MCwgMHg0OSwgMHhlOCwgMHg1OCwgMHhkYywgMHgzNCwKKysJMHg5YywgMHg4YywgMHg2MSwgMHhiZiwgMHgwYSwgMHg4ZSwgMHhlYywgMHgzOSwKKysJMHhhOSwgMHgzMCwgMHgwNSwgMHg1YSwgMHhkMiwgMHg1NiwgMHgwMSwgMHhjNywKKysJMHhkYSwgMHg4ZiwgMHg0ZSwgMHhiYiwgMHg0MywgMHhhMywgMHgzYSwgMHhmOSwKKysJMHgxNSwgMHgyYSwgMHhkMCwgMHhhMCwgMHg3YSwgMHg4NywgMHgzNCwgMHg4MiwKKysJMHhmZSwgMHg4YSwgMHhkMSwgMHgyZCwgMHg1ZSwgMHhjNywgMHhiZiwgMHgwNCwKKysJMHg1MywgMHg1ZiwgMHgzYiwgMHgzNiwgMHhkNCwgMHgyNSwgMHg1YywgMHgzNCwKKysJMHg3YSwgMHg4ZCwgMHhkNSwgMHgwNSwgMHhjZSwgMHg3MiwgMHhjYSwgMHhlZiwKKysJMHg3YSwgMHg0YiwgMHhiYywgMHhiMCwgMHgxMCwgMHg1YywgMHg5NiwgMHg0MiwKKysJMHgzYSwgMHgwMCwgMHg5OCwgMHhjZCwgMHgxNSwgMHhlOCwgMHhiNywgMHg1MworK307Cisrc3RhdGljIGNvbnN0IHU4IGRlY19vdXRwdXQwMDdbXSBfX2luaXRjb25zdCA9IHsKKysJMHg5YiwgMHgxOCwgMHhkYiwgMHhkZCwgMHg5YSwgMHgwZiwgMHgzZSwgMHhhNSwKKysJMHgxNSwgMHgxNywgMHhkZSwgMHhkZiwgMHgwOCwgMHg5ZCwgMHg2NSwgMHgwYSwKKysJMHg2NywgMHgzMCwgMHgxMiwgMHhlMiwgMHgzNCwgMHg3NywgMHg0YiwgMHhjMSwKKysJMHhkOSwgMHhjNiwgMHgxZiwgMHhhYiwgMHhjNiwgMHgxOCwgMHg1MCwgMHgxNywKKysJMHhhNywgMHg5ZCwgMHgzYywgMHhhNiwgMHhjNSwgMHgzNSwgMHg4YywgMHgxYywKKysJMHhjMCwgMHhhMSwgMHg3YywgMHg5ZiwgMHgwMywgMHg4OSwgMHhjYSwgMHhlMSwKKysJMHhlNiwgMHhlOSwgMHhkNCwgMHhkMywgMHg4OCwgMHhkYiwgMHhiNCwgMHg1MSwKKysJMHg5ZCwgMHhlYywgMHhiNCwgMHhmYywgMHg1MiwgMHhlZSwgMHg2ZCwgMHhmMSwKKysJMHg3NSwgMHg0MiwgMHhjNiwgMHhmZCwgMHhiZCwgMHg3YSwgMHg4ZSwgMHg4NiwKKysJMHhmYywgMHg0NCwgMHhiMywgMHg0ZiwgMHhmMywgMHhlYSwgMHg2NywgMHg1YSwKKysJMHg0MSwgMHgxMywgMHhiYSwgMHhiMCwgMHhkYywgMHhlMSwgMHhkMywgMHgyYSwKKysJMHg3YywgMHgyMiwgMHhiMywgMHhjYSwgMHhhYywgMHg2YSwgMHgzNywgMHg5OCwKKysJMHgzZSwgMHgxZCwgMHg0MCwgMHg5NywgMHhmNywgMHg5YiwgMHgxZCwgMHgzNiwKKysJMHg2YiwgMHhiMywgMHgyOCwgMHhiZCwgMHg2MCwgMHg4MiwgMHg0NywgMHgzNCwKKysJMHhhYSwgMHgyZiwgMHg3ZCwgMHhlOSwgMHhhOCwgMHg3MCwgMHg4MSwgMHg1NywKKysJMHhkNCwgMHhiOSwgMHg3NywgMHgwYSwgMHg5ZCwgMHgyOSwgMHhhNywgMHg4NCwKKysJMHg1MiwgMHg0ZiwgMHhjMiwgMHg0YSwgMHg0MCwgMHgzYiwgMHgzYywgMHhkNCwKKysJMHhjOSwgMHgyYSwgMHhkYiwgMHg0YSwgMHg1MywgMHhjNCwgMHhiZSwgMHg4MCwKKysJMHhlOSwgMHg1MSwgMHg3ZiwgMHg4ZiwgMHhjNywgMHhhMiwgMHhjZSwgMHg4MiwKKysJMHg1YywgMHg5MSwgMHgxZSwgMHg3NCwgMHhkOSwgMHhkMCwgMHhiZCwgMHhkNSwKKysJMHhmMywgMHhmZCwgMHhkYSwgMHg0ZCwgMHgyNSwgMHhiNCwgMHhiYiwgMHgyZCwKKysJMHhhYywgMHgyZiwgMHgzZCwgMHg3MSwgMHg4NSwgMHg3YiwgMHhjZiwgMHgzYywKKysJMHg3YiwgMHgzZSwgMHgwZSwgMHgyMiwgMHg3OCwgMHgwYywgMHgyOSwgMHhiZiwKKysJMHhlNCwgMHhmNCwgMHg1NywgMHhiMywgMHhjYiwgMHg0OSwgMHhhMCwgMHhmYywKKysJMHgxZSwgMHgwNSwgMHg0ZSwgMHgxNiwgMHhiYywgMHhkNSwgMHhhOCwgMHhhMywKKysJMHhlZSwgMHgwNSwgMHgzNSwgMHhjNiwgMHg3YywgMHhhYiwgMHg2MCwgMHgxNCwKKysJMHg1NSwgMHgxYSwgMHg4ZSwgMHhjNSwgMHg4OCwgMHg1ZCwgMHhkNSwgMHg4MSwKKysJMHhjMiwgMHg4MSwgMHhhNSwgMHhjNCwgMHg2MCwgMHhkYiwgMHhhZiwgMHg3NywKKysJMHg5MSwgMHhlMSwgMHhjZSwgMHhhMiwgMHg3ZSwgMHg3ZiwgMHg0MiwgMHhlMywKKysJMHhiMCwgMHgxMywgMHgxYywgMHgxZiwgMHgyNSwgMHg2MCwgMHgyMSwgMHhlMiwKKysJMHg0MCwgMHg1ZiwgMHg5OSwgMHhiNywgMHg3MywgMHhlYywgMHg5YiwgMHgyYiwKKysJMHhmMCwgMHg2NSwgMHgxMSwgMHhjOCwgMHhkMCwgMHgwYSwgMHg5ZiwgMHhkMworK307Cisrc3RhdGljIGNvbnN0IHU4IGRlY19hc3NvYzAwN1tdIF9faW5pdGNvbnN0ID0geyB9OworK3N0YXRpYyBjb25zdCB1OCBkZWNfbm9uY2UwMDdbXSBfX2luaXRjb25zdCA9IHsKKysJMHhkZSwgMHg3YiwgMHhlZiwgMHhjMywgMHg2NSwgMHgxYiwgMHg2OCwgMHhiMAorK307Cisrc3RhdGljIGNvbnN0IHU4IGRlY19rZXkwMDdbXSBfX2luaXRjb25zdCA9IHsKKysJMHg4ZCwgMHhiOCwgMHg5MSwgMHg0OCwgMHhmMCwgMHhlNywgMHgwYSwgMHhiZCwKKysJMHhmOSwgMHgzZiwgMHhjZCwgMHhkOSwgMHhhMCwgMHgxZSwgMHg0MiwgMHg0YywKKysJMHhlNywgMHhkZSwgMHgyNSwgMHgzZCwgMHhhMywgMHhkNywgMHgwNSwgMHg4MCwKKysJMHg4ZCwgMHhmMiwgMHg4MiwgMHhhYywgMHg0NCwgMHgxNiwgMHg1MSwgMHgwMQorK307CisrCisrc3RhdGljIGNvbnN0IHU4IGRlY19pbnB1dDAwOFtdIF9faW5pdGNvbnN0ID0geworKwkweDE0LCAweGY2LCAweDQxLCAweDM3LCAweGE2LCAweGQ0LCAweDI3LCAweGNkLAorKwkweGRiLCAweDA2LCAweDNlLCAweDlhLCAweDRlLCAweGFiLCAweGQ1LCAweGIxLAorKwkweDFlLCAweDZiLCAweGQyLCAweGJjLCAweDExLCAweGY0LCAweDI4LCAweDkzLAorKwkweDYzLCAweDU0LCAweGVmLCAweGJiLCAweDVlLCAweDFkLCAweDNhLCAweDFkLAorKwkweDM3LCAweDNjLCAweDBhLCAweDZjLCAweDFlLCAweGMyLCAweGQxLCAweDJjLAorKwkweGI1LCAweGEzLCAweGI1LCAweDdiLCAweGI4LCAweDhmLCAweDI1LCAweGE2LAorKwkweDFiLCAweDYxLCAweDFjLCAweGVjLCAweDI4LCAweDU4LCAweDI2LCAweGE0LAorKwkweGE4LCAweDMzLCAweDI4LCAweDI1LCAweDVjLCAweDQ1LCAweDA1LCAweGU1LAorKwkweDZjLCAweDk5LCAweGU1LCAweDQ1LCAweGM0LCAweGEyLCAweDAzLCAweDg0LAorKwkweDAzLCAweDczLCAweDFlLCAweDhjLCAweDQ5LCAweGFjLCAweDIwLCAweGRkLAorKwkweDhkLCAweGIzLCAweGM0LCAweGY1LCAweGU3LCAweDRmLCAweGYxLCAweGVkLAorKwkweGExLCAweDk4LCAweGRlLCAweGE0LCAweDk2LCAweGRkLCAweDJmLCAweGFiLAorKwkweGFiLCAweDk3LCAweGNmLCAweDNlLCAweGQyLCAweDllLCAweGI4LCAweDEzLAorKwkweDA3LCAweDI4LCAweDI5LCAweDE5LCAweGFmLCAweGZkLCAweGYyLCAweDQ5LAorKwkweDQzLCAweGVhLCAweDQ5LCAweDI2LCAweDkxLCAweGMxLCAweDA3LCAweGQ2LAorKwkweGJiLCAweDgxLCAweDc1LCAweDM1LCAweDBkLCAweDI0LCAweDdmLCAweGM4LAorKwkweGRhLCAweGQ0LCAweGI3LCAweGViLCAweGU4LCAweDVjLCAweDA5LCAweGEyLAorKwkweDJmLCAweGRjLCAweDI4LCAweDdkLCAweDNhLCAweDAzLCAweGZhLCAweDk0LAorKwkweGI1LCAweDFkLCAweDE3LCAweDk5LCAweDM2LCAweGMzLCAweDFjLCAweDE4LAorKwkweDM0LCAweGUzLCAweDlmLCAweGY1LCAweDU1LCAweDdjLCAweGIwLCAweDYwLAorKwkweDlkLCAweGZmLCAweGFjLCAweGQ0LCAweDYxLCAweGYyLCAweGFkLCAweGY4LAorKwkweGNlLCAweGM3LCAweGJlLCAweDVjLCAweGQyLCAweDk1LCAweGE4LCAweDRiLAorKwkweDc3LCAweDEzLCAweDE5LCAweDU5LCAweDI2LCAweGM5LCAweGI3LCAweDhmLAorKwkweDZhLCAweGNiLCAweDJkLCAweDM3LCAweDkxLCAweGVhLCAweDkyLCAweDljLAorKwkweDk0LCAweDViLCAweGRhLCAweDBiLCAweGNlLCAweGZlLCAweDMwLCAweDIwLAorKwkweGY4LCAweDUxLCAweGFkLCAweGYyLCAweGJlLCAweGU3LCAweGM3LCAweGZmLAorKwkweGIzLCAweDMzLCAweDkxLCAweDZhLCAweGM5LCAweDFhLCAweDQxLCAweGM5LAorKwkweDBmLCAweGYzLCAweDEwLCAweDBlLCAweGZkLCAweDUzLCAweGZmLCAweDZjLAorKwkweDE2LCAweDUyLCAweGQ5LCAweGYzLCAweGY3LCAweDk4LCAweDJlLCAweGM5LAorKwkweDA3LCAweDMxLCAweDJjLCAweDBjLCAweDcyLCAweGQ3LCAweGM1LCAweGM2LAorKwkweDA4LCAweDJhLCAweDdiLCAweGRhLCAweGJkLCAweDdlLCAweDAyLCAweGVhLAorKwkweDFhLCAweGJiLCAweGYyLCAweDA0LCAweDI3LCAweDYxLCAweDI4LCAweDhlLAorKwkweGY1LCAweDA0LCAweDAzLCAweDFmLCAweDRjLCAweDA3LCAweDU1LCAweDgyLAorKwkweGVjLCAweDFlLCAweGQ3LCAweDhiLCAweDJmLCAweDY1LCAweDU2LCAweGQxLAorKwkweGQ5LCAweDFlLCAweDNjLCAweGU5LCAweDFmLCAweDVlLCAweDk4LCAweDcwLAorKwkweDM4LCAweDRhLCAweDhjLCAweDQ5LCAweGM1LCAweDQzLCAweGEwLCAweGExLAorKwkweDhiLCAweDc0LCAweDlkLCAweDRjLCAweDYyLCAweDBkLCAweDEwLCAweDBjLAorKwkweGY0LCAweDZjLCAweDhmLCAweGUwLCAweGFhLCAweDlhLCAweDhkLCAweGI3LAorKwkweGUwLCAweGJlLCAweDRjLCAweDg3LCAweGYxLCAweDk4LCAweDJmLCAweGNjLAorKwkweGVkLCAweGMwLCAweDUyLCAweDI5LCAweGRjLCAweDgzLCAweGY4LCAweGZjLAorKwkweDJjLCAweDBlLCAweGE4LCAweDUxLCAweDRkLCAweDgwLCAweDBkLCAweGEzLAorKwkweGZlLCAweGQ4LCAweDM3LCAweGU3LCAweDQxLCAweDI0LCAweGZjLCAweGZiLAorKwkweDc1LCAweGUzLCAweDcxLCAweDdiLCAweDU3LCAweDQ1LCAweGY1LCAweDk3LAorKwkweDczLCAweDY1LCAweDYzLCAweDE0LCAweDc0LCAweGI4LCAweDgyLCAweDlmLAorKwkweGY4LCAweDYwLCAweDJmLCAweDhhLCAweGYyLCAweDRlLCAweGYxLCAweDM5LAorKwkweGRhLCAweDMzLCAweDkxLCAweGY4LCAweDM2LCAweGUwLCAweDhkLCAweDNmLAorKwkweDFmLCAweDNiLCAweDU2LCAweGRjLCAweGEwLCAweDhmLCAweDNjLCAweDlkLAorKwkweDcxLCAweDUyLCAweGE3LCAweGI4LCAweGMwLCAweGE1LCAweGM2LCAweGEyLAorKwkweDczLCAweGRhLCAweGY0LCAweDRiLCAweDc0LCAweDViLCAweDAwLCAweDNkLAorKwkweDk5LCAweGQ3LCAweDk2LCAweGJhLCAweGU2LCAweGUxLCAweGE2LCAweDk2LAorKwkweDM4LCAweGFkLCAweGIzLCAweGMwLCAweGQyLCAweGJhLCAweDkxLCAweDZiLAorKwkweGY5LCAweDE5LCAweGRkLCAweDNiLCAweGJlLCAweGJlLCAweDljLCAweDIwLAorKwkweDUwLCAweGJhLCAweGExLCAweGQwLCAweGNlLCAweDExLCAweGJkLCAweDk1LAorKwkweGQ4LCAweGQxLCAweGRkLCAweDMzLCAweDg1LCAweDc0LCAweGRjLCAweGRiLAorKwkweDY2LCAweDc2LCAweDQ0LCAweGRjLCAweDAzLCAweDc0LCAweDQ4LCAweDM1LAorKwkweDk4LCAweGIxLCAweDE4LCAweDQ3LCAweDk0LCAweDdkLCAweGZmLCAweDYyLAorKwkweGU0LCAweDU4LCAweDc4LCAweGFiLCAweGVkLCAweDk1LCAweDM2LCAweGQ5LAorKwkweDg0LCAweDkxLCAweDgyLCAweDY0LCAweDQxLCAweGJiLCAweDU4LCAweGU2LAorKwkweDFjLCAweDIwLCAweDZkLCAweDE1LCAweDZiLCAweDEzLCAweDk2LCAweGU4LAorKwkweDM1LCAweDdmLCAweGRjLCAweDQwLCAweDJjLCAweGU5LCAweGJjLCAweDhhLAorKwkweDRmLCAweDkyLCAweGVjLCAweDA2LCAweDJkLCAweDUwLCAweGRmLCAweDkzLAorKwkweDVkLCAweDY1LCAweDVhLCAweGE4LCAweGZjLCAweDIwLCAweDUwLCAweDE0LAorKwkweGE5LCAweDhhLCAweDdlLCAweDFkLCAweDA4LCAweDFmLCAweGUyLCAweDk5LAorKwkweGQwLCAweGJlLCAweGZiLCAweDNhLCAweDIxLCAweDlkLCAweGFkLCAweDg2LAorKwkweDU0LCAweGZkLCAweDBkLCAweDk4LCAweDFjLCAweDVhLCAweDZmLCAweDFmLAorKwkweDlhLCAweDQwLCAweGNkLCAweGEyLCAweGZmLCAweDZhLCAweGYxLCAweDU0CisrfTsKKytzdGF0aWMgY29uc3QgdTggZGVjX291dHB1dDAwOFtdIF9faW5pdGNvbnN0ID0geworKwkweGMzLCAweDA5LCAweDk0LCAweDYyLCAweGU2LCAweDQ2LCAweDJlLCAweDEwLAorKwkweGJlLCAweDAwLCAweGU0LCAweGZjLCAweGYzLCAweDQwLCAweGEzLCAweGUyLAorKwkweDBmLCAweGMyLCAweDhiLCAweDI4LCAweGRjLCAweGJhLCAweGI0LCAweDNjLAorKwkweGU0LCAweDIxLCAweDU4LCAweDYxLCAweGNkLCAweDhiLCAweGNkLCAweGZiLAorKwkweGFjLCAweDk0LCAweGExLCAweDQ1LCAweGY1LCAweDFjLCAweGUxLCAweDEyLAorKwkweGUwLCAweDNiLCAweDY3LCAweDIxLCAweDU0LCAweDVlLCAweDhjLCAweGFhLAorKwkweGNmLCAweGRiLCAweGI0LCAweDUxLCAweGQ0LCAweDEzLCAweGRhLCAweGU2LAorKwkweDgzLCAweDg5LCAweGI2LCAweDkyLCAweGU5LCAweDIxLCAweDc2LCAweGE0LAorKwkweDkzLCAweDdkLCAweDBlLCAweGZkLCAweDk2LCAweDM2LCAweDAzLCAweDkxLAorKwkweDQzLCAweDVjLCAweDkyLCAweDQ5LCAweDYyLCAweDYxLCAweDdiLCAweGViLAorKwkweDQzLCAweDg5LCAweGI4LCAweDEyLCAweDIwLCAweDQzLCAweGQ0LCAweDQ3LAorKwkweDA2LCAweDg0LCAweGVlLCAweDQ3LCAweGU5LCAweDhhLCAweDczLCAweDE1LAorKwkweDBmLCAweDcyLCAweGNmLCAweGVkLCAweGNlLCAweDk2LCAweGIyLCAweDdmLAorKwkweDIxLCAweDQ1LCAweDc2LCAweGViLCAweDI2LCAweDI4LCAweDgzLCAweDZhLAorKwkweGFkLCAweGFhLCAweGE2LCAweDgxLCAweGQ4LCAweDU1LCAweGIxLCAweGEzLAorKwkweDg1LCAweGIzLCAweDBjLCAweGRmLCAweGYxLCAweDY5LCAweDJkLCAweDk3LAorKwkweDA1LCAweDJhLCAweGJjLCAweDdjLCAweDdiLCAweDI1LCAweGY4LCAweDgwLAorKwkweDlkLCAweDM5LCAweDI1LCAweGYzLCAweDYyLCAweGYwLCAweDY2LCAweDVlLAorKwkweGY0LCAweGEwLCAweGNmLCAweGQ4LCAweGZkLCAweDRmLCAweGIxLCAweDFmLAorKwkweDYwLCAweDNhLCAweDA4LCAweDQ3LCAweGFmLCAweGUxLCAweGY2LCAweDEwLAorKwkweDc3LCAweDA5LCAweGE3LCAweDI3LCAweDhmLCAweDlhLCAweDk3LCAweDVhLAorKwkweDI2LCAweGZhLCAweGZlLCAweDQxLCAweDMyLCAweDgzLCAweDEwLCAweGUwLAorKwkweDFkLCAweGJmLCAweDY0LCAweDBkLCAweGY0LCAweDFjLCAweDMyLCAweDM1LAorKwkweGU1LCAweDFiLCAweDM2LCAweGVmLCAweGQ0LCAweDRhLCAweDkzLCAweDRkLAorKwkweDAwLCAweDdjLCAweGVjLCAweDAyLCAweDA3LCAweDhiLCAweDVkLCAweDdkLAorKwkweDFiLCAweDBlLCAweGQxLCAweGE2LCAweGE1LCAweDVkLCAweDdkLCAweDU3LAorKwkweDg4LCAweGE4LCAweGNjLCAweDgxLCAweGI0LCAweDg2LCAweDRlLCAweGI0LAorKwkweDQwLCAweGU5LCAweDFkLCAweGMzLCAweGIxLCAweDI0LCAweDNlLCAweDdmLAorKwkweGNjLCAweDhhLCAweDI0LCAweDliLCAweGRmLCAweDZkLCAweGYwLCAweDM5LAorKwkweDY5LCAweDNlLCAweDRjLCAweGMwLCAweDk2LCAweGU0LCAweDEzLCAweGRhLAorKwkweDkwLCAweGRhLCAweGY0LCAweDk1LCAweDY2LCAweDhiLCAweDE3LCAweDE3LAorKwkweGZlLCAweDM5LCAweDQzLCAweDI1LCAweGFhLCAweGRhLCAweGEwLCAweDQzLAorKwkweDNjLCAweGIxLCAweDQxLCAweDAyLCAweGEzLCAweGYwLCAweGE3LCAweDE5LAorKwkweDU5LCAweGJjLCAweDFkLCAweDdkLCAweDZjLCAweDZkLCAweDkxLCAweDA5LAorKwkweDVjLCAweGI3LCAweDViLCAweDAxLCAweGQxLCAweDZmLCAweDE3LCAweDIxLAorKwkweDk3LCAweGJmLCAweDg5LCAweDcxLCAweGE1LCAweGIwLCAweDZlLCAweDA3LAorKwkweDQ1LCAweGZkLCAweDlkLCAweGVhLCAweDA3LCAweGY2LCAweDdhLCAweDlmLAorKwkweDEwLCAweDE4LCAweDIyLCAweDMwLCAweDczLCAweGFjLCAweGQ0LCAweDZiLAorKwkweDcyLCAweDQ0LCAweGVkLCAweGQ5LCAweDE5LCAweDliLCAweDJkLCAweDRhLAorKwkweDQxLCAweGRkLCAweGQxLCAweDg1LCAweDVlLCAweDM3LCAweDE5LCAweGVkLAorKwkweGQyLCAweDE1LCAweDhmLCAweDVlLCAweDkxLCAweGRiLCAweDMzLCAweGYyLAorKwkweGU0LCAweGRiLCAweGZmLCAweDk4LCAweGZiLCAweGEzLCAweGI1LCAweGNhLAorKwkweDIxLCAweDY5LCAweDA4LCAweGU3LCAweDhhLCAweGRmLCAweDkwLCAweGZmLAorKwkweDNlLCAweGU5LCAweDIwLCAweDg2LCAweDNjLCAweGU5LCAweGZjLCAweDBiLAorKwkweGZlLCAweDVjLCAweDYxLCAweGFhLCAweDEzLCAweDkyLCAweDdmLCAweDdiLAorKwkweGVjLCAweGUwLCAweDZkLCAweGE4LCAweDIzLCAweDIyLCAweGY2LCAweDZiLAorKwkweDc3LCAweGM0LCAweGZlLCAweDQwLCAweDA3LCAweDNiLCAweGI2LCAweGY2LAorKwkweDhlLCAweDVmLCAweGQ0LCAweGI5LCAweGI3LCAweDBmLCAweDIxLCAweDA0LAorKwkweGVmLCAweDgzLCAweDYzLCAweDkxLCAweDY5LCAweDQwLCAweGEzLCAweDQ4LAorKwkweDVjLCAweGQyLCAweDYwLCAweGY5LCAweDRmLCAweDZjLCAweDQ3LCAweDhiLAorKwkweDNiLCAweGIxLCAweDlmLCAweDhlLCAweGVlLCAweDE2LCAweDhhLCAweDEzLAorKwkweGZjLCAweDQ2LCAweDE3LCAweGMzLCAweGMzLCAweDMyLCAweDU2LCAweGY4LAorKwkweDNjLCAweDg1LCAweDNhLCAweGI2LCAweDNlLCAweGFhLCAweDg5LCAweDRmLAorKwkweGIzLCAweGRmLCAweDM4LCAweGZkLCAweGYxLCAweGU0LCAweDNhLCAweGMwLAorKwkweGU2LCAweDU4LCAweGI1LCAweDhmLCAweGM1LCAweDI5LCAweGEyLCAweDkyLAorKwkweDRhLCAweGI2LCAweGEwLCAweDM0LCAweDdmLCAweGFiLCAweGI1LCAweDhhLAorKwkweDkwLCAweGExLCAweGRiLCAweDRkLCAweGNhLCAweGI2LCAweDJjLCAweDQxLAorKwkweDNjLCAweGY3LCAweDJiLCAweDIxLCAweGMzLCAweGZkLCAweGY0LCAweDE3LAorKwkweDVjLCAweGI1LCAweDMzLCAweDE3LCAweDY4LCAweDJiLCAweDA4LCAweDMwLAorKwkweGYzLCAweGY3LCAweDMwLCAweDNjLCAweDk2LCAweGU2LCAweDZhLCAweDIwLAorKwkweDk3LCAweGU3LCAweDRkLCAweDEwLCAweDVmLCAweDQ3LCAweDVmLCAweDQ5LAorKwkweDk2LCAweDA5LCAweGYwLCAweDI3LCAweDkxLCAweGM4LCAweGY4LCAweDVhLAorKwkweDJlLCAweDc5LCAweGI1LCAweGUyLCAweGI4LCAweGU4LCAweGI5LCAweDdiLAorKwkweGQ1LCAweDEwLCAweGNiLCAweGZmLCAweDVkLCAweDE0LCAweDczLCAweGYzCisrfTsKKytzdGF0aWMgY29uc3QgdTggZGVjX2Fzc29jMDA4W10gX19pbml0Y29uc3QgPSB7IH07Cisrc3RhdGljIGNvbnN0IHU4IGRlY19ub25jZTAwOFtdIF9faW5pdGNvbnN0ID0geworKwkweDBlLCAweDBkLCAweDU3LCAweGJiLCAweDdiLCAweDQwLCAweDU0LCAweDAyCisrfTsKKytzdGF0aWMgY29uc3QgdTggZGVjX2tleTAwOFtdIF9faW5pdGNvbnN0ID0geworKwkweGYyLCAweGFhLCAweDRmLCAweDk5LCAweGZkLCAweDNlLCAweGE4LCAweDUzLAorKwkweGMxLCAweDQ0LCAweGU5LCAweDgxLCAweDE4LCAweGRjLCAweGY1LCAweGYwLAorKwkweDNlLCAweDQ0LCAweDE1LCAweDU5LCAweGUwLCAweGM1LCAweDQ0LCAweDg2LAorKwkweGMzLCAweDkxLCAweGE4LCAweDc1LCAweGMwLCAweDEyLCAweDQ2LCAweGJhCisrfTsKKysKKytzdGF0aWMgY29uc3QgdTggZGVjX2lucHV0MDA5W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmQsIDB4ODEsIDB4OGQsIDB4ZDAsIDB4M2QsIDB4YjQsIDB4ZDUsIDB4ZGYsCisrCTB4ZDMsIDB4NDIsIDB4NDcsIDB4NWEsIDB4NmQsIDB4MTksIDB4MjcsIDB4NjYsCisrCTB4NGIsIDB4MmUsIDB4MGMsIDB4MjcsIDB4OWMsIDB4OTYsIDB4NGMsIDB4NzIsCisrCTB4MDIsIDB4YTMsIDB4NjUsIDB4YzMsIDB4YjMsIDB4NmYsIDB4MmUsIDB4YmQsCisrCTB4NjMsIDB4OGEsIDB4NGEsIDB4NWQsIDB4MjksIDB4YTIsIDB4ZDAsIDB4MjgsCisrCTB4NDgsIDB4YzUsIDB4M2QsIDB4OTgsIDB4YTMsIDB4YmMsIDB4ZTAsIDB4YmUsCisrCTB4M2IsIDB4M2YsIDB4ZTYsIDB4OGEsIDB4YTQsIDB4N2YsIDB4NTMsIDB4MDYsCisrCTB4ZmEsIDB4N2YsIDB4MjcsIDB4NzYsIDB4NzIsIDB4MzEsIDB4YTEsIDB4ZjUsCisrCTB4ZDYsIDB4MGMsIDB4NTIsIDB4NDcsIDB4YmEsIDB4Y2QsIDB4NGYsIDB4ZDcsCisrCTB4ZWIsIDB4MDUsIDB4NDgsIDB4MGQsIDB4N2MsIDB4MzUsIDB4NGEsIDB4MDksCisrCTB4YzksIDB4NzYsIDB4NzEsIDB4MDIsIDB4YTMsIDB4ZmIsIDB4YjcsIDB4MWEsCisrCTB4NjUsIDB4YjcsIDB4ZWQsIDB4OTgsIDB4YzYsIDB4MzAsIDB4OGEsIDB4MDAsCisrCTB4YWUsIDB4YTEsIDB4MzEsIDB4ZTUsIDB4YjUsIDB4OWUsIDB4NmQsIDB4NjIsCisrCTB4ZGEsIDB4ZGEsIDB4MDcsIDB4MGYsIDB4MzgsIDB4MzgsIDB4ZDMsIDB4Y2IsCisrCTB4YzEsIDB4YjAsIDB4YWQsIDB4ZWMsIDB4NzIsIDB4ZWMsIDB4YjEsIDB4YTIsCisrCTB4N2IsIDB4NTksIDB4ZjMsIDB4M2QsIDB4MmIsIDB4ZWYsIDB4Y2QsIDB4MjgsCisrCTB4NWIsIDB4ODMsIDB4Y2MsIDB4MTgsIDB4OTEsIDB4ODgsIDB4YjAsIDB4MmUsCisrCTB4ZjksIDB4MjksIDB4MzEsIDB4MTgsIDB4ZjksIDB4NGUsIDB4ZTksIDB4MGEsCisrCTB4OTEsIDB4OTIsIDB4OWYsIDB4YWUsIDB4MmQsIDB4YWQsIDB4ZjQsIDB4ZTYsCisrCTB4MWEsIDB4ZTIsIDB4YTQsIDB4ZWUsIDB4NDcsIDB4MTUsIDB4YmYsIDB4ODMsCisrCTB4NmUsIDB4ZDcsIDB4NzIsIDB4MTIsIDB4M2IsIDB4MmQsIDB4MjQsIDB4ZTksCisrCTB4YjIsIDB4NTUsIDB4Y2IsIDB4M2MsIDB4MTAsIDB4ZjAsIDB4MjQsIDB4OGEsCisrCTB4NGEsIDB4MDIsIDB4ZWEsIDB4OTAsIDB4MjUsIDB4ZjAsIDB4YjQsIDB4NzksCisrCTB4M2EsIDB4ZWYsIDB4NmUsIDB4ZjUsIDB4NTIsIDB4ZGYsIDB4YjAsIDB4MGEsCisrCTB4Y2QsIDB4MjQsIDB4MWMsIDB4ZDMsIDB4MmUsIDB4MjIsIDB4NzQsIDB4ZWEsCisrCTB4MjEsIDB4NmYsIDB4ZTksIDB4YmQsIDB4YzgsIDB4M2UsIDB4MzYsIDB4NWIsCisrCTB4MTksIDB4ZjEsIDB4Y2EsIDB4OTksIDB4MGEsIDB4YjQsIDB4YTcsIDB4NTIsCisrCTB4MWEsIDB4NGUsIDB4ZjIsIDB4YWQsIDB4OGQsIDB4NTYsIDB4ODUsIDB4YmIsCisrCTB4NjQsIDB4ODksIDB4YmEsIDB4MjYsIDB4ZjksIDB4YzcsIDB4ZTEsIDB4ODksCisrCTB4MTksIDB4MjIsIDB4NzcsIDB4YzMsIDB4YTgsIDB4ZmMsIDB4ZmYsIDB4YWQsCisrCTB4ZmUsIDB4YjksIDB4NDgsIDB4YWUsIDB4MTIsIDB4MzAsIDB4OWYsIDB4MTksCisrCTB4ZmIsIDB4MWIsIDB4ZWYsIDB4MTQsIDB4ODcsIDB4OGEsIDB4NzgsIDB4NzEsCisrCTB4ZjMsIDB4ZjQsIDB4YjcsIDB4MDAsIDB4OWMsIDB4MWQsIDB4YjUsIDB4M2QsCisrCTB4NDksIDB4MDAsIDB4MGMsIDB4MDYsIDB4ZDQsIDB4NTAsIDB4ZjksIDB4NTQsCisrCTB4NDUsIDB4YjIsIDB4NWIsIDB4NDMsIDB4ZGIsIDB4NmQsIDB4Y2YsIDB4MWEsCisrCTB4ZTksIDB4N2EsIDB4N2EsIDB4Y2YsIDB4ZmMsIDB4OGEsIDB4NGUsIDB4NGQsCisrCTB4MGIsIDB4MDcsIDB4NjMsIDB4MjgsIDB4ZDgsIDB4ZTcsIDB4MDgsIDB4OTUsCisrCTB4ZGYsIDB4YTYsIDB4NzIsIDB4OTMsIDB4MmUsIDB4YmIsIDB4YTAsIDB4NDIsCisrCTB4ODksIDB4MTYsIDB4ZjEsIDB4ZDksIDB4MGMsIDB4ZjksIDB4YTEsIDB4MTYsCisrCTB4ZmQsIDB4ZDksIDB4MDMsIDB4YjQsIDB4M2IsIDB4OGEsIDB4ZjUsIDB4ZjYsCisrCTB4ZTcsIDB4NmIsIDB4MmUsIDB4OGUsIDB4NGMsIDB4M2QsIDB4ZTIsIDB4YWYsCisrCTB4MDgsIDB4NDUsIDB4MDMsIDB4ZmYsIDB4MDksIDB4YjYsIDB4ZWIsIDB4MmQsCisrCTB4YzYsIDB4MWIsIDB4ODgsIDB4OTQsIDB4YWMsIDB4M2UsIDB4ZjEsIDB4OWYsCisrCTB4MGUsIDB4MGUsIDB4MmIsIDB4ZDUsIDB4MDAsIDB4NGQsIDB4M2YsIDB4M2IsCisrCTB4NTMsIDB4YWUsIDB4YWYsIDB4MWMsIDB4MzMsIDB4NWYsIDB4NTUsIDB4NmUsCisrCTB4OGQsIDB4YWYsIDB4MDUsIDB4N2EsIDB4MTAsIDB4MzQsIDB4YzksIDB4ZjQsCisrCTB4NjYsIDB4Y2IsIDB4NjIsIDB4MTIsIDB4YTYsIDB4ZWUsIDB4ZTgsIDB4MWMsCisrCTB4NWQsIDB4MTIsIDB4ODYsIDB4ZGIsIDB4NmYsIDB4MWMsIDB4MzMsIDB4YzQsCisrCTB4MWMsIDB4ZGEsIDB4ODIsIDB4MmQsIDB4M2IsIDB4NTksIDB4ZmUsIDB4YjEsCisrCTB4YTQsIDB4NTksIDB4NDEsIDB4ODYsIDB4ZDAsIDB4ZWYsIDB4YWUsIDB4ZmIsCisrCTB4ZGEsIDB4NmQsIDB4MTEsIDB4YjgsIDB4Y2EsIDB4ZTksIDB4NmUsIDB4ZmYsCisrCTB4ZjcsIDB4YTksIDB4ZDksIDB4NzAsIDB4MzAsIDB4ZmMsIDB4NTMsIDB4ZTIsCisrCTB4ZDcsIDB4YTIsIDB4NGUsIDB4YzcsIDB4OTEsIDB4ZDksIDB4MDcsIDB4MDYsCisrCTB4YWEsIDB4ZGQsIDB4YjAsIDB4NTksIDB4MjgsIDB4MWQsIDB4MDAsIDB4NjYsCisrCTB4YzUsIDB4NTQsIDB4YzIsIDB4ZmMsIDB4MDYsIDB4ZGEsIDB4MDUsIDB4OTAsCisrCTB4NTIsIDB4MWQsIDB4MzcsIDB4NjYsIDB4ZWUsIDB4ZjAsIDB4YjIsIDB4NTUsCisrCTB4OGEsIDB4NWQsIDB4ZDIsIDB4MzgsIDB4ODYsIDB4OTQsIDB4OWIsIDB4ZmMsCisrCTB4MTAsIDB4NGMsIDB4YTEsIDB4YjksIDB4NjQsIDB4M2UsIDB4NDQsIDB4YjgsCisrCTB4NWYsIDB4YjAsIDB4MGMsIDB4ZWMsIDB4ZTAsIDB4YzksIDB4ZTUsIDB4NjIsCisrCTB4NzUsIDB4M2YsIDB4MDksIDB4ZDUsIDB4ZjUsIDB4ZDksIDB4MjYsIDB4YmEsCisrCTB4OWUsIDB4ZDIsIDB4ZjQsIDB4YjksIDB4NDgsIDB4MGEsIDB4YmMsIDB4YTIsCisrCTB4ZDYsIDB4N2MsIDB4MzYsIDB4MTEsIDB4N2QsIDB4MjYsIDB4ODEsIDB4ODksCisrCTB4Y2YsIDB4YTQsIDB4YWQsIDB4NzMsIDB4MGUsIDB4ZWUsIDB4Y2MsIDB4MDYsCisrCTB4YTksIDB4ZGIsIDB4YjEsIDB4ZmQsIDB4ZmIsIDB4MDksIDB4N2YsIDB4OTAsCisrCTB4NDIsIDB4MzcsIDB4MmYsIDB4ZTEsIDB4OWMsIDB4MGYsIDB4NmYsIDB4Y2YsCisrCTB4NDMsIDB4YjUsIDB4ZDksIDB4OTAsIDB4ZTEsIDB4ODUsIDB4ZjUsIDB4YTgsCisrCTB4YWUKKyt9OworK3N0YXRpYyBjb25zdCB1OCBkZWNfb3V0cHV0MDA5W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZTYsIDB4YzMsIDB4ZGIsIDB4NjMsIDB4NTUsIDB4MTUsIDB4ZTMsIDB4NWIsCisrCTB4YjcsIDB4NGIsIDB4MjcsIDB4OGIsIDB4NWEsIDB4ZGQsIDB4YzIsIDB4ZTgsCisrCTB4M2EsIDB4NmIsIDB4ZDcsIDB4ODEsIDB4OTYsIDB4MzUsIDB4OTcsIDB4Y2EsCisrCTB4ZDcsIDB4NjgsIDB4ZTgsIDB4ZWYsIDB4Y2UsIDB4YWIsIDB4ZGEsIDB4MDksCisrCTB4NmUsIDB4ZDYsIDB4OGUsIDB4Y2IsIDB4NTUsIDB4YjUsIDB4ZTEsIDB4ZTUsCisrCTB4NTcsIDB4ZmQsIDB4YzQsIDB4ZTMsIDB4ZTAsIDB4MTgsIDB4NGYsIDB4ODUsCisrCTB4ZjUsIDB4M2YsIDB4N2UsIDB4NGIsIDB4ODgsIDB4YzksIDB4NTIsIDB4NDQsCisrCTB4MGYsIDB4ZWEsIDB4YWYsIDB4MWYsIDB4NzEsIDB4NDgsIDB4OWYsIDB4OTcsCisrCTB4NmQsIDB4YjksIDB4NmYsIDB4MDAsIDB4YTYsIDB4ZGUsIDB4MmIsIDB4NzcsCisrCTB4OGIsIDB4MTUsIDB4YWQsIDB4MTAsIDB4YTAsIDB4MmIsIDB4N2IsIDB4NDEsCisrCTB4OTAsIDB4MDMsIDB4MmQsIDB4NjksIDB4YWUsIDB4Y2MsIDB4NzcsIDB4N2MsCisrCTB4YTUsIDB4OWQsIDB4MjksIDB4MjIsIDB4YzIsIDB4ZWEsIDB4YjQsIDB4MDAsCisrCTB4MWEsIDB4ZDIsIDB4N2EsIDB4OTgsIDB4OGEsIDB4ZjksIDB4ZjcsIDB4ODIsCisrCTB4YjAsIDB4YWIsIDB4ZDgsIDB4YTYsIDB4OTQsIDB4OGQsIDB4NTgsIDB4MmYsCisrCTB4MDEsIDB4OWUsIDB4MDAsIDB4MjAsIDB4ZmMsIDB4NDksIDB4ZGMsIDB4MGUsCisrCTB4MDMsIDB4ZTgsIDB4NDUsIDB4MTAsIDB4ZDYsIDB4YTgsIDB4ZGEsIDB4NTUsCisrCTB4MTAsIDB4OWEsIDB4ZGYsIDB4NjcsIDB4MjIsIDB4OGIsIDB4NDMsIDB4YWIsCisrCTB4MDAsIDB4YmIsIDB4MDIsIDB4YzgsIDB4ZGQsIDB4N2IsIDB4OTcsIDB4MTcsCisrCTB4ZDcsIDB4MWQsIDB4OWUsIDB4MDIsIDB4NWUsIDB4NDgsIDB4ZGUsIDB4OGUsCisrCTB4Y2YsIDB4OTksIDB4MDcsIDB4OTUsIDB4OTIsIDB4M2MsIDB4NWYsIDB4OWYsCisrCTB4YzUsIDB4OGEsIDB4YzAsIDB4MjMsIDB4YWEsIDB4ZDUsIDB4OGMsIDB4ODIsCisrCTB4NmUsIDB4MTYsIDB4OTIsIDB4YjEsIDB4MTIsIDB4MTcsIDB4MDcsIDB4YzMsCisrCTB4ZmIsIDB4MzYsIDB4ZjUsIDB4NmMsIDB4MzUsIDB4ZDYsIDB4MDYsIDB4MWYsCisrCTB4OWYsIDB4YTcsIDB4OTQsIDB4YTIsIDB4MzgsIDB4NjMsIDB4OWMsIDB4YjAsCisrCTB4NzEsIDB4YjMsIDB4YTUsIDB4ZDIsIDB4ZDgsIDB4YmEsIDB4OWYsIDB4MDgsCisrCTB4MDEsIDB4YjMsIDB4ZmYsIDB4MDQsIDB4OTcsIDB4NzMsIDB4NDUsIDB4MWIsCisrCTB4ZDUsIDB4YTksIDB4OWMsIDB4ODAsIDB4YWYsIDB4MDQsIDB4OWEsIDB4ODUsCisrCTB4ZGIsIDB4MzIsIDB4NWIsIDB4NWQsIDB4MWEsIDB4YzEsIDB4MzYsIDB4MjgsCisrCTB4MTAsIDB4NzksIDB4ZjEsIDB4M2MsIDB4YmYsIDB4MWEsIDB4NDEsIDB4NWMsCisrCTB4NGUsIDB4ZGYsIDB4YjIsIDB4N2MsIDB4NzksIDB4M2IsIDB4N2EsIDB4NjIsCisrCTB4M2QsIDB4NGIsIDB4YzksIDB4OWIsIDB4MmEsIDB4MmUsIDB4N2MsIDB4YTIsCisrCTB4YjEsIDB4MTEsIDB4OTgsIDB4YTcsIDB4MzQsIDB4MWEsIDB4MDAsIDB4ZjMsCisrCTB4ZDEsIDB4YmMsIDB4MTgsIDB4MjIsIDB4YmEsIDB4MDIsIDB4NTYsIDB4NjIsCisrCTB4MzEsIDB4MTAsIDB4MTEsIDB4NmQsIDB4ZTAsIDB4NTQsIDB4OWQsIDB4NDAsCisrCTB4MWYsIDB4MjYsIDB4ODAsIDB4NDEsIDB4Y2EsIDB4M2YsIDB4NjgsIDB4MGYsCisrCTB4MzIsIDB4MWQsIDB4MGEsIDB4OGUsIDB4NzksIDB4ZDgsIDB4YTQsIDB4MWIsCisrCTB4MjksIDB4MWMsIDB4OTAsIDB4OGUsIDB4YzUsIDB4ZTMsIDB4YjQsIDB4OTEsCisrCTB4MzcsIDB4OWEsIDB4OTcsIDB4ODYsIDB4OTksIDB4ZDUsIDB4MDksIDB4YzUsCisrCTB4YmIsIDB4YTMsIDB4M2YsIDB4MjEsIDB4MjksIDB4ODIsIDB4MTQsIDB4NWMsCisrCTB4YWIsIDB4MjUsIDB4ZmIsIDB4ZjIsIDB4NGYsIDB4NTgsIDB4MjYsIDB4ZDQsCisrCTB4ODMsIDB4YWEsIDB4NjYsIDB4ODksIDB4NjcsIDB4N2UsIDB4YzAsIDB4NDksCisrCTB4ZTEsIDB4MTEsIDB4MTAsIDB4N2YsIDB4N2EsIDB4ZGEsIDB4MjksIDB4MDQsCisrCTB4ZmYsIDB4ZjAsIDB4Y2IsIDB4MDksIDB4N2MsIDB4OWQsIDB4ZmEsIDB4MDMsCisrCTB4NmYsIDB4ODEsIDB4MDksIDB4MzEsIDB4NjAsIDB4ZmIsIDB4MDgsIDB4ZmEsCisrCTB4NzQsIDB4ZDMsIDB4NjQsIDB4NDQsIDB4N2MsIDB4NTUsIDB4ODUsIDB4ZWMsCisrCTB4OWMsIDB4NmUsIDB4MjUsIDB4YjcsIDB4NmMsIDB4YzUsIDB4MzcsIDB4YjYsCisrCTB4ODMsIDB4ODcsIDB4NzIsIDB4OTUsIDB4OGIsIDB4OWQsIDB4ZTEsIDB4NjksCisrCTB4NWMsIDB4MzEsIDB4OTUsIDB4NDIsIDB4YTYsIDB4MmMsIDB4ZDEsIDB4MzYsCisrCTB4NDcsIDB4MWYsIDB4ZWMsIDB4NTQsIDB4YWIsIDB4YTIsIDB4MWMsIDB4ZDgsCisrCTB4MDAsIDB4Y2MsIDB4YmMsIDB4MGQsIDB4NjUsIDB4ZTIsIDB4NjcsIDB4YmYsCisrCTB4YmMsIDB4ZWEsIDB4ZWUsIDB4OWUsIDB4ZTQsIDB4MzYsIDB4OTUsIDB4YmUsCisrCTB4NzMsIDB4ZDksIDB4YTYsIDB4ZDksIDB4MGYsIDB4YTAsIDB4Y2MsIDB4ODIsCisrCTB4NzYsIDB4MjYsIDB4YWQsIDB4NWIsIDB4NTgsIDB4NmMsIDB4NGUsIDB4YWIsCisrCTB4MjksIDB4NjQsIDB4ZDMsIDB4ZDksIDB4YTksIDB4MDgsIDB4OGMsIDB4MWQsCisrCTB4YTEsIDB4NGYsIDB4ODAsIDB4ZDgsIDB4M2YsIDB4OTQsIDB4ZmIsIDB4ZDMsCisrCTB4N2IsIDB4ZmMsIDB4ZDEsIDB4MmIsIDB4YzMsIDB4MjEsIDB4ZWIsIDB4ZTUsCisrCTB4MWMsIDB4ODQsIDB4MjMsIDB4N2YsIDB4NGIsIDB4ZmEsIDB4ZGIsIDB4MzQsCisrCTB4MTgsIDB4YTIsIDB4YzIsIDB4ZTUsIDB4MTMsIDB4ZmUsIDB4NmMsIDB4NDksCisrCTB4ODEsIDB4ZDIsIDB4NzMsIDB4ZTcsIDB4ZTIsIDB4ZDcsIDB4ZTQsIDB4NGYsCisrCTB4NGIsIDB4MDgsIDB4NmUsIDB4YjEsIDB4MTIsIDB4MjIsIDB4MTAsIDB4OWQsCisrCTB4YWMsIDB4NTEsIDB4MWUsIDB4MTcsIDB4ZDksIDB4OGEsIDB4MGIsIDB4NDIsCisrCTB4ODgsIDB4MTYsIDB4ODEsIDB4MzcsIDB4N2MsIDB4NmEsIDB4ZjcsIDB4ZWYsCisrCTB4MmQsIDB4ZTMsIDB4ZDksIDB4ZjgsIDB4NWYsIDB4ZTAsIDB4NTMsIDB4MjcsCisrCTB4NzQsIDB4YjksIDB4ZTIsIDB4ZDYsIDB4MWMsIDB4ODAsIDB4MmMsIDB4NTIsCisrCTB4NjUKKyt9OworK3N0YXRpYyBjb25zdCB1OCBkZWNfYXNzb2MwMDlbXSBfX2luaXRjb25zdCA9IHsKKysJMHg1YSwgMHgyNywgMHhmZiwgMHhlYiwgMHhkZiwgMHg4NCwgMHhiMiwgMHg5ZSwKKysJMHhlZgorK307Cisrc3RhdGljIGNvbnN0IHU4IGRlY19ub25jZTAwOVtdIF9faW5pdGNvbnN0ID0geworKwkweGVmLCAweDJkLCAweDYzLCAweGVlLCAweDZiLCAweDgwLCAweDhiLCAweDc4CisrfTsKKytzdGF0aWMgY29uc3QgdTggZGVjX2tleTAwOVtdIF9faW5pdGNvbnN0ID0geworKwkweGVhLCAweGJjLCAweDU2LCAweDk5LCAweGUzLCAweDUwLCAweGZmLCAweGM1LAorKwkweGNjLCAweDFhLCAweGQ3LCAweGMxLCAweDU3LCAweDcyLCAweGVhLCAweDg2LAorKwkweDViLCAweDg5LCAweDg4LCAweDYxLCAweDNkLCAweDJmLCAweDliLCAweGIyLAorKwkweGU3LCAweDljLCAweGVjLCAweDc0LCAweDZlLCAweDNlLCAweGY0LCAweDNiCisrfTsKKysKKytzdGF0aWMgY29uc3QgdTggZGVjX2lucHV0MDEwW10gX19pbml0Y29uc3QgPSB7CisrCTB4ZTUsIDB4MjYsIDB4YTQsIDB4M2QsIDB4YmQsIDB4MzMsIDB4ZDAsIDB4NGIsCisrCTB4NmYsIDB4MDUsIDB4YTcsIDB4NmUsIDB4MTIsIDB4N2EsIDB4ZDIsIDB4NzQsCisrCTB4YTYsIDB4ZGQsIDB4YmQsIDB4OTUsIDB4ZWIsIDB4ZjksIDB4YTQsIDB4ZjEsCisrCTB4NTksIDB4OTMsIDB4OTEsIDB4NzAsIDB4ZDksIDB4ZmUsIDB4OWEsIDB4Y2QsCisrCTB4NTMsIDB4MWYsIDB4M2EsIDB4YWIsIDB4YTYsIDB4N2MsIDB4OWYsIDB4YTYsCisrCTB4OWUsIDB4YmQsIDB4OTksIDB4ZDksIDB4YjUsIDB4OTcsIDB4NDQsIDB4ZDUsCisrCTB4MTQsIDB4NDgsIDB4NGQsIDB4OWQsIDB4YzAsIDB4ZDAsIDB4MDUsIDB4OTYsCisrCTB4ZWIsIDB4NGMsIDB4NzgsIDB4NTUsIDB4MDksIDB4MDgsIDB4MDEsIDB4MDIsCisrCTB4MzAsIDB4OTAsIDB4N2IsIDB4OTYsIDB4N2EsIDB4N2IsIDB4NWYsIDB4MzAsCisrCTB4NDEsIDB4MjQsIDB4Y2UsIDB4NjgsIDB4NjEsIDB4NDksIDB4ODYsIDB4NTcsCisrCTB4ODIsIDB4ZGQsIDB4NTMsIDB4MWMsIDB4NTEsIDB4MjgsIDB4MmIsIDB4NTMsCisrCTB4NmUsIDB4MmQsIDB4YzIsIDB4MjAsIDB4NGMsIDB4ZGQsIDB4OGYsIDB4NjUsCisrCTB4MTAsIDB4MjAsIDB4NTAsIDB4ZGQsIDB4OWQsIDB4NTAsIDB4ZTUsIDB4NzEsCisrCTB4NDAsIDB4NTMsIDB4NjksIDB4ZmMsIDB4NzcsIDB4NDgsIDB4MTEsIDB4YjksCisrCTB4ZGUsIDB4YTQsIDB4OGQsIDB4NTgsIDB4ZTQsIDB4YTYsIDB4MWEsIDB4MTgsCisrCTB4NDcsIDB4ODEsIDB4N2UsIDB4ZmMsIDB4ZGQsIDB4ZjYsIDB4ZWYsIDB4Y2UsCisrCTB4MmYsIDB4NDMsIDB4NjgsIDB4ZDYsIDB4MDYsIDB4ZTIsIDB4NzQsIDB4NmEsCisrCTB4YWQsIDB4OTAsIDB4ZjUsIDB4MzcsIDB4ZjMsIDB4M2QsIDB4ODIsIDB4NjksCisrCTB4NDAsIDB4ZTksIDB4NmIsIDB4YTcsIDB4M2QsIDB4YTgsIDB4MWUsIDB4ZDIsCisrCTB4MDIsIDB4N2MsIDB4YjcsIDB4OWIsIDB4ZTQsIDB4ZGEsIDB4OGYsIDB4OTUsCisrCTB4MDYsIDB4YzUsIDB4ZGYsIDB4NzMsIDB4YTMsIDB4MjAsIDB4OWEsIDB4NDksCisrCTB4ZGUsIDB4OWMsIDB4YmMsIDB4ZWUsIDB4MTQsIDB4M2YsIDB4ODEsIDB4NWUsCisrCTB4ZjgsIDB4M2IsIDB4NTksIDB4M2MsIDB4ZTEsIDB4NjgsIDB4MTIsIDB4NWEsCisrCTB4M2EsIDB4NzYsIDB4M2EsIDB4M2YsIDB4ZjcsIDB4ODcsIDB4MzMsIDB4MGEsCisrCTB4MDEsIDB4YjgsIDB4ZDQsIDB4ZWQsIDB4YjYsIDB4YmUsIDB4OTQsIDB4NWUsCisrCTB4NzAsIDB4NDAsIDB4NTYsIDB4NjcsIDB4MWYsIDB4NTAsIDB4NDQsIDB4MTksCisrCTB4Y2UsIDB4ODIsIDB4NzAsIDB4MTAsIDB4ODcsIDB4MTMsIDB4MjAsIDB4MGIsCisrCTB4NGMsIDB4NWEsIDB4YjYsIDB4ZjYsIDB4YTcsIDB4YWUsIDB4ODEsIDB4NzUsCisrCTB4MDEsIDB4ODEsIDB4ZTYsIDB4NGIsIDB4NTcsIDB4N2MsIDB4ZGQsIDB4NmQsCisrCTB4ZjgsIDB4MWMsIDB4MjksIDB4MzIsIDB4ZjcsIDB4ZGEsIDB4M2MsIDB4MmQsCisrCTB4ZjgsIDB4OWIsIDB4MjUsIDB4NmUsIDB4MDAsIDB4YjQsIDB4ZjcsIDB4MmYsCisrCTB4ZjcsIDB4MDQsIDB4ZjcsIDB4YTEsIDB4NTYsIDB4YWMsIDB4NGYsIDB4MWEsCisrCTB4NjQsIDB4YjgsIDB4NDcsIDB4NTUsIDB4MTgsIDB4N2IsIDB4MDcsIDB4NGQsCisrCTB4YmQsIDB4NDcsIDB4MjQsIDB4ODAsIDB4NWQsIDB4YTIsIDB4NzAsIDB4YzUsCisrCTB4ZGQsIDB4OGUsIDB4ODIsIDB4ZDQsIDB4ZWIsIDB4ZWMsIDB4YjIsIDB4MGMsCisrCTB4MzksIDB4ZDIsIDB4OTcsIDB4YzEsIDB4Y2IsIDB4ZWIsIDB4ZjQsIDB4NzcsCisrCTB4NTksIDB4YjQsIDB4ODcsIDB4ZWYsIDB4Y2IsIDB4NDMsIDB4MmQsIDB4NDYsCisrCTB4NTQsIDB4ZDEsIDB4YTcsIDB4ZDcsIDB4MTUsIDB4OTksIDB4MGEsIDB4NDMsCisrCTB4YTEsIDB4ZTAsIDB4OTksIDB4MzMsIDB4NzEsIDB4YzEsIDB4ZWQsIDB4ZmUsCisrCTB4NzIsIDB4NDYsIDB4MzMsIDB4OGUsIDB4OTEsIDB4MDgsIDB4OWYsIDB4YzgsCisrCTB4MmUsIDB4Y2EsIDB4ZmEsIDB4ZGMsIDB4NTksIDB4ZDUsIDB4YzMsIDB4NzYsCisrCTB4ODQsIDB4OWYsIDB4YTMsIDB4MzcsIDB4NjgsIDB4YzMsIDB4ZjAsIDB4NDcsCisrCTB4MmMsIDB4NjgsIDB4ZGIsIDB4NWUsIDB4YzMsIDB4NDksIDB4NGMsIDB4ZTgsCisrCTB4OTIsIDB4ODUsIDB4ZTIsIDB4MjMsIDB4ZDMsIDB4M2YsIDB4YWQsIDB4MzIsCisrCTB4ZTUsIDB4MmIsIDB4ODIsIDB4ZDcsIDB4OGYsIDB4OTksIDB4MGEsIDB4NTksCisrCTB4NWMsIDB4NDUsIDB4ZDksIDB4YjQsIDB4NTEsIDB4NTIsIDB4YzIsIDB4YWUsCisrCTB4YmYsIDB4ODAsIDB4Y2YsIDB4YzksIDB4YzksIDB4NTEsIDB4MjQsIDB4MmEsCisrCTB4M2IsIDB4M2EsIDB4NGQsIDB4YWUsIDB4ZWIsIDB4YmQsIDB4MjIsIDB4YzMsCisrCTB4MGUsIDB4MGYsIDB4NTksIDB4MjUsIDB4OTIsIDB4MTcsIDB4ZTksIDB4NzQsCisrCTB4YzcsIDB4OGIsIDB4NzAsIDB4NzAsIDB4MzYsIDB4NTUsIDB4OTUsIDB4NzUsCisrCTB4NGIsIDB4YWQsIDB4NjEsIDB4MmIsIDB4MDksIDB4YmMsIDB4ODIsIDB4ZjIsCisrCTB4NmUsIDB4OTQsIDB4NDMsIDB4YWUsIDB4YzMsIDB4ZDUsIDB4Y2QsIDB4OGUsCisrCTB4ZmUsIDB4NWIsIDB4OWEsIDB4ODgsIDB4NDMsIDB4MDEsIDB4NzUsIDB4YjIsCisrCTB4MjMsIDB4MDksIDB4ZjcsIDB4ODksIDB4ODMsIDB4ZTcsIDB4ZmEsIDB4ZjksCisrCTB4YjQsIDB4OWIsIDB4ZjgsIDB4ZWYsIDB4YmQsIDB4MWMsIDB4OTIsIDB4YzEsCisrCTB4ZGEsIDB4N2UsIDB4ZmUsIDB4MDUsIDB4YmEsIDB4NWEsIDB4Y2QsIDB4MDcsCisrCTB4NmEsIDB4NzgsIDB4OWUsIDB4NWQsIDB4ZmIsIDB4MTEsIDB4MmYsIDB4NzksCisrCTB4MzgsIDB4YjYsIDB4YzIsIDB4NWIsIDB4NmIsIDB4NTEsIDB4YjQsIDB4NzEsCisrCTB4ZGQsIDB4ZjcsIDB4MmEsIDB4ZTQsIDB4ZjQsIDB4NzIsIDB4NzYsIDB4YWQsCisrCTB4YzIsIDB4ZGQsIDB4NjQsIDB4NWQsIDB4NzksIDB4YjYsIDB4ZjUsIDB4N2EsCisrCTB4NzcsIDB4MjAsIDB4MDUsIDB4M2QsIDB4MzAsIDB4MDYsIDB4ZDQsIDB4NGMsCisrCTB4MGEsIDB4MmMsIDB4OTgsIDB4NWEsIDB4YjksIDB4ZDQsIDB4OTgsIDB4YTksCisrCTB4M2YsIDB4YzYsIDB4MTIsIDB4ZWEsIDB4M2IsIDB4NGIsIDB4YzUsIDB4NzksCisrCTB4NjQsIDB4NjMsIDB4NmIsIDB4MDksIDB4NTQsIDB4M2IsIDB4MTQsIDB4MjcsCisrCTB4YmEsIDB4OTksIDB4ODAsIDB4YzgsIDB4NzIsIDB4YTgsIDB4MTIsIDB4OTAsCisrCTB4MjksIDB4YmEsIDB4NDAsIDB4NTQsIDB4OTcsIDB4MmIsIDB4N2IsIDB4ZmUsCisrCTB4ZWIsIDB4Y2QsIDB4MDEsIDB4MDUsIDB4NDQsIDB4NzIsIDB4ZGIsIDB4OTksCisrCTB4ZTQsIDB4NjEsIDB4YzksIDB4NjksIDB4ZDYsIDB4YjksIDB4MjgsIDB4ZDEsCisrCTB4MDUsIDB4M2UsIDB4ZjksIDB4MGIsIDB4NDksIDB4MGEsIDB4NDksIDB4ZTksCisrCTB4OGQsIDB4MGUsIDB4YTcsIDB4NGEsIDB4MGYsIDB4YWYsIDB4MzIsIDB4ZDAsCisrCTB4ZTAsIDB4YjIsIDB4M2EsIDB4NTUsIDB4NTgsIDB4ZmUsIDB4NWMsIDB4MjgsCisrCTB4NzAsIDB4NTEsIDB4MjMsIDB4YjAsIDB4N2IsIDB4NmEsIDB4NWYsIDB4MWUsCisrCTB4YjgsIDB4MTcsIDB4ZDcsIDB4OTQsIDB4MTUsIDB4OGYsIDB4ZWUsIDB4MjAsCisrCTB4YzcsIDB4NDIsIDB4MjUsIDB4M2UsIDB4OWEsIDB4MTQsIDB4ZDcsIDB4NjAsCisrCTB4NzIsIDB4MzksIDB4NDcsIDB4NDgsIDB4YTksIDB4ZmUsIDB4ZGQsIDB4NDcsCisrCTB4MGEsIDB4YjEsIDB4ZTYsIDB4NjAsIDB4MjgsIDB4OGMsIDB4MTEsIDB4NjgsCisrCTB4ZTEsIDB4ZmYsIDB4ZDcsIDB4Y2UsIDB4YzgsIDB4YmUsIDB4YjMsIDB4ZmUsCisrCTB4MjcsIDB4MzAsIDB4MDksIDB4NzAsIDB4ZDcsIDB4ZmEsIDB4MDIsIDB4MzMsCisrCTB4M2EsIDB4NjEsIDB4MmUsIDB4YzcsIDB4ZmYsIDB4YTQsIDB4MmEsIDB4YTgsCisrCTB4NmUsIDB4YjQsIDB4NzksIDB4MzUsIDB4NmQsIDB4NGMsIDB4MWUsIDB4MzgsCisrCTB4ZjgsIDB4ZWUsIDB4ZDQsIDB4ODQsIDB4NGUsIDB4NmUsIDB4MjgsIDB4YTcsCisrCTB4Y2UsIDB4YzgsIDB4YzEsIDB4Y2YsIDB4ODAsIDB4MDUsIDB4ZjMsIDB4MDQsCisrCTB4ZWYsIDB4YzgsIDB4MTgsIDB4MjgsIDB4MmUsIDB4OGQsIDB4NWUsIDB4MGMsCisrCTB4ZGYsIDB4YjgsIDB4NWYsIDB4OTYsIDB4ZTgsIDB4YzYsIDB4OWMsIDB4MmYsCisrCTB4ZTUsIDB4YTYsIDB4NDQsIDB4ZDcsIDB4ZTcsIDB4OTksIDB4NDQsIDB4MGMsCisrCTB4ZWMsIDB4ZDcsIDB4MDUsIDB4NjAsIDB4OTcsIDB4YmIsIDB4NzQsIDB4NzcsCisrCTB4NTgsIDB4ZDUsIDB4YmIsIDB4NDgsIDB4ZGUsIDB4NWEsIDB4YjIsIDB4NTQsCisrCTB4N2YsIDB4MGUsIDB4NDYsIDB4NzAsIDB4NmEsIDB4NmYsIDB4NzgsIDB4YTUsCisrCTB4MDgsIDB4ODksIDB4MDUsIDB4NGUsIDB4N2UsIDB4YTAsIDB4NjksIDB4YjQsCisrCTB4NDAsIDB4NjAsIDB4NTUsIDB4NzcsIDB4NzUsIDB4OWIsIDB4MTksIDB4ZjIsCisrCTB4ZDUsIDB4MTMsIDB4ODAsIDB4NzcsIDB4ZjksIDB4NGIsIDB4M2YsIDB4MWUsCisrCTB4ZWUsIDB4ZTYsIDB4NzYsIDB4ODQsIDB4N2IsIDB4OGMsIDB4ZTUsIDB4MjcsCisrCTB4YTgsIDB4MGEsIDB4OTEsIDB4MDEsIDB4NjgsIDB4NzEsIDB4OGEsIDB4M2YsCisrCTB4MDYsIDB4YWIsIDB4ZjYsIDB4YTksIDB4YTUsIDB4ZTYsIDB4NzIsIDB4OTIsCisrCTB4ZTQsIDB4NjcsIDB4ZTIsIDB4YTIsIDB4NDYsIDB4MzUsIDB4ODQsIDB4NTUsCisrCTB4N2QsIDB4Y2EsIDB4YTgsIDB4ODUsIDB4ZDAsIDB4ZjEsIDB4M2YsIDB4YmUsCisrCTB4ZDcsIDB4MzQsIDB4NjQsIDB4ZmMsIDB4YWUsIDB4ZTMsIDB4ZTQsIDB4MDQsCisrCTB4OWYsIDB4NjYsIDB4MDIsIDB4YjksIDB4ODgsIDB4MTAsIDB4ZDksIDB4YzQsCisrCTB4NGMsIDB4MzEsIDB4NDMsIDB4N2EsIDB4OTMsIDB4ZTIsIDB4OWIsIDB4NTYsCisrCTB4NDMsIDB4ODQsIDB4ZGMsIDB4ZGMsIDB4ZGUsIDB4MWQsIDB4YTQsIDB4MDIsCisrCTB4MGUsIDB4YzIsIDB4ZWYsIDB4YzMsIDB4ZjgsIDB4NzgsIDB4ZDEsIDB4YjIsCisrCTB4NmIsIDB4NjMsIDB4MTgsIDB4YzksIDB4YTksIDB4ZTUsIDB4NzIsIDB4ZDgsCisrCTB4ZjMsIDB4YjksIDB4ZDEsIDB4OGEsIDB4YzcsIDB4MWEsIDB4MDIsIDB4MjcsCisrCTB4MjAsIDB4NzcsIDB4MTAsIDB4ZTUsIDB4YzgsIDB4ZDQsIDB4NGEsIDB4NDcsCisrCTB4ZTUsIDB4ZGYsIDB4NWYsIDB4MDEsIDB4YWEsIDB4YjAsIDB4ZDQsIDB4MTAsCisrCTB4YmIsIDB4NjksIDB4ZTMsIDB4MzYsIDB4YzgsIDB4ZTEsIDB4M2QsIDB4NDMsCisrCTB4ZmIsIDB4ODYsIDB4Y2QsIDB4Y2MsIDB4YmYsIDB4ZjQsIDB4ODgsIDB4ZTAsCisrCTB4MjAsIDB4Y2EsIDB4YjcsIDB4MWIsIDB4ZjEsIDB4MmYsIDB4NWMsIDB4ZWUsCisrCTB4ZDQsIDB4ZDMsIDB4YTMsIDB4Y2MsIDB4YTQsIDB4MWUsIDB4MWMsIDB4NDcsCisrCTB4ZmIsIDB4YmYsIDB4ZmMsIDB4YTIsIDB4NDEsIDB4NTUsIDB4OWQsIDB4ZjYsCisrCTB4NWEsIDB4NWUsIDB4NjUsIDB4MzIsIDB4MzQsIDB4N2IsIDB4NTIsIDB4OGQsCisrCTB4ZDUsIDB4ZDAsIDB4MjAsIDB4NjAsIDB4MDMsIDB4YWIsIDB4M2YsIDB4OGMsCisrCTB4ZDQsIDB4MjEsIDB4ZWEsIDB4MmEsIDB4ZDksIDB4YzQsIDB4ZDAsIDB4ZDMsCisrCTB4NjUsIDB4ZDgsIDB4N2EsIDB4MTMsIDB4MjgsIDB4NjIsIDB4MzIsIDB4NGIsCisrCTB4MmMsIDB4ODcsIDB4OTMsIDB4YTgsIDB4YjQsIDB4NTIsIDB4NDUsIDB4MDksCisrCTB4NDQsIDB4ZWMsIDB4ZWMsIDB4YzMsIDB4MTcsIDB4ZGIsIDB4OWEsIDB4NGQsCisrCTB4NWMsIDB4YTksIDB4MTEsIDB4ZDQsIDB4N2QsIDB4YWYsIDB4OWUsIDB4ZjEsCisrCTB4MmQsIDB4YjIsIDB4NjYsIDB4YzUsIDB4MWQsIDB4ZWQsIDB4YjcsIDB4Y2QsCisrCTB4MGIsIDB4MjUsIDB4NWUsIDB4MzAsIDB4NDcsIDB4M2YsIDB4NDAsIDB4ZjQsCisrCTB4YTEsIDB4YTAsIDB4MDAsIDB4OTQsIDB4MTAsIDB4YzUsIDB4NmEsIDB4NjMsCisrCTB4MWEsIDB4ZDUsIDB4ODgsIDB4OTIsIDB4OGUsIDB4ODIsIDB4MzksIDB4ODcsCisrCTB4M2MsIDB4NzgsIDB4NjUsIDB4NTgsIDB4NDIsIDB4NzUsIDB4NWIsIDB4ZGQsCisrCTB4NzcsIDB4M2UsIDB4MDksIDB4NGUsIDB4NzYsIDB4NWIsIDB4ZTYsIDB4MGUsCisrCTB4NGQsIDB4MzgsIDB4YjIsIDB4YzAsIDB4YjgsIDB4OTUsIDB4MDEsIDB4N2EsCisrCTB4MTAsIDB4ZTAsIDB4ZmIsIDB4MDcsIDB4ZjIsIDB4YWIsIDB4MmQsIDB4OGMsCisrCTB4MzIsIDB4ZWQsIDB4MmIsIDB4YzAsIDB4NDYsIDB4YzIsIDB4ZjUsIDB4MzgsCisrCTB4ODMsIDB4ZjAsIDB4MTcsIDB4ZWMsIDB4YzEsIDB4MjAsIDB4NmEsIDB4OWEsCisrCTB4MGIsIDB4MDAsIDB4YTAsIDB4OTgsIDB4MjIsIDB4NTAsIDB4MjMsIDB4ZDUsCisrCTB4ODAsIDB4NmIsIDB4ZjYsIDB4MWYsIDB4YzMsIDB4Y2MsIDB4OTcsIDB4YzksCisrCTB4MjQsIDB4OWYsIDB4ZjMsIDB4YWYsIDB4NDMsIDB4MTQsIDB4ZDUsIDB4YTAKKyt9OworK3N0YXRpYyBjb25zdCB1OCBkZWNfb3V0cHV0MDEwW10gX19pbml0Y29uc3QgPSB7CisrCTB4NDIsIDB4OTMsIDB4ZTQsIDB4ZWIsIDB4OTcsIDB4YjAsIDB4NTcsIDB4YmYsCisrCTB4MWEsIDB4OGIsIDB4MWYsIDB4ZTQsIDB4NWYsIDB4MzYsIDB4MjAsIDB4M2MsCisrCTB4ZWYsIDB4MGEsIDB4YTksIDB4NDgsIDB4NWYsIDB4NWYsIDB4MzcsIDB4MjIsCisrCTB4M2EsIDB4ZGUsIDB4ZTMsIDB4YWUsIDB4YmUsIDB4YWQsIDB4MDcsIDB4Y2MsCisrCTB4YjEsIDB4ZjYsIDB4ZjUsIDB4ZjksIDB4NTYsIDB4ZGQsIDB4ZTcsIDB4MTYsCisrCTB4MWUsIDB4N2YsIDB4ZGYsIDB4N2EsIDB4OWUsIDB4NzUsIDB4YjcsIDB4YzcsCisrCTB4YmUsIDB4YmUsIDB4OGEsIDB4MzYsIDB4MDQsIDB4YzAsIDB4MTAsIDB4ZjQsCisrCTB4OTUsIDB4MjAsIDB4MDMsIDB4ZWMsIDB4ZGMsIDB4MDUsIDB4YTEsIDB4N2QsCisrCTB4YzQsIDB4YTksIDB4MmMsIDB4ODIsIDB4ZDAsIDB4YmMsIDB4OGIsIDB4YzUsCisrCTB4YzcsIDB4NDUsIDB4NTAsIDB4ZjYsIDB4YTIsIDB4MWEsIDB4YjUsIDB4NDYsCisrCTB4M2IsIDB4NzMsIDB4MDIsIDB4YTYsIDB4ODMsIDB4NGIsIDB4NzMsIDB4ODIsCisrCTB4NTgsIDB4NWUsIDB4M2IsIDB4NjUsIDB4MmYsIDB4MGUsIDB4ZmQsIDB4MmIsCisrCTB4NTksIDB4MTYsIDB4Y2UsIDB4YTEsIDB4NjAsIDB4OWMsIDB4ZTgsIDB4M2EsCisrCTB4OTksIDB4ZWQsIDB4OGQsIDB4NWEsIDB4Y2YsIDB4ZjYsIDB4ODMsIDB4YWYsCisrCTB4YmEsIDB4ZDcsIDB4NzMsIDB4NzMsIDB4NDAsIDB4OTcsIDB4M2QsIDB4Y2EsCisrCTB4ZWYsIDB4MDcsIDB4NTcsIDB4ZTYsIDB4ZDksIDB4NzAsIDB4MGUsIDB4OTUsCisrCTB4YWUsIDB4YTYsIDB4OGQsIDB4MDQsIDB4Y2MsIDB4ZWUsIDB4ZjcsIDB4MDksCisrCTB4MzEsIDB4NzcsIDB4MTIsIDB4YTMsIDB4MjMsIDB4OTcsIDB4NjIsIDB4YjMsCisrCTB4N2IsIDB4MzIsIDB4ZmIsIDB4ODAsIDB4MTQsIDB4NDgsIDB4ODEsIDB4YzMsCisrCTB4ZTUsIDB4ZWEsIDB4OTEsIDB4MzksIDB4NTIsIDB4ODEsIDB4YTIsIDB4NGYsCisrCTB4ZTQsIDB4YjMsIDB4MDksIDB4ZmYsIDB4ZGUsIDB4NWUsIDB4ZTksIDB4NTgsCisrCTB4ODQsIDB4NmUsIDB4ZjksIDB4M2QsIDB4ZGYsIDB4MjUsIDB4ZWEsIDB4YWQsCisrCTB4YWUsIDB4ZTYsIDB4OWEsIDB4ZDEsIDB4ODksIDB4NTUsIDB4ZDMsIDB4ZGUsCisrCTB4NmMsIDB4NTIsIDB4ZGIsIDB4NzAsIDB4ZmUsIDB4MzcsIDB4Y2UsIDB4NDQsCisrCTB4MGEsIDB4YTgsIDB4MjUsIDB4NWYsIDB4OTIsIDB4YzEsIDB4MzMsIDB4NGEsCisrCTB4NGYsIDB4OWIsIDB4NjIsIDB4MzUsIDB4ZmYsIDB4Y2UsIDB4YzAsIDB4YTksCisrCTB4NjAsIDB4Y2UsIDB4NTIsIDB4MDAsIDB4OTcsIDB4NTEsIDB4MzUsIDB4MjYsCisrCTB4MmUsIDB4YjksIDB4MzYsIDB4YTksIDB4ODcsIDB4NmUsIDB4MWUsIDB4Y2MsCisrCTB4OTEsIDB4NzgsIDB4NTMsIDB4OTgsIDB4ODYsIDB4NWIsIDB4OWMsIDB4NzQsCisrCTB4N2QsIDB4ODgsIDB4MzMsIDB4ZTEsIDB4ZGYsIDB4MzcsIDB4NjksIDB4MmIsCisrCTB4YmIsIDB4ZjEsIDB4NGQsIDB4ZjQsIDB4ZDEsIDB4ZjEsIDB4MzksIDB4OTMsCisrCTB4MTcsIDB4NTEsIDB4MTksIDB4ZTMsIDB4MTksIDB4MWUsIDB4NzYsIDB4MzcsCisrCTB4MjUsIDB4ZmIsIDB4MDksIDB4MjcsIDB4NmEsIDB4YWIsIDB4NjcsIDB4NmYsCisrCTB4MTQsIDB4MTIsIDB4NjQsIDB4ZTcsIDB4YzQsIDB4MDcsIDB4ZGYsIDB4NGQsCisrCTB4MTcsIDB4YmIsIDB4NmQsIDB4ZTAsIDB4ZTksIDB4YjksIDB4YWIsIDB4Y2EsCisrCTB4MTAsIDB4NjgsIDB4YWYsIDB4N2UsIDB4YjcsIDB4MzMsIDB4NTQsIDB4NzMsCisrCTB4MDcsIDB4NmUsIDB4ZjcsIDB4ODEsIDB4OTcsIDB4OWMsIDB4MDUsIDB4NmYsCisrCTB4ODQsIDB4NWYsIDB4ZDIsIDB4NDIsIDB4ZmIsIDB4MzgsIDB4Y2YsIDB4ZDEsCisrCTB4MmYsIDB4MTQsIDB4MzAsIDB4ODgsIDB4OTgsIDB4NGQsIDB4NWEsIDB4YTksCisrCTB4NzYsIDB4ZDUsIDB4NGYsIDB4M2UsIDB4NzAsIDB4NmMsIDB4ODUsIDB4NzYsCisrCTB4ZDcsIDB4MDEsIDB4YTAsIDB4MWEsIDB4YzgsIDB4NGUsIDB4YWEsIDB4YWMsCisrCTB4NzgsIDB4ZmUsIDB4NDYsIDB4ZGUsIDB4NmEsIDB4MDUsIDB4NDYsIDB4YTcsCisrCTB4NDMsIDB4MGMsIDB4YjksIDB4ZGUsIDB4YjksIDB4NjgsIDB4ZmIsIDB4Y2UsCisrCTB4NDIsIDB4OTksIDB4MDcsIDB4NGQsIDB4MGIsIDB4M2IsIDB4NWEsIDB4MzAsCisrCTB4MzUsIDB4YTgsIDB4ZjksIDB4M2EsIDB4NzMsIDB4ZWYsIDB4MGYsIDB4ZGIsCisrCTB4MWUsIDB4MTYsIDB4NDIsIDB4YzQsIDB4YmEsIDB4YWUsIDB4NTgsIDB4YWEsCisrCTB4ZjgsIDB4ZTUsIDB4NzUsIDB4MmYsIDB4MWIsIDB4MTUsIDB4NWMsIDB4ZmQsCisrCTB4MGEsIDB4OTcsIDB4ZDAsIDB4ZTQsIDB4MzcsIDB4ODMsIDB4NjEsIDB4NWYsCisrCTB4NDMsIDB4YTYsIDB4YzcsIDB4M2YsIDB4MzgsIDB4NTksIDB4ZTYsIDB4ZWIsCisrCTB4YTMsIDB4OTAsIDB4YzMsIDB4YWEsIDB4YWEsIDB4NWEsIDB4ZDMsIDB4MzQsCisrCTB4ZDQsIDB4MTcsIDB4YzgsIDB4NjUsIDB4M2UsIDB4NTcsIDB4YmMsIDB4NWUsCisrCTB4ZGQsIDB4OWUsIDB4YjcsIDB4ZjAsIDB4MmUsIDB4NWIsIDB4YjIsIDB4MWYsCisrCTB4OGEsIDB4MDgsIDB4MGQsIDB4NDUsIDB4OTEsIDB4MGIsIDB4MjksIDB4NTMsCisrCTB4NGYsIDB4NGMsIDB4NWEsIDB4NzMsIDB4NTYsIDB4ZmUsIDB4YWYsIDB4NDEsCisrCTB4MDEsIDB4MzksIDB4MGEsIDB4MjQsIDB4M2MsIDB4N2UsIDB4YmUsIDB4NGUsCisrCTB4NTMsIDB4ZjMsIDB4ZWIsIDB4MDYsIDB4NjYsIDB4NTEsIDB4MjgsIDB4MWQsCisrCTB4YmQsIDB4NDEsIDB4MGEsIDB4MDEsIDB4YWIsIDB4MTYsIDB4NDcsIDB4MjcsCisrCTB4NDcsIDB4NDcsIDB4ZjcsIDB4Y2IsIDB4NDYsIDB4MGEsIDB4NzAsIDB4OWUsCisrCTB4MDEsIDB4OWMsIDB4MDksIDB4ZTEsIDB4MmEsIDB4MDAsIDB4MWEsIDB4ZDgsCisrCTB4ZDQsIDB4NzksIDB4OWQsIDB4ODAsIDB4MTUsIDB4OGUsIDB4NTMsIDB4MmEsCisrCTB4NjUsIDB4ODMsIDB4NzgsIDB4M2UsIDB4MDMsIDB4MDAsIDB4MDcsIDB4MTIsCisrCTB4MWYsIDB4MzMsIDB4M2UsIDB4N2IsIDB4MTMsIDB4MzcsIDB4ZjEsIDB4YzMsCisrCTB4ZWYsIDB4YjcsIDB4YzEsIDB4MjAsIDB4M2MsIDB4M2UsIDB4NjcsIDB4NjYsCisrCTB4NWQsIDB4ODgsIDB4YTcsIDB4N2QsIDB4MzMsIDB4NTAsIDB4NzcsIDB4YjAsCisrCTB4MjgsIDB4OGUsIDB4ZTcsIDB4MmMsIDB4MmUsIDB4N2EsIDB4ZjQsIDB4M2MsCisrCTB4OGQsIDB4NzQsIDB4ODMsIDB4YWYsIDB4OGUsIDB4ODcsIDB4MGYsIDB4ZTQsCisrCTB4NTAsIDB4ZmYsIDB4ODQsIDB4NWMsIDB4NDcsIDB4MGMsIDB4NmEsIDB4NDksCisrCTB4YmYsIDB4NDIsIDB4ODYsIDB4NzcsIDB4MTUsIDB4NDgsIDB4YTUsIDB4OTAsCisrCTB4NWQsIDB4OTMsIDB4ZDYsIDB4MmEsIDB4MTEsIDB4ZDUsIDB4ZDUsIDB4MTEsCisrCTB4YWEsIDB4Y2UsIDB4ZTcsIDB4NmYsIDB4YTUsIDB4YjAsIDB4MDksIDB4MmMsCisrCTB4OGQsIDB4ZDMsIDB4OTIsIDB4ZjAsIDB4NWEsIDB4MmEsIDB4ZGEsIDB4NWIsCisrCTB4MWUsIDB4ZDUsIDB4OWEsIDB4YzQsIDB4YzQsIDB4ZjMsIDB4NDksIDB4NzQsCisrCTB4NDEsIDB4Y2EsIDB4ZTgsIDB4YzEsIDB4ZjgsIDB4NDQsIDB4ZDYsIDB4M2MsCisrCTB4YWUsIDB4NmMsIDB4MWQsIDB4OWEsIDB4MzAsIDB4MDQsIDB4NGQsIDB4MjcsCisrCTB4MGUsIDB4YjEsIDB4NWYsIDB4NTksIDB4YTIsIDB4MjQsIDB4ZTgsIDB4ZTEsCisrCTB4OTgsIDB4YzUsIDB4NmEsIDB4NGMsIDB4ZmUsIDB4NDEsIDB4ZDIsIDB4MjcsCisrCTB4NDIsIDB4NTIsIDB4ZTEsIDB4ZTksIDB4N2QsIDB4NjIsIDB4ZTQsIDB4ODgsCisrCTB4MGYsIDB4YWQsIDB4YjIsIDB4NzAsIDB4Y2IsIDB4OWQsIDB4NGMsIDB4MjcsCisrCTB4MmUsIDB4NzYsIDB4MWUsIDB4MWEsIDB4NjMsIDB4NjUsIDB4ZjUsIDB4M2IsCisrCTB4ZjgsIDB4NTcsIDB4NjksIDB4ZWIsIDB4NWIsIDB4MzgsIDB4MjYsIDB4MzksCisrCTB4MzMsIDB4MjUsIDB4NDUsIDB4M2UsIDB4OTEsIDB4YjgsIDB4ZDgsIDB4YzcsCisrCTB4ZDUsIDB4NDIsIDB4YzAsIDB4MjIsIDB4MzEsIDB4NzQsIDB4ZjQsIDB4YmMsCisrCTB4MGMsIDB4MjMsIDB4ZjEsIDB4Y2EsIDB4YzEsIDB4OGQsIDB4ZDcsIDB4YmUsCisrCTB4YzksIDB4NjIsIDB4ZTQsIDB4MDgsIDB4MWEsIDB4Y2YsIDB4MzYsIDB4ZDUsCisrCTB4ZmUsIDB4NTUsIDB4MjEsIDB4NTksIDB4OTEsIDB4ODcsIDB4ODcsIDB4ZGYsCisrCTB4MDYsIDB4ZGIsIDB4ZGYsIDB4OTYsIDB4NDUsIDB4NTgsIDB4ZGEsIDB4MDUsCisrCTB4Y2QsIDB4NTAsIDB4NGQsIDB4ZDIsIDB4N2QsIDB4MDUsIDB4MTgsIDB4NzMsCisrCTB4NmEsIDB4OGQsIDB4MTEsIDB4ODUsIDB4YTYsIDB4ODgsIDB4ZTgsIDB4ZGEsCisrCTB4ZTYsIDB4MzAsIDB4MzMsIDB4YTQsIDB4ODksIDB4MzEsIDB4NzUsIDB4YmUsCisrCTB4NjksIDB4NDMsIDB4ODQsIDB4NDMsIDB4NTAsIDB4ODcsIDB4ZGQsIDB4NzEsCisrCTB4MzYsIDB4ODMsIDB4YzMsIDB4NzgsIDB4NzQsIDB4MjQsIDB4MGEsIDB4ZWQsCisrCTB4N2IsIDB4ZGIsIDB4YTQsIDB4MjQsIDB4MGIsIDB4YjksIDB4N2UsIDB4NWQsCisrCTB4ZmYsIDB4ZGUsIDB4YjEsIDB4ZWYsIDB4NjEsIDB4NWEsIDB4NDUsIDB4MzMsCisrCTB4ZjYsIDB4MTcsIDB4MDcsIDB4MDgsIDB4OTgsIDB4ODMsIDB4OTIsIDB4MGYsCisrCTB4MjMsIDB4NmQsIDB4ZTYsIDB4YWEsIDB4MTcsIDB4NTQsIDB4YWQsIDB4NmEsCisrCTB4YzgsIDB4ZGIsIDB4MjYsIDB4YmUsIDB4YjgsIDB4YjYsIDB4MDgsIDB4ZmEsCisrCTB4NjgsIDB4ZjEsIDB4ZDcsIDB4NzksIDB4NmYsIDB4MTgsIDB4YjQsIDB4OWUsCisrCTB4MmQsIDB4M2YsIDB4MWIsIDB4NjQsIDB4YWYsIDB4OGQsIDB4MDYsIDB4MGUsCisrCTB4NDksIDB4MjgsIDB4ZTAsIDB4NWQsIDB4NDUsIDB4NjgsIDB4MTMsIDB4ODcsCisrCTB4ZmEsIDB4ZGUsIDB4NDAsIDB4N2IsIDB4ZDIsIDB4YzMsIDB4OTQsIDB4ZDUsCisrCTB4ZTEsIDB4ZDksIDB4YzIsIDB4YWYsIDB4NTUsIDB4ODksIDB4ZWIsIDB4YjQsCisrCTB4MTIsIDB4NTksIDB4YTgsIDB4ZDQsIDB4YzUsIDB4MjksIDB4NjYsIDB4MzgsCisrCTB4ZTYsIDB4YWMsIDB4MjIsIDB4MjIsIDB4ZDksIDB4NjQsIDB4OWIsIDB4MzQsCisrCTB4MGEsIDB4MzIsIDB4OWYsIDB4YzIsIDB4YmYsIDB4MTcsIDB4NmMsIDB4M2YsCisrCTB4NzEsIDB4N2EsIDB4MzgsIDB4NmIsIDB4OTgsIDB4ZmIsIDB4NDksIDB4MzYsCisrCTB4ODksIDB4YzksIDB4ZTIsIDB4ZDYsIDB4YzcsIDB4NWQsIDB4ZDAsIDB4NjksCisrCTB4NWYsIDB4MjMsIDB4MzUsIDB4YzksIDB4MzAsIDB4ZTIsIDB4ZmQsIDB4NDQsCisrCTB4NTgsIDB4MzksIDB4ZDcsIDB4OTcsIDB4ZmIsIDB4NWMsIDB4MDAsIDB4ZDUsCisrCTB4NGYsIDB4N2EsIDB4MWEsIDB4OTUsIDB4OGIsIDB4NjIsIDB4NGIsIDB4Y2UsCisrCTB4ZTUsIDB4OTEsIDB4MjEsIDB4N2IsIDB4MzAsIDB4MDAsIDB4ZDYsIDB4ZGQsCisrCTB4NmQsIDB4MDIsIDB4ODYsIDB4NDksIDB4MGYsIDB4M2MsIDB4MWEsIDB4MjcsCisrCTB4M2MsIDB4ZDMsIDB4MGUsIDB4NzEsIDB4ZjIsIDB4ZmYsIDB4ZjUsIDB4MmYsCisrCTB4ODcsIDB4YWMsIDB4NjcsIDB4NTksIDB4ODEsIDB4YTMsIDB4ZjcsIDB4ZjgsCisrCTB4ZDYsIDB4MTEsIDB4MGMsIDB4ODQsIDB4YTksIDB4MDMsIDB4ZWUsIDB4MmEsCisrCTB4YzQsIDB4ZjMsIDB4MjIsIDB4YWIsIDB4N2MsIDB4ZTIsIDB4MjUsIDB4ZjUsCisrCTB4NjcsIDB4YTMsIDB4ZTQsIDB4MTEsIDB4ZTAsIDB4NTksIDB4YjMsIDB4Y2EsCisrCTB4ODcsIDB4YTAsIDB4YWUsIDB4YzksIDB4YTYsIDB4NjIsIDB4MWIsIDB4NmUsCisrCTB4NGQsIDB4MDIsIDB4NmIsIDB4MDcsIDB4OWQsIDB4ZmQsIDB4ZDAsIDB4OTIsCisrCTB4MDYsIDB4ZTEsIDB4YjIsIDB4OWEsIDB4NGEsIDB4MWYsIDB4MWYsIDB4MTMsCisrCTB4NDksIDB4OTksIDB4OTcsIDB4MDgsIDB4ZGUsIDB4N2YsIDB4OTgsIDB4YWYsCisrCTB4NTEsIDB4OTgsIDB4ZWUsIDB4MmMsIDB4Y2IsIDB4ZjAsIDB4MGIsIDB4YzYsCisrCTB4YjYsIDB4YjcsIDB4MmQsIDB4OWEsIDB4YjEsIDB4YWMsIDB4YTYsIDB4ZTMsCisrCTB4MTUsIDB4NzcsIDB4OWQsIDB4NmIsIDB4MWEsIDB4ZTQsIDB4ZmMsIDB4OGIsCisrCTB4ZjIsIDB4MTcsIDB4NTksIDB4MDgsIDB4MDQsIDB4NTgsIDB4ODEsIDB4OWQsCisrCTB4MWIsIDB4MWIsIDB4NjksIDB4NTUsIDB4YzIsIDB4YjQsIDB4M2MsIDB4MWYsCisrCTB4NTAsIDB4ZjEsIDB4N2YsIDB4NzcsIDB4OTAsIDB4NGMsIDB4NjYsIDB4NDAsCisrCTB4NWEsIDB4YzAsIDB4MzMsIDB4MWYsIDB4Y2IsIDB4MDUsIDB4NmQsIDB4NWMsCisrCTB4MDYsIDB4ODcsIDB4NTIsIDB4YTIsIDB4OGYsIDB4MjYsIDB4ZDUsIDB4NGYKKyt9OworK3N0YXRpYyBjb25zdCB1OCBkZWNfYXNzb2MwMTBbXSBfX2luaXRjb25zdCA9IHsKKysJMHhkMiwgMHhhMSwgMHg3MCwgMHhkYiwgMHg3YSwgMHhmOCwgMHhmYSwgMHgyNywKKysJMHhiYSwgMHg3MywgMHgwZiwgMHhiZiwgMHgzZCwgMHgxZSwgMHg4MiwgMHhiMgorK307Cisrc3RhdGljIGNvbnN0IHU4IGRlY19ub25jZTAxMFtdIF9faW5pdGNvbnN0ID0geworKwkweGRiLCAweDkyLCAweDBmLCAweDdmLCAweDE3LCAweDU0LCAweDBjLCAweDMwCisrfTsKKytzdGF0aWMgY29uc3QgdTggZGVjX2tleTAxMFtdIF9faW5pdGNvbnN0ID0geworKwkweDQ3LCAweDExLCAweGViLCAweDg2LCAweDJiLCAweDJjLCAweGFiLCAweDQ0LAorKwkweDM0LCAweGRhLCAweDdmLCAweDU3LCAweDAzLCAweDM5LCAweDBjLCAweGFmLAorKwkweDJjLCAweDE0LCAweGZkLCAweDY1LCAweDIzLCAweGU5LCAweDhlLCAweDc0LAorKwkweGQ1LCAweDA4LCAweDY4LCAweDA4LCAweGU3LCAweGI0LCAweDcyLCAweGQ3CisrfTsKKysKKytzdGF0aWMgY29uc3QgdTggZGVjX2lucHV0MDExW10gX19pbml0Y29uc3QgPSB7CisrCTB4NmEsIDB4ZmMsIDB4NGIsIDB4MjUsIDB4ZGYsIDB4YzAsIDB4ZTQsIDB4ZTgsCisrCTB4MTcsIDB4NGQsIDB4NGMsIDB4YzksIDB4N2UsIDB4ZGUsIDB4M2EsIDB4Y2MsCisrCTB4M2MsIDB4YmEsIDB4NmEsIDB4NzcsIDB4NDcsIDB4ZGIsIDB4ZTMsIDB4NzQsCisrCTB4N2EsIDB4NGQsIDB4NWYsIDB4OGQsIDB4MzcsIDB4NTUsIDB4ODAsIDB4NzMsCisrCTB4OTAsIDB4NjYsIDB4NWQsIDB4M2EsIDB4N2QsIDB4NWQsIDB4ODYsIDB4NWUsCisrCTB4OGQsIDB4ZmQsIDB4ODMsIDB4ZmYsIDB4NGUsIDB4NzQsIDB4NmYsIDB4ZjksCisrCTB4ZTYsIDB4NzAsIDB4MTcsIDB4NzAsIDB4M2UsIDB4OTYsIDB4YTcsIDB4N2UsCisrCTB4Y2IsIDB4YWIsIDB4OGYsIDB4NTgsIDB4MjQsIDB4OWIsIDB4MDEsIDB4ZmQsCisrCTB4Y2IsIDB4ZTYsIDB4NGQsIDB4OWIsIDB4ZjAsIDB4ODgsIDB4OTQsIDB4NTcsCisrCTB4NjYsIDB4ZWYsIDB4NzIsIDB4NGMsIDB4NDIsIDB4NmUsIDB4MTYsIDB4MTksCisrCTB4MTUsIDB4ZWEsIDB4NzAsIDB4NWIsIDB4YWMsIDB4MTMsIDB4ZGIsIDB4OWYsCisrCTB4MTgsIDB4ZTIsIDB4M2MsIDB4MjYsIDB4OTcsIDB4YmMsIDB4ZGMsIDB4NDUsCisrCTB4OGMsIDB4NmMsIDB4MjQsIDB4NjksIDB4OWMsIDB4ZjcsIDB4NjUsIDB4MWUsCisrCTB4MTgsIDB4NTksIDB4MzEsIDB4N2MsIDB4ZTQsIDB4NzMsIDB4YmMsIDB4MzksCisrCTB4NjIsIDB4YzYsIDB4NWMsIDB4OWYsIDB4YmYsIDB4ZmEsIDB4OTAsIDB4MDMsCisrCTB4YzksIDB4NzIsIDB4MjYsIDB4YjYsIDB4MWIsIDB4YzIsIDB4YjcsIDB4M2YsCisrCTB4ZjIsIDB4MTMsIDB4NzcsIDB4ZjIsIDB4OGQsIDB4YjksIDB4NDcsIDB4ZDAsCisrCTB4NTMsIDB4ZGQsIDB4YzgsIDB4OTEsIDB4ODMsIDB4OGIsIDB4YjEsIDB4Y2UsCisrCTB4YTMsIDB4ZmUsIDB4Y2QsIDB4ZDksIDB4ZGQsIDB4OTIsIDB4N2IsIDB4ZGIsCisrCTB4YjgsIDB4ZmIsIDB4YzksIDB4MmQsIDB4MDEsIDB4NTksIDB4MzksIDB4NTIsCisrCTB4YWQsIDB4MWIsIDB4ZWMsIDB4Y2YsIDB4ZDcsIDB4NzAsIDB4MTMsIDB4MjEsCisrCTB4ZjUsIDB4NDcsIDB4YWEsIDB4MTgsIDB4MjEsIDB4NWMsIDB4YzksIDB4OWEsCisrCTB4ZDIsIDB4NmIsIDB4MDUsIDB4OWMsIDB4MDEsIDB4YTEsIDB4ZGEsIDB4MzUsCisrCTB4NWQsIDB4YjMsIDB4NzAsIDB4ZTYsIDB4YTksIDB4ODAsIDB4OGIsIDB4OTEsCisrCTB4YjcsIDB4YjMsIDB4NWYsIDB4MjQsIDB4OWEsIDB4YjcsIDB4ZDEsIDB4NmIsCisrCTB4YTEsIDB4MWMsIDB4NTAsIDB4YmEsIDB4NDksIDB4ZTAsIDB4ZWUsIDB4MmUsCisrCTB4NzUsIDB4YWMsIDB4NjksIDB4YzAsIDB4ZWIsIDB4MDMsIDB4ZGQsIDB4MTksCisrCTB4ZTUsIDB4ZjYsIDB4MDYsIDB4ZGQsIDB4YzMsIDB4ZDcsIDB4MmIsIDB4MDcsCisrCTB4MDcsIDB4MzAsIDB4YTcsIDB4MTksIDB4MGMsIDB4YmYsIDB4ZTYsIDB4MTgsCisrCTB4Y2MsIDB4YjEsIDB4MDEsIDB4MTEsIDB4ODUsIDB4NzcsIDB4MWQsIDB4OTYsCisrCTB4YTcsIDB4YTMsIDB4MDAsIDB4ODQsIDB4MDIsIDB4YTIsIDB4ODMsIDB4NjgsCisrCTB4ZGEsIDB4MTcsIDB4MjcsIDB4YzgsIDB4N2YsIDB4MjMsIDB4YjcsIDB4ZjQsCisrCTB4MTMsIDB4ODUsIDB4Y2YsIDB4ZGQsIDB4N2EsIDB4N2QsIDB4MjQsIDB4NTcsCisrCTB4ZmUsIDB4MDUsIDB4OTMsIDB4ZjUsIDB4NzQsIDB4Y2UsIDB4ZWQsIDB4MGMsCisrCTB4MjAsIDB4OTgsIDB4OGQsIDB4OTIsIDB4MzAsIDB4YTEsIDB4MjksIDB4MjMsCisrCTB4MWEsIDB4YTAsIDB4NGYsIDB4NjksIDB4NTYsIDB4NGMsIDB4ZTEsIDB4YzgsCisrCTB4Y2UsIDB4ZjYsIDB4OWEsIDB4MGMsIDB4YTQsIDB4ZmEsIDB4MDQsIDB4ZjYsCisrCTB4NjIsIDB4OTUsIDB4ZjIsIDB4ZmEsIDB4YzcsIDB4NDAsIDB4NjgsIDB4NDAsCisrCTB4OGYsIDB4NDEsIDB4ZGEsIDB4YjQsIDB4MjYsIDB4NmYsIDB4NzAsIDB4YWIsCisrCTB4NDAsIDB4NjEsIDB4YTQsIDB4MGUsIDB4NzUsIDB4ZmIsIDB4ODYsIDB4ZWIsCisrCTB4OWQsIDB4OWEsIDB4MWYsIDB4ZWMsIDB4NzYsIDB4OTksIDB4ZTcsIDB4ZWEsCisrCTB4YWEsIDB4MWUsIDB4MmQsIDB4YjUsIDB4ZDQsIDB4YTYsIDB4MWEsIDB4YjgsCisrCTB4NjEsIDB4MGEsIDB4MWQsIDB4MTYsIDB4NWIsIDB4OTgsIDB4YzIsIDB4MzEsCisrCTB4NDAsIDB4ZTcsIDB4MjMsIDB4MWQsIDB4NjYsIDB4OTksIDB4YzgsIDB4YzAsCisrCTB4ZDcsIDB4Y2UsIDB4ZjMsIDB4NTcsIDB4NDAsIDB4MDQsIDB4M2YsIDB4ZmMsCisrCTB4ZWEsIDB4YjMsIDB4ZmMsIDB4ZDIsIDB4ZDMsIDB4OTksIDB4YTQsIDB4OTQsCisrCTB4NjksIDB4YTAsIDB4ZWYsIDB4ZDEsIDB4ODUsIDB4YjMsIDB4YTYsIDB4YjEsCisrCTB4MjgsIDB4YmYsIDB4OTQsIDB4NjcsIDB4MjIsIDB4YzMsIDB4MzYsIDB4NDYsCisrCTB4ZjgsIDB4ZDIsIDB4MGYsIDB4NWYsIDB4ZjQsIDB4NTksIDB4ODAsIDB4ZTYsCisrCTB4MmQsIDB4NDMsIDB4MDgsIDB4N2QsIDB4MTksIDB4MDksIDB4OTcsIDB4YTcsCisrCTB4NGMsIDB4M2QsIDB4OGQsIDB4YmEsIDB4NjUsIDB4NjIsIDB4YTMsIDB4NzEsCisrCTB4MzMsIDB4MjksIDB4NjIsIDB4ZGIsIDB4YzEsIDB4MzMsIDB4MzQsIDB4MWEsCisrCTB4NjMsIDB4MzMsIDB4MTYsIDB4YjYsIDB4NjQsIDB4N2UsIDB4YWIsIDB4MzMsCisrCTB4ZjAsIDB4ZTYsIDB4MjYsIDB4NjgsIDB4YmEsIDB4MWQsIDB4MmUsIDB4MzgsCisrCTB4MDgsIDB4ZTYsIDB4MDIsIDB4ZDMsIDB4MjUsIDB4MmMsIDB4NDcsIDB4MjMsCisrCTB4NTgsIDB4MzQsIDB4MGYsIDB4OWQsIDB4NjMsIDB4NGYsIDB4NjMsIDB4YmIsCisrCTB4N2YsIDB4M2IsIDB4MzQsIDB4MzgsIDB4YTcsIDB4YjUsIDB4OGQsIDB4NjUsCisrCTB4ZDksIDB4OWYsIDB4NzksIDB4NTUsIDB4M2UsIDB4NGQsIDB4ZTcsIDB4NzMsCisrCTB4ZDgsIDB4ZjYsIDB4OTgsIDB4OTcsIDB4ODQsIDB4NjAsIDB4OWMsIDB4YzgsCisrCTB4YTksIDB4M2MsIDB4ZjYsIDB4ZGMsIDB4MTIsIDB4NWMsIDB4ZTEsIDB4YmIsCisrCTB4MGIsIDB4OGIsIDB4OTgsIDB4OWMsIDB4OWQsIDB4MjYsIDB4N2MsIDB4NGEsCisrCTB4ZTYsIDB4NDYsIDB4MzYsIDB4NTgsIDB4MjEsIDB4NGEsIDB4ZWUsIDB4Y2EsCisrCTB4ZDcsIDB4M2IsIDB4YzIsIDB4NmMsIDB4NDksIDB4MmYsIDB4ZTUsIDB4ZDUsCisrCTB4MDMsIDB4NTksIDB4ODQsIDB4NTMsIDB4Y2IsIDB4ZmUsIDB4OTIsIDB4NzEsCisrCTB4MmUsIDB4N2MsIDB4MjEsIDB4Y2MsIDB4OTksIDB4ODUsIDB4N2YsIDB4YjgsCisrCTB4NzQsIDB4OTAsIDB4MTMsIDB4NDIsIDB4M2YsIDB4ZTAsIDB4NmIsIDB4MWQsCisrCTB4ZjIsIDB4NGQsIDB4NTQsIDB4ZDQsIDB4ZmMsIDB4M2EsIDB4MDUsIDB4ZTYsCisrCTB4NzQsIDB4YWYsIDB4YTYsIDB4YTAsIDB4MmEsIDB4MjAsIDB4MjMsIDB4NWQsCisrCTB4MzQsIDB4NWMsIDB4ZDksIDB4M2UsIDB4NGUsIDB4ZmEsIDB4OTMsIDB4ZTcsCisrCTB4YWEsIDB4ZTksIDB4NmYsIDB4MDgsIDB4NDMsIDB4NjcsIDB4NDEsIDB4YzUsCisrCTB4YWQsIDB4ZmIsIDB4MzEsIDB4OTUsIDB4ODIsIDB4NzMsIDB4MzIsIDB4ZDgsCisrCTB4YTYsIDB4YTMsIDB4ZWQsIDB4MGUsIDB4MmQsIDB4ZjYsIDB4NWYsIDB4ZmQsCisrCTB4ODAsIDB4YTYsIDB4N2EsIDB4ZTAsIDB4ZGYsIDB4NzgsIDB4MTUsIDB4MjksCisrCTB4NzQsIDB4MzMsIDB4ZDAsIDB4OWUsIDB4ODMsIDB4ODYsIDB4NzIsIDB4MjIsCisrCTB4NTcsIDB4MjksIDB4YjksIDB4OWUsIDB4NWQsIDB4ZDMsIDB4MWEsIDB4YjUsCisrCTB4OTYsIDB4NzIsIDB4NDEsIDB4M2QsIDB4ZjEsIDB4NjQsIDB4NDMsIDB4NjcsCisrCTB4ZWUsIDB4YWEsIDB4NWMsIDB4ZDMsIDB4OWEsIDB4OTYsIDB4MTMsIDB4MTEsCisrCTB4NWQsIDB4ZjMsIDB4MGMsIDB4ODcsIDB4ODIsIDB4MWUsIDB4NDEsIDB4OWUsCisrCTB4ZDAsIDB4MjcsIDB4ZDcsIDB4NTQsIDB4M2IsIDB4NjcsIDB4NzMsIDB4MDksCisrCTB4OTEsIDB4ZTksIDB4ZDUsIDB4MzYsIDB4YTcsIDB4YjUsIDB4NTUsIDB4ZTQsCisrCTB4ZjMsIDB4MjEsIDB4NTEsIDB4NDksIDB4MjIsIDB4MDcsIDB4NTUsIDB4NGYsCisrCTB4NDQsIDB4NGIsIDB4ZDIsIDB4MTUsIDB4OTMsIDB4MTcsIDB4MmEsIDB4ZmEsCisrCTB4NGQsIDB4NGEsIDB4NTcsIDB4ZGIsIDB4NGMsIDB4YTYsIDB4ZWIsIDB4ZWMsCisrCTB4NTMsIDB4MjUsIDB4NmMsIDB4MjEsIDB4ZWQsIDB4MDAsIDB4NGMsIDB4M2IsCisrCTB4Y2EsIDB4MTQsIDB4NTcsIDB4YTksIDB4ZDYsIDB4NmEsIDB4Y2QsIDB4OGQsCisrCTB4NWUsIDB4NzQsIDB4YWMsIDB4NzIsIDB4YzEsIDB4OTcsIDB4ZTUsIDB4MWIsCisrCTB4NDUsIDB4NGUsIDB4ZGEsIDB4ZmMsIDB4Y2MsIDB4NDAsIDB4ZTgsIDB4NDgsCisrCTB4ODgsIDB4MGIsIDB4YTMsIDB4ZTMsIDB4OGQsIDB4ODMsIDB4NDIsIDB4YzMsCisrCTB4MjMsIDB4ZmQsIDB4NjgsIDB4YjUsIDB4OGUsIDB4ZjEsIDB4OWQsIDB4NjMsCisrCTB4NzcsIDB4ZTksIDB4YTMsIDB4OGUsIDB4OGMsIDB4MjYsIDB4NmIsIDB4YmQsCisrCTB4NzIsIDB4NzMsIDB4MzUsIDB4MGMsIDB4MDMsIDB4ZjgsIDB4NDMsIDB4NzgsCisrCTB4NTIsIDB4NzEsIDB4MTUsIDB4MWYsIDB4NzEsIDB4NWQsIDB4NmUsIDB4ZWQsCisrCTB4YjksIDB4Y2MsIDB4ODYsIDB4MzAsIDB4ZGIsIDB4MmIsIDB4ZDMsIDB4ODIsCisrCTB4ODgsIDB4MjMsIDB4NzEsIDB4OTAsIDB4NTMsIDB4NWMsIDB4YTksIDB4MmYsCisrCTB4NzYsIDB4MDEsIDB4YjcsIDB4OWEsIDB4ZmUsIDB4NDMsIDB4NTUsIDB4YTMsCisrCTB4MDQsIDB4OWIsIDB4MGUsIDB4ZTQsIDB4NTksIDB4ZGYsIDB4YzksIDB4ZTksCisrCTB4YjEsIDB4ZWEsIDB4MjksIDB4MjgsIDB4M2MsIDB4NWMsIDB4YWUsIDB4NzIsCisrCTB4ODQsIDB4YjYsIDB4YzYsIDB4ZWIsIDB4MGMsIDB4MjcsIDB4MDcsIDB4NzQsCisrCTB4OTAsIDB4MGQsIDB4MzEsIDB4YjAsIDB4MDAsIDB4NzcsIDB4ZTksIDB4NDAsCisrCTB4NzAsIDB4NmYsIDB4NjgsIDB4YTcsIDB4ZmQsIDB4MDYsIDB4ZWMsIDB4NGIsCisrCTB4YzAsIDB4YjcsIDB4YWMsIDB4YmMsIDB4MzMsIDB4YjcsIDB4NmQsIDB4MGEsCisrCTB4YmQsIDB4MTIsIDB4MWIsIDB4NTksIDB4Y2IsIDB4ZGQsIDB4MzIsIDB4ZjUsCisrCTB4MWQsIDB4OTQsIDB4NTcsIDB4NzYsIDB4OWUsIDB4MGMsIDB4MTgsIDB4OTgsCisrCTB4NzEsIDB4ZDcsIDB4MmEsIDB4ZGIsIDB4MGIsIDB4N2IsIDB4YTcsIDB4NzEsCisrCTB4YjcsIDB4NjcsIDB4ODEsIDB4MjMsIDB4OTYsIDB4YWUsIDB4YjksIDB4N2UsCisrCTB4MzIsIDB4NDMsIDB4OTIsIDB4OGEsIDB4MTksIDB4YTAsIDB4YzQsIDB4ZDQsCisrCTB4M2IsIDB4NTcsIDB4ZjksIDB4NGEsIDB4MmMsIDB4ZmIsIDB4NTEsIDB4NDYsCisrCTB4YmIsIDB4Y2IsIDB4NWQsIDB4YjMsIDB4ZWYsIDB4MTMsIDB4OTMsIDB4NmUsCisrCTB4NjgsIDB4NDIsIDB4NTQsIDB4NTcsIDB4ZDMsIDB4NmEsIDB4M2EsIDB4OGYsCisrCTB4OWQsIDB4NjYsIDB4YmYsIDB4YmQsIDB4MzYsIDB4MjMsIDB4ZjUsIDB4OTMsCisrCTB4ODMsIDB4N2IsIDB4OWMsIDB4YzAsIDB4ZGQsIDB4YzUsIDB4NDksIDB4YzAsCisrCTB4NjQsIDB4ZWQsIDB4MDcsIDB4MTIsIDB4YjMsIDB4ZTYsIDB4ZTQsIDB4ZTUsCisrCTB4MzgsIDB4OTUsIDB4MjMsIDB4YjEsIDB4YTAsIDB4M2IsIDB4MWEsIDB4NjEsCisrCTB4ZGEsIDB4MTcsIDB4YWMsIDB4YzMsIDB4NTgsIDB4ZGQsIDB4NzQsIDB4NjQsCisrCTB4MjIsIDB4MTEsIDB4ZTgsIDB4MzIsIDB4MWQsIDB4MTYsIDB4OTMsIDB4ODUsCisrCTB4OTksIDB4YTUsIDB4OWMsIDB4MzQsIDB4NTUsIDB4YjEsIDB4ZTksIDB4MjAsCisrCTB4NzIsIDB4YzksIDB4MjgsIDB4N2IsIDB4NzksIDB4MDAsIDB4YTEsIDB4YTYsCisrCTB4YTMsIDB4MjcsIDB4NDAsIDB4MTgsIDB4OGEsIDB4NTQsIDB4ZTAsIDB4Y2MsCisrCTB4ZTgsIDB4NGUsIDB4OGUsIDB4NDMsIDB4OTYsIDB4ZTcsIDB4M2YsIDB4YzgsCisrCTB4ZTksIDB4YjIsIDB4ZjksIDB4YzksIDB4ZGEsIDB4MDQsIDB4NzEsIDB4NTAsCisrCTB4NDcsIDB4ZTQsIDB4YWEsIDB4Y2UsIDB4YTIsIDB4MzAsIDB4YzgsIDB4ZTQsCisrCTB4YWMsIDB4YzcsIDB4MGQsIDB4MDYsIDB4MmUsIDB4ZTYsIDB4ZTgsIDB4ODAsCisrCTB4MzYsIDB4MjksIDB4OWUsIDB4MDEsIDB4YjgsIDB4YzMsIDB4ZjAsIDB4YTAsCisrCTB4NWQsIDB4N2EsIDB4Y2EsIDB4NGQsIDB4YTAsIDB4NTcsIDB4YmQsIDB4MmEsCisrCTB4NDUsIDB4YTcsIDB4N2YsIDB4OWMsIDB4OTMsIDB4MDcsIDB4OGYsIDB4MzUsCisrCTB4NjcsIDB4OTIsIDB4ZTMsIDB4ZTksIDB4N2YsIDB4YTgsIDB4NjEsIDB4NDMsCisrCTB4OWUsIDB4MjUsIDB4NGYsIDB4MzMsIDB4NzYsIDB4MTMsIDB4NmUsIDB4MTIsCisrCTB4YjksIDB4ZGQsIDB4YTQsIDB4N2MsIDB4MDgsIDB4OWYsIDB4N2MsIDB4ZTcsCisrCTB4MGEsIDB4OGQsIDB4ODQsIDB4MDYsIDB4YTQsIDB4MzMsIDB4MTcsIDB4MzQsCisrCTB4NWUsIDB4MTAsIDB4N2MsIDB4YzAsIDB4YTgsIDB4M2QsIDB4MWYsIDB4NDIsCisrCTB4MjAsIDB4NTEsIDB4NjUsIDB4NWQsIDB4MDksIDB4YzMsIDB4YWEsIDB4YzAsCisrCTB4YzgsIDB4MGQsIDB4ZjAsIDB4NzksIDB4YmMsIDB4MjAsIDB4MWIsIDB4OTUsCisrCTB4ZTcsIDB4MDYsIDB4N2QsIDB4NDcsIDB4MjAsIDB4MDMsIDB4MWEsIDB4NzQsCisrCTB4ZGQsIDB4ZTIsIDB4ZDQsIDB4YWUsIDB4MzgsIDB4NzEsIDB4OWIsIDB4ZjUsCisrCTB4ODAsIDB4ZWMsIDB4MDgsIDB4NGUsIDB4NTYsIDB4YmEsIDB4NzYsIDB4MTIsCisrCTB4MWEsIDB4ZGYsIDB4NDgsIDB4ZjMsIDB4YWUsIDB4YjMsIDB4ZTYsIDB4ZTYsCisrCTB4YmUsIDB4YzAsIDB4OTEsIDB4MmUsIDB4MDEsIDB4YjMsIDB4MDEsIDB4ODYsCisrCTB4YTIsIDB4YjksIDB4NTIsIDB4ZDEsIDB4MjEsIDB4YWUsIDB4ZDQsIDB4OTcsCisrCTB4MWQsIDB4ZWYsIDB4NDEsIDB4MTIsIDB4OTUsIDB4M2QsIDB4NDgsIDB4NDUsCisrCTB4MWMsIDB4NTYsIDB4MzIsIDB4OGYsIDB4YjgsIDB4NDMsIDB4YmIsIDB4MTksCisrCTB4ZjMsIDB4Y2EsIDB4ZTksIDB4ZWIsIDB4NmQsIDB4ODQsIDB4YmUsIDB4ODYsCisrCTB4MDYsIDB4ZTIsIDB4MzYsIDB4YjIsIDB4NjIsIDB4OWQsIDB4ZDMsIDB4NGMsCisrCTB4NDgsIDB4MTgsIDB4NTQsIDB4MTMsIDB4NGUsIDB4Y2YsIDB4ZmQsIDB4YmEsCisrCTB4ODQsIDB4YjksIDB4MzAsIDB4NTMsIDB4Y2YsIDB4ZmIsIDB4YjksIDB4MjksCisrCTB4OGYsIDB4ZGMsIDB4OWYsIDB4ZWYsIDB4NjAsIDB4MGIsIDB4NjQsIDB4ZjYsCisrCTB4OGIsIDB4ZWUsIDB4YTYsIDB4OTEsIDB4YzIsIDB4NDEsIDB4NmMsIDB4ZjYsCisrCTB4ZmEsIDB4NzksIDB4NjcsIDB4NGIsIDB4YzEsIDB4M2YsIDB4YWYsIDB4MDksCisrCTB4ODEsIDB4ZDQsIDB4NWQsIDB4Y2IsIDB4MDksIDB4ZGYsIDB4MzYsIDB4MzEsCisrCTB4YzAsIDB4MTQsIDB4M2MsIDB4N2MsIDB4MGUsIDB4NjUsIDB4OTUsIDB4OTksCisrCTB4NmQsIDB4YTMsIDB4ZjQsIDB4ZDcsIDB4MzgsIDB4ZWUsIDB4MWEsIDB4MmIsCisrCTB4MzcsIDB4ZTIsIDB4YTQsIDB4M2IsIDB4NGIsIDB4ZDAsIDB4NjUsIDB4Y2EsCisrCTB4ZjgsIDB4YzMsIDB4ZTgsIDB4MTUsIDB4MjAsIDB4ZWYsIDB4ZjIsIDB4MDAsCisrCTB4ZmQsIDB4MDEsIDB4MDksIDB4YzUsIDB4YzgsIDB4MTcsIDB4MDQsIDB4OTMsCisrCTB4ZDAsIDB4OTMsIDB4MDMsIDB4NTUsIDB4YzUsIDB4ZmUsIDB4MzIsIDB4YTMsCisrCTB4M2UsIDB4MjgsIDB4MmQsIDB4M2IsIDB4OTMsIDB4OGEsIDB4Y2MsIDB4MDcsCisrCTB4NzIsIDB4ODAsIDB4OGIsIDB4NzQsIDB4MTYsIDB4MjQsIDB4YmIsIDB4ZGEsCisrCTB4OTQsIDB4MzksIDB4MzAsIDB4OGYsIDB4YjEsIDB4Y2QsIDB4NGEsIDB4OTAsCisrCTB4OTIsIDB4N2MsIDB4MTQsIDB4OGYsIDB4OTUsIDB4NGUsIDB4YWMsIDB4OWIsCisrCTB4ZDgsIDB4OGYsIDB4MWEsIDB4ODcsIDB4YTQsIDB4MzIsIDB4MjcsIDB4OGEsCisrCTB4YmEsIDB4ZjcsIDB4NDEsIDB4Y2YsIDB4ODQsIDB4MzcsIDB4MTksIDB4ZTYsCisrCTB4MDYsIDB4ZjUsIDB4MGUsIDB4Y2YsIDB4MzYsIDB4ZjUsIDB4OWUsIDB4NmMsCisrCTB4ZGUsIDB4YmMsIDB4ZmYsIDB4NjQsIDB4N2UsIDB4NGUsIDB4NTksIDB4NTcsCisrCTB4NDgsIDB4ZmUsIDB4MTQsIDB4ZjcsIDB4OWMsIDB4OTMsIDB4NWQsIDB4MTUsCisrCTB4YWQsIDB4Y2MsIDB4MTEsIDB4YjEsIDB4MTcsIDB4MTgsIDB4YjIsIDB4N2UsCisrCTB4Y2MsIDB4YWIsIDB4ZTksIDB4Y2UsIDB4N2QsIDB4NzcsIDB4NWIsIDB4NTEsCisrCTB4MWIsIDB4MWUsIDB4MjAsIDB4YTgsIDB4MzIsIDB4MDYsIDB4MGUsIDB4NzUsCisrCTB4OTMsIDB4YWMsIDB4ZGIsIDB4MzUsIDB4MzcsIDB4MWYsIDB4ZTksIDB4MTksCisrCTB4MWQsIDB4YjQsIDB4NzEsIDB4OTcsIDB4ZDYsIDB4NGUsIDB4MmMsIDB4MDgsCisrCTB4YTUsIDB4MTMsIDB4ZjksIDB4MGUsIDB4N2UsIDB4NzgsIDB4NmUsIDB4MTQsCisrCTB4ZTAsIDB4YTksIDB4YjksIDB4OTYsIDB4NGMsIDB4ODAsIDB4ODIsIDB4YmEsCisrCTB4MTcsIDB4YjMsIDB4OWQsIDB4NjksIDB4YjAsIDB4ODQsIDB4NDYsIDB4ZmYsCisrCTB4ZjksIDB4NTIsIDB4NzksIDB4OTQsIDB4NTgsIDB4M2EsIDB4NjIsIDB4OTAsCisrCTB4MTUsIDB4MzUsIDB4NzEsIDB4MTAsIDB4MzcsIDB4ZWQsIDB4YTEsIDB4OGUsCisrCTB4NTMsIDB4NmUsIDB4ZjQsIDB4MjYsIDB4NTcsIDB4OTMsIDB4MTUsIDB4OTMsCisrCTB4ZjYsIDB4ODEsIDB4MmMsIDB4NWEsIDB4MTAsIDB4ZGEsIDB4OTIsIDB4YWQsCisrCTB4MmYsIDB4ZGIsIDB4MjgsIDB4MzEsIDB4MmQsIDB4NTUsIDB4MDQsIDB4ZDIsCisrCTB4MDYsIDB4MjgsIDB4OGMsIDB4MWUsIDB4ZGMsIDB4ZWEsIDB4NTQsIDB4YWMsCisrCTB4ZmYsIDB4YjcsIDB4NmMsIDB4MzAsIDB4MTUsIDB4ZDQsIDB4YjQsIDB4MGQsCisrCTB4MDAsIDB4OTMsIDB4NTcsIDB4ZGQsIDB4ZDIsIDB4MDcsIDB4MDcsIDB4MDYsCisrCTB4ZDksIDB4NDMsIDB4OWIsIDB4Y2QsIDB4M2EsIDB4ZjQsIDB4N2QsIDB4NGMsCisrCTB4MzYsIDB4NWQsIDB4MjMsIDB4YTIsIDB4Y2MsIDB4NTcsIDB4NDAsIDB4OTEsCisrCTB4ZTksIDB4MmMsIDB4MmYsIDB4MmMsIDB4ZDUsIDB4MzAsIDB4OWIsIDB4MTcsCisrCTB4YjAsIDB4YzksIDB4ZjcsIDB4YTcsIDB4MmYsIDB4ZDEsIDB4OTMsIDB4MjAsCisrCTB4NmIsIDB4YzYsIDB4YzEsIDB4ZTQsIDB4NmYsIDB4Y2IsIDB4ZDEsIDB4ZTcsCisrCTB4MDksIDB4MGYsIDB4OWUsIDB4ZGMsIDB4YWEsIDB4OWYsIDB4MmYsIDB4ZGYsCisrCTB4NTYsIDB4OWYsIDB4ZDQsIDB4MzMsIDB4MDQsIDB4YWYsIDB4ZDMsIDB4NmMsCisrCTB4NTgsIDB4NjEsIDB4ZjAsIDB4MzAsIDB4ZWMsIDB4ZjIsIDB4N2YsIDB4ZjIsCisrCTB4OWMsIDB4ZGYsIDB4MzksIDB4YmIsIDB4NmYsIDB4YTIsIDB4OGMsIDB4N2UsCisrCTB4YzQsIDB4MjIsIDB4NTEsIDB4NzEsIDB4YzAsIDB4NGQsIDB4MTQsIDB4MWEsCisrCTB4YzQsIDB4Y2QsIDB4MDQsIDB4ZDksIDB4ODcsIDB4MDgsIDB4NTAsIDB4MDUsCisrCTB4Y2MsIDB4YWYsIDB4ZjYsIDB4ZjAsIDB4OGYsIDB4OTIsIDB4NTQsIDB4NTgsCisrCTB4YzIsIDB4YzcsIDB4MDksIDB4N2EsIDB4NTksIDB4MDIsIDB4MDUsIDB4ZTgsCisrCTB4YjAsIDB4ODYsIDB4ZDksIDB4YmYsIDB4N2IsIDB4MzUsIDB4NTEsIDB4NGQsCisrCTB4YWYsIDB4MDgsIDB4OTcsIDB4MmMsIDB4NjUsIDB4ZGEsIDB4MmEsIDB4NzEsCisrCTB4M2EsIDB4YTgsIDB4NTEsIDB4Y2MsIDB4ZjIsIDB4NzMsIDB4MjcsIDB4YzMsCisrCTB4ZmQsIDB4NjIsIDB4Y2YsIDB4ZTMsIDB4YjIsIDB4Y2EsIDB4Y2IsIDB4YmUsCisrCTB4MWEsIDB4MGEsIDB4YTEsIDB4MzQsIDB4N2IsIDB4NzcsIDB4YzQsIDB4NjIsCisrCTB4NjgsIDB4NzgsIDB4NWYsIDB4OTQsIDB4MDcsIDB4MDQsIDB4NjUsIDB4MTYsCisrCTB4NGIsIDB4NjEsIDB4Y2IsIDB4ZmYsIDB4NzUsIDB4MjYsIDB4NTAsIDB4NjYsCisrCTB4MWYsIDB4NmUsIDB4OTMsIDB4ZjgsIDB4YzUsIDB4NTEsIDB4ZWIsIDB4YTQsCisrCTB4NGEsIDB4NDgsIDB4NjgsIDB4NmIsIDB4ZTIsIDB4NWUsIDB4NDQsIDB4YjIsCisrCTB4NTAsIDB4MmMsIDB4NmMsIDB4YWUsIDB4NzksIDB4NGUsIDB4NjYsIDB4MzUsCisrCTB4ODEsIDB4NTAsIDB4YWMsIDB4YmMsIDB4M2YsIDB4YjEsIDB4MGMsIDB4ZjMsCisrCTB4MDUsIDB4M2MsIDB4NGEsIDB4YTMsIDB4NmMsIDB4MmEsIDB4NzksIDB4YjQsCisrCTB4YjcsIDB4YWIsIDB4Y2EsIDB4YzcsIDB4OWIsIDB4OGUsIDB4Y2QsIDB4NWYsCisrCTB4MTEsIDB4MDMsIDB4Y2IsIDB4MzAsIDB4YTMsIDB4YWIsIDB4ZGEsIDB4ZmUsCisrCTB4NjQsIDB4YjksIDB4YmIsIDB4ZDgsIDB4NWUsIDB4M2EsIDB4MWEsIDB4NTYsCisrCTB4ZTUsIDB4MDUsIDB4NDgsIDB4OTAsIDB4MWUsIDB4NjEsIDB4NjksIDB4MWIsCisrCTB4MjIsIDB4ZTYsIDB4MWEsIDB4M2MsIDB4NzUsIDB4YWQsIDB4MWYsIDB4MzcsCisrCTB4MjgsIDB4ZGMsIDB4ZTQsIDB4NmQsIDB4YmQsIDB4NDIsIDB4ZGMsIDB4ZDMsCisrCTB4YzgsIDB4YjYsIDB4MWMsIDB4NDgsIDB4ZmUsIDB4OTQsIDB4NzcsIDB4N2YsCisrCTB4YmQsIDB4NjIsIDB4YWMsIDB4YTMsIDB4NDcsIDB4MjcsIDB4Y2YsIDB4NWYsCisrCTB4ZDksIDB4ZGIsIDB4YWYsIDB4ZWMsIDB4ZjcsIDB4NWUsIDB4YzEsIDB4YjAsCisrCTB4OWQsIDB4MDEsIDB4MjYsIDB4OTksIDB4N2UsIDB4OGYsIDB4MDMsIDB4NzAsCisrCTB4YjUsIDB4NDIsIDB4YmUsIDB4NjcsIDB4MjgsIDB4MWIsIDB4N2MsIDB4YmQsCisrCTB4NjEsIDB4MjEsIDB4OTcsIDB4Y2MsIDB4NWMsIDB4ZTEsIDB4OTcsIDB4OGYsCisrCTB4OGQsIDB4ZGUsIDB4MmIsIDB4YWEsIDB4YTcsIDB4NzEsIDB4MWQsIDB4MWUsCisrCTB4MDIsIDB4NzMsIDB4NzAsIDB4NTgsIDB4MzIsIDB4NWIsIDB4MWQsIDB4NjcsCisrCTB4M2QsIDB4ZTAsIDB4NzQsIDB4NGYsIDB4MDMsIDB4ZjIsIDB4NzAsIDB4NTEsCisrCTB4NzksIDB4ZjEsIDB4NjEsIDB4NzAsIDB4MTUsIDB4NzQsIDB4OWQsIDB4MjMsCisrCTB4ODksIDB4ZGUsIDB4YWMsIDB4ZmQsIDB4ZGUsIDB4ZDAsIDB4MWYsIDB4YzMsCisrCTB4ODcsIDB4NDQsIDB4MzUsIDB4NGIsIDB4ZTUsIDB4YjAsIDB4NjAsIDB4YzUsCisrCTB4MjIsIDB4ZTQsIDB4OWUsIDB4Y2EsIDB4ZWIsIDB4ZDUsIDB4M2EsIDB4MDksCisrCTB4NDUsIDB4YTQsIDB4ZGIsIDB4ZmEsIDB4M2YsIDB4ZWIsIDB4MWIsIDB4YzcsCisrCTB4YzgsIDB4MTQsIDB4OTksIDB4NTEsIDB4OTIsIDB4MTAsIDB4ZWQsIDB4ZWQsCisrCTB4MjgsIDB4ZTAsIDB4YTEsIDB4ZjgsIDB4MjYsIDB4Y2YsIDB4Y2QsIDB4Y2IsCisrCTB4NjMsIDB4YTEsIDB4M2IsIDB4ZTMsIDB4ZGYsIDB4N2UsIDB4ZmUsIDB4YTYsCisrCTB4ZjAsIDB4ODEsIDB4OWEsIDB4YmYsIDB4NTUsIDB4ZGUsIDB4NTQsIDB4ZDUsCisrCTB4NTYsIDB4NjAsIDB4OTgsIDB4MTAsIDB4NjgsIDB4ZjQsIDB4MzgsIDB4OTYsCisrCTB4OGUsIDB4NmYsIDB4MWQsIDB4NDQsIDB4N2YsIDB4ZDYsIDB4MmYsIDB4ZmUsCisrCTB4NTUsIDB4ZmIsIDB4MGMsIDB4N2UsIDB4NjcsIDB4ZTIsIDB4NjEsIDB4NDQsCisrCTB4ZWQsIDB4ZjIsIDB4MzUsIDB4MzAsIDB4NWQsIDB4ZTksIDB4YzcsIDB4ZDYsCisrCTB4NmQsIDB4ZTAsIDB4YTAsIDB4ZWQsIDB4ZjMsIDB4ZmMsIDB4ZDgsIDB4M2UsCisrCTB4MGEsIDB4N2IsIDB4Y2QsIDB4YWYsIDB4NjUsIDB4NjgsIDB4MTgsIDB4YzAsCisrCTB4ZWMsIDB4MDQsIDB4MWMsIDB4NzQsIDB4NmQsIDB4ZTIsIDB4NmUsIDB4NzksCisrCTB4ZDQsIDB4MTEsIDB4MmIsIDB4NjIsIDB4ZDUsIDB4MjcsIDB4YWQsIDB4NGYsCisrCTB4MDEsIDB4NTksIDB4NzMsIDB4Y2MsIDB4NmEsIDB4NTMsIDB4ZmIsIDB4MmQsCisrCTB4ZDUsIDB4NGUsIDB4OTksIDB4MjEsIDB4NjUsIDB4NGQsIDB4ZjUsIDB4ODIsCisrCTB4ZjcsIDB4ZDgsIDB4NDIsIDB4Y2UsIDB4NmYsIDB4M2QsIDB4MzYsIDB4NDcsCisrCTB4ZjEsIDB4MDUsIDB4MTYsIDB4ZTgsIDB4MWIsIDB4NmEsIDB4OGYsIDB4OTMsCisrCTB4ZjIsIDB4OGYsIDB4MzcsIDB4NDAsIDB4MTIsIDB4MjgsIDB4YTMsIDB4ZTYsCisrCTB4YjksIDB4MTcsIDB4NGEsIDB4MWYsIDB4YjEsIDB4ZDEsIDB4NjYsIDB4NjksCisrCTB4ODYsIDB4YzQsIDB4ZmMsIDB4OTcsIDB4YWUsIDB4M2YsIDB4OGYsIDB4MWUsCisrCTB4MmIsIDB4ZGYsIDB4Y2QsIDB4ZjksIDB4M2MKKyt9OworK3N0YXRpYyBjb25zdCB1OCBkZWNfb3V0cHV0MDExW10gX19pbml0Y29uc3QgPSB7CisrCTB4N2EsIDB4NTcsIDB4ZjIsIDB4YzcsIDB4MDYsIDB4M2YsIDB4NTAsIDB4N2IsCisrCTB4MzYsIDB4MWEsIDB4NjYsIDB4NWMsIDB4YjksIDB4MGUsIDB4NWUsIDB4M2IsCisrCTB4NDUsIDB4NjAsIDB4YmUsIDB4OWEsIDB4MzEsIDB4OWYsIDB4ZmYsIDB4NWQsCisrCTB4NjYsIDB4MzQsIDB4YjQsIDB4ZGMsIDB4ZmIsIDB4OWQsIDB4OGUsIDB4ZWUsCisrCTB4NmEsIDB4MzMsIDB4YTQsIDB4MDcsIDB4M2MsIDB4ZjksIDB4NGMsIDB4MzAsCisrCTB4YTEsIDB4MjQsIDB4NTIsIDB4ZjksIDB4NTAsIDB4NDYsIDB4ODgsIDB4MjAsCisrCTB4MDIsIDB4MzIsIDB4M2EsIDB4MGUsIDB4OTksIDB4NjMsIDB4YWYsIDB4MWYsCisrCTB4MTUsIDB4MjgsIDB4MmEsIDB4MDUsIDB4ZmYsIDB4NTcsIDB4NTksIDB4NWUsCisrCTB4MTgsIDB4YTEsIDB4MWYsIDB4ZDAsIDB4OTIsIDB4NWMsIDB4ODgsIDB4NjYsCisrCTB4MWIsIDB4MDAsIDB4NjQsIDB4YTUsIDB4OTMsIDB4OGQsIDB4MDYsIDB4NDYsCisrCTB4YjAsIDB4NjQsIDB4OGIsIDB4OGIsIDB4ZWYsIDB4OTksIDB4MDUsIDB4MzUsCisrCTB4ODUsIDB4YjMsIDB4ZjMsIDB4MzMsIDB4YmIsIDB4ZWMsIDB4NjYsIDB4YjYsCisrCTB4M2QsIDB4NTcsIDB4NDIsIDB4ZTMsIDB4YjQsIDB4YzYsIDB4YWEsIDB4YjAsCisrCTB4NDEsIDB4MmEsIDB4YjksIDB4NTksIDB4YTksIDB4ZjYsIDB4M2UsIDB4MTUsCisrCTB4MjYsIDB4MTIsIDB4MDMsIDB4MjEsIDB4NGMsIDB4NzQsIDB4NDMsIDB4MTMsCisrCTB4MmEsIDB4MDMsIDB4MjcsIDB4MDksIDB4YjQsIDB4ZmIsIDB4ZTcsIDB4YjcsCisrCTB4NDAsIDB4ZmYsIDB4NWUsIDB4Y2UsIDB4NDgsIDB4OWEsIDB4NjAsIDB4ZTMsCisrCTB4OGIsIDB4ODAsIDB4OGMsIDB4MzgsIDB4MmQsIDB4Y2IsIDB4OTMsIDB4MzcsCisrCTB4NzQsIDB4MDUsIDB4NTIsIDB4NmYsIDB4NzMsIDB4M2UsIDB4YzMsIDB4YmMsCisrCTB4Y2EsIDB4NzIsIDB4MGEsIDB4ZWIsIDB4ZjEsIDB4M2IsIDB4YTAsIDB4OTUsCisrCTB4ZGMsIDB4OGEsIDB4YzQsIDB4YTksIDB4ZGMsIDB4Y2EsIDB4NDQsIDB4ZDgsCisrCTB4MDgsIDB4NjMsIDB4NmEsIDB4MzYsIDB4ZDMsIDB4M2MsIDB4YjgsIDB4YWMsCisrCTB4NDYsIDB4N2QsIDB4ZmQsIDB4YWEsIDB4ZWIsIDB4M2UsIDB4MGYsIDB4NDUsCisrCTB4OGYsIDB4NDksIDB4ZGEsIDB4MmIsIDB4ZjIsIDB4MTIsIDB4YmQsIDB4YWYsCisrCTB4NjcsIDB4OGEsIDB4NjMsIDB4NDgsIDB4NGIsIDB4NTUsIDB4NWYsIDB4NmQsCisrCTB4OGMsIDB4YjksIDB4NzYsIDB4MzQsIDB4ODQsIDB4YWUsIDB4YzIsIDB4ZmMsCisrCTB4NTIsIDB4NjQsIDB4ODIsIDB4ZjcsIDB4YjAsIDB4MDYsIDB4ZjAsIDB4NDUsCisrCTB4NzMsIDB4MTIsIDB4NTAsIDB4MzAsIDB4NzIsIDB4ZWEsIDB4NzgsIDB4OWEsCisrCTB4YTgsIDB4YWYsIDB4YjUsIDB4ZTMsIDB4YmIsIDB4NzcsIDB4NTIsIDB4ZWMsCisrCTB4NTksIDB4ODQsIDB4YmYsIDB4NmIsIDB4OGYsIDB4Y2UsIDB4ODYsIDB4NWUsCisrCTB4MWYsIDB4MjMsIDB4ZTksIDB4ZmIsIDB4MDgsIDB4ODYsIDB4ZjcsIDB4MTAsCisrCTB4YjksIDB4ZjIsIDB4NDQsIDB4OTYsIDB4NDQsIDB4NjMsIDB4YTksIDB4YTgsCisrCTB4NzgsIDB4MDAsIDB4MjMsIDB4ZDYsIDB4YzcsIDB4ZTcsIDB4NmUsIDB4NjYsCisrCTB4NGYsIDB4Y2MsIDB4ZWUsIDB4MTUsIDB4YjMsIDB4YmQsIDB4MWQsIDB4YTAsCisrCTB4ZTUsIDB4OWMsIDB4MWIsIDB4MjQsIDB4MmMsIDB4NGQsIDB4M2MsIDB4NjIsCisrCTB4MzUsIDB4OWMsIDB4ODgsIDB4NTksIDB4MDksIDB4ZGQsIDB4ODIsIDB4MWIsCisrCTB4Y2YsIDB4MGEsIDB4ODMsIDB4NmIsIDB4M2YsIDB4YWUsIDB4MDMsIDB4YzQsCisrCTB4YjQsIDB4ZGQsIDB4N2UsIDB4NWIsIDB4MjgsIDB4NzYsIDB4MjUsIDB4OTYsCisrCTB4ZDksIDB4YzksIDB4OWQsIDB4NWYsIDB4ODYsIDB4ZmEsIDB4ZjYsIDB4ZDcsCisrCTB4ZDIsIDB4ZTYsIDB4NzYsIDB4MWQsIDB4MGYsIDB4YTEsIDB4ZGMsIDB4NzQsCisrCTB4MDUsIDB4MWIsIDB4MWQsIDB4ZTAsIDB4Y2QsIDB4MTYsIDB4YjAsIDB4YTgsCisrCTB4OGEsIDB4MzQsIDB4N2IsIDB4MTUsIDB4MTEsIDB4NzcsIDB4ZTUsIDB4N2IsCisrCTB4N2UsIDB4MjAsIDB4ZjcsIDB4ZGEsIDB4MzgsIDB4ZGEsIDB4Y2UsIDB4NzAsCisrCTB4ZTksIDB4ZjUsIDB4NmMsIDB4ZDksIDB4YmUsIDB4MGMsIDB4NGMsIDB4OTUsCisrCTB4NGMsIDB4YzIsIDB4OWIsIDB4MzQsIDB4NTUsIDB4NTUsIDB4ZTEsIDB4ZjMsCisrCTB4NDYsIDB4OGUsIDB4NDgsIDB4NzQsIDB4MTQsIDB4NGYsIDB4OWQsIDB4YzksCisrCTB4ZjUsIDB4ZTgsIDB4MWEsIDB4ZjAsIDB4MTEsIDB4NGEsIDB4YzEsIDB4OGQsCisrCTB4ZTAsIDB4OTMsIDB4YTAsIDB4YmUsIDB4MDksIDB4MWMsIDB4MmIsIDB4NGUsCisrCTB4MGYsIDB4YjIsIDB4ODcsIDB4OGIsIDB4ODQsIDB4ZmUsIDB4OTIsIDB4MzIsCisrCTB4MTQsIDB4ZDcsIDB4OTMsIDB4ZGYsIDB4ZTcsIDB4NDQsIDB4YmMsIDB4YzUsCisrCTB4YWUsIDB4NTMsIDB4NjksIDB4ZDgsIDB4YjMsIDB4NzksIDB4MzcsIDB4ODAsCisrCTB4ZTMsIDB4MTcsIDB4NWMsIDB4ZWMsIDB4NTMsIDB4MDAsIDB4OWEsIDB4ZTMsCisrCTB4OGUsIDB4ZGMsIDB4MzgsIDB4YjgsIDB4NjYsIDB4ZjAsIDB4ZDMsIDB4YWQsCisrCTB4MWQsIDB4MDIsIDB4OTYsIDB4ODYsIDB4M2UsIDB4OWQsIDB4M2IsIDB4NWQsCisrCTB4YTUsIDB4N2YsIDB4MjEsIDB4MTAsIDB4ZjEsIDB4MWYsIDB4MTMsIDB4MjAsCisrCTB4ZjksIDB4NTcsIDB4ODcsIDB4MjAsIDB4ZjUsIDB4NWYsIDB4ZjEsIDB4MTcsCisrCTB4NDgsIDB4MGEsIDB4NTEsIDB4NWEsIDB4Y2QsIDB4MTksIDB4MDMsIDB4YTYsCisrCTB4NWEsIDB4ZDEsIDB4MTIsIDB4OTcsIDB4ZTksIDB4NDgsIDB4ZTIsIDB4MWQsCisrCTB4ODMsIDB4NzUsIDB4NTAsIDB4ZDksIDB4NzUsIDB4N2QsIDB4NmEsIDB4ODIsCisrCTB4YTEsIDB4ZjksIDB4NGUsIDB4NTQsIDB4ODcsIDB4ODksIDB4YzksIDB4MGMsCisrCTB4YjcsIDB4NWIsIDB4NmEsIDB4OTEsIDB4YzEsIDB4OWMsIDB4YjIsIDB4YTksCisrCTB4ZGMsIDB4OWEsIDB4YTQsIDB4NDksIDB4MGEsIDB4NmQsIDB4MGQsIDB4YmIsCisrCTB4ZGUsIDB4ODYsIDB4NDQsIDB4ZGQsIDB4NWQsIDB4ODksIDB4MmIsIDB4OTYsCisrCTB4MGYsIDB4MjMsIDB4OTUsIDB4YWQsIDB4Y2MsIDB4YTIsIDB4YjMsIDB4YjksCisrCTB4N2UsIDB4NzQsIDB4MzgsIDB4YmEsIDB4OWYsIDB4NzMsIDB4YWUsIDB4NWYsCisrCTB4ZjgsIDB4NjgsIDB4YTIsIDB4ZTAsIDB4YTksIDB4Y2UsIDB4YmQsIDB4NDAsCisrCTB4ZDQsIDB4NGMsIDB4NmIsIDB4ZDIsIDB4NTYsIDB4NjIsIDB4YjAsIDB4Y2MsCisrCTB4NjMsIDB4N2UsIDB4NWIsIDB4ZDMsIDB4YWUsIDB4ZDEsIDB4NzUsIDB4Y2UsCisrCTB4YmIsIDB4YjQsIDB4NWIsIDB4YTgsIDB4ZjgsIDB4YjQsIDB4YWMsIDB4NzEsCisrCTB4NzUsIDB4YWEsIDB4YzksIDB4OWYsIDB4YmIsIDB4NmMsIDB4YWQsIDB4MGYsCisrCTB4NTUsIDB4NWQsIDB4ZTgsIDB4ODUsIDB4N2QsIDB4ZjksIDB4MjEsIDB4MzUsCisrCTB4ZWEsIDB4OTIsIDB4ODUsIDB4MmIsIDB4MDAsIDB4ZWMsIDB4ODQsIDB4OTAsCisrCTB4MGEsIDB4NjMsIDB4OTYsIDB4ZTQsIDB4NmIsIDB4YTksIDB4NzcsIDB4YjgsCisrCTB4OTEsIDB4ZjgsIDB4NDYsIDB4MTUsIDB4NzIsIDB4NjMsIDB4NzAsIDB4MDEsCisrCTB4NDAsIDB4YTMsIDB4YTUsIDB4NzYsIDB4NjIsIDB4MmIsIDB4YmYsIDB4ZjEsCisrCTB4ZTUsIDB4OGQsIDB4OWYsIDB4YTMsIDB4ZmEsIDB4OWIsIDB4MDMsIDB4YmUsCisrCTB4ZmUsIDB4NjUsIDB4NmYsIDB4YTIsIDB4MjksIDB4MGQsIDB4NTQsIDB4YjQsCisrCTB4NzEsIDB4Y2UsIDB4YTksIDB4ZDYsIDB4M2QsIDB4ODgsIDB4ZjksIDB4YWYsCisrCTB4NmIsIDB4YTgsIDB4OWUsIDB4ZjQsIDB4MTYsIDB4OTYsIDB4MzYsIDB4YjksCisrCTB4MDAsIDB4ZGMsIDB4MTAsIDB4YWIsIDB4YjUsIDB4MDgsIDB4MzEsIDB4MWYsCisrCTB4MDAsIDB4YjEsIDB4M2MsIDB4ZDksIDB4MzgsIDB4M2UsIDB4YzYsIDB4MDQsCisrCTB4YTcsIDB4NGUsIDB4ZTgsIDB4YWUsIDB4ZWQsIDB4OTgsIDB4YzIsIDB4ZjcsCisrCTB4YjksIDB4MDAsIDB4NWYsIDB4OGMsIDB4NjAsIDB4ZDEsIDB4ZTUsIDB4MTUsCisrCTB4ZjcsIDB4YWUsIDB4MWUsIDB4ODQsIDB4ODgsIDB4ZDEsIDB4ZjYsIDB4YmMsCisrCTB4M2EsIDB4ODksIDB4MzUsIDB4MjIsIDB4ODMsIDB4N2MsIDB4Y2EsIDB4ZjAsCisrCTB4MzMsIDB4ODIsIDB4NGMsIDB4NzksIDB4M2MsIDB4ZmQsIDB4YjEsIDB4YWUsCisrCTB4NTIsIDB4NjIsIDB4NTUsIDB4ZDIsIDB4NDEsIDB4NjAsIDB4YzYsIDB4YmIsCisrCTB4ZmEsIDB4MGUsIDB4NTksIDB4ZDYsIDB4YTgsIDB4ZmUsIDB4NWQsIDB4ZWQsCisrCTB4NDcsIDB4M2QsIDB4ZTAsIDB4ZWEsIDB4MWYsIDB4NmUsIDB4NDMsIDB4NTEsCisrCTB4ZWMsIDB4MTAsIDB4NTIsIDB4NTYsIDB4NzcsIDB4NDIsIDB4NmIsIDB4NTIsCisrCTB4ODcsIDB4ZDgsIDB4ZWMsIDB4ZTAsIDB4YWEsIDB4NzYsIDB4YTUsIDB4ODQsCisrCTB4MmEsIDB4MjIsIDB4MjQsIDB4ZmQsIDB4OTIsIDB4NDAsIDB4ODgsIDB4ZDUsCisrCTB4ODUsIDB4MWMsIDB4MWYsIDB4NmIsIDB4NDcsIDB4YTAsIDB4YzQsIDB4ZTQsCisrCTB4ZWYsIDB4ZjQsIDB4ZWEsIDB4ZDcsIDB4NTksIDB4YWMsIDB4MmEsIDB4OWUsCisrCTB4OGMsIDB4ZmEsIDB4MWYsIDB4NDIsIDB4MDgsIDB4ZmUsIDB4NGYsIDB4NzQsCisrCTB4YTAsIDB4MjYsIDB4ZjUsIDB4YjMsIDB4ODQsIDB4ZjYsIDB4NTgsIDB4NWYsCisrCTB4MjYsIDB4NjYsIDB4M2UsIDB4ZDcsIDB4ZTQsIDB4MjIsIDB4OTEsIDB4MTMsCisrCTB4YzgsIDB4YWMsIDB4MjUsIDB4OTYsIDB4MjMsIDB4ZDgsIDB4MDksIDB4ZWEsCisrCTB4NDUsIDB4NzUsIDB4MjMsIDB4YjgsIDB4NWYsIDB4YzIsIDB4OTAsIDB4OGIsCisrCTB4MDksIDB4YzQsIDB4ZmMsIDB4NDcsIDB4NmMsIDB4NmQsIDB4MGEsIDB4ZWYsCisrCTB4NjksIDB4YTQsIDB4MzgsIDB4MTksIDB4Y2YsIDB4N2QsIDB4ZjksIDB4MDksCisrCTB4NzMsIDB4OWIsIDB4NjAsIDB4NWEsIDB4ZjcsIDB4MzcsIDB4YjUsIDB4ZmUsCisrCTB4OWYsIDB4ZTMsIDB4MmIsIDB4NGMsIDB4MGQsIDB4NmUsIDB4MTksIDB4ZjEsCisrCTB4ZDYsIDB4YzAsIDB4NzAsIDB4ZjMsIDB4OWQsIDB4MjIsIDB4M2MsIDB4ZjksCisrCTB4NDksIDB4Y2UsIDB4MzAsIDB4OGUsIDB4NDQsIDB4YjUsIDB4NzYsIDB4MTUsCisrCTB4OGYsIDB4NTIsIDB4ZmQsIDB4YTUsIDB4MDQsIDB4YjgsIDB4NTUsIDB4NmEsCisrCTB4MzYsIDB4NTksIDB4N2MsIDB4YzQsIDB4NDgsIDB4YjgsIDB4ZDcsIDB4YWIsCisrCTB4MDUsIDB4NjYsIDB4ZTksIDB4NWUsIDB4MjEsIDB4NmYsIDB4NmIsIDB4MzYsCisrCTB4MjksIDB4YmIsIDB4ZTksIDB4ZTMsIDB4YTIsIDB4OWEsIDB4YTgsIDB4Y2QsCisrCTB4NTUsIDB4MjUsIDB4MTEsIDB4YmEsIDB4NWEsIDB4NTgsIDB4YTAsIDB4ZGUsCisrCTB4YWUsIDB4MTksIDB4MmEsIDB4NDgsIDB4NWEsIDB4ZmYsIDB4MzYsIDB4Y2QsCisrCTB4NmQsIDB4MTYsIDB4N2EsIDB4NzMsIDB4MzgsIDB4NDYsIDB4ZTUsIDB4NDcsCisrCTB4NTksIDB4YzgsIDB4YTIsIDB4ZjYsIDB4ZTIsIDB4NmMsIDB4ODMsIDB4YzUsCisrCTB4MzYsIDB4MmMsIDB4ODMsIDB4N2QsIDB4YjQsIDB4MDEsIDB4MDUsIDB4NjksCisrCTB4ZTcsIDB4YWYsIDB4NWMsIDB4YzQsIDB4NjQsIDB4ODIsIDB4MTIsIDB4MjEsCisrCTB4ZWYsIDB4ZjcsIDB4ZDEsIDB4N2QsIDB4YjgsIDB4OGQsIDB4OGMsIDB4OTgsCisrCTB4N2MsIDB4NWYsIDB4N2QsIDB4OTIsIDB4ODgsIDB4YjksIDB4OTQsIDB4MDcsCisrCTB4OWMsIDB4ZDgsIDB4ZTksIDB4OWMsIDB4MTcsIDB4MzgsIDB4ZTMsIDB4NTcsCisrCTB4NmMsIDB4ZTAsIDB4ZGMsIDB4YTUsIDB4OTIsIDB4NDIsIDB4YjMsIDB4YmQsCisrCTB4NTAsIDB4YTIsIDB4N2UsIDB4YjUsIDB4YjEsIDB4NTIsIDB4NzIsIDB4MDMsCisrCTB4OTcsIDB4ZDgsIDB4YWEsIDB4OWEsIDB4MWUsIDB4NzUsIDB4NDEsIDB4MTEsCisrCTB4YTMsIDB4NGYsIDB4Y2MsIDB4ZDQsIDB4ZTMsIDB4NzMsIDB4YWQsIDB4OTYsCisrCTB4ZGMsIDB4NDcsIDB4NDEsIDB4OWYsIDB4YjAsIDB4YmUsIDB4NzksIDB4OTEsCisrCTB4ZjUsIDB4YjYsIDB4MTgsIDB4ZmUsIDB4YzIsIDB4ODMsIDB4MTgsIDB4N2QsCisrCTB4NzMsIDB4ZDksIDB4NGYsIDB4ODMsIDB4ODQsIDB4MDMsIDB4YjMsIDB4ZjAsCisrCTB4NzcsIDB4NjYsIDB4M2QsIDB4ODMsIDB4NjMsIDB4MmUsIDB4MmMsIDB4ZjksCisrCTB4ZGQsIDB4YTYsIDB4MWYsIDB4ODksIDB4ODIsIDB4YjgsIDB4MjMsIDB4NDIsCisrCTB4ZWIsIDB4ZTIsIDB4Y2EsIDB4NzAsIDB4ODIsIDB4NjEsIDB4NDEsIDB4MGEsCisrCTB4NmQsIDB4NWYsIDB4NzUsIDB4YzUsIDB4ZTIsIDB4YzQsIDB4OTEsIDB4MTgsCisrCTB4NDQsIDB4MjIsIDB4ZmEsIDB4MzQsIDB4MTAsIDB4ZjUsIDB4MjAsIDB4ZGMsCisrCTB4YjcsIDB4ZGQsIDB4MmEsIDB4MjAsIDB4NzcsIDB4ZjUsIDB4ZjksIDB4Y2UsCisrCTB4ZGIsIDB4YTAsIDB4MGEsIDB4NTIsIDB4MmEsIDB4NGUsIDB4ZGQsIDB4Y2MsCisrCTB4OTcsIDB4ZGYsIDB4MDUsIDB4ZTQsIDB4NWUsIDB4YjcsIDB4YWEsIDB4ZjAsCisrCTB4ZTIsIDB4ODAsIDB4ZmYsIDB4YmEsIDB4MWEsIDB4MGYsIDB4YWMsIDB4ZGYsCisrCTB4MDIsIDB4MzIsIDB4ZTYsIDB4ZjcsIDB4YzcsIDB4MTcsIDB4MTMsIDB4YjcsCisrCTB4ZmMsIDB4OTgsIDB4NDgsIDB4OGMsIDB4MGQsIDB4ODIsIDB4YzksIDB4ODAsCisrCTB4N2EsIDB4ZTIsIDB4MGEsIDB4YzUsIDB4YjQsIDB4ZGUsIDB4N2MsIDB4M2MsCisrCTB4NzksIDB4ODEsIDB4MGUsIDB4MjgsIDB4NjUsIDB4NzksIDB4NjcsIDB4ODIsCisrCTB4NjksIDB4NDQsIDB4NjYsIDB4MDksIDB4ZjcsIDB4MTYsIDB4MWEsIDB4ZjksCisrCTB4N2QsIDB4ODAsIDB4YTEsIDB4NzksIDB4MTQsIDB4YTksIDB4YzgsIDB4MjAsCisrCTB4ZmIsIDB4YTIsIDB4NDYsIDB4YmUsIDB4MDgsIDB4MzUsIDB4MTcsIDB4NTgsCisrCTB4YzEsIDB4MWEsIDB4ZGEsIDB4MmEsIDB4NmIsIDB4MmUsIDB4MWUsIDB4ZTYsCisrCTB4MjcsIDB4NTUsIDB4N2IsIDB4MTksIDB4ZTIsIDB4ZmIsIDB4NjQsIDB4ZmMsCisrCTB4NWUsIDB4MTUsIDB4NTQsIDB4M2MsIDB4ZTcsIDB4YzIsIDB4MTEsIDB4NTAsCisrCTB4MzAsIDB4YjgsIDB4NzIsIDB4MDMsIDB4MGIsIDB4MWEsIDB4OWYsIDB4ODYsCisrCTB4MjcsIDB4MTEsIDB4NWMsIDB4MDYsIDB4MmIsIDB4YmQsIDB4NzUsIDB4MWEsCisrCTB4MGEsIDB4ZGEsIDB4MDEsIDB4ZmEsIDB4NWMsIDB4NGEsIDB4YzEsIDB4ODAsCisrCTB4M2EsIDB4NmUsIDB4MzAsIDB4YzgsIDB4MmMsIDB4ZWIsIDB4NTYsIDB4ZWMsCisrCTB4ODksIDB4ZmEsIDB4MzUsIDB4N2IsIDB4YjIsIDB4ZjAsIDB4OTcsIDB4MDgsCisrCTB4ODYsIDB4NTMsIDB4YmUsIDB4YmQsIDB4NDAsIDB4NDEsIDB4MzgsIDB4MWMsCisrCTB4YjQsIDB4OGIsIDB4NzksIDB4MmUsIDB4MTgsIDB4OTYsIDB4OTQsIDB4ZGUsCisrCTB4ZTgsIDB4Y2EsIDB4ZTUsIDB4OWYsIDB4OTIsIDB4OWYsIDB4MTUsIDB4NWQsCisrCTB4NTYsIDB4NjAsIDB4NWMsIDB4MDksIDB4ZjksIDB4MTYsIDB4ZjQsIDB4MTcsCisrCTB4MGYsIDB4ZjYsIDB4NGMsIDB4ZGEsIDB4ZTYsIDB4NjcsIDB4ODksIDB4OWYsCisrCTB4Y2EsIDB4NmMsIDB4ZTcsIDB4OWIsIDB4MDQsIDB4NjIsIDB4MGUsIDB4MjYsCisrCTB4YTYsIDB4NTIsIDB4YmQsIDB4MjksIDB4ZmYsIDB4YzcsIDB4YTQsIDB4OTYsCisrCTB4ZTYsIDB4NmEsIDB4MDIsIDB4YTUsIDB4MmUsIDB4N2IsIDB4ZmUsIDB4OTcsCisrCTB4NjgsIDB4M2UsIDB4MmUsIDB4NWYsIDB4M2IsIDB4MGYsIDB4MzYsIDB4ZDYsCisrCTB4OTgsIDB4MTksIDB4NTksIDB4NDgsIDB4ZDIsIDB4YzYsIDB4ZTEsIDB4NTUsCisrCTB4MWEsIDB4NmUsIDB4ZDYsIDB4ZWQsIDB4MmMsIDB4YmEsIDB4YzMsIDB4OWUsCisrCTB4NjQsIDB4YzksIDB4OTUsIDB4ODYsIDB4MzUsIDB4NWUsIDB4M2UsIDB4ODgsCisrCTB4NjksIDB4OTksIDB4NGIsIDB4ZWUsIDB4YmUsIDB4OWEsIDB4OTksIDB4YjUsCisrCTB4NmUsIDB4NTgsIDB4YWUsIDB4ZGQsIDB4MjIsIDB4ZGIsIDB4ZGQsIDB4NmIsCisrCTB4ZmMsIDB4YWYsIDB4OTAsIDB4YTMsIDB4M2QsIDB4YTQsIDB4YzEsIDB4MTUsCisrCTB4OTIsIDB4MTgsIDB4OGQsIDB4ZDIsIDB4NGIsIDB4N2IsIDB4MDYsIDB4ZDEsCisrCTB4MzcsIDB4YjUsIDB4ZTIsIDB4N2MsIDB4MmMsIDB4ZjAsIDB4MjUsIDB4ZTQsCisrCTB4OTQsIDB4MmEsIDB4YmQsIDB4ZTMsIDB4ODIsIDB4NzAsIDB4NzgsIDB4YTMsCisrCTB4ODIsIDB4MTAsIDB4NWEsIDB4OTAsIDB4ZDcsIDB4YTQsIDB4ZmEsIDB4YWYsCisrCTB4MWEsIDB4ODgsIDB4NTksIDB4ZGMsIDB4NzQsIDB4MTIsIDB4YjQsIDB4OGUsCisrCTB4ZDcsIDB4MTksIDB4NDYsIDB4ZjQsIDB4ODQsIDB4NjksIDB4OWYsIDB4YmIsCisrCTB4NzAsIDB4YTgsIDB4NGMsIDB4NTIsIDB4ODEsIDB4YTksIDB4ZmYsIDB4NzYsCisrCTB4MWMsIDB4YWUsIDB4ZDgsIDB4MTEsIDB4M2QsIDB4N2YsIDB4N2QsIDB4YzUsCisrCTB4MTIsIDB4NTksIDB4MjgsIDB4MTgsIDB4YzIsIDB4YTIsIDB4YjcsIDB4MWMsCisrCTB4ODgsIDB4ZjgsIDB4ZDYsIDB4MWIsIDB4YTYsIDB4N2QsIDB4OWUsIDB4ZGUsCisrCTB4MjksIDB4ZjgsIDB4ZWQsIDB4ZmYsIDB4ZWIsIDB4OTIsIDB4MjQsIDB4NGYsCisrCTB4MDUsIDB4YWEsIDB4ZDksIDB4NDksIDB4YmEsIDB4ODcsIDB4NTksIDB4NTEsCisrCTB4YzksIDB4MjAsIDB4NWMsIDB4OWIsIDB4NzQsIDB4Y2YsIDB4MDMsIDB4ZDksCisrCTB4MmQsIDB4MzQsIDB4YzcsIDB4NWIsIDB4YTUsIDB4NDAsIDB4YjIsIDB4OTksCisrCTB4ZjUsIDB4Y2IsIDB4YjQsIDB4ZjYsIDB4YjcsIDB4NzIsIDB4NGEsIDB4ZDYsCisrCTB4YmQsIDB4YjAsIDB4ZjMsIDB4OTMsIDB4ZTAsIDB4MWIsIDB4YTgsIDB4MDQsCisrCTB4MWUsIDB4MzUsIDB4ZDQsIDB4ODAsIDB4MjAsIDB4ZjQsIDB4OWMsIDB4MzEsCisrCTB4NmIsIDB4NDUsIDB4YjksIDB4MTUsIDB4YjAsIDB4NWUsIDB4ZGQsIDB4MGEsCisrCTB4MzMsIDB4OWMsIDB4ODMsIDB4Y2QsIDB4NTgsIDB4ODksIDB4NTAsIDB4NTYsCisrCTB4YmIsIDB4ODEsIDB4MDAsIDB4OTEsIDB4MzIsIDB4ZjMsIDB4MWIsIDB4M2UsCisrCTB4Y2YsIDB4NDUsIDB4ZTEsIDB4ZjksIDB4ZTEsIDB4MmMsIDB4MjYsIDB4NzgsCisrCTB4OTMsIDB4OWEsIDB4NjAsIDB4NDYsIDB4YzksIDB4YjUsIDB4NWUsIDB4NmEsCisrCTB4MjgsIDB4OTIsIDB4ODcsIDB4M2YsIDB4NjMsIDB4N2IsIDB4ZGIsIDB4ZjcsCisrCTB4ZDAsIDB4MTMsIDB4OWQsIDB4MzIsIDB4NDAsIDB4NWUsIDB4Y2YsIDB4ZmIsCisrCTB4NzksIDB4NjgsIDB4NDcsIDB4NGMsIDB4ZmQsIDB4MDEsIDB4MTcsIDB4ZTYsCisrCTB4OTcsIDB4OTMsIDB4NzgsIDB4YmIsIDB4YTYsIDB4MjcsIDB4YTMsIDB4ZTgsCisrCTB4MWEsIDB4ZTgsIDB4OTQsIDB4NTUsIDB4N2QsIDB4MDgsIDB4ZTUsIDB4ZGMsCisrCTB4NjYsIDB4YTMsIDB4NjksIDB4YzgsIDB4Y2EsIDB4YzUsIDB4YTEsIDB4ODQsCisrCTB4NTUsIDB4ZGUsIDB4MDgsIDB4OTEsIDB4MTYsIDB4M2EsIDB4MGMsIDB4ODYsCisrCTB4YWIsIDB4MjcsIDB4MmIsIDB4NjQsIDB4MzQsIDB4MDIsIDB4NmMsIDB4NzYsCisrCTB4OGIsIDB4YzYsIDB4YWYsIDB4Y2MsIDB4ZTEsIDB4ZDYsIDB4OGMsIDB4MmEsCisrCTB4MTgsIDB4M2QsIDB4YTYsIDB4MWIsIDB4MzcsIDB4NzUsIDB4NDUsIDB4NzMsCisrCTB4YzIsIDB4NzUsIDB4ZDcsIDB4NTMsIDB4NzgsIDB4M2EsIDB4ZDYsIDB4ZTgsCisrCTB4MjksIDB4ZDIsIDB4NGEsIDB4YTgsIDB4MWUsIDB4ODIsIDB4ZjYsIDB4YjYsCisrCTB4ODEsIDB4ZGUsIDB4MjEsIDB4ZWQsIDB4MmIsIDB4NTYsIDB4YmIsIDB4ZjIsCisrCTB4ZDAsIDB4NTcsIDB4YzEsIDB4N2MsIDB4ZDIsIDB4NmEsIDB4ZDIsIDB4NTYsCisrCTB4ZjUsIDB4MTMsIDB4NWYsIDB4MWMsIDB4NmEsIDB4MGIsIDB4NzQsIDB4ZmIsCisrCTB4ZTksIDB4ZmUsIDB4OWUsIDB4ZWEsIDB4OTUsIDB4YjIsIDB4NDYsIDB4YWIsCisrCTB4MGEsIDB4ZmMsIDB4ZmQsIDB4ZjMsIDB4YmIsIDB4MDQsIDB4MmIsIDB4NzYsCisrCTB4MWIsIDB4YTQsIDB4NzQsIDB4YjAsIDB4YzEsIDB4NzgsIDB4YzMsIDB4NjksCisrCTB4ZTIsIDB4YjAsIDB4MDEsIDB4ZTEsIDB4ZGUsIDB4MzIsIDB4NGMsIDB4OGQsCisrCTB4MWEsIDB4YjMsIDB4MzgsIDB4MDgsIDB4ZDUsIDB4ZmMsIDB4MWYsIDB4ZGMsCisrCTB4MGUsIDB4MmMsIDB4OWMsIDB4YjEsIDB4YTEsIDB4NjMsIDB4MTcsIDB4MjIsCisrCTB4ZjUsIDB4NmMsIDB4OTMsIDB4NzAsIDB4NzQsIDB4MDAsIDB4ZjgsIDB4MzksCisrCTB4MDEsIDB4OTQsIDB4ZDEsIDB4MzIsIDB4MjMsIDB4NTYsIDB4NWQsIDB4YTYsCisrCTB4MDIsIDB4NzYsIDB4NzYsIDB4OTMsIDB4Y2UsIDB4MmYsIDB4MTksIDB4ZTksCisrCTB4MTcsIDB4NTIsIDB4YWUsIDB4NmUsIDB4MmMsIDB4NmQsIDB4NjEsIDB4N2YsCisrCTB4M2IsIDB4YWEsIDB4ZTAsIDB4NTIsIDB4ODUsIDB4YzUsIDB4NjUsIDB4YzEsCisrCTB4YmIsIDB4OGUsIDB4NWIsIDB4MjEsIDB4ZDUsIDB4YzksIDB4NzgsIDB4ODMsCisrCTB4MDcsIDB4OTcsIDB4NGMsIDB4NjIsIDB4NjEsIDB4NDEsIDB4ZDQsIDB4ZmMsCisrCTB4YzksIDB4MzksIDB4ZTMsIDB4OWIsIDB4ZDAsIDB4Y2MsIDB4NzUsIDB4YzQsCisrCTB4OTcsIDB4ZTYsIDB4ZGQsIDB4MmEsIDB4NWYsIDB4YTYsIDB4ZTgsIDB4NTksCisrCTB4NmMsIDB4OTgsIDB4YjksIDB4MDIsIDB4ZTIsIDB4YTIsIDB4ZDYsIDB4NjgsCisrCTB4ZWUsIDB4M2IsIDB4MWQsIDB4ZTMsIDB4NGQsIDB4NWIsIDB4MzAsIDB4ZWYsCisrCTB4MDMsIDB4ZjIsIDB4ZWIsIDB4MTgsIDB4NTcsIDB4MzYsIDB4ZTgsIDB4YTEsCisrCTB4ZjQsIDB4NDcsIDB4ZmIsIDB4Y2IsIDB4OGYsIDB4Y2IsIDB4YzgsIDB4ZjMsCisrCTB4NGYsIDB4NzQsIDB4OWQsIDB4OWQsIDB4YjEsIDB4OGQsIDB4MTQsIDB4NDQsCisrCTB4ZDksIDB4MTksIDB4YjQsIDB4NTQsIDB4NGYsIDB4NzUsIDB4MTksIDB4MDksCisrCTB4YTAsIDB4NzUsIDB4YmMsIDB4M2IsIDB4ODIsIDB4YzYsIDB4M2YsIDB4YjgsCisrCTB4ODMsIDB4MTksIDB4NmUsIDB4ZDYsIDB4MzcsIDB4ZmUsIDB4NmUsIDB4OGEsCisrCTB4NGUsIDB4ZTAsIDB4NGEsIDB4YWIsIDB4N2IsIDB4YzgsIDB4YjQsIDB4MWQsCisrCTB4ZjQsIDB4ZWQsIDB4MjcsIDB4MDMsIDB4NjUsIDB4YTIsIDB4YTEsIDB4YWUsCisrCTB4MTEsIDB4ZTcsIDB4OTgsIDB4NzgsIDB4NDgsIDB4OTEsIDB4ZDIsIDB4ZDIsCisrCTB4ZDQsIDB4MjMsIDB4NzgsIDB4NTAsIDB4YjEsIDB4NWIsIDB4ODUsIDB4MTAsCisrCTB4OGQsIDB4Y2EsIDB4NWYsIDB4MGYsIDB4NzEsIDB4YWUsIDB4NzIsIDB4OWEsCisrCTB4ZjYsIDB4MjUsIDB4MTksIDB4NjAsIDB4MDYsIDB4ZjcsIDB4MTAsIDB4MzQsCisrCTB4MTgsIDB4MGQsIDB4YzksIDB4OWYsIDB4N2IsIDB4MGMsIDB4OWIsIDB4OGYsCisrCTB4OTEsIDB4MWIsIDB4OWYsIDB4Y2QsIDB4MTAsIDB4ZWUsIDB4NzUsIDB4ZjksCisrCTB4OTcsIDB4NjYsIDB4ZmMsIDB4NGQsIDB4MzMsIDB4NmUsIDB4MjgsIDB4MmIsCisrCTB4OTIsIDB4ODUsIDB4NGYsIDB4YWIsIDB4NDMsIDB4OGQsIDB4OGYsIDB4N2QsCisrCTB4ODYsIDB4YTcsIDB4YzcsIDB4ZDgsIDB4ZDMsIDB4MGIsIDB4OGIsIDB4NTcsCisrCTB4YjYsIDB4MWQsIDB4OTUsIDB4MGQsIDB4ZTksIDB4YmMsIDB4ZDksIDB4MDMsCisrCTB4ZDksIDB4MTAsIDB4MTksIDB4YzMsIDB4NDYsIDB4NjMsIDB4NTUsIDB4ODcsCisrCTB4NjEsIDB4NzksIDB4NmMsIDB4OTUsIDB4MGUsIDB4OWMsIDB4ZGQsIDB4Y2EsCisrCTB4YzMsIDB4ZjMsIDB4NjQsIDB4ZjAsIDB4N2QsIDB4NzYsIDB4YjcsIDB4NTMsCisrCTB4NjcsIDB4MmIsIDB4MWUsIDB4NDQsIDB4NTYsIDB4ODEsIDB4ZWEsIDB4OGYsCisrCTB4NWMsIDB4NDIsIDB4MTYsIDB4YjgsIDB4MjgsIDB4ZWIsIDB4MWIsIDB4NjEsCisrCTB4MTAsIDB4MWUsIDB4YmYsIDB4ZWMsIDB4YTgKKyt9OworK3N0YXRpYyBjb25zdCB1OCBkZWNfYXNzb2MwMTFbXSBfX2luaXRjb25zdCA9IHsKKysJMHhkNiwgMHgzMSwgMHhkYSwgMHg1ZCwgMHg0MiwgMHg1ZSwgMHhkNworK307Cisrc3RhdGljIGNvbnN0IHU4IGRlY19ub25jZTAxMVtdIF9faW5pdGNvbnN0ID0geworKwkweGZkLCAweDg3LCAweGQ0LCAweGQ4LCAweDYyLCAweGZkLCAweGVjLCAweGFhCisrfTsKKytzdGF0aWMgY29uc3QgdTggZGVjX2tleTAxMVtdIF9faW5pdGNvbnN0ID0geworKwkweDM1LCAweDRlLCAweGI1LCAweDcwLCAweDUwLCAweDQyLCAweDhhLCAweDg1LAorKwkweGYyLCAweGZiLCAweGVkLCAweDdiLCAweGQwLCAweDllLCAweDk3LCAweGNhLAorKwkweGZhLCAweDk4LCAweDY2LCAweDYzLCAweGVlLCAweDM3LCAweGNjLCAweDUyLAorKwkweGZlLCAweGQxLCAweGRmLCAweDk1LCAweDE1LCAweDM0LCAweDI5LCAweDM4CisrfTsKKysKKytzdGF0aWMgY29uc3QgdTggZGVjX2lucHV0MDEyW10gX19pbml0Y29uc3QgPSB7CisrCTB4NTIsIDB4MzQsIDB4YjMsIDB4NjUsIDB4M2IsIDB4YjcsIDB4ZTUsIDB4ZDMsCisrCTB4YWIsIDB4NDksIDB4MTcsIDB4NjAsIDB4ZDIsIDB4NTIsIDB4NTYsIDB4ZGYsCisrCTB4ZGYsIDB4MzQsIDB4NTYsIDB4ODIsIDB4ZTIsIDB4YmUsIDB4ZTUsIDB4ZTEsCisrCTB4MjgsIDB4ZDEsIDB4NGUsIDB4NWYsIDB4NGYsIDB4MDEsIDB4N2QsIDB4M2YsCisrCTB4OTksIDB4NmIsIDB4MzAsIDB4NmUsIDB4MWEsIDB4N2MsIDB4NGMsIDB4OGUsCisrCTB4NjIsIDB4ODEsIDB4YWUsIDB4ODYsIDB4M2YsIDB4NmIsIDB4ZDAsIDB4YjUsCisrCTB4YTksIDB4Y2YsIDB4NTAsIDB4ZjEsIDB4MDIsIDB4MTIsIDB4YTAsIDB4MGIsCisrCTB4MjQsIDB4ZTksIDB4ZTYsIDB4NzIsIDB4ODksIDB4MmMsIDB4NTIsIDB4MWIsCisrCTB4MzQsIDB4MzgsIDB4ZjgsIDB4NzUsIDB4NWYsIDB4YTAsIDB4NzQsIDB4ZTIsCisrCTB4OTksIDB4ZGQsIDB4YTYsIDB4NGIsIDB4MTQsIDB4NTAsIDB4NGUsIDB4ZjEsCisrCTB4YmUsIDB4ZDYsIDB4OWUsIDB4ZGIsIDB4YjIsIDB4MjQsIDB4MjcsIDB4NzQsCisrCTB4MTIsIDB4NGEsIDB4NzgsIDB4NzgsIDB4MTcsIDB4YTUsIDB4NTgsIDB4OGUsCisrCTB4MmYsIDB4ZjksIDB4ZjQsIDB4OGQsIDB4ZWUsIDB4MDMsIDB4ODgsIDB4YWUsCisrCTB4YjgsIDB4MjksIDB4YTEsIDB4MmYsIDB4NGIsIDB4ZWUsIDB4OTIsIDB4YmQsCisrCTB4ODcsIDB4YjMsIDB4Y2UsIDB4MzQsIDB4MjEsIDB4NTcsIDB4NDYsIDB4MDQsCisrCTB4NDksIDB4MGMsIDB4ODAsIDB4ZjIsIDB4MDEsIDB4MTMsIDB4YTEsIDB4NTUsCisrCTB4YjMsIDB4ZmYsIDB4NDQsIDB4MzAsIDB4M2MsIDB4MWMsIDB4ZDAsIDB4ZWYsCisrCTB4YmMsIDB4MTgsIDB4NzQsIDB4MjYsIDB4YWQsIDB4NDEsIDB4NWIsIDB4NWIsCisrCTB4M2UsIDB4OWEsIDB4N2EsIDB4NDYsIDB4NGYsIDB4MTYsIDB4ZDYsIDB4NzQsCisrCTB4NWEsIDB4YjcsIDB4M2EsIDB4MjgsIDB4MzEsIDB4ZDgsIDB4YWUsIDB4MjYsCisrCTB4YWMsIDB4NTAsIDB4NTMsIDB4ODYsIDB4ZjIsIDB4NTYsIDB4ZDcsIDB4M2YsCisrCTB4MjksIDB4YmMsIDB4NDUsIDB4NjgsIDB4OGUsIDB4Y2IsIDB4OTgsIDB4NjQsCisrCTB4ZGQsIDB4YzksIDB4YmEsIDB4YjgsIDB4NGIsIDB4N2IsIDB4ODIsIDB4ZGQsCisrCTB4MTQsIDB4YTcsIDB4Y2IsIDB4NzEsIDB4NzIsIDB4MDAsIDB4NWMsIDB4YWQsCisrCTB4N2IsIDB4NmEsIDB4ODksIDB4YTQsIDB4M2QsIDB4YmYsIDB4YjUsIDB4NGIsCisrCTB4M2UsIDB4N2MsIDB4NWEsIDB4Y2YsIDB4YjgsIDB4YTEsIDB4YzUsIDB4NmUsCisrCTB4YzgsIDB4YjYsIDB4MzEsIDB4NTcsIDB4N2IsIDB4ZGYsIDB4YTUsIDB4N2UsCisrCTB4YjEsIDB4ZDYsIDB4NDIsIDB4MmEsIDB4MzEsIDB4MzYsIDB4ZDEsIDB4ZDAsCisrCTB4M2YsIDB4N2EsIDB4ZTUsIDB4OTQsIDB4ZDYsIDB4MzYsIDB4YTAsIDB4NmYsCisrCTB4YjcsIDB4NDAsIDB4N2QsIDB4MzcsIDB4YzYsIDB4NTUsIDB4N2MsIDB4NTAsCisrCTB4NDAsIDB4NmQsIDB4MjksIDB4ODksIDB4ZTMsIDB4NWEsIDB4YWUsIDB4OTcsCisrCTB4ZTcsIDB4NDQsIDB4NDksIDB4NmUsIDB4YmQsIDB4ODEsIDB4M2QsIDB4MDMsCisrCTB4OTMsIDB4MDYsIDB4MTIsIDB4MDYsIDB4ZTIsIDB4NDEsIDB4MTIsIDB4NGEsCisrCTB4ZjEsIDB4NmEsIDB4YTQsIDB4NTgsIDB4YTIsIDB4ZmIsIDB4ZDIsIDB4MTUsCisrCTB4YmEsIDB4YzksIDB4NzksIDB4YzksIDB4Y2UsIDB4NWUsIDB4MTMsIDB4YmIsCisrCTB4ZjEsIDB4MDksIDB4MDQsIDB4Y2MsIDB4ZmQsIDB4ZTgsIDB4NTEsIDB4MzQsCisrCTB4NmEsIDB4ZTgsIDB4NjEsIDB4ODgsIDB4ZGEsIDB4ZWQsIDB4MDEsIDB4NDcsCisrCTB4ODQsIDB4ZjUsIDB4NzMsIDB4MjUsIDB4ZjksIDB4MWMsIDB4NDIsIDB4ODYsCisrCTB4MDcsIDB4ZjMsIDB4NWIsIDB4MWEsIDB4MDEsIDB4YjMsIDB4ZWIsIDB4MjQsCisrCTB4MzIsIDB4OGQsIDB4ZjYsIDB4ZWQsIDB4N2MsIDB4NGIsIDB4ZWIsIDB4M2MsCisrCTB4MzYsIDB4NDIsIDB4MjgsIDB4ZGYsIDB4ZGYsIDB4YjYsIDB4YmUsIDB4ZDksCisrCTB4OGMsIDB4NTIsIDB4ZDMsIDB4MmIsIDB4MDgsIDB4OTAsIDB4OGMsIDB4ZTcsCisrCTB4OTgsIDB4MzEsIDB4ZTIsIDB4MzIsIDB4OGUsIDB4ZmMsIDB4MTEsIDB4NDgsCisrCTB4MDAsIDB4YTgsIDB4NmEsIDB4NDIsIDB4NGEsIDB4MDIsIDB4YzYsIDB4NGIsCisrCTB4MDksIDB4ZjEsIDB4ZTMsIDB4NDksIDB4ZjMsIDB4NDUsIDB4MWYsIDB4MGUsCisrCTB4YmMsIDB4NTYsIDB4ZTIsIDB4ZTQsIDB4ZGYsIDB4ZmIsIDB4ZWIsIDB4NjEsCisrCTB4ZmEsIDB4MjQsIDB4YzEsIDB4NjMsIDB4NzUsIDB4YmIsIDB4NDcsIDB4NzUsCisrCTB4YWYsIDB4ZTEsIDB4NTMsIDB4MTYsIDB4OTYsIDB4MjEsIDB4ODUsIDB4MjYsCisrCTB4MTEsIDB4YjMsIDB4NzYsIDB4ZTMsIDB4MjMsIDB4YTEsIDB4NmIsIDB4NzQsCisrCTB4MzcsIDB4ZDAsIDB4ZGUsIDB4MDYsIDB4OTAsIDB4NzEsIDB4NWQsIDB4NDMsCisrCTB4ODgsIDB4OWIsIDB4MDAsIDB4NTQsIDB4YTYsIDB4NzUsIDB4MmYsIDB4YTEsCisrCTB4YzIsIDB4MGIsIDB4NzMsIDB4MjAsIDB4MWQsIDB4YjYsIDB4MjEsIDB4NzksCisrCTB4NTcsIDB4M2YsIDB4ZmEsIDB4MDksIDB4YmUsIDB4OGEsIDB4MzMsIDB4YzMsCisrCTB4NTIsIDB4ZjAsIDB4MWQsIDB4ODIsIDB4MzEsIDB4ZDEsIDB4NTUsIDB4YjUsCisrCTB4NmMsIDB4OTksIDB4MjUsIDB4Y2YsIDB4NWMsIDB4MzIsIDB4Y2UsIDB4ZTksCisrCTB4MGQsIDB4ZmEsIDB4NjksIDB4MmMsIDB4ZDUsIDB4MGQsIDB4YzUsIDB4NmQsCisrCTB4ODYsIDB4ZDAsIDB4MGMsIDB4M2IsIDB4MDYsIDB4NTAsIDB4NzksIDB4ZTgsCisrCTB4YzMsIDB4YWUsIDB4MDQsIDB4ZTYsIDB4Y2QsIDB4NTEsIDB4ZTQsIDB4MjYsCisrCTB4OWIsIDB4NGYsIDB4N2UsIDB4YTYsIDB4MGYsIDB4YWIsIDB4ZDgsIDB4ZTUsCisrCTB4ZGUsIDB4YTksIDB4MDAsIDB4OTUsIDB4YmUsIDB4YTMsIDB4OWQsIDB4NWQsCisrCTB4YjIsIDB4MDksIDB4NzAsIDB4MTgsIDB4MWMsIDB4ZjAsIDB4YWMsIDB4MjksCisrCTB4MjMsIDB4MDIsIDB4MjksIDB4MjgsIDB4ZDIsIDB4NzQsIDB4MzUsIDB4NTcsCisrCTB4NjIsIDB4MGYsIDB4MjQsIDB4ZWEsIDB4NWUsIDB4MzMsIDB4YzIsIDB4OTIsCisrCTB4ZjMsIDB4NzgsIDB4NGQsIDB4MzAsIDB4MWUsIDB4YTEsIDB4OTksIDB4YTksCisrCTB4ODIsIDB4YjAsIDB4NDIsIDB4MzEsIDB4OGQsIDB4YWQsIDB4OGEsIDB4YmMsCisrCTB4ZmMsIDB4ZDQsIDB4NTcsIDB4NDcsIDB4M2UsIDB4YjQsIDB4NTAsIDB4ZGQsCisrCTB4NmUsIDB4MmMsIDB4ODAsIDB4NGQsIDB4MjIsIDB4ZjEsIDB4ZmIsIDB4NTcsCisrCTB4YzQsIDB4ZGQsIDB4MTcsIDB4ZTEsIDB4OGEsIDB4MzYsIDB4NGEsIDB4YjMsCisrCTB4MzcsIDB4Y2EsIDB4YzksIDB4NGUsIDB4YWIsIDB4ZDUsIDB4NjksIDB4YzQsCisrCTB4ZjQsIDB4YmMsIDB4MGIsIDB4M2IsIDB4NDQsIDB4NGIsIDB4MjksIDB4OWMsCisrCTB4ZWUsIDB4ZDQsIDB4MzUsIDB4MjIsIDB4MjEsIDB4YjAsIDB4MWYsIDB4MjcsCisrCTB4NjQsIDB4YTgsIDB4NTEsIDB4MWIsIDB4ZjAsIDB4OWYsIDB4MTksIDB4NWMsCisrCTB4ZmIsIDB4NWEsIDB4NjQsIDB4NzQsIDB4NzAsIDB4NDUsIDB4MDksIDB4ZjUsCisrCTB4NjQsIDB4ZmUsIDB4MWEsIDB4MmQsIDB4YzksIDB4MTQsIDB4MDQsIDB4MTQsCisrCTB4Y2YsIDB4ZDUsIDB4N2QsIDB4NjAsIDB4YWYsIDB4OTQsIDB4MzksIDB4OTQsCisrCTB4ZTIsIDB4N2QsIDB4NzksIDB4ODIsIDB4ZDAsIDB4NjUsIDB4M2IsIDB4NmIsCisrCTB4OWMsIDB4MTksIDB4ODQsIDB4YjQsIDB4NmQsIDB4YjMsIDB4MGMsIDB4OTksCisrCTB4YzAsIDB4NTYsIDB4YTgsIDB4YmQsIDB4NzMsIDB4Y2UsIDB4MDUsIDB4ODQsCisrCTB4M2UsIDB4MzAsIDB4YWEsIDB4YzQsIDB4OWIsIDB4MWIsIDB4MDQsIDB4MmEsCisrCTB4OWYsIDB4ZDcsIDB4NDMsIDB4MmIsIDB4MjMsIDB4ZGYsIDB4YmYsIDB4YWEsCisrCTB4ZDUsIDB4YzIsIDB4NDMsIDB4MmQsIDB4NzAsIDB4YWIsIDB4ZGMsIDB4NzUsCisrCTB4YWQsIDB4YWMsIDB4ZjcsIDB4YzAsIDB4YmUsIDB4NjcsIDB4YjIsIDB4NzQsCisrCTB4ZWQsIDB4NjcsIDB4MTAsIDB4NGEsIDB4OTIsIDB4NjAsIDB4YzEsIDB4NDAsCisrCTB4NTAsIDB4MTksIDB4OGEsIDB4OGEsIDB4OGMsIDB4MDksIDB4MGUsIDB4NzIsCisrCTB4ZTEsIDB4NzMsIDB4NWUsIDB4ZTgsIDB4NDEsIDB4ODUsIDB4NjMsIDB4OWYsCisrCTB4M2YsIDB4ZDcsIDB4N2QsIDB4YzQsIDB4ZmIsIDB4MjIsIDB4NWQsIDB4OTIsCisrCTB4NmMsIDB4YjMsIDB4MWUsIDB4ZTIsIDB4NTAsIDB4MmYsIDB4ODIsIDB4YTgsCisrCTB4MjgsIDB4YzAsIDB4YjUsIDB4ZDcsIDB4NWYsIDB4NjgsIDB4MGQsIDB4MmMsCisrCTB4MmQsIDB4YWYsIDB4N2UsIDB4ZmEsIDB4MmUsIDB4MDgsIDB4MGYsIDB4MWYsCisrCTB4NzAsIDB4OWYsIDB4ZTksIDB4MTksIDB4NzIsIDB4NTUsIDB4ZjgsIDB4ZmIsCisrCTB4NTEsIDB4ZDIsIDB4MzMsIDB4NWQsIDB4YTAsIDB4ZDMsIDB4MmIsIDB4MGEsCisrCTB4NmMsIDB4YmMsIDB4NGUsIDB4Y2YsIDB4MzYsIDB4NGQsIDB4ZGMsIDB4M2IsCisrCTB4ZTksIDB4M2UsIDB4ODEsIDB4N2MsIDB4NjEsIDB4ZGIsIDB4MjAsIDB4MmQsCisrCTB4M2EsIDB4YzMsIDB4YjMsIDB4MGMsIDB4MWUsIDB4MDAsIDB4YjksIDB4N2MsCisrCTB4ZjUsIDB4Y2EsIDB4MTAsIDB4NWYsIDB4M2EsIDB4NzEsIDB4YjMsIDB4ZTQsCisrCTB4MjAsIDB4ZGIsIDB4MGMsIDB4MmEsIDB4OTgsIDB4NjMsIDB4NDUsIDB4MDAsCisrCTB4NTgsIDB4ZjYsIDB4NjgsIDB4ZTQsIDB4MGIsIDB4ZGEsIDB4MTMsIDB4M2IsCisrCTB4NjAsIDB4NWMsIDB4NzYsIDB4ZGIsIDB4YjksIDB4OTcsIDB4NzEsIDB4ZTQsCisrCTB4ZDksIDB4YjcsIDB4ZGIsIDB4YmQsIDB4NjgsIDB4YzcsIDB4ODQsIDB4ODQsCisrCTB4YWEsIDB4N2MsIDB4NjgsIDB4NjIsIDB4NWUsIDB4MTYsIDB4ZmMsIDB4YmEsCisrCTB4NzIsIDB4YWEsIDB4OWEsIDB4YTksIDB4ZWIsIDB4N2MsIDB4NzUsIDB4NDcsCisrCTB4OTcsIDB4N2UsIDB4YWQsIDB4ZTIsIDB4ZDksIDB4OTEsIDB4ZTgsIDB4ZTQsCisrCTB4YTUsIDB4MzEsIDB4ZDcsIDB4MDEsIDB4OGUsIDB4YTIsIDB4MTEsIDB4ODgsCisrCTB4OTUsIDB4YjksIDB4ZjIsIDB4OWIsIDB4ZDMsIDB4N2YsIDB4MWIsIDB4ODEsCisrCTB4MjIsIDB4ZjcsIDB4OTgsIDB4NjAsIDB4MGEsIDB4NjQsIDB4YTYsIDB4YzEsCisrCTB4ZjYsIDB4NDksIDB4YzcsIDB4ZTMsIDB4MDcsIDB4NGQsIDB4OTQsIDB4N2EsCisrCTB4Y2YsIDB4NmUsIDB4NjgsIDB4MGMsIDB4MWIsIDB4M2YsIDB4NmUsIDB4MmUsCisrCTB4ZWUsIDB4OTIsIDB4ZmEsIDB4NTIsIDB4YjMsIDB4NTksIDB4ZjgsIDB4ZjEsCisrCTB4OGYsIDB4NmEsIDB4NjYsIDB4YTMsIDB4ODIsIDB4NzYsIDB4NGEsIDB4MDcsCisrCTB4MWEsIDB4YzcsIDB4ZGQsIDB4ZjUsIDB4ZGEsIDB4OWMsIDB4M2MsIDB4MjQsCisrCTB4YmYsIDB4ZmQsIDB4NDIsIDB4YTEsIDB4MTAsIDB4NjQsIDB4NmEsIDB4MGYsCisrCTB4ODksIDB4ZWUsIDB4MzYsIDB4YTUsIDB4Y2UsIDB4OTksIDB4NDgsIDB4NmEsCisrCTB4ZjAsIDB4OWYsIDB4OWUsIDB4NjksIDB4YTQsIDB4NDAsIDB4MjAsIDB4ZTksCisrCTB4MTYsIDB4MTUsIDB4ZjcsIDB4ZGIsIDB4NzUsIDB4MDIsIDB4Y2IsIDB4ZTksCisrCTB4NzMsIDB4OGIsIDB4M2IsIDB4NDksIDB4MmYsIDB4ZjAsIDB4YWYsIDB4NTEsCisrCTB4MDYsIDB4NWMsIDB4ZGYsIDB4MjcsIDB4MjcsIDB4NDksIDB4NmEsIDB4ZDEsCisrCTB4Y2MsIDB4YzcsIDB4YjUsIDB4NjMsIDB4YjUsIDB4ZmMsIDB4YjgsIDB4NWMsCisrCTB4ODcsIDB4N2YsIDB4ODQsIDB4YjQsIDB4Y2MsIDB4MTQsIDB4YTksIDB4NTMsCisrCTB4ZGEsIDB4YTQsIDB4NTYsIDB4ZjgsIDB4YjYsIDB4MWIsIDB4Y2MsIDB4NDAsCisrCTB4MjcsIDB4NTIsIDB4MDYsIDB4NWEsIDB4MTMsIDB4ODEsIDB4ZDcsIDB4M2EsCisrCTB4ZDQsIDB4M2IsIDB4ZmIsIDB4NDksIDB4NjUsIDB4MzEsIDB4MzMsIDB4YjIsCisrCTB4ZmEsIDB4Y2QsIDB4YWQsIDB4NTgsIDB4NGUsIDB4MmIsIDB4YWUsIDB4ZDIsCisrCTB4MjAsIDB4ZmIsIDB4MWEsIDB4NDgsIDB4YjQsIDB4M2YsIDB4OWEsIDB4ZDgsCisrCTB4N2EsIDB4MzUsIDB4NGEsIDB4YzgsIDB4ZWUsIDB4ODgsIDB4NWUsIDB4MDcsCisrCTB4NjYsIDB4NTQsIDB4YjksIDB4ZWMsIDB4OWYsIDB4YTMsIDB4ZTMsIDB4YjksCisrCTB4MzcsIDB4YWEsIDB4NDksIDB4NzYsIDB4MzEsIDB4ZGEsIDB4NzQsIDB4MmQsCisrCTB4M2MsIDB4YTQsIDB4NjUsIDB4MTAsIDB4MzIsIDB4MzgsIDB4ZjAsIDB4ZGUsCisrCTB4ZDMsIDB4OTksIDB4MTcsIDB4YWEsIDB4NzEsIDB4YWEsIDB4OGYsIDB4MGYsCisrCTB4OGMsIDB4YWYsIDB4YTIsIDB4ZjgsIDB4NWQsIDB4NjQsIDB4YmEsIDB4MWQsCisrCTB4YTMsIDB4ZWYsIDB4OTYsIDB4NzMsIDB4ZTgsIDB4YTEsIDB4MDIsIDB4OGQsCisrCTB4MGMsIDB4NmQsIDB4YjgsIDB4MDYsIDB4OTAsIDB4YjgsIDB4MDgsIDB4NTYsCisrCTB4MmMsIDB4YTcsIDB4MDYsIDB4YzksIDB4YzIsIDB4MzgsIDB4ZGIsIDB4N2MsCisrCTB4NjMsIDB4YjEsIDB4NTcsIDB4OGUsIDB4ZWEsIDB4N2MsIDB4NzksIDB4ZjMsCisrCTB4NDksIDB4MWQsIDB4ZmUsIDB4OWYsIDB4ZjMsIDB4NmUsIDB4YjEsIDB4MWQsCisrCTB4YmEsIDB4MTksIDB4ODAsIDB4MWEsIDB4MGEsIDB4ZDMsIDB4YjAsIDB4MjYsCisrCTB4MjEsIDB4NDAsIDB4YjEsIDB4N2MsIDB4ZjksIDB4NGQsIDB4OGQsIDB4MTAsCisrCTB4YzEsIDB4N2UsIDB4ZjQsIDB4ZjYsIDB4M2MsIDB4YTgsIDB4ZmQsIDB4N2MsCisrCTB4YTMsIDB4OTIsIDB4YjIsIDB4MGYsIDB4YWEsIDB4Y2MsIDB4YTYsIDB4MTEsCisrCTB4ZmUsIDB4MDQsIDB4ZTMsIDB4ZDEsIDB4N2EsIDB4MzIsIDB4ODksIDB4ZGYsCisrCTB4MGQsIDB4YzQsIDB4OGYsIDB4NzksIDB4NmIsIDB4Y2EsIDB4MTYsIDB4N2MsCisrCTB4NmUsIDB4ZjksIDB4YWQsIDB4MGYsIDB4ZjYsIDB4ZmUsIDB4MjcsIDB4ZGIsCisrCTB4YzQsIDB4MTMsIDB4NzAsIDB4ZjEsIDB4NjIsIDB4MWEsIDB4NGYsIDB4NzksCisrCTB4NDAsIDB4YzksIDB4OWIsIDB4OGIsIDB4MjEsIDB4ZWEsIDB4ODQsIDB4ZmEsCisrCTB4ZjUsIDB4ZjEsIDB4ODksIDB4Y2UsIDB4YjcsIDB4NTUsIDB4MGEsIDB4ODAsCisrCTB4MzksIDB4MmYsIDB4NTUsIDB4MzYsIDB4MTYsIDB4OWMsIDB4N2IsIDB4MDgsCisrCTB4YmQsIDB4ODcsIDB4MGQsIDB4YTUsIDB4MzIsIDB4ZjEsIDB4NTIsIDB4N2MsCisrCTB4ZTgsIDB4NTUsIDB4NjAsIDB4NWIsIDB4ZDcsIDB4NjksIDB4ZTQsIDB4ZmMsCisrCTB4ZmEsIDB4MTIsIDB4ODUsIDB4OTYsIDB4ZWEsIDB4NTAsIDB4MjgsIDB4YWIsCisrCTB4OGEsIDB4ZjcsIDB4YmIsIDB4MGUsIDB4NTMsIDB4NzQsIDB4Y2EsIDB4YTYsCisrCTB4MjcsIDB4MDksIDB4YzIsIDB4YjUsIDB4ZGUsIDB4MTgsIDB4MTQsIDB4ZDksCisrCTB4ZWEsIDB4ZTUsIDB4MjksIDB4MWMsIDB4NDAsIDB4NTYsIDB4Y2YsIDB4ZDcsCisrCTB4YWUsIDB4MDUsIDB4M2YsIDB4NjUsIDB4YWYsIDB4MDUsIDB4NzMsIDB4ZTIsCisrCTB4MzUsIDB4OTYsIDB4MjcsIDB4MDcsIDB4MTQsIDB4YzAsIDB4YWQsIDB4MzMsCisrCTB4ZjEsIDB4ZGMsIDB4NDQsIDB4N2EsIDB4ODksIDB4MTcsIDB4NzcsIDB4ZDIsCisrCTB4OWMsIDB4NTgsIDB4NjAsIDB4ZjAsIDB4M2YsIDB4N2IsIDB4MmQsIDB4MmUsCisrCTB4NTcsIDB4OTUsIDB4NTQsIDB4ODcsIDB4ZWQsIDB4ZjIsIDB4YzcsIDB4NGMsCisrCTB4ZjAsIDB4YWUsIDB4NTYsIDB4MjksIDB4MTksIDB4N2QsIDB4NjYsIDB4NGIsCisrCTB4OWIsIDB4ODMsIDB4ODQsIDB4NDIsIDB4M2IsIDB4MDEsIDB4MjUsIDB4NjYsCisrCTB4OGUsIDB4MDIsIDB4ZGUsIDB4YjksIDB4ODMsIDB4NTQsIDB4MTksIDB4ZjYsCisrCTB4OWYsIDB4NzksIDB4MGQsIDB4NjcsIDB4YzUsIDB4MWQsIDB4N2EsIDB4NDQsCisrCTB4MDIsIDB4OTgsIDB4YTcsIDB4MTYsIDB4MWMsIDB4MjksIDB4MGQsIDB4NzQsCisrCTB4ZmYsIDB4ODUsIDB4NDAsIDB4MDYsIDB4ZWYsIDB4MmMsIDB4YTksIDB4YzYsCisrCTB4ZjUsIDB4NTMsIDB4MDcsIDB4MDYsIDB4YWUsIDB4ZTQsIDB4ZmEsIDB4NWYsCisrCTB4ZDgsIDB4MzksIDB4NGQsIDB4ZjEsIDB4OWIsIDB4NmIsIDB4ZDksIDB4MjQsCisrCTB4ODQsIDB4ZmUsIDB4MDMsIDB4NGMsIDB4YjIsIDB4M2YsIDB4ZGYsIDB4YTEsCisrCTB4MDUsIDB4OWUsIDB4NTAsIDB4MTQsIDB4NWEsIDB4ZDksIDB4MWEsIDB4YTIsCisrCTB4YTcsIDB4ZmEsIDB4ZmEsIDB4MTcsIDB4ZjcsIDB4NzgsIDB4ZDYsIDB4YjUsCisrCTB4OTIsIDB4NjEsIDB4OTEsIDB4YWMsIDB4MzYsIDB4ZmEsIDB4NTYsIDB4MGQsCisrCTB4MzgsIDB4MzIsIDB4MTgsIDB4ODUsIDB4MDgsIDB4NTgsIDB4MzcsIDB4ZjAsCisrCTB4NGIsIDB4ZGIsIDB4NTksIDB4ZTcsIDB4YTQsIDB4MzQsIDB4YzAsIDB4MWIsCisrCTB4MDEsIDB4YWYsIDB4MmQsIDB4ZGUsIDB4YTEsIDB4YWEsIDB4NWQsIDB4ZDMsCisrCTB4ZWMsIDB4ZTEsIDB4ZDQsIDB4ZjcsIDB4ZTYsIDB4NTQsIDB4NjgsIDB4ZjAsCisrCTB4NTEsIDB4OTcsIDB4YTcsIDB4ODksIDB4ZWEsIDB4MjQsIDB4YWQsIDB4ZDMsCisrCTB4NmUsIDB4NDcsIDB4OTMsIDB4OGIsIDB4NGIsIDB4YjQsIDB4ZjcsIDB4MWMsCisrCTB4NDIsIDB4MDYsIDB4NjcsIDB4ZTgsIDB4OTksIDB4ZjYsIDB4ZjUsIDB4N2IsCisrCTB4ODUsIDB4YjUsIDB4NjUsIDB4YjUsIDB4YjUsIDB4ZDIsIDB4MzcsIDB4ZjUsCisrCTB4ZjMsIDB4MDIsIDB4YTYsIDB4NGQsIDB4MTEsIDB4YTcsIDB4ZGMsIDB4NTEsCisrCTB4MDksIDB4N2YsIDB4YTAsIDB4ZDgsIDB4ODgsIDB4MWMsIDB4MTMsIDB4NzEsCisrCTB4YWUsIDB4OWMsIDB4YjcsIDB4N2IsIDB4MzQsIDB4ZDYsIDB4NGUsIDB4NjgsCisrCTB4MjYsIDB4ODMsIDB4NTEsIDB4YWYsIDB4MWQsIDB4ZWUsIDB4OGIsIDB4YmIsCisrCTB4NjksIDB4NDMsIDB4MmIsIDB4OWUsIDB4OGEsIDB4YmMsIDB4MDIsIDB4MGUsCisrCTB4YTAsIDB4MWIsIDB4ZTAsIDB4YTgsIDB4NWYsIDB4NmYsIDB4YWYsIDB4MWIsCisrCTB4OGYsIDB4ZTcsIDB4NjQsIDB4NzEsIDB4NzQsIDB4MTEsIDB4N2UsIDB4YTgsCisrCTB4ZDgsIDB4ZjksIDB4OTcsIDB4MDYsIDB4YzMsIDB4YjYsIDB4ZmIsIDB4ZmIsCisrCTB4YjcsIDB4M2QsIDB4MzUsIDB4OWQsIDB4M2IsIDB4NTIsIDB4ZWQsIDB4NTQsCisrCTB4Y2EsIDB4ZjQsIDB4ODEsIDB4MDEsIDB4MmQsIDB4MWIsIDB4YzMsIDB4YTcsCisrCTB4MDAsIDB4M2QsIDB4MWEsIDB4MzksIDB4NTQsIDB4ZTEsIDB4ZjYsIDB4ZmYsCisrCTB4ZWQsIDB4NmYsIDB4MGIsIDB4NWEsIDB4NjgsIDB4ZGEsIDB4NTgsIDB4ZGQsCisrCTB4YTksIDB4Y2YsIDB4NWMsIDB4NGEsIDB4ZTUsIDB4MDksIDB4NGUsIDB4ZGUsCisrCTB4OWQsIDB4YmMsIDB4M2UsIDB4ZWUsIDB4NWEsIDB4MDAsIDB4M2IsIDB4MmMsCisrCTB4ODcsIDB4MTAsIDB4NjUsIDB4NjAsIDB4ZGQsIDB4ZDcsIDB4NTYsIDB4ZDEsCisrCTB4NGMsIDB4NjQsIDB4NDUsIDB4ZTQsIDB4MjEsIDB4ZWMsIDB4NzgsIDB4ZjgsCisrCTB4MjUsIDB4N2EsIDB4M2UsIDB4MTYsIDB4NWQsIDB4MDksIDB4NTMsIDB4MTQsCisrCTB4YmUsIDB4NGYsIDB4YWUsIDB4ODcsIDB4ZDgsIDB4ZDEsIDB4YWEsIDB4M2MsCisrCTB4ZjYsIDB4M2UsIDB4YTQsIDB4NzAsIDB4OGMsIDB4NWUsIDB4NzAsIDB4YTQsCisrCTB4YjMsIDB4NmIsIDB4NjYsIDB4NzMsIDB4ZDMsIDB4YmYsIDB4MzEsIDB4MDYsCisrCTB4MTksIDB4NjIsIDB4OTMsIDB4MTUsIDB4ZjIsIDB4ODYsIDB4ZTQsIDB4NTIsCisrCTB4N2UsIDB4NTMsIDB4NGMsIDB4MTIsIDB4MzgsIDB4Y2MsIDB4MzQsIDB4N2QsCisrCTB4NTcsIDB4ZjYsIDB4NDIsIDB4OTMsIDB4OGEsIDB4YzQsIDB4ZWUsIDB4NWMsCisrCTB4OGEsIDB4ZTEsIDB4NTIsIDB4OGYsIDB4NTYsIDB4NjQsIDB4ZjYsIDB4YTYsCisrCTB4ZDEsIDB4OTEsIDB4NTcsIDB4NzAsIDB4Y2QsIDB4MTEsIDB4NzYsIDB4ZjUsCisrCTB4NTksIDB4NjAsIDB4NjAsIDB4M2MsIDB4YzEsIDB4YzMsIDB4MGIsIDB4N2YsCisrCTB4NTgsIDB4MWEsIDB4NTAsIDB4OTEsIDB4ZjEsIDB4NjgsIDB4OGYsIDB4NmUsCisrCTB4NzQsIDB4NzQsIDB4YTgsIDB4NTEsIDB4MGIsIDB4ZjcsIDB4N2EsIDB4OTgsCisrCTB4MzcsIDB4ZjIsIDB4MGEsIDB4MGUsIDB4YTQsIDB4OTcsIDB4MDQsIDB4YjgsCisrCTB4OWIsIDB4ZmQsIDB4YTAsIDB4ZWEsIDB4ZjcsIDB4MGQsIDB4ZTEsIDB4ZGIsCisrCTB4MDMsIDB4ZjAsIDB4MzEsIDB4MjksIDB4ZjgsIDB4ZGQsIDB4NmIsIDB4OGIsCisrCTB4NWQsIDB4ZDgsIDB4NTksIDB4YTksIDB4MjksIDB4Y2YsIDB4OWEsIDB4NzksCisrCTB4ODksIDB4MTksIDB4NjMsIDB4NDYsIDB4MDksIDB4NzksIDB4NmEsIDB4MTEsCisrCTB4ZGEsIDB4NjMsIDB4NjgsIDB4NDgsIDB4NzcsIDB4MjMsIDB4ZmIsIDB4N2QsCisrCTB4M2EsIDB4NDMsIDB4Y2IsIDB4MDIsIDB4M2IsIDB4N2EsIDB4NmQsIDB4MTAsCisrCTB4MmEsIDB4OWUsIDB4YWMsIDB4ZjEsIDB4ZDQsIDB4MTksIDB4ZjgsIDB4MjMsCisrCTB4NjQsIDB4MWQsIDB4MmMsIDB4NWYsIDB4ZjIsIDB4YjAsIDB4NWMsIDB4MjMsCisrCTB4MjcsIDB4ZjcsIDB4MjcsIDB4MzAsIDB4MTYsIDB4MzcsIDB4YjEsIDB4OTAsCisrCTB4YWIsIDB4MzgsIDB4ZmIsIDB4NTUsIDB4Y2QsIDB4NzgsIDB4NTgsIDB4ZDQsCisrCTB4N2QsIDB4NDMsIDB4ZjYsIDB4NDUsIDB4NWUsIDB4NTUsIDB4OGQsIDB4YjEsCisrCTB4MDIsIDB4NjUsIDB4NTgsIDB4YjQsIDB4MTMsIDB4NGIsIDB4MzYsIDB4ZjcsCisrCTB4Y2MsIDB4ZmUsIDB4M2QsIDB4MGIsIDB4ODIsIDB4ZTIsIDB4MTIsIDB4MTEsCisrCTB4YmIsIDB4ZTYsIDB4YjgsIDB4M2EsIDB4NDgsIDB4NzEsIDB4YzcsIDB4NTAsCisrCTB4MDYsIDB4MTYsIDB4M2EsIDB4ZTYsIDB4N2MsIDB4MDUsIDB4YzcsIDB4YzgsCisrCTB4NGQsIDB4MmYsIDB4MDgsIDB4NmEsIDB4MTcsIDB4OWEsIDB4OTUsIDB4OTcsCisrCTB4NTAsIDB4NjgsIDB4ZGMsIDB4MjgsIDB4MTgsIDB4YzQsIDB4NjEsIDB4MzgsCisrCTB4YjksIDB4ZTAsIDB4M2UsIDB4NzgsIDB4ZGIsIDB4MjksIDB4ZTAsIDB4OWYsCisrCTB4NTIsIDB4ZGQsIDB4ZjgsIDB4NGYsIDB4OTEsIDB4YzEsIDB4ZDAsIDB4MzMsCisrCTB4YTEsIDB4N2EsIDB4OGUsIDB4MzAsIDB4MTMsIDB4ODIsIDB4MDcsIDB4OWYsCisrCTB4ZDMsIDB4MzEsIDB4MGYsIDB4MjMsIDB4YmUsIDB4MzIsIDB4NWEsIDB4NzUsCisrCTB4Y2YsIDB4OTYsIDB4YjIsIDB4ZWMsIDB4YjUsIDB4MzIsIDB4YWMsIDB4MjEsCisrCTB4ZDEsIDB4ODIsIDB4MzMsIDB4ZDMsIDB4MTUsIDB4NzQsIDB4YmQsIDB4OTAsCisrCTB4ZjEsIDB4MmMsIDB4ZTYsIDB4NWYsIDB4OGQsIDB4ZTMsIDB4MDIsIDB4ZTgsCisrCTB4ZTksIDB4YzQsIDB4Y2EsIDB4OTYsIDB4ZWIsIDB4MGUsIDB4YmMsIDB4OTEsCisrCTB4ZjQsIDB4YjksIDB4ZWEsIDB4ZDksIDB4MWIsIDB4NzUsIDB4YmQsIDB4ZTEsCisrCTB4YWMsIDB4MmEsIDB4MDUsIDB4MzcsIDB4NTIsIDB4OWIsIDB4MWIsIDB4M2YsCisrCTB4NWEsIDB4ZGMsIDB4MjEsIDB4YzMsIDB4OTgsIDB4YmIsIDB4YWYsIDB4YTMsCisrCTB4ZjIsIDB4MDAsIDB4YmYsIDB4MGQsIDB4MzAsIDB4ODksIDB4MDUsIDB4Y2MsCisrCTB4YTUsIDB4NzYsIDB4ZjUsIDB4MDYsIDB4ZjAsIDB4YzYsIDB4NTQsIDB4OGEsCisrCTB4NWQsIDB4ZDQsIDB4MWUsIDB4YzEsIDB4ZjIsIDB4Y2UsIDB4YjAsIDB4NjIsCisrCTB4YzgsIDB4ZmMsIDB4NTksIDB4NDIsIDB4OWEsIDB4OTAsIDB4NjAsIDB4NTUsCisrCTB4ZmUsIDB4ODgsIDB4YTUsIDB4OGIsIDB4YjgsIDB4MzMsIDB4MGMsIDB4MjMsCisrCTB4MjQsIDB4MGQsIDB4MTUsIDB4NzAsIDB4MzcsIDB4MWUsIDB4M2QsIDB4ZjYsCisrCTB4ZDIsIDB4ZWEsIDB4OTIsIDB4MTAsIDB4YjIsIDB4YzQsIDB4NTEsIDB4YWMsCisrCTB4ZjIsIDB4YWMsIDB4ZjMsIDB4NmIsIDB4NmMsIDB4YWEsIDB4Y2YsIDB4MTIsCisrCTB4YzUsIDB4NmMsIDB4OTAsIDB4NTAsIDB4YjUsIDB4MGMsIDB4ZmMsIDB4MWEsCisrCTB4MTUsIDB4NTIsIDB4ZTksIDB4MjYsIDB4YzYsIDB4NTIsIDB4YTQsIDB4ZTcsCisrCTB4ODEsIDB4NjksIDB4ZTEsIDB4ZTcsIDB4OWUsIDB4MzAsIDB4MDEsIDB4ZWMsCisrCTB4ODQsIDB4ODksIDB4YjIsIDB4MGQsIDB4NjYsIDB4ZGQsIDB4Y2UsIDB4MjgsCisrCTB4NWMsIDB4ZWMsIDB4OTgsIDB4NDYsIDB4NjgsIDB4MjEsIDB4OWYsIDB4ODgsCisrCTB4M2YsIDB4MWYsIDB4NDIsIDB4NzcsIDB4Y2UsIDB4ZDAsIDB4NjEsIDB4ZDQsCisrCTB4MjAsIDB4YTcsIDB4ZmYsIDB4NTMsIDB4YWQsIDB4MzcsIDB4ZDAsIDB4MTcsCisrCTB4MzUsIDB4YzksIDB4ZmMsIDB4YmEsIDB4MGEsIDB4NzgsIDB4M2YsIDB4ZjIsCisrCTB4Y2MsIDB4ODYsIDB4ODksIDB4ZTgsIDB4NGIsIDB4M2MsIDB4NDgsIDB4MzMsCisrCTB4MDksIDB4N2YsIDB4YzYsIDB4YzAsIDB4ZGQsIDB4YjgsIDB4ZmQsIDB4N2EsCisrCTB4NjYsIDB4NjYsIDB4NjUsIDB4ZWIsIDB4NDcsIDB4YTcsIDB4MDQsIDB4MjgsCisrCTB4YTMsIDB4MTksIDB4OGUsIDB4YTksIDB4YjEsIDB4MTMsIDB4NjcsIDB4NjIsCisrCTB4NzAsIDB4Y2YsIDB4ZDYKKyt9OworK3N0YXRpYyBjb25zdCB1OCBkZWNfb3V0cHV0MDEyW10gX19pbml0Y29uc3QgPSB7CisrCTB4NzQsIDB4YTYsIDB4M2UsIDB4ZTQsIDB4YjEsIDB4Y2IsIDB4YWYsIDB4YjAsCisrCTB4NDAsIDB4ZTUsIDB4MGYsIDB4OWUsIDB4ZjEsIDB4ZjIsIDB4ODksIDB4YjUsCisrCTB4NDIsIDB4MzQsIDB4OGEsIDB4YTEsIDB4MDMsIDB4YjcsIDB4ZTksIDB4NTcsCisrCTB4NDYsIDB4YmUsIDB4MjAsIDB4ZTQsIDB4NmUsIDB4YjAsIDB4ZWIsIDB4ZmYsCisrCTB4ZWEsIDB4MDcsIDB4N2UsIDB4ZWYsIDB4ZTIsIDB4NTUsIDB4OWYsIDB4ZTUsCisrCTB4NzgsIDB4M2EsIDB4YjcsIDB4ODMsIDB4YzIsIDB4MTgsIDB4NDAsIDB4N2IsCisrCTB4ZWIsIDB4Y2QsIDB4ODEsIDB4ZmIsIDB4OTAsIDB4MTIsIDB4OWUsIDB4NDYsCisrCTB4YTksIDB4ZDYsIDB4NGEsIDB4YmEsIDB4YjAsIDB4NjIsIDB4ZGIsIDB4NmIsCisrCTB4OTksIDB4YzQsIDB4ZGIsIDB4NTQsIDB4NGIsIDB4YjgsIDB4YTUsIDB4NzEsCisrCTB4Y2IsIDB4Y2QsIDB4NjMsIDB4MzIsIDB4NTUsIDB4ZmIsIDB4MzEsIDB4ZjAsCisrCTB4MzgsIDB4ZjUsIDB4YmUsIDB4NzgsIDB4ZTQsIDB4NDUsIDB4Y2UsIDB4MWIsCisrCTB4NmEsIDB4NWIsIDB4MGUsIDB4ZjQsIDB4MTYsIDB4ZTQsIDB4YjEsIDB4M2QsCisrCTB4ZjYsIDB4NjMsIDB4N2IsIDB4YTcsIDB4MGMsIDB4ZGUsIDB4NmYsIDB4OGYsCisrCTB4NzQsIDB4ZGYsIDB4ZTAsIDB4MWUsIDB4OWQsIDB4Y2UsIDB4OGYsIDB4MjQsCisrCTB4ZWYsIDB4MjMsIDB4MzUsIDB4MzMsIDB4N2IsIDB4ODMsIDB4MzQsIDB4MjMsCisrCTB4NTgsIDB4NzQsIDB4MTQsIDB4NzcsIDB4MWYsIDB4YzIsIDB4NGYsIDB4NGUsCisrCTB4YzYsIDB4ODksIDB4ZjksIDB4NTIsIDB4MDksIDB4MzcsIDB4NjQsIDB4MTQsCisrCTB4YzQsIDB4MDEsIDB4NmIsIDB4OWQsIDB4NzcsIDB4ZTgsIDB4OTAsIDB4NWQsCisrCTB4YTgsIDB4NGEsIDB4MmEsIDB4ZWYsIDB4NWMsIDB4N2YsIDB4ZWIsIDB4YmIsCisrCTB4YjIsIDB4YzYsIDB4OTMsIDB4OTksIDB4NjYsIDB4ZGMsIDB4N2YsIDB4ZDQsCisrCTB4OWUsIDB4MmEsIDB4Y2EsIDB4OGQsIDB4ZGIsIDB4ZTcsIDB4MjAsIDB4Y2YsCisrCTB4ZTQsIDB4NzMsIDB4YWUsIDB4NDksIDB4N2QsIDB4NjQsIDB4MGYsIDB4MGUsCisrCTB4MjgsIDB4NDYsIDB4YTksIDB4YTgsIDB4MzIsIDB4ZTQsIDB4MGUsIDB4ZjYsCisrCTB4NTEsIDB4NTMsIDB4YjgsIDB4M2MsIDB4YjEsIDB4ZmYsIDB4YTMsIDB4MzMsCisrCTB4NDEsIDB4NzUsIDB4ZmYsIDB4ZjEsIDB4NmYsIDB4ZjEsIDB4ZmIsIDB4YmIsCisrCTB4ODMsIDB4N2YsIDB4MDYsIDB4OWIsIDB4ZTcsIDB4MWIsIDB4MGEsIDB4ZTAsCisrCTB4NWMsIDB4MzMsIDB4NjAsIDB4NWIsIDB4ZGIsIDB4NWIsIDB4ZWQsIDB4ZmUsCisrCTB4YTUsIDB4MTYsIDB4MTksIDB4NzIsIDB4YTMsIDB4NjQsIDB4MjMsIDB4MDAsCisrCTB4MDIsIDB4YzcsIDB4ZjMsIDB4NmEsIDB4ODEsIDB4M2UsIDB4NDQsIDB4MWQsCisrCTB4NzksIDB4MTUsIDB4NWYsIDB4OWEsIDB4ZGUsIDB4ZTIsIDB4ZmQsIDB4MWIsCisrCTB4NzMsIDB4YzEsIDB4YmMsIDB4MjMsIDB4YmEsIDB4MzEsIDB4ZDIsIDB4NTAsCisrCTB4ZDUsIDB4YWQsIDB4N2YsIDB4NzQsIDB4YTcsIDB4YzksIDB4ZjgsIDB4M2UsCisrCTB4MmIsIDB4MjYsIDB4MTAsIDB4ZjYsIDB4MDMsIDB4MzYsIDB4NzQsIDB4ZTQsCisrCTB4MGUsIDB4NmEsIDB4NzIsIDB4YjcsIDB4NzMsIDB4MGEsIDB4NDIsIDB4MjgsCisrCTB4YzIsIDB4YWQsIDB4NWUsIDB4MDMsIDB4YmUsIDB4YjgsIDB4MGIsIDB4YTgsCisrCTB4NWIsIDB4ZDQsIDB4YjgsIDB4YmEsIDB4NTIsIDB4ODksIDB4YjEsIDB4OWIsCisrCTB4YzEsIDB4YzMsIDB4NjUsIDB4ODcsIDB4ZWQsIDB4YTUsIDB4ZjQsIDB4ODYsCisrCTB4ZmQsIDB4NDEsIDB4ODAsIDB4OTEsIDB4MjcsIDB4NTksIDB4NTMsIDB4NjcsCisrCTB4MTUsIDB4NzgsIDB4NTQsIDB4OGIsIDB4MmQsIDB4M2QsIDB4YzcsIDB4ZmYsCisrCTB4MDIsIDB4OTIsIDB4MDcsIDB4NWYsIDB4N2EsIDB4NGIsIDB4NjAsIDB4NTksCisrCTB4M2MsIDB4NmYsIDB4NWMsIDB4ZDgsIDB4ZWMsIDB4OTUsIDB4ZDIsIDB4ZmUsCisrCTB4YTAsIDB4M2IsIDB4ZDgsIDB4M2YsIDB4ZDEsIDB4NjksIDB4YTYsIDB4ZDYsCisrCTB4NDEsIDB4YjIsIDB4ZjQsIDB4NGQsIDB4MTIsIDB4ZjQsIDB4NTgsIDB4M2UsCisrCTB4NjYsIDB4NjQsIDB4ODAsIDB4MzEsIDB4OWIsIDB4YTgsIDB4NGMsIDB4OGIsCisrCTB4MDcsIDB4YjIsIDB4ZWMsIDB4NjYsIDB4OTQsIDB4NjYsIDB4NDcsIDB4NTAsCisrCTB4NTAsIDB4NWYsIDB4MTgsIDB4MGIsIDB4MGUsIDB4ZDYsIDB4YzAsIDB4MzksCisrCTB4MjEsIDB4MTMsIDB4OWUsIDB4MzMsIDB4YmMsIDB4NzksIDB4MzYsIDB4MDIsCisrCTB4OTYsIDB4NzAsIDB4ZjAsIDB4NDgsIDB4NjcsIDB4MmYsIDB4MjYsIDB4ZTksCisrCTB4NmQsIDB4MTAsIDB4YmIsIDB4ZDYsIDB4M2YsIDB4ZDEsIDB4NjQsIDB4N2EsCisrCTB4MmUsIDB4YmUsIDB4MGMsIDB4NjEsIDB4ZjAsIDB4NzUsIDB4NDIsIDB4MzgsCisrCTB4MjMsIDB4YjEsIDB4OWUsIDB4OWYsIDB4N2MsIDB4NjcsIDB4NjYsIDB4ZDksCisrCTB4NTgsIDB4OWEsIDB4ZjEsIDB4YmIsIDB4NDEsIDB4MmEsIDB4OGQsIDB4NjUsCisrCTB4ODQsIDB4OTQsIDB4ZmMsIDB4ZGMsIDB4NmEsIDB4NTAsIDB4NjQsIDB4ZGIsCisrCTB4NTYsIDB4MzMsIDB4NzYsIDB4MDAsIDB4MTAsIDB4ZWQsIDB4YmUsIDB4ZDIsCisrCTB4MTIsIDB4ZjYsIDB4ZjYsIDB4MWIsIDB4YTIsIDB4MTYsIDB4ZGUsIDB4YWUsCisrCTB4MzEsIDB4OTUsIDB4ZGQsIDB4YjEsIDB4MDgsIDB4N2UsIDB4NGUsIDB4ZWUsCisrCTB4ZTcsIDB4ZjksIDB4YTUsIDB4ZmIsIDB4NWIsIDB4NjEsIDB4NDMsIDB4MDAsCisrCTB4NDAsIDB4ZjYsIDB4N2UsIDB4MDIsIDB4MDQsIDB4MzIsIDB4NGUsIDB4MGMsCisrCTB4ZTIsIDB4NjYsIDB4MGQsIDB4ZDcsIDB4MDcsIDB4OTgsIDB4MGUsIDB4ZjgsCisrCTB4NzIsIDB4MzQsIDB4NmQsIDB4OTUsIDB4ODYsIDB4ZDcsIDB4Y2IsIDB4MzEsCisrCTB4NTQsIDB4NDcsIDB4ZDAsIDB4MzgsIDB4MjksIDB4OWMsIDB4NWEsIDB4NjgsCisrCTB4ZDQsIDB4ODcsIDB4NzYsIDB4YzksIDB4ZTcsIDB4N2UsIDB4ZTMsIDB4ZjQsCisrCTB4ODEsIDB4NmQsIDB4MTgsIDB4Y2IsIDB4YzksIDB4MDUsIDB4YWYsIDB4YTAsCisrCTB4ZmIsIDB4NjYsIDB4ZjcsIDB4ZjEsIDB4MWMsIDB4YzYsIDB4MTQsIDB4MTEsCisrCTB4NGYsIDB4MmIsIDB4NzksIDB4NDIsIDB4OGIsIDB4YmMsIDB4YWMsIDB4ZTcsCisrCTB4NmMsIDB4ZmUsIDB4MGYsIDB4NTgsIDB4ZTcsIDB4N2MsIDB4NzgsIDB4MzksCisrCTB4MzAsIDB4YjAsIDB4NjYsIDB4MmMsIDB4OWIsIDB4NmQsIDB4M2EsIDB4ZTEsCisrCTB4Y2YsIDB4YzksIDB4YTQsIDB4MGUsIDB4NmQsIDB4NmQsIDB4OGEsIDB4YTEsCisrCTB4M2EsIDB4ZTcsIDB4MjgsIDB4ZDQsIDB4NzgsIDB4NGMsIDB4YTYsIDB4YTIsCisrCTB4MmEsIDB4YTYsIDB4MDMsIDB4MzAsIDB4ZDcsIDB4YTgsIDB4MjUsIDB4NjYsCisrCTB4ODcsIDB4MmYsIDB4NjksIDB4NWMsIDB4NGUsIDB4ZGQsIDB4YTUsIDB4NDksCisrCTB4NWQsIDB4MzcsIDB4NGEsIDB4NTksIDB4YzQsIDB4YWYsIDB4MWYsIDB4YTIsCisrCTB4ZTQsIDB4ZjgsIDB4YTYsIDB4MTIsIDB4OTcsIDB4ZDUsIDB4NzksIDB4ZjUsCisrCTB4ZTIsIDB4NGEsIDB4MmIsIDB4NWYsIDB4NjEsIDB4ZTQsIDB4OWUsIDB4ZTMsCisrCTB4ZWUsIDB4YjgsIDB4YTcsIDB4NWIsIDB4MmYsIDB4ZjQsIDB4OWUsIDB4NmMsCisrCTB4ZmIsIDB4ZDEsIDB4YzYsIDB4NTYsIDB4NzcsIDB4YmEsIDB4NzUsIDB4YWEsCisrCTB4M2QsIDB4MWEsIDB4YTgsIDB4MGIsIDB4YjMsIDB4NjgsIDB4MjQsIDB4MDAsCisrCTB4MTAsIDB4N2YsIDB4ZmQsIDB4ZDcsIDB4YTEsIDB4OGQsIDB4ODMsIDB4NTQsCisrCTB4NGYsIDB4MWYsIDB4ZDgsIDB4MmEsIDB4YmUsIDB4OGEsIDB4MGMsIDB4ODcsCisrCTB4YWIsIDB4YTIsIDB4ZGUsIDB4YzMsIDB4MzksIDB4YmYsIDB4MDksIDB4MDMsCisrCTB4YTUsIDB4ZjMsIDB4MDUsIDB4MjgsIDB4ZTEsIDB4ZTEsIDB4ZWUsIDB4MzksCisrCTB4NzAsIDB4OWMsIDB4ZDgsIDB4ODEsIDB4MTIsIDB4MWUsIDB4MDIsIDB4NDAsCisrCTB4ZDIsIDB4NmUsIDB4ZjAsIDB4ZWIsIDB4MWIsIDB4M2QsIDB4MjIsIDB4YzYsCisrCTB4ZTUsIDB4ZTMsIDB4YjQsIDB4NWEsIDB4OTgsIDB4YmIsIDB4ZjAsIDB4MjIsCisrCTB4MjgsIDB4OGQsIDB4ZTUsIDB4ZDMsIDB4MTYsIDB4NDgsIDB4MjQsIDB4YTUsCisrCTB4ZTYsIDB4NjYsIDB4MGMsIDB4ZjksIDB4MDgsIDB4ZjksIDB4N2UsIDB4MWUsCisrCTB4ZTEsIDB4MjgsIDB4MjYsIDB4MjIsIDB4YzcsIDB4YzcsIDB4MGEsIDB4MzIsCisrCTB4NDcsIDB4ZmEsIDB4YTMsIDB4YmUsIDB4M2MsIDB4YzQsIDB4YzUsIDB4NTMsCisrCTB4MGEsIDB4ZDUsIDB4OTQsIDB4NGEsIDB4ZDcsIDB4OTMsIDB4ZDgsIDB4NDIsCisrCTB4OTksIDB4YjksIDB4MGEsIDB4ZGIsIDB4NTYsIDB4ZjcsIDB4YjksIDB4MWMsCisrCTB4NTMsIDB4NGYsIDB4ZmEsIDB4ZDMsIDB4NzQsIDB4YWQsIDB4ZDksIDB4NjgsCisrCTB4ZjEsIDB4MWIsIDB4ZGYsIDB4NjEsIDB4YzYsIDB4NWUsIDB4YTgsIDB4NDgsCisrCTB4ZmMsIDB4ZDQsIDB4NGEsIDB4NGMsIDB4M2MsIDB4MzIsIDB4ZjcsIDB4MWMsCisrCTB4OTYsIDB4MjEsIDB4OWIsIDB4ZjksIDB4YTMsIDB4Y2MsIDB4NWEsIDB4Y2UsCisrCTB4ZDUsIDB4ZDcsIDB4MDgsIDB4MjQsIDB4ZjYsIDB4MWMsIDB4ZmQsIDB4ZGQsCisrCTB4MzgsIDB4YzIsIDB4MzIsIDB4ZTksIDB4YjgsIDB4ZTcsIDB4YjYsIDB4ZmEsCisrCTB4OWQsIDB4NDUsIDB4MTMsIDB4MmMsIDB4ODMsIDB4ZmQsIDB4NGEsIDB4NjksCisrCTB4ODIsIDB4Y2QsIDB4ZGMsIDB4YjMsIDB4NzYsIDB4MGMsIDB4OWUsIDB4ZDgsCisrCTB4ZjQsIDB4MWIsIDB4NDUsIDB4MTUsIDB4YjQsIDB4OTcsIDB4ZTcsIDB4NTgsCisrCTB4MzQsIDB4ZTIsIDB4MDMsIDB4MjksIDB4NWEsIDB4YmYsIDB4YjYsIDB4ZTAsCisrCTB4NWQsIDB4MTMsIDB4ZDksIDB4MmIsIDB4YjQsIDB4ODAsIDB4YjIsIDB4NDUsCisrCTB4ODEsIDB4NmEsIDB4MmUsIDB4NmMsIDB4ODksIDB4N2QsIDB4ZWUsIDB4YmIsCisrCTB4NTIsIDB4ZGQsIDB4MWYsIDB4MTgsIDB4ZTcsIDB4MTMsIDB4NmIsIDB4MzMsCisrCTB4MGUsIDB4ZWEsIDB4MzYsIDB4OTIsIDB4NzcsIDB4N2IsIDB4NmQsIDB4OWMsCisrCTB4NWEsIDB4NWYsIDB4NDUsIDB4N2IsIDB4N2IsIDB4MzUsIDB4NjIsIDB4MjMsCisrCTB4ZDEsIDB4YmYsIDB4MGYsIDB4ZDAsIDB4MDgsIDB4MWIsIDB4MmIsIDB4ODAsCisrCTB4NmIsIDB4N2UsIDB4ZjEsIDB4MjEsIDB4NDcsIDB4YjAsIDB4NTcsIDB4ZDEsCisrCTB4OTgsIDB4NzIsIDB4OTAsIDB4MzQsIDB4MWMsIDB4MjAsIDB4MDQsIDB4ZmYsCisrCTB4M2QsIDB4NWMsIDB4ZWUsIDB4MGUsIDB4NTcsIDB4NWYsIDB4NmYsIDB4MjQsCisrCTB4NGUsIDB4M2MsIDB4ZWEsIDB4ZmMsIDB4YTUsIDB4YTksIDB4ODMsIDB4YzksCisrCTB4NjEsIDB4YjQsIDB4NTEsIDB4MjQsIDB4ZjgsIDB4MjcsIDB4NWUsIDB4NDYsCisrCTB4OGMsIDB4YjEsIDB4NTMsIDB4MDIsIDB4OTYsIDB4MzUsIDB4YmEsIDB4YjgsCisrCTB4NGMsIDB4NzEsIDB4ZDMsIDB4MTUsIDB4NTksIDB4MzUsIDB4MjIsIDB4MjAsCisrCTB4YWQsIDB4MDMsIDB4OWYsIDB4NjYsIDB4NDQsIDB4M2IsIDB4OWMsIDB4MzUsCisrCTB4MzcsIDB4MWYsIDB4OWIsIDB4YmIsIDB4ZjMsIDB4ZGIsIDB4MzUsIDB4NjMsCisrCTB4MzAsIDB4NjQsIDB4YWEsIDB4YTIsIDB4MDYsIDB4YTgsIDB4NWQsIDB4YmIsCisrCTB4ZTEsIDB4OWYsIDB4NzAsIDB4ZWMsIDB4ODIsIDB4MTEsIDB4MDYsIDB4MzYsCisrCTB4ZWMsIDB4OGIsIDB4NjksIDB4NjYsIDB4MjQsIDB4NDQsIDB4YzksIDB4NGEsCisrCTB4NTcsIDB4YmIsIDB4OWIsIDB4NzgsIDB4MTMsIDB4Y2UsIDB4OWMsIDB4MGMsCisrCTB4YmEsIDB4OTIsIDB4OTMsIDB4NjMsIDB4YjgsIDB4ZTIsIDB4OTUsIDB4MGYsCisrCTB4MGYsIDB4MTYsIDB4MzksIDB4NTIsIDB4ZmQsIDB4M2EsIDB4NmQsIDB4MDIsCisrCTB4NGIsIDB4ZGYsIDB4MTMsIDB4ZDMsIDB4MmEsIDB4MjIsIDB4YjQsIDB4MDMsCisrCTB4N2MsIDB4NTQsIDB4NDksIDB4OTYsIDB4NjgsIDB4NTQsIDB4MTAsIDB4ZmEsCisrCTB4ZWYsIDB4YWEsIDB4NmMsIDB4ZTgsIDB4MjIsIDB4ZGMsIDB4NzEsIDB4MTYsCisrCTB4MTMsIDB4MWEsIDB4ZjYsIDB4MjgsIDB4ZTUsIDB4NmQsIDB4NzcsIDB4M2QsCisrCTB4Y2QsIDB4MzAsIDB4NjMsIDB4YjEsIDB4NzAsIDB4NTIsIDB4YTEsIDB4YzUsCisrCTB4OTQsIDB4NWYsIDB4Y2YsIDB4ZTgsIDB4YjgsIDB4MjYsIDB4OTgsIDB4ZjcsCisrCTB4MDYsIDB4YTAsIDB4MGEsIDB4NzAsIDB4ZmEsIDB4MDMsIDB4ODAsIDB4YWMsCisrCTB4YzEsIDB4ZWMsIDB4ZDYsIDB4NGMsIDB4NTQsIDB4ZDcsIDB4ZmUsIDB4NDcsCisrCTB4YjYsIDB4ODgsIDB4NGEsIDB4ZjcsIDB4NzEsIDB4MjQsIDB4ZWUsIDB4ZjMsCisrCTB4ZDIsIDB4YzIsIDB4NGEsIDB4N2YsIDB4ZmUsIDB4NjEsIDB4YzcsIDB4MzUsCisrCTB4YzksIDB4MzcsIDB4NjcsIDB4Y2IsIDB4MjQsIDB4MzUsIDB4ZGEsIDB4N2UsCisrCTB4Y2EsIDB4NWYsIDB4ZjMsIDB4OGQsIDB4ZDQsIDB4MTMsIDB4OGUsIDB4ZDYsCisrCTB4Y2IsIDB4NGQsIDB4NTMsIDB4OGYsIDB4NTMsIDB4MWYsIDB4YzAsIDB4NzQsCisrCTB4ZjcsIDB4NTMsIDB4YjksIDB4NWUsIDB4MjMsIDB4MzcsIDB4YmEsIDB4NmUsCisrCTB4ZTMsIDB4OWQsIDB4MDcsIDB4NTUsIDB4MjUsIDB4N2IsIDB4ZTYsIDB4MmEsCisrCTB4NjQsIDB4ZDEsIDB4MzIsIDB4ZGQsIDB4NTQsIDB4MWIsIDB4NGIsIDB4YzAsCisrCTB4ZTEsIDB4ZDcsIDB4NjksIDB4NTgsIDB4ZjgsIDB4OTMsIDB4MjksIDB4YzQsCisrCTB4ZGQsIDB4MjMsIDB4MmYsIDB4YTUsIDB4ZmMsIDB4OWQsIDB4N2UsIDB4ZjgsCisrCTB4ZDQsIDB4OTAsIDB4Y2QsIDB4ODIsIDB4NTUsIDB4ZGMsIDB4MTYsIDB4MTYsCisrCTB4OWYsIDB4MDcsIDB4NTIsIDB4OWIsIDB4OWQsIDB4MjUsIDB4ZWQsIDB4MzIsCisrCTB4YzUsIDB4N2IsIDB4ZGYsIDB4ZjYsIDB4ODMsIDB4NDYsIDB4M2QsIDB4NjUsCisrCTB4YjcsIDB4ZWYsIDB4ODcsIDB4N2EsIDB4MTIsIDB4NjksIDB4OGYsIDB4MDYsCisrCTB4N2MsIDB4NTEsIDB4MTUsIDB4NGEsIDB4MDgsIDB4ZTgsIDB4YWMsIDB4OWEsCisrCTB4MGMsIDB4MjQsIDB4YTcsIDB4MjcsIDB4ZDgsIDB4NDYsIDB4MmYsIDB4ZTcsCisrCTB4MDEsIDB4MGUsIDB4MWMsIDB4YzYsIDB4OTEsIDB4YjAsIDB4NmUsIDB4ODUsCisrCTB4NjUsIDB4ZjAsIDB4MjksIDB4MGQsIDB4MmUsIDB4NmIsIDB4M2IsIDB4ZmIsCisrCTB4NGIsIDB4ZGYsIDB4ZTQsIDB4ODAsIDB4OTMsIDB4MDMsIDB4NjYsIDB4NDYsCisrCTB4M2UsIDB4OGEsIDB4NmUsIDB4ZjMsIDB4NWUsIDB4NGQsIDB4NjIsIDB4MGUsCisrCTB4NDksIDB4MDUsIDB4YWYsIDB4ZDQsIDB4ZjgsIDB4MjEsIDB4MjAsIDB4NjEsCisrCTB4MWQsIDB4MzksIDB4MTcsIDB4ZjQsIDB4NjEsIDB4NDcsIDB4OTUsIDB4ZmIsCisrCTB4MTUsIDB4MmUsIDB4YjMsIDB4NGYsIDB4ZDAsIDB4NWQsIDB4ZjUsIDB4N2QsCisrCTB4NDAsIDB4ZGEsIDB4OTAsIDB4M2MsIDB4NmIsIDB4Y2IsIDB4MTcsIDB4MDAsCisrCTB4MTMsIDB4M2IsIDB4NjQsIDB4MzQsIDB4MWIsIDB4ZjAsIDB4ZjIsIDB4ZTUsCisrCTB4M2IsIDB4YjIsIDB4YzcsIDB4ZDMsIDB4NWYsIDB4M2EsIDB4NDQsIDB4YTYsCisrCTB4OWIsIDB4YjcsIDB4NzgsIDB4MGUsIDB4NDIsIDB4NWQsIDB4NGMsIDB4YzEsCisrCTB4ZTksIDB4ZDIsIDB4Y2IsIDB4YjcsIDB4NzgsIDB4ZDEsIDB4ZmUsIDB4OWEsCisrCTB4YjUsIDB4MDcsIDB4ZTksIDB4ZTAsIDB4YmUsIDB4ZTIsIDB4OGEsIDB4YTcsCisrCTB4MDEsIDB4ODMsIDB4MDAsIDB4OGMsIDB4NWMsIDB4MDgsIDB4ZTYsIDB4NjMsCisrCTB4MTIsIDB4OTIsIDB4YjcsIDB4YjcsIDB4YTYsIDB4MTksIDB4N2QsIDB4MzgsCisrCTB4MTMsIDB4MzgsIDB4OTIsIDB4ODcsIDB4MjQsIDB4ZjksIDB4NDgsIDB4YjMsCisrCTB4NWUsIDB4ODcsIDB4NmEsIDB4NDAsIDB4MzksIDB4NWMsIDB4M2YsIDB4ZWQsCisrCTB4OGYsIDB4ZWUsIDB4ZGIsIDB4MTUsIDB4ODIsIDB4MDYsIDB4ZGEsIDB4NDksCisrCTB4MjEsIDB4MmIsIDB4YjUsIDB4YmYsIDB4MzIsIDB4N2MsIDB4OWYsIDB4NDIsCisrCTB4MjgsIDB4NjMsIDB4Y2YsIDB4YWYsIDB4MWUsIDB4ZjgsIDB4YzYsIDB4YTAsCisrCTB4ZDEsIDB4MDIsIDB4NDMsIDB4NTcsIDB4NjIsIDB4ZWMsIDB4OWIsIDB4MGYsCisrCTB4MDEsIDB4OWUsIDB4NzEsIDB4ZDgsIDB4ODcsIDB4OWQsIDB4MDEsIDB4YzEsCisrCTB4NTgsIDB4NzcsIDB4ZDksIDB4YWYsIDB4YjEsIDB4MTAsIDB4N2UsIDB4ZGQsCisrCTB4YTYsIDB4NTAsIDB4OTYsIDB4ZTUsIDB4ZjAsIDB4NzIsIDB4MDAsIDB4NmQsCisrCTB4NGIsIDB4ZjgsIDB4MmEsIDB4OGYsIDB4MTksIDB4ZjMsIDB4MjIsIDB4ODgsCisrCTB4MTEsIDB4NGEsIDB4OGIsIDB4N2MsIDB4ZmQsIDB4YjcsIDB4ZWQsIDB4ZTEsCisrCTB4ZjYsIDB4NDAsIDB4MzksIDB4ZTAsIDB4ZTksIDB4ZjYsIDB4M2QsIDB4MjUsCisrCTB4ZTYsIDB4NzQsIDB4M2MsIDB4NTgsIDB4NTcsIDB4N2YsIDB4ZTEsIDB4MjIsCisrCTB4OTYsIDB4NDcsIDB4MzEsIDB4OTEsIDB4YmEsIDB4NzAsIDB4ODUsIDB4MjgsCisrCTB4NmIsIDB4OWYsIDB4NmUsIDB4MjUsIDB4YWMsIDB4MjMsIDB4NjYsIDB4MmYsCisrCTB4MjksIDB4ODgsIDB4MjgsIDB4Y2UsIDB4OGMsIDB4NWMsIDB4ODgsIDB4NTMsCisrCTB4ZDEsIDB4M2IsIDB4Y2MsIDB4NmEsIDB4NTEsIDB4YjIsIDB4ZTEsIDB4MjgsCisrCTB4M2YsIDB4OTEsIDB4YjQsIDB4MGQsIDB4MDAsIDB4M2EsIDB4ZTMsIDB4ZjgsCisrCTB4YzMsIDB4OGYsIDB4ZDcsIDB4OTYsIDB4NjIsIDB4MGUsIDB4MmUsIDB4ZmMsCisrCTB4YzgsIDB4NmMsIDB4NzcsIDB4YTYsIDB4MWQsIDB4MjIsIDB4YzEsIDB4YjgsCisrCTB4ZTYsIDB4NjEsIDB4ZDcsIDB4NjcsIDB4MzYsIDB4MTMsIDB4N2IsIDB4YmIsCisrCTB4OWIsIDB4NTksIDB4MDksIDB4YTYsIDB4ZGYsIDB4ZjcsIDB4NmIsIDB4YTMsCisrCTB4NDAsIDB4MWEsIDB4ZjUsIDB4NGYsIDB4YjQsIDB4ZGEsIDB4ZDMsIDB4ZjMsCisrCTB4ODEsIDB4OTMsIDB4YzYsIDB4MTgsIDB4ZDksIDB4MjYsIDB4ZWUsIDB4YWMsCisrCTB4ZjAsIDB4YWEsIDB4ZGYsIDB4YzUsIDB4OWMsIDB4Y2EsIDB4YzIsIDB4YTIsCisrCTB4Y2MsIDB4N2IsIDB4NWMsIDB4MjQsIDB4YjAsIDB4YmMsIDB4ZDAsIDB4NmEsCisrCTB4NGQsIDB4ODksIDB4MDksIDB4YjgsIDB4MDcsIDB4ZmUsIDB4ODcsIDB4YWQsCisrCTB4MGEsIDB4ZWEsIDB4YjgsIDB4NDIsIDB4ZjksIDB4NWUsIDB4YjMsIDB4M2UsCisrCTB4MzYsIDB4NGMsIDB4YWYsIDB4NzUsIDB4OWUsIDB4MWMsIDB4ZWIsIDB4YmQsCisrCTB4YmMsIDB4YmIsIDB4ODAsIDB4NDAsIDB4YTcsIDB4M2EsIDB4MzAsIDB4YmYsCisrCTB4YTgsIDB4NDQsIDB4ZjQsIDB4ZWIsIDB4MzgsIDB4YWQsIDB4MjksIDB4YmEsCisrCTB4MjMsIDB4ZWQsIDB4NDEsIDB4MGMsIDB4ZWEsIDB4ZDIsIDB4YmIsIDB4NDEsCisrCTB4MTgsIDB4ZDYsIDB4YjksIDB4YmEsIDB4NjUsIDB4MmIsIDB4YTMsIDB4OTEsCisrCTB4NmQsIDB4MWYsIDB4YTksIDB4ZjQsIDB4ZDEsIDB4MjUsIDB4OGQsIDB4NGQsCisrCTB4MzgsIDB4ZmYsIDB4NjQsIDB4YTAsIDB4ZWMsIDB4ZGUsIDB4YTYsIDB4YjYsCisrCTB4NzksIDB4YWIsIDB4OGUsIDB4MzMsIDB4NmMsIDB4NDcsIDB4ZGUsIDB4YWYsCisrCTB4OTQsIDB4YTQsIDB4YTUsIDB4ODYsIDB4NzcsIDB4NTUsIDB4MDksIDB4OTIsCisrCTB4ODEsIDB4MzEsIDB4NzYsIDB4YzcsIDB4MzQsIDB4MjIsIDB4ODksIDB4OGUsCisrCTB4M2QsIDB4MjYsIDB4MjYsIDB4ZDcsIDB4ZmMsIDB4MWUsIDB4MTYsIDB4NzIsCisrCTB4MTMsIDB4MzMsIDB4NjMsIDB4ZDUsIDB4MjIsIDB4YmUsIDB4YjgsIDB4MDQsCisrCTB4MzQsIDB4ODQsIDB4NDEsIDB4YmIsIDB4ODAsIDB4ZDAsIDB4OWYsIDB4NDYsCisrCTB4NDgsIDB4MDcsIDB4YTcsIDB4ZmMsIDB4MmIsIDB4M2EsIDB4NzUsIDB4NTUsCisrCTB4OGMsIDB4YzcsIDB4NmEsIDB4YmQsIDB4N2UsIDB4NDYsIDB4MDgsIDB4ODQsCisrCTB4MGYsIDB4ZDUsIDB4NzQsIDB4YzAsIDB4ODIsIDB4OGUsIDB4YWEsIDB4NjEsCisrCTB4MDUsIDB4MDEsIDB4YjIsIDB4NDcsIDB4NmUsIDB4MjAsIDB4NmEsIDB4MmQsCisrCTB4NTgsIDB4NzAsIDB4NDgsIDB4MzIsIDB4YTcsIDB4MzcsIDB4ZDIsIDB4YjgsCisrCTB4ODIsIDB4MWEsIDB4NTEsIDB4YjksIDB4NjEsIDB4ZGQsIDB4ZmQsIDB4OWQsCisrCTB4NmIsIDB4MGUsIDB4MTgsIDB4OTcsIDB4ZjgsIDB4NDUsIDB4NWYsIDB4ODcsCisrCTB4MTAsIDB4Y2YsIDB4MzQsIDB4NzIsIDB4NDUsIDB4MjYsIDB4NDksIDB4NzAsCisrCTB4ZTcsIDB4YTMsIDB4NzgsIDB4ZTAsIDB4NTIsIDB4ODksIDB4ODQsIDB4OTQsCisrCTB4ODMsIDB4ODIsIDB4YzIsIDB4NjksIDB4OGYsIDB4ZTMsIDB4ZTEsIDB4M2YsCisrCTB4NjAsIDB4NzQsIDB4ODgsIDB4YzQsIDB4ZjcsIDB4NzUsIDB4MmMsIDB4ZmIsCisrCTB4YmQsIDB4YjYsIDB4YzQsIDB4N2UsIDB4MTAsIDB4MGEsIDB4NmMsIDB4OTAsCisrCTB4MDQsIDB4OWUsIDB4YzMsIDB4M2YsIDB4NTksIDB4N2MsIDB4Y2UsIDB4MzEsCisrCTB4MTgsIDB4NjAsIDB4NTcsIDB4NzMsIDB4NDYsIDB4OTQsIDB4N2QsIDB4MDYsCisrCTB4YTAsIDB4NmQsIDB4NDQsIDB4ZWMsIDB4YTIsIDB4MGEsIDB4OWUsIDB4MDUsCisrCTB4MTUsIDB4ZWYsIDB4Y2EsIDB4NWMsIDB4YmYsIDB4MDAsIDB4ZWIsIDB4ZjcsCisrCTB4M2QsIDB4MzIsIDB4ZDQsIDB4YTUsIDB4ZWYsIDB4NDksIDB4ODksIDB4NWUsCisrCTB4NDYsIDB4YjAsIDB4YTYsIDB4NjMsIDB4NWIsIDB4OGEsIDB4NzMsIDB4YWUsCisrCTB4NmYsIDB4ZDUsIDB4OWQsIDB4ZjgsIDB4NGYsIDB4NDAsIDB4YjUsIDB4YjIsCisrCTB4NmUsIDB4ZDMsIDB4YjYsIDB4MDEsIDB4YTksIDB4MjYsIDB4YTIsIDB4MjEsCisrCTB4Y2YsIDB4MzMsIDB4N2EsIDB4M2EsIDB4YTQsIDB4MjMsIDB4MTMsIDB4YjAsCisrCTB4NjksIDB4NmEsIDB4ZWUsIDB4Y2UsIDB4ZDgsIDB4OWQsIDB4MDEsIDB4MWQsCisrCTB4NTAsIDB4YzEsIDB4MzAsIDB4NmMsIDB4YjEsIDB4Y2QsIDB4YTAsIDB4ZjAsCisrCTB4ZjAsIDB4YTIsIDB4NjQsIDB4NmYsIDB4YmIsIDB4YmYsIDB4NWUsIDB4ZTYsCisrCTB4YWIsIDB4ODcsIDB4YjQsIDB4MGYsIDB4NGYsIDB4MTUsIDB4YWYsIDB4YjUsCisrCTB4MjUsIDB4YTEsIDB4YjIsIDB4ZDAsIDB4ODAsIDB4MmMsIDB4ZmIsIDB4ZjksCisrCTB4ZmUsIDB4ZDIsIDB4MzMsIDB4YmIsIDB4NzYsIDB4ZmUsIDB4N2MsIDB4YTgsCisrCTB4NjYsIDB4ZjcsIDB4ZTcsIDB4ODUsIDB4OWYsIDB4MWYsIDB4ODUsIDB4NTcsCisrCTB4ODgsIDB4ZTEsIDB4ZTksIDB4NjMsIDB4ZTQsIDB4ZDgsIDB4MWMsIDB4YTEsCisrCTB4ZmIsIDB4ZGEsIDB4NDQsIDB4MDUsIDB4MmUsIDB4MWQsIDB4M2EsIDB4MWMsCisrCTB4ZmYsIDB4YzgsIDB4M2IsIDB4YzAsIDB4ZmUsIDB4ZGEsIDB4MjIsIDB4MGIsCisrCTB4NDMsIDB4ZDYsIDB4ODgsIDB4MzksIDB4NGMsIDB4NGEsIDB4YTYsIDB4NjksCisrCTB4MTgsIDB4OTMsIDB4NDIsIDB4NGUsIDB4YjUsIDB4Y2MsIDB4NjYsIDB4MGQsCisrCTB4MDksIDB4ZjgsIDB4MWUsIDB4N2MsIDB4ZDMsIDB4M2MsIDB4OTksIDB4MGQsCisrCTB4NTAsIDB4MWQsIDB4NjIsIDB4ZTksIDB4NTcsIDB4MDYsIDB4YmYsIDB4MTksCisrCTB4ODgsIDB4ZGQsIDB4YWQsIDB4N2IsIDB4NGYsIDB4ZjksIDB4YzcsIDB4ODIsCisrCTB4NmQsIDB4OGQsIDB4YzgsIDB4YzQsIDB4YzUsIDB4NzgsIDB4MTcsIDB4MjAsCisrCTB4MTUsIDB4YzUsIDB4NTIsIDB4NDEsIDB4Y2YsIDB4NWIsIDB4ZDYsIDB4N2YsCisrCTB4OTQsIDB4MDIsIDB4NDEsIDB4ZTAsIDB4NDAsIDB4MjIsIDB4MDMsIDB4NWUsCisrCTB4ZDEsIDB4NTMsIDB4ZDQsIDB4ODYsIDB4ZDMsIDB4MmMsIDB4OWYsIDB4MGYsCisrCTB4OTYsIDB4ZTMsIDB4NmIsIDB4OWEsIDB4NzYsIDB4MzIsIDB4MDYsIDB4NDcsCisrCTB4NGIsIDB4MTEsIDB4YjMsIDB4ZGQsIDB4MDMsIDB4NjUsIDB4YmQsIDB4OWIsCisrCTB4MDEsIDB4ZGEsIDB4OWMsIDB4YjksIDB4N2UsIDB4M2YsIDB4NmEsIDB4YzQsCisrCTB4N2IsIDB4ZWEsIDB4ZDQsIDB4M2MsIDB4YjksIDB4ZmIsIDB4NWMsIDB4NmIsCisrCTB4NjQsIDB4MzMsIDB4NTIsIDB4YmEsIDB4NjQsIDB4NzgsIDB4OGYsIDB4YTQsCisrCTB4YWYsIDB4N2EsIDB4NjEsIDB4OGQsIDB4YmMsIDB4YzUsIDB4NzMsIDB4ZTksCisrCTB4NmIsIDB4NTgsIDB4OTcsIDB4NGIsIDB4YmYsIDB4NjMsIDB4MjIsIDB4ZDMsCisrCTB4MzcsIDB4MDIsIDB4NTQsIDB4YzUsIDB4YjksIDB4MTYsIDB4NGEsIDB4ZjAsCisrCTB4MTksIDB4ZDgsIDB4OTQsIDB4NTcsIDB4YjgsIDB4OGEsIDB4YjMsIDB4MTYsCisrCTB4M2IsIDB4ZDAsIDB4ODQsIDB4OGUsIDB4NjcsIDB4YTYsIDB4YTMsIDB4N2QsCisrCTB4NzgsIDB4ZWMsIDB4MDAKKyt9OworK3N0YXRpYyBjb25zdCB1OCBkZWNfYXNzb2MwMTJbXSBfX2luaXRjb25zdCA9IHsKKysJMHhiMSwgMHg2OSwgMHg4MywgMHg4NywgMHgzMCwgMHhhYSwgMHg1ZCwgMHhiOCwKKysJMHg3NywgMHhlOCwgMHgyMSwgMHhmZiwgMHgwNiwgMHg1OSwgMHgzNSwgMHhjZSwKKysJMHg3NSwgMHhmZSwgMHgzOCwgMHhlZiwgMHhiOCwgMHg5MSwgMHg0MywgMHg4YywKKysJMHhjZiwgMHg3MCwgMHhkZCwgMHgwYSwgMHg2OCwgMHhiZiwgMHhkNCwgMHhiYywKKysJMHgxNiwgMHg3NiwgMHg5OSwgMHgzNiwgMHgxZSwgMHg1OCwgMHg3OSwgMHg1ZSwKKysJMHhkNCwgMHgyOSwgMHhmNywgMHgzMywgMHg5MywgMHg0OCwgMHhkYiwgMHg1ZiwKKysJMHgwMSwgMHhhZSwgMHg5YywgMHhiNiwgMHhlNCwgMHg4OCwgMHg2ZCwgMHgyYiwKKysJMHg3NiwgMHg3NSwgMHhlMCwgMHhmMywgMHg3NCwgMHhlMiwgMHhjOQorK307Cisrc3RhdGljIGNvbnN0IHU4IGRlY19ub25jZTAxMltdIF9faW5pdGNvbnN0ID0geworKwkweDA1LCAweGEzLCAweDkzLCAweGVkLCAweDMwLCAweGM1LCAweGEyLCAweDA2CisrfTsKKytzdGF0aWMgY29uc3QgdTggZGVjX2tleTAxMltdIF9faW5pdGNvbnN0ID0geworKwkweGIzLCAweDM1LCAweDUwLCAweDAzLCAweDU0LCAweDJlLCAweDQwLCAweDVlLAorKwkweDhmLCAweDU5LCAweDhlLCAweGM1LCAweDkwLCAweGQ1LCAweDI3LCAweDJkLAorKwkweGJhLCAweDI5LCAweDJlLCAweGNiLCAweDFiLCAweDcwLCAweDQ0LCAweDFlLAorKwkweDY1LCAweDkxLCAweDZlLCAweDJhLCAweDc5LCAweDIyLCAweGRhLCAweDY0CisrfTsKKysKKytzdGF0aWMgY29uc3QgdTggZGVjX2lucHV0MDEzW10gX19pbml0Y29uc3QgPSB7CisrCTB4NTIsIDB4MzQsIDB4YjMsIDB4NjUsIDB4M2IsIDB4YjcsIDB4ZTUsIDB4ZDMsCisrCTB4YWIsIDB4NDksIDB4MTcsIDB4NjAsIDB4ZDIsIDB4NTIsIDB4NTYsIDB4ZGYsCisrCTB4ZGYsIDB4MzQsIDB4NTYsIDB4ODIsIDB4ZTIsIDB4YmUsIDB4ZTUsIDB4ZTEsCisrCTB4MjgsIDB4ZDEsIDB4NGUsIDB4NWYsIDB4NGYsIDB4MDEsIDB4N2QsIDB4M2YsCisrCTB4OTksIDB4NmIsIDB4MzAsIDB4NmUsIDB4MWEsIDB4N2MsIDB4NGMsIDB4OGUsCisrCTB4NjIsIDB4ODEsIDB4YWUsIDB4ODYsIDB4M2YsIDB4NmIsIDB4ZDAsIDB4YjUsCisrCTB4YTksIDB4Y2YsIDB4NTAsIDB4ZjEsIDB4MDIsIDB4MTIsIDB4YTAsIDB4MGIsCisrCTB4MjQsIDB4ZTksIDB4ZTYsIDB4NzIsIDB4ODksIDB4MmMsIDB4NTIsIDB4MWIsCisrCTB4MzQsIDB4MzgsIDB4ZjgsIDB4NzUsIDB4NWYsIDB4YTAsIDB4NzQsIDB4ZTIsCisrCTB4OTksIDB4ZGQsIDB4YTYsIDB4NGIsIDB4MTQsIDB4NTAsIDB4NGUsIDB4ZjEsCisrCTB4YmUsIDB4ZDYsIDB4OWUsIDB4ZGIsIDB4YjIsIDB4MjQsIDB4MjcsIDB4NzQsCisrCTB4MTIsIDB4NGEsIDB4NzgsIDB4NzgsIDB4MTcsIDB4YTUsIDB4NTgsIDB4OGUsCisrCTB4MmYsIDB4ZjksIDB4ZjQsIDB4OGQsIDB4ZWUsIDB4MDMsIDB4ODgsIDB4YWUsCisrCTB4YjgsIDB4MjksIDB4YTEsIDB4MmYsIDB4NGIsIDB4ZWUsIDB4OTIsIDB4YmQsCisrCTB4ODcsIDB4YjMsIDB4Y2UsIDB4MzQsIDB4MjEsIDB4NTcsIDB4NDYsIDB4MDQsCisrCTB4NDksIDB4MGMsIDB4ODAsIDB4ZjIsIDB4MDEsIDB4MTMsIDB4YTEsIDB4NTUsCisrCTB4YjMsIDB4ZmYsIDB4NDQsIDB4MzAsIDB4M2MsIDB4MWMsIDB4ZDAsIDB4ZWYsCisrCTB4YmMsIDB4MTgsIDB4NzQsIDB4MjYsIDB4YWQsIDB4NDEsIDB4NWIsIDB4NWIsCisrCTB4M2UsIDB4OWEsIDB4N2EsIDB4NDYsIDB4NGYsIDB4MTYsIDB4ZDYsIDB4NzQsCisrCTB4NWEsIDB4YjcsIDB4M2EsIDB4MjgsIDB4MzEsIDB4ZDgsIDB4YWUsIDB4MjYsCisrCTB4YWMsIDB4NTAsIDB4NTMsIDB4ODYsIDB4ZjIsIDB4NTYsIDB4ZDcsIDB4M2YsCisrCTB4MjksIDB4YmMsIDB4NDUsIDB4NjgsIDB4OGUsIDB4Y2IsIDB4OTgsIDB4NjQsCisrCTB4ZGQsIDB4YzksIDB4YmEsIDB4YjgsIDB4NGIsIDB4N2IsIDB4ODIsIDB4ZGQsCisrCTB4MTQsIDB4YTcsIDB4Y2IsIDB4NzEsIDB4NzIsIDB4MDAsIDB4NWMsIDB4YWQsCisrCTB4N2IsIDB4NmEsIDB4ODksIDB4YTQsIDB4M2QsIDB4YmYsIDB4YjUsIDB4NGIsCisrCTB4M2UsIDB4N2MsIDB4NWEsIDB4Y2YsIDB4YjgsIDB4YTEsIDB4YzUsIDB4NmUsCisrCTB4YzgsIDB4YjYsIDB4MzEsIDB4NTcsIDB4N2IsIDB4ZGYsIDB4YTUsIDB4N2UsCisrCTB4YjEsIDB4ZDYsIDB4NDIsIDB4MmEsIDB4MzEsIDB4MzYsIDB4ZDEsIDB4ZDAsCisrCTB4M2YsIDB4N2EsIDB4ZTUsIDB4OTQsIDB4ZDYsIDB4MzYsIDB4YTAsIDB4NmYsCisrCTB4YjcsIDB4NDAsIDB4N2QsIDB4MzcsIDB4YzYsIDB4NTUsIDB4N2MsIDB4NTAsCisrCTB4NDAsIDB4NmQsIDB4MjksIDB4ODksIDB4ZTMsIDB4NWEsIDB4YWUsIDB4OTcsCisrCTB4ZTcsIDB4NDQsIDB4NDksIDB4NmUsIDB4YmQsIDB4ODEsIDB4M2QsIDB4MDMsCisrCTB4OTMsIDB4MDYsIDB4MTIsIDB4MDYsIDB4ZTIsIDB4NDEsIDB4MTIsIDB4NGEsCisrCTB4ZjEsIDB4NmEsIDB4YTQsIDB4NTgsIDB4YTIsIDB4ZmIsIDB4ZDIsIDB4MTUsCisrCTB4YmEsIDB4YzksIDB4NzksIDB4YzksIDB4Y2UsIDB4NWUsIDB4MTMsIDB4YmIsCisrCTB4ZjEsIDB4MDksIDB4MDQsIDB4Y2MsIDB4ZmQsIDB4ZTgsIDB4NTEsIDB4MzQsCisrCTB4NmEsIDB4ZTgsIDB4NjEsIDB4ODgsIDB4ZGEsIDB4ZWQsIDB4MDEsIDB4NDcsCisrCTB4ODQsIDB4ZjUsIDB4NzMsIDB4MjUsIDB4ZjksIDB4MWMsIDB4NDIsIDB4ODYsCisrCTB4MDcsIDB4ZjMsIDB4NWIsIDB4MWEsIDB4MDEsIDB4YjMsIDB4ZWIsIDB4MjQsCisrCTB4MzIsIDB4OGQsIDB4ZjYsIDB4ZWQsIDB4N2MsIDB4NGIsIDB4ZWIsIDB4M2MsCisrCTB4MzYsIDB4NDIsIDB4MjgsIDB4ZGYsIDB4ZGYsIDB4YjYsIDB4YmUsIDB4ZDksCisrCTB4OGMsIDB4NTIsIDB4ZDMsIDB4MmIsIDB4MDgsIDB4OTAsIDB4OGMsIDB4ZTcsCisrCTB4OTgsIDB4MzEsIDB4ZTIsIDB4MzIsIDB4OGUsIDB4ZmMsIDB4MTEsIDB4NDgsCisrCTB4MDAsIDB4YTgsIDB4NmEsIDB4NDIsIDB4NGEsIDB4MDIsIDB4YzYsIDB4NGIsCisrCTB4MDksIDB4ZjEsIDB4ZTMsIDB4NDksIDB4ZjMsIDB4NDUsIDB4MWYsIDB4MGUsCisrCTB4YmMsIDB4NTYsIDB4ZTIsIDB4ZTQsIDB4ZGYsIDB4ZmIsIDB4ZWIsIDB4NjEsCisrCTB4ZmEsIDB4MjQsIDB4YzEsIDB4NjMsIDB4NzUsIDB4YmIsIDB4NDcsIDB4NzUsCisrCTB4YWYsIDB4ZTEsIDB4NTMsIDB4MTYsIDB4OTYsIDB4MjEsIDB4ODUsIDB4MjYsCisrCTB4MTEsIDB4YjMsIDB4NzYsIDB4ZTMsIDB4MjMsIDB4YTEsIDB4NmIsIDB4NzQsCisrCTB4MzcsIDB4ZDAsIDB4ZGUsIDB4MDYsIDB4OTAsIDB4NzEsIDB4NWQsIDB4NDMsCisrCTB4ODgsIDB4OWIsIDB4MDAsIDB4NTQsIDB4YTYsIDB4NzUsIDB4MmYsIDB4YTEsCisrCTB4YzIsIDB4MGIsIDB4NzMsIDB4MjAsIDB4MWQsIDB4YjYsIDB4MjEsIDB4NzksCisrCTB4NTcsIDB4M2YsIDB4ZmEsIDB4MDksIDB4YmUsIDB4OGEsIDB4MzMsIDB4YzMsCisrCTB4NTIsIDB4ZjAsIDB4MWQsIDB4ODIsIDB4MzEsIDB4ZDEsIDB4NTUsIDB4YjUsCisrCTB4NmMsIDB4OTksIDB4MjUsIDB4Y2YsIDB4NWMsIDB4MzIsIDB4Y2UsIDB4ZTksCisrCTB4MGQsIDB4ZmEsIDB4NjksIDB4MmMsIDB4ZDUsIDB4MGQsIDB4YzUsIDB4NmQsCisrCTB4ODYsIDB4ZDAsIDB4MGMsIDB4M2IsIDB4MDYsIDB4NTAsIDB4NzksIDB4ZTgsCisrCTB4YzMsIDB4YWUsIDB4MDQsIDB4ZTYsIDB4Y2QsIDB4NTEsIDB4ZTQsIDB4MjYsCisrCTB4OWIsIDB4NGYsIDB4N2UsIDB4YTYsIDB4MGYsIDB4YWIsIDB4ZDgsIDB4ZTUsCisrCTB4ZGUsIDB4YTksIDB4MDAsIDB4OTUsIDB4YmUsIDB4YTMsIDB4OWQsIDB4NWQsCisrCTB4YjIsIDB4MDksIDB4NzAsIDB4MTgsIDB4MWMsIDB4ZjAsIDB4YWMsIDB4MjksCisrCTB4MjMsIDB4MDIsIDB4MjksIDB4MjgsIDB4ZDIsIDB4NzQsIDB4MzUsIDB4NTcsCisrCTB4NjIsIDB4MGYsIDB4MjQsIDB4ZWEsIDB4NWUsIDB4MzMsIDB4YzIsIDB4OTIsCisrCTB4ZjMsIDB4NzgsIDB4NGQsIDB4MzAsIDB4MWUsIDB4YTEsIDB4OTksIDB4YTksCisrCTB4ODIsIDB4YjAsIDB4NDIsIDB4MzEsIDB4OGQsIDB4YWQsIDB4OGEsIDB4YmMsCisrCTB4ZmMsIDB4ZDQsIDB4NTcsIDB4NDcsIDB4M2UsIDB4YjQsIDB4NTAsIDB4ZGQsCisrCTB4NmUsIDB4MmMsIDB4ODAsIDB4NGQsIDB4MjIsIDB4ZjEsIDB4ZmIsIDB4NTcsCisrCTB4YzQsIDB4ZGQsIDB4MTcsIDB4ZTEsIDB4OGEsIDB4MzYsIDB4NGEsIDB4YjMsCisrCTB4MzcsIDB4Y2EsIDB4YzksIDB4NGUsIDB4YWIsIDB4ZDUsIDB4NjksIDB4YzQsCisrCTB4ZjQsIDB4YmMsIDB4MGIsIDB4M2IsIDB4NDQsIDB4NGIsIDB4MjksIDB4OWMsCisrCTB4ZWUsIDB4ZDQsIDB4MzUsIDB4MjIsIDB4MjEsIDB4YjAsIDB4MWYsIDB4MjcsCisrCTB4NjQsIDB4YTgsIDB4NTEsIDB4MWIsIDB4ZjAsIDB4OWYsIDB4MTksIDB4NWMsCisrCTB4ZmIsIDB4NWEsIDB4NjQsIDB4NzQsIDB4NzAsIDB4NDUsIDB4MDksIDB4ZjUsCisrCTB4NjQsIDB4ZmUsIDB4MWEsIDB4MmQsIDB4YzksIDB4MTQsIDB4MDQsIDB4MTQsCisrCTB4Y2YsIDB4ZDUsIDB4N2QsIDB4NjAsIDB4YWYsIDB4OTQsIDB4MzksIDB4OTQsCisrCTB4ZTIsIDB4N2QsIDB4NzksIDB4ODIsIDB4ZDAsIDB4NjUsIDB4M2IsIDB4NmIsCisrCTB4OWMsIDB4MTksIDB4ODQsIDB4YjQsIDB4NmQsIDB4YjMsIDB4MGMsIDB4OTksCisrCTB4YzAsIDB4NTYsIDB4YTgsIDB4YmQsIDB4NzMsIDB4Y2UsIDB4MDUsIDB4ODQsCisrCTB4M2UsIDB4MzAsIDB4YWEsIDB4YzQsIDB4OWIsIDB4MWIsIDB4MDQsIDB4MmEsCisrCTB4OWYsIDB4ZDcsIDB4NDMsIDB4MmIsIDB4MjMsIDB4ZGYsIDB4YmYsIDB4YWEsCisrCTB4ZDUsIDB4YzIsIDB4NDMsIDB4MmQsIDB4NzAsIDB4YWIsIDB4ZGMsIDB4NzUsCisrCTB4YWQsIDB4YWMsIDB4ZjcsIDB4YzAsIDB4YmUsIDB4NjcsIDB4YjIsIDB4NzQsCisrCTB4ZWQsIDB4NjcsIDB4MTAsIDB4NGEsIDB4OTIsIDB4NjAsIDB4YzEsIDB4NDAsCisrCTB4NTAsIDB4MTksIDB4OGEsIDB4OGEsIDB4OGMsIDB4MDksIDB4MGUsIDB4NzIsCisrCTB4ZTEsIDB4NzMsIDB4NWUsIDB4ZTgsIDB4NDEsIDB4ODUsIDB4NjMsIDB4OWYsCisrCTB4M2YsIDB4ZDcsIDB4N2QsIDB4YzQsIDB4ZmIsIDB4MjIsIDB4NWQsIDB4OTIsCisrCTB4NmMsIDB4YjMsIDB4MWUsIDB4ZTIsIDB4NTAsIDB4MmYsIDB4ODIsIDB4YTgsCisrCTB4MjgsIDB4YzAsIDB4YjUsIDB4ZDcsIDB4NWYsIDB4NjgsIDB4MGQsIDB4MmMsCisrCTB4MmQsIDB4YWYsIDB4N2UsIDB4ZmEsIDB4MmUsIDB4MDgsIDB4MGYsIDB4MWYsCisrCTB4NzAsIDB4OWYsIDB4ZTksIDB4MTksIDB4NzIsIDB4NTUsIDB4ZjgsIDB4ZmIsCisrCTB4NTEsIDB4ZDIsIDB4MzMsIDB4NWQsIDB4YTAsIDB4ZDMsIDB4MmIsIDB4MGEsCisrCTB4NmMsIDB4YmMsIDB4NGUsIDB4Y2YsIDB4MzYsIDB4NGQsIDB4ZGMsIDB4M2IsCisrCTB4ZTksIDB4M2UsIDB4ODEsIDB4N2MsIDB4NjEsIDB4ZGIsIDB4MjAsIDB4MmQsCisrCTB4M2EsIDB4YzMsIDB4YjMsIDB4MGMsIDB4MWUsIDB4MDAsIDB4YjksIDB4N2MsCisrCTB4ZjUsIDB4Y2EsIDB4MTAsIDB4NWYsIDB4M2EsIDB4NzEsIDB4YjMsIDB4ZTQsCisrCTB4MjAsIDB4ZGIsIDB4MGMsIDB4MmEsIDB4OTgsIDB4NjMsIDB4NDUsIDB4MDAsCisrCTB4NTgsIDB4ZjYsIDB4NjgsIDB4ZTQsIDB4MGIsIDB4ZGEsIDB4MTMsIDB4M2IsCisrCTB4NjAsIDB4NWMsIDB4NzYsIDB4ZGIsIDB4YjksIDB4OTcsIDB4NzEsIDB4ZTQsCisrCTB4ZDksIDB4YjcsIDB4ZGIsIDB4YmQsIDB4NjgsIDB4YzcsIDB4ODQsIDB4ODQsCisrCTB4YWEsIDB4N2MsIDB4NjgsIDB4NjIsIDB4NWUsIDB4MTYsIDB4ZmMsIDB4YmEsCisrCTB4NzIsIDB4YWEsIDB4OWEsIDB4YTksIDB4ZWIsIDB4N2MsIDB4NzUsIDB4NDcsCisrCTB4OTcsIDB4N2UsIDB4YWQsIDB4ZTIsIDB4ZDksIDB4OTEsIDB4ZTgsIDB4ZTQsCisrCTB4YTUsIDB4MzEsIDB4ZDcsIDB4MDEsIDB4OGUsIDB4YTIsIDB4MTEsIDB4ODgsCisrCTB4OTUsIDB4YjksIDB4ZjIsIDB4OWIsIDB4ZDMsIDB4N2YsIDB4MWIsIDB4ODEsCisrCTB4MjIsIDB4ZjcsIDB4OTgsIDB4NjAsIDB4MGEsIDB4NjQsIDB4YTYsIDB4YzEsCisrCTB4ZjYsIDB4NDksIDB4YzcsIDB4ZTMsIDB4MDcsIDB4NGQsIDB4OTQsIDB4N2EsCisrCTB4Y2YsIDB4NmUsIDB4NjgsIDB4MGMsIDB4MWIsIDB4M2YsIDB4NmUsIDB4MmUsCisrCTB4ZWUsIDB4OTIsIDB4ZmEsIDB4NTIsIDB4YjMsIDB4NTksIDB4ZjgsIDB4ZjEsCisrCTB4OGYsIDB4NmEsIDB4NjYsIDB4YTMsIDB4ODIsIDB4NzYsIDB4NGEsIDB4MDcsCisrCTB4MWEsIDB4YzcsIDB4ZGQsIDB4ZjUsIDB4ZGEsIDB4OWMsIDB4M2MsIDB4MjQsCisrCTB4YmYsIDB4ZmQsIDB4NDIsIDB4YTEsIDB4MTAsIDB4NjQsIDB4NmEsIDB4MGYsCisrCTB4ODksIDB4ZWUsIDB4MzYsIDB4YTUsIDB4Y2UsIDB4OTksIDB4NDgsIDB4NmEsCisrCTB4ZjAsIDB4OWYsIDB4OWUsIDB4NjksIDB4YTQsIDB4NDAsIDB4MjAsIDB4ZTksCisrCTB4MTYsIDB4MTUsIDB4ZjcsIDB4ZGIsIDB4NzUsIDB4MDIsIDB4Y2IsIDB4ZTksCisrCTB4NzMsIDB4OGIsIDB4M2IsIDB4NDksIDB4MmYsIDB4ZjAsIDB4YWYsIDB4NTEsCisrCTB4MDYsIDB4NWMsIDB4ZGYsIDB4MjcsIDB4MjcsIDB4NDksIDB4NmEsIDB4ZDEsCisrCTB4Y2MsIDB4YzcsIDB4YjUsIDB4NjMsIDB4YjUsIDB4ZmMsIDB4YjgsIDB4NWMsCisrCTB4ODcsIDB4N2YsIDB4ODQsIDB4YjQsIDB4Y2MsIDB4MTQsIDB4YTksIDB4NTMsCisrCTB4ZGEsIDB4YTQsIDB4NTYsIDB4ZjgsIDB4YjYsIDB4MWIsIDB4Y2MsIDB4NDAsCisrCTB4MjcsIDB4NTIsIDB4MDYsIDB4NWEsIDB4MTMsIDB4ODEsIDB4ZDcsIDB4M2EsCisrCTB4ZDQsIDB4M2IsIDB4ZmIsIDB4NDksIDB4NjUsIDB4MzEsIDB4MzMsIDB4YjIsCisrCTB4ZmEsIDB4Y2QsIDB4YWQsIDB4NTgsIDB4NGUsIDB4MmIsIDB4YWUsIDB4ZDIsCisrCTB4MjAsIDB4ZmIsIDB4MWEsIDB4NDgsIDB4YjQsIDB4M2YsIDB4OWEsIDB4ZDgsCisrCTB4N2EsIDB4MzUsIDB4NGEsIDB4YzgsIDB4ZWUsIDB4ODgsIDB4NWUsIDB4MDcsCisrCTB4NjYsIDB4NTQsIDB4YjksIDB4ZWMsIDB4OWYsIDB4YTMsIDB4ZTMsIDB4YjksCisrCTB4MzcsIDB4YWEsIDB4NDksIDB4NzYsIDB4MzEsIDB4ZGEsIDB4NzQsIDB4MmQsCisrCTB4M2MsIDB4YTQsIDB4NjUsIDB4MTAsIDB4MzIsIDB4MzgsIDB4ZjAsIDB4ZGUsCisrCTB4ZDMsIDB4OTksIDB4MTcsIDB4YWEsIDB4NzEsIDB4YWEsIDB4OGYsIDB4MGYsCisrCTB4OGMsIDB4YWYsIDB4YTIsIDB4ZjgsIDB4NWQsIDB4NjQsIDB4YmEsIDB4MWQsCisrCTB4YTMsIDB4ZWYsIDB4OTYsIDB4NzMsIDB4ZTgsIDB4YTEsIDB4MDIsIDB4OGQsCisrCTB4MGMsIDB4NmQsIDB4YjgsIDB4MDYsIDB4OTAsIDB4YjgsIDB4MDgsIDB4NTYsCisrCTB4MmMsIDB4YTcsIDB4MDYsIDB4YzksIDB4YzIsIDB4MzgsIDB4ZGIsIDB4N2MsCisrCTB4NjMsIDB4YjEsIDB4NTcsIDB4OGUsIDB4ZWEsIDB4N2MsIDB4NzksIDB4ZjMsCisrCTB4NDksIDB4MWQsIDB4ZmUsIDB4OWYsIDB4ZjMsIDB4NmUsIDB4YjEsIDB4MWQsCisrCTB4YmEsIDB4MTksIDB4ODAsIDB4MWEsIDB4MGEsIDB4ZDMsIDB4YjAsIDB4MjYsCisrCTB4MjEsIDB4NDAsIDB4YjEsIDB4N2MsIDB4ZjksIDB4NGQsIDB4OGQsIDB4MTAsCisrCTB4YzEsIDB4N2UsIDB4ZjQsIDB4ZjYsIDB4M2MsIDB4YTgsIDB4ZmQsIDB4N2MsCisrCTB4YTMsIDB4OTIsIDB4YjIsIDB4MGYsIDB4YWEsIDB4Y2MsIDB4YTYsIDB4MTEsCisrCTB4ZmUsIDB4MDQsIDB4ZTMsIDB4ZDEsIDB4N2EsIDB4MzIsIDB4ODksIDB4ZGYsCisrCTB4MGQsIDB4YzQsIDB4OGYsIDB4NzksIDB4NmIsIDB4Y2EsIDB4MTYsIDB4N2MsCisrCTB4NmUsIDB4ZjksIDB4YWQsIDB4MGYsIDB4ZjYsIDB4ZmUsIDB4MjcsIDB4ZGIsCisrCTB4YzQsIDB4MTMsIDB4NzAsIDB4ZjEsIDB4NjIsIDB4MWEsIDB4NGYsIDB4NzksCisrCTB4NDAsIDB4YzksIDB4OWIsIDB4OGIsIDB4MjEsIDB4ZWEsIDB4ODQsIDB4ZmEsCisrCTB4ZjUsIDB4ZjEsIDB4ODksIDB4Y2UsIDB4YjcsIDB4NTUsIDB4MGEsIDB4ODAsCisrCTB4MzksIDB4MmYsIDB4NTUsIDB4MzYsIDB4MTYsIDB4OWMsIDB4N2IsIDB4MDgsCisrCTB4YmQsIDB4ODcsIDB4MGQsIDB4YTUsIDB4MzIsIDB4ZjEsIDB4NTIsIDB4N2MsCisrCTB4ZTgsIDB4NTUsIDB4NjAsIDB4NWIsIDB4ZDcsIDB4NjksIDB4ZTQsIDB4ZmMsCisrCTB4ZmEsIDB4MTIsIDB4ODUsIDB4OTYsIDB4ZWEsIDB4NTAsIDB4MjgsIDB4YWIsCisrCTB4OGEsIDB4ZjcsIDB4YmIsIDB4MGUsIDB4NTMsIDB4NzQsIDB4Y2EsIDB4YTYsCisrCTB4MjcsIDB4MDksIDB4YzIsIDB4YjUsIDB4ZGUsIDB4MTgsIDB4MTQsIDB4ZDksCisrCTB4ZWEsIDB4ZTUsIDB4MjksIDB4MWMsIDB4NDAsIDB4NTYsIDB4Y2YsIDB4ZDcsCisrCTB4YWUsIDB4MDUsIDB4M2YsIDB4NjUsIDB4YWYsIDB4MDUsIDB4NzMsIDB4ZTIsCisrCTB4MzUsIDB4OTYsIDB4MjcsIDB4MDcsIDB4MTQsIDB4YzAsIDB4YWQsIDB4MzMsCisrCTB4ZjEsIDB4ZGMsIDB4NDQsIDB4N2EsIDB4ODksIDB4MTcsIDB4NzcsIDB4ZDIsCisrCTB4OWMsIDB4NTgsIDB4NjAsIDB4ZjAsIDB4M2YsIDB4N2IsIDB4MmQsIDB4MmUsCisrCTB4NTcsIDB4OTUsIDB4NTQsIDB4ODcsIDB4ZWQsIDB4ZjIsIDB4YzcsIDB4NGMsCisrCTB4ZjAsIDB4YWUsIDB4NTYsIDB4MjksIDB4MTksIDB4N2QsIDB4NjYsIDB4NGIsCisrCTB4OWIsIDB4ODMsIDB4ODQsIDB4NDIsIDB4M2IsIDB4MDEsIDB4MjUsIDB4NjYsCisrCTB4OGUsIDB4MDIsIDB4ZGUsIDB4YjksIDB4ODMsIDB4NTQsIDB4MTksIDB4ZjYsCisrCTB4OWYsIDB4NzksIDB4MGQsIDB4NjcsIDB4YzUsIDB4MWQsIDB4N2EsIDB4NDQsCisrCTB4MDIsIDB4OTgsIDB4YTcsIDB4MTYsIDB4MWMsIDB4MjksIDB4MGQsIDB4NzQsCisrCTB4ZmYsIDB4ODUsIDB4NDAsIDB4MDYsIDB4ZWYsIDB4MmMsIDB4YTksIDB4YzYsCisrCTB4ZjUsIDB4NTMsIDB4MDcsIDB4MDYsIDB4YWUsIDB4ZTQsIDB4ZmEsIDB4NWYsCisrCTB4ZDgsIDB4MzksIDB4NGQsIDB4ZjEsIDB4OWIsIDB4NmIsIDB4ZDksIDB4MjQsCisrCTB4ODQsIDB4ZmUsIDB4MDMsIDB4NGMsIDB4YjIsIDB4M2YsIDB4ZGYsIDB4YTEsCisrCTB4MDUsIDB4OWUsIDB4NTAsIDB4MTQsIDB4NWEsIDB4ZDksIDB4MWEsIDB4YTIsCisrCTB4YTcsIDB4ZmEsIDB4ZmEsIDB4MTcsIDB4ZjcsIDB4NzgsIDB4ZDYsIDB4YjUsCisrCTB4OTIsIDB4NjEsIDB4OTEsIDB4YWMsIDB4MzYsIDB4ZmEsIDB4NTYsIDB4MGQsCisrCTB4MzgsIDB4MzIsIDB4MTgsIDB4ODUsIDB4MDgsIDB4NTgsIDB4MzcsIDB4ZjAsCisrCTB4NGIsIDB4ZGIsIDB4NTksIDB4ZTcsIDB4YTQsIDB4MzQsIDB4YzAsIDB4MWIsCisrCTB4MDEsIDB4YWYsIDB4MmQsIDB4ZGUsIDB4YTEsIDB4YWEsIDB4NWQsIDB4ZDMsCisrCTB4ZWMsIDB4ZTEsIDB4ZDQsIDB4ZjcsIDB4ZTYsIDB4NTQsIDB4NjgsIDB4ZjAsCisrCTB4NTEsIDB4OTcsIDB4YTcsIDB4ODksIDB4ZWEsIDB4MjQsIDB4YWQsIDB4ZDMsCisrCTB4NmUsIDB4NDcsIDB4OTMsIDB4OGIsIDB4NGIsIDB4YjQsIDB4ZjcsIDB4MWMsCisrCTB4NDIsIDB4MDYsIDB4NjcsIDB4ZTgsIDB4OTksIDB4ZjYsIDB4ZjUsIDB4N2IsCisrCTB4ODUsIDB4YjUsIDB4NjUsIDB4YjUsIDB4YjUsIDB4ZDIsIDB4MzcsIDB4ZjUsCisrCTB4ZjMsIDB4MDIsIDB4YTYsIDB4NGQsIDB4MTEsIDB4YTcsIDB4ZGMsIDB4NTEsCisrCTB4MDksIDB4N2YsIDB4YTAsIDB4ZDgsIDB4ODgsIDB4MWMsIDB4MTMsIDB4NzEsCisrCTB4YWUsIDB4OWMsIDB4YjcsIDB4N2IsIDB4MzQsIDB4ZDYsIDB4NGUsIDB4NjgsCisrCTB4MjYsIDB4ODMsIDB4NTEsIDB4YWYsIDB4MWQsIDB4ZWUsIDB4OGIsIDB4YmIsCisrCTB4NjksIDB4NDMsIDB4MmIsIDB4OWUsIDB4OGEsIDB4YmMsIDB4MDIsIDB4MGUsCisrCTB4YTAsIDB4MWIsIDB4ZTAsIDB4YTgsIDB4NWYsIDB4NmYsIDB4YWYsIDB4MWIsCisrCTB4OGYsIDB4ZTcsIDB4NjQsIDB4NzEsIDB4NzQsIDB4MTEsIDB4N2UsIDB4YTgsCisrCTB4ZDgsIDB4ZjksIDB4OTcsIDB4MDYsIDB4YzMsIDB4YjYsIDB4ZmIsIDB4ZmIsCisrCTB4YjcsIDB4M2QsIDB4MzUsIDB4OWQsIDB4M2IsIDB4NTIsIDB4ZWQsIDB4NTQsCisrCTB4Y2EsIDB4ZjQsIDB4ODEsIDB4MDEsIDB4MmQsIDB4MWIsIDB4YzMsIDB4YTcsCisrCTB4MDAsIDB4M2QsIDB4MWEsIDB4MzksIDB4NTQsIDB4ZTEsIDB4ZjYsIDB4ZmYsCisrCTB4ZWQsIDB4NmYsIDB4MGIsIDB4NWEsIDB4NjgsIDB4ZGEsIDB4NTgsIDB4ZGQsCisrCTB4YTksIDB4Y2YsIDB4NWMsIDB4NGEsIDB4ZTUsIDB4MDksIDB4NGUsIDB4ZGUsCisrCTB4OWQsIDB4YmMsIDB4M2UsIDB4ZWUsIDB4NWEsIDB4MDAsIDB4M2IsIDB4MmMsCisrCTB4ODcsIDB4MTAsIDB4NjUsIDB4NjAsIDB4ZGQsIDB4ZDcsIDB4NTYsIDB4ZDEsCisrCTB4NGMsIDB4NjQsIDB4NDUsIDB4ZTQsIDB4MjEsIDB4ZWMsIDB4NzgsIDB4ZjgsCisrCTB4MjUsIDB4N2EsIDB4M2UsIDB4MTYsIDB4NWQsIDB4MDksIDB4NTMsIDB4MTQsCisrCTB4YmUsIDB4NGYsIDB4YWUsIDB4ODcsIDB4ZDgsIDB4ZDEsIDB4YWEsIDB4M2MsCisrCTB4ZjYsIDB4M2UsIDB4YTQsIDB4NzAsIDB4OGMsIDB4NWUsIDB4NzAsIDB4YTQsCisrCTB4YjMsIDB4NmIsIDB4NjYsIDB4NzMsIDB4ZDMsIDB4YmYsIDB4MzEsIDB4MDYsCisrCTB4MTksIDB4NjIsIDB4OTMsIDB4MTUsIDB4ZjIsIDB4ODYsIDB4ZTQsIDB4NTIsCisrCTB4N2UsIDB4NTMsIDB4NGMsIDB4MTIsIDB4MzgsIDB4Y2MsIDB4MzQsIDB4N2QsCisrCTB4NTcsIDB4ZjYsIDB4NDIsIDB4OTMsIDB4OGEsIDB4YzQsIDB4ZWUsIDB4NWMsCisrCTB4OGEsIDB4ZTEsIDB4NTIsIDB4OGYsIDB4NTYsIDB4NjQsIDB4ZjYsIDB4YTYsCisrCTB4ZDEsIDB4OTEsIDB4NTcsIDB4NzAsIDB4Y2QsIDB4MTEsIDB4NzYsIDB4ZjUsCisrCTB4NTksIDB4NjAsIDB4NjAsIDB4M2MsIDB4YzEsIDB4YzMsIDB4MGIsIDB4N2YsCisrCTB4NTgsIDB4MWEsIDB4NTAsIDB4OTEsIDB4ZjEsIDB4NjgsIDB4OGYsIDB4NmUsCisrCTB4NzQsIDB4NzQsIDB4YTgsIDB4NTEsIDB4MGIsIDB4ZjcsIDB4N2EsIDB4OTgsCisrCTB4MzcsIDB4ZjIsIDB4MGEsIDB4MGUsIDB4YTQsIDB4OTcsIDB4MDQsIDB4YjgsCisrCTB4OWIsIDB4ZmQsIDB4YTAsIDB4ZWEsIDB4ZjcsIDB4MGQsIDB4ZTEsIDB4ZGIsCisrCTB4MDMsIDB4ZjAsIDB4MzEsIDB4MjksIDB4ZjgsIDB4ZGQsIDB4NmIsIDB4OGIsCisrCTB4NWQsIDB4ZDgsIDB4NTksIDB4YTksIDB4MjksIDB4Y2YsIDB4OWEsIDB4NzksCisrCTB4ODksIDB4MTksIDB4NjMsIDB4NDYsIDB4MDksIDB4NzksIDB4NmEsIDB4MTEsCisrCTB4ZGEsIDB4NjMsIDB4NjgsIDB4NDgsIDB4NzcsIDB4MjMsIDB4ZmIsIDB4N2QsCisrCTB4M2EsIDB4NDMsIDB4Y2IsIDB4MDIsIDB4M2IsIDB4N2EsIDB4NmQsIDB4MTAsCisrCTB4MmEsIDB4OWUsIDB4YWMsIDB4ZjEsIDB4ZDQsIDB4MTksIDB4ZjgsIDB4MjMsCisrCTB4NjQsIDB4MWQsIDB4MmMsIDB4NWYsIDB4ZjIsIDB4YjAsIDB4NWMsIDB4MjMsCisrCTB4MjcsIDB4ZjcsIDB4MjcsIDB4MzAsIDB4MTYsIDB4MzcsIDB4YjEsIDB4OTAsCisrCTB4YWIsIDB4MzgsIDB4ZmIsIDB4NTUsIDB4Y2QsIDB4NzgsIDB4NTgsIDB4ZDQsCisrCTB4N2QsIDB4NDMsIDB4ZjYsIDB4NDUsIDB4NWUsIDB4NTUsIDB4OGQsIDB4YjEsCisrCTB4MDIsIDB4NjUsIDB4NTgsIDB4YjQsIDB4MTMsIDB4NGIsIDB4MzYsIDB4ZjcsCisrCTB4Y2MsIDB4ZmUsIDB4M2QsIDB4MGIsIDB4ODIsIDB4ZTIsIDB4MTIsIDB4MTEsCisrCTB4YmIsIDB4ZTYsIDB4YjgsIDB4M2EsIDB4NDgsIDB4NzEsIDB4YzcsIDB4NTAsCisrCTB4MDYsIDB4MTYsIDB4M2EsIDB4ZTYsIDB4N2MsIDB4MDUsIDB4YzcsIDB4YzgsCisrCTB4NGQsIDB4MmYsIDB4MDgsIDB4NmEsIDB4MTcsIDB4OWEsIDB4OTUsIDB4OTcsCisrCTB4NTAsIDB4NjgsIDB4ZGMsIDB4MjgsIDB4MTgsIDB4YzQsIDB4NjEsIDB4MzgsCisrCTB4YjksIDB4ZTAsIDB4M2UsIDB4NzgsIDB4ZGIsIDB4MjksIDB4ZTAsIDB4OWYsCisrCTB4NTIsIDB4ZGQsIDB4ZjgsIDB4NGYsIDB4OTEsIDB4YzEsIDB4ZDAsIDB4MzMsCisrCTB4YTEsIDB4N2EsIDB4OGUsIDB4MzAsIDB4MTMsIDB4ODIsIDB4MDcsIDB4OWYsCisrCTB4ZDMsIDB4MzEsIDB4MGYsIDB4MjMsIDB4YmUsIDB4MzIsIDB4NWEsIDB4NzUsCisrCTB4Y2YsIDB4OTYsIDB4YjIsIDB4ZWMsIDB4YjUsIDB4MzIsIDB4YWMsIDB4MjEsCisrCTB4ZDEsIDB4ODIsIDB4MzMsIDB4ZDMsIDB4MTUsIDB4NzQsIDB4YmQsIDB4OTAsCisrCTB4ZjEsIDB4MmMsIDB4ZTYsIDB4NWYsIDB4OGQsIDB4ZTMsIDB4MDIsIDB4ZTgsCisrCTB4ZTksIDB4YzQsIDB4Y2EsIDB4OTYsIDB4ZWIsIDB4MGUsIDB4YmMsIDB4OTEsCisrCTB4ZjQsIDB4YjksIDB4ZWEsIDB4ZDksIDB4MWIsIDB4NzUsIDB4YmQsIDB4ZTEsCisrCTB4YWMsIDB4MmEsIDB4MDUsIDB4MzcsIDB4NTIsIDB4OWIsIDB4MWIsIDB4M2YsCisrCTB4NWEsIDB4ZGMsIDB4MjEsIDB4YzMsIDB4OTgsIDB4YmIsIDB4YWYsIDB4YTMsCisrCTB4ZjIsIDB4MDAsIDB4YmYsIDB4MGQsIDB4MzAsIDB4ODksIDB4MDUsIDB4Y2MsCisrCTB4YTUsIDB4NzYsIDB4ZjUsIDB4MDYsIDB4ZjAsIDB4YzYsIDB4NTQsIDB4OGEsCisrCTB4NWQsIDB4ZDQsIDB4MWUsIDB4YzEsIDB4ZjIsIDB4Y2UsIDB4YjAsIDB4NjIsCisrCTB4YzgsIDB4ZmMsIDB4NTksIDB4NDIsIDB4OWEsIDB4OTAsIDB4NjAsIDB4NTUsCisrCTB4ZmUsIDB4ODgsIDB4YTUsIDB4OGIsIDB4YjgsIDB4MzMsIDB4MGMsIDB4MjMsCisrCTB4MjQsIDB4MGQsIDB4MTUsIDB4NzAsIDB4MzcsIDB4MWUsIDB4M2QsIDB4ZjYsCisrCTB4ZDIsIDB4ZWEsIDB4OTIsIDB4MTAsIDB4YjIsIDB4YzQsIDB4NTEsIDB4YWMsCisrCTB4ZjIsIDB4YWMsIDB4ZjMsIDB4NmIsIDB4NmMsIDB4YWEsIDB4Y2YsIDB4MTIsCisrCTB4YzUsIDB4NmMsIDB4OTAsIDB4NTAsIDB4YjUsIDB4MGMsIDB4ZmMsIDB4MWEsCisrCTB4MTUsIDB4NTIsIDB4ZTksIDB4MjYsIDB4YzYsIDB4NTIsIDB4YTQsIDB4ZTcsCisrCTB4ODEsIDB4NjksIDB4ZTEsIDB4ZTcsIDB4OWUsIDB4MzAsIDB4MDEsIDB4ZWMsCisrCTB4ODQsIDB4ODksIDB4YjIsIDB4MGQsIDB4NjYsIDB4ZGQsIDB4Y2UsIDB4MjgsCisrCTB4NWMsIDB4ZWMsIDB4OTgsIDB4NDYsIDB4NjgsIDB4MjEsIDB4OWYsIDB4ODgsCisrCTB4M2YsIDB4MWYsIDB4NDIsIDB4NzcsIDB4Y2UsIDB4ZDAsIDB4NjEsIDB4ZDQsCisrCTB4MjAsIDB4YTcsIDB4ZmYsIDB4NTMsIDB4YWQsIDB4MzcsIDB4ZDAsIDB4MTcsCisrCTB4MzUsIDB4YzksIDB4ZmMsIDB4YmEsIDB4MGEsIDB4NzgsIDB4M2YsIDB4ZjIsCisrCTB4Y2MsIDB4ODYsIDB4ODksIDB4ZTgsIDB4NGIsIDB4M2MsIDB4NDgsIDB4MzMsCisrCTB4MDksIDB4N2YsIDB4YzYsIDB4YzAsIDB4ZGQsIDB4YjgsIDB4ZmQsIDB4N2EsCisrCTB4NjYsIDB4NjYsIDB4NjUsIDB4ZWIsIDB4NDcsIDB4YTcsIDB4MDQsIDB4MjgsCisrCTB4YTMsIDB4MTksIDB4OGUsIDB4YTksIDB4YjEsIDB4MTMsIDB4NjcsIDB4NjIsCisrCTB4NzAsIDB4Y2YsIDB4ZDcKKyt9OworK3N0YXRpYyBjb25zdCB1OCBkZWNfb3V0cHV0MDEzW10gX19pbml0Y29uc3QgPSB7CisrCTB4NzQsIDB4YTYsIDB4M2UsIDB4ZTQsIDB4YjEsIDB4Y2IsIDB4YWYsIDB4YjAsCisrCTB4NDAsIDB4ZTUsIDB4MGYsIDB4OWUsIDB4ZjEsIDB4ZjIsIDB4ODksIDB4YjUsCisrCTB4NDIsIDB4MzQsIDB4OGEsIDB4YTEsIDB4MDMsIDB4YjcsIDB4ZTksIDB4NTcsCisrCTB4NDYsIDB4YmUsIDB4MjAsIDB4ZTQsIDB4NmUsIDB4YjAsIDB4ZWIsIDB4ZmYsCisrCTB4ZWEsIDB4MDcsIDB4N2UsIDB4ZWYsIDB4ZTIsIDB4NTUsIDB4OWYsIDB4ZTUsCisrCTB4NzgsIDB4M2EsIDB4YjcsIDB4ODMsIDB4YzIsIDB4MTgsIDB4NDAsIDB4N2IsCisrCTB4ZWIsIDB4Y2QsIDB4ODEsIDB4ZmIsIDB4OTAsIDB4MTIsIDB4OWUsIDB4NDYsCisrCTB4YTksIDB4ZDYsIDB4NGEsIDB4YmEsIDB4YjAsIDB4NjIsIDB4ZGIsIDB4NmIsCisrCTB4OTksIDB4YzQsIDB4ZGIsIDB4NTQsIDB4NGIsIDB4YjgsIDB4YTUsIDB4NzEsCisrCTB4Y2IsIDB4Y2QsIDB4NjMsIDB4MzIsIDB4NTUsIDB4ZmIsIDB4MzEsIDB4ZjAsCisrCTB4MzgsIDB4ZjUsIDB4YmUsIDB4NzgsIDB4ZTQsIDB4NDUsIDB4Y2UsIDB4MWIsCisrCTB4NmEsIDB4NWIsIDB4MGUsIDB4ZjQsIDB4MTYsIDB4ZTQsIDB4YjEsIDB4M2QsCisrCTB4ZjYsIDB4NjMsIDB4N2IsIDB4YTcsIDB4MGMsIDB4ZGUsIDB4NmYsIDB4OGYsCisrCTB4NzQsIDB4ZGYsIDB4ZTAsIDB4MWUsIDB4OWQsIDB4Y2UsIDB4OGYsIDB4MjQsCisrCTB4ZWYsIDB4MjMsIDB4MzUsIDB4MzMsIDB4N2IsIDB4ODMsIDB4MzQsIDB4MjMsCisrCTB4NTgsIDB4NzQsIDB4MTQsIDB4NzcsIDB4MWYsIDB4YzIsIDB4NGYsIDB4NGUsCisrCTB4YzYsIDB4ODksIDB4ZjksIDB4NTIsIDB4MDksIDB4MzcsIDB4NjQsIDB4MTQsCisrCTB4YzQsIDB4MDEsIDB4NmIsIDB4OWQsIDB4NzcsIDB4ZTgsIDB4OTAsIDB4NWQsCisrCTB4YTgsIDB4NGEsIDB4MmEsIDB4ZWYsIDB4NWMsIDB4N2YsIDB4ZWIsIDB4YmIsCisrCTB4YjIsIDB4YzYsIDB4OTMsIDB4OTksIDB4NjYsIDB4ZGMsIDB4N2YsIDB4ZDQsCisrCTB4OWUsIDB4MmEsIDB4Y2EsIDB4OGQsIDB4ZGIsIDB4ZTcsIDB4MjAsIDB4Y2YsCisrCTB4ZTQsIDB4NzMsIDB4YWUsIDB4NDksIDB4N2QsIDB4NjQsIDB4MGYsIDB4MGUsCisrCTB4MjgsIDB4NDYsIDB4YTksIDB4YTgsIDB4MzIsIDB4ZTQsIDB4MGUsIDB4ZjYsCisrCTB4NTEsIDB4NTMsIDB4YjgsIDB4M2MsIDB4YjEsIDB4ZmYsIDB4YTMsIDB4MzMsCisrCTB4NDEsIDB4NzUsIDB4ZmYsIDB4ZjEsIDB4NmYsIDB4ZjEsIDB4ZmIsIDB4YmIsCisrCTB4ODMsIDB4N2YsIDB4MDYsIDB4OWIsIDB4ZTcsIDB4MWIsIDB4MGEsIDB4ZTAsCisrCTB4NWMsIDB4MzMsIDB4NjAsIDB4NWIsIDB4ZGIsIDB4NWIsIDB4ZWQsIDB4ZmUsCisrCTB4YTUsIDB4MTYsIDB4MTksIDB4NzIsIDB4YTMsIDB4NjQsIDB4MjMsIDB4MDAsCisrCTB4MDIsIDB4YzcsIDB4ZjMsIDB4NmEsIDB4ODEsIDB4M2UsIDB4NDQsIDB4MWQsCisrCTB4NzksIDB4MTUsIDB4NWYsIDB4OWEsIDB4ZGUsIDB4ZTIsIDB4ZmQsIDB4MWIsCisrCTB4NzMsIDB4YzEsIDB4YmMsIDB4MjMsIDB4YmEsIDB4MzEsIDB4ZDIsIDB4NTAsCisrCTB4ZDUsIDB4YWQsIDB4N2YsIDB4NzQsIDB4YTcsIDB4YzksIDB4ZjgsIDB4M2UsCisrCTB4MmIsIDB4MjYsIDB4MTAsIDB4ZjYsIDB4MDMsIDB4MzYsIDB4NzQsIDB4ZTQsCisrCTB4MGUsIDB4NmEsIDB4NzIsIDB4YjcsIDB4NzMsIDB4MGEsIDB4NDIsIDB4MjgsCisrCTB4YzIsIDB4YWQsIDB4NWUsIDB4MDMsIDB4YmUsIDB4YjgsIDB4MGIsIDB4YTgsCisrCTB4NWIsIDB4ZDQsIDB4YjgsIDB4YmEsIDB4NTIsIDB4ODksIDB4YjEsIDB4OWIsCisrCTB4YzEsIDB4YzMsIDB4NjUsIDB4ODcsIDB4ZWQsIDB4YTUsIDB4ZjQsIDB4ODYsCisrCTB4ZmQsIDB4NDEsIDB4ODAsIDB4OTEsIDB4MjcsIDB4NTksIDB4NTMsIDB4NjcsCisrCTB4MTUsIDB4NzgsIDB4NTQsIDB4OGIsIDB4MmQsIDB4M2QsIDB4YzcsIDB4ZmYsCisrCTB4MDIsIDB4OTIsIDB4MDcsIDB4NWYsIDB4N2EsIDB4NGIsIDB4NjAsIDB4NTksCisrCTB4M2MsIDB4NmYsIDB4NWMsIDB4ZDgsIDB4ZWMsIDB4OTUsIDB4ZDIsIDB4ZmUsCisrCTB4YTAsIDB4M2IsIDB4ZDgsIDB4M2YsIDB4ZDEsIDB4NjksIDB4YTYsIDB4ZDYsCisrCTB4NDEsIDB4YjIsIDB4ZjQsIDB4NGQsIDB4MTIsIDB4ZjQsIDB4NTgsIDB4M2UsCisrCTB4NjYsIDB4NjQsIDB4ODAsIDB4MzEsIDB4OWIsIDB4YTgsIDB4NGMsIDB4OGIsCisrCTB4MDcsIDB4YjIsIDB4ZWMsIDB4NjYsIDB4OTQsIDB4NjYsIDB4NDcsIDB4NTAsCisrCTB4NTAsIDB4NWYsIDB4MTgsIDB4MGIsIDB4MGUsIDB4ZDYsIDB4YzAsIDB4MzksCisrCTB4MjEsIDB4MTMsIDB4OWUsIDB4MzMsIDB4YmMsIDB4NzksIDB4MzYsIDB4MDIsCisrCTB4OTYsIDB4NzAsIDB4ZjAsIDB4NDgsIDB4NjcsIDB4MmYsIDB4MjYsIDB4ZTksCisrCTB4NmQsIDB4MTAsIDB4YmIsIDB4ZDYsIDB4M2YsIDB4ZDEsIDB4NjQsIDB4N2EsCisrCTB4MmUsIDB4YmUsIDB4MGMsIDB4NjEsIDB4ZjAsIDB4NzUsIDB4NDIsIDB4MzgsCisrCTB4MjMsIDB4YjEsIDB4OWUsIDB4OWYsIDB4N2MsIDB4NjcsIDB4NjYsIDB4ZDksCisrCTB4NTgsIDB4OWEsIDB4ZjEsIDB4YmIsIDB4NDEsIDB4MmEsIDB4OGQsIDB4NjUsCisrCTB4ODQsIDB4OTQsIDB4ZmMsIDB4ZGMsIDB4NmEsIDB4NTAsIDB4NjQsIDB4ZGIsCisrCTB4NTYsIDB4MzMsIDB4NzYsIDB4MDAsIDB4MTAsIDB4ZWQsIDB4YmUsIDB4ZDIsCisrCTB4MTIsIDB4ZjYsIDB4ZjYsIDB4MWIsIDB4YTIsIDB4MTYsIDB4ZGUsIDB4YWUsCisrCTB4MzEsIDB4OTUsIDB4ZGQsIDB4YjEsIDB4MDgsIDB4N2UsIDB4NGUsIDB4ZWUsCisrCTB4ZTcsIDB4ZjksIDB4YTUsIDB4ZmIsIDB4NWIsIDB4NjEsIDB4NDMsIDB4MDAsCisrCTB4NDAsIDB4ZjYsIDB4N2UsIDB4MDIsIDB4MDQsIDB4MzIsIDB4NGUsIDB4MGMsCisrCTB4ZTIsIDB4NjYsIDB4MGQsIDB4ZDcsIDB4MDcsIDB4OTgsIDB4MGUsIDB4ZjgsCisrCTB4NzIsIDB4MzQsIDB4NmQsIDB4OTUsIDB4ODYsIDB4ZDcsIDB4Y2IsIDB4MzEsCisrCTB4NTQsIDB4NDcsIDB4ZDAsIDB4MzgsIDB4MjksIDB4OWMsIDB4NWEsIDB4NjgsCisrCTB4ZDQsIDB4ODcsIDB4NzYsIDB4YzksIDB4ZTcsIDB4N2UsIDB4ZTMsIDB4ZjQsCisrCTB4ODEsIDB4NmQsIDB4MTgsIDB4Y2IsIDB4YzksIDB4MDUsIDB4YWYsIDB4YTAsCisrCTB4ZmIsIDB4NjYsIDB4ZjcsIDB4ZjEsIDB4MWMsIDB4YzYsIDB4MTQsIDB4MTEsCisrCTB4NGYsIDB4MmIsIDB4NzksIDB4NDIsIDB4OGIsIDB4YmMsIDB4YWMsIDB4ZTcsCisrCTB4NmMsIDB4ZmUsIDB4MGYsIDB4NTgsIDB4ZTcsIDB4N2MsIDB4NzgsIDB4MzksCisrCTB4MzAsIDB4YjAsIDB4NjYsIDB4MmMsIDB4OWIsIDB4NmQsIDB4M2EsIDB4ZTEsCisrCTB4Y2YsIDB4YzksIDB4YTQsIDB4MGUsIDB4NmQsIDB4NmQsIDB4OGEsIDB4YTEsCisrCTB4M2EsIDB4ZTcsIDB4MjgsIDB4ZDQsIDB4NzgsIDB4NGMsIDB4YTYsIDB4YTIsCisrCTB4MmEsIDB4YTYsIDB4MDMsIDB4MzAsIDB4ZDcsIDB4YTgsIDB4MjUsIDB4NjYsCisrCTB4ODcsIDB4MmYsIDB4NjksIDB4NWMsIDB4NGUsIDB4ZGQsIDB4YTUsIDB4NDksCisrCTB4NWQsIDB4MzcsIDB4NGEsIDB4NTksIDB4YzQsIDB4YWYsIDB4MWYsIDB4YTIsCisrCTB4ZTQsIDB4ZjgsIDB4YTYsIDB4MTIsIDB4OTcsIDB4ZDUsIDB4NzksIDB4ZjUsCisrCTB4ZTIsIDB4NGEsIDB4MmIsIDB4NWYsIDB4NjEsIDB4ZTQsIDB4OWUsIDB4ZTMsCisrCTB4ZWUsIDB4YjgsIDB4YTcsIDB4NWIsIDB4MmYsIDB4ZjQsIDB4OWUsIDB4NmMsCisrCTB4ZmIsIDB4ZDEsIDB4YzYsIDB4NTYsIDB4NzcsIDB4YmEsIDB4NzUsIDB4YWEsCisrCTB4M2QsIDB4MWEsIDB4YTgsIDB4MGIsIDB4YjMsIDB4NjgsIDB4MjQsIDB4MDAsCisrCTB4MTAsIDB4N2YsIDB4ZmQsIDB4ZDcsIDB4YTEsIDB4OGQsIDB4ODMsIDB4NTQsCisrCTB4NGYsIDB4MWYsIDB4ZDgsIDB4MmEsIDB4YmUsIDB4OGEsIDB4MGMsIDB4ODcsCisrCTB4YWIsIDB4YTIsIDB4ZGUsIDB4YzMsIDB4MzksIDB4YmYsIDB4MDksIDB4MDMsCisrCTB4YTUsIDB4ZjMsIDB4MDUsIDB4MjgsIDB4ZTEsIDB4ZTEsIDB4ZWUsIDB4MzksCisrCTB4NzAsIDB4OWMsIDB4ZDgsIDB4ODEsIDB4MTIsIDB4MWUsIDB4MDIsIDB4NDAsCisrCTB4ZDIsIDB4NmUsIDB4ZjAsIDB4ZWIsIDB4MWIsIDB4M2QsIDB4MjIsIDB4YzYsCisrCTB4ZTUsIDB4ZTMsIDB4YjQsIDB4NWEsIDB4OTgsIDB4YmIsIDB4ZjAsIDB4MjIsCisrCTB4MjgsIDB4OGQsIDB4ZTUsIDB4ZDMsIDB4MTYsIDB4NDgsIDB4MjQsIDB4YTUsCisrCTB4ZTYsIDB4NjYsIDB4MGMsIDB4ZjksIDB4MDgsIDB4ZjksIDB4N2UsIDB4MWUsCisrCTB4ZTEsIDB4MjgsIDB4MjYsIDB4MjIsIDB4YzcsIDB4YzcsIDB4MGEsIDB4MzIsCisrCTB4NDcsIDB4ZmEsIDB4YTMsIDB4YmUsIDB4M2MsIDB4YzQsIDB4YzUsIDB4NTMsCisrCTB4MGEsIDB4ZDUsIDB4OTQsIDB4NGEsIDB4ZDcsIDB4OTMsIDB4ZDgsIDB4NDIsCisrCTB4OTksIDB4YjksIDB4MGEsIDB4ZGIsIDB4NTYsIDB4ZjcsIDB4YjksIDB4MWMsCisrCTB4NTMsIDB4NGYsIDB4ZmEsIDB4ZDMsIDB4NzQsIDB4YWQsIDB4ZDksIDB4NjgsCisrCTB4ZjEsIDB4MWIsIDB4ZGYsIDB4NjEsIDB4YzYsIDB4NWUsIDB4YTgsIDB4NDgsCisrCTB4ZmMsIDB4ZDQsIDB4NGEsIDB4NGMsIDB4M2MsIDB4MzIsIDB4ZjcsIDB4MWMsCisrCTB4OTYsIDB4MjEsIDB4OWIsIDB4ZjksIDB4YTMsIDB4Y2MsIDB4NWEsIDB4Y2UsCisrCTB4ZDUsIDB4ZDcsIDB4MDgsIDB4MjQsIDB4ZjYsIDB4MWMsIDB4ZmQsIDB4ZGQsCisrCTB4MzgsIDB4YzIsIDB4MzIsIDB4ZTksIDB4YjgsIDB4ZTcsIDB4YjYsIDB4ZmEsCisrCTB4OWQsIDB4NDUsIDB4MTMsIDB4MmMsIDB4ODMsIDB4ZmQsIDB4NGEsIDB4NjksCisrCTB4ODIsIDB4Y2QsIDB4ZGMsIDB4YjMsIDB4NzYsIDB4MGMsIDB4OWUsIDB4ZDgsCisrCTB4ZjQsIDB4MWIsIDB4NDUsIDB4MTUsIDB4YjQsIDB4OTcsIDB4ZTcsIDB4NTgsCisrCTB4MzQsIDB4ZTIsIDB4MDMsIDB4MjksIDB4NWEsIDB4YmYsIDB4YjYsIDB4ZTAsCisrCTB4NWQsIDB4MTMsIDB4ZDksIDB4MmIsIDB4YjQsIDB4ODAsIDB4YjIsIDB4NDUsCisrCTB4ODEsIDB4NmEsIDB4MmUsIDB4NmMsIDB4ODksIDB4N2QsIDB4ZWUsIDB4YmIsCisrCTB4NTIsIDB4ZGQsIDB4MWYsIDB4MTgsIDB4ZTcsIDB4MTMsIDB4NmIsIDB4MzMsCisrCTB4MGUsIDB4ZWEsIDB4MzYsIDB4OTIsIDB4NzcsIDB4N2IsIDB4NmQsIDB4OWMsCisrCTB4NWEsIDB4NWYsIDB4NDUsIDB4N2IsIDB4N2IsIDB4MzUsIDB4NjIsIDB4MjMsCisrCTB4ZDEsIDB4YmYsIDB4MGYsIDB4ZDAsIDB4MDgsIDB4MWIsIDB4MmIsIDB4ODAsCisrCTB4NmIsIDB4N2UsIDB4ZjEsIDB4MjEsIDB4NDcsIDB4YjAsIDB4NTcsIDB4ZDEsCisrCTB4OTgsIDB4NzIsIDB4OTAsIDB4MzQsIDB4MWMsIDB4MjAsIDB4MDQsIDB4ZmYsCisrCTB4M2QsIDB4NWMsIDB4ZWUsIDB4MGUsIDB4NTcsIDB4NWYsIDB4NmYsIDB4MjQsCisrCTB4NGUsIDB4M2MsIDB4ZWEsIDB4ZmMsIDB4YTUsIDB4YTksIDB4ODMsIDB4YzksCisrCTB4NjEsIDB4YjQsIDB4NTEsIDB4MjQsIDB4ZjgsIDB4MjcsIDB4NWUsIDB4NDYsCisrCTB4OGMsIDB4YjEsIDB4NTMsIDB4MDIsIDB4OTYsIDB4MzUsIDB4YmEsIDB4YjgsCisrCTB4NGMsIDB4NzEsIDB4ZDMsIDB4MTUsIDB4NTksIDB4MzUsIDB4MjIsIDB4MjAsCisrCTB4YWQsIDB4MDMsIDB4OWYsIDB4NjYsIDB4NDQsIDB4M2IsIDB4OWMsIDB4MzUsCisrCTB4MzcsIDB4MWYsIDB4OWIsIDB4YmIsIDB4ZjMsIDB4ZGIsIDB4MzUsIDB4NjMsCisrCTB4MzAsIDB4NjQsIDB4YWEsIDB4YTIsIDB4MDYsIDB4YTgsIDB4NWQsIDB4YmIsCisrCTB4ZTEsIDB4OWYsIDB4NzAsIDB4ZWMsIDB4ODIsIDB4MTEsIDB4MDYsIDB4MzYsCisrCTB4ZWMsIDB4OGIsIDB4NjksIDB4NjYsIDB4MjQsIDB4NDQsIDB4YzksIDB4NGEsCisrCTB4NTcsIDB4YmIsIDB4OWIsIDB4NzgsIDB4MTMsIDB4Y2UsIDB4OWMsIDB4MGMsCisrCTB4YmEsIDB4OTIsIDB4OTMsIDB4NjMsIDB4YjgsIDB4ZTIsIDB4OTUsIDB4MGYsCisrCTB4MGYsIDB4MTYsIDB4MzksIDB4NTIsIDB4ZmQsIDB4M2EsIDB4NmQsIDB4MDIsCisrCTB4NGIsIDB4ZGYsIDB4MTMsIDB4ZDMsIDB4MmEsIDB4MjIsIDB4YjQsIDB4MDMsCisrCTB4N2MsIDB4NTQsIDB4NDksIDB4OTYsIDB4NjgsIDB4NTQsIDB4MTAsIDB4ZmEsCisrCTB4ZWYsIDB4YWEsIDB4NmMsIDB4ZTgsIDB4MjIsIDB4ZGMsIDB4NzEsIDB4MTYsCisrCTB4MTMsIDB4MWEsIDB4ZjYsIDB4MjgsIDB4ZTUsIDB4NmQsIDB4NzcsIDB4M2QsCisrCTB4Y2QsIDB4MzAsIDB4NjMsIDB4YjEsIDB4NzAsIDB4NTIsIDB4YTEsIDB4YzUsCisrCTB4OTQsIDB4NWYsIDB4Y2YsIDB4ZTgsIDB4YjgsIDB4MjYsIDB4OTgsIDB4ZjcsCisrCTB4MDYsIDB4YTAsIDB4MGEsIDB4NzAsIDB4ZmEsIDB4MDMsIDB4ODAsIDB4YWMsCisrCTB4YzEsIDB4ZWMsIDB4ZDYsIDB4NGMsIDB4NTQsIDB4ZDcsIDB4ZmUsIDB4NDcsCisrCTB4YjYsIDB4ODgsIDB4NGEsIDB4ZjcsIDB4NzEsIDB4MjQsIDB4ZWUsIDB4ZjMsCisrCTB4ZDIsIDB4YzIsIDB4NGEsIDB4N2YsIDB4ZmUsIDB4NjEsIDB4YzcsIDB4MzUsCisrCTB4YzksIDB4MzcsIDB4NjcsIDB4Y2IsIDB4MjQsIDB4MzUsIDB4ZGEsIDB4N2UsCisrCTB4Y2EsIDB4NWYsIDB4ZjMsIDB4OGQsIDB4ZDQsIDB4MTMsIDB4OGUsIDB4ZDYsCisrCTB4Y2IsIDB4NGQsIDB4NTMsIDB4OGYsIDB4NTMsIDB4MWYsIDB4YzAsIDB4NzQsCisrCTB4ZjcsIDB4NTMsIDB4YjksIDB4NWUsIDB4MjMsIDB4MzcsIDB4YmEsIDB4NmUsCisrCTB4ZTMsIDB4OWQsIDB4MDcsIDB4NTUsIDB4MjUsIDB4N2IsIDB4ZTYsIDB4MmEsCisrCTB4NjQsIDB4ZDEsIDB4MzIsIDB4ZGQsIDB4NTQsIDB4MWIsIDB4NGIsIDB4YzAsCisrCTB4ZTEsIDB4ZDcsIDB4NjksIDB4NTgsIDB4ZjgsIDB4OTMsIDB4MjksIDB4YzQsCisrCTB4ZGQsIDB4MjMsIDB4MmYsIDB4YTUsIDB4ZmMsIDB4OWQsIDB4N2UsIDB4ZjgsCisrCTB4ZDQsIDB4OTAsIDB4Y2QsIDB4ODIsIDB4NTUsIDB4ZGMsIDB4MTYsIDB4MTYsCisrCTB4OWYsIDB4MDcsIDB4NTIsIDB4OWIsIDB4OWQsIDB4MjUsIDB4ZWQsIDB4MzIsCisrCTB4YzUsIDB4N2IsIDB4ZGYsIDB4ZjYsIDB4ODMsIDB4NDYsIDB4M2QsIDB4NjUsCisrCTB4YjcsIDB4ZWYsIDB4ODcsIDB4N2EsIDB4MTIsIDB4NjksIDB4OGYsIDB4MDYsCisrCTB4N2MsIDB4NTEsIDB4MTUsIDB4NGEsIDB4MDgsIDB4ZTgsIDB4YWMsIDB4OWEsCisrCTB4MGMsIDB4MjQsIDB4YTcsIDB4MjcsIDB4ZDgsIDB4NDYsIDB4MmYsIDB4ZTcsCisrCTB4MDEsIDB4MGUsIDB4MWMsIDB4YzYsIDB4OTEsIDB4YjAsIDB4NmUsIDB4ODUsCisrCTB4NjUsIDB4ZjAsIDB4MjksIDB4MGQsIDB4MmUsIDB4NmIsIDB4M2IsIDB4ZmIsCisrCTB4NGIsIDB4ZGYsIDB4ZTQsIDB4ODAsIDB4OTMsIDB4MDMsIDB4NjYsIDB4NDYsCisrCTB4M2UsIDB4OGEsIDB4NmUsIDB4ZjMsIDB4NWUsIDB4NGQsIDB4NjIsIDB4MGUsCisrCTB4NDksIDB4MDUsIDB4YWYsIDB4ZDQsIDB4ZjgsIDB4MjEsIDB4MjAsIDB4NjEsCisrCTB4MWQsIDB4MzksIDB4MTcsIDB4ZjQsIDB4NjEsIDB4NDcsIDB4OTUsIDB4ZmIsCisrCTB4MTUsIDB4MmUsIDB4YjMsIDB4NGYsIDB4ZDAsIDB4NWQsIDB4ZjUsIDB4N2QsCisrCTB4NDAsIDB4ZGEsIDB4OTAsIDB4M2MsIDB4NmIsIDB4Y2IsIDB4MTcsIDB4MDAsCisrCTB4MTMsIDB4M2IsIDB4NjQsIDB4MzQsIDB4MWIsIDB4ZjAsIDB4ZjIsIDB4ZTUsCisrCTB4M2IsIDB4YjIsIDB4YzcsIDB4ZDMsIDB4NWYsIDB4M2EsIDB4NDQsIDB4YTYsCisrCTB4OWIsIDB4YjcsIDB4NzgsIDB4MGUsIDB4NDIsIDB4NWQsIDB4NGMsIDB4YzEsCisrCTB4ZTksIDB4ZDIsIDB4Y2IsIDB4YjcsIDB4NzgsIDB4ZDEsIDB4ZmUsIDB4OWEsCisrCTB4YjUsIDB4MDcsIDB4ZTksIDB4ZTAsIDB4YmUsIDB4ZTIsIDB4OGEsIDB4YTcsCisrCTB4MDEsIDB4ODMsIDB4MDAsIDB4OGMsIDB4NWMsIDB4MDgsIDB4ZTYsIDB4NjMsCisrCTB4MTIsIDB4OTIsIDB4YjcsIDB4YjcsIDB4YTYsIDB4MTksIDB4N2QsIDB4MzgsCisrCTB4MTMsIDB4MzgsIDB4OTIsIDB4ODcsIDB4MjQsIDB4ZjksIDB4NDgsIDB4YjMsCisrCTB4NWUsIDB4ODcsIDB4NmEsIDB4NDAsIDB4MzksIDB4NWMsIDB4M2YsIDB4ZWQsCisrCTB4OGYsIDB4ZWUsIDB4ZGIsIDB4MTUsIDB4ODIsIDB4MDYsIDB4ZGEsIDB4NDksCisrCTB4MjEsIDB4MmIsIDB4YjUsIDB4YmYsIDB4MzIsIDB4N2MsIDB4OWYsIDB4NDIsCisrCTB4MjgsIDB4NjMsIDB4Y2YsIDB4YWYsIDB4MWUsIDB4ZjgsIDB4YzYsIDB4YTAsCisrCTB4ZDEsIDB4MDIsIDB4NDMsIDB4NTcsIDB4NjIsIDB4ZWMsIDB4OWIsIDB4MGYsCisrCTB4MDEsIDB4OWUsIDB4NzEsIDB4ZDgsIDB4ODcsIDB4OWQsIDB4MDEsIDB4YzEsCisrCTB4NTgsIDB4NzcsIDB4ZDksIDB4YWYsIDB4YjEsIDB4MTAsIDB4N2UsIDB4ZGQsCisrCTB4YTYsIDB4NTAsIDB4OTYsIDB4ZTUsIDB4ZjAsIDB4NzIsIDB4MDAsIDB4NmQsCisrCTB4NGIsIDB4ZjgsIDB4MmEsIDB4OGYsIDB4MTksIDB4ZjMsIDB4MjIsIDB4ODgsCisrCTB4MTEsIDB4NGEsIDB4OGIsIDB4N2MsIDB4ZmQsIDB4YjcsIDB4ZWQsIDB4ZTEsCisrCTB4ZjYsIDB4NDAsIDB4MzksIDB4ZTAsIDB4ZTksIDB4ZjYsIDB4M2QsIDB4MjUsCisrCTB4ZTYsIDB4NzQsIDB4M2MsIDB4NTgsIDB4NTcsIDB4N2YsIDB4ZTEsIDB4MjIsCisrCTB4OTYsIDB4NDcsIDB4MzEsIDB4OTEsIDB4YmEsIDB4NzAsIDB4ODUsIDB4MjgsCisrCTB4NmIsIDB4OWYsIDB4NmUsIDB4MjUsIDB4YWMsIDB4MjMsIDB4NjYsIDB4MmYsCisrCTB4MjksIDB4ODgsIDB4MjgsIDB4Y2UsIDB4OGMsIDB4NWMsIDB4ODgsIDB4NTMsCisrCTB4ZDEsIDB4M2IsIDB4Y2MsIDB4NmEsIDB4NTEsIDB4YjIsIDB4ZTEsIDB4MjgsCisrCTB4M2YsIDB4OTEsIDB4YjQsIDB4MGQsIDB4MDAsIDB4M2EsIDB4ZTMsIDB4ZjgsCisrCTB4YzMsIDB4OGYsIDB4ZDcsIDB4OTYsIDB4NjIsIDB4MGUsIDB4MmUsIDB4ZmMsCisrCTB4YzgsIDB4NmMsIDB4NzcsIDB4YTYsIDB4MWQsIDB4MjIsIDB4YzEsIDB4YjgsCisrCTB4ZTYsIDB4NjEsIDB4ZDcsIDB4NjcsIDB4MzYsIDB4MTMsIDB4N2IsIDB4YmIsCisrCTB4OWIsIDB4NTksIDB4MDksIDB4YTYsIDB4ZGYsIDB4ZjcsIDB4NmIsIDB4YTMsCisrCTB4NDAsIDB4MWEsIDB4ZjUsIDB4NGYsIDB4YjQsIDB4ZGEsIDB4ZDMsIDB4ZjMsCisrCTB4ODEsIDB4OTMsIDB4YzYsIDB4MTgsIDB4ZDksIDB4MjYsIDB4ZWUsIDB4YWMsCisrCTB4ZjAsIDB4YWEsIDB4ZGYsIDB4YzUsIDB4OWMsIDB4Y2EsIDB4YzIsIDB4YTIsCisrCTB4Y2MsIDB4N2IsIDB4NWMsIDB4MjQsIDB4YjAsIDB4YmMsIDB4ZDAsIDB4NmEsCisrCTB4NGQsIDB4ODksIDB4MDksIDB4YjgsIDB4MDcsIDB4ZmUsIDB4ODcsIDB4YWQsCisrCTB4MGEsIDB4ZWEsIDB4YjgsIDB4NDIsIDB4ZjksIDB4NWUsIDB4YjMsIDB4M2UsCisrCTB4MzYsIDB4NGMsIDB4YWYsIDB4NzUsIDB4OWUsIDB4MWMsIDB4ZWIsIDB4YmQsCisrCTB4YmMsIDB4YmIsIDB4ODAsIDB4NDAsIDB4YTcsIDB4M2EsIDB4MzAsIDB4YmYsCisrCTB4YTgsIDB4NDQsIDB4ZjQsIDB4ZWIsIDB4MzgsIDB4YWQsIDB4MjksIDB4YmEsCisrCTB4MjMsIDB4ZWQsIDB4NDEsIDB4MGMsIDB4ZWEsIDB4ZDIsIDB4YmIsIDB4NDEsCisrCTB4MTgsIDB4ZDYsIDB4YjksIDB4YmEsIDB4NjUsIDB4MmIsIDB4YTMsIDB4OTEsCisrCTB4NmQsIDB4MWYsIDB4YTksIDB4ZjQsIDB4ZDEsIDB4MjUsIDB4OGQsIDB4NGQsCisrCTB4MzgsIDB4ZmYsIDB4NjQsIDB4YTAsIDB4ZWMsIDB4ZGUsIDB4YTYsIDB4YjYsCisrCTB4NzksIDB4YWIsIDB4OGUsIDB4MzMsIDB4NmMsIDB4NDcsIDB4ZGUsIDB4YWYsCisrCTB4OTQsIDB4YTQsIDB4YTUsIDB4ODYsIDB4NzcsIDB4NTUsIDB4MDksIDB4OTIsCisrCTB4ODEsIDB4MzEsIDB4NzYsIDB4YzcsIDB4MzQsIDB4MjIsIDB4ODksIDB4OGUsCisrCTB4M2QsIDB4MjYsIDB4MjYsIDB4ZDcsIDB4ZmMsIDB4MWUsIDB4MTYsIDB4NzIsCisrCTB4MTMsIDB4MzMsIDB4NjMsIDB4ZDUsIDB4MjIsIDB4YmUsIDB4YjgsIDB4MDQsCisrCTB4MzQsIDB4ODQsIDB4NDEsIDB4YmIsIDB4ODAsIDB4ZDAsIDB4OWYsIDB4NDYsCisrCTB4NDgsIDB4MDcsIDB4YTcsIDB4ZmMsIDB4MmIsIDB4M2EsIDB4NzUsIDB4NTUsCisrCTB4OGMsIDB4YzcsIDB4NmEsIDB4YmQsIDB4N2UsIDB4NDYsIDB4MDgsIDB4ODQsCisrCTB4MGYsIDB4ZDUsIDB4NzQsIDB4YzAsIDB4ODIsIDB4OGUsIDB4YWEsIDB4NjEsCisrCTB4MDUsIDB4MDEsIDB4YjIsIDB4NDcsIDB4NmUsIDB4MjAsIDB4NmEsIDB4MmQsCisrCTB4NTgsIDB4NzAsIDB4NDgsIDB4MzIsIDB4YTcsIDB4MzcsIDB4ZDIsIDB4YjgsCisrCTB4ODIsIDB4MWEsIDB4NTEsIDB4YjksIDB4NjEsIDB4ZGQsIDB4ZmQsIDB4OWQsCisrCTB4NmIsIDB4MGUsIDB4MTgsIDB4OTcsIDB4ZjgsIDB4NDUsIDB4NWYsIDB4ODcsCisrCTB4MTAsIDB4Y2YsIDB4MzQsIDB4NzIsIDB4NDUsIDB4MjYsIDB4NDksIDB4NzAsCisrCTB4ZTcsIDB4YTMsIDB4NzgsIDB4ZTAsIDB4NTIsIDB4ODksIDB4ODQsIDB4OTQsCisrCTB4ODMsIDB4ODIsIDB4YzIsIDB4NjksIDB4OGYsIDB4ZTMsIDB4ZTEsIDB4M2YsCisrCTB4NjAsIDB4NzQsIDB4ODgsIDB4YzQsIDB4ZjcsIDB4NzUsIDB4MmMsIDB4ZmIsCisrCTB4YmQsIDB4YjYsIDB4YzQsIDB4N2UsIDB4MTAsIDB4MGEsIDB4NmMsIDB4OTAsCisrCTB4MDQsIDB4OWUsIDB4YzMsIDB4M2YsIDB4NTksIDB4N2MsIDB4Y2UsIDB4MzEsCisrCTB4MTgsIDB4NjAsIDB4NTcsIDB4NzMsIDB4NDYsIDB4OTQsIDB4N2QsIDB4MDYsCisrCTB4YTAsIDB4NmQsIDB4NDQsIDB4ZWMsIDB4YTIsIDB4MGEsIDB4OWUsIDB4MDUsCisrCTB4MTUsIDB4ZWYsIDB4Y2EsIDB4NWMsIDB4YmYsIDB4MDAsIDB4ZWIsIDB4ZjcsCisrCTB4M2QsIDB4MzIsIDB4ZDQsIDB4YTUsIDB4ZWYsIDB4NDksIDB4ODksIDB4NWUsCisrCTB4NDYsIDB4YjAsIDB4YTYsIDB4NjMsIDB4NWIsIDB4OGEsIDB4NzMsIDB4YWUsCisrCTB4NmYsIDB4ZDUsIDB4OWQsIDB4ZjgsIDB4NGYsIDB4NDAsIDB4YjUsIDB4YjIsCisrCTB4NmUsIDB4ZDMsIDB4YjYsIDB4MDEsIDB4YTksIDB4MjYsIDB4YTIsIDB4MjEsCisrCTB4Y2YsIDB4MzMsIDB4N2EsIDB4M2EsIDB4YTQsIDB4MjMsIDB4MTMsIDB4YjAsCisrCTB4NjksIDB4NmEsIDB4ZWUsIDB4Y2UsIDB4ZDgsIDB4OWQsIDB4MDEsIDB4MWQsCisrCTB4NTAsIDB4YzEsIDB4MzAsIDB4NmMsIDB4YjEsIDB4Y2QsIDB4YTAsIDB4ZjAsCisrCTB4ZjAsIDB4YTIsIDB4NjQsIDB4NmYsIDB4YmIsIDB4YmYsIDB4NWUsIDB4ZTYsCisrCTB4YWIsIDB4ODcsIDB4YjQsIDB4MGYsIDB4NGYsIDB4MTUsIDB4YWYsIDB4YjUsCisrCTB4MjUsIDB4YTEsIDB4YjIsIDB4ZDAsIDB4ODAsIDB4MmMsIDB4ZmIsIDB4ZjksCisrCTB4ZmUsIDB4ZDIsIDB4MzMsIDB4YmIsIDB4NzYsIDB4ZmUsIDB4N2MsIDB4YTgsCisrCTB4NjYsIDB4ZjcsIDB4ZTcsIDB4ODUsIDB4OWYsIDB4MWYsIDB4ODUsIDB4NTcsCisrCTB4ODgsIDB4ZTEsIDB4ZTksIDB4NjMsIDB4ZTQsIDB4ZDgsIDB4MWMsIDB4YTEsCisrCTB4ZmIsIDB4ZGEsIDB4NDQsIDB4MDUsIDB4MmUsIDB4MWQsIDB4M2EsIDB4MWMsCisrCTB4ZmYsIDB4YzgsIDB4M2IsIDB4YzAsIDB4ZmUsIDB4ZGEsIDB4MjIsIDB4MGIsCisrCTB4NDMsIDB4ZDYsIDB4ODgsIDB4MzksIDB4NGMsIDB4NGEsIDB4YTYsIDB4NjksCisrCTB4MTgsIDB4OTMsIDB4NDIsIDB4NGUsIDB4YjUsIDB4Y2MsIDB4NjYsIDB4MGQsCisrCTB4MDksIDB4ZjgsIDB4MWUsIDB4N2MsIDB4ZDMsIDB4M2MsIDB4OTksIDB4MGQsCisrCTB4NTAsIDB4MWQsIDB4NjIsIDB4ZTksIDB4NTcsIDB4MDYsIDB4YmYsIDB4MTksCisrCTB4ODgsIDB4ZGQsIDB4YWQsIDB4N2IsIDB4NGYsIDB4ZjksIDB4YzcsIDB4ODIsCisrCTB4NmQsIDB4OGQsIDB4YzgsIDB4YzQsIDB4YzUsIDB4NzgsIDB4MTcsIDB4MjAsCisrCTB4MTUsIDB4YzUsIDB4NTIsIDB4NDEsIDB4Y2YsIDB4NWIsIDB4ZDYsIDB4N2YsCisrCTB4OTQsIDB4MDIsIDB4NDEsIDB4ZTAsIDB4NDAsIDB4MjIsIDB4MDMsIDB4NWUsCisrCTB4ZDEsIDB4NTMsIDB4ZDQsIDB4ODYsIDB4ZDMsIDB4MmMsIDB4OWYsIDB4MGYsCisrCTB4OTYsIDB4ZTMsIDB4NmIsIDB4OWEsIDB4NzYsIDB4MzIsIDB4MDYsIDB4NDcsCisrCTB4NGIsIDB4MTEsIDB4YjMsIDB4ZGQsIDB4MDMsIDB4NjUsIDB4YmQsIDB4OWIsCisrCTB4MDEsIDB4ZGEsIDB4OWMsIDB4YjksIDB4N2UsIDB4M2YsIDB4NmEsIDB4YzQsCisrCTB4N2IsIDB4ZWEsIDB4ZDQsIDB4M2MsIDB4YjksIDB4ZmIsIDB4NWMsIDB4NmIsCisrCTB4NjQsIDB4MzMsIDB4NTIsIDB4YmEsIDB4NjQsIDB4NzgsIDB4OGYsIDB4YTQsCisrCTB4YWYsIDB4N2EsIDB4NjEsIDB4OGQsIDB4YmMsIDB4YzUsIDB4NzMsIDB4ZTksCisrCTB4NmIsIDB4NTgsIDB4OTcsIDB4NGIsIDB4YmYsIDB4NjMsIDB4MjIsIDB4ZDMsCisrCTB4MzcsIDB4MDIsIDB4NTQsIDB4YzUsIDB4YjksIDB4MTYsIDB4NGEsIDB4ZjAsCisrCTB4MTksIDB4ZDgsIDB4OTQsIDB4NTcsIDB4YjgsIDB4OGEsIDB4YjMsIDB4MTYsCisrCTB4M2IsIDB4ZDAsIDB4ODQsIDB4OGUsIDB4NjcsIDB4YTYsIDB4YTMsIDB4N2QsCisrCTB4NzgsIDB4ZWMsIDB4MDAKKyt9OworK3N0YXRpYyBjb25zdCB1OCBkZWNfYXNzb2MwMTNbXSBfX2luaXRjb25zdCA9IHsKKysJMHhiMSwgMHg2OSwgMHg4MywgMHg4NywgMHgzMCwgMHhhYSwgMHg1ZCwgMHhiOCwKKysJMHg3NywgMHhlOCwgMHgyMSwgMHhmZiwgMHgwNiwgMHg1OSwgMHgzNSwgMHhjZSwKKysJMHg3NSwgMHhmZSwgMHgzOCwgMHhlZiwgMHhiOCwgMHg5MSwgMHg0MywgMHg4YywKKysJMHhjZiwgMHg3MCwgMHhkZCwgMHgwYSwgMHg2OCwgMHhiZiwgMHhkNCwgMHhiYywKKysJMHgxNiwgMHg3NiwgMHg5OSwgMHgzNiwgMHgxZSwgMHg1OCwgMHg3OSwgMHg1ZSwKKysJMHhkNCwgMHgyOSwgMHhmNywgMHgzMywgMHg5MywgMHg0OCwgMHhkYiwgMHg1ZiwKKysJMHgwMSwgMHhhZSwgMHg5YywgMHhiNiwgMHhlNCwgMHg4OCwgMHg2ZCwgMHgyYiwKKysJMHg3NiwgMHg3NSwgMHhlMCwgMHhmMywgMHg3NCwgMHhlMiwgMHhjOQorK307Cisrc3RhdGljIGNvbnN0IHU4IGRlY19ub25jZTAxM1tdIF9faW5pdGNvbnN0ID0geworKwkweDA1LCAweGEzLCAweDkzLCAweGVkLCAweDMwLCAweGM1LCAweGEyLCAweDA2CisrfTsKKytzdGF0aWMgY29uc3QgdTggZGVjX2tleTAxM1tdIF9faW5pdGNvbnN0ID0geworKwkweGIzLCAweDM1LCAweDUwLCAweDAzLCAweDU0LCAweDJlLCAweDQwLCAweDVlLAorKwkweDhmLCAweDU5LCAweDhlLCAweGM1LCAweDkwLCAweGQ1LCAweDI3LCAweDJkLAorKwkweGJhLCAweDI5LCAweDJlLCAweGNiLCAweDFiLCAweDcwLCAweDQ0LCAweDFlLAorKwkweDY1LCAweDkxLCAweDZlLCAweDJhLCAweDc5LCAweDIyLCAweGRhLCAweDY0CisrfTsKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IGNoYWNoYTIwcG9seTEzMDVfdGVzdHZlYworK2NoYWNoYTIwcG9seTEzMDVfZGVjX3ZlY3RvcnNbXSBfX2luaXRjb25zdCA9IHsKKysJeyBkZWNfaW5wdXQwMDEsIGRlY19vdXRwdXQwMDEsIGRlY19hc3NvYzAwMSwgZGVjX25vbmNlMDAxLCBkZWNfa2V5MDAxLAorKwkgIHNpemVvZihkZWNfaW5wdXQwMDEpLCBzaXplb2YoZGVjX2Fzc29jMDAxKSwgc2l6ZW9mKGRlY19ub25jZTAwMSkgfSwKKysJeyBkZWNfaW5wdXQwMDIsIGRlY19vdXRwdXQwMDIsIGRlY19hc3NvYzAwMiwgZGVjX25vbmNlMDAyLCBkZWNfa2V5MDAyLAorKwkgIHNpemVvZihkZWNfaW5wdXQwMDIpLCBzaXplb2YoZGVjX2Fzc29jMDAyKSwgc2l6ZW9mKGRlY19ub25jZTAwMikgfSwKKysJeyBkZWNfaW5wdXQwMDMsIGRlY19vdXRwdXQwMDMsIGRlY19hc3NvYzAwMywgZGVjX25vbmNlMDAzLCBkZWNfa2V5MDAzLAorKwkgIHNpemVvZihkZWNfaW5wdXQwMDMpLCBzaXplb2YoZGVjX2Fzc29jMDAzKSwgc2l6ZW9mKGRlY19ub25jZTAwMykgfSwKKysJeyBkZWNfaW5wdXQwMDQsIGRlY19vdXRwdXQwMDQsIGRlY19hc3NvYzAwNCwgZGVjX25vbmNlMDA0LCBkZWNfa2V5MDA0LAorKwkgIHNpemVvZihkZWNfaW5wdXQwMDQpLCBzaXplb2YoZGVjX2Fzc29jMDA0KSwgc2l6ZW9mKGRlY19ub25jZTAwNCkgfSwKKysJeyBkZWNfaW5wdXQwMDUsIGRlY19vdXRwdXQwMDUsIGRlY19hc3NvYzAwNSwgZGVjX25vbmNlMDA1LCBkZWNfa2V5MDA1LAorKwkgIHNpemVvZihkZWNfaW5wdXQwMDUpLCBzaXplb2YoZGVjX2Fzc29jMDA1KSwgc2l6ZW9mKGRlY19ub25jZTAwNSkgfSwKKysJeyBkZWNfaW5wdXQwMDYsIGRlY19vdXRwdXQwMDYsIGRlY19hc3NvYzAwNiwgZGVjX25vbmNlMDA2LCBkZWNfa2V5MDA2LAorKwkgIHNpemVvZihkZWNfaW5wdXQwMDYpLCBzaXplb2YoZGVjX2Fzc29jMDA2KSwgc2l6ZW9mKGRlY19ub25jZTAwNikgfSwKKysJeyBkZWNfaW5wdXQwMDcsIGRlY19vdXRwdXQwMDcsIGRlY19hc3NvYzAwNywgZGVjX25vbmNlMDA3LCBkZWNfa2V5MDA3LAorKwkgIHNpemVvZihkZWNfaW5wdXQwMDcpLCBzaXplb2YoZGVjX2Fzc29jMDA3KSwgc2l6ZW9mKGRlY19ub25jZTAwNykgfSwKKysJeyBkZWNfaW5wdXQwMDgsIGRlY19vdXRwdXQwMDgsIGRlY19hc3NvYzAwOCwgZGVjX25vbmNlMDA4LCBkZWNfa2V5MDA4LAorKwkgIHNpemVvZihkZWNfaW5wdXQwMDgpLCBzaXplb2YoZGVjX2Fzc29jMDA4KSwgc2l6ZW9mKGRlY19ub25jZTAwOCkgfSwKKysJeyBkZWNfaW5wdXQwMDksIGRlY19vdXRwdXQwMDksIGRlY19hc3NvYzAwOSwgZGVjX25vbmNlMDA5LCBkZWNfa2V5MDA5LAorKwkgIHNpemVvZihkZWNfaW5wdXQwMDkpLCBzaXplb2YoZGVjX2Fzc29jMDA5KSwgc2l6ZW9mKGRlY19ub25jZTAwOSkgfSwKKysJeyBkZWNfaW5wdXQwMTAsIGRlY19vdXRwdXQwMTAsIGRlY19hc3NvYzAxMCwgZGVjX25vbmNlMDEwLCBkZWNfa2V5MDEwLAorKwkgIHNpemVvZihkZWNfaW5wdXQwMTApLCBzaXplb2YoZGVjX2Fzc29jMDEwKSwgc2l6ZW9mKGRlY19ub25jZTAxMCkgfSwKKysJeyBkZWNfaW5wdXQwMTEsIGRlY19vdXRwdXQwMTEsIGRlY19hc3NvYzAxMSwgZGVjX25vbmNlMDExLCBkZWNfa2V5MDExLAorKwkgIHNpemVvZihkZWNfaW5wdXQwMTEpLCBzaXplb2YoZGVjX2Fzc29jMDExKSwgc2l6ZW9mKGRlY19ub25jZTAxMSkgfSwKKysJeyBkZWNfaW5wdXQwMTIsIGRlY19vdXRwdXQwMTIsIGRlY19hc3NvYzAxMiwgZGVjX25vbmNlMDEyLCBkZWNfa2V5MDEyLAorKwkgIHNpemVvZihkZWNfaW5wdXQwMTIpLCBzaXplb2YoZGVjX2Fzc29jMDEyKSwgc2l6ZW9mKGRlY19ub25jZTAxMikgfSwKKysJeyBkZWNfaW5wdXQwMTMsIGRlY19vdXRwdXQwMTMsIGRlY19hc3NvYzAxMywgZGVjX25vbmNlMDEzLCBkZWNfa2V5MDEzLAorKwkgIHNpemVvZihkZWNfaW5wdXQwMTMpLCBzaXplb2YoZGVjX2Fzc29jMDEzKSwgc2l6ZW9mKGRlY19ub25jZTAxMyksCisrCSAgdHJ1ZSB9CisrfTsKKysKKytzdGF0aWMgY29uc3QgdTggeGVuY19pbnB1dDAwMVtdIF9faW5pdGNvbnN0ID0geworKwkweDQ5LCAweDZlLCAweDc0LCAweDY1LCAweDcyLCAweDZlLCAweDY1LCAweDc0LAorKwkweDJkLCAweDQ0LCAweDcyLCAweDYxLCAweDY2LCAweDc0LCAweDczLCAweDIwLAorKwkweDYxLCAweDcyLCAweDY1LCAweDIwLCAweDY0LCAweDcyLCAweDYxLCAweDY2LAorKwkweDc0LCAweDIwLCAweDY0LCAweDZmLCAweDYzLCAweDc1LCAweDZkLCAweDY1LAorKwkweDZlLCAweDc0LCAweDczLCAweDIwLCAweDc2LCAweDYxLCAweDZjLCAweDY5LAorKwkweDY0LCAweDIwLCAweDY2LCAweDZmLCAweDcyLCAweDIwLCAweDYxLCAweDIwLAorKwkweDZkLCAweDYxLCAweDc4LCAweDY5LCAweDZkLCAweDc1LCAweDZkLCAweDIwLAorKwkweDZmLCAweDY2LCAweDIwLCAweDczLCAweDY5LCAweDc4LCAweDIwLCAweDZkLAorKwkweDZmLCAweDZlLCAweDc0LCAweDY4LCAweDczLCAweDIwLCAweDYxLCAweDZlLAorKwkweDY0LCAweDIwLCAweDZkLCAweDYxLCAweDc5LCAweDIwLCAweDYyLCAweDY1LAorKwkweDIwLCAweDc1LCAweDcwLCAweDY0LCAweDYxLCAweDc0LCAweDY1LCAweDY0LAorKwkweDJjLCAweDIwLCAweDcyLCAweDY1LCAweDcwLCAweDZjLCAweDYxLCAweDYzLAorKwkweDY1LCAweDY0LCAweDJjLCAweDIwLCAweDZmLCAweDcyLCAweDIwLCAweDZmLAorKwkweDYyLCAweDczLCAweDZmLCAweDZjLCAweDY1LCAweDc0LCAweDY1LCAweDY0LAorKwkweDIwLCAweDYyLCAweDc5LCAweDIwLCAweDZmLCAweDc0LCAweDY4LCAweDY1LAorKwkweDcyLCAweDIwLCAweDY0LCAweDZmLCAweDYzLCAweDc1LCAweDZkLCAweDY1LAorKwkweDZlLCAweDc0LCAweDczLCAweDIwLCAweDYxLCAweDc0LCAweDIwLCAweDYxLAorKwkweDZlLCAweDc5LCAweDIwLCAweDc0LCAweDY5LCAweDZkLCAweDY1LCAweDJlLAorKwkweDIwLCAweDQ5LCAweDc0LCAweDIwLCAweDY5LCAweDczLCAweDIwLCAweDY5LAorKwkweDZlLCAweDYxLCAweDcwLCAweDcwLCAweDcyLCAweDZmLCAweDcwLCAweDcyLAorKwkweDY5LCAweDYxLCAweDc0LCAweDY1LCAweDIwLCAweDc0LCAweDZmLCAweDIwLAorKwkweDc1LCAweDczLCAweDY1LCAweDIwLCAweDQ5LCAweDZlLCAweDc0LCAweDY1LAorKwkweDcyLCAweDZlLCAweDY1LCAweDc0LCAweDJkLCAweDQ0LCAweDcyLCAweDYxLAorKwkweDY2LCAweDc0LCAweDczLCAweDIwLCAweDYxLCAweDczLCAweDIwLCAweDcyLAorKwkweDY1LCAweDY2LCAweDY1LCAweDcyLCAweDY1LCAweDZlLCAweDYzLCAweDY1LAorKwkweDIwLCAweDZkLCAweDYxLCAweDc0LCAweDY1LCAweDcyLCAweDY5LCAweDYxLAorKwkweDZjLCAweDIwLCAweDZmLCAweDcyLCAweDIwLCAweDc0LCAweDZmLCAweDIwLAorKwkweDYzLCAweDY5LCAweDc0LCAweDY1LCAweDIwLCAweDc0LCAweDY4LCAweDY1LAorKwkweDZkLCAweDIwLCAweDZmLCAweDc0LCAweDY4LCAweDY1LCAweDcyLCAweDIwLAorKwkweDc0LCAweDY4LCAweDYxLCAweDZlLCAweDIwLCAweDYxLCAweDczLCAweDIwLAorKwkweDJmLCAweGUyLCAweDgwLCAweDljLCAweDc3LCAweDZmLCAweDcyLCAweDZiLAorKwkweDIwLCAweDY5LCAweDZlLCAweDIwLCAweDcwLCAweDcyLCAweDZmLCAweDY3LAorKwkweDcyLCAweDY1LCAweDczLCAweDczLCAweDJlLCAweDJmLCAweGUyLCAweDgwLAorKwkweDlkCisrfTsKKytzdGF0aWMgY29uc3QgdTggeGVuY19vdXRwdXQwMDFbXSBfX2luaXRjb25zdCA9IHsKKysJMHgxYSwgMHg2ZSwgMHgzYSwgMHhkOSwgMHhmZCwgMHg0MSwgMHgzZiwgMHg3NywKKysJMHg1NCwgMHg3MiwgMHgwYSwgMHg3MCwgMHg5YSwgMHhhMCwgMHgyOSwgMHg5MiwKKysJMHgyZSwgMHhlZCwgMHg5MywgMHhjZiwgMHgwZiwgMHg3MSwgMHg4OCwgMHgxOCwKKysJMHg3YSwgMHg5ZCwgMHgyZCwgMHgyNCwgMHhlMCwgMHhmNSwgMHhlYSwgMHgzZCwKKysJMHg1NSwgMHg2NCwgMHhkNywgMHhhZCwgMHgyYSwgMHgxYSwgMHgxZiwgMHg3ZSwKKysJMHg4NiwgMHg2ZCwgMHhiMCwgMHhjZSwgMHg4MCwgMHg0MSwgMHg3MiwgMHg4NiwKKysJMHgyNiwgMHhlZSwgMHg4NCwgMHhkNywgMHhlZiwgMHg4MiwgMHg5ZSwgMHhlMiwKKysJMHg2MCwgMHg5ZCwgMHg1YSwgMHhmYywgMHhmMCwgMHhlNCwgMHgxOSwgMHg4NSwKKysJMHhlYSwgMHgwOSwgMHhjNiwgMHhmYiwgMHhiMywgMHhhOSwgMHg1MCwgMHgwOSwKKysJMHhlYywgMHg1ZSwgMHgxMSwgMHg5MCwgMHhhMSwgMHhjNSwgMHg0ZSwgMHg0OSwKKysJMHhlZiwgMHg1MCwgMHhkOCwgMHg4ZiwgMHhlMCwgMHg3OCwgMHhkNywgMHhmZCwKKysJMHhiOSwgMHgzYiwgMHhjOSwgMHhmMiwgMHg5MSwgMHhjOCwgMHgyNSwgMHhjOCwKKysJMHhhNywgMHg2MywgMHg2MCwgMHhjZSwgMHgxMCwgMHhjZCwgMHhjNiwgMHg3ZiwKKysJMHhmOCwgMHgxNiwgMHhmOCwgMHhlMSwgMHgwYSwgMHhkOSwgMHhkZSwgMHg3OSwKKysJMHg1MCwgMHgzMywgMHhmMiwgMHgxNiwgMHgwZiwgMHgxNywgMHhiYSwgMHhiOCwKKysJMHg1ZCwgMHhkOCwgMHhkZiwgMHg0ZSwgMHg1MSwgMHhhOCwgMHgzOSwgMHhkMCwKKysJMHg4NSwgMHhjYSwgMHg0NiwgMHg2YSwgMHgxMCwgMHhhNywgMHhhMywgMHg4OCwKKysJMHhlZiwgMHg3OSwgMHhiOSwgMHhmOCwgMHgyNCwgMHhmMywgMHhlMCwgMHg3MSwKKysJMHg3YiwgMHg3NiwgMHgyOCwgMHg0NiwgMHgzYSwgMHgzYSwgMHgxYiwgMHg5MSwKKysJMHhiNiwgMHhkNCwgMHgzZSwgMHgyMywgMHhlNSwgMHg0NCwgMHgxNSwgMHhiZiwKKysJMHg2MCwgMHg0MywgMHg5ZCwgMHhhNCwgMHhiYiwgMHhkNSwgMHg1ZiwgMHg4OSwKKysJMHhlYiwgMHhlZiwgMHg4ZSwgMHhmZCwgMHhkZCwgMHhiNCwgMHgwZCwgMHg0NiwKKysJMHhmMCwgMHg2OSwgMHgyMywgMHg2MywgMHhhZSwgMHg5NCwgMHhmNSwgMHg1ZSwKKysJMHhhNSwgMHhhZCwgMHgxMywgMHgxYywgMHg0MSwgMHg3NiwgMHhlNiwgMHg5MCwKKysJMHhkNiwgMHg2ZCwgMHhhMiwgMHg4ZiwgMHg5NywgMHg0YywgMHhhOCwgMHgwYiwKKysJMHhjZiwgMHg4ZCwgMHg0MywgMHgyYiwgMHg5YywgMHg5YiwgMHhjNSwgMHg1OCwKKysJMHhhNSwgMHhiNiwgMHg5NSwgMHg5YSwgMHhiZiwgMHg4MSwgMHhjNiwgMHg1NCwKKysJMHhjOSwgMHg2NiwgMHgwYywgMHhlNSwgMHg0ZiwgMHg2YSwgMHg1MywgMHhhMSwKKysJMHhlNSwgMHgwYywgMHhiYSwgMHgzMSwgMHhkZSwgMHgzNCwgMHg2NCwgMHg3MywKKysJMHg4YSwgMHgzYiwgMHhiZCwgMHg5MiwgMHgwMSwgMHhkYiwgMHg3MSwgMHg2OSwKKysJMHhmMywgMHg1OCwgMHg5OSwgMHhiYywgMHhkMSwgMHhjYiwgMHg0YSwgMHgwNSwKKysJMHhlMiwgMHg1OCwgMHg5YywgMHgyNSwgMHgxNywgMHhjZCwgMHhkYywgMHg4MywKKysJMHhiNywgMHhmZiwgMHhmYiwgMHgwOSwgMHg2MSwgMHhhZCwgMHhiZiwgMHgxMywKKysJMHg1YiwgMHg1ZSwgMHhlZCwgMHg0NiwgMHg4MiwgMHg2ZiwgMHgyMiwgMHhkOCwKKysJMHg5MywgMHhhNiwgMHg4NSwgMHg1YiwgMHg0MCwgMHgzOSwgMHg1YywgMHhjNSwKKysJMHg5YworK307Cisrc3RhdGljIGNvbnN0IHU4IHhlbmNfYXNzb2MwMDFbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmMywgMHgzMywgMHg4OCwgMHg4NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJMHgwMCwgMHgwMCwgMHg0ZSwgMHg5MQorK307Cisrc3RhdGljIGNvbnN0IHU4IHhlbmNfbm9uY2UwMDFbXSBfX2luaXRjb25zdCA9IHsKKysJMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKysJMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwKKysJMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNworK307Cisrc3RhdGljIGNvbnN0IHU4IHhlbmNfa2V5MDAxW10gX19pbml0Y29uc3QgPSB7CisrCTB4MWMsIDB4OTIsIDB4NDAsIDB4YTUsIDB4ZWIsIDB4NTUsIDB4ZDMsIDB4OGEsCisrCTB4ZjMsIDB4MzMsIDB4ODgsIDB4ODYsIDB4MDQsIDB4ZjYsIDB4YjUsIDB4ZjAsCisrCTB4NDcsIDB4MzksIDB4MTcsIDB4YzEsIDB4NDAsIDB4MmIsIDB4ODAsIDB4MDksCisrCTB4OWQsIDB4Y2EsIDB4NWMsIDB4YmMsIDB4MjAsIDB4NzAsIDB4NzUsIDB4YzAKKyt9OworKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2hhY2hhMjBwb2x5MTMwNV90ZXN0dmVjCisreGNoYWNoYTIwcG9seTEzMDVfZW5jX3ZlY3RvcnNbXSBfX2luaXRjb25zdCA9IHsKKysJeyB4ZW5jX2lucHV0MDAxLCB4ZW5jX291dHB1dDAwMSwgeGVuY19hc3NvYzAwMSwgeGVuY19ub25jZTAwMSwgeGVuY19rZXkwMDEsCisrCSAgc2l6ZW9mKHhlbmNfaW5wdXQwMDEpLCBzaXplb2YoeGVuY19hc3NvYzAwMSksIHNpemVvZih4ZW5jX25vbmNlMDAxKSB9CisrfTsKKysKKytzdGF0aWMgY29uc3QgdTggeGRlY19pbnB1dDAwMVtdIF9faW5pdGNvbnN0ID0geworKwkweDFhLCAweDZlLCAweDNhLCAweGQ5LCAweGZkLCAweDQxLCAweDNmLCAweDc3LAorKwkweDU0LCAweDcyLCAweDBhLCAweDcwLCAweDlhLCAweGEwLCAweDI5LCAweDkyLAorKwkweDJlLCAweGVkLCAweDkzLCAweGNmLCAweDBmLCAweDcxLCAweDg4LCAweDE4LAorKwkweDdhLCAweDlkLCAweDJkLCAweDI0LCAweGUwLCAweGY1LCAweGVhLCAweDNkLAorKwkweDU1LCAweDY0LCAweGQ3LCAweGFkLCAweDJhLCAweDFhLCAweDFmLCAweDdlLAorKwkweDg2LCAweDZkLCAweGIwLCAweGNlLCAweDgwLCAweDQxLCAweDcyLCAweDg2LAorKwkweDI2LCAweGVlLCAweDg0LCAweGQ3LCAweGVmLCAweDgyLCAweDllLCAweGUyLAorKwkweDYwLCAweDlkLCAweDVhLCAweGZjLCAweGYwLCAweGU0LCAweDE5LCAweDg1LAorKwkweGVhLCAweDA5LCAweGM2LCAweGZiLCAweGIzLCAweGE5LCAweDUwLCAweDA5LAorKwkweGVjLCAweDVlLCAweDExLCAweDkwLCAweGExLCAweGM1LCAweDRlLCAweDQ5LAorKwkweGVmLCAweDUwLCAweGQ4LCAweDhmLCAweGUwLCAweDc4LCAweGQ3LCAweGZkLAorKwkweGI5LCAweDNiLCAweGM5LCAweGYyLCAweDkxLCAweGM4LCAweDI1LCAweGM4LAorKwkweGE3LCAweDYzLCAweDYwLCAweGNlLCAweDEwLCAweGNkLCAweGM2LCAweDdmLAorKwkweGY4LCAweDE2LCAweGY4LCAweGUxLCAweDBhLCAweGQ5LCAweGRlLCAweDc5LAorKwkweDUwLCAweDMzLCAweGYyLCAweDE2LCAweDBmLCAweDE3LCAweGJhLCAweGI4LAorKwkweDVkLCAweGQ4LCAweGRmLCAweDRlLCAweDUxLCAweGE4LCAweDM5LCAweGQwLAorKwkweDg1LCAweGNhLCAweDQ2LCAweDZhLCAweDEwLCAweGE3LCAweGEzLCAweDg4LAorKwkweGVmLCAweDc5LCAweGI5LCAweGY4LCAweDI0LCAweGYzLCAweGUwLCAweDcxLAorKwkweDdiLCAweDc2LCAweDI4LCAweDQ2LCAweDNhLCAweDNhLCAweDFiLCAweDkxLAorKwkweGI2LCAweGQ0LCAweDNlLCAweDIzLCAweGU1LCAweDQ0LCAweDE1LCAweGJmLAorKwkweDYwLCAweDQzLCAweDlkLCAweGE0LCAweGJiLCAweGQ1LCAweDVmLCAweDg5LAorKwkweGViLCAweGVmLCAweDhlLCAweGZkLCAweGRkLCAweGI0LCAweDBkLCAweDQ2LAorKwkweGYwLCAweDY5LCAweDIzLCAweDYzLCAweGFlLCAweDk0LCAweGY1LCAweDVlLAorKwkweGE1LCAweGFkLCAweDEzLCAweDFjLCAweDQxLCAweDc2LCAweGU2LCAweDkwLAorKwkweGQ2LCAweDZkLCAweGEyLCAweDhmLCAweDk3LCAweDRjLCAweGE4LCAweDBiLAorKwkweGNmLCAweDhkLCAweDQzLCAweDJiLCAweDljLCAweDliLCAweGM1LCAweDU4LAorKwkweGE1LCAweGI2LCAweDk1LCAweDlhLCAweGJmLCAweDgxLCAweGM2LCAweDU0LAorKwkweGM5LCAweDY2LCAweDBjLCAweGU1LCAweDRmLCAweDZhLCAweDUzLCAweGExLAorKwkweGU1LCAweDBjLCAweGJhLCAweDMxLCAweGRlLCAweDM0LCAweDY0LCAweDczLAorKwkweDhhLCAweDNiLCAweGJkLCAweDkyLCAweDAxLCAweGRiLCAweDcxLCAweDY5LAorKwkweGYzLCAweDU4LCAweDk5LCAweGJjLCAweGQxLCAweGNiLCAweDRhLCAweDA1LAorKwkweGUyLCAweDU4LCAweDljLCAweDI1LCAweDE3LCAweGNkLCAweGRjLCAweDgzLAorKwkweGI3LCAweGZmLCAweGZiLCAweDA5LCAweDYxLCAweGFkLCAweGJmLCAweDEzLAorKwkweDViLCAweDVlLCAweGVkLCAweDQ2LCAweDgyLCAweDZmLCAweDIyLCAweGQ4LAorKwkweDkzLCAweGE2LCAweDg1LCAweDViLCAweDQwLCAweDM5LCAweDVjLCAweGM1LAorKwkweDljCisrfTsKKytzdGF0aWMgY29uc3QgdTggeGRlY19vdXRwdXQwMDFbXSBfX2luaXRjb25zdCA9IHsKKysJMHg0OSwgMHg2ZSwgMHg3NCwgMHg2NSwgMHg3MiwgMHg2ZSwgMHg2NSwgMHg3NCwKKysJMHgyZCwgMHg0NCwgMHg3MiwgMHg2MSwgMHg2NiwgMHg3NCwgMHg3MywgMHgyMCwKKysJMHg2MSwgMHg3MiwgMHg2NSwgMHgyMCwgMHg2NCwgMHg3MiwgMHg2MSwgMHg2NiwKKysJMHg3NCwgMHgyMCwgMHg2NCwgMHg2ZiwgMHg2MywgMHg3NSwgMHg2ZCwgMHg2NSwKKysJMHg2ZSwgMHg3NCwgMHg3MywgMHgyMCwgMHg3NiwgMHg2MSwgMHg2YywgMHg2OSwKKysJMHg2NCwgMHgyMCwgMHg2NiwgMHg2ZiwgMHg3MiwgMHgyMCwgMHg2MSwgMHgyMCwKKysJMHg2ZCwgMHg2MSwgMHg3OCwgMHg2OSwgMHg2ZCwgMHg3NSwgMHg2ZCwgMHgyMCwKKysJMHg2ZiwgMHg2NiwgMHgyMCwgMHg3MywgMHg2OSwgMHg3OCwgMHgyMCwgMHg2ZCwKKysJMHg2ZiwgMHg2ZSwgMHg3NCwgMHg2OCwgMHg3MywgMHgyMCwgMHg2MSwgMHg2ZSwKKysJMHg2NCwgMHgyMCwgMHg2ZCwgMHg2MSwgMHg3OSwgMHgyMCwgMHg2MiwgMHg2NSwKKysJMHgyMCwgMHg3NSwgMHg3MCwgMHg2NCwgMHg2MSwgMHg3NCwgMHg2NSwgMHg2NCwKKysJMHgyYywgMHgyMCwgMHg3MiwgMHg2NSwgMHg3MCwgMHg2YywgMHg2MSwgMHg2MywKKysJMHg2NSwgMHg2NCwgMHgyYywgMHgyMCwgMHg2ZiwgMHg3MiwgMHgyMCwgMHg2ZiwKKysJMHg2MiwgMHg3MywgMHg2ZiwgMHg2YywgMHg2NSwgMHg3NCwgMHg2NSwgMHg2NCwKKysJMHgyMCwgMHg2MiwgMHg3OSwgMHgyMCwgMHg2ZiwgMHg3NCwgMHg2OCwgMHg2NSwKKysJMHg3MiwgMHgyMCwgMHg2NCwgMHg2ZiwgMHg2MywgMHg3NSwgMHg2ZCwgMHg2NSwKKysJMHg2ZSwgMHg3NCwgMHg3MywgMHgyMCwgMHg2MSwgMHg3NCwgMHgyMCwgMHg2MSwKKysJMHg2ZSwgMHg3OSwgMHgyMCwgMHg3NCwgMHg2OSwgMHg2ZCwgMHg2NSwgMHgyZSwKKysJMHgyMCwgMHg0OSwgMHg3NCwgMHgyMCwgMHg2OSwgMHg3MywgMHgyMCwgMHg2OSwKKysJMHg2ZSwgMHg2MSwgMHg3MCwgMHg3MCwgMHg3MiwgMHg2ZiwgMHg3MCwgMHg3MiwKKysJMHg2OSwgMHg2MSwgMHg3NCwgMHg2NSwgMHgyMCwgMHg3NCwgMHg2ZiwgMHgyMCwKKysJMHg3NSwgMHg3MywgMHg2NSwgMHgyMCwgMHg0OSwgMHg2ZSwgMHg3NCwgMHg2NSwKKysJMHg3MiwgMHg2ZSwgMHg2NSwgMHg3NCwgMHgyZCwgMHg0NCwgMHg3MiwgMHg2MSwKKysJMHg2NiwgMHg3NCwgMHg3MywgMHgyMCwgMHg2MSwgMHg3MywgMHgyMCwgMHg3MiwKKysJMHg2NSwgMHg2NiwgMHg2NSwgMHg3MiwgMHg2NSwgMHg2ZSwgMHg2MywgMHg2NSwKKysJMHgyMCwgMHg2ZCwgMHg2MSwgMHg3NCwgMHg2NSwgMHg3MiwgMHg2OSwgMHg2MSwKKysJMHg2YywgMHgyMCwgMHg2ZiwgMHg3MiwgMHgyMCwgMHg3NCwgMHg2ZiwgMHgyMCwKKysJMHg2MywgMHg2OSwgMHg3NCwgMHg2NSwgMHgyMCwgMHg3NCwgMHg2OCwgMHg2NSwKKysJMHg2ZCwgMHgyMCwgMHg2ZiwgMHg3NCwgMHg2OCwgMHg2NSwgMHg3MiwgMHgyMCwKKysJMHg3NCwgMHg2OCwgMHg2MSwgMHg2ZSwgMHgyMCwgMHg2MSwgMHg3MywgMHgyMCwKKysJMHgyZiwgMHhlMiwgMHg4MCwgMHg5YywgMHg3NywgMHg2ZiwgMHg3MiwgMHg2YiwKKysJMHgyMCwgMHg2OSwgMHg2ZSwgMHgyMCwgMHg3MCwgMHg3MiwgMHg2ZiwgMHg2NywKKysJMHg3MiwgMHg2NSwgMHg3MywgMHg3MywgMHgyZSwgMHgyZiwgMHhlMiwgMHg4MCwKKysJMHg5ZAorK307Cisrc3RhdGljIGNvbnN0IHU4IHhkZWNfYXNzb2MwMDFbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmMywgMHgzMywgMHg4OCwgMHg4NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJMHgwMCwgMHgwMCwgMHg0ZSwgMHg5MQorK307Cisrc3RhdGljIGNvbnN0IHU4IHhkZWNfbm9uY2UwMDFbXSBfX2luaXRjb25zdCA9IHsKKysJMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKysJMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwKKysJMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNworK307Cisrc3RhdGljIGNvbnN0IHU4IHhkZWNfa2V5MDAxW10gX19pbml0Y29uc3QgPSB7CisrCTB4MWMsIDB4OTIsIDB4NDAsIDB4YTUsIDB4ZWIsIDB4NTUsIDB4ZDMsIDB4OGEsCisrCTB4ZjMsIDB4MzMsIDB4ODgsIDB4ODYsIDB4MDQsIDB4ZjYsIDB4YjUsIDB4ZjAsCisrCTB4NDcsIDB4MzksIDB4MTcsIDB4YzEsIDB4NDAsIDB4MmIsIDB4ODAsIDB4MDksCisrCTB4OWQsIDB4Y2EsIDB4NWMsIDB4YmMsIDB4MjAsIDB4NzAsIDB4NzUsIDB4YzAKKyt9OworKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2hhY2hhMjBwb2x5MTMwNV90ZXN0dmVjCisreGNoYWNoYTIwcG9seTEzMDVfZGVjX3ZlY3RvcnNbXSBfX2luaXRjb25zdCA9IHsKKysJeyB4ZGVjX2lucHV0MDAxLCB4ZGVjX291dHB1dDAwMSwgeGRlY19hc3NvYzAwMSwgeGRlY19ub25jZTAwMSwgeGRlY19rZXkwMDEsCisrCSAgc2l6ZW9mKHhkZWNfaW5wdXQwMDEpLCBzaXplb2YoeGRlY19hc3NvYzAwMSksIHNpemVvZih4ZGVjX25vbmNlMDAxKSB9CisrfTsKKysKKytzdGF0aWMgdm9pZCBfX2luaXQKKytjaGFjaGEyMHBvbHkxMzA1X3NlbGZ0ZXN0X2VuY3J5cHQodTggKmRzdCwgY29uc3QgdTggKnNyYywgY29uc3Qgc2l6ZV90IHNyY19sZW4sCisrCQkJCSAgY29uc3QgdTggKmFkLCBjb25zdCBzaXplX3QgYWRfbGVuLAorKwkJCQkgIGNvbnN0IHU4ICpub25jZSwgY29uc3Qgc2l6ZV90IG5vbmNlX2xlbiwKKysJCQkJICBjb25zdCB1OCBrZXlbQ0hBQ0hBMjBQT0xZMTMwNV9LRVlfU0laRV0pCisreworKwlpZiAobm9uY2VfbGVuID09IDgpCisrCQljaGFjaGEyMHBvbHkxMzA1X2VuY3J5cHQoZHN0LCBzcmMsIHNyY19sZW4sIGFkLCBhZF9sZW4sCisrCQkJCQkgZ2V0X3VuYWxpZ25lZF9sZTY0KG5vbmNlKSwga2V5KTsKKysJZWxzZQorKwkJQlVHKCk7CisrfQorKworK3N0YXRpYyBib29sIF9faW5pdAorK2RlY3J5cHRpb25fc3VjY2Vzcyhib29sIGZ1bmNfcmV0LCBib29sIGV4cGVjdF9mYWlsdXJlLCBpbnQgbWVtY21wX3Jlc3VsdCkKKyt7CisrCWlmIChleHBlY3RfZmFpbHVyZSkKKysJCXJldHVybiAhZnVuY19yZXQ7CisrCXJldHVybiBmdW5jX3JldCAmJiAhbWVtY21wX3Jlc3VsdDsKKyt9CisrCisrYm9vbCBfX2luaXQgY2hhY2hhMjBwb2x5MTMwNV9zZWxmdGVzdCh2b2lkKQorK3sKKysJZW51bSB7IE1BWElNVU1fVEVTVF9CVUZGRVJfTEVOID0gMVVMIDw8IDEyIH07CisrCXNpemVfdCBpOworKwl1OCAqY29tcHV0ZWRfb3V0cHV0ID0gTlVMTCwgKmhlYXBfc3JjID0gTlVMTDsKKysJYm9vbCBzdWNjZXNzID0gdHJ1ZSwgcmV0OworKworKwloZWFwX3NyYyA9IGttYWxsb2MoTUFYSU1VTV9URVNUX0JVRkZFUl9MRU4sIEdGUF9LRVJORUwpOworKwljb21wdXRlZF9vdXRwdXQgPSBrbWFsbG9jKE1BWElNVU1fVEVTVF9CVUZGRVJfTEVOLCBHRlBfS0VSTkVMKTsKKysJaWYgKCFoZWFwX3NyYyB8fCAhY29tcHV0ZWRfb3V0cHV0KSB7CisrCQlwcl9lcnIoImNoYWNoYTIwcG9seTEzMDUgc2VsZi10ZXN0IG1hbGxvYzogRkFJTFxuIik7CisrCQlzdWNjZXNzID0gZmFsc2U7CisrCQlnb3RvIG91dDsKKysJfQorKworKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjaGFjaGEyMHBvbHkxMzA1X2VuY192ZWN0b3JzKTsgKytpKSB7CisrCQltZW1zZXQoY29tcHV0ZWRfb3V0cHV0LCAwLCBNQVhJTVVNX1RFU1RfQlVGRkVSX0xFTik7CisrCQljaGFjaGEyMHBvbHkxMzA1X3NlbGZ0ZXN0X2VuY3J5cHQoY29tcHV0ZWRfb3V0cHV0LAorKwkJCQkJY2hhY2hhMjBwb2x5MTMwNV9lbmNfdmVjdG9yc1tpXS5pbnB1dCwKKysJCQkJCWNoYWNoYTIwcG9seTEzMDVfZW5jX3ZlY3RvcnNbaV0uaWxlbiwKKysJCQkJCWNoYWNoYTIwcG9seTEzMDVfZW5jX3ZlY3RvcnNbaV0uYXNzb2MsCisrCQkJCQljaGFjaGEyMHBvbHkxMzA1X2VuY192ZWN0b3JzW2ldLmFsZW4sCisrCQkJCQljaGFjaGEyMHBvbHkxMzA1X2VuY192ZWN0b3JzW2ldLm5vbmNlLAorKwkJCQkJY2hhY2hhMjBwb2x5MTMwNV9lbmNfdmVjdG9yc1tpXS5ubGVuLAorKwkJCQkJY2hhY2hhMjBwb2x5MTMwNV9lbmNfdmVjdG9yc1tpXS5rZXkpOworKwkJaWYgKG1lbWNtcChjb21wdXRlZF9vdXRwdXQsCisrCQkJICAgY2hhY2hhMjBwb2x5MTMwNV9lbmNfdmVjdG9yc1tpXS5vdXRwdXQsCisrCQkJICAgY2hhY2hhMjBwb2x5MTMwNV9lbmNfdmVjdG9yc1tpXS5pbGVuICsKKysJCQkJCQkJUE9MWTEzMDVfRElHRVNUX1NJWkUpKSB7CisrCQkJcHJfZXJyKCJjaGFjaGEyMHBvbHkxMzA1IGVuY3J5cHRpb24gc2VsZi10ZXN0ICV6dTogRkFJTFxuIiwKKysJCQkgICAgICAgaSArIDEpOworKwkJCXN1Y2Nlc3MgPSBmYWxzZTsKKysJCX0KKysJfQorKworKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjaGFjaGEyMHBvbHkxMzA1X2RlY192ZWN0b3JzKTsgKytpKSB7CisrCQltZW1zZXQoY29tcHV0ZWRfb3V0cHV0LCAwLCBNQVhJTVVNX1RFU1RfQlVGRkVSX0xFTik7CisrCQlyZXQgPSBjaGFjaGEyMHBvbHkxMzA1X2RlY3J5cHQoY29tcHV0ZWRfb3V0cHV0LAorKwkJCWNoYWNoYTIwcG9seTEzMDVfZGVjX3ZlY3RvcnNbaV0uaW5wdXQsCisrCQkJY2hhY2hhMjBwb2x5MTMwNV9kZWNfdmVjdG9yc1tpXS5pbGVuLAorKwkJCWNoYWNoYTIwcG9seTEzMDVfZGVjX3ZlY3RvcnNbaV0uYXNzb2MsCisrCQkJY2hhY2hhMjBwb2x5MTMwNV9kZWNfdmVjdG9yc1tpXS5hbGVuLAorKwkJCWdldF91bmFsaWduZWRfbGU2NChjaGFjaGEyMHBvbHkxMzA1X2RlY192ZWN0b3JzW2ldLm5vbmNlKSwKKysJCQljaGFjaGEyMHBvbHkxMzA1X2RlY192ZWN0b3JzW2ldLmtleSk7CisrCQlpZiAoIWRlY3J5cHRpb25fc3VjY2VzcyhyZXQsCisrCQkJCWNoYWNoYTIwcG9seTEzMDVfZGVjX3ZlY3RvcnNbaV0uZmFpbHVyZSwKKysJCQkJbWVtY21wKGNvbXB1dGVkX291dHB1dCwKKysJCQkJICAgICAgIGNoYWNoYTIwcG9seTEzMDVfZGVjX3ZlY3RvcnNbaV0ub3V0cHV0LAorKwkJCQkgICAgICAgY2hhY2hhMjBwb2x5MTMwNV9kZWNfdmVjdG9yc1tpXS5pbGVuIC0KKysJCQkJCQkJUE9MWTEzMDVfRElHRVNUX1NJWkUpKSkgeworKwkJCXByX2VycigiY2hhY2hhMjBwb2x5MTMwNSBkZWNyeXB0aW9uIHNlbGYtdGVzdCAlenU6IEZBSUxcbiIsCisrCQkJICAgICAgIGkgKyAxKTsKKysJCQlzdWNjZXNzID0gZmFsc2U7CisrCQl9CisrCX0KKysKKysKKysJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoeGNoYWNoYTIwcG9seTEzMDVfZW5jX3ZlY3RvcnMpOyArK2kpIHsKKysJCW1lbXNldChjb21wdXRlZF9vdXRwdXQsIDAsIE1BWElNVU1fVEVTVF9CVUZGRVJfTEVOKTsKKysJCXhjaGFjaGEyMHBvbHkxMzA1X2VuY3J5cHQoY29tcHV0ZWRfb3V0cHV0LAorKwkJCQkJeGNoYWNoYTIwcG9seTEzMDVfZW5jX3ZlY3RvcnNbaV0uaW5wdXQsCisrCQkJCQl4Y2hhY2hhMjBwb2x5MTMwNV9lbmNfdmVjdG9yc1tpXS5pbGVuLAorKwkJCQkJeGNoYWNoYTIwcG9seTEzMDVfZW5jX3ZlY3RvcnNbaV0uYXNzb2MsCisrCQkJCQl4Y2hhY2hhMjBwb2x5MTMwNV9lbmNfdmVjdG9yc1tpXS5hbGVuLAorKwkJCQkJeGNoYWNoYTIwcG9seTEzMDVfZW5jX3ZlY3RvcnNbaV0ubm9uY2UsCisrCQkJCQl4Y2hhY2hhMjBwb2x5MTMwNV9lbmNfdmVjdG9yc1tpXS5rZXkpOworKwkJaWYgKG1lbWNtcChjb21wdXRlZF9vdXRwdXQsCisrCQkJICAgeGNoYWNoYTIwcG9seTEzMDVfZW5jX3ZlY3RvcnNbaV0ub3V0cHV0LAorKwkJCSAgIHhjaGFjaGEyMHBvbHkxMzA1X2VuY192ZWN0b3JzW2ldLmlsZW4gKworKwkJCQkJCQlQT0xZMTMwNV9ESUdFU1RfU0laRSkpIHsKKysJCQlwcl9lcnIoInhjaGFjaGEyMHBvbHkxMzA1IGVuY3J5cHRpb24gc2VsZi10ZXN0ICV6dTogRkFJTFxuIiwKKysJCQkgICAgICAgaSArIDEpOworKwkJCXN1Y2Nlc3MgPSBmYWxzZTsKKysJCX0KKysJfQorKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh4Y2hhY2hhMjBwb2x5MTMwNV9kZWNfdmVjdG9ycyk7ICsraSkgeworKwkJbWVtc2V0KGNvbXB1dGVkX291dHB1dCwgMCwgTUFYSU1VTV9URVNUX0JVRkZFUl9MRU4pOworKwkJcmV0ID0geGNoYWNoYTIwcG9seTEzMDVfZGVjcnlwdChjb21wdXRlZF9vdXRwdXQsCisrCQkJCQl4Y2hhY2hhMjBwb2x5MTMwNV9kZWNfdmVjdG9yc1tpXS5pbnB1dCwKKysJCQkJCXhjaGFjaGEyMHBvbHkxMzA1X2RlY192ZWN0b3JzW2ldLmlsZW4sCisrCQkJCQl4Y2hhY2hhMjBwb2x5MTMwNV9kZWNfdmVjdG9yc1tpXS5hc3NvYywKKysJCQkJCXhjaGFjaGEyMHBvbHkxMzA1X2RlY192ZWN0b3JzW2ldLmFsZW4sCisrCQkJCQl4Y2hhY2hhMjBwb2x5MTMwNV9kZWNfdmVjdG9yc1tpXS5ub25jZSwKKysJCQkJCXhjaGFjaGEyMHBvbHkxMzA1X2RlY192ZWN0b3JzW2ldLmtleSk7CisrCQlpZiAoIWRlY3J5cHRpb25fc3VjY2VzcyhyZXQsCisrCQkJCXhjaGFjaGEyMHBvbHkxMzA1X2RlY192ZWN0b3JzW2ldLmZhaWx1cmUsCisrCQkJCW1lbWNtcChjb21wdXRlZF9vdXRwdXQsCisrCQkJCSAgICAgICB4Y2hhY2hhMjBwb2x5MTMwNV9kZWNfdmVjdG9yc1tpXS5vdXRwdXQsCisrCQkJCSAgICAgICB4Y2hhY2hhMjBwb2x5MTMwNV9kZWNfdmVjdG9yc1tpXS5pbGVuIC0KKysJCQkJCQkJUE9MWTEzMDVfRElHRVNUX1NJWkUpKSkgeworKwkJCXByX2VycigieGNoYWNoYTIwcG9seTEzMDUgZGVjcnlwdGlvbiBzZWxmLXRlc3QgJXp1OiBGQUlMXG4iLAorKwkJCSAgICAgICBpICsgMSk7CisrCQkJc3VjY2VzcyA9IGZhbHNlOworKwkJfQorKwl9CisrCisrb3V0OgorKwlrZnJlZShoZWFwX3NyYyk7CisrCWtmcmVlKGNvbXB1dGVkX291dHB1dCk7CisrCXJldHVybiBzdWNjZXNzOworK30KKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYi9jcnlwdG8vY2hhY2hhMjBwb2x5MTMwNS5jCitAQCAtMCwwICsxLDIxOSBAQAorKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVAorKy8qCisrICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKyAqCisrICogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQ2hhQ2hhMjBQb2x5MTMwNSBBRUFEIGNvbnN0cnVjdGlvbi4KKysgKgorKyAqIEluZm9ybWF0aW9uOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjODQzOQorKyAqLworKworKyNpbmNsdWRlIDxjcnlwdG8vYWxnYXBpLmg+CisrI2luY2x1ZGUgPGNyeXB0by9jaGFjaGEyMHBvbHkxMzA1Lmg+CisrI2luY2x1ZGUgPGNyeXB0by9jaGFjaGEuaD4KKysjaW5jbHVkZSA8Y3J5cHRvL3BvbHkxMzA1Lmg+CisrCisrI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKysjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisrI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKysjaW5jbHVkZSA8bGludXgvbW0uaD4KKysjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisrCisrI2RlZmluZSBDSEFDSEFfS0VZX1dPUkRTCShDSEFDSEFfS0VZX1NJWkUgLyBzaXplb2YodTMyKSkKKysKKytib29sIF9faW5pdCBjaGFjaGEyMHBvbHkxMzA1X3NlbGZ0ZXN0KHZvaWQpOworKworK3N0YXRpYyB2b2lkIGNoYWNoYV9sb2FkX2tleSh1MzIgKmssIGNvbnN0IHU4ICppbikKKyt7CisrCWtbMF0gPSBnZXRfdW5hbGlnbmVkX2xlMzIoaW4pOworKwlrWzFdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGluICsgNCk7CisrCWtbMl0gPSBnZXRfdW5hbGlnbmVkX2xlMzIoaW4gKyA4KTsKKysJa1szXSA9IGdldF91bmFsaWduZWRfbGUzMihpbiArIDEyKTsKKysJa1s0XSA9IGdldF91bmFsaWduZWRfbGUzMihpbiArIDE2KTsKKysJa1s1XSA9IGdldF91bmFsaWduZWRfbGUzMihpbiArIDIwKTsKKysJa1s2XSA9IGdldF91bmFsaWduZWRfbGUzMihpbiArIDI0KTsKKysJa1s3XSA9IGdldF91bmFsaWduZWRfbGUzMihpbiArIDI4KTsKKyt9CisrCisrc3RhdGljIHZvaWQgeGNoYWNoYV9pbml0KHUzMiAqY2hhY2hhX3N0YXRlLCBjb25zdCB1OCAqa2V5LCBjb25zdCB1OCAqbm9uY2UpCisreworKwl1MzIga1tDSEFDSEFfS0VZX1dPUkRTXTsKKysJdTggaXZbQ0hBQ0hBX0lWX1NJWkVdOworKworKwltZW1zZXQoaXYsIDAsIDgpOworKwltZW1jcHkoaXYgKyA4LCBub25jZSArIDE2LCA4KTsKKysKKysJY2hhY2hhX2xvYWRfa2V5KGssIGtleSk7CisrCisrCS8qIENvbXB1dGUgdGhlIHN1YmtleSBnaXZlbiB0aGUgb3JpZ2luYWwga2V5IGFuZCBmaXJzdCAxMjggbm9uY2UgYml0cyAqLworKwljaGFjaGFfaW5pdChjaGFjaGFfc3RhdGUsIGssIG5vbmNlKTsKKysJaGNoYWNoYV9ibG9jayhjaGFjaGFfc3RhdGUsIGssIDIwKTsKKysKKysJY2hhY2hhX2luaXQoY2hhY2hhX3N0YXRlLCBrLCBpdik7CisrCisrCW1lbXplcm9fZXhwbGljaXQoaywgc2l6ZW9mKGspKTsKKysJbWVtemVyb19leHBsaWNpdChpdiwgc2l6ZW9mKGl2KSk7CisrfQorKworK3N0YXRpYyB2b2lkCisrX19jaGFjaGEyMHBvbHkxMzA1X2VuY3J5cHQodTggKmRzdCwgY29uc3QgdTggKnNyYywgY29uc3Qgc2l6ZV90IHNyY19sZW4sCisrCQkJICAgY29uc3QgdTggKmFkLCBjb25zdCBzaXplX3QgYWRfbGVuLCB1MzIgKmNoYWNoYV9zdGF0ZSkKKyt7CisrCWNvbnN0IHU4ICpwYWQwID0gcGFnZV9hZGRyZXNzKFpFUk9fUEFHRSgwKSk7CisrCXN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCBwb2x5MTMwNV9zdGF0ZTsKKysJdW5pb24geworKwkJdTggYmxvY2swW1BPTFkxMzA1X0tFWV9TSVpFXTsKKysJCV9fbGU2NCBsZW5zWzJdOworKwl9IGI7CisrCisrCWNoYWNoYV9jcnlwdChjaGFjaGFfc3RhdGUsIGIuYmxvY2swLCBwYWQwLCBzaXplb2YoYi5ibG9jazApLCAyMCk7CisrCXBvbHkxMzA1X2luaXQoJnBvbHkxMzA1X3N0YXRlLCBiLmJsb2NrMCk7CisrCisrCXBvbHkxMzA1X3VwZGF0ZSgmcG9seTEzMDVfc3RhdGUsIGFkLCBhZF9sZW4pOworKwlpZiAoYWRfbGVuICYgMHhmKQorKwkJcG9seTEzMDVfdXBkYXRlKCZwb2x5MTMwNV9zdGF0ZSwgcGFkMCwgMHgxMCAtIChhZF9sZW4gJiAweGYpKTsKKysKKysJY2hhY2hhX2NyeXB0KGNoYWNoYV9zdGF0ZSwgZHN0LCBzcmMsIHNyY19sZW4sIDIwKTsKKysKKysJcG9seTEzMDVfdXBkYXRlKCZwb2x5MTMwNV9zdGF0ZSwgZHN0LCBzcmNfbGVuKTsKKysJaWYgKHNyY19sZW4gJiAweGYpCisrCQlwb2x5MTMwNV91cGRhdGUoJnBvbHkxMzA1X3N0YXRlLCBwYWQwLCAweDEwIC0gKHNyY19sZW4gJiAweGYpKTsKKysKKysJYi5sZW5zWzBdID0gY3B1X3RvX2xlNjQoYWRfbGVuKTsKKysJYi5sZW5zWzFdID0gY3B1X3RvX2xlNjQoc3JjX2xlbik7CisrCXBvbHkxMzA1X3VwZGF0ZSgmcG9seTEzMDVfc3RhdGUsICh1OCAqKWIubGVucywgc2l6ZW9mKGIubGVucykpOworKworKwlwb2x5MTMwNV9maW5hbCgmcG9seTEzMDVfc3RhdGUsIGRzdCArIHNyY19sZW4pOworKworKwltZW16ZXJvX2V4cGxpY2l0KGNoYWNoYV9zdGF0ZSwgQ0hBQ0hBX1NUQVRFX1dPUkRTICogc2l6ZW9mKHUzMikpOworKwltZW16ZXJvX2V4cGxpY2l0KCZiLCBzaXplb2YoYikpOworK30KKysKKyt2b2lkIGNoYWNoYTIwcG9seTEzMDVfZW5jcnlwdCh1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCBjb25zdCBzaXplX3Qgc3JjX2xlbiwKKysJCQkgICAgICBjb25zdCB1OCAqYWQsIGNvbnN0IHNpemVfdCBhZF9sZW4sCisrCQkJICAgICAgY29uc3QgdTY0IG5vbmNlLAorKwkJCSAgICAgIGNvbnN0IHU4IGtleVtDSEFDSEEyMFBPTFkxMzA1X0tFWV9TSVpFXSkKKyt7CisrCXUzMiBjaGFjaGFfc3RhdGVbQ0hBQ0hBX1NUQVRFX1dPUkRTXTsKKysJdTMyIGtbQ0hBQ0hBX0tFWV9XT1JEU107CisrCV9fbGU2NCBpdlsyXTsKKysKKysJY2hhY2hhX2xvYWRfa2V5KGssIGtleSk7CisrCisrCWl2WzBdID0gMDsKKysJaXZbMV0gPSBjcHVfdG9fbGU2NChub25jZSk7CisrCisrCWNoYWNoYV9pbml0KGNoYWNoYV9zdGF0ZSwgaywgKHU4ICopaXYpOworKwlfX2NoYWNoYTIwcG9seTEzMDVfZW5jcnlwdChkc3QsIHNyYywgc3JjX2xlbiwgYWQsIGFkX2xlbiwgY2hhY2hhX3N0YXRlKTsKKysKKysJbWVtemVyb19leHBsaWNpdChpdiwgc2l6ZW9mKGl2KSk7CisrCW1lbXplcm9fZXhwbGljaXQoaywgc2l6ZW9mKGspKTsKKyt9CisrRVhQT1JUX1NZTUJPTChjaGFjaGEyMHBvbHkxMzA1X2VuY3J5cHQpOworKworK3ZvaWQgeGNoYWNoYTIwcG9seTEzMDVfZW5jcnlwdCh1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCBjb25zdCBzaXplX3Qgc3JjX2xlbiwKKysJCQkgICAgICAgY29uc3QgdTggKmFkLCBjb25zdCBzaXplX3QgYWRfbGVuLAorKwkJCSAgICAgICBjb25zdCB1OCBub25jZVtYQ0hBQ0hBMjBQT0xZMTMwNV9OT05DRV9TSVpFXSwKKysJCQkgICAgICAgY29uc3QgdTgga2V5W0NIQUNIQTIwUE9MWTEzMDVfS0VZX1NJWkVdKQorK3sKKysJdTMyIGNoYWNoYV9zdGF0ZVtDSEFDSEFfU1RBVEVfV09SRFNdOworKworKwl4Y2hhY2hhX2luaXQoY2hhY2hhX3N0YXRlLCBrZXksIG5vbmNlKTsKKysJX19jaGFjaGEyMHBvbHkxMzA1X2VuY3J5cHQoZHN0LCBzcmMsIHNyY19sZW4sIGFkLCBhZF9sZW4sIGNoYWNoYV9zdGF0ZSk7CisrfQorK0VYUE9SVF9TWU1CT0woeGNoYWNoYTIwcG9seTEzMDVfZW5jcnlwdCk7CisrCisrc3RhdGljIGJvb2wKKytfX2NoYWNoYTIwcG9seTEzMDVfZGVjcnlwdCh1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCBjb25zdCBzaXplX3Qgc3JjX2xlbiwKKysJCQkgICBjb25zdCB1OCAqYWQsIGNvbnN0IHNpemVfdCBhZF9sZW4sIHUzMiAqY2hhY2hhX3N0YXRlKQorK3sKKysJY29uc3QgdTggKnBhZDAgPSBwYWdlX2FkZHJlc3MoWkVST19QQUdFKDApKTsKKysJc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4IHBvbHkxMzA1X3N0YXRlOworKwlzaXplX3QgZHN0X2xlbjsKKysJaW50IHJldDsKKysJdW5pb24geworKwkJdTggYmxvY2swW1BPTFkxMzA1X0tFWV9TSVpFXTsKKysJCXU4IG1hY1tQT0xZMTMwNV9ESUdFU1RfU0laRV07CisrCQlfX2xlNjQgbGVuc1syXTsKKysJfSBiOworKworKwlpZiAodW5saWtlbHkoc3JjX2xlbiA8IFBPTFkxMzA1X0RJR0VTVF9TSVpFKSkKKysJCXJldHVybiBmYWxzZTsKKysKKysJY2hhY2hhX2NyeXB0KGNoYWNoYV9zdGF0ZSwgYi5ibG9jazAsIHBhZDAsIHNpemVvZihiLmJsb2NrMCksIDIwKTsKKysJcG9seTEzMDVfaW5pdCgmcG9seTEzMDVfc3RhdGUsIGIuYmxvY2swKTsKKysKKysJcG9seTEzMDVfdXBkYXRlKCZwb2x5MTMwNV9zdGF0ZSwgYWQsIGFkX2xlbik7CisrCWlmIChhZF9sZW4gJiAweGYpCisrCQlwb2x5MTMwNV91cGRhdGUoJnBvbHkxMzA1X3N0YXRlLCBwYWQwLCAweDEwIC0gKGFkX2xlbiAmIDB4ZikpOworKworKwlkc3RfbGVuID0gc3JjX2xlbiAtIFBPTFkxMzA1X0RJR0VTVF9TSVpFOworKwlwb2x5MTMwNV91cGRhdGUoJnBvbHkxMzA1X3N0YXRlLCBzcmMsIGRzdF9sZW4pOworKwlpZiAoZHN0X2xlbiAmIDB4ZikKKysJCXBvbHkxMzA1X3VwZGF0ZSgmcG9seTEzMDVfc3RhdGUsIHBhZDAsIDB4MTAgLSAoZHN0X2xlbiAmIDB4ZikpOworKworKwliLmxlbnNbMF0gPSBjcHVfdG9fbGU2NChhZF9sZW4pOworKwliLmxlbnNbMV0gPSBjcHVfdG9fbGU2NChkc3RfbGVuKTsKKysJcG9seTEzMDVfdXBkYXRlKCZwb2x5MTMwNV9zdGF0ZSwgKHU4ICopYi5sZW5zLCBzaXplb2YoYi5sZW5zKSk7CisrCisrCXBvbHkxMzA1X2ZpbmFsKCZwb2x5MTMwNV9zdGF0ZSwgYi5tYWMpOworKworKwlyZXQgPSBjcnlwdG9fbWVtbmVxKGIubWFjLCBzcmMgKyBkc3RfbGVuLCBQT0xZMTMwNV9ESUdFU1RfU0laRSk7CisrCWlmIChsaWtlbHkoIXJldCkpCisrCQljaGFjaGFfY3J5cHQoY2hhY2hhX3N0YXRlLCBkc3QsIHNyYywgZHN0X2xlbiwgMjApOworKworKwltZW16ZXJvX2V4cGxpY2l0KCZiLCBzaXplb2YoYikpOworKworKwlyZXR1cm4gIXJldDsKKyt9CisrCisrYm9vbCBjaGFjaGEyMHBvbHkxMzA1X2RlY3J5cHQodTggKmRzdCwgY29uc3QgdTggKnNyYywgY29uc3Qgc2l6ZV90IHNyY19sZW4sCisrCQkJICAgICAgY29uc3QgdTggKmFkLCBjb25zdCBzaXplX3QgYWRfbGVuLAorKwkJCSAgICAgIGNvbnN0IHU2NCBub25jZSwKKysJCQkgICAgICBjb25zdCB1OCBrZXlbQ0hBQ0hBMjBQT0xZMTMwNV9LRVlfU0laRV0pCisreworKwl1MzIgY2hhY2hhX3N0YXRlW0NIQUNIQV9TVEFURV9XT1JEU107CisrCXUzMiBrW0NIQUNIQV9LRVlfV09SRFNdOworKwlfX2xlNjQgaXZbMl07CisrCWJvb2wgcmV0OworKworKwljaGFjaGFfbG9hZF9rZXkoaywga2V5KTsKKysKKysJaXZbMF0gPSAwOworKwlpdlsxXSA9IGNwdV90b19sZTY0KG5vbmNlKTsKKysKKysJY2hhY2hhX2luaXQoY2hhY2hhX3N0YXRlLCBrLCAodTggKilpdik7CisrCXJldCA9IF9fY2hhY2hhMjBwb2x5MTMwNV9kZWNyeXB0KGRzdCwgc3JjLCBzcmNfbGVuLCBhZCwgYWRfbGVuLAorKwkJCQkJIGNoYWNoYV9zdGF0ZSk7CisrCisrCW1lbXplcm9fZXhwbGljaXQoY2hhY2hhX3N0YXRlLCBzaXplb2YoY2hhY2hhX3N0YXRlKSk7CisrCW1lbXplcm9fZXhwbGljaXQoaXYsIHNpemVvZihpdikpOworKwltZW16ZXJvX2V4cGxpY2l0KGssIHNpemVvZihrKSk7CisrCXJldHVybiByZXQ7CisrfQorK0VYUE9SVF9TWU1CT0woY2hhY2hhMjBwb2x5MTMwNV9kZWNyeXB0KTsKKysKKytib29sIHhjaGFjaGEyMHBvbHkxMzA1X2RlY3J5cHQodTggKmRzdCwgY29uc3QgdTggKnNyYywgY29uc3Qgc2l6ZV90IHNyY19sZW4sCisrCQkJICAgICAgIGNvbnN0IHU4ICphZCwgY29uc3Qgc2l6ZV90IGFkX2xlbiwKKysJCQkgICAgICAgY29uc3QgdTggbm9uY2VbWENIQUNIQTIwUE9MWTEzMDVfTk9OQ0VfU0laRV0sCisrCQkJICAgICAgIGNvbnN0IHU4IGtleVtDSEFDSEEyMFBPTFkxMzA1X0tFWV9TSVpFXSkKKyt7CisrCXUzMiBjaGFjaGFfc3RhdGVbQ0hBQ0hBX1NUQVRFX1dPUkRTXTsKKysKKysJeGNoYWNoYV9pbml0KGNoYWNoYV9zdGF0ZSwga2V5LCBub25jZSk7CisrCXJldHVybiBfX2NoYWNoYTIwcG9seTEzMDVfZGVjcnlwdChkc3QsIHNyYywgc3JjX2xlbiwgYWQsIGFkX2xlbiwKKysJCQkJCSAgY2hhY2hhX3N0YXRlKTsKKyt9CisrRVhQT1JUX1NZTUJPTCh4Y2hhY2hhMjBwb2x5MTMwNV9kZWNyeXB0KTsKKysKKytzdGF0aWMgaW50IF9faW5pdCBtb2RfaW5pdCh2b2lkKQorK3sKKysJaWYgKCFJU19FTkFCTEVEKENPTkZJR19DUllQVE9fTUFOQUdFUl9ESVNBQkxFX1RFU1RTKSAmJgorKwkgICAgV0FSTl9PTighY2hhY2hhMjBwb2x5MTMwNV9zZWxmdGVzdCgpKSkKKysJCXJldHVybiAtRU5PREVWOworKwlyZXR1cm4gMDsKKyt9CisrCisrbW9kdWxlX2luaXQobW9kX2luaXQpOworK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKKytNT0RVTEVfREVTQ1JJUFRJT04oIkNoYUNoYTIwUG9seTEzMDUgQUVBRCBjb25zdHJ1Y3Rpb24iKTsKKytNT0RVTEVfQVVUSE9SKCJKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMzMtY3J5cHRvLWxpYi1jaGFjaGEyMHBvbHkxMzA1LXJlaW1wbGVtZW50LWNyeXB0X2Zyb21fcy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMzMtY3J5cHRvLWxpYi1jaGFjaGEyMHBvbHkxMzA1LXJlaW1wbGVtZW50LWNyeXB0X2Zyb21fcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGIyYjU4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAzMy1jcnlwdG8tbGliLWNoYWNoYTIwcG9seTEzMDUtcmVpbXBsZW1lbnQtY3J5cHRfZnJvbV9zLnBhdGNoCkBAIC0wLDAgKzEsMjk1IEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgorRGF0ZTogRnJpLCA4IE5vdiAyMDE5IDEzOjIyOjQwICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyeXB0bzogbGliL2NoYWNoYTIwcG9seTEzMDUgLSByZWltcGxlbWVudCBjcnlwdF9mcm9tX3NnKCkKKyByb3V0aW5lCisKK2NvbW1pdCBkOTUzMTJhM2NjYzBjZDU0NGQzNzRiZTJmYzQ1YWVhYTgwM2U1ZmQ5IHVwc3RyZWFtLgorCitSZWltcGxlbWVudCB0aGUgbGlicmFyeSByb3V0aW5lcyB0byBwZXJmb3JtIGNoYWNoYTIwcG9seTEzMDUgZW4vZGVjcnlwdGlvbgorb24gc2NhdHRlcmxpc3RzLCB3aXRob3V0IFthYl11c2luZyB0aGUgW2RlcHJlY2F0ZWRdIGJsa2NpcGhlciBpbnRlcmZhY2UsCit3aGljaCBpcyByYXRoZXIgaGVhdnl3ZWlnaHQgYW5kIGRvZXMgdGhpbmdzIHdlIGRvbid0IHJlYWxseSBuZWVkLgorCitJbnN0ZWFkLCB3ZSB1c2UgdGhlIHNnX21pdGVyIEFQSSBpbiBhIG5vdmVsIGFuZCBjbGV2ZXIgd2F5LCB0byBpdGVyYXRlCitvdmVyIHRoZSBzY2F0dGVybGlzdCBpbi1wbGFjZSAoaS5lLiwgc291cmNlID09IGRlc3RpbmF0aW9uLCB3aGljaCBpcyB0aGUKK29ubHkgd2F5IHRoaXMgbGlicmFyeSBpcyBleHBlY3RlZCB0byBiZSB1c2VkKS4gVGhhdCB3YXksIHdlIGRvbid0IGhhdmUgdG8KK2l0ZXJhdGUgb3ZlciB0d28gc2NhdHRlcmxpc3RzIGluIHBhcmFsbGVsLgorCitBbm90aGVyIG9wdGltaXphdGlvbiBpcyB0aGF0LCBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gdGhlIGJsa2NpcGhlciB3YWxrZXIKK3RvIHByZXNlbnQgdGhlIGlucHV0IGluIHN1aXRhYmxlIGNodW5rcywgd2UgcmVjb2duaXplIHRoYXQgQ2hhQ2hhIGlzIGEKK3N0cmVhbWNpcGhlciwgYW5kIHNvIHdlIGNhbiBzaW1wbHkgZGVhbCB3aXRoIHBhcnRpYWwgYmxvY2tzIGJ5IGtlZXBpbmcgYQorYmxvY2sgb2YgY2lwaGVyc3RyZWFtIG9uIHRoZSBzdGFjayBhbmQgdXNlIGNyeXB0b194b3IoKSB0byBtaXggaXQgd2l0aAordGhlIGluL291dHB1dC4KKworRmluYWxseSwgd2Ugb21pdCB0aGUgc2NhdHRlcndhbGtfYW5kX2NvcHkoKSBjYWxsIGlmIHRoZSBsYXN0IGVsZW1lbnQgb2YKK3RoZSBzY2F0dGVybGlzdCBjb3ZlcnMgdGhlIE1BQyBhcyB3ZWxsICh3aGljaCBpcyB0aGUgY29tbW9uIGNhc2UpLAorYXZvaWRpbmcgdGhlIG5lZWQgdG8gd2FsayB0aGUgc2NhdHRlcmxpc3QgYW5kIGttYXAoKSB0aGUgcGFnZSB0d2ljZS4KKworU2lnbmVkLW9mZi1ieTogQXJkIEJpZXNoZXV2ZWwgPGFyZGJAa2VybmVsLm9yZz4KK1NpZ25lZC1vZmYtYnk6IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgaW5jbHVkZS9jcnlwdG8vY2hhY2hhMjBwb2x5MTMwNS5oICAgICAgfCAgMTEgKysKKyBsaWIvY3J5cHRvL2NoYWNoYTIwcG9seTEzMDUtc2VsZnRlc3QuYyB8ICA0NSArKysrKysrKworIGxpYi9jcnlwdG8vY2hhY2hhMjBwb2x5MTMwNS5jICAgICAgICAgIHwgMTUwICsrKysrKysrKysrKysrKysrKysrKysrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDIwNiBpbnNlcnRpb25zKCspCisKKy0tLSBhL2luY2x1ZGUvY3J5cHRvL2NoYWNoYTIwcG9seTEzMDUuaAorKysrIGIvaW5jbHVkZS9jcnlwdG8vY2hhY2hhMjBwb2x5MTMwNS5oCitAQCAtNyw2ICs3LDcgQEAKKyAjZGVmaW5lIF9fQ0hBQ0hBMjBQT0xZMTMwNV9ICisgCisgI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisrI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisgCisgZW51bSBjaGFjaGEyMHBvbHkxMzA1X2xlbmd0aHMgeworIAlYQ0hBQ0hBMjBQT0xZMTMwNV9OT05DRV9TSVpFID0gMjQsCitAQCAtMzQsNCArMzUsMTQgQEAgYm9vbCBfX211c3RfY2hlY2sgeGNoYWNoYTIwcG9seTEzMDVfZGVjcgorIAljb25zdCBzaXplX3QgYWRfbGVuLCBjb25zdCB1OCBub25jZVtYQ0hBQ0hBMjBQT0xZMTMwNV9OT05DRV9TSVpFXSwKKyAJY29uc3QgdTgga2V5W0NIQUNIQTIwUE9MWTEzMDVfS0VZX1NJWkVdKTsKKyAKKytib29sIGNoYWNoYTIwcG9seTEzMDVfZW5jcnlwdF9zZ19pbnBsYWNlKHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLCBzaXplX3Qgc3JjX2xlbiwKKysJCQkJCSBjb25zdCB1OCAqYWQsIGNvbnN0IHNpemVfdCBhZF9sZW4sCisrCQkJCQkgY29uc3QgdTY0IG5vbmNlLAorKwkJCQkJIGNvbnN0IHU4IGtleVtDSEFDSEEyMFBPTFkxMzA1X0tFWV9TSVpFXSk7CisrCisrYm9vbCBjaGFjaGEyMHBvbHkxMzA1X2RlY3J5cHRfc2dfaW5wbGFjZShzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywgc2l6ZV90IHNyY19sZW4sCisrCQkJCQkgY29uc3QgdTggKmFkLCBjb25zdCBzaXplX3QgYWRfbGVuLAorKwkJCQkJIGNvbnN0IHU2NCBub25jZSwKKysJCQkJCSBjb25zdCB1OCBrZXlbQ0hBQ0hBMjBQT0xZMTMwNV9LRVlfU0laRV0pOworKworICNlbmRpZiAvKiBfX0NIQUNIQTIwUE9MWTEzMDVfSCAqLworLS0tIGEvbGliL2NyeXB0by9jaGFjaGEyMHBvbHkxMzA1LXNlbGZ0ZXN0LmMKKysrKyBiL2xpYi9jcnlwdG8vY2hhY2hhMjBwb2x5MTMwNS1zZWxmdGVzdC5jCitAQCAtNzI1MCw2ICs3MjUwLDcgQEAgYm9vbCBfX2luaXQgY2hhY2hhMjBwb2x5MTMwNV9zZWxmdGVzdCh2bworIAllbnVtIHsgTUFYSU1VTV9URVNUX0JVRkZFUl9MRU4gPSAxVUwgPDwgMTIgfTsKKyAJc2l6ZV90IGk7CisgCXU4ICpjb21wdXRlZF9vdXRwdXQgPSBOVUxMLCAqaGVhcF9zcmMgPSBOVUxMOworKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dfc3JjOworIAlib29sIHN1Y2Nlc3MgPSB0cnVlLCByZXQ7CisgCisgCWhlYXBfc3JjID0ga21hbGxvYyhNQVhJTVVNX1RFU1RfQlVGRkVSX0xFTiwgR0ZQX0tFUk5FTCk7CitAQCAtNzI4MCw2ICs3MjgxLDI5IEBAIGJvb2wgX19pbml0IGNoYWNoYTIwcG9seTEzMDVfc2VsZnRlc3Qodm8KKyAJCX0KKyAJfQorIAorKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjaGFjaGEyMHBvbHkxMzA1X2VuY192ZWN0b3JzKTsgKytpKSB7CisrCQlpZiAoY2hhY2hhMjBwb2x5MTMwNV9lbmNfdmVjdG9yc1tpXS5ubGVuICE9IDgpCisrCQkJY29udGludWU7CisrCQltZW1jcHkoaGVhcF9zcmMsIGNoYWNoYTIwcG9seTEzMDVfZW5jX3ZlY3RvcnNbaV0uaW5wdXQsCisrCQkgICAgICAgY2hhY2hhMjBwb2x5MTMwNV9lbmNfdmVjdG9yc1tpXS5pbGVuKTsKKysJCXNnX2luaXRfb25lKCZzZ19zcmMsIGhlYXBfc3JjLAorKwkJCSAgICBjaGFjaGEyMHBvbHkxMzA1X2VuY192ZWN0b3JzW2ldLmlsZW4gKyBQT0xZMTMwNV9ESUdFU1RfU0laRSk7CisrCQljaGFjaGEyMHBvbHkxMzA1X2VuY3J5cHRfc2dfaW5wbGFjZSgmc2dfc3JjLAorKwkJCWNoYWNoYTIwcG9seTEzMDVfZW5jX3ZlY3RvcnNbaV0uaWxlbiwKKysJCQljaGFjaGEyMHBvbHkxMzA1X2VuY192ZWN0b3JzW2ldLmFzc29jLAorKwkJCWNoYWNoYTIwcG9seTEzMDVfZW5jX3ZlY3RvcnNbaV0uYWxlbiwKKysJCQlnZXRfdW5hbGlnbmVkX2xlNjQoY2hhY2hhMjBwb2x5MTMwNV9lbmNfdmVjdG9yc1tpXS5ub25jZSksCisrCQkJY2hhY2hhMjBwb2x5MTMwNV9lbmNfdmVjdG9yc1tpXS5rZXkpOworKwkJaWYgKG1lbWNtcChoZWFwX3NyYywKKysJCQkJICAgY2hhY2hhMjBwb2x5MTMwNV9lbmNfdmVjdG9yc1tpXS5vdXRwdXQsCisrCQkJCSAgIGNoYWNoYTIwcG9seTEzMDVfZW5jX3ZlY3RvcnNbaV0uaWxlbiArCisrCQkJCQkJCVBPTFkxMzA1X0RJR0VTVF9TSVpFKSkgeworKwkJCXByX2VycigiY2hhY2hhMjBwb2x5MTMwNSBzZyBlbmNyeXB0aW9uIHNlbGYtdGVzdCAlenU6IEZBSUxcbiIsCisrCQkJICAgICAgIGkgKyAxKTsKKysJCQlzdWNjZXNzID0gZmFsc2U7CisrCQl9CisrCX0KKysKKyAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2hhY2hhMjBwb2x5MTMwNV9kZWNfdmVjdG9ycyk7ICsraSkgeworIAkJbWVtc2V0KGNvbXB1dGVkX291dHB1dCwgMCwgTUFYSU1VTV9URVNUX0JVRkZFUl9MRU4pOworIAkJcmV0ID0gY2hhY2hhMjBwb2x5MTMwNV9kZWNyeXB0KGNvbXB1dGVkX291dHB1dCwKK0BAIC03MzAxLDYgKzczMjUsMjcgQEAgYm9vbCBfX2luaXQgY2hhY2hhMjBwb2x5MTMwNV9zZWxmdGVzdCh2bworIAkJfQorIAl9CisgCisrCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNoYWNoYTIwcG9seTEzMDVfZGVjX3ZlY3RvcnMpOyArK2kpIHsKKysJCW1lbWNweShoZWFwX3NyYywgY2hhY2hhMjBwb2x5MTMwNV9kZWNfdmVjdG9yc1tpXS5pbnB1dCwKKysJCSAgICAgICBjaGFjaGEyMHBvbHkxMzA1X2RlY192ZWN0b3JzW2ldLmlsZW4pOworKwkJc2dfaW5pdF9vbmUoJnNnX3NyYywgaGVhcF9zcmMsCisrCQkJICAgIGNoYWNoYTIwcG9seTEzMDVfZGVjX3ZlY3RvcnNbaV0uaWxlbik7CisrCQlyZXQgPSBjaGFjaGEyMHBvbHkxMzA1X2RlY3J5cHRfc2dfaW5wbGFjZSgmc2dfc3JjLAorKwkJCWNoYWNoYTIwcG9seTEzMDVfZGVjX3ZlY3RvcnNbaV0uaWxlbiwKKysJCQljaGFjaGEyMHBvbHkxMzA1X2RlY192ZWN0b3JzW2ldLmFzc29jLAorKwkJCWNoYWNoYTIwcG9seTEzMDVfZGVjX3ZlY3RvcnNbaV0uYWxlbiwKKysJCQlnZXRfdW5hbGlnbmVkX2xlNjQoY2hhY2hhMjBwb2x5MTMwNV9kZWNfdmVjdG9yc1tpXS5ub25jZSksCisrCQkJY2hhY2hhMjBwb2x5MTMwNV9kZWNfdmVjdG9yc1tpXS5rZXkpOworKwkJaWYgKCFkZWNyeXB0aW9uX3N1Y2Nlc3MocmV0LAorKwkJCWNoYWNoYTIwcG9seTEzMDVfZGVjX3ZlY3RvcnNbaV0uZmFpbHVyZSwKKysJCQltZW1jbXAoaGVhcF9zcmMsIGNoYWNoYTIwcG9seTEzMDVfZGVjX3ZlY3RvcnNbaV0ub3V0cHV0LAorKwkJCSAgICAgICBjaGFjaGEyMHBvbHkxMzA1X2RlY192ZWN0b3JzW2ldLmlsZW4gLQorKwkJCQkJCQlQT0xZMTMwNV9ESUdFU1RfU0laRSkpKSB7CisrCQkJcHJfZXJyKCJjaGFjaGEyMHBvbHkxMzA1IHNnIGRlY3J5cHRpb24gc2VsZi10ZXN0ICV6dTogRkFJTFxuIiwKKysJCQkgICAgICAgaSArIDEpOworKwkJCXN1Y2Nlc3MgPSBmYWxzZTsKKysJCX0KKysJfQorIAorIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh4Y2hhY2hhMjBwb2x5MTMwNV9lbmNfdmVjdG9ycyk7ICsraSkgeworIAkJbWVtc2V0KGNvbXB1dGVkX291dHB1dCwgMCwgTUFYSU1VTV9URVNUX0JVRkZFUl9MRU4pOworLS0tIGEvbGliL2NyeXB0by9jaGFjaGEyMHBvbHkxMzA1LmMKKysrKyBiL2xpYi9jcnlwdG8vY2hhY2hhMjBwb2x5MTMwNS5jCitAQCAtMTEsNiArMTEsNyBAQAorICNpbmNsdWRlIDxjcnlwdG8vY2hhY2hhMjBwb2x5MTMwNS5oPgorICNpbmNsdWRlIDxjcnlwdG8vY2hhY2hhLmg+CisgI2luY2x1ZGUgPGNyeXB0by9wb2x5MTMwNS5oPgorKyNpbmNsdWRlIDxjcnlwdG8vc2NhdHRlcndhbGsuaD4KKyAKKyAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KK0BAIC0yMDUsNiArMjA2LDE1NSBAQCBib29sIHhjaGFjaGEyMHBvbHkxMzA1X2RlY3J5cHQodTggKmRzdCwKKyB9CisgRVhQT1JUX1NZTUJPTCh4Y2hhY2hhMjBwb2x5MTMwNV9kZWNyeXB0KTsKKyAKKytzdGF0aWMKKytib29sIGNoYWNoYTIwcG9seTEzMDVfY3J5cHRfc2dfaW5wbGFjZShzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKKysJCQkJICAgICAgIGNvbnN0IHNpemVfdCBzcmNfbGVuLAorKwkJCQkgICAgICAgY29uc3QgdTggKmFkLCBjb25zdCBzaXplX3QgYWRfbGVuLAorKwkJCQkgICAgICAgY29uc3QgdTY0IG5vbmNlLAorKwkJCQkgICAgICAgY29uc3QgdTgga2V5W0NIQUNIQTIwUE9MWTEzMDVfS0VZX1NJWkVdLAorKwkJCQkgICAgICAgaW50IGVuY3J5cHQpCisreworKwljb25zdCB1OCAqcGFkMCA9IHBhZ2VfYWRkcmVzcyhaRVJPX1BBR0UoMCkpOworKwlzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggcG9seTEzMDVfc3RhdGU7CisrCXUzMiBjaGFjaGFfc3RhdGVbQ0hBQ0hBX1NUQVRFX1dPUkRTXTsKKysJc3RydWN0IHNnX21hcHBpbmdfaXRlciBtaXRlcjsKKysJc2l6ZV90IHBhcnRpYWwgPSAwOworKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisrCWJvb2wgcmV0ID0gdHJ1ZTsKKysJaW50IHNsOworKwl1bmlvbiB7CisrCQlzdHJ1Y3QgeworKwkJCXUzMiBrW0NIQUNIQV9LRVlfV09SRFNdOworKwkJCV9fbGU2NCBpdlsyXTsKKysJCX07CisrCQl1OCBibG9jazBbUE9MWTEzMDVfS0VZX1NJWkVdOworKwkJdTggY2hhY2hhX3N0cmVhbVtDSEFDSEFfQkxPQ0tfU0laRV07CisrCQlzdHJ1Y3QgeworKwkJCXU4IG1hY1syXVtQT0xZMTMwNV9ESUdFU1RfU0laRV07CisrCQl9OworKwkJX19sZTY0IGxlbnNbMl07CisrCX0gYiBfX2FsaWduZWQoMTYpOworKworKwljaGFjaGFfbG9hZF9rZXkoYi5rLCBrZXkpOworKworKwliLml2WzBdID0gMDsKKysJYi5pdlsxXSA9IGNwdV90b19sZTY0KG5vbmNlKTsKKysKKysJY2hhY2hhX2luaXQoY2hhY2hhX3N0YXRlLCBiLmssICh1OCAqKWIuaXYpOworKwljaGFjaGFfY3J5cHQoY2hhY2hhX3N0YXRlLCBiLmJsb2NrMCwgcGFkMCwgc2l6ZW9mKGIuYmxvY2swKSwgMjApOworKwlwb2x5MTMwNV9pbml0KCZwb2x5MTMwNV9zdGF0ZSwgYi5ibG9jazApOworKworKwlpZiAodW5saWtlbHkoYWRfbGVuKSkgeworKwkJcG9seTEzMDVfdXBkYXRlKCZwb2x5MTMwNV9zdGF0ZSwgYWQsIGFkX2xlbik7CisrCQlpZiAoYWRfbGVuICYgMHhmKQorKwkJCXBvbHkxMzA1X3VwZGF0ZSgmcG9seTEzMDVfc3RhdGUsIHBhZDAsIDB4MTAgLSAoYWRfbGVuICYgMHhmKSk7CisrCX0KKysKKysJZmxhZ3MgPSBTR19NSVRFUl9UT19TRzsKKysJaWYgKCFwcmVlbXB0aWJsZSgpKQorKwkJZmxhZ3MgfD0gU0dfTUlURVJfQVRPTUlDOworKworKwlzZ19taXRlcl9zdGFydCgmbWl0ZXIsIHNyYywgc2dfbmVudHMoc3JjKSwgZmxhZ3MpOworKworKwlmb3IgKHNsID0gc3JjX2xlbjsgc2wgPiAwICYmIHNnX21pdGVyX25leHQoJm1pdGVyKTsgc2wgLT0gbWl0ZXIubGVuZ3RoKSB7CisrCQl1OCAqYWRkciA9IG1pdGVyLmFkZHI7CisrCQlzaXplX3QgbGVuZ3RoID0gbWluX3Qoc2l6ZV90LCBzbCwgbWl0ZXIubGVuZ3RoKTsKKysKKysJCWlmICghZW5jcnlwdCkKKysJCQlwb2x5MTMwNV91cGRhdGUoJnBvbHkxMzA1X3N0YXRlLCBhZGRyLCBsZW5ndGgpOworKworKwkJaWYgKHVubGlrZWx5KHBhcnRpYWwpKSB7CisrCQkJc2l6ZV90IGwgPSBtaW4obGVuZ3RoLCBDSEFDSEFfQkxPQ0tfU0laRSAtIHBhcnRpYWwpOworKworKwkJCWNyeXB0b194b3IoYWRkciwgYi5jaGFjaGFfc3RyZWFtICsgcGFydGlhbCwgbCk7CisrCQkJcGFydGlhbCA9IChwYXJ0aWFsICsgbCkgJiAoQ0hBQ0hBX0JMT0NLX1NJWkUgLSAxKTsKKysKKysJCQlhZGRyICs9IGw7CisrCQkJbGVuZ3RoIC09IGw7CisrCQl9CisrCisrCQlpZiAobGlrZWx5KGxlbmd0aCA+PSBDSEFDSEFfQkxPQ0tfU0laRSB8fCBsZW5ndGggPT0gc2wpKSB7CisrCQkJc2l6ZV90IGwgPSBsZW5ndGg7CisrCisrCQkJaWYgKHVubGlrZWx5KGxlbmd0aCA8IHNsKSkKKysJCQkJbCAmPSB+KENIQUNIQV9CTE9DS19TSVpFIC0gMSk7CisrCQkJY2hhY2hhX2NyeXB0KGNoYWNoYV9zdGF0ZSwgYWRkciwgYWRkciwgbCwgMjApOworKwkJCWFkZHIgKz0gbDsKKysJCQlsZW5ndGggLT0gbDsKKysJCX0KKysKKysJCWlmICh1bmxpa2VseShsZW5ndGggPiAwKSkgeworKwkJCWNoYWNoYV9jcnlwdChjaGFjaGFfc3RhdGUsIGIuY2hhY2hhX3N0cmVhbSwgcGFkMCwKKysJCQkJICAgICBDSEFDSEFfQkxPQ0tfU0laRSwgMjApOworKwkJCWNyeXB0b194b3IoYWRkciwgYi5jaGFjaGFfc3RyZWFtLCBsZW5ndGgpOworKwkJCXBhcnRpYWwgPSBsZW5ndGg7CisrCQl9CisrCisrCQlpZiAoZW5jcnlwdCkKKysJCQlwb2x5MTMwNV91cGRhdGUoJnBvbHkxMzA1X3N0YXRlLCBtaXRlci5hZGRyLAorKwkJCQkJbWluX3Qoc2l6ZV90LCBzbCwgbWl0ZXIubGVuZ3RoKSk7CisrCX0KKysKKysJaWYgKHNyY19sZW4gJiAweGYpCisrCQlwb2x5MTMwNV91cGRhdGUoJnBvbHkxMzA1X3N0YXRlLCBwYWQwLCAweDEwIC0gKHNyY19sZW4gJiAweGYpKTsKKysKKysJYi5sZW5zWzBdID0gY3B1X3RvX2xlNjQoYWRfbGVuKTsKKysJYi5sZW5zWzFdID0gY3B1X3RvX2xlNjQoc3JjX2xlbik7CisrCXBvbHkxMzA1X3VwZGF0ZSgmcG9seTEzMDVfc3RhdGUsICh1OCAqKWIubGVucywgc2l6ZW9mKGIubGVucykpOworKworKwlpZiAobGlrZWx5KHNsIDw9IC1QT0xZMTMwNV9ESUdFU1RfU0laRSkpIHsKKysJCWlmIChlbmNyeXB0KSB7CisrCQkJcG9seTEzMDVfZmluYWwoJnBvbHkxMzA1X3N0YXRlLAorKwkJCQkgICAgICAgbWl0ZXIuYWRkciArIG1pdGVyLmxlbmd0aCArIHNsKTsKKysJCQlyZXQgPSB0cnVlOworKwkJfSBlbHNlIHsKKysJCQlwb2x5MTMwNV9maW5hbCgmcG9seTEzMDVfc3RhdGUsIGIubWFjWzBdKTsKKysJCQlyZXQgPSAhY3J5cHRvX21lbW5lcShiLm1hY1swXSwKKysJCQkJCSAgICAgbWl0ZXIuYWRkciArIG1pdGVyLmxlbmd0aCArIHNsLAorKwkJCQkJICAgICBQT0xZMTMwNV9ESUdFU1RfU0laRSk7CisrCQl9CisrCX0KKysKKysJc2dfbWl0ZXJfc3RvcCgmbWl0ZXIpOworKworKwlpZiAodW5saWtlbHkoc2wgPiAtUE9MWTEzMDVfRElHRVNUX1NJWkUpKSB7CisrCQlwb2x5MTMwNV9maW5hbCgmcG9seTEzMDVfc3RhdGUsIGIubWFjWzFdKTsKKysJCXNjYXR0ZXJ3YWxrX21hcF9hbmRfY29weShiLm1hY1tlbmNyeXB0XSwgc3JjLCBzcmNfbGVuLAorKwkJCQkJIHNpemVvZihiLm1hY1sxXSksIGVuY3J5cHQpOworKwkJcmV0ID0gZW5jcnlwdCB8fAorKwkJICAgICAgIWNyeXB0b19tZW1uZXEoYi5tYWNbMF0sIGIubWFjWzFdLCBQT0xZMTMwNV9ESUdFU1RfU0laRSk7CisrCX0KKysKKysJbWVtemVyb19leHBsaWNpdChjaGFjaGFfc3RhdGUsIHNpemVvZihjaGFjaGFfc3RhdGUpKTsKKysJbWVtemVyb19leHBsaWNpdCgmYiwgc2l6ZW9mKGIpKTsKKysKKysJcmV0dXJuIHJldDsKKyt9CisrCisrYm9vbCBjaGFjaGEyMHBvbHkxMzA1X2VuY3J5cHRfc2dfaW5wbGFjZShzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywgc2l6ZV90IHNyY19sZW4sCisrCQkJCQkgY29uc3QgdTggKmFkLCBjb25zdCBzaXplX3QgYWRfbGVuLAorKwkJCQkJIGNvbnN0IHU2NCBub25jZSwKKysJCQkJCSBjb25zdCB1OCBrZXlbQ0hBQ0hBMjBQT0xZMTMwNV9LRVlfU0laRV0pCisreworKwlyZXR1cm4gY2hhY2hhMjBwb2x5MTMwNV9jcnlwdF9zZ19pbnBsYWNlKHNyYywgc3JjX2xlbiwgYWQsIGFkX2xlbiwKKysJCQkJCQkgbm9uY2UsIGtleSwgMSk7CisrfQorK0VYUE9SVF9TWU1CT0woY2hhY2hhMjBwb2x5MTMwNV9lbmNyeXB0X3NnX2lucGxhY2UpOworKworK2Jvb2wgY2hhY2hhMjBwb2x5MTMwNV9kZWNyeXB0X3NnX2lucGxhY2Uoc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsIHNpemVfdCBzcmNfbGVuLAorKwkJCQkJIGNvbnN0IHU4ICphZCwgY29uc3Qgc2l6ZV90IGFkX2xlbiwKKysJCQkJCSBjb25zdCB1NjQgbm9uY2UsCisrCQkJCQkgY29uc3QgdTgga2V5W0NIQUNIQTIwUE9MWTEzMDVfS0VZX1NJWkVdKQorK3sKKysJaWYgKHVubGlrZWx5KHNyY19sZW4gPCBQT0xZMTMwNV9ESUdFU1RfU0laRSkpCisrCQlyZXR1cm4gZmFsc2U7CisrCisrCXJldHVybiBjaGFjaGEyMHBvbHkxMzA1X2NyeXB0X3NnX2lucGxhY2Uoc3JjLAorKwkJCQkJCSBzcmNfbGVuIC0gUE9MWTEzMDVfRElHRVNUX1NJWkUsCisrCQkJCQkJIGFkLCBhZF9sZW4sIG5vbmNlLCBrZXksIDApOworK30KKytFWFBPUlRfU1lNQk9MKGNoYWNoYTIwcG9seTEzMDVfZGVjcnlwdF9zZ19pbnBsYWNlKTsKKysKKyBzdGF0aWMgaW50IF9faW5pdCBtb2RfaW5pdCh2b2lkKQorIHsKKyAJaWYgKCFJU19FTkFCTEVEKENPTkZJR19DUllQVE9fTUFOQUdFUl9ESVNBQkxFX1RFU1RTKSAmJgpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAzNC1jcnlwdG8tY2hhY2hhX2dlbmVyaWMtcmVtb3ZlLXVubmVjZXNzYXJ5LXNldGtleS1mdW5jLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAzNC1jcnlwdG8tY2hhY2hhX2dlbmVyaWMtcmVtb3ZlLXVubmVjZXNzYXJ5LXNldGtleS1mdW5jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwOWIxZmIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDM0LWNyeXB0by1jaGFjaGFfZ2VuZXJpYy1yZW1vdmUtdW5uZWNlc3Nhcnktc2V0a2V5LWZ1bmMucGF0Y2gKQEAgLTAsMCArMSw2OCBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRXJpYyBCaWdnZXJzIDxlYmlnZ2Vyc0Bnb29nbGUuY29tPgorRGF0ZTogU3VuLCAxNyBOb3YgMjAxOSAyMzoyMToyOSAtMDgwMAorU3ViamVjdDogW1BBVENIXSBjcnlwdG86IGNoYWNoYV9nZW5lcmljIC0gcmVtb3ZlIHVubmVjZXNzYXJ5IHNldGtleSgpCisgZnVuY3Rpb25zCisKK2NvbW1pdCAyMDQzMzIzYTc5OWE2NjBiYzg0YmJlZTQwNGNmN2EyNjE3ZWM2MTU3IHVwc3RyZWFtLgorCitVc2UgY2hhY2hhMjBfc2V0a2V5KCkgYW5kIGNoYWNoYTEyX3NldGtleSgpIGZyb20KKzxjcnlwdG8vaW50ZXJuYWwvY2hhY2hhLmg+IGluc3RlYWQgb2YgZGVmaW5pbmcgdGhlbSBhZ2FpbiBpbgorY2hhY2hhX2dlbmVyaWMuYy4KKworU2lnbmVkLW9mZi1ieTogRXJpYyBCaWdnZXJzIDxlYmlnZ2Vyc0Bnb29nbGUuY29tPgorQWNrZWQtYnk6IEFyZCBCaWVzaGV1dmVsIDxhcmRiQGtlcm5lbC5vcmc+CitTaWduZWQtb2ZmLWJ5OiBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGNyeXB0by9jaGFjaGFfZ2VuZXJpYy5jIHwgMTggKysrLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMTUgZGVsZXRpb25zKC0pCisKKy0tLSBhL2NyeXB0by9jaGFjaGFfZ2VuZXJpYy5jCisrKysgYi9jcnlwdG8vY2hhY2hhX2dlbmVyaWMuYworQEAgLTM3LDE4ICszNyw2IEBAIHN0YXRpYyBpbnQgY2hhY2hhX3N0cmVhbV94b3Ioc3RydWN0IHNrY2kKKyAJcmV0dXJuIGVycjsKKyB9CisgCistc3RhdGljIGludCBjcnlwdG9fY2hhY2hhMjBfc2V0a2V5KHN0cnVjdCBjcnlwdG9fc2tjaXBoZXIgKnRmbSwgY29uc3QgdTggKmtleSwKKy0JCQkJICB1bnNpZ25lZCBpbnQga2V5c2l6ZSkKKy17CistCXJldHVybiBjaGFjaGFfc2V0a2V5KHRmbSwga2V5LCBrZXlzaXplLCAyMCk7CistfQorLQorLXN0YXRpYyBpbnQgY3J5cHRvX2NoYWNoYTEyX3NldGtleShzdHJ1Y3QgY3J5cHRvX3NrY2lwaGVyICp0Zm0sIGNvbnN0IHU4ICprZXksCistCQkJCSB1bnNpZ25lZCBpbnQga2V5c2l6ZSkKKy17CistCXJldHVybiBjaGFjaGFfc2V0a2V5KHRmbSwga2V5LCBrZXlzaXplLCAxMik7CistfQorLQorIHN0YXRpYyBpbnQgY3J5cHRvX2NoYWNoYV9jcnlwdChzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxKQorIHsKKyAJc3RydWN0IGNyeXB0b19za2NpcGhlciAqdGZtID0gY3J5cHRvX3NrY2lwaGVyX3JlcXRmbShyZXEpOworQEAgLTkxLDcgKzc5LDcgQEAgc3RhdGljIHN0cnVjdCBza2NpcGhlcl9hbGcgYWxnc1tdID0geworIAkJLm1heF9rZXlzaXplCQk9IENIQUNIQV9LRVlfU0laRSwKKyAJCS5pdnNpemUJCQk9IENIQUNIQV9JVl9TSVpFLAorIAkJLmNodW5rc2l6ZQkJPSBDSEFDSEFfQkxPQ0tfU0laRSwKKy0JCS5zZXRrZXkJCQk9IGNyeXB0b19jaGFjaGEyMF9zZXRrZXksCisrCQkuc2V0a2V5CQkJPSBjaGFjaGEyMF9zZXRrZXksCisgCQkuZW5jcnlwdAkJPSBjcnlwdG9fY2hhY2hhX2NyeXB0LAorIAkJLmRlY3J5cHQJCT0gY3J5cHRvX2NoYWNoYV9jcnlwdCwKKyAJfSwgeworQEAgLTEwNiw3ICs5NCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tjaXBoZXJfYWxnIGFsZ3NbXSA9IHsKKyAJCS5tYXhfa2V5c2l6ZQkJPSBDSEFDSEFfS0VZX1NJWkUsCisgCQkuaXZzaXplCQkJPSBYQ0hBQ0hBX0lWX1NJWkUsCisgCQkuY2h1bmtzaXplCQk9IENIQUNIQV9CTE9DS19TSVpFLAorLQkJLnNldGtleQkJCT0gY3J5cHRvX2NoYWNoYTIwX3NldGtleSwKKysJCS5zZXRrZXkJCQk9IGNoYWNoYTIwX3NldGtleSwKKyAJCS5lbmNyeXB0CQk9IGNyeXB0b194Y2hhY2hhX2NyeXB0LAorIAkJLmRlY3J5cHQJCT0gY3J5cHRvX3hjaGFjaGFfY3J5cHQsCisgCX0sIHsKK0BAIC0xMjEsNyArMTA5LDcgQEAgc3RhdGljIHN0cnVjdCBza2NpcGhlcl9hbGcgYWxnc1tdID0geworIAkJLm1heF9rZXlzaXplCQk9IENIQUNIQV9LRVlfU0laRSwKKyAJCS5pdnNpemUJCQk9IFhDSEFDSEFfSVZfU0laRSwKKyAJCS5jaHVua3NpemUJCT0gQ0hBQ0hBX0JMT0NLX1NJWkUsCistCQkuc2V0a2V5CQkJPSBjcnlwdG9fY2hhY2hhMTJfc2V0a2V5LAorKwkJLnNldGtleQkJCT0gY2hhY2hhMTJfc2V0a2V5LAorIAkJLmVuY3J5cHQJCT0gY3J5cHRvX3hjaGFjaGFfY3J5cHQsCisgCQkuZGVjcnlwdAkJPSBjcnlwdG9feGNoYWNoYV9jcnlwdCwKKyAJfQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAzNS1jcnlwdG8teDg2LWNoYWNoYS1vbmx5LXVucmVnaXN0ZXItYWxnb3JpdGhtcy1pZi1yZWdpLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAzNS1jcnlwdG8teDg2LWNoYWNoYS1vbmx5LXVucmVnaXN0ZXItYWxnb3JpdGhtcy1pZi1yZWdpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NTRlYTgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDM1LWNyeXB0by14ODYtY2hhY2hhLW9ubHktdW5yZWdpc3Rlci1hbGdvcml0aG1zLWlmLXJlZ2kucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRXJpYyBCaWdnZXJzIDxlYmlnZ2Vyc0Bnb29nbGUuY29tPgorRGF0ZTogU3VuLCAxNyBOb3YgMjAxOSAyMzoyMTo1OCAtMDgwMAorU3ViamVjdDogW1BBVENIXSBjcnlwdG86IHg4Ni9jaGFjaGEgLSBvbmx5IHVucmVnaXN0ZXIgYWxnb3JpdGhtcyBpZiByZWdpc3RlcmVkCisKK2NvbW1pdCBiNjI3NTVhZWQzYTNmNWNhOWVkZDI3MTgzMzljY2VhM2I2YmJiZTU3IHVwc3RyZWFtLgorCitJdCdzIG5vdCB2YWxpZCB0byBjYWxsIGNyeXB0b191bnJlZ2lzdGVyX3NrY2lwaGVycygpIHdpdGhvdXQgYSBwcmlvcgorY2FsbCB0byBjcnlwdG9fcmVnaXN0ZXJfc2tjaXBoZXJzKCkuCisKK0ZpeGVzOiA4NGUwM2ZhMzlmYmUgKCJjcnlwdG86IHg4Ni9jaGFjaGEgLSBleHBvc2UgU0lNRCBDaGFDaGEgcm91dGluZSBhcyBsaWJyYXJ5IGZ1bmN0aW9uIikKK1NpZ25lZC1vZmYtYnk6IEVyaWMgQmlnZ2VycyA8ZWJpZ2dlcnNAZ29vZ2xlLmNvbT4KK0Fja2VkLWJ5OiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgorU2lnbmVkLW9mZi1ieTogSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBhcmNoL3g4Ni9jcnlwdG8vY2hhY2hhX2dsdWUuYyB8IDMgKystCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCistLS0gYS9hcmNoL3g4Ni9jcnlwdG8vY2hhY2hhX2dsdWUuYworKysrIGIvYXJjaC94ODYvY3J5cHRvL2NoYWNoYV9nbHVlLmMKK0BAIC0zMDQsNyArMzA0LDggQEAgc3RhdGljIGludCBfX2luaXQgY2hhY2hhX3NpbWRfbW9kX2luaXQodgorIAorIHN0YXRpYyB2b2lkIF9fZXhpdCBjaGFjaGFfc2ltZF9tb2RfZmluaSh2b2lkKQorIHsKKy0JY3J5cHRvX3VucmVnaXN0ZXJfc2tjaXBoZXJzKGFsZ3MsIEFSUkFZX1NJWkUoYWxncykpOworKwlpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NTU0UzKSkKKysJCWNyeXB0b191bnJlZ2lzdGVyX3NrY2lwaGVycyhhbGdzLCBBUlJBWV9TSVpFKGFsZ3MpKTsKKyB9CisgCisgbW9kdWxlX2luaXQoY2hhY2hhX3NpbWRfbW9kX2luaXQpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAzNi1jcnlwdG8tbGliLWNoYWNoYTIwcG9seTEzMDUtdXNlLWNoYWNoYTIwX2NyeXB0LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAzNi1jcnlwdG8tbGliLWNoYWNoYTIwcG9seTEzMDUtdXNlLWNoYWNoYTIwX2NyeXB0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZDIwYjkKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDM2LWNyeXB0by1saWItY2hhY2hhMjBwb2x5MTMwNS11c2UtY2hhY2hhMjBfY3J5cHQucGF0Y2gKQEAgLTAsMCArMSw4MyBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRXJpYyBCaWdnZXJzIDxlYmlnZ2Vyc0Bnb29nbGUuY29tPgorRGF0ZTogU3VuLCAxNyBOb3YgMjAxOSAyMzoyMjoxNiAtMDgwMAorU3ViamVjdDogW1BBVENIXSBjcnlwdG86IGxpYi9jaGFjaGEyMHBvbHkxMzA1IC0gdXNlIGNoYWNoYTIwX2NyeXB0KCkKKworY29tbWl0IDQxMzgwOGI3MWU2MjA0YjBjYzFlZWFhNzc5NjBmN2MzY2QzODFkMzMgdXBzdHJlYW0uCisKK1VzZSBjaGFjaGEyMF9jcnlwdCgpIGluc3RlYWQgb2YgY2hhY2hhX2NyeXB0KCksIHNpbmNlIGl0J3Mgbm90IHJlYWxseQorYXBwcm9wcmlhdGUgZm9yIHVzZXJzIG9mIHRoZSBDaGFDaGEgbGlicmFyeSBBUEkgdG8gYmUgcGFzc2luZyB0aGUgbnVtYmVyCitvZiByb3VuZHMgYXMgYW4gYXJndW1lbnQuCisKK1NpZ25lZC1vZmYtYnk6IEVyaWMgQmlnZ2VycyA8ZWJpZ2dlcnNAZ29vZ2xlLmNvbT4KK0Fja2VkLWJ5OiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgorU2lnbmVkLW9mZi1ieTogSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBsaWIvY3J5cHRvL2NoYWNoYTIwcG9seTEzMDUuYyB8IDE2ICsrKysrKysrLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCistLS0gYS9saWIvY3J5cHRvL2NoYWNoYTIwcG9seTEzMDUuYworKysrIGIvbGliL2NyeXB0by9jaGFjaGEyMHBvbHkxMzA1LmMKK0BAIC02NiwxNCArNjYsMTQgQEAgX19jaGFjaGEyMHBvbHkxMzA1X2VuY3J5cHQodTggKmRzdCwgY29ucworIAkJX19sZTY0IGxlbnNbMl07CisgCX0gYjsKKyAKKy0JY2hhY2hhX2NyeXB0KGNoYWNoYV9zdGF0ZSwgYi5ibG9jazAsIHBhZDAsIHNpemVvZihiLmJsb2NrMCksIDIwKTsKKysJY2hhY2hhMjBfY3J5cHQoY2hhY2hhX3N0YXRlLCBiLmJsb2NrMCwgcGFkMCwgc2l6ZW9mKGIuYmxvY2swKSk7CisgCXBvbHkxMzA1X2luaXQoJnBvbHkxMzA1X3N0YXRlLCBiLmJsb2NrMCk7CisgCisgCXBvbHkxMzA1X3VwZGF0ZSgmcG9seTEzMDVfc3RhdGUsIGFkLCBhZF9sZW4pOworIAlpZiAoYWRfbGVuICYgMHhmKQorIAkJcG9seTEzMDVfdXBkYXRlKCZwb2x5MTMwNV9zdGF0ZSwgcGFkMCwgMHgxMCAtIChhZF9sZW4gJiAweGYpKTsKKyAKKy0JY2hhY2hhX2NyeXB0KGNoYWNoYV9zdGF0ZSwgZHN0LCBzcmMsIHNyY19sZW4sIDIwKTsKKysJY2hhY2hhMjBfY3J5cHQoY2hhY2hhX3N0YXRlLCBkc3QsIHNyYywgc3JjX2xlbik7CisgCisgCXBvbHkxMzA1X3VwZGF0ZSgmcG9seTEzMDVfc3RhdGUsIGRzdCwgc3JjX2xlbik7CisgCWlmIChzcmNfbGVuICYgMHhmKQorQEAgLTE0MCw3ICsxNDAsNyBAQCBfX2NoYWNoYTIwcG9seTEzMDVfZGVjcnlwdCh1OCAqZHN0LCBjb25zCisgCWlmICh1bmxpa2VseShzcmNfbGVuIDwgUE9MWTEzMDVfRElHRVNUX1NJWkUpKQorIAkJcmV0dXJuIGZhbHNlOworIAorLQljaGFjaGFfY3J5cHQoY2hhY2hhX3N0YXRlLCBiLmJsb2NrMCwgcGFkMCwgc2l6ZW9mKGIuYmxvY2swKSwgMjApOworKwljaGFjaGEyMF9jcnlwdChjaGFjaGFfc3RhdGUsIGIuYmxvY2swLCBwYWQwLCBzaXplb2YoYi5ibG9jazApKTsKKyAJcG9seTEzMDVfaW5pdCgmcG9seTEzMDVfc3RhdGUsIGIuYmxvY2swKTsKKyAKKyAJcG9seTEzMDVfdXBkYXRlKCZwb2x5MTMwNV9zdGF0ZSwgYWQsIGFkX2xlbik7CitAQCAtMTYwLDcgKzE2MCw3IEBAIF9fY2hhY2hhMjBwb2x5MTMwNV9kZWNyeXB0KHU4ICpkc3QsIGNvbnMKKyAKKyAJcmV0ID0gY3J5cHRvX21lbW5lcShiLm1hYywgc3JjICsgZHN0X2xlbiwgUE9MWTEzMDVfRElHRVNUX1NJWkUpOworIAlpZiAobGlrZWx5KCFyZXQpKQorLQkJY2hhY2hhX2NyeXB0KGNoYWNoYV9zdGF0ZSwgZHN0LCBzcmMsIGRzdF9sZW4sIDIwKTsKKysJCWNoYWNoYTIwX2NyeXB0KGNoYWNoYV9zdGF0ZSwgZHN0LCBzcmMsIGRzdF9sZW4pOworIAorIAltZW16ZXJvX2V4cGxpY2l0KCZiLCBzaXplb2YoYikpOworIAorQEAgLTI0MSw3ICsyNDEsNyBAQCBib29sIGNoYWNoYTIwcG9seTEzMDVfY3J5cHRfc2dfaW5wbGFjZShzCisgCWIuaXZbMV0gPSBjcHVfdG9fbGU2NChub25jZSk7CisgCisgCWNoYWNoYV9pbml0KGNoYWNoYV9zdGF0ZSwgYi5rLCAodTggKiliLml2KTsKKy0JY2hhY2hhX2NyeXB0KGNoYWNoYV9zdGF0ZSwgYi5ibG9jazAsIHBhZDAsIHNpemVvZihiLmJsb2NrMCksIDIwKTsKKysJY2hhY2hhMjBfY3J5cHQoY2hhY2hhX3N0YXRlLCBiLmJsb2NrMCwgcGFkMCwgc2l6ZW9mKGIuYmxvY2swKSk7CisgCXBvbHkxMzA1X2luaXQoJnBvbHkxMzA1X3N0YXRlLCBiLmJsb2NrMCk7CisgCisgCWlmICh1bmxpa2VseShhZF9sZW4pKSB7CitAQCAtMjc4LDE0ICsyNzgsMTQgQEAgYm9vbCBjaGFjaGEyMHBvbHkxMzA1X2NyeXB0X3NnX2lucGxhY2UocworIAorIAkJCWlmICh1bmxpa2VseShsZW5ndGggPCBzbCkpCisgCQkJCWwgJj0gfihDSEFDSEFfQkxPQ0tfU0laRSAtIDEpOworLQkJCWNoYWNoYV9jcnlwdChjaGFjaGFfc3RhdGUsIGFkZHIsIGFkZHIsIGwsIDIwKTsKKysJCQljaGFjaGEyMF9jcnlwdChjaGFjaGFfc3RhdGUsIGFkZHIsIGFkZHIsIGwpOworIAkJCWFkZHIgKz0gbDsKKyAJCQlsZW5ndGggLT0gbDsKKyAJCX0KKyAKKyAJCWlmICh1bmxpa2VseShsZW5ndGggPiAwKSkgeworLQkJCWNoYWNoYV9jcnlwdChjaGFjaGFfc3RhdGUsIGIuY2hhY2hhX3N0cmVhbSwgcGFkMCwKKy0JCQkJICAgICBDSEFDSEFfQkxPQ0tfU0laRSwgMjApOworKwkJCWNoYWNoYTIwX2NyeXB0KGNoYWNoYV9zdGF0ZSwgYi5jaGFjaGFfc3RyZWFtLCBwYWQwLAorKwkJCQkgICAgICAgQ0hBQ0hBX0JMT0NLX1NJWkUpOworIAkJCWNyeXB0b194b3IoYWRkciwgYi5jaGFjaGFfc3RyZWFtLCBsZW5ndGgpOworIAkJCXBhcnRpYWwgPSBsZW5ndGg7CisgCQl9CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDM3LWNyeXB0by1hcmNoLWNvbmRpdGlvbmFsaXplLWNyeXB0by1hcGktaW4tYXJjaC1nbHVlLWYucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDM3LWNyeXB0by1hcmNoLWNvbmRpdGlvbmFsaXplLWNyeXB0by1hcGktaW4tYXJjaC1nbHVlLWYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUxMDQzOAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMzctY3J5cHRvLWFyY2gtY29uZGl0aW9uYWxpemUtY3J5cHRvLWFwaS1pbi1hcmNoLWdsdWUtZi5wYXRjaApAQCAtMCwwICsxLDI3NSBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIkphc29uIEEuIERvbmVuZmVsZCIgPEphc29uQHp4MmM0LmNvbT4KK0RhdGU6IE1vbiwgMjUgTm92IDIwMTkgMTE6MzE6MTIgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gY3J5cHRvOiBhcmNoIC0gY29uZGl0aW9uYWxpemUgY3J5cHRvIGFwaSBpbiBhcmNoIGdsdWUgZm9yIGxpYgorIGNvZGUKKworY29tbWl0IDgzOTRiZmVjNTFlMGU1NjU1NTYxMDFiY2M0ZTJmZTc1NTExMDRjZDggdXBzdHJlYW0uCisKK0ZvciBnbHVlIGNvZGUgdGhhdCdzIHVzZWQgYnkgWmluYywgdGhlIGFjdHVhbCBDcnlwdG8gQVBJIGZ1bmN0aW9ucyBtaWdodAorbm90IG5lY2Vzc2FyaWx5IGV4aXN0LCBhbmQgZG9uJ3QgbmVlZCB0byBleGlzdCBlaXRoZXIuIEJlZm9yZSB0aGlzCitwYXRjaCwgdGhlcmUgYXJlIHZhbGlkIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIHRoYXQgbGVhZCB0byBhIHVuYnVpbGRhYmxlCitrZXJuZWwuIFRoaXMgZml4ZXMgaXQgdG8gY29uZGl0aW9uYWxpemUgdGhvc2Ugc3ltYm9scyBvbiB0aGUgZXhpc3RlbmNlCitvZiB0aGUgcHJvcGVyIGNvbmZpZyBlbnRyeS4KKworU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CitBY2tlZC1ieTogQXJkIEJpZXNoZXV2ZWwgPGFyZGJAa2VybmVsLm9yZz4KK1NpZ25lZC1vZmYtYnk6IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgYXJjaC9hcm0vY3J5cHRvL2NoYWNoYS1nbHVlLmMgICAgICAgIHwgMjYgKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0KKyBhcmNoL2FybS9jcnlwdG8vY3VydmUyNTUxOS1nbHVlLmMgICAgfCAgNSArKystLQorIGFyY2gvYXJtL2NyeXB0by9wb2x5MTMwNS1nbHVlLmMgICAgICB8ICA5ICsrKysrKy0tLQorIGFyY2gvYXJtNjQvY3J5cHRvL2NoYWNoYS1uZW9uLWdsdWUuYyB8ICA1ICsrKy0tCisgYXJjaC9hcm02NC9jcnlwdG8vcG9seTEzMDUtZ2x1ZS5jICAgIHwgIDUgKysrLS0KKyBhcmNoL21pcHMvY3J5cHRvL2NoYWNoYS1nbHVlLmMgICAgICAgfCAgNiArKysrLS0KKyBhcmNoL21pcHMvY3J5cHRvL3BvbHkxMzA1LWdsdWUuYyAgICAgfCAgNiArKysrLS0KKyBhcmNoL3g4Ni9jcnlwdG8vYmxha2Uycy1nbHVlLmMgICAgICAgfCAgNiArKysrLS0KKyBhcmNoL3g4Ni9jcnlwdG8vY2hhY2hhX2dsdWUuYyAgICAgICAgfCAgNSArKystLQorIGFyY2gveDg2L2NyeXB0by9jdXJ2ZTI1NTE5LXg4Nl82NC5jICB8ICA3ICsrKystLS0KKyBhcmNoL3g4Ni9jcnlwdG8vcG9seTEzMDVfZ2x1ZS5jICAgICAgfCAgNSArKystLQorIDExIGZpbGVzIGNoYW5nZWQsIDUzIGluc2VydGlvbnMoKyksIDMyIGRlbGV0aW9ucygtKQorCistLS0gYS9hcmNoL2FybS9jcnlwdG8vY2hhY2hhLWdsdWUuYworKysrIGIvYXJjaC9hcm0vY3J5cHRvL2NoYWNoYS1nbHVlLmMKK0BAIC0yODYsMTEgKzI4NiwxMyBAQCBzdGF0aWMgc3RydWN0IHNrY2lwaGVyX2FsZyBuZW9uX2FsZ3NbXSA9CisgCisgc3RhdGljIGludCBfX2luaXQgY2hhY2hhX3NpbWRfbW9kX2luaXQodm9pZCkKKyB7CistCWludCBlcnI7CisrCWludCBlcnIgPSAwOworIAorLQllcnIgPSBjcnlwdG9fcmVnaXN0ZXJfc2tjaXBoZXJzKGFybV9hbGdzLCBBUlJBWV9TSVpFKGFybV9hbGdzKSk7CistCWlmIChlcnIpCistCQlyZXR1cm4gZXJyOworKwlpZiAoSVNfUkVBQ0hBQkxFKENPTkZJR19DUllQVE9fQkxLQ0lQSEVSKSkgeworKwkJZXJyID0gY3J5cHRvX3JlZ2lzdGVyX3NrY2lwaGVycyhhcm1fYWxncywgQVJSQVlfU0laRShhcm1fYWxncykpOworKwkJaWYgKGVycikKKysJCQlyZXR1cm4gZXJyOworKwl9CisgCisgCWlmIChJU19FTkFCTEVEKENPTkZJR19LRVJORUxfTU9ERV9ORU9OKSAmJiAoZWxmX2h3Y2FwICYgSFdDQVBfTkVPTikpIHsKKyAJCWludCBpOworQEAgLTMxMCwxOCArMzEyLDIyIEBAIHN0YXRpYyBpbnQgX19pbml0IGNoYWNoYV9zaW1kX21vZF9pbml0KHYKKyAJCQlzdGF0aWNfYnJhbmNoX2VuYWJsZSgmdXNlX25lb24pOworIAkJfQorIAorLQkJZXJyID0gY3J5cHRvX3JlZ2lzdGVyX3NrY2lwaGVycyhuZW9uX2FsZ3MsIEFSUkFZX1NJWkUobmVvbl9hbGdzKSk7CistCQlpZiAoZXJyKQorLQkJCWNyeXB0b191bnJlZ2lzdGVyX3NrY2lwaGVycyhhcm1fYWxncywgQVJSQVlfU0laRShhcm1fYWxncykpOworKwkJaWYgKElTX1JFQUNIQUJMRShDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUikpIHsKKysJCQllcnIgPSBjcnlwdG9fcmVnaXN0ZXJfc2tjaXBoZXJzKG5lb25fYWxncywgQVJSQVlfU0laRShuZW9uX2FsZ3MpKTsKKysJCQlpZiAoZXJyKQorKwkJCQljcnlwdG9fdW5yZWdpc3Rlcl9za2NpcGhlcnMoYXJtX2FsZ3MsIEFSUkFZX1NJWkUoYXJtX2FsZ3MpKTsKKysJCX0KKyAJfQorIAlyZXR1cm4gZXJyOworIH0KKyAKKyBzdGF0aWMgdm9pZCBfX2V4aXQgY2hhY2hhX3NpbWRfbW9kX2Zpbmkodm9pZCkKKyB7CistCWNyeXB0b191bnJlZ2lzdGVyX3NrY2lwaGVycyhhcm1fYWxncywgQVJSQVlfU0laRShhcm1fYWxncykpOworLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfS0VSTkVMX01PREVfTkVPTikgJiYgKGVsZl9od2NhcCAmIEhXQ0FQX05FT04pKQorLQkJY3J5cHRvX3VucmVnaXN0ZXJfc2tjaXBoZXJzKG5lb25fYWxncywgQVJSQVlfU0laRShuZW9uX2FsZ3MpKTsKKysJaWYgKElTX1JFQUNIQUJMRShDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUikpIHsKKysJCWNyeXB0b191bnJlZ2lzdGVyX3NrY2lwaGVycyhhcm1fYWxncywgQVJSQVlfU0laRShhcm1fYWxncykpOworKwkJaWYgKElTX0VOQUJMRUQoQ09ORklHX0tFUk5FTF9NT0RFX05FT04pICYmIChlbGZfaHdjYXAgJiBIV0NBUF9ORU9OKSkKKysJCQljcnlwdG9fdW5yZWdpc3Rlcl9za2NpcGhlcnMobmVvbl9hbGdzLCBBUlJBWV9TSVpFKG5lb25fYWxncykpOworKwl9CisgfQorIAorIG1vZHVsZV9pbml0KGNoYWNoYV9zaW1kX21vZF9pbml0KTsKKy0tLSBhL2FyY2gvYXJtL2NyeXB0by9jdXJ2ZTI1NTE5LWdsdWUuYworKysrIGIvYXJjaC9hcm0vY3J5cHRvL2N1cnZlMjU1MTktZ2x1ZS5jCitAQCAtMTA4LDE0ICsxMDgsMTUgQEAgc3RhdGljIGludCBfX2luaXQgbW9kX2luaXQodm9pZCkKKyB7CisgCWlmIChlbGZfaHdjYXAgJiBIV0NBUF9ORU9OKSB7CisgCQlzdGF0aWNfYnJhbmNoX2VuYWJsZSgmaGF2ZV9uZW9uKTsKKy0JCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfa3BwKCZjdXJ2ZTI1NTE5X2FsZyk7CisrCQlyZXR1cm4gSVNfUkVBQ0hBQkxFKENPTkZJR19DUllQVE9fS1BQKSA/CisrCQkJY3J5cHRvX3JlZ2lzdGVyX2twcCgmY3VydmUyNTUxOV9hbGcpIDogMDsKKyAJfQorIAlyZXR1cm4gMDsKKyB9CisgCisgc3RhdGljIHZvaWQgX19leGl0IG1vZF9leGl0KHZvaWQpCisgeworLQlpZiAoZWxmX2h3Y2FwICYgSFdDQVBfTkVPTikKKysJaWYgKElTX1JFQUNIQUJMRShDT05GSUdfQ1JZUFRPX0tQUCkgJiYgZWxmX2h3Y2FwICYgSFdDQVBfTkVPTikKKyAJCWNyeXB0b191bnJlZ2lzdGVyX2twcCgmY3VydmUyNTUxOV9hbGcpOworIH0KKyAKKy0tLSBhL2FyY2gvYXJtL2NyeXB0by9wb2x5MTMwNS1nbHVlLmMKKysrKyBiL2FyY2gvYXJtL2NyeXB0by9wb2x5MTMwNS1nbHVlLmMKK0BAIC0yNDksMTYgKzI0OSwxOSBAQCBzdGF0aWMgaW50IF9faW5pdCBhcm1fcG9seTEzMDVfbW9kX2luaXQoCisgCWlmIChJU19FTkFCTEVEKENPTkZJR19LRVJORUxfTU9ERV9ORU9OKSAmJgorIAkgICAgKGVsZl9od2NhcCAmIEhXQ0FQX05FT04pKQorIAkJc3RhdGljX2JyYW5jaF9lbmFibGUoJmhhdmVfbmVvbik7CistCWVsc2UKKysJZWxzZSBpZiAoSVNfUkVBQ0hBQkxFKENPTkZJR19DUllQVE9fSEFTSCkpCisgCQkvKiByZWdpc3RlciBvbmx5IHRoZSBmaXJzdCBlbnRyeSAqLworIAkJcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9zaGFzaCgmYXJtX3BvbHkxMzA1X2FsZ3NbMF0pOworIAorLQlyZXR1cm4gY3J5cHRvX3JlZ2lzdGVyX3NoYXNoZXMoYXJtX3BvbHkxMzA1X2FsZ3MsCistCQkJCSAgICAgICBBUlJBWV9TSVpFKGFybV9wb2x5MTMwNV9hbGdzKSk7CisrCXJldHVybiBJU19SRUFDSEFCTEUoQ09ORklHX0NSWVBUT19IQVNIKSA/CisrCQljcnlwdG9fcmVnaXN0ZXJfc2hhc2hlcyhhcm1fcG9seTEzMDVfYWxncywKKysJCQkJCUFSUkFZX1NJWkUoYXJtX3BvbHkxMzA1X2FsZ3MpKSA6IDA7CisgfQorIAorIHN0YXRpYyB2b2lkIF9fZXhpdCBhcm1fcG9seTEzMDVfbW9kX2V4aXQodm9pZCkKKyB7CisrCWlmICghSVNfUkVBQ0hBQkxFKENPTkZJR19DUllQVE9fSEFTSCkpCisrCQlyZXR1cm47CisgCWlmICghc3RhdGljX2JyYW5jaF9saWtlbHkoJmhhdmVfbmVvbikpIHsKKyAJCWNyeXB0b191bnJlZ2lzdGVyX3NoYXNoKCZhcm1fcG9seTEzMDVfYWxnc1swXSk7CisgCQlyZXR1cm47CistLS0gYS9hcmNoL2FybTY0L2NyeXB0by9jaGFjaGEtbmVvbi1nbHVlLmMKKysrKyBiL2FyY2gvYXJtNjQvY3J5cHRvL2NoYWNoYS1uZW9uLWdsdWUuYworQEAgLTIxMSwxMiArMjExLDEzIEBAIHN0YXRpYyBpbnQgX19pbml0IGNoYWNoYV9zaW1kX21vZF9pbml0KHYKKyAKKyAJc3RhdGljX2JyYW5jaF9lbmFibGUoJmhhdmVfbmVvbik7CisgCistCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfc2tjaXBoZXJzKGFsZ3MsIEFSUkFZX1NJWkUoYWxncykpOworKwlyZXR1cm4gSVNfUkVBQ0hBQkxFKENPTkZJR19DUllQVE9fQkxLQ0lQSEVSKSA/CisrCQljcnlwdG9fcmVnaXN0ZXJfc2tjaXBoZXJzKGFsZ3MsIEFSUkFZX1NJWkUoYWxncykpIDogMDsKKyB9CisgCisgc3RhdGljIHZvaWQgX19leGl0IGNoYWNoYV9zaW1kX21vZF9maW5pKHZvaWQpCisgeworLQlpZiAoY3B1X2hhdmVfbmFtZWRfZmVhdHVyZShBU0lNRCkpCisrCWlmIChJU19SRUFDSEFCTEUoQ09ORklHX0NSWVBUT19CTEtDSVBIRVIpICYmIGNwdV9oYXZlX25hbWVkX2ZlYXR1cmUoQVNJTUQpKQorIAkJY3J5cHRvX3VucmVnaXN0ZXJfc2tjaXBoZXJzKGFsZ3MsIEFSUkFZX1NJWkUoYWxncykpOworIH0KKyAKKy0tLSBhL2FyY2gvYXJtNjQvY3J5cHRvL3BvbHkxMzA1LWdsdWUuYworKysrIGIvYXJjaC9hcm02NC9jcnlwdG8vcG9seTEzMDUtZ2x1ZS5jCitAQCAtMjIwLDEyICsyMjAsMTMgQEAgc3RhdGljIGludCBfX2luaXQgbmVvbl9wb2x5MTMwNV9tb2RfaW5pdAorIAorIAlzdGF0aWNfYnJhbmNoX2VuYWJsZSgmaGF2ZV9uZW9uKTsKKyAKKy0JcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9zaGFzaCgmbmVvbl9wb2x5MTMwNV9hbGcpOworKwlyZXR1cm4gSVNfUkVBQ0hBQkxFKENPTkZJR19DUllQVE9fSEFTSCkgPworKwkJY3J5cHRvX3JlZ2lzdGVyX3NoYXNoKCZuZW9uX3BvbHkxMzA1X2FsZykgOiAwOworIH0KKyAKKyBzdGF0aWMgdm9pZCBfX2V4aXQgbmVvbl9wb2x5MTMwNV9tb2RfZXhpdCh2b2lkKQorIHsKKy0JaWYgKGNwdV9oYXZlX25hbWVkX2ZlYXR1cmUoQVNJTUQpKQorKwlpZiAoSVNfUkVBQ0hBQkxFKENPTkZJR19DUllQVE9fSEFTSCkgJiYgY3B1X2hhdmVfbmFtZWRfZmVhdHVyZShBU0lNRCkpCisgCQljcnlwdG9fdW5yZWdpc3Rlcl9zaGFzaCgmbmVvbl9wb2x5MTMwNV9hbGcpOworIH0KKyAKKy0tLSBhL2FyY2gvbWlwcy9jcnlwdG8vY2hhY2hhLWdsdWUuYworKysrIGIvYXJjaC9taXBzL2NyeXB0by9jaGFjaGEtZ2x1ZS5jCitAQCAtMTI4LDEyICsxMjgsMTQgQEAgc3RhdGljIHN0cnVjdCBza2NpcGhlcl9hbGcgYWxnc1tdID0geworIAorIHN0YXRpYyBpbnQgX19pbml0IGNoYWNoYV9zaW1kX21vZF9pbml0KHZvaWQpCisgeworLQlyZXR1cm4gY3J5cHRvX3JlZ2lzdGVyX3NrY2lwaGVycyhhbGdzLCBBUlJBWV9TSVpFKGFsZ3MpKTsKKysJcmV0dXJuIElTX1JFQUNIQUJMRShDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUikgPworKwkJY3J5cHRvX3JlZ2lzdGVyX3NrY2lwaGVycyhhbGdzLCBBUlJBWV9TSVpFKGFsZ3MpKSA6IDA7CisgfQorIAorIHN0YXRpYyB2b2lkIF9fZXhpdCBjaGFjaGFfc2ltZF9tb2RfZmluaSh2b2lkKQorIHsKKy0JY3J5cHRvX3VucmVnaXN0ZXJfc2tjaXBoZXJzKGFsZ3MsIEFSUkFZX1NJWkUoYWxncykpOworKwlpZiAoSVNfUkVBQ0hBQkxFKENPTkZJR19DUllQVE9fQkxLQ0lQSEVSKSkKKysJCWNyeXB0b191bnJlZ2lzdGVyX3NrY2lwaGVycyhhbGdzLCBBUlJBWV9TSVpFKGFsZ3MpKTsKKyB9CisgCisgbW9kdWxlX2luaXQoY2hhY2hhX3NpbWRfbW9kX2luaXQpOworLS0tIGEvYXJjaC9taXBzL2NyeXB0by9wb2x5MTMwNS1nbHVlLmMKKysrKyBiL2FyY2gvbWlwcy9jcnlwdG8vcG9seTEzMDUtZ2x1ZS5jCitAQCAtMTg3LDEyICsxODcsMTQgQEAgc3RhdGljIHN0cnVjdCBzaGFzaF9hbGcgbWlwc19wb2x5MTMwNV9hbAorIAorIHN0YXRpYyBpbnQgX19pbml0IG1pcHNfcG9seTEzMDVfbW9kX2luaXQodm9pZCkKKyB7CistCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfc2hhc2goJm1pcHNfcG9seTEzMDVfYWxnKTsKKysJcmV0dXJuIElTX1JFQUNIQUJMRShDT05GSUdfQ1JZUFRPX0hBU0gpID8KKysJCWNyeXB0b19yZWdpc3Rlcl9zaGFzaCgmbWlwc19wb2x5MTMwNV9hbGcpIDogMDsKKyB9CisgCisgc3RhdGljIHZvaWQgX19leGl0IG1pcHNfcG9seTEzMDVfbW9kX2V4aXQodm9pZCkKKyB7CistCWNyeXB0b191bnJlZ2lzdGVyX3NoYXNoKCZtaXBzX3BvbHkxMzA1X2FsZyk7CisrCWlmIChJU19SRUFDSEFCTEUoQ09ORklHX0NSWVBUT19IQVNIKSkKKysJCWNyeXB0b191bnJlZ2lzdGVyX3NoYXNoKCZtaXBzX3BvbHkxMzA1X2FsZyk7CisgfQorIAorIG1vZHVsZV9pbml0KG1pcHNfcG9seTEzMDVfbW9kX2luaXQpOworLS0tIGEvYXJjaC94ODYvY3J5cHRvL2JsYWtlMnMtZ2x1ZS5jCisrKysgYi9hcmNoL3g4Ni9jcnlwdG8vYmxha2Uycy1nbHVlLmMKK0BAIC0yMTAsMTIgKzIxMCwxNCBAQCBzdGF0aWMgaW50IF9faW5pdCBibGFrZTJzX21vZF9pbml0KHZvaWQpCisgCQkJICAgICAgWEZFQVRVUkVfTUFTS19BVlg1MTIsIE5VTEwpKQorIAkJc3RhdGljX2JyYW5jaF9lbmFibGUoJmJsYWtlMnNfdXNlX2F2eDUxMik7CisgCistCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfc2hhc2hlcyhibGFrZTJzX2FsZ3MsIEFSUkFZX1NJWkUoYmxha2Uyc19hbGdzKSk7CisrCXJldHVybiBJU19SRUFDSEFCTEUoQ09ORklHX0NSWVBUT19IQVNIKSA/CisrCQljcnlwdG9fcmVnaXN0ZXJfc2hhc2hlcyhibGFrZTJzX2FsZ3MsCisrCQkJCQlBUlJBWV9TSVpFKGJsYWtlMnNfYWxncykpIDogMDsKKyB9CisgCisgc3RhdGljIHZvaWQgX19leGl0IGJsYWtlMnNfbW9kX2V4aXQodm9pZCkKKyB7CistCWlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfU1NTRTMpKQorKwlpZiAoSVNfUkVBQ0hBQkxFKENPTkZJR19DUllQVE9fSEFTSCkgJiYgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NTU0UzKSkKKyAJCWNyeXB0b191bnJlZ2lzdGVyX3NoYXNoZXMoYmxha2Uyc19hbGdzLCBBUlJBWV9TSVpFKGJsYWtlMnNfYWxncykpOworIH0KKyAKKy0tLSBhL2FyY2gveDg2L2NyeXB0by9jaGFjaGFfZ2x1ZS5jCisrKysgYi9hcmNoL3g4Ni9jcnlwdG8vY2hhY2hhX2dsdWUuYworQEAgLTI5OSwxMiArMjk5LDEzIEBAIHN0YXRpYyBpbnQgX19pbml0IGNoYWNoYV9zaW1kX21vZF9pbml0KHYKKyAJCSAgICBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVZYNTEyQlcpKSAvKiBrbW92cSAqLworIAkJCXN0YXRpY19icmFuY2hfZW5hYmxlKCZjaGFjaGFfdXNlX2F2eDUxMnZsKTsKKyAJfQorLQlyZXR1cm4gY3J5cHRvX3JlZ2lzdGVyX3NrY2lwaGVycyhhbGdzLCBBUlJBWV9TSVpFKGFsZ3MpKTsKKysJcmV0dXJuIElTX1JFQUNIQUJMRShDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUikgPworKwkJY3J5cHRvX3JlZ2lzdGVyX3NrY2lwaGVycyhhbGdzLCBBUlJBWV9TSVpFKGFsZ3MpKSA6IDA7CisgfQorIAorIHN0YXRpYyB2b2lkIF9fZXhpdCBjaGFjaGFfc2ltZF9tb2RfZmluaSh2b2lkKQorIHsKKy0JaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9TU1NFMykpCisrCWlmIChJU19SRUFDSEFCTEUoQ09ORklHX0NSWVBUT19CTEtDSVBIRVIpICYmIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9TU1NFMykpCisgCQljcnlwdG9fdW5yZWdpc3Rlcl9za2NpcGhlcnMoYWxncywgQVJSQVlfU0laRShhbGdzKSk7CisgfQorIAorLS0tIGEvYXJjaC94ODYvY3J5cHRvL2N1cnZlMjU1MTkteDg2XzY0LmMKKysrKyBiL2FyY2gveDg2L2NyeXB0by9jdXJ2ZTI1NTE5LXg4Nl82NC5jCitAQCAtMjQ1NywxMyArMjQ1NywxNCBAQCBzdGF0aWMgaW50IF9faW5pdCBjdXJ2ZTI1NTE5X21vZF9pbml0KHZvCisgCQlzdGF0aWNfYnJhbmNoX2VuYWJsZSgmY3VydmUyNTUxOV91c2VfYWR4KTsKKyAJZWxzZQorIAkJcmV0dXJuIDA7CistCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfa3BwKCZjdXJ2ZTI1NTE5X2FsZyk7CisrCXJldHVybiBJU19SRUFDSEFCTEUoQ09ORklHX0NSWVBUT19LUFApID8KKysJCWNyeXB0b19yZWdpc3Rlcl9rcHAoJmN1cnZlMjU1MTlfYWxnKSA6IDA7CisgfQorIAorIHN0YXRpYyB2b2lkIF9fZXhpdCBjdXJ2ZTI1NTE5X21vZF9leGl0KHZvaWQpCisgeworLQlpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0JNSTIpIHx8CistCSAgICBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQURYKSkKKysJaWYgKElTX1JFQUNIQUJMRShDT05GSUdfQ1JZUFRPX0tQUCkgJiYKKysJICAgIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQk1JMikgfHwgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0FEWCkpKQorIAkJY3J5cHRvX3VucmVnaXN0ZXJfa3BwKCZjdXJ2ZTI1NTE5X2FsZyk7CisgfQorIAorLS0tIGEvYXJjaC94ODYvY3J5cHRvL3BvbHkxMzA1X2dsdWUuYworKysrIGIvYXJjaC94ODYvY3J5cHRvL3BvbHkxMzA1X2dsdWUuYworQEAgLTIyNCwxMiArMjI0LDEzIEBAIHN0YXRpYyBpbnQgX19pbml0IHBvbHkxMzA1X3NpbWRfbW9kX2luaXQKKyAJICAgIGNwdV9oYXNfeGZlYXR1cmVzKFhGRUFUVVJFX01BU0tfU1NFIHwgWEZFQVRVUkVfTUFTS19ZTU0sIE5VTEwpKQorIAkJc3RhdGljX2JyYW5jaF9lbmFibGUoJnBvbHkxMzA1X3VzZV9hdngyKTsKKyAKKy0JcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9zaGFzaCgmYWxnKTsKKysJcmV0dXJuIElTX1JFQUNIQUJMRShDT05GSUdfQ1JZUFRPX0hBU0gpID8gY3J5cHRvX3JlZ2lzdGVyX3NoYXNoKCZhbGcpIDogMDsKKyB9CisgCisgc3RhdGljIHZvaWQgX19leGl0IHBvbHkxMzA1X3NpbWRfbW9kX2V4aXQodm9pZCkKKyB7CistCWNyeXB0b191bnJlZ2lzdGVyX3NoYXNoKCZhbGcpOworKwlpZiAoSVNfUkVBQ0hBQkxFKENPTkZJR19DUllQVE9fSEFTSCkpCisrCQljcnlwdG9fdW5yZWdpc3Rlcl9zaGFzaCgmYWxnKTsKKyB9CisgCisgbW9kdWxlX2luaXQocG9seTEzMDVfc2ltZF9tb2RfaW5pdCk7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDM4LWNyeXB0by1jaGFjaGEtZml4LXdhcm5pbmctbWVzc2FnZS1pbi1oZWFkZXItZmlsZS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwMzgtY3J5cHRvLWNoYWNoYS1maXgtd2FybmluZy1tZXNzYWdlLWluLWhlYWRlci1maWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjZDAzZTMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDM4LWNyeXB0by1jaGFjaGEtZml4LXdhcm5pbmctbWVzc2FnZS1pbi1oZWFkZXItZmlsZS5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/VmFsZGlzPTIwS2w9QzQ9OTN0bmlla3M/PSA8dmFsZGlzLmtsZXRuaWVrc0B2dC5lZHU+CitEYXRlOiBUaHUsIDUgRGVjIDIwMTkgMjA6NTg6MzYgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSF0gY3J5cHRvOiBjaGFjaGEgLSBmaXggd2FybmluZyBtZXNzYWdlIGluIGhlYWRlciBmaWxlCisKK2NvbW1pdCA1NzlkNzA1Y2Q2NGU0NGYzZmNkYTFhNmNmZDVmMzc0NjhhNWRkZjYzIHVwc3RyZWFtLgorCitCdWlsZGluZyB3aXRoIFc9MSBjYXVzZXMgYSB3YXJuaW5nOgorCisgIENDIFtNXSAgYXJjaC94ODYvY3J5cHRvL2NoYWNoYV9nbHVlLm8KK0luIGZpbGUgaW5jbHVkZWQgZnJvbSBhcmNoL3g4Ni9jcnlwdG8vY2hhY2hhX2dsdWUuYzoxMDoKKy4vaW5jbHVkZS9jcnlwdG8vaW50ZXJuYWwvY2hhY2hhLmg6Mzc6MTogd2FybmluZzogJ2lubGluZScgaXMgbm90IGF0IGJlZ2lubmluZyBvZiBkZWNsYXJhdGlvbiBbLVdvbGQtc3R5bGUtZGVjbGFyYXRpb25dCisgICAzNyB8IHN0YXRpYyBpbnQgaW5saW5lIGNoYWNoYTEyX3NldGtleShzdHJ1Y3QgY3J5cHRvX3NrY2lwaGVyICp0Zm0sIGNvbnN0IHU4ICprZXksCisgICAgICB8IF5+fn5+fgorCitTdHJhaWdodGVuIG91dCB0aGUgb3JkZXIgdG8gbWF0Y2ggdGhlIHJlc3Qgb2YgdGhlIGhlYWRlciBmaWxlLgorCitTaWduZWQtb2ZmLWJ5OiBWYWxkaXMgS2xldG5pZWtzIDx2YWxkaXMua2xldG5pZWtzQHZ0LmVkdT4KK1NpZ25lZC1vZmYtYnk6IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgaW5jbHVkZS9jcnlwdG8vaW50ZXJuYWwvY2hhY2hhLmggfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSBhL2luY2x1ZGUvY3J5cHRvL2ludGVybmFsL2NoYWNoYS5oCisrKysgYi9pbmNsdWRlL2NyeXB0by9pbnRlcm5hbC9jaGFjaGEuaAorQEAgLTM0LDcgKzM0LDcgQEAgc3RhdGljIGlubGluZSBpbnQgY2hhY2hhMjBfc2V0a2V5KHN0cnVjdAorIAlyZXR1cm4gY2hhY2hhX3NldGtleSh0Zm0sIGtleSwga2V5c2l6ZSwgMjApOworIH0KKyAKKy1zdGF0aWMgaW50IGlubGluZSBjaGFjaGExMl9zZXRrZXkoc3RydWN0IGNyeXB0b19za2NpcGhlciAqdGZtLCBjb25zdCB1OCAqa2V5LAorK3N0YXRpYyBpbmxpbmUgaW50IGNoYWNoYTEyX3NldGtleShzdHJ1Y3QgY3J5cHRvX3NrY2lwaGVyICp0Zm0sIGNvbnN0IHU4ICprZXksCisgCQkJCSAgdW5zaWduZWQgaW50IGtleXNpemUpCisgeworIAlyZXR1cm4gY2hhY2hhX3NldGtleSh0Zm0sIGtleSwga2V5c2l6ZSwgMTIpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAzOS1jcnlwdG8tYXJtLWN1cnZlMjU1MTktYWRkLWFyY2gtc3BlY2lmaWMta2V5LWdlbmVyYXRpLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDAzOS1jcnlwdG8tYXJtLWN1cnZlMjU1MTktYWRkLWFyY2gtc3BlY2lmaWMta2V5LWdlbmVyYXRpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZGUyMmQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDM5LWNyeXB0by1hcm0tY3VydmUyNTUxOS1hZGQtYXJjaC1zcGVjaWZpYy1rZXktZ2VuZXJhdGkucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIkphc29uIEEuIERvbmVuZmVsZCIgPEphc29uQHp4MmM0LmNvbT4KK0RhdGU6IFdlZCwgMTEgRGVjIDIwMTkgMTA6MjY6MzkgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gY3J5cHRvOiBhcm0vY3VydmUyNTUxOSAtIGFkZCBhcmNoLXNwZWNpZmljIGtleSBnZW5lcmF0aW9uCisgZnVuY3Rpb24KKworY29tbWl0IDg0ZmFhMzA3MjQ5YjM0MWY2YWQ4ZGUzZTE4NjlkNzdhNjVlMjY2NjkgdXBzdHJlYW0uCisKK1NvbWVob3cgdGhpcyB3YXMgZm9yZ290dGVuIHdoZW4gWmluYyB3YXMgYmVpbmcgc3BsaXQgaW50byBvZGRseSBzaGFwZWQKK3BpZWNlcywgcmVzdWx0aW5nIGluIGxpbmtlciBlcnJvcnMuIFRoZSB4ODZfNjQgZ2x1ZSBoYXMgYSBzcGVjaWZpYyBrZXkKK2dlbmVyYXRpb24gaW1wbGVtZW50YXRpb24sIGJ1dCB0aGUgQXJtIG9uZSBkb2VzIG5vdC4gSG93ZXZlciwgaXQgY2FuCitzdGlsbCByZWNlaXZlIHRoZSBORU9OIHNwZWVkdXBzIGJ5IGNhbGxpbmcgdGhlIG9yZGluYXJ5IERIIGZ1bmN0aW9uCit1c2luZyB0aGUgYmFzZSBwb2ludC4KKworU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CitBY2tlZC1ieTogQXJkIEJpZXNoZXV2ZWwgPGFyZGJAa2VybmVsLm9yZz4KK1NpZ25lZC1vZmYtYnk6IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgYXJjaC9hcm0vY3J5cHRvL2N1cnZlMjU1MTktZ2x1ZS5jIHwgNyArKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKQorCistLS0gYS9hcmNoL2FybS9jcnlwdG8vY3VydmUyNTUxOS1nbHVlLmMKKysrKyBiL2FyY2gvYXJtL2NyeXB0by9jdXJ2ZTI1NTE5LWdsdWUuYworQEAgLTM4LDYgKzM4LDEzIEBAIHZvaWQgY3VydmUyNTUxOV9hcmNoKHU4IG91dFtDVVJWRTI1NTE5X0sKKyB9CisgRVhQT1JUX1NZTUJPTChjdXJ2ZTI1NTE5X2FyY2gpOworIAorK3ZvaWQgY3VydmUyNTUxOV9iYXNlX2FyY2godTggcHViW0NVUlZFMjU1MTlfS0VZX1NJWkVdLAorKwkJCSAgY29uc3QgdTggc2VjcmV0W0NVUlZFMjU1MTlfS0VZX1NJWkVdKQorK3sKKysJcmV0dXJuIGN1cnZlMjU1MTlfYXJjaChwdWIsIHNlY3JldCwgY3VydmUyNTUxOV9iYXNlX3BvaW50KTsKKyt9CisrRVhQT1JUX1NZTUJPTChjdXJ2ZTI1NTE5X2Jhc2VfYXJjaCk7CisrCisgc3RhdGljIGludCBjdXJ2ZTI1NTE5X3NldF9zZWNyZXQoc3RydWN0IGNyeXB0b19rcHAgKnRmbSwgY29uc3Qgdm9pZCAqYnVmLAorIAkJCQkgdW5zaWduZWQgaW50IGxlbikKKyB7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDQwLWNyeXB0by1saWItY3VydmUyNTUxOS1yZS1hZGQtc2VsZnRlc3RzLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA0MC1jcnlwdG8tbGliLWN1cnZlMjU1MTktcmUtYWRkLXNlbGZ0ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDNkMTk2Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA0MC1jcnlwdG8tbGliLWN1cnZlMjU1MTktcmUtYWRkLXNlbGZ0ZXN0cy5wYXRjaApAQCAtMCwwICsxLDEzODcgQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJKYXNvbiBBLiBEb25lbmZlbGQiIDxKYXNvbkB6eDJjNC5jb20+CitEYXRlOiBNb24sIDE2IERlYyAyMDE5IDE5OjUzOjI2ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyeXB0bzogbGliL2N1cnZlMjU1MTkgLSByZS1hZGQgc2VsZnRlc3RzCisKK2NvbW1pdCBhYTEyNzk2M2YxY2FiMmI5M2M3NGM5YjEyOGE4NDYxMDIwM2ZiNjc0IHVwc3RyZWFtLgorCitTb21laG93IHRoZXNlIHdlcmUgZHJvcHBlZCB3aGVuIFppbmMgd2FzIGJlaW5nIGludGVncmF0ZWQsIHdoaWNoIGlzCitwcm9ibGVtYXRpYywgYmVjYXVzZSB0ZXN0aW5nIHRoZSBsaWJyYXJ5IGludGVyZmFjZSBmb3IgQ3VydmUyNTUxOSBpcworaW1wb3J0YW50Li4gVGhpcyBjb21taXQgc2ltcGx5IGFkZHMgdGhlbSBiYWNrIGFuZCB3aXJlcyB0aGVtIGluIGluIHRoZQorc2FtZSB3YXkgdGhhdCB0aGUgYmxha2UycyBzZWxmdGVzdHMgYXJlIHdpcmVkIGluLgorCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgbGliL2NyeXB0by9NYWtlZmlsZSAgICAgICAgICAgICAgfCAgICAxICsKKyBsaWIvY3J5cHRvL2N1cnZlMjU1MTktc2VsZnRlc3QuYyB8IDEzMjEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgbGliL2NyeXB0by9jdXJ2ZTI1NTE5LmMgICAgICAgICAgfCAgIDE3ICsKKyAzIGZpbGVzIGNoYW5nZWQsIDEzMzkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvY3J5cHRvL2N1cnZlMjU1MTktc2VsZnRlc3QuYworCistLS0gYS9saWIvY3J5cHRvL01ha2VmaWxlCisrKysgYi9saWIvY3J5cHRvL01ha2VmaWxlCitAQCAtMzYsNCArMzYsNSBAQCBsaWJzaGEyNTYteQkJCQkJOj0gc2hhMjU2Lm8KKyBpZm5lcSAoJChDT05GSUdfQ1JZUFRPX01BTkFHRVJfRElTQUJMRV9URVNUUykseSkKKyBsaWJibGFrZTJzLXkJCQkJCSs9IGJsYWtlMnMtc2VsZnRlc3QubworIGxpYmNoYWNoYTIwcG9seTEzMDUteQkJCQkrPSBjaGFjaGEyMHBvbHkxMzA1LXNlbGZ0ZXN0Lm8KKytsaWJjdXJ2ZTI1NTE5LXkJCQkJCSs9IGN1cnZlMjU1MTktc2VsZnRlc3QubworIGVuZGlmCistLS0gL2Rldi9udWxsCisrKysgYi9saWIvY3J5cHRvL2N1cnZlMjU1MTktc2VsZnRlc3QuYworQEAgLTAsMCArMSwxMzIxIEBACisrLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCisrLyoKKysgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisrICovCisrCisrI2luY2x1ZGUgPGNyeXB0by9jdXJ2ZTI1NTE5Lmg+CisrCisrc3RydWN0IGN1cnZlMjU1MTlfdGVzdF92ZWN0b3IgeworKwl1OCBwcml2YXRlW0NVUlZFMjU1MTlfS0VZX1NJWkVdOworKwl1OCBwdWJsaWNbQ1VSVkUyNTUxOV9LRVlfU0laRV07CisrCXU4IHJlc3VsdFtDVVJWRTI1NTE5X0tFWV9TSVpFXTsKKysJYm9vbCB2YWxpZDsKKyt9OworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3VydmUyNTUxOV90ZXN0X3ZlY3RvciBjdXJ2ZTI1NTE5X3Rlc3RfdmVjdG9yc1tdIF9faW5pdGNvbnN0ID0geworKwl7CisrCQkucHJpdmF0ZSA9IHsgMHg3NywgMHgwNywgMHg2ZCwgMHgwYSwgMHg3MywgMHgxOCwgMHhhNSwgMHg3ZCwKKysJCQkgICAgIDB4M2MsIDB4MTYsIDB4YzEsIDB4NzIsIDB4NTEsIDB4YjIsIDB4NjYsIDB4NDUsCisrCQkJICAgICAweGRmLCAweDRjLCAweDJmLCAweDg3LCAweGViLCAweGMwLCAweDk5LCAweDJhLAorKwkJCSAgICAgMHhiMSwgMHg3NywgMHhmYiwgMHhhNSwgMHgxZCwgMHhiOSwgMHgyYywgMHgyYSB9LAorKwkJLnB1YmxpYyA9IHsgMHhkZSwgMHg5ZSwgMHhkYiwgMHg3ZCwgMHg3YiwgMHg3ZCwgMHhjMSwgMHhiNCwKKysJCQkgICAgMHhkMywgMHg1YiwgMHg2MSwgMHhjMiwgMHhlYywgMHhlNCwgMHgzNSwgMHgzNywKKysJCQkgICAgMHgzZiwgMHg4MywgMHg0MywgMHhjOCwgMHg1YiwgMHg3OCwgMHg2NywgMHg0ZCwKKysJCQkgICAgMHhhZCwgMHhmYywgMHg3ZSwgMHgxNCwgMHg2ZiwgMHg4OCwgMHgyYiwgMHg0ZiB9LAorKwkJLnJlc3VsdCA9IHsgMHg0YSwgMHg1ZCwgMHg5ZCwgMHg1YiwgMHhhNCwgMHhjZSwgMHgyZCwgMHhlMSwKKysJCQkgICAgMHg3MiwgMHg4ZSwgMHgzYiwgMHhmNCwgMHg4MCwgMHgzNSwgMHgwZiwgMHgyNSwKKysJCQkgICAgMHhlMCwgMHg3ZSwgMHgyMSwgMHhjOSwgMHg0NywgMHhkMSwgMHg5ZSwgMHgzMywKKysJCQkgICAgMHg3NiwgMHhmMCwgMHg5YiwgMHgzYywgMHgxZSwgMHgxNiwgMHgxNywgMHg0MiB9LAorKwkJLnZhbGlkID0gdHJ1ZQorKwl9LAorKwl7CisrCQkucHJpdmF0ZSA9IHsgMHg1ZCwgMHhhYiwgMHgwOCwgMHg3ZSwgMHg2MiwgMHg0YSwgMHg4YSwgMHg0YiwKKysJCQkgICAgIDB4NzksIDB4ZTEsIDB4N2YsIDB4OGIsIDB4ODMsIDB4ODAsIDB4MGUsIDB4ZTYsCisrCQkJICAgICAweDZmLCAweDNiLCAweGIxLCAweDI5LCAweDI2LCAweDE4LCAweGI2LCAweGZkLAorKwkJCSAgICAgMHgxYywgMHgyZiwgMHg4YiwgMHgyNywgMHhmZiwgMHg4OCwgMHhlMCwgMHhlYiB9LAorKwkJLnB1YmxpYyA9IHsgMHg4NSwgMHgyMCwgMHhmMCwgMHgwOSwgMHg4OSwgMHgzMCwgMHhhNywgMHg1NCwKKysJCQkgICAgMHg3NCwgMHg4YiwgMHg3ZCwgMHhkYywgMHhiNCwgMHgzZSwgMHhmNywgMHg1YSwKKysJCQkgICAgMHgwZCwgMHhiZiwgMHgzYSwgMHgwZCwgMHgyNiwgMHgzOCwgMHgxYSwgMHhmNCwKKysJCQkgICAgMHhlYiwgMHhhNCwgMHhhOSwgMHg4ZSwgMHhhYSwgMHg5YiwgMHg0ZSwgMHg2YSB9LAorKwkJLnJlc3VsdCA9IHsgMHg0YSwgMHg1ZCwgMHg5ZCwgMHg1YiwgMHhhNCwgMHhjZSwgMHgyZCwgMHhlMSwKKysJCQkgICAgMHg3MiwgMHg4ZSwgMHgzYiwgMHhmNCwgMHg4MCwgMHgzNSwgMHgwZiwgMHgyNSwKKysJCQkgICAgMHhlMCwgMHg3ZSwgMHgyMSwgMHhjOSwgMHg0NywgMHhkMSwgMHg5ZSwgMHgzMywKKysJCQkgICAgMHg3NiwgMHhmMCwgMHg5YiwgMHgzYywgMHgxZSwgMHgxNiwgMHgxNywgMHg0MiB9LAorKwkJLnZhbGlkID0gdHJ1ZQorKwl9LAorKwl7CisrCQkucHJpdmF0ZSA9IHsgMSB9LAorKwkJLnB1YmxpYyA9IHsgMHgyNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorKwkJLnJlc3VsdCA9IHsgMHgzYywgMHg3NywgMHg3NywgMHhjYSwgMHhmOSwgMHg5NywgMHhiMiwgMHg2NCwKKysJCQkgICAgMHg0MSwgMHg2MCwgMHg3NywgMHg2NiwgMHg1YiwgMHg0ZSwgMHgyMiwgMHg5ZCwKKysJCQkgICAgMHgwYiwgMHg5NSwgMHg0OCwgMHhkYywgMHgwYywgMHhkOCwgMHgxOSwgMHg5OCwKKysJCQkgICAgMHhkZCwgMHhjZCwgMHhjNSwgMHhjOCwgMHg1MywgMHgzYywgMHg3OSwgMHg3ZiB9LAorKwkJLnZhbGlkID0gdHJ1ZQorKwl9LAorKwl7CisrCQkucHJpdmF0ZSA9IHsgMSB9LAorKwkJLnB1YmxpYyA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9LAorKwkJLnJlc3VsdCA9IHsgMHhiMywgMHgyZCwgMHgxMywgMHg2MiwgMHhjMiwgMHg0OCwgMHhkNiwgMHgyZiwKKysJCQkgICAgMHhlNiwgMHgyNiwgMHgxOSwgMHhjZiwgMHhmMCwgMHg0ZCwgMHhkNCwgMHgzZCwKKysJCQkgICAgMHhiNywgMHgzZiwgMHhmYywgMHgxYiwgMHg2MywgMHgwOCwgMHhlZCwgMHhlMywKKysJCQkgICAgMHgwYiwgMHg3OCwgMHhkOCwgMHg3MywgMHg4MCwgMHhmMSwgMHhlOCwgMHgzNCB9LAorKwkJLnZhbGlkID0gdHJ1ZQorKwl9LAorKwl7CisrCQkucHJpdmF0ZSA9IHsgMHhhNSwgMHg0NiwgMHhlMywgMHg2YiwgMHhmMCwgMHg1MiwgMHg3YywgMHg5ZCwKKysJCQkgICAgIDB4M2IsIDB4MTYsIDB4MTUsIDB4NGIsIDB4ODIsIDB4NDYsIDB4NWUsIDB4ZGQsCisrCQkJICAgICAweDYyLCAweDE0LCAweDRjLCAweDBhLCAweGMxLCAweGZjLCAweDVhLCAweDE4LAorKwkJCSAgICAgMHg1MCwgMHg2YSwgMHgyMiwgMHg0NCwgMHhiYSwgMHg0NCwgMHg5YSwgMHhjNCB9LAorKwkJLnB1YmxpYyA9IHsgMHhlNiwgMHhkYiwgMHg2OCwgMHg2NywgMHg1OCwgMHgzMCwgMHgzMCwgMHhkYiwKKysJCQkgICAgMHgzNSwgMHg5NCwgMHhjMSwgMHhhNCwgMHgyNCwgMHhiMSwgMHg1ZiwgMHg3YywKKysJCQkgICAgMHg3MiwgMHg2NiwgMHgyNCwgMHhlYywgMHgyNiwgMHhiMywgMHgzNSwgMHgzYiwKKysJCQkgICAgMHgxMCwgMHhhOSwgMHgwMywgMHhhNiwgMHhkMCwgMHhhYiwgMHgxYywgMHg0YyB9LAorKwkJLnJlc3VsdCA9IHsgMHhjMywgMHhkYSwgMHg1NSwgMHgzNywgMHg5ZCwgMHhlOSwgMHhjNiwgMHg5MCwKKysJCQkgICAgMHg4ZSwgMHg5NCwgMHhlYSwgMHg0ZCwgMHhmMiwgMHg4ZCwgMHgwOCwgMHg0ZiwKKysJCQkgICAgMHgzMiwgMHhlYywgMHhjZiwgMHgwMywgMHg0OSwgMHgxYywgMHg3MSwgMHhmNywKKysJCQkgICAgMHg1NCwgMHhiNCwgMHgwNywgMHg1NSwgMHg3NywgMHhhMiwgMHg4NSwgMHg1MiB9LAorKwkJLnZhbGlkID0gdHJ1ZQorKwl9LAorKwl7CisrCQkucHJpdmF0ZSA9IHsgMSwgMiwgMywgNCB9LAorKwkJLnB1YmxpYyA9IHsgMCB9LAorKwkJLnJlc3VsdCA9IHsgMCB9LAorKwkJLnZhbGlkID0gZmFsc2UKKysJfSwKKysJeworKwkJLnByaXZhdGUgPSB7IDIsIDQsIDYsIDggfSwKKysJCS5wdWJsaWMgPSB7IDB4ZTAsIDB4ZWIsIDB4N2EsIDB4N2MsIDB4M2IsIDB4NDEsIDB4YjgsIDB4YWUsCisrCQkJICAgIDB4MTYsIDB4NTYsIDB4ZTMsIDB4ZmEsIDB4ZjEsIDB4OWYsIDB4YzQsIDB4NmEsCisrCQkJICAgIDB4ZGEsIDB4MDksIDB4OGQsIDB4ZWIsIDB4OWMsIDB4MzIsIDB4YjEsIDB4ZmQsCisrCQkJICAgIDB4ODYsIDB4NjIsIDB4MDUsIDB4MTYsIDB4NWYsIDB4NDksIDB4YjggfSwKKysJCS5yZXN1bHQgPSB7IDAgfSwKKysJCS52YWxpZCA9IGZhbHNlCisrCX0sCisrCXsKKysJCS5wcml2YXRlID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDBhLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmIH0sCisrCQkucHVibGljID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDBhLCAweDAwLCAweGZiLCAweDlmIH0sCisrCQkucmVzdWx0ID0geyAweDc3LCAweDUyLCAweGI2LCAweDE4LCAweGMxLCAweDJkLCAweDQ4LCAweGQyLAorKwkJCSAgICAweGM2LCAweDkzLCAweDQ2LCAweDgzLCAweDgxLCAweDdjLCAweGM2LCAweDU3LAorKwkJCSAgICAweGYzLCAweDMxLCAweDAzLCAweDE5LCAweDQ5LCAweDQ4LCAweDIwLCAweDA1LAorKwkJCSAgICAweDQyLCAweDJiLCAweDRlLCAweGFlLCAweDhkLCAweDFkLCAweDQzLCAweDIzIH0sCisrCQkudmFsaWQgPSB0cnVlCisrCX0sCisrCXsKKysJCS5wcml2YXRlID0geyAweDhlLCAweDBhLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJCSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkJICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisrCQkucHVibGljID0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDhlLCAweDA2IH0sCisrCQkucmVzdWx0ID0geyAweDVhLCAweGRmLCAweGFhLCAweDI1LCAweDg2LCAweDhlLCAweDMyLCAweDNkLAorKwkJCSAgICAweGFlLCAweDQ5LCAweDYyLCAweGMxLCAweDAxLCAweDVjLCAweGIzLCAweDEyLAorKwkJCSAgICAweGUxLCAweGM1LCAweGM3LCAweDllLCAweDk1LCAweDNmLCAweDAzLCAweDk5LAorKwkJCSAgICAweGIwLCAweGJhLCAweDE2LCAweDIyLCAweGYzLCAweGI2LCAweGY3LCAweDBjIH0sCisrCQkudmFsaWQgPSB0cnVlCisrCX0sCisrCS8qIHd5Y2hlcHJvb2YgLSBub3JtYWwgY2FzZSAqLworKwl7CisrCQkucHJpdmF0ZSA9IHsgMHg0OCwgMHg1MiwgMHg4MywgMHg0ZCwgMHg5ZCwgMHg2YiwgMHg3NywgMHhkYSwKKysJCQkgICAgIDB4ZGUsIDB4YWIsIDB4YWEsIDB4ZjIsIDB4ZTEsIDB4MWQsIDB4Y2EsIDB4NjYsCisrCQkJICAgICAweGQxLCAweDlmLCAweGU3LCAweDQ5LCAweDkzLCAweGE3LCAweGJlLCAweGMzLAorKwkJCSAgICAgMHg2YywgMHg2ZSwgMHgxNiwgMHhhMCwgMHg5OCwgMHgzZiwgMHhlYSwgMHhiYSB9LAorKwkJLnB1YmxpYyA9IHsgMHg5YywgMHg2NCwgMHg3ZCwgMHg5YSwgMHhlNSwgMHg4OSwgMHhiOSwgMHhmNSwKKysJCQkgICAgMHg4ZiwgMHhkYywgMHgzYywgMHhhNCwgMHg5NCwgMHg3ZSwgMHhmYiwgMHhjOSwKKysJCQkgICAgMHgxNSwgMHhjNCwgMHhiMiwgMHhlMCwgMHg4ZSwgMHg3NCwgMHg0YSwgMHgwZSwKKysJCQkgICAgMHhkZiwgMHg0NiwgMHg5ZCwgMHhhYywgMHg1OSwgMHhjOCwgMHhmOCwgMHg1YSB9LAorKwkJLnJlc3VsdCA9IHsgMHg4NywgMHhiNywgMHhmMiwgMHgxMiwgMHhiNiwgMHgyNywgMHhmNywgMHhhNSwKKysJCQkgICAgMHg0YywgMHhhNSwgMHhlMCwgMHhiYywgMHhkYSwgMHhkZCwgMHhkNSwgMHgzOCwKKysJCQkgICAgMHg5ZCwgMHg5ZCwgMHhlNiwgMHgxNSwgMHg2YywgMHhkYiwgMHhjZiwgMHg4ZSwKKysJCQkgICAgMHhiZSwgMHgxNCwgMHhmZiwgMHhiYywgMHhmYiwgMHg0MywgMHg2NSwgMHg1MSB9LAorKwkJLnZhbGlkID0gdHJ1ZQorKwl9LAorKwkvKiB3eWNoZXByb29mIC0gcHVibGljIGtleSBvbiB0d2lzdCAqLworKwl7CisrCQkucHJpdmF0ZSA9IHsgMHg1OCwgMHg4YywgMHgwNiwgMHgxYSwgMHg1MCwgMHg4MCwgMHg0YSwgMHhjNCwKKysJCQkgICAgIDB4ODgsIDB4YWQsIDB4NzcsIDB4NGEsIDB4YzcsIDB4MTYsIDB4YzMsIDB4ZjUsCisrCQkJICAgICAweGJhLCAweDcxLCAweDRiLCAweDI3LCAweDEyLCAweGUwLCAweDQ4LCAweDQ5LAorKwkJCSAgICAgMHgxMywgMHg3OSwgMHhhNSwgMHgwMCwgMHgyMSwgMHgxOSwgMHg5OCwgMHhhOCB9LAorKwkJLnB1YmxpYyA9IHsgMHg2MywgMHhhYSwgMHg0MCwgMHhjNiwgMHhlMywgMHg4MywgMHg0NiwgMHhjNSwKKysJCQkgICAgMHhjYSwgMHhmMiwgMHgzYSwgMHg2ZCwgMHhmMCwgMHhhNSwgMHhlNiwgMHhjOCwKKysJCQkgICAgMHgwOCwgMHg4OSwgMHhhMCwgMHg4NiwgMHg0NywgMHhlNSwgMHg1MSwgMHhiMywKKysJCQkgICAgMHg1NiwgMHgzNCwgMHg0OSwgMHhiZSwgMHhmYywgMHhmYywgMHg5NywgMHgzMyB9LAorKwkJLnJlc3VsdCA9IHsgMHhiMSwgMHhhNywgMHgwNywgMHg1MSwgMHg5NCwgMHg5NSwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhiMiwgMHg5OCwgMHhmZiwgMHg5NCwgMHgxNywgMHgxNiwgMHhiMCwgMHg2ZCwKKysJCQkgICAgMHhmYSwgMHhiOCwgMHg3YywgMHhmOCwgMHhkOSwgMHgxMSwgMHgyMywgMHhmZSwKKysJCQkgICAgMHgyYiwgMHhlOSwgMHhhMiwgMHgzMywgMHhkZCwgMHhhMiwgMHgyMiwgMHgxMiB9LAorKwkJLnZhbGlkID0gdHJ1ZQorKwl9LAorKwkvKiB3eWNoZXByb29mIC0gcHVibGljIGtleSBvbiB0d2lzdCAqLworKwl7CisrCQkucHJpdmF0ZSA9IHsgMHhiMCwgMHg1YiwgMHhmZCwgMHgzMiwgMHhlNSwgMHg1MywgMHgyNSwgMHhkOSwKKysJCQkgICAgIDB4ZmQsIDB4NjQsIDB4OGMsIDB4YjMsIDB4MDIsIDB4ODQsIDB4ODAsIDB4MzksCisrCQkJICAgICAweDAwLCAweDBiLCAweDM5LCAweDBlLCAweDQ0LCAweGQ1LCAweDIxLCAweGU1LAorKwkJCSAgICAgMHg4YSwgMHhhYiwgMHgzYiwgMHgyOSwgMHhhNiwgMHg5NiwgMHgwYiwgMHhhOCB9LAorKwkJLnB1YmxpYyA9IHsgMHgwZiwgMHg4MywgMHhjMywgMHg2ZiwgMHhkZSwgMHhkOSwgMHhkMywgMHgyZiwKKysJCQkgICAgMHhhZCwgMHhmNCwgMHhlZiwgMHhhMywgMHhhZSwgMHg5MywgMHhhOSwgMHgwYiwKKysJCQkgICAgMHhiNSwgMHhjZiwgMHhhNiwgMHg2OCwgMHg5MywgMHhiYywgMHg0MSwgMHgyYywKKysJCQkgICAgMHg0MywgMHhmYSwgMHg3MiwgMHg4NywgMHhkYiwgMHhiOSwgMHg5NywgMHg3OSB9LAorKwkJLnJlc3VsdCA9IHsgMHg2NywgMHhkZCwgMHg0YSwgMHg2ZSwgMHgxNiwgMHg1NSwgMHgzMywgMHg1MywKKysJCQkgICAgMHg0YywgMHgwZSwgMHgzZiwgMHgxNywgMHgyZSwgMHg0YSwgMHhiOCwgMHg1NywKKysJCQkgICAgMHg2YiwgMHhjYSwgMHg5MiwgMHgzYSwgMHg1ZiwgMHgwNywgMHhiMiwgMHhjMCwKKysJCQkgICAgMHg2OSwgMHhiNCwgMHhjMywgMHgxMCwgMHhmZiwgMHgyZSwgMHg5MywgMHg1YiB9LAorKwkJLnZhbGlkID0gdHJ1ZQorKwl9LAorKwkvKiB3eWNoZXByb29mIC0gcHVibGljIGtleSBvbiB0d2lzdCAqLworKwl7CisrCQkucHJpdmF0ZSA9IHsgMHg3MCwgMHhlMywgMHg0YiwgMHhjYiwgMHhlMSwgMHhmNCwgMHg3ZiwgMHhiYywKKysJCQkgICAgIDB4MGYsIDB4ZGQsIDB4ZmQsIDB4N2MsIDB4MWUsIDB4MWEsIDB4YTUsIDB4M2QsCisrCQkJICAgICAweDU3LCAweGJmLCAweGUwLCAweGY2LCAweDZkLCAweDI0LCAweDMwLCAweDY3LAorKwkJCSAgICAgMHhiNCwgMHgyNCwgMHhiYiwgMHg2MiwgMHgxMCwgMHhiZSwgMHhkMSwgMHg5YyB9LAorKwkJLnB1YmxpYyA9IHsgMHgwYiwgMHg4MiwgMHgxMSwgMHhhMiwgMHhiNiwgMHgwNCwgMHg5MCwgMHg5NywKKysJCQkgICAgMHhmNiwgMHg4NywgMHgxYywgMHg2YywgMHgwNSwgMHgyZCwgMHgzYywgMHg1ZiwKKysJCQkgICAgMHhjMSwgMHhiYSwgMHgxNywgMHhkYSwgMHg5ZSwgMHgzMiwgMHhhZSwgMHg0NSwKKysJCQkgICAgMHg4NCwgMHgwMywgMHhiMCwgMHg1YiwgMHhiMiwgMHg4MywgMHgwOSwgMHgyYSB9LAorKwkJLnJlc3VsdCA9IHsgMHg0YSwgMHgwNiwgMHgzOCwgMHhjZiwgMHhhYSwgMHg5ZSwgMHhmMSwgMHg5MywKKysJCQkgICAgMHgzYiwgMHg0NywgMHhmOCwgMHg5MywgMHg5MiwgMHg5NiwgMHhhNiwgMHhiMiwKKysJCQkgICAgMHg1YiwgMHhlNSwgMHg0MSwgMHhlZiwgMHg3ZiwgMHg3MCwgMHhlOCwgMHg0NCwKKysJCQkgICAgMHhjMCwgMHhiYywgMHhjMCwgMHgwYiwgMHgxMywgMHg0ZCwgMHhlNiwgMHg0YSB9LAorKwkJLnZhbGlkID0gdHJ1ZQorKwl9LAorKwkvKiB3eWNoZXByb29mIC0gcHVibGljIGtleSBvbiB0d2lzdCAqLworKwl7CisrCQkucHJpdmF0ZSA9IHsgMHg2OCwgMHhjMSwgMHhmMywgMHhhNiwgMHg1MywgMHhhNCwgMHhjZCwgMHhiMSwKKysJCQkgICAgIDB4ZDMsIDB4N2IsIDB4YmEsIDB4OTQsIDB4NzMsIDB4OGYsIDB4OGIsIDB4OTUsCisrCQkJICAgICAweDdhLCAweDU3LCAweGJlLCAweGIyLCAweDRkLCAweDY0LCAweDZlLCAweDk5LAorKwkJCSAgICAgMHg0ZCwgMHhjMiwgMHg5YSwgMHgyNywgMHg2YSwgMHhhZCwgMHg0NSwgMHg4ZCB9LAorKwkJLnB1YmxpYyA9IHsgMHgzNCwgMHgzYSwgMHhjMiwgMHgwYSwgMHgzYiwgMHg5YywgMHg2YSwgMHgyNywKKysJCQkgICAgMHhiMSwgMHgwMCwgMHg4MSwgMHg3NiwgMHg1MCwgMHg5YSwgMHhkMywgMHgwNywKKysJCQkgICAgMHgzNSwgMHg4NSwgMHg2ZSwgMHhjMSwgMHhjOCwgMHhkOCwgMHhmYywgMHhhZSwKKysJCQkgICAgMHgxMywgMHg5MSwgMHgyZCwgMHgwOCwgMHhkMSwgMHg1MiwgMHhmNCwgMHg2YyB9LAorKwkJLnJlc3VsdCA9IHsgMHgzOSwgMHg5NCwgMHg5MSwgMHhmYywgMHhlOCwgMHhkZiwgMHhhYiwgMHg3MywKKysJCQkgICAgMHhiNCwgMHhmOSwgMHhmNiwgMHgxMSwgMHhkZSwgMHg4ZSwgMHhhMCwgMHhiMiwKKysJCQkgICAgMHg3YiwgMHgyOCwgMHhmOCwgMHg1OSwgMHg5NCwgMHgyNSwgMHgwYiwgMHgwZiwKKysJCQkgICAgMHg0NywgMHg1ZCwgMHg1OCwgMHg1ZCwgMHgwNCwgMHgyYSwgMHhjMiwgMHgwNyB9LAorKwkJLnZhbGlkID0gdHJ1ZQorKwl9LAorKwkvKiB3eWNoZXByb29mIC0gcHVibGljIGtleSBvbiB0d2lzdCAqLworKwl7CisrCQkucHJpdmF0ZSA9IHsgMHhkOCwgMHg3NywgMHhiMiwgMHg2ZCwgMHgwNiwgMHhkZiwgMHhmOSwgMHhkOSwKKysJCQkgICAgIDB4ZjcsIDB4ZmQsIDB4NGMsIDB4NWIsIDB4MzcsIDB4NjksIDB4ZjgsIDB4Y2QsCisrCQkJICAgICAweGQ1LCAweGIzLCAweDA1LCAweDE2LCAweGE1LCAweGFiLCAweDgwLCAweDZiLAorKwkJCSAgICAgMHhlMywgMHgyNCwgMHhmZiwgMHgzZSwgMHhiNiwgMHg5ZSwgMHhhMCwgMHhiMiB9LAorKwkJLnB1YmxpYyA9IHsgMHhmYSwgMHg2OSwgMHg1ZiwgMHhjNywgMHhiZSwgMHg4ZCwgMHgxYiwgMHhlNSwKKysJCQkgICAgMHhiZiwgMHg3MCwgMHg0OCwgMHg5OCwgMHhmMywgMHg4OCwgMHhjNCwgMHg1MiwKKysJCQkgICAgMHhiYSwgMHhmZCwgMHhkMywgMHhiOCwgMHhlYSwgMHhlOCwgMHgwNSwgMHhmOCwKKysJCQkgICAgMHg2OCwgMHgxYSwgMHg4ZCwgMHgxNSwgMHhjMiwgMHhkNCwgMHhlMSwgMHg0MiB9LAorKwkJLnJlc3VsdCA9IHsgMHgyYywgMHg0ZiwgMHhlMSwgMHgxZCwgMHg0OSwgMHgwYSwgMHg1MywgMHg4NiwKKysJCQkgICAgMHgxNywgMHg3NiwgMHhiMSwgMHgzYiwgMHg0MywgMHg1NCwgMHhhYiwgMHhkNCwKKysJCQkgICAgMHhjZiwgMHg1YSwgMHg5NywgMHg2OSwgMHg5ZCwgMHhiNiwgMHhlNiwgMHhjNiwKKysJCQkgICAgMHg4YywgMHgxNiwgMHgyNiwgMHhkMCwgMHg3NiwgMHg2MiwgMHhmNywgMHg1OCB9LAorKwkJLnZhbGlkID0gdHJ1ZQorKwl9LAorKwkvKiB3eWNoZXByb29mIC0gcHVibGljIGtleSA9IDAgKi8KKysJeworKwkJLnByaXZhdGUgPSB7IDB4MjAsIDB4NzQsIDB4OTQsIDB4MDMsIDB4OGYsIDB4MmIsIDB4YjgsIDB4MTEsCisrCQkJICAgICAweGQ0LCAweDc4LCAweDA1LCAweGJjLCAweGRmLCAweDA0LCAweGEyLCAweGFjLAorKwkJCSAgICAgMHg1OCwgMHg1YSwgMHhkYSwgMHg3ZiwgMHgyZiwgMHgyMywgMHgzOCwgMHg5YiwKKysJCQkgICAgIDB4ZmQsIDB4NDYsIDB4NTgsIDB4ZjksIDB4ZGQsIDB4ZDQsIDB4ZGUsIDB4YmMgfSwKKysJCS5wdWJsaWMgPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKysJCS5yZXN1bHQgPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKysJCS52YWxpZCA9IGZhbHNlCisrCX0sCisrCS8qIHd5Y2hlcHJvb2YgLSBwdWJsaWMga2V5ID0gMSAqLworKwl7CisrCQkucHJpdmF0ZSA9IHsgMHgyMCwgMHgyZSwgMHg4OSwgMHg3MiwgMHhiNiwgMHgxYywgMHg3ZSwgMHg2MSwKKysJCQkgICAgIDB4OTMsIDB4MGUsIDB4YjksIDB4NDUsIDB4MGIsIDB4NTAsIDB4NzAsIDB4ZWEsCisrCQkJICAgICAweGUxLCAweGM2LCAweDcwLCAweDQ3LCAweDU2LCAweDg1LCAweDU0LCAweDFmLAorKwkJCSAgICAgMHgwNCwgMHg3NiwgMHgyMSwgMHg3ZSwgMHg0OCwgMHgxOCwgMHhjZiwgMHhhYiB9LAorKwkJLnB1YmxpYyA9IHsgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorKwkJLnJlc3VsdCA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorKwkJLnZhbGlkID0gZmFsc2UKKysJfSwKKysJLyogd3ljaGVwcm9vZiAtIGVkZ2UgY2FzZSBvbiB0d2lzdCAqLworKwl7CisrCQkucHJpdmF0ZSA9IHsgMHgzOCwgMHhkZCwgMHhlOSwgMHhmMywgMHhlNywgMHhiNywgMHg5OSwgMHgwNCwKKysJCQkgICAgIDB4NWYsIDB4OWEsIDB4YzMsIDB4NzksIDB4M2QsIDB4NGEsIDB4OTIsIDB4NzcsCisrCQkJICAgICAweGRhLCAweGRlLCAweGFkLCAweGM0LCAweDFiLCAweGVjLCAweDAyLCAweDkwLAorKwkJCSAgICAgMHhmOCwgMHgxZiwgMHg3NCwgMHg0ZiwgMHg3MywgMHg3NywgMHg1ZiwgMHg4NCB9LAorKwkJLnB1YmxpYyA9IHsgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorKwkJLnJlc3VsdCA9IHsgMHg5YSwgMHgyYywgMHhmZSwgMHg4NCwgMHhmZiwgMHg5YywgMHg0YSwgMHg5NywKKysJCQkgICAgMHgzOSwgMHg2MiwgMHg1YywgMHhhZSwgMHg0YSwgMHgzYiwgMHg4MiwgMHhhOSwKKysJCQkgICAgMHgwNiwgMHg4NywgMHg3YSwgMHg0NCwgMHgxOSwgMHg0NiwgMHhmOCwgMHhkNywKKysJCQkgICAgMHhiMywgMHhkNywgMHg5NSwgMHhmZSwgMHg4ZiwgMHg1ZCwgMHgxNiwgMHgzOSB9LAorKwkJLnZhbGlkID0gdHJ1ZQorKwl9LAorKwkvKiB3eWNoZXByb29mIC0gZWRnZSBjYXNlIG9uIHR3aXN0ICovCisrCXsKKysJCS5wcml2YXRlID0geyAweDk4LCAweDU3LCAweGE5LCAweDE0LCAweGUzLCAweGMyLCAweDkwLCAweDM2LAorKwkJCSAgICAgMHhmZCwgMHg5YSwgMHg0NCwgMHgyYiwgMHhhNSwgMHgyNiwgMHhiNSwgMHhjZCwKKysJCQkgICAgIDB4Y2QsIDB4ZjIsIDB4ODIsIDB4MTYsIDB4MTUsIDB4M2UsIDB4NjMsIDB4NmMsCisrCQkJICAgICAweDEwLCAweDY3LCAweDdhLCAweGNhLCAweGI2LCAweGJkLCAweDZhLCAweGE1IH0sCisrCQkucHVibGljID0geyAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisrCQkucmVzdWx0ID0geyAweDRkLCAweGE0LCAweGUwLCAweGFhLCAweDA3LCAweDJjLCAweDIzLCAweDJlLAorKwkJCSAgICAweGUyLCAweGYwLCAweGZhLCAweDRlLCAweDUxLCAweDlhLCAweGU1LCAweDBiLAorKwkJCSAgICAweDUyLCAweGMxLCAweGVkLCAweGQwLCAweDhhLCAweDUzLCAweDRkLCAweDRlLAorKwkJCSAgICAweGYzLCAweDQ2LCAweGMyLCAweGUxLCAweDA2LCAweGQyLCAweDFkLCAweDYwIH0sCisrCQkudmFsaWQgPSB0cnVlCisrCX0sCisrCS8qIHd5Y2hlcHJvb2YgLSBlZGdlIGNhc2Ugb24gdHdpc3QgKi8KKysJeworKwkJLnByaXZhdGUgPSB7IDB4NDgsIDB4ZTIsIDB4MTMsIDB4MGQsIDB4NzIsIDB4MzMsIDB4MDUsIDB4ZWQsCisrCQkJICAgICAweDA1LCAweGU2LCAweGU1LCAweDg5LCAweDRkLCAweDM5LCAweDhhLCAweDVlLAorKwkJCSAgICAgMHgzMywgMHgzNiwgMHg3YSwgMHg4YywgMHg2YSwgMHhhYywgMHg4ZiwgMHhjZCwKKysJCQkgICAgIDB4ZjAsIDB4YTgsIDB4OGUsIDB4NGIsIDB4NDIsIDB4ODIsIDB4MGQsIDB4YjcgfSwKKysJCS5wdWJsaWMgPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDMsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZmYsCisrCQkJICAgIDB4ZmYsIDB4MWYsIDB4MDAsIDB4MDAsIDB4YzAsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4MDcsIDB4MDAsCisrCQkJICAgIDB4MDAsIDB4ZjAsIDB4ZmYsIDB4ZmYsIDB4M2YsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKysJCS5yZXN1bHQgPSB7IDB4OWUsIDB4ZDEsIDB4MGMsIDB4NTMsIDB4NzQsIDB4N2YsIDB4NjQsIDB4N2YsCisrCQkJICAgIDB4ODIsIDB4ZjQsIDB4NTEsIDB4MjUsIDB4ZDMsIDB4ZGUsIDB4MTUsIDB4YTEsCisrCQkJICAgIDB4ZTYsIDB4YjgsIDB4MjQsIDB4NDksIDB4NmEsIDB4YjQsIDB4MDQsIDB4MTAsCisrCQkJICAgIDB4ZmYsIDB4Y2MsIDB4M2MsIDB4ZmUsIDB4OTUsIDB4NzYsIDB4MGYsIDB4M2IgfSwKKysJCS52YWxpZCA9IHRydWUKKysJfSwKKysJLyogd3ljaGVwcm9vZiAtIGVkZ2UgY2FzZSBvbiB0d2lzdCAqLworKwl7CisrCQkucHJpdmF0ZSA9IHsgMHgyOCwgMHhmNCwgMHgxMCwgMHgxMSwgMHg2OSwgMHgxOCwgMHg1MSwgMHhiMywKKysJCQkgICAgIDB4YTYsIDB4MmIsIDB4NjQsIDB4MTUsIDB4NTMsIDB4YjMsIDB4MGQsIDB4MGQsCisrCQkJICAgICAweGZkLCAweGRjLCAweGI4LCAweGZmLCAweGZjLCAweGY1LCAweDM3LCAweDAwLAorKwkJCSAgICAgMHhhNywgMHhiZSwgMHgyZiwgMHg2YSwgMHg4NywgMHgyZSwgMHg5ZiwgMHhiMCB9LAorKwkJLnB1YmxpYyA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHhmZiwgMHhmZiwgMHgwNywgMHgwMCwKKysJCQkgICAgMHgwMCwgMHhlMCwgMHhmZiwgMHhmZiwgMHgzZiwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmOCwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHhjMCwgMHhmZiwgMHhmZiwgMHg3ZiB9LAorKwkJLnJlc3VsdCA9IHsgMHhjZiwgMHg3MiwgMHhiNCwgMHhhYSwgMHg2YSwgMHhhMSwgMHhjOSwgMHhmOCwKKysJCQkgICAgMHg5NCwgMHhmNCwgMHgxNiwgMHg1YiwgMHg4NiwgMHgxMCwgMHg5YSwgMHhhNCwKKysJCQkgICAgMHg2OCwgMHg1MSwgMHg3NiwgMHg0OCwgMHhlMSwgMHhmMCwgMHhjYywgMHg3MCwKKysJCQkgICAgMHhlMSwgMHhhYiwgMHgwOCwgMHg0NiwgMHgwMSwgMHg3NiwgMHg1MCwgMHg2YiB9LAorKwkJLnZhbGlkID0gdHJ1ZQorKwl9LAorKwkvKiB3eWNoZXByb29mIC0gZWRnZSBjYXNlIG9uIHR3aXN0ICovCisrCXsKKysJCS5wcml2YXRlID0geyAweDE4LCAweGE5LCAweDNiLCAweDY0LCAweDk5LCAweGI5LCAweGY2LCAweGIzLAorKwkJCSAgICAgMHgyMiwgMHg1YywgMHhhMCwgMHgyZiwgMHhlZiwgMHg0MSwgMHgwZSwgMHgwYSwKKysJCQkgICAgIDB4ZGUsIDB4YzIsIDB4MzUsIDB4MzIsIDB4MzIsIDB4MWQsIDB4MmQsIDB4OGUsCisrCQkJICAgICAweGYxLCAweGE2LCAweGQ2LCAweDAyLCAweGE4LCAweGM2LCAweDViLCAweDgzIH0sCisrCQkucHVibGljID0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweDdmIH0sCisrCQkucmVzdWx0ID0geyAweDVkLCAweDUwLCAweGI2LCAweDI4LCAweDM2LCAweGJiLCAweDY5LCAweDU3LAorKwkJCSAgICAweDk0LCAweDEwLCAweDM4LCAweDZjLCAweGY3LCAweGJiLCAweDgxLCAweDFjLAorKwkJCSAgICAweDE0LCAweGJmLCAweDg1LCAweGIxLCAweGM3LCAweGIxLCAweDdlLCAweDU5LAorKwkJCSAgICAweDI0LCAweGM3LCAweGZmLCAweGVhLCAweDkxLCAweGVmLCAweDllLCAweDEyIH0sCisrCQkudmFsaWQgPSB0cnVlCisrCX0sCisrCS8qIHd5Y2hlcHJvb2YgLSBlZGdlIGNhc2Ugb24gdHdpc3QgKi8KKysJeworKwkJLnByaXZhdGUgPSB7IDB4YzAsIDB4MWQsIDB4MTMsIDB4MDUsIDB4YTEsIDB4MzMsIDB4OGEsIDB4MWYsCisrCQkJICAgICAweGNhLCAweGMyLCAweGJhLCAweDdlLCAweDJlLCAweDAzLCAweDJiLCAweDQyLAorKwkJCSAgICAgMHg3ZSwgMHgwYiwgMHgwNCwgMHg5MCwgMHgzMSwgMHg2NSwgMHhhYywgMHhhOSwKKysJCQkgICAgIDB4NTcsIDB4ZDgsIDB4ZDAsIDB4NTUsIDB4M2QsIDB4ODcsIDB4MTcsIDB4YjAgfSwKKysJCS5wdWJsaWMgPSB7IDB4ZWEsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YgfSwKKysJCS5yZXN1bHQgPSB7IDB4MTksIDB4MjMsIDB4MGUsIDB4YjEsIDB4NDgsIDB4ZDUsIDB4ZDYsIDB4N2MsCisrCQkJICAgIDB4M2MsIDB4MjIsIDB4YWIsIDB4MWQsIDB4YWUsIDB4ZmYsIDB4ODAsIDB4YTUsCisrCQkJICAgIDB4N2UsIDB4YWUsIDB4NDIsIDB4NjUsIDB4Y2UsIDB4MjgsIDB4NzIsIDB4NjUsCisrCQkJICAgIDB4N2IsIDB4MmMsIDB4ODAsIDB4OTksIDB4ZmMsIDB4NjksIDB4OGUsIDB4NTAgfSwKKysJCS52YWxpZCA9IHRydWUKKysJfSwKKysJLyogd3ljaGVwcm9vZiAtIGVkZ2UgY2FzZSBmb3IgcHVibGljIGtleSAqLworKwl7CisrCQkucHJpdmF0ZSA9IHsgMHgzOCwgMHg2ZiwgMHg3ZiwgMHgxNiwgMHhjNSwgMHgwNywgMHgzMSwgMHhkNiwKKysJCQkgICAgIDB4NGYsIDB4ODIsIDB4ZTYsIDB4YTEsIDB4NzAsIDB4YjEsIDB4NDIsIDB4YTQsCisrCQkJICAgICAweGUzLCAweDRmLCAweDMxLCAweGZkLCAweDc3LCAweDY4LCAweGZjLCAweGI4LAorKwkJCSAgICAgMHg5MCwgMHgyOSwgMHgyNSwgMHhlNywgMHhkMSwgMHhlMiwgMHgxYSwgMHhiZSB9LAorKwkJLnB1YmxpYyA9IHsgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorKwkJLnJlc3VsdCA9IHsgMHgwZiwgMHhjYSwgMHhiNSwgMHhkOCwgMHg0MiwgMHhhMCwgMHg3OCwgMHhkNywKKysJCQkgICAgMHhhNywgMHgxZiwgMHhjNSwgMHg5YiwgMHg1NywgMHhiZiwgMHhiNCwgMHhjYSwKKysJCQkgICAgMHgwYiwgMHhlNiwgMHg4NywgMHgzYiwgMHg0OSwgMHhkYywgMHhkYiwgMHg5ZiwKKysJCQkgICAgMHg0NCwgMHhlMSwgMHg0YSwgMHhlOCwgMHhmYiwgMHhkZiwgMHhhNSwgMHg0MiB9LAorKwkJLnZhbGlkID0gdHJ1ZQorKwl9LAorKwkvKiB3eWNoZXByb29mIC0gZWRnZSBjYXNlIGZvciBwdWJsaWMga2V5ICovCisrCXsKKysJCS5wcml2YXRlID0geyAweGUwLCAweDIzLCAweGEyLCAweDg5LCAweGJkLCAweDVlLCAweDkwLCAweGZhLAorKwkJCSAgICAgMHgyOCwgMHgwNCwgMHhkZCwgMHhjMCwgMHgxOSwgMHhhMCwgMHg1ZSwgMHhmMywKKysJCQkgICAgIDB4ZTcsIDB4OWQsIDB4NDMsIDB4NGIsIDB4YjYsIDB4ZWEsIDB4MmYsIDB4NTIsCisrCQkJICAgICAweDJlLCAweGNiLCAweDY0LCAweDNhLCAweDc1LCAweDI5LCAweDZlLCAweDk1IH0sCisrCQkucHVibGljID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisrCQkucmVzdWx0ID0geyAweDU0LCAweGNlLCAweDhmLCAweDIyLCAweDc1LCAweGMwLCAweDc3LCAweGUzLAorKwkJCSAgICAweGIxLCAweDMwLCAweDZhLCAweDM5LCAweDM5LCAweGM1LCAweGUwLCAweDNlLAorKwkJCSAgICAweGVmLCAweDZiLCAweGJiLCAweDg4LCAweDA2LCAweDA1LCAweDQ0LCAweDc1LAorKwkJCSAgICAweDhkLCAweDlmLCAweGVmLCAweDU5LCAweGIwLCAweGJjLCAweDNlLCAweDRmIH0sCisrCQkudmFsaWQgPSB0cnVlCisrCX0sCisrCS8qIHd5Y2hlcHJvb2YgLSBlZGdlIGNhc2UgZm9yIHB1YmxpYyBrZXkgKi8KKysJeworKwkJLnByaXZhdGUgPSB7IDB4NjgsIDB4ZjAsIDB4MTAsIDB4ZDYsIDB4MmUsIDB4ZTgsIDB4ZDksIDB4MjYsCisrCQkJICAgICAweDA1LCAweDNhLCAweDM2LCAweDFjLCAweDNhLCAweDc1LCAweGM2LCAweGVhLAorKwkJCSAgICAgMHg0ZSwgMHhiZCwgMHhjOCwgMHg2MCwgMHg2YSwgMHhiMiwgMHg4NSwgMHgwMCwKKysJCQkgICAgIDB4M2EsIDB4NmYsIDB4OGYsIDB4NDAsIDB4NzYsIDB4YjAsIDB4MWUsIDB4ODMgfSwKKysJCS5wdWJsaWMgPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDMgfSwKKysJCS5yZXN1bHQgPSB7IDB4ZjEsIDB4MzYsIDB4NzcsIDB4NWMsIDB4NWIsIDB4ZWIsIDB4MGEsIDB4ZjgsCisrCQkJICAgIDB4MTEsIDB4MGEsIDB4ZjEsIDB4MGIsIDB4MjAsIDB4MzcsIDB4MjMsIDB4MzIsCisrCQkJICAgIDB4MDQsIDB4M2MsIDB4YWIsIDB4NzUsIDB4MjQsIDB4MTksIDB4NjcsIDB4ODcsCisrCQkJICAgIDB4NzUsIDB4YTIsIDB4MjMsIDB4ZGYsIDB4NTcsIDB4YzksIDB4ZDMsIDB4MGQgfSwKKysJCS52YWxpZCA9IHRydWUKKysJfSwKKysJLyogd3ljaGVwcm9vZiAtIGVkZ2UgY2FzZSBmb3IgcHVibGljIGtleSAqLworKwl7CisrCQkucHJpdmF0ZSA9IHsgMHg1OCwgMHhlYiwgMHhjYiwgMHgzNSwgMHhiMCwgMHhmOCwgMHg4NCwgMHg1YywKKysJCQkgICAgIDB4YWYsIDB4MWUsIDB4YzYsIDB4MzAsIDB4ZjksIDB4NjUsIDB4NzYsIDB4YjYsCisrCQkJICAgICAweDJjLCAweDRiLCAweDdiLCAweDZjLCAweDM2LCAweGIyLCAweDlkLCAweGViLAorKwkJCSAgICAgMHgyYywgMHhiMCwgMHgwOCwgMHg0NiwgMHg1MSwgMHg3NSwgMHg1YywgMHg5NiB9LAorKwkJLnB1YmxpYyA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmYiwgMHhmZiwgMHhmZiwgMHhmYiwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhkZiwgMHhmZiwgMHhmZiwgMHhkZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhmZSwgMHhmZiwgMHhmZiwgMHhmZSwgMHhmZiwgMHhmZiwgMHhmNywgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHhiZiwgMHhmZiwgMHhmZiwgMHgzZiB9LAorKwkJLnJlc3VsdCA9IHsgMHhiZiwgMHg5YSwgMHhmZiwgMHhkMCwgMHg2YiwgMHg4NCwgMHg0MCwgMHg4NSwKKysJCQkgICAgMHg1OCwgMHg2NCwgMHg2MCwgMHg5NiwgMHgyZSwgMHhmMiwgMHgxNCwgMHg2ZiwKKysJCQkgICAgMHhmMywgMHhkNCwgMHg1MywgMHgzZCwgMHg5NCwgMHg0NCwgMHhhYSwgMHhiMCwKKysJCQkgICAgMHgwNiwgMHhlYiwgMHg4OCwgMHhjYywgMHgzMCwgMHg1NCwgMHg0MCwgMHg3ZCB9LAorKwkJLnZhbGlkID0gdHJ1ZQorKwl9LAorKwkvKiB3eWNoZXByb29mIC0gZWRnZSBjYXNlIGZvciBwdWJsaWMga2V5ICovCisrCXsKKysJCS5wcml2YXRlID0geyAweDE4LCAweDhjLCAweDRiLCAweGM1LCAweGI5LCAweGM0LCAweDRiLCAweDM4LAorKwkJCSAgICAgMHhiYiwgMHg2NSwgMHg4YiwgMHg5YiwgMHgyYSwgMHhlOCwgMHgyZCwgMHg1YiwKKysJCQkgICAgIDB4MDEsIDB4MDEsIDB4NWUsIDB4MDksIDB4MzEsIDB4ODQsIDB4YjEsIDB4N2MsCisrCQkJICAgICAweGI3LCAweDg2LCAweDM1LCAweDAzLCAweGE3LCAweDgzLCAweGUxLCAweGJiIH0sCisrCQkucHVibGljID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDNmIH0sCisrCQkucmVzdWx0ID0geyAweGQ0LCAweDgwLCAweGRlLCAweDA0LCAweGY2LCAweDk5LCAweGNiLCAweDNiLAorKwkJCSAgICAweGUwLCAweDY4LCAweDRhLCAweDljLCAweGMyLCAweGUzLCAweDEyLCAweDgxLAorKwkJCSAgICAweGVhLCAweDBiLCAweGM1LCAweGE5LCAweGRjLCAweGMxLCAweDU3LCAweGQzLAorKwkJCSAgICAweGQyLCAweDAxLCAweDU4LCAweGQ0LCAweDZjLCAweGE1LCAweDI0LCAweDZkIH0sCisrCQkudmFsaWQgPSB0cnVlCisrCX0sCisrCS8qIHd5Y2hlcHJvb2YgLSBlZGdlIGNhc2UgZm9yIHB1YmxpYyBrZXkgKi8KKysJeworKwkJLnByaXZhdGUgPSB7IDB4ZTAsIDB4NmMsIDB4MTEsIDB4YmIsIDB4MmUsIDB4MTMsIDB4Y2UsIDB4M2QsCisrCQkJICAgICAweGM3LCAweDY3LCAweDNmLCAweDY3LCAweGY1LCAweDQ4LCAweDIyLCAweDQyLAorKwkJCSAgICAgMHg5MCwgMHg5NCwgMHgyMywgMHhhOSwgMHhhZSwgMHg5NSwgMHhlZSwgMHg5OCwKKysJCQkgICAgIDB4NmEsIDB4OTgsIDB4OGQsIDB4OTgsIDB4ZmEsIDB4ZWUsIDB4MjMsIDB4YTIgfSwKKysJCS5wdWJsaWMgPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4N2YsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4N2YsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4N2YsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4N2YgfSwKKysJCS5yZXN1bHQgPSB7IDB4NGMsIDB4NDQsIDB4MDEsIDB4Y2MsIDB4ZTYsIDB4YjUsIDB4MWUsIDB4NGMsCisrCQkJICAgIDB4YjEsIDB4OGYsIDB4MjcsIDB4OTAsIDB4MjQsIDB4NmMsIDB4OWIsIDB4ZjksCisrCQkJICAgIDB4MTQsIDB4ZGIsIDB4NjYsIDB4NzcsIDB4NTAsIDB4YTEsIDB4Y2IsIDB4ODksCisrCQkJICAgIDB4MDYsIDB4OTAsIDB4OTIsIDB4YWYsIDB4MDcsIDB4MjksIDB4MjIsIDB4NzYgfSwKKysJCS52YWxpZCA9IHRydWUKKysJfSwKKysJLyogd3ljaGVwcm9vZiAtIGVkZ2UgY2FzZSBmb3IgcHVibGljIGtleSAqLworKwl7CisrCQkucHJpdmF0ZSA9IHsgMHhjMCwgMHg2NSwgMHg4YywgMHg0NiwgMHhkZCwgMHhlMSwgMHg4MSwgMHgyOSwKKysJCQkgICAgIDB4MjksIDB4MzgsIDB4NzcsIDB4NTMsIDB4NWIsIDB4MTEsIDB4NjIsIDB4YjYsCisrCQkJICAgICAweGY5LCAweGY1LCAweDQxLCAweDRhLCAweDIzLCAweGNmLCAweDRkLCAweDJjLAorKwkJCSAgICAgMHhiYywgMHgxNCwgMHgwYSwgMHg0ZCwgMHg5OSwgMHhkYSwgMHgyYiwgMHg4ZiB9LAorKwkJLnB1YmxpYyA9IHsgMHhlYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiB9LAorKwkJLnJlc3VsdCA9IHsgMHg1NywgMHg4YiwgMHhhOCwgMHhjYywgMHgyZCwgMHhiZCwgMHhjNSwgMHg3NSwKKysJCQkgICAgMHhhZiwgMHhjZiwgMHg5ZCwgMHhmMiwgMHhiMywgMHhlZSwgMHg2MSwgMHg4OSwKKysJCQkgICAgMHhmNSwgMHgzMywgMHg3ZCwgMHg2OCwgMHg1NCwgMHhjNywgMHg5YiwgMHg0YywKKysJCQkgICAgMHhlMSwgMHg2NSwgMHhlYSwgMHgxMiwgMHgyOSwgMHgzYiwgMHgzYSwgMHgwZiB9LAorKwkJLnZhbGlkID0gdHJ1ZQorKwl9LAorKwkvKiB3eWNoZXByb29mIC0gcHVibGljIGtleSB3aXRoIGxvdyBvcmRlciAqLworKwl7CisrCQkucHJpdmF0ZSA9IHsgMHgxMCwgMHgyNSwgMHg1YywgMHg5MiwgMHgzMCwgMHhhOSwgMHg3YSwgMHgzMCwKKysJCQkgICAgIDB4YTQsIDB4NTgsIDB4Y2EsIDB4MjgsIDB4NGEsIDB4NjIsIDB4OTYsIDB4NjksCisrCQkJICAgICAweDI5LCAweDNhLCAweDMxLCAweDg5LCAweDBjLCAweGRhLCAweDlkLCAweDE0LAorKwkJCSAgICAgMHg3ZiwgMHhlYiwgMHhjNywgMHhkMSwgMHhlMiwgMHgyZCwgMHg2YiwgMHhiMSB9LAorKwkJLnB1YmxpYyA9IHsgMHhlMCwgMHhlYiwgMHg3YSwgMHg3YywgMHgzYiwgMHg0MSwgMHhiOCwgMHhhZSwKKysJCQkgICAgMHgxNiwgMHg1NiwgMHhlMywgMHhmYSwgMHhmMSwgMHg5ZiwgMHhjNCwgMHg2YSwKKysJCQkgICAgMHhkYSwgMHgwOSwgMHg4ZCwgMHhlYiwgMHg5YywgMHgzMiwgMHhiMSwgMHhmZCwKKysJCQkgICAgMHg4NiwgMHg2MiwgMHgwNSwgMHgxNiwgMHg1ZiwgMHg0OSwgMHhiOCwgMHgwMCB9LAorKwkJLnJlc3VsdCA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorKwkJLnZhbGlkID0gZmFsc2UKKysJfSwKKysJLyogd3ljaGVwcm9vZiAtIHB1YmxpYyBrZXkgd2l0aCBsb3cgb3JkZXIgKi8KKysJeworKwkJLnByaXZhdGUgPSB7IDB4NzgsIDB4ZjEsIDB4ZTgsIDB4ZWQsIDB4ZjEsIDB4NDQsIDB4ODEsIDB4YjMsCisrCQkJICAgICAweDg5LCAweDQ0LCAweDhkLCAweGFjLCAweDhmLCAweDU5LCAweGM3LCAweDBiLAorKwkJCSAgICAgMHgwMywgMHg4ZSwgMHg3YywgMHhmOSwgMHgyZSwgMHhmMiwgMHhjNywgMHhlZiwKKysJCQkgICAgIDB4ZjUsIDB4N2EsIDB4NzIsIDB4NDYsIDB4NmUsIDB4MTEsIDB4NTIsIDB4OTYgfSwKKysJCS5wdWJsaWMgPSB7IDB4NWYsIDB4OWMsIDB4OTUsIDB4YmMsIDB4YTMsIDB4NTAsIDB4OGMsIDB4MjQsCisrCQkJICAgIDB4YjEsIDB4ZDAsIDB4YjEsIDB4NTUsIDB4OWMsIDB4ODMsIDB4ZWYsIDB4NWIsCisrCQkJICAgIDB4MDQsIDB4NDQsIDB4NWMsIDB4YzQsIDB4NTgsIDB4MWMsIDB4OGUsIDB4ODYsCisrCQkJICAgIDB4ZDgsIDB4MjIsIDB4NGUsIDB4ZGQsIDB4ZDAsIDB4OWYsIDB4MTEsIDB4NTcgfSwKKysJCS5yZXN1bHQgPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKysJCS52YWxpZCA9IGZhbHNlCisrCX0sCisrCS8qIHd5Y2hlcHJvb2YgLSBwdWJsaWMga2V5IHdpdGggbG93IG9yZGVyICovCisrCXsKKysJCS5wcml2YXRlID0geyAweGEwLCAweGEwLCAweDVhLCAweDNlLCAweDhmLCAweDlmLCAweDQ0LCAweDIwLAorKwkJCSAgICAgMHg0ZCwgMHg1ZiwgMHg4MCwgMHg1OSwgMHhhOSwgMHg0YSwgMHhjNywgMHhkZiwKKysJCQkgICAgIDB4YzMsIDB4OWEsIDB4NDksIDB4YWMsIDB4MDEsIDB4NmQsIDB4ZDcsIDB4NDMsCisrCQkJICAgICAweGRiLCAweGZhLCAweDQzLCAweGM1LCAweGQ2LCAweDcxLCAweGZkLCAweDg4IH0sCisrCQkucHVibGljID0geyAweGVjLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDdmIH0sCisrCQkucmVzdWx0ID0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisrCQkudmFsaWQgPSBmYWxzZQorKwl9LAorKwkvKiB3eWNoZXByb29mIC0gcHVibGljIGtleSB3aXRoIGxvdyBvcmRlciAqLworKwl7CisrCQkucHJpdmF0ZSA9IHsgMHhkMCwgMHhkYiwgMHhiMywgMHhlZCwgMHgxOSwgMHgwNiwgMHg2NiwgMHgzZiwKKysJCQkgICAgIDB4MTUsIDB4NDIsIDB4MGEsIDB4ZjMsIDB4MWYsIDB4NGUsIDB4YWYsIDB4NjUsCisrCQkJICAgICAweDA5LCAweGQ5LCAweGE5LCAweDk0LCAweDk3LCAweDIzLCAweDUwLCAweDA2LAorKwkJCSAgICAgMHgwNSwgMHhhZCwgMHg3YywgMHgxYywgMHg2ZSwgMHg3NCwgMHg1MCwgMHhhOSB9LAorKwkJLnB1YmxpYyA9IHsgMHhlZCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiB9LAorKwkJLnJlc3VsdCA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorKwkJLnZhbGlkID0gZmFsc2UKKysJfSwKKysJLyogd3ljaGVwcm9vZiAtIHB1YmxpYyBrZXkgd2l0aCBsb3cgb3JkZXIgKi8KKysJeworKwkJLnByaXZhdGUgPSB7IDB4YzAsIDB4YjEsIDB4ZDAsIDB4ZWIsIDB4MjIsIDB4YjIsIDB4NDQsIDB4ZmUsCisrCQkJICAgICAweDMyLCAweDkxLCAweDE0LCAweDAwLCAweDcyLCAweGNkLCAweGQ5LCAweGQ5LAorKwkJCSAgICAgMHg4OSwgMHhiNSwgMHhmMCwgMHhlYywgMHhkOSwgMHg2YywgMHgxMCwgMHgwZiwKKysJCQkgICAgIDB4ZWIsIDB4NWIsIDB4Y2EsIDB4MjQsIDB4MWMsIDB4MWQsIDB4OWYsIDB4OGYgfSwKKysJCS5wdWJsaWMgPSB7IDB4ZWUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YgfSwKKysJCS5yZXN1bHQgPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKysJCS52YWxpZCA9IGZhbHNlCisrCX0sCisrCS8qIHd5Y2hlcHJvb2YgLSBwdWJsaWMga2V5IHdpdGggbG93IG9yZGVyICovCisrCXsKKysJCS5wcml2YXRlID0geyAweDQ4LCAweDBiLCAweGY0LCAweDVmLCAweDU5LCAweDQ5LCAweDQyLCAweGE4LAorKwkJCSAgICAgMHhiYywgMHgwZiwgMHgzMywgMHg1MywgMHhjNiwgMHhlOCwgMHhiOCwgMHg4NSwKKysJCQkgICAgIDB4M2QsIDB4NzcsIDB4ZjMsIDB4NTEsIDB4ZjEsIDB4YzIsIDB4Y2EsIDB4NmMsCisrCQkJICAgICAweDJkLCAweDFhLCAweGJmLCAweDhhLCAweDAwLCAweGI0LCAweDIyLCAweDljIH0sCisrCQkucHVibGljID0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwIH0sCisrCQkucmVzdWx0ID0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisrCQkudmFsaWQgPSBmYWxzZQorKwl9LAorKwkvKiB3eWNoZXByb29mIC0gcHVibGljIGtleSB3aXRoIGxvdyBvcmRlciAqLworKwl7CisrCQkucHJpdmF0ZSA9IHsgMHgzMCwgMHhmOSwgMHg5MywgMHhmYywgMHhmOCwgMHg1MSwgMHg0ZiwgMHhjOCwKKysJCQkgICAgIDB4OWIsIDB4ZDgsIDB4ZGIsIDB4MTQsIDB4Y2QsIDB4NDMsIDB4YmEsIDB4MGQsCisrCQkJICAgICAweDRiLCAweDI1LCAweDMwLCAweGU3LCAweDNjLCAweDQyLCAweDc2LCAweGEwLAorKwkJCSAgICAgMHg1ZSwgMHgxYiwgMHgxNCwgMHg1ZCwgMHg0MiwgMHgwYywgMHhlZCwgMHhiNCB9LAorKwkJLnB1YmxpYyA9IHsgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCB9LAorKwkJLnJlc3VsdCA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorKwkJLnZhbGlkID0gZmFsc2UKKysJfSwKKysJLyogd3ljaGVwcm9vZiAtIHB1YmxpYyBrZXkgd2l0aCBsb3cgb3JkZXIgKi8KKysJeworKwkJLnByaXZhdGUgPSB7IDB4YzAsIDB4NDksIDB4NzQsIDB4YjcsIDB4NTgsIDB4MzgsIDB4MGUsIDB4MmEsCisrCQkJICAgICAweDViLCAweDVkLCAweGY2LCAweGViLCAweDA5LCAweGJiLCAweDJmLCAweDZiLAorKwkJCSAgICAgMHgzNCwgMHgzNCwgMHhmOSwgMHg4MiwgMHg3MiwgMHgyYSwgMHg4ZSwgMHg2NywKKysJCQkgICAgIDB4NmQsIDB4M2QsIDB4YTIsIDB4NTEsIDB4ZDEsIDB4YjMsIDB4ZGUsIDB4ODMgfSwKKysJCS5wdWJsaWMgPSB7IDB4ZTAsIDB4ZWIsIDB4N2EsIDB4N2MsIDB4M2IsIDB4NDEsIDB4YjgsIDB4YWUsCisrCQkJICAgIDB4MTYsIDB4NTYsIDB4ZTMsIDB4ZmEsIDB4ZjEsIDB4OWYsIDB4YzQsIDB4NmEsCisrCQkJICAgIDB4ZGEsIDB4MDksIDB4OGQsIDB4ZWIsIDB4OWMsIDB4MzIsIDB4YjEsIDB4ZmQsCisrCQkJICAgIDB4ODYsIDB4NjIsIDB4MDUsIDB4MTYsIDB4NWYsIDB4NDksIDB4YjgsIDB4ODAgfSwKKysJCS5yZXN1bHQgPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKysJCS52YWxpZCA9IGZhbHNlCisrCX0sCisrCS8qIHd5Y2hlcHJvb2YgLSBwdWJsaWMga2V5IHdpdGggbG93IG9yZGVyICovCisrCXsKKysJCS5wcml2YXRlID0geyAweDUwLCAweDJhLCAweDMxLCAweDM3LCAweDNkLCAweGIzLCAweDI0LCAweDQ2LAorKwkJCSAgICAgMHg4NCwgMHgyZiwgMHhlNSwgMHhhZCwgMHhkMywgMHhlMCwgMHgyNCwgMHgwMiwKKysJCQkgICAgIDB4MmUsIDB4YTUsIDB4NGYsIDB4MjcsIDB4NDEsIDB4ODIsIDB4YWYsIDB4YzMsCisrCQkJICAgICAweGQ5LCAweGYxLCAweGJiLCAweDNkLCAweDM5LCAweDUzLCAweDRlLCAweGI1IH0sCisrCQkucHVibGljID0geyAweDVmLCAweDljLCAweDk1LCAweGJjLCAweGEzLCAweDUwLCAweDhjLCAweDI0LAorKwkJCSAgICAweGIxLCAweGQwLCAweGIxLCAweDU1LCAweDljLCAweDgzLCAweGVmLCAweDViLAorKwkJCSAgICAweDA0LCAweDQ0LCAweDVjLCAweGM0LCAweDU4LCAweDFjLCAweDhlLCAweDg2LAorKwkJCSAgICAweGQ4LCAweDIyLCAweDRlLCAweGRkLCAweGQwLCAweDlmLCAweDExLCAweGQ3IH0sCisrCQkucmVzdWx0ID0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisrCQkudmFsaWQgPSBmYWxzZQorKwl9LAorKwkvKiB3eWNoZXByb29mIC0gcHVibGljIGtleSB3aXRoIGxvdyBvcmRlciAqLworKwl7CisrCQkucHJpdmF0ZSA9IHsgMHg5MCwgMHhmYSwgMHg2NCwgMHgxNywgMHhiMCwgMHhlMywgMHg3MCwgMHgzMCwKKysJCQkgICAgIDB4ZmQsIDB4NmUsIDB4NDMsIDB4ZWYsIDB4ZjIsIDB4YWIsIDB4YWUsIDB4ZjEsCisrCQkJICAgICAweDRjLCAweDY3LCAweDkzLCAweDExLCAweDdhLCAweDAzLCAweDljLCAweGY2LAorKwkJCSAgICAgMHgyMSwgMHgzMSwgMHg4YiwgMHhhOSwgMHgwZiwgMHg0ZSwgMHg5OCwgMHhiZSB9LAorKwkJLnB1YmxpYyA9IHsgMHhlYywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9LAorKwkJLnJlc3VsdCA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorKwkJLnZhbGlkID0gZmFsc2UKKysJfSwKKysJLyogd3ljaGVwcm9vZiAtIHB1YmxpYyBrZXkgd2l0aCBsb3cgb3JkZXIgKi8KKysJeworKwkJLnByaXZhdGUgPSB7IDB4NzgsIDB4YWQsIDB4M2YsIDB4MjYsIDB4MDIsIDB4N2YsIDB4MWMsIDB4OWYsCisrCQkJICAgICAweGRkLCAweDk3LCAweDVhLCAweDE2LCAweDEzLCAweGI5LCAweDQ3LCAweDc3LAorKwkJCSAgICAgMHg5YiwgMHhhZCwgMHgyYywgMHhmMiwgMHhiNywgMHg0MSwgMHhhZCwgMHhlMCwKKysJCQkgICAgIDB4MTgsIDB4NDAsIDB4ODgsIDB4NWEsIDB4MzAsIDB4YmIsIDB4OTcsIDB4OWMgfSwKKysJCS5wdWJsaWMgPSB7IDB4ZWQsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfSwKKysJCS5yZXN1bHQgPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKysJCS52YWxpZCA9IGZhbHNlCisrCX0sCisrCS8qIHd5Y2hlcHJvb2YgLSBwdWJsaWMga2V5IHdpdGggbG93IG9yZGVyICovCisrCXsKKysJCS5wcml2YXRlID0geyAweDk4LCAweGUyLCAweDNkLCAweGU3LCAweGIxLCAweGUwLCAweDkyLCAweDZlLAorKwkJCSAgICAgMHhkOSwgMHhjOCwgMHg3ZSwgMHg3YiwgMHgxNCwgMHhiYSwgMHhmNSwgMHg1ZiwKKysJCQkgICAgIDB4NDksIDB4N2EsIDB4MWQsIDB4NzAsIDB4OTYsIDB4ZjksIDB4MzksIDB4NzcsCisrCQkJICAgICAweDY4LCAweDBlLCAweDQ0LCAweGRjLCAweDFjLCAweDdiLCAweDdiLCAweDhiIH0sCisrCQkucHVibGljID0geyAweGVlLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmIH0sCisrCQkucmVzdWx0ID0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisrCQkudmFsaWQgPSBmYWxzZQorKwl9LAorKwkvKiB3eWNoZXByb29mIC0gcHVibGljIGtleSA+PSBwICovCisrCXsKKysJCS5wcml2YXRlID0geyAweGYwLCAweDFlLCAweDQ4LCAweGRhLCAweGZhLCAweGM5LCAweGQ3LCAweGJjLAorKwkJCSAgICAgMHhmNSwgMHg4OSwgMHhjYiwgMHhjMywgMHg4MiwgMHhjOCwgMHg3OCwgMHhkMSwKKysJCQkgICAgIDB4OGIsIDB4ZGEsIDB4MzUsIDB4NTAsIDB4NTgsIDB4OWYsIDB4ZmIsIDB4NWQsCisrCQkJICAgICAweDUwLCAweGI1LCAweDIzLCAweGJlLCAweGJlLCAweDMyLCAweDlkLCAweGFlIH0sCisrCQkucHVibGljID0geyAweGVmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDdmIH0sCisrCQkucmVzdWx0ID0geyAweGJkLCAweDM2LCAweGEwLCAweDc5LCAweDBlLCAweGI4LCAweDgzLCAweDA5LAorKwkJCSAgICAweDhjLCAweDk4LCAweDhiLCAweDIxLCAweDc4LCAweDY3LCAweDczLCAweGRlLAorKwkJCSAgICAweDBiLCAweDNhLCAweDRkLCAweGYxLCAweDYyLCAweDI4LCAweDJjLCAweGYxLAorKwkJCSAgICAweDEwLCAweGRlLCAweDE4LCAweGRkLCAweDQ4LCAweDRjLCAweGU3LCAweDRiIH0sCisrCQkudmFsaWQgPSB0cnVlCisrCX0sCisrCS8qIHd5Y2hlcHJvb2YgLSBwdWJsaWMga2V5ID49IHAgKi8KKysJeworKwkJLnByaXZhdGUgPSB7IDB4MjgsIDB4ODcsIDB4OTYsIDB4YmMsIDB4NWEsIDB4ZmYsIDB4NGIsIDB4ODEsCisrCQkJICAgICAweGEzLCAweDc1LCAweDAxLCAweDc1LCAweDdiLCAweGMwLCAweDc1LCAweDNhLAorKwkJCSAgICAgMHgzYywgMHgyMSwgMHg5NiwgMHg0NywgMHg5MCwgMHhkMywgMHg4NiwgMHg5OSwKKysJCQkgICAgIDB4MzAsIDB4OGQsIDB4ZWIsIDB4YzEsIDB4N2EsIDB4NmUsIDB4YWYsIDB4OGQgfSwKKysJCS5wdWJsaWMgPSB7IDB4ZjAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YgfSwKKysJCS5yZXN1bHQgPSB7IDB4YjQsIDB4ZTAsIDB4ZGQsIDB4NzYsIDB4ZGEsIDB4N2IsIDB4MDcsIDB4MTcsCisrCQkJICAgIDB4MjgsIDB4YjYsIDB4MWYsIDB4ODUsIDB4NjcsIDB4NzEsIDB4YWEsIDB4MzUsCisrCQkJICAgIDB4NmUsIDB4NTcsIDB4ZWQsIDB4YTcsIDB4OGEsIDB4NWIsIDB4MTYsIDB4NTUsCisrCQkJICAgIDB4Y2MsIDB4MzgsIDB4MjAsIDB4ZmIsIDB4NWYsIDB4ODUsIDB4NGMsIDB4NWMgfSwKKysJCS52YWxpZCA9IHRydWUKKysJfSwKKysJLyogd3ljaGVwcm9vZiAtIHB1YmxpYyBrZXkgPj0gcCAqLworKwl7CisrCQkucHJpdmF0ZSA9IHsgMHg5OCwgMHhkZiwgMHg4NCwgMHg1ZiwgMHg2NiwgMHg1MSwgMHhiZiwgMHgxMSwKKysJCQkgICAgIDB4MzgsIDB4MjIsIDB4MWYsIDB4MTEsIDB4OTAsIDB4NDEsIDB4ZjcsIDB4MmIsCisrCQkJICAgICAweDZkLCAweGJjLCAweDNjLCAweDRhLCAweGNlLCAweDcxLCAweDQzLCAweGQ5LAorKwkJCSAgICAgMHg5ZiwgMHhkNSwgMHg1YSwgMHhkOCwgMHg2NywgMHg0OCwgMHgwZCwgMHhhOCB9LAorKwkJLnB1YmxpYyA9IHsgMHhmMSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiB9LAorKwkJLnJlc3VsdCA9IHsgMHg2ZiwgMHhkZiwgMHg2YywgMHgzNywgMHg2MSwgMHgxZCwgMHhiZCwgMHg1MywKKysJCQkgICAgMHgwNCwgMHhkYywgMHgwZiwgMHgyZSwgMHhiNywgMHhjOSwgMHg1MSwgMHg3ZSwKKysJCQkgICAgMHhiMywgMHhjNSwgMHgwZSwgMHgxMiwgMHhmZCwgMHgwNSwgMHgwYSwgMHhjNiwKKysJCQkgICAgMHhkZSwgMHhjMiwgMHg3MCwgMHg3MSwgMHhkNCwgMHhiZiwgMHhjMCwgMHgzNCB9LAorKwkJLnZhbGlkID0gdHJ1ZQorKwl9LAorKwkvKiB3eWNoZXByb29mIC0gcHVibGljIGtleSA+PSBwICovCisrCXsKKysJCS5wcml2YXRlID0geyAweGYwLCAweDk0LCAweDk4LCAweGU0LCAweDZmLCAweDAyLCAweGY4LCAweDc4LAorKwkJCSAgICAgMHg4MiwgMHg5ZSwgMHg3OCwgMHhiOCwgMHgwMywgMHhkMywgMHgxNiwgMHhhMiwKKysJCQkgICAgIDB4ZWQsIDB4NjksIDB4NWQsIDB4MDQsIDB4OTgsIDB4YTAsIDB4OGEsIDB4YmQsCisrCQkJICAgICAweGY4LCAweDI3LCAweDY5LCAweDMwLCAweGUyLCAweDRlLCAweGRjLCAweGIwIH0sCisrCQkucHVibGljID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDdmIH0sCisrCQkucmVzdWx0ID0geyAweDRjLCAweDhmLCAweGM0LCAweGIxLCAweGM2LCAweGFiLCAweDg4LCAweGZiLAorKwkJCSAgICAweDIxLCAweGYxLCAweDhmLCAweDZkLCAweDRjLCAweDgxLCAweDAyLCAweDQwLAorKwkJCSAgICAweGQ0LCAweGU5LCAweDQ2LCAweDUxLCAweGJhLCAweDQ0LCAweGY3LCAweGEyLAorKwkJCSAgICAweGM4LCAweDYzLCAweGNlLCAweGM3LCAweGRjLCAweDU2LCAweDYwLCAweDJkIH0sCisrCQkudmFsaWQgPSB0cnVlCisrCX0sCisrCS8qIHd5Y2hlcHJvb2YgLSBwdWJsaWMga2V5ID49IHAgKi8KKysJeworKwkJLnByaXZhdGUgPSB7IDB4MTgsIDB4MTMsIDB4YzEsIDB4MGEsIDB4NWMsIDB4N2YsIDB4MjEsIDB4ZjksCisrCQkJICAgICAweDZlLCAweDE3LCAweGYyLCAweDg4LCAweGMwLCAweGNjLCAweDM3LCAweDYwLAorKwkJCSAgICAgMHg3YywgMHgwNCwgMHhjNSwgMHhmNSwgMHhhZSwgMHhhMiwgMHhkYiwgMHgxMywKKysJCQkgICAgIDB4NGYsIDB4OWUsIDB4MmYsIDB4ZmMsIDB4NjYsIDB4YmQsIDB4OWQsIDB4YjggfSwKKysJCS5wdWJsaWMgPSB7IDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAgfSwKKysJCS5yZXN1bHQgPSB7IDB4MWMsIDB4ZDAsIDB4YjIsIDB4ODIsIDB4NjcsIDB4ZGMsIDB4NTQsIDB4MWMsCisrCQkJICAgIDB4NjQsIDB4MmQsIDB4NmQsIDB4N2QsIDB4Y2EsIDB4NDQsIDB4YTgsIDB4YjMsCisrCQkJICAgIDB4OGEsIDB4NjMsIDB4NzMsIDB4NmUsIDB4ZWYsIDB4NWMsIDB4NGUsIDB4NjUsCisrCQkJICAgIDB4MDEsIDB4ZmYsIDB4YmIsIDB4YjEsIDB4NzgsIDB4MGMsIDB4MDMsIDB4M2MgfSwKKysJCS52YWxpZCA9IHRydWUKKysJfSwKKysJLyogd3ljaGVwcm9vZiAtIHB1YmxpYyBrZXkgPj0gcCAqLworKwl7CisrCQkucHJpdmF0ZSA9IHsgMHg3OCwgMHg1NywgMHhmYiwgMHg4MCwgMHg4NiwgMHg1MywgMHg2NCwgMHg1YSwKKysJCQkgICAgIDB4MGIsIDB4ZWIsIDB4MTMsIDB4OGEsIDB4NjQsIDB4ZjUsIDB4ZjQsIDB4ZDcsCisrCQkJICAgICAweDMzLCAweGE0LCAweDVlLCAweGE4LCAweDRjLCAweDNjLCAweGRhLCAweDExLAorKwkJCSAgICAgMHhhOSwgMHhjMCwgMHg2ZiwgMHg3ZSwgMHg3MSwgMHgzOSwgMHgxNCwgMHg5ZSB9LAorKwkJLnB1YmxpYyA9IHsgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCB9LAorKwkJLnJlc3VsdCA9IHsgMHg4NywgMHg1NSwgMHhiZSwgMHgwMSwgMHhjNiwgMHgwYSwgMHg3ZSwgMHg4MiwKKysJCQkgICAgMHg1YywgMHhmZiwgMHgzZSwgMHgwZSwgMHg3OCwgMHhjYiwgMHgzYSwgMHhhNCwKKysJCQkgICAgMHgzMywgMHgzOCwgMHg2MSwgMHg1MSwgMHg2YSwgMHhhNSwgMHg5YiwgMHgxYywKKysJCQkgICAgMHg1MSwgMHhhOCwgMHhiMiwgMHhhNSwgMHg0MywgMHhkZiwgMHhhOCwgMHgyMiB9LAorKwkJLnZhbGlkID0gdHJ1ZQorKwl9LAorKwkvKiB3eWNoZXByb29mIC0gcHVibGljIGtleSA+PSBwICovCisrCXsKKysJCS5wcml2YXRlID0geyAweGUwLCAweDNhLCAweGE4LCAweDQyLCAweGUyLCAweGFiLCAweGM1LCAweDZlLAorKwkJCSAgICAgMHg4MSwgMHhlOCwgMHg3YiwgMHg4YiwgMHg5ZiwgMHg0MSwgMHg3YiwgMHgyYSwKKysJCQkgICAgIDB4MWUsIDB4NTksIDB4MTMsIDB4YzcsIDB4MjMsIDB4ZWUsIDB4ZDIsIDB4OGQsCisrCQkJICAgICAweDc1LCAweDJmLCAweDhkLCAweDQ3LCAweGE1LCAweDlmLCAweDQ5LCAweDhmIH0sCisrCQkucHVibGljID0geyAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwIH0sCisrCQkucmVzdWx0ID0geyAweDU0LCAweGM5LCAweGExLCAweGVkLCAweDk1LCAweGU1LCAweDQ2LCAweGQyLAorKwkJCSAgICAweDc4LCAweDIyLCAweGEzLCAweDYwLCAweDkzLCAweDFkLCAweGRhLCAweDYwLAorKwkJCSAgICAweGExLCAweGRmLCAweDA0LCAweDlkLCAweGE2LCAweGY5LCAweDA0LCAweDI1LAorKwkJCSAgICAweDNjLCAweDA2LCAweDEyLCAweGJiLCAweGRjLCAweDA4LCAweDc0LCAweDc2IH0sCisrCQkudmFsaWQgPSB0cnVlCisrCX0sCisrCS8qIHd5Y2hlcHJvb2YgLSBwdWJsaWMga2V5ID49IHAgKi8KKysJeworKwkJLnByaXZhdGUgPSB7IDB4ZjgsIDB4ZjcsIDB4MDcsIDB4YjcsIDB4OTksIDB4OWIsIDB4MTgsIDB4Y2IsCisrCQkJICAgICAweDBkLCAweDZiLCAweDk2LCAweDEyLCAweDRmLCAweDIwLCAweDQ1LCAweDk3LAorKwkJCSAgICAgMHgyYywgMHhhMiwgMHg3NCwgMHhiZiwgMHhjMSwgMHg1NCwgMHhhZCwgMHgwYywKKysJCQkgICAgIDB4ODcsIDB4MDMsIDB4OGMsIDB4MjQsIDB4YzYsIDB4ZDAsIDB4ZDQsIDB4YjIgfSwKKysJCS5wdWJsaWMgPSB7IDB4ZGEsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfSwKKysJCS5yZXN1bHQgPSB7IDB4Y2MsIDB4MWYsIDB4NDAsIDB4ZDcsIDB4NDMsIDB4Y2QsIDB4YzIsIDB4MjMsCisrCQkJICAgIDB4MGUsIDB4MTAsIDB4NDMsIDB4ZGEsIDB4YmEsIDB4OGIsIDB4NzUsIDB4ZTgsCisrCQkJICAgIDB4MTAsIDB4ZjEsIDB4ZmIsIDB4YWIsIDB4N2YsIDB4MjUsIDB4NTIsIDB4NjksCisrCQkJICAgIDB4YmQsIDB4OWUsIDB4YmIsIDB4MjksIDB4ZTYsIDB4YmYsIDB4NDksIDB4NGYgfSwKKysJCS52YWxpZCA9IHRydWUKKysJfSwKKysJLyogd3ljaGVwcm9vZiAtIHB1YmxpYyBrZXkgPj0gcCAqLworKwl7CisrCQkucHJpdmF0ZSA9IHsgMHhhMCwgMHgzNCwgMHhmNiwgMHg4NCwgMHhmYSwgMHg2MywgMHgxZSwgMHgxYSwKKysJCQkgICAgIDB4MzQsIDB4ODEsIDB4MTgsIDB4YzEsIDB4Y2UsIDB4NGMsIDB4OTgsIDB4MjMsCisrCQkJICAgICAweDFmLCAweDJkLCAweDllLCAweGVjLCAweDliLCAweGE1LCAweDM2LCAweDViLAorKwkJCSAgICAgMHg0YSwgMHgwNSwgMHhkNiwgMHg5YSwgMHg3OCwgMHg1YiwgMHgwNywgMHg5NiB9LAorKwkJLnB1YmxpYyA9IHsgMHhkYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9LAorKwkJLnJlc3VsdCA9IHsgMHg1NCwgMHg5OSwgMHg4ZSwgMHhlNCwgMHgzYSwgMHg1YiwgMHgwMCwgMHg3YiwKKysJCQkgICAgMHhmNCwgMHg5OSwgMHhmMCwgMHg3OCwgMHhlNywgMHgzNiwgMHg1MiwgMHg0NCwKKysJCQkgICAgMHgwMCwgMHhhOCwgMHhiNSwgMHhjNywgMHhlOSwgMHhiOSwgMHhiNCwgMHgzNywKKysJCQkgICAgMHg3MSwgMHg3NCwgMHg4YywgMHg3YywgMHhkZiwgMHg4OCwgMHgwNCwgMHgxMiB9LAorKwkJLnZhbGlkID0gdHJ1ZQorKwl9LAorKwkvKiB3eWNoZXByb29mIC0gcHVibGljIGtleSA+PSBwICovCisrCXsKKysJCS5wcml2YXRlID0geyAweDMwLCAweGI2LCAweGM2LCAweGEwLCAweGYyLCAweGZmLCAweGE2LCAweDgwLAorKwkJCSAgICAgMHg3NiwgMHg4ZiwgMHg5OSwgMHgyYiwgMHhhOCwgMHg5ZSwgMHgxNSwgMHgyZCwKKysJCQkgICAgIDB4NWIsIDB4YzksIDB4ODksIDB4M2QsIDB4MzgsIDB4YzksIDB4MTEsIDB4OWIsCisrCQkJICAgICAweGU0LCAweGY3LCAweDY3LCAweGJmLCAweGFiLCAweDZlLCAweDBjLCAweGE1IH0sCisrCQkucHVibGljID0geyAweGRjLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmIH0sCisrCQkucmVzdWx0ID0geyAweGVhLCAweGQ5LCAweGIzLCAweDhlLCAweGZkLCAweGQ3LCAweDIzLCAweDYzLAorKwkJCSAgICAweDc5LCAweDM0LCAweGU1LCAweDVhLCAweGI3LCAweDE3LCAweGE3LCAweGFlLAorKwkJCSAgICAweDA5LCAweGViLCAweDg2LCAweGEyLCAweDFkLCAweGMzLCAweDZhLCAweDNmLAorKwkJCSAgICAweGVlLCAweGI4LCAweDhiLCAweDc1LCAweDllLCAweDM5LCAweDFlLCAweDA5IH0sCisrCQkudmFsaWQgPSB0cnVlCisrCX0sCisrCS8qIHd5Y2hlcHJvb2YgLSBwdWJsaWMga2V5ID49IHAgKi8KKysJeworKwkJLnByaXZhdGUgPSB7IDB4OTAsIDB4MWIsIDB4OWQsIDB4Y2YsIDB4ODgsIDB4MWUsIDB4MDEsIDB4ZTAsCisrCQkJICAgICAweDI3LCAweDU3LCAweDUwLCAweDM1LCAweGQ0LCAweDBiLCAweDQzLCAweGJkLAorKwkJCSAgICAgMHhjMSwgMHhjNSwgMHgyNCwgMHgyZSwgMHgwMywgMHgwOCwgMHg0NywgMHg0OSwKKysJCQkgICAgIDB4NWIsIDB4MGMsIDB4NzIsIDB4ODYsIDB4NDYsIDB4OWIsIDB4NjUsIDB4OTEgfSwKKysJCS5wdWJsaWMgPSB7IDB4ZWEsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfSwKKysJCS5yZXN1bHQgPSB7IDB4NjAsIDB4MmYsIDB4ZjQsIDB4MDcsIDB4ODksIDB4YjUsIDB4NGIsIDB4NDEsCisrCQkJICAgIDB4ODAsIDB4NTksIDB4MTUsIDB4ZmUsIDB4MmEsIDB4NjIsIDB4MjEsIDB4ZjAsCisrCQkJICAgIDB4N2EsIDB4NTAsIDB4ZmYsIDB4YzIsIDB4YzMsIDB4ZmMsIDB4OTQsIDB4Y2YsCisrCQkJICAgIDB4NjEsIDB4ZjEsIDB4M2QsIDB4NzksIDB4MDQsIDB4ZTgsIDB4OGUsIDB4MGUgfSwKKysJCS52YWxpZCA9IHRydWUKKysJfSwKKysJLyogd3ljaGVwcm9vZiAtIHB1YmxpYyBrZXkgPj0gcCAqLworKwl7CisrCQkucHJpdmF0ZSA9IHsgMHg4MCwgMHg0NiwgMHg2NywgMHg3YywgMHgyOCwgMHhmZCwgMHg4MiwgMHhjOSwKKysJCQkgICAgIDB4YTEsIDB4YmQsIDB4YjcsIDB4MWEsIDB4MWEsIDB4MWEsIDB4MzQsIDB4ZmEsCisrCQkJICAgICAweGJhLCAweDEyLCAweDI1LCAweGUyLCAweDUwLCAweDdmLCAweGUzLCAweGY1LAorKwkJCSAgICAgMHg0ZCwgMHgxMCwgMHhiZCwgMHg1YiwgMHgwZCwgMHg4NiwgMHg1ZiwgMHg4ZSB9LAorKwkJLnB1YmxpYyA9IHsgMHhlYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9LAorKwkJLnJlc3VsdCA9IHsgMHhlMCwgMHgwYSwgMHhlOCwgMHhiMSwgMHg0MywgMHg0NywgMHgxMiwgMHg0NywKKysJCQkgICAgMHhiYSwgMHgyNCwgMHhmMSwgMHgyYywgMHg4OCwgMHg1NSwgMHgzNiwgMHhjMywKKysJCQkgICAgMHhjYiwgMHg5OCwgMHgxYiwgMHg1OCwgMHhlMSwgMHhlNSwgMHg2YiwgMHgyYiwKKysJCQkgICAgMHhhZiwgMHgzNSwgMHhjMSwgMHgyYSwgMHhlMSwgMHhmNywgMHg5YywgMHgyNiB9LAorKwkJLnZhbGlkID0gdHJ1ZQorKwl9LAorKwkvKiB3eWNoZXByb29mIC0gcHVibGljIGtleSA+PSBwICovCisrCXsKKysJCS5wcml2YXRlID0geyAweDYwLCAweDJmLCAweDdlLCAweDJmLCAweDY4LCAweGE4LCAweDQ2LCAweGI4LAorKwkJCSAgICAgMHgyYywgMHhjMiwgMHg2OSwgMHhiMSwgMHhkNCwgMHg4ZSwgMHg5MywgMHg5OCwKKysJCQkgICAgIDB4ODYsIDB4YWUsIDB4NTQsIDB4ZmQsIDB4NjMsIDB4NmMsIDB4MWYsIDB4ZTAsCisrCQkJICAgICAweDc0LCAweGQ3LCAweDEwLCAweDEyLCAweDdkLCAweDQ3LCAweDI0LCAweDkxIH0sCisrCQkucHVibGljID0geyAweGVmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmIH0sCisrCQkucmVzdWx0ID0geyAweDk4LCAweGNiLCAweDliLCAweDUwLCAweGRkLCAweDNmLCAweGMyLCAweGIwLAorKwkJCSAgICAweGQ0LCAweGYyLCAweGQyLCAweGJmLCAweDdjLCAweDVjLCAweGZkLCAweGQxLAorKwkJCSAgICAweDBjLCAweDhmLCAweGNkLCAweDMxLCAweGZjLCAweDQwLCAweGFmLCAweDFhLAorKwkJCSAgICAweGQ0LCAweDRmLCAweDQ3LCAweGMxLCAweDMxLCAweDM3LCAweDYzLCAweDYyIH0sCisrCQkudmFsaWQgPSB0cnVlCisrCX0sCisrCS8qIHd5Y2hlcHJvb2YgLSBwdWJsaWMga2V5ID49IHAgKi8KKysJeworKwkJLnByaXZhdGUgPSB7IDB4NjAsIDB4ODgsIDB4N2IsIDB4M2QsIDB4YzcsIDB4MjQsIDB4NDMsIDB4MDIsCisrCQkJICAgICAweDZlLCAweGJlLCAweGRiLCAweGJiLCAweGI3LCAweDA2LCAweDY1LCAweGY0LAorKwkJCSAgICAgMHgyYiwgMHg4NywgMHhhZCwgMHhkMSwgMHg0NCwgMHgwZSwgMHg3NywgMHg2OCwKKysJCQkgICAgIDB4ZmIsIDB4ZDcsIDB4ZTgsIDB4ZTIsIDB4Y2UsIDB4NWYsIDB4NjMsIDB4OWQgfSwKKysJCS5wdWJsaWMgPSB7IDB4ZjAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfSwKKysJCS5yZXN1bHQgPSB7IDB4MzgsIDB4ZDYsIDB4MzAsIDB4NGMsIDB4NGEsIDB4N2UsIDB4NmQsIDB4OWYsCisrCQkJICAgIDB4NzksIDB4NTksIDB4MzMsIDB4NGYsIDB4YjUsIDB4MjQsIDB4NWIsIDB4ZDIsCisrCQkJICAgIDB4YzcsIDB4NTQsIDB4NTIsIDB4NWQsIDB4NGMsIDB4OTEsIDB4ZGIsIDB4OTUsCisrCQkJICAgIDB4MDIsIDB4MDYsIDB4OTIsIDB4NjIsIDB4MzQsIDB4YzEsIDB4ZjYsIDB4MzMgfSwKKysJCS52YWxpZCA9IHRydWUKKysJfSwKKysJLyogd3ljaGVwcm9vZiAtIHB1YmxpYyBrZXkgPj0gcCAqLworKwl7CisrCQkucHJpdmF0ZSA9IHsgMHg3OCwgMHhkMywgMHgxZCwgMHhmYSwgMHg4NSwgMHg0NCwgMHg5NywgMHhkNywKKysJCQkgICAgIDB4MmQsIDB4OGQsIDB4ZWYsIDB4OGEsIDB4MWIsIDB4N2YsIDB4YjAsIDB4MDYsCisrCQkJICAgICAweGNlLCAweGMyLCAweGQ4LCAweGM0LCAweDkyLCAweDQ2LCAweDQ3LCAweGM5LAorKwkJCSAgICAgMHgzOCwgMHgxNCwgMHhhZSwgMHg1NiwgMHhmYSwgMHhlZCwgMHhhNCwgMHg5NSB9LAorKwkJLnB1YmxpYyA9IHsgMHhmMSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9LAorKwkJLnJlc3VsdCA9IHsgMHg3OCwgMHg2YywgMHhkNSwgMHg0OSwgMHg5NiwgMHhmMCwgMHgxNCwgMHhhNSwKKysJCQkgICAgMHhhMCwgMHgzMSwgMHhlYywgMHgxNCwgMHhkYiwgMHg4MSwgMHgyZSwgMHhkMCwKKysJCQkgICAgMHg4MywgMHg1NSwgMHgwNiwgMHgxZiwgMHhkYiwgMHg1ZCwgMHhlNiwgMHg4MCwKKysJCQkgICAgMHhhOCwgMHgwMCwgMHhhYywgMHg1MiwgMHgxZiwgMHgzMSwgMHg4ZSwgMHgyMyB9LAorKwkJLnZhbGlkID0gdHJ1ZQorKwl9LAorKwkvKiB3eWNoZXByb29mIC0gcHVibGljIGtleSA+PSBwICovCisrCXsKKysJCS5wcml2YXRlID0geyAweGMwLCAweDRjLCAweDViLCAweGFlLCAweGZhLCAweDgzLCAweDAyLCAweGRkLAorKwkJCSAgICAgMHhkZSwgMHhkNiwgMHhhNCwgMHhiYiwgMHg5NSwgMHg3NywgMHg2MSwgMHhiNCwKKysJCQkgICAgIDB4ZWIsIDB4OTcsIDB4YWUsIDB4ZmEsIDB4NGYsIDB4YzMsIDB4YjgsIDB4MDQsCisrCQkJICAgICAweDMwLCAweDg1LCAweGY5LCAweDZhLCAweDU2LCAweDU5LCAweGIzLCAweGE1IH0sCisrCQkucHVibGljID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmIH0sCisrCQkucmVzdWx0ID0geyAweDI5LCAweGFlLCAweDhiLCAweGM3LCAweDNlLCAweDliLCAweDEwLCAweGEwLAorKwkJCSAgICAweDhiLCAweDRmLCAweDY4LCAweDFjLCAweDQzLCAweGMzLCAweGUwLCAweGFjLAorKwkJCSAgICAweDFhLCAweDE3LCAweDFkLCAweDMxLCAweGIzLCAweDhmLCAweDFhLCAweDQ4LAorKwkJCSAgICAweGVmLCAweGJhLCAweDI5LCAweGFlLCAweDYzLCAweDllLCAweGExLCAweDM0IH0sCisrCQkudmFsaWQgPSB0cnVlCisrCX0sCisrCS8qIHd5Y2hlcHJvb2YgLSBSRkMgNzc0OCAqLworKwl7CisrCQkucHJpdmF0ZSA9IHsgMHhhMCwgMHg0NiwgMHhlMywgMHg2YiwgMHhmMCwgMHg1MiwgMHg3YywgMHg5ZCwKKysJCQkgICAgIDB4M2IsIDB4MTYsIDB4MTUsIDB4NGIsIDB4ODIsIDB4NDYsIDB4NWUsIDB4ZGQsCisrCQkJICAgICAweDYyLCAweDE0LCAweDRjLCAweDBhLCAweGMxLCAweGZjLCAweDVhLCAweDE4LAorKwkJCSAgICAgMHg1MCwgMHg2YSwgMHgyMiwgMHg0NCwgMHhiYSwgMHg0NCwgMHg5YSwgMHg0NCB9LAorKwkJLnB1YmxpYyA9IHsgMHhlNiwgMHhkYiwgMHg2OCwgMHg2NywgMHg1OCwgMHgzMCwgMHgzMCwgMHhkYiwKKysJCQkgICAgMHgzNSwgMHg5NCwgMHhjMSwgMHhhNCwgMHgyNCwgMHhiMSwgMHg1ZiwgMHg3YywKKysJCQkgICAgMHg3MiwgMHg2NiwgMHgyNCwgMHhlYywgMHgyNiwgMHhiMywgMHgzNSwgMHgzYiwKKysJCQkgICAgMHgxMCwgMHhhOSwgMHgwMywgMHhhNiwgMHhkMCwgMHhhYiwgMHgxYywgMHg0YyB9LAorKwkJLnJlc3VsdCA9IHsgMHhjMywgMHhkYSwgMHg1NSwgMHgzNywgMHg5ZCwgMHhlOSwgMHhjNiwgMHg5MCwKKysJCQkgICAgMHg4ZSwgMHg5NCwgMHhlYSwgMHg0ZCwgMHhmMiwgMHg4ZCwgMHgwOCwgMHg0ZiwKKysJCQkgICAgMHgzMiwgMHhlYywgMHhjZiwgMHgwMywgMHg0OSwgMHgxYywgMHg3MSwgMHhmNywKKysJCQkgICAgMHg1NCwgMHhiNCwgMHgwNywgMHg1NSwgMHg3NywgMHhhMiwgMHg4NSwgMHg1MiB9LAorKwkJLnZhbGlkID0gdHJ1ZQorKwl9LAorKwkvKiB3eWNoZXByb29mIC0gUkZDIDc3NDggKi8KKysJeworKwkJLnByaXZhdGUgPSB7IDB4NDgsIDB4NjYsIDB4ZTksIDB4ZDQsIDB4ZDEsIDB4YjQsIDB4NjcsIDB4M2MsCisrCQkJICAgICAweDVhLCAweGQyLCAweDI2LCAweDkxLCAweDk1LCAweDdkLCAweDZhLCAweGY1LAorKwkJCSAgICAgMHhjMSwgMHgxYiwgMHg2NCwgMHgyMSwgMHhlMCwgMHhlYSwgMHgwMSwgMHhkNCwKKysJCQkgICAgIDB4MmMsIDB4YTQsIDB4MTYsIDB4OWUsIDB4NzksIDB4MTgsIDB4YmEsIDB4NGQgfSwKKysJCS5wdWJsaWMgPSB7IDB4ZTUsIDB4MjEsIDB4MGYsIDB4MTIsIDB4NzgsIDB4NjgsIDB4MTEsIDB4ZDMsCisrCQkJICAgIDB4ZjQsIDB4YjcsIDB4OTUsIDB4OWQsIDB4MDUsIDB4MzgsIDB4YWUsIDB4MmMsCisrCQkJICAgIDB4MzEsIDB4ZGIsIDB4ZTcsIDB4MTAsIDB4NmYsIDB4YzAsIDB4M2MsIDB4M2UsCisrCQkJICAgIDB4ZmMsIDB4NGMsIDB4ZDUsIDB4NDksIDB4YzcsIDB4MTUsIDB4YTQsIDB4MTMgfSwKKysJCS5yZXN1bHQgPSB7IDB4OTUsIDB4Y2IsIDB4ZGUsIDB4OTQsIDB4NzYsIDB4ZTgsIDB4OTAsIDB4N2QsCisrCQkJICAgIDB4N2EsIDB4YWQsIDB4ZTQsIDB4NWMsIDB4YjQsIDB4YjgsIDB4NzMsIDB4ZjgsCisrCQkJICAgIDB4OGIsIDB4NTksIDB4NWEsIDB4NjgsIDB4NzksIDB4OWYsIDB4YTEsIDB4NTIsCisrCQkJICAgIDB4ZTYsIDB4ZjgsIDB4ZjcsIDB4NjQsIDB4N2EsIDB4YWMsIDB4NzksIDB4NTcgfSwKKysJCS52YWxpZCA9IHRydWUKKysJfSwKKysJLyogd3ljaGVwcm9vZiAtIGVkZ2UgY2FzZSBmb3Igc2hhcmVkIHNlY3JldCAqLworKwl7CisrCQkucHJpdmF0ZSA9IHsgMHhhMCwgMHhhNCwgMHhmMSwgMHgzMCwgMHhiOSwgMHg4YSwgMHg1YiwgMHhlNCwKKysJCQkgICAgIDB4YjEsIDB4Y2UsIDB4ZGIsIDB4N2MsIDB4YjgsIDB4NTUsIDB4ODQsIDB4YTMsCisrCQkJICAgICAweDUyLCAweDBlLCAweDE0LCAweDJkLCAweDQ3LCAweDRkLCAweGM5LCAweGNjLAorKwkJCSAgICAgMHhiOSwgMHgwOSwgMHhhMCwgMHg3MywgMHhhOSwgMHg3NiwgMHhiZiwgMHg2MyB9LAorKwkJLnB1YmxpYyA9IHsgMHgwYSwgMHhiNCwgMHhlNywgMHg2MywgMHg4MCwgMHhkOCwgMHg0ZCwgMHhkZSwKKysJCQkgICAgMHg0ZiwgMHg2OCwgMHgzMywgMHhjNSwgMHg4ZiwgMHgyYSwgMHg5ZiwgMHhiOCwKKysJCQkgICAgMHhmOCwgMHgzYiwgMHhiMCwgMHgxNiwgMHg5YiwgMHgxNywgMHgyYiwgMHhlNCwKKysJCQkgICAgMHhiNiwgMHhlMCwgMHg1OSwgMHgyOCwgMHg4NywgMHg3NCwgMHgxYSwgMHgzNiB9LAorKwkJLnJlc3VsdCA9IHsgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorKwkJLnZhbGlkID0gdHJ1ZQorKwl9LAorKwkvKiB3eWNoZXByb29mIC0gZWRnZSBjYXNlIGZvciBzaGFyZWQgc2VjcmV0ICovCisrCXsKKysJCS5wcml2YXRlID0geyAweGEwLCAweGE0LCAweGYxLCAweDMwLCAweGI5LCAweDhhLCAweDViLCAweGU0LAorKwkJCSAgICAgMHhiMSwgMHhjZSwgMHhkYiwgMHg3YywgMHhiOCwgMHg1NSwgMHg4NCwgMHhhMywKKysJCQkgICAgIDB4NTIsIDB4MGUsIDB4MTQsIDB4MmQsIDB4NDcsIDB4NGQsIDB4YzksIDB4Y2MsCisrCQkJICAgICAweGI5LCAweDA5LCAweGEwLCAweDczLCAweGE5LCAweDc2LCAweGJmLCAweDYzIH0sCisrCQkucHVibGljID0geyAweDg5LCAweGUxLCAweDBkLCAweDU3LCAweDAxLCAweGI0LCAweDMzLCAweDdkLAorKwkJCSAgICAweDJkLCAweDAzLCAweDIxLCAweDgxLCAweDUzLCAweDhiLCAweDEwLCAweDY0LAorKwkJCSAgICAweGJkLCAweDQwLCAweDg0LCAweDQwLCAweDFjLCAweGVjLCAweGExLCAweGZkLAorKwkJCSAgICAweDEyLCAweDY2LCAweDNhLCAweDE5LCAweDU5LCAweDM4LCAweDgwLCAweDAwIH0sCisrCQkucmVzdWx0ID0geyAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisrCQkudmFsaWQgPSB0cnVlCisrCX0sCisrCS8qIHd5Y2hlcHJvb2YgLSBlZGdlIGNhc2UgZm9yIHNoYXJlZCBzZWNyZXQgKi8KKysJeworKwkJLnByaXZhdGUgPSB7IDB4YTAsIDB4YTQsIDB4ZjEsIDB4MzAsIDB4YjksIDB4OGEsIDB4NWIsIDB4ZTQsCisrCQkJICAgICAweGIxLCAweGNlLCAweGRiLCAweDdjLCAweGI4LCAweDU1LCAweDg0LCAweGEzLAorKwkJCSAgICAgMHg1MiwgMHgwZSwgMHgxNCwgMHgyZCwgMHg0NywgMHg0ZCwgMHhjOSwgMHhjYywKKysJCQkgICAgIDB4YjksIDB4MDksIDB4YTAsIDB4NzMsIDB4YTksIDB4NzYsIDB4YmYsIDB4NjMgfSwKKysJCS5wdWJsaWMgPSB7IDB4MmIsIDB4NTUsIDB4ZDMsIDB4YWEsIDB4NGEsIDB4OGYsIDB4ODAsIDB4YzgsCisrCQkJICAgIDB4YzAsIDB4YjIsIDB4YWUsIDB4NWYsIDB4OTMsIDB4M2UsIDB4ODUsIDB4YWYsCisrCQkJICAgIDB4NDksIDB4YmUsIDB4YWMsIDB4MzYsIDB4YzIsIDB4ZmEsIDB4NzMsIDB4OTQsCisrCQkJICAgIDB4YmEsIDB4YjcsIDB4NmMsIDB4ODksIDB4MzMsIDB4ZjgsIDB4ZjgsIDB4MWQgfSwKKysJCS5yZXN1bHQgPSB7IDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCQkJICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKysJCS52YWxpZCA9IHRydWUKKysJfSwKKysJLyogd3ljaGVwcm9vZiAtIGVkZ2UgY2FzZSBmb3Igc2hhcmVkIHNlY3JldCAqLworKwl7CisrCQkucHJpdmF0ZSA9IHsgMHhhMCwgMHhhNCwgMHhmMSwgMHgzMCwgMHhiOSwgMHg4YSwgMHg1YiwgMHhlNCwKKysJCQkgICAgIDB4YjEsIDB4Y2UsIDB4ZGIsIDB4N2MsIDB4YjgsIDB4NTUsIDB4ODQsIDB4YTMsCisrCQkJICAgICAweDUyLCAweDBlLCAweDE0LCAweDJkLCAweDQ3LCAweDRkLCAweGM5LCAweGNjLAorKwkJCSAgICAgMHhiOSwgMHgwOSwgMHhhMCwgMHg3MywgMHhhOSwgMHg3NiwgMHhiZiwgMHg2MyB9LAorKwkJLnB1YmxpYyA9IHsgMHg2MywgMHhlNSwgMHhiMSwgMHhmZSwgMHg5NiwgMHgwMSwgMHhmZSwgMHg4NCwKKysJCQkgICAgMHgzOCwgMHg1ZCwgMHg4OCwgMHg2NiwgMHhiMCwgMHg0MiwgMHgxMiwgMHg2MiwKKysJCQkgICAgMHhmNywgMHg4ZiwgMHhiZiwgMHhhNSwgMHhhZiwgMHhmOSwgMHg1OCwgMHg1ZSwKKysJCQkgICAgMHg2MiwgMHg2NiwgMHg3OSwgMHhiMSwgMHg4NSwgMHg0NywgMHhkOSwgMHg1OSB9LAorKwkJLnJlc3VsdCA9IHsgMHhmZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgzZiB9LAorKwkJLnZhbGlkID0gdHJ1ZQorKwl9LAorKwkvKiB3eWNoZXByb29mIC0gZWRnZSBjYXNlIGZvciBzaGFyZWQgc2VjcmV0ICovCisrCXsKKysJCS5wcml2YXRlID0geyAweGEwLCAweGE0LCAweGYxLCAweDMwLCAweGI5LCAweDhhLCAweDViLCAweGU0LAorKwkJCSAgICAgMHhiMSwgMHhjZSwgMHhkYiwgMHg3YywgMHhiOCwgMHg1NSwgMHg4NCwgMHhhMywKKysJCQkgICAgIDB4NTIsIDB4MGUsIDB4MTQsIDB4MmQsIDB4NDcsIDB4NGQsIDB4YzksIDB4Y2MsCisrCQkJICAgICAweGI5LCAweDA5LCAweGEwLCAweDczLCAweGE5LCAweDc2LCAweGJmLCAweDYzIH0sCisrCQkucHVibGljID0geyAweGU0LCAweDI4LCAweGYzLCAweGRhLCAweGMxLCAweDc4LCAweDA5LCAweGY4LAorKwkJCSAgICAweDI3LCAweGE1LCAweDIyLCAweGNlLCAweDMyLCAweDM1LCAweDUwLCAweDU4LAorKwkJCSAgICAweGQwLCAweDczLCAweDY5LCAweDM2LCAweDRhLCAweGE3LCAweDg5LCAweDAyLAorKwkJCSAgICAweGVlLCAweDEwLCAweDEzLCAweDliLCAweDlmLCAweDlkLCAweGQ2LCAweDUzIH0sCisrCQkucmVzdWx0ID0geyAweGZjLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDNmIH0sCisrCQkudmFsaWQgPSB0cnVlCisrCX0sCisrCS8qIHd5Y2hlcHJvb2YgLSBlZGdlIGNhc2UgZm9yIHNoYXJlZCBzZWNyZXQgKi8KKysJeworKwkJLnByaXZhdGUgPSB7IDB4YTAsIDB4YTQsIDB4ZjEsIDB4MzAsIDB4YjksIDB4OGEsIDB4NWIsIDB4ZTQsCisrCQkJICAgICAweGIxLCAweGNlLCAweGRiLCAweDdjLCAweGI4LCAweDU1LCAweDg0LCAweGEzLAorKwkJCSAgICAgMHg1MiwgMHgwZSwgMHgxNCwgMHgyZCwgMHg0NywgMHg0ZCwgMHhjOSwgMHhjYywKKysJCQkgICAgIDB4YjksIDB4MDksIDB4YTAsIDB4NzMsIDB4YTksIDB4NzYsIDB4YmYsIDB4NjMgfSwKKysJCS5wdWJsaWMgPSB7IDB4YjMsIDB4YjUsIDB4MGUsIDB4M2UsIDB4ZDMsIDB4YTQsIDB4MDcsIDB4YjksCisrCQkJICAgIDB4NWQsIDB4ZTksIDB4NDIsIDB4ZWYsIDB4NzQsIDB4NTcsIDB4NWIsIDB4NWEsCisrCQkJICAgIDB4YjgsIDB4YTEsIDB4MGMsIDB4MDksIDB4ZWUsIDB4MTAsIDB4MzUsIDB4NDQsCisrCQkJICAgIDB4ZDYsIDB4MGIsIDB4ZGYsIDB4ZWQsIDB4ODEsIDB4MzgsIDB4YWIsIDB4MmIgfSwKKysJCS5yZXN1bHQgPSB7IDB4ZjksIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4M2YgfSwKKysJCS52YWxpZCA9IHRydWUKKysJfSwKKysJLyogd3ljaGVwcm9vZiAtIGVkZ2UgY2FzZSBmb3Igc2hhcmVkIHNlY3JldCAqLworKwl7CisrCQkucHJpdmF0ZSA9IHsgMHhhMCwgMHhhNCwgMHhmMSwgMHgzMCwgMHhiOSwgMHg4YSwgMHg1YiwgMHhlNCwKKysJCQkgICAgIDB4YjEsIDB4Y2UsIDB4ZGIsIDB4N2MsIDB4YjgsIDB4NTUsIDB4ODQsIDB4YTMsCisrCQkJICAgICAweDUyLCAweDBlLCAweDE0LCAweDJkLCAweDQ3LCAweDRkLCAweGM5LCAweGNjLAorKwkJCSAgICAgMHhiOSwgMHgwOSwgMHhhMCwgMHg3MywgMHhhOSwgMHg3NiwgMHhiZiwgMHg2MyB9LAorKwkJLnB1YmxpYyA9IHsgMHgyMSwgMHgzZiwgMHhmZiwgMHhlOSwgMHgzZCwgMHg1ZSwgMHhhOCwgMHhjZCwKKysJCQkgICAgMHgyNCwgMHgyZSwgMHg0NiwgMHgyOCwgMHg0NCwgMHgwMiwgMHg5OSwgMHgyMiwKKysJCQkgICAgMHhjNCwgMHgzYywgMHg3NywgMHhjOSwgMHhlMywgMHhlNCwgMHgyZiwgMHg1NiwKKysJCQkgICAgMHgyZiwgMHg0OCwgMHg1ZCwgMHgyNCwgMHhjNSwgMHgwMSwgMHhhMiwgMHgwYiB9LAorKwkJLnJlc3VsdCA9IHsgMHhmMywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgzZiB9LAorKwkJLnZhbGlkID0gdHJ1ZQorKwl9LAorKwkvKiB3eWNoZXByb29mIC0gZWRnZSBjYXNlIGZvciBzaGFyZWQgc2VjcmV0ICovCisrCXsKKysJCS5wcml2YXRlID0geyAweGEwLCAweGE0LCAweGYxLCAweDMwLCAweGI5LCAweDhhLCAweDViLCAweGU0LAorKwkJCSAgICAgMHhiMSwgMHhjZSwgMHhkYiwgMHg3YywgMHhiOCwgMHg1NSwgMHg4NCwgMHhhMywKKysJCQkgICAgIDB4NTIsIDB4MGUsIDB4MTQsIDB4MmQsIDB4NDcsIDB4NGQsIDB4YzksIDB4Y2MsCisrCQkJICAgICAweGI5LCAweDA5LCAweGEwLCAweDczLCAweGE5LCAweDc2LCAweGJmLCAweDYzIH0sCisrCQkucHVibGljID0geyAweDkxLCAweGIyLCAweDMyLCAweGExLCAweDc4LCAweGIzLCAweGNkLCAweDUzLAorKwkJCSAgICAweDA5LCAweDMyLCAweDQ0LCAweDFlLCAweDYxLCAweDM5LCAweDQxLCAweDhmLAorKwkJCSAgICAweDcyLCAweDE3LCAweDIyLCAweDkyLCAweGYxLCAweGRhLCAweDRjLCAweDE4LAorKwkJCSAgICAweDM0LCAweGZjLCAweDVlLCAweGJmLCAweGVmLCAweGI1LCAweDFlLCAweDNmIH0sCisrCQkucmVzdWx0ID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDAzIH0sCisrCQkudmFsaWQgPSB0cnVlCisrCX0sCisrCS8qIHd5Y2hlcHJvb2YgLSBlZGdlIGNhc2UgZm9yIHNoYXJlZCBzZWNyZXQgKi8KKysJeworKwkJLnByaXZhdGUgPSB7IDB4YTAsIDB4YTQsIDB4ZjEsIDB4MzAsIDB4YjksIDB4OGEsIDB4NWIsIDB4ZTQsCisrCQkJICAgICAweGIxLCAweGNlLCAweGRiLCAweDdjLCAweGI4LCAweDU1LCAweDg0LCAweGEzLAorKwkJCSAgICAgMHg1MiwgMHgwZSwgMHgxNCwgMHgyZCwgMHg0NywgMHg0ZCwgMHhjOSwgMHhjYywKKysJCQkgICAgIDB4YjksIDB4MDksIDB4YTAsIDB4NzMsIDB4YTksIDB4NzYsIDB4YmYsIDB4NjMgfSwKKysJCS5wdWJsaWMgPSB7IDB4MDQsIDB4NWMsIDB4NmUsIDB4MTEsIDB4YzUsIDB4ZDMsIDB4MzIsIDB4NTUsCisrCQkJICAgIDB4NmMsIDB4NzgsIDB4MjIsIDB4ZmUsIDB4OTQsIDB4ZWIsIDB4ZjgsIDB4OWIsCisrCQkJICAgIDB4NTYsIDB4YTMsIDB4ODcsIDB4OGQsIDB4YzIsIDB4N2MsIDB4YTAsIDB4NzksCisrCQkJICAgIDB4MTAsIDB4MzAsIDB4NTgsIDB4ODQsIDB4OWYsIDB4YWIsIDB4Y2IsIDB4NGYgfSwKKysJCS5yZXN1bHQgPSB7IDB4ZTUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YgfSwKKysJCS52YWxpZCA9IHRydWUKKysJfSwKKysJLyogd3ljaGVwcm9vZiAtIGVkZ2UgY2FzZSBmb3Igc2hhcmVkIHNlY3JldCAqLworKwl7CisrCQkucHJpdmF0ZSA9IHsgMHhhMCwgMHhhNCwgMHhmMSwgMHgzMCwgMHhiOSwgMHg4YSwgMHg1YiwgMHhlNCwKKysJCQkgICAgIDB4YjEsIDB4Y2UsIDB4ZGIsIDB4N2MsIDB4YjgsIDB4NTUsIDB4ODQsIDB4YTMsCisrCQkJICAgICAweDUyLCAweDBlLCAweDE0LCAweDJkLCAweDQ3LCAweDRkLCAweGM5LCAweGNjLAorKwkJCSAgICAgMHhiOSwgMHgwOSwgMHhhMCwgMHg3MywgMHhhOSwgMHg3NiwgMHhiZiwgMHg2MyB9LAorKwkJLnB1YmxpYyA9IHsgMHgxYywgMHhhMiwgMHgxOSwgMHgwYiwgMHg3MSwgMHgxNiwgMHgzNSwgMHgzOSwKKysJCQkgICAgMHgwNiwgMHgzYywgMHgzNSwgMHg3NywgMHgzYiwgMHhkYSwgMHgwYywgMHg5YywKKysJCQkgICAgMHg5MiwgMHg4ZSwgMHg5MSwgMHgzNiwgMHhmMCwgMHg2MiwgMHgwYSwgMHhlYiwKKysJCQkgICAgMHgwOSwgMHgzZiwgMHgwOSwgMHg5MSwgMHg5NywgMHhiNywgMHhmNywgMHg0ZSB9LAorKwkJLnJlc3VsdCA9IHsgMHhlMywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiB9LAorKwkJLnZhbGlkID0gdHJ1ZQorKwl9LAorKwkvKiB3eWNoZXByb29mIC0gZWRnZSBjYXNlIGZvciBzaGFyZWQgc2VjcmV0ICovCisrCXsKKysJCS5wcml2YXRlID0geyAweGEwLCAweGE0LCAweGYxLCAweDMwLCAweGI5LCAweDhhLCAweDViLCAweGU0LAorKwkJCSAgICAgMHhiMSwgMHhjZSwgMHhkYiwgMHg3YywgMHhiOCwgMHg1NSwgMHg4NCwgMHhhMywKKysJCQkgICAgIDB4NTIsIDB4MGUsIDB4MTQsIDB4MmQsIDB4NDcsIDB4NGQsIDB4YzksIDB4Y2MsCisrCQkJICAgICAweGI5LCAweDA5LCAweGEwLCAweDczLCAweGE5LCAweDc2LCAweGJmLCAweDYzIH0sCisrCQkucHVibGljID0geyAweGY3LCAweDZlLCAweDkwLCAweDEwLCAweGFjLCAweDMzLCAweGM1LCAweDA0LAorKwkJCSAgICAweDNiLCAweDJkLCAweDNiLCAweDc2LCAweGE4LCAweDQyLCAweDE3LCAweDEwLAorKwkJCSAgICAweDAwLCAweGM0LCAweDkxLCAweDYyLCAweDIyLCAweGU5LCAweGU4LCAweDU4LAorKwkJCSAgICAweDk3LCAweGEwLCAweGFlLCAweGM3LCAweGY2LCAweDM1LCAweDBiLCAweDNjIH0sCisrCQkucmVzdWx0ID0geyAweGRkLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkJCSAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDdmIH0sCisrCQkudmFsaWQgPSB0cnVlCisrCX0sCisrCS8qIHd5Y2hlcHJvb2YgLSBlZGdlIGNhc2UgZm9yIHNoYXJlZCBzZWNyZXQgKi8KKysJeworKwkJLnByaXZhdGUgPSB7IDB4YTAsIDB4YTQsIDB4ZjEsIDB4MzAsIDB4YjksIDB4OGEsIDB4NWIsIDB4ZTQsCisrCQkJICAgICAweGIxLCAweGNlLCAweGRiLCAweDdjLCAweGI4LCAweDU1LCAweDg0LCAweGEzLAorKwkJCSAgICAgMHg1MiwgMHgwZSwgMHgxNCwgMHgyZCwgMHg0NywgMHg0ZCwgMHhjOSwgMHhjYywKKysJCQkgICAgIDB4YjksIDB4MDksIDB4YTAsIDB4NzMsIDB4YTksIDB4NzYsIDB4YmYsIDB4NjMgfSwKKysJCS5wdWJsaWMgPSB7IDB4YmIsIDB4NzIsIDB4NjgsIDB4OGQsIDB4OGYsIDB4OGEsIDB4YTcsIDB4YTMsCisrCQkJICAgIDB4OWMsIDB4ZDYsIDB4MDYsIDB4MGMsIDB4ZDUsIDB4YzgsIDB4MDksIDB4M2MsCisrCQkJICAgIDB4ZGUsIDB4YzYsIDB4ZmUsIDB4MzQsIDB4MTksIDB4MzcsIDB4YzMsIDB4ODgsCisrCQkJICAgIDB4NmEsIDB4OTksIDB4MzQsIDB4NmMsIDB4ZDAsIDB4N2YsIDB4YWEsIDB4NTUgfSwKKysJCS5yZXN1bHQgPSB7IDB4ZGIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCQkJICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4N2YgfSwKKysJCS52YWxpZCA9IHRydWUKKysJfSwKKysJLyogd3ljaGVwcm9vZiAtIGVkZ2UgY2FzZSBmb3Igc2hhcmVkIHNlY3JldCAqLworKwl7CisrCQkucHJpdmF0ZSA9IHsgMHhhMCwgMHhhNCwgMHhmMSwgMHgzMCwgMHhiOSwgMHg4YSwgMHg1YiwgMHhlNCwKKysJCQkgICAgIDB4YjEsIDB4Y2UsIDB4ZGIsIDB4N2MsIDB4YjgsIDB4NTUsIDB4ODQsIDB4YTMsCisrCQkJICAgICAweDUyLCAweDBlLCAweDE0LCAweDJkLCAweDQ3LCAweDRkLCAweGM5LCAweGNjLAorKwkJCSAgICAgMHhiOSwgMHgwOSwgMHhhMCwgMHg3MywgMHhhOSwgMHg3NiwgMHhiZiwgMHg2MyB9LAorKwkJLnB1YmxpYyA9IHsgMHg4OCwgMHhmZCwgMHhkZSwgMHhhMSwgMHg5MywgMHgzOSwgMHgxYywgMHg2YSwKKysJCQkgICAgMHg1OSwgMHgzMywgMHhlZiwgMHg5YiwgMHg3MSwgMHg5MCwgMHgxNSwgMHg0OSwKKysJCQkgICAgMHg0NCwgMHg3MiwgMHgwNSwgMHhhYSwgMHhlOSwgMHhkYSwgMHg5MiwgMHg4YSwKKysJCQkgICAgMHg2YiwgMHg5MSwgMHhhMywgMHg1MiwgMHhiYSwgMHgxMCwgMHhmNCwgMHgxZiB9LAorKwkJLnJlc3VsdCA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiB9LAorKwkJLnZhbGlkID0gdHJ1ZQorKwl9LAorKwkvKiB3eWNoZXByb29mIC0gZWRnZSBjYXNlIGZvciBzaGFyZWQgc2VjcmV0ICovCisrCXsKKysJCS5wcml2YXRlID0geyAweGEwLCAweGE0LCAweGYxLCAweDMwLCAweGI5LCAweDhhLCAweDViLCAweGU0LAorKwkJCSAgICAgMHhiMSwgMHhjZSwgMHhkYiwgMHg3YywgMHhiOCwgMHg1NSwgMHg4NCwgMHhhMywKKysJCQkgICAgIDB4NTIsIDB4MGUsIDB4MTQsIDB4MmQsIDB4NDcsIDB4NGQsIDB4YzksIDB4Y2MsCisrCQkJICAgICAweGI5LCAweDA5LCAweGEwLCAweDczLCAweGE5LCAweDc2LCAweGJmLCAweDYzIH0sCisrCQkucHVibGljID0geyAweDMwLCAweDNiLCAweDM5LCAweDJmLCAweDE1LCAweDMxLCAweDE2LCAweGNhLAorKwkJCSAgICAweGQ5LCAweGNjLCAweDY4LCAweDJhLCAweDAwLCAweGNjLCAweGM0LCAweDRjLAorKwkJCSAgICAweDk1LCAweGZmLCAweDBkLCAweDNiLCAweGJlLCAweDU2LCAweDhiLCAweGViLAorKwkJCSAgICAweDZjLCAweDRlLCAweDczLCAweDliLCAweGFmLCAweGRjLCAweDJjLCAweDY4IH0sCisrCQkucmVzdWx0ID0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKwkJCSAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwIH0sCisrCQkudmFsaWQgPSB0cnVlCisrCX0sCisrCS8qIHd5Y2hlcHJvb2YgLSBjaGVja2luZyBmb3Igb3ZlcmZsb3cgKi8KKysJeworKwkJLnByaXZhdGUgPSB7IDB4YzgsIDB4MTcsIDB4MjQsIDB4NzAsIDB4NDAsIDB4MDAsIDB4YjIsIDB4NmQsCisrCQkJICAgICAweDMxLCAweDcwLCAweDNjLCAweGM5LCAweDdlLCAweDNhLCAweDM3LCAweDhkLAorKwkJCSAgICAgMHg1NiwgMHhmYSwgMHhkOCwgMHgyMSwgMHg5MywgMHg2MSwgMHhjOCwgMHg4YywKKysJCQkgICAgIDB4Y2EsIDB4OGIsIDB4ZDcsIDB4YzUsIDB4NzEsIDB4OWIsIDB4MTIsIDB4YjIgfSwKKysJCS5wdWJsaWMgPSB7IDB4ZmQsIDB4MzAsIDB4MGEsIDB4ZWIsIDB4NDAsIDB4ZTEsIDB4ZmEsIDB4NTgsCisrCQkJICAgIDB4MjUsIDB4MTgsIDB4NDEsIDB4MmIsIDB4NDksIDB4YjIsIDB4MDgsIDB4YTcsCisrCQkJICAgIDB4ODQsIDB4MmIsIDB4MWUsIDB4MWYsIDB4MDUsIDB4NmEsIDB4MDQsIDB4MDEsCisrCQkJICAgIDB4NzgsIDB4ZWEsIDB4NDEsIDB4NDEsIDB4NTMsIDB4NGYsIDB4NjUsIDB4MmQgfSwKKysJCS5yZXN1bHQgPSB7IDB4YjcsIDB4MzQsIDB4MTAsIDB4NWQsIDB4YzIsIDB4NTcsIDB4NTgsIDB4NWQsCisrCQkJICAgIDB4NzMsIDB4YjUsIDB4NjYsIDB4Y2MsIDB4YjcsIDB4NmYsIDB4MDYsIDB4MjcsCisrCQkJICAgIDB4OTUsIDB4Y2MsIDB4YmUsIDB4YzgsIDB4OTEsIDB4MjgsIDB4ZTUsIDB4MmIsCisrCQkJICAgIDB4MDIsIDB4ZjMsIDB4ZTUsIDB4OTYsIDB4MzksIDB4ZjEsIDB4M2MsIDB4NDYgfSwKKysJCS52YWxpZCA9IHRydWUKKysJfSwKKysJLyogd3ljaGVwcm9vZiAtIGNoZWNraW5nIGZvciBvdmVyZmxvdyAqLworKwl7CisrCQkucHJpdmF0ZSA9IHsgMHhjOCwgMHgxNywgMHgyNCwgMHg3MCwgMHg0MCwgMHgwMCwgMHhiMiwgMHg2ZCwKKysJCQkgICAgIDB4MzEsIDB4NzAsIDB4M2MsIDB4YzksIDB4N2UsIDB4M2EsIDB4MzcsIDB4OGQsCisrCQkJICAgICAweDU2LCAweGZhLCAweGQ4LCAweDIxLCAweDkzLCAweDYxLCAweGM4LCAweDhjLAorKwkJCSAgICAgMHhjYSwgMHg4YiwgMHhkNywgMHhjNSwgMHg3MSwgMHg5YiwgMHgxMiwgMHhiMiB9LAorKwkJLnB1YmxpYyA9IHsgMHhjOCwgMHhlZiwgMHg3OSwgMHhiNSwgMHgxNCwgMHhkNywgMHg2OCwgMHgyNiwKKysJCQkgICAgMHg3NywgMHhiYywgMHg3OSwgMHgzMSwgMHhlMCwgMHg2ZSwgMHhlNSwgMHhjMiwKKysJCQkgICAgMHg3YywgMHg5YiwgMHgzOSwgMHgyYiwgMHg0YSwgMHhlOSwgMHg0OCwgMHg0NCwKKysJCQkgICAgMHg3MywgMHhmNSwgMHg1NCwgMHhlNiwgMHg2NywgMHg4ZSwgMHhjYywgMHgyZSB9LAorKwkJLnJlc3VsdCA9IHsgMHg2NCwgMHg3YSwgMHg0NiwgMHhiNiwgMHhmYywgMHgzZiwgMHg0MCwgMHhkNiwKKysJCQkgICAgMHgyMSwgMHg0MSwgMHhlZSwgMHgzYywgMHhlZSwgMHg3MCwgMHg2YiwgMHg0ZCwKKysJCQkgICAgMHg3YSwgMHg5MiwgMHg3MSwgMHg1OSwgMHgzYSwgMHg3YiwgMHgxNCwgMHgzZSwKKysJCQkgICAgMHg4ZSwgMHgyZSwgMHgyMiwgMHg3OSwgMHg4OCwgMHgzZSwgMHg0NSwgMHg1MCB9LAorKwkJLnZhbGlkID0gdHJ1ZQorKwl9LAorKwkvKiB3eWNoZXByb29mIC0gY2hlY2tpbmcgZm9yIG92ZXJmbG93ICovCisrCXsKKysJCS5wcml2YXRlID0geyAweGM4LCAweDE3LCAweDI0LCAweDcwLCAweDQwLCAweDAwLCAweGIyLCAweDZkLAorKwkJCSAgICAgMHgzMSwgMHg3MCwgMHgzYywgMHhjOSwgMHg3ZSwgMHgzYSwgMHgzNywgMHg4ZCwKKysJCQkgICAgIDB4NTYsIDB4ZmEsIDB4ZDgsIDB4MjEsIDB4OTMsIDB4NjEsIDB4YzgsIDB4OGMsCisrCQkJICAgICAweGNhLCAweDhiLCAweGQ3LCAweGM1LCAweDcxLCAweDliLCAweDEyLCAweGIyIH0sCisrCQkucHVibGljID0geyAweDY0LCAweGFlLCAweGFjLCAweDI1LCAweDA0LCAweDE0LCAweDQ4LCAweDYxLAorKwkJCSAgICAweDUzLCAweDJiLCAweDdiLCAweGJjLCAweGI2LCAweGM4LCAweDdkLCAweDY3LAorKwkJCSAgICAweGRkLCAweDRjLCAweDFmLCAweDA3LCAweGViLCAweGMyLCAweGUwLCAweDZlLAorKwkJCSAgICAweGZmLCAweGI5LCAweDVhLCAweGVjLCAweGM2LCAweDE3LCAweDBiLCAweDJjIH0sCisrCQkucmVzdWx0ID0geyAweDRmLCAweGYwLCAweDNkLCAweDVmLCAweGI0LCAweDNjLCAweGQ4LCAweDY1LAorKwkJCSAgICAweDdhLCAweDNjLCAweGYzLCAweDdjLCAweDEzLCAweDhjLCAweGFkLCAweGNlLAorKwkJCSAgICAweGNjLCAweGU1LCAweDA5LCAweGU0LCAweGViLCAweGEwLCAweDg5LCAweGQwLAorKwkJCSAgICAweGVmLCAweDQwLCAweGI0LCAweGU0LCAweGZiLCAweDk0LCAweDYxLCAweDU1IH0sCisrCQkudmFsaWQgPSB0cnVlCisrCX0sCisrCS8qIHd5Y2hlcHJvb2YgLSBjaGVja2luZyBmb3Igb3ZlcmZsb3cgKi8KKysJeworKwkJLnByaXZhdGUgPSB7IDB4YzgsIDB4MTcsIDB4MjQsIDB4NzAsIDB4NDAsIDB4MDAsIDB4YjIsIDB4NmQsCisrCQkJICAgICAweDMxLCAweDcwLCAweDNjLCAweGM5LCAweDdlLCAweDNhLCAweDM3LCAweDhkLAorKwkJCSAgICAgMHg1NiwgMHhmYSwgMHhkOCwgMHgyMSwgMHg5MywgMHg2MSwgMHhjOCwgMHg4YywKKysJCQkgICAgIDB4Y2EsIDB4OGIsIDB4ZDcsIDB4YzUsIDB4NzEsIDB4OWIsIDB4MTIsIDB4YjIgfSwKKysJCS5wdWJsaWMgPSB7IDB4YmYsIDB4NjgsIDB4ZTMsIDB4NWUsIDB4OWIsIDB4ZGIsIDB4N2UsIDB4ZWUsCisrCQkJICAgIDB4MWIsIDB4NTAsIDB4NTcsIDB4MDIsIDB4MjEsIDB4ODYsIDB4MGYsIDB4NWQsCisrCQkJICAgIDB4Y2QsIDB4YWQsIDB4OGEsIDB4Y2IsIDB4YWIsIDB4MDMsIDB4MWIsIDB4MTQsCisrCQkJICAgIDB4OTcsIDB4NGMsIDB4YzQsIDB4OTAsIDB4MTMsIDB4YzQsIDB4OTgsIDB4MzEgfSwKKysJCS5yZXN1bHQgPSB7IDB4MjEsIDB4Y2UsIDB4ZTUsIDB4MmUsIDB4ZmQsIDB4YmMsIDB4ODEsIDB4MmUsCisrCQkJICAgIDB4MWQsIDB4MDIsIDB4MWEsIDB4NGEsIDB4ZjEsIDB4ZTEsIDB4ZDgsIDB4YmMsCisrCQkJICAgIDB4NGQsIDB4YjMsIDB4YzQsIDB4MDAsIDB4ZTQsIDB4ZDIsIDB4YTIsIDB4YzUsCisrCQkJICAgIDB4NmEsIDB4MzksIDB4MjYsIDB4ZGIsIDB4NGQsIDB4OTksIDB4YzYsIDB4NWIgfSwKKysJCS52YWxpZCA9IHRydWUKKysJfSwKKysJLyogd3ljaGVwcm9vZiAtIGNoZWNraW5nIGZvciBvdmVyZmxvdyAqLworKwl7CisrCQkucHJpdmF0ZSA9IHsgMHhjOCwgMHgxNywgMHgyNCwgMHg3MCwgMHg0MCwgMHgwMCwgMHhiMiwgMHg2ZCwKKysJCQkgICAgIDB4MzEsIDB4NzAsIDB4M2MsIDB4YzksIDB4N2UsIDB4M2EsIDB4MzcsIDB4OGQsCisrCQkJICAgICAweDU2LCAweGZhLCAweGQ4LCAweDIxLCAweDkzLCAweDYxLCAweGM4LCAweDhjLAorKwkJCSAgICAgMHhjYSwgMHg4YiwgMHhkNywgMHhjNSwgMHg3MSwgMHg5YiwgMHgxMiwgMHhiMiB9LAorKwkJLnB1YmxpYyA9IHsgMHg1MywgMHg0NywgMHhjNCwgMHg5MSwgMHgzMywgMHgxYSwgMHg2NCwgMHhiNCwKKysJCQkgICAgMHgzZCwgMHhkYywgMHg2OCwgMHgzMCwgMHgzNCwgMHhlNiwgMHg3NywgMHhmNSwKKysJCQkgICAgMHgzZCwgMHhjMywgMHgyYiwgMHg1MiwgMHhhNSwgMHgyYSwgMHg1NywgMHg3YywKKysJCQkgICAgMHgxNSwgMHhhOCwgMHgzYiwgMHhmMiwgMHg5OCwgMHhlOSwgMHg5ZiwgMHgxOSB9LAorKwkJLnJlc3VsdCA9IHsgMHgxOCwgMHhjYiwgMHg4OSwgMHhlNCwgMHhlMiwgMHgwYywgMHgwYywgMHgyYiwKKysJCQkgICAgMHhkMywgMHgyNCwgMHgzMCwgMHg1MiwgMHg0NSwgMHgyNiwgMHg2YywgMHg5MywKKysJCQkgICAgMHgyNywgMHg2OSwgMHgwYiwgMHhiZSwgMHg3OSwgMHhhYywgMHhiOCwgMHg4ZiwKKysJCQkgICAgMHg1YiwgMHg4ZiwgMHhiMywgMHhmNywgMHg0ZSwgMHhjYSwgMHgzZSwgMHg1MiB9LAorKwkJLnZhbGlkID0gdHJ1ZQorKwl9LAorKwkvKiB3eWNoZXByb29mIC0gcHJpdmF0ZSBrZXkgPT0gLTEgKG1vZCBvcmRlcikgKi8KKysJeworKwkJLnByaXZhdGUgPSB7IDB4YTAsIDB4MjMsIDB4Y2QsIDB4ZDAsIDB4ODMsIDB4ZWYsIDB4NWIsIDB4YjgsCisrCQkJICAgICAweDJmLCAweDEwLCAweGQ2LCAweDJlLCAweDU5LCAweGUxLCAweDVhLCAweDY4LAorKwkJCSAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJCQkgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAgfSwKKysJCS5wdWJsaWMgPSB7IDB4MjUsIDB4OGUsIDB4MDQsIDB4NTIsIDB4M2IsIDB4OGQsIDB4MjUsIDB4M2UsCisrCQkJICAgIDB4ZTYsIDB4NTcsIDB4MTksIDB4ZmMsIDB4NjksIDB4MDYsIDB4YzYsIDB4NTcsCisrCQkJICAgIDB4MTksIDB4MmQsIDB4ODAsIDB4NzEsIDB4N2UsIDB4ZGMsIDB4ODIsIDB4OGYsCisrCQkJICAgIDB4YTAsIDB4YWYsIDB4MjEsIDB4NjgsIDB4NmUsIDB4MmYsIDB4YWEsIDB4NzUgfSwKKysJCS5yZXN1bHQgPSB7IDB4MjUsIDB4OGUsIDB4MDQsIDB4NTIsIDB4M2IsIDB4OGQsIDB4MjUsIDB4M2UsCisrCQkJICAgIDB4ZTYsIDB4NTcsIDB4MTksIDB4ZmMsIDB4NjksIDB4MDYsIDB4YzYsIDB4NTcsCisrCQkJICAgIDB4MTksIDB4MmQsIDB4ODAsIDB4NzEsIDB4N2UsIDB4ZGMsIDB4ODIsIDB4OGYsCisrCQkJICAgIDB4YTAsIDB4YWYsIDB4MjEsIDB4NjgsIDB4NmUsIDB4MmYsIDB4YWEsIDB4NzUgfSwKKysJCS52YWxpZCA9IHRydWUKKysJfSwKKysJLyogd3ljaGVwcm9vZiAtIHByaXZhdGUga2V5ID09IDEgKG1vZCBvcmRlcikgb24gdHdpc3QgKi8KKysJeworKwkJLnByaXZhdGUgPSB7IDB4NTgsIDB4MDgsIDB4M2QsIDB4ZDIsIDB4NjEsIDB4YWQsIDB4OTEsIDB4ZWYsCisrCQkJICAgICAweGY5LCAweDUyLCAweDMyLCAweDJlLCAweGM4LCAweDI0LCAweGM2LCAweDgyLAorKwkJCSAgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJCQkgICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4NWYgfSwKKysJCS5wdWJsaWMgPSB7IDB4MmUsIDB4YWUsIDB4NWUsIDB4YzMsIDB4ZGQsIDB4NDksIDB4NGUsIDB4OWYsCisrCQkJICAgIDB4MmQsIDB4MzcsIDB4ZDIsIDB4NTgsIDB4ZjgsIDB4NzMsIDB4YTgsIDB4ZTYsCisrCQkJICAgIDB4ZTksIDB4ZDAsIDB4ZGIsIDB4ZDEsIDB4ZTMsIDB4ODMsIDB4ZWYsIDB4NjQsCisrCQkJICAgIDB4ZDksIDB4OGIsIDB4YjksIDB4MWIsIDB4M2UsIDB4MGIsIDB4ZTAsIDB4MzUgfSwKKysJCS5yZXN1bHQgPSB7IDB4MmUsIDB4YWUsIDB4NWUsIDB4YzMsIDB4ZGQsIDB4NDksIDB4NGUsIDB4OWYsCisrCQkJICAgIDB4MmQsIDB4MzcsIDB4ZDIsIDB4NTgsIDB4ZjgsIDB4NzMsIDB4YTgsIDB4ZTYsCisrCQkJICAgIDB4ZTksIDB4ZDAsIDB4ZGIsIDB4ZDEsIDB4ZTMsIDB4ODMsIDB4ZWYsIDB4NjQsCisrCQkJICAgIDB4ZDksIDB4OGIsIDB4YjksIDB4MWIsIDB4M2UsIDB4MGIsIDB4ZTAsIDB4MzUgfSwKKysJCS52YWxpZCA9IHRydWUKKysJfQorK307CisrCisrYm9vbCBfX2luaXQgY3VydmUyNTUxOV9zZWxmdGVzdCh2b2lkKQorK3sKKysJYm9vbCBzdWNjZXNzID0gdHJ1ZSwgcmV0LCByZXQyOworKwlzaXplX3QgaSA9IDAsIGo7CisrCXU4IGluW0NVUlZFMjU1MTlfS0VZX1NJWkVdOworKwl1OCBvdXRbQ1VSVkUyNTUxOV9LRVlfU0laRV0sIG91dDJbQ1VSVkUyNTUxOV9LRVlfU0laRV0sCisrCSAgIG91dDNbQ1VSVkUyNTUxOV9LRVlfU0laRV07CisrCisrCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGN1cnZlMjU1MTlfdGVzdF92ZWN0b3JzKTsgKytpKSB7CisrCQltZW1zZXQob3V0LCAwLCBDVVJWRTI1NTE5X0tFWV9TSVpFKTsKKysJCXJldCA9IGN1cnZlMjU1MTkob3V0LCBjdXJ2ZTI1NTE5X3Rlc3RfdmVjdG9yc1tpXS5wcml2YXRlLAorKwkJCQkgY3VydmUyNTUxOV90ZXN0X3ZlY3RvcnNbaV0ucHVibGljKTsKKysJCWlmIChyZXQgIT0gY3VydmUyNTUxOV90ZXN0X3ZlY3RvcnNbaV0udmFsaWQgfHwKKysJCSAgICBtZW1jbXAob3V0LCBjdXJ2ZTI1NTE5X3Rlc3RfdmVjdG9yc1tpXS5yZXN1bHQsCisrCQkJICAgQ1VSVkUyNTUxOV9LRVlfU0laRSkpIHsKKysJCQlwcl9lcnIoImN1cnZlMjU1MTkgc2VsZi10ZXN0ICV6dTogRkFJTFxuIiwgaSArIDEpOworKwkJCXN1Y2Nlc3MgPSBmYWxzZTsKKysJCX0KKysJfQorKworKwlmb3IgKGkgPSAwOyBpIDwgNTsgKytpKSB7CisrCQlnZXRfcmFuZG9tX2J5dGVzKGluLCBzaXplb2YoaW4pKTsKKysJCXJldCA9IGN1cnZlMjU1MTlfZ2VuZXJhdGVfcHVibGljKG91dCwgaW4pOworKwkJcmV0MiA9IGN1cnZlMjU1MTkob3V0MiwgaW4sICh1OFtDVVJWRTI1NTE5X0tFWV9TSVpFXSl7IDkgfSk7CisrCQljdXJ2ZTI1NTE5X2dlbmVyaWMob3V0MywgaW4sICh1OFtDVVJWRTI1NTE5X0tFWV9TSVpFXSl7IDkgfSk7CisrCQlpZiAocmV0ICE9IHJldDIgfHwKKysJCSAgICBtZW1jbXAob3V0LCBvdXQyLCBDVVJWRTI1NTE5X0tFWV9TSVpFKSB8fAorKwkJICAgIG1lbWNtcChvdXQsIG91dDMsIENVUlZFMjU1MTlfS0VZX1NJWkUpKSB7CisrCQkJcHJfZXJyKCJjdXJ2ZTI1NTE5IGJhc2Vwb2ludCBzZWxmLXRlc3QgJXp1OiBGQUlMOiBpbnB1dCAtIDB4IiwKKysJCQkgICAgICAgaSArIDEpOworKwkJCWZvciAoaiA9IENVUlZFMjU1MTlfS0VZX1NJWkU7IGotLSA+IDA7KQorKwkJCQlwcmludGsoS0VSTl9DT05UICIlMDJ4IiwgaW5bal0pOworKwkJCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CisrCQkJc3VjY2VzcyA9IGZhbHNlOworKwkJfQorKwl9CisrCisrCXJldHVybiBzdWNjZXNzOworK30KKy0tLSBhL2xpYi9jcnlwdG8vY3VydmUyNTUxOS5jCisrKysgYi9saWIvY3J5cHRvL2N1cnZlMjU1MTkuYworQEAgLTEzLDYgKzEzLDggQEAKKyAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisgI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyAKKytib29sIGN1cnZlMjU1MTlfc2VsZnRlc3Qodm9pZCk7CisrCisgY29uc3QgdTggY3VydmUyNTUxOV9udWxsX3BvaW50W0NVUlZFMjU1MTlfS0VZX1NJWkVdIF9fYWxpZ25lZCgzMikgPSB7IDAgfTsKKyBjb25zdCB1OCBjdXJ2ZTI1NTE5X2Jhc2VfcG9pbnRbQ1VSVkUyNTUxOV9LRVlfU0laRV0gX19hbGlnbmVkKDMyKSA9IHsgOSB9OworIAorQEAgLTIwLDYgKzIyLDIxIEBAIEVYUE9SVF9TWU1CT0woY3VydmUyNTUxOV9udWxsX3BvaW50KTsKKyBFWFBPUlRfU1lNQk9MKGN1cnZlMjU1MTlfYmFzZV9wb2ludCk7CisgRVhQT1JUX1NZTUJPTChjdXJ2ZTI1NTE5X2dlbmVyaWMpOworIAorK3N0YXRpYyBpbnQgX19pbml0IG1vZF9pbml0KHZvaWQpCisreworKwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0NSWVBUT19NQU5BR0VSX0RJU0FCTEVfVEVTVFMpICYmCisrCSAgICBXQVJOX09OKCFjdXJ2ZTI1NTE5X3NlbGZ0ZXN0KCkpKQorKwkJcmV0dXJuIC1FTk9ERVY7CisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgdm9pZCBfX2V4aXQgbW9kX2V4aXQodm9pZCkKKyt7CisrfQorKworK21vZHVsZV9pbml0KG1vZF9pbml0KTsKKyttb2R1bGVfZXhpdChtb2RfZXhpdCk7CisrCisgTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworIE1PRFVMRV9ERVNDUklQVElPTigiQ3VydmUyNTUxOSBzY2FsYXIgbXVsdGlwbGljYXRpb24iKTsKKyBNT0RVTEVfQVVUSE9SKCJKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNDEtY3J5cHRvLXBvbHkxMzA1LWFkZC1uZXctMzItYW5kLTY0LWJpdC1nZW5lcmljLXZlcnNpby5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNDEtY3J5cHRvLXBvbHkxMzA1LWFkZC1uZXctMzItYW5kLTY0LWJpdC1nZW5lcmljLXZlcnNpby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDFlZjU1Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA0MS1jcnlwdG8tcG9seTEzMDUtYWRkLW5ldy0zMi1hbmQtNjQtYml0LWdlbmVyaWMtdmVyc2lvLnBhdGNoCkBAIC0wLDAgKzEsMTE2NCBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIkphc29uIEEuIERvbmVuZmVsZCIgPEphc29uQHp4MmM0LmNvbT4KK0RhdGU6IFN1biwgNSBKYW4gMjAyMCAyMjo0MDo0NiAtMDUwMAorU3ViamVjdDogW1BBVENIXSBjcnlwdG86IHBvbHkxMzA1IC0gYWRkIG5ldyAzMiBhbmQgNjQtYml0IGdlbmVyaWMgdmVyc2lvbnMKKworY29tbWl0IDFjMDhhMTA0MzYwZjNlMThmNGVlNjM0NmMyMWNjMzkyM2VmYjk1MmUgdXBzdHJlYW0uCisKK1RoZXNlIHR3byBDIGltcGxlbWVudGF0aW9ucyBmcm9tIFppbmMgLS0gYSAzMngzMiBvbmUgYW5kIGEgNjR4NjQgb25lLAorZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybSAtLSBjb21lIGZyb20gQW5kcmV3IE1vb24ncyBwdWJsaWMgZG9tYWluCitwb2x5MTMwNS1kb25uYSBwb3J0YWJsZSBjb2RlLCBtb2RpZmllZCBmb3IgdXNhZ2UgaW4gdGhlIGtlcm5lbC4gVGhlCitwcmVjb21wdXRhdGlvbiBpbiB0aGUgMzItYml0IHZlcnNpb24gYW5kIHRoZSB1c2Ugb2YgNjR4NjQgbXVsdGlwbGllcyBpbgordGhlIDY0LWJpdCB2ZXJzaW9uIG1ha2UgdGhlc2UgcGVyZm9ybSBiZXR0ZXIgdGhhbiB0aGUgY29kZSBpdCByZXBsYWNlcy4KK01vb24ncyBjb2RlIGlzIGFsc28gdmVyeSB3aWRlc3ByZWFkIGFuZCBoYXMgcmVjZWl2ZWQgbWFueSBleWViYWxscyBvZgorc2NydXRpbnkuCisKK1RoZXJlJ3MgYSBiaXQgb2YgaW50ZXJmZXJlbmNlIGJldHdlZW4gdGhlIHg4NiBpbXBsZW1lbnRhdGlvbiwgd2hpY2gKK3JlbGllcyBvbiBpbnRlcm5hbCBkZXRhaWxzIG9mIHRoZSBvbGQgc2NhbGFyIGltcGxlbWVudGF0aW9uLiBJbiB0aGUgbmV4dAorY29tbWl0LCB0aGUgeDg2IGltcGxlbWVudGF0aW9uIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIGZhc3RlciBvbmUgdGhhdAorZG9lc24ndCByZWx5IG9uIHRoaXMsIHNvIG5vbmUgb2YgdGhpcyBtYXR0ZXJzIG11Y2guIEJ1dCBmb3Igbm93LCB0byBrZWVwCit0aGlzIHBhc3NpbmcgdGhlIHRlc3RzLCB3ZSBpbmxpbmUgdGhlIGJpdHMgb2YgdGhlIG9sZCBpbXBsZW1lbnRhdGlvbgordGhhdCB0aGUgeDg2IGltcGxlbWVudGF0aW9uIHJlbGllZCBvbi4gQWxzbywgc2luY2Ugd2Ugbm93IHN1cHBvcnQgYQorc2xpZ2h0bHkgbGFyZ2VyIGtleSBzcGFjZSwgdmlhIHRoZSB1bmlvbiwgc29tZSBvZmZzZXRzIGhhZCB0byBiZSBmaXhlZAordXAuCisKK05vbmNlIGNhbGN1bGF0aW9uIHdhcyBmb2xkZWQgaW4gd2l0aCB0aGUgZW1pdCBmdW5jdGlvbiwgdG8gdGFrZQorYWR2YW50YWdlIG9mIDY0eDY0IGFyaXRobWV0aWMuIEhvd2V2ZXIsIEFkaWFudHVtIGFwcGVhcmVkIHRvIHJlbHkgb24gbm8KK25vbmNlIGhhbmRsaW5nIGluIGVtaXQsIHNvIHRoaXMgcGF0aCB3YXMgY29uZGl0aW9uYWxpemVkLiBXZSBhbHNvCitpbnRyb2R1Y2VkIGEgbmV3IHN0cnVjdCwgcG9seTEzMDVfY29yZV9rZXksIHRvIHJlcHJlc2VudCB0aGUgcHJlY2lzZQorYW1vdW50IG9mIHNwYWNlIHRoYXQgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbiB1c2VzLgorCitUZXN0aW5nIHdpdGgga2JlbmNoOTAwMCwgZGVwZW5kaW5nIG9uIHRoZSBDUFUsIHRoZSB1cGRhdGUgZnVuY3Rpb24gZm9yCit0aGUgMzJ4MzIgdmVyc2lvbiBoYXMgYmVlbiBpbXByb3ZlZCBieSA0JS03JSwgYW5kIGZvciB0aGUgNjR4NjQgYnkKKzE5JS0zMCUuIFRoZSAzMngzMiBnYWlucyBhcmUgc21hbGwsIGJ1dCBJIHRoaW5rIHRoZXJlJ3MgZ3JlYXQgdmFsdWUgaW4KK2hhdmluZyBhIHBhcmFsbGVsIGltcGxlbWVudGF0aW9uIHRvIHRoZSA2NHg2NCBvbmUgc28gdGhhdCB0aGUgdHdvIGNhbiBiZQorY29tcGFyZWQgc2lkZS1ieS1zaWRlIGFzIG5pY2Ugc3RhbmQtYWxvbmUgdW5pdHMuCisKK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorU2lnbmVkLW9mZi1ieTogSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBhcmNoL3g4Ni9jcnlwdG8vcG9seTEzMDUtYXZ4Mi14ODZfNjQuUyB8ICAyMCArLS0KKyBhcmNoL3g4Ni9jcnlwdG8vcG9seTEzMDVfZ2x1ZS5jICAgICAgICB8IDIxNSArKysrKysrKysrKysrKysrKysrKysrKy0tCisgY3J5cHRvL2FkaWFudHVtLmMgICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KKyBjcnlwdG8vbmhwb2x5MTMwNS5jICAgICAgICAgICAgICAgICAgICB8ICAgMiArLQorIGNyeXB0by9wb2x5MTMwNV9nZW5lcmljLmMgICAgICAgICAgICAgIHwgIDI1ICsrLQorIGluY2x1ZGUvY3J5cHRvL2ludGVybmFsL3BvbHkxMzA1LmggICAgIHwgIDQ1ICsrLS0tLQorIGluY2x1ZGUvY3J5cHRvL25ocG9seTEzMDUuaCAgICAgICAgICAgIHwgICA0ICstCisgaW5jbHVkZS9jcnlwdG8vcG9seTEzMDUuaCAgICAgICAgICAgICAgfCAgMjYgKystCisgbGliL2NyeXB0by9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KKyBsaWIvY3J5cHRvL3BvbHkxMzA1LWRvbm5hMzIuYyAgICAgICAgICB8IDIwNCArKysrKysrKysrKysrKysrKysrKysrKworIGxpYi9jcnlwdG8vcG9seTEzMDUtZG9ubmE2NC5jICAgICAgICAgIHwgMTg1ICsrKysrKysrKysrKysrKysrKysrKworIGxpYi9jcnlwdG8vcG9seTEzMDUuYyAgICAgICAgICAgICAgICAgIHwgMTY5ICstLS0tLS0tLS0tLS0tLS0tLS0KKyAxMiBmaWxlcyBjaGFuZ2VkLCA2NzUgaW5zZXJ0aW9ucygrKSwgMjI4IGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvY3J5cHRvL3BvbHkxMzA1LWRvbm5hMzIuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvY3J5cHRvL3BvbHkxMzA1LWRvbm5hNjQuYworCistLS0gYS9hcmNoL3g4Ni9jcnlwdG8vcG9seTEzMDUtYXZ4Mi14ODZfNjQuUworKysrIGIvYXJjaC94ODYvY3J5cHRvL3BvbHkxMzA1LWF2eDIteDg2XzY0LlMKK0BAIC0zNCwxNiArMzQsMTYgQEAgT1JNQVNLOgkub2N0YSAweDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMAorICNkZWZpbmUgdTIgMHgwOCglcjgpCisgI2RlZmluZSB1MyAweDBjKCVyOCkKKyAjZGVmaW5lIHU0IDB4MTAoJXI4KQorLSNkZWZpbmUgdzAgMHgxNCglcjgpCistI2RlZmluZSB3MSAweDE4KCVyOCkKKy0jZGVmaW5lIHcyIDB4MWMoJXI4KQorLSNkZWZpbmUgdzMgMHgyMCglcjgpCistI2RlZmluZSB3NCAweDI0KCVyOCkKKy0jZGVmaW5lIHkwIDB4MjgoJXI4KQorLSNkZWZpbmUgeTEgMHgyYyglcjgpCistI2RlZmluZSB5MiAweDMwKCVyOCkKKy0jZGVmaW5lIHkzIDB4MzQoJXI4KQorLSNkZWZpbmUgeTQgMHgzOCglcjgpCisrI2RlZmluZSB3MCAweDE4KCVyOCkKKysjZGVmaW5lIHcxIDB4MWMoJXI4KQorKyNkZWZpbmUgdzIgMHgyMCglcjgpCisrI2RlZmluZSB3MyAweDI0KCVyOCkKKysjZGVmaW5lIHc0IDB4MjgoJXI4KQorKyNkZWZpbmUgeTAgMHgzMCglcjgpCisrI2RlZmluZSB5MSAweDM0KCVyOCkKKysjZGVmaW5lIHkyIDB4MzgoJXI4KQorKyNkZWZpbmUgeTMgMHgzYyglcjgpCisrI2RlZmluZSB5NCAweDQwKCVyOCkKKyAjZGVmaW5lIG0gJXJzaQorICNkZWZpbmUgaGMwICV5bW0wCisgI2RlZmluZSBoYzEgJXltbTEKKy0tLSBhL2FyY2gveDg2L2NyeXB0by9wb2x5MTMwNV9nbHVlLmMKKysrKyBiL2FyY2gveDg2L2NyeXB0by9wb2x5MTMwNV9nbHVlLmMKK0BAIC0yNSw2ICsyNSwyMSBAQCBhc21saW5rYWdlIHZvaWQgcG9seTEzMDVfNGJsb2NrX2F2eDIodTMyCisgc3RhdGljIF9fcm9fYWZ0ZXJfaW5pdCBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShwb2x5MTMwNV91c2Vfc2ltZCk7Cisgc3RhdGljIF9fcm9fYWZ0ZXJfaW5pdCBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShwb2x5MTMwNV91c2VfYXZ4Mik7CisgCisrc3RhdGljIGlubGluZSB1NjQgbWx0KHU2NCBhLCB1NjQgYikKKyt7CisrCXJldHVybiBhICogYjsKKyt9CisrCisrc3RhdGljIGlubGluZSB1MzIgc3IodTY0IHYsIHVfY2hhciBuKQorK3sKKysJcmV0dXJuIHYgPj4gbjsKKyt9CisrCisrc3RhdGljIGlubGluZSB1MzIgYW5kKHUzMiB2LCB1MzIgbWFzaykKKyt7CisrCXJldHVybiB2ICYgbWFzazsKKyt9CisrCisgc3RhdGljIHZvaWQgcG9seTEzMDVfc2ltZF9tdWx0KHUzMiAqYSwgY29uc3QgdTMyICpiKQorIHsKKyAJdTggbVtQT0xZMTMwNV9CTE9DS19TSVpFXTsKK0BAIC0zNiw2ICs1MSwxNjggQEAgc3RhdGljIHZvaWQgcG9seTEzMDVfc2ltZF9tdWx0KHUzMiAqYSwgYworIAlwb2x5MTMwNV9ibG9ja19zc2UyKGEsIG0sIGIsIDEpOworIH0KKyAKKytzdGF0aWMgdm9pZCBwb2x5MTMwNV9pbnRlZ2VyX3NldGtleShzdHJ1Y3QgcG9seTEzMDVfa2V5ICprZXksIGNvbnN0IHU4ICpyYXdfa2V5KQorK3sKKysJLyogciAmPSAweGZmZmZmZmMwZmZmZmZmYzBmZmZmZmZjMGZmZmZmZmYgKi8KKysJa2V5LT5yWzBdID0gKGdldF91bmFsaWduZWRfbGUzMihyYXdfa2V5ICsgIDApID4+IDApICYgMHgzZmZmZmZmOworKwlrZXktPnJbMV0gPSAoZ2V0X3VuYWxpZ25lZF9sZTMyKHJhd19rZXkgKyAgMykgPj4gMikgJiAweDNmZmZmMDM7CisrCWtleS0+clsyXSA9IChnZXRfdW5hbGlnbmVkX2xlMzIocmF3X2tleSArICA2KSA+PiA0KSAmIDB4M2ZmYzBmZjsKKysJa2V5LT5yWzNdID0gKGdldF91bmFsaWduZWRfbGUzMihyYXdfa2V5ICsgIDkpID4+IDYpICYgMHgzZjAzZmZmOworKwlrZXktPnJbNF0gPSAoZ2V0X3VuYWxpZ25lZF9sZTMyKHJhd19rZXkgKyAxMikgPj4gOCkgJiAweDAwZmZmZmY7CisrfQorKworK3N0YXRpYyB2b2lkIHBvbHkxMzA1X2ludGVnZXJfYmxvY2tzKHN0cnVjdCBwb2x5MTMwNV9zdGF0ZSAqc3RhdGUsCisrCQkJCSAgICBjb25zdCBzdHJ1Y3QgcG9seTEzMDVfa2V5ICprZXksCisrCQkJCSAgICBjb25zdCB2b2lkICpzcmMsCisrCQkJCSAgICB1bnNpZ25lZCBpbnQgbmJsb2NrcywgdTMyIGhpYml0KQorK3sKKysJdTMyIHIwLCByMSwgcjIsIHIzLCByNDsKKysJdTMyIHMxLCBzMiwgczMsIHM0OworKwl1MzIgaDAsIGgxLCBoMiwgaDMsIGg0OworKwl1NjQgZDAsIGQxLCBkMiwgZDMsIGQ0OworKworKwlpZiAoIW5ibG9ja3MpCisrCQlyZXR1cm47CisrCisrCXIwID0ga2V5LT5yWzBdOworKwlyMSA9IGtleS0+clsxXTsKKysJcjIgPSBrZXktPnJbMl07CisrCXIzID0ga2V5LT5yWzNdOworKwlyNCA9IGtleS0+cls0XTsKKysKKysJczEgPSByMSAqIDU7CisrCXMyID0gcjIgKiA1OworKwlzMyA9IHIzICogNTsKKysJczQgPSByNCAqIDU7CisrCisrCWgwID0gc3RhdGUtPmhbMF07CisrCWgxID0gc3RhdGUtPmhbMV07CisrCWgyID0gc3RhdGUtPmhbMl07CisrCWgzID0gc3RhdGUtPmhbM107CisrCWg0ID0gc3RhdGUtPmhbNF07CisrCisrCWRvIHsKKysJCS8qIGggKz0gbVtpXSAqLworKwkJaDAgKz0gKGdldF91bmFsaWduZWRfbGUzMihzcmMgKyAgMCkgPj4gMCkgJiAweDNmZmZmZmY7CisrCQloMSArPSAoZ2V0X3VuYWxpZ25lZF9sZTMyKHNyYyArICAzKSA+PiAyKSAmIDB4M2ZmZmZmZjsKKysJCWgyICs9IChnZXRfdW5hbGlnbmVkX2xlMzIoc3JjICsgIDYpID4+IDQpICYgMHgzZmZmZmZmOworKwkJaDMgKz0gKGdldF91bmFsaWduZWRfbGUzMihzcmMgKyAgOSkgPj4gNikgJiAweDNmZmZmZmY7CisrCQloNCArPSAoZ2V0X3VuYWxpZ25lZF9sZTMyKHNyYyArIDEyKSA+PiA4KSB8IChoaWJpdCA8PCAyNCk7CisrCisrCQkvKiBoICo9IHIgKi8KKysJCWQwID0gbWx0KGgwLCByMCkgKyBtbHQoaDEsIHM0KSArIG1sdChoMiwgczMpICsKKysJCSAgICAgbWx0KGgzLCBzMikgKyBtbHQoaDQsIHMxKTsKKysJCWQxID0gbWx0KGgwLCByMSkgKyBtbHQoaDEsIHIwKSArIG1sdChoMiwgczQpICsKKysJCSAgICAgbWx0KGgzLCBzMykgKyBtbHQoaDQsIHMyKTsKKysJCWQyID0gbWx0KGgwLCByMikgKyBtbHQoaDEsIHIxKSArIG1sdChoMiwgcjApICsKKysJCSAgICAgbWx0KGgzLCBzNCkgKyBtbHQoaDQsIHMzKTsKKysJCWQzID0gbWx0KGgwLCByMykgKyBtbHQoaDEsIHIyKSArIG1sdChoMiwgcjEpICsKKysJCSAgICAgbWx0KGgzLCByMCkgKyBtbHQoaDQsIHM0KTsKKysJCWQ0ID0gbWx0KGgwLCByNCkgKyBtbHQoaDEsIHIzKSArIG1sdChoMiwgcjIpICsKKysJCSAgICAgbWx0KGgzLCByMSkgKyBtbHQoaDQsIHIwKTsKKysKKysJCS8qIChwYXJ0aWFsKSBoICU9IHAgKi8KKysJCWQxICs9IHNyKGQwLCAyNik7ICAgICBoMCA9IGFuZChkMCwgMHgzZmZmZmZmKTsKKysJCWQyICs9IHNyKGQxLCAyNik7ICAgICBoMSA9IGFuZChkMSwgMHgzZmZmZmZmKTsKKysJCWQzICs9IHNyKGQyLCAyNik7ICAgICBoMiA9IGFuZChkMiwgMHgzZmZmZmZmKTsKKysJCWQ0ICs9IHNyKGQzLCAyNik7ICAgICBoMyA9IGFuZChkMywgMHgzZmZmZmZmKTsKKysJCWgwICs9IHNyKGQ0LCAyNikgKiA1OyBoNCA9IGFuZChkNCwgMHgzZmZmZmZmKTsKKysJCWgxICs9IGgwID4+IDI2OyAgICAgICBoMCA9IGgwICYgMHgzZmZmZmZmOworKworKwkJc3JjICs9IFBPTFkxMzA1X0JMT0NLX1NJWkU7CisrCX0gd2hpbGUgKC0tbmJsb2Nrcyk7CisrCisrCXN0YXRlLT5oWzBdID0gaDA7CisrCXN0YXRlLT5oWzFdID0gaDE7CisrCXN0YXRlLT5oWzJdID0gaDI7CisrCXN0YXRlLT5oWzNdID0gaDM7CisrCXN0YXRlLT5oWzRdID0gaDQ7CisrfQorKworK3N0YXRpYyB2b2lkIHBvbHkxMzA1X2ludGVnZXJfZW1pdChjb25zdCBzdHJ1Y3QgcG9seTEzMDVfc3RhdGUgKnN0YXRlLCB2b2lkICpkc3QpCisreworKwl1MzIgaDAsIGgxLCBoMiwgaDMsIGg0OworKwl1MzIgZzAsIGcxLCBnMiwgZzMsIGc0OworKwl1MzIgbWFzazsKKysKKysJLyogZnVsbHkgY2FycnkgaCAqLworKwloMCA9IHN0YXRlLT5oWzBdOworKwloMSA9IHN0YXRlLT5oWzFdOworKwloMiA9IHN0YXRlLT5oWzJdOworKwloMyA9IHN0YXRlLT5oWzNdOworKwloNCA9IHN0YXRlLT5oWzRdOworKworKwloMiArPSAoaDEgPj4gMjYpOyAgICAgaDEgPSBoMSAmIDB4M2ZmZmZmZjsKKysJaDMgKz0gKGgyID4+IDI2KTsgICAgIGgyID0gaDIgJiAweDNmZmZmZmY7CisrCWg0ICs9IChoMyA+PiAyNik7ICAgICBoMyA9IGgzICYgMHgzZmZmZmZmOworKwloMCArPSAoaDQgPj4gMjYpICogNTsgaDQgPSBoNCAmIDB4M2ZmZmZmZjsKKysJaDEgKz0gKGgwID4+IDI2KTsgICAgIGgwID0gaDAgJiAweDNmZmZmZmY7CisrCisrCS8qIGNvbXB1dGUgaCArIC1wICovCisrCWcwID0gaDAgKyA1OworKwlnMSA9IGgxICsgKGcwID4+IDI2KTsgICAgICAgICAgICAgZzAgJj0gMHgzZmZmZmZmOworKwlnMiA9IGgyICsgKGcxID4+IDI2KTsgICAgICAgICAgICAgZzEgJj0gMHgzZmZmZmZmOworKwlnMyA9IGgzICsgKGcyID4+IDI2KTsgICAgICAgICAgICAgZzIgJj0gMHgzZmZmZmZmOworKwlnNCA9IGg0ICsgKGczID4+IDI2KSAtICgxIDw8IDI2KTsgZzMgJj0gMHgzZmZmZmZmOworKworKwkvKiBzZWxlY3QgaCBpZiBoIDwgcCwgb3IgaCArIC1wIGlmIGggPj0gcCAqLworKwltYXNrID0gKGc0ID4+ICgoc2l6ZW9mKHUzMikgKiA4KSAtIDEpKSAtIDE7CisrCWcwICY9IG1hc2s7CisrCWcxICY9IG1hc2s7CisrCWcyICY9IG1hc2s7CisrCWczICY9IG1hc2s7CisrCWc0ICY9IG1hc2s7CisrCW1hc2sgPSB+bWFzazsKKysJaDAgPSAoaDAgJiBtYXNrKSB8IGcwOworKwloMSA9IChoMSAmIG1hc2spIHwgZzE7CisrCWgyID0gKGgyICYgbWFzaykgfCBnMjsKKysJaDMgPSAoaDMgJiBtYXNrKSB8IGczOworKwloNCA9IChoNCAmIG1hc2spIHwgZzQ7CisrCisrCS8qIGggPSBoICUgKDJeMTI4KSAqLworKwlwdXRfdW5hbGlnbmVkX2xlMzIoKGgwID4+ICAwKSB8IChoMSA8PCAyNiksIGRzdCArICAwKTsKKysJcHV0X3VuYWxpZ25lZF9sZTMyKChoMSA+PiAgNikgfCAoaDIgPDwgMjApLCBkc3QgKyAgNCk7CisrCXB1dF91bmFsaWduZWRfbGUzMigoaDIgPj4gMTIpIHwgKGgzIDw8IDE0KSwgZHN0ICsgIDgpOworKwlwdXRfdW5hbGlnbmVkX2xlMzIoKGgzID4+IDE4KSB8IChoNCA8PCAgOCksIGRzdCArIDEyKTsKKyt9CisrCisrdm9pZCBwb2x5MTMwNV9pbml0X2FyY2goc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4ICpkZXNjLCBjb25zdCB1OCAqa2V5KQorK3sKKysJcG9seTEzMDVfaW50ZWdlcl9zZXRrZXkoZGVzYy0+b3BhcXVlX3IsIGtleSk7CisrCWRlc2MtPnNbMF0gPSBnZXRfdW5hbGlnbmVkX2xlMzIoa2V5ICsgMTYpOworKwlkZXNjLT5zWzFdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGtleSArIDIwKTsKKysJZGVzYy0+c1syXSA9IGdldF91bmFsaWduZWRfbGUzMihrZXkgKyAyNCk7CisrCWRlc2MtPnNbM10gPSBnZXRfdW5hbGlnbmVkX2xlMzIoa2V5ICsgMjgpOworKwlwb2x5MTMwNV9jb3JlX2luaXQoJmRlc2MtPmgpOworKwlkZXNjLT5idWZsZW4gPSAwOworKwlkZXNjLT5zc2V0ID0gdHJ1ZTsKKysJZGVzYy0+cnNldCA9IDE7CisrfQorK0VYUE9SVF9TWU1CT0xfR1BMKHBvbHkxMzA1X2luaXRfYXJjaCk7CisrCisrc3RhdGljIHVuc2lnbmVkIGludCBjcnlwdG9fcG9seTEzMDVfc2V0ZGVzY2tleShzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRjdHgsCisrCQkJCQkgICAgICAgY29uc3QgdTggKnNyYywgdW5zaWduZWQgaW50IHNyY2xlbikKKyt7CisrCWlmICghZGN0eC0+c3NldCkgeworKwkJaWYgKCFkY3R4LT5yc2V0ICYmIHNyY2xlbiA+PSBQT0xZMTMwNV9CTE9DS19TSVpFKSB7CisrCQkJcG9seTEzMDVfaW50ZWdlcl9zZXRrZXkoZGN0eC0+ciwgc3JjKTsKKysJCQlzcmMgKz0gUE9MWTEzMDVfQkxPQ0tfU0laRTsKKysJCQlzcmNsZW4gLT0gUE9MWTEzMDVfQkxPQ0tfU0laRTsKKysJCQlkY3R4LT5yc2V0ID0gMTsKKysJCX0KKysJCWlmIChzcmNsZW4gPj0gUE9MWTEzMDVfQkxPQ0tfU0laRSkgeworKwkJCWRjdHgtPnNbMF0gPSBnZXRfdW5hbGlnbmVkX2xlMzIoc3JjICsgIDApOworKwkJCWRjdHgtPnNbMV0gPSBnZXRfdW5hbGlnbmVkX2xlMzIoc3JjICsgIDQpOworKwkJCWRjdHgtPnNbMl0gPSBnZXRfdW5hbGlnbmVkX2xlMzIoc3JjICsgIDgpOworKwkJCWRjdHgtPnNbM10gPSBnZXRfdW5hbGlnbmVkX2xlMzIoc3JjICsgMTIpOworKwkJCXNyYyArPSBQT0xZMTMwNV9CTE9DS19TSVpFOworKwkJCXNyY2xlbiAtPSBQT0xZMTMwNV9CTE9DS19TSVpFOworKwkJCWRjdHgtPnNzZXQgPSB0cnVlOworKwkJfQorKwl9CisrCXJldHVybiBzcmNsZW47CisrfQorKworIHN0YXRpYyB1bnNpZ25lZCBpbnQgcG9seTEzMDVfc2NhbGFyX2Jsb2NrcyhzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRjdHgsCisgCQkJCQkgICBjb25zdCB1OCAqc3JjLCB1bnNpZ25lZCBpbnQgc3JjbGVuKQorIHsKK0BAIC00Nyw4ICsyMjQsOCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHBvbHkxMzA1X3NjYWxhcl9ibG9jCisgCQlzcmNsZW4gPSBkYXRhbGVuOworIAl9CisgCWlmIChzcmNsZW4gPj0gUE9MWTEzMDVfQkxPQ0tfU0laRSkgeworLQkJcG9seTEzMDVfY29yZV9ibG9ja3MoJmRjdHgtPmgsIGRjdHgtPnIsIHNyYywKKy0JCQkJICAgICBzcmNsZW4gLyBQT0xZMTMwNV9CTE9DS19TSVpFLCAxKTsKKysJCXBvbHkxMzA1X2ludGVnZXJfYmxvY2tzKCZkY3R4LT5oLCBkY3R4LT5vcGFxdWVfciwgc3JjLAorKwkJCQkJc3JjbGVuIC8gUE9MWTEzMDVfQkxPQ0tfU0laRSwgMSk7CisgCQlzcmNsZW4gJT0gUE9MWTEzMDVfQkxPQ0tfU0laRTsKKyAJfQorIAlyZXR1cm4gc3JjbGVuOworQEAgLTEwNSwxMiArMjgyLDYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBwb2x5MTMwNV9zaW1kX2Jsb2NrcworIAlyZXR1cm4gc3JjbGVuOworIH0KKyAKKy12b2lkIHBvbHkxMzA1X2luaXRfYXJjaChzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRlc2MsIGNvbnN0IHU4ICprZXkpCisteworLQlwb2x5MTMwNV9pbml0X2dlbmVyaWMoZGVzYywga2V5KTsKKy19CistRVhQT1JUX1NZTUJPTChwb2x5MTMwNV9pbml0X2FyY2gpOworLQorIHZvaWQgcG9seTEzMDVfdXBkYXRlX2FyY2goc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4ICpkY3R4LCBjb25zdCB1OCAqc3JjLAorIAkJCSAgdW5zaWduZWQgaW50IHNyY2xlbikKKyB7CitAQCAtMTU4LDkgKzMyOSwzMSBAQCB2b2lkIHBvbHkxMzA1X3VwZGF0ZV9hcmNoKHN0cnVjdCBwb2x5MTMwCisgfQorIEVYUE9SVF9TWU1CT0wocG9seTEzMDVfdXBkYXRlX2FyY2gpOworIAorLXZvaWQgcG9seTEzMDVfZmluYWxfYXJjaChzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRlc2MsIHU4ICpkaWdlc3QpCisrdm9pZCBwb2x5MTMwNV9maW5hbF9hcmNoKHN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCAqZGVzYywgdTggKmRzdCkKKyB7CistCXBvbHkxMzA1X2ZpbmFsX2dlbmVyaWMoZGVzYywgZGlnZXN0KTsKKysJX19sZTMyIGRpZ2VzdFs0XTsKKysJdTY0IGYgPSAwOworKworKwlpZiAodW5saWtlbHkoZGVzYy0+YnVmbGVuKSkgeworKwkJZGVzYy0+YnVmW2Rlc2MtPmJ1ZmxlbisrXSA9IDE7CisrCQltZW1zZXQoZGVzYy0+YnVmICsgZGVzYy0+YnVmbGVuLCAwLAorKwkJICAgICAgIFBPTFkxMzA1X0JMT0NLX1NJWkUgLSBkZXNjLT5idWZsZW4pOworKwkJcG9seTEzMDVfaW50ZWdlcl9ibG9ja3MoJmRlc2MtPmgsIGRlc2MtPm9wYXF1ZV9yLCBkZXNjLT5idWYsIDEsIDApOworKwl9CisrCisrCXBvbHkxMzA1X2ludGVnZXJfZW1pdCgmZGVzYy0+aCwgZGlnZXN0KTsKKysKKysJLyogbWFjID0gKGggKyBzKSAlICgyXjEyOCkgKi8KKysJZiA9IChmID4+IDMyKSArIGxlMzJfdG9fY3B1KGRpZ2VzdFswXSkgKyBkZXNjLT5zWzBdOworKwlwdXRfdW5hbGlnbmVkX2xlMzIoZiwgZHN0ICsgMCk7CisrCWYgPSAoZiA+PiAzMikgKyBsZTMyX3RvX2NwdShkaWdlc3RbMV0pICsgZGVzYy0+c1sxXTsKKysJcHV0X3VuYWxpZ25lZF9sZTMyKGYsIGRzdCArIDQpOworKwlmID0gKGYgPj4gMzIpICsgbGUzMl90b19jcHUoZGlnZXN0WzJdKSArIGRlc2MtPnNbMl07CisrCXB1dF91bmFsaWduZWRfbGUzMihmLCBkc3QgKyA4KTsKKysJZiA9IChmID4+IDMyKSArIGxlMzJfdG9fY3B1KGRpZ2VzdFszXSkgKyBkZXNjLT5zWzNdOworKwlwdXRfdW5hbGlnbmVkX2xlMzIoZiwgZHN0ICsgMTIpOworKworKwkqZGVzYyA9IChzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHgpe307CisgfQorIEVYUE9SVF9TWU1CT0wocG9seTEzMDVfZmluYWxfYXJjaCk7CisgCitAQCAtMTgzLDcgKzM3Niw3IEBAIHN0YXRpYyBpbnQgY3J5cHRvX3BvbHkxMzA1X2ZpbmFsKHN0cnVjdAorIAlpZiAodW5saWtlbHkoIWRjdHgtPnNzZXQpKQorIAkJcmV0dXJuIC1FTk9LRVk7CisgCistCXBvbHkxMzA1X2ZpbmFsX2dlbmVyaWMoZGN0eCwgZHN0KTsKKysJcG9seTEzMDVfZmluYWxfYXJjaChkY3R4LCBkc3QpOworIAlyZXR1cm4gMDsKKyB9CisgCistLS0gYS9jcnlwdG8vYWRpYW50dW0uYworKysrIGIvY3J5cHRvL2FkaWFudHVtLmMKK0BAIC03Miw3ICs3Miw3IEBAIHN0cnVjdCBhZGlhbnR1bV90Zm1fY3R4IHsKKyAJc3RydWN0IGNyeXB0b19za2NpcGhlciAqc3RyZWFtY2lwaGVyOworIAlzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqYmxvY2tjaXBoZXI7CisgCXN0cnVjdCBjcnlwdG9fc2hhc2ggKmhhc2g7CistCXN0cnVjdCBwb2x5MTMwNV9rZXkgaGVhZGVyX2hhc2hfa2V5OworKwlzdHJ1Y3QgcG9seTEzMDVfY29yZV9rZXkgaGVhZGVyX2hhc2hfa2V5OworIH07CisgCisgc3RydWN0IGFkaWFudHVtX3JlcXVlc3RfY3R4IHsKK0BAIC0yNDksNyArMjQ5LDcgQEAgc3RhdGljIHZvaWQgYWRpYW50dW1faGFzaF9oZWFkZXIoc3RydWN0CisgCXBvbHkxMzA1X2NvcmVfYmxvY2tzKCZzdGF0ZSwgJnRjdHgtPmhlYWRlcl9oYXNoX2tleSwgcmVxLT5pdiwKKyAJCQkgICAgIFRXRUFLX1NJWkUgLyBQT0xZMTMwNV9CTE9DS19TSVpFLCAxKTsKKyAKKy0JcG9seTEzMDVfY29yZV9lbWl0KCZzdGF0ZSwgJnJjdHgtPmhlYWRlcl9oYXNoKTsKKysJcG9seTEzMDVfY29yZV9lbWl0KCZzdGF0ZSwgTlVMTCwgJnJjdHgtPmhlYWRlcl9oYXNoKTsKKyB9CisgCisgLyogSGFzaCB0aGUgbGVmdC1oYW5kIHBhcnQgKHRoZSAiYnVsayIpIG9mIHRoZSBtZXNzYWdlIHVzaW5nIE5IUG9seTEzMDUgKi8KKy0tLSBhL2NyeXB0by9uaHBvbHkxMzA1LmMKKysrKyBiL2NyeXB0by9uaHBvbHkxMzA1LmMKK0BAIC0yMTAsNyArMjEwLDcgQEAgaW50IGNyeXB0b19uaHBvbHkxMzA1X2ZpbmFsX2hlbHBlcihzdHJ1YworIAlpZiAoc3RhdGUtPm5oX3JlbWFpbmluZykKKyAJCXByb2Nlc3NfbmhfaGFzaF92YWx1ZShzdGF0ZSwga2V5KTsKKyAKKy0JcG9seTEzMDVfY29yZV9lbWl0KCZzdGF0ZS0+cG9seV9zdGF0ZSwgZHN0KTsKKysJcG9seTEzMDVfY29yZV9lbWl0KCZzdGF0ZS0+cG9seV9zdGF0ZSwgTlVMTCwgZHN0KTsKKyAJcmV0dXJuIDA7CisgfQorIEVYUE9SVF9TWU1CT0woY3J5cHRvX25ocG9seTEzMDVfZmluYWxfaGVscGVyKTsKKy0tLSBhL2NyeXB0by9wb2x5MTMwNV9nZW5lcmljLmMKKysrKyBiL2NyeXB0by9wb2x5MTMwNV9nZW5lcmljLmMKK0BAIC0zMSw2ICszMSwyOSBAQCBzdGF0aWMgaW50IGNyeXB0b19wb2x5MTMwNV9pbml0KHN0cnVjdCBzCisgCXJldHVybiAwOworIH0KKyAKKytzdGF0aWMgdW5zaWduZWQgaW50IGNyeXB0b19wb2x5MTMwNV9zZXRkZXNja2V5KHN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCAqZGN0eCwKKysJCQkJCSAgICAgICBjb25zdCB1OCAqc3JjLCB1bnNpZ25lZCBpbnQgc3JjbGVuKQorK3sKKysJaWYgKCFkY3R4LT5zc2V0KSB7CisrCQlpZiAoIWRjdHgtPnJzZXQgJiYgc3JjbGVuID49IFBPTFkxMzA1X0JMT0NLX1NJWkUpIHsKKysJCQlwb2x5MTMwNV9jb3JlX3NldGtleSgmZGN0eC0+Y29yZV9yLCBzcmMpOworKwkJCXNyYyArPSBQT0xZMTMwNV9CTE9DS19TSVpFOworKwkJCXNyY2xlbiAtPSBQT0xZMTMwNV9CTE9DS19TSVpFOworKwkJCWRjdHgtPnJzZXQgPSAyOworKwkJfQorKwkJaWYgKHNyY2xlbiA+PSBQT0xZMTMwNV9CTE9DS19TSVpFKSB7CisrCQkJZGN0eC0+c1swXSA9IGdldF91bmFsaWduZWRfbGUzMihzcmMgKyAgMCk7CisrCQkJZGN0eC0+c1sxXSA9IGdldF91bmFsaWduZWRfbGUzMihzcmMgKyAgNCk7CisrCQkJZGN0eC0+c1syXSA9IGdldF91bmFsaWduZWRfbGUzMihzcmMgKyAgOCk7CisrCQkJZGN0eC0+c1szXSA9IGdldF91bmFsaWduZWRfbGUzMihzcmMgKyAxMik7CisrCQkJc3JjICs9IFBPTFkxMzA1X0JMT0NLX1NJWkU7CisrCQkJc3JjbGVuIC09IFBPTFkxMzA1X0JMT0NLX1NJWkU7CisrCQkJZGN0eC0+c3NldCA9IHRydWU7CisrCQl9CisrCX0KKysJcmV0dXJuIHNyY2xlbjsKKyt9CisrCisgc3RhdGljIHZvaWQgcG9seTEzMDVfYmxvY2tzKHN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCAqZGN0eCwgY29uc3QgdTggKnNyYywKKyAJCQkgICAgdW5zaWduZWQgaW50IHNyY2xlbikKKyB7CitAQCAtNDIsNyArNjUsNyBAQCBzdGF0aWMgdm9pZCBwb2x5MTMwNV9ibG9ja3Moc3RydWN0IHBvbHkxCisgCQlzcmNsZW4gPSBkYXRhbGVuOworIAl9CisgCistCXBvbHkxMzA1X2NvcmVfYmxvY2tzKCZkY3R4LT5oLCBkY3R4LT5yLCBzcmMsCisrCXBvbHkxMzA1X2NvcmVfYmxvY2tzKCZkY3R4LT5oLCAmZGN0eC0+Y29yZV9yLCBzcmMsCisgCQkJICAgICBzcmNsZW4gLyBQT0xZMTMwNV9CTE9DS19TSVpFLCAxKTsKKyB9CisgCistLS0gYS9pbmNsdWRlL2NyeXB0by9pbnRlcm5hbC9wb2x5MTMwNS5oCisrKysgYi9pbmNsdWRlL2NyeXB0by9pbnRlcm5hbC9wb2x5MTMwNS5oCitAQCAtMTEsNDggKzExLDIzIEBACisgI2luY2x1ZGUgPGNyeXB0by9wb2x5MTMwNS5oPgorIAorIC8qCistICogUG9seTEzMDUgY29yZSBmdW5jdGlvbnMuICBUaGVzZSBpbXBsZW1lbnQgdGhlIM61LWFsbW9zdC3iiIYtdW5pdmVyc2FsIGhhc2gKKy0gKiBmdW5jdGlvbiB1bmRlcmx5aW5nIHRoZSBQb2x5MTMwNSBNQUMsIGkuZS4gdGhleSBkb24ndCBhZGQgYW4gZW5jcnlwdGVkIG5vbmNlCistICogKCJzIGtleSIpIGF0IHRoZSBlbmQuICBUaGV5IGFsc28gb25seSBzdXBwb3J0IGJsb2NrLWFsaWduZWQgaW5wdXRzLgorKyAqIFBvbHkxMzA1IGNvcmUgZnVuY3Rpb25zLiAgVGhlc2Ugb25seSBhY2NlcHQgd2hvbGUgYmxvY2tzOyB0aGUgY2FsbGVyIG11c3QKKysgKiBoYW5kbGUgYW55IG5lZWRlZCBibG9jayBidWZmZXJpbmcgYW5kIHBhZGRpbmcuICAnaGliaXQnIG11c3QgYmUgMSBmb3IgYW55CisrICogZnVsbCBibG9ja3MsIG9yIDAgZm9yIHRoZSBmaW5hbCBibG9jayBpZiBpdCBoYWQgdG8gYmUgcGFkZGVkLiAgSWYgJ25vbmNlJyBpcworKyAqIG5vbi1OVUxMLCB0aGVuIGl0J3MgYWRkZWQgYXQgdGhlIGVuZCB0byBjb21wdXRlIHRoZSBQb2x5MTMwNSBNQUMuICBPdGhlcndpc2UsCisrICogb25seSB0aGUgzrUtYWxtb3N0LeKIhi11bml2ZXJzYWwgaGFzaCBmdW5jdGlvbiAobm90IHRoZSBmdWxsIE1BQykgaXMgY29tcHV0ZWQuCisgICovCistdm9pZCBwb2x5MTMwNV9jb3JlX3NldGtleShzdHJ1Y3QgcG9seTEzMDVfa2V5ICprZXksIGNvbnN0IHU4ICpyYXdfa2V5KTsKKysKKyt2b2lkIHBvbHkxMzA1X2NvcmVfc2V0a2V5KHN0cnVjdCBwb2x5MTMwNV9jb3JlX2tleSAqa2V5LCBjb25zdCB1OCAqcmF3X2tleSk7Cisgc3RhdGljIGlubGluZSB2b2lkIHBvbHkxMzA1X2NvcmVfaW5pdChzdHJ1Y3QgcG9seTEzMDVfc3RhdGUgKnN0YXRlKQorIHsKKyAJKnN0YXRlID0gKHN0cnVjdCBwb2x5MTMwNV9zdGF0ZSl7fTsKKyB9CisgCisgdm9pZCBwb2x5MTMwNV9jb3JlX2Jsb2NrcyhzdHJ1Y3QgcG9seTEzMDVfc3RhdGUgKnN0YXRlLAorLQkJCSAgY29uc3Qgc3RydWN0IHBvbHkxMzA1X2tleSAqa2V5LCBjb25zdCB2b2lkICpzcmMsCisrCQkJICBjb25zdCBzdHJ1Y3QgcG9seTEzMDVfY29yZV9rZXkgKmtleSwgY29uc3Qgdm9pZCAqc3JjLAorIAkJCSAgdW5zaWduZWQgaW50IG5ibG9ja3MsIHUzMiBoaWJpdCk7Cistdm9pZCBwb2x5MTMwNV9jb3JlX2VtaXQoY29uc3Qgc3RydWN0IHBvbHkxMzA1X3N0YXRlICpzdGF0ZSwgdm9pZCAqZHN0KTsKKy0KKy0vKgorLSAqIFBvbHkxMzA1IHJlcXVpcmVzIGEgdW5pcXVlIGtleSBmb3IgZWFjaCB0YWcsIHdoaWNoIGltcGxpZXMgdGhhdCB3ZSBjYW4ndCBzZXQKKy0gKiBpdCBvbiB0aGUgdGZtIHRoYXQgZ2V0cyBhY2Nlc3NlZCBieSBtdWx0aXBsZSB1c2VycyBzaW11bHRhbmVvdXNseS4gSW5zdGVhZCB3ZQorLSAqIGV4cGVjdCB0aGUga2V5IGFzIHRoZSBmaXJzdCAzMiBieXRlcyBpbiB0aGUgdXBkYXRlKCkgY2FsbC4KKy0gKi8KKy1zdGF0aWMgaW5saW5lCistdW5zaWduZWQgaW50IGNyeXB0b19wb2x5MTMwNV9zZXRkZXNja2V5KHN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCAqZGN0eCwKKy0JCQkJCWNvbnN0IHU4ICpzcmMsIHVuc2lnbmVkIGludCBzcmNsZW4pCisteworLQlpZiAoIWRjdHgtPnNzZXQpIHsKKy0JCWlmICghZGN0eC0+cnNldCAmJiBzcmNsZW4gPj0gUE9MWTEzMDVfQkxPQ0tfU0laRSkgeworLQkJCXBvbHkxMzA1X2NvcmVfc2V0a2V5KGRjdHgtPnIsIHNyYyk7CistCQkJc3JjICs9IFBPTFkxMzA1X0JMT0NLX1NJWkU7CistCQkJc3JjbGVuIC09IFBPTFkxMzA1X0JMT0NLX1NJWkU7CistCQkJZGN0eC0+cnNldCA9IDE7CistCQl9CistCQlpZiAoc3JjbGVuID49IFBPTFkxMzA1X0JMT0NLX1NJWkUpIHsKKy0JCQlkY3R4LT5zWzBdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNyYyArICAwKTsKKy0JCQlkY3R4LT5zWzFdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNyYyArICA0KTsKKy0JCQlkY3R4LT5zWzJdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNyYyArICA4KTsKKy0JCQlkY3R4LT5zWzNdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNyYyArIDEyKTsKKy0JCQlzcmMgKz0gUE9MWTEzMDVfQkxPQ0tfU0laRTsKKy0JCQlzcmNsZW4gLT0gUE9MWTEzMDVfQkxPQ0tfU0laRTsKKy0JCQlkY3R4LT5zc2V0ID0gdHJ1ZTsKKy0JCX0KKy0JfQorLQlyZXR1cm4gc3JjbGVuOworLX0KKyt2b2lkIHBvbHkxMzA1X2NvcmVfZW1pdChjb25zdCBzdHJ1Y3QgcG9seTEzMDVfc3RhdGUgKnN0YXRlLCBjb25zdCB1MzIgbm9uY2VbNF0sCisrCQkJdm9pZCAqZHN0KTsKKyAKKyAjZW5kaWYKKy0tLSBhL2luY2x1ZGUvY3J5cHRvL25ocG9seTEzMDUuaAorKysrIGIvaW5jbHVkZS9jcnlwdG8vbmhwb2x5MTMwNS5oCitAQCAtNyw3ICs3LDcgQEAKKyAjZGVmaW5lIF9OSFBPTFkxMzA1X0gKKyAKKyAjaW5jbHVkZSA8Y3J5cHRvL2hhc2guaD4KKy0jaW5jbHVkZSA8Y3J5cHRvL3BvbHkxMzA1Lmg+CisrI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9wb2x5MTMwNS5oPgorIAorIC8qIE5IIHBhcmFtZXRlcml6YXRpb246ICovCisgCitAQCAtMzMsNyArMzMsNyBAQAorICNkZWZpbmUgTkhQT0xZMTMwNV9LRVlfU0laRQkoUE9MWTEzMDVfQkxPQ0tfU0laRSArIE5IX0tFWV9CWVRFUykKKyAKKyBzdHJ1Y3Qgbmhwb2x5MTMwNV9rZXkgeworLQlzdHJ1Y3QgcG9seTEzMDVfa2V5IHBvbHlfa2V5OworKwlzdHJ1Y3QgcG9seTEzMDVfY29yZV9rZXkgcG9seV9rZXk7CisgCXUzMiBuaF9rZXlbTkhfS0VZX1dPUkRTXTsKKyB9OworIAorLS0tIGEvaW5jbHVkZS9jcnlwdG8vcG9seTEzMDUuaAorKysrIGIvaW5jbHVkZS9jcnlwdG8vcG9seTEzMDUuaAorQEAgLTEzLDEyICsxMywyOSBAQAorICNkZWZpbmUgUE9MWTEzMDVfS0VZX1NJWkUJMzIKKyAjZGVmaW5lIFBPTFkxMzA1X0RJR0VTVF9TSVpFCTE2CisgCisrLyogVGhlIHBvbHkxMzA1X2tleSBhbmQgcG9seTEzMDVfc3RhdGUgdHlwZXMgYXJlIG1vc3RseSBvcGFxdWUgYW5kCisrICogaW1wbGVtZW50YXRpb24tZGVmaW5lZC4gTGltYnMgbWlnaHQgYmUgaW4gYmFzZSAyXjY0IG9yIGJhc2UgMl4yNiwgb3IKKysgKiBkaWZmZXJlbnQgeWV0LiBUaGUgdW5pb24gdHlwZSBwcm92aWRlZCBrZWVwcyB0aGVzZSA2NC1iaXQgYWxpZ25lZCBmb3IgdGhlCisrICogY2FzZSBpbiB3aGljaCB0aGlzIGlzIGltcGxlbWVudGVkIHVzaW5nIDY0eDY0IG11bHRpcGxpZXMuCisrICovCisrCisgc3RydWN0IHBvbHkxMzA1X2tleSB7CistCXUzMiByWzVdOwkvKiBrZXksIGJhc2UgMl4yNiAqLworKwl1bmlvbiB7CisrCQl1MzIgcls1XTsKKysJCXU2NCByNjRbM107CisrCX07CisrfTsKKysKKytzdHJ1Y3QgcG9seTEzMDVfY29yZV9rZXkgeworKwlzdHJ1Y3QgcG9seTEzMDVfa2V5IGtleTsKKysJc3RydWN0IHBvbHkxMzA1X2tleSBwcmVjb21wdXRlZF9zOworIH07CisgCisgc3RydWN0IHBvbHkxMzA1X3N0YXRlIHsKKy0JdTMyIGhbNV07CS8qIGFjY3VtdWxhdG9yLCBiYXNlIDJeMjYgKi8KKysJdW5pb24geworKwkJdTMyIGhbNV07CisrCQl1NjQgaDY0WzNdOworKwl9OworIH07CisgCisgc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4IHsKK0BAIC0zNSw3ICs1MiwxMCBAQCBzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggeworIAkvKiBhY2N1bXVsYXRvciAqLworIAlzdHJ1Y3QgcG9seTEzMDVfc3RhdGUgaDsKKyAJLyoga2V5ICovCistCXN0cnVjdCBwb2x5MTMwNV9rZXkgcltDT05GSUdfQ1JZUFRPX0xJQl9QT0xZMTMwNV9SU0laRV07CisrCXVuaW9uIHsKKysJCXN0cnVjdCBwb2x5MTMwNV9rZXkgb3BhcXVlX3JbQ09ORklHX0NSWVBUT19MSUJfUE9MWTEzMDVfUlNJWkVdOworKwkJc3RydWN0IHBvbHkxMzA1X2NvcmVfa2V5IGNvcmVfcjsKKysJfTsKKyB9OworIAorIHZvaWQgcG9seTEzMDVfaW5pdF9hcmNoKHN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCAqZGVzYywgY29uc3QgdTggKmtleSk7CistLS0gYS9saWIvY3J5cHRvL01ha2VmaWxlCisrKysgYi9saWIvY3J5cHRvL01ha2VmaWxlCitAQCAtMjgsNyArMjgsOSBAQCBvYmotJChDT05GSUdfQ1JZUFRPX0xJQl9ERVMpCQkJKz0gbGliZGVzCisgbGliZGVzLXkJCQkJCTo9IGRlcy5vCisgCisgb2JqLSQoQ09ORklHX0NSWVBUT19MSUJfUE9MWTEzMDVfR0VORVJJQykJKz0gbGlicG9seTEzMDUubworLWxpYnBvbHkxMzA1LXkJCQkJCTo9IHBvbHkxMzA1Lm8KKytsaWJwb2x5MTMwNS15CQkJCQk6PSBwb2x5MTMwNS1kb25uYTMyLm8KKytsaWJwb2x5MTMwNS0kKENPTkZJR19BUkNIX1NVUFBPUlRTX0lOVDEyOCkJOj0gcG9seTEzMDUtZG9ubmE2NC5vCisrbGlicG9seTEzMDUteQkJCQkJKz0gcG9seTEzMDUubworIAorIG9iai0kKENPTkZJR19DUllQVE9fTElCX1NIQTI1NikJCQkrPSBsaWJzaGEyNTYubworIGxpYnNoYTI1Ni15CQkJCQk6PSBzaGEyNTYubworLS0tIC9kZXYvbnVsbAorKysrIGIvbGliL2NyeXB0by9wb2x5MTMwNS1kb25uYTMyLmMKK0BAIC0wLDAgKzEsMjA0IEBACisrLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCisrLyoKKysgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisrICoKKysgKiBUaGlzIGlzIGJhc2VkIGluIHBhcnQgb24gQW5kcmV3IE1vb24ncyBwb2x5MTMwNS1kb25uYSwgd2hpY2ggaXMgaW4gdGhlCisrICogcHVibGljIGRvbWFpbi4KKysgKi8KKysKKysjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisrI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKysjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL3BvbHkxMzA1Lmg+CisrCisrdm9pZCBwb2x5MTMwNV9jb3JlX3NldGtleShzdHJ1Y3QgcG9seTEzMDVfY29yZV9rZXkgKmtleSwgY29uc3QgdTggcmF3X2tleVsxNl0pCisreworKwkvKiByICY9IDB4ZmZmZmZmYzBmZmZmZmZjMGZmZmZmZmMwZmZmZmZmZiAqLworKwlrZXktPmtleS5yWzBdID0gKGdldF91bmFsaWduZWRfbGUzMigmcmF3X2tleVswXSkpICYgMHgzZmZmZmZmOworKwlrZXktPmtleS5yWzFdID0gKGdldF91bmFsaWduZWRfbGUzMigmcmF3X2tleVszXSkgPj4gMikgJiAweDNmZmZmMDM7CisrCWtleS0+a2V5LnJbMl0gPSAoZ2V0X3VuYWxpZ25lZF9sZTMyKCZyYXdfa2V5WzZdKSA+PiA0KSAmIDB4M2ZmYzBmZjsKKysJa2V5LT5rZXkuclszXSA9IChnZXRfdW5hbGlnbmVkX2xlMzIoJnJhd19rZXlbOV0pID4+IDYpICYgMHgzZjAzZmZmOworKwlrZXktPmtleS5yWzRdID0gKGdldF91bmFsaWduZWRfbGUzMigmcmF3X2tleVsxMl0pID4+IDgpICYgMHgwMGZmZmZmOworKworKwkvKiBzID0gNSpyICovCisrCWtleS0+cHJlY29tcHV0ZWRfcy5yWzBdID0ga2V5LT5rZXkuclsxXSAqIDU7CisrCWtleS0+cHJlY29tcHV0ZWRfcy5yWzFdID0ga2V5LT5rZXkuclsyXSAqIDU7CisrCWtleS0+cHJlY29tcHV0ZWRfcy5yWzJdID0ga2V5LT5rZXkuclszXSAqIDU7CisrCWtleS0+cHJlY29tcHV0ZWRfcy5yWzNdID0ga2V5LT5rZXkucls0XSAqIDU7CisrfQorK0VYUE9SVF9TWU1CT0wocG9seTEzMDVfY29yZV9zZXRrZXkpOworKworK3ZvaWQgcG9seTEzMDVfY29yZV9ibG9ja3Moc3RydWN0IHBvbHkxMzA1X3N0YXRlICpzdGF0ZSwKKysJCQkgIGNvbnN0IHN0cnVjdCBwb2x5MTMwNV9jb3JlX2tleSAqa2V5LCBjb25zdCB2b2lkICpzcmMsCisrCQkJICB1bnNpZ25lZCBpbnQgbmJsb2NrcywgdTMyIGhpYml0KQorK3sKKysJY29uc3QgdTggKmlucHV0ID0gc3JjOworKwl1MzIgcjAsIHIxLCByMiwgcjMsIHI0OworKwl1MzIgczEsIHMyLCBzMywgczQ7CisrCXUzMiBoMCwgaDEsIGgyLCBoMywgaDQ7CisrCXU2NCBkMCwgZDEsIGQyLCBkMywgZDQ7CisrCXUzMiBjOworKworKwlpZiAoIW5ibG9ja3MpCisrCQlyZXR1cm47CisrCisrCWhpYml0IDw8PSAyNDsKKysKKysJcjAgPSBrZXktPmtleS5yWzBdOworKwlyMSA9IGtleS0+a2V5LnJbMV07CisrCXIyID0ga2V5LT5rZXkuclsyXTsKKysJcjMgPSBrZXktPmtleS5yWzNdOworKwlyNCA9IGtleS0+a2V5LnJbNF07CisrCisrCXMxID0ga2V5LT5wcmVjb21wdXRlZF9zLnJbMF07CisrCXMyID0ga2V5LT5wcmVjb21wdXRlZF9zLnJbMV07CisrCXMzID0ga2V5LT5wcmVjb21wdXRlZF9zLnJbMl07CisrCXM0ID0ga2V5LT5wcmVjb21wdXRlZF9zLnJbM107CisrCisrCWgwID0gc3RhdGUtPmhbMF07CisrCWgxID0gc3RhdGUtPmhbMV07CisrCWgyID0gc3RhdGUtPmhbMl07CisrCWgzID0gc3RhdGUtPmhbM107CisrCWg0ID0gc3RhdGUtPmhbNF07CisrCisrCWRvIHsKKysJCS8qIGggKz0gbVtpXSAqLworKwkJaDAgKz0gKGdldF91bmFsaWduZWRfbGUzMigmaW5wdXRbMF0pKSAmIDB4M2ZmZmZmZjsKKysJCWgxICs9IChnZXRfdW5hbGlnbmVkX2xlMzIoJmlucHV0WzNdKSA+PiAyKSAmIDB4M2ZmZmZmZjsKKysJCWgyICs9IChnZXRfdW5hbGlnbmVkX2xlMzIoJmlucHV0WzZdKSA+PiA0KSAmIDB4M2ZmZmZmZjsKKysJCWgzICs9IChnZXRfdW5hbGlnbmVkX2xlMzIoJmlucHV0WzldKSA+PiA2KSAmIDB4M2ZmZmZmZjsKKysJCWg0ICs9IChnZXRfdW5hbGlnbmVkX2xlMzIoJmlucHV0WzEyXSkgPj4gOCkgfCBoaWJpdDsKKysKKysJCS8qIGggKj0gciAqLworKwkJZDAgPSAoKHU2NCloMCAqIHIwKSArICgodTY0KWgxICogczQpICsKKysJCSAgICAgKCh1NjQpaDIgKiBzMykgKyAoKHU2NCloMyAqIHMyKSArCisrCQkgICAgICgodTY0KWg0ICogczEpOworKwkJZDEgPSAoKHU2NCloMCAqIHIxKSArICgodTY0KWgxICogcjApICsKKysJCSAgICAgKCh1NjQpaDIgKiBzNCkgKyAoKHU2NCloMyAqIHMzKSArCisrCQkgICAgICgodTY0KWg0ICogczIpOworKwkJZDIgPSAoKHU2NCloMCAqIHIyKSArICgodTY0KWgxICogcjEpICsKKysJCSAgICAgKCh1NjQpaDIgKiByMCkgKyAoKHU2NCloMyAqIHM0KSArCisrCQkgICAgICgodTY0KWg0ICogczMpOworKwkJZDMgPSAoKHU2NCloMCAqIHIzKSArICgodTY0KWgxICogcjIpICsKKysJCSAgICAgKCh1NjQpaDIgKiByMSkgKyAoKHU2NCloMyAqIHIwKSArCisrCQkgICAgICgodTY0KWg0ICogczQpOworKwkJZDQgPSAoKHU2NCloMCAqIHI0KSArICgodTY0KWgxICogcjMpICsKKysJCSAgICAgKCh1NjQpaDIgKiByMikgKyAoKHU2NCloMyAqIHIxKSArCisrCQkgICAgICgodTY0KWg0ICogcjApOworKworKwkJLyogKHBhcnRpYWwpIGggJT0gcCAqLworKwkJYyA9ICh1MzIpKGQwID4+IDI2KTsKKysJCWgwID0gKHUzMilkMCAmIDB4M2ZmZmZmZjsKKysJCWQxICs9IGM7CisrCQljID0gKHUzMikoZDEgPj4gMjYpOworKwkJaDEgPSAodTMyKWQxICYgMHgzZmZmZmZmOworKwkJZDIgKz0gYzsKKysJCWMgPSAodTMyKShkMiA+PiAyNik7CisrCQloMiA9ICh1MzIpZDIgJiAweDNmZmZmZmY7CisrCQlkMyArPSBjOworKwkJYyA9ICh1MzIpKGQzID4+IDI2KTsKKysJCWgzID0gKHUzMilkMyAmIDB4M2ZmZmZmZjsKKysJCWQ0ICs9IGM7CisrCQljID0gKHUzMikoZDQgPj4gMjYpOworKwkJaDQgPSAodTMyKWQ0ICYgMHgzZmZmZmZmOworKwkJaDAgKz0gYyAqIDU7CisrCQljID0gKGgwID4+IDI2KTsKKysJCWgwID0gaDAgJiAweDNmZmZmZmY7CisrCQloMSArPSBjOworKworKwkJaW5wdXQgKz0gUE9MWTEzMDVfQkxPQ0tfU0laRTsKKysJfSB3aGlsZSAoLS1uYmxvY2tzKTsKKysKKysJc3RhdGUtPmhbMF0gPSBoMDsKKysJc3RhdGUtPmhbMV0gPSBoMTsKKysJc3RhdGUtPmhbMl0gPSBoMjsKKysJc3RhdGUtPmhbM10gPSBoMzsKKysJc3RhdGUtPmhbNF0gPSBoNDsKKyt9CisrRVhQT1JUX1NZTUJPTChwb2x5MTMwNV9jb3JlX2Jsb2Nrcyk7CisrCisrdm9pZCBwb2x5MTMwNV9jb3JlX2VtaXQoY29uc3Qgc3RydWN0IHBvbHkxMzA1X3N0YXRlICpzdGF0ZSwgY29uc3QgdTMyIG5vbmNlWzRdLAorKwkJCXZvaWQgKmRzdCkKKyt7CisrCXU4ICptYWMgPSBkc3Q7CisrCXUzMiBoMCwgaDEsIGgyLCBoMywgaDQsIGM7CisrCXUzMiBnMCwgZzEsIGcyLCBnMywgZzQ7CisrCXU2NCBmOworKwl1MzIgbWFzazsKKysKKysJLyogZnVsbHkgY2FycnkgaCAqLworKwloMCA9IHN0YXRlLT5oWzBdOworKwloMSA9IHN0YXRlLT5oWzFdOworKwloMiA9IHN0YXRlLT5oWzJdOworKwloMyA9IHN0YXRlLT5oWzNdOworKwloNCA9IHN0YXRlLT5oWzRdOworKworKwljID0gaDEgPj4gMjY7CisrCWgxID0gaDEgJiAweDNmZmZmZmY7CisrCWgyICs9IGM7CisrCWMgPSBoMiA+PiAyNjsKKysJaDIgPSBoMiAmIDB4M2ZmZmZmZjsKKysJaDMgKz0gYzsKKysJYyA9IGgzID4+IDI2OworKwloMyA9IGgzICYgMHgzZmZmZmZmOworKwloNCArPSBjOworKwljID0gaDQgPj4gMjY7CisrCWg0ID0gaDQgJiAweDNmZmZmZmY7CisrCWgwICs9IGMgKiA1OworKwljID0gaDAgPj4gMjY7CisrCWgwID0gaDAgJiAweDNmZmZmZmY7CisrCWgxICs9IGM7CisrCisrCS8qIGNvbXB1dGUgaCArIC1wICovCisrCWcwID0gaDAgKyA1OworKwljID0gZzAgPj4gMjY7CisrCWcwICY9IDB4M2ZmZmZmZjsKKysJZzEgPSBoMSArIGM7CisrCWMgPSBnMSA+PiAyNjsKKysJZzEgJj0gMHgzZmZmZmZmOworKwlnMiA9IGgyICsgYzsKKysJYyA9IGcyID4+IDI2OworKwlnMiAmPSAweDNmZmZmZmY7CisrCWczID0gaDMgKyBjOworKwljID0gZzMgPj4gMjY7CisrCWczICY9IDB4M2ZmZmZmZjsKKysJZzQgPSBoNCArIGMgLSAoMVVMIDw8IDI2KTsKKysKKysJLyogc2VsZWN0IGggaWYgaCA8IHAsIG9yIGggKyAtcCBpZiBoID49IHAgKi8KKysJbWFzayA9IChnNCA+PiAoKHNpemVvZih1MzIpICogOCkgLSAxKSkgLSAxOworKwlnMCAmPSBtYXNrOworKwlnMSAmPSBtYXNrOworKwlnMiAmPSBtYXNrOworKwlnMyAmPSBtYXNrOworKwlnNCAmPSBtYXNrOworKwltYXNrID0gfm1hc2s7CisrCisrCWgwID0gKGgwICYgbWFzaykgfCBnMDsKKysJaDEgPSAoaDEgJiBtYXNrKSB8IGcxOworKwloMiA9IChoMiAmIG1hc2spIHwgZzI7CisrCWgzID0gKGgzICYgbWFzaykgfCBnMzsKKysJaDQgPSAoaDQgJiBtYXNrKSB8IGc0OworKworKwkvKiBoID0gaCAlICgyXjEyOCkgKi8KKysJaDAgPSAoKGgwKSB8IChoMSA8PCAyNikpICYgMHhmZmZmZmZmZjsKKysJaDEgPSAoKGgxID4+IDYpIHwgKGgyIDw8IDIwKSkgJiAweGZmZmZmZmZmOworKwloMiA9ICgoaDIgPj4gMTIpIHwgKGgzIDw8IDE0KSkgJiAweGZmZmZmZmZmOworKwloMyA9ICgoaDMgPj4gMTgpIHwgKGg0IDw8IDgpKSAmIDB4ZmZmZmZmZmY7CisrCisrCWlmIChsaWtlbHkobm9uY2UpKSB7CisrCQkvKiBtYWMgPSAoaCArIG5vbmNlKSAlICgyXjEyOCkgKi8KKysJCWYgPSAodTY0KWgwICsgbm9uY2VbMF07CisrCQloMCA9ICh1MzIpZjsKKysJCWYgPSAodTY0KWgxICsgbm9uY2VbMV0gKyAoZiA+PiAzMik7CisrCQloMSA9ICh1MzIpZjsKKysJCWYgPSAodTY0KWgyICsgbm9uY2VbMl0gKyAoZiA+PiAzMik7CisrCQloMiA9ICh1MzIpZjsKKysJCWYgPSAodTY0KWgzICsgbm9uY2VbM10gKyAoZiA+PiAzMik7CisrCQloMyA9ICh1MzIpZjsKKysJfQorKworKwlwdXRfdW5hbGlnbmVkX2xlMzIoaDAsICZtYWNbMF0pOworKwlwdXRfdW5hbGlnbmVkX2xlMzIoaDEsICZtYWNbNF0pOworKwlwdXRfdW5hbGlnbmVkX2xlMzIoaDIsICZtYWNbOF0pOworKwlwdXRfdW5hbGlnbmVkX2xlMzIoaDMsICZtYWNbMTJdKTsKKyt9CisrRVhQT1JUX1NZTUJPTChwb2x5MTMwNV9jb3JlX2VtaXQpOworLS0tIC9kZXYvbnVsbAorKysrIGIvbGliL2NyeXB0by9wb2x5MTMwNS1kb25uYTY0LmMKK0BAIC0wLDAgKzEsMTg1IEBACisrLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCisrLyoKKysgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisrICoKKysgKiBUaGlzIGlzIGJhc2VkIGluIHBhcnQgb24gQW5kcmV3IE1vb24ncyBwb2x5MTMwNS1kb25uYSwgd2hpY2ggaXMgaW4gdGhlCisrICogcHVibGljIGRvbWFpbi4KKysgKi8KKysKKysjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisrI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKysjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL3BvbHkxMzA1Lmg+CisrCisrdHlwZWRlZiBfX3VpbnQxMjhfdCB1MTI4OworKworK3ZvaWQgcG9seTEzMDVfY29yZV9zZXRrZXkoc3RydWN0IHBvbHkxMzA1X2NvcmVfa2V5ICprZXksIGNvbnN0IHU4IHJhd19rZXlbMTZdKQorK3sKKysJdTY0IHQwLCB0MTsKKysKKysJLyogciAmPSAweGZmZmZmZmMwZmZmZmZmYzBmZmZmZmZjMGZmZmZmZmYgKi8KKysJdDAgPSBnZXRfdW5hbGlnbmVkX2xlNjQoJnJhd19rZXlbMF0pOworKwl0MSA9IGdldF91bmFsaWduZWRfbGU2NCgmcmF3X2tleVs4XSk7CisrCisrCWtleS0+a2V5LnI2NFswXSA9IHQwICYgMHhmZmMwZmZmZmZmZlVMTDsKKysJa2V5LT5rZXkucjY0WzFdID0gKCh0MCA+PiA0NCkgfCAodDEgPDwgMjApKSAmIDB4ZmZmZmZjMGZmZmZVTEw7CisrCWtleS0+a2V5LnI2NFsyXSA9ICgodDEgPj4gMjQpKSAmIDB4MDBmZmZmZmZjMGZVTEw7CisrCisrCS8qIHMgPSAyMCpyICovCisrCWtleS0+cHJlY29tcHV0ZWRfcy5yNjRbMF0gPSBrZXktPmtleS5yNjRbMV0gKiAyMDsKKysJa2V5LT5wcmVjb21wdXRlZF9zLnI2NFsxXSA9IGtleS0+a2V5LnI2NFsyXSAqIDIwOworK30KKytFWFBPUlRfU1lNQk9MKHBvbHkxMzA1X2NvcmVfc2V0a2V5KTsKKysKKyt2b2lkIHBvbHkxMzA1X2NvcmVfYmxvY2tzKHN0cnVjdCBwb2x5MTMwNV9zdGF0ZSAqc3RhdGUsCisrCQkJICBjb25zdCBzdHJ1Y3QgcG9seTEzMDVfY29yZV9rZXkgKmtleSwgY29uc3Qgdm9pZCAqc3JjLAorKwkJCSAgdW5zaWduZWQgaW50IG5ibG9ja3MsIHUzMiBoaWJpdCkKKyt7CisrCWNvbnN0IHU4ICppbnB1dCA9IHNyYzsKKysJdTY0IGhpYml0NjQ7CisrCXU2NCByMCwgcjEsIHIyOworKwl1NjQgczEsIHMyOworKwl1NjQgaDAsIGgxLCBoMjsKKysJdTY0IGM7CisrCXUxMjggZDAsIGQxLCBkMiwgZDsKKysKKysJaWYgKCFuYmxvY2tzKQorKwkJcmV0dXJuOworKworKwloaWJpdDY0ID0gKCh1NjQpaGliaXQpIDw8IDQwOworKworKwlyMCA9IGtleS0+a2V5LnI2NFswXTsKKysJcjEgPSBrZXktPmtleS5yNjRbMV07CisrCXIyID0ga2V5LT5rZXkucjY0WzJdOworKworKwloMCA9IHN0YXRlLT5oNjRbMF07CisrCWgxID0gc3RhdGUtPmg2NFsxXTsKKysJaDIgPSBzdGF0ZS0+aDY0WzJdOworKworKwlzMSA9IGtleS0+cHJlY29tcHV0ZWRfcy5yNjRbMF07CisrCXMyID0ga2V5LT5wcmVjb21wdXRlZF9zLnI2NFsxXTsKKysKKysJZG8geworKwkJdTY0IHQwLCB0MTsKKysKKysJCS8qIGggKz0gbVtpXSAqLworKwkJdDAgPSBnZXRfdW5hbGlnbmVkX2xlNjQoJmlucHV0WzBdKTsKKysJCXQxID0gZ2V0X3VuYWxpZ25lZF9sZTY0KCZpbnB1dFs4XSk7CisrCisrCQloMCArPSB0MCAmIDB4ZmZmZmZmZmZmZmZVTEw7CisrCQloMSArPSAoKHQwID4+IDQ0KSB8ICh0MSA8PCAyMCkpICYgMHhmZmZmZmZmZmZmZlVMTDsKKysJCWgyICs9ICgoKHQxID4+IDI0KSkgJiAweDNmZmZmZmZmZmZmVUxMKSB8IGhpYml0NjQ7CisrCisrCQkvKiBoICo9IHIgKi8KKysJCWQwID0gKHUxMjgpaDAgKiByMDsKKysJCWQgPSAodTEyOCloMSAqIHMyOworKwkJZDAgKz0gZDsKKysJCWQgPSAodTEyOCloMiAqIHMxOworKwkJZDAgKz0gZDsKKysJCWQxID0gKHUxMjgpaDAgKiByMTsKKysJCWQgPSAodTEyOCloMSAqIHIwOworKwkJZDEgKz0gZDsKKysJCWQgPSAodTEyOCloMiAqIHMyOworKwkJZDEgKz0gZDsKKysJCWQyID0gKHUxMjgpaDAgKiByMjsKKysJCWQgPSAodTEyOCloMSAqIHIxOworKwkJZDIgKz0gZDsKKysJCWQgPSAodTEyOCloMiAqIHIwOworKwkJZDIgKz0gZDsKKysKKysJCS8qIChwYXJ0aWFsKSBoICU9IHAgKi8KKysJCWMgPSAodTY0KShkMCA+PiA0NCk7CisrCQloMCA9ICh1NjQpZDAgJiAweGZmZmZmZmZmZmZmVUxMOworKwkJZDEgKz0gYzsKKysJCWMgPSAodTY0KShkMSA+PiA0NCk7CisrCQloMSA9ICh1NjQpZDEgJiAweGZmZmZmZmZmZmZmVUxMOworKwkJZDIgKz0gYzsKKysJCWMgPSAodTY0KShkMiA+PiA0Mik7CisrCQloMiA9ICh1NjQpZDIgJiAweDNmZmZmZmZmZmZmVUxMOworKwkJaDAgKz0gYyAqIDU7CisrCQljID0gaDAgPj4gNDQ7CisrCQloMCA9IGgwICYgMHhmZmZmZmZmZmZmZlVMTDsKKysJCWgxICs9IGM7CisrCisrCQlpbnB1dCArPSBQT0xZMTMwNV9CTE9DS19TSVpFOworKwl9IHdoaWxlICgtLW5ibG9ja3MpOworKworKwlzdGF0ZS0+aDY0WzBdID0gaDA7CisrCXN0YXRlLT5oNjRbMV0gPSBoMTsKKysJc3RhdGUtPmg2NFsyXSA9IGgyOworK30KKytFWFBPUlRfU1lNQk9MKHBvbHkxMzA1X2NvcmVfYmxvY2tzKTsKKysKKyt2b2lkIHBvbHkxMzA1X2NvcmVfZW1pdChjb25zdCBzdHJ1Y3QgcG9seTEzMDVfc3RhdGUgKnN0YXRlLCBjb25zdCB1MzIgbm9uY2VbNF0sCisrCQkJdm9pZCAqZHN0KQorK3sKKysJdTggKm1hYyA9IGRzdDsKKysJdTY0IGgwLCBoMSwgaDIsIGM7CisrCXU2NCBnMCwgZzEsIGcyOworKwl1NjQgdDAsIHQxOworKworKwkvKiBmdWxseSBjYXJyeSBoICovCisrCWgwID0gc3RhdGUtPmg2NFswXTsKKysJaDEgPSBzdGF0ZS0+aDY0WzFdOworKwloMiA9IHN0YXRlLT5oNjRbMl07CisrCisrCWMgPSBoMSA+PiA0NDsKKysJaDEgJj0gMHhmZmZmZmZmZmZmZlVMTDsKKysJaDIgKz0gYzsKKysJYyA9IGgyID4+IDQyOworKwloMiAmPSAweDNmZmZmZmZmZmZmVUxMOworKwloMCArPSBjICogNTsKKysJYyA9IGgwID4+IDQ0OworKwloMCAmPSAweGZmZmZmZmZmZmZmVUxMOworKwloMSArPSBjOworKwljID0gaDEgPj4gNDQ7CisrCWgxICY9IDB4ZmZmZmZmZmZmZmZVTEw7CisrCWgyICs9IGM7CisrCWMgPSBoMiA+PiA0MjsKKysJaDIgJj0gMHgzZmZmZmZmZmZmZlVMTDsKKysJaDAgKz0gYyAqIDU7CisrCWMgPSBoMCA+PiA0NDsKKysJaDAgJj0gMHhmZmZmZmZmZmZmZlVMTDsKKysJaDEgKz0gYzsKKysKKysJLyogY29tcHV0ZSBoICsgLXAgKi8KKysJZzAgPSBoMCArIDU7CisrCWMgID0gZzAgPj4gNDQ7CisrCWcwICY9IDB4ZmZmZmZmZmZmZmZVTEw7CisrCWcxID0gaDEgKyBjOworKwljICA9IGcxID4+IDQ0OworKwlnMSAmPSAweGZmZmZmZmZmZmZmVUxMOworKwlnMiA9IGgyICsgYyAtICgxVUxMIDw8IDQyKTsKKysKKysJLyogc2VsZWN0IGggaWYgaCA8IHAsIG9yIGggKyAtcCBpZiBoID49IHAgKi8KKysJYyA9IChnMiA+PiAoKHNpemVvZih1NjQpICogOCkgLSAxKSkgLSAxOworKwlnMCAmPSBjOworKwlnMSAmPSBjOworKwlnMiAmPSBjOworKwljICA9IH5jOworKwloMCA9IChoMCAmIGMpIHwgZzA7CisrCWgxID0gKGgxICYgYykgfCBnMTsKKysJaDIgPSAoaDIgJiBjKSB8IGcyOworKworKwlpZiAobGlrZWx5KG5vbmNlKSkgeworKwkJLyogaCA9IChoICsgbm9uY2UpICovCisrCQl0MCA9ICgodTY0KW5vbmNlWzFdIDw8IDMyKSB8IG5vbmNlWzBdOworKwkJdDEgPSAoKHU2NClub25jZVszXSA8PCAzMikgfCBub25jZVsyXTsKKysKKysJCWgwICs9IHQwICYgMHhmZmZmZmZmZmZmZlVMTDsKKysJCWMgPSBoMCA+PiA0NDsKKysJCWgwICY9IDB4ZmZmZmZmZmZmZmZVTEw7CisrCQloMSArPSAoKCh0MCA+PiA0NCkgfCAodDEgPDwgMjApKSAmIDB4ZmZmZmZmZmZmZmZVTEwpICsgYzsKKysJCWMgPSBoMSA+PiA0NDsKKysJCWgxICY9IDB4ZmZmZmZmZmZmZmZVTEw7CisrCQloMiArPSAoKCh0MSA+PiAyNCkpICYgMHgzZmZmZmZmZmZmZlVMTCkgKyBjOworKwkJaDIgJj0gMHgzZmZmZmZmZmZmZlVMTDsKKysJfQorKworKwkvKiBtYWMgPSBoICUgKDJeMTI4KSAqLworKwloMCA9IGgwIHwgKGgxIDw8IDQ0KTsKKysJaDEgPSAoaDEgPj4gMjApIHwgKGgyIDw8IDI0KTsKKysKKysJcHV0X3VuYWxpZ25lZF9sZTY0KGgwLCAmbWFjWzBdKTsKKysJcHV0X3VuYWxpZ25lZF9sZTY0KGgxLCAmbWFjWzhdKTsKKyt9CisrRVhQT1JUX1NZTUJPTChwb2x5MTMwNV9jb3JlX2VtaXQpOworLS0tIGEvbGliL2NyeXB0by9wb2x5MTMwNS5jCisrKysgYi9saWIvY3J5cHRvL3BvbHkxMzA1LmMKK0BAIC0xMiwxNTEgKzEyLDkgQEAKKyAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisgI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKyAKKy1zdGF0aWMgaW5saW5lIHU2NCBtbHQodTY0IGEsIHU2NCBiKQorLXsKKy0JcmV0dXJuIGEgKiBiOworLX0KKy0KKy1zdGF0aWMgaW5saW5lIHUzMiBzcih1NjQgdiwgdV9jaGFyIG4pCisteworLQlyZXR1cm4gdiA+PiBuOworLX0KKy0KKy1zdGF0aWMgaW5saW5lIHUzMiBhbmQodTMyIHYsIHUzMiBtYXNrKQorLXsKKy0JcmV0dXJuIHYgJiBtYXNrOworLX0KKy0KKy12b2lkIHBvbHkxMzA1X2NvcmVfc2V0a2V5KHN0cnVjdCBwb2x5MTMwNV9rZXkgKmtleSwgY29uc3QgdTggKnJhd19rZXkpCisteworLQkvKiByICY9IDB4ZmZmZmZmYzBmZmZmZmZjMGZmZmZmZmMwZmZmZmZmZiAqLworLQlrZXktPnJbMF0gPSAoZ2V0X3VuYWxpZ25lZF9sZTMyKHJhd19rZXkgKyAgMCkgPj4gMCkgJiAweDNmZmZmZmY7CistCWtleS0+clsxXSA9IChnZXRfdW5hbGlnbmVkX2xlMzIocmF3X2tleSArICAzKSA+PiAyKSAmIDB4M2ZmZmYwMzsKKy0Ja2V5LT5yWzJdID0gKGdldF91bmFsaWduZWRfbGUzMihyYXdfa2V5ICsgIDYpID4+IDQpICYgMHgzZmZjMGZmOworLQlrZXktPnJbM10gPSAoZ2V0X3VuYWxpZ25lZF9sZTMyKHJhd19rZXkgKyAgOSkgPj4gNikgJiAweDNmMDNmZmY7CistCWtleS0+cls0XSA9IChnZXRfdW5hbGlnbmVkX2xlMzIocmF3X2tleSArIDEyKSA+PiA4KSAmIDB4MDBmZmZmZjsKKy19CistRVhQT1JUX1NZTUJPTF9HUEwocG9seTEzMDVfY29yZV9zZXRrZXkpOworLQorLXZvaWQgcG9seTEzMDVfY29yZV9ibG9ja3Moc3RydWN0IHBvbHkxMzA1X3N0YXRlICpzdGF0ZSwKKy0JCQkgIGNvbnN0IHN0cnVjdCBwb2x5MTMwNV9rZXkgKmtleSwgY29uc3Qgdm9pZCAqc3JjLAorLQkJCSAgdW5zaWduZWQgaW50IG5ibG9ja3MsIHUzMiBoaWJpdCkKKy17CistCXUzMiByMCwgcjEsIHIyLCByMywgcjQ7CistCXUzMiBzMSwgczIsIHMzLCBzNDsKKy0JdTMyIGgwLCBoMSwgaDIsIGgzLCBoNDsKKy0JdTY0IGQwLCBkMSwgZDIsIGQzLCBkNDsKKy0KKy0JaWYgKCFuYmxvY2tzKQorLQkJcmV0dXJuOworLQorLQlyMCA9IGtleS0+clswXTsKKy0JcjEgPSBrZXktPnJbMV07CistCXIyID0ga2V5LT5yWzJdOworLQlyMyA9IGtleS0+clszXTsKKy0JcjQgPSBrZXktPnJbNF07CistCistCXMxID0gcjEgKiA1OworLQlzMiA9IHIyICogNTsKKy0JczMgPSByMyAqIDU7CistCXM0ID0gcjQgKiA1OworLQorLQloMCA9IHN0YXRlLT5oWzBdOworLQloMSA9IHN0YXRlLT5oWzFdOworLQloMiA9IHN0YXRlLT5oWzJdOworLQloMyA9IHN0YXRlLT5oWzNdOworLQloNCA9IHN0YXRlLT5oWzRdOworLQorLQlkbyB7CistCQkvKiBoICs9IG1baV0gKi8KKy0JCWgwICs9IChnZXRfdW5hbGlnbmVkX2xlMzIoc3JjICsgIDApID4+IDApICYgMHgzZmZmZmZmOworLQkJaDEgKz0gKGdldF91bmFsaWduZWRfbGUzMihzcmMgKyAgMykgPj4gMikgJiAweDNmZmZmZmY7CistCQloMiArPSAoZ2V0X3VuYWxpZ25lZF9sZTMyKHNyYyArICA2KSA+PiA0KSAmIDB4M2ZmZmZmZjsKKy0JCWgzICs9IChnZXRfdW5hbGlnbmVkX2xlMzIoc3JjICsgIDkpID4+IDYpICYgMHgzZmZmZmZmOworLQkJaDQgKz0gKGdldF91bmFsaWduZWRfbGUzMihzcmMgKyAxMikgPj4gOCkgfCAoaGliaXQgPDwgMjQpOworLQorLQkJLyogaCAqPSByICovCistCQlkMCA9IG1sdChoMCwgcjApICsgbWx0KGgxLCBzNCkgKyBtbHQoaDIsIHMzKSArCistCQkgICAgIG1sdChoMywgczIpICsgbWx0KGg0LCBzMSk7CistCQlkMSA9IG1sdChoMCwgcjEpICsgbWx0KGgxLCByMCkgKyBtbHQoaDIsIHM0KSArCistCQkgICAgIG1sdChoMywgczMpICsgbWx0KGg0LCBzMik7CistCQlkMiA9IG1sdChoMCwgcjIpICsgbWx0KGgxLCByMSkgKyBtbHQoaDIsIHIwKSArCistCQkgICAgIG1sdChoMywgczQpICsgbWx0KGg0LCBzMyk7CistCQlkMyA9IG1sdChoMCwgcjMpICsgbWx0KGgxLCByMikgKyBtbHQoaDIsIHIxKSArCistCQkgICAgIG1sdChoMywgcjApICsgbWx0KGg0LCBzNCk7CistCQlkNCA9IG1sdChoMCwgcjQpICsgbWx0KGgxLCByMykgKyBtbHQoaDIsIHIyKSArCistCQkgICAgIG1sdChoMywgcjEpICsgbWx0KGg0LCByMCk7CistCistCQkvKiAocGFydGlhbCkgaCAlPSBwICovCistCQlkMSArPSBzcihkMCwgMjYpOyAgICAgaDAgPSBhbmQoZDAsIDB4M2ZmZmZmZik7CistCQlkMiArPSBzcihkMSwgMjYpOyAgICAgaDEgPSBhbmQoZDEsIDB4M2ZmZmZmZik7CistCQlkMyArPSBzcihkMiwgMjYpOyAgICAgaDIgPSBhbmQoZDIsIDB4M2ZmZmZmZik7CistCQlkNCArPSBzcihkMywgMjYpOyAgICAgaDMgPSBhbmQoZDMsIDB4M2ZmZmZmZik7CistCQloMCArPSBzcihkNCwgMjYpICogNTsgaDQgPSBhbmQoZDQsIDB4M2ZmZmZmZik7CistCQloMSArPSBoMCA+PiAyNjsgICAgICAgaDAgPSBoMCAmIDB4M2ZmZmZmZjsKKy0KKy0JCXNyYyArPSBQT0xZMTMwNV9CTE9DS19TSVpFOworLQl9IHdoaWxlICgtLW5ibG9ja3MpOworLQorLQlzdGF0ZS0+aFswXSA9IGgwOworLQlzdGF0ZS0+aFsxXSA9IGgxOworLQlzdGF0ZS0+aFsyXSA9IGgyOworLQlzdGF0ZS0+aFszXSA9IGgzOworLQlzdGF0ZS0+aFs0XSA9IGg0OworLX0KKy1FWFBPUlRfU1lNQk9MX0dQTChwb2x5MTMwNV9jb3JlX2Jsb2Nrcyk7CistCistdm9pZCBwb2x5MTMwNV9jb3JlX2VtaXQoY29uc3Qgc3RydWN0IHBvbHkxMzA1X3N0YXRlICpzdGF0ZSwgdm9pZCAqZHN0KQorLXsKKy0JdTMyIGgwLCBoMSwgaDIsIGgzLCBoNDsKKy0JdTMyIGcwLCBnMSwgZzIsIGczLCBnNDsKKy0JdTMyIG1hc2s7CistCistCS8qIGZ1bGx5IGNhcnJ5IGggKi8KKy0JaDAgPSBzdGF0ZS0+aFswXTsKKy0JaDEgPSBzdGF0ZS0+aFsxXTsKKy0JaDIgPSBzdGF0ZS0+aFsyXTsKKy0JaDMgPSBzdGF0ZS0+aFszXTsKKy0JaDQgPSBzdGF0ZS0+aFs0XTsKKy0KKy0JaDIgKz0gKGgxID4+IDI2KTsgICAgIGgxID0gaDEgJiAweDNmZmZmZmY7CistCWgzICs9IChoMiA+PiAyNik7ICAgICBoMiA9IGgyICYgMHgzZmZmZmZmOworLQloNCArPSAoaDMgPj4gMjYpOyAgICAgaDMgPSBoMyAmIDB4M2ZmZmZmZjsKKy0JaDAgKz0gKGg0ID4+IDI2KSAqIDU7IGg0ID0gaDQgJiAweDNmZmZmZmY7CistCWgxICs9IChoMCA+PiAyNik7ICAgICBoMCA9IGgwICYgMHgzZmZmZmZmOworLQorLQkvKiBjb21wdXRlIGggKyAtcCAqLworLQlnMCA9IGgwICsgNTsKKy0JZzEgPSBoMSArIChnMCA+PiAyNik7ICAgICAgICAgICAgIGcwICY9IDB4M2ZmZmZmZjsKKy0JZzIgPSBoMiArIChnMSA+PiAyNik7ICAgICAgICAgICAgIGcxICY9IDB4M2ZmZmZmZjsKKy0JZzMgPSBoMyArIChnMiA+PiAyNik7ICAgICAgICAgICAgIGcyICY9IDB4M2ZmZmZmZjsKKy0JZzQgPSBoNCArIChnMyA+PiAyNikgLSAoMSA8PCAyNik7IGczICY9IDB4M2ZmZmZmZjsKKy0KKy0JLyogc2VsZWN0IGggaWYgaCA8IHAsIG9yIGggKyAtcCBpZiBoID49IHAgKi8KKy0JbWFzayA9IChnNCA+PiAoKHNpemVvZih1MzIpICogOCkgLSAxKSkgLSAxOworLQlnMCAmPSBtYXNrOworLQlnMSAmPSBtYXNrOworLQlnMiAmPSBtYXNrOworLQlnMyAmPSBtYXNrOworLQlnNCAmPSBtYXNrOworLQltYXNrID0gfm1hc2s7CistCWgwID0gKGgwICYgbWFzaykgfCBnMDsKKy0JaDEgPSAoaDEgJiBtYXNrKSB8IGcxOworLQloMiA9IChoMiAmIG1hc2spIHwgZzI7CistCWgzID0gKGgzICYgbWFzaykgfCBnMzsKKy0JaDQgPSAoaDQgJiBtYXNrKSB8IGc0OworLQorLQkvKiBoID0gaCAlICgyXjEyOCkgKi8KKy0JcHV0X3VuYWxpZ25lZF9sZTMyKChoMCA+PiAgMCkgfCAoaDEgPDwgMjYpLCBkc3QgKyAgMCk7CistCXB1dF91bmFsaWduZWRfbGUzMigoaDEgPj4gIDYpIHwgKGgyIDw8IDIwKSwgZHN0ICsgIDQpOworLQlwdXRfdW5hbGlnbmVkX2xlMzIoKGgyID4+IDEyKSB8IChoMyA8PCAxNCksIGRzdCArICA4KTsKKy0JcHV0X3VuYWxpZ25lZF9sZTMyKChoMyA+PiAxOCkgfCAoaDQgPDwgIDgpLCBkc3QgKyAxMik7CistfQorLUVYUE9SVF9TWU1CT0xfR1BMKHBvbHkxMzA1X2NvcmVfZW1pdCk7CistCisgdm9pZCBwb2x5MTMwNV9pbml0X2dlbmVyaWMoc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4ICpkZXNjLCBjb25zdCB1OCAqa2V5KQorIHsKKy0JcG9seTEzMDVfY29yZV9zZXRrZXkoZGVzYy0+ciwga2V5KTsKKysJcG9seTEzMDVfY29yZV9zZXRrZXkoJmRlc2MtPmNvcmVfciwga2V5KTsKKyAJZGVzYy0+c1swXSA9IGdldF91bmFsaWduZWRfbGUzMihrZXkgKyAxNik7CisgCWRlc2MtPnNbMV0gPSBnZXRfdW5hbGlnbmVkX2xlMzIoa2V5ICsgMjApOworIAlkZXNjLT5zWzJdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGtleSArIDI0KTsKK0BAIC0xNjQsNyArMjIsNyBAQCB2b2lkIHBvbHkxMzA1X2luaXRfZ2VuZXJpYyhzdHJ1Y3QgcG9seTEzCisgCXBvbHkxMzA1X2NvcmVfaW5pdCgmZGVzYy0+aCk7CisgCWRlc2MtPmJ1ZmxlbiA9IDA7CisgCWRlc2MtPnNzZXQgPSB0cnVlOworLQlkZXNjLT5yc2V0ID0gMTsKKysJZGVzYy0+cnNldCA9IDI7CisgfQorIEVYUE9SVF9TWU1CT0xfR1BMKHBvbHkxMzA1X2luaXRfZ2VuZXJpYyk7CisgCitAQCAtMTgxLDEzICszOSwxNCBAQCB2b2lkIHBvbHkxMzA1X3VwZGF0ZV9nZW5lcmljKHN0cnVjdCBwb2x5CisgCQlkZXNjLT5idWZsZW4gKz0gYnl0ZXM7CisgCisgCQlpZiAoZGVzYy0+YnVmbGVuID09IFBPTFkxMzA1X0JMT0NLX1NJWkUpIHsKKy0JCQlwb2x5MTMwNV9jb3JlX2Jsb2NrcygmZGVzYy0+aCwgZGVzYy0+ciwgZGVzYy0+YnVmLCAxLCAxKTsKKysJCQlwb2x5MTMwNV9jb3JlX2Jsb2NrcygmZGVzYy0+aCwgJmRlc2MtPmNvcmVfciwgZGVzYy0+YnVmLAorKwkJCQkJICAgICAxLCAxKTsKKyAJCQlkZXNjLT5idWZsZW4gPSAwOworIAkJfQorIAl9CisgCisgCWlmIChsaWtlbHkobmJ5dGVzID49IFBPTFkxMzA1X0JMT0NLX1NJWkUpKSB7CistCQlwb2x5MTMwNV9jb3JlX2Jsb2NrcygmZGVzYy0+aCwgZGVzYy0+ciwgc3JjLAorKwkJcG9seTEzMDVfY29yZV9ibG9ja3MoJmRlc2MtPmgsICZkZXNjLT5jb3JlX3IsIHNyYywKKyAJCQkJICAgICBuYnl0ZXMgLyBQT0xZMTMwNV9CTE9DS19TSVpFLCAxKTsKKyAJCXNyYyArPSBuYnl0ZXMgLSAobmJ5dGVzICUgUE9MWTEzMDVfQkxPQ0tfU0laRSk7CisgCQluYnl0ZXMgJT0gUE9MWTEzMDVfQkxPQ0tfU0laRTsKK0BAIC0yMDIsMjggKzYxLDE0IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHBvbHkxMzA1X3VwZGF0ZV9nZW5lcmkKKyAKKyB2b2lkIHBvbHkxMzA1X2ZpbmFsX2dlbmVyaWMoc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4ICpkZXNjLCB1OCAqZHN0KQorIHsKKy0JX19sZTMyIGRpZ2VzdFs0XTsKKy0JdTY0IGYgPSAwOworLQorIAlpZiAodW5saWtlbHkoZGVzYy0+YnVmbGVuKSkgeworIAkJZGVzYy0+YnVmW2Rlc2MtPmJ1ZmxlbisrXSA9IDE7CisgCQltZW1zZXQoZGVzYy0+YnVmICsgZGVzYy0+YnVmbGVuLCAwLAorIAkJICAgICAgIFBPTFkxMzA1X0JMT0NLX1NJWkUgLSBkZXNjLT5idWZsZW4pOworLQkJcG9seTEzMDVfY29yZV9ibG9ja3MoJmRlc2MtPmgsIGRlc2MtPnIsIGRlc2MtPmJ1ZiwgMSwgMCk7CisrCQlwb2x5MTMwNV9jb3JlX2Jsb2NrcygmZGVzYy0+aCwgJmRlc2MtPmNvcmVfciwgZGVzYy0+YnVmLCAxLCAwKTsKKyAJfQorIAorLQlwb2x5MTMwNV9jb3JlX2VtaXQoJmRlc2MtPmgsIGRpZ2VzdCk7CistCistCS8qIG1hYyA9IChoICsgcykgJSAoMl4xMjgpICovCistCWYgPSAoZiA+PiAzMikgKyBsZTMyX3RvX2NwdShkaWdlc3RbMF0pICsgZGVzYy0+c1swXTsKKy0JcHV0X3VuYWxpZ25lZF9sZTMyKGYsIGRzdCArIDApOworLQlmID0gKGYgPj4gMzIpICsgbGUzMl90b19jcHUoZGlnZXN0WzFdKSArIGRlc2MtPnNbMV07CistCXB1dF91bmFsaWduZWRfbGUzMihmLCBkc3QgKyA0KTsKKy0JZiA9IChmID4+IDMyKSArIGxlMzJfdG9fY3B1KGRpZ2VzdFsyXSkgKyBkZXNjLT5zWzJdOworLQlwdXRfdW5hbGlnbmVkX2xlMzIoZiwgZHN0ICsgOCk7CistCWYgPSAoZiA+PiAzMikgKyBsZTMyX3RvX2NwdShkaWdlc3RbM10pICsgZGVzYy0+c1szXTsKKy0JcHV0X3VuYWxpZ25lZF9sZTMyKGYsIGRzdCArIDEyKTsKKy0KKysJcG9seTEzMDVfY29yZV9lbWl0KCZkZXNjLT5oLCBkZXNjLT5zLCBkc3QpOworIAkqZGVzYyA9IChzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHgpe307CisgfQorIEVYUE9SVF9TWU1CT0xfR1BMKHBvbHkxMzA1X2ZpbmFsX2dlbmVyaWMpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA0Mi1jcnlwdG8teDg2LXBvbHkxMzA1LWltcG9ydC11bm1vZGlmaWVkLWNyeXB0b2dhbXMtaW1wLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA0Mi1jcnlwdG8teDg2LXBvbHkxMzA1LWltcG9ydC11bm1vZGlmaWVkLWNyeXB0b2dhbXMtaW1wLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNTIzODMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDQyLWNyeXB0by14ODYtcG9seTEzMDUtaW1wb3J0LXVubW9kaWZpZWQtY3J5cHRvZ2Ftcy1pbXAucGF0Y2gKQEAgLTAsMCArMSw0MTgzIEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogU3VuLCA1IEphbiAyMDIwIDIyOjQwOjQ3IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyeXB0bzogeDg2L3BvbHkxMzA1IC0gaW1wb3J0IHVubW9kaWZpZWQgY3J5cHRvZ2FtcworIGltcGxlbWVudGF0aW9uCisKK2NvbW1pdCAwODk2Y2EyYTBjYjYxMjdlOGExMjlmMWYyYTY4MGQ0OWI2YjBmNjVjIHVwc3RyZWFtLgorCitUaGVzZSB4ODZfNjQgdmVjdG9yaXplZCBpbXBsZW1lbnRhdGlvbnMgY29tZSBmcm9tIEFuZHkgUG9seWFrb3YncworQ1JZUFRPR0FNUyBpbXBsZW1lbnRhdGlvbiwgYW5kIGFyZSBpbmNsdWRlZCBoZXJlIGluIHJhdyBmb3JtIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgc28gdGhhdCBzdWJzZXF1ZW50IGNvbW1pdHMgdGhhdCBmaXggdGhlc2UgdXAgZm9yIHRoZQora2VybmVsIGNhbiBzZWUgaG93IGl0IGhhcyBjaGFuZ2VkLgorCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgYXJjaC94ODYvY3J5cHRvL3BvbHkxMzA1LXg4Nl82NC1jcnlwdG9nYW1zLnBsIHwgNDE1OSArKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0MTU5IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC94ODYvY3J5cHRvL3BvbHkxMzA1LXg4Nl82NC1jcnlwdG9nYW1zLnBsCisKKy0tLSAvZGV2L251bGwKKysrKyBiL2FyY2gveDg2L2NyeXB0by9wb2x5MTMwNS14ODZfNjQtY3J5cHRvZ2Ftcy5wbAorQEAgLTAsMCArMSw0MTU5IEBACisrIyEgL3Vzci9iaW4vZW52IHBlcmwKKysjIENvcHlyaWdodCAyMDE2LTIwMTggVGhlIE9wZW5TU0wgUHJvamVjdCBBdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKyMKKysjIExpY2Vuc2VkIHVuZGVyIHRoZSBPcGVuU1NMIGxpY2Vuc2UgKHRoZSAiTGljZW5zZSIpLiAgWW91IG1heSBub3QgdXNlCisrIyB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBjYW4gb2J0YWluIGEgY29weQorKyMgaW4gdGhlIGZpbGUgTElDRU5TRSBpbiB0aGUgc291cmNlIGRpc3RyaWJ1dGlvbiBvciBhdAorKyMgaHR0cHM6Ly93d3cub3BlbnNzbC5vcmcvc291cmNlL2xpY2Vuc2UuaHRtbAorKworKyMKKysjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQG9wZW5zc2wub3JnPiBmb3IgdGhlIE9wZW5TU0wKKysjIHByb2plY3QuIFRoZSBtb2R1bGUgaXMsIGhvd2V2ZXIsIGR1YWwgbGljZW5zZWQgdW5kZXIgT3BlblNTTCBhbmQKKysjIENSWVBUT0dBTVMgbGljZW5zZXMgZGVwZW5kaW5nIG9uIHdoZXJlIHlvdSBvYnRhaW4gaXQuIEZvciBmdXJ0aGVyCisrIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KKysjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrIworKyMgVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBQb2x5MTMwNSBoYXNoIGZvciB4ODZfNjQuCisrIworKyMgTWFyY2ggMjAxNQorKyMKKysjIEluaXRpYWwgcmVsZWFzZS4KKysjCisrIyBEZWNlbWJlciAyMDE2CisrIworKyMgQWRkIEFWWDUxMkYrVkwrQlcgY29kZSBwYXRoLgorKyMKKysjIE5vdmVtYmVyIDIwMTcKKysjCisrIyBDb252ZXJ0IEFWWDUxMkYrVkwrQlcgY29kZSBwYXRoIHRvIHB1cmUgQVZYNTEyRiwgc28gdGhhdCBpdCBjYW4gYmUKKysjIGV4ZWN1dGVkIGV2ZW4gb24gS25pZ2h0cyBMYW5kaW5nLiBUcmlnZ2VyIGZvciBtb2RpZmljYXRpb24gd2FzCisrIyBvYnNlcnZhdGlvbiB0aGF0IEFWWDUxMiBjb2RlIHBhdGhzIGNhbiBuZWdhdGl2ZWx5IGFmZmVjdCBvdmVyYWxsCisrIyBTa3lsYWtlLVggc3lzdGVtIHBlcmZvcm1hbmNlLiBTaW5jZSB3ZSBhcmUgbGlrZWx5IHRvIHN1cHByZXNzCisrIyBBVlg1MTJGIGNhcGFiaWxpdHkgZmxhZyBbYXQgbGVhc3Qgb24gU2t5bGFrZS1YXSwgY29udmVyc2lvbiBzZXJ2ZXMKKysjIGFzIGtpbmQgb2YgImludmVzdG1lbnQgcHJvdGVjdGlvbiIuIE5vdGUgdGhhdCBuZXh0ICpsYWtlIHByb2Nlc3NvciwKKysjIENhbm5vbGFrZSwgaGFzIEFWWDUxMklGTUEgY29kZSBwYXRoIHRvIGV4ZWN1dGUuLi4KKysjCisrIyBOdW1iZXJzIGFyZSBjeWNsZXMgcGVyIHByb2Nlc3NlZCBieXRlIHdpdGggcG9seTEzMDVfYmxvY2tzIGFsb25lLAorKyMgbWVhc3VyZWQgd2l0aCByZHRzYyBhdCBmaXhlZCBjbG9jayBmcmVxdWVuY3kuCisrIworKyMJCUlBTFUvZ2NjLTQuOCgqKQlBVlgoKiopCQlBVlgyCUFWWC01MTIKKysjIFA0CQk0LjQ2LysxMjAlCS0KKysjIENvcmUgMgkyLjQxLys5MCUJLQorKyMgV2VzdG1lcmUJMS44OC8rMTIwJQktCisrIyBTYW5keSBCcmlkZ2UJMS4zOS8rMTQwJQkxLjEwCisrIyBIYXN3ZWxsCTEuMTQvKzE3NSUJMS4xMQkJMC42NQorKyMgU2t5bGFrZVstWF0JMS4xMy8rMTIwJQkwLjk2CQkwLjUxCVswLjM1XQorKyMgU2lsdmVybW9udAkyLjgzLys5NSUJLQorKyMgS25pZ2h0cyBMCTMuNjAvPwkJMS42NQkJMS4xMAkwLjQxKCoqKikKKysjIEdvbGRtb250CTEuNzAvKzE4MCUJLQorKyMgVklBIE5hbm8JMS44Mi8rMTUwJQktCisrIyBTbGVkZ2VoYW1tZXIJMS4zOC8rMTYwJQktCisrIyBCdWxsZG96ZXIJMi4zMC8rMTMwJQkwLjk3CisrIyBSeXplbgkJMS4xNS8rMjAwJQkxLjA4CQkxLjE4CisrIworKyMgKCopCWltcHJvdmVtZW50IGNvZWZmaWNpZW50cyByZWxhdGl2ZSB0byBjbGFuZyBhcmUgbW9yZSBtb2Rlc3QgYW5kCisrIwlhcmUgfjUwJSBvbiBtb3N0IHByb2Nlc3NvcnMsIGluIGJvdGggY2FzZXMgd2UgYXJlIGNvbXBhcmluZyB0bworKyMJX19pbnQxMjggY29kZTsKKysjICgqKikJU1NFMiBpbXBsZW1lbnRhdGlvbiB3YXMgYXR0ZW1wdGVkLCBidXQgYW1vbmcgbm9uLUFWWCBwcm9jZXNzb3JzCisrIwlpdCB3YXMgZmFzdGVyIHRoYW4gaW50ZWdlci1vbmx5IGNvZGUgb25seSBvbiBvbGRlciBJbnRlbCBQNCBhbmQKKysjCUNvcmUgcHJvY2Vzc29ycywgNTAtMzAlLCBsZXNzIG5ld2VyIHByb2Nlc3NvciBpcywgYnV0IHNsb3dlciBvbgorKyMJY29udGVtcG9yYXJ5IG9uZXMsIGZvciBleGFtcGxlIGFsbW9zdCAyeCBzbG93ZXIgb24gQXRvbSwgYW5kIGFzCisrIwlmb3JtZXIgYXJlIG5hdHVyYWxseSBkaXNhcHBlYXJpbmcsIFNTRTIgaXMgZGVlbWVkIHVubmVjZXNzYXJ5OworKyMgKCoqKikJc3RyYW5nZWx5IGVub3VnaCBwZXJmb3JtYW5jZSBzZWVtcyB0byB2YXJ5IGZyb20gY29yZSB0byBjb3JlLAorKyMJbGlzdGVkIHJlc3VsdCBpcyBiZXN0IGNhc2U7CisrCisrJGZsYXZvdXIgPSBzaGlmdDsKKyskb3V0cHV0ICA9IHNoaWZ0OworK2lmICgkZmxhdm91ciA9fiAvXC4vKSB7ICRvdXRwdXQgPSAkZmxhdm91cjsgdW5kZWYgJGZsYXZvdXI7IH0KKysKKyskd2luNjQ9MDsgJHdpbjY0PTEgaWYgKCRmbGF2b3VyID1+IC9bbm1dYXNtfG1pbmd3NjQvIHx8ICRvdXRwdXQgPX4gL1wuYXNtJC8pOworKworKyQwID1+IG0vKC4qW1wvXFxdKVteXC9cXF0rJC87ICRkaXI9JDE7CisrKCAkeGxhdGU9IiR7ZGlyfXg4Nl82NC14bGF0ZS5wbCIgYW5kIC1mICR4bGF0ZSApIG9yCisrKCAkeGxhdGU9IiR7ZGlyfS4uLy4uL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsIiBhbmQgLWYgJHhsYXRlKSBvcgorK2RpZSAiY2FuJ3QgbG9jYXRlIHg4Nl82NC14bGF0ZS5wbCI7CisrCisraWYgKGAkRU5We0NDfSAtV2EsLXYgLWMgLW8gL2Rldi9udWxsIC14IGFzc2VtYmxlciAvZGV2L251bGwgMj4mMWAKKysJCT1+IC9HTlUgYXNzZW1ibGVyIHZlcnNpb24gKFsyLTldXC5bMC05XSspLykgeworKwkkYXZ4ID0gKCQxPj0yLjE5KSArICgkMT49Mi4yMikgKyAoJDE+PTIuMjUpICsgKCQxPj0yLjI2KTsKKyt9CisrCisraWYgKCEkYXZ4ICYmICR3aW42NCAmJiAoJGZsYXZvdXIgPX4gL25hc20vIHx8ICRFTlZ7QVNNfSA9fiAvbmFzbS8pICYmCisrCSAgIGBuYXNtIC12IDI+JjFgID1+IC9OQVNNIHZlcnNpb24gKFsyLTldXC5bMC05XSspKD86XC4oWzAtOV0rKSk/LykgeworKwkkYXZ4ID0gKCQxPj0yLjA5KSArICgkMT49Mi4xMCkgKyAyICogKCQxPj0yLjEyKTsKKysJJGF2eCArPSAyIGlmICgkMT09Mi4xMSAmJiAkMj49OCk7CisrfQorKworK2lmICghJGF2eCAmJiAkd2luNjQgJiYgKCRmbGF2b3VyID1+IC9tYXNtLyB8fCAkRU5We0FTTX0gPX4gL21sNjQvKSAmJgorKwkgICBgbWw2NCAyPiYxYCA9fiAvVmVyc2lvbiAoWzAtOV0rKVwuLykgeworKwkkYXZ4ID0gKCQxPj0xMCkgKyAoJDE+PTEyKTsKKyt9CisrCisraWYgKCEkYXZ4ICYmIGAkRU5We0NDfSAtdiAyPiYxYCA9fiAvKCg/Ol5jbGFuZ3xMTFZNKSB2ZXJzaW9ufC4qYmFzZWQgb24gTExWTSkgKFszLTldXC5bMC05XSspLykgeworKwkkYXZ4ID0gKCQyPj0zLjApICsgKCQyPjMuMCk7CisrfQorKworK29wZW4gT1VULCJ8IFwiJF5YXCIgXCIkeGxhdGVcIiAkZmxhdm91ciBcIiRvdXRwdXRcIiI7CisrKlNURE9VVD0qT1VUOworKworK215ICgkY3R4LCRpbnAsJGxlbiwkcGFkYml0KT0oIiVyZGkiLCIlcnNpIiwiJXJkeCIsIiVyY3giKTsKKytteSAoJG1hYywkbm9uY2UpPSgkaW5wLCRsZW4pOwkjICpfZW1pdCBhcmd1bWVudHMKKytteSAoJGQxLCRkMiwkZDMsICRyMCwkcjEsJHMxKT1tYXAoIiVyJF8iLCg4Li4xMykpOworK215ICgkaDAsJGgxLCRoMik9KCIlcjE0IiwiJXJieCIsIiVyYnAiKTsKKysKKytzdWIgcG9seTEzMDVfaXRlcmF0aW9uIHsKKysjIGlucHV0Ogljb3B5IG9mICRyMSBpbiAlcmF4LCAkaDAtJGgyLCAkcjAtJHIxCisrIyBvdXRwdXQ6CSRoMC0kaDIgKj0gJHIwLSRyMQorKyRjb2RlLj08PF9fXzsKKysJbXVscQkkaDAJCQkjIGgwKnIxCisrCW1vdgklcmF4LCRkMgorKwkgbW92CSRyMCwlcmF4CisrCW1vdgklcmR4LCRkMworKworKwltdWxxCSRoMAkJCSMgaDAqcjAKKysJbW92CSVyYXgsJGgwCQkjIGZ1dHVyZSAkaDAKKysJIG1vdgkkcjAsJXJheAorKwltb3YJJXJkeCwkZDEKKysKKysJbXVscQkkaDEJCQkjIGgxKnIwCisrCWFkZAklcmF4LCRkMgorKwkgbW92CSRzMSwlcmF4CisrCWFkYwklcmR4LCRkMworKworKwltdWxxCSRoMQkJCSMgaDEqczEKKysJIG1vdgkkaDIsJGgxCQkJIyBib3Jyb3cgJGgxCisrCWFkZAklcmF4LCRoMAorKwlhZGMJJXJkeCwkZDEKKysKKysJaW11bHEJJHMxLCRoMQkJCSMgaDIqczEKKysJYWRkCSRoMSwkZDIKKysJIG1vdgkkZDEsJGgxCisrCWFkYwlcJDAsJGQzCisrCisrCWltdWxxCSRyMCwkaDIJCQkjIGgyKnIwCisrCWFkZAkkZDIsJGgxCisrCW1vdglcJC00LCVyYXgJCSMgbWFzayB2YWx1ZQorKwlhZGMJJGgyLCRkMworKworKwlhbmQJJGQzLCVyYXgJCSMgbGFzdCByZWR1Y3Rpb24gc3RlcAorKwltb3YJJGQzLCRoMgorKwlzaHIJXCQyLCRkMworKwlhbmQJXCQzLCRoMgorKwlhZGQJJGQzLCVyYXgKKysJYWRkCSVyYXgsJGgwCisrCWFkYwlcJDAsJGgxCisrCWFkYwlcJDAsJGgyCisrX19fCisrfQorKworKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKyMgTGF5b3V0IG9mIG9wYXF1ZSBhcmVhIGlzIGZvbGxvd2luZy4KKysjCisrIwl1bnNpZ25lZCBfX2ludDY0IGhbM107CQkjIGN1cnJlbnQgaGFzaCB2YWx1ZSBiYXNlIDJeNjQKKysjCXVuc2lnbmVkIF9faW50NjQgclsyXTsJCSMga2V5IHZhbHVlIGJhc2UgMl42NAorKworKyRjb2RlLj08PF9fXzsKKysudGV4dAorKworKy5leHRlcm4JT1BFTlNTTF9pYTMyY2FwX1AKKysKKysuZ2xvYmwJcG9seTEzMDVfaW5pdAorKy5oaWRkZW4JcG9seTEzMDVfaW5pdAorKy5nbG9ibAlwb2x5MTMwNV9ibG9ja3MKKysuaGlkZGVuCXBvbHkxMzA1X2Jsb2NrcworKy5nbG9ibAlwb2x5MTMwNV9lbWl0CisrLmhpZGRlbglwb2x5MTMwNV9lbWl0CisrCisrLnR5cGUJcG9seTEzMDVfaW5pdCxcQGZ1bmN0aW9uLDMKKysuYWxpZ24JMzIKKytwb2x5MTMwNV9pbml0OgorKwl4b3IJJXJheCwlcmF4CisrCW1vdgklcmF4LDAoJGN0eCkJCSMgaW5pdGlhbGl6ZSBoYXNoIHZhbHVlCisrCW1vdgklcmF4LDgoJGN0eCkKKysJbW92CSVyYXgsMTYoJGN0eCkKKysKKysJY21wCVwkMCwkaW5wCisrCWplCS5Mbm9fa2V5CisrCisrCWxlYQlwb2x5MTMwNV9ibG9ja3MoJXJpcCksJXIxMAorKwlsZWEJcG9seTEzMDVfZW1pdCglcmlwKSwlcjExCisrX19fCisrJGNvZGUuPTw8X19fCWlmICgkYXZ4KTsKKysJbW92CU9QRU5TU0xfaWEzMmNhcF9QKzQoJXJpcCksJXI5CisrCWxlYQlwb2x5MTMwNV9ibG9ja3NfYXZ4KCVyaXApLCVyYXgKKysJbGVhCXBvbHkxMzA1X2VtaXRfYXZ4KCVyaXApLCVyY3gKKysJYnQJXCRgNjAtMzJgLCVyOQkJIyBBVlg/CisrCWNtb3ZjCSVyYXgsJXIxMAorKwljbW92YwklcmN4LCVyMTEKKytfX18KKyskY29kZS49PDxfX18JaWYgKCRhdng+MSk7CisrCWxlYQlwb2x5MTMwNV9ibG9ja3NfYXZ4MiglcmlwKSwlcmF4CisrCWJ0CVwkYDUrMzJgLCVyOQkJIyBBVlgyPworKwljbW92YwklcmF4LCVyMTAKKytfX18KKyskY29kZS49PDxfX18JaWYgKCRhdng+Myk7CisrCW1vdglcJGAoMTw8MzF8MTw8MjF8MTw8MTYpYCwlcmF4CisrCXNocglcJDMyLCVyOQorKwlhbmQJJXJheCwlcjkKKysJY21wCSVyYXgsJXI5CisrCWplCS5MaW5pdF9iYXNlMl80NAorK19fXworKyRjb2RlLj08PF9fXzsKKysJbW92CVwkMHgwZmZmZmZmYzBmZmZmZmZmLCVyYXgKKysJbW92CVwkMHgwZmZmZmZmYzBmZmZmZmZjLCVyY3gKKysJYW5kCTAoJGlucCksJXJheAorKwlhbmQJOCgkaW5wKSwlcmN4CisrCW1vdgklcmF4LDI0KCRjdHgpCisrCW1vdgklcmN4LDMyKCRjdHgpCisrX19fCisrJGNvZGUuPTw8X19fCWlmICgkZmxhdm91ciAhfiAvZWxmMzIvKTsKKysJbW92CSVyMTAsMCglcmR4KQorKwltb3YJJXIxMSw4KCVyZHgpCisrX19fCisrJGNvZGUuPTw8X19fCWlmICgkZmxhdm91ciA9fiAvZWxmMzIvKTsKKysJbW92CSVyMTBkLDAoJXJkeCkKKysJbW92CSVyMTFkLDQoJXJkeCkKKytfX18KKyskY29kZS49PDxfX187CisrCW1vdglcJDEsJWVheAorKy5Mbm9fa2V5OgorKwlyZXQKKysuc2l6ZQlwb2x5MTMwNV9pbml0LC4tcG9seTEzMDVfaW5pdAorKworKy50eXBlCXBvbHkxMzA1X2Jsb2NrcyxcQGZ1bmN0aW9uLDQKKysuYWxpZ24JMzIKKytwb2x5MTMwNV9ibG9ja3M6CisrLmNmaV9zdGFydHByb2MKKysuTGJsb2NrczoKKysJc2hyCVwkNCwkbGVuCisrCWp6CS5Mbm9fZGF0YQkJIyB0b28gc2hvcnQKKysKKysJcHVzaAklcmJ4CisrLmNmaV9wdXNoCSVyYngKKysJcHVzaAklcmJwCisrLmNmaV9wdXNoCSVyYnAKKysJcHVzaAklcjEyCisrLmNmaV9wdXNoCSVyMTIKKysJcHVzaAklcjEzCisrLmNmaV9wdXNoCSVyMTMKKysJcHVzaAklcjE0CisrLmNmaV9wdXNoCSVyMTQKKysJcHVzaAklcjE1CisrLmNmaV9wdXNoCSVyMTUKKysuTGJsb2Nrc19ib2R5OgorKworKwltb3YJJGxlbiwlcjE1CQkjIHJlYXNzaWduICRsZW4KKysKKysJbW92CTI0KCRjdHgpLCRyMAkJIyBsb2FkIHIKKysJbW92CTMyKCRjdHgpLCRzMQorKworKwltb3YJMCgkY3R4KSwkaDAJCSMgbG9hZCBoYXNoIHZhbHVlCisrCW1vdgk4KCRjdHgpLCRoMQorKwltb3YJMTYoJGN0eCksJGgyCisrCisrCW1vdgkkczEsJHIxCisrCXNocglcJDIsJHMxCisrCW1vdgkkcjEsJXJheAorKwlhZGQJJHIxLCRzMQkJCSMgczEgPSByMSArIChyMSA+PiAyKQorKwlqbXAJLkxvb3AKKysKKysuYWxpZ24JMzIKKysuTG9vcDoKKysJYWRkCTAoJGlucCksJGgwCQkjIGFjY3VtdWxhdGUgaW5wdXQKKysJYWRjCTgoJGlucCksJGgxCisrCWxlYQkxNigkaW5wKSwkaW5wCisrCWFkYwkkcGFkYml0LCRoMgorK19fXworKwkmcG9seTEzMDVfaXRlcmF0aW9uKCk7CisrJGNvZGUuPTw8X19fOworKwltb3YJJHIxLCVyYXgKKysJZGVjCSVyMTUJCQkjIGxlbi09MTYKKysJam56CS5Mb29wCisrCisrCW1vdgkkaDAsMCgkY3R4KQkJIyBzdG9yZSBoYXNoIHZhbHVlCisrCW1vdgkkaDEsOCgkY3R4KQorKwltb3YJJGgyLDE2KCRjdHgpCisrCisrCW1vdgkwKCVyc3ApLCVyMTUKKysuY2ZpX3Jlc3RvcmUJJXIxNQorKwltb3YJOCglcnNwKSwlcjE0CisrLmNmaV9yZXN0b3JlCSVyMTQKKysJbW92CTE2KCVyc3ApLCVyMTMKKysuY2ZpX3Jlc3RvcmUJJXIxMworKwltb3YJMjQoJXJzcCksJXIxMgorKy5jZmlfcmVzdG9yZQklcjEyCisrCW1vdgkzMiglcnNwKSwlcmJwCisrLmNmaV9yZXN0b3JlCSVyYnAKKysJbW92CTQwKCVyc3ApLCVyYngKKysuY2ZpX3Jlc3RvcmUJJXJieAorKwlsZWEJNDgoJXJzcCksJXJzcAorKy5jZmlfYWRqdXN0X2NmYV9vZmZzZXQJLTQ4CisrLkxub19kYXRhOgorKy5MYmxvY2tzX2VwaWxvZ3VlOgorKwlyZXQKKysuY2ZpX2VuZHByb2MKKysuc2l6ZQlwb2x5MTMwNV9ibG9ja3MsLi1wb2x5MTMwNV9ibG9ja3MKKysKKysudHlwZQlwb2x5MTMwNV9lbWl0LFxAZnVuY3Rpb24sMworKy5hbGlnbgkzMgorK3BvbHkxMzA1X2VtaXQ6CisrLkxlbWl0OgorKwltb3YJMCgkY3R4KSwlcjgJIyBsb2FkIGhhc2ggdmFsdWUKKysJbW92CTgoJGN0eCksJXI5CisrCW1vdgkxNigkY3R4KSwlcjEwCisrCisrCW1vdgklcjgsJXJheAorKwlhZGQJXCQ1LCVyOAkJIyBjb21wYXJlIHRvIG1vZHVsdXMKKysJbW92CSVyOSwlcmN4CisrCWFkYwlcJDAsJXI5CisrCWFkYwlcJDAsJXIxMAorKwlzaHIJXCQyLCVyMTAJIyBkaWQgMTMwLWJpdCB2YWx1ZSBvdmVyZmxvdz8KKysJY21vdm56CSVyOCwlcmF4CisrCWNtb3ZuegklcjksJXJjeAorKworKwlhZGQJMCgkbm9uY2UpLCVyYXgJIyBhY2N1bXVsYXRlIG5vbmNlCisrCWFkYwk4KCRub25jZSksJXJjeAorKwltb3YJJXJheCwwKCRtYWMpCSMgd3JpdGUgcmVzdWx0CisrCW1vdgklcmN4LDgoJG1hYykKKysKKysJcmV0CisrLnNpemUJcG9seTEzMDVfZW1pdCwuLXBvbHkxMzA1X2VtaXQKKytfX18KKytpZiAoJGF2eCkgeworKworKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKyMgTGF5b3V0IG9mIG9wYXF1ZSBhcmVhIGlzIGZvbGxvd2luZy4KKysjCisrIwl1bnNpZ25lZCBfX2ludDMyIGhbNV07CQkjIGN1cnJlbnQgaGFzaCB2YWx1ZSBiYXNlIDJeMjYKKysjCXVuc2lnbmVkIF9faW50MzIgaXNfYmFzZTJfMjY7CisrIwl1bnNpZ25lZCBfX2ludDY0IHJbMl07CQkjIGtleSB2YWx1ZSBiYXNlIDJeNjQKKysjCXVuc2lnbmVkIF9faW50NjQgcGFkOworKyMJc3RydWN0IHsgdW5zaWduZWQgX19pbnQzMiByXjIsIHJeMSwgcl40LCByXjM7IH0gcls5XTsKKysjCisrIyB3aGVyZSByXm4gYXJlIGJhc2UgMl4yNiBkaWdpdHMgb2YgZGVncmVlcyBvZiBtdWx0aXBsaWVyIGtleS4gVGhlcmUgYXJlCisrIyA1IGRpZ2l0cywgYnV0IGxhc3QgZm91ciBhcmUgaW50ZXJsZWF2ZWQgd2l0aCBtdWx0aXBsZXMgb2YgNSwgdG90YWxsaW5nCisrIyBpbiA5IGVsZW1lbnRzOiByMCwgcjEsIDUqcjEsIHIyLCA1KnIyLCByMywgNSpyMywgcjQsIDUqcjQuCisrCisrbXkgKCRIMCwkSDEsJEgyLCRIMywkSDQsICRUMCwkVDEsJFQyLCRUMywkVDQsICREMCwkRDEsJEQyLCREMywkRDQsICRNQVNLKSA9CisrICAgIG1hcCgiJXhtbSRfIiwoMC4uMTUpKTsKKysKKyskY29kZS49PDxfX187CisrLnR5cGUJX19wb2x5MTMwNV9ibG9jayxcQGFiaS1vbW5pcG90ZW50CisrLmFsaWduCTMyCisrX19wb2x5MTMwNV9ibG9jazoKKytfX18KKysJJnBvbHkxMzA1X2l0ZXJhdGlvbigpOworKyRjb2RlLj08PF9fXzsKKysJcmV0CisrLnNpemUJX19wb2x5MTMwNV9ibG9jaywuLV9fcG9seTEzMDVfYmxvY2sKKysKKysudHlwZQlfX3BvbHkxMzA1X2luaXRfYXZ4LFxAYWJpLW9tbmlwb3RlbnQKKysuYWxpZ24JMzIKKytfX3BvbHkxMzA1X2luaXRfYXZ4OgorKwltb3YJJHIwLCRoMAorKwltb3YJJHIxLCRoMQorKwl4b3IJJGgyLCRoMgorKworKwlsZWEJNDgrNjQoJGN0eCksJGN0eAkjIHNpemUgb3B0aW1pemF0aW9uCisrCisrCW1vdgkkcjEsJXJheAorKwljYWxsCV9fcG9seTEzMDVfYmxvY2sJIyByXjIKKysKKysJbW92CVwkMHgzZmZmZmZmLCVlYXgJIyBzYXZlIGludGVybGVhdmVkIHJeMiBhbmQgciBiYXNlIDJeMjYKKysJbW92CVwkMHgzZmZmZmZmLCVlZHgKKysJbW92CSRoMCwkZDEKKysJYW5kCSRoMCNkLCVlYXgKKysJbW92CSRyMCwkZDIKKysJYW5kCSRyMCNkLCVlZHgKKysJbW92CSVlYXgsYDE2KjArMC02NGAoJGN0eCkKKysJc2hyCVwkMjYsJGQxCisrCW1vdgklZWR4LGAxNiowKzQtNjRgKCRjdHgpCisrCXNocglcJDI2LCRkMgorKworKwltb3YJXCQweDNmZmZmZmYsJWVheAorKwltb3YJXCQweDNmZmZmZmYsJWVkeAorKwlhbmQJJGQxI2QsJWVheAorKwlhbmQJJGQyI2QsJWVkeAorKwltb3YJJWVheCxgMTYqMSswLTY0YCgkY3R4KQorKwlsZWEJKCVyYXgsJXJheCw0KSwlZWF4CSMgKjUKKysJbW92CSVlZHgsYDE2KjErNC02NGAoJGN0eCkKKysJbGVhCSglcmR4LCVyZHgsNCksJWVkeAkjICo1CisrCW1vdgklZWF4LGAxNioyKzAtNjRgKCRjdHgpCisrCXNocglcJDI2LCRkMQorKwltb3YJJWVkeCxgMTYqMis0LTY0YCgkY3R4KQorKwlzaHIJXCQyNiwkZDIKKysKKysJbW92CSRoMSwlcmF4CisrCW1vdgkkcjEsJXJkeAorKwlzaGwJXCQxMiwlcmF4CisrCXNobAlcJDEyLCVyZHgKKysJb3IJJGQxLCVyYXgKKysJb3IJJGQyLCVyZHgKKysJYW5kCVwkMHgzZmZmZmZmLCVlYXgKKysJYW5kCVwkMHgzZmZmZmZmLCVlZHgKKysJbW92CSVlYXgsYDE2KjMrMC02NGAoJGN0eCkKKysJbGVhCSglcmF4LCVyYXgsNCksJWVheAkjICo1CisrCW1vdgklZWR4LGAxNiozKzQtNjRgKCRjdHgpCisrCWxlYQkoJXJkeCwlcmR4LDQpLCVlZHgJIyAqNQorKwltb3YJJWVheCxgMTYqNCswLTY0YCgkY3R4KQorKwltb3YJJGgxLCRkMQorKwltb3YJJWVkeCxgMTYqNCs0LTY0YCgkY3R4KQorKwltb3YJJHIxLCRkMgorKworKwltb3YJXCQweDNmZmZmZmYsJWVheAorKwltb3YJXCQweDNmZmZmZmYsJWVkeAorKwlzaHIJXCQxNCwkZDEKKysJc2hyCVwkMTQsJGQyCisrCWFuZAkkZDEjZCwlZWF4CisrCWFuZAkkZDIjZCwlZWR4CisrCW1vdgklZWF4LGAxNio1KzAtNjRgKCRjdHgpCisrCWxlYQkoJXJheCwlcmF4LDQpLCVlYXgJIyAqNQorKwltb3YJJWVkeCxgMTYqNSs0LTY0YCgkY3R4KQorKwlsZWEJKCVyZHgsJXJkeCw0KSwlZWR4CSMgKjUKKysJbW92CSVlYXgsYDE2KjYrMC02NGAoJGN0eCkKKysJc2hyCVwkMjYsJGQxCisrCW1vdgklZWR4LGAxNio2KzQtNjRgKCRjdHgpCisrCXNocglcJDI2LCRkMgorKworKwltb3YJJGgyLCVyYXgKKysJc2hsCVwkMjQsJXJheAorKwlvcgklcmF4LCRkMQorKwltb3YJJGQxI2QsYDE2KjcrMC02NGAoJGN0eCkKKysJbGVhCSgkZDEsJGQxLDQpLCRkMQkJIyAqNQorKwltb3YJJGQyI2QsYDE2KjcrNC02NGAoJGN0eCkKKysJbGVhCSgkZDIsJGQyLDQpLCRkMgkJIyAqNQorKwltb3YJJGQxI2QsYDE2KjgrMC02NGAoJGN0eCkKKysJbW92CSRkMiNkLGAxNio4KzQtNjRgKCRjdHgpCisrCisrCW1vdgkkcjEsJXJheAorKwljYWxsCV9fcG9seTEzMDVfYmxvY2sJIyByXjMKKysKKysJbW92CVwkMHgzZmZmZmZmLCVlYXgJIyBzYXZlIHJeMyBiYXNlIDJeMjYKKysJbW92CSRoMCwkZDEKKysJYW5kCSRoMCNkLCVlYXgKKysJc2hyCVwkMjYsJGQxCisrCW1vdgklZWF4LGAxNiowKzEyLTY0YCgkY3R4KQorKworKwltb3YJXCQweDNmZmZmZmYsJWVkeAorKwlhbmQJJGQxI2QsJWVkeAorKwltb3YJJWVkeCxgMTYqMSsxMi02NGAoJGN0eCkKKysJbGVhCSglcmR4LCVyZHgsNCksJWVkeAkjICo1CisrCXNocglcJDI2LCRkMQorKwltb3YJJWVkeCxgMTYqMisxMi02NGAoJGN0eCkKKysKKysJbW92CSRoMSwlcmF4CisrCXNobAlcJDEyLCVyYXgKKysJb3IJJGQxLCVyYXgKKysJYW5kCVwkMHgzZmZmZmZmLCVlYXgKKysJbW92CSVlYXgsYDE2KjMrMTItNjRgKCRjdHgpCisrCWxlYQkoJXJheCwlcmF4LDQpLCVlYXgJIyAqNQorKwltb3YJJGgxLCRkMQorKwltb3YJJWVheCxgMTYqNCsxMi02NGAoJGN0eCkKKysKKysJbW92CVwkMHgzZmZmZmZmLCVlZHgKKysJc2hyCVwkMTQsJGQxCisrCWFuZAkkZDEjZCwlZWR4CisrCW1vdgklZWR4LGAxNio1KzEyLTY0YCgkY3R4KQorKwlsZWEJKCVyZHgsJXJkeCw0KSwlZWR4CSMgKjUKKysJc2hyCVwkMjYsJGQxCisrCW1vdgklZWR4LGAxNio2KzEyLTY0YCgkY3R4KQorKworKwltb3YJJGgyLCVyYXgKKysJc2hsCVwkMjQsJXJheAorKwlvcgklcmF4LCRkMQorKwltb3YJJGQxI2QsYDE2KjcrMTItNjRgKCRjdHgpCisrCWxlYQkoJGQxLCRkMSw0KSwkZDEJCSMgKjUKKysJbW92CSRkMSNkLGAxNio4KzEyLTY0YCgkY3R4KQorKworKwltb3YJJHIxLCVyYXgKKysJY2FsbAlfX3BvbHkxMzA1X2Jsb2NrCSMgcl40CisrCisrCW1vdglcJDB4M2ZmZmZmZiwlZWF4CSMgc2F2ZSByXjQgYmFzZSAyXjI2CisrCW1vdgkkaDAsJGQxCisrCWFuZAkkaDAjZCwlZWF4CisrCXNocglcJDI2LCRkMQorKwltb3YJJWVheCxgMTYqMCs4LTY0YCgkY3R4KQorKworKwltb3YJXCQweDNmZmZmZmYsJWVkeAorKwlhbmQJJGQxI2QsJWVkeAorKwltb3YJJWVkeCxgMTYqMSs4LTY0YCgkY3R4KQorKwlsZWEJKCVyZHgsJXJkeCw0KSwlZWR4CSMgKjUKKysJc2hyCVwkMjYsJGQxCisrCW1vdgklZWR4LGAxNioyKzgtNjRgKCRjdHgpCisrCisrCW1vdgkkaDEsJXJheAorKwlzaGwJXCQxMiwlcmF4CisrCW9yCSRkMSwlcmF4CisrCWFuZAlcJDB4M2ZmZmZmZiwlZWF4CisrCW1vdgklZWF4LGAxNiozKzgtNjRgKCRjdHgpCisrCWxlYQkoJXJheCwlcmF4LDQpLCVlYXgJIyAqNQorKwltb3YJJGgxLCRkMQorKwltb3YJJWVheCxgMTYqNCs4LTY0YCgkY3R4KQorKworKwltb3YJXCQweDNmZmZmZmYsJWVkeAorKwlzaHIJXCQxNCwkZDEKKysJYW5kCSRkMSNkLCVlZHgKKysJbW92CSVlZHgsYDE2KjUrOC02NGAoJGN0eCkKKysJbGVhCSglcmR4LCVyZHgsNCksJWVkeAkjICo1CisrCXNocglcJDI2LCRkMQorKwltb3YJJWVkeCxgMTYqNis4LTY0YCgkY3R4KQorKworKwltb3YJJGgyLCVyYXgKKysJc2hsCVwkMjQsJXJheAorKwlvcgklcmF4LCRkMQorKwltb3YJJGQxI2QsYDE2KjcrOC02NGAoJGN0eCkKKysJbGVhCSgkZDEsJGQxLDQpLCRkMQkJIyAqNQorKwltb3YJJGQxI2QsYDE2KjgrOC02NGAoJGN0eCkKKysKKysJbGVhCS00OC02NCgkY3R4KSwkY3R4CSMgc2l6ZSBbZGUtXW9wdGltaXphdGlvbgorKwlyZXQKKysuc2l6ZQlfX3BvbHkxMzA1X2luaXRfYXZ4LC4tX19wb2x5MTMwNV9pbml0X2F2eAorKworKy50eXBlCXBvbHkxMzA1X2Jsb2Nrc19hdngsXEBmdW5jdGlvbiw0CisrLmFsaWduCTMyCisrcG9seTEzMDVfYmxvY2tzX2F2eDoKKysuY2ZpX3N0YXJ0cHJvYworKwltb3YJMjAoJGN0eCksJXI4ZAkJIyBpc19iYXNlMl8yNgorKwljbXAJXCQxMjgsJGxlbgorKwlqYWUJLkxibG9ja3NfYXZ4CisrCXRlc3QJJXI4ZCwlcjhkCisrCWp6CS5MYmxvY2tzCisrCisrLkxibG9ja3NfYXZ4OgorKwlhbmQJXCQtMTYsJGxlbgorKwlqegkuTG5vX2RhdGFfYXZ4CisrCisrCXZ6ZXJvdXBwZXIKKysKKysJdGVzdAklcjhkLCVyOGQKKysJanoJLkxiYXNlMl82NF9hdngKKysKKysJdGVzdAlcJDMxLCRsZW4KKysJanoJLkxldmVuX2F2eAorKworKwlwdXNoCSVyYngKKysuY2ZpX3B1c2gJJXJieAorKwlwdXNoCSVyYnAKKysuY2ZpX3B1c2gJJXJicAorKwlwdXNoCSVyMTIKKysuY2ZpX3B1c2gJJXIxMgorKwlwdXNoCSVyMTMKKysuY2ZpX3B1c2gJJXIxMworKwlwdXNoCSVyMTQKKysuY2ZpX3B1c2gJJXIxNAorKwlwdXNoCSVyMTUKKysuY2ZpX3B1c2gJJXIxNQorKy5MYmxvY2tzX2F2eF9ib2R5OgorKworKwltb3YJJGxlbiwlcjE1CQkjIHJlYXNzaWduICRsZW4KKysKKysJbW92CTAoJGN0eCksJGQxCQkjIGxvYWQgaGFzaCB2YWx1ZQorKwltb3YJOCgkY3R4KSwkZDIKKysJbW92CTE2KCRjdHgpLCRoMiNkCisrCisrCW1vdgkyNCgkY3R4KSwkcjAJCSMgbG9hZCByCisrCW1vdgkzMigkY3R4KSwkczEKKysKKysJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIGJhc2UgMl4yNiAtPiBiYXNlIDJeNjQKKysJbW92CSRkMSNkLCRoMCNkCisrCWFuZAlcJGAtMSooMTw8MzEpYCwkZDEKKysJbW92CSRkMiwkcjEJCQkjIGJvcnJvdyAkcjEKKysJbW92CSRkMiNkLCRoMSNkCisrCWFuZAlcJGAtMSooMTw8MzEpYCwkZDIKKysKKysJc2hyCVwkNiwkZDEKKysJc2hsCVwkNTIsJHIxCisrCWFkZAkkZDEsJGgwCisrCXNocglcJDEyLCRoMQorKwlzaHIJXCQxOCwkZDIKKysJYWRkCSRyMSwkaDAKKysJYWRjCSRkMiwkaDEKKysKKysJbW92CSRoMiwkZDEKKysJc2hsCVwkNDAsJGQxCisrCXNocglcJDI0LCRoMgorKwlhZGQJJGQxLCRoMQorKwlhZGMJXCQwLCRoMgkJCSMgY2FuIGJlIHBhcnRpYWxseSByZWR1Y2VkLi4uCisrCisrCW1vdglcJC00LCRkMgkJIyAuLi4gc28gcmVkdWNlCisrCW1vdgkkaDIsJGQxCisrCWFuZAkkaDIsJGQyCisrCXNocglcJDIsJGQxCisrCWFuZAlcJDMsJGgyCisrCWFkZAkkZDIsJGQxCQkJIyA9KjUKKysJYWRkCSRkMSwkaDAKKysJYWRjCVwkMCwkaDEKKysJYWRjCVwkMCwkaDIKKysKKysJbW92CSRzMSwkcjEKKysJbW92CSRzMSwlcmF4CisrCXNocglcJDIsJHMxCisrCWFkZAkkcjEsJHMxCQkJIyBzMSA9IHIxICsgKHIxID4+IDIpCisrCisrCWFkZAkwKCRpbnApLCRoMAkJIyBhY2N1bXVsYXRlIGlucHV0CisrCWFkYwk4KCRpbnApLCRoMQorKwlsZWEJMTYoJGlucCksJGlucAorKwlhZGMJJHBhZGJpdCwkaDIKKysKKysJY2FsbAlfX3BvbHkxMzA1X2Jsb2NrCisrCisrCXRlc3QJJHBhZGJpdCwkcGFkYml0CQkjIGlmICRwYWRiaXQgaXMgemVybywKKysJanoJLkxzdG9yZV9iYXNlMl82NF9hdngJIyBzdG9yZSBoYXNoIGluIGJhc2UgMl42NCBmb3JtYXQKKysKKysJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIGJhc2UgMl42NCAtPiBiYXNlIDJeMjYKKysJbW92CSRoMCwlcmF4CisrCW1vdgkkaDAsJXJkeAorKwlzaHIJXCQ1MiwkaDAKKysJbW92CSRoMSwkcjAKKysJbW92CSRoMSwkcjEKKysJc2hyCVwkMjYsJXJkeAorKwlhbmQJXCQweDNmZmZmZmYsJXJheAkjIGhbMF0KKysJc2hsCVwkMTIsJHIwCisrCWFuZAlcJDB4M2ZmZmZmZiwlcmR4CSMgaFsxXQorKwlzaHIJXCQxNCwkaDEKKysJb3IJJHIwLCRoMAorKwlzaGwJXCQyNCwkaDIKKysJYW5kCVwkMHgzZmZmZmZmLCRoMAkJIyBoWzJdCisrCXNocglcJDQwLCRyMQorKwlhbmQJXCQweDNmZmZmZmYsJGgxCQkjIGhbM10KKysJb3IJJHIxLCRoMgkJCSMgaFs0XQorKworKwlzdWIJXCQxNiwlcjE1CisrCWp6CS5Mc3RvcmVfYmFzZTJfMjZfYXZ4CisrCisrCXZtb3ZkCSVyYXgjZCwkSDAKKysJdm1vdmQJJXJkeCNkLCRIMQorKwl2bW92ZAkkaDAjZCwkSDIKKysJdm1vdmQJJGgxI2QsJEgzCisrCXZtb3ZkCSRoMiNkLCRINAorKwlqbXAJLkxwcm9jZWVkX2F2eAorKworKy5hbGlnbgkzMgorKy5Mc3RvcmVfYmFzZTJfNjRfYXZ4OgorKwltb3YJJGgwLDAoJGN0eCkKKysJbW92CSRoMSw4KCRjdHgpCisrCW1vdgkkaDIsMTYoJGN0eCkJCSMgbm90ZSB0aGF0IGlzX2Jhc2UyXzI2IGlzIHplcm9lZAorKwlqbXAJLkxkb25lX2F2eAorKworKy5hbGlnbgkxNgorKy5Mc3RvcmVfYmFzZTJfMjZfYXZ4OgorKwltb3YJJXJheCNkLDAoJGN0eCkJCSMgc3RvcmUgaGFzaCB2YWx1ZSBiYXNlIDJeMjYKKysJbW92CSVyZHgjZCw0KCRjdHgpCisrCW1vdgkkaDAjZCw4KCRjdHgpCisrCW1vdgkkaDEjZCwxMigkY3R4KQorKwltb3YJJGgyI2QsMTYoJGN0eCkKKysuYWxpZ24JMTYKKysuTGRvbmVfYXZ4OgorKwltb3YJMCglcnNwKSwlcjE1CisrLmNmaV9yZXN0b3JlCSVyMTUKKysJbW92CTgoJXJzcCksJXIxNAorKy5jZmlfcmVzdG9yZQklcjE0CisrCW1vdgkxNiglcnNwKSwlcjEzCisrLmNmaV9yZXN0b3JlCSVyMTMKKysJbW92CTI0KCVyc3ApLCVyMTIKKysuY2ZpX3Jlc3RvcmUJJXIxMgorKwltb3YJMzIoJXJzcCksJXJicAorKy5jZmlfcmVzdG9yZQklcmJwCisrCW1vdgk0MCglcnNwKSwlcmJ4CisrLmNmaV9yZXN0b3JlCSVyYngKKysJbGVhCTQ4KCVyc3ApLCVyc3AKKysuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0CS00OAorKy5Mbm9fZGF0YV9hdng6CisrLkxibG9ja3NfYXZ4X2VwaWxvZ3VlOgorKwlyZXQKKysuY2ZpX2VuZHByb2MKKysKKysuYWxpZ24JMzIKKysuTGJhc2UyXzY0X2F2eDoKKysuY2ZpX3N0YXJ0cHJvYworKwlwdXNoCSVyYngKKysuY2ZpX3B1c2gJJXJieAorKwlwdXNoCSVyYnAKKysuY2ZpX3B1c2gJJXJicAorKwlwdXNoCSVyMTIKKysuY2ZpX3B1c2gJJXIxMgorKwlwdXNoCSVyMTMKKysuY2ZpX3B1c2gJJXIxMworKwlwdXNoCSVyMTQKKysuY2ZpX3B1c2gJJXIxNAorKwlwdXNoCSVyMTUKKysuY2ZpX3B1c2gJJXIxNQorKy5MYmFzZTJfNjRfYXZ4X2JvZHk6CisrCisrCW1vdgkkbGVuLCVyMTUJCSMgcmVhc3NpZ24gJGxlbgorKworKwltb3YJMjQoJGN0eCksJHIwCQkjIGxvYWQgcgorKwltb3YJMzIoJGN0eCksJHMxCisrCisrCW1vdgkwKCRjdHgpLCRoMAkJIyBsb2FkIGhhc2ggdmFsdWUKKysJbW92CTgoJGN0eCksJGgxCisrCW1vdgkxNigkY3R4KSwkaDIjZAorKworKwltb3YJJHMxLCRyMQorKwltb3YJJHMxLCVyYXgKKysJc2hyCVwkMiwkczEKKysJYWRkCSRyMSwkczEJCQkjIHMxID0gcjEgKyAocjEgPj4gMikKKysKKysJdGVzdAlcJDMxLCRsZW4KKysJanoJLkxpbml0X2F2eAorKworKwlhZGQJMCgkaW5wKSwkaDAJCSMgYWNjdW11bGF0ZSBpbnB1dAorKwlhZGMJOCgkaW5wKSwkaDEKKysJbGVhCTE2KCRpbnApLCRpbnAKKysJYWRjCSRwYWRiaXQsJGgyCisrCXN1YglcJDE2LCVyMTUKKysKKysJY2FsbAlfX3BvbHkxMzA1X2Jsb2NrCisrCisrLkxpbml0X2F2eDoKKysJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIGJhc2UgMl42NCAtPiBiYXNlIDJeMjYKKysJbW92CSRoMCwlcmF4CisrCW1vdgkkaDAsJXJkeAorKwlzaHIJXCQ1MiwkaDAKKysJbW92CSRoMSwkZDEKKysJbW92CSRoMSwkZDIKKysJc2hyCVwkMjYsJXJkeAorKwlhbmQJXCQweDNmZmZmZmYsJXJheAkjIGhbMF0KKysJc2hsCVwkMTIsJGQxCisrCWFuZAlcJDB4M2ZmZmZmZiwlcmR4CSMgaFsxXQorKwlzaHIJXCQxNCwkaDEKKysJb3IJJGQxLCRoMAorKwlzaGwJXCQyNCwkaDIKKysJYW5kCVwkMHgzZmZmZmZmLCRoMAkJIyBoWzJdCisrCXNocglcJDQwLCRkMgorKwlhbmQJXCQweDNmZmZmZmYsJGgxCQkjIGhbM10KKysJb3IJJGQyLCRoMgkJCSMgaFs0XQorKworKwl2bW92ZAklcmF4I2QsJEgwCisrCXZtb3ZkCSVyZHgjZCwkSDEKKysJdm1vdmQJJGgwI2QsJEgyCisrCXZtb3ZkCSRoMSNkLCRIMworKwl2bW92ZAkkaDIjZCwkSDQKKysJbW92bAlcJDEsMjAoJGN0eCkJCSMgc2V0IGlzX2Jhc2UyXzI2CisrCisrCWNhbGwJX19wb2x5MTMwNV9pbml0X2F2eAorKworKy5McHJvY2VlZF9hdng6CisrCW1vdgklcjE1LCRsZW4KKysKKysJbW92CTAoJXJzcCksJXIxNQorKy5jZmlfcmVzdG9yZQklcjE1CisrCW1vdgk4KCVyc3ApLCVyMTQKKysuY2ZpX3Jlc3RvcmUJJXIxNAorKwltb3YJMTYoJXJzcCksJXIxMworKy5jZmlfcmVzdG9yZQklcjEzCisrCW1vdgkyNCglcnNwKSwlcjEyCisrLmNmaV9yZXN0b3JlCSVyMTIKKysJbW92CTMyKCVyc3ApLCVyYnAKKysuY2ZpX3Jlc3RvcmUJJXJicAorKwltb3YJNDAoJXJzcCksJXJieAorKy5jZmlfcmVzdG9yZQklcmJ4CisrCWxlYQk0OCglcnNwKSwlcmF4CisrCWxlYQk0OCglcnNwKSwlcnNwCisrLmNmaV9hZGp1c3RfY2ZhX29mZnNldAktNDgKKysuTGJhc2UyXzY0X2F2eF9lcGlsb2d1ZToKKysJam1wCS5MZG9fYXZ4CisrLmNmaV9lbmRwcm9jCisrCisrLmFsaWduCTMyCisrLkxldmVuX2F2eDoKKysuY2ZpX3N0YXJ0cHJvYworKwl2bW92ZAkJNCowKCRjdHgpLCRIMAkJIyBsb2FkIGhhc2ggdmFsdWUKKysJdm1vdmQJCTQqMSgkY3R4KSwkSDEKKysJdm1vdmQJCTQqMigkY3R4KSwkSDIKKysJdm1vdmQJCTQqMygkY3R4KSwkSDMKKysJdm1vdmQJCTQqNCgkY3R4KSwkSDQKKysKKysuTGRvX2F2eDoKKytfX18KKyskY29kZS49PDxfX18JaWYgKCEkd2luNjQpOworKwlsZWEJCS0weDU4KCVyc3ApLCVyMTEKKysuY2ZpX2RlZl9jZmEJCSVyMTEsMHg2MAorKwlzdWIJCVwkMHgxNzgsJXJzcAorK19fXworKyRjb2RlLj08PF9fXwlpZiAoJHdpbjY0KTsKKysJbGVhCQktMHhmOCglcnNwKSwlcjExCisrCXN1YgkJXCQweDIxOCwlcnNwCisrCXZtb3ZkcWEJCSV4bW02LDB4NTAoJXIxMSkKKysJdm1vdmRxYQkJJXhtbTcsMHg2MCglcjExKQorKwl2bW92ZHFhCQkleG1tOCwweDcwKCVyMTEpCisrCXZtb3ZkcWEJCSV4bW05LDB4ODAoJXIxMSkKKysJdm1vdmRxYQkJJXhtbTEwLDB4OTAoJXIxMSkKKysJdm1vdmRxYQkJJXhtbTExLDB4YTAoJXIxMSkKKysJdm1vdmRxYQkJJXhtbTEyLDB4YjAoJXIxMSkKKysJdm1vdmRxYQkJJXhtbTEzLDB4YzAoJXIxMSkKKysJdm1vdmRxYQkJJXhtbTE0LDB4ZDAoJXIxMSkKKysJdm1vdmRxYQkJJXhtbTE1LDB4ZTAoJXIxMSkKKysuTGRvX2F2eF9ib2R5OgorK19fXworKyRjb2RlLj08PF9fXzsKKysJc3ViCQlcJDY0LCRsZW4KKysJbGVhCQktMzIoJGlucCksJXJheAorKwljbW92YwkJJXJheCwkaW5wCisrCisrCXZtb3ZkcXUJCWAxNiozYCgkY3R4KSwkRDQJIyBwcmVsb2FkIHIwXjIKKysJbGVhCQlgMTYqMys2NGAoJGN0eCksJGN0eAkjIHNpemUgb3B0aW1pemF0aW9uCisrCWxlYQkJLkxjb25zdCglcmlwKSwlcmN4CisrCisrCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysJIyBsb2FkIGlucHV0CisrCXZtb3ZkcXUJCTE2KjIoJGlucCksJFQwCisrCXZtb3ZkcXUJCTE2KjMoJGlucCksJFQxCisrCXZtb3ZkcWEJCTY0KCVyY3gpLCRNQVNLCQkjIC5MbWFzazI2CisrCisrCXZwc3JsZHEJCVwkNiwkVDAsJFQyCQkjIHNwbGF0IGlucHV0CisrCXZwc3JsZHEJCVwkNiwkVDEsJFQzCisrCXZwdW5wY2tocWRxCSRUMSwkVDAsJFQ0CQkjIDQKKysJdnB1bnBja2xxZHEJJFQxLCRUMCwkVDAJCSMgMDoxCisrCXZwdW5wY2tscWRxCSRUMywkVDIsJFQzCQkjIDI6MworKworKwl2cHNybHEJCVwkNDAsJFQ0LCRUNAkJIyA0CisrCXZwc3JscQkJXCQyNiwkVDAsJFQxCisrCXZwYW5kCQkkTUFTSywkVDAsJFQwCQkjIDAKKysJdnBzcmxxCQlcJDQsJFQzLCRUMgorKwl2cGFuZAkJJE1BU0ssJFQxLCRUMQkJIyAxCisrCXZwc3JscQkJXCQzMCwkVDMsJFQzCisrCXZwYW5kCQkkTUFTSywkVDIsJFQyCQkjIDIKKysJdnBhbmQJCSRNQVNLLCRUMywkVDMJCSMgMworKwl2cG9yCQkzMiglcmN4KSwkVDQsJFQ0CSMgcGFkYml0LCB5ZXMsIGFsd2F5cworKworKwlqYmUJCS5Mc2tpcF9sb29wX2F2eAorKworKwkjIGV4cGFuZCBhbmQgY29weSBwcmUtY2FsY3VsYXRlZCB0YWJsZSB0byBzdGFjaworKwl2bW92ZHF1CQlgMTYqMS02NGAoJGN0eCksJEQxCisrCXZtb3ZkcXUJCWAxNioyLTY0YCgkY3R4KSwkRDIKKysJdnBzaHVmZAkJXCQweEVFLCRENCwkRDMJCSMgMzR4eCAtPiAzNDM0CisrCXZwc2h1ZmQJCVwkMHg0NCwkRDQsJEQwCQkjIHh4MTIgLT4gMTIxMgorKwl2bW92ZHFhCQkkRDMsLTB4OTAoJXIxMSkKKysJdm1vdmRxYQkJJEQwLDB4MDAoJXJzcCkKKysJdnBzaHVmZAkJXCQweEVFLCREMSwkRDQKKysJdm1vdmRxdQkJYDE2KjMtNjRgKCRjdHgpLCREMAorKwl2cHNodWZkCQlcJDB4NDQsJEQxLCREMQorKwl2bW92ZHFhCQkkRDQsLTB4ODAoJXIxMSkKKysJdm1vdmRxYQkJJEQxLDB4MTAoJXJzcCkKKysJdnBzaHVmZAkJXCQweEVFLCREMiwkRDMKKysJdm1vdmRxdQkJYDE2KjQtNjRgKCRjdHgpLCREMQorKwl2cHNodWZkCQlcJDB4NDQsJEQyLCREMgorKwl2bW92ZHFhCQkkRDMsLTB4NzAoJXIxMSkKKysJdm1vdmRxYQkJJEQyLDB4MjAoJXJzcCkKKysJdnBzaHVmZAkJXCQweEVFLCREMCwkRDQKKysJdm1vdmRxdQkJYDE2KjUtNjRgKCRjdHgpLCREMgorKwl2cHNodWZkCQlcJDB4NDQsJEQwLCREMAorKwl2bW92ZHFhCQkkRDQsLTB4NjAoJXIxMSkKKysJdm1vdmRxYQkJJEQwLDB4MzAoJXJzcCkKKysJdnBzaHVmZAkJXCQweEVFLCREMSwkRDMKKysJdm1vdmRxdQkJYDE2KjYtNjRgKCRjdHgpLCREMAorKwl2cHNodWZkCQlcJDB4NDQsJEQxLCREMQorKwl2bW92ZHFhCQkkRDMsLTB4NTAoJXIxMSkKKysJdm1vdmRxYQkJJEQxLDB4NDAoJXJzcCkKKysJdnBzaHVmZAkJXCQweEVFLCREMiwkRDQKKysJdm1vdmRxdQkJYDE2KjctNjRgKCRjdHgpLCREMQorKwl2cHNodWZkCQlcJDB4NDQsJEQyLCREMgorKwl2bW92ZHFhCQkkRDQsLTB4NDAoJXIxMSkKKysJdm1vdmRxYQkJJEQyLDB4NTAoJXJzcCkKKysJdnBzaHVmZAkJXCQweEVFLCREMCwkRDMKKysJdm1vdmRxdQkJYDE2KjgtNjRgKCRjdHgpLCREMgorKwl2cHNodWZkCQlcJDB4NDQsJEQwLCREMAorKwl2bW92ZHFhCQkkRDMsLTB4MzAoJXIxMSkKKysJdm1vdmRxYQkJJEQwLDB4NjAoJXJzcCkKKysJdnBzaHVmZAkJXCQweEVFLCREMSwkRDQKKysJdnBzaHVmZAkJXCQweDQ0LCREMSwkRDEKKysJdm1vdmRxYQkJJEQ0LC0weDIwKCVyMTEpCisrCXZtb3ZkcWEJCSREMSwweDcwKCVyc3ApCisrCXZwc2h1ZmQJCVwkMHhFRSwkRDIsJEQzCisrCSB2bW92ZHFhCTB4MDAoJXJzcCksJEQ0CQkjIHByZWxvYWQgcjBeMgorKwl2cHNodWZkCQlcJDB4NDQsJEQyLCREMgorKwl2bW92ZHFhCQkkRDMsLTB4MTAoJXIxMSkKKysJdm1vdmRxYQkJJEQyLDB4ODAoJXJzcCkKKysKKysJam1wCQkuTG9vcF9hdngKKysKKysuYWxpZ24JMzIKKysuTG9vcF9hdng6CisrCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysJIyAoKGlucFswXSpyXjQraW5wWzJdKnJeMitpbnBbNF0pKnJeNCtpbnBbNl0qcl4yCisrCSMgKChpbnBbMV0qcl40K2lucFszXSpyXjIraW5wWzVdKSpyXjMraW5wWzddKnIKKysJIyAgIFxfX19fX19fX19fX19fX19fX19fLworKwkjICgoaW5wWzBdKnJeNCtpbnBbMl0qcl4yK2lucFs0XSkqcl40K2lucFs2XSpyXjIraW5wWzhdKSpyXjIKKysJIyAoKGlucFsxXSpyXjQraW5wWzNdKnJeMitpbnBbNV0pKnJeNCtpbnBbN10qcl4yK2lucFs5XSkqcgorKwkjICAgXF9fX19fX19fX19fX19fX19fX18vIFxfX19fX19fX19fX19fX19fX19fXy8KKysJIworKwkjIE5vdGUgdGhhdCB3ZSBzdGFydCB3aXRoIGlucFsyOjNdKnJeMi4gVGhpcyBpcyBiZWNhdXNlIGl0CisrCSMgZG9lc24ndCBkZXBlbmQgb24gcmVkdWN0aW9uIGluIHByZXZpb3VzIGl0ZXJhdGlvbi4KKysJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKwkjIGQ0ID0gaDQqcjAgKyBoMypyMSAgICsgaDIqcjIgICArIGgxKnIzICAgKyBoMCpyNAorKwkjIGQzID0gaDMqcjAgKyBoMipyMSAgICsgaDEqcjIgICArIGgwKnIzICAgKyBoNCo1KnI0CisrCSMgZDIgPSBoMipyMCArIGgxKnIxICAgKyBoMCpyMiAgICsgaDQqNSpyMyArIGgzKjUqcjQKKysJIyBkMSA9IGgxKnIwICsgaDAqcjEgICArIGg0KjUqcjIgKyBoMyo1KnIzICsgaDIqNSpyNAorKwkjIGQwID0gaDAqcjAgKyBoNCo1KnIxICsgaDMqNSpyMiArIGgyKjUqcjMgKyBoMSo1KnI0CisrCSMKKysJIyB0aG91Z2ggbm90ZSB0aGF0ICRUeCBhbmQgJEh4IGFyZSAicmV2ZXJzZWQiIGluIHRoaXMgc2VjdGlvbiwKKysJIyBhbmQgJEQ0IGlzIHByZWxvYWRlZCB3aXRoIHIwXjIuLi4KKysKKysJdnBtdWx1ZHEJJFQwLCRENCwkRDAJCSMgZDAgPSBoMCpyMAorKwl2cG11bHVkcQkkVDEsJEQ0LCREMQkJIyBkMSA9IGgxKnIwCisrCSAgdm1vdmRxYQkkSDIsMHgyMCglcjExKQkJCQkjIG9mZmxvYWQgaGFzaAorKwl2cG11bHVkcQkkVDIsJEQ0LCREMgkJIyBkMyA9IGgyKnIwCisrCSB2bW92ZHFhCTB4MTAoJXJzcCksJEgyCQkjIHIxXjIKKysJdnBtdWx1ZHEJJFQzLCRENCwkRDMJCSMgZDMgPSBoMypyMAorKwl2cG11bHVkcQkkVDQsJEQ0LCRENAkJIyBkNCA9IGg0KnIwCisrCisrCSAgdm1vdmRxYQkkSDAsMHgwMCglcjExKQkJCQkjCisrCXZwbXVsdWRxCTB4MjAoJXJzcCksJFQ0LCRIMAkjIGg0KnMxCisrCSAgdm1vdmRxYQkkSDEsMHgxMCglcjExKQkJCQkjCisrCXZwbXVsdWRxCSRUMywkSDIsJEgxCQkjIGgzKnIxCisrCXZwYWRkcQkJJEgwLCREMCwkRDAJCSMgZDAgKz0gaDQqczEKKysJdnBhZGRxCQkkSDEsJEQ0LCRENAkJIyBkNCArPSBoMypyMQorKwkgIHZtb3ZkcWEJJEgzLDB4MzAoJXIxMSkJCQkJIworKwl2cG11bHVkcQkkVDIsJEgyLCRIMAkJIyBoMipyMQorKwl2cG11bHVkcQkkVDEsJEgyLCRIMQkJIyBoMSpyMQorKwl2cGFkZHEJCSRIMCwkRDMsJEQzCQkjIGQzICs9IGgyKnIxCisrCSB2bW92ZHFhCTB4MzAoJXJzcCksJEgzCQkjIHIyXjIKKysJdnBhZGRxCQkkSDEsJEQyLCREMgkJIyBkMiArPSBoMSpyMQorKwkgIHZtb3ZkcWEJJEg0LDB4NDAoJXIxMSkJCQkJIworKwl2cG11bHVkcQkkVDAsJEgyLCRIMgkJIyBoMCpyMQorKwkgdnBtdWx1ZHEJJFQyLCRIMywkSDAJCSMgaDIqcjIKKysJdnBhZGRxCQkkSDIsJEQxLCREMQkJIyBkMSArPSBoMCpyMQorKworKwkgdm1vdmRxYQkweDQwKCVyc3ApLCRINAkJIyBzMl4yCisrCXZwYWRkcQkJJEgwLCRENCwkRDQJCSMgZDQgKz0gaDIqcjIKKysJdnBtdWx1ZHEJJFQxLCRIMywkSDEJCSMgaDEqcjIKKysJdnBtdWx1ZHEJJFQwLCRIMywkSDMJCSMgaDAqcjIKKysJdnBhZGRxCQkkSDEsJEQzLCREMwkJIyBkMyArPSBoMSpyMgorKwkgdm1vdmRxYQkweDUwKCVyc3ApLCRIMgkJIyByM14yCisrCXZwYWRkcQkJJEgzLCREMiwkRDIJCSMgZDIgKz0gaDAqcjIKKysJdnBtdWx1ZHEJJFQ0LCRINCwkSDAJCSMgaDQqczIKKysJdnBtdWx1ZHEJJFQzLCRINCwkSDQJCSMgaDMqczIKKysJdnBhZGRxCQkkSDAsJEQxLCREMQkJIyBkMSArPSBoNCpzMgorKwkgdm1vdmRxYQkweDYwKCVyc3ApLCRIMwkJIyBzM14yCisrCXZwYWRkcQkJJEg0LCREMCwkRDAJCSMgZDAgKz0gaDMqczIKKysKKysJIHZtb3ZkcWEJMHg4MCglcnNwKSwkSDQJCSMgczReMgorKwl2cG11bHVkcQkkVDEsJEgyLCRIMQkJIyBoMSpyMworKwl2cG11bHVkcQkkVDAsJEgyLCRIMgkJIyBoMCpyMworKwl2cGFkZHEJCSRIMSwkRDQsJEQ0CQkjIGQ0ICs9IGgxKnIzCisrCXZwYWRkcQkJJEgyLCREMywkRDMJCSMgZDMgKz0gaDAqcjMKKysJdnBtdWx1ZHEJJFQ0LCRIMywkSDAJCSMgaDQqczMKKysJdnBtdWx1ZHEJJFQzLCRIMywkSDEJCSMgaDMqczMKKysJdnBhZGRxCQkkSDAsJEQyLCREMgkJIyBkMiArPSBoNCpzMworKwkgdm1vdmRxdQkxNiowKCRpbnApLCRIMAkJCQkjIGxvYWQgaW5wdXQKKysJdnBhZGRxCQkkSDEsJEQxLCREMQkJIyBkMSArPSBoMypzMworKwl2cG11bHVkcQkkVDIsJEgzLCRIMwkJIyBoMipzMworKwkgdnBtdWx1ZHEJJFQyLCRINCwkVDIJCSMgaDIqczQKKysJdnBhZGRxCQkkSDMsJEQwLCREMAkJIyBkMCArPSBoMipzMworKworKwkgdm1vdmRxdQkxNioxKCRpbnApLCRIMQkJCQkjCisrCXZwYWRkcQkJJFQyLCREMSwkRDEJCSMgZDEgKz0gaDIqczQKKysJdnBtdWx1ZHEJJFQzLCRINCwkVDMJCSMgaDMqczQKKysJdnBtdWx1ZHEJJFQ0LCRINCwkVDQJCSMgaDQqczQKKysJIHZwc3JsZHEJXCQ2LCRIMCwkSDIJCQkJIyBzcGxhdCBpbnB1dAorKwl2cGFkZHEJCSRUMywkRDIsJEQyCQkjIGQyICs9IGgzKnM0CisrCXZwYWRkcQkJJFQ0LCREMywkRDMJCSMgZDMgKz0gaDQqczQKKysJIHZwc3JsZHEJXCQ2LCRIMSwkSDMJCQkJIworKwl2cG11bHVkcQkweDcwKCVyc3ApLCRUMCwkVDQJIyBoMCpyNAorKwl2cG11bHVkcQkkVDEsJEg0LCRUMAkJIyBoMSpzNAorKwkgdnB1bnBja2hxZHEJJEgxLCRIMCwkSDQJCSMgNAorKwl2cGFkZHEJCSRUNCwkRDQsJEQ0CQkjIGQ0ICs9IGgwKnI0CisrCSB2bW92ZHFhCS0weDkwKCVyMTEpLCRUNAkJIyByMF40CisrCXZwYWRkcQkJJFQwLCREMCwkRDAJCSMgZDAgKz0gaDEqczQKKysKKysJdnB1bnBja2xxZHEJJEgxLCRIMCwkSDAJCSMgMDoxCisrCXZwdW5wY2tscWRxCSRIMywkSDIsJEgzCQkjIDI6MworKworKwkjdnBzcmxxCQlcJDQwLCRINCwkSDQJCSMgNAorKwl2cHNybGRxCQlcJGA0MC84YCwkSDQsJEg0CSMgNAorKwl2cHNybHEJCVwkMjYsJEgwLCRIMQorKwl2cGFuZAkJJE1BU0ssJEgwLCRIMAkJIyAwCisrCXZwc3JscQkJXCQ0LCRIMywkSDIKKysJdnBhbmQJCSRNQVNLLCRIMSwkSDEJCSMgMQorKwl2cGFuZAkJMCglcmN4KSwkSDQsJEg0CQkjIC5MbWFzazI0CisrCXZwc3JscQkJXCQzMCwkSDMsJEgzCisrCXZwYW5kCQkkTUFTSywkSDIsJEgyCQkjIDIKKysJdnBhbmQJCSRNQVNLLCRIMywkSDMJCSMgMworKwl2cG9yCQkzMiglcmN4KSwkSDQsJEg0CSMgcGFkYml0LCB5ZXMsIGFsd2F5cworKworKwl2cGFkZHEJCTB4MDAoJXIxMSksJEgwLCRIMAkjIGFkZCBoYXNoIHZhbHVlCisrCXZwYWRkcQkJMHgxMCglcjExKSwkSDEsJEgxCisrCXZwYWRkcQkJMHgyMCglcjExKSwkSDIsJEgyCisrCXZwYWRkcQkJMHgzMCglcjExKSwkSDMsJEgzCisrCXZwYWRkcQkJMHg0MCglcjExKSwkSDQsJEg0CisrCisrCWxlYQkJMTYqMigkaW5wKSwlcmF4CisrCWxlYQkJMTYqNCgkaW5wKSwkaW5wCisrCXN1YgkJXCQ2NCwkbGVuCisrCWNtb3ZjCQklcmF4LCRpbnAKKysKKysJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKwkjIE5vdyB3ZSBhY2N1bXVsYXRlIChpbnBbMDoxXStoYXNoKSpyXjQKKysJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKwkjIGQ0ID0gaDQqcjAgKyBoMypyMSAgICsgaDIqcjIgICArIGgxKnIzICAgKyBoMCpyNAorKwkjIGQzID0gaDMqcjAgKyBoMipyMSAgICsgaDEqcjIgICArIGgwKnIzICAgKyBoNCo1KnI0CisrCSMgZDIgPSBoMipyMCArIGgxKnIxICAgKyBoMCpyMiAgICsgaDQqNSpyMyArIGgzKjUqcjQKKysJIyBkMSA9IGgxKnIwICsgaDAqcjEgICArIGg0KjUqcjIgKyBoMyo1KnIzICsgaDIqNSpyNAorKwkjIGQwID0gaDAqcjAgKyBoNCo1KnIxICsgaDMqNSpyMiArIGgyKjUqcjMgKyBoMSo1KnI0CisrCisrCXZwbXVsdWRxCSRIMCwkVDQsJFQwCQkjIGgwKnIwCisrCXZwbXVsdWRxCSRIMSwkVDQsJFQxCQkjIGgxKnIwCisrCXZwYWRkcQkJJFQwLCREMCwkRDAKKysJdnBhZGRxCQkkVDEsJEQxLCREMQorKwkgdm1vdmRxYQktMHg4MCglcjExKSwkVDIJCSMgcjFeNAorKwl2cG11bHVkcQkkSDIsJFQ0LCRUMAkJIyBoMipyMAorKwl2cG11bHVkcQkkSDMsJFQ0LCRUMQkJIyBoMypyMAorKwl2cGFkZHEJCSRUMCwkRDIsJEQyCisrCXZwYWRkcQkJJFQxLCREMywkRDMKKysJdnBtdWx1ZHEJJEg0LCRUNCwkVDQJCSMgaDQqcjAKKysJIHZwbXVsdWRxCS0weDcwKCVyMTEpLCRINCwkVDAJIyBoNCpzMQorKwl2cGFkZHEJCSRUNCwkRDQsJEQ0CisrCisrCXZwYWRkcQkJJFQwLCREMCwkRDAJCSMgZDAgKz0gaDQqczEKKysJdnBtdWx1ZHEJJEgyLCRUMiwkVDEJCSMgaDIqcjEKKysJdnBtdWx1ZHEJJEgzLCRUMiwkVDAJCSMgaDMqcjEKKysJdnBhZGRxCQkkVDEsJEQzLCREMwkJIyBkMyArPSBoMipyMQorKwkgdm1vdmRxYQktMHg2MCglcjExKSwkVDMJCSMgcjJeNAorKwl2cGFkZHEJCSRUMCwkRDQsJEQ0CQkjIGQ0ICs9IGgzKnIxCisrCXZwbXVsdWRxCSRIMSwkVDIsJFQxCQkjIGgxKnIxCisrCXZwbXVsdWRxCSRIMCwkVDIsJFQyCQkjIGgwKnIxCisrCXZwYWRkcQkJJFQxLCREMiwkRDIJCSMgZDIgKz0gaDEqcjEKKysJdnBhZGRxCQkkVDIsJEQxLCREMQkJIyBkMSArPSBoMCpyMQorKworKwkgdm1vdmRxYQktMHg1MCglcjExKSwkVDQJCSMgczJeNAorKwl2cG11bHVkcQkkSDIsJFQzLCRUMAkJIyBoMipyMgorKwl2cG11bHVkcQkkSDEsJFQzLCRUMQkJIyBoMSpyMgorKwl2cGFkZHEJCSRUMCwkRDQsJEQ0CQkjIGQ0ICs9IGgyKnIyCisrCXZwYWRkcQkJJFQxLCREMywkRDMJCSMgZDMgKz0gaDEqcjIKKysJIHZtb3ZkcWEJLTB4NDAoJXIxMSksJFQyCQkjIHIzXjQKKysJdnBtdWx1ZHEJJEgwLCRUMywkVDMJCSMgaDAqcjIKKysJdnBtdWx1ZHEJJEg0LCRUNCwkVDAJCSMgaDQqczIKKysJdnBhZGRxCQkkVDMsJEQyLCREMgkJIyBkMiArPSBoMCpyMgorKwl2cGFkZHEJCSRUMCwkRDEsJEQxCQkjIGQxICs9IGg0KnMyCisrCSB2bW92ZHFhCS0weDMwKCVyMTEpLCRUMwkJIyBzM140CisrCXZwbXVsdWRxCSRIMywkVDQsJFQ0CQkjIGgzKnMyCisrCSB2cG11bHVkcQkkSDEsJFQyLCRUMQkJIyBoMSpyMworKwl2cGFkZHEJCSRUNCwkRDAsJEQwCQkjIGQwICs9IGgzKnMyCisrCisrCSB2bW92ZHFhCS0weDEwKCVyMTEpLCRUNAkJIyBzNF40CisrCXZwYWRkcQkJJFQxLCRENCwkRDQJCSMgZDQgKz0gaDEqcjMKKysJdnBtdWx1ZHEJJEgwLCRUMiwkVDIJCSMgaDAqcjMKKysJdnBtdWx1ZHEJJEg0LCRUMywkVDAJCSMgaDQqczMKKysJdnBhZGRxCQkkVDIsJEQzLCREMwkJIyBkMyArPSBoMCpyMworKwl2cGFkZHEJCSRUMCwkRDIsJEQyCQkjIGQyICs9IGg0KnMzCisrCSB2bW92ZHF1CTE2KjIoJGlucCksJFQwCQkJCSMgbG9hZCBpbnB1dAorKwl2cG11bHVkcQkkSDMsJFQzLCRUMgkJIyBoMypzMworKwl2cG11bHVkcQkkSDIsJFQzLCRUMwkJIyBoMipzMworKwl2cGFkZHEJCSRUMiwkRDEsJEQxCQkjIGQxICs9IGgzKnMzCisrCSB2bW92ZHF1CTE2KjMoJGlucCksJFQxCQkJCSMKKysJdnBhZGRxCQkkVDMsJEQwLCREMAkJIyBkMCArPSBoMipzMworKworKwl2cG11bHVkcQkkSDIsJFQ0LCRIMgkJIyBoMipzNAorKwl2cG11bHVkcQkkSDMsJFQ0LCRIMwkJIyBoMypzNAorKwkgdnBzcmxkcQlcJDYsJFQwLCRUMgkJCQkjIHNwbGF0IGlucHV0CisrCXZwYWRkcQkJJEgyLCREMSwkRDEJCSMgZDEgKz0gaDIqczQKKysJdnBtdWx1ZHEJJEg0LCRUNCwkSDQJCSMgaDQqczQKKysJIHZwc3JsZHEJXCQ2LCRUMSwkVDMJCQkJIworKwl2cGFkZHEJCSRIMywkRDIsJEgyCQkjIGgyID0gZDIgKyBoMypzNAorKwl2cGFkZHEJCSRINCwkRDMsJEgzCQkjIGgzID0gZDMgKyBoNCpzNAorKwl2cG11bHVkcQktMHgyMCglcjExKSwkSDAsJEg0CSMgaDAqcjQKKysJdnBtdWx1ZHEJJEgxLCRUNCwkSDAKKysJIHZwdW5wY2tocWRxCSRUMSwkVDAsJFQ0CQkjIDQKKysJdnBhZGRxCQkkSDQsJEQ0LCRINAkJIyBoNCA9IGQ0ICsgaDAqcjQKKysJdnBhZGRxCQkkSDAsJEQwLCRIMAkJIyBoMCA9IGQwICsgaDEqczQKKysKKysJdnB1bnBja2xxZHEJJFQxLCRUMCwkVDAJCSMgMDoxCisrCXZwdW5wY2tscWRxCSRUMywkVDIsJFQzCQkjIDI6MworKworKwkjdnBzcmxxCQlcJDQwLCRUNCwkVDQJCSMgNAorKwl2cHNybGRxCQlcJGA0MC84YCwkVDQsJFQ0CSMgNAorKwl2cHNybHEJCVwkMjYsJFQwLCRUMQorKwkgdm1vdmRxYQkweDAwKCVyc3ApLCRENAkJIyBwcmVsb2FkIHIwXjIKKysJdnBhbmQJCSRNQVNLLCRUMCwkVDAJCSMgMAorKwl2cHNybHEJCVwkNCwkVDMsJFQyCisrCXZwYW5kCQkkTUFTSywkVDEsJFQxCQkjIDEKKysJdnBhbmQJCTAoJXJjeCksJFQ0LCRUNAkJIyAuTG1hc2syNAorKwl2cHNybHEJCVwkMzAsJFQzLCRUMworKwl2cGFuZAkJJE1BU0ssJFQyLCRUMgkJIyAyCisrCXZwYW5kCQkkTUFTSywkVDMsJFQzCQkjIDMKKysJdnBvcgkJMzIoJXJjeCksJFQ0LCRUNAkjIHBhZGJpdCwgeWVzLCBhbHdheXMKKysKKysJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKwkjIGxhenkgcmVkdWN0aW9uIGFzIGRpc2N1c3NlZCBpbiAiTkVPTiBjcnlwdG8iIGJ5IEQuSi4gQmVybnN0ZWluCisrCSMgYW5kIFAuIFNjaHdhYmUKKysKKysJdnBzcmxxCQlcJDI2LCRIMywkRDMKKysJdnBhbmQJCSRNQVNLLCRIMywkSDMKKysJdnBhZGRxCQkkRDMsJEg0LCRINAkJIyBoMyAtPiBoNAorKworKwl2cHNybHEJCVwkMjYsJEgwLCREMAorKwl2cGFuZAkJJE1BU0ssJEgwLCRIMAorKwl2cGFkZHEJCSREMCwkRDEsJEgxCQkjIGgwIC0+IGgxCisrCisrCXZwc3JscQkJXCQyNiwkSDQsJEQwCisrCXZwYW5kCQkkTUFTSywkSDQsJEg0CisrCisrCXZwc3JscQkJXCQyNiwkSDEsJEQxCisrCXZwYW5kCQkkTUFTSywkSDEsJEgxCisrCXZwYWRkcQkJJEQxLCRIMiwkSDIJCSMgaDEgLT4gaDIKKysKKysJdnBhZGRxCQkkRDAsJEgwLCRIMAorKwl2cHNsbHEJCVwkMiwkRDAsJEQwCisrCXZwYWRkcQkJJEQwLCRIMCwkSDAJCSMgaDQgLT4gaDAKKysKKysJdnBzcmxxCQlcJDI2LCRIMiwkRDIKKysJdnBhbmQJCSRNQVNLLCRIMiwkSDIKKysJdnBhZGRxCQkkRDIsJEgzLCRIMwkJIyBoMiAtPiBoMworKworKwl2cHNybHEJCVwkMjYsJEgwLCREMAorKwl2cGFuZAkJJE1BU0ssJEgwLCRIMAorKwl2cGFkZHEJCSREMCwkSDEsJEgxCQkjIGgwIC0+IGgxCisrCisrCXZwc3JscQkJXCQyNiwkSDMsJEQzCisrCXZwYW5kCQkkTUFTSywkSDMsJEgzCisrCXZwYWRkcQkJJEQzLCRINCwkSDQJCSMgaDMgLT4gaDQKKysKKysJamEJCS5Mb29wX2F2eAorKworKy5Mc2tpcF9sb29wX2F2eDoKKysJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKwkjIG11bHRpcGx5IChpbnBbMDoxXStoYXNoKSBvciBpbnBbMjozXSBieSByXjI6cl4xCisrCisrCXZwc2h1ZmQJCVwkMHgxMCwkRDQsJEQ0CQkjIHIwXm4sIHh4MTIgLT4geDF4MgorKwlhZGQJCVwkMzIsJGxlbgorKwlqbnoJCS5Mb25nX3RhaWxfYXZ4CisrCisrCXZwYWRkcQkJJEgyLCRUMiwkVDIKKysJdnBhZGRxCQkkSDAsJFQwLCRUMAorKwl2cGFkZHEJCSRIMSwkVDEsJFQxCisrCXZwYWRkcQkJJEgzLCRUMywkVDMKKysJdnBhZGRxCQkkSDQsJFQ0LCRUNAorKworKy5Mb25nX3RhaWxfYXZ4OgorKwl2bW92ZHFhCQkkSDIsMHgyMCglcjExKQorKwl2bW92ZHFhCQkkSDAsMHgwMCglcjExKQorKwl2bW92ZHFhCQkkSDEsMHgxMCglcjExKQorKwl2bW92ZHFhCQkkSDMsMHgzMCglcjExKQorKwl2bW92ZHFhCQkkSDQsMHg0MCglcjExKQorKworKwkjIGQ0ID0gaDQqcjAgKyBoMypyMSAgICsgaDIqcjIgICArIGgxKnIzICAgKyBoMCpyNAorKwkjIGQzID0gaDMqcjAgKyBoMipyMSAgICsgaDEqcjIgICArIGgwKnIzICAgKyBoNCo1KnI0CisrCSMgZDIgPSBoMipyMCArIGgxKnIxICAgKyBoMCpyMiAgICsgaDQqNSpyMyArIGgzKjUqcjQKKysJIyBkMSA9IGgxKnIwICsgaDAqcjEgICArIGg0KjUqcjIgKyBoMyo1KnIzICsgaDIqNSpyNAorKwkjIGQwID0gaDAqcjAgKyBoNCo1KnIxICsgaDMqNSpyMiArIGgyKjUqcjMgKyBoMSo1KnI0CisrCisrCXZwbXVsdWRxCSRUMiwkRDQsJEQyCQkjIGQyID0gaDIqcjAKKysJdnBtdWx1ZHEJJFQwLCRENCwkRDAJCSMgZDAgPSBoMCpyMAorKwkgdnBzaHVmZAlcJDB4MTAsYDE2KjEtNjRgKCRjdHgpLCRIMgkJIyByMV5uCisrCXZwbXVsdWRxCSRUMSwkRDQsJEQxCQkjIGQxID0gaDEqcjAKKysJdnBtdWx1ZHEJJFQzLCRENCwkRDMJCSMgZDMgPSBoMypyMAorKwl2cG11bHVkcQkkVDQsJEQ0LCRENAkJIyBkNCA9IGg0KnIwCisrCisrCXZwbXVsdWRxCSRUMywkSDIsJEgwCQkjIGgzKnIxCisrCXZwYWRkcQkJJEgwLCRENCwkRDQJCSMgZDQgKz0gaDMqcjEKKysJIHZwc2h1ZmQJXCQweDEwLGAxNioyLTY0YCgkY3R4KSwkSDMJCSMgczFebgorKwl2cG11bHVkcQkkVDIsJEgyLCRIMQkJIyBoMipyMQorKwl2cGFkZHEJCSRIMSwkRDMsJEQzCQkjIGQzICs9IGgyKnIxCisrCSB2cHNodWZkCVwkMHgxMCxgMTYqMy02NGAoJGN0eCksJEg0CQkjIHIyXm4KKysJdnBtdWx1ZHEJJFQxLCRIMiwkSDAJCSMgaDEqcjEKKysJdnBhZGRxCQkkSDAsJEQyLCREMgkJIyBkMiArPSBoMSpyMQorKwl2cG11bHVkcQkkVDAsJEgyLCRIMgkJIyBoMCpyMQorKwl2cGFkZHEJCSRIMiwkRDEsJEQxCQkjIGQxICs9IGgwKnIxCisrCXZwbXVsdWRxCSRUNCwkSDMsJEgzCQkjIGg0KnMxCisrCXZwYWRkcQkJJEgzLCREMCwkRDAJCSMgZDAgKz0gaDQqczEKKysKKysJIHZwc2h1ZmQJXCQweDEwLGAxNio0LTY0YCgkY3R4KSwkSDIJCSMgczJebgorKwl2cG11bHVkcQkkVDIsJEg0LCRIMQkJIyBoMipyMgorKwl2cGFkZHEJCSRIMSwkRDQsJEQ0CQkjIGQ0ICs9IGgyKnIyCisrCXZwbXVsdWRxCSRUMSwkSDQsJEgwCQkjIGgxKnIyCisrCXZwYWRkcQkJJEgwLCREMywkRDMJCSMgZDMgKz0gaDEqcjIKKysJIHZwc2h1ZmQJXCQweDEwLGAxNio1LTY0YCgkY3R4KSwkSDMJCSMgcjNebgorKwl2cG11bHVkcQkkVDAsJEg0LCRINAkJIyBoMCpyMgorKwl2cGFkZHEJCSRINCwkRDIsJEQyCQkjIGQyICs9IGgwKnIyCisrCXZwbXVsdWRxCSRUNCwkSDIsJEgxCQkjIGg0KnMyCisrCXZwYWRkcQkJJEgxLCREMSwkRDEJCSMgZDEgKz0gaDQqczIKKysJIHZwc2h1ZmQJXCQweDEwLGAxNio2LTY0YCgkY3R4KSwkSDQJCSMgczNebgorKwl2cG11bHVkcQkkVDMsJEgyLCRIMgkJIyBoMypzMgorKwl2cGFkZHEJCSRIMiwkRDAsJEQwCQkjIGQwICs9IGgzKnMyCisrCisrCXZwbXVsdWRxCSRUMSwkSDMsJEgwCQkjIGgxKnIzCisrCXZwYWRkcQkJJEgwLCRENCwkRDQJCSMgZDQgKz0gaDEqcjMKKysJdnBtdWx1ZHEJJFQwLCRIMywkSDMJCSMgaDAqcjMKKysJdnBhZGRxCQkkSDMsJEQzLCREMwkJIyBkMyArPSBoMCpyMworKwkgdnBzaHVmZAlcJDB4MTAsYDE2KjctNjRgKCRjdHgpLCRIMgkJIyByNF5uCisrCXZwbXVsdWRxCSRUNCwkSDQsJEgxCQkjIGg0KnMzCisrCXZwYWRkcQkJJEgxLCREMiwkRDIJCSMgZDIgKz0gaDQqczMKKysJIHZwc2h1ZmQJXCQweDEwLGAxNio4LTY0YCgkY3R4KSwkSDMJCSMgczRebgorKwl2cG11bHVkcQkkVDMsJEg0LCRIMAkJIyBoMypzMworKwl2cGFkZHEJCSRIMCwkRDEsJEQxCQkjIGQxICs9IGgzKnMzCisrCXZwbXVsdWRxCSRUMiwkSDQsJEg0CQkjIGgyKnMzCisrCXZwYWRkcQkJJEg0LCREMCwkRDAJCSMgZDAgKz0gaDIqczMKKysKKysJdnBtdWx1ZHEJJFQwLCRIMiwkSDIJCSMgaDAqcjQKKysJdnBhZGRxCQkkSDIsJEQ0LCRENAkJIyBoNCA9IGQ0ICsgaDAqcjQKKysJdnBtdWx1ZHEJJFQ0LCRIMywkSDEJCSMgaDQqczQKKysJdnBhZGRxCQkkSDEsJEQzLCREMwkJIyBoMyA9IGQzICsgaDQqczQKKysJdnBtdWx1ZHEJJFQzLCRIMywkSDAJCSMgaDMqczQKKysJdnBhZGRxCQkkSDAsJEQyLCREMgkJIyBoMiA9IGQyICsgaDMqczQKKysJdnBtdWx1ZHEJJFQyLCRIMywkSDEJCSMgaDIqczQKKysJdnBhZGRxCQkkSDEsJEQxLCREMQkJIyBoMSA9IGQxICsgaDIqczQKKysJdnBtdWx1ZHEJJFQxLCRIMywkSDMJCSMgaDEqczQKKysJdnBhZGRxCQkkSDMsJEQwLCREMAkJIyBoMCA9IGQwICsgaDEqczQKKysKKysJanoJCS5Mc2hvcnRfdGFpbF9hdngKKysKKysJdm1vdmRxdQkJMTYqMCgkaW5wKSwkSDAJCSMgbG9hZCBpbnB1dAorKwl2bW92ZHF1CQkxNioxKCRpbnApLCRIMQorKworKwl2cHNybGRxCQlcJDYsJEgwLCRIMgkJIyBzcGxhdCBpbnB1dAorKwl2cHNybGRxCQlcJDYsJEgxLCRIMworKwl2cHVucGNraHFkcQkkSDEsJEgwLCRINAkJIyA0CisrCXZwdW5wY2tscWRxCSRIMSwkSDAsJEgwCQkjIDA6MQorKwl2cHVucGNrbHFkcQkkSDMsJEgyLCRIMwkJIyAyOjMKKysKKysJdnBzcmxxCQlcJDQwLCRINCwkSDQJCSMgNAorKwl2cHNybHEJCVwkMjYsJEgwLCRIMQorKwl2cGFuZAkJJE1BU0ssJEgwLCRIMAkJIyAwCisrCXZwc3JscQkJXCQ0LCRIMywkSDIKKysJdnBhbmQJCSRNQVNLLCRIMSwkSDEJCSMgMQorKwl2cHNybHEJCVwkMzAsJEgzLCRIMworKwl2cGFuZAkJJE1BU0ssJEgyLCRIMgkJIyAyCisrCXZwYW5kCQkkTUFTSywkSDMsJEgzCQkjIDMKKysJdnBvcgkJMzIoJXJjeCksJEg0LCRINAkjIHBhZGJpdCwgeWVzLCBhbHdheXMKKysKKysJdnBzaHVmZAkJXCQweDMyLGAxNiowLTY0YCgkY3R4KSwkVDQJIyByMF5uLCAzNHh4IC0+IHgzeDQKKysJdnBhZGRxCQkweDAwKCVyMTEpLCRIMCwkSDAKKysJdnBhZGRxCQkweDEwKCVyMTEpLCRIMSwkSDEKKysJdnBhZGRxCQkweDIwKCVyMTEpLCRIMiwkSDIKKysJdnBhZGRxCQkweDMwKCVyMTEpLCRIMywkSDMKKysJdnBhZGRxCQkweDQwKCVyMTEpLCRINCwkSDQKKysKKysJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKwkjIG11bHRpcGx5IChpbnBbMDoxXStoYXNoKSBieSByXjQ6cl4zIGFuZCBhY2N1bXVsYXRlCisrCisrCXZwbXVsdWRxCSRIMCwkVDQsJFQwCQkjIGgwKnIwCisrCXZwYWRkcQkJJFQwLCREMCwkRDAJCSMgZDAgKz0gaDAqcjAKKysJdnBtdWx1ZHEJJEgxLCRUNCwkVDEJCSMgaDEqcjAKKysJdnBhZGRxCQkkVDEsJEQxLCREMQkJIyBkMSArPSBoMSpyMAorKwl2cG11bHVkcQkkSDIsJFQ0LCRUMAkJIyBoMipyMAorKwl2cGFkZHEJCSRUMCwkRDIsJEQyCQkjIGQyICs9IGgyKnIwCisrCSB2cHNodWZkCVwkMHgzMixgMTYqMS02NGAoJGN0eCksJFQyCQkjIHIxXm4KKysJdnBtdWx1ZHEJJEgzLCRUNCwkVDEJCSMgaDMqcjAKKysJdnBhZGRxCQkkVDEsJEQzLCREMwkJIyBkMyArPSBoMypyMAorKwl2cG11bHVkcQkkSDQsJFQ0LCRUNAkJIyBoNCpyMAorKwl2cGFkZHEJCSRUNCwkRDQsJEQ0CQkjIGQ0ICs9IGg0KnIwCisrCisrCXZwbXVsdWRxCSRIMywkVDIsJFQwCQkjIGgzKnIxCisrCXZwYWRkcQkJJFQwLCRENCwkRDQJCSMgZDQgKz0gaDMqcjEKKysJIHZwc2h1ZmQJXCQweDMyLGAxNioyLTY0YCgkY3R4KSwkVDMJCSMgczEKKysJdnBtdWx1ZHEJJEgyLCRUMiwkVDEJCSMgaDIqcjEKKysJdnBhZGRxCQkkVDEsJEQzLCREMwkJIyBkMyArPSBoMipyMQorKwkgdnBzaHVmZAlcJDB4MzIsYDE2KjMtNjRgKCRjdHgpLCRUNAkJIyByMgorKwl2cG11bHVkcQkkSDEsJFQyLCRUMAkJIyBoMSpyMQorKwl2cGFkZHEJCSRUMCwkRDIsJEQyCQkjIGQyICs9IGgxKnIxCisrCXZwbXVsdWRxCSRIMCwkVDIsJFQyCQkjIGgwKnIxCisrCXZwYWRkcQkJJFQyLCREMSwkRDEJCSMgZDEgKz0gaDAqcjEKKysJdnBtdWx1ZHEJJEg0LCRUMywkVDMJCSMgaDQqczEKKysJdnBhZGRxCQkkVDMsJEQwLCREMAkJIyBkMCArPSBoNCpzMQorKworKwkgdnBzaHVmZAlcJDB4MzIsYDE2KjQtNjRgKCRjdHgpLCRUMgkJIyBzMgorKwl2cG11bHVkcQkkSDIsJFQ0LCRUMQkJIyBoMipyMgorKwl2cGFkZHEJCSRUMSwkRDQsJEQ0CQkjIGQ0ICs9IGgyKnIyCisrCXZwbXVsdWRxCSRIMSwkVDQsJFQwCQkjIGgxKnIyCisrCXZwYWRkcQkJJFQwLCREMywkRDMJCSMgZDMgKz0gaDEqcjIKKysJIHZwc2h1ZmQJXCQweDMyLGAxNio1LTY0YCgkY3R4KSwkVDMJCSMgcjMKKysJdnBtdWx1ZHEJJEgwLCRUNCwkVDQJCSMgaDAqcjIKKysJdnBhZGRxCQkkVDQsJEQyLCREMgkJIyBkMiArPSBoMCpyMgorKwl2cG11bHVkcQkkSDQsJFQyLCRUMQkJIyBoNCpzMgorKwl2cGFkZHEJCSRUMSwkRDEsJEQxCQkjIGQxICs9IGg0KnMyCisrCSB2cHNodWZkCVwkMHgzMixgMTYqNi02NGAoJGN0eCksJFQ0CQkjIHMzCisrCXZwbXVsdWRxCSRIMywkVDIsJFQyCQkjIGgzKnMyCisrCXZwYWRkcQkJJFQyLCREMCwkRDAJCSMgZDAgKz0gaDMqczIKKysKKysJdnBtdWx1ZHEJJEgxLCRUMywkVDAJCSMgaDEqcjMKKysJdnBhZGRxCQkkVDAsJEQ0LCRENAkJIyBkNCArPSBoMSpyMworKwl2cG11bHVkcQkkSDAsJFQzLCRUMwkJIyBoMCpyMworKwl2cGFkZHEJCSRUMywkRDMsJEQzCQkjIGQzICs9IGgwKnIzCisrCSB2cHNodWZkCVwkMHgzMixgMTYqNy02NGAoJGN0eCksJFQyCQkjIHI0CisrCXZwbXVsdWRxCSRINCwkVDQsJFQxCQkjIGg0KnMzCisrCXZwYWRkcQkJJFQxLCREMiwkRDIJCSMgZDIgKz0gaDQqczMKKysJIHZwc2h1ZmQJXCQweDMyLGAxNio4LTY0YCgkY3R4KSwkVDMJCSMgczQKKysJdnBtdWx1ZHEJJEgzLCRUNCwkVDAJCSMgaDMqczMKKysJdnBhZGRxCQkkVDAsJEQxLCREMQkJIyBkMSArPSBoMypzMworKwl2cG11bHVkcQkkSDIsJFQ0LCRUNAkJIyBoMipzMworKwl2cGFkZHEJCSRUNCwkRDAsJEQwCQkjIGQwICs9IGgyKnMzCisrCisrCXZwbXVsdWRxCSRIMCwkVDIsJFQyCQkjIGgwKnI0CisrCXZwYWRkcQkJJFQyLCRENCwkRDQJCSMgZDQgKz0gaDAqcjQKKysJdnBtdWx1ZHEJJEg0LCRUMywkVDEJCSMgaDQqczQKKysJdnBhZGRxCQkkVDEsJEQzLCREMwkJIyBkMyArPSBoNCpzNAorKwl2cG11bHVkcQkkSDMsJFQzLCRUMAkJIyBoMypzNAorKwl2cGFkZHEJCSRUMCwkRDIsJEQyCQkjIGQyICs9IGgzKnM0CisrCXZwbXVsdWRxCSRIMiwkVDMsJFQxCQkjIGgyKnM0CisrCXZwYWRkcQkJJFQxLCREMSwkRDEJCSMgZDEgKz0gaDIqczQKKysJdnBtdWx1ZHEJJEgxLCRUMywkVDMJCSMgaDEqczQKKysJdnBhZGRxCQkkVDMsJEQwLCREMAkJIyBkMCArPSBoMSpzNAorKworKy5Mc2hvcnRfdGFpbF9hdng6CisrCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysJIyBob3Jpem9udGFsIGFkZGl0aW9uCisrCisrCXZwc3JsZHEJCVwkOCwkRDQsJFQ0CisrCXZwc3JsZHEJCVwkOCwkRDMsJFQzCisrCXZwc3JsZHEJCVwkOCwkRDEsJFQxCisrCXZwc3JsZHEJCVwkOCwkRDAsJFQwCisrCXZwc3JsZHEJCVwkOCwkRDIsJFQyCisrCXZwYWRkcQkJJFQzLCREMywkRDMKKysJdnBhZGRxCQkkVDQsJEQ0LCRENAorKwl2cGFkZHEJCSRUMCwkRDAsJEQwCisrCXZwYWRkcQkJJFQxLCREMSwkRDEKKysJdnBhZGRxCQkkVDIsJEQyLCREMgorKworKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrCSMgbGF6eSByZWR1Y3Rpb24KKysKKysJdnBzcmxxCQlcJDI2LCREMywkSDMKKysJdnBhbmQJCSRNQVNLLCREMywkRDMKKysJdnBhZGRxCQkkSDMsJEQ0LCRENAkJIyBoMyAtPiBoNAorKworKwl2cHNybHEJCVwkMjYsJEQwLCRIMAorKwl2cGFuZAkJJE1BU0ssJEQwLCREMAorKwl2cGFkZHEJCSRIMCwkRDEsJEQxCQkjIGgwIC0+IGgxCisrCisrCXZwc3JscQkJXCQyNiwkRDQsJEg0CisrCXZwYW5kCQkkTUFTSywkRDQsJEQ0CisrCisrCXZwc3JscQkJXCQyNiwkRDEsJEgxCisrCXZwYW5kCQkkTUFTSywkRDEsJEQxCisrCXZwYWRkcQkJJEgxLCREMiwkRDIJCSMgaDEgLT4gaDIKKysKKysJdnBhZGRxCQkkSDQsJEQwLCREMAorKwl2cHNsbHEJCVwkMiwkSDQsJEg0CisrCXZwYWRkcQkJJEg0LCREMCwkRDAJCSMgaDQgLT4gaDAKKysKKysJdnBzcmxxCQlcJDI2LCREMiwkSDIKKysJdnBhbmQJCSRNQVNLLCREMiwkRDIKKysJdnBhZGRxCQkkSDIsJEQzLCREMwkJIyBoMiAtPiBoMworKworKwl2cHNybHEJCVwkMjYsJEQwLCRIMAorKwl2cGFuZAkJJE1BU0ssJEQwLCREMAorKwl2cGFkZHEJCSRIMCwkRDEsJEQxCQkjIGgwIC0+IGgxCisrCisrCXZwc3JscQkJXCQyNiwkRDMsJEgzCisrCXZwYW5kCQkkTUFTSywkRDMsJEQzCisrCXZwYWRkcQkJJEgzLCRENCwkRDQJCSMgaDMgLT4gaDQKKysKKysJdm1vdmQJCSREMCxgNCowLTQ4LTY0YCgkY3R4KQkjIHNhdmUgcGFydGlhbGx5IHJlZHVjZWQKKysJdm1vdmQJCSREMSxgNCoxLTQ4LTY0YCgkY3R4KQorKwl2bW92ZAkJJEQyLGA0KjItNDgtNjRgKCRjdHgpCisrCXZtb3ZkCQkkRDMsYDQqMy00OC02NGAoJGN0eCkKKysJdm1vdmQJCSRENCxgNCo0LTQ4LTY0YCgkY3R4KQorK19fXworKyRjb2RlLj08PF9fXwlpZiAoJHdpbjY0KTsKKysJdm1vdmRxYQkJMHg1MCglcjExKSwleG1tNgorKwl2bW92ZHFhCQkweDYwKCVyMTEpLCV4bW03CisrCXZtb3ZkcWEJCTB4NzAoJXIxMSksJXhtbTgKKysJdm1vdmRxYQkJMHg4MCglcjExKSwleG1tOQorKwl2bW92ZHFhCQkweDkwKCVyMTEpLCV4bW0xMAorKwl2bW92ZHFhCQkweGEwKCVyMTEpLCV4bW0xMQorKwl2bW92ZHFhCQkweGIwKCVyMTEpLCV4bW0xMgorKwl2bW92ZHFhCQkweGMwKCVyMTEpLCV4bW0xMworKwl2bW92ZHFhCQkweGQwKCVyMTEpLCV4bW0xNAorKwl2bW92ZHFhCQkweGUwKCVyMTEpLCV4bW0xNQorKwlsZWEJCTB4ZjgoJXIxMSksJXJzcAorKy5MZG9fYXZ4X2VwaWxvZ3VlOgorK19fXworKyRjb2RlLj08PF9fXwlpZiAoISR3aW42NCk7CisrCWxlYQkJMHg1OCglcjExKSwlcnNwCisrLmNmaV9kZWZfY2ZhCQklcnNwLDgKKytfX18KKyskY29kZS49PDxfX187CisrCXZ6ZXJvdXBwZXIKKysJcmV0CisrLmNmaV9lbmRwcm9jCisrLnNpemUJcG9seTEzMDVfYmxvY2tzX2F2eCwuLXBvbHkxMzA1X2Jsb2Nrc19hdngKKysKKysudHlwZQlwb2x5MTMwNV9lbWl0X2F2eCxcQGZ1bmN0aW9uLDMKKysuYWxpZ24JMzIKKytwb2x5MTMwNV9lbWl0X2F2eDoKKysJY21wbAlcJDAsMjAoJGN0eCkJIyBpc19iYXNlMl8yNj8KKysJamUJLkxlbWl0CisrCisrCW1vdgkwKCRjdHgpLCVlYXgJIyBsb2FkIGhhc2ggdmFsdWUgYmFzZSAyXjI2CisrCW1vdgk0KCRjdHgpLCVlY3gKKysJbW92CTgoJGN0eCksJXI4ZAorKwltb3YJMTIoJGN0eCksJXIxMWQKKysJbW92CTE2KCRjdHgpLCVyMTBkCisrCisrCXNobAlcJDI2LCVyY3gJIyBiYXNlIDJeMjYgLT4gYmFzZSAyXjY0CisrCW1vdgklcjgsJXI5CisrCXNobAlcJDUyLCVyOAorKwlhZGQJJXJjeCwlcmF4CisrCXNocglcJDEyLCVyOQorKwlhZGQJJXJheCwlcjgJIyBoMAorKwlhZGMJXCQwLCVyOQorKworKwlzaGwJXCQxNCwlcjExCisrCW1vdgklcjEwLCVyYXgKKysJc2hyCVwkMjQsJXIxMAorKwlhZGQJJXIxMSwlcjkKKysJc2hsCVwkNDAsJXJheAorKwlhZGQJJXJheCwlcjkJIyBoMQorKwlhZGMJXCQwLCVyMTAJIyBoMgorKworKwltb3YJJXIxMCwlcmF4CSMgY291bGQgYmUgcGFydGlhbGx5IHJlZHVjZWQsIHNvIHJlZHVjZQorKwltb3YJJXIxMCwlcmN4CisrCWFuZAlcJDMsJXIxMAorKwlzaHIJXCQyLCVyYXgKKysJYW5kCVwkLTQsJXJjeAorKwlhZGQJJXJjeCwlcmF4CisrCWFkZAklcmF4LCVyOAorKwlhZGMJXCQwLCVyOQorKwlhZGMJXCQwLCVyMTAKKysKKysJbW92CSVyOCwlcmF4CisrCWFkZAlcJDUsJXI4CQkjIGNvbXBhcmUgdG8gbW9kdWx1cworKwltb3YJJXI5LCVyY3gKKysJYWRjCVwkMCwlcjkKKysJYWRjCVwkMCwlcjEwCisrCXNocglcJDIsJXIxMAkjIGRpZCAxMzAtYml0IHZhbHVlIG92ZXJmbG93PworKwljbW92bnoJJXI4LCVyYXgKKysJY21vdm56CSVyOSwlcmN4CisrCisrCWFkZAkwKCRub25jZSksJXJheAkjIGFjY3VtdWxhdGUgbm9uY2UKKysJYWRjCTgoJG5vbmNlKSwlcmN4CisrCW1vdgklcmF4LDAoJG1hYykJIyB3cml0ZSByZXN1bHQKKysJbW92CSVyY3gsOCgkbWFjKQorKworKwlyZXQKKysuc2l6ZQlwb2x5MTMwNV9lbWl0X2F2eCwuLXBvbHkxMzA1X2VtaXRfYXZ4CisrX19fCisrCisraWYgKCRhdng+MSkgeworK215ICgkSDAsJEgxLCRIMiwkSDMsJEg0LCAkTUFTSywgJFQ0LCRUMCwkVDEsJFQyLCRUMywgJEQwLCREMSwkRDIsJEQzLCRENCkgPQorKyAgICBtYXAoIiV5bW0kXyIsKDAuLjE1KSk7CisrbXkgJFM0PSRNQVNLOworKworKyRjb2RlLj08PF9fXzsKKysudHlwZQlwb2x5MTMwNV9ibG9ja3NfYXZ4MixcQGZ1bmN0aW9uLDQKKysuYWxpZ24JMzIKKytwb2x5MTMwNV9ibG9ja3NfYXZ4MjoKKysuY2ZpX3N0YXJ0cHJvYworKwltb3YJMjAoJGN0eCksJXI4ZAkJIyBpc19iYXNlMl8yNgorKwljbXAJXCQxMjgsJGxlbgorKwlqYWUJLkxibG9ja3NfYXZ4MgorKwl0ZXN0CSVyOGQsJXI4ZAorKwlqegkuTGJsb2NrcworKworKy5MYmxvY2tzX2F2eDI6CisrCWFuZAlcJC0xNiwkbGVuCisrCWp6CS5Mbm9fZGF0YV9hdngyCisrCisrCXZ6ZXJvdXBwZXIKKysKKysJdGVzdAklcjhkLCVyOGQKKysJanoJLkxiYXNlMl82NF9hdngyCisrCisrCXRlc3QJXCQ2MywkbGVuCisrCWp6CS5MZXZlbl9hdngyCisrCisrCXB1c2gJJXJieAorKy5jZmlfcHVzaAklcmJ4CisrCXB1c2gJJXJicAorKy5jZmlfcHVzaAklcmJwCisrCXB1c2gJJXIxMgorKy5jZmlfcHVzaAklcjEyCisrCXB1c2gJJXIxMworKy5jZmlfcHVzaAklcjEzCisrCXB1c2gJJXIxNAorKy5jZmlfcHVzaAklcjE0CisrCXB1c2gJJXIxNQorKy5jZmlfcHVzaAklcjE1CisrLkxibG9ja3NfYXZ4Ml9ib2R5OgorKworKwltb3YJJGxlbiwlcjE1CQkjIHJlYXNzaWduICRsZW4KKysKKysJbW92CTAoJGN0eCksJGQxCQkjIGxvYWQgaGFzaCB2YWx1ZQorKwltb3YJOCgkY3R4KSwkZDIKKysJbW92CTE2KCRjdHgpLCRoMiNkCisrCisrCW1vdgkyNCgkY3R4KSwkcjAJCSMgbG9hZCByCisrCW1vdgkzMigkY3R4KSwkczEKKysKKysJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIGJhc2UgMl4yNiAtPiBiYXNlIDJeNjQKKysJbW92CSRkMSNkLCRoMCNkCisrCWFuZAlcJGAtMSooMTw8MzEpYCwkZDEKKysJbW92CSRkMiwkcjEJCQkjIGJvcnJvdyAkcjEKKysJbW92CSRkMiNkLCRoMSNkCisrCWFuZAlcJGAtMSooMTw8MzEpYCwkZDIKKysKKysJc2hyCVwkNiwkZDEKKysJc2hsCVwkNTIsJHIxCisrCWFkZAkkZDEsJGgwCisrCXNocglcJDEyLCRoMQorKwlzaHIJXCQxOCwkZDIKKysJYWRkCSRyMSwkaDAKKysJYWRjCSRkMiwkaDEKKysKKysJbW92CSRoMiwkZDEKKysJc2hsCVwkNDAsJGQxCisrCXNocglcJDI0LCRoMgorKwlhZGQJJGQxLCRoMQorKwlhZGMJXCQwLCRoMgkJCSMgY2FuIGJlIHBhcnRpYWxseSByZWR1Y2VkLi4uCisrCisrCW1vdglcJC00LCRkMgkJIyAuLi4gc28gcmVkdWNlCisrCW1vdgkkaDIsJGQxCisrCWFuZAkkaDIsJGQyCisrCXNocglcJDIsJGQxCisrCWFuZAlcJDMsJGgyCisrCWFkZAkkZDIsJGQxCQkJIyA9KjUKKysJYWRkCSRkMSwkaDAKKysJYWRjCVwkMCwkaDEKKysJYWRjCVwkMCwkaDIKKysKKysJbW92CSRzMSwkcjEKKysJbW92CSRzMSwlcmF4CisrCXNocglcJDIsJHMxCisrCWFkZAkkcjEsJHMxCQkJIyBzMSA9IHIxICsgKHIxID4+IDIpCisrCisrLkxiYXNlMl8yNl9wcmVfYXZ4MjoKKysJYWRkCTAoJGlucCksJGgwCQkjIGFjY3VtdWxhdGUgaW5wdXQKKysJYWRjCTgoJGlucCksJGgxCisrCWxlYQkxNigkaW5wKSwkaW5wCisrCWFkYwkkcGFkYml0LCRoMgorKwlzdWIJXCQxNiwlcjE1CisrCisrCWNhbGwJX19wb2x5MTMwNV9ibG9jaworKwltb3YJJHIxLCVyYXgKKysKKysJdGVzdAlcJDYzLCVyMTUKKysJam56CS5MYmFzZTJfMjZfcHJlX2F2eDIKKysKKysJdGVzdAkkcGFkYml0LCRwYWRiaXQJCSMgaWYgJHBhZGJpdCBpcyB6ZXJvLAorKwlqegkuTHN0b3JlX2Jhc2UyXzY0X2F2eDIJIyBzdG9yZSBoYXNoIGluIGJhc2UgMl42NCBmb3JtYXQKKysKKysJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIGJhc2UgMl42NCAtPiBiYXNlIDJeMjYKKysJbW92CSRoMCwlcmF4CisrCW1vdgkkaDAsJXJkeAorKwlzaHIJXCQ1MiwkaDAKKysJbW92CSRoMSwkcjAKKysJbW92CSRoMSwkcjEKKysJc2hyCVwkMjYsJXJkeAorKwlhbmQJXCQweDNmZmZmZmYsJXJheAkjIGhbMF0KKysJc2hsCVwkMTIsJHIwCisrCWFuZAlcJDB4M2ZmZmZmZiwlcmR4CSMgaFsxXQorKwlzaHIJXCQxNCwkaDEKKysJb3IJJHIwLCRoMAorKwlzaGwJXCQyNCwkaDIKKysJYW5kCVwkMHgzZmZmZmZmLCRoMAkJIyBoWzJdCisrCXNocglcJDQwLCRyMQorKwlhbmQJXCQweDNmZmZmZmYsJGgxCQkjIGhbM10KKysJb3IJJHIxLCRoMgkJCSMgaFs0XQorKworKwl0ZXN0CSVyMTUsJXIxNQorKwlqegkuTHN0b3JlX2Jhc2UyXzI2X2F2eDIKKysKKysJdm1vdmQJJXJheCNkLCV4IyRIMAorKwl2bW92ZAklcmR4I2QsJXgjJEgxCisrCXZtb3ZkCSRoMCNkLCV4IyRIMgorKwl2bW92ZAkkaDEjZCwleCMkSDMKKysJdm1vdmQJJGgyI2QsJXgjJEg0CisrCWptcAkuTHByb2NlZWRfYXZ4MgorKworKy5hbGlnbgkzMgorKy5Mc3RvcmVfYmFzZTJfNjRfYXZ4MjoKKysJbW92CSRoMCwwKCRjdHgpCisrCW1vdgkkaDEsOCgkY3R4KQorKwltb3YJJGgyLDE2KCRjdHgpCQkjIG5vdGUgdGhhdCBpc19iYXNlMl8yNiBpcyB6ZXJvZWQKKysJam1wCS5MZG9uZV9hdngyCisrCisrLmFsaWduCTE2CisrLkxzdG9yZV9iYXNlMl8yNl9hdngyOgorKwltb3YJJXJheCNkLDAoJGN0eCkJCSMgc3RvcmUgaGFzaCB2YWx1ZSBiYXNlIDJeMjYKKysJbW92CSVyZHgjZCw0KCRjdHgpCisrCW1vdgkkaDAjZCw4KCRjdHgpCisrCW1vdgkkaDEjZCwxMigkY3R4KQorKwltb3YJJGgyI2QsMTYoJGN0eCkKKysuYWxpZ24JMTYKKysuTGRvbmVfYXZ4MjoKKysJbW92CTAoJXJzcCksJXIxNQorKy5jZmlfcmVzdG9yZQklcjE1CisrCW1vdgk4KCVyc3ApLCVyMTQKKysuY2ZpX3Jlc3RvcmUJJXIxNAorKwltb3YJMTYoJXJzcCksJXIxMworKy5jZmlfcmVzdG9yZQklcjEzCisrCW1vdgkyNCglcnNwKSwlcjEyCisrLmNmaV9yZXN0b3JlCSVyMTIKKysJbW92CTMyKCVyc3ApLCVyYnAKKysuY2ZpX3Jlc3RvcmUJJXJicAorKwltb3YJNDAoJXJzcCksJXJieAorKy5jZmlfcmVzdG9yZQklcmJ4CisrCWxlYQk0OCglcnNwKSwlcnNwCisrLmNmaV9hZGp1c3RfY2ZhX29mZnNldAktNDgKKysuTG5vX2RhdGFfYXZ4MjoKKysuTGJsb2Nrc19hdngyX2VwaWxvZ3VlOgorKwlyZXQKKysuY2ZpX2VuZHByb2MKKysKKysuYWxpZ24JMzIKKysuTGJhc2UyXzY0X2F2eDI6CisrLmNmaV9zdGFydHByb2MKKysJcHVzaAklcmJ4CisrLmNmaV9wdXNoCSVyYngKKysJcHVzaAklcmJwCisrLmNmaV9wdXNoCSVyYnAKKysJcHVzaAklcjEyCisrLmNmaV9wdXNoCSVyMTIKKysJcHVzaAklcjEzCisrLmNmaV9wdXNoCSVyMTMKKysJcHVzaAklcjE0CisrLmNmaV9wdXNoCSVyMTQKKysJcHVzaAklcjE1CisrLmNmaV9wdXNoCSVyMTUKKysuTGJhc2UyXzY0X2F2eDJfYm9keToKKysKKysJbW92CSRsZW4sJXIxNQkJIyByZWFzc2lnbiAkbGVuCisrCisrCW1vdgkyNCgkY3R4KSwkcjAJCSMgbG9hZCByCisrCW1vdgkzMigkY3R4KSwkczEKKysKKysJbW92CTAoJGN0eCksJGgwCQkjIGxvYWQgaGFzaCB2YWx1ZQorKwltb3YJOCgkY3R4KSwkaDEKKysJbW92CTE2KCRjdHgpLCRoMiNkCisrCisrCW1vdgkkczEsJHIxCisrCW1vdgkkczEsJXJheAorKwlzaHIJXCQyLCRzMQorKwlhZGQJJHIxLCRzMQkJCSMgczEgPSByMSArIChyMSA+PiAyKQorKworKwl0ZXN0CVwkNjMsJGxlbgorKwlqegkuTGluaXRfYXZ4MgorKworKy5MYmFzZTJfNjRfcHJlX2F2eDI6CisrCWFkZAkwKCRpbnApLCRoMAkJIyBhY2N1bXVsYXRlIGlucHV0CisrCWFkYwk4KCRpbnApLCRoMQorKwlsZWEJMTYoJGlucCksJGlucAorKwlhZGMJJHBhZGJpdCwkaDIKKysJc3ViCVwkMTYsJXIxNQorKworKwljYWxsCV9fcG9seTEzMDVfYmxvY2sKKysJbW92CSRyMSwlcmF4CisrCisrCXRlc3QJXCQ2MywlcjE1CisrCWpuegkuTGJhc2UyXzY0X3ByZV9hdngyCisrCisrLkxpbml0X2F2eDI6CisrCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBiYXNlIDJeNjQgLT4gYmFzZSAyXjI2CisrCW1vdgkkaDAsJXJheAorKwltb3YJJGgwLCVyZHgKKysJc2hyCVwkNTIsJGgwCisrCW1vdgkkaDEsJGQxCisrCW1vdgkkaDEsJGQyCisrCXNocglcJDI2LCVyZHgKKysJYW5kCVwkMHgzZmZmZmZmLCVyYXgJIyBoWzBdCisrCXNobAlcJDEyLCRkMQorKwlhbmQJXCQweDNmZmZmZmYsJXJkeAkjIGhbMV0KKysJc2hyCVwkMTQsJGgxCisrCW9yCSRkMSwkaDAKKysJc2hsCVwkMjQsJGgyCisrCWFuZAlcJDB4M2ZmZmZmZiwkaDAJCSMgaFsyXQorKwlzaHIJXCQ0MCwkZDIKKysJYW5kCVwkMHgzZmZmZmZmLCRoMQkJIyBoWzNdCisrCW9yCSRkMiwkaDIJCQkjIGhbNF0KKysKKysJdm1vdmQJJXJheCNkLCV4IyRIMAorKwl2bW92ZAklcmR4I2QsJXgjJEgxCisrCXZtb3ZkCSRoMCNkLCV4IyRIMgorKwl2bW92ZAkkaDEjZCwleCMkSDMKKysJdm1vdmQJJGgyI2QsJXgjJEg0CisrCW1vdmwJXCQxLDIwKCRjdHgpCQkjIHNldCBpc19iYXNlMl8yNgorKworKwljYWxsCV9fcG9seTEzMDVfaW5pdF9hdngKKysKKysuTHByb2NlZWRfYXZ4MjoKKysJbW92CSVyMTUsJGxlbgkJCSMgcmVzdG9yZSAkbGVuCisrCW1vdglPUEVOU1NMX2lhMzJjYXBfUCs4KCVyaXApLCVyMTBkCisrCW1vdglcJGAoMTw8MzF8MTw8MzB8MTw8MTYpYCwlcjExZAorKworKwltb3YJMCglcnNwKSwlcjE1CisrLmNmaV9yZXN0b3JlCSVyMTUKKysJbW92CTgoJXJzcCksJXIxNAorKy5jZmlfcmVzdG9yZQklcjE0CisrCW1vdgkxNiglcnNwKSwlcjEzCisrLmNmaV9yZXN0b3JlCSVyMTMKKysJbW92CTI0KCVyc3ApLCVyMTIKKysuY2ZpX3Jlc3RvcmUJJXIxMgorKwltb3YJMzIoJXJzcCksJXJicAorKy5jZmlfcmVzdG9yZQklcmJwCisrCW1vdgk0MCglcnNwKSwlcmJ4CisrLmNmaV9yZXN0b3JlCSVyYngKKysJbGVhCTQ4KCVyc3ApLCVyYXgKKysJbGVhCTQ4KCVyc3ApLCVyc3AKKysuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0CS00OAorKy5MYmFzZTJfNjRfYXZ4Ml9lcGlsb2d1ZToKKysJam1wCS5MZG9fYXZ4MgorKy5jZmlfZW5kcHJvYworKworKy5hbGlnbgkzMgorKy5MZXZlbl9hdngyOgorKy5jZmlfc3RhcnRwcm9jCisrCW1vdgkJT1BFTlNTTF9pYTMyY2FwX1ArOCglcmlwKSwlcjEwZAorKwl2bW92ZAkJNCowKCRjdHgpLCV4IyRIMAkjIGxvYWQgaGFzaCB2YWx1ZSBiYXNlIDJeMjYKKysJdm1vdmQJCTQqMSgkY3R4KSwleCMkSDEKKysJdm1vdmQJCTQqMigkY3R4KSwleCMkSDIKKysJdm1vdmQJCTQqMygkY3R4KSwleCMkSDMKKysJdm1vdmQJCTQqNCgkY3R4KSwleCMkSDQKKysKKysuTGRvX2F2eDI6CisrX19fCisrJGNvZGUuPTw8X19fCQlpZiAoJGF2eD4yKTsKKysJY21wCQlcJDUxMiwkbGVuCisrCWpiCQkuTHNraXBfYXZ4NTEyCisrCWFuZAkJJXIxMWQsJXIxMGQKKysJdGVzdAkJXCRgMTw8MTZgLCVyMTBkCQkjIGNoZWNrIGZvciBBVlg1MTJGCisrCWpuegkJLkxibG9ja3NfYXZ4NTEyCisrLkxza2lwX2F2eDUxMjoKKytfX18KKyskY29kZS49PDxfX18JaWYgKCEkd2luNjQpOworKwlsZWEJCS04KCVyc3ApLCVyMTEKKysuY2ZpX2RlZl9jZmEJCSVyMTEsMTYKKysJc3ViCQlcJDB4MTI4LCVyc3AKKytfX18KKyskY29kZS49PDxfX18JaWYgKCR3aW42NCk7CisrCWxlYQkJLTB4ZjgoJXJzcCksJXIxMQorKwlzdWIJCVwkMHgxYzgsJXJzcAorKwl2bW92ZHFhCQkleG1tNiwweDUwKCVyMTEpCisrCXZtb3ZkcWEJCSV4bW03LDB4NjAoJXIxMSkKKysJdm1vdmRxYQkJJXhtbTgsMHg3MCglcjExKQorKwl2bW92ZHFhCQkleG1tOSwweDgwKCVyMTEpCisrCXZtb3ZkcWEJCSV4bW0xMCwweDkwKCVyMTEpCisrCXZtb3ZkcWEJCSV4bW0xMSwweGEwKCVyMTEpCisrCXZtb3ZkcWEJCSV4bW0xMiwweGIwKCVyMTEpCisrCXZtb3ZkcWEJCSV4bW0xMywweGMwKCVyMTEpCisrCXZtb3ZkcWEJCSV4bW0xNCwweGQwKCVyMTEpCisrCXZtb3ZkcWEJCSV4bW0xNSwweGUwKCVyMTEpCisrLkxkb19hdngyX2JvZHk6CisrX19fCisrJGNvZGUuPTw8X19fOworKwlsZWEJCS5MY29uc3QoJXJpcCksJXJjeAorKwlsZWEJCTQ4KzY0KCRjdHgpLCRjdHgJIyBzaXplIG9wdGltaXphdGlvbgorKwl2bW92ZHFhCQk5NiglcmN4KSwkVDAJCSMgLkxwZXJtZF9hdngyCisrCisrCSMgZXhwYW5kIGFuZCBjb3B5IHByZS1jYWxjdWxhdGVkIHRhYmxlIHRvIHN0YWNrCisrCXZtb3ZkcXUJCWAxNiowLTY0YCgkY3R4KSwleCMkVDIKKysJYW5kCQlcJC01MTIsJXJzcAorKwl2bW92ZHF1CQlgMTYqMS02NGAoJGN0eCksJXgjJFQzCisrCXZtb3ZkcXUJCWAxNioyLTY0YCgkY3R4KSwleCMkVDQKKysJdm1vdmRxdQkJYDE2KjMtNjRgKCRjdHgpLCV4IyREMAorKwl2bW92ZHF1CQlgMTYqNC02NGAoJGN0eCksJXgjJEQxCisrCXZtb3ZkcXUJCWAxNio1LTY0YCgkY3R4KSwleCMkRDIKKysJbGVhCQkweDkwKCVyc3ApLCVyYXgJCSMgc2l6ZSBvcHRpbWl6YXRpb24KKysJdm1vdmRxdQkJYDE2KjYtNjRgKCRjdHgpLCV4IyREMworKwl2cGVybWQJCSRUMiwkVDAsJFQyCQkjIDAwMDAzNDEyIC0+IDE0MjQzNDQ0CisrCXZtb3ZkcXUJCWAxNio3LTY0YCgkY3R4KSwleCMkRDQKKysJdnBlcm1kCQkkVDMsJFQwLCRUMworKwl2bW92ZHF1CQlgMTYqOC02NGAoJGN0eCksJXgjJE1BU0sKKysJdnBlcm1kCQkkVDQsJFQwLCRUNAorKwl2bW92ZHFhCQkkVDIsMHgwMCglcnNwKQorKwl2cGVybWQJCSREMCwkVDAsJEQwCisrCXZtb3ZkcWEJCSRUMywweDIwLTB4OTAoJXJheCkKKysJdnBlcm1kCQkkRDEsJFQwLCREMQorKwl2bW92ZHFhCQkkVDQsMHg0MC0weDkwKCVyYXgpCisrCXZwZXJtZAkJJEQyLCRUMCwkRDIKKysJdm1vdmRxYQkJJEQwLDB4NjAtMHg5MCglcmF4KQorKwl2cGVybWQJCSREMywkVDAsJEQzCisrCXZtb3ZkcWEJCSREMSwweDgwLTB4OTAoJXJheCkKKysJdnBlcm1kCQkkRDQsJFQwLCRENAorKwl2bW92ZHFhCQkkRDIsMHhhMC0weDkwKCVyYXgpCisrCXZwZXJtZAkJJE1BU0ssJFQwLCRNQVNLCisrCXZtb3ZkcWEJCSREMywweGMwLTB4OTAoJXJheCkKKysJdm1vdmRxYQkJJEQ0LDB4ZTAtMHg5MCglcmF4KQorKwl2bW92ZHFhCQkkTUFTSywweDEwMC0weDkwKCVyYXgpCisrCXZtb3ZkcWEJCTY0KCVyY3gpLCRNQVNLCQkjIC5MbWFzazI2CisrCisrCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysJIyBsb2FkIGlucHV0CisrCXZtb3ZkcXUJCTE2KjAoJGlucCksJXgjJFQwCisrCXZtb3ZkcXUJCTE2KjEoJGlucCksJXgjJFQxCisrCXZpbnNlcnRpMTI4CVwkMSwxNioyKCRpbnApLCRUMCwkVDAKKysJdmluc2VydGkxMjgJXCQxLDE2KjMoJGlucCksJFQxLCRUMQorKwlsZWEJCTE2KjQoJGlucCksJGlucAorKworKwl2cHNybGRxCQlcJDYsJFQwLCRUMgkJIyBzcGxhdCBpbnB1dAorKwl2cHNybGRxCQlcJDYsJFQxLCRUMworKwl2cHVucGNraHFkcQkkVDEsJFQwLCRUNAkJIyA0CisrCXZwdW5wY2tscWRxCSRUMywkVDIsJFQyCQkjIDI6MworKwl2cHVucGNrbHFkcQkkVDEsJFQwLCRUMAkJIyAwOjEKKysKKysJdnBzcmxxCQlcJDMwLCRUMiwkVDMKKysJdnBzcmxxCQlcJDQsJFQyLCRUMgorKwl2cHNybHEJCVwkMjYsJFQwLCRUMQorKwl2cHNybHEJCVwkNDAsJFQ0LCRUNAkJIyA0CisrCXZwYW5kCQkkTUFTSywkVDIsJFQyCQkjIDIKKysJdnBhbmQJCSRNQVNLLCRUMCwkVDAJCSMgMAorKwl2cGFuZAkJJE1BU0ssJFQxLCRUMQkJIyAxCisrCXZwYW5kCQkkTUFTSywkVDMsJFQzCQkjIDMKKysJdnBvcgkJMzIoJXJjeCksJFQ0LCRUNAkjIHBhZGJpdCwgeWVzLCBhbHdheXMKKysKKysJdnBhZGRxCQkkSDIsJFQyLCRIMgkJIyBhY2N1bXVsYXRlIGlucHV0CisrCXN1YgkJXCQ2NCwkbGVuCisrCWp6CQkuTHRhaWxfYXZ4MgorKwlqbXAJCS5Mb29wX2F2eDIKKysKKysuYWxpZ24JMzIKKysuTG9vcF9hdngyOgorKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrCSMgKChpbnBbMF0qcl40K2lucFs0XSkqcl40K2lucFsgOF0pKnJeNAorKwkjICgoaW5wWzFdKnJeNCtpbnBbNV0pKnJeNCtpbnBbIDldKSpyXjMKKysJIyAoKGlucFsyXSpyXjQraW5wWzZdKSpyXjQraW5wWzEwXSkqcl4yCisrCSMgKChpbnBbM10qcl40K2lucFs3XSkqcl40K2lucFsxMV0pKnJeMQorKwkjICAgXF9fX19fX19fL1xfX19fX19fX19fLworKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrCSN2cGFkZHEJCSRIMiwkVDIsJEgyCQkjIGFjY3VtdWxhdGUgaW5wdXQKKysJdnBhZGRxCQkkSDAsJFQwLCRIMAorKwl2bW92ZHFhCQlgMzIqMGAoJXJzcCksJFQwCSMgcjBeNAorKwl2cGFkZHEJCSRIMSwkVDEsJEgxCisrCXZtb3ZkcWEJCWAzMioxYCglcnNwKSwkVDEJIyByMV40CisrCXZwYWRkcQkJJEgzLCRUMywkSDMKKysJdm1vdmRxYQkJYDMyKjNgKCVyc3ApLCRUMgkjIHIyXjQKKysJdnBhZGRxCQkkSDQsJFQ0LCRINAorKwl2bW92ZHFhCQlgMzIqNi0weDkwYCglcmF4KSwkVDMJIyBzM140CisrCXZtb3ZkcWEJCWAzMio4LTB4OTBgKCVyYXgpLCRTNAkjIHM0XjQKKysKKysJIyBkNCA9IGg0KnIwICsgaDMqcjEgICArIGgyKnIyICAgKyBoMSpyMyAgICsgaDAqcjQKKysJIyBkMyA9IGgzKnIwICsgaDIqcjEgICArIGgxKnIyICAgKyBoMCpyMyAgICsgaDQqNSpyNAorKwkjIGQyID0gaDIqcjAgKyBoMSpyMSAgICsgaDAqcjIgICArIGg0KjUqcjMgKyBoMyo1KnI0CisrCSMgZDEgPSBoMSpyMCArIGgwKnIxICAgKyBoNCo1KnIyICsgaDMqNSpyMyArIGgyKjUqcjQKKysJIyBkMCA9IGgwKnIwICsgaDQqNSpyMSArIGgzKjUqcjIgKyBoMio1KnIzICsgaDEqNSpyNAorKwkjCisrCSMgaG93ZXZlciwgYXMgaDIgaXMgImNocm9ub2xvZ2ljYWxseSIgZmlyc3Qgb25lIGF2YWlsYWJsZSBwdWxsCisrCSMgY29ycmVzcG9uZGluZyBvcGVyYXRpb25zIHVwLCBzbyBpdCdzCisrCSMKKysJIyBkNCA9IGgyKnIyICAgKyBoNCpyMCArIGgzKnIxICAgICAgICAgICAgICsgaDEqcjMgICArIGgwKnI0CisrCSMgZDMgPSBoMipyMSAgICsgaDMqcjAgICAgICAgICAgICsgaDEqcjIgICArIGgwKnIzICAgKyBoNCo1KnI0CisrCSMgZDIgPSBoMipyMCAgICAgICAgICAgKyBoMSpyMSAgICsgaDAqcjIgICArIGg0KjUqcjMgKyBoMyo1KnI0CisrCSMgZDEgPSBoMio1KnI0ICsgaDEqcjAgKyBoMCpyMSAgICsgaDQqNSpyMiArIGgzKjUqcjMKKysJIyBkMCA9IGgyKjUqcjMgKyBoMCpyMCArIGg0KjUqcjEgKyBoMyo1KnIyICAgICAgICAgICArIGgxKjUqcjQKKysKKysJdnBtdWx1ZHEJJEgyLCRUMCwkRDIJCSMgZDIgPSBoMipyMAorKwl2cG11bHVkcQkkSDIsJFQxLCREMwkJIyBkMyA9IGgyKnIxCisrCXZwbXVsdWRxCSRIMiwkVDIsJEQ0CQkjIGQ0ID0gaDIqcjIKKysJdnBtdWx1ZHEJJEgyLCRUMywkRDAJCSMgZDAgPSBoMipzMworKwl2cG11bHVkcQkkSDIsJFM0LCREMQkJIyBkMSA9IGgyKnM0CisrCisrCXZwbXVsdWRxCSRIMCwkVDEsJFQ0CQkjIGgwKnIxCisrCXZwbXVsdWRxCSRIMSwkVDEsJEgyCQkjIGgxKnIxLCBib3Jyb3cgJEgyIGFzIHRlbXAKKysJdnBhZGRxCQkkVDQsJEQxLCREMQkJIyBkMSArPSBoMCpyMQorKwl2cGFkZHEJCSRIMiwkRDIsJEQyCQkjIGQyICs9IGgxKnIxCisrCXZwbXVsdWRxCSRIMywkVDEsJFQ0CQkjIGgzKnIxCisrCXZwbXVsdWRxCWAzMioyYCglcnNwKSwkSDQsJEgyCSMgaDQqczEKKysJdnBhZGRxCQkkVDQsJEQ0LCRENAkJIyBkNCArPSBoMypyMQorKwl2cGFkZHEJCSRIMiwkRDAsJEQwCQkjIGQwICs9IGg0KnMxCisrCSB2bW92ZHFhCWAzMio0LTB4OTBgKCVyYXgpLCRUMQkjIHMyCisrCisrCXZwbXVsdWRxCSRIMCwkVDAsJFQ0CQkjIGgwKnIwCisrCXZwbXVsdWRxCSRIMSwkVDAsJEgyCQkjIGgxKnIwCisrCXZwYWRkcQkJJFQ0LCREMCwkRDAJCSMgZDAgKz0gaDAqcjAKKysJdnBhZGRxCQkkSDIsJEQxLCREMQkJIyBkMSArPSBoMSpyMAorKwl2cG11bHVkcQkkSDMsJFQwLCRUNAkJIyBoMypyMAorKwl2cG11bHVkcQkkSDQsJFQwLCRIMgkJIyBoNCpyMAorKwkgdm1vdmRxdQkxNiowKCRpbnApLCV4IyRUMAkjIGxvYWQgaW5wdXQKKysJdnBhZGRxCQkkVDQsJEQzLCREMwkJIyBkMyArPSBoMypyMAorKwl2cGFkZHEJCSRIMiwkRDQsJEQ0CQkjIGQ0ICs9IGg0KnIwCisrCSB2aW5zZXJ0aTEyOAlcJDEsMTYqMigkaW5wKSwkVDAsJFQwCisrCisrCXZwbXVsdWRxCSRIMywkVDEsJFQ0CQkjIGgzKnMyCisrCXZwbXVsdWRxCSRINCwkVDEsJEgyCQkjIGg0KnMyCisrCSB2bW92ZHF1CTE2KjEoJGlucCksJXgjJFQxCisrCXZwYWRkcQkJJFQ0LCREMCwkRDAJCSMgZDAgKz0gaDMqczIKKysJdnBhZGRxCQkkSDIsJEQxLCREMQkJIyBkMSArPSBoNCpzMgorKwkgdm1vdmRxYQlgMzIqNS0weDkwYCglcmF4KSwkSDIJIyByMworKwl2cG11bHVkcQkkSDEsJFQyLCRUNAkJIyBoMSpyMgorKwl2cG11bHVkcQkkSDAsJFQyLCRUMgkJIyBoMCpyMgorKwl2cGFkZHEJCSRUNCwkRDMsJEQzCQkjIGQzICs9IGgxKnIyCisrCXZwYWRkcQkJJFQyLCREMiwkRDIJCSMgZDIgKz0gaDAqcjIKKysJIHZpbnNlcnRpMTI4CVwkMSwxNiozKCRpbnApLCRUMSwkVDEKKysJIGxlYQkJMTYqNCgkaW5wKSwkaW5wCisrCisrCXZwbXVsdWRxCSRIMSwkSDIsJFQ0CQkjIGgxKnIzCisrCXZwbXVsdWRxCSRIMCwkSDIsJEgyCQkjIGgwKnIzCisrCSB2cHNybGRxCVwkNiwkVDAsJFQyCQkjIHNwbGF0IGlucHV0CisrCXZwYWRkcQkJJFQ0LCRENCwkRDQJCSMgZDQgKz0gaDEqcjMKKysJdnBhZGRxCQkkSDIsJEQzLCREMwkJIyBkMyArPSBoMCpyMworKwl2cG11bHVkcQkkSDMsJFQzLCRUNAkJIyBoMypzMworKwl2cG11bHVkcQkkSDQsJFQzLCRIMgkJIyBoNCpzMworKwkgdnBzcmxkcQlcJDYsJFQxLCRUMworKwl2cGFkZHEJCSRUNCwkRDEsJEQxCQkjIGQxICs9IGgzKnMzCisrCXZwYWRkcQkJJEgyLCREMiwkRDIJCSMgZDIgKz0gaDQqczMKKysJIHZwdW5wY2tocWRxCSRUMSwkVDAsJFQ0CQkjIDQKKysKKysJdnBtdWx1ZHEJJEgzLCRTNCwkSDMJCSMgaDMqczQKKysJdnBtdWx1ZHEJJEg0LCRTNCwkSDQJCSMgaDQqczQKKysJIHZwdW5wY2tscWRxCSRUMSwkVDAsJFQwCQkjIDA6MQorKwl2cGFkZHEJCSRIMywkRDIsJEgyCQkjIGgyID0gZDIgKyBoMypyNAorKwl2cGFkZHEJCSRINCwkRDMsJEgzCQkjIGgzID0gZDMgKyBoNCpyNAorKwkgdnB1bnBja2xxZHEJJFQzLCRUMiwkVDMJCSMgMjozCisrCXZwbXVsdWRxCWAzMio3LTB4OTBgKCVyYXgpLCRIMCwkSDQJIyBoMCpyNAorKwl2cG11bHVkcQkkSDEsJFM0LCRIMAkJIyBoMSpzNAorKwl2bW92ZHFhCQk2NCglcmN4KSwkTUFTSwkJIyAuTG1hc2syNgorKwl2cGFkZHEJCSRINCwkRDQsJEg0CQkjIGg0ID0gZDQgKyBoMCpyNAorKwl2cGFkZHEJCSRIMCwkRDAsJEgwCQkjIGgwID0gZDAgKyBoMSpzNAorKworKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrCSMgbGF6eSByZWR1Y3Rpb24gKGludGVybGVhdmVkIHdpdGggdGFpbCBvZiBpbnB1dCBzcGxhdCkKKysKKysJdnBzcmxxCQlcJDI2LCRIMywkRDMKKysJdnBhbmQJCSRNQVNLLCRIMywkSDMKKysJdnBhZGRxCQkkRDMsJEg0LCRINAkJIyBoMyAtPiBoNAorKworKwl2cHNybHEJCVwkMjYsJEgwLCREMAorKwl2cGFuZAkJJE1BU0ssJEgwLCRIMAorKwl2cGFkZHEJCSREMCwkRDEsJEgxCQkjIGgwIC0+IGgxCisrCisrCXZwc3JscQkJXCQyNiwkSDQsJEQ0CisrCXZwYW5kCQkkTUFTSywkSDQsJEg0CisrCisrCSB2cHNybHEJCVwkNCwkVDMsJFQyCisrCisrCXZwc3JscQkJXCQyNiwkSDEsJEQxCisrCXZwYW5kCQkkTUFTSywkSDEsJEgxCisrCXZwYWRkcQkJJEQxLCRIMiwkSDIJCSMgaDEgLT4gaDIKKysKKysJdnBhZGRxCQkkRDQsJEgwLCRIMAorKwl2cHNsbHEJCVwkMiwkRDQsJEQ0CisrCXZwYWRkcQkJJEQ0LCRIMCwkSDAJCSMgaDQgLT4gaDAKKysKKysJIHZwYW5kCQkkTUFTSywkVDIsJFQyCQkjIDIKKysJIHZwc3JscQkJXCQyNiwkVDAsJFQxCisrCisrCXZwc3JscQkJXCQyNiwkSDIsJEQyCisrCXZwYW5kCQkkTUFTSywkSDIsJEgyCisrCXZwYWRkcQkJJEQyLCRIMywkSDMJCSMgaDIgLT4gaDMKKysKKysJIHZwYWRkcQkJJFQyLCRIMiwkSDIJCSMgbW9kdWxvLXNjaGVkdWxlZAorKwkgdnBzcmxxCQlcJDMwLCRUMywkVDMKKysKKysJdnBzcmxxCQlcJDI2LCRIMCwkRDAKKysJdnBhbmQJCSRNQVNLLCRIMCwkSDAKKysJdnBhZGRxCQkkRDAsJEgxLCRIMQkJIyBoMCAtPiBoMQorKworKwkgdnBzcmxxCQlcJDQwLCRUNCwkVDQJCSMgNAorKworKwl2cHNybHEJCVwkMjYsJEgzLCREMworKwl2cGFuZAkJJE1BU0ssJEgzLCRIMworKwl2cGFkZHEJCSREMywkSDQsJEg0CQkjIGgzIC0+IGg0CisrCisrCSB2cGFuZAkJJE1BU0ssJFQwLCRUMAkJIyAwCisrCSB2cGFuZAkJJE1BU0ssJFQxLCRUMQkJIyAxCisrCSB2cGFuZAkJJE1BU0ssJFQzLCRUMwkJIyAzCisrCSB2cG9yCQkzMiglcmN4KSwkVDQsJFQ0CSMgcGFkYml0LCB5ZXMsIGFsd2F5cworKworKwlzdWIJCVwkNjQsJGxlbgorKwlqbnoJCS5Mb29wX2F2eDIKKysKKysJLmJ5dGUJCTB4NjYsMHg5MAorKy5MdGFpbF9hdngyOgorKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrCSMgd2hpbGUgYWJvdmUgbXVsdGlwbGljYXRpb25zIHdlcmUgYnkgcl40IGluIGFsbCBsYW5lcywgaW4gbGFzdAorKwkjIGl0ZXJhdGlvbiB3ZSBtdWx0aXBseSBsZWFzdCBzaWduaWZpY2FudCBsYW5lIGJ5IHJeNCBhbmQgbW9zdAorKwkjIHNpZ25pZmljYW50IG9uZSBieSByLCBzbyBjb3B5IG9mIGFib3ZlIGV4Y2VwdCB0aGF0IHJlZmVyZW5jZXMKKysJIyB0byB0aGUgcHJlY29tcHV0ZWQgdGFibGUgYXJlIGRpc3BsYWNlZCBieSA0Li4uCisrCisrCSN2cGFkZHEJCSRIMiwkVDIsJEgyCQkjIGFjY3VtdWxhdGUgaW5wdXQKKysJdnBhZGRxCQkkSDAsJFQwLCRIMAorKwl2bW92ZHF1CQlgMzIqMCs0YCglcnNwKSwkVDAJIyByMF40CisrCXZwYWRkcQkJJEgxLCRUMSwkSDEKKysJdm1vdmRxdQkJYDMyKjErNGAoJXJzcCksJFQxCSMgcjFeNAorKwl2cGFkZHEJCSRIMywkVDMsJEgzCisrCXZtb3ZkcXUJCWAzMiozKzRgKCVyc3ApLCRUMgkjIHIyXjQKKysJdnBhZGRxCQkkSDQsJFQ0LCRINAorKwl2bW92ZHF1CQlgMzIqNis0LTB4OTBgKCVyYXgpLCRUMwkjIHMzXjQKKysJdm1vdmRxdQkJYDMyKjgrNC0weDkwYCglcmF4KSwkUzQJIyBzNF40CisrCisrCXZwbXVsdWRxCSRIMiwkVDAsJEQyCQkjIGQyID0gaDIqcjAKKysJdnBtdWx1ZHEJJEgyLCRUMSwkRDMJCSMgZDMgPSBoMipyMQorKwl2cG11bHVkcQkkSDIsJFQyLCRENAkJIyBkNCA9IGgyKnIyCisrCXZwbXVsdWRxCSRIMiwkVDMsJEQwCQkjIGQwID0gaDIqczMKKysJdnBtdWx1ZHEJJEgyLCRTNCwkRDEJCSMgZDEgPSBoMipzNAorKworKwl2cG11bHVkcQkkSDAsJFQxLCRUNAkJIyBoMCpyMQorKwl2cG11bHVkcQkkSDEsJFQxLCRIMgkJIyBoMSpyMQorKwl2cGFkZHEJCSRUNCwkRDEsJEQxCQkjIGQxICs9IGgwKnIxCisrCXZwYWRkcQkJJEgyLCREMiwkRDIJCSMgZDIgKz0gaDEqcjEKKysJdnBtdWx1ZHEJJEgzLCRUMSwkVDQJCSMgaDMqcjEKKysJdnBtdWx1ZHEJYDMyKjIrNGAoJXJzcCksJEg0LCRIMgkjIGg0KnMxCisrCXZwYWRkcQkJJFQ0LCRENCwkRDQJCSMgZDQgKz0gaDMqcjEKKysJdnBhZGRxCQkkSDIsJEQwLCREMAkJIyBkMCArPSBoNCpzMQorKworKwl2cG11bHVkcQkkSDAsJFQwLCRUNAkJIyBoMCpyMAorKwl2cG11bHVkcQkkSDEsJFQwLCRIMgkJIyBoMSpyMAorKwl2cGFkZHEJCSRUNCwkRDAsJEQwCQkjIGQwICs9IGgwKnIwCisrCSB2bW92ZHF1CWAzMio0KzQtMHg5MGAoJXJheCksJFQxCSMgczIKKysJdnBhZGRxCQkkSDIsJEQxLCREMQkJIyBkMSArPSBoMSpyMAorKwl2cG11bHVkcQkkSDMsJFQwLCRUNAkJIyBoMypyMAorKwl2cG11bHVkcQkkSDQsJFQwLCRIMgkJIyBoNCpyMAorKwl2cGFkZHEJCSRUNCwkRDMsJEQzCQkjIGQzICs9IGgzKnIwCisrCXZwYWRkcQkJJEgyLCRENCwkRDQJCSMgZDQgKz0gaDQqcjAKKysKKysJdnBtdWx1ZHEJJEgzLCRUMSwkVDQJCSMgaDMqczIKKysJdnBtdWx1ZHEJJEg0LCRUMSwkSDIJCSMgaDQqczIKKysJdnBhZGRxCQkkVDQsJEQwLCREMAkJIyBkMCArPSBoMypzMgorKwl2cGFkZHEJCSRIMiwkRDEsJEQxCQkjIGQxICs9IGg0KnMyCisrCSB2bW92ZHF1CWAzMio1KzQtMHg5MGAoJXJheCksJEgyCSMgcjMKKysJdnBtdWx1ZHEJJEgxLCRUMiwkVDQJCSMgaDEqcjIKKysJdnBtdWx1ZHEJJEgwLCRUMiwkVDIJCSMgaDAqcjIKKysJdnBhZGRxCQkkVDQsJEQzLCREMwkJIyBkMyArPSBoMSpyMgorKwl2cGFkZHEJCSRUMiwkRDIsJEQyCQkjIGQyICs9IGgwKnIyCisrCisrCXZwbXVsdWRxCSRIMSwkSDIsJFQ0CQkjIGgxKnIzCisrCXZwbXVsdWRxCSRIMCwkSDIsJEgyCQkjIGgwKnIzCisrCXZwYWRkcQkJJFQ0LCRENCwkRDQJCSMgZDQgKz0gaDEqcjMKKysJdnBhZGRxCQkkSDIsJEQzLCREMwkJIyBkMyArPSBoMCpyMworKwl2cG11bHVkcQkkSDMsJFQzLCRUNAkJIyBoMypzMworKwl2cG11bHVkcQkkSDQsJFQzLCRIMgkJIyBoNCpzMworKwl2cGFkZHEJCSRUNCwkRDEsJEQxCQkjIGQxICs9IGgzKnMzCisrCXZwYWRkcQkJJEgyLCREMiwkRDIJCSMgZDIgKz0gaDQqczMKKysKKysJdnBtdWx1ZHEJJEgzLCRTNCwkSDMJCSMgaDMqczQKKysJdnBtdWx1ZHEJJEg0LCRTNCwkSDQJCSMgaDQqczQKKysJdnBhZGRxCQkkSDMsJEQyLCRIMgkJIyBoMiA9IGQyICsgaDMqcjQKKysJdnBhZGRxCQkkSDQsJEQzLCRIMwkJIyBoMyA9IGQzICsgaDQqcjQKKysJdnBtdWx1ZHEJYDMyKjcrNC0weDkwYCglcmF4KSwkSDAsJEg0CQkjIGgwKnI0CisrCXZwbXVsdWRxCSRIMSwkUzQsJEgwCQkjIGgxKnM0CisrCXZtb3ZkcWEJCTY0KCVyY3gpLCRNQVNLCQkjIC5MbWFzazI2CisrCXZwYWRkcQkJJEg0LCRENCwkSDQJCSMgaDQgPSBkNCArIGgwKnI0CisrCXZwYWRkcQkJJEgwLCREMCwkSDAJCSMgaDAgPSBkMCArIGgxKnM0CisrCisrCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysJIyBob3Jpem9udGFsIGFkZGl0aW9uCisrCisrCXZwc3JsZHEJCVwkOCwkRDEsJFQxCisrCXZwc3JsZHEJCVwkOCwkSDIsJFQyCisrCXZwc3JsZHEJCVwkOCwkSDMsJFQzCisrCXZwc3JsZHEJCVwkOCwkSDQsJFQ0CisrCXZwc3JsZHEJCVwkOCwkSDAsJFQwCisrCXZwYWRkcQkJJFQxLCREMSwkRDEKKysJdnBhZGRxCQkkVDIsJEgyLCRIMgorKwl2cGFkZHEJCSRUMywkSDMsJEgzCisrCXZwYWRkcQkJJFQ0LCRINCwkSDQKKysJdnBhZGRxCQkkVDAsJEgwLCRIMAorKworKwl2cGVybXEJCVwkMHgyLCRIMywkVDMKKysJdnBlcm1xCQlcJDB4MiwkSDQsJFQ0CisrCXZwZXJtcQkJXCQweDIsJEgwLCRUMAorKwl2cGVybXEJCVwkMHgyLCREMSwkVDEKKysJdnBlcm1xCQlcJDB4MiwkSDIsJFQyCisrCXZwYWRkcQkJJFQzLCRIMywkSDMKKysJdnBhZGRxCQkkVDQsJEg0LCRINAorKwl2cGFkZHEJCSRUMCwkSDAsJEgwCisrCXZwYWRkcQkJJFQxLCREMSwkRDEKKysJdnBhZGRxCQkkVDIsJEgyLCRIMgorKworKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrCSMgbGF6eSByZWR1Y3Rpb24KKysKKysJdnBzcmxxCQlcJDI2LCRIMywkRDMKKysJdnBhbmQJCSRNQVNLLCRIMywkSDMKKysJdnBhZGRxCQkkRDMsJEg0LCRINAkJIyBoMyAtPiBoNAorKworKwl2cHNybHEJCVwkMjYsJEgwLCREMAorKwl2cGFuZAkJJE1BU0ssJEgwLCRIMAorKwl2cGFkZHEJCSREMCwkRDEsJEgxCQkjIGgwIC0+IGgxCisrCisrCXZwc3JscQkJXCQyNiwkSDQsJEQ0CisrCXZwYW5kCQkkTUFTSywkSDQsJEg0CisrCisrCXZwc3JscQkJXCQyNiwkSDEsJEQxCisrCXZwYW5kCQkkTUFTSywkSDEsJEgxCisrCXZwYWRkcQkJJEQxLCRIMiwkSDIJCSMgaDEgLT4gaDIKKysKKysJdnBhZGRxCQkkRDQsJEgwLCRIMAorKwl2cHNsbHEJCVwkMiwkRDQsJEQ0CisrCXZwYWRkcQkJJEQ0LCRIMCwkSDAJCSMgaDQgLT4gaDAKKysKKysJdnBzcmxxCQlcJDI2LCRIMiwkRDIKKysJdnBhbmQJCSRNQVNLLCRIMiwkSDIKKysJdnBhZGRxCQkkRDIsJEgzLCRIMwkJIyBoMiAtPiBoMworKworKwl2cHNybHEJCVwkMjYsJEgwLCREMAorKwl2cGFuZAkJJE1BU0ssJEgwLCRIMAorKwl2cGFkZHEJCSREMCwkSDEsJEgxCQkjIGgwIC0+IGgxCisrCisrCXZwc3JscQkJXCQyNiwkSDMsJEQzCisrCXZwYW5kCQkkTUFTSywkSDMsJEgzCisrCXZwYWRkcQkJJEQzLCRINCwkSDQJCSMgaDMgLT4gaDQKKysKKysJdm1vdmQJCSV4IyRIMCxgNCowLTQ4LTY0YCgkY3R4KSMgc2F2ZSBwYXJ0aWFsbHkgcmVkdWNlZAorKwl2bW92ZAkJJXgjJEgxLGA0KjEtNDgtNjRgKCRjdHgpCisrCXZtb3ZkCQkleCMkSDIsYDQqMi00OC02NGAoJGN0eCkKKysJdm1vdmQJCSV4IyRIMyxgNCozLTQ4LTY0YCgkY3R4KQorKwl2bW92ZAkJJXgjJEg0LGA0KjQtNDgtNjRgKCRjdHgpCisrX19fCisrJGNvZGUuPTw8X19fCWlmICgkd2luNjQpOworKwl2bW92ZHFhCQkweDUwKCVyMTEpLCV4bW02CisrCXZtb3ZkcWEJCTB4NjAoJXIxMSksJXhtbTcKKysJdm1vdmRxYQkJMHg3MCglcjExKSwleG1tOAorKwl2bW92ZHFhCQkweDgwKCVyMTEpLCV4bW05CisrCXZtb3ZkcWEJCTB4OTAoJXIxMSksJXhtbTEwCisrCXZtb3ZkcWEJCTB4YTAoJXIxMSksJXhtbTExCisrCXZtb3ZkcWEJCTB4YjAoJXIxMSksJXhtbTEyCisrCXZtb3ZkcWEJCTB4YzAoJXIxMSksJXhtbTEzCisrCXZtb3ZkcWEJCTB4ZDAoJXIxMSksJXhtbTE0CisrCXZtb3ZkcWEJCTB4ZTAoJXIxMSksJXhtbTE1CisrCWxlYQkJMHhmOCglcjExKSwlcnNwCisrLkxkb19hdngyX2VwaWxvZ3VlOgorK19fXworKyRjb2RlLj08PF9fXwlpZiAoISR3aW42NCk7CisrCWxlYQkJOCglcjExKSwlcnNwCisrLmNmaV9kZWZfY2ZhCQklcnNwLDgKKytfX18KKyskY29kZS49PDxfX187CisrCXZ6ZXJvdXBwZXIKKysJcmV0CisrLmNmaV9lbmRwcm9jCisrLnNpemUJcG9seTEzMDVfYmxvY2tzX2F2eDIsLi1wb2x5MTMwNV9ibG9ja3NfYXZ4MgorK19fXworKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisraWYgKCRhdng+MikgeworKyMgT24gZW50cnkgd2UgaGF2ZSBpbnB1dCBsZW5ndGggZGl2aXNpYmxlIGJ5IDY0LiBCdXQgc2luY2UgaW5uZXIgbG9vcAorKyMgcHJvY2Vzc2VzIDEyOCBieXRlcyBwZXIgaXRlcmF0aW9uLCBjYXNlcyB3aGVuIGxlbmd0aCBpcyBub3QgZGl2aXNpYmxlCisrIyBieSAxMjggYXJlIGhhbmRsZWQgYnkgcGFzc2luZyB0YWlsIDY0IGJ5dGVzIHRvIC5MdGFpbF9hdngyLiBGb3IgdGhpcworKyMgcmVhc29uIHN0YWNrIGxheW91dCBpcyBrZXB0IGlkZW50aWNhbCB0byBwb2x5MTMwNV9ibG9ja3NfYXZ4Mi4gSWYgbm90CisrIyBmb3IgdGhpcyB0YWlsLCB3ZSB3b3VsZG4ndCBoYXZlIHRvIGV2ZW4gYWxsb2NhdGUgc3RhY2sgZnJhbWUuLi4KKysKKytteSAoJFIwLCRSMSwkUjIsJFIzLCRSNCwgJFMxLCRTMiwkUzMsJFM0KSA9IG1hcCgiJXptbSRfIiwoMTYuLjI0KSk7CisrbXkgKCRNMCwkTTEsJE0yLCRNMywkTTQpID0gbWFwKCIlem1tJF8iLCgyNS4uMjkpKTsKKytteSAkUEFEQklUPSIlem1tMzAiOworKworK21hcChzLyV5LyV6LywoJFQ0LCRUMCwkVDEsJFQyLCRUMykpOwkJIyBzd2l0Y2ggdG8gJXptbSBkb21haW4KKyttYXAocy8leS8lei8sKCREMCwkRDEsJEQyLCREMywkRDQpKTsKKyttYXAocy8leS8lei8sKCRIMCwkSDEsJEgyLCRIMywkSDQpKTsKKyttYXAocy8leS8lei8sKCRNQVNLKSk7CisrCisrJGNvZGUuPTw8X19fOworKy50eXBlCXBvbHkxMzA1X2Jsb2Nrc19hdng1MTIsXEBmdW5jdGlvbiw0CisrLmFsaWduCTMyCisrcG9seTEzMDVfYmxvY2tzX2F2eDUxMjoKKysuY2ZpX3N0YXJ0cHJvYworKy5MYmxvY2tzX2F2eDUxMjoKKysJbW92CQlcJDE1LCVlYXgKKysJa21vdncJCSVlYXgsJWsyCisrX19fCisrJGNvZGUuPTw8X19fCWlmICghJHdpbjY0KTsKKysJbGVhCQktOCglcnNwKSwlcjExCisrLmNmaV9kZWZfY2ZhCQklcjExLDE2CisrCXN1YgkJXCQweDEyOCwlcnNwCisrX19fCisrJGNvZGUuPTw8X19fCWlmICgkd2luNjQpOworKwlsZWEJCS0weGY4KCVyc3ApLCVyMTEKKysJc3ViCQlcJDB4MWM4LCVyc3AKKysJdm1vdmRxYQkJJXhtbTYsMHg1MCglcjExKQorKwl2bW92ZHFhCQkleG1tNywweDYwKCVyMTEpCisrCXZtb3ZkcWEJCSV4bW04LDB4NzAoJXIxMSkKKysJdm1vdmRxYQkJJXhtbTksMHg4MCglcjExKQorKwl2bW92ZHFhCQkleG1tMTAsMHg5MCglcjExKQorKwl2bW92ZHFhCQkleG1tMTEsMHhhMCglcjExKQorKwl2bW92ZHFhCQkleG1tMTIsMHhiMCglcjExKQorKwl2bW92ZHFhCQkleG1tMTMsMHhjMCglcjExKQorKwl2bW92ZHFhCQkleG1tMTQsMHhkMCglcjExKQorKwl2bW92ZHFhCQkleG1tMTUsMHhlMCglcjExKQorKy5MZG9fYXZ4NTEyX2JvZHk6CisrX19fCisrJGNvZGUuPTw8X19fOworKwlsZWEJCS5MY29uc3QoJXJpcCksJXJjeAorKwlsZWEJCTQ4KzY0KCRjdHgpLCRjdHgJIyBzaXplIG9wdGltaXphdGlvbgorKwl2bW92ZHFhCQk5NiglcmN4KSwleSMkVDIJCSMgLkxwZXJtZF9hdngyCisrCisrCSMgZXhwYW5kIHByZS1jYWxjdWxhdGVkIHRhYmxlCisrCXZtb3ZkcXUJCWAxNiowLTY0YCgkY3R4KSwleCMkRDAJIyB3aWxsIGJlY29tZSBleHBhbmRlZCAke1IwfQorKwlhbmQJCVwkLTUxMiwlcnNwCisrCXZtb3ZkcXUJCWAxNioxLTY0YCgkY3R4KSwleCMkRDEJIyB3aWxsIGJlY29tZSAuLi4gJHtSMX0KKysJbW92CQlcJDB4MjAsJXJheAorKwl2bW92ZHF1CQlgMTYqMi02NGAoJGN0eCksJXgjJFQwCSMgLi4uICR7UzF9CisrCXZtb3ZkcXUJCWAxNiozLTY0YCgkY3R4KSwleCMkRDIJIyAuLi4gJHtSMn0KKysJdm1vdmRxdQkJYDE2KjQtNjRgKCRjdHgpLCV4IyRUMQkjIC4uLiAke1MyfQorKwl2bW92ZHF1CQlgMTYqNS02NGAoJGN0eCksJXgjJEQzCSMgLi4uICR7UjN9CisrCXZtb3ZkcXUJCWAxNio2LTY0YCgkY3R4KSwleCMkVDMJIyAuLi4gJHtTM30KKysJdm1vdmRxdQkJYDE2KjctNjRgKCRjdHgpLCV4IyRENAkjIC4uLiAke1I0fQorKwl2bW92ZHF1CQlgMTYqOC02NGAoJGN0eCksJXgjJFQ0CSMgLi4uICR7UzR9CisrCXZwZXJtZAkJJEQwLCRUMiwkUjAJCSMgMDAwMDM0MTIgLT4gMTQyNDM0NDQKKysJdnBicm9hZGNhc3RxCTY0KCVyY3gpLCRNQVNLCQkjIC5MbWFzazI2CisrCXZwZXJtZAkJJEQxLCRUMiwkUjEKKysJdnBlcm1kCQkkVDAsJFQyLCRTMQorKwl2cGVybWQJCSREMiwkVDIsJFIyCisrCXZtb3ZkcWE2NAkkUjAsMHgwMCglcnNwKXslazJ9CSMgc2F2ZSBpbiBjYXNlICRsZW4lMTI4ICE9IDAKKysJIHZwc3JscQkJXCQzMiwkUjAsJFQwCQkjIDE0MjQzNDQ0IC0+IDAxMDIwMzA0CisrCXZwZXJtZAkJJFQxLCRUMiwkUzIKKysJdm1vdmRxdTY0CSRSMSwweDAwKCVyc3AsJXJheCl7JWsyfQorKwkgdnBzcmxxCQlcJDMyLCRSMSwkVDEKKysJdnBlcm1kCQkkRDMsJFQyLCRSMworKwl2bW92ZHFhNjQJJFMxLDB4NDAoJXJzcCl7JWsyfQorKwl2cGVybWQJCSRUMywkVDIsJFMzCisrCXZwZXJtZAkJJEQ0LCRUMiwkUjQKKysJdm1vdmRxdTY0CSRSMiwweDQwKCVyc3AsJXJheCl7JWsyfQorKwl2cGVybWQJCSRUNCwkVDIsJFM0CisrCXZtb3ZkcWE2NAkkUzIsMHg4MCglcnNwKXslazJ9CisrCXZtb3ZkcXU2NAkkUjMsMHg4MCglcnNwLCVyYXgpeyVrMn0KKysJdm1vdmRxYTY0CSRTMywweGMwKCVyc3ApeyVrMn0KKysJdm1vdmRxdTY0CSRSNCwweGMwKCVyc3AsJXJheCl7JWsyfQorKwl2bW92ZHFhNjQJJFM0LDB4MTAwKCVyc3ApeyVrMn0KKysKKysJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKwkjIGNhbGN1bGF0ZSA1dGggdGhyb3VnaCA4dGggcG93ZXJzIG9mIHRoZSBrZXkKKysJIworKwkjIGQwID0gcjAnKnIwICsgcjEnKjUqcjQgKyByMicqNSpyMyArIHIzJyo1KnIyICsgcjQnKjUqcjEKKysJIyBkMSA9IHIwJypyMSArIHIxJypyMCAgICsgcjInKjUqcjQgKyByMycqNSpyMyArIHI0Jyo1KnIyCisrCSMgZDIgPSByMCcqcjIgKyByMScqcjEgICArIHIyJypyMCAgICsgcjMnKjUqcjQgKyByNCcqNSpyMworKwkjIGQzID0gcjAnKnIzICsgcjEnKnIyICAgKyByMicqcjEgICArIHIzJypyMCAgICsgcjQnKjUqcjQKKysJIyBkNCA9IHIwJypyNCArIHIxJypyMyAgICsgcjInKnIyICAgKyByMycqcjEgICArIHI0JypyMAorKworKwl2cG11bHVkcQkkVDAsJFIwLCREMAkJIyBkMCA9IHIwJypyMAorKwl2cG11bHVkcQkkVDAsJFIxLCREMQkJIyBkMSA9IHIwJypyMQorKwl2cG11bHVkcQkkVDAsJFIyLCREMgkJIyBkMiA9IHIwJypyMgorKwl2cG11bHVkcQkkVDAsJFIzLCREMwkJIyBkMyA9IHIwJypyMworKwl2cG11bHVkcQkkVDAsJFI0LCRENAkJIyBkNCA9IHIwJypyNAorKwkgdnBzcmxxCQlcJDMyLCRSMiwkVDIKKysKKysJdnBtdWx1ZHEJJFQxLCRTNCwkTTAKKysJdnBtdWx1ZHEJJFQxLCRSMCwkTTEKKysJdnBtdWx1ZHEJJFQxLCRSMSwkTTIKKysJdnBtdWx1ZHEJJFQxLCRSMiwkTTMKKysJdnBtdWx1ZHEJJFQxLCRSMywkTTQKKysJIHZwc3JscQkJXCQzMiwkUjMsJFQzCisrCXZwYWRkcQkJJE0wLCREMCwkRDAJCSMgZDAgKz0gcjEnKjUqcjQKKysJdnBhZGRxCQkkTTEsJEQxLCREMQkJIyBkMSArPSByMScqcjAKKysJdnBhZGRxCQkkTTIsJEQyLCREMgkJIyBkMiArPSByMScqcjEKKysJdnBhZGRxCQkkTTMsJEQzLCREMwkJIyBkMyArPSByMScqcjIKKysJdnBhZGRxCQkkTTQsJEQ0LCRENAkJIyBkNCArPSByMScqcjMKKysKKysJdnBtdWx1ZHEJJFQyLCRTMywkTTAKKysJdnBtdWx1ZHEJJFQyLCRTNCwkTTEKKysJdnBtdWx1ZHEJJFQyLCRSMSwkTTMKKysJdnBtdWx1ZHEJJFQyLCRSMiwkTTQKKysJdnBtdWx1ZHEJJFQyLCRSMCwkTTIKKysJIHZwc3JscQkJXCQzMiwkUjQsJFQ0CisrCXZwYWRkcQkJJE0wLCREMCwkRDAJCSMgZDAgKz0gcjInKjUqcjMKKysJdnBhZGRxCQkkTTEsJEQxLCREMQkJIyBkMSArPSByMicqNSpyNAorKwl2cGFkZHEJCSRNMywkRDMsJEQzCQkjIGQzICs9IHIyJypyMQorKwl2cGFkZHEJCSRNNCwkRDQsJEQ0CQkjIGQ0ICs9IHIyJypyMgorKwl2cGFkZHEJCSRNMiwkRDIsJEQyCQkjIGQyICs9IHIyJypyMAorKworKwl2cG11bHVkcQkkVDMsJFMyLCRNMAorKwl2cG11bHVkcQkkVDMsJFIwLCRNMworKwl2cG11bHVkcQkkVDMsJFIxLCRNNAorKwl2cG11bHVkcQkkVDMsJFMzLCRNMQorKwl2cG11bHVkcQkkVDMsJFM0LCRNMgorKwl2cGFkZHEJCSRNMCwkRDAsJEQwCQkjIGQwICs9IHIzJyo1KnIyCisrCXZwYWRkcQkJJE0zLCREMywkRDMJCSMgZDMgKz0gcjMnKnIwCisrCXZwYWRkcQkJJE00LCRENCwkRDQJCSMgZDQgKz0gcjMnKnIxCisrCXZwYWRkcQkJJE0xLCREMSwkRDEJCSMgZDEgKz0gcjMnKjUqcjMKKysJdnBhZGRxCQkkTTIsJEQyLCREMgkJIyBkMiArPSByMycqNSpyNAorKworKwl2cG11bHVkcQkkVDQsJFM0LCRNMworKwl2cG11bHVkcQkkVDQsJFIwLCRNNAorKwl2cG11bHVkcQkkVDQsJFMxLCRNMAorKwl2cG11bHVkcQkkVDQsJFMyLCRNMQorKwl2cG11bHVkcQkkVDQsJFMzLCRNMgorKwl2cGFkZHEJCSRNMywkRDMsJEQzCQkjIGQzICs9IHIyJyo1KnI0CisrCXZwYWRkcQkJJE00LCRENCwkRDQJCSMgZDQgKz0gcjInKnIwCisrCXZwYWRkcQkJJE0wLCREMCwkRDAJCSMgZDAgKz0gcjInKjUqcjEKKysJdnBhZGRxCQkkTTEsJEQxLCREMQkJIyBkMSArPSByMicqNSpyMgorKwl2cGFkZHEJCSRNMiwkRDIsJEQyCQkjIGQyICs9IHIyJyo1KnIzCisrCisrCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysJIyBsb2FkIGlucHV0CisrCXZtb3ZkcXU2NAkxNiowKCRpbnApLCV6IyRUMworKwl2bW92ZHF1NjQJMTYqNCgkaW5wKSwleiMkVDQKKysJbGVhCQkxNio4KCRpbnApLCRpbnAKKysKKysJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKwkjIGxhenkgcmVkdWN0aW9uCisrCisrCXZwc3JscQkJXCQyNiwkRDMsJE0zCisrCXZwYW5kcQkJJE1BU0ssJEQzLCREMworKwl2cGFkZHEJCSRNMywkRDQsJEQ0CQkjIGQzIC0+IGQ0CisrCisrCXZwc3JscQkJXCQyNiwkRDAsJE0wCisrCXZwYW5kcQkJJE1BU0ssJEQwLCREMAorKwl2cGFkZHEJCSRNMCwkRDEsJEQxCQkjIGQwIC0+IGQxCisrCisrCXZwc3JscQkJXCQyNiwkRDQsJE00CisrCXZwYW5kcQkJJE1BU0ssJEQ0LCRENAorKworKwl2cHNybHEJCVwkMjYsJEQxLCRNMQorKwl2cGFuZHEJCSRNQVNLLCREMSwkRDEKKysJdnBhZGRxCQkkTTEsJEQyLCREMgkJIyBkMSAtPiBkMgorKworKwl2cGFkZHEJCSRNNCwkRDAsJEQwCisrCXZwc2xscQkJXCQyLCRNNCwkTTQKKysJdnBhZGRxCQkkTTQsJEQwLCREMAkJIyBkNCAtPiBkMAorKworKwl2cHNybHEJCVwkMjYsJEQyLCRNMgorKwl2cGFuZHEJCSRNQVNLLCREMiwkRDIKKysJdnBhZGRxCQkkTTIsJEQzLCREMwkJIyBkMiAtPiBkMworKworKwl2cHNybHEJCVwkMjYsJEQwLCRNMAorKwl2cGFuZHEJCSRNQVNLLCREMCwkRDAKKysJdnBhZGRxCQkkTTAsJEQxLCREMQkJIyBkMCAtPiBkMQorKworKwl2cHNybHEJCVwkMjYsJEQzLCRNMworKwl2cGFuZHEJCSRNQVNLLCREMywkRDMKKysJdnBhZGRxCQkkTTMsJEQ0LCRENAkJIyBkMyAtPiBkNAorKworKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrCSMgYXQgdGhpcyBwb2ludCB3ZSBoYXZlIDE0MjQzNDQ0IGluICRSMC0kUzQgYW5kIDA1MDYwNzA4IGluCisrCSMgJEQwLSRENCwgLi4uCisrCisrCXZwdW5wY2tscWRxCSRUNCwkVDMsJFQwCSMgdHJhbnNwb3NlIGlucHV0CisrCXZwdW5wY2tocWRxCSRUNCwkVDMsJFQ0CisrCisrCSMgLi4uIHNpbmNlIGlucHV0IDY0LWJpdCBsYW5lcyBhcmUgb3JkZXJlZCBhcyA3MzYyNTE0MCwgd2UgY291bGQKKysJIyAidnBlcm0iIGl0IHRvIDc2NTQzMjEwIChoZXJlIGFuZCBpbiBlYWNoIGxvb3AgaXRlcmF0aW9uKSwgKm9yKgorKwkjIHdlIGNvdWxkIGp1c3QgZmxvdyBhbG9uZywgaGVuY2UgdGhlIGdvYWwgZm9yICRSMC0kUzQgaXMKKysJIyAxODU4Mjg2ODM4Nzg0ODg4IC4uLgorKworKwl2bW92ZHFhMzIJMTI4KCVyY3gpLCRNMAkJIyAuTHBlcm1kX2F2eDUxMjoKKysJbW92CQlcJDB4Nzc3NywlZWF4CisrCWttb3Z3CQklZWF4LCVrMQorKworKwl2cGVybWQJCSRSMCwkTTAsJFIwCQkjIDE0MjQzNDQ0IC0+IDEtLS0yLS0tMy0tLTQtLS0KKysJdnBlcm1kCQkkUjEsJE0wLCRSMQorKwl2cGVybWQJCSRSMiwkTTAsJFIyCisrCXZwZXJtZAkJJFIzLCRNMCwkUjMKKysJdnBlcm1kCQkkUjQsJE0wLCRSNAorKworKwl2cGVybWQJCSREMCwkTTAsJHtSMH17JWsxfQkjIDA1MDYwNzA4IC0+IDE4NTgyODY4Mzg3ODQ4ODgKKysJdnBlcm1kCQkkRDEsJE0wLCR7UjF9eyVrMX0KKysJdnBlcm1kCQkkRDIsJE0wLCR7UjJ9eyVrMX0KKysJdnBlcm1kCQkkRDMsJE0wLCR7UjN9eyVrMX0KKysJdnBlcm1kCQkkRDQsJE0wLCR7UjR9eyVrMX0KKysKKysJdnBzbGxkCQlcJDIsJFIxLCRTMQkJIyAqNQorKwl2cHNsbGQJCVwkMiwkUjIsJFMyCisrCXZwc2xsZAkJXCQyLCRSMywkUzMKKysJdnBzbGxkCQlcJDIsJFI0LCRTNAorKwl2cGFkZGQJCSRSMSwkUzEsJFMxCisrCXZwYWRkZAkJJFIyLCRTMiwkUzIKKysJdnBhZGRkCQkkUjMsJFMzLCRTMworKwl2cGFkZGQJCSRSNCwkUzQsJFM0CisrCisrCXZwYnJvYWRjYXN0cQkzMiglcmN4KSwkUEFEQklUCSMgLkwxMjkKKysKKysJdnBzcmxxCQlcJDUyLCRUMCwkVDIJCSMgc3BsYXQgaW5wdXQKKysJdnBzbGxxCQlcJDEyLCRUNCwkVDMKKysJdnBvcnEJCSRUMywkVDIsJFQyCisrCXZwc3JscQkJXCQyNiwkVDAsJFQxCisrCXZwc3JscQkJXCQxNCwkVDQsJFQzCisrCXZwc3JscQkJXCQ0MCwkVDQsJFQ0CQkjIDQKKysJdnBhbmRxCQkkTUFTSywkVDIsJFQyCQkjIDIKKysJdnBhbmRxCQkkTUFTSywkVDAsJFQwCQkjIDAKKysJI3ZwYW5kcQkJJE1BU0ssJFQxLCRUMQkJIyAxCisrCSN2cGFuZHEJCSRNQVNLLCRUMywkVDMJCSMgMworKwkjdnBvcnEJCSRQQURCSVQsJFQ0LCRUNAkJIyBwYWRiaXQsIHllcywgYWx3YXlzCisrCisrCXZwYWRkcQkJJEgyLCRUMiwkSDIJCSMgYWNjdW11bGF0ZSBpbnB1dAorKwlzdWIJCVwkMTkyLCRsZW4KKysJamJlCQkuTHRhaWxfYXZ4NTEyCisrCWptcAkJLkxvb3BfYXZ4NTEyCisrCisrLmFsaWduCTMyCisrLkxvb3BfYXZ4NTEyOgorKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrCSMgKChpbnBbMF0qcl44K2lucFsgOF0pKnJeOCtpbnBbMTZdKSpyXjgKKysJIyAoKGlucFsxXSpyXjgraW5wWyA5XSkqcl44K2lucFsxN10pKnJeNworKwkjICgoaW5wWzJdKnJeOCtpbnBbMTBdKSpyXjgraW5wWzE4XSkqcl42CisrCSMgKChpbnBbM10qcl44K2lucFsxMV0pKnJeOCtpbnBbMTldKSpyXjUKKysJIyAoKGlucFs0XSpyXjgraW5wWzEyXSkqcl44K2lucFsyMF0pKnJeNAorKwkjICgoaW5wWzVdKnJeOCtpbnBbMTNdKSpyXjgraW5wWzIxXSkqcl4zCisrCSMgKChpbnBbNl0qcl44K2lucFsxNF0pKnJeOCtpbnBbMjJdKSpyXjIKKysJIyAoKGlucFs3XSpyXjgraW5wWzE1XSkqcl44K2lucFsyM10pKnJeMQorKwkjICAgXF9fX19fX19fL1xfX19fX19fX19fXy8KKysJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKwkjdnBhZGRxCQkkSDIsJFQyLCRIMgkJIyBhY2N1bXVsYXRlIGlucHV0CisrCisrCSMgZDQgPSBoNCpyMCArIGgzKnIxICAgKyBoMipyMiAgICsgaDEqcjMgICArIGgwKnI0CisrCSMgZDMgPSBoMypyMCArIGgyKnIxICAgKyBoMSpyMiAgICsgaDAqcjMgICArIGg0KjUqcjQKKysJIyBkMiA9IGgyKnIwICsgaDEqcjEgICArIGgwKnIyICAgKyBoNCo1KnIzICsgaDMqNSpyNAorKwkjIGQxID0gaDEqcjAgKyBoMCpyMSAgICsgaDQqNSpyMiArIGgzKjUqcjMgKyBoMio1KnI0CisrCSMgZDAgPSBoMCpyMCArIGg0KjUqcjEgKyBoMyo1KnIyICsgaDIqNSpyMyArIGgxKjUqcjQKKysJIworKwkjIGhvd2V2ZXIsIGFzIGgyIGlzICJjaHJvbm9sb2dpY2FsbHkiIGZpcnN0IG9uZSBhdmFpbGFibGUgcHVsbAorKwkjIGNvcnJlc3BvbmRpbmcgb3BlcmF0aW9ucyB1cCwgc28gaXQncworKwkjCisrCSMgZDMgPSBoMipyMSAgICsgaDAqcjMgKyBoMSpyMiAgICsgaDMqcjAgKyBoNCo1KnI0CisrCSMgZDQgPSBoMipyMiAgICsgaDAqcjQgKyBoMSpyMyAgICsgaDMqcjEgKyBoNCpyMAorKwkjIGQwID0gaDIqNSpyMyArIGgwKnIwICsgaDEqNSpyNCAgICAgICAgICsgaDMqNSpyMiArIGg0KjUqcjEKKysJIyBkMSA9IGgyKjUqcjQgKyBoMCpyMSAgICAgICAgICAgKyBoMSpyMCArIGgzKjUqcjMgKyBoNCo1KnIyCisrCSMgZDIgPSBoMipyMCAgICAgICAgICAgKyBoMCpyMiAgICsgaDEqcjEgKyBoMyo1KnI0ICsgaDQqNSpyMworKworKwl2cG11bHVkcQkkSDIsJFIxLCREMwkJIyBkMyA9IGgyKnIxCisrCSB2cGFkZHEJCSRIMCwkVDAsJEgwCisrCXZwbXVsdWRxCSRIMiwkUjIsJEQ0CQkjIGQ0ID0gaDIqcjIKKysJIHZwYW5kcQkJJE1BU0ssJFQxLCRUMQkJIyAxCisrCXZwbXVsdWRxCSRIMiwkUzMsJEQwCQkjIGQwID0gaDIqczMKKysJIHZwYW5kcQkJJE1BU0ssJFQzLCRUMwkJIyAzCisrCXZwbXVsdWRxCSRIMiwkUzQsJEQxCQkjIGQxID0gaDIqczQKKysJIHZwb3JxCQkkUEFEQklULCRUNCwkVDQJCSMgcGFkYml0LCB5ZXMsIGFsd2F5cworKwl2cG11bHVkcQkkSDIsJFIwLCREMgkJIyBkMiA9IGgyKnIwCisrCSB2cGFkZHEJCSRIMSwkVDEsJEgxCQkjIGFjY3VtdWxhdGUgaW5wdXQKKysJIHZwYWRkcQkJJEgzLCRUMywkSDMKKysJIHZwYWRkcQkJJEg0LCRUNCwkSDQKKysKKysJICB2bW92ZHF1NjQJMTYqMCgkaW5wKSwkVDMJCSMgbG9hZCBpbnB1dAorKwkgIHZtb3ZkcXU2NAkxNio0KCRpbnApLCRUNAorKwkgIGxlYQkJMTYqOCgkaW5wKSwkaW5wCisrCXZwbXVsdWRxCSRIMCwkUjMsJE0zCisrCXZwbXVsdWRxCSRIMCwkUjQsJE00CisrCXZwbXVsdWRxCSRIMCwkUjAsJE0wCisrCXZwbXVsdWRxCSRIMCwkUjEsJE0xCisrCXZwYWRkcQkJJE0zLCREMywkRDMJCSMgZDMgKz0gaDAqcjMKKysJdnBhZGRxCQkkTTQsJEQ0LCRENAkJIyBkNCArPSBoMCpyNAorKwl2cGFkZHEJCSRNMCwkRDAsJEQwCQkjIGQwICs9IGgwKnIwCisrCXZwYWRkcQkJJE0xLCREMSwkRDEJCSMgZDEgKz0gaDAqcjEKKysKKysJdnBtdWx1ZHEJJEgxLCRSMiwkTTMKKysJdnBtdWx1ZHEJJEgxLCRSMywkTTQKKysJdnBtdWx1ZHEJJEgxLCRTNCwkTTAKKysJdnBtdWx1ZHEJJEgwLCRSMiwkTTIKKysJdnBhZGRxCQkkTTMsJEQzLCREMwkJIyBkMyArPSBoMSpyMgorKwl2cGFkZHEJCSRNNCwkRDQsJEQ0CQkjIGQ0ICs9IGgxKnIzCisrCXZwYWRkcQkJJE0wLCREMCwkRDAJCSMgZDAgKz0gaDEqczQKKysJdnBhZGRxCQkkTTIsJEQyLCREMgkJIyBkMiArPSBoMCpyMgorKworKwkgIHZwdW5wY2tscWRxCSRUNCwkVDMsJFQwCQkjIHRyYW5zcG9zZSBpbnB1dAorKwkgIHZwdW5wY2tocWRxCSRUNCwkVDMsJFQ0CisrCisrCXZwbXVsdWRxCSRIMywkUjAsJE0zCisrCXZwbXVsdWRxCSRIMywkUjEsJE00CisrCXZwbXVsdWRxCSRIMSwkUjAsJE0xCisrCXZwbXVsdWRxCSRIMSwkUjEsJE0yCisrCXZwYWRkcQkJJE0zLCREMywkRDMJCSMgZDMgKz0gaDMqcjAKKysJdnBhZGRxCQkkTTQsJEQ0LCRENAkJIyBkNCArPSBoMypyMQorKwl2cGFkZHEJCSRNMSwkRDEsJEQxCQkjIGQxICs9IGgxKnIwCisrCXZwYWRkcQkJJE0yLCREMiwkRDIJCSMgZDIgKz0gaDEqcjEKKysKKysJdnBtdWx1ZHEJJEg0LCRTNCwkTTMKKysJdnBtdWx1ZHEJJEg0LCRSMCwkTTQKKysJdnBtdWx1ZHEJJEgzLCRTMiwkTTAKKysJdnBtdWx1ZHEJJEgzLCRTMywkTTEKKysJdnBhZGRxCQkkTTMsJEQzLCREMwkJIyBkMyArPSBoNCpzNAorKwl2cG11bHVkcQkkSDMsJFM0LCRNMgorKwl2cGFkZHEJCSRNNCwkRDQsJEQ0CQkjIGQ0ICs9IGg0KnIwCisrCXZwYWRkcQkJJE0wLCREMCwkRDAJCSMgZDAgKz0gaDMqczIKKysJdnBhZGRxCQkkTTEsJEQxLCREMQkJIyBkMSArPSBoMypzMworKwl2cGFkZHEJCSRNMiwkRDIsJEQyCQkjIGQyICs9IGgzKnM0CisrCisrCXZwbXVsdWRxCSRINCwkUzEsJE0wCisrCXZwbXVsdWRxCSRINCwkUzIsJE0xCisrCXZwbXVsdWRxCSRINCwkUzMsJE0yCisrCXZwYWRkcQkJJE0wLCREMCwkSDAJCSMgaDAgPSBkMCArIGg0KnMxCisrCXZwYWRkcQkJJE0xLCREMSwkSDEJCSMgaDEgPSBkMiArIGg0KnMyCisrCXZwYWRkcQkJJE0yLCREMiwkSDIJCSMgaDIgPSBkMyArIGg0KnMzCisrCisrCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysJIyBsYXp5IHJlZHVjdGlvbiAoaW50ZXJsZWF2ZWQgd2l0aCBpbnB1dCBzcGxhdCkKKysKKysJIHZwc3JscQkJXCQ1MiwkVDAsJFQyCQkjIHNwbGF0IGlucHV0CisrCSB2cHNsbHEJCVwkMTIsJFQ0LCRUMworKworKwl2cHNybHEJCVwkMjYsJEQzLCRIMworKwl2cGFuZHEJCSRNQVNLLCREMywkRDMKKysJdnBhZGRxCQkkSDMsJEQ0LCRINAkJIyBoMyAtPiBoNAorKworKwkgdnBvcnEJCSRUMywkVDIsJFQyCisrCisrCXZwc3JscQkJXCQyNiwkSDAsJEQwCisrCXZwYW5kcQkJJE1BU0ssJEgwLCRIMAorKwl2cGFkZHEJCSREMCwkSDEsJEgxCQkjIGgwIC0+IGgxCisrCisrCSB2cGFuZHEJCSRNQVNLLCRUMiwkVDIJCSMgMgorKworKwl2cHNybHEJCVwkMjYsJEg0LCRENAorKwl2cGFuZHEJCSRNQVNLLCRINCwkSDQKKysKKysJdnBzcmxxCQlcJDI2LCRIMSwkRDEKKysJdnBhbmRxCQkkTUFTSywkSDEsJEgxCisrCXZwYWRkcQkJJEQxLCRIMiwkSDIJCSMgaDEgLT4gaDIKKysKKysJdnBhZGRxCQkkRDQsJEgwLCRIMAorKwl2cHNsbHEJCVwkMiwkRDQsJEQ0CisrCXZwYWRkcQkJJEQ0LCRIMCwkSDAJCSMgaDQgLT4gaDAKKysKKysJIHZwYWRkcQkJJFQyLCRIMiwkSDIJCSMgbW9kdWxvLXNjaGVkdWxlZAorKwkgdnBzcmxxCQlcJDI2LCRUMCwkVDEKKysKKysJdnBzcmxxCQlcJDI2LCRIMiwkRDIKKysJdnBhbmRxCQkkTUFTSywkSDIsJEgyCisrCXZwYWRkcQkJJEQyLCREMywkSDMJCSMgaDIgLT4gaDMKKysKKysJIHZwc3JscQkJXCQxNCwkVDQsJFQzCisrCisrCXZwc3JscQkJXCQyNiwkSDAsJEQwCisrCXZwYW5kcQkJJE1BU0ssJEgwLCRIMAorKwl2cGFkZHEJCSREMCwkSDEsJEgxCQkjIGgwIC0+IGgxCisrCisrCSB2cHNybHEJCVwkNDAsJFQ0LCRUNAkJIyA0CisrCisrCXZwc3JscQkJXCQyNiwkSDMsJEQzCisrCXZwYW5kcQkJJE1BU0ssJEgzLCRIMworKwl2cGFkZHEJCSREMywkSDQsJEg0CQkjIGgzIC0+IGg0CisrCisrCSB2cGFuZHEJCSRNQVNLLCRUMCwkVDAJCSMgMAorKwkgI3ZwYW5kcQkkTUFTSywkVDEsJFQxCQkjIDEKKysJICN2cGFuZHEJJE1BU0ssJFQzLCRUMwkJIyAzCisrCSAjdnBvcnEJCSRQQURCSVQsJFQ0LCRUNAkJIyBwYWRiaXQsIHllcywgYWx3YXlzCisrCisrCXN1YgkJXCQxMjgsJGxlbgorKwlqYQkJLkxvb3BfYXZ4NTEyCisrCisrLkx0YWlsX2F2eDUxMjoKKysJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKwkjIHdoaWxlIGFib3ZlIG11bHRpcGxpY2F0aW9ucyB3ZXJlIGJ5IHJeOCBpbiBhbGwgbGFuZXMsIGluIGxhc3QKKysJIyBpdGVyYXRpb24gd2UgbXVsdGlwbHkgbGVhc3Qgc2lnbmlmaWNhbnQgbGFuZSBieSByXjggYW5kIG1vc3QKKysJIyBzaWduaWZpY2FudCBvbmUgYnkgciwgdGhhdCdzIHdoeSB0YWJsZSBnZXRzIHNoaWZ0ZWQuLi4KKysKKysJdnBzcmxxCQlcJDMyLCRSMCwkUjAJCSMgMDEwNTAyMDYwMzA3MDQwOAorKwl2cHNybHEJCVwkMzIsJFIxLCRSMQorKwl2cHNybHEJCVwkMzIsJFIyLCRSMgorKwl2cHNybHEJCVwkMzIsJFMzLCRTMworKwl2cHNybHEJCVwkMzIsJFM0LCRTNAorKwl2cHNybHEJCVwkMzIsJFIzLCRSMworKwl2cHNybHEJCVwkMzIsJFI0LCRSNAorKwl2cHNybHEJCVwkMzIsJFMxLCRTMQorKwl2cHNybHEJCVwkMzIsJFMyLCRTMgorKworKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrCSMgbG9hZCBlaXRoZXIgbmV4dCBvciBsYXN0IDY0IGJ5dGUgb2YgaW5wdXQKKysJbGVhCQkoJGlucCwkbGVuKSwkaW5wCisrCisrCSN2cGFkZHEJCSRIMiwkVDIsJEgyCQkjIGFjY3VtdWxhdGUgaW5wdXQKKysJdnBhZGRxCQkkSDAsJFQwLCRIMAorKworKwl2cG11bHVkcQkkSDIsJFIxLCREMwkJIyBkMyA9IGgyKnIxCisrCXZwbXVsdWRxCSRIMiwkUjIsJEQ0CQkjIGQ0ID0gaDIqcjIKKysJdnBtdWx1ZHEJJEgyLCRTMywkRDAJCSMgZDAgPSBoMipzMworKwkgdnBhbmRxCQkkTUFTSywkVDEsJFQxCQkjIDEKKysJdnBtdWx1ZHEJJEgyLCRTNCwkRDEJCSMgZDEgPSBoMipzNAorKwkgdnBhbmRxCQkkTUFTSywkVDMsJFQzCQkjIDMKKysJdnBtdWx1ZHEJJEgyLCRSMCwkRDIJCSMgZDIgPSBoMipyMAorKwkgdnBvcnEJCSRQQURCSVQsJFQ0LCRUNAkJIyBwYWRiaXQsIHllcywgYWx3YXlzCisrCSB2cGFkZHEJCSRIMSwkVDEsJEgxCQkjIGFjY3VtdWxhdGUgaW5wdXQKKysJIHZwYWRkcQkJJEgzLCRUMywkSDMKKysJIHZwYWRkcQkJJEg0LCRUNCwkSDQKKysKKysJICB2bW92ZHF1CTE2KjAoJGlucCksJXgjJFQwCisrCXZwbXVsdWRxCSRIMCwkUjMsJE0zCisrCXZwbXVsdWRxCSRIMCwkUjQsJE00CisrCXZwbXVsdWRxCSRIMCwkUjAsJE0wCisrCXZwbXVsdWRxCSRIMCwkUjEsJE0xCisrCXZwYWRkcQkJJE0zLCREMywkRDMJCSMgZDMgKz0gaDAqcjMKKysJdnBhZGRxCQkkTTQsJEQ0LCRENAkJIyBkNCArPSBoMCpyNAorKwl2cGFkZHEJCSRNMCwkRDAsJEQwCQkjIGQwICs9IGgwKnIwCisrCXZwYWRkcQkJJE0xLCREMSwkRDEJCSMgZDEgKz0gaDAqcjEKKysKKysJICB2bW92ZHF1CTE2KjEoJGlucCksJXgjJFQxCisrCXZwbXVsdWRxCSRIMSwkUjIsJE0zCisrCXZwbXVsdWRxCSRIMSwkUjMsJE00CisrCXZwbXVsdWRxCSRIMSwkUzQsJE0wCisrCXZwbXVsdWRxCSRIMCwkUjIsJE0yCisrCXZwYWRkcQkJJE0zLCREMywkRDMJCSMgZDMgKz0gaDEqcjIKKysJdnBhZGRxCQkkTTQsJEQ0LCRENAkJIyBkNCArPSBoMSpyMworKwl2cGFkZHEJCSRNMCwkRDAsJEQwCQkjIGQwICs9IGgxKnM0CisrCXZwYWRkcQkJJE0yLCREMiwkRDIJCSMgZDIgKz0gaDAqcjIKKysKKysJICB2aW5zZXJ0aTEyOAlcJDEsMTYqMigkaW5wKSwleSMkVDAsJXkjJFQwCisrCXZwbXVsdWRxCSRIMywkUjAsJE0zCisrCXZwbXVsdWRxCSRIMywkUjEsJE00CisrCXZwbXVsdWRxCSRIMSwkUjAsJE0xCisrCXZwbXVsdWRxCSRIMSwkUjEsJE0yCisrCXZwYWRkcQkJJE0zLCREMywkRDMJCSMgZDMgKz0gaDMqcjAKKysJdnBhZGRxCQkkTTQsJEQ0LCRENAkJIyBkNCArPSBoMypyMQorKwl2cGFkZHEJCSRNMSwkRDEsJEQxCQkjIGQxICs9IGgxKnIwCisrCXZwYWRkcQkJJE0yLCREMiwkRDIJCSMgZDIgKz0gaDEqcjEKKysKKysJICB2aW5zZXJ0aTEyOAlcJDEsMTYqMygkaW5wKSwleSMkVDEsJXkjJFQxCisrCXZwbXVsdWRxCSRINCwkUzQsJE0zCisrCXZwbXVsdWRxCSRINCwkUjAsJE00CisrCXZwbXVsdWRxCSRIMywkUzIsJE0wCisrCXZwbXVsdWRxCSRIMywkUzMsJE0xCisrCXZwbXVsdWRxCSRIMywkUzQsJE0yCisrCXZwYWRkcQkJJE0zLCREMywkSDMJCSMgaDMgPSBkMyArIGg0KnM0CisrCXZwYWRkcQkJJE00LCRENCwkRDQJCSMgZDQgKz0gaDQqcjAKKysJdnBhZGRxCQkkTTAsJEQwLCREMAkJIyBkMCArPSBoMypzMgorKwl2cGFkZHEJCSRNMSwkRDEsJEQxCQkjIGQxICs9IGgzKnMzCisrCXZwYWRkcQkJJE0yLCREMiwkRDIJCSMgZDIgKz0gaDMqczQKKysKKysJdnBtdWx1ZHEJJEg0LCRTMSwkTTAKKysJdnBtdWx1ZHEJJEg0LCRTMiwkTTEKKysJdnBtdWx1ZHEJJEg0LCRTMywkTTIKKysJdnBhZGRxCQkkTTAsJEQwLCRIMAkJIyBoMCA9IGQwICsgaDQqczEKKysJdnBhZGRxCQkkTTEsJEQxLCRIMQkJIyBoMSA9IGQyICsgaDQqczIKKysJdnBhZGRxCQkkTTIsJEQyLCRIMgkJIyBoMiA9IGQzICsgaDQqczMKKysKKysJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKwkjIGhvcml6b250YWwgYWRkaXRpb24KKysKKysJbW92CQlcJDEsJWVheAorKwl2cGVybXEJCVwkMHhiMSwkSDMsJEQzCisrCXZwZXJtcQkJXCQweGIxLCRENCwkSDQKKysJdnBlcm1xCQlcJDB4YjEsJEgwLCREMAorKwl2cGVybXEJCVwkMHhiMSwkSDEsJEQxCisrCXZwZXJtcQkJXCQweGIxLCRIMiwkRDIKKysJdnBhZGRxCQkkRDMsJEgzLCRIMworKwl2cGFkZHEJCSRENCwkSDQsJEg0CisrCXZwYWRkcQkJJEQwLCRIMCwkSDAKKysJdnBhZGRxCQkkRDEsJEgxLCRIMQorKwl2cGFkZHEJCSREMiwkSDIsJEgyCisrCisrCWttb3Z3CQklZWF4LCVrMworKwl2cGVybXEJCVwkMHgyLCRIMywkRDMKKysJdnBlcm1xCQlcJDB4MiwkSDQsJEQ0CisrCXZwZXJtcQkJXCQweDIsJEgwLCREMAorKwl2cGVybXEJCVwkMHgyLCRIMSwkRDEKKysJdnBlcm1xCQlcJDB4MiwkSDIsJEQyCisrCXZwYWRkcQkJJEQzLCRIMywkSDMKKysJdnBhZGRxCQkkRDQsJEg0LCRINAorKwl2cGFkZHEJCSREMCwkSDAsJEgwCisrCXZwYWRkcQkJJEQxLCRIMSwkSDEKKysJdnBhZGRxCQkkRDIsJEgyLCRIMgorKworKwl2ZXh0cmFjdGk2NHg0CVwkMHgxLCRIMywleSMkRDMKKysJdmV4dHJhY3RpNjR4NAlcJDB4MSwkSDQsJXkjJEQ0CisrCXZleHRyYWN0aTY0eDQJXCQweDEsJEgwLCV5IyREMAorKwl2ZXh0cmFjdGk2NHg0CVwkMHgxLCRIMSwleSMkRDEKKysJdmV4dHJhY3RpNjR4NAlcJDB4MSwkSDIsJXkjJEQyCisrCXZwYWRkcQkJJEQzLCRIMywke0gzfXslazN9e3p9CSMga2VlcCBzaW5nbGUgcXdvcmQgaW4gY2FzZQorKwl2cGFkZHEJCSRENCwkSDQsJHtINH17JWszfXt6fQkjIGl0J3MgcGFzc2VkIHRvIC5MdGFpbF9hdngyCisrCXZwYWRkcQkJJEQwLCRIMCwke0gwfXslazN9e3p9CisrCXZwYWRkcQkJJEQxLCRIMSwke0gxfXslazN9e3p9CisrCXZwYWRkcQkJJEQyLCRIMiwke0gyfXslazN9e3p9CisrX19fCisrbWFwKHMvJXovJXkvLCgkVDAsJFQxLCRUMiwkVDMsJFQ0LCAkUEFEQklUKSk7CisrbWFwKHMvJXovJXkvLCgkSDAsJEgxLCRIMiwkSDMsJEg0LCAkRDAsJEQxLCREMiwkRDMsJEQ0LCAkTUFTSykpOworKyRjb2RlLj08PF9fXzsKKysJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKwkjIGxhenkgcmVkdWN0aW9uIChpbnRlcmxlYXZlZCB3aXRoIGlucHV0IHNwbGF0KQorKworKwl2cHNybHEJCVwkMjYsJEgzLCREMworKwl2cGFuZAkJJE1BU0ssJEgzLCRIMworKwkgdnBzcmxkcQlcJDYsJFQwLCRUMgkJIyBzcGxhdCBpbnB1dAorKwkgdnBzcmxkcQlcJDYsJFQxLCRUMworKwkgdnB1bnBja2hxZHEJJFQxLCRUMCwkVDQJCSMgNAorKwl2cGFkZHEJCSREMywkSDQsJEg0CQkjIGgzIC0+IGg0CisrCisrCXZwc3JscQkJXCQyNiwkSDAsJEQwCisrCXZwYW5kCQkkTUFTSywkSDAsJEgwCisrCSB2cHVucGNrbHFkcQkkVDMsJFQyLCRUMgkJIyAyOjMKKysJIHZwdW5wY2tscWRxCSRUMSwkVDAsJFQwCQkjIDA6MQorKwl2cGFkZHEJCSREMCwkSDEsJEgxCQkjIGgwIC0+IGgxCisrCisrCXZwc3JscQkJXCQyNiwkSDQsJEQ0CisrCXZwYW5kCQkkTUFTSywkSDQsJEg0CisrCisrCXZwc3JscQkJXCQyNiwkSDEsJEQxCisrCXZwYW5kCQkkTUFTSywkSDEsJEgxCisrCSB2cHNybHEJCVwkMzAsJFQyLCRUMworKwkgdnBzcmxxCQlcJDQsJFQyLCRUMgorKwl2cGFkZHEJCSREMSwkSDIsJEgyCQkjIGgxIC0+IGgyCisrCisrCXZwYWRkcQkJJEQ0LCRIMCwkSDAKKysJdnBzbGxxCQlcJDIsJEQ0LCRENAorKwkgdnBzcmxxCQlcJDI2LCRUMCwkVDEKKysJIHZwc3JscQkJXCQ0MCwkVDQsJFQ0CQkjIDQKKysJdnBhZGRxCQkkRDQsJEgwLCRIMAkJIyBoNCAtPiBoMAorKworKwl2cHNybHEJCVwkMjYsJEgyLCREMgorKwl2cGFuZAkJJE1BU0ssJEgyLCRIMgorKwkgdnBhbmQJCSRNQVNLLCRUMiwkVDIJCSMgMgorKwkgdnBhbmQJCSRNQVNLLCRUMCwkVDAJCSMgMAorKwl2cGFkZHEJCSREMiwkSDMsJEgzCQkjIGgyIC0+IGgzCisrCisrCXZwc3JscQkJXCQyNiwkSDAsJEQwCisrCXZwYW5kCQkkTUFTSywkSDAsJEgwCisrCSB2cGFkZHEJCSRIMiwkVDIsJEgyCQkjIGFjY3VtdWxhdGUgaW5wdXQgZm9yIC5MdGFpbF9hdngyCisrCSB2cGFuZAkJJE1BU0ssJFQxLCRUMQkJIyAxCisrCXZwYWRkcQkJJEQwLCRIMSwkSDEJCSMgaDAgLT4gaDEKKysKKysJdnBzcmxxCQlcJDI2LCRIMywkRDMKKysJdnBhbmQJCSRNQVNLLCRIMywkSDMKKysJIHZwYW5kCQkkTUFTSywkVDMsJFQzCQkjIDMKKysJIHZwb3IJCTMyKCVyY3gpLCRUNCwkVDQJIyBwYWRiaXQsIHllcywgYWx3YXlzCisrCXZwYWRkcQkJJEQzLCRINCwkSDQJCSMgaDMgLT4gaDQKKysKKysJbGVhCQkweDkwKCVyc3ApLCVyYXgJCSMgc2l6ZSBvcHRpbWl6YXRpb24gZm9yIC5MdGFpbF9hdngyCisrCWFkZAkJXCQ2NCwkbGVuCisrCWpuegkJLkx0YWlsX2F2eDIKKysKKysJdnBzdWJxCQkkVDIsJEgyLCRIMgkJIyB1bmRvIGlucHV0IGFjY3VtdWxhdGlvbgorKwl2bW92ZAkJJXgjJEgwLGA0KjAtNDgtNjRgKCRjdHgpIyBzYXZlIHBhcnRpYWxseSByZWR1Y2VkCisrCXZtb3ZkCQkleCMkSDEsYDQqMS00OC02NGAoJGN0eCkKKysJdm1vdmQJCSV4IyRIMixgNCoyLTQ4LTY0YCgkY3R4KQorKwl2bW92ZAkJJXgjJEgzLGA0KjMtNDgtNjRgKCRjdHgpCisrCXZtb3ZkCQkleCMkSDQsYDQqNC00OC02NGAoJGN0eCkKKysJdnplcm9hbGwKKytfX18KKyskY29kZS49PDxfX18JaWYgKCR3aW42NCk7CisrCW1vdmRxYQkJMHg1MCglcjExKSwleG1tNgorKwltb3ZkcWEJCTB4NjAoJXIxMSksJXhtbTcKKysJbW92ZHFhCQkweDcwKCVyMTEpLCV4bW04CisrCW1vdmRxYQkJMHg4MCglcjExKSwleG1tOQorKwltb3ZkcWEJCTB4OTAoJXIxMSksJXhtbTEwCisrCW1vdmRxYQkJMHhhMCglcjExKSwleG1tMTEKKysJbW92ZHFhCQkweGIwKCVyMTEpLCV4bW0xMgorKwltb3ZkcWEJCTB4YzAoJXIxMSksJXhtbTEzCisrCW1vdmRxYQkJMHhkMCglcjExKSwleG1tMTQKKysJbW92ZHFhCQkweGUwKCVyMTEpLCV4bW0xNQorKwlsZWEJCTB4ZjgoJXIxMSksJXJzcAorKy5MZG9fYXZ4NTEyX2VwaWxvZ3VlOgorK19fXworKyRjb2RlLj08PF9fXwlpZiAoISR3aW42NCk7CisrCWxlYQkJOCglcjExKSwlcnNwCisrLmNmaV9kZWZfY2ZhCQklcnNwLDgKKytfX18KKyskY29kZS49PDxfX187CisrCXJldAorKy5jZmlfZW5kcHJvYworKy5zaXplCXBvbHkxMzA1X2Jsb2Nrc19hdng1MTIsLi1wb2x5MTMwNV9ibG9ja3NfYXZ4NTEyCisrX19fCisraWYgKCRhdng+MykgeworKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKyMgVlBNQURENTIgdmVyc2lvbiB1c2luZyAyXjQ0IHJhZGl4LgorKyMKKysjIE9uZSBjYW4gYXJndWUgdGhhdCBiYXNlIDJeNTIgd291bGQgYmUgbW9yZSBuYXR1cmFsLiBXZWxsLCBldmVuIHRob3VnaAorKyMgc29tZSBvcGVyYXRpb25zIHdvdWxkIGJlIG1vcmUgbmF0dXJhbCwgb25lIGhhcyB0byByZWNvZ25pemUgY291cGxlIG9mCisrIyB0aGluZ3MuIEJhc2UgMl41MiBkb2Vzbid0IHByb3ZpZGUgYWR2YW50YWdlIG92ZXIgYmFzZSAyXjQ0IGlmIHlvdSBsb29rCisrIyBhdCBhbW91bnQgb2YgbXVsdGlwbHktbi1hY2N1bXVsYXRlIG9wZXJhdGlvbnMuIFNlY29uZGx5LCBpdCBtYWtlcyBpdAorKyMgaW1wb3NzaWJsZSB0byBwcmUtY29tcHV0ZSBtdWx0aXBsZXMgb2YgNSBbcmVmZXJyZWQgdG8gYXMgc1tdL3NOIGluCisrIyByZWZlcmVuY2UgaW1wbGVtZW50YXRpb25zXSwgd2hpY2ggbWVhbnMgdGhhdCBtb3JlIHN1Y2ggb3BlcmF0aW9ucworKyMgd291bGQgaGF2ZSB0byBiZSBwZXJmb3JtZWQgaW4gaW5uZXIgbG9vcCwgd2hpY2ggaW4gdHVybiBtYWtlcyBjcml0aWNhbAorKyMgcGF0aCBsb25nZXIuIEluIG90aGVyIHdvcmRzLCBldmVuIHRob3VnaCBiYXNlIDJeNDQgcmVkdWN0aW9uIG1pZ2h0CisrIyBsb29rIGxlc3MgZWxlZ2FudCwgb3ZlcmFsbCBjcml0aWNhbCBwYXRoIGlzIGFjdHVhbGx5IHNob3J0ZXIuLi4KKysKKysjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysjIExheW91dCBvZiBvcGFxdWUgYXJlYSBpcyBmb2xsb3dpbmcuCisrIworKyMJdW5zaWduZWQgX19pbnQ2NCBoWzNdOwkJIyBjdXJyZW50IGhhc2ggdmFsdWUgYmFzZSAyXjQ0CisrIwl1bnNpZ25lZCBfX2ludDY0IHNbMl07CQkjIGtleSB2YWx1ZSoyMCBiYXNlIDJeNDQKKysjCXVuc2lnbmVkIF9faW50NjQgclszXTsJCSMga2V5IHZhbHVlIGJhc2UgMl40NAorKyMJc3RydWN0IHsgdW5zaWduZWQgX19pbnQ2NCByXjEsIHJeMywgcl4yLCByXjQ7IH0gUls0XTsKKysjCQkJCQkjIHJebiBwb3NpdGlvbnMgcmVmbGVjdAorKyMJCQkJCSMgcGxhY2VtZW50IGluIHJlZ2lzdGVyLCBub3QKKysjCQkJCQkjIG1lbW9yeSwgUlszXSBpcyBSWzFdKjIwCisrCisrJGNvZGUuPTw8X19fOworKy50eXBlCXBvbHkxMzA1X2luaXRfYmFzZTJfNDQsXEBmdW5jdGlvbiwzCisrLmFsaWduCTMyCisrcG9seTEzMDVfaW5pdF9iYXNlMl80NDoKKysJeG9yCSVyYXgsJXJheAorKwltb3YJJXJheCwwKCRjdHgpCQkjIGluaXRpYWxpemUgaGFzaCB2YWx1ZQorKwltb3YJJXJheCw4KCRjdHgpCisrCW1vdgklcmF4LDE2KCRjdHgpCisrCisrLkxpbml0X2Jhc2UyXzQ0OgorKwlsZWEJcG9seTEzMDVfYmxvY2tzX3ZwbWFkZDUyKCVyaXApLCVyMTAKKysJbGVhCXBvbHkxMzA1X2VtaXRfYmFzZTJfNDQoJXJpcCksJXIxMQorKworKwltb3YJXCQweDBmZmZmZmZjMGZmZmZmZmYsJXJheAorKwltb3YJXCQweDBmZmZmZmZjMGZmZmZmZmMsJXJjeAorKwlhbmQJMCgkaW5wKSwlcmF4CisrCW1vdglcJDB4MDAwMDBmZmZmZmZmZmZmZiwlcjgKKysJYW5kCTgoJGlucCksJXJjeAorKwltb3YJXCQweDAwMDAwZmZmZmZmZmZmZmYsJXI5CisrCWFuZAklcmF4LCVyOAorKwlzaHJkCVwkNDQsJXJjeCwlcmF4CisrCW1vdgklcjgsNDAoJGN0eCkJCSMgcjAKKysJYW5kCSVyOSwlcmF4CisrCXNocglcJDI0LCVyY3gKKysJbW92CSVyYXgsNDgoJGN0eCkJCSMgcjEKKysJbGVhCSglcmF4LCVyYXgsNCksJXJheAkjICo1CisrCW1vdgklcmN4LDU2KCRjdHgpCQkjIHIyCisrCXNobAlcJDIsJXJheAkJIyBtYWdpYyA8PDIKKysJbGVhCSglcmN4LCVyY3gsNCksJXJjeAkjICo1CisrCXNobAlcJDIsJXJjeAkJIyBtYWdpYyA8PDIKKysJbW92CSVyYXgsMjQoJGN0eCkJCSMgczEKKysJbW92CSVyY3gsMzIoJGN0eCkJCSMgczIKKysJbW92cQlcJC0xLDY0KCRjdHgpCQkjIHdyaXRlIGltcG9zc2libGUgdmFsdWUKKytfX18KKyskY29kZS49PDxfX18JaWYgKCRmbGF2b3VyICF+IC9lbGYzMi8pOworKwltb3YJJXIxMCwwKCVyZHgpCisrCW1vdgklcjExLDgoJXJkeCkKKytfX18KKyskY29kZS49PDxfX18JaWYgKCRmbGF2b3VyID1+IC9lbGYzMi8pOworKwltb3YJJXIxMGQsMCglcmR4KQorKwltb3YJJXIxMWQsNCglcmR4KQorK19fXworKyRjb2RlLj08PF9fXzsKKysJbW92CVwkMSwlZWF4CisrCXJldAorKy5zaXplCXBvbHkxMzA1X2luaXRfYmFzZTJfNDQsLi1wb2x5MTMwNV9pbml0X2Jhc2UyXzQ0CisrX19fCisreworK215ICgkSDAsJEgxLCRIMiwkcjJyMXIwLCRyMXIwczIsJHIwczJzMSwkRGxvLCREaGkpID0gbWFwKCIleW1tJF8iLCgwLi41LDE2LDE3KSk7CisrbXkgKCRUMCwkaW5wX3Blcm1kLCRpbnBfc2hpZnQsJFBBRCkgPSBtYXAoIiV5bW0kXyIsKDE4Li4yMSkpOworK215ICgkcmVkdWNfbWFzaywkcmVkdWNfcmdodCwkcmVkdWNfbGVmdCkgPSBtYXAoIiV5bW0kXyIsKDIyLi4yNSkpOworKworKyRjb2RlLj08PF9fXzsKKysudHlwZQlwb2x5MTMwNV9ibG9ja3NfdnBtYWRkNTIsXEBmdW5jdGlvbiw0CisrLmFsaWduCTMyCisrcG9seTEzMDVfYmxvY2tzX3ZwbWFkZDUyOgorKwlzaHIJXCQ0LCRsZW4KKysJanoJLkxub19kYXRhX3ZwbWFkZDUyCQkjIHRvbyBzaG9ydAorKworKwlzaGwJXCQ0MCwkcGFkYml0CisrCW1vdgk2NCgkY3R4KSwlcjgJCQkjIHBlZWsgb24gcG93ZXIgb2YgdGhlIGtleQorKworKwkjIGlmIHBvd2VycyBvZiB0aGUga2V5IGFyZSBub3QgY2FsY3VsYXRlZCB5ZXQsIHByb2Nlc3MgdXAgdG8gMworKwkjIGJsb2NrcyB3aXRoIHRoaXMgc2luZ2xlLWJsb2NrIHN1YnJvdXRpbmUsIG90aGVyd2lzZSBlbnN1cmUgdGhhdAorKwkjIGxlbmd0aCBpcyBkaXZpc2libGUgYnkgMiBibG9ja3MgYW5kIHBhc3MgdGhlIHJlc3QgZG93biB0byBuZXh0CisrCSMgc3Vicm91dGluZS4uLgorKworKwltb3YJXCQzLCVyYXgKKysJbW92CVwkMSwlcjEwCisrCWNtcAlcJDQsJGxlbgkJCSMgaXMgaW5wdXQgbG9uZworKwljbW92YWUJJXIxMCwlcmF4CisrCXRlc3QJJXI4LCVyOAkJCQkjIGlzIHBvd2VyIHZhbHVlIGltcG9zc2libGU/CisrCWNtb3ZucwklcjEwLCVyYXgKKysKKysJYW5kCSRsZW4sJXJheAkJCSMgaXMgaW5wdXQgb2YgZmF2b3VyYWJsZSBsZW5ndGg/CisrCWp6CS5MYmxvY2tzX3ZwbWFkZDUyXzR4CisrCisrCXN1YgkJJXJheCwkbGVuCisrCW1vdgkJXCQ3LCVyMTBkCisrCW1vdgkJXCQxLCVyMTFkCisrCWttb3Z3CQklcjEwZCwlazcKKysJbGVhCQkuTDJfNDRfaW5wX3Blcm1kKCVyaXApLCVyMTAKKysJa21vdncJCSVyMTFkLCVrMQorKworKwl2bW92cQkJJHBhZGJpdCwleCMkUEFECisrCXZtb3ZkcWE2NAkwKCVyMTApLCRpbnBfcGVybWQJIyAuTDJfNDRfaW5wX3Blcm1kCisrCXZtb3ZkcWE2NAkzMiglcjEwKSwkaW5wX3NoaWZ0CSMgLkwyXzQ0X2lucF9zaGlmdAorKwl2cGVybXEJCVwkMHhjZiwkUEFELCRQQUQKKysJdm1vdmRxYTY0CTY0KCVyMTApLCRyZWR1Y19tYXNrCSMgLkwyXzQ0X21hc2sKKysKKysJdm1vdmRxdTY0CTAoJGN0eCksJHtEbG99eyVrN317en0JCSMgbG9hZCBoYXNoIHZhbHVlCisrCXZtb3ZkcXU2NAk0MCgkY3R4KSwke3IycjFyMH17JWs3fXt6fQkjIGxvYWQga2V5cworKwl2bW92ZHF1NjQJMzIoJGN0eCksJHtyMXIwczJ9eyVrN317en0KKysJdm1vdmRxdTY0CTI0KCRjdHgpLCR7cjBzMnMxfXslazd9e3p9CisrCisrCXZtb3ZkcWE2NAk5NiglcjEwKSwkcmVkdWNfcmdodAkjIC5MMl80NF9zaGlmdF9yZ3QKKysJdm1vdmRxYTY0CTEyOCglcjEwKSwkcmVkdWNfbGVmdAkjIC5MMl80NF9zaGlmdF9sZnQKKysKKysJam1wCQkuTG9vcF92cG1hZGQ1MgorKworKy5hbGlnbgkzMgorKy5Mb29wX3ZwbWFkZDUyOgorKwl2bW92ZHF1MzIJMCgkaW5wKSwleCMkVDAJCSMgbG9hZCBpbnB1dCBhcyAtLS0tMzIxMAorKwlsZWEJCTE2KCRpbnApLCRpbnAKKysKKysJdnBlcm1kCQkkVDAsJGlucF9wZXJtZCwkVDAJIyAtLS0tMzIxMCAtPiAtLTMyMjExMAorKwl2cHNybHZxCQkkaW5wX3NoaWZ0LCRUMCwkVDAKKysJdnBhbmRxCQkkcmVkdWNfbWFzaywkVDAsJFQwCisrCXZwb3JxCQkkUEFELCRUMCwkVDAKKysKKysJdnBhZGRxCQkkVDAsJERsbywkRGxvCQkjIGFjY3VtdWxhdGUgaW5wdXQKKysKKysJdnBlcm1xCQlcJDAsJERsbywke0gwfXslazd9e3p9CSMgc21hc2ggaGFzaCB2YWx1ZQorKwl2cGVybXEJCVwkMGIwMTAxMDEwMSwkRGxvLCR7SDF9eyVrN317en0KKysJdnBlcm1xCQlcJDBiMTAxMDEwMTAsJERsbywke0gyfXslazd9e3p9CisrCisrCXZweG9yZAkJJERsbywkRGxvLCREbG8KKysJdnB4b3JkCQkkRGhpLCREaGksJERoaQorKworKwl2cG1hZGQ1Mmx1cQkkcjJyMXIwLCRIMCwkRGxvCisrCXZwbWFkZDUyaHVxCSRyMnIxcjAsJEgwLCREaGkKKysKKysJdnBtYWRkNTJsdXEJJHIxcjBzMiwkSDEsJERsbworKwl2cG1hZGQ1Mmh1cQkkcjFyMHMyLCRIMSwkRGhpCisrCisrCXZwbWFkZDUybHVxCSRyMHMyczEsJEgyLCREbG8KKysJdnBtYWRkNTJodXEJJHIwczJzMSwkSDIsJERoaQorKworKwl2cHNybHZxCQkkcmVkdWNfcmdodCwkRGxvLCRUMAkjIDAgaW4gdG9wbW9zdCBxd29yZAorKwl2cHNsbHZxCQkkcmVkdWNfbGVmdCwkRGhpLCREaGkJIyAwIGluIHRvcG1vc3QgcXdvcmQKKysJdnBhbmRxCQkkcmVkdWNfbWFzaywkRGxvLCREbG8KKysKKysJdnBhZGRxCQkkVDAsJERoaSwkRGhpCisrCisrCXZwZXJtcQkJXCQwYjEwMDEwMDExLCREaGksJERoaQkjIDAgaW4gbG93ZXN0IHF3b3JkCisrCisrCXZwYWRkcQkJJERoaSwkRGxvLCREbG8JCSMgbm90ZSB0b3Btb3N0IHF3b3JkIDotKQorKworKwl2cHNybHZxCQkkcmVkdWNfcmdodCwkRGxvLCRUMAkjIDAgaW4gdG9wbW9zdCB3b3JkCisrCXZwYW5kcQkJJHJlZHVjX21hc2ssJERsbywkRGxvCisrCisrCXZwZXJtcQkJXCQwYjEwMDEwMDExLCRUMCwkVDAKKysKKysJdnBhZGRxCQkkVDAsJERsbywkRGxvCisrCisrCXZwZXJtcQkJXCQwYjEwMDEwMDExLCREbG8sJHtUMH17JWsxfXt6fQorKworKwl2cGFkZHEJCSRUMCwkRGxvLCREbG8KKysJdnBzbGxxCQlcJDIsJFQwLCRUMAorKworKwl2cGFkZHEJCSRUMCwkRGxvLCREbG8KKysKKysJZGVjCQklcmF4CQkJIyBsZW4tPTE2CisrCWpuegkJLkxvb3BfdnBtYWRkNTIKKysKKysJdm1vdmRxdTY0CSREbG8sMCgkY3R4KXslazd9CSMgc3RvcmUgaGFzaCB2YWx1ZQorKworKwl0ZXN0CQkkbGVuLCRsZW4KKysJam56CQkuTGJsb2Nrc192cG1hZGQ1Ml80eAorKworKy5Mbm9fZGF0YV92cG1hZGQ1MjoKKysJcmV0CisrLnNpemUJcG9seTEzMDVfYmxvY2tzX3ZwbWFkZDUyLC4tcG9seTEzMDVfYmxvY2tzX3ZwbWFkZDUyCisrX19fCisrfQorK3sKKysjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysjIEFzIGltcGxpZWQgYnkgaXRzIG5hbWUgNHggc3Vicm91dGluZSBwcm9jZXNzZXMgNCBibG9ja3MgaW4gcGFyYWxsZWwKKysjIChidXQgaGFuZGxlcyBldmVuIDQqbisyIGJsb2NrcyBsZW5ndGhzKS4gSXQgdGFrZXMgdXAgdG8gNHRoIGtleSBwb3dlcgorKyMgYW5kIGlzIGhhbmRsZWQgaW4gMjU2LWJpdCAleW1tIHJlZ2lzdGVycy4KKysKKytteSAoJEgwLCRIMSwkSDIsJFIwLCRSMSwkUjIsJFMxLCRTMikgPSBtYXAoIiV5bW0kXyIsKDAuLjUsMTYsMTcpKTsKKytteSAoJEQwbG8sJEQwaGksJEQxbG8sJEQxaGksJEQybG8sJEQyaGkpID0gbWFwKCIleW1tJF8iLCgxOC4uMjMpKTsKKytteSAoJFQwLCRUMSwkVDIsJFQzLCRtYXNrNDQsJG1hc2s0MiwkdG1wLCRQQUQpID0gbWFwKCIleW1tJF8iLCgyNC4uMzEpKTsKKysKKyskY29kZS49PDxfX187CisrLnR5cGUJcG9seTEzMDVfYmxvY2tzX3ZwbWFkZDUyXzR4LFxAZnVuY3Rpb24sNAorKy5hbGlnbgkzMgorK3BvbHkxMzA1X2Jsb2Nrc192cG1hZGQ1Ml80eDoKKysJc2hyCVwkNCwkbGVuCisrCWp6CS5Mbm9fZGF0YV92cG1hZGQ1Ml80eAkJIyB0b28gc2hvcnQKKysKKysJc2hsCVwkNDAsJHBhZGJpdAorKwltb3YJNjQoJGN0eCksJXI4CQkJIyBwZWVrIG9uIHBvd2VyIG9mIHRoZSBrZXkKKysKKysuTGJsb2Nrc192cG1hZGQ1Ml80eDoKKysJdnBicm9hZGNhc3RxCSRwYWRiaXQsJFBBRAorKworKwl2bW92ZHFhNjQJLkx4X21hc2s0NCglcmlwKSwkbWFzazQ0CisrCW1vdgkJXCQ1LCVlYXgKKysJdm1vdmRxYTY0CS5MeF9tYXNrNDIoJXJpcCksJG1hc2s0MgorKwlrbW92dwkJJWVheCwlazEJCSMgdXNlZCBpbiAyeCBwYXRoCisrCisrCXRlc3QJCSVyOCwlcjgJCQkjIGlzIHBvd2VyIHZhbHVlIGltcG9zc2libGU/CisrCWpzCQkuTGluaXRfdnBtYWRkNTIJCSMgaWYgaXQgaXMsIHRoZW4gaW5pdCBSWzRdCisrCisrCXZtb3ZxCQkwKCRjdHgpLCV4IyRIMAkJIyBsb2FkIGN1cnJlbnQgaGFzaCB2YWx1ZQorKwl2bW92cQkJOCgkY3R4KSwleCMkSDEKKysJdm1vdnEJCTE2KCRjdHgpLCV4IyRIMgorKworKwl0ZXN0CQlcJDMsJGxlbgkJIyBpcyBsZW5ndGggNCpuKzI/CisrCWpuegkJLkxibG9ja3NfdnBtYWRkNTJfMnhfZG8KKysKKysuTGJsb2Nrc192cG1hZGQ1Ml80eF9kbzoKKysJdnBicm9hZGNhc3RxCTY0KCRjdHgpLCRSMAkJIyBsb2FkIDR0aCBwb3dlciBvZiB0aGUga2V5CisrCXZwYnJvYWRjYXN0cQk5NigkY3R4KSwkUjEKKysJdnBicm9hZGNhc3RxCTEyOCgkY3R4KSwkUjIKKysJdnBicm9hZGNhc3RxCTE2MCgkY3R4KSwkUzEKKysKKysuTGJsb2Nrc192cG1hZGQ1Ml80eF9rZXlfbG9hZGVkOgorKwl2cHNsbHEJCVwkMiwkUjIsJFMyCQkjIFMyID0gUjIqNSo0CisrCXZwYWRkcQkJJFIyLCRTMiwkUzIKKysJdnBzbGxxCQlcJDIsJFMyLCRTMgorKworKwl0ZXN0CQlcJDcsJGxlbgkJIyBpcyBsZW4gOCpuPworKwlqegkJLkxibG9ja3NfdnBtYWRkNTJfOHgKKysKKysJdm1vdmRxdTY0CTE2KjAoJGlucCksJFQyCQkjIGxvYWQgZGF0YQorKwl2bW92ZHF1NjQJMTYqMigkaW5wKSwkVDMKKysJbGVhCQkxNio0KCRpbnApLCRpbnAKKysKKysJdnB1bnBja2xxZHEJJFQzLCRUMiwkVDEJCSMgdHJhbnNwb3NlIGRhdGEKKysJdnB1bnBja2hxZHEJJFQzLCRUMiwkVDMKKysKKysJIyBhdCB0aGlzIHBvaW50IDY0LWJpdCBsYW5lcyBhcmUgb3JkZXJlZCBhcyAzLTEtMi0wCisrCisrCXZwc3JscQkJXCQyNCwkVDMsJFQyCQkjIHNwbGF0IHRoZSBkYXRhCisrCXZwb3JxCQkkUEFELCRUMiwkVDIKKysJIHZwYWRkcQkJJFQyLCRIMiwkSDIJCSMgYWNjdW11bGF0ZSBpbnB1dAorKwl2cGFuZHEJCSRtYXNrNDQsJFQxLCRUMAorKwl2cHNybHEJCVwkNDQsJFQxLCRUMQorKwl2cHNsbHEJCVwkMjAsJFQzLCRUMworKwl2cG9ycQkJJFQzLCRUMSwkVDEKKysJdnBhbmRxCQkkbWFzazQ0LCRUMSwkVDEKKysKKysJc3ViCQlcJDQsJGxlbgorKwlqegkJLkx0YWlsX3ZwbWFkZDUyXzR4CisrCWptcAkJLkxvb3BfdnBtYWRkNTJfNHgKKysJdWQyCisrCisrLmFsaWduCTMyCisrLkxpbml0X3ZwbWFkZDUyOgorKwl2bW92cQkJMjQoJGN0eCksJXgjJFMxCQkjIGxvYWQga2V5CisrCXZtb3ZxCQk1NigkY3R4KSwleCMkSDIKKysJdm1vdnEJCTMyKCRjdHgpLCV4IyRTMgorKwl2bW92cQkJNDAoJGN0eCksJXgjJFIwCisrCXZtb3ZxCQk0OCgkY3R4KSwleCMkUjEKKysKKysJdm1vdmRxYQkJJFIwLCRIMAorKwl2bW92ZHFhCQkkUjEsJEgxCisrCXZtb3ZkcWEJCSRIMiwkUjIKKysKKysJbW92CQlcJDIsJWVheAorKworKy5MbXVsX2luaXRfdnBtYWRkNTI6CisrCXZweG9ycQkJJEQwbG8sJEQwbG8sJEQwbG8KKysJdnBtYWRkNTJsdXEJJEgyLCRTMSwkRDBsbworKwl2cHhvcnEJCSREMGhpLCREMGhpLCREMGhpCisrCXZwbWFkZDUyaHVxCSRIMiwkUzEsJEQwaGkKKysJdnB4b3JxCQkkRDFsbywkRDFsbywkRDFsbworKwl2cG1hZGQ1Mmx1cQkkSDIsJFMyLCREMWxvCisrCXZweG9ycQkJJEQxaGksJEQxaGksJEQxaGkKKysJdnBtYWRkNTJodXEJJEgyLCRTMiwkRDFoaQorKwl2cHhvcnEJCSREMmxvLCREMmxvLCREMmxvCisrCXZwbWFkZDUybHVxCSRIMiwkUjAsJEQybG8KKysJdnB4b3JxCQkkRDJoaSwkRDJoaSwkRDJoaQorKwl2cG1hZGQ1Mmh1cQkkSDIsJFIwLCREMmhpCisrCisrCXZwbWFkZDUybHVxCSRIMCwkUjAsJEQwbG8KKysJdnBtYWRkNTJodXEJJEgwLCRSMCwkRDBoaQorKwl2cG1hZGQ1Mmx1cQkkSDAsJFIxLCREMWxvCisrCXZwbWFkZDUyaHVxCSRIMCwkUjEsJEQxaGkKKysJdnBtYWRkNTJsdXEJJEgwLCRSMiwkRDJsbworKwl2cG1hZGQ1Mmh1cQkkSDAsJFIyLCREMmhpCisrCisrCXZwbWFkZDUybHVxCSRIMSwkUzIsJEQwbG8KKysJdnBtYWRkNTJodXEJJEgxLCRTMiwkRDBoaQorKwl2cG1hZGQ1Mmx1cQkkSDEsJFIwLCREMWxvCisrCXZwbWFkZDUyaHVxCSRIMSwkUjAsJEQxaGkKKysJdnBtYWRkNTJsdXEJJEgxLCRSMSwkRDJsbworKwl2cG1hZGQ1Mmh1cQkkSDEsJFIxLCREMmhpCisrCisrCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysJIyBwYXJ0aWFsIHJlZHVjdGlvbgorKwl2cHNybHEJCVwkNDQsJEQwbG8sJHRtcAorKwl2cHNsbHEJCVwkOCwkRDBoaSwkRDBoaQorKwl2cGFuZHEJCSRtYXNrNDQsJEQwbG8sJEgwCisrCXZwYWRkcQkJJHRtcCwkRDBoaSwkRDBoaQorKworKwl2cGFkZHEJCSREMGhpLCREMWxvLCREMWxvCisrCisrCXZwc3JscQkJXCQ0NCwkRDFsbywkdG1wCisrCXZwc2xscQkJXCQ4LCREMWhpLCREMWhpCisrCXZwYW5kcQkJJG1hc2s0NCwkRDFsbywkSDEKKysJdnBhZGRxCQkkdG1wLCREMWhpLCREMWhpCisrCisrCXZwYWRkcQkJJEQxaGksJEQybG8sJEQybG8KKysKKysJdnBzcmxxCQlcJDQyLCREMmxvLCR0bXAKKysJdnBzbGxxCQlcJDEwLCREMmhpLCREMmhpCisrCXZwYW5kcQkJJG1hc2s0MiwkRDJsbywkSDIKKysJdnBhZGRxCQkkdG1wLCREMmhpLCREMmhpCisrCisrCXZwYWRkcQkJJEQyaGksJEgwLCRIMAorKwl2cHNsbHEJCVwkMiwkRDJoaSwkRDJoaQorKworKwl2cGFkZHEJCSREMmhpLCRIMCwkSDAKKysKKysJdnBzcmxxCQlcJDQ0LCRIMCwkdG1wCQkjIGFkZGl0aW9uYWwgc3RlcAorKwl2cGFuZHEJCSRtYXNrNDQsJEgwLCRIMAorKworKwl2cGFkZHEJCSR0bXAsJEgxLCRIMQorKworKwlkZWMJCSVlYXgKKysJanoJCS5MZG9uZV9pbml0X3ZwbWFkZDUyCisrCisrCXZwdW5wY2tscWRxCSRSMSwkSDEsJFIxCQkjIDEsMgorKwl2cGJyb2FkY2FzdHEJJXgjJEgxLCV4IyRIMQkJIyAyLDIKKysJdnB1bnBja2xxZHEJJFIyLCRIMiwkUjIKKysJdnBicm9hZGNhc3RxCSV4IyRIMiwleCMkSDIKKysJdnB1bnBja2xxZHEJJFIwLCRIMCwkUjAKKysJdnBicm9hZGNhc3RxCSV4IyRIMCwleCMkSDAKKysKKysJdnBzbGxxCQlcJDIsJFIxLCRTMQkJIyBTMSA9IFIxKjUqNAorKwl2cHNsbHEJCVwkMiwkUjIsJFMyCQkjIFMyID0gUjIqNSo0CisrCXZwYWRkcQkJJFIxLCRTMSwkUzEKKysJdnBhZGRxCQkkUjIsJFMyLCRTMgorKwl2cHNsbHEJCVwkMiwkUzEsJFMxCisrCXZwc2xscQkJXCQyLCRTMiwkUzIKKysKKysJam1wCQkuTG11bF9pbml0X3ZwbWFkZDUyCisrCXVkMgorKworKy5hbGlnbgkzMgorKy5MZG9uZV9pbml0X3ZwbWFkZDUyOgorKwl2aW5zZXJ0aTEyOAlcJDEsJXgjJFIxLCRIMSwkUjEJIyAxLDIsMyw0CisrCXZpbnNlcnRpMTI4CVwkMSwleCMkUjIsJEgyLCRSMgorKwl2aW5zZXJ0aTEyOAlcJDEsJXgjJFIwLCRIMCwkUjAKKysKKysJdnBlcm1xCQlcJDBiMTEwMTEwMDAsJFIxLCRSMQkjIDEsMywyLDQKKysJdnBlcm1xCQlcJDBiMTEwMTEwMDAsJFIyLCRSMgorKwl2cGVybXEJCVwkMGIxMTAxMTAwMCwkUjAsJFIwCisrCisrCXZwc2xscQkJXCQyLCRSMSwkUzEJCSMgUzEgPSBSMSo1KjQKKysJdnBhZGRxCQkkUjEsJFMxLCRTMQorKwl2cHNsbHEJCVwkMiwkUzEsJFMxCisrCisrCXZtb3ZxCQkwKCRjdHgpLCV4IyRIMAkJIyBsb2FkIGN1cnJlbnQgaGFzaCB2YWx1ZQorKwl2bW92cQkJOCgkY3R4KSwleCMkSDEKKysJdm1vdnEJCTE2KCRjdHgpLCV4IyRIMgorKworKwl0ZXN0CQlcJDMsJGxlbgkJIyBpcyBsZW5ndGggNCpuKzI/CisrCWpuegkJLkxkb25lX2luaXRfdnBtYWRkNTJfMngKKysKKysJdm1vdmRxdTY0CSRSMCw2NCgkY3R4KQkJIyBzYXZlIGtleSBwb3dlcnMKKysJdnBicm9hZGNhc3RxCSV4IyRSMCwkUjAJCSMgYnJvYWRjYXN0IDR0aCBwb3dlcgorKwl2bW92ZHF1NjQJJFIxLDk2KCRjdHgpCisrCXZwYnJvYWRjYXN0cQkleCMkUjEsJFIxCisrCXZtb3ZkcXU2NAkkUjIsMTI4KCRjdHgpCisrCXZwYnJvYWRjYXN0cQkleCMkUjIsJFIyCisrCXZtb3ZkcXU2NAkkUzEsMTYwKCRjdHgpCisrCXZwYnJvYWRjYXN0cQkleCMkUzEsJFMxCisrCisrCWptcAkJLkxibG9ja3NfdnBtYWRkNTJfNHhfa2V5X2xvYWRlZAorKwl1ZDIKKysKKysuYWxpZ24JMzIKKysuTGRvbmVfaW5pdF92cG1hZGQ1Ml8yeDoKKysJdm1vdmRxdTY0CSRSMCw2NCgkY3R4KQkJIyBzYXZlIGtleSBwb3dlcnMKKysJdnBzcmxkcQkJXCQ4LCRSMCwkUjAJCSMgMC0xLTAtMgorKwl2bW92ZHF1NjQJJFIxLDk2KCRjdHgpCisrCXZwc3JsZHEJCVwkOCwkUjEsJFIxCisrCXZtb3ZkcXU2NAkkUjIsMTI4KCRjdHgpCisrCXZwc3JsZHEJCVwkOCwkUjIsJFIyCisrCXZtb3ZkcXU2NAkkUzEsMTYwKCRjdHgpCisrCXZwc3JsZHEJCVwkOCwkUzEsJFMxCisrCWptcAkJLkxibG9ja3NfdnBtYWRkNTJfMnhfa2V5X2xvYWRlZAorKwl1ZDIKKysKKysuYWxpZ24JMzIKKysuTGJsb2Nrc192cG1hZGQ1Ml8yeF9kbzoKKysJdm1vdmRxdTY0CTEyOCs4KCRjdHgpLCR7UjJ9eyVrMX17en0jIGxvYWQgMm5kIGFuZCAxc3Qga2V5IHBvd2VycworKwl2bW92ZHF1NjQJMTYwKzgoJGN0eCksJHtTMX17JWsxfXt6fQorKwl2bW92ZHF1NjQJNjQrOCgkY3R4KSwke1IwfXslazF9e3p9CisrCXZtb3ZkcXU2NAk5Nis4KCRjdHgpLCR7UjF9eyVrMX17en0KKysKKysuTGJsb2Nrc192cG1hZGQ1Ml8yeF9rZXlfbG9hZGVkOgorKwl2bW92ZHF1NjQJMTYqMCgkaW5wKSwkVDIJCSMgbG9hZCBkYXRhCisrCXZweG9ycQkJJFQzLCRUMywkVDMKKysJbGVhCQkxNioyKCRpbnApLCRpbnAKKysKKysJdnB1bnBja2xxZHEJJFQzLCRUMiwkVDEJCSMgdHJhbnNwb3NlIGRhdGEKKysJdnB1bnBja2hxZHEJJFQzLCRUMiwkVDMKKysKKysJIyBhdCB0aGlzIHBvaW50IDY0LWJpdCBsYW5lcyBhcmUgb3JkZXJlZCBhcyB4LTEteC0wCisrCisrCXZwc3JscQkJXCQyNCwkVDMsJFQyCQkjIHNwbGF0IHRoZSBkYXRhCisrCXZwb3JxCQkkUEFELCRUMiwkVDIKKysJIHZwYWRkcQkJJFQyLCRIMiwkSDIJCSMgYWNjdW11bGF0ZSBpbnB1dAorKwl2cGFuZHEJCSRtYXNrNDQsJFQxLCRUMAorKwl2cHNybHEJCVwkNDQsJFQxLCRUMQorKwl2cHNsbHEJCVwkMjAsJFQzLCRUMworKwl2cG9ycQkJJFQzLCRUMSwkVDEKKysJdnBhbmRxCQkkbWFzazQ0LCRUMSwkVDEKKysKKysJam1wCQkuTHRhaWxfdnBtYWRkNTJfMngKKysJdWQyCisrCisrLmFsaWduCTMyCisrLkxvb3BfdnBtYWRkNTJfNHg6CisrCSN2cGFkZHEJCSRUMiwkSDIsJEgyCQkjIGFjY3VtdWxhdGUgaW5wdXQKKysJdnBhZGRxCQkkVDAsJEgwLCRIMAorKwl2cGFkZHEJCSRUMSwkSDEsJEgxCisrCisrCXZweG9ycQkJJEQwbG8sJEQwbG8sJEQwbG8KKysJdnBtYWRkNTJsdXEJJEgyLCRTMSwkRDBsbworKwl2cHhvcnEJCSREMGhpLCREMGhpLCREMGhpCisrCXZwbWFkZDUyaHVxCSRIMiwkUzEsJEQwaGkKKysJdnB4b3JxCQkkRDFsbywkRDFsbywkRDFsbworKwl2cG1hZGQ1Mmx1cQkkSDIsJFMyLCREMWxvCisrCXZweG9ycQkJJEQxaGksJEQxaGksJEQxaGkKKysJdnBtYWRkNTJodXEJJEgyLCRTMiwkRDFoaQorKwl2cHhvcnEJCSREMmxvLCREMmxvLCREMmxvCisrCXZwbWFkZDUybHVxCSRIMiwkUjAsJEQybG8KKysJdnB4b3JxCQkkRDJoaSwkRDJoaSwkRDJoaQorKwl2cG1hZGQ1Mmh1cQkkSDIsJFIwLCREMmhpCisrCisrCSB2bW92ZHF1NjQJMTYqMCgkaW5wKSwkVDIJCSMgbG9hZCBkYXRhCisrCSB2bW92ZHF1NjQJMTYqMigkaW5wKSwkVDMKKysJIGxlYQkJMTYqNCgkaW5wKSwkaW5wCisrCXZwbWFkZDUybHVxCSRIMCwkUjAsJEQwbG8KKysJdnBtYWRkNTJodXEJJEgwLCRSMCwkRDBoaQorKwl2cG1hZGQ1Mmx1cQkkSDAsJFIxLCREMWxvCisrCXZwbWFkZDUyaHVxCSRIMCwkUjEsJEQxaGkKKysJdnBtYWRkNTJsdXEJJEgwLCRSMiwkRDJsbworKwl2cG1hZGQ1Mmh1cQkkSDAsJFIyLCREMmhpCisrCisrCSB2cHVucGNrbHFkcQkkVDMsJFQyLCRUMQkJIyB0cmFuc3Bvc2UgZGF0YQorKwkgdnB1bnBja2hxZHEJJFQzLCRUMiwkVDMKKysJdnBtYWRkNTJsdXEJJEgxLCRTMiwkRDBsbworKwl2cG1hZGQ1Mmh1cQkkSDEsJFMyLCREMGhpCisrCXZwbWFkZDUybHVxCSRIMSwkUjAsJEQxbG8KKysJdnBtYWRkNTJodXEJJEgxLCRSMCwkRDFoaQorKwl2cG1hZGQ1Mmx1cQkkSDEsJFIxLCREMmxvCisrCXZwbWFkZDUyaHVxCSRIMSwkUjEsJEQyaGkKKysKKysJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKwkjIHBhcnRpYWwgcmVkdWN0aW9uIChpbnRlcmxlYXZlZCB3aXRoIGRhdGEgc3BsYXQpCisrCXZwc3JscQkJXCQ0NCwkRDBsbywkdG1wCisrCXZwc2xscQkJXCQ4LCREMGhpLCREMGhpCisrCXZwYW5kcQkJJG1hc2s0NCwkRDBsbywkSDAKKysJdnBhZGRxCQkkdG1wLCREMGhpLCREMGhpCisrCisrCSB2cHNybHEJCVwkMjQsJFQzLCRUMgorKwkgdnBvcnEJCSRQQUQsJFQyLCRUMgorKwl2cGFkZHEJCSREMGhpLCREMWxvLCREMWxvCisrCisrCXZwc3JscQkJXCQ0NCwkRDFsbywkdG1wCisrCXZwc2xscQkJXCQ4LCREMWhpLCREMWhpCisrCXZwYW5kcQkJJG1hc2s0NCwkRDFsbywkSDEKKysJdnBhZGRxCQkkdG1wLCREMWhpLCREMWhpCisrCisrCSB2cGFuZHEJCSRtYXNrNDQsJFQxLCRUMAorKwkgdnBzcmxxCQlcJDQ0LCRUMSwkVDEKKysJIHZwc2xscQkJXCQyMCwkVDMsJFQzCisrCXZwYWRkcQkJJEQxaGksJEQybG8sJEQybG8KKysKKysJdnBzcmxxCQlcJDQyLCREMmxvLCR0bXAKKysJdnBzbGxxCQlcJDEwLCREMmhpLCREMmhpCisrCXZwYW5kcQkJJG1hc2s0MiwkRDJsbywkSDIKKysJdnBhZGRxCQkkdG1wLCREMmhpLCREMmhpCisrCisrCSAgdnBhZGRxCSRUMiwkSDIsJEgyCQkjIGFjY3VtdWxhdGUgaW5wdXQKKysJdnBhZGRxCQkkRDJoaSwkSDAsJEgwCisrCXZwc2xscQkJXCQyLCREMmhpLCREMmhpCisrCisrCXZwYWRkcQkJJEQyaGksJEgwLCRIMAorKwkgdnBvcnEJCSRUMywkVDEsJFQxCisrCSB2cGFuZHEJCSRtYXNrNDQsJFQxLCRUMQorKworKwl2cHNybHEJCVwkNDQsJEgwLCR0bXAJCSMgYWRkaXRpb25hbCBzdGVwCisrCXZwYW5kcQkJJG1hc2s0NCwkSDAsJEgwCisrCisrCXZwYWRkcQkJJHRtcCwkSDEsJEgxCisrCisrCXN1YgkJXCQ0LCRsZW4JCSMgbGVuLT02NAorKwlqbnoJCS5Mb29wX3ZwbWFkZDUyXzR4CisrCisrLkx0YWlsX3ZwbWFkZDUyXzR4OgorKwl2bW92ZHF1NjQJMTI4KCRjdHgpLCRSMgkJIyBsb2FkIGFsbCBrZXkgcG93ZXJzCisrCXZtb3ZkcXU2NAkxNjAoJGN0eCksJFMxCisrCXZtb3ZkcXU2NAk2NCgkY3R4KSwkUjAKKysJdm1vdmRxdTY0CTk2KCRjdHgpLCRSMQorKworKy5MdGFpbF92cG1hZGQ1Ml8yeDoKKysJdnBzbGxxCQlcJDIsJFIyLCRTMgkJIyBTMiA9IFIyKjUqNAorKwl2cGFkZHEJCSRSMiwkUzIsJFMyCisrCXZwc2xscQkJXCQyLCRTMiwkUzIKKysKKysJI3ZwYWRkcQkJJFQyLCRIMiwkSDIJCSMgYWNjdW11bGF0ZSBpbnB1dAorKwl2cGFkZHEJCSRUMCwkSDAsJEgwCisrCXZwYWRkcQkJJFQxLCRIMSwkSDEKKysKKysJdnB4b3JxCQkkRDBsbywkRDBsbywkRDBsbworKwl2cG1hZGQ1Mmx1cQkkSDIsJFMxLCREMGxvCisrCXZweG9ycQkJJEQwaGksJEQwaGksJEQwaGkKKysJdnBtYWRkNTJodXEJJEgyLCRTMSwkRDBoaQorKwl2cHhvcnEJCSREMWxvLCREMWxvLCREMWxvCisrCXZwbWFkZDUybHVxCSRIMiwkUzIsJEQxbG8KKysJdnB4b3JxCQkkRDFoaSwkRDFoaSwkRDFoaQorKwl2cG1hZGQ1Mmh1cQkkSDIsJFMyLCREMWhpCisrCXZweG9ycQkJJEQybG8sJEQybG8sJEQybG8KKysJdnBtYWRkNTJsdXEJJEgyLCRSMCwkRDJsbworKwl2cHhvcnEJCSREMmhpLCREMmhpLCREMmhpCisrCXZwbWFkZDUyaHVxCSRIMiwkUjAsJEQyaGkKKysKKysJdnBtYWRkNTJsdXEJJEgwLCRSMCwkRDBsbworKwl2cG1hZGQ1Mmh1cQkkSDAsJFIwLCREMGhpCisrCXZwbWFkZDUybHVxCSRIMCwkUjEsJEQxbG8KKysJdnBtYWRkNTJodXEJJEgwLCRSMSwkRDFoaQorKwl2cG1hZGQ1Mmx1cQkkSDAsJFIyLCREMmxvCisrCXZwbWFkZDUyaHVxCSRIMCwkUjIsJEQyaGkKKysKKysJdnBtYWRkNTJsdXEJJEgxLCRTMiwkRDBsbworKwl2cG1hZGQ1Mmh1cQkkSDEsJFMyLCREMGhpCisrCXZwbWFkZDUybHVxCSRIMSwkUjAsJEQxbG8KKysJdnBtYWRkNTJodXEJJEgxLCRSMCwkRDFoaQorKwl2cG1hZGQ1Mmx1cQkkSDEsJFIxLCREMmxvCisrCXZwbWFkZDUyaHVxCSRIMSwkUjEsJEQyaGkKKysKKysJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKwkjIGhvcml6b250YWwgYWRkaXRpb24KKysKKysJbW92CQlcJDEsJWVheAorKwlrbW92dwkJJWVheCwlazEKKysJdnBzcmxkcQkJXCQ4LCREMGxvLCRUMAorKwl2cHNybGRxCQlcJDgsJEQwaGksJEgwCisrCXZwc3JsZHEJCVwkOCwkRDFsbywkVDEKKysJdnBzcmxkcQkJXCQ4LCREMWhpLCRIMQorKwl2cGFkZHEJCSRUMCwkRDBsbywkRDBsbworKwl2cGFkZHEJCSRIMCwkRDBoaSwkRDBoaQorKwl2cHNybGRxCQlcJDgsJEQybG8sJFQyCisrCXZwc3JsZHEJCVwkOCwkRDJoaSwkSDIKKysJdnBhZGRxCQkkVDEsJEQxbG8sJEQxbG8KKysJdnBhZGRxCQkkSDEsJEQxaGksJEQxaGkKKysJIHZwZXJtcQkJXCQweDIsJEQwbG8sJFQwCisrCSB2cGVybXEJCVwkMHgyLCREMGhpLCRIMAorKwl2cGFkZHEJCSRUMiwkRDJsbywkRDJsbworKwl2cGFkZHEJCSRIMiwkRDJoaSwkRDJoaQorKworKwl2cGVybXEJCVwkMHgyLCREMWxvLCRUMQorKwl2cGVybXEJCVwkMHgyLCREMWhpLCRIMQorKwl2cGFkZHEJCSRUMCwkRDBsbywke0QwbG99eyVrMX17en0KKysJdnBhZGRxCQkkSDAsJEQwaGksJHtEMGhpfXslazF9e3p9CisrCXZwZXJtcQkJXCQweDIsJEQybG8sJFQyCisrCXZwZXJtcQkJXCQweDIsJEQyaGksJEgyCisrCXZwYWRkcQkJJFQxLCREMWxvLCR7RDFsb317JWsxfXt6fQorKwl2cGFkZHEJCSRIMSwkRDFoaSwke0QxaGl9eyVrMX17en0KKysJdnBhZGRxCQkkVDIsJEQybG8sJHtEMmxvfXslazF9e3p9CisrCXZwYWRkcQkJJEgyLCREMmhpLCR7RDJoaX17JWsxfXt6fQorKworKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrCSMgcGFydGlhbCByZWR1Y3Rpb24KKysJdnBzcmxxCQlcJDQ0LCREMGxvLCR0bXAKKysJdnBzbGxxCQlcJDgsJEQwaGksJEQwaGkKKysJdnBhbmRxCQkkbWFzazQ0LCREMGxvLCRIMAorKwl2cGFkZHEJCSR0bXAsJEQwaGksJEQwaGkKKysKKysJdnBhZGRxCQkkRDBoaSwkRDFsbywkRDFsbworKworKwl2cHNybHEJCVwkNDQsJEQxbG8sJHRtcAorKwl2cHNsbHEJCVwkOCwkRDFoaSwkRDFoaQorKwl2cGFuZHEJCSRtYXNrNDQsJEQxbG8sJEgxCisrCXZwYWRkcQkJJHRtcCwkRDFoaSwkRDFoaQorKworKwl2cGFkZHEJCSREMWhpLCREMmxvLCREMmxvCisrCisrCXZwc3JscQkJXCQ0MiwkRDJsbywkdG1wCisrCXZwc2xscQkJXCQxMCwkRDJoaSwkRDJoaQorKwl2cGFuZHEJCSRtYXNrNDIsJEQybG8sJEgyCisrCXZwYWRkcQkJJHRtcCwkRDJoaSwkRDJoaQorKworKwl2cGFkZHEJCSREMmhpLCRIMCwkSDAKKysJdnBzbGxxCQlcJDIsJEQyaGksJEQyaGkKKysKKysJdnBhZGRxCQkkRDJoaSwkSDAsJEgwCisrCisrCXZwc3JscQkJXCQ0NCwkSDAsJHRtcAkJIyBhZGRpdGlvbmFsIHN0ZXAKKysJdnBhbmRxCQkkbWFzazQ0LCRIMCwkSDAKKysKKysJdnBhZGRxCQkkdG1wLCRIMSwkSDEKKysJCQkJCQkjIGF0IHRoaXMgcG9pbnQgJGxlbiBpcworKwkJCQkJCSMgZWl0aGVyIDQqbisyIG9yIDAuLi4KKysJc3ViCQlcJDIsJGxlbgkJIyBsZW4tPTMyCisrCWphCQkuTGJsb2Nrc192cG1hZGQ1Ml80eF9kbworKworKwl2bW92cQkJJXgjJEgwLDAoJGN0eCkKKysJdm1vdnEJCSV4IyRIMSw4KCRjdHgpCisrCXZtb3ZxCQkleCMkSDIsMTYoJGN0eCkKKysJdnplcm9hbGwKKysKKysuTG5vX2RhdGFfdnBtYWRkNTJfNHg6CisrCXJldAorKy5zaXplCXBvbHkxMzA1X2Jsb2Nrc192cG1hZGQ1Ml80eCwuLXBvbHkxMzA1X2Jsb2Nrc192cG1hZGQ1Ml80eAorK19fXworK30KKyt7CisrIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrIyBBcyBpbXBsaWVkIGJ5IGl0cyBuYW1lIDh4IHN1YnJvdXRpbmUgcHJvY2Vzc2VzIDggYmxvY2tzIGluIHBhcmFsbGVsLi4uCisrIyBUaGlzIGlzIGludGVybWVkaWF0ZSB2ZXJzaW9uLCBhcyBpdCdzIHVzZWQgb25seSBpbiBjYXNlcyB3aGVuIGlucHV0CisrIyBsZW5ndGggaXMgZWl0aGVyIDgqbiwgOCpuKzEgb3IgOCpuKzIuLi4KKysKKytteSAoJEgwLCRIMSwkSDIsJFIwLCRSMSwkUjIsJFMxLCRTMikgPSBtYXAoIiV5bW0kXyIsKDAuLjUsMTYsMTcpKTsKKytteSAoJEQwbG8sJEQwaGksJEQxbG8sJEQxaGksJEQybG8sJEQyaGkpID0gbWFwKCIleW1tJF8iLCgxOC4uMjMpKTsKKytteSAoJFQwLCRUMSwkVDIsJFQzLCRtYXNrNDQsJG1hc2s0MiwkdG1wLCRQQUQpID0gbWFwKCIleW1tJF8iLCgyNC4uMzEpKTsKKytteSAoJFJSMCwkUlIxLCRSUjIsJFNTMSwkU1MyKSA9IG1hcCgiJXltbSRfIiwoNi4uMTApKTsKKysKKyskY29kZS49PDxfX187CisrLnR5cGUJcG9seTEzMDVfYmxvY2tzX3ZwbWFkZDUyXzh4LFxAZnVuY3Rpb24sNAorKy5hbGlnbgkzMgorK3BvbHkxMzA1X2Jsb2Nrc192cG1hZGQ1Ml84eDoKKysJc2hyCVwkNCwkbGVuCisrCWp6CS5Mbm9fZGF0YV92cG1hZGQ1Ml84eAkJIyB0b28gc2hvcnQKKysKKysJc2hsCVwkNDAsJHBhZGJpdAorKwltb3YJNjQoJGN0eCksJXI4CQkJIyBwZWVrIG9uIHBvd2VyIG9mIHRoZSBrZXkKKysKKysJdm1vdmRxYTY0CS5MeF9tYXNrNDQoJXJpcCksJG1hc2s0NAorKwl2bW92ZHFhNjQJLkx4X21hc2s0MiglcmlwKSwkbWFzazQyCisrCisrCXRlc3QJJXI4LCVyOAkJCQkjIGlzIHBvd2VyIHZhbHVlIGltcG9zc2libGU/CisrCWpzCS5MaW5pdF92cG1hZGQ1MgkJCSMgaWYgaXQgaXMsIHRoZW4gaW5pdCBSWzRdCisrCisrCXZtb3ZxCTAoJGN0eCksJXgjJEgwCQkJIyBsb2FkIGN1cnJlbnQgaGFzaCB2YWx1ZQorKwl2bW92cQk4KCRjdHgpLCV4IyRIMQorKwl2bW92cQkxNigkY3R4KSwleCMkSDIKKysKKysuTGJsb2Nrc192cG1hZGQ1Ml84eDoKKysJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKwkjIGZpc3Qgd2UgY2FsY3VsYXRlIG1vcmUga2V5IHBvd2VycworKworKwl2bW92ZHF1NjQJMTI4KCRjdHgpLCRSMgkJIyBsb2FkIDEtMy0yLTQgcG93ZXJzCisrCXZtb3ZkcXU2NAkxNjAoJGN0eCksJFMxCisrCXZtb3ZkcXU2NAk2NCgkY3R4KSwkUjAKKysJdm1vdmRxdTY0CTk2KCRjdHgpLCRSMQorKworKwl2cHNsbHEJCVwkMiwkUjIsJFMyCQkjIFMyID0gUjIqNSo0CisrCXZwYWRkcQkJJFIyLCRTMiwkUzIKKysJdnBzbGxxCQlcJDIsJFMyLCRTMgorKworKwl2cGJyb2FkY2FzdHEJJXgjJFIyLCRSUjIJCSMgYnJvYWRjYXN0IDR0aCBwb3dlcgorKwl2cGJyb2FkY2FzdHEJJXgjJFIwLCRSUjAKKysJdnBicm9hZGNhc3RxCSV4IyRSMSwkUlIxCisrCisrCXZweG9ycQkJJEQwbG8sJEQwbG8sJEQwbG8KKysJdnBtYWRkNTJsdXEJJFJSMiwkUzEsJEQwbG8KKysJdnB4b3JxCQkkRDBoaSwkRDBoaSwkRDBoaQorKwl2cG1hZGQ1Mmh1cQkkUlIyLCRTMSwkRDBoaQorKwl2cHhvcnEJCSREMWxvLCREMWxvLCREMWxvCisrCXZwbWFkZDUybHVxCSRSUjIsJFMyLCREMWxvCisrCXZweG9ycQkJJEQxaGksJEQxaGksJEQxaGkKKysJdnBtYWRkNTJodXEJJFJSMiwkUzIsJEQxaGkKKysJdnB4b3JxCQkkRDJsbywkRDJsbywkRDJsbworKwl2cG1hZGQ1Mmx1cQkkUlIyLCRSMCwkRDJsbworKwl2cHhvcnEJCSREMmhpLCREMmhpLCREMmhpCisrCXZwbWFkZDUyaHVxCSRSUjIsJFIwLCREMmhpCisrCisrCXZwbWFkZDUybHVxCSRSUjAsJFIwLCREMGxvCisrCXZwbWFkZDUyaHVxCSRSUjAsJFIwLCREMGhpCisrCXZwbWFkZDUybHVxCSRSUjAsJFIxLCREMWxvCisrCXZwbWFkZDUyaHVxCSRSUjAsJFIxLCREMWhpCisrCXZwbWFkZDUybHVxCSRSUjAsJFIyLCREMmxvCisrCXZwbWFkZDUyaHVxCSRSUjAsJFIyLCREMmhpCisrCisrCXZwbWFkZDUybHVxCSRSUjEsJFMyLCREMGxvCisrCXZwbWFkZDUyaHVxCSRSUjEsJFMyLCREMGhpCisrCXZwbWFkZDUybHVxCSRSUjEsJFIwLCREMWxvCisrCXZwbWFkZDUyaHVxCSRSUjEsJFIwLCREMWhpCisrCXZwbWFkZDUybHVxCSRSUjEsJFIxLCREMmxvCisrCXZwbWFkZDUyaHVxCSRSUjEsJFIxLCREMmhpCisrCisrCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysJIyBwYXJ0aWFsIHJlZHVjdGlvbgorKwl2cHNybHEJCVwkNDQsJEQwbG8sJHRtcAorKwl2cHNsbHEJCVwkOCwkRDBoaSwkRDBoaQorKwl2cGFuZHEJCSRtYXNrNDQsJEQwbG8sJFJSMAorKwl2cGFkZHEJCSR0bXAsJEQwaGksJEQwaGkKKysKKysJdnBhZGRxCQkkRDBoaSwkRDFsbywkRDFsbworKworKwl2cHNybHEJCVwkNDQsJEQxbG8sJHRtcAorKwl2cHNsbHEJCVwkOCwkRDFoaSwkRDFoaQorKwl2cGFuZHEJCSRtYXNrNDQsJEQxbG8sJFJSMQorKwl2cGFkZHEJCSR0bXAsJEQxaGksJEQxaGkKKysKKysJdnBhZGRxCQkkRDFoaSwkRDJsbywkRDJsbworKworKwl2cHNybHEJCVwkNDIsJEQybG8sJHRtcAorKwl2cHNsbHEJCVwkMTAsJEQyaGksJEQyaGkKKysJdnBhbmRxCQkkbWFzazQyLCREMmxvLCRSUjIKKysJdnBhZGRxCQkkdG1wLCREMmhpLCREMmhpCisrCisrCXZwYWRkcQkJJEQyaGksJFJSMCwkUlIwCisrCXZwc2xscQkJXCQyLCREMmhpLCREMmhpCisrCisrCXZwYWRkcQkJJEQyaGksJFJSMCwkUlIwCisrCisrCXZwc3JscQkJXCQ0NCwkUlIwLCR0bXAJCSMgYWRkaXRpb25hbCBzdGVwCisrCXZwYW5kcQkJJG1hc2s0NCwkUlIwLCRSUjAKKysKKysJdnBhZGRxCQkkdG1wLCRSUjEsJFJSMQorKworKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrCSMgQXQgdGhpcyBwb2ludCBSeCBob2xkcyAxMzI0IHBvd2VycywgUlJ4IC0gNTc2OCwgYW5kIHRoZSBnb2FsCisrCSMgaXMgMTUyNjM3NDgsIHdoaWNoIHJlZmxlY3RzIGhvdyBkYXRhIGlzIGxvYWRlZC4uLgorKworKwl2cHVucGNrbHFkcQkkUjIsJFJSMiwkVDIJCSMgMzc0OAorKwl2cHVucGNraHFkcQkkUjIsJFJSMiwkUjIJCSMgMTUyNgorKwl2cHVucGNrbHFkcQkkUjAsJFJSMCwkVDAKKysJdnB1bnBja2hxZHEJJFIwLCRSUjAsJFIwCisrCXZwdW5wY2tscWRxCSRSMSwkUlIxLCRUMQorKwl2cHVucGNraHFkcQkkUjEsJFJSMSwkUjEKKytfX18KKysjIyMjIyMjIyBzd2l0Y2ggdG8gJXptbQorK21hcChzLyV5LyV6LywgJEgwLCRIMSwkSDIsJFIwLCRSMSwkUjIsJFMxLCRTMik7CisrbWFwKHMvJXkvJXovLCAkRDBsbywkRDBoaSwkRDFsbywkRDFoaSwkRDJsbywkRDJoaSk7CisrbWFwKHMvJXkvJXovLCAkVDAsJFQxLCRUMiwkVDMsJG1hc2s0NCwkbWFzazQyLCR0bXAsJFBBRCk7CisrbWFwKHMvJXkvJXovLCAkUlIwLCRSUjEsJFJSMiwkU1MxLCRTUzIpOworKworKyRjb2RlLj08PF9fXzsKKysJdnNodWZpNjR4MglcJDB4NDQsJFIyLCRUMiwkUlIyCSMgMTUyNjM3NDgKKysJdnNodWZpNjR4MglcJDB4NDQsJFIwLCRUMCwkUlIwCisrCXZzaHVmaTY0eDIJXCQweDQ0LCRSMSwkVDEsJFJSMQorKworKwl2bW92ZHF1NjQJMTYqMCgkaW5wKSwkVDIJCSMgbG9hZCBkYXRhCisrCXZtb3ZkcXU2NAkxNio0KCRpbnApLCRUMworKwlsZWEJCTE2KjgoJGlucCksJGlucAorKworKwl2cHNsbHEJCVwkMiwkUlIyLCRTUzIJCSMgUzIgPSBSMio1KjQKKysJdnBzbGxxCQlcJDIsJFJSMSwkU1MxCQkjIFMxID0gUjEqNSo0CisrCXZwYWRkcQkJJFJSMiwkU1MyLCRTUzIKKysJdnBhZGRxCQkkUlIxLCRTUzEsJFNTMQorKwl2cHNsbHEJCVwkMiwkU1MyLCRTUzIKKysJdnBzbGxxCQlcJDIsJFNTMSwkU1MxCisrCisrCXZwYnJvYWRjYXN0cQkkcGFkYml0LCRQQUQKKysJdnBicm9hZGNhc3RxCSV4IyRtYXNrNDQsJG1hc2s0NAorKwl2cGJyb2FkY2FzdHEJJXgjJG1hc2s0MiwkbWFzazQyCisrCisrCXZwYnJvYWRjYXN0cQkleCMkU1MxLCRTMQkJIyBicm9hZGNhc3QgOHRoIHBvd2VyCisrCXZwYnJvYWRjYXN0cQkleCMkU1MyLCRTMgorKwl2cGJyb2FkY2FzdHEJJXgjJFJSMCwkUjAKKysJdnBicm9hZGNhc3RxCSV4IyRSUjEsJFIxCisrCXZwYnJvYWRjYXN0cQkleCMkUlIyLCRSMgorKworKwl2cHVucGNrbHFkcQkkVDMsJFQyLCRUMQkJIyB0cmFuc3Bvc2UgZGF0YQorKwl2cHVucGNraHFkcQkkVDMsJFQyLCRUMworKworKwkjIGF0IHRoaXMgcG9pbnQgNjQtYml0IGxhbmVzIGFyZSBvcmRlcmVkIGFzIDczNjI1MTQwCisrCisrCXZwc3JscQkJXCQyNCwkVDMsJFQyCQkjIHNwbGF0IHRoZSBkYXRhCisrCXZwb3JxCQkkUEFELCRUMiwkVDIKKysJIHZwYWRkcQkJJFQyLCRIMiwkSDIJCSMgYWNjdW11bGF0ZSBpbnB1dAorKwl2cGFuZHEJCSRtYXNrNDQsJFQxLCRUMAorKwl2cHNybHEJCVwkNDQsJFQxLCRUMQorKwl2cHNsbHEJCVwkMjAsJFQzLCRUMworKwl2cG9ycQkJJFQzLCRUMSwkVDEKKysJdnBhbmRxCQkkbWFzazQ0LCRUMSwkVDEKKysKKysJc3ViCQlcJDgsJGxlbgorKwlqegkJLkx0YWlsX3ZwbWFkZDUyXzh4CisrCWptcAkJLkxvb3BfdnBtYWRkNTJfOHgKKysKKysuYWxpZ24JMzIKKysuTG9vcF92cG1hZGQ1Ml84eDoKKysJI3ZwYWRkcQkJJFQyLCRIMiwkSDIJCSMgYWNjdW11bGF0ZSBpbnB1dAorKwl2cGFkZHEJCSRUMCwkSDAsJEgwCisrCXZwYWRkcQkJJFQxLCRIMSwkSDEKKysKKysJdnB4b3JxCQkkRDBsbywkRDBsbywkRDBsbworKwl2cG1hZGQ1Mmx1cQkkSDIsJFMxLCREMGxvCisrCXZweG9ycQkJJEQwaGksJEQwaGksJEQwaGkKKysJdnBtYWRkNTJodXEJJEgyLCRTMSwkRDBoaQorKwl2cHhvcnEJCSREMWxvLCREMWxvLCREMWxvCisrCXZwbWFkZDUybHVxCSRIMiwkUzIsJEQxbG8KKysJdnB4b3JxCQkkRDFoaSwkRDFoaSwkRDFoaQorKwl2cG1hZGQ1Mmh1cQkkSDIsJFMyLCREMWhpCisrCXZweG9ycQkJJEQybG8sJEQybG8sJEQybG8KKysJdnBtYWRkNTJsdXEJJEgyLCRSMCwkRDJsbworKwl2cHhvcnEJCSREMmhpLCREMmhpLCREMmhpCisrCXZwbWFkZDUyaHVxCSRIMiwkUjAsJEQyaGkKKysKKysJIHZtb3ZkcXU2NAkxNiowKCRpbnApLCRUMgkJIyBsb2FkIGRhdGEKKysJIHZtb3ZkcXU2NAkxNio0KCRpbnApLCRUMworKwkgbGVhCQkxNio4KCRpbnApLCRpbnAKKysJdnBtYWRkNTJsdXEJJEgwLCRSMCwkRDBsbworKwl2cG1hZGQ1Mmh1cQkkSDAsJFIwLCREMGhpCisrCXZwbWFkZDUybHVxCSRIMCwkUjEsJEQxbG8KKysJdnBtYWRkNTJodXEJJEgwLCRSMSwkRDFoaQorKwl2cG1hZGQ1Mmx1cQkkSDAsJFIyLCREMmxvCisrCXZwbWFkZDUyaHVxCSRIMCwkUjIsJEQyaGkKKysKKysJIHZwdW5wY2tscWRxCSRUMywkVDIsJFQxCQkjIHRyYW5zcG9zZSBkYXRhCisrCSB2cHVucGNraHFkcQkkVDMsJFQyLCRUMworKwl2cG1hZGQ1Mmx1cQkkSDEsJFMyLCREMGxvCisrCXZwbWFkZDUyaHVxCSRIMSwkUzIsJEQwaGkKKysJdnBtYWRkNTJsdXEJJEgxLCRSMCwkRDFsbworKwl2cG1hZGQ1Mmh1cQkkSDEsJFIwLCREMWhpCisrCXZwbWFkZDUybHVxCSRIMSwkUjEsJEQybG8KKysJdnBtYWRkNTJodXEJJEgxLCRSMSwkRDJoaQorKworKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrCSMgcGFydGlhbCByZWR1Y3Rpb24gKGludGVybGVhdmVkIHdpdGggZGF0YSBzcGxhdCkKKysJdnBzcmxxCQlcJDQ0LCREMGxvLCR0bXAKKysJdnBzbGxxCQlcJDgsJEQwaGksJEQwaGkKKysJdnBhbmRxCQkkbWFzazQ0LCREMGxvLCRIMAorKwl2cGFkZHEJCSR0bXAsJEQwaGksJEQwaGkKKysKKysJIHZwc3JscQkJXCQyNCwkVDMsJFQyCisrCSB2cG9ycQkJJFBBRCwkVDIsJFQyCisrCXZwYWRkcQkJJEQwaGksJEQxbG8sJEQxbG8KKysKKysJdnBzcmxxCQlcJDQ0LCREMWxvLCR0bXAKKysJdnBzbGxxCQlcJDgsJEQxaGksJEQxaGkKKysJdnBhbmRxCQkkbWFzazQ0LCREMWxvLCRIMQorKwl2cGFkZHEJCSR0bXAsJEQxaGksJEQxaGkKKysKKysJIHZwYW5kcQkJJG1hc2s0NCwkVDEsJFQwCisrCSB2cHNybHEJCVwkNDQsJFQxLCRUMQorKwkgdnBzbGxxCQlcJDIwLCRUMywkVDMKKysJdnBhZGRxCQkkRDFoaSwkRDJsbywkRDJsbworKworKwl2cHNybHEJCVwkNDIsJEQybG8sJHRtcAorKwl2cHNsbHEJCVwkMTAsJEQyaGksJEQyaGkKKysJdnBhbmRxCQkkbWFzazQyLCREMmxvLCRIMgorKwl2cGFkZHEJCSR0bXAsJEQyaGksJEQyaGkKKysKKysJICB2cGFkZHEJJFQyLCRIMiwkSDIJCSMgYWNjdW11bGF0ZSBpbnB1dAorKwl2cGFkZHEJCSREMmhpLCRIMCwkSDAKKysJdnBzbGxxCQlcJDIsJEQyaGksJEQyaGkKKysKKysJdnBhZGRxCQkkRDJoaSwkSDAsJEgwCisrCSB2cG9ycQkJJFQzLCRUMSwkVDEKKysJIHZwYW5kcQkJJG1hc2s0NCwkVDEsJFQxCisrCisrCXZwc3JscQkJXCQ0NCwkSDAsJHRtcAkJIyBhZGRpdGlvbmFsIHN0ZXAKKysJdnBhbmRxCQkkbWFzazQ0LCRIMCwkSDAKKysKKysJdnBhZGRxCQkkdG1wLCRIMSwkSDEKKysKKysJc3ViCQlcJDgsJGxlbgkJIyBsZW4tPTEyOAorKwlqbnoJCS5Mb29wX3ZwbWFkZDUyXzh4CisrCisrLkx0YWlsX3ZwbWFkZDUyXzh4OgorKwkjdnBhZGRxCQkkVDIsJEgyLCRIMgkJIyBhY2N1bXVsYXRlIGlucHV0CisrCXZwYWRkcQkJJFQwLCRIMCwkSDAKKysJdnBhZGRxCQkkVDEsJEgxLCRIMQorKworKwl2cHhvcnEJCSREMGxvLCREMGxvLCREMGxvCisrCXZwbWFkZDUybHVxCSRIMiwkU1MxLCREMGxvCisrCXZweG9ycQkJJEQwaGksJEQwaGksJEQwaGkKKysJdnBtYWRkNTJodXEJJEgyLCRTUzEsJEQwaGkKKysJdnB4b3JxCQkkRDFsbywkRDFsbywkRDFsbworKwl2cG1hZGQ1Mmx1cQkkSDIsJFNTMiwkRDFsbworKwl2cHhvcnEJCSREMWhpLCREMWhpLCREMWhpCisrCXZwbWFkZDUyaHVxCSRIMiwkU1MyLCREMWhpCisrCXZweG9ycQkJJEQybG8sJEQybG8sJEQybG8KKysJdnBtYWRkNTJsdXEJJEgyLCRSUjAsJEQybG8KKysJdnB4b3JxCQkkRDJoaSwkRDJoaSwkRDJoaQorKwl2cG1hZGQ1Mmh1cQkkSDIsJFJSMCwkRDJoaQorKworKwl2cG1hZGQ1Mmx1cQkkSDAsJFJSMCwkRDBsbworKwl2cG1hZGQ1Mmh1cQkkSDAsJFJSMCwkRDBoaQorKwl2cG1hZGQ1Mmx1cQkkSDAsJFJSMSwkRDFsbworKwl2cG1hZGQ1Mmh1cQkkSDAsJFJSMSwkRDFoaQorKwl2cG1hZGQ1Mmx1cQkkSDAsJFJSMiwkRDJsbworKwl2cG1hZGQ1Mmh1cQkkSDAsJFJSMiwkRDJoaQorKworKwl2cG1hZGQ1Mmx1cQkkSDEsJFNTMiwkRDBsbworKwl2cG1hZGQ1Mmh1cQkkSDEsJFNTMiwkRDBoaQorKwl2cG1hZGQ1Mmx1cQkkSDEsJFJSMCwkRDFsbworKwl2cG1hZGQ1Mmh1cQkkSDEsJFJSMCwkRDFoaQorKwl2cG1hZGQ1Mmx1cQkkSDEsJFJSMSwkRDJsbworKwl2cG1hZGQ1Mmh1cQkkSDEsJFJSMSwkRDJoaQorKworKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrCSMgaG9yaXpvbnRhbCBhZGRpdGlvbgorKworKwltb3YJCVwkMSwlZWF4CisrCWttb3Z3CQklZWF4LCVrMQorKwl2cHNybGRxCQlcJDgsJEQwbG8sJFQwCisrCXZwc3JsZHEJCVwkOCwkRDBoaSwkSDAKKysJdnBzcmxkcQkJXCQ4LCREMWxvLCRUMQorKwl2cHNybGRxCQlcJDgsJEQxaGksJEgxCisrCXZwYWRkcQkJJFQwLCREMGxvLCREMGxvCisrCXZwYWRkcQkJJEgwLCREMGhpLCREMGhpCisrCXZwc3JsZHEJCVwkOCwkRDJsbywkVDIKKysJdnBzcmxkcQkJXCQ4LCREMmhpLCRIMgorKwl2cGFkZHEJCSRUMSwkRDFsbywkRDFsbworKwl2cGFkZHEJCSRIMSwkRDFoaSwkRDFoaQorKwkgdnBlcm1xCQlcJDB4MiwkRDBsbywkVDAKKysJIHZwZXJtcQkJXCQweDIsJEQwaGksJEgwCisrCXZwYWRkcQkJJFQyLCREMmxvLCREMmxvCisrCXZwYWRkcQkJJEgyLCREMmhpLCREMmhpCisrCisrCXZwZXJtcQkJXCQweDIsJEQxbG8sJFQxCisrCXZwZXJtcQkJXCQweDIsJEQxaGksJEgxCisrCXZwYWRkcQkJJFQwLCREMGxvLCREMGxvCisrCXZwYWRkcQkJJEgwLCREMGhpLCREMGhpCisrCXZwZXJtcQkJXCQweDIsJEQybG8sJFQyCisrCXZwZXJtcQkJXCQweDIsJEQyaGksJEgyCisrCXZwYWRkcQkJJFQxLCREMWxvLCREMWxvCisrCXZwYWRkcQkJJEgxLCREMWhpLCREMWhpCisrCSB2ZXh0cmFjdGk2NHg0CVwkMSwkRDBsbywleSMkVDAKKysJIHZleHRyYWN0aTY0eDQJXCQxLCREMGhpLCV5IyRIMAorKwl2cGFkZHEJCSRUMiwkRDJsbywkRDJsbworKwl2cGFkZHEJCSRIMiwkRDJoaSwkRDJoaQorKworKwl2ZXh0cmFjdGk2NHg0CVwkMSwkRDFsbywleSMkVDEKKysJdmV4dHJhY3RpNjR4NAlcJDEsJEQxaGksJXkjJEgxCisrCXZleHRyYWN0aTY0eDQJXCQxLCREMmxvLCV5IyRUMgorKwl2ZXh0cmFjdGk2NHg0CVwkMSwkRDJoaSwleSMkSDIKKytfX18KKysjIyMjIyMjIyBzd2l0Y2ggYmFjayB0byAleW1tCisrbWFwKHMvJXovJXkvLCAkSDAsJEgxLCRIMiwkUjAsJFIxLCRSMiwkUzEsJFMyKTsKKyttYXAocy8lei8leS8sICREMGxvLCREMGhpLCREMWxvLCREMWhpLCREMmxvLCREMmhpKTsKKyttYXAocy8lei8leS8sICRUMCwkVDEsJFQyLCRUMywkbWFzazQ0LCRtYXNrNDIsJHRtcCwkUEFEKTsKKysKKyskY29kZS49PDxfX187CisrCXZwYWRkcQkJJFQwLCREMGxvLCR7RDBsb317JWsxfXt6fQorKwl2cGFkZHEJCSRIMCwkRDBoaSwke0QwaGl9eyVrMX17en0KKysJdnBhZGRxCQkkVDEsJEQxbG8sJHtEMWxvfXslazF9e3p9CisrCXZwYWRkcQkJJEgxLCREMWhpLCR7RDFoaX17JWsxfXt6fQorKwl2cGFkZHEJCSRUMiwkRDJsbywke0QybG99eyVrMX17en0KKysJdnBhZGRxCQkkSDIsJEQyaGksJHtEMmhpfXslazF9e3p9CisrCisrCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysJIyBwYXJ0aWFsIHJlZHVjdGlvbgorKwl2cHNybHEJCVwkNDQsJEQwbG8sJHRtcAorKwl2cHNsbHEJCVwkOCwkRDBoaSwkRDBoaQorKwl2cGFuZHEJCSRtYXNrNDQsJEQwbG8sJEgwCisrCXZwYWRkcQkJJHRtcCwkRDBoaSwkRDBoaQorKworKwl2cGFkZHEJCSREMGhpLCREMWxvLCREMWxvCisrCisrCXZwc3JscQkJXCQ0NCwkRDFsbywkdG1wCisrCXZwc2xscQkJXCQ4LCREMWhpLCREMWhpCisrCXZwYW5kcQkJJG1hc2s0NCwkRDFsbywkSDEKKysJdnBhZGRxCQkkdG1wLCREMWhpLCREMWhpCisrCisrCXZwYWRkcQkJJEQxaGksJEQybG8sJEQybG8KKysKKysJdnBzcmxxCQlcJDQyLCREMmxvLCR0bXAKKysJdnBzbGxxCQlcJDEwLCREMmhpLCREMmhpCisrCXZwYW5kcQkJJG1hc2s0MiwkRDJsbywkSDIKKysJdnBhZGRxCQkkdG1wLCREMmhpLCREMmhpCisrCisrCXZwYWRkcQkJJEQyaGksJEgwLCRIMAorKwl2cHNsbHEJCVwkMiwkRDJoaSwkRDJoaQorKworKwl2cGFkZHEJCSREMmhpLCRIMCwkSDAKKysKKysJdnBzcmxxCQlcJDQ0LCRIMCwkdG1wCQkjIGFkZGl0aW9uYWwgc3RlcAorKwl2cGFuZHEJCSRtYXNrNDQsJEgwLCRIMAorKworKwl2cGFkZHEJCSR0bXAsJEgxLCRIMQorKworKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrCisrCXZtb3ZxCQkleCMkSDAsMCgkY3R4KQorKwl2bW92cQkJJXgjJEgxLDgoJGN0eCkKKysJdm1vdnEJCSV4IyRIMiwxNigkY3R4KQorKwl2emVyb2FsbAorKworKy5Mbm9fZGF0YV92cG1hZGQ1Ml84eDoKKysJcmV0CisrLnNpemUJcG9seTEzMDVfYmxvY2tzX3ZwbWFkZDUyXzh4LC4tcG9seTEzMDVfYmxvY2tzX3ZwbWFkZDUyXzh4CisrX19fCisrfQorKyRjb2RlLj08PF9fXzsKKysudHlwZQlwb2x5MTMwNV9lbWl0X2Jhc2UyXzQ0LFxAZnVuY3Rpb24sMworKy5hbGlnbgkzMgorK3BvbHkxMzA1X2VtaXRfYmFzZTJfNDQ6CisrCW1vdgkwKCRjdHgpLCVyOAkjIGxvYWQgaGFzaCB2YWx1ZQorKwltb3YJOCgkY3R4KSwlcjkKKysJbW92CTE2KCRjdHgpLCVyMTAKKysKKysJbW92CSVyOSwlcmF4CisrCXNocglcJDIwLCVyOQorKwlzaGwJXCQ0NCwlcmF4CisrCW1vdgklcjEwLCVyY3gKKysJc2hyCVwkNDAsJXIxMAorKwlzaGwJXCQyNCwlcmN4CisrCisrCWFkZAklcmF4LCVyOAorKwlhZGMJJXJjeCwlcjkKKysJYWRjCVwkMCwlcjEwCisrCisrCW1vdgklcjgsJXJheAorKwlhZGQJXCQ1LCVyOAkJIyBjb21wYXJlIHRvIG1vZHVsdXMKKysJbW92CSVyOSwlcmN4CisrCWFkYwlcJDAsJXI5CisrCWFkYwlcJDAsJXIxMAorKwlzaHIJXCQyLCVyMTAJIyBkaWQgMTMwLWJpdCB2YWx1ZSBvdmVyZmxvdz8KKysJY21vdm56CSVyOCwlcmF4CisrCWNtb3ZuegklcjksJXJjeAorKworKwlhZGQJMCgkbm9uY2UpLCVyYXgJIyBhY2N1bXVsYXRlIG5vbmNlCisrCWFkYwk4KCRub25jZSksJXJjeAorKwltb3YJJXJheCwwKCRtYWMpCSMgd3JpdGUgcmVzdWx0CisrCW1vdgklcmN4LDgoJG1hYykKKysKKysJcmV0CisrLnNpemUJcG9seTEzMDVfZW1pdF9iYXNlMl80NCwuLXBvbHkxMzA1X2VtaXRfYmFzZTJfNDQKKytfX18KKyt9CX0JfQorKyRjb2RlLj08PF9fXzsKKysuYWxpZ24JNjQKKysuTGNvbnN0OgorKy5MbWFzazI0OgorKy5sb25nCTB4MGZmZmZmZiwwLDB4MGZmZmZmZiwwLDB4MGZmZmZmZiwwLDB4MGZmZmZmZiwwCisrLkwxMjk6CisrLmxvbmcJYDE8PDI0YCwwLGAxPDwyNGAsMCxgMTw8MjRgLDAsYDE8PDI0YCwwCisrLkxtYXNrMjY6CisrLmxvbmcJMHgzZmZmZmZmLDAsMHgzZmZmZmZmLDAsMHgzZmZmZmZmLDAsMHgzZmZmZmZmLDAKKysuTHBlcm1kX2F2eDI6CisrLmxvbmcJMiwyLDIsMywyLDAsMiwxCisrLkxwZXJtZF9hdng1MTI6CisrLmxvbmcJMCwwLDAsMSwgMCwyLDAsMywgMCw0LDAsNSwgMCw2LDAsNworKworKy5MMl80NF9pbnBfcGVybWQ6CisrLmxvbmcJMCwxLDEsMiwyLDMsNyw3CisrLkwyXzQ0X2lucF9zaGlmdDoKKysucXVhZAkwLDEyLDI0LDY0CisrLkwyXzQ0X21hc2s6CisrLnF1YWQJMHhmZmZmZmZmZmZmZiwweGZmZmZmZmZmZmZmLDB4M2ZmZmZmZmZmZmYsMHhmZmZmZmZmZmZmZmZmZmZmCisrLkwyXzQ0X3NoaWZ0X3JndDoKKysucXVhZAk0NCw0NCw0Miw2NAorKy5MMl80NF9zaGlmdF9sZnQ6CisrLnF1YWQJOCw4LDEwLDY0CisrCisrLmFsaWduCTY0CisrLkx4X21hc2s0NDoKKysucXVhZAkweGZmZmZmZmZmZmZmLDB4ZmZmZmZmZmZmZmYsMHhmZmZmZmZmZmZmZiwweGZmZmZmZmZmZmZmCisrLnF1YWQJMHhmZmZmZmZmZmZmZiwweGZmZmZmZmZmZmZmLDB4ZmZmZmZmZmZmZmYsMHhmZmZmZmZmZmZmZgorKy5MeF9tYXNrNDI6CisrLnF1YWQJMHgzZmZmZmZmZmZmZiwweDNmZmZmZmZmZmZmLDB4M2ZmZmZmZmZmZmYsMHgzZmZmZmZmZmZmZgorKy5xdWFkCTB4M2ZmZmZmZmZmZmYsMHgzZmZmZmZmZmZmZiwweDNmZmZmZmZmZmZmLDB4M2ZmZmZmZmZmZmYKKytfX18KKyt9CisrJGNvZGUuPTw8X19fOworKy5hc2NpegkiUG9seTEzMDUgZm9yIHg4Nl82NCwgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIKKysuYWxpZ24JMTYKKytfX18KKysKKyt7CSMgY2hhY2hhMjAtcG9seTEzMDUgaGVscGVycworK215ICgkb3V0LCRpbnAsJG90cCwkbGVuKT0kd2luNjQgPyAoIiVyY3giLCIlcmR4IiwiJXI4IiwgIiVyOSIpIDogICMgV2luNjQgb3JkZXIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCIlcmRpIiwiJXJzaSIsIiVyZHgiLCIlcmN4Iik7ICAjIFVuaXggb3JkZXIKKyskY29kZS49PDxfX187CisrLmdsb2JsCXhvcjEyOF9lbmNyeXB0X25fcGFkCisrLnR5cGUJeG9yMTI4X2VuY3J5cHRfbl9wYWQsXEBhYmktb21uaXBvdGVudAorKy5hbGlnbgkxNgorK3hvcjEyOF9lbmNyeXB0X25fcGFkOgorKwlzdWIJJG90cCwkaW5wCisrCXN1Ygkkb3RwLCRvdXQKKysJbW92CSRsZW4sJXIxMAkJIyBwdXQgbGVuIGFzaWRlCisrCXNocglcJDQsJGxlbgkJIyBsZW4gLyAxNgorKwlqegkuTHRhaWxfZW5jCisrCW5vcAorKy5Mb29wX2VuY194bW06CisrCW1vdmRxdQkoJGlucCwkb3RwKSwleG1tMAorKwlweG9yCSgkb3RwKSwleG1tMAorKwltb3ZkcXUJJXhtbTAsKCRvdXQsJG90cCkKKysJbW92ZHFhCSV4bW0wLCgkb3RwKQorKwlsZWEJMTYoJG90cCksJG90cAorKwlkZWMJJGxlbgorKwlqbnoJLkxvb3BfZW5jX3htbQorKworKwlhbmQJXCQxNSwlcjEwCQkjIGxlbiAlIDE2CisrCWp6CS5MZG9uZV9lbmMKKysKKysuTHRhaWxfZW5jOgorKwltb3YJXCQxNiwkbGVuCisrCXN1YgklcjEwLCRsZW4KKysJeG9yCSVlYXgsJWVheAorKy5Mb29wX2VuY19ieXRlOgorKwltb3YJKCRpbnAsJG90cCksJWFsCisrCXhvcgkoJG90cCksJWFsCisrCW1vdgklYWwsKCRvdXQsJG90cCkKKysJbW92CSVhbCwoJG90cCkKKysJbGVhCTEoJG90cCksJG90cAorKwlkZWMJJXIxMAorKwlqbnoJLkxvb3BfZW5jX2J5dGUKKysKKysJeG9yCSVlYXgsJWVheAorKy5Mb29wX2VuY19wYWQ6CisrCW1vdgklYWwsKCRvdHApCisrCWxlYQkxKCRvdHApLCRvdHAKKysJZGVjCSRsZW4KKysJam56CS5Mb29wX2VuY19wYWQKKysKKysuTGRvbmVfZW5jOgorKwltb3YJJG90cCwlcmF4CisrCXJldAorKy5zaXplCXhvcjEyOF9lbmNyeXB0X25fcGFkLC4teG9yMTI4X2VuY3J5cHRfbl9wYWQKKysKKysuZ2xvYmwJeG9yMTI4X2RlY3J5cHRfbl9wYWQKKysudHlwZQl4b3IxMjhfZGVjcnlwdF9uX3BhZCxcQGFiaS1vbW5pcG90ZW50CisrLmFsaWduCTE2CisreG9yMTI4X2RlY3J5cHRfbl9wYWQ6CisrCXN1Ygkkb3RwLCRpbnAKKysJc3ViCSRvdHAsJG91dAorKwltb3YJJGxlbiwlcjEwCQkjIHB1dCBsZW4gYXNpZGUKKysJc2hyCVwkNCwkbGVuCQkjIGxlbiAvIDE2CisrCWp6CS5MdGFpbF9kZWMKKysJbm9wCisrLkxvb3BfZGVjX3htbToKKysJbW92ZHF1CSgkaW5wLCRvdHApLCV4bW0wCisrCW1vdmRxYQkoJG90cCksJXhtbTEKKysJcHhvcgkleG1tMCwleG1tMQorKwltb3ZkcXUJJXhtbTEsKCRvdXQsJG90cCkKKysJbW92ZHFhCSV4bW0wLCgkb3RwKQorKwlsZWEJMTYoJG90cCksJG90cAorKwlkZWMJJGxlbgorKwlqbnoJLkxvb3BfZGVjX3htbQorKworKwlweG9yCSV4bW0xLCV4bW0xCisrCWFuZAlcJDE1LCVyMTAJCSMgbGVuICUgMTYKKysJanoJLkxkb25lX2RlYworKworKy5MdGFpbF9kZWM6CisrCW1vdglcJDE2LCRsZW4KKysJc3ViCSVyMTAsJGxlbgorKwl4b3IJJWVheCwlZWF4CisrCXhvcgklcjExLCVyMTEKKysuTG9vcF9kZWNfYnl0ZToKKysJbW92CSgkaW5wLCRvdHApLCVyMTFiCisrCW1vdgkoJG90cCksJWFsCisrCXhvcgklcjExYiwlYWwKKysJbW92CSVhbCwoJG91dCwkb3RwKQorKwltb3YJJXIxMWIsKCRvdHApCisrCWxlYQkxKCRvdHApLCRvdHAKKysJZGVjCSVyMTAKKysJam56CS5Mb29wX2RlY19ieXRlCisrCisrCXhvcgklZWF4LCVlYXgKKysuTG9vcF9kZWNfcGFkOgorKwltb3YJJWFsLCgkb3RwKQorKwlsZWEJMSgkb3RwKSwkb3RwCisrCWRlYwkkbGVuCisrCWpuegkuTG9vcF9kZWNfcGFkCisrCisrLkxkb25lX2RlYzoKKysJbW92CSRvdHAsJXJheAorKwlyZXQKKysuc2l6ZQl4b3IxMjhfZGVjcnlwdF9uX3BhZCwuLXhvcjEyOF9kZWNyeXB0X25fcGFkCisrX19fCisrfQorKworKyMgRVhDRVBUSU9OX0RJU1BPU0lUSU9OIGhhbmRsZXIgKEVYQ0VQVElPTl9SRUNPUkQgKnJlYyxVTE9ORzY0IGZyYW1lLAorKyMJCUNPTlRFWFQgKmNvbnRleHQsRElTUEFUQ0hFUl9DT05URVhUICpkaXNwKQorK2lmICgkd2luNjQpIHsKKyskcmVjPSIlcmN4IjsKKyskZnJhbWU9IiVyZHgiOworKyRjb250ZXh0PSIlcjgiOworKyRkaXNwPSIlcjkiOworKworKyRjb2RlLj08PF9fXzsKKysuZXh0ZXJuCV9faW1wX1J0bFZpcnR1YWxVbndpbmQKKysudHlwZQlzZV9oYW5kbGVyLFxAYWJpLW9tbmlwb3RlbnQKKysuYWxpZ24JMTYKKytzZV9oYW5kbGVyOgorKwlwdXNoCSVyc2kKKysJcHVzaAklcmRpCisrCXB1c2gJJXJieAorKwlwdXNoCSVyYnAKKysJcHVzaAklcjEyCisrCXB1c2gJJXIxMworKwlwdXNoCSVyMTQKKysJcHVzaAklcjE1CisrCXB1c2hmcQorKwlzdWIJXCQ2NCwlcnNwCisrCisrCW1vdgkxMjAoJGNvbnRleHQpLCVyYXgJIyBwdWxsIGNvbnRleHQtPlJheAorKwltb3YJMjQ4KCRjb250ZXh0KSwlcmJ4CSMgcHVsbCBjb250ZXh0LT5SaXAKKysKKysJbW92CTgoJGRpc3ApLCVyc2kJCSMgZGlzcC0+SW1hZ2VCYXNlCisrCW1vdgk1NigkZGlzcCksJXIxMQkJIyBkaXNwLT5IYW5kbGVyRGF0YQorKworKwltb3YJMCglcjExKSwlcjEwZAkJIyBIYW5kbGVyRGF0YVswXQorKwlsZWEJKCVyc2ksJXIxMCksJXIxMAkjIHByb2xvZ3VlIGxhYmVsCisrCWNtcAklcjEwLCVyYngJCSMgY29udGV4dC0+UmlwPC5McHJvbG9ndWUKKysJamIJLkxjb21tb25fc2VoX3RhaWwKKysKKysJbW92CTE1MigkY29udGV4dCksJXJheAkjIHB1bGwgY29udGV4dC0+UnNwCisrCisrCW1vdgk0KCVyMTEpLCVyMTBkCQkjIEhhbmRsZXJEYXRhWzFdCisrCWxlYQkoJXJzaSwlcjEwKSwlcjEwCSMgZXBpbG9ndWUgbGFiZWwKKysJY21wCSVyMTAsJXJieAkJIyBjb250ZXh0LT5SaXA+PS5MZXBpbG9ndWUKKysJamFlCS5MY29tbW9uX3NlaF90YWlsCisrCisrCWxlYQk0OCglcmF4KSwlcmF4CisrCisrCW1vdgktOCglcmF4KSwlcmJ4CisrCW1vdgktMTYoJXJheCksJXJicAorKwltb3YJLTI0KCVyYXgpLCVyMTIKKysJbW92CS0zMiglcmF4KSwlcjEzCisrCW1vdgktNDAoJXJheCksJXIxNAorKwltb3YJLTQ4KCVyYXgpLCVyMTUKKysJbW92CSVyYngsMTQ0KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UmJ4CisrCW1vdgklcmJwLDE2MCgkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlJicAorKwltb3YJJXIxMiwyMTYoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SMTIKKysJbW92CSVyMTMsMjI0KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UjEzCisrCW1vdgklcjE0LDIzMigkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlIxNAorKwltb3YJJXIxNSwyNDAoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5SMTQKKysKKysJam1wCS5MY29tbW9uX3NlaF90YWlsCisrLnNpemUJc2VfaGFuZGxlciwuLXNlX2hhbmRsZXIKKysKKysudHlwZQlhdnhfaGFuZGxlcixcQGFiaS1vbW5pcG90ZW50CisrLmFsaWduCTE2CisrYXZ4X2hhbmRsZXI6CisrCXB1c2gJJXJzaQorKwlwdXNoCSVyZGkKKysJcHVzaAklcmJ4CisrCXB1c2gJJXJicAorKwlwdXNoCSVyMTIKKysJcHVzaAklcjEzCisrCXB1c2gJJXIxNAorKwlwdXNoCSVyMTUKKysJcHVzaGZxCisrCXN1YglcJDY0LCVyc3AKKysKKysJbW92CTEyMCgkY29udGV4dCksJXJheAkjIHB1bGwgY29udGV4dC0+UmF4CisrCW1vdgkyNDgoJGNvbnRleHQpLCVyYngJIyBwdWxsIGNvbnRleHQtPlJpcAorKworKwltb3YJOCgkZGlzcCksJXJzaQkJIyBkaXNwLT5JbWFnZUJhc2UKKysJbW92CTU2KCRkaXNwKSwlcjExCQkjIGRpc3AtPkhhbmRsZXJEYXRhCisrCisrCW1vdgkwKCVyMTEpLCVyMTBkCQkjIEhhbmRsZXJEYXRhWzBdCisrCWxlYQkoJXJzaSwlcjEwKSwlcjEwCSMgcHJvbG9ndWUgbGFiZWwKKysJY21wCSVyMTAsJXJieAkJIyBjb250ZXh0LT5SaXA8cHJvbG9ndWUgbGFiZWwKKysJamIJLkxjb21tb25fc2VoX3RhaWwKKysKKysJbW92CTE1MigkY29udGV4dCksJXJheAkjIHB1bGwgY29udGV4dC0+UnNwCisrCisrCW1vdgk0KCVyMTEpLCVyMTBkCQkjIEhhbmRsZXJEYXRhWzFdCisrCWxlYQkoJXJzaSwlcjEwKSwlcjEwCSMgZXBpbG9ndWUgbGFiZWwKKysJY21wCSVyMTAsJXJieAkJIyBjb250ZXh0LT5SaXA+PWVwaWxvZ3VlIGxhYmVsCisrCWphZQkuTGNvbW1vbl9zZWhfdGFpbAorKworKwltb3YJMjA4KCRjb250ZXh0KSwlcmF4CSMgcHVsbCBjb250ZXh0LT5SMTEKKysKKysJbGVhCTB4NTAoJXJheCksJXJzaQorKwlsZWEJMHhmOCglcmF4KSwlcmF4CisrCWxlYQk1MTIoJGNvbnRleHQpLCVyZGkJIyAmY29udGV4dC5YbW02CisrCW1vdglcJDIwLCVlY3gKKysJLmxvbmcJMHhhNTQ4ZjNmYwkJIyBjbGQ7IHJlcCBtb3ZzcQorKworKy5MY29tbW9uX3NlaF90YWlsOgorKwltb3YJOCglcmF4KSwlcmRpCisrCW1vdgkxNiglcmF4KSwlcnNpCisrCW1vdgklcmF4LDE1MigkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlJzcAorKwltb3YJJXJzaSwxNjgoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5Sc2kKKysJbW92CSVyZGksMTc2KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UmRpCisrCisrCW1vdgk0MCgkZGlzcCksJXJkaQkJIyBkaXNwLT5Db250ZXh0UmVjb3JkCisrCW1vdgkkY29udGV4dCwlcnNpCQkjIGNvbnRleHQKKysJbW92CVwkMTU0LCVlY3gJCSMgc2l6ZW9mKENPTlRFWFQpCisrCS5sb25nCTB4YTU0OGYzZmMJCSMgY2xkOyByZXAgbW92c3EKKysKKysJbW92CSRkaXNwLCVyc2kKKysJeG9yCSVyY3gsJXJjeAkJIyBhcmcxLCBVTldfRkxBR19OSEFORExFUgorKwltb3YJOCglcnNpKSwlcmR4CQkjIGFyZzIsIGRpc3AtPkltYWdlQmFzZQorKwltb3YJMCglcnNpKSwlcjgJCSMgYXJnMywgZGlzcC0+Q29udHJvbFBjCisrCW1vdgkxNiglcnNpKSwlcjkJCSMgYXJnNCwgZGlzcC0+RnVuY3Rpb25FbnRyeQorKwltb3YJNDAoJXJzaSksJXIxMAkJIyBkaXNwLT5Db250ZXh0UmVjb3JkCisrCWxlYQk1NiglcnNpKSwlcjExCQkjICZkaXNwLT5IYW5kbGVyRGF0YQorKwlsZWEJMjQoJXJzaSksJXIxMgkJIyAmZGlzcC0+RXN0YWJsaXNoZXJGcmFtZQorKwltb3YJJXIxMCwzMiglcnNwKQkJIyBhcmc1CisrCW1vdgklcjExLDQwKCVyc3ApCQkjIGFyZzYKKysJbW92CSVyMTIsNDgoJXJzcCkJCSMgYXJnNworKwltb3YJJXJjeCw1NiglcnNwKQkJIyBhcmc4LCAoTlVMTCkKKysJY2FsbAkqX19pbXBfUnRsVmlydHVhbFVud2luZCglcmlwKQorKworKwltb3YJXCQxLCVlYXgJCSMgRXhjZXB0aW9uQ29udGludWVTZWFyY2gKKysJYWRkCVwkNjQsJXJzcAorKwlwb3BmcQorKwlwb3AJJXIxNQorKwlwb3AJJXIxNAorKwlwb3AJJXIxMworKwlwb3AJJXIxMgorKwlwb3AJJXJicAorKwlwb3AJJXJieAorKwlwb3AJJXJkaQorKwlwb3AJJXJzaQorKwlyZXQKKysuc2l6ZQlhdnhfaGFuZGxlciwuLWF2eF9oYW5kbGVyCisrCisrLnNlY3Rpb24JLnBkYXRhCisrLmFsaWduCTQKKysJLnJ2YQkuTFNFSF9iZWdpbl9wb2x5MTMwNV9pbml0CisrCS5ydmEJLkxTRUhfZW5kX3BvbHkxMzA1X2luaXQKKysJLnJ2YQkuTFNFSF9pbmZvX3BvbHkxMzA1X2luaXQKKysKKysJLnJ2YQkuTFNFSF9iZWdpbl9wb2x5MTMwNV9ibG9ja3MKKysJLnJ2YQkuTFNFSF9lbmRfcG9seTEzMDVfYmxvY2tzCisrCS5ydmEJLkxTRUhfaW5mb19wb2x5MTMwNV9ibG9ja3MKKysKKysJLnJ2YQkuTFNFSF9iZWdpbl9wb2x5MTMwNV9lbWl0CisrCS5ydmEJLkxTRUhfZW5kX3BvbHkxMzA1X2VtaXQKKysJLnJ2YQkuTFNFSF9pbmZvX3BvbHkxMzA1X2VtaXQKKytfX18KKyskY29kZS49PDxfX18gaWYgKCRhdngpOworKwkucnZhCS5MU0VIX2JlZ2luX3BvbHkxMzA1X2Jsb2Nrc19hdngKKysJLnJ2YQkuTGJhc2UyXzY0X2F2eAorKwkucnZhCS5MU0VIX2luZm9fcG9seTEzMDVfYmxvY2tzX2F2eF8xCisrCisrCS5ydmEJLkxiYXNlMl82NF9hdngKKysJLnJ2YQkuTGV2ZW5fYXZ4CisrCS5ydmEJLkxTRUhfaW5mb19wb2x5MTMwNV9ibG9ja3NfYXZ4XzIKKysKKysJLnJ2YQkuTGV2ZW5fYXZ4CisrCS5ydmEJLkxTRUhfZW5kX3BvbHkxMzA1X2Jsb2Nrc19hdngKKysJLnJ2YQkuTFNFSF9pbmZvX3BvbHkxMzA1X2Jsb2Nrc19hdnhfMworKworKwkucnZhCS5MU0VIX2JlZ2luX3BvbHkxMzA1X2VtaXRfYXZ4CisrCS5ydmEJLkxTRUhfZW5kX3BvbHkxMzA1X2VtaXRfYXZ4CisrCS5ydmEJLkxTRUhfaW5mb19wb2x5MTMwNV9lbWl0X2F2eAorK19fXworKyRjb2RlLj08PF9fXyBpZiAoJGF2eD4xKTsKKysJLnJ2YQkuTFNFSF9iZWdpbl9wb2x5MTMwNV9ibG9ja3NfYXZ4MgorKwkucnZhCS5MYmFzZTJfNjRfYXZ4MgorKwkucnZhCS5MU0VIX2luZm9fcG9seTEzMDVfYmxvY2tzX2F2eDJfMQorKworKwkucnZhCS5MYmFzZTJfNjRfYXZ4MgorKwkucnZhCS5MZXZlbl9hdngyCisrCS5ydmEJLkxTRUhfaW5mb19wb2x5MTMwNV9ibG9ja3NfYXZ4Ml8yCisrCisrCS5ydmEJLkxldmVuX2F2eDIKKysJLnJ2YQkuTFNFSF9lbmRfcG9seTEzMDVfYmxvY2tzX2F2eDIKKysJLnJ2YQkuTFNFSF9pbmZvX3BvbHkxMzA1X2Jsb2Nrc19hdngyXzMKKytfX18KKyskY29kZS49PDxfX18gaWYgKCRhdng+Mik7CisrCS5ydmEJLkxTRUhfYmVnaW5fcG9seTEzMDVfYmxvY2tzX2F2eDUxMgorKwkucnZhCS5MU0VIX2VuZF9wb2x5MTMwNV9ibG9ja3NfYXZ4NTEyCisrCS5ydmEJLkxTRUhfaW5mb19wb2x5MTMwNV9ibG9ja3NfYXZ4NTEyCisrX19fCisrJGNvZGUuPTw8X19fOworKy5zZWN0aW9uCS54ZGF0YQorKy5hbGlnbgk4CisrLkxTRUhfaW5mb19wb2x5MTMwNV9pbml0OgorKwkuYnl0ZQk5LDAsMCwwCisrCS5ydmEJc2VfaGFuZGxlcgorKwkucnZhCS5MU0VIX2JlZ2luX3BvbHkxMzA1X2luaXQsLkxTRUhfYmVnaW5fcG9seTEzMDVfaW5pdAorKworKy5MU0VIX2luZm9fcG9seTEzMDVfYmxvY2tzOgorKwkuYnl0ZQk5LDAsMCwwCisrCS5ydmEJc2VfaGFuZGxlcgorKwkucnZhCS5MYmxvY2tzX2JvZHksLkxibG9ja3NfZXBpbG9ndWUKKysKKysuTFNFSF9pbmZvX3BvbHkxMzA1X2VtaXQ6CisrCS5ieXRlCTksMCwwLDAKKysJLnJ2YQlzZV9oYW5kbGVyCisrCS5ydmEJLkxTRUhfYmVnaW5fcG9seTEzMDVfZW1pdCwuTFNFSF9iZWdpbl9wb2x5MTMwNV9lbWl0CisrX19fCisrJGNvZGUuPTw8X19fIGlmICgkYXZ4KTsKKysuTFNFSF9pbmZvX3BvbHkxMzA1X2Jsb2Nrc19hdnhfMToKKysJLmJ5dGUJOSwwLDAsMAorKwkucnZhCXNlX2hhbmRsZXIKKysJLnJ2YQkuTGJsb2Nrc19hdnhfYm9keSwuTGJsb2Nrc19hdnhfZXBpbG9ndWUJCSMgSGFuZGxlckRhdGFbXQorKworKy5MU0VIX2luZm9fcG9seTEzMDVfYmxvY2tzX2F2eF8yOgorKwkuYnl0ZQk5LDAsMCwwCisrCS5ydmEJc2VfaGFuZGxlcgorKwkucnZhCS5MYmFzZTJfNjRfYXZ4X2JvZHksLkxiYXNlMl82NF9hdnhfZXBpbG9ndWUJIyBIYW5kbGVyRGF0YVtdCisrCisrLkxTRUhfaW5mb19wb2x5MTMwNV9ibG9ja3NfYXZ4XzM6CisrCS5ieXRlCTksMCwwLDAKKysJLnJ2YQlhdnhfaGFuZGxlcgorKwkucnZhCS5MZG9fYXZ4X2JvZHksLkxkb19hdnhfZXBpbG9ndWUJCQkjIEhhbmRsZXJEYXRhW10KKysKKysuTFNFSF9pbmZvX3BvbHkxMzA1X2VtaXRfYXZ4OgorKwkuYnl0ZQk5LDAsMCwwCisrCS5ydmEJc2VfaGFuZGxlcgorKwkucnZhCS5MU0VIX2JlZ2luX3BvbHkxMzA1X2VtaXRfYXZ4LC5MU0VIX2JlZ2luX3BvbHkxMzA1X2VtaXRfYXZ4CisrX19fCisrJGNvZGUuPTw8X19fIGlmICgkYXZ4PjEpOworKy5MU0VIX2luZm9fcG9seTEzMDVfYmxvY2tzX2F2eDJfMToKKysJLmJ5dGUJOSwwLDAsMAorKwkucnZhCXNlX2hhbmRsZXIKKysJLnJ2YQkuTGJsb2Nrc19hdngyX2JvZHksLkxibG9ja3NfYXZ4Ml9lcGlsb2d1ZQkjIEhhbmRsZXJEYXRhW10KKysKKysuTFNFSF9pbmZvX3BvbHkxMzA1X2Jsb2Nrc19hdngyXzI6CisrCS5ieXRlCTksMCwwLDAKKysJLnJ2YQlzZV9oYW5kbGVyCisrCS5ydmEJLkxiYXNlMl82NF9hdngyX2JvZHksLkxiYXNlMl82NF9hdngyX2VwaWxvZ3VlCSMgSGFuZGxlckRhdGFbXQorKworKy5MU0VIX2luZm9fcG9seTEzMDVfYmxvY2tzX2F2eDJfMzoKKysJLmJ5dGUJOSwwLDAsMAorKwkucnZhCWF2eF9oYW5kbGVyCisrCS5ydmEJLkxkb19hdngyX2JvZHksLkxkb19hdngyX2VwaWxvZ3VlCQkjIEhhbmRsZXJEYXRhW10KKytfX18KKyskY29kZS49PDxfX18gaWYgKCRhdng+Mik7CisrLkxTRUhfaW5mb19wb2x5MTMwNV9ibG9ja3NfYXZ4NTEyOgorKwkuYnl0ZQk5LDAsMCwwCisrCS5ydmEJYXZ4X2hhbmRsZXIKKysJLnJ2YQkuTGRvX2F2eDUxMl9ib2R5LC5MZG9fYXZ4NTEyX2VwaWxvZ3VlCQkjIEhhbmRsZXJEYXRhW10KKytfX18KKyt9CisrCisrZm9yZWFjaCAoc3BsaXQoJ1xuJywkY29kZSkpIHsKKysJcy9cYChbXlxgXSopXGAvZXZhbCgkMSkvZ2U7CisrCXMvJXIoW2Etel0rKSNkLyVlJDEvZzsKKysJcy8lcihbMC05XSspI2QvJXIkMWQvZzsKKysJcy8leCMlW3l6XS8leC9nIG9yIHMvJXkjJXovJXkvZyBvciBzLyV6IyVbeXpdLyV6L2c7CisrCisrCXByaW50ICRfLCJcbiI7CisrfQorK2Nsb3NlIFNURE9VVDsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNDMtY3J5cHRvLXg4Ni1wb2x5MTMwNS13aXJlLXVwLWZhc3Rlci1pbXBsZW1lbnRhdGlvbnMtZi5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNDMtY3J5cHRvLXg4Ni1wb2x5MTMwNS13aXJlLXVwLWZhc3Rlci1pbXBsZW1lbnRhdGlvbnMtZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmM4MzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA0My1jcnlwdG8teDg2LXBvbHkxMzA1LXdpcmUtdXAtZmFzdGVyLWltcGxlbWVudGF0aW9ucy1mLnBhdGNoCkBAIC0wLDAgKzEsMjkyNyBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIkphc29uIEEuIERvbmVuZmVsZCIgPEphc29uQHp4MmM0LmNvbT4KK0RhdGU6IFN1biwgNSBKYW4gMjAyMCAyMjo0MDo0OCAtMDUwMAorU3ViamVjdDogW1BBVENIXSBjcnlwdG86IHg4Ni9wb2x5MTMwNSAtIHdpcmUgdXAgZmFzdGVyIGltcGxlbWVudGF0aW9ucyBmb3IKKyBrZXJuZWwKKworY29tbWl0IGQ3ZDdiODUzNTY2MjU0NjQ4ZGY1OWY3ZWEyN2VhMDU5NTJhNmNmYTggdXBzdHJlYW0uCisKK1RoZXNlIHg4Nl82NCB2ZWN0b3JpemVkIGltcGxlbWVudGF0aW9ucyBzdXBwb3J0IEFWWCwgQVZYLTIsIGFuZCBBVlg1MTJGLgorVGhlIEFWWC01MTJGIGltcGxlbWVudGF0aW9uIGlzIGRpc2FibGVkIG9uIFNreWxha2UsIGR1ZSB0byB0aHJvdHRsaW5nLAorYnV0IGl0IGlzIHF1aXRlIGZhc3Qgb24gPj0gQ2Fubm9ubGFrZS4KKworT24gdGhlIGxlZnQgaXMgY3ljbGUgY291bnRzIG9uIGEgQ29yZSBpNyA2NzAwSFEgdXNpbmcgdGhlIEFWWC0yCitjb2RlcGF0aCwgY29tcGFyaW5nIHRoaXMgaW1wbGVtZW50YXRpb24gKCJuZXciKSB0byB0aGUgaW1wbGVtZW50YXRpb24gaW4KK3RoZSBjdXJyZW50IGNyeXB0byBhcGkgKCJvbGQiKS4gT24gdGhlIHJpZ2h0IGFyZSBiZW5jaG1hcmtzIG9uIGEgWGVvbgorR29sZCA1MTIwIHVzaW5nIHRoZSBBVlgtNTEyIGNvZGVwYXRoLiBUaGUgbmV3IGltcGxlbWVudGF0aW9uIGlzIGZhc3Rlcgorb24gYWxsIGJlbmNobWFya3MuCisKKyAgICAgICAgQVZYLTIgICAgICAgICAgICAgICAgICBBVlgtNTEyCisgICAgICAtLS0tLS0tLS0gICAgICAgICAgICAgIC0tLS0tLS0tLS0tCisKKyAgICBzaXplICAgIG9sZCAgICAgbmV3ICAgICAgc2l6ZSAgIG9sZCAgICAgbmV3CisgICAgLS0tLSAgICAtLS0tICAgIC0tLS0gICAgIC0tLS0gICAtLS0tICAgIC0tLS0KKyAgICAwICAgICAgIDcwICAgICAgNjggICAgICAgMCAgICAgIDc0ICAgICAgNzAKKyAgICAxNiAgICAgIDkyICAgICAgOTAgICAgICAgMTYgICAgIDk2ICAgICAgOTIKKyAgICAzMiAgICAgIDEzNCAgICAgMTA0ICAgICAgMzIgICAgIDEzNiAgICAgMTA2CisgICAgNDggICAgICAxNzIgICAgIDEyMCAgICAgIDQ4ICAgICAxODQgICAgIDEyNAorICAgIDY0ICAgICAgMjE4ICAgICAxMzYgICAgICA2NCAgICAgMjE4ICAgICAxMzgKKyAgICA4MCAgICAgIDI1NCAgICAgMTU4ICAgICAgODAgICAgIDI2MCAgICAgMTYwCisgICAgOTYgICAgICAyOTggICAgIDE3NCAgICAgIDk2ICAgICAzMDAgICAgIDE3NgorICAgIDExMiAgICAgMzQyICAgICAxOTIgICAgICAxMTIgICAgMzQyICAgICAxOTQKKyAgICAxMjggICAgIDM4OCAgICAgMjEyICAgICAgMTI4ICAgIDM4NCAgICAgMjEyCisgICAgMTQ0ICAgICA0MjggICAgIDIyOCAgICAgIDE0NCAgICA0MjAgICAgIDIyNgorICAgIDE2MCAgICAgNDY2ICAgICAyNDYgICAgICAxNjAgICAgNDY0ICAgICAyNDgKKyAgICAxNzYgICAgIDUxMCAgICAgMjY0ICAgICAgMTc2ICAgIDUwNCAgICAgMjY0CisgICAgMTkyICAgICA1NTAgICAgIDI4MiAgICAgIDE5MiAgICA1NDQgICAgIDI4MgorICAgIDIwOCAgICAgNTk0ICAgICAzMDIgICAgICAyMDggICAgNTgyICAgICAzMDAKKyAgICAyMjQgICAgIDYyOCAgICAgMzE2ICAgICAgMjI0ICAgIDYyNCAgICAgMzE4CisgICAgMjQwICAgICA2NzYgICAgIDMzNCAgICAgIDI0MCAgICA2NjIgICAgIDMzOAorICAgIDI1NiAgICAgNzE2ICAgICAzNTQgICAgICAyNTYgICAgNzA4ICAgICAzNTgKKyAgICAyNzIgICAgIDc2NCAgICAgMzc0ICAgICAgMjcyICAgIDc0OCAgICAgMzcyCisgICAgMjg4ICAgICA4MDIgICAgIDM1MiAgICAgIDI4OCAgICA3ODggICAgIDM1OAorICAgIDMwNCAgICAgNDIwICAgICAzNjYgICAgICAzMDQgICAgNDIyICAgICAzNzAKKyAgICAzMjAgICAgIDQyOCAgICAgMzYwICAgICAgMzIwICAgIDQzMiAgICAgMzY0CisgICAgMzM2ICAgICA0ODQgICAgIDM3OCAgICAgIDMzNiAgICA0ODYgICAgIDM4MAorICAgIDM1MiAgICAgNDI2ICAgICAzODQgICAgICAzNTIgICAgNDM0ICAgICAzOTAKKyAgICAzNjggICAgIDQ3OCAgICAgNDAwICAgICAgMzY4ICAgIDQ4MCAgICAgNDA4CisgICAgMzg0ICAgICA0ODggICAgIDM5NCAgICAgIDM4NCAgICA0OTAgICAgIDM5OAorICAgIDQwMCAgICAgNTQyICAgICA0MDggICAgICA0MDAgICAgNTQyICAgICA0MTIKKyAgICA0MTYgICAgIDQ4NiAgICAgNDE2ICAgICAgNDE2ICAgIDQ5MiAgICAgNDI2CisgICAgNDMyICAgICA1MzQgICAgIDQzMCAgICAgIDQzMiAgICA1MzggICAgIDQzNgorICAgIDQ0OCAgICAgNTQ0ICAgICA0MjIgICAgICA0NDggICAgNTQ2ICAgICA0MzIKKyAgICA0NjQgICAgIDYwMCAgICAgNDM4ICAgICAgNDY0ICAgIDYwMCAgICAgNDQ4CisgICAgNDgwICAgICA1NDAgICAgIDQ0OCAgICAgIDQ4MCAgICA1NDggICAgIDQ1NgorICAgIDQ5NiAgICAgNTk0ICAgICA0NjQgICAgICA0OTYgICAgNTk0ICAgICA0NzYKKyAgICA1MTIgICAgIDYwMiAgICAgNDU2ICAgICAgNTEyICAgIDYwNiAgICAgNDcwCisgICAgNTI4ICAgICA2NTYgICAgIDQ3NiAgICAgIDUyOCAgICA2NTYgICAgIDQ4MAorICAgIDU0NCAgICAgNjAwICAgICA0ODAgICAgICA1NDQgICAgNjA2ICAgICA0OTgKKyAgICA1NjAgICAgIDY1MCAgICAgNDk0ICAgICAgNTYwICAgIDY1MiAgICAgNTEyCisgICAgNTc2ICAgICA2NjQgICAgIDQ5MCAgICAgIDU3NiAgICA2NjIgICAgIDUwOAorICAgIDU5MiAgICAgNzE0ICAgICA1MDggICAgICA1OTIgICAgNzE2ICAgICA1MjIKKyAgICA2MDggICAgIDY1NiAgICAgNTE0ICAgICAgNjA4ICAgIDY2NCAgICAgNTM4CisgICAgNjI0ICAgICA3MDggICAgIDUzMiAgICAgIDYyNCAgICA3MTAgICAgIDU1MgorICAgIDY0MCAgICAgNzE2ICAgICA1MjQgICAgICA2NDAgICAgNzIwICAgICA1MTYKKyAgICA2NTYgICAgIDc3MCAgICAgNTM2ICAgICAgNjU2ICAgIDc3MiAgICAgNTI2CisgICAgNjcyICAgICA3MTYgICAgIDU0OCAgICAgIDY3MiAgICA3MjIgICAgIDU0NAorICAgIDY4OCAgICAgNzcwICAgICA1NjIgICAgICA2ODggICAgNzY4ICAgICA1NTYKKyAgICA3MDQgICAgIDc3NCAgICAgNTUyICAgICAgNzA0ICAgIDc3OCAgICAgNTU2CisgICAgNzIwICAgICA4MjYgICAgIDU2OCAgICAgIDcyMCAgICA4MzIgICAgIDU2OAorICAgIDczNiAgICAgNzY4ICAgICA1NzQgICAgICA3MzYgICAgNzgwICAgICA1ODQKKyAgICA3NTIgICAgIDgyMiAgICAgNTkyICAgICAgNzUyICAgIDgyNiAgICAgNjAwCisgICAgNzY4ICAgICA4MzAgICAgIDU4NCAgICAgIDc2OCAgICA4MzYgICAgIDU2MAorICAgIDc4NCAgICAgODg0ICAgICA2MDIgICAgICA3ODQgICAgODg4ICAgICA1NzIKKyAgICA4MDAgICAgIDgyOCAgICAgNjEwICAgICAgODAwICAgIDgzOCAgICAgNTg4CisgICAgODE2ICAgICA4ODQgICAgIDYyOCAgICAgIDgxNiAgICA4ODQgICAgIDYwNAorICAgIDgzMiAgICAgODg4ICAgICA2MTggICAgICA4MzIgICAgODk0ICAgICA1OTgKKyAgICA4NDggICAgIDk0MiAgICAgNjMyICAgICAgODQ4ICAgIDk0NiAgICAgNjEyCisgICAgODY0ICAgICA4ODQgICAgIDY0NCAgICAgIDg2NCAgICA4OTYgICAgIDYyOAorICAgIDg4MCAgICAgOTM2ICAgICA2NjAgICAgICA4ODAgICAgOTQyICAgICA2NDQKKyAgICA4OTYgICAgIDk0OCAgICAgNjUyICAgICAgODk2ICAgIDk1MiAgICAgNjA4CisgICAgOTEyICAgICAxMDAwICAgIDY2NCAgICAgIDkxMiAgICAxMDA0ICAgIDYxNgorICAgIDkyOCAgICAgOTQyICAgICA2NzYgICAgICA5MjggICAgOTU0ICAgICA2MzQKKyAgICA5NDQgICAgIDk5NCAgICAgNjkwICAgICAgOTQ0ICAgIDEwMDAgICAgNjQ2CisgICAgOTYwICAgICAxMDAyICAgIDY4MCAgICAgIDk2MCAgICAxMDA4ICAgIDY0NgorICAgIDk3NiAgICAgMTA1NCAgICA2OTQgICAgICA5NzYgICAgMTA2MiAgICA2NTgKKyAgICA5OTIgICAgIDEwMDIgICAgNzA2ICAgICAgOTkyICAgIDEwMTIgICAgNjc0CisgICAgMTAwOCAgICAxMDUyICAgIDcyMCAgICAgIDEwMDggICAxMDU4ICAgIDY5MAorCitUaGlzIGNvbW1pdCB3aXJlcyBpbiB0aGUgcHJpb3IgaW1wbGVtZW50YXRpb24gZnJvbSBBbmR5LCBhbmQgbWFrZXMgdGhlCitmb2xsb3dpbmcgY2hhbmdlcyB0byBiZSBzdWl0YWJsZSBmb3Iga2VybmVsIGxhbmQuCisKKyAgLSBTb21lIGNvc21ldGljIGFuZCBzdHJ1Y3R1cmFsIGNoYW5nZXMsIGxpa2UgcmVuYW1pbmcgbGFiZWxzIHRvCisgICAgLkxuYW1lLCBjb25zdGFudHMsIGFuZCBvdGhlciBMaW51eCBjb252ZW50aW9ucywgYXMgd2VsbCBhcyBtYWtpbmcKKyAgICB0aGUgY29kZSBlYXN5IGZvciB1cyB0byBtYWludGFpbiBtb3ZpbmcgZm9yd2FyZC4KKworICAtIENQVSBmZWF0dXJlIGNoZWNraW5nIGlzIGRvbmUgaW4gQyBieSB0aGUgZ2x1ZSBjb2RlLgorCisgIC0gV2UgYXZvaWQganVtcGluZyBpbnRvIHRoZSBtaWRkbGUgb2YgZnVuY3Rpb25zLCB0byBhcHBlYXNlIG9ianRvb2wsCisgICAgYW5kIGluc3RlYWQgcGFyYW1ldGVyaXplIHNoYXJlZCBjb2RlLgorCisgIC0gV2UgbWFpbnRhaW4gZnJhbWUgcG9pbnRlcnMgc28gdGhhdCBzdGFjayB0cmFjZXMgbWFrZSBzZW5zZS4KKworICAtIFdlIHJlbW92ZSB0aGUgZGVwZW5kZW5jeSBvbiB0aGUgcGVybCB4bGF0ZSBjb2RlLCB3aGljaCB0cmFuc2Zvcm1zCisgICAgdGhlIG91dHB1dCBpbnRvIHRoaW5ncyB0aGF0IGFzc2VtYmxlcnMgd2UgZG9uJ3QgY2FyZSBhYm91dCB1c2UuCisKK0ltcG9ydGFudGx5LCBub25lIG9mIG91ciBjaGFuZ2VzIGFmZmVjdCB0aGUgYXJpdGhtZXRpYyBvciBjb3JlIGNvZGUsIGJ1dAoranVzdCBpbnZvbHZlIHRoZSBkaWZmZXJpbmcgZW52aXJvbm1lbnQgb2Yga2VybmVsIHNwYWNlLgorCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IFNhbXVlbCBOZXZlcyA8c25ldmVzQGRlaS51Yy5wdD4KK0NvLWRldmVsb3BlZC1ieTogU2FtdWVsIE5ldmVzIDxzbmV2ZXNAZGVpLnVjLnB0PgorU2lnbmVkLW9mZi1ieTogSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBhcmNoL3g4Ni9jcnlwdG8vLmdpdGlnbm9yZSAgICAgICAgICAgICAgICAgICAgfCAgIDEgKworIGFyY2gveDg2L2NyeXB0by9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICB8ICAxMSArLQorIGFyY2gveDg2L2NyeXB0by9wb2x5MTMwNS1hdngyLXg4Nl82NC5TICAgICAgICB8IDM5MCAtLS0tLS0tLS0tCisgYXJjaC94ODYvY3J5cHRvL3BvbHkxMzA1LXNzZTIteDg2XzY0LlMgICAgICAgIHwgNTkwIC0tLS0tLS0tLS0tLS0tLQorIGFyY2gveDg2L2NyeXB0by9wb2x5MTMwNS14ODZfNjQtY3J5cHRvZ2Ftcy5wbCB8IDY4MiArKysrKysrKysrLS0tLS0tLS0KKyBhcmNoL3g4Ni9jcnlwdG8vcG9seTEzMDVfZ2x1ZS5jICAgICAgICAgICAgICAgfCA0NzMgKysrKystLS0tLS0tCisgbGliL2NyeXB0by9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICstCisgNyBmaWxlcyBjaGFuZ2VkLCA1NzIgaW5zZXJ0aW9ucygrKSwgMTU3NyBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC94ODYvY3J5cHRvLy5naXRpZ25vcmUKKyBkZWxldGUgbW9kZSAxMDA2NDQgYXJjaC94ODYvY3J5cHRvL3BvbHkxMzA1LWF2eDIteDg2XzY0LlMKKyBkZWxldGUgbW9kZSAxMDA2NDQgYXJjaC94ODYvY3J5cHRvL3BvbHkxMzA1LXNzZTIteDg2XzY0LlMKKworLS0tIC9kZXYvbnVsbAorKysrIGIvYXJjaC94ODYvY3J5cHRvLy5naXRpZ25vcmUKK0BAIC0wLDAgKzEgQEAKKytwb2x5MTMwNS14ODZfNjQuUworLS0tIGEvYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlCisrKysgYi9hcmNoL3g4Ni9jcnlwdG8vTWFrZWZpbGUKK0BAIC03Myw2ICs3MywxMCBAQCBhZWdpczEyOC1hZXNuaS15IDo9IGFlZ2lzMTI4LWFlc25pLWFzbS5vCisgCisgbmhwb2x5MTMwNS1zc2UyLXkgOj0gbmgtc3NlMi14ODZfNjQubyBuaHBvbHkxMzA1LXNzZTItZ2x1ZS5vCisgYmxha2Uycy14ODZfNjQteSA6PSBibGFrZTJzLWNvcmUubyBibGFrZTJzLWdsdWUubworK3BvbHkxMzA1LXg4Nl82NC15IDo9IHBvbHkxMzA1LXg4Nl82NC1jcnlwdG9nYW1zLm8gcG9seTEzMDVfZ2x1ZS5vCisraWZuZXEgKCQoQ09ORklHX0NSWVBUT19QT0xZMTMwNV9YODZfNjQpLCkKKyt0YXJnZXRzICs9IHBvbHkxMzA1LXg4Nl82NC1jcnlwdG9nYW1zLlMKKytlbmRpZgorIAorIGlmZXEgKCQoYXZ4X3N1cHBvcnRlZCkseWVzKQorIAljYW1lbGxpYS1hZXNuaS1hdngteDg2XzY0LXkgOj0gY2FtZWxsaWEtYWVzbmktYXZ4LWFzbV82NC5vIFwKK0BAIC0xMDEsMTAgKzEwNSw4IEBAIGFlc25pLWludGVsLXkgOj0gYWVzbmktaW50ZWxfYXNtLm8gYWVzbmkKKyBhZXNuaS1pbnRlbC0kKENPTkZJR182NEJJVCkgKz0gYWVzbmktaW50ZWxfYXZ4LXg4Nl82NC5vIGFlc19jdHJieThfYXZ4LXg4Nl82NC5vCisgZ2hhc2gtY2xtdWxuaS1pbnRlbC15IDo9IGdoYXNoLWNsbXVsbmktaW50ZWxfYXNtLm8gZ2hhc2gtY2xtdWxuaS1pbnRlbF9nbHVlLm8KKyBzaGExLXNzc2UzLXkgOj0gc2hhMV9zc3NlM19hc20ubyBzaGExX3Nzc2UzX2dsdWUubworLXBvbHkxMzA1LXg4Nl82NC15IDo9IHBvbHkxMzA1LXNzZTIteDg2XzY0Lm8gcG9seTEzMDVfZ2x1ZS5vCisgaWZlcSAoJChhdngyX3N1cHBvcnRlZCkseWVzKQorIHNoYTEtc3NzZTMteSArPSBzaGExX2F2eDJfeDg2XzY0X2FzbS5vCistcG9seTEzMDUteDg2XzY0LXkgKz0gcG9seTEzMDUtYXZ4Mi14ODZfNjQubworIGVuZGlmCisgaWZlcSAoJChzaGExX25pX3N1cHBvcnRlZCkseWVzKQorIHNoYTEtc3NzZTMteSArPSBzaGExX25pX2FzbS5vCitAQCAtMTE4LDMgKzEyMCw4IEBAIHNoYTI1Ni1zc3NlMy15ICs9IHNoYTI1Nl9uaV9hc20ubworIGVuZGlmCisgc2hhNTEyLXNzc2UzLXkgOj0gc2hhNTEyLXNzc2UzLWFzbS5vIHNoYTUxMi1hdngtYXNtLm8gc2hhNTEyLWF2eDItYXNtLm8gc2hhNTEyX3Nzc2UzX2dsdWUubworIGNyY3QxMGRpZi1wY2xtdWwteSA6PSBjcmN0MTBkaWYtcGNsLWFzbV82NC5vIGNyY3QxMGRpZi1wY2xtdWxfZ2x1ZS5vCisrCisrcXVpZXRfY21kX3Blcmxhc20gPSBQRVJMQVNNICRACisrICAgICAgY21kX3Blcmxhc20gPSAkKFBFUkwpICQ8ID4gJEAKKyskKG9iaikvJS5TOiAkKHNyYykvJS5wbCBGT1JDRQorKwkkKGNhbGwgaWZfY2hhbmdlZCxwZXJsYXNtKQorLS0tIGEvYXJjaC94ODYvY3J5cHRvL3BvbHkxMzA1LWF2eDIteDg2XzY0LlMKKysrKyAvZGV2L251bGwKK0BAIC0xLDM5MCArMCwwIEBACistLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KKy0vKgorLSAqIFBvbHkxMzA1IGF1dGhlbnRpY2F0b3IgYWxnb3JpdGhtLCBSRkM3NTM5LCB4NjQgQVZYMiBmdW5jdGlvbnMKKy0gKgorLSAqIENvcHlyaWdodCAoQykgMjAxNSBNYXJ0aW4gV2lsbGkKKy0gKi8KKy0KKy0jaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorLQorLS5zZWN0aW9uCS5yb2RhdGEuY3N0MzIuQU5NQVNLLCAiYU0iLCBAcHJvZ2JpdHMsIDMyCistLmFsaWduIDMyCistQU5NQVNLOgkub2N0YSAweDAwMDAwMDAwMDNmZmZmZmYwMDAwMDAwMDAzZmZmZmZmCistCS5vY3RhIDB4MDAwMDAwMDAwM2ZmZmZmZjAwMDAwMDAwMDNmZmZmZmYKKy0KKy0uc2VjdGlvbgkucm9kYXRhLmNzdDMyLk9STUFTSywgImFNIiwgQHByb2diaXRzLCAzMgorLS5hbGlnbiAzMgorLU9STUFTSzoJLm9jdGEgMHgwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMTAwMDAwMAorLQkub2N0YSAweDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAxMDAwMDAwCistCistLnRleHQKKy0KKy0jZGVmaW5lIGgwIDB4MDAoJXJkaSkKKy0jZGVmaW5lIGgxIDB4MDQoJXJkaSkKKy0jZGVmaW5lIGgyIDB4MDgoJXJkaSkKKy0jZGVmaW5lIGgzIDB4MGMoJXJkaSkKKy0jZGVmaW5lIGg0IDB4MTAoJXJkaSkKKy0jZGVmaW5lIHIwIDB4MDAoJXJkeCkKKy0jZGVmaW5lIHIxIDB4MDQoJXJkeCkKKy0jZGVmaW5lIHIyIDB4MDgoJXJkeCkKKy0jZGVmaW5lIHIzIDB4MGMoJXJkeCkKKy0jZGVmaW5lIHI0IDB4MTAoJXJkeCkKKy0jZGVmaW5lIHUwIDB4MDAoJXI4KQorLSNkZWZpbmUgdTEgMHgwNCglcjgpCistI2RlZmluZSB1MiAweDA4KCVyOCkKKy0jZGVmaW5lIHUzIDB4MGMoJXI4KQorLSNkZWZpbmUgdTQgMHgxMCglcjgpCistI2RlZmluZSB3MCAweDE4KCVyOCkKKy0jZGVmaW5lIHcxIDB4MWMoJXI4KQorLSNkZWZpbmUgdzIgMHgyMCglcjgpCistI2RlZmluZSB3MyAweDI0KCVyOCkKKy0jZGVmaW5lIHc0IDB4MjgoJXI4KQorLSNkZWZpbmUgeTAgMHgzMCglcjgpCistI2RlZmluZSB5MSAweDM0KCVyOCkKKy0jZGVmaW5lIHkyIDB4MzgoJXI4KQorLSNkZWZpbmUgeTMgMHgzYyglcjgpCistI2RlZmluZSB5NCAweDQwKCVyOCkKKy0jZGVmaW5lIG0gJXJzaQorLSNkZWZpbmUgaGMwICV5bW0wCistI2RlZmluZSBoYzEgJXltbTEKKy0jZGVmaW5lIGhjMiAleW1tMgorLSNkZWZpbmUgaGMzICV5bW0zCistI2RlZmluZSBoYzQgJXltbTQKKy0jZGVmaW5lIGhjMHggJXhtbTAKKy0jZGVmaW5lIGhjMXggJXhtbTEKKy0jZGVmaW5lIGhjMnggJXhtbTIKKy0jZGVmaW5lIGhjM3ggJXhtbTMKKy0jZGVmaW5lIGhjNHggJXhtbTQKKy0jZGVmaW5lIHQxICV5bW01CistI2RlZmluZSB0MiAleW1tNgorLSNkZWZpbmUgdDF4ICV4bW01CistI2RlZmluZSB0MnggJXhtbTYKKy0jZGVmaW5lIHJ1d3kwICV5bW03CistI2RlZmluZSBydXd5MSAleW1tOAorLSNkZWZpbmUgcnV3eTIgJXltbTkKKy0jZGVmaW5lIHJ1d3kzICV5bW0xMAorLSNkZWZpbmUgcnV3eTQgJXltbTExCistI2RlZmluZSBydXd5MHggJXhtbTcKKy0jZGVmaW5lIHJ1d3kxeCAleG1tOAorLSNkZWZpbmUgcnV3eTJ4ICV4bW05CistI2RlZmluZSBydXd5M3ggJXhtbTEwCistI2RlZmluZSBydXd5NHggJXhtbTExCistI2RlZmluZSBzdnh6MSAleW1tMTIKKy0jZGVmaW5lIHN2eHoyICV5bW0xMworLSNkZWZpbmUgc3Z4ejMgJXltbTE0CistI2RlZmluZSBzdnh6NCAleW1tMTUKKy0jZGVmaW5lIGQwICVyOQorLSNkZWZpbmUgZDEgJXIxMAorLSNkZWZpbmUgZDIgJXIxMQorLSNkZWZpbmUgZDMgJXIxMgorLSNkZWZpbmUgZDQgJXIxMworLQorLUVOVFJZKHBvbHkxMzA1XzRibG9ja19hdngyKQorLQkjICVyZGk6IEFjY3VtdWxhdG9yIGhbNV0KKy0JIyAlcnNpOiA2NCBieXRlIGlucHV0IGJsb2NrIG0KKy0JIyAlcmR4OiBQb2x5MTMwNSBrZXkgcls1XQorLQkjICVyY3g6IFF1YWRibG9jayBjb3VudAorLQkjICVyODogIFBvbHkxMzA1IGRlcml2ZWQga2V5IHJeMiB1WzVdLCByXjMgd1s1XSwgcl40IHlbNV0sCistCistCSMgVGhpcyBmb3VyLWJsb2NrIHZhcmlhbnQgdXNlcyBsb29wIHVucm9sbGVkIGJsb2NrIHByb2Nlc3NpbmcuIEl0CistCSMgcmVxdWlyZXMgNCBQb2x5MTMwNSBrZXlzOiByLCByXjIsIHJeMyBhbmQgcl40OgorLQkjIGggPSAoaCArIG0pICogciAgPT4gIGggPSAoaCArIG0xKSAqIHJeNCArIG0yICogcl4zICsgbTMgKiByXjIgKyBtNCAqIHIKKy0KKy0Jdnplcm91cHBlcgorLQlwdXNoCQklcmJ4CistCXB1c2gJCSVyMTIKKy0JcHVzaAkJJXIxMworLQorLQkjIGNvbWJpbmUgcjAsdTAsdzAseTAKKy0Jdm1vdmQJCXkwLHJ1d3kweAorLQl2bW92ZAkJdzAsdDF4CistCXZwdW5wY2tscWRxCXQxLHJ1d3kwLHJ1d3kwCistCXZtb3ZkCQl1MCx0MXgKKy0Jdm1vdmQJCXIwLHQyeAorLQl2cHVucGNrbHFkcQl0Mix0MSx0MQorLQl2cGVybTJpMTI4CSQweDIwLHQxLHJ1d3kwLHJ1d3kwCistCistCSMgY29tYmluZSByMSx1MSx3MSx5MSBhbmQgczE9cjEqNSx2MT11MSo1LHgxPXcxKjUsejE9eTEqNQorLQl2bW92ZAkJeTEscnV3eTF4CistCXZtb3ZkCQl3MSx0MXgKKy0JdnB1bnBja2xxZHEJdDEscnV3eTEscnV3eTEKKy0Jdm1vdmQJCXUxLHQxeAorLQl2bW92ZAkJcjEsdDJ4CistCXZwdW5wY2tscWRxCXQyLHQxLHQxCistCXZwZXJtMmkxMjgJJDB4MjAsdDEscnV3eTEscnV3eTEKKy0JdnBzbGxkCQkkMixydXd5MSxzdnh6MQorLQl2cGFkZGQJCXJ1d3kxLHN2eHoxLHN2eHoxCistCistCSMgY29tYmluZSByMix1Mix3Mix5MiBhbmQgczI9cjIqNSx2Mj11Mio1LHgyPXcyKjUsejI9eTIqNQorLQl2bW92ZAkJeTIscnV3eTJ4CistCXZtb3ZkCQl3Mix0MXgKKy0JdnB1bnBja2xxZHEJdDEscnV3eTIscnV3eTIKKy0Jdm1vdmQJCXUyLHQxeAorLQl2bW92ZAkJcjIsdDJ4CistCXZwdW5wY2tscWRxCXQyLHQxLHQxCistCXZwZXJtMmkxMjgJJDB4MjAsdDEscnV3eTIscnV3eTIKKy0JdnBzbGxkCQkkMixydXd5Mixzdnh6MgorLQl2cGFkZGQJCXJ1d3kyLHN2eHoyLHN2eHoyCistCistCSMgY29tYmluZSByMyx1Myx3Myx5MyBhbmQgczM9cjMqNSx2Mz11Myo1LHgzPXczKjUsejM9eTMqNQorLQl2bW92ZAkJeTMscnV3eTN4CistCXZtb3ZkCQl3Myx0MXgKKy0JdnB1bnBja2xxZHEJdDEscnV3eTMscnV3eTMKKy0Jdm1vdmQJCXUzLHQxeAorLQl2bW92ZAkJcjMsdDJ4CistCXZwdW5wY2tscWRxCXQyLHQxLHQxCistCXZwZXJtMmkxMjgJJDB4MjAsdDEscnV3eTMscnV3eTMKKy0JdnBzbGxkCQkkMixydXd5Myxzdnh6MworLQl2cGFkZGQJCXJ1d3kzLHN2eHozLHN2eHozCistCistCSMgY29tYmluZSByNCx1NCx3NCx5NCBhbmQgczQ9cjQqNSx2ND11NCo1LHg0PXc0KjUsejQ9eTQqNQorLQl2bW92ZAkJeTQscnV3eTR4CistCXZtb3ZkCQl3NCx0MXgKKy0JdnB1bnBja2xxZHEJdDEscnV3eTQscnV3eTQKKy0Jdm1vdmQJCXU0LHQxeAorLQl2bW92ZAkJcjQsdDJ4CistCXZwdW5wY2tscWRxCXQyLHQxLHQxCistCXZwZXJtMmkxMjgJJDB4MjAsdDEscnV3eTQscnV3eTQKKy0JdnBzbGxkCQkkMixydXd5NCxzdnh6NAorLQl2cGFkZGQJCXJ1d3k0LHN2eHo0LHN2eHo0CistCistLkxkb2Jsb2NrNDoKKy0JIyBoYzAgPSBbbVs0OC01MV0gJiAweDNmZmZmZmYsIG1bMzItMzVdICYgMHgzZmZmZmZmLAorLQkjCSBtWzE2LTE5XSAmIDB4M2ZmZmZmZiwgbVsgMC0gM10gJiAweDNmZmZmZmYgKyBoMF0KKy0Jdm1vdmQJCTB4MDAobSksaGMweAorLQl2bW92ZAkJMHgxMChtKSx0MXgKKy0JdnB1bnBja2xxZHEJdDEsaGMwLGhjMAorLQl2bW92ZAkJMHgyMChtKSx0MXgKKy0Jdm1vdmQJCTB4MzAobSksdDJ4CistCXZwdW5wY2tscWRxCXQyLHQxLHQxCistCXZwZXJtMmkxMjgJJDB4MjAsdDEsaGMwLGhjMAorLQl2cGFuZAkJQU5NQVNLKCVyaXApLGhjMCxoYzAKKy0Jdm1vdmQJCWgwLHQxeAorLQl2cGFkZGQJCXQxLGhjMCxoYzAKKy0JIyBoYzEgPSBbKG1bNTEtNTRdID4+IDIpICYgMHgzZmZmZmZmLCAobVszNS0zOF0gPj4gMikgJiAweDNmZmZmZmYsCistCSMJIChtWzE5LTIyXSA+PiAyKSAmIDB4M2ZmZmZmZiwgKG1bIDMtIDZdID4+IDIpICYgMHgzZmZmZmZmICsgaDFdCistCXZtb3ZkCQkweDAzKG0pLGhjMXgKKy0Jdm1vdmQJCTB4MTMobSksdDF4CistCXZwdW5wY2tscWRxCXQxLGhjMSxoYzEKKy0Jdm1vdmQJCTB4MjMobSksdDF4CistCXZtb3ZkCQkweDMzKG0pLHQyeAorLQl2cHVucGNrbHFkcQl0Mix0MSx0MQorLQl2cGVybTJpMTI4CSQweDIwLHQxLGhjMSxoYzEKKy0JdnBzcmxkCQkkMixoYzEsaGMxCistCXZwYW5kCQlBTk1BU0soJXJpcCksaGMxLGhjMQorLQl2bW92ZAkJaDEsdDF4CistCXZwYWRkZAkJdDEsaGMxLGhjMQorLQkjIGhjMiA9IFsobVs1NC01N10gPj4gNCkgJiAweDNmZmZmZmYsIChtWzM4LTQxXSA+PiA0KSAmIDB4M2ZmZmZmZiwKKy0JIwkgKG1bMjItMjVdID4+IDQpICYgMHgzZmZmZmZmLCAobVsgNi0gOV0gPj4gNCkgJiAweDNmZmZmZmYgKyBoMl0KKy0Jdm1vdmQJCTB4MDYobSksaGMyeAorLQl2bW92ZAkJMHgxNihtKSx0MXgKKy0JdnB1bnBja2xxZHEJdDEsaGMyLGhjMgorLQl2bW92ZAkJMHgyNihtKSx0MXgKKy0Jdm1vdmQJCTB4MzYobSksdDJ4CistCXZwdW5wY2tscWRxCXQyLHQxLHQxCistCXZwZXJtMmkxMjgJJDB4MjAsdDEsaGMyLGhjMgorLQl2cHNybGQJCSQ0LGhjMixoYzIKKy0JdnBhbmQJCUFOTUFTSyglcmlwKSxoYzIsaGMyCistCXZtb3ZkCQloMix0MXgKKy0JdnBhZGRkCQl0MSxoYzIsaGMyCistCSMgaGMzID0gWyhtWzU3LTYwXSA+PiA2KSAmIDB4M2ZmZmZmZiwgKG1bNDEtNDRdID4+IDYpICYgMHgzZmZmZmZmLAorLQkjCSAobVsyNS0yOF0gPj4gNikgJiAweDNmZmZmZmYsIChtWyA5LTEyXSA+PiA2KSAmIDB4M2ZmZmZmZiArIGgzXQorLQl2bW92ZAkJMHgwOShtKSxoYzN4CistCXZtb3ZkCQkweDE5KG0pLHQxeAorLQl2cHVucGNrbHFkcQl0MSxoYzMsaGMzCistCXZtb3ZkCQkweDI5KG0pLHQxeAorLQl2bW92ZAkJMHgzOShtKSx0MngKKy0JdnB1bnBja2xxZHEJdDIsdDEsdDEKKy0JdnBlcm0yaTEyOAkkMHgyMCx0MSxoYzMsaGMzCistCXZwc3JsZAkJJDYsaGMzLGhjMworLQl2cGFuZAkJQU5NQVNLKCVyaXApLGhjMyxoYzMKKy0Jdm1vdmQJCWgzLHQxeAorLQl2cGFkZGQJCXQxLGhjMyxoYzMKKy0JIyBoYzQgPSBbKG1bNjAtNjNdID4+IDgpIHwgKDE8PDI0KSwgKG1bNDQtNDddID4+IDgpIHwgKDE8PDI0KSwKKy0JIwkgKG1bMjgtMzFdID4+IDgpIHwgKDE8PDI0KSwgKG1bMTItMTVdID4+IDgpIHwgKDE8PDI0KSArIGg0XQorLQl2bW92ZAkJMHgwYyhtKSxoYzR4CistCXZtb3ZkCQkweDFjKG0pLHQxeAorLQl2cHVucGNrbHFkcQl0MSxoYzQsaGM0CistCXZtb3ZkCQkweDJjKG0pLHQxeAorLQl2bW92ZAkJMHgzYyhtKSx0MngKKy0JdnB1bnBja2xxZHEJdDIsdDEsdDEKKy0JdnBlcm0yaTEyOAkkMHgyMCx0MSxoYzQsaGM0CistCXZwc3JsZAkJJDgsaGM0LGhjNAorLQl2cG9yCQlPUk1BU0soJXJpcCksaGM0LGhjNAorLQl2bW92ZAkJaDQsdDF4CistCXZwYWRkZAkJdDEsaGM0LGhjNAorLQorLQkjIHQxID0gWyBoYzBbM10gKiByMCwgaGMwWzJdICogdTAsIGhjMFsxXSAqIHcwLCBoYzBbMF0gKiB5MCBdCistCXZwbXVsdWRxCWhjMCxydXd5MCx0MQorLQkjIHQxICs9IFsgaGMxWzNdICogczQsIGhjMVsyXSAqIHY0LCBoYzFbMV0gKiB4NCwgaGMxWzBdICogejQgXQorLQl2cG11bHVkcQloYzEsc3Z4ejQsdDIKKy0JdnBhZGRxCQl0Mix0MSx0MQorLQkjIHQxICs9IFsgaGMyWzNdICogczMsIGhjMlsyXSAqIHYzLCBoYzJbMV0gKiB4MywgaGMyWzBdICogejMgXQorLQl2cG11bHVkcQloYzIsc3Z4ejMsdDIKKy0JdnBhZGRxCQl0Mix0MSx0MQorLQkjIHQxICs9IFsgaGMzWzNdICogczIsIGhjM1syXSAqIHYyLCBoYzNbMV0gKiB4MiwgaGMzWzBdICogejIgXQorLQl2cG11bHVkcQloYzMsc3Z4ejIsdDIKKy0JdnBhZGRxCQl0Mix0MSx0MQorLQkjIHQxICs9IFsgaGM0WzNdICogczEsIGhjNFsyXSAqIHYxLCBoYzRbMV0gKiB4MSwgaGM0WzBdICogejEgXQorLQl2cG11bHVkcQloYzQsc3Z4ejEsdDIKKy0JdnBhZGRxCQl0Mix0MSx0MQorLQkjIGQwID0gdDFbMF0gKyB0MVsxXSArIHRbMl0gKyB0WzNdCistCXZwZXJtcQkJJDB4ZWUsdDEsdDIKKy0JdnBhZGRxCQl0Mix0MSx0MQorLQl2cHNybGRxCQkkOCx0MSx0MgorLQl2cGFkZHEJCXQyLHQxLHQxCistCXZtb3ZxCQl0MXgsZDAKKy0KKy0JIyB0MSA9IFsgaGMwWzNdICogcjEsIGhjMFsyXSAqIHUxLGhjMFsxXSAqIHcxLCBoYzBbMF0gKiB5MSBdCistCXZwbXVsdWRxCWhjMCxydXd5MSx0MQorLQkjIHQxICs9IFsgaGMxWzNdICogcjAsIGhjMVsyXSAqIHUwLCBoYzFbMV0gKiB3MCwgaGMxWzBdICogeTAgXQorLQl2cG11bHVkcQloYzEscnV3eTAsdDIKKy0JdnBhZGRxCQl0Mix0MSx0MQorLQkjIHQxICs9IFsgaGMyWzNdICogczQsIGhjMlsyXSAqIHY0LCBoYzJbMV0gKiB4NCwgaGMyWzBdICogejQgXQorLQl2cG11bHVkcQloYzIsc3Z4ejQsdDIKKy0JdnBhZGRxCQl0Mix0MSx0MQorLQkjIHQxICs9IFsgaGMzWzNdICogczMsIGhjM1syXSAqIHYzLCBoYzNbMV0gKiB4MywgaGMzWzBdICogejMgXQorLQl2cG11bHVkcQloYzMsc3Z4ejMsdDIKKy0JdnBhZGRxCQl0Mix0MSx0MQorLQkjIHQxICs9IFsgaGM0WzNdICogczIsIGhjNFsyXSAqIHYyLCBoYzRbMV0gKiB4MiwgaGM0WzBdICogejIgXQorLQl2cG11bHVkcQloYzQsc3Z4ejIsdDIKKy0JdnBhZGRxCQl0Mix0MSx0MQorLQkjIGQxID0gdDFbMF0gKyB0MVsxXSArIHQxWzNdICsgdDFbNF0KKy0JdnBlcm1xCQkkMHhlZSx0MSx0MgorLQl2cGFkZHEJCXQyLHQxLHQxCistCXZwc3JsZHEJCSQ4LHQxLHQyCistCXZwYWRkcQkJdDIsdDEsdDEKKy0Jdm1vdnEJCXQxeCxkMQorLQorLQkjIHQxID0gWyBoYzBbM10gKiByMiwgaGMwWzJdICogdTIsIGhjMFsxXSAqIHcyLCBoYzBbMF0gKiB5MiBdCistCXZwbXVsdWRxCWhjMCxydXd5Mix0MQorLQkjIHQxICs9IFsgaGMxWzNdICogcjEsIGhjMVsyXSAqIHUxLCBoYzFbMV0gKiB3MSwgaGMxWzBdICogeTEgXQorLQl2cG11bHVkcQloYzEscnV3eTEsdDIKKy0JdnBhZGRxCQl0Mix0MSx0MQorLQkjIHQxICs9IFsgaGMyWzNdICogcjAsIGhjMlsyXSAqIHUwLCBoYzJbMV0gKiB3MCwgaGMyWzBdICogeTAgXQorLQl2cG11bHVkcQloYzIscnV3eTAsdDIKKy0JdnBhZGRxCQl0Mix0MSx0MQorLQkjIHQxICs9IFsgaGMzWzNdICogczQsIGhjM1syXSAqIHY0LCBoYzNbMV0gKiB4NCwgaGMzWzBdICogejQgXQorLQl2cG11bHVkcQloYzMsc3Z4ejQsdDIKKy0JdnBhZGRxCQl0Mix0MSx0MQorLQkjIHQxICs9IFsgaGM0WzNdICogczMsIGhjNFsyXSAqIHYzLCBoYzRbMV0gKiB4MywgaGM0WzBdICogejMgXQorLQl2cG11bHVkcQloYzQsc3Z4ejMsdDIKKy0JdnBhZGRxCQl0Mix0MSx0MQorLQkjIGQyID0gdDFbMF0gKyB0MVsxXSArIHQxWzJdICsgdDFbM10KKy0JdnBlcm1xCQkkMHhlZSx0MSx0MgorLQl2cGFkZHEJCXQyLHQxLHQxCistCXZwc3JsZHEJCSQ4LHQxLHQyCistCXZwYWRkcQkJdDIsdDEsdDEKKy0Jdm1vdnEJCXQxeCxkMgorLQorLQkjIHQxID0gWyBoYzBbM10gKiByMywgaGMwWzJdICogdTMsIGhjMFsxXSAqIHczLCBoYzBbMF0gKiB5MyBdCistCXZwbXVsdWRxCWhjMCxydXd5Myx0MQorLQkjIHQxICs9IFsgaGMxWzNdICogcjIsIGhjMVsyXSAqIHUyLCBoYzFbMV0gKiB3MiwgaGMxWzBdICogeTIgXQorLQl2cG11bHVkcQloYzEscnV3eTIsdDIKKy0JdnBhZGRxCQl0Mix0MSx0MQorLQkjIHQxICs9IFsgaGMyWzNdICogcjEsIGhjMlsyXSAqIHUxLCBoYzJbMV0gKiB3MSwgaGMyWzBdICogeTEgXQorLQl2cG11bHVkcQloYzIscnV3eTEsdDIKKy0JdnBhZGRxCQl0Mix0MSx0MQorLQkjIHQxICs9IFsgaGMzWzNdICogcjAsIGhjM1syXSAqIHUwLCBoYzNbMV0gKiB3MCwgaGMzWzBdICogeTAgXQorLQl2cG11bHVkcQloYzMscnV3eTAsdDIKKy0JdnBhZGRxCQl0Mix0MSx0MQorLQkjIHQxICs9IFsgaGM0WzNdICogczQsIGhjNFsyXSAqIHY0LCBoYzRbMV0gKiB4NCwgaGM0WzBdICogejQgXQorLQl2cG11bHVkcQloYzQsc3Z4ejQsdDIKKy0JdnBhZGRxCQl0Mix0MSx0MQorLQkjIGQzID0gdDFbMF0gKyB0MVsxXSArIHQxWzJdICsgdDFbM10KKy0JdnBlcm1xCQkkMHhlZSx0MSx0MgorLQl2cGFkZHEJCXQyLHQxLHQxCistCXZwc3JsZHEJCSQ4LHQxLHQyCistCXZwYWRkcQkJdDIsdDEsdDEKKy0Jdm1vdnEJCXQxeCxkMworLQorLQkjIHQxID0gWyBoYzBbM10gKiByNCwgaGMwWzJdICogdTQsIGhjMFsxXSAqIHc0LCBoYzBbMF0gKiB5NCBdCistCXZwbXVsdWRxCWhjMCxydXd5NCx0MQorLQkjIHQxICs9IFsgaGMxWzNdICogcjMsIGhjMVsyXSAqIHUzLCBoYzFbMV0gKiB3MywgaGMxWzBdICogeTMgXQorLQl2cG11bHVkcQloYzEscnV3eTMsdDIKKy0JdnBhZGRxCQl0Mix0MSx0MQorLQkjIHQxICs9IFsgaGMyWzNdICogcjIsIGhjMlsyXSAqIHUyLCBoYzJbMV0gKiB3MiwgaGMyWzBdICogeTIgXQorLQl2cG11bHVkcQloYzIscnV3eTIsdDIKKy0JdnBhZGRxCQl0Mix0MSx0MQorLQkjIHQxICs9IFsgaGMzWzNdICogcjEsIGhjM1syXSAqIHUxLCBoYzNbMV0gKiB3MSwgaGMzWzBdICogeTEgXQorLQl2cG11bHVkcQloYzMscnV3eTEsdDIKKy0JdnBhZGRxCQl0Mix0MSx0MQorLQkjIHQxICs9IFsgaGM0WzNdICogcjAsIGhjNFsyXSAqIHUwLCBoYzRbMV0gKiB3MCwgaGM0WzBdICogeTAgXQorLQl2cG11bHVkcQloYzQscnV3eTAsdDIKKy0JdnBhZGRxCQl0Mix0MSx0MQorLQkjIGQ0ID0gdDFbMF0gKyB0MVsxXSArIHQxWzJdICsgdDFbM10KKy0JdnBlcm1xCQkkMHhlZSx0MSx0MgorLQl2cGFkZHEJCXQyLHQxLHQxCistCXZwc3JsZHEJCSQ4LHQxLHQyCistCXZwYWRkcQkJdDIsdDEsdDEKKy0Jdm1vdnEJCXQxeCxkNAorLQorLQkjIE5vdyBkbyBhIHBhcnRpYWwgcmVkdWN0aW9uIG1vZCAoMl4xMzApLTUsIGNhcnJ5aW5nIGgwIC0+IGgxIC0+IGgyIC0+CistCSMgaDMgLT4gaDQgLT4gaDAgLT4gaDEgdG8gZ2V0IGgwLGgyLGgzLGg0IDwgMl4yNiBhbmQgaDEgPCAyXjI2ICsgYSBzbWFsbAorLQkjIGFtb3VudC4gIENhcmVmdWw6IHdlIG11c3Qgbm90IGFzc3VtZSB0aGUgY2FycnkgYml0cyAnZDAgPj4gMjYnLAorLQkjICdkMSA+PiAyNicsICdkMiA+PiAyNicsICdkMyA+PiAyNicsIGFuZCAnKGQ0ID4+IDI2KSAqIDUnIGZpdCBpbiAzMi1iaXQKKy0JIyBpbnRlZ2Vycy4gIEl0J3MgdHJ1ZSBpbiBhIHNpbmdsZS1ibG9jayBpbXBsZW1lbnRhdGlvbiwgYnV0IG5vdCBoZXJlLgorLQorLQkjIGQxICs9IGQwID4+IDI2CistCW1vdgkJZDAsJXJheAorLQlzaHIJCSQyNiwlcmF4CistCWFkZAkJJXJheCxkMQorLQkjIGgwID0gZDAgJiAweDNmZmZmZmYKKy0JbW92CQlkMCwlcmJ4CistCWFuZAkJJDB4M2ZmZmZmZiwlZWJ4CistCistCSMgZDIgKz0gZDEgPj4gMjYKKy0JbW92CQlkMSwlcmF4CistCXNocgkJJDI2LCVyYXgKKy0JYWRkCQklcmF4LGQyCistCSMgaDEgPSBkMSAmIDB4M2ZmZmZmZgorLQltb3YJCWQxLCVyYXgKKy0JYW5kCQkkMHgzZmZmZmZmLCVlYXgKKy0JbW92CQklZWF4LGgxCistCistCSMgZDMgKz0gZDIgPj4gMjYKKy0JbW92CQlkMiwlcmF4CistCXNocgkJJDI2LCVyYXgKKy0JYWRkCQklcmF4LGQzCistCSMgaDIgPSBkMiAmIDB4M2ZmZmZmZgorLQltb3YJCWQyLCVyYXgKKy0JYW5kCQkkMHgzZmZmZmZmLCVlYXgKKy0JbW92CQklZWF4LGgyCistCistCSMgZDQgKz0gZDMgPj4gMjYKKy0JbW92CQlkMywlcmF4CistCXNocgkJJDI2LCVyYXgKKy0JYWRkCQklcmF4LGQ0CistCSMgaDMgPSBkMyAmIDB4M2ZmZmZmZgorLQltb3YJCWQzLCVyYXgKKy0JYW5kCQkkMHgzZmZmZmZmLCVlYXgKKy0JbW92CQklZWF4LGgzCistCistCSMgaDAgKz0gKGQ0ID4+IDI2KSAqIDUKKy0JbW92CQlkNCwlcmF4CistCXNocgkJJDI2LCVyYXgKKy0JbGVhCQkoJXJheCwlcmF4LDQpLCVyYXgKKy0JYWRkCQklcmF4LCVyYngKKy0JIyBoNCA9IGQ0ICYgMHgzZmZmZmZmCistCW1vdgkJZDQsJXJheAorLQlhbmQJCSQweDNmZmZmZmYsJWVheAorLQltb3YJCSVlYXgsaDQKKy0KKy0JIyBoMSArPSBoMCA+PiAyNgorLQltb3YJCSVyYngsJXJheAorLQlzaHIJCSQyNiwlcmF4CistCWFkZAkJJWVheCxoMQorLQkjIGgwID0gaDAgJiAweDNmZmZmZmYKKy0JYW5kbAkJJDB4M2ZmZmZmZiwlZWJ4CistCW1vdgkJJWVieCxoMAorLQorLQlhZGQJCSQweDQwLG0KKy0JZGVjCQklcmN4CistCWpuegkJLkxkb2Jsb2NrNAorLQorLQl2emVyb3VwcGVyCistCXBvcAkJJXIxMworLQlwb3AJCSVyMTIKKy0JcG9wCQklcmJ4CistCXJldAorLUVORFBST0MocG9seTEzMDVfNGJsb2NrX2F2eDIpCistLS0gYS9hcmNoL3g4Ni9jcnlwdG8vcG9seTEzMDUtc3NlMi14ODZfNjQuUworKysrIC9kZXYvbnVsbAorQEAgLTEsNTkwICswLDAgQEAKKy0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqLworLS8qCistICogUG9seTEzMDUgYXV0aGVudGljYXRvciBhbGdvcml0aG0sIFJGQzc1MzksIHg2NCBTU0UyIGZ1bmN0aW9ucworLSAqCistICogQ29weXJpZ2h0IChDKSAyMDE1IE1hcnRpbiBXaWxsaQorLSAqLworLQorLSNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CistCistLnNlY3Rpb24JLnJvZGF0YS5jc3QxNi5BTk1BU0ssICJhTSIsIEBwcm9nYml0cywgMTYKKy0uYWxpZ24gMTYKKy1BTk1BU0s6CS5vY3RhIDB4MDAwMDAwMDAwM2ZmZmZmZjAwMDAwMDAwMDNmZmZmZmYKKy0KKy0uc2VjdGlvbgkucm9kYXRhLmNzdDE2Lk9STUFTSywgImFNIiwgQHByb2diaXRzLCAxNgorLS5hbGlnbiAxNgorLU9STUFTSzoJLm9jdGEgMHgwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMTAwMDAwMAorLQorLS50ZXh0CistCistI2RlZmluZSBoMCAweDAwKCVyZGkpCistI2RlZmluZSBoMSAweDA0KCVyZGkpCistI2RlZmluZSBoMiAweDA4KCVyZGkpCistI2RlZmluZSBoMyAweDBjKCVyZGkpCistI2RlZmluZSBoNCAweDEwKCVyZGkpCistI2RlZmluZSByMCAweDAwKCVyZHgpCistI2RlZmluZSByMSAweDA0KCVyZHgpCistI2RlZmluZSByMiAweDA4KCVyZHgpCistI2RlZmluZSByMyAweDBjKCVyZHgpCistI2RlZmluZSByNCAweDEwKCVyZHgpCistI2RlZmluZSBzMSAweDAwKCVyc3ApCistI2RlZmluZSBzMiAweDA0KCVyc3ApCistI2RlZmluZSBzMyAweDA4KCVyc3ApCistI2RlZmluZSBzNCAweDBjKCVyc3ApCistI2RlZmluZSBtICVyc2kKKy0jZGVmaW5lIGgwMSAleG1tMAorLSNkZWZpbmUgaDIzICV4bW0xCistI2RlZmluZSBoNDQgJXhtbTIKKy0jZGVmaW5lIHQxICV4bW0zCistI2RlZmluZSB0MiAleG1tNAorLSNkZWZpbmUgdDMgJXhtbTUKKy0jZGVmaW5lIHQ0ICV4bW02CistI2RlZmluZSBtYXNrICV4bW03CistI2RlZmluZSBkMCAlcjgKKy0jZGVmaW5lIGQxICVyOQorLSNkZWZpbmUgZDIgJXIxMAorLSNkZWZpbmUgZDMgJXIxMQorLSNkZWZpbmUgZDQgJXIxMgorLQorLUVOVFJZKHBvbHkxMzA1X2Jsb2NrX3NzZTIpCistCSMgJXJkaTogQWNjdW11bGF0b3IgaFs1XQorLQkjICVyc2k6IDE2IGJ5dGUgaW5wdXQgYmxvY2sgbQorLQkjICVyZHg6IFBvbHkxMzA1IGtleSByWzVdCistCSMgJXJjeDogQmxvY2sgY291bnQKKy0KKy0JIyBUaGlzIHNpbmdsZSBibG9jayB2YXJpYW50IHRyaWVzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgYnkgZG9pbmcgdHdvCistCSMgbXVsdGlwbGljYXRpb25zIGluIHBhcmFsbGVsIHVzaW5nIFNTRSBpbnN0cnVjdGlvbnMuIFRoZXJlIGlzIHF1aXRlCistCSMgc29tZSBxdWFyZHdvcmQgcGFja2luZyBpbnZvbHZlZCwgaGVuY2UgdGhlIHNwZWVkdXAgaXMgbWFyZ2luYWwuCistCistCXB1c2gJCSVyYngKKy0JcHVzaAkJJXIxMgorLQlzdWIJCSQweDEwLCVyc3AKKy0KKy0JIyBzMS4uczQgPSByMS4ucjQgKiA1CistCW1vdgkJcjEsJWVheAorLQlsZWEJCSglZWF4LCVlYXgsNCksJWVheAorLQltb3YJCSVlYXgsczEKKy0JbW92CQlyMiwlZWF4CistCWxlYQkJKCVlYXgsJWVheCw0KSwlZWF4CistCW1vdgkJJWVheCxzMgorLQltb3YJCXIzLCVlYXgKKy0JbGVhCQkoJWVheCwlZWF4LDQpLCVlYXgKKy0JbW92CQklZWF4LHMzCistCW1vdgkJcjQsJWVheAorLQlsZWEJCSglZWF4LCVlYXgsNCksJWVheAorLQltb3YJCSVlYXgsczQKKy0KKy0JbW92ZHFhCQlBTk1BU0soJXJpcCksbWFzaworLQorLS5MZG9ibG9jazoKKy0JIyBoMDEgPSBbMCwgaDEsIDAsIGgwXQorLQkjIGgyMyA9IFswLCBoMywgMCwgaDJdCistCSMgaDQ0ID0gWzAsIGg0LCAwLCBoNF0KKy0JbW92ZAkJaDAsaDAxCistCW1vdmQJCWgxLHQxCistCW1vdmQJCWgyLGgyMworLQltb3ZkCQloMyx0MgorLQltb3ZkCQloNCxoNDQKKy0JcHVucGNrbHFkcQl0MSxoMDEKKy0JcHVucGNrbHFkcQl0MixoMjMKKy0JcHVucGNrbHFkcQloNDQsaDQ0CistCistCSMgaDAxICs9IFsgKG1bMy02XSA+PiAyKSAmIDB4M2ZmZmZmZiwgbVswLTNdICYgMHgzZmZmZmZmIF0KKy0JbW92ZAkJMHgwMChtKSx0MQorLQltb3ZkCQkweDAzKG0pLHQyCistCXBzcmxkCQkkMix0MgorLQlwdW5wY2tscWRxCXQyLHQxCistCXBhbmQJCW1hc2ssdDEKKy0JcGFkZGQJCXQxLGgwMQorLQkjIGgyMyArPSBbIChtWzktMTJdID4+IDYpICYgMHgzZmZmZmZmLCAobVs2LTldID4+IDQpICYgMHgzZmZmZmZmIF0KKy0JbW92ZAkJMHgwNihtKSx0MQorLQltb3ZkCQkweDA5KG0pLHQyCistCXBzcmxkCQkkNCx0MQorLQlwc3JsZAkJJDYsdDIKKy0JcHVucGNrbHFkcQl0Mix0MQorLQlwYW5kCQltYXNrLHQxCistCXBhZGRkCQl0MSxoMjMKKy0JIyBoNDQgKz0gWyAobVsxMi0xNV0gPj4gOCkgfCAoMSA8PCAyNCksIChtWzEyLTE1XSA+PiA4KSB8ICgxIDw8IDI0KSBdCistCW1vdgkJMHgwYyhtKSwlZWF4CistCXNocgkJJDgsJWVheAorLQlvcgkJJDB4MDEwMDAwMDAsJWVheAorLQltb3ZkCQklZWF4LHQxCistCXBzaHVmZAkJJDB4YzQsdDEsdDEKKy0JcGFkZGQJCXQxLGg0NAorLQorLQkjIHQxWzBdID0gaDAgKiByMCArIGgyICogczMKKy0JIyB0MVsxXSA9IGgxICogczQgKyBoMyAqIHMyCistCW1vdmQJCXIwLHQxCistCW1vdmQJCXM0LHQyCistCXB1bnBja2xxZHEJdDIsdDEKKy0JcG11bHVkcQkJaDAxLHQxCistCW1vdmQJCXMzLHQyCistCW1vdmQJCXMyLHQzCistCXB1bnBja2xxZHEJdDMsdDIKKy0JcG11bHVkcQkJaDIzLHQyCistCXBhZGRxCQl0Mix0MQorLQkjIHQyWzBdID0gaDAgKiByMSArIGgyICogczQKKy0JIyB0MlsxXSA9IGgxICogcjAgKyBoMyAqIHMzCistCW1vdmQJCXIxLHQyCistCW1vdmQJCXIwLHQzCistCXB1bnBja2xxZHEJdDMsdDIKKy0JcG11bHVkcQkJaDAxLHQyCistCW1vdmQJCXM0LHQzCistCW1vdmQJCXMzLHQ0CistCXB1bnBja2xxZHEJdDQsdDMKKy0JcG11bHVkcQkJaDIzLHQzCistCXBhZGRxCQl0Myx0MgorLQkjIHQzWzBdID0gaDQgKiBzMQorLQkjIHQzWzFdID0gaDQgKiBzMgorLQltb3ZkCQlzMSx0MworLQltb3ZkCQlzMix0NAorLQlwdW5wY2tscWRxCXQ0LHQzCistCXBtdWx1ZHEJCWg0NCx0MworLQkjIGQwID0gdDFbMF0gKyB0MVsxXSArIHQzWzBdCistCSMgZDEgPSB0MlswXSArIHQyWzFdICsgdDNbMV0KKy0JbW92ZHFhCQl0MSx0NAorLQlwdW5wY2tscWRxCXQyLHQ0CistCXB1bnBja2hxZHEJdDIsdDEKKy0JcGFkZHEJCXQ0LHQxCistCXBhZGRxCQl0Myx0MQorLQltb3ZxCQl0MSxkMAorLQlwc3JsZHEJCSQ4LHQxCistCW1vdnEJCXQxLGQxCistCistCSMgdDFbMF0gPSBoMCAqIHIyICsgaDIgKiByMAorLQkjIHQxWzFdID0gaDEgKiByMSArIGgzICogczQKKy0JbW92ZAkJcjIsdDEKKy0JbW92ZAkJcjEsdDIKKy0JcHVucGNrbHFkcSAJdDIsdDEKKy0JcG11bHVkcQkJaDAxLHQxCistCW1vdmQJCXIwLHQyCistCW1vdmQJCXM0LHQzCistCXB1bnBja2xxZHEJdDMsdDIKKy0JcG11bHVkcQkJaDIzLHQyCistCXBhZGRxCQl0Mix0MQorLQkjIHQyWzBdID0gaDAgKiByMyArIGgyICogcjEKKy0JIyB0MlsxXSA9IGgxICogcjIgKyBoMyAqIHIwCistCW1vdmQJCXIzLHQyCistCW1vdmQJCXIyLHQzCistCXB1bnBja2xxZHEJdDMsdDIKKy0JcG11bHVkcQkJaDAxLHQyCistCW1vdmQJCXIxLHQzCistCW1vdmQJCXIwLHQ0CistCXB1bnBja2xxZHEJdDQsdDMKKy0JcG11bHVkcQkJaDIzLHQzCistCXBhZGRxCQl0Myx0MgorLQkjIHQzWzBdID0gaDQgKiBzMworLQkjIHQzWzFdID0gaDQgKiBzNAorLQltb3ZkCQlzMyx0MworLQltb3ZkCQlzNCx0NAorLQlwdW5wY2tscWRxCXQ0LHQzCistCXBtdWx1ZHEJCWg0NCx0MworLQkjIGQyID0gdDFbMF0gKyB0MVsxXSArIHQzWzBdCistCSMgZDMgPSB0MlswXSArIHQyWzFdICsgdDNbMV0KKy0JbW92ZHFhCQl0MSx0NAorLQlwdW5wY2tscWRxCXQyLHQ0CistCXB1bnBja2hxZHEJdDIsdDEKKy0JcGFkZHEJCXQ0LHQxCistCXBhZGRxCQl0Myx0MQorLQltb3ZxCQl0MSxkMgorLQlwc3JsZHEJCSQ4LHQxCistCW1vdnEJCXQxLGQzCistCistCSMgdDFbMF0gPSBoMCAqIHI0ICsgaDIgKiByMgorLQkjIHQxWzFdID0gaDEgKiByMyArIGgzICogcjEKKy0JbW92ZAkJcjQsdDEKKy0JbW92ZAkJcjMsdDIKKy0JcHVucGNrbHFkcQl0Mix0MQorLQlwbXVsdWRxCQloMDEsdDEKKy0JbW92ZAkJcjIsdDIKKy0JbW92ZAkJcjEsdDMKKy0JcHVucGNrbHFkcQl0Myx0MgorLQlwbXVsdWRxCQloMjMsdDIKKy0JcGFkZHEJCXQyLHQxCistCSMgdDNbMF0gPSBoNCAqIHIwCistCW1vdmQJCXIwLHQzCistCXBtdWx1ZHEJCWg0NCx0MworLQkjIGQ0ID0gdDFbMF0gKyB0MVsxXSArIHQzWzBdCistCW1vdmRxYQkJdDEsdDQKKy0JcHNybGRxCQkkOCx0NAorLQlwYWRkcQkJdDQsdDEKKy0JcGFkZHEJCXQzLHQxCistCW1vdnEJCXQxLGQ0CistCistCSMgZDEgKz0gZDAgPj4gMjYKKy0JbW92CQlkMCwlcmF4CistCXNocgkJJDI2LCVyYXgKKy0JYWRkCQklcmF4LGQxCistCSMgaDAgPSBkMCAmIDB4M2ZmZmZmZgorLQltb3YJCWQwLCVyYngKKy0JYW5kCQkkMHgzZmZmZmZmLCVlYngKKy0KKy0JIyBkMiArPSBkMSA+PiAyNgorLQltb3YJCWQxLCVyYXgKKy0Jc2hyCQkkMjYsJXJheAorLQlhZGQJCSVyYXgsZDIKKy0JIyBoMSA9IGQxICYgMHgzZmZmZmZmCistCW1vdgkJZDEsJXJheAorLQlhbmQJCSQweDNmZmZmZmYsJWVheAorLQltb3YJCSVlYXgsaDEKKy0KKy0JIyBkMyArPSBkMiA+PiAyNgorLQltb3YJCWQyLCVyYXgKKy0Jc2hyCQkkMjYsJXJheAorLQlhZGQJCSVyYXgsZDMKKy0JIyBoMiA9IGQyICYgMHgzZmZmZmZmCistCW1vdgkJZDIsJXJheAorLQlhbmQJCSQweDNmZmZmZmYsJWVheAorLQltb3YJCSVlYXgsaDIKKy0KKy0JIyBkNCArPSBkMyA+PiAyNgorLQltb3YJCWQzLCVyYXgKKy0Jc2hyCQkkMjYsJXJheAorLQlhZGQJCSVyYXgsZDQKKy0JIyBoMyA9IGQzICYgMHgzZmZmZmZmCistCW1vdgkJZDMsJXJheAorLQlhbmQJCSQweDNmZmZmZmYsJWVheAorLQltb3YJCSVlYXgsaDMKKy0KKy0JIyBoMCArPSAoZDQgPj4gMjYpICogNQorLQltb3YJCWQ0LCVyYXgKKy0Jc2hyCQkkMjYsJXJheAorLQlsZWEJCSglcmF4LCVyYXgsNCksJXJheAorLQlhZGQJCSVyYXgsJXJieAorLQkjIGg0ID0gZDQgJiAweDNmZmZmZmYKKy0JbW92CQlkNCwlcmF4CistCWFuZAkJJDB4M2ZmZmZmZiwlZWF4CistCW1vdgkJJWVheCxoNAorLQorLQkjIGgxICs9IGgwID4+IDI2CistCW1vdgkJJXJieCwlcmF4CistCXNocgkJJDI2LCVyYXgKKy0JYWRkCQklZWF4LGgxCistCSMgaDAgPSBoMCAmIDB4M2ZmZmZmZgorLQlhbmRsCQkkMHgzZmZmZmZmLCVlYngKKy0JbW92CQklZWJ4LGgwCistCistCWFkZAkJJDB4MTAsbQorLQlkZWMJCSVyY3gKKy0Jam56CQkuTGRvYmxvY2sKKy0KKy0JIyBaZXJvaW5nIG9mIGtleSBtYXRlcmlhbAorLQltb3YJCSVyY3gsMHgwMCglcnNwKQorLQltb3YJCSVyY3gsMHgwOCglcnNwKQorLQorLQlhZGQJCSQweDEwLCVyc3AKKy0JcG9wCQklcjEyCistCXBvcAkJJXJieAorLQlyZXQKKy1FTkRQUk9DKHBvbHkxMzA1X2Jsb2NrX3NzZTIpCistCistCistI2RlZmluZSB1MCAweDAwKCVyOCkKKy0jZGVmaW5lIHUxIDB4MDQoJXI4KQorLSNkZWZpbmUgdTIgMHgwOCglcjgpCistI2RlZmluZSB1MyAweDBjKCVyOCkKKy0jZGVmaW5lIHU0IDB4MTAoJXI4KQorLSNkZWZpbmUgaGMwICV4bW0wCistI2RlZmluZSBoYzEgJXhtbTEKKy0jZGVmaW5lIGhjMiAleG1tMgorLSNkZWZpbmUgaGMzICV4bW01CistI2RlZmluZSBoYzQgJXhtbTYKKy0jZGVmaW5lIHJ1MCAleG1tNworLSNkZWZpbmUgcnUxICV4bW04CistI2RlZmluZSBydTIgJXhtbTkKKy0jZGVmaW5lIHJ1MyAleG1tMTAKKy0jZGVmaW5lIHJ1NCAleG1tMTEKKy0jZGVmaW5lIHN2MSAleG1tMTIKKy0jZGVmaW5lIHN2MiAleG1tMTMKKy0jZGVmaW5lIHN2MyAleG1tMTQKKy0jZGVmaW5lIHN2NCAleG1tMTUKKy0jdW5kZWYgZDAKKy0jZGVmaW5lIGQwICVyMTMKKy0KKy1FTlRSWShwb2x5MTMwNV8yYmxvY2tfc3NlMikKKy0JIyAlcmRpOiBBY2N1bXVsYXRvciBoWzVdCistCSMgJXJzaTogMTYgYnl0ZSBpbnB1dCBibG9jayBtCistCSMgJXJkeDogUG9seTEzMDUga2V5IHJbNV0KKy0JIyAlcmN4OiBEb3VibGVibG9jayBjb3VudAorLQkjICVyODogIFBvbHkxMzA1IGRlcml2ZWQga2V5IHJeMiB1WzVdCistCistCSMgVGhpcyB0d28tYmxvY2sgdmFyaWFudCBmdXJ0aGVyIGltcHJvdmVzIHBlcmZvcm1hbmNlIGJ5IHVzaW5nIGxvb3AKKy0JIyB1bnJvbGxlZCBibG9jayBwcm9jZXNzaW5nLiBUaGlzIGlzIG1vcmUgc3RyYWlnaHQgZm9yd2FyZCBhbmQgZG9lcworLQkjIGxlc3MgYnl0ZSBzaHVmZmxpbmcsIGJ1dCByZXF1aXJlcyBhIHNlY29uZCBQb2x5MTMwNSBrZXkgcl4yOgorLQkjIGggPSAoaCArIG0pICogciAgICA9PiAgICBoID0gKGggKyBtMSkgKiByXjIgKyBtMiAqIHIKKy0KKy0JcHVzaAkJJXJieAorLQlwdXNoCQklcjEyCistCXB1c2gJCSVyMTMKKy0KKy0JIyBjb21iaW5lIHIwLHUwCistCW1vdmQJCXUwLHJ1MAorLQltb3ZkCQlyMCx0MQorLQlwdW5wY2tscWRxCXQxLHJ1MAorLQorLQkjIGNvbWJpbmUgcjEsdTEgYW5kIHMxPXIxKjUsdjE9dTEqNQorLQltb3ZkCQl1MSxydTEKKy0JbW92ZAkJcjEsdDEKKy0JcHVucGNrbHFkcQl0MSxydTEKKy0JbW92ZHFhCQlydTEsc3YxCistCXBzbGxkCQkkMixzdjEKKy0JcGFkZGQJCXJ1MSxzdjEKKy0KKy0JIyBjb21iaW5lIHIyLHUyIGFuZCBzMj1yMio1LHYyPXUyKjUKKy0JbW92ZAkJdTIscnUyCistCW1vdmQJCXIyLHQxCistCXB1bnBja2xxZHEJdDEscnUyCistCW1vdmRxYQkJcnUyLHN2MgorLQlwc2xsZAkJJDIsc3YyCistCXBhZGRkCQlydTIsc3YyCistCistCSMgY29tYmluZSByMyx1MyBhbmQgczM9cjMqNSx2Mz11Myo1CistCW1vdmQJCXUzLHJ1MworLQltb3ZkCQlyMyx0MQorLQlwdW5wY2tscWRxCXQxLHJ1MworLQltb3ZkcWEJCXJ1MyxzdjMKKy0JcHNsbGQJCSQyLHN2MworLQlwYWRkZAkJcnUzLHN2MworLQorLQkjIGNvbWJpbmUgcjQsdTQgYW5kIHM0PXI0KjUsdjQ9dTQqNQorLQltb3ZkCQl1NCxydTQKKy0JbW92ZAkJcjQsdDEKKy0JcHVucGNrbHFkcQl0MSxydTQKKy0JbW92ZHFhCQlydTQsc3Y0CistCXBzbGxkCQkkMixzdjQKKy0JcGFkZGQJCXJ1NCxzdjQKKy0KKy0uTGRvYmxvY2syOgorLQkjIGhjMCA9IFsgbVsxNi0xOV0gJiAweDNmZmZmZmYsIGgwICsgbVswLTNdICYgMHgzZmZmZmZmIF0KKy0JbW92ZAkJMHgwMChtKSxoYzAKKy0JbW92ZAkJMHgxMChtKSx0MQorLQlwdW5wY2tscWRxCXQxLGhjMAorLQlwYW5kCQlBTk1BU0soJXJpcCksaGMwCistCW1vdmQJCWgwLHQxCistCXBhZGRkCQl0MSxoYzAKKy0JIyBoYzEgPSBbIChtWzE5LTIyXSA+PiAyKSAmIDB4M2ZmZmZmZiwgaDEgKyAobVszLTZdID4+IDIpICYgMHgzZmZmZmZmIF0KKy0JbW92ZAkJMHgwMyhtKSxoYzEKKy0JbW92ZAkJMHgxMyhtKSx0MQorLQlwdW5wY2tscWRxCXQxLGhjMQorLQlwc3JsZAkJJDIsaGMxCistCXBhbmQJCUFOTUFTSyglcmlwKSxoYzEKKy0JbW92ZAkJaDEsdDEKKy0JcGFkZGQJCXQxLGhjMQorLQkjIGhjMiA9IFsgKG1bMjItMjVdID4+IDQpICYgMHgzZmZmZmZmLCBoMiArIChtWzYtOV0gPj4gNCkgJiAweDNmZmZmZmYgXQorLQltb3ZkCQkweDA2KG0pLGhjMgorLQltb3ZkCQkweDE2KG0pLHQxCistCXB1bnBja2xxZHEJdDEsaGMyCistCXBzcmxkCQkkNCxoYzIKKy0JcGFuZAkJQU5NQVNLKCVyaXApLGhjMgorLQltb3ZkCQloMix0MQorLQlwYWRkZAkJdDEsaGMyCistCSMgaGMzID0gWyAobVsyNS0yOF0gPj4gNikgJiAweDNmZmZmZmYsIGgzICsgKG1bOS0xMl0gPj4gNikgJiAweDNmZmZmZmYgXQorLQltb3ZkCQkweDA5KG0pLGhjMworLQltb3ZkCQkweDE5KG0pLHQxCistCXB1bnBja2xxZHEJdDEsaGMzCistCXBzcmxkCQkkNixoYzMKKy0JcGFuZAkJQU5NQVNLKCVyaXApLGhjMworLQltb3ZkCQloMyx0MQorLQlwYWRkZAkJdDEsaGMzCistCSMgaGM0ID0gWyAobVsyOC0zMV0gPj4gOCkgfCAoMTw8MjQpLCBoNCArIChtWzEyLTE1XSA+PiA4KSB8ICgxPDwyNCkgXQorLQltb3ZkCQkweDBjKG0pLGhjNAorLQltb3ZkCQkweDFjKG0pLHQxCistCXB1bnBja2xxZHEJdDEsaGM0CistCXBzcmxkCQkkOCxoYzQKKy0JcG9yCQlPUk1BU0soJXJpcCksaGM0CistCW1vdmQJCWg0LHQxCistCXBhZGRkCQl0MSxoYzQKKy0KKy0JIyB0MSA9IFsgaGMwWzFdICogcjAsIGhjMFswXSAqIHUwIF0KKy0JbW92ZHFhCQlydTAsdDEKKy0JcG11bHVkcQkJaGMwLHQxCistCSMgdDEgKz0gWyBoYzFbMV0gKiBzNCwgaGMxWzBdICogdjQgXQorLQltb3ZkcWEJCXN2NCx0MgorLQlwbXVsdWRxCQloYzEsdDIKKy0JcGFkZHEJCXQyLHQxCistCSMgdDEgKz0gWyBoYzJbMV0gKiBzMywgaGMyWzBdICogdjMgXQorLQltb3ZkcWEJCXN2Myx0MgorLQlwbXVsdWRxCQloYzIsdDIKKy0JcGFkZHEJCXQyLHQxCistCSMgdDEgKz0gWyBoYzNbMV0gKiBzMiwgaGMzWzBdICogdjIgXQorLQltb3ZkcWEJCXN2Mix0MgorLQlwbXVsdWRxCQloYzMsdDIKKy0JcGFkZHEJCXQyLHQxCistCSMgdDEgKz0gWyBoYzRbMV0gKiBzMSwgaGM0WzBdICogdjEgXQorLQltb3ZkcWEJCXN2MSx0MgorLQlwbXVsdWRxCQloYzQsdDIKKy0JcGFkZHEJCXQyLHQxCistCSMgZDAgPSB0MVswXSArIHQxWzFdCistCW1vdmRxYQkJdDEsdDIKKy0JcHNybGRxCQkkOCx0MgorLQlwYWRkcQkJdDIsdDEKKy0JbW92cQkJdDEsZDAKKy0KKy0JIyB0MSA9IFsgaGMwWzFdICogcjEsIGhjMFswXSAqIHUxIF0KKy0JbW92ZHFhCQlydTEsdDEKKy0JcG11bHVkcQkJaGMwLHQxCistCSMgdDEgKz0gWyBoYzFbMV0gKiByMCwgaGMxWzBdICogdTAgXQorLQltb3ZkcWEJCXJ1MCx0MgorLQlwbXVsdWRxCQloYzEsdDIKKy0JcGFkZHEJCXQyLHQxCistCSMgdDEgKz0gWyBoYzJbMV0gKiBzNCwgaGMyWzBdICogdjQgXQorLQltb3ZkcWEJCXN2NCx0MgorLQlwbXVsdWRxCQloYzIsdDIKKy0JcGFkZHEJCXQyLHQxCistCSMgdDEgKz0gWyBoYzNbMV0gKiBzMywgaGMzWzBdICogdjMgXQorLQltb3ZkcWEJCXN2Myx0MgorLQlwbXVsdWRxCQloYzMsdDIKKy0JcGFkZHEJCXQyLHQxCistCSMgdDEgKz0gWyBoYzRbMV0gKiBzMiwgaGM0WzBdICogdjIgXQorLQltb3ZkcWEJCXN2Mix0MgorLQlwbXVsdWRxCQloYzQsdDIKKy0JcGFkZHEJCXQyLHQxCistCSMgZDEgPSB0MVswXSArIHQxWzFdCistCW1vdmRxYQkJdDEsdDIKKy0JcHNybGRxCQkkOCx0MgorLQlwYWRkcQkJdDIsdDEKKy0JbW92cQkJdDEsZDEKKy0KKy0JIyB0MSA9IFsgaGMwWzFdICogcjIsIGhjMFswXSAqIHUyIF0KKy0JbW92ZHFhCQlydTIsdDEKKy0JcG11bHVkcQkJaGMwLHQxCistCSMgdDEgKz0gWyBoYzFbMV0gKiByMSwgaGMxWzBdICogdTEgXQorLQltb3ZkcWEJCXJ1MSx0MgorLQlwbXVsdWRxCQloYzEsdDIKKy0JcGFkZHEJCXQyLHQxCistCSMgdDEgKz0gWyBoYzJbMV0gKiByMCwgaGMyWzBdICogdTAgXQorLQltb3ZkcWEJCXJ1MCx0MgorLQlwbXVsdWRxCQloYzIsdDIKKy0JcGFkZHEJCXQyLHQxCistCSMgdDEgKz0gWyBoYzNbMV0gKiBzNCwgaGMzWzBdICogdjQgXQorLQltb3ZkcWEJCXN2NCx0MgorLQlwbXVsdWRxCQloYzMsdDIKKy0JcGFkZHEJCXQyLHQxCistCSMgdDEgKz0gWyBoYzRbMV0gKiBzMywgaGM0WzBdICogdjMgXQorLQltb3ZkcWEJCXN2Myx0MgorLQlwbXVsdWRxCQloYzQsdDIKKy0JcGFkZHEJCXQyLHQxCistCSMgZDIgPSB0MVswXSArIHQxWzFdCistCW1vdmRxYQkJdDEsdDIKKy0JcHNybGRxCQkkOCx0MgorLQlwYWRkcQkJdDIsdDEKKy0JbW92cQkJdDEsZDIKKy0KKy0JIyB0MSA9IFsgaGMwWzFdICogcjMsIGhjMFswXSAqIHUzIF0KKy0JbW92ZHFhCQlydTMsdDEKKy0JcG11bHVkcQkJaGMwLHQxCistCSMgdDEgKz0gWyBoYzFbMV0gKiByMiwgaGMxWzBdICogdTIgXQorLQltb3ZkcWEJCXJ1Mix0MgorLQlwbXVsdWRxCQloYzEsdDIKKy0JcGFkZHEJCXQyLHQxCistCSMgdDEgKz0gWyBoYzJbMV0gKiByMSwgaGMyWzBdICogdTEgXQorLQltb3ZkcWEJCXJ1MSx0MgorLQlwbXVsdWRxCQloYzIsdDIKKy0JcGFkZHEJCXQyLHQxCistCSMgdDEgKz0gWyBoYzNbMV0gKiByMCwgaGMzWzBdICogdTAgXQorLQltb3ZkcWEJCXJ1MCx0MgorLQlwbXVsdWRxCQloYzMsdDIKKy0JcGFkZHEJCXQyLHQxCistCSMgdDEgKz0gWyBoYzRbMV0gKiBzNCwgaGM0WzBdICogdjQgXQorLQltb3ZkcWEJCXN2NCx0MgorLQlwbXVsdWRxCQloYzQsdDIKKy0JcGFkZHEJCXQyLHQxCistCSMgZDMgPSB0MVswXSArIHQxWzFdCistCW1vdmRxYQkJdDEsdDIKKy0JcHNybGRxCQkkOCx0MgorLQlwYWRkcQkJdDIsdDEKKy0JbW92cQkJdDEsZDMKKy0KKy0JIyB0MSA9IFsgaGMwWzFdICogcjQsIGhjMFswXSAqIHU0IF0KKy0JbW92ZHFhCQlydTQsdDEKKy0JcG11bHVkcQkJaGMwLHQxCistCSMgdDEgKz0gWyBoYzFbMV0gKiByMywgaGMxWzBdICogdTMgXQorLQltb3ZkcWEJCXJ1Myx0MgorLQlwbXVsdWRxCQloYzEsdDIKKy0JcGFkZHEJCXQyLHQxCistCSMgdDEgKz0gWyBoYzJbMV0gKiByMiwgaGMyWzBdICogdTIgXQorLQltb3ZkcWEJCXJ1Mix0MgorLQlwbXVsdWRxCQloYzIsdDIKKy0JcGFkZHEJCXQyLHQxCistCSMgdDEgKz0gWyBoYzNbMV0gKiByMSwgaGMzWzBdICogdTEgXQorLQltb3ZkcWEJCXJ1MSx0MgorLQlwbXVsdWRxCQloYzMsdDIKKy0JcGFkZHEJCXQyLHQxCistCSMgdDEgKz0gWyBoYzRbMV0gKiByMCwgaGM0WzBdICogdTAgXQorLQltb3ZkcWEJCXJ1MCx0MgorLQlwbXVsdWRxCQloYzQsdDIKKy0JcGFkZHEJCXQyLHQxCistCSMgZDQgPSB0MVswXSArIHQxWzFdCistCW1vdmRxYQkJdDEsdDIKKy0JcHNybGRxCQkkOCx0MgorLQlwYWRkcQkJdDIsdDEKKy0JbW92cQkJdDEsZDQKKy0KKy0JIyBOb3cgZG8gYSBwYXJ0aWFsIHJlZHVjdGlvbiBtb2QgKDJeMTMwKS01LCBjYXJyeWluZyBoMCAtPiBoMSAtPiBoMiAtPgorLQkjIGgzIC0+IGg0IC0+IGgwIC0+IGgxIHRvIGdldCBoMCxoMixoMyxoNCA8IDJeMjYgYW5kIGgxIDwgMl4yNiArIGEgc21hbGwKKy0JIyBhbW91bnQuICBDYXJlZnVsOiB3ZSBtdXN0IG5vdCBhc3N1bWUgdGhlIGNhcnJ5IGJpdHMgJ2QwID4+IDI2JywKKy0JIyAnZDEgPj4gMjYnLCAnZDIgPj4gMjYnLCAnZDMgPj4gMjYnLCBhbmQgJyhkNCA+PiAyNikgKiA1JyBmaXQgaW4gMzItYml0CistCSMgaW50ZWdlcnMuICBJdCdzIHRydWUgaW4gYSBzaW5nbGUtYmxvY2sgaW1wbGVtZW50YXRpb24sIGJ1dCBub3QgaGVyZS4KKy0KKy0JIyBkMSArPSBkMCA+PiAyNgorLQltb3YJCWQwLCVyYXgKKy0Jc2hyCQkkMjYsJXJheAorLQlhZGQJCSVyYXgsZDEKKy0JIyBoMCA9IGQwICYgMHgzZmZmZmZmCistCW1vdgkJZDAsJXJieAorLQlhbmQJCSQweDNmZmZmZmYsJWVieAorLQorLQkjIGQyICs9IGQxID4+IDI2CistCW1vdgkJZDEsJXJheAorLQlzaHIJCSQyNiwlcmF4CistCWFkZAkJJXJheCxkMgorLQkjIGgxID0gZDEgJiAweDNmZmZmZmYKKy0JbW92CQlkMSwlcmF4CistCWFuZAkJJDB4M2ZmZmZmZiwlZWF4CistCW1vdgkJJWVheCxoMQorLQorLQkjIGQzICs9IGQyID4+IDI2CistCW1vdgkJZDIsJXJheAorLQlzaHIJCSQyNiwlcmF4CistCWFkZAkJJXJheCxkMworLQkjIGgyID0gZDIgJiAweDNmZmZmZmYKKy0JbW92CQlkMiwlcmF4CistCWFuZAkJJDB4M2ZmZmZmZiwlZWF4CistCW1vdgkJJWVheCxoMgorLQorLQkjIGQ0ICs9IGQzID4+IDI2CistCW1vdgkJZDMsJXJheAorLQlzaHIJCSQyNiwlcmF4CistCWFkZAkJJXJheCxkNAorLQkjIGgzID0gZDMgJiAweDNmZmZmZmYKKy0JbW92CQlkMywlcmF4CistCWFuZAkJJDB4M2ZmZmZmZiwlZWF4CistCW1vdgkJJWVheCxoMworLQorLQkjIGgwICs9IChkNCA+PiAyNikgKiA1CistCW1vdgkJZDQsJXJheAorLQlzaHIJCSQyNiwlcmF4CistCWxlYQkJKCVyYXgsJXJheCw0KSwlcmF4CistCWFkZAkJJXJheCwlcmJ4CistCSMgaDQgPSBkNCAmIDB4M2ZmZmZmZgorLQltb3YJCWQ0LCVyYXgKKy0JYW5kCQkkMHgzZmZmZmZmLCVlYXgKKy0JbW92CQklZWF4LGg0CistCistCSMgaDEgKz0gaDAgPj4gMjYKKy0JbW92CQklcmJ4LCVyYXgKKy0Jc2hyCQkkMjYsJXJheAorLQlhZGQJCSVlYXgsaDEKKy0JIyBoMCA9IGgwICYgMHgzZmZmZmZmCistCWFuZGwJCSQweDNmZmZmZmYsJWVieAorLQltb3YJCSVlYngsaDAKKy0KKy0JYWRkCQkkMHgyMCxtCistCWRlYwkJJXJjeAorLQlqbnoJCS5MZG9ibG9jazIKKy0KKy0JcG9wCQklcjEzCistCXBvcAkJJXIxMgorLQlwb3AJCSVyYngKKy0JcmV0CistRU5EUFJPQyhwb2x5MTMwNV8yYmxvY2tfc3NlMikKKy0tLSBhL2FyY2gveDg2L2NyeXB0by9wb2x5MTMwNS14ODZfNjQtY3J5cHRvZ2Ftcy5wbAorKysrIGIvYXJjaC94ODYvY3J5cHRvL3BvbHkxMzA1LXg4Nl82NC1jcnlwdG9nYW1zLnBsCitAQCAtMSwxMSArMSwxNCBAQAorLSMhIC91c3IvYmluL2VudiBwZXJsCistIyBDb3B5cmlnaHQgMjAxNi0yMDE4IFRoZSBPcGVuU1NMIFByb2plY3QgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKysjIS91c3IvYmluL2VudiBwZXJsCisrIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2UKKyAjCistIyBMaWNlbnNlZCB1bmRlciB0aGUgT3BlblNTTCBsaWNlbnNlICh0aGUgIkxpY2Vuc2UiKS4gIFlvdSBtYXkgbm90IHVzZQorLSMgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgY2FuIG9idGFpbiBhIGNvcHkKKy0jIGluIHRoZSBmaWxlIExJQ0VOU0UgaW4gdGhlIHNvdXJjZSBkaXN0cmlidXRpb24gb3IgYXQKKy0jIGh0dHBzOi8vd3d3Lm9wZW5zc2wub3JnL3NvdXJjZS9saWNlbnNlLmh0bWwKKy0KKysjIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IFNhbXVlbCBOZXZlcyA8c25ldmVzQGRlaS51Yy5wdD4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisrIyBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisrIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNyBDUllQVE9HQU1TIGJ5IDxhcHByb0BvcGVuc3NsLm9yZz4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisrIworKyMgVGhpcyBjb2RlIGlzIHRha2VuIGZyb20gdGhlIE9wZW5TU0wgcHJvamVjdCBidXQgdGhlIGF1dGhvciwgQW5keSBQb2x5YWtvdiwKKysjIGhhcyByZWxpY2Vuc2VkIGl0IHVuZGVyIHRoZSBsaWNlbnNlcyBzcGVjaWZpZWQgaW4gdGhlIFNQRFggaGVhZGVyIGFib3ZlLgorKyMgVGhlIG9yaWdpbmFsIGhlYWRlcnMsIGluY2x1ZGluZyB0aGUgb3JpZ2luYWwgbGljZW5zZSBoZWFkZXJzLCBhcmUKKysjIGluY2x1ZGVkIGJlbG93IGZvciBjb21wbGV0ZW5lc3MuCisgIworICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAjIFdyaXR0ZW4gYnkgQW5keSBQb2x5YWtvdiA8YXBwcm9Ab3BlbnNzbC5vcmc+IGZvciB0aGUgT3BlblNTTAorQEAgLTMyLDcgKzM1LDcgQEAKKyAjIFNreWxha2UtWCBzeXN0ZW0gcGVyZm9ybWFuY2UuIFNpbmNlIHdlIGFyZSBsaWtlbHkgdG8gc3VwcHJlc3MKKyAjIEFWWDUxMkYgY2FwYWJpbGl0eSBmbGFnIFthdCBsZWFzdCBvbiBTa3lsYWtlLVhdLCBjb252ZXJzaW9uIHNlcnZlcworICMgYXMga2luZCBvZiAiaW52ZXN0bWVudCBwcm90ZWN0aW9uIi4gTm90ZSB0aGF0IG5leHQgKmxha2UgcHJvY2Vzc29yLAorLSMgQ2Fubm9sYWtlLCBoYXMgQVZYNTEySUZNQSBjb2RlIHBhdGggdG8gZXhlY3V0ZS4uLgorKyMgQ2Fubm9ubGFrZSwgaGFzIEFWWDUxMklGTUEgY29kZSBwYXRoIHRvIGV4ZWN1dGUuLi4KKyAjCisgIyBOdW1iZXJzIGFyZSBjeWNsZXMgcGVyIHByb2Nlc3NlZCBieXRlIHdpdGggcG9seTEzMDVfYmxvY2tzIGFsb25lLAorICMgbWVhc3VyZWQgd2l0aCByZHRzYyBhdCBmaXhlZCBjbG9jayBmcmVxdWVuY3kuCitAQCAtNjgsMzkgKzcxLDExNCBAQCAkb3V0cHV0ICA9IHNoaWZ0OworIGlmICgkZmxhdm91ciA9fiAvXC4vKSB7ICRvdXRwdXQgPSAkZmxhdm91cjsgdW5kZWYgJGZsYXZvdXI7IH0KKyAKKyAkd2luNjQ9MDsgJHdpbjY0PTEgaWYgKCRmbGF2b3VyID1+IC9bbm1dYXNtfG1pbmd3NjQvIHx8ICRvdXRwdXQgPX4gL1wuYXNtJC8pOworKyRrZXJuZWw9MDsgJGtlcm5lbD0xIGlmICghJGZsYXZvdXIgJiYgISRvdXRwdXQpOworIAorLSQwID1+IG0vKC4qW1wvXFxdKVteXC9cXF0rJC87ICRkaXI9JDE7CistKCAkeGxhdGU9IiR7ZGlyfXg4Nl82NC14bGF0ZS5wbCIgYW5kIC1mICR4bGF0ZSApIG9yCistKCAkeGxhdGU9IiR7ZGlyfS4uLy4uL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsIiBhbmQgLWYgJHhsYXRlKSBvcgorLWRpZSAiY2FuJ3QgbG9jYXRlIHg4Nl82NC14bGF0ZS5wbCI7CistCistaWYgKGAkRU5We0NDfSAtV2EsLXYgLWMgLW8gL2Rldi9udWxsIC14IGFzc2VtYmxlciAvZGV2L251bGwgMj4mMWAKKy0JCT1+IC9HTlUgYXNzZW1ibGVyIHZlcnNpb24gKFsyLTldXC5bMC05XSspLykgeworLQkkYXZ4ID0gKCQxPj0yLjE5KSArICgkMT49Mi4yMikgKyAoJDE+PTIuMjUpICsgKCQxPj0yLjI2KTsKKytpZiAoISRrZXJuZWwpIHsKKysJJDAgPX4gbS8oLipbXC9cXF0pW15cL1xcXSskLzsgJGRpcj0kMTsKKysJKCAkeGxhdGU9IiR7ZGlyfXg4Nl82NC14bGF0ZS5wbCIgYW5kIC1mICR4bGF0ZSApIG9yCisrCSggJHhsYXRlPSIke2Rpcn0uLi8uLi9wZXJsYXNtL3g4Nl82NC14bGF0ZS5wbCIgYW5kIC1mICR4bGF0ZSkgb3IKKysJZGllICJjYW4ndCBsb2NhdGUgeDg2XzY0LXhsYXRlLnBsIjsKKysKKysJb3BlbiBPVVQsInwgXCIkXlhcIiBcIiR4bGF0ZVwiICRmbGF2b3VyIFwiJG91dHB1dFwiIjsKKysJKlNURE9VVD0qT1VUOworKworKwlpZiAoYCRFTlZ7Q0N9IC1XYSwtdiAtYyAtbyAvZGV2L251bGwgLXggYXNzZW1ibGVyIC9kZXYvbnVsbCAyPiYxYAorKwkgICAgPX4gL0dOVSBhc3NlbWJsZXIgdmVyc2lvbiAoWzItOV1cLlswLTldKykvKSB7CisrCQkkYXZ4ID0gKCQxPj0yLjE5KSArICgkMT49Mi4yMikgKyAoJDE+PTIuMjUpOworKwl9CisrCisrCWlmICghJGF2eCAmJiAkd2luNjQgJiYgKCRmbGF2b3VyID1+IC9uYXNtLyB8fCAkRU5We0FTTX0gPX4gL25hc20vKSAmJgorKwkgICAgYG5hc20gLXYgMj4mMWAgPX4gL05BU00gdmVyc2lvbiAoWzItOV1cLlswLTldKykoPzpcLihbMC05XSspKT8vKSB7CisrCQkkYXZ4ID0gKCQxPj0yLjA5KSArICgkMT49Mi4xMCkgKyAoJDE+PTIuMTIpOworKwkJJGF2eCArPSAxIGlmICgkMT09Mi4xMSAmJiAkMj49OCk7CisrCX0KKysKKysJaWYgKCEkYXZ4ICYmICR3aW42NCAmJiAoJGZsYXZvdXIgPX4gL21hc20vIHx8ICRFTlZ7QVNNfSA9fiAvbWw2NC8pICYmCisrCSAgICBgbWw2NCAyPiYxYCA9fiAvVmVyc2lvbiAoWzAtOV0rKVwuLykgeworKwkJJGF2eCA9ICgkMT49MTApICsgKCQxPj0xMSk7CisrCX0KKysKKysJaWYgKCEkYXZ4ICYmIGAkRU5We0NDfSAtdiAyPiYxYCA9fiAvKCg/Ol5jbGFuZ3xMTFZNKSB2ZXJzaW9ufC4qYmFzZWQgb24gTExWTSkgKFszLTldXC5bMC05XSspLykgeworKwkJJGF2eCA9ICgkMj49My4wKSArICgkMj4zLjApOworKwl9CisrfSBlbHNlIHsKKysJJGF2eCA9IDQ7ICMgVGhlIGtlcm5lbCB1c2VzIGlmZGVmcyBmb3IgdGhpcy4KKyB9CisgCistaWYgKCEkYXZ4ICYmICR3aW42NCAmJiAoJGZsYXZvdXIgPX4gL25hc20vIHx8ICRFTlZ7QVNNfSA9fiAvbmFzbS8pICYmCistCSAgIGBuYXNtIC12IDI+JjFgID1+IC9OQVNNIHZlcnNpb24gKFsyLTldXC5bMC05XSspKD86XC4oWzAtOV0rKSk/LykgeworLQkkYXZ4ID0gKCQxPj0yLjA5KSArICgkMT49Mi4xMCkgKyAyICogKCQxPj0yLjEyKTsKKy0JJGF2eCArPSAyIGlmICgkMT09Mi4xMSAmJiAkMj49OCk7Cisrc3ViIGRlY2xhcmVfZnVuY3Rpb24oKSB7CisrCW15ICgkbmFtZSwgJGFsaWduLCAkbmFyZ3MpID0gQF87CisrCWlmKCRrZXJuZWwpIHsKKysJCSRjb2RlIC49ICIuYWxpZ24gJGFsaWduXG4iOworKwkJJGNvZGUgLj0gIkVOVFJZKCRuYW1lKVxuIjsKKysJCSRjb2RlIC49ICIuTCRuYW1lOlxuIjsKKysJfSBlbHNlIHsKKysJCSRjb2RlIC49ICIuZ2xvYmwJJG5hbWVcbiI7CisrCQkkY29kZSAuPSAiLnR5cGUJJG5hbWUsXEBmdW5jdGlvbiwkbmFyZ3NcbiI7CisrCQkkY29kZSAuPSAiLmFsaWduCSRhbGlnblxuIjsKKysJCSRjb2RlIC49ICIkbmFtZTpcbiI7CisrCX0KKyB9CisgCistaWYgKCEkYXZ4ICYmICR3aW42NCAmJiAoJGZsYXZvdXIgPX4gL21hc20vIHx8ICRFTlZ7QVNNfSA9fiAvbWw2NC8pICYmCistCSAgIGBtbDY0IDI+JjFgID1+IC9WZXJzaW9uIChbMC05XSspXC4vKSB7CistCSRhdnggPSAoJDE+PTEwKSArICgkMT49MTIpOworK3N1YiBlbmRfZnVuY3Rpb24oKSB7CisrCW15ICgkbmFtZSkgPSBAXzsKKysJaWYoJGtlcm5lbCkgeworKwkJJGNvZGUgLj0gIkVORFBST0MoJG5hbWUpXG4iOworKwl9IGVsc2UgeworKwkJJGNvZGUgLj0gIi5zaXplICAgJG5hbWUsLi0kbmFtZVxuIjsKKysJfQorIH0KKyAKKy1pZiAoISRhdnggJiYgYCRFTlZ7Q0N9IC12IDI+JjFgID1+IC8oKD86XmNsYW5nfExMVk0pIHZlcnNpb258LipiYXNlZCBvbiBMTFZNKSAoWzMtOV1cLlswLTldKykvKSB7CistCSRhdnggPSAoJDI+PTMuMCkgKyAoJDI+My4wKTsKKy19CisrJGNvZGUuPTw8X19fIGlmICRrZXJuZWw7CisrI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKytfX18KKyAKKy1vcGVuIE9VVCwifCBcIiReWFwiIFwiJHhsYXRlXCIgJGZsYXZvdXIgXCIkb3V0cHV0XCIiOworLSpTVERPVVQ9Kk9VVDsKKytpZiAoJGF2eCkgeworKyRjb2RlLj08PF9fXyBpZiAka2VybmVsOworKy5zZWN0aW9uIC5yb2RhdGEKKytfX18KKyskY29kZS49PDxfX187CisrLmFsaWduCTY0CisrLkxjb25zdDoKKysuTG1hc2syNDoKKysubG9uZwkweDBmZmZmZmYsMCwweDBmZmZmZmYsMCwweDBmZmZmZmYsMCwweDBmZmZmZmYsMAorKy5MMTI5OgorKy5sb25nCWAxPDwyNGAsMCxgMTw8MjRgLDAsYDE8PDI0YCwwLGAxPDwyNGAsMAorKy5MbWFzazI2OgorKy5sb25nCTB4M2ZmZmZmZiwwLDB4M2ZmZmZmZiwwLDB4M2ZmZmZmZiwwLDB4M2ZmZmZmZiwwCisrLkxwZXJtZF9hdngyOgorKy5sb25nCTIsMiwyLDMsMiwwLDIsMQorKy5McGVybWRfYXZ4NTEyOgorKy5sb25nCTAsMCwwLDEsIDAsMiwwLDMsIDAsNCwwLDUsIDAsNiwwLDcKKysKKysuTDJfNDRfaW5wX3Blcm1kOgorKy5sb25nCTAsMSwxLDIsMiwzLDcsNworKy5MMl80NF9pbnBfc2hpZnQ6CisrLnF1YWQJMCwxMiwyNCw2NAorKy5MMl80NF9tYXNrOgorKy5xdWFkCTB4ZmZmZmZmZmZmZmYsMHhmZmZmZmZmZmZmZiwweDNmZmZmZmZmZmZmLDB4ZmZmZmZmZmZmZmZmZmZmZgorKy5MMl80NF9zaGlmdF9yZ3Q6CisrLnF1YWQJNDQsNDQsNDIsNjQKKysuTDJfNDRfc2hpZnRfbGZ0OgorKy5xdWFkCTgsOCwxMCw2NAorKworKy5hbGlnbgk2NAorKy5MeF9tYXNrNDQ6CisrLnF1YWQJMHhmZmZmZmZmZmZmZiwweGZmZmZmZmZmZmZmLDB4ZmZmZmZmZmZmZmYsMHhmZmZmZmZmZmZmZgorKy5xdWFkCTB4ZmZmZmZmZmZmZmYsMHhmZmZmZmZmZmZmZiwweGZmZmZmZmZmZmZmLDB4ZmZmZmZmZmZmZmYKKysuTHhfbWFzazQyOgorKy5xdWFkCTB4M2ZmZmZmZmZmZmYsMHgzZmZmZmZmZmZmZiwweDNmZmZmZmZmZmZmLDB4M2ZmZmZmZmZmZmYKKysucXVhZAkweDNmZmZmZmZmZmZmLDB4M2ZmZmZmZmZmZmYsMHgzZmZmZmZmZmZmZiwweDNmZmZmZmZmZmZmCisrX19fCisrfQorKyRjb2RlLj08PF9fXyBpZiAoISRrZXJuZWwpOworKy5hc2NpegkiUG9seTEzMDUgZm9yIHg4Nl82NCwgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIKKysuYWxpZ24JMTYKKytfX18KKyAKKyBteSAoJGN0eCwkaW5wLCRsZW4sJHBhZGJpdCk9KCIlcmRpIiwiJXJzaSIsIiVyZHgiLCIlcmN4Iik7CisgbXkgKCRtYWMsJG5vbmNlKT0oJGlucCwkbGVuKTsJIyAqX2VtaXQgYXJndW1lbnRzCistbXkgKCRkMSwkZDIsJGQzLCAkcjAsJHIxLCRzMSk9bWFwKCIlciRfIiwoOC4uMTMpKTsKKy1teSAoJGgwLCRoMSwkaDIpPSgiJXIxNCIsIiVyYngiLCIlcmJwIik7CisrbXkgKCRkMSwkZDIsJGQzLCAkcjAsJHIxLCRzMSk9KCIlcjgiLCIlcjkiLCIlcmRpIiwiJXIxMSIsIiVyMTIiLCIlcjEzIik7CisrbXkgKCRoMCwkaDEsJGgyKT0oIiVyMTQiLCIlcmJ4IiwiJXIxMCIpOworIAorIHN1YiBwb2x5MTMwNV9pdGVyYXRpb24geworICMgaW5wdXQ6CWNvcHkgb2YgJHIxIGluICVyYXgsICRoMC0kaDIsICRyMC0kcjEKK0BAIC0xNTUsMTkgKzIzMywxOSBAQCBfX18KKyAKKyAkY29kZS49PDxfX187CisgLnRleHQKKy0KKytfX18KKyskY29kZS49PDxfX18gaWYgKCEka2VybmVsKTsKKyAuZXh0ZXJuCU9QRU5TU0xfaWEzMmNhcF9QCisgCistLmdsb2JsCXBvbHkxMzA1X2luaXQKKy0uaGlkZGVuCXBvbHkxMzA1X2luaXQKKy0uZ2xvYmwJcG9seTEzMDVfYmxvY2tzCistLmhpZGRlbglwb2x5MTMwNV9ibG9ja3MKKy0uZ2xvYmwJcG9seTEzMDVfZW1pdAorLS5oaWRkZW4JcG9seTEzMDVfZW1pdAorLQorLS50eXBlCXBvbHkxMzA1X2luaXQsXEBmdW5jdGlvbiwzCistLmFsaWduCTMyCistcG9seTEzMDVfaW5pdDoKKysuZ2xvYmwJcG9seTEzMDVfaW5pdF94ODZfNjQKKysuaGlkZGVuCXBvbHkxMzA1X2luaXRfeDg2XzY0CisrLmdsb2JsCXBvbHkxMzA1X2Jsb2Nrc194ODZfNjQKKysuaGlkZGVuCXBvbHkxMzA1X2Jsb2Nrc194ODZfNjQKKysuZ2xvYmwJcG9seTEzMDVfZW1pdF94ODZfNjQKKysuaGlkZGVuCXBvbHkxMzA1X2VtaXRfeDg2XzY0CisrX19fCisrJmRlY2xhcmVfZnVuY3Rpb24oInBvbHkxMzA1X2luaXRfeDg2XzY0IiwgMzIsIDMpOworKyRjb2RlLj08PF9fXzsKKyAJeG9yCSVyYXgsJXJheAorIAltb3YJJXJheCwwKCRjdHgpCQkjIGluaXRpYWxpemUgaGFzaCB2YWx1ZQorIAltb3YJJXJheCw4KCRjdHgpCitAQCAtMTc1LDExICsyNTMsMTIgQEAgcG9seTEzMDVfaW5pdDoKKyAKKyAJY21wCVwkMCwkaW5wCisgCWplCS5Mbm9fa2V5CistCistCWxlYQlwb2x5MTMwNV9ibG9ja3MoJXJpcCksJXIxMAorLQlsZWEJcG9seTEzMDVfZW1pdCglcmlwKSwlcjExCisgX19fCistJGNvZGUuPTw8X19fCWlmICgkYXZ4KTsKKyskY29kZS49PDxfX18gaWYgKCEka2VybmVsKTsKKysJbGVhCXBvbHkxMzA1X2Jsb2Nrc194ODZfNjQoJXJpcCksJXIxMAorKwlsZWEJcG9seTEzMDVfZW1pdF94ODZfNjQoJXJpcCksJXIxMQorK19fXworKyRjb2RlLj08PF9fXwlpZiAoISRrZXJuZWwgJiYgJGF2eCk7CisgCW1vdglPUEVOU1NMX2lhMzJjYXBfUCs0KCVyaXApLCVyOQorIAlsZWEJcG9seTEzMDVfYmxvY2tzX2F2eCglcmlwKSwlcmF4CisgCWxlYQlwb2x5MTMwNV9lbWl0X2F2eCglcmlwKSwlcmN4CitAQCAtMTg3LDEyICsyNjYsMTIgQEAgJGNvZGUuPTw8X19fCWlmICgkYXZ4KTsKKyAJY21vdmMJJXJheCwlcjEwCisgCWNtb3ZjCSVyY3gsJXIxMQorIF9fXworLSRjb2RlLj08PF9fXwlpZiAoJGF2eD4xKTsKKyskY29kZS49PDxfX18JaWYgKCEka2VybmVsICYmICRhdng+MSk7CisgCWxlYQlwb2x5MTMwNV9ibG9ja3NfYXZ4MiglcmlwKSwlcmF4CisgCWJ0CVwkYDUrMzJgLCVyOQkJIyBBVlgyPworIAljbW92YwklcmF4LCVyMTAKKyBfX18KKy0kY29kZS49PDxfX18JaWYgKCRhdng+Myk7CisrJGNvZGUuPTw8X19fCWlmICghJGtlcm5lbCAmJiAkYXZ4PjMpOworIAltb3YJXCRgKDE8PDMxfDE8PDIxfDE8PDE2KWAsJXJheAorIAlzaHIJXCQzMiwlcjkKKyAJYW5kCSVyYXgsJXI5CitAQCAtMjA3LDExICsyODYsMTEgQEAgJGNvZGUuPTw8X19fOworIAltb3YJJXJheCwyNCgkY3R4KQorIAltb3YJJXJjeCwzMigkY3R4KQorIF9fXworLSRjb2RlLj08PF9fXwlpZiAoJGZsYXZvdXIgIX4gL2VsZjMyLyk7CisrJGNvZGUuPTw8X19fCWlmICghJGtlcm5lbCAmJiAkZmxhdm91ciAhfiAvZWxmMzIvKTsKKyAJbW92CSVyMTAsMCglcmR4KQorIAltb3YJJXIxMSw4KCVyZHgpCisgX19fCistJGNvZGUuPTw8X19fCWlmICgkZmxhdm91ciA9fiAvZWxmMzIvKTsKKyskY29kZS49PDxfX18JaWYgKCEka2VybmVsICYmICRmbGF2b3VyID1+IC9lbGYzMi8pOworIAltb3YJJXIxMGQsMCglcmR4KQorIAltb3YJJXIxMWQsNCglcmR4KQorIF9fXworQEAgLTIxOSwxMSArMjk4LDExIEBAICRjb2RlLj08PF9fXzsKKyAJbW92CVwkMSwlZWF4CisgLkxub19rZXk6CisgCXJldAorLS5zaXplCXBvbHkxMzA1X2luaXQsLi1wb2x5MTMwNV9pbml0CisrX19fCisrJmVuZF9mdW5jdGlvbigicG9seTEzMDVfaW5pdF94ODZfNjQiKTsKKyAKKy0udHlwZQlwb2x5MTMwNV9ibG9ja3MsXEBmdW5jdGlvbiw0CistLmFsaWduCTMyCistcG9seTEzMDVfYmxvY2tzOgorKyZkZWNsYXJlX2Z1bmN0aW9uKCJwb2x5MTMwNV9ibG9ja3NfeDg2XzY0IiwgMzIsIDQpOworKyRjb2RlLj08PF9fXzsKKyAuY2ZpX3N0YXJ0cHJvYworIC5MYmxvY2tzOgorIAlzaHIJXCQ0LCRsZW4KK0BAIC0yMzEsOCArMzEwLDYgQEAgcG9seTEzMDVfYmxvY2tzOgorIAorIAlwdXNoCSVyYngKKyAuY2ZpX3B1c2gJJXJieAorLQlwdXNoCSVyYnAKKy0uY2ZpX3B1c2gJJXJicAorIAlwdXNoCSVyMTIKKyAuY2ZpX3B1c2gJJXIxMgorIAlwdXNoCSVyMTMKK0BAIC0yNDEsNiArMzE4LDggQEAgcG9seTEzMDVfYmxvY2tzOgorIC5jZmlfcHVzaAklcjE0CisgCXB1c2gJJXIxNQorIC5jZmlfcHVzaAklcjE1CisrCXB1c2gJJGN0eAorKy5jZmlfcHVzaAkkY3R4CisgLkxibG9ja3NfYm9keToKKyAKKyAJbW92CSRsZW4sJXIxNQkJIyByZWFzc2lnbiAkbGVuCitAQCAtMjY1LDI2ICszNDQsMjkgQEAgcG9seTEzMDVfYmxvY2tzOgorIAlsZWEJMTYoJGlucCksJGlucAorIAlhZGMJJHBhZGJpdCwkaDIKKyBfX18KKysKKyAJJnBvbHkxMzA1X2l0ZXJhdGlvbigpOworKworICRjb2RlLj08PF9fXzsKKyAJbW92CSRyMSwlcmF4CisgCWRlYwklcjE1CQkJIyBsZW4tPTE2CisgCWpuegkuTG9vcAorIAorKwltb3YJMCglcnNwKSwkY3R4CisrLmNmaV9yZXN0b3JlCSRjdHgKKysKKyAJbW92CSRoMCwwKCRjdHgpCQkjIHN0b3JlIGhhc2ggdmFsdWUKKyAJbW92CSRoMSw4KCRjdHgpCisgCW1vdgkkaDIsMTYoJGN0eCkKKyAKKy0JbW92CTAoJXJzcCksJXIxNQorKwltb3YJOCglcnNwKSwlcjE1CisgLmNmaV9yZXN0b3JlCSVyMTUKKy0JbW92CTgoJXJzcCksJXIxNAorKwltb3YJMTYoJXJzcCksJXIxNAorIC5jZmlfcmVzdG9yZQklcjE0CistCW1vdgkxNiglcnNwKSwlcjEzCisrCW1vdgkyNCglcnNwKSwlcjEzCisgLmNmaV9yZXN0b3JlCSVyMTMKKy0JbW92CTI0KCVyc3ApLCVyMTIKKysJbW92CTMyKCVyc3ApLCVyMTIKKyAuY2ZpX3Jlc3RvcmUJJXIxMgorLQltb3YJMzIoJXJzcCksJXJicAorLS5jZmlfcmVzdG9yZQklcmJwCisgCW1vdgk0MCglcnNwKSwlcmJ4CisgLmNmaV9yZXN0b3JlCSVyYngKKyAJbGVhCTQ4KCVyc3ApLCVyc3AKK0BAIC0yOTMsMTEgKzM3NSwxMSBAQCAkY29kZS49PDxfX187CisgLkxibG9ja3NfZXBpbG9ndWU6CisgCXJldAorIC5jZmlfZW5kcHJvYworLS5zaXplCXBvbHkxMzA1X2Jsb2NrcywuLXBvbHkxMzA1X2Jsb2NrcworK19fXworKyZlbmRfZnVuY3Rpb24oInBvbHkxMzA1X2Jsb2Nrc194ODZfNjQiKTsKKyAKKy0udHlwZQlwb2x5MTMwNV9lbWl0LFxAZnVuY3Rpb24sMworLS5hbGlnbgkzMgorLXBvbHkxMzA1X2VtaXQ6CisrJmRlY2xhcmVfZnVuY3Rpb24oInBvbHkxMzA1X2VtaXRfeDg2XzY0IiwgMzIsIDMpOworKyRjb2RlLj08PF9fXzsKKyAuTGVtaXQ6CisgCW1vdgkwKCRjdHgpLCVyOAkjIGxvYWQgaGFzaCB2YWx1ZQorIAltb3YJOCgkY3R4KSwlcjkKK0BAIC0zMTgsMTAgKzQwMCwxNCBAQCBwb2x5MTMwNV9lbWl0OgorIAltb3YJJXJjeCw4KCRtYWMpCisgCisgCXJldAorLS5zaXplCXBvbHkxMzA1X2VtaXQsLi1wb2x5MTMwNV9lbWl0CisgX19fCisrJmVuZF9mdW5jdGlvbigicG9seTEzMDVfZW1pdF94ODZfNjQiKTsKKyBpZiAoJGF2eCkgeworIAorK2lmKCRrZXJuZWwpIHsKKysJJGNvZGUgLj0gIiNpZmRlZiBDT05GSUdfQVNfQVZYXG4iOworK30KKysKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAjIExheW91dCBvZiBvcGFxdWUgYXJlYSBpcyBmb2xsb3dpbmcuCisgIworQEAgLTM0MiwxNSArNDI4LDE5IEBAICRjb2RlLj08PF9fXzsKKyAudHlwZQlfX3BvbHkxMzA1X2Jsb2NrLFxAYWJpLW9tbmlwb3RlbnQKKyAuYWxpZ24JMzIKKyBfX3BvbHkxMzA1X2Jsb2NrOgorKwlwdXNoICRjdHgKKyBfX18KKyAJJnBvbHkxMzA1X2l0ZXJhdGlvbigpOworICRjb2RlLj08PF9fXzsKKysJcG9wICRjdHgKKyAJcmV0CisgLnNpemUJX19wb2x5MTMwNV9ibG9jaywuLV9fcG9seTEzMDVfYmxvY2sKKyAKKyAudHlwZQlfX3BvbHkxMzA1X2luaXRfYXZ4LFxAYWJpLW9tbmlwb3RlbnQKKyAuYWxpZ24JMzIKKyBfX3BvbHkxMzA1X2luaXRfYXZ4OgorKwlwdXNoICVyYnAKKysJbW92ICVyc3AsJXJicAorIAltb3YJJHIwLCRoMAorIAltb3YJJHIxLCRoMQorIAl4b3IJJGgyLCRoMgorQEAgLTUwNywxMiArNTk3LDEzIEBAIF9fcG9seTEzMDVfaW5pdF9hdng6CisgCW1vdgkkZDEjZCxgMTYqOCs4LTY0YCgkY3R4KQorIAorIAlsZWEJLTQ4LTY0KCRjdHgpLCRjdHgJIyBzaXplIFtkZS1db3B0aW1pemF0aW9uCisrCXBvcCAlcmJwCisgCXJldAorIC5zaXplCV9fcG9seTEzMDVfaW5pdF9hdngsLi1fX3BvbHkxMzA1X2luaXRfYXZ4CisrX19fCisgCistLnR5cGUJcG9seTEzMDVfYmxvY2tzX2F2eCxcQGZ1bmN0aW9uLDQKKy0uYWxpZ24JMzIKKy1wb2x5MTMwNV9ibG9ja3NfYXZ4OgorKyZkZWNsYXJlX2Z1bmN0aW9uKCJwb2x5MTMwNV9ibG9ja3NfYXZ4IiwgMzIsIDQpOworKyRjb2RlLj08PF9fXzsKKyAuY2ZpX3N0YXJ0cHJvYworIAltb3YJMjAoJGN0eCksJXI4ZAkJIyBpc19iYXNlMl8yNgorIAljbXAJXCQxMjgsJGxlbgorQEAgLTUzMiwxMCArNjIzLDExIEBAIHBvbHkxMzA1X2Jsb2Nrc19hdng6CisgCXRlc3QJXCQzMSwkbGVuCisgCWp6CS5MZXZlbl9hdngKKyAKKy0JcHVzaAklcmJ4CistLmNmaV9wdXNoCSVyYngKKyAJcHVzaAklcmJwCisgLmNmaV9wdXNoCSVyYnAKKysJbW92IAklcnNwLCVyYnAKKysJcHVzaAklcmJ4CisrLmNmaV9wdXNoCSVyYngKKyAJcHVzaAklcjEyCisgLmNmaV9wdXNoCSVyMTIKKyAJcHVzaAklcjEzCitAQCAtNjQ1LDIwICs3MzcsMTggQEAgcG9seTEzMDVfYmxvY2tzX2F2eDoKKyAJbW92CSRoMiNkLDE2KCRjdHgpCisgLmFsaWduCTE2CisgLkxkb25lX2F2eDoKKy0JbW92CTAoJXJzcCksJXIxNQorKwlwb3AgCQklcjE1CisgLmNmaV9yZXN0b3JlCSVyMTUKKy0JbW92CTgoJXJzcCksJXIxNAorKwlwb3AgCQklcjE0CisgLmNmaV9yZXN0b3JlCSVyMTQKKy0JbW92CTE2KCVyc3ApLCVyMTMKKysJcG9wIAkJJXIxMworIC5jZmlfcmVzdG9yZQklcjEzCistCW1vdgkyNCglcnNwKSwlcjEyCisrCXBvcCAJCSVyMTIKKyAuY2ZpX3Jlc3RvcmUJJXIxMgorLQltb3YJMzIoJXJzcCksJXJicAorLS5jZmlfcmVzdG9yZQklcmJwCistCW1vdgk0MCglcnNwKSwlcmJ4CisrCXBvcCAJCSVyYngKKyAuY2ZpX3Jlc3RvcmUJJXJieAorLQlsZWEJNDgoJXJzcCksJXJzcAorLS5jZmlfYWRqdXN0X2NmYV9vZmZzZXQJLTQ4CisrCXBvcCAJCSVyYnAKKysuY2ZpX3Jlc3RvcmUJJXJicAorIC5Mbm9fZGF0YV9hdng6CisgLkxibG9ja3NfYXZ4X2VwaWxvZ3VlOgorIAlyZXQKK0BAIC02NjcsMTAgKzc1NywxMSBAQCBwb2x5MTMwNV9ibG9ja3NfYXZ4OgorIC5hbGlnbgkzMgorIC5MYmFzZTJfNjRfYXZ4OgorIC5jZmlfc3RhcnRwcm9jCistCXB1c2gJJXJieAorLS5jZmlfcHVzaAklcmJ4CisgCXB1c2gJJXJicAorIC5jZmlfcHVzaAklcmJwCisrCW1vdiAJJXJzcCwlcmJwCisrCXB1c2gJJXJieAorKy5jZmlfcHVzaAklcmJ4CisgCXB1c2gJJXIxMgorIC5jZmlfcHVzaAklcjEyCisgCXB1c2gJJXIxMworQEAgLTczNiwyMiArODI3LDE4IEBAIHBvbHkxMzA1X2Jsb2Nrc19hdng6CisgCisgLkxwcm9jZWVkX2F2eDoKKyAJbW92CSVyMTUsJGxlbgorLQorLQltb3YJMCglcnNwKSwlcjE1CisrCXBvcCAJCSVyMTUKKyAuY2ZpX3Jlc3RvcmUJJXIxNQorLQltb3YJOCglcnNwKSwlcjE0CisrCXBvcCAJCSVyMTQKKyAuY2ZpX3Jlc3RvcmUJJXIxNAorLQltb3YJMTYoJXJzcCksJXIxMworKwlwb3AgCQklcjEzCisgLmNmaV9yZXN0b3JlCSVyMTMKKy0JbW92CTI0KCVyc3ApLCVyMTIKKysJcG9wIAkJJXIxMgorIC5jZmlfcmVzdG9yZQklcjEyCistCW1vdgkzMiglcnNwKSwlcmJwCistLmNmaV9yZXN0b3JlCSVyYnAKKy0JbW92CTQwKCVyc3ApLCVyYngKKysJcG9wIAkJJXJieAorIC5jZmlfcmVzdG9yZQklcmJ4CistCWxlYQk0OCglcnNwKSwlcmF4CistCWxlYQk0OCglcnNwKSwlcnNwCistLmNmaV9hZGp1c3RfY2ZhX29mZnNldAktNDgKKysJcG9wIAkJJXJicAorKy5jZmlfcmVzdG9yZQklcmJwCisgLkxiYXNlMl82NF9hdnhfZXBpbG9ndWU6CisgCWptcAkuTGRvX2F2eAorIC5jZmlfZW5kcHJvYworQEAgLTc2OCw4ICs4NTUsMTEgQEAgcG9seTEzMDVfYmxvY2tzX2F2eDoKKyAuTGRvX2F2eDoKKyBfX18KKyAkY29kZS49PDxfX18JaWYgKCEkd2luNjQpOworKwlsZWEJCTgoJXJzcCksJXIxMAorKy5jZmlfZGVmX2NmYV9yZWdpc3RlcgklcjEwCisrCWFuZAkJXCQtMzIsJXJzcAorKwlzdWIJCVwkLTgsJXJzcAorIAlsZWEJCS0weDU4KCVyc3ApLCVyMTEKKy0uY2ZpX2RlZl9jZmEJCSVyMTEsMHg2MAorIAlzdWIJCVwkMHgxNzgsJXJzcAorIF9fXworICRjb2RlLj08PF9fXwlpZiAoJHdpbjY0KTsKK0BAIC0xMzYxLDE4ICsxNDUxLDE4IEBAICRjb2RlLj08PF9fXwlpZiAoJHdpbjY0KTsKKyAuTGRvX2F2eF9lcGlsb2d1ZToKKyBfX18KKyAkY29kZS49PDxfX18JaWYgKCEkd2luNjQpOworLQlsZWEJCTB4NTgoJXIxMSksJXJzcAorLS5jZmlfZGVmX2NmYQkJJXJzcCw4CisrCWxlYQkJLTgoJXIxMCksJXJzcAorKy5jZmlfZGVmX2NmYV9yZWdpc3RlcgklcnNwCisgX19fCisgJGNvZGUuPTw8X19fOworIAl2emVyb3VwcGVyCisgCXJldAorIC5jZmlfZW5kcHJvYworLS5zaXplCXBvbHkxMzA1X2Jsb2Nrc19hdngsLi1wb2x5MTMwNV9ibG9ja3NfYXZ4CisrX19fCisrJmVuZF9mdW5jdGlvbigicG9seTEzMDVfYmxvY2tzX2F2eCIpOworIAorLS50eXBlCXBvbHkxMzA1X2VtaXRfYXZ4LFxAZnVuY3Rpb24sMworLS5hbGlnbgkzMgorLXBvbHkxMzA1X2VtaXRfYXZ4OgorKyZkZWNsYXJlX2Z1bmN0aW9uKCJwb2x5MTMwNV9lbWl0X2F2eCIsIDMyLCAzKTsKKyskY29kZS49PDxfX187CisgCWNtcGwJXCQwLDIwKCRjdHgpCSMgaXNfYmFzZTJfMjY/CisgCWplCS5MZW1pdAorIAorQEAgLTE0MjMsNDEgKzE1MTMsNTEgQEAgcG9seTEzMDVfZW1pdF9hdng6CisgCW1vdgklcmN4LDgoJG1hYykKKyAKKyAJcmV0CistLnNpemUJcG9seTEzMDVfZW1pdF9hdngsLi1wb2x5MTMwNV9lbWl0X2F2eAorIF9fXworKyZlbmRfZnVuY3Rpb24oInBvbHkxMzA1X2VtaXRfYXZ4Iik7CisrCisraWYgKCRrZXJuZWwpIHsKKysJJGNvZGUgLj0gIiNlbmRpZlxuIjsKKyt9CisgCisgaWYgKCRhdng+MSkgeworKworK2lmICgka2VybmVsKSB7CisrCSRjb2RlIC49ICIjaWZkZWYgQ09ORklHX0FTX0FWWDJcbiI7CisrfQorKworIG15ICgkSDAsJEgxLCRIMiwkSDMsJEg0LCAkTUFTSywgJFQ0LCRUMCwkVDEsJFQyLCRUMywgJEQwLCREMSwkRDIsJEQzLCRENCkgPQorICAgICBtYXAoIiV5bW0kXyIsKDAuLjE1KSk7CisgbXkgJFM0PSRNQVNLOworIAorK3N1YiBwb2x5MTMwNV9ibG9ja3NfYXZ4TiB7CisrCW15ICgkYXZ4NTEyKSA9IEBfOworKwlteSAkc3VmZml4ID0gJGF2eDUxMiA/ICJfYXZ4NTEyIiA6ICIiOworICRjb2RlLj08PF9fXzsKKy0udHlwZQlwb2x5MTMwNV9ibG9ja3NfYXZ4MixcQGZ1bmN0aW9uLDQKKy0uYWxpZ24JMzIKKy1wb2x5MTMwNV9ibG9ja3NfYXZ4MjoKKyAuY2ZpX3N0YXJ0cHJvYworIAltb3YJMjAoJGN0eCksJXI4ZAkJIyBpc19iYXNlMl8yNgorIAljbXAJXCQxMjgsJGxlbgorLQlqYWUJLkxibG9ja3NfYXZ4MgorKwlqYWUJLkxibG9ja3NfYXZ4MiRzdWZmaXgKKyAJdGVzdAklcjhkLCVyOGQKKyAJanoJLkxibG9ja3MKKyAKKy0uTGJsb2Nrc19hdngyOgorKy5MYmxvY2tzX2F2eDIkc3VmZml4OgorIAlhbmQJXCQtMTYsJGxlbgorLQlqegkuTG5vX2RhdGFfYXZ4MgorKwlqegkuTG5vX2RhdGFfYXZ4MiRzdWZmaXgKKyAKKyAJdnplcm91cHBlcgorIAorIAl0ZXN0CSVyOGQsJXI4ZAorLQlqegkuTGJhc2UyXzY0X2F2eDIKKysJanoJLkxiYXNlMl82NF9hdngyJHN1ZmZpeAorIAorIAl0ZXN0CVwkNjMsJGxlbgorLQlqegkuTGV2ZW5fYXZ4MgorKwlqegkuTGV2ZW5fYXZ4MiRzdWZmaXgKKyAKKy0JcHVzaAklcmJ4CistLmNmaV9wdXNoCSVyYngKKyAJcHVzaAklcmJwCisgLmNmaV9wdXNoCSVyYnAKKysJbW92IAklcnNwLCVyYnAKKysJcHVzaAklcmJ4CisrLmNmaV9wdXNoCSVyYngKKyAJcHVzaAklcjEyCisgLmNmaV9wdXNoCSVyMTIKKyAJcHVzaAklcjEzCitAQCAtMTQ2Niw3ICsxNTY2LDcgQEAgcG9seTEzMDVfYmxvY2tzX2F2eDI6CisgLmNmaV9wdXNoCSVyMTQKKyAJcHVzaAklcjE1CisgLmNmaV9wdXNoCSVyMTUKKy0uTGJsb2Nrc19hdngyX2JvZHk6CisrLkxibG9ja3NfYXZ4Ml9ib2R5JHN1ZmZpeDoKKyAKKyAJbW92CSRsZW4sJXIxNQkJIyByZWFzc2lnbiAkbGVuCisgCitAQCAtMTUxMyw3ICsxNjEzLDcgQEAgcG9seTEzMDVfYmxvY2tzX2F2eDI6CisgCXNocglcJDIsJHMxCisgCWFkZAkkcjEsJHMxCQkJIyBzMSA9IHIxICsgKHIxID4+IDIpCisgCistLkxiYXNlMl8yNl9wcmVfYXZ4MjoKKysuTGJhc2UyXzI2X3ByZV9hdngyJHN1ZmZpeDoKKyAJYWRkCTAoJGlucCksJGgwCQkjIGFjY3VtdWxhdGUgaW5wdXQKKyAJYWRjCTgoJGlucCksJGgxCisgCWxlYQkxNigkaW5wKSwkaW5wCitAQCAtMTUyNCwxMCArMTYyNCwxMCBAQCBwb2x5MTMwNV9ibG9ja3NfYXZ4MjoKKyAJbW92CSRyMSwlcmF4CisgCisgCXRlc3QJXCQ2MywlcjE1CistCWpuegkuTGJhc2UyXzI2X3ByZV9hdngyCisrCWpuegkuTGJhc2UyXzI2X3ByZV9hdngyJHN1ZmZpeAorIAorIAl0ZXN0CSRwYWRiaXQsJHBhZGJpdAkJIyBpZiAkcGFkYml0IGlzIHplcm8sCistCWp6CS5Mc3RvcmVfYmFzZTJfNjRfYXZ4MgkjIHN0b3JlIGhhc2ggaW4gYmFzZSAyXjY0IGZvcm1hdAorKwlqegkuTHN0b3JlX2Jhc2UyXzY0X2F2eDIkc3VmZml4CSMgc3RvcmUgaGFzaCBpbiBiYXNlIDJeNjQgZm9ybWF0CisgCisgCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBiYXNlIDJeNjQgLT4gYmFzZSAyXjI2CisgCW1vdgkkaDAsJXJheAorQEAgLTE1NDgsNTcgKzE2NDgsNTYgQEAgcG9seTEzMDVfYmxvY2tzX2F2eDI6CisgCW9yCSRyMSwkaDIJCQkjIGhbNF0KKyAKKyAJdGVzdAklcjE1LCVyMTUKKy0JanoJLkxzdG9yZV9iYXNlMl8yNl9hdngyCisrCWp6CS5Mc3RvcmVfYmFzZTJfMjZfYXZ4MiRzdWZmaXgKKyAKKyAJdm1vdmQJJXJheCNkLCV4IyRIMAorIAl2bW92ZAklcmR4I2QsJXgjJEgxCisgCXZtb3ZkCSRoMCNkLCV4IyRIMgorIAl2bW92ZAkkaDEjZCwleCMkSDMKKyAJdm1vdmQJJGgyI2QsJXgjJEg0CistCWptcAkuTHByb2NlZWRfYXZ4MgorKwlqbXAJLkxwcm9jZWVkX2F2eDIkc3VmZml4CisgCisgLmFsaWduCTMyCistLkxzdG9yZV9iYXNlMl82NF9hdngyOgorKy5Mc3RvcmVfYmFzZTJfNjRfYXZ4MiRzdWZmaXg6CisgCW1vdgkkaDAsMCgkY3R4KQorIAltb3YJJGgxLDgoJGN0eCkKKyAJbW92CSRoMiwxNigkY3R4KQkJIyBub3RlIHRoYXQgaXNfYmFzZTJfMjYgaXMgemVyb2VkCistCWptcAkuTGRvbmVfYXZ4MgorKwlqbXAJLkxkb25lX2F2eDIkc3VmZml4CisgCisgLmFsaWduCTE2CistLkxzdG9yZV9iYXNlMl8yNl9hdngyOgorKy5Mc3RvcmVfYmFzZTJfMjZfYXZ4MiRzdWZmaXg6CisgCW1vdgklcmF4I2QsMCgkY3R4KQkJIyBzdG9yZSBoYXNoIHZhbHVlIGJhc2UgMl4yNgorIAltb3YJJXJkeCNkLDQoJGN0eCkKKyAJbW92CSRoMCNkLDgoJGN0eCkKKyAJbW92CSRoMSNkLDEyKCRjdHgpCisgCW1vdgkkaDIjZCwxNigkY3R4KQorIC5hbGlnbgkxNgorLS5MZG9uZV9hdngyOgorLQltb3YJMCglcnNwKSwlcjE1CisrLkxkb25lX2F2eDIkc3VmZml4OgorKwlwb3AgCQklcjE1CisgLmNmaV9yZXN0b3JlCSVyMTUKKy0JbW92CTgoJXJzcCksJXIxNAorKwlwb3AgCQklcjE0CisgLmNmaV9yZXN0b3JlCSVyMTQKKy0JbW92CTE2KCVyc3ApLCVyMTMKKysJcG9wIAkJJXIxMworIC5jZmlfcmVzdG9yZQklcjEzCistCW1vdgkyNCglcnNwKSwlcjEyCisrCXBvcCAJCSVyMTIKKyAuY2ZpX3Jlc3RvcmUJJXIxMgorLQltb3YJMzIoJXJzcCksJXJicAorLS5jZmlfcmVzdG9yZQklcmJwCistCW1vdgk0MCglcnNwKSwlcmJ4CisrCXBvcCAJCSVyYngKKyAuY2ZpX3Jlc3RvcmUJJXJieAorLQlsZWEJNDgoJXJzcCksJXJzcAorLS5jZmlfYWRqdXN0X2NmYV9vZmZzZXQJLTQ4CistLkxub19kYXRhX2F2eDI6CistLkxibG9ja3NfYXZ4Ml9lcGlsb2d1ZToKKysJcG9wIAkJJXJicAorKy5jZmlfcmVzdG9yZSAJJXJicAorKy5Mbm9fZGF0YV9hdngyJHN1ZmZpeDoKKysuTGJsb2Nrc19hdngyX2VwaWxvZ3VlJHN1ZmZpeDoKKyAJcmV0CisgLmNmaV9lbmRwcm9jCisgCisgLmFsaWduCTMyCistLkxiYXNlMl82NF9hdngyOgorKy5MYmFzZTJfNjRfYXZ4MiRzdWZmaXg6CisgLmNmaV9zdGFydHByb2MKKy0JcHVzaAklcmJ4CistLmNmaV9wdXNoCSVyYngKKyAJcHVzaAklcmJwCisgLmNmaV9wdXNoCSVyYnAKKysJbW92IAklcnNwLCVyYnAKKysJcHVzaAklcmJ4CisrLmNmaV9wdXNoCSVyYngKKyAJcHVzaAklcjEyCisgLmNmaV9wdXNoCSVyMTIKKyAJcHVzaAklcjEzCitAQCAtMTYwNyw3ICsxNzA2LDcgQEAgcG9seTEzMDVfYmxvY2tzX2F2eDI6CisgLmNmaV9wdXNoCSVyMTQKKyAJcHVzaAklcjE1CisgLmNmaV9wdXNoCSVyMTUKKy0uTGJhc2UyXzY0X2F2eDJfYm9keToKKysuTGJhc2UyXzY0X2F2eDJfYm9keSRzdWZmaXg6CisgCisgCW1vdgkkbGVuLCVyMTUJCSMgcmVhc3NpZ24gJGxlbgorIAorQEAgLTE2MjQsOSArMTcyMyw5IEBAIHBvbHkxMzA1X2Jsb2Nrc19hdngyOgorIAlhZGQJJHIxLCRzMQkJCSMgczEgPSByMSArIChyMSA+PiAyKQorIAorIAl0ZXN0CVwkNjMsJGxlbgorLQlqegkuTGluaXRfYXZ4MgorKwlqegkuTGluaXRfYXZ4MiRzdWZmaXgKKyAKKy0uTGJhc2UyXzY0X3ByZV9hdngyOgorKy5MYmFzZTJfNjRfcHJlX2F2eDIkc3VmZml4OgorIAlhZGQJMCgkaW5wKSwkaDAJCSMgYWNjdW11bGF0ZSBpbnB1dAorIAlhZGMJOCgkaW5wKSwkaDEKKyAJbGVhCTE2KCRpbnApLCRpbnAKK0BAIC0xNjM3LDkgKzE3MzYsOSBAQCBwb2x5MTMwNV9ibG9ja3NfYXZ4MjoKKyAJbW92CSRyMSwlcmF4CisgCisgCXRlc3QJXCQ2MywlcjE1CistCWpuegkuTGJhc2UyXzY0X3ByZV9hdngyCisrCWpuegkuTGJhc2UyXzY0X3ByZV9hdngyJHN1ZmZpeAorIAorLS5MaW5pdF9hdngyOgorKy5MaW5pdF9hdngyJHN1ZmZpeDoKKyAJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIGJhc2UgMl42NCAtPiBiYXNlIDJeMjYKKyAJbW92CSRoMCwlcmF4CisgCW1vdgkkaDAsJXJkeAorQEAgLTE2NjcsNjkgKzE3NjYsNzcgQEAgcG9seTEzMDVfYmxvY2tzX2F2eDI6CisgCisgCWNhbGwJX19wb2x5MTMwNV9pbml0X2F2eAorIAorLS5McHJvY2VlZF9hdngyOgorKy5McHJvY2VlZF9hdngyJHN1ZmZpeDoKKyAJbW92CSVyMTUsJGxlbgkJCSMgcmVzdG9yZSAkbGVuCistCW1vdglPUEVOU1NMX2lhMzJjYXBfUCs4KCVyaXApLCVyMTBkCisrX19fCisrJGNvZGUuPTw8X19fIGlmICghJGtlcm5lbCk7CisrCW1vdglPUEVOU1NMX2lhMzJjYXBfUCs4KCVyaXApLCVyOWQKKyAJbW92CVwkYCgxPDwzMXwxPDwzMHwxPDwxNilgLCVyMTFkCistCistCW1vdgkwKCVyc3ApLCVyMTUKKytfX18KKyskY29kZS49PDxfX187CisrCXBvcCAJCSVyMTUKKyAuY2ZpX3Jlc3RvcmUJJXIxNQorLQltb3YJOCglcnNwKSwlcjE0CisrCXBvcCAJCSVyMTQKKyAuY2ZpX3Jlc3RvcmUJJXIxNAorLQltb3YJMTYoJXJzcCksJXIxMworKwlwb3AgCQklcjEzCisgLmNmaV9yZXN0b3JlCSVyMTMKKy0JbW92CTI0KCVyc3ApLCVyMTIKKysJcG9wIAkJJXIxMgorIC5jZmlfcmVzdG9yZQklcjEyCistCW1vdgkzMiglcnNwKSwlcmJwCistLmNmaV9yZXN0b3JlCSVyYnAKKy0JbW92CTQwKCVyc3ApLCVyYngKKysJcG9wIAkJJXJieAorIC5jZmlfcmVzdG9yZQklcmJ4CistCWxlYQk0OCglcnNwKSwlcmF4CistCWxlYQk0OCglcnNwKSwlcnNwCistLmNmaV9hZGp1c3RfY2ZhX29mZnNldAktNDgKKy0uTGJhc2UyXzY0X2F2eDJfZXBpbG9ndWU6CistCWptcAkuTGRvX2F2eDIKKysJcG9wIAkJJXJicAorKy5jZmlfcmVzdG9yZSAJJXJicAorKy5MYmFzZTJfNjRfYXZ4Ml9lcGlsb2d1ZSRzdWZmaXg6CisrCWptcAkuTGRvX2F2eDIkc3VmZml4CisgLmNmaV9lbmRwcm9jCisgCisgLmFsaWduCTMyCistLkxldmVuX2F2eDI6CisrLkxldmVuX2F2eDIkc3VmZml4OgorIC5jZmlfc3RhcnRwcm9jCistCW1vdgkJT1BFTlNTTF9pYTMyY2FwX1ArOCglcmlwKSwlcjEwZAorK19fXworKyRjb2RlLj08PF9fXyBpZiAoISRrZXJuZWwpOworKwltb3YJCU9QRU5TU0xfaWEzMmNhcF9QKzgoJXJpcCksJXI5ZAorK19fXworKyRjb2RlLj08PF9fXzsKKyAJdm1vdmQJCTQqMCgkY3R4KSwleCMkSDAJIyBsb2FkIGhhc2ggdmFsdWUgYmFzZSAyXjI2CisgCXZtb3ZkCQk0KjEoJGN0eCksJXgjJEgxCisgCXZtb3ZkCQk0KjIoJGN0eCksJXgjJEgyCisgCXZtb3ZkCQk0KjMoJGN0eCksJXgjJEgzCisgCXZtb3ZkCQk0KjQoJGN0eCksJXgjJEg0CisgCistLkxkb19hdngyOgorKy5MZG9fYXZ4MiRzdWZmaXg6CisgX19fCistJGNvZGUuPTw8X19fCQlpZiAoJGF2eD4yKTsKKyskY29kZS49PDxfX18JCWlmICghJGtlcm5lbCAmJiAkYXZ4PjIpOworIAljbXAJCVwkNTEyLCRsZW4KKyAJamIJCS5Mc2tpcF9hdng1MTIKKy0JYW5kCQklcjExZCwlcjEwZAorLQl0ZXN0CQlcJGAxPDwxNmAsJXIxMGQJCSMgY2hlY2sgZm9yIEFWWDUxMkYKKysJYW5kCQklcjExZCwlcjlkCisrCXRlc3QJCVwkYDE8PDE2YCwlcjlkCQkjIGNoZWNrIGZvciBBVlg1MTJGCisgCWpuegkJLkxibG9ja3NfYXZ4NTEyCistLkxza2lwX2F2eDUxMjoKKysuTHNraXBfYXZ4NTEyJHN1ZmZpeDoKKytfX18KKyskY29kZS49PDxfX18gaWYgKCRhdnggPiAyICYmICRhdng1MTIgJiYgJGtlcm5lbCk7CisrCWNtcAkJXCQ1MTIsJGxlbgorKwlqYWUJCS5MYmxvY2tzX2F2eDUxMgorIF9fXworICRjb2RlLj08PF9fXwlpZiAoISR3aW42NCk7CistCWxlYQkJLTgoJXJzcCksJXIxMQorLS5jZmlfZGVmX2NmYQkJJXIxMSwxNgorKwlsZWEJCTgoJXJzcCksJXIxMAorKy5jZmlfZGVmX2NmYV9yZWdpc3RlcgklcjEwCisgCXN1YgkJXCQweDEyOCwlcnNwCisgX19fCisgJGNvZGUuPTw8X19fCWlmICgkd2luNjQpOworLQlsZWEJCS0weGY4KCVyc3ApLCVyMTEKKysJbGVhCQk4KCVyc3ApLCVyMTAKKyAJc3ViCQlcJDB4MWM4LCVyc3AKKy0Jdm1vdmRxYQkJJXhtbTYsMHg1MCglcjExKQorLQl2bW92ZHFhCQkleG1tNywweDYwKCVyMTEpCistCXZtb3ZkcWEJCSV4bW04LDB4NzAoJXIxMSkKKy0Jdm1vdmRxYQkJJXhtbTksMHg4MCglcjExKQorLQl2bW92ZHFhCQkleG1tMTAsMHg5MCglcjExKQorLQl2bW92ZHFhCQkleG1tMTEsMHhhMCglcjExKQorLQl2bW92ZHFhCQkleG1tMTIsMHhiMCglcjExKQorLQl2bW92ZHFhCQkleG1tMTMsMHhjMCglcjExKQorLQl2bW92ZHFhCQkleG1tMTQsMHhkMCglcjExKQorLQl2bW92ZHFhCQkleG1tMTUsMHhlMCglcjExKQorLS5MZG9fYXZ4Ml9ib2R5OgorKwl2bW92ZHFhCQkleG1tNiwtMHhiMCglcjEwKQorKwl2bW92ZHFhCQkleG1tNywtMHhhMCglcjEwKQorKwl2bW92ZHFhCQkleG1tOCwtMHg5MCglcjEwKQorKwl2bW92ZHFhCQkleG1tOSwtMHg4MCglcjEwKQorKwl2bW92ZHFhCQkleG1tMTAsLTB4NzAoJXIxMCkKKysJdm1vdmRxYQkJJXhtbTExLC0weDYwKCVyMTApCisrCXZtb3ZkcWEJCSV4bW0xMiwtMHg1MCglcjEwKQorKwl2bW92ZHFhCQkleG1tMTMsLTB4NDAoJXIxMCkKKysJdm1vdmRxYQkJJXhtbTE0LC0weDMwKCVyMTApCisrCXZtb3ZkcWEJCSV4bW0xNSwtMHgyMCglcjEwKQorKy5MZG9fYXZ4Ml9ib2R5JHN1ZmZpeDoKKyBfX18KKyAkY29kZS49PDxfX187CisgCWxlYQkJLkxjb25zdCglcmlwKSwlcmN4CitAQCAtMTc5NCwxMSArMTkwMSwxMSBAQCAkY29kZS49PDxfX187CisgCisgCXZwYWRkcQkJJEgyLCRUMiwkSDIJCSMgYWNjdW11bGF0ZSBpbnB1dAorIAlzdWIJCVwkNjQsJGxlbgorLQlqegkJLkx0YWlsX2F2eDIKKy0Jam1wCQkuTG9vcF9hdngyCisrCWp6CQkuTHRhaWxfYXZ4MiRzdWZmaXgKKysJam1wCQkuTG9vcF9hdngyJHN1ZmZpeAorIAorIC5hbGlnbgkzMgorLS5Mb29wX2F2eDI6CisrLkxvb3BfYXZ4MiRzdWZmaXg6CisgCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAJIyAoKGlucFswXSpyXjQraW5wWzRdKSpyXjQraW5wWyA4XSkqcl40CisgCSMgKChpbnBbMV0qcl40K2lucFs1XSkqcl40K2lucFsgOV0pKnJeMworQEAgLTE5NDYsMTAgKzIwNTMsMTAgQEAgJGNvZGUuPTw8X19fOworIAkgdnBvcgkJMzIoJXJjeCksJFQ0LCRUNAkjIHBhZGJpdCwgeWVzLCBhbHdheXMKKyAKKyAJc3ViCQlcJDY0LCRsZW4KKy0Jam56CQkuTG9vcF9hdngyCisrCWpuegkJLkxvb3BfYXZ4MiRzdWZmaXgKKyAKKyAJLmJ5dGUJCTB4NjYsMHg5MAorLS5MdGFpbF9hdngyOgorKy5MdGFpbF9hdngyJHN1ZmZpeDoKKyAJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIAkjIHdoaWxlIGFib3ZlIG11bHRpcGxpY2F0aW9ucyB3ZXJlIGJ5IHJeNCBpbiBhbGwgbGFuZXMsIGluIGxhc3QKKyAJIyBpdGVyYXRpb24gd2UgbXVsdGlwbHkgbGVhc3Qgc2lnbmlmaWNhbnQgbGFuZSBieSByXjQgYW5kIG1vc3QKK0BAIC0yMDg3LDM3ICsyMTk0LDI5IEBAICRjb2RlLj08PF9fXzsKKyAJdm1vdmQJCSV4IyRINCxgNCo0LTQ4LTY0YCgkY3R4KQorIF9fXworICRjb2RlLj08PF9fXwlpZiAoJHdpbjY0KTsKKy0Jdm1vdmRxYQkJMHg1MCglcjExKSwleG1tNgorLQl2bW92ZHFhCQkweDYwKCVyMTEpLCV4bW03CistCXZtb3ZkcWEJCTB4NzAoJXIxMSksJXhtbTgKKy0Jdm1vdmRxYQkJMHg4MCglcjExKSwleG1tOQorLQl2bW92ZHFhCQkweDkwKCVyMTEpLCV4bW0xMAorLQl2bW92ZHFhCQkweGEwKCVyMTEpLCV4bW0xMQorLQl2bW92ZHFhCQkweGIwKCVyMTEpLCV4bW0xMgorLQl2bW92ZHFhCQkweGMwKCVyMTEpLCV4bW0xMworLQl2bW92ZHFhCQkweGQwKCVyMTEpLCV4bW0xNAorLQl2bW92ZHFhCQkweGUwKCVyMTEpLCV4bW0xNQorLQlsZWEJCTB4ZjgoJXIxMSksJXJzcAorLS5MZG9fYXZ4Ml9lcGlsb2d1ZToKKysJdm1vdmRxYQkJLTB4YjAoJXIxMCksJXhtbTYKKysJdm1vdmRxYQkJLTB4YTAoJXIxMCksJXhtbTcKKysJdm1vdmRxYQkJLTB4OTAoJXIxMCksJXhtbTgKKysJdm1vdmRxYQkJLTB4ODAoJXIxMCksJXhtbTkKKysJdm1vdmRxYQkJLTB4NzAoJXIxMCksJXhtbTEwCisrCXZtb3ZkcWEJCS0weDYwKCVyMTApLCV4bW0xMQorKwl2bW92ZHFhCQktMHg1MCglcjEwKSwleG1tMTIKKysJdm1vdmRxYQkJLTB4NDAoJXIxMCksJXhtbTEzCisrCXZtb3ZkcWEJCS0weDMwKCVyMTApLCV4bW0xNAorKwl2bW92ZHFhCQktMHgyMCglcjEwKSwleG1tMTUKKysJbGVhCQktOCglcjEwKSwlcnNwCisrLkxkb19hdngyX2VwaWxvZ3VlJHN1ZmZpeDoKKyBfX18KKyAkY29kZS49PDxfX18JaWYgKCEkd2luNjQpOworLQlsZWEJCTgoJXIxMSksJXJzcAorLS5jZmlfZGVmX2NmYQkJJXJzcCw4CisrCWxlYQkJLTgoJXIxMCksJXJzcAorKy5jZmlfZGVmX2NmYV9yZWdpc3RlcgklcnNwCisgX19fCisgJGNvZGUuPTw8X19fOworIAl2emVyb3VwcGVyCisgCXJldAorIC5jZmlfZW5kcHJvYworLS5zaXplCXBvbHkxMzA1X2Jsb2Nrc19hdngyLC4tcG9seTEzMDVfYmxvY2tzX2F2eDIKKyBfX18KKy0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworLWlmICgkYXZ4PjIpIHsKKy0jIE9uIGVudHJ5IHdlIGhhdmUgaW5wdXQgbGVuZ3RoIGRpdmlzaWJsZSBieSA2NC4gQnV0IHNpbmNlIGlubmVyIGxvb3AKKy0jIHByb2Nlc3NlcyAxMjggYnl0ZXMgcGVyIGl0ZXJhdGlvbiwgY2FzZXMgd2hlbiBsZW5ndGggaXMgbm90IGRpdmlzaWJsZQorLSMgYnkgMTI4IGFyZSBoYW5kbGVkIGJ5IHBhc3NpbmcgdGFpbCA2NCBieXRlcyB0byAuTHRhaWxfYXZ4Mi4gRm9yIHRoaXMKKy0jIHJlYXNvbiBzdGFjayBsYXlvdXQgaXMga2VwdCBpZGVudGljYWwgdG8gcG9seTEzMDVfYmxvY2tzX2F2eDIuIElmIG5vdAorLSMgZm9yIHRoaXMgdGFpbCwgd2Ugd291bGRuJ3QgaGF2ZSB0byBldmVuIGFsbG9jYXRlIHN0YWNrIGZyYW1lLi4uCistCisraWYoJGF2eCA+IDIgJiYgJGF2eDUxMikgeworIG15ICgkUjAsJFIxLCRSMiwkUjMsJFI0LCAkUzEsJFMyLCRTMywkUzQpID0gbWFwKCIlem1tJF8iLCgxNi4uMjQpKTsKKyBteSAoJE0wLCRNMSwkTTIsJE0zLCRNNCkgPSBtYXAoIiV6bW0kXyIsKDI1Li4yOSkpOworIG15ICRQQURCSVQ9IiV6bW0zMCI7CitAQCAtMjEyOCwzMiArMjIyNywyOSBAQCBtYXAocy8leS8lei8sKCRIMCwkSDEsJEgyLCRIMywkSDQpKTsKKyBtYXAocy8leS8lei8sKCRNQVNLKSk7CisgCisgJGNvZGUuPTw8X19fOworLS50eXBlCXBvbHkxMzA1X2Jsb2Nrc19hdng1MTIsXEBmdW5jdGlvbiw0CistLmFsaWduCTMyCistcG9seTEzMDVfYmxvY2tzX2F2eDUxMjoKKyAuY2ZpX3N0YXJ0cHJvYworIC5MYmxvY2tzX2F2eDUxMjoKKyAJbW92CQlcJDE1LCVlYXgKKyAJa21vdncJCSVlYXgsJWsyCisgX19fCisgJGNvZGUuPTw8X19fCWlmICghJHdpbjY0KTsKKy0JbGVhCQktOCglcnNwKSwlcjExCistLmNmaV9kZWZfY2ZhCQklcjExLDE2CisrCWxlYQkJOCglcnNwKSwlcjEwCisrLmNmaV9kZWZfY2ZhX3JlZ2lzdGVyCSVyMTAKKyAJc3ViCQlcJDB4MTI4LCVyc3AKKyBfX18KKyAkY29kZS49PDxfX18JaWYgKCR3aW42NCk7CistCWxlYQkJLTB4ZjgoJXJzcCksJXIxMQorKwlsZWEJCTgoJXJzcCksJXIxMAorIAlzdWIJCVwkMHgxYzgsJXJzcAorLQl2bW92ZHFhCQkleG1tNiwweDUwKCVyMTEpCistCXZtb3ZkcWEJCSV4bW03LDB4NjAoJXIxMSkKKy0Jdm1vdmRxYQkJJXhtbTgsMHg3MCglcjExKQorLQl2bW92ZHFhCQkleG1tOSwweDgwKCVyMTEpCistCXZtb3ZkcWEJCSV4bW0xMCwweDkwKCVyMTEpCistCXZtb3ZkcWEJCSV4bW0xMSwweGEwKCVyMTEpCistCXZtb3ZkcWEJCSV4bW0xMiwweGIwKCVyMTEpCistCXZtb3ZkcWEJCSV4bW0xMywweGMwKCVyMTEpCistCXZtb3ZkcWEJCSV4bW0xNCwweGQwKCVyMTEpCistCXZtb3ZkcWEJCSV4bW0xNSwweGUwKCVyMTEpCisrCXZtb3ZkcWEJCSV4bW02LC0weGIwKCVyMTApCisrCXZtb3ZkcWEJCSV4bW03LC0weGEwKCVyMTApCisrCXZtb3ZkcWEJCSV4bW04LC0weDkwKCVyMTApCisrCXZtb3ZkcWEJCSV4bW05LC0weDgwKCVyMTApCisrCXZtb3ZkcWEJCSV4bW0xMCwtMHg3MCglcjEwKQorKwl2bW92ZHFhCQkleG1tMTEsLTB4NjAoJXIxMCkKKysJdm1vdmRxYQkJJXhtbTEyLC0weDUwKCVyMTApCisrCXZtb3ZkcWEJCSV4bW0xMywtMHg0MCglcjEwKQorKwl2bW92ZHFhCQkleG1tMTQsLTB4MzAoJXIxMCkKKysJdm1vdmRxYQkJJXhtbTE1LC0weDIwKCVyMTApCisgLkxkb19hdng1MTJfYm9keToKKyBfX18KKyAkY29kZS49PDxfX187CitAQCAtMjY3OSw3ICsyNzc1LDcgQEAgJGNvZGUuPTw8X19fOworIAorIAlsZWEJCTB4OTAoJXJzcCksJXJheAkJIyBzaXplIG9wdGltaXphdGlvbiBmb3IgLkx0YWlsX2F2eDIKKyAJYWRkCQlcJDY0LCRsZW4KKy0Jam56CQkuTHRhaWxfYXZ4MgorKwlqbnoJCS5MdGFpbF9hdngyJHN1ZmZpeAorIAorIAl2cHN1YnEJCSRUMiwkSDIsJEgyCQkjIHVuZG8gaW5wdXQgYWNjdW11bGF0aW9uCisgCXZtb3ZkCQkleCMkSDAsYDQqMC00OC02NGAoJGN0eCkjIHNhdmUgcGFydGlhbGx5IHJlZHVjZWQKK0BAIC0yNjkwLDI5ICsyNzg2LDYxIEBAICRjb2RlLj08PF9fXzsKKyAJdnplcm9hbGwKKyBfX18KKyAkY29kZS49PDxfX18JaWYgKCR3aW42NCk7CistCW1vdmRxYQkJMHg1MCglcjExKSwleG1tNgorLQltb3ZkcWEJCTB4NjAoJXIxMSksJXhtbTcKKy0JbW92ZHFhCQkweDcwKCVyMTEpLCV4bW04CistCW1vdmRxYQkJMHg4MCglcjExKSwleG1tOQorLQltb3ZkcWEJCTB4OTAoJXIxMSksJXhtbTEwCistCW1vdmRxYQkJMHhhMCglcjExKSwleG1tMTEKKy0JbW92ZHFhCQkweGIwKCVyMTEpLCV4bW0xMgorLQltb3ZkcWEJCTB4YzAoJXIxMSksJXhtbTEzCistCW1vdmRxYQkJMHhkMCglcjExKSwleG1tMTQKKy0JbW92ZHFhCQkweGUwKCVyMTEpLCV4bW0xNQorLQlsZWEJCTB4ZjgoJXIxMSksJXJzcAorKwltb3ZkcWEJCS0weGIwKCVyMTApLCV4bW02CisrCW1vdmRxYQkJLTB4YTAoJXIxMCksJXhtbTcKKysJbW92ZHFhCQktMHg5MCglcjEwKSwleG1tOAorKwltb3ZkcWEJCS0weDgwKCVyMTApLCV4bW05CisrCW1vdmRxYQkJLTB4NzAoJXIxMCksJXhtbTEwCisrCW1vdmRxYQkJLTB4NjAoJXIxMCksJXhtbTExCisrCW1vdmRxYQkJLTB4NTAoJXIxMCksJXhtbTEyCisrCW1vdmRxYQkJLTB4NDAoJXIxMCksJXhtbTEzCisrCW1vdmRxYQkJLTB4MzAoJXIxMCksJXhtbTE0CisrCW1vdmRxYQkJLTB4MjAoJXIxMCksJXhtbTE1CisrCWxlYQkJLTgoJXIxMCksJXJzcAorIC5MZG9fYXZ4NTEyX2VwaWxvZ3VlOgorIF9fXworICRjb2RlLj08PF9fXwlpZiAoISR3aW42NCk7CistCWxlYQkJOCglcjExKSwlcnNwCistLmNmaV9kZWZfY2ZhCQklcnNwLDgKKysJbGVhCQktOCglcjEwKSwlcnNwCisrLmNmaV9kZWZfY2ZhX3JlZ2lzdGVyCSVyc3AKKyBfX18KKyAkY29kZS49PDxfX187CisgCXJldAorIC5jZmlfZW5kcHJvYworLS5zaXplCXBvbHkxMzA1X2Jsb2Nrc19hdng1MTIsLi1wb2x5MTMwNV9ibG9ja3NfYXZ4NTEyCisgX19fCistaWYgKCRhdng+MykgeworKworK30KKysKKyt9CisrCisrJmRlY2xhcmVfZnVuY3Rpb24oInBvbHkxMzA1X2Jsb2Nrc19hdngyIiwgMzIsIDQpOworK3BvbHkxMzA1X2Jsb2Nrc19hdnhOKDApOworKyZlbmRfZnVuY3Rpb24oInBvbHkxMzA1X2Jsb2Nrc19hdngyIik7CisrCisraWYoJGtlcm5lbCkgeworKwkkY29kZSAuPSAiI2VuZGlmXG4iOworK30KKysKKysjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworK2lmICgkYXZ4PjIpIHsKKysjIE9uIGVudHJ5IHdlIGhhdmUgaW5wdXQgbGVuZ3RoIGRpdmlzaWJsZSBieSA2NC4gQnV0IHNpbmNlIGlubmVyIGxvb3AKKysjIHByb2Nlc3NlcyAxMjggYnl0ZXMgcGVyIGl0ZXJhdGlvbiwgY2FzZXMgd2hlbiBsZW5ndGggaXMgbm90IGRpdmlzaWJsZQorKyMgYnkgMTI4IGFyZSBoYW5kbGVkIGJ5IHBhc3NpbmcgdGFpbCA2NCBieXRlcyB0byAuTHRhaWxfYXZ4Mi4gRm9yIHRoaXMKKysjIHJlYXNvbiBzdGFjayBsYXlvdXQgaXMga2VwdCBpZGVudGljYWwgdG8gcG9seTEzMDVfYmxvY2tzX2F2eDIuIElmIG5vdAorKyMgZm9yIHRoaXMgdGFpbCwgd2Ugd291bGRuJ3QgaGF2ZSB0byBldmVuIGFsbG9jYXRlIHN0YWNrIGZyYW1lLi4uCisrCisraWYoJGtlcm5lbCkgeworKwkkY29kZSAuPSAiI2lmZGVmIENPTkZJR19BU19BVlg1MTJcbiI7CisrfQorKworKyZkZWNsYXJlX2Z1bmN0aW9uKCJwb2x5MTMwNV9ibG9ja3NfYXZ4NTEyIiwgMzIsIDQpOworK3BvbHkxMzA1X2Jsb2Nrc19hdnhOKDEpOworKyZlbmRfZnVuY3Rpb24oInBvbHkxMzA1X2Jsb2Nrc19hdng1MTIiKTsKKysKKytpZiAoJGtlcm5lbCkgeworKwkkY29kZSAuPSAiI2VuZGlmXG4iOworK30KKysKKytpZiAoISRrZXJuZWwgJiYgJGF2eD4zKSB7CisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgIyBWUE1BREQ1MiB2ZXJzaW9uIHVzaW5nIDJeNDQgcmFkaXguCisgIworQEAgLTM3NTMsNDUgKzM4ODEsOSBAQCBwb2x5MTMwNV9lbWl0X2Jhc2UyXzQ0OgorIC5zaXplCXBvbHkxMzA1X2VtaXRfYmFzZTJfNDQsLi1wb2x5MTMwNV9lbWl0X2Jhc2UyXzQ0CisgX19fCisgfQl9CX0KKy0kY29kZS49PDxfX187CistLmFsaWduCTY0CistLkxjb25zdDoKKy0uTG1hc2syNDoKKy0ubG9uZwkweDBmZmZmZmYsMCwweDBmZmZmZmYsMCwweDBmZmZmZmYsMCwweDBmZmZmZmYsMAorLS5MMTI5OgorLS5sb25nCWAxPDwyNGAsMCxgMTw8MjRgLDAsYDE8PDI0YCwwLGAxPDwyNGAsMAorLS5MbWFzazI2OgorLS5sb25nCTB4M2ZmZmZmZiwwLDB4M2ZmZmZmZiwwLDB4M2ZmZmZmZiwwLDB4M2ZmZmZmZiwwCistLkxwZXJtZF9hdngyOgorLS5sb25nCTIsMiwyLDMsMiwwLDIsMQorLS5McGVybWRfYXZ4NTEyOgorLS5sb25nCTAsMCwwLDEsIDAsMiwwLDMsIDAsNCwwLDUsIDAsNiwwLDcKKy0KKy0uTDJfNDRfaW5wX3Blcm1kOgorLS5sb25nCTAsMSwxLDIsMiwzLDcsNworLS5MMl80NF9pbnBfc2hpZnQ6CistLnF1YWQJMCwxMiwyNCw2NAorLS5MMl80NF9tYXNrOgorLS5xdWFkCTB4ZmZmZmZmZmZmZmYsMHhmZmZmZmZmZmZmZiwweDNmZmZmZmZmZmZmLDB4ZmZmZmZmZmZmZmZmZmZmZgorLS5MMl80NF9zaGlmdF9yZ3Q6CistLnF1YWQJNDQsNDQsNDIsNjQKKy0uTDJfNDRfc2hpZnRfbGZ0OgorLS5xdWFkCTgsOCwxMCw2NAorLQorLS5hbGlnbgk2NAorLS5MeF9tYXNrNDQ6CistLnF1YWQJMHhmZmZmZmZmZmZmZiwweGZmZmZmZmZmZmZmLDB4ZmZmZmZmZmZmZmYsMHhmZmZmZmZmZmZmZgorLS5xdWFkCTB4ZmZmZmZmZmZmZmYsMHhmZmZmZmZmZmZmZiwweGZmZmZmZmZmZmZmLDB4ZmZmZmZmZmZmZmYKKy0uTHhfbWFzazQyOgorLS5xdWFkCTB4M2ZmZmZmZmZmZmYsMHgzZmZmZmZmZmZmZiwweDNmZmZmZmZmZmZmLDB4M2ZmZmZmZmZmZmYKKy0ucXVhZAkweDNmZmZmZmZmZmZmLDB4M2ZmZmZmZmZmZmYsMHgzZmZmZmZmZmZmZiwweDNmZmZmZmZmZmZmCistX19fCisgfQorLSRjb2RlLj08PF9fXzsKKy0uYXNjaXoJIlBvbHkxMzA1IGZvciB4ODZfNjQsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iCistLmFsaWduCTE2CistX19fCisgCisraWYgKCEka2VybmVsKQorIHsJIyBjaGFjaGEyMC1wb2x5MTMwNSBoZWxwZXJzCisgbXkgKCRvdXQsJGlucCwkb3RwLCRsZW4pPSR3aW42NCA/ICgiJXJjeCIsIiVyZHgiLCIlcjgiLCAiJXI5IikgOiAgIyBXaW42NCBvcmRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIiVyZGkiLCIlcnNpIiwiJXJkeCIsIiVyY3giKTsgICMgVW5peCBvcmRlcgorQEAgLTQwMzgsMTcgKzQxMzAsMTcgQEAgYXZ4X2hhbmRsZXI6CisgCisgLnNlY3Rpb24JLnBkYXRhCisgLmFsaWduCTQKKy0JLnJ2YQkuTFNFSF9iZWdpbl9wb2x5MTMwNV9pbml0CistCS5ydmEJLkxTRUhfZW5kX3BvbHkxMzA1X2luaXQKKy0JLnJ2YQkuTFNFSF9pbmZvX3BvbHkxMzA1X2luaXQKKy0KKy0JLnJ2YQkuTFNFSF9iZWdpbl9wb2x5MTMwNV9ibG9ja3MKKy0JLnJ2YQkuTFNFSF9lbmRfcG9seTEzMDVfYmxvY2tzCistCS5ydmEJLkxTRUhfaW5mb19wb2x5MTMwNV9ibG9ja3MKKy0KKy0JLnJ2YQkuTFNFSF9iZWdpbl9wb2x5MTMwNV9lbWl0CistCS5ydmEJLkxTRUhfZW5kX3BvbHkxMzA1X2VtaXQKKy0JLnJ2YQkuTFNFSF9pbmZvX3BvbHkxMzA1X2VtaXQKKysJLnJ2YQkuTFNFSF9iZWdpbl9wb2x5MTMwNV9pbml0X3g4Nl82NAorKwkucnZhCS5MU0VIX2VuZF9wb2x5MTMwNV9pbml0X3g4Nl82NAorKwkucnZhCS5MU0VIX2luZm9fcG9seTEzMDVfaW5pdF94ODZfNjQKKysKKysJLnJ2YQkuTFNFSF9iZWdpbl9wb2x5MTMwNV9ibG9ja3NfeDg2XzY0CisrCS5ydmEJLkxTRUhfZW5kX3BvbHkxMzA1X2Jsb2Nrc194ODZfNjQKKysJLnJ2YQkuTFNFSF9pbmZvX3BvbHkxMzA1X2Jsb2Nrc194ODZfNjQKKysKKysJLnJ2YQkuTFNFSF9iZWdpbl9wb2x5MTMwNV9lbWl0X3g4Nl82NAorKwkucnZhCS5MU0VIX2VuZF9wb2x5MTMwNV9lbWl0X3g4Nl82NAorKwkucnZhCS5MU0VIX2luZm9fcG9seTEzMDVfZW1pdF94ODZfNjQKKyBfX18KKyAkY29kZS49PDxfX18gaWYgKCRhdngpOworIAkucnZhCS5MU0VIX2JlZ2luX3BvbHkxMzA1X2Jsb2Nrc19hdngKK0BAIC00MDg4LDIwICs0MTgwLDIwIEBAIF9fXworICRjb2RlLj08PF9fXzsKKyAuc2VjdGlvbgkueGRhdGEKKyAuYWxpZ24JOAorLS5MU0VIX2luZm9fcG9seTEzMDVfaW5pdDoKKysuTFNFSF9pbmZvX3BvbHkxMzA1X2luaXRfeDg2XzY0OgorIAkuYnl0ZQk5LDAsMCwwCisgCS5ydmEJc2VfaGFuZGxlcgorLQkucnZhCS5MU0VIX2JlZ2luX3BvbHkxMzA1X2luaXQsLkxTRUhfYmVnaW5fcG9seTEzMDVfaW5pdAorKwkucnZhCS5MU0VIX2JlZ2luX3BvbHkxMzA1X2luaXRfeDg2XzY0LC5MU0VIX2JlZ2luX3BvbHkxMzA1X2luaXRfeDg2XzY0CisgCistLkxTRUhfaW5mb19wb2x5MTMwNV9ibG9ja3M6CisrLkxTRUhfaW5mb19wb2x5MTMwNV9ibG9ja3NfeDg2XzY0OgorIAkuYnl0ZQk5LDAsMCwwCisgCS5ydmEJc2VfaGFuZGxlcgorIAkucnZhCS5MYmxvY2tzX2JvZHksLkxibG9ja3NfZXBpbG9ndWUKKyAKKy0uTFNFSF9pbmZvX3BvbHkxMzA1X2VtaXQ6CisrLkxTRUhfaW5mb19wb2x5MTMwNV9lbWl0X3g4Nl82NDoKKyAJLmJ5dGUJOSwwLDAsMAorIAkucnZhCXNlX2hhbmRsZXIKKy0JLnJ2YQkuTFNFSF9iZWdpbl9wb2x5MTMwNV9lbWl0LC5MU0VIX2JlZ2luX3BvbHkxMzA1X2VtaXQKKysJLnJ2YQkuTFNFSF9iZWdpbl9wb2x5MTMwNV9lbWl0X3g4Nl82NCwuTFNFSF9iZWdpbl9wb2x5MTMwNV9lbWl0X3g4Nl82NAorIF9fXworICRjb2RlLj08PF9fXyBpZiAoJGF2eCk7CisgLkxTRUhfaW5mb19wb2x5MTMwNV9ibG9ja3NfYXZ4XzE6CitAQCAtNDE0OCwxMiArNDI0MCwyNiBAQCAkY29kZS49PDxfX18gaWYgKCRhdng+Mik7CisgX19fCisgfQorIAorK29wZW4gU0VMRiwkMDsKKyt3aGlsZSg8U0VMRj4pIHsKKysJbmV4dCBpZiAoL14jIS8pOworKwlsYXN0IGlmICghcy9eIy9cL1wvLyBhbmQgIS9eJC8pOworKwlwcmludDsKKyt9CisrY2xvc2UgU0VMRjsKKysKKyBmb3JlYWNoIChzcGxpdCgnXG4nLCRjb2RlKSkgeworIAlzL1xgKFteXGBdKilcYC9ldmFsKCQxKS9nZTsKKyAJcy8lcihbYS16XSspI2QvJWUkMS9nOworIAlzLyVyKFswLTldKykjZC8lciQxZC9nOworIAlzLyV4IyVbeXpdLyV4L2cgb3Igcy8leSMlei8leS9nIG9yIHMvJXojJVt5el0vJXovZzsKKyAKKysJaWYgKCRrZXJuZWwpIHsKKysJCXMvKF5cLnR5cGUuKiksWzAtOV0rJC9cMS87CisrCQlzLyheXC50eXBlLiopLFxAYWJpLW9tbmlwb3RlbnQrJC9cMSxcQGZ1bmN0aW9uLzsKKysJCW5leHQgaWYgL15cLmNmaS4qLzsKKysJfQorKworIAlwcmludCAkXywiXG4iOworIH0KKyBjbG9zZSBTVERPVVQ7CistLS0gYS9hcmNoL3g4Ni9jcnlwdG8vcG9seTEzMDVfZ2x1ZS5jCisrKysgYi9hcmNoL3g4Ni9jcnlwdG8vcG9seTEzMDVfZ2x1ZS5jCitAQCAtMSw4ICsxLDYgQEAKKy0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgorKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVAorIC8qCistICogUG9seTEzMDUgYXV0aGVudGljYXRvciBhbGdvcml0aG0sIFJGQzc1MzksIFNJTUQgZ2x1ZSBjb2RlCistICoKKy0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgTWFydGluIFdpbGxpCisrICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICAqLworIAorICNpbmNsdWRlIDxjcnlwdG8vYWxnYXBpLmg+CitAQCAtMTMsMjc5ICsxMSwxNzAgQEAKKyAjaW5jbHVkZSA8bGludXgvanVtcF9sYWJlbC5oPgorICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisrI2luY2x1ZGUgPGFzbS9pbnRlbC1mYW1pbHkuaD4KKyAjaW5jbHVkZSA8YXNtL3NpbWQuaD4KKyAKKy1hc21saW5rYWdlIHZvaWQgcG9seTEzMDVfYmxvY2tfc3NlMih1MzIgKmgsIGNvbnN0IHU4ICpzcmMsCistCQkJCSAgICBjb25zdCB1MzIgKnIsIHVuc2lnbmVkIGludCBibG9ja3MpOworLWFzbWxpbmthZ2Ugdm9pZCBwb2x5MTMwNV8yYmxvY2tfc3NlMih1MzIgKmgsIGNvbnN0IHU4ICpzcmMsIGNvbnN0IHUzMiAqciwKKy0JCQkJICAgICB1bnNpZ25lZCBpbnQgYmxvY2tzLCBjb25zdCB1MzIgKnUpOworLWFzbWxpbmthZ2Ugdm9pZCBwb2x5MTMwNV80YmxvY2tfYXZ4Mih1MzIgKmgsIGNvbnN0IHU4ICpzcmMsIGNvbnN0IHUzMiAqciwKKy0JCQkJICAgICB1bnNpZ25lZCBpbnQgYmxvY2tzLCBjb25zdCB1MzIgKnUpOworK2FzbWxpbmthZ2Ugdm9pZCBwb2x5MTMwNV9pbml0X3g4Nl82NCh2b2lkICpjdHgsCisrCQkJCSAgICAgY29uc3QgdTgga2V5W1BPTFkxMzA1X0tFWV9TSVpFXSk7CisrYXNtbGlua2FnZSB2b2lkIHBvbHkxMzA1X2Jsb2Nrc194ODZfNjQodm9pZCAqY3R4LCBjb25zdCB1OCAqaW5wLAorKwkJCQkgICAgICAgY29uc3Qgc2l6ZV90IGxlbiwgY29uc3QgdTMyIHBhZGJpdCk7CisrYXNtbGlua2FnZSB2b2lkIHBvbHkxMzA1X2VtaXRfeDg2XzY0KHZvaWQgKmN0eCwgdTggbWFjW1BPTFkxMzA1X0RJR0VTVF9TSVpFXSwKKysJCQkJICAgICBjb25zdCB1MzIgbm9uY2VbNF0pOworK2FzbWxpbmthZ2Ugdm9pZCBwb2x5MTMwNV9lbWl0X2F2eCh2b2lkICpjdHgsIHU4IG1hY1tQT0xZMTMwNV9ESUdFU1RfU0laRV0sCisrCQkJCSAgY29uc3QgdTMyIG5vbmNlWzRdKTsKKythc21saW5rYWdlIHZvaWQgcG9seTEzMDVfYmxvY2tzX2F2eCh2b2lkICpjdHgsIGNvbnN0IHU4ICppbnAsIGNvbnN0IHNpemVfdCBsZW4sCisrCQkJCSAgICBjb25zdCB1MzIgcGFkYml0KTsKKythc21saW5rYWdlIHZvaWQgcG9seTEzMDVfYmxvY2tzX2F2eDIodm9pZCAqY3R4LCBjb25zdCB1OCAqaW5wLCBjb25zdCBzaXplX3QgbGVuLAorKwkJCQkgICAgIGNvbnN0IHUzMiBwYWRiaXQpOworK2FzbWxpbmthZ2Ugdm9pZCBwb2x5MTMwNV9ibG9ja3NfYXZ4NTEyKHZvaWQgKmN0eCwgY29uc3QgdTggKmlucCwKKysJCQkJICAgICAgIGNvbnN0IHNpemVfdCBsZW4sIGNvbnN0IHUzMiBwYWRiaXQpOworIAorLXN0YXRpYyBfX3JvX2FmdGVyX2luaXQgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UocG9seTEzMDVfdXNlX3NpbWQpOworK3N0YXRpYyBfX3JvX2FmdGVyX2luaXQgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UocG9seTEzMDVfdXNlX2F2eCk7Cisgc3RhdGljIF9fcm9fYWZ0ZXJfaW5pdCBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShwb2x5MTMwNV91c2VfYXZ4Mik7Cisrc3RhdGljIF9fcm9fYWZ0ZXJfaW5pdCBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShwb2x5MTMwNV91c2VfYXZ4NTEyKTsKKyAKKy1zdGF0aWMgaW5saW5lIHU2NCBtbHQodTY0IGEsIHU2NCBiKQorLXsKKy0JcmV0dXJuIGEgKiBiOworLX0KKy0KKy1zdGF0aWMgaW5saW5lIHUzMiBzcih1NjQgdiwgdV9jaGFyIG4pCisteworLQlyZXR1cm4gdiA+PiBuOworLX0KKy0KKy1zdGF0aWMgaW5saW5lIHUzMiBhbmQodTMyIHYsIHUzMiBtYXNrKQorLXsKKy0JcmV0dXJuIHYgJiBtYXNrOworLX0KKy0KKy1zdGF0aWMgdm9pZCBwb2x5MTMwNV9zaW1kX211bHQodTMyICphLCBjb25zdCB1MzIgKmIpCisteworLQl1OCBtW1BPTFkxMzA1X0JMT0NLX1NJWkVdOworLQorLQltZW1zZXQobSwgMCwgc2l6ZW9mKG0pKTsKKy0JLyogVGhlIHBvbHkxMzA1IGJsb2NrIGZ1bmN0aW9uIGFkZHMgYSBoaS1iaXQgdG8gdGhlIGFjY3VtdWxhdG9yIHdoaWNoCistCSAqIHdlIGRvbid0IG5lZWQgZm9yIGtleSBtdWx0aXBsaWNhdGlvbjsgY29tcGVuc2F0ZSBmb3IgaXQuICovCistCWFbNF0gLT0gMSA8PCAyNDsKKy0JcG9seTEzMDVfYmxvY2tfc3NlMihhLCBtLCBiLCAxKTsKKy19CistCistc3RhdGljIHZvaWQgcG9seTEzMDVfaW50ZWdlcl9zZXRrZXkoc3RydWN0IHBvbHkxMzA1X2tleSAqa2V5LCBjb25zdCB1OCAqcmF3X2tleSkKKy17CistCS8qIHIgJj0gMHhmZmZmZmZjMGZmZmZmZmMwZmZmZmZmYzBmZmZmZmZmICovCistCWtleS0+clswXSA9IChnZXRfdW5hbGlnbmVkX2xlMzIocmF3X2tleSArICAwKSA+PiAwKSAmIDB4M2ZmZmZmZjsKKy0Ja2V5LT5yWzFdID0gKGdldF91bmFsaWduZWRfbGUzMihyYXdfa2V5ICsgIDMpID4+IDIpICYgMHgzZmZmZjAzOworLQlrZXktPnJbMl0gPSAoZ2V0X3VuYWxpZ25lZF9sZTMyKHJhd19rZXkgKyAgNikgPj4gNCkgJiAweDNmZmMwZmY7CistCWtleS0+clszXSA9IChnZXRfdW5hbGlnbmVkX2xlMzIocmF3X2tleSArICA5KSA+PiA2KSAmIDB4M2YwM2ZmZjsKKy0Ja2V5LT5yWzRdID0gKGdldF91bmFsaWduZWRfbGUzMihyYXdfa2V5ICsgMTIpID4+IDgpICYgMHgwMGZmZmZmOworLX0KKytzdHJ1Y3QgcG9seTEzMDVfYXJjaF9pbnRlcm5hbCB7CisrCXVuaW9uIHsKKysJCXN0cnVjdCB7CisrCQkJdTMyIGhbNV07CisrCQkJdTMyIGlzX2Jhc2UyXzI2OworKwkJfTsKKysJCXU2NCBoc1szXTsKKysJfTsKKysJdTY0IHJbMl07CisrCXU2NCBwYWQ7CisrCXN0cnVjdCB7IHUzMiByMiwgcjEsIHI0LCByMzsgfSBybls5XTsKKyt9OworIAorLXN0YXRpYyB2b2lkIHBvbHkxMzA1X2ludGVnZXJfYmxvY2tzKHN0cnVjdCBwb2x5MTMwNV9zdGF0ZSAqc3RhdGUsCistCQkJCSAgICBjb25zdCBzdHJ1Y3QgcG9seTEzMDVfa2V5ICprZXksCistCQkJCSAgICBjb25zdCB2b2lkICpzcmMsCistCQkJCSAgICB1bnNpZ25lZCBpbnQgbmJsb2NrcywgdTMyIGhpYml0KQorKy8qIFRoZSBBVlggY29kZSB1c2VzIGJhc2UgMl4yNiwgd2hpbGUgdGhlIHNjYWxhciBjb2RlIHVzZXMgYmFzZSAyXjY0LiBJZiB3ZSBoaXQKKysgKiB0aGUgdW5mb3J0dW5hdGUgc2l0dWF0aW9uIG9mIHVzaW5nIEFWWCBhbmQgdGhlbiBoYXZpbmcgdG8gZ28gYmFjayB0byBzY2FsYXIKKysgKiAtLSBiZWNhdXNlIHRoZSB1c2VyIGlzIHNpbGx5IGFuZCBoYXMgY2FsbGVkIHRoZSB1cGRhdGUgZnVuY3Rpb24gZnJvbSB0d28KKysgKiBzZXBhcmF0ZSBjb250ZXh0cyAtLSB0aGVuIHdlIG5lZWQgdG8gY29udmVydCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBiYXNlIGJlZm9yZQorKyAqIHByb2NlZWRpbmcuIEl0IGlzIHBvc3NpYmxlIHRvIHJlYXNvbiB0aGF0IHRoZSBpbml0aWFsIHJlZHVjdGlvbiBiZWxvdyBpcworKyAqIHN1ZmZpY2llbnQgZ2l2ZW4gdGhlIGltcGxlbWVudGF0aW9uIGludmFyaWFudHMuIEhvd2V2ZXIsIGZvciBhbiBhdm9pZGFuY2Ugb2YKKysgKiBkb3VidCBhbmQgYmVjYXVzZSB0aGlzIGlzIG5vdCBwZXJmb3JtYW5jZSBjcml0aWNhbCwgd2UgZG8gdGhlIGZ1bGwgcmVkdWN0aW9uCisrICogYW55d2F5LiBaMyBwcm9vZiBvZiBiZWxvdyBmdW5jdGlvbjogaHR0cHM6Ly94bi0tNGRiLmNjL2x0UHRIQ0tOL3B5CisrICovCisrc3RhdGljIHZvaWQgY29udmVydF90b19iYXNlMl82NCh2b2lkICpjdHgpCisgeworLQl1MzIgcjAsIHIxLCByMiwgcjMsIHI0OworLQl1MzIgczEsIHMyLCBzMywgczQ7CistCXUzMiBoMCwgaDEsIGgyLCBoMywgaDQ7CistCXU2NCBkMCwgZDEsIGQyLCBkMywgZDQ7CisrCXN0cnVjdCBwb2x5MTMwNV9hcmNoX2ludGVybmFsICpzdGF0ZSA9IGN0eDsKKysJdTMyIGN5OworIAorLQlpZiAoIW5ibG9ja3MpCisrCWlmICghc3RhdGUtPmlzX2Jhc2UyXzI2KQorIAkJcmV0dXJuOworIAorLQlyMCA9IGtleS0+clswXTsKKy0JcjEgPSBrZXktPnJbMV07CistCXIyID0ga2V5LT5yWzJdOworLQlyMyA9IGtleS0+clszXTsKKy0JcjQgPSBrZXktPnJbNF07CistCistCXMxID0gcjEgKiA1OworLQlzMiA9IHIyICogNTsKKy0JczMgPSByMyAqIDU7CistCXM0ID0gcjQgKiA1OworLQorLQloMCA9IHN0YXRlLT5oWzBdOworLQloMSA9IHN0YXRlLT5oWzFdOworLQloMiA9IHN0YXRlLT5oWzJdOworLQloMyA9IHN0YXRlLT5oWzNdOworLQloNCA9IHN0YXRlLT5oWzRdOworLQorLQlkbyB7CistCQkvKiBoICs9IG1baV0gKi8KKy0JCWgwICs9IChnZXRfdW5hbGlnbmVkX2xlMzIoc3JjICsgIDApID4+IDApICYgMHgzZmZmZmZmOworLQkJaDEgKz0gKGdldF91bmFsaWduZWRfbGUzMihzcmMgKyAgMykgPj4gMikgJiAweDNmZmZmZmY7CistCQloMiArPSAoZ2V0X3VuYWxpZ25lZF9sZTMyKHNyYyArICA2KSA+PiA0KSAmIDB4M2ZmZmZmZjsKKy0JCWgzICs9IChnZXRfdW5hbGlnbmVkX2xlMzIoc3JjICsgIDkpID4+IDYpICYgMHgzZmZmZmZmOworLQkJaDQgKz0gKGdldF91bmFsaWduZWRfbGUzMihzcmMgKyAxMikgPj4gOCkgfCAoaGliaXQgPDwgMjQpOworLQorLQkJLyogaCAqPSByICovCistCQlkMCA9IG1sdChoMCwgcjApICsgbWx0KGgxLCBzNCkgKyBtbHQoaDIsIHMzKSArCistCQkgICAgIG1sdChoMywgczIpICsgbWx0KGg0LCBzMSk7CistCQlkMSA9IG1sdChoMCwgcjEpICsgbWx0KGgxLCByMCkgKyBtbHQoaDIsIHM0KSArCistCQkgICAgIG1sdChoMywgczMpICsgbWx0KGg0LCBzMik7CistCQlkMiA9IG1sdChoMCwgcjIpICsgbWx0KGgxLCByMSkgKyBtbHQoaDIsIHIwKSArCistCQkgICAgIG1sdChoMywgczQpICsgbWx0KGg0LCBzMyk7CistCQlkMyA9IG1sdChoMCwgcjMpICsgbWx0KGgxLCByMikgKyBtbHQoaDIsIHIxKSArCistCQkgICAgIG1sdChoMywgcjApICsgbWx0KGg0LCBzNCk7CistCQlkNCA9IG1sdChoMCwgcjQpICsgbWx0KGgxLCByMykgKyBtbHQoaDIsIHIyKSArCistCQkgICAgIG1sdChoMywgcjEpICsgbWx0KGg0LCByMCk7CistCistCQkvKiAocGFydGlhbCkgaCAlPSBwICovCistCQlkMSArPSBzcihkMCwgMjYpOyAgICAgaDAgPSBhbmQoZDAsIDB4M2ZmZmZmZik7CistCQlkMiArPSBzcihkMSwgMjYpOyAgICAgaDEgPSBhbmQoZDEsIDB4M2ZmZmZmZik7CistCQlkMyArPSBzcihkMiwgMjYpOyAgICAgaDIgPSBhbmQoZDIsIDB4M2ZmZmZmZik7CistCQlkNCArPSBzcihkMywgMjYpOyAgICAgaDMgPSBhbmQoZDMsIDB4M2ZmZmZmZik7CistCQloMCArPSBzcihkNCwgMjYpICogNTsgaDQgPSBhbmQoZDQsIDB4M2ZmZmZmZik7CistCQloMSArPSBoMCA+PiAyNjsgICAgICAgaDAgPSBoMCAmIDB4M2ZmZmZmZjsKKy0KKy0JCXNyYyArPSBQT0xZMTMwNV9CTE9DS19TSVpFOworLQl9IHdoaWxlICgtLW5ibG9ja3MpOworLQorLQlzdGF0ZS0+aFswXSA9IGgwOworLQlzdGF0ZS0+aFsxXSA9IGgxOworLQlzdGF0ZS0+aFsyXSA9IGgyOworLQlzdGF0ZS0+aFszXSA9IGgzOworLQlzdGF0ZS0+aFs0XSA9IGg0OworLX0KKy0KKy1zdGF0aWMgdm9pZCBwb2x5MTMwNV9pbnRlZ2VyX2VtaXQoY29uc3Qgc3RydWN0IHBvbHkxMzA1X3N0YXRlICpzdGF0ZSwgdm9pZCAqZHN0KQorLXsKKy0JdTMyIGgwLCBoMSwgaDIsIGgzLCBoNDsKKy0JdTMyIGcwLCBnMSwgZzIsIGczLCBnNDsKKy0JdTMyIG1hc2s7CistCistCS8qIGZ1bGx5IGNhcnJ5IGggKi8KKy0JaDAgPSBzdGF0ZS0+aFswXTsKKy0JaDEgPSBzdGF0ZS0+aFsxXTsKKy0JaDIgPSBzdGF0ZS0+aFsyXTsKKy0JaDMgPSBzdGF0ZS0+aFszXTsKKy0JaDQgPSBzdGF0ZS0+aFs0XTsKKy0KKy0JaDIgKz0gKGgxID4+IDI2KTsgICAgIGgxID0gaDEgJiAweDNmZmZmZmY7CistCWgzICs9IChoMiA+PiAyNik7ICAgICBoMiA9IGgyICYgMHgzZmZmZmZmOworLQloNCArPSAoaDMgPj4gMjYpOyAgICAgaDMgPSBoMyAmIDB4M2ZmZmZmZjsKKy0JaDAgKz0gKGg0ID4+IDI2KSAqIDU7IGg0ID0gaDQgJiAweDNmZmZmZmY7CistCWgxICs9IChoMCA+PiAyNik7ICAgICBoMCA9IGgwICYgMHgzZmZmZmZmOworLQorLQkvKiBjb21wdXRlIGggKyAtcCAqLworLQlnMCA9IGgwICsgNTsKKy0JZzEgPSBoMSArIChnMCA+PiAyNik7ICAgICAgICAgICAgIGcwICY9IDB4M2ZmZmZmZjsKKy0JZzIgPSBoMiArIChnMSA+PiAyNik7ICAgICAgICAgICAgIGcxICY9IDB4M2ZmZmZmZjsKKy0JZzMgPSBoMyArIChnMiA+PiAyNik7ICAgICAgICAgICAgIGcyICY9IDB4M2ZmZmZmZjsKKy0JZzQgPSBoNCArIChnMyA+PiAyNikgLSAoMSA8PCAyNik7IGczICY9IDB4M2ZmZmZmZjsKKy0KKy0JLyogc2VsZWN0IGggaWYgaCA8IHAsIG9yIGggKyAtcCBpZiBoID49IHAgKi8KKy0JbWFzayA9IChnNCA+PiAoKHNpemVvZih1MzIpICogOCkgLSAxKSkgLSAxOworLQlnMCAmPSBtYXNrOworLQlnMSAmPSBtYXNrOworLQlnMiAmPSBtYXNrOworLQlnMyAmPSBtYXNrOworLQlnNCAmPSBtYXNrOworLQltYXNrID0gfm1hc2s7CistCWgwID0gKGgwICYgbWFzaykgfCBnMDsKKy0JaDEgPSAoaDEgJiBtYXNrKSB8IGcxOworLQloMiA9IChoMiAmIG1hc2spIHwgZzI7CistCWgzID0gKGgzICYgbWFzaykgfCBnMzsKKy0JaDQgPSAoaDQgJiBtYXNrKSB8IGc0OworLQorLQkvKiBoID0gaCAlICgyXjEyOCkgKi8KKy0JcHV0X3VuYWxpZ25lZF9sZTMyKChoMCA+PiAgMCkgfCAoaDEgPDwgMjYpLCBkc3QgKyAgMCk7CistCXB1dF91bmFsaWduZWRfbGUzMigoaDEgPj4gIDYpIHwgKGgyIDw8IDIwKSwgZHN0ICsgIDQpOworLQlwdXRfdW5hbGlnbmVkX2xlMzIoKGgyID4+IDEyKSB8IChoMyA8PCAxNCksIGRzdCArICA4KTsKKy0JcHV0X3VuYWxpZ25lZF9sZTMyKChoMyA+PiAxOCkgfCAoaDQgPDwgIDgpLCBkc3QgKyAxMik7CistfQorLQorLXZvaWQgcG9seTEzMDVfaW5pdF9hcmNoKHN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCAqZGVzYywgY29uc3QgdTggKmtleSkKKy17CistCXBvbHkxMzA1X2ludGVnZXJfc2V0a2V5KGRlc2MtPm9wYXF1ZV9yLCBrZXkpOworLQlkZXNjLT5zWzBdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGtleSArIDE2KTsKKy0JZGVzYy0+c1sxXSA9IGdldF91bmFsaWduZWRfbGUzMihrZXkgKyAyMCk7CistCWRlc2MtPnNbMl0gPSBnZXRfdW5hbGlnbmVkX2xlMzIoa2V5ICsgMjQpOworLQlkZXNjLT5zWzNdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGtleSArIDI4KTsKKy0JcG9seTEzMDVfY29yZV9pbml0KCZkZXNjLT5oKTsKKy0JZGVzYy0+YnVmbGVuID0gMDsKKy0JZGVzYy0+c3NldCA9IHRydWU7CistCWRlc2MtPnJzZXQgPSAxOworLX0KKy1FWFBPUlRfU1lNQk9MX0dQTChwb2x5MTMwNV9pbml0X2FyY2gpOworLQorLXN0YXRpYyB1bnNpZ25lZCBpbnQgY3J5cHRvX3BvbHkxMzA1X3NldGRlc2NrZXkoc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4ICpkY3R4LAorLQkJCQkJICAgICAgIGNvbnN0IHU4ICpzcmMsIHVuc2lnbmVkIGludCBzcmNsZW4pCisteworLQlpZiAoIWRjdHgtPnNzZXQpIHsKKy0JCWlmICghZGN0eC0+cnNldCAmJiBzcmNsZW4gPj0gUE9MWTEzMDVfQkxPQ0tfU0laRSkgeworLQkJCXBvbHkxMzA1X2ludGVnZXJfc2V0a2V5KGRjdHgtPnIsIHNyYyk7CistCQkJc3JjICs9IFBPTFkxMzA1X0JMT0NLX1NJWkU7CistCQkJc3JjbGVuIC09IFBPTFkxMzA1X0JMT0NLX1NJWkU7CistCQkJZGN0eC0+cnNldCA9IDE7CistCQl9CistCQlpZiAoc3JjbGVuID49IFBPTFkxMzA1X0JMT0NLX1NJWkUpIHsKKy0JCQlkY3R4LT5zWzBdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNyYyArICAwKTsKKy0JCQlkY3R4LT5zWzFdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNyYyArICA0KTsKKy0JCQlkY3R4LT5zWzJdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNyYyArICA4KTsKKy0JCQlkY3R4LT5zWzNdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHNyYyArIDEyKTsKKy0JCQlzcmMgKz0gUE9MWTEzMDVfQkxPQ0tfU0laRTsKKy0JCQlzcmNsZW4gLT0gUE9MWTEzMDVfQkxPQ0tfU0laRTsKKy0JCQlkY3R4LT5zc2V0ID0gdHJ1ZTsKKy0JCX0KKysJY3kgPSBzdGF0ZS0+aFswXSA+PiAyNjsgc3RhdGUtPmhbMF0gJj0gMHgzZmZmZmZmOyBzdGF0ZS0+aFsxXSArPSBjeTsKKysJY3kgPSBzdGF0ZS0+aFsxXSA+PiAyNjsgc3RhdGUtPmhbMV0gJj0gMHgzZmZmZmZmOyBzdGF0ZS0+aFsyXSArPSBjeTsKKysJY3kgPSBzdGF0ZS0+aFsyXSA+PiAyNjsgc3RhdGUtPmhbMl0gJj0gMHgzZmZmZmZmOyBzdGF0ZS0+aFszXSArPSBjeTsKKysJY3kgPSBzdGF0ZS0+aFszXSA+PiAyNjsgc3RhdGUtPmhbM10gJj0gMHgzZmZmZmZmOyBzdGF0ZS0+aFs0XSArPSBjeTsKKysJc3RhdGUtPmhzWzBdID0gKCh1NjQpc3RhdGUtPmhbMl0gPDwgNTIpIHwgKCh1NjQpc3RhdGUtPmhbMV0gPDwgMjYpIHwgc3RhdGUtPmhbMF07CisrCXN0YXRlLT5oc1sxXSA9ICgodTY0KXN0YXRlLT5oWzRdIDw8IDQwKSB8ICgodTY0KXN0YXRlLT5oWzNdIDw8IDE0KSB8IChzdGF0ZS0+aFsyXSA+PiAxMik7CisrCXN0YXRlLT5oc1syXSA9IHN0YXRlLT5oWzRdID4+IDI0OworKyNkZWZpbmUgVUxUKGEsIGIpICgoYSBeICgoYSBeIGIpIHwgKChhIC0gYikgXiBiKSkpID4+IChzaXplb2YoYSkgKiA4IC0gMSkpCisrCWN5ID0gKHN0YXRlLT5oc1syXSA+PiAyKSArIChzdGF0ZS0+aHNbMl0gJiB+M1VMTCk7CisrCXN0YXRlLT5oc1syXSAmPSAzOworKwlzdGF0ZS0+aHNbMF0gKz0gY3k7CisrCXN0YXRlLT5oc1sxXSArPSAoY3kgPSBVTFQoc3RhdGUtPmhzWzBdLCBjeSkpOworKwlzdGF0ZS0+aHNbMl0gKz0gVUxUKHN0YXRlLT5oc1sxXSwgY3kpOworKyN1bmRlZiBVTFQKKysJc3RhdGUtPmlzX2Jhc2UyXzI2ID0gMDsKKyt9CisrCisrc3RhdGljIHZvaWQgcG9seTEzMDVfc2ltZF9pbml0KHZvaWQgKmN0eCwgY29uc3QgdTgga2V5W1BPTFkxMzA1X0tFWV9TSVpFXSkKKyt7CisrCXBvbHkxMzA1X2luaXRfeDg2XzY0KGN0eCwga2V5KTsKKyt9CisrCisrc3RhdGljIHZvaWQgcG9seTEzMDVfc2ltZF9ibG9ja3Modm9pZCAqY3R4LCBjb25zdCB1OCAqaW5wLCBzaXplX3QgbGVuLAorKwkJCQkgY29uc3QgdTMyIHBhZGJpdCkKKyt7CisrCXN0cnVjdCBwb2x5MTMwNV9hcmNoX2ludGVybmFsICpzdGF0ZSA9IGN0eDsKKysKKysJLyogU0lNRCBkaXNhYmxlcyBwcmVlbXB0aW9uLCBzbyByZWxheCBhZnRlciBwcm9jZXNzaW5nIGVhY2ggcGFnZS4gKi8KKysJQlVJTERfQlVHX09OKFBBR0VfU0laRSA8IFBPTFkxMzA1X0JMT0NLX1NJWkUgfHwKKysJCSAgICAgUEFHRV9TSVpFICUgUE9MWTEzMDVfQkxPQ0tfU0laRSk7CisrCisrCWlmICghSVNfRU5BQkxFRChDT05GSUdfQVNfQVZYKSB8fCAhc3RhdGljX2JyYW5jaF9saWtlbHkoJnBvbHkxMzA1X3VzZV9hdngpIHx8CisrCSAgICAobGVuIDwgKFBPTFkxMzA1X0JMT0NLX1NJWkUgKiAxOCkgJiYgIXN0YXRlLT5pc19iYXNlMl8yNikgfHwKKysJICAgICFjcnlwdG9fc2ltZF91c2FibGUoKSkgeworKwkJY29udmVydF90b19iYXNlMl82NChjdHgpOworKwkJcG9seTEzMDVfYmxvY2tzX3g4Nl82NChjdHgsIGlucCwgbGVuLCBwYWRiaXQpOworKwkJcmV0dXJuOworIAl9CistCXJldHVybiBzcmNsZW47CistfQorIAorLXN0YXRpYyB1bnNpZ25lZCBpbnQgcG9seTEzMDVfc2NhbGFyX2Jsb2NrcyhzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRjdHgsCistCQkJCQkgICBjb25zdCB1OCAqc3JjLCB1bnNpZ25lZCBpbnQgc3JjbGVuKQorLXsKKy0JdW5zaWduZWQgaW50IGRhdGFsZW47CisrCWZvciAoOzspIHsKKysJCWNvbnN0IHNpemVfdCBieXRlcyA9IG1pbl90KHNpemVfdCwgbGVuLCBQQUdFX1NJWkUpOworIAorLQlpZiAodW5saWtlbHkoIWRjdHgtPnNzZXQpKSB7CistCQlkYXRhbGVuID0gY3J5cHRvX3BvbHkxMzA1X3NldGRlc2NrZXkoZGN0eCwgc3JjLCBzcmNsZW4pOworLQkJc3JjICs9IHNyY2xlbiAtIGRhdGFsZW47CistCQlzcmNsZW4gPSBkYXRhbGVuOworLQl9CistCWlmIChzcmNsZW4gPj0gUE9MWTEzMDVfQkxPQ0tfU0laRSkgeworLQkJcG9seTEzMDVfaW50ZWdlcl9ibG9ja3MoJmRjdHgtPmgsIGRjdHgtPm9wYXF1ZV9yLCBzcmMsCistCQkJCQlzcmNsZW4gLyBQT0xZMTMwNV9CTE9DS19TSVpFLCAxKTsKKy0JCXNyY2xlbiAlPSBQT0xZMTMwNV9CTE9DS19TSVpFOworKwkJa2VybmVsX2ZwdV9iZWdpbigpOworKwkJaWYgKElTX0VOQUJMRUQoQ09ORklHX0FTX0FWWDUxMikgJiYgc3RhdGljX2JyYW5jaF9saWtlbHkoJnBvbHkxMzA1X3VzZV9hdng1MTIpKQorKwkJCXBvbHkxMzA1X2Jsb2Nrc19hdng1MTIoY3R4LCBpbnAsIGJ5dGVzLCBwYWRiaXQpOworKwkJZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfQVNfQVZYMikgJiYgc3RhdGljX2JyYW5jaF9saWtlbHkoJnBvbHkxMzA1X3VzZV9hdngyKSkKKysJCQlwb2x5MTMwNV9ibG9ja3NfYXZ4MihjdHgsIGlucCwgYnl0ZXMsIHBhZGJpdCk7CisrCQllbHNlCisrCQkJcG9seTEzMDVfYmxvY2tzX2F2eChjdHgsIGlucCwgYnl0ZXMsIHBhZGJpdCk7CisrCQlrZXJuZWxfZnB1X2VuZCgpOworKwkJbGVuIC09IGJ5dGVzOworKwkJaWYgKCFsZW4pCisrCQkJYnJlYWs7CisrCQlpbnAgKz0gYnl0ZXM7CisgCX0KKy0JcmV0dXJuIHNyY2xlbjsKKyB9CisgCistc3RhdGljIHVuc2lnbmVkIGludCBwb2x5MTMwNV9zaW1kX2Jsb2NrcyhzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRjdHgsCistCQkJCQkgY29uc3QgdTggKnNyYywgdW5zaWduZWQgaW50IHNyY2xlbikKKy17CistCXVuc2lnbmVkIGludCBibG9ja3MsIGRhdGFsZW47Cisrc3RhdGljIHZvaWQgcG9seTEzMDVfc2ltZF9lbWl0KHZvaWQgKmN0eCwgdTggbWFjW1BPTFkxMzA1X0RJR0VTVF9TSVpFXSwKKysJCQkgICAgICAgY29uc3QgdTMyIG5vbmNlWzRdKQorK3sKKysJc3RydWN0IHBvbHkxMzA1X2FyY2hfaW50ZXJuYWwgKnN0YXRlID0gY3R4OworKworKwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0FTX0FWWCkgfHwgIXN0YXRpY19icmFuY2hfbGlrZWx5KCZwb2x5MTMwNV91c2VfYXZ4KSB8fAorKwkgICAgIXN0YXRlLT5pc19iYXNlMl8yNiB8fCAhY3J5cHRvX3NpbWRfdXNhYmxlKCkpIHsKKysJCWNvbnZlcnRfdG9fYmFzZTJfNjQoY3R4KTsKKysJCXBvbHkxMzA1X2VtaXRfeDg2XzY0KGN0eCwgbWFjLCBub25jZSk7CisrCX0gZWxzZQorKwkJcG9seTEzMDVfZW1pdF9hdngoY3R4LCBtYWMsIG5vbmNlKTsKKyt9CisrCisrdm9pZCBwb2x5MTMwNV9pbml0X2FyY2goc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4ICpkY3R4LCBjb25zdCB1OCAqa2V5KQorK3sKKysJcG9seTEzMDVfc2ltZF9pbml0KCZkY3R4LT5oLCBrZXkpOworKwlkY3R4LT5zWzBdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKCZrZXlbMTZdKTsKKysJZGN0eC0+c1sxXSA9IGdldF91bmFsaWduZWRfbGUzMigma2V5WzIwXSk7CisrCWRjdHgtPnNbMl0gPSBnZXRfdW5hbGlnbmVkX2xlMzIoJmtleVsyNF0pOworKwlkY3R4LT5zWzNdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKCZrZXlbMjhdKTsKKysJZGN0eC0+YnVmbGVuID0gMDsKKysJZGN0eC0+c3NldCA9IHRydWU7CisrfQorK0VYUE9SVF9TWU1CT0wocG9seTEzMDVfaW5pdF9hcmNoKTsKKyAKKytzdGF0aWMgdW5zaWduZWQgaW50IGNyeXB0b19wb2x5MTMwNV9zZXRkY3R4a2V5KHN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCAqZGN0eCwKKysJCQkJCSAgICAgICBjb25zdCB1OCAqaW5wLCB1bnNpZ25lZCBpbnQgbGVuKQorK3sKKysJdW5zaWduZWQgaW50IGFjYyA9IDA7CisgCWlmICh1bmxpa2VseSghZGN0eC0+c3NldCkpIHsKKy0JCWRhdGFsZW4gPSBjcnlwdG9fcG9seTEzMDVfc2V0ZGVzY2tleShkY3R4LCBzcmMsIHNyY2xlbik7CistCQlzcmMgKz0gc3JjbGVuIC0gZGF0YWxlbjsKKy0JCXNyY2xlbiA9IGRhdGFsZW47CistCX0KKy0KKy0JaWYgKElTX0VOQUJMRUQoQ09ORklHX0FTX0FWWDIpICYmCistCSAgICBzdGF0aWNfYnJhbmNoX2xpa2VseSgmcG9seTEzMDVfdXNlX2F2eDIpICYmCistCSAgICBzcmNsZW4gPj0gUE9MWTEzMDVfQkxPQ0tfU0laRSAqIDQpIHsKKy0JCWlmICh1bmxpa2VseShkY3R4LT5yc2V0IDwgNCkpIHsKKy0JCQlpZiAoZGN0eC0+cnNldCA8IDIpIHsKKy0JCQkJZGN0eC0+clsxXSA9IGRjdHgtPnJbMF07CistCQkJCXBvbHkxMzA1X3NpbWRfbXVsdChkY3R4LT5yWzFdLnIsIGRjdHgtPnJbMF0ucik7CistCQkJfQorLQkJCWRjdHgtPnJbMl0gPSBkY3R4LT5yWzFdOworLQkJCXBvbHkxMzA1X3NpbWRfbXVsdChkY3R4LT5yWzJdLnIsIGRjdHgtPnJbMF0ucik7CistCQkJZGN0eC0+clszXSA9IGRjdHgtPnJbMl07CistCQkJcG9seTEzMDVfc2ltZF9tdWx0KGRjdHgtPnJbM10uciwgZGN0eC0+clswXS5yKTsKKy0JCQlkY3R4LT5yc2V0ID0gNDsKKysJCWlmICghZGN0eC0+cnNldCAmJiBsZW4gPj0gUE9MWTEzMDVfQkxPQ0tfU0laRSkgeworKwkJCXBvbHkxMzA1X3NpbWRfaW5pdCgmZGN0eC0+aCwgaW5wKTsKKysJCQlpbnAgKz0gUE9MWTEzMDVfQkxPQ0tfU0laRTsKKysJCQlsZW4gLT0gUE9MWTEzMDVfQkxPQ0tfU0laRTsKKysJCQlhY2MgKz0gUE9MWTEzMDVfQkxPQ0tfU0laRTsKKysJCQlkY3R4LT5yc2V0ID0gMTsKKyAJCX0KKy0JCWJsb2NrcyA9IHNyY2xlbiAvIChQT0xZMTMwNV9CTE9DS19TSVpFICogNCk7CistCQlwb2x5MTMwNV80YmxvY2tfYXZ4MihkY3R4LT5oLmgsIHNyYywgZGN0eC0+clswXS5yLCBibG9ja3MsCistCQkJCSAgICAgZGN0eC0+clsxXS5yKTsKKy0JCXNyYyArPSBQT0xZMTMwNV9CTE9DS19TSVpFICogNCAqIGJsb2NrczsKKy0JCXNyY2xlbiAtPSBQT0xZMTMwNV9CTE9DS19TSVpFICogNCAqIGJsb2NrczsKKy0JfQorLQorLQlpZiAobGlrZWx5KHNyY2xlbiA+PSBQT0xZMTMwNV9CTE9DS19TSVpFICogMikpIHsKKy0JCWlmICh1bmxpa2VseShkY3R4LT5yc2V0IDwgMikpIHsKKy0JCQlkY3R4LT5yWzFdID0gZGN0eC0+clswXTsKKy0JCQlwb2x5MTMwNV9zaW1kX211bHQoZGN0eC0+clsxXS5yLCBkY3R4LT5yWzBdLnIpOworLQkJCWRjdHgtPnJzZXQgPSAyOworKwkJaWYgKGxlbiA+PSBQT0xZMTMwNV9CTE9DS19TSVpFKSB7CisrCQkJZGN0eC0+c1swXSA9IGdldF91bmFsaWduZWRfbGUzMigmaW5wWzBdKTsKKysJCQlkY3R4LT5zWzFdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKCZpbnBbNF0pOworKwkJCWRjdHgtPnNbMl0gPSBnZXRfdW5hbGlnbmVkX2xlMzIoJmlucFs4XSk7CisrCQkJZGN0eC0+c1szXSA9IGdldF91bmFsaWduZWRfbGUzMigmaW5wWzEyXSk7CisrCQkJaW5wICs9IFBPTFkxMzA1X0JMT0NLX1NJWkU7CisrCQkJbGVuIC09IFBPTFkxMzA1X0JMT0NLX1NJWkU7CisrCQkJYWNjICs9IFBPTFkxMzA1X0JMT0NLX1NJWkU7CisrCQkJZGN0eC0+c3NldCA9IHRydWU7CisgCQl9CistCQlibG9ja3MgPSBzcmNsZW4gLyAoUE9MWTEzMDVfQkxPQ0tfU0laRSAqIDIpOworLQkJcG9seTEzMDVfMmJsb2NrX3NzZTIoZGN0eC0+aC5oLCBzcmMsIGRjdHgtPnJbMF0uciwKKy0JCQkJICAgICBibG9ja3MsIGRjdHgtPnJbMV0ucik7CistCQlzcmMgKz0gUE9MWTEzMDVfQkxPQ0tfU0laRSAqIDIgKiBibG9ja3M7CistCQlzcmNsZW4gLT0gUE9MWTEzMDVfQkxPQ0tfU0laRSAqIDIgKiBibG9ja3M7CistCX0KKy0JaWYgKHNyY2xlbiA+PSBQT0xZMTMwNV9CTE9DS19TSVpFKSB7CistCQlwb2x5MTMwNV9ibG9ja19zc2UyKGRjdHgtPmguaCwgc3JjLCBkY3R4LT5yWzBdLnIsIDEpOworLQkJc3JjbGVuIC09IFBPTFkxMzA1X0JMT0NLX1NJWkU7CisgCX0KKy0JcmV0dXJuIHNyY2xlbjsKKysJcmV0dXJuIGFjYzsKKyB9CisgCisgdm9pZCBwb2x5MTMwNV91cGRhdGVfYXJjaChzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRjdHgsIGNvbnN0IHU4ICpzcmMsCisgCQkJICB1bnNpZ25lZCBpbnQgc3JjbGVuKQorIHsKKy0JdW5zaWduZWQgaW50IGJ5dGVzOworKwl1bnNpZ25lZCBpbnQgYnl0ZXMsIHVzZWQ7CisgCisgCWlmICh1bmxpa2VseShkY3R4LT5idWZsZW4pKSB7CisgCQlieXRlcyA9IG1pbihzcmNsZW4sIFBPTFkxMzA1X0JMT0NLX1NJWkUgLSBkY3R4LT5idWZsZW4pOworQEAgLTI5NSwzMSArMTg0LDE5IEBAIHZvaWQgcG9seTEzMDVfdXBkYXRlX2FyY2goc3RydWN0IHBvbHkxMzAKKyAJCWRjdHgtPmJ1ZmxlbiArPSBieXRlczsKKyAKKyAJCWlmIChkY3R4LT5idWZsZW4gPT0gUE9MWTEzMDVfQkxPQ0tfU0laRSkgeworLQkJCWlmIChzdGF0aWNfYnJhbmNoX2xpa2VseSgmcG9seTEzMDVfdXNlX3NpbWQpICYmCistCQkJICAgIGxpa2VseShjcnlwdG9fc2ltZF91c2FibGUoKSkpIHsKKy0JCQkJa2VybmVsX2ZwdV9iZWdpbigpOworLQkJCQlwb2x5MTMwNV9zaW1kX2Jsb2NrcyhkY3R4LCBkY3R4LT5idWYsCistCQkJCQkJICAgICBQT0xZMTMwNV9CTE9DS19TSVpFKTsKKy0JCQkJa2VybmVsX2ZwdV9lbmQoKTsKKy0JCQl9IGVsc2UgeworLQkJCQlwb2x5MTMwNV9zY2FsYXJfYmxvY2tzKGRjdHgsIGRjdHgtPmJ1ZiwKKy0JCQkJCQkgICAgICAgUE9MWTEzMDVfQkxPQ0tfU0laRSk7CistCQkJfQorKwkJCWlmIChsaWtlbHkoIWNyeXB0b19wb2x5MTMwNV9zZXRkY3R4a2V5KGRjdHgsIGRjdHgtPmJ1ZiwgUE9MWTEzMDVfQkxPQ0tfU0laRSkpKQorKwkJCQlwb2x5MTMwNV9zaW1kX2Jsb2NrcygmZGN0eC0+aCwgZGN0eC0+YnVmLCBQT0xZMTMwNV9CTE9DS19TSVpFLCAxKTsKKyAJCQlkY3R4LT5idWZsZW4gPSAwOworIAkJfQorIAl9CisgCisgCWlmIChsaWtlbHkoc3JjbGVuID49IFBPTFkxMzA1X0JMT0NLX1NJWkUpKSB7CistCQlpZiAoc3RhdGljX2JyYW5jaF9saWtlbHkoJnBvbHkxMzA1X3VzZV9zaW1kKSAmJgorLQkJICAgIGxpa2VseShjcnlwdG9fc2ltZF91c2FibGUoKSkpIHsKKy0JCQlrZXJuZWxfZnB1X2JlZ2luKCk7CistCQkJYnl0ZXMgPSBwb2x5MTMwNV9zaW1kX2Jsb2NrcyhkY3R4LCBzcmMsIHNyY2xlbik7CistCQkJa2VybmVsX2ZwdV9lbmQoKTsKKy0JCX0gZWxzZSB7CistCQkJYnl0ZXMgPSBwb2x5MTMwNV9zY2FsYXJfYmxvY2tzKGRjdHgsIHNyYywgc3JjbGVuKTsKKy0JCX0KKy0JCXNyYyArPSBzcmNsZW4gLSBieXRlczsKKy0JCXNyY2xlbiA9IGJ5dGVzOworKwkJYnl0ZXMgPSByb3VuZF9kb3duKHNyY2xlbiwgUE9MWTEzMDVfQkxPQ0tfU0laRSk7CisrCQlzcmNsZW4gLT0gYnl0ZXM7CisrCQl1c2VkID0gY3J5cHRvX3BvbHkxMzA1X3NldGRjdHhrZXkoZGN0eCwgc3JjLCBieXRlcyk7CisrCQlpZiAobGlrZWx5KGJ5dGVzIC0gdXNlZCkpCisrCQkJcG9seTEzMDVfc2ltZF9ibG9ja3MoJmRjdHgtPmgsIHNyYyArIHVzZWQsIGJ5dGVzIC0gdXNlZCwgMSk7CisrCQlzcmMgKz0gYnl0ZXM7CisgCX0KKyAKKyAJaWYgKHVubGlrZWx5KHNyY2xlbikpIHsKK0BAIC0zMjksMzEgKzIwNiwxNyBAQCB2b2lkIHBvbHkxMzA1X3VwZGF0ZV9hcmNoKHN0cnVjdCBwb2x5MTMwCisgfQorIEVYUE9SVF9TWU1CT0wocG9seTEzMDVfdXBkYXRlX2FyY2gpOworIAorLXZvaWQgcG9seTEzMDVfZmluYWxfYXJjaChzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRlc2MsIHU4ICpkc3QpCisrdm9pZCBwb2x5MTMwNV9maW5hbF9hcmNoKHN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCAqZGN0eCwgdTggKmRzdCkKKyB7CistCV9fbGUzMiBkaWdlc3RbNF07CistCXU2NCBmID0gMDsKKy0KKy0JaWYgKHVubGlrZWx5KGRlc2MtPmJ1ZmxlbikpIHsKKy0JCWRlc2MtPmJ1ZltkZXNjLT5idWZsZW4rK10gPSAxOworLQkJbWVtc2V0KGRlc2MtPmJ1ZiArIGRlc2MtPmJ1ZmxlbiwgMCwKKy0JCSAgICAgICBQT0xZMTMwNV9CTE9DS19TSVpFIC0gZGVzYy0+YnVmbGVuKTsKKy0JCXBvbHkxMzA1X2ludGVnZXJfYmxvY2tzKCZkZXNjLT5oLCBkZXNjLT5vcGFxdWVfciwgZGVzYy0+YnVmLCAxLCAwKTsKKysJaWYgKHVubGlrZWx5KGRjdHgtPmJ1ZmxlbikpIHsKKysJCWRjdHgtPmJ1ZltkY3R4LT5idWZsZW4rK10gPSAxOworKwkJbWVtc2V0KGRjdHgtPmJ1ZiArIGRjdHgtPmJ1ZmxlbiwgMCwKKysJCSAgICAgICBQT0xZMTMwNV9CTE9DS19TSVpFIC0gZGN0eC0+YnVmbGVuKTsKKysJCXBvbHkxMzA1X3NpbWRfYmxvY2tzKCZkY3R4LT5oLCBkY3R4LT5idWYsIFBPTFkxMzA1X0JMT0NLX1NJWkUsIDApOworIAl9CisgCistCXBvbHkxMzA1X2ludGVnZXJfZW1pdCgmZGVzYy0+aCwgZGlnZXN0KTsKKy0KKy0JLyogbWFjID0gKGggKyBzKSAlICgyXjEyOCkgKi8KKy0JZiA9IChmID4+IDMyKSArIGxlMzJfdG9fY3B1KGRpZ2VzdFswXSkgKyBkZXNjLT5zWzBdOworLQlwdXRfdW5hbGlnbmVkX2xlMzIoZiwgZHN0ICsgMCk7CistCWYgPSAoZiA+PiAzMikgKyBsZTMyX3RvX2NwdShkaWdlc3RbMV0pICsgZGVzYy0+c1sxXTsKKy0JcHV0X3VuYWxpZ25lZF9sZTMyKGYsIGRzdCArIDQpOworLQlmID0gKGYgPj4gMzIpICsgbGUzMl90b19jcHUoZGlnZXN0WzJdKSArIGRlc2MtPnNbMl07CistCXB1dF91bmFsaWduZWRfbGUzMihmLCBkc3QgKyA4KTsKKy0JZiA9IChmID4+IDMyKSArIGxlMzJfdG9fY3B1KGRpZ2VzdFszXSkgKyBkZXNjLT5zWzNdOworLQlwdXRfdW5hbGlnbmVkX2xlMzIoZiwgZHN0ICsgMTIpOworLQorLQkqZGVzYyA9IChzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHgpe307CisrCXBvbHkxMzA1X3NpbWRfZW1pdCgmZGN0eC0+aCwgZHN0LCBkY3R4LT5zKTsKKysJKmRjdHggPSAoc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4KXt9OworIH0KKyBFWFBPUlRfU1lNQk9MKHBvbHkxMzA1X2ZpbmFsX2FyY2gpOworIAorQEAgLTM2MSwzOCArMjI0LDM0IEBAIHN0YXRpYyBpbnQgY3J5cHRvX3BvbHkxMzA1X2luaXQoc3RydWN0IHMKKyB7CisgCXN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCAqZGN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworIAorLQlwb2x5MTMwNV9jb3JlX2luaXQoJmRjdHgtPmgpOworLQlkY3R4LT5idWZsZW4gPSAwOworLQlkY3R4LT5yc2V0ID0gMDsKKy0JZGN0eC0+c3NldCA9IGZhbHNlOworLQorKwkqZGN0eCA9IChzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHgpe307CisgCXJldHVybiAwOworIH0KKyAKKy1zdGF0aWMgaW50IGNyeXB0b19wb2x5MTMwNV9maW5hbChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgdTggKmRzdCkKKytzdGF0aWMgaW50IGNyeXB0b19wb2x5MTMwNV91cGRhdGUoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsCisrCQkJCSAgY29uc3QgdTggKnNyYywgdW5zaWduZWQgaW50IHNyY2xlbikKKyB7CisgCXN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCAqZGN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworIAorLQlpZiAodW5saWtlbHkoIWRjdHgtPnNzZXQpKQorLQkJcmV0dXJuIC1FTk9LRVk7CistCistCXBvbHkxMzA1X2ZpbmFsX2FyY2goZGN0eCwgZHN0KTsKKysJcG9seTEzMDVfdXBkYXRlX2FyY2goZGN0eCwgc3JjLCBzcmNsZW4pOworIAlyZXR1cm4gMDsKKyB9CisgCistc3RhdGljIGludCBwb2x5MTMwNV9zaW1kX3VwZGF0ZShzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywKKy0JCQkJY29uc3QgdTggKnNyYywgdW5zaWduZWQgaW50IHNyY2xlbikKKytzdGF0aWMgaW50IGNyeXB0b19wb2x5MTMwNV9maW5hbChzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgdTggKmRzdCkKKyB7CisgCXN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCAqZGN0eCA9IHNoYXNoX2Rlc2NfY3R4KGRlc2MpOworIAorLQlwb2x5MTMwNV91cGRhdGVfYXJjaChkY3R4LCBzcmMsIHNyY2xlbik7CisrCWlmICh1bmxpa2VseSghZGN0eC0+c3NldCkpCisrCQlyZXR1cm4gLUVOT0tFWTsKKysKKysJcG9seTEzMDVfZmluYWxfYXJjaChkY3R4LCBkc3QpOworIAlyZXR1cm4gMDsKKyB9CisgCisgc3RhdGljIHN0cnVjdCBzaGFzaF9hbGcgYWxnID0geworIAkuZGlnZXN0c2l6ZQk9IFBPTFkxMzA1X0RJR0VTVF9TSVpFLAorIAkuaW5pdAkJPSBjcnlwdG9fcG9seTEzMDVfaW5pdCwKKy0JLnVwZGF0ZQkJPSBwb2x5MTMwNV9zaW1kX3VwZGF0ZSwKKysJLnVwZGF0ZQkJPSBjcnlwdG9fcG9seTEzMDVfdXBkYXRlLAorIAkuZmluYWwJCT0gY3J5cHRvX3BvbHkxMzA1X2ZpbmFsLAorIAkuZGVzY3NpemUJPSBzaXplb2Yoc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4KSwKKyAJLmJhc2UJCT0geworQEAgLTQwNiwxNyArMjY1LDE5IEBAIHN0YXRpYyBzdHJ1Y3Qgc2hhc2hfYWxnIGFsZyA9IHsKKyAKKyBzdGF0aWMgaW50IF9faW5pdCBwb2x5MTMwNV9zaW1kX21vZF9pbml0KHZvaWQpCisgeworLQlpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9YTU0yKSkKKy0JCXJldHVybiAwOworLQorLQlzdGF0aWNfYnJhbmNoX2VuYWJsZSgmcG9seTEzMDVfdXNlX3NpbWQpOworLQorLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfQVNfQVZYMikgJiYKKy0JICAgIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BVlgpICYmCisrCWlmIChJU19FTkFCTEVEKENPTkZJR19BU19BVlgpICYmIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BVlgpICYmCisrCSAgICBjcHVfaGFzX3hmZWF0dXJlcyhYRkVBVFVSRV9NQVNLX1NTRSB8IFhGRUFUVVJFX01BU0tfWU1NLCBOVUxMKSkKKysJCXN0YXRpY19icmFuY2hfZW5hYmxlKCZwb2x5MTMwNV91c2VfYXZ4KTsKKysJaWYgKElTX0VOQUJMRUQoQ09ORklHX0FTX0FWWDIpICYmIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BVlgpICYmCisgCSAgICBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVZYMikgJiYKKyAJICAgIGNwdV9oYXNfeGZlYXR1cmVzKFhGRUFUVVJFX01BU0tfU1NFIHwgWEZFQVRVUkVfTUFTS19ZTU0sIE5VTEwpKQorIAkJc3RhdGljX2JyYW5jaF9lbmFibGUoJnBvbHkxMzA1X3VzZV9hdngyKTsKKy0KKysJaWYgKElTX0VOQUJMRUQoQ09ORklHX0FTX0FWWDUxMikgJiYgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0FWWCkgJiYKKysJICAgIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BVlgyKSAmJiBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVZYNTEyRikgJiYKKysJICAgIGNwdV9oYXNfeGZlYXR1cmVzKFhGRUFUVVJFX01BU0tfU1NFIHwgWEZFQVRVUkVfTUFTS19ZTU0gfCBYRkVBVFVSRV9NQVNLX0FWWDUxMiwgTlVMTCkgJiYKKysJICAgIC8qIFNreWxha2UgZG93bmNsb2NrcyB1bmFjY2VwdGFibHkgbXVjaCB3aGVuIHVzaW5nIHptbSwgYnV0IGxhdGVyIGdlbmVyYXRpb25zIGFyZSBmYXN0LiAqLworKwkgICAgYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgIT0gSU5URUxfRkFNNl9TS1lMQUtFX1gpCisrCQlzdGF0aWNfYnJhbmNoX2VuYWJsZSgmcG9seTEzMDVfdXNlX2F2eDUxMik7CisgCXJldHVybiBJU19SRUFDSEFCTEUoQ09ORklHX0NSWVBUT19IQVNIKSA/IGNyeXB0b19yZWdpc3Rlcl9zaGFzaCgmYWxnKSA6IDA7CisgfQorIAorQEAgLTQzMCw3ICsyOTEsNyBAQCBtb2R1bGVfaW5pdChwb2x5MTMwNV9zaW1kX21vZF9pbml0KTsKKyBtb2R1bGVfZXhpdChwb2x5MTMwNV9zaW1kX21vZF9leGl0KTsKKyAKKyBNT0RVTEVfTElDRU5TRSgiR1BMIik7CistTU9EVUxFX0FVVEhPUigiTWFydGluIFdpbGxpIDxtYXJ0aW5Ac3Ryb25nc3dhbi5vcmc+Iik7CisrTU9EVUxFX0FVVEhPUigiSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+Iik7CisgTU9EVUxFX0RFU0NSSVBUSU9OKCJQb2x5MTMwNSBhdXRoZW50aWNhdG9yIik7CisgTU9EVUxFX0FMSUFTX0NSWVBUTygicG9seTEzMDUiKTsKKyBNT0RVTEVfQUxJQVNfQ1JZUFRPKCJwb2x5MTMwNS1zaW1kIik7CistLS0gYS9saWIvY3J5cHRvL0tjb25maWcKKysrKyBiL2xpYi9jcnlwdG8vS2NvbmZpZworQEAgLTkwLDcgKzkwLDcgQEAgY29uZmlnIENSWVBUT19MSUJfREVTCisgY29uZmlnIENSWVBUT19MSUJfUE9MWTEzMDVfUlNJWkUKKyAJaW50CisgCWRlZmF1bHQgMiBpZiBNSVBTCistCWRlZmF1bHQgNCBpZiBYODZfNjQKKysJZGVmYXVsdCAxMSBpZiBYODZfNjQKKyAJZGVmYXVsdCA5IGlmIEFSTSB8fCBBUk02NAorIAlkZWZhdWx0IDEKKyAKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNDQtY3J5cHRvLWFybS1hcm02NC1taXBzLXBvbHkxMzA1LXJlbW92ZS1yZWR1bmRhbnQtbm9uLS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNDQtY3J5cHRvLWFybS1hcm02NC1taXBzLXBvbHkxMzA1LXJlbW92ZS1yZWR1bmRhbnQtbm9uLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTViOTk4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA0NC1jcnlwdG8tYXJtLWFybTY0LW1pcHMtcG9seTEzMDUtcmVtb3ZlLXJlZHVuZGFudC1ub24tLnBhdGNoCkBAIC0wLDAgKzEsMTcxIEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogU3VuLCA1IEphbiAyMDIwIDIyOjQwOjQ5IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyeXB0bzoge2FybSxhcm02NCxtaXBzfS9wb2x5MTMwNSAtIHJlbW92ZSByZWR1bmRhbnQKKyBub24tcmVkdWN0aW9uIGZyb20gZW1pdAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitjb21taXQgMzE4OTk5MDhhMGQyNDhiMDMwYjQ0NjQ0MjViODZjNzE3ZTAwMDdkNCB1cHN0cmVhbS4KKworVGhpcyBhcHBlYXJzIHRvIGJlIHNvbWUga2luZCBvZiBjb3B5IGFuZCBwYXN0ZSBlcnJvciwgYW5kIGlzIGFjdHVhbGx5CitkZWFkIGNvZGUuCisKK1ByZTogZiA9IDAg4oeSIChmID4+IDMyKSA9IDAKKyAgICBmID0gKGYgPj4gMzIpICsgbGUzMl90b19jcHUoZGlnZXN0WzBdKTsKK1Bvc3Q6IDAg4omkIGYgPCAywrPCsgorICAgIHB1dF91bmFsaWduZWRfbGUzMihmLCBkc3QpOworCitQcmU6IDAg4omkIGYgPCAywrPCsiDih5IgKGYgPj4gMzIpID0gMAorICAgIGYgPSAoZiA+PiAzMikgKyBsZTMyX3RvX2NwdShkaWdlc3RbMV0pOworUG9zdDogMCDiiaQgZiA8IDLCs8KyCisgICAgcHV0X3VuYWxpZ25lZF9sZTMyKGYsIGRzdCArIDQpOworCitQcmU6IDAg4omkIGYgPCAywrPCsiDih5IgKGYgPj4gMzIpID0gMAorICAgIGYgPSAoZiA+PiAzMikgKyBsZTMyX3RvX2NwdShkaWdlc3RbMl0pOworUG9zdDogMCDiiaQgZiA8IDLCs8KyCisgICAgcHV0X3VuYWxpZ25lZF9sZTMyKGYsIGRzdCArIDgpOworCitQcmU6IDAg4omkIGYgPCAywrPCsiDih5IgKGYgPj4gMzIpID0gMAorICAgIGYgPSAoZiA+PiAzMikgKyBsZTMyX3RvX2NwdShkaWdlc3RbM10pOworUG9zdDogMCDiiaQgZiA8IDLCs8KyCisgICAgcHV0X3VuYWxpZ25lZF9sZTMyKGYsIGRzdCArIDEyKTsKKworVGhlcmVmb3JlIHRoaXMgc2VxdWVuY2UgaXMgcmVkdW5kYW50LiBBbmQgQW5keSdzIGNvZGUgYXBwZWFycyB0byBoYW5kbGUKK21pc2FsaWdubWVudCBhY2NlcHRhYmx5LgorCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KK1Rlc3RlZC1ieTogQXJkIEJpZXNoZXV2ZWwgPGFyZGJAa2VybmVsLm9yZz4KK1Jldmlld2VkLWJ5OiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgorU2lnbmVkLW9mZi1ieTogSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBhcmNoL2FybS9jcnlwdG8vcG9seTEzMDUtZ2x1ZS5jICAgfCAxOCArKy0tLS0tLS0tLS0tLS0tLS0KKyBhcmNoL2FybTY0L2NyeXB0by9wb2x5MTMwNS1nbHVlLmMgfCAxOCArKy0tLS0tLS0tLS0tLS0tLS0KKyBhcmNoL21pcHMvY3J5cHRvL3BvbHkxMzA1LWdsdWUuYyAgfCAxOCArKy0tLS0tLS0tLS0tLS0tLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgNDggZGVsZXRpb25zKC0pCisKKy0tLSBhL2FyY2gvYXJtL2NyeXB0by9wb2x5MTMwNS1nbHVlLmMKKysrKyBiL2FyY2gvYXJtL2NyeXB0by9wb2x5MTMwNS1nbHVlLmMKK0BAIC0yMCw3ICsyMCw3IEBACisgCisgdm9pZCBwb2x5MTMwNV9pbml0X2FybSh2b2lkICpzdGF0ZSwgY29uc3QgdTggKmtleSk7Cisgdm9pZCBwb2x5MTMwNV9ibG9ja3NfYXJtKHZvaWQgKnN0YXRlLCBjb25zdCB1OCAqc3JjLCB1MzIgbGVuLCB1MzIgaGliaXQpOworLXZvaWQgcG9seTEzMDVfZW1pdF9hcm0odm9pZCAqc3RhdGUsIF9fbGUzMiAqZGlnZXN0LCBjb25zdCB1MzIgKm5vbmNlKTsKKyt2b2lkIHBvbHkxMzA1X2VtaXRfYXJtKHZvaWQgKnN0YXRlLCB1OCAqZGlnZXN0LCBjb25zdCB1MzIgKm5vbmNlKTsKKyAKKyB2b2lkIF9fd2VhayBwb2x5MTMwNV9ibG9ja3NfbmVvbih2b2lkICpzdGF0ZSwgY29uc3QgdTggKnNyYywgdTMyIGxlbiwgdTMyIGhpYml0KQorIHsKK0BAIC0xNzksOSArMTc5LDYgQEAgRVhQT1JUX1NZTUJPTChwb2x5MTMwNV91cGRhdGVfYXJjaCk7CisgCisgdm9pZCBwb2x5MTMwNV9maW5hbF9hcmNoKHN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCAqZGN0eCwgdTggKmRzdCkKKyB7CistCV9fbGUzMiBkaWdlc3RbNF07CistCXU2NCBmID0gMDsKKy0KKyAJaWYgKHVubGlrZWx5KGRjdHgtPmJ1ZmxlbikpIHsKKyAJCWRjdHgtPmJ1ZltkY3R4LT5idWZsZW4rK10gPSAxOworIAkJbWVtc2V0KGRjdHgtPmJ1ZiArIGRjdHgtPmJ1ZmxlbiwgMCwKK0BAIC0xODksMTggKzE4Niw3IEBAIHZvaWQgcG9seTEzMDVfZmluYWxfYXJjaChzdHJ1Y3QgcG9seTEzMDUKKyAJCXBvbHkxMzA1X2Jsb2Nrc19hcm0oJmRjdHgtPmgsIGRjdHgtPmJ1ZiwgUE9MWTEzMDVfQkxPQ0tfU0laRSwgMCk7CisgCX0KKyAKKy0JcG9seTEzMDVfZW1pdF9hcm0oJmRjdHgtPmgsIGRpZ2VzdCwgZGN0eC0+cyk7CistCistCS8qIG1hYyA9IChoICsgcykgJSAoMl4xMjgpICovCistCWYgPSAoZiA+PiAzMikgKyBsZTMyX3RvX2NwdShkaWdlc3RbMF0pOworLQlwdXRfdW5hbGlnbmVkX2xlMzIoZiwgZHN0KTsKKy0JZiA9IChmID4+IDMyKSArIGxlMzJfdG9fY3B1KGRpZ2VzdFsxXSk7CistCXB1dF91bmFsaWduZWRfbGUzMihmLCBkc3QgKyA0KTsKKy0JZiA9IChmID4+IDMyKSArIGxlMzJfdG9fY3B1KGRpZ2VzdFsyXSk7CistCXB1dF91bmFsaWduZWRfbGUzMihmLCBkc3QgKyA4KTsKKy0JZiA9IChmID4+IDMyKSArIGxlMzJfdG9fY3B1KGRpZ2VzdFszXSk7CistCXB1dF91bmFsaWduZWRfbGUzMihmLCBkc3QgKyAxMik7CistCisrCXBvbHkxMzA1X2VtaXRfYXJtKCZkY3R4LT5oLCBkc3QsIGRjdHgtPnMpOworIAkqZGN0eCA9IChzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHgpe307CisgfQorIEVYUE9SVF9TWU1CT0wocG9seTEzMDVfZmluYWxfYXJjaCk7CistLS0gYS9hcmNoL2FybTY0L2NyeXB0by9wb2x5MTMwNS1nbHVlLmMKKysrKyBiL2FyY2gvYXJtNjQvY3J5cHRvL3BvbHkxMzA1LWdsdWUuYworQEAgLTIxLDcgKzIxLDcgQEAKKyBhc21saW5rYWdlIHZvaWQgcG9seTEzMDVfaW5pdF9hcm02NCh2b2lkICpzdGF0ZSwgY29uc3QgdTggKmtleSk7CisgYXNtbGlua2FnZSB2b2lkIHBvbHkxMzA1X2Jsb2Nrcyh2b2lkICpzdGF0ZSwgY29uc3QgdTggKnNyYywgdTMyIGxlbiwgdTMyIGhpYml0KTsKKyBhc21saW5rYWdlIHZvaWQgcG9seTEzMDVfYmxvY2tzX25lb24odm9pZCAqc3RhdGUsIGNvbnN0IHU4ICpzcmMsIHUzMiBsZW4sIHUzMiBoaWJpdCk7CistYXNtbGlua2FnZSB2b2lkIHBvbHkxMzA1X2VtaXQodm9pZCAqc3RhdGUsIF9fbGUzMiAqZGlnZXN0LCBjb25zdCB1MzIgKm5vbmNlKTsKKythc21saW5rYWdlIHZvaWQgcG9seTEzMDVfZW1pdCh2b2lkICpzdGF0ZSwgdTggKmRpZ2VzdCwgY29uc3QgdTMyICpub25jZSk7CisgCisgc3RhdGljIF9fcm9fYWZ0ZXJfaW5pdCBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShoYXZlX25lb24pOworIAorQEAgLTE2Miw5ICsxNjIsNiBAQCBFWFBPUlRfU1lNQk9MKHBvbHkxMzA1X3VwZGF0ZV9hcmNoKTsKKyAKKyB2b2lkIHBvbHkxMzA1X2ZpbmFsX2FyY2goc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4ICpkY3R4LCB1OCAqZHN0KQorIHsKKy0JX19sZTMyIGRpZ2VzdFs0XTsKKy0JdTY0IGYgPSAwOworLQorIAlpZiAodW5saWtlbHkoZGN0eC0+YnVmbGVuKSkgeworIAkJZGN0eC0+YnVmW2RjdHgtPmJ1ZmxlbisrXSA9IDE7CisgCQltZW1zZXQoZGN0eC0+YnVmICsgZGN0eC0+YnVmbGVuLCAwLAorQEAgLTE3MiwxOCArMTY5LDcgQEAgdm9pZCBwb2x5MTMwNV9maW5hbF9hcmNoKHN0cnVjdCBwb2x5MTMwNQorIAkJcG9seTEzMDVfYmxvY2tzKCZkY3R4LT5oLCBkY3R4LT5idWYsIFBPTFkxMzA1X0JMT0NLX1NJWkUsIDApOworIAl9CisgCistCXBvbHkxMzA1X2VtaXQoJmRjdHgtPmgsIGRpZ2VzdCwgZGN0eC0+cyk7CistCistCS8qIG1hYyA9IChoICsgcykgJSAoMl4xMjgpICovCistCWYgPSAoZiA+PiAzMikgKyBsZTMyX3RvX2NwdShkaWdlc3RbMF0pOworLQlwdXRfdW5hbGlnbmVkX2xlMzIoZiwgZHN0KTsKKy0JZiA9IChmID4+IDMyKSArIGxlMzJfdG9fY3B1KGRpZ2VzdFsxXSk7CistCXB1dF91bmFsaWduZWRfbGUzMihmLCBkc3QgKyA0KTsKKy0JZiA9IChmID4+IDMyKSArIGxlMzJfdG9fY3B1KGRpZ2VzdFsyXSk7CistCXB1dF91bmFsaWduZWRfbGUzMihmLCBkc3QgKyA4KTsKKy0JZiA9IChmID4+IDMyKSArIGxlMzJfdG9fY3B1KGRpZ2VzdFszXSk7CistCXB1dF91bmFsaWduZWRfbGUzMihmLCBkc3QgKyAxMik7CistCisrCXBvbHkxMzA1X2VtaXQoJmRjdHgtPmgsIGRzdCwgZGN0eC0+cyk7CisgCSpkY3R4ID0gKHN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCl7fTsKKyB9CisgRVhQT1JUX1NZTUJPTChwb2x5MTMwNV9maW5hbF9hcmNoKTsKKy0tLSBhL2FyY2gvbWlwcy9jcnlwdG8vcG9seTEzMDUtZ2x1ZS5jCisrKysgYi9hcmNoL21pcHMvY3J5cHRvL3BvbHkxMzA1LWdsdWUuYworQEAgLTE1LDcgKzE1LDcgQEAKKyAKKyBhc21saW5rYWdlIHZvaWQgcG9seTEzMDVfaW5pdF9taXBzKHZvaWQgKnN0YXRlLCBjb25zdCB1OCAqa2V5KTsKKyBhc21saW5rYWdlIHZvaWQgcG9seTEzMDVfYmxvY2tzX21pcHModm9pZCAqc3RhdGUsIGNvbnN0IHU4ICpzcmMsIHUzMiBsZW4sIHUzMiBoaWJpdCk7CistYXNtbGlua2FnZSB2b2lkIHBvbHkxMzA1X2VtaXRfbWlwcyh2b2lkICpzdGF0ZSwgX19sZTMyICpkaWdlc3QsIGNvbnN0IHUzMiAqbm9uY2UpOworK2FzbWxpbmthZ2Ugdm9pZCBwb2x5MTMwNV9lbWl0X21pcHModm9pZCAqc3RhdGUsIHU4ICpkaWdlc3QsIGNvbnN0IHUzMiAqbm9uY2UpOworIAorIHZvaWQgcG9seTEzMDVfaW5pdF9hcmNoKHN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCAqZGN0eCwgY29uc3QgdTggKmtleSkKKyB7CitAQCAtMTM0LDkgKzEzNCw2IEBAIEVYUE9SVF9TWU1CT0wocG9seTEzMDVfdXBkYXRlX2FyY2gpOworIAorIHZvaWQgcG9seTEzMDVfZmluYWxfYXJjaChzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRjdHgsIHU4ICpkc3QpCisgeworLQlfX2xlMzIgZGlnZXN0WzRdOworLQl1NjQgZiA9IDA7CistCisgCWlmICh1bmxpa2VseShkY3R4LT5idWZsZW4pKSB7CisgCQlkY3R4LT5idWZbZGN0eC0+YnVmbGVuKytdID0gMTsKKyAJCW1lbXNldChkY3R4LT5idWYgKyBkY3R4LT5idWZsZW4sIDAsCitAQCAtMTQ0LDE4ICsxNDEsNyBAQCB2b2lkIHBvbHkxMzA1X2ZpbmFsX2FyY2goc3RydWN0IHBvbHkxMzA1CisgCQlwb2x5MTMwNV9ibG9ja3NfbWlwcygmZGN0eC0+aCwgZGN0eC0+YnVmLCBQT0xZMTMwNV9CTE9DS19TSVpFLCAwKTsKKyAJfQorIAorLQlwb2x5MTMwNV9lbWl0X21pcHMoJmRjdHgtPmgsIGRpZ2VzdCwgZGN0eC0+cyk7CistCistCS8qIG1hYyA9IChoICsgcykgJSAoMl4xMjgpICovCistCWYgPSAoZiA+PiAzMikgKyBsZTMyX3RvX2NwdShkaWdlc3RbMF0pOworLQlwdXRfdW5hbGlnbmVkX2xlMzIoZiwgZHN0KTsKKy0JZiA9IChmID4+IDMyKSArIGxlMzJfdG9fY3B1KGRpZ2VzdFsxXSk7CistCXB1dF91bmFsaWduZWRfbGUzMihmLCBkc3QgKyA0KTsKKy0JZiA9IChmID4+IDMyKSArIGxlMzJfdG9fY3B1KGRpZ2VzdFsyXSk7CistCXB1dF91bmFsaWduZWRfbGUzMihmLCBkc3QgKyA4KTsKKy0JZiA9IChmID4+IDMyKSArIGxlMzJfdG9fY3B1KGRpZ2VzdFszXSk7CistCXB1dF91bmFsaWduZWRfbGUzMihmLCBkc3QgKyAxMik7CistCisrCXBvbHkxMzA1X2VtaXRfbWlwcygmZGN0eC0+aCwgZHN0LCBkY3R4LT5zKTsKKyAJKmRjdHggPSAoc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4KXt9OworIH0KKyBFWFBPUlRfU1lNQk9MKHBvbHkxMzA1X2ZpbmFsX2FyY2gpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA0NS1jcnlwdG8tY3VydmUyNTUxOS1GaXgtc2VsZnRlc3QtYnVpbGQtZXJyb3IucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDQ1LWNyeXB0by1jdXJ2ZTI1NTE5LUZpeC1zZWxmdGVzdC1idWlsZC1lcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYThkOGZkCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA0NS1jcnlwdG8tY3VydmUyNTUxOS1GaXgtc2VsZnRlc3QtYnVpbGQtZXJyb3IucGF0Y2gKQEAgLTAsMCArMSwxMDIgQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KK0RhdGU6IFdlZCwgOCBKYW4gMjAyMCAxMjozNzozNSArMDgwMAorU3ViamVjdDogW1BBVENIXSBjcnlwdG86IGN1cnZlMjU1MTkgLSBGaXggc2VsZnRlc3QgYnVpbGQgZXJyb3IKKworY29tbWl0IGE4YmRmMmM0MmVlNGQxZWU0MmFmMWYzNjAxZjg1ZGU5NGU3MGE0MjEgdXBzdHJlYW0uCisKK0lmIENSWVBUT19DVVJWRTI1NTE5IGlzIHksIENSWVBUT19MSUJfQ1VSVkUyNTUxOV9HRU5FUklDIHdpbGwgYmUKK3ksIGJ1dCBDUllQVE9fTElCX0NVUlZFMjU1MTkgbWF5IGJlIHNldCB0byBtLCB0aGlzIGNhdXNlcyBidWlsZAorZXJyb3JzOgorCitsaWIvY3J5cHRvL2N1cnZlMjU1MTktc2VsZnRlc3QubzogSW4gZnVuY3Rpb24gYGN1cnZlMjU1MTknOgorY3VydmUyNTUxOS1zZWxmdGVzdC5jOigudGV4dC51bmxpa2VseSsweGMpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBjdXJ2ZTI1NTE5X2FyY2gnCitsaWIvY3J5cHRvL2N1cnZlMjU1MTktc2VsZnRlc3QubzogSW4gZnVuY3Rpb24gYGN1cnZlMjU1MTlfc2VsZnRlc3QnOgorY3VydmUyNTUxOS1zZWxmdGVzdC5jOiguaW5pdC50ZXh0KzB4MTdlKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgY3VydmUyNTUxOV9iYXNlX2FyY2gnCisKK1RoaXMgaXMgYmVjYXVzZSB0aGUgY3VydmUyNTUxOSBzZWxmLXRlc3QgY29kZSBpcyBiZWluZyBjb250cm9sbGVkCitieSB0aGUgR0VORVJJQyBvcHRpb24gcmF0aGVyIHRoYW4gdGhlIG92ZXJhbGwgQ1VSVkUyNTUxOSBvcHRpb24sCithcyBpcyB0aGUgY2FzZSB3aXRoIGJsYWtlMnMuICBUbyByZWNhcCwgdGhlIEdFTkVSSUMgYW5kIEFSQ0ggb3B0aW9ucworZm9yIENVUlZFMjU1MTkgYXJlIGludGVybmFsIG9ubHkgYW5kIHNlbGVjdGVkIGJ5IHVzZXJzIHN1Y2ggYXMKK3RoZSBDcnlwdG8gQVBJLCBvciB0aGUgZXh0ZXJuYWxseSB2aXNpYmxlIENVUlZFMjU1MTkgb3B0aW9uIHdoaWNoCitpbiB0dXJuIGlzIHNlbGVjdGVkIGJ5IHdpcmVndWFyZC4gIFRoZSBzZWxmLXRlc3QgaXMgc3BlY2lmaWMgdG8gdGhlCit0aGUgZXh0ZXJuYWwgQ1VSVkUyNTUxOSBvcHRpb24gYW5kIHNob3VsZCBub3QgYmUgZW5hYmxlZCBieSB0aGUKK0NyeXB0byBBUEkuCisKK1RoaXMgcGF0Y2ggZml4ZXMgdGhpcyBieSBzcGxpdHRpbmcgdGhlIEdFTkVSSUMgbW9kdWxlIGZyb20gdGhlCitDVVJWRTI1NTE5IG1vZHVsZSB3aXRoIHRoZSBsYXR0ZXIgbm93IGNvbnRhaW5pbmcganVzdCB0aGUgc2VsZi10ZXN0LgorCitSZXBvcnRlZC1ieTogSHVsayBSb2JvdCA8aHVsa2NpQGh1YXdlaS5jb20+CitGaXhlczogYWExMjc5NjNmMWNhICgiY3J5cHRvOiBsaWIvY3VydmUyNTUxOSAtIHJlLWFkZCBzZWxmdGVzdHMiKQorU2lnbmVkLW9mZi1ieTogSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorUmV2aWV3ZWQtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorU2lnbmVkLW9mZi1ieTogSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBsaWIvY3J5cHRvL01ha2VmaWxlICAgICAgICAgICAgIHwgIDkgKysrKysrLS0tCisgbGliL2NyeXB0by9jdXJ2ZTI1NTE5LWdlbmVyaWMuYyB8IDI0ICsrKysrKysrKysrKysrKysrKysrKysrKworIGxpYi9jcnlwdG8vY3VydmUyNTUxOS5jICAgICAgICAgfCAgNyAtLS0tLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCAzMCBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2NyeXB0by9jdXJ2ZTI1NTE5LWdlbmVyaWMuYworCistLS0gYS9saWIvY3J5cHRvL01ha2VmaWxlCisrKysgYi9saWIvY3J5cHRvL01ha2VmaWxlCitAQCAtMTksOSArMTksMTIgQEAgbGliYmxha2Uycy15CQkJCQkrPSBibGFrZTJzLm8KKyBvYmotJChDT05GSUdfQ1JZUFRPX0xJQl9DSEFDSEEyMFBPTFkxMzA1KQkrPSBsaWJjaGFjaGEyMHBvbHkxMzA1Lm8KKyBsaWJjaGFjaGEyMHBvbHkxMzA1LXkJCQkJKz0gY2hhY2hhMjBwb2x5MTMwNS5vCisgCistb2JqLSQoQ09ORklHX0NSWVBUT19MSUJfQ1VSVkUyNTUxOV9HRU5FUklDKQkrPSBsaWJjdXJ2ZTI1NTE5Lm8KKy1saWJjdXJ2ZTI1NTE5LXkJCQkJCTo9IGN1cnZlMjU1MTktZmlhdDMyLm8KKy1saWJjdXJ2ZTI1NTE5LSQoQ09ORklHX0FSQ0hfU1VQUE9SVFNfSU5UMTI4KQk6PSBjdXJ2ZTI1NTE5LWhhY2w2NC5vCisrb2JqLSQoQ09ORklHX0NSWVBUT19MSUJfQ1VSVkUyNTUxOV9HRU5FUklDKQkrPSBsaWJjdXJ2ZTI1NTE5LWdlbmVyaWMubworK2xpYmN1cnZlMjU1MTktZ2VuZXJpYy15CQkJCTo9IGN1cnZlMjU1MTktZmlhdDMyLm8KKytsaWJjdXJ2ZTI1NTE5LWdlbmVyaWMtJChDT05GSUdfQVJDSF9TVVBQT1JUU19JTlQxMjgpCTo9IGN1cnZlMjU1MTktaGFjbDY0Lm8KKytsaWJjdXJ2ZTI1NTE5LWdlbmVyaWMteQkJCQkrPSBjdXJ2ZTI1NTE5LWdlbmVyaWMubworKworK29iai0kKENPTkZJR19DUllQVE9fTElCX0NVUlZFMjU1MTkpCQkrPSBsaWJjdXJ2ZTI1NTE5Lm8KKyBsaWJjdXJ2ZTI1NTE5LXkJCQkJCSs9IGN1cnZlMjU1MTkubworIAorIG9iai0kKENPTkZJR19DUllQVE9fTElCX0RFUykJCQkrPSBsaWJkZXMubworLS0tIC9kZXYvbnVsbAorKysrIGIvbGliL2NyeXB0by9jdXJ2ZTI1NTE5LWdlbmVyaWMuYworQEAgLTAsMCArMSwyNCBAQAorKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVAorKy8qCisrICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKyAqCisrICogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQ3VydmUyNTUxOSBFQ0RIIGFsZ29yaXRobSwgdXNpbmcgZWl0aGVyCisrICogYSAzMi1iaXQgaW1wbGVtZW50YXRpb24gb3IgYSA2NC1iaXQgaW1wbGVtZW50YXRpb24gd2l0aCAxMjgtYml0IGludGVnZXJzLAorKyAqIGRlcGVuZGluZyBvbiB3aGF0IGlzIHN1cHBvcnRlZCBieSB0aGUgdGFyZ2V0IGNvbXBpbGVyLgorKyAqCisrICogSW5mb3JtYXRpb246IGh0dHBzOi8vY3IueXAudG8vZWNkaC5odG1sCisrICovCisrCisrI2luY2x1ZGUgPGNyeXB0by9jdXJ2ZTI1NTE5Lmg+CisrI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorKworK2NvbnN0IHU4IGN1cnZlMjU1MTlfbnVsbF9wb2ludFtDVVJWRTI1NTE5X0tFWV9TSVpFXSBfX2FsaWduZWQoMzIpID0geyAwIH07CisrY29uc3QgdTggY3VydmUyNTUxOV9iYXNlX3BvaW50W0NVUlZFMjU1MTlfS0VZX1NJWkVdIF9fYWxpZ25lZCgzMikgPSB7IDkgfTsKKysKKytFWFBPUlRfU1lNQk9MKGN1cnZlMjU1MTlfbnVsbF9wb2ludCk7CisrRVhQT1JUX1NZTUJPTChjdXJ2ZTI1NTE5X2Jhc2VfcG9pbnQpOworK0VYUE9SVF9TWU1CT0woY3VydmUyNTUxOV9nZW5lcmljKTsKKysKKytNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CisrTU9EVUxFX0RFU0NSSVBUSU9OKCJDdXJ2ZTI1NTE5IHNjYWxhciBtdWx0aXBsaWNhdGlvbiIpOworK01PRFVMRV9BVVRIT1IoIkphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPiIpOworLS0tIGEvbGliL2NyeXB0by9jdXJ2ZTI1NTE5LmMKKysrKyBiL2xpYi9jcnlwdG8vY3VydmUyNTUxOS5jCitAQCAtMTUsMTMgKzE1LDYgQEAKKyAKKyBib29sIGN1cnZlMjU1MTlfc2VsZnRlc3Qodm9pZCk7CisgCistY29uc3QgdTggY3VydmUyNTUxOV9udWxsX3BvaW50W0NVUlZFMjU1MTlfS0VZX1NJWkVdIF9fYWxpZ25lZCgzMikgPSB7IDAgfTsKKy1jb25zdCB1OCBjdXJ2ZTI1NTE5X2Jhc2VfcG9pbnRbQ1VSVkUyNTUxOV9LRVlfU0laRV0gX19hbGlnbmVkKDMyKSA9IHsgOSB9OworLQorLUVYUE9SVF9TWU1CT0woY3VydmUyNTUxOV9udWxsX3BvaW50KTsKKy1FWFBPUlRfU1lNQk9MKGN1cnZlMjU1MTlfYmFzZV9wb2ludCk7CistRVhQT1JUX1NZTUJPTChjdXJ2ZTI1NTE5X2dlbmVyaWMpOworLQorIHN0YXRpYyBpbnQgX19pbml0IG1vZF9pbml0KHZvaWQpCisgeworIAlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0NSWVBUT19NQU5BR0VSX0RJU0FCTEVfVEVTVFMpICYmCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDQ2LWNyeXB0by14ODYtcG9seTEzMDUtZml4LS5naXRpZ25vcmUtdHlwby5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNDYtY3J5cHRvLXg4Ni1wb2x5MTMwNS1maXgtLmdpdGlnbm9yZS10eXBvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZjA0MTcKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDQ2LWNyeXB0by14ODYtcG9seTEzMDUtZml4LS5naXRpZ25vcmUtdHlwby5wYXRjaApAQCAtMCwwICsxLDIzIEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogVGh1LCAxNiBKYW4gMjAyMCAxODoyMzo1NSArMDEwMAorU3ViamVjdDogW1BBVENIXSBjcnlwdG86IHg4Ni9wb2x5MTMwNSAtIGZpeCAuZ2l0aWdub3JlIHR5cG8KKworY29tbWl0IDFmNjg2ODk5NTMyNmNjODIxMDIwNDllMzQ5ZDhkYmQxMTZiZGI2NTYgdXBzdHJlYW0uCisKK0FkbWlzdCB0aGUga2J1aWxkIHJvYm90IGluZHVjZWQgY2hhbmdlcywgdGhlIC5naXRpZ25vcmUgZmlsZSBmb3IgdGhlCitnZW5lcmF0ZWQgZmlsZSB3YXNuJ3QgdXBkYXRlZCB3aXRoIHRoZSBub24tY2xhc2hpbmcgZmlsZW5hbWUuIFRoaXMKK2NvbW1pdCBhZGp1c3RzIHRoYXQuCisKK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorU2lnbmVkLW9mZi1ieTogSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBhcmNoL3g4Ni9jcnlwdG8vLmdpdGlnbm9yZSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworLS0tIGEvYXJjaC94ODYvY3J5cHRvLy5naXRpZ25vcmUKKysrKyBiL2FyY2gveDg2L2NyeXB0by8uZ2l0aWdub3JlCitAQCAtMSArMSBAQAorLXBvbHkxMzA1LXg4Nl82NC5TCisrcG9seTEzMDUteDg2XzY0LWNyeXB0b2dhbXMuUwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA0Ny1jcnlwdG8tY2hhY2hhMjBwb2x5MTMwNS1hZGQtYmFjay1taXNzaW5nLXRlc3QtdmVjdG9yLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA0Ny1jcnlwdG8tY2hhY2hhMjBwb2x5MTMwNS1hZGQtYmFjay1taXNzaW5nLXRlc3QtdmVjdG9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYTk2OTUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDQ3LWNyeXB0by1jaGFjaGEyMHBvbHkxMzA1LWFkZC1iYWNrLW1pc3NpbmctdGVzdC12ZWN0b3IucGF0Y2gKQEAgLTAsMCArMSwxODU4IEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogVGh1LCAxNiBKYW4gMjAyMCAyMToyNjozNCArMDEwMAorU3ViamVjdDogW1BBVENIXSBjcnlwdG86IGNoYWNoYTIwcG9seTEzMDUgLSBhZGQgYmFjayBtaXNzaW5nIHRlc3QgdmVjdG9ycyBhbmQKKyB0ZXN0IGNodW5raW5nCisKK2NvbW1pdCA3MmM3OTQzNzkyYzllNzc4OGRkZDE4MjMzN2JjZjhmNjUwY2Y1NmY1IHVwc3RyZWFtLgorCitXaGVuIHRoaXMgd2FzIG9yaWdpbmFsbHkgcG9ydGVkLCB0aGUgMTItYnl0ZSBub25jZSB2ZWN0b3JzIHdlcmUgbGVmdCBvdXQKK3RvIGtlZXAgdGhpbmdzIHNpbXBsZS4gSSBhZ3JlZSB0aGF0IHdlIGRvbid0IG5lZWQgbm9yIHdhbnQgYSBsaWJyYXJ5CitpbnRlcmZhY2UgZm9yIDEyLWJ5dGUgbm9uY2VzLiBCdXQgdGhlc2UgdGVzdCB2ZWN0b3JzIHdlcmUgc3BlY2lhbGx5CitjcmFmdGVkIHRvIGxvb2sgYXQgaXNzdWVzIGluIHRoZSB1bmRlcmx5aW5nIHByaW1pdGl2ZXMgYW5kIHJlbGF0ZWQKK2ludGVyYWN0aW9ucy4gIFRoZXJlZm9yZSwgd2UgYWN0dWFsbHkgd2FudCB0byBrZWVwIGFyb3VuZCBhbGwgb2YgdGhlCit0ZXN0IHZlY3RvcnMsIGFuZCBzaW1wbHkgaGF2ZSBhIGhlbHBlciBmdW5jdGlvbiB0byB0ZXN0IHRoZW0gd2l0aC4KKworU2Vjb25kbHksIHRoZSBzZ2xpc3QtYmFzZWQgY2h1bmtpbmcgY29kZSBpbiB0aGUgbGlicmFyeSBpbnRlcmZhY2UgaXMKK3JhdGhlciBjb21wbGljYXRlZCwgc28gdGhpcyBhZGRzIGEgZGV2ZWxvcGVyLW9ubHkgdGVzdCBmb3IgZW5zdXJpbmcgdGhhdAorYWxsIHRoZSBib29rIGtlZXBpbmcgaXMgY29ycmVjdCwgYWNyb3NzIGEgd2lkZSBhcnJheSBvZiBwb3NzaWJpbGl0aWVzLgorCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgbGliL2NyeXB0by9jaGFjaGEyMHBvbHkxMzA1LXNlbGZ0ZXN0LmMgfCAxNzEyICsrKysrKysrKysrKysrKysrKysrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCAxNjk4IGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQorCistLS0gYS9saWIvY3J5cHRvL2NoYWNoYTIwcG9seTEzMDUtc2VsZnRlc3QuYworKysrIGIvbGliL2NyeXB0by9jaGFjaGEyMHBvbHkxMzA1LXNlbGZ0ZXN0LmMKK0BAIC00LDYgKzQsNyBAQAorICAqLworIAorICNpbmNsdWRlIDxjcnlwdG8vY2hhY2hhMjBwb2x5MTMwNS5oPgorKyNpbmNsdWRlIDxjcnlwdG8vY2hhY2hhLmg+CisgI2luY2x1ZGUgPGNyeXB0by9wb2x5MTMwNS5oPgorIAorICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CitAQCAtMTkyNiw2ICsxOTI3LDExMDQgQEAgc3RhdGljIGNvbnN0IHU4IGVuY19rZXkwMTJbXSBfX2luaXRjb25zdAorIAkweDY1LCAweDkxLCAweDZlLCAweDJhLCAweDc5LCAweDIyLCAweGRhLCAweDY0CisgfTsKKyAKKysvKiB3eWNoZXByb29mIC0gcmZjNzUzOSAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwMTNbXSBfX2luaXRjb25zdCA9IHsKKysJMHg0YywgMHg2MSwgMHg2NCwgMHg2OSwgMHg2NSwgMHg3MywgMHgyMCwgMHg2MSwKKysJMHg2ZSwgMHg2NCwgMHgyMCwgMHg0NywgMHg2NSwgMHg2ZSwgMHg3NCwgMHg2YywKKysJMHg2NSwgMHg2ZCwgMHg2NSwgMHg2ZSwgMHgyMCwgMHg2ZiwgMHg2NiwgMHgyMCwKKysJMHg3NCwgMHg2OCwgMHg2NSwgMHgyMCwgMHg2MywgMHg2YywgMHg2MSwgMHg3MywKKysJMHg3MywgMHgyMCwgMHg2ZiwgMHg2NiwgMHgyMCwgMHgyNywgMHgzOSwgMHgzOSwKKysJMHgzYSwgMHgyMCwgMHg0OSwgMHg2NiwgMHgyMCwgMHg0OSwgMHgyMCwgMHg2MywKKysJMHg2ZiwgMHg3NSwgMHg2YywgMHg2NCwgMHgyMCwgMHg2ZiwgMHg2NiwgMHg2NiwKKysJMHg2NSwgMHg3MiwgMHgyMCwgMHg3OSwgMHg2ZiwgMHg3NSwgMHgyMCwgMHg2ZiwKKysJMHg2ZSwgMHg2YywgMHg3OSwgMHgyMCwgMHg2ZiwgMHg2ZSwgMHg2NSwgMHgyMCwKKysJMHg3NCwgMHg2OSwgMHg3MCwgMHgyMCwgMHg2NiwgMHg2ZiwgMHg3MiwgMHgyMCwKKysJMHg3NCwgMHg2OCwgMHg2NSwgMHgyMCwgMHg2NiwgMHg3NSwgMHg3NCwgMHg3NSwKKysJMHg3MiwgMHg2NSwgMHgyYywgMHgyMCwgMHg3MywgMHg3NSwgMHg2ZSwgMHg3MywKKysJMHg2MywgMHg3MiwgMHg2NSwgMHg2NSwgMHg2ZSwgMHgyMCwgMHg3NywgMHg2ZiwKKysJMHg3NSwgMHg2YywgMHg2NCwgMHgyMCwgMHg2MiwgMHg2NSwgMHgyMCwgMHg2OSwKKysJMHg3NCwgMHgyZQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQwMTNbXSBfX2luaXRjb25zdCA9IHsKKysJMHhkMywgMHgxYSwgMHg4ZCwgMHgzNCwgMHg2NCwgMHg4ZSwgMHg2MCwgMHhkYiwKKysJMHg3YiwgMHg4NiwgMHhhZiwgMHhiYywgMHg1MywgMHhlZiwgMHg3ZSwgMHhjMiwKKysJMHhhNCwgMHhhZCwgMHhlZCwgMHg1MSwgMHgyOSwgMHg2ZSwgMHgwOCwgMHhmZSwKKysJMHhhOSwgMHhlMiwgMHhiNSwgMHhhNywgMHgzNiwgMHhlZSwgMHg2MiwgMHhkNiwKKysJMHgzZCwgMHhiZSwgMHhhNCwgMHg1ZSwgMHg4YywgMHhhOSwgMHg2NywgMHgxMiwKKysJMHg4MiwgMHhmYSwgMHhmYiwgMHg2OSwgMHhkYSwgMHg5MiwgMHg3MiwgMHg4YiwKKysJMHgxYSwgMHg3MSwgMHhkZSwgMHgwYSwgMHg5ZSwgMHgwNiwgMHgwYiwgMHgyOSwKKysJMHgwNSwgMHhkNiwgMHhhNSwgMHhiNiwgMHg3ZSwgMHhjZCwgMHgzYiwgMHgzNiwKKysJMHg5MiwgMHhkZCwgMHhiZCwgMHg3ZiwgMHgyZCwgMHg3NywgMHg4YiwgMHg4YywKKysJMHg5OCwgMHgwMywgMHhhZSwgMHhlMywgMHgyOCwgMHgwOSwgMHgxYiwgMHg1OCwKKysJMHhmYSwgMHhiMywgMHgyNCwgMHhlNCwgMHhmYSwgMHhkNiwgMHg3NSwgMHg5NCwKKysJMHg1NSwgMHg4NSwgMHg4MCwgMHg4YiwgMHg0OCwgMHgzMSwgMHhkNywgMHhiYywKKysJMHgzZiwgMHhmNCwgMHhkZSwgMHhmMCwgMHg4ZSwgMHg0YiwgMHg3YSwgMHg5ZCwKKysJMHhlNSwgMHg3NiwgMHhkMiwgMHg2NSwgMHg4NiwgMHhjZSwgMHhjNiwgMHg0YiwKKysJMHg2MSwgMHgxNiwgMHgxYSwgMHhlMSwgMHgwYiwgMHg1OSwgMHg0ZiwgMHgwOSwKKysJMHhlMiwgMHg2YSwgMHg3ZSwgMHg5MCwgMHgyZSwgMHhjYiwgMHhkMCwgMHg2MCwKKysJMHgwNiwgMHg5MQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzAxM1tdIF9faW5pdGNvbnN0ID0geworKwkweDUwLCAweDUxLCAweDUyLCAweDUzLCAweGMwLCAweGMxLCAweGMyLCAweGMzLAorKwkweGM0LCAweGM1LCAweGM2LCAweGM3CisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX25vbmNlMDEzW10gX19pbml0Y29uc3QgPSB7CisrCTB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDEsIDB4NDIsIDB4NDMsCisrCTB4NDQsIDB4NDUsIDB4NDYsIDB4NDcKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfa2V5MDEzW10gX19pbml0Y29uc3QgPSB7CisrCTB4ODAsIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCisrCTB4ODgsIDB4ODksIDB4OGEsIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsCisrCTB4OTAsIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsCisrCTB4OTgsIDB4OTksIDB4OWEsIDB4OWIsIDB4OWMsIDB4OWQsIDB4OWUsIDB4OWYKKyt9OworKworKy8qIHd5Y2hlcHJvb2YgLSBtaXNjICovCisrc3RhdGljIGNvbnN0IHU4IGVuY19pbnB1dDAxNFtdIF9faW5pdGNvbnN0ID0geyB9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDE0W10gX19pbml0Y29uc3QgPSB7CisrCTB4NzYsIDB4YWMsIDB4YjMsIDB4NDIsIDB4Y2YsIDB4MzEsIDB4NjYsIDB4YTUsCisrCTB4YjYsIDB4M2MsIDB4MGMsIDB4MGUsIDB4YTEsIDB4MzgsIDB4M2MsIDB4OGQKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwMTRbXSBfX2luaXRjb25zdCA9IHsgfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX25vbmNlMDE0W10gX19pbml0Y29uc3QgPSB7CisrCTB4NGQsIDB4YTUsIDB4YmYsIDB4OGQsIDB4ZmQsIDB4NTgsIDB4NTIsIDB4YzEsCisrCTB4ZWEsIDB4MTIsIDB4MzcsIDB4OWQKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfa2V5MDE0W10gX19pbml0Y29uc3QgPSB7CisrCTB4ODAsIDB4YmEsIDB4MzEsIDB4OTIsIDB4YzgsIDB4MDMsIDB4Y2UsIDB4OTYsCisrCTB4NWUsIDB4YTMsIDB4NzEsIDB4ZDUsIDB4ZmYsIDB4MDcsIDB4M2MsIDB4ZjAsCisrCTB4ZjQsIDB4M2IsIDB4NmEsIDB4MmEsIDB4YjUsIDB4NzYsIDB4YjIsIDB4MDgsCisrCTB4NDIsIDB4NmUsIDB4MTEsIDB4NDAsIDB4OWMsIDB4MDksIDB4YjksIDB4YjAKKyt9OworKworKy8qIHd5Y2hlcHJvb2YgLSBtaXNjICovCisrc3RhdGljIGNvbnN0IHU4IGVuY19pbnB1dDAxNVtdIF9faW5pdGNvbnN0ID0geyB9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDE1W10gX19pbml0Y29uc3QgPSB7CisrCTB4OTAsIDB4NmYsIDB4YTYsIDB4MjgsIDB4NGIsIDB4NTIsIDB4ZjgsIDB4N2IsCisrCTB4NzMsIDB4NTksIDB4Y2IsIDB4YWEsIDB4NzUsIDB4NjMsIDB4YzcsIDB4MDkKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwMTVbXSBfX2luaXRjb25zdCA9IHsKKysJMHhiZCwgMHg1MCwgMHg2NywgMHg2NCwgMHhmMiwgMHhkMiwgMHhjNCwgMHgxMAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTAxNVtdIF9faW5pdGNvbnN0ID0geworKwkweGE5LCAweDJlLCAweGYwLCAweGFjLCAweDk5LCAweDFkLCAweGQ1LCAweDE2LAorKwkweGEzLCAweGM2LCAweGY2LCAweDg5CisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTAxNVtdIF9faW5pdGNvbnN0ID0geworKwkweDdhLCAweDRjLCAweGQ3LCAweDU5LCAweDE3LCAweDJlLCAweDAyLCAweGViLAorKwkweDIwLCAweDRkLCAweGIyLCAweGMzLCAweGY1LCAweGM3LCAweDQ2LCAweDIyLAorKwkweDdkLCAweGY1LCAweDg0LCAweGZjLCAweDEzLCAweDQ1LCAweDE5LCAweDYzLAorKwkweDkxLCAweGRiLCAweGI5LCAweDU3LCAweDdhLCAweDI1LCAweDA3LCAweDQyCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gbWlzYyAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwMTZbXSBfX2luaXRjb25zdCA9IHsKKysJMHgyYQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQwMTZbXSBfX2luaXRjb25zdCA9IHsKKysJMHgzYSwgMHhjYSwgMHhjMiwgMHg3ZCwgMHhlYywgMHgwOSwgMHg2OCwgMHg4MCwKKysJMHgxZSwgMHg5ZiwgMHg2ZSwgMHhkZSwgMHhkNiwgMHg5ZCwgMHg4MCwgMHg3NSwKKysJMHgyMgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzAxNltdIF9faW5pdGNvbnN0ID0geyB9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UwMTZbXSBfX2luaXRjb25zdCA9IHsKKysJMHg5OSwgMHhlMiwgMHgzZSwgMHhjNCwgMHg4OSwgMHg4NSwgMHhiYywgMHhjZCwKKysJMHhlZSwgMHhhYiwgMHg2MCwgMHhmMQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkwMTZbXSBfX2luaXRjb25zdCA9IHsKKysJMHhjYywgMHg1NiwgMHhiNiwgMHg4MCwgMHg1NSwgMHgyZSwgMHhiNywgMHg1MCwKKysJMHgwOCwgMHhmNSwgMHg0OCwgMHg0YiwgMHg0YywgMHhiOCwgMHgwMywgMHhmYSwKKysJMHg1MCwgMHg2MywgMHhlYiwgMHhkNiwgMHhlYSwgMHhiOSwgMHgxZiwgMHg2YSwKKysJMHhiNiwgMHhhZSwgMHhmNCwgMHg5MSwgMHg2YSwgMHg3NiwgMHg2MiwgMHg3MworK307CisrCisrLyogd3ljaGVwcm9vZiAtIG1pc2MgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDE3W10gX19pbml0Y29uc3QgPSB7CisrCTB4NTEKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDE3W10gX19pbml0Y29uc3QgPSB7CisrCTB4YzQsIDB4MTYsIDB4ODMsIDB4MTAsIDB4Y2EsIDB4NDUsIDB4YjEsIDB4ZjcsCisrCTB4YzYsIDB4NmMsIDB4YWQsIDB4NGUsIDB4OTksIDB4ZTQsIDB4M2YsIDB4NzIsCisrCTB4YjkKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwMTdbXSBfX2luaXRjb25zdCA9IHsKKysJMHg5MSwgMHhjYSwgMHg2YywgMHg1OSwgMHgyYywgMHhiYywgMHhjYSwgMHg1MworK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTAxN1tdIF9faW5pdGNvbnN0ID0geworKwkweGFiLCAweDBkLCAweGNhLCAweDcxLCAweDZlLCAweGUwLCAweDUxLCAweGQyLAorKwkweDc4LCAweDJmLCAweDQ0LCAweDAzCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTAxN1tdIF9faW5pdGNvbnN0ID0geworKwkweDQ2LCAweGYwLCAweDI1LCAweDQ5LCAweDY1LCAweGY3LCAweDY5LCAweGQ1LAorKwkweDJiLCAweGRiLCAweDRhLCAweDcwLCAweGI0LCAweDQzLCAweDE5LCAweDlmLAorKwkweDhlLCAweGYyLCAweDA3LCAweDUyLCAweDBkLCAweDEyLCAweDIwLCAweGM1LAorKwkweDVlLCAweDRiLCAweDcwLCAweGYwLCAweGZkLCAweGE2LCAweDIwLCAweGVlCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gbWlzYyAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwMThbXSBfX2luaXRjb25zdCA9IHsKKysJMHg1YywgMHg2MAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQwMThbXSBfX2luaXRjb25zdCA9IHsKKysJMHg0ZCwgMHgxMywgMHg5MSwgMHhlOCwgMHhiNiwgMHgxZSwgMHhmYiwgMHgzOSwKKysJMHhjMSwgMHgyMiwgMHgxOSwgMHg1NCwgMHg1MywgMHgwNywgMHg3YiwgMHgyMiwKKysJMHhlNSwgMHhlMgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzAxOFtdIF9faW5pdGNvbnN0ID0geyB9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UwMThbXSBfX2luaXRjb25zdCA9IHsKKysJMHg0NiwgMHgxYSwgMHhmMSwgMHgyMiwgMHhlOSwgMHhmMiwgMHhlMCwgMHgzNCwKKysJMHg3ZSwgMHgwMywgMHhmMiwgMHhkYgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkwMThbXSBfX2luaXRjb25zdCA9IHsKKysJMHgyZiwgMHg3ZiwgMHg3ZSwgMHg0ZiwgMHg1OSwgMHgyYiwgMHhiMywgMHg4OSwKKysJMHgxOSwgMHg0OSwgMHg4OSwgMHg3NCwgMHgzNSwgMHgwNywgMHhiZiwgMHgzZSwKKysJMHhlOSwgMHhjYiwgMHhkZSwgMHgxNywgMHg4NiwgMHhiNiwgMHg2OSwgMHg1ZiwKKysJMHhlNiwgMHhjMCwgMHgyNSwgMHhmZCwgMHg5YiwgMHhhNCwgMHhjMSwgMHgwMAorK307CisrCisrLyogd3ljaGVwcm9vZiAtIG1pc2MgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDE5W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZGQsIDB4ZjIKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDE5W10gX19pbml0Y29uc3QgPSB7CisrCTB4YjYsIDB4MGQsIDB4ZWEsIDB4ZDAsIDB4ZmQsIDB4NDYsIDB4OTcsIDB4ZWMsCisrCTB4MmUsIDB4NTUsIDB4NTgsIDB4MjMsIDB4NzcsIDB4MTksIDB4ZDAsIDB4MjQsCisrCTB4MzcsIDB4YTIKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwMTlbXSBfX2luaXRjb25zdCA9IHsKKysJMHg4OCwgMHgzNiwgMHg0ZiwgMHhjOCwgMHgwNiwgMHgwNSwgMHgxOCwgMHhiZgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTAxOVtdIF9faW5pdGNvbnN0ID0geworKwkweDYxLCAweDU0LCAweDZiLCAweGE1LCAweGYxLCAweDcyLCAweDA1LCAweDkwLAorKwkweGI2LCAweDA0LCAweDBhLCAweGM2CisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTAxOVtdIF9faW5pdGNvbnN0ID0geworKwkweGM4LCAweDgzLCAweDNkLCAweGNlLCAweDVlLCAweGE5LCAweGYyLCAweDQ4LAorKwkweGFhLCAweDIwLCAweDMwLCAweGVhLCAweGNmLCAweGU3LCAweDJiLCAweGZmLAorKwkweGU2LCAweDlhLCAweDYyLCAweDBjLCAweGFmLCAweDc5LCAweDMzLCAweDQ0LAorKwkweGU1LCAweDcxLCAweDhmLCAweGUwLCAweGQ3LCAweGFiLCAweDFhLCAweDU4CisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gbWlzYyAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwMjBbXSBfX2luaXRjb25zdCA9IHsKKysJMHhhYiwgMHg4NSwgMHhlOSwgMHhjMSwgMHg1NywgMHgxNywgMHgzMQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQwMjBbXSBfX2luaXRjb25zdCA9IHsKKysJMHg1ZCwgMHhmZSwgMHgzNCwgMHg0MCwgMHhkYiwgMHhiMywgMHhjMywgMHhlZCwKKysJMHg3YSwgMHg0MywgMHg0ZSwgMHgyNiwgMHgwMiwgMHhkMywgMHg5NCwgMHgyOCwKKysJMHgxZSwgMHgwYSwgMHhmYSwgMHg5ZiwgMHhiNywgMHhhYSwgMHg0MgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzAyMFtdIF9faW5pdGNvbnN0ID0geyB9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UwMjBbXSBfX2luaXRjb25zdCA9IHsKKysJMHgzYywgMHg0ZSwgMHg2NSwgMHg0ZCwgMHg2NiwgMHgzZiwgMHhhNCwgMHg1OSwKKysJMHg2ZCwgMHhjNSwgMHg1YiwgMHhiNworK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkwMjBbXSBfX2luaXRjb25zdCA9IHsKKysJMHg1NSwgMHg1NiwgMHg4MSwgMHg1OCwgMHhkMywgMHhhNiwgMHg0OCwgMHgzZiwKKysJMHgxZiwgMHg3MCwgMHgyMSwgMHhlYSwgMHhiNiwgMHg5YiwgMHg3MCwgMHgzZiwKKysJMHg2MSwgMHg0MiwgMHg1MSwgMHhjYSwgMHhkYywgMHgxYSwgMHhmNSwgMHhkMywKKysJMHg0YSwgMHgzNywgMHg0ZiwgMHhkYiwgMHhmYywgMHg1YSwgMHhkYSwgMHhjNworK307CisrCisrLyogd3ljaGVwcm9vZiAtIG1pc2MgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDIxW10gX19pbml0Y29uc3QgPSB7CisrCTB4NGUsIDB4ZTUsIDB4Y2QsIDB4YTIsIDB4MGQsIDB4NDIsIDB4OTAKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDIxW10gX19pbml0Y29uc3QgPSB7CisrCTB4NGIsIDB4ZDQsIDB4NzIsIDB4MTIsIDB4OTQsIDB4MWMsIDB4ZTMsIDB4MTgsCisrCTB4NWYsIDB4MTQsIDB4MDgsIDB4ZWUsIDB4N2YsIDB4YmYsIDB4MTgsIDB4ZjUsCisrCTB4YWIsIDB4YWQsIDB4NmUsIDB4MjIsIDB4NTMsIDB4YTEsIDB4YmEKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwMjFbXSBfX2luaXRjb25zdCA9IHsKKysJMHg4NCwgMHhlNCwgMHg2YiwgMHhlOCwgMHhjMCwgMHg5MSwgMHg5MCwgMHg1MworK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTAyMVtdIF9faW5pdGNvbnN0ID0geworKwkweDU4LCAweDM4LCAweDkzLCAweDc1LCAweGM2LCAweDllLCAweGUzLCAweDk4LAorKwkweGRlLCAweDk0LCAweDgzLCAweDk2CisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTAyMVtdIF9faW5pdGNvbnN0ID0geworKwkweGUzLCAweGMwLCAweDllLCAweDdmLCAweGFiLCAweDFhLCAweGVmLCAweGI1LAorKwkweDE2LCAweGRhLCAweDZhLCAweDMzLCAweDAyLCAweDJhLCAweDFkLCAweGQ0LAorKwkweGViLCAweDI3LCAweDJjLCAweDgwLCAweGQ1LCAweDQwLCAweGM1LCAweGRhLAorKwkweDUyLCAweGE3LCAweDMwLCAweGYzLCAweDRkLCAweDg0LCAweDBkLCAweDdmCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gbWlzYyAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwMjJbXSBfX2luaXRjb25zdCA9IHsKKysJMHhiZSwgMHgzMywgMHgwOCwgMHhmNywgMHgyYSwgMHgyYywgMHg2YSwgMHhlZAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQwMjJbXSBfX2luaXRjb25zdCA9IHsKKysJMHg4ZSwgMHg5NCwgMHgzOSwgMHhhNSwgMHg2ZSwgMHhlZSwgMHhjOCwgMHgxNywKKysJMHhmYiwgMHhlOCwgMHhhNiwgMHhlZCwgMHg4ZiwgMHhhYiwgMHhiMSwgMHg5MywKKysJMHg3NSwgMHgzOSwgMHhkZCwgMHg2YywgMHgwMCwgMHhlOSwgMHgwMCwgMHgyMQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzAyMltdIF9faW5pdGNvbnN0ID0geyB9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UwMjJbXSBfX2luaXRjb25zdCA9IHsKKysJMHg0ZiwgMHgwNywgMHhhZiwgMHhlZCwgMHhmZCwgMHhjMywgMHhiNiwgMHhjMiwKKysJMHgzNiwgMHgxOCwgMHgyMywgMHhkMworK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkwMjJbXSBfX2luaXRjb25zdCA9IHsKKysJMHg1MSwgMHhlNCwgMHhiZiwgMHgyYiwgMHhhZCwgMHg5MiwgMHhiNywgMHhhZiwKKysJMHhmMSwgMHhhNCwgMHhiYywgMHgwNSwgMHg1NSwgMHgwYiwgMHhhOCwgMHgxZCwKKysJMHhmNCwgMHhiOSwgMHg2ZiwgMHhhYiwgMHhmNCwgMHgxYywgMHgxMiwgMHhjNywKKysJMHhiMCwgMHgwZSwgMHg2MCwgMHhlNCwgMHg4ZCwgMHhiNywgMHhlMSwgMHg1MgorK307CisrCisrLyogd3ljaGVwcm9vZiAtIG1pc2MgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDIzW10gX19pbml0Y29uc3QgPSB7CisrCTB4YTQsIDB4YzksIDB4YzIsIDB4ODAsIDB4MWIsIDB4NzEsIDB4ZjcsIDB4ZGYKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDIzW10gX19pbml0Y29uc3QgPSB7CisrCTB4YjksIDB4YjksIDB4MTAsIDB4NDMsIDB4M2EsIDB4ZjAsIDB4NTIsIDB4YjAsCisrCTB4NDUsIDB4MzAsIDB4ZjUsIDB4MWEsIDB4ZWUsIDB4ZTAsIDB4MjQsIDB4ZTAsCisrCTB4YTQsIDB4NDUsIDB4YTYsIDB4MzIsIDB4OGYsIDB4YTYsIDB4N2EsIDB4MTgKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwMjNbXSBfX2luaXRjb25zdCA9IHsKKysJMHg2NiwgMHhjMCwgMHhhZSwgMHg3MCwgMHgwNywgMHg2YywgMHhiMSwgMHg0ZAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTAyM1tdIF9faW5pdGNvbnN0ID0geworKwkweGI0LCAweGVhLCAweDY2LCAweDZlLCAweGUxLCAweDE5LCAweDU2LCAweDMzLAorKwkweDY2LCAweDQ4LCAweDRhLCAweDc4CisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTAyM1tdIF9faW5pdGNvbnN0ID0geworKwkweDExLCAweDMxLCAweGMxLCAweDQxLCAweDg1LCAweDc3LCAweGEwLCAweDU0LAorKwkweGRlLCAweDdhLCAweDRhLCAweGM1LCAweDUxLCAweDk1LCAweDBmLCAweDFhLAorKwkweDA1LCAweDNmLCAweDlhLCAweGU0LCAweDZlLCAweDViLCAweDc1LCAweGZlLAorKwkweDRhLCAweGJkLCAweDU2LCAweDA4LCAweGQ3LCAweGNkLCAweGRhLCAweGRkCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gbWlzYyAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwMjRbXSBfX2luaXRjb25zdCA9IHsKKysJMHg0MiwgMHhiYSwgMHhhZSwgMHg1OSwgMHg3OCwgMHhmZSwgMHhhZiwgMHg1YywKKysJMHgzNiwgMHg4ZCwgMHgxNCwgMHhlMAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQwMjRbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHg3ZCwgMHhjMiwgMHgwMywgMHhiMiwgMHg2YywgMHg0NiwgMHg3YSwKKysJMHg2YiwgMHg1MCwgMHhkYiwgMHgzMywgMHg1NywgMHg4YywgMHgwZiwgMHgyNywKKysJMHg1OCwgMHhjMiwgMHhlMSwgMHg0ZSwgMHgzNiwgMHhkNCwgMHhmYywgMHgxMCwKKysJMHg2ZCwgMHhjYiwgMHgyOSwgMHhiNAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzAyNFtdIF9faW5pdGNvbnN0ID0geyB9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UwMjRbXSBfX2luaXRjb25zdCA9IHsKKysJMHg5YSwgMHg1OSwgMHhmYywgMHhlMiwgMHg2ZCwgMHhmMCwgMHgwMCwgMHg1ZSwKKysJMHgwNywgMHg1MywgMHg4NiwgMHg1NgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkwMjRbXSBfX2luaXRjb25zdCA9IHsKKysJMHg5OSwgMHhiNiwgMHgyYiwgMHhkNSwgMHhhZiwgMHhiZSwgMHgzZiwgMHhiMCwKKysJMHgxNSwgMHhiZCwgMHhlOSwgMHgzZiwgMHgwYSwgMHhiZiwgMHg0OCwgMHgzOSwKKysJMHg1NywgMHhhMSwgMHhjMywgMHhlYiwgMHgzYywgMHhhNSwgMHg5YywgMHhiNSwKKysJMHgwYiwgMHgzOSwgMHhmNywgMHhmOCwgMHhhOSwgMHhjYywgMHg1MSwgMHhiZQorK307CisrCisrLyogd3ljaGVwcm9vZiAtIG1pc2MgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDI1W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmQsIDB4YzgsIDB4NWIsIDB4OTQsIDB4YTQsIDB4YjIsIDB4YTYsIDB4YjcsCisrCTB4NTksIDB4YjEsIDB4YTAsIDB4ZGEKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDI1W10gX19pbml0Y29uc3QgPSB7CisrCTB4OWYsIDB4ODgsIDB4MTYsIDB4ZGUsIDB4MDksIDB4OTQsIDB4ZTksIDB4MzgsCisrCTB4ZDksIDB4ZTUsIDB4M2YsIDB4OTUsIDB4ZDAsIDB4ODYsIDB4ZmMsIDB4NmMsCisrCTB4OWQsIDB4OGYsIDB4YTksIDB4MTUsIDB4ZmQsIDB4ODQsIDB4MjMsIDB4YTcsCisrCTB4Y2YsIDB4MDUsIDB4MDcsIDB4MmYKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwMjVbXSBfX2luaXRjb25zdCA9IHsKKysJMHhhNSwgMHgwNiwgMHhlMSwgMHhhNSwgMHhjNiwgMHg5MCwgMHg5MywgMHhmOQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTAyNVtdIF9faW5pdGNvbnN0ID0geworKwkweDU4LCAweGRiLCAweGQ0LCAweGFkLCAweDJjLCAweDRhLCAweGQzLCAweDVkLAorKwkweGQ5LCAweDA2LCAweGU5LCAweGNlCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTAyNVtdIF9faW5pdGNvbnN0ID0geworKwkweDg1LCAweGYzLCAweDViLCAweDYyLCAweDgyLCAweGNmLCAweGY0LCAweDQwLAorKwkweGJjLCAweDEwLCAweDIwLCAweGM4LCAweDEzLCAweDZmLCAweGYyLCAweDcwLAorKwkweDMxLCAweDExLCAweDBmLCAweGE2LCAweDNlLCAweGMxLCAweDZmLCAweDFlLAorKwkweDgyLCAweDUxLCAweDE4LCAweGIwLCAweDA2LCAweGI5LCAweDEyLCAweDU3CisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gbWlzYyAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwMjZbXSBfX2luaXRjb25zdCA9IHsKKysJMHg1MSwgMHhmOCwgMHhjMSwgMHhmNywgMHgzMSwgMHhlYSwgMHgxNCwgMHhhYywKKysJMHhkYiwgMHgyMSwgMHgwYSwgMHg2ZCwgMHg5NywgMHgzZSwgMHgwNworK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQwMjZbXSBfX2luaXRjb25zdCA9IHsKKysJMHgwYiwgMHgyOSwgMHg2MywgMHg4ZSwgMHgxZiwgMHhiZCwgMHhkNiwgMHhkZiwKKysJMHg1MywgMHg5NywgMHgwYiwgMHhlMiwgMHgyMSwgMHgwMCwgMHg0MiwgMHgyYSwKKysJMHg5MSwgMHgzNCwgMHgwOCwgMHg3ZCwgMHg2NywgMHhhNCwgMHg2ZSwgMHg3OSwKKysJMHgxNywgMHg4ZCwgMHgwYSwgMHg5MywgMHhmNSwgMHhlMSwgMHhkMgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzAyNltdIF9faW5pdGNvbnN0ID0geyB9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UwMjZbXSBfX2luaXRjb25zdCA9IHsKKysJMHg2OCwgMHhhYiwgMHg3ZiwgMHhkYiwgMHhmNiwgMHgxOSwgMHgwMSwgMHhkYSwKKysJMHhkNCwgMHg2MSwgMHhkMiwgMHgzYworK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkwMjZbXSBfX2luaXRjb25zdCA9IHsKKysJMHg2NywgMHgxMSwgMHg5NiwgMHgyNywgMHhiZCwgMHg5OCwgMHg4ZSwgMHhkYSwKKysJMHg5MCwgMHg2MiwgMHgxOSwgMHhlMCwgMHg4YywgMHgwZCwgMHgwZCwgMHg3NywKKysJMHg5YSwgMHgwNywgMHhkMiwgMHgwOCwgMHhjZSwgMHg4YSwgMHg0ZiwgMHhlMCwKKysJMHg3MCwgMHg5YSwgMHhmNywgMHg1NSwgMHhlZSwgMHhlYywgMHg2ZCwgMHhjYgorK307CisrCisrLyogd3ljaGVwcm9vZiAtIG1pc2MgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDI3W10gX19pbml0Y29uc3QgPSB7CisrCTB4OTcsIDB4NDYsIDB4OWQsIDB4YTYsIDB4NjcsIDB4ZDYsIDB4MTEsIDB4MGYsCisrCTB4OWMsIDB4YmQsIDB4YTEsIDB4ZDEsIDB4YTIsIDB4MDYsIDB4NzMKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDI3W10gX19pbml0Y29uc3QgPSB7CisrCTB4MzIsIDB4ZGIsIDB4NjYsIDB4YzQsIDB4YTMsIDB4ODEsIDB4OWQsIDB4ODEsCisrCTB4NTUsIDB4NzQsIDB4NTUsIDB4ZTUsIDB4OTgsIDB4MGYsIDB4ZWQsIDB4ZmUsCisrCTB4YWUsIDB4MzAsIDB4ZGUsIDB4YzksIDB4NGUsIDB4NmEsIDB4ZDMsIDB4YTksCisrCTB4ZWUsIDB4YTAsIDB4NmEsIDB4MGQsIDB4NzAsIDB4MzksIDB4MTcKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwMjdbXSBfX2luaXRjb25zdCA9IHsKKysJMHg2NCwgMHg1MywgMHhhNSwgMHgzMywgMHg4NCwgMHg2MywgMHgyMiwgMHgxMgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTAyN1tdIF9faW5pdGNvbnN0ID0geworKwkweGQ5LCAweDViLCAweDMyLCAweDQzLCAweGFmLCAweGFlLCAweGY3LCAweDE0LAorKwkweGM1LCAweDAzLCAweDViLCAweDZhCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTAyN1tdIF9faW5pdGNvbnN0ID0geworKwkweGU2LCAweGYxLCAweDExLCAweDhkLCAweDQxLCAweGU0LCAweGI0LCAweDNmLAorKwkweGI1LCAweDgyLCAweDIxLCAweGI3LCAweGVkLCAweDc5LCAweDY3LCAweDM4LAorKwkweDM0LCAweGUwLCAweGQ4LCAweGFjLCAweDVjLCAweDRmLCAweGE2LCAweDBiLAorKwkweGJjLCAweDhiLCAweGM0LCAweDg5LCAweDNhLCAweDU4LCAweDg5LCAweDRkCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gbWlzYyAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwMjhbXSBfX2luaXRjb25zdCA9IHsKKysJMHg1NCwgMHg5YiwgMHgzNiwgMHg1YSwgMHhmOSwgMHgxMywgMHhmMywgMHhiMCwKKysJMHg4MSwgMHgxMywgMHgxYywgMHhjYiwgMHg2YiwgMHg4MiwgMHg1NSwgMHg4OAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQwMjhbXSBfX2luaXRjb25zdCA9IHsKKysJMHhlOSwgMHgxMSwgMHgwZSwgMHg5ZiwgMHg1NiwgMHhhYiwgMHgzYywgMHhhNCwKKysJMHg4MywgMHg1MCwgMHgwYywgMHhlYSwgMHhiYSwgMHhiNiwgMHg3YSwgMHgxMywKKysJMHg4MywgMHg2YywgMHhjYSwgMHhiZiwgMHgxNSwgMHhhNiwgMHhhMiwgMHgyYSwKKysJMHg1MSwgMHhjMSwgMHgwNywgMHgxYywgMHhmYSwgMHg2OCwgMHhmYSwgMHgwYworK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzAyOFtdIF9faW5pdGNvbnN0ID0geyB9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UwMjhbXSBfX2luaXRjb25zdCA9IHsKKysJMHgyZiwgMHhjYiwgMHgxYiwgMHgzOCwgMHhhOSwgMHg5ZSwgMHg3MSwgMHhiOCwKKysJMHg0NywgMHg0MCwgMHhhZCwgMHg5YgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkwMjhbXSBfX2luaXRjb25zdCA9IHsKKysJMHg1OSwgMHhkNCwgMHhlYSwgMHhmYiwgMHg0ZCwgMHhlMCwgMHhjZiwgMHhjNywKKysJMHhkMywgMHhkYiwgMHg5OSwgMHhhOCwgMHhmNSwgMHg0YiwgMHgxNSwgMHhkNywKKysJMHhiMywgMHg5ZiwgMHgwYSwgMHhjYywgMHg4ZCwgMHhhNiwgMHg5NywgMHg2MywKKysJMHhiMCwgMHgxOSwgMHhjMSwgMHg2OSwgMHg5ZiwgMHg4NywgMHg2NywgMHg0YQorK307CisrCisrLyogd3ljaGVwcm9vZiAtIG1pc2MgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDI5W10gX19pbml0Y29uc3QgPSB7CisrCTB4NTUsIDB4YTQsIDB4NjUsIDB4NjQsIDB4NGYsIDB4NWIsIDB4NjUsIDB4MDksCisrCTB4MjgsIDB4Y2IsIDB4ZWUsIDB4N2MsIDB4MDYsIDB4MzIsIDB4MTQsIDB4ZDYKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDI5W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZTQsIDB4YjEsIDB4MTMsIDB4Y2IsIDB4NzcsIDB4NTksIDB4NDUsIDB4ZjMsCisrCTB4ZDMsIDB4YTgsIDB4YWUsIDB4OWUsIDB4YzEsIDB4NDEsIDB4YzAsIDB4MGMsCisrCTB4N2MsIDB4NDMsIDB4ZjEsIDB4NmMsIDB4ZTAsIDB4OTYsIDB4ZDAsIDB4ZGMsCisrCTB4MjcsIDB4YzksIDB4NTgsIDB4NDksIDB4ZGMsIDB4MzgsIDB4M2IsIDB4N2QKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwMjlbXSBfX2luaXRjb25zdCA9IHsKKysJMHgwMywgMHg0NSwgMHg4NSwgMHg2MiwgMHgxYSwgMHhmOCwgMHhkNywgMHhmZgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTAyOVtdIF9faW5pdGNvbnN0ID0geworKwkweDExLCAweDhhLCAweDY5LCAweDY0LCAweGMyLCAweGQzLCAweGUzLCAweDgwLAorKwkweDA3LCAweDFmLCAweDUyLCAweDY2CisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTAyOVtdIF9faW5pdGNvbnN0ID0geworKwkweGI5LCAweDA3LCAweGE0LCAweDUwLCAweDc1LCAweDUxLCAweDNmLCAweGU4LAorKwkweGE4LCAweDAxLCAweDllLCAweGRlLCAweGUzLCAweGYyLCAweDU5LCAweDE0LAorKwkweDg3LCAweGIyLCAweGEwLCAweDMwLCAweGIwLCAweDNjLCAweDZlLCAweDFkLAorKwkweDc3LCAweDFjLCAweDg2LCAweDI1LCAweDcxLCAweGQyLCAweGVhLCAweDFlCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gbWlzYyAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwMzBbXSBfX2luaXRjb25zdCA9IHsKKysJMHgzZiwgMHhmMSwgMHg1MSwgMHg0YiwgMHgxYywgMHg1MCwgMHgzOSwgMHgxNSwKKysJMHg5MSwgMHg4ZiwgMHgwYywgMHgwYywgMHgzMSwgMHgwOSwgMHg0YSwgMHg2ZSwKKysJMHgxZgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQwMzBbXSBfX2luaXRjb25zdCA9IHsKKysJMHgwMiwgMHhjYywgMHgzYSwgMHhjYiwgMHg1ZSwgMHhlMSwgMHhmYywgMHhkZCwKKysJMHgxMiwgMHhhMCwgMHgzYiwgMHhiOCwgMHg1NywgMHg5NywgMHg2NCwgMHg3NCwKKysJMHhkMywgMHhkOCwgMHgzYiwgMHg3NCwgMHg2MywgMHhhMiwgMHhjMywgMHg4MCwKKysJMHgwZiwgMHhlOSwgMHg1OCwgMHhjMiwgMHg4ZSwgMHhhYSwgMHgyOSwgMHgwOCwKKysJMHgxMworK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzAzMFtdIF9faW5pdGNvbnN0ID0geyB9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UwMzBbXSBfX2luaXRjb25zdCA9IHsKKysJMHg0NSwgMHhhYSwgMHhhMywgMHhlNSwgMHhkMSwgMHg2ZCwgMHgyZCwgMHg0MiwKKysJMHhkYywgMHgwMywgMHg0NCwgMHg1ZAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkwMzBbXSBfX2luaXRjb25zdCA9IHsKKysJMHgzYiwgMHgyNCwgMHg1OCwgMHhkOCwgMHgxNywgMHg2ZSwgMHgxNiwgMHgyMSwKKysJMHhjMCwgMHhjYywgMHgyNCwgMHhjMCwgMHhjMCwgMHhlMiwgMHg0YywgMHgxZSwKKysJMHg4MCwgMHhkNywgMHgyZiwgMHg3ZSwgMHhlOSwgMHgxNCwgMHg5YSwgMHg0YiwKKysJMHgxNiwgMHg2MSwgMHg3NiwgMHg2MiwgMHg5NiwgMHgxNiwgMHhkMCwgMHgxMQorK307CisrCisrLyogd3ljaGVwcm9vZiAtIG1pc2MgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDMxW10gX19pbml0Y29uc3QgPSB7CisrCTB4NjMsIDB4ODUsIDB4OGMsIDB4YTMsIDB4ZTIsIDB4Y2UsIDB4NjksIDB4ODgsCisrCTB4N2IsIDB4NTcsIDB4OGEsIDB4M2MsIDB4MTYsIDB4N2IsIDB4NDIsIDB4MWMsCisrCTB4OWMKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDMxW10gX19pbml0Y29uc3QgPSB7CisrCTB4MzUsIDB4NzYsIDB4NjQsIDB4ODgsIDB4ZDIsIDB4YmMsIDB4N2MsIDB4MmIsCisrCTB4OGQsIDB4MTcsIDB4Y2IsIDB4YmIsIDB4OWEsIDB4YmYsIDB4YWQsIDB4OWUsCisrCTB4NmQsIDB4MWYsIDB4MzksIDB4MWUsIDB4NjUsIDB4N2IsIDB4MjcsIDB4MzgsCisrCTB4ZGQsIDB4YTAsIDB4ODQsIDB4NDgsIDB4Y2IsIDB4YTIsIDB4ODEsIDB4MWMsCisrCTB4ZWIKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwMzFbXSBfX2luaXRjb25zdCA9IHsKKysJMHg5YSwgMHhhZiwgMHgyOSwgMHg5ZSwgMHhlZSwgMHhhNywgMHg4ZiwgMHg3OQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTAzMVtdIF9faW5pdGNvbnN0ID0geworKwkweGYwLCAweDM4LCAweDRmLCAweGI4LCAweDc2LCAweDEyLCAweDE0LCAweDEwLAorKwkweDYzLCAweDNkLCAweDk5LCAweDNkCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTAzMVtdIF9faW5pdGNvbnN0ID0geworKwkweGY2LCAweDBjLCAweDZhLCAweDFiLCAweDYyLCAweDU3LCAweDI1LCAweGY3LAorKwkweDZjLCAweDcwLCAweDM3LCAweGI0LCAweDhmLCAweGUzLCAweDU3LCAweDdmLAorKwkweGE3LCAweGY3LCAweGI4LCAweDdiLCAweDFiLCAweGQ1LCAweGE5LCAweDgyLAorKwkweDE3LCAweDZkLCAweDE4LCAweDIzLCAweDA2LCAweGZmLCAweGI4LCAweDcwCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gbWlzYyAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwMzJbXSBfX2luaXRjb25zdCA9IHsKKysJMHgxMCwgMHhmMSwgMHhlYywgMHhmOSwgMHhjNiwgMHgwNSwgMHg4NCwgMHg2NiwKKysJMHg1ZCwgMHg5YSwgMHhlNSwgMHhlZiwgMHhlMiwgMHg3OSwgMHhlNywgMHhmNywKKysJMHgzNywgMHg3ZSwgMHhlYSwgMHg2OSwgMHgxNiwgMHhkMiwgMHhiMSwgMHgxMQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQwMzJbXSBfX2luaXRjb25zdCA9IHsKKysJMHg0MiwgMHhmMiwgMHg2YywgMHg1NiwgMHhjYiwgMHg0YiwgMHhlMiwgMHgxZCwKKysJMHg5ZCwgMHg4ZCwgMHgwYywgMHg4MCwgMHhmYywgMHg5OSwgMHhkZCwgMHhlMCwKKysJMHgwZCwgMHg3NSwgMHhmMywgMHg4MCwgMHg3NCwgMHhiZiwgMHhlNywgMHg2NCwKKysJMHg1NCwgMHhhYSwgMHg3ZSwgMHgxMywgMHhkNCwgMHg4ZiwgMHhmZiwgMHg3ZCwKKysJMHg3NSwgMHg1NywgMHgwMywgMHg5NCwgMHg1NywgMHgwNCwgMHgwYSwgMHgzYQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzAzMltdIF9faW5pdGNvbnN0ID0geyB9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UwMzJbXSBfX2luaXRjb25zdCA9IHsKKysJMHhlNiwgMHhiMSwgMHhhZCwgMHhmMiwgMHhmZCwgMHg1OCwgMHhhOCwgMHg3NiwKKysJMHgyYywgMHg2NSwgMHhmMywgMHgxYgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkwMzJbXSBfX2luaXRjb25zdCA9IHsKKysJMHgwMiwgMHgxMiwgMHhhOCwgMHhkZSwgMHg1MCwgMHgwNywgMHhlZCwgMHg4NywKKysJMHhiMywgMHgzZiwgMHgxYSwgMHg3MCwgMHg5MCwgMHhiNiwgMHgxMSwgMHg0ZiwKKysJMHg5ZSwgMHgwOCwgMHhjZSwgMHhmZCwgMHg5NiwgMHgwNywgMHhmMiwgMHhjMiwKKysJMHg3NiwgMHhiZCwgMHhjZiwgMHhkYiwgMHhjNSwgMHhjZSwgMHg5YywgMHhkNworK307CisrCisrLyogd3ljaGVwcm9vZiAtIG1pc2MgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDMzW10gX19pbml0Y29uc3QgPSB7CisrCTB4OTIsIDB4MjIsIDB4ZjksIDB4MDEsIDB4OGUsIDB4NTQsIDB4ZmQsIDB4NmQsCisrCTB4ZTEsIDB4MjAsIDB4MDgsIDB4MDYsIDB4YTksIDB4ZWUsIDB4OGUsIDB4NGMsCisrCTB4YzksIDB4MDQsIDB4ZDIsIDB4OWYsIDB4MjUsIDB4Y2IsIDB4YTEsIDB4OTMKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDMzW10gX19pbml0Y29uc3QgPSB7CisrCTB4MTIsIDB4MzAsIDB4MzIsIDB4NDMsIDB4N2IsIDB4NGIsIDB4ZmQsIDB4NjksCisrCTB4MjAsIDB4ZTgsIDB4ZjcsIDB4ZTcsIDB4ZTAsIDB4MDgsIDB4N2EsIDB4ZTQsCisrCTB4ODgsIDB4OWUsIDB4YmUsIDB4N2EsIDB4MGEsIDB4ZDAsIDB4ZTksIDB4MDAsCisrCTB4M2MsIDB4ZjYsIDB4OGYsIDB4MTcsIDB4OTUsIDB4NTAsIDB4ZGEsIDB4NjMsCisrCTB4ZDMsIDB4YjksIDB4NmMsIDB4MmQsIDB4NTUsIDB4NDEsIDB4MTgsIDB4NjUKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwMzNbXSBfX2luaXRjb25zdCA9IHsKKysJMHgzZSwgMHg4YiwgMHhjNSwgMHhhZCwgMHhlMSwgMHg4MiwgMHhmZiwgMHgwOAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTAzM1tdIF9faW5pdGNvbnN0ID0geworKwkweDZiLCAweDI4LCAweDJlLCAweGJlLCAweGNjLCAweDU0LCAweDFiLCAweGNkLAorKwkweDc4LCAweDM0LCAweGVkLCAweDU1CisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTAzM1tdIF9faW5pdGNvbnN0ID0geworKwkweGM1LCAweGJjLCAweDA5LCAweDU2LCAweDU2LCAweDQ2LCAweGU3LCAweGVkLAorKwkweGRhLCAweDk1LCAweDRmLCAweDFmLCAweDczLCAweDkyLCAweDIzLCAweGRhLAorKwkweGRhLCAweDIwLCAweGI5LCAweDVjLCAweDQ0LCAweGFiLCAweDAzLCAweDNkLAorKwkweDBmLCAweGFlLCAweDRiLCAweDAyLCAweDgzLCAweGQxLCAweDhiLCAweGUzCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gbWlzYyAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwMzRbXSBfX2luaXRjb25zdCA9IHsKKysJMHhiMCwgMHg1MywgMHg5OSwgMHg5MiwgMHg4NiwgMHhhMiwgMHg4MiwgMHg0ZiwKKysJMHg0MiwgMHhjYywgMHg4YywgMHgyMCwgMHgzYSwgMHhiMiwgMHg0ZSwgMHgyYywKKysJMHg5NywgMHhhNiwgMHg4NSwgMHhhZCwgMHhjYywgMHgyYSwgMHhkMywgMHgyNiwKKysJMHg2MiwgMHg1NSwgMHg4ZSwgMHg1NSwgMHhhNSwgMHhjNywgMHgyOQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQwMzRbXSBfX2luaXRjb25zdCA9IHsKKysJMHg0NSwgMHhjNywgMHhkNiwgMHhiNSwgMHgzYSwgMHhjYSwgMHhkNCwgMHhhYiwKKysJMHhiNiwgMHg4OCwgMHg3NiwgMHhhNiwgMHhlOSwgMHg2YSwgMHg0OCwgMHhmYiwKKysJMHg1OSwgMHg1MiwgMHg0ZCwgMHgyYywgMHg5MiwgMHhjOSwgMHhkOCwgMHhhMSwKKysJMHg4OSwgMHhjOSwgMHhmZCwgMHgyZCwgMHhiOSwgMHgxNywgMHg0NiwgMHg1NiwKKysJMHg2ZCwgMHgzYywgMHhhMSwgMHgwZSwgMHgzMSwgMHgxYiwgMHg2OSwgMHg1ZiwKKysJMHgzZSwgMHhhZSwgMHgxNSwgMHg1MSwgMHg2NSwgMHgyNCwgMHg5MworK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzAzNFtdIF9faW5pdGNvbnN0ID0geyB9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UwMzRbXSBfX2luaXRjb25zdCA9IHsKKysJMHgwNCwgMHhhOSwgMHhiZSwgMHgwMywgMHg1MCwgMHg4YSwgMHg1ZiwgMHgzMSwKKysJMHgzNywgMHgxYSwgMHg2ZiwgMHhkMgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkwMzRbXSBfX2luaXRjb25zdCA9IHsKKysJMHgyZSwgMHhiNSwgMHgxYywgMHg0NiwgMHg5YSwgMHhhOCwgMHhlYiwgMHg5ZSwKKysJMHg2YywgMHg1NCwgMHhhOCwgMHgzNCwgMHg5YiwgMHhhZSwgMHg1MCwgMHhhMiwKKysJMHgwZiwgMHgwZSwgMHgzOCwgMHgyNywgMHgxMSwgMHhiYiwgMHhhMSwgMHgxNSwKKysJMHgyYywgMHg0MiwgMHg0ZiwgMHgwMywgMHhiNiwgMHg2NywgMHgxZCwgMHg3MQorK307CisrCisrLyogd3ljaGVwcm9vZiAtIG1pc2MgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDM1W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZjQsIDB4NTIsIDB4MDYsIDB4YWIsIDB4YzIsIDB4NTUsIDB4NTIsIDB4YjIsCisrCTB4YWIsIDB4YzksIDB4YWIsIDB4N2YsIDB4YTIsIDB4NDMsIDB4MDMsIDB4NWYsCisrCTB4ZWQsIDB4YWEsIDB4ZGQsIDB4YzMsIDB4YjIsIDB4MjksIDB4MzksIDB4NTYsCisrCTB4ZjEsIDB4ZWEsIDB4NmUsIDB4NzEsIDB4NTYsIDB4ZTcsIDB4ZWIKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDM1W10gX19pbml0Y29uc3QgPSB7CisrCTB4NDYsIDB4YTgsIDB4MGMsIDB4NDEsIDB4ODcsIDB4MDIsIDB4NDcsIDB4MjAsCisrCTB4MDgsIDB4NDYsIDB4MjcsIDB4NTgsIDB4MDAsIDB4ODAsIDB4ZGQsIDB4ZTUsCisrCTB4YTMsIDB4ZjQsIDB4YTEsIDB4MTAsIDB4OTMsIDB4YTcsIDB4MDcsIDB4NmUsCisrCTB4ZDYsIDB4ZjMsIDB4ZDMsIDB4MjYsIDB4YmMsIDB4N2IsIDB4NzAsIDB4NTMsCisrCTB4NGQsIDB4NGEsIDB4YTIsIDB4ODMsIDB4NWEsIDB4NTIsIDB4ZTcsIDB4MmQsCisrCTB4MTQsIDB4ZGYsIDB4MGUsIDB4NGYsIDB4NDcsIDB4ZjIsIDB4NWYKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwMzVbXSBfX2luaXRjb25zdCA9IHsKKysJMHgzNywgMHg0NiwgMHgxOCwgMHhhMCwgMHg2ZSwgMHhhOSwgMHg4YSwgMHg0OAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTAzNVtdIF9faW5pdGNvbnN0ID0geworKwkweDQ3LCAweDBhLCAweDMzLCAweDllLCAweGNiLCAweDMyLCAweDE5LCAweGI4LAorKwkweGI4LCAweDFhLCAweDFmLCAweDhiCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTAzNVtdIF9faW5pdGNvbnN0ID0geworKwkweDdmLCAweDViLCAweDc0LCAweGMwLCAweDdlLCAweGQxLCAweGI0LCAweDBmLAorKwkweGQxLCAweDQzLCAweDU4LCAweGZlLCAweDJmLCAweGYyLCAweGE3LCAweDQwLAorKwkweGMxLCAweDE2LCAweGM3LCAweDcwLCAweDY1LCAweDEwLCAweGU2LCAweGE0LAorKwkweDM3LCAweGYxLCAweDllLCAweGE0LCAweDk5LCAweDExLCAweGNlLCAweGM0CisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gbWlzYyAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwMzZbXSBfX2luaXRjb25zdCA9IHsKKysJMHhiOSwgMHhjNSwgMHg1NCwgMHhjYiwgMHhjMywgMHg2YSwgMHhjMSwgMHg4YSwKKysJMHhlOCwgMHg5NywgMHhkZiwgMHg3YiwgMHhlZSwgMHhjYSwgMHhjMSwgMHhkYiwKKysJMHhlYiwgMHg0ZSwgMHhhZiwgMHhhMSwgMHg1NiwgMHhiYiwgMHg2MCwgMHhjZSwKKysJMHgyZSwgMHg1ZCwgMHg0OCwgMHhmMCwgMHg1NywgMHgxNSwgMHhlNiwgMHg3OAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQwMzZbXSBfX2luaXRjb25zdCA9IHsKKysJMHhlYSwgMHgyOSwgMHhhZiwgMHhhNCwgMHg5ZCwgMHgzNiwgMHhlOCwgMHg3NiwKKysJMHgwZiwgMHg1ZiwgMHhlMSwgMHg5NywgMHgyMywgMHhiOSwgMHg4MSwgMHgxZSwKKysJMHhkNSwgMHhkNSwgMHgxOSwgMHg5MywgMHg0YSwgMHg0NCwgMHgwZiwgMHg1MCwKKysJMHg4MSwgMHhhYywgMHg0MywgMHgwYiwgMHg5NSwgMHgzYiwgMHgwZSwgMHgyMSwKKysJMHgyMiwgMHgyNSwgMHg0MSwgMHhhZiwgMHg0NiwgMHhiOCwgMHg2NSwgMHgzMywKKysJMHhjNiwgMHhiNiwgMHg4ZCwgMHgyZiwgMHhmMSwgMHgwOCwgMHhhNywgMHhlYQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzAzNltdIF9faW5pdGNvbnN0ID0geyB9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UwMzZbXSBfX2luaXRjb25zdCA9IHsKKysJMHg3MiwgMHhjZiwgMHhkOSwgMHgwZSwgMHhmMywgMHgwMiwgMHg2YywgMHhhMiwKKysJMHgyYiwgMHg3ZSwgMHg2ZSwgMHg2YQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkwMzZbXSBfX2luaXRjb25zdCA9IHsKKysJMHhlMSwgMHg3MywgMHgxZCwgMHg1OCwgMHg1NCwgMHhlMSwgMHhiNywgMHgwYywKKysJMHhiMywgMHhmZiwgMHhlOCwgMHhiNywgMHg4NiwgMHhhMiwgMHhiMywgMHhlYiwKKysJMHhmMCwgMHg5OSwgMHg0MywgMHg3MCwgMHg5NSwgMHg0NywgMHg1NywgMHhiOSwKKysJMHhkYywgMHg4YywgMHg3YiwgMHhjNSwgMHgzNSwgMHg0NiwgMHgzNCwgMHhhMworK307CisrCisrLyogd3ljaGVwcm9vZiAtIG1pc2MgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDM3W10gX19pbml0Y29uc3QgPSB7CisrCTB4NmIsIDB4MjYsIDB4MDQsIDB4OTksIDB4NmMsIDB4ZDMsIDB4MGMsIDB4MTQsCisrCTB4YTEsIDB4M2EsIDB4NTIsIDB4NTcsIDB4ZWQsIDB4NmMsIDB4ZmYsIDB4ZDMsCisrCTB4YmMsIDB4NWUsIDB4MjksIDB4ZDYsIDB4YjksIDB4N2UsIDB4YjEsIDB4NzksCisrCTB4OWUsIDB4YjMsIDB4MzUsIDB4ZTIsIDB4ODEsIDB4ZWEsIDB4NDUsIDB4MWUKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDM3W10gX19pbml0Y29uc3QgPSB7CisrCTB4NmQsIDB4YWQsIDB4NjMsIDB4NzgsIDB4OTcsIDB4NTQsIDB4NGQsIDB4OGIsCisrCTB4ZjYsIDB4YmUsIDB4OTUsIDB4MDcsIDB4ZWQsIDB4NGQsIDB4MWIsIDB4YjIsCisrCTB4ZTksIDB4NTQsIDB4YmMsIDB4NDIsIDB4N2UsIDB4NWQsIDB4ZTcsIDB4MjksCisrCTB4ZGEsIDB4ZjUsIDB4MDcsIDB4NjIsIDB4ODQsIDB4NmYsIDB4ZjIsIDB4ZjQsCisrCTB4N2IsIDB4OTksIDB4N2QsIDB4OTMsIDB4YzksIDB4ODIsIDB4MTgsIDB4OWQsCisrCTB4NzAsIDB4OTUsIDB4ZGMsIDB4NzksIDB4NGMsIDB4NzQsIDB4NjIsIDB4MzIKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwMzdbXSBfX2luaXRjb25zdCA9IHsKKysJMHgyMywgMHgzMywgMHhlNSwgMHhjZSwgMHgwZiwgMHg5MywgMHhiMCwgMHg1OQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTAzN1tdIF9faW5pdGNvbnN0ID0geworKwkweDI2LCAweDI4LCAweDgwLCAweGQ0LCAweDc1LCAweGYzLCAweGRhLCAweGM1LAorKwkweDM0LCAweDBkLCAweGQxLCAweGI4CisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTAzN1tdIF9faW5pdGNvbnN0ID0geworKwkweDI3LCAweGQ4LCAweDYwLCAweDYzLCAweDFiLCAweDA0LCAweDg1LCAweGE0LAorKwkweDEwLCAweDcwLCAweDJmLCAweGVhLCAweDYxLCAweGJjLCAweDg3LCAweDNmLAorKwkweDM0LCAweDQyLCAweDI2LCAweDBjLCAweGFkLCAweGVkLCAweDRhLCAweGJkLAorKwkweGUyLCAweDViLCAweDc4LCAweDZhLCAweDJkLCAweDk3LCAweGYxLCAweDQ1CisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gbWlzYyAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwMzhbXSBfX2luaXRjb25zdCA9IHsKKysJMHg5NywgMHgzZCwgMHgwYywgMHg3NSwgMHgzOCwgMHgyNiwgMHhiYSwgMHhlNCwKKysJMHg2NiwgMHhjZiwgMHg5YSwgMHhiYiwgMHgzNCwgMHg5MywgMHgxNSwgMHgyZSwKKysJMHg5ZCwgMHhlNywgMHg4MSwgMHg5ZSwgMHgyYiwgMHhkMCwgMHhjNywgMHgxMSwKKysJMHg3MSwgMHgzNCwgMHg2YiwgMHg0ZCwgMHgyYywgMHhlYiwgMHhmOCwgMHgwNCwKKysJMHgxYSwgMHhhMywgMHhjZSwgMHhkYywgMHgwZCwgMHhmZCwgMHg3YiwgMHg0NiwKKysJMHg3ZSwgMHgyNiwgMHgyMiwgMHg4YiwgMHhjOCwgMHg2YywgMHg5YQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQwMzhbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmYiwgMHhhNywgMHg4YSwgMHhlNCwgMHhmOSwgMHhkOCwgMHgwOCwgMHhhNiwKKysJMHgyZSwgMHgzZCwgMHhhNCwgMHgwYiwgMHhlMiwgMHhjYiwgMHg3NywgMHgwMCwKKysJMHhjMywgMHg2MSwgMHgzZCwgMHg5ZSwgMHhiMiwgMHhjNSwgMHgyOSwgMHhjNiwKKysJMHg1MiwgMHhlNywgMHg2YSwgMHg0MywgMHgyYywgMHg2NSwgMHg4ZCwgMHgyNywKKysJMHgwOSwgMHg1ZiwgMHgwZSwgMHhiOCwgMHhmOSwgMHg0MCwgMHhjMywgMHgyNCwKKysJMHg5OCwgMHgxZSwgMHhhOSwgMHgzNSwgMHhlNSwgMHgwNywgMHhmOSwgMHg4ZiwKKysJMHgwNCwgMHg2OSwgMHg1NiwgMHhkYiwgMHgzYSwgMHg1MSwgMHgyOSwgMHgwOCwKKysJMHhiZCwgMHg3YSwgMHhmYywgMHg4ZiwgMHgyYSwgMHhiMCwgMHhhOQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzAzOFtdIF9faW5pdGNvbnN0ID0geyB9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UwMzhbXSBfX2luaXRjb25zdCA9IHsKKysJMHhlNywgMHg0YSwgMHg1MSwgMHg1ZSwgMHg3ZSwgMHgyMSwgMHgwMiwgMHhiOSwKKysJMHgwYiwgMHhlZiwgMHg1NSwgMHhkMgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkwMzhbXSBfX2luaXRjb25zdCA9IHsKKysJMHhjZiwgMHgwZCwgMHg0MCwgMHhhNCwgMHg2NCwgMHg0ZSwgMHg1ZiwgMHg1MSwKKysJMHg4MSwgMHg1MSwgMHg2NSwgMHhkNSwgMHgzMCwgMHgxYiwgMHgyMiwgMHg2MywKKysJMHgxZiwgMHg0NSwgMHg0NCwgMHhjNCwgMHg5YSwgMHgxOCwgMHg3OCwgMHhlMywKKysJMHhhMCwgMHhhNSwgMHhlOCwgMHhlMSwgMHhhYSwgMHhlMCwgMHhmMiwgMHg2NAorK307CisrCisrLyogd3ljaGVwcm9vZiAtIG1pc2MgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDM5W10gX19pbml0Y29uc3QgPSB7CisrCTB4YTksIDB4ODksIDB4OTUsIDB4NTAsIDB4NGQsIDB4ZjEsIDB4NmYsIDB4NzQsCisrCTB4OGIsIDB4ZmIsIDB4NzcsIDB4ODUsIDB4ZmYsIDB4OTEsIDB4ZWUsIDB4YjMsCisrCTB4YjYsIDB4NjAsIDB4ZWEsIDB4OWUsIDB4ZDMsIDB4NDUsIDB4MGMsIDB4M2QsCisrCTB4NWUsIDB4N2IsIDB4MGUsIDB4NzksIDB4ZWYsIDB4NjUsIDB4MzYsIDB4NTksCisrCTB4YTksIDB4OTcsIDB4OGQsIDB4NzUsIDB4NTQsIDB4MmUsIDB4ZjksIDB4MWMsCisrCTB4NDUsIDB4NjcsIDB4NjIsIDB4MjEsIDB4NTYsIDB4NDAsIDB4YjkKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDM5W10gX19pbml0Y29uc3QgPSB7CisrCTB4YTEsIDB4ZmYsIDB4ZWQsIDB4ODAsIDB4NzYsIDB4MTgsIDB4MjksIDB4ZWMsCisrCTB4Y2UsIDB4MjQsIDB4MmUsIDB4MGUsIDB4ODgsIDB4YjEsIDB4MzgsIDB4MDQsCisrCTB4OTAsIDB4MTYsIDB4YmMsIDB4YTAsIDB4MTgsIDB4ZGEsIDB4MmIsIDB4NmUsCisrCTB4MTksIDB4OTgsIDB4NmIsIDB4M2UsIDB4MzEsIDB4OGMsIDB4YWUsIDB4OGQsCisrCTB4ODAsIDB4NjEsIDB4OTgsIDB4ZmIsIDB4NGMsIDB4NTIsIDB4N2MsIDB4YzMsCisrCTB4OTMsIDB4NTAsIDB4ZWIsIDB4ZGQsIDB4ZWEsIDB4YzUsIDB4NzMsIDB4YzQsCisrCTB4Y2IsIDB4ZjAsIDB4YmUsIDB4ZmQsIDB4YTAsIDB4YjcsIDB4MDIsIDB4NDIsCisrCTB4YzYsIDB4NDAsIDB4ZDcsIDB4Y2QsIDB4MDIsIDB4ZDcsIDB4YTMKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwMzlbXSBfX2luaXRjb25zdCA9IHsKKysJMHhiMywgMHhlNCwgMHgwNiwgMHg0NiwgMHg4MywgMHhiMCwgMHgyZCwgMHg4NAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTAzOVtdIF9faW5pdGNvbnN0ID0geworKwkweGQ0LCAweGQ4LCAweDA3LCAweDM0LCAweDE2LCAweDgzLCAweDgyLCAweDViLAorKwkweDMxLCAweGNkLCAweDRkLCAweDk1CisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTAzOVtdIF9faW5pdGNvbnN0ID0geworKwkweDZjLCAweGJmLCAweGQ3LCAweDFjLCAweDY0LCAweDVkLCAweDE4LCAweDRjLAorKwkweGY1LCAweGQyLCAweDNjLCAweDQwLCAweDJiLCAweGRiLCAweDBkLCAweDI1LAorKwkweGVjLCAweDU0LCAweDg5LCAweDhjLCAweDhhLCAweDAyLCAweDczLCAweGQ0LAorKwkweDJlLCAweGI1LCAweGJlLCAweDEwLCAweDlmLCAweGRjLCAweGIyLCAweGFjCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gbWlzYyAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwNDBbXSBfX2luaXRjb25zdCA9IHsKKysJMHhkMCwgMHg5NiwgMHg4MCwgMHgzMSwgMHg4MSwgMHhiZSwgMHhlZiwgMHg5ZSwKKysJMHgwMCwgMHg4ZiwgMHhmOCwgMHg1ZCwgMHg1ZCwgMHhkYywgMHgzOCwgMHhkZCwKKysJMHhhYywgMHhmMCwgMHhmMCwgMHg5ZSwgMHhlNSwgMHhmNywgMHhlMCwgMHg3ZiwKKysJMHgxZSwgMHg0MCwgMHg3OSwgMHhjYiwgMHg2NCwgMHhkMCwgMHhkYywgMHg4ZiwKKysJMHg1ZSwgMHg2NywgMHgxMSwgMHhjZCwgMHg0OSwgMHgyMSwgMHhhNywgMHg4OCwKKysJMHg3ZCwgMHhlNywgMHg2ZSwgMHgyNiwgMHg3OCwgMHhmZCwgMHhjNiwgMHg3NiwKKysJMHgxOCwgMHhmMSwgMHgxOCwgMHg1NSwgMHg4NiwgMHhiZiwgMHhlYSwgMHg5ZCwKKysJMHg0YywgMHg2OCwgMHg1ZCwgMHg1MCwgMHhlNCwgMHhiYiwgMHg5YSwgMHg4MgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQwNDBbXSBfX2luaXRjb25zdCA9IHsKKysJMHg5YSwgMHg0ZSwgMHhmMiwgMHgyYiwgMHgxOCwgMHgxNiwgMHg3NywgMHhiNSwKKysJMHg3NSwgMHg1YywgMHgwOCwgMHhmNywgMHg0NywgMHhjMCwgMHhmOCwgMHhkOCwKKysJMHhlOCwgMHhkNCwgMHhjMSwgMHg4YSwgMHg5YywgMHhjMiwgMHg0MCwgMHg1YywKKysJMHgxMiwgMHhiYiwgMHg1MSwgMHhiYiwgMHgxOCwgMHg3MiwgMHhjOCwgMHhlOCwKKysJMHhiOCwgMHg3NywgMHg2NywgMHg4YiwgMHhlYywgMHg0NCwgMHgyYywgMHhmYywKKysJMHhiYiwgMHgwZiwgMHhmNCwgMHg2NCwgMHhhNiwgMHg0YiwgMHg3NCwgMHgzMywKKysJMHgyYywgMHhmMCwgMHg3MiwgMHg4OSwgMHg4YywgMHg3ZSwgMHgwZSwgMHhkZCwKKysJMHhmNiwgMHgyMywgMHgyZSwgMHhhNiwgMHhlMiwgMHg3ZSwgMHhmZSwgMHg1MCwKKysJMHg5ZiwgMHhmMywgMHg0MiwgMHg3YSwgMHgwZiwgMHgzMiwgMHhmYSwgMHg1NiwKKysJMHg2ZCwgMHg5YywgMHhhMCwgMHhhNywgMHg4YSwgMHhlZiwgMHhjMCwgMHgxMworK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzA0MFtdIF9faW5pdGNvbnN0ID0geyB9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UwNDBbXSBfX2luaXRjb25zdCA9IHsKKysJMHhkNiwgMHgxMCwgMHg0MCwgMHhhMywgMHgxMywgMHhlZCwgMHg0OSwgMHgyOCwKKysJMHgyMywgMHhjYywgMHgwNiwgMHg1YgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkwNDBbXSBfX2luaXRjb25zdCA9IHsKKysJMHg1YiwgMHgxZCwgMHgxMCwgMHgzNSwgMHhjMCwgMHhiMSwgMHg3ZSwgMHhlMCwKKysJMHhiMCwgMHg0NCwgMHg0NywgMHg2NywgMHhmOCwgMHgwYSwgMHgyNSwgMHhiOCwKKysJMHhjMSwgMHhiNywgMHg0MSwgMHhmNCwgMHhiNSwgMHgwYSwgMHg0ZCwgMHgzMCwKKysJMHg1MiwgMHgyMiwgMHg2YiwgMHhhYSwgMHgxYywgMHg2ZiwgMHhiNywgMHgwMQorK307CisrCisrLyogd3ljaGVwcm9vZiAtIG1pc2MgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDQxW10gX19pbml0Y29uc3QgPSB7CisrCTB4OTQsIDB4ZWUsIDB4MTYsIDB4NmQsIDB4NmQsIDB4NmUsIDB4Y2YsIDB4ODgsCisrCTB4MzIsIDB4NDMsIDB4NzEsIDB4MzYsIDB4YjQsIDB4YWUsIDB4ODAsIDB4NWQsCisrCTB4NDIsIDB4ODgsIDB4NjQsIDB4MzUsIDB4OTUsIDB4ODYsIDB4ZDksIDB4MTksCisrCTB4M2EsIDB4MjUsIDB4MDEsIDB4NjIsIDB4OTMsIDB4ZWQsIDB4YmEsIDB4NDQsCisrCTB4M2MsIDB4NTgsIDB4ZTAsIDB4N2UsIDB4N2IsIDB4NzEsIDB4OTUsIDB4ZWMsCisrCTB4NWIsIDB4ZDgsIDB4NDUsIDB4ODIsIDB4YTksIDB4ZDUsIDB4NmMsIDB4OGQsCisrCTB4NGEsIDB4MTAsIDB4OGMsIDB4N2QsIDB4N2MsIDB4ZTMsIDB4NGUsIDB4NmMsCisrCTB4NmYsIDB4OGUsIDB4YTEsIDB4YmUsIDB4YzAsIDB4NTYsIDB4NzMsIDB4MTcKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDQxW10gX19pbml0Y29uc3QgPSB7CisrCTB4NWYsIDB4YmIsIDB4ZGUsIDB4Y2MsIDB4MzQsIDB4YmUsIDB4MjAsIDB4MTYsCisrCTB4MTQsIDB4ZjYsIDB4MzYsIDB4MDMsIDB4MWUsIDB4ZWIsIDB4NDIsIDB4ZjEsCisrCTB4Y2EsIDB4Y2UsIDB4M2MsIDB4NzksIDB4YTEsIDB4MmMsIDB4ZmYsIDB4ZDgsCisrCTB4NzEsIDB4ZWUsIDB4OGUsIDB4NzMsIDB4ODIsIDB4MGMsIDB4ODIsIDB4OTcsCisrCTB4NDksIDB4ZjEsIDB4YWIsIDB4YjQsIDB4MjksIDB4NDMsIDB4NjcsIDB4ODQsCisrCTB4OWYsIDB4YjYsIDB4YzIsIDB4YWEsIDB4NTYsIDB4YmQsIDB4YTgsIDB4YTMsCisrCTB4MDcsIDB4OGYsIDB4NzIsIDB4M2QsIDB4N2MsIDB4MWMsIDB4ODUsIDB4MjAsCisrCTB4MjQsIDB4YjAsIDB4MTcsIDB4YjUsIDB4ODksIDB4NzMsIDB4ZmIsIDB4MWUsCisrCTB4MDksIDB4MjYsIDB4M2QsIDB4YTcsIDB4YjQsIDB4Y2IsIDB4OTIsIDB4MTQsCisrCTB4NTIsIDB4ZjksIDB4N2QsIDB4Y2EsIDB4NDAsIDB4ZjUsIDB4ODAsIDB4ZWMKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwNDFbXSBfX2luaXRjb25zdCA9IHsKKysJMHg3MSwgMHg5MywgMHhmNiwgMHgyMywgMHg2NiwgMHgzMywgMHgyMSwgMHhhMgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTA0MVtdIF9faW5pdGNvbnN0ID0geworKwkweGQzLCAweDFjLCAweDIxLCAweGFiLCAweGExLCAweDc1LCAweGI3LCAweDBkLAorKwkweGU0LCAweGViLCAweGIxLCAweDljCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTA0MVtdIF9faW5pdGNvbnN0ID0geworKwkweDk3LCAweGQ2LCAweDM1LCAweGM0LCAweGY0LCAweDc1LCAweDc0LCAweGQ5LAorKwkweDk5LCAweDhhLCAweDkwLCAweDg3LCAweDVkLCAweGExLCAweGQzLCAweGEyLAorKwkweDg0LCAweGI3LCAweDU1LCAweGIyLCAweGQzLCAweDkyLCAweDk3LCAweGE1LAorKwkweDcyLCAweDUyLCAweDM1LCAweDE5LCAweDBlLCAweDEwLCAweGE5LCAweDdlCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gbWlzYyAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwNDJbXSBfX2luaXRjb25zdCA9IHsKKysJMHhiNCwgMHgyOSwgMHhlYiwgMHg4MCwgMHhmYiwgMHg4ZiwgMHhlOCwgMHhiYSwKKysJMHhlZCwgMHhhMCwgMHhjOCwgMHg1YiwgMHg5YywgMHgzMywgMHgzNCwgMHg1OCwKKysJMHhlNywgMHhjMiwgMHg5OSwgMHgyZSwgMHg1NSwgMHg4NCwgMHg3NSwgMHgwNiwKKysJMHg5ZCwgMHgxMiwgMHhkNCwgMHg1YywgMHgyMiwgMHgyMSwgMHg3NSwgMHg2NCwKKysJMHgxMiwgMHgxNSwgMHg4OCwgMHgwMywgMHgyMiwgMHg5NywgMHhlZiwgMHhmNSwKKysJMHg2NywgMHg4MywgMHg3NCwgMHgyYSwgMHg1ZiwgMHhjMiwgMHgyZCwgMHg3NCwKKysJMHgxMCwgMHhmZiwgMHhiMiwgMHg5ZCwgMHg2NiwgMHgwOSwgMHg4NiwgMHg2MSwKKysJMHhkNywgMHg2ZiwgMHgxMiwgMHg2YywgMHgzYywgMHgyNywgMHg2OCwgMHg5ZSwKKysJMHg0MywgMHhiMywgMHg3MiwgMHg2NywgMHhjYSwgMHhjNSwgMHhhMywgMHhhNiwKKysJMHhkMywgMHhhYiwgMHg0OSwgMHhlMywgMHg5MSwgMHhkYSwgMHgyOSwgMHhjZCwKKysJMHgzMCwgMHg1NCwgMHhhNSwgMHg2OSwgMHgyZSwgMHgyOCwgMHgwNywgMHhlNCwKKysJMHhjMywgMHhlYSwgMHg0NiwgMHhjOCwgMHg3NiwgMHgxZCwgMHg1MCwgMHhmNSwKKysJMHg5MgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQwNDJbXSBfX2luaXRjb25zdCA9IHsKKysJMHhkMCwgMHgxMCwgMHgyZiwgMHg2YywgMHgyNSwgMHg4YiwgMHhmNCwgMHg5NywKKysJMHg0MiwgMHhjZSwgMHhjMywgMHg0YywgMHhmMiwgMHhkMCwgMHhmZSwgMHhkZiwKKysJMHgyMywgMHhkMSwgMHgwNSwgMHhmYiwgMHg0YywgMHg4NCwgMHhjZiwgMHg5OCwKKysJMHg1MSwgMHg1ZSwgMHgxYiwgMHhjOSwgMHhhNiwgMHg0ZiwgMHg4YSwgMHhkNSwKKysJMHhiZSwgMHg4ZiwgMHgwNywgMHgyMSwgMHhiZCwgMHhlNSwgMHgwNiwgMHg0NSwKKysJMHhkMCwgMHgwMCwgMHg4MywgMHhjMywgMHhhMiwgMHg2MywgMHhhMywgMHgxMCwKKysJMHg1MywgMHhiNywgMHg2MCwgMHgyNCwgMHg1ZiwgMHg1MiwgMHhhZSwgMHgyOCwKKysJMHg2NiwgMHhhNSwgMHhlYywgMHg4MywgMHhiMSwgMHg5ZiwgMHg2MSwgMHhiZSwKKysJMHgxZCwgMHgzMCwgMHhkNSwgMHhjNSwgMHhkOSwgMHhmZSwgMHhjYywgMHg0YywKKysJMHhiYiwgMHhlMCwgMHg4ZiwgMHhkMywgMHg4NSwgMHg4MSwgMHgzYSwgMHgyYSwKKysJMHhhMywgMHg5YSwgMHgwMCwgMHhmZiwgMHg5YywgMHgxMCwgMHhmNywgMHhmMiwKKysJMHgzNywgMHgwMiwgMHhhZCwgMHhkMSwgMHhlNCwgMHhiMiwgMHhmZiwgMHhhMywKKysJMHgxYywgMHg0MSwgMHg4NiwgMHg1ZiwgMHhjNywgMHgxZCwgMHhlMSwgMHgyYiwKKysJMHgxOSwgMHg2MSwgMHgyMSwgMHgyNywgMHhjZSwgMHg0OSwgMHg5OSwgMHgzYiwKKysJMHhiMAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzA0MltdIF9faW5pdGNvbnN0ID0geyB9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UwNDJbXSBfX2luaXRjb25zdCA9IHsKKysJMHgxNywgMHhjOCwgMHg2YSwgMHg4YSwgMHhiYiwgMHhiNywgMHhlMCwgMHgwMywKKysJMHhhYywgMHhkZSwgMHgyNywgMHg5OQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkwNDJbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZSwgMHg2ZSwgMHg1NSwgMHhiZCwgMHhhZSwgMHhkMSwgMHhmNywgMHgyOCwKKysJMHg0YywgMHhhNSwgMHhmYywgMHgwZiwgMHg4YywgMHg1ZiwgMHgyYiwgMHg4ZCwKKysJMHhmNSwgMHg2ZCwgMHhjMCwgMHhmNCwgMHg5ZSwgMHg4YywgMHhhNiwgMHg2YSwKKysJMHg0MSwgMHg5OSwgMHg1ZSwgMHg3OCwgMHgzMywgMHg1MSwgMHhmOSwgMHgwMQorK307CisrCisrLyogd3ljaGVwcm9vZiAtIG1pc2MgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDQzW10gX19pbml0Y29uc3QgPSB7CisrCTB4Y2UsIDB4YjUsIDB4MzQsIDB4Y2UsIDB4NTAsIDB4ZGMsIDB4MjMsIDB4ZmYsCisrCTB4NjMsIDB4OGEsIDB4Y2UsIDB4M2UsIDB4ZjYsIDB4M2EsIDB4YjIsIDB4Y2MsCisrCTB4MjksIDB4NzMsIDB4ZWUsIDB4YWQsIDB4YTgsIDB4MDcsIDB4ODUsIDB4ZmMsCisrCTB4MTYsIDB4NWQsIDB4MDYsIDB4YzIsIDB4ZjUsIDB4MTAsIDB4MGYsIDB4ZjUsCisrCTB4ZTgsIDB4YWIsIDB4MjgsIDB4ODIsIDB4YzQsIDB4NzUsIDB4YWYsIDB4Y2QsCisrCTB4MDUsIDB4Y2MsIDB4ZDQsIDB4OWYsIDB4MmUsIDB4N2QsIDB4OGYsIDB4NTUsCisrCTB4ZWYsIDB4M2EsIDB4NzIsIDB4ZTMsIDB4ZGMsIDB4NTEsIDB4ZDYsIDB4ODUsCisrCTB4MmIsIDB4OGUsIDB4NmIsIDB4OWUsIDB4N2EsIDB4ZWMsIDB4ZTUsIDB4N2IsCisrCTB4ZTYsIDB4NTUsIDB4NmIsIDB4MGIsIDB4NmQsIDB4OTQsIDB4MTMsIDB4ZTMsCisrCTB4M2YsIDB4YzUsIDB4ZmMsIDB4MjQsIDB4YTksIDB4YTIsIDB4MDUsIDB4YWQsCisrCTB4NTksIDB4NTcsIDB4NGIsIDB4YjMsIDB4OWQsIDB4OTQsIDB4NGEsIDB4OTIsCisrCTB4ZGMsIDB4NDcsIDB4OTcsIDB4MGQsIDB4ODQsIDB4YTYsIDB4YWQsIDB4MzEsCisrCTB4NzYKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDQzW10gX19pbml0Y29uc3QgPSB7CisrCTB4NzUsIDB4NDUsIDB4MzksIDB4MWIsIDB4NTEsIDB4ZGUsIDB4MDEsIDB4ZDUsCisrCTB4YzUsIDB4M2QsIDB4ZmEsIDB4Y2EsIDB4NzcsIDB4NzksIDB4MDksIDB4MDYsCisrCTB4M2UsIDB4NTgsIDB4ZWQsIDB4ZWUsIDB4NGIsIDB4YjEsIDB4MjIsIDB4N2UsCisrCTB4NzEsIDB4MTAsIDB4YWMsIDB4NGQsIDB4MjYsIDB4MjAsIDB4YzIsIDB4YWUsCisrCTB4YzIsIDB4ZjgsIDB4NDgsIDB4ZjUsIDB4NmQsIDB4ZWUsIDB4YjAsIDB4MzcsCisrCTB4YTgsIDB4ZGMsIDB4ZWQsIDB4NzUsIDB4YWYsIDB4YTgsIDB4YTYsIDB4YzgsCisrCTB4OTAsIDB4ZTIsIDB4ZGUsIDB4ZTQsIDB4MmYsIDB4OTUsIDB4MGIsIDB4YjMsCisrCTB4M2QsIDB4OWUsIDB4MjQsIDB4MjQsIDB4ZDAsIDB4OGEsIDB4NTAsIDB4NWQsCisrCTB4ODksIDB4OTUsIDB4NjMsIDB4OTcsIDB4M2UsIDB4ZDMsIDB4ODgsIDB4NzAsCisrCTB4ZjMsIDB4ZGUsIDB4NmUsIDB4ZTIsIDB4YWQsIDB4YzcsIDB4ZmUsIDB4MDcsCisrCTB4MmMsIDB4MzYsIDB4NmMsIDB4MTQsIDB4ZTIsIDB4Y2YsIDB4N2MsIDB4YTYsCisrCTB4MmYsIDB4YjMsIDB4ZDMsIDB4NmIsIDB4ZWUsIDB4MTEsIDB4NjgsIDB4NTQsCisrCTB4NjEsIDB4YjcsIDB4MGQsIDB4NDQsIDB4ZWYsIDB4OGMsIDB4NjYsIDB4YzUsCisrCTB4YzcsIDB4YmIsIDB4ZjEsIDB4MGQsIDB4Y2EsIDB4ZGQsIDB4N2YsIDB4YWMsCisrCTB4ZjYKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwNDNbXSBfX2luaXRjb25zdCA9IHsKKysJMHhhMSwgMHgxYywgMHg0MCwgMHhiNiwgMHgwMywgMHg3NiwgMHg3MywgMHgzMAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTA0M1tdIF9faW5pdGNvbnN0ID0geworKwkweDQ2LCAweDM2LCAweDJmLCAweDQ1LCAweGQ2LCAweDM3LCAweDllLCAweDYzLAorKwkweGU1LCAweDIyLCAweDk0LCAweDYwCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTA0M1tdIF9faW5pdGNvbnN0ID0geworKwkweGFhLCAweGJjLCAweDA2LCAweDM0LCAweDc0LCAweGU2LCAweDVjLCAweDRjLAorKwkweDNlLCAweDliLCAweGRjLCAweDQ4LCAweDBkLCAweGVhLCAweDk3LCAweGI0LAorKwkweDUxLCAweDEwLCAweGM4LCAweDYxLCAweDg4LCAweDQ2LCAweGZmLCAweDZiLAorKwkweDE1LCAweGJkLCAweGQyLCAweGE0LCAweGE1LCAweDY4LCAweDJjLCAweDRlCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gbWlzYyAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwNDRbXSBfX2luaXRjb25zdCA9IHsKKysJMHhlNSwgMHhjYywgMHhhYSwgMHg0NCwgMHgxYiwgMHhjOCwgMHgxNCwgMHg2OCwKKysJMHg4ZiwgMHg4ZiwgMHg2ZSwgMHg4ZiwgMHgyOCwgMHhiNSwgMHgwMCwgMHhiMgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQwNDRbXSBfX2luaXRjb25zdCA9IHsKKysJMHg3ZSwgMHg3MiwgMHhmNSwgMHhhMSwgMHg4NSwgMHhhZiwgMHgxNiwgMHhhNiwKKysJMHgxMSwgMHg5MiwgMHgxYiwgMHg0MywgMHg4ZiwgMHg3NCwgMHg5ZiwgMHgwYiwKKysJMHgxMiwgMHg0MiwgMHhjNiwgMHg3MCwgMHg3MywgMHgyMywgMHgzNCwgMHgwMiwKKysJMHg5YSwgMHhkZiwgMHhlMSwgMHhjNSwgMHgwMCwgMHgxNiwgMHg1MSwgMHhlNAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzA0NFtdIF9faW5pdGNvbnN0ID0geworKwkweDAyCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX25vbmNlMDQ0W10gX19pbml0Y29uc3QgPSB7CisrCTB4ODcsIDB4MzQsIDB4NWYsIDB4MTAsIDB4NTUsIDB4ZmQsIDB4OWUsIDB4MjEsCisrCTB4MDIsIDB4ZDUsIDB4MDYsIDB4NTYKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfa2V5MDQ0W10gX19pbml0Y29uc3QgPSB7CisrCTB4N2QsIDB4MDAsIDB4YjQsIDB4ODAsIDB4OTUsIDB4YWQsIDB4ZmEsIDB4MzIsCisrCTB4NzIsIDB4MDUsIDB4MDYsIDB4MDcsIDB4YjIsIDB4NjQsIDB4MTgsIDB4NTAsCisrCTB4MDIsIDB4YmEsIDB4OTksIDB4OTUsIDB4N2MsIDB4NDksIDB4OGIsIDB4ZTAsCisrCTB4MjIsIDB4NzcsIDB4MGYsIDB4MmMsIDB4ZTIsIDB4ZjMsIDB4MTQsIDB4M2MKKyt9OworKworKy8qIHd5Y2hlcHJvb2YgLSBtaXNjICovCisrc3RhdGljIGNvbnN0IHU4IGVuY19pbnB1dDA0NVtdIF9faW5pdGNvbnN0ID0geworKwkweDAyLCAweGNkLCAweGUxLCAweDY4LCAweGZiLCAweGEzLCAweGY1LCAweDQ0LAorKwkweGJiLCAweGQwLCAweDMzLCAweDJmLCAweDdhLCAweGRlLCAweGFkLCAweGE4CisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX291dHB1dDA0NVtdIF9faW5pdGNvbnN0ID0geworKwkweDg1LCAweGYyLCAweDlhLCAweDcxLCAweDk1LCAweDU3LCAweGNkLCAweGQxLAorKwkweDRkLCAweDFmLCAweDhmLCAweGZmLCAweGFiLCAweDZkLCAweDllLCAweDYwLAorKwkweDczLCAweDJjLCAweGEzLCAweDJiLCAweGVjLCAweGQ1LCAweDE1LCAweGExLAorKwkweGVkLCAweDM1LCAweDNmLCAweDU0LCAweDJlLCAweDk5LCAweDk4LCAweDU4CisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2Fzc29jMDQ1W10gX19pbml0Y29uc3QgPSB7CisrCTB4YjYsIDB4NDgKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UwNDVbXSBfX2luaXRjb25zdCA9IHsKKysJMHg4NywgMHhhMywgMHgxNiwgMHgzZSwgMHhjMCwgMHg1OSwgMHg4YSwgMHhkOSwKKysJMHg1YiwgMHgzYSwgMHhhNywgMHgxMworK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkwNDVbXSBfX2luaXRjb25zdCA9IHsKKysJMHg2NCwgMHgzMiwgMHg3MSwgMHg3ZiwgMHgxZCwgMHhiOCwgMHg1ZSwgMHg0MSwKKysJMHhhYywgMHg3OCwgMHgzNiwgMHhiYywgMHhlMiwgMHg1MSwgMHg4NSwgMHhhMCwKKysJMHg4MCwgMHhkNSwgMHg3NiwgMHgyYiwgMHg5ZSwgMHgyYiwgMHgxOCwgMHg0NCwKKysJMHg0YiwgMHg2ZSwgMHhjNywgMHgyYywgMHgzYiwgMHhkOCwgMHhlNCwgMHhkYworK307CisrCisrLyogd3ljaGVwcm9vZiAtIG1pc2MgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDQ2W10gX19pbml0Y29uc3QgPSB7CisrCTB4MTYsIDB4ZGQsIDB4ZDIsIDB4M2YsIDB4ZjUsIDB4M2YsIDB4M2QsIDB4MjMsCisrCTB4YzAsIDB4NjMsIDB4MzQsIDB4NDgsIDB4NzAsIDB4NDAsIDB4ZWIsIDB4NDcKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDQ2W10gX19pbml0Y29uc3QgPSB7CisrCTB4YzEsIDB4YjIsIDB4OTUsIDB4OTMsIDB4NmQsIDB4NTYsIDB4ZmEsIDB4ZGEsCisrCTB4YzAsIDB4M2UsIDB4NWYsIDB4NzQsIDB4MmIsIDB4ZmYsIDB4NzMsIDB4YTEsCisrCTB4MzksIDB4YzQsIDB4NTcsIDB4ZGIsIDB4YWIsIDB4NjYsIDB4MzgsIDB4MmIsCisrCTB4YWIsIDB4YjMsIDB4YjUsIDB4NTgsIDB4MDAsIDB4Y2QsIDB4YTUsIDB4YjgKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwNDZbXSBfX2luaXRjb25zdCA9IHsKKysJMHhiZCwgMHg0YywgMHhkMCwgMHgyZiwgMHhjNywgMHg1MCwgMHgyYiwgMHhiZCwKKysJMHhiZCwgMHhmNiwgMHhjOSwgMHhhMywgMHhjYiwgMHhlOCwgMHhmMAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTA0NltdIF9faW5pdGNvbnN0ID0geworKwkweDZmLCAweDU3LCAweDNhLCAweGE4LCAweDZiLCAweGFhLCAweDQ5LCAweDJiLAorKwkweGE0LCAweDY1LCAweDk2LCAweGRmCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTA0NltdIF9faW5pdGNvbnN0ID0geworKwkweDhlLCAweDM0LCAweGNmLCAweDczLCAweGQyLCAweDQ1LCAweGExLCAweDA4LAorKwkweDJhLCAweDkyLCAweDBiLCAweDg2LCAweDM2LCAweDRlLCAweGI4LCAweDk2LAorKwkweGM0LCAweDk0LCAweDY0LCAweDY3LCAweGJjLCAweGIzLCAweGQ1LCAweDg5LAorKwkweDI5LCAweGZjLCAweGIzLCAweDY2LCAweDkwLCAweGU2LCAweDM5LCAweDRmCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gbWlzYyAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwNDdbXSBfX2luaXRjb25zdCA9IHsKKysJMHg2MiwgMHgzYiwgMHg3OCwgMHg1MCwgMHhjMywgMHgyMSwgMHhlMiwgMHhjZiwKKysJMHgwYywgMHg2ZiwgMHhiYywgMHhjOCwgMHhkZiwgMHhkMSwgMHhhZiwgMHhmMgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQwNDdbXSBfX2luaXRjb25zdCA9IHsKKysJMHhjOCwgMHg0YywgMHg5YiwgMHhiNywgMHhjNiwgMHgxYywgMHgxYiwgMHhjYiwKKysJMHgxNywgMHg3NywgMHgyYSwgMHgxYywgMHg1MCwgMHgwYywgMHg1MCwgMHg5NSwKKysJMHhkYiwgMHhhZCwgMHhmNywgMHhhNSwgMHgxMywgMHg4YywgMHhhMCwgMHgzNCwKKysJMHg1OSwgMHhhMiwgMHhjZCwgMHg2NSwgMHg4MywgMHgxZSwgMHgwOSwgMHgyZgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzA0N1tdIF9faW5pdGNvbnN0ID0geworKwkweDg5LCAweGNjLCAweGU5LCAweGZiLCAweDQ3LCAweDQ0LCAweDFkLCAweDA3LAorKwkweGUwLCAweDI0LCAweDVhLCAweDY2LCAweGZlLCAweDhiLCAweDc3LCAweDhiCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX25vbmNlMDQ3W10gX19pbml0Y29uc3QgPSB7CisrCTB4MWEsIDB4NjUsIDB4MTgsIDB4ZjAsIDB4MmUsIDB4ZGUsIDB4MWQsIDB4YTYsCisrCTB4ODAsIDB4OTIsIDB4NjYsIDB4ZDkKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfa2V5MDQ3W10gX19pbml0Y29uc3QgPSB7CisrCTB4Y2IsIDB4NTUsIDB4NzUsIDB4ZjUsIDB4YzcsIDB4YzQsIDB4NWMsIDB4OTEsCisrCTB4Y2YsIDB4MzIsIDB4MGIsIDB4MTMsIDB4OWYsIDB4YjUsIDB4OTQsIDB4MjMsCisrCTB4NzUsIDB4NjAsIDB4ZDAsIDB4YTMsIDB4ZTYsIDB4ZjgsIDB4NjUsIDB4YTYsCisrCTB4N2QsIDB4NGYsIDB4NjMsIDB4M2YsIDB4MmMsIDB4MDgsIDB4ZjAsIDB4MTYKKyt9OworKworKy8qIHd5Y2hlcHJvb2YgLSBtaXNjICovCisrc3RhdGljIGNvbnN0IHU4IGVuY19pbnB1dDA0OFtdIF9faW5pdGNvbnN0ID0geworKwkweDg3LCAweGIzLCAweGE0LCAweGQ3LCAweGIyLCAweDZkLCAweDhkLCAweDMyLAorKwkweDAzLCAweGEwLCAweGRlLCAweDFkLCAweDY0LCAweGVmLCAweDgyLCAweGUzCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX291dHB1dDA0OFtdIF9faW5pdGNvbnN0ID0geworKwkweDk0LCAweGJjLCAweDgwLCAweDYyLCAweDFlLCAweGQxLCAweGU3LCAweDFiLAorKwkweDFmLCAweGQyLCAweGI1LCAweGMzLCAweGExLCAweDVlLCAweDM1LCAweDY4LAorKwkweDMzLCAweDM1LCAweDExLCAweDg2LCAweDE3LCAweDk2LCAweDk3LCAweDg0LAorKwkweDAxLCAweDU5LCAweDhiLCAweDk2LCAweDM3LCAweDIyLCAweGY1LCAweGIzCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2Fzc29jMDQ4W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZDEsIDB4OWYsIDB4MmQsIDB4OTgsIDB4OTAsIDB4OTUsIDB4ZjcsIDB4YWIsCisrCTB4MDMsIDB4YTUsIDB4ZmQsIDB4ZTgsIDB4NDQsIDB4MTYsIDB4ZTAsIDB4MGMsCisrCTB4MGUKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UwNDhbXSBfX2luaXRjb25zdCA9IHsKKysJMHg1NiwgMHg0ZCwgMHhlZSwgMHg0OSwgMHhhYiwgMHgwMCwgMHhkMiwgMHg0MCwKKysJMHhmYywgMHgxMCwgMHg2OCwgMHhjMworK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkwNDhbXSBfX2luaXRjb25zdCA9IHsKKysJMHhhNSwgMHg1NiwgMHg5ZSwgMHg3MiwgMHg5YSwgMHg2OSwgMHhiMiwgMHg0YiwKKysJMHhhNiwgMHhlMCwgMHhmZiwgMHgxNSwgMHhjNCwgMHg2MiwgMHg3OCwgMHg5NywKKysJMHg0MywgMHg2OCwgMHgyNCwgMHhjOSwgMHg0MSwgMHhlOSwgMHhkMCwgMHgwYiwKKysJMHgyZSwgMHg5MywgMHhmZCwgMHhkYywgMHg0YiwgMHhhNywgMHg3NiwgMHg1NworK307CisrCisrLyogd3ljaGVwcm9vZiAtIG1pc2MgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDQ5W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZTYsIDB4MDEsIDB4YjMsIDB4ODUsIDB4NTcsIDB4NzksIDB4N2QsIDB4YTIsCisrCTB4ZjgsIDB4YTQsIDB4MTAsIDB4NmEsIDB4MDgsIDB4OWQsIDB4MWQsIDB4YTYKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDQ5W10gX19pbml0Y29uc3QgPSB7CisrCTB4MjksIDB4OWIsIDB4NWQsIDB4M2YsIDB4M2QsIDB4MDMsIDB4YzAsIDB4ODcsCisrCTB4MjAsIDB4OWEsIDB4MTYsIDB4ZTIsIDB4ODUsIDB4MTQsIDB4MzEsIDB4MTEsCisrCTB4NGIsIDB4NDUsIDB4NGUsIDB4ZDEsIDB4OTgsIDB4ZGUsIDB4MTEsIDB4N2UsCisrCTB4ODMsIDB4ZWMsIDB4NDksIDB4ZmEsIDB4OGQsIDB4ODUsIDB4MDgsIDB4ZDYKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwNDlbXSBfX2luaXRjb25zdCA9IHsKKysJMHg1ZSwgMHg2NCwgMHg3MCwgMHhmYSwgMHhjZCwgMHg5OSwgMHhjMSwgMHhkOCwKKysJMHgxZSwgMHgzNywgMHhjZCwgMHg0NCwgMHgwMSwgMHg1ZiwgMHhlMSwgMHg5NCwKKysJMHg4MCwgMHhhMiwgMHhhNCwgMHhkMywgMHgzNSwgMHgyYSwgMHg0ZiwgMHhmNSwKKysJMHg2MCwgMHhjMCwgMHg2NCwgMHgwZiwgMHhkYiwgMHhkYQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTA0OVtdIF9faW5pdGNvbnN0ID0geworKwkweGRmLCAweDg3LCAweDEzLCAweGU4LCAweDdlLCAweGMzLCAweGRiLCAweGNmLAorKwkweGFkLCAweDE0LCAweGQ1LCAweDNlCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTA0OVtdIF9faW5pdGNvbnN0ID0geworKwkweDU2LCAweDIwLCAweDc0LCAweDY1LCAweGI0LCAweGU0LCAweDhlLCAweDZkLAorKwkweDA0LCAweDYzLCAweDBmLCAweDRhLCAweDQyLCAweGYzLCAweDVjLCAweGZjLAorKwkweDE2LCAweDNhLCAweGIyLCAweDg5LCAweGMyLCAweDJhLCAweDJiLCAweDQ3LAorKwkweDg0LCAweGY2LCAweGY5LCAweDI5LCAweDAzLCAweDMwLCAweGJlLCAweGUwCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gbWlzYyAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwNTBbXSBfX2luaXRjb25zdCA9IHsKKysJMHhkYywgMHg5ZSwgMHg5ZSwgMHhhZiwgMHgxMSwgMHhlMywgMHgxNCwgMHgxOCwKKysJMHgyZCwgMHhmNiwgMHhhNCwgMHhlYiwgMHhhMSwgMHg3YSwgMHhlYywgMHg5YworK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQwNTBbXSBfX2luaXRjb25zdCA9IHsKKysJMHg2MCwgMHg1YiwgMHhiZiwgMHg5MCwgMHhhZSwgMHhiOSwgMHg3NCwgMHhmNiwKKysJMHg2MCwgMHgyYiwgMHhjNywgMHg3OCwgMHgwNSwgMHg2ZiwgMHgwZCwgMHhjYSwKKysJMHgzOCwgMHhlYSwgMHgyMywgMHhkOSwgMHg5MCwgMHg1NCwgMHhiNCwgMHg2YiwKKysJMHg0MiwgMHhmZiwgMHhlMCwgMHgwNCwgMHgxMiwgMHg5ZCwgMHgyMiwgMHgwNAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzA1MFtdIF9faW5pdGNvbnN0ID0geworKwkweGJhLCAweDQ0LCAweDZmLCAweDZmLCAweDlhLCAweDBjLCAweGVkLCAweDIyLAorKwkweDQ1LCAweDBmLCAweGViLCAweDEwLCAweDczLCAweDdkLCAweDkwLCAweDA3LAorKwkweGZkLCAweDY5LCAweGFiLCAweGMxLCAweDliLCAweDFkLCAweDRkLCAweDkwLAorKwkweDQ5LCAweGE1LCAweDU1LCAweDFlLCAweDg2LCAweGVjLCAweDJiLCAweDM3CisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX25vbmNlMDUwW10gX19pbml0Y29uc3QgPSB7CisrCTB4OGQsIDB4ZjQsIDB4YjEsIDB4NWEsIDB4ODgsIDB4OGMsIDB4MzMsIDB4MjgsCisrCTB4NmEsIDB4N2IsIDB4NzYsIDB4NTEKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfa2V5MDUwW10gX19pbml0Y29uc3QgPSB7CisrCTB4MzksIDB4MzcsIDB4OTgsIDB4NmEsIDB4ZjgsIDB4NmQsIDB4YWYsIDB4YzEsCisrCTB4YmEsIDB4MGMsIDB4NDYsIDB4NzIsIDB4ZDgsIDB4YWIsIDB4YzQsIDB4NmMsCisrCTB4MjAsIDB4NzAsIDB4NjIsIDB4NjgsIDB4MmQsIDB4OWMsIDB4MjYsIDB4NGEsCisrCTB4YjAsIDB4NmQsIDB4NmMsIDB4NTgsIDB4MDcsIDB4MjAsIDB4NTEsIDB4MzAKKyt9OworKworKy8qIHd5Y2hlcHJvb2YgLSBtaXNjICovCisrc3RhdGljIGNvbnN0IHU4IGVuY19pbnB1dDA1MVtdIF9faW5pdGNvbnN0ID0geworKwkweDgxLCAweGNlLCAweDg0LCAweGVkLCAweGU5LCAweGIzLCAweDU4LCAweDU5LAorKwkweGNjLCAweDhjLCAweDQ5LCAweGE4LCAweGY2LCAweGJlLCAweDdkLCAweGM2CisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX291dHB1dDA1MVtdIF9faW5pdGNvbnN0ID0geworKwkweDdiLCAweDdjLCAweGUwLCAweGQ4LCAweDI0LCAweDgwLCAweDlhLCAweDcwLAorKwkweGRlLCAweDMyLCAweDU2LCAweDJjLCAweGNmLCAweDJjLCAweDJiLCAweGJkLAorKwkweDE1LCAweGQ0LCAweDRhLCAweDAwLCAweGNlLCAweDBkLCAweDE5LCAweGI0LAorKwkweDIzLCAweDFmLCAweDkyLCAweDFlLCAweDIyLCAweGJjLCAweDBhLCAweDQzCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2Fzc29jMDUxW10gX19pbml0Y29uc3QgPSB7CisrCTB4ZDQsIDB4MWEsIDB4ODIsIDB4OGQsIDB4NWUsIDB4NzEsIDB4ODIsIDB4OTIsCisrCTB4NDcsIDB4MDIsIDB4MTksIDB4MDUsIDB4NDAsIDB4MmUsIDB4YTIsIDB4NTcsCisrCTB4ZGMsIDB4Y2IsIDB4YzMsIDB4YjgsIDB4MGYsIDB4Y2QsIDB4NTYsIDB4NzUsCisrCTB4MDUsIDB4NmIsIDB4NjgsIDB4YmIsIDB4NTksIDB4ZTYsIDB4MmUsIDB4ODgsCisrCTB4NzMKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UwNTFbXSBfX2luaXRjb25zdCA9IHsKKysJMHhiZSwgMHg0MCwgMHhlNSwgMHhmMSwgMHhhMSwgMHgxOCwgMHgxNywgMHhhMCwKKysJMHhhOCwgMHhmYSwgMHg4OSwgMHg0OQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkwNTFbXSBfX2luaXRjb25zdCA9IHsKKysJMHgzNiwgMHgzNywgMHgyYSwgMHhiYywgMHhkYiwgMHg3OCwgMHhlMCwgMHgyNywKKysJMHg5NiwgMHg0NiwgMHhhYywgMHgzZCwgMHgxNywgMHg2YiwgMHg5NiwgMHg3NCwKKysJMHhlOSwgMHgxNSwgMHg0ZSwgMHhlYywgMHhmMCwgMHhkNSwgMHg0NiwgMHg5YywKKysJMHg2NSwgMHgxZSwgMHhjNywgMHhlMSwgMHg2YiwgMHg0YywgMHgxMSwgMHg5OQorK307CisrCisrLyogd3ljaGVwcm9vZiAtIG1pc2MgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDUyW10gX19pbml0Y29uc3QgPSB7CisrCTB4YTYsIDB4NjcsIDB4NDcsIDB4YzgsIDB4OWUsIDB4ODUsIDB4N2EsIDB4ZjMsCisrCTB4YTEsIDB4OGUsIDB4MmMsIDB4NzksIDB4NTAsIDB4MDAsIDB4ODcsIDB4ZWQKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDUyW10gX19pbml0Y29uc3QgPSB7CisrCTB4Y2EsIDB4ODIsIDB4YmYsIDB4ZjMsIDB4ZTIsIDB4ZjMsIDB4MTAsIDB4Y2MsCisrCTB4YzksIDB4NzYsIDB4NjcsIDB4MmMsIDB4NDQsIDB4MTUsIDB4ZTYsIDB4OWIsCisrCTB4NTcsIDB4NjMsIDB4OGMsIDB4NjIsIDB4YTUsIDB4ZDgsIDB4NWQsIDB4ZWQsCisrCTB4NzcsIDB4NGYsIDB4OTEsIDB4M2MsIDB4ODEsIDB4M2UsIDB4YTAsIDB4MzIKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwNTJbXSBfX2luaXRjb25zdCA9IHsKKysJMHgzZiwgMHgyZCwgMHhkNCwgMHg5YiwgMHhiZiwgMHgwOSwgMHhkNiwgMHg5YSwKKysJMHg3OCwgMHhhMywgMHhkOCwgMHgwZSwgMHhhMiwgMHg1NiwgMHg2NiwgMHgxNCwKKysJMHhmYywgMHgzNywgMHg5NCwgMHg3NCwgMHgxOSwgMHg2YywgMHgxYSwgMHhhZSwKKysJMHg4NCwgMHg1OCwgMHgzZCwgMHhhNywgMHgzZCwgMHg3ZiwgMHhmOCwgMHg1YywKKysJMHg2ZiwgMHg0MiwgMHhjYSwgMHg0MiwgMHgwNSwgMHg2YSwgMHg5NywgMHg5MiwKKysJMHhjYywgMHgxYiwgMHg5ZiwgMHhiMywgMHhjNywgMHhkMiwgMHg2MQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTA1MltdIF9faW5pdGNvbnN0ID0geworKwkweDg0LCAweGM4LCAweDdkLCAweGFlLCAweDRlLCAweGVlLCAweDI3LCAweDczLAorKwkweDBlLCAweGMzLCAweDVkLCAweDEyCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTA1MltdIF9faW5pdGNvbnN0ID0geworKwkweDlmLCAweDE0LCAweDc5LCAweGVkLCAweDA5LCAweDdkLCAweDdmLCAweGU1LAorKwkweDI5LCAweGMxLCAweDFmLCAweDJmLCAweDVhLCAweGRkLCAweDlhLCAweGFmLAorKwkweGY0LCAweGExLCAweGNhLCAweDBiLCAweDY4LCAweDk5LCAweDdhLCAweDJjLAorKwkweGI3LCAweGY3LCAweDk3LCAweDQ5LCAweGJkLCAweDkwLCAweGFhLCAweGY0CisrfTsKKysKKyAvKiB3eWNoZXByb29mIC0gbWlzYyAqLworIHN0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwNTNbXSBfX2luaXRjb25zdCA9IHsKKyAJMHgyNSwgMHg2ZCwgMHg0MCwgMHg4OCwgMHg4MCwgMHg5NCwgMHgxNywgMHg4MywKK0BAIC0yNzYwLDYgKzM4NTksMTI2IEBAIHN0YXRpYyBjb25zdCB1OCBlbmNfa2V5MDczW10gX19pbml0Y29uc3QKKyB9OworIAorIC8qIHd5Y2hlcHJvb2YgLSBjaGVja2luZyBmb3IgaW50IG92ZXJmbG93cyAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwNzRbXSBfX2luaXRjb25zdCA9IHsKKysJMHhkNCwgMHg1MCwgMHgwYiwgMHhmMCwgMHgwOSwgMHg0OSwgMHgzNSwgMHg1MSwKKysJMHhjMywgMHg4MCwgMHhhZCwgMHhmNSwgMHgyYywgMHg1NywgMHgzYSwgMHg2OSwKKysJMHhkZiwgMHg3ZSwgMHg4YiwgMHg3NiwgMHgyNCwgMHg2MywgMHgzMywgMHgwZiwKKysJMHhhYywgMHhjMSwgMHg2YSwgMHg1NywgMHgyNiwgMHhiZSwgMHg3MSwgMHg5MCwKKysJMHhjNiwgMHgzYywgMHg1YSwgMHgxYywgMHg5MiwgMHg2NSwgMHg4NCwgMHhhMCwKKysJMHg5NiwgMHg3NSwgMHg2OCwgMHgyOCwgMHhkYywgMHhkYywgMHg2NCwgMHhhYywKKysJMHhkZiwgMHg5NiwgMHgzZCwgMHg5MywgMHgxYiwgMHhmMSwgMHhkYSwgMHhlMiwKKysJMHgzOCwgMHhmMywgMHhmMSwgMHg1NywgMHgyMiwgMHg0YSwgMHhjNCwgMHhiNSwKKysJMHg0MiwgMHhkNywgMHg4NSwgMHhiMCwgMHhkZCwgMHg4NCwgMHhkYiwgMHg2YiwKKysJMHhlMywgMHhiYywgMHg1YSwgMHgzNiwgMHg2MywgMHhlOCwgMHg0MSwgMHg0OSwKKysJMHhmZiwgMHhiZSwgMHhkMCwgMHg5ZSwgMHg1NCwgMHhmNywgMHg4ZiwgMHgxNiwKKysJMHhhOCwgMHgyMiwgMHgzYiwgMHgyNCwgMHhjYiwgMHgwMSwgMHg5ZiwgMHg1OCwKKysJMHhiMiwgMHgxYiwgMHgwZSwgMHg1NSwgMHgxZSwgMHg3YSwgMHhhMCwgMHg3MywKKysJMHgyNywgMHg2MiwgMHg5NSwgMHg1MSwgMHgzNywgMHg2YywgMHhjYiwgMHhjMywKKysJMHg5MywgMHg3NiwgMHg3MSwgMHhhMCwgMHg2MiwgMHg5YiwgMHhkOSwgMHg1YywKKysJMHg5OSwgMHgxNSwgMHhjNywgMHg4NSwgMHg1NSwgMHg3NywgMHgxZSwgMHg3YQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQwNzRbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHgwYiwgMHgzMCwgMHgwZCwgMHg4ZCwgMHhhNSwgMHg2YywgMHgyMSwgMHg4NSwKKysJMHg3NSwgMHg1MiwgMHg3OSwgMHg1NSwgMHgzYywgMHg0YywgMHg4MiwgMHhjYQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzA3NFtdIF9faW5pdGNvbnN0ID0geworKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX25vbmNlMDc0W10gX19pbml0Y29uc3QgPSB7CisrCTB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsCisrCTB4MDAsIDB4MDIsIDB4NTAsIDB4NmUKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfa2V5MDc0W10gX19pbml0Y29uc3QgPSB7CisrCTB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsCisrCTB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsCisrCTB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsCisrCTB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAKKyt9OworKworKy8qIHd5Y2hlcHJvb2YgLSBjaGVja2luZyBmb3IgaW50IG92ZXJmbG93cyAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwNzVbXSBfX2luaXRjb25zdCA9IHsKKysJMHg3ZCwgMHhlOCwgMHg3ZiwgMHg2NywgMHgyOSwgMHg5NCwgMHg1MiwgMHg3NSwKKysJMHhkMCwgMHg2NSwgMHg1ZCwgMHhhNCwgMHhjNywgMHhmZCwgMHhlNCwgMHg1NiwKKysJMHg5ZSwgMHgxNiwgMHhmMSwgMHgxMSwgMHhiNSwgMHhlYiwgMHgyNiwgMHhjMiwKKysJMHgyZCwgMHg4NSwgMHg5ZSwgMHgzZiwgMHhmOCwgMHgyMiwgMHhlYywgMHhlZCwKKysJMHgzYSwgMHg2ZCwgMHhkOSwgMHhhNiwgMHgwZiwgMHgyMiwgMHg5NSwgMHg3ZiwKKysJMHg3YiwgMHg3YywgMHg4NSwgMHg3ZSwgMHg4OCwgMHgyMiwgMHhlYiwgMHg5ZiwKKysJMHhlMCwgMHhiOCwgMHhkNywgMHgwMiwgMHgyMSwgMHg0MSwgMHhmMiwgMHhkMCwKKysJMHhiNCwgMHg4ZiwgMHg0YiwgMHg1NiwgMHgxMiwgMHhkMywgMHgyMiwgMHhhOCwKKysJMHg4ZCwgMHhkMCwgMHhmZSwgMHgwYiwgMHg0ZCwgMHg5MSwgMHg3OSwgMHgzMiwKKysJMHg0ZiwgMHg3YywgMHg2YywgMHg5ZSwgMHg5OSwgMHgwZSwgMHhmYiwgMHhkOCwKKysJMHgwZSwgMHg1ZSwgMHhkNiwgMHg3NywgMHg1OCwgMHgyNiwgMHg0OSwgMHg4YiwKKysJMHgxZSwgMHhmZSwgMHgwZiwgMHg3MSwgMHhhMCwgMHhmMywgMHhlYywgMHg1YiwKKysJMHgyOSwgMHhjYiwgMHgyOCwgMHhjMiwgMHg1NCwgMHgwYSwgMHg3ZCwgMHhjZCwKKysJMHg1MSwgMHhiNywgMHhkYSwgMHhhZSwgMHhlMCwgMHhmZiwgMHg0YSwgMHg3ZiwKKysJMHgzYSwgMHhjMSwgMHhlZSwgMHg1NCwgMHhjMiwgMHg5ZSwgMHhlNCwgMHhjMSwKKysJMHg3MCwgMHhkZSwgMHg0MCwgMHg4ZiwgMHg2NiwgMHg2OSwgMHgyMSwgMHg5NAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQwNzVbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhjNSwgMHg3OCwgMHhlMiwgMHhhYSwgMHg0NCwgMHhkMywgMHgwOSwgMHhiNywKKysJMHhiNiwgMHhhNSwgMHgxOSwgMHgzYiwgMHhkYywgMHg2MSwgMHgxOCwgMHhmNQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzA3NVtdIF9faW5pdGNvbnN0ID0geworKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX25vbmNlMDc1W10gX19pbml0Y29uc3QgPSB7CisrCTB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsCisrCTB4MDAsIDB4MDMsIDB4MTgsIDB4YTUKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfa2V5MDc1W10gX19pbml0Y29uc3QgPSB7CisrCTB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsCisrCTB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsCisrCTB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsCisrCTB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAKKyt9OworKworKy8qIHd5Y2hlcHJvb2YgLSBjaGVja2luZyBmb3IgaW50IG92ZXJmbG93cyAqLworIHN0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwNzZbXSBfX2luaXRjb25zdCA9IHsKKyAJMHgxYiwgMHg5OSwgMHg2ZiwgMHg5YSwgMHgzYywgMHhjYywgMHg2NywgMHg4NSwKKyAJMHhkZSwgMHgyMiwgMHhmZiwgMHg1YiwgMHg4YSwgMHhkZCwgMHg5NSwgMHgwMiwKK0BAIC0zMzQ5LDYgKzQ1NjgsMjg2IEBAIHN0YXRpYyBjb25zdCB1OCBlbmNfa2V5MDg1W10gX19pbml0Y29uc3QKKyAJMHg5OCwgMHg5OSwgMHg5YSwgMHg5YiwgMHg5YywgMHg5ZCwgMHg5ZSwgMHg5ZgorIH07CisgCisrLyogd3ljaGVwcm9vZiAtIHNwZWNpYWwgY2FzZSB0YWcgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDg2W10gX19pbml0Y29uc3QgPSB7CisrCTB4OWEsIDB4NDksIDB4YzQsIDB4MGYsIDB4OGIsIDB4NDgsIDB4ZDcsIDB4YzYsCisrCTB4NmQsIDB4MWQsIDB4YjQsIDB4ZTUsIDB4M2YsIDB4MjAsIDB4ZjIsIDB4ZGQsCisrCTB4NGEsIDB4YWEsIDB4MjQsIDB4MWQsIDB4ZGEsIDB4YjIsIDB4NmIsIDB4NWIsCisrCTB4YzAsIDB4ZTIsIDB4MTgsIDB4YjcsIDB4MmMsIDB4MzMsIDB4OTAsIDB4ZjIsCisrCTB4ZGYsIDB4M2UsIDB4YmQsIDB4MDEsIDB4NzYsIDB4NzAsIDB4NDQsIDB4MTksCisrCTB4OTcsIDB4MmIsIDB4Y2QsIDB4YmMsIDB4NmIsIDB4YmMsIDB4YjMsIDB4ZTQsCisrCTB4ZTcsIDB4NGEsIDB4NzEsIDB4NTIsIDB4OGUsIDB4ZjUsIDB4MTIsIDB4NjMsCisrCTB4Y2UsIDB4MjQsIDB4ZTAsIDB4ZDUsIDB4NzUsIDB4ZTAsIDB4ZTQsIDB4NGQKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDg2W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisrCTB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwODZbXSBfX2luaXRjb25zdCA9IHsKKysJMHg4NSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhhNiwgMHg5MCwgMHgyZiwgMHhjYiwgMHhjOCwgMHg4MywgMHhiYiwgMHhjMSwKKysJMHg4MCwgMHhiMiwgMHg1NiwgMHhhZSwgMHgzNCwgMHhhZCwgMHg3ZiwgMHgwMAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTA4NltdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorKwkweDA4LCAweDA5LCAweDBhLCAweDBiCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTA4NltdIF9faW5pdGNvbnN0ID0geworKwkweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAorKwkweDg4LCAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAweDhmLAorKwkweDkwLCAweDkxLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LAorKwkweDk4LCAweDk5LCAweDlhLCAweDliLCAweDljLCAweDlkLCAweDllLCAweDlmCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gc3BlY2lhbCBjYXNlIHRhZyAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwODdbXSBfX2luaXRjb25zdCA9IHsKKysJMHg5YSwgMHg0OSwgMHhjNCwgMHgwZiwgMHg4YiwgMHg0OCwgMHhkNywgMHhjNiwKKysJMHg2ZCwgMHgxZCwgMHhiNCwgMHhlNSwgMHgzZiwgMHgyMCwgMHhmMiwgMHhkZCwKKysJMHg0YSwgMHhhYSwgMHgyNCwgMHgxZCwgMHhkYSwgMHhiMiwgMHg2YiwgMHg1YiwKKysJMHhjMCwgMHhlMiwgMHgxOCwgMHhiNywgMHgyYywgMHgzMywgMHg5MCwgMHhmMiwKKysJMHhkZiwgMHgzZSwgMHhiZCwgMHgwMSwgMHg3NiwgMHg3MCwgMHg0NCwgMHgxOSwKKysJMHg5NywgMHgyYiwgMHhjZCwgMHhiYywgMHg2YiwgMHhiYywgMHhiMywgMHhlNCwKKysJMHhlNywgMHg0YSwgMHg3MSwgMHg1MiwgMHg4ZSwgMHhmNSwgMHgxMiwgMHg2MywKKysJMHhjZSwgMHgyNCwgMHhlMCwgMHhkNSwgMHg3NSwgMHhlMCwgMHhlNCwgMHg0ZAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQwODdbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzA4N1tdIF9faW5pdGNvbnN0ID0geworKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDI0LCAweDdlLCAweDUwLCAweDY0LCAweDJhLCAweDFjLCAweDBhLCAweDJmLAorKwkweDhmLCAweDc3LCAweDIxLCAweDk2LCAweDA5LCAweGRiLCAweGE5LCAweDU4CisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX25vbmNlMDg3W10gX19pbml0Y29uc3QgPSB7CisrCTB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisrCTB4MDgsIDB4MDksIDB4MGEsIDB4MGIKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfa2V5MDg3W10gX19pbml0Y29uc3QgPSB7CisrCTB4ODAsIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCisrCTB4ODgsIDB4ODksIDB4OGEsIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsCisrCTB4OTAsIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsCisrCTB4OTgsIDB4OTksIDB4OWEsIDB4OWIsIDB4OWMsIDB4OWQsIDB4OWUsIDB4OWYKKyt9OworKworKy8qIHd5Y2hlcHJvb2YgLSBzcGVjaWFsIGNhc2UgdGFnICovCisrc3RhdGljIGNvbnN0IHU4IGVuY19pbnB1dDA4OFtdIF9faW5pdGNvbnN0ID0geworKwkweDlhLCAweDQ5LCAweGM0LCAweDBmLCAweDhiLCAweDQ4LCAweGQ3LCAweGM2LAorKwkweDZkLCAweDFkLCAweGI0LCAweGU1LCAweDNmLCAweDIwLCAweGYyLCAweGRkLAorKwkweDRhLCAweGFhLCAweDI0LCAweDFkLCAweGRhLCAweGIyLCAweDZiLCAweDViLAorKwkweGMwLCAweGUyLCAweDE4LCAweGI3LCAweDJjLCAweDMzLCAweDkwLCAweGYyLAorKwkweGRmLCAweDNlLCAweGJkLCAweDAxLCAweDc2LCAweDcwLCAweDQ0LCAweDE5LAorKwkweDk3LCAweDJiLCAweGNkLCAweGJjLCAweDZiLCAweGJjLCAweGIzLCAweGU0LAorKwkweGU3LCAweDRhLCAweDcxLCAweDUyLCAweDhlLCAweGY1LCAweDEyLCAweDYzLAorKwkweGNlLCAweDI0LCAweGUwLCAweGQ1LCAweDc1LCAweGUwLCAweGU0LCAweDRkCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX291dHB1dDA4OFtdIF9faW5pdGNvbnN0ID0geworKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2Fzc29jMDg4W10gX19pbml0Y29uc3QgPSB7CisrCTB4N2MsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZDksIDB4ZTcsIDB4MmMsIDB4MDYsIDB4NGEsIDB4YzgsIDB4OTYsIDB4MWYsCisrCTB4M2YsIDB4YTUsIDB4ODUsIDB4ZTAsIDB4ZTIsIDB4YWIsIDB4ZDYsIDB4MDAKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UwODhbXSBfX2luaXRjb25zdCA9IHsKKysJMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKysJMHgwOCwgMHgwOSwgMHgwYSwgMHgwYgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkwODhbXSBfX2luaXRjb25zdCA9IHsKKysJMHg4MCwgMHg4MSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywKKysJMHg4OCwgMHg4OSwgMHg4YSwgMHg4YiwgMHg4YywgMHg4ZCwgMHg4ZSwgMHg4ZiwKKysJMHg5MCwgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywKKysJMHg5OCwgMHg5OSwgMHg5YSwgMHg5YiwgMHg5YywgMHg5ZCwgMHg5ZSwgMHg5ZgorK307CisrCisrLyogd3ljaGVwcm9vZiAtIHNwZWNpYWwgY2FzZSB0YWcgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDg5W10gX19pbml0Y29uc3QgPSB7CisrCTB4OWEsIDB4NDksIDB4YzQsIDB4MGYsIDB4OGIsIDB4NDgsIDB4ZDcsIDB4YzYsCisrCTB4NmQsIDB4MWQsIDB4YjQsIDB4ZTUsIDB4M2YsIDB4MjAsIDB4ZjIsIDB4ZGQsCisrCTB4NGEsIDB4YWEsIDB4MjQsIDB4MWQsIDB4ZGEsIDB4YjIsIDB4NmIsIDB4NWIsCisrCTB4YzAsIDB4ZTIsIDB4MTgsIDB4YjcsIDB4MmMsIDB4MzMsIDB4OTAsIDB4ZjIsCisrCTB4ZGYsIDB4M2UsIDB4YmQsIDB4MDEsIDB4NzYsIDB4NzAsIDB4NDQsIDB4MTksCisrCTB4OTcsIDB4MmIsIDB4Y2QsIDB4YmMsIDB4NmIsIDB4YmMsIDB4YjMsIDB4ZTQsCisrCTB4ZTcsIDB4NGEsIDB4NzEsIDB4NTIsIDB4OGUsIDB4ZjUsIDB4MTIsIDB4NjMsCisrCTB4Y2UsIDB4MjQsIDB4ZTAsIDB4ZDUsIDB4NzUsIDB4ZTAsIDB4ZTQsIDB4NGQKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDg5W10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwODlbXSBfX2luaXRjb25zdCA9IHsKKysJMHg2NSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHg5NSwgMHhhZiwgMHgwZiwgMHg0ZCwgMHgwYiwgMHg2OCwgMHg2ZSwgMHhhZSwKKysJMHhjYywgMHhjYSwgMHg0MywgMHgwNywgMHhkNSwgMHg5NiwgMHhmNSwgMHgwMgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTA4OVtdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorKwkweDA4LCAweDA5LCAweDBhLCAweDBiCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTA4OVtdIF9faW5pdGNvbnN0ID0geworKwkweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAorKwkweDg4LCAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAweDhmLAorKwkweDkwLCAweDkxLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LAorKwkweDk4LCAweDk5LCAweDlhLCAweDliLCAweDljLCAweDlkLCAweDllLCAweDlmCisrfTsKKysKKysvKiB3eWNoZXByb29mIC0gc3BlY2lhbCBjYXNlIHRhZyAqLworK3N0YXRpYyBjb25zdCB1OCBlbmNfaW5wdXQwOTBbXSBfX2luaXRjb25zdCA9IHsKKysJMHg5YSwgMHg0OSwgMHhjNCwgMHgwZiwgMHg4YiwgMHg0OCwgMHhkNywgMHhjNiwKKysJMHg2ZCwgMHgxZCwgMHhiNCwgMHhlNSwgMHgzZiwgMHgyMCwgMHhmMiwgMHhkZCwKKysJMHg0YSwgMHhhYSwgMHgyNCwgMHgxZCwgMHhkYSwgMHhiMiwgMHg2YiwgMHg1YiwKKysJMHhjMCwgMHhlMiwgMHgxOCwgMHhiNywgMHgyYywgMHgzMywgMHg5MCwgMHhmMiwKKysJMHhkZiwgMHgzZSwgMHhiZCwgMHgwMSwgMHg3NiwgMHg3MCwgMHg0NCwgMHgxOSwKKysJMHg5NywgMHgyYiwgMHhjZCwgMHhiYywgMHg2YiwgMHhiYywgMHhiMywgMHhlNCwKKysJMHhlNywgMHg0YSwgMHg3MSwgMHg1MiwgMHg4ZSwgMHhmNSwgMHgxMiwgMHg2MywKKysJMHhjZSwgMHgyNCwgMHhlMCwgMHhkNSwgMHg3NSwgMHhlMCwgMHhlNCwgMHg0ZAorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19vdXRwdXQwOTBbXSBfX2luaXRjb25zdCA9IHsKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3ZgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19hc3NvYzA5MFtdIF9faW5pdGNvbnN0ID0geworKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDg1LCAweDQwLCAweGI0LCAweDY0LCAweDM1LCAweDc3LCAweDA3LCAweGJlLAorKwkweDNhLCAweDM5LCAweGQ1LCAweDVjLCAweDM0LCAweGY4LCAweGJjLCAweGIzCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX25vbmNlMDkwW10gX19pbml0Y29uc3QgPSB7CisrCTB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisrCTB4MDgsIDB4MDksIDB4MGEsIDB4MGIKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfa2V5MDkwW10gX19pbml0Y29uc3QgPSB7CisrCTB4ODAsIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsCisrCTB4ODgsIDB4ODksIDB4OGEsIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsCisrCTB4OTAsIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsCisrCTB4OTgsIDB4OTksIDB4OWEsIDB4OWIsIDB4OWMsIDB4OWQsIDB4OWUsIDB4OWYKKyt9OworKworKy8qIHd5Y2hlcHJvb2YgLSBzcGVjaWFsIGNhc2UgdGFnICovCisrc3RhdGljIGNvbnN0IHU4IGVuY19pbnB1dDA5MVtdIF9faW5pdGNvbnN0ID0geworKwkweDlhLCAweDQ5LCAweGM0LCAweDBmLCAweDhiLCAweDQ4LCAweGQ3LCAweGM2LAorKwkweDZkLCAweDFkLCAweGI0LCAweGU1LCAweDNmLCAweDIwLCAweGYyLCAweGRkLAorKwkweDRhLCAweGFhLCAweDI0LCAweDFkLCAweGRhLCAweGIyLCAweDZiLCAweDViLAorKwkweGMwLCAweGUyLCAweDE4LCAweGI3LCAweDJjLCAweDMzLCAweDkwLCAweGYyLAorKwkweGRmLCAweDNlLCAweGJkLCAweDAxLCAweDc2LCAweDcwLCAweDQ0LCAweDE5LAorKwkweDk3LCAweDJiLCAweGNkLCAweGJjLCAweDZiLCAweGJjLCAweGIzLCAweGU0LAorKwkweGU3LCAweDRhLCAweDcxLCAweDUyLCAweDhlLCAweGY1LCAweDEyLCAweDYzLAorKwkweGNlLCAweDI0LCAweGUwLCAweGQ1LCAweDc1LCAweGUwLCAweGU0LCAweDRkCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX291dHB1dDA5MVtdIF9faW5pdGNvbnN0ID0geworKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorKwkweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLAorKwkweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2Fzc29jMDkxW10gX19pbml0Y29uc3QgPSB7CisrCTB4NGYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4NjYsIDB4MjMsIDB4ZDksIDB4OTAsIDB4YjgsIDB4OTgsIDB4ZDgsIDB4MzAsCisrCTB4ZDIsIDB4MTIsIDB4YWYsIDB4MjMsIDB4ODMsIDB4MzMsIDB4MDcsIDB4MDEKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfbm9uY2UwOTFbXSBfX2luaXRjb25zdCA9IHsKKysJMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKysJMHgwOCwgMHgwOSwgMHgwYSwgMHgwYgorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19rZXkwOTFbXSBfX2luaXRjb25zdCA9IHsKKysJMHg4MCwgMHg4MSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywKKysJMHg4OCwgMHg4OSwgMHg4YSwgMHg4YiwgMHg4YywgMHg4ZCwgMHg4ZSwgMHg4ZiwKKysJMHg5MCwgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywKKysJMHg5OCwgMHg5OSwgMHg5YSwgMHg5YiwgMHg5YywgMHg5ZCwgMHg5ZSwgMHg5ZgorK307CisrCisrLyogd3ljaGVwcm9vZiAtIHNwZWNpYWwgY2FzZSB0YWcgKi8KKytzdGF0aWMgY29uc3QgdTggZW5jX2lucHV0MDkyW10gX19pbml0Y29uc3QgPSB7CisrCTB4OWEsIDB4NDksIDB4YzQsIDB4MGYsIDB4OGIsIDB4NDgsIDB4ZDcsIDB4YzYsCisrCTB4NmQsIDB4MWQsIDB4YjQsIDB4ZTUsIDB4M2YsIDB4MjAsIDB4ZjIsIDB4ZGQsCisrCTB4NGEsIDB4YWEsIDB4MjQsIDB4MWQsIDB4ZGEsIDB4YjIsIDB4NmIsIDB4NWIsCisrCTB4YzAsIDB4ZTIsIDB4MTgsIDB4YjcsIDB4MmMsIDB4MzMsIDB4OTAsIDB4ZjIsCisrCTB4ZGYsIDB4M2UsIDB4YmQsIDB4MDEsIDB4NzYsIDB4NzAsIDB4NDQsIDB4MTksCisrCTB4OTcsIDB4MmIsIDB4Y2QsIDB4YmMsIDB4NmIsIDB4YmMsIDB4YjMsIDB4ZTQsCisrCTB4ZTcsIDB4NGEsIDB4NzEsIDB4NTIsIDB4OGUsIDB4ZjUsIDB4MTIsIDB4NjMsCisrCTB4Y2UsIDB4MjQsIDB4ZTAsIDB4ZDUsIDB4NzUsIDB4ZTAsIDB4ZTQsIDB4NGQKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfb3V0cHV0MDkyW10gX19pbml0Y29uc3QgPSB7CisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisrCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKKyt9OworK3N0YXRpYyBjb25zdCB1OCBlbmNfYXNzb2MwOTJbXSBfX2luaXRjb25zdCA9IHsKKysJMHg4MywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKysJMHg1ZiwgMHgxNiwgMHhkMCwgMHg5ZiwgMHgxNywgMHg3OCwgMHg3MiwgMHgxMSwKKysJMHhiNywgMHhkNCwgMHg4NCwgMHhlMCwgMHgyNCwgMHhmOCwgMHg5NywgMHgwMQorK307Cisrc3RhdGljIGNvbnN0IHU4IGVuY19ub25jZTA5MltdIF9faW5pdGNvbnN0ID0geworKwkweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorKwkweDA4LCAweDA5LCAweDBhLCAweDBiCisrfTsKKytzdGF0aWMgY29uc3QgdTggZW5jX2tleTA5MltdIF9faW5pdGNvbnN0ID0geworKwkweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAorKwkweDg4LCAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAweDhmLAorKwkweDkwLCAweDkxLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LCAweDk3LAorKwkweDk4LCAweDk5LCAweDlhLCAweDliLCAweDljLCAweDlkLCAweDllLCAweDlmCisrfTsKKysKKyAvKiB3eWNoZXByb29mIC0gZWRnZSBjYXNlIGludGVybWVkaWF0ZSBzdW1zIGluIHBvbHkxMzA1ICovCisgc3RhdGljIGNvbnN0IHU4IGVuY19pbnB1dDA5M1tdIF9faW5pdGNvbnN0ID0geworIAkweDAwLCAweDUyLCAweDM1LCAweGQyLCAweGE5LCAweDE5LCAweGYyLCAweDhkLAorQEAgLTQ0NTUsNiArNTk1NCw4NiBAQCBjaGFjaGEyMHBvbHkxMzA1X2VuY192ZWN0b3JzW10gX19pbml0Y29uCisgCSAgc2l6ZW9mKGVuY19pbnB1dDAxMSksIHNpemVvZihlbmNfYXNzb2MwMTEpLCBzaXplb2YoZW5jX25vbmNlMDExKSB9LAorIAl7IGVuY19pbnB1dDAxMiwgZW5jX291dHB1dDAxMiwgZW5jX2Fzc29jMDEyLCBlbmNfbm9uY2UwMTIsIGVuY19rZXkwMTIsCisgCSAgc2l6ZW9mKGVuY19pbnB1dDAxMiksIHNpemVvZihlbmNfYXNzb2MwMTIpLCBzaXplb2YoZW5jX25vbmNlMDEyKSB9LAorKwl7IGVuY19pbnB1dDAxMywgZW5jX291dHB1dDAxMywgZW5jX2Fzc29jMDEzLCBlbmNfbm9uY2UwMTMsIGVuY19rZXkwMTMsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAxMyksIHNpemVvZihlbmNfYXNzb2MwMTMpLCBzaXplb2YoZW5jX25vbmNlMDEzKSB9LAorKwl7IGVuY19pbnB1dDAxNCwgZW5jX291dHB1dDAxNCwgZW5jX2Fzc29jMDE0LCBlbmNfbm9uY2UwMTQsIGVuY19rZXkwMTQsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAxNCksIHNpemVvZihlbmNfYXNzb2MwMTQpLCBzaXplb2YoZW5jX25vbmNlMDE0KSB9LAorKwl7IGVuY19pbnB1dDAxNSwgZW5jX291dHB1dDAxNSwgZW5jX2Fzc29jMDE1LCBlbmNfbm9uY2UwMTUsIGVuY19rZXkwMTUsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAxNSksIHNpemVvZihlbmNfYXNzb2MwMTUpLCBzaXplb2YoZW5jX25vbmNlMDE1KSB9LAorKwl7IGVuY19pbnB1dDAxNiwgZW5jX291dHB1dDAxNiwgZW5jX2Fzc29jMDE2LCBlbmNfbm9uY2UwMTYsIGVuY19rZXkwMTYsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAxNiksIHNpemVvZihlbmNfYXNzb2MwMTYpLCBzaXplb2YoZW5jX25vbmNlMDE2KSB9LAorKwl7IGVuY19pbnB1dDAxNywgZW5jX291dHB1dDAxNywgZW5jX2Fzc29jMDE3LCBlbmNfbm9uY2UwMTcsIGVuY19rZXkwMTcsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAxNyksIHNpemVvZihlbmNfYXNzb2MwMTcpLCBzaXplb2YoZW5jX25vbmNlMDE3KSB9LAorKwl7IGVuY19pbnB1dDAxOCwgZW5jX291dHB1dDAxOCwgZW5jX2Fzc29jMDE4LCBlbmNfbm9uY2UwMTgsIGVuY19rZXkwMTgsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAxOCksIHNpemVvZihlbmNfYXNzb2MwMTgpLCBzaXplb2YoZW5jX25vbmNlMDE4KSB9LAorKwl7IGVuY19pbnB1dDAxOSwgZW5jX291dHB1dDAxOSwgZW5jX2Fzc29jMDE5LCBlbmNfbm9uY2UwMTksIGVuY19rZXkwMTksCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAxOSksIHNpemVvZihlbmNfYXNzb2MwMTkpLCBzaXplb2YoZW5jX25vbmNlMDE5KSB9LAorKwl7IGVuY19pbnB1dDAyMCwgZW5jX291dHB1dDAyMCwgZW5jX2Fzc29jMDIwLCBlbmNfbm9uY2UwMjAsIGVuY19rZXkwMjAsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAyMCksIHNpemVvZihlbmNfYXNzb2MwMjApLCBzaXplb2YoZW5jX25vbmNlMDIwKSB9LAorKwl7IGVuY19pbnB1dDAyMSwgZW5jX291dHB1dDAyMSwgZW5jX2Fzc29jMDIxLCBlbmNfbm9uY2UwMjEsIGVuY19rZXkwMjEsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAyMSksIHNpemVvZihlbmNfYXNzb2MwMjEpLCBzaXplb2YoZW5jX25vbmNlMDIxKSB9LAorKwl7IGVuY19pbnB1dDAyMiwgZW5jX291dHB1dDAyMiwgZW5jX2Fzc29jMDIyLCBlbmNfbm9uY2UwMjIsIGVuY19rZXkwMjIsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAyMiksIHNpemVvZihlbmNfYXNzb2MwMjIpLCBzaXplb2YoZW5jX25vbmNlMDIyKSB9LAorKwl7IGVuY19pbnB1dDAyMywgZW5jX291dHB1dDAyMywgZW5jX2Fzc29jMDIzLCBlbmNfbm9uY2UwMjMsIGVuY19rZXkwMjMsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAyMyksIHNpemVvZihlbmNfYXNzb2MwMjMpLCBzaXplb2YoZW5jX25vbmNlMDIzKSB9LAorKwl7IGVuY19pbnB1dDAyNCwgZW5jX291dHB1dDAyNCwgZW5jX2Fzc29jMDI0LCBlbmNfbm9uY2UwMjQsIGVuY19rZXkwMjQsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAyNCksIHNpemVvZihlbmNfYXNzb2MwMjQpLCBzaXplb2YoZW5jX25vbmNlMDI0KSB9LAorKwl7IGVuY19pbnB1dDAyNSwgZW5jX291dHB1dDAyNSwgZW5jX2Fzc29jMDI1LCBlbmNfbm9uY2UwMjUsIGVuY19rZXkwMjUsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAyNSksIHNpemVvZihlbmNfYXNzb2MwMjUpLCBzaXplb2YoZW5jX25vbmNlMDI1KSB9LAorKwl7IGVuY19pbnB1dDAyNiwgZW5jX291dHB1dDAyNiwgZW5jX2Fzc29jMDI2LCBlbmNfbm9uY2UwMjYsIGVuY19rZXkwMjYsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAyNiksIHNpemVvZihlbmNfYXNzb2MwMjYpLCBzaXplb2YoZW5jX25vbmNlMDI2KSB9LAorKwl7IGVuY19pbnB1dDAyNywgZW5jX291dHB1dDAyNywgZW5jX2Fzc29jMDI3LCBlbmNfbm9uY2UwMjcsIGVuY19rZXkwMjcsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAyNyksIHNpemVvZihlbmNfYXNzb2MwMjcpLCBzaXplb2YoZW5jX25vbmNlMDI3KSB9LAorKwl7IGVuY19pbnB1dDAyOCwgZW5jX291dHB1dDAyOCwgZW5jX2Fzc29jMDI4LCBlbmNfbm9uY2UwMjgsIGVuY19rZXkwMjgsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAyOCksIHNpemVvZihlbmNfYXNzb2MwMjgpLCBzaXplb2YoZW5jX25vbmNlMDI4KSB9LAorKwl7IGVuY19pbnB1dDAyOSwgZW5jX291dHB1dDAyOSwgZW5jX2Fzc29jMDI5LCBlbmNfbm9uY2UwMjksIGVuY19rZXkwMjksCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAyOSksIHNpemVvZihlbmNfYXNzb2MwMjkpLCBzaXplb2YoZW5jX25vbmNlMDI5KSB9LAorKwl7IGVuY19pbnB1dDAzMCwgZW5jX291dHB1dDAzMCwgZW5jX2Fzc29jMDMwLCBlbmNfbm9uY2UwMzAsIGVuY19rZXkwMzAsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAzMCksIHNpemVvZihlbmNfYXNzb2MwMzApLCBzaXplb2YoZW5jX25vbmNlMDMwKSB9LAorKwl7IGVuY19pbnB1dDAzMSwgZW5jX291dHB1dDAzMSwgZW5jX2Fzc29jMDMxLCBlbmNfbm9uY2UwMzEsIGVuY19rZXkwMzEsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAzMSksIHNpemVvZihlbmNfYXNzb2MwMzEpLCBzaXplb2YoZW5jX25vbmNlMDMxKSB9LAorKwl7IGVuY19pbnB1dDAzMiwgZW5jX291dHB1dDAzMiwgZW5jX2Fzc29jMDMyLCBlbmNfbm9uY2UwMzIsIGVuY19rZXkwMzIsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAzMiksIHNpemVvZihlbmNfYXNzb2MwMzIpLCBzaXplb2YoZW5jX25vbmNlMDMyKSB9LAorKwl7IGVuY19pbnB1dDAzMywgZW5jX291dHB1dDAzMywgZW5jX2Fzc29jMDMzLCBlbmNfbm9uY2UwMzMsIGVuY19rZXkwMzMsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAzMyksIHNpemVvZihlbmNfYXNzb2MwMzMpLCBzaXplb2YoZW5jX25vbmNlMDMzKSB9LAorKwl7IGVuY19pbnB1dDAzNCwgZW5jX291dHB1dDAzNCwgZW5jX2Fzc29jMDM0LCBlbmNfbm9uY2UwMzQsIGVuY19rZXkwMzQsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAzNCksIHNpemVvZihlbmNfYXNzb2MwMzQpLCBzaXplb2YoZW5jX25vbmNlMDM0KSB9LAorKwl7IGVuY19pbnB1dDAzNSwgZW5jX291dHB1dDAzNSwgZW5jX2Fzc29jMDM1LCBlbmNfbm9uY2UwMzUsIGVuY19rZXkwMzUsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAzNSksIHNpemVvZihlbmNfYXNzb2MwMzUpLCBzaXplb2YoZW5jX25vbmNlMDM1KSB9LAorKwl7IGVuY19pbnB1dDAzNiwgZW5jX291dHB1dDAzNiwgZW5jX2Fzc29jMDM2LCBlbmNfbm9uY2UwMzYsIGVuY19rZXkwMzYsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAzNiksIHNpemVvZihlbmNfYXNzb2MwMzYpLCBzaXplb2YoZW5jX25vbmNlMDM2KSB9LAorKwl7IGVuY19pbnB1dDAzNywgZW5jX291dHB1dDAzNywgZW5jX2Fzc29jMDM3LCBlbmNfbm9uY2UwMzcsIGVuY19rZXkwMzcsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAzNyksIHNpemVvZihlbmNfYXNzb2MwMzcpLCBzaXplb2YoZW5jX25vbmNlMDM3KSB9LAorKwl7IGVuY19pbnB1dDAzOCwgZW5jX291dHB1dDAzOCwgZW5jX2Fzc29jMDM4LCBlbmNfbm9uY2UwMzgsIGVuY19rZXkwMzgsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAzOCksIHNpemVvZihlbmNfYXNzb2MwMzgpLCBzaXplb2YoZW5jX25vbmNlMDM4KSB9LAorKwl7IGVuY19pbnB1dDAzOSwgZW5jX291dHB1dDAzOSwgZW5jX2Fzc29jMDM5LCBlbmNfbm9uY2UwMzksIGVuY19rZXkwMzksCisrCSAgc2l6ZW9mKGVuY19pbnB1dDAzOSksIHNpemVvZihlbmNfYXNzb2MwMzkpLCBzaXplb2YoZW5jX25vbmNlMDM5KSB9LAorKwl7IGVuY19pbnB1dDA0MCwgZW5jX291dHB1dDA0MCwgZW5jX2Fzc29jMDQwLCBlbmNfbm9uY2UwNDAsIGVuY19rZXkwNDAsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA0MCksIHNpemVvZihlbmNfYXNzb2MwNDApLCBzaXplb2YoZW5jX25vbmNlMDQwKSB9LAorKwl7IGVuY19pbnB1dDA0MSwgZW5jX291dHB1dDA0MSwgZW5jX2Fzc29jMDQxLCBlbmNfbm9uY2UwNDEsIGVuY19rZXkwNDEsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA0MSksIHNpemVvZihlbmNfYXNzb2MwNDEpLCBzaXplb2YoZW5jX25vbmNlMDQxKSB9LAorKwl7IGVuY19pbnB1dDA0MiwgZW5jX291dHB1dDA0MiwgZW5jX2Fzc29jMDQyLCBlbmNfbm9uY2UwNDIsIGVuY19rZXkwNDIsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA0MiksIHNpemVvZihlbmNfYXNzb2MwNDIpLCBzaXplb2YoZW5jX25vbmNlMDQyKSB9LAorKwl7IGVuY19pbnB1dDA0MywgZW5jX291dHB1dDA0MywgZW5jX2Fzc29jMDQzLCBlbmNfbm9uY2UwNDMsIGVuY19rZXkwNDMsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA0MyksIHNpemVvZihlbmNfYXNzb2MwNDMpLCBzaXplb2YoZW5jX25vbmNlMDQzKSB9LAorKwl7IGVuY19pbnB1dDA0NCwgZW5jX291dHB1dDA0NCwgZW5jX2Fzc29jMDQ0LCBlbmNfbm9uY2UwNDQsIGVuY19rZXkwNDQsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA0NCksIHNpemVvZihlbmNfYXNzb2MwNDQpLCBzaXplb2YoZW5jX25vbmNlMDQ0KSB9LAorKwl7IGVuY19pbnB1dDA0NSwgZW5jX291dHB1dDA0NSwgZW5jX2Fzc29jMDQ1LCBlbmNfbm9uY2UwNDUsIGVuY19rZXkwNDUsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA0NSksIHNpemVvZihlbmNfYXNzb2MwNDUpLCBzaXplb2YoZW5jX25vbmNlMDQ1KSB9LAorKwl7IGVuY19pbnB1dDA0NiwgZW5jX291dHB1dDA0NiwgZW5jX2Fzc29jMDQ2LCBlbmNfbm9uY2UwNDYsIGVuY19rZXkwNDYsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA0NiksIHNpemVvZihlbmNfYXNzb2MwNDYpLCBzaXplb2YoZW5jX25vbmNlMDQ2KSB9LAorKwl7IGVuY19pbnB1dDA0NywgZW5jX291dHB1dDA0NywgZW5jX2Fzc29jMDQ3LCBlbmNfbm9uY2UwNDcsIGVuY19rZXkwNDcsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA0NyksIHNpemVvZihlbmNfYXNzb2MwNDcpLCBzaXplb2YoZW5jX25vbmNlMDQ3KSB9LAorKwl7IGVuY19pbnB1dDA0OCwgZW5jX291dHB1dDA0OCwgZW5jX2Fzc29jMDQ4LCBlbmNfbm9uY2UwNDgsIGVuY19rZXkwNDgsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA0OCksIHNpemVvZihlbmNfYXNzb2MwNDgpLCBzaXplb2YoZW5jX25vbmNlMDQ4KSB9LAorKwl7IGVuY19pbnB1dDA0OSwgZW5jX291dHB1dDA0OSwgZW5jX2Fzc29jMDQ5LCBlbmNfbm9uY2UwNDksIGVuY19rZXkwNDksCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA0OSksIHNpemVvZihlbmNfYXNzb2MwNDkpLCBzaXplb2YoZW5jX25vbmNlMDQ5KSB9LAorKwl7IGVuY19pbnB1dDA1MCwgZW5jX291dHB1dDA1MCwgZW5jX2Fzc29jMDUwLCBlbmNfbm9uY2UwNTAsIGVuY19rZXkwNTAsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA1MCksIHNpemVvZihlbmNfYXNzb2MwNTApLCBzaXplb2YoZW5jX25vbmNlMDUwKSB9LAorKwl7IGVuY19pbnB1dDA1MSwgZW5jX291dHB1dDA1MSwgZW5jX2Fzc29jMDUxLCBlbmNfbm9uY2UwNTEsIGVuY19rZXkwNTEsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA1MSksIHNpemVvZihlbmNfYXNzb2MwNTEpLCBzaXplb2YoZW5jX25vbmNlMDUxKSB9LAorKwl7IGVuY19pbnB1dDA1MiwgZW5jX291dHB1dDA1MiwgZW5jX2Fzc29jMDUyLCBlbmNfbm9uY2UwNTIsIGVuY19rZXkwNTIsCisrCSAgc2l6ZW9mKGVuY19pbnB1dDA1MiksIHNpemVvZihlbmNfYXNzb2MwNTIpLCBzaXplb2YoZW5jX25vbmNlMDUyKSB9LAorIAl7IGVuY19pbnB1dDA1MywgZW5jX291dHB1dDA1MywgZW5jX2Fzc29jMDUzLCBlbmNfbm9uY2UwNTMsIGVuY19rZXkwNTMsCisgCSAgc2l6ZW9mKGVuY19pbnB1dDA1MyksIHNpemVvZihlbmNfYXNzb2MwNTMpLCBzaXplb2YoZW5jX25vbmNlMDUzKSB9LAorIAl7IGVuY19pbnB1dDA1NCwgZW5jX291dHB1dDA1NCwgZW5jX2Fzc29jMDU0LCBlbmNfbm9uY2UwNTQsIGVuY19rZXkwNTQsCitAQCAtNDQ5Nyw2ICs2MDc2LDEwIEBAIGNoYWNoYTIwcG9seTEzMDVfZW5jX3ZlY3RvcnNbXSBfX2luaXRjb24KKyAJICBzaXplb2YoZW5jX2lucHV0MDcyKSwgc2l6ZW9mKGVuY19hc3NvYzA3MiksIHNpemVvZihlbmNfbm9uY2UwNzIpIH0sCisgCXsgZW5jX2lucHV0MDczLCBlbmNfb3V0cHV0MDczLCBlbmNfYXNzb2MwNzMsIGVuY19ub25jZTA3MywgZW5jX2tleTA3MywKKyAJICBzaXplb2YoZW5jX2lucHV0MDczKSwgc2l6ZW9mKGVuY19hc3NvYzA3MyksIHNpemVvZihlbmNfbm9uY2UwNzMpIH0sCisrCXsgZW5jX2lucHV0MDc0LCBlbmNfb3V0cHV0MDc0LCBlbmNfYXNzb2MwNzQsIGVuY19ub25jZTA3NCwgZW5jX2tleTA3NCwKKysJICBzaXplb2YoZW5jX2lucHV0MDc0KSwgc2l6ZW9mKGVuY19hc3NvYzA3NCksIHNpemVvZihlbmNfbm9uY2UwNzQpIH0sCisrCXsgZW5jX2lucHV0MDc1LCBlbmNfb3V0cHV0MDc1LCBlbmNfYXNzb2MwNzUsIGVuY19ub25jZTA3NSwgZW5jX2tleTA3NSwKKysJICBzaXplb2YoZW5jX2lucHV0MDc1KSwgc2l6ZW9mKGVuY19hc3NvYzA3NSksIHNpemVvZihlbmNfbm9uY2UwNzUpIH0sCisgCXsgZW5jX2lucHV0MDc2LCBlbmNfb3V0cHV0MDc2LCBlbmNfYXNzb2MwNzYsIGVuY19ub25jZTA3NiwgZW5jX2tleTA3NiwKKyAJICBzaXplb2YoZW5jX2lucHV0MDc2KSwgc2l6ZW9mKGVuY19hc3NvYzA3NiksIHNpemVvZihlbmNfbm9uY2UwNzYpIH0sCisgCXsgZW5jX2lucHV0MDc3LCBlbmNfb3V0cHV0MDc3LCBlbmNfYXNzb2MwNzcsIGVuY19ub25jZTA3NywgZW5jX2tleTA3NywKK0BAIC00NTE3LDYgKzYxMDAsMjAgQEAgY2hhY2hhMjBwb2x5MTMwNV9lbmNfdmVjdG9yc1tdIF9faW5pdGNvbgorIAkgIHNpemVvZihlbmNfaW5wdXQwODQpLCBzaXplb2YoZW5jX2Fzc29jMDg0KSwgc2l6ZW9mKGVuY19ub25jZTA4NCkgfSwKKyAJeyBlbmNfaW5wdXQwODUsIGVuY19vdXRwdXQwODUsIGVuY19hc3NvYzA4NSwgZW5jX25vbmNlMDg1LCBlbmNfa2V5MDg1LAorIAkgIHNpemVvZihlbmNfaW5wdXQwODUpLCBzaXplb2YoZW5jX2Fzc29jMDg1KSwgc2l6ZW9mKGVuY19ub25jZTA4NSkgfSwKKysJeyBlbmNfaW5wdXQwODYsIGVuY19vdXRwdXQwODYsIGVuY19hc3NvYzA4NiwgZW5jX25vbmNlMDg2LCBlbmNfa2V5MDg2LAorKwkgIHNpemVvZihlbmNfaW5wdXQwODYpLCBzaXplb2YoZW5jX2Fzc29jMDg2KSwgc2l6ZW9mKGVuY19ub25jZTA4NikgfSwKKysJeyBlbmNfaW5wdXQwODcsIGVuY19vdXRwdXQwODcsIGVuY19hc3NvYzA4NywgZW5jX25vbmNlMDg3LCBlbmNfa2V5MDg3LAorKwkgIHNpemVvZihlbmNfaW5wdXQwODcpLCBzaXplb2YoZW5jX2Fzc29jMDg3KSwgc2l6ZW9mKGVuY19ub25jZTA4NykgfSwKKysJeyBlbmNfaW5wdXQwODgsIGVuY19vdXRwdXQwODgsIGVuY19hc3NvYzA4OCwgZW5jX25vbmNlMDg4LCBlbmNfa2V5MDg4LAorKwkgIHNpemVvZihlbmNfaW5wdXQwODgpLCBzaXplb2YoZW5jX2Fzc29jMDg4KSwgc2l6ZW9mKGVuY19ub25jZTA4OCkgfSwKKysJeyBlbmNfaW5wdXQwODksIGVuY19vdXRwdXQwODksIGVuY19hc3NvYzA4OSwgZW5jX25vbmNlMDg5LCBlbmNfa2V5MDg5LAorKwkgIHNpemVvZihlbmNfaW5wdXQwODkpLCBzaXplb2YoZW5jX2Fzc29jMDg5KSwgc2l6ZW9mKGVuY19ub25jZTA4OSkgfSwKKysJeyBlbmNfaW5wdXQwOTAsIGVuY19vdXRwdXQwOTAsIGVuY19hc3NvYzA5MCwgZW5jX25vbmNlMDkwLCBlbmNfa2V5MDkwLAorKwkgIHNpemVvZihlbmNfaW5wdXQwOTApLCBzaXplb2YoZW5jX2Fzc29jMDkwKSwgc2l6ZW9mKGVuY19ub25jZTA5MCkgfSwKKysJeyBlbmNfaW5wdXQwOTEsIGVuY19vdXRwdXQwOTEsIGVuY19hc3NvYzA5MSwgZW5jX25vbmNlMDkxLCBlbmNfa2V5MDkxLAorKwkgIHNpemVvZihlbmNfaW5wdXQwOTEpLCBzaXplb2YoZW5jX2Fzc29jMDkxKSwgc2l6ZW9mKGVuY19ub25jZTA5MSkgfSwKKysJeyBlbmNfaW5wdXQwOTIsIGVuY19vdXRwdXQwOTIsIGVuY19hc3NvYzA5MiwgZW5jX25vbmNlMDkyLCBlbmNfa2V5MDkyLAorKwkgIHNpemVvZihlbmNfaW5wdXQwOTIpLCBzaXplb2YoZW5jX2Fzc29jMDkyKSwgc2l6ZW9mKGVuY19ub25jZTA5MikgfSwKKyAJeyBlbmNfaW5wdXQwOTMsIGVuY19vdXRwdXQwOTMsIGVuY19hc3NvYzA5MywgZW5jX25vbmNlMDkzLCBlbmNfa2V5MDkzLAorIAkgIHNpemVvZihlbmNfaW5wdXQwOTMpLCBzaXplb2YoZW5jX2Fzc29jMDkzKSwgc2l6ZW9mKGVuY19ub25jZTA5MykgfSwKKyAJeyBlbmNfaW5wdXQwOTQsIGVuY19vdXRwdXQwOTQsIGVuY19hc3NvYzA5NCwgZW5jX25vbmNlMDk0LCBlbmNfa2V5MDk0LAorQEAgLTcyMjQsNiArODgyMSw0MyBAQCB4Y2hhY2hhMjBwb2x5MTMwNV9kZWNfdmVjdG9yc1tdIF9faW5pdGNvCisgCSAgc2l6ZW9mKHhkZWNfaW5wdXQwMDEpLCBzaXplb2YoeGRlY19hc3NvYzAwMSksIHNpemVvZih4ZGVjX25vbmNlMDAxKSB9CisgfTsKKyAKKysvKiBUaGlzIGlzIGZvciB0aGUgc2VsZnRlc3RzLW9ubHksIHNpbmNlIGl0IGlzIG9ubHkgdXNlZnVsIGZvciB0aGUgcHVycG9zZSBvZgorKyAqIHRlc3RpbmcgdGhlIHVuZGVybHlpbmcgcHJpbWl0aXZlcyBhbmQgaW50ZXJhY3Rpb25zLgorKyAqLworK3N0YXRpYyB2b2lkIF9faW5pdAorK2NoYWNoYTIwcG9seTEzMDVfZW5jcnlwdF9iaWdub25jZSh1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCBjb25zdCBzaXplX3Qgc3JjX2xlbiwKKysJCQkJICBjb25zdCB1OCAqYWQsIGNvbnN0IHNpemVfdCBhZF9sZW4sCisrCQkJCSAgY29uc3QgdTggbm9uY2VbMTJdLAorKwkJCQkgIGNvbnN0IHU4IGtleVtDSEFDSEEyMFBPTFkxMzA1X0tFWV9TSVpFXSkKKyt7CisrCWNvbnN0IHU4ICpwYWQwID0gcGFnZV9hZGRyZXNzKFpFUk9fUEFHRSgwKSk7CisrCXN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCBwb2x5MTMwNV9zdGF0ZTsKKysJdTMyIGNoYWNoYTIwX3N0YXRlW0NIQUNIQV9TVEFURV9XT1JEU107CisrCXVuaW9uIHsKKysJCXU4IGJsb2NrMFtQT0xZMTMwNV9LRVlfU0laRV07CisrCQlfX2xlNjQgbGVuc1syXTsKKysJfSBiID0ge3sgMCB9fTsKKysJdTggYm90dG9tX3Jvd1sxNl0gPSB7IDAgfTsKKysJdTMyIGxlX2tleVs4XTsKKysJaW50IGk7CisrCisrCW1lbWNweSgmYm90dG9tX3Jvd1s0XSwgbm9uY2UsIDEyKTsKKysJZm9yIChpID0gMDsgaSA8IDg7ICsraSkKKysJCWxlX2tleVtpXSA9IGdldF91bmFsaWduZWRfbGUzMihrZXkgKyBzaXplb2YobGVfa2V5W2ldKSAqIGkpOworKwljaGFjaGFfaW5pdChjaGFjaGEyMF9zdGF0ZSwgbGVfa2V5LCBib3R0b21fcm93KTsKKysJY2hhY2hhMjBfY3J5cHQoY2hhY2hhMjBfc3RhdGUsIGIuYmxvY2swLCBiLmJsb2NrMCwgc2l6ZW9mKGIuYmxvY2swKSk7CisrCXBvbHkxMzA1X2luaXQoJnBvbHkxMzA1X3N0YXRlLCBiLmJsb2NrMCk7CisrCXBvbHkxMzA1X3VwZGF0ZSgmcG9seTEzMDVfc3RhdGUsIGFkLCBhZF9sZW4pOworKwlwb2x5MTMwNV91cGRhdGUoJnBvbHkxMzA1X3N0YXRlLCBwYWQwLCAoMHgxMCAtIGFkX2xlbikgJiAweGYpOworKwljaGFjaGEyMF9jcnlwdChjaGFjaGEyMF9zdGF0ZSwgZHN0LCBzcmMsIHNyY19sZW4pOworKwlwb2x5MTMwNV91cGRhdGUoJnBvbHkxMzA1X3N0YXRlLCBkc3QsIHNyY19sZW4pOworKwlwb2x5MTMwNV91cGRhdGUoJnBvbHkxMzA1X3N0YXRlLCBwYWQwLCAoMHgxMCAtIHNyY19sZW4pICYgMHhmKTsKKysJYi5sZW5zWzBdID0gY3B1X3RvX2xlNjQoYWRfbGVuKTsKKysJYi5sZW5zWzFdID0gY3B1X3RvX2xlNjQoc3JjX2xlbik7CisrCXBvbHkxMzA1X3VwZGF0ZSgmcG9seTEzMDVfc3RhdGUsICh1OCAqKWIubGVucywgc2l6ZW9mKGIubGVucykpOworKwlwb2x5MTMwNV9maW5hbCgmcG9seTEzMDVfc3RhdGUsIGRzdCArIHNyY19sZW4pOworK30KKysKKyBzdGF0aWMgdm9pZCBfX2luaXQKKyBjaGFjaGEyMHBvbHkxMzA1X3NlbGZ0ZXN0X2VuY3J5cHQodTggKmRzdCwgY29uc3QgdTggKnNyYywgY29uc3Qgc2l6ZV90IHNyY19sZW4sCisgCQkJCSAgY29uc3QgdTggKmFkLCBjb25zdCBzaXplX3QgYWRfbGVuLAorQEAgLTcyMzMsNiArODg2Nyw5IEBAIGNoYWNoYTIwcG9seTEzMDVfc2VsZnRlc3RfZW5jcnlwdCh1OCAqZHMKKyAJaWYgKG5vbmNlX2xlbiA9PSA4KQorIAkJY2hhY2hhMjBwb2x5MTMwNV9lbmNyeXB0KGRzdCwgc3JjLCBzcmNfbGVuLCBhZCwgYWRfbGVuLAorIAkJCQkJIGdldF91bmFsaWduZWRfbGU2NChub25jZSksIGtleSk7CisrCWVsc2UgaWYgKG5vbmNlX2xlbiA9PSAxMikKKysJCWNoYWNoYTIwcG9seTEzMDVfZW5jcnlwdF9iaWdub25jZShkc3QsIHNyYywgc3JjX2xlbiwgYWQsCisrCQkJCQkJICBhZF9sZW4sIG5vbmNlLCBrZXkpOworIAllbHNlCisgCQlCVUcoKTsKKyB9CitAQCAtNzI0OCwxNCArODg4NSwxNCBAQCBkZWNyeXB0aW9uX3N1Y2Nlc3MoYm9vbCBmdW5jX3JldCwgYm9vbCBlCisgYm9vbCBfX2luaXQgY2hhY2hhMjBwb2x5MTMwNV9zZWxmdGVzdCh2b2lkKQorIHsKKyAJZW51bSB7IE1BWElNVU1fVEVTVF9CVUZGRVJfTEVOID0gMVVMIDw8IDEyIH07CistCXNpemVfdCBpOworLQl1OCAqY29tcHV0ZWRfb3V0cHV0ID0gTlVMTCwgKmhlYXBfc3JjID0gTlVMTDsKKy0Jc3RydWN0IHNjYXR0ZXJsaXN0IHNnX3NyYzsKKysJc2l6ZV90IGksIGosIGssIHRvdGFsX2xlbjsKKysJdTggKmNvbXB1dGVkX291dHB1dCA9IE5VTEwsICppbnB1dCA9IE5VTEw7CisgCWJvb2wgc3VjY2VzcyA9IHRydWUsIHJldDsKKysJc3RydWN0IHNjYXR0ZXJsaXN0IHNnX3NyY1szXTsKKyAKKy0JaGVhcF9zcmMgPSBrbWFsbG9jKE1BWElNVU1fVEVTVF9CVUZGRVJfTEVOLCBHRlBfS0VSTkVMKTsKKyAJY29tcHV0ZWRfb3V0cHV0ID0ga21hbGxvYyhNQVhJTVVNX1RFU1RfQlVGRkVSX0xFTiwgR0ZQX0tFUk5FTCk7CistCWlmICghaGVhcF9zcmMgfHwgIWNvbXB1dGVkX291dHB1dCkgeworKwlpbnB1dCA9IGttYWxsb2MoTUFYSU1VTV9URVNUX0JVRkZFUl9MRU4sIEdGUF9LRVJORUwpOworKwlpZiAoIWNvbXB1dGVkX291dHB1dCB8fCAhaW5wdXQpIHsKKyAJCXByX2VycigiY2hhY2hhMjBwb2x5MTMwNSBzZWxmLXRlc3QgbWFsbG9jOiBGQUlMXG4iKTsKKyAJCXN1Y2Nlc3MgPSBmYWxzZTsKKyAJCWdvdG8gb3V0OworQEAgLTcyODQsMTcgKzg5MjEsMTcgQEAgYm9vbCBfX2luaXQgY2hhY2hhMjBwb2x5MTMwNV9zZWxmdGVzdCh2bworIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjaGFjaGEyMHBvbHkxMzA1X2VuY192ZWN0b3JzKTsgKytpKSB7CisgCQlpZiAoY2hhY2hhMjBwb2x5MTMwNV9lbmNfdmVjdG9yc1tpXS5ubGVuICE9IDgpCisgCQkJY29udGludWU7CistCQltZW1jcHkoaGVhcF9zcmMsIGNoYWNoYTIwcG9seTEzMDVfZW5jX3ZlY3RvcnNbaV0uaW5wdXQsCisrCQltZW1jcHkoY29tcHV0ZWRfb3V0cHV0LCBjaGFjaGEyMHBvbHkxMzA1X2VuY192ZWN0b3JzW2ldLmlucHV0LAorIAkJICAgICAgIGNoYWNoYTIwcG9seTEzMDVfZW5jX3ZlY3RvcnNbaV0uaWxlbik7CistCQlzZ19pbml0X29uZSgmc2dfc3JjLCBoZWFwX3NyYywKKysJCXNnX2luaXRfb25lKHNnX3NyYywgY29tcHV0ZWRfb3V0cHV0LAorIAkJCSAgICBjaGFjaGEyMHBvbHkxMzA1X2VuY192ZWN0b3JzW2ldLmlsZW4gKyBQT0xZMTMwNV9ESUdFU1RfU0laRSk7CistCQljaGFjaGEyMHBvbHkxMzA1X2VuY3J5cHRfc2dfaW5wbGFjZSgmc2dfc3JjLAorKwkJcmV0ID0gY2hhY2hhMjBwb2x5MTMwNV9lbmNyeXB0X3NnX2lucGxhY2Uoc2dfc3JjLAorIAkJCWNoYWNoYTIwcG9seTEzMDVfZW5jX3ZlY3RvcnNbaV0uaWxlbiwKKyAJCQljaGFjaGEyMHBvbHkxMzA1X2VuY192ZWN0b3JzW2ldLmFzc29jLAorIAkJCWNoYWNoYTIwcG9seTEzMDVfZW5jX3ZlY3RvcnNbaV0uYWxlbiwKKyAJCQlnZXRfdW5hbGlnbmVkX2xlNjQoY2hhY2hhMjBwb2x5MTMwNV9lbmNfdmVjdG9yc1tpXS5ub25jZSksCisgCQkJY2hhY2hhMjBwb2x5MTMwNV9lbmNfdmVjdG9yc1tpXS5rZXkpOworLQkJaWYgKG1lbWNtcChoZWFwX3NyYywKKysJCWlmICghcmV0IHx8IG1lbWNtcChjb21wdXRlZF9vdXRwdXQsCisgCQkJCSAgIGNoYWNoYTIwcG9seTEzMDVfZW5jX3ZlY3RvcnNbaV0ub3V0cHV0LAorIAkJCQkgICBjaGFjaGEyMHBvbHkxMzA1X2VuY192ZWN0b3JzW2ldLmlsZW4gKworIAkJCQkJCQlQT0xZMTMwNV9ESUdFU1RfU0laRSkpIHsKK0BAIC03MzI2LDExICs4OTYzLDExIEBAIGJvb2wgX19pbml0IGNoYWNoYTIwcG9seTEzMDVfc2VsZnRlc3Qodm8KKyAJfQorIAorIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjaGFjaGEyMHBvbHkxMzA1X2RlY192ZWN0b3JzKTsgKytpKSB7CistCQltZW1jcHkoaGVhcF9zcmMsIGNoYWNoYTIwcG9seTEzMDVfZGVjX3ZlY3RvcnNbaV0uaW5wdXQsCisrCQltZW1jcHkoY29tcHV0ZWRfb3V0cHV0LCBjaGFjaGEyMHBvbHkxMzA1X2RlY192ZWN0b3JzW2ldLmlucHV0LAorIAkJICAgICAgIGNoYWNoYTIwcG9seTEzMDVfZGVjX3ZlY3RvcnNbaV0uaWxlbik7CistCQlzZ19pbml0X29uZSgmc2dfc3JjLCBoZWFwX3NyYywKKysJCXNnX2luaXRfb25lKHNnX3NyYywgY29tcHV0ZWRfb3V0cHV0LAorIAkJCSAgICBjaGFjaGEyMHBvbHkxMzA1X2RlY192ZWN0b3JzW2ldLmlsZW4pOworLQkJcmV0ID0gY2hhY2hhMjBwb2x5MTMwNV9kZWNyeXB0X3NnX2lucGxhY2UoJnNnX3NyYywKKysJCXJldCA9IGNoYWNoYTIwcG9seTEzMDVfZGVjcnlwdF9zZ19pbnBsYWNlKHNnX3NyYywKKyAJCQljaGFjaGEyMHBvbHkxMzA1X2RlY192ZWN0b3JzW2ldLmlsZW4sCisgCQkJY2hhY2hhMjBwb2x5MTMwNV9kZWNfdmVjdG9yc1tpXS5hc3NvYywKKyAJCQljaGFjaGEyMHBvbHkxMzA1X2RlY192ZWN0b3JzW2ldLmFsZW4sCitAQCAtNzMzOCw3ICs4OTc1LDcgQEAgYm9vbCBfX2luaXQgY2hhY2hhMjBwb2x5MTMwNV9zZWxmdGVzdCh2bworIAkJCWNoYWNoYTIwcG9seTEzMDVfZGVjX3ZlY3RvcnNbaV0ua2V5KTsKKyAJCWlmICghZGVjcnlwdGlvbl9zdWNjZXNzKHJldCwKKyAJCQljaGFjaGEyMHBvbHkxMzA1X2RlY192ZWN0b3JzW2ldLmZhaWx1cmUsCistCQkJbWVtY21wKGhlYXBfc3JjLCBjaGFjaGEyMHBvbHkxMzA1X2RlY192ZWN0b3JzW2ldLm91dHB1dCwKKysJCQltZW1jbXAoY29tcHV0ZWRfb3V0cHV0LCBjaGFjaGEyMHBvbHkxMzA1X2RlY192ZWN0b3JzW2ldLm91dHB1dCwKKyAJCQkgICAgICAgY2hhY2hhMjBwb2x5MTMwNV9kZWNfdmVjdG9yc1tpXS5pbGVuIC0KKyAJCQkJCQkJUE9MWTEzMDVfRElHRVNUX1NJWkUpKSkgeworIAkJCXByX2VycigiY2hhY2hhMjBwb2x5MTMwNSBzZyBkZWNyeXB0aW9uIHNlbGYtdGVzdCAlenU6IEZBSUxcbiIsCitAQCAtNzM2NSw2ICs5MDAyLDcgQEAgYm9vbCBfX2luaXQgY2hhY2hhMjBwb2x5MTMwNV9zZWxmdGVzdCh2bworIAkJCXN1Y2Nlc3MgPSBmYWxzZTsKKyAJCX0KKyAJfQorKworIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh4Y2hhY2hhMjBwb2x5MTMwNV9kZWNfdmVjdG9ycyk7ICsraSkgeworIAkJbWVtc2V0KGNvbXB1dGVkX291dHB1dCwgMCwgTUFYSU1VTV9URVNUX0JVRkZFUl9MRU4pOworIAkJcmV0ID0geGNoYWNoYTIwcG9seTEzMDVfZGVjcnlwdChjb21wdXRlZF9vdXRwdXQsCitAQCAtNzM4Niw4ICs5MDI0LDU0IEBAIGJvb2wgX19pbml0IGNoYWNoYTIwcG9seTEzMDVfc2VsZnRlc3Qodm8KKyAJCX0KKyAJfQorIAorKwlmb3IgKHRvdGFsX2xlbiA9IFBPTFkxMzA1X0RJR0VTVF9TSVpFOyBJU19FTkFCTEVEKERFQlVHX0NIQUNIQTIwUE9MWTEzMDVfU0xPV19DSFVOS19URVNUKQorKwkgICAgICYmIHRvdGFsX2xlbiA8PSAxIDw8IDEwOyArK3RvdGFsX2xlbikgeworKwkJZm9yIChpID0gMDsgaSA8PSB0b3RhbF9sZW47ICsraSkgeworKwkJCWZvciAoaiA9IGk7IGogPD0gdG90YWxfbGVuOyArK2opIHsKKysJCQkJc2dfaW5pdF90YWJsZShzZ19zcmMsIDMpOworKwkJCQlzZ19zZXRfYnVmKCZzZ19zcmNbMF0sIGlucHV0LCBpKTsKKysJCQkJc2dfc2V0X2J1Zigmc2dfc3JjWzFdLCBpbnB1dCArIGksIGogLSBpKTsKKysJCQkJc2dfc2V0X2J1Zigmc2dfc3JjWzJdLCBpbnB1dCArIGosIHRvdGFsX2xlbiAtIGopOworKwkJCQltZW1zZXQoY29tcHV0ZWRfb3V0cHV0LCAwLCB0b3RhbF9sZW4pOworKwkJCQltZW1zZXQoaW5wdXQsIDAsIHRvdGFsX2xlbik7CisrCisrCQkJCWlmICghY2hhY2hhMjBwb2x5MTMwNV9lbmNyeXB0X3NnX2lucGxhY2Uoc2dfc3JjLAorKwkJCQkJdG90YWxfbGVuIC0gUE9MWTEzMDVfRElHRVNUX1NJWkUsIE5VTEwsIDAsCisrCQkJCQkwLCBlbmNfa2V5MDAxKSkKKysJCQkJCWdvdG8gY2h1bmtmYWlsOworKwkJCQljaGFjaGEyMHBvbHkxMzA1X2VuY3J5cHQoY29tcHV0ZWRfb3V0cHV0LAorKwkJCQkJY29tcHV0ZWRfb3V0cHV0LAorKwkJCQkJdG90YWxfbGVuIC0gUE9MWTEzMDVfRElHRVNUX1NJWkUsIE5VTEwsIDAsIDAsCisrCQkJCQllbmNfa2V5MDAxKTsKKysJCQkJaWYgKG1lbWNtcChjb21wdXRlZF9vdXRwdXQsIGlucHV0LCB0b3RhbF9sZW4pKQorKwkJCQkJZ290byBjaHVua2ZhaWw7CisrCQkJCWlmICghY2hhY2hhMjBwb2x5MTMwNV9kZWNyeXB0KGNvbXB1dGVkX291dHB1dCwKKysJCQkJCWlucHV0LCB0b3RhbF9sZW4sIE5VTEwsIDAsIDAsIGVuY19rZXkwMDEpKQorKwkJCQkJZ290byBjaHVua2ZhaWw7CisrCQkJCWZvciAoayA9IDA7IGsgPCB0b3RhbF9sZW4gLSBQT0xZMTMwNV9ESUdFU1RfU0laRTsgKytrKSB7CisrCQkJCQlpZiAoY29tcHV0ZWRfb3V0cHV0W2tdKQorKwkJCQkJCWdvdG8gY2h1bmtmYWlsOworKwkJCQl9CisrCQkJCWlmICghY2hhY2hhMjBwb2x5MTMwNV9kZWNyeXB0X3NnX2lucGxhY2Uoc2dfc3JjLAorKwkJCQkJdG90YWxfbGVuLCBOVUxMLCAwLCAwLCBlbmNfa2V5MDAxKSkKKysJCQkJCWdvdG8gY2h1bmtmYWlsOworKwkJCQlmb3IgKGsgPSAwOyBrIDwgdG90YWxfbGVuIC0gUE9MWTEzMDVfRElHRVNUX1NJWkU7ICsraykgeworKwkJCQkJaWYgKGlucHV0W2tdKQorKwkJCQkJCWdvdG8gY2h1bmtmYWlsOworKwkJCQl9CisrCQkJCWNvbnRpbnVlOworKworKwkJCWNodW5rZmFpbDoKKysJCQkJcHJfZXJyKCJjaGFjaGEyMHBvbHkxMzA1IGNodW5rZWQgc2VsZi10ZXN0ICV6dS8lenUvJXp1OiBGQUlMXG4iLAorKwkJCQkgICAgICAgdG90YWxfbGVuLCBpLCBqKTsKKysJCQkJc3VjY2VzcyA9IGZhbHNlOworKwkJCX0KKysKKysJCX0KKysJfQorKworIG91dDoKKy0Ja2ZyZWUoaGVhcF9zcmMpOworIAlrZnJlZShjb21wdXRlZF9vdXRwdXQpOworKwlrZnJlZShpbnB1dCk7CisgCXJldHVybiBzdWNjZXNzOworIH0KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNDgtY3J5cHRvLXg4Ni1wb2x5MTMwNS1lbWl0LWRvZXMtYmFzZS1jb252ZXJzaW9uLWl0c2VsZi5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNDgtY3J5cHRvLXg4Ni1wb2x5MTMwNS1lbWl0LWRvZXMtYmFzZS1jb252ZXJzaW9uLWl0c2VsZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjA5Y2EyCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA0OC1jcnlwdG8teDg2LXBvbHkxMzA1LWVtaXQtZG9lcy1iYXNlLWNvbnZlcnNpb24taXRzZWxmLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJKYXNvbiBBLiBEb25lbmZlbGQiIDxKYXNvbkB6eDJjNC5jb20+CitEYXRlOiBGcmksIDE3IEphbiAyMDIwIDExOjQyOjIyICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyeXB0bzogeDg2L3BvbHkxMzA1IC0gZW1pdCBkb2VzIGJhc2UgY29udmVyc2lvbiBpdHNlbGYKKworY29tbWl0IGY5ZTdmZTMyYTc5MjcyNjE4NjMwMTQyM2ZmNjNhNDY1ZDYzMzg2ZTEgdXBzdHJlYW0uCisKK1RoZSBlbWl0IGNvZGUgZG9lcyBvcHRpb25hbCBiYXNlIGNvbnZlcnNpb24gaXRzZWxmIGluIGFzc2VtYmx5LCBzbyB3ZQorZG9uJ3QgbmVlZCB0byBkbyB0aGF0IGhlcmUuIEFsc28sIG5laXRoZXIgb25lIG9mIHRoZXNlIGZ1bmN0aW9ucyB1c2VzCitzaW1kIGluc3RydWN0aW9ucywgc28gY2hlY2tpbmcgZm9yIHRoYXQgZG9lc24ndCBtYWtlIHNlbnNlIGVpdGhlci4KKworU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CitTaWduZWQtb2ZmLWJ5OiBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGFyY2gveDg2L2NyeXB0by9wb2x5MTMwNV9nbHVlLmMgfCA4ICsrLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworLS0tIGEvYXJjaC94ODYvY3J5cHRvL3BvbHkxMzA1X2dsdWUuYworKysrIGIvYXJjaC94ODYvY3J5cHRvL3BvbHkxMzA1X2dsdWUuYworQEAgLTEyMywxMyArMTIzLDkgQEAgc3RhdGljIHZvaWQgcG9seTEzMDVfc2ltZF9ibG9ja3Modm9pZCAqYworIHN0YXRpYyB2b2lkIHBvbHkxMzA1X3NpbWRfZW1pdCh2b2lkICpjdHgsIHU4IG1hY1tQT0xZMTMwNV9ESUdFU1RfU0laRV0sCisgCQkJICAgICAgIGNvbnN0IHUzMiBub25jZVs0XSkKKyB7CistCXN0cnVjdCBwb2x5MTMwNV9hcmNoX2ludGVybmFsICpzdGF0ZSA9IGN0eDsKKy0KKy0JaWYgKCFJU19FTkFCTEVEKENPTkZJR19BU19BVlgpIHx8ICFzdGF0aWNfYnJhbmNoX2xpa2VseSgmcG9seTEzMDVfdXNlX2F2eCkgfHwKKy0JICAgICFzdGF0ZS0+aXNfYmFzZTJfMjYgfHwgIWNyeXB0b19zaW1kX3VzYWJsZSgpKSB7CistCQljb252ZXJ0X3RvX2Jhc2UyXzY0KGN0eCk7CisrCWlmICghSVNfRU5BQkxFRChDT05GSUdfQVNfQVZYKSB8fCAhc3RhdGljX2JyYW5jaF9saWtlbHkoJnBvbHkxMzA1X3VzZV9hdngpKQorIAkJcG9seTEzMDVfZW1pdF94ODZfNjQoY3R4LCBtYWMsIG5vbmNlKTsKKy0JfSBlbHNlCisrCWVsc2UKKyAJCXBvbHkxMzA1X2VtaXRfYXZ4KGN0eCwgbWFjLCBub25jZSk7CisgfQorIApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA0OS1jcnlwdG8tYXJtLWNoYWNoYS1maXgtYnVpbGQtZmFpbHVyZWQtd2hlbi1rZXJuZWwtbW9kLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA0OS1jcnlwdG8tYXJtLWNoYWNoYS1maXgtYnVpbGQtZmFpbHVyZWQtd2hlbi1rZXJuZWwtbW9kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NGY1ODQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDQ5LWNyeXB0by1hcm0tY2hhY2hhLWZpeC1idWlsZC1mYWlsdXJlZC13aGVuLWtlcm5lbC1tb2QucGF0Y2gKQEAgLTAsMCArMSw1OCBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQXJkIEJpZXNoZXV2ZWwgPGFyZGJAa2VybmVsLm9yZz4KK0RhdGU6IEZyaSwgMTcgSmFuIDIwMjAgMTc6NDM6MTggKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gY3J5cHRvOiBhcm0vY2hhY2hhIC0gZml4IGJ1aWxkIGZhaWx1cmVkIHdoZW4ga2VybmVsIG1vZGUgTkVPTgorIGlzIGRpc2FibGVkCisKK2NvbW1pdCAwYmM4MTc2N2M1YmQ5ZDAwNWZhZTEwOTlmYjM5ZWIzNjg4MzcwY2IxIHVwc3RyZWFtLgorCitXaGVuIHRoZSBBUk0gYWNjZWxlcmF0ZWQgQ2hhQ2hhIGRyaXZlciBpcyBidWlsdCBhcyBwYXJ0IG9mIGEgY29uZmlndXJhdGlvbgordGhhdCBoYXMga2VybmVsIG1vZGUgTkVPTiBkaXNhYmxlZCwgd2UgZXhwZWN0IHRoZSBjb21waWxlciB0byBwcm9wYWdhdGUKK3RoZSBidWlsZCB0aW1lIGNvbnN0YW50IGV4cHJlc3Npb24gSVNfRU5BQkxFRChDT05GSUdfS0VSTkVMX01PREVfTkVPTikgaW4KK2Egd2F5IHRoYXQgZWxpbWluYXRlcyBhbGwgdGhlIGNyb3NzLW9iamVjdCByZWZlcmVuY2VzIHRvIHRoZSBhY3R1YWwgTkVPTgorcm91dGluZXMsIHdoaWNoIGFsbG93cyB0aGUgY2hhY2hhLW5lb24tY29yZS5vIG9iamVjdCB0byBiZSBvbWl0dGVkIGZyb20KK3RoZSBidWlsZCBlbnRpcmVseS4KKworVW5mb3J0dW5hdGVseSwgdGhpcyBmYWlscyB0byB3b3JrIGFzIGV4cGVjdGVkIGluIHNvbWUgY2FzZXMsIGFuZCB3ZSBtYXkKK2VuZCB1cCB3aXRoIGEgYnVpbGQgZXJyb3Igc3VjaCBhcworCisgIGNoYWNoYS1nbHVlLmM6KC50ZXh0KzB4YzApOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBjaGFjaGFfNGJsb2NrX3hvcl9uZW9uJworCitjYXVzZWQgYnkgdGhlIGZhY3QgdGhhdCBjaGFjaGFfZG9uZW9uKCkgaGFzIG5vdCBiZWVuIGVsaW1pbmF0ZWQgZnJvbSB0aGUKK29iamVjdCBjb2RlLCBldmVuIHRob3VnaCBpdCB3aWxsIG5ldmVyIGJlIGNhbGxlZCBpbiBwcmFjdGljZS4KKworTGV0J3MgZml4IHRoaXMgYnkgYWRkaW5nIHNvbWUgSVNfRU5BQkxFRChDT05GSUdfS0VSTkVMX01PREVfTkVPTikgdGVzdHMKK3RoYXQgYXJlIG5vdCBzdHJpY3RseSBuZWVkZWQgZnJvbSBhIGxvZ2ljYWwgcG9pbnQgb2YgdmlldywgYnV0IHNob3VsZAoraGVscCB0aGUgY29tcGlsZXIgaW5mZXIgdGhhdCB0aGUgTkVPTiBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBpbgordGhvc2UgY2FzZXMuCisKK0ZpeGVzOiBiMzZkOGMwOWU3MTBjNzFmICgiY3J5cHRvOiBhcm0vY2hhY2hhIC0gcmVtb3ZlIGRlcGVuZGVuY3kgb24gZ2VuZXJpYyAuLi4iKQorUmVwb3J0ZWQtYnk6IFJ1c3NlbGwgS2luZyA8bGludXhAYXJtbGludXgub3JnLnVrPgorQ2M6IEFybmQgQmVyZ21hbm4gPGFybmRAYXJuZGIuZGU+CitTaWduZWQtb2ZmLWJ5OiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgorU2lnbmVkLW9mZi1ieTogSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBhcmNoL2FybS9jcnlwdG8vY2hhY2hhLWdsdWUuYyB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKKy0tLSBhL2FyY2gvYXJtL2NyeXB0by9jaGFjaGEtZ2x1ZS5jCisrKysgYi9hcmNoL2FybS9jcnlwdG8vY2hhY2hhLWdsdWUuYworQEAgLTExNSw3ICsxMTUsNyBAQCBzdGF0aWMgaW50IGNoYWNoYV9zdHJlYW1feG9yKHN0cnVjdCBza2NpCisgCQlpZiAobmJ5dGVzIDwgd2Fsay50b3RhbCkKKyAJCQluYnl0ZXMgPSByb3VuZF9kb3duKG5ieXRlcywgd2Fsay5zdHJpZGUpOworIAorLQkJaWYgKCFuZW9uKSB7CisrCQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0tFUk5FTF9NT0RFX05FT04pIHx8ICFuZW9uKSB7CisgCQkJY2hhY2hhX2RvYXJtKHdhbGsuZHN0LnZpcnQuYWRkciwgd2Fsay5zcmMudmlydC5hZGRyLAorIAkJCQkgICAgIG5ieXRlcywgc3RhdGUsIGN0eC0+bnJvdW5kcyk7CisgCQkJc3RhdGVbMTJdICs9IERJVl9ST1VORF9VUChuYnl0ZXMsIENIQUNIQV9CTE9DS19TSVpFKTsKK0BAIC0xNTksNyArMTU5LDcgQEAgc3RhdGljIGludCBkb194Y2hhY2hhKHN0cnVjdCBza2NpcGhlcl9yZQorIAorIAljaGFjaGFfaW5pdF9nZW5lcmljKHN0YXRlLCBjdHgtPmtleSwgcmVxLT5pdik7CisgCistCWlmICghbmVvbikgeworKwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0tFUk5FTF9NT0RFX05FT04pIHx8ICFuZW9uKSB7CisgCQloY2hhY2hhX2Jsb2NrX2FybShzdGF0ZSwgc3ViY3R4LmtleSwgY3R4LT5ucm91bmRzKTsKKyAJfSBlbHNlIHsKKyAJCWtlcm5lbF9uZW9uX2JlZ2luKCk7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDUwLWNyeXB0by1LY29uZmlnLWFsbG93LXRlc3RzLXRvLWJlLWRpc2FibGVkLXdoZW4tbWFuYWcucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDUwLWNyeXB0by1LY29uZmlnLWFsbG93LXRlc3RzLXRvLWJlLWRpc2FibGVkLXdoZW4tbWFuYWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUyYmYwYQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNTAtY3J5cHRvLUtjb25maWctYWxsb3ctdGVzdHMtdG8tYmUtZGlzYWJsZWQtd2hlbi1tYW5hZy5wYXRjaApAQCAtMCwwICsxLDQwIEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogRnJpLCAxNyBKYW4gMjAyMCAxMjowMTozNiArMDEwMAorU3ViamVjdDogW1BBVENIXSBjcnlwdG86IEtjb25maWcgLSBhbGxvdyB0ZXN0cyB0byBiZSBkaXNhYmxlZCB3aGVuIG1hbmFnZXIgaXMKKyBkaXNhYmxlZAorCitjb21taXQgMjM0M2QxNTI5YWZmOGI1NTI1ODlmNjIyYzIzOTMyMDM1ZWQ3YTA1ZCB1cHN0cmVhbS4KKworVGhlIGxpYnJhcnkgY29kZSB1c2VzIENSWVBUT19NQU5BR0VSX0RJU0FCTEVfVEVTVFMgdG8gY29uZGl0aW9uYWxpemUgaXRzCit0ZXN0cywgYnV0IHRoZSBsaWJyYXJ5IGNvZGUgY2FuIGFsc28gZXhpc3Qgd2l0aG91dCBDUllQVE9fTUFOQUdFUi4gVGhhdAorbWVhbnMgb24gbWluaW1hbCBjb25maWdzLCB0aGUgdGVzdCBjb2RlIHdpbmRzIHVwIGJlaW5nIGJ1aWx0IHdpdGggbm8gd2F5Cit0byBkaXNhYmxlIGl0LgorCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgY3J5cHRvL0tjb25maWcgfCA0IC0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBkZWxldGlvbnMoLSkKKworLS0tIGEvY3J5cHRvL0tjb25maWcKKysrKyBiL2NyeXB0by9LY29uZmlnCitAQCAtMTM2LDggKzEzNiw2IEBAIGNvbmZpZyBDUllQVE9fVVNFUgorIAkgIFVzZXJzcGFjZSBjb25maWd1cmF0aW9uIGZvciBjcnlwdG9ncmFwaGljIGluc3RhbnRpYXRpb25zIHN1Y2ggYXMKKyAJICBjYmMoYWVzKS4KKyAKKy1pZiBDUllQVE9fTUFOQUdFUjIKKy0KKyBjb25maWcgQ1JZUFRPX01BTkFHRVJfRElTQUJMRV9URVNUUworIAlib29sICJEaXNhYmxlIHJ1bi10aW1lIHNlbGYgdGVzdHMiCisgCWRlZmF1bHQgeQorQEAgLTE1NSw4ICsxNTMsNiBAQCBjb25maWcgQ1JZUFRPX01BTkFHRVJfRVhUUkFfVEVTVFMKKyAJICBUaGlzIGlzIGludGVuZGVkIGZvciBkZXZlbG9wZXIgdXNlIG9ubHksIGFzIHRoZXNlIHRlc3RzIHRha2UgbXVjaAorIAkgIGxvbmdlciB0byBydW4gdGhhbiB0aGUgbm9ybWFsIHNlbGYgdGVzdHMuCisgCistZW5kaWYJIyBpZiBDUllQVE9fTUFOQUdFUjIKKy0KKyBjb25maWcgQ1JZUFRPX0dGMTI4TVVMCisgCXRyaXN0YXRlCisgCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDUxLWNyeXB0by1jaGFjaGEyMHBvbHkxMzA1LXByZXZlbnQtaW50ZWdlci1vdmVyZmxvdy1vbi0ucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDUxLWNyeXB0by1jaGFjaGEyMHBvbHkxMzA1LXByZXZlbnQtaW50ZWdlci1vdmVyZmxvdy1vbi0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVkNDllNQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNTEtY3J5cHRvLWNoYWNoYTIwcG9seTEzMDUtcHJldmVudC1pbnRlZ2VyLW92ZXJmbG93LW9uLS5wYXRjaApAQCAtMCwwICsxLDQwIEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogVGh1LCA2IEZlYiAyMDIwIDEyOjQyOjAxICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyeXB0bzogY2hhY2hhMjBwb2x5MTMwNSAtIHByZXZlbnQgaW50ZWdlciBvdmVyZmxvdyBvbiBsYXJnZQorIGlucHV0CisKK2NvbW1pdCBjOWNjMDUxN2JiYTlmMDIxM2YxZTU1MTcyZmVjZWI5OWU1NTEyZGFmIHVwc3RyZWFtLgorCitUaGlzIGNvZGUgYXNzaWducyBzcmNfbGVuIChzaXplX3QpIHRvIHNsIChpbnQpLCB3aGljaCBjYXVzZXMgcHJvYmxlbXMKK3doZW4gc3JjX2xlbiBpcyB2ZXJ5IGxhcmdlLiBQcm9iYWJseSBub2JvZHkgaW4gdGhlIGtlcm5lbCBzaG91bGQgYmUKK3Bhc3NpbmcgdGhpcyBtdWNoIGRhdGEgdG8gY2hhY2hhMjBwb2x5MTMwNSBhbGwgaW4gb25lIGdvIGFueXdheSwgc28gSQorZG9uJ3QgdGhpbmsgd2UgbmVlZCB0byBjaGFuZ2UgdGhlIGFsZ29yaXRobSBvciBpbnRyb2R1Y2UgbGFyZ2VyIHR5cGVzCitvciBhbnl0aGluZy4gQnV0IHdlIHNob3VsZCBhdCBsZWFzdCBlcnJvciBvdXQgZWFybHkgaW4gdGhpcyBjYXNlIGFuZAorcHJpbnQgYSB3YXJuaW5nIHNvIHRoYXQgd2UgZ2V0IHJlcG9ydHMgaWYgdGhpcyBkb2VzIGhhcHBlbiBhbmQgY2FuIGxvb2sKK2ludG8gd2h5IGFueWJvZHkgaXMgcG9zc2libHkgcGFzc2luZyBpdCB0aGF0IG11Y2ggZGF0YSBvciBpZiB0aGV5J3JlCithY2NpZGVudGx5IHBhc3NpbmcgLTEgb3Igc2ltaWxhci4KKworRml4ZXM6IGQ5NTMxMmEzY2NjMCAoImNyeXB0bzogbGliL2NoYWNoYTIwcG9seTEzMDUgLSByZWltcGxlbWVudCBjcnlwdF9mcm9tX3NnKCkgcm91dGluZSIpCitDYzogQXJkIEJpZXNoZXV2ZWwgPGFyZGJAa2VybmVsLm9yZz4KK0NjOiBzdGFibGVAdmdlci5rZXJuZWwub3JnICMgNS41KworU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CitBY2tlZC1ieTogQXJkIEJpZXNoZXV2ZWwgPGFyZGJAa2VybmVsLm9yZz4KK1NpZ25lZC1vZmYtYnk6IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgbGliL2NyeXB0by9jaGFjaGEyMHBvbHkxMzA1LmMgfCAzICsrKworIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKworLS0tIGEvbGliL2NyeXB0by9jaGFjaGEyMHBvbHkxMzA1LmMKKysrKyBiL2xpYi9jcnlwdG8vY2hhY2hhMjBwb2x5MTMwNS5jCitAQCAtMjM1LDYgKzIzNSw5IEBAIGJvb2wgY2hhY2hhMjBwb2x5MTMwNV9jcnlwdF9zZ19pbnBsYWNlKHMKKyAJCV9fbGU2NCBsZW5zWzJdOworIAl9IGIgX19hbGlnbmVkKDE2KTsKKyAKKysJaWYgKFdBUk5fT04oc3JjX2xlbiA+IElOVF9NQVgpKQorKwkJcmV0dXJuIGZhbHNlOworKworIAljaGFjaGFfbG9hZF9rZXkoYi5rLCBrZXkpOworIAorIAliLml2WzBdID0gMDsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNTItY3J5cHRvLXg4Ni1jdXJ2ZTI1NTE5LXN1cHBvcnQtYXNzZW1ibGVycy13aXRoLW5vLWFkeC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNTItY3J5cHRvLXg4Ni1jdXJ2ZTI1NTE5LXN1cHBvcnQtYXNzZW1ibGVycy13aXRoLW5vLWFkeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDUwN2IxCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA1Mi1jcnlwdG8teDg2LWN1cnZlMjU1MTktc3VwcG9ydC1hc3NlbWJsZXJzLXdpdGgtbm8tYWR4LnBhdGNoCkBAIC0wLDAgKzEsODQgQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJKYXNvbiBBLiBEb25lbmZlbGQiIDxKYXNvbkB6eDJjNC5jb20+CitEYXRlOiBTdW4sIDEgTWFyIDIwMjAgMjI6NTI6MzUgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gY3J5cHRvOiB4ODYvY3VydmUyNTUxOSAtIHN1cHBvcnQgYXNzZW1ibGVycyB3aXRoIG5vIGFkeAorIHN1cHBvcnQKKworY29tbWl0IDE1NzlmMWJjM2I3NTNkMTdhNDRkZTM0NTdkNWM2ZjRhNWIxNGM3NTIgdXBzdHJlYW0uCisKK1NvbWUgb2xkZXIgdmVyc2lvbiBvZiBHQVMgZG8gbm90IHN1cHBvcnQgdGhlIEFEWCBpbnN0cnVjdGlvbnMsIHNpbWlsYXJseQordG8gaG93IHRoZXkgYWxzbyBkb24ndCBzdXBwb3J0IEFWWCBhbmQgc3VjaC4gVGhpcyBjb21taXQgYWRkcyB0aGUgc2FtZQorYnVpbGQtdGltZSBkZXRlY3Rpb24gbWVjaGFuaXNtcyB3ZSB1c2UgZm9yIEFWWCBhbmQgb3RoZXJzIGZvciBBRFgsIGFuZAordGhlbiBtYWtlcyBzdXJlIHRoYXQgdGhlIGN1cnZlMjU1MTkgbGlicmFyeSBkaXNwYXRjaGVyIGNhbGxzIHRoZSByaWdodAorZnVuY3Rpb25zLgorCitSZXBvcnRlZC1ieTogV2lsbHkgVGFycmVhdSA8d0Axd3QuZXU+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgYXJjaC94ODYvTWFrZWZpbGUgICAgICAgICAgIHwgNSArKystLQorIGFyY2gveDg2L2NyeXB0by9NYWtlZmlsZSAgICB8IDcgKysrKysrLQorIGluY2x1ZGUvY3J5cHRvL2N1cnZlMjU1MTkuaCB8IDYgKysrKy0tCisgMyBmaWxlcyBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCistLS0gYS9hcmNoL3g4Ni9NYWtlZmlsZQorKysrIGIvYXJjaC94ODYvTWFrZWZpbGUKK0BAIC0xOTgsOSArMTk4LDEwIEBAIGF2eDJfaW5zdHIgOj0kKGNhbGwgYXMtaW5zdHIsdnBicm9hZGNhc3QKKyBhdng1MTJfaW5zdHIgOj0kKGNhbGwgYXMtaW5zdHIsdnBtb3ZtMmIgJWsxJChjb21tYSklem1tNSwtRENPTkZJR19BU19BVlg1MTI9MSkKKyBzaGExX25pX2luc3RyIDo9JChjYWxsIGFzLWluc3RyLHNoYTFtc2cxICV4bW0wJChjb21tYSkleG1tMSwtRENPTkZJR19BU19TSEExX05JPTEpCisgc2hhMjU2X25pX2luc3RyIDo9JChjYWxsIGFzLWluc3RyLHNoYTI1Nm1zZzEgJXhtbTAkKGNvbW1hKSV4bW0xLC1EQ09ORklHX0FTX1NIQTI1Nl9OST0xKQorK2FkeF9pbnN0ciA6PSAkKGNhbGwgYXMtaW5zdHIsYWRveCAlcjEwJChjb21tYSklcjEwLC1EQ09ORklHX0FTX0FEWD0xKQorIAorLUtCVUlMRF9BRkxBR1MgKz0gJChjZmkpICQoY2ZpLXNpZ2ZyYW1lKSAkKGNmaS1zZWN0aW9ucykgJChhc2luc3RyKSAkKGF2eF9pbnN0cikgJChhdngyX2luc3RyKSAkKGF2eDUxMl9pbnN0cikgJChzaGExX25pX2luc3RyKSAkKHNoYTI1Nl9uaV9pbnN0cikKKy1LQlVJTERfQ0ZMQUdTICs9ICQoY2ZpKSAkKGNmaS1zaWdmcmFtZSkgJChjZmktc2VjdGlvbnMpICQoYXNpbnN0cikgJChhdnhfaW5zdHIpICQoYXZ4Ml9pbnN0cikgJChhdng1MTJfaW5zdHIpICQoc2hhMV9uaV9pbnN0cikgJChzaGEyNTZfbmlfaW5zdHIpCisrS0JVSUxEX0FGTEFHUyArPSAkKGNmaSkgJChjZmktc2lnZnJhbWUpICQoY2ZpLXNlY3Rpb25zKSAkKGFzaW5zdHIpICQoYXZ4X2luc3RyKSAkKGF2eDJfaW5zdHIpICQoYXZ4NTEyX2luc3RyKSAkKHNoYTFfbmlfaW5zdHIpICQoc2hhMjU2X25pX2luc3RyKSAkKGFkeF9pbnN0cikKKytLQlVJTERfQ0ZMQUdTICs9ICQoY2ZpKSAkKGNmaS1zaWdmcmFtZSkgJChjZmktc2VjdGlvbnMpICQoYXNpbnN0cikgJChhdnhfaW5zdHIpICQoYXZ4Ml9pbnN0cikgJChhdng1MTJfaW5zdHIpICQoc2hhMV9uaV9pbnN0cikgJChzaGEyNTZfbmlfaW5zdHIpICQoYWR4X2luc3RyKQorIAorIEtCVUlMRF9MREZMQUdTIDo9IC1tIGVsZl8kKFVUU19NQUNISU5FKQorIAorLS0tIGEvYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlCisrKysgYi9hcmNoL3g4Ni9jcnlwdG8vTWFrZWZpbGUKK0BAIC0xMSw2ICsxMSw3IEBAIGF2eDJfc3VwcG9ydGVkIDo9ICQoY2FsbCBhcy1pbnN0cix2cGdhdGgKKyBhdng1MTJfc3VwcG9ydGVkIDo9JChjYWxsIGFzLWluc3RyLHZwbW92bTJiICVrMSQoY29tbWEpJXptbTUseWVzLG5vKQorIHNoYTFfbmlfc3VwcG9ydGVkIDo9JChjYWxsIGFzLWluc3RyLHNoYTFtc2cxICV4bW0wJChjb21tYSkleG1tMSx5ZXMsbm8pCisgc2hhMjU2X25pX3N1cHBvcnRlZCA6PSQoY2FsbCBhcy1pbnN0cixzaGEyNTZtc2cxICV4bW0wJChjb21tYSkleG1tMSx5ZXMsbm8pCisrYWR4X3N1cHBvcnRlZCA6PSAkKGNhbGwgYXMtaW5zdHIsYWRveCAlcjEwJChjb21tYSklcjEwLHllcyxubykKKyAKKyBvYmotJChDT05GSUdfQ1JZUFRPX0dMVUVfSEVMUEVSX1g4NikgKz0gZ2x1ZV9oZWxwZXIubworIAorQEAgLTM5LDcgKzQwLDExIEBAIG9iai0kKENPTkZJR19DUllQVE9fQUVHSVMxMjhfQUVTTklfU1NFMikKKyAKKyBvYmotJChDT05GSUdfQ1JZUFRPX05IUE9MWTEzMDVfU1NFMikgKz0gbmhwb2x5MTMwNS1zc2UyLm8KKyBvYmotJChDT05GSUdfQ1JZUFRPX05IUE9MWTEzMDVfQVZYMikgKz0gbmhwb2x5MTMwNS1hdngyLm8KKy1vYmotJChDT05GSUdfQ1JZUFRPX0NVUlZFMjU1MTlfWDg2KSArPSBjdXJ2ZTI1NTE5LXg4Nl82NC5vCisrCisrIyBUaGVzZSBtb2R1bGVzIHJlcXVpcmUgdGhlIGFzc2VtYmxlciB0byBzdXBwb3J0IEFEWC4KKytpZmVxICgkKGFkeF9zdXBwb3J0ZWQpLHllcykKKysJb2JqLSQoQ09ORklHX0NSWVBUT19DVVJWRTI1NTE5X1g4NikgKz0gY3VydmUyNTUxOS14ODZfNjQubworK2VuZGlmCisgCisgIyBUaGVzZSBtb2R1bGVzIHJlcXVpcmUgYXNzZW1ibGVyIHRvIHN1cHBvcnQgQVZYLgorIGlmZXEgKCQoYXZ4X3N1cHBvcnRlZCkseWVzKQorLS0tIGEvaW5jbHVkZS9jcnlwdG8vY3VydmUyNTUxOS5oCisrKysgYi9pbmNsdWRlL2NyeXB0by9jdXJ2ZTI1NTE5LmgKK0BAIC0zMyw3ICszMyw4IEBAIGJvb2wgX19tdXN0X2NoZWNrIGN1cnZlMjU1MTkodTggbXlwdWJsaWMKKyAJCQkgICAgIGNvbnN0IHU4IHNlY3JldFtDVVJWRTI1NTE5X0tFWV9TSVpFXSwKKyAJCQkgICAgIGNvbnN0IHU4IGJhc2Vwb2ludFtDVVJWRTI1NTE5X0tFWV9TSVpFXSkKKyB7CistCWlmIChJU19FTkFCTEVEKENPTkZJR19DUllQVE9fQVJDSF9IQVZFX0xJQl9DVVJWRTI1NTE5KSkKKysJaWYgKElTX0VOQUJMRUQoQ09ORklHX0NSWVBUT19BUkNIX0hBVkVfTElCX0NVUlZFMjU1MTkpICYmCisrCSAgICAoIUlTX0VOQUJMRUQoQ09ORklHX0NSWVBUT19DVVJWRTI1NTE5X1g4NikgfHwgSVNfRU5BQkxFRChDT05GSUdfQVNfQURYKSkpCisgCQljdXJ2ZTI1NTE5X2FyY2gobXlwdWJsaWMsIHNlY3JldCwgYmFzZXBvaW50KTsKKyAJZWxzZQorIAkJY3VydmUyNTUxOV9nZW5lcmljKG15cHVibGljLCBzZWNyZXQsIGJhc2Vwb2ludCk7CitAQCAtNDksNyArNTAsOCBAQCBfX211c3RfY2hlY2sgY3VydmUyNTUxOV9nZW5lcmF0ZV9wdWJsaWMoCisgCQkJCSAgICBDVVJWRTI1NTE5X0tFWV9TSVpFKSkpCisgCQlyZXR1cm4gZmFsc2U7CisgCistCWlmIChJU19FTkFCTEVEKENPTkZJR19DUllQVE9fQVJDSF9IQVZFX0xJQl9DVVJWRTI1NTE5KSkKKysJaWYgKElTX0VOQUJMRUQoQ09ORklHX0NSWVBUT19BUkNIX0hBVkVfTElCX0NVUlZFMjU1MTkpICYmCisrCSAgICAoIUlTX0VOQUJMRUQoQ09ORklHX0NSWVBUT19DVVJWRTI1NTE5X1g4NikgfHwgSVNfRU5BQkxFRChDT05GSUdfQVNfQURYKSkpCisgCQljdXJ2ZTI1NTE5X2Jhc2VfYXJjaChwdWIsIHNlY3JldCk7CisgCWVsc2UKKyAJCWN1cnZlMjU1MTlfZ2VuZXJpYyhwdWIsIHNlY3JldCwgY3VydmUyNTUxOV9iYXNlX3BvaW50KTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNTMtY3J5cHRvLWFybTY0LWNoYWNoYS1jb3JyZWN0bHktd2Fsay10aHJvdWdoLWJsb2Nrcy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNTMtY3J5cHRvLWFybTY0LWNoYWNoYS1jb3JyZWN0bHktd2Fsay10aHJvdWdoLWJsb2Nrcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjNhOTA4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA1My1jcnlwdG8tYXJtNjQtY2hhY2hhLWNvcnJlY3RseS13YWxrLXRocm91Z2gtYmxvY2tzLnBhdGNoCkBAIC0wLDAgKzEsNjggQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJKYXNvbiBBLiBEb25lbmZlbGQiIDxKYXNvbkB6eDJjNC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDIwIDIwOjI3OjMyIC0wNjAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyeXB0bzogYXJtNjQvY2hhY2hhIC0gY29ycmVjdGx5IHdhbGsgdGhyb3VnaCBibG9ja3MKKworY29tbWl0IGM4Y2ZjYjc4YzY1ODc3MzEzY2RhN2JjYmFjZTYyNGQzZGJkMWYzYjMgdXBzdHJlYW0uCisKK1ByaW9yLCBwYXNzaW5nIGluIGNodW5rcyBvZiAyLCAzLCBvciA0LCBmb2xsb3dlZCBieSBhbnkgYWRkaXRpb25hbAorY2h1bmtzIHdvdWxkIHJlc3VsdCBpbiB0aGUgY2hhY2hhIHN0YXRlIGNvdW50ZXIgZ2V0dGluZyBvdXQgb2Ygc3luYywKK3Jlc3VsdGluZyBpbiBpbmNvcnJlY3QgZW5jcnlwdGlvbi9kZWNyeXB0aW9uLCB3aGljaCBpcyBhIHByZXR0eSBuYXN0eQorY3J5cHRvIHZ1bG46ICJ3aHkgZG8gaW1hZ2VzIGxvb2sgd2VpcmQgb24gd2VicGFnZXM/IiBXaXJlR3VhcmQgdXNlcnMKK25ldmVyIGV4cGVyaWVuY2VkIHRoaXMgcHJpb3IsIGJlY2F1c2Ugd2UgaGF2ZSBhbHdheXMsIG91dCBvZiB0cmVlLCB1c2VkCithIGRpZmZlcmVudCBjcnlwdG8gbGlicmFyeSwgdW50aWwgdGhlIHJlY2VudCBGcmFua2VuemluYyBhZGRpdGlvbi4gVGhpcworY29tbWl0IGZpeGVzIHRoZSBpc3N1ZSBieSBhZHZhbmNpbmcgdGhlIHBvaW50ZXJzIGFuZCBzdGF0ZSBjb3VudGVyIGJ5Cit0aGUgYWN0dWFsIHNpemUgcHJvY2Vzc2VkLiBJdCBhbHNvIGZpeGVzIHVwIGEgYnVnIGluIHRoZSAob3B0aW9uYWwsCitjb3N0bHkpIHN0cmlkZSB0ZXN0IHRoYXQgcHJldmVudGVkIGl0IGZyb20gcnVubmluZyBvbiBhcm02NC4KKworRml4ZXM6IGIzYWFkNWJhZDI2YSAoImNyeXB0bzogYXJtNjQvY2hhY2hhIC0gZXhwb3NlIGFybTY0IENoYUNoYSByb3V0aW5lIGFzIGxpYnJhcnkgZnVuY3Rpb24iKQorUmVwb3J0ZWQtYW5kLXRlc3RlZC1ieTogRW1pbCBSZW5uZXIgQmVydGhpbmcgPGtlcm5lbEBlc21pbC5kaz4KK0NjOiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgorQ2M6IHN0YWJsZUB2Z2VyLmtlcm5lbC5vcmcgIyB2NS41KworU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CitSZXZpZXdlZC1ieTogRXJpYyBCaWdnZXJzIDxlYmlnZ2Vyc0Bnb29nbGUuY29tPgorU2lnbmVkLW9mZi1ieTogSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBhcmNoL2FybTY0L2NyeXB0by9jaGFjaGEtbmVvbi1nbHVlLmMgICB8ICA4ICsrKystLS0tCisgbGliL2NyeXB0by9jaGFjaGEyMHBvbHkxMzA1LXNlbGZ0ZXN0LmMgfCAxMSArKysrKysrKy0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKKworLS0tIGEvYXJjaC9hcm02NC9jcnlwdG8vY2hhY2hhLW5lb24tZ2x1ZS5jCisrKysgYi9hcmNoL2FybTY0L2NyeXB0by9jaGFjaGEtbmVvbi1nbHVlLmMKK0BAIC01NSwxMCArNTUsMTAgQEAgc3RhdGljIHZvaWQgY2hhY2hhX2RvbmVvbih1MzIgKnN0YXRlLCB1OAorIAkJCWJyZWFrOworIAkJfQorIAkJY2hhY2hhXzRibG9ja194b3JfbmVvbihzdGF0ZSwgZHN0LCBzcmMsIG5yb3VuZHMsIGwpOworLQkJYnl0ZXMgLT0gQ0hBQ0hBX0JMT0NLX1NJWkUgKiA1OworLQkJc3JjICs9IENIQUNIQV9CTE9DS19TSVpFICogNTsKKy0JCWRzdCArPSBDSEFDSEFfQkxPQ0tfU0laRSAqIDU7CistCQlzdGF0ZVsxMl0gKz0gNTsKKysJCWJ5dGVzIC09IGw7CisrCQlzcmMgKz0gbDsKKysJCWRzdCArPSBsOworKwkJc3RhdGVbMTJdICs9IERJVl9ST1VORF9VUChsLCBDSEFDSEFfQkxPQ0tfU0laRSk7CisgCX0KKyB9CisgCistLS0gYS9saWIvY3J5cHRvL2NoYWNoYTIwcG9seTEzMDUtc2VsZnRlc3QuYworKysrIGIvbGliL2NyeXB0by9jaGFjaGEyMHBvbHkxMzA1LXNlbGZ0ZXN0LmMKK0BAIC05MDI4LDEwICs5MDI4LDE1IEBAIGJvb2wgX19pbml0IGNoYWNoYTIwcG9seTEzMDVfc2VsZnRlc3Qodm8KKyAJICAgICAmJiB0b3RhbF9sZW4gPD0gMSA8PCAxMDsgKyt0b3RhbF9sZW4pIHsKKyAJCWZvciAoaSA9IDA7IGkgPD0gdG90YWxfbGVuOyArK2kpIHsKKyAJCQlmb3IgKGogPSBpOyBqIDw9IHRvdGFsX2xlbjsgKytqKSB7CisrCQkJCWsgPSAwOworIAkJCQlzZ19pbml0X3RhYmxlKHNnX3NyYywgMyk7CistCQkJCXNnX3NldF9idWYoJnNnX3NyY1swXSwgaW5wdXQsIGkpOworLQkJCQlzZ19zZXRfYnVmKCZzZ19zcmNbMV0sIGlucHV0ICsgaSwgaiAtIGkpOworLQkJCQlzZ19zZXRfYnVmKCZzZ19zcmNbMl0sIGlucHV0ICsgaiwgdG90YWxfbGVuIC0gaik7CisrCQkJCWlmIChpKQorKwkJCQkJc2dfc2V0X2J1Zigmc2dfc3JjW2srK10sIGlucHV0LCBpKTsKKysJCQkJaWYgKGogLSBpKQorKwkJCQkJc2dfc2V0X2J1Zigmc2dfc3JjW2srK10sIGlucHV0ICsgaSwgaiAtIGkpOworKwkJCQlpZiAodG90YWxfbGVuIC0gaikKKysJCQkJCXNnX3NldF9idWYoJnNnX3NyY1trKytdLCBpbnB1dCArIGosIHRvdGFsX2xlbiAtIGopOworKwkJCQlzZ19pbml0X21hcmtlcihzZ19zcmMsIGspOworIAkJCQltZW1zZXQoY29tcHV0ZWRfb3V0cHV0LCAwLCB0b3RhbF9sZW4pOworIAkJCQltZW1zZXQoaW5wdXQsIDAsIHRvdGFsX2xlbik7CisgCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDU0LWNyeXB0by14ODYtY3VydmUyNTUxOS1yZXBsYWNlLXdpdGgtZm9ybWFsbHktdmVyaWZpZWQucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDU0LWNyeXB0by14ODYtY3VydmUyNTUxOS1yZXBsYWNlLXdpdGgtZm9ybWFsbHktdmVyaWZpZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM4ZDcwMAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNTQtY3J5cHRvLXg4Ni1jdXJ2ZTI1NTE5LXJlcGxhY2Utd2l0aC1mb3JtYWxseS12ZXJpZmllZC5wYXRjaApAQCAtMCwwICsxLDM3NjUgQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJKYXNvbiBBLiBEb25lbmZlbGQiIDxKYXNvbkB6eDJjNC5jb20+CitEYXRlOiBNb24sIDIwIEphbiAyMDIwIDE4OjE4OjE1ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyeXB0bzogeDg2L2N1cnZlMjU1MTkgLSByZXBsYWNlIHdpdGggZm9ybWFsbHkgdmVyaWZpZWQKKyBpbXBsZW1lbnRhdGlvbgorCitjb21taXQgMDdiNTg2ZmUwNjYyNWIwYjYxMGRjM2QzYTk2OWM1MTkxM2QxNDNkNCB1cHN0cmVhbS4KKworVGhpcyBjb21lcyBmcm9tIElOUklBJ3MgSEFDTCovVmFsZS4gSXQgaW1wbGVtZW50cyB0aGUgc2FtZSBhbGdvcml0aG0gYW5kCitpbXBsZW1lbnRhdGlvbiBzdHJhdGVneSBhcyB0aGUgY29kZSBpdCByZXBsYWNlcywgb25seSB0aGlzIGNvZGUgaGFzIGJlZW4KK2Zvcm1hbGx5IHZlcmlmaWVkLCBzYW5zIHRoZSBiYXNlIHBvaW50IG11bHRpcGxpY2F0aW9uLCB3aGljaCB1c2VzIGNvZGUKK3NpbWlsYXIgdG8gcHJpb3IsIG9ubHkgaXQgdXNlcyB0aGUgZm9ybWFsbHkgdmVyaWZpZWQgZmllbGQgYXJpdGhtZXRpYworYWxvbmdzaWRlIHJlcHJvZHVjYWJsZSBsYWRkZXIgZ2VuZXJhdGlvbiBzdGVwcy4gVGhpcyBkb2Vzbid0IGhhdmUgYQorcHVyZS1ibWkyIHZlcnNpb24sIHdoaWNoIG1lYW5zIGhhc3dlbGwgbm8gbG9uZ2VyIGJlbmVmaXRzLCBidXQgdGhlCitpbmNyZWFzZWQgKGRvdWJsZWQpIGNvZGUgY29tcGxleGl0eSBpcyBub3Qgd29ydGggaXQgZm9yIGEgc2luZ2xlCitnZW5lcmF0aW9uIG9mIGNoaXBzIHRoYXQncyBhbHJlYWR5IG9sZC4KKworUGVyZm9ybWFuY2Utd2lzZSwgdGhpcyBpcyBhcm91bmQgMSUgc2xvd2VyIG9uIG9sZGVyIG1pY3JvYXJjaGl0ZWN0dXJlcywKK2FuZCBzbGlnaHRseSBmYXN0ZXIgb24gbmV3ZXIgbWljcm9hcmNoaXRlY3R1cmVzLCBtYWlubHkgMTBubSBvbmVzIG9yCitiYWNrcG9ydHMgb2YgMTBubSB0byAxNG5tLiBUaGlzIGltcGxlbWVudGF0aW9uIGlzICJldmVyZXN0IiBiZWxvdzoKKworWGVvbiBFNS0yNjgwIHY0IChCcm9hZHdlbGwpCisKKyAgICAgYXJtZmF6aDogMTMzMzQwIGN5Y2xlcyBwZXIgY2FsbAorICAgICBldmVyZXN0OiAxMzM0MzYgY3ljbGVzIHBlciBjYWxsCisKK1hlb24gR29sZCA1MTIwIChTa3kgTGFrZSBTZXJ2ZXIpCisKKyAgICAgYXJtZmF6aDogMTEyNjM2IGN5Y2xlcyBwZXIgY2FsbAorICAgICBldmVyZXN0OiAxMTM5MDYgY3ljbGVzIHBlciBjYWxsCisKK0NvcmUgaTUtNjMwMFUgKFNreSBMYWtlIENsaWVudCkKKworICAgICBhcm1mYXpoOiAxMTY4MTAgY3ljbGVzIHBlciBjYWxsCisgICAgIGV2ZXJlc3Q6IDExNzkxNiBjeWNsZXMgcGVyIGNhbGwKKworQ29yZSBpNy03NjAwVSAoS2FieSBMYWtlKQorCisgICAgIGFybWZhemg6IDExOTUyMyBjeWNsZXMgcGVyIGNhbGwKKyAgICAgZXZlcmVzdDogMTE5MDQwIGN5Y2xlcyBwZXIgY2FsbAorCitDb3JlIGk3LTg3NTBIIChDb2ZmZWUgTGFrZSkKKworICAgICBhcm1mYXpoOiAxMTM5MTQgY3ljbGVzIHBlciBjYWxsCisgICAgIGV2ZXJlc3Q6IDExMzY1MCBjeWNsZXMgcGVyIGNhbGwKKworQ29yZSBpOS05ODgwSCAoQ29mZmVlIExha2UgUmVmcmVzaCkKKworICAgICBhcm1mYXpoOiAxMTI2MTYgY3ljbGVzIHBlciBjYWxsCisgICAgIGV2ZXJlc3Q6IDExNDA4MiBjeWNsZXMgcGVyIGNhbGwKKworQ29yZSBpMy04MTIxVSAoQ2Fubm9uIExha2UpCisKKyAgICAgYXJtZmF6aDogMTEzMjAyIGN5Y2xlcyBwZXIgY2FsbAorICAgICBldmVyZXN0OiAxMTEzODIgY3ljbGVzIHBlciBjYWxsCisKK0NvcmUgaTctODI2NVUgKFdoaXNrZXkgTGFrZSkKKworICAgICBhcm1mYXpoOiAxMjczMDcgY3ljbGVzIHBlciBjYWxsCisgICAgIGV2ZXJlc3Q6IDEyNzY5NyBjeWNsZXMgcGVyIGNhbGwKKworQ29yZSBpNy04NTUwVSAoS2FieSBMYWtlIFJlZnJlc2gpCisKKyAgICAgYXJtZmF6aDogMTI3NTIyIGN5Y2xlcyBwZXIgY2FsbAorICAgICBldmVyZXN0OiAxMjcwODMgY3ljbGVzIHBlciBjYWxsCisKK1hlb24gUGxhdGludW0gODI3NUNMIChDYXNjYWRlIExha2UpCisKKyAgICAgYXJtZmF6aDogMTE0MzgwIGN5Y2xlcyBwZXIgY2FsbAorICAgICBldmVyZXN0OiAxMTQ2NTYgY3ljbGVzIHBlciBjYWxsCisKK0FjaGlldmluZyB0aGVzZSBraW5kIG9mIHJlc3VsdHMgd2l0aCBmb3JtYWxseSB2ZXJpZmllZCBjb2RlIGlzIHF1aXRlCityZW1hcmthYmxlLCBlc3BlY2lhbHkgY29uc2lkZXJpbmcgdGhhdCBwZXJmb3JtYW5jZSBpcyBmYXZvcmFibGUgZm9yCituZXdlciBjaGlwcy4KKworU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CitTaWduZWQtb2ZmLWJ5OiBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGFyY2gveDg2L2NyeXB0by9jdXJ2ZTI1NTE5LXg4Nl82NC5jIHwgMzU0NiArKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTI5MiBpbnNlcnRpb25zKCspLCAyMjU0IGRlbGV0aW9ucygtKQorCistLS0gYS9hcmNoL3g4Ni9jcnlwdG8vY3VydmUyNTUxOS14ODZfNjQuYworKysrIGIvYXJjaC94ODYvY3J5cHRvL2N1cnZlMjU1MTkteDg2XzY0LmMKK0BAIC0xLDggKzEsNyBAQAorLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0zLUNsYXVzZQorKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVAorIC8qCistICogQ29weXJpZ2h0IChjKSAyMDE3IEFybWFuZG8gRmF6IDxhcm1mYXpoQGljLnVuaWNhbXAuYnI+LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDE5IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy0gKiBDb3B5cmlnaHQgKEMpIDIwMTggU2FtdWVsIE5ldmVzIDxzbmV2ZXNAZGVpLnVjLnB0Pi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKysgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIElOUklBLCBDTVUgYW5kIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbgorICAqLworIAorICNpbmNsdWRlIDxjcnlwdG8vY3VydmUyNTUxOS5oPgorQEAgLTE2LDIzMzcgKzE1LDEzNzggQEAKKyAjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KKyAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorIAorLXN0YXRpYyBfX3JvX2FmdGVyX2luaXQgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoY3VydmUyNTUxOV91c2VfYm1pMik7Cistc3RhdGljIF9fcm9fYWZ0ZXJfaW5pdCBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShjdXJ2ZTI1NTE5X3VzZV9hZHgpOworLQorLWVudW0geyBOVU1fV09SRFNfRUxURlAyNTUxOSA9IDQgfTsKKy10eXBlZGVmIF9fYWxpZ25lZCgzMikgdTY0IGVsdGZwMjU1MTlfMXdbTlVNX1dPUkRTX0VMVEZQMjU1MTldOworLXR5cGVkZWYgX19hbGlnbmVkKDMyKSB1NjQgZWx0ZnAyNTUxOV8xd19idWZmZXJbMiAqIE5VTV9XT1JEU19FTFRGUDI1NTE5XTsKKy0KKy0jZGVmaW5lIG11bF9lbHRmcDI1NTE5XzF3X2FkeChjLCBhLCBiKSBkbyB7IFwKKy0JbXVsXzI1NngyNTZfaW50ZWdlcl9hZHgobS5idWZmZXIsIGEsIGIpOyBcCistCXJlZF9lbHRmcDI1NTE5XzF3X2FkeChjLCBtLmJ1ZmZlcik7IFwKKy19IHdoaWxlICgwKQorLQorLSNkZWZpbmUgbXVsX2VsdGZwMjU1MTlfMXdfYm1pMihjLCBhLCBiKSBkbyB7IFwKKy0JbXVsXzI1NngyNTZfaW50ZWdlcl9ibWkyKG0uYnVmZmVyLCBhLCBiKTsgXAorLQlyZWRfZWx0ZnAyNTUxOV8xd19ibWkyKGMsIG0uYnVmZmVyKTsgXAorLX0gd2hpbGUgKDApCistCistI2RlZmluZSBzcXJfZWx0ZnAyNTUxOV8xd19hZHgoYSkgZG8geyBcCistCXNxcl8yNTZ4MjU2X2ludGVnZXJfYWR4KG0uYnVmZmVyLCBhKTsgXAorLQlyZWRfZWx0ZnAyNTUxOV8xd19hZHgoYSwgbS5idWZmZXIpOyBcCistfSB3aGlsZSAoMCkKKy0KKy0jZGVmaW5lIHNxcl9lbHRmcDI1NTE5XzF3X2JtaTIoYSkgZG8geyBcCistCXNxcl8yNTZ4MjU2X2ludGVnZXJfYm1pMihtLmJ1ZmZlciwgYSk7IFwKKy0JcmVkX2VsdGZwMjU1MTlfMXdfYm1pMihhLCBtLmJ1ZmZlcik7IFwKKy19IHdoaWxlICgwKQorLQorLSNkZWZpbmUgbXVsX2VsdGZwMjU1MTlfMndfYWR4KGMsIGEsIGIpIGRvIHsgXAorLQltdWwyXzI1NngyNTZfaW50ZWdlcl9hZHgobS5idWZmZXIsIGEsIGIpOyBcCistCXJlZF9lbHRmcDI1NTE5XzJ3X2FkeChjLCBtLmJ1ZmZlcik7IFwKKy19IHdoaWxlICgwKQorLQorLSNkZWZpbmUgbXVsX2VsdGZwMjU1MTlfMndfYm1pMihjLCBhLCBiKSBkbyB7IFwKKy0JbXVsMl8yNTZ4MjU2X2ludGVnZXJfYm1pMihtLmJ1ZmZlciwgYSwgYik7IFwKKy0JcmVkX2VsdGZwMjU1MTlfMndfYm1pMihjLCBtLmJ1ZmZlcik7IFwKKy19IHdoaWxlICgwKQorLQorLSNkZWZpbmUgc3FyX2VsdGZwMjU1MTlfMndfYWR4KGEpIGRvIHsgXAorLQlzcXIyXzI1NngyNTZfaW50ZWdlcl9hZHgobS5idWZmZXIsIGEpOyBcCistCXJlZF9lbHRmcDI1NTE5XzJ3X2FkeChhLCBtLmJ1ZmZlcik7IFwKKy19IHdoaWxlICgwKQorLQorLSNkZWZpbmUgc3FyX2VsdGZwMjU1MTlfMndfYm1pMihhKSBkbyB7IFwKKy0Jc3FyMl8yNTZ4MjU2X2ludGVnZXJfYm1pMihtLmJ1ZmZlciwgYSk7IFwKKy0JcmVkX2VsdGZwMjU1MTlfMndfYm1pMihhLCBtLmJ1ZmZlcik7IFwKKy19IHdoaWxlICgwKQorLQorLSNkZWZpbmUgc3Fybl9lbHRmcDI1NTE5XzF3X2FkeChhLCB0aW1lcykgZG8geyBcCistCWludCBfX19fY291bnRlciA9ICh0aW1lcyk7IFwKKy0Jd2hpbGUgKF9fX19jb3VudGVyLS0gPiAwKSBcCistCQlzcXJfZWx0ZnAyNTUxOV8xd19hZHgoYSk7IFwKKy19IHdoaWxlICgwKQorLQorLSNkZWZpbmUgc3Fybl9lbHRmcDI1NTE5XzF3X2JtaTIoYSwgdGltZXMpIGRvIHsgXAorLQlpbnQgX19fX2NvdW50ZXIgPSAodGltZXMpOyBcCistCXdoaWxlIChfX19fY291bnRlci0tID4gMCkgXAorLQkJc3FyX2VsdGZwMjU1MTlfMXdfYm1pMihhKTsgXAorLX0gd2hpbGUgKDApCistCistI2RlZmluZSBjb3B5X2VsdGZwMjU1MTlfMXcoQywgQSkgZG8geyBcCistCShDKVswXSA9IChBKVswXTsgXAorLQkoQylbMV0gPSAoQSlbMV07IFwKKy0JKEMpWzJdID0gKEEpWzJdOyBcCistCShDKVszXSA9IChBKVszXTsgXAorLX0gd2hpbGUgKDApCistCistI2RlZmluZSBzZXR6ZXJvX2VsdGZwMjU1MTlfMXcoQykgZG8geyBcCistCShDKVswXSA9IDA7IFwKKy0JKEMpWzFdID0gMDsgXAorLQkoQylbMl0gPSAwOyBcCistCShDKVszXSA9IDA7IFwKKy19IHdoaWxlICgwKQorLQorLV9fYWxpZ25lZCgzMikgc3RhdGljIGNvbnN0IHU2NCB0YWJsZV9sYWRkZXJfOGtbMjUyICogTlVNX1dPUkRTX0VMVEZQMjU1MTldID0geworLQkvKiAgIDEgKi8gMHhmZmZmZmZmZmZmZmZmZmYzVUwsIDB4ZmZmZmZmZmZmZmZmZmZmZlVMLAorLQkJICAweGZmZmZmZmZmZmZmZmZmZmZVTCwgMHg1ZmZmZmZmZmZmZmZmZmZmVUwsCistCS8qICAgMiAqLyAweDZiODIyMGY0MTZhYWZlOTZVTCwgMHg4MmViZWIyYjRmNTY2YTM0VUwsCistCQkgIDB4ZDVhOWE1YjA3NWE1OTUwZlVMLCAweDUxNDJiMmNmNGIyNDg4ZjRVTCwKKy0JLyogICAzICovIDB4NmFhZWJjNzUwMDY5NjgwY1VMLCAweDg5Y2Y3ODIwYTBmOTljNDFVTCwKKy0JCSAgMHgyYTU4ZDkxODNiNTZkMGY0VUwsIDB4NGI1YWNhODBlMzYwMTFhNFVMLAorLQkvKiAgIDQgKi8gMHgzMjkxMzIzNDhjMjk3NDVkVUwsIDB4ZjRhMmU2MTZlMTY0MmZkN1VMLAorLQkJICAweDFlNDViYjAzZmY2N2JjMzRVTCwgMHgzMDY5MTJkMGY0MmE5YjRhVUwsCistCS8qICAgNSAqLyAweGZmODg2NTA3ZTZhZjcxNTRVTCwgMHgwNGY1MGUxM2RmZWVjODJmVUwsCistCQkgIDB4YWE1MTJmZTgyYWJhYjVjZVVMLCAweDE3NGUyNTFhNjhkNWYyMjJVTCwKKy0JLyogICA2ICovIDB4Y2Y5NjcwMGQ4MjAyODg5OFVMLCAweDE3NDNlMzM3MGEyYzAyYzVVTCwKKy0JCSAgMHgzNzllZWM5OGI0ZTg2ZWFhVUwsIDB4MGM1OTg4OGE1MWUwNDgyZVVMLAorLQkvKiAgIDcgKi8gMHhmYmNiZjFkNjk5YjVkMTg5VUwsIDB4YWNhZWYwZDU4ZTlmZGM4NFVMLAorLQkJICAweGMxYzIwZDA2MjMxZjc2MTRVTCwgMHgyOTM4MjE4ZGEyNzRmOTcyVUwsCistCS8qICAgOCAqLyAweGY2YWY0OWJlZmYxZDdmMThVTCwgMHhjYzU0MWMyMjM4N2FjOWMyVUwsCistCQkgIDB4OTZmY2M5ZWY0MDE1YzU2YlVMLCAweDY5YzE2MjdjNjkwOTEzYTlVTCwKKy0JLyogICA5ICovIDB4N2E4NmZkMmY0NzMzZGIwZVVMLCAweGZkYjhjNGYyOWUwODdkZTlVTCwKKy0JCSAgMHgwOTVlNGIxYThlYTJhMjI5VUwsIDB4MWFkN2E3YzgyOWIzN2E3OVVMLAorLQkvKiAgMTAgKi8gMHgzNDJkODljYWQxN2VhMGMwVUwsIDB4NjdiZWRkYTZjY2VkMjA1MVVMLAorLQkJICAweDE5Y2EzMWJmMmJiNDJmNzRVTCwgMHgzZGY3YjRjODQ5ODBhY2JiVUwsCistCS8qICAxMSAqLyAweGE4YzY0NDRkYzgwYWQ4ODNVTCwgMHhiOTFlNDQwMzY2ZTNhYjg1VUwsCistCQkgIDB4YzIxNWNkYTAwMTY0ZjZkOFVMLCAweDNkODY3YzZlZjI0N2U2NjhVTCwKKy0JLyogIDEyICovIDB4YzdkZDU4MmJjYzNlNjU4Y1VMLCAweGZkMmM0NzQ4ZWUwZTU1MjhVTCwKKy0JCSAgMHhhMGZkOWI5NWNjOWY0ZjcxVUwsIDB4NzUyOWQ4NzFiMDY3NWRkZlVMLAorLQkvKiAgMTMgKi8gMHhiOGY1NjhiNDJkM2NiZDc4VUwsIDB4MTIzMzAxMWI5MWYzZGE4MlVMLAorLQkJICAweDJkY2U2Y2NkNGE3YzNiNjJVTCwgMHg3NWU3ZmM4ZTllNDk4NjAzVUwsCistCS8qICAxNCAqLyAweDJmNGYxM2YxZmNkMGI2ZWNVTCwgMHhmMWE4Y2ExZjI5ZmY3YTQ1VUwsCistCQkgIDB4YzI0OWMxYTcyOTgxZTI5YlVMLCAweDZlYmUwZGJiOGM4M2I1NmFVTCwKKy0JLyogIDE1ICovIDB4NzExNGZhOGQxNzBiYjIyMlVMLCAweDY1YTJkY2Q1YmY5MzkzNWZVTCwKKy0JCSAgMHhiZGM0MWY2OGI1OWM5NzlhVUwsIDB4MmYwZWVmNzlhMmNlOTI4OVVMLAorLQkvKiAgMTYgKi8gMHg0MmVjYmYwYzA4M2MzN2NlVUwsIDB4MjkzMGJjMDllYzQ5NjMyMlVMLAorLQkJICAweGYyOTRiMGMxOWNmZWFjMGRVTCwgMHgzNzgwYWE0YmVkZmFiYjgwVUwsCistCS8qICAxNyAqLyAweDU2YzE3ZDNlN2NlYWQ5MjlVTCwgMHhlN2NiNGJlYjJlNTcyMmM1VUwsCistCQkgIDB4MGNlOTMxNzMyZGJmZTE1YVVMLCAweDQxYjg4M2M3NjIxMDUyZjhVTCwKKy0JLyogIDE4ICovIDB4ZGJmNzVjYTBjM2QyNTM1MFVMLCAweDI5MzZiZTA4NmViMWUzNTFVTCwKKy0JCSAgMHhjOTM2ZTAzY2I0YTliMjEyVUwsIDB4MWQ0NWJmODIzMjIyMjVhYVVMLAorLQkvKiAgMTkgKi8gMHhlODFhYjEwMzZhMDI0Y2M1VUwsIDB4ZTIxMjIwMWMzMDRjOWE3MlVMLAorLQkJICAweGM1ZDczZmJhNjgzMmIxZmNVTCwgMHgyMGZmZGI1YTRkODM5NTgxVUwsCistCS8qICAyMCAqLyAweGEyODNkMzY3YmU1ZDBmYWRVTCwgMHg2YzJiMjVjYThiMTY0NDc1VUwsCistCQkgIDB4OWQ0OTM1NDY3Y2FhZjIyZVVMLCAweDUxNjY0MDhlZWU4NWZmNDlVTCwKKy0JLyogIDIxICovIDB4M2M2N2JhYTJmYWI0ZTM2MVVMLCAweGIzZTQzM2M2N2VmMzVjZWZVTCwKKy0JCSAgMHg1MjU5NzI5MjQxMTU5YjFjVUwsIDB4NmE2MjE4OTJkNWIwYWIzM1VMLAorLQkvKiAgMjIgKi8gMHgyMGI3NGEzODc1NTVjZGNiVUwsIDB4NTMyYWExMGUxMjA4OTIzZlVMLAorLQkJICAweGVhYTE3Yjc3NjIyODFkZDFVTCwgMHg2MWFiMzQ0M2YwNWM0NGJmVUwsCistCS8qICAyMyAqLyAweDI1N2E2YzQyMjMyNGRlZjhVTCwgMHgxMzFjNmMxMDE3ZTNjZjdmVUwsCistCQkgIDB4MjM3NTg3MzlmNjMwYTI1N1VMLCAweDI5NWE0MDdhMDFhNzg1ODBVTCwKKy0JLyogIDI0ICovIDB4ZjhjNDQzMjQ2ZDVkYThkOVVMLCAweDE5ZDc3NTQ1MGM1MmZhNWRVTCwKKy0JCSAgMHgyYWZjZmM5MjczMWJmODNkVUwsIDB4N2QxMGM4ZTgxYjJiNDcwMFVMLAorLQkvKiAgMjUgKi8gMHhjOGUwMjcxZjcwYmFhMjBiVUwsIDB4OTkzNzQ4ODY3Y2E2Mzk1N1VMLAorLQkJICAweDU0MTJlZmIzY2I3ZWQ0YmJVTCwgMHgzMTk2ZDM2MTczZTYyOTc1VUwsCistCS8qICAyNiAqLyAweGRlNWJjYWQxNDFjN2RmZmNVTCwgMHg0N2NjOGNkMmIzOTVjODQ4VUwsCistCQkgIDB4YTM0Y2Q5NDJlMTFhZjNjYlVMLCAweDAyNTZkYmYyZDA0ZWNlYzJVTCwKKy0JLyogIDI3ICovIDB4ODc1YWI3ZTk0YjBlNjY3ZlVMLCAweGNhZDRkZDgzYzA4NTBkMTBVTCwKKy0JCSAgMHg0N2YxMmU4ZjRlNzJjNzlmVUwsIDB4NWYxYTg3YmI4Yzg1YjE5YlVMLAorLQkvKiAgMjggKi8gMHg3YWU5ZDBiNjQzN2Y1MWI4VUwsIDB4MTJjN2NlNTUxODg3OTA2NVVMLAorLQkJICAweDJhZGUwOWZlNWNmNzdhZWVVTCwgMHgyM2EwNWEyZjdkMmM1NjI3VUwsCistCS8qICAyOSAqLyAweDU5MDhlMTI4ZjE3YzE2OWFVTCwgMHhmNzc0OThkZDhhZDA4NTJkVUwsCistCQkgIDB4NzRiNGM0Y2VhYjEwMmY2NFVMLCAweDE4M2FiYWRkMTAxMzk4NDVVTCwKKy0JLyogIDMwICovIDB4YjE2NWJhOGRhYTkyYWFhY1VMLCAweGQ1YzVlZjk1OTkzODY3MDVVTCwKKy0JCSAgMHhiZTJmOGYwY2Y4ZmM0MGQxVUwsIDB4MjcwMWU2MzVlZTIwNDUxNFVMLAorLQkvKiAgMzEgKi8gMHg2MjlmYTgwMDIwMTU2NTE0VUwsIDB4ZjIyMzg2ODc2NGE4YzFjZVVMLAorLQkJICAweDViODk0ZmZmMGIzZjA2MGVVTCwgMHg2MGQ5OTQ0Y2Y3MDhhM2ZhVUwsCistCS8qICAzMiAqLyAweGFlZWEwMDFhMWM3YTIwMWZVTCwgMHhlYmYxNmE2MzNlZTJjZTYzVUwsCistCQkgIDB4NmY3NzA5NTk0YzdhMDdlMVVMLCAweDc5Yjk1ODE1MGQwMjA4Y2JVTCwKKy0JLyogIDMzICovIDB4MjRiNTVlNTMwMWQ0MTBlN1VMLCAweGUzYTM0ZWRmZjNmZGM4NGRVTCwKKy0JCSAgMHhkODg3NjhlNDkwNDAzMmQ4VUwsIDB4MTMxMzg0NDI3YjNhYWVlY1VMLAorLQkvKiAgMzQgKi8gMHg4NDA1ZTUxMjg2MjM0ZjE0VUwsIDB4MTRkYzQ3MzlhZGI0YzUyOVVMLAorLQkJICAweGI4YTJiNWIyNTA2MzRmZmRVTCwgMHgyZmUyYTk0YWQ4YTdmZjkzVUwsCistCS8qICAzNSAqLyAweGVjNWM1N2VmZTg0M2ZhZGRVTCwgMHgyODQzY2U0MGYwYmI5OTE4VUwsCistCQkgIDB4YTRiNTYxZDZjZjNkNjMwNVVMLCAweDc0MzYyOWJkZThmYjc3N2VVTCwKKy0JLyogIDM2ICovIDB4MzQzZWRkNDZiYmFmNzM4ZlVMLCAweGVkOTgxODI4YjEwMWE2NTFVTCwKKy0JCSAgMHhhNDAxNzYwYjg4MmM3OTdhVUwsIDB4MWZjMjIzZTI4ZGM4ODczMFVMLAorLQkvKiAgMzcgKi8gMHg0ODYwNGU5MWZjMGZiYTBlVUwsIDB4YjYzN2Y3OGYwNTJjNmZhNFVMLAorLQkJICAweDkxY2NhYzNkMDllOTIzOWNVTCwgMHgyM2Y3ZWVkNDQzN2E2ODdjVUwsCistCS8qICAzOCAqLyAweDUxNzNiMTExOGQ5YmQ4MDBVTCwgMHgyOWQ2NDFiNjMxODlkNGE3VUwsCistCQkgIDB4ZmRiZjE3Nzk4OGJiYzU4NlVMLCAweDI5NTk4OTRmY2FkODFkZjVVTCwKKy0JLyogIDM5ICovIDB4YWViYzhlZjNiNGJiYzg5OVVMLCAweDQxNDg5OTVhYjI2OTkyYjlVTCwKKy0JCSAgMHgyNGUyMGIwMTM0ZjkyY2ZiVUwsIDB4NDBkMTU4ODk0YTA1ZGVlOFVMLAorLQkvKiAgNDAgKi8gMHg0NmIwMGIxMTg1YWY3NmY2VUwsIDB4MjZiYWM3Nzg3MzE4N2E3OVVMLAorLQkJICAweDNkYzBiZjk1YWI4ZmZmNWZVTCwgMHgyYTYwOGJkODk0NTUyNGQ3VUwsCistCS8qICA0MSAqLyAweDI2NDQ5NTg4YmQ0NDYzMDJVTCwgMHg3YzRiYzIxYzAzODg0MzljVUwsCistCQkgIDB4OGU5OGE0ZjM4M2JkMTFiMlVMLCAweDI2MjE4ZDdiYzlkODc2YjlVTCwKKy0JLyogIDQyICovIDB4ZTMwODE1NDI5OTdjMTc4YVVMLCAweDNjMmQyOWE4NmZiNjYwNmZVTCwKKy0JCSAgMHg1YzIxNzczNmZhMjc5Mzc0VUwsIDB4N2RkZTA1NzM0YWZlYjFmYVVMLAorLQkvKiAgNDMgKi8gMHgzYmYxMGUzOTA2ZDQyYmFiVUwsIDB4ZTRmNzgwM2UxOTgwNjQ5Y1VMLAorLQkJICAweGU2MDUzYmY4OTU5NWJmN2FVTCwgMHgzOTRmYWYzOGRhMjQ1NTMwVUwsCistCS8qICA0NCAqLyAweDdhOGVmYjU4ODk2OTI4ZjRVTCwgMHhmYmM3NzhlOWNjNmExMTNjVUwsCistCQkgIDB4NzI2NzBjZTMzMGFmNTk2ZlVMLCAweDQ4ZjIyMmE4MWQzZDZjZjdVTCwKKy0JLyogIDQ1ICovIDB4ZjAxZmNlNDEwZDcyY2FhN1VMLCAweDVhMjBlY2M3MjEzYjU1OTVVTCwKKy0JCSAgMHg3YmMyMTE2NWMxZmExNDgzVUwsIDB4MDdmODlhZTMxZGE4YTc0MVVMLAorLQkvKiAgNDYgKi8gMHgwNWQyYzJiNGM2ODMwZmY5VUwsIDB4ZDQzZTMzMGZjNjMxNjI5M1VMLAorLQkJICAweGE1YTU1OTBhOTZkM2E5MDRVTCwgMHg3MDVlZGI5MWE2NTMzM2I2VUwsCistCS8qICA0NyAqLyAweDA0OGVlMTVlMGJiOWE1ZjdVTCwgMHgzMjQwY2ZjYTllMGFhZjVkVUwsCistCQkgIDB4OGY0YjcxY2VlZGM0YTQwYlVMLCAweDYyMWMwZGEzZGU1NDRhNmRVTCwKKy0JLyogIDQ4ICovIDB4OTI4NzI4MzZhMDhjNDA5MVVMLCAweGNlODM3NWIwMTBjOTE0NDVVTCwKKy0JCSAgMHg4YTcyZWI1MjRmMjc2Mzk0VUwsIDB4MjY2N2ZjZmE3ZWM4MzYzNVVMLAorLQkvKiAgNDkgKi8gMHg3ZjRjMTczMzQ1ZTg3NTJhVUwsIDB4MDYxYjQ3ZmVlZTcwNzlhNVVMLAorLQkJICAweDI1ZGQ5YWZhOWY4NmZmMzRVTCwgMHgzNzgwY2VmNTQyNWRjODljVUwsCistCS8qICA1MCAqLyAweDFhNDYwMzVhNTEzYmI0ZTlVTCwgMHgzZTFlZjM3OWFjNTc1YWRhVUwsCistCQkgIDB4Yzc4YzVmMWM1ZmEyNGI1MFVMLCAweDMyMWE5Njc2MzRmZDlmMjJVTCwKKy0JLyogIDUxICovIDB4OTQ2NzA3Yjg4MjZlMjdmYVVMLCAweDNkY2E4NGQ2NGM1MDZmZDBVTCwKKy0JCSAgMHhjMTg5MjE4MDc1ZTkxNDM2VUwsIDB4NmQ5Mjg0MTY5YjNiODQ4NFVMLAorLQkvKiAgNTIgKi8gMHgzYTY3ZTg0MDM4M2YyZGRmVUwsIDB4MzNlZWM5YTMwYzRmOWI3NVVMLAorLQkJICAweDNlYzdjODZmYTc4M2VmNDdVTCwgMHgyNmVjNDQ5ZmJhYzlmYmM0VUwsCistCS8qICA1MyAqLyAweDVjMGYzOGNiYTA5YjllN2RVTCwgMHg4MTE2OGNjNzYyYTM0NzhjVUwsCistCQkgIDB4M2UyM2IwZDMwNmZjMTIxY1VMLCAweDVhMjM4YWEwYTVlZmRjZGRVTCwKKy0JLyogIDU0ICovIDB4MWJhMjYxMjFjNGVhNDNmZlVMLCAweDM2ZjhjNzdmN2M4ODMyYjVVTCwKKy0JCSAgMHg4OGZiZWEwYjBhZGNmOTlhVUwsIDB4NWNhOTkzOGVjMjViZWJmOVVMLAorLQkvKiAgNTUgKi8gMHhkNTQzNmE1ZTUxZmNjZGEwVUwsIDB4MWRiYzQ3OTdjMmNkODkzYlVMLAorLQkJICAweDE5MzQ2YTY1ZDMyMjRhMDhVTCwgMHgwZjUwMzRlNDliOWFmNDY2VUwsCistCS8qICA1NiAqLyAweGYyM2MzOTY3YTFlMGI5NmVVTCwgMHhlNThiMDhmYTg2N2E0ZDg4VUwsCistCQkgIDB4ZmIyZmFiYzZhNzM0MTY3OVVMLCAweDJhNzUzODFlYjYwMjY5NDZVTCwKKy0JLyogIDU3ICovIDB4YzgwYTNiZTRjMTk0MjBhY1VMLCAweDY2YjFmNmM2ODFmMmI2ZGNVTCwKKy0JCSAgMHg3Y2Y3MDM2NzYxZTkzMzg4VUwsIDB4MjVhYmJiZDhhNjYwYTRjNFVMLAorLQkvKiAgNTggKi8gMHg5MWVhMTJiYTE0ZmQ1MTk4VUwsIDB4Njg0OTUwZmM0YTNjZmZhOVVMLAorLQkJICAweGY4MjY4NDIxMzBmNWFkMjhVTCwgMHgzZWE5ODhmNzUzMDFhNDQxVUwsCistCS8qICA1OSAqLyAweGM5NzgxMDlhNjk1ZjhjNmZVTCwgMHgxNzQ2ZWI0YTA1MzBjM2YzVUwsCistCQkgIDB4NDQ0ZDZkNzdiNDQ1OTk5NVVMLCAweDc1OTUyYjhjMDU0ZTVjYzdVTCwKKy0JLyogIDYwICovIDB4YTM3MDNmNzkxNWY0ZDZhYVVMLCAweDY2YzM0NjIwMmYyNjQ3ZDhVTCwKKy0JCSAgMHhkMDE0NjlkZjgxMWQ2NDRiVUwsIDB4NzdmZWE0N2Q4MWE1ZDcxZlVMLAorLQkvKiAgNjEgKi8gMHhjNWU5NTI5ZWY1N2NhMzgxVUwsIDB4NmVlZWI0YjljZTJmODgxYVVMLAorLQkJICAweGI2ZTkxYTI4ZTgwMDliZDZVTCwgMHg0YjgwYmUzZTlhZmMzZmVjVUwsCistCS8qICA2MiAqLyAweDdlMzc3M2M1MjZhZWQyYzVVTCwgMHgxYjRhZmNiNDUzYzlhNDlkVUwsCistCQkgIDB4YTkyMGJkZDdiYWZmYjI0ZFVMLCAweDdjNTQ2OTlmMTIyZDQwMGVVTCwKKy0JLyogIDYzICovIDB4ZWY0NmM4ZTE0ZmE5NGJjOFVMLCAweGUwYjA3NGNlMjk1MmVkNWVVTCwKKy0JCSAgMHhiZWE0NTBlMWRiZDg4NWQ1VUwsIDB4NjFiNjg2NDkzMjBmNzEyY1VMLAorLQkvKiAgNjQgKi8gMHg4YTQ4NWY3MzA5Y2NiZGQxVUwsIDB4YmQwNjMyMGQ3ZDRkMWEyZFVMLAorLQkJICAweDI1MjMyOTczMzIyZGJlZjRVTCwgMHg0NDVkYzQ3NThjMTdmNzcwVUwsCistCS8qICA2NSAqLyAweGRiMDQzNDE3N2NjODkzM2NVTCwgMHhlZDZmZTgyMTc1ZWEwNTlmVUwsCistCQkgIDB4MWVmZWJlZmRjMDUzZGIzNFVMLCAweDRhZGJlODY3YzY1ZGFmOTlVTCwKKy0JLyogIDY2ICovIDB4M2FjZDcxYTJhOTA2MDlkZlVMLCAweGU1ZTk5MTg1NmRkMDQwNTBVTCwKKy0JCSAgMHgxZWM2OWI2ODgxNTdjMjNjVUwsIDB4Njk3NDI3ZjY4ODVjZmU0ZFVMLAorLQkvKiAgNjcgKi8gMHhkN2JlN2I5YjY1ZTFhODUxVUwsIDB4YTAzZDI4ZDUyMmM1MzZkZFVMLAorLQkJICAweDI4Mzk5ZDY1OGZkMmI2NDVVTCwgMHg0OWU1YjdlMTdjMjY0MWUxVUwsCistCS8qICA2OCAqLyAweDZmOGMzYTk4NzAwNDU3YTRVTCwgMHg1MDc4ZjBhMjVlYmI2Nzc4VUwsCistCQkgIDB4ZDEzYzNjY2JjMzgyOTYwZlVMLCAweDJlMDAzMjU4YTdkZjg0YjFVTCwKKy0JLyogIDY5ICovIDB4OGFkMWYzOWJlNjI5NmExY1VMLCAweGMxZWVhYTY1MmE1ZmJmYjJVTCwKKy0JCSAgMHgzM2VlMDY3M2ZkMjZmM2NiVUwsIDB4NTkyNTYxNzNhNjlkMmNjY1VMLAorLQkvKiAgNzAgKi8gMHg0MWVhMDdhYTRlMThmYzQxVUwsIDB4ZDlmYzE5NTI3Yzg3YTUxZVVMLAorLQkJICAweGJkYWFjYjgwNTgzMWNhNmZVTCwgMHg0NDViNjUyZGM5MTY2OTRmVUwsCistCS8qICA3MSAqLyAweGNlOTJhM2E3ZjIxNzIzMTVVTCwgMHgxZWRjMjgyZGUxMWI5OTY0VUwsCistCQkgIDB4YTE4MjNhYWZlMDRjMzE0YVVMLCAweDc5MGEyZDk0NDM3Y2Y1ODZVTCwKKy0JLyogIDcyICovIDB4NzFjNDQ3ZmI5M2Y2ZTAwOVVMLCAweDg5MjJhNTY3MjI4NDUyNzZVTCwKKy0JCSAgMHhiZjcwOTAzYjIwNGY1MTY5VUwsIDB4MmY3YTg5ODkxYmEzMTlmZVVMLAorLQkvKiAgNzMgKi8gMHgwMmEwOGViNTc3ZTIxNDBjVUwsIDB4ZWQ5YTRlZDQ0MjdiZGNmNFVMLAorLQkJICAweDUyNTNlYzQ0ZTQzMjNjZDFVTCwgMHgzZTg4MzYzYzE0ZTkzNTViVUwsCistCS8qICA3NCAqLyAweGFhNjZjMTQyNzcxMTBiOGNVTCwgMHgxYWUwMzkxNjEwYTIzMzkwVUwsCistCQkgIDB4MjAzMGJkMTJjOTNmYzJhMlVMLCAweDNlZTE0MTU3OTU1NWM3YWJVTCwKKy0JLyogIDc1ICovIDB4OTIxNGRlM2E2ZDZlN2Q0MVVMLCAweDNjY2RkODg2MDdmMTdlZmVVTCwKKy0JCSAgMHg2NzRmMTI4OGY4ZTExMjE3VUwsIDB4NTY4MjI1MGYzMjlmOTNkMFVMLAorLQkvKiAgNzYgKi8gMHg2Y2YwMGIxMzZkMmUzOTZlVUwsIDB4NmU0Y2Y4NmYxMDE0ZGViZlVMLAorLQkJICAweDU5MzBiMWI1YmZjYzRlODNVTCwgMHgwNDcwNjliNDhhYmExNmI2VUwsCistCS8qICA3NyAqLyAweDBkNGNlNGFiNjliMjA3OTNVTCwgMHhiMjRkYjkxYTk3ZDBmYjllVUwsCistCQkgIDB4Y2RmYTUwZjU0ZTAwZDAxZFVMLCAweDIyMWIxMDg1MzY4YmRkYjVVTCwKKy0JLyogIDc4ICovIDB4ZTdlNTk0NjhiMWUzZDhkMlVMLCAweDUzYzU2NTYzYmQxMjJmOTNVTCwKKy0JCSAgMHhlZWU4YTkwM2UwNjYzZjA5VUwsIDB4NjFlZmE2NjJjYmJlM2Q0MlVMLAorLQkvKiAgNzkgKi8gMHgyY2Y4ZGRkZGRlNmVhYjJhVUwsIDB4OWJmODBhZDUxNDM1ZjIzMVVMLAorLQkJICAweDVkZWFkYWNlYzlmMDQ5NzNVTCwgMHgyOTI3NWI1ZDQxZDI5YjI3VUwsCistCS8qICA4MCAqLyAweGNmZGUwZjA4OTVlYmYxNGZVTCwgMHhiOWFhYjk2YjA1NDkwNWE3VUwsCistCQkgIDB4Y2FlODBkZDlhMWM0MjBmZFVMLCAweDBhNjNiZjJmMTY3M2JiYzdVTCwKKy0JLyogIDgxICovIDB4MDkyZjZlMTE5NThmYmM4Y1VMLCAweDY3MmE4MWU4MDQ4MjJmYWRVTCwKKy0JCSAgMHhjYWM4MzUxNTYwZDUyNTE3VUwsIDB4NmYzZjc3MjJjOGYxOTJmOFVMLAorLQkvKiAgODIgKi8gMHhmOGJhOTBjY2MyZTg5NGI3VUwsIDB4MmM3NTU3YTQzOGZmOWYwZFVMLAorLQkJICAweDg5NGQxZDg1NWFlNTIzNTlVTCwgMHg2OGUxMjIxNTdiNzQzZDY5VUwsCistCS8qICA4MyAqLyAweGQ4N2U1NTcwY2ZiOTE5ZjNVTCwgMHgzZjJjZGVjZDk1Nzk4ZGI5VUwsCistCQkgIDB4MjEyMTE1NDcxMGMwYTJjZVVMLCAweDNjNjZhMTE1MjQ2ZGM1YjJVTCwKKy0JLyogIDg0ICovIDB4Y2JlZGM1NjIyOTRlY2I3MlVMLCAweGJhNzE0M2MzNmEyODBiMTZVTCwKKy0JCSAgMHg5NjEwYzJlZmQ0MDc4YjY3VUwsIDB4NjE0NDczNWQ5NDZhNGIxZVVMLAorLQkvKiAgODUgKi8gMHg1MzZmMTExZWQ3NWIzMzUwVUwsIDB4MDIxMWRiOGMyMDQxZDgxYlVMLAorLQkJICAweGY5M2NiMTAwMGUxMDQxM2NVTCwgMHgxNDlkZmQzYzAzOWU4ODc2VUwsCistCS8qICA4NiAqLyAweGQ0NzlkZGU0NmI2MzE1NWJVTCwgMHhiNjZlMTVlOTNjODM3OTc2VUwsCistCQkgIDB4ZGFmZGU0M2IxZjEzZTAzOFVMLCAweDVmYWZkYTFhMmU0YjBiMzVVTCwKKy0JLyogIDg3ICovIDB4MzYwMGJiZGYxNzE5NzU4MVVMLCAweDM5NzIwNTBiYmUzY2QyYzJVTCwKKy0JCSAgMHg1OTM4OTA2ZGJkZDViZTg2VUwsIDB4MzRmY2U1ZTQzZjliODYwZlVMLAorLQkvKiAgODggKi8gMHg3NWE4YTRjZDQyZDE0ZDAyVUwsIDB4ODI4ZGFiYzUzNDQxZGY2NVVMLAorLQkJICAweDMzZGNhYmVkZDJlMTMxZDNVTCwgMHgzZWJhZDc2ZmI4MTRkMjVmVUwsCistCS8qICA4OSAqLyAweGQ0OTA2ZjU2NmY3MGUxMGZVTCwgMHg1ZDEyZjdhYTUxNjkwZjVhVUwsCistCQkgIDB4NDVhZGIxNmU3NmNlZmNmMlVMLCAweDAxZjc2OGFlYWQyMzI5OTlVTCwKKy0JLyogIDkwICovIDB4MmI2Y2M3N2I2MjQ4ZmViZFVMLCAweDNjZDMwNjI4ZWMzYWFmZmRVTCwKKy0JCSAgMHhjZTFjMGI4MGQ0ZWY0ODZhVUwsIDB4NGMzYmZmMmVhNmY2NmMyM1VMLAorLQkvKiAgOTEgKi8gMHgzZjJlYzQwOTRhZWFlYjVmVUwsIDB4NjFiMTliMjg2ZTM3MmNhN1VMLAorLQkJICAweDVlZWZhOTY2ZGUyYTcwMWRVTCwgMHgyM2IyMDU2NWRlNTVlM2VmVUwsCistCS8qICA5MiAqLyAweGUzMDFjYTUyNzlkNTg1NTdVTCwgMHgwN2IyZDRjZTI3YzI4NzRmVUwsCistCQkgIDB4YTUzMmNkOGE5ZGNmMWQ2N1VMLCAweDJhNTJmZWUyM2YyYmZmNTZVTCwKKy0JLyogIDkzICovIDB4ODYyNGVmYjM3Y2Q4NjYzZFVMLCAweGJiYzdhYzIwZmZiZDc1OTRVTCwKKy0JCSAgMHg1N2I4NWU5YzgyZDM3NDQ1VUwsIDB4N2IzMDUyY2I4NmE2ZWM2NlVMLAorLQkvKiAgOTQgKi8gMHgzNDgyZjBhZDI1MjVlOTFlVUwsIDB4MmNiNjgwNDNkMjhlZGNhMFVMLAorLQkJICAweGFmNGY2ZDA1MmUxYjAwM2FVTCwgMHgxODVmOGMyNTI5NzgxYjBhVUwsCistCS8qICA5NSAqLyAweGFhNDFkZTViZDgwY2UwZDZVTCwgMHg5NDA3YjI0MTY4NTNlOWQ2VUwsCistCQkgIDB4NTYzZWMzNmUzNTdmNGMzYVVMLCAweDRjYzRiOGRkMGUyOTdiY2VVTCwKKy0JLyogIDk2ICovIDB4YTJmYzFhNTJmZmI4NzMwZVVMLCAweDE4MTFmMTZlNjcwNThlMzdVTCwKKy0JCSAgMHgxMGY5YTM2NmNkZGY0ZWUxVUwsIDB4NzJmNGEwYzRhMGI5ZjA5OVVMLAorLQkvKiAgOTcgKi8gMHg4YzE2YzA2ZjY2M2Y0ZWE3VUwsIDB4NjkzYjNhZjc0ZTk3MGZiYVVMLAorLQkJICAweDIxMDJlN2YxZDY5ZWMzNDVVTCwgMHgwYmE1M2NiYzk2OGE4MDg5VUwsCistCS8qICA5OCAqLyAweGNhM2Q5ZGM3ZmVhMTU1MzdVTCwgMHg0YzY4MjRiYjUxNTM2NDkzVUwsCistCQkgIDB4Yjk4ODYzMTQ4NDQwMDZiMVVMLCAweDQwZDJhNzJhYjQ1NGNjNjBVTCwKKy0JLyogIDk5ICovIDB4NTkzNmExYjcxMjU3MDk3NVVMLCAweDkxYjlkNjQ4ZGViZGE2NTdVTCwKKy0JCSAgMHgzMzQ0MDk0YmI2NDMzMGVhVUwsIDB4MDA2YmExMGQxMmVlNTFkMFVMLAorLQkvKiAxMDAgKi8gMHgxOTIyODQ2OGY1ZGU1ZDU4VUwsIDB4MGViMTJmNGMzOGNjMDViMFVMLAorLQkJICAweGExMDM5ZjlkZDU2MDE5OTBVTCwgMHg0NTAyZDRjZTRmZmYwZTBiVUwsCistCS8qIDEwMSAqLyAweGViMjA1NDEwNjgzN2MxODlVTCwgMHhkMGY2NTQ0YzZkZDNiOTNjVUwsCistCQkgIDB4NDA3MjcwNjRjNDE2ZDc0ZlVMLCAweDZlMTVjNjExNGI1MDJlZjBVTCwKKy0JLyogMTAyICovIDB4NGRmMmEzOThjZmIxYTc2YlVMLCAweDExMjU2Yzc0MTlmMmY2YjFVTCwKKy0JCSAgMHg0YTQ5Nzk2MjA2NmU2MDQzVUwsIDB4NzA1YjNhYWI0MTM1NWI0NFVMLAorLQkvKiAxMDMgKi8gMHgzNjVlZjUzNmQ3OTdiMWQ4VUwsIDB4MDAwNzZiZDYyMmRkZjBkYlVMLAorLQkJICAweDNiYmYzM2IwZTA1NzVhODhVTCwgMHgzNzc3YWEwNWM4ZTRjYTRkVUwsCistCS8qIDEwNCAqLyAweDM5Mjc0NWM4NTU3OGRiNWZVTCwgMHg2ZmRhNDE0OWRiYWU1YWUyVUwsCistCQkgIDB4YjFmMGIwMGI4YWRjOTg2N1VMLCAweDA5OTYzNDM3ZDM2ZjFkYTNVTCwKKy0JLyogMTA1ICovIDB4N2U4MjRlOTBhNWRjMzg1M1VMLCAweGNjYjVmNjY0MWYxMzVjYmRVTCwKKy0JCSAgMHg2NzM2ZDg2Yzg3Y2U4ZmNjVUwsIDB4NjI1ZjNjZTI2NjA0MjQ5ZlVMLAorLQkvKiAxMDYgKi8gMHhhZjhhYzgwNTk1MDJmNjNmVUwsIDB4MGMwNWU3MGEyZTM1MTQ2OVVMLAorLQkJICAweDM1MjkyZTljNzY0YjYzMDVVTCwgMHgxYTM5NDM2MGM3ZTIzYWMzVUwsCistCS8qIDEwNyAqLyAweGQ1YzZkNTMyNTExODMyNjRVTCwgMHg2MjA2NWFiZDQzYzJiNzRmVUwsCistCQkgIDB4YjVmYmY1ZDAzYjk3M2Y5YlVMLCAweDEzYTNkYTM2NjEyMDZlNWVVTCwKKy0JLyogMTA4ICovIDB4YzZiZDU4Mzc3MjVkOTRlNVVMLCAweDE4ZTMwOTEyMjA1MDE2YzVVTCwKKy0JCSAgMHgyMDg4Y2UxNTcwMDMzYzY4VUwsIDB4N2ZiYTFmNDk1YzgzNzk4N1VMLAorLQkvKiAxMDkgKi8gMHg1YThjNzQyM2YyZjkwNzlkVUwsIDB4MTczNTE1N2IzNDAyM2ZjNVVMLAorLQkJICAweGU0ZjliNDlhZDJmYWIzNTFVTCwgMHg2NjkxZmY3MmM4NzhlMzNjVUwsCistCS8qIDExMCAqLyAweDEyMmMyYWRlZGM1ZWZmM2VVTCwgMHhmOGRkNGJmMWQ4OTU2Y2Y0VUwsCistCQkgIDB4ZWI4NjIwNWQ5ZTllNWJkYVVMLCAweDA0OWI5MmI5ZDk3NWM3NDNVTCwKKy0JLyogMTExICovIDB4YTUzNzk3MzBiMGY2YzA1YVVMLCAweDcyYTBmZmFjYzZmM2E1NTNVTCwKKy0JCSAgMHhiMDAzMmMzNGIyMGRjZDZkVUwsIDB4NDcwZTlkYmM4OGQ1MTY0YVVMLAorLQkvKiAxMTIgKi8gMHhiMTljZjEwY2EyMzdjMDQ3VUwsIDB4YjY1NDY2NzExZjZjODFhMlVMLAorLQkJICAweGIzMzIxYmQxNmRkODBiNDNVTCwgMHg0OGMxNGY2MDBjNWZiZThlVUwsCistCS8qIDExMyAqLyAweDY2NDUxYzI2NGFhNmM4MDNVTCwgMHhiNjZlMzkwNGE0ZmE3ZGE2VUwsCistCQkgIDB4ZDQ1ZjE5YjBiMzEyODM5NVVMLCAweDMxNjAyNjI3YzNjOWJjMTBVTCwKKy0JLyogMTE0ICovIDB4MzEyMGRjNDgzMmU0ZTEwZFVMLCAweGViMjBjNDY3NTZjNzE3ZjdVTCwKKy0JCSAgMHgwMGY1MmUzZjY3MjgwMjk0VUwsIDB4NTY2ZDRmYzE0NzMwYzUwOVVMLAorLQkvKiAxMTUgKi8gMHg3ZTNhNWQ0MGZkODM3MjA2VUwsIDB4YzFlOTI2ZGM3MTU5NTQ3YVVMLAorLQkJICAweDIxNjczMGZiYTY4ZDYwOTVVTCwgMHgyMmU4YzM4NDNmNjljZWE3VUwsCistCS8qIDExNiAqLyAweDMzZDA3NGU4OTMwZTRiMmJVTCwgMHhiNmU0MzUwZTg0ZDE1ODE2VUwsCistCQkgIDB4NTUzNGMyNmFkNmJhMjM2NVVMLCAweDc3NzNjMTJmODlmMWYzZjNVTCwKKy0JLyogMTE3ICovIDB4OGNiYTQwNGRhNTc5NjJhYVVMLCAweDViOTg5N2E4MTk5OWNlNTZVTCwKKy0JCSAgMHg1MDhlODYyZjEyMTY5MmZjVUwsIDB4M2E4MTkwN2ZhMDkzYzI5MVVMLAorLQkvKiAxMTggKi8gMHgwZGRlZDBmZjQ3MjVhNTEwVUwsIDB4MTBkOGNjMTA2NzNmYzUwM1VMLAorLQkJICAweDViOWQxNTFjOWYxZjRlODlVTCwgMHgzMmE1YzFkNWNiMDlhNDRjVUwsCistCS8qIDExOSAqLyAweDFlMGFhNDQyYjkwNTQxZmJVTCwgMHg1Zjg1ZWI3Y2MxYjQ4NWRiVUwsCistCQkgIDB4YmVlNTk1Y2U4YTlkZjJlNVVMLCAweDI1ZTQ5NmM3MjI0MjIyMzZVTCwKKy0JLyogMTIwICovIDB4NWVkZjNjNDZjZDBmZTViOVVMLCAweDM0ZTc1YTdlZDJhNDMzODhVTCwKKy0JCSAgMHhlNDg4ZGUxMWQ3NjFlMzUyVUwsIDB4MGU4NzhhMDFhMDg1NTQ1Y1VMLAorLQkvKiAxMjEgKi8gMHhiYTQ5M2M3N2UwMjFiYjA0VUwsIDB4MmI0ZDE4NDNjN2RmODk5YVVMLAorLQkJICAweDllYTM3YTQ4N2FlODBkNjdVTCwgMHg2N2E5OTU4MDExZTQxNzk0VUwsCistCS8qIDEyMiAqLyAweDRiNTgwNTFhNjY5N2IwNjVVTCwgMHg0N2UzM2Y3ZDhkNmJhNmQ0VUwsCistCQkgIDB4YmI0ZGE4ZDQ4M2NhNDZjMVVMLCAweDY4YmVjYWExODFjMmRiMGRVTCwKKy0JLyogMTIzICovIDB4OGQ4OTgwZTkwYjk4OWFhNVVMLCAweGY5NWViMTRhMmM5M2M5OWJVTCwKKy0JCSAgMHg1MWM2YzdjNDc5NmU3M2EyVUwsIDB4NmUyMjgzNjNiNWVmYjU2OVVMLAorLQkvKiAxMjQgKi8gMHhjNmJiYzBiMDJkZDYyNGM4VUwsIDB4Nzc3ZWI0N2RlYzgxNzBlZVVMLAorLQkJICAweDNjZGUxNWEwMDRjZmFmYTlVTCwgMHgxZGM2YmMwODcxNjBiZjliVUwsCistCS8qIDEyNSAqLyAweDJlMDdlMDQzZWVjMzQwMDJVTCwgMHgxOGU5ZmM2NzdhNjhkYzdmVUwsCistCQkgIDB4ZDhkYTAzMTg4YmQxNWI5YVVMLCAweDQ4ZmJjM2JiMDA1NjgyNTNVTCwKKy0JLyogMTI2ICovIDB4NTc1NDdkNGNmYjY1NGNlMVVMLCAweGQzNTY1YjgyYTA1OGUyYWRVTCwKKy0JCSAgMHhmNjNlYWYwYmJmMTU0NDc4VUwsIDB4NDc1MzFlZjExNGRmYmIxOFVMLAorLQkvKiAxMjcgKi8gMHhlMWVjNjMwYTQyNzhjNTg3VUwsIDB4NTUwN2Q1NDZjYThlODNmM1VMLAorLQkJICAweDg1ZTEzNWM2M2FkYzBjMmJVTCwgMHgwYWE3ZWZhODU2ODI4NDRlVUwsCistCS8qIDEyOCAqLyAweDcyNjkxYmE4YjNlMWY2MTVVTCwgMHgzMmI0ZTk3MDFmYmUzZmZhVUwsCistCQkgIDB4OTdiNmQ5MmUzOWJiNzg2OFVMLCAweDJjZmU1M2RlYTAyZTM5ZThVTCwKKy0JLyogMTI5ICovIDB4Njg3MzkyY2Q4NWNkNTJiMFVMLCAweDI3ZmY2NmM5MTBlMjk4MzFVTCwKKy0JCSAgMHg5NzEzNDU1NmE5ODMyZDA2VUwsIDB4MjY5YmIwMzYwYTg0ZjhhMFVMLAorLQkvKiAxMzAgKi8gMHg3MDZlNTU0NTc2NDNmODVjVUwsIDB4MzczNGE0OGM5YjU5N2QxYlVMLAorLQkJICAweDdhZWU5MWU4YzZlZmE0NzJVTCwgMHg1Y2Q2YWJjMTk4YTlkOWUwVUwsCistCS8qIDEzMSAqLyAweDBlMDRkZTA2Y2IzY2U0MWFVTCwgMHhkOGM2ZWI4OTM0MDJlMTM4VUwsCistCQkgIDB4OTA0NjU5YmI2ODZlMzc3MlVMLCAweDcyMTVjMzcxNzQ2YmE4YzhVTCwKKy0JLyogMTMyICovIDB4ZmQxMmE5N2VlYWU0YTJkOVVMLCAweDk1MTRiNzUxNjM5NGYyYzVVTCwKKy0JCSAgMHgyNjZmZDU4MDkyMDhmMjk0VUwsIDB4NWM4NDcwODU2MTlhMjZiOVVMLAorLQkvKiAxMzMgKi8gMHg1Mjk4NTQxMGZlZDY5NGVhVUwsIDB4M2M5MDViOTM0YTJlZDI1NFVMLAorLQkJICAweDEwYmI0NzY5MmQzYmU0NjdVTCwgMHgwNjNiM2QyZDY5ZTVlOWUxVUwsCistCS8qIDEzNCAqLyAweDQ3MjcyNmVlZGRhNTdkZWJVTCwgMHhlZmI2YzRhZTEwZjQxODkxVUwsCistCQkgIDB4MmIxNjQxOTE3YjMwNzYxNFVMLCAweDExN2M1NTRmYzRmNDViN2NVTCwKKy0JLyogMTM1ICovIDB4YzA3Y2YzMTE4ZjlkODgxMlVMLCAweDAxZGJkODIwNTAwMTc5MzlVTCwKKy0JCSAgMHhkN2U4MDNmNDE3MWIyODI3VUwsIDB4MTAxNWU4NzQ4N2QyMjVlYVVMLAorLQkvKiAxMzYgKi8gMHhjNThkZTNmZWQyM2FjYzRkVUwsIDB4NTBkYjkxYzI5NGE3YmUyZFVMLAorLQkJICAweDBiOTRkNDNkMWM5Y2Y0NTdVTCwgMHg2YjE2NDBmYTZlMzc1MjRhVUwsCistCS8qIDEzNyAqLyAweDY5MmYzNDZjNWZkYTBkMDlVTCwgMHgyMDBiMWM1OWZhNGQzMTUxVUwsCistCQkgIDB4YjhjNDZmNzYwNzc3YTI5NlVMLCAweDRiMzgzOTVmM2ZmZGZiY2ZVTCwKKy0JLyogMTM4ICovIDB4MThkMjVlMDBiZTU0ZDY3MVVMLCAweDYwZDUwNTgyYmVjOGFiYTZVTCwKKy0JCSAgMHg4N2FkOGYyNjNiNzhiOTgyVUwsIDB4NTBmZGY2NGU5Y2RhMDQzMlVMLAorLQkvKiAxMzkgKi8gMHg5MGY1NjdhYWM1NzhkY2YwVUwsIDB4ZWYxZTliMGVmMmEzMTMzYlVMLAorLQkJICAweDBlZWJiYTkyNDJkOWRlNzFVTCwgMHgxNTQ3M2M5YmYwMzEwMWM3VUwsCistCS8qIDE0MCAqLyAweDdjNzdlOGFlNTZiNzgwOTVVTCwgMHhiNjc4ZTc2NjZlNmYwNzhlVUwsCistCQkgIDB4MmRhMGI5NjE1MzQ4YmExZlVMLCAweDdjZjkzMWMxZmY3MzNmMGJVTCwKKy0JLyogMTQxICovIDB4MjZiMzU3ZjUwYTBhMzY2Y1VMLCAweGU5NzA4Y2Y0MmI4N2Q3MzJVTCwKKy0JCSAgMHhjMTNhZWVhNWY5MWNiMmMwVUwsIDB4MzVkOTBjOTkxMTQzYmI0Y1VMLAorLQkvKiAxNDIgKi8gMHg0N2MxYzQwNGE5YTBkOWRjVUwsIDB4NjU5ZTU4NDUxOTcyZDI1MVVMLAorLQkJICAweDM4NzVhOGM0NzNiMzhjMzFVTCwgMHgxZmJkOWVkMzc5NTYxZjI0VUwsCistCS8qIDE0MyAqLyAweDExZmFiYzZmZDQxZWMyOGRVTCwgMHg3ZWY4ZGZlM2NkMmEyZGNhVUwsCistCQkgIDB4NzJlNzNiNWQ4YzQwNDU5NVVMLCAweDYxMzVmYTQ5NTRiNzJmMjdVTCwKKy0JLyogMTQ0ICovIDB4Y2NmYzMyYTJkZTI0YjY5Y1VMLCAweDNmNTU2OThjMWYwOTVkODhVTCwKKy0JCSAgMHhiZTMzNTBlZDVhYzNmOTI5VUwsIDB4NWU5YmY4MDZjYTQ3N2VlYlVMLAorLQkvKiAxNDUgKi8gMHhlOWNlOGZiNjNjMzA5ZjY4VUwsIDB4NTM3NmY2MzU2NWUxZjlmNFVMLAorLQkJICAweGQxYWZjZmIzNWE2MzkzZjFVTCwgMHg2NjMyYTFlZGU1NjIzNTA2VUwsCistCS8qIDE0NiAqLyAweDBiN2Q2YzM5MGMyZGVkNGNVTCwgMHg1NmNiMzI4MWRmMDRjYjFmVUwsCistCQkgIDB4NjYzMDVhMTI0OWVjYzNjN1VMLCAweDVkNTg4YjYwYTM4Y2E3MmFVTCwKKy0JLyogMTQ3ICovIDB4YTZlY2JmNzhlOGU1ZjQyZFVMLCAweDg2ZWViNDRiM2M4YTNlZWNVTCwKKy0JCSAgMHhlYzIxOWM0OGZiZDIxNjA0VUwsIDB4MWFhZjFhZjUxN2MzNjczMVVMLAorLQkvKiAxNDggKi8gMHhjMzA2YTI4MzY3NjliZGU3VUwsIDB4MjA4MjgwNjIyYjFlMmFkYlVMLAorLQkJICAweDgwMjdmNTFmZmJmZjk0YTZVTCwgMHg3NmNmYTFjZTExMjRmMjZiVUwsCistCS8qIDE0OSAqLyAweDE4ZWIwMDU2MjQyMmFiYjZVTCwgMHhmMzc3YzRkNThmOGMyOWMzVUwsCistCQkgIDB4NGRiYmMyMDdmNTMxNTYxYVVMLCAweDAyNTNiN2YwODIxMjhhMjdVTCwKKy0JLyogMTUwICovIDB4M2QxZjA5MWNiNjJjMTdlMFVMLCAweDQ4NjBlMWFiZDY0NjI4YTlVTCwKKy0JCSAgMHg1MmQxNzQzNjMwOWQ0MjUzVUwsIDB4MzU2Zjk3ZTEzZWZhZTU3NlVMLAorLQkvKiAxNTEgKi8gMHhkMzUxZTExYWExNTA1MzViVUwsIDB4M2U2YjQ1YmIxZGQ4NzhjY1VMLAorLQkJICAweDBjNzc2MTI4YmVkOTJjOThVTCwgMHgxZDM0YWU5MzAzMjg4NWI4VUwsCistCS8qIDE1MiAqLyAweDRiYTA0ODhjYTg1YmE0YzNVTCwgMHg5ODUzNDhjMzNjOWNlNmNlVUwsCistCQkgIDB4NjYxMjRjNmY5N2JkYTc3MFVMLCAweDBmODFhMDI5MDY1NDEyNGFVTCwKKy0JLyogMTUzICovIDB4OWVkMDljYTY1NjliODZmZFVMLCAweDgxMTAwOWZkMThhZjlhMmRVTCwKKy0JCSAgMHhmZjA4ZDAzZjkzZDhjMjBhVUwsIDB4NTJhMTQ4MTk5ZmFlZjI2YlVMLAorLQkvKiAxNTQgKi8gMHgzZTAzZjlkYzJkOGQxYjczVUwsIDB4NDIwNTgwMTg3Mzk2MWE3MFVMLAorLQkJICAweGMwZDk4N2YwNDFhMzU5NzBVTCwgMHgwN2FhMWYxNWExYzBkNTQ5VUwsCistCS8qIDE1NSAqLyAweGRmZDQ2Y2UwOGNkMjcyMjRVTCwgMHg2ZDBhMDI0ZjkzNGU0MjM5VUwsCistCQkgIDB4ODA4YTdhNjM5OTg5N2I1OVVMLCAweDBhNDU1NmU5ZTEzZDk1YTJVTCwKKy0JLyogMTU2ICovIDB4ZDIxYTk5MWZlOWMxMzA0NVVMLCAweDliMGU4NTQ4ZmU3NzUxYjhVTCwKKy0JCSAgMHg1ZGE2NDNjYjRiZjMwMDM1VUwsIDB4NzdkYjI4ZDYzOTQwZjcyMVVMLAorLQkvKiAxNTcgKi8gMHhmYzVlZWI2MTRhZGM5MDExVUwsIDB4NTIyOTQxOWFlOGM0MTFlYlVMLAorLQkJICAweDllYzNlNzc4N2QxZGNmNzRVTCwgMHgzNDBkMDUzZTIxNmU0Y2I1VUwsCistCS8qIDE1OCAqLyAweGNhYzdhZjM5YjQ4ZGYyYjRVTCwgMHhjMGZhZWMyODcxYTEwYTk0VUwsCistCQkgIDB4MTQwYTY5MjQ1Y2E1NzVlZFVMLCAweDBjZjFjMzcxMzQyNzNhNGNVTCwKKy0JLyogMTU5ICovIDB4YzhlZTMwNmFjMjI0YjhhNVVMLCAweDU3ZWFlZTdjY2I0OTMwYjBVTCwKKy0JCSAgMHhhMWU4MDZiZGFhY2JlNzRmVUwsIDB4N2Q5YTYyNzQyZWViNjU3ZFVMLAorLQkvKiAxNjAgKi8gMHg5ZWI2YjZlZjU0NmM0ODMwVUwsIDB4ODg1Y2NhMWZkZGIzNmUyZVVMLAorLQkJICAweGU2YjlmMzgzZWYwZDcxMDVVTCwgMHg1ODY1NGZlZjlkMmUwNDEyVUwsCistCS8qIDE2MSAqLyAweGE5MDVjNGZmYmUwZThlMjZVTCwgMHg5NDJkZTVkZjliMzE4MTZlVUwsCistCQkgIDB4NDk3ZDcyM2Y4MDJlODhlMVVMLCAweDMwNjg0ZGVhNjAyZjQwOGRVTCwKKy0JLyogMTYyICovIDB4MjFlNWEyNzhhM2U2Y2IzNFVMLCAweGFlZmI2ZTZmNWIxNTFkYzRVTCwKKy0JCSAgMHhiMzBiOGUwNDlkNzdjYTE1VUwsIDB4MjhjM2M5Y2Y1M2I5ODk4MVVMLAorLQkvKiAxNjMgKi8gMHgyODdmYjcyMTU1NmNkZDJhVUwsIDB4MGQzMTdjYTg5NzAyMjI3NFVMLAorLQkJICAweDc0NjhjNzQyM2E1NDMyNThVTCwgMHg0YTdmMTE0NjRlYjU2NDJmVUwsCistCS8qIDE2NCAqLyAweGEyMzdhNDc3NGQxOTNhYTZVTCwgMHhkODY1OTg2ZWE5MjEyOWExVUwsCistCQkgIDB4MjRjNTE1ZWNmODdjMWE4OFVMLCAweDYwNDAwMzU3NWYzOWY1ZWJVTCwKKy0JLyogMTY1ICovIDB4NDdiOWYxODk1NzBhOWIyN1VMLCAweDJiOThjZWRlNDY1ZTRiNzhVTCwKKy0JCSAgMHgwMjZkZjU1MWRiYjg1YzIwVUwsIDB4NzRmY2Q5MTA0N2UyMTkwMVVMLAorLQkvKiAxNjYgKi8gMHgxM2UyYTkwYTIzYzFiZmEzVUwsIDB4MGNiMDA3NGU0Nzg1MTlmNlVMLAorLQkJICAweDVmZjFjYmJlM2FmNmNmNDRVTCwgMHg2N2ZlNTQzOGJlODEyZGJlVUwsCistCS8qIDE2NyAqLyAweGQxM2NmNjRmYTQwZjA1YjBVTCwgMHgwNTRkZmIyZjMyMjgzNzg3VUwsCistCQkgIDB4NDE3MzkxNWI3ZjBkMmFlYVVMLCAweDQ4MmYxNDRmMWY2MTBkNGVVTCwKKy0JLyogMTY4ICovIDB4ZjYyMTAyMDFiNDdmODIzNFVMLCAweDVkMGFlMTkyOWU3MGI5OTBVTCwKKy0JCSAgMHhkY2Q3ZjQ1NWIwNDk1NjdjVUwsIDB4N2U5M2QwZjFmMDkxNmYwMVVMLAorLQkvKiAxNjkgKi8gMHhkZDc5Y2JmMThhN2RiNGZhVUwsIDB4YmU4MzkxYmY2Zjc0YzYyZlVMLAorLQkJICAweDAyNzE0NWQxNGI4MjkxYmRVTCwgMHg1ODVhNzNlYTJjYmYxNzA1VUwsCistCS8qIDE3MCAqLyAweDQ4NWNhMDNlOTI4YTBkYjJVTCwgMHgxMGZjMDFhNTc0Mjg1N2U3VUwsCistCQkgIDB4MmY0ODJlZGJkNmQ1NTFhN1VMLCAweDBmMDQzM2I1MDQ4ZmRiOGFVTCwKKy0JLyogMTcxICovIDB4NjBkYTJlOGRkN2RjNjI0N1VMLCAweDg4YjRjOWQzOGNkNDgxOWFVTCwKKy0JCSAgMHgxMzAzM2FjMDAxZjY2Njk3VUwsIDB4MjczYjI0ZmUzYjM2N2Q3NVVMLAorLQkvKiAxNzIgKi8gMHhjNmU4ZjY2YTMxYjNiOWQ0VUwsIDB4MjgxNTE0YTQ5NGRmNDlkNVVMLAorLQkJICAweGQxNzI2ZmRmYzhiMjNkYTdVTCwgMHg0YjNhZTdkMTAzZGVlNTQ4VUwsCistCS8qIDE3MyAqLyAweGM2MjU2ZTE5Y2U0YjlkN2VVTCwgMHhmZjVjNWNmMTg2ZTNjNjFjVUwsCistCQkgIDB4YWNjNjNjYTM0YjhlYzE0NVVMLCAweDc0NjIxODg4ZmVlNjY1NzRVTCwKKy0JLyogMTc0ICovIDB4OTU2ZjQwOTY0NTI5MGExZVVMLCAweGVmMGJmOGUzMjYzYTk2MmVVTCwKKy0JCSAgMHhlZDZhNTBlYjVlYzI2NDdiVUwsIDB4MDY5NDI4M2E5ZGNhNzUwMlVMLAorLQkvKiAxNzUgKi8gMHg3NjliOTYzNjQzYTJkY2QxVUwsIDB4NDJiN2M4ZWEwOWZjNTM1M1VMLAorLQkJICAweDRmMDAyYWVlMTMzOTdlYWJVTCwgMHg2MzAwNWUyYzE5YjdkNjNhVUwsCistCS8qIDE3NiAqLyAweGNhNjczNmRhNjMwMjNiZWFVTCwgMHg5NjZjN2Y2ZGIxMmE5OWI3VUwsCistCQkgIDB4YWNlMDkzOTBjNTM3YzVlMVVMLCAweDBiNjk2MDYzYTFhYTg5ZWVVTCwKKy0JLyogMTc3ICovIDB4ZWJiMDNlOTcyODhjNTZlNVVMLCAweDQzMmE5ZjlmOTM4YzhiZThVTCwKKy0JCSAgMHhhNmE1YTkzZDViNzE3ZjcxVUwsIDB4MWE1ZmI0YzNlMThmOWQ5N1VMLAorLQkvKiAxNzggKi8gMHgxYzk0ZTdhZDFjNjBjZGNlVUwsIDB4ZWUyMDJhNDNmYzAyYzRhMFVMLAorLQkJICAweDhkYWZlNGQ4NjdjNDZhMjBVTCwgMHgwYTEwMjYzYzhhYzI3YjU4VUwsCistCS8qIDE3OSAqLyAweGQwZGVhOWRmZTQ0MzJhNGFVTCwgMHg4NTZhZjg3YmJlOTI3N2M1VUwsCistCQkgIDB4Y2U4NDcyYWNjMjEyYzcxYVVMLCAweDZmMTUxYjZkOWJiYjFlOTFVTCwKKy0JLyogMTgwICovIDB4MjY3NzZjNTI3Y2VlZDU2YVVMLCAweDdkMjExY2I3ZmJmOGZhZWNVTCwKKy0JCSAgMHgzN2FlNjZhNmZkNDYwOWNjVUwsIDB4MWY4MWI3MDJkMjc3MGM0MlVMLAorLQkvKiAxODEgKi8gMHgyZmIwYjA1N2VhYzU4MzkyVUwsIDB4ZTFkZDg5ZmUyOTc0NGU5ZFVMLAorLQkJICAweGM5NjRmOGViMTdiZWI0ZjhVTCwgMHgyOTU3MTA3M2M5YTJkNDFlVUwsCistCS8qIDE4MiAqLyAweGE5NDhhMTg5ODFjMGUyNTRVTCwgMHgyZGY2MzY5YjY1YjIyODMwVUwsCistCQkgIDB4YTMzZWIyZDc1ZmNmZDNjNlVMLCAweDA3OGNkNmVjNDE5OWEwMWZVTCwKKy0JLyogMTgzICovIDB4NGE1ODRhNDFhZDkwMGQyZlVMLCAweDMyMTQyYjc4ZTJjNzRjNTJVTCwKKy0JCSAgMHg2OGM0ZTgzMzg0MzFjOTc4VUwsIDB4N2Y2OWVhOTAwODY4OWZjMlVMLAorLQkvKiAxODQgKi8gMHg1MmYyYzgxZTQ2YTM4MjY1VUwsIDB4ZmQ3ODA3MmQwNGE4MzJmZFVMLAorLQkJICAweDhjZDdkNWZhMjUzNTllOTRVTCwgMHg0ZGU3MWI3NDU0Y2MyOWQyVUwsCistCS8qIDE4NSAqLyAweDQyZWI2MGFkMWVkYTZhYzlVTCwgMHgwYWFkMzdkZmRiYzA5YzNhVUwsCistCQkgIDB4ODEwMDRiNzFlMzNjYzE5MVVMLCAweDQ0ZTZiZTM0NTEyMjgwM2NVTCwKKy0JLyogMTg2ICovIDB4MDNmZTgzODhiYTE5MjBkYlVMLCAweGY1ZDU3YzMyMTUwZGIwMDhVTCwKKy0JCSAgMHg0OWM4YzQyODFhZjYwYzI5VUwsIDB4MjFlZGI1MThkZTcwMWFlZVVMLAorLQkvKiAxODcgKi8gMHg3ZmI2M2U0MThmMDZkYzk5VUwsIDB4YTQ0NjBkOTljMTY2ZDdiOFVMLAorLQkJICAweDI0ZGQ1MjQ4Y2U1MjBhODNVTCwgMHg1ZWMzYWQ3MTJiOTI4MzU4VUwsCistCS8qIDE4OCAqLyAweDE1MDIyYTVmYmQxNzkzMGZVTCwgMHhhNGY2NGE3N2Q4MjU3MGUzVUwsCistCQkgIDB4MTJiYzhkNjkxNTc4MzcxMlVMLCAweDQ5ODE5NGMwZmM2MjBhYmJVTCwKKy0JLyogMTg5ICovIDB4MzhhMmQ5ZDI1NTY4NmM4MlVMLCAweDc4NWM2YmQ5MTkzZTIxZjBVTCwKKy0JCSAgMHhlNGQ1YzgxYWIyNGE1NDg0VUwsIDB4NTYzMDc4NjBiMmUyMDk4OVVMLAorLQkvKiAxOTAgKi8gMHg0MjlkNTVmNzhiNGQ3NGM0VUwsIDB4MjJmMTgzNDY0MzM1MDEzMVVMLAorLQkJICAweDFlNjBjMjQ1OThjNzFmZmZVTCwgMHg1OWYyZjAxNDk3OTk4M2VmVUwsCistCS8qIDE5MSAqLyAweDQ2YTQ3ZDU2ZWI0OTRhNDRVTCwgMHgzZTIyYTg1NGQ2MzZhMThlVUwsCistCQkgIDB4YjM0NmUxNTI3NDQ5MWMzYlVMLCAweDJjZWFmZDRlNTM5MGNkZTdVTCwKKy0JLyogMTkyICovIDB4YmE4YTg1MzhiZTBkNjY3NVVMLCAweDRiOTA3NGJiNTA4MThlMjNVTCwKKy0JCSAgMHhjYmRhYjg5MDg1ZDMwNGMzVUwsIDB4NjFhMjRmZTBlNTYxOTJjNFVMLAorLQkvKiAxOTMgKi8gMHhjYjc2MTVlNmRiNTI1YmNiVUwsIDB4ZGQ3ZDhjMzVhNTY3ZTRjYVVMLAorLQkJICAweGU2YjQxNTNhY2FmY2RkNjlVTCwgMHgyZDY2OGUwOTdmM2M5NzY2VUwsCistCS8qIDE5NCAqLyAweGE1N2U3ZTI2NWNlNTVlZjBVTCwgMHg1ZDlmNGU1MjdjZDRiOTY3VUwsCistCQkgIDB4ZmJjODM2MDY0OTJmZDFlNVVMLCAweDA5MGQ1MmJlYjdjM2Y3YWVVTCwKKy0JLyogMTk1ICovIDB4MDliOTUxNWExZTdiNGQ3Y1VMLCAweDFmMjY2YTI1OTlkYTQ0YzBVTCwKKy0JCSAgMHhhMWM0OTU0OGUyYzU1NTA0VUwsIDB4N2VmMDQyODcxMjZmMTVjY1VMLAorLQkvKiAxOTYgKi8gMHhmZWQxNjU5ZGJkMzBlZjE1VUwsIDB4OGI0YWI5ZWVjNGUwMjc3YlVMLAorLQkJICAweDg4NGQ2MjM2YTVkZjMyOTFVTCwgMHgxZmQ5NmVhNmJmNWNmNzg4VUwsCistCS8qIDE5NyAqLyAweDQyYTE2MTk4MWYxOTBkOWFVTCwgMHg2MWQ4NDk1MDdlNjA1MmMxVUwsCistCQkgIDB4OWZlMTEzYmYyODVhMmNkNVVMLCAweDdjMjJkNjc2ZGJhZDg1ZDhVTCwKKy0JLyogMTk4ICovIDB4ODJlNzcwZWQyYmZiZDI3ZFVMLCAweDRjMDViMmVjZTk5NmY1YTVVTCwKKy0JCSAgMHhjZDQwYTljMmIwOTAwMTUwVUwsIDB4NTg5NTMxOTIxM2Q5YmY2NFVMLAorLQkvKiAxOTkgKi8gMHhlN2NjNWQ3MDNmZWEyZTA4VUwsIDB4YjUwYzQ5MTI1OGUyMTg4Y1VMLAorLQkJICAweGNjZTMwYmFhNDgyMDViZjBVTCwgMHg1MzdjNjU5Y2NmYTMyZDYyVUwsCistCS8qIDIwMCAqLyAweDM3YjY2MjNhOThjZmMwODhVTCwgMHhmZTliZWQxZmE0ZDZhY2E0VUwsCistCQkgIDB4MDRkMjliOGU1NmE4ZDFiMFVMLCAweDcyNWY3MWM0MGI1MTk1NzVVTCwKKy0JLyogMjAxICovIDB4MjhjN2Y4OWNkMDMzOWNlNlVMLCAweDgzNjdiMTQ0NjlkZGMxOGJVTCwKKy0JCSAgMHg4ODNhZGE4M2E2YTE2NTJjVUwsIDB4NTg1ZjE5NzQwMzRkNmMxN1VMLAorLQkvKiAyMDIgKi8gMHg4OWNmYjI2NmYxYjE5MTg4VUwsIDB4ZTYzYjQ4NjNlN2MzNTIxN1VMLAorLQkJICAweGQ4OGM5ZGE2YjRjMDUyNmFVTCwgMHgzZTAzNWM5ZGYwOTU0NjM1VUwsCistCS8qIDIwMyAqLyAweGRkOWQ1NDEyZmI0NWRlOWRVTCwgMHhkZDY4NDUzMmU0Y2ZmNDBkVUwsCistCQkgIDB4NGI1Yzk5OWIxNTFkNjcxY1VMLCAweDJkOGMyY2M4MTFlN2Y2OTBVTCwKKy0JLyogMjA0ICovIDB4N2Y1NGJlMWQ5MDA1NWQ0MFVMLCAweGE0NjRjNWRmNDY0YWFmNDBVTCwKKy0JCSAgMHgzMzk3OTYyNGYwZTkxN2JlVUwsIDB4MmMwMThkYzUyNzM1NmIzMFVMLAorLQkvKiAyMDUgKi8gMHhhNTQxNTAyNGUzMzBiM2Q0VUwsIDB4NzNmZjNkOTY2OTE2NTJkM1VMLAorLQkJICAweDk0ZWM0MmM0ZWY5YjU5ZjFVTCwgMHgwNzQ3MjAxNjE4ZDA4ZTVhVUwsCistCS8qIDIwNiAqLyAweDRkNmNhNDhhY2E0MTFjNTNVTCwgMHg2NjQxNWYyZmNmYTY2MTE5VUwsCistCQkgIDB4OWM0ZGQ0MDA1MWUyMjdmZlVMLCAweDU5ODEwYmMwOWEwMmY3ZWJVTCwKKy0JLyogMjA3ICovIDB4MmE3ZWIxNzFiM2RjMTAxZFVMLCAweDQ0MWM1YWI5OWZmZWY2OGVVTCwKKy0JCSAgMHgzMjAyNWM5YjkzYjM1OWVhVUwsIDB4NWU4Y2UwYTcxZTlkMTEyZlVMLAorLQkvKiAyMDggKi8gMHhiZmNjY2I5MjQyOTUwM2ZkVUwsIDB4ZDI3MWJhNzUyZjA5NWQ1NVVMLAorLQkJICAweDM0NWVhZDVlOTcyZDA5MWVVTCwgMHgxOGM4ZGYxMWE4MzEwM2JhVUwsCistCS8qIDIwOSAqLyAweDkwY2Q5NDlhOWFlZDBmNGNVTCwgMHhjNWQxZjRjYjY2NjBlMzdlVUwsCistCQkgIDB4YjhjYWM1MmQ1NmM1MmUwYlVMLCAweDZlNDJlNDAwYzU4MDhlMGRVTCwKKy0JLyogMjEwICovIDB4YTNiNDY5NjZlZWFlZmQyM1VMLCAweDBjNGYxZjBiZTM5ZWNkY2FVTCwKKy0JCSAgMHgxODlkYzhjOWQ2ODNhNTFkVUwsIDB4NTFmMjdmMDU0YzA5MzUxYlVMLAorLQkvKiAyMTEgKi8gMHg0YzQ4N2NjZDJhMzIwNjgyVUwsIDB4NTg3ZWE5NWJiM2RmMWM5NlVMLAorLQkJICAweGM4Y2NmNzllNTU1Y2I4ZThVTCwgMHg1NDdkYzgyOWEyMDZkNzNkVUwsCistCS8qIDIxMiAqLyAweGI4MjJhNmNkODBjMzliMDZVTCwgMHhlOTZkNTQ3MzIwMDBkNGM2VUwsCistCQkgIDB4Mjg1MzViNmY5MTQ2M2I0ZFVMLCAweDIyOGY0NjYwZTI0ODZlMWRVTCwKKy0JLyogMjEzICovIDB4OTg3OTk1MzhkZThkM2FiZlVMLCAweDhjZDgzMzAwNDVlYmNhNmVVTCwKKy0JCSAgMHg3OTk1MmEwMDgyMjFlNzM4VUwsIDB4NDMyMmUxYTc1MzVjZDJiYlVMLAorLQkvKiAyMTQgKi8gMHhiMTE0YzExODE5ZDE4MDFjVUwsIDB4MjAxNmU0ZDg0ZjNmNWVjN1VMLAorLQkJICAweGRkMGUyZGY0MDkyNjBmNGNVTCwgMHg1ZWMzNjJjMGFlNWY3MjY2VUwsCistCS8qIDIxNSAqLyAweGMwNDYyYjE4YjhiMmI0ZWVVTCwgMHg3Y2M4ZDk1MDI3NGQxYWZiVUwsCistCQkgIDB4ZjI1ZjcxMDU0MzZiMDJkMlVMLCAweDQzYmJmOGRjYmZmOWNjZDNVTCwKKy0JLyogMjE2ICovIDB4YjZhZDE3NjdhMDM5ZTlkZlVMLCAweGIwNzE0ZGE4ZjY5ZDM1ODNVTCwKKy0JCSAgMHg1ZTU1ZmExOGI0MjkzMWY1VUwsIDB4NGVkNTU1OGYzM2M2MDk2MVVMLAorLQkvKiAyMTcgKi8gMHgxZmUzNzkwMWM2NDdhNWRkVUwsIDB4NTkzZGRmMWY4MDgxZDM1N1VMLAorLQkJICAweDAyNDlhNGZkODEzZmQ3YTZVTCwgMHg2OWFjY2EyNzRlOWNhZjYxVUwsCistCS8qIDIxOCAqLyAweDA0N2JhM2VhMzMwNzIxYzlVTCwgMHg4MzQyM2ZjMjBlN2UxZWEwVUwsCistCQkgIDB4MWRmNGMwYWYwMTMxNGE2MFVMLCAweDA5YTYyZGFiODkyODk1MjdVTCwKKy0JLyogMjE5ICovIDB4YTViMzI1YTQ5Y2M2Y2IwMFVMLCAweGU5NGI1ZGM2NTRiNTZjYjZVTCwKKy0JCSAgMHgzYmUyODc3OWFkYzk5NGEwVUwsIDB4NDI5NmU4ZjhiYTNhNGFhZFVMLAorLQkvKiAyMjAgKi8gMHgzMjg2ODk3NjFlNDUxZWFiVUwsIDB4MmU0ZDU5OGJmZjU5NTk0YVVMLAorLQkJICAweDQ5Yjk2ODUzZDdhNzA4NGFVTCwgMHg0OTgwYTMxOTYwMTQyMGE4VUwsCistCS8qIDIyMSAqLyAweDk1NjViOWUxMmY1NTJjNDJVTCwgMHg4YTUzMThkYjcxMDBmZTk2VUwsCistCQkgIDB4MDVjOTBiNGQ0M2FkZDBkN1VMLCAweDUzOGI0Y2Q2NmE1ZDRlZGFVTCwKKy0JLyogMjIyICovIDB4ZjRlOTRmYzNlODlmMDM5ZlVMLCAweDU5MmM5YWYyNmY2MTgwNDVVTCwKKy0JCSAgMHgwOGEzNmViNWZkNGI5NTUwVUwsIDB4MjVmZmZhZjZjMmVkMTQxOVVMLAorLQkvKiAyMjMgKi8gMHgzNDQzNDQ1OWNjNzlkMzU0VUwsIDB4ZWVlY2JmYjRiMWQ1NDc2YlVMLAorLQkJICAweGRkZWIzNGEwNjE2MTVkOTlVTCwgMHg1MTI5Y2VjY2ViNjRiNzczVUwsCistCS8qIDIyNCAqLyAweGVlNDMyMTU4OTQ5OTM1MjBVTCwgMHg3NzJmOWM3Y2YxNGMwYjNiVUwsCistCQkgIDB4ZDJlMmZjZTMwNmJlZGFkNVVMLCAweDcxNWY0MmI1NDZmMDZhOTdVTCwKKy0JLyogMjI1ICovIDB4NDM0ZWNkY2VkYTViNWYxYVVMLCAweDBkYTE3MTE1YTQ5NzQxYTlVTCwKKy0JCSAgMHg2ODBiZDc3YzczZWRhZDJlVUwsIDB4NDg3YzAyMzU0ZWRkOTA0MVVMLAorLQkvKiAyMjYgKi8gMHhiOGVmZWZmM2E3MGVkOWM0VUwsIDB4NTZhMzJhYTNlODU3ZTMwMlVMLAorLQkJICAweGRmM2E2OGJkNDhhMmE1YTBVTCwgMHgwN2Y2NTBiNzMxNzZjNDQ0VUwsCistCS8qIDIyNyAqLyAweGUzOGI5YjE2MjZlMGNjYjFVTCwgMHg3OWUwNTNjMThiMDlmYjM2VUwsCistCQkgIDB4NTZkOTAzMTljOWY5NDk2NFVMLCAweDFjYTk0MWU3YWM5ZmY1YzRVTCwKKy0JLyogMjI4ICovIDB4NDljNGRmMjkxNjJmYTBiYlVMLCAweDg0ODhjZjMyODJiMzMzMDVVTCwKKy0JCSAgMHg5NWRmZGExNGNhYmI0MzdkVUwsIDB4MzM5MWY3ODI2NGQ1YWQ4NlVMLAorLQkvKiAyMjkgKi8gMHg3MjlhZTA2YWUyYjUwOTVkVUwsIDB4ZDU4YTU4ZDczMjU5YTk0NlVMLAorLQkJICAweGU5ODM0MjYyZDEzOTIxZWRVTCwgMHgyN2ZlZGFmYWE1NGJiNTkyVUwsCistCS8qIDIzMCAqLyAweGE5OWRjNWI4MjlhZDQ4YmJVTCwgMHg1ZjAyNTc0MjQ5OWVlMjYwVUwsCistCQkgIDB4ODAyYzhlY2Q1ZDc1MTNmZFVMLCAweDc4Y2ViM2VmM2Y2ZGQ5MzhVTCwKKy0JLyogMjMxICovIDB4YzM0MmY0NGY4YTEzNWQ5NFVMLCAweDdiOWVkYjQ0ODI4Y2RkYTNVTCwKKy0JCSAgMHg5NDM2ZDExYTA1MzdjZmU3VUwsIDB4NTA2NGIxNjRlYzFhYjRjOFVMLAorLQkvKiAyMzIgKi8gMHg3MDIwZWNjZmQzN2ViMmZjVUwsIDB4MWYzMWVhM2VkOTBkMjVmY1VMLAorLQkJICAweDFiOTMwZDdiZGZhMWJiMzRVTCwgMHg1MzQ0NDY3YTQ4MTEzMDQ0VUwsCistCS8qIDIzMyAqLyAweDcwMDczMTcwZjI1ZTZkZmJVTCwgMHhlMzg1ZGMxYTUwMTE0Y2M4VUwsCistCQkgIDB4MjM0ODY5OGFjOGZjNGYwMFVMLCAweDJhNzdhNTUyODRkZDQwZDhVTCwKKy0JLyogMjM0ICovIDB4ZmUwNmFmZTBjOThjNmNlNFVMLCAweGMyMzVkZjk2ZGRkZmQ2ZTRVTCwKKy0JCSAgMHgxNDI4ZDAxZTMzYmYxZWQzVUwsIDB4Nzg1NzY4ZWM5MzAwYmRhZlVMLAorLQkvKiAyMzUgKi8gMHg5NzAyZTU3YTkxZGViNjNiVUwsIDB4NjFiZGI4YmZlNWNlOGI4MFVMLAorLQkJICAweDY0NWI0MjZmM2QxZDU4YWNVTCwgMHg0ODA0YTgyMjI3YTU1N2JjVUwsCistCS8qIDIzNiAqLyAweDhlNTcwNDhhYjQ0ZDI2MDFVTCwgMHg2OGQ2NTAxYTRiM2E2OTM1VUwsCistCQkgIDB4YzM5YzllYzNmOWUxYzI5M1VMLCAweDQxNzJmMjU3ZDRkZTYzZTJVTCwKKy0JLyogMjM3ICovIDB4ZDM2OGI0NTAzMzBjNjQwMVVMLCAweDA0MGQzMDE3NDE4ZjIzOTFVTCwKKy0JCSAgMHgyYzM0YmI2MDkwYjdkOTBkVUwsIDB4MTZmNjQ5MjI4ZmRmZDUxZlVMLAorLQkvKiAyMzggKi8gMHhiZWE2ODE4ZTJiOTI4ZWY1VUwsIDB4ZTI4Y2NmOTFjZGMxMWU3MlVMLAorLQkJICAweDU5NGFhYTY4ZTc3YTM2Y2RVTCwgMHgzMTMwMzQ4MDZjN2ZmZDBmVUwsCistCS8qIDIzOSAqLyAweDhhOWQyN2FjMjI0OWJkNjVVTCwgMHgxOWEzYjQ2NDAxOGU5NTEyVUwsCistCQkgIDB4YzI2Y2NmZjM1MmIzN2VjN1VMLCAweDA1NmY2ODM0MWQ3OTdiMjFVTCwKKy0JLyogMjQwICovIDB4NWU3OWQ2NzU3ZWZkMjMyN1VMLCAweGZhYmRiY2I2NTUzYWZlMTVVTCwKKy0JCSAgMHhkM2U3MjIyYzZlYWY1YTYwVUwsIDB4NzA0NmM3NmQ0ZGFlNzQzYlVMLAorLQkvKiAyNDEgKi8gMHg2NjBiZTg3MmIxOGQ0YTU1VUwsIDB4MTk5OTI1MTg1NzRlMTQ5NlVMLAorLQkJICAweGMxMDMwNTNhMzAyYmRjYmJVTCwgMHgzZWQ4ZTk4MDBiMjE4ZThlVUwsCistCS8qIDI0MiAqLyAweDdiMGI5MjM5ZmE3NWUwM2VVTCwgMHhlZmU5ZmI2ODQ2MzNjMDgzVUwsCistCQkgIDB4OThhMzVmYmUzOTFhNzc5M1VMLCAweDYwNjU1MTBmZTJkMGZlMzRVTCwKKy0JLyogMjQzICovIDB4NTVjYjY2ODU0OGFiYWQwY1VMLCAweGI0NTg0NTQ4ZGE4N2U1MjdVTCwKKy0JCSAgMHgyYzQzZWNlYTAxMDdjMWRkVUwsIDB4NTI2MDI4ODA5MzcyZGUzNVVMLAorLQkvKiAyNDQgKi8gMHgzNDE1YzU2YWY5MjEzYjFmVUwsIDB4NWJlZTFhNGQwMTdlOThkYlVMLAorLQkJICAweDEzZjZiMTA1YjVjZjcwOWJVTCwgMHg1ZmYyMGUzNDgyYjI5YWI2VUwsCistCS8qIDI0NSAqLyAweDBhYTI5Yzc1Y2MyZTZjOTBVTCwgMHhmYzdkNzNjYTNhNzBlMjA2VUwsCistCQkgIDB4ODk5ZmMzOGZjNGI1YzUxNVVMLCAweDI1MDM4NmIxMjRmZmMyMDdVTCwKKy0JLyogMjQ2ICovIDB4NTRlYTI4ZDVhZTNkMmI1NlVMLCAweDk5MTMxNDlkZDZkZTYwY2VVTCwKKy0JCSAgMHgxNjY5NGZjNThmMDZkNmMxVUwsIDB4NDZiMjM5NzVlYjAxOGZjN1VMLAorLQkvKiAyNDcgKi8gMHg0NzBhNmEwZmI0YjdiNGUyVUwsIDB4NWQ5MjQ3NWE4ZjcyNTNkZVVMLAorLQkJICAweGFiZWVlNWI1MmZiZDNhZGJVTCwgMHg3ZmEyMDgwMWEwODA2OTY4VUwsCistCS8qIDI0OCAqLyAweDc2ZjNmYWYxOWY3NzE0ZDJVTCwgMHhiM2U4NDBjMTJmNDY2MGMzVUwsCistCQkgIDB4MGZiNGNkOGRmMjEyNzQ0ZVVMLCAweDRiMDY1YTI1MWQzYTJkZDJVTCwKKy0JLyogMjQ5ICovIDB4NWNlYmRlMzgzZDc3Y2Q0YVVMLCAweDZhZGYzOWRmODgyYzljYjFVTCwKKy0JCSAgMHhhMmRkMjQyZWIwOWFmNzU5VUwsIDB4MzE0N2MwZTUwZTVmNjQyMlVMLAorLQkvKiAyNTAgKi8gMHgxNjRjYTUxMDFkMTM1MGRiVUwsIDB4ZjhkMTM0NzljMzNmYzk2MlVMLAorLQkJICAweGU2NDBjZTRkMTNlNWRhMDhVTCwgMHg0YmRlZTBjNDUwNjFmOGJhVUwsCistCS8qIDI1MSAqLyAweGQ3YzQ2ZGMxYTRlZGIxYzlVTCwgMHg1NTE0ZDdiNjQzN2ZkOThhVUwsCistCQkgIDB4NTg5NDJmNmJiMmExYzAwYlVMLCAweDJkZmZiMmFiMWQ3MDcxMGVVTCwKKy0JLyogMjUyICovIDB4Y2NkZmNmMmZjMThiNmQ2OFVMLCAweGE4ZWJjYmE4Yjc4MDYxNjdVTCwKKy0JCSAgMHg5ODA2OTdmOTVlMjkzN2UzVUwsIDB4MDJmYmJhMWNkMDEyNmU4Y1VMCistfTsKKy0KKy0vKiBjIGlzIHR3byA1MTItYml0IHByb2R1Y3RzOiBjMFswOjddPWEwWzA6M10qYjBbMDozXSBhbmQgYzFbODoxNV09YTFbNDo3XSpiMVs0OjddCistICogYSBpcyB0d28gMjU2LWJpdCBpbnRlZ2VyczogYTBbMDozXSBhbmQgYTFbNDo3XQorLSAqIGIgaXMgdHdvIDI1Ni1iaXQgaW50ZWdlcnM6IGIwWzA6M10gYW5kIGIxWzQ6N10KKy0gKi8KKy1zdGF0aWMgdm9pZCBtdWwyXzI1NngyNTZfaW50ZWdlcl9hZHgodTY0ICpjb25zdCBjLCBjb25zdCB1NjQgKmNvbnN0IGEsCistCQkJCSAgICAgY29uc3QgdTY0ICpjb25zdCBiKQorLXsKKy0JYXNtIHZvbGF0aWxlKAorLQkJInhvcmwgJSVyMTRkLCAlJXIxNGQgOyIKKy0JCSJtb3ZxICAgKCUxKSwgJSVyZHg7ICIJLyogQVswXSAqLworLQkJIm11bHggICAoJTIpLCAgJSVyOCwgJSVyMTU7ICIgLyogQVswXSpCWzBdICovCistCQkieG9ybCAlJXIxMGQsICUlcjEwZCA7IgorLQkJIm1vdnEgJSVyOCwgKCUwKSA7IgorLQkJIm11bHggIDgoJTIpLCAlJXIxMCwgJSVyYXg7ICIgLyogQVswXSpCWzFdICovCistCQkiYWRveCAlJXIxMCwgJSVyMTUgOyIKKy0JCSJtdWx4IDE2KCUyKSwgICUlcjgsICUlcmJ4OyAiIC8qIEFbMF0qQlsyXSAqLworLQkJImFkb3ggICUlcjgsICUlcmF4IDsiCistCQkibXVseCAyNCglMiksICUlcjEwLCAlJXJjeDsgIiAvKiBBWzBdKkJbM10gKi8KKy0JCSJhZG94ICUlcjEwLCAlJXJieCA7IgorLQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy0JCSJhZG94ICUlcjE0LCAlJXJjeCA7IgorLQorLQkJIm1vdnEgIDgoJTEpLCAlJXJkeDsgIgkvKiBBWzFdICovCistCQkibXVseCAgICglMiksICAlJXI4LCAgJSVyOTsgIiAvKiBBWzFdKkJbMF0gKi8KKy0JCSJhZG94ICUlcjE1LCAgJSVyOCA7IgorLQkJIm1vdnEgICUlcjgsIDgoJTApIDsiCistCQkibXVseCAgOCglMiksICUlcjEwLCAlJXIxMTsgIiAvKiBBWzFdKkJbMV0gKi8KKy0JCSJhZG94ICUlcjEwLCAgJSVyOSA7IgorLQkJImFkY3ggICUlcjksICUlcmF4IDsiCistCQkibXVseCAxNiglMiksICAlJXI4LCAlJXIxMzsgIiAvKiBBWzFdKkJbMl0gKi8KKy0JCSJhZG94ICAlJXI4LCAlJXIxMSA7IgorLQkJImFkY3ggJSVyMTEsICUlcmJ4IDsiCistCQkibXVseCAyNCglMiksICUlcjEwLCAlJXIxNTsgIiAvKiBBWzFdKkJbM10gKi8KKy0JCSJhZG94ICUlcjEwLCAlJXIxMyA7IgorLQkJImFkY3ggJSVyMTMsICUlcmN4IDsiCistCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLQkJImFkb3ggJSVyMTQsICUlcjE1IDsiCistCQkiYWRjeCAlJXIxNCwgJSVyMTUgOyIKKy0KKy0JCSJtb3ZxIDE2KCUxKSwgJSVyZHg7ICIgLyogQVsyXSAqLworLQkJInhvcmwgJSVyMTBkLCAlJXIxMGQgOyIKKy0JCSJtdWx4ICAgKCUyKSwgICUlcjgsICAlJXI5OyAiIC8qIEFbMl0qQlswXSAqLworLQkJImFkb3ggJSVyYXgsICAlJXI4IDsiCistCQkibW92cSAlJXI4LCAxNiglMCkgOyIKKy0JCSJtdWx4ICA4KCUyKSwgJSVyMTAsICUlcjExOyAiIC8qIEFbMl0qQlsxXSAqLworLQkJImFkb3ggJSVyMTAsICAlJXI5IDsiCistCQkiYWRjeCAgJSVyOSwgJSVyYnggOyIKKy0JCSJtdWx4IDE2KCUyKSwgICUlcjgsICUlcjEzOyAiIC8qIEFbMl0qQlsyXSAqLworLQkJImFkb3ggICUlcjgsICUlcjExIDsiCistCQkiYWRjeCAlJXIxMSwgJSVyY3ggOyIKKy0JCSJtdWx4IDI0KCUyKSwgJSVyMTAsICUlcmF4OyAiIC8qIEFbMl0qQlszXSAqLworLQkJImFkb3ggJSVyMTAsICUlcjEzIDsiCistCQkiYWRjeCAlJXIxMywgJSVyMTUgOyIKKy0JCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistCQkiYWRveCAlJXIxNCwgJSVyYXggOyIKKy0JCSJhZGN4ICUlcjE0LCAlJXJheCA7IgorLQorLQkJIm1vdnEgMjQoJTEpLCAlJXJkeDsgIiAvKiBBWzNdICovCistCQkieG9ybCAlJXIxMGQsICUlcjEwZCA7IgorLQkJIm11bHggICAoJTIpLCAgJSVyOCwgICUlcjk7ICIgLyogQVszXSpCWzBdICovCistCQkiYWRveCAlJXJieCwgICUlcjggOyIKKy0JCSJtb3ZxICUlcjgsIDI0KCUwKSA7IgorLQkJIm11bHggIDgoJTIpLCAlJXIxMCwgJSVyMTE7ICIgLyogQVszXSpCWzFdICovCistCQkiYWRveCAlJXIxMCwgICUlcjkgOyIKKy0JCSJhZGN4ICAlJXI5LCAlJXJjeCA7IgorLQkJIm1vdnEgJSVyY3gsIDMyKCUwKSA7IgorLQkJIm11bHggMTYoJTIpLCAgJSVyOCwgJSVyMTM7ICIgLyogQVszXSpCWzJdICovCistCQkiYWRveCAgJSVyOCwgJSVyMTEgOyIKKy0JCSJhZGN4ICUlcjExLCAlJXIxNSA7IgorLQkJIm1vdnEgJSVyMTUsIDQwKCUwKSA7IgorLQkJIm11bHggMjQoJTIpLCAlJXIxMCwgJSVyYng7ICIgLyogQVszXSpCWzNdICovCistCQkiYWRveCAlJXIxMCwgJSVyMTMgOyIKKy0JCSJhZGN4ICUlcjEzLCAlJXJheCA7IgorLQkJIm1vdnEgJSVyYXgsIDQ4KCUwKSA7IgorLQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy0JCSJhZG94ICUlcjE0LCAlJXJieCA7IgorLQkJImFkY3ggJSVyMTQsICUlcmJ4IDsiCistCQkibW92cSAlJXJieCwgNTYoJTApIDsiCistCistCQkibW92cSAzMiglMSksICUlcmR4OyAiCS8qIENbMF0gKi8KKy0JCSJtdWx4IDMyKCUyKSwgICUlcjgsICUlcjE1OyAiIC8qIENbMF0qRFswXSAqLworLQkJInhvcmwgJSVyMTBkLCAlJXIxMGQgOyIKKy0JCSJtb3ZxICUlcjgsIDY0KCUwKTsiCistCQkibXVseCA0MCglMiksICUlcjEwLCAlJXJheDsgIiAvKiBDWzBdKkRbMV0gKi8KKy0JCSJhZG94ICUlcjEwLCAlJXIxNSA7IgorLQkJIm11bHggNDgoJTIpLCAgJSVyOCwgJSVyYng7ICIgLyogQ1swXSpEWzJdICovCistCQkiYWRveCAgJSVyOCwgJSVyYXggOyIKKy0JCSJtdWx4IDU2KCUyKSwgJSVyMTAsICUlcmN4OyAiIC8qIENbMF0qRFszXSAqLworLQkJImFkb3ggJSVyMTAsICUlcmJ4IDsiCistCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLQkJImFkb3ggJSVyMTQsICUlcmN4IDsiCistCistCQkibW92cSA0MCglMSksICUlcmR4OyAiIC8qIENbMV0gKi8KKy0JCSJ4b3JsICUlcjEwZCwgJSVyMTBkIDsiCistCQkibXVseCAzMiglMiksICAlJXI4LCAgJSVyOTsgIiAvKiBDWzFdKkRbMF0gKi8KKy0JCSJhZG94ICUlcjE1LCAgJSVyOCA7IgorLQkJIm1vdnEgICUlcjgsIDcyKCUwKTsiCistCQkibXVseCA0MCglMiksICUlcjEwLCAlJXIxMTsgIiAvKiBDWzFdKkRbMV0gKi8KKy0JCSJhZG94ICUlcjEwLCAgJSVyOSA7IgorLQkJImFkY3ggICUlcjksICUlcmF4IDsiCistCQkibXVseCA0OCglMiksICAlJXI4LCAlJXIxMzsgIiAvKiBDWzFdKkRbMl0gKi8KKy0JCSJhZG94ICAlJXI4LCAlJXIxMSA7IgorLQkJImFkY3ggJSVyMTEsICUlcmJ4IDsiCistCQkibXVseCA1NiglMiksICUlcjEwLCAlJXIxNTsgIiAvKiBDWzFdKkRbM10gKi8KKy0JCSJhZG94ICUlcjEwLCAlJXIxMyA7IgorLQkJImFkY3ggJSVyMTMsICUlcmN4IDsiCistCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLQkJImFkb3ggJSVyMTQsICUlcjE1IDsiCistCQkiYWRjeCAlJXIxNCwgJSVyMTUgOyIKKy0KKy0JCSJtb3ZxIDQ4KCUxKSwgJSVyZHg7ICIgLyogQ1syXSAqLworLQkJInhvcmwgJSVyMTBkLCAlJXIxMGQgOyIKKy0JCSJtdWx4IDMyKCUyKSwgICUlcjgsICAlJXI5OyAiIC8qIENbMl0qRFswXSAqLworLQkJImFkb3ggJSVyYXgsICAlJXI4IDsiCistCQkibW92cSAgJSVyOCwgODAoJTApOyIKKy0JCSJtdWx4IDQwKCUyKSwgJSVyMTAsICUlcjExOyAiIC8qIENbMl0qRFsxXSAqLworLQkJImFkb3ggJSVyMTAsICAlJXI5IDsiCistCQkiYWRjeCAgJSVyOSwgJSVyYnggOyIKKy0JCSJtdWx4IDQ4KCUyKSwgICUlcjgsICUlcjEzOyAiIC8qIENbMl0qRFsyXSAqLworLQkJImFkb3ggICUlcjgsICUlcjExIDsiCistCQkiYWRjeCAlJXIxMSwgJSVyY3ggOyIKKy0JCSJtdWx4IDU2KCUyKSwgJSVyMTAsICUlcmF4OyAiIC8qIENbMl0qRFszXSAqLworLQkJImFkb3ggJSVyMTAsICUlcjEzIDsiCistCQkiYWRjeCAlJXIxMywgJSVyMTUgOyIKKy0JCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistCQkiYWRveCAlJXIxNCwgJSVyYXggOyIKKy0JCSJhZGN4ICUlcjE0LCAlJXJheCA7IgorLQorLQkJIm1vdnEgNTYoJTEpLCAlJXJkeDsgIiAvKiBDWzNdICovCistCQkieG9ybCAlJXIxMGQsICUlcjEwZCA7IgorLQkJIm11bHggMzIoJTIpLCAgJSVyOCwgICUlcjk7ICIgLyogQ1szXSpEWzBdICovCistCQkiYWRveCAlJXJieCwgICUlcjggOyIKKy0JCSJtb3ZxICAlJXI4LCA4OCglMCk7IgorLQkJIm11bHggNDAoJTIpLCAlJXIxMCwgJSVyMTE7ICIgLyogQ1szXSpEWzFdICovCistCQkiYWRveCAlJXIxMCwgICUlcjkgOyIKKy0JCSJhZGN4ICAlJXI5LCAlJXJjeCA7IgorLQkJIm1vdnEgJSVyY3gsICA5NiglMCkgOyIKKy0JCSJtdWx4IDQ4KCUyKSwgICUlcjgsICUlcjEzOyAiIC8qIENbM10qRFsyXSAqLworLQkJImFkb3ggICUlcjgsICUlcjExIDsiCistCQkiYWRjeCAlJXIxMSwgJSVyMTUgOyIKKy0JCSJtb3ZxICUlcjE1LCAxMDQoJTApIDsiCistCQkibXVseCA1NiglMiksICUlcjEwLCAlJXJieDsgIiAvKiBDWzNdKkRbM10gKi8KKy0JCSJhZG94ICUlcjEwLCAlJXIxMyA7IgorLQkJImFkY3ggJSVyMTMsICUlcmF4IDsiCistCQkibW92cSAlJXJheCwgMTEyKCUwKSA7IgorLQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy0JCSJhZG94ICUlcjE0LCAlJXJieCA7IgorLQkJImFkY3ggJSVyMTQsICUlcmJ4IDsiCistCQkibW92cSAlJXJieCwgMTIwKCUwKSA7IgorLQkJOgorLQkJOiAiciIoYyksICJyIihhKSwgInIiKGIpCistCQk6ICJtZW1vcnkiLCAiY2MiLCAiJXJheCIsICIlcmJ4IiwgIiVyY3giLCAiJXJkeCIsICIlcjgiLCAiJXI5IiwKKy0JCSAgIiVyMTAiLCAiJXIxMSIsICIlcjEzIiwgIiVyMTQiLCAiJXIxNSIpOworLX0KKy0KKy1zdGF0aWMgdm9pZCBtdWwyXzI1NngyNTZfaW50ZWdlcl9ibWkyKHU2NCAqY29uc3QgYywgY29uc3QgdTY0ICpjb25zdCBhLAorLQkJCQkgICAgICBjb25zdCB1NjQgKmNvbnN0IGIpCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSB1NjQgZXFfbWFzayh1NjQgYSwgdTY0IGIpCisgeworLQlhc20gdm9sYXRpbGUoCistCQkibW92cSAgICglMSksICUlcmR4OyAiCS8qIEFbMF0gKi8KKy0JCSJtdWx4ICAgKCUyKSwgICUlcjgsICUlcjE1OyAiIC8qIEFbMF0qQlswXSAqLworLQkJIm1vdnEgJSVyOCwgICglMCkgOyIKKy0JCSJtdWx4ICA4KCUyKSwgJSVyMTAsICUlcmF4OyAiIC8qIEFbMF0qQlsxXSAqLworLQkJImFkZHEgJSVyMTAsICUlcjE1IDsiCistCQkibXVseCAxNiglMiksICAlJXI4LCAlJXJieDsgIiAvKiBBWzBdKkJbMl0gKi8KKy0JCSJhZGNxICAlJXI4LCAlJXJheCA7IgorLQkJIm11bHggMjQoJTIpLCAlJXIxMCwgJSVyY3g7ICIgLyogQVswXSpCWzNdICovCistCQkiYWRjcSAlJXIxMCwgJSVyYnggOyIKKy0JCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistCQkiYWRjcSAgICAkMCwgJSVyY3ggOyIKKy0KKy0JCSJtb3ZxICA4KCUxKSwgJSVyZHg7ICIJLyogQVsxXSAqLworLQkJIm11bHggICAoJTIpLCAgJSVyOCwgICUlcjk7ICIgLyogQVsxXSpCWzBdICovCistCQkiYWRkcSAlJXIxNSwgICUlcjggOyIKKy0JCSJtb3ZxICUlcjgsIDgoJTApIDsiCistCQkibXVseCAgOCglMiksICUlcjEwLCAlJXIxMTsgIiAvKiBBWzFdKkJbMV0gKi8KKy0JCSJhZGNxICUlcjEwLCAgJSVyOSA7IgorLQkJIm11bHggMTYoJTIpLCAgJSVyOCwgJSVyMTM7ICIgLyogQVsxXSpCWzJdICovCistCQkiYWRjcSAgJSVyOCwgJSVyMTEgOyIKKy0JCSJtdWx4IDI0KCUyKSwgJSVyMTAsICUlcjE1OyAiIC8qIEFbMV0qQlszXSAqLworLQkJImFkY3EgJSVyMTAsICUlcjEzIDsiCistCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLQkJImFkY3EgICAgJDAsICUlcjE1IDsiCistCistCQkiYWRkcSAgJSVyOSwgJSVyYXggOyIKKy0JCSJhZGNxICUlcjExLCAlJXJieCA7IgorLQkJImFkY3EgJSVyMTMsICUlcmN4IDsiCistCQkiYWRjcSAgICAkMCwgJSVyMTUgOyIKKy0KKy0JCSJtb3ZxIDE2KCUxKSwgJSVyZHg7ICIJLyogQVsyXSAqLworLQkJIm11bHggICAoJTIpLCAgJSVyOCwgICUlcjk7ICIgLyogQVsyXSpCWzBdICovCistCQkiYWRkcSAlJXJheCwgICUlcjggOyIKKy0JCSJtb3ZxICUlcjgsIDE2KCUwKSA7IgorLQkJIm11bHggIDgoJTIpLCAlJXIxMCwgJSVyMTE7ICIgLyogQVsyXSpCWzFdICovCistCQkiYWRjcSAlJXIxMCwgICUlcjkgOyIKKy0JCSJtdWx4IDE2KCUyKSwgICUlcjgsICUlcjEzOyAiIC8qIEFbMl0qQlsyXSAqLworLQkJImFkY3EgICUlcjgsICUlcjExIDsiCistCQkibXVseCAyNCglMiksICUlcjEwLCAlJXJheDsgIiAvKiBBWzJdKkJbM10gKi8KKy0JCSJhZGNxICUlcjEwLCAlJXIxMyA7IgorLQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy0JCSJhZGNxICAgICQwLCAlJXJheCA7IgorLQorLQkJImFkZHEgICUlcjksICUlcmJ4IDsiCistCQkiYWRjcSAlJXIxMSwgJSVyY3ggOyIKKy0JCSJhZGNxICUlcjEzLCAlJXIxNSA7IgorLQkJImFkY3EgICAgJDAsICUlcmF4IDsiCistCistCQkibW92cSAyNCglMSksICUlcmR4OyAiCS8qIEFbM10gKi8KKy0JCSJtdWx4ICAgKCUyKSwgICUlcjgsICAlJXI5OyAiIC8qIEFbM10qQlswXSAqLworLQkJImFkZHEgJSVyYngsICAlJXI4IDsiCistCQkibW92cSAlJXI4LCAyNCglMCkgOyIKKy0JCSJtdWx4ICA4KCUyKSwgJSVyMTAsICUlcjExOyAiIC8qIEFbM10qQlsxXSAqLworLQkJImFkY3EgJSVyMTAsICAlJXI5IDsiCistCQkibXVseCAxNiglMiksICAlJXI4LCAlJXIxMzsgIiAvKiBBWzNdKkJbMl0gKi8KKy0JCSJhZGNxICAlJXI4LCAlJXIxMSA7IgorLQkJIm11bHggMjQoJTIpLCAlJXIxMCwgJSVyYng7ICIgLyogQVszXSpCWzNdICovCistCQkiYWRjcSAlJXIxMCwgJSVyMTMgOyIKKy0JCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistCQkiYWRjcSAgICAkMCwgJSVyYnggOyIKKy0KKy0JCSJhZGRxICAlJXI5LCAlJXJjeCA7IgorLQkJIm1vdnEgJSVyY3gsIDMyKCUwKSA7IgorLQkJImFkY3EgJSVyMTEsICUlcjE1IDsiCistCQkibW92cSAlJXIxNSwgNDAoJTApIDsiCistCQkiYWRjcSAlJXIxMywgJSVyYXggOyIKKy0JCSJtb3ZxICUlcmF4LCA0OCglMCkgOyIKKy0JCSJhZGNxICAgICQwLCAlJXJieCA7IgorLQkJIm1vdnEgJSVyYngsIDU2KCUwKSA7IgorLQorLQkJIm1vdnEgMzIoJTEpLCAlJXJkeDsgIgkvKiBDWzBdICovCistCQkibXVseCAzMiglMiksICAlJXI4LCAlJXIxNTsgIiAvKiBDWzBdKkRbMF0gKi8KKy0JCSJtb3ZxICUlcjgsIDY0KCUwKSA7IgorLQkJIm11bHggNDAoJTIpLCAlJXIxMCwgJSVyYXg7ICIgLyogQ1swXSpEWzFdICovCistCQkiYWRkcSAlJXIxMCwgJSVyMTUgOyIKKy0JCSJtdWx4IDQ4KCUyKSwgICUlcjgsICUlcmJ4OyAiIC8qIENbMF0qRFsyXSAqLworLQkJImFkY3EgICUlcjgsICUlcmF4IDsiCistCQkibXVseCA1NiglMiksICUlcjEwLCAlJXJjeDsgIiAvKiBDWzBdKkRbM10gKi8KKy0JCSJhZGNxICUlcjEwLCAlJXJieCA7IgorLQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy0JCSJhZGNxICAgICQwLCAlJXJjeCA7IgorLQorLQkJIm1vdnEgNDAoJTEpLCAlJXJkeDsgIgkvKiBDWzFdICovCistCQkibXVseCAzMiglMiksICAlJXI4LCAgJSVyOTsgIiAvKiBDWzFdKkRbMF0gKi8KKy0JCSJhZGRxICUlcjE1LCAgJSVyOCA7IgorLQkJIm1vdnEgJSVyOCwgNzIoJTApIDsiCistCQkibXVseCA0MCglMiksICUlcjEwLCAlJXIxMTsgIiAvKiBDWzFdKkRbMV0gKi8KKy0JCSJhZGNxICUlcjEwLCAgJSVyOSA7IgorLQkJIm11bHggNDgoJTIpLCAgJSVyOCwgJSVyMTM7ICIgLyogQ1sxXSpEWzJdICovCistCQkiYWRjcSAgJSVyOCwgJSVyMTEgOyIKKy0JCSJtdWx4IDU2KCUyKSwgJSVyMTAsICUlcjE1OyAiIC8qIENbMV0qRFszXSAqLworLQkJImFkY3EgJSVyMTAsICUlcjEzIDsiCistCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLQkJImFkY3EgICAgJDAsICUlcjE1IDsiCistCistCQkiYWRkcSAgJSVyOSwgJSVyYXggOyIKKy0JCSJhZGNxICUlcjExLCAlJXJieCA7IgorLQkJImFkY3EgJSVyMTMsICUlcmN4IDsiCistCQkiYWRjcSAgICAkMCwgJSVyMTUgOyIKKy0KKy0JCSJtb3ZxIDQ4KCUxKSwgJSVyZHg7ICIJLyogQ1syXSAqLworLQkJIm11bHggMzIoJTIpLCAgJSVyOCwgICUlcjk7ICIgLyogQ1syXSpEWzBdICovCistCQkiYWRkcSAlJXJheCwgICUlcjggOyIKKy0JCSJtb3ZxICUlcjgsIDgwKCUwKSA7IgorLQkJIm11bHggNDAoJTIpLCAlJXIxMCwgJSVyMTE7ICIgLyogQ1syXSpEWzFdICovCistCQkiYWRjcSAlJXIxMCwgICUlcjkgOyIKKy0JCSJtdWx4IDQ4KCUyKSwgICUlcjgsICUlcjEzOyAiIC8qIENbMl0qRFsyXSAqLworLQkJImFkY3EgICUlcjgsICUlcjExIDsiCistCQkibXVseCA1NiglMiksICUlcjEwLCAlJXJheDsgIiAvKiBDWzJdKkRbM10gKi8KKy0JCSJhZGNxICUlcjEwLCAlJXIxMyA7IgorLQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy0JCSJhZGNxICAgICQwLCAlJXJheCA7IgorLQorLQkJImFkZHEgICUlcjksICUlcmJ4IDsiCistCQkiYWRjcSAlJXIxMSwgJSVyY3ggOyIKKy0JCSJhZGNxICUlcjEzLCAlJXIxNSA7IgorLQkJImFkY3EgICAgJDAsICUlcmF4IDsiCistCistCQkibW92cSA1NiglMSksICUlcmR4OyAiCS8qIENbM10gKi8KKy0JCSJtdWx4IDMyKCUyKSwgICUlcjgsICAlJXI5OyAiIC8qIENbM10qRFswXSAqLworLQkJImFkZHEgJSVyYngsICAlJXI4IDsiCistCQkibW92cSAlJXI4LCA4OCglMCkgOyIKKy0JCSJtdWx4IDQwKCUyKSwgJSVyMTAsICUlcjExOyAiIC8qIENbM10qRFsxXSAqLworLQkJImFkY3EgJSVyMTAsICAlJXI5IDsiCistCQkibXVseCA0OCglMiksICAlJXI4LCAlJXIxMzsgIiAvKiBDWzNdKkRbMl0gKi8KKy0JCSJhZGNxICAlJXI4LCAlJXIxMSA7IgorLQkJIm11bHggNTYoJTIpLCAlJXIxMCwgJSVyYng7ICIgLyogQ1szXSpEWzNdICovCistCQkiYWRjcSAlJXIxMCwgJSVyMTMgOyIKKy0JCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistCQkiYWRjcSAgICAkMCwgJSVyYnggOyIKKy0KKy0JCSJhZGRxICAlJXI5LCAlJXJjeCA7IgorLQkJIm1vdnEgJSVyY3gsICA5NiglMCkgOyIKKy0JCSJhZGNxICUlcjExLCAlJXIxNSA7IgorLQkJIm1vdnEgJSVyMTUsIDEwNCglMCkgOyIKKy0JCSJhZGNxICUlcjEzLCAlJXJheCA7IgorLQkJIm1vdnEgJSVyYXgsIDExMiglMCkgOyIKKy0JCSJhZGNxICAgICQwLCAlJXJieCA7IgorLQkJIm1vdnEgJSVyYngsIDEyMCglMCkgOyIKKy0JCToKKy0JCTogInIiKGMpLCAiciIoYSksICJyIihiKQorLQkJOiAibWVtb3J5IiwgImNjIiwgIiVyYXgiLCAiJXJieCIsICIlcmN4IiwgIiVyZHgiLCAiJXI4IiwgIiVyOSIsCistCQkgICIlcjEwIiwgIiVyMTEiLCAiJXIxMyIsICIlcjE1Iik7CisrCXU2NCB4ID0gYSBeIGI7CisrCXU2NCBtaW51c194ID0gfnggKyAodTY0KTFVOworKwl1NjQgeF9vcl9taW51c194ID0geCB8IG1pbnVzX3g7CisrCXU2NCB4bnggPSB4X29yX21pbnVzX3ggPj4gKHUzMik2M1U7CisrCXJldHVybiB4bnggLSAodTY0KTFVOworIH0KKyAKKy1zdGF0aWMgdm9pZCBzcXIyXzI1NngyNTZfaW50ZWdlcl9hZHgodTY0ICpjb25zdCBjLCBjb25zdCB1NjQgKmNvbnN0IGEpCisrc3RhdGljIF9fYWx3YXlzX2lubGluZSB1NjQgZ3RlX21hc2sodTY0IGEsIHU2NCBiKQorIHsKKy0JYXNtIHZvbGF0aWxlKAorLQkJIm1vdnEgICAoJTEpLCAlJXJkeCAgICAgICAgOyIgLyogQVswXSAgICAgICovCistCQkibXVseCAgOCglMSksICAlJXI4LCAlJXIxNCA7IiAvKiBBWzFdKkFbMF0gKi8KKy0JCSJ4b3JsICUlcjE1ZCwgJSVyMTVkOyIKKy0JCSJtdWx4IDE2KCUxKSwgICUlcjksICUlcjEwIDsiIC8qIEFbMl0qQVswXSAqLworLQkJImFkY3ggJSVyMTQsICAlJXI5IDsiCistCQkibXVseCAyNCglMSksICUlcmF4LCAlJXJjeCA7IiAvKiBBWzNdKkFbMF0gKi8KKy0JCSJhZGN4ICUlcmF4LCAlJXIxMCA7IgorLQkJIm1vdnEgMjQoJTEpLCAlJXJkeCAgICAgICAgOyIgLyogQVszXSAgICAgICovCistCQkibXVseCAgOCglMSksICUlcjExLCAlJXJieCA7IiAvKiBBWzFdKkFbM10gKi8KKy0JCSJhZGN4ICUlcmN4LCAlJXIxMSA7IgorLQkJIm11bHggMTYoJTEpLCAlJXJheCwgJSVyMTMgOyIgLyogQVsyXSpBWzNdICovCistCQkiYWRjeCAlJXJheCwgJSVyYnggOyIKKy0JCSJtb3ZxICA4KCUxKSwgJSVyZHggICAgICAgIDsiIC8qIEFbMV0gICAgICAqLworLQkJImFkY3ggJSVyMTUsICUlcjEzIDsiCistCQkibXVseCAxNiglMSksICUlcmF4LCAlJXJjeCA7IiAvKiBBWzJdKkFbMV0gKi8KKy0JCSJtb3ZxICAgICQwLCAlJXIxNCA7IgorLQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy0JCSJhZGN4ICUlcjE1LCAlJXIxNCA7IgorLQorLQkJInhvcmwgJSVyMTVkLCAlJXIxNWQ7IgorLQkJImFkb3ggJSVyYXgsICUlcjEwIDsiCistCQkiYWRjeCAgJSVyOCwgICUlcjggOyIKKy0JCSJhZG94ICUlcmN4LCAlJXIxMSA7IgorLQkJImFkY3ggICUlcjksICAlJXI5IDsiCistCQkiYWRveCAlJXIxNSwgJSVyYnggOyIKKy0JCSJhZGN4ICUlcjEwLCAlJXIxMCA7IgorLQkJImFkb3ggJSVyMTUsICUlcjEzIDsiCistCQkiYWRjeCAlJXIxMSwgJSVyMTEgOyIKKy0JCSJhZG94ICUlcjE1LCAlJXIxNCA7IgorLQkJImFkY3ggJSVyYngsICUlcmJ4IDsiCistCQkiYWRjeCAlJXIxMywgJSVyMTMgOyIKKy0JCSJhZGN4ICUlcjE0LCAlJXIxNCA7IgorLQorLQkJIm1vdnEgICAoJTEpLCAlJXJkeCA7IgorLQkJIm11bHggJSVyZHgsICUlcmF4LCAlJXJjeCA7IiAvKiBBWzBdXjIgKi8KKy0JCS8qKioqKioqKioqKioqKioqKioqLworLQkJIm1vdnEgJSVyYXgsICAwKCUwKSA7IgorLQkJImFkZHEgJSVyY3gsICAlJXI4IDsiCistCQkibW92cSAgJSVyOCwgIDgoJTApIDsiCistCQkibW92cSAgOCglMSksICUlcmR4IDsiCistCQkibXVseCAlJXJkeCwgJSVyYXgsICUlcmN4IDsiIC8qIEFbMV1eMiAqLworLQkJImFkY3EgJSVyYXgsICAlJXI5IDsiCistCQkibW92cSAgJSVyOSwgMTYoJTApIDsiCistCQkiYWRjcSAlJXJjeCwgJSVyMTAgOyIKKy0JCSJtb3ZxICUlcjEwLCAyNCglMCkgOyIKKy0JCSJtb3ZxIDE2KCUxKSwgJSVyZHggOyIKKy0JCSJtdWx4ICUlcmR4LCAlJXJheCwgJSVyY3ggOyIgLyogQVsyXV4yICovCistCQkiYWRjcSAlJXJheCwgJSVyMTEgOyIKKy0JCSJtb3ZxICUlcjExLCAzMiglMCkgOyIKKy0JCSJhZGNxICUlcmN4LCAlJXJieCA7IgorLQkJIm1vdnEgJSVyYngsIDQwKCUwKSA7IgorLQkJIm1vdnEgMjQoJTEpLCAlJXJkeCA7IgorLQkJIm11bHggJSVyZHgsICUlcmF4LCAlJXJjeCA7IiAvKiBBWzNdXjIgKi8KKy0JCSJhZGNxICUlcmF4LCAlJXIxMyA7IgorLQkJIm1vdnEgJSVyMTMsIDQ4KCUwKSA7IgorLQkJImFkY3EgJSVyY3gsICUlcjE0IDsiCistCQkibW92cSAlJXIxNCwgNTYoJTApIDsiCistCistCistCQkibW92cSAzMiglMSksICUlcmR4ICAgICAgICA7IiAvKiBCWzBdICAgICAgKi8KKy0JCSJtdWx4IDQwKCUxKSwgICUlcjgsICUlcjE0IDsiIC8qIEJbMV0qQlswXSAqLworLQkJInhvcmwgJSVyMTVkLCAlJXIxNWQ7IgorLQkJIm11bHggNDgoJTEpLCAgJSVyOSwgJSVyMTAgOyIgLyogQlsyXSpCWzBdICovCistCQkiYWRjeCAlJXIxNCwgICUlcjkgOyIKKy0JCSJtdWx4IDU2KCUxKSwgJSVyYXgsICUlcmN4IDsiIC8qIEJbM10qQlswXSAqLworLQkJImFkY3ggJSVyYXgsICUlcjEwIDsiCistCQkibW92cSA1NiglMSksICUlcmR4ICAgICAgICA7IiAvKiBCWzNdICAgICAgKi8KKy0JCSJtdWx4IDQwKCUxKSwgJSVyMTEsICUlcmJ4IDsiIC8qIEJbMV0qQlszXSAqLworLQkJImFkY3ggJSVyY3gsICUlcjExIDsiCistCQkibXVseCA0OCglMSksICUlcmF4LCAlJXIxMyA7IiAvKiBCWzJdKkJbM10gKi8KKy0JCSJhZGN4ICUlcmF4LCAlJXJieCA7IgorLQkJIm1vdnEgNDAoJTEpLCAlJXJkeCAgICAgICAgOyIgLyogQlsxXSAgICAgICovCistCQkiYWRjeCAlJXIxNSwgJSVyMTMgOyIKKy0JCSJtdWx4IDQ4KCUxKSwgJSVyYXgsICUlcmN4IDsiIC8qIEJbMl0qQlsxXSAqLworLQkJIm1vdnEgICAgJDAsICUlcjE0IDsiCistCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLQkJImFkY3ggJSVyMTUsICUlcjE0IDsiCistCistCQkieG9ybCAlJXIxNWQsICUlcjE1ZDsiCistCQkiYWRveCAlJXJheCwgJSVyMTAgOyIKKy0JCSJhZGN4ICAlJXI4LCAgJSVyOCA7IgorLQkJImFkb3ggJSVyY3gsICUlcjExIDsiCistCQkiYWRjeCAgJSVyOSwgICUlcjkgOyIKKy0JCSJhZG94ICUlcjE1LCAlJXJieCA7IgorLQkJImFkY3ggJSVyMTAsICUlcjEwIDsiCistCQkiYWRveCAlJXIxNSwgJSVyMTMgOyIKKy0JCSJhZGN4ICUlcjExLCAlJXIxMSA7IgorLQkJImFkb3ggJSVyMTUsICUlcjE0IDsiCistCQkiYWRjeCAlJXJieCwgJSVyYnggOyIKKy0JCSJhZGN4ICUlcjEzLCAlJXIxMyA7IgorLQkJImFkY3ggJSVyMTQsICUlcjE0IDsiCistCistCQkibW92cSAzMiglMSksICUlcmR4IDsiCistCQkibXVseCAlJXJkeCwgJSVyYXgsICUlcmN4IDsiIC8qIEJbMF1eMiAqLworLQkJLyoqKioqKioqKioqKioqKioqKiovCistCQkibW92cSAlJXJheCwgIDY0KCUwKSA7IgorLQkJImFkZHEgJSVyY3gsICAlJXI4IDsiCistCQkibW92cSAgJSVyOCwgIDcyKCUwKSA7IgorLQkJIm1vdnEgNDAoJTEpLCAlJXJkeCA7IgorLQkJIm11bHggJSVyZHgsICUlcmF4LCAlJXJjeCA7IiAvKiBCWzFdXjIgKi8KKy0JCSJhZGNxICUlcmF4LCAgJSVyOSA7IgorLQkJIm1vdnEgICUlcjksICA4MCglMCkgOyIKKy0JCSJhZGNxICUlcmN4LCAlJXIxMCA7IgorLQkJIm1vdnEgJSVyMTAsICA4OCglMCkgOyIKKy0JCSJtb3ZxIDQ4KCUxKSwgJSVyZHggOyIKKy0JCSJtdWx4ICUlcmR4LCAlJXJheCwgJSVyY3ggOyIgLyogQlsyXV4yICovCistCQkiYWRjcSAlJXJheCwgJSVyMTEgOyIKKy0JCSJtb3ZxICUlcjExLCAgOTYoJTApIDsiCistCQkiYWRjcSAlJXJjeCwgJSVyYnggOyIKKy0JCSJtb3ZxICUlcmJ4LCAxMDQoJTApIDsiCistCQkibW92cSA1NiglMSksICUlcmR4IDsiCistCQkibXVseCAlJXJkeCwgJSVyYXgsICUlcmN4IDsiIC8qIEJbM11eMiAqLworLQkJImFkY3EgJSVyYXgsICUlcjEzIDsiCistCQkibW92cSAlJXIxMywgMTEyKCUwKSA7IgorLQkJImFkY3EgJSVyY3gsICUlcjE0IDsiCistCQkibW92cSAlJXIxNCwgMTIwKCUwKSA7IgorLQkJOgorLQkJOiAiciIoYyksICJyIihhKQorLQkJOiAibWVtb3J5IiwgImNjIiwgIiVyYXgiLCAiJXJieCIsICIlcmN4IiwgIiVyZHgiLCAiJXI4IiwgIiVyOSIsCistCQkgICIlcjEwIiwgIiVyMTEiLCAiJXIxMyIsICIlcjE0IiwgIiVyMTUiKTsKKysJdTY0IHggPSBhOworKwl1NjQgeSA9IGI7CisrCXU2NCB4X3hvcl95ID0geCBeIHk7CisrCXU2NCB4X3N1Yl95ID0geCAtIHk7CisrCXU2NCB4X3N1Yl95X3hvcl95ID0geF9zdWJfeSBeIHk7CisrCXU2NCBxID0geF94b3JfeSB8IHhfc3ViX3lfeG9yX3k7CisrCXU2NCB4X3hvcl9xID0geCBeIHE7CisrCXU2NCB4X3hvcl9xXyA9IHhfeG9yX3EgPj4gKHUzMik2M1U7CisrCXJldHVybiB4X3hvcl9xXyAtICh1NjQpMVU7CisgfQorIAorLXN0YXRpYyB2b2lkIHNxcjJfMjU2eDI1Nl9pbnRlZ2VyX2JtaTIodTY0ICpjb25zdCBjLCBjb25zdCB1NjQgKmNvbnN0IGEpCisrLyogQ29tcHV0ZXMgdGhlIGFkZGl0aW9uIG9mIGZvdXItZWxlbWVudCBmMSB3aXRoIHZhbHVlIGluIGYyCisrICogYW5kIHJldHVybnMgdGhlIGNhcnJ5IChpZiBhbnkpICovCisrc3RhdGljIGlubGluZSB1NjQgYWRkX3NjYWxhcih1NjQgKm91dCwgY29uc3QgdTY0ICpmMSwgdTY0IGYyKQorIHsKKy0JYXNtIHZvbGF0aWxlKAorLQkJIm1vdnEgIDgoJTEpLCAlJXJkeCAgICAgICAgOyIgLyogQVsxXSAgICAgICovCistCQkibXVseCAgICglMSksICAlJXI4LCAgJSVyOSA7IiAvKiBBWzBdKkFbMV0gKi8KKy0JCSJtdWx4IDE2KCUxKSwgJSVyMTAsICUlcjExIDsiIC8qIEFbMl0qQVsxXSAqLworLQkJIm11bHggMjQoJTEpLCAlJXJjeCwgJSVyMTQgOyIgLyogQVszXSpBWzFdICovCistCistCQkibW92cSAxNiglMSksICUlcmR4ICAgICAgICA7IiAvKiBBWzJdICAgICAgKi8KKy0JCSJtdWx4IDI0KCUxKSwgJSVyMTUsICUlcjEzIDsiIC8qIEFbM10qQVsyXSAqLworLQkJIm11bHggICAoJTEpLCAlJXJheCwgJSVyZHggOyIgLyogQVswXSpBWzJdICovCistCistCQkiYWRkcSAlJXJheCwgICUlcjkgOyIKKy0JCSJhZGNxICUlcmR4LCAlJXIxMCA7IgorLQkJImFkY3EgJSVyY3gsICUlcjExIDsiCistCQkiYWRjcSAlJXIxNCwgJSVyMTUgOyIKKy0JCSJhZGNxICAgICQwLCAlJXIxMyA7IgorLQkJIm1vdnEgICAgJDAsICUlcjE0IDsiCistCQkiYWRjcSAgICAkMCwgJSVyMTQgOyIKKy0KKy0JCSJtb3ZxICAgKCUxKSwgJSVyZHggICAgICAgIDsiIC8qIEFbMF0gICAgICAqLworLQkJIm11bHggMjQoJTEpLCAlJXJheCwgJSVyY3ggOyIgLyogQVswXSpBWzNdICovCistCistCQkiYWRkcSAlJXJheCwgJSVyMTAgOyIKKy0JCSJhZGNxICUlcmN4LCAlJXIxMSA7IgorLQkJImFkY3EgICAgJDAsICUlcjE1IDsiCistCQkiYWRjcSAgICAkMCwgJSVyMTMgOyIKKy0JCSJhZGNxICAgICQwLCAlJXIxNCA7IgorLQorLQkJInNobGRxICQxLCAlJXIxMywgJSVyMTQgOyIKKy0JCSJzaGxkcSAkMSwgJSVyMTUsICUlcjEzIDsiCistCQkic2hsZHEgJDEsICUlcjExLCAlJXIxNSA7IgorLQkJInNobGRxICQxLCAlJXIxMCwgJSVyMTEgOyIKKy0JCSJzaGxkcSAkMSwgICUlcjksICUlcjEwIDsiCistCQkic2hsZHEgJDEsICAlJXI4LCAgJSVyOSA7IgorLQkJInNobHEgICQxLCAgJSVyOCAgICAgICAgOyIKKy0KKy0JCS8qKioqKioqKioqKioqKioqKioqLworLQkJIm11bHggJSVyZHgsICUlcmF4LCAlJXJjeCA7ICIgLyogQVswXV4yICovCistCQkvKioqKioqKioqKioqKioqKioqKi8KKy0JCSJtb3ZxICUlcmF4LCAgMCglMCkgOyIKKy0JCSJhZGRxICUlcmN4LCAgJSVyOCA7IgorLQkJIm1vdnEgICUlcjgsICA4KCUwKSA7IgorLQkJIm1vdnEgIDgoJTEpLCAlJXJkeCA7IgorLQkJIm11bHggJSVyZHgsICUlcmF4LCAlJXJjeCA7ICIgLyogQVsxXV4yICovCistCQkiYWRjcSAlJXJheCwgICUlcjkgOyIKKy0JCSJtb3ZxICAlJXI5LCAxNiglMCkgOyIKKy0JCSJhZGNxICUlcmN4LCAlJXIxMCA7IgorLQkJIm1vdnEgJSVyMTAsIDI0KCUwKSA7IgorLQkJIm1vdnEgMTYoJTEpLCAlJXJkeCA7IgorLQkJIm11bHggJSVyZHgsICUlcmF4LCAlJXJjeCA7ICIgLyogQVsyXV4yICovCistCQkiYWRjcSAlJXJheCwgJSVyMTEgOyIKKy0JCSJtb3ZxICUlcjExLCAzMiglMCkgOyIKKy0JCSJhZGNxICUlcmN4LCAlJXIxNSA7IgorLQkJIm1vdnEgJSVyMTUsIDQwKCUwKSA7IgorLQkJIm1vdnEgMjQoJTEpLCAlJXJkeCA7IgorLQkJIm11bHggJSVyZHgsICUlcmF4LCAlJXJjeCA7ICIgLyogQVszXV4yICovCistCQkiYWRjcSAlJXJheCwgJSVyMTMgOyIKKy0JCSJtb3ZxICUlcjEzLCA0OCglMCkgOyIKKy0JCSJhZGNxICUlcmN4LCAlJXIxNCA7IgorLQkJIm1vdnEgJSVyMTQsIDU2KCUwKSA7IgorLQorLQkJIm1vdnEgNDAoJTEpLCAlJXJkeCAgICAgICAgOyIgLyogQlsxXSAgICAgICovCistCQkibXVseCAzMiglMSksICAlJXI4LCAgJSVyOSA7IiAvKiBCWzBdKkJbMV0gKi8KKy0JCSJtdWx4IDQ4KCUxKSwgJSVyMTAsICUlcjExIDsiIC8qIEJbMl0qQlsxXSAqLworLQkJIm11bHggNTYoJTEpLCAlJXJjeCwgJSVyMTQgOyIgLyogQlszXSpCWzFdICovCistCistCQkibW92cSA0OCglMSksICUlcmR4ICAgICAgICA7IiAvKiBCWzJdICAgICAgKi8KKy0JCSJtdWx4IDU2KCUxKSwgJSVyMTUsICUlcjEzIDsiIC8qIEJbM10qQlsyXSAqLworLQkJIm11bHggMzIoJTEpLCAlJXJheCwgJSVyZHggOyIgLyogQlswXSpCWzJdICovCistCistCQkiYWRkcSAlJXJheCwgICUlcjkgOyIKKy0JCSJhZGNxICUlcmR4LCAlJXIxMCA7IgorLQkJImFkY3EgJSVyY3gsICUlcjExIDsiCistCQkiYWRjcSAlJXIxNCwgJSVyMTUgOyIKKy0JCSJhZGNxICAgICQwLCAlJXIxMyA7IgorLQkJIm1vdnEgICAgJDAsICUlcjE0IDsiCistCQkiYWRjcSAgICAkMCwgJSVyMTQgOyIKKy0KKy0JCSJtb3ZxIDMyKCUxKSwgJSVyZHggICAgICAgIDsiIC8qIEJbMF0gICAgICAqLworLQkJIm11bHggNTYoJTEpLCAlJXJheCwgJSVyY3ggOyIgLyogQlswXSpCWzNdICovCistCistCQkiYWRkcSAlJXJheCwgJSVyMTAgOyIKKy0JCSJhZGNxICUlcmN4LCAlJXIxMSA7IgorLQkJImFkY3EgICAgJDAsICUlcjE1IDsiCistCQkiYWRjcSAgICAkMCwgJSVyMTMgOyIKKy0JCSJhZGNxICAgICQwLCAlJXIxNCA7IgorLQorLQkJInNobGRxICQxLCAlJXIxMywgJSVyMTQgOyIKKy0JCSJzaGxkcSAkMSwgJSVyMTUsICUlcjEzIDsiCistCQkic2hsZHEgJDEsICUlcjExLCAlJXIxNSA7IgorLQkJInNobGRxICQxLCAlJXIxMCwgJSVyMTEgOyIKKy0JCSJzaGxkcSAkMSwgICUlcjksICUlcjEwIDsiCistCQkic2hsZHEgJDEsICAlJXI4LCAgJSVyOSA7IgorLQkJInNobHEgICQxLCAgJSVyOCAgICAgICAgOyIKKy0KKy0JCS8qKioqKioqKioqKioqKioqKioqLworLQkJIm11bHggJSVyZHgsICUlcmF4LCAlJXJjeCA7ICIgLyogQlswXV4yICovCistCQkvKioqKioqKioqKioqKioqKioqKi8KKy0JCSJtb3ZxICUlcmF4LCAgNjQoJTApIDsiCistCQkiYWRkcSAlJXJjeCwgICUlcjggOyIKKy0JCSJtb3ZxICAlJXI4LCAgNzIoJTApIDsiCistCQkibW92cSA0MCglMSksICUlcmR4IDsiCistCQkibXVseCAlJXJkeCwgJSVyYXgsICUlcmN4IDsgIiAvKiBCWzFdXjIgKi8KKy0JCSJhZGNxICUlcmF4LCAgJSVyOSA7IgorLQkJIm1vdnEgICUlcjksICA4MCglMCkgOyIKKy0JCSJhZGNxICUlcmN4LCAlJXIxMCA7IgorLQkJIm1vdnEgJSVyMTAsICA4OCglMCkgOyIKKy0JCSJtb3ZxIDQ4KCUxKSwgJSVyZHggOyIKKy0JCSJtdWx4ICUlcmR4LCAlJXJheCwgJSVyY3ggOyAiIC8qIEJbMl1eMiAqLworLQkJImFkY3EgJSVyYXgsICUlcjExIDsiCistCQkibW92cSAlJXIxMSwgIDk2KCUwKSA7IgorLQkJImFkY3EgJSVyY3gsICUlcjE1IDsiCistCQkibW92cSAlJXIxNSwgMTA0KCUwKSA7IgorLQkJIm1vdnEgNTYoJTEpLCAlJXJkeCA7IgorLQkJIm11bHggJSVyZHgsICUlcmF4LCAlJXJjeCA7ICIgLyogQlszXV4yICovCistCQkiYWRjcSAlJXJheCwgJSVyMTMgOyIKKy0JCSJtb3ZxICUlcjEzLCAxMTIoJTApIDsiCistCQkiYWRjcSAlJXJjeCwgJSVyMTQgOyIKKy0JCSJtb3ZxICUlcjE0LCAxMjAoJTApIDsiCistCQk6CistCQk6ICJyIihjKSwgInIiKGEpCistCQk6ICJtZW1vcnkiLCAiY2MiLCAiJXJheCIsICIlcmN4IiwgIiVyZHgiLCAiJXI4IiwgIiVyOSIsICIlcjEwIiwKKy0JCSAgIiVyMTEiLCAiJXIxMyIsICIlcjE0IiwgIiVyMTUiKTsKKy19CisrCXU2NCBjYXJyeV9yOworIAorLXN0YXRpYyB2b2lkIHJlZF9lbHRmcDI1NTE5XzJ3X2FkeCh1NjQgKmNvbnN0IGMsIGNvbnN0IHU2NCAqY29uc3QgYSkKKy17CisgCWFzbSB2b2xhdGlsZSgKKy0JCSJtb3ZsICAgICQzOCwgJSVlZHg7ICIJLyogMipjID0gMzggPSAyXjI1NiAqLworLQkJIm11bHggMzIoJTEpLCAgJSVyOCwgJSVyMTA7ICIgLyogYypDWzRdICovCistCQkieG9ybCAlJWVieCwgJSVlYnggOyIKKy0JCSJhZG94ICAgKCUxKSwgICUlcjggOyIKKy0JCSJtdWx4IDQwKCUxKSwgICUlcjksICUlcjExOyAiIC8qIGMqQ1s1XSAqLworLQkJImFkY3ggJSVyMTAsICAlJXI5IDsiCistCQkiYWRveCAgOCglMSksICAlJXI5IDsiCistCQkibXVseCA0OCglMSksICUlcjEwLCAlJXJheDsgIiAvKiBjKkNbNl0gKi8KKy0JCSJhZGN4ICUlcjExLCAlJXIxMCA7IgorLQkJImFkb3ggMTYoJTEpLCAlJXIxMCA7IgorLQkJIm11bHggNTYoJTEpLCAlJXIxMSwgJSVyY3g7ICIgLyogYypDWzddICovCistCQkiYWRjeCAlJXJheCwgJSVyMTEgOyIKKy0JCSJhZG94IDI0KCUxKSwgJSVyMTEgOyIKKy0JCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistCQkiYWRjeCAlJXJieCwgJSVyY3ggOyIKKy0JCSJhZG94ICAlJXJieCwgJSVyY3ggOyIKKy0JCSJpbXVsICUlcmR4LCAlJXJjeCA7IiAvKiBjKkNbNF0sIGNmPTAsIG9mPTAgKi8KKy0JCSJhZGN4ICUlcmN4LCAgJSVyOCA7IgorLQkJImFkY3ggJSVyYngsICAlJXI5IDsiCistCQkibW92cSAgJSVyOSwgIDgoJTApIDsiCistCQkiYWRjeCAlJXJieCwgJSVyMTAgOyIKKy0JCSJtb3ZxICUlcjEwLCAxNiglMCkgOyIKKy0JCSJhZGN4ICUlcmJ4LCAlJXIxMSA7IgorLQkJIm1vdnEgJSVyMTEsIDI0KCUwKSA7IgorLQkJIm1vdiAgICAgJDAsICUlZWN4IDsiCistCQkiY21vdmMgJSVlZHgsICUlZWN4IDsiCistCQkiYWRkcSAlJXJjeCwgICUlcjggOyIKKy0JCSJtb3ZxICAlJXI4LCAgICglMCkgOyIKKy0KKy0JCSJtdWx4ICA5NiglMSksICAlJXI4LCAlJXIxMDsgIiAvKiBjKkNbNF0gKi8KKy0JCSJ4b3JsICUlZWJ4LCAlJWVieCA7IgorLQkJImFkb3ggNjQoJTEpLCAgJSVyOCA7IgorLQkJIm11bHggMTA0KCUxKSwgICUlcjksICUlcjExOyAiIC8qIGMqQ1s1XSAqLworLQkJImFkY3ggJSVyMTAsICAlJXI5IDsiCistCQkiYWRveCA3MiglMSksICAlJXI5IDsiCistCQkibXVseCAxMTIoJTEpLCAlJXIxMCwgJSVyYXg7ICIgLyogYypDWzZdICovCistCQkiYWRjeCAlJXIxMSwgJSVyMTAgOyIKKy0JCSJhZG94IDgwKCUxKSwgJSVyMTAgOyIKKy0JCSJtdWx4IDEyMCglMSksICUlcjExLCAlJXJjeDsgIiAvKiBjKkNbN10gKi8KKy0JCSJhZGN4ICUlcmF4LCAlJXIxMSA7IgorLQkJImFkb3ggODgoJTEpLCAlJXIxMSA7IgorLQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistCQkiYWRjeCAlJXJieCwgJSVyY3ggOyIKKy0JCSJhZG94ICAlJXJieCwgJSVyY3ggOyIKKy0JCSJpbXVsICUlcmR4LCAlJXJjeCA7IiAvKiBjKkNbNF0sIGNmPTAsIG9mPTAgKi8KKy0JCSJhZGN4ICUlcmN4LCAgJSVyOCA7IgorLQkJImFkY3ggJSVyYngsICAlJXI5IDsiCistCQkibW92cSAgJSVyOSwgNDAoJTApIDsiCistCQkiYWRjeCAlJXJieCwgJSVyMTAgOyIKKy0JCSJtb3ZxICUlcjEwLCA0OCglMCkgOyIKKy0JCSJhZGN4ICUlcmJ4LCAlJXIxMSA7IgorLQkJIm1vdnEgJSVyMTEsIDU2KCUwKSA7IgorLQkJIm1vdiAgICAgJDAsICUlZWN4IDsiCistCQkiY21vdmMgJSVlZHgsICUlZWN4IDsiCistCQkiYWRkcSAlJXJjeCwgICUlcjggOyIKKy0JCSJtb3ZxICAlJXI4LCAzMiglMCkgOyIKKy0JCToKKy0JCTogInIiKGMpLCAiciIoYSkKKy0JCTogIm1lbW9yeSIsICJjYyIsICIlcmF4IiwgIiVyYngiLCAiJXJjeCIsICIlcmR4IiwgIiVyOCIsICIlcjkiLAorLQkJICAiJXIxMCIsICIlcjExIik7CistfQorKwkJLyogQ2xlYXIgcmVnaXN0ZXJzIHRvIHByb3BhZ2F0ZSB0aGUgY2FycnkgYml0ICovCisrCQkiICB4b3IgJSVyOCwgJSVyODsiCisrCQkiICB4b3IgJSVyOSwgJSVyOTsiCisrCQkiICB4b3IgJSVyMTAsICUlcjEwOyIKKysJCSIgIHhvciAlJXIxMSwgJSVyMTE7IgorKwkJIiAgeG9yICUxLCAlMTsiCisrCisrCQkvKiBCZWdpbiBhZGRpdGlvbiBjaGFpbiAqLworKwkJIiAgYWRkcSAwKCUzKSwgJTA7IgorKwkJIiAgbW92cSAlMCwgMCglMik7IgorKwkJIiAgYWRjeHEgOCglMyksICUlcjg7IgorKwkJIiAgbW92cSAlJXI4LCA4KCUyKTsiCisrCQkiICBhZGN4cSAxNiglMyksICUlcjk7IgorKwkJIiAgbW92cSAlJXI5LCAxNiglMik7IgorKwkJIiAgYWRjeHEgMjQoJTMpLCAlJXIxMDsiCisrCQkiICBtb3ZxICUlcjEwLCAyNCglMik7IgorKworKwkJLyogUmV0dXJuIHRoZSBjYXJyeSBiaXQgaW4gYSByZWdpc3RlciAqLworKwkJIiAgYWRjeCAlJXIxMSwgJTE7IgorKwk6ICIrJnIiIChmMiksICI9JnIiIChjYXJyeV9yKQorKwk6ICJyIiAob3V0KSwgInIiIChmMSkKKysJOiAiJXI4IiwgIiVyOSIsICIlcjEwIiwgIiVyMTEiLCAibWVtb3J5IiwgImNjIgorKwkpOworIAorLXN0YXRpYyB2b2lkIHJlZF9lbHRmcDI1NTE5XzJ3X2JtaTIodTY0ICpjb25zdCBjLCBjb25zdCB1NjQgKmNvbnN0IGEpCisteworLQlhc20gdm9sYXRpbGUoCistCQkibW92bCAgICAkMzgsICUlZWR4IDsgIiAgICAgICAvKiAyKmMgPSAzOCA9IDJeMjU2ICovCistCQkibXVseCAzMiglMSksICAlJXI4LCAlJXIxMCA7IiAvKiBjKkNbNF0gKi8KKy0JCSJtdWx4IDQwKCUxKSwgICUlcjksICUlcjExIDsiIC8qIGMqQ1s1XSAqLworLQkJImFkZHEgJSVyMTAsICAlJXI5IDsiCistCQkibXVseCA0OCglMSksICUlcjEwLCAlJXJheCA7IiAvKiBjKkNbNl0gKi8KKy0JCSJhZGNxICUlcjExLCAlJXIxMCA7IgorLQkJIm11bHggNTYoJTEpLCAlJXIxMSwgJSVyY3ggOyIgLyogYypDWzddICovCistCQkiYWRjcSAlJXJheCwgJSVyMTEgOyIKKy0JCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistCQkiYWRjcSAgICAkMCwgJSVyY3ggOyIKKy0JCSJhZGRxICAgKCUxKSwgICUlcjggOyIKKy0JCSJhZGNxICA4KCUxKSwgICUlcjkgOyIKKy0JCSJhZGNxIDE2KCUxKSwgJSVyMTAgOyIKKy0JCSJhZGNxIDI0KCUxKSwgJSVyMTEgOyIKKy0JCSJhZGNxICAgICAkMCwgJSVyY3ggOyIKKy0JCSJpbXVsICUlcmR4LCAlJXJjeCA7IiAvKiBjKkNbNF0sIGNmPTAgKi8KKy0JCSJhZGRxICUlcmN4LCAgJSVyOCA7IgorLQkJImFkY3EgICAgJDAsICAlJXI5IDsiCistCQkibW92cSAgJSVyOSwgIDgoJTApIDsiCistCQkiYWRjcSAgICAkMCwgJSVyMTAgOyIKKy0JCSJtb3ZxICUlcjEwLCAxNiglMCkgOyIKKy0JCSJhZGNxICAgICQwLCAlJXIxMSA7IgorLQkJIm1vdnEgJSVyMTEsIDI0KCUwKSA7IgorLQkJIm1vdiAgICAgJDAsICUlZWN4IDsiCistCQkiY21vdmMgJSVlZHgsICUlZWN4IDsiCistCQkiYWRkcSAlJXJjeCwgICUlcjggOyIKKy0JCSJtb3ZxICAlJXI4LCAgICglMCkgOyIKKy0KKy0JCSJtdWx4ICA5NiglMSksICAlJXI4LCAlJXIxMCA7IiAvKiBjKkNbNF0gKi8KKy0JCSJtdWx4IDEwNCglMSksICAlJXI5LCAlJXIxMSA7IiAvKiBjKkNbNV0gKi8KKy0JCSJhZGRxICUlcjEwLCAgJSVyOSA7IgorLQkJIm11bHggMTEyKCUxKSwgJSVyMTAsICUlcmF4IDsiIC8qIGMqQ1s2XSAqLworLQkJImFkY3EgJSVyMTEsICUlcjEwIDsiCistCQkibXVseCAxMjAoJTEpLCAlJXIxMSwgJSVyY3ggOyIgLyogYypDWzddICovCistCQkiYWRjcSAlJXJheCwgJSVyMTEgOyIKKy0JCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLQkJImFkY3EgICAgJDAsICUlcmN4IDsiCistCQkiYWRkcSA2NCglMSksICAlJXI4IDsiCistCQkiYWRjcSA3MiglMSksICAlJXI5IDsiCistCQkiYWRjcSA4MCglMSksICUlcjEwIDsiCistCQkiYWRjcSA4OCglMSksICUlcjExIDsiCistCQkiYWRjcSAgICAgJDAsICUlcmN4IDsiCistCQkiaW11bCAlJXJkeCwgJSVyY3ggOyIgLyogYypDWzRdLCBjZj0wICovCistCQkiYWRkcSAlJXJjeCwgICUlcjggOyIKKy0JCSJhZGNxICAgICQwLCAgJSVyOSA7IgorLQkJIm1vdnEgICUlcjksIDQwKCUwKSA7IgorLQkJImFkY3EgICAgJDAsICUlcjEwIDsiCistCQkibW92cSAlJXIxMCwgNDgoJTApIDsiCistCQkiYWRjcSAgICAkMCwgJSVyMTEgOyIKKy0JCSJtb3ZxICUlcjExLCA1NiglMCkgOyIKKy0JCSJtb3YgICAgICQwLCAlJWVjeCA7IgorLQkJImNtb3ZjICUlZWR4LCAlJWVjeCA7IgorLQkJImFkZHEgJSVyY3gsICAlJXI4IDsiCistCQkibW92cSAgJSVyOCwgMzIoJTApIDsiCistCQk6CistCQk6ICJyIihjKSwgInIiKGEpCistCQk6ICJtZW1vcnkiLCAiY2MiLCAiJXJheCIsICIlcmN4IiwgIiVyZHgiLCAiJXI4IiwgIiVyOSIsICIlcjEwIiwKKy0JCSAgIiVyMTEiKTsKKysJcmV0dXJuIGNhcnJ5X3I7CisgfQorIAorLXN0YXRpYyB2b2lkIG11bF8yNTZ4MjU2X2ludGVnZXJfYWR4KHU2NCAqY29uc3QgYywgY29uc3QgdTY0ICpjb25zdCBhLAorLQkJCQkgICAgY29uc3QgdTY0ICpjb25zdCBiKQorKy8qIENvbXB1dGVzIHRoZSBmaWVsZCBhZGRpdGlvbiBvZiB0d28gZmllbGQgZWxlbWVudHMgKi8KKytzdGF0aWMgaW5saW5lIHZvaWQgZmFkZCh1NjQgKm91dCwgY29uc3QgdTY0ICpmMSwgY29uc3QgdTY0ICpmMikKKyB7CisgCWFzbSB2b2xhdGlsZSgKKy0JCSJtb3ZxICAgKCUxKSwgJSVyZHg7ICIJLyogQVswXSAqLworLQkJIm11bHggICAoJTIpLCAgJSVyOCwgICUlcjk7ICIgLyogQVswXSpCWzBdICovCistCQkieG9ybCAlJXIxMGQsICUlcjEwZCA7IgorLQkJIm1vdnEgICUlcjgsICAoJTApIDsiCistCQkibXVseCAgOCglMiksICUlcjEwLCAlJXIxMTsgIiAvKiBBWzBdKkJbMV0gKi8KKy0JCSJhZG94ICAlJXI5LCAlJXIxMCA7IgorLQkJIm1vdnEgJSVyMTAsIDgoJTApIDsiCistCQkibXVseCAxNiglMiksICUlcjE1LCAlJXIxMzsgIiAvKiBBWzBdKkJbMl0gKi8KKy0JCSJhZG94ICUlcjExLCAlJXIxNSA7IgorLQkJIm11bHggMjQoJTIpLCAlJXIxNCwgJSVyZHg7ICIgLyogQVswXSpCWzNdICovCistCQkiYWRveCAlJXIxMywgJSVyMTQgOyIKKy0JCSJtb3ZxICQwLCAlJXJheCA7IgorLQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy0JCSJhZG94ICUlcmR4LCAlJXJheCA7IgorLQorLQkJIm1vdnEgIDgoJTEpLCAlJXJkeDsgIgkvKiBBWzFdICovCistCQkibXVseCAgICglMiksICAlJXI4LCAgJSVyOTsgIiAvKiBBWzFdKkJbMF0gKi8KKy0JCSJ4b3JsICUlcjEwZCwgJSVyMTBkIDsiCistCQkiYWRjeCA4KCUwKSwgICUlcjggOyIKKy0JCSJtb3ZxICAlJXI4LCAgOCglMCkgOyIKKy0JCSJtdWx4ICA4KCUyKSwgJSVyMTAsICUlcjExOyAiIC8qIEFbMV0qQlsxXSAqLworLQkJImFkb3ggICUlcjksICUlcjEwIDsiCistCQkiYWRjeCAlJXIxNSwgJSVyMTAgOyIKKy0JCSJtb3ZxICUlcjEwLCAxNiglMCkgOyIKKy0JCSJtdWx4IDE2KCUyKSwgJSVyMTUsICUlcjEzOyAiIC8qIEFbMV0qQlsyXSAqLworLQkJImFkb3ggJSVyMTEsICUlcjE1IDsiCistCQkiYWRjeCAlJXIxNCwgJSVyMTUgOyIKKy0JCSJtb3ZxICQwLCAlJXI4ICA7IgorLQkJIm11bHggMjQoJTIpLCAlJXIxNCwgJSVyZHg7ICIgLyogQVsxXSpCWzNdICovCistCQkiYWRveCAlJXIxMywgJSVyMTQgOyIKKy0JCSJhZGN4ICUlcmF4LCAlJXIxNCA7IgorLQkJIm1vdnEgJDAsICUlcmF4IDsiCistCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLQkJImFkb3ggJSVyZHgsICUlcmF4IDsiCistCQkiYWRjeCAgJSVyOCwgJSVyYXggOyIKKy0KKy0JCSJtb3ZxIDE2KCUxKSwgJSVyZHg7ICIJLyogQVsyXSAqLworLQkJIm11bHggICAoJTIpLCAgJSVyOCwgICUlcjk7ICIgLyogQVsyXSpCWzBdICovCistCQkieG9ybCAlJXIxMGQsICUlcjEwZCA7IgorLQkJImFkY3ggMTYoJTApLCAlJXI4IDsiCistCQkibW92cSAgJSVyOCwgMTYoJTApIDsiCistCQkibXVseCAgOCglMiksICUlcjEwLCAlJXIxMTsgIiAvKiBBWzJdKkJbMV0gKi8KKy0JCSJhZG94ICAlJXI5LCAlJXIxMCA7IgorLQkJImFkY3ggJSVyMTUsICUlcjEwIDsiCistCQkibW92cSAlJXIxMCwgMjQoJTApIDsiCistCQkibXVseCAxNiglMiksICUlcjE1LCAlJXIxMzsgIiAvKiBBWzJdKkJbMl0gKi8KKy0JCSJhZG94ICUlcjExLCAlJXIxNSA7IgorLQkJImFkY3ggJSVyMTQsICUlcjE1IDsiCistCQkibW92cSAkMCwgJSVyOCAgOyIKKy0JCSJtdWx4IDI0KCUyKSwgJSVyMTQsICUlcmR4OyAiIC8qIEFbMl0qQlszXSAqLworLQkJImFkb3ggJSVyMTMsICUlcjE0IDsiCistCQkiYWRjeCAlJXJheCwgJSVyMTQgOyIKKy0JCSJtb3ZxICQwLCAlJXJheCA7IgorLQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy0JCSJhZG94ICUlcmR4LCAlJXJheCA7IgorLQkJImFkY3ggICUlcjgsICUlcmF4IDsiCistCistCQkibW92cSAyNCglMSksICUlcmR4OyAiCS8qIEFbM10gKi8KKy0JCSJtdWx4ICAgKCUyKSwgICUlcjgsICAlJXI5OyAiIC8qIEFbM10qQlswXSAqLworLQkJInhvcmwgJSVyMTBkLCAlJXIxMGQgOyIKKy0JCSJhZGN4IDI0KCUwKSwgJSVyOCA7IgorLQkJIm1vdnEgICUlcjgsIDI0KCUwKSA7IgorLQkJIm11bHggIDgoJTIpLCAlJXIxMCwgJSVyMTE7ICIgLyogQVszXSpCWzFdICovCistCQkiYWRveCAgJSVyOSwgJSVyMTAgOyIKKy0JCSJhZGN4ICUlcjE1LCAlJXIxMCA7IgorLQkJIm1vdnEgJSVyMTAsIDMyKCUwKSA7IgorLQkJIm11bHggMTYoJTIpLCAlJXIxNSwgJSVyMTM7ICIgLyogQVszXSpCWzJdICovCistCQkiYWRveCAlJXIxMSwgJSVyMTUgOyIKKy0JCSJhZGN4ICUlcjE0LCAlJXIxNSA7IgorLQkJIm1vdnEgJSVyMTUsIDQwKCUwKSA7IgorLQkJIm1vdnEgJDAsICUlcjggIDsiCistCQkibXVseCAyNCglMiksICUlcjE0LCAlJXJkeDsgIiAvKiBBWzNdKkJbM10gKi8KKy0JCSJhZG94ICUlcjEzLCAlJXIxNCA7IgorLQkJImFkY3ggJSVyYXgsICUlcjE0IDsiCistCQkibW92cSAlJXIxNCwgNDgoJTApIDsiCistCQkibW92cSAkMCwgJSVyYXggOyIKKy0JCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistCQkiYWRveCAlJXJkeCwgJSVyYXggOyIKKy0JCSJhZGN4ICAlJXI4LCAlJXJheCA7IgorLQkJIm1vdnEgJSVyYXgsIDU2KCUwKSA7IgorLQkJOgorLQkJOiAiciIoYyksICJyIihhKSwgInIiKGIpCistCQk6ICJtZW1vcnkiLCAiY2MiLCAiJXJheCIsICIlcmR4IiwgIiVyOCIsICIlcjkiLCAiJXIxMCIsICIlcjExIiwKKy0JCSAgIiVyMTMiLCAiJXIxNCIsICIlcjE1Iik7CisrCQkvKiBDb21wdXRlIHRoZSByYXcgYWRkaXRpb24gb2YgZjEgKyBmMiAqLworKwkJIiAgbW92cSAwKCUwKSwgJSVyODsiCisrCQkiICBhZGRxIDAoJTIpLCAlJXI4OyIKKysJCSIgIG1vdnEgOCglMCksICUlcjk7IgorKwkJIiAgYWRjeHEgOCglMiksICUlcjk7IgorKwkJIiAgbW92cSAxNiglMCksICUlcjEwOyIKKysJCSIgIGFkY3hxIDE2KCUyKSwgJSVyMTA7IgorKwkJIiAgbW92cSAyNCglMCksICUlcjExOyIKKysJCSIgIGFkY3hxIDI0KCUyKSwgJSVyMTE7IgorKworKwkJLyogV3JhcCB0aGUgcmVzdWx0IGJhY2sgaW50byB0aGUgZmllbGQgKi8KKysKKysJCS8qIFN0ZXAgMTogQ29tcHV0ZSBjYXJyeSozOCAqLworKwkJIiAgbW92ICQwLCAlJXJheDsiCisrCQkiICBtb3YgJDM4LCAlMDsiCisrCQkiICBjbW92YyAlMCwgJSVyYXg7IgorKworKwkJLyogU3RlcCAyOiBBZGQgY2FycnkqMzggdG8gdGhlIG9yaWdpbmFsIHN1bSAqLworKwkJIiAgeG9yICUlcmN4LCAlJXJjeDsiCisrCQkiICBhZGQgJSVyYXgsICUlcjg7IgorKwkJIiAgYWRjeCAlJXJjeCwgJSVyOTsiCisrCQkiICBtb3ZxICUlcjksIDgoJTEpOyIKKysJCSIgIGFkY3ggJSVyY3gsICUlcjEwOyIKKysJCSIgIG1vdnEgJSVyMTAsIDE2KCUxKTsiCisrCQkiICBhZGN4ICUlcmN4LCAlJXIxMTsiCisrCQkiICBtb3ZxICUlcjExLCAyNCglMSk7IgorKworKwkJLyogU3RlcCAzOiBGb2xkIHRoZSBjYXJyeSBiaXQgYmFjayBpbjsgZ3VhcmFudGVlZCBub3QgdG8gY2FycnkgYXQgdGhpcyBwb2ludCAqLworKwkJIiAgbW92ICQwLCAlJXJheDsiCisrCQkiICBjbW92YyAlMCwgJSVyYXg7IgorKwkJIiAgYWRkICUlcmF4LCAlJXI4OyIKKysJCSIgIG1vdnEgJSVyOCwgMCglMSk7IgorKwk6ICIrJnIiIChmMikKKysJOiAiciIgKG91dCksICJyIiAoZjEpCisrCTogIiVyYXgiLCAiJXJjeCIsICIlcjgiLCAiJXI5IiwgIiVyMTAiLCAiJXIxMSIsICJtZW1vcnkiLCAiY2MiCisrCSk7CisgfQorIAorLXN0YXRpYyB2b2lkIG11bF8yNTZ4MjU2X2ludGVnZXJfYm1pMih1NjQgKmNvbnN0IGMsIGNvbnN0IHU2NCAqY29uc3QgYSwKKy0JCQkJICAgICBjb25zdCB1NjQgKmNvbnN0IGIpCisrLyogQ29tcHV0ZXMgdGhlIGZpZWxkIHN1YnN0cmFjdGlvbiBvZiB0d28gZmllbGQgZWxlbWVudHMgKi8KKytzdGF0aWMgaW5saW5lIHZvaWQgZnN1Yih1NjQgKm91dCwgY29uc3QgdTY0ICpmMSwgY29uc3QgdTY0ICpmMikKKyB7CisgCWFzbSB2b2xhdGlsZSgKKy0JCSJtb3ZxICAgKCUxKSwgJSVyZHg7ICIJLyogQVswXSAqLworLQkJIm11bHggICAoJTIpLCAgJSVyOCwgJSVyMTU7ICIgLyogQVswXSpCWzBdICovCistCQkibW92cSAlJXI4LCAgKCUwKSA7IgorLQkJIm11bHggIDgoJTIpLCAlJXIxMCwgJSVyYXg7ICIgLyogQVswXSpCWzFdICovCistCQkiYWRkcSAlJXIxMCwgJSVyMTUgOyIKKy0JCSJtdWx4IDE2KCUyKSwgICUlcjgsICUlcmJ4OyAiIC8qIEFbMF0qQlsyXSAqLworLQkJImFkY3EgICUlcjgsICUlcmF4IDsiCistCQkibXVseCAyNCglMiksICUlcjEwLCAlJXJjeDsgIiAvKiBBWzBdKkJbM10gKi8KKy0JCSJhZGNxICUlcjEwLCAlJXJieCA7IgorLQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy0JCSJhZGNxICAgICQwLCAlJXJjeCA7IgorLQorLQkJIm1vdnEgIDgoJTEpLCAlJXJkeDsgIgkvKiBBWzFdICovCistCQkibXVseCAgICglMiksICAlJXI4LCAgJSVyOTsgIiAvKiBBWzFdKkJbMF0gKi8KKy0JCSJhZGRxICUlcjE1LCAgJSVyOCA7IgorLQkJIm1vdnEgJSVyOCwgOCglMCkgOyIKKy0JCSJtdWx4ICA4KCUyKSwgJSVyMTAsICUlcjExOyAiIC8qIEFbMV0qQlsxXSAqLworLQkJImFkY3EgJSVyMTAsICAlJXI5IDsiCistCQkibXVseCAxNiglMiksICAlJXI4LCAlJXIxMzsgIiAvKiBBWzFdKkJbMl0gKi8KKy0JCSJhZGNxICAlJXI4LCAlJXIxMSA7IgorLQkJIm11bHggMjQoJTIpLCAlJXIxMCwgJSVyMTU7ICIgLyogQVsxXSpCWzNdICovCistCQkiYWRjcSAlJXIxMCwgJSVyMTMgOyIKKy0JCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistCQkiYWRjcSAgICAkMCwgJSVyMTUgOyIKKy0KKy0JCSJhZGRxICAlJXI5LCAlJXJheCA7IgorLQkJImFkY3EgJSVyMTEsICUlcmJ4IDsiCistCQkiYWRjcSAlJXIxMywgJSVyY3ggOyIKKy0JCSJhZGNxICAgICQwLCAlJXIxNSA7IgorLQorLQkJIm1vdnEgMTYoJTEpLCAlJXJkeDsgIgkvKiBBWzJdICovCistCQkibXVseCAgICglMiksICAlJXI4LCAgJSVyOTsgIiAvKiBBWzJdKkJbMF0gKi8KKy0JCSJhZGRxICUlcmF4LCAgJSVyOCA7IgorLQkJIm1vdnEgJSVyOCwgMTYoJTApIDsiCistCQkibXVseCAgOCglMiksICUlcjEwLCAlJXIxMTsgIiAvKiBBWzJdKkJbMV0gKi8KKy0JCSJhZGNxICUlcjEwLCAgJSVyOSA7IgorLQkJIm11bHggMTYoJTIpLCAgJSVyOCwgJSVyMTM7ICIgLyogQVsyXSpCWzJdICovCistCQkiYWRjcSAgJSVyOCwgJSVyMTEgOyIKKy0JCSJtdWx4IDI0KCUyKSwgJSVyMTAsICUlcmF4OyAiIC8qIEFbMl0qQlszXSAqLworLQkJImFkY3EgJSVyMTAsICUlcjEzIDsiCistCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLQkJImFkY3EgICAgJDAsICUlcmF4IDsiCistCistCQkiYWRkcSAgJSVyOSwgJSVyYnggOyIKKy0JCSJhZGNxICUlcjExLCAlJXJjeCA7IgorLQkJImFkY3EgJSVyMTMsICUlcjE1IDsiCistCQkiYWRjcSAgICAkMCwgJSVyYXggOyIKKy0KKy0JCSJtb3ZxIDI0KCUxKSwgJSVyZHg7ICIJLyogQVszXSAqLworLQkJIm11bHggICAoJTIpLCAgJSVyOCwgICUlcjk7ICIgLyogQVszXSpCWzBdICovCistCQkiYWRkcSAlJXJieCwgICUlcjggOyIKKy0JCSJtb3ZxICUlcjgsIDI0KCUwKSA7IgorLQkJIm11bHggIDgoJTIpLCAlJXIxMCwgJSVyMTE7ICIgLyogQVszXSpCWzFdICovCistCQkiYWRjcSAlJXIxMCwgICUlcjkgOyIKKy0JCSJtdWx4IDE2KCUyKSwgICUlcjgsICUlcjEzOyAiIC8qIEFbM10qQlsyXSAqLworLQkJImFkY3EgICUlcjgsICUlcjExIDsiCistCQkibXVseCAyNCglMiksICUlcjEwLCAlJXJieDsgIiAvKiBBWzNdKkJbM10gKi8KKy0JCSJhZGNxICUlcjEwLCAlJXIxMyA7IgorLQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy0JCSJhZGNxICAgICQwLCAlJXJieCA7IgorLQorLQkJImFkZHEgICUlcjksICUlcmN4IDsiCistCQkibW92cSAlJXJjeCwgMzIoJTApIDsiCistCQkiYWRjcSAlJXIxMSwgJSVyMTUgOyIKKy0JCSJtb3ZxICUlcjE1LCA0MCglMCkgOyIKKy0JCSJhZGNxICUlcjEzLCAlJXJheCA7IgorLQkJIm1vdnEgJSVyYXgsIDQ4KCUwKSA7IgorLQkJImFkY3EgICAgJDAsICUlcmJ4IDsiCistCQkibW92cSAlJXJieCwgNTYoJTApIDsiCistCQk6CistCQk6ICJyIihjKSwgInIiKGEpLCAiciIoYikKKy0JCTogIm1lbW9yeSIsICJjYyIsICIlcmF4IiwgIiVyYngiLCAiJXJjeCIsICIlcmR4IiwgIiVyOCIsICIlcjkiLAorLQkJICAiJXIxMCIsICIlcjExIiwgIiVyMTMiLCAiJXIxNSIpOworKwkJLyogQ29tcHV0ZSB0aGUgcmF3IHN1YnN0cmFjdGlvbiBvZiBmMS1mMiAqLworKwkJIiAgbW92cSAwKCUxKSwgJSVyODsiCisrCQkiICBzdWJxIDAoJTIpLCAlJXI4OyIKKysJCSIgIG1vdnEgOCglMSksICUlcjk7IgorKwkJIiAgc2JicSA4KCUyKSwgJSVyOTsiCisrCQkiICBtb3ZxIDE2KCUxKSwgJSVyMTA7IgorKwkJIiAgc2JicSAxNiglMiksICUlcjEwOyIKKysJCSIgIG1vdnEgMjQoJTEpLCAlJXIxMTsiCisrCQkiICBzYmJxIDI0KCUyKSwgJSVyMTE7IgorKworKwkJLyogV3JhcCB0aGUgcmVzdWx0IGJhY2sgaW50byB0aGUgZmllbGQgKi8KKysKKysJCS8qIFN0ZXAgMTogQ29tcHV0ZSBjYXJyeSozOCAqLworKwkJIiAgbW92ICQwLCAlJXJheDsiCisrCQkiICBtb3YgJDM4LCAlJXJjeDsiCisrCQkiICBjbW92YyAlJXJjeCwgJSVyYXg7IgorKworKwkJLyogU3RlcCAyOiBTdWJzdHJhY3QgY2FycnkqMzggZnJvbSB0aGUgb3JpZ2luYWwgZGlmZmVyZW5jZSAqLworKwkJIiAgc3ViICUlcmF4LCAlJXI4OyIKKysJCSIgIHNiYiAkMCwgJSVyOTsiCisrCQkiICBzYmIgJDAsICUlcjEwOyIKKysJCSIgIHNiYiAkMCwgJSVyMTE7IgorKworKwkJLyogU3RlcCAzOiBGb2xkIHRoZSBjYXJyeSBiaXQgYmFjayBpbjsgZ3VhcmFudGVlZCBub3QgdG8gY2FycnkgYXQgdGhpcyBwb2ludCAqLworKwkJIiAgbW92ICQwLCAlJXJheDsiCisrCQkiICBjbW92YyAlJXJjeCwgJSVyYXg7IgorKwkJIiAgc3ViICUlcmF4LCAlJXI4OyIKKysKKysJCS8qIFN0b3JlIHRoZSByZXN1bHQgKi8KKysJCSIgIG1vdnEgJSVyOCwgMCglMCk7IgorKwkJIiAgbW92cSAlJXI5LCA4KCUwKTsiCisrCQkiICBtb3ZxICUlcjEwLCAxNiglMCk7IgorKwkJIiAgbW92cSAlJXIxMSwgMjQoJTApOyIKKysJOgorKwk6ICJyIiAob3V0KSwgInIiIChmMSksICJyIiAoZjIpCisrCTogIiVyYXgiLCAiJXJjeCIsICIlcjgiLCAiJXI5IiwgIiVyMTAiLCAiJXIxMSIsICJtZW1vcnkiLCAiY2MiCisrCSk7CisgfQorIAorLXN0YXRpYyB2b2lkIHNxcl8yNTZ4MjU2X2ludGVnZXJfYWR4KHU2NCAqY29uc3QgYywgY29uc3QgdTY0ICpjb25zdCBhKQorKy8qIENvbXB1dGVzIGEgZmllbGQgbXVsdGlwbGljYXRpb246IG91dCA8LSBmMSAqIGYyCisrICogVXNlcyB0aGUgOC1lbGVtZW50IGJ1ZmZlciB0bXAgZm9yIGludGVybWVkaWF0ZSByZXN1bHRzICovCisrc3RhdGljIGlubGluZSB2b2lkIGZtdWwodTY0ICpvdXQsIGNvbnN0IHU2NCAqZjEsIGNvbnN0IHU2NCAqZjIsIHU2NCAqdG1wKQorIHsKKyAJYXNtIHZvbGF0aWxlKAorLQkJIm1vdnEgICAoJTEpLCAlJXJkeCAgICAgICAgOyIgLyogQVswXSAgICAgICovCistCQkibXVseCAgOCglMSksICAlJXI4LCAlJXIxNCA7IiAvKiBBWzFdKkFbMF0gKi8KKy0JCSJ4b3JsICUlcjE1ZCwgJSVyMTVkOyIKKy0JCSJtdWx4IDE2KCUxKSwgICUlcjksICUlcjEwIDsiIC8qIEFbMl0qQVswXSAqLworLQkJImFkY3ggJSVyMTQsICAlJXI5IDsiCistCQkibXVseCAyNCglMSksICUlcmF4LCAlJXJjeCA7IiAvKiBBWzNdKkFbMF0gKi8KKy0JCSJhZGN4ICUlcmF4LCAlJXIxMCA7IgorLQkJIm1vdnEgMjQoJTEpLCAlJXJkeCAgICAgICAgOyIgLyogQVszXSAgICAgICovCistCQkibXVseCAgOCglMSksICUlcjExLCAlJXJieCA7IiAvKiBBWzFdKkFbM10gKi8KKy0JCSJhZGN4ICUlcmN4LCAlJXIxMSA7IgorLQkJIm11bHggMTYoJTEpLCAlJXJheCwgJSVyMTMgOyIgLyogQVsyXSpBWzNdICovCistCQkiYWRjeCAlJXJheCwgJSVyYnggOyIKKy0JCSJtb3ZxICA4KCUxKSwgJSVyZHggICAgICAgIDsiIC8qIEFbMV0gICAgICAqLworLQkJImFkY3ggJSVyMTUsICUlcjEzIDsiCistCQkibXVseCAxNiglMSksICUlcmF4LCAlJXJjeCA7IiAvKiBBWzJdKkFbMV0gKi8KKy0JCSJtb3ZxICAgICQwLCAlJXIxNCA7IgorLQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy0JCSJhZGN4ICUlcjE1LCAlJXIxNCA7IgorLQorLQkJInhvcmwgJSVyMTVkLCAlJXIxNWQ7IgorLQkJImFkb3ggJSVyYXgsICUlcjEwIDsiCistCQkiYWRjeCAgJSVyOCwgICUlcjggOyIKKy0JCSJhZG94ICUlcmN4LCAlJXIxMSA7IgorLQkJImFkY3ggICUlcjksICAlJXI5IDsiCistCQkiYWRveCAlJXIxNSwgJSVyYnggOyIKKy0JCSJhZGN4ICUlcjEwLCAlJXIxMCA7IgorLQkJImFkb3ggJSVyMTUsICUlcjEzIDsiCistCQkiYWRjeCAlJXIxMSwgJSVyMTEgOyIKKy0JCSJhZG94ICUlcjE1LCAlJXIxNCA7IgorLQkJImFkY3ggJSVyYngsICUlcmJ4IDsiCistCQkiYWRjeCAlJXIxMywgJSVyMTMgOyIKKy0JCSJhZGN4ICUlcjE0LCAlJXIxNCA7IgorLQorLQkJIm1vdnEgICAoJTEpLCAlJXJkeCA7IgorLQkJIm11bHggJSVyZHgsICUlcmF4LCAlJXJjeCA7IiAvKiBBWzBdXjIgKi8KKy0JCS8qKioqKioqKioqKioqKioqKioqLworLQkJIm1vdnEgJSVyYXgsICAwKCUwKSA7IgorLQkJImFkZHEgJSVyY3gsICAlJXI4IDsiCistCQkibW92cSAgJSVyOCwgIDgoJTApIDsiCistCQkibW92cSAgOCglMSksICUlcmR4IDsiCistCQkibXVseCAlJXJkeCwgJSVyYXgsICUlcmN4IDsiIC8qIEFbMV1eMiAqLworLQkJImFkY3EgJSVyYXgsICAlJXI5IDsiCistCQkibW92cSAgJSVyOSwgMTYoJTApIDsiCistCQkiYWRjcSAlJXJjeCwgJSVyMTAgOyIKKy0JCSJtb3ZxICUlcjEwLCAyNCglMCkgOyIKKy0JCSJtb3ZxIDE2KCUxKSwgJSVyZHggOyIKKy0JCSJtdWx4ICUlcmR4LCAlJXJheCwgJSVyY3ggOyIgLyogQVsyXV4yICovCistCQkiYWRjcSAlJXJheCwgJSVyMTEgOyIKKy0JCSJtb3ZxICUlcjExLCAzMiglMCkgOyIKKy0JCSJhZGNxICUlcmN4LCAlJXJieCA7IgorLQkJIm1vdnEgJSVyYngsIDQwKCUwKSA7IgorLQkJIm1vdnEgMjQoJTEpLCAlJXJkeCA7IgorLQkJIm11bHggJSVyZHgsICUlcmF4LCAlJXJjeCA7IiAvKiBBWzNdXjIgKi8KKy0JCSJhZGNxICUlcmF4LCAlJXIxMyA7IgorLQkJIm1vdnEgJSVyMTMsIDQ4KCUwKSA7IgorLQkJImFkY3EgJSVyY3gsICUlcjE0IDsiCistCQkibW92cSAlJXIxNCwgNTYoJTApIDsiCistCQk6CistCQk6ICJyIihjKSwgInIiKGEpCistCQk6ICJtZW1vcnkiLCAiY2MiLCAiJXJheCIsICIlcmJ4IiwgIiVyY3giLCAiJXJkeCIsICIlcjgiLCAiJXI5IiwKKy0JCSAgIiVyMTAiLCAiJXIxMSIsICIlcjEzIiwgIiVyMTQiLCAiJXIxNSIpOworLX0KKysJCS8qIENvbXB1dGUgdGhlIHJhdyBtdWx0aXBsaWNhdGlvbjogdG1wIDwtIHNyYzEgKiBzcmMyICovCisgCistc3RhdGljIHZvaWQgc3FyXzI1NngyNTZfaW50ZWdlcl9ibWkyKHU2NCAqY29uc3QgYywgY29uc3QgdTY0ICpjb25zdCBhKQorLXsKKy0JYXNtIHZvbGF0aWxlKAorLQkJIm1vdnEgIDgoJTEpLCAlJXJkeCAgICAgICAgOyIgLyogQVsxXSAgICAgICovCistCQkibXVseCAgICglMSksICAlJXI4LCAgJSVyOSA7IiAvKiBBWzBdKkFbMV0gKi8KKy0JCSJtdWx4IDE2KCUxKSwgJSVyMTAsICUlcjExIDsiIC8qIEFbMl0qQVsxXSAqLworLQkJIm11bHggMjQoJTEpLCAlJXJjeCwgJSVyMTQgOyIgLyogQVszXSpBWzFdICovCistCistCQkibW92cSAxNiglMSksICUlcmR4ICAgICAgICA7IiAvKiBBWzJdICAgICAgKi8KKy0JCSJtdWx4IDI0KCUxKSwgJSVyMTUsICUlcjEzIDsiIC8qIEFbM10qQVsyXSAqLworLQkJIm11bHggICAoJTEpLCAlJXJheCwgJSVyZHggOyIgLyogQVswXSpBWzJdICovCistCistCQkiYWRkcSAlJXJheCwgICUlcjkgOyIKKy0JCSJhZGNxICUlcmR4LCAlJXIxMCA7IgorLQkJImFkY3EgJSVyY3gsICUlcjExIDsiCistCQkiYWRjcSAlJXIxNCwgJSVyMTUgOyIKKy0JCSJhZGNxICAgICQwLCAlJXIxMyA7IgorLQkJIm1vdnEgICAgJDAsICUlcjE0IDsiCistCQkiYWRjcSAgICAkMCwgJSVyMTQgOyIKKy0KKy0JCSJtb3ZxICAgKCUxKSwgJSVyZHggICAgICAgIDsiIC8qIEFbMF0gICAgICAqLworLQkJIm11bHggMjQoJTEpLCAlJXJheCwgJSVyY3ggOyIgLyogQVswXSpBWzNdICovCistCistCQkiYWRkcSAlJXJheCwgJSVyMTAgOyIKKy0JCSJhZGNxICUlcmN4LCAlJXIxMSA7IgorLQkJImFkY3EgICAgJDAsICUlcjE1IDsiCistCQkiYWRjcSAgICAkMCwgJSVyMTMgOyIKKy0JCSJhZGNxICAgICQwLCAlJXIxNCA7IgorLQorLQkJInNobGRxICQxLCAlJXIxMywgJSVyMTQgOyIKKy0JCSJzaGxkcSAkMSwgJSVyMTUsICUlcjEzIDsiCistCQkic2hsZHEgJDEsICUlcjExLCAlJXIxNSA7IgorLQkJInNobGRxICQxLCAlJXIxMCwgJSVyMTEgOyIKKy0JCSJzaGxkcSAkMSwgICUlcjksICUlcjEwIDsiCistCQkic2hsZHEgJDEsICAlJXI4LCAgJSVyOSA7IgorLQkJInNobHEgICQxLCAgJSVyOCAgICAgICAgOyIKKy0KKy0JCS8qKioqKioqKioqKioqKioqKioqLworLQkJIm11bHggJSVyZHgsICUlcmF4LCAlJXJjeCA7IiAvKiBBWzBdXjIgKi8KKy0JCS8qKioqKioqKioqKioqKioqKioqLworLQkJIm1vdnEgJSVyYXgsICAwKCUwKSA7IgorLQkJImFkZHEgJSVyY3gsICAlJXI4IDsiCistCQkibW92cSAgJSVyOCwgIDgoJTApIDsiCistCQkibW92cSAgOCglMSksICUlcmR4IDsiCistCQkibXVseCAlJXJkeCwgJSVyYXgsICUlcmN4IDsiIC8qIEFbMV1eMiAqLworLQkJImFkY3EgJSVyYXgsICAlJXI5IDsiCistCQkibW92cSAgJSVyOSwgMTYoJTApIDsiCistCQkiYWRjcSAlJXJjeCwgJSVyMTAgOyIKKy0JCSJtb3ZxICUlcjEwLCAyNCglMCkgOyIKKy0JCSJtb3ZxIDE2KCUxKSwgJSVyZHggOyIKKy0JCSJtdWx4ICUlcmR4LCAlJXJheCwgJSVyY3ggOyIgLyogQVsyXV4yICovCistCQkiYWRjcSAlJXJheCwgJSVyMTEgOyIKKy0JCSJtb3ZxICUlcjExLCAzMiglMCkgOyIKKy0JCSJhZGNxICUlcmN4LCAlJXIxNSA7IgorLQkJIm1vdnEgJSVyMTUsIDQwKCUwKSA7IgorLQkJIm1vdnEgMjQoJTEpLCAlJXJkeCA7IgorLQkJIm11bHggJSVyZHgsICUlcmF4LCAlJXJjeCA7IiAvKiBBWzNdXjIgKi8KKy0JCSJhZGNxICUlcmF4LCAlJXIxMyA7IgorLQkJIm1vdnEgJSVyMTMsIDQ4KCUwKSA7IgorLQkJImFkY3EgJSVyY3gsICUlcjE0IDsiCistCQkibW92cSAlJXIxNCwgNTYoJTApIDsiCistCQk6CistCQk6ICJyIihjKSwgInIiKGEpCistCQk6ICJtZW1vcnkiLCAiY2MiLCAiJXJheCIsICIlcmN4IiwgIiVyZHgiLCAiJXI4IiwgIiVyOSIsICIlcjEwIiwKKy0JCSAgIiVyMTEiLCAiJXIxMyIsICIlcjE0IiwgIiVyMTUiKTsKKysJCS8qIENvbXB1dGUgc3JjMVswXSAqIHNyYzIgKi8KKysJCSIgIG1vdnEgMCglMSksICUlcmR4OyIKKysJCSIgIG11bHhxIDAoJTMpLCAlJXI4LCAlJXI5OyIgICAgICAgIiAgeG9yICUlcjEwLCAlJXIxMDsiICAgICAiICBtb3ZxICUlcjgsIDAoJTApOyIKKysJCSIgIG11bHhxIDgoJTMpLCAlJXIxMCwgJSVyMTE7IiAgICAgIiAgYWRveCAlJXI5LCAlJXIxMDsiICAgICAiICBtb3ZxICUlcjEwLCA4KCUwKTsiCisrCQkiICBtdWx4cSAxNiglMyksICUlcjEyLCAlJXIxMzsiICAgICIgIGFkb3ggJSVyMTEsICUlcjEyOyIKKysJCSIgIG11bHhxIDI0KCUzKSwgJSVyMTQsICUlcmR4OyIgICAgIiAgYWRveCAlJXIxMywgJSVyMTQ7IiAgICAiICBtb3YgJDAsICUlcmF4OyIKKysJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgYWRveCAlJXJkeCwgJSVyYXg7IgorKwkJLyogQ29tcHV0ZSBzcmMxWzFdICogc3JjMiAqLworKwkJIiAgbW92cSA4KCUxKSwgJSVyZHg7IgorKwkJIiAgbXVseHEgMCglMyksICUlcjgsICUlcjk7IiAgICAgICAiICB4b3IgJSVyMTAsICUlcjEwOyIgICAgICIgIGFkY3hxIDgoJTApLCAlJXI4OyIgICAgIiAgbW92cSAlJXI4LCA4KCUwKTsiCisrCQkiICBtdWx4cSA4KCUzKSwgJSVyMTAsICUlcjExOyIgICAgICIgIGFkb3ggJSVyOSwgJSVyMTA7IiAgICAgIiAgYWRjeCAlJXIxMiwgJSVyMTA7IiAgICAiICBtb3ZxICUlcjEwLCAxNiglMCk7IgorKwkJIiAgbXVseHEgMTYoJTMpLCAlJXIxMiwgJSVyMTM7IiAgICAiICBhZG94ICUlcjExLCAlJXIxMjsiICAgICIgIGFkY3ggJSVyMTQsICUlcjEyOyIgICAgIiAgbW92ICQwLCAlJXI4OyIKKysJCSIgIG11bHhxIDI0KCUzKSwgJSVyMTQsICUlcmR4OyIgICAgIiAgYWRveCAlJXIxMywgJSVyMTQ7IiAgICAiICBhZGN4ICUlcmF4LCAlJXIxNDsiICAgICIgIG1vdiAkMCwgJSVyYXg7IgorKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBhZG94ICUlcmR4LCAlJXJheDsiICAgICIgIGFkY3ggJSVyOCwgJSVyYXg7IgorKwkJLyogQ29tcHV0ZSBzcmMxWzJdICogc3JjMiAqLworKwkJIiAgbW92cSAxNiglMSksICUlcmR4OyIKKysJCSIgIG11bHhxIDAoJTMpLCAlJXI4LCAlJXI5OyIgICAgICAgIiAgeG9yICUlcjEwLCAlJXIxMDsiICAgICIgIGFkY3hxIDE2KCUwKSwgJSVyODsiICAgICIgIG1vdnEgJSVyOCwgMTYoJTApOyIKKysJCSIgIG11bHhxIDgoJTMpLCAlJXIxMCwgJSVyMTE7IiAgICAgIiAgYWRveCAlJXI5LCAlJXIxMDsiICAgICAiICBhZGN4ICUlcjEyLCAlJXIxMDsiICAgICIgIG1vdnEgJSVyMTAsIDI0KCUwKTsiCisrCQkiICBtdWx4cSAxNiglMyksICUlcjEyLCAlJXIxMzsiICAgICIgIGFkb3ggJSVyMTEsICUlcjEyOyIgICAgIiAgYWRjeCAlJXIxNCwgJSVyMTI7IiAgICAiICBtb3YgJDAsICUlcjg7IgorKwkJIiAgbXVseHEgMjQoJTMpLCAlJXIxNCwgJSVyZHg7IiAgICAiICBhZG94ICUlcjEzLCAlJXIxNDsiICAgICIgIGFkY3ggJSVyYXgsICUlcjE0OyIgICAgIiAgbW92ICQwLCAlJXJheDsiCisrCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGFkb3ggJSVyZHgsICUlcmF4OyIgICAgIiAgYWRjeCAlJXI4LCAlJXJheDsiCisrCQkvKiBDb21wdXRlIHNyYzFbM10gKiBzcmMyICovCisrCQkiICBtb3ZxIDI0KCUxKSwgJSVyZHg7IgorKwkJIiAgbXVseHEgMCglMyksICUlcjgsICUlcjk7IiAgICAgICAiICB4b3IgJSVyMTAsICUlcjEwOyIgICAgIiAgYWRjeHEgMjQoJTApLCAlJXI4OyIgICAgIiAgbW92cSAlJXI4LCAyNCglMCk7IgorKwkJIiAgbXVseHEgOCglMyksICUlcjEwLCAlJXIxMTsiICAgICAiICBhZG94ICUlcjksICUlcjEwOyIgICAgICIgIGFkY3ggJSVyMTIsICUlcjEwOyIgICAgIiAgbW92cSAlJXIxMCwgMzIoJTApOyIKKysJCSIgIG11bHhxIDE2KCUzKSwgJSVyMTIsICUlcjEzOyIgICAgIiAgYWRveCAlJXIxMSwgJSVyMTI7IiAgICAiICBhZGN4ICUlcjE0LCAlJXIxMjsiICAgICIgIG1vdnEgJSVyMTIsIDQwKCUwKTsiICAgICIgIG1vdiAkMCwgJSVyODsiCisrCQkiICBtdWx4cSAyNCglMyksICUlcjE0LCAlJXJkeDsiICAgICIgIGFkb3ggJSVyMTMsICUlcjE0OyIgICAgIiAgYWRjeCAlJXJheCwgJSVyMTQ7IiAgICAiICBtb3ZxICUlcjE0LCA0OCglMCk7IiAgICAiICBtb3YgJDAsICUlcmF4OyIKKysJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgYWRveCAlJXJkeCwgJSVyYXg7IiAgICAiICBhZGN4ICUlcjgsICUlcmF4OyIgICAgICIgIG1vdnEgJSVyYXgsIDU2KCUwKTsiCisrCQkvKiBMaW5lIHVwIHBvaW50ZXJzICovCisrCQkiICBtb3YgJTAsICUxOyIKKysJCSIgIG1vdiAlMiwgJTA7IgorKworKwkJLyogV3JhcCB0aGUgcmVzdWx0IGJhY2sgaW50byB0aGUgZmllbGQgKi8KKysKKysJCS8qIFN0ZXAgMTogQ29tcHV0ZSBkc3QgKyBjYXJyeSA9PSB0bXBfaGkgKiAzOCArIHRtcF9sbyAqLworKwkJIiAgbW92ICQzOCwgJSVyZHg7IgorKwkJIiAgbXVseHEgMzIoJTEpLCAlJXI4LCAlJXIxMzsiCisrCQkiICB4b3IgJTMsICUzOyIKKysJCSIgIGFkb3hxIDAoJTEpLCAlJXI4OyIKKysJCSIgIG11bHhxIDQwKCUxKSwgJSVyOSwgJSVyMTI7IgorKwkJIiAgYWRjeCAlJXIxMywgJSVyOTsiCisrCQkiICBhZG94cSA4KCUxKSwgJSVyOTsiCisrCQkiICBtdWx4cSA0OCglMSksICUlcjEwLCAlJXIxMzsiCisrCQkiICBhZGN4ICUlcjEyLCAlJXIxMDsiCisrCQkiICBhZG94cSAxNiglMSksICUlcjEwOyIKKysJCSIgIG11bHhxIDU2KCUxKSwgJSVyMTEsICUlcmF4OyIKKysJCSIgIGFkY3ggJSVyMTMsICUlcjExOyIKKysJCSIgIGFkb3hxIDI0KCUxKSwgJSVyMTE7IgorKwkJIiAgYWRjeCAlMywgJSVyYXg7IgorKwkJIiAgYWRveCAlMywgJSVyYXg7IgorKwkJIiAgaW11bCAlJXJkeCwgJSVyYXg7IgorKworKwkJLyogU3RlcCAyOiBGb2xkIHRoZSBjYXJyeSBiYWNrIGludG8gZHN0ICovCisrCQkiICBhZGQgJSVyYXgsICUlcjg7IgorKwkJIiAgYWRjeCAlMywgJSVyOTsiCisrCQkiICBtb3ZxICUlcjksIDgoJTApOyIKKysJCSIgIGFkY3ggJTMsICUlcjEwOyIKKysJCSIgIG1vdnEgJSVyMTAsIDE2KCUwKTsiCisrCQkiICBhZGN4ICUzLCAlJXIxMTsiCisrCQkiICBtb3ZxICUlcjExLCAyNCglMCk7IgorKworKwkJLyogU3RlcCAzOiBGb2xkIHRoZSBjYXJyeSBiaXQgYmFjayBpbjsgZ3VhcmFudGVlZCBub3QgdG8gY2FycnkgYXQgdGhpcyBwb2ludCAqLworKwkJIiAgbW92ICQwLCAlJXJheDsiCisrCQkiICBjbW92YyAlJXJkeCwgJSVyYXg7IgorKwkJIiAgYWRkICUlcmF4LCAlJXI4OyIKKysJCSIgIG1vdnEgJSVyOCwgMCglMCk7IgorKwk6ICIrJnIiICh0bXApLCAiKyZyIiAoZjEpLCAiKyZyIiAob3V0KSwgIismciIgKGYyKQorKwk6CisrCTogIiVyYXgiLCAiJXJkeCIsICIlcjgiLCAiJXI5IiwgIiVyMTAiLCAiJXIxMSIsICIlcjEyIiwgIiVyMTMiLCAiJXIxNCIsICJtZW1vcnkiLCAiY2MiCisrCSk7CisgfQorIAorLXN0YXRpYyB2b2lkIHJlZF9lbHRmcDI1NTE5XzF3X2FkeCh1NjQgKmNvbnN0IGMsIGNvbnN0IHU2NCAqY29uc3QgYSkKKysvKiBDb21wdXRlcyB0d28gZmllbGQgbXVsdGlwbGljYXRpb25zOgorKyAqIG91dFswXSA8LSBmMVswXSAqIGYyWzBdCisrICogb3V0WzFdIDwtIGYxWzFdICogZjJbMV0KKysgKiBVc2VzIHRoZSAxNi1lbGVtZW50IGJ1ZmZlciB0bXAgZm9yIGludGVybWVkaWF0ZSByZXN1bHRzLiAqLworK3N0YXRpYyBpbmxpbmUgdm9pZCBmbXVsMih1NjQgKm91dCwgY29uc3QgdTY0ICpmMSwgY29uc3QgdTY0ICpmMiwgdTY0ICp0bXApCisgeworIAlhc20gdm9sYXRpbGUoCistCQkibW92bCAgICAkMzgsICUlZWR4IDsiCS8qIDIqYyA9IDM4ID0gMl4yNTYgKi8KKy0JCSJtdWx4IDMyKCUxKSwgICUlcjgsICUlcjEwIDsiIC8qIGMqQ1s0XSAqLworLQkJInhvcmwgJSVlYngsICUlZWJ4IDsiCistCQkiYWRveCAgICglMSksICAlJXI4IDsiCistCQkibXVseCA0MCglMSksICAlJXI5LCAlJXIxMSA7IiAvKiBjKkNbNV0gKi8KKy0JCSJhZGN4ICUlcjEwLCAgJSVyOSA7IgorLQkJImFkb3ggIDgoJTEpLCAgJSVyOSA7IgorLQkJIm11bHggNDgoJTEpLCAlJXIxMCwgJSVyYXggOyIgLyogYypDWzZdICovCistCQkiYWRjeCAlJXIxMSwgJSVyMTAgOyIKKy0JCSJhZG94IDE2KCUxKSwgJSVyMTAgOyIKKy0JCSJtdWx4IDU2KCUxKSwgJSVyMTEsICUlcmN4IDsiIC8qIGMqQ1s3XSAqLworLQkJImFkY3ggJSVyYXgsICUlcjExIDsiCistCQkiYWRveCAyNCglMSksICUlcjExIDsiCistCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLQkJImFkY3ggJSVyYngsICUlcmN4IDsiCistCQkiYWRveCAgJSVyYngsICUlcmN4IDsiCistCQkiaW11bCAlJXJkeCwgJSVyY3ggOyIgLyogYypDWzRdLCBjZj0wLCBvZj0wICovCistCQkiYWRjeCAlJXJjeCwgICUlcjggOyIKKy0JCSJhZGN4ICUlcmJ4LCAgJSVyOSA7IgorLQkJIm1vdnEgICUlcjksICA4KCUwKSA7IgorLQkJImFkY3ggJSVyYngsICUlcjEwIDsiCistCQkibW92cSAlJXIxMCwgMTYoJTApIDsiCistCQkiYWRjeCAlJXJieCwgJSVyMTEgOyIKKy0JCSJtb3ZxICUlcjExLCAyNCglMCkgOyIKKy0JCSJtb3YgICAgICQwLCAlJWVjeCA7IgorLQkJImNtb3ZjICUlZWR4LCAlJWVjeCA7IgorLQkJImFkZHEgJSVyY3gsICAlJXI4IDsiCistCQkibW92cSAgJSVyOCwgICAoJTApIDsiCistCQk6CistCQk6ICJyIihjKSwgInIiKGEpCistCQk6ICJtZW1vcnkiLCAiY2MiLCAiJXJheCIsICIlcmJ4IiwgIiVyY3giLCAiJXJkeCIsICIlcjgiLCAiJXI5IiwKKy0JCSAgIiVyMTAiLCAiJXIxMSIpOworLX0KKysJCS8qIENvbXB1dGUgdGhlIHJhdyBtdWx0aXBsaWNhdGlvbiB0bXBbMF0gPC0gZjFbMF0gKiBmMlswXSAqLworIAorLXN0YXRpYyB2b2lkIHJlZF9lbHRmcDI1NTE5XzF3X2JtaTIodTY0ICpjb25zdCBjLCBjb25zdCB1NjQgKmNvbnN0IGEpCisteworLQlhc20gdm9sYXRpbGUoCistCQkibW92bCAgICAkMzgsICUlZWR4IDsiCS8qIDIqYyA9IDM4ID0gMl4yNTYgKi8KKy0JCSJtdWx4IDMyKCUxKSwgICUlcjgsICUlcjEwIDsiIC8qIGMqQ1s0XSAqLworLQkJIm11bHggNDAoJTEpLCAgJSVyOSwgJSVyMTEgOyIgLyogYypDWzVdICovCistCQkiYWRkcSAlJXIxMCwgICUlcjkgOyIKKy0JCSJtdWx4IDQ4KCUxKSwgJSVyMTAsICUlcmF4IDsiIC8qIGMqQ1s2XSAqLworLQkJImFkY3EgJSVyMTEsICUlcjEwIDsiCistCQkibXVseCA1NiglMSksICUlcjExLCAlJXJjeCA7IiAvKiBjKkNbN10gKi8KKy0JCSJhZGNxICUlcmF4LCAlJXIxMSA7IgorLQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy0JCSJhZGNxICAgICQwLCAlJXJjeCA7IgorLQkJImFkZHEgICAoJTEpLCAgJSVyOCA7IgorLQkJImFkY3EgIDgoJTEpLCAgJSVyOSA7IgorLQkJImFkY3EgMTYoJTEpLCAlJXIxMCA7IgorLQkJImFkY3EgMjQoJTEpLCAlJXIxMSA7IgorLQkJImFkY3EgICAgICQwLCAlJXJjeCA7IgorLQkJImltdWwgJSVyZHgsICUlcmN4IDsiIC8qIGMqQ1s0XSwgY2Y9MCAqLworLQkJImFkZHEgJSVyY3gsICAlJXI4IDsiCistCQkiYWRjcSAgICAkMCwgICUlcjkgOyIKKy0JCSJtb3ZxICAlJXI5LCAgOCglMCkgOyIKKy0JCSJhZGNxICAgICQwLCAlJXIxMCA7IgorLQkJIm1vdnEgJSVyMTAsIDE2KCUwKSA7IgorLQkJImFkY3EgICAgJDAsICUlcjExIDsiCistCQkibW92cSAlJXIxMSwgMjQoJTApIDsiCistCQkibW92ICAgICAkMCwgJSVlY3ggOyIKKy0JCSJjbW92YyAlJWVkeCwgJSVlY3ggOyIKKy0JCSJhZGRxICUlcmN4LCAgJSVyOCA7IgorLQkJIm1vdnEgICUlcjgsICAgKCUwKSA7IgorLQkJOgorLQkJOiAiciIoYyksICJyIihhKQorLQkJOiAibWVtb3J5IiwgImNjIiwgIiVyYXgiLCAiJXJjeCIsICIlcmR4IiwgIiVyOCIsICIlcjkiLCAiJXIxMCIsCistCQkgICIlcjExIik7CisrCQkvKiBDb21wdXRlIHNyYzFbMF0gKiBzcmMyICovCisrCQkiICBtb3ZxIDAoJTEpLCAlJXJkeDsiCisrCQkiICBtdWx4cSAwKCUzKSwgJSVyOCwgJSVyOTsiICAgICAgICIgIHhvciAlJXIxMCwgJSVyMTA7IiAgICAgIiAgbW92cSAlJXI4LCAwKCUwKTsiCisrCQkiICBtdWx4cSA4KCUzKSwgJSVyMTAsICUlcjExOyIgICAgICIgIGFkb3ggJSVyOSwgJSVyMTA7IiAgICAgIiAgbW92cSAlJXIxMCwgOCglMCk7IgorKwkJIiAgbXVseHEgMTYoJTMpLCAlJXIxMiwgJSVyMTM7IiAgICAiICBhZG94ICUlcjExLCAlJXIxMjsiCisrCQkiICBtdWx4cSAyNCglMyksICUlcjE0LCAlJXJkeDsiICAgICIgIGFkb3ggJSVyMTMsICUlcjE0OyIgICAgIiAgbW92ICQwLCAlJXJheDsiCisrCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGFkb3ggJSVyZHgsICUlcmF4OyIKKysJCS8qIENvbXB1dGUgc3JjMVsxXSAqIHNyYzIgKi8KKysJCSIgIG1vdnEgOCglMSksICUlcmR4OyIKKysJCSIgIG11bHhxIDAoJTMpLCAlJXI4LCAlJXI5OyIgICAgICAgIiAgeG9yICUlcjEwLCAlJXIxMDsiICAgICAiICBhZGN4cSA4KCUwKSwgJSVyODsiICAgICIgIG1vdnEgJSVyOCwgOCglMCk7IgorKwkJIiAgbXVseHEgOCglMyksICUlcjEwLCAlJXIxMTsiICAgICAiICBhZG94ICUlcjksICUlcjEwOyIgICAgICIgIGFkY3ggJSVyMTIsICUlcjEwOyIgICAgIiAgbW92cSAlJXIxMCwgMTYoJTApOyIKKysJCSIgIG11bHhxIDE2KCUzKSwgJSVyMTIsICUlcjEzOyIgICAgIiAgYWRveCAlJXIxMSwgJSVyMTI7IiAgICAiICBhZGN4ICUlcjE0LCAlJXIxMjsiICAgICIgIG1vdiAkMCwgJSVyODsiCisrCQkiICBtdWx4cSAyNCglMyksICUlcjE0LCAlJXJkeDsiICAgICIgIGFkb3ggJSVyMTMsICUlcjE0OyIgICAgIiAgYWRjeCAlJXJheCwgJSVyMTQ7IiAgICAiICBtb3YgJDAsICUlcmF4OyIKKysJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgYWRveCAlJXJkeCwgJSVyYXg7IiAgICAiICBhZGN4ICUlcjgsICUlcmF4OyIKKysJCS8qIENvbXB1dGUgc3JjMVsyXSAqIHNyYzIgKi8KKysJCSIgIG1vdnEgMTYoJTEpLCAlJXJkeDsiCisrCQkiICBtdWx4cSAwKCUzKSwgJSVyOCwgJSVyOTsiICAgICAgICIgIHhvciAlJXIxMCwgJSVyMTA7IiAgICAiICBhZGN4cSAxNiglMCksICUlcjg7IiAgICAiICBtb3ZxICUlcjgsIDE2KCUwKTsiCisrCQkiICBtdWx4cSA4KCUzKSwgJSVyMTAsICUlcjExOyIgICAgICIgIGFkb3ggJSVyOSwgJSVyMTA7IiAgICAgIiAgYWRjeCAlJXIxMiwgJSVyMTA7IiAgICAiICBtb3ZxICUlcjEwLCAyNCglMCk7IgorKwkJIiAgbXVseHEgMTYoJTMpLCAlJXIxMiwgJSVyMTM7IiAgICAiICBhZG94ICUlcjExLCAlJXIxMjsiICAgICIgIGFkY3ggJSVyMTQsICUlcjEyOyIgICAgIiAgbW92ICQwLCAlJXI4OyIKKysJCSIgIG11bHhxIDI0KCUzKSwgJSVyMTQsICUlcmR4OyIgICAgIiAgYWRveCAlJXIxMywgJSVyMTQ7IiAgICAiICBhZGN4ICUlcmF4LCAlJXIxNDsiICAgICIgIG1vdiAkMCwgJSVyYXg7IgorKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBhZG94ICUlcmR4LCAlJXJheDsiICAgICIgIGFkY3ggJSVyOCwgJSVyYXg7IgorKwkJLyogQ29tcHV0ZSBzcmMxWzNdICogc3JjMiAqLworKwkJIiAgbW92cSAyNCglMSksICUlcmR4OyIKKysJCSIgIG11bHhxIDAoJTMpLCAlJXI4LCAlJXI5OyIgICAgICAgIiAgeG9yICUlcjEwLCAlJXIxMDsiICAgICIgIGFkY3hxIDI0KCUwKSwgJSVyODsiICAgICIgIG1vdnEgJSVyOCwgMjQoJTApOyIKKysJCSIgIG11bHhxIDgoJTMpLCAlJXIxMCwgJSVyMTE7IiAgICAgIiAgYWRveCAlJXI5LCAlJXIxMDsiICAgICAiICBhZGN4ICUlcjEyLCAlJXIxMDsiICAgICIgIG1vdnEgJSVyMTAsIDMyKCUwKTsiCisrCQkiICBtdWx4cSAxNiglMyksICUlcjEyLCAlJXIxMzsiICAgICIgIGFkb3ggJSVyMTEsICUlcjEyOyIgICAgIiAgYWRjeCAlJXIxNCwgJSVyMTI7IiAgICAiICBtb3ZxICUlcjEyLCA0MCglMCk7IiAgICAiICBtb3YgJDAsICUlcjg7IgorKwkJIiAgbXVseHEgMjQoJTMpLCAlJXIxNCwgJSVyZHg7IiAgICAiICBhZG94ICUlcjEzLCAlJXIxNDsiICAgICIgIGFkY3ggJSVyYXgsICUlcjE0OyIgICAgIiAgbW92cSAlJXIxNCwgNDgoJTApOyIgICAgIiAgbW92ICQwLCAlJXJheDsiCisrCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGFkb3ggJSVyZHgsICUlcmF4OyIgICAgIiAgYWRjeCAlJXI4LCAlJXJheDsiICAgICAiICBtb3ZxICUlcmF4LCA1NiglMCk7IgorKworKwkJLyogQ29tcHV0ZSB0aGUgcmF3IG11bHRpcGxpY2F0aW9uIHRtcFsxXSA8LSBmMVsxXSAqIGYyWzFdICovCisrCisrCQkvKiBDb21wdXRlIHNyYzFbMF0gKiBzcmMyICovCisrCQkiICBtb3ZxIDMyKCUxKSwgJSVyZHg7IgorKwkJIiAgbXVseHEgMzIoJTMpLCAlJXI4LCAlJXI5OyIgICAgICAgIiAgeG9yICUlcjEwLCAlJXIxMDsiICAgICAiICBtb3ZxICUlcjgsIDY0KCUwKTsiCisrCQkiICBtdWx4cSA0MCglMyksICUlcjEwLCAlJXIxMTsiICAgICAiICBhZG94ICUlcjksICUlcjEwOyIgICAgICIgIG1vdnEgJSVyMTAsIDcyKCUwKTsiCisrCQkiICBtdWx4cSA0OCglMyksICUlcjEyLCAlJXIxMzsiICAgICIgIGFkb3ggJSVyMTEsICUlcjEyOyIKKysJCSIgIG11bHhxIDU2KCUzKSwgJSVyMTQsICUlcmR4OyIgICAgIiAgYWRveCAlJXIxMywgJSVyMTQ7IiAgICAiICBtb3YgJDAsICUlcmF4OyIKKysJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgYWRveCAlJXJkeCwgJSVyYXg7IgorKwkJLyogQ29tcHV0ZSBzcmMxWzFdICogc3JjMiAqLworKwkJIiAgbW92cSA0MCglMSksICUlcmR4OyIKKysJCSIgIG11bHhxIDMyKCUzKSwgJSVyOCwgJSVyOTsiICAgICAgICIgIHhvciAlJXIxMCwgJSVyMTA7IiAgICAgIiAgYWRjeHEgNzIoJTApLCAlJXI4OyIgICAgIiAgbW92cSAlJXI4LCA3MiglMCk7IgorKwkJIiAgbXVseHEgNDAoJTMpLCAlJXIxMCwgJSVyMTE7IiAgICAgIiAgYWRveCAlJXI5LCAlJXIxMDsiICAgICAiICBhZGN4ICUlcjEyLCAlJXIxMDsiICAgICIgIG1vdnEgJSVyMTAsIDgwKCUwKTsiCisrCQkiICBtdWx4cSA0OCglMyksICUlcjEyLCAlJXIxMzsiICAgICIgIGFkb3ggJSVyMTEsICUlcjEyOyIgICAgIiAgYWRjeCAlJXIxNCwgJSVyMTI7IiAgICAiICBtb3YgJDAsICUlcjg7IgorKwkJIiAgbXVseHEgNTYoJTMpLCAlJXIxNCwgJSVyZHg7IiAgICAiICBhZG94ICUlcjEzLCAlJXIxNDsiICAgICIgIGFkY3ggJSVyYXgsICUlcjE0OyIgICAgIiAgbW92ICQwLCAlJXJheDsiCisrCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGFkb3ggJSVyZHgsICUlcmF4OyIgICAgIiAgYWRjeCAlJXI4LCAlJXJheDsiCisrCQkvKiBDb21wdXRlIHNyYzFbMl0gKiBzcmMyICovCisrCQkiICBtb3ZxIDQ4KCUxKSwgJSVyZHg7IgorKwkJIiAgbXVseHEgMzIoJTMpLCAlJXI4LCAlJXI5OyIgICAgICAgIiAgeG9yICUlcjEwLCAlJXIxMDsiICAgICIgIGFkY3hxIDgwKCUwKSwgJSVyODsiICAgICIgIG1vdnEgJSVyOCwgODAoJTApOyIKKysJCSIgIG11bHhxIDQwKCUzKSwgJSVyMTAsICUlcjExOyIgICAgICIgIGFkb3ggJSVyOSwgJSVyMTA7IiAgICAgIiAgYWRjeCAlJXIxMiwgJSVyMTA7IiAgICAiICBtb3ZxICUlcjEwLCA4OCglMCk7IgorKwkJIiAgbXVseHEgNDgoJTMpLCAlJXIxMiwgJSVyMTM7IiAgICAiICBhZG94ICUlcjExLCAlJXIxMjsiICAgICIgIGFkY3ggJSVyMTQsICUlcjEyOyIgICAgIiAgbW92ICQwLCAlJXI4OyIKKysJCSIgIG11bHhxIDU2KCUzKSwgJSVyMTQsICUlcmR4OyIgICAgIiAgYWRveCAlJXIxMywgJSVyMTQ7IiAgICAiICBhZGN4ICUlcmF4LCAlJXIxNDsiICAgICIgIG1vdiAkMCwgJSVyYXg7IgorKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBhZG94ICUlcmR4LCAlJXJheDsiICAgICIgIGFkY3ggJSVyOCwgJSVyYXg7IgorKwkJLyogQ29tcHV0ZSBzcmMxWzNdICogc3JjMiAqLworKwkJIiAgbW92cSA1NiglMSksICUlcmR4OyIKKysJCSIgIG11bHhxIDMyKCUzKSwgJSVyOCwgJSVyOTsiICAgICAgICIgIHhvciAlJXIxMCwgJSVyMTA7IiAgICAiICBhZGN4cSA4OCglMCksICUlcjg7IiAgICAiICBtb3ZxICUlcjgsIDg4KCUwKTsiCisrCQkiICBtdWx4cSA0MCglMyksICUlcjEwLCAlJXIxMTsiICAgICAiICBhZG94ICUlcjksICUlcjEwOyIgICAgICIgIGFkY3ggJSVyMTIsICUlcjEwOyIgICAgIiAgbW92cSAlJXIxMCwgOTYoJTApOyIKKysJCSIgIG11bHhxIDQ4KCUzKSwgJSVyMTIsICUlcjEzOyIgICAgIiAgYWRveCAlJXIxMSwgJSVyMTI7IiAgICAiICBhZGN4ICUlcjE0LCAlJXIxMjsiICAgICIgIG1vdnEgJSVyMTIsIDEwNCglMCk7IiAgICAiICBtb3YgJDAsICUlcjg7IgorKwkJIiAgbXVseHEgNTYoJTMpLCAlJXIxNCwgJSVyZHg7IiAgICAiICBhZG94ICUlcjEzLCAlJXIxNDsiICAgICIgIGFkY3ggJSVyYXgsICUlcjE0OyIgICAgIiAgbW92cSAlJXIxNCwgMTEyKCUwKTsiICAgICIgIG1vdiAkMCwgJSVyYXg7IgorKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBhZG94ICUlcmR4LCAlJXJheDsiICAgICIgIGFkY3ggJSVyOCwgJSVyYXg7IiAgICAgIiAgbW92cSAlJXJheCwgMTIwKCUwKTsiCisrCQkvKiBMaW5lIHVwIHBvaW50ZXJzICovCisrCQkiICBtb3YgJTAsICUxOyIKKysJCSIgIG1vdiAlMiwgJTA7IgorKworKwkJLyogV3JhcCB0aGUgcmVzdWx0cyBiYWNrIGludG8gdGhlIGZpZWxkICovCisrCisrCQkvKiBTdGVwIDE6IENvbXB1dGUgZHN0ICsgY2FycnkgPT0gdG1wX2hpICogMzggKyB0bXBfbG8gKi8KKysJCSIgIG1vdiAkMzgsICUlcmR4OyIKKysJCSIgIG11bHhxIDMyKCUxKSwgJSVyOCwgJSVyMTM7IgorKwkJIiAgeG9yICUzLCAlMzsiCisrCQkiICBhZG94cSAwKCUxKSwgJSVyODsiCisrCQkiICBtdWx4cSA0MCglMSksICUlcjksICUlcjEyOyIKKysJCSIgIGFkY3ggJSVyMTMsICUlcjk7IgorKwkJIiAgYWRveHEgOCglMSksICUlcjk7IgorKwkJIiAgbXVseHEgNDgoJTEpLCAlJXIxMCwgJSVyMTM7IgorKwkJIiAgYWRjeCAlJXIxMiwgJSVyMTA7IgorKwkJIiAgYWRveHEgMTYoJTEpLCAlJXIxMDsiCisrCQkiICBtdWx4cSA1NiglMSksICUlcjExLCAlJXJheDsiCisrCQkiICBhZGN4ICUlcjEzLCAlJXIxMTsiCisrCQkiICBhZG94cSAyNCglMSksICUlcjExOyIKKysJCSIgIGFkY3ggJTMsICUlcmF4OyIKKysJCSIgIGFkb3ggJTMsICUlcmF4OyIKKysJCSIgIGltdWwgJSVyZHgsICUlcmF4OyIKKysKKysJCS8qIFN0ZXAgMjogRm9sZCB0aGUgY2FycnkgYmFjayBpbnRvIGRzdCAqLworKwkJIiAgYWRkICUlcmF4LCAlJXI4OyIKKysJCSIgIGFkY3ggJTMsICUlcjk7IgorKwkJIiAgbW92cSAlJXI5LCA4KCUwKTsiCisrCQkiICBhZGN4ICUzLCAlJXIxMDsiCisrCQkiICBtb3ZxICUlcjEwLCAxNiglMCk7IgorKwkJIiAgYWRjeCAlMywgJSVyMTE7IgorKwkJIiAgbW92cSAlJXIxMSwgMjQoJTApOyIKKysKKysJCS8qIFN0ZXAgMzogRm9sZCB0aGUgY2FycnkgYml0IGJhY2sgaW47IGd1YXJhbnRlZWQgbm90IHRvIGNhcnJ5IGF0IHRoaXMgcG9pbnQgKi8KKysJCSIgIG1vdiAkMCwgJSVyYXg7IgorKwkJIiAgY21vdmMgJSVyZHgsICUlcmF4OyIKKysJCSIgIGFkZCAlJXJheCwgJSVyODsiCisrCQkiICBtb3ZxICUlcjgsIDAoJTApOyIKKysKKysJCS8qIFN0ZXAgMTogQ29tcHV0ZSBkc3QgKyBjYXJyeSA9PSB0bXBfaGkgKiAzOCArIHRtcF9sbyAqLworKwkJIiAgbW92ICQzOCwgJSVyZHg7IgorKwkJIiAgbXVseHEgOTYoJTEpLCAlJXI4LCAlJXIxMzsiCisrCQkiICB4b3IgJTMsICUzOyIKKysJCSIgIGFkb3hxIDY0KCUxKSwgJSVyODsiCisrCQkiICBtdWx4cSAxMDQoJTEpLCAlJXI5LCAlJXIxMjsiCisrCQkiICBhZGN4ICUlcjEzLCAlJXI5OyIKKysJCSIgIGFkb3hxIDcyKCUxKSwgJSVyOTsiCisrCQkiICBtdWx4cSAxMTIoJTEpLCAlJXIxMCwgJSVyMTM7IgorKwkJIiAgYWRjeCAlJXIxMiwgJSVyMTA7IgorKwkJIiAgYWRveHEgODAoJTEpLCAlJXIxMDsiCisrCQkiICBtdWx4cSAxMjAoJTEpLCAlJXIxMSwgJSVyYXg7IgorKwkJIiAgYWRjeCAlJXIxMywgJSVyMTE7IgorKwkJIiAgYWRveHEgODgoJTEpLCAlJXIxMTsiCisrCQkiICBhZGN4ICUzLCAlJXJheDsiCisrCQkiICBhZG94ICUzLCAlJXJheDsiCisrCQkiICBpbXVsICUlcmR4LCAlJXJheDsiCisrCisrCQkvKiBTdGVwIDI6IEZvbGQgdGhlIGNhcnJ5IGJhY2sgaW50byBkc3QgKi8KKysJCSIgIGFkZCAlJXJheCwgJSVyODsiCisrCQkiICBhZGN4ICUzLCAlJXI5OyIKKysJCSIgIG1vdnEgJSVyOSwgNDAoJTApOyIKKysJCSIgIGFkY3ggJTMsICUlcjEwOyIKKysJCSIgIG1vdnEgJSVyMTAsIDQ4KCUwKTsiCisrCQkiICBhZGN4ICUzLCAlJXIxMTsiCisrCQkiICBtb3ZxICUlcjExLCA1NiglMCk7IgorKworKwkJLyogU3RlcCAzOiBGb2xkIHRoZSBjYXJyeSBiaXQgYmFjayBpbjsgZ3VhcmFudGVlZCBub3QgdG8gY2FycnkgYXQgdGhpcyBwb2ludCAqLworKwkJIiAgbW92ICQwLCAlJXJheDsiCisrCQkiICBjbW92YyAlJXJkeCwgJSVyYXg7IgorKwkJIiAgYWRkICUlcmF4LCAlJXI4OyIKKysJCSIgIG1vdnEgJSVyOCwgMzIoJTApOyIKKysJOiAiKyZyIiAodG1wKSwgIismciIgKGYxKSwgIismciIgKG91dCksICIrJnIiIChmMikKKysJOgorKwk6ICIlcmF4IiwgIiVyZHgiLCAiJXI4IiwgIiVyOSIsICIlcjEwIiwgIiVyMTEiLCAiJXIxMiIsICIlcjEzIiwgIiVyMTQiLCAibWVtb3J5IiwgImNjIgorKwkpOworIH0KKyAKKy1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQKKy1hZGRfZWx0ZnAyNTUxOV8xd19hZHgodTY0ICpjb25zdCBjLCBjb25zdCB1NjQgKmNvbnN0IGEsIGNvbnN0IHU2NCAqY29uc3QgYikKKysvKiBDb21wdXRlcyB0aGUgZmllbGQgbXVsdGlwbGljYXRpb24gb2YgZm91ci1lbGVtZW50IGYxIHdpdGggdmFsdWUgaW4gZjIgKi8KKytzdGF0aWMgaW5saW5lIHZvaWQgZm11bF9zY2FsYXIodTY0ICpvdXQsIGNvbnN0IHU2NCAqZjEsIHU2NCBmMikKKyB7CistCWFzbSB2b2xhdGlsZSgKKy0JCSJtb3YgICAgICQzOCwgJSVlYXggOyIKKy0JCSJ4b3JsICAlJWVjeCwgJSVlY3ggOyIKKy0JCSJtb3ZxICAgKCUyKSwgICUlcjggOyIKKy0JCSJhZGN4ICAgKCUxKSwgICUlcjggOyIKKy0JCSJtb3ZxICA4KCUyKSwgICUlcjkgOyIKKy0JCSJhZGN4ICA4KCUxKSwgICUlcjkgOyIKKy0JCSJtb3ZxIDE2KCUyKSwgJSVyMTAgOyIKKy0JCSJhZGN4IDE2KCUxKSwgJSVyMTAgOyIKKy0JCSJtb3ZxIDI0KCUyKSwgJSVyMTEgOyIKKy0JCSJhZGN4IDI0KCUxKSwgJSVyMTEgOyIKKy0JCSJjbW92YyAlJWVheCwgJSVlY3ggOyIKKy0JCSJ4b3JsICUlZWF4LCAlJWVheCAgOyIKKy0JCSJhZGN4ICUlcmN4LCAgJSVyOCAgOyIKKy0JCSJhZGN4ICUlcmF4LCAgJSVyOSAgOyIKKy0JCSJtb3ZxICAlJXI5LCAgOCglMCkgOyIKKy0JCSJhZGN4ICUlcmF4LCAlJXIxMCAgOyIKKy0JCSJtb3ZxICUlcjEwLCAxNiglMCkgOyIKKy0JCSJhZGN4ICUlcmF4LCAlJXIxMSAgOyIKKy0JCSJtb3ZxICUlcjExLCAyNCglMCkgOyIKKy0JCSJtb3YgICAgICQzOCwgJSVlY3ggOyIKKy0JCSJjbW92YyAlJWVjeCwgJSVlYXggOyIKKy0JCSJhZGRxICUlcmF4LCAgJSVyOCAgOyIKKy0JCSJtb3ZxICAlJXI4LCAgICglMCkgOyIKKy0JCToKKy0JCTogInIiKGMpLCAiciIoYSksICJyIihiKQorLQkJOiAibWVtb3J5IiwgImNjIiwgIiVyYXgiLCAiJXJjeCIsICIlcjgiLCAiJXI5IiwgIiVyMTAiLCAiJXIxMSIpOworLX0KKysJcmVnaXN0ZXIgdTY0IGYyX3IgYXNtKCJyZHgiKSA9IGYyOworIAorLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZAorLWFkZF9lbHRmcDI1NTE5XzF3X2JtaTIodTY0ICpjb25zdCBjLCBjb25zdCB1NjQgKmNvbnN0IGEsIGNvbnN0IHU2NCAqY29uc3QgYikKKy17CisgCWFzbSB2b2xhdGlsZSgKKy0JCSJtb3YgICAgICQzOCwgJSVlYXggOyIKKy0JCSJtb3ZxICAgKCUyKSwgICUlcjggOyIKKy0JCSJhZGRxICAgKCUxKSwgICUlcjggOyIKKy0JCSJtb3ZxICA4KCUyKSwgICUlcjkgOyIKKy0JCSJhZGNxICA4KCUxKSwgICUlcjkgOyIKKy0JCSJtb3ZxIDE2KCUyKSwgJSVyMTAgOyIKKy0JCSJhZGNxIDE2KCUxKSwgJSVyMTAgOyIKKy0JCSJtb3ZxIDI0KCUyKSwgJSVyMTEgOyIKKy0JCSJhZGNxIDI0KCUxKSwgJSVyMTEgOyIKKy0JCSJtb3YgICAgICAkMCwgJSVlY3ggOyIKKy0JCSJjbW92YyAlJWVheCwgJSVlY3ggOyIKKy0JCSJhZGRxICUlcmN4LCAgJSVyOCAgOyIKKy0JCSJhZGNxICAgICQwLCAgJSVyOSAgOyIKKy0JCSJtb3ZxICAlJXI5LCAgOCglMCkgOyIKKy0JCSJhZGNxICAgICQwLCAlJXIxMCAgOyIKKy0JCSJtb3ZxICUlcjEwLCAxNiglMCkgOyIKKy0JCSJhZGNxICAgICQwLCAlJXIxMSAgOyIKKy0JCSJtb3ZxICUlcjExLCAyNCglMCkgOyIKKy0JCSJtb3YgICAgICQwLCAlJWVjeCAgOyIKKy0JCSJjbW92YyAlJWVheCwgJSVlY3ggOyIKKy0JCSJhZGRxICUlcmN4LCAgJSVyOCAgOyIKKy0JCSJtb3ZxICAlJXI4LCAgICglMCkgOyIKKy0JCToKKy0JCTogInIiKGMpLCAiciIoYSksICJyIihiKQorLQkJOiAibWVtb3J5IiwgImNjIiwgIiVyYXgiLCAiJXJjeCIsICIlcjgiLCAiJXI5IiwgIiVyMTAiLCAiJXIxMSIpOworKwkJLyogQ29tcHV0ZSB0aGUgcmF3IG11bHRpcGxpY2F0aW9uIG9mIGYxKmYyICovCisrCQkiICBtdWx4cSAwKCUyKSwgJSVyOCwgJSVyY3g7IiAgICAgIC8qIGYxWzBdKmYyICovCisrCQkiICBtdWx4cSA4KCUyKSwgJSVyOSwgJSVyMTI7IiAgICAgIC8qIGYxWzFdKmYyICovCisrCQkiICBhZGQgJSVyY3gsICUlcjk7IgorKwkJIiAgbW92ICQwLCAlJXJjeDsiCisrCQkiICBtdWx4cSAxNiglMiksICUlcjEwLCAlJXIxMzsiICAgIC8qIGYxWzJdKmYyICovCisrCQkiICBhZGN4ICUlcjEyLCAlJXIxMDsiCisrCQkiICBtdWx4cSAyNCglMiksICUlcjExLCAlJXJheDsiICAgIC8qIGYxWzNdKmYyICovCisrCQkiICBhZGN4ICUlcjEzLCAlJXIxMTsiCisrCQkiICBhZGN4ICUlcmN4LCAlJXJheDsiCisrCisrCQkvKiBXcmFwIHRoZSByZXN1bHQgYmFjayBpbnRvIHRoZSBmaWVsZCAqLworKworKwkJLyogU3RlcCAxOiBDb21wdXRlIGNhcnJ5KjM4ICovCisrCQkiICBtb3YgJDM4LCAlJXJkeDsiCisrCQkiICBpbXVsICUlcmR4LCAlJXJheDsiCisrCisrCQkvKiBTdGVwIDI6IEZvbGQgdGhlIGNhcnJ5IGJhY2sgaW50byBkc3QgKi8KKysJCSIgIGFkZCAlJXJheCwgJSVyODsiCisrCQkiICBhZGN4ICUlcmN4LCAlJXI5OyIKKysJCSIgIG1vdnEgJSVyOSwgOCglMSk7IgorKwkJIiAgYWRjeCAlJXJjeCwgJSVyMTA7IgorKwkJIiAgbW92cSAlJXIxMCwgMTYoJTEpOyIKKysJCSIgIGFkY3ggJSVyY3gsICUlcjExOyIKKysJCSIgIG1vdnEgJSVyMTEsIDI0KCUxKTsiCisrCisrCQkvKiBTdGVwIDM6IEZvbGQgdGhlIGNhcnJ5IGJpdCBiYWNrIGluOyBndWFyYW50ZWVkIG5vdCB0byBjYXJyeSBhdCB0aGlzIHBvaW50ICovCisrCQkiICBtb3YgJDAsICUlcmF4OyIKKysJCSIgIGNtb3ZjICUlcmR4LCAlJXJheDsiCisrCQkiICBhZGQgJSVyYXgsICUlcjg7IgorKwkJIiAgbW92cSAlJXI4LCAwKCUxKTsiCisrCTogIismciIgKGYyX3IpCisrCTogInIiIChvdXQpLCAiciIgKGYxKQorKwk6ICIlcmF4IiwgIiVyY3giLCAiJXI4IiwgIiVyOSIsICIlcjEwIiwgIiVyMTEiLCAiJXIxMiIsICIlcjEzIiwgIm1lbW9yeSIsICJjYyIKKysJKTsKKyB9CisgCistc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkCistc3ViX2VsdGZwMjU1MTlfMXcodTY0ICpjb25zdCBjLCBjb25zdCB1NjQgKmNvbnN0IGEsIGNvbnN0IHU2NCAqY29uc3QgYikKKy17CistCWFzbSB2b2xhdGlsZSgKKy0JCSJtb3YgICAgICQzOCwgJSVlYXggOyIKKy0JCSJtb3ZxICAgKCUxKSwgICUlcjggOyIKKy0JCSJzdWJxICAgKCUyKSwgICUlcjggOyIKKy0JCSJtb3ZxICA4KCUxKSwgICUlcjkgOyIKKy0JCSJzYmJxICA4KCUyKSwgICUlcjkgOyIKKy0JCSJtb3ZxIDE2KCUxKSwgJSVyMTAgOyIKKy0JCSJzYmJxIDE2KCUyKSwgJSVyMTAgOyIKKy0JCSJtb3ZxIDI0KCUxKSwgJSVyMTEgOyIKKy0JCSJzYmJxIDI0KCUyKSwgJSVyMTEgOyIKKy0JCSJtb3YgICAgICAkMCwgJSVlY3ggOyIKKy0JCSJjbW92YyAlJWVheCwgJSVlY3ggOyIKKy0JCSJzdWJxICUlcmN4LCAgJSVyOCAgOyIKKy0JCSJzYmJxICAgICQwLCAgJSVyOSAgOyIKKy0JCSJtb3ZxICAlJXI5LCAgOCglMCkgOyIKKy0JCSJzYmJxICAgICQwLCAlJXIxMCAgOyIKKy0JCSJtb3ZxICUlcjEwLCAxNiglMCkgOyIKKy0JCSJzYmJxICAgICQwLCAlJXIxMSAgOyIKKy0JCSJtb3ZxICUlcjExLCAyNCglMCkgOyIKKy0JCSJtb3YgICAgICQwLCAlJWVjeCAgOyIKKy0JCSJjbW92YyAlJWVheCwgJSVlY3ggOyIKKy0JCSJzdWJxICUlcmN4LCAgJSVyOCAgOyIKKy0JCSJtb3ZxICAlJXI4LCAgICglMCkgOyIKKy0JCToKKy0JCTogInIiKGMpLCAiciIoYSksICJyIihiKQorLQkJOiAibWVtb3J5IiwgImNjIiwgIiVyYXgiLCAiJXJjeCIsICIlcjgiLCAiJXI5IiwgIiVyMTAiLCAiJXIxMSIpOworLX0KKy0KKy0vKiBNdWx0aXBsaWNhdGlvbiBieSBhMjQgPSAoQSsyKS80ID0gKDQ4NjY2MisyKS80ID0gMTIxNjY2ICovCistc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkCistbXVsX2EyNF9lbHRmcDI1NTE5XzF3KHU2NCAqY29uc3QgYywgY29uc3QgdTY0ICpjb25zdCBhKQorKy8qIENvbXB1dGVzIHAxIDwtIGJpdCA/IHAyIDogcDEgaW4gY29uc3RhbnQgdGltZSAqLworK3N0YXRpYyBpbmxpbmUgdm9pZCBjc3dhcDIodTY0IGJpdCwgY29uc3QgdTY0ICpwMSwgY29uc3QgdTY0ICpwMikKKyB7CistCWNvbnN0IHU2NCBhMjQgPSAxMjE2NjY7CisgCWFzbSB2b2xhdGlsZSgKKy0JCSJtb3ZxICAgICAlMiwgJSVyZHggOyIKKy0JCSJtdWx4ICAgKCUxKSwgICUlcjgsICUlcjEwIDsiCistCQkibXVseCAgOCglMSksICAlJXI5LCAlJXIxMSA7IgorLQkJImFkZHEgJSVyMTAsICAlJXI5IDsiCistCQkibXVseCAxNiglMSksICUlcjEwLCAlJXJheCA7IgorLQkJImFkY3EgJSVyMTEsICUlcjEwIDsiCistCQkibXVseCAyNCglMSksICUlcjExLCAlJXJjeCA7IgorLQkJImFkY3EgJSVyYXgsICUlcjExIDsiCistCQkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCistCQkiYWRjcSAgICAkMCwgJSVyY3ggOyIKKy0JCSJtb3ZsICAgJDM4LCAlJWVkeCA7IiAvKiAyKmMgPSAzOCA9IDJeMjU2IG1vZCAyXjI1NS0xOSovCistCQkiaW11bCAlJXJkeCwgJSVyY3ggOyIKKy0JCSJhZGRxICUlcmN4LCAgJSVyOCA7IgorLQkJImFkY3EgICAgJDAsICAlJXI5IDsiCistCQkibW92cSAgJSVyOSwgIDgoJTApIDsiCistCQkiYWRjcSAgICAkMCwgJSVyMTAgOyIKKy0JCSJtb3ZxICUlcjEwLCAxNiglMCkgOyIKKy0JCSJhZGNxICAgICQwLCAlJXIxMSA7IgorLQkJIm1vdnEgJSVyMTEsIDI0KCUwKSA7IgorLQkJIm1vdiAgICAgJDAsICUlZWN4IDsiCistCQkiY21vdmMgJSVlZHgsICUlZWN4IDsiCistCQkiYWRkcSAlJXJjeCwgICUlcjggOyIKKy0JCSJtb3ZxICAlJXI4LCAgICglMCkgOyIKKy0JCToKKy0JCTogInIiKGMpLCAiciIoYSksICJyIihhMjQpCistCQk6ICJtZW1vcnkiLCAiY2MiLCAiJXJheCIsICIlcmN4IiwgIiVyZHgiLCAiJXI4IiwgIiVyOSIsICIlcjEwIiwKKy0JCSAgIiVyMTEiKTsKKy19CistCistc3RhdGljIHZvaWQgaW52X2VsdGZwMjU1MTlfMXdfYWR4KHU2NCAqY29uc3QgYywgY29uc3QgdTY0ICpjb25zdCBhKQorLXsKKy0Jc3RydWN0IHsKKy0JCWVsdGZwMjU1MTlfMXdfYnVmZmVyIGJ1ZmZlcjsKKy0JCWVsdGZwMjU1MTlfMXcgeDAsIHgxLCB4MjsKKy0JfSBfX2FsaWduZWQoMzIpIG07CistCXU2NCAqVFs0XTsKKy0KKy0JVFswXSA9IG0ueDA7CistCVRbMV0gPSBjOyAvKiB4XigtMSkgKi8KKy0JVFsyXSA9IG0ueDE7CistCVRbM10gPSBtLngyOworLQorLQljb3B5X2VsdGZwMjU1MTlfMXcoVFsxXSwgYSk7CistCXNxcm5fZWx0ZnAyNTUxOV8xd19hZHgoVFsxXSwgMSk7CistCWNvcHlfZWx0ZnAyNTUxOV8xdyhUWzJdLCBUWzFdKTsKKy0Jc3Fybl9lbHRmcDI1NTE5XzF3X2FkeChUWzJdLCAyKTsKKy0JbXVsX2VsdGZwMjU1MTlfMXdfYWR4KFRbMF0sIGEsIFRbMl0pOworLQltdWxfZWx0ZnAyNTUxOV8xd19hZHgoVFsxXSwgVFsxXSwgVFswXSk7CistCWNvcHlfZWx0ZnAyNTUxOV8xdyhUWzJdLCBUWzFdKTsKKy0Jc3Fybl9lbHRmcDI1NTE5XzF3X2FkeChUWzJdLCAxKTsKKy0JbXVsX2VsdGZwMjU1MTlfMXdfYWR4KFRbMF0sIFRbMF0sIFRbMl0pOworLQljb3B5X2VsdGZwMjU1MTlfMXcoVFsyXSwgVFswXSk7CistCXNxcm5fZWx0ZnAyNTUxOV8xd19hZHgoVFsyXSwgNSk7CistCW11bF9lbHRmcDI1NTE5XzF3X2FkeChUWzBdLCBUWzBdLCBUWzJdKTsKKy0JY29weV9lbHRmcDI1NTE5XzF3KFRbMl0sIFRbMF0pOworLQlzcXJuX2VsdGZwMjU1MTlfMXdfYWR4KFRbMl0sIDEwKTsKKy0JbXVsX2VsdGZwMjU1MTlfMXdfYWR4KFRbMl0sIFRbMl0sIFRbMF0pOworLQljb3B5X2VsdGZwMjU1MTlfMXcoVFszXSwgVFsyXSk7CistCXNxcm5fZWx0ZnAyNTUxOV8xd19hZHgoVFszXSwgMjApOworLQltdWxfZWx0ZnAyNTUxOV8xd19hZHgoVFszXSwgVFszXSwgVFsyXSk7CistCXNxcm5fZWx0ZnAyNTUxOV8xd19hZHgoVFszXSwgMTApOworLQltdWxfZWx0ZnAyNTUxOV8xd19hZHgoVFszXSwgVFszXSwgVFswXSk7CistCWNvcHlfZWx0ZnAyNTUxOV8xdyhUWzBdLCBUWzNdKTsKKy0Jc3Fybl9lbHRmcDI1NTE5XzF3X2FkeChUWzBdLCA1MCk7CistCW11bF9lbHRmcDI1NTE5XzF3X2FkeChUWzBdLCBUWzBdLCBUWzNdKTsKKy0JY29weV9lbHRmcDI1NTE5XzF3KFRbMl0sIFRbMF0pOworLQlzcXJuX2VsdGZwMjU1MTlfMXdfYWR4KFRbMl0sIDEwMCk7CistCW11bF9lbHRmcDI1NTE5XzF3X2FkeChUWzJdLCBUWzJdLCBUWzBdKTsKKy0Jc3Fybl9lbHRmcDI1NTE5XzF3X2FkeChUWzJdLCA1MCk7CistCW11bF9lbHRmcDI1NTE5XzF3X2FkeChUWzJdLCBUWzJdLCBUWzNdKTsKKy0Jc3Fybl9lbHRmcDI1NTE5XzF3X2FkeChUWzJdLCA1KTsKKy0JbXVsX2VsdGZwMjU1MTlfMXdfYWR4KFRbMV0sIFRbMV0sIFRbMl0pOworLQorLQltZW16ZXJvX2V4cGxpY2l0KCZtLCBzaXplb2YobSkpOworLX0KKy0KKy1zdGF0aWMgdm9pZCBpbnZfZWx0ZnAyNTUxOV8xd19ibWkyKHU2NCAqY29uc3QgYywgY29uc3QgdTY0ICpjb25zdCBhKQorLXsKKy0Jc3RydWN0IHsKKy0JCWVsdGZwMjU1MTlfMXdfYnVmZmVyIGJ1ZmZlcjsKKy0JCWVsdGZwMjU1MTlfMXcgeDAsIHgxLCB4MjsKKy0JfSBfX2FsaWduZWQoMzIpIG07CistCXU2NCAqVFs1XTsKKy0KKy0JVFswXSA9IG0ueDA7CistCVRbMV0gPSBjOyAvKiB4XigtMSkgKi8KKy0JVFsyXSA9IG0ueDE7CistCVRbM10gPSBtLngyOworLQorLQljb3B5X2VsdGZwMjU1MTlfMXcoVFsxXSwgYSk7CistCXNxcm5fZWx0ZnAyNTUxOV8xd19ibWkyKFRbMV0sIDEpOworLQljb3B5X2VsdGZwMjU1MTlfMXcoVFsyXSwgVFsxXSk7CistCXNxcm5fZWx0ZnAyNTUxOV8xd19ibWkyKFRbMl0sIDIpOworLQltdWxfZWx0ZnAyNTUxOV8xd19ibWkyKFRbMF0sIGEsIFRbMl0pOworLQltdWxfZWx0ZnAyNTUxOV8xd19ibWkyKFRbMV0sIFRbMV0sIFRbMF0pOworLQljb3B5X2VsdGZwMjU1MTlfMXcoVFsyXSwgVFsxXSk7CistCXNxcm5fZWx0ZnAyNTUxOV8xd19ibWkyKFRbMl0sIDEpOworLQltdWxfZWx0ZnAyNTUxOV8xd19ibWkyKFRbMF0sIFRbMF0sIFRbMl0pOworLQljb3B5X2VsdGZwMjU1MTlfMXcoVFsyXSwgVFswXSk7CistCXNxcm5fZWx0ZnAyNTUxOV8xd19ibWkyKFRbMl0sIDUpOworLQltdWxfZWx0ZnAyNTUxOV8xd19ibWkyKFRbMF0sIFRbMF0sIFRbMl0pOworLQljb3B5X2VsdGZwMjU1MTlfMXcoVFsyXSwgVFswXSk7CistCXNxcm5fZWx0ZnAyNTUxOV8xd19ibWkyKFRbMl0sIDEwKTsKKy0JbXVsX2VsdGZwMjU1MTlfMXdfYm1pMihUWzJdLCBUWzJdLCBUWzBdKTsKKy0JY29weV9lbHRmcDI1NTE5XzF3KFRbM10sIFRbMl0pOworLQlzcXJuX2VsdGZwMjU1MTlfMXdfYm1pMihUWzNdLCAyMCk7CistCW11bF9lbHRmcDI1NTE5XzF3X2JtaTIoVFszXSwgVFszXSwgVFsyXSk7CistCXNxcm5fZWx0ZnAyNTUxOV8xd19ibWkyKFRbM10sIDEwKTsKKy0JbXVsX2VsdGZwMjU1MTlfMXdfYm1pMihUWzNdLCBUWzNdLCBUWzBdKTsKKy0JY29weV9lbHRmcDI1NTE5XzF3KFRbMF0sIFRbM10pOworLQlzcXJuX2VsdGZwMjU1MTlfMXdfYm1pMihUWzBdLCA1MCk7CistCW11bF9lbHRmcDI1NTE5XzF3X2JtaTIoVFswXSwgVFswXSwgVFszXSk7CistCWNvcHlfZWx0ZnAyNTUxOV8xdyhUWzJdLCBUWzBdKTsKKy0Jc3Fybl9lbHRmcDI1NTE5XzF3X2JtaTIoVFsyXSwgMTAwKTsKKy0JbXVsX2VsdGZwMjU1MTlfMXdfYm1pMihUWzJdLCBUWzJdLCBUWzBdKTsKKy0Jc3Fybl9lbHRmcDI1NTE5XzF3X2JtaTIoVFsyXSwgNTApOworLQltdWxfZWx0ZnAyNTUxOV8xd19ibWkyKFRbMl0sIFRbMl0sIFRbM10pOworLQlzcXJuX2VsdGZwMjU1MTlfMXdfYm1pMihUWzJdLCA1KTsKKy0JbXVsX2VsdGZwMjU1MTlfMXdfYm1pMihUWzFdLCBUWzFdLCBUWzJdKTsKKysJCS8qIEludmVydCB0aGUgcG9sYXJpdHkgb2YgYml0IHRvIG1hdGNoIGNtb3YgZXhwZWN0YXRpb25zICovCisrCQkiICBhZGQgJDE4NDQ2NzQ0MDczNzA5NTUxNjE1LCAlMDsiCisgCistCW1lbXplcm9fZXhwbGljaXQoJm0sIHNpemVvZihtKSk7CisrCQkvKiBjc3dhcCBwMVswXSwgcDJbMF0gKi8KKysJCSIgIG1vdnEgMCglMSksICUlcjg7IgorKwkJIiAgbW92cSAwKCUyKSwgJSVyOTsiCisrCQkiICBtb3YgJSVyOCwgJSVyMTA7IgorKwkJIiAgY21vdmMgJSVyOSwgJSVyODsiCisrCQkiICBjbW92YyAlJXIxMCwgJSVyOTsiCisrCQkiICBtb3ZxICUlcjgsIDAoJTEpOyIKKysJCSIgIG1vdnEgJSVyOSwgMCglMik7IgorKworKwkJLyogY3N3YXAgcDFbMV0sIHAyWzFdICovCisrCQkiICBtb3ZxIDgoJTEpLCAlJXI4OyIKKysJCSIgIG1vdnEgOCglMiksICUlcjk7IgorKwkJIiAgbW92ICUlcjgsICUlcjEwOyIKKysJCSIgIGNtb3ZjICUlcjksICUlcjg7IgorKwkJIiAgY21vdmMgJSVyMTAsICUlcjk7IgorKwkJIiAgbW92cSAlJXI4LCA4KCUxKTsiCisrCQkiICBtb3ZxICUlcjksIDgoJTIpOyIKKysKKysJCS8qIGNzd2FwIHAxWzJdLCBwMlsyXSAqLworKwkJIiAgbW92cSAxNiglMSksICUlcjg7IgorKwkJIiAgbW92cSAxNiglMiksICUlcjk7IgorKwkJIiAgbW92ICUlcjgsICUlcjEwOyIKKysJCSIgIGNtb3ZjICUlcjksICUlcjg7IgorKwkJIiAgY21vdmMgJSVyMTAsICUlcjk7IgorKwkJIiAgbW92cSAlJXI4LCAxNiglMSk7IgorKwkJIiAgbW92cSAlJXI5LCAxNiglMik7IgorKworKwkJLyogY3N3YXAgcDFbM10sIHAyWzNdICovCisrCQkiICBtb3ZxIDI0KCUxKSwgJSVyODsiCisrCQkiICBtb3ZxIDI0KCUyKSwgJSVyOTsiCisrCQkiICBtb3YgJSVyOCwgJSVyMTA7IgorKwkJIiAgY21vdmMgJSVyOSwgJSVyODsiCisrCQkiICBjbW92YyAlJXIxMCwgJSVyOTsiCisrCQkiICBtb3ZxICUlcjgsIDI0KCUxKTsiCisrCQkiICBtb3ZxICUlcjksIDI0KCUyKTsiCisrCisrCQkvKiBjc3dhcCBwMVs0XSwgcDJbNF0gKi8KKysJCSIgIG1vdnEgMzIoJTEpLCAlJXI4OyIKKysJCSIgIG1vdnEgMzIoJTIpLCAlJXI5OyIKKysJCSIgIG1vdiAlJXI4LCAlJXIxMDsiCisrCQkiICBjbW92YyAlJXI5LCAlJXI4OyIKKysJCSIgIGNtb3ZjICUlcjEwLCAlJXI5OyIKKysJCSIgIG1vdnEgJSVyOCwgMzIoJTEpOyIKKysJCSIgIG1vdnEgJSVyOSwgMzIoJTIpOyIKKysKKysJCS8qIGNzd2FwIHAxWzVdLCBwMls1XSAqLworKwkJIiAgbW92cSA0MCglMSksICUlcjg7IgorKwkJIiAgbW92cSA0MCglMiksICUlcjk7IgorKwkJIiAgbW92ICUlcjgsICUlcjEwOyIKKysJCSIgIGNtb3ZjICUlcjksICUlcjg7IgorKwkJIiAgY21vdmMgJSVyMTAsICUlcjk7IgorKwkJIiAgbW92cSAlJXI4LCA0MCglMSk7IgorKwkJIiAgbW92cSAlJXI5LCA0MCglMik7IgorKworKwkJLyogY3N3YXAgcDFbNl0sIHAyWzZdICovCisrCQkiICBtb3ZxIDQ4KCUxKSwgJSVyODsiCisrCQkiICBtb3ZxIDQ4KCUyKSwgJSVyOTsiCisrCQkiICBtb3YgJSVyOCwgJSVyMTA7IgorKwkJIiAgY21vdmMgJSVyOSwgJSVyODsiCisrCQkiICBjbW92YyAlJXIxMCwgJSVyOTsiCisrCQkiICBtb3ZxICUlcjgsIDQ4KCUxKTsiCisrCQkiICBtb3ZxICUlcjksIDQ4KCUyKTsiCisrCisrCQkvKiBjc3dhcCBwMVs3XSwgcDJbN10gKi8KKysJCSIgIG1vdnEgNTYoJTEpLCAlJXI4OyIKKysJCSIgIG1vdnEgNTYoJTIpLCAlJXI5OyIKKysJCSIgIG1vdiAlJXI4LCAlJXIxMDsiCisrCQkiICBjbW92YyAlJXI5LCAlJXI4OyIKKysJCSIgIGNtb3ZjICUlcjEwLCAlJXI5OyIKKysJCSIgIG1vdnEgJSVyOCwgNTYoJTEpOyIKKysJCSIgIG1vdnEgJSVyOSwgNTYoJTIpOyIKKysJOiAiKyZyIiAoYml0KQorKwk6ICJyIiAocDEpLCAiciIgKHAyKQorKwk6ICIlcjgiLCAiJXI5IiwgIiVyMTAiLCAibWVtb3J5IiwgImNjIgorKwkpOworIH0KKyAKKy0vKiBHaXZlbiBjLCBhIDI1Ni1iaXQgbnVtYmVyLCBmcmVkX2VsdGZwMjU1MTlfMXcgdXBkYXRlcyBjCistICogd2l0aCBhIG51bWJlciBzdWNoIHRoYXQgMCA8PSBDIDwgMioqMjU1LTE5LgorLSAqLworLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBmcmVkX2VsdGZwMjU1MTlfMXcodTY0ICpjb25zdCBjKQorKy8qIENvbXB1dGVzIHRoZSBzcXVhcmUgb2YgYSBmaWVsZCBlbGVtZW50OiBvdXQgPC0gZiAqIGYKKysgKiBVc2VzIHRoZSA4LWVsZW1lbnQgYnVmZmVyIHRtcCBmb3IgaW50ZXJtZWRpYXRlIHJlc3VsdHMgKi8KKytzdGF0aWMgaW5saW5lIHZvaWQgZnNxcih1NjQgKm91dCwgY29uc3QgdTY0ICpmLCB1NjQgKnRtcCkKKyB7CistCXU2NCB0bXAwID0gMzgsIHRtcDEgPSAxOTsKKyAJYXNtIHZvbGF0aWxlKAorLQkJImJ0cnEgICAkNjMsICAgICUzIDsiIC8qIFB1dCBiaXQgMjU1IGluIGNhcnJ5IGZsYWcgYW5kIGNsZWFyICovCistCQkiY21vdm5jbCAlazUsICAgJWs0IDsiIC8qIGNbMjU1XSA/IDM4IDogMTkgKi8KKy0KKy0JCS8qIEFkZCBlaXRoZXIgMTkgb3IgMzggdG8gYyAqLworLQkJImFkZHEgICAgJTQsICAgJTAgOyIKKy0JCSJhZGNxICAgICQwLCAgICUxIDsiCistCQkiYWRjcSAgICAkMCwgICAlMiA7IgorLQkJImFkY3EgICAgJDAsICAgJTMgOyIKKy0KKy0JCS8qIFRlc3QgZm9yIGJpdCAyNTUgYWdhaW47IG9ubHkgdHJpZ2dlcmVkIG9uIG92ZXJmbG93IG1vZHVsbyAyXjI1NS0xOSAqLworLQkJIm1vdmwgICAgJDAsICAlazQgOyIKKy0JCSJjbW92bnNsICVrNSwgICVrNCA7IiAvKiBjWzI1NV0gPyAwIDogMTkgKi8KKy0JCSJidHJxICAgJDYzLCAgICUzIDsiIC8qIENsZWFyIGJpdCAyNTUgKi8KKy0KKy0JCS8qIFN1YnRyYWN0IDE5IGlmIG5lY2Vzc2FyeSAqLworLQkJInN1YnEgICAgJTQsICAgJTAgOyIKKy0JCSJzYmJxICAgICQwLCAgICUxIDsiCistCQkic2JicSAgICAkMCwgICAlMiA7IgorLQkJInNiYnEgICAgJDAsICAgJTMgOyIKKy0KKy0JCTogIityIihjWzBdKSwgIityIihjWzFdKSwgIityIihjWzJdKSwgIityIihjWzNdKSwgIityIih0bXAwKSwKKy0JCSAgIityIih0bXAxKQorLQkJOgorLQkJOiAibWVtb3J5IiwgImNjIik7CistfQorKwkJLyogQ29tcHV0ZSB0aGUgcmF3IG11bHRpcGxpY2F0aW9uOiB0bXAgPC0gZiAqIGYgKi8KKyAKKy1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgY3N3YXAodTggYml0LCB1NjQgKmNvbnN0IHB4LCB1NjQgKmNvbnN0IHB5KQorLXsKKy0JdTY0IHRlbXA7CistCWFzbSB2b2xhdGlsZSgKKy0JCSJ0ZXN0ICU5LCAlOSA7IgorLQkJIm1vdnEgJTAsICU4IDsiCistCQkiY21vdm56cSAlNCwgJTAgOyIKKy0JCSJjbW92bnpxICU4LCAlNCA7IgorLQkJIm1vdnEgJTEsICU4IDsiCistCQkiY21vdm56cSAlNSwgJTEgOyIKKy0JCSJjbW92bnpxICU4LCAlNSA7IgorLQkJIm1vdnEgJTIsICU4IDsiCistCQkiY21vdm56cSAlNiwgJTIgOyIKKy0JCSJjbW92bnpxICU4LCAlNiA7IgorLQkJIm1vdnEgJTMsICU4IDsiCistCQkiY21vdm56cSAlNywgJTMgOyIKKy0JCSJjbW92bnpxICU4LCAlNyA7IgorLQkJOiAiK3IiKHB4WzBdKSwgIityIihweFsxXSksICIrciIocHhbMl0pLCAiK3IiKHB4WzNdKSwKKy0JCSAgIityIihweVswXSksICIrciIocHlbMV0pLCAiK3IiKHB5WzJdKSwgIityIihweVszXSksCistCQkgICI9ciIodGVtcCkKKy0JCTogInIiKGJpdCkKKy0JCTogImNjIgorKwkJLyogU3RlcCAxOiBDb21wdXRlIGFsbCBwYXJ0aWFsIHByb2R1Y3RzICovCisrCQkiICBtb3ZxIDAoJTEpLCAlJXJkeDsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZlswXSAqLworKwkJIiAgbXVseHEgOCglMSksICUlcjgsICUlcjE0OyIgICAgICAiICB4b3IgJSVyMTUsICUlcjE1OyIgICAgIC8qIGZbMV0qZlswXSAqLworKwkJIiAgbXVseHEgMTYoJTEpLCAlJXI5LCAlJXIxMDsiICAgICAiICBhZGN4ICUlcjE0LCAlJXI5OyIgICAgIC8qIGZbMl0qZlswXSAqLworKwkJIiAgbXVseHEgMjQoJTEpLCAlJXJheCwgJSVyY3g7IiAgICAiICBhZGN4ICUlcmF4LCAlJXIxMDsiICAgIC8qIGZbM10qZlswXSAqLworKwkJIiAgbW92cSAyNCglMSksICUlcmR4OyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZbM10gKi8KKysJCSIgIG11bHhxIDgoJTEpLCAlJXIxMSwgJSVyMTI7IiAgICAgIiAgYWRjeCAlJXJjeCwgJSVyMTE7IiAgICAvKiBmWzFdKmZbM10gKi8KKysJCSIgIG11bHhxIDE2KCUxKSwgJSVyYXgsICUlcjEzOyIgICAgIiAgYWRjeCAlJXJheCwgJSVyMTI7IiAgICAvKiBmWzJdKmZbM10gKi8KKysJCSIgIG1vdnEgOCglMSksICUlcmR4OyIgICAgICAgICAgICAgIiAgYWRjeCAlJXIxNSwgJSVyMTM7IiAgICAvKiBmMSAqLworKwkJIiAgbXVseHEgMTYoJTEpLCAlJXJheCwgJSVyY3g7IiAgICAiICBtb3YgJDAsICUlcjE0OyIgICAgICAgIC8qIGZbMl0qZlsxXSAqLworKworKwkJLyogU3RlcCAyOiBDb21wdXRlIHR3byBwYXJhbGxlbCBjYXJyeSBjaGFpbnMgKi8KKysJCSIgIHhvciAlJXIxNSwgJSVyMTU7IgorKwkJIiAgYWRveCAlJXJheCwgJSVyMTA7IgorKwkJIiAgYWRjeCAlJXI4LCAlJXI4OyIKKysJCSIgIGFkb3ggJSVyY3gsICUlcjExOyIKKysJCSIgIGFkY3ggJSVyOSwgJSVyOTsiCisrCQkiICBhZG94ICUlcjE1LCAlJXIxMjsiCisrCQkiICBhZGN4ICUlcjEwLCAlJXIxMDsiCisrCQkiICBhZG94ICUlcjE1LCAlJXIxMzsiCisrCQkiICBhZGN4ICUlcjExLCAlJXIxMTsiCisrCQkiICBhZG94ICUlcjE1LCAlJXIxNDsiCisrCQkiICBhZGN4ICUlcjEyLCAlJXIxMjsiCisrCQkiICBhZGN4ICUlcjEzLCAlJXIxMzsiCisrCQkiICBhZGN4ICUlcjE0LCAlJXIxNDsiCisrCisrCQkvKiBTdGVwIDM6IENvbXB1dGUgaW50ZXJtZWRpYXRlIHNxdWFyZXMgKi8KKysJCSIgIG1vdnEgMCglMSksICUlcmR4OyIgICAgICIgIG11bHggJSVyZHgsICUlcmF4LCAlJXJjeDsiICAgIC8qIGZbMF1eMiAqLworKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgbW92cSAlJXJheCwgMCglMCk7IgorKwkJIiAgYWRkICUlcmN4LCAlJXI4OyIgICAgICAgIiAgbW92cSAlJXI4LCA4KCUwKTsiCisrCQkiICBtb3ZxIDgoJTEpLCAlJXJkeDsiICAgICAiICBtdWx4ICUlcmR4LCAlJXJheCwgJSVyY3g7IiAgICAvKiBmWzFdXjIgKi8KKysJCSIgIGFkY3ggJSVyYXgsICUlcjk7IiAgICAgICIgIG1vdnEgJSVyOSwgMTYoJTApOyIKKysJCSIgIGFkY3ggJSVyY3gsICUlcjEwOyIgICAgICIgIG1vdnEgJSVyMTAsIDI0KCUwKTsiCisrCQkiICBtb3ZxIDE2KCUxKSwgJSVyZHg7IiAgICAiICBtdWx4ICUlcmR4LCAlJXJheCwgJSVyY3g7IiAgICAvKiBmWzJdXjIgKi8KKysJCSIgIGFkY3ggJSVyYXgsICUlcjExOyIgICAgICIgIG1vdnEgJSVyMTEsIDMyKCUwKTsiCisrCQkiICBhZGN4ICUlcmN4LCAlJXIxMjsiICAgICAiICBtb3ZxICUlcjEyLCA0MCglMCk7IgorKwkJIiAgbW92cSAyNCglMSksICUlcmR4OyIgICAgIiAgbXVseCAlJXJkeCwgJSVyYXgsICUlcmN4OyIgICAgLyogZlszXV4yICovCisrCQkiICBhZGN4ICUlcmF4LCAlJXIxMzsiICAgICAiICBtb3ZxICUlcjEzLCA0OCglMCk7IgorKwkJIiAgYWRjeCAlJXJjeCwgJSVyMTQ7IiAgICAgIiAgbW92cSAlJXIxNCwgNTYoJTApOyIKKysKKysJCS8qIExpbmUgdXAgcG9pbnRlcnMgKi8KKysJCSIgIG1vdiAlMCwgJTE7IgorKwkJIiAgbW92ICUyLCAlMDsiCisrCisrCQkvKiBXcmFwIHRoZSByZXN1bHQgYmFjayBpbnRvIHRoZSBmaWVsZCAqLworKworKwkJLyogU3RlcCAxOiBDb21wdXRlIGRzdCArIGNhcnJ5ID09IHRtcF9oaSAqIDM4ICsgdG1wX2xvICovCisrCQkiICBtb3YgJDM4LCAlJXJkeDsiCisrCQkiICBtdWx4cSAzMiglMSksICUlcjgsICUlcjEzOyIKKysJCSIgIHhvciAlJXJjeCwgJSVyY3g7IgorKwkJIiAgYWRveHEgMCglMSksICUlcjg7IgorKwkJIiAgbXVseHEgNDAoJTEpLCAlJXI5LCAlJXIxMjsiCisrCQkiICBhZGN4ICUlcjEzLCAlJXI5OyIKKysJCSIgIGFkb3hxIDgoJTEpLCAlJXI5OyIKKysJCSIgIG11bHhxIDQ4KCUxKSwgJSVyMTAsICUlcjEzOyIKKysJCSIgIGFkY3ggJSVyMTIsICUlcjEwOyIKKysJCSIgIGFkb3hxIDE2KCUxKSwgJSVyMTA7IgorKwkJIiAgbXVseHEgNTYoJTEpLCAlJXIxMSwgJSVyYXg7IgorKwkJIiAgYWRjeCAlJXIxMywgJSVyMTE7IgorKwkJIiAgYWRveHEgMjQoJTEpLCAlJXIxMTsiCisrCQkiICBhZGN4ICUlcmN4LCAlJXJheDsiCisrCQkiICBhZG94ICUlcmN4LCAlJXJheDsiCisrCQkiICBpbXVsICUlcmR4LCAlJXJheDsiCisrCisrCQkvKiBTdGVwIDI6IEZvbGQgdGhlIGNhcnJ5IGJhY2sgaW50byBkc3QgKi8KKysJCSIgIGFkZCAlJXJheCwgJSVyODsiCisrCQkiICBhZGN4ICUlcmN4LCAlJXI5OyIKKysJCSIgIG1vdnEgJSVyOSwgOCglMCk7IgorKwkJIiAgYWRjeCAlJXJjeCwgJSVyMTA7IgorKwkJIiAgbW92cSAlJXIxMCwgMTYoJTApOyIKKysJCSIgIGFkY3ggJSVyY3gsICUlcjExOyIKKysJCSIgIG1vdnEgJSVyMTEsIDI0KCUwKTsiCisrCisrCQkvKiBTdGVwIDM6IEZvbGQgdGhlIGNhcnJ5IGJpdCBiYWNrIGluOyBndWFyYW50ZWVkIG5vdCB0byBjYXJyeSBhdCB0aGlzIHBvaW50ICovCisrCQkiICBtb3YgJDAsICUlcmF4OyIKKysJCSIgIGNtb3ZjICUlcmR4LCAlJXJheDsiCisrCQkiICBhZGQgJSVyYXgsICUlcjg7IgorKwkJIiAgbW92cSAlJXI4LCAwKCUwKTsiCisrCTogIismciIgKHRtcCksICIrJnIiIChmKSwgIismciIgKG91dCkKKysJOgorKwk6ICIlcmF4IiwgIiVyY3giLCAiJXJkeCIsICIlcjgiLCAiJXI5IiwgIiVyMTAiLCAiJXIxMSIsICIlcjEyIiwgIiVyMTMiLCAiJXIxNCIsICIlcjE1IiwgIm1lbW9yeSIsICJjYyIKKyAJKTsKKyB9CisgCistc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGNzZWxlY3QodTggYml0LCB1NjQgKmNvbnN0IHB4LCBjb25zdCB1NjQgKmNvbnN0IHB5KQorKy8qIENvbXB1dGVzIHR3byBmaWVsZCBzcXVhcmluZ3M6CisrICogb3V0WzBdIDwtIGZbMF0gKiBmWzBdCisrICogb3V0WzFdIDwtIGZbMV0gKiBmWzFdCisrICogVXNlcyB0aGUgMTYtZWxlbWVudCBidWZmZXIgdG1wIGZvciBpbnRlcm1lZGlhdGUgcmVzdWx0cyAqLworK3N0YXRpYyBpbmxpbmUgdm9pZCBmc3FyMih1NjQgKm91dCwgY29uc3QgdTY0ICpmLCB1NjQgKnRtcCkKKyB7CisgCWFzbSB2b2xhdGlsZSgKKy0JCSJ0ZXN0ICU0LCAlNCA7IgorLQkJImNtb3ZuenEgJTUsICUwIDsiCistCQkiY21vdm56cSAlNiwgJTEgOyIKKy0JCSJjbW92bnpxICU3LCAlMiA7IgorLQkJImNtb3ZuenEgJTgsICUzIDsiCistCQk6ICIrciIocHhbMF0pLCAiK3IiKHB4WzFdKSwgIityIihweFsyXSksICIrciIocHhbM10pCistCQk6ICJyIihiaXQpLCAicm0iKHB5WzBdKSwgInJtIihweVsxXSksICJybSIocHlbMl0pLCAicm0iKHB5WzNdKQorLQkJOiAiY2MiCisrCQkvKiBTdGVwIDE6IENvbXB1dGUgYWxsIHBhcnRpYWwgcHJvZHVjdHMgKi8KKysJCSIgIG1vdnEgMCglMSksICUlcmR4OyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmWzBdICovCisrCQkiICBtdWx4cSA4KCUxKSwgJSVyOCwgJSVyMTQ7IiAgICAgICIgIHhvciAlJXIxNSwgJSVyMTU7IiAgICAgLyogZlsxXSpmWzBdICovCisrCQkiICBtdWx4cSAxNiglMSksICUlcjksICUlcjEwOyIgICAgICIgIGFkY3ggJSVyMTQsICUlcjk7IiAgICAgLyogZlsyXSpmWzBdICovCisrCQkiICBtdWx4cSAyNCglMSksICUlcmF4LCAlJXJjeDsiICAgICIgIGFkY3ggJSVyYXgsICUlcjEwOyIgICAgLyogZlszXSpmWzBdICovCisrCQkiICBtb3ZxIDI0KCUxKSwgJSVyZHg7IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZlszXSAqLworKwkJIiAgbXVseHEgOCglMSksICUlcjExLCAlJXIxMjsiICAgICAiICBhZGN4ICUlcmN4LCAlJXIxMTsiICAgIC8qIGZbMV0qZlszXSAqLworKwkJIiAgbXVseHEgMTYoJTEpLCAlJXJheCwgJSVyMTM7IiAgICAiICBhZGN4ICUlcmF4LCAlJXIxMjsiICAgIC8qIGZbMl0qZlszXSAqLworKwkJIiAgbW92cSA4KCUxKSwgJSVyZHg7IiAgICAgICAgICAgICAiICBhZGN4ICUlcjE1LCAlJXIxMzsiICAgIC8qIGYxICovCisrCQkiICBtdWx4cSAxNiglMSksICUlcmF4LCAlJXJjeDsiICAgICIgIG1vdiAkMCwgJSVyMTQ7IiAgICAgICAgLyogZlsyXSpmWzFdICovCisrCisrCQkvKiBTdGVwIDI6IENvbXB1dGUgdHdvIHBhcmFsbGVsIGNhcnJ5IGNoYWlucyAqLworKwkJIiAgeG9yICUlcjE1LCAlJXIxNTsiCisrCQkiICBhZG94ICUlcmF4LCAlJXIxMDsiCisrCQkiICBhZGN4ICUlcjgsICUlcjg7IgorKwkJIiAgYWRveCAlJXJjeCwgJSVyMTE7IgorKwkJIiAgYWRjeCAlJXI5LCAlJXI5OyIKKysJCSIgIGFkb3ggJSVyMTUsICUlcjEyOyIKKysJCSIgIGFkY3ggJSVyMTAsICUlcjEwOyIKKysJCSIgIGFkb3ggJSVyMTUsICUlcjEzOyIKKysJCSIgIGFkY3ggJSVyMTEsICUlcjExOyIKKysJCSIgIGFkb3ggJSVyMTUsICUlcjE0OyIKKysJCSIgIGFkY3ggJSVyMTIsICUlcjEyOyIKKysJCSIgIGFkY3ggJSVyMTMsICUlcjEzOyIKKysJCSIgIGFkY3ggJSVyMTQsICUlcjE0OyIKKysKKysJCS8qIFN0ZXAgMzogQ29tcHV0ZSBpbnRlcm1lZGlhdGUgc3F1YXJlcyAqLworKwkJIiAgbW92cSAwKCUxKSwgJSVyZHg7IiAgICAgIiAgbXVseCAlJXJkeCwgJSVyYXgsICUlcmN4OyIgICAgLyogZlswXV4yICovCisrCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBtb3ZxICUlcmF4LCAwKCUwKTsiCisrCQkiICBhZGQgJSVyY3gsICUlcjg7IiAgICAgICAiICBtb3ZxICUlcjgsIDgoJTApOyIKKysJCSIgIG1vdnEgOCglMSksICUlcmR4OyIgICAgICIgIG11bHggJSVyZHgsICUlcmF4LCAlJXJjeDsiICAgIC8qIGZbMV1eMiAqLworKwkJIiAgYWRjeCAlJXJheCwgJSVyOTsiICAgICAgIiAgbW92cSAlJXI5LCAxNiglMCk7IgorKwkJIiAgYWRjeCAlJXJjeCwgJSVyMTA7IiAgICAgIiAgbW92cSAlJXIxMCwgMjQoJTApOyIKKysJCSIgIG1vdnEgMTYoJTEpLCAlJXJkeDsiICAgICIgIG11bHggJSVyZHgsICUlcmF4LCAlJXJjeDsiICAgIC8qIGZbMl1eMiAqLworKwkJIiAgYWRjeCAlJXJheCwgJSVyMTE7IiAgICAgIiAgbW92cSAlJXIxMSwgMzIoJTApOyIKKysJCSIgIGFkY3ggJSVyY3gsICUlcjEyOyIgICAgICIgIG1vdnEgJSVyMTIsIDQwKCUwKTsiCisrCQkiICBtb3ZxIDI0KCUxKSwgJSVyZHg7IiAgICAiICBtdWx4ICUlcmR4LCAlJXJheCwgJSVyY3g7IiAgICAvKiBmWzNdXjIgKi8KKysJCSIgIGFkY3ggJSVyYXgsICUlcjEzOyIgICAgICIgIG1vdnEgJSVyMTMsIDQ4KCUwKTsiCisrCQkiICBhZGN4ICUlcmN4LCAlJXIxNDsiICAgICAiICBtb3ZxICUlcjE0LCA1NiglMCk7IgorKworKwkJLyogU3RlcCAxOiBDb21wdXRlIGFsbCBwYXJ0aWFsIHByb2R1Y3RzICovCisrCQkiICBtb3ZxIDMyKCUxKSwgJSVyZHg7IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZbMF0gKi8KKysJCSIgIG11bHhxIDQwKCUxKSwgJSVyOCwgJSVyMTQ7IiAgICAgICIgIHhvciAlJXIxNSwgJSVyMTU7IiAgICAgLyogZlsxXSpmWzBdICovCisrCQkiICBtdWx4cSA0OCglMSksICUlcjksICUlcjEwOyIgICAgICIgIGFkY3ggJSVyMTQsICUlcjk7IiAgICAgLyogZlsyXSpmWzBdICovCisrCQkiICBtdWx4cSA1NiglMSksICUlcmF4LCAlJXJjeDsiICAgICIgIGFkY3ggJSVyYXgsICUlcjEwOyIgICAgLyogZlszXSpmWzBdICovCisrCQkiICBtb3ZxIDU2KCUxKSwgJSVyZHg7IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZlszXSAqLworKwkJIiAgbXVseHEgNDAoJTEpLCAlJXIxMSwgJSVyMTI7IiAgICAgIiAgYWRjeCAlJXJjeCwgJSVyMTE7IiAgICAvKiBmWzFdKmZbM10gKi8KKysJCSIgIG11bHhxIDQ4KCUxKSwgJSVyYXgsICUlcjEzOyIgICAgIiAgYWRjeCAlJXJheCwgJSVyMTI7IiAgICAvKiBmWzJdKmZbM10gKi8KKysJCSIgIG1vdnEgNDAoJTEpLCAlJXJkeDsiICAgICAgICAgICAgICIgIGFkY3ggJSVyMTUsICUlcjEzOyIgICAgLyogZjEgKi8KKysJCSIgIG11bHhxIDQ4KCUxKSwgJSVyYXgsICUlcmN4OyIgICAgIiAgbW92ICQwLCAlJXIxNDsiICAgICAgICAvKiBmWzJdKmZbMV0gKi8KKysKKysJCS8qIFN0ZXAgMjogQ29tcHV0ZSB0d28gcGFyYWxsZWwgY2FycnkgY2hhaW5zICovCisrCQkiICB4b3IgJSVyMTUsICUlcjE1OyIKKysJCSIgIGFkb3ggJSVyYXgsICUlcjEwOyIKKysJCSIgIGFkY3ggJSVyOCwgJSVyODsiCisrCQkiICBhZG94ICUlcmN4LCAlJXIxMTsiCisrCQkiICBhZGN4ICUlcjksICUlcjk7IgorKwkJIiAgYWRveCAlJXIxNSwgJSVyMTI7IgorKwkJIiAgYWRjeCAlJXIxMCwgJSVyMTA7IgorKwkJIiAgYWRveCAlJXIxNSwgJSVyMTM7IgorKwkJIiAgYWRjeCAlJXIxMSwgJSVyMTE7IgorKwkJIiAgYWRveCAlJXIxNSwgJSVyMTQ7IgorKwkJIiAgYWRjeCAlJXIxMiwgJSVyMTI7IgorKwkJIiAgYWRjeCAlJXIxMywgJSVyMTM7IgorKwkJIiAgYWRjeCAlJXIxNCwgJSVyMTQ7IgorKworKwkJLyogU3RlcCAzOiBDb21wdXRlIGludGVybWVkaWF0ZSBzcXVhcmVzICovCisrCQkiICBtb3ZxIDMyKCUxKSwgJSVyZHg7IiAgICAgIiAgbXVseCAlJXJkeCwgJSVyYXgsICUlcmN4OyIgICAgLyogZlswXV4yICovCisrCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBtb3ZxICUlcmF4LCA2NCglMCk7IgorKwkJIiAgYWRkICUlcmN4LCAlJXI4OyIgICAgICAgIiAgbW92cSAlJXI4LCA3MiglMCk7IgorKwkJIiAgbW92cSA0MCglMSksICUlcmR4OyIgICAgICIgIG11bHggJSVyZHgsICUlcmF4LCAlJXJjeDsiICAgIC8qIGZbMV1eMiAqLworKwkJIiAgYWRjeCAlJXJheCwgJSVyOTsiICAgICAgIiAgbW92cSAlJXI5LCA4MCglMCk7IgorKwkJIiAgYWRjeCAlJXJjeCwgJSVyMTA7IiAgICAgIiAgbW92cSAlJXIxMCwgODgoJTApOyIKKysJCSIgIG1vdnEgNDgoJTEpLCAlJXJkeDsiICAgICIgIG11bHggJSVyZHgsICUlcmF4LCAlJXJjeDsiICAgIC8qIGZbMl1eMiAqLworKwkJIiAgYWRjeCAlJXJheCwgJSVyMTE7IiAgICAgIiAgbW92cSAlJXIxMSwgOTYoJTApOyIKKysJCSIgIGFkY3ggJSVyY3gsICUlcjEyOyIgICAgICIgIG1vdnEgJSVyMTIsIDEwNCglMCk7IgorKwkJIiAgbW92cSA1NiglMSksICUlcmR4OyIgICAgIiAgbXVseCAlJXJkeCwgJSVyYXgsICUlcmN4OyIgICAgLyogZlszXV4yICovCisrCQkiICBhZGN4ICUlcmF4LCAlJXIxMzsiICAgICAiICBtb3ZxICUlcjEzLCAxMTIoJTApOyIKKysJCSIgIGFkY3ggJSVyY3gsICUlcjE0OyIgICAgICIgIG1vdnEgJSVyMTQsIDEyMCglMCk7IgorKworKwkJLyogTGluZSB1cCBwb2ludGVycyAqLworKwkJIiAgbW92ICUwLCAlMTsiCisrCQkiICBtb3YgJTIsICUwOyIKKysKKysJCS8qIFN0ZXAgMTogQ29tcHV0ZSBkc3QgKyBjYXJyeSA9PSB0bXBfaGkgKiAzOCArIHRtcF9sbyAqLworKwkJIiAgbW92ICQzOCwgJSVyZHg7IgorKwkJIiAgbXVseHEgMzIoJTEpLCAlJXI4LCAlJXIxMzsiCisrCQkiICB4b3IgJSVyY3gsICUlcmN4OyIKKysJCSIgIGFkb3hxIDAoJTEpLCAlJXI4OyIKKysJCSIgIG11bHhxIDQwKCUxKSwgJSVyOSwgJSVyMTI7IgorKwkJIiAgYWRjeCAlJXIxMywgJSVyOTsiCisrCQkiICBhZG94cSA4KCUxKSwgJSVyOTsiCisrCQkiICBtdWx4cSA0OCglMSksICUlcjEwLCAlJXIxMzsiCisrCQkiICBhZGN4ICUlcjEyLCAlJXIxMDsiCisrCQkiICBhZG94cSAxNiglMSksICUlcjEwOyIKKysJCSIgIG11bHhxIDU2KCUxKSwgJSVyMTEsICUlcmF4OyIKKysJCSIgIGFkY3ggJSVyMTMsICUlcjExOyIKKysJCSIgIGFkb3hxIDI0KCUxKSwgJSVyMTE7IgorKwkJIiAgYWRjeCAlJXJjeCwgJSVyYXg7IgorKwkJIiAgYWRveCAlJXJjeCwgJSVyYXg7IgorKwkJIiAgaW11bCAlJXJkeCwgJSVyYXg7IgorKworKwkJLyogU3RlcCAyOiBGb2xkIHRoZSBjYXJyeSBiYWNrIGludG8gZHN0ICovCisrCQkiICBhZGQgJSVyYXgsICUlcjg7IgorKwkJIiAgYWRjeCAlJXJjeCwgJSVyOTsiCisrCQkiICBtb3ZxICUlcjksIDgoJTApOyIKKysJCSIgIGFkY3ggJSVyY3gsICUlcjEwOyIKKysJCSIgIG1vdnEgJSVyMTAsIDE2KCUwKTsiCisrCQkiICBhZGN4ICUlcmN4LCAlJXIxMTsiCisrCQkiICBtb3ZxICUlcjExLCAyNCglMCk7IgorKworKwkJLyogU3RlcCAzOiBGb2xkIHRoZSBjYXJyeSBiaXQgYmFjayBpbjsgZ3VhcmFudGVlZCBub3QgdG8gY2FycnkgYXQgdGhpcyBwb2ludCAqLworKwkJIiAgbW92ICQwLCAlJXJheDsiCisrCQkiICBjbW92YyAlJXJkeCwgJSVyYXg7IgorKwkJIiAgYWRkICUlcmF4LCAlJXI4OyIKKysJCSIgIG1vdnEgJSVyOCwgMCglMCk7IgorKworKwkJLyogU3RlcCAxOiBDb21wdXRlIGRzdCArIGNhcnJ5ID09IHRtcF9oaSAqIDM4ICsgdG1wX2xvICovCisrCQkiICBtb3YgJDM4LCAlJXJkeDsiCisrCQkiICBtdWx4cSA5NiglMSksICUlcjgsICUlcjEzOyIKKysJCSIgIHhvciAlJXJjeCwgJSVyY3g7IgorKwkJIiAgYWRveHEgNjQoJTEpLCAlJXI4OyIKKysJCSIgIG11bHhxIDEwNCglMSksICUlcjksICUlcjEyOyIKKysJCSIgIGFkY3ggJSVyMTMsICUlcjk7IgorKwkJIiAgYWRveHEgNzIoJTEpLCAlJXI5OyIKKysJCSIgIG11bHhxIDExMiglMSksICUlcjEwLCAlJXIxMzsiCisrCQkiICBhZGN4ICUlcjEyLCAlJXIxMDsiCisrCQkiICBhZG94cSA4MCglMSksICUlcjEwOyIKKysJCSIgIG11bHhxIDEyMCglMSksICUlcjExLCAlJXJheDsiCisrCQkiICBhZGN4ICUlcjEzLCAlJXIxMTsiCisrCQkiICBhZG94cSA4OCglMSksICUlcjExOyIKKysJCSIgIGFkY3ggJSVyY3gsICUlcmF4OyIKKysJCSIgIGFkb3ggJSVyY3gsICUlcmF4OyIKKysJCSIgIGltdWwgJSVyZHgsICUlcmF4OyIKKysKKysJCS8qIFN0ZXAgMjogRm9sZCB0aGUgY2FycnkgYmFjayBpbnRvIGRzdCAqLworKwkJIiAgYWRkICUlcmF4LCAlJXI4OyIKKysJCSIgIGFkY3ggJSVyY3gsICUlcjk7IgorKwkJIiAgbW92cSAlJXI5LCA0MCglMCk7IgorKwkJIiAgYWRjeCAlJXJjeCwgJSVyMTA7IgorKwkJIiAgbW92cSAlJXIxMCwgNDgoJTApOyIKKysJCSIgIGFkY3ggJSVyY3gsICUlcjExOyIKKysJCSIgIG1vdnEgJSVyMTEsIDU2KCUwKTsiCisrCisrCQkvKiBTdGVwIDM6IEZvbGQgdGhlIGNhcnJ5IGJpdCBiYWNrIGluOyBndWFyYW50ZWVkIG5vdCB0byBjYXJyeSBhdCB0aGlzIHBvaW50ICovCisrCQkiICBtb3YgJDAsICUlcmF4OyIKKysJCSIgIGNtb3ZjICUlcmR4LCAlJXJheDsiCisrCQkiICBhZGQgJSVyYXgsICUlcjg7IgorKwkJIiAgbW92cSAlJXI4LCAzMiglMCk7IgorKwk6ICIrJnIiICh0bXApLCAiKyZyIiAoZiksICIrJnIiIChvdXQpCisrCToKKysJOiAiJXJheCIsICIlcmN4IiwgIiVyZHgiLCAiJXI4IiwgIiVyOSIsICIlcjEwIiwgIiVyMTEiLCAiJXIxMiIsICIlcjEzIiwgIiVyMTQiLCAiJXIxNSIsICJtZW1vcnkiLCAiY2MiCisgCSk7CisgfQorIAorLXN0YXRpYyB2b2lkIGN1cnZlMjU1MTlfYWR4KHU4IHNoYXJlZFtDVVJWRTI1NTE5X0tFWV9TSVpFXSwKKy0JCQkgICBjb25zdCB1OCBwcml2YXRlX2tleVtDVVJWRTI1NTE5X0tFWV9TSVpFXSwKKy0JCQkgICBjb25zdCB1OCBzZXNzaW9uX2tleVtDVVJWRTI1NTE5X0tFWV9TSVpFXSkKKy17CistCXN0cnVjdCB7CistCQl1NjQgYnVmZmVyWzQgKiBOVU1fV09SRFNfRUxURlAyNTUxOV07CistCQl1NjQgY29vcmRpbmF0ZXNbNCAqIE5VTV9XT1JEU19FTFRGUDI1NTE5XTsKKy0JCXU2NCB3b3Jrc3BhY2VbNiAqIE5VTV9XT1JEU19FTFRGUDI1NTE5XTsKKy0JCXU4IHNlc3Npb25bQ1VSVkUyNTUxOV9LRVlfU0laRV07CistCQl1OCBwcml2YXRlW0NVUlZFMjU1MTlfS0VZX1NJWkVdOworLQl9IF9fYWxpZ25lZCgzMikgbTsKKy0KKy0JaW50IGkgPSAwLCBqID0gMDsKKy0JdTY0IHByZXYgPSAwOworLQl1NjQgKmNvbnN0IFgxID0gKHU2NCAqKW0uc2Vzc2lvbjsKKy0JdTY0ICpjb25zdCBrZXkgPSAodTY0ICopbS5wcml2YXRlOworLQl1NjQgKmNvbnN0IFB4ID0gbS5jb29yZGluYXRlcyArIDA7CistCXU2NCAqY29uc3QgUHogPSBtLmNvb3JkaW5hdGVzICsgNDsKKy0JdTY0ICpjb25zdCBReCA9IG0uY29vcmRpbmF0ZXMgKyA4OworLQl1NjQgKmNvbnN0IFF6ID0gbS5jb29yZGluYXRlcyArIDEyOworLQl1NjQgKmNvbnN0IFgyID0gUXg7CistCXU2NCAqY29uc3QgWjIgPSBRejsKKy0JdTY0ICpjb25zdCBYMyA9IFB4OworLQl1NjQgKmNvbnN0IFozID0gUHo7CistCXU2NCAqY29uc3QgWDJaMiA9IFF4OworLQl1NjQgKmNvbnN0IFgzWjMgPSBQeDsKKy0KKy0JdTY0ICpjb25zdCBBID0gbS53b3Jrc3BhY2UgKyAwOworLQl1NjQgKmNvbnN0IEIgPSBtLndvcmtzcGFjZSArIDQ7CistCXU2NCAqY29uc3QgRCA9IG0ud29ya3NwYWNlICsgODsKKy0JdTY0ICpjb25zdCBDID0gbS53b3Jrc3BhY2UgKyAxMjsKKy0JdTY0ICpjb25zdCBEQSA9IG0ud29ya3NwYWNlICsgMTY7CistCXU2NCAqY29uc3QgQ0IgPSBtLndvcmtzcGFjZSArIDIwOworLQl1NjQgKmNvbnN0IEFCID0gQTsKKy0JdTY0ICpjb25zdCBEQyA9IEQ7CistCXU2NCAqY29uc3QgREFDQiA9IERBOworLQorLQltZW1jcHkobS5wcml2YXRlLCBwcml2YXRlX2tleSwgc2l6ZW9mKG0ucHJpdmF0ZSkpOworLQltZW1jcHkobS5zZXNzaW9uLCBzZXNzaW9uX2tleSwgc2l6ZW9mKG0uc2Vzc2lvbikpOworLQorLQljdXJ2ZTI1NTE5X2NsYW1wX3NlY3JldChtLnByaXZhdGUpOworLQorLQkvKiBBcyBpbiB0aGUgZHJhZnQ6CistCSAqIFdoZW4gcmVjZWl2aW5nIHN1Y2ggYW4gYXJyYXksIGltcGxlbWVudGF0aW9ucyBvZiBjdXJ2ZTI1NTE5CistCSAqIE1VU1QgbWFzayB0aGUgbW9zdC1zaWduaWZpY2FudCBiaXQgaW4gdGhlIGZpbmFsIGJ5dGUuIFRoaXMKKy0JICogaXMgZG9uZSB0byBwcmVzZXJ2ZSBjb21wYXRpYmlsaXR5IHdpdGggcG9pbnQgZm9ybWF0cyB3aGljaAorLQkgKiByZXNlcnZlIHRoZSBzaWduIGJpdCBmb3IgdXNlIGluIG90aGVyIHByb3RvY29scyBhbmQgdG8KKy0JICogaW5jcmVhc2UgcmVzaXN0YW5jZSB0byBpbXBsZW1lbnRhdGlvbiBmaW5nZXJwcmludGluZworLQkgKi8KKy0JbS5zZXNzaW9uW0NVUlZFMjU1MTlfS0VZX1NJWkUgLSAxXSAmPSAoMSA8PCAoMjU1ICUgOCkpIC0gMTsKKy0KKy0JY29weV9lbHRmcDI1NTE5XzF3KFB4LCBYMSk7CistCXNldHplcm9fZWx0ZnAyNTUxOV8xdyhQeik7CistCXNldHplcm9fZWx0ZnAyNTUxOV8xdyhReCk7CistCXNldHplcm9fZWx0ZnAyNTUxOV8xdyhReik7CistCistCVB6WzBdID0gMTsKKy0JUXhbMF0gPSAxOworLQorLQkvKiBtYWluLWxvb3AgKi8KKy0JcHJldiA9IDA7CistCWogPSA2MjsKKy0JZm9yIChpID0gMzsgaSA+PSAwOyAtLWkpIHsKKy0JCXdoaWxlIChqID49IDApIHsKKy0JCQl1NjQgYml0ID0gKGtleVtpXSA+PiBqKSAmIDB4MTsKKy0JCQl1NjQgc3dhcCA9IGJpdCBeIHByZXY7CistCQkJcHJldiA9IGJpdDsKKy0KKy0JCQlhZGRfZWx0ZnAyNTUxOV8xd19hZHgoQSwgWDIsIFoyKTsJLyogQSA9IChYMitaMikgKi8KKy0JCQlzdWJfZWx0ZnAyNTUxOV8xdyhCLCBYMiwgWjIpOwkJLyogQiA9IChYMi1aMikgKi8KKy0JCQlhZGRfZWx0ZnAyNTUxOV8xd19hZHgoQywgWDMsIFozKTsJLyogQyA9IChYMytaMykgKi8KKy0JCQlzdWJfZWx0ZnAyNTUxOV8xdyhELCBYMywgWjMpOwkJLyogRCA9IChYMy1aMykgKi8KKy0JCQltdWxfZWx0ZnAyNTUxOV8yd19hZHgoREFDQiwgQUIsIERDKTsJLyogW0RBfENCXSA9IFtBfEJdKltEfENdICovCistCistCQkJY3NlbGVjdChzd2FwLCBBLCBDKTsKKy0JCQljc2VsZWN0KHN3YXAsIEIsIEQpOworLQorLQkJCXNxcl9lbHRmcDI1NTE5XzJ3X2FkeChBQik7CQkvKiBbQUF8QkJdID0gW0FeMnxCXjJdICovCistCQkJYWRkX2VsdGZwMjU1MTlfMXdfYWR4KFgzLCBEQSwgQ0IpOwkvKiBYMyA9IChEQStDQikgKi8KKy0JCQlzdWJfZWx0ZnAyNTUxOV8xdyhaMywgREEsIENCKTsJCS8qIFozID0gKERBLUNCKSAqLworLQkJCXNxcl9lbHRmcDI1NTE5XzJ3X2FkeChYM1ozKTsJCS8qIFtYM3xaM10gPSBbKERBK0NCKXwoREErQ0IpXV4yICovCistCistCQkJY29weV9lbHRmcDI1NTE5XzF3KFgyLCBCKTsJCS8qIFgyID0gQl4yICovCistCQkJc3ViX2VsdGZwMjU1MTlfMXcoWjIsIEEsIEIpOwkJLyogWjIgPSBFID0gQUEtQkIgKi8KKy0KKy0JCQltdWxfYTI0X2VsdGZwMjU1MTlfMXcoQiwgWjIpOwkJLyogQiA9IGEyNCpFICovCistCQkJYWRkX2VsdGZwMjU1MTlfMXdfYWR4KEIsIEIsIFgyKTsJLyogQiA9IGEyNCpFK0IgKi8KKy0JCQltdWxfZWx0ZnAyNTUxOV8yd19hZHgoWDJaMiwgWDJaMiwgQUIpOwkvKiBbWDJ8WjJdID0gW0J8RV0qW0F8YTI0KkUrQl0gKi8KKy0JCQltdWxfZWx0ZnAyNTUxOV8xd19hZHgoWjMsIFozLCBYMSk7CS8qIFozID0gWjMqWDEgKi8KKy0JCQktLWo7CistCQl9CistCQlqID0gNjM7CistCX0KKy0KKy0JaW52X2VsdGZwMjU1MTlfMXdfYWR4KEEsIFF6KTsKKy0JbXVsX2VsdGZwMjU1MTlfMXdfYWR4KCh1NjQgKilzaGFyZWQsIFF4LCBBKTsKKy0JZnJlZF9lbHRmcDI1NTE5XzF3KCh1NjQgKilzaGFyZWQpOworLQorLQltZW16ZXJvX2V4cGxpY2l0KCZtLCBzaXplb2YobSkpOworLX0KKy0KKy1zdGF0aWMgdm9pZCBjdXJ2ZTI1NTE5X2FkeF9iYXNlKHU4IHNlc3Npb25fa2V5W0NVUlZFMjU1MTlfS0VZX1NJWkVdLAorLQkJCQljb25zdCB1OCBwcml2YXRlX2tleVtDVVJWRTI1NTE5X0tFWV9TSVpFXSkKKytzdGF0aWMgdm9pZCBwb2ludF9hZGRfYW5kX2RvdWJsZSh1NjQgKnEsIHU2NCAqcDAxX3RtcDEsIHU2NCAqdG1wMikKKyB7CistCXN0cnVjdCB7CistCQl1NjQgYnVmZmVyWzQgKiBOVU1fV09SRFNfRUxURlAyNTUxOV07CistCQl1NjQgY29vcmRpbmF0ZXNbNCAqIE5VTV9XT1JEU19FTFRGUDI1NTE5XTsKKy0JCXU2NCB3b3Jrc3BhY2VbNCAqIE5VTV9XT1JEU19FTFRGUDI1NTE5XTsKKy0JCXU4IHByaXZhdGVbQ1VSVkUyNTUxOV9LRVlfU0laRV07CistCX0gX19hbGlnbmVkKDMyKSBtOworLQorLQljb25zdCBpbnQgaXRlWzRdID0geyA2NCwgNjQsIDY0LCA2MyB9OworLQljb25zdCBpbnQgcSA9IDM7CistCXU2NCBzd2FwID0gMTsKKy0KKy0JaW50IGkgPSAwLCBqID0gMCwgayA9IDA7CistCXU2NCAqY29uc3Qga2V5ID0gKHU2NCAqKW0ucHJpdmF0ZTsKKy0JdTY0ICpjb25zdCBVcjEgPSBtLmNvb3JkaW5hdGVzICsgMDsKKy0JdTY0ICpjb25zdCBacjEgPSBtLmNvb3JkaW5hdGVzICsgNDsKKy0JdTY0ICpjb25zdCBVcjIgPSBtLmNvb3JkaW5hdGVzICsgODsKKy0JdTY0ICpjb25zdCBacjIgPSBtLmNvb3JkaW5hdGVzICsgMTI7CistCistCXU2NCAqY29uc3QgVVpyMSA9IG0uY29vcmRpbmF0ZXMgKyAwOworLQl1NjQgKmNvbnN0IFpVcjIgPSBtLmNvb3JkaW5hdGVzICsgODsKKy0KKy0JdTY0ICpjb25zdCBBID0gbS53b3Jrc3BhY2UgKyAwOworLQl1NjQgKmNvbnN0IEIgPSBtLndvcmtzcGFjZSArIDQ7CistCXU2NCAqY29uc3QgQyA9IG0ud29ya3NwYWNlICsgODsKKy0JdTY0ICpjb25zdCBEID0gbS53b3Jrc3BhY2UgKyAxMjsKKy0KKy0JdTY0ICpjb25zdCBBQiA9IG0ud29ya3NwYWNlICsgMDsKKy0JdTY0ICpjb25zdCBDRCA9IG0ud29ya3NwYWNlICsgODsKKy0KKy0JY29uc3QgdTY0ICpjb25zdCBQID0gdGFibGVfbGFkZGVyXzhrOworLQorLQltZW1jcHkobS5wcml2YXRlLCBwcml2YXRlX2tleSwgc2l6ZW9mKG0ucHJpdmF0ZSkpOworLQorLQljdXJ2ZTI1NTE5X2NsYW1wX3NlY3JldChtLnByaXZhdGUpOworLQorLQlzZXR6ZXJvX2VsdGZwMjU1MTlfMXcoVXIxKTsKKy0Jc2V0emVyb19lbHRmcDI1NTE5XzF3KFpyMSk7CistCXNldHplcm9fZWx0ZnAyNTUxOV8xdyhacjIpOworLQlVcjFbMF0gPSAxOworLQlacjFbMF0gPSAxOworLQlacjJbMF0gPSAxOworLQorLQkvKiBHLVMgKi8KKy0JVXIyWzNdID0gMHgxZWFlY2RlZWUyN2NhYjM0VUw7CistCVVyMlsyXSA9IDB4YWRjN2EwYjkyMzVkNDhlMlVMOworLQlVcjJbMV0gPSAweGJiZjA5NWFlMTRiMmVkZjhVTDsKKy0JVXIyWzBdID0gMHg3ZTk0ZTFmZWM4MmZhYWJkVUw7CistCistCS8qIG1haW4tbG9vcCAqLworLQlqID0gcTsKKy0JZm9yIChpID0gMDsgaSA8IE5VTV9XT1JEU19FTFRGUDI1NTE5OyArK2kpIHsKKy0JCXdoaWxlIChqIDwgaXRlW2ldKSB7CistCQkJdTY0IGJpdCA9IChrZXlbaV0gPj4gaikgJiAweDE7CistCQkJayA9ICg2NCAqIGkgKyBqIC0gcSk7CistCQkJc3dhcCA9IHN3YXAgXiBiaXQ7CistCQkJY3N3YXAoc3dhcCwgVXIxLCBVcjIpOworLQkJCWNzd2FwKHN3YXAsIFpyMSwgWnIyKTsKKy0JCQlzd2FwID0gYml0OworLQkJCS8qIEFkZGl0aW9uICovCistCQkJc3ViX2VsdGZwMjU1MTlfMXcoQiwgVXIxLCBacjEpOwkJLyogQiA9IFVyMS1acjEgKi8KKy0JCQlhZGRfZWx0ZnAyNTUxOV8xd19hZHgoQSwgVXIxLCBacjEpOwkvKiBBID0gVXIxK1pyMSAqLworLQkJCW11bF9lbHRmcDI1NTE5XzF3X2FkeChDLCAmUFs0ICoga10sIEIpOwkvKiBDID0gTTAtQiAqLworLQkJCXN1Yl9lbHRmcDI1NTE5XzF3KEIsIEEsIEMpOwkJLyogQiA9IChVcjErWnIxKSAtIE0qKFVyMS1acjEpICovCistCQkJYWRkX2VsdGZwMjU1MTlfMXdfYWR4KEEsIEEsIEMpOwkJLyogQSA9IChVcjErWnIxKSArIE0qKFVyMS1acjEpICovCistCQkJc3FyX2VsdGZwMjU1MTlfMndfYWR4KEFCKTsJCS8qIEEgPSBBXjIgICAgICB8ICBCID0gQl4yICovCistCQkJbXVsX2VsdGZwMjU1MTlfMndfYWR4KFVacjEsIFpVcjIsIEFCKTsJLyogVXIxID0gWnIyKkEgIHwgIFpyMSA9IFVyMipCICovCistCQkJKytqOworKwl1NjQgKm5xID0gcDAxX3RtcDE7CisrCXU2NCAqbnFfcDEgPSBwMDFfdG1wMSArICh1MzIpOFU7CisrCXU2NCAqdG1wMSA9IHAwMV90bXAxICsgKHUzMikxNlU7CisrCXU2NCAqeDEgPSBxOworKwl1NjQgKngyID0gbnE7CisrCXU2NCAqejIgPSBucSArICh1MzIpNFU7CisrCXU2NCAqejMgPSBucV9wMSArICh1MzIpNFU7CisrCXU2NCAqYSA9IHRtcDE7CisrCXU2NCAqYiA9IHRtcDEgKyAodTMyKTRVOworKwl1NjQgKmFiID0gdG1wMTsKKysJdTY0ICpkYyA9IHRtcDEgKyAodTMyKThVOworKwl1NjQgKngzOworKwl1NjQgKnozMTsKKysJdTY0ICpkMDsKKysJdTY0ICpjMDsKKysJdTY0ICphMTsKKysJdTY0ICpiMTsKKysJdTY0ICpkOworKwl1NjQgKmM7CisrCXU2NCAqYWIxOworKwl1NjQgKmRjMTsKKysJZmFkZChhLCB4MiwgejIpOworKwlmc3ViKGIsIHgyLCB6Mik7CisrCXgzID0gbnFfcDE7CisrCXozMSA9IG5xX3AxICsgKHUzMik0VTsKKysJZDAgPSBkYzsKKysJYzAgPSBkYyArICh1MzIpNFU7CisrCWZhZGQoYzAsIHgzLCB6MzEpOworKwlmc3ViKGQwLCB4MywgejMxKTsKKysJZm11bDIoZGMsIGRjLCBhYiwgdG1wMik7CisrCWZhZGQoeDMsIGQwLCBjMCk7CisrCWZzdWIoejMxLCBkMCwgYzApOworKwlhMSA9IHRtcDE7CisrCWIxID0gdG1wMSArICh1MzIpNFU7CisrCWQgPSB0bXAxICsgKHUzMik4VTsKKysJYyA9IHRtcDEgKyAodTMyKTEyVTsKKysJYWIxID0gdG1wMTsKKysJZGMxID0gdG1wMSArICh1MzIpOFU7CisrCWZzcXIyKGRjMSwgYWIxLCB0bXAyKTsKKysJZnNxcjIobnFfcDEsIG5xX3AxLCB0bXAyKTsKKysJYTFbMFVdID0gY1swVV07CisrCWExWzFVXSA9IGNbMVVdOworKwlhMVsyVV0gPSBjWzJVXTsKKysJYTFbM1VdID0gY1szVV07CisrCWZzdWIoYywgZCwgYyk7CisrCWZtdWxfc2NhbGFyKGIxLCBjLCAodTY0KTEyMTY2NVUpOworKwlmYWRkKGIxLCBiMSwgZCk7CisrCWZtdWwyKG5xLCBkYzEsIGFiMSwgdG1wMik7CisrCWZtdWwoejMsIHozLCB4MSwgdG1wMik7CisrfQorKworK3N0YXRpYyB2b2lkIHBvaW50X2RvdWJsZSh1NjQgKm5xLCB1NjQgKnRtcDEsIHU2NCAqdG1wMikKKyt7CisrCXU2NCAqeDIgPSBucTsKKysJdTY0ICp6MiA9IG5xICsgKHUzMik0VTsKKysJdTY0ICphID0gdG1wMTsKKysJdTY0ICpiID0gdG1wMSArICh1MzIpNFU7CisrCXU2NCAqZCA9IHRtcDEgKyAodTMyKThVOworKwl1NjQgKmMgPSB0bXAxICsgKHUzMikxMlU7CisrCXU2NCAqYWIgPSB0bXAxOworKwl1NjQgKmRjID0gdG1wMSArICh1MzIpOFU7CisrCWZhZGQoYSwgeDIsIHoyKTsKKysJZnN1YihiLCB4MiwgejIpOworKwlmc3FyMihkYywgYWIsIHRtcDIpOworKwlhWzBVXSA9IGNbMFVdOworKwlhWzFVXSA9IGNbMVVdOworKwlhWzJVXSA9IGNbMlVdOworKwlhWzNVXSA9IGNbM1VdOworKwlmc3ViKGMsIGQsIGMpOworKwlmbXVsX3NjYWxhcihiLCBjLCAodTY0KTEyMTY2NVUpOworKwlmYWRkKGIsIGIsIGQpOworKwlmbXVsMihucSwgZGMsIGFiLCB0bXAyKTsKKyt9CisrCisrc3RhdGljIHZvaWQgbW9udGdvbWVyeV9sYWRkZXIodTY0ICpvdXQsIGNvbnN0IHU4ICprZXksIHU2NCAqaW5pdDEpCisreworKwl1NjQgdG1wMlsxNlVdID0geyAwVSB9OworKwl1NjQgcDAxX3RtcDFfc3dhcFszM1VdID0geyAwVSB9OworKwl1NjQgKnAwID0gcDAxX3RtcDFfc3dhcDsKKysJdTY0ICpwMDEgPSBwMDFfdG1wMV9zd2FwOworKwl1NjQgKnAwMyA9IHAwMTsKKysJdTY0ICpwMTEgPSBwMDEgKyAodTMyKThVOworKwl1NjQgKngwOworKwl1NjQgKnowOworKwl1NjQgKnAwMV90bXAxOworKwl1NjQgKnAwMV90bXAxMTsKKysJdTY0ICpucTEwOworKwl1NjQgKm5xX3AxMTsKKysJdTY0ICpzd2FwMTsKKysJdTY0IHN3MDsKKysJdTY0ICpucTE7CisrCXU2NCAqdG1wMTsKKysJbWVtY3B5KHAxMSwgaW5pdDEsICh1MzIpOFUgKiBzaXplb2YoaW5pdDFbMFVdKSk7CisrCXgwID0gcDAzOworKwl6MCA9IHAwMyArICh1MzIpNFU7CisrCXgwWzBVXSA9ICh1NjQpMVU7CisrCXgwWzFVXSA9ICh1NjQpMFU7CisrCXgwWzJVXSA9ICh1NjQpMFU7CisrCXgwWzNVXSA9ICh1NjQpMFU7CisrCXowWzBVXSA9ICh1NjQpMFU7CisrCXowWzFVXSA9ICh1NjQpMFU7CisrCXowWzJVXSA9ICh1NjQpMFU7CisrCXowWzNVXSA9ICh1NjQpMFU7CisrCXAwMV90bXAxID0gcDAxX3RtcDFfc3dhcDsKKysJcDAxX3RtcDExID0gcDAxX3RtcDFfc3dhcDsKKysJbnExMCA9IHAwMV90bXAxX3N3YXA7CisrCW5xX3AxMSA9IHAwMV90bXAxX3N3YXAgKyAodTMyKThVOworKwlzd2FwMSA9IHAwMV90bXAxX3N3YXAgKyAodTMyKTMyVTsKKysJY3N3YXAyKCh1NjQpMVUsIG5xMTAsIG5xX3AxMSk7CisrCXBvaW50X2FkZF9hbmRfZG91YmxlKGluaXQxLCBwMDFfdG1wMTEsIHRtcDIpOworKwlzd2FwMVswVV0gPSAodTY0KTFVOworKwl7CisrCQl1MzIgaTsKKysJCWZvciAoaSA9ICh1MzIpMFU7IGkgPCAodTMyKTI1MVU7IGkgPSBpICsgKHUzMikxVSkgeworKwkJCXU2NCAqcDAxX3RtcDEyID0gcDAxX3RtcDFfc3dhcDsKKysJCQl1NjQgKnN3YXAyID0gcDAxX3RtcDFfc3dhcCArICh1MzIpMzJVOworKwkJCXU2NCAqbnEyID0gcDAxX3RtcDEyOworKwkJCXU2NCAqbnFfcDEyID0gcDAxX3RtcDEyICsgKHUzMik4VTsKKysJCQl1NjQgYml0ID0gKHU2NCkoa2V5WygodTMyKTI1M1UgLSBpKSAvICh1MzIpOFVdID4+ICgodTMyKTI1M1UgLSBpKSAlICh1MzIpOFUgJiAodTgpMVUpOworKwkJCXU2NCBzdyA9IHN3YXAyWzBVXSBeIGJpdDsKKysJCQljc3dhcDIoc3csIG5xMiwgbnFfcDEyKTsKKysJCQlwb2ludF9hZGRfYW5kX2RvdWJsZShpbml0MSwgcDAxX3RtcDEyLCB0bXAyKTsKKysJCQlzd2FwMlswVV0gPSBiaXQ7CisgCQl9CistCQlqID0gMDsKKyAJfQorLQorLQkvKiBEb3VibGluZyAqLworLQlmb3IgKGkgPSAwOyBpIDwgcTsgKytpKSB7CistCQlhZGRfZWx0ZnAyNTUxOV8xd19hZHgoQSwgVXIxLCBacjEpOwkvKiAgQSA9IFVyMStacjEgKi8KKy0JCXN1Yl9lbHRmcDI1NTE5XzF3KEIsIFVyMSwgWnIxKTsJCS8qICBCID0gVXIxLVpyMSAqLworLQkJc3FyX2VsdGZwMjU1MTlfMndfYWR4KEFCKTsJCS8qICBBID0gQSoqMiAgICAgQiA9IEIqKjIgKi8KKy0JCWNvcHlfZWx0ZnAyNTUxOV8xdyhDLCBCKTsJCS8qICBDID0gQiAqLworLQkJc3ViX2VsdGZwMjU1MTlfMXcoQiwgQSwgQik7CQkvKiAgQiA9IEEtQiAqLworLQkJbXVsX2EyNF9lbHRmcDI1NTE5XzF3KEQsIEIpOwkJLyogIEQgPSBteV9hMjQqQiAqLworLQkJYWRkX2VsdGZwMjU1MTlfMXdfYWR4KEQsIEQsIEMpOwkJLyogIEQgPSBEK0MgKi8KKy0JCW11bF9lbHRmcDI1NTE5XzJ3X2FkeChVWnIxLCBBQiwgQ0QpOwkvKiAgVXIxID0gQSpCICAgWnIxID0gWnIxKkEgKi8KKy0JfQorLQorLQkvKiBDb252ZXJ0IHRvIGFmZmluZSBjb29yZGluYXRlcyAqLworLQlpbnZfZWx0ZnAyNTUxOV8xd19hZHgoQSwgWnIxKTsKKy0JbXVsX2VsdGZwMjU1MTlfMXdfYWR4KCh1NjQgKilzZXNzaW9uX2tleSwgVXIxLCBBKTsKKy0JZnJlZF9lbHRmcDI1NTE5XzF3KCh1NjQgKilzZXNzaW9uX2tleSk7CistCistCW1lbXplcm9fZXhwbGljaXQoJm0sIHNpemVvZihtKSk7CistfQorLQorLXN0YXRpYyB2b2lkIGN1cnZlMjU1MTlfYm1pMih1OCBzaGFyZWRbQ1VSVkUyNTUxOV9LRVlfU0laRV0sCistCQkJICAgIGNvbnN0IHU4IHByaXZhdGVfa2V5W0NVUlZFMjU1MTlfS0VZX1NJWkVdLAorLQkJCSAgICBjb25zdCB1OCBzZXNzaW9uX2tleVtDVVJWRTI1NTE5X0tFWV9TSVpFXSkKKy17CistCXN0cnVjdCB7CistCQl1NjQgYnVmZmVyWzQgKiBOVU1fV09SRFNfRUxURlAyNTUxOV07CistCQl1NjQgY29vcmRpbmF0ZXNbNCAqIE5VTV9XT1JEU19FTFRGUDI1NTE5XTsKKy0JCXU2NCB3b3Jrc3BhY2VbNiAqIE5VTV9XT1JEU19FTFRGUDI1NTE5XTsKKy0JCXU4IHNlc3Npb25bQ1VSVkUyNTUxOV9LRVlfU0laRV07CistCQl1OCBwcml2YXRlW0NVUlZFMjU1MTlfS0VZX1NJWkVdOworLQl9IF9fYWxpZ25lZCgzMikgbTsKKy0KKy0JaW50IGkgPSAwLCBqID0gMDsKKy0JdTY0IHByZXYgPSAwOworLQl1NjQgKmNvbnN0IFgxID0gKHU2NCAqKW0uc2Vzc2lvbjsKKy0JdTY0ICpjb25zdCBrZXkgPSAodTY0ICopbS5wcml2YXRlOworLQl1NjQgKmNvbnN0IFB4ID0gbS5jb29yZGluYXRlcyArIDA7CistCXU2NCAqY29uc3QgUHogPSBtLmNvb3JkaW5hdGVzICsgNDsKKy0JdTY0ICpjb25zdCBReCA9IG0uY29vcmRpbmF0ZXMgKyA4OworLQl1NjQgKmNvbnN0IFF6ID0gbS5jb29yZGluYXRlcyArIDEyOworLQl1NjQgKmNvbnN0IFgyID0gUXg7CistCXU2NCAqY29uc3QgWjIgPSBRejsKKy0JdTY0ICpjb25zdCBYMyA9IFB4OworLQl1NjQgKmNvbnN0IFozID0gUHo7CistCXU2NCAqY29uc3QgWDJaMiA9IFF4OworLQl1NjQgKmNvbnN0IFgzWjMgPSBQeDsKKy0KKy0JdTY0ICpjb25zdCBBID0gbS53b3Jrc3BhY2UgKyAwOworLQl1NjQgKmNvbnN0IEIgPSBtLndvcmtzcGFjZSArIDQ7CistCXU2NCAqY29uc3QgRCA9IG0ud29ya3NwYWNlICsgODsKKy0JdTY0ICpjb25zdCBDID0gbS53b3Jrc3BhY2UgKyAxMjsKKy0JdTY0ICpjb25zdCBEQSA9IG0ud29ya3NwYWNlICsgMTY7CistCXU2NCAqY29uc3QgQ0IgPSBtLndvcmtzcGFjZSArIDIwOworLQl1NjQgKmNvbnN0IEFCID0gQTsKKy0JdTY0ICpjb25zdCBEQyA9IEQ7CistCXU2NCAqY29uc3QgREFDQiA9IERBOworLQorLQltZW1jcHkobS5wcml2YXRlLCBwcml2YXRlX2tleSwgc2l6ZW9mKG0ucHJpdmF0ZSkpOworLQltZW1jcHkobS5zZXNzaW9uLCBzZXNzaW9uX2tleSwgc2l6ZW9mKG0uc2Vzc2lvbikpOworLQorLQljdXJ2ZTI1NTE5X2NsYW1wX3NlY3JldChtLnByaXZhdGUpOworLQorLQkvKiBBcyBpbiB0aGUgZHJhZnQ6CistCSAqIFdoZW4gcmVjZWl2aW5nIHN1Y2ggYW4gYXJyYXksIGltcGxlbWVudGF0aW9ucyBvZiBjdXJ2ZTI1NTE5CistCSAqIE1VU1QgbWFzayB0aGUgbW9zdC1zaWduaWZpY2FudCBiaXQgaW4gdGhlIGZpbmFsIGJ5dGUuIFRoaXMKKy0JICogaXMgZG9uZSB0byBwcmVzZXJ2ZSBjb21wYXRpYmlsaXR5IHdpdGggcG9pbnQgZm9ybWF0cyB3aGljaAorLQkgKiByZXNlcnZlIHRoZSBzaWduIGJpdCBmb3IgdXNlIGluIG90aGVyIHByb3RvY29scyBhbmQgdG8KKy0JICogaW5jcmVhc2UgcmVzaXN0YW5jZSB0byBpbXBsZW1lbnRhdGlvbiBmaW5nZXJwcmludGluZworLQkgKi8KKy0JbS5zZXNzaW9uW0NVUlZFMjU1MTlfS0VZX1NJWkUgLSAxXSAmPSAoMSA8PCAoMjU1ICUgOCkpIC0gMTsKKy0KKy0JY29weV9lbHRmcDI1NTE5XzF3KFB4LCBYMSk7CistCXNldHplcm9fZWx0ZnAyNTUxOV8xdyhQeik7CistCXNldHplcm9fZWx0ZnAyNTUxOV8xdyhReCk7CistCXNldHplcm9fZWx0ZnAyNTUxOV8xdyhReik7CistCistCVB6WzBdID0gMTsKKy0JUXhbMF0gPSAxOworLQorLQkvKiBtYWluLWxvb3AgKi8KKy0JcHJldiA9IDA7CistCWogPSA2MjsKKy0JZm9yIChpID0gMzsgaSA+PSAwOyAtLWkpIHsKKy0JCXdoaWxlIChqID49IDApIHsKKy0JCQl1NjQgYml0ID0gKGtleVtpXSA+PiBqKSAmIDB4MTsKKy0JCQl1NjQgc3dhcCA9IGJpdCBeIHByZXY7CistCQkJcHJldiA9IGJpdDsKKy0KKy0JCQlhZGRfZWx0ZnAyNTUxOV8xd19ibWkyKEEsIFgyLCBaMik7CS8qIEEgPSAoWDIrWjIpICovCistCQkJc3ViX2VsdGZwMjU1MTlfMXcoQiwgWDIsIFoyKTsJCS8qIEIgPSAoWDItWjIpICovCistCQkJYWRkX2VsdGZwMjU1MTlfMXdfYm1pMihDLCBYMywgWjMpOwkvKiBDID0gKFgzK1ozKSAqLworLQkJCXN1Yl9lbHRmcDI1NTE5XzF3KEQsIFgzLCBaMyk7CQkvKiBEID0gKFgzLVozKSAqLworLQkJCW11bF9lbHRmcDI1NTE5XzJ3X2JtaTIoREFDQiwgQUIsIERDKTsJLyogW0RBfENCXSA9IFtBfEJdKltEfENdICovCistCistCQkJY3NlbGVjdChzd2FwLCBBLCBDKTsKKy0JCQljc2VsZWN0KHN3YXAsIEIsIEQpOworLQorLQkJCXNxcl9lbHRmcDI1NTE5XzJ3X2JtaTIoQUIpOwkJLyogW0FBfEJCXSA9IFtBXjJ8Ql4yXSAqLworLQkJCWFkZF9lbHRmcDI1NTE5XzF3X2JtaTIoWDMsIERBLCBDQik7CS8qIFgzID0gKERBK0NCKSAqLworLQkJCXN1Yl9lbHRmcDI1NTE5XzF3KFozLCBEQSwgQ0IpOwkJLyogWjMgPSAoREEtQ0IpICovCistCQkJc3FyX2VsdGZwMjU1MTlfMndfYm1pMihYM1ozKTsJCS8qIFtYM3xaM10gPSBbKERBK0NCKXwoREErQ0IpXV4yICovCistCistCQkJY29weV9lbHRmcDI1NTE5XzF3KFgyLCBCKTsJCS8qIFgyID0gQl4yICovCistCQkJc3ViX2VsdGZwMjU1MTlfMXcoWjIsIEEsIEIpOwkJLyogWjIgPSBFID0gQUEtQkIgKi8KKy0KKy0JCQltdWxfYTI0X2VsdGZwMjU1MTlfMXcoQiwgWjIpOwkJLyogQiA9IGEyNCpFICovCistCQkJYWRkX2VsdGZwMjU1MTlfMXdfYm1pMihCLCBCLCBYMik7CS8qIEIgPSBhMjQqRStCICovCistCQkJbXVsX2VsdGZwMjU1MTlfMndfYm1pMihYMloyLCBYMloyLCBBQik7CS8qIFtYMnxaMl0gPSBbQnxFXSpbQXxhMjQqRStCXSAqLworLQkJCW11bF9lbHRmcDI1NTE5XzF3X2JtaTIoWjMsIFozLCBYMSk7CS8qIFozID0gWjMqWDEgKi8KKy0JCQktLWo7CisrCXN3MCA9IHN3YXAxWzBVXTsKKysJY3N3YXAyKHN3MCwgbnExMCwgbnFfcDExKTsKKysJbnExID0gcDAxX3RtcDE7CisrCXRtcDEgPSBwMDFfdG1wMSArICh1MzIpMTZVOworKwlwb2ludF9kb3VibGUobnExLCB0bXAxLCB0bXAyKTsKKysJcG9pbnRfZG91YmxlKG5xMSwgdG1wMSwgdG1wMik7CisrCXBvaW50X2RvdWJsZShucTEsIHRtcDEsIHRtcDIpOworKwltZW1jcHkob3V0LCBwMCwgKHUzMik4VSAqIHNpemVvZihwMFswVV0pKTsKKysKKysJbWVtemVyb19leHBsaWNpdCh0bXAyLCBzaXplb2YodG1wMikpOworKwltZW16ZXJvX2V4cGxpY2l0KHAwMV90bXAxX3N3YXAsIHNpemVvZihwMDFfdG1wMV9zd2FwKSk7CisrfQorKworK3N0YXRpYyB2b2lkIGZzcXVhcmVfdGltZXModTY0ICpvLCBjb25zdCB1NjQgKmlucCwgdTY0ICp0bXAsIHUzMiBuMSkKKyt7CisrCXUzMiBpOworKwlmc3FyKG8sIGlucCwgdG1wKTsKKysJZm9yIChpID0gKHUzMikwVTsgaSA8IG4xIC0gKHUzMikxVTsgaSA9IGkgKyAodTMyKTFVKQorKwkJZnNxcihvLCBvLCB0bXApOworK30KKysKKytzdGF0aWMgdm9pZCBmaW52KHU2NCAqbywgY29uc3QgdTY0ICppLCB1NjQgKnRtcCkKKyt7CisrCXU2NCB0MVsxNlVdID0geyAwVSB9OworKwl1NjQgKmEwID0gdDE7CisrCXU2NCAqYiA9IHQxICsgKHUzMik0VTsKKysJdTY0ICpjID0gdDEgKyAodTMyKThVOworKwl1NjQgKnQwMCA9IHQxICsgKHUzMikxMlU7CisrCXU2NCAqdG1wMSA9IHRtcDsKKysJdTY0ICphOworKwl1NjQgKnQwOworKwlmc3F1YXJlX3RpbWVzKGEwLCBpLCB0bXAxLCAodTMyKTFVKTsKKysJZnNxdWFyZV90aW1lcyh0MDAsIGEwLCB0bXAxLCAodTMyKTJVKTsKKysJZm11bChiLCB0MDAsIGksIHRtcCk7CisrCWZtdWwoYTAsIGIsIGEwLCB0bXApOworKwlmc3F1YXJlX3RpbWVzKHQwMCwgYTAsIHRtcDEsICh1MzIpMVUpOworKwlmbXVsKGIsIHQwMCwgYiwgdG1wKTsKKysJZnNxdWFyZV90aW1lcyh0MDAsIGIsIHRtcDEsICh1MzIpNVUpOworKwlmbXVsKGIsIHQwMCwgYiwgdG1wKTsKKysJZnNxdWFyZV90aW1lcyh0MDAsIGIsIHRtcDEsICh1MzIpMTBVKTsKKysJZm11bChjLCB0MDAsIGIsIHRtcCk7CisrCWZzcXVhcmVfdGltZXModDAwLCBjLCB0bXAxLCAodTMyKTIwVSk7CisrCWZtdWwodDAwLCB0MDAsIGMsIHRtcCk7CisrCWZzcXVhcmVfdGltZXModDAwLCB0MDAsIHRtcDEsICh1MzIpMTBVKTsKKysJZm11bChiLCB0MDAsIGIsIHRtcCk7CisrCWZzcXVhcmVfdGltZXModDAwLCBiLCB0bXAxLCAodTMyKTUwVSk7CisrCWZtdWwoYywgdDAwLCBiLCB0bXApOworKwlmc3F1YXJlX3RpbWVzKHQwMCwgYywgdG1wMSwgKHUzMikxMDBVKTsKKysJZm11bCh0MDAsIHQwMCwgYywgdG1wKTsKKysJZnNxdWFyZV90aW1lcyh0MDAsIHQwMCwgdG1wMSwgKHUzMik1MFUpOworKwlmbXVsKHQwMCwgdDAwLCBiLCB0bXApOworKwlmc3F1YXJlX3RpbWVzKHQwMCwgdDAwLCB0bXAxLCAodTMyKTVVKTsKKysJYSA9IHQxOworKwl0MCA9IHQxICsgKHUzMikxMlU7CisrCWZtdWwobywgdDAsIGEsIHRtcCk7CisrfQorKworK3N0YXRpYyB2b2lkIHN0b3JlX2ZlbGVtKHU2NCAqYiwgdTY0ICpmKQorK3sKKysJdTY0IGYzMCA9IGZbM1VdOworKwl1NjQgdG9wX2JpdDAgPSBmMzAgPj4gKHUzMik2M1U7CisrCXU2NCBjYXJyeTA7CisrCXU2NCBmMzE7CisrCXU2NCB0b3BfYml0OworKwl1NjQgY2Fycnk7CisrCXU2NCBmMDsKKysJdTY0IGYxOworKwl1NjQgZjI7CisrCXU2NCBmMzsKKysJdTY0IG0wOworKwl1NjQgbTE7CisrCXU2NCBtMjsKKysJdTY0IG0zOworKwl1NjQgbWFzazsKKysJdTY0IGYwXzsKKysJdTY0IGYxXzsKKysJdTY0IGYyXzsKKysJdTY0IGYzXzsKKysJdTY0IG8wOworKwl1NjQgbzE7CisrCXU2NCBvMjsKKysJdTY0IG8zOworKwlmWzNVXSA9IGYzMCAmICh1NjQpMHg3ZmZmZmZmZmZmZmZmZmZmVTsKKysJY2FycnkwID0gYWRkX3NjYWxhcihmLCBmLCAodTY0KTE5VSAqIHRvcF9iaXQwKTsKKysJZjMxID0gZlszVV07CisrCXRvcF9iaXQgPSBmMzEgPj4gKHUzMik2M1U7CisrCWZbM1VdID0gZjMxICYgKHU2NCkweDdmZmZmZmZmZmZmZmZmZmZVOworKwljYXJyeSA9IGFkZF9zY2FsYXIoZiwgZiwgKHU2NCkxOVUgKiB0b3BfYml0KTsKKysJZjAgPSBmWzBVXTsKKysJZjEgPSBmWzFVXTsKKysJZjIgPSBmWzJVXTsKKysJZjMgPSBmWzNVXTsKKysJbTAgPSBndGVfbWFzayhmMCwgKHU2NCkweGZmZmZmZmZmZmZmZmZmZWRVKTsKKysJbTEgPSBlcV9tYXNrKGYxLCAodTY0KTB4ZmZmZmZmZmZmZmZmZmZmZlUpOworKwltMiA9IGVxX21hc2soZjIsICh1NjQpMHhmZmZmZmZmZmZmZmZmZmZmVSk7CisrCW0zID0gZXFfbWFzayhmMywgKHU2NCkweDdmZmZmZmZmZmZmZmZmZmZVKTsKKysJbWFzayA9ICgobTAgJiBtMSkgJiBtMikgJiBtMzsKKysJZjBfID0gZjAgLSAobWFzayAmICh1NjQpMHhmZmZmZmZmZmZmZmZmZmVkVSk7CisrCWYxXyA9IGYxIC0gKG1hc2sgJiAodTY0KTB4ZmZmZmZmZmZmZmZmZmZmZlUpOworKwlmMl8gPSBmMiAtIChtYXNrICYgKHU2NCkweGZmZmZmZmZmZmZmZmZmZmZVKTsKKysJZjNfID0gZjMgLSAobWFzayAmICh1NjQpMHg3ZmZmZmZmZmZmZmZmZmZmVSk7CisrCW8wID0gZjBfOworKwlvMSA9IGYxXzsKKysJbzIgPSBmMl87CisrCW8zID0gZjNfOworKwliWzBVXSA9IG8wOworKwliWzFVXSA9IG8xOworKwliWzJVXSA9IG8yOworKwliWzNVXSA9IG8zOworK30KKysKKytzdGF0aWMgdm9pZCBlbmNvZGVfcG9pbnQodTggKm8sIGNvbnN0IHU2NCAqaSkKKyt7CisrCWNvbnN0IHU2NCAqeCA9IGk7CisrCWNvbnN0IHU2NCAqeiA9IGkgKyAodTMyKTRVOworKwl1NjQgdG1wWzRVXSA9IHsgMFUgfTsKKysJdTY0IHRtcF93WzE2VV0gPSB7IDBVIH07CisrCWZpbnYodG1wLCB6LCB0bXBfdyk7CisrCWZtdWwodG1wLCB0bXAsIHgsIHRtcF93KTsKKysJc3RvcmVfZmVsZW0oKHU2NCAqKW8sIHRtcCk7CisrfQorKworK3N0YXRpYyB2b2lkIGN1cnZlMjU1MTlfZXZlcjY0KHU4ICpvdXQsIGNvbnN0IHU4ICpwcml2LCBjb25zdCB1OCAqcHViKQorK3sKKysJdTY0IGluaXQxWzhVXSA9IHsgMFUgfTsKKysJdTY0IHRtcFs0VV0gPSB7IDBVIH07CisrCXU2NCB0bXAzOworKwl1NjQgKng7CisrCXU2NCAqejsKKysJeworKwkJdTMyIGk7CisrCQlmb3IgKGkgPSAodTMyKTBVOyBpIDwgKHUzMik0VTsgaSA9IGkgKyAodTMyKTFVKSB7CisrCQkJdTY0ICpvcyA9IHRtcDsKKysJCQljb25zdCB1OCAqYmogPSBwdWIgKyBpICogKHUzMik4VTsKKysJCQl1NjQgdSA9ICoodTY0ICopYmo7CisrCQkJdTY0IHIgPSB1OworKwkJCXU2NCB4MCA9IHI7CisrCQkJb3NbaV0gPSB4MDsKKyAJCX0KKy0JCWogPSA2MzsKKyAJfQorKwl0bXAzID0gdG1wWzNVXTsKKysJdG1wWzNVXSA9IHRtcDMgJiAodTY0KTB4N2ZmZmZmZmZmZmZmZmZmZlU7CisrCXggPSBpbml0MTsKKysJeiA9IGluaXQxICsgKHUzMik0VTsKKysJelswVV0gPSAodTY0KTFVOworKwl6WzFVXSA9ICh1NjQpMFU7CisrCXpbMlVdID0gKHU2NCkwVTsKKysJelszVV0gPSAodTY0KTBVOworKwl4WzBVXSA9IHRtcFswVV07CisrCXhbMVVdID0gdG1wWzFVXTsKKysJeFsyVV0gPSB0bXBbMlVdOworKwl4WzNVXSA9IHRtcFszVV07CisrCW1vbnRnb21lcnlfbGFkZGVyKGluaXQxLCBwcml2LCBpbml0MSk7CisrCWVuY29kZV9wb2ludChvdXQsIGluaXQxKTsKKyt9CisrCisrLyogVGhlIGJlbG93IGNvbnN0YW50cyB3ZXJlIGdlbmVyYXRlZCB1c2luZyB0aGlzIHNhZ2Ugc2NyaXB0OgorKyAqCisrICogIyEvdXNyL2Jpbi9lbnYgc2FnZQorKyAqIGltcG9ydCBzeXMKKysgKiBmcm9tIHNhZ2UuYWxsIGltcG9ydCAqCisrICogZGVmIGxpbWJzKG4pOgorKyAqIAluID0gaW50KG4pCisrICogCWwgPSAoKG4gPj4gMCkgJSAyXjY0LCAobiA+PiA2NCkgJSAyXjY0LCAobiA+PiAxMjgpICUgMl42NCwgKG4gPj4gMTkyKSAlIDJeNjQpCisrICogCXJldHVybiAiMHglMDE2eFVMTCwgMHglMDE2eFVMTCwgMHglMDE2eFVMTCwgMHglMDE2eFVMTCIgJSBsCisrICogZWMgPSBFbGxpcHRpY0N1cnZlKEdGKDJeMjU1IC0gMTkpLCBbMCwgNDg2NjYyLCAwLCAxLCAwXSkKKysgKiBwX21pbnVzX3MgPSAoZWMubGlmdF94KDkpIC0gZWMubGlmdF94KDEpKVswXQorKyAqIHByaW50KCJzdGF0aWMgY29uc3QgdTY0IHBfbWludXNfc1tdID0geyAlcyB9O1xuIiAlIGxpbWJzKHBfbWludXNfcykpCisrICogcHJpbnQoInN0YXRpYyBjb25zdCB1NjQgdGFibGVfbGFkZGVyW10gPSB7IikKKysgKiBwID0gZWMubGlmdF94KDkpCisrICogZm9yIGkgaW4gcmFuZ2UoMjUyKToKKysgKiAJbCA9IChwWzBdICsgcFsyXSkgLyAocFswXSAtIHBbMl0pCisrICogCXByaW50KCgiXHQlcyIgKyAoIiwiIGlmIGkgIT0gMjUxIGVsc2UgIiIpKSAlIGxpbWJzKGwpKQorKyAqIAlwID0gcCAqIDIKKysgKiBwcmludCgifTsiKQorKyAqCisrICovCisgCistCWludl9lbHRmcDI1NTE5XzF3X2JtaTIoQSwgUXopOworLQltdWxfZWx0ZnAyNTUxOV8xd19ibWkyKCh1NjQgKilzaGFyZWQsIFF4LCBBKTsKKy0JZnJlZF9lbHRmcDI1NTE5XzF3KCh1NjQgKilzaGFyZWQpOworK3N0YXRpYyBjb25zdCB1NjQgcF9taW51c19zW10gPSB7IDB4ODE2YjFlMDEzN2Q0ODI5MFVMTCwgMHg0NDBmNmE1MWViNGQxMjA3VUxMLCAweDUyMzg1ZjQ2ZGNhMmI3MWRVTEwsIDB4MjE1MTMyMTExZDgzNTRjYlVMTCB9OworIAorLQltZW16ZXJvX2V4cGxpY2l0KCZtLCBzaXplb2YobSkpOworLX0KKytzdGF0aWMgY29uc3QgdTY0IHRhYmxlX2xhZGRlcltdID0geworKwkweGZmZmZmZmZmZmZmZmZmZjNVTEwsIDB4ZmZmZmZmZmZmZmZmZmZmZlVMTCwgMHhmZmZmZmZmZmZmZmZmZmZmVUxMLCAweDVmZmZmZmZmZmZmZmZmZmZVTEwsCisrCTB4NmI4MjIwZjQxNmFhZmU5NlVMTCwgMHg4MmViZWIyYjRmNTY2YTM0VUxMLCAweGQ1YTlhNWIwNzVhNTk1MGZVTEwsIDB4NTE0MmIyY2Y0YjI0ODhmNFVMTCwKKysJMHg2YWFlYmM3NTAwNjk2ODBjVUxMLCAweDg5Y2Y3ODIwYTBmOTljNDFVTEwsIDB4MmE1OGQ5MTgzYjU2ZDBmNFVMTCwgMHg0YjVhY2E4MGUzNjAxMWE0VUxMLAorKwkweDMyOTEzMjM0OGMyOTc0NWRVTEwsIDB4ZjRhMmU2MTZlMTY0MmZkN1VMTCwgMHgxZTQ1YmIwM2ZmNjdiYzM0VUxMLCAweDMwNjkxMmQwZjQyYTliNGFVTEwsCisrCTB4ZmY4ODY1MDdlNmFmNzE1NFVMTCwgMHgwNGY1MGUxM2RmZWVjODJmVUxMLCAweGFhNTEyZmU4MmFiYWI1Y2VVTEwsIDB4MTc0ZTI1MWE2OGQ1ZjIyMlVMTCwKKysJMHhjZjk2NzAwZDgyMDI4ODk4VUxMLCAweDE3NDNlMzM3MGEyYzAyYzVVTEwsIDB4Mzc5ZWVjOThiNGU4NmVhYVVMTCwgMHgwYzU5ODg4YTUxZTA0ODJlVUxMLAorKwkweGZiY2JmMWQ2OTliNWQxODlVTEwsIDB4YWNhZWYwZDU4ZTlmZGM4NFVMTCwgMHhjMWMyMGQwNjIzMWY3NjE0VUxMLCAweDI5MzgyMThkYTI3NGY5NzJVTEwsCisrCTB4ZjZhZjQ5YmVmZjFkN2YxOFVMTCwgMHhjYzU0MWMyMjM4N2FjOWMyVUxMLCAweDk2ZmNjOWVmNDAxNWM1NmJVTEwsIDB4NjljMTYyN2M2OTA5MTNhOVVMTCwKKysJMHg3YTg2ZmQyZjQ3MzNkYjBlVUxMLCAweGZkYjhjNGYyOWUwODdkZTlVTEwsIDB4MDk1ZTRiMWE4ZWEyYTIyOVVMTCwgMHgxYWQ3YTdjODI5YjM3YTc5VUxMLAorKwkweDM0MmQ4OWNhZDE3ZWEwYzBVTEwsIDB4NjdiZWRkYTZjY2VkMjA1MVVMTCwgMHgxOWNhMzFiZjJiYjQyZjc0VUxMLCAweDNkZjdiNGM4NDk4MGFjYmJVTEwsCisrCTB4YThjNjQ0NGRjODBhZDg4M1VMTCwgMHhiOTFlNDQwMzY2ZTNhYjg1VUxMLCAweGMyMTVjZGEwMDE2NGY2ZDhVTEwsIDB4M2Q4NjdjNmVmMjQ3ZTY2OFVMTCwKKysJMHhjN2RkNTgyYmNjM2U2NThjVUxMLCAweGZkMmM0NzQ4ZWUwZTU1MjhVTEwsIDB4YTBmZDliOTVjYzlmNGY3MVVMTCwgMHg3NTI5ZDg3MWIwNjc1ZGRmVUxMLAorKwkweGI4ZjU2OGI0MmQzY2JkNzhVTEwsIDB4MTIzMzAxMWI5MWYzZGE4MlVMTCwgMHgyZGNlNmNjZDRhN2MzYjYyVUxMLCAweDc1ZTdmYzhlOWU0OTg2MDNVTEwsCisrCTB4MmY0ZjEzZjFmY2QwYjZlY1VMTCwgMHhmMWE4Y2ExZjI5ZmY3YTQ1VUxMLCAweGMyNDljMWE3Mjk4MWUyOWJVTEwsIDB4NmViZTBkYmI4YzgzYjU2YVVMTCwKKysJMHg3MTE0ZmE4ZDE3MGJiMjIyVUxMLCAweDY1YTJkY2Q1YmY5MzkzNWZVTEwsIDB4YmRjNDFmNjhiNTljOTc5YVVMTCwgMHgyZjBlZWY3OWEyY2U5Mjg5VUxMLAorKwkweDQyZWNiZjBjMDgzYzM3Y2VVTEwsIDB4MjkzMGJjMDllYzQ5NjMyMlVMTCwgMHhmMjk0YjBjMTljZmVhYzBkVUxMLCAweDM3ODBhYTRiZWRmYWJiODBVTEwsCisrCTB4NTZjMTdkM2U3Y2VhZDkyOVVMTCwgMHhlN2NiNGJlYjJlNTcyMmM1VUxMLCAweDBjZTkzMTczMmRiZmUxNWFVTEwsIDB4NDFiODgzYzc2MjEwNTJmOFVMTCwKKysJMHhkYmY3NWNhMGMzZDI1MzUwVUxMLCAweDI5MzZiZTA4NmViMWUzNTFVTEwsIDB4YzkzNmUwM2NiNGE5YjIxMlVMTCwgMHgxZDQ1YmY4MjMyMjIyNWFhVUxMLAorKwkweGU4MWFiMTAzNmEwMjRjYzVVTEwsIDB4ZTIxMjIwMWMzMDRjOWE3MlVMTCwgMHhjNWQ3M2ZiYTY4MzJiMWZjVUxMLCAweDIwZmZkYjVhNGQ4Mzk1ODFVTEwsCisrCTB4YTI4M2QzNjdiZTVkMGZhZFVMTCwgMHg2YzJiMjVjYThiMTY0NDc1VUxMLCAweDlkNDkzNTQ2N2NhYWYyMmVVTEwsIDB4NTE2NjQwOGVlZTg1ZmY0OVVMTCwKKysJMHgzYzY3YmFhMmZhYjRlMzYxVUxMLCAweGIzZTQzM2M2N2VmMzVjZWZVTEwsIDB4NTI1OTcyOTI0MTE1OWIxY1VMTCwgMHg2YTYyMTg5MmQ1YjBhYjMzVUxMLAorKwkweDIwYjc0YTM4NzU1NWNkY2JVTEwsIDB4NTMyYWExMGUxMjA4OTIzZlVMTCwgMHhlYWExN2I3NzYyMjgxZGQxVUxMLCAweDYxYWIzNDQzZjA1YzQ0YmZVTEwsCisrCTB4MjU3YTZjNDIyMzI0ZGVmOFVMTCwgMHgxMzFjNmMxMDE3ZTNjZjdmVUxMLCAweDIzNzU4NzM5ZjYzMGEyNTdVTEwsIDB4Mjk1YTQwN2EwMWE3ODU4MFVMTCwKKysJMHhmOGM0NDMyNDZkNWRhOGQ5VUxMLCAweDE5ZDc3NTQ1MGM1MmZhNWRVTEwsIDB4MmFmY2ZjOTI3MzFiZjgzZFVMTCwgMHg3ZDEwYzhlODFiMmI0NzAwVUxMLAorKwkweGM4ZTAyNzFmNzBiYWEyMGJVTEwsIDB4OTkzNzQ4ODY3Y2E2Mzk1N1VMTCwgMHg1NDEyZWZiM2NiN2VkNGJiVUxMLCAweDMxOTZkMzYxNzNlNjI5NzVVTEwsCisrCTB4ZGU1YmNhZDE0MWM3ZGZmY1VMTCwgMHg0N2NjOGNkMmIzOTVjODQ4VUxMLCAweGEzNGNkOTQyZTExYWYzY2JVTEwsIDB4MDI1NmRiZjJkMDRlY2VjMlVMTCwKKysJMHg4NzVhYjdlOTRiMGU2NjdmVUxMLCAweGNhZDRkZDgzYzA4NTBkMTBVTEwsIDB4NDdmMTJlOGY0ZTcyYzc5ZlVMTCwgMHg1ZjFhODdiYjhjODViMTliVUxMLAorKwkweDdhZTlkMGI2NDM3ZjUxYjhVTEwsIDB4MTJjN2NlNTUxODg3OTA2NVVMTCwgMHgyYWRlMDlmZTVjZjc3YWVlVUxMLCAweDIzYTA1YTJmN2QyYzU2MjdVTEwsCisrCTB4NTkwOGUxMjhmMTdjMTY5YVVMTCwgMHhmNzc0OThkZDhhZDA4NTJkVUxMLCAweDc0YjRjNGNlYWIxMDJmNjRVTEwsIDB4MTgzYWJhZGQxMDEzOTg0NVVMTCwKKysJMHhiMTY1YmE4ZGFhOTJhYWFjVUxMLCAweGQ1YzVlZjk1OTkzODY3MDVVTEwsIDB4YmUyZjhmMGNmOGZjNDBkMVVMTCwgMHgyNzAxZTYzNWVlMjA0NTE0VUxMLAorKwkweDYyOWZhODAwMjAxNTY1MTRVTEwsIDB4ZjIyMzg2ODc2NGE4YzFjZVVMTCwgMHg1Yjg5NGZmZjBiM2YwNjBlVUxMLCAweDYwZDk5NDRjZjcwOGEzZmFVTEwsCisrCTB4YWVlYTAwMWExYzdhMjAxZlVMTCwgMHhlYmYxNmE2MzNlZTJjZTYzVUxMLCAweDZmNzcwOTU5NGM3YTA3ZTFVTEwsIDB4NzliOTU4MTUwZDAyMDhjYlVMTCwKKysJMHgyNGI1NWU1MzAxZDQxMGU3VUxMLCAweGUzYTM0ZWRmZjNmZGM4NGRVTEwsIDB4ZDg4NzY4ZTQ5MDQwMzJkOFVMTCwgMHgxMzEzODQ0MjdiM2FhZWVjVUxMLAorKwkweDg0MDVlNTEyODYyMzRmMTRVTEwsIDB4MTRkYzQ3MzlhZGI0YzUyOVVMTCwgMHhiOGEyYjViMjUwNjM0ZmZkVUxMLCAweDJmZTJhOTRhZDhhN2ZmOTNVTEwsCisrCTB4ZWM1YzU3ZWZlODQzZmFkZFVMTCwgMHgyODQzY2U0MGYwYmI5OTE4VUxMLCAweGE0YjU2MWQ2Y2YzZDYzMDVVTEwsIDB4NzQzNjI5YmRlOGZiNzc3ZVVMTCwKKysJMHgzNDNlZGQ0NmJiYWY3MzhmVUxMLCAweGVkOTgxODI4YjEwMWE2NTFVTEwsIDB4YTQwMTc2MGI4ODJjNzk3YVVMTCwgMHgxZmMyMjNlMjhkYzg4NzMwVUxMLAorKwkweDQ4NjA0ZTkxZmMwZmJhMGVVTEwsIDB4YjYzN2Y3OGYwNTJjNmZhNFVMTCwgMHg5MWNjYWMzZDA5ZTkyMzljVUxMLCAweDIzZjdlZWQ0NDM3YTY4N2NVTEwsCisrCTB4NTE3M2IxMTE4ZDliZDgwMFVMTCwgMHgyOWQ2NDFiNjMxODlkNGE3VUxMLCAweGZkYmYxNzc5ODhiYmM1ODZVTEwsIDB4Mjk1OTg5NGZjYWQ4MWRmNVVMTCwKKysJMHhhZWJjOGVmM2I0YmJjODk5VUxMLCAweDQxNDg5OTVhYjI2OTkyYjlVTEwsIDB4MjRlMjBiMDEzNGY5MmNmYlVMTCwgMHg0MGQxNTg4OTRhMDVkZWU4VUxMLAorKwkweDQ2YjAwYjExODVhZjc2ZjZVTEwsIDB4MjZiYWM3Nzg3MzE4N2E3OVVMTCwgMHgzZGMwYmY5NWFiOGZmZjVmVUxMLCAweDJhNjA4YmQ4OTQ1NTI0ZDdVTEwsCisrCTB4MjY0NDk1ODhiZDQ0NjMwMlVMTCwgMHg3YzRiYzIxYzAzODg0MzljVUxMLCAweDhlOThhNGYzODNiZDExYjJVTEwsIDB4MjYyMThkN2JjOWQ4NzZiOVVMTCwKKysJMHhlMzA4MTU0Mjk5N2MxNzhhVUxMLCAweDNjMmQyOWE4NmZiNjYwNmZVTEwsIDB4NWMyMTc3MzZmYTI3OTM3NFVMTCwgMHg3ZGRlMDU3MzRhZmViMWZhVUxMLAorKwkweDNiZjEwZTM5MDZkNDJiYWJVTEwsIDB4ZTRmNzgwM2UxOTgwNjQ5Y1VMTCwgMHhlNjA1M2JmODk1OTViZjdhVUxMLCAweDM5NGZhZjM4ZGEyNDU1MzBVTEwsCisrCTB4N2E4ZWZiNTg4OTY5MjhmNFVMTCwgMHhmYmM3NzhlOWNjNmExMTNjVUxMLCAweDcyNjcwY2UzMzBhZjU5NmZVTEwsIDB4NDhmMjIyYTgxZDNkNmNmN1VMTCwKKysJMHhmMDFmY2U0MTBkNzJjYWE3VUxMLCAweDVhMjBlY2M3MjEzYjU1OTVVTEwsIDB4N2JjMjExNjVjMWZhMTQ4M1VMTCwgMHgwN2Y4OWFlMzFkYThhNzQxVUxMLAorKwkweDA1ZDJjMmI0YzY4MzBmZjlVTEwsIDB4ZDQzZTMzMGZjNjMxNjI5M1VMTCwgMHhhNWE1NTkwYTk2ZDNhOTA0VUxMLCAweDcwNWVkYjkxYTY1MzMzYjZVTEwsCisrCTB4MDQ4ZWUxNWUwYmI5YTVmN1VMTCwgMHgzMjQwY2ZjYTllMGFhZjVkVUxMLCAweDhmNGI3MWNlZWRjNGE0MGJVTEwsIDB4NjIxYzBkYTNkZTU0NGE2ZFVMTCwKKysJMHg5Mjg3MjgzNmEwOGM0MDkxVUxMLCAweGNlODM3NWIwMTBjOTE0NDVVTEwsIDB4OGE3MmViNTI0ZjI3NjM5NFVMTCwgMHgyNjY3ZmNmYTdlYzgzNjM1VUxMLAorKwkweDdmNGMxNzMzNDVlODc1MmFVTEwsIDB4MDYxYjQ3ZmVlZTcwNzlhNVVMTCwgMHgyNWRkOWFmYTlmODZmZjM0VUxMLCAweDM3ODBjZWY1NDI1ZGM4OWNVTEwsCisrCTB4MWE0NjAzNWE1MTNiYjRlOVVMTCwgMHgzZTFlZjM3OWFjNTc1YWRhVUxMLCAweGM3OGM1ZjFjNWZhMjRiNTBVTEwsIDB4MzIxYTk2NzYzNGZkOWYyMlVMTCwKKysJMHg5NDY3MDdiODgyNmUyN2ZhVUxMLCAweDNkY2E4NGQ2NGM1MDZmZDBVTEwsIDB4YzE4OTIxODA3NWU5MTQzNlVMTCwgMHg2ZDkyODQxNjliM2I4NDg0VUxMLAorKwkweDNhNjdlODQwMzgzZjJkZGZVTEwsIDB4MzNlZWM5YTMwYzRmOWI3NVVMTCwgMHgzZWM3Yzg2ZmE3ODNlZjQ3VUxMLCAweDI2ZWM0NDlmYmFjOWZiYzRVTEwsCisrCTB4NWMwZjM4Y2JhMDliOWU3ZFVMTCwgMHg4MTE2OGNjNzYyYTM0NzhjVUxMLCAweDNlMjNiMGQzMDZmYzEyMWNVTEwsIDB4NWEyMzhhYTBhNWVmZGNkZFVMTCwKKysJMHgxYmEyNjEyMWM0ZWE0M2ZmVUxMLCAweDM2ZjhjNzdmN2M4ODMyYjVVTEwsIDB4ODhmYmVhMGIwYWRjZjk5YVVMTCwgMHg1Y2E5OTM4ZWMyNWJlYmY5VUxMLAorKwkweGQ1NDM2YTVlNTFmY2NkYTBVTEwsIDB4MWRiYzQ3OTdjMmNkODkzYlVMTCwgMHgxOTM0NmE2NWQzMjI0YTA4VUxMLCAweDBmNTAzNGU0OWI5YWY0NjZVTEwsCisrCTB4ZjIzYzM5NjdhMWUwYjk2ZVVMTCwgMHhlNThiMDhmYTg2N2E0ZDg4VUxMLCAweGZiMmZhYmM2YTczNDE2NzlVTEwsIDB4MmE3NTM4MWViNjAyNjk0NlVMTCwKKysJMHhjODBhM2JlNGMxOTQyMGFjVUxMLCAweDY2YjFmNmM2ODFmMmI2ZGNVTEwsIDB4N2NmNzAzNjc2MWU5MzM4OFVMTCwgMHgyNWFiYmJkOGE2NjBhNGM0VUxMLAorKwkweDkxZWExMmJhMTRmZDUxOThVTEwsIDB4Njg0OTUwZmM0YTNjZmZhOVVMTCwgMHhmODI2ODQyMTMwZjVhZDI4VUxMLCAweDNlYTk4OGY3NTMwMWE0NDFVTEwsCisrCTB4Yzk3ODEwOWE2OTVmOGM2ZlVMTCwgMHgxNzQ2ZWI0YTA1MzBjM2YzVUxMLCAweDQ0NGQ2ZDc3YjQ0NTk5OTVVTEwsIDB4NzU5NTJiOGMwNTRlNWNjN1VMTCwKKysJMHhhMzcwM2Y3OTE1ZjRkNmFhVUxMLCAweDY2YzM0NjIwMmYyNjQ3ZDhVTEwsIDB4ZDAxNDY5ZGY4MTFkNjQ0YlVMTCwgMHg3N2ZlYTQ3ZDgxYTVkNzFmVUxMLAorKwkweGM1ZTk1MjllZjU3Y2EzODFVTEwsIDB4NmVlZWI0YjljZTJmODgxYVVMTCwgMHhiNmU5MWEyOGU4MDA5YmQ2VUxMLCAweDRiODBiZTNlOWFmYzNmZWNVTEwsCisrCTB4N2UzNzczYzUyNmFlZDJjNVVMTCwgMHgxYjRhZmNiNDUzYzlhNDlkVUxMLCAweGE5MjBiZGQ3YmFmZmIyNGRVTEwsIDB4N2M1NDY5OWYxMjJkNDAwZVVMTCwKKysJMHhlZjQ2YzhlMTRmYTk0YmM4VUxMLCAweGUwYjA3NGNlMjk1MmVkNWVVTEwsIDB4YmVhNDUwZTFkYmQ4ODVkNVVMTCwgMHg2MWI2ODY0OTMyMGY3MTJjVUxMLAorKwkweDhhNDg1ZjczMDljY2JkZDFVTEwsIDB4YmQwNjMyMGQ3ZDRkMWEyZFVMTCwgMHgyNTIzMjk3MzMyMmRiZWY0VUxMLCAweDQ0NWRjNDc1OGMxN2Y3NzBVTEwsCisrCTB4ZGIwNDM0MTc3Y2M4OTMzY1VMTCwgMHhlZDZmZTgyMTc1ZWEwNTlmVUxMLCAweDFlZmViZWZkYzA1M2RiMzRVTEwsIDB4NGFkYmU4NjdjNjVkYWY5OVVMTCwKKysJMHgzYWNkNzFhMmE5MDYwOWRmVUxMLCAweGU1ZTk5MTg1NmRkMDQwNTBVTEwsIDB4MWVjNjliNjg4MTU3YzIzY1VMTCwgMHg2OTc0MjdmNjg4NWNmZTRkVUxMLAorKwkweGQ3YmU3YjliNjVlMWE4NTFVTEwsIDB4YTAzZDI4ZDUyMmM1MzZkZFVMTCwgMHgyODM5OWQ2NThmZDJiNjQ1VUxMLCAweDQ5ZTViN2UxN2MyNjQxZTFVTEwsCisrCTB4NmY4YzNhOTg3MDA0NTdhNFVMTCwgMHg1MDc4ZjBhMjVlYmI2Nzc4VUxMLCAweGQxM2MzY2NiYzM4Mjk2MGZVTEwsIDB4MmUwMDMyNThhN2RmODRiMVVMTCwKKysJMHg4YWQxZjM5YmU2Mjk2YTFjVUxMLCAweGMxZWVhYTY1MmE1ZmJmYjJVTEwsIDB4MzNlZTA2NzNmZDI2ZjNjYlVMTCwgMHg1OTI1NjE3M2E2OWQyY2NjVUxMLAorKwkweDQxZWEwN2FhNGUxOGZjNDFVTEwsIDB4ZDlmYzE5NTI3Yzg3YTUxZVVMTCwgMHhiZGFhY2I4MDU4MzFjYTZmVUxMLCAweDQ0NWI2NTJkYzkxNjY5NGZVTEwsCisrCTB4Y2U5MmEzYTdmMjE3MjMxNVVMTCwgMHgxZWRjMjgyZGUxMWI5OTY0VUxMLCAweGExODIzYWFmZTA0YzMxNGFVTEwsIDB4NzkwYTJkOTQ0MzdjZjU4NlVMTCwKKysJMHg3MWM0NDdmYjkzZjZlMDA5VUxMLCAweDg5MjJhNTY3MjI4NDUyNzZVTEwsIDB4YmY3MDkwM2IyMDRmNTE2OVVMTCwgMHgyZjdhODk4OTFiYTMxOWZlVUxMLAorKwkweDAyYTA4ZWI1NzdlMjE0MGNVTEwsIDB4ZWQ5YTRlZDQ0MjdiZGNmNFVMTCwgMHg1MjUzZWM0NGU0MzIzY2QxVUxMLCAweDNlODgzNjNjMTRlOTM1NWJVTEwsCisrCTB4YWE2NmMxNDI3NzExMGI4Y1VMTCwgMHgxYWUwMzkxNjEwYTIzMzkwVUxMLCAweDIwMzBiZDEyYzkzZmMyYTJVTEwsIDB4M2VlMTQxNTc5NTU1YzdhYlVMTCwKKysJMHg5MjE0ZGUzYTZkNmU3ZDQxVUxMLCAweDNjY2RkODg2MDdmMTdlZmVVTEwsIDB4Njc0ZjEyODhmOGUxMTIxN1VMTCwgMHg1NjgyMjUwZjMyOWY5M2QwVUxMLAorKwkweDZjZjAwYjEzNmQyZTM5NmVVTEwsIDB4NmU0Y2Y4NmYxMDE0ZGViZlVMTCwgMHg1OTMwYjFiNWJmY2M0ZTgzVUxMLCAweDA0NzA2OWI0OGFiYTE2YjZVTEwsCisrCTB4MGQ0Y2U0YWI2OWIyMDc5M1VMTCwgMHhiMjRkYjkxYTk3ZDBmYjllVUxMLCAweGNkZmE1MGY1NGUwMGQwMWRVTEwsIDB4MjIxYjEwODUzNjhiZGRiNVVMTCwKKysJMHhlN2U1OTQ2OGIxZTNkOGQyVUxMLCAweDUzYzU2NTYzYmQxMjJmOTNVTEwsIDB4ZWVlOGE5MDNlMDY2M2YwOVVMTCwgMHg2MWVmYTY2MmNiYmUzZDQyVUxMLAorKwkweDJjZjhkZGRkZGU2ZWFiMmFVTEwsIDB4OWJmODBhZDUxNDM1ZjIzMVVMTCwgMHg1ZGVhZGFjZWM5ZjA0OTczVUxMLCAweDI5Mjc1YjVkNDFkMjliMjdVTEwsCisrCTB4Y2ZkZTBmMDg5NWViZjE0ZlVMTCwgMHhiOWFhYjk2YjA1NDkwNWE3VUxMLCAweGNhZTgwZGQ5YTFjNDIwZmRVTEwsIDB4MGE2M2JmMmYxNjczYmJjN1VMTCwKKysJMHgwOTJmNmUxMTk1OGZiYzhjVUxMLCAweDY3MmE4MWU4MDQ4MjJmYWRVTEwsIDB4Y2FjODM1MTU2MGQ1MjUxN1VMTCwgMHg2ZjNmNzcyMmM4ZjE5MmY4VUxMLAorKwkweGY4YmE5MGNjYzJlODk0YjdVTEwsIDB4MmM3NTU3YTQzOGZmOWYwZFVMTCwgMHg4OTRkMWQ4NTVhZTUyMzU5VUxMLCAweDY4ZTEyMjE1N2I3NDNkNjlVTEwsCisrCTB4ZDg3ZTU1NzBjZmI5MTlmM1VMTCwgMHgzZjJjZGVjZDk1Nzk4ZGI5VUxMLCAweDIxMjExNTQ3MTBjMGEyY2VVTEwsIDB4M2M2NmExMTUyNDZkYzViMlVMTCwKKysJMHhjYmVkYzU2MjI5NGVjYjcyVUxMLCAweGJhNzE0M2MzNmEyODBiMTZVTEwsIDB4OTYxMGMyZWZkNDA3OGI2N1VMTCwgMHg2MTQ0NzM1ZDk0NmE0YjFlVUxMLAorKwkweDUzNmYxMTFlZDc1YjMzNTBVTEwsIDB4MDIxMWRiOGMyMDQxZDgxYlVMTCwgMHhmOTNjYjEwMDBlMTA0MTNjVUxMLCAweDE0OWRmZDNjMDM5ZTg4NzZVTEwsCisrCTB4ZDQ3OWRkZTQ2YjYzMTU1YlVMTCwgMHhiNjZlMTVlOTNjODM3OTc2VUxMLCAweGRhZmRlNDNiMWYxM2UwMzhVTEwsIDB4NWZhZmRhMWEyZTRiMGIzNVVMTCwKKysJMHgzNjAwYmJkZjE3MTk3NTgxVUxMLCAweDM5NzIwNTBiYmUzY2QyYzJVTEwsIDB4NTkzODkwNmRiZGQ1YmU4NlVMTCwgMHgzNGZjZTVlNDNmOWI4NjBmVUxMLAorKwkweDc1YThhNGNkNDJkMTRkMDJVTEwsIDB4ODI4ZGFiYzUzNDQxZGY2NVVMTCwgMHgzM2RjYWJlZGQyZTEzMWQzVUxMLCAweDNlYmFkNzZmYjgxNGQyNWZVTEwsCisrCTB4ZDQ5MDZmNTY2ZjcwZTEwZlVMTCwgMHg1ZDEyZjdhYTUxNjkwZjVhVUxMLCAweDQ1YWRiMTZlNzZjZWZjZjJVTEwsIDB4MDFmNzY4YWVhZDIzMjk5OVVMTCwKKysJMHgyYjZjYzc3YjYyNDhmZWJkVUxMLCAweDNjZDMwNjI4ZWMzYWFmZmRVTEwsIDB4Y2UxYzBiODBkNGVmNDg2YVVMTCwgMHg0YzNiZmYyZWE2ZjY2YzIzVUxMLAorKwkweDNmMmVjNDA5NGFlYWViNWZVTEwsIDB4NjFiMTliMjg2ZTM3MmNhN1VMTCwgMHg1ZWVmYTk2NmRlMmE3MDFkVUxMLCAweDIzYjIwNTY1ZGU1NWUzZWZVTEwsCisrCTB4ZTMwMWNhNTI3OWQ1ODU1N1VMTCwgMHgwN2IyZDRjZTI3YzI4NzRmVUxMLCAweGE1MzJjZDhhOWRjZjFkNjdVTEwsIDB4MmE1MmZlZTIzZjJiZmY1NlVMTCwKKysJMHg4NjI0ZWZiMzdjZDg2NjNkVUxMLCAweGJiYzdhYzIwZmZiZDc1OTRVTEwsIDB4NTdiODVlOWM4MmQzNzQ0NVVMTCwgMHg3YjMwNTJjYjg2YTZlYzY2VUxMLAorKwkweDM0ODJmMGFkMjUyNWU5MWVVTEwsIDB4MmNiNjgwNDNkMjhlZGNhMFVMTCwgMHhhZjRmNmQwNTJlMWIwMDNhVUxMLCAweDE4NWY4YzI1Mjk3ODFiMGFVTEwsCisrCTB4YWE0MWRlNWJkODBjZTBkNlVMTCwgMHg5NDA3YjI0MTY4NTNlOWQ2VUxMLCAweDU2M2VjMzZlMzU3ZjRjM2FVTEwsIDB4NGNjNGI4ZGQwZTI5N2JjZVVMTCwKKysJMHhhMmZjMWE1MmZmYjg3MzBlVUxMLCAweDE4MTFmMTZlNjcwNThlMzdVTEwsIDB4MTBmOWEzNjZjZGRmNGVlMVVMTCwgMHg3MmY0YTBjNGEwYjlmMDk5VUxMLAorKwkweDhjMTZjMDZmNjYzZjRlYTdVTEwsIDB4NjkzYjNhZjc0ZTk3MGZiYVVMTCwgMHgyMTAyZTdmMWQ2OWVjMzQ1VUxMLCAweDBiYTUzY2JjOTY4YTgwODlVTEwsCisrCTB4Y2EzZDlkYzdmZWExNTUzN1VMTCwgMHg0YzY4MjRiYjUxNTM2NDkzVUxMLCAweGI5ODg2MzE0ODQ0MDA2YjFVTEwsIDB4NDBkMmE3MmFiNDU0Y2M2MFVMTCwKKysJMHg1OTM2YTFiNzEyNTcwOTc1VUxMLCAweDkxYjlkNjQ4ZGViZGE2NTdVTEwsIDB4MzM0NDA5NGJiNjQzMzBlYVVMTCwgMHgwMDZiYTEwZDEyZWU1MWQwVUxMLAorKwkweDE5MjI4NDY4ZjVkZTVkNThVTEwsIDB4MGViMTJmNGMzOGNjMDViMFVMTCwgMHhhMTAzOWY5ZGQ1NjAxOTkwVUxMLCAweDQ1MDJkNGNlNGZmZjBlMGJVTEwsCisrCTB4ZWIyMDU0MTA2ODM3YzE4OVVMTCwgMHhkMGY2NTQ0YzZkZDNiOTNjVUxMLCAweDQwNzI3MDY0YzQxNmQ3NGZVTEwsIDB4NmUxNWM2MTE0YjUwMmVmMFVMTCwKKysJMHg0ZGYyYTM5OGNmYjFhNzZiVUxMLCAweDExMjU2Yzc0MTlmMmY2YjFVTEwsIDB4NGE0OTc5NjIwNjZlNjA0M1VMTCwgMHg3MDViM2FhYjQxMzU1YjQ0VUxMLAorKwkweDM2NWVmNTM2ZDc5N2IxZDhVTEwsIDB4MDAwNzZiZDYyMmRkZjBkYlVMTCwgMHgzYmJmMzNiMGUwNTc1YTg4VUxMLCAweDM3NzdhYTA1YzhlNGNhNGRVTEwsCisrCTB4MzkyNzQ1Yzg1NTc4ZGI1ZlVMTCwgMHg2ZmRhNDE0OWRiYWU1YWUyVUxMLCAweGIxZjBiMDBiOGFkYzk4NjdVTEwsIDB4MDk5NjM0MzdkMzZmMWRhM1VMTCwKKysJMHg3ZTgyNGU5MGE1ZGMzODUzVUxMLCAweGNjYjVmNjY0MWYxMzVjYmRVTEwsIDB4NjczNmQ4NmM4N2NlOGZjY1VMTCwgMHg2MjVmM2NlMjY2MDQyNDlmVUxMLAorKwkweGFmOGFjODA1OTUwMmY2M2ZVTEwsIDB4MGMwNWU3MGEyZTM1MTQ2OVVMTCwgMHgzNTI5MmU5Yzc2NGI2MzA1VUxMLCAweDFhMzk0MzYwYzdlMjNhYzNVTEwsCisrCTB4ZDVjNmQ1MzI1MTE4MzI2NFVMTCwgMHg2MjA2NWFiZDQzYzJiNzRmVUxMLCAweGI1ZmJmNWQwM2I5NzNmOWJVTEwsIDB4MTNhM2RhMzY2MTIwNmU1ZVVMTCwKKysJMHhjNmJkNTgzNzcyNWQ5NGU1VUxMLCAweDE4ZTMwOTEyMjA1MDE2YzVVTEwsIDB4MjA4OGNlMTU3MDAzM2M2OFVMTCwgMHg3ZmJhMWY0OTVjODM3OTg3VUxMLAorKwkweDVhOGM3NDIzZjJmOTA3OWRVTEwsIDB4MTczNTE1N2IzNDAyM2ZjNVVMTCwgMHhlNGY5YjQ5YWQyZmFiMzUxVUxMLCAweDY2OTFmZjcyYzg3OGUzM2NVTEwsCisrCTB4MTIyYzJhZGVkYzVlZmYzZVVMTCwgMHhmOGRkNGJmMWQ4OTU2Y2Y0VUxMLCAweGViODYyMDVkOWU5ZTViZGFVTEwsIDB4MDQ5YjkyYjlkOTc1Yzc0M1VMTCwKKysJMHhhNTM3OTczMGIwZjZjMDVhVUxMLCAweDcyYTBmZmFjYzZmM2E1NTNVTEwsIDB4YjAwMzJjMzRiMjBkY2Q2ZFVMTCwgMHg0NzBlOWRiYzg4ZDUxNjRhVUxMLAorKwkweGIxOWNmMTBjYTIzN2MwNDdVTEwsIDB4YjY1NDY2NzExZjZjODFhMlVMTCwgMHhiMzMyMWJkMTZkZDgwYjQzVUxMLCAweDQ4YzE0ZjYwMGM1ZmJlOGVVTEwsCisrCTB4NjY0NTFjMjY0YWE2YzgwM1VMTCwgMHhiNjZlMzkwNGE0ZmE3ZGE2VUxMLCAweGQ0NWYxOWIwYjMxMjgzOTVVTEwsIDB4MzE2MDI2MjdjM2M5YmMxMFVMTCwKKysJMHgzMTIwZGM0ODMyZTRlMTBkVUxMLCAweGViMjBjNDY3NTZjNzE3ZjdVTEwsIDB4MDBmNTJlM2Y2NzI4MDI5NFVMTCwgMHg1NjZkNGZjMTQ3MzBjNTA5VUxMLAorKwkweDdlM2E1ZDQwZmQ4MzcyMDZVTEwsIDB4YzFlOTI2ZGM3MTU5NTQ3YVVMTCwgMHgyMTY3MzBmYmE2OGQ2MDk1VUxMLCAweDIyZThjMzg0M2Y2OWNlYTdVTEwsCisrCTB4MzNkMDc0ZTg5MzBlNGIyYlVMTCwgMHhiNmU0MzUwZTg0ZDE1ODE2VUxMLCAweDU1MzRjMjZhZDZiYTIzNjVVTEwsIDB4Nzc3M2MxMmY4OWYxZjNmM1VMTCwKKysJMHg4Y2JhNDA0ZGE1Nzk2MmFhVUxMLCAweDViOTg5N2E4MTk5OWNlNTZVTEwsIDB4NTA4ZTg2MmYxMjE2OTJmY1VMTCwgMHgzYTgxOTA3ZmEwOTNjMjkxVUxMLAorKwkweDBkZGVkMGZmNDcyNWE1MTBVTEwsIDB4MTBkOGNjMTA2NzNmYzUwM1VMTCwgMHg1YjlkMTUxYzlmMWY0ZTg5VUxMLCAweDMyYTVjMWQ1Y2IwOWE0NGNVTEwsCisrCTB4MWUwYWE0NDJiOTA1NDFmYlVMTCwgMHg1Zjg1ZWI3Y2MxYjQ4NWRiVUxMLCAweGJlZTU5NWNlOGE5ZGYyZTVVTEwsIDB4MjVlNDk2YzcyMjQyMjIzNlVMTCwKKysJMHg1ZWRmM2M0NmNkMGZlNWI5VUxMLCAweDM0ZTc1YTdlZDJhNDMzODhVTEwsIDB4ZTQ4OGRlMTFkNzYxZTM1MlVMTCwgMHgwZTg3OGEwMWEwODU1NDVjVUxMLAorKwkweGJhNDkzYzc3ZTAyMWJiMDRVTEwsIDB4MmI0ZDE4NDNjN2RmODk5YVVMTCwgMHg5ZWEzN2E0ODdhZTgwZDY3VUxMLCAweDY3YTk5NTgwMTFlNDE3OTRVTEwsCisrCTB4NGI1ODA1MWE2Njk3YjA2NVVMTCwgMHg0N2UzM2Y3ZDhkNmJhNmQ0VUxMLCAweGJiNGRhOGQ0ODNjYTQ2YzFVTEwsIDB4NjhiZWNhYTE4MWMyZGIwZFVMTCwKKysJMHg4ZDg5ODBlOTBiOTg5YWE1VUxMLCAweGY5NWViMTRhMmM5M2M5OWJVTEwsIDB4NTFjNmM3YzQ3OTZlNzNhMlVMTCwgMHg2ZTIyODM2M2I1ZWZiNTY5VUxMLAorKwkweGM2YmJjMGIwMmRkNjI0YzhVTEwsIDB4Nzc3ZWI0N2RlYzgxNzBlZVVMTCwgMHgzY2RlMTVhMDA0Y2ZhZmE5VUxMLCAweDFkYzZiYzA4NzE2MGJmOWJVTEwsCisrCTB4MmUwN2UwNDNlZWMzNDAwMlVMTCwgMHgxOGU5ZmM2NzdhNjhkYzdmVUxMLCAweGQ4ZGEwMzE4OGJkMTViOWFVTEwsIDB4NDhmYmMzYmIwMDU2ODI1M1VMTCwKKysJMHg1NzU0N2Q0Y2ZiNjU0Y2UxVUxMLCAweGQzNTY1YjgyYTA1OGUyYWRVTEwsIDB4ZjYzZWFmMGJiZjE1NDQ3OFVMTCwgMHg0NzUzMWVmMTE0ZGZiYjE4VUxMLAorKwkweGUxZWM2MzBhNDI3OGM1ODdVTEwsIDB4NTUwN2Q1NDZjYThlODNmM1VMTCwgMHg4NWUxMzVjNjNhZGMwYzJiVUxMLCAweDBhYTdlZmE4NTY4Mjg0NGVVTEwsCisrCTB4NzI2OTFiYThiM2UxZjYxNVVMTCwgMHgzMmI0ZTk3MDFmYmUzZmZhVUxMLCAweDk3YjZkOTJlMzliYjc4NjhVTEwsIDB4MmNmZTUzZGVhMDJlMzllOFVMTCwKKysJMHg2ODczOTJjZDg1Y2Q1MmIwVUxMLCAweDI3ZmY2NmM5MTBlMjk4MzFVTEwsIDB4OTcxMzQ1NTZhOTgzMmQwNlVMTCwgMHgyNjliYjAzNjBhODRmOGEwVUxMLAorKwkweDcwNmU1NTQ1NzY0M2Y4NWNVTEwsIDB4MzczNGE0OGM5YjU5N2QxYlVMTCwgMHg3YWVlOTFlOGM2ZWZhNDcyVUxMLCAweDVjZDZhYmMxOThhOWQ5ZTBVTEwsCisrCTB4MGUwNGRlMDZjYjNjZTQxYVVMTCwgMHhkOGM2ZWI4OTM0MDJlMTM4VUxMLCAweDkwNDY1OWJiNjg2ZTM3NzJVTEwsIDB4NzIxNWMzNzE3NDZiYThjOFVMTCwKKysJMHhmZDEyYTk3ZWVhZTRhMmQ5VUxMLCAweDk1MTRiNzUxNjM5NGYyYzVVTEwsIDB4MjY2ZmQ1ODA5MjA4ZjI5NFVMTCwgMHg1Yzg0NzA4NTYxOWEyNmI5VUxMLAorKwkweDUyOTg1NDEwZmVkNjk0ZWFVTEwsIDB4M2M5MDViOTM0YTJlZDI1NFVMTCwgMHgxMGJiNDc2OTJkM2JlNDY3VUxMLCAweDA2M2IzZDJkNjllNWU5ZTFVTEwsCisrCTB4NDcyNzI2ZWVkZGE1N2RlYlVMTCwgMHhlZmI2YzRhZTEwZjQxODkxVUxMLCAweDJiMTY0MTkxN2IzMDc2MTRVTEwsIDB4MTE3YzU1NGZjNGY0NWI3Y1VMTCwKKysJMHhjMDdjZjMxMThmOWQ4ODEyVUxMLCAweDAxZGJkODIwNTAwMTc5MzlVTEwsIDB4ZDdlODAzZjQxNzFiMjgyN1VMTCwgMHgxMDE1ZTg3NDg3ZDIyNWVhVUxMLAorKwkweGM1OGRlM2ZlZDIzYWNjNGRVTEwsIDB4NTBkYjkxYzI5NGE3YmUyZFVMTCwgMHgwYjk0ZDQzZDFjOWNmNDU3VUxMLCAweDZiMTY0MGZhNmUzNzUyNGFVTEwsCisrCTB4NjkyZjM0NmM1ZmRhMGQwOVVMTCwgMHgyMDBiMWM1OWZhNGQzMTUxVUxMLCAweGI4YzQ2Zjc2MDc3N2EyOTZVTEwsIDB4NGIzODM5NWYzZmZkZmJjZlVMTCwKKysJMHgxOGQyNWUwMGJlNTRkNjcxVUxMLCAweDYwZDUwNTgyYmVjOGFiYTZVTEwsIDB4ODdhZDhmMjYzYjc4Yjk4MlVMTCwgMHg1MGZkZjY0ZTljZGEwNDMyVUxMLAorKwkweDkwZjU2N2FhYzU3OGRjZjBVTEwsIDB4ZWYxZTliMGVmMmEzMTMzYlVMTCwgMHgwZWViYmE5MjQyZDlkZTcxVUxMLCAweDE1NDczYzliZjAzMTAxYzdVTEwsCisrCTB4N2M3N2U4YWU1NmI3ODA5NVVMTCwgMHhiNjc4ZTc2NjZlNmYwNzhlVUxMLCAweDJkYTBiOTYxNTM0OGJhMWZVTEwsIDB4N2NmOTMxYzFmZjczM2YwYlVMTCwKKysJMHgyNmIzNTdmNTBhMGEzNjZjVUxMLCAweGU5NzA4Y2Y0MmI4N2Q3MzJVTEwsIDB4YzEzYWVlYTVmOTFjYjJjMFVMTCwgMHgzNWQ5MGM5OTExNDNiYjRjVUxMLAorKwkweDQ3YzFjNDA0YTlhMGQ5ZGNVTEwsIDB4NjU5ZTU4NDUxOTcyZDI1MVVMTCwgMHgzODc1YThjNDczYjM4YzMxVUxMLCAweDFmYmQ5ZWQzNzk1NjFmMjRVTEwsCisrCTB4MTFmYWJjNmZkNDFlYzI4ZFVMTCwgMHg3ZWY4ZGZlM2NkMmEyZGNhVUxMLCAweDcyZTczYjVkOGM0MDQ1OTVVTEwsIDB4NjEzNWZhNDk1NGI3MmYyN1VMTCwKKysJMHhjY2ZjMzJhMmRlMjRiNjljVUxMLCAweDNmNTU2OThjMWYwOTVkODhVTEwsIDB4YmUzMzUwZWQ1YWMzZjkyOVVMTCwgMHg1ZTliZjgwNmNhNDc3ZWViVUxMLAorKwkweGU5Y2U4ZmI2M2MzMDlmNjhVTEwsIDB4NTM3NmY2MzU2NWUxZjlmNFVMTCwgMHhkMWFmY2ZiMzVhNjM5M2YxVUxMLCAweDY2MzJhMWVkZTU2MjM1MDZVTEwsCisrCTB4MGI3ZDZjMzkwYzJkZWQ0Y1VMTCwgMHg1NmNiMzI4MWRmMDRjYjFmVUxMLCAweDY2MzA1YTEyNDllY2MzYzdVTEwsIDB4NWQ1ODhiNjBhMzhjYTcyYVVMTCwKKysJMHhhNmVjYmY3OGU4ZTVmNDJkVUxMLCAweDg2ZWViNDRiM2M4YTNlZWNVTEwsIDB4ZWMyMTljNDhmYmQyMTYwNFVMTCwgMHgxYWFmMWFmNTE3YzM2NzMxVUxMLAorKwkweGMzMDZhMjgzNjc2OWJkZTdVTEwsIDB4MjA4MjgwNjIyYjFlMmFkYlVMTCwgMHg4MDI3ZjUxZmZiZmY5NGE2VUxMLCAweDc2Y2ZhMWNlMTEyNGYyNmJVTEwsCisrCTB4MThlYjAwNTYyNDIyYWJiNlVMTCwgMHhmMzc3YzRkNThmOGMyOWMzVUxMLCAweDRkYmJjMjA3ZjUzMTU2MWFVTEwsIDB4MDI1M2I3ZjA4MjEyOGEyN1VMTCwKKysJMHgzZDFmMDkxY2I2MmMxN2UwVUxMLCAweDQ4NjBlMWFiZDY0NjI4YTlVTEwsIDB4NTJkMTc0MzYzMDlkNDI1M1VMTCwgMHgzNTZmOTdlMTNlZmFlNTc2VUxMLAorKwkweGQzNTFlMTFhYTE1MDUzNWJVTEwsIDB4M2U2YjQ1YmIxZGQ4NzhjY1VMTCwgMHgwYzc3NjEyOGJlZDkyYzk4VUxMLCAweDFkMzRhZTkzMDMyODg1YjhVTEwsCisrCTB4NGJhMDQ4OGNhODViYTRjM1VMTCwgMHg5ODUzNDhjMzNjOWNlNmNlVUxMLCAweDY2MTI0YzZmOTdiZGE3NzBVTEwsIDB4MGY4MWEwMjkwNjU0MTI0YVVMTCwKKysJMHg5ZWQwOWNhNjU2OWI4NmZkVUxMLCAweDgxMTAwOWZkMThhZjlhMmRVTEwsIDB4ZmYwOGQwM2Y5M2Q4YzIwYVVMTCwgMHg1MmExNDgxOTlmYWVmMjZiVUxMLAorKwkweDNlMDNmOWRjMmQ4ZDFiNzNVTEwsIDB4NDIwNTgwMTg3Mzk2MWE3MFVMTCwgMHhjMGQ5ODdmMDQxYTM1OTcwVUxMLCAweDA3YWExZjE1YTFjMGQ1NDlVTEwsCisrCTB4ZGZkNDZjZTA4Y2QyNzIyNFVMTCwgMHg2ZDBhMDI0ZjkzNGU0MjM5VUxMLCAweDgwOGE3YTYzOTk4OTdiNTlVTEwsIDB4MGE0NTU2ZTllMTNkOTVhMlVMTCwKKysJMHhkMjFhOTkxZmU5YzEzMDQ1VUxMLCAweDliMGU4NTQ4ZmU3NzUxYjhVTEwsIDB4NWRhNjQzY2I0YmYzMDAzNVVMTCwgMHg3N2RiMjhkNjM5NDBmNzIxVUxMLAorKwkweGZjNWVlYjYxNGFkYzkwMTFVTEwsIDB4NTIyOTQxOWFlOGM0MTFlYlVMTCwgMHg5ZWMzZTc3ODdkMWRjZjc0VUxMLCAweDM0MGQwNTNlMjE2ZTRjYjVVTEwsCisrCTB4Y2FjN2FmMzliNDhkZjJiNFVMTCwgMHhjMGZhZWMyODcxYTEwYTk0VUxMLCAweDE0MGE2OTI0NWNhNTc1ZWRVTEwsIDB4MGNmMWMzNzEzNDI3M2E0Y1VMTCwKKysJMHhjOGVlMzA2YWMyMjRiOGE1VUxMLCAweDU3ZWFlZTdjY2I0OTMwYjBVTEwsIDB4YTFlODA2YmRhYWNiZTc0ZlVMTCwgMHg3ZDlhNjI3NDJlZWI2NTdkVUxMLAorKwkweDllYjZiNmVmNTQ2YzQ4MzBVTEwsIDB4ODg1Y2NhMWZkZGIzNmUyZVVMTCwgMHhlNmI5ZjM4M2VmMGQ3MTA1VUxMLCAweDU4NjU0ZmVmOWQyZTA0MTJVTEwsCisrCTB4YTkwNWM0ZmZiZTBlOGUyNlVMTCwgMHg5NDJkZTVkZjliMzE4MTZlVUxMLCAweDQ5N2Q3MjNmODAyZTg4ZTFVTEwsIDB4MzA2ODRkZWE2MDJmNDA4ZFVMTCwKKysJMHgyMWU1YTI3OGEzZTZjYjM0VUxMLCAweGFlZmI2ZTZmNWIxNTFkYzRVTEwsIDB4YjMwYjhlMDQ5ZDc3Y2ExNVVMTCwgMHgyOGMzYzljZjUzYjk4OTgxVUxMLAorKwkweDI4N2ZiNzIxNTU2Y2RkMmFVTEwsIDB4MGQzMTdjYTg5NzAyMjI3NFVMTCwgMHg3NDY4Yzc0MjNhNTQzMjU4VUxMLCAweDRhN2YxMTQ2NGViNTY0MmZVTEwsCisrCTB4YTIzN2E0Nzc0ZDE5M2FhNlVMTCwgMHhkODY1OTg2ZWE5MjEyOWExVUxMLCAweDI0YzUxNWVjZjg3YzFhODhVTEwsIDB4NjA0MDAzNTc1ZjM5ZjVlYlVMTCwKKysJMHg0N2I5ZjE4OTU3MGE5YjI3VUxMLCAweDJiOThjZWRlNDY1ZTRiNzhVTEwsIDB4MDI2ZGY1NTFkYmI4NWMyMFVMTCwgMHg3NGZjZDkxMDQ3ZTIxOTAxVUxMLAorKwkweDEzZTJhOTBhMjNjMWJmYTNVTEwsIDB4MGNiMDA3NGU0Nzg1MTlmNlVMTCwgMHg1ZmYxY2JiZTNhZjZjZjQ0VUxMLCAweDY3ZmU1NDM4YmU4MTJkYmVVTEwsCisrCTB4ZDEzY2Y2NGZhNDBmMDViMFVMTCwgMHgwNTRkZmIyZjMyMjgzNzg3VUxMLCAweDQxNzM5MTViN2YwZDJhZWFVTEwsIDB4NDgyZjE0NGYxZjYxMGQ0ZVVMTCwKKysJMHhmNjIxMDIwMWI0N2Y4MjM0VUxMLCAweDVkMGFlMTkyOWU3MGI5OTBVTEwsIDB4ZGNkN2Y0NTViMDQ5NTY3Y1VMTCwgMHg3ZTkzZDBmMWYwOTE2ZjAxVUxMLAorKwkweGRkNzljYmYxOGE3ZGI0ZmFVTEwsIDB4YmU4MzkxYmY2Zjc0YzYyZlVMTCwgMHgwMjcxNDVkMTRiODI5MWJkVUxMLCAweDU4NWE3M2VhMmNiZjE3MDVVTEwsCisrCTB4NDg1Y2EwM2U5MjhhMGRiMlVMTCwgMHgxMGZjMDFhNTc0Mjg1N2U3VUxMLCAweDJmNDgyZWRiZDZkNTUxYTdVTEwsIDB4MGYwNDMzYjUwNDhmZGI4YVVMTCwKKysJMHg2MGRhMmU4ZGQ3ZGM2MjQ3VUxMLCAweDg4YjRjOWQzOGNkNDgxOWFVTEwsIDB4MTMwMzNhYzAwMWY2NjY5N1VMTCwgMHgyNzNiMjRmZTNiMzY3ZDc1VUxMLAorKwkweGM2ZThmNjZhMzFiM2I5ZDRVTEwsIDB4MjgxNTE0YTQ5NGRmNDlkNVVMTCwgMHhkMTcyNmZkZmM4YjIzZGE3VUxMLCAweDRiM2FlN2QxMDNkZWU1NDhVTEwsCisrCTB4YzYyNTZlMTljZTRiOWQ3ZVVMTCwgMHhmZjVjNWNmMTg2ZTNjNjFjVUxMLCAweGFjYzYzY2EzNGI4ZWMxNDVVTEwsIDB4NzQ2MjE4ODhmZWU2NjU3NFVMTCwKKysJMHg5NTZmNDA5NjQ1MjkwYTFlVUxMLCAweGVmMGJmOGUzMjYzYTk2MmVVTEwsIDB4ZWQ2YTUwZWI1ZWMyNjQ3YlVMTCwgMHgwNjk0MjgzYTlkY2E3NTAyVUxMLAorKwkweDc2OWI5NjM2NDNhMmRjZDFVTEwsIDB4NDJiN2M4ZWEwOWZjNTM1M1VMTCwgMHg0ZjAwMmFlZTEzMzk3ZWFiVUxMLCAweDYzMDA1ZTJjMTliN2Q2M2FVTEwsCisrCTB4Y2E2NzM2ZGE2MzAyM2JlYVVMTCwgMHg5NjZjN2Y2ZGIxMmE5OWI3VUxMLCAweGFjZTA5MzkwYzUzN2M1ZTFVTEwsIDB4MGI2OTYwNjNhMWFhODllZVVMTCwKKysJMHhlYmIwM2U5NzI4OGM1NmU1VUxMLCAweDQzMmE5ZjlmOTM4YzhiZThVTEwsIDB4YTZhNWE5M2Q1YjcxN2Y3MVVMTCwgMHgxYTVmYjRjM2UxOGY5ZDk3VUxMLAorKwkweDFjOTRlN2FkMWM2MGNkY2VVTEwsIDB4ZWUyMDJhNDNmYzAyYzRhMFVMTCwgMHg4ZGFmZTRkODY3YzQ2YTIwVUxMLCAweDBhMTAyNjNjOGFjMjdiNThVTEwsCisrCTB4ZDBkZWE5ZGZlNDQzMmE0YVVMTCwgMHg4NTZhZjg3YmJlOTI3N2M1VUxMLCAweGNlODQ3MmFjYzIxMmM3MWFVTEwsIDB4NmYxNTFiNmQ5YmJiMWU5MVVMTCwKKysJMHgyNjc3NmM1MjdjZWVkNTZhVUxMLCAweDdkMjExY2I3ZmJmOGZhZWNVTEwsIDB4MzdhZTY2YTZmZDQ2MDljY1VMTCwgMHgxZjgxYjcwMmQyNzcwYzQyVUxMLAorKwkweDJmYjBiMDU3ZWFjNTgzOTJVTEwsIDB4ZTFkZDg5ZmUyOTc0NGU5ZFVMTCwgMHhjOTY0ZjhlYjE3YmViNGY4VUxMLCAweDI5NTcxMDczYzlhMmQ0MWVVTEwsCisrCTB4YTk0OGExODk4MWMwZTI1NFVMTCwgMHgyZGY2MzY5YjY1YjIyODMwVUxMLCAweGEzM2ViMmQ3NWZjZmQzYzZVTEwsIDB4MDc4Y2Q2ZWM0MTk5YTAxZlVMTCwKKysJMHg0YTU4NGE0MWFkOTAwZDJmVUxMLCAweDMyMTQyYjc4ZTJjNzRjNTJVTEwsIDB4NjhjNGU4MzM4NDMxYzk3OFVMTCwgMHg3ZjY5ZWE5MDA4Njg5ZmMyVUxMLAorKwkweDUyZjJjODFlNDZhMzgyNjVVTEwsIDB4ZmQ3ODA3MmQwNGE4MzJmZFVMTCwgMHg4Y2Q3ZDVmYTI1MzU5ZTk0VUxMLCAweDRkZTcxYjc0NTRjYzI5ZDJVTEwsCisrCTB4NDJlYjYwYWQxZWRhNmFjOVVMTCwgMHgwYWFkMzdkZmRiYzA5YzNhVUxMLCAweDgxMDA0YjcxZTMzY2MxOTFVTEwsIDB4NDRlNmJlMzQ1MTIyODAzY1VMTCwKKysJMHgwM2ZlODM4OGJhMTkyMGRiVUxMLCAweGY1ZDU3YzMyMTUwZGIwMDhVTEwsIDB4NDljOGM0MjgxYWY2MGMyOVVMTCwgMHgyMWVkYjUxOGRlNzAxYWVlVUxMLAorKwkweDdmYjYzZTQxOGYwNmRjOTlVTEwsIDB4YTQ0NjBkOTljMTY2ZDdiOFVMTCwgMHgyNGRkNTI0OGNlNTIwYTgzVUxMLCAweDVlYzNhZDcxMmI5MjgzNThVTEwsCisrCTB4MTUwMjJhNWZiZDE3OTMwZlVMTCwgMHhhNGY2NGE3N2Q4MjU3MGUzVUxMLCAweDEyYmM4ZDY5MTU3ODM3MTJVTEwsIDB4NDk4MTk0YzBmYzYyMGFiYlVMTCwKKysJMHgzOGEyZDlkMjU1Njg2YzgyVUxMLCAweDc4NWM2YmQ5MTkzZTIxZjBVTEwsIDB4ZTRkNWM4MWFiMjRhNTQ4NFVMTCwgMHg1NjMwNzg2MGIyZTIwOTg5VUxMLAorKwkweDQyOWQ1NWY3OGI0ZDc0YzRVTEwsIDB4MjJmMTgzNDY0MzM1MDEzMVVMTCwgMHgxZTYwYzI0NTk4YzcxZmZmVUxMLCAweDU5ZjJmMDE0OTc5OTgzZWZVTEwsCisrCTB4NDZhNDdkNTZlYjQ5NGE0NFVMTCwgMHgzZTIyYTg1NGQ2MzZhMThlVUxMLCAweGIzNDZlMTUyNzQ0OTFjM2JVTEwsIDB4MmNlYWZkNGU1MzkwY2RlN1VMTCwKKysJMHhiYThhODUzOGJlMGQ2Njc1VUxMLCAweDRiOTA3NGJiNTA4MThlMjNVTEwsIDB4Y2JkYWI4OTA4NWQzMDRjM1VMTCwgMHg2MWEyNGZlMGU1NjE5MmM0VUxMLAorKwkweGNiNzYxNWU2ZGI1MjViY2JVTEwsIDB4ZGQ3ZDhjMzVhNTY3ZTRjYVVMTCwgMHhlNmI0MTUzYWNhZmNkZDY5VUxMLCAweDJkNjY4ZTA5N2YzYzk3NjZVTEwsCisrCTB4YTU3ZTdlMjY1Y2U1NWVmMFVMTCwgMHg1ZDlmNGU1MjdjZDRiOTY3VUxMLCAweGZiYzgzNjA2NDkyZmQxZTVVTEwsIDB4MDkwZDUyYmViN2MzZjdhZVVMTCwKKysJMHgwOWI5NTE1YTFlN2I0ZDdjVUxMLCAweDFmMjY2YTI1OTlkYTQ0YzBVTEwsIDB4YTFjNDk1NDhlMmM1NTUwNFVMTCwgMHg3ZWYwNDI4NzEyNmYxNWNjVUxMLAorKwkweGZlZDE2NTlkYmQzMGVmMTVVTEwsIDB4OGI0YWI5ZWVjNGUwMjc3YlVMTCwgMHg4ODRkNjIzNmE1ZGYzMjkxVUxMLCAweDFmZDk2ZWE2YmY1Y2Y3ODhVTEwsCisrCTB4NDJhMTYxOTgxZjE5MGQ5YVVMTCwgMHg2MWQ4NDk1MDdlNjA1MmMxVUxMLCAweDlmZTExM2JmMjg1YTJjZDVVTEwsIDB4N2MyMmQ2NzZkYmFkODVkOFVMTCwKKysJMHg4MmU3NzBlZDJiZmJkMjdkVUxMLCAweDRjMDViMmVjZTk5NmY1YTVVTEwsIDB4Y2Q0MGE5YzJiMDkwMDE1MFVMTCwgMHg1ODk1MzE5MjEzZDliZjY0VUxMLAorKwkweGU3Y2M1ZDcwM2ZlYTJlMDhVTEwsIDB4YjUwYzQ5MTI1OGUyMTg4Y1VMTCwgMHhjY2UzMGJhYTQ4MjA1YmYwVUxMLCAweDUzN2M2NTljY2ZhMzJkNjJVTEwsCisrCTB4MzdiNjYyM2E5OGNmYzA4OFVMTCwgMHhmZTliZWQxZmE0ZDZhY2E0VUxMLCAweDA0ZDI5YjhlNTZhOGQxYjBVTEwsIDB4NzI1ZjcxYzQwYjUxOTU3NVVMTCwKKysJMHgyOGM3Zjg5Y2QwMzM5Y2U2VUxMLCAweDgzNjdiMTQ0NjlkZGMxOGJVTEwsIDB4ODgzYWRhODNhNmExNjUyY1VMTCwgMHg1ODVmMTk3NDAzNGQ2YzE3VUxMLAorKwkweDg5Y2ZiMjY2ZjFiMTkxODhVTEwsIDB4ZTYzYjQ4NjNlN2MzNTIxN1VMTCwgMHhkODhjOWRhNmI0YzA1MjZhVUxMLCAweDNlMDM1YzlkZjA5NTQ2MzVVTEwsCisrCTB4ZGQ5ZDU0MTJmYjQ1ZGU5ZFVMTCwgMHhkZDY4NDUzMmU0Y2ZmNDBkVUxMLCAweDRiNWM5OTliMTUxZDY3MWNVTEwsIDB4MmQ4YzJjYzgxMWU3ZjY5MFVMTCwKKysJMHg3ZjU0YmUxZDkwMDU1ZDQwVUxMLCAweGE0NjRjNWRmNDY0YWFmNDBVTEwsIDB4MzM5Nzk2MjRmMGU5MTdiZVVMTCwgMHgyYzAxOGRjNTI3MzU2YjMwVUxMLAorKwkweGE1NDE1MDI0ZTMzMGIzZDRVTEwsIDB4NzNmZjNkOTY2OTE2NTJkM1VMTCwgMHg5NGVjNDJjNGVmOWI1OWYxVUxMLCAweDA3NDcyMDE2MThkMDhlNWFVTEwsCisrCTB4NGQ2Y2E0OGFjYTQxMWM1M1VMTCwgMHg2NjQxNWYyZmNmYTY2MTE5VUxMLCAweDljNGRkNDAwNTFlMjI3ZmZVTEwsIDB4NTk4MTBiYzA5YTAyZjdlYlVMTCwKKysJMHgyYTdlYjE3MWIzZGMxMDFkVUxMLCAweDQ0MWM1YWI5OWZmZWY2OGVVTEwsIDB4MzIwMjVjOWI5M2IzNTllYVVMTCwgMHg1ZThjZTBhNzFlOWQxMTJmVUxMLAorKwkweGJmY2NjYjkyNDI5NTAzZmRVTEwsIDB4ZDI3MWJhNzUyZjA5NWQ1NVVMTCwgMHgzNDVlYWQ1ZTk3MmQwOTFlVUxMLCAweDE4YzhkZjExYTgzMTAzYmFVTEwsCisrCTB4OTBjZDk0OWE5YWVkMGY0Y1VMTCwgMHhjNWQxZjRjYjY2NjBlMzdlVUxMLCAweGI4Y2FjNTJkNTZjNTJlMGJVTEwsIDB4NmU0MmU0MDBjNTgwOGUwZFVMTCwKKysJMHhhM2I0Njk2NmVlYWVmZDIzVUxMLCAweDBjNGYxZjBiZTM5ZWNkY2FVTEwsIDB4MTg5ZGM4YzlkNjgzYTUxZFVMTCwgMHg1MWYyN2YwNTRjMDkzNTFiVUxMLAorKwkweDRjNDg3Y2NkMmEzMjA2ODJVTEwsIDB4NTg3ZWE5NWJiM2RmMWM5NlVMTCwgMHhjOGNjZjc5ZTU1NWNiOGU4VUxMLCAweDU0N2RjODI5YTIwNmQ3M2RVTEwsCisrCTB4YjgyMmE2Y2Q4MGMzOWIwNlVMTCwgMHhlOTZkNTQ3MzIwMDBkNGM2VUxMLCAweDI4NTM1YjZmOTE0NjNiNGRVTEwsIDB4MjI4ZjQ2NjBlMjQ4NmUxZFVMTCwKKysJMHg5ODc5OTUzOGRlOGQzYWJmVUxMLCAweDhjZDgzMzAwNDVlYmNhNmVVTEwsIDB4Nzk5NTJhMDA4MjIxZTczOFVMTCwgMHg0MzIyZTFhNzUzNWNkMmJiVUxMLAorKwkweGIxMTRjMTE4MTlkMTgwMWNVTEwsIDB4MjAxNmU0ZDg0ZjNmNWVjN1VMTCwgMHhkZDBlMmRmNDA5MjYwZjRjVUxMLCAweDVlYzM2MmMwYWU1ZjcyNjZVTEwsCisrCTB4YzA0NjJiMThiOGIyYjRlZVVMTCwgMHg3Y2M4ZDk1MDI3NGQxYWZiVUxMLCAweGYyNWY3MTA1NDM2YjAyZDJVTEwsIDB4NDNiYmY4ZGNiZmY5Y2NkM1VMTCwKKysJMHhiNmFkMTc2N2EwMzllOWRmVUxMLCAweGIwNzE0ZGE4ZjY5ZDM1ODNVTEwsIDB4NWU1NWZhMThiNDI5MzFmNVVMTCwgMHg0ZWQ1NTU4ZjMzYzYwOTYxVUxMLAorKwkweDFmZTM3OTAxYzY0N2E1ZGRVTEwsIDB4NTkzZGRmMWY4MDgxZDM1N1VMTCwgMHgwMjQ5YTRmZDgxM2ZkN2E2VUxMLCAweDY5YWNjYTI3NGU5Y2FmNjFVTEwsCisrCTB4MDQ3YmEzZWEzMzA3MjFjOVVMTCwgMHg4MzQyM2ZjMjBlN2UxZWEwVUxMLCAweDFkZjRjMGFmMDEzMTRhNjBVTEwsIDB4MDlhNjJkYWI4OTI4OTUyN1VMTCwKKysJMHhhNWIzMjVhNDljYzZjYjAwVUxMLCAweGU5NGI1ZGM2NTRiNTZjYjZVTEwsIDB4M2JlMjg3NzlhZGM5OTRhMFVMTCwgMHg0Mjk2ZThmOGJhM2E0YWFkVUxMLAorKwkweDMyODY4OTc2MWU0NTFlYWJVTEwsIDB4MmU0ZDU5OGJmZjU5NTk0YVVMTCwgMHg0OWI5Njg1M2Q3YTcwODRhVUxMLCAweDQ5ODBhMzE5NjAxNDIwYThVTEwsCisrCTB4OTU2NWI5ZTEyZjU1MmM0MlVMTCwgMHg4YTUzMThkYjcxMDBmZTk2VUxMLCAweDA1YzkwYjRkNDNhZGQwZDdVTEwsIDB4NTM4YjRjZDY2YTVkNGVkYVVMTCwKKysJMHhmNGU5NGZjM2U4OWYwMzlmVUxMLCAweDU5MmM5YWYyNmY2MTgwNDVVTEwsIDB4MDhhMzZlYjVmZDRiOTU1MFVMTCwgMHgyNWZmZmFmNmMyZWQxNDE5VUxMLAorKwkweDM0NDM0NDU5Y2M3OWQzNTRVTEwsIDB4ZWVlY2JmYjRiMWQ1NDc2YlVMTCwgMHhkZGViMzRhMDYxNjE1ZDk5VUxMLCAweDUxMjljZWNjZWI2NGI3NzNVTEwsCisrCTB4ZWU0MzIxNTg5NDk5MzUyMFVMTCwgMHg3NzJmOWM3Y2YxNGMwYjNiVUxMLCAweGQyZTJmY2UzMDZiZWRhZDVVTEwsIDB4NzE1ZjQyYjU0NmYwNmE5N1VMTCwKKysJMHg0MzRlY2RjZWRhNWI1ZjFhVUxMLCAweDBkYTE3MTE1YTQ5NzQxYTlVTEwsIDB4NjgwYmQ3N2M3M2VkYWQyZVVMTCwgMHg0ODdjMDIzNTRlZGQ5MDQxVUxMLAorKwkweGI4ZWZlZmYzYTcwZWQ5YzRVTEwsIDB4NTZhMzJhYTNlODU3ZTMwMlVMTCwgMHhkZjNhNjhiZDQ4YTJhNWEwVUxMLCAweDA3ZjY1MGI3MzE3NmM0NDRVTEwsCisrCTB4ZTM4YjliMTYyNmUwY2NiMVVMTCwgMHg3OWUwNTNjMThiMDlmYjM2VUxMLCAweDU2ZDkwMzE5YzlmOTQ5NjRVTEwsIDB4MWNhOTQxZTdhYzlmZjVjNFVMTCwKKysJMHg0OWM0ZGYyOTE2MmZhMGJiVUxMLCAweDg0ODhjZjMyODJiMzMzMDVVTEwsIDB4OTVkZmRhMTRjYWJiNDM3ZFVMTCwgMHgzMzkxZjc4MjY0ZDVhZDg2VUxMLAorKwkweDcyOWFlMDZhZTJiNTA5NWRVTEwsIDB4ZDU4YTU4ZDczMjU5YTk0NlVMTCwgMHhlOTgzNDI2MmQxMzkyMWVkVUxMLCAweDI3ZmVkYWZhYTU0YmI1OTJVTEwsCisrCTB4YTk5ZGM1YjgyOWFkNDhiYlVMTCwgMHg1ZjAyNTc0MjQ5OWVlMjYwVUxMLCAweDgwMmM4ZWNkNWQ3NTEzZmRVTEwsIDB4NzhjZWIzZWYzZjZkZDkzOFVMTCwKKysJMHhjMzQyZjQ0ZjhhMTM1ZDk0VUxMLCAweDdiOWVkYjQ0ODI4Y2RkYTNVTEwsIDB4OTQzNmQxMWEwNTM3Y2ZlN1VMTCwgMHg1MDY0YjE2NGVjMWFiNGM4VUxMLAorKwkweDcwMjBlY2NmZDM3ZWIyZmNVTEwsIDB4MWYzMWVhM2VkOTBkMjVmY1VMTCwgMHgxYjkzMGQ3YmRmYTFiYjM0VUxMLCAweDUzNDQ0NjdhNDgxMTMwNDRVTEwsCisrCTB4NzAwNzMxNzBmMjVlNmRmYlVMTCwgMHhlMzg1ZGMxYTUwMTE0Y2M4VUxMLCAweDIzNDg2OThhYzhmYzRmMDBVTEwsIDB4MmE3N2E1NTI4NGRkNDBkOFVMTCwKKysJMHhmZTA2YWZlMGM5OGM2Y2U0VUxMLCAweGMyMzVkZjk2ZGRkZmQ2ZTRVTEwsIDB4MTQyOGQwMWUzM2JmMWVkM1VMTCwgMHg3ODU3NjhlYzkzMDBiZGFmVUxMLAorKwkweDk3MDJlNTdhOTFkZWI2M2JVTEwsIDB4NjFiZGI4YmZlNWNlOGI4MFVMTCwgMHg2NDViNDI2ZjNkMWQ1OGFjVUxMLCAweDQ4MDRhODIyMjdhNTU3YmNVTEwsCisrCTB4OGU1NzA0OGFiNDRkMjYwMVVMTCwgMHg2OGQ2NTAxYTRiM2E2OTM1VUxMLCAweGMzOWM5ZWMzZjllMWMyOTNVTEwsIDB4NDE3MmYyNTdkNGRlNjNlMlVMTCwKKysJMHhkMzY4YjQ1MDMzMGM2NDAxVUxMLCAweDA0MGQzMDE3NDE4ZjIzOTFVTEwsIDB4MmMzNGJiNjA5MGI3ZDkwZFVMTCwgMHgxNmY2NDkyMjhmZGZkNTFmVUxMLAorKwkweGJlYTY4MThlMmI5MjhlZjVVTEwsIDB4ZTI4Y2NmOTFjZGMxMWU3MlVMTCwgMHg1OTRhYWE2OGU3N2EzNmNkVUxMLCAweDMxMzAzNDgwNmM3ZmZkMGZVTEwsCisrCTB4OGE5ZDI3YWMyMjQ5YmQ2NVVMTCwgMHgxOWEzYjQ2NDAxOGU5NTEyVUxMLCAweGMyNmNjZmYzNTJiMzdlYzdVTEwsIDB4MDU2ZjY4MzQxZDc5N2IyMVVMTCwKKysJMHg1ZTc5ZDY3NTdlZmQyMzI3VUxMLCAweGZhYmRiY2I2NTUzYWZlMTVVTEwsIDB4ZDNlNzIyMmM2ZWFmNWE2MFVMTCwgMHg3MDQ2Yzc2ZDRkYWU3NDNiVUxMLAorKwkweDY2MGJlODcyYjE4ZDRhNTVVTEwsIDB4MTk5OTI1MTg1NzRlMTQ5NlVMTCwgMHhjMTAzMDUzYTMwMmJkY2JiVUxMLCAweDNlZDhlOTgwMGIyMThlOGVVTEwsCisrCTB4N2IwYjkyMzlmYTc1ZTAzZVVMTCwgMHhlZmU5ZmI2ODQ2MzNjMDgzVUxMLCAweDk4YTM1ZmJlMzkxYTc3OTNVTEwsIDB4NjA2NTUxMGZlMmQwZmUzNFVMTCwKKysJMHg1NWNiNjY4NTQ4YWJhZDBjVUxMLCAweGI0NTg0NTQ4ZGE4N2U1MjdVTEwsIDB4MmM0M2VjZWEwMTA3YzFkZFVMTCwgMHg1MjYwMjg4MDkzNzJkZTM1VUxMLAorKwkweDM0MTVjNTZhZjkyMTNiMWZVTEwsIDB4NWJlZTFhNGQwMTdlOThkYlVMTCwgMHgxM2Y2YjEwNWI1Y2Y3MDliVUxMLCAweDVmZjIwZTM0ODJiMjlhYjZVTEwsCisrCTB4MGFhMjljNzVjYzJlNmM5MFVMTCwgMHhmYzdkNzNjYTNhNzBlMjA2VUxMLCAweDg5OWZjMzhmYzRiNWM1MTVVTEwsIDB4MjUwMzg2YjEyNGZmYzIwN1VMTCwKKysJMHg1NGVhMjhkNWFlM2QyYjU2VUxMLCAweDk5MTMxNDlkZDZkZTYwY2VVTEwsIDB4MTY2OTRmYzU4ZjA2ZDZjMVVMTCwgMHg0NmIyMzk3NWViMDE4ZmM3VUxMLAorKwkweDQ3MGE2YTBmYjRiN2I0ZTJVTEwsIDB4NWQ5MjQ3NWE4ZjcyNTNkZVVMTCwgMHhhYmVlZTViNTJmYmQzYWRiVUxMLCAweDdmYTIwODAxYTA4MDY5NjhVTEwsCisrCTB4NzZmM2ZhZjE5Zjc3MTRkMlVMTCwgMHhiM2U4NDBjMTJmNDY2MGMzVUxMLCAweDBmYjRjZDhkZjIxMjc0NGVVTEwsIDB4NGIwNjVhMjUxZDNhMmRkMlVMTCwKKysJMHg1Y2ViZGUzODNkNzdjZDRhVUxMLCAweDZhZGYzOWRmODgyYzljYjFVTEwsIDB4YTJkZDI0MmViMDlhZjc1OVVMTCwgMHgzMTQ3YzBlNTBlNWY2NDIyVUxMLAorKwkweDE2NGNhNTEwMWQxMzUwZGJVTEwsIDB4ZjhkMTM0NzljMzNmYzk2MlVMTCwgMHhlNjQwY2U0ZDEzZTVkYTA4VUxMLCAweDRiZGVlMGM0NTA2MWY4YmFVTEwsCisrCTB4ZDdjNDZkYzFhNGVkYjFjOVVMTCwgMHg1NTE0ZDdiNjQzN2ZkOThhVUxMLCAweDU4OTQyZjZiYjJhMWMwMGJVTEwsIDB4MmRmZmIyYWIxZDcwNzEwZVVMTCwKKysJMHhjY2RmY2YyZmMxOGI2ZDY4VUxMLCAweGE4ZWJjYmE4Yjc4MDYxNjdVTEwsIDB4OTgwNjk3Zjk1ZTI5MzdlM1VMTCwgMHgwMmZiYmExY2QwMTI2ZThjVUxMCisrfTsKKyAKKy1zdGF0aWMgdm9pZCBjdXJ2ZTI1NTE5X2JtaTJfYmFzZSh1OCBzZXNzaW9uX2tleVtDVVJWRTI1NTE5X0tFWV9TSVpFXSwKKy0JCQkJIGNvbnN0IHU4IHByaXZhdGVfa2V5W0NVUlZFMjU1MTlfS0VZX1NJWkVdKQorK3N0YXRpYyB2b2lkIGN1cnZlMjU1MTlfZXZlcjY0X2Jhc2UodTggKm91dCwgY29uc3QgdTggKnByaXYpCisgeworLQlzdHJ1Y3QgeworLQkJdTY0IGJ1ZmZlcls0ICogTlVNX1dPUkRTX0VMVEZQMjU1MTldOworLQkJdTY0IGNvb3JkaW5hdGVzWzQgKiBOVU1fV09SRFNfRUxURlAyNTUxOV07CistCQl1NjQgd29ya3NwYWNlWzQgKiBOVU1fV09SRFNfRUxURlAyNTUxOV07CistCQl1OCBwcml2YXRlW0NVUlZFMjU1MTlfS0VZX1NJWkVdOworLQl9IF9fYWxpZ25lZCgzMikgbTsKKy0KKy0JY29uc3QgaW50IGl0ZVs0XSA9IHsgNjQsIDY0LCA2NCwgNjMgfTsKKy0JY29uc3QgaW50IHEgPSAzOworIAl1NjQgc3dhcCA9IDE7CistCistCWludCBpID0gMCwgaiA9IDAsIGsgPSAwOworLQl1NjQgKmNvbnN0IGtleSA9ICh1NjQgKiltLnByaXZhdGU7CistCXU2NCAqY29uc3QgVXIxID0gbS5jb29yZGluYXRlcyArIDA7CistCXU2NCAqY29uc3QgWnIxID0gbS5jb29yZGluYXRlcyArIDQ7CistCXU2NCAqY29uc3QgVXIyID0gbS5jb29yZGluYXRlcyArIDg7CistCXU2NCAqY29uc3QgWnIyID0gbS5jb29yZGluYXRlcyArIDEyOworLQorLQl1NjQgKmNvbnN0IFVacjEgPSBtLmNvb3JkaW5hdGVzICsgMDsKKy0JdTY0ICpjb25zdCBaVXIyID0gbS5jb29yZGluYXRlcyArIDg7CistCistCXU2NCAqY29uc3QgQSA9IG0ud29ya3NwYWNlICsgMDsKKy0JdTY0ICpjb25zdCBCID0gbS53b3Jrc3BhY2UgKyA0OworLQl1NjQgKmNvbnN0IEMgPSBtLndvcmtzcGFjZSArIDg7CistCXU2NCAqY29uc3QgRCA9IG0ud29ya3NwYWNlICsgMTI7CistCistCXU2NCAqY29uc3QgQUIgPSBtLndvcmtzcGFjZSArIDA7CistCXU2NCAqY29uc3QgQ0QgPSBtLndvcmtzcGFjZSArIDg7CistCistCWNvbnN0IHU2NCAqY29uc3QgUCA9IHRhYmxlX2xhZGRlcl84azsKKy0KKy0JbWVtY3B5KG0ucHJpdmF0ZSwgcHJpdmF0ZV9rZXksIHNpemVvZihtLnByaXZhdGUpKTsKKy0KKy0JY3VydmUyNTUxOV9jbGFtcF9zZWNyZXQobS5wcml2YXRlKTsKKy0KKy0Jc2V0emVyb19lbHRmcDI1NTE5XzF3KFVyMSk7CistCXNldHplcm9fZWx0ZnAyNTUxOV8xdyhacjEpOworLQlzZXR6ZXJvX2VsdGZwMjU1MTlfMXcoWnIyKTsKKy0JVXIxWzBdID0gMTsKKy0JWnIxWzBdID0gMTsKKy0JWnIyWzBdID0gMTsKKy0KKy0JLyogRy1TICovCistCVVyMlszXSA9IDB4MWVhZWNkZWVlMjdjYWIzNFVMOworLQlVcjJbMl0gPSAweGFkYzdhMGI5MjM1ZDQ4ZTJVTDsKKy0JVXIyWzFdID0gMHhiYmYwOTVhZTE0YjJlZGY4VUw7CistCVVyMlswXSA9IDB4N2U5NGUxZmVjODJmYWFiZFVMOworLQorLQkvKiBtYWluLWxvb3AgKi8KKy0JaiA9IHE7CistCWZvciAoaSA9IDA7IGkgPCBOVU1fV09SRFNfRUxURlAyNTUxOTsgKytpKSB7CistCQl3aGlsZSAoaiA8IGl0ZVtpXSkgeworLQkJCXU2NCBiaXQgPSAoa2V5W2ldID4+IGopICYgMHgxOworLQkJCWsgPSAoNjQgKiBpICsgaiAtIHEpOworKwlpbnQgaSwgaiwgazsKKysJdTY0IHRtcFsxNiArIDMyICsgNF07CisrCXU2NCAqeDEgPSAmdG1wWzBdOworKwl1NjQgKnoxID0gJnRtcFs0XTsKKysJdTY0ICp4MiA9ICZ0bXBbOF07CisrCXU2NCAqejIgPSAmdG1wWzEyXTsKKysJdTY0ICp4ejEgPSAmdG1wWzBdOworKwl1NjQgKnh6MiA9ICZ0bXBbOF07CisrCXU2NCAqYSA9ICZ0bXBbMCArIDE2XTsKKysJdTY0ICpiID0gJnRtcFs0ICsgMTZdOworKwl1NjQgKmMgPSAmdG1wWzggKyAxNl07CisrCXU2NCAqYWIgPSAmdG1wWzAgKyAxNl07CisrCXU2NCAqYWJjZCA9ICZ0bXBbMCArIDE2XTsKKysJdTY0ICplZiA9ICZ0bXBbMTYgKyAxNl07CisrCXU2NCAqZWZnaCA9ICZ0bXBbMTYgKyAxNl07CisrCXU2NCAqa2V5ID0gJnRtcFswICsgMTYgKyAzMl07CisrCisrCW1lbWNweShrZXksIHByaXYsIDMyKTsKKysJKCh1OCAqKWtleSlbMF0gJj0gMjQ4OworKwkoKHU4ICopa2V5KVszMV0gPSAoKCh1OCAqKWtleSlbMzFdICYgMTI3KSB8IDY0OworKworKwl4MVswXSA9IDEsIHgxWzFdID0geDFbMl0gPSB4MVszXSA9IDA7CisrCXoxWzBdID0gMSwgejFbMV0gPSB6MVsyXSA9IHoxWzNdID0gMDsKKysJejJbMF0gPSAxLCB6MlsxXSA9IHoyWzJdID0gejJbM10gPSAwOworKwltZW1jcHkoeDIsIHBfbWludXNfcywgc2l6ZW9mKHBfbWludXNfcykpOworKworKwlqID0gMzsKKysJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkgeworKwkJd2hpbGUgKGogPCAoY29uc3QgaW50W10peyA2NCwgNjQsIDY0LCA2MyB9W2ldKSB7CisrCQkJdTY0IGJpdCA9IChrZXlbaV0gPj4gaikgJiAxOworKwkJCWsgPSAoNjQgKiBpICsgaiAtIDMpOworIAkJCXN3YXAgPSBzd2FwIF4gYml0OworLQkJCWNzd2FwKHN3YXAsIFVyMSwgVXIyKTsKKy0JCQljc3dhcChzd2FwLCBacjEsIFpyMik7CisrCQkJY3N3YXAyKHN3YXAsIHh6MSwgeHoyKTsKKyAJCQlzd2FwID0gYml0OworLQkJCS8qIEFkZGl0aW9uICovCistCQkJc3ViX2VsdGZwMjU1MTlfMXcoQiwgVXIxLCBacjEpOwkJLyogQiA9IFVyMS1acjEgKi8KKy0JCQlhZGRfZWx0ZnAyNTUxOV8xd19ibWkyKEEsIFVyMSwgWnIxKTsJLyogQSA9IFVyMStacjEgKi8KKy0JCQltdWxfZWx0ZnAyNTUxOV8xd19ibWkyKEMsICZQWzQgKiBrXSwgQik7LyogQyA9IE0wLUIgKi8KKy0JCQlzdWJfZWx0ZnAyNTUxOV8xdyhCLCBBLCBDKTsJCS8qIEIgPSAoVXIxK1pyMSkgLSBNKihVcjEtWnIxKSAqLworLQkJCWFkZF9lbHRmcDI1NTE5XzF3X2JtaTIoQSwgQSwgQyk7CS8qIEEgPSAoVXIxK1pyMSkgKyBNKihVcjEtWnIxKSAqLworLQkJCXNxcl9lbHRmcDI1NTE5XzJ3X2JtaTIoQUIpOwkJLyogQSA9IEFeMiAgICAgIHwgIEIgPSBCXjIgKi8KKy0JCQltdWxfZWx0ZnAyNTUxOV8yd19ibWkyKFVacjEsIFpVcjIsIEFCKTsJLyogVXIxID0gWnIyKkEgIHwgIFpyMSA9IFVyMipCICovCisrCQkJZnN1YihiLCB4MSwgejEpOworKwkJCWZhZGQoYSwgeDEsIHoxKTsKKysJCQlmbXVsKGMsICZ0YWJsZV9sYWRkZXJbNCAqIGtdLCBiLCBlZik7CisrCQkJZnN1YihiLCBhLCBjKTsKKysJCQlmYWRkKGEsIGEsIGMpOworKwkJCWZzcXIyKGFiLCBhYiwgZWZnaCk7CisrCQkJZm11bDIoeHoxLCB4ejIsIGFiLCBlZmdoKTsKKyAJCQkrK2o7CisgCQl9CisgCQlqID0gMDsKKyAJfQorIAorLQkvKiBEb3VibGluZyAqLworLQlmb3IgKGkgPSAwOyBpIDwgcTsgKytpKSB7CistCQlhZGRfZWx0ZnAyNTUxOV8xd19ibWkyKEEsIFVyMSwgWnIxKTsJLyogIEEgPSBVcjErWnIxICovCistCQlzdWJfZWx0ZnAyNTUxOV8xdyhCLCBVcjEsIFpyMSk7CQkvKiAgQiA9IFVyMS1acjEgKi8KKy0JCXNxcl9lbHRmcDI1NTE5XzJ3X2JtaTIoQUIpOwkJLyogIEEgPSBBKioyICAgICBCID0gQioqMiAqLworLQkJY29weV9lbHRmcDI1NTE5XzF3KEMsIEIpOwkJLyogIEMgPSBCICovCistCQlzdWJfZWx0ZnAyNTUxOV8xdyhCLCBBLCBCKTsJCS8qICBCID0gQS1CICovCistCQltdWxfYTI0X2VsdGZwMjU1MTlfMXcoRCwgQik7CQkvKiAgRCA9IG15X2EyNCpCICovCistCQlhZGRfZWx0ZnAyNTUxOV8xd19ibWkyKEQsIEQsIEMpOwkvKiAgRCA9IEQrQyAqLworLQkJbXVsX2VsdGZwMjU1MTlfMndfYm1pMihVWnIxLCBBQiwgQ0QpOwkvKiAgVXIxID0gQSpCICAgWnIxID0gWnIxKkEgKi8KKy0JfQorLQorLQkvKiBDb252ZXJ0IHRvIGFmZmluZSBjb29yZGluYXRlcyAqLworLQlpbnZfZWx0ZnAyNTUxOV8xd19ibWkyKEEsIFpyMSk7CistCW11bF9lbHRmcDI1NTE5XzF3X2JtaTIoKHU2NCAqKXNlc3Npb25fa2V5LCBVcjEsIEEpOworLQlmcmVkX2VsdGZwMjU1MTlfMXcoKHU2NCAqKXNlc3Npb25fa2V5KTsKKysJcG9pbnRfZG91YmxlKHh6MSwgYWJjZCwgZWZnaCk7CisrCXBvaW50X2RvdWJsZSh4ejEsIGFiY2QsIGVmZ2gpOworKwlwb2ludF9kb3VibGUoeHoxLCBhYmNkLCBlZmdoKTsKKysJZW5jb2RlX3BvaW50KG91dCwgeHoxKTsKKyAKKy0JbWVtemVyb19leHBsaWNpdCgmbSwgc2l6ZW9mKG0pKTsKKysJbWVtemVyb19leHBsaWNpdCh0bXAsIHNpemVvZih0bXApKTsKKyB9CisgCisrc3RhdGljIF9fcm9fYWZ0ZXJfaW5pdCBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShjdXJ2ZTI1NTE5X3VzZV9ibWkyX2FkeCk7CisrCisgdm9pZCBjdXJ2ZTI1NTE5X2FyY2godTggbXlwdWJsaWNbQ1VSVkUyNTUxOV9LRVlfU0laRV0sCisgCQkgICAgIGNvbnN0IHU4IHNlY3JldFtDVVJWRTI1NTE5X0tFWV9TSVpFXSwKKyAJCSAgICAgY29uc3QgdTggYmFzZXBvaW50W0NVUlZFMjU1MTlfS0VZX1NJWkVdKQorIHsKKy0JaWYgKHN0YXRpY19icmFuY2hfbGlrZWx5KCZjdXJ2ZTI1NTE5X3VzZV9hZHgpKQorLQkJY3VydmUyNTUxOV9hZHgobXlwdWJsaWMsIHNlY3JldCwgYmFzZXBvaW50KTsKKy0JZWxzZSBpZiAoc3RhdGljX2JyYW5jaF9saWtlbHkoJmN1cnZlMjU1MTlfdXNlX2JtaTIpKQorLQkJY3VydmUyNTUxOV9ibWkyKG15cHVibGljLCBzZWNyZXQsIGJhc2Vwb2ludCk7CisrCWlmIChzdGF0aWNfYnJhbmNoX2xpa2VseSgmY3VydmUyNTUxOV91c2VfYm1pMl9hZHgpKQorKwkJY3VydmUyNTUxOV9ldmVyNjQobXlwdWJsaWMsIHNlY3JldCwgYmFzZXBvaW50KTsKKyAJZWxzZQorIAkJY3VydmUyNTUxOV9nZW5lcmljKG15cHVibGljLCBzZWNyZXQsIGJhc2Vwb2ludCk7CisgfQorQEAgLTIzNTUsMTAgKzEzOTUsOCBAQCBFWFBPUlRfU1lNQk9MKGN1cnZlMjU1MTlfYXJjaCk7Cisgdm9pZCBjdXJ2ZTI1NTE5X2Jhc2VfYXJjaCh1OCBwdWJbQ1VSVkUyNTUxOV9LRVlfU0laRV0sCisgCQkJICBjb25zdCB1OCBzZWNyZXRbQ1VSVkUyNTUxOV9LRVlfU0laRV0pCisgeworLQlpZiAoc3RhdGljX2JyYW5jaF9saWtlbHkoJmN1cnZlMjU1MTlfdXNlX2FkeCkpCistCQljdXJ2ZTI1NTE5X2FkeF9iYXNlKHB1Yiwgc2VjcmV0KTsKKy0JZWxzZSBpZiAoc3RhdGljX2JyYW5jaF9saWtlbHkoJmN1cnZlMjU1MTlfdXNlX2JtaTIpKQorLQkJY3VydmUyNTUxOV9ibWkyX2Jhc2UocHViLCBzZWNyZXQpOworKwlpZiAoc3RhdGljX2JyYW5jaF9saWtlbHkoJmN1cnZlMjU1MTlfdXNlX2JtaTJfYWR4KSkKKysJCWN1cnZlMjU1MTlfZXZlcjY0X2Jhc2UocHViLCBzZWNyZXQpOworIAllbHNlCisgCQljdXJ2ZTI1NTE5X2dlbmVyaWMocHViLCBzZWNyZXQsIGN1cnZlMjU1MTlfYmFzZV9wb2ludCk7CisgfQorQEAgLTI0NDksMTIgKzE0ODcsMTEgQEAgc3RhdGljIHN0cnVjdCBrcHBfYWxnIGN1cnZlMjU1MTlfYWxnID0geworIAkubWF4X3NpemUJCT0gY3VydmUyNTUxOV9tYXhfc2l6ZSwKKyB9OworIAorKworIHN0YXRpYyBpbnQgX19pbml0IGN1cnZlMjU1MTlfbW9kX2luaXQodm9pZCkKKyB7CistCWlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQk1JMikpCistCQlzdGF0aWNfYnJhbmNoX2VuYWJsZSgmY3VydmUyNTUxOV91c2VfYm1pMik7CistCWVsc2UgaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BRFgpKQorLQkJc3RhdGljX2JyYW5jaF9lbmFibGUoJmN1cnZlMjU1MTlfdXNlX2FkeCk7CisrCWlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQk1JMikgJiYgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0FEWCkpCisrCQlzdGF0aWNfYnJhbmNoX2VuYWJsZSgmY3VydmUyNTUxOV91c2VfYm1pMl9hZHgpOworIAllbHNlCisgCQlyZXR1cm4gMDsKKyAJcmV0dXJuIElTX1JFQUNIQUJMRShDT05GSUdfQ1JZUFRPX0tQUCkgPworQEAgLTI0NzQsMyArMTUxMSw0IEBAIG1vZHVsZV9leGl0KGN1cnZlMjU1MTlfbW9kX2V4aXQpOworIE1PRFVMRV9BTElBU19DUllQVE8oImN1cnZlMjU1MTkiKTsKKyBNT0RVTEVfQUxJQVNfQ1JZUFRPKCJjdXJ2ZTI1NTE5LXg4NiIpOworIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKKytNT0RVTEVfQVVUSE9SKCJKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4iKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNTUtY3J5cHRvLXg4Ni1jdXJ2ZTI1NTE5LWxlYXZlLXIxMi1hcy1zcGFyZS1yZWdpc3Rlci5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNTUtY3J5cHRvLXg4Ni1jdXJ2ZTI1NTE5LWxlYXZlLXIxMi1hcy1zcGFyZS1yZWdpc3Rlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWIxMWUwCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA1NS1jcnlwdG8teDg2LWN1cnZlMjU1MTktbGVhdmUtcjEyLWFzLXNwYXJlLXJlZ2lzdGVyLnBhdGNoCkBAIC0wLDAgKzEsMzc2IEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogU3VuLCAxIE1hciAyMDIwIDE2OjA2OjU2ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyeXB0bzogeDg2L2N1cnZlMjU1MTkgLSBsZWF2ZSByMTIgYXMgc3BhcmUgcmVnaXN0ZXIKKworY29tbWl0IGRjN2ZjM2E1M2FlMTU4MjYzMTk2YjE4OTJiNjcyYWVkZjY3Nzk2YzUgdXBzdHJlYW0uCisKK1RoaXMgdXBkYXRlcyB0byB0aGUgbmV3ZXIgcmVnaXN0ZXIgc2VsZWN0aW9uIHByb3ZlZCBieSBIQUNMKiwgd2hpY2gKK2xlYWRzIHRvIGEgbW9yZSBjb21wYWN0IGluc3RydWN0aW9uIGVuY29kaW5nLCBhbmQgc2F2ZXMgYXJvdW5kIDEwMAorY3ljbGVzLgorCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgYXJjaC94ODYvY3J5cHRvL2N1cnZlMjU1MTkteDg2XzY0LmMgfCAxMTAgKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA1NSBpbnNlcnRpb25zKCspLCA1NSBkZWxldGlvbnMoLSkKKworLS0tIGEvYXJjaC94ODYvY3J5cHRvL2N1cnZlMjU1MTkteDg2XzY0LmMKKysrKyBiL2FyY2gveDg2L2NyeXB0by9jdXJ2ZTI1NTE5LXg4Nl82NC5jCitAQCAtMTY3LDI4ICsxNjcsMjggQEAgc3RhdGljIGlubGluZSB2b2lkIGZtdWwodTY0ICpvdXQsIGNvbnN0CisgCQkiICBtb3ZxIDAoJTEpLCAlJXJkeDsiCisgCQkiICBtdWx4cSAwKCUzKSwgJSVyOCwgJSVyOTsiICAgICAgICIgIHhvciAlJXIxMCwgJSVyMTA7IiAgICAgIiAgbW92cSAlJXI4LCAwKCUwKTsiCisgCQkiICBtdWx4cSA4KCUzKSwgJSVyMTAsICUlcjExOyIgICAgICIgIGFkb3ggJSVyOSwgJSVyMTA7IiAgICAgIiAgbW92cSAlJXIxMCwgOCglMCk7IgorLQkJIiAgbXVseHEgMTYoJTMpLCAlJXIxMiwgJSVyMTM7IiAgICAiICBhZG94ICUlcjExLCAlJXIxMjsiCisrCQkiICBtdWx4cSAxNiglMyksICUlcmJ4LCAlJXIxMzsiICAgICIgIGFkb3ggJSVyMTEsICUlcmJ4OyIKKyAJCSIgIG11bHhxIDI0KCUzKSwgJSVyMTQsICUlcmR4OyIgICAgIiAgYWRveCAlJXIxMywgJSVyMTQ7IiAgICAiICBtb3YgJDAsICUlcmF4OyIKKyAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgYWRveCAlJXJkeCwgJSVyYXg7IgorIAkJLyogQ29tcHV0ZSBzcmMxWzFdICogc3JjMiAqLworIAkJIiAgbW92cSA4KCUxKSwgJSVyZHg7IgorIAkJIiAgbXVseHEgMCglMyksICUlcjgsICUlcjk7IiAgICAgICAiICB4b3IgJSVyMTAsICUlcjEwOyIgICAgICIgIGFkY3hxIDgoJTApLCAlJXI4OyIgICAgIiAgbW92cSAlJXI4LCA4KCUwKTsiCistCQkiICBtdWx4cSA4KCUzKSwgJSVyMTAsICUlcjExOyIgICAgICIgIGFkb3ggJSVyOSwgJSVyMTA7IiAgICAgIiAgYWRjeCAlJXIxMiwgJSVyMTA7IiAgICAiICBtb3ZxICUlcjEwLCAxNiglMCk7IgorLQkJIiAgbXVseHEgMTYoJTMpLCAlJXIxMiwgJSVyMTM7IiAgICAiICBhZG94ICUlcjExLCAlJXIxMjsiICAgICIgIGFkY3ggJSVyMTQsICUlcjEyOyIgICAgIiAgbW92ICQwLCAlJXI4OyIKKysJCSIgIG11bHhxIDgoJTMpLCAlJXIxMCwgJSVyMTE7IiAgICAgIiAgYWRveCAlJXI5LCAlJXIxMDsiICAgICAiICBhZGN4ICUlcmJ4LCAlJXIxMDsiICAgICIgIG1vdnEgJSVyMTAsIDE2KCUwKTsiCisrCQkiICBtdWx4cSAxNiglMyksICUlcmJ4LCAlJXIxMzsiICAgICIgIGFkb3ggJSVyMTEsICUlcmJ4OyIgICAgIiAgYWRjeCAlJXIxNCwgJSVyYng7IiAgICAiICBtb3YgJDAsICUlcjg7IgorIAkJIiAgbXVseHEgMjQoJTMpLCAlJXIxNCwgJSVyZHg7IiAgICAiICBhZG94ICUlcjEzLCAlJXIxNDsiICAgICIgIGFkY3ggJSVyYXgsICUlcjE0OyIgICAgIiAgbW92ICQwLCAlJXJheDsiCisgCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGFkb3ggJSVyZHgsICUlcmF4OyIgICAgIiAgYWRjeCAlJXI4LCAlJXJheDsiCisgCQkvKiBDb21wdXRlIHNyYzFbMl0gKiBzcmMyICovCisgCQkiICBtb3ZxIDE2KCUxKSwgJSVyZHg7IgorIAkJIiAgbXVseHEgMCglMyksICUlcjgsICUlcjk7IiAgICAgICAiICB4b3IgJSVyMTAsICUlcjEwOyIgICAgIiAgYWRjeHEgMTYoJTApLCAlJXI4OyIgICAgIiAgbW92cSAlJXI4LCAxNiglMCk7IgorLQkJIiAgbXVseHEgOCglMyksICUlcjEwLCAlJXIxMTsiICAgICAiICBhZG94ICUlcjksICUlcjEwOyIgICAgICIgIGFkY3ggJSVyMTIsICUlcjEwOyIgICAgIiAgbW92cSAlJXIxMCwgMjQoJTApOyIKKy0JCSIgIG11bHhxIDE2KCUzKSwgJSVyMTIsICUlcjEzOyIgICAgIiAgYWRveCAlJXIxMSwgJSVyMTI7IiAgICAiICBhZGN4ICUlcjE0LCAlJXIxMjsiICAgICIgIG1vdiAkMCwgJSVyODsiCisrCQkiICBtdWx4cSA4KCUzKSwgJSVyMTAsICUlcjExOyIgICAgICIgIGFkb3ggJSVyOSwgJSVyMTA7IiAgICAgIiAgYWRjeCAlJXJieCwgJSVyMTA7IiAgICAiICBtb3ZxICUlcjEwLCAyNCglMCk7IgorKwkJIiAgbXVseHEgMTYoJTMpLCAlJXJieCwgJSVyMTM7IiAgICAiICBhZG94ICUlcjExLCAlJXJieDsiICAgICIgIGFkY3ggJSVyMTQsICUlcmJ4OyIgICAgIiAgbW92ICQwLCAlJXI4OyIKKyAJCSIgIG11bHhxIDI0KCUzKSwgJSVyMTQsICUlcmR4OyIgICAgIiAgYWRveCAlJXIxMywgJSVyMTQ7IiAgICAiICBhZGN4ICUlcmF4LCAlJXIxNDsiICAgICIgIG1vdiAkMCwgJSVyYXg7IgorIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBhZG94ICUlcmR4LCAlJXJheDsiICAgICIgIGFkY3ggJSVyOCwgJSVyYXg7IgorIAkJLyogQ29tcHV0ZSBzcmMxWzNdICogc3JjMiAqLworIAkJIiAgbW92cSAyNCglMSksICUlcmR4OyIKKyAJCSIgIG11bHhxIDAoJTMpLCAlJXI4LCAlJXI5OyIgICAgICAgIiAgeG9yICUlcjEwLCAlJXIxMDsiICAgICIgIGFkY3hxIDI0KCUwKSwgJSVyODsiICAgICIgIG1vdnEgJSVyOCwgMjQoJTApOyIKKy0JCSIgIG11bHhxIDgoJTMpLCAlJXIxMCwgJSVyMTE7IiAgICAgIiAgYWRveCAlJXI5LCAlJXIxMDsiICAgICAiICBhZGN4ICUlcjEyLCAlJXIxMDsiICAgICIgIG1vdnEgJSVyMTAsIDMyKCUwKTsiCistCQkiICBtdWx4cSAxNiglMyksICUlcjEyLCAlJXIxMzsiICAgICIgIGFkb3ggJSVyMTEsICUlcjEyOyIgICAgIiAgYWRjeCAlJXIxNCwgJSVyMTI7IiAgICAiICBtb3ZxICUlcjEyLCA0MCglMCk7IiAgICAiICBtb3YgJDAsICUlcjg7IgorKwkJIiAgbXVseHEgOCglMyksICUlcjEwLCAlJXIxMTsiICAgICAiICBhZG94ICUlcjksICUlcjEwOyIgICAgICIgIGFkY3ggJSVyYngsICUlcjEwOyIgICAgIiAgbW92cSAlJXIxMCwgMzIoJTApOyIKKysJCSIgIG11bHhxIDE2KCUzKSwgJSVyYngsICUlcjEzOyIgICAgIiAgYWRveCAlJXIxMSwgJSVyYng7IiAgICAiICBhZGN4ICUlcjE0LCAlJXJieDsiICAgICIgIG1vdnEgJSVyYngsIDQwKCUwKTsiICAgICIgIG1vdiAkMCwgJSVyODsiCisgCQkiICBtdWx4cSAyNCglMyksICUlcjE0LCAlJXJkeDsiICAgICIgIGFkb3ggJSVyMTMsICUlcjE0OyIgICAgIiAgYWRjeCAlJXJheCwgJSVyMTQ7IiAgICAiICBtb3ZxICUlcjE0LCA0OCglMCk7IiAgICAiICBtb3YgJDAsICUlcmF4OyIKKyAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgYWRveCAlJXJkeCwgJSVyYXg7IiAgICAiICBhZGN4ICUlcjgsICUlcmF4OyIgICAgICIgIG1vdnEgJSVyYXgsIDU2KCUwKTsiCisgCQkvKiBMaW5lIHVwIHBvaW50ZXJzICovCitAQCAtMjAyLDExICsyMDIsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIGZtdWwodTY0ICpvdXQsIGNvbnN0CisgCQkiICBtdWx4cSAzMiglMSksICUlcjgsICUlcjEzOyIKKyAJCSIgIHhvciAlMywgJTM7IgorIAkJIiAgYWRveHEgMCglMSksICUlcjg7IgorLQkJIiAgbXVseHEgNDAoJTEpLCAlJXI5LCAlJXIxMjsiCisrCQkiICBtdWx4cSA0MCglMSksICUlcjksICUlcmJ4OyIKKyAJCSIgIGFkY3ggJSVyMTMsICUlcjk7IgorIAkJIiAgYWRveHEgOCglMSksICUlcjk7IgorIAkJIiAgbXVseHEgNDgoJTEpLCAlJXIxMCwgJSVyMTM7IgorLQkJIiAgYWRjeCAlJXIxMiwgJSVyMTA7IgorKwkJIiAgYWRjeCAlJXJieCwgJSVyMTA7IgorIAkJIiAgYWRveHEgMTYoJTEpLCAlJXIxMDsiCisgCQkiICBtdWx4cSA1NiglMSksICUlcjExLCAlJXJheDsiCisgCQkiICBhZGN4ICUlcjEzLCAlJXIxMTsiCitAQCAtMjMxLDcgKzIzMSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmbXVsKHU2NCAqb3V0LCBjb25zdAorIAkJIiAgbW92cSAlJXI4LCAwKCUwKTsiCisgCTogIismciIgKHRtcCksICIrJnIiIChmMSksICIrJnIiIChvdXQpLCAiKyZyIiAoZjIpCisgCToKKy0JOiAiJXJheCIsICIlcmR4IiwgIiVyOCIsICIlcjkiLCAiJXIxMCIsICIlcjExIiwgIiVyMTIiLCAiJXIxMyIsICIlcjE0IiwgIm1lbW9yeSIsICJjYyIKKysJOiAiJXJheCIsICIlcmR4IiwgIiVyOCIsICIlcjkiLCAiJXIxMCIsICIlcjExIiwgIiVyYngiLCAiJXIxMyIsICIlcjE0IiwgIm1lbW9yeSIsICJjYyIKKyAJKTsKKyB9CisgCitAQCAtMjQ4LDI4ICsyNDgsMjggQEAgc3RhdGljIGlubGluZSB2b2lkIGZtdWwyKHU2NCAqb3V0LCBjb25zdAorIAkJIiAgbW92cSAwKCUxKSwgJSVyZHg7IgorIAkJIiAgbXVseHEgMCglMyksICUlcjgsICUlcjk7IiAgICAgICAiICB4b3IgJSVyMTAsICUlcjEwOyIgICAgICIgIG1vdnEgJSVyOCwgMCglMCk7IgorIAkJIiAgbXVseHEgOCglMyksICUlcjEwLCAlJXIxMTsiICAgICAiICBhZG94ICUlcjksICUlcjEwOyIgICAgICIgIG1vdnEgJSVyMTAsIDgoJTApOyIKKy0JCSIgIG11bHhxIDE2KCUzKSwgJSVyMTIsICUlcjEzOyIgICAgIiAgYWRveCAlJXIxMSwgJSVyMTI7IgorKwkJIiAgbXVseHEgMTYoJTMpLCAlJXJieCwgJSVyMTM7IiAgICAiICBhZG94ICUlcjExLCAlJXJieDsiCisgCQkiICBtdWx4cSAyNCglMyksICUlcjE0LCAlJXJkeDsiICAgICIgIGFkb3ggJSVyMTMsICUlcjE0OyIgICAgIiAgbW92ICQwLCAlJXJheDsiCisgCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGFkb3ggJSVyZHgsICUlcmF4OyIKKyAJCS8qIENvbXB1dGUgc3JjMVsxXSAqIHNyYzIgKi8KKyAJCSIgIG1vdnEgOCglMSksICUlcmR4OyIKKyAJCSIgIG11bHhxIDAoJTMpLCAlJXI4LCAlJXI5OyIgICAgICAgIiAgeG9yICUlcjEwLCAlJXIxMDsiICAgICAiICBhZGN4cSA4KCUwKSwgJSVyODsiICAgICIgIG1vdnEgJSVyOCwgOCglMCk7IgorLQkJIiAgbXVseHEgOCglMyksICUlcjEwLCAlJXIxMTsiICAgICAiICBhZG94ICUlcjksICUlcjEwOyIgICAgICIgIGFkY3ggJSVyMTIsICUlcjEwOyIgICAgIiAgbW92cSAlJXIxMCwgMTYoJTApOyIKKy0JCSIgIG11bHhxIDE2KCUzKSwgJSVyMTIsICUlcjEzOyIgICAgIiAgYWRveCAlJXIxMSwgJSVyMTI7IiAgICAiICBhZGN4ICUlcjE0LCAlJXIxMjsiICAgICIgIG1vdiAkMCwgJSVyODsiCisrCQkiICBtdWx4cSA4KCUzKSwgJSVyMTAsICUlcjExOyIgICAgICIgIGFkb3ggJSVyOSwgJSVyMTA7IiAgICAgIiAgYWRjeCAlJXJieCwgJSVyMTA7IiAgICAiICBtb3ZxICUlcjEwLCAxNiglMCk7IgorKwkJIiAgbXVseHEgMTYoJTMpLCAlJXJieCwgJSVyMTM7IiAgICAiICBhZG94ICUlcjExLCAlJXJieDsiICAgICIgIGFkY3ggJSVyMTQsICUlcmJ4OyIgICAgIiAgbW92ICQwLCAlJXI4OyIKKyAJCSIgIG11bHhxIDI0KCUzKSwgJSVyMTQsICUlcmR4OyIgICAgIiAgYWRveCAlJXIxMywgJSVyMTQ7IiAgICAiICBhZGN4ICUlcmF4LCAlJXIxNDsiICAgICIgIG1vdiAkMCwgJSVyYXg7IgorIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBhZG94ICUlcmR4LCAlJXJheDsiICAgICIgIGFkY3ggJSVyOCwgJSVyYXg7IgorIAkJLyogQ29tcHV0ZSBzcmMxWzJdICogc3JjMiAqLworIAkJIiAgbW92cSAxNiglMSksICUlcmR4OyIKKyAJCSIgIG11bHhxIDAoJTMpLCAlJXI4LCAlJXI5OyIgICAgICAgIiAgeG9yICUlcjEwLCAlJXIxMDsiICAgICIgIGFkY3hxIDE2KCUwKSwgJSVyODsiICAgICIgIG1vdnEgJSVyOCwgMTYoJTApOyIKKy0JCSIgIG11bHhxIDgoJTMpLCAlJXIxMCwgJSVyMTE7IiAgICAgIiAgYWRveCAlJXI5LCAlJXIxMDsiICAgICAiICBhZGN4ICUlcjEyLCAlJXIxMDsiICAgICIgIG1vdnEgJSVyMTAsIDI0KCUwKTsiCistCQkiICBtdWx4cSAxNiglMyksICUlcjEyLCAlJXIxMzsiICAgICIgIGFkb3ggJSVyMTEsICUlcjEyOyIgICAgIiAgYWRjeCAlJXIxNCwgJSVyMTI7IiAgICAiICBtb3YgJDAsICUlcjg7IgorKwkJIiAgbXVseHEgOCglMyksICUlcjEwLCAlJXIxMTsiICAgICAiICBhZG94ICUlcjksICUlcjEwOyIgICAgICIgIGFkY3ggJSVyYngsICUlcjEwOyIgICAgIiAgbW92cSAlJXIxMCwgMjQoJTApOyIKKysJCSIgIG11bHhxIDE2KCUzKSwgJSVyYngsICUlcjEzOyIgICAgIiAgYWRveCAlJXIxMSwgJSVyYng7IiAgICAiICBhZGN4ICUlcjE0LCAlJXJieDsiICAgICIgIG1vdiAkMCwgJSVyODsiCisgCQkiICBtdWx4cSAyNCglMyksICUlcjE0LCAlJXJkeDsiICAgICIgIGFkb3ggJSVyMTMsICUlcjE0OyIgICAgIiAgYWRjeCAlJXJheCwgJSVyMTQ7IiAgICAiICBtb3YgJDAsICUlcmF4OyIKKyAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgYWRveCAlJXJkeCwgJSVyYXg7IiAgICAiICBhZGN4ICUlcjgsICUlcmF4OyIKKyAJCS8qIENvbXB1dGUgc3JjMVszXSAqIHNyYzIgKi8KKyAJCSIgIG1vdnEgMjQoJTEpLCAlJXJkeDsiCisgCQkiICBtdWx4cSAwKCUzKSwgJSVyOCwgJSVyOTsiICAgICAgICIgIHhvciAlJXIxMCwgJSVyMTA7IiAgICAiICBhZGN4cSAyNCglMCksICUlcjg7IiAgICAiICBtb3ZxICUlcjgsIDI0KCUwKTsiCistCQkiICBtdWx4cSA4KCUzKSwgJSVyMTAsICUlcjExOyIgICAgICIgIGFkb3ggJSVyOSwgJSVyMTA7IiAgICAgIiAgYWRjeCAlJXIxMiwgJSVyMTA7IiAgICAiICBtb3ZxICUlcjEwLCAzMiglMCk7IgorLQkJIiAgbXVseHEgMTYoJTMpLCAlJXIxMiwgJSVyMTM7IiAgICAiICBhZG94ICUlcjExLCAlJXIxMjsiICAgICIgIGFkY3ggJSVyMTQsICUlcjEyOyIgICAgIiAgbW92cSAlJXIxMiwgNDAoJTApOyIgICAgIiAgbW92ICQwLCAlJXI4OyIKKysJCSIgIG11bHhxIDgoJTMpLCAlJXIxMCwgJSVyMTE7IiAgICAgIiAgYWRveCAlJXI5LCAlJXIxMDsiICAgICAiICBhZGN4ICUlcmJ4LCAlJXIxMDsiICAgICIgIG1vdnEgJSVyMTAsIDMyKCUwKTsiCisrCQkiICBtdWx4cSAxNiglMyksICUlcmJ4LCAlJXIxMzsiICAgICIgIGFkb3ggJSVyMTEsICUlcmJ4OyIgICAgIiAgYWRjeCAlJXIxNCwgJSVyYng7IiAgICAiICBtb3ZxICUlcmJ4LCA0MCglMCk7IiAgICAiICBtb3YgJDAsICUlcjg7IgorIAkJIiAgbXVseHEgMjQoJTMpLCAlJXIxNCwgJSVyZHg7IiAgICAiICBhZG94ICUlcjEzLCAlJXIxNDsiICAgICIgIGFkY3ggJSVyYXgsICUlcjE0OyIgICAgIiAgbW92cSAlJXIxNCwgNDgoJTApOyIgICAgIiAgbW92ICQwLCAlJXJheDsiCisgCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGFkb3ggJSVyZHgsICUlcmF4OyIgICAgIiAgYWRjeCAlJXI4LCAlJXJheDsiICAgICAiICBtb3ZxICUlcmF4LCA1NiglMCk7IgorIAorQEAgLTI3OSwyOCArMjc5LDI4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmbXVsMih1NjQgKm91dCwgY29uc3QKKyAJCSIgIG1vdnEgMzIoJTEpLCAlJXJkeDsiCisgCQkiICBtdWx4cSAzMiglMyksICUlcjgsICUlcjk7IiAgICAgICAiICB4b3IgJSVyMTAsICUlcjEwOyIgICAgICIgIG1vdnEgJSVyOCwgNjQoJTApOyIKKyAJCSIgIG11bHhxIDQwKCUzKSwgJSVyMTAsICUlcjExOyIgICAgICIgIGFkb3ggJSVyOSwgJSVyMTA7IiAgICAgIiAgbW92cSAlJXIxMCwgNzIoJTApOyIKKy0JCSIgIG11bHhxIDQ4KCUzKSwgJSVyMTIsICUlcjEzOyIgICAgIiAgYWRveCAlJXIxMSwgJSVyMTI7IgorKwkJIiAgbXVseHEgNDgoJTMpLCAlJXJieCwgJSVyMTM7IiAgICAiICBhZG94ICUlcjExLCAlJXJieDsiCisgCQkiICBtdWx4cSA1NiglMyksICUlcjE0LCAlJXJkeDsiICAgICIgIGFkb3ggJSVyMTMsICUlcjE0OyIgICAgIiAgbW92ICQwLCAlJXJheDsiCisgCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGFkb3ggJSVyZHgsICUlcmF4OyIKKyAJCS8qIENvbXB1dGUgc3JjMVsxXSAqIHNyYzIgKi8KKyAJCSIgIG1vdnEgNDAoJTEpLCAlJXJkeDsiCisgCQkiICBtdWx4cSAzMiglMyksICUlcjgsICUlcjk7IiAgICAgICAiICB4b3IgJSVyMTAsICUlcjEwOyIgICAgICIgIGFkY3hxIDcyKCUwKSwgJSVyODsiICAgICIgIG1vdnEgJSVyOCwgNzIoJTApOyIKKy0JCSIgIG11bHhxIDQwKCUzKSwgJSVyMTAsICUlcjExOyIgICAgICIgIGFkb3ggJSVyOSwgJSVyMTA7IiAgICAgIiAgYWRjeCAlJXIxMiwgJSVyMTA7IiAgICAiICBtb3ZxICUlcjEwLCA4MCglMCk7IgorLQkJIiAgbXVseHEgNDgoJTMpLCAlJXIxMiwgJSVyMTM7IiAgICAiICBhZG94ICUlcjExLCAlJXIxMjsiICAgICIgIGFkY3ggJSVyMTQsICUlcjEyOyIgICAgIiAgbW92ICQwLCAlJXI4OyIKKysJCSIgIG11bHhxIDQwKCUzKSwgJSVyMTAsICUlcjExOyIgICAgICIgIGFkb3ggJSVyOSwgJSVyMTA7IiAgICAgIiAgYWRjeCAlJXJieCwgJSVyMTA7IiAgICAiICBtb3ZxICUlcjEwLCA4MCglMCk7IgorKwkJIiAgbXVseHEgNDgoJTMpLCAlJXJieCwgJSVyMTM7IiAgICAiICBhZG94ICUlcjExLCAlJXJieDsiICAgICIgIGFkY3ggJSVyMTQsICUlcmJ4OyIgICAgIiAgbW92ICQwLCAlJXI4OyIKKyAJCSIgIG11bHhxIDU2KCUzKSwgJSVyMTQsICUlcmR4OyIgICAgIiAgYWRveCAlJXIxMywgJSVyMTQ7IiAgICAiICBhZGN4ICUlcmF4LCAlJXIxNDsiICAgICIgIG1vdiAkMCwgJSVyYXg7IgorIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBhZG94ICUlcmR4LCAlJXJheDsiICAgICIgIGFkY3ggJSVyOCwgJSVyYXg7IgorIAkJLyogQ29tcHV0ZSBzcmMxWzJdICogc3JjMiAqLworIAkJIiAgbW92cSA0OCglMSksICUlcmR4OyIKKyAJCSIgIG11bHhxIDMyKCUzKSwgJSVyOCwgJSVyOTsiICAgICAgICIgIHhvciAlJXIxMCwgJSVyMTA7IiAgICAiICBhZGN4cSA4MCglMCksICUlcjg7IiAgICAiICBtb3ZxICUlcjgsIDgwKCUwKTsiCistCQkiICBtdWx4cSA0MCglMyksICUlcjEwLCAlJXIxMTsiICAgICAiICBhZG94ICUlcjksICUlcjEwOyIgICAgICIgIGFkY3ggJSVyMTIsICUlcjEwOyIgICAgIiAgbW92cSAlJXIxMCwgODgoJTApOyIKKy0JCSIgIG11bHhxIDQ4KCUzKSwgJSVyMTIsICUlcjEzOyIgICAgIiAgYWRveCAlJXIxMSwgJSVyMTI7IiAgICAiICBhZGN4ICUlcjE0LCAlJXIxMjsiICAgICIgIG1vdiAkMCwgJSVyODsiCisrCQkiICBtdWx4cSA0MCglMyksICUlcjEwLCAlJXIxMTsiICAgICAiICBhZG94ICUlcjksICUlcjEwOyIgICAgICIgIGFkY3ggJSVyYngsICUlcjEwOyIgICAgIiAgbW92cSAlJXIxMCwgODgoJTApOyIKKysJCSIgIG11bHhxIDQ4KCUzKSwgJSVyYngsICUlcjEzOyIgICAgIiAgYWRveCAlJXIxMSwgJSVyYng7IiAgICAiICBhZGN4ICUlcjE0LCAlJXJieDsiICAgICIgIG1vdiAkMCwgJSVyODsiCisgCQkiICBtdWx4cSA1NiglMyksICUlcjE0LCAlJXJkeDsiICAgICIgIGFkb3ggJSVyMTMsICUlcjE0OyIgICAgIiAgYWRjeCAlJXJheCwgJSVyMTQ7IiAgICAiICBtb3YgJDAsICUlcmF4OyIKKyAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgYWRveCAlJXJkeCwgJSVyYXg7IiAgICAiICBhZGN4ICUlcjgsICUlcmF4OyIKKyAJCS8qIENvbXB1dGUgc3JjMVszXSAqIHNyYzIgKi8KKyAJCSIgIG1vdnEgNTYoJTEpLCAlJXJkeDsiCisgCQkiICBtdWx4cSAzMiglMyksICUlcjgsICUlcjk7IiAgICAgICAiICB4b3IgJSVyMTAsICUlcjEwOyIgICAgIiAgYWRjeHEgODgoJTApLCAlJXI4OyIgICAgIiAgbW92cSAlJXI4LCA4OCglMCk7IgorLQkJIiAgbXVseHEgNDAoJTMpLCAlJXIxMCwgJSVyMTE7IiAgICAgIiAgYWRveCAlJXI5LCAlJXIxMDsiICAgICAiICBhZGN4ICUlcjEyLCAlJXIxMDsiICAgICIgIG1vdnEgJSVyMTAsIDk2KCUwKTsiCistCQkiICBtdWx4cSA0OCglMyksICUlcjEyLCAlJXIxMzsiICAgICIgIGFkb3ggJSVyMTEsICUlcjEyOyIgICAgIiAgYWRjeCAlJXIxNCwgJSVyMTI7IiAgICAiICBtb3ZxICUlcjEyLCAxMDQoJTApOyIgICAgIiAgbW92ICQwLCAlJXI4OyIKKysJCSIgIG11bHhxIDQwKCUzKSwgJSVyMTAsICUlcjExOyIgICAgICIgIGFkb3ggJSVyOSwgJSVyMTA7IiAgICAgIiAgYWRjeCAlJXJieCwgJSVyMTA7IiAgICAiICBtb3ZxICUlcjEwLCA5NiglMCk7IgorKwkJIiAgbXVseHEgNDgoJTMpLCAlJXJieCwgJSVyMTM7IiAgICAiICBhZG94ICUlcjExLCAlJXJieDsiICAgICIgIGFkY3ggJSVyMTQsICUlcmJ4OyIgICAgIiAgbW92cSAlJXJieCwgMTA0KCUwKTsiICAgICIgIG1vdiAkMCwgJSVyODsiCisgCQkiICBtdWx4cSA1NiglMyksICUlcjE0LCAlJXJkeDsiICAgICIgIGFkb3ggJSVyMTMsICUlcjE0OyIgICAgIiAgYWRjeCAlJXJheCwgJSVyMTQ7IiAgICAiICBtb3ZxICUlcjE0LCAxMTIoJTApOyIgICAgIiAgbW92ICQwLCAlJXJheDsiCisgCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGFkb3ggJSVyZHgsICUlcmF4OyIgICAgIiAgYWRjeCAlJXI4LCAlJXJheDsiICAgICAiICBtb3ZxICUlcmF4LCAxMjAoJTApOyIKKyAJCS8qIExpbmUgdXAgcG9pbnRlcnMgKi8KK0BAIC0zMTQsMTEgKzMxNCwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZm11bDIodTY0ICpvdXQsIGNvbnN0CisgCQkiICBtdWx4cSAzMiglMSksICUlcjgsICUlcjEzOyIKKyAJCSIgIHhvciAlMywgJTM7IgorIAkJIiAgYWRveHEgMCglMSksICUlcjg7IgorLQkJIiAgbXVseHEgNDAoJTEpLCAlJXI5LCAlJXIxMjsiCisrCQkiICBtdWx4cSA0MCglMSksICUlcjksICUlcmJ4OyIKKyAJCSIgIGFkY3ggJSVyMTMsICUlcjk7IgorIAkJIiAgYWRveHEgOCglMSksICUlcjk7IgorIAkJIiAgbXVseHEgNDgoJTEpLCAlJXIxMCwgJSVyMTM7IgorLQkJIiAgYWRjeCAlJXIxMiwgJSVyMTA7IgorKwkJIiAgYWRjeCAlJXJieCwgJSVyMTA7IgorIAkJIiAgYWRveHEgMTYoJTEpLCAlJXIxMDsiCisgCQkiICBtdWx4cSA1NiglMSksICUlcjExLCAlJXJheDsiCisgCQkiICBhZGN4ICUlcjEzLCAlJXIxMTsiCitAQCAtMzQ3LDExICszNDcsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIGZtdWwyKHU2NCAqb3V0LCBjb25zdAorIAkJIiAgbXVseHEgOTYoJTEpLCAlJXI4LCAlJXIxMzsiCisgCQkiICB4b3IgJTMsICUzOyIKKyAJCSIgIGFkb3hxIDY0KCUxKSwgJSVyODsiCistCQkiICBtdWx4cSAxMDQoJTEpLCAlJXI5LCAlJXIxMjsiCisrCQkiICBtdWx4cSAxMDQoJTEpLCAlJXI5LCAlJXJieDsiCisgCQkiICBhZGN4ICUlcjEzLCAlJXI5OyIKKyAJCSIgIGFkb3hxIDcyKCUxKSwgJSVyOTsiCisgCQkiICBtdWx4cSAxMTIoJTEpLCAlJXIxMCwgJSVyMTM7IgorLQkJIiAgYWRjeCAlJXIxMiwgJSVyMTA7IgorKwkJIiAgYWRjeCAlJXJieCwgJSVyMTA7IgorIAkJIiAgYWRveHEgODAoJTEpLCAlJXIxMDsiCisgCQkiICBtdWx4cSAxMjAoJTEpLCAlJXIxMSwgJSVyYXg7IgorIAkJIiAgYWRjeCAlJXIxMywgJSVyMTE7IgorQEAgLTM3Niw3ICszNzYsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZm11bDIodTY0ICpvdXQsIGNvbnN0CisgCQkiICBtb3ZxICUlcjgsIDMyKCUwKTsiCisgCTogIismciIgKHRtcCksICIrJnIiIChmMSksICIrJnIiIChvdXQpLCAiKyZyIiAoZjIpCisgCToKKy0JOiAiJXJheCIsICIlcmR4IiwgIiVyOCIsICIlcjkiLCAiJXIxMCIsICIlcjExIiwgIiVyMTIiLCAiJXIxMyIsICIlcjE0IiwgIm1lbW9yeSIsICJjYyIKKysJOiAiJXJheCIsICIlcmR4IiwgIiVyOCIsICIlcjkiLCAiJXIxMCIsICIlcjExIiwgIiVyYngiLCAiJXIxMyIsICIlcjE0IiwgIm1lbW9yeSIsICJjYyIKKyAJKTsKKyB9CisgCitAQCAtMzg4LDExICszODgsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIGZtdWxfc2NhbGFyKHU2NCAqb3V0LAorIAlhc20gdm9sYXRpbGUoCisgCQkvKiBDb21wdXRlIHRoZSByYXcgbXVsdGlwbGljYXRpb24gb2YgZjEqZjIgKi8KKyAJCSIgIG11bHhxIDAoJTIpLCAlJXI4LCAlJXJjeDsiICAgICAgLyogZjFbMF0qZjIgKi8KKy0JCSIgIG11bHhxIDgoJTIpLCAlJXI5LCAlJXIxMjsiICAgICAgLyogZjFbMV0qZjIgKi8KKysJCSIgIG11bHhxIDgoJTIpLCAlJXI5LCAlJXJieDsiICAgICAgLyogZjFbMV0qZjIgKi8KKyAJCSIgIGFkZCAlJXJjeCwgJSVyOTsiCisgCQkiICBtb3YgJDAsICUlcmN4OyIKKyAJCSIgIG11bHhxIDE2KCUyKSwgJSVyMTAsICUlcjEzOyIgICAgLyogZjFbMl0qZjIgKi8KKy0JCSIgIGFkY3ggJSVyMTIsICUlcjEwOyIKKysJCSIgIGFkY3ggJSVyYngsICUlcjEwOyIKKyAJCSIgIG11bHhxIDI0KCUyKSwgJSVyMTEsICUlcmF4OyIgICAgLyogZjFbM10qZjIgKi8KKyAJCSIgIGFkY3ggJSVyMTMsICUlcjExOyIKKyAJCSIgIGFkY3ggJSVyY3gsICUlcmF4OyIKK0BAIC00MTksNyArNDE5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZtdWxfc2NhbGFyKHU2NCAqb3V0LAorIAkJIiAgbW92cSAlJXI4LCAwKCUxKTsiCisgCTogIismciIgKGYyX3IpCisgCTogInIiIChvdXQpLCAiciIgKGYxKQorLQk6ICIlcmF4IiwgIiVyY3giLCAiJXI4IiwgIiVyOSIsICIlcjEwIiwgIiVyMTEiLCAiJXIxMiIsICIlcjEzIiwgIm1lbW9yeSIsICJjYyIKKysJOiAiJXJheCIsICIlcmN4IiwgIiVyOCIsICIlcjkiLCAiJXIxMCIsICIlcjExIiwgIiVyYngiLCAiJXIxMyIsICJtZW1vcnkiLCAiY2MiCisgCSk7CisgfQorIAorQEAgLTUyMCw4ICs1MjAsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZnNxcih1NjQgKm91dCwgY29uc3QKKyAJCSIgIG11bHhxIDE2KCUxKSwgJSVyOSwgJSVyMTA7IiAgICAgIiAgYWRjeCAlJXIxNCwgJSVyOTsiICAgICAvKiBmWzJdKmZbMF0gKi8KKyAJCSIgIG11bHhxIDI0KCUxKSwgJSVyYXgsICUlcmN4OyIgICAgIiAgYWRjeCAlJXJheCwgJSVyMTA7IiAgICAvKiBmWzNdKmZbMF0gKi8KKyAJCSIgIG1vdnEgMjQoJTEpLCAlJXJkeDsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmWzNdICovCistCQkiICBtdWx4cSA4KCUxKSwgJSVyMTEsICUlcjEyOyIgICAgICIgIGFkY3ggJSVyY3gsICUlcjExOyIgICAgLyogZlsxXSpmWzNdICovCistCQkiICBtdWx4cSAxNiglMSksICUlcmF4LCAlJXIxMzsiICAgICIgIGFkY3ggJSVyYXgsICUlcjEyOyIgICAgLyogZlsyXSpmWzNdICovCisrCQkiICBtdWx4cSA4KCUxKSwgJSVyMTEsICUlcmJ4OyIgICAgICIgIGFkY3ggJSVyY3gsICUlcjExOyIgICAgLyogZlsxXSpmWzNdICovCisrCQkiICBtdWx4cSAxNiglMSksICUlcmF4LCAlJXIxMzsiICAgICIgIGFkY3ggJSVyYXgsICUlcmJ4OyIgICAgLyogZlsyXSpmWzNdICovCisgCQkiICBtb3ZxIDgoJTEpLCAlJXJkeDsiICAgICAgICAgICAgICIgIGFkY3ggJSVyMTUsICUlcjEzOyIgICAgLyogZjEgKi8KKyAJCSIgIG11bHhxIDE2KCUxKSwgJSVyYXgsICUlcmN4OyIgICAgIiAgbW92ICQwLCAlJXIxNDsiICAgICAgICAvKiBmWzJdKmZbMV0gKi8KKyAKK0BAIC01MzEsMTIgKzUzMSwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZnNxcih1NjQgKm91dCwgY29uc3QKKyAJCSIgIGFkY3ggJSVyOCwgJSVyODsiCisgCQkiICBhZG94ICUlcmN4LCAlJXIxMTsiCisgCQkiICBhZGN4ICUlcjksICUlcjk7IgorLQkJIiAgYWRveCAlJXIxNSwgJSVyMTI7IgorKwkJIiAgYWRveCAlJXIxNSwgJSVyYng7IgorIAkJIiAgYWRjeCAlJXIxMCwgJSVyMTA7IgorIAkJIiAgYWRveCAlJXIxNSwgJSVyMTM7IgorIAkJIiAgYWRjeCAlJXIxMSwgJSVyMTE7IgorIAkJIiAgYWRveCAlJXIxNSwgJSVyMTQ7IgorLQkJIiAgYWRjeCAlJXIxMiwgJSVyMTI7IgorKwkJIiAgYWRjeCAlJXJieCwgJSVyYng7IgorIAkJIiAgYWRjeCAlJXIxMywgJSVyMTM7IgorIAkJIiAgYWRjeCAlJXIxNCwgJSVyMTQ7IgorIAorQEAgLTU0OSw3ICs1NDksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZnNxcih1NjQgKm91dCwgY29uc3QKKyAJCSIgIGFkY3ggJSVyY3gsICUlcjEwOyIgICAgICIgIG1vdnEgJSVyMTAsIDI0KCUwKTsiCisgCQkiICBtb3ZxIDE2KCUxKSwgJSVyZHg7IiAgICAiICBtdWx4ICUlcmR4LCAlJXJheCwgJSVyY3g7IiAgICAvKiBmWzJdXjIgKi8KKyAJCSIgIGFkY3ggJSVyYXgsICUlcjExOyIgICAgICIgIG1vdnEgJSVyMTEsIDMyKCUwKTsiCistCQkiICBhZGN4ICUlcmN4LCAlJXIxMjsiICAgICAiICBtb3ZxICUlcjEyLCA0MCglMCk7IgorKwkJIiAgYWRjeCAlJXJjeCwgJSVyYng7IiAgICAgIiAgbW92cSAlJXJieCwgNDAoJTApOyIKKyAJCSIgIG1vdnEgMjQoJTEpLCAlJXJkeDsiICAgICIgIG11bHggJSVyZHgsICUlcmF4LCAlJXJjeDsiICAgIC8qIGZbM11eMiAqLworIAkJIiAgYWRjeCAlJXJheCwgJSVyMTM7IiAgICAgIiAgbW92cSAlJXIxMywgNDgoJTApOyIKKyAJCSIgIGFkY3ggJSVyY3gsICUlcjE0OyIgICAgICIgIG1vdnEgJSVyMTQsIDU2KCUwKTsiCitAQCAtNTY1LDExICs1NjUsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIGZzcXIodTY0ICpvdXQsIGNvbnN0CisgCQkiICBtdWx4cSAzMiglMSksICUlcjgsICUlcjEzOyIKKyAJCSIgIHhvciAlJXJjeCwgJSVyY3g7IgorIAkJIiAgYWRveHEgMCglMSksICUlcjg7IgorLQkJIiAgbXVseHEgNDAoJTEpLCAlJXI5LCAlJXIxMjsiCisrCQkiICBtdWx4cSA0MCglMSksICUlcjksICUlcmJ4OyIKKyAJCSIgIGFkY3ggJSVyMTMsICUlcjk7IgorIAkJIiAgYWRveHEgOCglMSksICUlcjk7IgorIAkJIiAgbXVseHEgNDgoJTEpLCAlJXIxMCwgJSVyMTM7IgorLQkJIiAgYWRjeCAlJXIxMiwgJSVyMTA7IgorKwkJIiAgYWRjeCAlJXJieCwgJSVyMTA7IgorIAkJIiAgYWRveHEgMTYoJTEpLCAlJXIxMDsiCisgCQkiICBtdWx4cSA1NiglMSksICUlcjExLCAlJXJheDsiCisgCQkiICBhZGN4ICUlcjEzLCAlJXIxMTsiCitAQCAtNTk0LDcgKzU5NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmc3FyKHU2NCAqb3V0LCBjb25zdAorIAkJIiAgbW92cSAlJXI4LCAwKCUwKTsiCisgCTogIismciIgKHRtcCksICIrJnIiIChmKSwgIismciIgKG91dCkKKyAJOgorLQk6ICIlcmF4IiwgIiVyY3giLCAiJXJkeCIsICIlcjgiLCAiJXI5IiwgIiVyMTAiLCAiJXIxMSIsICIlcjEyIiwgIiVyMTMiLCAiJXIxNCIsICIlcjE1IiwgIm1lbW9yeSIsICJjYyIKKysJOiAiJXJheCIsICIlcmN4IiwgIiVyZHgiLCAiJXI4IiwgIiVyOSIsICIlcjEwIiwgIiVyMTEiLCAiJXJieCIsICIlcjEzIiwgIiVyMTQiLCAiJXIxNSIsICJtZW1vcnkiLCAiY2MiCisgCSk7CisgfQorIAorQEAgLTYxMSw4ICs2MTEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZnNxcjIodTY0ICpvdXQsIGNvbnN0CisgCQkiICBtdWx4cSAxNiglMSksICUlcjksICUlcjEwOyIgICAgICIgIGFkY3ggJSVyMTQsICUlcjk7IiAgICAgLyogZlsyXSpmWzBdICovCisgCQkiICBtdWx4cSAyNCglMSksICUlcmF4LCAlJXJjeDsiICAgICIgIGFkY3ggJSVyYXgsICUlcjEwOyIgICAgLyogZlszXSpmWzBdICovCisgCQkiICBtb3ZxIDI0KCUxKSwgJSVyZHg7IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZlszXSAqLworLQkJIiAgbXVseHEgOCglMSksICUlcjExLCAlJXIxMjsiICAgICAiICBhZGN4ICUlcmN4LCAlJXIxMTsiICAgIC8qIGZbMV0qZlszXSAqLworLQkJIiAgbXVseHEgMTYoJTEpLCAlJXJheCwgJSVyMTM7IiAgICAiICBhZGN4ICUlcmF4LCAlJXIxMjsiICAgIC8qIGZbMl0qZlszXSAqLworKwkJIiAgbXVseHEgOCglMSksICUlcjExLCAlJXJieDsiICAgICAiICBhZGN4ICUlcmN4LCAlJXIxMTsiICAgIC8qIGZbMV0qZlszXSAqLworKwkJIiAgbXVseHEgMTYoJTEpLCAlJXJheCwgJSVyMTM7IiAgICAiICBhZGN4ICUlcmF4LCAlJXJieDsiICAgIC8qIGZbMl0qZlszXSAqLworIAkJIiAgbW92cSA4KCUxKSwgJSVyZHg7IiAgICAgICAgICAgICAiICBhZGN4ICUlcjE1LCAlJXIxMzsiICAgIC8qIGYxICovCisgCQkiICBtdWx4cSAxNiglMSksICUlcmF4LCAlJXJjeDsiICAgICIgIG1vdiAkMCwgJSVyMTQ7IiAgICAgICAgLyogZlsyXSpmWzFdICovCisgCitAQCAtNjIyLDEyICs2MjIsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGZzcXIyKHU2NCAqb3V0LCBjb25zdAorIAkJIiAgYWRjeCAlJXI4LCAlJXI4OyIKKyAJCSIgIGFkb3ggJSVyY3gsICUlcjExOyIKKyAJCSIgIGFkY3ggJSVyOSwgJSVyOTsiCistCQkiICBhZG94ICUlcjE1LCAlJXIxMjsiCisrCQkiICBhZG94ICUlcjE1LCAlJXJieDsiCisgCQkiICBhZGN4ICUlcjEwLCAlJXIxMDsiCisgCQkiICBhZG94ICUlcjE1LCAlJXIxMzsiCisgCQkiICBhZGN4ICUlcjExLCAlJXIxMTsiCisgCQkiICBhZG94ICUlcjE1LCAlJXIxNDsiCistCQkiICBhZGN4ICUlcjEyLCAlJXIxMjsiCisrCQkiICBhZGN4ICUlcmJ4LCAlJXJieDsiCisgCQkiICBhZGN4ICUlcjEzLCAlJXIxMzsiCisgCQkiICBhZGN4ICUlcjE0LCAlJXIxNDsiCisgCitAQCAtNjQwLDcgKzY0MCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmc3FyMih1NjQgKm91dCwgY29uc3QKKyAJCSIgIGFkY3ggJSVyY3gsICUlcjEwOyIgICAgICIgIG1vdnEgJSVyMTAsIDI0KCUwKTsiCisgCQkiICBtb3ZxIDE2KCUxKSwgJSVyZHg7IiAgICAiICBtdWx4ICUlcmR4LCAlJXJheCwgJSVyY3g7IiAgICAvKiBmWzJdXjIgKi8KKyAJCSIgIGFkY3ggJSVyYXgsICUlcjExOyIgICAgICIgIG1vdnEgJSVyMTEsIDMyKCUwKTsiCistCQkiICBhZGN4ICUlcmN4LCAlJXIxMjsiICAgICAiICBtb3ZxICUlcjEyLCA0MCglMCk7IgorKwkJIiAgYWRjeCAlJXJjeCwgJSVyYng7IiAgICAgIiAgbW92cSAlJXJieCwgNDAoJTApOyIKKyAJCSIgIG1vdnEgMjQoJTEpLCAlJXJkeDsiICAgICIgIG11bHggJSVyZHgsICUlcmF4LCAlJXJjeDsiICAgIC8qIGZbM11eMiAqLworIAkJIiAgYWRjeCAlJXJheCwgJSVyMTM7IiAgICAgIiAgbW92cSAlJXIxMywgNDgoJTApOyIKKyAJCSIgIGFkY3ggJSVyY3gsICUlcjE0OyIgICAgICIgIG1vdnEgJSVyMTQsIDU2KCUwKTsiCitAQCAtNjUxLDggKzY1MSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmc3FyMih1NjQgKm91dCwgY29uc3QKKyAJCSIgIG11bHhxIDQ4KCUxKSwgJSVyOSwgJSVyMTA7IiAgICAgIiAgYWRjeCAlJXIxNCwgJSVyOTsiICAgICAvKiBmWzJdKmZbMF0gKi8KKyAJCSIgIG11bHhxIDU2KCUxKSwgJSVyYXgsICUlcmN4OyIgICAgIiAgYWRjeCAlJXJheCwgJSVyMTA7IiAgICAvKiBmWzNdKmZbMF0gKi8KKyAJCSIgIG1vdnEgNTYoJTEpLCAlJXJkeDsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmWzNdICovCistCQkiICBtdWx4cSA0MCglMSksICUlcjExLCAlJXIxMjsiICAgICAiICBhZGN4ICUlcmN4LCAlJXIxMTsiICAgIC8qIGZbMV0qZlszXSAqLworLQkJIiAgbXVseHEgNDgoJTEpLCAlJXJheCwgJSVyMTM7IiAgICAiICBhZGN4ICUlcmF4LCAlJXIxMjsiICAgIC8qIGZbMl0qZlszXSAqLworKwkJIiAgbXVseHEgNDAoJTEpLCAlJXIxMSwgJSVyYng7IiAgICAgIiAgYWRjeCAlJXJjeCwgJSVyMTE7IiAgICAvKiBmWzFdKmZbM10gKi8KKysJCSIgIG11bHhxIDQ4KCUxKSwgJSVyYXgsICUlcjEzOyIgICAgIiAgYWRjeCAlJXJheCwgJSVyYng7IiAgICAvKiBmWzJdKmZbM10gKi8KKyAJCSIgIG1vdnEgNDAoJTEpLCAlJXJkeDsiICAgICAgICAgICAgICIgIGFkY3ggJSVyMTUsICUlcjEzOyIgICAgLyogZjEgKi8KKyAJCSIgIG11bHhxIDQ4KCUxKSwgJSVyYXgsICUlcmN4OyIgICAgIiAgbW92ICQwLCAlJXIxNDsiICAgICAgICAvKiBmWzJdKmZbMV0gKi8KKyAKK0BAIC02NjIsMTIgKzY2MiwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZnNxcjIodTY0ICpvdXQsIGNvbnN0CisgCQkiICBhZGN4ICUlcjgsICUlcjg7IgorIAkJIiAgYWRveCAlJXJjeCwgJSVyMTE7IgorIAkJIiAgYWRjeCAlJXI5LCAlJXI5OyIKKy0JCSIgIGFkb3ggJSVyMTUsICUlcjEyOyIKKysJCSIgIGFkb3ggJSVyMTUsICUlcmJ4OyIKKyAJCSIgIGFkY3ggJSVyMTAsICUlcjEwOyIKKyAJCSIgIGFkb3ggJSVyMTUsICUlcjEzOyIKKyAJCSIgIGFkY3ggJSVyMTEsICUlcjExOyIKKyAJCSIgIGFkb3ggJSVyMTUsICUlcjE0OyIKKy0JCSIgIGFkY3ggJSVyMTIsICUlcjEyOyIKKysJCSIgIGFkY3ggJSVyYngsICUlcmJ4OyIKKyAJCSIgIGFkY3ggJSVyMTMsICUlcjEzOyIKKyAJCSIgIGFkY3ggJSVyMTQsICUlcjE0OyIKKyAKK0BAIC02ODAsNyArNjgwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZzcXIyKHU2NCAqb3V0LCBjb25zdAorIAkJIiAgYWRjeCAlJXJjeCwgJSVyMTA7IiAgICAgIiAgbW92cSAlJXIxMCwgODgoJTApOyIKKyAJCSIgIG1vdnEgNDgoJTEpLCAlJXJkeDsiICAgICIgIG11bHggJSVyZHgsICUlcmF4LCAlJXJjeDsiICAgIC8qIGZbMl1eMiAqLworIAkJIiAgYWRjeCAlJXJheCwgJSVyMTE7IiAgICAgIiAgbW92cSAlJXIxMSwgOTYoJTApOyIKKy0JCSIgIGFkY3ggJSVyY3gsICUlcjEyOyIgICAgICIgIG1vdnEgJSVyMTIsIDEwNCglMCk7IgorKwkJIiAgYWRjeCAlJXJjeCwgJSVyYng7IiAgICAgIiAgbW92cSAlJXJieCwgMTA0KCUwKTsiCisgCQkiICBtb3ZxIDU2KCUxKSwgJSVyZHg7IiAgICAiICBtdWx4ICUlcmR4LCAlJXJheCwgJSVyY3g7IiAgICAvKiBmWzNdXjIgKi8KKyAJCSIgIGFkY3ggJSVyYXgsICUlcjEzOyIgICAgICIgIG1vdnEgJSVyMTMsIDExMiglMCk7IgorIAkJIiAgYWRjeCAlJXJjeCwgJSVyMTQ7IiAgICAgIiAgbW92cSAlJXIxNCwgMTIwKCUwKTsiCitAQCAtNjk0LDExICs2OTQsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIGZzcXIyKHU2NCAqb3V0LCBjb25zdAorIAkJIiAgbXVseHEgMzIoJTEpLCAlJXI4LCAlJXIxMzsiCisgCQkiICB4b3IgJSVyY3gsICUlcmN4OyIKKyAJCSIgIGFkb3hxIDAoJTEpLCAlJXI4OyIKKy0JCSIgIG11bHhxIDQwKCUxKSwgJSVyOSwgJSVyMTI7IgorKwkJIiAgbXVseHEgNDAoJTEpLCAlJXI5LCAlJXJieDsiCisgCQkiICBhZGN4ICUlcjEzLCAlJXI5OyIKKyAJCSIgIGFkb3hxIDgoJTEpLCAlJXI5OyIKKyAJCSIgIG11bHhxIDQ4KCUxKSwgJSVyMTAsICUlcjEzOyIKKy0JCSIgIGFkY3ggJSVyMTIsICUlcjEwOyIKKysJCSIgIGFkY3ggJSVyYngsICUlcjEwOyIKKyAJCSIgIGFkb3hxIDE2KCUxKSwgJSVyMTA7IgorIAkJIiAgbXVseHEgNTYoJTEpLCAlJXIxMSwgJSVyYXg7IgorIAkJIiAgYWRjeCAlJXIxMywgJSVyMTE7IgorQEAgLTcyNywxMSArNzI3LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmc3FyMih1NjQgKm91dCwgY29uc3QKKyAJCSIgIG11bHhxIDk2KCUxKSwgJSVyOCwgJSVyMTM7IgorIAkJIiAgeG9yICUlcmN4LCAlJXJjeDsiCisgCQkiICBhZG94cSA2NCglMSksICUlcjg7IgorLQkJIiAgbXVseHEgMTA0KCUxKSwgJSVyOSwgJSVyMTI7IgorKwkJIiAgbXVseHEgMTA0KCUxKSwgJSVyOSwgJSVyYng7IgorIAkJIiAgYWRjeCAlJXIxMywgJSVyOTsiCisgCQkiICBhZG94cSA3MiglMSksICUlcjk7IgorIAkJIiAgbXVseHEgMTEyKCUxKSwgJSVyMTAsICUlcjEzOyIKKy0JCSIgIGFkY3ggJSVyMTIsICUlcjEwOyIKKysJCSIgIGFkY3ggJSVyYngsICUlcjEwOyIKKyAJCSIgIGFkb3hxIDgwKCUxKSwgJSVyMTA7IgorIAkJIiAgbXVseHEgMTIwKCUxKSwgJSVyMTEsICUlcmF4OyIKKyAJCSIgIGFkY3ggJSVyMTMsICUlcjExOyIKK0BAIC03NTYsNyArNzU2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZzcXIyKHU2NCAqb3V0LCBjb25zdAorIAkJIiAgbW92cSAlJXI4LCAzMiglMCk7IgorIAk6ICIrJnIiICh0bXApLCAiKyZyIiAoZiksICIrJnIiIChvdXQpCisgCToKKy0JOiAiJXJheCIsICIlcmN4IiwgIiVyZHgiLCAiJXI4IiwgIiVyOSIsICIlcjEwIiwgIiVyMTEiLCAiJXIxMiIsICIlcjEzIiwgIiVyMTQiLCAiJXIxNSIsICJtZW1vcnkiLCAiY2MiCisrCTogIiVyYXgiLCAiJXJjeCIsICIlcmR4IiwgIiVyOCIsICIlcjkiLCAiJXIxMCIsICIlcjExIiwgIiVyYngiLCAiJXIxMyIsICIlcjE0IiwgIiVyMTUiLCAibWVtb3J5IiwgImNjIgorIAkpOworIH0KKyAKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNTYtY3J5cHRvLWFybS02NC1wb2x5MTMwNS1hZGQtYXJ0aWZhY3QtdG8tLmdpdGlnbm9yZS1maS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNTYtY3J5cHRvLWFybS02NC1wb2x5MTMwNS1hZGQtYXJ0aWZhY3QtdG8tLmdpdGlnbm9yZS1maS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTUzNzE2Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA1Ni1jcnlwdG8tYXJtLTY0LXBvbHkxMzA1LWFkZC1hcnRpZmFjdC10by0uZ2l0aWdub3JlLWZpLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJKYXNvbiBBLiBEb25lbmZlbGQiIDxKYXNvbkB6eDJjNC5jb20+CitEYXRlOiBUaHUsIDE5IE1hciAyMDIwIDExOjU2OjE3IC0wNjAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyeXB0bzogYXJtWzY0XS9wb2x5MTMwNSAtIGFkZCBhcnRpZmFjdCB0byAuZ2l0aWdub3JlIGZpbGVzCisKK2NvbW1pdCA2ZTRlMDBkOGI2OGNhN2ViMzBkMDhhZmI3NDAwMzNlMGQzNmFiZTU1IHVwc3RyZWFtLgorCitUaGUgLlNfc2hpcHBlZCB5aWVsZHMgYSAuUywgYW5kIHRoZSBwYXR0ZXJuIGluIHRoZXNlIGRpcmVjdG9yaWVzIGlzIHRvCithZGQgdGhhdCB0byAuZ2l0aWdub3JlIHNvIHRoYXQgZ2l0LXN0YXR1cyBkb2Vzbid0IHJhaXNlIGEgZnVzcy4KKworRml4ZXM6IGE2YjgwM2IzZGRjNyAoImNyeXB0bzogYXJtL3BvbHkxMzA1IC0gaW5jb3Jwb3JhdGUgT3BlblNTTC9DUllQVE9HQU1TIE5FT04gaW1wbGVtZW50YXRpb24iKQorRml4ZXM6IGY1NjljYTE2NDc1MSAoImNyeXB0bzogYXJtNjQvcG9seTEzMDUgLSBpbmNvcnBvcmF0ZSBPcGVuU1NML0NSWVBUT0dBTVMgTkVPTiBpbXBsZW1lbnRhdGlvbiIpCitSZXBvcnRlZC1ieTogRW1pbCBSZW5uZXIgQmVydGhpbmcgPGtlcm5lbEBlc21pbC5kaz4KK0NjOiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CitTaWduZWQtb2ZmLWJ5OiBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGFyY2gvYXJtL2NyeXB0by8uZ2l0aWdub3JlICAgfCAxICsKKyBhcmNoL2FybTY0L2NyeXB0by8uZ2l0aWdub3JlIHwgMSArCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworLS0tIGEvYXJjaC9hcm0vY3J5cHRvLy5naXRpZ25vcmUKKysrKyBiL2FyY2gvYXJtL2NyeXB0by8uZ2l0aWdub3JlCitAQCAtMSwzICsxLDQgQEAKKyBhZXNicy1jb3JlLlMKKyBzaGEyNTYtY29yZS5TCisgc2hhNTEyLWNvcmUuUworK3BvbHkxMzA1LWNvcmUuUworLS0tIGEvYXJjaC9hcm02NC9jcnlwdG8vLmdpdGlnbm9yZQorKysrIGIvYXJjaC9hcm02NC9jcnlwdG8vLmdpdGlnbm9yZQorQEAgLTEsMiArMSwzIEBACisgc2hhMjU2LWNvcmUuUworIHNoYTUxMi1jb3JlLlMKKytwb2x5MTMwNS1jb3JlLlMKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNTctY3J5cHRvLWFyY2gtbGliLWxpbWl0LXNpbWQtdXNhZ2UtdG8tNGstY2h1bmtzLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA1Ny1jcnlwdG8tYXJjaC1saWItbGltaXQtc2ltZC11c2FnZS10by00ay1jaHVua3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg4MjhmMgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNTctY3J5cHRvLWFyY2gtbGliLWxpbWl0LXNpbWQtdXNhZ2UtdG8tNGstY2h1bmtzLnBhdGNoCkBAIC0wLDAgKzEsMjQzIEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogVGh1LCAyMyBBcHIgMjAyMCAxNTo1NDowNCAtMDYwMAorU3ViamVjdDogW1BBVENIXSBjcnlwdG86IGFyY2gvbGliIC0gbGltaXQgc2ltZCB1c2FnZSB0byA0ayBjaHVua3MKKworY29tbWl0IDcwNjAyNGE1MmM2MTRiNDc4YjYzZjc3MjhkMjAyNTMyY2U2NTkxYTkgdXBzdHJlYW0uCisKK1RoZSBpbml0aWFsIFppbmMgcGF0Y2hzZXQsIGFmdGVyIHNvbWUgbWFpbGluZyBsaXN0IGRpc2N1c3Npb24sIGNvbnRhaW5lZAorY29kZSB0byBlbnN1cmUgdGhhdCBrZXJuZWxfZnB1X2VuYWJsZSB3b3VsZCBub3QgYmUga2VwdCBvbiBmb3IgbW9yZSB0aGFuCithIDRrIGNodW5rLCBzaW5jZSBpdCBkaXNhYmxlcyBwcmVlbXB0aW9uLiBUaGUgY2hvaWNlIG9mIDRrIGlzbid0IHRvdGFsbHkKK3NjaWVudGlmaWMsIGJ1dCBpdCdzIG5vdCBhIGJhZCBndWVzcyBlaXRoZXIsIGFuZCBpdCdzIHdoYXQncyB1c2VkIGluCitib3RoIHRoZSB4ODYgcG9seTEzMDUsIGJsYWtlMnMsIGFuZCBuaHBvbHkxMzA1IGNvZGUgYWxyZWFkeSAoaW4gdGhlIGZvcm0KK29mIFBBR0VfU0laRSwgd2hpY2ggdGhpcyBjb21taXQgY29ycmVjdHMgdG8gYmUgZXhwbGljaXRseSA0ayBmb3IgdGhlCitmb3JtZXIgdHdvKS4KKworQXJkIGRpZCBzb21lIGJhY2sgb2YgdGhlIGVudmVsb3BlIGNhbGN1bGF0aW9ucyBhbmQgZm91bmQgdGhhdAorYXQgNSBjeWNsZXMvYnl0ZSAob3ZlcmVzdGltYXRlKSBvbiBhIDFnaHogcHJvY2Vzc29yIChwcmV0dHkgc2xvdyksIDRrCittZWFucyB3ZSBoYXZlIGEgbWF4aW11bSBwcmVlbXB0aW9uIGRpc2FibGluZyBvZiAyMHVzLCB3aGljaCBTZWJhc3RpYW4KK2NvbmZpcm1lZCB3YXMgcHJvYmFibHkgYSBnb29kIGxpbWl0LgorCitVbmZvcnR1bmF0ZWx5IHRoZSBjaHVua2luZyBhcHBlYXJzIHRvIGhhdmUgYmVlbiBsZWZ0IG91dCBvZiB0aGUgZmluYWwKK3BhdGNoc2V0IHRoYXQgYWRkZWQgdGhlIGdsdWUgY29kZS4gU28sIHRoaXMgY29tbWl0IGFkZHMgaXQgYmFjayBpbi4KKworRml4ZXM6IDg0ZTAzZmEzOWZiZSAoImNyeXB0bzogeDg2L2NoYWNoYSAtIGV4cG9zZSBTSU1EIENoYUNoYSByb3V0aW5lIGFzIGxpYnJhcnkgZnVuY3Rpb24iKQorRml4ZXM6IGIzYWFkNWJhZDI2YSAoImNyeXB0bzogYXJtNjQvY2hhY2hhIC0gZXhwb3NlIGFybTY0IENoYUNoYSByb3V0aW5lIGFzIGxpYnJhcnkgZnVuY3Rpb24iKQorRml4ZXM6IGE0NGEzNDMwZDcxYiAoImNyeXB0bzogYXJtL2NoYWNoYSAtIGV4cG9zZSBBUk0gQ2hhQ2hhIHJvdXRpbmUgYXMgbGlicmFyeSBmdW5jdGlvbiIpCitGaXhlczogZDdkN2I4NTM1NjYyICgiY3J5cHRvOiB4ODYvcG9seTEzMDUgLSB3aXJlIHVwIGZhc3RlciBpbXBsZW1lbnRhdGlvbnMgZm9yIGtlcm5lbCIpCitGaXhlczogZjU2OWNhMTY0NzUxICgiY3J5cHRvOiBhcm02NC9wb2x5MTMwNSAtIGluY29ycG9yYXRlIE9wZW5TU0wvQ1JZUFRPR0FNUyBORU9OIGltcGxlbWVudGF0aW9uIikKK0ZpeGVzOiBhNmI4MDNiM2RkYzcgKCJjcnlwdG86IGFybS9wb2x5MTMwNSAtIGluY29ycG9yYXRlIE9wZW5TU0wvQ1JZUFRPR0FNUyBORU9OIGltcGxlbWVudGF0aW9uIikKK0ZpeGVzOiBlZDAzNTZlZGExNTMgKCJjcnlwdG86IGJsYWtlMnMgLSB4ODZfNjQgU0lNRCBpbXBsZW1lbnRhdGlvbiIpCitDYzogRXJpYyBCaWdnZXJzIDxlYmlnZ2Vyc0Bnb29nbGUuY29tPgorQ2M6IEFyZCBCaWVzaGV1dmVsIDxhcmRiQGtlcm5lbC5vcmc+CitDYzogU2ViYXN0aWFuIEFuZHJ6ZWogU2lld2lvciA8YmlnZWFzeUBsaW51dHJvbml4LmRlPgorQ2M6IHN0YWJsZUB2Z2VyLmtlcm5lbC5vcmcKK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorUmV2aWV3ZWQtYnk6IEFyZCBCaWVzaGV1dmVsIDxhcmRiQGtlcm5lbC5vcmc+CitTaWduZWQtb2ZmLWJ5OiBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGFyY2gvYXJtL2NyeXB0by9jaGFjaGEtZ2x1ZS5jICAgICAgICB8IDE0ICsrKysrKysrKysrLS0tCisgYXJjaC9hcm0vY3J5cHRvL3BvbHkxMzA1LWdsdWUuYyAgICAgIHwgMTUgKysrKysrKysrKystLS0tCisgYXJjaC9hcm02NC9jcnlwdG8vY2hhY2hhLW5lb24tZ2x1ZS5jIHwgMTQgKysrKysrKysrKystLS0KKyBhcmNoL2FybTY0L2NyeXB0by9wb2x5MTMwNS1nbHVlLmMgICAgfCAxNSArKysrKysrKysrKy0tLS0KKyBhcmNoL3g4Ni9jcnlwdG8vYmxha2Uycy1nbHVlLmMgICAgICAgfCAxMCArKysrLS0tLS0tCisgYXJjaC94ODYvY3J5cHRvL2NoYWNoYV9nbHVlLmMgICAgICAgIHwgMTQgKysrKysrKysrKystLS0KKyBhcmNoL3g4Ni9jcnlwdG8vcG9seTEzMDVfZ2x1ZS5jICAgICAgfCAxMyArKysrKystLS0tLS0tCisgNyBmaWxlcyBjaGFuZ2VkLCA2NSBpbnNlcnRpb25zKCspLCAzMCBkZWxldGlvbnMoLSkKKworLS0tIGEvYXJjaC9hcm0vY3J5cHRvL2NoYWNoYS1nbHVlLmMKKysrKyBiL2FyY2gvYXJtL2NyeXB0by9jaGFjaGEtZ2x1ZS5jCitAQCAtOTEsOSArOTEsMTcgQEAgdm9pZCBjaGFjaGFfY3J5cHRfYXJjaCh1MzIgKnN0YXRlLCB1OCAqZAorIAkJcmV0dXJuOworIAl9CisgCistCWtlcm5lbF9uZW9uX2JlZ2luKCk7CistCWNoYWNoYV9kb25lb24oc3RhdGUsIGRzdCwgc3JjLCBieXRlcywgbnJvdW5kcyk7CistCWtlcm5lbF9uZW9uX2VuZCgpOworKwlkbyB7CisrCQl1bnNpZ25lZCBpbnQgdG9kbyA9IG1pbl90KHVuc2lnbmVkIGludCwgYnl0ZXMsIFNaXzRLKTsKKysKKysJCWtlcm5lbF9uZW9uX2JlZ2luKCk7CisrCQljaGFjaGFfZG9uZW9uKHN0YXRlLCBkc3QsIHNyYywgdG9kbywgbnJvdW5kcyk7CisrCQlrZXJuZWxfbmVvbl9lbmQoKTsKKysKKysJCWJ5dGVzIC09IHRvZG87CisrCQlzcmMgKz0gdG9kbzsKKysJCWRzdCArPSB0b2RvOworKwl9IHdoaWxlIChieXRlcyk7CisgfQorIEVYUE9SVF9TWU1CT0woY2hhY2hhX2NyeXB0X2FyY2gpOworIAorLS0tIGEvYXJjaC9hcm0vY3J5cHRvL3BvbHkxMzA1LWdsdWUuYworKysrIGIvYXJjaC9hcm0vY3J5cHRvL3BvbHkxMzA1LWdsdWUuYworQEAgLTE2MCwxMyArMTYwLDIwIEBAIHZvaWQgcG9seTEzMDVfdXBkYXRlX2FyY2goc3RydWN0IHBvbHkxMzAKKyAJCXVuc2lnbmVkIGludCBsZW4gPSByb3VuZF9kb3duKG5ieXRlcywgUE9MWTEzMDVfQkxPQ0tfU0laRSk7CisgCisgCQlpZiAoc3RhdGljX2JyYW5jaF9saWtlbHkoJmhhdmVfbmVvbikgJiYgZG9fbmVvbikgeworLQkJCWtlcm5lbF9uZW9uX2JlZ2luKCk7CistCQkJcG9seTEzMDVfYmxvY2tzX25lb24oJmRjdHgtPmgsIHNyYywgbGVuLCAxKTsKKy0JCQlrZXJuZWxfbmVvbl9lbmQoKTsKKysJCQlkbyB7CisrCQkJCXVuc2lnbmVkIGludCB0b2RvID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIFNaXzRLKTsKKysKKysJCQkJa2VybmVsX25lb25fYmVnaW4oKTsKKysJCQkJcG9seTEzMDVfYmxvY2tzX25lb24oJmRjdHgtPmgsIHNyYywgdG9kbywgMSk7CisrCQkJCWtlcm5lbF9uZW9uX2VuZCgpOworKworKwkJCQlsZW4gLT0gdG9kbzsKKysJCQkJc3JjICs9IHRvZG87CisrCQkJfSB3aGlsZSAobGVuKTsKKyAJCX0gZWxzZSB7CisgCQkJcG9seTEzMDVfYmxvY2tzX2FybSgmZGN0eC0+aCwgc3JjLCBsZW4sIDEpOworKwkJCXNyYyArPSBsZW47CisgCQl9CistCQlzcmMgKz0gbGVuOworIAkJbmJ5dGVzICU9IFBPTFkxMzA1X0JMT0NLX1NJWkU7CisgCX0KKyAKKy0tLSBhL2FyY2gvYXJtNjQvY3J5cHRvL2NoYWNoYS1uZW9uLWdsdWUuYworKysrIGIvYXJjaC9hcm02NC9jcnlwdG8vY2hhY2hhLW5lb24tZ2x1ZS5jCitAQCAtODcsOSArODcsMTcgQEAgdm9pZCBjaGFjaGFfY3J5cHRfYXJjaCh1MzIgKnN0YXRlLCB1OCAqZAorIAkgICAgIWNyeXB0b19zaW1kX3VzYWJsZSgpKQorIAkJcmV0dXJuIGNoYWNoYV9jcnlwdF9nZW5lcmljKHN0YXRlLCBkc3QsIHNyYywgYnl0ZXMsIG5yb3VuZHMpOworIAorLQlrZXJuZWxfbmVvbl9iZWdpbigpOworLQljaGFjaGFfZG9uZW9uKHN0YXRlLCBkc3QsIHNyYywgYnl0ZXMsIG5yb3VuZHMpOworLQlrZXJuZWxfbmVvbl9lbmQoKTsKKysJZG8geworKwkJdW5zaWduZWQgaW50IHRvZG8gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGJ5dGVzLCBTWl80Syk7CisrCisrCQlrZXJuZWxfbmVvbl9iZWdpbigpOworKwkJY2hhY2hhX2RvbmVvbihzdGF0ZSwgZHN0LCBzcmMsIHRvZG8sIG5yb3VuZHMpOworKwkJa2VybmVsX25lb25fZW5kKCk7CisrCisrCQlieXRlcyAtPSB0b2RvOworKwkJc3JjICs9IHRvZG87CisrCQlkc3QgKz0gdG9kbzsKKysJfSB3aGlsZSAoYnl0ZXMpOworIH0KKyBFWFBPUlRfU1lNQk9MKGNoYWNoYV9jcnlwdF9hcmNoKTsKKyAKKy0tLSBhL2FyY2gvYXJtNjQvY3J5cHRvL3BvbHkxMzA1LWdsdWUuYworKysrIGIvYXJjaC9hcm02NC9jcnlwdG8vcG9seTEzMDUtZ2x1ZS5jCitAQCAtMTQzLDEzICsxNDMsMjAgQEAgdm9pZCBwb2x5MTMwNV91cGRhdGVfYXJjaChzdHJ1Y3QgcG9seTEzMAorIAkJdW5zaWduZWQgaW50IGxlbiA9IHJvdW5kX2Rvd24obmJ5dGVzLCBQT0xZMTMwNV9CTE9DS19TSVpFKTsKKyAKKyAJCWlmIChzdGF0aWNfYnJhbmNoX2xpa2VseSgmaGF2ZV9uZW9uKSAmJiBjcnlwdG9fc2ltZF91c2FibGUoKSkgeworLQkJCWtlcm5lbF9uZW9uX2JlZ2luKCk7CistCQkJcG9seTEzMDVfYmxvY2tzX25lb24oJmRjdHgtPmgsIHNyYywgbGVuLCAxKTsKKy0JCQlrZXJuZWxfbmVvbl9lbmQoKTsKKysJCQlkbyB7CisrCQkJCXVuc2lnbmVkIGludCB0b2RvID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIFNaXzRLKTsKKysKKysJCQkJa2VybmVsX25lb25fYmVnaW4oKTsKKysJCQkJcG9seTEzMDVfYmxvY2tzX25lb24oJmRjdHgtPmgsIHNyYywgdG9kbywgMSk7CisrCQkJCWtlcm5lbF9uZW9uX2VuZCgpOworKworKwkJCQlsZW4gLT0gdG9kbzsKKysJCQkJc3JjICs9IHRvZG87CisrCQkJfSB3aGlsZSAobGVuKTsKKyAJCX0gZWxzZSB7CisgCQkJcG9seTEzMDVfYmxvY2tzKCZkY3R4LT5oLCBzcmMsIGxlbiwgMSk7CisrCQkJc3JjICs9IGxlbjsKKyAJCX0KKy0JCXNyYyArPSBsZW47CisgCQluYnl0ZXMgJT0gUE9MWTEzMDVfQkxPQ0tfU0laRTsKKyAJfQorIAorLS0tIGEvYXJjaC94ODYvY3J5cHRvL2JsYWtlMnMtZ2x1ZS5jCisrKysgYi9hcmNoL3g4Ni9jcnlwdG8vYmxha2Uycy1nbHVlLmMKK0BAIC0zMiwxNiArMzIsMTYgQEAgdm9pZCBibGFrZTJzX2NvbXByZXNzX2FyY2goc3RydWN0IGJsYWtlMgorIAkJCSAgIGNvbnN0IHUzMiBpbmMpCisgeworIAkvKiBTSU1EIGRpc2FibGVzIHByZWVtcHRpb24sIHNvIHJlbGF4IGFmdGVyIHByb2Nlc3NpbmcgZWFjaCBwYWdlLiAqLworLQlCVUlMRF9CVUdfT04oUEFHRV9TSVpFIC8gQkxBS0UyU19CTE9DS19TSVpFIDwgOCk7CisrCUJVSUxEX0JVR19PTihTWl80SyAvIEJMQUtFMlNfQkxPQ0tfU0laRSA8IDgpOworIAorIAlpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KCZibGFrZTJzX3VzZV9zc3NlMykgfHwgIWNyeXB0b19zaW1kX3VzYWJsZSgpKSB7CisgCQlibGFrZTJzX2NvbXByZXNzX2dlbmVyaWMoc3RhdGUsIGJsb2NrLCBuYmxvY2tzLCBpbmMpOworIAkJcmV0dXJuOworIAl9CisgCistCWZvciAoOzspIHsKKysJZG8geworIAkJY29uc3Qgc2l6ZV90IGJsb2NrcyA9IG1pbl90KHNpemVfdCwgbmJsb2NrcywKKy0JCQkJCSAgICBQQUdFX1NJWkUgLyBCTEFLRTJTX0JMT0NLX1NJWkUpOworKwkJCQkJICAgIFNaXzRLIC8gQkxBS0UyU19CTE9DS19TSVpFKTsKKyAKKyAJCWtlcm5lbF9mcHVfYmVnaW4oKTsKKyAJCWlmIChJU19FTkFCTEVEKENPTkZJR19BU19BVlg1MTIpICYmCitAQCAtNTIsMTAgKzUyLDggQEAgdm9pZCBibGFrZTJzX2NvbXByZXNzX2FyY2goc3RydWN0IGJsYWtlMgorIAkJa2VybmVsX2ZwdV9lbmQoKTsKKyAKKyAJCW5ibG9ja3MgLT0gYmxvY2tzOworLQkJaWYgKCFuYmxvY2tzKQorLQkJCWJyZWFrOworIAkJYmxvY2sgKz0gYmxvY2tzICogQkxBS0UyU19CTE9DS19TSVpFOworLQl9CisrCX0gd2hpbGUgKG5ibG9ja3MpOworIH0KKyBFWFBPUlRfU1lNQk9MKGJsYWtlMnNfY29tcHJlc3NfYXJjaCk7CisgCistLS0gYS9hcmNoL3g4Ni9jcnlwdG8vY2hhY2hhX2dsdWUuYworKysrIGIvYXJjaC94ODYvY3J5cHRvL2NoYWNoYV9nbHVlLmMKK0BAIC0xNTQsOSArMTU0LDE3IEBAIHZvaWQgY2hhY2hhX2NyeXB0X2FyY2godTMyICpzdGF0ZSwgdTggKmQKKyAJICAgIGJ5dGVzIDw9IENIQUNIQV9CTE9DS19TSVpFKQorIAkJcmV0dXJuIGNoYWNoYV9jcnlwdF9nZW5lcmljKHN0YXRlLCBkc3QsIHNyYywgYnl0ZXMsIG5yb3VuZHMpOworIAorLQlrZXJuZWxfZnB1X2JlZ2luKCk7CistCWNoYWNoYV9kb3NpbWQoc3RhdGUsIGRzdCwgc3JjLCBieXRlcywgbnJvdW5kcyk7CistCWtlcm5lbF9mcHVfZW5kKCk7CisrCWRvIHsKKysJCXVuc2lnbmVkIGludCB0b2RvID0gbWluX3QodW5zaWduZWQgaW50LCBieXRlcywgU1pfNEspOworKworKwkJa2VybmVsX2ZwdV9iZWdpbigpOworKwkJY2hhY2hhX2Rvc2ltZChzdGF0ZSwgZHN0LCBzcmMsIHRvZG8sIG5yb3VuZHMpOworKwkJa2VybmVsX2ZwdV9lbmQoKTsKKysKKysJCWJ5dGVzIC09IHRvZG87CisrCQlzcmMgKz0gdG9kbzsKKysJCWRzdCArPSB0b2RvOworKwl9IHdoaWxlIChieXRlcyk7CisgfQorIEVYUE9SVF9TWU1CT0woY2hhY2hhX2NyeXB0X2FyY2gpOworIAorLS0tIGEvYXJjaC94ODYvY3J5cHRvL3BvbHkxMzA1X2dsdWUuYworKysrIGIvYXJjaC94ODYvY3J5cHRvL3BvbHkxMzA1X2dsdWUuYworQEAgLTkxLDggKzkxLDggQEAgc3RhdGljIHZvaWQgcG9seTEzMDVfc2ltZF9ibG9ja3Modm9pZCAqYworIAlzdHJ1Y3QgcG9seTEzMDVfYXJjaF9pbnRlcm5hbCAqc3RhdGUgPSBjdHg7CisgCisgCS8qIFNJTUQgZGlzYWJsZXMgcHJlZW1wdGlvbiwgc28gcmVsYXggYWZ0ZXIgcHJvY2Vzc2luZyBlYWNoIHBhZ2UuICovCistCUJVSUxEX0JVR19PTihQQUdFX1NJWkUgPCBQT0xZMTMwNV9CTE9DS19TSVpFIHx8CistCQkgICAgIFBBR0VfU0laRSAlIFBPTFkxMzA1X0JMT0NLX1NJWkUpOworKwlCVUlMRF9CVUdfT04oU1pfNEsgPCBQT0xZMTMwNV9CTE9DS19TSVpFIHx8CisrCQkgICAgIFNaXzRLICUgUE9MWTEzMDVfQkxPQ0tfU0laRSk7CisgCisgCWlmICghSVNfRU5BQkxFRChDT05GSUdfQVNfQVZYKSB8fCAhc3RhdGljX2JyYW5jaF9saWtlbHkoJnBvbHkxMzA1X3VzZV9hdngpIHx8CisgCSAgICAobGVuIDwgKFBPTFkxMzA1X0JMT0NLX1NJWkUgKiAxOCkgJiYgIXN0YXRlLT5pc19iYXNlMl8yNikgfHwKK0BAIC0xMDIsOCArMTAyLDggQEAgc3RhdGljIHZvaWQgcG9seTEzMDVfc2ltZF9ibG9ja3Modm9pZCAqYworIAkJcmV0dXJuOworIAl9CisgCistCWZvciAoOzspIHsKKy0JCWNvbnN0IHNpemVfdCBieXRlcyA9IG1pbl90KHNpemVfdCwgbGVuLCBQQUdFX1NJWkUpOworKwlkbyB7CisrCQljb25zdCBzaXplX3QgYnl0ZXMgPSBtaW5fdChzaXplX3QsIGxlbiwgU1pfNEspOworIAorIAkJa2VybmVsX2ZwdV9iZWdpbigpOworIAkJaWYgKElTX0VOQUJMRUQoQ09ORklHX0FTX0FWWDUxMikgJiYgc3RhdGljX2JyYW5jaF9saWtlbHkoJnBvbHkxMzA1X3VzZV9hdng1MTIpKQorQEAgLTExMywxMSArMTEzLDEwIEBAIHN0YXRpYyB2b2lkIHBvbHkxMzA1X3NpbWRfYmxvY2tzKHZvaWQgKmMKKyAJCWVsc2UKKyAJCQlwb2x5MTMwNV9ibG9ja3NfYXZ4KGN0eCwgaW5wLCBieXRlcywgcGFkYml0KTsKKyAJCWtlcm5lbF9mcHVfZW5kKCk7CisrCisgCQlsZW4gLT0gYnl0ZXM7CistCQlpZiAoIWxlbikKKy0JCQlicmVhazsKKyAJCWlucCArPSBieXRlczsKKy0JfQorKwl9IHdoaWxlIChsZW4pOworIH0KKyAKKyBzdGF0aWMgdm9pZCBwb2x5MTMwNV9zaW1kX2VtaXQodm9pZCAqY3R4LCB1OCBtYWNbUE9MWTEzMDVfRElHRVNUX1NJWkVdLApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA1OC1jcnlwdG8tbGliLWNoYWNoYTIwcG9seTEzMDUtQWRkLW1pc3NpbmctZnVuY3Rpb24tZGVjLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA1OC1jcnlwdG8tbGliLWNoYWNoYTIwcG9seTEzMDUtQWRkLW1pc3NpbmctZnVuY3Rpb24tZGVjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNjE0N2YKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDU4LWNyeXB0by1saWItY2hhY2hhMjBwb2x5MTMwNS1BZGQtbWlzc2luZy1mdW5jdGlvbi1kZWMucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorRGF0ZTogV2VkLCA4IEp1bCAyMDIwIDEyOjQxOjEzICsxMDAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyeXB0bzogbGliL2NoYWNoYTIwcG9seTEzMDUgLSBBZGQgbWlzc2luZyBmdW5jdGlvbgorIGRlY2xhcmF0aW9uCisKK2NvbW1pdCAwNmNjMmFmYmJkZjlhOWU4ZGYzZTJmOGRiNzI0OTk3ZGQ2ZTFiNGFjIHVwc3RyZWFtLgorCitUaGlzIHBhdGNoIGFkZHMgYSBkZWNsYXJhdGlvbiBmb3IgY2hhY2hhMjBwb2x5MTMwNV9zZWxmdGVzdCB0bworc2lsZW5jZSBhIHNwYXJzZSB3YXJuaW5nLgorCitTaWduZWQtb2ZmLWJ5OiBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGluY2x1ZGUvY3J5cHRvL2NoYWNoYTIwcG9seTEzMDUuaCB8IDIgKysKKyBsaWIvY3J5cHRvL2NoYWNoYTIwcG9seTEzMDUuYyAgICAgfCAyIC0tCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKKy0tLSBhL2luY2x1ZGUvY3J5cHRvL2NoYWNoYTIwcG9seTEzMDUuaAorKysrIGIvaW5jbHVkZS9jcnlwdG8vY2hhY2hhMjBwb2x5MTMwNS5oCitAQCAtNDUsNCArNDUsNiBAQCBib29sIGNoYWNoYTIwcG9seTEzMDVfZGVjcnlwdF9zZ19pbnBsYWNlCisgCQkJCQkgY29uc3QgdTY0IG5vbmNlLAorIAkJCQkJIGNvbnN0IHU4IGtleVtDSEFDSEEyMFBPTFkxMzA1X0tFWV9TSVpFXSk7CisgCisrYm9vbCBjaGFjaGEyMHBvbHkxMzA1X3NlbGZ0ZXN0KHZvaWQpOworKworICNlbmRpZiAvKiBfX0NIQUNIQTIwUE9MWTEzMDVfSCAqLworLS0tIGEvbGliL2NyeXB0by9jaGFjaGEyMHBvbHkxMzA1LmMKKysrKyBiL2xpYi9jcnlwdG8vY2hhY2hhMjBwb2x5MTMwNS5jCitAQCAtMjEsOCArMjEsNiBAQAorIAorICNkZWZpbmUgQ0hBQ0hBX0tFWV9XT1JEUwkoQ0hBQ0hBX0tFWV9TSVpFIC8gc2l6ZW9mKHUzMikpCisgCistYm9vbCBfX2luaXQgY2hhY2hhMjBwb2x5MTMwNV9zZWxmdGVzdCh2b2lkKTsKKy0KKyBzdGF0aWMgdm9pZCBjaGFjaGFfbG9hZF9rZXkodTMyICprLCBjb25zdCB1OCAqaW4pCisgeworIAlrWzBdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGluKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNTktY3J5cHRvLXg4Ni1jaGFjaGEtc3NlMy11c2UtdW5hbGlnbmVkLWxvYWRzLWZvci1zdGF0ZS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNTktY3J5cHRvLXg4Ni1jaGFjaGEtc3NlMy11c2UtdW5hbGlnbmVkLWxvYWRzLWZvci1zdGF0ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Mjg0Nzg3Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA1OS1jcnlwdG8teDg2LWNoYWNoYS1zc2UzLXVzZS11bmFsaWduZWQtbG9hZHMtZm9yLXN0YXRlLnBhdGNoCkBAIC0wLDAgKzEsMTQ3IEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgorRGF0ZTogV2VkLCA4IEp1bCAyMDIwIDEyOjExOjE4ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyeXB0bzogeDg2L2NoYWNoYS1zc2UzIC0gdXNlIHVuYWxpZ25lZCBsb2FkcyBmb3Igc3RhdGUgYXJyYXkKKworY29tbWl0IGU3OWEzMTcxNTE5MzY4NmU5MmRhZGI0Y2FlZGZiYjFmNWRlMzY1OWMgdXBzdHJlYW0uCisKK0R1ZSB0byB0aGUgZmFjdCB0aGF0IHRoZSB4ODYgcG9ydCBkb2VzIG5vdCBzdXBwb3J0IGFsbG9jYXRpbmcgb2JqZWN0cworb24gdGhlIHN0YWNrIHdpdGggYW4gYWxpZ25tZW50IHRoYXQgZXhjZWVkcyA4IGJ5dGVzLCB3ZSBoYXZlIGEgcmF0aGVyCit1Z2x5IGhhY2sgaW4gdGhlIHg4NiBjb2RlIGZvciBDaGFDaGEgdG8gZW5zdXJlIHRoYXQgdGhlIHN0YXRlIGFycmF5IGlzCithbGlnbmVkIHRvIDE2IGJ5dGVzLCBhbGxvd2luZyB0aGUgU1NFMyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYWxnb3JpdGhtCit0byB1c2UgYWxpZ25lZCBsb2Fkcy4KKworR2l2ZW4gdGhhdCB0aGUgcGVyZm9ybWFuY2UgYmVuZWZpdCBvZiB1c2luZyBvZiBhbGlnbmVkIGxvYWRzIGFwcGVhcnMgdG8KK2JlIGxpbWl0ZWQgKH4wLjI1JSBmb3IgMWsgYmxvY2tzIHVzaW5nIHRjcnlwdCBvbiBhIENvcmVpNy04NjUwVSksIGFuZAordGhlIGZhY3QgdGhhdCB0aGlzIGhhY2sgaGFzIGxlYWtlZCBpbnRvIGdlbmVyaWMgQ2hhQ2hhIGNvZGUsIGxldCdzIGp1c3QKK3JlbW92ZSBpdC4KKworQ2M6IE1hcnRpbiBXaWxsaSA8bWFydGluQHN0cm9uZ3N3YW4ub3JnPgorQ2M6IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KK0NjOiBFcmljIEJpZ2dlcnMgPGViaWdnZXJzQGtlcm5lbC5vcmc+CitTaWduZWQtb2ZmLWJ5OiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgorUmV2aWV3ZWQtYnk6IE1hcnRpbiBXaWxsaSA8bWFydGluQHN0cm9uZ3N3YW4ub3JnPgorUmV2aWV3ZWQtYnk6IEVyaWMgQmlnZ2VycyA8ZWJpZ2dlcnNAZ29vZ2xlLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgYXJjaC94ODYvY3J5cHRvL2NoYWNoYS1zc3NlMy14ODZfNjQuUyB8IDE2ICsrKysrKysrLS0tLS0tLS0KKyBhcmNoL3g4Ni9jcnlwdG8vY2hhY2hhX2dsdWUuYyAgICAgICAgIHwgMTcgKystLS0tLS0tLS0tLS0tLS0KKyBpbmNsdWRlL2NyeXB0by9jaGFjaGEuaCAgICAgICAgICAgICAgIHwgIDQgLS0tLQorIDMgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMjcgZGVsZXRpb25zKC0pCisKKy0tLSBhL2FyY2gveDg2L2NyeXB0by9jaGFjaGEtc3NzZTMteDg2XzY0LlMKKysrKyBiL2FyY2gveDg2L2NyeXB0by9jaGFjaGEtc3NzZTMteDg2XzY0LlMKK0BAIC0xMjAsMTAgKzEyMCwxMCBAQCBFTlRSWShjaGFjaGFfYmxvY2tfeG9yX3Nzc2UzKQorIAlGUkFNRV9CRUdJTgorIAorIAkjIHgwLi4zID0gczAuLjMKKy0JbW92ZHFhCQkweDAwKCVyZGkpLCV4bW0wCistCW1vdmRxYQkJMHgxMCglcmRpKSwleG1tMQorLQltb3ZkcWEJCTB4MjAoJXJkaSksJXhtbTIKKy0JbW92ZHFhCQkweDMwKCVyZGkpLCV4bW0zCisrCW1vdmRxdQkJMHgwMCglcmRpKSwleG1tMAorKwltb3ZkcXUJCTB4MTAoJXJkaSksJXhtbTEKKysJbW92ZHF1CQkweDIwKCVyZGkpLCV4bW0yCisrCW1vdmRxdQkJMHgzMCglcmRpKSwleG1tMworIAltb3ZkcWEJCSV4bW0wLCV4bW04CisgCW1vdmRxYQkJJXhtbTEsJXhtbTkKKyAJbW92ZHFhCQkleG1tMiwleG1tMTAKK0BAIC0yMDUsMTAgKzIwNSwxMCBAQCBFTlRSWShoY2hhY2hhX2Jsb2NrX3Nzc2UzKQorIAkjICVlZHg6IG5yb3VuZHMKKyAJRlJBTUVfQkVHSU4KKyAKKy0JbW92ZHFhCQkweDAwKCVyZGkpLCV4bW0wCistCW1vdmRxYQkJMHgxMCglcmRpKSwleG1tMQorLQltb3ZkcWEJCTB4MjAoJXJkaSksJXhtbTIKKy0JbW92ZHFhCQkweDMwKCVyZGkpLCV4bW0zCisrCW1vdmRxdQkJMHgwMCglcmRpKSwleG1tMAorKwltb3ZkcXUJCTB4MTAoJXJkaSksJXhtbTEKKysJbW92ZHF1CQkweDIwKCVyZGkpLCV4bW0yCisrCW1vdmRxdQkJMHgzMCglcmRpKSwleG1tMworIAorIAltb3YJCSVlZHgsJXI4ZAorIAljYWxsCQljaGFjaGFfcGVybXV0ZQorLS0tIGEvYXJjaC94ODYvY3J5cHRvL2NoYWNoYV9nbHVlLmMKKysrKyBiL2FyY2gveDg2L2NyeXB0by9jaGFjaGFfZ2x1ZS5jCitAQCAtMTQsOCArMTQsNiBAQAorICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyAjaW5jbHVkZSA8YXNtL3NpbWQuaD4KKyAKKy0jZGVmaW5lIENIQUNIQV9TVEFURV9BTElHTiAxNgorLQorIGFzbWxpbmthZ2Ugdm9pZCBjaGFjaGFfYmxvY2tfeG9yX3Nzc2UzKHUzMiAqc3RhdGUsIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsCisgCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbGVuLCBpbnQgbnJvdW5kcyk7CisgYXNtbGlua2FnZSB2b2lkIGNoYWNoYV80YmxvY2tfeG9yX3Nzc2UzKHUzMiAqc3RhdGUsIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsCitAQCAtMTI1LDggKzEyMyw2IEBAIHN0YXRpYyB2b2lkIGNoYWNoYV9kb3NpbWQodTMyICpzdGF0ZSwgdTgKKyAKKyB2b2lkIGhjaGFjaGFfYmxvY2tfYXJjaChjb25zdCB1MzIgKnN0YXRlLCB1MzIgKnN0cmVhbSwgaW50IG5yb3VuZHMpCisgeworLQlzdGF0ZSA9IFBUUl9BTElHTihzdGF0ZSwgQ0hBQ0hBX1NUQVRFX0FMSUdOKTsKKy0KKyAJaWYgKCFzdGF0aWNfYnJhbmNoX2xpa2VseSgmY2hhY2hhX3VzZV9zaW1kKSB8fCAhY3J5cHRvX3NpbWRfdXNhYmxlKCkpIHsKKyAJCWhjaGFjaGFfYmxvY2tfZ2VuZXJpYyhzdGF0ZSwgc3RyZWFtLCBucm91bmRzKTsKKyAJfSBlbHNlIHsKK0BAIC0xMzksOCArMTM1LDYgQEAgRVhQT1JUX1NZTUJPTChoY2hhY2hhX2Jsb2NrX2FyY2gpOworIAorIHZvaWQgY2hhY2hhX2luaXRfYXJjaCh1MzIgKnN0YXRlLCBjb25zdCB1MzIgKmtleSwgY29uc3QgdTggKml2KQorIHsKKy0Jc3RhdGUgPSBQVFJfQUxJR04oc3RhdGUsIENIQUNIQV9TVEFURV9BTElHTik7CistCisgCWNoYWNoYV9pbml0X2dlbmVyaWMoc3RhdGUsIGtleSwgaXYpOworIH0KKyBFWFBPUlRfU1lNQk9MKGNoYWNoYV9pbml0X2FyY2gpOworQEAgLTE0OCw4ICsxNDIsNiBAQCBFWFBPUlRfU1lNQk9MKGNoYWNoYV9pbml0X2FyY2gpOworIHZvaWQgY2hhY2hhX2NyeXB0X2FyY2godTMyICpzdGF0ZSwgdTggKmRzdCwgY29uc3QgdTggKnNyYywgdW5zaWduZWQgaW50IGJ5dGVzLAorIAkJICAgICAgIGludCBucm91bmRzKQorIHsKKy0Jc3RhdGUgPSBQVFJfQUxJR04oc3RhdGUsIENIQUNIQV9TVEFURV9BTElHTik7CistCisgCWlmICghc3RhdGljX2JyYW5jaF9saWtlbHkoJmNoYWNoYV91c2Vfc2ltZCkgfHwgIWNyeXB0b19zaW1kX3VzYWJsZSgpIHx8CisgCSAgICBieXRlcyA8PSBDSEFDSEFfQkxPQ0tfU0laRSkKKyAJCXJldHVybiBjaGFjaGFfY3J5cHRfZ2VuZXJpYyhzdGF0ZSwgZHN0LCBzcmMsIGJ5dGVzLCBucm91bmRzKTsKK0BAIC0xNzEsMTUgKzE2MywxMiBAQCBFWFBPUlRfU1lNQk9MKGNoYWNoYV9jcnlwdF9hcmNoKTsKKyBzdGF0aWMgaW50IGNoYWNoYV9zaW1kX3N0cmVhbV94b3Ioc3RydWN0IHNrY2lwaGVyX3JlcXVlc3QgKnJlcSwKKyAJCQkJICBjb25zdCBzdHJ1Y3QgY2hhY2hhX2N0eCAqY3R4LCBjb25zdCB1OCAqaXYpCisgeworLQl1MzIgKnN0YXRlLCBzdGF0ZV9idWZbMTYgKyAyXSBfX2FsaWduZWQoOCk7CisrCXUzMiBzdGF0ZVtDSEFDSEFfU1RBVEVfV09SRFNdIF9fYWxpZ25lZCg4KTsKKyAJc3RydWN0IHNrY2lwaGVyX3dhbGsgd2FsazsKKyAJaW50IGVycjsKKyAKKyAJZXJyID0gc2tjaXBoZXJfd2Fsa192aXJ0KCZ3YWxrLCByZXEsIGZhbHNlKTsKKyAKKy0JQlVJTERfQlVHX09OKENIQUNIQV9TVEFURV9BTElHTiAhPSAxNik7CistCXN0YXRlID0gUFRSX0FMSUdOKHN0YXRlX2J1ZiArIDAsIENIQUNIQV9TVEFURV9BTElHTik7CistCisgCWNoYWNoYV9pbml0X2dlbmVyaWMoc3RhdGUsIGN0eC0+a2V5LCBpdik7CisgCisgCXdoaWxlICh3YWxrLm5ieXRlcyA+IDApIHsKK0BAIC0yMTgsMTIgKzIwNywxMCBAQCBzdGF0aWMgaW50IHhjaGFjaGFfc2ltZChzdHJ1Y3Qgc2tjaXBoZXJfCisgeworIAlzdHJ1Y3QgY3J5cHRvX3NrY2lwaGVyICp0Zm0gPSBjcnlwdG9fc2tjaXBoZXJfcmVxdGZtKHJlcSk7CisgCXN0cnVjdCBjaGFjaGFfY3R4ICpjdHggPSBjcnlwdG9fc2tjaXBoZXJfY3R4KHRmbSk7CistCXUzMiAqc3RhdGUsIHN0YXRlX2J1ZlsxNiArIDJdIF9fYWxpZ25lZCg4KTsKKysJdTMyIHN0YXRlW0NIQUNIQV9TVEFURV9XT1JEU10gX19hbGlnbmVkKDgpOworIAlzdHJ1Y3QgY2hhY2hhX2N0eCBzdWJjdHg7CisgCXU4IHJlYWxfaXZbMTZdOworIAorLQlCVUlMRF9CVUdfT04oQ0hBQ0hBX1NUQVRFX0FMSUdOICE9IDE2KTsKKy0Jc3RhdGUgPSBQVFJfQUxJR04oc3RhdGVfYnVmICsgMCwgQ0hBQ0hBX1NUQVRFX0FMSUdOKTsKKyAJY2hhY2hhX2luaXRfZ2VuZXJpYyhzdGF0ZSwgY3R4LT5rZXksIHJlcS0+aXYpOworIAorIAlpZiAocmVxLT5jcnlwdGxlbiA+IENIQUNIQV9CTE9DS19TSVpFICYmIGNyeXB0b19zaW1kX3VzYWJsZSgpKSB7CistLS0gYS9pbmNsdWRlL2NyeXB0by9jaGFjaGEuaAorKysrIGIvaW5jbHVkZS9jcnlwdG8vY2hhY2hhLmgKK0BAIC0yNSwxMSArMjUsNyBAQAorICNkZWZpbmUgQ0hBQ0hBX0JMT0NLX1NJWkUJNjQKKyAjZGVmaW5lIENIQUNIQVBPTFlfSVZfU0laRQkxMgorIAorLSNpZmRlZiBDT05GSUdfWDg2XzY0CistI2RlZmluZSBDSEFDSEFfU1RBVEVfV09SRFMJKChDSEFDSEFfQkxPQ0tfU0laRSArIDEyKSAvIHNpemVvZih1MzIpKQorLSNlbHNlCisgI2RlZmluZSBDSEFDSEFfU1RBVEVfV09SRFMJKENIQUNIQV9CTE9DS19TSVpFIC8gc2l6ZW9mKHUzMikpCistI2VuZGlmCisgCisgLyogMTkyLWJpdCBub25jZSwgdGhlbiA2NC1iaXQgc3RyZWFtIHBvc2l0aW9uICovCisgI2RlZmluZSBYQ0hBQ0hBX0lWX1NJWkUJCTMyCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDYwLWNyeXB0by14ODYtY3VydmUyNTUxOS1SZW1vdmUtdW51c2VkLWNhcnJ5LXZhcmlhYmxlcy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNjAtY3J5cHRvLXg4Ni1jdXJ2ZTI1NTE5LVJlbW92ZS11bnVzZWQtY2FycnktdmFyaWFibGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMmQyMGEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDYwLWNyeXB0by14ODYtY3VydmUyNTUxOS1SZW1vdmUtdW51c2VkLWNhcnJ5LXZhcmlhYmxlcy5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CitEYXRlOiBUaHUsIDIzIEp1bCAyMDIwIDE3OjUwOjQ4ICsxMDAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyeXB0bzogeDg2L2N1cnZlMjU1MTkgLSBSZW1vdmUgdW51c2VkIGNhcnJ5IHZhcmlhYmxlcworCitjb21taXQgMDU0YTU1NDBmYjhmNzI2OGUyYzc5ZTlkZWFiNDI0MmRiMTVjOGNiYSB1cHN0cmVhbS4KKworVGhlIGNhcnJ5IHZhcmlhYmxlcyBhcmUgYXNzaWduZWQgYnV0IG5ldmVyIHVzZWQsIHdoaWNoIHVwc2V0cwordGhlIGNvbXBpbGVyLiAgVGhpcyBwYXRjaCByZW1vdmVzIHRoZW0uCisKK1NpZ25lZC1vZmYtYnk6IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KK1Jldmlld2VkLWJ5OiBLYXJ0aGlrZXlhbiBCaGFyZ2F2YW4gPGthcnRoaWsuYmhhcmdhdmFuQGdtYWlsLmNvbT4KK0Fja2VkLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgYXJjaC94ODYvY3J5cHRvL2N1cnZlMjU1MTkteDg2XzY0LmMgfCA2ICsrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKKy0tLSBhL2FyY2gveDg2L2NyeXB0by9jdXJ2ZTI1NTE5LXg4Nl82NC5jCisrKysgYi9hcmNoL3g4Ni9jcnlwdG8vY3VydmUyNTUxOS14ODZfNjQuYworQEAgLTk0OCwxMCArOTQ4LDggQEAgc3RhdGljIHZvaWQgc3RvcmVfZmVsZW0odTY0ICpiLCB1NjQgKmYpCisgeworIAl1NjQgZjMwID0gZlszVV07CisgCXU2NCB0b3BfYml0MCA9IGYzMCA+PiAodTMyKTYzVTsKKy0JdTY0IGNhcnJ5MDsKKyAJdTY0IGYzMTsKKyAJdTY0IHRvcF9iaXQ7CistCXU2NCBjYXJyeTsKKyAJdTY0IGYwOworIAl1NjQgZjE7CisgCXU2NCBmMjsKK0BAIC05NzAsMTEgKzk2OCwxMSBAQCBzdGF0aWMgdm9pZCBzdG9yZV9mZWxlbSh1NjQgKmIsIHU2NCAqZikKKyAJdTY0IG8yOworIAl1NjQgbzM7CisgCWZbM1VdID0gZjMwICYgKHU2NCkweDdmZmZmZmZmZmZmZmZmZmZVOworLQljYXJyeTAgPSBhZGRfc2NhbGFyKGYsIGYsICh1NjQpMTlVICogdG9wX2JpdDApOworKwlhZGRfc2NhbGFyKGYsIGYsICh1NjQpMTlVICogdG9wX2JpdDApOworIAlmMzEgPSBmWzNVXTsKKyAJdG9wX2JpdCA9IGYzMSA+PiAodTMyKTYzVTsKKyAJZlszVV0gPSBmMzEgJiAodTY0KTB4N2ZmZmZmZmZmZmZmZmZmZlU7CistCWNhcnJ5ID0gYWRkX3NjYWxhcihmLCBmLCAodTY0KTE5VSAqIHRvcF9iaXQpOworKwlhZGRfc2NhbGFyKGYsIGYsICh1NjQpMTlVICogdG9wX2JpdCk7CisgCWYwID0gZlswVV07CisgCWYxID0gZlsxVV07CisgCWYyID0gZlsyVV07CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDYxLWNyeXB0by1hcm0tY3VydmUyNTUxOS1pbmNsdWRlLWxpbnV4LXNjYXR0ZXJsaXN0LmgucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDYxLWNyeXB0by1hcm0tY3VydmUyNTUxOS1pbmNsdWRlLWxpbnV4LXNjYXR0ZXJsaXN0LmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU4ZmQwOAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNjEtY3J5cHRvLWFybS1jdXJ2ZTI1NTE5LWluY2x1ZGUtbGludXgtc2NhdHRlcmxpc3QuaC5wYXRjaApAQCAtMCwwICsxLDM2IEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBGYWJpbyBFc3RldmFtIDxmZXN0ZXZhbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDI0IEF1ZyAyMDIwIDExOjA5OjUzIC0wMzAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyeXB0bzogYXJtL2N1cnZlMjU1MTkgLSBpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorCitjb21taXQgNjc3OWQwZTZiMGZlMTkzYWIzMDEwZWEyMDE3ODJjYTZmNzVhMzg2MiB1cHN0cmVhbS4KKworQnVpbGRpbmcgQVJNIGFsbG1vZGNvbmZpZyBsZWFkcyB0byB0aGUgZm9sbG93aW5nIHdhcm5pbmdzOgorCithcmNoL2FybS9jcnlwdG8vY3VydmUyNTUxOS1nbHVlLmM6NzM6MTI6IGVycm9yOiBpbXBsaWNpdCBkZWNsYXJhdGlvbiBvZiBmdW5jdGlvbiAnc2dfY29weV90b19idWZmZXInIFstV2Vycm9yPWltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uXQorYXJjaC9hcm0vY3J5cHRvL2N1cnZlMjU1MTktZ2x1ZS5jOjc0Ojk6IGVycm9yOiBpbXBsaWNpdCBkZWNsYXJhdGlvbiBvZiBmdW5jdGlvbiAnc2dfbmVudHNfZm9yX2xlbicgWy1XZXJyb3I9aW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb25dCithcmNoL2FybS9jcnlwdG8vY3VydmUyNTUxOS1nbHVlLmM6ODg6MTE6IGVycm9yOiBpbXBsaWNpdCBkZWNsYXJhdGlvbiBvZiBmdW5jdGlvbiAnc2dfY29weV9mcm9tX2J1ZmZlcicgWy1XZXJyb3I9aW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb25dCisKK0luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+IHRvIGZpeCBzdWNoIHdhcm5pbmdzCisKK1JlcG9ydGVkLWJ5OiBPbG9mJ3MgYXV0b2J1aWxkZXIgPGJ1aWxkQGxpeG9tLm5ldD4KK0ZpeGVzOiAwYzNkYzc4N2E2MmEgKCJjcnlwdG86IGFsZ2FwaSAtIFJlbW92ZSBza2J1ZmYuaCBpbmNsdXNpb24iKQorU2lnbmVkLW9mZi1ieTogRmFiaW8gRXN0ZXZhbSA8ZmVzdGV2YW1AZ21haWwuY29tPgorQWNrZWQtYnk6IEFyZCBCaWVzaGV1dmVsIDxhcmRiQGtlcm5lbC5vcmc+CitBY2tlZC1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CitTaWduZWQtb2ZmLWJ5OiBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGFyY2gvYXJtL2NyeXB0by9jdXJ2ZTI1NTE5LWdsdWUuYyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCistLS0gYS9hcmNoL2FybS9jcnlwdG8vY3VydmUyNTUxOS1nbHVlLmMKKysrKyBiL2FyY2gvYXJtL2NyeXB0by9jdXJ2ZTI1NTE5LWdsdWUuYworQEAgLTE2LDYgKzE2LDcgQEAKKyAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisgI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyAjaW5jbHVkZSA8bGludXgvanVtcF9sYWJlbC5oPgorKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorICNpbmNsdWRlIDxjcnlwdG8vY3VydmUyNTUxOS5oPgorIAorIGFzbWxpbmthZ2Ugdm9pZCBjdXJ2ZTI1NTE5X25lb24odTggbXlwdWJsaWNbQ1VSVkUyNTUxOV9LRVlfU0laRV0sCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDYyLWNyeXB0by1hcm0tcG9seTEzMDUtQWRkLXByb3RvdHlwZS1mb3ItcG9seTEzMDVfYmxvY2sucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDYyLWNyeXB0by1hcm0tcG9seTEzMDUtQWRkLXByb3RvdHlwZS1mb3ItcG9seTEzMDVfYmxvY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YzNzI0YQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNjItY3J5cHRvLWFybS1wb2x5MTMwNS1BZGQtcHJvdG90eXBlLWZvci1wb2x5MTMwNV9ibG9jay5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CitEYXRlOiBUdWUsIDI1IEF1ZyAyMDIwIDExOjIzOjAwICsxMDAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyeXB0bzogYXJtL3BvbHkxMzA1IC0gQWRkIHByb3RvdHlwZSBmb3IgcG9seTEzMDVfYmxvY2tzX25lb24KKworY29tbWl0IDUxOTgyZWEwMmFlZjk3MjEzMmViMzVjNTgzZDNlNGM1YjgzMTY2ZTUgdXBzdHJlYW0uCisKK1RoaXMgcGF0Y2ggYWRkcyBhIHByb3RvdHlwZSBmb3IgcG9seTEzMDVfYmxvY2tzX25lb24gdG8gc2xpZW5jZQorYSBjb21waWxlciB3YXJuaW5nOgorCisgIENDIFtNXSAgYXJjaC9hcm0vY3J5cHRvL3BvbHkxMzA1LWdsdWUubworLi4vYXJjaC9hcm0vY3J5cHRvL3BvbHkxMzA1LWdsdWUuYzoyNToxMzogd2FybmluZzogbm8gcHJldmlvdXMgcHJvdG90eXBlIGZvciBgcG9seTEzMDVfYmxvY2tzX25lb24nIFstV21pc3NpbmctcHJvdG90eXBlc10KKyB2b2lkIF9fd2VhayBwb2x5MTMwNV9ibG9ja3NfbmVvbih2b2lkICpzdGF0ZSwgY29uc3QgdTggKnNyYywgdTMyIGxlbiwgdTMyIGhpYml0KQorICAgICAgICAgICAgIF5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1NpZ25lZC1vZmYtYnk6IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KK0Fja2VkLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgYXJjaC9hcm0vY3J5cHRvL3BvbHkxMzA1LWdsdWUuYyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCistLS0gYS9hcmNoL2FybS9jcnlwdG8vcG9seTEzMDUtZ2x1ZS5jCisrKysgYi9hcmNoL2FybS9jcnlwdG8vcG9seTEzMDUtZ2x1ZS5jCitAQCAtMjAsNiArMjAsNyBAQAorIAorIHZvaWQgcG9seTEzMDVfaW5pdF9hcm0odm9pZCAqc3RhdGUsIGNvbnN0IHU4ICprZXkpOworIHZvaWQgcG9seTEzMDVfYmxvY2tzX2FybSh2b2lkICpzdGF0ZSwgY29uc3QgdTggKnNyYywgdTMyIGxlbiwgdTMyIGhpYml0KTsKKyt2b2lkIHBvbHkxMzA1X2Jsb2Nrc19uZW9uKHZvaWQgKnN0YXRlLCBjb25zdCB1OCAqc3JjLCB1MzIgbGVuLCB1MzIgaGliaXQpOworIHZvaWQgcG9seTEzMDVfZW1pdF9hcm0odm9pZCAqc3RhdGUsIHU4ICpkaWdlc3QsIGNvbnN0IHUzMiAqbm9uY2UpOworIAorIHZvaWQgX193ZWFrIHBvbHkxMzA1X2Jsb2Nrc19uZW9uKHZvaWQgKnN0YXRlLCBjb25zdCB1OCAqc3JjLCB1MzIgbGVuLCB1MzIgaGliaXQpCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDYzLWNyeXB0by1jdXJ2ZTI1NTE5LXg4Nl82NC1Vc2UtWE9STC1yMzItMzIucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDYzLWNyeXB0by1jdXJ2ZTI1NTE5LXg4Nl82NC1Vc2UtWE9STC1yMzItMzIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ3NmUyYQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNjMtY3J5cHRvLWN1cnZlMjU1MTkteDg2XzY0LVVzZS1YT1JMLXIzMi0zMi5wYXRjaApAQCAtMCwwICsxLDI2MSBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVXJvcyBCaXpqYWsgPHViaXpqYWtAZ21haWwuY29tPgorRGF0ZTogVGh1LCAyNyBBdWcgMjAyMCAxOTozMDo1OCArMDIwMAorU3ViamVjdDogW1BBVENIXSBjcnlwdG86IGN1cnZlMjU1MTkteDg2XzY0IC0gVXNlIFhPUkwgcjMyLDMyCisKK2NvbW1pdCBkYjcxOTUzOWZkMzg4OTgzNjkwMGJmOTEyNzU1YWEzMGE1OTg1ZTlhIHVwc3RyZWFtLgorCit4ODZfNjQgemVybyBleHRlbmRzIDMyYml0IG9wZXJhdGlvbnMsIHNvIGZvciA2NGJpdCBvcGVyYW5kcywKK1hPUkwgcjMyLHIzMiBpcyBmdW5jdGlvbmFsbHkgZXF1YWwgdG8gWE9STCByNjQscjY0LCBidXQgYXZvaWRzCithIFJFWCBwcmVmaXggYnl0ZSB3aGVuIGxlZ2FjeSByZWdpc3RlcnMgYXJlIHVzZWQuCisKK1NpZ25lZC1vZmYtYnk6IFVyb3MgQml6amFrIDx1Yml6amFrQGdtYWlsLmNvbT4KK0NjOiBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CitDYzogIkRhdmlkIFMuIE1pbGxlciIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CitBY2tlZC1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CitTaWduZWQtb2ZmLWJ5OiBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGFyY2gveDg2L2NyeXB0by9jdXJ2ZTI1NTE5LXg4Nl82NC5jIHwgNjggKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMzQgaW5zZXJ0aW9ucygrKSwgMzQgZGVsZXRpb25zKC0pCisKKy0tLSBhL2FyY2gveDg2L2NyeXB0by9jdXJ2ZTI1NTE5LXg4Nl82NC5jCisrKysgYi9hcmNoL3g4Ni9jcnlwdG8vY3VydmUyNTUxOS14ODZfNjQuYworQEAgLTQ1LDExICs0NSwxMSBAQCBzdGF0aWMgaW5saW5lIHU2NCBhZGRfc2NhbGFyKHU2NCAqb3V0LCBjCisgCisgCWFzbSB2b2xhdGlsZSgKKyAJCS8qIENsZWFyIHJlZ2lzdGVycyB0byBwcm9wYWdhdGUgdGhlIGNhcnJ5IGJpdCAqLworLQkJIiAgeG9yICUlcjgsICUlcjg7IgorLQkJIiAgeG9yICUlcjksICUlcjk7IgorLQkJIiAgeG9yICUlcjEwLCAlJXIxMDsiCistCQkiICB4b3IgJSVyMTEsICUlcjExOyIKKy0JCSIgIHhvciAlMSwgJTE7IgorKwkJIiAgeG9yICUlcjhkLCAlJXI4ZDsiCisrCQkiICB4b3IgJSVyOWQsICUlcjlkOyIKKysJCSIgIHhvciAlJXIxMGQsICUlcjEwZDsiCisrCQkiICB4b3IgJSVyMTFkLCAlJXIxMWQ7IgorKwkJIiAgeG9yICVrMSwgJWsxOyIKKyAKKyAJCS8qIEJlZ2luIGFkZGl0aW9uIGNoYWluICovCisgCQkiICBhZGRxIDAoJTMpLCAlMDsiCitAQCAtOTMsNyArOTMsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmFkZCh1NjQgKm91dCwgY29uc3QKKyAJCSIgIGNtb3ZjICUwLCAlJXJheDsiCisgCisgCQkvKiBTdGVwIDI6IEFkZCBjYXJyeSozOCB0byB0aGUgb3JpZ2luYWwgc3VtICovCistCQkiICB4b3IgJSVyY3gsICUlcmN4OyIKKysJCSIgIHhvciAlJWVjeCwgJSVlY3g7IgorIAkJIiAgYWRkICUlcmF4LCAlJXI4OyIKKyAJCSIgIGFkY3ggJSVyY3gsICUlcjk7IgorIAkJIiAgbW92cSAlJXI5LCA4KCUxKTsiCitAQCAtMTY1LDI4ICsxNjUsMjggQEAgc3RhdGljIGlubGluZSB2b2lkIGZtdWwodTY0ICpvdXQsIGNvbnN0CisgCisgCQkvKiBDb21wdXRlIHNyYzFbMF0gKiBzcmMyICovCisgCQkiICBtb3ZxIDAoJTEpLCAlJXJkeDsiCistCQkiICBtdWx4cSAwKCUzKSwgJSVyOCwgJSVyOTsiICAgICAgICIgIHhvciAlJXIxMCwgJSVyMTA7IiAgICAgIiAgbW92cSAlJXI4LCAwKCUwKTsiCisrCQkiICBtdWx4cSAwKCUzKSwgJSVyOCwgJSVyOTsiICAgICAgICIgIHhvciAlJXIxMGQsICUlcjEwZDsiICAgIiAgbW92cSAlJXI4LCAwKCUwKTsiCisgCQkiICBtdWx4cSA4KCUzKSwgJSVyMTAsICUlcjExOyIgICAgICIgIGFkb3ggJSVyOSwgJSVyMTA7IiAgICAgIiAgbW92cSAlJXIxMCwgOCglMCk7IgorIAkJIiAgbXVseHEgMTYoJTMpLCAlJXJieCwgJSVyMTM7IiAgICAiICBhZG94ICUlcjExLCAlJXJieDsiCisgCQkiICBtdWx4cSAyNCglMyksICUlcjE0LCAlJXJkeDsiICAgICIgIGFkb3ggJSVyMTMsICUlcjE0OyIgICAgIiAgbW92ICQwLCAlJXJheDsiCisgCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGFkb3ggJSVyZHgsICUlcmF4OyIKKyAJCS8qIENvbXB1dGUgc3JjMVsxXSAqIHNyYzIgKi8KKyAJCSIgIG1vdnEgOCglMSksICUlcmR4OyIKKy0JCSIgIG11bHhxIDAoJTMpLCAlJXI4LCAlJXI5OyIgICAgICAgIiAgeG9yICUlcjEwLCAlJXIxMDsiICAgICAiICBhZGN4cSA4KCUwKSwgJSVyODsiICAgICIgIG1vdnEgJSVyOCwgOCglMCk7IgorKwkJIiAgbXVseHEgMCglMyksICUlcjgsICUlcjk7IiAgICAgICAiICB4b3IgJSVyMTBkLCAlJXIxMGQ7IiAgICIgIGFkY3hxIDgoJTApLCAlJXI4OyIgICAgIiAgbW92cSAlJXI4LCA4KCUwKTsiCisgCQkiICBtdWx4cSA4KCUzKSwgJSVyMTAsICUlcjExOyIgICAgICIgIGFkb3ggJSVyOSwgJSVyMTA7IiAgICAgIiAgYWRjeCAlJXJieCwgJSVyMTA7IiAgICAiICBtb3ZxICUlcjEwLCAxNiglMCk7IgorIAkJIiAgbXVseHEgMTYoJTMpLCAlJXJieCwgJSVyMTM7IiAgICAiICBhZG94ICUlcjExLCAlJXJieDsiICAgICIgIGFkY3ggJSVyMTQsICUlcmJ4OyIgICAgIiAgbW92ICQwLCAlJXI4OyIKKyAJCSIgIG11bHhxIDI0KCUzKSwgJSVyMTQsICUlcmR4OyIgICAgIiAgYWRveCAlJXIxMywgJSVyMTQ7IiAgICAiICBhZGN4ICUlcmF4LCAlJXIxNDsiICAgICIgIG1vdiAkMCwgJSVyYXg7IgorIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBhZG94ICUlcmR4LCAlJXJheDsiICAgICIgIGFkY3ggJSVyOCwgJSVyYXg7IgorIAkJLyogQ29tcHV0ZSBzcmMxWzJdICogc3JjMiAqLworIAkJIiAgbW92cSAxNiglMSksICUlcmR4OyIKKy0JCSIgIG11bHhxIDAoJTMpLCAlJXI4LCAlJXI5OyIgICAgICAgIiAgeG9yICUlcjEwLCAlJXIxMDsiICAgICIgIGFkY3hxIDE2KCUwKSwgJSVyODsiICAgICIgIG1vdnEgJSVyOCwgMTYoJTApOyIKKysJCSIgIG11bHhxIDAoJTMpLCAlJXI4LCAlJXI5OyIgICAgICAgIiAgeG9yICUlcjEwZCwgJSVyMTBkOyIgICAiICBhZGN4cSAxNiglMCksICUlcjg7IiAgICIgIG1vdnEgJSVyOCwgMTYoJTApOyIKKyAJCSIgIG11bHhxIDgoJTMpLCAlJXIxMCwgJSVyMTE7IiAgICAgIiAgYWRveCAlJXI5LCAlJXIxMDsiICAgICAiICBhZGN4ICUlcmJ4LCAlJXIxMDsiICAgICIgIG1vdnEgJSVyMTAsIDI0KCUwKTsiCisgCQkiICBtdWx4cSAxNiglMyksICUlcmJ4LCAlJXIxMzsiICAgICIgIGFkb3ggJSVyMTEsICUlcmJ4OyIgICAgIiAgYWRjeCAlJXIxNCwgJSVyYng7IiAgICAiICBtb3YgJDAsICUlcjg7IgorIAkJIiAgbXVseHEgMjQoJTMpLCAlJXIxNCwgJSVyZHg7IiAgICAiICBhZG94ICUlcjEzLCAlJXIxNDsiICAgICIgIGFkY3ggJSVyYXgsICUlcjE0OyIgICAgIiAgbW92ICQwLCAlJXJheDsiCisgCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGFkb3ggJSVyZHgsICUlcmF4OyIgICAgIiAgYWRjeCAlJXI4LCAlJXJheDsiCisgCQkvKiBDb21wdXRlIHNyYzFbM10gKiBzcmMyICovCisgCQkiICBtb3ZxIDI0KCUxKSwgJSVyZHg7IgorLQkJIiAgbXVseHEgMCglMyksICUlcjgsICUlcjk7IiAgICAgICAiICB4b3IgJSVyMTAsICUlcjEwOyIgICAgIiAgYWRjeHEgMjQoJTApLCAlJXI4OyIgICAgIiAgbW92cSAlJXI4LCAyNCglMCk7IgorKwkJIiAgbXVseHEgMCglMyksICUlcjgsICUlcjk7IiAgICAgICAiICB4b3IgJSVyMTBkLCAlJXIxMGQ7IiAgICIgIGFkY3hxIDI0KCUwKSwgJSVyODsiICAgIiAgbW92cSAlJXI4LCAyNCglMCk7IgorIAkJIiAgbXVseHEgOCglMyksICUlcjEwLCAlJXIxMTsiICAgICAiICBhZG94ICUlcjksICUlcjEwOyIgICAgICIgIGFkY3ggJSVyYngsICUlcjEwOyIgICAgIiAgbW92cSAlJXIxMCwgMzIoJTApOyIKKyAJCSIgIG11bHhxIDE2KCUzKSwgJSVyYngsICUlcjEzOyIgICAgIiAgYWRveCAlJXIxMSwgJSVyYng7IiAgICAiICBhZGN4ICUlcjE0LCAlJXJieDsiICAgICIgIG1vdnEgJSVyYngsIDQwKCUwKTsiICAgICIgIG1vdiAkMCwgJSVyODsiCisgCQkiICBtdWx4cSAyNCglMyksICUlcjE0LCAlJXJkeDsiICAgICIgIGFkb3ggJSVyMTMsICUlcjE0OyIgICAgIiAgYWRjeCAlJXJheCwgJSVyMTQ7IiAgICAiICBtb3ZxICUlcjE0LCA0OCglMCk7IiAgICAiICBtb3YgJDAsICUlcmF4OyIKK0BAIC0yMDAsNyArMjAwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZtdWwodTY0ICpvdXQsIGNvbnN0CisgCQkvKiBTdGVwIDE6IENvbXB1dGUgZHN0ICsgY2FycnkgPT0gdG1wX2hpICogMzggKyB0bXBfbG8gKi8KKyAJCSIgIG1vdiAkMzgsICUlcmR4OyIKKyAJCSIgIG11bHhxIDMyKCUxKSwgJSVyOCwgJSVyMTM7IgorLQkJIiAgeG9yICUzLCAlMzsiCisrCQkiICB4b3IgJWszLCAlazM7IgorIAkJIiAgYWRveHEgMCglMSksICUlcjg7IgorIAkJIiAgbXVseHEgNDAoJTEpLCAlJXI5LCAlJXJieDsiCisgCQkiICBhZGN4ICUlcjEzLCAlJXI5OyIKK0BAIC0yNDYsMjggKzI0NiwyOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZm11bDIodTY0ICpvdXQsIGNvbnN0CisgCisgCQkvKiBDb21wdXRlIHNyYzFbMF0gKiBzcmMyICovCisgCQkiICBtb3ZxIDAoJTEpLCAlJXJkeDsiCistCQkiICBtdWx4cSAwKCUzKSwgJSVyOCwgJSVyOTsiICAgICAgICIgIHhvciAlJXIxMCwgJSVyMTA7IiAgICAgIiAgbW92cSAlJXI4LCAwKCUwKTsiCisrCQkiICBtdWx4cSAwKCUzKSwgJSVyOCwgJSVyOTsiICAgICAgICIgIHhvciAlJXIxMGQsICUlcjEwZDsiICAgIiAgbW92cSAlJXI4LCAwKCUwKTsiCisgCQkiICBtdWx4cSA4KCUzKSwgJSVyMTAsICUlcjExOyIgICAgICIgIGFkb3ggJSVyOSwgJSVyMTA7IiAgICAgIiAgbW92cSAlJXIxMCwgOCglMCk7IgorIAkJIiAgbXVseHEgMTYoJTMpLCAlJXJieCwgJSVyMTM7IiAgICAiICBhZG94ICUlcjExLCAlJXJieDsiCisgCQkiICBtdWx4cSAyNCglMyksICUlcjE0LCAlJXJkeDsiICAgICIgIGFkb3ggJSVyMTMsICUlcjE0OyIgICAgIiAgbW92ICQwLCAlJXJheDsiCisgCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGFkb3ggJSVyZHgsICUlcmF4OyIKKyAJCS8qIENvbXB1dGUgc3JjMVsxXSAqIHNyYzIgKi8KKyAJCSIgIG1vdnEgOCglMSksICUlcmR4OyIKKy0JCSIgIG11bHhxIDAoJTMpLCAlJXI4LCAlJXI5OyIgICAgICAgIiAgeG9yICUlcjEwLCAlJXIxMDsiICAgICAiICBhZGN4cSA4KCUwKSwgJSVyODsiICAgICIgIG1vdnEgJSVyOCwgOCglMCk7IgorKwkJIiAgbXVseHEgMCglMyksICUlcjgsICUlcjk7IiAgICAgICAiICB4b3IgJSVyMTBkLCAlJXIxMGQ7IiAgICIgIGFkY3hxIDgoJTApLCAlJXI4OyIgICAgIiAgbW92cSAlJXI4LCA4KCUwKTsiCisgCQkiICBtdWx4cSA4KCUzKSwgJSVyMTAsICUlcjExOyIgICAgICIgIGFkb3ggJSVyOSwgJSVyMTA7IiAgICAgIiAgYWRjeCAlJXJieCwgJSVyMTA7IiAgICAiICBtb3ZxICUlcjEwLCAxNiglMCk7IgorIAkJIiAgbXVseHEgMTYoJTMpLCAlJXJieCwgJSVyMTM7IiAgICAiICBhZG94ICUlcjExLCAlJXJieDsiICAgICIgIGFkY3ggJSVyMTQsICUlcmJ4OyIgICAgIiAgbW92ICQwLCAlJXI4OyIKKyAJCSIgIG11bHhxIDI0KCUzKSwgJSVyMTQsICUlcmR4OyIgICAgIiAgYWRveCAlJXIxMywgJSVyMTQ7IiAgICAiICBhZGN4ICUlcmF4LCAlJXIxNDsiICAgICIgIG1vdiAkMCwgJSVyYXg7IgorIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBhZG94ICUlcmR4LCAlJXJheDsiICAgICIgIGFkY3ggJSVyOCwgJSVyYXg7IgorIAkJLyogQ29tcHV0ZSBzcmMxWzJdICogc3JjMiAqLworIAkJIiAgbW92cSAxNiglMSksICUlcmR4OyIKKy0JCSIgIG11bHhxIDAoJTMpLCAlJXI4LCAlJXI5OyIgICAgICAgIiAgeG9yICUlcjEwLCAlJXIxMDsiICAgICIgIGFkY3hxIDE2KCUwKSwgJSVyODsiICAgICIgIG1vdnEgJSVyOCwgMTYoJTApOyIKKysJCSIgIG11bHhxIDAoJTMpLCAlJXI4LCAlJXI5OyIgICAgICAgIiAgeG9yICUlcjEwZCwgJSVyMTBkOyIgICAiICBhZGN4cSAxNiglMCksICUlcjg7IiAgICIgIG1vdnEgJSVyOCwgMTYoJTApOyIKKyAJCSIgIG11bHhxIDgoJTMpLCAlJXIxMCwgJSVyMTE7IiAgICAgIiAgYWRveCAlJXI5LCAlJXIxMDsiICAgICAiICBhZGN4ICUlcmJ4LCAlJXIxMDsiICAgICIgIG1vdnEgJSVyMTAsIDI0KCUwKTsiCisgCQkiICBtdWx4cSAxNiglMyksICUlcmJ4LCAlJXIxMzsiICAgICIgIGFkb3ggJSVyMTEsICUlcmJ4OyIgICAgIiAgYWRjeCAlJXIxNCwgJSVyYng7IiAgICAiICBtb3YgJDAsICUlcjg7IgorIAkJIiAgbXVseHEgMjQoJTMpLCAlJXIxNCwgJSVyZHg7IiAgICAiICBhZG94ICUlcjEzLCAlJXIxNDsiICAgICIgIGFkY3ggJSVyYXgsICUlcjE0OyIgICAgIiAgbW92ICQwLCAlJXJheDsiCisgCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGFkb3ggJSVyZHgsICUlcmF4OyIgICAgIiAgYWRjeCAlJXI4LCAlJXJheDsiCisgCQkvKiBDb21wdXRlIHNyYzFbM10gKiBzcmMyICovCisgCQkiICBtb3ZxIDI0KCUxKSwgJSVyZHg7IgorLQkJIiAgbXVseHEgMCglMyksICUlcjgsICUlcjk7IiAgICAgICAiICB4b3IgJSVyMTAsICUlcjEwOyIgICAgIiAgYWRjeHEgMjQoJTApLCAlJXI4OyIgICAgIiAgbW92cSAlJXI4LCAyNCglMCk7IgorKwkJIiAgbXVseHEgMCglMyksICUlcjgsICUlcjk7IiAgICAgICAiICB4b3IgJSVyMTBkLCAlJXIxMGQ7IiAgICIgIGFkY3hxIDI0KCUwKSwgJSVyODsiICAgIiAgbW92cSAlJXI4LCAyNCglMCk7IgorIAkJIiAgbXVseHEgOCglMyksICUlcjEwLCAlJXIxMTsiICAgICAiICBhZG94ICUlcjksICUlcjEwOyIgICAgICIgIGFkY3ggJSVyYngsICUlcjEwOyIgICAgIiAgbW92cSAlJXIxMCwgMzIoJTApOyIKKyAJCSIgIG11bHhxIDE2KCUzKSwgJSVyYngsICUlcjEzOyIgICAgIiAgYWRveCAlJXIxMSwgJSVyYng7IiAgICAiICBhZGN4ICUlcjE0LCAlJXJieDsiICAgICIgIG1vdnEgJSVyYngsIDQwKCUwKTsiICAgICIgIG1vdiAkMCwgJSVyODsiCisgCQkiICBtdWx4cSAyNCglMyksICUlcjE0LCAlJXJkeDsiICAgICIgIGFkb3ggJSVyMTMsICUlcjE0OyIgICAgIiAgYWRjeCAlJXJheCwgJSVyMTQ7IiAgICAiICBtb3ZxICUlcjE0LCA0OCglMCk7IiAgICAiICBtb3YgJDAsICUlcmF4OyIKK0BAIC0yNzcsMjkgKzI3NywyOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZm11bDIodTY0ICpvdXQsIGNvbnN0CisgCisgCQkvKiBDb21wdXRlIHNyYzFbMF0gKiBzcmMyICovCisgCQkiICBtb3ZxIDMyKCUxKSwgJSVyZHg7IgorLQkJIiAgbXVseHEgMzIoJTMpLCAlJXI4LCAlJXI5OyIgICAgICAgIiAgeG9yICUlcjEwLCAlJXIxMDsiICAgICAiICBtb3ZxICUlcjgsIDY0KCUwKTsiCistCQkiICBtdWx4cSA0MCglMyksICUlcjEwLCAlJXIxMTsiICAgICAiICBhZG94ICUlcjksICUlcjEwOyIgICAgICIgIG1vdnEgJSVyMTAsIDcyKCUwKTsiCisrCQkiICBtdWx4cSAzMiglMyksICUlcjgsICUlcjk7IiAgICAgICIgIHhvciAlJXIxMGQsICUlcjEwZDsiICAgIiAgbW92cSAlJXI4LCA2NCglMCk7IgorKwkJIiAgbXVseHEgNDAoJTMpLCAlJXIxMCwgJSVyMTE7IiAgICAiICBhZG94ICUlcjksICUlcjEwOyIgICAgICIgIG1vdnEgJSVyMTAsIDcyKCUwKTsiCisgCQkiICBtdWx4cSA0OCglMyksICUlcmJ4LCAlJXIxMzsiICAgICIgIGFkb3ggJSVyMTEsICUlcmJ4OyIKKyAJCSIgIG11bHhxIDU2KCUzKSwgJSVyMTQsICUlcmR4OyIgICAgIiAgYWRveCAlJXIxMywgJSVyMTQ7IiAgICAiICBtb3YgJDAsICUlcmF4OyIKKyAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgYWRveCAlJXJkeCwgJSVyYXg7IgorIAkJLyogQ29tcHV0ZSBzcmMxWzFdICogc3JjMiAqLworIAkJIiAgbW92cSA0MCglMSksICUlcmR4OyIKKy0JCSIgIG11bHhxIDMyKCUzKSwgJSVyOCwgJSVyOTsiICAgICAgICIgIHhvciAlJXIxMCwgJSVyMTA7IiAgICAgIiAgYWRjeHEgNzIoJTApLCAlJXI4OyIgICAgIiAgbW92cSAlJXI4LCA3MiglMCk7IgorLQkJIiAgbXVseHEgNDAoJTMpLCAlJXIxMCwgJSVyMTE7IiAgICAgIiAgYWRveCAlJXI5LCAlJXIxMDsiICAgICAiICBhZGN4ICUlcmJ4LCAlJXIxMDsiICAgICIgIG1vdnEgJSVyMTAsIDgwKCUwKTsiCisrCQkiICBtdWx4cSAzMiglMyksICUlcjgsICUlcjk7IiAgICAgICIgIHhvciAlJXIxMGQsICUlcjEwZDsiICAgIiAgYWRjeHEgNzIoJTApLCAlJXI4OyIgICAiICBtb3ZxICUlcjgsIDcyKCUwKTsiCisrCQkiICBtdWx4cSA0MCglMyksICUlcjEwLCAlJXIxMTsiICAgICIgIGFkb3ggJSVyOSwgJSVyMTA7IiAgICAgIiAgYWRjeCAlJXJieCwgJSVyMTA7IiAgICAiICBtb3ZxICUlcjEwLCA4MCglMCk7IgorIAkJIiAgbXVseHEgNDgoJTMpLCAlJXJieCwgJSVyMTM7IiAgICAiICBhZG94ICUlcjExLCAlJXJieDsiICAgICIgIGFkY3ggJSVyMTQsICUlcmJ4OyIgICAgIiAgbW92ICQwLCAlJXI4OyIKKyAJCSIgIG11bHhxIDU2KCUzKSwgJSVyMTQsICUlcmR4OyIgICAgIiAgYWRveCAlJXIxMywgJSVyMTQ7IiAgICAiICBhZGN4ICUlcmF4LCAlJXIxNDsiICAgICIgIG1vdiAkMCwgJSVyYXg7IgorIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBhZG94ICUlcmR4LCAlJXJheDsiICAgICIgIGFkY3ggJSVyOCwgJSVyYXg7IgorIAkJLyogQ29tcHV0ZSBzcmMxWzJdICogc3JjMiAqLworIAkJIiAgbW92cSA0OCglMSksICUlcmR4OyIKKy0JCSIgIG11bHhxIDMyKCUzKSwgJSVyOCwgJSVyOTsiICAgICAgICIgIHhvciAlJXIxMCwgJSVyMTA7IiAgICAiICBhZGN4cSA4MCglMCksICUlcjg7IiAgICAiICBtb3ZxICUlcjgsIDgwKCUwKTsiCistCQkiICBtdWx4cSA0MCglMyksICUlcjEwLCAlJXIxMTsiICAgICAiICBhZG94ICUlcjksICUlcjEwOyIgICAgICIgIGFkY3ggJSVyYngsICUlcjEwOyIgICAgIiAgbW92cSAlJXIxMCwgODgoJTApOyIKKysJCSIgIG11bHhxIDMyKCUzKSwgJSVyOCwgJSVyOTsiICAgICAgIiAgeG9yICUlcjEwZCwgJSVyMTBkOyIgICAiICBhZGN4cSA4MCglMCksICUlcjg7IiAgICIgIG1vdnEgJSVyOCwgODAoJTApOyIKKysJCSIgIG11bHhxIDQwKCUzKSwgJSVyMTAsICUlcjExOyIgICAgIiAgYWRveCAlJXI5LCAlJXIxMDsiICAgICAiICBhZGN4ICUlcmJ4LCAlJXIxMDsiICAgICIgIG1vdnEgJSVyMTAsIDg4KCUwKTsiCisgCQkiICBtdWx4cSA0OCglMyksICUlcmJ4LCAlJXIxMzsiICAgICIgIGFkb3ggJSVyMTEsICUlcmJ4OyIgICAgIiAgYWRjeCAlJXIxNCwgJSVyYng7IiAgICAiICBtb3YgJDAsICUlcjg7IgorIAkJIiAgbXVseHEgNTYoJTMpLCAlJXIxNCwgJSVyZHg7IiAgICAiICBhZG94ICUlcjEzLCAlJXIxNDsiICAgICIgIGFkY3ggJSVyYXgsICUlcjE0OyIgICAgIiAgbW92ICQwLCAlJXJheDsiCisgCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGFkb3ggJSVyZHgsICUlcmF4OyIgICAgIiAgYWRjeCAlJXI4LCAlJXJheDsiCisgCQkvKiBDb21wdXRlIHNyYzFbM10gKiBzcmMyICovCisgCQkiICBtb3ZxIDU2KCUxKSwgJSVyZHg7IgorLQkJIiAgbXVseHEgMzIoJTMpLCAlJXI4LCAlJXI5OyIgICAgICAgIiAgeG9yICUlcjEwLCAlJXIxMDsiICAgICIgIGFkY3hxIDg4KCUwKSwgJSVyODsiICAgICIgIG1vdnEgJSVyOCwgODgoJTApOyIKKy0JCSIgIG11bHhxIDQwKCUzKSwgJSVyMTAsICUlcjExOyIgICAgICIgIGFkb3ggJSVyOSwgJSVyMTA7IiAgICAgIiAgYWRjeCAlJXJieCwgJSVyMTA7IiAgICAiICBtb3ZxICUlcjEwLCA5NiglMCk7IgorKwkJIiAgbXVseHEgMzIoJTMpLCAlJXI4LCAlJXI5OyIgICAgICAiICB4b3IgJSVyMTBkLCAlJXIxMGQ7IiAgICIgIGFkY3hxIDg4KCUwKSwgJSVyODsiICAgIiAgbW92cSAlJXI4LCA4OCglMCk7IgorKwkJIiAgbXVseHEgNDAoJTMpLCAlJXIxMCwgJSVyMTE7IiAgICAiICBhZG94ICUlcjksICUlcjEwOyIgICAgICIgIGFkY3ggJSVyYngsICUlcjEwOyIgICAgIiAgbW92cSAlJXIxMCwgOTYoJTApOyIKKyAJCSIgIG11bHhxIDQ4KCUzKSwgJSVyYngsICUlcjEzOyIgICAgIiAgYWRveCAlJXIxMSwgJSVyYng7IiAgICAiICBhZGN4ICUlcjE0LCAlJXJieDsiICAgICIgIG1vdnEgJSVyYngsIDEwNCglMCk7IiAgICAiICBtb3YgJDAsICUlcjg7IgorIAkJIiAgbXVseHEgNTYoJTMpLCAlJXIxNCwgJSVyZHg7IiAgICAiICBhZG94ICUlcjEzLCAlJXIxNDsiICAgICIgIGFkY3ggJSVyYXgsICUlcjE0OyIgICAgIiAgbW92cSAlJXIxNCwgMTEyKCUwKTsiICAgICIgIG1vdiAkMCwgJSVyYXg7IgorIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBhZG94ICUlcmR4LCAlJXJheDsiICAgICIgIGFkY3ggJSVyOCwgJSVyYXg7IiAgICAgIiAgbW92cSAlJXJheCwgMTIwKCUwKTsiCitAQCAtMzEyLDcgKzMxMiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmbXVsMih1NjQgKm91dCwgY29uc3QKKyAJCS8qIFN0ZXAgMTogQ29tcHV0ZSBkc3QgKyBjYXJyeSA9PSB0bXBfaGkgKiAzOCArIHRtcF9sbyAqLworIAkJIiAgbW92ICQzOCwgJSVyZHg7IgorIAkJIiAgbXVseHEgMzIoJTEpLCAlJXI4LCAlJXIxMzsiCistCQkiICB4b3IgJTMsICUzOyIKKysJCSIgIHhvciAlazMsICVrMzsiCisgCQkiICBhZG94cSAwKCUxKSwgJSVyODsiCisgCQkiICBtdWx4cSA0MCglMSksICUlcjksICUlcmJ4OyIKKyAJCSIgIGFkY3ggJSVyMTMsICUlcjk7IgorQEAgLTM0NSw3ICszNDUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZm11bDIodTY0ICpvdXQsIGNvbnN0CisgCQkvKiBTdGVwIDE6IENvbXB1dGUgZHN0ICsgY2FycnkgPT0gdG1wX2hpICogMzggKyB0bXBfbG8gKi8KKyAJCSIgIG1vdiAkMzgsICUlcmR4OyIKKyAJCSIgIG11bHhxIDk2KCUxKSwgJSVyOCwgJSVyMTM7IgorLQkJIiAgeG9yICUzLCAlMzsiCisrCQkiICB4b3IgJWszLCAlazM7IgorIAkJIiAgYWRveHEgNjQoJTEpLCAlJXI4OyIKKyAJCSIgIG11bHhxIDEwNCglMSksICUlcjksICUlcmJ4OyIKKyAJCSIgIGFkY3ggJSVyMTMsICUlcjk7IgorQEAgLTUxNiw3ICs1MTYsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZnNxcih1NjQgKm91dCwgY29uc3QKKyAKKyAJCS8qIFN0ZXAgMTogQ29tcHV0ZSBhbGwgcGFydGlhbCBwcm9kdWN0cyAqLworIAkJIiAgbW92cSAwKCUxKSwgJSVyZHg7IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZbMF0gKi8KKy0JCSIgIG11bHhxIDgoJTEpLCAlJXI4LCAlJXIxNDsiICAgICAgIiAgeG9yICUlcjE1LCAlJXIxNTsiICAgICAvKiBmWzFdKmZbMF0gKi8KKysJCSIgIG11bHhxIDgoJTEpLCAlJXI4LCAlJXIxNDsiICAgICAgIiAgeG9yICUlcjE1ZCwgJSVyMTVkOyIgICAvKiBmWzFdKmZbMF0gKi8KKyAJCSIgIG11bHhxIDE2KCUxKSwgJSVyOSwgJSVyMTA7IiAgICAgIiAgYWRjeCAlJXIxNCwgJSVyOTsiICAgICAvKiBmWzJdKmZbMF0gKi8KKyAJCSIgIG11bHhxIDI0KCUxKSwgJSVyYXgsICUlcmN4OyIgICAgIiAgYWRjeCAlJXJheCwgJSVyMTA7IiAgICAvKiBmWzNdKmZbMF0gKi8KKyAJCSIgIG1vdnEgMjQoJTEpLCAlJXJkeDsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmWzNdICovCitAQCAtNTI2LDcgKzUyNiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmc3FyKHU2NCAqb3V0LCBjb25zdAorIAkJIiAgbXVseHEgMTYoJTEpLCAlJXJheCwgJSVyY3g7IiAgICAiICBtb3YgJDAsICUlcjE0OyIgICAgICAgIC8qIGZbMl0qZlsxXSAqLworIAorIAkJLyogU3RlcCAyOiBDb21wdXRlIHR3byBwYXJhbGxlbCBjYXJyeSBjaGFpbnMgKi8KKy0JCSIgIHhvciAlJXIxNSwgJSVyMTU7IgorKwkJIiAgeG9yICUlcjE1ZCwgJSVyMTVkOyIKKyAJCSIgIGFkb3ggJSVyYXgsICUlcjEwOyIKKyAJCSIgIGFkY3ggJSVyOCwgJSVyODsiCisgCQkiICBhZG94ICUlcmN4LCAlJXIxMTsiCitAQCAtNTYzLDcgKzU2Myw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmc3FyKHU2NCAqb3V0LCBjb25zdAorIAkJLyogU3RlcCAxOiBDb21wdXRlIGRzdCArIGNhcnJ5ID09IHRtcF9oaSAqIDM4ICsgdG1wX2xvICovCisgCQkiICBtb3YgJDM4LCAlJXJkeDsiCisgCQkiICBtdWx4cSAzMiglMSksICUlcjgsICUlcjEzOyIKKy0JCSIgIHhvciAlJXJjeCwgJSVyY3g7IgorKwkJIiAgeG9yICUlZWN4LCAlJWVjeDsiCisgCQkiICBhZG94cSAwKCUxKSwgJSVyODsiCisgCQkiICBtdWx4cSA0MCglMSksICUlcjksICUlcmJ4OyIKKyAJCSIgIGFkY3ggJSVyMTMsICUlcjk7IgorQEAgLTYwNyw3ICs2MDcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZnNxcjIodTY0ICpvdXQsIGNvbnN0CisgCWFzbSB2b2xhdGlsZSgKKyAJCS8qIFN0ZXAgMTogQ29tcHV0ZSBhbGwgcGFydGlhbCBwcm9kdWN0cyAqLworIAkJIiAgbW92cSAwKCUxKSwgJSVyZHg7IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZbMF0gKi8KKy0JCSIgIG11bHhxIDgoJTEpLCAlJXI4LCAlJXIxNDsiICAgICAgIiAgeG9yICUlcjE1LCAlJXIxNTsiICAgICAvKiBmWzFdKmZbMF0gKi8KKysJCSIgIG11bHhxIDgoJTEpLCAlJXI4LCAlJXIxNDsiICAgICAgIiAgeG9yICUlcjE1ZCwgJSVyMTVkOyIgICAvKiBmWzFdKmZbMF0gKi8KKyAJCSIgIG11bHhxIDE2KCUxKSwgJSVyOSwgJSVyMTA7IiAgICAgIiAgYWRjeCAlJXIxNCwgJSVyOTsiICAgICAvKiBmWzJdKmZbMF0gKi8KKyAJCSIgIG11bHhxIDI0KCUxKSwgJSVyYXgsICUlcmN4OyIgICAgIiAgYWRjeCAlJXJheCwgJSVyMTA7IiAgICAvKiBmWzNdKmZbMF0gKi8KKyAJCSIgIG1vdnEgMjQoJTEpLCAlJXJkeDsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmWzNdICovCitAQCAtNjE3LDcgKzYxNyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmc3FyMih1NjQgKm91dCwgY29uc3QKKyAJCSIgIG11bHhxIDE2KCUxKSwgJSVyYXgsICUlcmN4OyIgICAgIiAgbW92ICQwLCAlJXIxNDsiICAgICAgICAvKiBmWzJdKmZbMV0gKi8KKyAKKyAJCS8qIFN0ZXAgMjogQ29tcHV0ZSB0d28gcGFyYWxsZWwgY2FycnkgY2hhaW5zICovCistCQkiICB4b3IgJSVyMTUsICUlcjE1OyIKKysJCSIgIHhvciAlJXIxNWQsICUlcjE1ZDsiCisgCQkiICBhZG94ICUlcmF4LCAlJXIxMDsiCisgCQkiICBhZGN4ICUlcjgsICUlcjg7IgorIAkJIiAgYWRveCAlJXJjeCwgJSVyMTE7IgorQEAgLTY0Nyw3ICs2NDcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZnNxcjIodTY0ICpvdXQsIGNvbnN0CisgCisgCQkvKiBTdGVwIDE6IENvbXB1dGUgYWxsIHBhcnRpYWwgcHJvZHVjdHMgKi8KKyAJCSIgIG1vdnEgMzIoJTEpLCAlJXJkeDsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZlswXSAqLworLQkJIiAgbXVseHEgNDAoJTEpLCAlJXI4LCAlJXIxNDsiICAgICAgIiAgeG9yICUlcjE1LCAlJXIxNTsiICAgICAvKiBmWzFdKmZbMF0gKi8KKysJCSIgIG11bHhxIDQwKCUxKSwgJSVyOCwgJSVyMTQ7IiAgICAgIiAgeG9yICUlcjE1ZCwgJSVyMTVkOyIgICAvKiBmWzFdKmZbMF0gKi8KKyAJCSIgIG11bHhxIDQ4KCUxKSwgJSVyOSwgJSVyMTA7IiAgICAgIiAgYWRjeCAlJXIxNCwgJSVyOTsiICAgICAvKiBmWzJdKmZbMF0gKi8KKyAJCSIgIG11bHhxIDU2KCUxKSwgJSVyYXgsICUlcmN4OyIgICAgIiAgYWRjeCAlJXJheCwgJSVyMTA7IiAgICAvKiBmWzNdKmZbMF0gKi8KKyAJCSIgIG1vdnEgNTYoJTEpLCAlJXJkeDsiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmWzNdICovCitAQCAtNjU3LDcgKzY1Nyw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmc3FyMih1NjQgKm91dCwgY29uc3QKKyAJCSIgIG11bHhxIDQ4KCUxKSwgJSVyYXgsICUlcmN4OyIgICAgIiAgbW92ICQwLCAlJXIxNDsiICAgICAgICAvKiBmWzJdKmZbMV0gKi8KKyAKKyAJCS8qIFN0ZXAgMjogQ29tcHV0ZSB0d28gcGFyYWxsZWwgY2FycnkgY2hhaW5zICovCistCQkiICB4b3IgJSVyMTUsICUlcjE1OyIKKysJCSIgIHhvciAlJXIxNWQsICUlcjE1ZDsiCisgCQkiICBhZG94ICUlcmF4LCAlJXIxMDsiCisgCQkiICBhZGN4ICUlcjgsICUlcjg7IgorIAkJIiAgYWRveCAlJXJjeCwgJSVyMTE7IgorQEAgLTY5Miw3ICs2OTIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZnNxcjIodTY0ICpvdXQsIGNvbnN0CisgCQkvKiBTdGVwIDE6IENvbXB1dGUgZHN0ICsgY2FycnkgPT0gdG1wX2hpICogMzggKyB0bXBfbG8gKi8KKyAJCSIgIG1vdiAkMzgsICUlcmR4OyIKKyAJCSIgIG11bHhxIDMyKCUxKSwgJSVyOCwgJSVyMTM7IgorLQkJIiAgeG9yICUlcmN4LCAlJXJjeDsiCisrCQkiICB4b3IgJSVlY3gsICUlZWN4OyIKKyAJCSIgIGFkb3hxIDAoJTEpLCAlJXI4OyIKKyAJCSIgIG11bHhxIDQwKCUxKSwgJSVyOSwgJSVyYng7IgorIAkJIiAgYWRjeCAlJXIxMywgJSVyOTsiCitAQCAtNzI1LDcgKzcyNSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmc3FyMih1NjQgKm91dCwgY29uc3QKKyAJCS8qIFN0ZXAgMTogQ29tcHV0ZSBkc3QgKyBjYXJyeSA9PSB0bXBfaGkgKiAzOCArIHRtcF9sbyAqLworIAkJIiAgbW92ICQzOCwgJSVyZHg7IgorIAkJIiAgbXVseHEgOTYoJTEpLCAlJXI4LCAlJXIxMzsiCistCQkiICB4b3IgJSVyY3gsICUlcmN4OyIKKysJCSIgIHhvciAlJWVjeCwgJSVlY3g7IgorIAkJIiAgYWRveHEgNjQoJTEpLCAlJXI4OyIKKyAJCSIgIG11bHhxIDEwNCglMSksICUlcjksICUlcmJ4OyIKKyAJCSIgIGFkY3ggJSVyMTMsICUlcjk7IgpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA2NC1jcnlwdG8tcG9seTEzMDUteDg2XzY0LVVzZS1YT1JMLXIzMi0zMi5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNjQtY3J5cHRvLXBvbHkxMzA1LXg4Nl82NC1Vc2UtWE9STC1yMzItMzIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZjYWExZQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNjQtY3J5cHRvLXBvbHkxMzA1LXg4Nl82NC1Vc2UtWE9STC1yMzItMzIucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVXJvcyBCaXpqYWsgPHViaXpqYWtAZ21haWwuY29tPgorRGF0ZTogVGh1LCAyNyBBdWcgMjAyMCAxOTozODozMSArMDIwMAorU3ViamVjdDogW1BBVENIXSBjcnlwdG86IHBvbHkxMzA1LXg4Nl82NCAtIFVzZSBYT1JMIHIzMiwzMgorCitjb21taXQgN2RmZDFlMDFiM2RmYzEzNDMxYjFiMjU3MjBjZjI2OTJhN2UxMTFlZiB1cHN0cmVhbS4KKworeDg2XzY0IHplcm8gZXh0ZW5kcyAzMmJpdCBvcGVyYXRpb25zLCBzbyBmb3IgNjRiaXQgb3BlcmFuZHMsCitYT1JMIHIzMixyMzIgaXMgZnVuY3Rpb25hbGx5IGVxdWFsIHRvIFhPUlEgcjY0LHI2NCwgYnV0IGF2b2lkcworYSBSRVggcHJlZml4IGJ5dGUgd2hlbiBsZWdhY3kgcmVnaXN0ZXJzIGFyZSB1c2VkLgorCitTaWduZWQtb2ZmLWJ5OiBVcm9zIEJpemphayA8dWJpempha0BnbWFpbC5jb20+CitDYzogSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorQ2M6ICJEYXZpZCBTLiBNaWxsZXIiIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorQWNrZWQtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorU2lnbmVkLW9mZi1ieTogSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBhcmNoL3g4Ni9jcnlwdG8vcG9seTEzMDUteDg2XzY0LWNyeXB0b2dhbXMucGwgfCA4ICsrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworLS0tIGEvYXJjaC94ODYvY3J5cHRvL3BvbHkxMzA1LXg4Nl82NC1jcnlwdG9nYW1zLnBsCisrKysgYi9hcmNoL3g4Ni9jcnlwdG8vcG9seTEzMDUteDg2XzY0LWNyeXB0b2dhbXMucGwKK0BAIC0yNDYsNyArMjQ2LDcgQEAgJGNvZGUuPTw8X19fIGlmICghJGtlcm5lbCk7CisgX19fCisgJmRlY2xhcmVfZnVuY3Rpb24oInBvbHkxMzA1X2luaXRfeDg2XzY0IiwgMzIsIDMpOworICRjb2RlLj08PF9fXzsKKy0JeG9yCSVyYXgsJXJheAorKwl4b3IJJWVheCwlZWF4CisgCW1vdgklcmF4LDAoJGN0eCkJCSMgaW5pdGlhbGl6ZSBoYXNoIHZhbHVlCisgCW1vdgklcmF4LDgoJGN0eCkKKyAJbW92CSVyYXgsMTYoJGN0eCkKK0BAIC0yODY5LDcgKzI4NjksNyBAQCAkY29kZS49PDxfX187CisgLnR5cGUJcG9seTEzMDVfaW5pdF9iYXNlMl80NCxcQGZ1bmN0aW9uLDMKKyAuYWxpZ24JMzIKKyBwb2x5MTMwNV9pbml0X2Jhc2UyXzQ0OgorLQl4b3IJJXJheCwlcmF4CisrCXhvcgklZWF4LCVlYXgKKyAJbW92CSVyYXgsMCgkY3R4KQkJIyBpbml0aWFsaXplIGhhc2ggdmFsdWUKKyAJbW92CSVyYXgsOCgkY3R4KQorIAltb3YJJXJheCwxNigkY3R4KQorQEAgLTM5NjMsNyArMzk2Myw3IEBAIHhvcjEyOF9kZWNyeXB0X25fcGFkOgorIAltb3YJXCQxNiwkbGVuCisgCXN1YgklcjEwLCRsZW4KKyAJeG9yCSVlYXgsJWVheAorLQl4b3IJJXIxMSwlcjExCisrCXhvcgklcjExZCwlcjExZAorIC5Mb29wX2RlY19ieXRlOgorIAltb3YJKCRpbnAsJG90cCksJXIxMWIKKyAJbW92CSgkb3RwKSwlYWwKK0BAIC00MTAxLDcgKzQxMDEsNyBAQCBhdnhfaGFuZGxlcjoKKyAJLmxvbmcJMHhhNTQ4ZjNmYwkJIyBjbGQ7IHJlcCBtb3ZzcQorIAorIAltb3YJJGRpc3AsJXJzaQorLQl4b3IJJXJjeCwlcmN4CQkjIGFyZzEsIFVOV19GTEFHX05IQU5ETEVSCisrCXhvcgklZWN4LCVlY3gJCSMgYXJnMSwgVU5XX0ZMQUdfTkhBTkRMRVIKKyAJbW92CTgoJXJzaSksJXJkeAkJIyBhcmcyLCBkaXNwLT5JbWFnZUJhc2UKKyAJbW92CTAoJXJzaSksJXI4CQkjIGFyZzMsIGRpc3AtPkNvbnRyb2xQYworIAltb3YJMTYoJXJzaSksJXI5CQkjIGFyZzQsIGRpc3AtPkZ1bmN0aW9uRW50cnkKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNjUtY3J5cHRvLXg4Ni1wb2x5MTMwNS1SZW1vdmUtYXNzaWdubWVudHMtd2l0aC1uby1lZmZlYy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNjUtY3J5cHRvLXg4Ni1wb2x5MTMwNS1SZW1vdmUtYXNzaWdubWVudHMtd2l0aC1uby1lZmZlYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTY0YmZlCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA2NS1jcnlwdG8teDg2LXBvbHkxMzA1LVJlbW92ZS1hc3NpZ25tZW50cy13aXRoLW5vLWVmZmVjLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KK0RhdGU6IFRodSwgMjQgU2VwIDIwMjAgMTM6Mjk6MDQgKzEwMDAKK1N1YmplY3Q6IFtQQVRDSF0gY3J5cHRvOiB4ODYvcG9seTEzMDUgLSBSZW1vdmUgYXNzaWdubWVudHMgd2l0aCBubyBlZmZlY3QKKworY29tbWl0IDRhMGMxZGU2NGJmOWQ5MDI3YTZmMTlhZGZiYTg5ZmMyNzg5M2RiMjMgdXBzdHJlYW0uCisKK1RoaXMgcGF0Y2ggcmVtb3ZlcyBhIGZldyBpbmVmZmVjdHVhbCBhc3NpZ25tZW50cyBmcm9tIHRoZSBmdW5jdGlvbgorY3J5cHRvX3BvbHkxMzA1X3NldGRjdHhrZXkuCisKK1JlcG9ydGVkLWJ5OiBrZXJuZWwgdGVzdCByb2JvdCA8bGtwQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgYXJjaC94ODYvY3J5cHRvL3BvbHkxMzA1X2dsdWUuYyB8IDMgLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgZGVsZXRpb25zKC0pCisKKy0tLSBhL2FyY2gveDg2L2NyeXB0by9wb2x5MTMwNV9nbHVlLmMKKysrKyBiL2FyY2gveDg2L2NyeXB0by9wb2x5MTMwNV9nbHVlLmMKK0BAIC0xNTcsOSArMTU3LDYgQEAgc3RhdGljIHVuc2lnbmVkIGludCBjcnlwdG9fcG9seTEzMDVfc2V0ZAorIAkJCWRjdHgtPnNbMV0gPSBnZXRfdW5hbGlnbmVkX2xlMzIoJmlucFs0XSk7CisgCQkJZGN0eC0+c1syXSA9IGdldF91bmFsaWduZWRfbGUzMigmaW5wWzhdKTsKKyAJCQlkY3R4LT5zWzNdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKCZpbnBbMTJdKTsKKy0JCQlpbnAgKz0gUE9MWTEzMDVfQkxPQ0tfU0laRTsKKy0JCQlsZW4gLT0gUE9MWTEzMDVfQkxPQ0tfU0laRTsKKy0JCQlhY2MgKz0gUE9MWTEzMDVfQkxPQ0tfU0laRTsKKyAJCQlkY3R4LT5zc2V0ID0gdHJ1ZTsKKyAJCX0KKyAJfQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA2Ni1jcnlwdG8teDg2LXBvbHkxMzA1LWFkZC1iYWNrLWEtbmVlZGVkLWFzc2lnbm1lbnQucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDY2LWNyeXB0by14ODYtcG9seTEzMDUtYWRkLWJhY2stYS1uZWVkZWQtYXNzaWdubWVudC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2U4YmI5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA2Ni1jcnlwdG8teDg2LXBvbHkxMzA1LWFkZC1iYWNrLWEtbmVlZGVkLWFzc2lnbm1lbnQucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRXJpYyBCaWdnZXJzIDxlYmlnZ2Vyc0Bnb29nbGUuY29tPgorRGF0ZTogRnJpLCAyMyBPY3QgMjAyMCAxNToyNzo0OCAtMDcwMAorU3ViamVjdDogW1BBVENIXSBjcnlwdG86IHg4Ni9wb2x5MTMwNSAtIGFkZCBiYWNrIGEgbmVlZGVkIGFzc2lnbm1lbnQKKworY29tbWl0IGMzYTk4YzNhZDVjMGRjNjBhMWFjNjZiZjkxMTQ3YTNmMzljYWM5NmIgdXBzdHJlYW0uCisKK09uZSBvZiB0aGUgYXNzaWdubWVudHMgdGhhdCB3YXMgcmVtb3ZlZCBieSBjb21taXQgNGEwYzFkZTY0YmY5ICgiY3J5cHRvOgoreDg2L3BvbHkxMzA1IC0gUmVtb3ZlIGFzc2lnbm1lbnRzIHdpdGggbm8gZWZmZWN0IikgaXMgYWN0dWFsbHkgbmVlZGVkLAorc2luY2UgaXQgYWZmZWN0cyB0aGUgcmV0dXJuIHZhbHVlLgorCitUaGlzIGZpeGVzIHRoZSBmb2xsb3dpbmcgY3J5cHRvIHNlbGYtdGVzdCBmYWlsdXJlOgorCisgICAgYWxnOiBzaGFzaDogcG9seTEzMDUtc2ltZCB0ZXN0IGZhaWxlZCAod3JvbmcgcmVzdWx0KSBvbiB0ZXN0IHZlY3RvciAyLCBjZmc9ImluaXQrdXBkYXRlK2ZpbmFsIGFsaWduZWQgYnVmZmVyIgorCitGaXhlczogNGEwYzFkZTY0YmY5ICgiY3J5cHRvOiB4ODYvcG9seTEzMDUgLSBSZW1vdmUgYXNzaWdubWVudHMgd2l0aCBubyBlZmZlY3QiKQorU2lnbmVkLW9mZi1ieTogRXJpYyBCaWdnZXJzIDxlYmlnZ2Vyc0Bnb29nbGUuY29tPgorU2lnbmVkLW9mZi1ieTogSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBhcmNoL3g4Ni9jcnlwdG8vcG9seTEzMDVfZ2x1ZS5jIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKKy0tLSBhL2FyY2gveDg2L2NyeXB0by9wb2x5MTMwNV9nbHVlLmMKKysrKyBiL2FyY2gveDg2L2NyeXB0by9wb2x5MTMwNV9nbHVlLmMKK0BAIC0xNTcsNiArMTU3LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBjcnlwdG9fcG9seTEzMDVfc2V0ZAorIAkJCWRjdHgtPnNbMV0gPSBnZXRfdW5hbGlnbmVkX2xlMzIoJmlucFs0XSk7CisgCQkJZGN0eC0+c1syXSA9IGdldF91bmFsaWduZWRfbGUzMigmaW5wWzhdKTsKKyAJCQlkY3R4LT5zWzNdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKCZpbnBbMTJdKTsKKysJCQlhY2MgKz0gUE9MWTEzMDVfQkxPQ0tfU0laRTsKKyAJCQlkY3R4LT5zc2V0ID0gdHJ1ZTsKKyAJCX0KKyAJfQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA2Ny1jcnlwdG8tS2NvbmZpZy1DUllQVE9fTUFOQUdFUl9FWFRSQV9URVNUUy1yZXF1aXJlcy10LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA2Ny1jcnlwdG8tS2NvbmZpZy1DUllQVE9fTUFOQUdFUl9FWFRSQV9URVNUUy1yZXF1aXJlcy10LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxYzQ3ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDY3LWNyeXB0by1LY29uZmlnLUNSWVBUT19NQU5BR0VSX0VYVFJBX1RFU1RTLXJlcXVpcmVzLXQucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIkphc29uIEEuIERvbmVuZmVsZCIgPEphc29uQHp4MmM0LmNvbT4KK0RhdGU6IE1vbiwgMiBOb3YgMjAyMCAxNDo0ODoxNSArMDEwMAorU3ViamVjdDogW1BBVENIXSBjcnlwdG86IEtjb25maWcgLSBDUllQVE9fTUFOQUdFUl9FWFRSQV9URVNUUyByZXF1aXJlcyB0aGUKKyBtYW5hZ2VyCisKK2NvbW1pdCA2NTY5ZTMwOTdmMWM0YTQ5MGJkZjJiMjNkMzI2ODU1ZTA0OTQyZGZkIHVwc3RyZWFtLgorCitUaGUgZXh0cmEgdGVzdHMgaW4gdGhlIG1hbmFnZXIgYWN0dWFsbHkgcmVxdWlyZSB0aGUgbWFuYWdlciB0byBiZQorc2VsZWN0ZWQgdG9vLiBPdGhlcndpc2UgdGhlIGxpbmtlciBnaXZlcyBlcnJvcnMgbGlrZToKKworbGQ6IGFyY2gveDg2L2NyeXB0by9jaGFjaGFfZ2x1ZS5vOiBpbiBmdW5jdGlvbiBgY2hhY2hhX3NpbWRfc3RyZWFtX3hvcic6CitjaGFjaGFfZ2x1ZS5jOigudGV4dCsweDQyMik6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGNyeXB0b19zaW1kX2Rpc2FibGVkX2Zvcl90ZXN0JworCitGaXhlczogMjM0M2QxNTI5YWZmICgiY3J5cHRvOiBLY29uZmlnIC0gYWxsb3cgdGVzdHMgdG8gYmUgZGlzYWJsZWQgd2hlbiBtYW5hZ2VyIGlzIGRpc2FibGVkIikKK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorU2lnbmVkLW9mZi1ieTogSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBjcnlwdG8vS2NvbmZpZyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworLS0tIGEvY3J5cHRvL0tjb25maWcKKysrKyBiL2NyeXB0by9LY29uZmlnCitAQCAtMTQ1LDcgKzE0NSw3IEBAIGNvbmZpZyBDUllQVE9fTUFOQUdFUl9ESVNBQkxFX1RFU1RTCisgCisgY29uZmlnIENSWVBUT19NQU5BR0VSX0VYVFJBX1RFU1RTCisgCWJvb2wgIkVuYWJsZSBleHRyYSBydW4tdGltZSBjcnlwdG8gc2VsZiB0ZXN0cyIKKy0JZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgIUNSWVBUT19NQU5BR0VSX0RJU0FCTEVfVEVTVFMKKysJZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgIUNSWVBUT19NQU5BR0VSX0RJU0FCTEVfVEVTVFMgJiYgQ1JZUFRPX01BTkFHRVIKKyAJaGVscAorIAkgIEVuYWJsZSBleHRyYSBydW4tdGltZSBzZWxmIHRlc3RzIG9mIHJlZ2lzdGVyZWQgY3J5cHRvIGFsZ29yaXRobXMsCisgCSAgaW5jbHVkaW5nIHJhbmRvbWl6ZWQgZnV6eiB0ZXN0cy4KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNjgtY3J5cHRvLWFybS1jaGFjaGEtbmVvbi1vcHRpbWl6ZS1mb3Itbm9uLWJsb2NrLXNpemUtbS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNjgtY3J5cHRvLWFybS1jaGFjaGEtbmVvbi1vcHRpbWl6ZS1mb3Itbm9uLWJsb2NrLXNpemUtbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzFiOGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA2OC1jcnlwdG8tYXJtLWNoYWNoYS1uZW9uLW9wdGltaXplLWZvci1ub24tYmxvY2stc2l6ZS1tLnBhdGNoCkBAIC0wLDAgKzEsMjcyIEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgorRGF0ZTogVHVlLCAzIE5vdiAyMDIwIDE3OjI4OjA5ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyeXB0bzogYXJtL2NoYWNoYS1uZW9uIC0gb3B0aW1pemUgZm9yIG5vbi1ibG9jayBzaXplCisgbXVsdGlwbGVzCisKK2NvbW1pdCA4NmNkOTdlYzRiOTQzYWYzNTU2MmE3NDY4OGJjNGU5MDliMzJjM2QxIHVwc3RyZWFtLgorCitUaGUgY3VycmVudCBORU9OIGJhc2VkIENoYUNoYSBpbXBsZW1lbnRhdGlvbiBmb3IgQVJNIGlzIG9wdGltaXplZCBmb3IKK211bHRpcGxlcyBvZiA0eCB0aGUgQ2hhQ2hhIGJsb2NrIHNpemUgKDY0IGJ5dGVzKS4gVGhpcyBtYWtlcyBzZW5zZSBmb3IKK2Jsb2NrIGVuY3J5cHRpb24sIGJ1dCBnaXZlbiB0aGF0IENoYUNoYSBpcyBhbHNvIG9mdGVuIHVzZWQgaW4gdGhlCitjb250ZXh0IG9mIG5ldHdvcmtpbmcsIGl0IG1ha2VzIHNlbnNlIHRvIGNvbnNpZGVyIGFyYml0cmFyeSBsZW5ndGgKK2lucHV0cyBhcyB3ZWxsLgorCitGb3IgZXhhbXBsZSwgV2lyZUd1YXJkIHR5cGljYWxseSB1c2VzIDE0MjAgYnl0ZSBwYWNrZXRzLCBhbmQgcGVyZm9ybWluZworQ2hhQ2hhIGVuY3J5cHRpb24gaW52b2x2ZXMgNSBpbnZvY2F0aW9ucyBvZiBjaGFjaGFfNGJsb2NrX3hvcl9uZW9uKCkKK2FuZCAzIGludm9jYXRpb25zIG9mIGNoYWNoYV9ibG9ja194b3JfbmVvbigpLCB3aGVyZSB0aGUgbGFzdCBvbmUgYWxzbworaW52b2x2ZXMgYSBtZW1jcHkoKSB1c2luZyBhIGJ1ZmZlciBvbiB0aGUgc3RhY2sgdG8gcHJvY2VzcyB0aGUgZmluYWwKK2NodW5rIG9mIDE0MjAgJSA2NCA9PSAxMiBieXRlcy4KKworTGV0J3Mgb3B0aW1pemUgZm9yIHRoaXMgY2FzZSBhcyB3ZWxsLCBieSBsZXR0aW5nIGNoYWNoYV80YmxvY2tfeG9yX25lb24oKQorZGVhbCB3aXRoIGFueSBpbnB1dCBzaXplIGJldHdlZW4gNjQgYW5kIDI1NiBieXRlcywgdXNpbmcgTkVPTiBwZXJtdXRhdGlvbgoraW5zdHJ1Y3Rpb25zIGFuZCBvdmVybGFwcGluZyBsb2FkcyBhbmQgc3RvcmVzLiBUaGlzIHdheSwgdGhlIDE0MCBieXRlCit0YWlsIG9mIGEgMTQyMCBieXRlIGlucHV0IGJ1ZmZlciBjYW4gc2ltcGx5IGJlIHByb2Nlc3NlZCBpbiBvbmUgZ28uCisKK1RoaXMgcmVzdWx0cyBpbiB0aGUgZm9sbG93aW5nIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBmb3IgMTQyMCBieXRlCitibG9ja3MsIHdpdGhvdXQgc2lnbmlmaWNhbnQgaW1wYWN0IG9uIHBvd2VyLW9mLTIgaW5wdXQgc2l6ZXMuIChOb3RlCit0aGF0IFJhc3BiZXJyeSBQaSBpcyB3aWRlbHkgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGEgMzItYml0IGtlcm5lbCwKK2V2ZW4gdGhvdWdoIHRoZSBjb3JlIGlzIDY0LWJpdCBjYXBhYmxlKQorCisgICBDb3J0ZXgtQTggIChCZWFnbGVCb25lKSAgICAgICA6ICAgNyUKKyAgIENvcnRleC1BMTUgKENhbHhlZGEgTWlkd2F5KSAgIDogIDIxJQorICAgQ29ydGV4LUE1MyAoUmFzcGJlcnJ5IFBpIDMpICAgOiAgIDMlCisgICBDb3J0ZXgtQTcyIChSYXNwYmVycnkgUGkgNCkgICA6ICAxOSUKKworQ2M6IEVyaWMgQmlnZ2VycyA8ZWJpZ2dlcnNAZ29vZ2xlLmNvbT4KK0NjOiAiSmFzb24gQSAuIERvbmVuZmVsZCIgPEphc29uQHp4MmM0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IEFyZCBCaWVzaGV1dmVsIDxhcmRiQGtlcm5lbC5vcmc+CitTaWduZWQtb2ZmLWJ5OiBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGFyY2gvYXJtL2NyeXB0by9jaGFjaGEtZ2x1ZS5jICAgICAgfCAzNCArKysrKy0tLS0tLQorIGFyY2gvYXJtL2NyeXB0by9jaGFjaGEtbmVvbi1jb3JlLlMgfCA5NyArKysrKysrKysrKysrKysrKysrKysrKysrKystLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDEwNyBpbnNlcnRpb25zKCspLCAyNCBkZWxldGlvbnMoLSkKKworLS0tIGEvYXJjaC9hcm0vY3J5cHRvL2NoYWNoYS1nbHVlLmMKKysrKyBiL2FyY2gvYXJtL2NyeXB0by9jaGFjaGEtZ2x1ZS5jCitAQCAtMjMsNyArMjMsNyBAQAorIGFzbWxpbmthZ2Ugdm9pZCBjaGFjaGFfYmxvY2tfeG9yX25lb24oY29uc3QgdTMyICpzdGF0ZSwgdTggKmRzdCwgY29uc3QgdTggKnNyYywKKyAJCQkJICAgICAgaW50IG5yb3VuZHMpOworIGFzbWxpbmthZ2Ugdm9pZCBjaGFjaGFfNGJsb2NrX3hvcl9uZW9uKGNvbnN0IHUzMiAqc3RhdGUsIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsCistCQkJCSAgICAgICBpbnQgbnJvdW5kcyk7CisrCQkJCSAgICAgICBpbnQgbnJvdW5kcywgdW5zaWduZWQgaW50IG5ieXRlcyk7CisgYXNtbGlua2FnZSB2b2lkIGhjaGFjaGFfYmxvY2tfYXJtKGNvbnN0IHUzMiAqc3RhdGUsIHUzMiAqb3V0LCBpbnQgbnJvdW5kcyk7CisgYXNtbGlua2FnZSB2b2lkIGhjaGFjaGFfYmxvY2tfbmVvbihjb25zdCB1MzIgKnN0YXRlLCB1MzIgKm91dCwgaW50IG5yb3VuZHMpOworIAorQEAgLTQyLDI0ICs0MiwyNCBAQCBzdGF0aWMgdm9pZCBjaGFjaGFfZG9uZW9uKHUzMiAqc3RhdGUsIHU4CisgeworIAl1OCBidWZbQ0hBQ0hBX0JMT0NLX1NJWkVdOworIAorLQl3aGlsZSAoYnl0ZXMgPj0gQ0hBQ0hBX0JMT0NLX1NJWkUgKiA0KSB7CistCQljaGFjaGFfNGJsb2NrX3hvcl9uZW9uKHN0YXRlLCBkc3QsIHNyYywgbnJvdW5kcyk7CistCQlieXRlcyAtPSBDSEFDSEFfQkxPQ0tfU0laRSAqIDQ7CistCQlzcmMgKz0gQ0hBQ0hBX0JMT0NLX1NJWkUgKiA0OworLQkJZHN0ICs9IENIQUNIQV9CTE9DS19TSVpFICogNDsKKy0JCXN0YXRlWzEyXSArPSA0OworLQl9CistCXdoaWxlIChieXRlcyA+PSBDSEFDSEFfQkxPQ0tfU0laRSkgeworLQkJY2hhY2hhX2Jsb2NrX3hvcl9uZW9uKHN0YXRlLCBkc3QsIHNyYywgbnJvdW5kcyk7CistCQlieXRlcyAtPSBDSEFDSEFfQkxPQ0tfU0laRTsKKy0JCXNyYyArPSBDSEFDSEFfQkxPQ0tfU0laRTsKKy0JCWRzdCArPSBDSEFDSEFfQkxPQ0tfU0laRTsKKy0JCXN0YXRlWzEyXSsrOworKwl3aGlsZSAoYnl0ZXMgPiBDSEFDSEFfQkxPQ0tfU0laRSkgeworKwkJdW5zaWduZWQgaW50IGwgPSBtaW4oYnl0ZXMsIENIQUNIQV9CTE9DS19TSVpFICogNFUpOworKworKwkJY2hhY2hhXzRibG9ja194b3JfbmVvbihzdGF0ZSwgZHN0LCBzcmMsIG5yb3VuZHMsIGwpOworKwkJYnl0ZXMgLT0gbDsKKysJCXNyYyArPSBsOworKwkJZHN0ICs9IGw7CisrCQlzdGF0ZVsxMl0gKz0gRElWX1JPVU5EX1VQKGwsIENIQUNIQV9CTE9DS19TSVpFKTsKKyAJfQorIAlpZiAoYnl0ZXMpIHsKKy0JCW1lbWNweShidWYsIHNyYywgYnl0ZXMpOworLQkJY2hhY2hhX2Jsb2NrX3hvcl9uZW9uKHN0YXRlLCBidWYsIGJ1ZiwgbnJvdW5kcyk7CistCQltZW1jcHkoZHN0LCBidWYsIGJ5dGVzKTsKKysJCWNvbnN0IHU4ICpzID0gc3JjOworKwkJdTggKmQgPSBkc3Q7CisrCisrCQlpZiAoYnl0ZXMgIT0gQ0hBQ0hBX0JMT0NLX1NJWkUpCisrCQkJcyA9IGQgPSBtZW1jcHkoYnVmLCBzcmMsIGJ5dGVzKTsKKysJCWNoYWNoYV9ibG9ja194b3JfbmVvbihzdGF0ZSwgZCwgcywgbnJvdW5kcyk7CisrCQlpZiAoZCAhPSBkc3QpCisrCQkJbWVtY3B5KGRzdCwgYnVmLCBieXRlcyk7CisgCX0KKyB9CisgCistLS0gYS9hcmNoL2FybS9jcnlwdG8vY2hhY2hhLW5lb24tY29yZS5TCisrKysgYi9hcmNoL2FybS9jcnlwdG8vY2hhY2hhLW5lb24tY29yZS5TCitAQCAtNDcsNiArNDcsNyBAQAorICAgKi8KKyAKKyAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorKyNpbmNsdWRlIDxhc20vY2FjaGUuaD4KKyAKKyAJLnRleHQKKyAJLmZwdQkJbmVvbgorQEAgLTIwNSw3ICsyMDYsNyBAQCBFTkRQUk9DKGhjaGFjaGFfYmxvY2tfbmVvbikKKyAKKyAJLmFsaWduCQk1CisgRU5UUlkoY2hhY2hhXzRibG9ja194b3JfbmVvbikKKy0JcHVzaAkJe3I0LXI1fQorKwlwdXNoCQl7cjQsIGxyfQorIAltb3YJCXI0LCBzcAkJCS8vIHByZXNlcnZlIHRoZSBzdGFjayBwb2ludGVyCisgCXN1YgkJaXAsIHNwLCAjMHgyMAkJLy8gYWxsb2NhdGUgYSAzMiBieXRlIGJ1ZmZlcgorIAliaWMJCWlwLCBpcCwgIzB4MWYJCS8vIGFsaWduZWQgdG8gMzIgYnl0ZXMKK0BAIC0yMjksMTAgKzIzMCwxMCBAQCBFTlRSWShjaGFjaGFfNGJsb2NrX3hvcl9uZW9uKQorIAl2bGQxLjMyCQl7cTAtcTF9LCBbcjBdCisgCXZsZDEuMzIJCXtxMi1xM30sIFtpcF0KKyAKKy0JYWRyCQlyNSwgLkxjdHJpbmMKKysJYWRyCQlsciwgLkxjdHJpbmMKKyAJdmR1cC4zMgkJcTE1LCBkN1sxXQorIAl2ZHVwLjMyCQlxMTQsIGQ3WzBdCistCXZsZDEuMzIJCXtxNH0sIFtyNSwgOjEyOF0KKysJdmxkMS4zMgkJe3E0fSwgW2xyLCA6MTI4XQorIAl2ZHVwLjMyCQlxMTMsIGQ2WzFdCisgCXZkdXAuMzIJCXExMiwgZDZbMF0KKyAJdmR1cC4zMgkJcTExLCBkNVsxXQorQEAgLTQ1NSw3ICs0NTYsNyBAQCBFTlRSWShjaGFjaGFfNGJsb2NrX3hvcl9uZW9uKQorIAorIAkvLyBSZS1pbnRlcmxlYXZlIHRoZSB3b3JkcyBpbiB0aGUgZmlyc3QgdHdvIHJvd3Mgb2YgZWFjaCBibG9jayAoeDAuLjcpLgorIAkvLyBBbHNvIGFkZCB0aGUgY291bnRlciB2YWx1ZXMgMC0zIHRvIHgxMlswLTNdLgorLQkgIHZsZDEuMzIJe3E4fSwgW3I1LCA6MTI4XQkvLyBsb2FkIGNvdW50ZXIgdmFsdWVzIDAtMworKwkgIHZsZDEuMzIJe3E4fSwgW2xyLCA6MTI4XQkvLyBsb2FkIGNvdW50ZXIgdmFsdWVzIDAtMworIAl2emlwLjMyCQlxMCwgcTEJCQkvLyA9PiAoMCAxIDAgMSkgKDAgMSAwIDEpCisgCXZ6aXAuMzIJCXEyLCBxMwkJCS8vID0+ICgyIDMgMiAzKSAoMiAzIDIgMykKKyAJdnppcC4zMgkJcTQsIHE1CQkJLy8gPT4gKDQgNSA0IDUpICg0IDUgNCA1KQorQEAgLTQ5Myw2ICs0OTQsOCBAQCBFTlRSWShjaGFjaGFfNGJsb2NrX3hvcl9uZW9uKQorIAorIAkvLyBSZS1pbnRlcmxlYXZlIHRoZSB3b3JkcyBpbiB0aGUgbGFzdCB0d28gcm93cyBvZiBlYWNoIGJsb2NrICh4OC4uMTUpLgorIAl2bGQxLjMyCQl7cTgtcTl9LCBbc3AsIDoyNTZdCisrCSAgbW92CQlzcCwgcjQJCS8vIHJlc3RvcmUgb3JpZ2luYWwgc3RhY2sgcG9pbnRlcgorKwkgIGxkcgkJcjQsIFtyNCwgIzhdCS8vIGxvYWQgbnVtYmVyIG9mIGJ5dGVzCisgCXZ6aXAuMzIJCXExMiwgcTEzCS8vID0+ICgxMiAxMyAxMiAxMykgKDEyIDEzIDEyIDEzKQorIAl2emlwLjMyCQlxMTQsIHExNQkvLyA9PiAoMTQgMTUgMTQgMTUpICgxNCAxNSAxNCAxNSkKKyAJdnppcC4zMgkJcTgsIHE5CQkvLyA9PiAoOCA5IDggOSkgKDggOSA4IDkpCitAQCAtNTIwLDQxICs1MjMsMTIxIEBAIEVOVFJZKGNoYWNoYV80YmxvY2tfeG9yX25lb24pCisgCS8vIFhPUiB0aGUgcmVzdCBvZiB0aGUgZGF0YSB3aXRoIHRoZSBrZXlzdHJlYW0KKyAKKyAJdmxkMS44CQl7cTAtcTF9LCBbcjJdIQorKwlzdWJzCQlyNCwgcjQsICM5NgorIAl2ZW9yCQlxMCwgcTAsIHE4CisgCXZlb3IJCXExLCBxMSwgcTEyCisrCWJsZQkJLkxsZTk2CisgCXZzdDEuOAkJe3EwLXExfSwgW3IxXSEKKyAKKyAJdmxkMS44CQl7cTAtcTF9LCBbcjJdIQorKwlzdWJzCQlyNCwgcjQsICMzMgorIAl2ZW9yCQlxMCwgcTAsIHEyCisgCXZlb3IJCXExLCBxMSwgcTYKKysJYmxlCQkuTGxlMTI4CisgCXZzdDEuOAkJe3EwLXExfSwgW3IxXSEKKyAKKyAJdmxkMS44CQl7cTAtcTF9LCBbcjJdIQorKwlzdWJzCQlyNCwgcjQsICMzMgorIAl2ZW9yCQlxMCwgcTAsIHExMAorIAl2ZW9yCQlxMSwgcTEsIHExNAorKwlibGUJCS5MbGUxNjAKKyAJdnN0MS44CQl7cTAtcTF9LCBbcjFdIQorIAorIAl2bGQxLjgJCXtxMC1xMX0sIFtyMl0hCisrCXN1YnMJCXI0LCByNCwgIzMyCisgCXZlb3IJCXEwLCBxMCwgcTQKKyAJdmVvcgkJcTEsIHExLCBxNQorKwlibGUJCS5MbGUxOTIKKyAJdnN0MS44CQl7cTAtcTF9LCBbcjFdIQorIAorIAl2bGQxLjgJCXtxMC1xMX0sIFtyMl0hCisrCXN1YnMJCXI0LCByNCwgIzMyCisgCXZlb3IJCXEwLCBxMCwgcTkKKyAJdmVvcgkJcTEsIHExLCBxMTMKKysJYmxlCQkuTGxlMjI0CisgCXZzdDEuOAkJe3EwLXExfSwgW3IxXSEKKyAKKyAJdmxkMS44CQl7cTAtcTF9LCBbcjJdIQorKwlzdWJzCQlyNCwgcjQsICMzMgorIAl2ZW9yCQlxMCwgcTAsIHEzCisgCXZlb3IJCXExLCBxMSwgcTcKKysJYmx0CQkuTGx0MjU2CisrLkxvdXQ6CisgCXZzdDEuOAkJe3EwLXExfSwgW3IxXSEKKyAKKyAJdmxkMS44CQl7cTAtcTF9LCBbcjJdCistCSAgbW92CQlzcCwgcjQJCS8vIHJlc3RvcmUgb3JpZ2luYWwgc3RhY2sgcG9pbnRlcgorIAl2ZW9yCQlxMCwgcTAsIHExMQorIAl2ZW9yCQlxMSwgcTEsIHExNQorIAl2c3QxLjgJCXtxMC1xMX0sIFtyMV0KKyAKKy0JcG9wCQl7cjQtcjV9CistCWJ4CQlscgorKwlwb3AJCXtyNCwgcGN9CisrCisrLkxsZTE5MjoKKysJdm1vdgkJcTQsIHE5CisrCXZtb3YJCXE1LCBxMTMKKysKKysuTGxlMTYwOgorKwkvLyBub3RoaW5nIHRvIGRvCisrCisrLkxmaW5hbGJsb2NrOgorKwkvLyBQcm9jZXNzIHRoZSBmaW5hbCBibG9jayBpZiBwcm9jZXNzaW5nIGxlc3MgdGhhbiA0IGZ1bGwgYmxvY2tzLgorKwkvLyBFbnRlcmVkIHdpdGggMzIgYnl0ZXMgb2YgQ2hhQ2hhIGNpcGhlciBzdHJlYW0gaW4gcTQtcTUsIGFuZCB0aGUKKysJLy8gcHJldmlvdXMgMzIgYnl0ZSBvdXRwdXQgYmxvY2sgdGhhdCBzdGlsbCBuZWVkcyB0byBiZSB3cml0dGVuIGF0CisrCS8vIFtyMV0gaW4gcTAtcTEuCisrCWJlcQkJLkxmdWxsYmxvY2sKKysKKysuTHBhcnRpYWxibG9jazoKKysJYWRyCQlsciwgLkxwZXJtdXRlICsgMzIKKysJYWRkCQlyMiwgcjIsIHI0CisrCWFkZAkJbHIsIGxyLCByNAorKwlhZGQJCXI0LCByNCwgcjEKKysKKysJdmxkMS44CQl7cTItcTN9LCBbbHJdCisrCXZsZDEuOAkJe3E2LXE3fSwgW3IyXQorKworKwlhZGQJCXI0LCByNCwgIzMyCisrCisrCXZ0YmwuOAkJZDQsIHtxNC1xNX0sIGQ0CisrCXZ0YmwuOAkJZDUsIHtxNC1xNX0sIGQ1CisrCXZ0YmwuOAkJZDYsIHtxNC1xNX0sIGQ2CisrCXZ0YmwuOAkJZDcsIHtxNC1xNX0sIGQ3CisrCisrCXZlb3IJCXE2LCBxNiwgcTIKKysJdmVvcgkJcTcsIHE3LCBxMworKworKwl2c3QxLjgJCXtxNi1xN30sIFtyNF0JLy8gb3ZlcmxhcHBpbmcgc3RvcmVzCisrCXZzdDEuOAkJe3EwLXExfSwgW3IxXQorKwlwb3AJCXtyNCwgcGN9CisrCisrLkxmdWxsYmxvY2s6CisrCXZtb3YJCXExMSwgcTQKKysJdm1vdgkJcTE1LCBxNQorKwliCQkuTG91dAorKy5MbGU5NjoKKysJdm1vdgkJcTQsIHEyCisrCXZtb3YJCXE1LCBxNgorKwliCQkuTGZpbmFsYmxvY2sKKysuTGxlMTI4OgorKwl2bW92CQlxNCwgcTEwCisrCXZtb3YJCXE1LCBxMTQKKysJYgkJLkxmaW5hbGJsb2NrCisrLkxsZTIyNDoKKysJdm1vdgkJcTQsIHEzCisrCXZtb3YJCXE1LCBxNworKwliCQkuTGZpbmFsYmxvY2sKKysuTGx0MjU2OgorKwl2bW92CQlxNCwgcTExCisrCXZtb3YJCXE1LCBxMTUKKysJYgkJLkxwYXJ0aWFsYmxvY2sKKyBFTkRQUk9DKGNoYWNoYV80YmxvY2tfeG9yX25lb24pCisrCisrCS5hbGlnbgkJTDFfQ0FDSEVfU0hJRlQKKysuTHBlcm11dGU6CisrCS5ieXRlCQkweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3CisrCS5ieXRlCQkweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmCisrCS5ieXRlCQkweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3CisrCS5ieXRlCQkweDE4LCAweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmCisrCS5ieXRlCQkweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3CisrCS5ieXRlCQkweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmCisrCS5ieXRlCQkweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3CisrCS5ieXRlCQkweDE4LCAweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDY5LWNyeXB0by1hcm02NC1jaGFjaGEtc2ltcGxpZnktdGFpbC1ibG9jay1oYW5kbGluZy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNjktY3J5cHRvLWFybTY0LWNoYWNoYS1zaW1wbGlmeS10YWlsLWJsb2NrLWhhbmRsaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZTkwNDgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDY5LWNyeXB0by1hcm02NC1jaGFjaGEtc2ltcGxpZnktdGFpbC1ibG9jay1oYW5kbGluZy5wYXRjaApAQCAtMCwwICsxLDMyNCBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQXJkIEJpZXNoZXV2ZWwgPGFyZGJAa2VybmVsLm9yZz4KK0RhdGU6IEZyaSwgNiBOb3YgMjAyMCAxNzozOTozOCArMDEwMAorU3ViamVjdDogW1BBVENIXSBjcnlwdG86IGFybTY0L2NoYWNoYSAtIHNpbXBsaWZ5IHRhaWwgYmxvY2sgaGFuZGxpbmcKKworY29tbWl0IGM0ZmM2MzI4ZDZjNjc2OTBhN2U2ZTAzZjQzYTVhOTc2YTEzMTIwZWYgdXBzdHJlYW0uCisKK0Jhc2VkIG9uIGxlc3NvbnMgbGVhcm50IGZyb20gb3B0aW1pemluZyB0aGUgMzItYml0IHZlcnNpb24gb2YgdGhpcyBkcml2ZXIsCit3ZSBjYW4gc2ltcGxpZnkgdGhlIGFybTY0IHZlcnNpb24gY29uc2lkZXJhYmx5LCBieSByZW9yZGVyaW5nIHRoZSBmaW5hbAordHdvIHN0b3JlcyB3aGVuIHRoZSBsYXN0IGJsb2NrIGlzIG5vdCBhIG11bHRpcGxlIG9mIDY0IGJ5dGVzLiBUaGlzIHJlbW92ZXMKK3RoZSBuZWVkIHRvIHVzZSBwZXJtdXRhdGlvbiBpbnN0cnVjdGlvbnMgdG8gY2FsY3VsYXRlIHRoZSBlbGVtZW50cyB0aGF0IGFyZQorY2xvYmJlcmVkIGJ5IHRoZSBmaW5hbCBvdmVybGFwcGluZyBzdG9yZSwgZ2l2ZW4gdGhhdCB0aGUgc3RvcmUgb2YgdGhlCitwZW51bHRpbWF0ZSBibG9jayBub3cgZm9sbG93cyBpdCwgYW5kIHRoYXQgb25lIGNhcnJpZXMgdGhlIGNvcnJlY3QgdmFsdWVzCitmb3IgdGhvc2UgZWxlbWVudHMgYWxyZWFkeS4KKworV2hpbGUgYXQgaXQsIHNpbXBsaWZ5IHRoZSBvdmVybGFwcGluZyBsb2FkcyBhcyB3ZWxsLCBieSBjYWxjdWxhdGluZyB0aGUKK2FkZHJlc3Mgb2YgdGhlIGZpbmFsIG92ZXJsYXBwaW5nIGxvYWQgdXBmcm9udCwgYW5kIHN3aXRjaGluZyB0byB0aGlzCithZGRyZXNzIGZvciBldmVyeSBsb2FkIHRoYXQgd291bGQgb3RoZXJ3aXNlIGV4dGVuZCBwYXN0IHRoZSBlbmQgb2YgdGhlCitzb3VyY2UgYnVmZmVyLgorCitUaGVyZSBpcyBubyBpbXBhY3Qgb24gcGVyZm9ybWFuY2UsIGJ1dCB0aGUgcmVzdWx0aW5nIGNvZGUgaXMgc3Vic3RhbnRpYWxseQorc21hbGxlciBhbmQgZWFzaWVyIHRvIGZvbGxvdy4KKworQ2M6IEVyaWMgQmlnZ2VycyA8ZWJpZ2dlcnNAZ29vZ2xlLmNvbT4KK0NjOiAiSmFzb24gQSAuIERvbmVuZmVsZCIgPEphc29uQHp4MmM0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IEFyZCBCaWVzaGV1dmVsIDxhcmRiQGtlcm5lbC5vcmc+CitTaWduZWQtb2ZmLWJ5OiBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGFyY2gvYXJtNjQvY3J5cHRvL2NoYWNoYS1uZW9uLWNvcmUuUyB8IDE5MyArKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNjkgaW5zZXJ0aW9ucygrKSwgMTI0IGRlbGV0aW9ucygtKQorCistLS0gYS9hcmNoL2FybTY0L2NyeXB0by9jaGFjaGEtbmVvbi1jb3JlLlMKKysrKyBiL2FyY2gvYXJtNjQvY3J5cHRvL2NoYWNoYS1uZW9uLWNvcmUuUworQEAgLTE5NSw3ICsxOTUsNiBAQCBFTlRSWShjaGFjaGFfNGJsb2NrX3hvcl9uZW9uKQorIAlhZHJfbAkJeDEwLCAuTHBlcm11dGUKKyAJYW5kCQl4NSwgeDQsICM2MworIAlhZGQJCXgxMCwgeDEwLCB4NQorLQlhZGQJCXgxMSwgeDEwLCAjNjQKKyAKKyAJLy8KKyAJLy8gVGhpcyBmdW5jdGlvbiBlbmNyeXB0cyBmb3VyIGNvbnNlY3V0aXZlIENoYUNoYSBibG9ja3MgYnkgbG9hZGluZworQEAgLTY0NSwxMSArNjQ0LDExIEBAIENQVV9CRSgJICByZXYJCWExNSwgYTE1CSkKKyAJemlwMgkJdjMxLjRzLCB2MTQuNHMsIHYxNS40cworIAkgIGVvcgkJYTE1LCBhMTUsIHc5CisgCistCW1vdgkJeDMsICM2NAorKwlhZGQJCXgzLCB4MiwgeDQKKysJc3ViCQl4MywgeDMsICMxMjgJCS8vIHN0YXJ0IG9mIGxhc3QgYmxvY2sKKysKKyAJc3VicwkJeDUsIHg0LCAjMTI4CistCWFkZAkJeDYsIHg1LCB4MgorLQljc2VsCQl4MywgeDMsIHh6ciwgZ2UKKy0JY3NlbAkJeDIsIHgyLCB4NiwgZ2UKKysJY3NlbAkJeDIsIHgyLCB4MywgZ2UKKyAKKyAJLy8gaW50ZXJsZWF2ZSA2NC1iaXQgd29yZHMgaW4gc3RhdGUgbiwgbisyCisgCXppcDEJCXYwLjJkLCB2MTYuMmQsIHYxOC4yZAorQEAgLTY1OCwxMyArNjU3LDEwIEBAIENQVV9CRSgJICByZXYJCWExNSwgYTE1CSkKKyAJemlwMQkJdjguMmQsIHYxNy4yZCwgdjE5LjJkCisgCXppcDIJCXYxMi4yZCwgdjE3LjJkLCB2MTkuMmQKKyAJICBzdHAJCWEyLCBhMywgW3gxLCAjLTU2XQorLQlsZDEJCXt2MTYuMTZiLXYxOS4xNmJ9LCBbeDJdLCB4MworIAorIAlzdWJzCQl4NiwgeDQsICMxOTIKKy0JY2NtcAkJeDMsIHh6ciwgIzQsIGx0CistCWFkZAkJeDcsIHg2LCB4MgorLQljc2VsCQl4MywgeDMsIHh6ciwgZXEKKy0JY3NlbAkJeDIsIHgyLCB4NywgZXEKKysJbGQxCQl7djE2LjE2Yi12MTkuMTZifSwgW3gyXSwgIzY0CisrCWNzZWwJCXgyLCB4MiwgeDMsIGdlCisgCisgCXppcDEJCXYxLjJkLCB2MjAuMmQsIHYyMi4yZAorIAl6aXAyCQl2NS4yZCwgdjIwLjJkLCB2MjIuMmQKK0BAIC02NzIsMTMgKzY2OCwxMCBAQCBDUFVfQkUoCSAgcmV2CQlhMTUsIGExNQkpCisgCXppcDEJCXY5LjJkLCB2MjEuMmQsIHYyMy4yZAorIAl6aXAyCQl2MTMuMmQsIHYyMS4yZCwgdjIzLjJkCisgCSAgc3RwCQlhNiwgYTcsIFt4MSwgIy00MF0KKy0JbGQxCQl7djIwLjE2Yi12MjMuMTZifSwgW3gyXSwgeDMKKyAKKyAJc3VicwkJeDcsIHg0LCAjMjU2CistCWNjbXAJCXgzLCB4enIsICM0LCBsdAorLQlhZGQJCXg4LCB4NywgeDIKKy0JY3NlbAkJeDMsIHgzLCB4enIsIGVxCistCWNzZWwJCXgyLCB4MiwgeDgsIGVxCisrCWxkMQkJe3YyMC4xNmItdjIzLjE2Yn0sIFt4Ml0sICM2NAorKwljc2VsCQl4MiwgeDIsIHgzLCBnZQorIAorIAl6aXAxCQl2Mi4yZCwgdjI0LjJkLCB2MjYuMmQKKyAJemlwMgkJdjYuMmQsIHYyNC4yZCwgdjI2LjJkCitAQCAtNjg2LDEyICs2NzksMTAgQEAgQ1BVX0JFKAkgIHJldgkJYTE1LCBhMTUJKQorIAl6aXAxCQl2MTAuMmQsIHYyNS4yZCwgdjI3LjJkCisgCXppcDIJCXYxNC4yZCwgdjI1LjJkLCB2MjcuMmQKKyAJICBzdHAJCWExMCwgYTExLCBbeDEsICMtMjRdCistCWxkMQkJe3YyNC4xNmItdjI3LjE2Yn0sIFt4Ml0sIHgzCisgCisgCXN1YnMJCXg4LCB4NCwgIzMyMAorLQljY21wCQl4MywgeHpyLCAjNCwgbHQKKy0JYWRkCQl4OSwgeDgsIHgyCistCWNzZWwJCXgyLCB4MiwgeDksIGVxCisrCWxkMQkJe3YyNC4xNmItdjI3LjE2Yn0sIFt4Ml0sICM2NAorKwljc2VsCQl4MiwgeDIsIHgzLCBnZQorIAorIAl6aXAxCQl2My4yZCwgdjI4LjJkLCB2MzAuMmQKKyAJemlwMgkJdjcuMmQsIHYyOC4yZCwgdjMwLjJkCitAQCAtNjk5LDE1MSArNjkwLDEwNSBAQCBDUFVfQkUoCSAgcmV2CQlhMTUsIGExNQkpCisgCXppcDEJCXYxMS4yZCwgdjI5LjJkLCB2MzEuMmQKKyAJemlwMgkJdjE1LjJkLCB2MjkuMmQsIHYzMS4yZAorIAkgIHN0cAkJYTE0LCBhMTUsIFt4MSwgIy04XQorKworKwl0Ym56CQl4NSwgIzYzLCAuTHQxMjgKKyAJbGQxCQl7djI4LjE2Yi12MzEuMTZifSwgW3gyXQorIAorIAkvLyB4b3Igd2l0aCBjb3JyZXNwb25kaW5nIGlucHV0LCB3cml0ZSB0byBvdXRwdXQKKy0JdGJuegkJeDUsICM2MywgMGYKKyAJZW9yCQl2MTYuMTZiLCB2MTYuMTZiLCB2MC4xNmIKKyAJZW9yCQl2MTcuMTZiLCB2MTcuMTZiLCB2MS4xNmIKKyAJZW9yCQl2MTguMTZiLCB2MTguMTZiLCB2Mi4xNmIKKyAJZW9yCQl2MTkuMTZiLCB2MTkuMTZiLCB2My4xNmIKKy0Jc3QxCQl7djE2LjE2Yi12MTkuMTZifSwgW3gxXSwgIzY0CistCWNiegkJeDUsIC5Mb3V0CisgCistCXRibnoJCXg2LCAjNjMsIDFmCisrCXRibnoJCXg2LCAjNjMsIC5MdDE5MgorKworIAllb3IJCXYyMC4xNmIsIHYyMC4xNmIsIHY0LjE2YgorIAllb3IJCXYyMS4xNmIsIHYyMS4xNmIsIHY1LjE2YgorIAllb3IJCXYyMi4xNmIsIHYyMi4xNmIsIHY2LjE2YgorIAllb3IJCXYyMy4xNmIsIHYyMy4xNmIsIHY3LjE2YgorLQlzdDEJCXt2MjAuMTZiLXYyMy4xNmJ9LCBbeDFdLCAjNjQKKy0JY2J6CQl4NiwgLkxvdXQKKyAKKy0JdGJuegkJeDcsICM2MywgMmYKKysJc3QxCQl7djE2LjE2Yi12MTkuMTZifSwgW3gxXSwgIzY0CisrCXRibnoJCXg3LCAjNjMsIC5MdDI1NgorKworIAllb3IJCXYyNC4xNmIsIHYyNC4xNmIsIHY4LjE2YgorIAllb3IJCXYyNS4xNmIsIHYyNS4xNmIsIHY5LjE2YgorIAllb3IJCXYyNi4xNmIsIHYyNi4xNmIsIHYxMC4xNmIKKyAJZW9yCQl2MjcuMTZiLCB2MjcuMTZiLCB2MTEuMTZiCistCXN0MQkJe3YyNC4xNmItdjI3LjE2Yn0sIFt4MV0sICM2NAorLQljYnoJCXg3LCAuTG91dAorIAorLQl0Ym56CQl4OCwgIzYzLCAzZgorKwlzdDEJCXt2MjAuMTZiLXYyMy4xNmJ9LCBbeDFdLCAjNjQKKysJdGJuegkJeDgsICM2MywgLkx0MzIwCisrCisgCWVvcgkJdjI4LjE2YiwgdjI4LjE2YiwgdjEyLjE2YgorIAllb3IJCXYyOS4xNmIsIHYyOS4xNmIsIHYxMy4xNmIKKyAJZW9yCQl2MzAuMTZiLCB2MzAuMTZiLCB2MTQuMTZiCisgCWVvcgkJdjMxLjE2YiwgdjMxLjE2YiwgdjE1LjE2YgorKworKwlzdDEJCXt2MjQuMTZiLXYyNy4xNmJ9LCBbeDFdLCAjNjQKKyAJc3QxCQl7djI4LjE2Yi12MzEuMTZifSwgW3gxXQorIAorIC5Mb3V0OglmcmFtZV9wb3AKKyAJcmV0CisgCistCS8vIGZld2VyIHRoYW4gMTI4IGJ5dGVzIG9mIGluL291dHB1dAorLTA6CWxkMQkJe3Y4LjE2Yn0sIFt4MTBdCistCWxkMQkJe3Y5LjE2Yn0sIFt4MTFdCistCW1vdmkJCXYxMC4xNmIsICMxNgorLQlzdWIJCXgyLCB4MSwgIzY0CistCWFkZAkJeDEsIHgxLCB4NQorLQlsZDEJCXt2MTYuMTZiLXYxOS4xNmJ9LCBbeDJdCistCXRibAkJdjQuMTZiLCB7djAuMTZiLXYzLjE2Yn0sIHY4LjE2YgorLQl0YngJCXYyMC4xNmIsIHt2MTYuMTZiLXYxOS4xNmJ9LCB2OS4xNmIKKy0JYWRkCQl2OC4xNmIsIHY4LjE2YiwgdjEwLjE2YgorLQlhZGQJCXY5LjE2YiwgdjkuMTZiLCB2MTAuMTZiCistCXRibAkJdjUuMTZiLCB7djAuMTZiLXYzLjE2Yn0sIHY4LjE2YgorLQl0YngJCXYyMS4xNmIsIHt2MTYuMTZiLXYxOS4xNmJ9LCB2OS4xNmIKKy0JYWRkCQl2OC4xNmIsIHY4LjE2YiwgdjEwLjE2YgorLQlhZGQJCXY5LjE2YiwgdjkuMTZiLCB2MTAuMTZiCistCXRibAkJdjYuMTZiLCB7djAuMTZiLXYzLjE2Yn0sIHY4LjE2YgorLQl0YngJCXYyMi4xNmIsIHt2MTYuMTZiLXYxOS4xNmJ9LCB2OS4xNmIKKy0JYWRkCQl2OC4xNmIsIHY4LjE2YiwgdjEwLjE2YgorLQlhZGQJCXY5LjE2YiwgdjkuMTZiLCB2MTAuMTZiCistCXRibAkJdjcuMTZiLCB7djAuMTZiLXYzLjE2Yn0sIHY4LjE2YgorLQl0YngJCXYyMy4xNmIsIHt2MTYuMTZiLXYxOS4xNmJ9LCB2OS4xNmIKKy0KKy0JZW9yCQl2MjAuMTZiLCB2MjAuMTZiLCB2NC4xNmIKKy0JZW9yCQl2MjEuMTZiLCB2MjEuMTZiLCB2NS4xNmIKKy0JZW9yCQl2MjIuMTZiLCB2MjIuMTZiLCB2Ni4xNmIKKy0JZW9yCQl2MjMuMTZiLCB2MjMuMTZiLCB2Ny4xNmIKKy0Jc3QxCQl7djIwLjE2Yi12MjMuMTZifSwgW3gxXQorLQliCQkuTG91dAorLQorIAkvLyBmZXdlciB0aGFuIDE5MiBieXRlcyBvZiBpbi9vdXRwdXQKKy0xOglsZDEJCXt2OC4xNmJ9LCBbeDEwXQorLQlsZDEJCXt2OS4xNmJ9LCBbeDExXQorLQltb3ZpCQl2MTAuMTZiLCAjMTYKKy0JYWRkCQl4MSwgeDEsIHg2CistCXRibAkJdjAuMTZiLCB7djQuMTZiLXY3LjE2Yn0sIHY4LjE2YgorLQl0YngJCXYyMC4xNmIsIHt2MTYuMTZiLXYxOS4xNmJ9LCB2OS4xNmIKKy0JYWRkCQl2OC4xNmIsIHY4LjE2YiwgdjEwLjE2YgorLQlhZGQJCXY5LjE2YiwgdjkuMTZiLCB2MTAuMTZiCistCXRibAkJdjEuMTZiLCB7djQuMTZiLXY3LjE2Yn0sIHY4LjE2YgorLQl0YngJCXYyMS4xNmIsIHt2MTYuMTZiLXYxOS4xNmJ9LCB2OS4xNmIKKy0JYWRkCQl2OC4xNmIsIHY4LjE2YiwgdjEwLjE2YgorLQlhZGQJCXY5LjE2YiwgdjkuMTZiLCB2MTAuMTZiCistCXRibAkJdjIuMTZiLCB7djQuMTZiLXY3LjE2Yn0sIHY4LjE2YgorLQl0YngJCXYyMi4xNmIsIHt2MTYuMTZiLXYxOS4xNmJ9LCB2OS4xNmIKKy0JYWRkCQl2OC4xNmIsIHY4LjE2YiwgdjEwLjE2YgorLQlhZGQJCXY5LjE2YiwgdjkuMTZiLCB2MTAuMTZiCistCXRibAkJdjMuMTZiLCB7djQuMTZiLXY3LjE2Yn0sIHY4LjE2YgorLQl0YngJCXYyMy4xNmIsIHt2MTYuMTZiLXYxOS4xNmJ9LCB2OS4xNmIKKy0KKy0JZW9yCQl2MjAuMTZiLCB2MjAuMTZiLCB2MC4xNmIKKy0JZW9yCQl2MjEuMTZiLCB2MjEuMTZiLCB2MS4xNmIKKy0JZW9yCQl2MjIuMTZiLCB2MjIuMTZiLCB2Mi4xNmIKKy0JZW9yCQl2MjMuMTZiLCB2MjMuMTZiLCB2My4xNmIKKy0Jc3QxCQl7djIwLjE2Yi12MjMuMTZifSwgW3gxXQorKy5MdDE5MjoJY2J6CQl4NSwgMWYJCQkJLy8gZXhhY3RseSAxMjggYnl0ZXM/CisrCWxkMQkJe3YyOC4xNmItdjMxLjE2Yn0sIFt4MTBdCisrCWFkZAkJeDUsIHg1LCB4MQorKwl0YmwJCXYyOC4xNmIsIHt2NC4xNmItdjcuMTZifSwgdjI4LjE2YgorKwl0YmwJCXYyOS4xNmIsIHt2NC4xNmItdjcuMTZifSwgdjI5LjE2YgorKwl0YmwJCXYzMC4xNmIsIHt2NC4xNmItdjcuMTZifSwgdjMwLjE2YgorKwl0YmwJCXYzMS4xNmIsIHt2NC4xNmItdjcuMTZifSwgdjMxLjE2YgorKworKzA6CWVvcgkJdjIwLjE2YiwgdjIwLjE2YiwgdjI4LjE2YgorKwllb3IJCXYyMS4xNmIsIHYyMS4xNmIsIHYyOS4xNmIKKysJZW9yCQl2MjIuMTZiLCB2MjIuMTZiLCB2MzAuMTZiCisrCWVvcgkJdjIzLjE2YiwgdjIzLjE2YiwgdjMxLjE2YgorKwlzdDEJCXt2MjAuMTZiLXYyMy4xNmJ9LCBbeDVdCQkvLyBvdmVybGFwcGluZyBzdG9yZXMKKysxOglzdDEJCXt2MTYuMTZiLXYxOS4xNmJ9LCBbeDFdCisgCWIJCS5Mb3V0CisgCisrCS8vIGZld2VyIHRoYW4gMTI4IGJ5dGVzIG9mIGluL291dHB1dAorKy5MdDEyODoJbGQxCQl7djI4LjE2Yi12MzEuMTZifSwgW3gxMF0KKysJYWRkCQl4NSwgeDUsIHgxCisrCXN1YgkJeDEsIHgxLCAjNjQKKysJdGJsCQl2MjguMTZiLCB7djAuMTZiLXYzLjE2Yn0sIHYyOC4xNmIKKysJdGJsCQl2MjkuMTZiLCB7djAuMTZiLXYzLjE2Yn0sIHYyOS4xNmIKKysJdGJsCQl2MzAuMTZiLCB7djAuMTZiLXYzLjE2Yn0sIHYzMC4xNmIKKysJdGJsCQl2MzEuMTZiLCB7djAuMTZiLXYzLjE2Yn0sIHYzMS4xNmIKKysJbGQxCQl7djE2LjE2Yi12MTkuMTZifSwgW3gxXQkJLy8gcmVsb2FkIGZpcnN0IG91dHB1dCBibG9jaworKwliCQkwYgorKworIAkvLyBmZXdlciB0aGFuIDI1NiBieXRlcyBvZiBpbi9vdXRwdXQKKy0yOglsZDEJCXt2NC4xNmJ9LCBbeDEwXQorLQlsZDEJCXt2NS4xNmJ9LCBbeDExXQorLQltb3ZpCQl2Ni4xNmIsICMxNgorLQlhZGQJCXgxLCB4MSwgeDcKKysuTHQyNTY6CWNiegkJeDYsIDJmCQkJCS8vIGV4YWN0bHkgMTkyIGJ5dGVzPworKwlsZDEJCXt2NC4xNmItdjcuMTZifSwgW3gxMF0KKysJYWRkCQl4NiwgeDYsIHgxCisgCXRibAkJdjAuMTZiLCB7djguMTZiLXYxMS4xNmJ9LCB2NC4xNmIKKy0JdGJ4CQl2MjQuMTZiLCB7djIwLjE2Yi12MjMuMTZifSwgdjUuMTZiCistCWFkZAkJdjQuMTZiLCB2NC4xNmIsIHY2LjE2YgorLQlhZGQJCXY1LjE2YiwgdjUuMTZiLCB2Ni4xNmIKKy0JdGJsCQl2MS4xNmIsIHt2OC4xNmItdjExLjE2Yn0sIHY0LjE2YgorLQl0YngJCXYyNS4xNmIsIHt2MjAuMTZiLXYyMy4xNmJ9LCB2NS4xNmIKKy0JYWRkCQl2NC4xNmIsIHY0LjE2YiwgdjYuMTZiCistCWFkZAkJdjUuMTZiLCB2NS4xNmIsIHY2LjE2YgorLQl0YmwJCXYyLjE2Yiwge3Y4LjE2Yi12MTEuMTZifSwgdjQuMTZiCistCXRieAkJdjI2LjE2Yiwge3YyMC4xNmItdjIzLjE2Yn0sIHY1LjE2YgorLQlhZGQJCXY0LjE2YiwgdjQuMTZiLCB2Ni4xNmIKKy0JYWRkCQl2NS4xNmIsIHY1LjE2YiwgdjYuMTZiCistCXRibAkJdjMuMTZiLCB7djguMTZiLXYxMS4xNmJ9LCB2NC4xNmIKKy0JdGJ4CQl2MjcuMTZiLCB7djIwLjE2Yi12MjMuMTZifSwgdjUuMTZiCistCistCWVvcgkJdjI0LjE2YiwgdjI0LjE2YiwgdjAuMTZiCistCWVvcgkJdjI1LjE2YiwgdjI1LjE2YiwgdjEuMTZiCistCWVvcgkJdjI2LjE2YiwgdjI2LjE2YiwgdjIuMTZiCistCWVvcgkJdjI3LjE2YiwgdjI3LjE2YiwgdjMuMTZiCistCXN0MQkJe3YyNC4xNmItdjI3LjE2Yn0sIFt4MV0KKysJdGJsCQl2MS4xNmIsIHt2OC4xNmItdjExLjE2Yn0sIHY1LjE2YgorKwl0YmwJCXYyLjE2Yiwge3Y4LjE2Yi12MTEuMTZifSwgdjYuMTZiCisrCXRibAkJdjMuMTZiLCB7djguMTZiLXYxMS4xNmJ9LCB2Ny4xNmIKKysKKysJZW9yCQl2MjguMTZiLCB2MjguMTZiLCB2MC4xNmIKKysJZW9yCQl2MjkuMTZiLCB2MjkuMTZiLCB2MS4xNmIKKysJZW9yCQl2MzAuMTZiLCB2MzAuMTZiLCB2Mi4xNmIKKysJZW9yCQl2MzEuMTZiLCB2MzEuMTZiLCB2My4xNmIKKysJc3QxCQl7djI4LjE2Yi12MzEuMTZifSwgW3g2XQkJLy8gb3ZlcmxhcHBpbmcgc3RvcmVzCisrMjoJc3QxCQl7djIwLjE2Yi12MjMuMTZifSwgW3gxXQorIAliCQkuTG91dAorIAorIAkvLyBmZXdlciB0aGFuIDMyMCBieXRlcyBvZiBpbi9vdXRwdXQKKy0zOglsZDEJCXt2NC4xNmJ9LCBbeDEwXQorLQlsZDEJCXt2NS4xNmJ9LCBbeDExXQorLQltb3ZpCQl2Ni4xNmIsICMxNgorLQlhZGQJCXgxLCB4MSwgeDgKKysuTHQzMjA6CWNiegkJeDcsIDNmCQkJCS8vIGV4YWN0bHkgMjU2IGJ5dGVzPworKwlsZDEJCXt2NC4xNmItdjcuMTZifSwgW3gxMF0KKysJYWRkCQl4NywgeDcsIHgxCisgCXRibAkJdjAuMTZiLCB7djEyLjE2Yi12MTUuMTZifSwgdjQuMTZiCistCXRieAkJdjI4LjE2Yiwge3YyNC4xNmItdjI3LjE2Yn0sIHY1LjE2YgorLQlhZGQJCXY0LjE2YiwgdjQuMTZiLCB2Ni4xNmIKKy0JYWRkCQl2NS4xNmIsIHY1LjE2YiwgdjYuMTZiCistCXRibAkJdjEuMTZiLCB7djEyLjE2Yi12MTUuMTZifSwgdjQuMTZiCistCXRieAkJdjI5LjE2Yiwge3YyNC4xNmItdjI3LjE2Yn0sIHY1LjE2YgorLQlhZGQJCXY0LjE2YiwgdjQuMTZiLCB2Ni4xNmIKKy0JYWRkCQl2NS4xNmIsIHY1LjE2YiwgdjYuMTZiCistCXRibAkJdjIuMTZiLCB7djEyLjE2Yi12MTUuMTZifSwgdjQuMTZiCistCXRieAkJdjMwLjE2Yiwge3YyNC4xNmItdjI3LjE2Yn0sIHY1LjE2YgorLQlhZGQJCXY0LjE2YiwgdjQuMTZiLCB2Ni4xNmIKKy0JYWRkCQl2NS4xNmIsIHY1LjE2YiwgdjYuMTZiCistCXRibAkJdjMuMTZiLCB7djEyLjE2Yi12MTUuMTZifSwgdjQuMTZiCistCXRieAkJdjMxLjE2Yiwge3YyNC4xNmItdjI3LjE2Yn0sIHY1LjE2YgorKwl0YmwJCXYxLjE2Yiwge3YxMi4xNmItdjE1LjE2Yn0sIHY1LjE2YgorKwl0YmwJCXYyLjE2Yiwge3YxMi4xNmItdjE1LjE2Yn0sIHY2LjE2YgorKwl0YmwJCXYzLjE2Yiwge3YxMi4xNmItdjE1LjE2Yn0sIHY3LjE2YgorIAorIAllb3IJCXYyOC4xNmIsIHYyOC4xNmIsIHYwLjE2YgorIAllb3IJCXYyOS4xNmIsIHYyOS4xNmIsIHYxLjE2YgorIAllb3IJCXYzMC4xNmIsIHYzMC4xNmIsIHYyLjE2YgorIAllb3IJCXYzMS4xNmIsIHYzMS4xNmIsIHYzLjE2YgorLQlzdDEJCXt2MjguMTZiLXYzMS4xNmJ9LCBbeDFdCisrCXN0MQkJe3YyOC4xNmItdjMxLjE2Yn0sIFt4N10JCS8vIG92ZXJsYXBwaW5nIHN0b3JlcworKzM6CXN0MQkJe3YyNC4xNmItdjI3LjE2Yn0sIFt4MV0KKyAJYgkJLkxvdXQKKyBFTkRQUk9DKGNoYWNoYV80YmxvY2tfeG9yX25lb24pCisgCitAQCAtODUxLDcgKzc5Niw3IEBAIEVORFBST0MoY2hhY2hhXzRibG9ja194b3JfbmVvbikKKyAJLmFsaWduCQlMMV9DQUNIRV9TSElGVAorIC5McGVybXV0ZToKKyAJLnNldAkJLkxpLCAwCistCS5yZXB0CQkxOTIKKysJLnJlcHQJCTEyOAorIAkuYnl0ZQkJKC5MaSAtIDY0KQorIAkuc2V0CQkuTGksIC5MaSArIDEKKyAJLmVuZHIKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNzAtY3J5cHRvLWxpYi1jaGFjaGEyMHBvbHkxMzA1LWRlZmluZS1lbXB0eS1tb2R1bGUtZXhpdC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNzAtY3J5cHRvLWxpYi1jaGFjaGEyMHBvbHkxMzA1LWRlZmluZS1lbXB0eS1tb2R1bGUtZXhpdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODRhZTc0Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA3MC1jcnlwdG8tbGliLWNoYWNoYTIwcG9seTEzMDUtZGVmaW5lLWVtcHR5LW1vZHVsZS1leGl0LnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJKYXNvbiBBLiBEb25lbmZlbGQiIDxKYXNvbkB6eDJjNC5jb20+CitEYXRlOiBGcmksIDE1IEphbiAyMDIxIDIwOjMwOjEyICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyeXB0bzogbGliL2NoYWNoYTIwcG9seTEzMDUgLSBkZWZpbmUgZW1wdHkgbW9kdWxlIGV4aXQKKyBmdW5jdGlvbgorCitjb21taXQgYWM4OGMzMjJkMGYyOTE3ZDQxZDEzNTUzYzY5ZTlkN2YwNDNjOGI2ZiB1cHN0cmVhbS4KKworV2l0aCBubyBtb2RfZXhpdCBmdW5jdGlvbiwgdXNlcnMgYXJlIHVuYWJsZSB0byB1bmxvYWQgdGhlIG1vZHVsZSBhZnRlcgordXNlLiBJJ20gbm90IGF3YXJlIG9mIGFueSByZWFzb24gd2h5IG1vZHVsZSB1bmxvYWRpbmcgc2hvdWxkIGJlCitwcm9oaWJpdGVkIGZvciB0aGlzIG9uZSwgc28gdGhpcyBjb21taXQgc2ltcGx5IGFkZHMgYW4gZW1wdHkgZXhpdAorZnVuY3Rpb24uCisKK1JlcG9ydGVkLWFuZC10ZXN0ZWQtYnk6IEpvaG4gRG9ubmVsbHkgPGpvaG4ucC5kb25uZWxseUBvcmFjbGUuY29tPgorQWNrZWQtYnk6IEFyZCBCaWVzaGV1dmVsIDxhcmRiQGtlcm5lbC5vcmc+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgbGliL2NyeXB0by9jaGFjaGEyMHBvbHkxMzA1LmMgfCA1ICsrKysrCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCistLS0gYS9saWIvY3J5cHRvL2NoYWNoYTIwcG9seTEzMDUuYworKysrIGIvbGliL2NyeXB0by9jaGFjaGEyMHBvbHkxMzA1LmMKK0BAIC0zNjQsNyArMzY0LDEyIEBAIHN0YXRpYyBpbnQgX19pbml0IG1vZF9pbml0KHZvaWQpCisgCXJldHVybiAwOworIH0KKyAKKytzdGF0aWMgdm9pZCBfX2V4aXQgbW9kX2V4aXQodm9pZCkKKyt7CisrfQorKworIG1vZHVsZV9pbml0KG1vZF9pbml0KTsKKyttb2R1bGVfZXhpdChtb2RfZXhpdCk7CisgTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworIE1PRFVMRV9ERVNDUklQVElPTigiQ2hhQ2hhMjBQb2x5MTMwNSBBRUFEIGNvbnN0cnVjdGlvbiIpOworIE1PRFVMRV9BVVRIT1IoIkphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPiIpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA3MS1jcnlwdG8tYXJtLWNoYWNoYS1uZW9uLWFkZC1taXNzaW5nLWNvdW50ZXItaW5jcmVtZW50LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA3MS1jcnlwdG8tYXJtLWNoYWNoYS1uZW9uLWFkZC1taXNzaW5nLWNvdW50ZXItaW5jcmVtZW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhM2NjODAKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDcxLWNyeXB0by1hcm0tY2hhY2hhLW5lb24tYWRkLW1pc3NpbmctY291bnRlci1pbmNyZW1lbnQucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQXJkIEJpZXNoZXV2ZWwgPGFyZGJAa2VybmVsLm9yZz4KK0RhdGU6IFN1biwgMTMgRGVjIDIwMjAgMTU6Mzk6MjkgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gY3J5cHRvOiBhcm0vY2hhY2hhLW5lb24gLSBhZGQgbWlzc2luZyBjb3VudGVyIGluY3JlbWVudAorCitjb21taXQgZmQxNjkzMWEyZjUxOGEzMjc1MzkyMGZmMjA4OTVlNWNmMDRjOGZmMSB1cHN0cmVhbS4KKworQ29tbWl0IDg2Y2Q5N2VjNGI5NDNhZjMgKCJjcnlwdG86IGFybS9jaGFjaGEtbmVvbiAtIG9wdGltaXplIGZvciBub24tYmxvY2sKK3NpemUgbXVsdGlwbGVzIikgcmVmYWN0b3JlZCB0aGUgY2hhY2hhIGJsb2NrIGhhbmRsaW5nIGluIHRoZSBnbHVlIGNvZGUgaW4KK2Egd2F5IHRoYXQgbWF5IHJlc3VsdCBpbiB0aGUgY291bnRlciBpbmNyZW1lbnQgdG8gYmUgb21pdHRlZCB3aGVuIGNhbGxpbmcKK2NoYWNoYV9ibG9ja194b3JfbmVvbigpIHRvIHByb2Nlc3MgYSBmdWxsIGJsb2NrLiBUaGlzIHZpb2xhdGVzIHRoZSBza2NpcGhlcgorQVBJLCB3aGljaCByZXF1aXJlcyB0aGF0IHRoZSBvdXRwdXQgSVYgaXMgc3VpdGFibGUgZm9yIGhhbmRsaW5nIG1vcmUgaW5wdXQKK2FzIGxvbmcgYXMgdGhlIHByZWNlZGluZyBpbnB1dCBoYXMgYmVlbiBwcmVzZW50ZWQgaW4gcm91bmQgbXVsdGlwbGVzIG9mIHRoZQorYmxvY2sgc2l6ZS4gQWxzbywgdGhlIHNhbWUgY29kZSBpcyBleHBvc2VkIHZpYSB0aGUgY2hhY2hhIGxpYnJhcnkgaW50ZXJmYWNlCit3aG9zZSBjYWxsZXJzIG1heSBhY3R1YWxseSByZWx5IG9uIHRoaXMgaW5jcmVtZW50IHRvIG9jY3VyIGV2ZW4gZm9yIGZpbmFsCitibG9ja3MgdGhhdCBhcmUgc21hbGxlciB0aGFuIHRoZSBjaGFjaGEgYmxvY2sgc2l6ZS4KKworU28gaW5jcmVtZW50IHRoZSBjb3VudGVyIGFmdGVyIGNhbGxpbmcgY2hhY2hhX2Jsb2NrX3hvcl9uZW9uKCkuCisKK0ZpeGVzOiA4NmNkOTdlYzRiOTQzYWYzICgiY3J5cHRvOiBhcm0vY2hhY2hhLW5lb24gLSBvcHRpbWl6ZSBmb3Igbm9uLWJsb2NrIHNpemUgbXVsdGlwbGVzIikKK1JlcG9ydGVkLWJ5OiBFcmljIEJpZ2dlcnMgPGViaWdnZXJzQGtlcm5lbC5vcmc+CitTaWduZWQtb2ZmLWJ5OiBBcmQgQmllc2hldXZlbCA8YXJkYkBrZXJuZWwub3JnPgorU2lnbmVkLW9mZi1ieTogSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBhcmNoL2FybS9jcnlwdG8vY2hhY2hhLWdsdWUuYyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCistLS0gYS9hcmNoL2FybS9jcnlwdG8vY2hhY2hhLWdsdWUuYworKysrIGIvYXJjaC9hcm0vY3J5cHRvL2NoYWNoYS1nbHVlLmMKK0BAIC02MCw2ICs2MCw3IEBAIHN0YXRpYyB2b2lkIGNoYWNoYV9kb25lb24odTMyICpzdGF0ZSwgdTgKKyAJCWNoYWNoYV9ibG9ja194b3JfbmVvbihzdGF0ZSwgZCwgcywgbnJvdW5kcyk7CisgCQlpZiAoZCAhPSBkc3QpCisgCQkJbWVtY3B5KGRzdCwgYnVmLCBieXRlcyk7CisrCQlzdGF0ZVsxMl0rKzsKKyAJfQorIH0KKyAKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNzItbmV0LVdpcmVHdWFyZC1zZWN1cmUtbmV0d29yay10dW5uZWwucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDcyLW5ldC1XaXJlR3VhcmQtc2VjdXJlLW5ldHdvcmstdHVubmVsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMzdiYmIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDcyLW5ldC1XaXJlR3VhcmQtc2VjdXJlLW5ldHdvcmstdHVubmVsLnBhdGNoCkBAIC0wLDAgKzEsODA3MSBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIkphc29uIEEuIERvbmVuZmVsZCIgPEphc29uQHp4MmM0LmNvbT4KK0RhdGU6IE1vbiwgOSBEZWMgMjAxOSAwMDoyNzozNCArMDEwMAorU3ViamVjdDogW1BBVENIXSBuZXQ6IFdpcmVHdWFyZCBzZWN1cmUgbmV0d29yayB0dW5uZWwKKworY29tbWl0IGU3MDk2YzEzMWU1MTYxZmEzYjhlNTJhNjUwZDc3MTlkMjg1N2FkZmQgdXBzdHJlYW0uCisKK1dpcmVHdWFyZCBpcyBhIGxheWVyIDMgc2VjdXJlIG5ldHdvcmtpbmcgdHVubmVsIG1hZGUgc3BlY2lmaWNhbGx5IGZvcgordGhlIGtlcm5lbCwgdGhhdCBhaW1zIHRvIGJlIG11Y2ggc2ltcGxlciBhbmQgZWFzaWVyIHRvIGF1ZGl0IHRoYW4gSVBzZWMuCitFeHRlbnNpdmUgZG9jdW1lbnRhdGlvbiBhbmQgZGVzY3JpcHRpb24gb2YgdGhlIHByb3RvY29sIGFuZAorY29uc2lkZXJhdGlvbnMsIGFsb25nIHdpdGggZm9ybWFsIHByb29mcyBvZiB0aGUgY3J5cHRvZ3JhcGh5LCBhcmUKK2F2YWlsYWJsZSBhdDoKKworICAqIGh0dHBzOi8vd3d3LndpcmVndWFyZC5jb20vCisgICogaHR0cHM6Ly93d3cud2lyZWd1YXJkLmNvbS9wYXBlcnMvd2lyZWd1YXJkLnBkZgorCitUaGlzIGNvbW1pdCBpbXBsZW1lbnRzIFdpcmVHdWFyZCBhcyBhIHNpbXBsZSBuZXR3b3JrIGRldmljZSBkcml2ZXIsCithY2Nlc3NpYmxlIGluIHRoZSB1c3VhbCBSVE5MIHdheSB1c2VkIGJ5IHZpcnR1YWwgbmV0d29yayBkcml2ZXJzLiBJdAorbWFrZXMgdXNlIG9mIHRoZSB1ZHBfdHVubmVsIEFQSXMsIEdSTywgR1NPLCBOQVBJLCBhbmQgdGhlIHVzdWFsIHNldCBvZgorbmV0d29ya2luZyBzdWJzeXN0ZW0gQVBJcy4gSXQgaGFzIGEgc29tZXdoYXQgbm92ZWwgbXVsdGljb3JlIHF1ZXVlaW5nCitzeXN0ZW0gZGVzaWduZWQgZm9yIG1heGltdW0gdGhyb3VnaHB1dCBhbmQgbWluaW1hbCBsYXRlbmN5IG9mIGVuY3J5cHRpb24KK29wZXJhdGlvbnMsIGJ1dCBpdCBpcyBpbXBsZW1lbnRlZCBtb2Rlc3RseSB1c2luZyB3b3JrcXVldWVzIGFuZCBOQVBJLgorQ29uZmlndXJhdGlvbiBpcyBkb25lIHZpYSBnZW5lcmljIE5ldGxpbmssIGFuZCBmb2xsb3dpbmcgYSByZXZpZXcgZnJvbQordGhlIE5ldGxpbmsgbWFpbnRhaW5lciBhIHllYXIgYWdvLCBzZXZlcmFsIGhpZ2ggcHJvZmlsZSB1c2Vyc3BhY2UgdG9vbHMKK2hhdmUgYWxyZWFkeSBpbXBsZW1lbnRlZCB0aGUgQVBJLgorCitUaGlzIGNvbW1pdCBhbHNvIGNvbWVzIHdpdGggc2V2ZXJhbCBkaWZmZXJlbnQgdGVzdHMsIGJvdGggaW4ta2VybmVsCit0ZXN0cyBhbmQgb3V0LW9mLWtlcm5lbCB0ZXN0cyBiYXNlZCBvbiBuZXR3b3JrIG5hbWVzcGFjZXMsIHRha2luZyBwcm9maXQKK29mIHRoZSBmYWN0IHRoYXQgc29ja2V0cyB1c2VkIGJ5IFdpcmVHdWFyZCBpbnRlbnRpb25hbGx5IHN0YXkgaW4gdGhlCituYW1lc3BhY2UgdGhlIFdpcmVHdWFyZCBpbnRlcmZhY2Ugd2FzIG9yaWdpbmFsbHkgY3JlYXRlZCwgZXhhY3RseSBsaWtlCit0aGUgc2VtYW50aWNzIG9mIHVzZXJzcGFjZSB0dW4gZGV2aWNlcy4gU2VlIHdpcmVndWFyZC5jb20vbmV0bnMvIGZvcgorcGljdHVyZXMgYW5kIGV4YW1wbGVzLgorCitUaGUgc291cmNlIGNvZGUgaXMgZmFpcmx5IHNob3J0LCBidXQgcmF0aGVyIHRoYW4gY29tYmluaW5nIGV2ZXJ5dGhpbmcKK2ludG8gYSBzaW5nbGUgZmlsZSwgV2lyZUd1YXJkIGlzIGRldmVsb3BlZCBhcyBjbGVhbmx5IHNlcGFyYWJsZSBmaWxlcywKK21ha2luZyBhdWRpdGluZyBhbmQgY29tcHJlaGVuc2lvbiBlYXNpZXIuIFRoaW5ncyBhcmUgbGFpZCBvdXQgYXMKK2ZvbGxvd3M6CisKKyAgKiBub2lzZS5bY2hdLCBjb29raWUuW2NoXSwgbWVzc2FnZXMuaDogVGhlc2UgaW1wbGVtZW50IHRoZSBidWxrIG9mIHRoZQorICAgIGNyeXB0b2dyYXBoaWMgYXNwZWN0cyBvZiB0aGUgcHJvdG9jb2wsIGFuZCBhcmUgbW9zdGx5IGRhdGEtb25seSBpbgorICAgIG5hdHVyZSwgdGFraW5nIGluIGJ1ZmZlcnMgb2YgYnl0ZXMgYW5kIHNwaXR0aW5nIG91dCBidWZmZXJzIG9mCisgICAgYnl0ZXMuIFRoZXkgYWxzbyBoYW5kbGUgcmVmZXJlbmNlIGNvdW50aW5nIGZvciB0aGVpciB2YXJpb3VzIHNoYXJlZAorICAgIHBpZWNlcyBvZiBkYXRhLCBsaWtlIGtleXMgYW5kIGtleSBsaXN0cy4KKworICAqIHJhdGVsaW1pdGVyLltjaF06IFVzZWQgYXMgYW4gaW50ZWdyYWwgcGFydCBvZiBjb29raWUuW2NoXSBmb3IKKyAgICByYXRlbGltaXRpbmcgY2VydGFpbiB0eXBlcyBvZiBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbnMgaW4gYWNjb3JkYW5jZQorICAgIHdpdGggcGFydGljdWxhciBXaXJlR3VhcmQgc2VtYW50aWNzLgorCisgICogYWxsb3dlZGlwcy5bY2hdLCBwZWVybG9va3VwLltjaF06IFRoZSBtYWluIGxvb2t1cCBzdHJ1Y3R1cmVzIG9mCisgICAgV2lyZUd1YXJkLCB0aGUgZm9ybWVyIGJlaW5nIHRyaWUtbGlrZSB3aXRoIHBhcnRpY3VsYXIgc2VtYW50aWNzLCBhbgorICAgIGludGVncmFsIHBhcnQgb2YgdGhlIGRlc2lnbiBvZiB0aGUgcHJvdG9jb2wsIGFuZCB0aGUgbGF0dGVyIGp1c3QKKyAgICBiZWluZyBuaWNlIGhlbHBlciBmdW5jdGlvbnMgYXJvdW5kIHRoZSB2YXJpb3VzIGhhc2h0YWJsZXMgd2UgdXNlLgorCisgICogZGV2aWNlLltjaF06IEltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBmb3IgdGhlIG5ldGRldmljZSBhbmQgZm9yCisgICAgcnRubCwgcmVzcG9uc2libGUgZm9yIG1haW50YWluaW5nIHRoZSBsaWZlIG9mIGEgZ2l2ZW4gaW50ZXJmYWNlIGFuZAorICAgIHdpcmluZyBpdCB1cCB0byB0aGUgcmVzdCBvZiBXaXJlR3VhcmQuCisKKyAgKiBwZWVyLltjaF06IEVhY2ggaW50ZXJmYWNlIGhhcyBhIGxpc3Qgb2YgcGVlcnMsIHdpdGggaGVscGVyIGZ1bmN0aW9ucworICAgIGF2YWlsYWJsZSBoZXJlIGZvciBjcmVhdGlvbiwgZGVzdHJ1Y3Rpb24sIGFuZCByZWZlcmVuY2UgY291bnRpbmcuCisKKyAgKiBzb2NrZXQuW2NoXTogSW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdWRwX3NvY2tldCBhbmQKKyAgICB0aGUgZ2VuZXJhbCBzZXQgb2Yga2VybmVsIHNvY2tldCBBUElzLCBmb3Igc2VuZGluZyBhbmQgcmVjZWl2aW5nCisgICAgY2lwaGVydGV4dCBVRFAgcGFja2V0cywgYW5kIHRha2luZyBjYXJlIG9mIFdpcmVHdWFyZC1zcGVjaWZpYyBzdGlja3kKKyAgICBzb2NrZXQgcm91dGluZyBzZW1hbnRpY3MgZm9yIHRoZSBhdXRvbWF0aWMgcm9hbWluZy4KKworICAqIG5ldGxpbmsuW2NoXTogVXNlcnNwYWNlIEFQSSBlbnRyeSBwb2ludCBmb3IgY29uZmlndXJpbmcgV2lyZUd1YXJkCisgICAgcGVlcnMgYW5kIGRldmljZXMuIFRoZSBBUEkgaGFzIGJlZW4gaW1wbGVtZW50ZWQgYnkgc2V2ZXJhbCB1c2Vyc3BhY2UKKyAgICB0b29scyBhbmQgbmV0d29yayBtYW5hZ2VtZW50IHV0aWxpdHksIGFuZCB0aGUgV2lyZUd1YXJkIHByb2plY3QKKyAgICBkaXN0cmlidXRlcyB0aGUgYmFzaWMgd2coOCkgdG9vbC4KKworICAqIHF1ZXVlaW5nLltjaF06IFNoYXJlZCBmdW5jdGlvbiBvbiB0aGUgcnggYW5kIHR4IHBhdGggZm9yIGhhbmRsaW5nCisgICAgdGhlIHZhcmlvdXMgcXVldWVzIHVzZWQgaW4gdGhlIG11bHRpY29yZSBhbGdvcml0aG1zLgorCisgICogc2VuZC5jOiBIYW5kbGVzIGVuY3J5cHRpbmcgb3V0Z29pbmcgcGFja2V0cyBpbiBwYXJhbGxlbCBvbgorICAgIG11bHRpcGxlIGNvcmVzLCBiZWZvcmUgc2VuZGluZyB0aGVtIGluIG9yZGVyIG9uIGEgc2luZ2xlIGNvcmUsIHZpYQorICAgIHdvcmtxdWV1ZXMgYW5kIHJpbmcgYnVmZmVycy4gQWxzbyBoYW5kbGVzIHNlbmRpbmcgaGFuZHNoYWtlIGFuZCBjb29raWUKKyAgICBtZXNzYWdlcyBhcyBwYXJ0IG9mIHRoZSBwcm90b2NvbCwgaW4gcGFyYWxsZWwuCisKKyAgKiByZWNlaXZlLmM6IEhhbmRsZXMgZGVjcnlwdGluZyBpbmNvbWluZyBwYWNrZXRzIGluIHBhcmFsbGVsIG9uCisgICAgbXVsdGlwbGUgY29yZXMsIGJlZm9yZSBwYXNzaW5nIHRoZW0gb2ZmIGluIG9yZGVyIHRvIGJlIGluZ2VzdGVkIHZpYQorICAgIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSB3aXRoIEdSTyB2aWEgdGhlIHR5cGljYWwgTkFQSQorICAgIHBvbGwgZnVuY3Rpb24uIEFsc28gaGFuZGxlcyByZWNlaXZpbmcgaGFuZHNoYWtlIGFuZCBjb29raWUgbWVzc2FnZXMKKyAgICBhcyBwYXJ0IG9mIHRoZSBwcm90b2NvbCwgaW4gcGFyYWxsZWwuCisKKyAgKiB0aW1lcnMuW2NoXTogVXNlcyB0aGUgdGltZXIgd2hlZWwgdG8gaW1wbGVtZW50IHByb3RvY29sIHBhcnRpY3VsYXIKKyAgICBldmVudCB0aW1lb3V0cywgYW5kIGdpdmVzIGEgc2V0IG9mIHZlcnkgc2ltcGxlIGV2ZW50LWRyaXZlbiBlbnRyeQorICAgIHBvaW50IGZ1bmN0aW9ucyBmb3IgY2FsbGVycy4KKworICAqIG1haW4uYywgdmVyc2lvbi5oOiBJbml0aWFsaXphdGlvbiBhbmQgZGVpbml0aWFsaXphdGlvbiBvZiB0aGUgbW9kdWxlLgorCisgICogc2VsZnRlc3QvKi5oOiBSdW50aW1lIHVuaXQgdGVzdHMgZm9yIHNvbWUgb2YgdGhlIG1vc3Qgc2VjdXJpdHkKKyAgICBzZW5zaXRpdmUgZnVuY3Rpb25zLgorCisgICogdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL25ldG5zLnNoOiBBZm9yZW1lbnRpb25lZCB0ZXN0aW5nCisgICAgc2NyaXB0IHVzaW5nIG5ldHdvcmsgbmFtZXNwYWNlcy4KKworVGhpcyBjb21taXQgYWltcyB0byBiZSBhcyBzZWxmLWNvbnRhaW5lZCBhcyBwb3NzaWJsZSwgaW1wbGVtZW50aW5nCitXaXJlR3VhcmQgYXMgYSBzdGFuZGFsb25lIG1vZHVsZSBub3QgbmVlZGluZyBtdWNoIHNwZWNpYWwgaGFuZGxpbmcgb3IKK2Nvb3JkaW5hdGlvbiBmcm9tIHRoZSBuZXR3b3JrIHN1YnN5c3RlbS4gSSBleHBlY3QgZm9yIGZ1dHVyZQorb3B0aW1pemF0aW9ucyB0byB0aGUgbmV0d29yayBzdGFjayB0byBwb3NpdGl2ZWx5IGltcHJvdmUgV2lyZUd1YXJkLCBhbmQKK3ZpY2UtdmVyc2EsIGJ1dCBmb3IgdGhlIHRpbWUgYmVpbmcsIHRoaXMgZXhpc3RzIGFzIGludGVudGlvbmFsbHkKK3N0YW5kYWxvbmUuCisKK1dlIGludHJvZHVjZSBhIG1lbnUgb3B0aW9uIGZvciBDT05GSUdfV0lSRUdVQVJELCBhcyB3ZWxsIGFzIHByb3ZpZGluZyBhCit2ZXJib3NlIGRlYnVnIGxvZyBhbmQgc2VsZi10ZXN0cyB2aWEgQ09ORklHX1dJUkVHVUFSRF9ERUJVRy4KKworU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CitDYzogRGF2aWQgTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorQ2M6IEdyZWcgS0ggPGdyZWdraEBsaW51eGZvdW5kYXRpb24ub3JnPgorQ2M6IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9uLm9yZz4KK0NjOiBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CitDYzogbGludXgtY3J5cHRvQHZnZXIua2VybmVsLm9yZworQ2M6IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKK0NjOiBuZXRkZXZAdmdlci5rZXJuZWwub3JnCitTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CitbSmFzb246IHBvcnRlZCB0byA1LjQgYnkgZG9pbmcgdGhlIGZvbGxvd2luZzoKKyAtIHdnX2dldF9kZXZpY2Vfc3RhcnQgdXNlcyBnZW5sX2ZhbWlseV9hdHRyYnVmCisgLSB0cml2YWwgc2tiX3JlZGlyZWN0X3Jlc2V0IGNoYW5nZSBmcm9tIDJjNjQ2MDViNTkwZSBpcyBmb2xkZWQgaW4KKyAtIHNrYl9saXN0X3dhbGtfc2FmZSB3YXMgYWxyZWFkeSBiYWNrcG9ydGVkIHByaW9yXQorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgOCArCisgZHJpdmVycy9uZXQvS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNDEgKworIGRyaXZlcnMvbmV0L01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAxOCArCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL2FsbG93ZWRpcHMuYyAgICAgICAgICAgfCAzODEgKysrKysrKysrCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL2FsbG93ZWRpcHMuaCAgICAgICAgICAgfCAgNTkgKysKKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvY29va2llLmMgICAgICAgICAgICAgICB8IDIzNiArKysrKysKKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvY29va2llLmggICAgICAgICAgICAgICB8ICA1OSArKworIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYyAgICAgICAgICAgICAgIHwgNDU4ICsrKysrKysrKysKKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmggICAgICAgICAgICAgICB8ICA2NSArKworIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9tYWluLmMgICAgICAgICAgICAgICAgIHwgIDY0ICsrCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL21lc3NhZ2VzLmggICAgICAgICAgICAgfCAxMjggKysrCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYyAgICAgICAgICAgICAgfCA2NDggKysrKysrKysrKysrKysrCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuaCAgICAgICAgICAgICAgfCAgMTIgKworIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9ub2lzZS5jICAgICAgICAgICAgICAgIHwgODI4ICsrKysrKysrKysrKysrKysrKysKKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvbm9pc2UuaCAgICAgICAgICAgICAgICB8IDEzNyArKysKKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jICAgICAgICAgICAgICAgICB8IDI0MCArKysrKysKKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oICAgICAgICAgICAgICAgICB8ICA4MyArKworIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVybG9va3VwLmMgICAgICAgICAgIHwgMjIxICsrKysrCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXJsb29rdXAuaCAgICAgICAgICAgfCAgNjQgKysKKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuYyAgICAgICAgICAgICB8ICA1MyArKworIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oICAgICAgICAgICAgIHwgMTk3ICsrKysrCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JhdGVsaW1pdGVyLmMgICAgICAgICAgfCAyMjMgKysrKysKKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcmF0ZWxpbWl0ZXIuaCAgICAgICAgICB8ICAxOSArCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYyAgICAgICAgICAgICAgfCA1OTUgKysrKysrKysrKysrKworIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9hbGxvd2VkaXBzLmMgIHwgNjgzICsrKysrKysrKysrKysrKworIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9jb3VudGVyLmMgICAgIHwgMTA0ICsrKworIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9yYXRlbGltaXRlci5jIHwgMjI2ICsrKysrCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYyAgICAgICAgICAgICAgICAgfCA0MTMgKysrKysrKysrCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NvY2tldC5jICAgICAgICAgICAgICAgfCA0MzcgKysrKysrKysrKworIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9zb2NrZXQuaCAgICAgICAgICAgICAgIHwgIDQ0ICsKKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvdGltZXJzLmMgICAgICAgICAgICAgICB8IDI0MyArKysrKysKKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvdGltZXJzLmggICAgICAgICAgICAgICB8ICAzMSArCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3ZlcnNpb24uaCAgICAgICAgICAgICAgfCAgIDEgKworIGluY2x1ZGUvdWFwaS9saW51eC93aXJlZ3VhcmQuaCAgICAgICAgICAgICAgIHwgMTk2ICsrKysrCisgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL25ldG5zLnNoICAgfCA1MzcgKysrKysrKysrKysrCisgMzYgZmlsZXMgY2hhbmdlZCwgNzc1MyBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVndWFyZC9NYWtlZmlsZQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlZ3VhcmQvYWxsb3dlZGlwcy5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVndWFyZC9hbGxvd2VkaXBzLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWd1YXJkL2Nvb2tpZS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVndWFyZC9jb29raWUuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVndWFyZC9tYWluLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWd1YXJkL21lc3NhZ2VzLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVndWFyZC9ub2lzZS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVndWFyZC9ub2lzZS5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlcmxvb2t1cC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVybG9va3VwLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JhdGVsaW1pdGVyLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JhdGVsaW1pdGVyLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VsZnRlc3QvYWxsb3dlZGlwcy5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9jb3VudGVyLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L3JhdGVsaW1pdGVyLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlZ3VhcmQvc29ja2V0LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NvY2tldC5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVndWFyZC90aW1lcnMuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlZ3VhcmQvdGltZXJzLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3ZlcnNpb24uaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3VhcGkvbGludXgvd2lyZWd1YXJkLmgKKyBjcmVhdGUgbW9kZSAxMDA3NTUgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL25ldG5zLnNoCisKKy0tLSBhL01BSU5UQUlORVJTCisrKysgYi9NQUlOVEFJTkVSUworQEAgLTE3NTg0LDYgKzE3NTg0LDE0IEBAIEw6CWxpbnV4LWdwaW9Admdlci5rZXJuZWwub3JnCisgUzoJTWFpbnRhaW5lZAorIEY6CWRyaXZlcnMvZ3Bpby9ncGlvLXdzMTZjNDguYworIAorK1dJUkVHVUFSRCBTRUNVUkUgTkVUV09SSyBUVU5ORUwKKytNOglKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKytTOglNYWludGFpbmVkCisrRjoJZHJpdmVycy9uZXQvd2lyZWd1YXJkLworK0Y6CXRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC8KKytMOgl3aXJlZ3VhcmRAbGlzdHMuengyYzQuY29tCisrTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZworKworIFdJU1RST04gTEFQVE9QIEJVVFRPTiBEUklWRVIKKyBNOglNaWxvc2xhdiBUcm1hYyA8bWl0ckB2b2xueS5jej4KKyBTOglNYWludGFpbmVkCistLS0gYS9kcml2ZXJzL25ldC9LY29uZmlnCisrKysgYi9kcml2ZXJzL25ldC9LY29uZmlnCitAQCAtNzEsNiArNzEsNDcgQEAgY29uZmlnIERVTU1ZCisgCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorIAkgIHdpbGwgYmUgY2FsbGVkIGR1bW15LgorIAorK2NvbmZpZyBXSVJFR1VBUkQKKysJdHJpc3RhdGUgIldpcmVHdWFyZCBzZWN1cmUgbmV0d29yayB0dW5uZWwiCisrCWRlcGVuZHMgb24gTkVUICYmIElORVQKKysJZGVwZW5kcyBvbiBJUFY2IHx8ICFJUFY2CisrCXNlbGVjdCBORVRfVURQX1RVTk5FTAorKwlzZWxlY3QgRFNUX0NBQ0hFCisrCXNlbGVjdCBDUllQVE8KKysJc2VsZWN0IENSWVBUT19MSUJfQ1VSVkUyNTUxOQorKwlzZWxlY3QgQ1JZUFRPX0xJQl9DSEFDSEEyMFBPTFkxMzA1CisrCXNlbGVjdCBDUllQVE9fTElCX0JMQUtFMlMKKysJc2VsZWN0IENSWVBUT19DSEFDSEEyMF9YODZfNjQgaWYgWDg2ICYmIDY0QklUCisrCXNlbGVjdCBDUllQVE9fUE9MWTEzMDVfWDg2XzY0IGlmIFg4NiAmJiA2NEJJVAorKwlzZWxlY3QgQ1JZUFRPX0JMQUtFMlNfWDg2IGlmIFg4NiAmJiA2NEJJVAorKwlzZWxlY3QgQ1JZUFRPX0NVUlZFMjU1MTlfWDg2IGlmIFg4NiAmJiA2NEJJVAorKwlzZWxlY3QgQ1JZUFRPX0NIQUNIQTIwX05FT04gaWYgKEFSTSB8fCBBUk02NCkgJiYgS0VSTkVMX01PREVfTkVPTgorKwlzZWxlY3QgQ1JZUFRPX1BPTFkxMzA1X05FT04gaWYgQVJNNjQgJiYgS0VSTkVMX01PREVfTkVPTgorKwlzZWxlY3QgQ1JZUFRPX1BPTFkxMzA1X0FSTSBpZiBBUk0KKysJc2VsZWN0IENSWVBUT19DVVJWRTI1NTE5X05FT04gaWYgQVJNICYmIEtFUk5FTF9NT0RFX05FT04KKysJc2VsZWN0IENSWVBUT19DSEFDSEFfTUlQUyBpZiBDUFVfTUlQUzMyX1IyCisrCXNlbGVjdCBDUllQVE9fUE9MWTEzMDVfTUlQUyBpZiBDUFVfTUlQUzMyIHx8IChDUFVfTUlQUzY0ICYmIDY0QklUKQorKwloZWxwCisrCSAgV2lyZUd1YXJkIGlzIGEgc2VjdXJlLCBmYXN0LCBhbmQgZWFzeSB0byB1c2UgcmVwbGFjZW1lbnQgZm9yIElQU2VjCisrCSAgdGhhdCB1c2VzIG1vZGVybiBjcnlwdG9ncmFwaHkgYW5kIGNsZXZlciBuZXR3b3JraW5nIHRyaWNrcy4gSXQncworKwkgIGRlc2lnbmVkIHRvIGJlIGZhaXJseSBnZW5lcmFsIHB1cnBvc2UgYW5kIGFic3RyYWN0IGVub3VnaCB0byBmaXQgbW9zdAorKwkgIHVzZSBjYXNlcywgd2hpbGUgYXQgdGhlIHNhbWUgdGltZSByZW1haW5pbmcgZXh0cmVtZWx5IHNpbXBsZSB0bworKwkgIGNvbmZpZ3VyZS4gU2VlIHd3dy53aXJlZ3VhcmQuY29tIGZvciBtb3JlIGluZm8uCisrCisrCSAgSXQncyBzYWZlIHRvIHNheSBZIG9yIE0gaGVyZSwgYXMgdGhlIGRyaXZlciBpcyB2ZXJ5IGxpZ2h0d2VpZ2h0IGFuZAorKwkgIGlzIG9ubHkgaW4gdXNlIHdoZW4gYW4gYWRtaW5pc3RyYXRvciBjaG9vc2VzIHRvIGFkZCBhbiBpbnRlcmZhY2UuCisrCisrY29uZmlnIFdJUkVHVUFSRF9ERUJVRworKwlib29sICJEZWJ1Z2dpbmcgY2hlY2tzIGFuZCB2ZXJib3NlIG1lc3NhZ2VzIgorKwlkZXBlbmRzIG9uIFdJUkVHVUFSRAorKwloZWxwCisrCSAgVGhpcyB3aWxsIHdyaXRlIGxvZyBtZXNzYWdlcyBmb3IgaGFuZHNoYWtlIGFuZCBvdGhlciBldmVudHMKKysJICB0aGF0IG9jY3VyIGZvciBhIFdpcmVHdWFyZCBpbnRlcmZhY2UuIEl0IHdpbGwgYWxzbyBwZXJmb3JtIHNvbWUKKysJICBleHRyYSB2YWxpZGF0aW9uIGNoZWNrcyBhbmQgdW5pdCB0ZXN0cyBhdCB2YXJpb3VzIHBvaW50cy4gVGhpcyBpcworKwkgIG9ubHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuCisrCisrCSAgU2F5IE4gaGVyZSB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UncmUgZG9pbmcuCisrCisgY29uZmlnIEVRVUFMSVpFUgorIAl0cmlzdGF0ZSAiRVFMIChzZXJpYWwgbGluZSBsb2FkIGJhbGFuY2luZykgc3VwcG9ydCIKKyAJLS0taGVscC0tLQorLS0tIGEvZHJpdmVycy9uZXQvTWFrZWZpbGUKKysrKyBiL2RyaXZlcnMvbmV0L01ha2VmaWxlCitAQCAtMTAsNiArMTAsNyBAQCBvYmotJChDT05GSUdfQk9ORElORykgKz0gYm9uZGluZy8KKyBvYmotJChDT05GSUdfSVBWTEFOKSArPSBpcHZsYW4vCisgb2JqLSQoQ09ORklHX0lQVlRBUCkgKz0gaXB2bGFuLworIG9iai0kKENPTkZJR19EVU1NWSkgKz0gZHVtbXkubworK29iai0kKENPTkZJR19XSVJFR1VBUkQpICs9IHdpcmVndWFyZC8KKyBvYmotJChDT05GSUdfRVFVQUxJWkVSKSArPSBlcWwubworIG9iai0kKENPTkZJR19JRkIpICs9IGlmYi5vCisgb2JqLSQoQ09ORklHX01BQ1NFQykgKz0gbWFjc2VjLm8KKy0tLSAvZGV2L251bGwKKysrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9NYWtlZmlsZQorQEAgLTAsMCArMSwxOCBAQAorK2NjZmxhZ3MteSA6PSAtTzMKKytjY2ZsYWdzLXkgKz0gLUQncHJfZm10KGZtdCk9S0JVSUxEX01PRE5BTUUgIjogIiBmbXQnCisrY2NmbGFncy0kKENPTkZJR19XSVJFR1VBUkRfREVCVUcpICs9IC1EREVCVUcKKyt3aXJlZ3VhcmQteSA6PSBtYWluLm8KKyt3aXJlZ3VhcmQteSArPSBub2lzZS5vCisrd2lyZWd1YXJkLXkgKz0gZGV2aWNlLm8KKyt3aXJlZ3VhcmQteSArPSBwZWVyLm8KKyt3aXJlZ3VhcmQteSArPSB0aW1lcnMubworK3dpcmVndWFyZC15ICs9IHF1ZXVlaW5nLm8KKyt3aXJlZ3VhcmQteSArPSBzZW5kLm8KKyt3aXJlZ3VhcmQteSArPSByZWNlaXZlLm8KKyt3aXJlZ3VhcmQteSArPSBzb2NrZXQubworK3dpcmVndWFyZC15ICs9IHBlZXJsb29rdXAubworK3dpcmVndWFyZC15ICs9IGFsbG93ZWRpcHMubworK3dpcmVndWFyZC15ICs9IHJhdGVsaW1pdGVyLm8KKyt3aXJlZ3VhcmQteSArPSBjb29raWUubworK3dpcmVndWFyZC15ICs9IG5ldGxpbmsubworK29iai0kKENPTkZJR19XSVJFR1VBUkQpIDo9IHdpcmVndWFyZC5vCistLS0gL2Rldi9udWxsCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvYWxsb3dlZGlwcy5jCitAQCAtMCwwICsxLDM4MSBAQAorKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisrLyoKKysgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisrICovCisrCisrI2luY2x1ZGUgImFsbG93ZWRpcHMuaCIKKysjaW5jbHVkZSAicGVlci5oIgorKworK3N0YXRpYyB2b2lkIHN3YXBfZW5kaWFuKHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsIHU4IGJpdHMpCisreworKwlpZiAoYml0cyA9PSAzMikgeworKwkJKih1MzIgKilkc3QgPSBiZTMyX3RvX2NwdSgqKGNvbnN0IF9fYmUzMiAqKXNyYyk7CisrCX0gZWxzZSBpZiAoYml0cyA9PSAxMjgpIHsKKysJCSgodTY0ICopZHN0KVswXSA9IGJlNjRfdG9fY3B1KCgoY29uc3QgX19iZTY0ICopc3JjKVswXSk7CisrCQkoKHU2NCAqKWRzdClbMV0gPSBiZTY0X3RvX2NwdSgoKGNvbnN0IF9fYmU2NCAqKXNyYylbMV0pOworKwl9CisrfQorKworK3N0YXRpYyB2b2lkIGNvcHlfYW5kX2Fzc2lnbl9jaWRyKHN0cnVjdCBhbGxvd2VkaXBzX25vZGUgKm5vZGUsIGNvbnN0IHU4ICpzcmMsCisrCQkJCSB1OCBjaWRyLCB1OCBiaXRzKQorK3sKKysJbm9kZS0+Y2lkciA9IGNpZHI7CisrCW5vZGUtPmJpdF9hdF9hID0gY2lkciAvIDhVOworKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KKysJbm9kZS0+Yml0X2F0X2EgXj0gKGJpdHMgLyA4VSAtIDFVKSAlIDhVOworKyNlbmRpZgorKwlub2RlLT5iaXRfYXRfYiA9IDdVIC0gKGNpZHIgJSA4VSk7CisrCW5vZGUtPmJpdGxlbiA9IGJpdHM7CisrCW1lbWNweShub2RlLT5iaXRzLCBzcmMsIGJpdHMgLyA4VSk7CisrfQorKyNkZWZpbmUgQ0hPT1NFX05PREUocGFyZW50LCBrZXkpIFwKKysJcGFyZW50LT5iaXRbKGtleVtwYXJlbnQtPmJpdF9hdF9hXSA+PiBwYXJlbnQtPmJpdF9hdF9iKSAmIDFdCisrCisrc3RhdGljIHZvaWQgbm9kZV9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkKKyt7CisrCWtmcmVlKGNvbnRhaW5lcl9vZihyY3UsIHN0cnVjdCBhbGxvd2VkaXBzX25vZGUsIHJjdSkpOworK30KKysKKytzdGF0aWMgdm9pZCBwdXNoX3JjdShzdHJ1Y3QgYWxsb3dlZGlwc19ub2RlICoqc3RhY2ssCisrCQkgICAgIHN0cnVjdCBhbGxvd2VkaXBzX25vZGUgX19yY3UgKnAsIHVuc2lnbmVkIGludCAqbGVuKQorK3sKKysJaWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihwKSkgeworKwkJV0FSTl9PTihJU19FTkFCTEVEKERFQlVHKSAmJiAqbGVuID49IDEyOCk7CisrCQlzdGFja1soKmxlbikrK10gPSByY3VfZGVyZWZlcmVuY2VfcmF3KHApOworKwl9CisrfQorKworK3N0YXRpYyB2b2lkIHJvb3RfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3UpCisreworKwlzdHJ1Y3QgYWxsb3dlZGlwc19ub2RlICpub2RlLCAqc3RhY2tbMTI4XSA9IHsKKysJCWNvbnRhaW5lcl9vZihyY3UsIHN0cnVjdCBhbGxvd2VkaXBzX25vZGUsIHJjdSkgfTsKKysJdW5zaWduZWQgaW50IGxlbiA9IDE7CisrCisrCXdoaWxlIChsZW4gPiAwICYmIChub2RlID0gc3RhY2tbLS1sZW5dKSkgeworKwkJcHVzaF9yY3Uoc3RhY2ssIG5vZGUtPmJpdFswXSwgJmxlbik7CisrCQlwdXNoX3JjdShzdGFjaywgbm9kZS0+Yml0WzFdLCAmbGVuKTsKKysJCWtmcmVlKG5vZGUpOworKwl9CisrfQorKworK3N0YXRpYyB2b2lkIHJvb3RfcmVtb3ZlX3BlZXJfbGlzdHMoc3RydWN0IGFsbG93ZWRpcHNfbm9kZSAqcm9vdCkKKyt7CisrCXN0cnVjdCBhbGxvd2VkaXBzX25vZGUgKm5vZGUsICpzdGFja1sxMjhdID0geyByb290IH07CisrCXVuc2lnbmVkIGludCBsZW4gPSAxOworKworKwl3aGlsZSAobGVuID4gMCAmJiAobm9kZSA9IHN0YWNrWy0tbGVuXSkpIHsKKysJCXB1c2hfcmN1KHN0YWNrLCBub2RlLT5iaXRbMF0sICZsZW4pOworKwkJcHVzaF9yY3Uoc3RhY2ssIG5vZGUtPmJpdFsxXSwgJmxlbik7CisrCQlpZiAocmN1X2FjY2Vzc19wb2ludGVyKG5vZGUtPnBlZXIpKQorKwkJCWxpc3RfZGVsKCZub2RlLT5wZWVyX2xpc3QpOworKwl9CisrfQorKworK3N0YXRpYyB2b2lkIHdhbGtfcmVtb3ZlX2J5X3BlZXIoc3RydWN0IGFsbG93ZWRpcHNfbm9kZSBfX3JjdSAqKnRvcCwKKysJCQkJc3RydWN0IHdnX3BlZXIgKnBlZXIsIHN0cnVjdCBtdXRleCAqbG9jaykKKyt7CisrI2RlZmluZSBSRUYocCkgcmN1X2FjY2Vzc19wb2ludGVyKHApCisrI2RlZmluZSBERVJFRihwKSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKCoocCksIGxvY2tkZXBfaXNfaGVsZChsb2NrKSkKKysjZGVmaW5lIFBVU0gocCkgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJV0FSTl9PTihJU19FTkFCTEVEKERFQlVHKSAmJiBsZW4gPj0gMTI4KTsgICAgICAgICAgICAgICAgICAgICAgXAorKwkJc3RhY2tbbGVuKytdID0gcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwl9KQorKworKwlzdHJ1Y3QgYWxsb3dlZGlwc19ub2RlIF9fcmN1ICoqc3RhY2tbMTI4XSwgKipucHRyOworKwlzdHJ1Y3QgYWxsb3dlZGlwc19ub2RlICpub2RlLCAqcHJldjsKKysJdW5zaWduZWQgaW50IGxlbjsKKysKKysJaWYgKHVubGlrZWx5KCFwZWVyIHx8ICFSRUYoKnRvcCkpKQorKwkJcmV0dXJuOworKworKwlmb3IgKHByZXYgPSBOVUxMLCBsZW4gPSAwLCBQVVNIKHRvcCk7IGxlbiA+IDA7IHByZXYgPSBub2RlKSB7CisrCQlucHRyID0gc3RhY2tbbGVuIC0gMV07CisrCQlub2RlID0gREVSRUYobnB0cik7CisrCQlpZiAoIW5vZGUpIHsKKysJCQktLWxlbjsKKysJCQljb250aW51ZTsKKysJCX0KKysJCWlmICghcHJldiB8fCBSRUYocHJldi0+Yml0WzBdKSA9PSBub2RlIHx8CisrCQkgICAgUkVGKHByZXYtPmJpdFsxXSkgPT0gbm9kZSkgeworKwkJCWlmIChSRUYobm9kZS0+Yml0WzBdKSkKKysJCQkJUFVTSCgmbm9kZS0+Yml0WzBdKTsKKysJCQllbHNlIGlmIChSRUYobm9kZS0+Yml0WzFdKSkKKysJCQkJUFVTSCgmbm9kZS0+Yml0WzFdKTsKKysJCX0gZWxzZSBpZiAoUkVGKG5vZGUtPmJpdFswXSkgPT0gcHJldikgeworKwkJCWlmIChSRUYobm9kZS0+Yml0WzFdKSkKKysJCQkJUFVTSCgmbm9kZS0+Yml0WzFdKTsKKysJCX0gZWxzZSB7CisrCQkJaWYgKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobm9kZS0+cGVlciwKKysJCQkJbG9ja2RlcF9pc19oZWxkKGxvY2spKSA9PSBwZWVyKSB7CisrCQkJCVJDVV9JTklUX1BPSU5URVIobm9kZS0+cGVlciwgTlVMTCk7CisrCQkJCWxpc3RfZGVsX2luaXQoJm5vZGUtPnBlZXJfbGlzdCk7CisrCQkJCWlmICghbm9kZS0+Yml0WzBdIHx8ICFub2RlLT5iaXRbMV0pIHsKKysJCQkJCXJjdV9hc3NpZ25fcG9pbnRlcigqbnB0ciwgREVSRUYoCisrCQkJCQkgICAgICAgJm5vZGUtPmJpdFshUkVGKG5vZGUtPmJpdFswXSldKSk7CisrCQkJCQljYWxsX3JjdSgmbm9kZS0+cmN1LCBub2RlX2ZyZWVfcmN1KTsKKysJCQkJCW5vZGUgPSBERVJFRihucHRyKTsKKysJCQkJfQorKwkJCX0KKysJCQktLWxlbjsKKysJCX0KKysJfQorKworKyN1bmRlZiBSRUYKKysjdW5kZWYgREVSRUYKKysjdW5kZWYgUFVTSAorK30KKysKKytzdGF0aWMgdW5zaWduZWQgaW50IGZsczEyOCh1NjQgYSwgdTY0IGIpCisreworKwlyZXR1cm4gYSA/IGZsczY0KGEpICsgNjRVIDogZmxzNjQoYik7CisrfQorKworK3N0YXRpYyB1OCBjb21tb25fYml0cyhjb25zdCBzdHJ1Y3QgYWxsb3dlZGlwc19ub2RlICpub2RlLCBjb25zdCB1OCAqa2V5LAorKwkJICAgICAgdTggYml0cykKKyt7CisrCWlmIChiaXRzID09IDMyKQorKwkJcmV0dXJuIDMyVSAtIGZscygqKGNvbnN0IHUzMiAqKW5vZGUtPmJpdHMgXiAqKGNvbnN0IHUzMiAqKWtleSk7CisrCWVsc2UgaWYgKGJpdHMgPT0gMTI4KQorKwkJcmV0dXJuIDEyOFUgLSBmbHMxMjgoCisrCQkJKihjb25zdCB1NjQgKikmbm9kZS0+Yml0c1swXSBeICooY29uc3QgdTY0ICopJmtleVswXSwKKysJCQkqKGNvbnN0IHU2NCAqKSZub2RlLT5iaXRzWzhdIF4gKihjb25zdCB1NjQgKikma2V5WzhdKTsKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBib29sIHByZWZpeF9tYXRjaGVzKGNvbnN0IHN0cnVjdCBhbGxvd2VkaXBzX25vZGUgKm5vZGUsIGNvbnN0IHU4ICprZXksCisrCQkJICAgdTggYml0cykKKyt7CisrCS8qIFRoaXMgY291bGQgYmUgbXVjaCBmYXN0ZXIgaWYgaXQgYWN0dWFsbHkganVzdCBjb21wYXJlZCB0aGUgY29tbW9uCisrCSAqIGJpdHMgcHJvcGVybHksIGJ5IHByZWNvbXB1dGluZyBhIG1hc2sgYnN3YXAofjAgPDwgKDMyIC0gY2lkcikpLCBhbmQKKysJICogdGhlIHJlc3QsIGJ1dCBpdCB0dXJucyBvdXQgdGhhdCBjb21tb25fYml0cyBpcyBhbHJlYWR5IHN1cGVyIGZhc3Qgb24KKysJICogbW9kZXJuIHByb2Nlc3NvcnMsIGV2ZW4gdGFraW5nIGludG8gYWNjb3VudCB0aGUgdW5mb3J0dW5hdGUgYnN3YXAuCisrCSAqIFNvLCB3ZSBqdXN0IGlubGluZSBpdCBsaWtlIHRoaXMgaW5zdGVhZC4KKysJICovCisrCXJldHVybiBjb21tb25fYml0cyhub2RlLCBrZXksIGJpdHMpID49IG5vZGUtPmNpZHI7CisrfQorKworK3N0YXRpYyBzdHJ1Y3QgYWxsb3dlZGlwc19ub2RlICpmaW5kX25vZGUoc3RydWN0IGFsbG93ZWRpcHNfbm9kZSAqdHJpZSwgdTggYml0cywKKysJCQkJCSBjb25zdCB1OCAqa2V5KQorK3sKKysJc3RydWN0IGFsbG93ZWRpcHNfbm9kZSAqbm9kZSA9IHRyaWUsICpmb3VuZCA9IE5VTEw7CisrCisrCXdoaWxlIChub2RlICYmIHByZWZpeF9tYXRjaGVzKG5vZGUsIGtleSwgYml0cykpIHsKKysJCWlmIChyY3VfYWNjZXNzX3BvaW50ZXIobm9kZS0+cGVlcikpCisrCQkJZm91bmQgPSBub2RlOworKwkJaWYgKG5vZGUtPmNpZHIgPT0gYml0cykKKysJCQlicmVhazsKKysJCW5vZGUgPSByY3VfZGVyZWZlcmVuY2VfYmgoQ0hPT1NFX05PREUobm9kZSwga2V5KSk7CisrCX0KKysJcmV0dXJuIGZvdW5kOworK30KKysKKysvKiBSZXR1cm5zIGEgc3Ryb25nIHJlZmVyZW5jZSB0byBhIHBlZXIgKi8KKytzdGF0aWMgc3RydWN0IHdnX3BlZXIgKmxvb2t1cChzdHJ1Y3QgYWxsb3dlZGlwc19ub2RlIF9fcmN1ICpyb290LCB1OCBiaXRzLAorKwkJCSAgICAgIGNvbnN0IHZvaWQgKmJlX2lwKQorK3sKKysJLyogQWxpZ25lZCBzbyBpdCBjYW4gYmUgcGFzc2VkIHRvIGZscy9mbHM2NCAqLworKwl1OCBpcFsxNl0gX19hbGlnbmVkKF9fYWxpZ25vZih1NjQpKTsKKysJc3RydWN0IGFsbG93ZWRpcHNfbm9kZSAqbm9kZTsKKysJc3RydWN0IHdnX3BlZXIgKnBlZXIgPSBOVUxMOworKworKwlzd2FwX2VuZGlhbihpcCwgYmVfaXAsIGJpdHMpOworKworKwlyY3VfcmVhZF9sb2NrX2JoKCk7CisrcmV0cnk6CisrCW5vZGUgPSBmaW5kX25vZGUocmN1X2RlcmVmZXJlbmNlX2JoKHJvb3QpLCBiaXRzLCBpcCk7CisrCWlmIChub2RlKSB7CisrCQlwZWVyID0gd2dfcGVlcl9nZXRfbWF5YmVfemVybyhyY3VfZGVyZWZlcmVuY2VfYmgobm9kZS0+cGVlcikpOworKwkJaWYgKCFwZWVyKQorKwkJCWdvdG8gcmV0cnk7CisrCX0KKysJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CisrCXJldHVybiBwZWVyOworK30KKysKKytzdGF0aWMgYm9vbCBub2RlX3BsYWNlbWVudChzdHJ1Y3QgYWxsb3dlZGlwc19ub2RlIF9fcmN1ICp0cmllLCBjb25zdCB1OCAqa2V5LAorKwkJCSAgIHU4IGNpZHIsIHU4IGJpdHMsIHN0cnVjdCBhbGxvd2VkaXBzX25vZGUgKipybm9kZSwKKysJCQkgICBzdHJ1Y3QgbXV0ZXggKmxvY2spCisreworKwlzdHJ1Y3QgYWxsb3dlZGlwc19ub2RlICpub2RlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh0cmllLAorKwkJCQkJCWxvY2tkZXBfaXNfaGVsZChsb2NrKSk7CisrCXN0cnVjdCBhbGxvd2VkaXBzX25vZGUgKnBhcmVudCA9IE5VTEw7CisrCWJvb2wgZXhhY3QgPSBmYWxzZTsKKysKKysJd2hpbGUgKG5vZGUgJiYgbm9kZS0+Y2lkciA8PSBjaWRyICYmIHByZWZpeF9tYXRjaGVzKG5vZGUsIGtleSwgYml0cykpIHsKKysJCXBhcmVudCA9IG5vZGU7CisrCQlpZiAocGFyZW50LT5jaWRyID09IGNpZHIpIHsKKysJCQlleGFjdCA9IHRydWU7CisrCQkJYnJlYWs7CisrCQl9CisrCQlub2RlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChDSE9PU0VfTk9ERShwYXJlbnQsIGtleSksCisrCQkJCQkJIGxvY2tkZXBfaXNfaGVsZChsb2NrKSk7CisrCX0KKysJKnJub2RlID0gcGFyZW50OworKwlyZXR1cm4gZXhhY3Q7CisrfQorKworK3N0YXRpYyBpbnQgYWRkKHN0cnVjdCBhbGxvd2VkaXBzX25vZGUgX19yY3UgKip0cmllLCB1OCBiaXRzLCBjb25zdCB1OCAqa2V5LAorKwkgICAgICAgdTggY2lkciwgc3RydWN0IHdnX3BlZXIgKnBlZXIsIHN0cnVjdCBtdXRleCAqbG9jaykKKyt7CisrCXN0cnVjdCBhbGxvd2VkaXBzX25vZGUgKm5vZGUsICpwYXJlbnQsICpkb3duLCAqbmV3bm9kZTsKKysKKysJaWYgKHVubGlrZWx5KGNpZHIgPiBiaXRzIHx8ICFwZWVyKSkKKysJCXJldHVybiAtRUlOVkFMOworKworKwlpZiAoIXJjdV9hY2Nlc3NfcG9pbnRlcigqdHJpZSkpIHsKKysJCW5vZGUgPSBremFsbG9jKHNpemVvZigqbm9kZSksIEdGUF9LRVJORUwpOworKwkJaWYgKHVubGlrZWx5KCFub2RlKSkKKysJCQlyZXR1cm4gLUVOT01FTTsKKysJCVJDVV9JTklUX1BPSU5URVIobm9kZS0+cGVlciwgcGVlcik7CisrCQlsaXN0X2FkZF90YWlsKCZub2RlLT5wZWVyX2xpc3QsICZwZWVyLT5hbGxvd2VkaXBzX2xpc3QpOworKwkJY29weV9hbmRfYXNzaWduX2NpZHIobm9kZSwga2V5LCBjaWRyLCBiaXRzKTsKKysJCXJjdV9hc3NpZ25fcG9pbnRlcigqdHJpZSwgbm9kZSk7CisrCQlyZXR1cm4gMDsKKysJfQorKwlpZiAobm9kZV9wbGFjZW1lbnQoKnRyaWUsIGtleSwgY2lkciwgYml0cywgJm5vZGUsIGxvY2spKSB7CisrCQlyY3VfYXNzaWduX3BvaW50ZXIobm9kZS0+cGVlciwgcGVlcik7CisrCQlsaXN0X21vdmVfdGFpbCgmbm9kZS0+cGVlcl9saXN0LCAmcGVlci0+YWxsb3dlZGlwc19saXN0KTsKKysJCXJldHVybiAwOworKwl9CisrCisrCW5ld25vZGUgPSBremFsbG9jKHNpemVvZigqbmV3bm9kZSksIEdGUF9LRVJORUwpOworKwlpZiAodW5saWtlbHkoIW5ld25vZGUpKQorKwkJcmV0dXJuIC1FTk9NRU07CisrCVJDVV9JTklUX1BPSU5URVIobmV3bm9kZS0+cGVlciwgcGVlcik7CisrCWxpc3RfYWRkX3RhaWwoJm5ld25vZGUtPnBlZXJfbGlzdCwgJnBlZXItPmFsbG93ZWRpcHNfbGlzdCk7CisrCWNvcHlfYW5kX2Fzc2lnbl9jaWRyKG5ld25vZGUsIGtleSwgY2lkciwgYml0cyk7CisrCisrCWlmICghbm9kZSkgeworKwkJZG93biA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoKnRyaWUsIGxvY2tkZXBfaXNfaGVsZChsb2NrKSk7CisrCX0gZWxzZSB7CisrCQlkb3duID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChDSE9PU0VfTk9ERShub2RlLCBrZXkpLAorKwkJCQkJCSBsb2NrZGVwX2lzX2hlbGQobG9jaykpOworKwkJaWYgKCFkb3duKSB7CisrCQkJcmN1X2Fzc2lnbl9wb2ludGVyKENIT09TRV9OT0RFKG5vZGUsIGtleSksIG5ld25vZGUpOworKwkJCXJldHVybiAwOworKwkJfQorKwl9CisrCWNpZHIgPSBtaW4oY2lkciwgY29tbW9uX2JpdHMoZG93biwga2V5LCBiaXRzKSk7CisrCXBhcmVudCA9IG5vZGU7CisrCisrCWlmIChuZXdub2RlLT5jaWRyID09IGNpZHIpIHsKKysJCXJjdV9hc3NpZ25fcG9pbnRlcihDSE9PU0VfTk9ERShuZXdub2RlLCBkb3duLT5iaXRzKSwgZG93bik7CisrCQlpZiAoIXBhcmVudCkKKysJCQlyY3VfYXNzaWduX3BvaW50ZXIoKnRyaWUsIG5ld25vZGUpOworKwkJZWxzZQorKwkJCXJjdV9hc3NpZ25fcG9pbnRlcihDSE9PU0VfTk9ERShwYXJlbnQsIG5ld25vZGUtPmJpdHMpLAorKwkJCQkJICAgbmV3bm9kZSk7CisrCX0gZWxzZSB7CisrCQlub2RlID0ga3phbGxvYyhzaXplb2YoKm5vZGUpLCBHRlBfS0VSTkVMKTsKKysJCWlmICh1bmxpa2VseSghbm9kZSkpIHsKKysJCQlrZnJlZShuZXdub2RlKTsKKysJCQlyZXR1cm4gLUVOT01FTTsKKysJCX0KKysJCUlOSVRfTElTVF9IRUFEKCZub2RlLT5wZWVyX2xpc3QpOworKwkJY29weV9hbmRfYXNzaWduX2NpZHIobm9kZSwgbmV3bm9kZS0+Yml0cywgY2lkciwgYml0cyk7CisrCisrCQlyY3VfYXNzaWduX3BvaW50ZXIoQ0hPT1NFX05PREUobm9kZSwgZG93bi0+Yml0cyksIGRvd24pOworKwkJcmN1X2Fzc2lnbl9wb2ludGVyKENIT09TRV9OT0RFKG5vZGUsIG5ld25vZGUtPmJpdHMpLCBuZXdub2RlKTsKKysJCWlmICghcGFyZW50KQorKwkJCXJjdV9hc3NpZ25fcG9pbnRlcigqdHJpZSwgbm9kZSk7CisrCQllbHNlCisrCQkJcmN1X2Fzc2lnbl9wb2ludGVyKENIT09TRV9OT0RFKHBhcmVudCwgbm9kZS0+Yml0cyksCisrCQkJCQkgICBub2RlKTsKKysJfQorKwlyZXR1cm4gMDsKKyt9CisrCisrdm9pZCB3Z19hbGxvd2VkaXBzX2luaXQoc3RydWN0IGFsbG93ZWRpcHMgKnRhYmxlKQorK3sKKysJdGFibGUtPnJvb3Q0ID0gdGFibGUtPnJvb3Q2ID0gTlVMTDsKKysJdGFibGUtPnNlcSA9IDE7CisrfQorKworK3ZvaWQgd2dfYWxsb3dlZGlwc19mcmVlKHN0cnVjdCBhbGxvd2VkaXBzICp0YWJsZSwgc3RydWN0IG11dGV4ICpsb2NrKQorK3sKKysJc3RydWN0IGFsbG93ZWRpcHNfbm9kZSBfX3JjdSAqb2xkNCA9IHRhYmxlLT5yb290NCwgKm9sZDYgPSB0YWJsZS0+cm9vdDY7CisrCisrCSsrdGFibGUtPnNlcTsKKysJUkNVX0lOSVRfUE9JTlRFUih0YWJsZS0+cm9vdDQsIE5VTEwpOworKwlSQ1VfSU5JVF9QT0lOVEVSKHRhYmxlLT5yb290NiwgTlVMTCk7CisrCWlmIChyY3VfYWNjZXNzX3BvaW50ZXIob2xkNCkpIHsKKysJCXN0cnVjdCBhbGxvd2VkaXBzX25vZGUgKm5vZGUgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG9sZDQsCisrCQkJCQkJCWxvY2tkZXBfaXNfaGVsZChsb2NrKSk7CisrCisrCQlyb290X3JlbW92ZV9wZWVyX2xpc3RzKG5vZGUpOworKwkJY2FsbF9yY3UoJm5vZGUtPnJjdSwgcm9vdF9mcmVlX3JjdSk7CisrCX0KKysJaWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihvbGQ2KSkgeworKwkJc3RydWN0IGFsbG93ZWRpcHNfbm9kZSAqbm9kZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQob2xkNiwKKysJCQkJCQkJbG9ja2RlcF9pc19oZWxkKGxvY2spKTsKKysKKysJCXJvb3RfcmVtb3ZlX3BlZXJfbGlzdHMobm9kZSk7CisrCQljYWxsX3JjdSgmbm9kZS0+cmN1LCByb290X2ZyZWVfcmN1KTsKKysJfQorK30KKysKKytpbnQgd2dfYWxsb3dlZGlwc19pbnNlcnRfdjQoc3RydWN0IGFsbG93ZWRpcHMgKnRhYmxlLCBjb25zdCBzdHJ1Y3QgaW5fYWRkciAqaXAsCisrCQkJICAgIHU4IGNpZHIsIHN0cnVjdCB3Z19wZWVyICpwZWVyLCBzdHJ1Y3QgbXV0ZXggKmxvY2spCisreworKwkvKiBBbGlnbmVkIHNvIGl0IGNhbiBiZSBwYXNzZWQgdG8gZmxzICovCisrCXU4IGtleVs0XSBfX2FsaWduZWQoX19hbGlnbm9mKHUzMikpOworKworKwkrK3RhYmxlLT5zZXE7CisrCXN3YXBfZW5kaWFuKGtleSwgKGNvbnN0IHU4ICopaXAsIDMyKTsKKysJcmV0dXJuIGFkZCgmdGFibGUtPnJvb3Q0LCAzMiwga2V5LCBjaWRyLCBwZWVyLCBsb2NrKTsKKyt9CisrCisraW50IHdnX2FsbG93ZWRpcHNfaW5zZXJ0X3Y2KHN0cnVjdCBhbGxvd2VkaXBzICp0YWJsZSwgY29uc3Qgc3RydWN0IGluNl9hZGRyICppcCwKKysJCQkgICAgdTggY2lkciwgc3RydWN0IHdnX3BlZXIgKnBlZXIsIHN0cnVjdCBtdXRleCAqbG9jaykKKyt7CisrCS8qIEFsaWduZWQgc28gaXQgY2FuIGJlIHBhc3NlZCB0byBmbHM2NCAqLworKwl1OCBrZXlbMTZdIF9fYWxpZ25lZChfX2FsaWdub2YodTY0KSk7CisrCisrCSsrdGFibGUtPnNlcTsKKysJc3dhcF9lbmRpYW4oa2V5LCAoY29uc3QgdTggKilpcCwgMTI4KTsKKysJcmV0dXJuIGFkZCgmdGFibGUtPnJvb3Q2LCAxMjgsIGtleSwgY2lkciwgcGVlciwgbG9jayk7CisrfQorKworK3ZvaWQgd2dfYWxsb3dlZGlwc19yZW1vdmVfYnlfcGVlcihzdHJ1Y3QgYWxsb3dlZGlwcyAqdGFibGUsCisrCQkJCSAgc3RydWN0IHdnX3BlZXIgKnBlZXIsIHN0cnVjdCBtdXRleCAqbG9jaykKKyt7CisrCSsrdGFibGUtPnNlcTsKKysJd2Fsa19yZW1vdmVfYnlfcGVlcigmdGFibGUtPnJvb3Q0LCBwZWVyLCBsb2NrKTsKKysJd2Fsa19yZW1vdmVfYnlfcGVlcigmdGFibGUtPnJvb3Q2LCBwZWVyLCBsb2NrKTsKKyt9CisrCisraW50IHdnX2FsbG93ZWRpcHNfcmVhZF9ub2RlKHN0cnVjdCBhbGxvd2VkaXBzX25vZGUgKm5vZGUsIHU4IGlwWzE2XSwgdTggKmNpZHIpCisreworKwljb25zdCB1bnNpZ25lZCBpbnQgY2lkcl9ieXRlcyA9IERJVl9ST1VORF9VUChub2RlLT5jaWRyLCA4VSk7CisrCXN3YXBfZW5kaWFuKGlwLCBub2RlLT5iaXRzLCBub2RlLT5iaXRsZW4pOworKwltZW1zZXQoaXAgKyBjaWRyX2J5dGVzLCAwLCBub2RlLT5iaXRsZW4gLyA4VSAtIGNpZHJfYnl0ZXMpOworKwlpZiAobm9kZS0+Y2lkcikKKysJCWlwW2NpZHJfYnl0ZXMgLSAxVV0gJj0gfjBVIDw8ICgtbm9kZS0+Y2lkciAlIDhVKTsKKysKKysJKmNpZHIgPSBub2RlLT5jaWRyOworKwlyZXR1cm4gbm9kZS0+Yml0bGVuID09IDMyID8gQUZfSU5FVCA6IEFGX0lORVQ2OworK30KKysKKysvKiBSZXR1cm5zIGEgc3Ryb25nIHJlZmVyZW5jZSB0byBhIHBlZXIgKi8KKytzdHJ1Y3Qgd2dfcGVlciAqd2dfYWxsb3dlZGlwc19sb29rdXBfZHN0KHN0cnVjdCBhbGxvd2VkaXBzICp0YWJsZSwKKysJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorK3sKKysJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKQorKwkJcmV0dXJuIGxvb2t1cCh0YWJsZS0+cm9vdDQsIDMyLCAmaXBfaGRyKHNrYiktPmRhZGRyKTsKKysJZWxzZSBpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkKKysJCXJldHVybiBsb29rdXAodGFibGUtPnJvb3Q2LCAxMjgsICZpcHY2X2hkcihza2IpLT5kYWRkcik7CisrCXJldHVybiBOVUxMOworK30KKysKKysvKiBSZXR1cm5zIGEgc3Ryb25nIHJlZmVyZW5jZSB0byBhIHBlZXIgKi8KKytzdHJ1Y3Qgd2dfcGVlciAqd2dfYWxsb3dlZGlwc19sb29rdXBfc3JjKHN0cnVjdCBhbGxvd2VkaXBzICp0YWJsZSwKKysJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorK3sKKysJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKQorKwkJcmV0dXJuIGxvb2t1cCh0YWJsZS0+cm9vdDQsIDMyLCAmaXBfaGRyKHNrYiktPnNhZGRyKTsKKysJZWxzZSBpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkKKysJCXJldHVybiBsb29rdXAodGFibGUtPnJvb3Q2LCAxMjgsICZpcHY2X2hkcihza2IpLT5zYWRkcik7CisrCXJldHVybiBOVUxMOworK30KKysKKysjaW5jbHVkZSAic2VsZnRlc3QvYWxsb3dlZGlwcy5jIgorLS0tIC9kZXYvbnVsbAorKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL2FsbG93ZWRpcHMuaAorQEAgLTAsMCArMSw1OSBAQAorKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisrLyoKKysgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisrICovCisrCisrI2lmbmRlZiBfV0dfQUxMT1dFRElQU19ICisrI2RlZmluZSBfV0dfQUxMT1dFRElQU19ICisrCisrI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisrI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisrI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KKysKKytzdHJ1Y3Qgd2dfcGVlcjsKKysKKytzdHJ1Y3QgYWxsb3dlZGlwc19ub2RlIHsKKysJc3RydWN0IHdnX3BlZXIgX19yY3UgKnBlZXI7CisrCXN0cnVjdCBhbGxvd2VkaXBzX25vZGUgX19yY3UgKmJpdFsyXTsKKysJLyogV2hpbGUgaXQgbWF5IHNlZW0gc2NhbmRhbG91cyB0aGF0IHdlIHdhc3RlIHNwYWNlIGZvciB2NCwKKysJICogd2UncmUgYWxsb2MnaW5nIHRvIHRoZSBuZWFyZXN0IHBvd2VyIG9mIDIgYW55d2F5LCBzbyB0aGlzCisrCSAqIGRvZXNuJ3QgYWN0dWFsbHkgbWFrZSBhIGRpZmZlcmVuY2UuCisrCSAqLworKwl1OCBiaXRzWzE2XSBfX2FsaWduZWQoX19hbGlnbm9mKHU2NCkpOworKwl1OCBjaWRyLCBiaXRfYXRfYSwgYml0X2F0X2IsIGJpdGxlbjsKKysKKysJLyogS2VlcCByYXJlbHkgdXNlZCBsaXN0IGF0IGJvdHRvbSB0byBiZSBiZXlvbmQgY2FjaGUgbGluZS4gKi8KKysJdW5pb24geworKwkJc3RydWN0IGxpc3RfaGVhZCBwZWVyX2xpc3Q7CisrCQlzdHJ1Y3QgcmN1X2hlYWQgcmN1OworKwl9OworK307CisrCisrc3RydWN0IGFsbG93ZWRpcHMgeworKwlzdHJ1Y3QgYWxsb3dlZGlwc19ub2RlIF9fcmN1ICpyb290NDsKKysJc3RydWN0IGFsbG93ZWRpcHNfbm9kZSBfX3JjdSAqcm9vdDY7CisrCXU2NCBzZXE7CisrfTsKKysKKyt2b2lkIHdnX2FsbG93ZWRpcHNfaW5pdChzdHJ1Y3QgYWxsb3dlZGlwcyAqdGFibGUpOworK3ZvaWQgd2dfYWxsb3dlZGlwc19mcmVlKHN0cnVjdCBhbGxvd2VkaXBzICp0YWJsZSwgc3RydWN0IG11dGV4ICptdXRleCk7CisraW50IHdnX2FsbG93ZWRpcHNfaW5zZXJ0X3Y0KHN0cnVjdCBhbGxvd2VkaXBzICp0YWJsZSwgY29uc3Qgc3RydWN0IGluX2FkZHIgKmlwLAorKwkJCSAgICB1OCBjaWRyLCBzdHJ1Y3Qgd2dfcGVlciAqcGVlciwgc3RydWN0IG11dGV4ICpsb2NrKTsKKytpbnQgd2dfYWxsb3dlZGlwc19pbnNlcnRfdjYoc3RydWN0IGFsbG93ZWRpcHMgKnRhYmxlLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmlwLAorKwkJCSAgICB1OCBjaWRyLCBzdHJ1Y3Qgd2dfcGVlciAqcGVlciwgc3RydWN0IG11dGV4ICpsb2NrKTsKKyt2b2lkIHdnX2FsbG93ZWRpcHNfcmVtb3ZlX2J5X3BlZXIoc3RydWN0IGFsbG93ZWRpcHMgKnRhYmxlLAorKwkJCQkgIHN0cnVjdCB3Z19wZWVyICpwZWVyLCBzdHJ1Y3QgbXV0ZXggKmxvY2spOworKy8qIFRoZSBpcCBpbnB1dCBwb2ludGVyIHNob3VsZCBiZSBfX2FsaWduZWQoX19hbGlnbm9mKHU2NCkpKSAqLworK2ludCB3Z19hbGxvd2VkaXBzX3JlYWRfbm9kZShzdHJ1Y3QgYWxsb3dlZGlwc19ub2RlICpub2RlLCB1OCBpcFsxNl0sIHU4ICpjaWRyKTsKKysKKysvKiBUaGVzZSByZXR1cm4gYSBzdHJvbmcgcmVmZXJlbmNlIHRvIGEgcGVlcjogKi8KKytzdHJ1Y3Qgd2dfcGVlciAqd2dfYWxsb3dlZGlwc19sb29rdXBfZHN0KHN0cnVjdCBhbGxvd2VkaXBzICp0YWJsZSwKKysJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKytzdHJ1Y3Qgd2dfcGVlciAqd2dfYWxsb3dlZGlwc19sb29rdXBfc3JjKHN0cnVjdCBhbGxvd2VkaXBzICp0YWJsZSwKKysJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKysKKysjaWZkZWYgREVCVUcKKytib29sIHdnX2FsbG93ZWRpcHNfc2VsZnRlc3Qodm9pZCk7CisrI2VuZGlmCisrCisrI2VuZGlmIC8qIF9XR19BTExPV0VESVBTX0ggKi8KKy0tLSAvZGV2L251bGwKKysrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9jb29raWUuYworQEAgLTAsMCArMSwyMzYgQEAKKysvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorKy8qCisrICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKyAqLworKworKyNpbmNsdWRlICJjb29raWUuaCIKKysjaW5jbHVkZSAicGVlci5oIgorKyNpbmNsdWRlICJkZXZpY2UuaCIKKysjaW5jbHVkZSAibWVzc2FnZXMuaCIKKysjaW5jbHVkZSAicmF0ZWxpbWl0ZXIuaCIKKysjaW5jbHVkZSAidGltZXJzLmgiCisrCisrI2luY2x1ZGUgPGNyeXB0by9ibGFrZTJzLmg+CisrI2luY2x1ZGUgPGNyeXB0by9jaGFjaGEyMHBvbHkxMzA1Lmg+CisrCisrI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CisrI2luY2x1ZGUgPGNyeXB0by9hbGdhcGkuaD4KKysKKyt2b2lkIHdnX2Nvb2tpZV9jaGVja2VyX2luaXQoc3RydWN0IGNvb2tpZV9jaGVja2VyICpjaGVja2VyLAorKwkJCSAgICBzdHJ1Y3Qgd2dfZGV2aWNlICp3ZykKKyt7CisrCWluaXRfcndzZW0oJmNoZWNrZXItPnNlY3JldF9sb2NrKTsKKysJY2hlY2tlci0+c2VjcmV0X2JpcnRoZGF0ZSA9IGt0aW1lX2dldF9jb2Fyc2VfYm9vdHRpbWVfbnMoKTsKKysJZ2V0X3JhbmRvbV9ieXRlcyhjaGVja2VyLT5zZWNyZXQsIE5PSVNFX0hBU0hfTEVOKTsKKysJY2hlY2tlci0+ZGV2aWNlID0gd2c7CisrfQorKworK2VudW0geyBDT09LSUVfS0VZX0xBQkVMX0xFTiA9IDggfTsKKytzdGF0aWMgY29uc3QgdTggbWFjMV9rZXlfbGFiZWxbQ09PS0lFX0tFWV9MQUJFTF9MRU5dID0gIm1hYzEtLS0tIjsKKytzdGF0aWMgY29uc3QgdTggY29va2llX2tleV9sYWJlbFtDT09LSUVfS0VZX0xBQkVMX0xFTl0gPSAiY29va2llLS0iOworKworK3N0YXRpYyB2b2lkIHByZWNvbXB1dGVfa2V5KHU4IGtleVtOT0lTRV9TWU1NRVRSSUNfS0VZX0xFTl0sCisrCQkJICAgY29uc3QgdTggcHVia2V5W05PSVNFX1BVQkxJQ19LRVlfTEVOXSwKKysJCQkgICBjb25zdCB1OCBsYWJlbFtDT09LSUVfS0VZX0xBQkVMX0xFTl0pCisreworKwlzdHJ1Y3QgYmxha2Uyc19zdGF0ZSBibGFrZTsKKysKKysJYmxha2Uyc19pbml0KCZibGFrZSwgTk9JU0VfU1lNTUVUUklDX0tFWV9MRU4pOworKwlibGFrZTJzX3VwZGF0ZSgmYmxha2UsIGxhYmVsLCBDT09LSUVfS0VZX0xBQkVMX0xFTik7CisrCWJsYWtlMnNfdXBkYXRlKCZibGFrZSwgcHVia2V5LCBOT0lTRV9QVUJMSUNfS0VZX0xFTik7CisrCWJsYWtlMnNfZmluYWwoJmJsYWtlLCBrZXkpOworK30KKysKKysvKiBNdXN0IGhvbGQgcGVlci0+aGFuZHNoYWtlLnN0YXRpY19pZGVudGl0eS0+bG9jayAqLworK3ZvaWQgd2dfY29va2llX2NoZWNrZXJfcHJlY29tcHV0ZV9kZXZpY2Vfa2V5cyhzdHJ1Y3QgY29va2llX2NoZWNrZXIgKmNoZWNrZXIpCisreworKwlpZiAobGlrZWx5KGNoZWNrZXItPmRldmljZS0+c3RhdGljX2lkZW50aXR5Lmhhc19pZGVudGl0eSkpIHsKKysJCXByZWNvbXB1dGVfa2V5KGNoZWNrZXItPmNvb2tpZV9lbmNyeXB0aW9uX2tleSwKKysJCQkgICAgICAgY2hlY2tlci0+ZGV2aWNlLT5zdGF0aWNfaWRlbnRpdHkuc3RhdGljX3B1YmxpYywKKysJCQkgICAgICAgY29va2llX2tleV9sYWJlbCk7CisrCQlwcmVjb21wdXRlX2tleShjaGVja2VyLT5tZXNzYWdlX21hYzFfa2V5LAorKwkJCSAgICAgICBjaGVja2VyLT5kZXZpY2UtPnN0YXRpY19pZGVudGl0eS5zdGF0aWNfcHVibGljLAorKwkJCSAgICAgICBtYWMxX2tleV9sYWJlbCk7CisrCX0gZWxzZSB7CisrCQltZW1zZXQoY2hlY2tlci0+Y29va2llX2VuY3J5cHRpb25fa2V5LCAwLAorKwkJICAgICAgIE5PSVNFX1NZTU1FVFJJQ19LRVlfTEVOKTsKKysJCW1lbXNldChjaGVja2VyLT5tZXNzYWdlX21hYzFfa2V5LCAwLCBOT0lTRV9TWU1NRVRSSUNfS0VZX0xFTik7CisrCX0KKyt9CisrCisrdm9pZCB3Z19jb29raWVfY2hlY2tlcl9wcmVjb21wdXRlX3BlZXJfa2V5cyhzdHJ1Y3Qgd2dfcGVlciAqcGVlcikKKyt7CisrCXByZWNvbXB1dGVfa2V5KHBlZXItPmxhdGVzdF9jb29raWUuY29va2llX2RlY3J5cHRpb25fa2V5LAorKwkJICAgICAgIHBlZXItPmhhbmRzaGFrZS5yZW1vdGVfc3RhdGljLCBjb29raWVfa2V5X2xhYmVsKTsKKysJcHJlY29tcHV0ZV9rZXkocGVlci0+bGF0ZXN0X2Nvb2tpZS5tZXNzYWdlX21hYzFfa2V5LAorKwkJICAgICAgIHBlZXItPmhhbmRzaGFrZS5yZW1vdGVfc3RhdGljLCBtYWMxX2tleV9sYWJlbCk7CisrfQorKworK3ZvaWQgd2dfY29va2llX2luaXQoc3RydWN0IGNvb2tpZSAqY29va2llKQorK3sKKysJbWVtc2V0KGNvb2tpZSwgMCwgc2l6ZW9mKCpjb29raWUpKTsKKysJaW5pdF9yd3NlbSgmY29va2llLT5sb2NrKTsKKyt9CisrCisrc3RhdGljIHZvaWQgY29tcHV0ZV9tYWMxKHU4IG1hYzFbQ09PS0lFX0xFTl0sIGNvbnN0IHZvaWQgKm1lc3NhZ2UsIHNpemVfdCBsZW4sCisrCQkJIGNvbnN0IHU4IGtleVtOT0lTRV9TWU1NRVRSSUNfS0VZX0xFTl0pCisreworKwlsZW4gPSBsZW4gLSBzaXplb2Yoc3RydWN0IG1lc3NhZ2VfbWFjcykgKworKwkgICAgICBvZmZzZXRvZihzdHJ1Y3QgbWVzc2FnZV9tYWNzLCBtYWMxKTsKKysJYmxha2UycyhtYWMxLCBtZXNzYWdlLCBrZXksIENPT0tJRV9MRU4sIGxlbiwgTk9JU0VfU1lNTUVUUklDX0tFWV9MRU4pOworK30KKysKKytzdGF0aWMgdm9pZCBjb21wdXRlX21hYzIodTggbWFjMltDT09LSUVfTEVOXSwgY29uc3Qgdm9pZCAqbWVzc2FnZSwgc2l6ZV90IGxlbiwKKysJCQkgY29uc3QgdTggY29va2llW0NPT0tJRV9MRU5dKQorK3sKKysJbGVuID0gbGVuIC0gc2l6ZW9mKHN0cnVjdCBtZXNzYWdlX21hY3MpICsKKysJICAgICAgb2Zmc2V0b2Yoc3RydWN0IG1lc3NhZ2VfbWFjcywgbWFjMik7CisrCWJsYWtlMnMobWFjMiwgbWVzc2FnZSwgY29va2llLCBDT09LSUVfTEVOLCBsZW4sIENPT0tJRV9MRU4pOworK30KKysKKytzdGF0aWMgdm9pZCBtYWtlX2Nvb2tpZSh1OCBjb29raWVbQ09PS0lFX0xFTl0sIHN0cnVjdCBza19idWZmICpza2IsCisrCQkJc3RydWN0IGNvb2tpZV9jaGVja2VyICpjaGVja2VyKQorK3sKKysJc3RydWN0IGJsYWtlMnNfc3RhdGUgc3RhdGU7CisrCisrCWlmICh3Z19iaXJ0aGRhdGVfaGFzX2V4cGlyZWQoY2hlY2tlci0+c2VjcmV0X2JpcnRoZGF0ZSwKKysJCQkJICAgICBDT09LSUVfU0VDUkVUX01BWF9BR0UpKSB7CisrCQlkb3duX3dyaXRlKCZjaGVja2VyLT5zZWNyZXRfbG9jayk7CisrCQljaGVja2VyLT5zZWNyZXRfYmlydGhkYXRlID0ga3RpbWVfZ2V0X2NvYXJzZV9ib290dGltZV9ucygpOworKwkJZ2V0X3JhbmRvbV9ieXRlcyhjaGVja2VyLT5zZWNyZXQsIE5PSVNFX0hBU0hfTEVOKTsKKysJCXVwX3dyaXRlKCZjaGVja2VyLT5zZWNyZXRfbG9jayk7CisrCX0KKysKKysJZG93bl9yZWFkKCZjaGVja2VyLT5zZWNyZXRfbG9jayk7CisrCisrCWJsYWtlMnNfaW5pdF9rZXkoJnN0YXRlLCBDT09LSUVfTEVOLCBjaGVja2VyLT5zZWNyZXQsIE5PSVNFX0hBU0hfTEVOKTsKKysJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKQorKwkJYmxha2Uyc191cGRhdGUoJnN0YXRlLCAodTggKikmaXBfaGRyKHNrYiktPnNhZGRyLAorKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpKTsKKysJZWxzZSBpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkKKysJCWJsYWtlMnNfdXBkYXRlKCZzdGF0ZSwgKHU4ICopJmlwdjZfaGRyKHNrYiktPnNhZGRyLAorKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CisrCWJsYWtlMnNfdXBkYXRlKCZzdGF0ZSwgKHU4ICopJnVkcF9oZHIoc2tiKS0+c291cmNlLCBzaXplb2YoX19iZTE2KSk7CisrCWJsYWtlMnNfZmluYWwoJnN0YXRlLCBjb29raWUpOworKworKwl1cF9yZWFkKCZjaGVja2VyLT5zZWNyZXRfbG9jayk7CisrfQorKworK2VudW0gY29va2llX21hY19zdGF0ZSB3Z19jb29raWVfdmFsaWRhdGVfcGFja2V0KHN0cnVjdCBjb29raWVfY2hlY2tlciAqY2hlY2tlciwKKysJCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorKwkJCQkJCWJvb2wgY2hlY2tfY29va2llKQorK3sKKysJc3RydWN0IG1lc3NhZ2VfbWFjcyAqbWFjcyA9IChzdHJ1Y3QgbWVzc2FnZV9tYWNzICopCisrCQkoc2tiLT5kYXRhICsgc2tiLT5sZW4gLSBzaXplb2YoKm1hY3MpKTsKKysJZW51bSBjb29raWVfbWFjX3N0YXRlIHJldDsKKysJdTggY29tcHV0ZWRfbWFjW0NPT0tJRV9MRU5dOworKwl1OCBjb29raWVbQ09PS0lFX0xFTl07CisrCisrCXJldCA9IElOVkFMSURfTUFDOworKwljb21wdXRlX21hYzEoY29tcHV0ZWRfbWFjLCBza2ItPmRhdGEsIHNrYi0+bGVuLAorKwkJICAgICBjaGVja2VyLT5tZXNzYWdlX21hYzFfa2V5KTsKKysJaWYgKGNyeXB0b19tZW1uZXEoY29tcHV0ZWRfbWFjLCBtYWNzLT5tYWMxLCBDT09LSUVfTEVOKSkKKysJCWdvdG8gb3V0OworKworKwlyZXQgPSBWQUxJRF9NQUNfQlVUX05PX0NPT0tJRTsKKysKKysJaWYgKCFjaGVja19jb29raWUpCisrCQlnb3RvIG91dDsKKysKKysJbWFrZV9jb29raWUoY29va2llLCBza2IsIGNoZWNrZXIpOworKworKwljb21wdXRlX21hYzIoY29tcHV0ZWRfbWFjLCBza2ItPmRhdGEsIHNrYi0+bGVuLCBjb29raWUpOworKwlpZiAoY3J5cHRvX21lbW5lcShjb21wdXRlZF9tYWMsIG1hY3MtPm1hYzIsIENPT0tJRV9MRU4pKQorKwkJZ290byBvdXQ7CisrCisrCXJldCA9IFZBTElEX01BQ19XSVRIX0NPT0tJRV9CVVRfUkFURUxJTUlURUQ7CisrCWlmICghd2dfcmF0ZWxpbWl0ZXJfYWxsb3coc2tiLCBkZXZfbmV0KGNoZWNrZXItPmRldmljZS0+ZGV2KSkpCisrCQlnb3RvIG91dDsKKysKKysJcmV0ID0gVkFMSURfTUFDX1dJVEhfQ09PS0lFOworKworK291dDoKKysJcmV0dXJuIHJldDsKKyt9CisrCisrdm9pZCB3Z19jb29raWVfYWRkX21hY190b19wYWNrZXQodm9pZCAqbWVzc2FnZSwgc2l6ZV90IGxlbiwKKysJCQkJIHN0cnVjdCB3Z19wZWVyICpwZWVyKQorK3sKKysJc3RydWN0IG1lc3NhZ2VfbWFjcyAqbWFjcyA9IChzdHJ1Y3QgbWVzc2FnZV9tYWNzICopCisrCQkoKHU4ICopbWVzc2FnZSArIGxlbiAtIHNpemVvZigqbWFjcykpOworKworKwlkb3duX3dyaXRlKCZwZWVyLT5sYXRlc3RfY29va2llLmxvY2spOworKwljb21wdXRlX21hYzEobWFjcy0+bWFjMSwgbWVzc2FnZSwgbGVuLAorKwkJICAgICBwZWVyLT5sYXRlc3RfY29va2llLm1lc3NhZ2VfbWFjMV9rZXkpOworKwltZW1jcHkocGVlci0+bGF0ZXN0X2Nvb2tpZS5sYXN0X21hYzFfc2VudCwgbWFjcy0+bWFjMSwgQ09PS0lFX0xFTik7CisrCXBlZXItPmxhdGVzdF9jb29raWUuaGF2ZV9zZW50X21hYzEgPSB0cnVlOworKwl1cF93cml0ZSgmcGVlci0+bGF0ZXN0X2Nvb2tpZS5sb2NrKTsKKysKKysJZG93bl9yZWFkKCZwZWVyLT5sYXRlc3RfY29va2llLmxvY2spOworKwlpZiAocGVlci0+bGF0ZXN0X2Nvb2tpZS5pc192YWxpZCAmJgorKwkgICAgIXdnX2JpcnRoZGF0ZV9oYXNfZXhwaXJlZChwZWVyLT5sYXRlc3RfY29va2llLmJpcnRoZGF0ZSwKKysJCQkJQ09PS0lFX1NFQ1JFVF9NQVhfQUdFIC0gQ09PS0lFX1NFQ1JFVF9MQVRFTkNZKSkKKysJCWNvbXB1dGVfbWFjMihtYWNzLT5tYWMyLCBtZXNzYWdlLCBsZW4sCisrCQkJICAgICBwZWVyLT5sYXRlc3RfY29va2llLmNvb2tpZSk7CisrCWVsc2UKKysJCW1lbXNldChtYWNzLT5tYWMyLCAwLCBDT09LSUVfTEVOKTsKKysJdXBfcmVhZCgmcGVlci0+bGF0ZXN0X2Nvb2tpZS5sb2NrKTsKKyt9CisrCisrdm9pZCB3Z19jb29raWVfbWVzc2FnZV9jcmVhdGUoc3RydWN0IG1lc3NhZ2VfaGFuZHNoYWtlX2Nvb2tpZSAqZHN0LAorKwkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IsIF9fbGUzMiBpbmRleCwKKysJCQkgICAgICBzdHJ1Y3QgY29va2llX2NoZWNrZXIgKmNoZWNrZXIpCisreworKwlzdHJ1Y3QgbWVzc2FnZV9tYWNzICptYWNzID0gKHN0cnVjdCBtZXNzYWdlX21hY3MgKikKKysJCSgodTggKilza2ItPmRhdGEgKyBza2ItPmxlbiAtIHNpemVvZigqbWFjcykpOworKwl1OCBjb29raWVbQ09PS0lFX0xFTl07CisrCisrCWRzdC0+aGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUzMihNRVNTQUdFX0hBTkRTSEFLRV9DT09LSUUpOworKwlkc3QtPnJlY2VpdmVyX2luZGV4ID0gaW5kZXg7CisrCWdldF9yYW5kb21fYnl0ZXNfd2FpdChkc3QtPm5vbmNlLCBDT09LSUVfTk9OQ0VfTEVOKTsKKysKKysJbWFrZV9jb29raWUoY29va2llLCBza2IsIGNoZWNrZXIpOworKwl4Y2hhY2hhMjBwb2x5MTMwNV9lbmNyeXB0KGRzdC0+ZW5jcnlwdGVkX2Nvb2tpZSwgY29va2llLCBDT09LSUVfTEVOLAorKwkJCQkgIG1hY3MtPm1hYzEsIENPT0tJRV9MRU4sIGRzdC0+bm9uY2UsCisrCQkJCSAgY2hlY2tlci0+Y29va2llX2VuY3J5cHRpb25fa2V5KTsKKyt9CisrCisrdm9pZCB3Z19jb29raWVfbWVzc2FnZV9jb25zdW1lKHN0cnVjdCBtZXNzYWdlX2hhbmRzaGFrZV9jb29raWUgKnNyYywKKysJCQkgICAgICAgc3RydWN0IHdnX2RldmljZSAqd2cpCisreworKwlzdHJ1Y3Qgd2dfcGVlciAqcGVlciA9IE5VTEw7CisrCXU4IGNvb2tpZVtDT09LSUVfTEVOXTsKKysJYm9vbCByZXQ7CisrCisrCWlmICh1bmxpa2VseSghd2dfaW5kZXhfaGFzaHRhYmxlX2xvb2t1cCh3Zy0+aW5kZXhfaGFzaHRhYmxlLAorKwkJCQkJCUlOREVYX0hBU0hUQUJMRV9IQU5EU0hBS0UgfAorKwkJCQkJCUlOREVYX0hBU0hUQUJMRV9LRVlQQUlSLAorKwkJCQkJCXNyYy0+cmVjZWl2ZXJfaW5kZXgsICZwZWVyKSkpCisrCQlyZXR1cm47CisrCisrCWRvd25fcmVhZCgmcGVlci0+bGF0ZXN0X2Nvb2tpZS5sb2NrKTsKKysJaWYgKHVubGlrZWx5KCFwZWVyLT5sYXRlc3RfY29va2llLmhhdmVfc2VudF9tYWMxKSkgeworKwkJdXBfcmVhZCgmcGVlci0+bGF0ZXN0X2Nvb2tpZS5sb2NrKTsKKysJCWdvdG8gb3V0OworKwl9CisrCXJldCA9IHhjaGFjaGEyMHBvbHkxMzA1X2RlY3J5cHQoCisrCQljb29raWUsIHNyYy0+ZW5jcnlwdGVkX2Nvb2tpZSwgc2l6ZW9mKHNyYy0+ZW5jcnlwdGVkX2Nvb2tpZSksCisrCQlwZWVyLT5sYXRlc3RfY29va2llLmxhc3RfbWFjMV9zZW50LCBDT09LSUVfTEVOLCBzcmMtPm5vbmNlLAorKwkJcGVlci0+bGF0ZXN0X2Nvb2tpZS5jb29raWVfZGVjcnlwdGlvbl9rZXkpOworKwl1cF9yZWFkKCZwZWVyLT5sYXRlc3RfY29va2llLmxvY2spOworKworKwlpZiAocmV0KSB7CisrCQlkb3duX3dyaXRlKCZwZWVyLT5sYXRlc3RfY29va2llLmxvY2spOworKwkJbWVtY3B5KHBlZXItPmxhdGVzdF9jb29raWUuY29va2llLCBjb29raWUsIENPT0tJRV9MRU4pOworKwkJcGVlci0+bGF0ZXN0X2Nvb2tpZS5iaXJ0aGRhdGUgPSBrdGltZV9nZXRfY29hcnNlX2Jvb3R0aW1lX25zKCk7CisrCQlwZWVyLT5sYXRlc3RfY29va2llLmlzX3ZhbGlkID0gdHJ1ZTsKKysJCXBlZXItPmxhdGVzdF9jb29raWUuaGF2ZV9zZW50X21hYzEgPSBmYWxzZTsKKysJCXVwX3dyaXRlKCZwZWVyLT5sYXRlc3RfY29va2llLmxvY2spOworKwl9IGVsc2UgeworKwkJbmV0X2RiZ19yYXRlbGltaXRlZCgiJXM6IENvdWxkIG5vdCBkZWNyeXB0IGludmFsaWQgY29va2llIHJlc3BvbnNlXG4iLAorKwkJCQkgICAgd2ctPmRldi0+bmFtZSk7CisrCX0KKysKKytvdXQ6CisrCXdnX3BlZXJfcHV0KHBlZXIpOworK30KKy0tLSAvZGV2L251bGwKKysrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9jb29raWUuaAorQEAgLTAsMCArMSw1OSBAQAorKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisrLyoKKysgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisrICovCisrCisrI2lmbmRlZiBfV0dfQ09PS0lFX0gKKysjZGVmaW5lIF9XR19DT09LSUVfSAorKworKyNpbmNsdWRlICJtZXNzYWdlcy5oIgorKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgorKworK3N0cnVjdCB3Z19wZWVyOworKworK3N0cnVjdCBjb29raWVfY2hlY2tlciB7CisrCXU4IHNlY3JldFtOT0lTRV9IQVNIX0xFTl07CisrCXU4IGNvb2tpZV9lbmNyeXB0aW9uX2tleVtOT0lTRV9TWU1NRVRSSUNfS0VZX0xFTl07CisrCXU4IG1lc3NhZ2VfbWFjMV9rZXlbTk9JU0VfU1lNTUVUUklDX0tFWV9MRU5dOworKwl1NjQgc2VjcmV0X2JpcnRoZGF0ZTsKKysJc3RydWN0IHJ3X3NlbWFwaG9yZSBzZWNyZXRfbG9jazsKKysJc3RydWN0IHdnX2RldmljZSAqZGV2aWNlOworK307CisrCisrc3RydWN0IGNvb2tpZSB7CisrCXU2NCBiaXJ0aGRhdGU7CisrCWJvb2wgaXNfdmFsaWQ7CisrCXU4IGNvb2tpZVtDT09LSUVfTEVOXTsKKysJYm9vbCBoYXZlX3NlbnRfbWFjMTsKKysJdTggbGFzdF9tYWMxX3NlbnRbQ09PS0lFX0xFTl07CisrCXU4IGNvb2tpZV9kZWNyeXB0aW9uX2tleVtOT0lTRV9TWU1NRVRSSUNfS0VZX0xFTl07CisrCXU4IG1lc3NhZ2VfbWFjMV9rZXlbTk9JU0VfU1lNTUVUUklDX0tFWV9MRU5dOworKwlzdHJ1Y3Qgcndfc2VtYXBob3JlIGxvY2s7CisrfTsKKysKKytlbnVtIGNvb2tpZV9tYWNfc3RhdGUgeworKwlJTlZBTElEX01BQywKKysJVkFMSURfTUFDX0JVVF9OT19DT09LSUUsCisrCVZBTElEX01BQ19XSVRIX0NPT0tJRV9CVVRfUkFURUxJTUlURUQsCisrCVZBTElEX01BQ19XSVRIX0NPT0tJRQorK307CisrCisrdm9pZCB3Z19jb29raWVfY2hlY2tlcl9pbml0KHN0cnVjdCBjb29raWVfY2hlY2tlciAqY2hlY2tlciwKKysJCQkgICAgc3RydWN0IHdnX2RldmljZSAqd2cpOworK3ZvaWQgd2dfY29va2llX2NoZWNrZXJfcHJlY29tcHV0ZV9kZXZpY2Vfa2V5cyhzdHJ1Y3QgY29va2llX2NoZWNrZXIgKmNoZWNrZXIpOworK3ZvaWQgd2dfY29va2llX2NoZWNrZXJfcHJlY29tcHV0ZV9wZWVyX2tleXMoc3RydWN0IHdnX3BlZXIgKnBlZXIpOworK3ZvaWQgd2dfY29va2llX2luaXQoc3RydWN0IGNvb2tpZSAqY29va2llKTsKKysKKytlbnVtIGNvb2tpZV9tYWNfc3RhdGUgd2dfY29va2llX3ZhbGlkYXRlX3BhY2tldChzdHJ1Y3QgY29va2llX2NoZWNrZXIgKmNoZWNrZXIsCisrCQkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKKysJCQkJCQlib29sIGNoZWNrX2Nvb2tpZSk7Cisrdm9pZCB3Z19jb29raWVfYWRkX21hY190b19wYWNrZXQodm9pZCAqbWVzc2FnZSwgc2l6ZV90IGxlbiwKKysJCQkJIHN0cnVjdCB3Z19wZWVyICpwZWVyKTsKKysKKyt2b2lkIHdnX2Nvb2tpZV9tZXNzYWdlX2NyZWF0ZShzdHJ1Y3QgbWVzc2FnZV9oYW5kc2hha2VfY29va2llICpzcmMsCisrCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19sZTMyIGluZGV4LAorKwkJCSAgICAgIHN0cnVjdCBjb29raWVfY2hlY2tlciAqY2hlY2tlcik7Cisrdm9pZCB3Z19jb29raWVfbWVzc2FnZV9jb25zdW1lKHN0cnVjdCBtZXNzYWdlX2hhbmRzaGFrZV9jb29raWUgKnNyYywKKysJCQkgICAgICAgc3RydWN0IHdnX2RldmljZSAqd2cpOworKworKyNlbmRpZiAvKiBfV0dfQ09PS0lFX0ggKi8KKy0tLSAvZGV2L251bGwKKysrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYworQEAgLTAsMCArMSw0NTggQEAKKysvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorKy8qCisrICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKyAqLworKworKyNpbmNsdWRlICJxdWV1ZWluZy5oIgorKyNpbmNsdWRlICJzb2NrZXQuaCIKKysjaW5jbHVkZSAidGltZXJzLmgiCisrI2luY2x1ZGUgImRldmljZS5oIgorKyNpbmNsdWRlICJyYXRlbGltaXRlci5oIgorKyNpbmNsdWRlICJwZWVyLmgiCisrI2luY2x1ZGUgIm1lc3NhZ2VzLmgiCisrCisrI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKysjaW5jbHVkZSA8bGludXgvaW5ldC5oPgorKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKysjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgorKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKysjaW5jbHVkZSA8bGludXgvaWNtcC5oPgorKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisrI2luY2x1ZGUgPG5ldC9pY21wLmg+CisrI2luY2x1ZGUgPG5ldC9ydG5ldGxpbmsuaD4KKysjaW5jbHVkZSA8bmV0L2lwX3R1bm5lbHMuaD4KKysjaW5jbHVkZSA8bmV0L2FkZHJjb25mLmg+CisrCisrc3RhdGljIExJU1RfSEVBRChkZXZpY2VfbGlzdCk7CisrCisrc3RhdGljIGludCB3Z19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCisreworKwlzdHJ1Y3QgaW5fZGV2aWNlICpkZXZfdjQgPSBfX2luX2Rldl9nZXRfcnRubChkZXYpOworKwlzdHJ1Y3QgaW5ldDZfZGV2ICpkZXZfdjYgPSBfX2luNl9kZXZfZ2V0KGRldik7CisrCXN0cnVjdCB3Z19kZXZpY2UgKndnID0gbmV0ZGV2X3ByaXYoZGV2KTsKKysJc3RydWN0IHdnX3BlZXIgKnBlZXI7CisrCWludCByZXQ7CisrCisrCWlmIChkZXZfdjQpIHsKKysJCS8qIEF0IHNvbWUgcG9pbnQgd2UgbWlnaHQgcHV0IHRoaXMgY2hlY2sgbmVhciB0aGUgaXBfcnRfc2VuZF8KKysJCSAqIHJlZGlyZWN0IGNhbGwgb2YgaXBfZm9yd2FyZCBpbiBuZXQvaXB2NC9pcF9mb3J3YXJkLmMsIHNpbWlsYXIKKysJCSAqIHRvIHRoZSBjdXJyZW50IHNlY3BhdGggY2hlY2suCisrCQkgKi8KKysJCUlOX0RFVl9DT05GX1NFVChkZXZfdjQsIFNFTkRfUkVESVJFQ1RTLCBmYWxzZSk7CisrCQlJUFY0X0RFVkNPTkZfQUxMKGRldl9uZXQoZGV2KSwgU0VORF9SRURJUkVDVFMpID0gZmFsc2U7CisrCX0KKysJaWYgKGRldl92NikKKysJCWRldl92Ni0+Y25mLmFkZHJfZ2VuX21vZGUgPSBJTjZfQUREUl9HRU5fTU9ERV9OT05FOworKworKwlyZXQgPSB3Z19zb2NrZXRfaW5pdCh3Zywgd2ctPmluY29taW5nX3BvcnQpOworKwlpZiAocmV0IDwgMCkKKysJCXJldHVybiByZXQ7CisrCW11dGV4X2xvY2soJndnLT5kZXZpY2VfdXBkYXRlX2xvY2spOworKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBlZXIsICZ3Zy0+cGVlcl9saXN0LCBwZWVyX2xpc3QpIHsKKysJCXdnX3BhY2tldF9zZW5kX3N0YWdlZF9wYWNrZXRzKHBlZXIpOworKwkJaWYgKHBlZXItPnBlcnNpc3RlbnRfa2VlcGFsaXZlX2ludGVydmFsKQorKwkJCXdnX3BhY2tldF9zZW5kX2tlZXBhbGl2ZShwZWVyKTsKKysJfQorKwltdXRleF91bmxvY2soJndnLT5kZXZpY2VfdXBkYXRlX2xvY2spOworKwlyZXR1cm4gMDsKKyt9CisrCisrI2lmZGVmIENPTkZJR19QTV9TTEVFUAorK3N0YXRpYyBpbnQgd2dfcG1fbm90aWZpY2F0aW9uKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLAorKwkJCSAgICAgIHZvaWQgKmRhdGEpCisreworKwlzdHJ1Y3Qgd2dfZGV2aWNlICp3ZzsKKysJc3RydWN0IHdnX3BlZXIgKnBlZXI7CisrCisrCS8qIElmIHRoZSBtYWNoaW5lIGlzIGNvbnN0YW50bHkgc3VzcGVuZGluZyBhbmQgcmVzdW1pbmcsIGFzIHBhcnQgb2YKKysJICogaXRzIG5vcm1hbCBvcGVyYXRpb24gcmF0aGVyIHRoYW4gYXMgYSBzb21ld2hhdCByYXJlIGV2ZW50LCB0aGVuIHdlCisrCSAqIGRvbid0IGFjdHVhbGx5IHdhbnQgdG8gY2xlYXIga2V5cy4KKysJICovCisrCWlmIChJU19FTkFCTEVEKENPTkZJR19QTV9BVVRPU0xFRVApIHx8IElTX0VOQUJMRUQoQ09ORklHX0FORFJPSUQpKQorKwkJcmV0dXJuIDA7CisrCisrCWlmIChhY3Rpb24gIT0gUE1fSElCRVJOQVRJT05fUFJFUEFSRSAmJiBhY3Rpb24gIT0gUE1fU1VTUEVORF9QUkVQQVJFKQorKwkJcmV0dXJuIDA7CisrCisrCXJ0bmxfbG9jaygpOworKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdnLCAmZGV2aWNlX2xpc3QsIGRldmljZV9saXN0KSB7CisrCQltdXRleF9sb2NrKCZ3Zy0+ZGV2aWNlX3VwZGF0ZV9sb2NrKTsKKysJCWxpc3RfZm9yX2VhY2hfZW50cnkocGVlciwgJndnLT5wZWVyX2xpc3QsIHBlZXJfbGlzdCkgeworKwkJCWRlbF90aW1lcigmcGVlci0+dGltZXJfemVyb19rZXlfbWF0ZXJpYWwpOworKwkJCXdnX25vaXNlX2hhbmRzaGFrZV9jbGVhcigmcGVlci0+aGFuZHNoYWtlKTsKKysJCQl3Z19ub2lzZV9rZXlwYWlyc19jbGVhcigmcGVlci0+a2V5cGFpcnMpOworKwkJfQorKwkJbXV0ZXhfdW5sb2NrKCZ3Zy0+ZGV2aWNlX3VwZGF0ZV9sb2NrKTsKKysJfQorKwlydG5sX3VubG9jaygpOworKwlyY3VfYmFycmllcigpOworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwbV9ub3RpZmllciA9IHsgLm5vdGlmaWVyX2NhbGwgPSB3Z19wbV9ub3RpZmljYXRpb24gfTsKKysjZW5kaWYKKysKKytzdGF0aWMgaW50IHdnX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKKyt7CisrCXN0cnVjdCB3Z19kZXZpY2UgKndnID0gbmV0ZGV2X3ByaXYoZGV2KTsKKysJc3RydWN0IHdnX3BlZXIgKnBlZXI7CisrCisrCW11dGV4X2xvY2soJndnLT5kZXZpY2VfdXBkYXRlX2xvY2spOworKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBlZXIsICZ3Zy0+cGVlcl9saXN0LCBwZWVyX2xpc3QpIHsKKysJCXdnX3BhY2tldF9wdXJnZV9zdGFnZWRfcGFja2V0cyhwZWVyKTsKKysJCXdnX3RpbWVyc19zdG9wKHBlZXIpOworKwkJd2dfbm9pc2VfaGFuZHNoYWtlX2NsZWFyKCZwZWVyLT5oYW5kc2hha2UpOworKwkJd2dfbm9pc2Vfa2V5cGFpcnNfY2xlYXIoJnBlZXItPmtleXBhaXJzKTsKKysJCXdnX25vaXNlX3Jlc2V0X2xhc3Rfc2VudF9oYW5kc2hha2UoJnBlZXItPmxhc3Rfc2VudF9oYW5kc2hha2UpOworKwl9CisrCW11dGV4X3VubG9jaygmd2ctPmRldmljZV91cGRhdGVfbG9jayk7CisrCXNrYl9xdWV1ZV9wdXJnZSgmd2ctPmluY29taW5nX2hhbmRzaGFrZXMpOworKwl3Z19zb2NrZXRfcmVpbml0KHdnLCBOVUxMLCBOVUxMKTsKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBuZXRkZXZfdHhfdCB3Z194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCisreworKwlzdHJ1Y3Qgd2dfZGV2aWNlICp3ZyA9IG5ldGRldl9wcml2KGRldik7CisrCXN0cnVjdCBza19idWZmX2hlYWQgcGFja2V0czsKKysJc3RydWN0IHdnX3BlZXIgKnBlZXI7CisrCXN0cnVjdCBza19idWZmICpuZXh0OworKwlzYV9mYW1pbHlfdCBmYW1pbHk7CisrCXUzMiBtdHU7CisrCWludCByZXQ7CisrCisrCWlmICh1bmxpa2VseSh3Z19za2JfZXhhbWluZV91bnRydXN0ZWRfaXBfaGRyKHNrYikgIT0gc2tiLT5wcm90b2NvbCkpIHsKKysJCXJldCA9IC1FUFJPVE9OT1NVUFBPUlQ7CisrCQluZXRfZGJnX3JhdGVsaW1pdGVkKCIlczogSW52YWxpZCBJUCBwYWNrZXRcbiIsIGRldi0+bmFtZSk7CisrCQlnb3RvIGVycjsKKysJfQorKworKwlwZWVyID0gd2dfYWxsb3dlZGlwc19sb29rdXBfZHN0KCZ3Zy0+cGVlcl9hbGxvd2VkaXBzLCBza2IpOworKwlpZiAodW5saWtlbHkoIXBlZXIpKSB7CisrCQlyZXQgPSAtRU5PS0VZOworKwkJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKQorKwkJCW5ldF9kYmdfcmF0ZWxpbWl0ZWQoIiVzOiBObyBwZWVyIGhhcyBhbGxvd2VkIElQcyBtYXRjaGluZyAlcEk0XG4iLAorKwkJCQkJICAgIGRldi0+bmFtZSwgJmlwX2hkcihza2IpLT5kYWRkcik7CisrCQllbHNlIGlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKQorKwkJCW5ldF9kYmdfcmF0ZWxpbWl0ZWQoIiVzOiBObyBwZWVyIGhhcyBhbGxvd2VkIElQcyBtYXRjaGluZyAlcEk2XG4iLAorKwkJCQkJICAgIGRldi0+bmFtZSwgJmlwdjZfaGRyKHNrYiktPmRhZGRyKTsKKysJCWdvdG8gZXJyOworKwl9CisrCisrCWZhbWlseSA9IFJFQURfT05DRShwZWVyLT5lbmRwb2ludC5hZGRyLnNhX2ZhbWlseSk7CisrCWlmICh1bmxpa2VseShmYW1pbHkgIT0gQUZfSU5FVCAmJiBmYW1pbHkgIT0gQUZfSU5FVDYpKSB7CisrCQlyZXQgPSAtRURFU1RBRERSUkVROworKwkJbmV0X2RiZ19yYXRlbGltaXRlZCgiJXM6IE5vIHZhbGlkIGVuZHBvaW50IGhhcyBiZWVuIGNvbmZpZ3VyZWQgb3IgZGlzY292ZXJlZCBmb3IgcGVlciAlbGx1XG4iLAorKwkJCQkgICAgZGV2LT5uYW1lLCBwZWVyLT5pbnRlcm5hbF9pZCk7CisrCQlnb3RvIGVycl9wZWVyOworKwl9CisrCisrCW10dSA9IHNrYl9kc3Qoc2tiKSA/IGRzdF9tdHUoc2tiX2RzdChza2IpKSA6IGRldi0+bXR1OworKworKwlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJnBhY2tldHMpOworKwlpZiAoIXNrYl9pc19nc28oc2tiKSkgeworKwkJc2tiX21hcmtfbm90X29uX2xpc3Qoc2tiKTsKKysJfSBlbHNlIHsKKysJCXN0cnVjdCBza19idWZmICpzZWdzID0gc2tiX2dzb19zZWdtZW50KHNrYiwgMCk7CisrCisrCQlpZiAodW5saWtlbHkoSVNfRVJSKHNlZ3MpKSkgeworKwkJCXJldCA9IFBUUl9FUlIoc2Vncyk7CisrCQkJZ290byBlcnJfcGVlcjsKKysJCX0KKysJCWRldl9rZnJlZV9za2Ioc2tiKTsKKysJCXNrYiA9IHNlZ3M7CisrCX0KKysKKysJc2tiX2xpc3Rfd2Fsa19zYWZlKHNrYiwgc2tiLCBuZXh0KSB7CisrCQlza2JfbWFya19ub3Rfb25fbGlzdChza2IpOworKworKwkJc2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQyk7CisrCQlpZiAodW5saWtlbHkoIXNrYikpCisrCQkJY29udGludWU7CisrCisrCQkvKiBXZSBvbmx5IG5lZWQgdG8ga2VlcCB0aGUgb3JpZ2luYWwgZHN0IGFyb3VuZCBmb3IgaWNtcCwKKysJCSAqIHNvIGF0IHRoaXMgcG9pbnQgd2UncmUgaW4gYSBwb3NpdGlvbiB0byBkcm9wIGl0LgorKwkJICovCisrCQlza2JfZHN0X2Ryb3Aoc2tiKTsKKysKKysJCVBBQ0tFVF9DQihza2IpLT5tdHUgPSBtdHU7CisrCisrCQlfX3NrYl9xdWV1ZV90YWlsKCZwYWNrZXRzLCBza2IpOworKwl9CisrCisrCXNwaW5fbG9ja19iaCgmcGVlci0+c3RhZ2VkX3BhY2tldF9xdWV1ZS5sb2NrKTsKKysJLyogSWYgdGhlIHF1ZXVlIGlzIGdldHRpbmcgdG9vIGJpZywgd2Ugc3RhcnQgcmVtb3ZpbmcgdGhlIG9sZGVzdCBwYWNrZXRzCisrCSAqIHVudGlsIGl0J3Mgc21hbGwgYWdhaW4uIFdlIGRvIHRoaXMgYmVmb3JlIGFkZGluZyB0aGUgbmV3IHBhY2tldCwgc28KKysJICogd2UgZG9uJ3QgcmVtb3ZlIEdTTyBzZWdtZW50cyB0aGF0IGFyZSBpbiBleGNlc3MuCisrCSAqLworKwl3aGlsZSAoc2tiX3F1ZXVlX2xlbigmcGVlci0+c3RhZ2VkX3BhY2tldF9xdWV1ZSkgPiBNQVhfU1RBR0VEX1BBQ0tFVFMpIHsKKysJCWRldl9rZnJlZV9za2IoX19za2JfZGVxdWV1ZSgmcGVlci0+c3RhZ2VkX3BhY2tldF9xdWV1ZSkpOworKwkJKytkZXYtPnN0YXRzLnR4X2Ryb3BwZWQ7CisrCX0KKysJc2tiX3F1ZXVlX3NwbGljZV90YWlsKCZwYWNrZXRzLCAmcGVlci0+c3RhZ2VkX3BhY2tldF9xdWV1ZSk7CisrCXNwaW5fdW5sb2NrX2JoKCZwZWVyLT5zdGFnZWRfcGFja2V0X3F1ZXVlLmxvY2spOworKworKwl3Z19wYWNrZXRfc2VuZF9zdGFnZWRfcGFja2V0cyhwZWVyKTsKKysKKysJd2dfcGVlcl9wdXQocGVlcik7CisrCXJldHVybiBORVRERVZfVFhfT0s7CisrCisrZXJyX3BlZXI6CisrCXdnX3BlZXJfcHV0KHBlZXIpOworK2VycjoKKysJKytkZXYtPnN0YXRzLnR4X2Vycm9yczsKKysJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKQorKwkJaWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfSE9TVF9VTlJFQUNILCAwKTsKKysJZWxzZSBpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkKKysJCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X0RFU1RfVU5SRUFDSCwgSUNNUFY2X0FERFJfVU5SRUFDSCwgMCk7CisrCWtmcmVlX3NrYihza2IpOworKwlyZXR1cm4gcmV0OworK30KKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5ldGRldl9vcHMgPSB7CisrCS5uZG9fb3BlbgkJPSB3Z19vcGVuLAorKwkubmRvX3N0b3AJCT0gd2dfc3RvcCwKKysJLm5kb19zdGFydF94bWl0CQk9IHdnX3htaXQsCisrCS5uZG9fZ2V0X3N0YXRzNjQJPSBpcF90dW5uZWxfZ2V0X3N0YXRzNjQKKyt9OworKworK3N0YXRpYyB2b2lkIHdnX2Rlc3RydWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCisreworKwlzdHJ1Y3Qgd2dfZGV2aWNlICp3ZyA9IG5ldGRldl9wcml2KGRldik7CisrCisrCXJ0bmxfbG9jaygpOworKwlsaXN0X2RlbCgmd2ctPmRldmljZV9saXN0KTsKKysJcnRubF91bmxvY2soKTsKKysJbXV0ZXhfbG9jaygmd2ctPmRldmljZV91cGRhdGVfbG9jayk7CisrCXdnLT5pbmNvbWluZ19wb3J0ID0gMDsKKysJd2dfc29ja2V0X3JlaW5pdCh3ZywgTlVMTCwgTlVMTCk7CisrCS8qIFRoZSBmaW5hbCByZWZlcmVuY2VzIGFyZSBjbGVhcmVkIGluIHRoZSBiZWxvdyBjYWxscyB0byBkZXN0cm95X3dvcmtxdWV1ZS4gKi8KKysJd2dfcGVlcl9yZW1vdmVfYWxsKHdnKTsKKysJZGVzdHJveV93b3JrcXVldWUod2ctPmhhbmRzaGFrZV9yZWNlaXZlX3dxKTsKKysJZGVzdHJveV93b3JrcXVldWUod2ctPmhhbmRzaGFrZV9zZW5kX3dxKTsKKysJZGVzdHJveV93b3JrcXVldWUod2ctPnBhY2tldF9jcnlwdF93cSk7CisrCXdnX3BhY2tldF9xdWV1ZV9mcmVlKCZ3Zy0+ZGVjcnlwdF9xdWV1ZSwgdHJ1ZSk7CisrCXdnX3BhY2tldF9xdWV1ZV9mcmVlKCZ3Zy0+ZW5jcnlwdF9xdWV1ZSwgdHJ1ZSk7CisrCXJjdV9iYXJyaWVyKCk7IC8qIFdhaXQgZm9yIGFsbCB0aGUgcGVlcnMgdG8gYmUgYWN0dWFsbHkgZnJlZWQuICovCisrCXdnX3JhdGVsaW1pdGVyX3VuaW5pdCgpOworKwltZW16ZXJvX2V4cGxpY2l0KCZ3Zy0+c3RhdGljX2lkZW50aXR5LCBzaXplb2Yod2ctPnN0YXRpY19pZGVudGl0eSkpOworKwlza2JfcXVldWVfcHVyZ2UoJndnLT5pbmNvbWluZ19oYW5kc2hha2VzKTsKKysJZnJlZV9wZXJjcHUoZGV2LT50c3RhdHMpOworKwlmcmVlX3BlcmNwdSh3Zy0+aW5jb21pbmdfaGFuZHNoYWtlc193b3JrZXIpOworKwlpZiAod2ctPmhhdmVfY3JlYXRpbmdfbmV0X3JlZikKKysJCXB1dF9uZXQod2ctPmNyZWF0aW5nX25ldCk7CisrCWt2ZnJlZSh3Zy0+aW5kZXhfaGFzaHRhYmxlKTsKKysJa3ZmcmVlKHdnLT5wZWVyX2hhc2h0YWJsZSk7CisrCW11dGV4X3VubG9jaygmd2ctPmRldmljZV91cGRhdGVfbG9jayk7CisrCisrCXByX2RlYnVnKCIlczogSW50ZXJmYWNlIGRlbGV0ZWRcbiIsIGRldi0+bmFtZSk7CisrCWZyZWVfbmV0ZGV2KGRldik7CisrfQorKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgZGV2aWNlX3R5cGUgPSB7IC5uYW1lID0gS0JVSUxEX01PRE5BTUUgfTsKKysKKytzdGF0aWMgdm9pZCB3Z19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorK3sKKysJc3RydWN0IHdnX2RldmljZSAqd2cgPSBuZXRkZXZfcHJpdihkZXYpOworKwllbnVtIHsgV0dfTkVUREVWX0ZFQVRVUkVTID0gTkVUSUZfRl9IV19DU1VNIHwgTkVUSUZfRl9SWENTVU0gfAorKwkJCQkgICAgTkVUSUZfRl9TRyB8IE5FVElGX0ZfR1NPIHwKKysJCQkJICAgIE5FVElGX0ZfR1NPX1NPRlRXQVJFIHwgTkVUSUZfRl9ISUdIRE1BIH07CisrCisrCWRldi0+bmV0ZGV2X29wcyA9ICZuZXRkZXZfb3BzOworKwlkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IDA7CisrCWRldi0+YWRkcl9sZW4gPSAwOworKwlkZXYtPm5lZWRlZF9oZWFkcm9vbSA9IERBVEFfUEFDS0VUX0hFQURfUk9PTTsKKysJZGV2LT5uZWVkZWRfdGFpbHJvb20gPSBub2lzZV9lbmNyeXB0ZWRfbGVuKE1FU1NBR0VfUEFERElOR19NVUxUSVBMRSk7CisrCWRldi0+dHlwZSA9IEFSUEhSRF9OT05FOworKwlkZXYtPmZsYWdzID0gSUZGX1BPSU5UT1BPSU5UIHwgSUZGX05PQVJQOworKwlkZXYtPnByaXZfZmxhZ3MgfD0gSUZGX05PX1FVRVVFOworKwlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTExUWDsKKysJZGV2LT5mZWF0dXJlcyB8PSBXR19ORVRERVZfRkVBVFVSRVM7CisrCWRldi0+aHdfZmVhdHVyZXMgfD0gV0dfTkVUREVWX0ZFQVRVUkVTOworKwlkZXYtPmh3X2VuY19mZWF0dXJlcyB8PSBXR19ORVRERVZfRkVBVFVSRVM7CisrCWRldi0+bXR1ID0gRVRIX0RBVEFfTEVOIC0gTUVTU0FHRV9NSU5JTVVNX0xFTkdUSCAtCisrCQkgICBzaXplb2Yoc3RydWN0IHVkcGhkcikgLQorKwkJICAgbWF4KHNpemVvZihzdHJ1Y3QgaXB2NmhkciksIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTsKKysKKysJU0VUX05FVERFVl9ERVZUWVBFKGRldiwgJmRldmljZV90eXBlKTsKKysKKysJLyogV2UgbmVlZCB0byBrZWVwIHRoZSBkc3QgYXJvdW5kIGluIGNhc2Ugb2YgaWNtcCByZXBsaWVzLiAqLworKwluZXRpZl9rZWVwX2RzdChkZXYpOworKworKwltZW1zZXQod2csIDAsIHNpemVvZigqd2cpKTsKKysJd2ctPmRldiA9IGRldjsKKyt9CisrCisrc3RhdGljIGludCB3Z19uZXdsaW5rKHN0cnVjdCBuZXQgKnNyY19uZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisrCQkgICAgICBzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sCisrCQkgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCisreworKwlzdHJ1Y3Qgd2dfZGV2aWNlICp3ZyA9IG5ldGRldl9wcml2KGRldik7CisrCWludCByZXQgPSAtRU5PTUVNOworKworKwl3Zy0+Y3JlYXRpbmdfbmV0ID0gc3JjX25ldDsKKysJaW5pdF9yd3NlbSgmd2ctPnN0YXRpY19pZGVudGl0eS5sb2NrKTsKKysJbXV0ZXhfaW5pdCgmd2ctPnNvY2tldF91cGRhdGVfbG9jayk7CisrCW11dGV4X2luaXQoJndnLT5kZXZpY2VfdXBkYXRlX2xvY2spOworKwlza2JfcXVldWVfaGVhZF9pbml0KCZ3Zy0+aW5jb21pbmdfaGFuZHNoYWtlcyk7CisrCXdnX2FsbG93ZWRpcHNfaW5pdCgmd2ctPnBlZXJfYWxsb3dlZGlwcyk7CisrCXdnX2Nvb2tpZV9jaGVja2VyX2luaXQoJndnLT5jb29raWVfY2hlY2tlciwgd2cpOworKwlJTklUX0xJU1RfSEVBRCgmd2ctPnBlZXJfbGlzdCk7CisrCXdnLT5kZXZpY2VfdXBkYXRlX2dlbiA9IDE7CisrCisrCXdnLT5wZWVyX2hhc2h0YWJsZSA9IHdnX3B1YmtleV9oYXNodGFibGVfYWxsb2MoKTsKKysJaWYgKCF3Zy0+cGVlcl9oYXNodGFibGUpCisrCQlyZXR1cm4gcmV0OworKworKwl3Zy0+aW5kZXhfaGFzaHRhYmxlID0gd2dfaW5kZXhfaGFzaHRhYmxlX2FsbG9jKCk7CisrCWlmICghd2ctPmluZGV4X2hhc2h0YWJsZSkKKysJCWdvdG8gZXJyX2ZyZWVfcGVlcl9oYXNodGFibGU7CisrCisrCWRldi0+dHN0YXRzID0gbmV0ZGV2X2FsbG9jX3BjcHVfc3RhdHMoc3RydWN0IHBjcHVfc3dfbmV0c3RhdHMpOworKwlpZiAoIWRldi0+dHN0YXRzKQorKwkJZ290byBlcnJfZnJlZV9pbmRleF9oYXNodGFibGU7CisrCisrCXdnLT5pbmNvbWluZ19oYW5kc2hha2VzX3dvcmtlciA9CisrCQl3Z19wYWNrZXRfcGVyY3B1X211bHRpY29yZV93b3JrZXJfYWxsb2MoCisrCQkJCXdnX3BhY2tldF9oYW5kc2hha2VfcmVjZWl2ZV93b3JrZXIsIHdnKTsKKysJaWYgKCF3Zy0+aW5jb21pbmdfaGFuZHNoYWtlc193b3JrZXIpCisrCQlnb3RvIGVycl9mcmVlX3RzdGF0czsKKysKKysJd2ctPmhhbmRzaGFrZV9yZWNlaXZlX3dxID0gYWxsb2Nfd29ya3F1ZXVlKCJ3Zy1rZXgtJXMiLAorKwkJCVdRX0NQVV9JTlRFTlNJVkUgfCBXUV9GUkVFWkFCTEUsIDAsIGRldi0+bmFtZSk7CisrCWlmICghd2ctPmhhbmRzaGFrZV9yZWNlaXZlX3dxKQorKwkJZ290byBlcnJfZnJlZV9pbmNvbWluZ19oYW5kc2hha2VzOworKworKwl3Zy0+aGFuZHNoYWtlX3NlbmRfd3EgPSBhbGxvY193b3JrcXVldWUoIndnLWtleC0lcyIsCisrCQkJV1FfVU5CT1VORCB8IFdRX0ZSRUVaQUJMRSwgMCwgZGV2LT5uYW1lKTsKKysJaWYgKCF3Zy0+aGFuZHNoYWtlX3NlbmRfd3EpCisrCQlnb3RvIGVycl9kZXN0cm95X2hhbmRzaGFrZV9yZWNlaXZlOworKworKwl3Zy0+cGFja2V0X2NyeXB0X3dxID0gYWxsb2Nfd29ya3F1ZXVlKCJ3Zy1jcnlwdC0lcyIsCisrCQkJV1FfQ1BVX0lOVEVOU0lWRSB8IFdRX01FTV9SRUNMQUlNLCAwLCBkZXYtPm5hbWUpOworKwlpZiAoIXdnLT5wYWNrZXRfY3J5cHRfd3EpCisrCQlnb3RvIGVycl9kZXN0cm95X2hhbmRzaGFrZV9zZW5kOworKworKwlyZXQgPSB3Z19wYWNrZXRfcXVldWVfaW5pdCgmd2ctPmVuY3J5cHRfcXVldWUsIHdnX3BhY2tldF9lbmNyeXB0X3dvcmtlciwKKysJCQkJICAgdHJ1ZSwgTUFYX1FVRVVFRF9QQUNLRVRTKTsKKysJaWYgKHJldCA8IDApCisrCQlnb3RvIGVycl9kZXN0cm95X3BhY2tldF9jcnlwdDsKKysKKysJcmV0ID0gd2dfcGFja2V0X3F1ZXVlX2luaXQoJndnLT5kZWNyeXB0X3F1ZXVlLCB3Z19wYWNrZXRfZGVjcnlwdF93b3JrZXIsCisrCQkJCSAgIHRydWUsIE1BWF9RVUVVRURfUEFDS0VUUyk7CisrCWlmIChyZXQgPCAwKQorKwkJZ290byBlcnJfZnJlZV9lbmNyeXB0X3F1ZXVlOworKworKwlyZXQgPSB3Z19yYXRlbGltaXRlcl9pbml0KCk7CisrCWlmIChyZXQgPCAwKQorKwkJZ290byBlcnJfZnJlZV9kZWNyeXB0X3F1ZXVlOworKworKwlyZXQgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTsKKysJaWYgKHJldCA8IDApCisrCQlnb3RvIGVycl91bmluaXRfcmF0ZWxpbWl0ZXI7CisrCisrCWxpc3RfYWRkKCZ3Zy0+ZGV2aWNlX2xpc3QsICZkZXZpY2VfbGlzdCk7CisrCisrCS8qIFdlIHdhaXQgdW50aWwgdGhlIGVuZCB0byBhc3NpZ24gcHJpdl9kZXN0cnVjdG9yLCBzbyB0aGF0CisrCSAqIHJlZ2lzdGVyX25ldGRldmljZSBkb2Vzbid0IGNhbGwgaXQgZm9yIHVzIGlmIGl0IGZhaWxzLgorKwkgKi8KKysJZGV2LT5wcml2X2Rlc3RydWN0b3IgPSB3Z19kZXN0cnVjdDsKKysKKysJcHJfZGVidWcoIiVzOiBJbnRlcmZhY2UgY3JlYXRlZFxuIiwgZGV2LT5uYW1lKTsKKysJcmV0dXJuIHJldDsKKysKKytlcnJfdW5pbml0X3JhdGVsaW1pdGVyOgorKwl3Z19yYXRlbGltaXRlcl91bmluaXQoKTsKKytlcnJfZnJlZV9kZWNyeXB0X3F1ZXVlOgorKwl3Z19wYWNrZXRfcXVldWVfZnJlZSgmd2ctPmRlY3J5cHRfcXVldWUsIHRydWUpOworK2Vycl9mcmVlX2VuY3J5cHRfcXVldWU6CisrCXdnX3BhY2tldF9xdWV1ZV9mcmVlKCZ3Zy0+ZW5jcnlwdF9xdWV1ZSwgdHJ1ZSk7CisrZXJyX2Rlc3Ryb3lfcGFja2V0X2NyeXB0OgorKwlkZXN0cm95X3dvcmtxdWV1ZSh3Zy0+cGFja2V0X2NyeXB0X3dxKTsKKytlcnJfZGVzdHJveV9oYW5kc2hha2Vfc2VuZDoKKysJZGVzdHJveV93b3JrcXVldWUod2ctPmhhbmRzaGFrZV9zZW5kX3dxKTsKKytlcnJfZGVzdHJveV9oYW5kc2hha2VfcmVjZWl2ZToKKysJZGVzdHJveV93b3JrcXVldWUod2ctPmhhbmRzaGFrZV9yZWNlaXZlX3dxKTsKKytlcnJfZnJlZV9pbmNvbWluZ19oYW5kc2hha2VzOgorKwlmcmVlX3BlcmNwdSh3Zy0+aW5jb21pbmdfaGFuZHNoYWtlc193b3JrZXIpOworK2Vycl9mcmVlX3RzdGF0czoKKysJZnJlZV9wZXJjcHUoZGV2LT50c3RhdHMpOworK2Vycl9mcmVlX2luZGV4X2hhc2h0YWJsZToKKysJa3ZmcmVlKHdnLT5pbmRleF9oYXNodGFibGUpOworK2Vycl9mcmVlX3BlZXJfaGFzaHRhYmxlOgorKwlrdmZyZWUod2ctPnBlZXJfaGFzaHRhYmxlKTsKKysJcmV0dXJuIHJldDsKKyt9CisrCisrc3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGxpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7CisrCS5raW5kCQkJPSBLQlVJTERfTU9ETkFNRSwKKysJLnByaXZfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHdnX2RldmljZSksCisrCS5zZXR1cAkJCT0gd2dfc2V0dXAsCisrCS5uZXdsaW5rCQk9IHdnX25ld2xpbmssCisrfTsKKysKKytzdGF0aWMgaW50IHdnX25ldGRldmljZV9ub3RpZmljYXRpb24oc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKKysJCQkJICAgICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqZGF0YSkKKyt7CisrCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoKHN0cnVjdCBuZXRkZXZfbm90aWZpZXJfaW5mbyAqKWRhdGEpLT5kZXY7CisrCXN0cnVjdCB3Z19kZXZpY2UgKndnID0gbmV0ZGV2X3ByaXYoZGV2KTsKKysKKysJQVNTRVJUX1JUTkwoKTsKKysKKysJaWYgKGFjdGlvbiAhPSBORVRERVZfUkVHSVNURVIgfHwgZGV2LT5uZXRkZXZfb3BzICE9ICZuZXRkZXZfb3BzKQorKwkJcmV0dXJuIDA7CisrCisrCWlmIChkZXZfbmV0KGRldikgPT0gd2ctPmNyZWF0aW5nX25ldCAmJiB3Zy0+aGF2ZV9jcmVhdGluZ19uZXRfcmVmKSB7CisrCQlwdXRfbmV0KHdnLT5jcmVhdGluZ19uZXQpOworKwkJd2ctPmhhdmVfY3JlYXRpbmdfbmV0X3JlZiA9IGZhbHNlOworKwl9IGVsc2UgaWYgKGRldl9uZXQoZGV2KSAhPSB3Zy0+Y3JlYXRpbmdfbmV0ICYmCisrCQkgICAhd2ctPmhhdmVfY3JlYXRpbmdfbmV0X3JlZikgeworKwkJd2ctPmhhdmVfY3JlYXRpbmdfbmV0X3JlZiA9IHRydWU7CisrCQlnZXRfbmV0KHdnLT5jcmVhdGluZ19uZXQpOworKwl9CisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG5ldGRldmljZV9ub3RpZmllciA9IHsKKysJLm5vdGlmaWVyX2NhbGwgPSB3Z19uZXRkZXZpY2Vfbm90aWZpY2F0aW9uCisrfTsKKysKKytpbnQgX19pbml0IHdnX2RldmljZV9pbml0KHZvaWQpCisreworKwlpbnQgcmV0OworKworKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKKysJcmV0ID0gcmVnaXN0ZXJfcG1fbm90aWZpZXIoJnBtX25vdGlmaWVyKTsKKysJaWYgKHJldCkKKysJCXJldHVybiByZXQ7CisrI2VuZGlmCisrCisrCXJldCA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmbmV0ZGV2aWNlX25vdGlmaWVyKTsKKysJaWYgKHJldCkKKysJCWdvdG8gZXJyb3JfcG07CisrCisrCXJldCA9IHJ0bmxfbGlua19yZWdpc3RlcigmbGlua19vcHMpOworKwlpZiAocmV0KQorKwkJZ290byBlcnJvcl9uZXRkZXZpY2U7CisrCisrCXJldHVybiAwOworKworK2Vycm9yX25ldGRldmljZToKKysJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJm5ldGRldmljZV9ub3RpZmllcik7CisrZXJyb3JfcG06CisrI2lmZGVmIENPTkZJR19QTV9TTEVFUAorKwl1bnJlZ2lzdGVyX3BtX25vdGlmaWVyKCZwbV9ub3RpZmllcik7CisrI2VuZGlmCisrCXJldHVybiByZXQ7CisrfQorKworK3ZvaWQgd2dfZGV2aWNlX3VuaW5pdCh2b2lkKQorK3sKKysJcnRubF9saW5rX3VucmVnaXN0ZXIoJmxpbmtfb3BzKTsKKysJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJm5ldGRldmljZV9ub3RpZmllcik7CisrI2lmZGVmIENPTkZJR19QTV9TTEVFUAorKwl1bnJlZ2lzdGVyX3BtX25vdGlmaWVyKCZwbV9ub3RpZmllcik7CisrI2VuZGlmCisrCXJjdV9iYXJyaWVyKCk7CisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5oCitAQCAtMCwwICsxLDY1IEBACisrLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKysvKgorKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKysgKi8KKysKKysjaWZuZGVmIF9XR19ERVZJQ0VfSAorKyNkZWZpbmUgX1dHX0RFVklDRV9ICisrCisrI2luY2x1ZGUgIm5vaXNlLmgiCisrI2luY2x1ZGUgImFsbG93ZWRpcHMuaCIKKysjaW5jbHVkZSAicGVlcmxvb2t1cC5oIgorKyNpbmNsdWRlICJjb29raWUuaCIKKysKKysjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKysjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisrI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorKyNpbmNsdWRlIDxsaW51eC9uZXQuaD4KKysjaW5jbHVkZSA8bGludXgvcHRyX3JpbmcuaD4KKysKKytzdHJ1Y3Qgd2dfZGV2aWNlOworKworK3N0cnVjdCBtdWx0aWNvcmVfd29ya2VyIHsKKysJdm9pZCAqcHRyOworKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKyt9OworKworK3N0cnVjdCBjcnlwdF9xdWV1ZSB7CisrCXN0cnVjdCBwdHJfcmluZyByaW5nOworKwl1bmlvbiB7CisrCQlzdHJ1Y3QgeworKwkJCXN0cnVjdCBtdWx0aWNvcmVfd29ya2VyIF9fcGVyY3B1ICp3b3JrZXI7CisrCQkJaW50IGxhc3RfY3B1OworKwkJfTsKKysJCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworKwl9OworK307CisrCisrc3RydWN0IHdnX2RldmljZSB7CisrCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisrCXN0cnVjdCBjcnlwdF9xdWV1ZSBlbmNyeXB0X3F1ZXVlLCBkZWNyeXB0X3F1ZXVlOworKwlzdHJ1Y3Qgc29jayBfX3JjdSAqc29jazQsICpzb2NrNjsKKysJc3RydWN0IG5ldCAqY3JlYXRpbmdfbmV0OworKwlzdHJ1Y3Qgbm9pc2Vfc3RhdGljX2lkZW50aXR5IHN0YXRpY19pZGVudGl0eTsKKysJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmhhbmRzaGFrZV9yZWNlaXZlX3dxLCAqaGFuZHNoYWtlX3NlbmRfd3E7CisrCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpwYWNrZXRfY3J5cHRfd3E7CisrCXN0cnVjdCBza19idWZmX2hlYWQgaW5jb21pbmdfaGFuZHNoYWtlczsKKysJaW50IGluY29taW5nX2hhbmRzaGFrZV9jcHU7CisrCXN0cnVjdCBtdWx0aWNvcmVfd29ya2VyIF9fcGVyY3B1ICppbmNvbWluZ19oYW5kc2hha2VzX3dvcmtlcjsKKysJc3RydWN0IGNvb2tpZV9jaGVja2VyIGNvb2tpZV9jaGVja2VyOworKwlzdHJ1Y3QgcHVia2V5X2hhc2h0YWJsZSAqcGVlcl9oYXNodGFibGU7CisrCXN0cnVjdCBpbmRleF9oYXNodGFibGUgKmluZGV4X2hhc2h0YWJsZTsKKysJc3RydWN0IGFsbG93ZWRpcHMgcGVlcl9hbGxvd2VkaXBzOworKwlzdHJ1Y3QgbXV0ZXggZGV2aWNlX3VwZGF0ZV9sb2NrLCBzb2NrZXRfdXBkYXRlX2xvY2s7CisrCXN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlX2xpc3QsIHBlZXJfbGlzdDsKKysJdW5zaWduZWQgaW50IG51bV9wZWVycywgZGV2aWNlX3VwZGF0ZV9nZW47CisrCXUzMiBmd21hcms7CisrCXUxNiBpbmNvbWluZ19wb3J0OworKwlib29sIGhhdmVfY3JlYXRpbmdfbmV0X3JlZjsKKyt9OworKworK2ludCB3Z19kZXZpY2VfaW5pdCh2b2lkKTsKKyt2b2lkIHdnX2RldmljZV91bmluaXQodm9pZCk7CisrCisrI2VuZGlmIC8qIF9XR19ERVZJQ0VfSCAqLworLS0tIC9kZXYvbnVsbAorKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL21haW4uYworQEAgLTAsMCArMSw2NCBAQAorKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisrLyoKKysgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisrICovCisrCisrI2luY2x1ZGUgInZlcnNpb24uaCIKKysjaW5jbHVkZSAiZGV2aWNlLmgiCisrI2luY2x1ZGUgIm5vaXNlLmgiCisrI2luY2x1ZGUgInF1ZXVlaW5nLmgiCisrI2luY2x1ZGUgInJhdGVsaW1pdGVyLmgiCisrI2luY2x1ZGUgIm5ldGxpbmsuaCIKKysKKysjaW5jbHVkZSA8dWFwaS9saW51eC93aXJlZ3VhcmQuaD4KKysKKysjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisrI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorKyNpbmNsdWRlIDxsaW51eC9nZW5ldGxpbmsuaD4KKysjaW5jbHVkZSA8bmV0L3J0bmV0bGluay5oPgorKworK3N0YXRpYyBpbnQgX19pbml0IG1vZF9pbml0KHZvaWQpCisreworKwlpbnQgcmV0OworKworKyNpZmRlZiBERUJVRworKwlpZiAoIXdnX2FsbG93ZWRpcHNfc2VsZnRlc3QoKSB8fCAhd2dfcGFja2V0X2NvdW50ZXJfc2VsZnRlc3QoKSB8fAorKwkgICAgIXdnX3JhdGVsaW1pdGVyX3NlbGZ0ZXN0KCkpCisrCQlyZXR1cm4gLUVOT1RSRUNPVkVSQUJMRTsKKysjZW5kaWYKKysJd2dfbm9pc2VfaW5pdCgpOworKworKwlyZXQgPSB3Z19kZXZpY2VfaW5pdCgpOworKwlpZiAocmV0IDwgMCkKKysJCWdvdG8gZXJyX2RldmljZTsKKysKKysJcmV0ID0gd2dfZ2VuZXRsaW5rX2luaXQoKTsKKysJaWYgKHJldCA8IDApCisrCQlnb3RvIGVycl9uZXRsaW5rOworKworKwlwcl9pbmZvKCJXaXJlR3VhcmQgIiBXSVJFR1VBUkRfVkVSU0lPTiAiIGxvYWRlZC4gU2VlIHd3dy53aXJlZ3VhcmQuY29tIGZvciBpbmZvcm1hdGlvbi5cbiIpOworKwlwcl9pbmZvKCJDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4iKTsKKysKKysJcmV0dXJuIDA7CisrCisrZXJyX25ldGxpbms6CisrCXdnX2RldmljZV91bmluaXQoKTsKKytlcnJfZGV2aWNlOgorKwlyZXR1cm4gcmV0OworK30KKysKKytzdGF0aWMgdm9pZCBfX2V4aXQgbW9kX2V4aXQodm9pZCkKKyt7CisrCXdnX2dlbmV0bGlua191bmluaXQoKTsKKysJd2dfZGV2aWNlX3VuaW5pdCgpOworK30KKysKKyttb2R1bGVfaW5pdChtb2RfaW5pdCk7CisrbW9kdWxlX2V4aXQobW9kX2V4aXQpOworK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKKytNT0RVTEVfREVTQ1JJUFRJT04oIldpcmVHdWFyZCBzZWN1cmUgbmV0d29yayB0dW5uZWwiKTsKKytNT0RVTEVfQVVUSE9SKCJKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4iKTsKKytNT0RVTEVfVkVSU0lPTihXSVJFR1VBUkRfVkVSU0lPTik7CisrTU9EVUxFX0FMSUFTX1JUTkxfTElOSyhLQlVJTERfTU9ETkFNRSk7CisrTU9EVUxFX0FMSUFTX0dFTkxfRkFNSUxZKFdHX0dFTkxfTkFNRSk7CistLS0gL2Rldi9udWxsCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvbWVzc2FnZXMuaAorQEAgLTAsMCArMSwxMjggQEAKKysvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworKy8qCisrICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKyAqLworKworKyNpZm5kZWYgX1dHX01FU1NBR0VTX0gKKysjZGVmaW5lIF9XR19NRVNTQUdFU19ICisrCisrI2luY2x1ZGUgPGNyeXB0by9jdXJ2ZTI1NTE5Lmg+CisrI2luY2x1ZGUgPGNyeXB0by9jaGFjaGEyMHBvbHkxMzA1Lmg+CisrI2luY2x1ZGUgPGNyeXB0by9ibGFrZTJzLmg+CisrCisrI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorKyNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgorKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKysKKytlbnVtIG5vaXNlX2xlbmd0aHMgeworKwlOT0lTRV9QVUJMSUNfS0VZX0xFTiA9IENVUlZFMjU1MTlfS0VZX1NJWkUsCisrCU5PSVNFX1NZTU1FVFJJQ19LRVlfTEVOID0gQ0hBQ0hBMjBQT0xZMTMwNV9LRVlfU0laRSwKKysJTk9JU0VfVElNRVNUQU1QX0xFTiA9IHNpemVvZih1NjQpICsgc2l6ZW9mKHUzMiksCisrCU5PSVNFX0FVVEhUQUdfTEVOID0gQ0hBQ0hBMjBQT0xZMTMwNV9BVVRIVEFHX1NJWkUsCisrCU5PSVNFX0hBU0hfTEVOID0gQkxBS0UyU19IQVNIX1NJWkUKKyt9OworKworKyNkZWZpbmUgbm9pc2VfZW5jcnlwdGVkX2xlbihwbGFpbl9sZW4pICgocGxhaW5fbGVuKSArIE5PSVNFX0FVVEhUQUdfTEVOKQorKworK2VudW0gY29va2llX3ZhbHVlcyB7CisrCUNPT0tJRV9TRUNSRVRfTUFYX0FHRSA9IDIgKiA2MCwKKysJQ09PS0lFX1NFQ1JFVF9MQVRFTkNZID0gNSwKKysJQ09PS0lFX05PTkNFX0xFTiA9IFhDSEFDSEEyMFBPTFkxMzA1X05PTkNFX1NJWkUsCisrCUNPT0tJRV9MRU4gPSAxNgorK307CisrCisrZW51bSBjb3VudGVyX3ZhbHVlcyB7CisrCUNPVU5URVJfQklUU19UT1RBTCA9IDIwNDgsCisrCUNPVU5URVJfUkVEVU5EQU5UX0JJVFMgPSBCSVRTX1BFUl9MT05HLAorKwlDT1VOVEVSX1dJTkRPV19TSVpFID0gQ09VTlRFUl9CSVRTX1RPVEFMIC0gQ09VTlRFUl9SRURVTkRBTlRfQklUUworK307CisrCisrZW51bSBsaW1pdHMgeworKwlSRUtFWV9BRlRFUl9NRVNTQUdFUyA9IDFVTEwgPDwgNjAsCisrCVJFSkVDVF9BRlRFUl9NRVNTQUdFUyA9IFU2NF9NQVggLSBDT1VOVEVSX1dJTkRPV19TSVpFIC0gMSwKKysJUkVLRVlfVElNRU9VVCA9IDUsCisrCVJFS0VZX1RJTUVPVVRfSklUVEVSX01BWF9KSUZGSUVTID0gSFogLyAzLAorKwlSRUtFWV9BRlRFUl9USU1FID0gMTIwLAorKwlSRUpFQ1RfQUZURVJfVElNRSA9IDE4MCwKKysJSU5JVElBVElPTlNfUEVSX1NFQ09ORCA9IDUwLAorKwlNQVhfUEVFUlNfUEVSX0RFVklDRSA9IDFVIDw8IDIwLAorKwlLRUVQQUxJVkVfVElNRU9VVCA9IDEwLAorKwlNQVhfVElNRVJfSEFORFNIQUtFUyA9IDkwIC8gUkVLRVlfVElNRU9VVCwKKysJTUFYX1FVRVVFRF9JTkNPTUlOR19IQU5EU0hBS0VTID0gNDA5NiwgLyogVE9ETzogcmVwbGFjZSB0aGlzIHdpdGggRFFMICovCisrCU1BWF9TVEFHRURfUEFDS0VUUyA9IDEyOCwKKysJTUFYX1FVRVVFRF9QQUNLRVRTID0gMTAyNCAvKiBUT0RPOiByZXBsYWNlIHRoaXMgd2l0aCBEUUwgKi8KKyt9OworKworK2VudW0gbWVzc2FnZV90eXBlIHsKKysJTUVTU0FHRV9JTlZBTElEID0gMCwKKysJTUVTU0FHRV9IQU5EU0hBS0VfSU5JVElBVElPTiA9IDEsCisrCU1FU1NBR0VfSEFORFNIQUtFX1JFU1BPTlNFID0gMiwKKysJTUVTU0FHRV9IQU5EU0hBS0VfQ09PS0lFID0gMywKKysJTUVTU0FHRV9EQVRBID0gNAorK307CisrCisrc3RydWN0IG1lc3NhZ2VfaGVhZGVyIHsKKysJLyogVGhlIGFjdHVhbCBsYXlvdXQgb2YgdGhpcyB0aGF0IHdlIHdhbnQgaXM6CisrCSAqIHU4IHR5cGUKKysJICogdTggcmVzZXJ2ZWRfemVyb1szXQorKwkgKgorKwkgKiBCdXQgaXQgdHVybnMgb3V0IHRoYXQgYnkgZW5jb2RpbmcgdGhpcyBhcyBsaXR0bGUgZW5kaWFuLAorKwkgKiB3ZSBhY2hpZXZlIHRoZSBzYW1lIHRoaW5nLCBhbmQgaXQgbWFrZXMgY2hlY2tpbmcgZmFzdGVyLgorKwkgKi8KKysJX19sZTMyIHR5cGU7CisrfTsKKysKKytzdHJ1Y3QgbWVzc2FnZV9tYWNzIHsKKysJdTggbWFjMVtDT09LSUVfTEVOXTsKKysJdTggbWFjMltDT09LSUVfTEVOXTsKKyt9OworKworK3N0cnVjdCBtZXNzYWdlX2hhbmRzaGFrZV9pbml0aWF0aW9uIHsKKysJc3RydWN0IG1lc3NhZ2VfaGVhZGVyIGhlYWRlcjsKKysJX19sZTMyIHNlbmRlcl9pbmRleDsKKysJdTggdW5lbmNyeXB0ZWRfZXBoZW1lcmFsW05PSVNFX1BVQkxJQ19LRVlfTEVOXTsKKysJdTggZW5jcnlwdGVkX3N0YXRpY1tub2lzZV9lbmNyeXB0ZWRfbGVuKE5PSVNFX1BVQkxJQ19LRVlfTEVOKV07CisrCXU4IGVuY3J5cHRlZF90aW1lc3RhbXBbbm9pc2VfZW5jcnlwdGVkX2xlbihOT0lTRV9USU1FU1RBTVBfTEVOKV07CisrCXN0cnVjdCBtZXNzYWdlX21hY3MgbWFjczsKKyt9OworKworK3N0cnVjdCBtZXNzYWdlX2hhbmRzaGFrZV9yZXNwb25zZSB7CisrCXN0cnVjdCBtZXNzYWdlX2hlYWRlciBoZWFkZXI7CisrCV9fbGUzMiBzZW5kZXJfaW5kZXg7CisrCV9fbGUzMiByZWNlaXZlcl9pbmRleDsKKysJdTggdW5lbmNyeXB0ZWRfZXBoZW1lcmFsW05PSVNFX1BVQkxJQ19LRVlfTEVOXTsKKysJdTggZW5jcnlwdGVkX25vdGhpbmdbbm9pc2VfZW5jcnlwdGVkX2xlbigwKV07CisrCXN0cnVjdCBtZXNzYWdlX21hY3MgbWFjczsKKyt9OworKworK3N0cnVjdCBtZXNzYWdlX2hhbmRzaGFrZV9jb29raWUgeworKwlzdHJ1Y3QgbWVzc2FnZV9oZWFkZXIgaGVhZGVyOworKwlfX2xlMzIgcmVjZWl2ZXJfaW5kZXg7CisrCXU4IG5vbmNlW0NPT0tJRV9OT05DRV9MRU5dOworKwl1OCBlbmNyeXB0ZWRfY29va2llW25vaXNlX2VuY3J5cHRlZF9sZW4oQ09PS0lFX0xFTildOworK307CisrCisrc3RydWN0IG1lc3NhZ2VfZGF0YSB7CisrCXN0cnVjdCBtZXNzYWdlX2hlYWRlciBoZWFkZXI7CisrCV9fbGUzMiBrZXlfaWR4OworKwlfX2xlNjQgY291bnRlcjsKKysJdTggZW5jcnlwdGVkX2RhdGFbXTsKKyt9OworKworKyNkZWZpbmUgbWVzc2FnZV9kYXRhX2xlbihwbGFpbl9sZW4pIFwKKysJKG5vaXNlX2VuY3J5cHRlZF9sZW4ocGxhaW5fbGVuKSArIHNpemVvZihzdHJ1Y3QgbWVzc2FnZV9kYXRhKSkKKysKKytlbnVtIG1lc3NhZ2VfYWxpZ25tZW50cyB7CisrCU1FU1NBR0VfUEFERElOR19NVUxUSVBMRSA9IDE2LAorKwlNRVNTQUdFX01JTklNVU1fTEVOR1RIID0gbWVzc2FnZV9kYXRhX2xlbigwKQorK307CisrCisrI2RlZmluZSBTS0JfSEVBREVSX0xFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJKG1heChzaXplb2Yoc3RydWN0IGlwaGRyKSwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkgKyBcCisrCSBzaXplb2Yoc3RydWN0IHVkcGhkcikgKyBORVRfU0tCX1BBRCkKKysjZGVmaW5lIERBVEFfUEFDS0VUX0hFQURfUk9PTSBcCisrCUFMSUdOKHNpemVvZihzdHJ1Y3QgbWVzc2FnZV9kYXRhKSArIFNLQl9IRUFERVJfTEVOLCA0KQorKworK2VudW0geyBIQU5EU0hBS0VfRFNDUCA9IDB4ODggLyogQUY0MSwgcGx1cyAwMCBFQ04gKi8gfTsKKysKKysjZW5kaWYgLyogX1dHX01FU1NBR0VTX0ggKi8KKy0tLSAvZGV2L251bGwKKysrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmMKK0BAIC0wLDAgKzEsNjQ4IEBACisrLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKysvKgorKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKysgKi8KKysKKysjaW5jbHVkZSAibmV0bGluay5oIgorKyNpbmNsdWRlICJkZXZpY2UuaCIKKysjaW5jbHVkZSAicGVlci5oIgorKyNpbmNsdWRlICJzb2NrZXQuaCIKKysjaW5jbHVkZSAicXVldWVpbmcuaCIKKysjaW5jbHVkZSAibWVzc2FnZXMuaCIKKysKKysjaW5jbHVkZSA8dWFwaS9saW51eC93aXJlZ3VhcmQuaD4KKysKKysjaW5jbHVkZSA8bGludXgvaWYuaD4KKysjaW5jbHVkZSA8bmV0L2dlbmV0bGluay5oPgorKyNpbmNsdWRlIDxuZXQvc29jay5oPgorKyNpbmNsdWRlIDxjcnlwdG8vYWxnYXBpLmg+CisrCisrc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBnZW5sX2ZhbWlseTsKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZGV2aWNlX3BvbGljeVtXR0RFVklDRV9BX01BWCArIDFdID0geworKwlbV0dERVZJQ0VfQV9JRklOREVYXQkJPSB7IC50eXBlID0gTkxBX1UzMiB9LAorKwlbV0dERVZJQ0VfQV9JRk5BTUVdCQk9IHsgLnR5cGUgPSBOTEFfTlVMX1NUUklORywgLmxlbiA9IElGTkFNU0laIC0gMSB9LAorKwlbV0dERVZJQ0VfQV9QUklWQVRFX0tFWV0JPSB7IC50eXBlID0gTkxBX0VYQUNUX0xFTiwgLmxlbiA9IE5PSVNFX1BVQkxJQ19LRVlfTEVOIH0sCisrCVtXR0RFVklDRV9BX1BVQkxJQ19LRVldCQk9IHsgLnR5cGUgPSBOTEFfRVhBQ1RfTEVOLCAubGVuID0gTk9JU0VfUFVCTElDX0tFWV9MRU4gfSwKKysJW1dHREVWSUNFX0FfRkxBR1NdCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCisrCVtXR0RFVklDRV9BX0xJU1RFTl9QT1JUXQk9IHsgLnR5cGUgPSBOTEFfVTE2IH0sCisrCVtXR0RFVklDRV9BX0ZXTUFSS10JCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKKysJW1dHREVWSUNFX0FfUEVFUlNdCQk9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0KKyt9OworKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBwZWVyX3BvbGljeVtXR1BFRVJfQV9NQVggKyAxXSA9IHsKKysJW1dHUEVFUl9BX1BVQkxJQ19LRVldCQkJCT0geyAudHlwZSA9IE5MQV9FWEFDVF9MRU4sIC5sZW4gPSBOT0lTRV9QVUJMSUNfS0VZX0xFTiB9LAorKwlbV0dQRUVSX0FfUFJFU0hBUkVEX0tFWV0JCQk9IHsgLnR5cGUgPSBOTEFfRVhBQ1RfTEVOLCAubGVuID0gTk9JU0VfU1lNTUVUUklDX0tFWV9MRU4gfSwKKysJW1dHUEVFUl9BX0ZMQUdTXQkJCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCisrCVtXR1BFRVJfQV9FTkRQT0lOVF0JCQkJPSB7IC50eXBlID0gTkxBX01JTl9MRU4sIC5sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSB9LAorKwlbV0dQRUVSX0FfUEVSU0lTVEVOVF9LRUVQQUxJVkVfSU5URVJWQUxdCT0geyAudHlwZSA9IE5MQV9VMTYgfSwKKysJW1dHUEVFUl9BX0xBU1RfSEFORFNIQUtFX1RJTUVdCQkJPSB7IC50eXBlID0gTkxBX0VYQUNUX0xFTiwgLmxlbiA9IHNpemVvZihzdHJ1Y3QgX19rZXJuZWxfdGltZXNwZWMpIH0sCisrCVtXR1BFRVJfQV9SWF9CWVRFU10JCQkJPSB7IC50eXBlID0gTkxBX1U2NCB9LAorKwlbV0dQRUVSX0FfVFhfQllURVNdCQkJCT0geyAudHlwZSA9IE5MQV9VNjQgfSwKKysJW1dHUEVFUl9BX0FMTE9XRURJUFNdCQkJCT0geyAudHlwZSA9IE5MQV9ORVNURUQgfSwKKysJW1dHUEVFUl9BX1BST1RPQ09MX1ZFUlNJT05dCQkJPSB7IC50eXBlID0gTkxBX1UzMiB9CisrfTsKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgYWxsb3dlZGlwX3BvbGljeVtXR0FMTE9XRURJUF9BX01BWCArIDFdID0geworKwlbV0dBTExPV0VESVBfQV9GQU1JTFldCQk9IHsgLnR5cGUgPSBOTEFfVTE2IH0sCisrCVtXR0FMTE9XRURJUF9BX0lQQUREUl0JCT0geyAudHlwZSA9IE5MQV9NSU5fTEVOLCAubGVuID0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSB9LAorKwlbV0dBTExPV0VESVBfQV9DSURSX01BU0tdCT0geyAudHlwZSA9IE5MQV9VOCB9CisrfTsKKysKKytzdGF0aWMgc3RydWN0IHdnX2RldmljZSAqbG9va3VwX2ludGVyZmFjZShzdHJ1Y3QgbmxhdHRyICoqYXR0cnMsCisrCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpCisreworKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKKysKKysJaWYgKCFhdHRyc1tXR0RFVklDRV9BX0lGSU5ERVhdID09ICFhdHRyc1tXR0RFVklDRV9BX0lGTkFNRV0pCisrCQlyZXR1cm4gRVJSX1BUUigtRUJBRFIpOworKwlpZiAoYXR0cnNbV0dERVZJQ0VfQV9JRklOREVYXSkKKysJCWRldiA9IGRldl9nZXRfYnlfaW5kZXgoc29ja19uZXQoc2tiLT5zayksCisrCQkJCSAgICAgICBubGFfZ2V0X3UzMihhdHRyc1tXR0RFVklDRV9BX0lGSU5ERVhdKSk7CisrCWVsc2UgaWYgKGF0dHJzW1dHREVWSUNFX0FfSUZOQU1FXSkKKysJCWRldiA9IGRldl9nZXRfYnlfbmFtZShzb2NrX25ldChza2ItPnNrKSwKKysJCQkJICAgICAgbmxhX2RhdGEoYXR0cnNbV0dERVZJQ0VfQV9JRk5BTUVdKSk7CisrCWlmICghZGV2KQorKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CisrCWlmICghZGV2LT5ydG5sX2xpbmtfb3BzIHx8ICFkZXYtPnJ0bmxfbGlua19vcHMtPmtpbmQgfHwKKysJICAgIHN0cmNtcChkZXYtPnJ0bmxfbGlua19vcHMtPmtpbmQsIEtCVUlMRF9NT0ROQU1FKSkgeworKwkJZGV2X3B1dChkZXYpOworKwkJcmV0dXJuIEVSUl9QVFIoLUVPUE5PVFNVUFApOworKwl9CisrCXJldHVybiBuZXRkZXZfcHJpdihkZXYpOworK30KKysKKytzdGF0aWMgaW50IGdldF9hbGxvd2VkaXBzKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHU4ICppcCwgdTggY2lkciwKKysJCQkgIGludCBmYW1pbHkpCisreworKwlzdHJ1Y3QgbmxhdHRyICphbGxvd2VkaXBfbmVzdDsKKysKKysJYWxsb3dlZGlwX25lc3QgPSBubGFfbmVzdF9zdGFydChza2IsIDApOworKwlpZiAoIWFsbG93ZWRpcF9uZXN0KQorKwkJcmV0dXJuIC1FTVNHU0laRTsKKysKKysJaWYgKG5sYV9wdXRfdTgoc2tiLCBXR0FMTE9XRURJUF9BX0NJRFJfTUFTSywgY2lkcikgfHwKKysJICAgIG5sYV9wdXRfdTE2KHNrYiwgV0dBTExPV0VESVBfQV9GQU1JTFksIGZhbWlseSkgfHwKKysJICAgIG5sYV9wdXQoc2tiLCBXR0FMTE9XRURJUF9BX0lQQUREUiwgZmFtaWx5ID09IEFGX0lORVQ2ID8KKysJCSAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSA6IHNpemVvZihzdHJ1Y3QgaW5fYWRkciksIGlwKSkgeworKwkJbmxhX25lc3RfY2FuY2VsKHNrYiwgYWxsb3dlZGlwX25lc3QpOworKwkJcmV0dXJuIC1FTVNHU0laRTsKKysJfQorKworKwlubGFfbmVzdF9lbmQoc2tiLCBhbGxvd2VkaXBfbmVzdCk7CisrCXJldHVybiAwOworK30KKysKKytzdHJ1Y3QgZHVtcF9jdHggeworKwlzdHJ1Y3Qgd2dfZGV2aWNlICp3ZzsKKysJc3RydWN0IHdnX3BlZXIgKm5leHRfcGVlcjsKKysJdTY0IGFsbG93ZWRpcHNfc2VxOworKwlzdHJ1Y3QgYWxsb3dlZGlwc19ub2RlICpuZXh0X2FsbG93ZWRpcDsKKyt9OworKworKyNkZWZpbmUgRFVNUF9DVFgoY2IpICgoc3RydWN0IGR1bXBfY3R4ICopKGNiKS0+YXJncykKKysKKytzdGF0aWMgaW50CisrZ2V0X3BlZXIoc3RydWN0IHdnX3BlZXIgKnBlZXIsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBkdW1wX2N0eCAqY3R4KQorK3sKKysKKysJc3RydWN0IG5sYXR0ciAqYWxsb3dlZGlwc19uZXN0LCAqcGVlcl9uZXN0ID0gbmxhX25lc3Rfc3RhcnQoc2tiLCAwKTsKKysJc3RydWN0IGFsbG93ZWRpcHNfbm9kZSAqYWxsb3dlZGlwc19ub2RlID0gY3R4LT5uZXh0X2FsbG93ZWRpcDsKKysJYm9vbCBmYWlsOworKworKwlpZiAoIXBlZXJfbmVzdCkKKysJCXJldHVybiAtRU1TR1NJWkU7CisrCisrCWRvd25fcmVhZCgmcGVlci0+aGFuZHNoYWtlLmxvY2spOworKwlmYWlsID0gbmxhX3B1dChza2IsIFdHUEVFUl9BX1BVQkxJQ19LRVksIE5PSVNFX1BVQkxJQ19LRVlfTEVOLAorKwkJICAgICAgIHBlZXItPmhhbmRzaGFrZS5yZW1vdGVfc3RhdGljKTsKKysJdXBfcmVhZCgmcGVlci0+aGFuZHNoYWtlLmxvY2spOworKwlpZiAoZmFpbCkKKysJCWdvdG8gZXJyOworKworKwlpZiAoIWFsbG93ZWRpcHNfbm9kZSkgeworKwkJY29uc3Qgc3RydWN0IF9fa2VybmVsX3RpbWVzcGVjIGxhc3RfaGFuZHNoYWtlID0geworKwkJCS50dl9zZWMgPSBwZWVyLT53YWxsdGltZV9sYXN0X2hhbmRzaGFrZS50dl9zZWMsCisrCQkJLnR2X25zZWMgPSBwZWVyLT53YWxsdGltZV9sYXN0X2hhbmRzaGFrZS50dl9uc2VjCisrCQl9OworKworKwkJZG93bl9yZWFkKCZwZWVyLT5oYW5kc2hha2UubG9jayk7CisrCQlmYWlsID0gbmxhX3B1dChza2IsIFdHUEVFUl9BX1BSRVNIQVJFRF9LRVksCisrCQkJICAgICAgIE5PSVNFX1NZTU1FVFJJQ19LRVlfTEVOLAorKwkJCSAgICAgICBwZWVyLT5oYW5kc2hha2UucHJlc2hhcmVkX2tleSk7CisrCQl1cF9yZWFkKCZwZWVyLT5oYW5kc2hha2UubG9jayk7CisrCQlpZiAoZmFpbCkKKysJCQlnb3RvIGVycjsKKysKKysJCWlmIChubGFfcHV0KHNrYiwgV0dQRUVSX0FfTEFTVF9IQU5EU0hBS0VfVElNRSwKKysJCQkgICAgc2l6ZW9mKGxhc3RfaGFuZHNoYWtlKSwgJmxhc3RfaGFuZHNoYWtlKSB8fAorKwkJICAgIG5sYV9wdXRfdTE2KHNrYiwgV0dQRUVSX0FfUEVSU0lTVEVOVF9LRUVQQUxJVkVfSU5URVJWQUwsCisrCQkJCXBlZXItPnBlcnNpc3RlbnRfa2VlcGFsaXZlX2ludGVydmFsKSB8fAorKwkJICAgIG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgV0dQRUVSX0FfVFhfQllURVMsIHBlZXItPnR4X2J5dGVzLAorKwkJCQkgICAgICBXR1BFRVJfQV9VTlNQRUMpIHx8CisrCQkgICAgbmxhX3B1dF91NjRfNjRiaXQoc2tiLCBXR1BFRVJfQV9SWF9CWVRFUywgcGVlci0+cnhfYnl0ZXMsCisrCQkJCSAgICAgIFdHUEVFUl9BX1VOU1BFQykgfHwKKysJCSAgICBubGFfcHV0X3UzMihza2IsIFdHUEVFUl9BX1BST1RPQ09MX1ZFUlNJT04sIDEpKQorKwkJCWdvdG8gZXJyOworKworKwkJcmVhZF9sb2NrX2JoKCZwZWVyLT5lbmRwb2ludF9sb2NrKTsKKysJCWlmIChwZWVyLT5lbmRwb2ludC5hZGRyLnNhX2ZhbWlseSA9PSBBRl9JTkVUKQorKwkJCWZhaWwgPSBubGFfcHV0KHNrYiwgV0dQRUVSX0FfRU5EUE9JTlQsCisrCQkJCSAgICAgICBzaXplb2YocGVlci0+ZW5kcG9pbnQuYWRkcjQpLAorKwkJCQkgICAgICAgJnBlZXItPmVuZHBvaW50LmFkZHI0KTsKKysJCWVsc2UgaWYgKHBlZXItPmVuZHBvaW50LmFkZHIuc2FfZmFtaWx5ID09IEFGX0lORVQ2KQorKwkJCWZhaWwgPSBubGFfcHV0KHNrYiwgV0dQRUVSX0FfRU5EUE9JTlQsCisrCQkJCSAgICAgICBzaXplb2YocGVlci0+ZW5kcG9pbnQuYWRkcjYpLAorKwkJCQkgICAgICAgJnBlZXItPmVuZHBvaW50LmFkZHI2KTsKKysJCXJlYWRfdW5sb2NrX2JoKCZwZWVyLT5lbmRwb2ludF9sb2NrKTsKKysJCWlmIChmYWlsKQorKwkJCWdvdG8gZXJyOworKwkJYWxsb3dlZGlwc19ub2RlID0KKysJCQlsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoJnBlZXItPmFsbG93ZWRpcHNfbGlzdCwKKysJCQkJCXN0cnVjdCBhbGxvd2VkaXBzX25vZGUsIHBlZXJfbGlzdCk7CisrCX0KKysJaWYgKCFhbGxvd2VkaXBzX25vZGUpCisrCQlnb3RvIG5vX2FsbG93ZWRpcHM7CisrCWlmICghY3R4LT5hbGxvd2VkaXBzX3NlcSkKKysJCWN0eC0+YWxsb3dlZGlwc19zZXEgPSBwZWVyLT5kZXZpY2UtPnBlZXJfYWxsb3dlZGlwcy5zZXE7CisrCWVsc2UgaWYgKGN0eC0+YWxsb3dlZGlwc19zZXEgIT0gcGVlci0+ZGV2aWNlLT5wZWVyX2FsbG93ZWRpcHMuc2VxKQorKwkJZ290byBub19hbGxvd2VkaXBzOworKworKwlhbGxvd2VkaXBzX25lc3QgPSBubGFfbmVzdF9zdGFydChza2IsIFdHUEVFUl9BX0FMTE9XRURJUFMpOworKwlpZiAoIWFsbG93ZWRpcHNfbmVzdCkKKysJCWdvdG8gZXJyOworKworKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb20oYWxsb3dlZGlwc19ub2RlLCAmcGVlci0+YWxsb3dlZGlwc19saXN0LAorKwkJCQkgcGVlcl9saXN0KSB7CisrCQl1OCBjaWRyLCBpcFsxNl0gX19hbGlnbmVkKF9fYWxpZ25vZih1NjQpKTsKKysJCWludCBmYW1pbHk7CisrCisrCQlmYW1pbHkgPSB3Z19hbGxvd2VkaXBzX3JlYWRfbm9kZShhbGxvd2VkaXBzX25vZGUsIGlwLCAmY2lkcik7CisrCQlpZiAoZ2V0X2FsbG93ZWRpcHMoc2tiLCBpcCwgY2lkciwgZmFtaWx5KSkgeworKwkJCW5sYV9uZXN0X2VuZChza2IsIGFsbG93ZWRpcHNfbmVzdCk7CisrCQkJbmxhX25lc3RfZW5kKHNrYiwgcGVlcl9uZXN0KTsKKysJCQljdHgtPm5leHRfYWxsb3dlZGlwID0gYWxsb3dlZGlwc19ub2RlOworKwkJCXJldHVybiAtRU1TR1NJWkU7CisrCQl9CisrCX0KKysJbmxhX25lc3RfZW5kKHNrYiwgYWxsb3dlZGlwc19uZXN0KTsKKytub19hbGxvd2VkaXBzOgorKwlubGFfbmVzdF9lbmQoc2tiLCBwZWVyX25lc3QpOworKwljdHgtPm5leHRfYWxsb3dlZGlwID0gTlVMTDsKKysJY3R4LT5hbGxvd2VkaXBzX3NlcSA9IDA7CisrCXJldHVybiAwOworK2VycjoKKysJbmxhX25lc3RfY2FuY2VsKHNrYiwgcGVlcl9uZXN0KTsKKysJcmV0dXJuIC1FTVNHU0laRTsKKyt9CisrCisrc3RhdGljIGludCB3Z19nZXRfZGV2aWNlX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKKyt7CisrCXN0cnVjdCBubGF0dHIgKiphdHRycyA9IGdlbmxfZmFtaWx5X2F0dHJidWYoJmdlbmxfZmFtaWx5KTsKKysJc3RydWN0IHdnX2RldmljZSAqd2c7CisrCWludCByZXQ7CisrCisrCXJldCA9IG5sbXNnX3BhcnNlKGNiLT5ubGgsIEdFTkxfSERSTEVOICsgZ2VubF9mYW1pbHkuaGRyc2l6ZSwgYXR0cnMsCisrCQkJICBnZW5sX2ZhbWlseS5tYXhhdHRyLCBkZXZpY2VfcG9saWN5LCBOVUxMKTsKKysJaWYgKHJldCA8IDApCisrCQlyZXR1cm4gcmV0OworKwl3ZyA9IGxvb2t1cF9pbnRlcmZhY2UoYXR0cnMsIGNiLT5za2IpOworKwlpZiAoSVNfRVJSKHdnKSkKKysJCXJldHVybiBQVFJfRVJSKHdnKTsKKysJRFVNUF9DVFgoY2IpLT53ZyA9IHdnOworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGludCB3Z19nZXRfZGV2aWNlX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQorK3sKKysJc3RydWN0IHdnX3BlZXIgKnBlZXIsICpuZXh0X3BlZXJfY3Vyc29yOworKwlzdHJ1Y3QgZHVtcF9jdHggKmN0eCA9IERVTVBfQ1RYKGNiKTsKKysJc3RydWN0IHdnX2RldmljZSAqd2cgPSBjdHgtPndnOworKwlzdHJ1Y3QgbmxhdHRyICpwZWVyc19uZXN0OworKwlpbnQgcmV0ID0gLUVNU0dTSVpFOworKwlib29sIGRvbmUgPSB0cnVlOworKwl2b2lkICpoZHI7CisrCisrCXJ0bmxfbG9jaygpOworKwltdXRleF9sb2NrKCZ3Zy0+ZGV2aWNlX3VwZGF0ZV9sb2NrKTsKKysJY2ItPnNlcSA9IHdnLT5kZXZpY2VfdXBkYXRlX2dlbjsKKysJbmV4dF9wZWVyX2N1cnNvciA9IGN0eC0+bmV4dF9wZWVyOworKworKwloZHIgPSBnZW5sbXNnX3B1dChza2IsIE5FVExJTktfQ0IoY2ItPnNrYikucG9ydGlkLCBjYi0+bmxoLT5ubG1zZ19zZXEsCisrCQkJICAmZ2VubF9mYW1pbHksIE5MTV9GX01VTFRJLCBXR19DTURfR0VUX0RFVklDRSk7CisrCWlmICghaGRyKQorKwkJZ290byBvdXQ7CisrCWdlbmxfZHVtcF9jaGVja19jb25zaXN0ZW50KGNiLCBoZHIpOworKworKwlpZiAoIWN0eC0+bmV4dF9wZWVyKSB7CisrCQlpZiAobmxhX3B1dF91MTYoc2tiLCBXR0RFVklDRV9BX0xJU1RFTl9QT1JULAorKwkJCQl3Zy0+aW5jb21pbmdfcG9ydCkgfHwKKysJCSAgICBubGFfcHV0X3UzMihza2IsIFdHREVWSUNFX0FfRldNQVJLLCB3Zy0+ZndtYXJrKSB8fAorKwkJICAgIG5sYV9wdXRfdTMyKHNrYiwgV0dERVZJQ0VfQV9JRklOREVYLCB3Zy0+ZGV2LT5pZmluZGV4KSB8fAorKwkJICAgIG5sYV9wdXRfc3RyaW5nKHNrYiwgV0dERVZJQ0VfQV9JRk5BTUUsIHdnLT5kZXYtPm5hbWUpKQorKwkJCWdvdG8gb3V0OworKworKwkJZG93bl9yZWFkKCZ3Zy0+c3RhdGljX2lkZW50aXR5LmxvY2spOworKwkJaWYgKHdnLT5zdGF0aWNfaWRlbnRpdHkuaGFzX2lkZW50aXR5KSB7CisrCQkJaWYgKG5sYV9wdXQoc2tiLCBXR0RFVklDRV9BX1BSSVZBVEVfS0VZLAorKwkJCQkgICAgTk9JU0VfUFVCTElDX0tFWV9MRU4sCisrCQkJCSAgICB3Zy0+c3RhdGljX2lkZW50aXR5LnN0YXRpY19wcml2YXRlKSB8fAorKwkJCSAgICBubGFfcHV0KHNrYiwgV0dERVZJQ0VfQV9QVUJMSUNfS0VZLAorKwkJCQkgICAgTk9JU0VfUFVCTElDX0tFWV9MRU4sCisrCQkJCSAgICB3Zy0+c3RhdGljX2lkZW50aXR5LnN0YXRpY19wdWJsaWMpKSB7CisrCQkJCXVwX3JlYWQoJndnLT5zdGF0aWNfaWRlbnRpdHkubG9jayk7CisrCQkJCWdvdG8gb3V0OworKwkJCX0KKysJCX0KKysJCXVwX3JlYWQoJndnLT5zdGF0aWNfaWRlbnRpdHkubG9jayk7CisrCX0KKysKKysJcGVlcnNfbmVzdCA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgV0dERVZJQ0VfQV9QRUVSUyk7CisrCWlmICghcGVlcnNfbmVzdCkKKysJCWdvdG8gb3V0OworKwlyZXQgPSAwOworKwkvKiBJZiB0aGUgbGFzdCBjdXJzb3Igd2FzIHJlbW92ZWQgdmlhIGxpc3RfZGVsX2luaXQgaW4gcGVlcl9yZW1vdmUsIHRoZW4KKysJICogd2UganVzdCB0cmVhdCB0aGlzIHRoZSBzYW1lIGFzIHRoZXJlIGJlaW5nIG5vIG1vcmUgcGVlcnMgbGVmdC4gVGhlCisrCSAqIHJlYXNvbiBpcyB0aGF0IHNlcV9uciBzaG91bGQgaW5kaWNhdGUgdG8gdXNlcnNwYWNlIHRoYXQgdGhpcyBpc24ndCBhCisrCSAqIGNvaGVyZW50IGR1bXAgYW55d2F5LCBzbyB0aGV5J2xsIHRyeSBhZ2Fpbi4KKysJICovCisrCWlmIChsaXN0X2VtcHR5KCZ3Zy0+cGVlcl9saXN0KSB8fAorKwkgICAgKGN0eC0+bmV4dF9wZWVyICYmIGxpc3RfZW1wdHkoJmN0eC0+bmV4dF9wZWVyLT5wZWVyX2xpc3QpKSkgeworKwkJbmxhX25lc3RfY2FuY2VsKHNrYiwgcGVlcnNfbmVzdCk7CisrCQlnb3RvIG91dDsKKysJfQorKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZ3Zy0+ZGV2aWNlX3VwZGF0ZV9sb2NrKTsKKysJcGVlciA9IGxpc3RfcHJlcGFyZV9lbnRyeShjdHgtPm5leHRfcGVlciwgJndnLT5wZWVyX2xpc3QsIHBlZXJfbGlzdCk7CisrCWxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWUocGVlciwgJndnLT5wZWVyX2xpc3QsIHBlZXJfbGlzdCkgeworKwkJaWYgKGdldF9wZWVyKHBlZXIsIHNrYiwgY3R4KSkgeworKwkJCWRvbmUgPSBmYWxzZTsKKysJCQlicmVhazsKKysJCX0KKysJCW5leHRfcGVlcl9jdXJzb3IgPSBwZWVyOworKwl9CisrCW5sYV9uZXN0X2VuZChza2IsIHBlZXJzX25lc3QpOworKworK291dDoKKysJaWYgKCFyZXQgJiYgIWRvbmUgJiYgbmV4dF9wZWVyX2N1cnNvcikKKysJCXdnX3BlZXJfZ2V0KG5leHRfcGVlcl9jdXJzb3IpOworKwl3Z19wZWVyX3B1dChjdHgtPm5leHRfcGVlcik7CisrCW11dGV4X3VubG9jaygmd2ctPmRldmljZV91cGRhdGVfbG9jayk7CisrCXJ0bmxfdW5sb2NrKCk7CisrCisrCWlmIChyZXQpIHsKKysJCWdlbmxtc2dfY2FuY2VsKHNrYiwgaGRyKTsKKysJCXJldHVybiByZXQ7CisrCX0KKysJZ2VubG1zZ19lbmQoc2tiLCBoZHIpOworKwlpZiAoZG9uZSkgeworKwkJY3R4LT5uZXh0X3BlZXIgPSBOVUxMOworKwkJcmV0dXJuIDA7CisrCX0KKysJY3R4LT5uZXh0X3BlZXIgPSBuZXh0X3BlZXJfY3Vyc29yOworKwlyZXR1cm4gc2tiLT5sZW47CisrCisrCS8qIEF0IHRoaXMgcG9pbnQsIHdlIGNhbid0IHJlYWxseSBkZWFsIG91cnNlbHZlcyB3aXRoIHNhZmVseSB6ZXJvaW5nIG91dAorKwkgKiB0aGUgcHJpdmF0ZSBrZXkgbWF0ZXJpYWwgYWZ0ZXIgdXNhZ2UuIFRoaXMgd2lsbCBuZWVkIGFuIGFkZGl0aW9uYWwgQVBJCisrCSAqIGluIHRoZSBrZXJuZWwgZm9yIG1hcmtpbmcgc2ticyBhcyB6ZXJvX29uX2ZyZWUuCisrCSAqLworK30KKysKKytzdGF0aWMgaW50IHdnX2dldF9kZXZpY2VfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCisreworKwlzdHJ1Y3QgZHVtcF9jdHggKmN0eCA9IERVTVBfQ1RYKGNiKTsKKysKKysJaWYgKGN0eC0+d2cpCisrCQlkZXZfcHV0KGN0eC0+d2ctPmRldik7CisrCXdnX3BlZXJfcHV0KGN0eC0+bmV4dF9wZWVyKTsKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQgc2V0X3BvcnQoc3RydWN0IHdnX2RldmljZSAqd2csIHUxNiBwb3J0KQorK3sKKysJc3RydWN0IHdnX3BlZXIgKnBlZXI7CisrCisrCWlmICh3Zy0+aW5jb21pbmdfcG9ydCA9PSBwb3J0KQorKwkJcmV0dXJuIDA7CisrCWxpc3RfZm9yX2VhY2hfZW50cnkocGVlciwgJndnLT5wZWVyX2xpc3QsIHBlZXJfbGlzdCkKKysJCXdnX3NvY2tldF9jbGVhcl9wZWVyX2VuZHBvaW50X3NyYyhwZWVyKTsKKysJaWYgKCFuZXRpZl9ydW5uaW5nKHdnLT5kZXYpKSB7CisrCQl3Zy0+aW5jb21pbmdfcG9ydCA9IHBvcnQ7CisrCQlyZXR1cm4gMDsKKysJfQorKwlyZXR1cm4gd2dfc29ja2V0X2luaXQod2csIHBvcnQpOworK30KKysKKytzdGF0aWMgaW50IHNldF9hbGxvd2VkaXAoc3RydWN0IHdnX3BlZXIgKnBlZXIsIHN0cnVjdCBubGF0dHIgKiphdHRycykKKyt7CisrCWludCByZXQgPSAtRUlOVkFMOworKwl1MTYgZmFtaWx5OworKwl1OCBjaWRyOworKworKwlpZiAoIWF0dHJzW1dHQUxMT1dFRElQX0FfRkFNSUxZXSB8fCAhYXR0cnNbV0dBTExPV0VESVBfQV9JUEFERFJdIHx8CisrCSAgICAhYXR0cnNbV0dBTExPV0VESVBfQV9DSURSX01BU0tdKQorKwkJcmV0dXJuIHJldDsKKysJZmFtaWx5ID0gbmxhX2dldF91MTYoYXR0cnNbV0dBTExPV0VESVBfQV9GQU1JTFldKTsKKysJY2lkciA9IG5sYV9nZXRfdTgoYXR0cnNbV0dBTExPV0VESVBfQV9DSURSX01BU0tdKTsKKysKKysJaWYgKGZhbWlseSA9PSBBRl9JTkVUICYmIGNpZHIgPD0gMzIgJiYKKysJICAgIG5sYV9sZW4oYXR0cnNbV0dBTExPV0VESVBfQV9JUEFERFJdKSA9PSBzaXplb2Yoc3RydWN0IGluX2FkZHIpKQorKwkJcmV0ID0gd2dfYWxsb3dlZGlwc19pbnNlcnRfdjQoCisrCQkJJnBlZXItPmRldmljZS0+cGVlcl9hbGxvd2VkaXBzLAorKwkJCW5sYV9kYXRhKGF0dHJzW1dHQUxMT1dFRElQX0FfSVBBRERSXSksIGNpZHIsIHBlZXIsCisrCQkJJnBlZXItPmRldmljZS0+ZGV2aWNlX3VwZGF0ZV9sb2NrKTsKKysJZWxzZSBpZiAoZmFtaWx5ID09IEFGX0lORVQ2ICYmIGNpZHIgPD0gMTI4ICYmCisrCQkgbmxhX2xlbihhdHRyc1tXR0FMTE9XRURJUF9BX0lQQUREUl0pID09IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKQorKwkJcmV0ID0gd2dfYWxsb3dlZGlwc19pbnNlcnRfdjYoCisrCQkJJnBlZXItPmRldmljZS0+cGVlcl9hbGxvd2VkaXBzLAorKwkJCW5sYV9kYXRhKGF0dHJzW1dHQUxMT1dFRElQX0FfSVBBRERSXSksIGNpZHIsIHBlZXIsCisrCQkJJnBlZXItPmRldmljZS0+ZGV2aWNlX3VwZGF0ZV9sb2NrKTsKKysKKysJcmV0dXJuIHJldDsKKyt9CisrCisrc3RhdGljIGludCBzZXRfcGVlcihzdHJ1Y3Qgd2dfZGV2aWNlICp3Zywgc3RydWN0IG5sYXR0ciAqKmF0dHJzKQorK3sKKysJdTggKnB1YmxpY19rZXkgPSBOVUxMLCAqcHJlc2hhcmVkX2tleSA9IE5VTEw7CisrCXN0cnVjdCB3Z19wZWVyICpwZWVyID0gTlVMTDsKKysJdTMyIGZsYWdzID0gMDsKKysJaW50IHJldDsKKysKKysJcmV0ID0gLUVJTlZBTDsKKysJaWYgKGF0dHJzW1dHUEVFUl9BX1BVQkxJQ19LRVldICYmCisrCSAgICBubGFfbGVuKGF0dHJzW1dHUEVFUl9BX1BVQkxJQ19LRVldKSA9PSBOT0lTRV9QVUJMSUNfS0VZX0xFTikKKysJCXB1YmxpY19rZXkgPSBubGFfZGF0YShhdHRyc1tXR1BFRVJfQV9QVUJMSUNfS0VZXSk7CisrCWVsc2UKKysJCWdvdG8gb3V0OworKwlpZiAoYXR0cnNbV0dQRUVSX0FfUFJFU0hBUkVEX0tFWV0gJiYKKysJICAgIG5sYV9sZW4oYXR0cnNbV0dQRUVSX0FfUFJFU0hBUkVEX0tFWV0pID09IE5PSVNFX1NZTU1FVFJJQ19LRVlfTEVOKQorKwkJcHJlc2hhcmVkX2tleSA9IG5sYV9kYXRhKGF0dHJzW1dHUEVFUl9BX1BSRVNIQVJFRF9LRVldKTsKKysKKysJaWYgKGF0dHJzW1dHUEVFUl9BX0ZMQUdTXSkKKysJCWZsYWdzID0gbmxhX2dldF91MzIoYXR0cnNbV0dQRUVSX0FfRkxBR1NdKTsKKysJcmV0ID0gLUVPUE5PVFNVUFA7CisrCWlmIChmbGFncyAmIH5fX1dHUEVFUl9GX0FMTCkKKysJCWdvdG8gb3V0OworKworKwlyZXQgPSAtRVBGTk9TVVBQT1JUOworKwlpZiAoYXR0cnNbV0dQRUVSX0FfUFJPVE9DT0xfVkVSU0lPTl0pIHsKKysJCWlmIChubGFfZ2V0X3UzMihhdHRyc1tXR1BFRVJfQV9QUk9UT0NPTF9WRVJTSU9OXSkgIT0gMSkKKysJCQlnb3RvIG91dDsKKysJfQorKworKwlwZWVyID0gd2dfcHVia2V5X2hhc2h0YWJsZV9sb29rdXAod2ctPnBlZXJfaGFzaHRhYmxlLAorKwkJCQkJICBubGFfZGF0YShhdHRyc1tXR1BFRVJfQV9QVUJMSUNfS0VZXSkpOworKwlyZXQgPSAwOworKwlpZiAoIXBlZXIpIHsgLyogUGVlciBkb2Vzbid0IGV4aXN0IHlldC4gQWRkIGEgbmV3IG9uZS4gKi8KKysJCWlmIChmbGFncyAmIChXR1BFRVJfRl9SRU1PVkVfTUUgfCBXR1BFRVJfRl9VUERBVEVfT05MWSkpCisrCQkJZ290byBvdXQ7CisrCisrCQkvKiBUaGUgcGVlciBpcyBuZXcsIHNvIHRoZXJlIGFyZW4ndCBhbGxvd2VkIElQcyB0byByZW1vdmUuICovCisrCQlmbGFncyAmPSB+V0dQRUVSX0ZfUkVQTEFDRV9BTExPV0VESVBTOworKworKwkJZG93bl9yZWFkKCZ3Zy0+c3RhdGljX2lkZW50aXR5LmxvY2spOworKwkJaWYgKHdnLT5zdGF0aWNfaWRlbnRpdHkuaGFzX2lkZW50aXR5ICYmCisrCQkgICAgIW1lbWNtcChubGFfZGF0YShhdHRyc1tXR1BFRVJfQV9QVUJMSUNfS0VZXSksCisrCQkJICAgIHdnLT5zdGF0aWNfaWRlbnRpdHkuc3RhdGljX3B1YmxpYywKKysJCQkgICAgTk9JU0VfUFVCTElDX0tFWV9MRU4pKSB7CisrCQkJLyogV2Ugc2lsZW50bHkgaWdub3JlIHBlZXJzIHRoYXQgaGF2ZSB0aGUgc2FtZSBwdWJsaWMKKysJCQkgKiBrZXkgYXMgdGhlIGRldmljZS4gVGhlIHJlYXNvbiB3ZSBkbyBpdCBzaWxlbnRseSBpcworKwkJCSAqIHRoYXQgd2UnZCBsaWtlIGZvciBwZW9wbGUgdG8gYmUgYWJsZSB0byByZXVzZSB0aGUKKysJCQkgKiBzYW1lIHNldCBvZiBBUEkgY2FsbHMgYWNyb3NzIHBlZXJzLgorKwkJCSAqLworKwkJCXVwX3JlYWQoJndnLT5zdGF0aWNfaWRlbnRpdHkubG9jayk7CisrCQkJcmV0ID0gMDsKKysJCQlnb3RvIG91dDsKKysJCX0KKysJCXVwX3JlYWQoJndnLT5zdGF0aWNfaWRlbnRpdHkubG9jayk7CisrCisrCQlwZWVyID0gd2dfcGVlcl9jcmVhdGUod2csIHB1YmxpY19rZXksIHByZXNoYXJlZF9rZXkpOworKwkJaWYgKElTX0VSUihwZWVyKSkgeworKwkJCS8qIFNpbWlsYXIgdG8gdGhlIGFib3ZlLCBpZiB0aGUga2V5IGlzIGludmFsaWQsIHdlIHNraXAKKysJCQkgKiBpdCB3aXRob3V0IGZhbmZhcmUsIHNvIHRoYXQgc2VydmljZXMgZG9uJ3QgbmVlZCB0bworKwkJCSAqIHdvcnJ5IGFib3V0IGRvaW5nIGtleSB2YWxpZGF0aW9uIHRoZW1zZWx2ZXMuCisrCQkJICovCisrCQkJcmV0ID0gUFRSX0VSUihwZWVyKSA9PSAtRUtFWVJFSkVDVEVEID8gMCA6IFBUUl9FUlIocGVlcik7CisrCQkJcGVlciA9IE5VTEw7CisrCQkJZ290byBvdXQ7CisrCQl9CisrCQkvKiBUYWtlIGFkZGl0aW9uYWwgcmVmZXJlbmNlLCBhcyB0aG91Z2ggd2UndmUganVzdCBiZWVuCisrCQkgKiBsb29rZWQgdXAuCisrCQkgKi8KKysJCXdnX3BlZXJfZ2V0KHBlZXIpOworKwl9CisrCisrCWlmIChmbGFncyAmIFdHUEVFUl9GX1JFTU9WRV9NRSkgeworKwkJd2dfcGVlcl9yZW1vdmUocGVlcik7CisrCQlnb3RvIG91dDsKKysJfQorKworKwlpZiAocHJlc2hhcmVkX2tleSkgeworKwkJZG93bl93cml0ZSgmcGVlci0+aGFuZHNoYWtlLmxvY2spOworKwkJbWVtY3B5KCZwZWVyLT5oYW5kc2hha2UucHJlc2hhcmVkX2tleSwgcHJlc2hhcmVkX2tleSwKKysJCSAgICAgICBOT0lTRV9TWU1NRVRSSUNfS0VZX0xFTik7CisrCQl1cF93cml0ZSgmcGVlci0+aGFuZHNoYWtlLmxvY2spOworKwl9CisrCisrCWlmIChhdHRyc1tXR1BFRVJfQV9FTkRQT0lOVF0pIHsKKysJCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IG5sYV9kYXRhKGF0dHJzW1dHUEVFUl9BX0VORFBPSU5UXSk7CisrCQlzaXplX3QgbGVuID0gbmxhX2xlbihhdHRyc1tXR1BFRVJfQV9FTkRQT0lOVF0pOworKworKwkJaWYgKChsZW4gPT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikgJiYKKysJCSAgICAgYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQpIHx8CisrCQkgICAgKGxlbiA9PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikgJiYKKysJCSAgICAgYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSkgeworKwkJCXN0cnVjdCBlbmRwb2ludCBlbmRwb2ludCA9IHsgeyB7IDAgfSB9IH07CisrCisrCQkJbWVtY3B5KCZlbmRwb2ludC5hZGRyLCBhZGRyLCBsZW4pOworKwkJCXdnX3NvY2tldF9zZXRfcGVlcl9lbmRwb2ludChwZWVyLCAmZW5kcG9pbnQpOworKwkJfQorKwl9CisrCisrCWlmIChmbGFncyAmIFdHUEVFUl9GX1JFUExBQ0VfQUxMT1dFRElQUykKKysJCXdnX2FsbG93ZWRpcHNfcmVtb3ZlX2J5X3BlZXIoJndnLT5wZWVyX2FsbG93ZWRpcHMsIHBlZXIsCisrCQkJCQkgICAgICZ3Zy0+ZGV2aWNlX3VwZGF0ZV9sb2NrKTsKKysKKysJaWYgKGF0dHJzW1dHUEVFUl9BX0FMTE9XRURJUFNdKSB7CisrCQlzdHJ1Y3QgbmxhdHRyICphdHRyLCAqYWxsb3dlZGlwW1dHQUxMT1dFRElQX0FfTUFYICsgMV07CisrCQlpbnQgcmVtOworKworKwkJbmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBhdHRyc1tXR1BFRVJfQV9BTExPV0VESVBTXSwgcmVtKSB7CisrCQkJcmV0ID0gbmxhX3BhcnNlX25lc3RlZChhbGxvd2VkaXAsIFdHQUxMT1dFRElQX0FfTUFYLAorKwkJCQkJICAgICAgIGF0dHIsIGFsbG93ZWRpcF9wb2xpY3ksIE5VTEwpOworKwkJCWlmIChyZXQgPCAwKQorKwkJCQlnb3RvIG91dDsKKysJCQlyZXQgPSBzZXRfYWxsb3dlZGlwKHBlZXIsIGFsbG93ZWRpcCk7CisrCQkJaWYgKHJldCA8IDApCisrCQkJCWdvdG8gb3V0OworKwkJfQorKwl9CisrCisrCWlmIChhdHRyc1tXR1BFRVJfQV9QRVJTSVNURU5UX0tFRVBBTElWRV9JTlRFUlZBTF0pIHsKKysJCWNvbnN0IHUxNiBwZXJzaXN0ZW50X2tlZXBhbGl2ZV9pbnRlcnZhbCA9IG5sYV9nZXRfdTE2KAorKwkJCQlhdHRyc1tXR1BFRVJfQV9QRVJTSVNURU5UX0tFRVBBTElWRV9JTlRFUlZBTF0pOworKwkJY29uc3QgYm9vbCBzZW5kX2tlZXBhbGl2ZSA9CisrCQkJIXBlZXItPnBlcnNpc3RlbnRfa2VlcGFsaXZlX2ludGVydmFsICYmCisrCQkJcGVyc2lzdGVudF9rZWVwYWxpdmVfaW50ZXJ2YWwgJiYKKysJCQluZXRpZl9ydW5uaW5nKHdnLT5kZXYpOworKworKwkJcGVlci0+cGVyc2lzdGVudF9rZWVwYWxpdmVfaW50ZXJ2YWwgPSBwZXJzaXN0ZW50X2tlZXBhbGl2ZV9pbnRlcnZhbDsKKysJCWlmIChzZW5kX2tlZXBhbGl2ZSkKKysJCQl3Z19wYWNrZXRfc2VuZF9rZWVwYWxpdmUocGVlcik7CisrCX0KKysKKysJaWYgKG5ldGlmX3J1bm5pbmcod2ctPmRldikpCisrCQl3Z19wYWNrZXRfc2VuZF9zdGFnZWRfcGFja2V0cyhwZWVyKTsKKysKKytvdXQ6CisrCXdnX3BlZXJfcHV0KHBlZXIpOworKwlpZiAoYXR0cnNbV0dQRUVSX0FfUFJFU0hBUkVEX0tFWV0pCisrCQltZW16ZXJvX2V4cGxpY2l0KG5sYV9kYXRhKGF0dHJzW1dHUEVFUl9BX1BSRVNIQVJFRF9LRVldKSwKKysJCQkJIG5sYV9sZW4oYXR0cnNbV0dQRUVSX0FfUFJFU0hBUkVEX0tFWV0pKTsKKysJcmV0dXJuIHJldDsKKyt9CisrCisrc3RhdGljIGludCB3Z19zZXRfZGV2aWNlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCisreworKwlzdHJ1Y3Qgd2dfZGV2aWNlICp3ZyA9IGxvb2t1cF9pbnRlcmZhY2UoaW5mby0+YXR0cnMsIHNrYik7CisrCXUzMiBmbGFncyA9IDA7CisrCWludCByZXQ7CisrCisrCWlmIChJU19FUlIod2cpKSB7CisrCQlyZXQgPSBQVFJfRVJSKHdnKTsKKysJCWdvdG8gb3V0X25vZGV2OworKwl9CisrCisrCXJ0bmxfbG9jaygpOworKwltdXRleF9sb2NrKCZ3Zy0+ZGV2aWNlX3VwZGF0ZV9sb2NrKTsKKysKKysJaWYgKGluZm8tPmF0dHJzW1dHREVWSUNFX0FfRkxBR1NdKQorKwkJZmxhZ3MgPSBubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tXR0RFVklDRV9BX0ZMQUdTXSk7CisrCXJldCA9IC1FT1BOT1RTVVBQOworKwlpZiAoZmxhZ3MgJiB+X19XR0RFVklDRV9GX0FMTCkKKysJCWdvdG8gb3V0OworKworKwlyZXQgPSAtRVBFUk07CisrCWlmICgoaW5mby0+YXR0cnNbV0dERVZJQ0VfQV9MSVNURU5fUE9SVF0gfHwKKysJICAgICBpbmZvLT5hdHRyc1tXR0RFVklDRV9BX0ZXTUFSS10pICYmCisrCSAgICAhbnNfY2FwYWJsZSh3Zy0+Y3JlYXRpbmdfbmV0LT51c2VyX25zLCBDQVBfTkVUX0FETUlOKSkKKysJCWdvdG8gb3V0OworKworKwkrK3dnLT5kZXZpY2VfdXBkYXRlX2dlbjsKKysKKysJaWYgKGluZm8tPmF0dHJzW1dHREVWSUNFX0FfRldNQVJLXSkgeworKwkJc3RydWN0IHdnX3BlZXIgKnBlZXI7CisrCisrCQl3Zy0+ZndtYXJrID0gbmxhX2dldF91MzIoaW5mby0+YXR0cnNbV0dERVZJQ0VfQV9GV01BUktdKTsKKysJCWxpc3RfZm9yX2VhY2hfZW50cnkocGVlciwgJndnLT5wZWVyX2xpc3QsIHBlZXJfbGlzdCkKKysJCQl3Z19zb2NrZXRfY2xlYXJfcGVlcl9lbmRwb2ludF9zcmMocGVlcik7CisrCX0KKysKKysJaWYgKGluZm8tPmF0dHJzW1dHREVWSUNFX0FfTElTVEVOX1BPUlRdKSB7CisrCQlyZXQgPSBzZXRfcG9ydCh3ZywKKysJCQlubGFfZ2V0X3UxNihpbmZvLT5hdHRyc1tXR0RFVklDRV9BX0xJU1RFTl9QT1JUXSkpOworKwkJaWYgKHJldCkKKysJCQlnb3RvIG91dDsKKysJfQorKworKwlpZiAoZmxhZ3MgJiBXR0RFVklDRV9GX1JFUExBQ0VfUEVFUlMpCisrCQl3Z19wZWVyX3JlbW92ZV9hbGwod2cpOworKworKwlpZiAoaW5mby0+YXR0cnNbV0dERVZJQ0VfQV9QUklWQVRFX0tFWV0gJiYKKysJICAgIG5sYV9sZW4oaW5mby0+YXR0cnNbV0dERVZJQ0VfQV9QUklWQVRFX0tFWV0pID09CisrCQkgICAgTk9JU0VfUFVCTElDX0tFWV9MRU4pIHsKKysJCXU4ICpwcml2YXRlX2tleSA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW1dHREVWSUNFX0FfUFJJVkFURV9LRVldKTsKKysJCXU4IHB1YmxpY19rZXlbTk9JU0VfUFVCTElDX0tFWV9MRU5dOworKwkJc3RydWN0IHdnX3BlZXIgKnBlZXIsICp0ZW1wOworKworKwkJaWYgKCFjcnlwdG9fbWVtbmVxKHdnLT5zdGF0aWNfaWRlbnRpdHkuc3RhdGljX3ByaXZhdGUsCisrCQkJCSAgIHByaXZhdGVfa2V5LCBOT0lTRV9QVUJMSUNfS0VZX0xFTikpCisrCQkJZ290byBza2lwX3NldF9wcml2YXRlX2tleTsKKysKKysJCS8qIFdlIHJlbW92ZSBiZWZvcmUgc2V0dGluZywgdG8gcHJldmVudCByYWNlLCB3aGljaCBtZWFucyBkb2luZworKwkJICogdHdvIDI1NTE5LWdlbnB1YiBvcHMuCisrCQkgKi8KKysJCWlmIChjdXJ2ZTI1NTE5X2dlbmVyYXRlX3B1YmxpYyhwdWJsaWNfa2V5LCBwcml2YXRlX2tleSkpIHsKKysJCQlwZWVyID0gd2dfcHVia2V5X2hhc2h0YWJsZV9sb29rdXAod2ctPnBlZXJfaGFzaHRhYmxlLAorKwkJCQkJCQkgIHB1YmxpY19rZXkpOworKwkJCWlmIChwZWVyKSB7CisrCQkJCXdnX3BlZXJfcHV0KHBlZXIpOworKwkJCQl3Z19wZWVyX3JlbW92ZShwZWVyKTsKKysJCQl9CisrCQl9CisrCisrCQlkb3duX3dyaXRlKCZ3Zy0+c3RhdGljX2lkZW50aXR5LmxvY2spOworKwkJd2dfbm9pc2Vfc2V0X3N0YXRpY19pZGVudGl0eV9wcml2YXRlX2tleSgmd2ctPnN0YXRpY19pZGVudGl0eSwKKysJCQkJCQkJIHByaXZhdGVfa2V5KTsKKysJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwZWVyLCB0ZW1wLCAmd2ctPnBlZXJfbGlzdCwKKysJCQkJCSBwZWVyX2xpc3QpIHsKKysJCQlpZiAod2dfbm9pc2VfcHJlY29tcHV0ZV9zdGF0aWNfc3RhdGljKHBlZXIpKQorKwkJCQl3Z19ub2lzZV9leHBpcmVfY3VycmVudF9wZWVyX2tleXBhaXJzKHBlZXIpOworKwkJCWVsc2UKKysJCQkJd2dfcGVlcl9yZW1vdmUocGVlcik7CisrCQl9CisrCQl3Z19jb29raWVfY2hlY2tlcl9wcmVjb21wdXRlX2RldmljZV9rZXlzKCZ3Zy0+Y29va2llX2NoZWNrZXIpOworKwkJdXBfd3JpdGUoJndnLT5zdGF0aWNfaWRlbnRpdHkubG9jayk7CisrCX0KKytza2lwX3NldF9wcml2YXRlX2tleToKKysKKysJaWYgKGluZm8tPmF0dHJzW1dHREVWSUNFX0FfUEVFUlNdKSB7CisrCQlzdHJ1Y3QgbmxhdHRyICphdHRyLCAqcGVlcltXR1BFRVJfQV9NQVggKyAxXTsKKysJCWludCByZW07CisrCisrCQlubGFfZm9yX2VhY2hfbmVzdGVkKGF0dHIsIGluZm8tPmF0dHJzW1dHREVWSUNFX0FfUEVFUlNdLCByZW0pIHsKKysJCQlyZXQgPSBubGFfcGFyc2VfbmVzdGVkKHBlZXIsIFdHUEVFUl9BX01BWCwgYXR0ciwKKysJCQkJCSAgICAgICBwZWVyX3BvbGljeSwgTlVMTCk7CisrCQkJaWYgKHJldCA8IDApCisrCQkJCWdvdG8gb3V0OworKwkJCXJldCA9IHNldF9wZWVyKHdnLCBwZWVyKTsKKysJCQlpZiAocmV0IDwgMCkKKysJCQkJZ290byBvdXQ7CisrCQl9CisrCX0KKysJcmV0ID0gMDsKKysKKytvdXQ6CisrCW11dGV4X3VubG9jaygmd2ctPmRldmljZV91cGRhdGVfbG9jayk7CisrCXJ0bmxfdW5sb2NrKCk7CisrCWRldl9wdXQod2ctPmRldik7Cisrb3V0X25vZGV2OgorKwlpZiAoaW5mby0+YXR0cnNbV0dERVZJQ0VfQV9QUklWQVRFX0tFWV0pCisrCQltZW16ZXJvX2V4cGxpY2l0KG5sYV9kYXRhKGluZm8tPmF0dHJzW1dHREVWSUNFX0FfUFJJVkFURV9LRVldKSwKKysJCQkJIG5sYV9sZW4oaW5mby0+YXR0cnNbV0dERVZJQ0VfQV9QUklWQVRFX0tFWV0pKTsKKysJcmV0dXJuIHJldDsKKyt9CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX29wcyBnZW5sX29wc1tdID0geworKwl7CisrCQkuY21kID0gV0dfQ01EX0dFVF9ERVZJQ0UsCisrCQkuc3RhcnQgPSB3Z19nZXRfZGV2aWNlX3N0YXJ0LAorKwkJLmR1bXBpdCA9IHdnX2dldF9kZXZpY2VfZHVtcCwKKysJCS5kb25lID0gd2dfZ2V0X2RldmljZV9kb25lLAorKwkJLmZsYWdzID0gR0VOTF9VTlNfQURNSU5fUEVSTQorKwl9LCB7CisrCQkuY21kID0gV0dfQ01EX1NFVF9ERVZJQ0UsCisrCQkuZG9pdCA9IHdnX3NldF9kZXZpY2UsCisrCQkuZmxhZ3MgPSBHRU5MX1VOU19BRE1JTl9QRVJNCisrCX0KKyt9OworKworK3N0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgZ2VubF9mYW1pbHkgX19yb19hZnRlcl9pbml0ID0geworKwkub3BzID0gZ2VubF9vcHMsCisrCS5uX29wcyA9IEFSUkFZX1NJWkUoZ2VubF9vcHMpLAorKwkubmFtZSA9IFdHX0dFTkxfTkFNRSwKKysJLnZlcnNpb24gPSBXR19HRU5MX1ZFUlNJT04sCisrCS5tYXhhdHRyID0gV0dERVZJQ0VfQV9NQVgsCisrCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKKysJLnBvbGljeSA9IGRldmljZV9wb2xpY3ksCisrCS5uZXRuc29rID0gdHJ1ZQorK307CisrCisraW50IF9faW5pdCB3Z19nZW5ldGxpbmtfaW5pdCh2b2lkKQorK3sKKysJcmV0dXJuIGdlbmxfcmVnaXN0ZXJfZmFtaWx5KCZnZW5sX2ZhbWlseSk7CisrfQorKworK3ZvaWQgX19leGl0IHdnX2dlbmV0bGlua191bmluaXQodm9pZCkKKyt7CisrCWdlbmxfdW5yZWdpc3Rlcl9mYW1pbHkoJmdlbmxfZmFtaWx5KTsKKyt9CistLS0gL2Rldi9udWxsCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5oCitAQCAtMCwwICsxLDEyIEBACisrLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKysvKgorKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKysgKi8KKysKKysjaWZuZGVmIF9XR19ORVRMSU5LX0gKKysjZGVmaW5lIF9XR19ORVRMSU5LX0gKKysKKytpbnQgd2dfZ2VuZXRsaW5rX2luaXQodm9pZCk7Cisrdm9pZCB3Z19nZW5ldGxpbmtfdW5pbml0KHZvaWQpOworKworKyNlbmRpZiAvKiBfV0dfTkVUTElOS19IICovCistLS0gL2Rldi9udWxsCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvbm9pc2UuYworQEAgLTAsMCArMSw4MjggQEAKKysvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorKy8qCisrICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKyAqLworKworKyNpbmNsdWRlICJub2lzZS5oIgorKyNpbmNsdWRlICJkZXZpY2UuaCIKKysjaW5jbHVkZSAicGVlci5oIgorKyNpbmNsdWRlICJtZXNzYWdlcy5oIgorKyNpbmNsdWRlICJxdWV1ZWluZy5oIgorKyNpbmNsdWRlICJwZWVybG9va3VwLmgiCisrCisrI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CisrI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKysjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CisrI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisrI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKysjaW5jbHVkZSA8Y3J5cHRvL2FsZ2FwaS5oPgorKworKy8qIFRoaXMgaW1wbGVtZW50cyBOb2lzZV9JS3BzazI6CisrICoKKysgKiA8LSBzCisrICogKioqKioqCisrICogLT4gZSwgZXMsIHMsIHNzLCB7dH0KKysgKiA8LSBlLCBlZSwgc2UsIHBzaywge30KKysgKi8KKysKKytzdGF0aWMgY29uc3QgdTggaGFuZHNoYWtlX25hbWVbMzddID0gIk5vaXNlX0lLcHNrMl8yNTUxOV9DaGFDaGFQb2x5X0JMQUtFMnMiOworK3N0YXRpYyBjb25zdCB1OCBpZGVudGlmaWVyX25hbWVbMzRdID0gIldpcmVHdWFyZCB2MSB6eDJjNCBKYXNvbkB6eDJjNC5jb20iOworK3N0YXRpYyB1OCBoYW5kc2hha2VfaW5pdF9oYXNoW05PSVNFX0hBU0hfTEVOXSBfX3JvX2FmdGVyX2luaXQ7Cisrc3RhdGljIHU4IGhhbmRzaGFrZV9pbml0X2NoYWluaW5nX2tleVtOT0lTRV9IQVNIX0xFTl0gX19yb19hZnRlcl9pbml0OworK3N0YXRpYyBhdG9taWM2NF90IGtleXBhaXJfY291bnRlciA9IEFUT01JQzY0X0lOSVQoMCk7CisrCisrdm9pZCBfX2luaXQgd2dfbm9pc2VfaW5pdCh2b2lkKQorK3sKKysJc3RydWN0IGJsYWtlMnNfc3RhdGUgYmxha2U7CisrCisrCWJsYWtlMnMoaGFuZHNoYWtlX2luaXRfY2hhaW5pbmdfa2V5LCBoYW5kc2hha2VfbmFtZSwgTlVMTCwKKysJCU5PSVNFX0hBU0hfTEVOLCBzaXplb2YoaGFuZHNoYWtlX25hbWUpLCAwKTsKKysJYmxha2Uyc19pbml0KCZibGFrZSwgTk9JU0VfSEFTSF9MRU4pOworKwlibGFrZTJzX3VwZGF0ZSgmYmxha2UsIGhhbmRzaGFrZV9pbml0X2NoYWluaW5nX2tleSwgTk9JU0VfSEFTSF9MRU4pOworKwlibGFrZTJzX3VwZGF0ZSgmYmxha2UsIGlkZW50aWZpZXJfbmFtZSwgc2l6ZW9mKGlkZW50aWZpZXJfbmFtZSkpOworKwlibGFrZTJzX2ZpbmFsKCZibGFrZSwgaGFuZHNoYWtlX2luaXRfaGFzaCk7CisrfQorKworKy8qIE11c3QgaG9sZCBwZWVyLT5oYW5kc2hha2Uuc3RhdGljX2lkZW50aXR5LT5sb2NrICovCisrYm9vbCB3Z19ub2lzZV9wcmVjb21wdXRlX3N0YXRpY19zdGF0aWMoc3RydWN0IHdnX3BlZXIgKnBlZXIpCisreworKwlib29sIHJldCA9IHRydWU7CisrCisrCWRvd25fd3JpdGUoJnBlZXItPmhhbmRzaGFrZS5sb2NrKTsKKysJaWYgKHBlZXItPmhhbmRzaGFrZS5zdGF0aWNfaWRlbnRpdHktPmhhc19pZGVudGl0eSkKKysJCXJldCA9IGN1cnZlMjU1MTkoCisrCQkJcGVlci0+aGFuZHNoYWtlLnByZWNvbXB1dGVkX3N0YXRpY19zdGF0aWMsCisrCQkJcGVlci0+aGFuZHNoYWtlLnN0YXRpY19pZGVudGl0eS0+c3RhdGljX3ByaXZhdGUsCisrCQkJcGVlci0+aGFuZHNoYWtlLnJlbW90ZV9zdGF0aWMpOworKwllbHNlCisrCQltZW1zZXQocGVlci0+aGFuZHNoYWtlLnByZWNvbXB1dGVkX3N0YXRpY19zdGF0aWMsIDAsCisrCQkgICAgICAgTk9JU0VfUFVCTElDX0tFWV9MRU4pOworKwl1cF93cml0ZSgmcGVlci0+aGFuZHNoYWtlLmxvY2spOworKwlyZXR1cm4gcmV0OworK30KKysKKytib29sIHdnX25vaXNlX2hhbmRzaGFrZV9pbml0KHN0cnVjdCBub2lzZV9oYW5kc2hha2UgKmhhbmRzaGFrZSwKKysJCQkgICBzdHJ1Y3Qgbm9pc2Vfc3RhdGljX2lkZW50aXR5ICpzdGF0aWNfaWRlbnRpdHksCisrCQkJICAgY29uc3QgdTggcGVlcl9wdWJsaWNfa2V5W05PSVNFX1BVQkxJQ19LRVlfTEVOXSwKKysJCQkgICBjb25zdCB1OCBwZWVyX3ByZXNoYXJlZF9rZXlbTk9JU0VfU1lNTUVUUklDX0tFWV9MRU5dLAorKwkJCSAgIHN0cnVjdCB3Z19wZWVyICpwZWVyKQorK3sKKysJbWVtc2V0KGhhbmRzaGFrZSwgMCwgc2l6ZW9mKCpoYW5kc2hha2UpKTsKKysJaW5pdF9yd3NlbSgmaGFuZHNoYWtlLT5sb2NrKTsKKysJaGFuZHNoYWtlLT5lbnRyeS50eXBlID0gSU5ERVhfSEFTSFRBQkxFX0hBTkRTSEFLRTsKKysJaGFuZHNoYWtlLT5lbnRyeS5wZWVyID0gcGVlcjsKKysJbWVtY3B5KGhhbmRzaGFrZS0+cmVtb3RlX3N0YXRpYywgcGVlcl9wdWJsaWNfa2V5LCBOT0lTRV9QVUJMSUNfS0VZX0xFTik7CisrCWlmIChwZWVyX3ByZXNoYXJlZF9rZXkpCisrCQltZW1jcHkoaGFuZHNoYWtlLT5wcmVzaGFyZWRfa2V5LCBwZWVyX3ByZXNoYXJlZF9rZXksCisrCQkgICAgICAgTk9JU0VfU1lNTUVUUklDX0tFWV9MRU4pOworKwloYW5kc2hha2UtPnN0YXRpY19pZGVudGl0eSA9IHN0YXRpY19pZGVudGl0eTsKKysJaGFuZHNoYWtlLT5zdGF0ZSA9IEhBTkRTSEFLRV9aRVJPRUQ7CisrCXJldHVybiB3Z19ub2lzZV9wcmVjb21wdXRlX3N0YXRpY19zdGF0aWMocGVlcik7CisrfQorKworK3N0YXRpYyB2b2lkIGhhbmRzaGFrZV96ZXJvKHN0cnVjdCBub2lzZV9oYW5kc2hha2UgKmhhbmRzaGFrZSkKKyt7CisrCW1lbXNldCgmaGFuZHNoYWtlLT5lcGhlbWVyYWxfcHJpdmF0ZSwgMCwgTk9JU0VfUFVCTElDX0tFWV9MRU4pOworKwltZW1zZXQoJmhhbmRzaGFrZS0+cmVtb3RlX2VwaGVtZXJhbCwgMCwgTk9JU0VfUFVCTElDX0tFWV9MRU4pOworKwltZW1zZXQoJmhhbmRzaGFrZS0+aGFzaCwgMCwgTk9JU0VfSEFTSF9MRU4pOworKwltZW1zZXQoJmhhbmRzaGFrZS0+Y2hhaW5pbmdfa2V5LCAwLCBOT0lTRV9IQVNIX0xFTik7CisrCWhhbmRzaGFrZS0+cmVtb3RlX2luZGV4ID0gMDsKKysJaGFuZHNoYWtlLT5zdGF0ZSA9IEhBTkRTSEFLRV9aRVJPRUQ7CisrfQorKworK3ZvaWQgd2dfbm9pc2VfaGFuZHNoYWtlX2NsZWFyKHN0cnVjdCBub2lzZV9oYW5kc2hha2UgKmhhbmRzaGFrZSkKKyt7CisrCXdnX2luZGV4X2hhc2h0YWJsZV9yZW1vdmUoCisrCQkJaGFuZHNoYWtlLT5lbnRyeS5wZWVyLT5kZXZpY2UtPmluZGV4X2hhc2h0YWJsZSwKKysJCQkmaGFuZHNoYWtlLT5lbnRyeSk7CisrCWRvd25fd3JpdGUoJmhhbmRzaGFrZS0+bG9jayk7CisrCWhhbmRzaGFrZV96ZXJvKGhhbmRzaGFrZSk7CisrCXVwX3dyaXRlKCZoYW5kc2hha2UtPmxvY2spOworKwl3Z19pbmRleF9oYXNodGFibGVfcmVtb3ZlKAorKwkJCWhhbmRzaGFrZS0+ZW50cnkucGVlci0+ZGV2aWNlLT5pbmRleF9oYXNodGFibGUsCisrCQkJJmhhbmRzaGFrZS0+ZW50cnkpOworK30KKysKKytzdGF0aWMgc3RydWN0IG5vaXNlX2tleXBhaXIgKmtleXBhaXJfY3JlYXRlKHN0cnVjdCB3Z19wZWVyICpwZWVyKQorK3sKKysJc3RydWN0IG5vaXNlX2tleXBhaXIgKmtleXBhaXIgPSBremFsbG9jKHNpemVvZigqa2V5cGFpciksIEdGUF9LRVJORUwpOworKworKwlpZiAodW5saWtlbHkoIWtleXBhaXIpKQorKwkJcmV0dXJuIE5VTEw7CisrCWtleXBhaXItPmludGVybmFsX2lkID0gYXRvbWljNjRfaW5jX3JldHVybigma2V5cGFpcl9jb3VudGVyKTsKKysJa2V5cGFpci0+ZW50cnkudHlwZSA9IElOREVYX0hBU0hUQUJMRV9LRVlQQUlSOworKwlrZXlwYWlyLT5lbnRyeS5wZWVyID0gcGVlcjsKKysJa3JlZl9pbml0KCZrZXlwYWlyLT5yZWZjb3VudCk7CisrCXJldHVybiBrZXlwYWlyOworK30KKysKKytzdGF0aWMgdm9pZCBrZXlwYWlyX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1KQorK3sKKysJa3pmcmVlKGNvbnRhaW5lcl9vZihyY3UsIHN0cnVjdCBub2lzZV9rZXlwYWlyLCByY3UpKTsKKyt9CisrCisrc3RhdGljIHZvaWQga2V5cGFpcl9mcmVlX2tyZWYoc3RydWN0IGtyZWYgKmtyZWYpCisreworKwlzdHJ1Y3Qgbm9pc2Vfa2V5cGFpciAqa2V5cGFpciA9CisrCQljb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IG5vaXNlX2tleXBhaXIsIHJlZmNvdW50KTsKKysKKysJbmV0X2RiZ19yYXRlbGltaXRlZCgiJXM6IEtleXBhaXIgJWxsdSBkZXN0cm95ZWQgZm9yIHBlZXIgJWxsdVxuIiwKKysJCQkgICAga2V5cGFpci0+ZW50cnkucGVlci0+ZGV2aWNlLT5kZXYtPm5hbWUsCisrCQkJICAgIGtleXBhaXItPmludGVybmFsX2lkLAorKwkJCSAgICBrZXlwYWlyLT5lbnRyeS5wZWVyLT5pbnRlcm5hbF9pZCk7CisrCXdnX2luZGV4X2hhc2h0YWJsZV9yZW1vdmUoa2V5cGFpci0+ZW50cnkucGVlci0+ZGV2aWNlLT5pbmRleF9oYXNodGFibGUsCisrCQkJCSAgJmtleXBhaXItPmVudHJ5KTsKKysJY2FsbF9yY3UoJmtleXBhaXItPnJjdSwga2V5cGFpcl9mcmVlX3JjdSk7CisrfQorKworK3ZvaWQgd2dfbm9pc2Vfa2V5cGFpcl9wdXQoc3RydWN0IG5vaXNlX2tleXBhaXIgKmtleXBhaXIsIGJvb2wgdW5yZWZlcmVuY2Vfbm93KQorK3sKKysJaWYgKHVubGlrZWx5KCFrZXlwYWlyKSkKKysJCXJldHVybjsKKysJaWYgKHVubGlrZWx5KHVucmVmZXJlbmNlX25vdykpCisrCQl3Z19pbmRleF9oYXNodGFibGVfcmVtb3ZlKAorKwkJCWtleXBhaXItPmVudHJ5LnBlZXItPmRldmljZS0+aW5kZXhfaGFzaHRhYmxlLAorKwkJCSZrZXlwYWlyLT5lbnRyeSk7CisrCWtyZWZfcHV0KCZrZXlwYWlyLT5yZWZjb3VudCwga2V5cGFpcl9mcmVlX2tyZWYpOworK30KKysKKytzdHJ1Y3Qgbm9pc2Vfa2V5cGFpciAqd2dfbm9pc2Vfa2V5cGFpcl9nZXQoc3RydWN0IG5vaXNlX2tleXBhaXIgKmtleXBhaXIpCisreworKwlSQ1VfTE9DS0RFUF9XQVJOKCFyY3VfcmVhZF9sb2NrX2JoX2hlbGQoKSwKKysJCSJUYWtpbmcgbm9pc2Uga2V5cGFpciByZWZlcmVuY2Ugd2l0aG91dCBob2xkaW5nIHRoZSBSQ1UgQkggcmVhZCBsb2NrIik7CisrCWlmICh1bmxpa2VseSgha2V5cGFpciB8fCAha3JlZl9nZXRfdW5sZXNzX3plcm8oJmtleXBhaXItPnJlZmNvdW50KSkpCisrCQlyZXR1cm4gTlVMTDsKKysJcmV0dXJuIGtleXBhaXI7CisrfQorKworK3ZvaWQgd2dfbm9pc2Vfa2V5cGFpcnNfY2xlYXIoc3RydWN0IG5vaXNlX2tleXBhaXJzICprZXlwYWlycykKKyt7CisrCXN0cnVjdCBub2lzZV9rZXlwYWlyICpvbGQ7CisrCisrCXNwaW5fbG9ja19iaCgma2V5cGFpcnMtPmtleXBhaXJfdXBkYXRlX2xvY2spOworKworKwkvKiBXZSB6ZXJvIHRoZSBuZXh0X2tleXBhaXIgYmVmb3JlIHplcm9pbmcgdGhlIG90aGVycywgc28gdGhhdAorKwkgKiB3Z19ub2lzZV9yZWNlaXZlZF93aXRoX2tleXBhaXIgcmV0dXJucyBlYXJseSBiZWZvcmUgc3Vic2VxdWVudCBvbmVzCisrCSAqIGFyZSB6ZXJvZWQuCisrCSAqLworKwlvbGQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGtleXBhaXJzLT5uZXh0X2tleXBhaXIsCisrCQlsb2NrZGVwX2lzX2hlbGQoJmtleXBhaXJzLT5rZXlwYWlyX3VwZGF0ZV9sb2NrKSk7CisrCVJDVV9JTklUX1BPSU5URVIoa2V5cGFpcnMtPm5leHRfa2V5cGFpciwgTlVMTCk7CisrCXdnX25vaXNlX2tleXBhaXJfcHV0KG9sZCwgdHJ1ZSk7CisrCisrCW9sZCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoa2V5cGFpcnMtPnByZXZpb3VzX2tleXBhaXIsCisrCQlsb2NrZGVwX2lzX2hlbGQoJmtleXBhaXJzLT5rZXlwYWlyX3VwZGF0ZV9sb2NrKSk7CisrCVJDVV9JTklUX1BPSU5URVIoa2V5cGFpcnMtPnByZXZpb3VzX2tleXBhaXIsIE5VTEwpOworKwl3Z19ub2lzZV9rZXlwYWlyX3B1dChvbGQsIHRydWUpOworKworKwlvbGQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGtleXBhaXJzLT5jdXJyZW50X2tleXBhaXIsCisrCQlsb2NrZGVwX2lzX2hlbGQoJmtleXBhaXJzLT5rZXlwYWlyX3VwZGF0ZV9sb2NrKSk7CisrCVJDVV9JTklUX1BPSU5URVIoa2V5cGFpcnMtPmN1cnJlbnRfa2V5cGFpciwgTlVMTCk7CisrCXdnX25vaXNlX2tleXBhaXJfcHV0KG9sZCwgdHJ1ZSk7CisrCisrCXNwaW5fdW5sb2NrX2JoKCZrZXlwYWlycy0+a2V5cGFpcl91cGRhdGVfbG9jayk7CisrfQorKworK3ZvaWQgd2dfbm9pc2VfZXhwaXJlX2N1cnJlbnRfcGVlcl9rZXlwYWlycyhzdHJ1Y3Qgd2dfcGVlciAqcGVlcikKKyt7CisrCXN0cnVjdCBub2lzZV9rZXlwYWlyICprZXlwYWlyOworKworKwl3Z19ub2lzZV9oYW5kc2hha2VfY2xlYXIoJnBlZXItPmhhbmRzaGFrZSk7CisrCXdnX25vaXNlX3Jlc2V0X2xhc3Rfc2VudF9oYW5kc2hha2UoJnBlZXItPmxhc3Rfc2VudF9oYW5kc2hha2UpOworKworKwlzcGluX2xvY2tfYmgoJnBlZXItPmtleXBhaXJzLmtleXBhaXJfdXBkYXRlX2xvY2spOworKwlrZXlwYWlyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChwZWVyLT5rZXlwYWlycy5uZXh0X2tleXBhaXIsCisrCQkJbG9ja2RlcF9pc19oZWxkKCZwZWVyLT5rZXlwYWlycy5rZXlwYWlyX3VwZGF0ZV9sb2NrKSk7CisrCWlmIChrZXlwYWlyKQorKwkJa2V5cGFpci0+c2VuZGluZy5pc192YWxpZCA9IGZhbHNlOworKwlrZXlwYWlyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChwZWVyLT5rZXlwYWlycy5jdXJyZW50X2tleXBhaXIsCisrCQkJbG9ja2RlcF9pc19oZWxkKCZwZWVyLT5rZXlwYWlycy5rZXlwYWlyX3VwZGF0ZV9sb2NrKSk7CisrCWlmIChrZXlwYWlyKQorKwkJa2V5cGFpci0+c2VuZGluZy5pc192YWxpZCA9IGZhbHNlOworKwlzcGluX3VubG9ja19iaCgmcGVlci0+a2V5cGFpcnMua2V5cGFpcl91cGRhdGVfbG9jayk7CisrfQorKworK3N0YXRpYyB2b2lkIGFkZF9uZXdfa2V5cGFpcihzdHJ1Y3Qgbm9pc2Vfa2V5cGFpcnMgKmtleXBhaXJzLAorKwkJCSAgICBzdHJ1Y3Qgbm9pc2Vfa2V5cGFpciAqbmV3X2tleXBhaXIpCisreworKwlzdHJ1Y3Qgbm9pc2Vfa2V5cGFpciAqcHJldmlvdXNfa2V5cGFpciwgKm5leHRfa2V5cGFpciwgKmN1cnJlbnRfa2V5cGFpcjsKKysKKysJc3Bpbl9sb2NrX2JoKCZrZXlwYWlycy0+a2V5cGFpcl91cGRhdGVfbG9jayk7CisrCXByZXZpb3VzX2tleXBhaXIgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGtleXBhaXJzLT5wcmV2aW91c19rZXlwYWlyLAorKwkJbG9ja2RlcF9pc19oZWxkKCZrZXlwYWlycy0+a2V5cGFpcl91cGRhdGVfbG9jaykpOworKwluZXh0X2tleXBhaXIgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGtleXBhaXJzLT5uZXh0X2tleXBhaXIsCisrCQlsb2NrZGVwX2lzX2hlbGQoJmtleXBhaXJzLT5rZXlwYWlyX3VwZGF0ZV9sb2NrKSk7CisrCWN1cnJlbnRfa2V5cGFpciA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoa2V5cGFpcnMtPmN1cnJlbnRfa2V5cGFpciwKKysJCWxvY2tkZXBfaXNfaGVsZCgma2V5cGFpcnMtPmtleXBhaXJfdXBkYXRlX2xvY2spKTsKKysJaWYgKG5ld19rZXlwYWlyLT5pX2FtX3RoZV9pbml0aWF0b3IpIHsKKysJCS8qIElmIHdlJ3JlIHRoZSBpbml0aWF0b3IsIGl0IG1lYW5zIHdlJ3ZlIHNlbnQgYSBoYW5kc2hha2UsIGFuZAorKwkJICogcmVjZWl2ZWQgYSBjb25maXJtYXRpb24gcmVzcG9uc2UsIHdoaWNoIG1lYW5zIHRoaXMgbmV3CisrCQkgKiBrZXlwYWlyIGNhbiBub3cgYmUgdXNlZC4KKysJCSAqLworKwkJaWYgKG5leHRfa2V5cGFpcikgeworKwkJCS8qIElmIHRoZXJlIGFscmVhZHkgd2FzIGEgbmV4dCBrZXlwYWlyIHBlbmRpbmcsIHdlCisrCQkJICogZGVtb3RlIGl0IHRvIGJlIHRoZSBwcmV2aW91cyBrZXlwYWlyLCBhbmQgZnJlZSB0aGUKKysJCQkgKiBleGlzdGluZyBjdXJyZW50LiBOb3RlIHRoYXQgdGhpcyBtZWFucyBLQ0kgY2FuIHJlc3VsdAorKwkJCSAqIGluIHRoaXMgdHJhbnNpdGlvbi4gSXQgd291bGQgcGVyaGFwcyBiZSBtb3JlIHNvdW5kIHRvCisrCQkJICogYWx3YXlzIGp1c3QgZ2V0IHJpZCBvZiB0aGUgdW51c2VkIG5leHQga2V5cGFpcgorKwkJCSAqIGluc3RlYWQgb2YgcHV0dGluZyBpdCBpbiB0aGUgcHJldmlvdXMgc2xvdCwgYnV0IHRoaXMKKysJCQkgKiBtaWdodCBiZSBhIGJpdCBsZXNzIHJvYnVzdC4gU29tZXRoaW5nIHRvIHRoaW5rIGFib3V0CisrCQkJICogZm9yIHRoZSBmdXR1cmUuCisrCQkJICovCisrCQkJUkNVX0lOSVRfUE9JTlRFUihrZXlwYWlycy0+bmV4dF9rZXlwYWlyLCBOVUxMKTsKKysJCQlyY3VfYXNzaWduX3BvaW50ZXIoa2V5cGFpcnMtPnByZXZpb3VzX2tleXBhaXIsCisrCQkJCQkgICBuZXh0X2tleXBhaXIpOworKwkJCXdnX25vaXNlX2tleXBhaXJfcHV0KGN1cnJlbnRfa2V5cGFpciwgdHJ1ZSk7CisrCQl9IGVsc2UgLyogSWYgdGhlcmUgd2Fzbid0IGFuIGV4aXN0aW5nIG5leHQga2V5cGFpciwgd2UgcmVwbGFjZQorKwkJCSogdGhlIHByZXZpb3VzIHdpdGggdGhlIGN1cnJlbnQgb25lLgorKwkJCSovCisrCQkJcmN1X2Fzc2lnbl9wb2ludGVyKGtleXBhaXJzLT5wcmV2aW91c19rZXlwYWlyLAorKwkJCQkJICAgY3VycmVudF9rZXlwYWlyKTsKKysJCS8qIEF0IHRoaXMgcG9pbnQgd2UgY2FuIGdldCByaWQgb2YgdGhlIG9sZCBwcmV2aW91cyBrZXlwYWlyLCBhbmQKKysJCSAqIHNldCB1cCB0aGUgbmV3IGtleXBhaXIuCisrCQkgKi8KKysJCXdnX25vaXNlX2tleXBhaXJfcHV0KHByZXZpb3VzX2tleXBhaXIsIHRydWUpOworKwkJcmN1X2Fzc2lnbl9wb2ludGVyKGtleXBhaXJzLT5jdXJyZW50X2tleXBhaXIsIG5ld19rZXlwYWlyKTsKKysJfSBlbHNlIHsKKysJCS8qIElmIHdlJ3JlIHRoZSByZXNwb25kZXIsIGl0IG1lYW5zIHdlIGNhbid0IHVzZSB0aGUgbmV3IGtleXBhaXIKKysJCSAqIHVudGlsIHdlIHJlY2VpdmUgY29uZmlybWF0aW9uIHZpYSB0aGUgZmlyc3QgZGF0YSBwYWNrZXQsIHNvCisrCQkgKiB3ZSBnZXQgcmlkIG9mIHRoZSBleGlzdGluZyBwcmV2aW91cyBvbmUsIHRoZSBwb3NzaWJseQorKwkJICogZXhpc3RpbmcgbmV4dCBvbmUsIGFuZCBzbGlkZSBpbiB0aGUgbmV3IG5leHQgb25lLgorKwkJICovCisrCQlyY3VfYXNzaWduX3BvaW50ZXIoa2V5cGFpcnMtPm5leHRfa2V5cGFpciwgbmV3X2tleXBhaXIpOworKwkJd2dfbm9pc2Vfa2V5cGFpcl9wdXQobmV4dF9rZXlwYWlyLCB0cnVlKTsKKysJCVJDVV9JTklUX1BPSU5URVIoa2V5cGFpcnMtPnByZXZpb3VzX2tleXBhaXIsIE5VTEwpOworKwkJd2dfbm9pc2Vfa2V5cGFpcl9wdXQocHJldmlvdXNfa2V5cGFpciwgdHJ1ZSk7CisrCX0KKysJc3Bpbl91bmxvY2tfYmgoJmtleXBhaXJzLT5rZXlwYWlyX3VwZGF0ZV9sb2NrKTsKKyt9CisrCisrYm9vbCB3Z19ub2lzZV9yZWNlaXZlZF93aXRoX2tleXBhaXIoc3RydWN0IG5vaXNlX2tleXBhaXJzICprZXlwYWlycywKKysJCQkJICAgIHN0cnVjdCBub2lzZV9rZXlwYWlyICpyZWNlaXZlZF9rZXlwYWlyKQorK3sKKysJc3RydWN0IG5vaXNlX2tleXBhaXIgKm9sZF9rZXlwYWlyOworKwlib29sIGtleV9pc19uZXc7CisrCisrCS8qIFdlIGZpcnN0IGNoZWNrIHdpdGhvdXQgdGFraW5nIHRoZSBzcGlubG9jay4gKi8KKysJa2V5X2lzX25ldyA9IHJlY2VpdmVkX2tleXBhaXIgPT0KKysJCSAgICAgcmN1X2FjY2Vzc19wb2ludGVyKGtleXBhaXJzLT5uZXh0X2tleXBhaXIpOworKwlpZiAobGlrZWx5KCFrZXlfaXNfbmV3KSkKKysJCXJldHVybiBmYWxzZTsKKysKKysJc3Bpbl9sb2NrX2JoKCZrZXlwYWlycy0+a2V5cGFpcl91cGRhdGVfbG9jayk7CisrCS8qIEFmdGVyIGxvY2tpbmcsIHdlIGRvdWJsZSBjaGVjayB0aGF0IHRoaW5ncyBkaWRuJ3QgY2hhbmdlIGZyb20KKysJICogYmVuZWF0aCB1cy4KKysJICovCisrCWlmICh1bmxpa2VseShyZWNlaXZlZF9rZXlwYWlyICE9CisrCQkgICAgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChrZXlwYWlycy0+bmV4dF9rZXlwYWlyLAorKwkJCSAgICBsb2NrZGVwX2lzX2hlbGQoJmtleXBhaXJzLT5rZXlwYWlyX3VwZGF0ZV9sb2NrKSkpKSB7CisrCQlzcGluX3VubG9ja19iaCgma2V5cGFpcnMtPmtleXBhaXJfdXBkYXRlX2xvY2spOworKwkJcmV0dXJuIGZhbHNlOworKwl9CisrCisrCS8qIFdoZW4gd2UndmUgZmluYWxseSByZWNlaXZlZCB0aGUgY29uZmlybWF0aW9uLCB3ZSBzbGlkZSB0aGUgbmV4dAorKwkgKiBpbnRvIHRoZSBjdXJyZW50LCB0aGUgY3VycmVudCBpbnRvIHRoZSBwcmV2aW91cywgYW5kIGdldCByaWQgb2YKKysJICogdGhlIG9sZCBwcmV2aW91cy4KKysJICovCisrCW9sZF9rZXlwYWlyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChrZXlwYWlycy0+cHJldmlvdXNfa2V5cGFpciwKKysJCWxvY2tkZXBfaXNfaGVsZCgma2V5cGFpcnMtPmtleXBhaXJfdXBkYXRlX2xvY2spKTsKKysJcmN1X2Fzc2lnbl9wb2ludGVyKGtleXBhaXJzLT5wcmV2aW91c19rZXlwYWlyLAorKwkJcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChrZXlwYWlycy0+Y3VycmVudF9rZXlwYWlyLAorKwkJCWxvY2tkZXBfaXNfaGVsZCgma2V5cGFpcnMtPmtleXBhaXJfdXBkYXRlX2xvY2spKSk7CisrCXdnX25vaXNlX2tleXBhaXJfcHV0KG9sZF9rZXlwYWlyLCB0cnVlKTsKKysJcmN1X2Fzc2lnbl9wb2ludGVyKGtleXBhaXJzLT5jdXJyZW50X2tleXBhaXIsIHJlY2VpdmVkX2tleXBhaXIpOworKwlSQ1VfSU5JVF9QT0lOVEVSKGtleXBhaXJzLT5uZXh0X2tleXBhaXIsIE5VTEwpOworKworKwlzcGluX3VubG9ja19iaCgma2V5cGFpcnMtPmtleXBhaXJfdXBkYXRlX2xvY2spOworKwlyZXR1cm4gdHJ1ZTsKKyt9CisrCisrLyogTXVzdCBob2xkIHN0YXRpY19pZGVudGl0eS0+bG9jayAqLworK3ZvaWQgd2dfbm9pc2Vfc2V0X3N0YXRpY19pZGVudGl0eV9wcml2YXRlX2tleSgKKysJc3RydWN0IG5vaXNlX3N0YXRpY19pZGVudGl0eSAqc3RhdGljX2lkZW50aXR5LAorKwljb25zdCB1OCBwcml2YXRlX2tleVtOT0lTRV9QVUJMSUNfS0VZX0xFTl0pCisreworKwltZW1jcHkoc3RhdGljX2lkZW50aXR5LT5zdGF0aWNfcHJpdmF0ZSwgcHJpdmF0ZV9rZXksCisrCSAgICAgICBOT0lTRV9QVUJMSUNfS0VZX0xFTik7CisrCWN1cnZlMjU1MTlfY2xhbXBfc2VjcmV0KHN0YXRpY19pZGVudGl0eS0+c3RhdGljX3ByaXZhdGUpOworKwlzdGF0aWNfaWRlbnRpdHktPmhhc19pZGVudGl0eSA9IGN1cnZlMjU1MTlfZ2VuZXJhdGVfcHVibGljKAorKwkJc3RhdGljX2lkZW50aXR5LT5zdGF0aWNfcHVibGljLCBwcml2YXRlX2tleSk7CisrfQorKworKy8qIFRoaXMgaXMgSHVnbyBLcmF3Y3p5aydzIEhLREY6CisrICogIC0gaHR0cHM6Ly9lcHJpbnQuaWFjci5vcmcvMjAxMC8yNjQucGRmCisrICogIC0gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzU4NjkKKysgKi8KKytzdGF0aWMgdm9pZCBrZGYodTggKmZpcnN0X2RzdCwgdTggKnNlY29uZF9kc3QsIHU4ICp0aGlyZF9kc3QsIGNvbnN0IHU4ICpkYXRhLAorKwkJc2l6ZV90IGZpcnN0X2xlbiwgc2l6ZV90IHNlY29uZF9sZW4sIHNpemVfdCB0aGlyZF9sZW4sCisrCQlzaXplX3QgZGF0YV9sZW4sIGNvbnN0IHU4IGNoYWluaW5nX2tleVtOT0lTRV9IQVNIX0xFTl0pCisreworKwl1OCBvdXRwdXRbQkxBS0UyU19IQVNIX1NJWkUgKyAxXTsKKysJdTggc2VjcmV0W0JMQUtFMlNfSEFTSF9TSVpFXTsKKysKKysJV0FSTl9PTihJU19FTkFCTEVEKERFQlVHKSAmJgorKwkJKGZpcnN0X2xlbiA+IEJMQUtFMlNfSEFTSF9TSVpFIHx8CisrCQkgc2Vjb25kX2xlbiA+IEJMQUtFMlNfSEFTSF9TSVpFIHx8CisrCQkgdGhpcmRfbGVuID4gQkxBS0UyU19IQVNIX1NJWkUgfHwKKysJCSAoKHNlY29uZF9sZW4gfHwgc2Vjb25kX2RzdCB8fCB0aGlyZF9sZW4gfHwgdGhpcmRfZHN0KSAmJgorKwkJICAoIWZpcnN0X2xlbiB8fCAhZmlyc3RfZHN0KSkgfHwKKysJCSAoKHRoaXJkX2xlbiB8fCB0aGlyZF9kc3QpICYmICghc2Vjb25kX2xlbiB8fCAhc2Vjb25kX2RzdCkpKSk7CisrCisrCS8qIEV4dHJhY3QgZW50cm9weSBmcm9tIGRhdGEgaW50byBzZWNyZXQgKi8KKysJYmxha2UyczI1Nl9obWFjKHNlY3JldCwgZGF0YSwgY2hhaW5pbmdfa2V5LCBkYXRhX2xlbiwgTk9JU0VfSEFTSF9MRU4pOworKworKwlpZiAoIWZpcnN0X2RzdCB8fCAhZmlyc3RfbGVuKQorKwkJZ290byBvdXQ7CisrCisrCS8qIEV4cGFuZCBmaXJzdCBrZXk6IGtleSA9IHNlY3JldCwgZGF0YSA9IDB4MSAqLworKwlvdXRwdXRbMF0gPSAxOworKwlibGFrZTJzMjU2X2htYWMob3V0cHV0LCBvdXRwdXQsIHNlY3JldCwgMSwgQkxBS0UyU19IQVNIX1NJWkUpOworKwltZW1jcHkoZmlyc3RfZHN0LCBvdXRwdXQsIGZpcnN0X2xlbik7CisrCisrCWlmICghc2Vjb25kX2RzdCB8fCAhc2Vjb25kX2xlbikKKysJCWdvdG8gb3V0OworKworKwkvKiBFeHBhbmQgc2Vjb25kIGtleToga2V5ID0gc2VjcmV0LCBkYXRhID0gZmlyc3Qta2V5IHx8IDB4MiAqLworKwlvdXRwdXRbQkxBS0UyU19IQVNIX1NJWkVdID0gMjsKKysJYmxha2UyczI1Nl9obWFjKG91dHB1dCwgb3V0cHV0LCBzZWNyZXQsIEJMQUtFMlNfSEFTSF9TSVpFICsgMSwKKysJCQlCTEFLRTJTX0hBU0hfU0laRSk7CisrCW1lbWNweShzZWNvbmRfZHN0LCBvdXRwdXQsIHNlY29uZF9sZW4pOworKworKwlpZiAoIXRoaXJkX2RzdCB8fCAhdGhpcmRfbGVuKQorKwkJZ290byBvdXQ7CisrCisrCS8qIEV4cGFuZCB0aGlyZCBrZXk6IGtleSA9IHNlY3JldCwgZGF0YSA9IHNlY29uZC1rZXkgfHwgMHgzICovCisrCW91dHB1dFtCTEFLRTJTX0hBU0hfU0laRV0gPSAzOworKwlibGFrZTJzMjU2X2htYWMob3V0cHV0LCBvdXRwdXQsIHNlY3JldCwgQkxBS0UyU19IQVNIX1NJWkUgKyAxLAorKwkJCUJMQUtFMlNfSEFTSF9TSVpFKTsKKysJbWVtY3B5KHRoaXJkX2RzdCwgb3V0cHV0LCB0aGlyZF9sZW4pOworKworK291dDoKKysJLyogQ2xlYXIgc2Vuc2l0aXZlIGRhdGEgZnJvbSBzdGFjayAqLworKwltZW16ZXJvX2V4cGxpY2l0KHNlY3JldCwgQkxBS0UyU19IQVNIX1NJWkUpOworKwltZW16ZXJvX2V4cGxpY2l0KG91dHB1dCwgQkxBS0UyU19IQVNIX1NJWkUgKyAxKTsKKyt9CisrCisrc3RhdGljIHZvaWQgc3ltbWV0cmljX2tleV9pbml0KHN0cnVjdCBub2lzZV9zeW1tZXRyaWNfa2V5ICprZXkpCisreworKwlzcGluX2xvY2tfaW5pdCgma2V5LT5jb3VudGVyLnJlY2VpdmUubG9jayk7CisrCWF0b21pYzY0X3NldCgma2V5LT5jb3VudGVyLmNvdW50ZXIsIDApOworKwltZW1zZXQoa2V5LT5jb3VudGVyLnJlY2VpdmUuYmFja3RyYWNrLCAwLAorKwkgICAgICAgc2l6ZW9mKGtleS0+Y291bnRlci5yZWNlaXZlLmJhY2t0cmFjaykpOworKwlrZXktPmJpcnRoZGF0ZSA9IGt0aW1lX2dldF9jb2Fyc2VfYm9vdHRpbWVfbnMoKTsKKysJa2V5LT5pc192YWxpZCA9IHRydWU7CisrfQorKworK3N0YXRpYyB2b2lkIGRlcml2ZV9rZXlzKHN0cnVjdCBub2lzZV9zeW1tZXRyaWNfa2V5ICpmaXJzdF9kc3QsCisrCQkJc3RydWN0IG5vaXNlX3N5bW1ldHJpY19rZXkgKnNlY29uZF9kc3QsCisrCQkJY29uc3QgdTggY2hhaW5pbmdfa2V5W05PSVNFX0hBU0hfTEVOXSkKKyt7CisrCWtkZihmaXJzdF9kc3QtPmtleSwgc2Vjb25kX2RzdC0+a2V5LCBOVUxMLCBOVUxMLAorKwkgICAgTk9JU0VfU1lNTUVUUklDX0tFWV9MRU4sIE5PSVNFX1NZTU1FVFJJQ19LRVlfTEVOLCAwLCAwLAorKwkgICAgY2hhaW5pbmdfa2V5KTsKKysJc3ltbWV0cmljX2tleV9pbml0KGZpcnN0X2RzdCk7CisrCXN5bW1ldHJpY19rZXlfaW5pdChzZWNvbmRfZHN0KTsKKyt9CisrCisrc3RhdGljIGJvb2wgX19tdXN0X2NoZWNrIG1peF9kaCh1OCBjaGFpbmluZ19rZXlbTk9JU0VfSEFTSF9MRU5dLAorKwkJCQl1OCBrZXlbTk9JU0VfU1lNTUVUUklDX0tFWV9MRU5dLAorKwkJCQljb25zdCB1OCBwcml2YXRlW05PSVNFX1BVQkxJQ19LRVlfTEVOXSwKKysJCQkJY29uc3QgdTggcHVibGljW05PSVNFX1BVQkxJQ19LRVlfTEVOXSkKKyt7CisrCXU4IGRoX2NhbGN1bGF0aW9uW05PSVNFX1BVQkxJQ19LRVlfTEVOXTsKKysKKysJaWYgKHVubGlrZWx5KCFjdXJ2ZTI1NTE5KGRoX2NhbGN1bGF0aW9uLCBwcml2YXRlLCBwdWJsaWMpKSkKKysJCXJldHVybiBmYWxzZTsKKysJa2RmKGNoYWluaW5nX2tleSwga2V5LCBOVUxMLCBkaF9jYWxjdWxhdGlvbiwgTk9JU0VfSEFTSF9MRU4sCisrCSAgICBOT0lTRV9TWU1NRVRSSUNfS0VZX0xFTiwgMCwgTk9JU0VfUFVCTElDX0tFWV9MRU4sIGNoYWluaW5nX2tleSk7CisrCW1lbXplcm9fZXhwbGljaXQoZGhfY2FsY3VsYXRpb24sIE5PSVNFX1BVQkxJQ19LRVlfTEVOKTsKKysJcmV0dXJuIHRydWU7CisrfQorKworK3N0YXRpYyB2b2lkIG1peF9oYXNoKHU4IGhhc2hbTk9JU0VfSEFTSF9MRU5dLCBjb25zdCB1OCAqc3JjLCBzaXplX3Qgc3JjX2xlbikKKyt7CisrCXN0cnVjdCBibGFrZTJzX3N0YXRlIGJsYWtlOworKworKwlibGFrZTJzX2luaXQoJmJsYWtlLCBOT0lTRV9IQVNIX0xFTik7CisrCWJsYWtlMnNfdXBkYXRlKCZibGFrZSwgaGFzaCwgTk9JU0VfSEFTSF9MRU4pOworKwlibGFrZTJzX3VwZGF0ZSgmYmxha2UsIHNyYywgc3JjX2xlbik7CisrCWJsYWtlMnNfZmluYWwoJmJsYWtlLCBoYXNoKTsKKyt9CisrCisrc3RhdGljIHZvaWQgbWl4X3Bzayh1OCBjaGFpbmluZ19rZXlbTk9JU0VfSEFTSF9MRU5dLCB1OCBoYXNoW05PSVNFX0hBU0hfTEVOXSwKKysJCSAgICB1OCBrZXlbTk9JU0VfU1lNTUVUUklDX0tFWV9MRU5dLAorKwkJICAgIGNvbnN0IHU4IHBza1tOT0lTRV9TWU1NRVRSSUNfS0VZX0xFTl0pCisreworKwl1OCB0ZW1wX2hhc2hbTk9JU0VfSEFTSF9MRU5dOworKworKwlrZGYoY2hhaW5pbmdfa2V5LCB0ZW1wX2hhc2gsIGtleSwgcHNrLCBOT0lTRV9IQVNIX0xFTiwgTk9JU0VfSEFTSF9MRU4sCisrCSAgICBOT0lTRV9TWU1NRVRSSUNfS0VZX0xFTiwgTk9JU0VfU1lNTUVUUklDX0tFWV9MRU4sIGNoYWluaW5nX2tleSk7CisrCW1peF9oYXNoKGhhc2gsIHRlbXBfaGFzaCwgTk9JU0VfSEFTSF9MRU4pOworKwltZW16ZXJvX2V4cGxpY2l0KHRlbXBfaGFzaCwgTk9JU0VfSEFTSF9MRU4pOworK30KKysKKytzdGF0aWMgdm9pZCBoYW5kc2hha2VfaW5pdCh1OCBjaGFpbmluZ19rZXlbTk9JU0VfSEFTSF9MRU5dLAorKwkJCSAgIHU4IGhhc2hbTk9JU0VfSEFTSF9MRU5dLAorKwkJCSAgIGNvbnN0IHU4IHJlbW90ZV9zdGF0aWNbTk9JU0VfUFVCTElDX0tFWV9MRU5dKQorK3sKKysJbWVtY3B5KGhhc2gsIGhhbmRzaGFrZV9pbml0X2hhc2gsIE5PSVNFX0hBU0hfTEVOKTsKKysJbWVtY3B5KGNoYWluaW5nX2tleSwgaGFuZHNoYWtlX2luaXRfY2hhaW5pbmdfa2V5LCBOT0lTRV9IQVNIX0xFTik7CisrCW1peF9oYXNoKGhhc2gsIHJlbW90ZV9zdGF0aWMsIE5PSVNFX1BVQkxJQ19LRVlfTEVOKTsKKyt9CisrCisrc3RhdGljIHZvaWQgbWVzc2FnZV9lbmNyeXB0KHU4ICpkc3RfY2lwaGVydGV4dCwgY29uc3QgdTggKnNyY19wbGFpbnRleHQsCisrCQkJICAgIHNpemVfdCBzcmNfbGVuLCB1OCBrZXlbTk9JU0VfU1lNTUVUUklDX0tFWV9MRU5dLAorKwkJCSAgICB1OCBoYXNoW05PSVNFX0hBU0hfTEVOXSkKKyt7CisrCWNoYWNoYTIwcG9seTEzMDVfZW5jcnlwdChkc3RfY2lwaGVydGV4dCwgc3JjX3BsYWludGV4dCwgc3JjX2xlbiwgaGFzaCwKKysJCQkJIE5PSVNFX0hBU0hfTEVOLAorKwkJCQkgMCAvKiBBbHdheXMgemVybyBmb3IgTm9pc2VfSUsgKi8sIGtleSk7CisrCW1peF9oYXNoKGhhc2gsIGRzdF9jaXBoZXJ0ZXh0LCBub2lzZV9lbmNyeXB0ZWRfbGVuKHNyY19sZW4pKTsKKyt9CisrCisrc3RhdGljIGJvb2wgbWVzc2FnZV9kZWNyeXB0KHU4ICpkc3RfcGxhaW50ZXh0LCBjb25zdCB1OCAqc3JjX2NpcGhlcnRleHQsCisrCQkJICAgIHNpemVfdCBzcmNfbGVuLCB1OCBrZXlbTk9JU0VfU1lNTUVUUklDX0tFWV9MRU5dLAorKwkJCSAgICB1OCBoYXNoW05PSVNFX0hBU0hfTEVOXSkKKyt7CisrCWlmICghY2hhY2hhMjBwb2x5MTMwNV9kZWNyeXB0KGRzdF9wbGFpbnRleHQsIHNyY19jaXBoZXJ0ZXh0LCBzcmNfbGVuLAorKwkJCQkgICAgICBoYXNoLCBOT0lTRV9IQVNIX0xFTiwKKysJCQkJICAgICAgMCAvKiBBbHdheXMgemVybyBmb3IgTm9pc2VfSUsgKi8sIGtleSkpCisrCQlyZXR1cm4gZmFsc2U7CisrCW1peF9oYXNoKGhhc2gsIHNyY19jaXBoZXJ0ZXh0LCBzcmNfbGVuKTsKKysJcmV0dXJuIHRydWU7CisrfQorKworK3N0YXRpYyB2b2lkIG1lc3NhZ2VfZXBoZW1lcmFsKHU4IGVwaGVtZXJhbF9kc3RbTk9JU0VfUFVCTElDX0tFWV9MRU5dLAorKwkJCSAgICAgIGNvbnN0IHU4IGVwaGVtZXJhbF9zcmNbTk9JU0VfUFVCTElDX0tFWV9MRU5dLAorKwkJCSAgICAgIHU4IGNoYWluaW5nX2tleVtOT0lTRV9IQVNIX0xFTl0sCisrCQkJICAgICAgdTggaGFzaFtOT0lTRV9IQVNIX0xFTl0pCisreworKwlpZiAoZXBoZW1lcmFsX2RzdCAhPSBlcGhlbWVyYWxfc3JjKQorKwkJbWVtY3B5KGVwaGVtZXJhbF9kc3QsIGVwaGVtZXJhbF9zcmMsIE5PSVNFX1BVQkxJQ19LRVlfTEVOKTsKKysJbWl4X2hhc2goaGFzaCwgZXBoZW1lcmFsX3NyYywgTk9JU0VfUFVCTElDX0tFWV9MRU4pOworKwlrZGYoY2hhaW5pbmdfa2V5LCBOVUxMLCBOVUxMLCBlcGhlbWVyYWxfc3JjLCBOT0lTRV9IQVNIX0xFTiwgMCwgMCwKKysJICAgIE5PSVNFX1BVQkxJQ19LRVlfTEVOLCBjaGFpbmluZ19rZXkpOworK30KKysKKytzdGF0aWMgdm9pZCB0YWk2NG5fbm93KHU4IG91dHB1dFtOT0lTRV9USU1FU1RBTVBfTEVOXSkKKyt7CisrCXN0cnVjdCB0aW1lc3BlYzY0IG5vdzsKKysKKysJa3RpbWVfZ2V0X3JlYWxfdHM2NCgmbm93KTsKKysKKysJLyogSW4gb3JkZXIgdG8gcHJldmVudCBzb21lIHNvcnQgb2YgaW5mb2xlYWsgZnJvbSBwcmVjaXNlIHRpbWVycywgd2UKKysJICogcm91bmQgZG93biB0aGUgbmFub3NlY29uZHMgcGFydCB0byB0aGUgY2xvc2VzdCByb3VuZGVkLWRvd24gcG93ZXIgb2YKKysJICogdHdvIHRvIHRoZSBtYXhpbXVtIGluaXRpYXRpb25zIHBlciBzZWNvbmQgYWxsb3dlZCBhbnl3YXkgYnkgdGhlCisrCSAqIGltcGxlbWVudGF0aW9uLgorKwkgKi8KKysJbm93LnR2X25zZWMgPSBBTElHTl9ET1dOKG5vdy50dl9uc2VjLAorKwkJcm91bmRkb3duX3Bvd19vZl90d28oTlNFQ19QRVJfU0VDIC8gSU5JVElBVElPTlNfUEVSX1NFQ09ORCkpOworKworKwkvKiBodHRwczovL2NyLnlwLnRvL2xpYnRhaS90YWk2NC5odG1sICovCisrCSooX19iZTY0ICopb3V0cHV0ID0gY3B1X3RvX2JlNjQoMHg0MDAwMDAwMDAwMDAwMDBhVUxMICsgbm93LnR2X3NlYyk7CisrCSooX19iZTMyICopKG91dHB1dCArIHNpemVvZihfX2JlNjQpKSA9IGNwdV90b19iZTMyKG5vdy50dl9uc2VjKTsKKyt9CisrCisrYm9vbAorK3dnX25vaXNlX2hhbmRzaGFrZV9jcmVhdGVfaW5pdGlhdGlvbihzdHJ1Y3QgbWVzc2FnZV9oYW5kc2hha2VfaW5pdGlhdGlvbiAqZHN0LAorKwkJCQkgICAgIHN0cnVjdCBub2lzZV9oYW5kc2hha2UgKmhhbmRzaGFrZSkKKyt7CisrCXU4IHRpbWVzdGFtcFtOT0lTRV9USU1FU1RBTVBfTEVOXTsKKysJdTgga2V5W05PSVNFX1NZTU1FVFJJQ19LRVlfTEVOXTsKKysJYm9vbCByZXQgPSBmYWxzZTsKKysKKysJLyogV2UgbmVlZCB0byB3YWl0IGZvciBjcm5nIF9iZWZvcmVfIHRha2luZyBhbnkgbG9ja3MsIHNpbmNlCisrCSAqIGN1cnZlMjU1MTlfZ2VuZXJhdGVfc2VjcmV0IHVzZXMgZ2V0X3JhbmRvbV9ieXRlc193YWl0LgorKwkgKi8KKysJd2FpdF9mb3JfcmFuZG9tX2J5dGVzKCk7CisrCisrCWRvd25fcmVhZCgmaGFuZHNoYWtlLT5zdGF0aWNfaWRlbnRpdHktPmxvY2spOworKwlkb3duX3dyaXRlKCZoYW5kc2hha2UtPmxvY2spOworKworKwlpZiAodW5saWtlbHkoIWhhbmRzaGFrZS0+c3RhdGljX2lkZW50aXR5LT5oYXNfaWRlbnRpdHkpKQorKwkJZ290byBvdXQ7CisrCisrCWRzdC0+aGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUzMihNRVNTQUdFX0hBTkRTSEFLRV9JTklUSUFUSU9OKTsKKysKKysJaGFuZHNoYWtlX2luaXQoaGFuZHNoYWtlLT5jaGFpbmluZ19rZXksIGhhbmRzaGFrZS0+aGFzaCwKKysJCSAgICAgICBoYW5kc2hha2UtPnJlbW90ZV9zdGF0aWMpOworKworKwkvKiBlICovCisrCWN1cnZlMjU1MTlfZ2VuZXJhdGVfc2VjcmV0KGhhbmRzaGFrZS0+ZXBoZW1lcmFsX3ByaXZhdGUpOworKwlpZiAoIWN1cnZlMjU1MTlfZ2VuZXJhdGVfcHVibGljKGRzdC0+dW5lbmNyeXB0ZWRfZXBoZW1lcmFsLAorKwkJCQkJaGFuZHNoYWtlLT5lcGhlbWVyYWxfcHJpdmF0ZSkpCisrCQlnb3RvIG91dDsKKysJbWVzc2FnZV9lcGhlbWVyYWwoZHN0LT51bmVuY3J5cHRlZF9lcGhlbWVyYWwsCisrCQkJICBkc3QtPnVuZW5jcnlwdGVkX2VwaGVtZXJhbCwgaGFuZHNoYWtlLT5jaGFpbmluZ19rZXksCisrCQkJICBoYW5kc2hha2UtPmhhc2gpOworKworKwkvKiBlcyAqLworKwlpZiAoIW1peF9kaChoYW5kc2hha2UtPmNoYWluaW5nX2tleSwga2V5LCBoYW5kc2hha2UtPmVwaGVtZXJhbF9wcml2YXRlLAorKwkJICAgIGhhbmRzaGFrZS0+cmVtb3RlX3N0YXRpYykpCisrCQlnb3RvIG91dDsKKysKKysJLyogcyAqLworKwltZXNzYWdlX2VuY3J5cHQoZHN0LT5lbmNyeXB0ZWRfc3RhdGljLAorKwkJCWhhbmRzaGFrZS0+c3RhdGljX2lkZW50aXR5LT5zdGF0aWNfcHVibGljLAorKwkJCU5PSVNFX1BVQkxJQ19LRVlfTEVOLCBrZXksIGhhbmRzaGFrZS0+aGFzaCk7CisrCisrCS8qIHNzICovCisrCWtkZihoYW5kc2hha2UtPmNoYWluaW5nX2tleSwga2V5LCBOVUxMLAorKwkgICAgaGFuZHNoYWtlLT5wcmVjb21wdXRlZF9zdGF0aWNfc3RhdGljLCBOT0lTRV9IQVNIX0xFTiwKKysJICAgIE5PSVNFX1NZTU1FVFJJQ19LRVlfTEVOLCAwLCBOT0lTRV9QVUJMSUNfS0VZX0xFTiwKKysJICAgIGhhbmRzaGFrZS0+Y2hhaW5pbmdfa2V5KTsKKysKKysJLyoge3R9ICovCisrCXRhaTY0bl9ub3codGltZXN0YW1wKTsKKysJbWVzc2FnZV9lbmNyeXB0KGRzdC0+ZW5jcnlwdGVkX3RpbWVzdGFtcCwgdGltZXN0YW1wLAorKwkJCU5PSVNFX1RJTUVTVEFNUF9MRU4sIGtleSwgaGFuZHNoYWtlLT5oYXNoKTsKKysKKysJZHN0LT5zZW5kZXJfaW5kZXggPSB3Z19pbmRleF9oYXNodGFibGVfaW5zZXJ0KAorKwkJaGFuZHNoYWtlLT5lbnRyeS5wZWVyLT5kZXZpY2UtPmluZGV4X2hhc2h0YWJsZSwKKysJCSZoYW5kc2hha2UtPmVudHJ5KTsKKysKKysJaGFuZHNoYWtlLT5zdGF0ZSA9IEhBTkRTSEFLRV9DUkVBVEVEX0lOSVRJQVRJT047CisrCXJldCA9IHRydWU7CisrCisrb3V0OgorKwl1cF93cml0ZSgmaGFuZHNoYWtlLT5sb2NrKTsKKysJdXBfcmVhZCgmaGFuZHNoYWtlLT5zdGF0aWNfaWRlbnRpdHktPmxvY2spOworKwltZW16ZXJvX2V4cGxpY2l0KGtleSwgTk9JU0VfU1lNTUVUUklDX0tFWV9MRU4pOworKwlyZXR1cm4gcmV0OworK30KKysKKytzdHJ1Y3Qgd2dfcGVlciAqCisrd2dfbm9pc2VfaGFuZHNoYWtlX2NvbnN1bWVfaW5pdGlhdGlvbihzdHJ1Y3QgbWVzc2FnZV9oYW5kc2hha2VfaW5pdGlhdGlvbiAqc3JjLAorKwkJCQkgICAgICBzdHJ1Y3Qgd2dfZGV2aWNlICp3ZykKKyt7CisrCXN0cnVjdCB3Z19wZWVyICpwZWVyID0gTlVMTCwgKnJldF9wZWVyID0gTlVMTDsKKysJc3RydWN0IG5vaXNlX2hhbmRzaGFrZSAqaGFuZHNoYWtlOworKwlib29sIHJlcGxheV9hdHRhY2ssIGZsb29kX2F0dGFjazsKKysJdTgga2V5W05PSVNFX1NZTU1FVFJJQ19LRVlfTEVOXTsKKysJdTggY2hhaW5pbmdfa2V5W05PSVNFX0hBU0hfTEVOXTsKKysJdTggaGFzaFtOT0lTRV9IQVNIX0xFTl07CisrCXU4IHNbTk9JU0VfUFVCTElDX0tFWV9MRU5dOworKwl1OCBlW05PSVNFX1BVQkxJQ19LRVlfTEVOXTsKKysJdTggdFtOT0lTRV9USU1FU1RBTVBfTEVOXTsKKysJdTY0IGluaXRpYXRpb25fY29uc3VtcHRpb247CisrCisrCWRvd25fcmVhZCgmd2ctPnN0YXRpY19pZGVudGl0eS5sb2NrKTsKKysJaWYgKHVubGlrZWx5KCF3Zy0+c3RhdGljX2lkZW50aXR5Lmhhc19pZGVudGl0eSkpCisrCQlnb3RvIG91dDsKKysKKysJaGFuZHNoYWtlX2luaXQoY2hhaW5pbmdfa2V5LCBoYXNoLCB3Zy0+c3RhdGljX2lkZW50aXR5LnN0YXRpY19wdWJsaWMpOworKworKwkvKiBlICovCisrCW1lc3NhZ2VfZXBoZW1lcmFsKGUsIHNyYy0+dW5lbmNyeXB0ZWRfZXBoZW1lcmFsLCBjaGFpbmluZ19rZXksIGhhc2gpOworKworKwkvKiBlcyAqLworKwlpZiAoIW1peF9kaChjaGFpbmluZ19rZXksIGtleSwgd2ctPnN0YXRpY19pZGVudGl0eS5zdGF0aWNfcHJpdmF0ZSwgZSkpCisrCQlnb3RvIG91dDsKKysKKysJLyogcyAqLworKwlpZiAoIW1lc3NhZ2VfZGVjcnlwdChzLCBzcmMtPmVuY3J5cHRlZF9zdGF0aWMsCisrCQkJICAgICBzaXplb2Yoc3JjLT5lbmNyeXB0ZWRfc3RhdGljKSwga2V5LCBoYXNoKSkKKysJCWdvdG8gb3V0OworKworKwkvKiBMb29rdXAgd2hpY2ggcGVlciB3ZSdyZSBhY3R1YWxseSB0YWxraW5nIHRvICovCisrCXBlZXIgPSB3Z19wdWJrZXlfaGFzaHRhYmxlX2xvb2t1cCh3Zy0+cGVlcl9oYXNodGFibGUsIHMpOworKwlpZiAoIXBlZXIpCisrCQlnb3RvIG91dDsKKysJaGFuZHNoYWtlID0gJnBlZXItPmhhbmRzaGFrZTsKKysKKysJLyogc3MgKi8KKysJa2RmKGNoYWluaW5nX2tleSwga2V5LCBOVUxMLCBoYW5kc2hha2UtPnByZWNvbXB1dGVkX3N0YXRpY19zdGF0aWMsCisrCSAgICBOT0lTRV9IQVNIX0xFTiwgTk9JU0VfU1lNTUVUUklDX0tFWV9MRU4sIDAsIE5PSVNFX1BVQkxJQ19LRVlfTEVOLAorKwkgICAgY2hhaW5pbmdfa2V5KTsKKysKKysJLyoge3R9ICovCisrCWlmICghbWVzc2FnZV9kZWNyeXB0KHQsIHNyYy0+ZW5jcnlwdGVkX3RpbWVzdGFtcCwKKysJCQkgICAgIHNpemVvZihzcmMtPmVuY3J5cHRlZF90aW1lc3RhbXApLCBrZXksIGhhc2gpKQorKwkJZ290byBvdXQ7CisrCisrCWRvd25fcmVhZCgmaGFuZHNoYWtlLT5sb2NrKTsKKysJcmVwbGF5X2F0dGFjayA9IG1lbWNtcCh0LCBoYW5kc2hha2UtPmxhdGVzdF90aW1lc3RhbXAsCisrCQkJICAgICAgIE5PSVNFX1RJTUVTVEFNUF9MRU4pIDw9IDA7CisrCWZsb29kX2F0dGFjayA9IChzNjQpaGFuZHNoYWtlLT5sYXN0X2luaXRpYXRpb25fY29uc3VtcHRpb24gKworKwkJCSAgICAgICBOU0VDX1BFUl9TRUMgLyBJTklUSUFUSU9OU19QRVJfU0VDT05EID4KKysJCSAgICAgICAoczY0KWt0aW1lX2dldF9jb2Fyc2VfYm9vdHRpbWVfbnMoKTsKKysJdXBfcmVhZCgmaGFuZHNoYWtlLT5sb2NrKTsKKysJaWYgKHJlcGxheV9hdHRhY2sgfHwgZmxvb2RfYXR0YWNrKQorKwkJZ290byBvdXQ7CisrCisrCS8qIFN1Y2Nlc3MhIENvcHkgZXZlcnl0aGluZyB0byBwZWVyICovCisrCWRvd25fd3JpdGUoJmhhbmRzaGFrZS0+bG9jayk7CisrCW1lbWNweShoYW5kc2hha2UtPnJlbW90ZV9lcGhlbWVyYWwsIGUsIE5PSVNFX1BVQkxJQ19LRVlfTEVOKTsKKysJaWYgKG1lbWNtcCh0LCBoYW5kc2hha2UtPmxhdGVzdF90aW1lc3RhbXAsIE5PSVNFX1RJTUVTVEFNUF9MRU4pID4gMCkKKysJCW1lbWNweShoYW5kc2hha2UtPmxhdGVzdF90aW1lc3RhbXAsIHQsIE5PSVNFX1RJTUVTVEFNUF9MRU4pOworKwltZW1jcHkoaGFuZHNoYWtlLT5oYXNoLCBoYXNoLCBOT0lTRV9IQVNIX0xFTik7CisrCW1lbWNweShoYW5kc2hha2UtPmNoYWluaW5nX2tleSwgY2hhaW5pbmdfa2V5LCBOT0lTRV9IQVNIX0xFTik7CisrCWhhbmRzaGFrZS0+cmVtb3RlX2luZGV4ID0gc3JjLT5zZW5kZXJfaW5kZXg7CisrCWlmICgoczY0KShoYW5kc2hha2UtPmxhc3RfaW5pdGlhdGlvbl9jb25zdW1wdGlvbiAtCisrCSAgICAoaW5pdGlhdGlvbl9jb25zdW1wdGlvbiA9IGt0aW1lX2dldF9jb2Fyc2VfYm9vdHRpbWVfbnMoKSkpIDwgMCkKKysJCWhhbmRzaGFrZS0+bGFzdF9pbml0aWF0aW9uX2NvbnN1bXB0aW9uID0gaW5pdGlhdGlvbl9jb25zdW1wdGlvbjsKKysJaGFuZHNoYWtlLT5zdGF0ZSA9IEhBTkRTSEFLRV9DT05TVU1FRF9JTklUSUFUSU9OOworKwl1cF93cml0ZSgmaGFuZHNoYWtlLT5sb2NrKTsKKysJcmV0X3BlZXIgPSBwZWVyOworKworK291dDoKKysJbWVtemVyb19leHBsaWNpdChrZXksIE5PSVNFX1NZTU1FVFJJQ19LRVlfTEVOKTsKKysJbWVtemVyb19leHBsaWNpdChoYXNoLCBOT0lTRV9IQVNIX0xFTik7CisrCW1lbXplcm9fZXhwbGljaXQoY2hhaW5pbmdfa2V5LCBOT0lTRV9IQVNIX0xFTik7CisrCXVwX3JlYWQoJndnLT5zdGF0aWNfaWRlbnRpdHkubG9jayk7CisrCWlmICghcmV0X3BlZXIpCisrCQl3Z19wZWVyX3B1dChwZWVyKTsKKysJcmV0dXJuIHJldF9wZWVyOworK30KKysKKytib29sIHdnX25vaXNlX2hhbmRzaGFrZV9jcmVhdGVfcmVzcG9uc2Uoc3RydWN0IG1lc3NhZ2VfaGFuZHNoYWtlX3Jlc3BvbnNlICpkc3QsCisrCQkJCQlzdHJ1Y3Qgbm9pc2VfaGFuZHNoYWtlICpoYW5kc2hha2UpCisreworKwl1OCBrZXlbTk9JU0VfU1lNTUVUUklDX0tFWV9MRU5dOworKwlib29sIHJldCA9IGZhbHNlOworKworKwkvKiBXZSBuZWVkIHRvIHdhaXQgZm9yIGNybmcgX2JlZm9yZV8gdGFraW5nIGFueSBsb2Nrcywgc2luY2UKKysJICogY3VydmUyNTUxOV9nZW5lcmF0ZV9zZWNyZXQgdXNlcyBnZXRfcmFuZG9tX2J5dGVzX3dhaXQuCisrCSAqLworKwl3YWl0X2Zvcl9yYW5kb21fYnl0ZXMoKTsKKysKKysJZG93bl9yZWFkKCZoYW5kc2hha2UtPnN0YXRpY19pZGVudGl0eS0+bG9jayk7CisrCWRvd25fd3JpdGUoJmhhbmRzaGFrZS0+bG9jayk7CisrCisrCWlmIChoYW5kc2hha2UtPnN0YXRlICE9IEhBTkRTSEFLRV9DT05TVU1FRF9JTklUSUFUSU9OKQorKwkJZ290byBvdXQ7CisrCisrCWRzdC0+aGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUzMihNRVNTQUdFX0hBTkRTSEFLRV9SRVNQT05TRSk7CisrCWRzdC0+cmVjZWl2ZXJfaW5kZXggPSBoYW5kc2hha2UtPnJlbW90ZV9pbmRleDsKKysKKysJLyogZSAqLworKwljdXJ2ZTI1NTE5X2dlbmVyYXRlX3NlY3JldChoYW5kc2hha2UtPmVwaGVtZXJhbF9wcml2YXRlKTsKKysJaWYgKCFjdXJ2ZTI1NTE5X2dlbmVyYXRlX3B1YmxpYyhkc3QtPnVuZW5jcnlwdGVkX2VwaGVtZXJhbCwKKysJCQkJCWhhbmRzaGFrZS0+ZXBoZW1lcmFsX3ByaXZhdGUpKQorKwkJZ290byBvdXQ7CisrCW1lc3NhZ2VfZXBoZW1lcmFsKGRzdC0+dW5lbmNyeXB0ZWRfZXBoZW1lcmFsLAorKwkJCSAgZHN0LT51bmVuY3J5cHRlZF9lcGhlbWVyYWwsIGhhbmRzaGFrZS0+Y2hhaW5pbmdfa2V5LAorKwkJCSAgaGFuZHNoYWtlLT5oYXNoKTsKKysKKysJLyogZWUgKi8KKysJaWYgKCFtaXhfZGgoaGFuZHNoYWtlLT5jaGFpbmluZ19rZXksIE5VTEwsIGhhbmRzaGFrZS0+ZXBoZW1lcmFsX3ByaXZhdGUsCisrCQkgICAgaGFuZHNoYWtlLT5yZW1vdGVfZXBoZW1lcmFsKSkKKysJCWdvdG8gb3V0OworKworKwkvKiBzZSAqLworKwlpZiAoIW1peF9kaChoYW5kc2hha2UtPmNoYWluaW5nX2tleSwgTlVMTCwgaGFuZHNoYWtlLT5lcGhlbWVyYWxfcHJpdmF0ZSwKKysJCSAgICBoYW5kc2hha2UtPnJlbW90ZV9zdGF0aWMpKQorKwkJZ290byBvdXQ7CisrCisrCS8qIHBzayAqLworKwltaXhfcHNrKGhhbmRzaGFrZS0+Y2hhaW5pbmdfa2V5LCBoYW5kc2hha2UtPmhhc2gsIGtleSwKKysJCWhhbmRzaGFrZS0+cHJlc2hhcmVkX2tleSk7CisrCisrCS8qIHt9ICovCisrCW1lc3NhZ2VfZW5jcnlwdChkc3QtPmVuY3J5cHRlZF9ub3RoaW5nLCBOVUxMLCAwLCBrZXksIGhhbmRzaGFrZS0+aGFzaCk7CisrCisrCWRzdC0+c2VuZGVyX2luZGV4ID0gd2dfaW5kZXhfaGFzaHRhYmxlX2luc2VydCgKKysJCWhhbmRzaGFrZS0+ZW50cnkucGVlci0+ZGV2aWNlLT5pbmRleF9oYXNodGFibGUsCisrCQkmaGFuZHNoYWtlLT5lbnRyeSk7CisrCisrCWhhbmRzaGFrZS0+c3RhdGUgPSBIQU5EU0hBS0VfQ1JFQVRFRF9SRVNQT05TRTsKKysJcmV0ID0gdHJ1ZTsKKysKKytvdXQ6CisrCXVwX3dyaXRlKCZoYW5kc2hha2UtPmxvY2spOworKwl1cF9yZWFkKCZoYW5kc2hha2UtPnN0YXRpY19pZGVudGl0eS0+bG9jayk7CisrCW1lbXplcm9fZXhwbGljaXQoa2V5LCBOT0lTRV9TWU1NRVRSSUNfS0VZX0xFTik7CisrCXJldHVybiByZXQ7CisrfQorKworK3N0cnVjdCB3Z19wZWVyICoKKyt3Z19ub2lzZV9oYW5kc2hha2VfY29uc3VtZV9yZXNwb25zZShzdHJ1Y3QgbWVzc2FnZV9oYW5kc2hha2VfcmVzcG9uc2UgKnNyYywKKysJCQkJICAgIHN0cnVjdCB3Z19kZXZpY2UgKndnKQorK3sKKysJZW51bSBub2lzZV9oYW5kc2hha2Vfc3RhdGUgc3RhdGUgPSBIQU5EU0hBS0VfWkVST0VEOworKwlzdHJ1Y3Qgd2dfcGVlciAqcGVlciA9IE5VTEwsICpyZXRfcGVlciA9IE5VTEw7CisrCXN0cnVjdCBub2lzZV9oYW5kc2hha2UgKmhhbmRzaGFrZTsKKysJdTgga2V5W05PSVNFX1NZTU1FVFJJQ19LRVlfTEVOXTsKKysJdTggaGFzaFtOT0lTRV9IQVNIX0xFTl07CisrCXU4IGNoYWluaW5nX2tleVtOT0lTRV9IQVNIX0xFTl07CisrCXU4IGVbTk9JU0VfUFVCTElDX0tFWV9MRU5dOworKwl1OCBlcGhlbWVyYWxfcHJpdmF0ZVtOT0lTRV9QVUJMSUNfS0VZX0xFTl07CisrCXU4IHN0YXRpY19wcml2YXRlW05PSVNFX1BVQkxJQ19LRVlfTEVOXTsKKysKKysJZG93bl9yZWFkKCZ3Zy0+c3RhdGljX2lkZW50aXR5LmxvY2spOworKworKwlpZiAodW5saWtlbHkoIXdnLT5zdGF0aWNfaWRlbnRpdHkuaGFzX2lkZW50aXR5KSkKKysJCWdvdG8gb3V0OworKworKwloYW5kc2hha2UgPSAoc3RydWN0IG5vaXNlX2hhbmRzaGFrZSAqKXdnX2luZGV4X2hhc2h0YWJsZV9sb29rdXAoCisrCQl3Zy0+aW5kZXhfaGFzaHRhYmxlLCBJTkRFWF9IQVNIVEFCTEVfSEFORFNIQUtFLAorKwkJc3JjLT5yZWNlaXZlcl9pbmRleCwgJnBlZXIpOworKwlpZiAodW5saWtlbHkoIWhhbmRzaGFrZSkpCisrCQlnb3RvIG91dDsKKysKKysJZG93bl9yZWFkKCZoYW5kc2hha2UtPmxvY2spOworKwlzdGF0ZSA9IGhhbmRzaGFrZS0+c3RhdGU7CisrCW1lbWNweShoYXNoLCBoYW5kc2hha2UtPmhhc2gsIE5PSVNFX0hBU0hfTEVOKTsKKysJbWVtY3B5KGNoYWluaW5nX2tleSwgaGFuZHNoYWtlLT5jaGFpbmluZ19rZXksIE5PSVNFX0hBU0hfTEVOKTsKKysJbWVtY3B5KGVwaGVtZXJhbF9wcml2YXRlLCBoYW5kc2hha2UtPmVwaGVtZXJhbF9wcml2YXRlLAorKwkgICAgICAgTk9JU0VfUFVCTElDX0tFWV9MRU4pOworKwl1cF9yZWFkKCZoYW5kc2hha2UtPmxvY2spOworKworKwlpZiAoc3RhdGUgIT0gSEFORFNIQUtFX0NSRUFURURfSU5JVElBVElPTikKKysJCWdvdG8gZmFpbDsKKysKKysJLyogZSAqLworKwltZXNzYWdlX2VwaGVtZXJhbChlLCBzcmMtPnVuZW5jcnlwdGVkX2VwaGVtZXJhbCwgY2hhaW5pbmdfa2V5LCBoYXNoKTsKKysKKysJLyogZWUgKi8KKysJaWYgKCFtaXhfZGgoY2hhaW5pbmdfa2V5LCBOVUxMLCBlcGhlbWVyYWxfcHJpdmF0ZSwgZSkpCisrCQlnb3RvIGZhaWw7CisrCisrCS8qIHNlICovCisrCWlmICghbWl4X2RoKGNoYWluaW5nX2tleSwgTlVMTCwgd2ctPnN0YXRpY19pZGVudGl0eS5zdGF0aWNfcHJpdmF0ZSwgZSkpCisrCQlnb3RvIGZhaWw7CisrCisrCS8qIHBzayAqLworKwltaXhfcHNrKGNoYWluaW5nX2tleSwgaGFzaCwga2V5LCBoYW5kc2hha2UtPnByZXNoYXJlZF9rZXkpOworKworKwkvKiB7fSAqLworKwlpZiAoIW1lc3NhZ2VfZGVjcnlwdChOVUxMLCBzcmMtPmVuY3J5cHRlZF9ub3RoaW5nLAorKwkJCSAgICAgc2l6ZW9mKHNyYy0+ZW5jcnlwdGVkX25vdGhpbmcpLCBrZXksIGhhc2gpKQorKwkJZ290byBmYWlsOworKworKwkvKiBTdWNjZXNzISBDb3B5IGV2ZXJ5dGhpbmcgdG8gcGVlciAqLworKwlkb3duX3dyaXRlKCZoYW5kc2hha2UtPmxvY2spOworKwkvKiBJdCdzIGltcG9ydGFudCB0byBjaGVjayB0aGF0IHRoZSBzdGF0ZSBpcyBzdGlsbCB0aGUgc2FtZSwgd2hpbGUgd2UKKysJICogaGF2ZSBhbiBleGNsdXNpdmUgbG9jay4KKysJICovCisrCWlmIChoYW5kc2hha2UtPnN0YXRlICE9IHN0YXRlKSB7CisrCQl1cF93cml0ZSgmaGFuZHNoYWtlLT5sb2NrKTsKKysJCWdvdG8gZmFpbDsKKysJfQorKwltZW1jcHkoaGFuZHNoYWtlLT5yZW1vdGVfZXBoZW1lcmFsLCBlLCBOT0lTRV9QVUJMSUNfS0VZX0xFTik7CisrCW1lbWNweShoYW5kc2hha2UtPmhhc2gsIGhhc2gsIE5PSVNFX0hBU0hfTEVOKTsKKysJbWVtY3B5KGhhbmRzaGFrZS0+Y2hhaW5pbmdfa2V5LCBjaGFpbmluZ19rZXksIE5PSVNFX0hBU0hfTEVOKTsKKysJaGFuZHNoYWtlLT5yZW1vdGVfaW5kZXggPSBzcmMtPnNlbmRlcl9pbmRleDsKKysJaGFuZHNoYWtlLT5zdGF0ZSA9IEhBTkRTSEFLRV9DT05TVU1FRF9SRVNQT05TRTsKKysJdXBfd3JpdGUoJmhhbmRzaGFrZS0+bG9jayk7CisrCXJldF9wZWVyID0gcGVlcjsKKysJZ290byBvdXQ7CisrCisrZmFpbDoKKysJd2dfcGVlcl9wdXQocGVlcik7Cisrb3V0OgorKwltZW16ZXJvX2V4cGxpY2l0KGtleSwgTk9JU0VfU1lNTUVUUklDX0tFWV9MRU4pOworKwltZW16ZXJvX2V4cGxpY2l0KGhhc2gsIE5PSVNFX0hBU0hfTEVOKTsKKysJbWVtemVyb19leHBsaWNpdChjaGFpbmluZ19rZXksIE5PSVNFX0hBU0hfTEVOKTsKKysJbWVtemVyb19leHBsaWNpdChlcGhlbWVyYWxfcHJpdmF0ZSwgTk9JU0VfUFVCTElDX0tFWV9MRU4pOworKwltZW16ZXJvX2V4cGxpY2l0KHN0YXRpY19wcml2YXRlLCBOT0lTRV9QVUJMSUNfS0VZX0xFTik7CisrCXVwX3JlYWQoJndnLT5zdGF0aWNfaWRlbnRpdHkubG9jayk7CisrCXJldHVybiByZXRfcGVlcjsKKyt9CisrCisrYm9vbCB3Z19ub2lzZV9oYW5kc2hha2VfYmVnaW5fc2Vzc2lvbihzdHJ1Y3Qgbm9pc2VfaGFuZHNoYWtlICpoYW5kc2hha2UsCisrCQkJCSAgICAgIHN0cnVjdCBub2lzZV9rZXlwYWlycyAqa2V5cGFpcnMpCisreworKwlzdHJ1Y3Qgbm9pc2Vfa2V5cGFpciAqbmV3X2tleXBhaXI7CisrCWJvb2wgcmV0ID0gZmFsc2U7CisrCisrCWRvd25fd3JpdGUoJmhhbmRzaGFrZS0+bG9jayk7CisrCWlmIChoYW5kc2hha2UtPnN0YXRlICE9IEhBTkRTSEFLRV9DUkVBVEVEX1JFU1BPTlNFICYmCisrCSAgICBoYW5kc2hha2UtPnN0YXRlICE9IEhBTkRTSEFLRV9DT05TVU1FRF9SRVNQT05TRSkKKysJCWdvdG8gb3V0OworKworKwluZXdfa2V5cGFpciA9IGtleXBhaXJfY3JlYXRlKGhhbmRzaGFrZS0+ZW50cnkucGVlcik7CisrCWlmICghbmV3X2tleXBhaXIpCisrCQlnb3RvIG91dDsKKysJbmV3X2tleXBhaXItPmlfYW1fdGhlX2luaXRpYXRvciA9IGhhbmRzaGFrZS0+c3RhdGUgPT0KKysJCQkJCSAgSEFORFNIQUtFX0NPTlNVTUVEX1JFU1BPTlNFOworKwluZXdfa2V5cGFpci0+cmVtb3RlX2luZGV4ID0gaGFuZHNoYWtlLT5yZW1vdGVfaW5kZXg7CisrCisrCWlmIChuZXdfa2V5cGFpci0+aV9hbV90aGVfaW5pdGlhdG9yKQorKwkJZGVyaXZlX2tleXMoJm5ld19rZXlwYWlyLT5zZW5kaW5nLCAmbmV3X2tleXBhaXItPnJlY2VpdmluZywKKysJCQkgICAgaGFuZHNoYWtlLT5jaGFpbmluZ19rZXkpOworKwllbHNlCisrCQlkZXJpdmVfa2V5cygmbmV3X2tleXBhaXItPnJlY2VpdmluZywgJm5ld19rZXlwYWlyLT5zZW5kaW5nLAorKwkJCSAgICBoYW5kc2hha2UtPmNoYWluaW5nX2tleSk7CisrCisrCWhhbmRzaGFrZV96ZXJvKGhhbmRzaGFrZSk7CisrCXJjdV9yZWFkX2xvY2tfYmgoKTsKKysJaWYgKGxpa2VseSghUkVBRF9PTkNFKGNvbnRhaW5lcl9vZihoYW5kc2hha2UsIHN0cnVjdCB3Z19wZWVyLAorKwkJCQkJICAgaGFuZHNoYWtlKS0+aXNfZGVhZCkpKSB7CisrCQlhZGRfbmV3X2tleXBhaXIoa2V5cGFpcnMsIG5ld19rZXlwYWlyKTsKKysJCW5ldF9kYmdfcmF0ZWxpbWl0ZWQoIiVzOiBLZXlwYWlyICVsbHUgY3JlYXRlZCBmb3IgcGVlciAlbGx1XG4iLAorKwkJCQkgICAgaGFuZHNoYWtlLT5lbnRyeS5wZWVyLT5kZXZpY2UtPmRldi0+bmFtZSwKKysJCQkJICAgIG5ld19rZXlwYWlyLT5pbnRlcm5hbF9pZCwKKysJCQkJICAgIGhhbmRzaGFrZS0+ZW50cnkucGVlci0+aW50ZXJuYWxfaWQpOworKwkJcmV0ID0gd2dfaW5kZXhfaGFzaHRhYmxlX3JlcGxhY2UoCisrCQkJaGFuZHNoYWtlLT5lbnRyeS5wZWVyLT5kZXZpY2UtPmluZGV4X2hhc2h0YWJsZSwKKysJCQkmaGFuZHNoYWtlLT5lbnRyeSwgJm5ld19rZXlwYWlyLT5lbnRyeSk7CisrCX0gZWxzZSB7CisrCQlremZyZWUobmV3X2tleXBhaXIpOworKwl9CisrCXJjdV9yZWFkX3VubG9ja19iaCgpOworKworK291dDoKKysJdXBfd3JpdGUoJmhhbmRzaGFrZS0+bG9jayk7CisrCXJldHVybiByZXQ7CisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL25vaXNlLmgKK0BAIC0wLDAgKzEsMTM3IEBACisrLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKysvKgorKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKysgKi8KKysjaWZuZGVmIF9XR19OT0lTRV9ICisrI2RlZmluZSBfV0dfTk9JU0VfSAorKworKyNpbmNsdWRlICJtZXNzYWdlcy5oIgorKyNpbmNsdWRlICJwZWVybG9va3VwLmgiCisrCisrI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisrI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisrI2luY2x1ZGUgPGxpbnV4L2F0b21pYy5oPgorKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgorKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorKyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisrCisrdW5pb24gbm9pc2VfY291bnRlciB7CisrCXN0cnVjdCB7CisrCQl1NjQgY291bnRlcjsKKysJCXVuc2lnbmVkIGxvbmcgYmFja3RyYWNrW0NPVU5URVJfQklUU19UT1RBTCAvIEJJVFNfUEVSX0xPTkddOworKwkJc3BpbmxvY2tfdCBsb2NrOworKwl9IHJlY2VpdmU7CisrCWF0b21pYzY0X3QgY291bnRlcjsKKyt9OworKworK3N0cnVjdCBub2lzZV9zeW1tZXRyaWNfa2V5IHsKKysJdTgga2V5W05PSVNFX1NZTU1FVFJJQ19LRVlfTEVOXTsKKysJdW5pb24gbm9pc2VfY291bnRlciBjb3VudGVyOworKwl1NjQgYmlydGhkYXRlOworKwlib29sIGlzX3ZhbGlkOworK307CisrCisrc3RydWN0IG5vaXNlX2tleXBhaXIgeworKwlzdHJ1Y3QgaW5kZXhfaGFzaHRhYmxlX2VudHJ5IGVudHJ5OworKwlzdHJ1Y3Qgbm9pc2Vfc3ltbWV0cmljX2tleSBzZW5kaW5nOworKwlzdHJ1Y3Qgbm9pc2Vfc3ltbWV0cmljX2tleSByZWNlaXZpbmc7CisrCV9fbGUzMiByZW1vdGVfaW5kZXg7CisrCWJvb2wgaV9hbV90aGVfaW5pdGlhdG9yOworKwlzdHJ1Y3Qga3JlZiByZWZjb3VudDsKKysJc3RydWN0IHJjdV9oZWFkIHJjdTsKKysJdTY0IGludGVybmFsX2lkOworK307CisrCisrc3RydWN0IG5vaXNlX2tleXBhaXJzIHsKKysJc3RydWN0IG5vaXNlX2tleXBhaXIgX19yY3UgKmN1cnJlbnRfa2V5cGFpcjsKKysJc3RydWN0IG5vaXNlX2tleXBhaXIgX19yY3UgKnByZXZpb3VzX2tleXBhaXI7CisrCXN0cnVjdCBub2lzZV9rZXlwYWlyIF9fcmN1ICpuZXh0X2tleXBhaXI7CisrCXNwaW5sb2NrX3Qga2V5cGFpcl91cGRhdGVfbG9jazsKKyt9OworKworK3N0cnVjdCBub2lzZV9zdGF0aWNfaWRlbnRpdHkgeworKwl1OCBzdGF0aWNfcHVibGljW05PSVNFX1BVQkxJQ19LRVlfTEVOXTsKKysJdTggc3RhdGljX3ByaXZhdGVbTk9JU0VfUFVCTElDX0tFWV9MRU5dOworKwlzdHJ1Y3Qgcndfc2VtYXBob3JlIGxvY2s7CisrCWJvb2wgaGFzX2lkZW50aXR5OworK307CisrCisrZW51bSBub2lzZV9oYW5kc2hha2Vfc3RhdGUgeworKwlIQU5EU0hBS0VfWkVST0VELAorKwlIQU5EU0hBS0VfQ1JFQVRFRF9JTklUSUFUSU9OLAorKwlIQU5EU0hBS0VfQ09OU1VNRURfSU5JVElBVElPTiwKKysJSEFORFNIQUtFX0NSRUFURURfUkVTUE9OU0UsCisrCUhBTkRTSEFLRV9DT05TVU1FRF9SRVNQT05TRQorK307CisrCisrc3RydWN0IG5vaXNlX2hhbmRzaGFrZSB7CisrCXN0cnVjdCBpbmRleF9oYXNodGFibGVfZW50cnkgZW50cnk7CisrCisrCWVudW0gbm9pc2VfaGFuZHNoYWtlX3N0YXRlIHN0YXRlOworKwl1NjQgbGFzdF9pbml0aWF0aW9uX2NvbnN1bXB0aW9uOworKworKwlzdHJ1Y3Qgbm9pc2Vfc3RhdGljX2lkZW50aXR5ICpzdGF0aWNfaWRlbnRpdHk7CisrCisrCXU4IGVwaGVtZXJhbF9wcml2YXRlW05PSVNFX1BVQkxJQ19LRVlfTEVOXTsKKysJdTggcmVtb3RlX3N0YXRpY1tOT0lTRV9QVUJMSUNfS0VZX0xFTl07CisrCXU4IHJlbW90ZV9lcGhlbWVyYWxbTk9JU0VfUFVCTElDX0tFWV9MRU5dOworKwl1OCBwcmVjb21wdXRlZF9zdGF0aWNfc3RhdGljW05PSVNFX1BVQkxJQ19LRVlfTEVOXTsKKysKKysJdTggcHJlc2hhcmVkX2tleVtOT0lTRV9TWU1NRVRSSUNfS0VZX0xFTl07CisrCisrCXU4IGhhc2hbTk9JU0VfSEFTSF9MRU5dOworKwl1OCBjaGFpbmluZ19rZXlbTk9JU0VfSEFTSF9MRU5dOworKworKwl1OCBsYXRlc3RfdGltZXN0YW1wW05PSVNFX1RJTUVTVEFNUF9MRU5dOworKwlfX2xlMzIgcmVtb3RlX2luZGV4OworKworKwkvKiBQcm90ZWN0cyBhbGwgbWVtYmVycyBleGNlcHQgdGhlIGltbXV0YWJsZSAoYWZ0ZXIgbm9pc2VfaGFuZHNoYWtlXworKwkgKiBpbml0KTogcmVtb3RlX3N0YXRpYywgcHJlY29tcHV0ZWRfc3RhdGljX3N0YXRpYywgc3RhdGljX2lkZW50aXR5LgorKwkgKi8KKysJc3RydWN0IHJ3X3NlbWFwaG9yZSBsb2NrOworK307CisrCisrc3RydWN0IHdnX2RldmljZTsKKysKKyt2b2lkIHdnX25vaXNlX2luaXQodm9pZCk7CisrYm9vbCB3Z19ub2lzZV9oYW5kc2hha2VfaW5pdChzdHJ1Y3Qgbm9pc2VfaGFuZHNoYWtlICpoYW5kc2hha2UsCisrCQkJICAgc3RydWN0IG5vaXNlX3N0YXRpY19pZGVudGl0eSAqc3RhdGljX2lkZW50aXR5LAorKwkJCSAgIGNvbnN0IHU4IHBlZXJfcHVibGljX2tleVtOT0lTRV9QVUJMSUNfS0VZX0xFTl0sCisrCQkJICAgY29uc3QgdTggcGVlcl9wcmVzaGFyZWRfa2V5W05PSVNFX1NZTU1FVFJJQ19LRVlfTEVOXSwKKysJCQkgICBzdHJ1Y3Qgd2dfcGVlciAqcGVlcik7Cisrdm9pZCB3Z19ub2lzZV9oYW5kc2hha2VfY2xlYXIoc3RydWN0IG5vaXNlX2hhbmRzaGFrZSAqaGFuZHNoYWtlKTsKKytzdGF0aWMgaW5saW5lIHZvaWQgd2dfbm9pc2VfcmVzZXRfbGFzdF9zZW50X2hhbmRzaGFrZShhdG9taWM2NF90ICpoYW5kc2hha2VfbnMpCisreworKwlhdG9taWM2NF9zZXQoaGFuZHNoYWtlX25zLCBrdGltZV9nZXRfY29hcnNlX2Jvb3R0aW1lX25zKCkgLQorKwkJCQkgICAgICAgKHU2NCkoUkVLRVlfVElNRU9VVCArIDEpICogTlNFQ19QRVJfU0VDKTsKKyt9CisrCisrdm9pZCB3Z19ub2lzZV9rZXlwYWlyX3B1dChzdHJ1Y3Qgbm9pc2Vfa2V5cGFpciAqa2V5cGFpciwgYm9vbCB1bnJlZmVyZW5jZV9ub3cpOworK3N0cnVjdCBub2lzZV9rZXlwYWlyICp3Z19ub2lzZV9rZXlwYWlyX2dldChzdHJ1Y3Qgbm9pc2Vfa2V5cGFpciAqa2V5cGFpcik7Cisrdm9pZCB3Z19ub2lzZV9rZXlwYWlyc19jbGVhcihzdHJ1Y3Qgbm9pc2Vfa2V5cGFpcnMgKmtleXBhaXJzKTsKKytib29sIHdnX25vaXNlX3JlY2VpdmVkX3dpdGhfa2V5cGFpcihzdHJ1Y3Qgbm9pc2Vfa2V5cGFpcnMgKmtleXBhaXJzLAorKwkJCQkgICAgc3RydWN0IG5vaXNlX2tleXBhaXIgKnJlY2VpdmVkX2tleXBhaXIpOworK3ZvaWQgd2dfbm9pc2VfZXhwaXJlX2N1cnJlbnRfcGVlcl9rZXlwYWlycyhzdHJ1Y3Qgd2dfcGVlciAqcGVlcik7CisrCisrdm9pZCB3Z19ub2lzZV9zZXRfc3RhdGljX2lkZW50aXR5X3ByaXZhdGVfa2V5KAorKwlzdHJ1Y3Qgbm9pc2Vfc3RhdGljX2lkZW50aXR5ICpzdGF0aWNfaWRlbnRpdHksCisrCWNvbnN0IHU4IHByaXZhdGVfa2V5W05PSVNFX1BVQkxJQ19LRVlfTEVOXSk7CisrYm9vbCB3Z19ub2lzZV9wcmVjb21wdXRlX3N0YXRpY19zdGF0aWMoc3RydWN0IHdnX3BlZXIgKnBlZXIpOworKworK2Jvb2wKKyt3Z19ub2lzZV9oYW5kc2hha2VfY3JlYXRlX2luaXRpYXRpb24oc3RydWN0IG1lc3NhZ2VfaGFuZHNoYWtlX2luaXRpYXRpb24gKmRzdCwKKysJCQkJICAgICBzdHJ1Y3Qgbm9pc2VfaGFuZHNoYWtlICpoYW5kc2hha2UpOworK3N0cnVjdCB3Z19wZWVyICoKKyt3Z19ub2lzZV9oYW5kc2hha2VfY29uc3VtZV9pbml0aWF0aW9uKHN0cnVjdCBtZXNzYWdlX2hhbmRzaGFrZV9pbml0aWF0aW9uICpzcmMsCisrCQkJCSAgICAgIHN0cnVjdCB3Z19kZXZpY2UgKndnKTsKKysKKytib29sIHdnX25vaXNlX2hhbmRzaGFrZV9jcmVhdGVfcmVzcG9uc2Uoc3RydWN0IG1lc3NhZ2VfaGFuZHNoYWtlX3Jlc3BvbnNlICpkc3QsCisrCQkJCQlzdHJ1Y3Qgbm9pc2VfaGFuZHNoYWtlICpoYW5kc2hha2UpOworK3N0cnVjdCB3Z19wZWVyICoKKyt3Z19ub2lzZV9oYW5kc2hha2VfY29uc3VtZV9yZXNwb25zZShzdHJ1Y3QgbWVzc2FnZV9oYW5kc2hha2VfcmVzcG9uc2UgKnNyYywKKysJCQkJICAgIHN0cnVjdCB3Z19kZXZpY2UgKndnKTsKKysKKytib29sIHdnX25vaXNlX2hhbmRzaGFrZV9iZWdpbl9zZXNzaW9uKHN0cnVjdCBub2lzZV9oYW5kc2hha2UgKmhhbmRzaGFrZSwKKysJCQkJICAgICAgc3RydWN0IG5vaXNlX2tleXBhaXJzICprZXlwYWlycyk7CisrCisrI2VuZGlmIC8qIF9XR19OT0lTRV9IICovCistLS0gL2Rldi9udWxsCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jCitAQCAtMCwwICsxLDI0MCBAQAorKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisrLyoKKysgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisrICovCisrCisrI2luY2x1ZGUgInBlZXIuaCIKKysjaW5jbHVkZSAiZGV2aWNlLmgiCisrI2luY2x1ZGUgInF1ZXVlaW5nLmgiCisrI2luY2x1ZGUgInRpbWVycy5oIgorKyNpbmNsdWRlICJwZWVybG9va3VwLmgiCisrI2luY2x1ZGUgIm5vaXNlLmgiCisrCisrI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KKysjaW5jbHVkZSA8bGludXgvbG9ja2RlcC5oPgorKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgorKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisrCisrc3RhdGljIGF0b21pYzY0X3QgcGVlcl9jb3VudGVyID0gQVRPTUlDNjRfSU5JVCgwKTsKKysKKytzdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnX2RldmljZSAqd2csCisrCQkJICAgICAgIGNvbnN0IHU4IHB1YmxpY19rZXlbTk9JU0VfUFVCTElDX0tFWV9MRU5dLAorKwkJCSAgICAgICBjb25zdCB1OCBwcmVzaGFyZWRfa2V5W05PSVNFX1NZTU1FVFJJQ19LRVlfTEVOXSkKKyt7CisrCXN0cnVjdCB3Z19wZWVyICpwZWVyOworKwlpbnQgcmV0ID0gLUVOT01FTTsKKysKKysJbG9ja2RlcF9hc3NlcnRfaGVsZCgmd2ctPmRldmljZV91cGRhdGVfbG9jayk7CisrCisrCWlmICh3Zy0+bnVtX3BlZXJzID49IE1BWF9QRUVSU19QRVJfREVWSUNFKQorKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKysKKysJcGVlciA9IGt6YWxsb2Moc2l6ZW9mKCpwZWVyKSwgR0ZQX0tFUk5FTCk7CisrCWlmICh1bmxpa2VseSghcGVlcikpCisrCQlyZXR1cm4gRVJSX1BUUihyZXQpOworKwlwZWVyLT5kZXZpY2UgPSB3ZzsKKysKKysJaWYgKCF3Z19ub2lzZV9oYW5kc2hha2VfaW5pdCgmcGVlci0+aGFuZHNoYWtlLCAmd2ctPnN0YXRpY19pZGVudGl0eSwKKysJCQkJICAgICBwdWJsaWNfa2V5LCBwcmVzaGFyZWRfa2V5LCBwZWVyKSkgeworKwkJcmV0ID0gLUVLRVlSRUpFQ1RFRDsKKysJCWdvdG8gZXJyXzE7CisrCX0KKysJaWYgKGRzdF9jYWNoZV9pbml0KCZwZWVyLT5lbmRwb2ludF9jYWNoZSwgR0ZQX0tFUk5FTCkpCisrCQlnb3RvIGVycl8xOworKwlpZiAod2dfcGFja2V0X3F1ZXVlX2luaXQoJnBlZXItPnR4X3F1ZXVlLCB3Z19wYWNrZXRfdHhfd29ya2VyLCBmYWxzZSwKKysJCQkJIE1BWF9RVUVVRURfUEFDS0VUUykpCisrCQlnb3RvIGVycl8yOworKwlpZiAod2dfcGFja2V0X3F1ZXVlX2luaXQoJnBlZXItPnJ4X3F1ZXVlLCBOVUxMLCBmYWxzZSwKKysJCQkJIE1BWF9RVUVVRURfUEFDS0VUUykpCisrCQlnb3RvIGVycl8zOworKworKwlwZWVyLT5pbnRlcm5hbF9pZCA9IGF0b21pYzY0X2luY19yZXR1cm4oJnBlZXJfY291bnRlcik7CisrCXBlZXItPnNlcmlhbF93b3JrX2NwdSA9IG5yX2NwdW1hc2tfYml0czsKKysJd2dfY29va2llX2luaXQoJnBlZXItPmxhdGVzdF9jb29raWUpOworKwl3Z190aW1lcnNfaW5pdChwZWVyKTsKKysJd2dfY29va2llX2NoZWNrZXJfcHJlY29tcHV0ZV9wZWVyX2tleXMocGVlcik7CisrCXNwaW5fbG9ja19pbml0KCZwZWVyLT5rZXlwYWlycy5rZXlwYWlyX3VwZGF0ZV9sb2NrKTsKKysJSU5JVF9XT1JLKCZwZWVyLT50cmFuc21pdF9oYW5kc2hha2Vfd29yaywKKysJCSAgd2dfcGFja2V0X2hhbmRzaGFrZV9zZW5kX3dvcmtlcik7CisrCXJ3bG9ja19pbml0KCZwZWVyLT5lbmRwb2ludF9sb2NrKTsKKysJa3JlZl9pbml0KCZwZWVyLT5yZWZjb3VudCk7CisrCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnBlZXItPnN0YWdlZF9wYWNrZXRfcXVldWUpOworKwl3Z19ub2lzZV9yZXNldF9sYXN0X3NlbnRfaGFuZHNoYWtlKCZwZWVyLT5sYXN0X3NlbnRfaGFuZHNoYWtlKTsKKysJc2V0X2JpdChOQVBJX1NUQVRFX05PX0JVU1lfUE9MTCwgJnBlZXItPm5hcGkuc3RhdGUpOworKwluZXRpZl9uYXBpX2FkZCh3Zy0+ZGV2LCAmcGVlci0+bmFwaSwgd2dfcGFja2V0X3J4X3BvbGwsCisrCQkgICAgICAgTkFQSV9QT0xMX1dFSUdIVCk7CisrCW5hcGlfZW5hYmxlKCZwZWVyLT5uYXBpKTsKKysJbGlzdF9hZGRfdGFpbCgmcGVlci0+cGVlcl9saXN0LCAmd2ctPnBlZXJfbGlzdCk7CisrCUlOSVRfTElTVF9IRUFEKCZwZWVyLT5hbGxvd2VkaXBzX2xpc3QpOworKwl3Z19wdWJrZXlfaGFzaHRhYmxlX2FkZCh3Zy0+cGVlcl9oYXNodGFibGUsIHBlZXIpOworKwkrK3dnLT5udW1fcGVlcnM7CisrCXByX2RlYnVnKCIlczogUGVlciAlbGx1IGNyZWF0ZWRcbiIsIHdnLT5kZXYtPm5hbWUsIHBlZXItPmludGVybmFsX2lkKTsKKysJcmV0dXJuIHBlZXI7CisrCisrZXJyXzM6CisrCXdnX3BhY2tldF9xdWV1ZV9mcmVlKCZwZWVyLT50eF9xdWV1ZSwgZmFsc2UpOworK2Vycl8yOgorKwlkc3RfY2FjaGVfZGVzdHJveSgmcGVlci0+ZW5kcG9pbnRfY2FjaGUpOworK2Vycl8xOgorKwlrZnJlZShwZWVyKTsKKysJcmV0dXJuIEVSUl9QVFIocmV0KTsKKyt9CisrCisrc3RydWN0IHdnX3BlZXIgKndnX3BlZXJfZ2V0X21heWJlX3plcm8oc3RydWN0IHdnX3BlZXIgKnBlZXIpCisreworKwlSQ1VfTE9DS0RFUF9XQVJOKCFyY3VfcmVhZF9sb2NrX2JoX2hlbGQoKSwKKysJCQkgIlRha2luZyBwZWVyIHJlZmVyZW5jZSB3aXRob3V0IGhvbGRpbmcgdGhlIFJDVSByZWFkIGxvY2siKTsKKysJaWYgKHVubGlrZWx5KCFwZWVyIHx8ICFrcmVmX2dldF91bmxlc3NfemVybygmcGVlci0+cmVmY291bnQpKSkKKysJCXJldHVybiBOVUxMOworKwlyZXR1cm4gcGVlcjsKKyt9CisrCisrc3RhdGljIHZvaWQgcGVlcl9tYWtlX2RlYWQoc3RydWN0IHdnX3BlZXIgKnBlZXIpCisreworKwkvKiBSZW1vdmUgZnJvbSBjb25maWd1cmF0aW9uLXRpbWUgbG9va3VwIHN0cnVjdHVyZXMuICovCisrCWxpc3RfZGVsX2luaXQoJnBlZXItPnBlZXJfbGlzdCk7CisrCXdnX2FsbG93ZWRpcHNfcmVtb3ZlX2J5X3BlZXIoJnBlZXItPmRldmljZS0+cGVlcl9hbGxvd2VkaXBzLCBwZWVyLAorKwkJCQkgICAgICZwZWVyLT5kZXZpY2UtPmRldmljZV91cGRhdGVfbG9jayk7CisrCXdnX3B1YmtleV9oYXNodGFibGVfcmVtb3ZlKHBlZXItPmRldmljZS0+cGVlcl9oYXNodGFibGUsIHBlZXIpOworKworKwkvKiBNYXJrIGFzIGRlYWQsIHNvIHRoYXQgd2UgZG9uJ3QgYWxsb3cganVtcGluZyBjb250ZXh0cyBhZnRlci4gKi8KKysJV1JJVEVfT05DRShwZWVyLT5pc19kZWFkLCB0cnVlKTsKKysKKysJLyogVGhlIGNhbGxlciBtdXN0IG5vdyBzeW5jaHJvbml6ZV9yY3UoKSBmb3IgdGhpcyB0byB0YWtlIGVmZmVjdC4gKi8KKyt9CisrCisrc3RhdGljIHZvaWQgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZChzdHJ1Y3Qgd2dfcGVlciAqcGVlcikKKyt7CisrCVdBUk5fT04oIXBlZXItPmlzX2RlYWQpOworKworKwkvKiBObyBtb3JlIGtleXBhaXJzIGNhbiBiZSBjcmVhdGVkIGZvciB0aGlzIHBlZXIsIHNpbmNlIGlzX2RlYWQgcHJvdGVjdHMKKysJICogYWRkX25ld19rZXlwYWlyLCBzbyB3ZSBjYW4gbm93IGRlc3Ryb3kgZXhpc3Rpbmcgb25lcy4KKysJICovCisrCXdnX25vaXNlX2tleXBhaXJzX2NsZWFyKCZwZWVyLT5rZXlwYWlycyk7CisrCisrCS8qIERlc3Ryb3kgYWxsIG9uZ29pbmcgdGltZXJzIHRoYXQgd2VyZSBpbi1mbGlnaHQgYXQgdGhlIGJlZ2lubmluZyBvZgorKwkgKiB0aGlzIGZ1bmN0aW9uLgorKwkgKi8KKysJd2dfdGltZXJzX3N0b3AocGVlcik7CisrCisrCS8qIFRoZSB0cmFuc2l0aW9uIGJldHdlZW4gcGFja2V0IGVuY3J5cHRpb24vZGVjcnlwdGlvbiBxdWV1ZXMgaXNuJ3QKKysJICogZ3VhcmRlZCBieSBpc19kZWFkLCBidXQgZWFjaCByZWZlcmVuY2UncyBsaWZlIGlzIHN0cmljdGx5IGJvdW5kZWQgYnkKKysJICogdHdvIGdlbmVyYXRpb25zOiBvbmNlIGZvciBwYXJhbGxlbCBjcnlwdG8gYW5kIG9uY2UgZm9yIHNlcmlhbAorKwkgKiBpbmdlc3Rpb24sIHNvIHdlIGNhbiBzaW1wbHkgZmx1c2ggdHdpY2UsIGFuZCBiZSBzdXJlIHRoYXQgd2Ugbm8KKysJICogbG9uZ2VyIGhhdmUgcmVmZXJlbmNlcyBpbnNpZGUgdGhlc2UgcXVldWVzLgorKwkgKi8KKysKKysJLyogYSkgRm9yIGVuY3J5cHQvZGVjcnlwdC4gKi8KKysJZmx1c2hfd29ya3F1ZXVlKHBlZXItPmRldmljZS0+cGFja2V0X2NyeXB0X3dxKTsKKysJLyogYi4xKSBGb3Igc2VuZCAoYnV0IG5vdCByZWNlaXZlLCBzaW5jZSB0aGF0J3MgbmFwaSkuICovCisrCWZsdXNoX3dvcmtxdWV1ZShwZWVyLT5kZXZpY2UtPnBhY2tldF9jcnlwdF93cSk7CisrCS8qIGIuMi4xKSBGb3IgcmVjZWl2ZSAoYnV0IG5vdCBzZW5kLCBzaW5jZSB0aGF0J3Mgd3EpLiAqLworKwluYXBpX2Rpc2FibGUoJnBlZXItPm5hcGkpOworKwkvKiBiLjIuMSkgSXQncyBub3cgc2FmZSB0byByZW1vdmUgdGhlIG5hcGkgc3RydWN0LCB3aGljaCBtdXN0IGJlIGRvbmUKKysJICogaGVyZSBmcm9tIHByb2Nlc3MgY29udGV4dC4KKysJICovCisrCW5ldGlmX25hcGlfZGVsKCZwZWVyLT5uYXBpKTsKKysKKysJLyogRW5zdXJlIGFueSB3b3Jrc3RydWN0cyB3ZSBvd24gKGxpa2UgdHJhbnNtaXRfaGFuZHNoYWtlX3dvcmsgb3IKKysJICogY2xlYXJfcGVlcl93b3JrKSBubyBsb25nZXIgYXJlIGluIHVzZS4KKysJICovCisrCWZsdXNoX3dvcmtxdWV1ZShwZWVyLT5kZXZpY2UtPmhhbmRzaGFrZV9zZW5kX3dxKTsKKysKKysJLyogQWZ0ZXIgdGhlIGFib3ZlIGZsdXNoZXMsIGEgcGVlciBtaWdodCBzdGlsbCBiZSBhY3RpdmUgaW4gYSBmZXcKKysJICogZGlmZmVyZW50IGNvbnRleHRzOiAxKSBmcm9tIHhtaXQoKSwgYmVmb3JlIGhpdHRpbmcgaXNfZGVhZCBhbmQKKysJICogcmV0dXJuaW5nLCAyKSBmcm9tIHdnX3BhY2tldF9jb25zdW1lX2RhdGEoKSwgYmVmb3JlIGhpdHRpbmcgaXNfZGVhZAorKwkgKiBhbmQgcmV0dXJuaW5nLCAzKSBmcm9tIHdnX3JlY2VpdmVfaGFuZHNoYWtlX3BhY2tldCgpIGFmdGVyIGEgcG9pbnQKKysJICogd2hlcmUgaXQgaGFzIHByb2Nlc3NlZCBhbiBpbmNvbWluZyBoYW5kc2hha2UgcGFja2V0LCBidXQgd2hlcmUKKysJICogYWxsIGNhbGxzIHRvIHBhc3MgaXQgb2ZmIHRvIHRpbWVycyBmYWlscyBiZWNhdXNlIG9mIGlzX2RlYWQuIFdlIHdvbid0CisrCSAqIGhhdmUgbmV3IHJlZmVyZW5jZXMgaW4gKDEpIGV2ZW50dWFsbHksIGJlY2F1c2Ugd2UncmUgcmVtb3ZlZCBmcm9tCisrCSAqIGFsbG93ZWRpcHM7IHdlIHdvbid0IGhhdmUgbmV3IHJlZmVyZW5jZXMgaW4gKDIpIGV2ZW50dWFsbHksIGJlY2F1c2UKKysJICogd2dfaW5kZXhfaGFzaHRhYmxlX2xvb2t1cCB3aWxsIGFsd2F5cyByZXR1cm4gTlVMTCwgc2luY2Ugd2UgcmVtb3ZlZAorKwkgKiBhbGwgZXhpc3Rpbmcga2V5cGFpcnMgYW5kIG5vIG1vcmUgY2FuIGJlIGNyZWF0ZWQ7IHdlIHdvbid0IGhhdmUgbmV3CisrCSAqIHJlZmVyZW5jZXMgaW4gKDMpIGV2ZW50dWFsbHksIGJlY2F1c2Ugd2UncmUgcmVtb3ZlZCBmcm9tIHRoZSBwdWJrZXkKKysJICogaGFzaCB0YWJsZSwgd2hpY2ggYWxsb3dzIGZvciBhIG1heGltdW0gb2Ygb25lIGhhbmRzaGFrZSByZXNwb25zZSwKKysJICogdmlhIHRoZSBzdGlsbC11bmNsZWFyZWQgaW5kZXggaGFzaHRhYmxlIGVudHJ5LCBidXQgbm90IG1vcmUgdGhhbiBvbmUsCisrCSAqIGFuZCBpbiB3Z19jb29raWVfbWVzc2FnZV9jb25zdW1lLCB0aGUgbG9va3VwIGV2ZW50dWFsbHkgZ2V0cyBhIHBlZXIKKysJICogd2l0aCBhIHJlZmNvdW50IG9mIHplcm8sIHNvIG5vIG5ldyByZWZlcmVuY2UgaXMgdGFrZW4uCisrCSAqLworKworKwktLXBlZXItPmRldmljZS0+bnVtX3BlZXJzOworKwl3Z19wZWVyX3B1dChwZWVyKTsKKyt9CisrCisrLyogV2UgaGF2ZSBhIHNlcGFyYXRlICJyZW1vdmUiIGZ1bmN0aW9uIG1ha2Ugc3VyZSB0aGF0IGFsbCBhY3RpdmUgcGxhY2VzIHdoZXJlCisrICogYSBwZWVyIGlzIGN1cnJlbnRseSBvcGVyYXRpbmcgd2lsbCBldmVudHVhbGx5IGNvbWUgdG8gYW4gZW5kIGFuZCBub3QgcGFzcworKyAqIHRoZWlyIHJlZmVyZW5jZSBvbnRvIGFub3RoZXIgY29udGV4dC4KKysgKi8KKyt2b2lkIHdnX3BlZXJfcmVtb3ZlKHN0cnVjdCB3Z19wZWVyICpwZWVyKQorK3sKKysJaWYgKHVubGlrZWx5KCFwZWVyKSkKKysJCXJldHVybjsKKysJbG9ja2RlcF9hc3NlcnRfaGVsZCgmcGVlci0+ZGV2aWNlLT5kZXZpY2VfdXBkYXRlX2xvY2spOworKworKwlwZWVyX21ha2VfZGVhZChwZWVyKTsKKysJc3luY2hyb25pemVfcmN1KCk7CisrCXBlZXJfcmVtb3ZlX2FmdGVyX2RlYWQocGVlcik7CisrfQorKworK3ZvaWQgd2dfcGVlcl9yZW1vdmVfYWxsKHN0cnVjdCB3Z19kZXZpY2UgKndnKQorK3sKKysJc3RydWN0IHdnX3BlZXIgKnBlZXIsICp0ZW1wOworKwlMSVNUX0hFQUQoZGVhZF9wZWVycyk7CisrCisrCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJndnLT5kZXZpY2VfdXBkYXRlX2xvY2spOworKworKwkvKiBBdm9pZCBoYXZpbmcgdG8gdHJhdmVyc2UgaW5kaXZpZHVhbGx5IGZvciBlYWNoIG9uZS4gKi8KKysJd2dfYWxsb3dlZGlwc19mcmVlKCZ3Zy0+cGVlcl9hbGxvd2VkaXBzLCAmd2ctPmRldmljZV91cGRhdGVfbG9jayk7CisrCisrCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwZWVyLCB0ZW1wLCAmd2ctPnBlZXJfbGlzdCwgcGVlcl9saXN0KSB7CisrCQlwZWVyX21ha2VfZGVhZChwZWVyKTsKKysJCWxpc3RfYWRkX3RhaWwoJnBlZXItPnBlZXJfbGlzdCwgJmRlYWRfcGVlcnMpOworKwl9CisrCXN5bmNocm9uaXplX3JjdSgpOworKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGVlciwgdGVtcCwgJmRlYWRfcGVlcnMsIHBlZXJfbGlzdCkKKysJCXBlZXJfcmVtb3ZlX2FmdGVyX2RlYWQocGVlcik7CisrfQorKworK3N0YXRpYyB2b2lkIHJjdV9yZWxlYXNlKHN0cnVjdCByY3VfaGVhZCAqcmN1KQorK3sKKysJc3RydWN0IHdnX3BlZXIgKnBlZXIgPSBjb250YWluZXJfb2YocmN1LCBzdHJ1Y3Qgd2dfcGVlciwgcmN1KTsKKysKKysJZHN0X2NhY2hlX2Rlc3Ryb3koJnBlZXItPmVuZHBvaW50X2NhY2hlKTsKKysJd2dfcGFja2V0X3F1ZXVlX2ZyZWUoJnBlZXItPnJ4X3F1ZXVlLCBmYWxzZSk7CisrCXdnX3BhY2tldF9xdWV1ZV9mcmVlKCZwZWVyLT50eF9xdWV1ZSwgZmFsc2UpOworKworKwkvKiBUaGUgZmluYWwgemVyb2luZyB0YWtlcyBjYXJlIG9mIGNsZWFyaW5nIGFueSByZW1haW5pbmcgaGFuZHNoYWtlIGtleQorKwkgKiBtYXRlcmlhbCBhbmQgb3RoZXIgcG90ZW50aWFsbHkgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLgorKwkgKi8KKysJa3pmcmVlKHBlZXIpOworK30KKysKKytzdGF0aWMgdm9pZCBrcmVmX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZmNvdW50KQorK3sKKysJc3RydWN0IHdnX3BlZXIgKnBlZXIgPSBjb250YWluZXJfb2YocmVmY291bnQsIHN0cnVjdCB3Z19wZWVyLCByZWZjb3VudCk7CisrCisrCXByX2RlYnVnKCIlczogUGVlciAlbGx1ICglcElTcGZzYykgZGVzdHJveWVkXG4iLAorKwkJIHBlZXItPmRldmljZS0+ZGV2LT5uYW1lLCBwZWVyLT5pbnRlcm5hbF9pZCwKKysJCSAmcGVlci0+ZW5kcG9pbnQuYWRkcik7CisrCisrCS8qIFJlbW92ZSBvdXJzZWxmIGZyb20gZHluYW1pYyBydW50aW1lIGxvb2t1cCBzdHJ1Y3R1cmVzLCBub3cgdGhhdCB0aGUKKysJICogbGFzdCByZWZlcmVuY2UgaXMgZ29uZS4KKysJICovCisrCXdnX2luZGV4X2hhc2h0YWJsZV9yZW1vdmUocGVlci0+ZGV2aWNlLT5pbmRleF9oYXNodGFibGUsCisrCQkJCSAgJnBlZXItPmhhbmRzaGFrZS5lbnRyeSk7CisrCisrCS8qIFJlbW92ZSBhbnkgbGluZ2VyaW5nIHBhY2tldHMgdGhhdCBkaWRuJ3QgaGF2ZSBhIGNoYW5jZSB0byBiZQorKwkgKiB0cmFuc21pdHRlZC4KKysJICovCisrCXdnX3BhY2tldF9wdXJnZV9zdGFnZWRfcGFja2V0cyhwZWVyKTsKKysKKysJLyogRnJlZSB0aGUgbWVtb3J5IHVzZWQuICovCisrCWNhbGxfcmN1KCZwZWVyLT5yY3UsIHJjdV9yZWxlYXNlKTsKKyt9CisrCisrdm9pZCB3Z19wZWVyX3B1dChzdHJ1Y3Qgd2dfcGVlciAqcGVlcikKKyt7CisrCWlmICh1bmxpa2VseSghcGVlcikpCisrCQlyZXR1cm47CisrCWtyZWZfcHV0KCZwZWVyLT5yZWZjb3VudCwga3JlZl9yZWxlYXNlKTsKKyt9CistLS0gL2Rldi9udWxsCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5oCitAQCAtMCwwICsxLDgzIEBACisrLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKysvKgorKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKysgKi8KKysKKysjaWZuZGVmIF9XR19QRUVSX0gKKysjZGVmaW5lIF9XR19QRUVSX0gKKysKKysjaW5jbHVkZSAiZGV2aWNlLmgiCisrI2luY2x1ZGUgIm5vaXNlLmgiCisrI2luY2x1ZGUgImNvb2tpZS5oIgorKworKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KKysjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKysjaW5jbHVkZSA8bGludXgva3JlZi5oPgorKyNpbmNsdWRlIDxuZXQvZHN0X2NhY2hlLmg+CisrCisrc3RydWN0IHdnX2RldmljZTsKKysKKytzdHJ1Y3QgZW5kcG9pbnQgeworKwl1bmlvbiB7CisrCQlzdHJ1Y3Qgc29ja2FkZHIgYWRkcjsKKysJCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyNDsKKysJCXN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjY7CisrCX07CisrCXVuaW9uIHsKKysJCXN0cnVjdCB7CisrCQkJc3RydWN0IGluX2FkZHIgc3JjNDsKKysJCQkvKiBFc3NlbnRpYWxseSB0aGUgc2FtZSBhcyBhZGRyNi0+c2NvcGVfaWQgKi8KKysJCQlpbnQgc3JjX2lmNDsKKysJCX07CisrCQlzdHJ1Y3QgaW42X2FkZHIgc3JjNjsKKysJfTsKKyt9OworKworK3N0cnVjdCB3Z19wZWVyIHsKKysJc3RydWN0IHdnX2RldmljZSAqZGV2aWNlOworKwlzdHJ1Y3QgY3J5cHRfcXVldWUgdHhfcXVldWUsIHJ4X3F1ZXVlOworKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHN0YWdlZF9wYWNrZXRfcXVldWU7CisrCWludCBzZXJpYWxfd29ya19jcHU7CisrCXN0cnVjdCBub2lzZV9rZXlwYWlycyBrZXlwYWlyczsKKysJc3RydWN0IGVuZHBvaW50IGVuZHBvaW50OworKwlzdHJ1Y3QgZHN0X2NhY2hlIGVuZHBvaW50X2NhY2hlOworKwlyd2xvY2tfdCBlbmRwb2ludF9sb2NrOworKwlzdHJ1Y3Qgbm9pc2VfaGFuZHNoYWtlIGhhbmRzaGFrZTsKKysJYXRvbWljNjRfdCBsYXN0X3NlbnRfaGFuZHNoYWtlOworKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHJhbnNtaXRfaGFuZHNoYWtlX3dvcmssIGNsZWFyX3BlZXJfd29yazsKKysJc3RydWN0IGNvb2tpZSBsYXRlc3RfY29va2llOworKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBwdWJrZXlfaGFzaDsKKysJdTY0IHJ4X2J5dGVzLCB0eF9ieXRlczsKKysJc3RydWN0IHRpbWVyX2xpc3QgdGltZXJfcmV0cmFuc21pdF9oYW5kc2hha2UsIHRpbWVyX3NlbmRfa2VlcGFsaXZlOworKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcl9uZXdfaGFuZHNoYWtlLCB0aW1lcl96ZXJvX2tleV9tYXRlcmlhbDsKKysJc3RydWN0IHRpbWVyX2xpc3QgdGltZXJfcGVyc2lzdGVudF9rZWVwYWxpdmU7CisrCXVuc2lnbmVkIGludCB0aW1lcl9oYW5kc2hha2VfYXR0ZW1wdHM7CisrCXUxNiBwZXJzaXN0ZW50X2tlZXBhbGl2ZV9pbnRlcnZhbDsKKysJYm9vbCB0aW1lcl9uZWVkX2Fub3RoZXJfa2VlcGFsaXZlOworKwlib29sIHNlbnRfbGFzdG1pbnV0ZV9oYW5kc2hha2U7CisrCXN0cnVjdCB0aW1lc3BlYzY0IHdhbGx0aW1lX2xhc3RfaGFuZHNoYWtlOworKwlzdHJ1Y3Qga3JlZiByZWZjb3VudDsKKysJc3RydWN0IHJjdV9oZWFkIHJjdTsKKysJc3RydWN0IGxpc3RfaGVhZCBwZWVyX2xpc3Q7CisrCXN0cnVjdCBsaXN0X2hlYWQgYWxsb3dlZGlwc19saXN0OworKwl1NjQgaW50ZXJuYWxfaWQ7CisrCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOworKwlib29sIGlzX2RlYWQ7CisrfTsKKysKKytzdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnX2RldmljZSAqd2csCisrCQkJICAgICAgIGNvbnN0IHU4IHB1YmxpY19rZXlbTk9JU0VfUFVCTElDX0tFWV9MRU5dLAorKwkJCSAgICAgICBjb25zdCB1OCBwcmVzaGFyZWRfa2V5W05PSVNFX1NZTU1FVFJJQ19LRVlfTEVOXSk7CisrCisrc3RydWN0IHdnX3BlZXIgKl9fbXVzdF9jaGVjayB3Z19wZWVyX2dldF9tYXliZV96ZXJvKHN0cnVjdCB3Z19wZWVyICpwZWVyKTsKKytzdGF0aWMgaW5saW5lIHN0cnVjdCB3Z19wZWVyICp3Z19wZWVyX2dldChzdHJ1Y3Qgd2dfcGVlciAqcGVlcikKKyt7CisrCWtyZWZfZ2V0KCZwZWVyLT5yZWZjb3VudCk7CisrCXJldHVybiBwZWVyOworK30KKyt2b2lkIHdnX3BlZXJfcHV0KHN0cnVjdCB3Z19wZWVyICpwZWVyKTsKKyt2b2lkIHdnX3BlZXJfcmVtb3ZlKHN0cnVjdCB3Z19wZWVyICpwZWVyKTsKKyt2b2lkIHdnX3BlZXJfcmVtb3ZlX2FsbChzdHJ1Y3Qgd2dfZGV2aWNlICp3Zyk7CisrCisrI2VuZGlmIC8qIF9XR19QRUVSX0ggKi8KKy0tLSAvZGV2L251bGwKKysrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVybG9va3VwLmMKK0BAIC0wLDAgKzEsMjIxIEBACisrLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKysvKgorKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKysgKi8KKysKKysjaW5jbHVkZSAicGVlcmxvb2t1cC5oIgorKyNpbmNsdWRlICJwZWVyLmgiCisrI2luY2x1ZGUgIm5vaXNlLmgiCisrCisrc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkICpwdWJrZXlfYnVja2V0KHN0cnVjdCBwdWJrZXlfaGFzaHRhYmxlICp0YWJsZSwKKysJCQkJCWNvbnN0IHU4IHB1YmtleVtOT0lTRV9QVUJMSUNfS0VZX0xFTl0pCisreworKwkvKiBzaXBoYXNoIGdpdmVzIHVzIGEgc2VjdXJlIDY0Yml0IG51bWJlciBiYXNlZCBvbiBhIHJhbmRvbSBrZXkuIFNpbmNlCisrCSAqIHRoZSBiaXRzIGFyZSB1bmlmb3JtbHkgZGlzdHJpYnV0ZWQsIHdlIGNhbiB0aGVuIG1hc2sgb2ZmIHRvIGdldCB0aGUKKysJICogYml0cyB3ZSBuZWVkLgorKwkgKi8KKysJY29uc3QgdTY0IGhhc2ggPSBzaXBoYXNoKHB1YmtleSwgTk9JU0VfUFVCTElDX0tFWV9MRU4sICZ0YWJsZS0+a2V5KTsKKysKKysJcmV0dXJuICZ0YWJsZS0+aGFzaHRhYmxlW2hhc2ggJiAoSEFTSF9TSVpFKHRhYmxlLT5oYXNodGFibGUpIC0gMSldOworK30KKysKKytzdHJ1Y3QgcHVia2V5X2hhc2h0YWJsZSAqd2dfcHVia2V5X2hhc2h0YWJsZV9hbGxvYyh2b2lkKQorK3sKKysJc3RydWN0IHB1YmtleV9oYXNodGFibGUgKnRhYmxlID0ga3ZtYWxsb2Moc2l6ZW9mKCp0YWJsZSksIEdGUF9LRVJORUwpOworKworKwlpZiAoIXRhYmxlKQorKwkJcmV0dXJuIE5VTEw7CisrCisrCWdldF9yYW5kb21fYnl0ZXMoJnRhYmxlLT5rZXksIHNpemVvZih0YWJsZS0+a2V5KSk7CisrCWhhc2hfaW5pdCh0YWJsZS0+aGFzaHRhYmxlKTsKKysJbXV0ZXhfaW5pdCgmdGFibGUtPmxvY2spOworKwlyZXR1cm4gdGFibGU7CisrfQorKworK3ZvaWQgd2dfcHVia2V5X2hhc2h0YWJsZV9hZGQoc3RydWN0IHB1YmtleV9oYXNodGFibGUgKnRhYmxlLAorKwkJCSAgICAgc3RydWN0IHdnX3BlZXIgKnBlZXIpCisreworKwltdXRleF9sb2NrKCZ0YWJsZS0+bG9jayk7CisrCWhsaXN0X2FkZF9oZWFkX3JjdSgmcGVlci0+cHVia2V5X2hhc2gsCisrCQkJICAgcHVia2V5X2J1Y2tldCh0YWJsZSwgcGVlci0+aGFuZHNoYWtlLnJlbW90ZV9zdGF0aWMpKTsKKysJbXV0ZXhfdW5sb2NrKCZ0YWJsZS0+bG9jayk7CisrfQorKworK3ZvaWQgd2dfcHVia2V5X2hhc2h0YWJsZV9yZW1vdmUoc3RydWN0IHB1YmtleV9oYXNodGFibGUgKnRhYmxlLAorKwkJCQlzdHJ1Y3Qgd2dfcGVlciAqcGVlcikKKyt7CisrCW11dGV4X2xvY2soJnRhYmxlLT5sb2NrKTsKKysJaGxpc3RfZGVsX2luaXRfcmN1KCZwZWVyLT5wdWJrZXlfaGFzaCk7CisrCW11dGV4X3VubG9jaygmdGFibGUtPmxvY2spOworK30KKysKKysvKiBSZXR1cm5zIGEgc3Ryb25nIHJlZmVyZW5jZSB0byBhIHBlZXIgKi8KKytzdHJ1Y3Qgd2dfcGVlciAqCisrd2dfcHVia2V5X2hhc2h0YWJsZV9sb29rdXAoc3RydWN0IHB1YmtleV9oYXNodGFibGUgKnRhYmxlLAorKwkJCSAgIGNvbnN0IHU4IHB1YmtleVtOT0lTRV9QVUJMSUNfS0VZX0xFTl0pCisreworKwlzdHJ1Y3Qgd2dfcGVlciAqaXRlcl9wZWVyLCAqcGVlciA9IE5VTEw7CisrCisrCXJjdV9yZWFkX2xvY2tfYmgoKTsKKysJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1X2JoKGl0ZXJfcGVlciwgcHVia2V5X2J1Y2tldCh0YWJsZSwgcHVia2V5KSwKKysJCQkJICAgIHB1YmtleV9oYXNoKSB7CisrCQlpZiAoIW1lbWNtcChwdWJrZXksIGl0ZXJfcGVlci0+aGFuZHNoYWtlLnJlbW90ZV9zdGF0aWMsCisrCQkJICAgIE5PSVNFX1BVQkxJQ19LRVlfTEVOKSkgeworKwkJCXBlZXIgPSBpdGVyX3BlZXI7CisrCQkJYnJlYWs7CisrCQl9CisrCX0KKysJcGVlciA9IHdnX3BlZXJfZ2V0X21heWJlX3plcm8ocGVlcik7CisrCXJjdV9yZWFkX3VubG9ja19iaCgpOworKwlyZXR1cm4gcGVlcjsKKyt9CisrCisrc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkICppbmRleF9idWNrZXQoc3RydWN0IGluZGV4X2hhc2h0YWJsZSAqdGFibGUsCisrCQkJCSAgICAgICBjb25zdCBfX2xlMzIgaW5kZXgpCisreworKwkvKiBTaW5jZSB0aGUgaW5kaWNlcyBhcmUgcmFuZG9tIGFuZCB0aHVzIGFsbCBiaXRzIGFyZSB1bmlmb3JtbHkKKysJICogZGlzdHJpYnV0ZWQsIHdlIGNhbiBmaW5kIGl0cyBidWNrZXQgc2ltcGx5IGJ5IG1hc2tpbmcuCisrCSAqLworKwlyZXR1cm4gJnRhYmxlLT5oYXNodGFibGVbKF9fZm9yY2UgdTMyKWluZGV4ICYKKysJCQkJIChIQVNIX1NJWkUodGFibGUtPmhhc2h0YWJsZSkgLSAxKV07CisrfQorKworK3N0cnVjdCBpbmRleF9oYXNodGFibGUgKndnX2luZGV4X2hhc2h0YWJsZV9hbGxvYyh2b2lkKQorK3sKKysJc3RydWN0IGluZGV4X2hhc2h0YWJsZSAqdGFibGUgPSBrdm1hbGxvYyhzaXplb2YoKnRhYmxlKSwgR0ZQX0tFUk5FTCk7CisrCisrCWlmICghdGFibGUpCisrCQlyZXR1cm4gTlVMTDsKKysKKysJaGFzaF9pbml0KHRhYmxlLT5oYXNodGFibGUpOworKwlzcGluX2xvY2tfaW5pdCgmdGFibGUtPmxvY2spOworKwlyZXR1cm4gdGFibGU7CisrfQorKworKy8qIEF0IHRoZSBtb21lbnQsIHdlIGxpbWl0IG91cnNlbHZlcyB0byAyXjIwIHRvdGFsIHBlZXJzLCB3aGljaCBnZW5lcmFsbHkgbWlnaHQKKysgKiBhbW91bnQgdG8gMl4yMCozIGl0ZW1zIGluIHRoaXMgaGFzaHRhYmxlLiBUaGUgYWxnb3JpdGhtIGJlbG93IHdvcmtzIGJ5CisrICogcGlja2luZyBhIHJhbmRvbSBudW1iZXIgYW5kIHRlc3RpbmcgaXQuIFdlIGNhbiBzZWUgdGhhdCB0aGVzZSBsaW1pdHMgbWVhbiB3ZQorKyAqIHVzdWFsbHkgc3VjY2VlZCBwcmV0dHkgcXVpY2tseToKKysgKgorKyAqID4+PiBkZWYgY2FsY3VsYXRpb24odHJpZXMsIHNpemUpOgorKyAqIC4uLiAgICAgcmV0dXJuIChzaXplIC8gMioqMzIpKioodHJpZXMgLSAxKSAqICAoMSAtIChzaXplIC8gMioqMzIpKQorKyAqIC4uLgorKyAqID4+PiBjYWxjdWxhdGlvbigxLCAyKioyMCAqIDMpCisrICogMC45OTkyNjc1NzgxMjUKKysgKiA+Pj4gY2FsY3VsYXRpb24oMiwgMioqMjAgKiAzKQorKyAqIDAuMDAwNzMxODg1NDMzMTk3MDIxNQorKyAqID4+PiBjYWxjdWxhdGlvbigzLCAyKioyMCAqIDMpCisrICogNS4zNjA0ODkwMTI2NzM0OTdlLTA3CisrICogPj4+IGNhbGN1bGF0aW9uKDQsIDIqKjIwICogMykKKysgKiAzLjkyNjEzOTQxMzU3OTIyMTZlLTEwCisrICoKKysgKiBBdCB0aGUgbW9tZW50LCB3ZSBkb24ndCBkbyBhbnkgbWFza2luZywgc28gdGhpcyBhbGdvcml0aG0gaXNuJ3QgZXhhY3RseQorKyAqIGNvbnN0YW50IHRpbWUgaW4gZWl0aGVyIHRoZSByYW5kb20gZ3Vlc3Npbmcgb3IgaW4gdGhlIGhhc2ggbGlzdCBsb29rdXAuIFdlCisrICogY291bGQgcmVxdWlyZSBhIG1pbmltdW0gb2YgMyB0cmllcywgd2hpY2ggd291bGQgc3VjY2Vzc2Z1bGx5IG1hc2sgdGhlCisrICogZ3Vlc3NpbmcuIHRoaXMgd291bGQgbm90LCBob3dldmVyLCBoZWxwIHdpdGggdGhlIGdyb3dpbmcgaGFzaCBsZW5ndGhzLCB3aGljaAorKyAqIGlzIGFub3RoZXIgdGhpbmcgdG8gY29uc2lkZXIgbW92aW5nIGZvcndhcmQuCisrICovCisrCisrX19sZTMyIHdnX2luZGV4X2hhc2h0YWJsZV9pbnNlcnQoc3RydWN0IGluZGV4X2hhc2h0YWJsZSAqdGFibGUsCisrCQkJCSBzdHJ1Y3QgaW5kZXhfaGFzaHRhYmxlX2VudHJ5ICplbnRyeSkKKyt7CisrCXN0cnVjdCBpbmRleF9oYXNodGFibGVfZW50cnkgKmV4aXN0aW5nX2VudHJ5OworKworKwlzcGluX2xvY2tfYmgoJnRhYmxlLT5sb2NrKTsKKysJaGxpc3RfZGVsX2luaXRfcmN1KCZlbnRyeS0+aW5kZXhfaGFzaCk7CisrCXNwaW5fdW5sb2NrX2JoKCZ0YWJsZS0+bG9jayk7CisrCisrCXJjdV9yZWFkX2xvY2tfYmgoKTsKKysKKytzZWFyY2hfdW51c2VkX3Nsb3Q6CisrCS8qIEZpcnN0IHdlIHRyeSB0byBmaW5kIGFuIHVudXNlZCBzbG90LCByYW5kb21seSwgd2hpbGUgdW5sb2NrZWQuICovCisrCWVudHJ5LT5pbmRleCA9IChfX2ZvcmNlIF9fbGUzMilnZXRfcmFuZG9tX3UzMigpOworKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3VfYmgoZXhpc3RpbmdfZW50cnksCisrCQkJCSAgICBpbmRleF9idWNrZXQodGFibGUsIGVudHJ5LT5pbmRleCksCisrCQkJCSAgICBpbmRleF9oYXNoKSB7CisrCQlpZiAoZXhpc3RpbmdfZW50cnktPmluZGV4ID09IGVudHJ5LT5pbmRleCkKKysJCQkvKiBJZiBpdCdzIGFscmVhZHkgaW4gdXNlLCB3ZSBjb250aW51ZSBzZWFyY2hpbmcuICovCisrCQkJZ290byBzZWFyY2hfdW51c2VkX3Nsb3Q7CisrCX0KKysKKysJLyogT25jZSB3ZSd2ZSBmb3VuZCBhbiB1bnVzZWQgc2xvdCwgd2UgbG9jayBpdCwgYW5kIHRoZW4gZG91YmxlLWNoZWNrCisrCSAqIHRoYXQgbm9ib2R5IGVsc2Ugc3RvbGUgaXQgZnJvbSB1cy4KKysJICovCisrCXNwaW5fbG9ja19iaCgmdGFibGUtPmxvY2spOworKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3VfYmgoZXhpc3RpbmdfZW50cnksCisrCQkJCSAgICBpbmRleF9idWNrZXQodGFibGUsIGVudHJ5LT5pbmRleCksCisrCQkJCSAgICBpbmRleF9oYXNoKSB7CisrCQlpZiAoZXhpc3RpbmdfZW50cnktPmluZGV4ID09IGVudHJ5LT5pbmRleCkgeworKwkJCXNwaW5fdW5sb2NrX2JoKCZ0YWJsZS0+bG9jayk7CisrCQkJLyogSWYgaXQgd2FzIHN0b2xlbiwgd2Ugc3RhcnQgb3Zlci4gKi8KKysJCQlnb3RvIHNlYXJjaF91bnVzZWRfc2xvdDsKKysJCX0KKysJfQorKwkvKiBPdGhlcndpc2UsIHdlIGtub3cgd2UgaGF2ZSBpdCBleGNsdXNpdmVseSAoc2luY2Ugd2UncmUgbG9ja2VkKSwKKysJICogc28gd2UgaW5zZXJ0LgorKwkgKi8KKysJaGxpc3RfYWRkX2hlYWRfcmN1KCZlbnRyeS0+aW5kZXhfaGFzaCwKKysJCQkgICBpbmRleF9idWNrZXQodGFibGUsIGVudHJ5LT5pbmRleCkpOworKwlzcGluX3VubG9ja19iaCgmdGFibGUtPmxvY2spOworKworKwlyY3VfcmVhZF91bmxvY2tfYmgoKTsKKysKKysJcmV0dXJuIGVudHJ5LT5pbmRleDsKKyt9CisrCisrYm9vbCB3Z19pbmRleF9oYXNodGFibGVfcmVwbGFjZShzdHJ1Y3QgaW5kZXhfaGFzaHRhYmxlICp0YWJsZSwKKysJCQkJc3RydWN0IGluZGV4X2hhc2h0YWJsZV9lbnRyeSAqb2xkLAorKwkJCQlzdHJ1Y3QgaW5kZXhfaGFzaHRhYmxlX2VudHJ5ICpuZXcpCisreworKwlpZiAodW5saWtlbHkoaGxpc3RfdW5oYXNoZWQoJm9sZC0+aW5kZXhfaGFzaCkpKQorKwkJcmV0dXJuIGZhbHNlOworKwlzcGluX2xvY2tfYmgoJnRhYmxlLT5sb2NrKTsKKysJbmV3LT5pbmRleCA9IG9sZC0+aW5kZXg7CisrCWhsaXN0X3JlcGxhY2VfcmN1KCZvbGQtPmluZGV4X2hhc2gsICZuZXctPmluZGV4X2hhc2gpOworKworKwkvKiBDYWxsaW5nIGluaXQgaGVyZSBOVUxMcyBvdXQgaW5kZXhfaGFzaCwgYW5kIGluIGZhY3QgYWZ0ZXIgdGhpcworKwkgKiBmdW5jdGlvbiByZXR1cm5zLCBpdCdzIHRoZW9yZXRpY2FsbHkgcG9zc2libGUgZm9yIHRoaXMgdG8gZ2V0CisrCSAqIHJlaW5zZXJ0ZWQgZWxzZXdoZXJlLiBUaGF0IG1lYW5zIHRoZSBSQ1UgbG9va3VwIGJlbG93IG1pZ2h0IGVpdGhlcgorKwkgKiB0ZXJtaW5hdGUgZWFybHkgb3IganVtcCBiZXR3ZWVuIGJ1Y2tldHMsIGluIHdoaWNoIGNhc2UgdGhlIHBhY2tldAorKwkgKiBzaW1wbHkgZ2V0cyBkcm9wcGVkLCB3aGljaCBpc24ndCB0ZXJyaWJsZS4KKysJICovCisrCUlOSVRfSExJU1RfTk9ERSgmb2xkLT5pbmRleF9oYXNoKTsKKysJc3Bpbl91bmxvY2tfYmgoJnRhYmxlLT5sb2NrKTsKKysJcmV0dXJuIHRydWU7CisrfQorKworK3ZvaWQgd2dfaW5kZXhfaGFzaHRhYmxlX3JlbW92ZShzdHJ1Y3QgaW5kZXhfaGFzaHRhYmxlICp0YWJsZSwKKysJCQkgICAgICAgc3RydWN0IGluZGV4X2hhc2h0YWJsZV9lbnRyeSAqZW50cnkpCisreworKwlzcGluX2xvY2tfYmgoJnRhYmxlLT5sb2NrKTsKKysJaGxpc3RfZGVsX2luaXRfcmN1KCZlbnRyeS0+aW5kZXhfaGFzaCk7CisrCXNwaW5fdW5sb2NrX2JoKCZ0YWJsZS0+bG9jayk7CisrfQorKworKy8qIFJldHVybnMgYSBzdHJvbmcgcmVmZXJlbmNlIHRvIGEgZW50cnktPnBlZXIgKi8KKytzdHJ1Y3QgaW5kZXhfaGFzaHRhYmxlX2VudHJ5ICoKKyt3Z19pbmRleF9oYXNodGFibGVfbG9va3VwKHN0cnVjdCBpbmRleF9oYXNodGFibGUgKnRhYmxlLAorKwkJCSAgY29uc3QgZW51bSBpbmRleF9oYXNodGFibGVfdHlwZSB0eXBlX21hc2ssCisrCQkJICBjb25zdCBfX2xlMzIgaW5kZXgsIHN0cnVjdCB3Z19wZWVyICoqcGVlcikKKyt7CisrCXN0cnVjdCBpbmRleF9oYXNodGFibGVfZW50cnkgKml0ZXJfZW50cnksICplbnRyeSA9IE5VTEw7CisrCisrCXJjdV9yZWFkX2xvY2tfYmgoKTsKKysJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1X2JoKGl0ZXJfZW50cnksIGluZGV4X2J1Y2tldCh0YWJsZSwgaW5kZXgpLAorKwkJCQkgICAgaW5kZXhfaGFzaCkgeworKwkJaWYgKGl0ZXJfZW50cnktPmluZGV4ID09IGluZGV4KSB7CisrCQkJaWYgKGxpa2VseShpdGVyX2VudHJ5LT50eXBlICYgdHlwZV9tYXNrKSkKKysJCQkJZW50cnkgPSBpdGVyX2VudHJ5OworKwkJCWJyZWFrOworKwkJfQorKwl9CisrCWlmIChsaWtlbHkoZW50cnkpKSB7CisrCQllbnRyeS0+cGVlciA9IHdnX3BlZXJfZ2V0X21heWJlX3plcm8oZW50cnktPnBlZXIpOworKwkJaWYgKGxpa2VseShlbnRyeS0+cGVlcikpCisrCQkJKnBlZXIgPSBlbnRyeS0+cGVlcjsKKysJCWVsc2UKKysJCQllbnRyeSA9IE5VTEw7CisrCX0KKysJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CisrCXJldHVybiBlbnRyeTsKKyt9CistLS0gL2Rldi9udWxsCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlcmxvb2t1cC5oCitAQCAtMCwwICsxLDY0IEBACisrLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKysvKgorKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKysgKi8KKysKKysjaWZuZGVmIF9XR19QRUVSTE9PS1VQX0gKKysjZGVmaW5lIF9XR19QRUVSTE9PS1VQX0gKKysKKysjaW5jbHVkZSAibWVzc2FnZXMuaCIKKysKKysjaW5jbHVkZSA8bGludXgvaGFzaHRhYmxlLmg+CisrI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisrI2luY2x1ZGUgPGxpbnV4L3NpcGhhc2guaD4KKysKKytzdHJ1Y3Qgd2dfcGVlcjsKKysKKytzdHJ1Y3QgcHVia2V5X2hhc2h0YWJsZSB7CisrCS8qIFRPRE86IG1vdmUgdG8gcmhhc2h0YWJsZSAqLworKwlERUNMQVJFX0hBU0hUQUJMRShoYXNodGFibGUsIDExKTsKKysJc2lwaGFzaF9rZXlfdCBrZXk7CisrCXN0cnVjdCBtdXRleCBsb2NrOworK307CisrCisrc3RydWN0IHB1YmtleV9oYXNodGFibGUgKndnX3B1YmtleV9oYXNodGFibGVfYWxsb2Modm9pZCk7Cisrdm9pZCB3Z19wdWJrZXlfaGFzaHRhYmxlX2FkZChzdHJ1Y3QgcHVia2V5X2hhc2h0YWJsZSAqdGFibGUsCisrCQkJICAgICBzdHJ1Y3Qgd2dfcGVlciAqcGVlcik7Cisrdm9pZCB3Z19wdWJrZXlfaGFzaHRhYmxlX3JlbW92ZShzdHJ1Y3QgcHVia2V5X2hhc2h0YWJsZSAqdGFibGUsCisrCQkJCXN0cnVjdCB3Z19wZWVyICpwZWVyKTsKKytzdHJ1Y3Qgd2dfcGVlciAqCisrd2dfcHVia2V5X2hhc2h0YWJsZV9sb29rdXAoc3RydWN0IHB1YmtleV9oYXNodGFibGUgKnRhYmxlLAorKwkJCSAgIGNvbnN0IHU4IHB1YmtleVtOT0lTRV9QVUJMSUNfS0VZX0xFTl0pOworKworK3N0cnVjdCBpbmRleF9oYXNodGFibGUgeworKwkvKiBUT0RPOiBtb3ZlIHRvIHJoYXNodGFibGUgKi8KKysJREVDTEFSRV9IQVNIVEFCTEUoaGFzaHRhYmxlLCAxMyk7CisrCXNwaW5sb2NrX3QgbG9jazsKKyt9OworKworK2VudW0gaW5kZXhfaGFzaHRhYmxlX3R5cGUgeworKwlJTkRFWF9IQVNIVEFCTEVfSEFORFNIQUtFID0gMVUgPDwgMCwKKysJSU5ERVhfSEFTSFRBQkxFX0tFWVBBSVIgPSAxVSA8PCAxCisrfTsKKysKKytzdHJ1Y3QgaW5kZXhfaGFzaHRhYmxlX2VudHJ5IHsKKysJc3RydWN0IHdnX3BlZXIgKnBlZXI7CisrCXN0cnVjdCBobGlzdF9ub2RlIGluZGV4X2hhc2g7CisrCWVudW0gaW5kZXhfaGFzaHRhYmxlX3R5cGUgdHlwZTsKKysJX19sZTMyIGluZGV4OworK307CisrCisrc3RydWN0IGluZGV4X2hhc2h0YWJsZSAqd2dfaW5kZXhfaGFzaHRhYmxlX2FsbG9jKHZvaWQpOworK19fbGUzMiB3Z19pbmRleF9oYXNodGFibGVfaW5zZXJ0KHN0cnVjdCBpbmRleF9oYXNodGFibGUgKnRhYmxlLAorKwkJCQkgc3RydWN0IGluZGV4X2hhc2h0YWJsZV9lbnRyeSAqZW50cnkpOworK2Jvb2wgd2dfaW5kZXhfaGFzaHRhYmxlX3JlcGxhY2Uoc3RydWN0IGluZGV4X2hhc2h0YWJsZSAqdGFibGUsCisrCQkJCXN0cnVjdCBpbmRleF9oYXNodGFibGVfZW50cnkgKm9sZCwKKysJCQkJc3RydWN0IGluZGV4X2hhc2h0YWJsZV9lbnRyeSAqbmV3KTsKKyt2b2lkIHdnX2luZGV4X2hhc2h0YWJsZV9yZW1vdmUoc3RydWN0IGluZGV4X2hhc2h0YWJsZSAqdGFibGUsCisrCQkJICAgICAgIHN0cnVjdCBpbmRleF9oYXNodGFibGVfZW50cnkgKmVudHJ5KTsKKytzdHJ1Y3QgaW5kZXhfaGFzaHRhYmxlX2VudHJ5ICoKKyt3Z19pbmRleF9oYXNodGFibGVfbG9va3VwKHN0cnVjdCBpbmRleF9oYXNodGFibGUgKnRhYmxlLAorKwkJCSAgY29uc3QgZW51bSBpbmRleF9oYXNodGFibGVfdHlwZSB0eXBlX21hc2ssCisrCQkJICBjb25zdCBfX2xlMzIgaW5kZXgsIHN0cnVjdCB3Z19wZWVyICoqcGVlcik7CisrCisrI2VuZGlmIC8qIF9XR19QRUVSTE9PS1VQX0ggKi8KKy0tLSAvZGV2L251bGwKKysrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5jCitAQCAtMCwwICsxLDUzIEBACisrLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKysvKgorKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKysgKi8KKysKKysjaW5jbHVkZSAicXVldWVpbmcuaCIKKysKKytzdHJ1Y3QgbXVsdGljb3JlX3dvcmtlciBfX3BlcmNwdSAqCisrd2dfcGFja2V0X3BlcmNwdV9tdWx0aWNvcmVfd29ya2VyX2FsbG9jKHdvcmtfZnVuY190IGZ1bmN0aW9uLCB2b2lkICpwdHIpCisreworKwlpbnQgY3B1OworKwlzdHJ1Y3QgbXVsdGljb3JlX3dvcmtlciBfX3BlcmNwdSAqd29ya2VyID0KKysJCWFsbG9jX3BlcmNwdShzdHJ1Y3QgbXVsdGljb3JlX3dvcmtlcik7CisrCisrCWlmICghd29ya2VyKQorKwkJcmV0dXJuIE5VTEw7CisrCisrCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKysJCXBlcl9jcHVfcHRyKHdvcmtlciwgY3B1KS0+cHRyID0gcHRyOworKwkJSU5JVF9XT1JLKCZwZXJfY3B1X3B0cih3b3JrZXIsIGNwdSktPndvcmssIGZ1bmN0aW9uKTsKKysJfQorKwlyZXR1cm4gd29ya2VyOworK30KKysKKytpbnQgd2dfcGFja2V0X3F1ZXVlX2luaXQoc3RydWN0IGNyeXB0X3F1ZXVlICpxdWV1ZSwgd29ya19mdW5jX3QgZnVuY3Rpb24sCisrCQkJIGJvb2wgbXVsdGljb3JlLCB1bnNpZ25lZCBpbnQgbGVuKQorK3sKKysJaW50IHJldDsKKysKKysJbWVtc2V0KHF1ZXVlLCAwLCBzaXplb2YoKnF1ZXVlKSk7CisrCXJldCA9IHB0cl9yaW5nX2luaXQoJnF1ZXVlLT5yaW5nLCBsZW4sIEdGUF9LRVJORUwpOworKwlpZiAocmV0KQorKwkJcmV0dXJuIHJldDsKKysJaWYgKGZ1bmN0aW9uKSB7CisrCQlpZiAobXVsdGljb3JlKSB7CisrCQkJcXVldWUtPndvcmtlciA9IHdnX3BhY2tldF9wZXJjcHVfbXVsdGljb3JlX3dvcmtlcl9hbGxvYygKKysJCQkJZnVuY3Rpb24sIHF1ZXVlKTsKKysJCQlpZiAoIXF1ZXVlLT53b3JrZXIpCisrCQkJCXJldHVybiAtRU5PTUVNOworKwkJfSBlbHNlIHsKKysJCQlJTklUX1dPUksoJnF1ZXVlLT53b3JrLCBmdW5jdGlvbik7CisrCQl9CisrCX0KKysJcmV0dXJuIDA7CisrfQorKworK3ZvaWQgd2dfcGFja2V0X3F1ZXVlX2ZyZWUoc3RydWN0IGNyeXB0X3F1ZXVlICpxdWV1ZSwgYm9vbCBtdWx0aWNvcmUpCisreworKwlpZiAobXVsdGljb3JlKQorKwkJZnJlZV9wZXJjcHUocXVldWUtPndvcmtlcik7CisrCVdBUk5fT04oIV9fcHRyX3JpbmdfZW1wdHkoJnF1ZXVlLT5yaW5nKSk7CisrCXB0cl9yaW5nX2NsZWFudXAoJnF1ZXVlLT5yaW5nLCBOVUxMKTsKKyt9CistLS0gL2Rldi9udWxsCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaAorQEAgLTAsMCArMSwxOTcgQEAKKysvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworKy8qCisrICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKyAqLworKworKyNpZm5kZWYgX1dHX1FVRVVFSU5HX0gKKysjZGVmaW5lIF9XR19RVUVVRUlOR19ICisrCisrI2luY2x1ZGUgInBlZXIuaCIKKysjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKysjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisrI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisrI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KKysKKytzdHJ1Y3Qgd2dfZGV2aWNlOworK3N0cnVjdCB3Z19wZWVyOworK3N0cnVjdCBtdWx0aWNvcmVfd29ya2VyOworK3N0cnVjdCBjcnlwdF9xdWV1ZTsKKytzdHJ1Y3Qgc2tfYnVmZjsKKysKKysvKiBxdWV1ZWluZy5jIEFQSXM6ICovCisraW50IHdnX3BhY2tldF9xdWV1ZV9pbml0KHN0cnVjdCBjcnlwdF9xdWV1ZSAqcXVldWUsIHdvcmtfZnVuY190IGZ1bmN0aW9uLAorKwkJCSBib29sIG11bHRpY29yZSwgdW5zaWduZWQgaW50IGxlbik7Cisrdm9pZCB3Z19wYWNrZXRfcXVldWVfZnJlZShzdHJ1Y3QgY3J5cHRfcXVldWUgKnF1ZXVlLCBib29sIG11bHRpY29yZSk7Cisrc3RydWN0IG11bHRpY29yZV93b3JrZXIgX19wZXJjcHUgKgorK3dnX3BhY2tldF9wZXJjcHVfbXVsdGljb3JlX3dvcmtlcl9hbGxvYyh3b3JrX2Z1bmNfdCBmdW5jdGlvbiwgdm9pZCAqcHRyKTsKKysKKysvKiByZWNlaXZlLmMgQVBJczogKi8KKyt2b2lkIHdnX3BhY2tldF9yZWNlaXZlKHN0cnVjdCB3Z19kZXZpY2UgKndnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKyt2b2lkIHdnX3BhY2tldF9oYW5kc2hha2VfcmVjZWl2ZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKysvKiBOQVBJIHBvbGwgZnVuY3Rpb246ICovCisraW50IHdnX3BhY2tldF9yeF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCk7CisrLyogV29ya3F1ZXVlIHdvcmtlcjogKi8KKyt2b2lkIHdnX3BhY2tldF9kZWNyeXB0X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworKworKy8qIHNlbmQuYyBBUElzOiAqLworK3ZvaWQgd2dfcGFja2V0X3NlbmRfcXVldWVkX2hhbmRzaGFrZV9pbml0aWF0aW9uKHN0cnVjdCB3Z19wZWVyICpwZWVyLAorKwkJCQkJCWJvb2wgaXNfcmV0cnkpOworK3ZvaWQgd2dfcGFja2V0X3NlbmRfaGFuZHNoYWtlX3Jlc3BvbnNlKHN0cnVjdCB3Z19wZWVyICpwZWVyKTsKKyt2b2lkIHdnX3BhY2tldF9zZW5kX2hhbmRzaGFrZV9jb29raWUoc3RydWN0IHdnX2RldmljZSAqd2csCisrCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKmluaXRpYXRpbmdfc2tiLAorKwkJCQkgICAgIF9fbGUzMiBzZW5kZXJfaW5kZXgpOworK3ZvaWQgd2dfcGFja2V0X3NlbmRfa2VlcGFsaXZlKHN0cnVjdCB3Z19wZWVyICpwZWVyKTsKKyt2b2lkIHdnX3BhY2tldF9wdXJnZV9zdGFnZWRfcGFja2V0cyhzdHJ1Y3Qgd2dfcGVlciAqcGVlcik7Cisrdm9pZCB3Z19wYWNrZXRfc2VuZF9zdGFnZWRfcGFja2V0cyhzdHJ1Y3Qgd2dfcGVlciAqcGVlcik7CisrLyogV29ya3F1ZXVlIHdvcmtlcnM6ICovCisrdm9pZCB3Z19wYWNrZXRfaGFuZHNoYWtlX3NlbmRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Cisrdm9pZCB3Z19wYWNrZXRfdHhfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Cisrdm9pZCB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKysKKytlbnVtIHBhY2tldF9zdGF0ZSB7CisrCVBBQ0tFVF9TVEFURV9VTkNSWVBURUQsCisrCVBBQ0tFVF9TVEFURV9DUllQVEVELAorKwlQQUNLRVRfU1RBVEVfREVBRAorK307CisrCisrc3RydWN0IHBhY2tldF9jYiB7CisrCXU2NCBub25jZTsKKysJc3RydWN0IG5vaXNlX2tleXBhaXIgKmtleXBhaXI7CisrCWF0b21pY190IHN0YXRlOworKwl1MzIgbXR1OworKwl1OCBkczsKKyt9OworKworKyNkZWZpbmUgUEFDS0VUX0NCKHNrYikgKChzdHJ1Y3QgcGFja2V0X2NiICopKChza2IpLT5jYikpCisrI2RlZmluZSBQQUNLRVRfUEVFUihza2IpIChQQUNLRVRfQ0Ioc2tiKS0+a2V5cGFpci0+ZW50cnkucGVlcikKKysKKysvKiBSZXR1cm5zIGVpdGhlciB0aGUgY29ycmVjdCBza2ItPnByb3RvY29sIHZhbHVlLCBvciAwIGlmIGludmFsaWQuICovCisrc3RhdGljIGlubGluZSBfX2JlMTYgd2dfc2tiX2V4YW1pbmVfdW50cnVzdGVkX2lwX2hkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorK3sKKysJaWYgKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpID49IHNrYi0+aGVhZCAmJgorKwkgICAgKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgc2l6ZW9mKHN0cnVjdCBpcGhkcikpIDw9CisrCQkgICAgc2tiX3RhaWxfcG9pbnRlcihza2IpICYmCisrCSAgICBpcF9oZHIoc2tiKS0+dmVyc2lvbiA9PSA0KQorKwkJcmV0dXJuIGh0b25zKEVUSF9QX0lQKTsKKysJaWYgKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpID49IHNrYi0+aGVhZCAmJgorKwkgICAgKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkgPD0KKysJCSAgICBza2JfdGFpbF9wb2ludGVyKHNrYikgJiYKKysJICAgIGlwdjZfaGRyKHNrYiktPnZlcnNpb24gPT0gNikKKysJCXJldHVybiBodG9ucyhFVEhfUF9JUFY2KTsKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbmxpbmUgdm9pZCB3Z19yZXNldF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKKyt7CisrCWNvbnN0IGludCBwZm1lbWFsbG9jID0gc2tiLT5wZm1lbWFsbG9jOworKworKwlza2Jfc2NydWJfcGFja2V0KHNrYiwgdHJ1ZSk7CisrCW1lbXNldCgmc2tiLT5oZWFkZXJzX3N0YXJ0LCAwLAorKwkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIGhlYWRlcnNfZW5kKSAtCisrCQkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIGhlYWRlcnNfc3RhcnQpKTsKKysJc2tiLT5wZm1lbWFsbG9jID0gcGZtZW1hbGxvYzsKKysJc2tiLT5xdWV1ZV9tYXBwaW5nID0gMDsKKysJc2tiLT5ub2hkciA9IDA7CisrCXNrYi0+cGVla2VkID0gMDsKKysJc2tiLT5tYWNfbGVuID0gMDsKKysJc2tiLT5kZXYgPSBOVUxMOworKyNpZmRlZiBDT05GSUdfTkVUX1NDSEVECisrCXNrYi0+dGNfaW5kZXggPSAwOworKyNlbmRpZgorKwlza2JfcmVzZXRfcmVkaXJlY3Qoc2tiKTsKKysJc2tiLT5oZHJfbGVuID0gc2tiX2hlYWRyb29tKHNrYik7CisrCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CisrCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOworKwlza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOworKwlza2JfcHJvYmVfdHJhbnNwb3J0X2hlYWRlcihza2IpOworKwlza2JfcmVzZXRfaW5uZXJfaGVhZGVycyhza2IpOworK30KKysKKytzdGF0aWMgaW5saW5lIGludCB3Z19jcHVtYXNrX2Nob29zZV9vbmxpbmUoaW50ICpzdG9yZWRfY3B1LCB1bnNpZ25lZCBpbnQgaWQpCisreworKwl1bnNpZ25lZCBpbnQgY3B1ID0gKnN0b3JlZF9jcHUsIGNwdV9pbmRleCwgaTsKKysKKysJaWYgKHVubGlrZWx5KGNwdSA9PSBucl9jcHVtYXNrX2JpdHMgfHwKKysJCSAgICAgIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBjcHVfb25saW5lX21hc2spKSkgeworKwkJY3B1X2luZGV4ID0gaWQgJSBjcHVtYXNrX3dlaWdodChjcHVfb25saW5lX21hc2spOworKwkJY3B1ID0gY3B1bWFza19maXJzdChjcHVfb25saW5lX21hc2spOworKwkJZm9yIChpID0gMDsgaSA8IGNwdV9pbmRleDsgKytpKQorKwkJCWNwdSA9IGNwdW1hc2tfbmV4dChjcHUsIGNwdV9vbmxpbmVfbWFzayk7CisrCQkqc3RvcmVkX2NwdSA9IGNwdTsKKysJfQorKwlyZXR1cm4gY3B1OworK30KKysKKysvKiBUaGlzIGZ1bmN0aW9uIGlzIHJhY3ksIGluIHRoZSBzZW5zZSB0aGF0IG5leHQgaXMgdW5sb2NrZWQsIHNvIGl0IGNvdWxkIHJldHVybgorKyAqIHRoZSBzYW1lIENQVSB0d2ljZS4gQSByYWNlLWZyZWUgdmVyc2lvbiBvZiB0aGlzIHdvdWxkIGJlIHRvIGluc3RlYWQgc3RvcmUgYW4KKysgKiBhdG9taWMgc2VxdWVuY2UgbnVtYmVyLCBkbyBhbiBpbmNyZW1lbnQtYW5kLXJldHVybiwgYW5kIHRoZW4gaXRlcmF0ZSB0aHJvdWdoCisrICogZXZlcnkgcG9zc2libGUgQ1BVIHVudGlsIHdlIGdldCB0byB0aGF0IGluZGV4IC0tIGNob29zZV9jcHUuIEhvd2V2ZXIgdGhhdCdzCisrICogYSBiaXQgc2xvd2VyLCBhbmQgaXQgZG9lc24ndCBzZWVtIGxpa2UgdGhpcyBwb3RlbnRpYWwgcmFjZSBhY3R1YWxseQorKyAqIGludHJvZHVjZXMgYW55IHBlcmZvcm1hbmNlIGxvc3MsIHNvIHdlIGxpdmUgd2l0aCBpdC4KKysgKi8KKytzdGF0aWMgaW5saW5lIGludCB3Z19jcHVtYXNrX25leHRfb25saW5lKGludCAqbmV4dCkKKyt7CisrCWludCBjcHUgPSAqbmV4dDsKKysKKysJd2hpbGUgKHVubGlrZWx5KCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY3B1X29ubGluZV9tYXNrKSkpCisrCQljcHUgPSBjcHVtYXNrX25leHQoY3B1LCBjcHVfb25saW5lX21hc2spICUgbnJfY3B1bWFza19iaXRzOworKwkqbmV4dCA9IGNwdW1hc2tfbmV4dChjcHUsIGNwdV9vbmxpbmVfbWFzaykgJSBucl9jcHVtYXNrX2JpdHM7CisrCXJldHVybiBjcHU7CisrfQorKworK3N0YXRpYyBpbmxpbmUgaW50IHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcigKKysJc3RydWN0IGNyeXB0X3F1ZXVlICpkZXZpY2VfcXVldWUsIHN0cnVjdCBjcnlwdF9xdWV1ZSAqcGVlcl9xdWV1ZSwKKysJc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxLCBpbnQgKm5leHRfY3B1KQorK3sKKysJaW50IGNwdTsKKysKKysJYXRvbWljX3NldF9yZWxlYXNlKCZQQUNLRVRfQ0Ioc2tiKS0+c3RhdGUsIFBBQ0tFVF9TVEFURV9VTkNSWVBURUQpOworKwkvKiBXZSBmaXJzdCBxdWV1ZSB0aGlzIHVwIGZvciB0aGUgcGVlciBpbmdlc3Rpb24sIGJ1dCB0aGUgY29uc3VtZXIKKysJICogd2lsbCB3YWl0IGZvciB0aGUgc3RhdGUgdG8gY2hhbmdlIHRvIENSWVBURUQgb3IgREVBRCBiZWZvcmUuCisrCSAqLworKwlpZiAodW5saWtlbHkocHRyX3JpbmdfcHJvZHVjZV9iaCgmcGVlcl9xdWV1ZS0+cmluZywgc2tiKSkpCisrCQlyZXR1cm4gLUVOT1NQQzsKKysJLyogVGhlbiB3ZSBxdWV1ZSBpdCB1cCBpbiB0aGUgZGV2aWNlIHF1ZXVlLCB3aGljaCBjb25zdW1lcyB0aGUKKysJICogcGFja2V0IGFzIHNvb24gYXMgaXQgY2FuLgorKwkgKi8KKysJY3B1ID0gd2dfY3B1bWFza19uZXh0X29ubGluZShuZXh0X2NwdSk7CisrCWlmICh1bmxpa2VseShwdHJfcmluZ19wcm9kdWNlX2JoKCZkZXZpY2VfcXVldWUtPnJpbmcsIHNrYikpKQorKwkJcmV0dXJuIC1FUElQRTsKKysJcXVldWVfd29ya19vbihjcHUsIHdxLCAmcGVyX2NwdV9wdHIoZGV2aWNlX3F1ZXVlLT53b3JrZXIsIGNwdSktPndvcmspOworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXIoc3RydWN0IGNyeXB0X3F1ZXVlICpxdWV1ZSwKKysJCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKysJCQkJCSAgICAgZW51bSBwYWNrZXRfc3RhdGUgc3RhdGUpCisreworKwkvKiBXZSB0YWtlIGEgcmVmZXJlbmNlLCBiZWNhdXNlIGFzIHNvb24gYXMgd2UgY2FsbCBhdG9taWNfc2V0LCB0aGUKKysJICogcGVlciBjYW4gYmUgZnJlZWQgZnJvbSBiZWxvdyB1cy4KKysJICovCisrCXN0cnVjdCB3Z19wZWVyICpwZWVyID0gd2dfcGVlcl9nZXQoUEFDS0VUX1BFRVIoc2tiKSk7CisrCisrCWF0b21pY19zZXRfcmVsZWFzZSgmUEFDS0VUX0NCKHNrYiktPnN0YXRlLCBzdGF0ZSk7CisrCXF1ZXVlX3dvcmtfb24od2dfY3B1bWFza19jaG9vc2Vfb25saW5lKCZwZWVyLT5zZXJpYWxfd29ya19jcHUsCisrCQkJCQkgICAgICAgcGVlci0+aW50ZXJuYWxfaWQpLAorKwkJICAgICAgcGVlci0+ZGV2aWNlLT5wYWNrZXRfY3J5cHRfd3EsICZxdWV1ZS0+d29yayk7CisrCXdnX3BlZXJfcHV0KHBlZXIpOworK30KKysKKytzdGF0aWMgaW5saW5lIHZvaWQgd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl9uYXBpKHN0cnVjdCBza19idWZmICpza2IsCisrCQkJCQkJICBlbnVtIHBhY2tldF9zdGF0ZSBzdGF0ZSkKKyt7CisrCS8qIFdlIHRha2UgYSByZWZlcmVuY2UsIGJlY2F1c2UgYXMgc29vbiBhcyB3ZSBjYWxsIGF0b21pY19zZXQsIHRoZQorKwkgKiBwZWVyIGNhbiBiZSBmcmVlZCBmcm9tIGJlbG93IHVzLgorKwkgKi8KKysJc3RydWN0IHdnX3BlZXIgKnBlZXIgPSB3Z19wZWVyX2dldChQQUNLRVRfUEVFUihza2IpKTsKKysKKysJYXRvbWljX3NldF9yZWxlYXNlKCZQQUNLRVRfQ0Ioc2tiKS0+c3RhdGUsIHN0YXRlKTsKKysJbmFwaV9zY2hlZHVsZSgmcGVlci0+bmFwaSk7CisrCXdnX3BlZXJfcHV0KHBlZXIpOworK30KKysKKysjaWZkZWYgREVCVUcKKytib29sIHdnX3BhY2tldF9jb3VudGVyX3NlbGZ0ZXN0KHZvaWQpOworKyNlbmRpZgorKworKyNlbmRpZiAvKiBfV0dfUVVFVUVJTkdfSCAqLworLS0tIC9kZXYvbnVsbAorKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JhdGVsaW1pdGVyLmMKK0BAIC0wLDAgKzEsMjIzIEBACisrLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKysvKgorKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKysgKi8KKysKKysjaW5jbHVkZSAicmF0ZWxpbWl0ZXIuaCIKKysjaW5jbHVkZSA8bGludXgvc2lwaGFzaC5oPgorKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisrI2luY2x1ZGUgPG5ldC9pcC5oPgorKworK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZW50cnlfY2FjaGU7Cisrc3RhdGljIGhzaXBoYXNoX2tleV90IGtleTsKKytzdGF0aWMgc3BpbmxvY2tfdCB0YWJsZV9sb2NrID0gX19TUElOX0xPQ0tfVU5MT0NLRUQoInJhdGVsaW1pdGVyX3RhYmxlX2xvY2siKTsKKytzdGF0aWMgREVGSU5FX01VVEVYKGluaXRfbG9jayk7Cisrc3RhdGljIHU2NCBpbml0X3JlZmNudDsgLyogUHJvdGVjdGVkIGJ5IGluaXRfbG9jaywgaGVuY2Ugbm90IGF0b21pYy4gKi8KKytzdGF0aWMgYXRvbWljX3QgdG90YWxfZW50cmllcyA9IEFUT01JQ19JTklUKDApOworK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWF4X2VudHJpZXMsIHRhYmxlX3NpemU7Cisrc3RhdGljIHZvaWQgd2dfcmF0ZWxpbWl0ZXJfZ2NfZW50cmllcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7Cisrc3RhdGljIERFQ0xBUkVfREVGRVJSQUJMRV9XT1JLKGdjX3dvcmssIHdnX3JhdGVsaW1pdGVyX2djX2VudHJpZXMpOworK3N0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCAqdGFibGVfdjQ7CisrI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCisrc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkICp0YWJsZV92NjsKKysjZW5kaWYKKysKKytzdHJ1Y3QgcmF0ZWxpbWl0ZXJfZW50cnkgeworKwl1NjQgbGFzdF90aW1lX25zLCB0b2tlbnMsIGlwOworKwl2b2lkICpuZXQ7CisrCXNwaW5sb2NrX3QgbG9jazsKKysJc3RydWN0IGhsaXN0X25vZGUgaGFzaDsKKysJc3RydWN0IHJjdV9oZWFkIHJjdTsKKyt9OworKworK2VudW0geworKwlQQUNLRVRTX1BFUl9TRUNPTkQgPSAyMCwKKysJUEFDS0VUU19CVVJTVEFCTEUgPSA1LAorKwlQQUNLRVRfQ09TVCA9IE5TRUNfUEVSX1NFQyAvIFBBQ0tFVFNfUEVSX1NFQ09ORCwKKysJVE9LRU5fTUFYID0gUEFDS0VUX0NPU1QgKiBQQUNLRVRTX0JVUlNUQUJMRQorK307CisrCisrc3RhdGljIHZvaWQgZW50cnlfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkKKyt7CisrCWttZW1fY2FjaGVfZnJlZShlbnRyeV9jYWNoZSwKKysJCQljb250YWluZXJfb2YocmN1LCBzdHJ1Y3QgcmF0ZWxpbWl0ZXJfZW50cnksIHJjdSkpOworKwlhdG9taWNfZGVjKCZ0b3RhbF9lbnRyaWVzKTsKKyt9CisrCisrc3RhdGljIHZvaWQgZW50cnlfdW5pbml0KHN0cnVjdCByYXRlbGltaXRlcl9lbnRyeSAqZW50cnkpCisreworKwlobGlzdF9kZWxfcmN1KCZlbnRyeS0+aGFzaCk7CisrCWNhbGxfcmN1KCZlbnRyeS0+cmN1LCBlbnRyeV9mcmVlKTsKKyt9CisrCisrLyogQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggYSBOVUxMIHdvcmsgdW5pbml0cyBhbGwgZW50cmllcy4gKi8KKytzdGF0aWMgdm9pZCB3Z19yYXRlbGltaXRlcl9nY19lbnRyaWVzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKKyt7CisrCWNvbnN0IHU2NCBub3cgPSBrdGltZV9nZXRfY29hcnNlX2Jvb3R0aW1lX25zKCk7CisrCXN0cnVjdCByYXRlbGltaXRlcl9lbnRyeSAqZW50cnk7CisrCXN0cnVjdCBobGlzdF9ub2RlICp0ZW1wOworKwl1bnNpZ25lZCBpbnQgaTsKKysKKysJZm9yIChpID0gMDsgaSA8IHRhYmxlX3NpemU7ICsraSkgeworKwkJc3Bpbl9sb2NrKCZ0YWJsZV9sb2NrKTsKKysJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIHRlbXAsICZ0YWJsZV92NFtpXSwgaGFzaCkgeworKwkJCWlmICh1bmxpa2VseSghd29yaykgfHwKKysJCQkgICAgbm93IC0gZW50cnktPmxhc3RfdGltZV9ucyA+IE5TRUNfUEVSX1NFQykKKysJCQkJZW50cnlfdW5pbml0KGVudHJ5KTsKKysJCX0KKysjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKKysJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIHRlbXAsICZ0YWJsZV92NltpXSwgaGFzaCkgeworKwkJCWlmICh1bmxpa2VseSghd29yaykgfHwKKysJCQkgICAgbm93IC0gZW50cnktPmxhc3RfdGltZV9ucyA+IE5TRUNfUEVSX1NFQykKKysJCQkJZW50cnlfdW5pbml0KGVudHJ5KTsKKysJCX0KKysjZW5kaWYKKysJCXNwaW5fdW5sb2NrKCZ0YWJsZV9sb2NrKTsKKysJCWlmIChsaWtlbHkod29yaykpCisrCQkJY29uZF9yZXNjaGVkKCk7CisrCX0KKysJaWYgKGxpa2VseSh3b3JrKSkKKysJCXF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fcG93ZXJfZWZmaWNpZW50X3dxLCAmZ2Nfd29yaywgSFopOworK30KKysKKytib29sIHdnX3JhdGVsaW1pdGVyX2FsbG93KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCkKKyt7CisrCS8qIFdlIG9ubHkgdGFrZSB0aGUgYm90dG9tIGhhbGYgb2YgdGhlIG5ldCBwb2ludGVyLCBzbyB0aGF0IHdlIGNhbiBoYXNoCisrCSAqIDMgd29yZHMgaW4gdGhlIGVuZC4gVGhpcyB3YXksIHNpcGhhc2gncyBsZW4gcGFyYW0gZml0cyBpbnRvIHRoZSBmaW5hbAorKwkgKiB1MzIsIGFuZCB3ZSBkb24ndCBpbmN1ciBhbiBleHRyYSByb3VuZC4KKysJICovCisrCWNvbnN0IHUzMiBuZXRfd29yZCA9ICh1bnNpZ25lZCBsb25nKW5ldDsKKysJc3RydWN0IHJhdGVsaW1pdGVyX2VudHJ5ICplbnRyeTsKKysJc3RydWN0IGhsaXN0X2hlYWQgKmJ1Y2tldDsKKysJdTY0IGlwOworKworKwlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHsKKysJCWlwID0gKHU2NCBfX2ZvcmNlKWlwX2hkcihza2IpLT5zYWRkcjsKKysJCWJ1Y2tldCA9ICZ0YWJsZV92NFtoc2lwaGFzaF8ydTMyKG5ldF93b3JkLCBpcCwgJmtleSkgJgorKwkJCQkgICAodGFibGVfc2l6ZSAtIDEpXTsKKysJfQorKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQorKwllbHNlIGlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7CisrCQkvKiBPbmx5IHVzZSA2NCBiaXRzLCBzbyBhcyB0byByYXRlbGltaXQgdGhlIHdob2xlIC82NC4gKi8KKysJCW1lbWNweSgmaXAsICZpcHY2X2hkcihza2IpLT5zYWRkciwgc2l6ZW9mKGlwKSk7CisrCQlidWNrZXQgPSAmdGFibGVfdjZbaHNpcGhhc2hfM3UzMihuZXRfd29yZCwgaXAgPj4gMzIsIGlwLCAma2V5KSAmCisrCQkJCSAgICh0YWJsZV9zaXplIC0gMSldOworKwl9CisrI2VuZGlmCisrCWVsc2UKKysJCXJldHVybiBmYWxzZTsKKysJcmN1X3JlYWRfbG9jaygpOworKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZW50cnksIGJ1Y2tldCwgaGFzaCkgeworKwkJaWYgKGVudHJ5LT5uZXQgPT0gbmV0ICYmIGVudHJ5LT5pcCA9PSBpcCkgeworKwkJCXU2NCBub3csIHRva2VuczsKKysJCQlib29sIHJldDsKKysJCQkvKiBRdWFzaS1pbnNwaXJlZCBieSBuZnRfbGltaXQuYywgYnV0IHRoaXMgaXMgYWN0dWFsbHkgYQorKwkJCSAqIHNsaWdodGx5IGRpZmZlcmVudCBhbGdvcml0aG0uIE5hbWVseSwgd2UgaW5jb3Jwb3JhdGUKKysJCQkgKiB0aGUgYnVyc3QgYXMgcGFydCBvZiB0aGUgbWF4aW11bSB0b2tlbnMsIHJhdGhlciB0aGFuCisrCQkJICogYXMgcGFydCBvZiB0aGUgcmF0ZS4KKysJCQkgKi8KKysJCQlzcGluX2xvY2soJmVudHJ5LT5sb2NrKTsKKysJCQlub3cgPSBrdGltZV9nZXRfY29hcnNlX2Jvb3R0aW1lX25zKCk7CisrCQkJdG9rZW5zID0gbWluX3QodTY0LCBUT0tFTl9NQVgsCisrCQkJCSAgICAgICBlbnRyeS0+dG9rZW5zICsgbm93IC0KKysJCQkJCSAgICAgICBlbnRyeS0+bGFzdF90aW1lX25zKTsKKysJCQllbnRyeS0+bGFzdF90aW1lX25zID0gbm93OworKwkJCXJldCA9IHRva2VucyA+PSBQQUNLRVRfQ09TVDsKKysJCQllbnRyeS0+dG9rZW5zID0gcmV0ID8gdG9rZW5zIC0gUEFDS0VUX0NPU1QgOiB0b2tlbnM7CisrCQkJc3Bpbl91bmxvY2soJmVudHJ5LT5sb2NrKTsKKysJCQlyY3VfcmVhZF91bmxvY2soKTsKKysJCQlyZXR1cm4gcmV0OworKwkJfQorKwl9CisrCXJjdV9yZWFkX3VubG9jaygpOworKworKwlpZiAoYXRvbWljX2luY19yZXR1cm4oJnRvdGFsX2VudHJpZXMpID4gbWF4X2VudHJpZXMpCisrCQlnb3RvIGVycl9vb207CisrCisrCWVudHJ5ID0ga21lbV9jYWNoZV9hbGxvYyhlbnRyeV9jYWNoZSwgR0ZQX0tFUk5FTCk7CisrCWlmICh1bmxpa2VseSghZW50cnkpKQorKwkJZ290byBlcnJfb29tOworKworKwllbnRyeS0+bmV0ID0gbmV0OworKwllbnRyeS0+aXAgPSBpcDsKKysJSU5JVF9ITElTVF9OT0RFKCZlbnRyeS0+aGFzaCk7CisrCXNwaW5fbG9ja19pbml0KCZlbnRyeS0+bG9jayk7CisrCWVudHJ5LT5sYXN0X3RpbWVfbnMgPSBrdGltZV9nZXRfY29hcnNlX2Jvb3R0aW1lX25zKCk7CisrCWVudHJ5LT50b2tlbnMgPSBUT0tFTl9NQVggLSBQQUNLRVRfQ09TVDsKKysJc3Bpbl9sb2NrKCZ0YWJsZV9sb2NrKTsKKysJaGxpc3RfYWRkX2hlYWRfcmN1KCZlbnRyeS0+aGFzaCwgYnVja2V0KTsKKysJc3Bpbl91bmxvY2soJnRhYmxlX2xvY2spOworKwlyZXR1cm4gdHJ1ZTsKKysKKytlcnJfb29tOgorKwlhdG9taWNfZGVjKCZ0b3RhbF9lbnRyaWVzKTsKKysJcmV0dXJuIGZhbHNlOworK30KKysKKytpbnQgd2dfcmF0ZWxpbWl0ZXJfaW5pdCh2b2lkKQorK3sKKysJbXV0ZXhfbG9jaygmaW5pdF9sb2NrKTsKKysJaWYgKCsraW5pdF9yZWZjbnQgIT0gMSkKKysJCWdvdG8gb3V0OworKworKwllbnRyeV9jYWNoZSA9IEtNRU1fQ0FDSEUocmF0ZWxpbWl0ZXJfZW50cnksIDApOworKwlpZiAoIWVudHJ5X2NhY2hlKQorKwkJZ290byBlcnI7CisrCisrCS8qIHh0X2hhc2hsaW1pdC5jIHVzZXMgYSBzbGlnaHRseSBkaWZmZXJlbnQgYWxnb3JpdGhtIGZvciByYXRlbGltaXRpbmcsCisrCSAqIGJ1dCB3aGF0IGl0IHNoYXJlcyBpbiBjb21tb24gaXMgdGhhdCBpdCB1c2VzIGEgbWFzc2l2ZSBoYXNodGFibGUuIFNvLAorKwkgKiB3ZSBib3Jyb3cgdGhlaXIgd2lzZG9tIGFib3V0IGdvb2QgdGFibGUgc2l6ZXMgb24gZGlmZmVyZW50IHN5c3RlbXMKKysJICogZGVwZW5kZW50IG9uIFJBTS4gVGhpcyBjYWxjdWxhdGlvbiBoZXJlIGNvbWVzIGZyb20gdGhlcmUuCisrCSAqLworKwl0YWJsZV9zaXplID0gKHRvdGFscmFtX3BhZ2VzKCkgPiAoMVUgPDwgMzApIC8gUEFHRV9TSVpFKSA/IDgxOTIgOgorKwkJbWF4X3QodW5zaWduZWQgbG9uZywgMTYsIHJvdW5kdXBfcG93X29mX3R3bygKKysJCQkodG90YWxyYW1fcGFnZXMoKSA8PCBQQUdFX1NISUZUKSAvCisrCQkJKDFVIDw8IDE0KSAvIHNpemVvZihzdHJ1Y3QgaGxpc3RfaGVhZCkpKTsKKysJbWF4X2VudHJpZXMgPSB0YWJsZV9zaXplICogODsKKysKKysJdGFibGVfdjQgPSBrdnphbGxvYyh0YWJsZV9zaXplICogc2l6ZW9mKCp0YWJsZV92NCksIEdGUF9LRVJORUwpOworKwlpZiAodW5saWtlbHkoIXRhYmxlX3Y0KSkKKysJCWdvdG8gZXJyX2ttZW1jYWNoZTsKKysKKysjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKKysJdGFibGVfdjYgPSBrdnphbGxvYyh0YWJsZV9zaXplICogc2l6ZW9mKCp0YWJsZV92NiksIEdGUF9LRVJORUwpOworKwlpZiAodW5saWtlbHkoIXRhYmxlX3Y2KSkgeworKwkJa3ZmcmVlKHRhYmxlX3Y0KTsKKysJCWdvdG8gZXJyX2ttZW1jYWNoZTsKKysJfQorKyNlbmRpZgorKworKwlxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX3Bvd2VyX2VmZmljaWVudF93cSwgJmdjX3dvcmssIEhaKTsKKysJZ2V0X3JhbmRvbV9ieXRlcygma2V5LCBzaXplb2Yoa2V5KSk7Cisrb3V0OgorKwltdXRleF91bmxvY2soJmluaXRfbG9jayk7CisrCXJldHVybiAwOworKworK2Vycl9rbWVtY2FjaGU6CisrCWttZW1fY2FjaGVfZGVzdHJveShlbnRyeV9jYWNoZSk7CisrZXJyOgorKwktLWluaXRfcmVmY250OworKwltdXRleF91bmxvY2soJmluaXRfbG9jayk7CisrCXJldHVybiAtRU5PTUVNOworK30KKysKKyt2b2lkIHdnX3JhdGVsaW1pdGVyX3VuaW5pdCh2b2lkKQorK3sKKysJbXV0ZXhfbG9jaygmaW5pdF9sb2NrKTsKKysJaWYgKCFpbml0X3JlZmNudCB8fCAtLWluaXRfcmVmY250KQorKwkJZ290byBvdXQ7CisrCisrCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZ2Nfd29yayk7CisrCXdnX3JhdGVsaW1pdGVyX2djX2VudHJpZXMoTlVMTCk7CisrCXJjdV9iYXJyaWVyKCk7CisrCWt2ZnJlZSh0YWJsZV92NCk7CisrI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCisrCWt2ZnJlZSh0YWJsZV92Nik7CisrI2VuZGlmCisrCWttZW1fY2FjaGVfZGVzdHJveShlbnRyeV9jYWNoZSk7Cisrb3V0OgorKwltdXRleF91bmxvY2soJmluaXRfbG9jayk7CisrfQorKworKyNpbmNsdWRlICJzZWxmdGVzdC9yYXRlbGltaXRlci5jIgorLS0tIC9kZXYvbnVsbAorKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JhdGVsaW1pdGVyLmgKK0BAIC0wLDAgKzEsMTkgQEAKKysvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworKy8qCisrICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKyAqLworKworKyNpZm5kZWYgX1dHX1JBVEVMSU1JVEVSX0gKKysjZGVmaW5lIF9XR19SQVRFTElNSVRFUl9ICisrCisrI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorKworK2ludCB3Z19yYXRlbGltaXRlcl9pbml0KHZvaWQpOworK3ZvaWQgd2dfcmF0ZWxpbWl0ZXJfdW5pbml0KHZvaWQpOworK2Jvb2wgd2dfcmF0ZWxpbWl0ZXJfYWxsb3coc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0KTsKKysKKysjaWZkZWYgREVCVUcKKytib29sIHdnX3JhdGVsaW1pdGVyX3NlbGZ0ZXN0KHZvaWQpOworKyNlbmRpZgorKworKyNlbmRpZiAvKiBfV0dfUkFURUxJTUlURVJfSCAqLworLS0tIC9kZXYvbnVsbAorKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYworQEAgLTAsMCArMSw1OTUgQEAKKysvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorKy8qCisrICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKyAqLworKworKyNpbmNsdWRlICJxdWV1ZWluZy5oIgorKyNpbmNsdWRlICJkZXZpY2UuaCIKKysjaW5jbHVkZSAicGVlci5oIgorKyNpbmNsdWRlICJ0aW1lcnMuaCIKKysjaW5jbHVkZSAibWVzc2FnZXMuaCIKKysjaW5jbHVkZSAiY29va2llLmgiCisrI2luY2x1ZGUgInNvY2tldC5oIgorKworKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorKyNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CisrI2luY2x1ZGUgPGxpbnV4L3VkcC5oPgorKyNpbmNsdWRlIDxuZXQvaXBfdHVubmVscy5oPgorKworKy8qIE11c3QgYmUgY2FsbGVkIHdpdGggYmggZGlzYWJsZWQuICovCisrc3RhdGljIHZvaWQgdXBkYXRlX3J4X3N0YXRzKHN0cnVjdCB3Z19wZWVyICpwZWVyLCBzaXplX3QgbGVuKQorK3sKKysJc3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnRzdGF0cyA9CisrCQlnZXRfY3B1X3B0cihwZWVyLT5kZXZpY2UtPmRldi0+dHN0YXRzKTsKKysKKysJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmdHN0YXRzLT5zeW5jcCk7CisrCSsrdHN0YXRzLT5yeF9wYWNrZXRzOworKwl0c3RhdHMtPnJ4X2J5dGVzICs9IGxlbjsKKysJcGVlci0+cnhfYnl0ZXMgKz0gbGVuOworKwl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmdHN0YXRzLT5zeW5jcCk7CisrCXB1dF9jcHVfcHRyKHRzdGF0cyk7CisrfQorKworKyNkZWZpbmUgU0tCX1RZUEVfTEUzMihza2IpICgoKHN0cnVjdCBtZXNzYWdlX2hlYWRlciAqKShza2IpLT5kYXRhKS0+dHlwZSkKKysKKytzdGF0aWMgc2l6ZV90IHZhbGlkYXRlX2hlYWRlcl9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYikKKyt7CisrCWlmICh1bmxpa2VseShza2ItPmxlbiA8IHNpemVvZihzdHJ1Y3QgbWVzc2FnZV9oZWFkZXIpKSkKKysJCXJldHVybiAwOworKwlpZiAoU0tCX1RZUEVfTEUzMihza2IpID09IGNwdV90b19sZTMyKE1FU1NBR0VfREFUQSkgJiYKKysJICAgIHNrYi0+bGVuID49IE1FU1NBR0VfTUlOSU1VTV9MRU5HVEgpCisrCQlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBtZXNzYWdlX2RhdGEpOworKwlpZiAoU0tCX1RZUEVfTEUzMihza2IpID09IGNwdV90b19sZTMyKE1FU1NBR0VfSEFORFNIQUtFX0lOSVRJQVRJT04pICYmCisrCSAgICBza2ItPmxlbiA9PSBzaXplb2Yoc3RydWN0IG1lc3NhZ2VfaGFuZHNoYWtlX2luaXRpYXRpb24pKQorKwkJcmV0dXJuIHNpemVvZihzdHJ1Y3QgbWVzc2FnZV9oYW5kc2hha2VfaW5pdGlhdGlvbik7CisrCWlmIChTS0JfVFlQRV9MRTMyKHNrYikgPT0gY3B1X3RvX2xlMzIoTUVTU0FHRV9IQU5EU0hBS0VfUkVTUE9OU0UpICYmCisrCSAgICBza2ItPmxlbiA9PSBzaXplb2Yoc3RydWN0IG1lc3NhZ2VfaGFuZHNoYWtlX3Jlc3BvbnNlKSkKKysJCXJldHVybiBzaXplb2Yoc3RydWN0IG1lc3NhZ2VfaGFuZHNoYWtlX3Jlc3BvbnNlKTsKKysJaWYgKFNLQl9UWVBFX0xFMzIoc2tiKSA9PSBjcHVfdG9fbGUzMihNRVNTQUdFX0hBTkRTSEFLRV9DT09LSUUpICYmCisrCSAgICBza2ItPmxlbiA9PSBzaXplb2Yoc3RydWN0IG1lc3NhZ2VfaGFuZHNoYWtlX2Nvb2tpZSkpCisrCQlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBtZXNzYWdlX2hhbmRzaGFrZV9jb29raWUpOworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGludCBwcmVwYXJlX3NrYl9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHdnX2RldmljZSAqd2cpCisreworKwlzaXplX3QgZGF0YV9vZmZzZXQsIGRhdGFfbGVuLCBoZWFkZXJfbGVuOworKwlzdHJ1Y3QgdWRwaGRyICp1ZHA7CisrCisrCWlmICh1bmxpa2VseSh3Z19za2JfZXhhbWluZV91bnRydXN0ZWRfaXBfaGRyKHNrYikgIT0gc2tiLT5wcm90b2NvbCB8fAorKwkJICAgICBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpIDwgc2tiLT5oZWFkIHx8CisrCQkgICAgIChza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKSA+CisrCQkJICAgICBza2JfdGFpbF9wb2ludGVyKHNrYikpKQorKwkJcmV0dXJuIC1FSU5WQUw7IC8qIEJvZ3VzIElQIGhlYWRlciAqLworKwl1ZHAgPSB1ZHBfaGRyKHNrYik7CisrCWRhdGFfb2Zmc2V0ID0gKHU4ICopdWRwIC0gc2tiLT5kYXRhOworKwlpZiAodW5saWtlbHkoZGF0YV9vZmZzZXQgPiBVMTZfTUFYIHx8CisrCQkgICAgIGRhdGFfb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpID4gc2tiLT5sZW4pKQorKwkJLyogUGFja2V0IGhhcyBvZmZzZXQgYXQgaW1wb3NzaWJsZSBsb2NhdGlvbiBvciBpc24ndCBiaWcgZW5vdWdoCisrCQkgKiB0byBoYXZlIFVEUCBmaWVsZHMuCisrCQkgKi8KKysJCXJldHVybiAtRUlOVkFMOworKwlkYXRhX2xlbiA9IG50b2hzKHVkcC0+bGVuKTsKKysJaWYgKHVubGlrZWx5KGRhdGFfbGVuIDwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpIHx8CisrCQkgICAgIGRhdGFfbGVuID4gc2tiLT5sZW4gLSBkYXRhX29mZnNldCkpCisrCQkvKiBVRFAgcGFja2V0IGlzIHJlcG9ydGluZyB0b28gc21hbGwgb2YgYSBzaXplIG9yIGx5aW5nIGFib3V0CisrCQkgKiBpdHMgc2l6ZS4KKysJCSAqLworKwkJcmV0dXJuIC1FSU5WQUw7CisrCWRhdGFfbGVuIC09IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKKysJZGF0YV9vZmZzZXQgPSAodTggKil1ZHAgKyBzaXplb2Yoc3RydWN0IHVkcGhkcikgLSBza2ItPmRhdGE7CisrCWlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsCisrCQkJCWRhdGFfb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBtZXNzYWdlX2hlYWRlcikpIHx8CisrCQkgICAgIHBza2JfdHJpbShza2IsIGRhdGFfbGVuICsgZGF0YV9vZmZzZXQpIDwgMCkpCisrCQlyZXR1cm4gLUVJTlZBTDsKKysJc2tiX3B1bGwoc2tiLCBkYXRhX29mZnNldCk7CisrCWlmICh1bmxpa2VseShza2ItPmxlbiAhPSBkYXRhX2xlbikpCisrCQkvKiBGaW5hbCBsZW4gZG9lcyBub3QgYWdyZWUgd2l0aCBjYWxjdWxhdGVkIGxlbiAqLworKwkJcmV0dXJuIC1FSU5WQUw7CisrCWhlYWRlcl9sZW4gPSB2YWxpZGF0ZV9oZWFkZXJfbGVuKHNrYik7CisrCWlmICh1bmxpa2VseSghaGVhZGVyX2xlbikpCisrCQlyZXR1cm4gLUVJTlZBTDsKKysJX19za2JfcHVzaChza2IsIGRhdGFfb2Zmc2V0KTsKKysJaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgZGF0YV9vZmZzZXQgKyBoZWFkZXJfbGVuKSkpCisrCQlyZXR1cm4gLUVJTlZBTDsKKysJX19za2JfcHVsbChza2IsIGRhdGFfb2Zmc2V0KTsKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyB2b2lkIHdnX3JlY2VpdmVfaGFuZHNoYWtlX3BhY2tldChzdHJ1Y3Qgd2dfZGV2aWNlICp3ZywKKysJCQkJCXN0cnVjdCBza19idWZmICpza2IpCisreworKwllbnVtIGNvb2tpZV9tYWNfc3RhdGUgbWFjX3N0YXRlOworKwlzdHJ1Y3Qgd2dfcGVlciAqcGVlciA9IE5VTEw7CisrCS8qIFRoaXMgaXMgZ2xvYmFsLCBzbyB0aGF0IG91ciBsb2FkIGNhbGN1bGF0aW9uIGFwcGxpZXMgdG8gdGhlIHdob2xlCisrCSAqIHN5c3RlbS4gV2UgZG9uJ3QgY2FyZSBhYm91dCByYWNlcyB3aXRoIGl0IGF0IGFsbC4KKysJICovCisrCXN0YXRpYyB1NjQgbGFzdF91bmRlcl9sb2FkOworKwlib29sIHBhY2tldF9uZWVkc19jb29raWU7CisrCWJvb2wgdW5kZXJfbG9hZDsKKysKKysJaWYgKFNLQl9UWVBFX0xFMzIoc2tiKSA9PSBjcHVfdG9fbGUzMihNRVNTQUdFX0hBTkRTSEFLRV9DT09LSUUpKSB7CisrCQluZXRfZGJnX3NrYl9yYXRlbGltaXRlZCgiJXM6IFJlY2VpdmluZyBjb29raWUgcmVzcG9uc2UgZnJvbSAlcElTcGZzY1xuIiwKKysJCQkJCXdnLT5kZXYtPm5hbWUsIHNrYik7CisrCQl3Z19jb29raWVfbWVzc2FnZV9jb25zdW1lKAorKwkJCShzdHJ1Y3QgbWVzc2FnZV9oYW5kc2hha2VfY29va2llICopc2tiLT5kYXRhLCB3Zyk7CisrCQlyZXR1cm47CisrCX0KKysKKysJdW5kZXJfbG9hZCA9IHNrYl9xdWV1ZV9sZW4oJndnLT5pbmNvbWluZ19oYW5kc2hha2VzKSA+PQorKwkJICAgICBNQVhfUVVFVUVEX0lOQ09NSU5HX0hBTkRTSEFLRVMgLyA4OworKwlpZiAodW5kZXJfbG9hZCkKKysJCWxhc3RfdW5kZXJfbG9hZCA9IGt0aW1lX2dldF9jb2Fyc2VfYm9vdHRpbWVfbnMoKTsKKysJZWxzZSBpZiAobGFzdF91bmRlcl9sb2FkKQorKwkJdW5kZXJfbG9hZCA9ICF3Z19iaXJ0aGRhdGVfaGFzX2V4cGlyZWQobGFzdF91bmRlcl9sb2FkLCAxKTsKKysJbWFjX3N0YXRlID0gd2dfY29va2llX3ZhbGlkYXRlX3BhY2tldCgmd2ctPmNvb2tpZV9jaGVja2VyLCBza2IsCisrCQkJCQkgICAgICB1bmRlcl9sb2FkKTsKKysJaWYgKCh1bmRlcl9sb2FkICYmIG1hY19zdGF0ZSA9PSBWQUxJRF9NQUNfV0lUSF9DT09LSUUpIHx8CisrCSAgICAoIXVuZGVyX2xvYWQgJiYgbWFjX3N0YXRlID09IFZBTElEX01BQ19CVVRfTk9fQ09PS0lFKSkgeworKwkJcGFja2V0X25lZWRzX2Nvb2tpZSA9IGZhbHNlOworKwl9IGVsc2UgaWYgKHVuZGVyX2xvYWQgJiYgbWFjX3N0YXRlID09IFZBTElEX01BQ19CVVRfTk9fQ09PS0lFKSB7CisrCQlwYWNrZXRfbmVlZHNfY29va2llID0gdHJ1ZTsKKysJfSBlbHNlIHsKKysJCW5ldF9kYmdfc2tiX3JhdGVsaW1pdGVkKCIlczogSW52YWxpZCBNQUMgb2YgaGFuZHNoYWtlLCBkcm9wcGluZyBwYWNrZXQgZnJvbSAlcElTcGZzY1xuIiwKKysJCQkJCXdnLT5kZXYtPm5hbWUsIHNrYik7CisrCQlyZXR1cm47CisrCX0KKysKKysJc3dpdGNoIChTS0JfVFlQRV9MRTMyKHNrYikpIHsKKysJY2FzZSBjcHVfdG9fbGUzMihNRVNTQUdFX0hBTkRTSEFLRV9JTklUSUFUSU9OKTogeworKwkJc3RydWN0IG1lc3NhZ2VfaGFuZHNoYWtlX2luaXRpYXRpb24gKm1lc3NhZ2UgPQorKwkJCShzdHJ1Y3QgbWVzc2FnZV9oYW5kc2hha2VfaW5pdGlhdGlvbiAqKXNrYi0+ZGF0YTsKKysKKysJCWlmIChwYWNrZXRfbmVlZHNfY29va2llKSB7CisrCQkJd2dfcGFja2V0X3NlbmRfaGFuZHNoYWtlX2Nvb2tpZSh3Zywgc2tiLAorKwkJCQkJCQltZXNzYWdlLT5zZW5kZXJfaW5kZXgpOworKwkJCXJldHVybjsKKysJCX0KKysJCXBlZXIgPSB3Z19ub2lzZV9oYW5kc2hha2VfY29uc3VtZV9pbml0aWF0aW9uKG1lc3NhZ2UsIHdnKTsKKysJCWlmICh1bmxpa2VseSghcGVlcikpIHsKKysJCQluZXRfZGJnX3NrYl9yYXRlbGltaXRlZCgiJXM6IEludmFsaWQgaGFuZHNoYWtlIGluaXRpYXRpb24gZnJvbSAlcElTcGZzY1xuIiwKKysJCQkJCQl3Zy0+ZGV2LT5uYW1lLCBza2IpOworKwkJCXJldHVybjsKKysJCX0KKysJCXdnX3NvY2tldF9zZXRfcGVlcl9lbmRwb2ludF9mcm9tX3NrYihwZWVyLCBza2IpOworKwkJbmV0X2RiZ19yYXRlbGltaXRlZCgiJXM6IFJlY2VpdmluZyBoYW5kc2hha2UgaW5pdGlhdGlvbiBmcm9tIHBlZXIgJWxsdSAoJXBJU3Bmc2MpXG4iLAorKwkJCQkgICAgd2ctPmRldi0+bmFtZSwgcGVlci0+aW50ZXJuYWxfaWQsCisrCQkJCSAgICAmcGVlci0+ZW5kcG9pbnQuYWRkcik7CisrCQl3Z19wYWNrZXRfc2VuZF9oYW5kc2hha2VfcmVzcG9uc2UocGVlcik7CisrCQlicmVhazsKKysJfQorKwljYXNlIGNwdV90b19sZTMyKE1FU1NBR0VfSEFORFNIQUtFX1JFU1BPTlNFKTogeworKwkJc3RydWN0IG1lc3NhZ2VfaGFuZHNoYWtlX3Jlc3BvbnNlICptZXNzYWdlID0KKysJCQkoc3RydWN0IG1lc3NhZ2VfaGFuZHNoYWtlX3Jlc3BvbnNlICopc2tiLT5kYXRhOworKworKwkJaWYgKHBhY2tldF9uZWVkc19jb29raWUpIHsKKysJCQl3Z19wYWNrZXRfc2VuZF9oYW5kc2hha2VfY29va2llKHdnLCBza2IsCisrCQkJCQkJCW1lc3NhZ2UtPnNlbmRlcl9pbmRleCk7CisrCQkJcmV0dXJuOworKwkJfQorKwkJcGVlciA9IHdnX25vaXNlX2hhbmRzaGFrZV9jb25zdW1lX3Jlc3BvbnNlKG1lc3NhZ2UsIHdnKTsKKysJCWlmICh1bmxpa2VseSghcGVlcikpIHsKKysJCQluZXRfZGJnX3NrYl9yYXRlbGltaXRlZCgiJXM6IEludmFsaWQgaGFuZHNoYWtlIHJlc3BvbnNlIGZyb20gJXBJU3Bmc2NcbiIsCisrCQkJCQkJd2ctPmRldi0+bmFtZSwgc2tiKTsKKysJCQlyZXR1cm47CisrCQl9CisrCQl3Z19zb2NrZXRfc2V0X3BlZXJfZW5kcG9pbnRfZnJvbV9za2IocGVlciwgc2tiKTsKKysJCW5ldF9kYmdfcmF0ZWxpbWl0ZWQoIiVzOiBSZWNlaXZpbmcgaGFuZHNoYWtlIHJlc3BvbnNlIGZyb20gcGVlciAlbGx1ICglcElTcGZzYylcbiIsCisrCQkJCSAgICB3Zy0+ZGV2LT5uYW1lLCBwZWVyLT5pbnRlcm5hbF9pZCwKKysJCQkJICAgICZwZWVyLT5lbmRwb2ludC5hZGRyKTsKKysJCWlmICh3Z19ub2lzZV9oYW5kc2hha2VfYmVnaW5fc2Vzc2lvbigmcGVlci0+aGFuZHNoYWtlLAorKwkJCQkJCSAgICAgJnBlZXItPmtleXBhaXJzKSkgeworKwkJCXdnX3RpbWVyc19zZXNzaW9uX2Rlcml2ZWQocGVlcik7CisrCQkJd2dfdGltZXJzX2hhbmRzaGFrZV9jb21wbGV0ZShwZWVyKTsKKysJCQkvKiBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBlaXRoZXIgc2VuZCBhbnkgZXhpc3RpbmcKKysJCQkgKiBwYWNrZXRzIGluIHRoZSBxdWV1ZSBhbmQgbm90IHNlbmQgYSBrZWVwYWxpdmUsIHdoaWNoCisrCQkJICogaXMgdGhlIGJlc3QgY2FzZSwgT3IsIGlmIHRoZXJlJ3Mgbm90aGluZyBpbiB0aGUKKysJCQkgKiBxdWV1ZSwgaXQgd2lsbCBzZW5kIGEga2VlcGFsaXZlLCBpbiBvcmRlciB0byBnaXZlCisrCQkJICogaW1tZWRpYXRlIGNvbmZpcm1hdGlvbiBvZiB0aGUgc2Vzc2lvbi4KKysJCQkgKi8KKysJCQl3Z19wYWNrZXRfc2VuZF9rZWVwYWxpdmUocGVlcik7CisrCQl9CisrCQlicmVhazsKKysJfQorKwl9CisrCisrCWlmICh1bmxpa2VseSghcGVlcikpIHsKKysJCVdBUk4oMSwgIlNvbWVob3cgYSB3cm9uZyB0eXBlIG9mIHBhY2tldCB3b3VuZCB1cCBpbiB0aGUgaGFuZHNoYWtlIHF1ZXVlIVxuIik7CisrCQlyZXR1cm47CisrCX0KKysKKysJbG9jYWxfYmhfZGlzYWJsZSgpOworKwl1cGRhdGVfcnhfc3RhdHMocGVlciwgc2tiLT5sZW4pOworKwlsb2NhbF9iaF9lbmFibGUoKTsKKysKKysJd2dfdGltZXJzX2FueV9hdXRoZW50aWNhdGVkX3BhY2tldF9yZWNlaXZlZChwZWVyKTsKKysJd2dfdGltZXJzX2FueV9hdXRoZW50aWNhdGVkX3BhY2tldF90cmF2ZXJzYWwocGVlcik7CisrCXdnX3BlZXJfcHV0KHBlZXIpOworK30KKysKKyt2b2lkIHdnX3BhY2tldF9oYW5kc2hha2VfcmVjZWl2ZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorK3sKKysJc3RydWN0IHdnX2RldmljZSAqd2cgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG11bHRpY29yZV93b3JrZXIsCisrCQkJCQkgICAgd29yayktPnB0cjsKKysJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKysKKysJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmd2ctPmluY29taW5nX2hhbmRzaGFrZXMpKSAhPSBOVUxMKSB7CisrCQl3Z19yZWNlaXZlX2hhbmRzaGFrZV9wYWNrZXQod2csIHNrYik7CisrCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisrCQljb25kX3Jlc2NoZWQoKTsKKysJfQorK30KKysKKytzdGF0aWMgdm9pZCBrZWVwX2tleV9mcmVzaChzdHJ1Y3Qgd2dfcGVlciAqcGVlcikKKyt7CisrCXN0cnVjdCBub2lzZV9rZXlwYWlyICprZXlwYWlyOworKwlib29sIHNlbmQgPSBmYWxzZTsKKysKKysJaWYgKHBlZXItPnNlbnRfbGFzdG1pbnV0ZV9oYW5kc2hha2UpCisrCQlyZXR1cm47CisrCisrCXJjdV9yZWFkX2xvY2tfYmgoKTsKKysJa2V5cGFpciA9IHJjdV9kZXJlZmVyZW5jZV9iaChwZWVyLT5rZXlwYWlycy5jdXJyZW50X2tleXBhaXIpOworKwlpZiAobGlrZWx5KGtleXBhaXIgJiYgUkVBRF9PTkNFKGtleXBhaXItPnNlbmRpbmcuaXNfdmFsaWQpKSAmJgorKwkgICAga2V5cGFpci0+aV9hbV90aGVfaW5pdGlhdG9yICYmCisrCSAgICB1bmxpa2VseSh3Z19iaXJ0aGRhdGVfaGFzX2V4cGlyZWQoa2V5cGFpci0+c2VuZGluZy5iaXJ0aGRhdGUsCisrCQkJUkVKRUNUX0FGVEVSX1RJTUUgLSBLRUVQQUxJVkVfVElNRU9VVCAtIFJFS0VZX1RJTUVPVVQpKSkKKysJCXNlbmQgPSB0cnVlOworKwlyY3VfcmVhZF91bmxvY2tfYmgoKTsKKysKKysJaWYgKHNlbmQpIHsKKysJCXBlZXItPnNlbnRfbGFzdG1pbnV0ZV9oYW5kc2hha2UgPSB0cnVlOworKwkJd2dfcGFja2V0X3NlbmRfcXVldWVkX2hhbmRzaGFrZV9pbml0aWF0aW9uKHBlZXIsIGZhbHNlKTsKKysJfQorK30KKysKKytzdGF0aWMgYm9vbCBkZWNyeXB0X3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbm9pc2Vfc3ltbWV0cmljX2tleSAqa2V5KQorK3sKKysJc3RydWN0IHNjYXR0ZXJsaXN0IHNnW01BWF9TS0JfRlJBR1MgKyA4XTsKKysJc3RydWN0IHNrX2J1ZmYgKnRyYWlsZXI7CisrCXVuc2lnbmVkIGludCBvZmZzZXQ7CisrCWludCBudW1fZnJhZ3M7CisrCisrCWlmICh1bmxpa2VseSgha2V5KSkKKysJCXJldHVybiBmYWxzZTsKKysKKysJaWYgKHVubGlrZWx5KCFSRUFEX09OQ0Uoa2V5LT5pc192YWxpZCkgfHwKKysJCSAgd2dfYmlydGhkYXRlX2hhc19leHBpcmVkKGtleS0+YmlydGhkYXRlLCBSRUpFQ1RfQUZURVJfVElNRSkgfHwKKysJCSAga2V5LT5jb3VudGVyLnJlY2VpdmUuY291bnRlciA+PSBSRUpFQ1RfQUZURVJfTUVTU0FHRVMpKSB7CisrCQlXUklURV9PTkNFKGtleS0+aXNfdmFsaWQsIGZhbHNlKTsKKysJCXJldHVybiBmYWxzZTsKKysJfQorKworKwlQQUNLRVRfQ0Ioc2tiKS0+bm9uY2UgPQorKwkJbGU2NF90b19jcHUoKChzdHJ1Y3QgbWVzc2FnZV9kYXRhICopc2tiLT5kYXRhKS0+Y291bnRlcik7CisrCisrCS8qIFdlIGVuc3VyZSB0aGF0IHRoZSBuZXR3b3JrIGhlYWRlciBpcyBwYXJ0IG9mIHRoZSBwYWNrZXQgYmVmb3JlIHdlCisrCSAqIGNhbGwgc2tiX2Nvd19kYXRhLCBzbyB0aGF0IHRoZXJlJ3Mgbm8gY2hhbmNlIHRoYXQgZGF0YSBpcyByZW1vdmVkCisrCSAqIGZyb20gdGhlIHNrYiwgc28gdGhhdCBsYXRlciB3ZSBjYW4gZXh0cmFjdCB0aGUgb3JpZ2luYWwgZW5kcG9pbnQuCisrCSAqLworKwlvZmZzZXQgPSBza2ItPmRhdGEgLSBza2JfbmV0d29ya19oZWFkZXIoc2tiKTsKKysJc2tiX3B1c2goc2tiLCBvZmZzZXQpOworKwludW1fZnJhZ3MgPSBza2JfY293X2RhdGEoc2tiLCAwLCAmdHJhaWxlcik7CisrCW9mZnNldCArPSBzaXplb2Yoc3RydWN0IG1lc3NhZ2VfZGF0YSk7CisrCXNrYl9wdWxsKHNrYiwgb2Zmc2V0KTsKKysJaWYgKHVubGlrZWx5KG51bV9mcmFncyA8IDAgfHwgbnVtX2ZyYWdzID4gQVJSQVlfU0laRShzZykpKQorKwkJcmV0dXJuIGZhbHNlOworKworKwlzZ19pbml0X3RhYmxlKHNnLCBudW1fZnJhZ3MpOworKwlpZiAoc2tiX3RvX3NndmVjKHNrYiwgc2csIDAsIHNrYi0+bGVuKSA8PSAwKQorKwkJcmV0dXJuIGZhbHNlOworKworKwlpZiAoIWNoYWNoYTIwcG9seTEzMDVfZGVjcnlwdF9zZ19pbnBsYWNlKHNnLCBza2ItPmxlbiwgTlVMTCwgMCwKKysJCQkJCSAgICAgICAgIFBBQ0tFVF9DQihza2IpLT5ub25jZSwKKysJCQkJCQkga2V5LT5rZXkpKQorKwkJcmV0dXJuIGZhbHNlOworKworKwkvKiBBbm90aGVyIHVnbHkgc2l0dWF0aW9uIG9mIHB1c2hpbmcgYW5kIHB1bGxpbmcgdGhlIGhlYWRlciBzbyBhcyB0bworKwkgKiBrZWVwIGVuZHBvaW50IGluZm9ybWF0aW9uIGludGFjdC4KKysJICovCisrCXNrYl9wdXNoKHNrYiwgb2Zmc2V0KTsKKysJaWYgKHBza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gbm9pc2VfZW5jcnlwdGVkX2xlbigwKSkpCisrCQlyZXR1cm4gZmFsc2U7CisrCXNrYl9wdWxsKHNrYiwgb2Zmc2V0KTsKKysKKysJcmV0dXJuIHRydWU7CisrfQorKworKy8qIFRoaXMgaXMgUkZDNjQ3OSwgYSByZXBsYXkgZGV0ZWN0aW9uIGJpdG1hcCBhbGdvcml0aG0gdGhhdCBhdm9pZHMgYml0c2hpZnRzICovCisrc3RhdGljIGJvb2wgY291bnRlcl92YWxpZGF0ZSh1bmlvbiBub2lzZV9jb3VudGVyICpjb3VudGVyLCB1NjQgdGhlaXJfY291bnRlcikKKyt7CisrCXVuc2lnbmVkIGxvbmcgaW5kZXgsIGluZGV4X2N1cnJlbnQsIHRvcCwgaTsKKysJYm9vbCByZXQgPSBmYWxzZTsKKysKKysJc3Bpbl9sb2NrX2JoKCZjb3VudGVyLT5yZWNlaXZlLmxvY2spOworKworKwlpZiAodW5saWtlbHkoY291bnRlci0+cmVjZWl2ZS5jb3VudGVyID49IFJFSkVDVF9BRlRFUl9NRVNTQUdFUyArIDEgfHwKKysJCSAgICAgdGhlaXJfY291bnRlciA+PSBSRUpFQ1RfQUZURVJfTUVTU0FHRVMpKQorKwkJZ290byBvdXQ7CisrCisrCSsrdGhlaXJfY291bnRlcjsKKysKKysJaWYgKHVubGlrZWx5KChDT1VOVEVSX1dJTkRPV19TSVpFICsgdGhlaXJfY291bnRlcikgPAorKwkJICAgICBjb3VudGVyLT5yZWNlaXZlLmNvdW50ZXIpKQorKwkJZ290byBvdXQ7CisrCisrCWluZGV4ID0gdGhlaXJfY291bnRlciA+PiBpbG9nMihCSVRTX1BFUl9MT05HKTsKKysKKysJaWYgKGxpa2VseSh0aGVpcl9jb3VudGVyID4gY291bnRlci0+cmVjZWl2ZS5jb3VudGVyKSkgeworKwkJaW5kZXhfY3VycmVudCA9IGNvdW50ZXItPnJlY2VpdmUuY291bnRlciA+PiBpbG9nMihCSVRTX1BFUl9MT05HKTsKKysJCXRvcCA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIGluZGV4IC0gaW5kZXhfY3VycmVudCwKKysJCQkgICAgQ09VTlRFUl9CSVRTX1RPVEFMIC8gQklUU19QRVJfTE9ORyk7CisrCQlmb3IgKGkgPSAxOyBpIDw9IHRvcDsgKytpKQorKwkJCWNvdW50ZXItPnJlY2VpdmUuYmFja3RyYWNrWyhpICsgaW5kZXhfY3VycmVudCkgJgorKwkJCQkoKENPVU5URVJfQklUU19UT1RBTCAvIEJJVFNfUEVSX0xPTkcpIC0gMSldID0gMDsKKysJCWNvdW50ZXItPnJlY2VpdmUuY291bnRlciA9IHRoZWlyX2NvdW50ZXI7CisrCX0KKysKKysJaW5kZXggJj0gKENPVU5URVJfQklUU19UT1RBTCAvIEJJVFNfUEVSX0xPTkcpIC0gMTsKKysJcmV0ID0gIXRlc3RfYW5kX3NldF9iaXQodGhlaXJfY291bnRlciAmIChCSVRTX1BFUl9MT05HIC0gMSksCisrCQkJCSZjb3VudGVyLT5yZWNlaXZlLmJhY2t0cmFja1tpbmRleF0pOworKworK291dDoKKysJc3Bpbl91bmxvY2tfYmgoJmNvdW50ZXItPnJlY2VpdmUubG9jayk7CisrCXJldHVybiByZXQ7CisrfQorKworKyNpbmNsdWRlICJzZWxmdGVzdC9jb3VudGVyLmMiCisrCisrc3RhdGljIHZvaWQgd2dfcGFja2V0X2NvbnN1bWVfZGF0YV9kb25lKHN0cnVjdCB3Z19wZWVyICpwZWVyLAorKwkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKKysJCQkJCXN0cnVjdCBlbmRwb2ludCAqZW5kcG9pbnQpCisreworKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGVlci0+ZGV2aWNlLT5kZXY7CisrCXVuc2lnbmVkIGludCBsZW4sIGxlbl9iZWZvcmVfdHJpbTsKKysJc3RydWN0IHdnX3BlZXIgKnJvdXRlZF9wZWVyOworKworKwl3Z19zb2NrZXRfc2V0X3BlZXJfZW5kcG9pbnQocGVlciwgZW5kcG9pbnQpOworKworKwlpZiAodW5saWtlbHkod2dfbm9pc2VfcmVjZWl2ZWRfd2l0aF9rZXlwYWlyKCZwZWVyLT5rZXlwYWlycywKKysJCQkJCQkgICAgUEFDS0VUX0NCKHNrYiktPmtleXBhaXIpKSkgeworKwkJd2dfdGltZXJzX2hhbmRzaGFrZV9jb21wbGV0ZShwZWVyKTsKKysJCXdnX3BhY2tldF9zZW5kX3N0YWdlZF9wYWNrZXRzKHBlZXIpOworKwl9CisrCisrCWtlZXBfa2V5X2ZyZXNoKHBlZXIpOworKworKwl3Z190aW1lcnNfYW55X2F1dGhlbnRpY2F0ZWRfcGFja2V0X3JlY2VpdmVkKHBlZXIpOworKwl3Z190aW1lcnNfYW55X2F1dGhlbnRpY2F0ZWRfcGFja2V0X3RyYXZlcnNhbChwZWVyKTsKKysKKysJLyogQSBwYWNrZXQgd2l0aCBsZW5ndGggMCBpcyBhIGtlZXBhbGl2ZSBwYWNrZXQgKi8KKysJaWYgKHVubGlrZWx5KCFza2ItPmxlbikpIHsKKysJCXVwZGF0ZV9yeF9zdGF0cyhwZWVyLCBtZXNzYWdlX2RhdGFfbGVuKDApKTsKKysJCW5ldF9kYmdfcmF0ZWxpbWl0ZWQoIiVzOiBSZWNlaXZpbmcga2VlcGFsaXZlIHBhY2tldCBmcm9tIHBlZXIgJWxsdSAoJXBJU3Bmc2MpXG4iLAorKwkJCQkgICAgZGV2LT5uYW1lLCBwZWVyLT5pbnRlcm5hbF9pZCwKKysJCQkJICAgICZwZWVyLT5lbmRwb2ludC5hZGRyKTsKKysJCWdvdG8gcGFja2V0X3Byb2Nlc3NlZDsKKysJfQorKworKwl3Z190aW1lcnNfZGF0YV9yZWNlaXZlZChwZWVyKTsKKysKKysJaWYgKHVubGlrZWx5KHNrYl9uZXR3b3JrX2hlYWRlcihza2IpIDwgc2tiLT5oZWFkKSkKKysJCWdvdG8gZGlzaG9uZXN0X3BhY2tldF9zaXplOworKwlpZiAodW5saWtlbHkoIShwc2tiX25ldHdvcmtfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwaGRyKSkgJiYKKysJCSAgICAgICAoaXBfaGRyKHNrYiktPnZlcnNpb24gPT0gNCB8fAorKwkJCShpcF9oZHIoc2tiKS0+dmVyc2lvbiA9PSA2ICYmCisrCQkJIHBza2JfbmV0d29ya19tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpKSkpKSkKKysJCWdvdG8gZGlzaG9uZXN0X3BhY2tldF90eXBlOworKworKwlza2ItPmRldiA9IGRldjsKKysJLyogV2UndmUgYWxyZWFkeSB2ZXJpZmllZCB0aGUgUG9seTEzMDUgYXV0aCB0YWcsIHdoaWNoIG1lYW5zIHRoaXMgcGFja2V0CisrCSAqIHdhcyBub3QgbW9kaWZpZWQgaW4gdHJhbnNpdC4gV2UgY2FuIHRoZXJlZm9yZSB0ZWxsIHRoZSBuZXR3b3JraW5nCisrCSAqIHN0YWNrIHRoYXQgYWxsIGNoZWNrc3VtcyBvZiBldmVyeSBsYXllciBvZiBlbmNhcHN1bGF0aW9uIGhhdmUgYWxyZWFkeQorKwkgKiBiZWVuIGNoZWNrZWQgImJ5IHRoZSBoYXJkd2FyZSIgYW5kIHRoZXJlZm9yZSBpcyB1bm5lY2Nlc3NhcnkgdG8gY2hlY2sKKysJICogYWdhaW4gaW4gc29mdHdhcmUuCisrCSAqLworKwlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworKwlza2ItPmNzdW1fbGV2ZWwgPSB+MDsgLyogQWxsIGxldmVscyAqLworKwlza2ItPnByb3RvY29sID0gd2dfc2tiX2V4YW1pbmVfdW50cnVzdGVkX2lwX2hkcihza2IpOworKwlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHsKKysJCWxlbiA9IG50b2hzKGlwX2hkcihza2IpLT50b3RfbGVuKTsKKysJCWlmICh1bmxpa2VseShsZW4gPCBzaXplb2Yoc3RydWN0IGlwaGRyKSkpCisrCQkJZ290byBkaXNob25lc3RfcGFja2V0X3NpemU7CisrCQlpZiAoSU5FVF9FQ05faXNfY2UoUEFDS0VUX0NCKHNrYiktPmRzKSkKKysJCQlJUF9FQ05fc2V0X2NlKGlwX2hkcihza2IpKTsKKysJfSBlbHNlIGlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7CisrCQlsZW4gPSBudG9ocyhpcHY2X2hkcihza2IpLT5wYXlsb2FkX2xlbikgKworKwkJICAgICAgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKKysJCWlmIChJTkVUX0VDTl9pc19jZShQQUNLRVRfQ0Ioc2tiKS0+ZHMpKQorKwkJCUlQNl9FQ05fc2V0X2NlKHNrYiwgaXB2Nl9oZHIoc2tiKSk7CisrCX0gZWxzZSB7CisrCQlnb3RvIGRpc2hvbmVzdF9wYWNrZXRfdHlwZTsKKysJfQorKworKwlpZiAodW5saWtlbHkobGVuID4gc2tiLT5sZW4pKQorKwkJZ290byBkaXNob25lc3RfcGFja2V0X3NpemU7CisrCWxlbl9iZWZvcmVfdHJpbSA9IHNrYi0+bGVuOworKwlpZiAodW5saWtlbHkocHNrYl90cmltKHNrYiwgbGVuKSkpCisrCQlnb3RvIHBhY2tldF9wcm9jZXNzZWQ7CisrCisrCXJvdXRlZF9wZWVyID0gd2dfYWxsb3dlZGlwc19sb29rdXBfc3JjKCZwZWVyLT5kZXZpY2UtPnBlZXJfYWxsb3dlZGlwcywKKysJCQkJCSAgICAgICBza2IpOworKwl3Z19wZWVyX3B1dChyb3V0ZWRfcGVlcik7IC8qIFdlIGRvbid0IG5lZWQgdGhlIGV4dHJhIHJlZmVyZW5jZS4gKi8KKysKKysJaWYgKHVubGlrZWx5KHJvdXRlZF9wZWVyICE9IHBlZXIpKQorKwkJZ290byBkaXNob25lc3RfcGFja2V0X3BlZXI7CisrCisrCWlmICh1bmxpa2VseShuYXBpX2dyb19yZWNlaXZlKCZwZWVyLT5uYXBpLCBza2IpID09IEdST19EUk9QKSkgeworKwkJKytkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQ7CisrCQluZXRfZGJnX3JhdGVsaW1pdGVkKCIlczogRmFpbGVkIHRvIGdpdmUgcGFja2V0IHRvIHVzZXJzcGFjZSBmcm9tIHBlZXIgJWxsdSAoJXBJU3Bmc2MpXG4iLAorKwkJCQkgICAgZGV2LT5uYW1lLCBwZWVyLT5pbnRlcm5hbF9pZCwKKysJCQkJICAgICZwZWVyLT5lbmRwb2ludC5hZGRyKTsKKysJfSBlbHNlIHsKKysJCXVwZGF0ZV9yeF9zdGF0cyhwZWVyLCBtZXNzYWdlX2RhdGFfbGVuKGxlbl9iZWZvcmVfdHJpbSkpOworKwl9CisrCXJldHVybjsKKysKKytkaXNob25lc3RfcGFja2V0X3BlZXI6CisrCW5ldF9kYmdfc2tiX3JhdGVsaW1pdGVkKCIlczogUGFja2V0IGhhcyB1bmFsbG93ZWQgc3JjIElQICglcElTYykgZnJvbSBwZWVyICVsbHUgKCVwSVNwZnNjKVxuIiwKKysJCQkJZGV2LT5uYW1lLCBza2IsIHBlZXItPmludGVybmFsX2lkLAorKwkJCQkmcGVlci0+ZW5kcG9pbnQuYWRkcik7CisrCSsrZGV2LT5zdGF0cy5yeF9lcnJvcnM7CisrCSsrZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnM7CisrCWdvdG8gcGFja2V0X3Byb2Nlc3NlZDsKKytkaXNob25lc3RfcGFja2V0X3R5cGU6CisrCW5ldF9kYmdfcmF0ZWxpbWl0ZWQoIiVzOiBQYWNrZXQgaXMgbmVpdGhlciBpcHY0IG5vciBpcHY2IGZyb20gcGVlciAlbGx1ICglcElTcGZzYylcbiIsCisrCQkJICAgIGRldi0+bmFtZSwgcGVlci0+aW50ZXJuYWxfaWQsICZwZWVyLT5lbmRwb2ludC5hZGRyKTsKKysJKytkZXYtPnN0YXRzLnJ4X2Vycm9yczsKKysJKytkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9yczsKKysJZ290byBwYWNrZXRfcHJvY2Vzc2VkOworK2Rpc2hvbmVzdF9wYWNrZXRfc2l6ZToKKysJbmV0X2RiZ19yYXRlbGltaXRlZCgiJXM6IFBhY2tldCBoYXMgaW5jb3JyZWN0IHNpemUgZnJvbSBwZWVyICVsbHUgKCVwSVNwZnNjKVxuIiwKKysJCQkgICAgZGV2LT5uYW1lLCBwZWVyLT5pbnRlcm5hbF9pZCwgJnBlZXItPmVuZHBvaW50LmFkZHIpOworKwkrK2Rldi0+c3RhdHMucnhfZXJyb3JzOworKwkrK2Rldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9yczsKKysJZ290byBwYWNrZXRfcHJvY2Vzc2VkOworK3BhY2tldF9wcm9jZXNzZWQ6CisrCWRldl9rZnJlZV9za2Ioc2tiKTsKKyt9CisrCisraW50IHdnX3BhY2tldF9yeF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKKyt7CisrCXN0cnVjdCB3Z19wZWVyICpwZWVyID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCB3Z19wZWVyLCBuYXBpKTsKKysJc3RydWN0IGNyeXB0X3F1ZXVlICpxdWV1ZSA9ICZwZWVyLT5yeF9xdWV1ZTsKKysJc3RydWN0IG5vaXNlX2tleXBhaXIgKmtleXBhaXI7CisrCXN0cnVjdCBlbmRwb2ludCBlbmRwb2ludDsKKysJZW51bSBwYWNrZXRfc3RhdGUgc3RhdGU7CisrCXN0cnVjdCBza19idWZmICpza2I7CisrCWludCB3b3JrX2RvbmUgPSAwOworKwlib29sIGZyZWU7CisrCisrCWlmICh1bmxpa2VseShidWRnZXQgPD0gMCkpCisrCQlyZXR1cm4gMDsKKysKKysJd2hpbGUgKChza2IgPSBfX3B0cl9yaW5nX3BlZWsoJnF1ZXVlLT5yaW5nKSkgIT0gTlVMTCAmJgorKwkgICAgICAgKHN0YXRlID0gYXRvbWljX3JlYWRfYWNxdWlyZSgmUEFDS0VUX0NCKHNrYiktPnN0YXRlKSkgIT0KKysJCSAgICAgICBQQUNLRVRfU1RBVEVfVU5DUllQVEVEKSB7CisrCQlfX3B0cl9yaW5nX2Rpc2NhcmRfb25lKCZxdWV1ZS0+cmluZyk7CisrCQlwZWVyID0gUEFDS0VUX1BFRVIoc2tiKTsKKysJCWtleXBhaXIgPSBQQUNLRVRfQ0Ioc2tiKS0+a2V5cGFpcjsKKysJCWZyZWUgPSB0cnVlOworKworKwkJaWYgKHVubGlrZWx5KHN0YXRlICE9IFBBQ0tFVF9TVEFURV9DUllQVEVEKSkKKysJCQlnb3RvIG5leHQ7CisrCisrCQlpZiAodW5saWtlbHkoIWNvdW50ZXJfdmFsaWRhdGUoJmtleXBhaXItPnJlY2VpdmluZy5jb3VudGVyLAorKwkJCQkJICAgICAgIFBBQ0tFVF9DQihza2IpLT5ub25jZSkpKSB7CisrCQkJbmV0X2RiZ19yYXRlbGltaXRlZCgiJXM6IFBhY2tldCBoYXMgaW52YWxpZCBub25jZSAlbGx1IChtYXggJWxsdSlcbiIsCisrCQkJCQkgICAgcGVlci0+ZGV2aWNlLT5kZXYtPm5hbWUsCisrCQkJCQkgICAgUEFDS0VUX0NCKHNrYiktPm5vbmNlLAorKwkJCQkJICAgIGtleXBhaXItPnJlY2VpdmluZy5jb3VudGVyLnJlY2VpdmUuY291bnRlcik7CisrCQkJZ290byBuZXh0OworKwkJfQorKworKwkJaWYgKHVubGlrZWx5KHdnX3NvY2tldF9lbmRwb2ludF9mcm9tX3NrYigmZW5kcG9pbnQsIHNrYikpKQorKwkJCWdvdG8gbmV4dDsKKysKKysJCXdnX3Jlc2V0X3BhY2tldChza2IpOworKwkJd2dfcGFja2V0X2NvbnN1bWVfZGF0YV9kb25lKHBlZXIsIHNrYiwgJmVuZHBvaW50KTsKKysJCWZyZWUgPSBmYWxzZTsKKysKKytuZXh0OgorKwkJd2dfbm9pc2Vfa2V5cGFpcl9wdXQoa2V5cGFpciwgZmFsc2UpOworKwkJd2dfcGVlcl9wdXQocGVlcik7CisrCQlpZiAodW5saWtlbHkoZnJlZSkpCisrCQkJZGV2X2tmcmVlX3NrYihza2IpOworKworKwkJaWYgKCsrd29ya19kb25lID49IGJ1ZGdldCkKKysJCQlicmVhazsKKysJfQorKworKwlpZiAod29ya19kb25lIDwgYnVkZ2V0KQorKwkJbmFwaV9jb21wbGV0ZV9kb25lKG5hcGksIHdvcmtfZG9uZSk7CisrCisrCXJldHVybiB3b3JrX2RvbmU7CisrfQorKworK3ZvaWQgd2dfcGFja2V0X2RlY3J5cHRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKKyt7CisrCXN0cnVjdCBjcnlwdF9xdWV1ZSAqcXVldWUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG11bHRpY29yZV93b3JrZXIsCisrCQkJCQkJIHdvcmspLT5wdHI7CisrCXN0cnVjdCBza19idWZmICpza2I7CisrCisrCXdoaWxlICgoc2tiID0gcHRyX3JpbmdfY29uc3VtZV9iaCgmcXVldWUtPnJpbmcpKSAhPSBOVUxMKSB7CisrCQllbnVtIHBhY2tldF9zdGF0ZSBzdGF0ZSA9IGxpa2VseShkZWNyeXB0X3BhY2tldChza2IsCisrCQkJCSZQQUNLRVRfQ0Ioc2tiKS0+a2V5cGFpci0+cmVjZWl2aW5nKSkgPworKwkJCQlQQUNLRVRfU1RBVEVfQ1JZUFRFRCA6IFBBQ0tFVF9TVEFURV9ERUFEOworKwkJd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl9uYXBpKHNrYiwgc3RhdGUpOworKwl9CisrfQorKworK3N0YXRpYyB2b2lkIHdnX3BhY2tldF9jb25zdW1lX2RhdGEoc3RydWN0IHdnX2RldmljZSAqd2csIHN0cnVjdCBza19idWZmICpza2IpCisreworKwlfX2xlMzIgaWR4ID0gKChzdHJ1Y3QgbWVzc2FnZV9kYXRhICopc2tiLT5kYXRhKS0+a2V5X2lkeDsKKysJc3RydWN0IHdnX3BlZXIgKnBlZXIgPSBOVUxMOworKwlpbnQgcmV0OworKworKwlyY3VfcmVhZF9sb2NrX2JoKCk7CisrCVBBQ0tFVF9DQihza2IpLT5rZXlwYWlyID0KKysJCShzdHJ1Y3Qgbm9pc2Vfa2V5cGFpciAqKXdnX2luZGV4X2hhc2h0YWJsZV9sb29rdXAoCisrCQkJd2ctPmluZGV4X2hhc2h0YWJsZSwgSU5ERVhfSEFTSFRBQkxFX0tFWVBBSVIsIGlkeCwKKysJCQkmcGVlcik7CisrCWlmICh1bmxpa2VseSghd2dfbm9pc2Vfa2V5cGFpcl9nZXQoUEFDS0VUX0NCKHNrYiktPmtleXBhaXIpKSkKKysJCWdvdG8gZXJyX2tleXBhaXI7CisrCisrCWlmICh1bmxpa2VseShSRUFEX09OQ0UocGVlci0+aXNfZGVhZCkpKQorKwkJZ290byBlcnI7CisrCisrCXJldCA9IHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcigmd2ctPmRlY3J5cHRfcXVldWUsCisrCQkJCQkJICAgJnBlZXItPnJ4X3F1ZXVlLCBza2IsCisrCQkJCQkJICAgd2ctPnBhY2tldF9jcnlwdF93cSwKKysJCQkJCQkgICAmd2ctPmRlY3J5cHRfcXVldWUubGFzdF9jcHUpOworKwlpZiAodW5saWtlbHkocmV0ID09IC1FUElQRSkpCisrCQl3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX25hcGkoc2tiLCBQQUNLRVRfU1RBVEVfREVBRCk7CisrCWlmIChsaWtlbHkoIXJldCB8fCByZXQgPT0gLUVQSVBFKSkgeworKwkJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CisrCQlyZXR1cm47CisrCX0KKytlcnI6CisrCXdnX25vaXNlX2tleXBhaXJfcHV0KFBBQ0tFVF9DQihza2IpLT5rZXlwYWlyLCBmYWxzZSk7CisrZXJyX2tleXBhaXI6CisrCXJjdV9yZWFkX3VubG9ja19iaCgpOworKwl3Z19wZWVyX3B1dChwZWVyKTsKKysJZGV2X2tmcmVlX3NrYihza2IpOworK30KKysKKyt2b2lkIHdnX3BhY2tldF9yZWNlaXZlKHN0cnVjdCB3Z19kZXZpY2UgKndnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorK3sKKysJaWYgKHVubGlrZWx5KHByZXBhcmVfc2tiX2hlYWRlcihza2IsIHdnKSA8IDApKQorKwkJZ290byBlcnI7CisrCXN3aXRjaCAoU0tCX1RZUEVfTEUzMihza2IpKSB7CisrCWNhc2UgY3B1X3RvX2xlMzIoTUVTU0FHRV9IQU5EU0hBS0VfSU5JVElBVElPTik6CisrCWNhc2UgY3B1X3RvX2xlMzIoTUVTU0FHRV9IQU5EU0hBS0VfUkVTUE9OU0UpOgorKwljYXNlIGNwdV90b19sZTMyKE1FU1NBR0VfSEFORFNIQUtFX0NPT0tJRSk6IHsKKysJCWludCBjcHU7CisrCisrCQlpZiAoc2tiX3F1ZXVlX2xlbigmd2ctPmluY29taW5nX2hhbmRzaGFrZXMpID4KKysJCQkgICAgTUFYX1FVRVVFRF9JTkNPTUlOR19IQU5EU0hBS0VTIHx8CisrCQkgICAgdW5saWtlbHkoIXJuZ19pc19pbml0aWFsaXplZCgpKSkgeworKwkJCW5ldF9kYmdfc2tiX3JhdGVsaW1pdGVkKCIlczogRHJvcHBpbmcgaGFuZHNoYWtlIHBhY2tldCBmcm9tICVwSVNwZnNjXG4iLAorKwkJCQkJCXdnLT5kZXYtPm5hbWUsIHNrYik7CisrCQkJZ290byBlcnI7CisrCQl9CisrCQlza2JfcXVldWVfdGFpbCgmd2ctPmluY29taW5nX2hhbmRzaGFrZXMsIHNrYik7CisrCQkvKiBRdWV1ZXMgdXAgYSBjYWxsIHRvIHBhY2tldF9wcm9jZXNzX3F1ZXVlZF9oYW5kc2hha2VfCisrCQkgKiBwYWNrZXRzKHNrYik6CisrCQkgKi8KKysJCWNwdSA9IHdnX2NwdW1hc2tfbmV4dF9vbmxpbmUoJndnLT5pbmNvbWluZ19oYW5kc2hha2VfY3B1KTsKKysJCXF1ZXVlX3dvcmtfb24oY3B1LCB3Zy0+aGFuZHNoYWtlX3JlY2VpdmVfd3EsCisrCQkJJnBlcl9jcHVfcHRyKHdnLT5pbmNvbWluZ19oYW5kc2hha2VzX3dvcmtlciwgY3B1KS0+d29yayk7CisrCQlicmVhazsKKysJfQorKwljYXNlIGNwdV90b19sZTMyKE1FU1NBR0VfREFUQSk6CisrCQlQQUNLRVRfQ0Ioc2tiKS0+ZHMgPSBpcF90dW5uZWxfZ2V0X2RzZmllbGQoaXBfaGRyKHNrYiksIHNrYik7CisrCQl3Z19wYWNrZXRfY29uc3VtZV9kYXRhKHdnLCBza2IpOworKwkJYnJlYWs7CisrCWRlZmF1bHQ6CisrCQluZXRfZGJnX3NrYl9yYXRlbGltaXRlZCgiJXM6IEludmFsaWQgcGFja2V0IGZyb20gJXBJU3Bmc2NcbiIsCisrCQkJCQl3Zy0+ZGV2LT5uYW1lLCBza2IpOworKwkJZ290byBlcnI7CisrCX0KKysJcmV0dXJuOworKworK2VycjoKKysJZGV2X2tmcmVlX3NrYihza2IpOworK30KKy0tLSAvZGV2L251bGwKKysrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9hbGxvd2VkaXBzLmMKK0BAIC0wLDAgKzEsNjgzIEBACisrLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKysvKgorKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKysgKgorKyAqIFRoaXMgY29udGFpbnMgc29tZSBiYXNpYyBzdGF0aWMgdW5pdCB0ZXN0cyBmb3IgdGhlIGFsbG93ZWRpcHMgZGF0YSBzdHJ1Y3R1cmUuCisrICogSXQgYWxzbyBoYXMgdHdvIGFkZGl0aW9uYWwgbW9kZXMgdGhhdCBhcmUgZGlzYWJsZWQgYW5kIG1lYW50IHRvIGJlIHVzZWQgYnkKKysgKiBmb2xrcyBkaXJlY3RseSBwbGF5aW5nIHdpdGggdGhpcyBmaWxlLiBJZiB5b3UgZGVmaW5lIHRoZSBtYWNybworKyAqIERFQlVHX1BSSU5UX1RSSUVfR1JBUEhWSVogdG8gYmUgMSwgdGhlbiBldmVyeSB0aW1lIHRoZXJlJ3MgYSBmdWxsIHRyZWUgaW4KKysgKiBtZW1vcnksIGl0IHdpbGwgYmUgcHJpbnRlZCBvdXQgYXMgS0VSTl9ERUJVRyBpbiBhIGZvcm1hdCB0aGF0IGNhbiBiZSBwYXNzZWQKKysgKiB0byBncmFwaHZpeiAodGhlIGRvdCBjb21tYW5kKSB0byB2aXN1YWxpemUgaXQuIElmIHlvdSBkZWZpbmUgdGhlIG1hY3JvCisrICogREVCVUdfUkFORE9NX1RSSUUgdG8gYmUgMSwgdGhlbiB0aGVyZSB3aWxsIGJlIGFuIGV4dHJlbWVseSBjb3N0bHkgc2V0IG9mCisrICogcmFuZG9taXplZCB0ZXN0cyBkb25lIGFnYWluc3QgYSB0cml2aWFsIGltcGxlbWVudGF0aW9uLCB3aGljaCBtYXkgdGFrZQorKyAqIHVwd2FyZHMgb2YgYSBoYWxmLWhvdXIgdG8gY29tcGxldGUuIFRoZXJlJ3Mgbm8gc2V0IG9mIHVzZXJzIHdobyBzaG91bGQgYmUKKysgKiBlbmFibGluZyB0aGVzZSwgYW5kIHRoZSBvbmx5IGRldmVsb3BlcnMgdGhhdCBzaG91bGQgZ28gYW55d2hlcmUgbmVhciB0aGVzZQorKyAqIG5vYnMgYXJlIHRoZSBvbmVzIHdobyBhcmUgcmVhZGluZyB0aGlzIGNvbW1lbnQuCisrICovCisrCisrI2lmZGVmIERFQlVHCisrCisrI2luY2x1ZGUgPGxpbnV4L3NpcGhhc2guaD4KKysKKytzdGF0aWMgX19pbml0IHZvaWQgc3dhcF9lbmRpYW5fYW5kX2FwcGx5X2NpZHIodTggKmRzdCwgY29uc3QgdTggKnNyYywgdTggYml0cywKKysJCQkJCSAgICAgIHU4IGNpZHIpCisreworKwlzd2FwX2VuZGlhbihkc3QsIHNyYywgYml0cyk7CisrCW1lbXNldChkc3QgKyAoY2lkciArIDcpIC8gOCwgMCwgYml0cyAvIDggLSAoY2lkciArIDcpIC8gOCk7CisrCWlmIChjaWRyKQorKwkJZHN0WyhjaWRyICsgNykgLyA4IC0gMV0gJj0gfjBVIDw8ICgoOCAtIChjaWRyICUgOCkpICUgOCk7CisrfQorKworK3N0YXRpYyBfX2luaXQgdm9pZCBwcmludF9ub2RlKHN0cnVjdCBhbGxvd2VkaXBzX25vZGUgKm5vZGUsIHU4IGJpdHMpCisreworKwljaGFyICpmbXRfY29ubmVjdGlvbiA9IEtFUk5fREVCVUcgIlx0XCIlcC8lZFwiIC0+IFwiJXAvJWRcIjtcbiI7CisrCWNoYXIgKmZtdF9kZWNsYXJhdGlvbiA9IEtFUk5fREVCVUcKKysJCSJcdFwiJXAvJWRcIltzdHlsZT0lcywgY29sb3I9XCIjJTA2eFwiXTtcbiI7CisrCWNoYXIgKnN0eWxlID0gImRvdHRlZCI7CisrCXU4IGlwMVsxNl0sIGlwMlsxNl07CisrCXUzMiBjb2xvciA9IDA7CisrCisrCWlmIChiaXRzID09IDMyKSB7CisrCQlmbXRfY29ubmVjdGlvbiA9IEtFUk5fREVCVUcgIlx0XCIlcEk0LyVkXCIgLT4gXCIlcEk0LyVkXCI7XG4iOworKwkJZm10X2RlY2xhcmF0aW9uID0gS0VSTl9ERUJVRworKwkJCSJcdFwiJXBJNC8lZFwiW3N0eWxlPSVzLCBjb2xvcj1cIiMlMDZ4XCJdO1xuIjsKKysJfSBlbHNlIGlmIChiaXRzID09IDEyOCkgeworKwkJZm10X2Nvbm5lY3Rpb24gPSBLRVJOX0RFQlVHICJcdFwiJXBJNi8lZFwiIC0+IFwiJXBJNi8lZFwiO1xuIjsKKysJCWZtdF9kZWNsYXJhdGlvbiA9IEtFUk5fREVCVUcKKysJCQkiXHRcIiVwSTYvJWRcIltzdHlsZT0lcywgY29sb3I9XCIjJTA2eFwiXTtcbiI7CisrCX0KKysJaWYgKG5vZGUtPnBlZXIpIHsKKysJCWhzaXBoYXNoX2tleV90IGtleSA9IHsgeyAwIH0gfTsKKysKKysJCW1lbWNweSgma2V5LCAmbm9kZS0+cGVlciwgc2l6ZW9mKG5vZGUtPnBlZXIpKTsKKysJCWNvbG9yID0gaHNpcGhhc2hfMXUzMigweGRlYWRiZWVmLCAma2V5KSAlIDIwMCA8PCAxNiB8CisrCQkJaHNpcGhhc2hfMXUzMigweGJhYmVjYWZlLCAma2V5KSAlIDIwMCA8PCA4IHwKKysJCQloc2lwaGFzaF8xdTMyKDB4YWJhZDFkZWEsICZrZXkpICUgMjAwOworKwkJc3R5bGUgPSAiYm9sZCI7CisrCX0KKysJc3dhcF9lbmRpYW5fYW5kX2FwcGx5X2NpZHIoaXAxLCBub2RlLT5iaXRzLCBiaXRzLCBub2RlLT5jaWRyKTsKKysJcHJpbnRrKGZtdF9kZWNsYXJhdGlvbiwgaXAxLCBub2RlLT5jaWRyLCBzdHlsZSwgY29sb3IpOworKwlpZiAobm9kZS0+Yml0WzBdKSB7CisrCQlzd2FwX2VuZGlhbl9hbmRfYXBwbHlfY2lkcihpcDIsCisrCQkJCXJjdV9kZXJlZmVyZW5jZV9yYXcobm9kZS0+Yml0WzBdKS0+Yml0cywgYml0cywKKysJCQkJbm9kZS0+Y2lkcik7CisrCQlwcmludGsoZm10X2Nvbm5lY3Rpb24sIGlwMSwgbm9kZS0+Y2lkciwgaXAyLAorKwkJICAgICAgIHJjdV9kZXJlZmVyZW5jZV9yYXcobm9kZS0+Yml0WzBdKS0+Y2lkcik7CisrCQlwcmludF9ub2RlKHJjdV9kZXJlZmVyZW5jZV9yYXcobm9kZS0+Yml0WzBdKSwgYml0cyk7CisrCX0KKysJaWYgKG5vZGUtPmJpdFsxXSkgeworKwkJc3dhcF9lbmRpYW5fYW5kX2FwcGx5X2NpZHIoaXAyLAorKwkJCQlyY3VfZGVyZWZlcmVuY2VfcmF3KG5vZGUtPmJpdFsxXSktPmJpdHMsCisrCQkJCWJpdHMsIG5vZGUtPmNpZHIpOworKwkJcHJpbnRrKGZtdF9jb25uZWN0aW9uLCBpcDEsIG5vZGUtPmNpZHIsIGlwMiwKKysJCSAgICAgICByY3VfZGVyZWZlcmVuY2VfcmF3KG5vZGUtPmJpdFsxXSktPmNpZHIpOworKwkJcHJpbnRfbm9kZShyY3VfZGVyZWZlcmVuY2VfcmF3KG5vZGUtPmJpdFsxXSksIGJpdHMpOworKwl9CisrfQorKworK3N0YXRpYyBfX2luaXQgdm9pZCBwcmludF90cmVlKHN0cnVjdCBhbGxvd2VkaXBzX25vZGUgX19yY3UgKnRvcCwgdTggYml0cykKKyt7CisrCXByaW50ayhLRVJOX0RFQlVHICJkaWdyYXBoIHRyaWUge1xuIik7CisrCXByaW50X25vZGUocmN1X2RlcmVmZXJlbmNlX3Jhdyh0b3ApLCBiaXRzKTsKKysJcHJpbnRrKEtFUk5fREVCVUcgIn1cbiIpOworK30KKysKKytlbnVtIHsKKysJTlVNX1BFRVJTID0gMjAwMCwKKysJTlVNX1JBTkRfUk9VVEVTID0gNDAwLAorKwlOVU1fTVVUQVRFRF9ST1VURVMgPSAxMDAsCisrCU5VTV9RVUVSSUVTID0gTlVNX1JBTkRfUk9VVEVTICogTlVNX01VVEFURURfUk9VVEVTICogMzAKKyt9OworKworK3N0cnVjdCBob3JyaWJsZV9hbGxvd2VkaXBzIHsKKysJc3RydWN0IGhsaXN0X2hlYWQgaGVhZDsKKyt9OworKworK3N0cnVjdCBob3JyaWJsZV9hbGxvd2VkaXBzX25vZGUgeworKwlzdHJ1Y3QgaGxpc3Rfbm9kZSB0YWJsZTsKKysJdW5pb24gbmZfaW5ldF9hZGRyIGlwOworKwl1bmlvbiBuZl9pbmV0X2FkZHIgbWFzazsKKysJdTggaXBfdmVyc2lvbjsKKysJdm9pZCAqdmFsdWU7CisrfTsKKysKKytzdGF0aWMgX19pbml0IHZvaWQgaG9ycmlibGVfYWxsb3dlZGlwc19pbml0KHN0cnVjdCBob3JyaWJsZV9hbGxvd2VkaXBzICp0YWJsZSkKKyt7CisrCUlOSVRfSExJU1RfSEVBRCgmdGFibGUtPmhlYWQpOworK30KKysKKytzdGF0aWMgX19pbml0IHZvaWQgaG9ycmlibGVfYWxsb3dlZGlwc19mcmVlKHN0cnVjdCBob3JyaWJsZV9hbGxvd2VkaXBzICp0YWJsZSkKKyt7CisrCXN0cnVjdCBob3JyaWJsZV9hbGxvd2VkaXBzX25vZGUgKm5vZGU7CisrCXN0cnVjdCBobGlzdF9ub2RlICpoOworKworKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIGgsICZ0YWJsZS0+aGVhZCwgdGFibGUpIHsKKysJCWhsaXN0X2RlbCgmbm9kZS0+dGFibGUpOworKwkJa2ZyZWUobm9kZSk7CisrCX0KKyt9CisrCisrc3RhdGljIF9faW5pdCBpbmxpbmUgdW5pb24gbmZfaW5ldF9hZGRyIGhvcnJpYmxlX2NpZHJfdG9fbWFzayh1OCBjaWRyKQorK3sKKysJdW5pb24gbmZfaW5ldF9hZGRyIG1hc2s7CisrCisrCW1lbXNldCgmbWFzaywgMHgwMCwgMTI4IC8gOCk7CisrCW1lbXNldCgmbWFzaywgMHhmZiwgY2lkciAvIDgpOworKwlpZiAoY2lkciAlIDMyKQorKwkJbWFzay5hbGxbY2lkciAvIDMyXSA9IChfX2ZvcmNlIHUzMilodG9ubCgKKysJCQkoMHhGRkZGRkZGRlVMIDw8ICgzMiAtIChjaWRyICUgMzIpKSkgJiAweEZGRkZGRkZGVUwpOworKwlyZXR1cm4gbWFzazsKKyt9CisrCisrc3RhdGljIF9faW5pdCBpbmxpbmUgdTggaG9ycmlibGVfbWFza190b19jaWRyKHVuaW9uIG5mX2luZXRfYWRkciBzdWJuZXQpCisreworKwlyZXR1cm4gaHdlaWdodDMyKHN1Ym5ldC5hbGxbMF0pICsgaHdlaWdodDMyKHN1Ym5ldC5hbGxbMV0pICsKKysJICAgICAgIGh3ZWlnaHQzMihzdWJuZXQuYWxsWzJdKSArIGh3ZWlnaHQzMihzdWJuZXQuYWxsWzNdKTsKKyt9CisrCisrc3RhdGljIF9faW5pdCBpbmxpbmUgdm9pZAorK2hvcnJpYmxlX21hc2tfc2VsZihzdHJ1Y3QgaG9ycmlibGVfYWxsb3dlZGlwc19ub2RlICpub2RlKQorK3sKKysJaWYgKG5vZGUtPmlwX3ZlcnNpb24gPT0gNCkgeworKwkJbm9kZS0+aXAuaXAgJj0gbm9kZS0+bWFzay5pcDsKKysJfSBlbHNlIGlmIChub2RlLT5pcF92ZXJzaW9uID09IDYpIHsKKysJCW5vZGUtPmlwLmlwNlswXSAmPSBub2RlLT5tYXNrLmlwNlswXTsKKysJCW5vZGUtPmlwLmlwNlsxXSAmPSBub2RlLT5tYXNrLmlwNlsxXTsKKysJCW5vZGUtPmlwLmlwNlsyXSAmPSBub2RlLT5tYXNrLmlwNlsyXTsKKysJCW5vZGUtPmlwLmlwNlszXSAmPSBub2RlLT5tYXNrLmlwNlszXTsKKysJfQorK30KKysKKytzdGF0aWMgX19pbml0IGlubGluZSBib29sCisraG9ycmlibGVfbWF0Y2hfdjQoY29uc3Qgc3RydWN0IGhvcnJpYmxlX2FsbG93ZWRpcHNfbm9kZSAqbm9kZSwKKysJCSAgc3RydWN0IGluX2FkZHIgKmlwKQorK3sKKysJcmV0dXJuIChpcC0+c19hZGRyICYgbm9kZS0+bWFzay5pcCkgPT0gbm9kZS0+aXAuaXA7CisrfQorKworK3N0YXRpYyBfX2luaXQgaW5saW5lIGJvb2wKKytob3JyaWJsZV9tYXRjaF92Nihjb25zdCBzdHJ1Y3QgaG9ycmlibGVfYWxsb3dlZGlwc19ub2RlICpub2RlLAorKwkJICBzdHJ1Y3QgaW42X2FkZHIgKmlwKQorK3sKKysJcmV0dXJuIChpcC0+aW42X3UudTZfYWRkcjMyWzBdICYgbm9kZS0+bWFzay5pcDZbMF0pID09CisrCQkgICAgICAgbm9kZS0+aXAuaXA2WzBdICYmCisrCSAgICAgICAoaXAtPmluNl91LnU2X2FkZHIzMlsxXSAmIG5vZGUtPm1hc2suaXA2WzFdKSA9PQorKwkJICAgICAgIG5vZGUtPmlwLmlwNlsxXSAmJgorKwkgICAgICAgKGlwLT5pbjZfdS51Nl9hZGRyMzJbMl0gJiBub2RlLT5tYXNrLmlwNlsyXSkgPT0KKysJCSAgICAgICBub2RlLT5pcC5pcDZbMl0gJiYKKysJICAgICAgIChpcC0+aW42X3UudTZfYWRkcjMyWzNdICYgbm9kZS0+bWFzay5pcDZbM10pID09IG5vZGUtPmlwLmlwNlszXTsKKyt9CisrCisrc3RhdGljIF9faW5pdCB2b2lkCisraG9ycmlibGVfaW5zZXJ0X29yZGVyZWQoc3RydWN0IGhvcnJpYmxlX2FsbG93ZWRpcHMgKnRhYmxlLAorKwkJCXN0cnVjdCBob3JyaWJsZV9hbGxvd2VkaXBzX25vZGUgKm5vZGUpCisreworKwlzdHJ1Y3QgaG9ycmlibGVfYWxsb3dlZGlwc19ub2RlICpvdGhlciA9IE5VTEwsICp3aGVyZSA9IE5VTEw7CisrCXU4IG15X2NpZHIgPSBob3JyaWJsZV9tYXNrX3RvX2NpZHIobm9kZS0+bWFzayk7CisrCisrCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KG90aGVyLCAmdGFibGUtPmhlYWQsIHRhYmxlKSB7CisrCQlpZiAoIW1lbWNtcCgmb3RoZXItPm1hc2ssICZub2RlLT5tYXNrLAorKwkJCSAgICBzaXplb2YodW5pb24gbmZfaW5ldF9hZGRyKSkgJiYKKysJCSAgICAhbWVtY21wKCZvdGhlci0+aXAsICZub2RlLT5pcCwKKysJCQkgICAgc2l6ZW9mKHVuaW9uIG5mX2luZXRfYWRkcikpICYmCisrCQkgICAgb3RoZXItPmlwX3ZlcnNpb24gPT0gbm9kZS0+aXBfdmVyc2lvbikgeworKwkJCW90aGVyLT52YWx1ZSA9IG5vZGUtPnZhbHVlOworKwkJCWtmcmVlKG5vZGUpOworKwkJCXJldHVybjsKKysJCX0KKysJCXdoZXJlID0gb3RoZXI7CisrCQlpZiAoaG9ycmlibGVfbWFza190b19jaWRyKG90aGVyLT5tYXNrKSA8PSBteV9jaWRyKQorKwkJCWJyZWFrOworKwl9CisrCWlmICghb3RoZXIgJiYgIXdoZXJlKQorKwkJaGxpc3RfYWRkX2hlYWQoJm5vZGUtPnRhYmxlLCAmdGFibGUtPmhlYWQpOworKwllbHNlIGlmICghb3RoZXIpCisrCQlobGlzdF9hZGRfYmVoaW5kKCZub2RlLT50YWJsZSwgJndoZXJlLT50YWJsZSk7CisrCWVsc2UKKysJCWhsaXN0X2FkZF9iZWZvcmUoJm5vZGUtPnRhYmxlLCAmd2hlcmUtPnRhYmxlKTsKKyt9CisrCisrc3RhdGljIF9faW5pdCBpbnQKKytob3JyaWJsZV9hbGxvd2VkaXBzX2luc2VydF92NChzdHJ1Y3QgaG9ycmlibGVfYWxsb3dlZGlwcyAqdGFibGUsCisrCQkJICAgICAgc3RydWN0IGluX2FkZHIgKmlwLCB1OCBjaWRyLCB2b2lkICp2YWx1ZSkKKyt7CisrCXN0cnVjdCBob3JyaWJsZV9hbGxvd2VkaXBzX25vZGUgKm5vZGUgPSBremFsbG9jKHNpemVvZigqbm9kZSksCisrCQkJCQkJCUdGUF9LRVJORUwpOworKworKwlpZiAodW5saWtlbHkoIW5vZGUpKQorKwkJcmV0dXJuIC1FTk9NRU07CisrCW5vZGUtPmlwLmluID0gKmlwOworKwlub2RlLT5tYXNrID0gaG9ycmlibGVfY2lkcl90b19tYXNrKGNpZHIpOworKwlub2RlLT5pcF92ZXJzaW9uID0gNDsKKysJbm9kZS0+dmFsdWUgPSB2YWx1ZTsKKysJaG9ycmlibGVfbWFza19zZWxmKG5vZGUpOworKwlob3JyaWJsZV9pbnNlcnRfb3JkZXJlZCh0YWJsZSwgbm9kZSk7CisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgX19pbml0IGludAorK2hvcnJpYmxlX2FsbG93ZWRpcHNfaW5zZXJ0X3Y2KHN0cnVjdCBob3JyaWJsZV9hbGxvd2VkaXBzICp0YWJsZSwKKysJCQkgICAgICBzdHJ1Y3QgaW42X2FkZHIgKmlwLCB1OCBjaWRyLCB2b2lkICp2YWx1ZSkKKyt7CisrCXN0cnVjdCBob3JyaWJsZV9hbGxvd2VkaXBzX25vZGUgKm5vZGUgPSBremFsbG9jKHNpemVvZigqbm9kZSksCisrCQkJCQkJCUdGUF9LRVJORUwpOworKworKwlpZiAodW5saWtlbHkoIW5vZGUpKQorKwkJcmV0dXJuIC1FTk9NRU07CisrCW5vZGUtPmlwLmluNiA9ICppcDsKKysJbm9kZS0+bWFzayA9IGhvcnJpYmxlX2NpZHJfdG9fbWFzayhjaWRyKTsKKysJbm9kZS0+aXBfdmVyc2lvbiA9IDY7CisrCW5vZGUtPnZhbHVlID0gdmFsdWU7CisrCWhvcnJpYmxlX21hc2tfc2VsZihub2RlKTsKKysJaG9ycmlibGVfaW5zZXJ0X29yZGVyZWQodGFibGUsIG5vZGUpOworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIF9faW5pdCB2b2lkICoKKytob3JyaWJsZV9hbGxvd2VkaXBzX2xvb2t1cF92NChzdHJ1Y3QgaG9ycmlibGVfYWxsb3dlZGlwcyAqdGFibGUsCisrCQkJICAgICAgc3RydWN0IGluX2FkZHIgKmlwKQorK3sKKysJc3RydWN0IGhvcnJpYmxlX2FsbG93ZWRpcHNfbm9kZSAqbm9kZTsKKysJdm9pZCAqcmV0ID0gTlVMTDsKKysKKysJaGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgJnRhYmxlLT5oZWFkLCB0YWJsZSkgeworKwkJaWYgKG5vZGUtPmlwX3ZlcnNpb24gIT0gNCkKKysJCQljb250aW51ZTsKKysJCWlmIChob3JyaWJsZV9tYXRjaF92NChub2RlLCBpcCkpIHsKKysJCQlyZXQgPSBub2RlLT52YWx1ZTsKKysJCQlicmVhazsKKysJCX0KKysJfQorKwlyZXR1cm4gcmV0OworK30KKysKKytzdGF0aWMgX19pbml0IHZvaWQgKgorK2hvcnJpYmxlX2FsbG93ZWRpcHNfbG9va3VwX3Y2KHN0cnVjdCBob3JyaWJsZV9hbGxvd2VkaXBzICp0YWJsZSwKKysJCQkgICAgICBzdHJ1Y3QgaW42X2FkZHIgKmlwKQorK3sKKysJc3RydWN0IGhvcnJpYmxlX2FsbG93ZWRpcHNfbm9kZSAqbm9kZTsKKysJdm9pZCAqcmV0ID0gTlVMTDsKKysKKysJaGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgJnRhYmxlLT5oZWFkLCB0YWJsZSkgeworKwkJaWYgKG5vZGUtPmlwX3ZlcnNpb24gIT0gNikKKysJCQljb250aW51ZTsKKysJCWlmIChob3JyaWJsZV9tYXRjaF92Nihub2RlLCBpcCkpIHsKKysJCQlyZXQgPSBub2RlLT52YWx1ZTsKKysJCQlicmVhazsKKysJCX0KKysJfQorKwlyZXR1cm4gcmV0OworK30KKysKKytzdGF0aWMgX19pbml0IGJvb2wgcmFuZG9taXplZF90ZXN0KHZvaWQpCisreworKwl1bnNpZ25lZCBpbnQgaSwgaiwgaywgbXV0YXRlX2Ftb3VudCwgY2lkcjsKKysJdTggaXBbMTZdLCBtdXRhdGVfbWFza1sxNl0sIG11dGF0ZWRbMTZdOworKwlzdHJ1Y3Qgd2dfcGVlciAqKnBlZXJzLCAqcGVlcjsKKysJc3RydWN0IGhvcnJpYmxlX2FsbG93ZWRpcHMgaDsKKysJREVGSU5FX01VVEVYKG11dGV4KTsKKysJc3RydWN0IGFsbG93ZWRpcHMgdDsKKysJYm9vbCByZXQgPSBmYWxzZTsKKysKKysJbXV0ZXhfaW5pdCgmbXV0ZXgpOworKworKwl3Z19hbGxvd2VkaXBzX2luaXQoJnQpOworKwlob3JyaWJsZV9hbGxvd2VkaXBzX2luaXQoJmgpOworKworKwlwZWVycyA9IGtjYWxsb2MoTlVNX1BFRVJTLCBzaXplb2YoKnBlZXJzKSwgR0ZQX0tFUk5FTCk7CisrCWlmICh1bmxpa2VseSghcGVlcnMpKSB7CisrCQlwcl9lcnIoImFsbG93ZWRpcHMgcmFuZG9tIHNlbGYtdGVzdCBtYWxsb2M6IEZBSUxcbiIpOworKwkJZ290byBmcmVlOworKwl9CisrCWZvciAoaSA9IDA7IGkgPCBOVU1fUEVFUlM7ICsraSkgeworKwkJcGVlcnNbaV0gPSBremFsbG9jKHNpemVvZigqcGVlcnNbaV0pLCBHRlBfS0VSTkVMKTsKKysJCWlmICh1bmxpa2VseSghcGVlcnNbaV0pKSB7CisrCQkJcHJfZXJyKCJhbGxvd2VkaXBzIHJhbmRvbSBzZWxmLXRlc3QgbWFsbG9jOiBGQUlMXG4iKTsKKysJCQlnb3RvIGZyZWU7CisrCQl9CisrCQlrcmVmX2luaXQoJnBlZXJzW2ldLT5yZWZjb3VudCk7CisrCX0KKysKKysJbXV0ZXhfbG9jaygmbXV0ZXgpOworKworKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1JBTkRfUk9VVEVTOyArK2kpIHsKKysJCXByYW5kb21fYnl0ZXMoaXAsIDQpOworKwkJY2lkciA9IHByYW5kb21fdTMyX21heCgzMikgKyAxOworKwkJcGVlciA9IHBlZXJzW3ByYW5kb21fdTMyX21heChOVU1fUEVFUlMpXTsKKysJCWlmICh3Z19hbGxvd2VkaXBzX2luc2VydF92NCgmdCwgKHN0cnVjdCBpbl9hZGRyICopaXAsIGNpZHIsCisrCQkJCQkgICAgcGVlciwgJm11dGV4KSA8IDApIHsKKysJCQlwcl9lcnIoImFsbG93ZWRpcHMgcmFuZG9tIHNlbGYtdGVzdCBtYWxsb2M6IEZBSUxcbiIpOworKwkJCWdvdG8gZnJlZV9sb2NrZWQ7CisrCQl9CisrCQlpZiAoaG9ycmlibGVfYWxsb3dlZGlwc19pbnNlcnRfdjQoJmgsIChzdHJ1Y3QgaW5fYWRkciAqKWlwLAorKwkJCQkJCSAgY2lkciwgcGVlcikgPCAwKSB7CisrCQkJcHJfZXJyKCJhbGxvd2VkaXBzIHJhbmRvbSBzZWxmLXRlc3QgbWFsbG9jOiBGQUlMXG4iKTsKKysJCQlnb3RvIGZyZWVfbG9ja2VkOworKwkJfQorKwkJZm9yIChqID0gMDsgaiA8IE5VTV9NVVRBVEVEX1JPVVRFUzsgKytqKSB7CisrCQkJbWVtY3B5KG11dGF0ZWQsIGlwLCA0KTsKKysJCQlwcmFuZG9tX2J5dGVzKG11dGF0ZV9tYXNrLCA0KTsKKysJCQltdXRhdGVfYW1vdW50ID0gcHJhbmRvbV91MzJfbWF4KDMyKTsKKysJCQlmb3IgKGsgPSAwOyBrIDwgbXV0YXRlX2Ftb3VudCAvIDg7ICsraykKKysJCQkJbXV0YXRlX21hc2tba10gPSAweGZmOworKwkJCW11dGF0ZV9tYXNrW2tdID0gMHhmZgorKwkJCQkJIDw8ICgoOCAtIChtdXRhdGVfYW1vdW50ICUgOCkpICUgOCk7CisrCQkJZm9yICg7IGsgPCA0OyArK2spCisrCQkJCW11dGF0ZV9tYXNrW2tdID0gMDsKKysJCQlmb3IgKGsgPSAwOyBrIDwgNDsgKytrKQorKwkJCQltdXRhdGVkW2tdID0gKG11dGF0ZWRba10gJiBtdXRhdGVfbWFza1trXSkgfAorKwkJCQkJICAgICAofm11dGF0ZV9tYXNrW2tdICYKKysJCQkJCSAgICAgIHByYW5kb21fdTMyX21heCgyNTYpKTsKKysJCQljaWRyID0gcHJhbmRvbV91MzJfbWF4KDMyKSArIDE7CisrCQkJcGVlciA9IHBlZXJzW3ByYW5kb21fdTMyX21heChOVU1fUEVFUlMpXTsKKysJCQlpZiAod2dfYWxsb3dlZGlwc19pbnNlcnRfdjQoJnQsCisrCQkJCQkJICAgIChzdHJ1Y3QgaW5fYWRkciAqKW11dGF0ZWQsCisrCQkJCQkJICAgIGNpZHIsIHBlZXIsICZtdXRleCkgPCAwKSB7CisrCQkJCXByX2VycigiYWxsb3dlZGlwcyByYW5kb20gbWFsbG9jOiBGQUlMXG4iKTsKKysJCQkJZ290byBmcmVlX2xvY2tlZDsKKysJCQl9CisrCQkJaWYgKGhvcnJpYmxlX2FsbG93ZWRpcHNfaW5zZXJ0X3Y0KCZoLAorKwkJCQkoc3RydWN0IGluX2FkZHIgKiltdXRhdGVkLCBjaWRyLCBwZWVyKSkgeworKwkJCQlwcl9lcnIoImFsbG93ZWRpcHMgcmFuZG9tIHNlbGYtdGVzdCBtYWxsb2M6IEZBSUxcbiIpOworKwkJCQlnb3RvIGZyZWVfbG9ja2VkOworKwkJCX0KKysJCX0KKysJfQorKworKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1JBTkRfUk9VVEVTOyArK2kpIHsKKysJCXByYW5kb21fYnl0ZXMoaXAsIDE2KTsKKysJCWNpZHIgPSBwcmFuZG9tX3UzMl9tYXgoMTI4KSArIDE7CisrCQlwZWVyID0gcGVlcnNbcHJhbmRvbV91MzJfbWF4KE5VTV9QRUVSUyldOworKwkJaWYgKHdnX2FsbG93ZWRpcHNfaW5zZXJ0X3Y2KCZ0LCAoc3RydWN0IGluNl9hZGRyICopaXAsIGNpZHIsCisrCQkJCQkgICAgcGVlciwgJm11dGV4KSA8IDApIHsKKysJCQlwcl9lcnIoImFsbG93ZWRpcHMgcmFuZG9tIHNlbGYtdGVzdCBtYWxsb2M6IEZBSUxcbiIpOworKwkJCWdvdG8gZnJlZV9sb2NrZWQ7CisrCQl9CisrCQlpZiAoaG9ycmlibGVfYWxsb3dlZGlwc19pbnNlcnRfdjYoJmgsIChzdHJ1Y3QgaW42X2FkZHIgKilpcCwKKysJCQkJCQkgIGNpZHIsIHBlZXIpIDwgMCkgeworKwkJCXByX2VycigiYWxsb3dlZGlwcyByYW5kb20gc2VsZi10ZXN0IG1hbGxvYzogRkFJTFxuIik7CisrCQkJZ290byBmcmVlX2xvY2tlZDsKKysJCX0KKysJCWZvciAoaiA9IDA7IGogPCBOVU1fTVVUQVRFRF9ST1VURVM7ICsraikgeworKwkJCW1lbWNweShtdXRhdGVkLCBpcCwgMTYpOworKwkJCXByYW5kb21fYnl0ZXMobXV0YXRlX21hc2ssIDE2KTsKKysJCQltdXRhdGVfYW1vdW50ID0gcHJhbmRvbV91MzJfbWF4KDEyOCk7CisrCQkJZm9yIChrID0gMDsgayA8IG11dGF0ZV9hbW91bnQgLyA4OyArK2spCisrCQkJCW11dGF0ZV9tYXNrW2tdID0gMHhmZjsKKysJCQltdXRhdGVfbWFza1trXSA9IDB4ZmYKKysJCQkJCSA8PCAoKDggLSAobXV0YXRlX2Ftb3VudCAlIDgpKSAlIDgpOworKwkJCWZvciAoOyBrIDwgNDsgKytrKQorKwkJCQltdXRhdGVfbWFza1trXSA9IDA7CisrCQkJZm9yIChrID0gMDsgayA8IDQ7ICsraykKKysJCQkJbXV0YXRlZFtrXSA9IChtdXRhdGVkW2tdICYgbXV0YXRlX21hc2tba10pIHwKKysJCQkJCSAgICAgKH5tdXRhdGVfbWFza1trXSAmCisrCQkJCQkgICAgICBwcmFuZG9tX3UzMl9tYXgoMjU2KSk7CisrCQkJY2lkciA9IHByYW5kb21fdTMyX21heCgxMjgpICsgMTsKKysJCQlwZWVyID0gcGVlcnNbcHJhbmRvbV91MzJfbWF4KE5VTV9QRUVSUyldOworKwkJCWlmICh3Z19hbGxvd2VkaXBzX2luc2VydF92NigmdCwKKysJCQkJCQkgICAgKHN0cnVjdCBpbjZfYWRkciAqKW11dGF0ZWQsCisrCQkJCQkJICAgIGNpZHIsIHBlZXIsICZtdXRleCkgPCAwKSB7CisrCQkJCXByX2VycigiYWxsb3dlZGlwcyByYW5kb20gc2VsZi10ZXN0IG1hbGxvYzogRkFJTFxuIik7CisrCQkJCWdvdG8gZnJlZV9sb2NrZWQ7CisrCQkJfQorKwkJCWlmIChob3JyaWJsZV9hbGxvd2VkaXBzX2luc2VydF92NigKKysJCQkJICAgICZoLCAoc3RydWN0IGluNl9hZGRyICopbXV0YXRlZCwgY2lkciwKKysJCQkJICAgIHBlZXIpKSB7CisrCQkJCXByX2VycigiYWxsb3dlZGlwcyByYW5kb20gc2VsZi10ZXN0IG1hbGxvYzogRkFJTFxuIik7CisrCQkJCWdvdG8gZnJlZV9sb2NrZWQ7CisrCQkJfQorKwkJfQorKwl9CisrCisrCW11dGV4X3VubG9jaygmbXV0ZXgpOworKworKwlpZiAoSVNfRU5BQkxFRChERUJVR19QUklOVF9UUklFX0dSQVBIVklaKSkgeworKwkJcHJpbnRfdHJlZSh0LnJvb3Q0LCAzMik7CisrCQlwcmludF90cmVlKHQucm9vdDYsIDEyOCk7CisrCX0KKysKKysJZm9yIChpID0gMDsgaSA8IE5VTV9RVUVSSUVTOyArK2kpIHsKKysJCXByYW5kb21fYnl0ZXMoaXAsIDQpOworKwkJaWYgKGxvb2t1cCh0LnJvb3Q0LCAzMiwgaXApICE9CisrCQkgICAgaG9ycmlibGVfYWxsb3dlZGlwc19sb29rdXBfdjQoJmgsIChzdHJ1Y3QgaW5fYWRkciAqKWlwKSkgeworKwkJCXByX2VycigiYWxsb3dlZGlwcyByYW5kb20gc2VsZi10ZXN0OiBGQUlMXG4iKTsKKysJCQlnb3RvIGZyZWU7CisrCQl9CisrCX0KKysKKysJZm9yIChpID0gMDsgaSA8IE5VTV9RVUVSSUVTOyArK2kpIHsKKysJCXByYW5kb21fYnl0ZXMoaXAsIDE2KTsKKysJCWlmIChsb29rdXAodC5yb290NiwgMTI4LCBpcCkgIT0KKysJCSAgICBob3JyaWJsZV9hbGxvd2VkaXBzX2xvb2t1cF92NigmaCwgKHN0cnVjdCBpbjZfYWRkciAqKWlwKSkgeworKwkJCXByX2VycigiYWxsb3dlZGlwcyByYW5kb20gc2VsZi10ZXN0OiBGQUlMXG4iKTsKKysJCQlnb3RvIGZyZWU7CisrCQl9CisrCX0KKysJcmV0ID0gdHJ1ZTsKKysKKytmcmVlOgorKwltdXRleF9sb2NrKCZtdXRleCk7CisrZnJlZV9sb2NrZWQ6CisrCXdnX2FsbG93ZWRpcHNfZnJlZSgmdCwgJm11dGV4KTsKKysJbXV0ZXhfdW5sb2NrKCZtdXRleCk7CisrCWhvcnJpYmxlX2FsbG93ZWRpcHNfZnJlZSgmaCk7CisrCWlmIChwZWVycykgeworKwkJZm9yIChpID0gMDsgaSA8IE5VTV9QRUVSUzsgKytpKQorKwkJCWtmcmVlKHBlZXJzW2ldKTsKKysJfQorKwlrZnJlZShwZWVycyk7CisrCXJldHVybiByZXQ7CisrfQorKworK3N0YXRpYyBfX2luaXQgaW5saW5lIHN0cnVjdCBpbl9hZGRyICppcDQodTggYSwgdTggYiwgdTggYywgdTggZCkKKyt7CisrCXN0YXRpYyBzdHJ1Y3QgaW5fYWRkciBpcDsKKysJdTggKnNwbGl0ID0gKHU4ICopJmlwOworKworKwlzcGxpdFswXSA9IGE7CisrCXNwbGl0WzFdID0gYjsKKysJc3BsaXRbMl0gPSBjOworKwlzcGxpdFszXSA9IGQ7CisrCXJldHVybiAmaXA7CisrfQorKworK3N0YXRpYyBfX2luaXQgaW5saW5lIHN0cnVjdCBpbjZfYWRkciAqaXA2KHUzMiBhLCB1MzIgYiwgdTMyIGMsIHUzMiBkKQorK3sKKysJc3RhdGljIHN0cnVjdCBpbjZfYWRkciBpcDsKKysJX19iZTMyICpzcGxpdCA9IChfX2JlMzIgKikmaXA7CisrCisrCXNwbGl0WzBdID0gY3B1X3RvX2JlMzIoYSk7CisrCXNwbGl0WzFdID0gY3B1X3RvX2JlMzIoYik7CisrCXNwbGl0WzJdID0gY3B1X3RvX2JlMzIoYyk7CisrCXNwbGl0WzNdID0gY3B1X3RvX2JlMzIoZCk7CisrCXJldHVybiAmaXA7CisrfQorKworK3N0YXRpYyBfX2luaXQgc3RydWN0IHdnX3BlZXIgKmluaXRfcGVlcih2b2lkKQorK3sKKysJc3RydWN0IHdnX3BlZXIgKnBlZXIgPSBremFsbG9jKHNpemVvZigqcGVlciksIEdGUF9LRVJORUwpOworKworKwlpZiAoIXBlZXIpCisrCQlyZXR1cm4gTlVMTDsKKysJa3JlZl9pbml0KCZwZWVyLT5yZWZjb3VudCk7CisrCUlOSVRfTElTVF9IRUFEKCZwZWVyLT5hbGxvd2VkaXBzX2xpc3QpOworKwlyZXR1cm4gcGVlcjsKKyt9CisrCisrI2RlZmluZSBpbnNlcnQodmVyc2lvbiwgbWVtLCBpcGEsIGlwYiwgaXBjLCBpcGQsIGNpZHIpICAgICAgICAgICAgICAgICAgICAgICBcCisrCXdnX2FsbG93ZWRpcHNfaW5zZXJ0X3YjI3ZlcnNpb24oJnQsIGlwIyN2ZXJzaW9uKGlwYSwgaXBiLCBpcGMsIGlwZCksIFwKKysJCQkJCWNpZHIsIG1lbSwgJm11dGV4KQorKworKyNkZWZpbmUgbWF5YmVfZmFpbCgpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSsraTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJaWYgKCFfcykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJcHJfaW5mbygiYWxsb3dlZGlwcyBzZWxmLXRlc3QgJXp1OiBGQUlMXG4iLCBpKTsgXAorKwkJCXN1Y2Nlc3MgPSBmYWxzZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwl9IHdoaWxlICgwKQorKworKyNkZWZpbmUgdGVzdCh2ZXJzaW9uLCBtZW0sIGlwYSwgaXBiLCBpcGMsIGlwZCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJYm9vbCBfcyA9IGxvb2t1cCh0LnJvb3QjI3ZlcnNpb24sICh2ZXJzaW9uKSA9PSA0ID8gMzIgOiAxMjgsIFwKKysJCQkJIGlwIyN2ZXJzaW9uKGlwYSwgaXBiLCBpcGMsIGlwZCkpID09IChtZW0pOyAgXAorKwkJbWF5YmVfZmFpbCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJfSB3aGlsZSAoMCkKKysKKysjZGVmaW5lIHRlc3RfbmVnYXRpdmUodmVyc2lvbiwgbWVtLCBpcGEsIGlwYiwgaXBjLCBpcGQpIGRvIHsgICAgICAgICAgICAgICAgIFwKKysJCWJvb2wgX3MgPSBsb29rdXAodC5yb290IyN2ZXJzaW9uLCAodmVyc2lvbikgPT0gNCA/IDMyIDogMTI4LCBcCisrCQkJCSBpcCMjdmVyc2lvbihpcGEsIGlwYiwgaXBjLCBpcGQpKSAhPSAobWVtKTsgIFwKKysJCW1heWJlX2ZhaWwoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCX0gd2hpbGUgKDApCisrCisrI2RlZmluZSB0ZXN0X2Jvb2xlYW4oY29uZCkgZG8geyAgIFwKKysJCWJvb2wgX3MgPSAoY29uZCk7IFwKKysJCW1heWJlX2ZhaWwoKTsgICAgIFwKKysJfSB3aGlsZSAoMCkKKysKKytib29sIF9faW5pdCB3Z19hbGxvd2VkaXBzX3NlbGZ0ZXN0KHZvaWQpCisreworKwlib29sIGZvdW5kX2EgPSBmYWxzZSwgZm91bmRfYiA9IGZhbHNlLCBmb3VuZF9jID0gZmFsc2UsIGZvdW5kX2QgPSBmYWxzZSwKKysJICAgICBmb3VuZF9lID0gZmFsc2UsIGZvdW5kX290aGVyID0gZmFsc2U7CisrCXN0cnVjdCB3Z19wZWVyICphID0gaW5pdF9wZWVyKCksICpiID0gaW5pdF9wZWVyKCksICpjID0gaW5pdF9wZWVyKCksCisrCQkgICAgICAgKmQgPSBpbml0X3BlZXIoKSwgKmUgPSBpbml0X3BlZXIoKSwgKmYgPSBpbml0X3BlZXIoKSwKKysJCSAgICAgICAqZyA9IGluaXRfcGVlcigpLCAqaCA9IGluaXRfcGVlcigpOworKwlzdHJ1Y3QgYWxsb3dlZGlwc19ub2RlICppdGVyX25vZGU7CisrCWJvb2wgc3VjY2VzcyA9IGZhbHNlOworKwlzdHJ1Y3QgYWxsb3dlZGlwcyB0OworKwlERUZJTkVfTVVURVgobXV0ZXgpOworKwlzdHJ1Y3QgaW42X2FkZHIgaXA7CisrCXNpemVfdCBpID0gMCwgY291bnQgPSAwOworKwlfX2JlNjQgcGFydDsKKysKKysJbXV0ZXhfaW5pdCgmbXV0ZXgpOworKwltdXRleF9sb2NrKCZtdXRleCk7CisrCXdnX2FsbG93ZWRpcHNfaW5pdCgmdCk7CisrCisrCWlmICghYSB8fCAhYiB8fCAhYyB8fCAhZCB8fCAhZSB8fCAhZiB8fCAhZyB8fCAhaCkgeworKwkJcHJfZXJyKCJhbGxvd2VkaXBzIHNlbGYtdGVzdCBtYWxsb2M6IEZBSUxcbiIpOworKwkJZ290byBmcmVlOworKwl9CisrCisrCWluc2VydCg0LCBhLCAxOTIsIDE2OCwgNCwgMCwgMjQpOworKwlpbnNlcnQoNCwgYiwgMTkyLCAxNjgsIDQsIDQsIDMyKTsKKysJaW5zZXJ0KDQsIGMsIDE5MiwgMTY4LCAwLCAwLCAxNik7CisrCWluc2VydCg0LCBkLCAxOTIsIDk1LCA1LCA2NCwgMjcpOworKwkvKiByZXBsYWNlcyBwcmV2aW91cyBlbnRyeSwgYW5kIG1hc2tzZWxmIGlzIHJlcXVpcmVkICovCisrCWluc2VydCg0LCBjLCAxOTIsIDk1LCA1LCA2NSwgMjcpOworKwlpbnNlcnQoNiwgZCwgMHgyNjA3NTMwMCwgMHg2MDAwNmIwMCwgMCwgMHhjMDVmMDU0MywgMTI4KTsKKysJaW5zZXJ0KDYsIGMsIDB4MjYwNzUzMDAsIDB4NjAwMDZiMDAsIDAsIDAsIDY0KTsKKysJaW5zZXJ0KDQsIGUsIDAsIDAsIDAsIDAsIDApOworKwlpbnNlcnQoNiwgZSwgMCwgMCwgMCwgMCwgMCk7CisrCS8qIHJlcGxhY2VzIHByZXZpb3VzIGVudHJ5ICovCisrCWluc2VydCg2LCBmLCAwLCAwLCAwLCAwLCAwKTsKKysJaW5zZXJ0KDYsIGcsIDB4MjQwNDY4MDAsIDAsIDAsIDAsIDMyKTsKKysJLyogbWFza3NlbGYgaXMgcmVxdWlyZWQgKi8KKysJaW5zZXJ0KDYsIGgsIDB4MjQwNDY4MDAsIDB4NDAwNDA4MDAsIDB4ZGVhZGJlZWYsIDB4ZGVhZGJlZWYsIDY0KTsKKysJaW5zZXJ0KDYsIGEsIDB4MjQwNDY4MDAsIDB4NDAwNDA4MDAsIDB4ZGVhZGJlZWYsIDB4ZGVhZGJlZWYsIDEyOCk7CisrCWluc2VydCg2LCBjLCAweDI0NDQ2ODAwLCAweDQwZTQwODAwLCAweGRlYWViZWVmLCAweGRlZmJlZWYsIDEyOCk7CisrCWluc2VydCg2LCBiLCAweDI0NDQ2ODAwLCAweGYwZTQwODAwLCAweGVlYWViZWVmLCAwLCA5OCk7CisrCWluc2VydCg0LCBnLCA2NCwgMTUsIDExMiwgMCwgMjApOworKwkvKiBtYXNrc2VsZiBpcyByZXF1aXJlZCAqLworKwlpbnNlcnQoNCwgaCwgNjQsIDE1LCAxMjMsIDIxMSwgMjUpOworKwlpbnNlcnQoNCwgYSwgMTAsIDAsIDAsIDAsIDI1KTsKKysJaW5zZXJ0KDQsIGIsIDEwLCAwLCAwLCAxMjgsIDI1KTsKKysJaW5zZXJ0KDQsIGEsIDEwLCAxLCAwLCAwLCAzMCk7CisrCWluc2VydCg0LCBiLCAxMCwgMSwgMCwgNCwgMzApOworKwlpbnNlcnQoNCwgYywgMTAsIDEsIDAsIDgsIDI5KTsKKysJaW5zZXJ0KDQsIGQsIDEwLCAxLCAwLCAxNiwgMjkpOworKworKwlpZiAoSVNfRU5BQkxFRChERUJVR19QUklOVF9UUklFX0dSQVBIVklaKSkgeworKwkJcHJpbnRfdHJlZSh0LnJvb3Q0LCAzMik7CisrCQlwcmludF90cmVlKHQucm9vdDYsIDEyOCk7CisrCX0KKysKKysJc3VjY2VzcyA9IHRydWU7CisrCisrCXRlc3QoNCwgYSwgMTkyLCAxNjgsIDQsIDIwKTsKKysJdGVzdCg0LCBhLCAxOTIsIDE2OCwgNCwgMCk7CisrCXRlc3QoNCwgYiwgMTkyLCAxNjgsIDQsIDQpOworKwl0ZXN0KDQsIGMsIDE5MiwgMTY4LCAyMDAsIDE4Mik7CisrCXRlc3QoNCwgYywgMTkyLCA5NSwgNSwgNjgpOworKwl0ZXN0KDQsIGUsIDE5MiwgOTUsIDUsIDk2KTsKKysJdGVzdCg2LCBkLCAweDI2MDc1MzAwLCAweDYwMDA2YjAwLCAwLCAweGMwNWYwNTQzKTsKKysJdGVzdCg2LCBjLCAweDI2MDc1MzAwLCAweDYwMDA2YjAwLCAwLCAweGMwMmUwMWVlKTsKKysJdGVzdCg2LCBmLCAweDI2MDc1MzAwLCAweDYwMDA2YjAxLCAwLCAwKTsKKysJdGVzdCg2LCBnLCAweDI0MDQ2ODAwLCAweDQwMDQwODA2LCAwLCAweDEwMDYpOworKwl0ZXN0KDYsIGcsIDB4MjQwNDY4MDAsIDB4NDAwNDA4MDYsIDB4MTIzNCwgMHg1Njc4KTsKKysJdGVzdCg2LCBmLCAweDI0MDQ2N2ZmLCAweDQwMDQwODA2LCAweDEyMzQsIDB4NTY3OCk7CisrCXRlc3QoNiwgZiwgMHgyNDA0NjgwMSwgMHg0MDA0MDgwNiwgMHgxMjM0LCAweDU2NzgpOworKwl0ZXN0KDYsIGgsIDB4MjQwNDY4MDAsIDB4NDAwNDA4MDAsIDB4MTIzNCwgMHg1Njc4KTsKKysJdGVzdCg2LCBoLCAweDI0MDQ2ODAwLCAweDQwMDQwODAwLCAwLCAwKTsKKysJdGVzdCg2LCBoLCAweDI0MDQ2ODAwLCAweDQwMDQwODAwLCAweDEwMTAxMDEwLCAweDEwMTAxMDEwKTsKKysJdGVzdCg2LCBhLCAweDI0MDQ2ODAwLCAweDQwMDQwODAwLCAweGRlYWRiZWVmLCAweGRlYWRiZWVmKTsKKysJdGVzdCg0LCBnLCA2NCwgMTUsIDExNiwgMjYpOworKwl0ZXN0KDQsIGcsIDY0LCAxNSwgMTI3LCAzKTsKKysJdGVzdCg0LCBnLCA2NCwgMTUsIDEyMywgMSk7CisrCXRlc3QoNCwgaCwgNjQsIDE1LCAxMjMsIDEyOCk7CisrCXRlc3QoNCwgaCwgNjQsIDE1LCAxMjMsIDEyOSk7CisrCXRlc3QoNCwgYSwgMTAsIDAsIDAsIDUyKTsKKysJdGVzdCg0LCBiLCAxMCwgMCwgMCwgMjIwKTsKKysJdGVzdCg0LCBhLCAxMCwgMSwgMCwgMik7CisrCXRlc3QoNCwgYiwgMTAsIDEsIDAsIDYpOworKwl0ZXN0KDQsIGMsIDEwLCAxLCAwLCAxMCk7CisrCXRlc3QoNCwgZCwgMTAsIDEsIDAsIDIwKTsKKysKKysJaW5zZXJ0KDQsIGEsIDEsIDAsIDAsIDAsIDMyKTsKKysJaW5zZXJ0KDQsIGEsIDY0LCAwLCAwLCAwLCAzMik7CisrCWluc2VydCg0LCBhLCAxMjgsIDAsIDAsIDAsIDMyKTsKKysJaW5zZXJ0KDQsIGEsIDE5MiwgMCwgMCwgMCwgMzIpOworKwlpbnNlcnQoNCwgYSwgMjU1LCAwLCAwLCAwLCAzMik7CisrCXdnX2FsbG93ZWRpcHNfcmVtb3ZlX2J5X3BlZXIoJnQsIGEsICZtdXRleCk7CisrCXRlc3RfbmVnYXRpdmUoNCwgYSwgMSwgMCwgMCwgMCk7CisrCXRlc3RfbmVnYXRpdmUoNCwgYSwgNjQsIDAsIDAsIDApOworKwl0ZXN0X25lZ2F0aXZlKDQsIGEsIDEyOCwgMCwgMCwgMCk7CisrCXRlc3RfbmVnYXRpdmUoNCwgYSwgMTkyLCAwLCAwLCAwKTsKKysJdGVzdF9uZWdhdGl2ZSg0LCBhLCAyNTUsIDAsIDAsIDApOworKworKwl3Z19hbGxvd2VkaXBzX2ZyZWUoJnQsICZtdXRleCk7CisrCXdnX2FsbG93ZWRpcHNfaW5pdCgmdCk7CisrCWluc2VydCg0LCBhLCAxOTIsIDE2OCwgMCwgMCwgMTYpOworKwlpbnNlcnQoNCwgYSwgMTkyLCAxNjgsIDAsIDAsIDI0KTsKKysJd2dfYWxsb3dlZGlwc19yZW1vdmVfYnlfcGVlcigmdCwgYSwgJm11dGV4KTsKKysJdGVzdF9uZWdhdGl2ZSg0LCBhLCAxOTIsIDE2OCwgMCwgMSk7CisrCisrCS8qIFRoZXNlIHdpbGwgaGl0IHRoZSBXQVJOX09OKGxlbiA+PSAxMjgpIGluIGZyZWVfbm9kZSBpZiBzb21ldGhpbmcKKysJICogZ29lcyB3cm9uZy4KKysJICovCisrCWZvciAoaSA9IDA7IGkgPCAxMjg7ICsraSkgeworKwkJcGFydCA9IGNwdV90b19iZTY0KH4oMUxMVSA8PCAoaSAlIDY0KSkpOworKwkJbWVtc2V0KCZpcCwgMHhmZiwgMTYpOworKwkJbWVtY3B5KCh1OCAqKSZpcCArIChpIDwgNjQpICogOCwgJnBhcnQsIDgpOworKwkJd2dfYWxsb3dlZGlwc19pbnNlcnRfdjYoJnQsICZpcCwgMTI4LCBhLCAmbXV0ZXgpOworKwl9CisrCisrCXdnX2FsbG93ZWRpcHNfZnJlZSgmdCwgJm11dGV4KTsKKysKKysJd2dfYWxsb3dlZGlwc19pbml0KCZ0KTsKKysJaW5zZXJ0KDQsIGEsIDE5MiwgOTUsIDUsIDkzLCAyNyk7CisrCWluc2VydCg2LCBhLCAweDI2MDc1MzAwLCAweDYwMDA2YjAwLCAwLCAweGMwNWYwNTQzLCAxMjgpOworKwlpbnNlcnQoNCwgYSwgMTAsIDEsIDAsIDIwLCAyOSk7CisrCWluc2VydCg2LCBhLCAweDI2MDc1MzAwLCAweDZkOGE2YmY4LCAweGRhYjFmMWRmLCAweGMwNWYxNTIzLCA4Myk7CisrCWluc2VydCg2LCBhLCAweDI2MDc1MzAwLCAweDZkOGE2YmY4LCAweGRhYjFmMWRmLCAweGMwNWYxNTIzLCAyMSk7CisrCWxpc3RfZm9yX2VhY2hfZW50cnkoaXRlcl9ub2RlLCAmYS0+YWxsb3dlZGlwc19saXN0LCBwZWVyX2xpc3QpIHsKKysJCXU4IGNpZHIsIGlwWzE2XSBfX2FsaWduZWQoX19hbGlnbm9mKHU2NCkpOworKwkJaW50IGZhbWlseSA9IHdnX2FsbG93ZWRpcHNfcmVhZF9ub2RlKGl0ZXJfbm9kZSwgaXAsICZjaWRyKTsKKysKKysJCWNvdW50Kys7CisrCisrCQlpZiAoY2lkciA9PSAyNyAmJiBmYW1pbHkgPT0gQUZfSU5FVCAmJgorKwkJICAgICFtZW1jbXAoaXAsIGlwNCgxOTIsIDk1LCA1LCA2NCksIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpKQorKwkJCWZvdW5kX2EgPSB0cnVlOworKwkJZWxzZSBpZiAoY2lkciA9PSAxMjggJiYgZmFtaWx5ID09IEFGX0lORVQ2ICYmCisrCQkJICFtZW1jbXAoaXAsIGlwNigweDI2MDc1MzAwLCAweDYwMDA2YjAwLCAwLCAweGMwNWYwNTQzKSwKKysJCQkJIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSkKKysJCQlmb3VuZF9iID0gdHJ1ZTsKKysJCWVsc2UgaWYgKGNpZHIgPT0gMjkgJiYgZmFtaWx5ID09IEFGX0lORVQgJiYKKysJCQkgIW1lbWNtcChpcCwgaXA0KDEwLCAxLCAwLCAxNiksIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpKQorKwkJCWZvdW5kX2MgPSB0cnVlOworKwkJZWxzZSBpZiAoY2lkciA9PSA4MyAmJiBmYW1pbHkgPT0gQUZfSU5FVDYgJiYKKysJCQkgIW1lbWNtcChpcCwgaXA2KDB4MjYwNzUzMDAsIDB4NmQ4YTZiZjgsIDB4ZGFiMWUwMDAsIDApLAorKwkJCQkgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpKQorKwkJCWZvdW5kX2QgPSB0cnVlOworKwkJZWxzZSBpZiAoY2lkciA9PSAyMSAmJiBmYW1pbHkgPT0gQUZfSU5FVDYgJiYKKysJCQkgIW1lbWNtcChpcCwgaXA2KDB4MjYwNzUwMDAsIDAsIDAsIDApLAorKwkJCQkgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpKQorKwkJCWZvdW5kX2UgPSB0cnVlOworKwkJZWxzZQorKwkJCWZvdW5kX290aGVyID0gdHJ1ZTsKKysJfQorKwl0ZXN0X2Jvb2xlYW4oY291bnQgPT0gNSk7CisrCXRlc3RfYm9vbGVhbihmb3VuZF9hKTsKKysJdGVzdF9ib29sZWFuKGZvdW5kX2IpOworKwl0ZXN0X2Jvb2xlYW4oZm91bmRfYyk7CisrCXRlc3RfYm9vbGVhbihmb3VuZF9kKTsKKysJdGVzdF9ib29sZWFuKGZvdW5kX2UpOworKwl0ZXN0X2Jvb2xlYW4oIWZvdW5kX290aGVyKTsKKysKKysJaWYgKElTX0VOQUJMRUQoREVCVUdfUkFORE9NX1RSSUUpICYmIHN1Y2Nlc3MpCisrCQlzdWNjZXNzID0gcmFuZG9taXplZF90ZXN0KCk7CisrCisrCWlmIChzdWNjZXNzKQorKwkJcHJfaW5mbygiYWxsb3dlZGlwcyBzZWxmLXRlc3RzOiBwYXNzXG4iKTsKKysKKytmcmVlOgorKwl3Z19hbGxvd2VkaXBzX2ZyZWUoJnQsICZtdXRleCk7CisrCWtmcmVlKGEpOworKwlrZnJlZShiKTsKKysJa2ZyZWUoYyk7CisrCWtmcmVlKGQpOworKwlrZnJlZShlKTsKKysJa2ZyZWUoZik7CisrCWtmcmVlKGcpOworKwlrZnJlZShoKTsKKysJbXV0ZXhfdW5sb2NrKCZtdXRleCk7CisrCisrCXJldHVybiBzdWNjZXNzOworK30KKysKKysjdW5kZWYgdGVzdF9uZWdhdGl2ZQorKyN1bmRlZiB0ZXN0CisrI3VuZGVmIHJlbW92ZQorKyN1bmRlZiBpbnNlcnQKKysjdW5kZWYgaW5pdF9wZWVyCisrCisrI2VuZGlmCistLS0gL2Rldi9udWxsCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VsZnRlc3QvY291bnRlci5jCitAQCAtMCwwICsxLDEwNCBAQAorKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisrLyoKKysgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisrICovCisrCisrI2lmZGVmIERFQlVHCisrYm9vbCBfX2luaXQgd2dfcGFja2V0X2NvdW50ZXJfc2VsZnRlc3Qodm9pZCkKKyt7CisrCXVuc2lnbmVkIGludCB0ZXN0X251bSA9IDAsIGk7CisrCXVuaW9uIG5vaXNlX2NvdW50ZXIgY291bnRlcjsKKysJYm9vbCBzdWNjZXNzID0gdHJ1ZTsKKysKKysjZGVmaW5lIFRfSU5JVCBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQltZW1zZXQoJmNvdW50ZXIsIDAsIHNpemVvZih1bmlvbiBub2lzZV9jb3VudGVyKSk7IFwKKysJCXNwaW5fbG9ja19pbml0KCZjb3VudGVyLnJlY2VpdmUubG9jayk7ICAgICAgICAgICAgXAorKwl9IHdoaWxlICgwKQorKyNkZWZpbmUgVF9MSU0gKENPVU5URVJfV0lORE9XX1NJWkUgKyAxKQorKyNkZWZpbmUgVChuLCB2KSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkrK3Rlc3RfbnVtOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQlpZiAoY291bnRlcl92YWxpZGF0ZSgmY291bnRlciwgbikgIT0gKHYpKSB7ICAgICAgICAgICBcCisrCQkJcHJfZXJyKCJub25jZSBjb3VudGVyIHNlbGYtdGVzdCAldTogRkFJTFxuIiwgIFwKKysJCQkgICAgICAgdGVzdF9udW0pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCXN1Y2Nlc3MgPSBmYWxzZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCX0gd2hpbGUgKDApCisrCisrCVRfSU5JVDsKKysJLyogIDEgKi8gVCgwLCB0cnVlKTsKKysJLyogIDIgKi8gVCgxLCB0cnVlKTsKKysJLyogIDMgKi8gVCgxLCBmYWxzZSk7CisrCS8qICA0ICovIFQoOSwgdHJ1ZSk7CisrCS8qICA1ICovIFQoOCwgdHJ1ZSk7CisrCS8qICA2ICovIFQoNywgdHJ1ZSk7CisrCS8qICA3ICovIFQoNywgZmFsc2UpOworKwkvKiAgOCAqLyBUKFRfTElNLCB0cnVlKTsKKysJLyogIDkgKi8gVChUX0xJTSAtIDEsIHRydWUpOworKwkvKiAxMCAqLyBUKFRfTElNIC0gMSwgZmFsc2UpOworKwkvKiAxMSAqLyBUKFRfTElNIC0gMiwgdHJ1ZSk7CisrCS8qIDEyICovIFQoMiwgdHJ1ZSk7CisrCS8qIDEzICovIFQoMiwgZmFsc2UpOworKwkvKiAxNCAqLyBUKFRfTElNICsgMTYsIHRydWUpOworKwkvKiAxNSAqLyBUKDMsIGZhbHNlKTsKKysJLyogMTYgKi8gVChUX0xJTSArIDE2LCBmYWxzZSk7CisrCS8qIDE3ICovIFQoVF9MSU0gKiA0LCB0cnVlKTsKKysJLyogMTggKi8gVChUX0xJTSAqIDQgLSAoVF9MSU0gLSAxKSwgdHJ1ZSk7CisrCS8qIDE5ICovIFQoMTAsIGZhbHNlKTsKKysJLyogMjAgKi8gVChUX0xJTSAqIDQgLSBUX0xJTSwgZmFsc2UpOworKwkvKiAyMSAqLyBUKFRfTElNICogNCAtIChUX0xJTSArIDEpLCBmYWxzZSk7CisrCS8qIDIyICovIFQoVF9MSU0gKiA0IC0gKFRfTElNIC0gMiksIHRydWUpOworKwkvKiAyMyAqLyBUKFRfTElNICogNCArIDEgLSBUX0xJTSwgZmFsc2UpOworKwkvKiAyNCAqLyBUKDAsIGZhbHNlKTsKKysJLyogMjUgKi8gVChSRUpFQ1RfQUZURVJfTUVTU0FHRVMsIGZhbHNlKTsKKysJLyogMjYgKi8gVChSRUpFQ1RfQUZURVJfTUVTU0FHRVMgLSAxLCB0cnVlKTsKKysJLyogMjcgKi8gVChSRUpFQ1RfQUZURVJfTUVTU0FHRVMsIGZhbHNlKTsKKysJLyogMjggKi8gVChSRUpFQ1RfQUZURVJfTUVTU0FHRVMgLSAxLCBmYWxzZSk7CisrCS8qIDI5ICovIFQoUkVKRUNUX0FGVEVSX01FU1NBR0VTIC0gMiwgdHJ1ZSk7CisrCS8qIDMwICovIFQoUkVKRUNUX0FGVEVSX01FU1NBR0VTICsgMSwgZmFsc2UpOworKwkvKiAzMSAqLyBUKFJFSkVDVF9BRlRFUl9NRVNTQUdFUyArIDIsIGZhbHNlKTsKKysJLyogMzIgKi8gVChSRUpFQ1RfQUZURVJfTUVTU0FHRVMgLSAyLCBmYWxzZSk7CisrCS8qIDMzICovIFQoUkVKRUNUX0FGVEVSX01FU1NBR0VTIC0gMywgdHJ1ZSk7CisrCS8qIDM0ICovIFQoMCwgZmFsc2UpOworKworKwlUX0lOSVQ7CisrCWZvciAoaSA9IDE7IGkgPD0gQ09VTlRFUl9XSU5ET1dfU0laRTsgKytpKQorKwkJVChpLCB0cnVlKTsKKysJVCgwLCB0cnVlKTsKKysJVCgwLCBmYWxzZSk7CisrCisrCVRfSU5JVDsKKysJZm9yIChpID0gMjsgaSA8PSBDT1VOVEVSX1dJTkRPV19TSVpFICsgMTsgKytpKQorKwkJVChpLCB0cnVlKTsKKysJVCgxLCB0cnVlKTsKKysJVCgwLCBmYWxzZSk7CisrCisrCVRfSU5JVDsKKysJZm9yIChpID0gQ09VTlRFUl9XSU5ET1dfU0laRSArIDE7IGktLSA+IDA7KQorKwkJVChpLCB0cnVlKTsKKysKKysJVF9JTklUOworKwlmb3IgKGkgPSBDT1VOVEVSX1dJTkRPV19TSVpFICsgMjsgaS0tID4gMTspCisrCQlUKGksIHRydWUpOworKwlUKDAsIGZhbHNlKTsKKysKKysJVF9JTklUOworKwlmb3IgKGkgPSBDT1VOVEVSX1dJTkRPV19TSVpFICsgMTsgaS0tID4gMTspCisrCQlUKGksIHRydWUpOworKwlUKENPVU5URVJfV0lORE9XX1NJWkUgKyAxLCB0cnVlKTsKKysJVCgwLCBmYWxzZSk7CisrCisrCVRfSU5JVDsKKysJZm9yIChpID0gQ09VTlRFUl9XSU5ET1dfU0laRSArIDE7IGktLSA+IDE7KQorKwkJVChpLCB0cnVlKTsKKysJVCgwLCB0cnVlKTsKKysJVChDT1VOVEVSX1dJTkRPV19TSVpFICsgMSwgdHJ1ZSk7CisrCisrI3VuZGVmIFQKKysjdW5kZWYgVF9MSU0KKysjdW5kZWYgVF9JTklUCisrCisrCWlmIChzdWNjZXNzKQorKwkJcHJfaW5mbygibm9uY2UgY291bnRlciBzZWxmLXRlc3RzOiBwYXNzXG4iKTsKKysJcmV0dXJuIHN1Y2Nlc3M7CisrfQorKyNlbmRpZgorLS0tIC9kZXYvbnVsbAorKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L3JhdGVsaW1pdGVyLmMKK0BAIC0wLDAgKzEsMjI2IEBACisrLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKysvKgorKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKysgKi8KKysKKysjaWZkZWYgREVCVUcKKysKKysjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworKwlib29sIHJlc3VsdDsKKysJdW5zaWduZWQgaW50IG1zZWNfdG9fc2xlZXBfYmVmb3JlOworK30gZXhwZWN0ZWRfcmVzdWx0c1tdIF9faW5pdGNvbnN0ID0geworKwlbMCAuLi4gUEFDS0VUU19CVVJTVEFCTEUgLSAxXSA9IHsgdHJ1ZSwgMCB9LAorKwlbUEFDS0VUU19CVVJTVEFCTEVdID0geyBmYWxzZSwgMCB9LAorKwlbUEFDS0VUU19CVVJTVEFCTEUgKyAxXSA9IHsgdHJ1ZSwgTVNFQ19QRVJfU0VDIC8gUEFDS0VUU19QRVJfU0VDT05EIH0sCisrCVtQQUNLRVRTX0JVUlNUQUJMRSArIDJdID0geyBmYWxzZSwgMCB9LAorKwlbUEFDS0VUU19CVVJTVEFCTEUgKyAzXSA9IHsgdHJ1ZSwgKE1TRUNfUEVSX1NFQyAvIFBBQ0tFVFNfUEVSX1NFQ09ORCkgKiAyIH0sCisrCVtQQUNLRVRTX0JVUlNUQUJMRSArIDRdID0geyB0cnVlLCAwIH0sCisrCVtQQUNLRVRTX0JVUlNUQUJMRSArIDVdID0geyBmYWxzZSwgMCB9CisrfTsKKysKKytzdGF0aWMgX19pbml0IHVuc2lnbmVkIGludCBtYXhpbXVtX2ppZmZpZXNfYXRfaW5kZXgoaW50IGluZGV4KQorK3sKKysJdW5zaWduZWQgaW50IHRvdGFsX21zZWNzID0gMiAqIE1TRUNfUEVSX1NFQyAvIFBBQ0tFVFNfUEVSX1NFQ09ORCAvIDM7CisrCWludCBpOworKworKwlmb3IgKGkgPSAwOyBpIDw9IGluZGV4OyArK2kpCisrCQl0b3RhbF9tc2VjcyArPSBleHBlY3RlZF9yZXN1bHRzW2ldLm1zZWNfdG9fc2xlZXBfYmVmb3JlOworKwlyZXR1cm4gbXNlY3NfdG9famlmZmllcyh0b3RhbF9tc2Vjcyk7CisrfQorKworK3N0YXRpYyBfX2luaXQgaW50IHRpbWluZ3NfdGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiNCwgc3RydWN0IGlwaGRyICpoZHI0LAorKwkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiNiwgc3RydWN0IGlwdjZoZHIgKmhkcjYsCisrCQkJICAgICAgIGludCAqdGVzdCkKKyt7CisrCXVuc2lnbmVkIGxvbmcgbG9vcF9zdGFydF90aW1lOworKwlpbnQgaTsKKysKKysJd2dfcmF0ZWxpbWl0ZXJfZ2NfZW50cmllcyhOVUxMKTsKKysJcmN1X2JhcnJpZXIoKTsKKysJbG9vcF9zdGFydF90aW1lID0gamlmZmllczsKKysKKysJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXhwZWN0ZWRfcmVzdWx0cyk7ICsraSkgeworKwkJaWYgKGV4cGVjdGVkX3Jlc3VsdHNbaV0ubXNlY190b19zbGVlcF9iZWZvcmUpCisrCQkJbXNsZWVwKGV4cGVjdGVkX3Jlc3VsdHNbaV0ubXNlY190b19zbGVlcF9iZWZvcmUpOworKworKwkJaWYgKHRpbWVfaXNfYmVmb3JlX2ppZmZpZXMobG9vcF9zdGFydF90aW1lICsKKysJCQkJCSAgIG1heGltdW1famlmZmllc19hdF9pbmRleChpKSkpCisrCQkJcmV0dXJuIC1FVElNRURPVVQ7CisrCQlpZiAod2dfcmF0ZWxpbWl0ZXJfYWxsb3coc2tiNCwgJmluaXRfbmV0KSAhPQorKwkJCQkJZXhwZWN0ZWRfcmVzdWx0c1tpXS5yZXN1bHQpCisrCQkJcmV0dXJuIC1FWEZVTEw7CisrCQkrKygqdGVzdCk7CisrCisrCQloZHI0LT5zYWRkciA9IGh0b25sKG50b2hsKGhkcjQtPnNhZGRyKSArIGkgKyAxKTsKKysJCWlmICh0aW1lX2lzX2JlZm9yZV9qaWZmaWVzKGxvb3Bfc3RhcnRfdGltZSArCisrCQkJCQkgICBtYXhpbXVtX2ppZmZpZXNfYXRfaW5kZXgoaSkpKQorKwkJCXJldHVybiAtRVRJTUVET1VUOworKwkJaWYgKCF3Z19yYXRlbGltaXRlcl9hbGxvdyhza2I0LCAmaW5pdF9uZXQpKQorKwkJCXJldHVybiAtRVhGVUxMOworKwkJKysoKnRlc3QpOworKworKwkJaGRyNC0+c2FkZHIgPSBodG9ubChudG9obChoZHI0LT5zYWRkcikgLSBpIC0gMSk7CisrCisrI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCisrCQloZHI2LT5zYWRkci5pbjZfdS51Nl9hZGRyMzJbMl0gPSBodG9ubChpKTsKKysJCWhkcjYtPnNhZGRyLmluNl91LnU2X2FkZHIzMlszXSA9IGh0b25sKGkpOworKwkJaWYgKHRpbWVfaXNfYmVmb3JlX2ppZmZpZXMobG9vcF9zdGFydF90aW1lICsKKysJCQkJCSAgIG1heGltdW1famlmZmllc19hdF9pbmRleChpKSkpCisrCQkJcmV0dXJuIC1FVElNRURPVVQ7CisrCQlpZiAod2dfcmF0ZWxpbWl0ZXJfYWxsb3coc2tiNiwgJmluaXRfbmV0KSAhPQorKwkJCQkJZXhwZWN0ZWRfcmVzdWx0c1tpXS5yZXN1bHQpCisrCQkJcmV0dXJuIC1FWEZVTEw7CisrCQkrKygqdGVzdCk7CisrCisrCQloZHI2LT5zYWRkci5pbjZfdS51Nl9hZGRyMzJbMF0gPQorKwkJCWh0b25sKG50b2hsKGhkcjYtPnNhZGRyLmluNl91LnU2X2FkZHIzMlswXSkgKyBpICsgMSk7CisrCQlpZiAodGltZV9pc19iZWZvcmVfamlmZmllcyhsb29wX3N0YXJ0X3RpbWUgKworKwkJCQkJICAgbWF4aW11bV9qaWZmaWVzX2F0X2luZGV4KGkpKSkKKysJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKysJCWlmICghd2dfcmF0ZWxpbWl0ZXJfYWxsb3coc2tiNiwgJmluaXRfbmV0KSkKKysJCQlyZXR1cm4gLUVYRlVMTDsKKysJCSsrKCp0ZXN0KTsKKysKKysJCWhkcjYtPnNhZGRyLmluNl91LnU2X2FkZHIzMlswXSA9CisrCQkJaHRvbmwobnRvaGwoaGRyNi0+c2FkZHIuaW42X3UudTZfYWRkcjMyWzBdKSAtIGkgLSAxKTsKKysKKysJCWlmICh0aW1lX2lzX2JlZm9yZV9qaWZmaWVzKGxvb3Bfc3RhcnRfdGltZSArCisrCQkJCQkgICBtYXhpbXVtX2ppZmZpZXNfYXRfaW5kZXgoaSkpKQorKwkJCXJldHVybiAtRVRJTUVET1VUOworKyNlbmRpZgorKwl9CisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgX19pbml0IGludCBjYXBhY2l0eV90ZXN0KHN0cnVjdCBza19idWZmICpza2I0LCBzdHJ1Y3QgaXBoZHIgKmhkcjQsCisrCQkJCWludCAqdGVzdCkKKyt7CisrCWludCBpOworKworKwl3Z19yYXRlbGltaXRlcl9nY19lbnRyaWVzKE5VTEwpOworKwlyY3VfYmFycmllcigpOworKworKwlpZiAoYXRvbWljX3JlYWQoJnRvdGFsX2VudHJpZXMpKQorKwkJcmV0dXJuIC1FWEZVTEw7CisrCSsrKCp0ZXN0KTsKKysKKysJZm9yIChpID0gMDsgaSA8PSBtYXhfZW50cmllczsgKytpKSB7CisrCQloZHI0LT5zYWRkciA9IGh0b25sKGkpOworKwkJaWYgKHdnX3JhdGVsaW1pdGVyX2FsbG93KHNrYjQsICZpbml0X25ldCkgIT0gKGkgIT0gbWF4X2VudHJpZXMpKQorKwkJCXJldHVybiAtRVhGVUxMOworKwkJKysoKnRlc3QpOworKwl9CisrCXJldHVybiAwOworK30KKysKKytib29sIF9faW5pdCB3Z19yYXRlbGltaXRlcl9zZWxmdGVzdCh2b2lkKQorK3sKKysJZW51bSB7IFRSSUFMU19CRUZPUkVfR0lWSU5HX1VQID0gNTAwMCB9OworKwlib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKysJaW50IHRlc3QgPSAwLCB0cmlhbHM7CisrCXN0cnVjdCBza19idWZmICpza2I0LCAqc2tiNjsKKysJc3RydWN0IGlwaGRyICpoZHI0OworKwlzdHJ1Y3QgaXB2NmhkciAqaGRyNjsKKysKKysJaWYgKElTX0VOQUJMRUQoQ09ORklHX0tBU0FOKSB8fCBJU19FTkFCTEVEKENPTkZJR19VQlNBTikpCisrCQlyZXR1cm4gdHJ1ZTsKKysKKysJQlVJTERfQlVHX09OKE1TRUNfUEVSX1NFQyAlIFBBQ0tFVFNfUEVSX1NFQ09ORCAhPSAwKTsKKysKKysJaWYgKHdnX3JhdGVsaW1pdGVyX2luaXQoKSkKKysJCWdvdG8gb3V0OworKwkrK3Rlc3Q7CisrCWlmICh3Z19yYXRlbGltaXRlcl9pbml0KCkpIHsKKysJCXdnX3JhdGVsaW1pdGVyX3VuaW5pdCgpOworKwkJZ290byBvdXQ7CisrCX0KKysJKyt0ZXN0OworKwlpZiAod2dfcmF0ZWxpbWl0ZXJfaW5pdCgpKSB7CisrCQl3Z19yYXRlbGltaXRlcl91bmluaXQoKTsKKysJCXdnX3JhdGVsaW1pdGVyX3VuaW5pdCgpOworKwkJZ290byBvdXQ7CisrCX0KKysJKyt0ZXN0OworKworKwlza2I0ID0gYWxsb2Nfc2tiKHNpemVvZihzdHJ1Y3QgaXBoZHIpLCBHRlBfS0VSTkVMKTsKKysJaWYgKHVubGlrZWx5KCFza2I0KSkKKysJCWdvdG8gZXJyX25vZnJlZTsKKysJc2tiNC0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7CisrCWhkcjQgPSAoc3RydWN0IGlwaGRyICopc2tiX3B1dChza2I0LCBzaXplb2YoKmhkcjQpKTsKKysJaGRyNC0+c2FkZHIgPSBodG9ubCg4MTgyKTsKKysJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYjQpOworKwkrK3Rlc3Q7CisrCisrI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCisrCXNrYjYgPSBhbGxvY19za2Ioc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSwgR0ZQX0tFUk5FTCk7CisrCWlmICh1bmxpa2VseSghc2tiNikpIHsKKysJCWtmcmVlX3NrYihza2I0KTsKKysJCWdvdG8gZXJyX25vZnJlZTsKKysJfQorKwlza2I2LT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpOworKwloZHI2ID0gKHN0cnVjdCBpcHY2aGRyICopc2tiX3B1dChza2I2LCBzaXplb2YoKmhkcjYpKTsKKysJaGRyNi0+c2FkZHIuaW42X3UudTZfYWRkcjMyWzBdID0gaHRvbmwoMTIxMik7CisrCWhkcjYtPnNhZGRyLmluNl91LnU2X2FkZHIzMlsxXSA9IGh0b25sKDI4OTE4OCk7CisrCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2I2KTsKKysJKyt0ZXN0OworKyNlbmRpZgorKworKwlmb3IgKHRyaWFscyA9IFRSSUFMU19CRUZPUkVfR0lWSU5HX1VQOzspIHsKKysJCWludCB0ZXN0X2NvdW50ID0gMCwgcmV0OworKworKwkJcmV0ID0gdGltaW5nc190ZXN0KHNrYjQsIGhkcjQsIHNrYjYsIGhkcjYsICZ0ZXN0X2NvdW50KTsKKysJCWlmIChyZXQgPT0gLUVUSU1FRE9VVCkgeworKwkJCWlmICghdHJpYWxzLS0pIHsKKysJCQkJdGVzdCArPSB0ZXN0X2NvdW50OworKwkJCQlnb3RvIGVycjsKKysJCQl9CisrCQkJbXNsZWVwKDUwMCk7CisrCQkJY29udGludWU7CisrCQl9IGVsc2UgaWYgKHJldCA8IDApIHsKKysJCQl0ZXN0ICs9IHRlc3RfY291bnQ7CisrCQkJZ290byBlcnI7CisrCQl9IGVsc2UgeworKwkJCXRlc3QgKz0gdGVzdF9jb3VudDsKKysJCQlicmVhazsKKysJCX0KKysJfQorKworKwlmb3IgKHRyaWFscyA9IFRSSUFMU19CRUZPUkVfR0lWSU5HX1VQOzspIHsKKysJCWludCB0ZXN0X2NvdW50ID0gMDsKKysKKysJCWlmIChjYXBhY2l0eV90ZXN0KHNrYjQsIGhkcjQsICZ0ZXN0X2NvdW50KSA8IDApIHsKKysJCQlpZiAoIXRyaWFscy0tKSB7CisrCQkJCXRlc3QgKz0gdGVzdF9jb3VudDsKKysJCQkJZ290byBlcnI7CisrCQkJfQorKwkJCW1zbGVlcCg1MCk7CisrCQkJY29udGludWU7CisrCQl9CisrCQl0ZXN0ICs9IHRlc3RfY291bnQ7CisrCQlicmVhazsKKysJfQorKworKwlzdWNjZXNzID0gdHJ1ZTsKKysKKytlcnI6CisrCWtmcmVlX3NrYihza2I0KTsKKysjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKKysJa2ZyZWVfc2tiKHNrYjYpOworKyNlbmRpZgorK2Vycl9ub2ZyZWU6CisrCXdnX3JhdGVsaW1pdGVyX3VuaW5pdCgpOworKwl3Z19yYXRlbGltaXRlcl91bmluaXQoKTsKKysJd2dfcmF0ZWxpbWl0ZXJfdW5pbml0KCk7CisrCS8qIFVuaW5pdCBvbmUgZXh0cmEgdGltZSB0byBjaGVjayB1bmRlcmZsb3cgZGV0ZWN0aW9uLiAqLworKwl3Z19yYXRlbGltaXRlcl91bmluaXQoKTsKKytvdXQ6CisrCWlmIChzdWNjZXNzKQorKwkJcHJfaW5mbygicmF0ZWxpbWl0ZXIgc2VsZi10ZXN0czogcGFzc1xuIik7CisrCWVsc2UKKysJCXByX2VycigicmF0ZWxpbWl0ZXIgc2VsZi10ZXN0ICVkOiBGQUlMXG4iLCB0ZXN0KTsKKysKKysJcmV0dXJuIHN1Y2Nlc3M7CisrfQorKyNlbmRpZgorLS0tIC9kZXYvbnVsbAorKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYworQEAgLTAsMCArMSw0MTMgQEAKKysvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorKy8qCisrICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKyAqLworKworKyNpbmNsdWRlICJxdWV1ZWluZy5oIgorKyNpbmNsdWRlICJ0aW1lcnMuaCIKKysjaW5jbHVkZSAiZGV2aWNlLmgiCisrI2luY2x1ZGUgInBlZXIuaCIKKysjaW5jbHVkZSAic29ja2V0LmgiCisrI2luY2x1ZGUgIm1lc3NhZ2VzLmgiCisrI2luY2x1ZGUgImNvb2tpZS5oIgorKworKyNpbmNsdWRlIDxsaW51eC91aW8uaD4KKysjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgorKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKysjaW5jbHVkZSA8bmV0L2lwX3R1bm5lbHMuaD4KKysjaW5jbHVkZSA8bmV0L3VkcC5oPgorKyNpbmNsdWRlIDxuZXQvc29jay5oPgorKworK3N0YXRpYyB2b2lkIHdnX3BhY2tldF9zZW5kX2hhbmRzaGFrZV9pbml0aWF0aW9uKHN0cnVjdCB3Z19wZWVyICpwZWVyKQorK3sKKysJc3RydWN0IG1lc3NhZ2VfaGFuZHNoYWtlX2luaXRpYXRpb24gcGFja2V0OworKworKwlpZiAoIXdnX2JpcnRoZGF0ZV9oYXNfZXhwaXJlZChhdG9taWM2NF9yZWFkKCZwZWVyLT5sYXN0X3NlbnRfaGFuZHNoYWtlKSwKKysJCQkJICAgICAgUkVLRVlfVElNRU9VVCkpCisrCQlyZXR1cm47IC8qIFRoaXMgZnVuY3Rpb24gaXMgcmF0ZSBsaW1pdGVkLiAqLworKworKwlhdG9taWM2NF9zZXQoJnBlZXItPmxhc3Rfc2VudF9oYW5kc2hha2UsIGt0aW1lX2dldF9jb2Fyc2VfYm9vdHRpbWVfbnMoKSk7CisrCW5ldF9kYmdfcmF0ZWxpbWl0ZWQoIiVzOiBTZW5kaW5nIGhhbmRzaGFrZSBpbml0aWF0aW9uIHRvIHBlZXIgJWxsdSAoJXBJU3Bmc2MpXG4iLAorKwkJCSAgICBwZWVyLT5kZXZpY2UtPmRldi0+bmFtZSwgcGVlci0+aW50ZXJuYWxfaWQsCisrCQkJICAgICZwZWVyLT5lbmRwb2ludC5hZGRyKTsKKysKKysJaWYgKHdnX25vaXNlX2hhbmRzaGFrZV9jcmVhdGVfaW5pdGlhdGlvbigmcGFja2V0LCAmcGVlci0+aGFuZHNoYWtlKSkgeworKwkJd2dfY29va2llX2FkZF9tYWNfdG9fcGFja2V0KCZwYWNrZXQsIHNpemVvZihwYWNrZXQpLCBwZWVyKTsKKysJCXdnX3RpbWVyc19hbnlfYXV0aGVudGljYXRlZF9wYWNrZXRfdHJhdmVyc2FsKHBlZXIpOworKwkJd2dfdGltZXJzX2FueV9hdXRoZW50aWNhdGVkX3BhY2tldF9zZW50KHBlZXIpOworKwkJYXRvbWljNjRfc2V0KCZwZWVyLT5sYXN0X3NlbnRfaGFuZHNoYWtlLAorKwkJCSAgICAga3RpbWVfZ2V0X2NvYXJzZV9ib290dGltZV9ucygpKTsKKysJCXdnX3NvY2tldF9zZW5kX2J1ZmZlcl90b19wZWVyKHBlZXIsICZwYWNrZXQsIHNpemVvZihwYWNrZXQpLAorKwkJCQkJICAgICAgSEFORFNIQUtFX0RTQ1ApOworKwkJd2dfdGltZXJzX2hhbmRzaGFrZV9pbml0aWF0ZWQocGVlcik7CisrCX0KKyt9CisrCisrdm9pZCB3Z19wYWNrZXRfaGFuZHNoYWtlX3NlbmRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKKyt7CisrCXN0cnVjdCB3Z19wZWVyICpwZWVyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3Z19wZWVyLAorKwkJCQkJICAgIHRyYW5zbWl0X2hhbmRzaGFrZV93b3JrKTsKKysKKysJd2dfcGFja2V0X3NlbmRfaGFuZHNoYWtlX2luaXRpYXRpb24ocGVlcik7CisrCXdnX3BlZXJfcHV0KHBlZXIpOworK30KKysKKyt2b2lkIHdnX3BhY2tldF9zZW5kX3F1ZXVlZF9oYW5kc2hha2VfaW5pdGlhdGlvbihzdHJ1Y3Qgd2dfcGVlciAqcGVlciwKKysJCQkJCQlib29sIGlzX3JldHJ5KQorK3sKKysJaWYgKCFpc19yZXRyeSkKKysJCXBlZXItPnRpbWVyX2hhbmRzaGFrZV9hdHRlbXB0cyA9IDA7CisrCisrCXJjdV9yZWFkX2xvY2tfYmgoKTsKKysJLyogV2UgY2hlY2sgbGFzdF9zZW50X2hhbmRzaGFrZSBoZXJlIGluIGFkZGl0aW9uIHRvIHRoZSBhY3R1YWwgZnVuY3Rpb24KKysJICogd2UncmUgcXVldWVpbmcgdXAsIHNvIHRoYXQgd2UgZG9uJ3QgcXVldWUgdGhpbmdzIGlmIG5vdCBzdHJpY3RseQorKwkgKiBuZWNlc3Nhcnk6CisrCSAqLworKwlpZiAoIXdnX2JpcnRoZGF0ZV9oYXNfZXhwaXJlZChhdG9taWM2NF9yZWFkKCZwZWVyLT5sYXN0X3NlbnRfaGFuZHNoYWtlKSwKKysJCQkJICAgICAgUkVLRVlfVElNRU9VVCkgfHwKKysJCQl1bmxpa2VseShSRUFEX09OQ0UocGVlci0+aXNfZGVhZCkpKQorKwkJZ290byBvdXQ7CisrCisrCXdnX3BlZXJfZ2V0KHBlZXIpOworKwkvKiBRdWV1ZXMgdXAgY2FsbGluZyBwYWNrZXRfc2VuZF9xdWV1ZWRfaGFuZHNoYWtlcyhwZWVyKSwgd2hlcmUgd2UgZG8gYQorKwkgKiBwZWVyX3B1dChwZWVyKSBhZnRlcjoKKysJICovCisrCWlmICghcXVldWVfd29yayhwZWVyLT5kZXZpY2UtPmhhbmRzaGFrZV9zZW5kX3dxLAorKwkJCSZwZWVyLT50cmFuc21pdF9oYW5kc2hha2Vfd29yaykpCisrCQkvKiBJZiB0aGUgd29yayB3YXMgYWxyZWFkeSBxdWV1ZWQsIHdlIHdhbnQgdG8gZHJvcCB0aGUKKysJCSAqIGV4dHJhIHJlZmVyZW5jZToKKysJCSAqLworKwkJd2dfcGVlcl9wdXQocGVlcik7Cisrb3V0OgorKwlyY3VfcmVhZF91bmxvY2tfYmgoKTsKKyt9CisrCisrdm9pZCB3Z19wYWNrZXRfc2VuZF9oYW5kc2hha2VfcmVzcG9uc2Uoc3RydWN0IHdnX3BlZXIgKnBlZXIpCisreworKwlzdHJ1Y3QgbWVzc2FnZV9oYW5kc2hha2VfcmVzcG9uc2UgcGFja2V0OworKworKwlhdG9taWM2NF9zZXQoJnBlZXItPmxhc3Rfc2VudF9oYW5kc2hha2UsIGt0aW1lX2dldF9jb2Fyc2VfYm9vdHRpbWVfbnMoKSk7CisrCW5ldF9kYmdfcmF0ZWxpbWl0ZWQoIiVzOiBTZW5kaW5nIGhhbmRzaGFrZSByZXNwb25zZSB0byBwZWVyICVsbHUgKCVwSVNwZnNjKVxuIiwKKysJCQkgICAgcGVlci0+ZGV2aWNlLT5kZXYtPm5hbWUsIHBlZXItPmludGVybmFsX2lkLAorKwkJCSAgICAmcGVlci0+ZW5kcG9pbnQuYWRkcik7CisrCisrCWlmICh3Z19ub2lzZV9oYW5kc2hha2VfY3JlYXRlX3Jlc3BvbnNlKCZwYWNrZXQsICZwZWVyLT5oYW5kc2hha2UpKSB7CisrCQl3Z19jb29raWVfYWRkX21hY190b19wYWNrZXQoJnBhY2tldCwgc2l6ZW9mKHBhY2tldCksIHBlZXIpOworKwkJaWYgKHdnX25vaXNlX2hhbmRzaGFrZV9iZWdpbl9zZXNzaW9uKCZwZWVyLT5oYW5kc2hha2UsCisrCQkJCQkJICAgICAmcGVlci0+a2V5cGFpcnMpKSB7CisrCQkJd2dfdGltZXJzX3Nlc3Npb25fZGVyaXZlZChwZWVyKTsKKysJCQl3Z190aW1lcnNfYW55X2F1dGhlbnRpY2F0ZWRfcGFja2V0X3RyYXZlcnNhbChwZWVyKTsKKysJCQl3Z190aW1lcnNfYW55X2F1dGhlbnRpY2F0ZWRfcGFja2V0X3NlbnQocGVlcik7CisrCQkJYXRvbWljNjRfc2V0KCZwZWVyLT5sYXN0X3NlbnRfaGFuZHNoYWtlLAorKwkJCQkgICAgIGt0aW1lX2dldF9jb2Fyc2VfYm9vdHRpbWVfbnMoKSk7CisrCQkJd2dfc29ja2V0X3NlbmRfYnVmZmVyX3RvX3BlZXIocGVlciwgJnBhY2tldCwKKysJCQkJCQkgICAgICBzaXplb2YocGFja2V0KSwKKysJCQkJCQkgICAgICBIQU5EU0hBS0VfRFNDUCk7CisrCQl9CisrCX0KKyt9CisrCisrdm9pZCB3Z19wYWNrZXRfc2VuZF9oYW5kc2hha2VfY29va2llKHN0cnVjdCB3Z19kZXZpY2UgKndnLAorKwkJCQkgICAgIHN0cnVjdCBza19idWZmICppbml0aWF0aW5nX3NrYiwKKysJCQkJICAgICBfX2xlMzIgc2VuZGVyX2luZGV4KQorK3sKKysJc3RydWN0IG1lc3NhZ2VfaGFuZHNoYWtlX2Nvb2tpZSBwYWNrZXQ7CisrCisrCW5ldF9kYmdfc2tiX3JhdGVsaW1pdGVkKCIlczogU2VuZGluZyBjb29raWUgcmVzcG9uc2UgZm9yIGRlbmllZCBoYW5kc2hha2UgbWVzc2FnZSBmb3IgJXBJU3Bmc2NcbiIsCisrCQkJCXdnLT5kZXYtPm5hbWUsIGluaXRpYXRpbmdfc2tiKTsKKysJd2dfY29va2llX21lc3NhZ2VfY3JlYXRlKCZwYWNrZXQsIGluaXRpYXRpbmdfc2tiLCBzZW5kZXJfaW5kZXgsCisrCQkJCSAmd2ctPmNvb2tpZV9jaGVja2VyKTsKKysJd2dfc29ja2V0X3NlbmRfYnVmZmVyX2FzX3JlcGx5X3RvX3NrYih3ZywgaW5pdGlhdGluZ19za2IsICZwYWNrZXQsCisrCQkJCQkgICAgICBzaXplb2YocGFja2V0KSk7CisrfQorKworK3N0YXRpYyB2b2lkIGtlZXBfa2V5X2ZyZXNoKHN0cnVjdCB3Z19wZWVyICpwZWVyKQorK3sKKysJc3RydWN0IG5vaXNlX2tleXBhaXIgKmtleXBhaXI7CisrCWJvb2wgc2VuZCA9IGZhbHNlOworKworKwlyY3VfcmVhZF9sb2NrX2JoKCk7CisrCWtleXBhaXIgPSByY3VfZGVyZWZlcmVuY2VfYmgocGVlci0+a2V5cGFpcnMuY3VycmVudF9rZXlwYWlyKTsKKysJaWYgKGxpa2VseShrZXlwYWlyICYmIFJFQURfT05DRShrZXlwYWlyLT5zZW5kaW5nLmlzX3ZhbGlkKSkgJiYKKysJICAgICh1bmxpa2VseShhdG9taWM2NF9yZWFkKCZrZXlwYWlyLT5zZW5kaW5nLmNvdW50ZXIuY291bnRlcikgPgorKwkJICAgICAgUkVLRVlfQUZURVJfTUVTU0FHRVMpIHx8CisrCSAgICAgKGtleXBhaXItPmlfYW1fdGhlX2luaXRpYXRvciAmJgorKwkgICAgICB1bmxpa2VseSh3Z19iaXJ0aGRhdGVfaGFzX2V4cGlyZWQoa2V5cGFpci0+c2VuZGluZy5iaXJ0aGRhdGUsCisrCQkJCQkJUkVLRVlfQUZURVJfVElNRSkpKSkpCisrCQlzZW5kID0gdHJ1ZTsKKysJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CisrCisrCWlmIChzZW5kKQorKwkJd2dfcGFja2V0X3NlbmRfcXVldWVkX2hhbmRzaGFrZV9pbml0aWF0aW9uKHBlZXIsIGZhbHNlKTsKKyt9CisrCisrc3RhdGljIHVuc2lnbmVkIGludCBjYWxjdWxhdGVfc2tiX3BhZGRpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYikKKyt7CisrCS8qIFdlIGRvIHRoaXMgbW9kdWxvIGJ1c2luZXNzIHdpdGggdGhlIE1UVSwganVzdCBpbiBjYXNlIHRoZSBuZXR3b3JraW5nCisrCSAqIGxheWVyIGdpdmVzIHVzIGEgcGFja2V0IHRoYXQncyBiaWdnZXIgdGhhbiB0aGUgTVRVLiBJbiB0aGF0IGNhc2UsIHdlCisrCSAqIHdvdWxkbid0IHdhbnQgdGhlIGZpbmFsIHN1YnRyYWN0aW9uIHRvIG92ZXJmbG93IGluIHRoZSBjYXNlIG9mIHRoZQorKwkgKiBwYWRkZWRfc2l6ZSBiZWluZyBjbGFtcGVkLgorKwkgKi8KKysJdW5zaWduZWQgaW50IGxhc3RfdW5pdCA9IHNrYi0+bGVuICUgUEFDS0VUX0NCKHNrYiktPm10dTsKKysJdW5zaWduZWQgaW50IHBhZGRlZF9zaXplID0gQUxJR04obGFzdF91bml0LCBNRVNTQUdFX1BBRERJTkdfTVVMVElQTEUpOworKworKwlpZiAocGFkZGVkX3NpemUgPiBQQUNLRVRfQ0Ioc2tiKS0+bXR1KQorKwkJcGFkZGVkX3NpemUgPSBQQUNLRVRfQ0Ioc2tiKS0+bXR1OworKwlyZXR1cm4gcGFkZGVkX3NpemUgLSBsYXN0X3VuaXQ7CisrfQorKworK3N0YXRpYyBib29sIGVuY3J5cHRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBub2lzZV9rZXlwYWlyICprZXlwYWlyKQorK3sKKysJdW5zaWduZWQgaW50IHBhZGRpbmdfbGVuLCBwbGFpbnRleHRfbGVuLCB0cmFpbGVyX2xlbjsKKysJc3RydWN0IHNjYXR0ZXJsaXN0IHNnW01BWF9TS0JfRlJBR1MgKyA4XTsKKysJc3RydWN0IG1lc3NhZ2VfZGF0YSAqaGVhZGVyOworKwlzdHJ1Y3Qgc2tfYnVmZiAqdHJhaWxlcjsKKysJaW50IG51bV9mcmFnczsKKysKKysJLyogQ2FsY3VsYXRlIGxlbmd0aHMuICovCisrCXBhZGRpbmdfbGVuID0gY2FsY3VsYXRlX3NrYl9wYWRkaW5nKHNrYik7CisrCXRyYWlsZXJfbGVuID0gcGFkZGluZ19sZW4gKyBub2lzZV9lbmNyeXB0ZWRfbGVuKDApOworKwlwbGFpbnRleHRfbGVuID0gc2tiLT5sZW4gKyBwYWRkaW5nX2xlbjsKKysKKysJLyogRXhwYW5kIGRhdGEgc2VjdGlvbiB0byBoYXZlIHJvb20gZm9yIHBhZGRpbmcgYW5kIGF1dGggdGFnLiAqLworKwludW1fZnJhZ3MgPSBza2JfY293X2RhdGEoc2tiLCB0cmFpbGVyX2xlbiwgJnRyYWlsZXIpOworKwlpZiAodW5saWtlbHkobnVtX2ZyYWdzIDwgMCB8fCBudW1fZnJhZ3MgPiBBUlJBWV9TSVpFKHNnKSkpCisrCQlyZXR1cm4gZmFsc2U7CisrCisrCS8qIFNldCB0aGUgcGFkZGluZyB0byB6ZXJvcywgYW5kIG1ha2Ugc3VyZSBpdCBhbmQgdGhlIGF1dGggdGFnIGFyZSBwYXJ0CisrCSAqIG9mIHRoZSBza2IuCisrCSAqLworKwltZW1zZXQoc2tiX3RhaWxfcG9pbnRlcih0cmFpbGVyKSwgMCwgcGFkZGluZ19sZW4pOworKworKwkvKiBFeHBhbmQgaGVhZCBzZWN0aW9uIHRvIGhhdmUgcm9vbSBmb3Igb3VyIGhlYWRlciBhbmQgdGhlIG5ldHdvcmsKKysJICogc3RhY2sncyBoZWFkZXJzLgorKwkgKi8KKysJaWYgKHVubGlrZWx5KHNrYl9jb3dfaGVhZChza2IsIERBVEFfUEFDS0VUX0hFQURfUk9PTSkgPCAwKSkKKysJCXJldHVybiBmYWxzZTsKKysKKysJLyogRmluYWxpemUgY2hlY2tzdW0gY2FsY3VsYXRpb24gZm9yIHRoZSBpbm5lciBwYWNrZXQsIGlmIHJlcXVpcmVkLiAqLworKwlpZiAodW5saWtlbHkoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCAmJgorKwkJICAgICBza2JfY2hlY2tzdW1faGVscChza2IpKSkKKysJCXJldHVybiBmYWxzZTsKKysKKysJLyogT25seSBhZnRlciBjaGVja3N1bW1pbmcgY2FuIHdlIHNhZmVseSBhZGQgb24gdGhlIHBhZGRpbmcgYXQgdGhlIGVuZAorKwkgKiBhbmQgdGhlIGhlYWRlci4KKysJICovCisrCXNrYl9zZXRfaW5uZXJfbmV0d29ya19oZWFkZXIoc2tiLCAwKTsKKysJaGVhZGVyID0gKHN0cnVjdCBtZXNzYWdlX2RhdGEgKilza2JfcHVzaChza2IsIHNpemVvZigqaGVhZGVyKSk7CisrCWhlYWRlci0+aGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUzMihNRVNTQUdFX0RBVEEpOworKwloZWFkZXItPmtleV9pZHggPSBrZXlwYWlyLT5yZW1vdGVfaW5kZXg7CisrCWhlYWRlci0+Y291bnRlciA9IGNwdV90b19sZTY0KFBBQ0tFVF9DQihza2IpLT5ub25jZSk7CisrCXBza2JfcHV0KHNrYiwgdHJhaWxlciwgdHJhaWxlcl9sZW4pOworKworKwkvKiBOb3cgd2UgY2FuIGVuY3J5cHQgdGhlIHNjYXR0ZXJnYXRoZXIgc2VnbWVudHMgKi8KKysJc2dfaW5pdF90YWJsZShzZywgbnVtX2ZyYWdzKTsKKysJaWYgKHNrYl90b19zZ3ZlYyhza2IsIHNnLCBzaXplb2Yoc3RydWN0IG1lc3NhZ2VfZGF0YSksCisrCQkJIG5vaXNlX2VuY3J5cHRlZF9sZW4ocGxhaW50ZXh0X2xlbikpIDw9IDApCisrCQlyZXR1cm4gZmFsc2U7CisrCXJldHVybiBjaGFjaGEyMHBvbHkxMzA1X2VuY3J5cHRfc2dfaW5wbGFjZShzZywgcGxhaW50ZXh0X2xlbiwgTlVMTCwgMCwKKysJCQkJCQkgICBQQUNLRVRfQ0Ioc2tiKS0+bm9uY2UsCisrCQkJCQkJICAga2V5cGFpci0+c2VuZGluZy5rZXkpOworK30KKysKKyt2b2lkIHdnX3BhY2tldF9zZW5kX2tlZXBhbGl2ZShzdHJ1Y3Qgd2dfcGVlciAqcGVlcikKKyt7CisrCXN0cnVjdCBza19idWZmICpza2I7CisrCisrCWlmIChza2JfcXVldWVfZW1wdHkoJnBlZXItPnN0YWdlZF9wYWNrZXRfcXVldWUpKSB7CisrCQlza2IgPSBhbGxvY19za2IoREFUQV9QQUNLRVRfSEVBRF9ST09NICsgTUVTU0FHRV9NSU5JTVVNX0xFTkdUSCwKKysJCQkJR0ZQX0FUT01JQyk7CisrCQlpZiAodW5saWtlbHkoIXNrYikpCisrCQkJcmV0dXJuOworKwkJc2tiX3Jlc2VydmUoc2tiLCBEQVRBX1BBQ0tFVF9IRUFEX1JPT00pOworKwkJc2tiLT5kZXYgPSBwZWVyLT5kZXZpY2UtPmRldjsKKysJCVBBQ0tFVF9DQihza2IpLT5tdHUgPSBza2ItPmRldi0+bXR1OworKwkJc2tiX3F1ZXVlX3RhaWwoJnBlZXItPnN0YWdlZF9wYWNrZXRfcXVldWUsIHNrYik7CisrCQluZXRfZGJnX3JhdGVsaW1pdGVkKCIlczogU2VuZGluZyBrZWVwYWxpdmUgcGFja2V0IHRvIHBlZXIgJWxsdSAoJXBJU3Bmc2MpXG4iLAorKwkJCQkgICAgcGVlci0+ZGV2aWNlLT5kZXYtPm5hbWUsIHBlZXItPmludGVybmFsX2lkLAorKwkJCQkgICAgJnBlZXItPmVuZHBvaW50LmFkZHIpOworKwl9CisrCisrCXdnX3BhY2tldF9zZW5kX3N0YWdlZF9wYWNrZXRzKHBlZXIpOworK30KKysKKytzdGF0aWMgdm9pZCB3Z19wYWNrZXRfY3JlYXRlX2RhdGFfZG9uZShzdHJ1Y3Qgc2tfYnVmZiAqZmlyc3QsCisrCQkJCSAgICAgICBzdHJ1Y3Qgd2dfcGVlciAqcGVlcikKKyt7CisrCXN0cnVjdCBza19idWZmICpza2IsICpuZXh0OworKwlib29sIGlzX2tlZXBhbGl2ZSwgZGF0YV9zZW50ID0gZmFsc2U7CisrCisrCXdnX3RpbWVyc19hbnlfYXV0aGVudGljYXRlZF9wYWNrZXRfdHJhdmVyc2FsKHBlZXIpOworKwl3Z190aW1lcnNfYW55X2F1dGhlbnRpY2F0ZWRfcGFja2V0X3NlbnQocGVlcik7CisrCXNrYl9saXN0X3dhbGtfc2FmZShmaXJzdCwgc2tiLCBuZXh0KSB7CisrCQlpc19rZWVwYWxpdmUgPSBza2ItPmxlbiA9PSBtZXNzYWdlX2RhdGFfbGVuKDApOworKwkJaWYgKGxpa2VseSghd2dfc29ja2V0X3NlbmRfc2tiX3RvX3BlZXIocGVlciwgc2tiLAorKwkJCQlQQUNLRVRfQ0Ioc2tiKS0+ZHMpICYmICFpc19rZWVwYWxpdmUpKQorKwkJCWRhdGFfc2VudCA9IHRydWU7CisrCX0KKysKKysJaWYgKGxpa2VseShkYXRhX3NlbnQpKQorKwkJd2dfdGltZXJzX2RhdGFfc2VudChwZWVyKTsKKysKKysJa2VlcF9rZXlfZnJlc2gocGVlcik7CisrfQorKworK3ZvaWQgd2dfcGFja2V0X3R4X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCisreworKwlzdHJ1Y3QgY3J5cHRfcXVldWUgKnF1ZXVlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjcnlwdF9xdWV1ZSwKKysJCQkJCQkgd29yayk7CisrCXN0cnVjdCBub2lzZV9rZXlwYWlyICprZXlwYWlyOworKwllbnVtIHBhY2tldF9zdGF0ZSBzdGF0ZTsKKysJc3RydWN0IHNrX2J1ZmYgKmZpcnN0OworKwlzdHJ1Y3Qgd2dfcGVlciAqcGVlcjsKKysKKysJd2hpbGUgKChmaXJzdCA9IF9fcHRyX3JpbmdfcGVlaygmcXVldWUtPnJpbmcpKSAhPSBOVUxMICYmCisrCSAgICAgICAoc3RhdGUgPSBhdG9taWNfcmVhZF9hY3F1aXJlKCZQQUNLRVRfQ0IoZmlyc3QpLT5zdGF0ZSkpICE9CisrCQkgICAgICAgUEFDS0VUX1NUQVRFX1VOQ1JZUFRFRCkgeworKwkJX19wdHJfcmluZ19kaXNjYXJkX29uZSgmcXVldWUtPnJpbmcpOworKwkJcGVlciA9IFBBQ0tFVF9QRUVSKGZpcnN0KTsKKysJCWtleXBhaXIgPSBQQUNLRVRfQ0IoZmlyc3QpLT5rZXlwYWlyOworKworKwkJaWYgKGxpa2VseShzdGF0ZSA9PSBQQUNLRVRfU1RBVEVfQ1JZUFRFRCkpCisrCQkJd2dfcGFja2V0X2NyZWF0ZV9kYXRhX2RvbmUoZmlyc3QsIHBlZXIpOworKwkJZWxzZQorKwkJCWtmcmVlX3NrYl9saXN0KGZpcnN0KTsKKysKKysJCXdnX25vaXNlX2tleXBhaXJfcHV0KGtleXBhaXIsIGZhbHNlKTsKKysJCXdnX3BlZXJfcHV0KHBlZXIpOworKwl9CisrfQorKworK3ZvaWQgd2dfcGFja2V0X2VuY3J5cHRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKKyt7CisrCXN0cnVjdCBjcnlwdF9xdWV1ZSAqcXVldWUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG11bHRpY29yZV93b3JrZXIsCisrCQkJCQkJIHdvcmspLT5wdHI7CisrCXN0cnVjdCBza19idWZmICpmaXJzdCwgKnNrYiwgKm5leHQ7CisrCisrCXdoaWxlICgoZmlyc3QgPSBwdHJfcmluZ19jb25zdW1lX2JoKCZxdWV1ZS0+cmluZykpICE9IE5VTEwpIHsKKysJCWVudW0gcGFja2V0X3N0YXRlIHN0YXRlID0gUEFDS0VUX1NUQVRFX0NSWVBURUQ7CisrCisrCQlza2JfbGlzdF93YWxrX3NhZmUoZmlyc3QsIHNrYiwgbmV4dCkgeworKwkJCWlmIChsaWtlbHkoZW5jcnlwdF9wYWNrZXQoc2tiLAorKwkJCQkJUEFDS0VUX0NCKGZpcnN0KS0+a2V5cGFpcikpKSB7CisrCQkJCXdnX3Jlc2V0X3BhY2tldChza2IpOworKwkJCX0gZWxzZSB7CisrCQkJCXN0YXRlID0gUEFDS0VUX1NUQVRFX0RFQUQ7CisrCQkJCWJyZWFrOworKwkJCX0KKysJCX0KKysJCXdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXIoJlBBQ0tFVF9QRUVSKGZpcnN0KS0+dHhfcXVldWUsIGZpcnN0LAorKwkJCQkJICBzdGF0ZSk7CisrCisrCX0KKyt9CisrCisrc3RhdGljIHZvaWQgd2dfcGFja2V0X2NyZWF0ZV9kYXRhKHN0cnVjdCBza19idWZmICpmaXJzdCkKKyt7CisrCXN0cnVjdCB3Z19wZWVyICpwZWVyID0gUEFDS0VUX1BFRVIoZmlyc3QpOworKwlzdHJ1Y3Qgd2dfZGV2aWNlICp3ZyA9IHBlZXItPmRldmljZTsKKysJaW50IHJldCA9IC1FSU5WQUw7CisrCisrCXJjdV9yZWFkX2xvY2tfYmgoKTsKKysJaWYgKHVubGlrZWx5KFJFQURfT05DRShwZWVyLT5pc19kZWFkKSkpCisrCQlnb3RvIGVycjsKKysKKysJcmV0ID0gd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyKCZ3Zy0+ZW5jcnlwdF9xdWV1ZSwKKysJCQkJCQkgICAmcGVlci0+dHhfcXVldWUsIGZpcnN0LAorKwkJCQkJCSAgIHdnLT5wYWNrZXRfY3J5cHRfd3EsCisrCQkJCQkJICAgJndnLT5lbmNyeXB0X3F1ZXVlLmxhc3RfY3B1KTsKKysJaWYgKHVubGlrZWx5KHJldCA9PSAtRVBJUEUpKQorKwkJd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcigmcGVlci0+dHhfcXVldWUsIGZpcnN0LAorKwkJCQkJICBQQUNLRVRfU1RBVEVfREVBRCk7CisrZXJyOgorKwlyY3VfcmVhZF91bmxvY2tfYmgoKTsKKysJaWYgKGxpa2VseSghcmV0IHx8IHJldCA9PSAtRVBJUEUpKQorKwkJcmV0dXJuOworKwl3Z19ub2lzZV9rZXlwYWlyX3B1dChQQUNLRVRfQ0IoZmlyc3QpLT5rZXlwYWlyLCBmYWxzZSk7CisrCXdnX3BlZXJfcHV0KHBlZXIpOworKwlrZnJlZV9za2JfbGlzdChmaXJzdCk7CisrfQorKworK3ZvaWQgd2dfcGFja2V0X3B1cmdlX3N0YWdlZF9wYWNrZXRzKHN0cnVjdCB3Z19wZWVyICpwZWVyKQorK3sKKysJc3Bpbl9sb2NrX2JoKCZwZWVyLT5zdGFnZWRfcGFja2V0X3F1ZXVlLmxvY2spOworKwlwZWVyLT5kZXZpY2UtPmRldi0+c3RhdHMudHhfZHJvcHBlZCArPSBwZWVyLT5zdGFnZWRfcGFja2V0X3F1ZXVlLnFsZW47CisrCV9fc2tiX3F1ZXVlX3B1cmdlKCZwZWVyLT5zdGFnZWRfcGFja2V0X3F1ZXVlKTsKKysJc3Bpbl91bmxvY2tfYmgoJnBlZXItPnN0YWdlZF9wYWNrZXRfcXVldWUubG9jayk7CisrfQorKworK3ZvaWQgd2dfcGFja2V0X3NlbmRfc3RhZ2VkX3BhY2tldHMoc3RydWN0IHdnX3BlZXIgKnBlZXIpCisreworKwlzdHJ1Y3Qgbm9pc2Vfc3ltbWV0cmljX2tleSAqa2V5OworKwlzdHJ1Y3Qgbm9pc2Vfa2V5cGFpciAqa2V5cGFpcjsKKysJc3RydWN0IHNrX2J1ZmZfaGVhZCBwYWNrZXRzOworKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworKworKwkvKiBTdGVhbCB0aGUgY3VycmVudCBxdWV1ZSBpbnRvIG91ciBsb2NhbCBvbmUuICovCisrCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcGFja2V0cyk7CisrCXNwaW5fbG9ja19iaCgmcGVlci0+c3RhZ2VkX3BhY2tldF9xdWV1ZS5sb2NrKTsKKysJc2tiX3F1ZXVlX3NwbGljZV9pbml0KCZwZWVyLT5zdGFnZWRfcGFja2V0X3F1ZXVlLCAmcGFja2V0cyk7CisrCXNwaW5fdW5sb2NrX2JoKCZwZWVyLT5zdGFnZWRfcGFja2V0X3F1ZXVlLmxvY2spOworKwlpZiAodW5saWtlbHkoc2tiX3F1ZXVlX2VtcHR5KCZwYWNrZXRzKSkpCisrCQlyZXR1cm47CisrCisrCS8qIEZpcnN0IHdlIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgdmFsaWQgcmVmZXJlbmNlIHRvIGEgdmFsaWQga2V5LiAqLworKwlyY3VfcmVhZF9sb2NrX2JoKCk7CisrCWtleXBhaXIgPSB3Z19ub2lzZV9rZXlwYWlyX2dldCgKKysJCXJjdV9kZXJlZmVyZW5jZV9iaChwZWVyLT5rZXlwYWlycy5jdXJyZW50X2tleXBhaXIpKTsKKysJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CisrCWlmICh1bmxpa2VseSgha2V5cGFpcikpCisrCQlnb3RvIG91dF9ub2tleTsKKysJa2V5ID0gJmtleXBhaXItPnNlbmRpbmc7CisrCWlmICh1bmxpa2VseSghUkVBRF9PTkNFKGtleS0+aXNfdmFsaWQpKSkKKysJCWdvdG8gb3V0X25va2V5OworKwlpZiAodW5saWtlbHkod2dfYmlydGhkYXRlX2hhc19leHBpcmVkKGtleS0+YmlydGhkYXRlLAorKwkJCQkJICAgICAgUkVKRUNUX0FGVEVSX1RJTUUpKSkKKysJCWdvdG8gb3V0X2ludmFsaWQ7CisrCisrCS8qIEFmdGVyIHdlIGtub3cgd2UgaGF2ZSBhIHNvbWV3aGF0IHZhbGlkIGtleSwgd2Ugbm93IHRyeSB0byBhc3NpZ24KKysJICogbm9uY2VzIHRvIGFsbCBvZiB0aGUgcGFja2V0cyBpbiB0aGUgcXVldWUuIElmIHdlIGNhbid0IGFzc2lnbiBub25jZXMKKysJICogZm9yIGFsbCBvZiB0aGVtLCB3ZSBqdXN0IGNvbnNpZGVyIGl0IGEgZmFpbHVyZSBhbmQgd2FpdCBmb3IgdGhlIG5leHQKKysJICogaGFuZHNoYWtlLgorKwkgKi8KKysJc2tiX3F1ZXVlX3dhbGsoJnBhY2tldHMsIHNrYikgeworKwkJLyogMCBmb3Igbm8gb3V0ZXIgVE9TOiBubyBsZWFrLiBUT0RPOiBhdCBzb21lIGxhdGVyIHBvaW50LCB3ZQorKwkJICogbWlnaHQgY29uc2lkZXIgdXNpbmcgZmxvd2ktPnRvcyBhcyBvdXRlciBpbnN0ZWFkLgorKwkJICovCisrCQlQQUNLRVRfQ0Ioc2tiKS0+ZHMgPSBpcF90dW5uZWxfZWNuX2VuY2FwKDAsIGlwX2hkcihza2IpLCBza2IpOworKwkJUEFDS0VUX0NCKHNrYiktPm5vbmNlID0KKysJCQkJYXRvbWljNjRfaW5jX3JldHVybigma2V5LT5jb3VudGVyLmNvdW50ZXIpIC0gMTsKKysJCWlmICh1bmxpa2VseShQQUNLRVRfQ0Ioc2tiKS0+bm9uY2UgPj0gUkVKRUNUX0FGVEVSX01FU1NBR0VTKSkKKysJCQlnb3RvIG91dF9pbnZhbGlkOworKwl9CisrCisrCXBhY2tldHMucHJldi0+bmV4dCA9IE5VTEw7CisrCXdnX3BlZXJfZ2V0KGtleXBhaXItPmVudHJ5LnBlZXIpOworKwlQQUNLRVRfQ0IocGFja2V0cy5uZXh0KS0+a2V5cGFpciA9IGtleXBhaXI7CisrCXdnX3BhY2tldF9jcmVhdGVfZGF0YShwYWNrZXRzLm5leHQpOworKwlyZXR1cm47CisrCisrb3V0X2ludmFsaWQ6CisrCVdSSVRFX09OQ0Uoa2V5LT5pc192YWxpZCwgZmFsc2UpOworK291dF9ub2tleToKKysJd2dfbm9pc2Vfa2V5cGFpcl9wdXQoa2V5cGFpciwgZmFsc2UpOworKworKwkvKiBXZSBvcnBoYW4gdGhlIHBhY2tldHMgaWYgd2UncmUgd2FpdGluZyBvbiBhIGhhbmRzaGFrZSwgc28gdGhhdCB0aGV5CisrCSAqIGRvbid0IGJsb2NrIGEgc29ja2V0J3MgcG9vbC4KKysJICovCisrCXNrYl9xdWV1ZV93YWxrKCZwYWNrZXRzLCBza2IpCisrCQlza2Jfb3JwaGFuKHNrYik7CisrCS8qIFRoZW4gd2UgcHV0IHRoZW0gYmFjayBvbiB0aGUgdG9wIG9mIHRoZSBxdWV1ZS4gV2UncmUgbm90IHRvbworKwkgKiBjb25jZXJuZWQgYWJvdXQgYWNjaWRlbnRhbGx5IGdldHRpbmcgdGhpbmdzIGEgbGl0dGxlIG91dCBvZiBvcmRlciBpZgorKwkgKiBwYWNrZXRzIGFyZSBiZWluZyBhZGRlZCByZWFsbHkgZmFzdCwgYmVjYXVzZSB0aGlzIHF1ZXVlIGlzIGZvciBiZWZvcmUKKysJICogcGFja2V0cyBjYW4gZXZlbiBiZSBzZW50IGFuZCBpdCdzIHNtYWxsIGFueXdheS4KKysJICovCisrCXNwaW5fbG9ja19iaCgmcGVlci0+c3RhZ2VkX3BhY2tldF9xdWV1ZS5sb2NrKTsKKysJc2tiX3F1ZXVlX3NwbGljZSgmcGFja2V0cywgJnBlZXItPnN0YWdlZF9wYWNrZXRfcXVldWUpOworKwlzcGluX3VubG9ja19iaCgmcGVlci0+c3RhZ2VkX3BhY2tldF9xdWV1ZS5sb2NrKTsKKysKKysJLyogSWYgd2UncmUgZXhpdGluZyBiZWNhdXNlIHRoZXJlJ3Mgc29tZXRoaW5nIHdyb25nIHdpdGggdGhlIGtleSwgaXQKKysJICogbWVhbnMgd2Ugc2hvdWxkIGluaXRpYXRlIGEgbmV3IGhhbmRzaGFrZS4KKysJICovCisrCXdnX3BhY2tldF9zZW5kX3F1ZXVlZF9oYW5kc2hha2VfaW5pdGlhdGlvbihwZWVyLCBmYWxzZSk7CisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NvY2tldC5jCitAQCAtMCwwICsxLDQzNyBAQAorKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisrLyoKKysgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisrICovCisrCisrI2luY2x1ZGUgImRldmljZS5oIgorKyNpbmNsdWRlICJwZWVyLmgiCisrI2luY2x1ZGUgInNvY2tldC5oIgorKyNpbmNsdWRlICJxdWV1ZWluZy5oIgorKyNpbmNsdWRlICJtZXNzYWdlcy5oIgorKworKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorKyNpbmNsdWRlIDxsaW51eC9uZXQuaD4KKysjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgorKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorKyNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+CisrI2luY2x1ZGUgPG5ldC91ZHBfdHVubmVsLmg+CisrI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CisrCisrc3RhdGljIGludCBzZW5kNChzdHJ1Y3Qgd2dfZGV2aWNlICp3Zywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKysJCSBzdHJ1Y3QgZW5kcG9pbnQgKmVuZHBvaW50LCB1OCBkcywgc3RydWN0IGRzdF9jYWNoZSAqY2FjaGUpCisreworKwlzdHJ1Y3QgZmxvd2k0IGZsID0geworKwkJLnNhZGRyID0gZW5kcG9pbnQtPnNyYzQuc19hZGRyLAorKwkJLmRhZGRyID0gZW5kcG9pbnQtPmFkZHI0LnNpbl9hZGRyLnNfYWRkciwKKysJCS5mbDRfZHBvcnQgPSBlbmRwb2ludC0+YWRkcjQuc2luX3BvcnQsCisrCQkuZmxvd2k0X21hcmsgPSB3Zy0+ZndtYXJrLAorKwkJLmZsb3dpNF9wcm90byA9IElQUFJPVE9fVURQCisrCX07CisrCXN0cnVjdCBydGFibGUgKnJ0ID0gTlVMTDsKKysJc3RydWN0IHNvY2sgKnNvY2s7CisrCWludCByZXQgPSAwOworKworKwlza2JfbWFya19ub3Rfb25fbGlzdChza2IpOworKwlza2ItPmRldiA9IHdnLT5kZXY7CisrCXNrYi0+bWFyayA9IHdnLT5md21hcms7CisrCisrCXJjdV9yZWFkX2xvY2tfYmgoKTsKKysJc29jayA9IHJjdV9kZXJlZmVyZW5jZV9iaCh3Zy0+c29jazQpOworKworKwlpZiAodW5saWtlbHkoIXNvY2spKSB7CisrCQlyZXQgPSAtRU5PTkVUOworKwkJZ290byBlcnI7CisrCX0KKysKKysJZmwuZmw0X3Nwb3J0ID0gaW5ldF9zayhzb2NrKS0+aW5ldF9zcG9ydDsKKysKKysJaWYgKGNhY2hlKQorKwkJcnQgPSBkc3RfY2FjaGVfZ2V0X2lwNChjYWNoZSwgJmZsLnNhZGRyKTsKKysKKysJaWYgKCFydCkgeworKwkJc2VjdXJpdHlfc2tfY2xhc3NpZnlfZmxvdyhzb2NrLCBmbG93aTRfdG9fZmxvd2koJmZsKSk7CisrCQlpZiAodW5saWtlbHkoIWluZXRfY29uZmlybV9hZGRyKHNvY2tfbmV0KHNvY2spLCBOVUxMLCAwLAorKwkJCQkJCWZsLnNhZGRyLCBSVF9TQ09QRV9IT1NUKSkpIHsKKysJCQllbmRwb2ludC0+c3JjNC5zX2FkZHIgPSAwOworKwkJCSooX19mb3JjZSBfX2JlMzIgKikmZW5kcG9pbnQtPnNyY19pZjQgPSAwOworKwkJCWZsLnNhZGRyID0gMDsKKysJCQlpZiAoY2FjaGUpCisrCQkJCWRzdF9jYWNoZV9yZXNldChjYWNoZSk7CisrCQl9CisrCQlydCA9IGlwX3JvdXRlX291dHB1dF9mbG93KHNvY2tfbmV0KHNvY2spLCAmZmwsIHNvY2spOworKwkJaWYgKHVubGlrZWx5KGVuZHBvaW50LT5zcmNfaWY0ICYmICgoSVNfRVJSKHJ0KSAmJgorKwkJCSAgICAgUFRSX0VSUihydCkgPT0gLUVJTlZBTCkgfHwgKCFJU19FUlIocnQpICYmCisrCQkJICAgICBydC0+ZHN0LmRldi0+aWZpbmRleCAhPSBlbmRwb2ludC0+c3JjX2lmNCkpKSkgeworKwkJCWVuZHBvaW50LT5zcmM0LnNfYWRkciA9IDA7CisrCQkJKihfX2ZvcmNlIF9fYmUzMiAqKSZlbmRwb2ludC0+c3JjX2lmNCA9IDA7CisrCQkJZmwuc2FkZHIgPSAwOworKwkJCWlmIChjYWNoZSkKKysJCQkJZHN0X2NhY2hlX3Jlc2V0KGNhY2hlKTsKKysJCQlpZiAoIUlTX0VSUihydCkpCisrCQkJCWlwX3J0X3B1dChydCk7CisrCQkJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhzb2NrX25ldChzb2NrKSwgJmZsLCBzb2NrKTsKKysJCX0KKysJCWlmICh1bmxpa2VseShJU19FUlIocnQpKSkgeworKwkJCXJldCA9IFBUUl9FUlIocnQpOworKwkJCW5ldF9kYmdfcmF0ZWxpbWl0ZWQoIiVzOiBObyByb3V0ZSB0byAlcElTcGZzYywgZXJyb3IgJWRcbiIsCisrCQkJCQkgICAgd2ctPmRldi0+bmFtZSwgJmVuZHBvaW50LT5hZGRyLCByZXQpOworKwkJCWdvdG8gZXJyOworKwkJfSBlbHNlIGlmICh1bmxpa2VseShydC0+ZHN0LmRldiA9PSBza2ItPmRldikpIHsKKysJCQlpcF9ydF9wdXQocnQpOworKwkJCXJldCA9IC1FTE9PUDsKKysJCQluZXRfZGJnX3JhdGVsaW1pdGVkKCIlczogQXZvaWRpbmcgcm91dGluZyBsb29wIHRvICVwSVNwZnNjXG4iLAorKwkJCQkJICAgIHdnLT5kZXYtPm5hbWUsICZlbmRwb2ludC0+YWRkcik7CisrCQkJZ290byBlcnI7CisrCQl9CisrCQlpZiAoY2FjaGUpCisrCQkJZHN0X2NhY2hlX3NldF9pcDQoY2FjaGUsICZydC0+ZHN0LCBmbC5zYWRkcik7CisrCX0KKysKKysJc2tiLT5pZ25vcmVfZGYgPSAxOworKwl1ZHBfdHVubmVsX3htaXRfc2tiKHJ0LCBzb2NrLCBza2IsIGZsLnNhZGRyLCBmbC5kYWRkciwgZHMsCisrCQkJICAgIGlwNF9kc3RfaG9wbGltaXQoJnJ0LT5kc3QpLCAwLCBmbC5mbDRfc3BvcnQsCisrCQkJICAgIGZsLmZsNF9kcG9ydCwgZmFsc2UsIGZhbHNlKTsKKysJZ290byBvdXQ7CisrCisrZXJyOgorKwlrZnJlZV9za2Ioc2tiKTsKKytvdXQ6CisrCXJjdV9yZWFkX3VubG9ja19iaCgpOworKwlyZXR1cm4gcmV0OworK30KKysKKytzdGF0aWMgaW50IHNlbmQ2KHN0cnVjdCB3Z19kZXZpY2UgKndnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorKwkJIHN0cnVjdCBlbmRwb2ludCAqZW5kcG9pbnQsIHU4IGRzLCBzdHJ1Y3QgZHN0X2NhY2hlICpjYWNoZSkKKyt7CisrI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCisrCXN0cnVjdCBmbG93aTYgZmwgPSB7CisrCQkuc2FkZHIgPSBlbmRwb2ludC0+c3JjNiwKKysJCS5kYWRkciA9IGVuZHBvaW50LT5hZGRyNi5zaW42X2FkZHIsCisrCQkuZmw2X2Rwb3J0ID0gZW5kcG9pbnQtPmFkZHI2LnNpbjZfcG9ydCwKKysJCS5mbG93aTZfbWFyayA9IHdnLT5md21hcmssCisrCQkuZmxvd2k2X29pZiA9IGVuZHBvaW50LT5hZGRyNi5zaW42X3Njb3BlX2lkLAorKwkJLmZsb3dpNl9wcm90byA9IElQUFJPVE9fVURQCisrCQkvKiBUT0RPOiBhZGRyLT5zaW42X2Zsb3dpbmZvICovCisrCX07CisrCXN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IE5VTEw7CisrCXN0cnVjdCBzb2NrICpzb2NrOworKwlpbnQgcmV0ID0gMDsKKysKKysJc2tiX21hcmtfbm90X29uX2xpc3Qoc2tiKTsKKysJc2tiLT5kZXYgPSB3Zy0+ZGV2OworKwlza2ItPm1hcmsgPSB3Zy0+ZndtYXJrOworKworKwlyY3VfcmVhZF9sb2NrX2JoKCk7CisrCXNvY2sgPSByY3VfZGVyZWZlcmVuY2VfYmgod2ctPnNvY2s2KTsKKysKKysJaWYgKHVubGlrZWx5KCFzb2NrKSkgeworKwkJcmV0ID0gLUVOT05FVDsKKysJCWdvdG8gZXJyOworKwl9CisrCisrCWZsLmZsNl9zcG9ydCA9IGluZXRfc2soc29jayktPmluZXRfc3BvcnQ7CisrCisrCWlmIChjYWNoZSkKKysJCWRzdCA9IGRzdF9jYWNoZV9nZXRfaXA2KGNhY2hlLCAmZmwuc2FkZHIpOworKworKwlpZiAoIWRzdCkgeworKwkJc2VjdXJpdHlfc2tfY2xhc3NpZnlfZmxvdyhzb2NrLCBmbG93aTZfdG9fZmxvd2koJmZsKSk7CisrCQlpZiAodW5saWtlbHkoIWlwdjZfYWRkcl9hbnkoJmZsLnNhZGRyKSAmJgorKwkJCSAgICAgIWlwdjZfY2hrX2FkZHIoc29ja19uZXQoc29jayksICZmbC5zYWRkciwgTlVMTCwgMCkpKSB7CisrCQkJZW5kcG9pbnQtPnNyYzYgPSBmbC5zYWRkciA9IGluNmFkZHJfYW55OworKwkJCWlmIChjYWNoZSkKKysJCQkJZHN0X2NhY2hlX3Jlc2V0KGNhY2hlKTsKKysJCX0KKysJCWRzdCA9IGlwdjZfc3R1Yi0+aXB2Nl9kc3RfbG9va3VwX2Zsb3coc29ja19uZXQoc29jayksIHNvY2ssICZmbCwKKysJCQkJCQkgICAgICBOVUxMKTsKKysJCWlmICh1bmxpa2VseShJU19FUlIoZHN0KSkpIHsKKysJCQlyZXQgPSBQVFJfRVJSKGRzdCk7CisrCQkJbmV0X2RiZ19yYXRlbGltaXRlZCgiJXM6IE5vIHJvdXRlIHRvICVwSVNwZnNjLCBlcnJvciAlZFxuIiwKKysJCQkJCSAgICB3Zy0+ZGV2LT5uYW1lLCAmZW5kcG9pbnQtPmFkZHIsIHJldCk7CisrCQkJZ290byBlcnI7CisrCQl9IGVsc2UgaWYgKHVubGlrZWx5KGRzdC0+ZGV2ID09IHNrYi0+ZGV2KSkgeworKwkJCWRzdF9yZWxlYXNlKGRzdCk7CisrCQkJcmV0ID0gLUVMT09QOworKwkJCW5ldF9kYmdfcmF0ZWxpbWl0ZWQoIiVzOiBBdm9pZGluZyByb3V0aW5nIGxvb3AgdG8gJXBJU3Bmc2NcbiIsCisrCQkJCQkgICAgd2ctPmRldi0+bmFtZSwgJmVuZHBvaW50LT5hZGRyKTsKKysJCQlnb3RvIGVycjsKKysJCX0KKysJCWlmIChjYWNoZSkKKysJCQlkc3RfY2FjaGVfc2V0X2lwNihjYWNoZSwgZHN0LCAmZmwuc2FkZHIpOworKwl9CisrCisrCXNrYi0+aWdub3JlX2RmID0gMTsKKysJdWRwX3R1bm5lbDZfeG1pdF9za2IoZHN0LCBzb2NrLCBza2IsIHNrYi0+ZGV2LCAmZmwuc2FkZHIsICZmbC5kYWRkciwgZHMsCisrCQkJICAgICBpcDZfZHN0X2hvcGxpbWl0KGRzdCksIDAsIGZsLmZsNl9zcG9ydCwKKysJCQkgICAgIGZsLmZsNl9kcG9ydCwgZmFsc2UpOworKwlnb3RvIG91dDsKKysKKytlcnI6CisrCWtmcmVlX3NrYihza2IpOworK291dDoKKysJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CisrCXJldHVybiByZXQ7CisrI2Vsc2UKKysJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CisrI2VuZGlmCisrfQorKworK2ludCB3Z19zb2NrZXRfc2VuZF9za2JfdG9fcGVlcihzdHJ1Y3Qgd2dfcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggZHMpCisreworKwlzaXplX3Qgc2tiX2xlbiA9IHNrYi0+bGVuOworKwlpbnQgcmV0ID0gLUVBRk5PU1VQUE9SVDsKKysKKysJcmVhZF9sb2NrX2JoKCZwZWVyLT5lbmRwb2ludF9sb2NrKTsKKysJaWYgKHBlZXItPmVuZHBvaW50LmFkZHIuc2FfZmFtaWx5ID09IEFGX0lORVQpCisrCQlyZXQgPSBzZW5kNChwZWVyLT5kZXZpY2UsIHNrYiwgJnBlZXItPmVuZHBvaW50LCBkcywKKysJCQkgICAgJnBlZXItPmVuZHBvaW50X2NhY2hlKTsKKysJZWxzZSBpZiAocGVlci0+ZW5kcG9pbnQuYWRkci5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpCisrCQlyZXQgPSBzZW5kNihwZWVyLT5kZXZpY2UsIHNrYiwgJnBlZXItPmVuZHBvaW50LCBkcywKKysJCQkgICAgJnBlZXItPmVuZHBvaW50X2NhY2hlKTsKKysJZWxzZQorKwkJZGV2X2tmcmVlX3NrYihza2IpOworKwlpZiAobGlrZWx5KCFyZXQpKQorKwkJcGVlci0+dHhfYnl0ZXMgKz0gc2tiX2xlbjsKKysJcmVhZF91bmxvY2tfYmgoJnBlZXItPmVuZHBvaW50X2xvY2spOworKworKwlyZXR1cm4gcmV0OworK30KKysKKytpbnQgd2dfc29ja2V0X3NlbmRfYnVmZmVyX3RvX3BlZXIoc3RydWN0IHdnX3BlZXIgKnBlZXIsIHZvaWQgKmJ1ZmZlciwKKysJCQkJICBzaXplX3QgbGVuLCB1OCBkcykKKyt7CisrCXN0cnVjdCBza19idWZmICpza2IgPSBhbGxvY19za2IobGVuICsgU0tCX0hFQURFUl9MRU4sIEdGUF9BVE9NSUMpOworKworKwlpZiAodW5saWtlbHkoIXNrYikpCisrCQlyZXR1cm4gLUVOT01FTTsKKysKKysJc2tiX3Jlc2VydmUoc2tiLCBTS0JfSEVBREVSX0xFTik7CisrCXNrYl9zZXRfaW5uZXJfbmV0d29ya19oZWFkZXIoc2tiLCAwKTsKKysJc2tiX3B1dF9kYXRhKHNrYiwgYnVmZmVyLCBsZW4pOworKwlyZXR1cm4gd2dfc29ja2V0X3NlbmRfc2tiX3RvX3BlZXIocGVlciwgc2tiLCBkcyk7CisrfQorKworK2ludCB3Z19zb2NrZXRfc2VuZF9idWZmZXJfYXNfcmVwbHlfdG9fc2tiKHN0cnVjdCB3Z19kZXZpY2UgKndnLAorKwkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCB2b2lkICpidWZmZXIsCisrCQkJCQkgIHNpemVfdCBsZW4pCisreworKwlpbnQgcmV0ID0gMDsKKysJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKysJc3RydWN0IGVuZHBvaW50IGVuZHBvaW50OworKworKwlpZiAodW5saWtlbHkoIWluX3NrYikpCisrCQlyZXR1cm4gLUVJTlZBTDsKKysJcmV0ID0gd2dfc29ja2V0X2VuZHBvaW50X2Zyb21fc2tiKCZlbmRwb2ludCwgaW5fc2tiKTsKKysJaWYgKHVubGlrZWx5KHJldCA8IDApKQorKwkJcmV0dXJuIHJldDsKKysKKysJc2tiID0gYWxsb2Nfc2tiKGxlbiArIFNLQl9IRUFERVJfTEVOLCBHRlBfQVRPTUlDKTsKKysJaWYgKHVubGlrZWx5KCFza2IpKQorKwkJcmV0dXJuIC1FTk9NRU07CisrCXNrYl9yZXNlcnZlKHNrYiwgU0tCX0hFQURFUl9MRU4pOworKwlza2Jfc2V0X2lubmVyX25ldHdvcmtfaGVhZGVyKHNrYiwgMCk7CisrCXNrYl9wdXRfZGF0YShza2IsIGJ1ZmZlciwgbGVuKTsKKysKKysJaWYgKGVuZHBvaW50LmFkZHIuc2FfZmFtaWx5ID09IEFGX0lORVQpCisrCQlyZXQgPSBzZW5kNCh3Zywgc2tiLCAmZW5kcG9pbnQsIDAsIE5VTEwpOworKwllbHNlIGlmIChlbmRwb2ludC5hZGRyLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikKKysJCXJldCA9IHNlbmQ2KHdnLCBza2IsICZlbmRwb2ludCwgMCwgTlVMTCk7CisrCS8qIE5vIG90aGVyIHBvc3NpYmlsaXRpZXMgaWYgdGhlIGVuZHBvaW50IGlzIHZhbGlkLCB3aGljaCBpdCBpcywKKysJICogYXMgd2UgY2hlY2tlZCBhYm92ZS4KKysJICovCisrCisrCXJldHVybiByZXQ7CisrfQorKworK2ludCB3Z19zb2NrZXRfZW5kcG9pbnRfZnJvbV9za2Ioc3RydWN0IGVuZHBvaW50ICplbmRwb2ludCwKKysJCQkJY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKKyt7CisrCW1lbXNldChlbmRwb2ludCwgMCwgc2l6ZW9mKCplbmRwb2ludCkpOworKwlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHsKKysJCWVuZHBvaW50LT5hZGRyNC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKysJCWVuZHBvaW50LT5hZGRyNC5zaW5fcG9ydCA9IHVkcF9oZHIoc2tiKS0+c291cmNlOworKwkJZW5kcG9pbnQtPmFkZHI0LnNpbl9hZGRyLnNfYWRkciA9IGlwX2hkcihza2IpLT5zYWRkcjsKKysJCWVuZHBvaW50LT5zcmM0LnNfYWRkciA9IGlwX2hkcihza2IpLT5kYWRkcjsKKysJCWVuZHBvaW50LT5zcmNfaWY0ID0gc2tiLT5za2JfaWlmOworKwl9IGVsc2UgaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpIHsKKysJCWVuZHBvaW50LT5hZGRyNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworKwkJZW5kcG9pbnQtPmFkZHI2LnNpbjZfcG9ydCA9IHVkcF9oZHIoc2tiKS0+c291cmNlOworKwkJZW5kcG9pbnQtPmFkZHI2LnNpbjZfYWRkciA9IGlwdjZfaGRyKHNrYiktPnNhZGRyOworKwkJZW5kcG9pbnQtPmFkZHI2LnNpbjZfc2NvcGVfaWQgPSBpcHY2X2lmYWNlX3Njb3BlX2lkKAorKwkJCSZpcHY2X2hkcihza2IpLT5zYWRkciwgc2tiLT5za2JfaWlmKTsKKysJCWVuZHBvaW50LT5zcmM2ID0gaXB2Nl9oZHIoc2tiKS0+ZGFkZHI7CisrCX0gZWxzZSB7CisrCQlyZXR1cm4gLUVJTlZBTDsKKysJfQorKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGJvb2wgZW5kcG9pbnRfZXEoY29uc3Qgc3RydWN0IGVuZHBvaW50ICphLCBjb25zdCBzdHJ1Y3QgZW5kcG9pbnQgKmIpCisreworKwlyZXR1cm4gKGEtPmFkZHIuc2FfZmFtaWx5ID09IEFGX0lORVQgJiYgYi0+YWRkci5zYV9mYW1pbHkgPT0gQUZfSU5FVCAmJgorKwkJYS0+YWRkcjQuc2luX3BvcnQgPT0gYi0+YWRkcjQuc2luX3BvcnQgJiYKKysJCWEtPmFkZHI0LnNpbl9hZGRyLnNfYWRkciA9PSBiLT5hZGRyNC5zaW5fYWRkci5zX2FkZHIgJiYKKysJCWEtPnNyYzQuc19hZGRyID09IGItPnNyYzQuc19hZGRyICYmIGEtPnNyY19pZjQgPT0gYi0+c3JjX2lmNCkgfHwKKysJICAgICAgIChhLT5hZGRyLnNhX2ZhbWlseSA9PSBBRl9JTkVUNiAmJgorKwkJYi0+YWRkci5zYV9mYW1pbHkgPT0gQUZfSU5FVDYgJiYKKysJCWEtPmFkZHI2LnNpbjZfcG9ydCA9PSBiLT5hZGRyNi5zaW42X3BvcnQgJiYKKysJCWlwdjZfYWRkcl9lcXVhbCgmYS0+YWRkcjYuc2luNl9hZGRyLCAmYi0+YWRkcjYuc2luNl9hZGRyKSAmJgorKwkJYS0+YWRkcjYuc2luNl9zY29wZV9pZCA9PSBiLT5hZGRyNi5zaW42X3Njb3BlX2lkICYmCisrCQlpcHY2X2FkZHJfZXF1YWwoJmEtPnNyYzYsICZiLT5zcmM2KSkgfHwKKysJICAgICAgIHVubGlrZWx5KCFhLT5hZGRyLnNhX2ZhbWlseSAmJiAhYi0+YWRkci5zYV9mYW1pbHkpOworK30KKysKKyt2b2lkIHdnX3NvY2tldF9zZXRfcGVlcl9lbmRwb2ludChzdHJ1Y3Qgd2dfcGVlciAqcGVlciwKKysJCQkJIGNvbnN0IHN0cnVjdCBlbmRwb2ludCAqZW5kcG9pbnQpCisreworKwkvKiBGaXJzdCB3ZSBjaGVjayB1bmxvY2tlZCwgaW4gb3JkZXIgdG8gb3B0aW1pemUsIHNpbmNlIGl0J3MgcHJldHR5IHJhcmUKKysJICogdGhhdCBhbiBlbmRwb2ludCB3aWxsIGNoYW5nZS4gSWYgd2UgaGFwcGVuIHRvIGJlIG1pZC13cml0ZSwgYW5kIHR3bworKwkgKiBDUFVzIHdpbmQgdXAgd3JpdGluZyB0aGUgc2FtZSB0aGluZyBvciBzb21ldGhpbmcgc2xpZ2h0bHkgZGlmZmVyZW50LAorKwkgKiBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgbXVjaCBlaXRoZXIuCisrCSAqLworKwlpZiAoZW5kcG9pbnRfZXEoZW5kcG9pbnQsICZwZWVyLT5lbmRwb2ludCkpCisrCQlyZXR1cm47CisrCXdyaXRlX2xvY2tfYmgoJnBlZXItPmVuZHBvaW50X2xvY2spOworKwlpZiAoZW5kcG9pbnQtPmFkZHIuc2FfZmFtaWx5ID09IEFGX0lORVQpIHsKKysJCXBlZXItPmVuZHBvaW50LmFkZHI0ID0gZW5kcG9pbnQtPmFkZHI0OworKwkJcGVlci0+ZW5kcG9pbnQuc3JjNCA9IGVuZHBvaW50LT5zcmM0OworKwkJcGVlci0+ZW5kcG9pbnQuc3JjX2lmNCA9IGVuZHBvaW50LT5zcmNfaWY0OworKwl9IGVsc2UgaWYgKGVuZHBvaW50LT5hZGRyLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgeworKwkJcGVlci0+ZW5kcG9pbnQuYWRkcjYgPSBlbmRwb2ludC0+YWRkcjY7CisrCQlwZWVyLT5lbmRwb2ludC5zcmM2ID0gZW5kcG9pbnQtPnNyYzY7CisrCX0gZWxzZSB7CisrCQlnb3RvIG91dDsKKysJfQorKwlkc3RfY2FjaGVfcmVzZXQoJnBlZXItPmVuZHBvaW50X2NhY2hlKTsKKytvdXQ6CisrCXdyaXRlX3VubG9ja19iaCgmcGVlci0+ZW5kcG9pbnRfbG9jayk7CisrfQorKworK3ZvaWQgd2dfc29ja2V0X3NldF9wZWVyX2VuZHBvaW50X2Zyb21fc2tiKHN0cnVjdCB3Z19wZWVyICpwZWVyLAorKwkJCQkJICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorK3sKKysJc3RydWN0IGVuZHBvaW50IGVuZHBvaW50OworKworKwlpZiAoIXdnX3NvY2tldF9lbmRwb2ludF9mcm9tX3NrYigmZW5kcG9pbnQsIHNrYikpCisrCQl3Z19zb2NrZXRfc2V0X3BlZXJfZW5kcG9pbnQocGVlciwgJmVuZHBvaW50KTsKKyt9CisrCisrdm9pZCB3Z19zb2NrZXRfY2xlYXJfcGVlcl9lbmRwb2ludF9zcmMoc3RydWN0IHdnX3BlZXIgKnBlZXIpCisreworKwl3cml0ZV9sb2NrX2JoKCZwZWVyLT5lbmRwb2ludF9sb2NrKTsKKysJbWVtc2V0KCZwZWVyLT5lbmRwb2ludC5zcmM2LCAwLCBzaXplb2YocGVlci0+ZW5kcG9pbnQuc3JjNikpOworKwlkc3RfY2FjaGVfcmVzZXQoJnBlZXItPmVuZHBvaW50X2NhY2hlKTsKKysJd3JpdGVfdW5sb2NrX2JoKCZwZWVyLT5lbmRwb2ludF9sb2NrKTsKKyt9CisrCisrc3RhdGljIGludCB3Z19yZWNlaXZlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKKyt7CisrCXN0cnVjdCB3Z19kZXZpY2UgKndnOworKworKwlpZiAodW5saWtlbHkoIXNrKSkKKysJCWdvdG8gZXJyOworKwl3ZyA9IHNrLT5za191c2VyX2RhdGE7CisrCWlmICh1bmxpa2VseSghd2cpKQorKwkJZ290byBlcnI7CisrCXdnX3BhY2tldF9yZWNlaXZlKHdnLCBza2IpOworKwlyZXR1cm4gMDsKKysKKytlcnI6CisrCWtmcmVlX3NrYihza2IpOworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIHZvaWQgc29ja19mcmVlKHN0cnVjdCBzb2NrICpzb2NrKQorK3sKKysJaWYgKHVubGlrZWx5KCFzb2NrKSkKKysJCXJldHVybjsKKysJc2tfY2xlYXJfbWVtYWxsb2Moc29jayk7CisrCXVkcF90dW5uZWxfc29ja19yZWxlYXNlKHNvY2stPnNrX3NvY2tldCk7CisrfQorKworK3N0YXRpYyB2b2lkIHNldF9zb2NrX29wdHMoc3RydWN0IHNvY2tldCAqc29jaykKKyt7CisrCXNvY2stPnNrLT5za19hbGxvY2F0aW9uID0gR0ZQX0FUT01JQzsKKysJc29jay0+c2stPnNrX3NuZGJ1ZiA9IElOVF9NQVg7CisrCXNrX3NldF9tZW1hbGxvYyhzb2NrLT5zayk7CisrfQorKworK2ludCB3Z19zb2NrZXRfaW5pdChzdHJ1Y3Qgd2dfZGV2aWNlICp3ZywgdTE2IHBvcnQpCisreworKwlpbnQgcmV0OworKwlzdHJ1Y3QgdWRwX3R1bm5lbF9zb2NrX2NmZyBjZmcgPSB7CisrCQkuc2tfdXNlcl9kYXRhID0gd2csCisrCQkuZW5jYXBfdHlwZSA9IDEsCisrCQkuZW5jYXBfcmN2ID0gd2dfcmVjZWl2ZQorKwl9OworKwlzdHJ1Y3Qgc29ja2V0ICpuZXc0ID0gTlVMTCwgKm5ldzYgPSBOVUxMOworKwlzdHJ1Y3QgdWRwX3BvcnRfY2ZnIHBvcnQ0ID0geworKwkJLmZhbWlseSA9IEFGX0lORVQsCisrCQkubG9jYWxfaXAuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSksCisrCQkubG9jYWxfdWRwX3BvcnQgPSBodG9ucyhwb3J0KSwKKysJCS51c2VfdWRwX2NoZWNrc3VtcyA9IHRydWUKKysJfTsKKysjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKKysJaW50IHJldHJpZXMgPSAwOworKwlzdHJ1Y3QgdWRwX3BvcnRfY2ZnIHBvcnQ2ID0geworKwkJLmZhbWlseSA9IEFGX0lORVQ2LAorKwkJLmxvY2FsX2lwNiA9IElONkFERFJfQU5ZX0lOSVQsCisrCQkudXNlX3VkcDZfdHhfY2hlY2tzdW1zID0gdHJ1ZSwKKysJCS51c2VfdWRwNl9yeF9jaGVja3N1bXMgPSB0cnVlLAorKwkJLmlwdjZfdjZvbmx5ID0gdHJ1ZQorKwl9OworKyNlbmRpZgorKworKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQorK3JldHJ5OgorKyNlbmRpZgorKworKwlyZXQgPSB1ZHBfc29ja19jcmVhdGUod2ctPmNyZWF0aW5nX25ldCwgJnBvcnQ0LCAmbmV3NCk7CisrCWlmIChyZXQgPCAwKSB7CisrCQlwcl9lcnIoIiVzOiBDb3VsZCBub3QgY3JlYXRlIElQdjQgc29ja2V0XG4iLCB3Zy0+ZGV2LT5uYW1lKTsKKysJCXJldHVybiByZXQ7CisrCX0KKysJc2V0X3NvY2tfb3B0cyhuZXc0KTsKKysJc2V0dXBfdWRwX3R1bm5lbF9zb2NrKHdnLT5jcmVhdGluZ19uZXQsIG5ldzQsICZjZmcpOworKworKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQorKwlpZiAoaXB2Nl9tb2RfZW5hYmxlZCgpKSB7CisrCQlwb3J0Ni5sb2NhbF91ZHBfcG9ydCA9IGluZXRfc2sobmV3NC0+c2spLT5pbmV0X3Nwb3J0OworKwkJcmV0ID0gdWRwX3NvY2tfY3JlYXRlKHdnLT5jcmVhdGluZ19uZXQsICZwb3J0NiwgJm5ldzYpOworKwkJaWYgKHJldCA8IDApIHsKKysJCQl1ZHBfdHVubmVsX3NvY2tfcmVsZWFzZShuZXc0KTsKKysJCQlpZiAocmV0ID09IC1FQUREUklOVVNFICYmICFwb3J0ICYmIHJldHJpZXMrKyA8IDEwMCkKKysJCQkJZ290byByZXRyeTsKKysJCQlwcl9lcnIoIiVzOiBDb3VsZCBub3QgY3JlYXRlIElQdjYgc29ja2V0XG4iLAorKwkJCSAgICAgICB3Zy0+ZGV2LT5uYW1lKTsKKysJCQlyZXR1cm4gcmV0OworKwkJfQorKwkJc2V0X3NvY2tfb3B0cyhuZXc2KTsKKysJCXNldHVwX3VkcF90dW5uZWxfc29jayh3Zy0+Y3JlYXRpbmdfbmV0LCBuZXc2LCAmY2ZnKTsKKysJfQorKyNlbmRpZgorKworKwl3Z19zb2NrZXRfcmVpbml0KHdnLCBuZXc0LT5zaywgbmV3NiA/IG5ldzYtPnNrIDogTlVMTCk7CisrCXJldHVybiAwOworK30KKysKKyt2b2lkIHdnX3NvY2tldF9yZWluaXQoc3RydWN0IHdnX2RldmljZSAqd2csIHN0cnVjdCBzb2NrICpuZXc0LAorKwkJICAgICAgc3RydWN0IHNvY2sgKm5ldzYpCisreworKwlzdHJ1Y3Qgc29jayAqb2xkNCwgKm9sZDY7CisrCisrCW11dGV4X2xvY2soJndnLT5zb2NrZXRfdXBkYXRlX2xvY2spOworKwlvbGQ0ID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3Zy0+c29jazQsCisrCQkJCWxvY2tkZXBfaXNfaGVsZCgmd2ctPnNvY2tldF91cGRhdGVfbG9jaykpOworKwlvbGQ2ID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh3Zy0+c29jazYsCisrCQkJCWxvY2tkZXBfaXNfaGVsZCgmd2ctPnNvY2tldF91cGRhdGVfbG9jaykpOworKwlyY3VfYXNzaWduX3BvaW50ZXIod2ctPnNvY2s0LCBuZXc0KTsKKysJcmN1X2Fzc2lnbl9wb2ludGVyKHdnLT5zb2NrNiwgbmV3Nik7CisrCWlmIChuZXc0KQorKwkJd2ctPmluY29taW5nX3BvcnQgPSBudG9ocyhpbmV0X3NrKG5ldzQpLT5pbmV0X3Nwb3J0KTsKKysJbXV0ZXhfdW5sb2NrKCZ3Zy0+c29ja2V0X3VwZGF0ZV9sb2NrKTsKKysJc3luY2hyb25pemVfcmN1KCk7CisrCXN5bmNocm9uaXplX25ldCgpOworKwlzb2NrX2ZyZWUob2xkNCk7CisrCXNvY2tfZnJlZShvbGQ2KTsKKyt9CistLS0gL2Rldi9udWxsCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvc29ja2V0LmgKK0BAIC0wLDAgKzEsNDQgQEAKKysvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworKy8qCisrICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKyAqLworKworKyNpZm5kZWYgX1dHX1NPQ0tFVF9ICisrI2RlZmluZSBfV0dfU09DS0VUX0gKKysKKysjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisrI2luY2x1ZGUgPGxpbnV4L3VkcC5oPgorKyNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CisrI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisrCisraW50IHdnX3NvY2tldF9pbml0KHN0cnVjdCB3Z19kZXZpY2UgKndnLCB1MTYgcG9ydCk7Cisrdm9pZCB3Z19zb2NrZXRfcmVpbml0KHN0cnVjdCB3Z19kZXZpY2UgKndnLCBzdHJ1Y3Qgc29jayAqbmV3NCwKKysJCSAgICAgIHN0cnVjdCBzb2NrICpuZXc2KTsKKytpbnQgd2dfc29ja2V0X3NlbmRfYnVmZmVyX3RvX3BlZXIoc3RydWN0IHdnX3BlZXIgKnBlZXIsIHZvaWQgKmRhdGEsCisrCQkJCSAgc2l6ZV90IGxlbiwgdTggZHMpOworK2ludCB3Z19zb2NrZXRfc2VuZF9za2JfdG9fcGVlcihzdHJ1Y3Qgd2dfcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKysJCQkgICAgICAgdTggZHMpOworK2ludCB3Z19zb2NrZXRfc2VuZF9idWZmZXJfYXNfcmVwbHlfdG9fc2tiKHN0cnVjdCB3Z19kZXZpY2UgKndnLAorKwkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLAorKwkJCQkJICB2b2lkICpvdXRfYnVmZmVyLCBzaXplX3QgbGVuKTsKKysKKytpbnQgd2dfc29ja2V0X2VuZHBvaW50X2Zyb21fc2tiKHN0cnVjdCBlbmRwb2ludCAqZW5kcG9pbnQsCisrCQkJCWNvbnN0IHN0cnVjdCBza19idWZmICpza2IpOworK3ZvaWQgd2dfc29ja2V0X3NldF9wZWVyX2VuZHBvaW50KHN0cnVjdCB3Z19wZWVyICpwZWVyLAorKwkJCQkgY29uc3Qgc3RydWN0IGVuZHBvaW50ICplbmRwb2ludCk7Cisrdm9pZCB3Z19zb2NrZXRfc2V0X3BlZXJfZW5kcG9pbnRfZnJvbV9za2Ioc3RydWN0IHdnX3BlZXIgKnBlZXIsCisrCQkJCQkgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpOworK3ZvaWQgd2dfc29ja2V0X2NsZWFyX3BlZXJfZW5kcG9pbnRfc3JjKHN0cnVjdCB3Z19wZWVyICpwZWVyKTsKKysKKysjaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19ERUJVRykgfHwgZGVmaW5lZChERUJVRykKKysjZGVmaW5lIG5ldF9kYmdfc2tiX3JhdGVsaW1pdGVkKGZtdCwgZGV2LCBza2IsIC4uLikgZG8geyAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJc3RydWN0IGVuZHBvaW50IF9fZW5kcG9pbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJd2dfc29ja2V0X2VuZHBvaW50X2Zyb21fc2tiKCZfX2VuZHBvaW50LCBza2IpOyAgICAgICAgICAgICAgICAgXAorKwkJbmV0X2RiZ19yYXRlbGltaXRlZChmbXQsIGRldiwgJl9fZW5kcG9pbnQuYWRkciwgICAgICAgICAgICAgICAgXAorKwkJCQkgICAgIyNfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJfSB3aGlsZSAoMCkKKysjZWxzZQorKyNkZWZpbmUgbmV0X2RiZ19za2JfcmF0ZWxpbWl0ZWQoZm10LCBza2IsIC4uLikKKysjZW5kaWYKKysKKysjZW5kaWYgLyogX1dHX1NPQ0tFVF9IICovCistLS0gL2Rldi9udWxsCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvdGltZXJzLmMKK0BAIC0wLDAgKzEsMjQzIEBACisrLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKysvKgorKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKysgKi8KKysKKysjaW5jbHVkZSAidGltZXJzLmgiCisrI2luY2x1ZGUgImRldmljZS5oIgorKyNpbmNsdWRlICJwZWVyLmgiCisrI2luY2x1ZGUgInF1ZXVlaW5nLmgiCisrI2luY2x1ZGUgInNvY2tldC5oIgorKworKy8qCisrICogLSBUaW1lciBmb3IgcmV0cmFuc21pdHRpbmcgdGhlIGhhbmRzaGFrZSBpZiB3ZSBkb24ndCBoZWFyIGJhY2sgYWZ0ZXIKKysgKiBgUkVLRVlfVElNRU9VVCArIGppdHRlcmAgbXMuCisrICoKKysgKiAtIFRpbWVyIGZvciBzZW5kaW5nIGVtcHR5IHBhY2tldCBpZiB3ZSBoYXZlIHJlY2VpdmVkIGEgcGFja2V0IGJ1dCBhZnRlciBoYXZlCisrICogbm90IHNlbnQgb25lIGZvciBgS0VFUEFMSVZFX1RJTUVPVVRgIG1zLgorKyAqCisrICogLSBUaW1lciBmb3IgaW5pdGlhdGluZyBuZXcgaGFuZHNoYWtlIGlmIHdlIGhhdmUgc2VudCBhIHBhY2tldCBidXQgYWZ0ZXIgaGF2ZQorKyAqIG5vdCByZWNlaXZlZCBvbmUgKGV2ZW4gZW1wdHkpIGZvciBgKEtFRVBBTElWRV9USU1FT1VUICsgUkVLRVlfVElNRU9VVCkgKworKyAqIGppdHRlcmAgbXMuCisrICoKKysgKiAtIFRpbWVyIGZvciB6ZXJvaW5nIG91dCBhbGwgZXBoZW1lcmFsIGtleXMgYWZ0ZXIgYChSRUpFQ1RfQUZURVJfVElNRSAqIDMpYCBtcworKyAqIGlmIG5vIG5ldyBrZXlzIGhhdmUgYmVlbiByZWNlaXZlZC4KKysgKgorKyAqIC0gVGltZXIgZm9yLCBpZiBlbmFibGVkLCBzZW5kaW5nIGFuIGVtcHR5IGF1dGhlbnRpY2F0ZWQgcGFja2V0IGV2ZXJ5IHVzZXItCisrICogc3BlY2lmaWVkIHNlY29uZHMuCisrICovCisrCisrc3RhdGljIGlubGluZSB2b2lkIG1vZF9wZWVyX3RpbWVyKHN0cnVjdCB3Z19wZWVyICpwZWVyLAorKwkJCQkgIHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwKKysJCQkJICB1bnNpZ25lZCBsb25nIGV4cGlyZXMpCisreworKwlyY3VfcmVhZF9sb2NrX2JoKCk7CisrCWlmIChsaWtlbHkobmV0aWZfcnVubmluZyhwZWVyLT5kZXZpY2UtPmRldikgJiYKKysJCSAgICFSRUFEX09OQ0UocGVlci0+aXNfZGVhZCkpKQorKwkJbW9kX3RpbWVyKHRpbWVyLCBleHBpcmVzKTsKKysJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CisrfQorKworK3N0YXRpYyB2b2lkIHdnX2V4cGlyZWRfcmV0cmFuc21pdF9oYW5kc2hha2Uoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQorK3sKKysJc3RydWN0IHdnX3BlZXIgKnBlZXIgPSBmcm9tX3RpbWVyKHBlZXIsIHRpbWVyLAorKwkJCQkJICB0aW1lcl9yZXRyYW5zbWl0X2hhbmRzaGFrZSk7CisrCisrCWlmIChwZWVyLT50aW1lcl9oYW5kc2hha2VfYXR0ZW1wdHMgPiBNQVhfVElNRVJfSEFORFNIQUtFUykgeworKwkJcHJfZGVidWcoIiVzOiBIYW5kc2hha2UgZm9yIHBlZXIgJWxsdSAoJXBJU3Bmc2MpIGRpZCBub3QgY29tcGxldGUgYWZ0ZXIgJWQgYXR0ZW1wdHMsIGdpdmluZyB1cFxuIiwKKysJCQkgcGVlci0+ZGV2aWNlLT5kZXYtPm5hbWUsIHBlZXItPmludGVybmFsX2lkLAorKwkJCSAmcGVlci0+ZW5kcG9pbnQuYWRkciwgTUFYX1RJTUVSX0hBTkRTSEFLRVMgKyAyKTsKKysKKysJCWRlbF90aW1lcigmcGVlci0+dGltZXJfc2VuZF9rZWVwYWxpdmUpOworKwkJLyogV2UgZHJvcCBhbGwgcGFja2V0cyB3aXRob3V0IGEga2V5cGFpciBhbmQgZG9uJ3QgdHJ5IGFnYWluLAorKwkJICogaWYgd2UgdHJ5IHVuc3VjY2Vzc2Z1bGx5IGZvciB0b28gbG9uZyB0byBtYWtlIGEgaGFuZHNoYWtlLgorKwkJICovCisrCQl3Z19wYWNrZXRfcHVyZ2Vfc3RhZ2VkX3BhY2tldHMocGVlcik7CisrCisrCQkvKiBXZSBzZXQgYSB0aW1lciBmb3IgZGVzdHJveWluZyBhbnkgcmVzaWR1ZSB0aGF0IG1pZ2h0IGJlIGxlZnQKKysJCSAqIG9mIGEgcGFydGlhbCBleGNoYW5nZS4KKysJCSAqLworKwkJaWYgKCF0aW1lcl9wZW5kaW5nKCZwZWVyLT50aW1lcl96ZXJvX2tleV9tYXRlcmlhbCkpCisrCQkJbW9kX3BlZXJfdGltZXIocGVlciwgJnBlZXItPnRpbWVyX3plcm9fa2V5X21hdGVyaWFsLAorKwkJCQkgICAgICAgamlmZmllcyArIFJFSkVDVF9BRlRFUl9USU1FICogMyAqIEhaKTsKKysJfSBlbHNlIHsKKysJCSsrcGVlci0+dGltZXJfaGFuZHNoYWtlX2F0dGVtcHRzOworKwkJcHJfZGVidWcoIiVzOiBIYW5kc2hha2UgZm9yIHBlZXIgJWxsdSAoJXBJU3Bmc2MpIGRpZCBub3QgY29tcGxldGUgYWZ0ZXIgJWQgc2Vjb25kcywgcmV0cnlpbmcgKHRyeSAlZClcbiIsCisrCQkJIHBlZXItPmRldmljZS0+ZGV2LT5uYW1lLCBwZWVyLT5pbnRlcm5hbF9pZCwKKysJCQkgJnBlZXItPmVuZHBvaW50LmFkZHIsIFJFS0VZX1RJTUVPVVQsCisrCQkJIHBlZXItPnRpbWVyX2hhbmRzaGFrZV9hdHRlbXB0cyArIDEpOworKworKwkJLyogV2UgY2xlYXIgdGhlIGVuZHBvaW50IGFkZHJlc3Mgc3JjIGFkZHJlc3MsIGluIGNhc2UgdGhpcyBpcworKwkJICogdGhlIGNhdXNlIG9mIHRyb3VibGUuCisrCQkgKi8KKysJCXdnX3NvY2tldF9jbGVhcl9wZWVyX2VuZHBvaW50X3NyYyhwZWVyKTsKKysKKysJCXdnX3BhY2tldF9zZW5kX3F1ZXVlZF9oYW5kc2hha2VfaW5pdGlhdGlvbihwZWVyLCB0cnVlKTsKKysJfQorK30KKysKKytzdGF0aWMgdm9pZCB3Z19leHBpcmVkX3NlbmRfa2VlcGFsaXZlKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcikKKyt7CisrCXN0cnVjdCB3Z19wZWVyICpwZWVyID0gZnJvbV90aW1lcihwZWVyLCB0aW1lciwgdGltZXJfc2VuZF9rZWVwYWxpdmUpOworKworKwl3Z19wYWNrZXRfc2VuZF9rZWVwYWxpdmUocGVlcik7CisrCWlmIChwZWVyLT50aW1lcl9uZWVkX2Fub3RoZXJfa2VlcGFsaXZlKSB7CisrCQlwZWVyLT50aW1lcl9uZWVkX2Fub3RoZXJfa2VlcGFsaXZlID0gZmFsc2U7CisrCQltb2RfcGVlcl90aW1lcihwZWVyLCAmcGVlci0+dGltZXJfc2VuZF9rZWVwYWxpdmUsCisrCQkJICAgICAgIGppZmZpZXMgKyBLRUVQQUxJVkVfVElNRU9VVCAqIEhaKTsKKysJfQorK30KKysKKytzdGF0aWMgdm9pZCB3Z19leHBpcmVkX25ld19oYW5kc2hha2Uoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQorK3sKKysJc3RydWN0IHdnX3BlZXIgKnBlZXIgPSBmcm9tX3RpbWVyKHBlZXIsIHRpbWVyLCB0aW1lcl9uZXdfaGFuZHNoYWtlKTsKKysKKysJcHJfZGVidWcoIiVzOiBSZXRyeWluZyBoYW5kc2hha2Ugd2l0aCBwZWVyICVsbHUgKCVwSVNwZnNjKSBiZWNhdXNlIHdlIHN0b3BwZWQgaGVhcmluZyBiYWNrIGFmdGVyICVkIHNlY29uZHNcbiIsCisrCQkgcGVlci0+ZGV2aWNlLT5kZXYtPm5hbWUsIHBlZXItPmludGVybmFsX2lkLAorKwkJICZwZWVyLT5lbmRwb2ludC5hZGRyLCBLRUVQQUxJVkVfVElNRU9VVCArIFJFS0VZX1RJTUVPVVQpOworKwkvKiBXZSBjbGVhciB0aGUgZW5kcG9pbnQgYWRkcmVzcyBzcmMgYWRkcmVzcywgaW4gY2FzZSB0aGlzIGlzIHRoZSBjYXVzZQorKwkgKiBvZiB0cm91YmxlLgorKwkgKi8KKysJd2dfc29ja2V0X2NsZWFyX3BlZXJfZW5kcG9pbnRfc3JjKHBlZXIpOworKwl3Z19wYWNrZXRfc2VuZF9xdWV1ZWRfaGFuZHNoYWtlX2luaXRpYXRpb24ocGVlciwgZmFsc2UpOworK30KKysKKytzdGF0aWMgdm9pZCB3Z19leHBpcmVkX3plcm9fa2V5X21hdGVyaWFsKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcikKKyt7CisrCXN0cnVjdCB3Z19wZWVyICpwZWVyID0gZnJvbV90aW1lcihwZWVyLCB0aW1lciwgdGltZXJfemVyb19rZXlfbWF0ZXJpYWwpOworKworKwlyY3VfcmVhZF9sb2NrX2JoKCk7CisrCWlmICghUkVBRF9PTkNFKHBlZXItPmlzX2RlYWQpKSB7CisrCQl3Z19wZWVyX2dldChwZWVyKTsKKysJCWlmICghcXVldWVfd29yayhwZWVyLT5kZXZpY2UtPmhhbmRzaGFrZV9zZW5kX3dxLAorKwkJCQkmcGVlci0+Y2xlYXJfcGVlcl93b3JrKSkKKysJCQkvKiBJZiB0aGUgd29yayB3YXMgYWxyZWFkeSBvbiB0aGUgcXVldWUsIHdlIHdhbnQgdG8gZHJvcAorKwkJCSAqIHRoZSBleHRyYSByZWZlcmVuY2UuCisrCQkJICovCisrCQkJd2dfcGVlcl9wdXQocGVlcik7CisrCX0KKysJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CisrfQorKworK3N0YXRpYyB2b2lkIHdnX3F1ZXVlZF9leHBpcmVkX3plcm9fa2V5X21hdGVyaWFsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKKyt7CisrCXN0cnVjdCB3Z19wZWVyICpwZWVyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3Z19wZWVyLAorKwkJCQkJICAgIGNsZWFyX3BlZXJfd29yayk7CisrCisrCXByX2RlYnVnKCIlczogWmVyb2luZyBvdXQgYWxsIGtleXMgZm9yIHBlZXIgJWxsdSAoJXBJU3Bmc2MpLCBzaW5jZSB3ZSBoYXZlbid0IHJlY2VpdmVkIGEgbmV3IG9uZSBpbiAlZCBzZWNvbmRzXG4iLAorKwkJIHBlZXItPmRldmljZS0+ZGV2LT5uYW1lLCBwZWVyLT5pbnRlcm5hbF9pZCwKKysJCSAmcGVlci0+ZW5kcG9pbnQuYWRkciwgUkVKRUNUX0FGVEVSX1RJTUUgKiAzKTsKKysJd2dfbm9pc2VfaGFuZHNoYWtlX2NsZWFyKCZwZWVyLT5oYW5kc2hha2UpOworKwl3Z19ub2lzZV9rZXlwYWlyc19jbGVhcigmcGVlci0+a2V5cGFpcnMpOworKwl3Z19wZWVyX3B1dChwZWVyKTsKKyt9CisrCisrc3RhdGljIHZvaWQgd2dfZXhwaXJlZF9zZW5kX3BlcnNpc3RlbnRfa2VlcGFsaXZlKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcikKKyt7CisrCXN0cnVjdCB3Z19wZWVyICpwZWVyID0gZnJvbV90aW1lcihwZWVyLCB0aW1lciwKKysJCQkJCSAgdGltZXJfcGVyc2lzdGVudF9rZWVwYWxpdmUpOworKworKwlpZiAobGlrZWx5KHBlZXItPnBlcnNpc3RlbnRfa2VlcGFsaXZlX2ludGVydmFsKSkKKysJCXdnX3BhY2tldF9zZW5kX2tlZXBhbGl2ZShwZWVyKTsKKyt9CisrCisrLyogU2hvdWxkIGJlIGNhbGxlZCBhZnRlciBhbiBhdXRoZW50aWNhdGVkIGRhdGEgcGFja2V0IGlzIHNlbnQuICovCisrdm9pZCB3Z190aW1lcnNfZGF0YV9zZW50KHN0cnVjdCB3Z19wZWVyICpwZWVyKQorK3sKKysJaWYgKCF0aW1lcl9wZW5kaW5nKCZwZWVyLT50aW1lcl9uZXdfaGFuZHNoYWtlKSkKKysJCW1vZF9wZWVyX3RpbWVyKHBlZXIsICZwZWVyLT50aW1lcl9uZXdfaGFuZHNoYWtlLAorKwkJCWppZmZpZXMgKyAoS0VFUEFMSVZFX1RJTUVPVVQgKyBSRUtFWV9USU1FT1VUKSAqIEhaICsKKysJCQlwcmFuZG9tX3UzMl9tYXgoUkVLRVlfVElNRU9VVF9KSVRURVJfTUFYX0pJRkZJRVMpKTsKKyt9CisrCisrLyogU2hvdWxkIGJlIGNhbGxlZCBhZnRlciBhbiBhdXRoZW50aWNhdGVkIGRhdGEgcGFja2V0IGlzIHJlY2VpdmVkLiAqLworK3ZvaWQgd2dfdGltZXJzX2RhdGFfcmVjZWl2ZWQoc3RydWN0IHdnX3BlZXIgKnBlZXIpCisreworKwlpZiAobGlrZWx5KG5ldGlmX3J1bm5pbmcocGVlci0+ZGV2aWNlLT5kZXYpKSkgeworKwkJaWYgKCF0aW1lcl9wZW5kaW5nKCZwZWVyLT50aW1lcl9zZW5kX2tlZXBhbGl2ZSkpCisrCQkJbW9kX3BlZXJfdGltZXIocGVlciwgJnBlZXItPnRpbWVyX3NlbmRfa2VlcGFsaXZlLAorKwkJCQkgICAgICAgamlmZmllcyArIEtFRVBBTElWRV9USU1FT1VUICogSFopOworKwkJZWxzZQorKwkJCXBlZXItPnRpbWVyX25lZWRfYW5vdGhlcl9rZWVwYWxpdmUgPSB0cnVlOworKwl9CisrfQorKworKy8qIFNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgYW55IHR5cGUgb2YgYXV0aGVudGljYXRlZCBwYWNrZXQgaXMgc2VudCwgd2hldGhlcgorKyAqIGtlZXBhbGl2ZSwgZGF0YSwgb3IgaGFuZHNoYWtlLgorKyAqLworK3ZvaWQgd2dfdGltZXJzX2FueV9hdXRoZW50aWNhdGVkX3BhY2tldF9zZW50KHN0cnVjdCB3Z19wZWVyICpwZWVyKQorK3sKKysJZGVsX3RpbWVyKCZwZWVyLT50aW1lcl9zZW5kX2tlZXBhbGl2ZSk7CisrfQorKworKy8qIFNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgYW55IHR5cGUgb2YgYXV0aGVudGljYXRlZCBwYWNrZXQgaXMgcmVjZWl2ZWQsIHdoZXRoZXIKKysgKiBrZWVwYWxpdmUsIGRhdGEsIG9yIGhhbmRzaGFrZS4KKysgKi8KKyt2b2lkIHdnX3RpbWVyc19hbnlfYXV0aGVudGljYXRlZF9wYWNrZXRfcmVjZWl2ZWQoc3RydWN0IHdnX3BlZXIgKnBlZXIpCisreworKwlkZWxfdGltZXIoJnBlZXItPnRpbWVyX25ld19oYW5kc2hha2UpOworK30KKysKKysvKiBTaG91bGQgYmUgY2FsbGVkIGFmdGVyIGEgaGFuZHNoYWtlIGluaXRpYXRpb24gbWVzc2FnZSBpcyBzZW50LiAqLworK3ZvaWQgd2dfdGltZXJzX2hhbmRzaGFrZV9pbml0aWF0ZWQoc3RydWN0IHdnX3BlZXIgKnBlZXIpCisreworKwltb2RfcGVlcl90aW1lcihwZWVyLCAmcGVlci0+dGltZXJfcmV0cmFuc21pdF9oYW5kc2hha2UsCisrCQkgICAgICAgamlmZmllcyArIFJFS0VZX1RJTUVPVVQgKiBIWiArCisrCQkgICAgICAgcHJhbmRvbV91MzJfbWF4KFJFS0VZX1RJTUVPVVRfSklUVEVSX01BWF9KSUZGSUVTKSk7CisrfQorKworKy8qIFNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgYSBoYW5kc2hha2UgcmVzcG9uc2UgbWVzc2FnZSBpcyByZWNlaXZlZCBhbmQgcHJvY2Vzc2VkCisrICogb3Igd2hlbiBnZXR0aW5nIGtleSBjb25maXJtYXRpb24gdmlhIHRoZSBmaXJzdCBkYXRhIG1lc3NhZ2UuCisrICovCisrdm9pZCB3Z190aW1lcnNfaGFuZHNoYWtlX2NvbXBsZXRlKHN0cnVjdCB3Z19wZWVyICpwZWVyKQorK3sKKysJZGVsX3RpbWVyKCZwZWVyLT50aW1lcl9yZXRyYW5zbWl0X2hhbmRzaGFrZSk7CisrCXBlZXItPnRpbWVyX2hhbmRzaGFrZV9hdHRlbXB0cyA9IDA7CisrCXBlZXItPnNlbnRfbGFzdG1pbnV0ZV9oYW5kc2hha2UgPSBmYWxzZTsKKysJa3RpbWVfZ2V0X3JlYWxfdHM2NCgmcGVlci0+d2FsbHRpbWVfbGFzdF9oYW5kc2hha2UpOworK30KKysKKysvKiBTaG91bGQgYmUgY2FsbGVkIGFmdGVyIGFuIGVwaGVtZXJhbCBrZXkgaXMgY3JlYXRlZCwgd2hpY2ggaXMgYmVmb3JlIHNlbmRpbmcgYQorKyAqIGhhbmRzaGFrZSByZXNwb25zZSBvciBhZnRlciByZWNlaXZpbmcgYSBoYW5kc2hha2UgcmVzcG9uc2UuCisrICovCisrdm9pZCB3Z190aW1lcnNfc2Vzc2lvbl9kZXJpdmVkKHN0cnVjdCB3Z19wZWVyICpwZWVyKQorK3sKKysJbW9kX3BlZXJfdGltZXIocGVlciwgJnBlZXItPnRpbWVyX3plcm9fa2V5X21hdGVyaWFsLAorKwkJICAgICAgIGppZmZpZXMgKyBSRUpFQ1RfQUZURVJfVElNRSAqIDMgKiBIWik7CisrfQorKworKy8qIFNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGEgcGFja2V0IHdpdGggYXV0aGVudGljYXRpb24sIHdoZXRoZXIKKysgKiBrZWVwYWxpdmUsIGRhdGEsIG9yIGhhbmRzaGFrZW0gaXMgc2VudCwgb3IgYWZ0ZXIgb25lIGlzIHJlY2VpdmVkLgorKyAqLworK3ZvaWQgd2dfdGltZXJzX2FueV9hdXRoZW50aWNhdGVkX3BhY2tldF90cmF2ZXJzYWwoc3RydWN0IHdnX3BlZXIgKnBlZXIpCisreworKwlpZiAocGVlci0+cGVyc2lzdGVudF9rZWVwYWxpdmVfaW50ZXJ2YWwpCisrCQltb2RfcGVlcl90aW1lcihwZWVyLCAmcGVlci0+dGltZXJfcGVyc2lzdGVudF9rZWVwYWxpdmUsCisrCQkJamlmZmllcyArIHBlZXItPnBlcnNpc3RlbnRfa2VlcGFsaXZlX2ludGVydmFsICogSFopOworK30KKysKKyt2b2lkIHdnX3RpbWVyc19pbml0KHN0cnVjdCB3Z19wZWVyICpwZWVyKQorK3sKKysJdGltZXJfc2V0dXAoJnBlZXItPnRpbWVyX3JldHJhbnNtaXRfaGFuZHNoYWtlLAorKwkJICAgIHdnX2V4cGlyZWRfcmV0cmFuc21pdF9oYW5kc2hha2UsIDApOworKwl0aW1lcl9zZXR1cCgmcGVlci0+dGltZXJfc2VuZF9rZWVwYWxpdmUsIHdnX2V4cGlyZWRfc2VuZF9rZWVwYWxpdmUsIDApOworKwl0aW1lcl9zZXR1cCgmcGVlci0+dGltZXJfbmV3X2hhbmRzaGFrZSwgd2dfZXhwaXJlZF9uZXdfaGFuZHNoYWtlLCAwKTsKKysJdGltZXJfc2V0dXAoJnBlZXItPnRpbWVyX3plcm9fa2V5X21hdGVyaWFsLAorKwkJICAgIHdnX2V4cGlyZWRfemVyb19rZXlfbWF0ZXJpYWwsIDApOworKwl0aW1lcl9zZXR1cCgmcGVlci0+dGltZXJfcGVyc2lzdGVudF9rZWVwYWxpdmUsCisrCQkgICAgd2dfZXhwaXJlZF9zZW5kX3BlcnNpc3RlbnRfa2VlcGFsaXZlLCAwKTsKKysJSU5JVF9XT1JLKCZwZWVyLT5jbGVhcl9wZWVyX3dvcmssIHdnX3F1ZXVlZF9leHBpcmVkX3plcm9fa2V5X21hdGVyaWFsKTsKKysJcGVlci0+dGltZXJfaGFuZHNoYWtlX2F0dGVtcHRzID0gMDsKKysJcGVlci0+c2VudF9sYXN0bWludXRlX2hhbmRzaGFrZSA9IGZhbHNlOworKwlwZWVyLT50aW1lcl9uZWVkX2Fub3RoZXJfa2VlcGFsaXZlID0gZmFsc2U7CisrfQorKworK3ZvaWQgd2dfdGltZXJzX3N0b3Aoc3RydWN0IHdnX3BlZXIgKnBlZXIpCisreworKwlkZWxfdGltZXJfc3luYygmcGVlci0+dGltZXJfcmV0cmFuc21pdF9oYW5kc2hha2UpOworKwlkZWxfdGltZXJfc3luYygmcGVlci0+dGltZXJfc2VuZF9rZWVwYWxpdmUpOworKwlkZWxfdGltZXJfc3luYygmcGVlci0+dGltZXJfbmV3X2hhbmRzaGFrZSk7CisrCWRlbF90aW1lcl9zeW5jKCZwZWVyLT50aW1lcl96ZXJvX2tleV9tYXRlcmlhbCk7CisrCWRlbF90aW1lcl9zeW5jKCZwZWVyLT50aW1lcl9wZXJzaXN0ZW50X2tlZXBhbGl2ZSk7CisrCWZsdXNoX3dvcmsoJnBlZXItPmNsZWFyX3BlZXJfd29yayk7CisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3RpbWVycy5oCitAQCAtMCwwICsxLDMxIEBACisrLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKysvKgorKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKysgKi8KKysKKysjaWZuZGVmIF9XR19USU1FUlNfSAorKyNkZWZpbmUgX1dHX1RJTUVSU19ICisrCisrI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CisrCisrc3RydWN0IHdnX3BlZXI7CisrCisrdm9pZCB3Z190aW1lcnNfaW5pdChzdHJ1Y3Qgd2dfcGVlciAqcGVlcik7Cisrdm9pZCB3Z190aW1lcnNfc3RvcChzdHJ1Y3Qgd2dfcGVlciAqcGVlcik7Cisrdm9pZCB3Z190aW1lcnNfZGF0YV9zZW50KHN0cnVjdCB3Z19wZWVyICpwZWVyKTsKKyt2b2lkIHdnX3RpbWVyc19kYXRhX3JlY2VpdmVkKHN0cnVjdCB3Z19wZWVyICpwZWVyKTsKKyt2b2lkIHdnX3RpbWVyc19hbnlfYXV0aGVudGljYXRlZF9wYWNrZXRfc2VudChzdHJ1Y3Qgd2dfcGVlciAqcGVlcik7Cisrdm9pZCB3Z190aW1lcnNfYW55X2F1dGhlbnRpY2F0ZWRfcGFja2V0X3JlY2VpdmVkKHN0cnVjdCB3Z19wZWVyICpwZWVyKTsKKyt2b2lkIHdnX3RpbWVyc19oYW5kc2hha2VfaW5pdGlhdGVkKHN0cnVjdCB3Z19wZWVyICpwZWVyKTsKKyt2b2lkIHdnX3RpbWVyc19oYW5kc2hha2VfY29tcGxldGUoc3RydWN0IHdnX3BlZXIgKnBlZXIpOworK3ZvaWQgd2dfdGltZXJzX3Nlc3Npb25fZGVyaXZlZChzdHJ1Y3Qgd2dfcGVlciAqcGVlcik7Cisrdm9pZCB3Z190aW1lcnNfYW55X2F1dGhlbnRpY2F0ZWRfcGFja2V0X3RyYXZlcnNhbChzdHJ1Y3Qgd2dfcGVlciAqcGVlcik7CisrCisrc3RhdGljIGlubGluZSBib29sIHdnX2JpcnRoZGF0ZV9oYXNfZXhwaXJlZCh1NjQgYmlydGhkYXlfbmFub3NlY29uZHMsCisrCQkJCQkgICAgdTY0IGV4cGlyYXRpb25fc2Vjb25kcykKKyt7CisrCXJldHVybiAoczY0KShiaXJ0aGRheV9uYW5vc2Vjb25kcyArIGV4cGlyYXRpb25fc2Vjb25kcyAqIE5TRUNfUEVSX1NFQykKKysJCTw9IChzNjQpa3RpbWVfZ2V0X2NvYXJzZV9ib290dGltZV9ucygpOworK30KKysKKysjZW5kaWYgLyogX1dHX1RJTUVSU19IICovCistLS0gL2Rldi9udWxsCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvdmVyc2lvbi5oCitAQCAtMCwwICsxIEBACisrI2RlZmluZSBXSVJFR1VBUkRfVkVSU0lPTiAiMS4wLjAiCistLS0gL2Rldi9udWxsCisrKysgYi9pbmNsdWRlL3VhcGkvbGludXgvd2lyZWd1YXJkLmgKK0BAIC0wLDAgKzEsMTk2IEBACisrLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wIFdJVEggTGludXgtc3lzY2FsbC1ub3RlKSBPUiBNSVQgKi8KKysvKgorKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKysgKgorKyAqIERvY3VtZW50YXRpb24KKysgKiA9PT09PT09PT09PT09CisrICoKKysgKiBUaGUgYmVsb3cgZW51bXMgYW5kIG1hY3JvcyBhcmUgZm9yIGludGVyZmFjaW5nIHdpdGggV2lyZUd1YXJkLCB1c2luZyBnZW5lcmljCisrICogbmV0bGluaywgd2l0aCBmYW1pbHkgV0dfR0VOTF9OQU1FIGFuZCB2ZXJzaW9uIFdHX0dFTkxfVkVSU0lPTi4gSXQgZGVmaW5lcyB0d28KKysgKiBtZXRob2RzOiBnZXQgYW5kIHNldC4gTm90ZSB0aGF0IHdoaWxlIHRoZXkgc2hhcmUgbWFueSBjb21tb24gYXR0cmlidXRlcywKKysgKiB0aGVzZSB0d28gZnVuY3Rpb25zIGFjdHVhbGx5IGFjY2VwdCBhIHNsaWdodGx5IGRpZmZlcmVudCBzZXQgb2YgaW5wdXRzIGFuZAorKyAqIG91dHB1dHMuCisrICoKKysgKiBXR19DTURfR0VUX0RFVklDRQorKyAqIC0tLS0tLS0tLS0tLS0tLS0tCisrICoKKysgKiBNYXkgb25seSBiZSBjYWxsZWQgdmlhIE5MTV9GX1JFUVVFU1QgfCBOTE1fRl9EVU1QLiBUaGUgY29tbWFuZCBzaG91bGQgY29udGFpbgorKyAqIG9uZSBidXQgbm90IGJvdGggb2Y6CisrICoKKysgKiAgICBXR0RFVklDRV9BX0lGSU5ERVg6IE5MQV9VMzIKKysgKiAgICBXR0RFVklDRV9BX0lGTkFNRTogTkxBX05VTF9TVFJJTkcsIG1heGxlbiBJRk5BTUVTSVogLSAxCisrICoKKysgKiBUaGUga2VybmVsIHdpbGwgdGhlbiByZXR1cm4gc2V2ZXJhbCBtZXNzYWdlcyAoTkxNX0ZfTVVMVEkpIGNvbnRhaW5pbmcgdGhlCisrICogZm9sbG93aW5nIHRyZWUgb2YgbmVzdGVkIGl0ZW1zOgorKyAqCisrICogICAgV0dERVZJQ0VfQV9JRklOREVYOiBOTEFfVTMyCisrICogICAgV0dERVZJQ0VfQV9JRk5BTUU6IE5MQV9OVUxfU1RSSU5HLCBtYXhsZW4gSUZOQU1FU0laIC0gMQorKyAqICAgIFdHREVWSUNFX0FfUFJJVkFURV9LRVk6IE5MQV9FWEFDVF9MRU4sIGxlbiBXR19LRVlfTEVOCisrICogICAgV0dERVZJQ0VfQV9QVUJMSUNfS0VZOiBOTEFfRVhBQ1RfTEVOLCBsZW4gV0dfS0VZX0xFTgorKyAqICAgIFdHREVWSUNFX0FfTElTVEVOX1BPUlQ6IE5MQV9VMTYKKysgKiAgICBXR0RFVklDRV9BX0ZXTUFSSzogTkxBX1UzMgorKyAqICAgIFdHREVWSUNFX0FfUEVFUlM6IE5MQV9ORVNURUQKKysgKiAgICAgICAgMDogTkxBX05FU1RFRAorKyAqICAgICAgICAgICAgV0dQRUVSX0FfUFVCTElDX0tFWTogTkxBX0VYQUNUX0xFTiwgbGVuIFdHX0tFWV9MRU4KKysgKiAgICAgICAgICAgIFdHUEVFUl9BX1BSRVNIQVJFRF9LRVk6IE5MQV9FWEFDVF9MRU4sIGxlbiBXR19LRVlfTEVOCisrICogICAgICAgICAgICBXR1BFRVJfQV9FTkRQT0lOVDogTkxBX01JTl9MRU4oc3RydWN0IHNvY2thZGRyKSwgc3RydWN0IHNvY2thZGRyX2luIG9yIHN0cnVjdCBzb2NrYWRkcl9pbjYKKysgKiAgICAgICAgICAgIFdHUEVFUl9BX1BFUlNJU1RFTlRfS0VFUEFMSVZFX0lOVEVSVkFMOiBOTEFfVTE2CisrICogICAgICAgICAgICBXR1BFRVJfQV9MQVNUX0hBTkRTSEFLRV9USU1FOiBOTEFfRVhBQ1RfTEVOLCBzdHJ1Y3QgX19rZXJuZWxfdGltZXNwZWMKKysgKiAgICAgICAgICAgIFdHUEVFUl9BX1JYX0JZVEVTOiBOTEFfVTY0CisrICogICAgICAgICAgICBXR1BFRVJfQV9UWF9CWVRFUzogTkxBX1U2NAorKyAqICAgICAgICAgICAgV0dQRUVSX0FfQUxMT1dFRElQUzogTkxBX05FU1RFRAorKyAqICAgICAgICAgICAgICAgIDA6IE5MQV9ORVNURUQKKysgKiAgICAgICAgICAgICAgICAgICAgV0dBTExPV0VESVBfQV9GQU1JTFk6IE5MQV9VMTYKKysgKiAgICAgICAgICAgICAgICAgICAgV0dBTExPV0VESVBfQV9JUEFERFI6IE5MQV9NSU5fTEVOKHN0cnVjdCBpbl9hZGRyKSwgc3RydWN0IGluX2FkZHIgb3Igc3RydWN0IGluNl9hZGRyCisrICogICAgICAgICAgICAgICAgICAgIFdHQUxMT1dFRElQX0FfQ0lEUl9NQVNLOiBOTEFfVTgKKysgKiAgICAgICAgICAgICAgICAwOiBOTEFfTkVTVEVECisrICogICAgICAgICAgICAgICAgICAgIC4uLgorKyAqICAgICAgICAgICAgICAgIDA6IE5MQV9ORVNURUQKKysgKiAgICAgICAgICAgICAgICAgICAgLi4uCisrICogICAgICAgICAgICAgICAgLi4uCisrICogICAgICAgICAgICBXR1BFRVJfQV9QUk9UT0NPTF9WRVJTSU9OOiBOTEFfVTMyCisrICogICAgICAgIDA6IE5MQV9ORVNURUQKKysgKiAgICAgICAgICAgIC4uLgorKyAqICAgICAgICAuLi4KKysgKgorKyAqIEl0IGlzIHBvc3NpYmxlIHRoYXQgYWxsIG9mIHRoZSBhbGxvd2VkIElQcyBvZiBhIHNpbmdsZSBwZWVyIHdpbGwgbm90CisrICogZml0IHdpdGhpbiBhIHNpbmdsZSBuZXRsaW5rIG1lc3NhZ2UuIEluIHRoYXQgY2FzZSwgdGhlIHNhbWUgcGVlciB3aWxsCisrICogYmUgd3JpdHRlbiBpbiB0aGUgZm9sbG93aW5nIG1lc3NhZ2UsIGV4Y2VwdCBpdCB3aWxsIG9ubHkgY29udGFpbgorKyAqIFdHUEVFUl9BX1BVQkxJQ19LRVkgYW5kIFdHUEVFUl9BX0FMTE9XRURJUFMuIFRoaXMgbWF5IG9jY3VyIHNldmVyYWwKKysgKiB0aW1lcyBpbiBhIHJvdyBmb3IgdGhlIHNhbWUgcGVlci4gSXQgaXMgdGhlbiB1cCB0byB0aGUgcmVjZWl2ZXIgdG8KKysgKiBjb2FsZXNjZSBhZGphY2VudCBwZWVycy4gTGlrZXdpc2UsIGl0IGlzIHBvc3NpYmxlIHRoYXQgYWxsIHBlZXJzIHdpbGwKKysgKiBub3QgZml0IHdpdGhpbiBhIHNpbmdsZSBtZXNzYWdlLiBTbywgc3Vic2VxdWVudCBwZWVycyB3aWxsIGJlIHNlbnQKKysgKiBpbiBmb2xsb3dpbmcgbWVzc2FnZXMsIGV4Y2VwdCB0aG9zZSB3aWxsIG9ubHkgY29udGFpbiBXR0RFVklDRV9BX0lGTkFNRQorKyAqIGFuZCBXR0RFVklDRV9BX1BFRVJTLiBJdCBpcyB0aGVuIHVwIHRvIHRoZSByZWNlaXZlciB0byBjb2FsZXNjZSB0aGVzZQorKyAqIG1lc3NhZ2VzIHRvIGZvcm0gdGhlIGNvbXBsZXRlIGxpc3Qgb2YgcGVlcnMuCisrICoKKysgKiBTaW5jZSB0aGlzIGlzIGFuIE5MQV9GX0RVTVAgY29tbWFuZCwgdGhlIGZpbmFsIG1lc3NhZ2Ugd2lsbCBhbHdheXMgYmUKKysgKiBOTE1TR19ET05FLCBldmVuIGlmIGFuIGVycm9yIG9jY3Vycy4gSG93ZXZlciwgdGhpcyBOTE1TR19ET05FIG1lc3NhZ2UKKysgKiBjb250YWlucyBhbiBpbnRlZ2VyIGVycm9yIGNvZGUuIEl0IGlzIGVpdGhlciB6ZXJvIG9yIGEgbmVnYXRpdmUgZXJyb3IKKysgKiBjb2RlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGVycm5vLgorKyAqCisrICogV0dfQ01EX1NFVF9ERVZJQ0UKKysgKiAtLS0tLS0tLS0tLS0tLS0tLQorKyAqCisrICogTWF5IG9ubHkgYmUgY2FsbGVkIHZpYSBOTE1fRl9SRVFVRVNULiBUaGUgY29tbWFuZCBzaG91bGQgY29udGFpbiB0aGUKKysgKiBmb2xsb3dpbmcgdHJlZSBvZiBuZXN0ZWQgaXRlbXMsIGNvbnRhaW5pbmcgb25lIGJ1dCBub3QgYm90aCBvZgorKyAqIFdHREVWSUNFX0FfSUZJTkRFWCBhbmQgV0dERVZJQ0VfQV9JRk5BTUU6CisrICoKKysgKiAgICBXR0RFVklDRV9BX0lGSU5ERVg6IE5MQV9VMzIKKysgKiAgICBXR0RFVklDRV9BX0lGTkFNRTogTkxBX05VTF9TVFJJTkcsIG1heGxlbiBJRk5BTUVTSVogLSAxCisrICogICAgV0dERVZJQ0VfQV9GTEFHUzogTkxBX1UzMiwgMCBvciBXR0RFVklDRV9GX1JFUExBQ0VfUEVFUlMgaWYgYWxsIGN1cnJlbnQKKysgKiAgICAgICAgICAgICAgICAgICAgICBwZWVycyBzaG91bGQgYmUgcmVtb3ZlZCBwcmlvciB0byBhZGRpbmcgdGhlIGxpc3QgYmVsb3cuCisrICogICAgV0dERVZJQ0VfQV9QUklWQVRFX0tFWTogbGVuIFdHX0tFWV9MRU4sIGFsbCB6ZXJvcyB0byByZW1vdmUKKysgKiAgICBXR0RFVklDRV9BX0xJU1RFTl9QT1JUOiBOTEFfVTE2LCAwIHRvIGNob29zZSByYW5kb21seQorKyAqICAgIFdHREVWSUNFX0FfRldNQVJLOiBOTEFfVTMyLCAwIHRvIGRpc2FibGUKKysgKiAgICBXR0RFVklDRV9BX1BFRVJTOiBOTEFfTkVTVEVECisrICogICAgICAgIDA6IE5MQV9ORVNURUQKKysgKiAgICAgICAgICAgIFdHUEVFUl9BX1BVQkxJQ19LRVk6IGxlbiBXR19LRVlfTEVOCisrICogICAgICAgICAgICBXR1BFRVJfQV9GTEFHUzogTkxBX1UzMiwgMCBhbmQvb3IgV0dQRUVSX0ZfUkVNT1ZFX01FIGlmIHRoZQorKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBwZWVyIHNob3VsZCBub3QgZXhpc3QgYXQgdGhlIGVuZCBvZiB0aGUKKysgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24sIHJhdGhlciB0aGFuIGFkZGVkL3VwZGF0ZWQgYW5kL29yCisrICogICAgICAgICAgICAgICAgICAgICAgICAgICAgV0dQRUVSX0ZfUkVQTEFDRV9BTExPV0VESVBTIGlmIGFsbCBjdXJyZW50IGFsbG93ZWQKKysgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUHMgb2YgdGhpcyBwZWVyIHNob3VsZCBiZSByZW1vdmVkIHByaW9yIHRvIGFkZGluZworKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsaXN0IGJlbG93IGFuZC9vciBXR1BFRVJfRl9VUERBVEVfT05MWSBpZiB0aGUKKysgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWVyIHNob3VsZCBvbmx5IGJlIHNldCBpZiBpdCBhbHJlYWR5IGV4aXN0cy4KKysgKiAgICAgICAgICAgIFdHUEVFUl9BX1BSRVNIQVJFRF9LRVk6IGxlbiBXR19LRVlfTEVOLCBhbGwgemVyb3MgdG8gcmVtb3ZlCisrICogICAgICAgICAgICBXR1BFRVJfQV9FTkRQT0lOVDogc3RydWN0IHNvY2thZGRyX2luIG9yIHN0cnVjdCBzb2NrYWRkcl9pbjYKKysgKiAgICAgICAgICAgIFdHUEVFUl9BX1BFUlNJU1RFTlRfS0VFUEFMSVZFX0lOVEVSVkFMOiBOTEFfVTE2LCAwIHRvIGRpc2FibGUKKysgKiAgICAgICAgICAgIFdHUEVFUl9BX0FMTE9XRURJUFM6IE5MQV9ORVNURUQKKysgKiAgICAgICAgICAgICAgICAwOiBOTEFfTkVTVEVECisrICogICAgICAgICAgICAgICAgICAgIFdHQUxMT1dFRElQX0FfRkFNSUxZOiBOTEFfVTE2CisrICogICAgICAgICAgICAgICAgICAgIFdHQUxMT1dFRElQX0FfSVBBRERSOiBzdHJ1Y3QgaW5fYWRkciBvciBzdHJ1Y3QgaW42X2FkZHIKKysgKiAgICAgICAgICAgICAgICAgICAgV0dBTExPV0VESVBfQV9DSURSX01BU0s6IE5MQV9VOAorKyAqICAgICAgICAgICAgICAgIDA6IE5MQV9ORVNURUQKKysgKiAgICAgICAgICAgICAgICAgICAgLi4uCisrICogICAgICAgICAgICAgICAgMDogTkxBX05FU1RFRAorKyAqICAgICAgICAgICAgICAgICAgICAuLi4KKysgKiAgICAgICAgICAgICAgICAuLi4KKysgKiAgICAgICAgICAgIFdHUEVFUl9BX1BST1RPQ09MX1ZFUlNJT046IE5MQV9VMzIsIHNob3VsZCBub3QgYmUgc2V0IG9yIHVzZWQgYXQKKysgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbCBieSBtb3N0IHVzZXJzIG9mIHRoaXMgQVBJLCBhcyB0aGUKKysgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vc3QgcmVjZW50IHByb3RvY29sIHdpbGwgYmUgdXNlZCB3aGVuCisrICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGlzIHVuc2V0LiBPdGhlcndpc2UsIG11c3QgYmUgc2V0CisrICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byAxLgorKyAqICAgICAgICAwOiBOTEFfTkVTVEVECisrICogICAgICAgICAgICAuLi4KKysgKiAgICAgICAgLi4uCisrICoKKysgKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBhbW91bnQgb2YgY29uZmlndXJhdGlvbiBkYXRhIGV4Y2VlZHMgdGhhdCBvZgorKyAqIHRoZSBtYXhpbXVtIG1lc3NhZ2UgbGVuZ3RoIGFjY2VwdGVkIGJ5IHRoZSBrZXJuZWwuIEluIHRoYXQgY2FzZSwgc2V2ZXJhbAorKyAqIG1lc3NhZ2VzIHNob3VsZCBiZSBzZW50IG9uZSBhZnRlciBhbm90aGVyLCB3aXRoIGVhY2ggc3VjY2Vzc2l2ZSBvbmUKKysgKiBmaWxsaW5nIGluIGluZm9ybWF0aW9uIG5vdCBjb250YWluZWQgaW4gdGhlIHByaW9yLiBOb3RlIHRoYXQgaWYKKysgKiBXR0RFVklDRV9GX1JFUExBQ0VfUEVFUlMgaXMgc3BlY2lmaWVkIGluIHRoZSBmaXJzdCBtZXNzYWdlLCBpdCBwcm9iYWJseQorKyAqIHNob3VsZCBub3QgYmUgc3BlY2lmaWVkIGluIGZyYWdtZW50cyB0aGF0IGNvbWUgYWZ0ZXIsIHNvIHRoYXQgdGhlIGxpc3QKKysgKiBvZiBwZWVycyBpcyBvbmx5IGNsZWFyZWQgdGhlIGZpcnN0IHRpbWUgYnV0IGFwcGVuZWQgYWZ0ZXIuIExpa2V3aXNlIGZvcgorKyAqIHBlZXJzLCBpZiBXR1BFRVJfRl9SRVBMQUNFX0FMTE9XRURJUFMgaXMgc3BlY2lmaWVkIGluIHRoZSBmaXJzdCBtZXNzYWdlCisrICogb2YgYSBwZWVyLCBpdCBsaWtlbHkgc2hvdWxkIG5vdCBiZSBzcGVjaWZpZWQgaW4gc3Vic2VxdWVudCBmcmFnbWVudHMuCisrICoKKysgKiBJZiBhbiBlcnJvciBvY2N1cnMsIE5MTVNHX0VSUk9SIHdpbGwgcmVwbHkgY29udGFpbmluZyBhbiBlcnJuby4KKysgKi8KKysKKysjaWZuZGVmIF9XR19VQVBJX1dJUkVHVUFSRF9ICisrI2RlZmluZSBfV0dfVUFQSV9XSVJFR1VBUkRfSAorKworKyNkZWZpbmUgV0dfR0VOTF9OQU1FICJ3aXJlZ3VhcmQiCisrI2RlZmluZSBXR19HRU5MX1ZFUlNJT04gMQorKworKyNkZWZpbmUgV0dfS0VZX0xFTiAzMgorKworK2VudW0gd2dfY21kIHsKKysJV0dfQ01EX0dFVF9ERVZJQ0UsCisrCVdHX0NNRF9TRVRfREVWSUNFLAorKwlfX1dHX0NNRF9NQVgKKyt9OworKyNkZWZpbmUgV0dfQ01EX01BWCAoX19XR19DTURfTUFYIC0gMSkKKysKKytlbnVtIHdnZGV2aWNlX2ZsYWcgeworKwlXR0RFVklDRV9GX1JFUExBQ0VfUEVFUlMgPSAxVSA8PCAwLAorKwlfX1dHREVWSUNFX0ZfQUxMID0gV0dERVZJQ0VfRl9SRVBMQUNFX1BFRVJTCisrfTsKKytlbnVtIHdnZGV2aWNlX2F0dHJpYnV0ZSB7CisrCVdHREVWSUNFX0FfVU5TUEVDLAorKwlXR0RFVklDRV9BX0lGSU5ERVgsCisrCVdHREVWSUNFX0FfSUZOQU1FLAorKwlXR0RFVklDRV9BX1BSSVZBVEVfS0VZLAorKwlXR0RFVklDRV9BX1BVQkxJQ19LRVksCisrCVdHREVWSUNFX0FfRkxBR1MsCisrCVdHREVWSUNFX0FfTElTVEVOX1BPUlQsCisrCVdHREVWSUNFX0FfRldNQVJLLAorKwlXR0RFVklDRV9BX1BFRVJTLAorKwlfX1dHREVWSUNFX0FfTEFTVAorK307CisrI2RlZmluZSBXR0RFVklDRV9BX01BWCAoX19XR0RFVklDRV9BX0xBU1QgLSAxKQorKworK2VudW0gd2dwZWVyX2ZsYWcgeworKwlXR1BFRVJfRl9SRU1PVkVfTUUgPSAxVSA8PCAwLAorKwlXR1BFRVJfRl9SRVBMQUNFX0FMTE9XRURJUFMgPSAxVSA8PCAxLAorKwlXR1BFRVJfRl9VUERBVEVfT05MWSA9IDFVIDw8IDIsCisrCV9fV0dQRUVSX0ZfQUxMID0gV0dQRUVSX0ZfUkVNT1ZFX01FIHwgV0dQRUVSX0ZfUkVQTEFDRV9BTExPV0VESVBTIHwKKysJCQkgV0dQRUVSX0ZfVVBEQVRFX09OTFkKKyt9OworK2VudW0gd2dwZWVyX2F0dHJpYnV0ZSB7CisrCVdHUEVFUl9BX1VOU1BFQywKKysJV0dQRUVSX0FfUFVCTElDX0tFWSwKKysJV0dQRUVSX0FfUFJFU0hBUkVEX0tFWSwKKysJV0dQRUVSX0FfRkxBR1MsCisrCVdHUEVFUl9BX0VORFBPSU5ULAorKwlXR1BFRVJfQV9QRVJTSVNURU5UX0tFRVBBTElWRV9JTlRFUlZBTCwKKysJV0dQRUVSX0FfTEFTVF9IQU5EU0hBS0VfVElNRSwKKysJV0dQRUVSX0FfUlhfQllURVMsCisrCVdHUEVFUl9BX1RYX0JZVEVTLAorKwlXR1BFRVJfQV9BTExPV0VESVBTLAorKwlXR1BFRVJfQV9QUk9UT0NPTF9WRVJTSU9OLAorKwlfX1dHUEVFUl9BX0xBU1QKKyt9OworKyNkZWZpbmUgV0dQRUVSX0FfTUFYIChfX1dHUEVFUl9BX0xBU1QgLSAxKQorKworK2VudW0gd2dhbGxvd2VkaXBfYXR0cmlidXRlIHsKKysJV0dBTExPV0VESVBfQV9VTlNQRUMsCisrCVdHQUxMT1dFRElQX0FfRkFNSUxZLAorKwlXR0FMTE9XRURJUF9BX0lQQUREUiwKKysJV0dBTExPV0VESVBfQV9DSURSX01BU0ssCisrCV9fV0dBTExPV0VESVBfQV9MQVNUCisrfTsKKysjZGVmaW5lIFdHQUxMT1dFRElQX0FfTUFYIChfX1dHQUxMT1dFRElQX0FfTEFTVCAtIDEpCisrCisrI2VuZGlmIC8qIF9XR19VQVBJX1dJUkVHVUFSRF9IICovCistLS0gL2Rldi9udWxsCisrKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvbmV0bnMuc2gKK0BAIC0wLDAgKzEsNTM3IEBACisrIyEvYmluL2Jhc2gKKysjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisrIworKyMgQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKyMKKysjIFRoaXMgc2NyaXB0IHRlc3RzIHRoZSBiZWxvdyB0b3BvbG9neToKKysjCisrIyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAgICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAgICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAKKysjIOKUgiAgICRuczEgbmFtZXNwYWNlICAgIOKUgiAgIOKUgiAgICAgICAgICAkbnMwIG5hbWVzcGFjZSAgICAgICAgICDilIIgICDilIIgICAkbnMyIG5hbWVzcGFjZSAgICDilIIKKysjIOKUgiAgICAgICAgICAgICAgICAgICAgIOKUgiAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIgICDilIIgICAgICAgICAgICAgICAgICAgICDilIIKKysjIOKUguKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCAgICAgICAgICAg4pSCICAg4pSCICAgICAgICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQICAgICAgICAgICAg4pSCICAg4pSCICAgICAgICAgICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilJDilIIKKysjIOKUguKUgiAgd2cwICAg4pSC4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSCICAgbG8gICDilILilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIIgIHdnMCAgIOKUguKUggorKyMg4pSC4pSc4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQ4pSCICAg4pSCICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCAgIOKUgiAgIOKUguKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUpOKUggorKyMg4pSC4pSCMTkyLjE2OC4yNDEuMS8yNCAgIOKUguKUgiAgIOKUgiAgICDilIIobnMxKSAgICAgICAgIChuczIpICAgICAg4pSCICAg4pSCICAg4pSC4pSCMTkyLjE2OC4yNDEuMi8yNCAgIOKUguKUggorKyMg4pSC4pSCZmQwMDo6MS8yNCAgICAgICAgIOKUguKUgiAgIOKUgiAgICDilIIxMjcuMC4wLjE6MSAgIDEyNy4wLjAuMToy4pSCICAg4pSCICAg4pSC4pSCZmQwMDo6Mi8yNCAgICAgICAgIOKUguKUggorKyMg4pSC4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSY4pSCICAg4pSCICAgIOKUgls6Ol06MSAgICAgICAgWzo6XToyICAgICDilIIgICDilIIgICDilILilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJjilIIKKysjIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgIOKUgiAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJggICDilIIgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJgKKysjICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYCisrIworKyMgQWZ0ZXIgdGhlIHRvcG9sb2d5IGlzIHByZXBhcmVkIHdlIHJ1biBhIHNlcmllcyBvZiBUQ1AvVURQIGlwZXJmMyB0ZXN0cyBiZXR3ZWVuIHRoZQorKyMgd2lyZWd1YXJkIHBlZXJzIGluICRuczEgYW5kICRuczIuIE5vdGUgdGhhdCAkbnMwIGlzIHRoZSBlbmRwb2ludCBmb3IgdGhlIHdnMAorKyMgaW50ZXJmYWNlcyBpbiAkbnMxIGFuZCAkbnMyLiBTZWUgaHR0cHM6Ly93d3cud2lyZWd1YXJkLmNvbS9uZXRucy8gZm9yIGZ1cnRoZXIKKysjIGRldGFpbHMgb24gaG93IHRoaXMgaXMgYWNjb21wbGlzaGVkLgorK3NldCAtZQorKworK2V4ZWMgMz4mMQorK2V4cG9ydCBXR19ISURFX0tFWVM9bmV2ZXIKKytuZXRuczA9IndnLXRlc3QtJCQtMCIKKytuZXRuczE9IndnLXRlc3QtJCQtMSIKKytuZXRuczI9IndnLXRlc3QtJCQtMiIKKytwcmV0dHkoKSB7IGVjaG8gLWUgIlx4MWJbMzJtXHgxYlsxbVsrXSAkezE6K05TJDE6IH0kezJ9XHgxYlswbSIgPiYzOyB9CisrcHAoKSB7IHByZXR0eSAiIiAiJCoiOyAiJEAiOyB9CisrbWF5YmVfZXhlYygpIHsgaWYgW1sgJEJBU0hQSUQgLWVxICQkIF1dOyB0aGVuICIkQCI7IGVsc2UgZXhlYyAiJEAiOyBmaTsgfQorK24wKCkgeyBwcmV0dHkgMCAiJCoiOyBtYXliZV9leGVjIGlwIG5ldG5zIGV4ZWMgJG5ldG5zMCAiJEAiOyB9CisrbjEoKSB7IHByZXR0eSAxICIkKiI7IG1heWJlX2V4ZWMgaXAgbmV0bnMgZXhlYyAkbmV0bnMxICIkQCI7IH0KKytuMigpIHsgcHJldHR5IDIgIiQqIjsgbWF5YmVfZXhlYyBpcCBuZXRucyBleGVjICRuZXRuczIgIiRAIjsgfQorK2lwMCgpIHsgcHJldHR5IDAgImlwICQqIjsgaXAgLW4gJG5ldG5zMCAiJEAiOyB9CisraXAxKCkgeyBwcmV0dHkgMSAiaXAgJCoiOyBpcCAtbiAkbmV0bnMxICIkQCI7IH0KKytpcDIoKSB7IHByZXR0eSAyICJpcCAkKiI7IGlwIC1uICRuZXRuczIgIiRAIjsgfQorK3NsZWVwKCkgeyByZWFkIC10ICIkMSIgLU4gMCB8fCB0cnVlOyB9Cisrd2FpdGlwZXJmKCkgeyBwcmV0dHkgIiR7MS8vKi19IiAid2FpdCBmb3IgaXBlcmY6NTIwMSI7IHdoaWxlIFtbICQoc3MgLU4gIiQxIiAtdGxwICdzcG9ydCA9IDUyMDEnKSAhPSAqaXBlcmYzKiBdXTsgZG8gc2xlZXAgMC4xOyBkb25lOyB9Cisrd2FpdG5jYXR1ZHAoKSB7IHByZXR0eSAiJHsxLy8qLX0iICJ3YWl0IGZvciB1ZHA6MTExMSI7IHdoaWxlIFtbICQoc3MgLU4gIiQxIiAtdWxwICdzcG9ydCA9IDExMTEnKSAhPSAqbmNhdCogXV07IGRvIHNsZWVwIDAuMTsgZG9uZTsgfQorK3dhaXRuY2F0dGNwKCkgeyBwcmV0dHkgIiR7MS8vKi19IiAid2FpdCBmb3IgdGNwOjExMTEiOyB3aGlsZSBbWyAkKHNzIC1OICIkMSIgLXRscCAnc3BvcnQgPSAxMTExJykgIT0gKm5jYXQqIF1dOyBkbyBzbGVlcCAwLjE7IGRvbmU7IH0KKyt3YWl0aWZhY2UoKSB7IHByZXR0eSAiJHsxLy8qLX0iICJ3YWl0IGZvciAkMiB0byBjb21lIHVwIjsgaXAgbmV0bnMgZXhlYyAiJDEiIGJhc2ggLWMgIndoaWxlIFtbIFwkKDwgXCIvc3lzL2NsYXNzL25ldC8kMi9vcGVyc3RhdGVcIikgIT0gdXAgXV07IGRvIHJlYWQgLXQgLjEgLU4gMCB8fCB0cnVlOyBkb25lOyI7IH0KKysKKytjbGVhbnVwKCkgeworKwlzZXQgK2UKKysJZXhlYyAyPi9kZXYvbnVsbAorKwlwcmludGYgIiRvcmlnX21lc3NhZ2VfY29zdCIgPiAvcHJvYy9zeXMvbmV0L2NvcmUvbWVzc2FnZV9jb3N0CisrCWlwMCBsaW5rIGRlbCBkZXYgd2cwCisrCWlwMSBsaW5rIGRlbCBkZXYgd2cwCisrCWlwMiBsaW5rIGRlbCBkZXYgd2cwCisrCWxvY2FsIHRvX2tpbGw9IiQoaXAgbmV0bnMgcGlkcyAkbmV0bnMwKSAkKGlwIG5ldG5zIHBpZHMgJG5ldG5zMSkgJChpcCBuZXRucyBwaWRzICRuZXRuczIpIgorKwlbWyAtbiAkdG9fa2lsbCBdXSAmJiBraWxsICR0b19raWxsCisrCXBwIGlwIG5ldG5zIGRlbCAkbmV0bnMxCisrCXBwIGlwIG5ldG5zIGRlbCAkbmV0bnMyCisrCXBwIGlwIG5ldG5zIGRlbCAkbmV0bnMwCisrCWV4aXQKKyt9CisrCisrb3JpZ19tZXNzYWdlX2Nvc3Q9IiQoPCAvcHJvYy9zeXMvbmV0L2NvcmUvbWVzc2FnZV9jb3N0KSIKKyt0cmFwIGNsZWFudXAgRVhJVAorK3ByaW50ZiAwID4gL3Byb2Mvc3lzL25ldC9jb3JlL21lc3NhZ2VfY29zdAorKworK2lwIG5ldG5zIGRlbCAkbmV0bnMwIDI+L2Rldi9udWxsIHx8IHRydWUKKytpcCBuZXRucyBkZWwgJG5ldG5zMSAyPi9kZXYvbnVsbCB8fCB0cnVlCisraXAgbmV0bnMgZGVsICRuZXRuczIgMj4vZGV2L251bGwgfHwgdHJ1ZQorK3BwIGlwIG5ldG5zIGFkZCAkbmV0bnMwCisrcHAgaXAgbmV0bnMgYWRkICRuZXRuczEKKytwcCBpcCBuZXRucyBhZGQgJG5ldG5zMgorK2lwMCBsaW5rIHNldCB1cCBkZXYgbG8KKysKKytpcDAgbGluayBhZGQgZGV2IHdnMCB0eXBlIHdpcmVndWFyZAorK2lwMCBsaW5rIHNldCB3ZzAgbmV0bnMgJG5ldG5zMQorK2lwMCBsaW5rIGFkZCBkZXYgd2cwIHR5cGUgd2lyZWd1YXJkCisraXAwIGxpbmsgc2V0IHdnMCBuZXRucyAkbmV0bnMyCisra2V5MT0iJChwcCB3ZyBnZW5rZXkpIgorK2tleTI9IiQocHAgd2cgZ2Vua2V5KSIKKytrZXkzPSIkKHBwIHdnIGdlbmtleSkiCisrcHViMT0iJChwcCB3ZyBwdWJrZXkgPDw8IiRrZXkxIikiCisrcHViMj0iJChwcCB3ZyBwdWJrZXkgPDw8IiRrZXkyIikiCisrcHViMz0iJChwcCB3ZyBwdWJrZXkgPDw8IiRrZXkzIikiCisrcHNrPSIkKHBwIHdnIGdlbnBzaykiCisrW1sgLW4gJGtleTEgJiYgLW4gJGtleTIgJiYgLW4gJHBzayBdXQorKworK2NvbmZpZ3VyZV9wZWVycygpIHsKKysJaXAxIGFkZHIgYWRkIDE5Mi4xNjguMjQxLjEvMjQgZGV2IHdnMAorKwlpcDEgYWRkciBhZGQgZmQwMDo6MS8yNCBkZXYgd2cwCisrCisrCWlwMiBhZGRyIGFkZCAxOTIuMTY4LjI0MS4yLzI0IGRldiB3ZzAKKysJaXAyIGFkZHIgYWRkIGZkMDA6OjIvMjQgZGV2IHdnMAorKworKwluMSB3ZyBzZXQgd2cwIFwKKysJCXByaXZhdGUta2V5IDwoZWNobyAiJGtleTEiKSBcCisrCQlsaXN0ZW4tcG9ydCAxIFwKKysJCXBlZXIgIiRwdWIyIiBcCisrCQkJcHJlc2hhcmVkLWtleSA8KGVjaG8gIiRwc2siKSBcCisrCQkJYWxsb3dlZC1pcHMgMTkyLjE2OC4yNDEuMi8zMixmZDAwOjoyLzEyOAorKwluMiB3ZyBzZXQgd2cwIFwKKysJCXByaXZhdGUta2V5IDwoZWNobyAiJGtleTIiKSBcCisrCQlsaXN0ZW4tcG9ydCAyIFwKKysJCXBlZXIgIiRwdWIxIiBcCisrCQkJcHJlc2hhcmVkLWtleSA8KGVjaG8gIiRwc2siKSBcCisrCQkJYWxsb3dlZC1pcHMgMTkyLjE2OC4yNDEuMS8zMixmZDAwOjoxLzEyOAorKworKwlpcDEgbGluayBzZXQgdXAgZGV2IHdnMAorKwlpcDIgbGluayBzZXQgdXAgZGV2IHdnMAorK30KKytjb25maWd1cmVfcGVlcnMKKysKKyt0ZXN0cygpIHsKKysJIyBQaW5nIG92ZXIgSVB2NAorKwluMiBwaW5nIC1jIDEwIC1mIC1XIDEgMTkyLjE2OC4yNDEuMQorKwluMSBwaW5nIC1jIDEwIC1mIC1XIDEgMTkyLjE2OC4yNDEuMgorKworKwkjIFBpbmcgb3ZlciBJUHY2CisrCW4yIHBpbmc2IC1jIDEwIC1mIC1XIDEgZmQwMDo6MQorKwluMSBwaW5nNiAtYyAxMCAtZiAtVyAxIGZkMDA6OjIKKysKKysJIyBUQ1Agb3ZlciBJUHY0CisrCW4yIGlwZXJmMyAtcyAtMSAtQiAxOTIuMTY4LjI0MS4yICYKKysJd2FpdGlwZXJmICRuZXRuczIKKysJbjEgaXBlcmYzIC1aIC10IDMgLWMgMTkyLjE2OC4yNDEuMgorKworKwkjIFRDUCBvdmVyIElQdjYKKysJbjEgaXBlcmYzIC1zIC0xIC1CIGZkMDA6OjEgJgorKwl3YWl0aXBlcmYgJG5ldG5zMQorKwluMiBpcGVyZjMgLVogLXQgMyAtYyBmZDAwOjoxCisrCisrCSMgVURQIG92ZXIgSVB2NAorKwluMSBpcGVyZjMgLXMgLTEgLUIgMTkyLjE2OC4yNDEuMSAmCisrCXdhaXRpcGVyZiAkbmV0bnMxCisrCW4yIGlwZXJmMyAtWiAtdCAzIC1iIDAgLXUgLWMgMTkyLjE2OC4yNDEuMQorKworKwkjIFVEUCBvdmVyIElQdjYKKysJbjIgaXBlcmYzIC1zIC0xIC1CIGZkMDA6OjIgJgorKwl3YWl0aXBlcmYgJG5ldG5zMgorKwluMSBpcGVyZjMgLVogLXQgMyAtYiAwIC11IC1jIGZkMDA6OjIKKyt9CisrCisrW1sgJChpcDEgbGluayBzaG93IGRldiB3ZzApID1+IG10dVwgKFswLTldKykgXV0gJiYgb3JpZ19tdHU9IiR7QkFTSF9SRU1BVENIWzFdfSIKKytiaWdfbXR1PSQoKCAzNDgxNiAtIDE1MDAgKyAkb3JpZ19tdHUgKSkKKysKKysjIFRlc3QgdXNpbmcgSVB2NCBhcyBvdXRlciB0cmFuc3BvcnQKKytuMSB3ZyBzZXQgd2cwIHBlZXIgIiRwdWIyIiBlbmRwb2ludCAxMjcuMC4wLjE6MgorK24yIHdnIHNldCB3ZzAgcGVlciAiJHB1YjEiIGVuZHBvaW50IDEyNy4wLjAuMToxCisrIyBCZWZvcmUgY2FsbGluZyB0ZXN0cywgd2UgZmlyc3QgbWFrZSBzdXJlIHRoYXQgdGhlIHN0YXRzIGNvdW50ZXJzIGFuZCB0aW1lc3RhbXBlciBhcmUgd29ya2luZworK24yIHBpbmcgLWMgMTAgLWYgLVcgMSAxOTIuMTY4LjI0MS4xCisreyByZWFkIF87IHJlYWQgXzsgcmVhZCBfOyByZWFkIHJ4X2J5dGVzIF87IHJlYWQgXzsgcmVhZCB0eF9ieXRlcyBfOyB9IDwgPChpcDIgLXN0YXRzIGxpbmsgc2hvdyBkZXYgd2cwKQorKygoIHJ4X2J5dGVzID09IDEzNzIgJiYgKHR4X2J5dGVzID09IDE0MjggfHwgdHhfYnl0ZXMgPT0gMTQ2MCkgKSkKKyt7IHJlYWQgXzsgcmVhZCBfOyByZWFkIF87IHJlYWQgcnhfYnl0ZXMgXzsgcmVhZCBfOyByZWFkIHR4X2J5dGVzIF87IH0gPCA8KGlwMSAtc3RhdHMgbGluayBzaG93IGRldiB3ZzApCisrKCggdHhfYnl0ZXMgPT0gMTM3MiAmJiAocnhfYnl0ZXMgPT0gMTQyOCB8fCByeF9ieXRlcyA9PSAxNDYwKSApKQorK3JlYWQgXyByeF9ieXRlcyB0eF9ieXRlcyA8IDwobjIgd2cgc2hvdyB3ZzAgdHJhbnNmZXIpCisrKCggcnhfYnl0ZXMgPT0gMTM3MiAmJiAodHhfYnl0ZXMgPT0gMTQyOCB8fCB0eF9ieXRlcyA9PSAxNDYwKSApKQorK3JlYWQgXyByeF9ieXRlcyB0eF9ieXRlcyA8IDwobjEgd2cgc2hvdyB3ZzAgdHJhbnNmZXIpCisrKCggdHhfYnl0ZXMgPT0gMTM3MiAmJiAocnhfYnl0ZXMgPT0gMTQyOCB8fCByeF9ieXRlcyA9PSAxNDYwKSApKQorK3JlYWQgXyB0aW1lc3RhbXAgPCA8KG4xIHdnIHNob3cgd2cwIGxhdGVzdC1oYW5kc2hha2VzKQorKygoIHRpbWVzdGFtcCAhPSAwICkpCisrCisrdGVzdHMKKytpcDEgbGluayBzZXQgd2cwIG10dSAkYmlnX210dQorK2lwMiBsaW5rIHNldCB3ZzAgbXR1ICRiaWdfbXR1CisrdGVzdHMKKysKKytpcDEgbGluayBzZXQgd2cwIG10dSAkb3JpZ19tdHUKKytpcDIgbGluayBzZXQgd2cwIG10dSAkb3JpZ19tdHUKKysKKysjIFRlc3QgdXNpbmcgSVB2NiBhcyBvdXRlciB0cmFuc3BvcnQKKytuMSB3ZyBzZXQgd2cwIHBlZXIgIiRwdWIyIiBlbmRwb2ludCBbOjoxXToyCisrbjIgd2cgc2V0IHdnMCBwZWVyICIkcHViMSIgZW5kcG9pbnQgWzo6MV06MQorK3Rlc3RzCisraXAxIGxpbmsgc2V0IHdnMCBtdHUgJGJpZ19tdHUKKytpcDIgbGluayBzZXQgd2cwIG10dSAkYmlnX210dQorK3Rlc3RzCisrCisrIyBUZXN0IHRoYXQgcm91dGUgTVRVcyB3b3JrIHdpdGggdGhlIHBhZGRpbmcKKytpcDEgbGluayBzZXQgd2cwIG10dSAxMzAwCisraXAyIGxpbmsgc2V0IHdnMCBtdHUgMTMwMAorK24xIHdnIHNldCB3ZzAgcGVlciAiJHB1YjIiIGVuZHBvaW50IDEyNy4wLjAuMToyCisrbjIgd2cgc2V0IHdnMCBwZWVyICIkcHViMSIgZW5kcG9pbnQgMTI3LjAuMC4xOjEKKytuMCBpcHRhYmxlcyAtQSBJTlBVVCAtbSBsZW5ndGggLS1sZW5ndGggMTM2MCAtaiBEUk9QCisrbjEgaXAgcm91dGUgYWRkIDE5Mi4xNjguMjQxLjIvMzIgZGV2IHdnMCBtdHUgMTI5OQorK24yIGlwIHJvdXRlIGFkZCAxOTIuMTY4LjI0MS4xLzMyIGRldiB3ZzAgbXR1IDEyOTkKKytuMiBwaW5nIC1jIDEgLVcgMSAtcyAxMjY5IDE5Mi4xNjguMjQxLjEKKytuMiBpcCByb3V0ZSBkZWxldGUgMTkyLjE2OC4yNDEuMS8zMiBkZXYgd2cwIG10dSAxMjk5CisrbjEgaXAgcm91dGUgZGVsZXRlIDE5Mi4xNjguMjQxLjIvMzIgZGV2IHdnMCBtdHUgMTI5OQorK24wIGlwdGFibGVzIC1GIElOUFVUCisrCisraXAxIGxpbmsgc2V0IHdnMCBtdHUgJG9yaWdfbXR1CisraXAyIGxpbmsgc2V0IHdnMCBtdHUgJG9yaWdfbXR1CisrCisrIyBUZXN0IHVzaW5nIElQdjQgdGhhdCByb2FtaW5nIHdvcmtzCisraXAwIC00IGFkZHIgZGVsIDEyNy4wLjAuMS84IGRldiBsbworK2lwMCAtNCBhZGRyIGFkZCAxMjcuMjEyLjEyMS45OS84IGRldiBsbworK24xIHdnIHNldCB3ZzAgbGlzdGVuLXBvcnQgOTk5OQorK24xIHdnIHNldCB3ZzAgcGVlciAiJHB1YjIiIGVuZHBvaW50IDEyNy4wLjAuMToyCisrbjEgcGluZzYgLVcgMSAtYyAxIGZkMDA6OjIKKytbWyAkKG4yIHdnIHNob3cgd2cwIGVuZHBvaW50cykgPT0gIiRwdWIxCTEyNy4yMTIuMTIxLjk5Ojk5OTkiIF1dCisrCisrIyBUZXN0IHVzaW5nIElQdjYgdGhhdCByb2FtaW5nIHdvcmtzCisrbjEgd2cgc2V0IHdnMCBsaXN0ZW4tcG9ydCA5OTk4CisrbjEgd2cgc2V0IHdnMCBwZWVyICIkcHViMiIgZW5kcG9pbnQgWzo6MV06MgorK24xIHBpbmcgLVcgMSAtYyAxIDE5Mi4xNjguMjQxLjIKKytbWyAkKG4yIHdnIHNob3cgd2cwIGVuZHBvaW50cykgPT0gIiRwdWIxCVs6OjFdOjk5OTgiIF1dCisrCisrIyBUZXN0IHRoYXQgY3J5cHRvLVJQIGZpbHRlciB3b3JrcworK24xIHdnIHNldCB3ZzAgcGVlciAiJHB1YjIiIGFsbG93ZWQtaXBzIDE5Mi4xNjguMjQxLjAvMjQKKytleGVjIDQ8IDwobjEgbmNhdCAtbCAtdSAtcCAxMTExKQorK25jYXRfcGlkPSQhCisrd2FpdG5jYXR1ZHAgJG5ldG5zMQorK24yIG5jYXQgLXUgMTkyLjE2OC4yNDEuMSAxMTExIDw8PCJYIgorK3JlYWQgLXIgLU4gMSAtdCAxIG91dCA8JjQgJiYgW1sgJG91dCA9PSAiWCIgXV0KKytraWxsICRuY2F0X3BpZAorK21vcmVfc3BlY2lmaWNfa2V5PSIkKHBwIHdnIGdlbmtleSB8IHBwIHdnIHB1YmtleSkiCisrbjEgd2cgc2V0IHdnMCBwZWVyICIkbW9yZV9zcGVjaWZpY19rZXkiIGFsbG93ZWQtaXBzIDE5Mi4xNjguMjQxLjIvMzIKKytuMiB3ZyBzZXQgd2cwIGxpc3Rlbi1wb3J0IDk5OTcKKytleGVjIDQ8IDwobjEgbmNhdCAtbCAtdSAtcCAxMTExKQorK25jYXRfcGlkPSQhCisrd2FpdG5jYXR1ZHAgJG5ldG5zMQorK24yIG5jYXQgLXUgMTkyLjE2OC4yNDEuMSAxMTExIDw8PCJYIgorKyEgcmVhZCAtciAtTiAxIC10IDEgb3V0IDwmNCB8fCBmYWxzZQorK2tpbGwgJG5jYXRfcGlkCisrbjEgd2cgc2V0IHdnMCBwZWVyICIkbW9yZV9zcGVjaWZpY19rZXkiIHJlbW92ZQorK1tbICQobjEgd2cgc2hvdyB3ZzAgZW5kcG9pbnRzKSA9PSAiJHB1YjIJWzo6MV06OTk5NyIgXV0KKysKKysjIFRlc3QgdGhhdCB3ZSBjYW4gY2hhbmdlIHByaXZhdGUga2V5cyBrZXlzIGFuZCBpbW1lZGlhdGVseSBoYW5kc2hha2UKKytuMSB3ZyBzZXQgd2cwIHByaXZhdGUta2V5IDwoZWNobyAiJGtleTEiKSBwZWVyICIkcHViMiIgcHJlc2hhcmVkLWtleSA8KGVjaG8gIiRwc2siKSBhbGxvd2VkLWlwcyAxOTIuMTY4LjI0MS4yLzMyIGVuZHBvaW50IDEyNy4wLjAuMToyCisrbjIgd2cgc2V0IHdnMCBwcml2YXRlLWtleSA8KGVjaG8gIiRrZXkyIikgbGlzdGVuLXBvcnQgMiBwZWVyICIkcHViMSIgcHJlc2hhcmVkLWtleSA8KGVjaG8gIiRwc2siKSBhbGxvd2VkLWlwcyAxOTIuMTY4LjI0MS4xLzMyCisrbjEgcGluZyAtVyAxIC1jIDEgMTkyLjE2OC4yNDEuMgorK24xIHdnIHNldCB3ZzAgcHJpdmF0ZS1rZXkgPChlY2hvICIka2V5MyIpCisrbjIgd2cgc2V0IHdnMCBwZWVyICIkcHViMyIgcHJlc2hhcmVkLWtleSA8KGVjaG8gIiRwc2siKSBhbGxvd2VkLWlwcyAxOTIuMTY4LjI0MS4xLzMyIHBlZXIgIiRwdWIxIiByZW1vdmUKKytuMSBwaW5nIC1XIDEgLWMgMSAxOTIuMTY4LjI0MS4yCisrCisraXAxIGxpbmsgZGVsIHdnMAorK2lwMiBsaW5rIGRlbCB3ZzAKKysKKysjIFRlc3QgdXNpbmcgTkFULiBXZSBub3cgY2hhbmdlIHRoZSB0b3BvbG9neSB0byB0aGlzOgorKyMg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQCisrIyDilIIgICAgICAgICAgICAgJG5zMSBuYW1lc3BhY2UgICAgICAgICAgICAg4pSCICAgIOKUgiAgICAgICAgICAgICAgICAgJG5zMCBuYW1lc3BhY2UgICAgICAgICAgICAgICAgIOKUgiAgICAg4pSCICAgICAgICAgICAgICRuczIgbmFtZXNwYWNlICAgICAgICAgICAgIOKUggorKyMg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiAgICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIgICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIKKysjIOKUgiAg4pSM4pSA4pSA4pSA4pSA4pSA4pSQICAgICAgICAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUkCAgICAgICAgICAg4pSCICAgIOKUgiAgICDilIzilIDilIDilIDilIDilIDilIDilJAgICAgICAgICAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUkCAgICAgICAgICAgICAg4pSCICAgICDilIIgIOKUjOKUgOKUgOKUgOKUgOKUgOKUkCAgICAgICAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUkCAgICAgICAgICAgIOKUggorKyMg4pSCICDilIIgd2cwIOKUguKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgnZldGhj4pSC4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSCdmV0aHJj4pSCICAgICAgICAgICAgICDilIJ2ZXRocnPilILilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIJ2ZXRoc+KUguKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgiB3ZzAg4pSCICAgICAgICAgICAg4pSCCisrIyDilIIgIOKUnOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCAg4pSc4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQ4pSCICAgIOKUgiAgICDilJzilIDilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAgICAg4pSc4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQIOKUgiAgICAg4pSCICDilJzilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAg4pSc4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQIOKUggorKyMg4pSCICDilIIxOTIuMTY4LjI0MS4xLzI04pSCICDilIIxOTIuMTY4LjEuMTAwLzI04pSC4pSCICAgIOKUgiAgICDilIIxOTIuMTY4LjEuMS8yNCAg4pSCICAgIOKUgjEwLjAuMC4xLzI0ICAgICAgICDilIIg4pSCICAgICDilIIgIOKUgjEwLjAuMC4xMDAvMjQgICDilIIg4pSCMTkyLjE2OC4yNDEuMi8yNOKUgiDilIIKKysjIOKUgiAg4pSCZmQwMDo6MS8yNCAgICAgIOKUgiAg4pSCICAgICAgICAgICAgICAgIOKUguKUgiAgICDilIIgICAg4pSCICAgICAgICAgICAgICAgIOKUgiAgICDilIJTTkFUOjE5Mi4xNjguMS4wLzI04pSCIOKUgiAgICAg4pSCICDilIIgICAgICAgICAgICAgICAg4pSCIOKUgmZkMDA6OjIvMjQgICAgICDilIIg4pSCCisrIyDilIIgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSY4pSCICAgIOKUgiAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJggICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYIOKUgiAgICAg4pSCICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJgg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYIOKUggorKyMg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYCisrCisraXAxIGxpbmsgYWRkIGRldiB3ZzAgdHlwZSB3aXJlZ3VhcmQKKytpcDIgbGluayBhZGQgZGV2IHdnMCB0eXBlIHdpcmVndWFyZAorK2NvbmZpZ3VyZV9wZWVycworKworK2lwMCBsaW5rIGFkZCB2ZXRocmMgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2ZXRoYworK2lwMCBsaW5rIGFkZCB2ZXRocnMgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2ZXRocworK2lwMCBsaW5rIHNldCB2ZXRoYyBuZXRucyAkbmV0bnMxCisraXAwIGxpbmsgc2V0IHZldGhzIG5ldG5zICRuZXRuczIKKytpcDAgbGluayBzZXQgdmV0aHJjIHVwCisraXAwIGxpbmsgc2V0IHZldGhycyB1cAorK2lwMCBhZGRyIGFkZCAxOTIuMTY4LjEuMS8yNCBkZXYgdmV0aHJjCisraXAwIGFkZHIgYWRkIDEwLjAuMC4xLzI0IGRldiB2ZXRocnMKKytpcDEgYWRkciBhZGQgMTkyLjE2OC4xLjEwMC8yNCBkZXYgdmV0aGMKKytpcDEgbGluayBzZXQgdmV0aGMgdXAKKytpcDEgcm91dGUgYWRkIGRlZmF1bHQgdmlhIDE5Mi4xNjguMS4xCisraXAyIGFkZHIgYWRkIDEwLjAuMC4xMDAvMjQgZGV2IHZldGhzCisraXAyIGxpbmsgc2V0IHZldGhzIHVwCisrd2FpdGlmYWNlICRuZXRuczAgdmV0aHJjCisrd2FpdGlmYWNlICRuZXRuczAgdmV0aHJzCisrd2FpdGlmYWNlICRuZXRuczEgdmV0aGMKKyt3YWl0aWZhY2UgJG5ldG5zMiB2ZXRocworKworK24wIGJhc2ggLWMgJ3ByaW50ZiAxID4gL3Byb2Mvc3lzL25ldC9pcHY0L2lwX2ZvcndhcmQnCisrbjAgYmFzaCAtYyAncHJpbnRmIDIgPiAvcHJvYy9zeXMvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdWRwX3RpbWVvdXQnCisrbjAgYmFzaCAtYyAncHJpbnRmIDIgPiAvcHJvYy9zeXMvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdWRwX3RpbWVvdXRfc3RyZWFtJworK24wIGlwdGFibGVzIC10IG5hdCAtQSBQT1NUUk9VVElORyAtcyAxOTIuMTY4LjEuMC8yNCAtZCAxMC4wLjAuMC8yNCAtaiBTTkFUIC0tdG8gMTAuMC4wLjEKKysKKytuMSB3ZyBzZXQgd2cwIHBlZXIgIiRwdWIyIiBlbmRwb2ludCAxMC4wLjAuMTAwOjIgcGVyc2lzdGVudC1rZWVwYWxpdmUgMQorK24xIHBpbmcgLVcgMSAtYyAxIDE5Mi4xNjguMjQxLjIKKytuMiBwaW5nIC1XIDEgLWMgMSAxOTIuMTY4LjI0MS4xCisrW1sgJChuMiB3ZyBzaG93IHdnMCBlbmRwb2ludHMpID09ICIkcHViMQkxMC4wLjAuMToxIiBdXQorKyMgRGVtb25zdHJhdGUgbjIgY2FuIHN0aWxsIHNlbmQgcGFja2V0cyB0byBuMSwgc2luY2UgcGVyc2lzdGVudC1rZWVwYWxpdmUgd2lsbCBwcmV2ZW50IGNvbm5lY3Rpb24gdHJhY2tpbmcgZW50cnkgZnJvbSBleHBpcmluZyAodG8gc2VlIGVudHJpZXM6IGBuMCBjb25udHJhY2sgLUxgKS4KKytwcCBzbGVlcCAzCisrbjIgcGluZyAtVyAxIC1jIDEgMTkyLjE2OC4yNDEuMQorK24xIHdnIHNldCB3ZzAgcGVlciAiJHB1YjIiIHBlcnNpc3RlbnQta2VlcGFsaXZlIDAKKysKKysjIERvIGEgd2ctcXVpY2soOCktc3R5bGUgcG9saWN5IHJvdXRpbmcgZm9yIHRoZSBkZWZhdWx0IHJvdXRlLCBtYWtpbmcgc3VyZSB2ZXRoYyBoYXMgYSB2NiBhZGRyZXNzIHRvIHRlYXNlIG91dCBidWdzLgorK2lwMSAtNiBhZGRyIGFkZCBmYzAwOjo5Lzk2IGRldiB2ZXRoYworK2lwMSAtNiByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgZmMwMDo6MQorK2lwMiAtNCBhZGRyIGFkZCAxOTIuMTY4Ljk5LjcvMzIgZGV2IHdnMAorK2lwMiAtNiBhZGRyIGFkZCBhYmFiOjoxMTExLzEyOCBkZXYgd2cwCisrbjEgd2cgc2V0IHdnMCBmd21hcmsgNTE4MjAgcGVlciAiJHB1YjIiIGFsbG93ZWQtaXBzIDE5Mi4xNjguOTkuNyxhYmFiOjoxMTExCisraXAxIC02IHJvdXRlIGFkZCBkZWZhdWx0IGRldiB3ZzAgdGFibGUgNTE4MjAKKytpcDEgLTYgcnVsZSBhZGQgbm90IGZ3bWFyayA1MTgyMCB0YWJsZSA1MTgyMAorK2lwMSAtNiBydWxlIGFkZCB0YWJsZSBtYWluIHN1cHByZXNzX3ByZWZpeGxlbmd0aCAwCisraXAxIC00IHJvdXRlIGFkZCBkZWZhdWx0IGRldiB3ZzAgdGFibGUgNTE4MjAKKytpcDEgLTQgcnVsZSBhZGQgbm90IGZ3bWFyayA1MTgyMCB0YWJsZSA1MTgyMAorK2lwMSAtNCBydWxlIGFkZCB0YWJsZSBtYWluIHN1cHByZXNzX3ByZWZpeGxlbmd0aCAwCisrIyBzdXBwcmVzc19wcmVmaXhsZW5ndGggb25seSBnb3QgYWRkZWQgaW4gMy4xMiwgYW5kIHdlIHdhbnQgdG8gc3VwcG9ydCAzLjEwKy4KKytpZiBbWyAkKGlwMSAtNCBydWxlIHNob3cgYWxsKSA9PSAqc3VwcHJlc3NfcHJlZml4bGVuZ3RoKiBdXTsgdGhlbgorKwkjIEZsb29kIHRoZSBwaW5ncyBpbnN0ZWFkIG9mIHNlbmRpbmcganVzdCBvbmUsIHRvIHRyaWdnZXIgcm91dGluZyB0YWJsZSByZWZlcmVuY2UgY291bnRpbmcgYnVncy4KKysJbjEgcGluZyAtVyAxIC1jIDEwMCAtZiAxOTIuMTY4Ljk5LjcKKysJbjEgcGluZyAtVyAxIC1jIDEwMCAtZiBhYmFiOjoxMTExCisrZmkKKysKKytuMCBpcHRhYmxlcyAtdCBuYXQgLUYKKytpcDAgbGluayBkZWwgdmV0aHJjCisraXAwIGxpbmsgZGVsIHZldGhycworK2lwMSBsaW5rIGRlbCB3ZzAKKytpcDIgbGluayBkZWwgd2cwCisrCisrIyBUZXN0IHRoYXQgc2FkZHIgcm91dGluZyBpcyBzdGlja3kgYnV0IG5vdCB0b28gc3RpY2t5LCBjaGFuZ2luZyB0byB0aGlzIHRvcG9sb2d5OgorKyMg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkAorKyMg4pSCICAgICAgICAgICAgICRuczEgbmFtZXNwYWNlICAgICAgICAgICAgIOKUgiAgICDilIIgICAgICAgICAgICAgJG5zMiBuYW1lc3BhY2UgICAgICAgICAgICAg4pSCCisrIyDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIKKysjIOKUgiAg4pSM4pSA4pSA4pSA4pSA4pSA4pSQICAgICAgICAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUkCAgICAgICAgICAg4pSCICAgIOKUgiAg4pSM4pSA4pSA4pSA4pSA4pSA4pSQICAgICAgICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSQICAgICAgICAgICAg4pSCCisrIyDilIIgIOKUgiB3ZzAg4pSC4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSCdmV0aDHilILilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilLzilIDilIDilIJ2ZXRoMuKUguKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgiB3ZzAg4pSCICAgICAgICAgICAg4pSCCisrIyDilIIgIOKUnOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCAg4pSc4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQ4pSCICAgIOKUgiAg4pSc4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQIOKUnOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCDilIIKKysjIOKUgiAg4pSCMTkyLjE2OC4yNDEuMS8yNOKUgiAg4pSCMTAuMC4wLjEvMjQgICAgIOKUguKUgiAgICDilIIgIOKUgjEwLjAuMC4yLzI0ICAgICDilIIg4pSCMTkyLjE2OC4yNDEuMi8yNOKUgiDilIIKKysjIOKUgiAg4pSCZmQwMDo6MS8yNCAgICAgIOKUgiAg4pSCZmQwMDphYTo6MS85NiAgIOKUguKUgiAgICDilIIgIOKUgmZkMDA6YWE6OjIvOTYgICDilIIg4pSCZmQwMDo6Mi8yNCAgICAgIOKUgiDilIIKKysjIOKUgiAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJjilIIgICAg4pSCICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJgg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYIOKUggorKyMg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmAorKworK2lwMSBsaW5rIGFkZCBkZXYgd2cwIHR5cGUgd2lyZWd1YXJkCisraXAyIGxpbmsgYWRkIGRldiB3ZzAgdHlwZSB3aXJlZ3VhcmQKKytjb25maWd1cmVfcGVlcnMKKytpcDEgbGluayBhZGQgdmV0aDEgdHlwZSB2ZXRoIHBlZXIgbmFtZSB2ZXRoMgorK2lwMSBsaW5rIHNldCB2ZXRoMiBuZXRucyAkbmV0bnMyCisrbjEgYmFzaCAtYyAncHJpbnRmIDAgPiAvcHJvYy9zeXMvbmV0L2lwdjYvY29uZi9hbGwvYWNjZXB0X2RhZCcKKytuMiBiYXNoIC1jICdwcmludGYgMCA+IC9wcm9jL3N5cy9uZXQvaXB2Ni9jb25mL2FsbC9hY2NlcHRfZGFkJworK24xIGJhc2ggLWMgJ3ByaW50ZiAwID4gL3Byb2Mvc3lzL25ldC9pcHY2L2NvbmYvdmV0aDEvYWNjZXB0X2RhZCcKKytuMiBiYXNoIC1jICdwcmludGYgMCA+IC9wcm9jL3N5cy9uZXQvaXB2Ni9jb25mL3ZldGgyL2FjY2VwdF9kYWQnCisrbjEgYmFzaCAtYyAncHJpbnRmIDEgPiAvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi92ZXRoMS9wcm9tb3RlX3NlY29uZGFyaWVzJworKworKyMgRmlyc3Qgd2UgY2hlY2sgdGhhdCB3ZSBhcmVuJ3Qgb3Zlcmx5IHN0aWNreSBhbmQgY2FuIGZhbGwgb3ZlciB0byBuZXcgSVBzIHdoZW4gb2xkIG9uZXMgYXJlIHJlbW92ZWQKKytpcDEgYWRkciBhZGQgMTAuMC4wLjEvMjQgZGV2IHZldGgxCisraXAxIGFkZHIgYWRkIGZkMDA6YWE6OjEvOTYgZGV2IHZldGgxCisraXAyIGFkZHIgYWRkIDEwLjAuMC4yLzI0IGRldiB2ZXRoMgorK2lwMiBhZGRyIGFkZCBmZDAwOmFhOjoyLzk2IGRldiB2ZXRoMgorK2lwMSBsaW5rIHNldCB2ZXRoMSB1cAorK2lwMiBsaW5rIHNldCB2ZXRoMiB1cAorK3dhaXRpZmFjZSAkbmV0bnMxIHZldGgxCisrd2FpdGlmYWNlICRuZXRuczIgdmV0aDIKKytuMSB3ZyBzZXQgd2cwIHBlZXIgIiRwdWIyIiBlbmRwb2ludCAxMC4wLjAuMjoyCisrbjEgcGluZyAtVyAxIC1jIDEgMTkyLjE2OC4yNDEuMgorK2lwMSBhZGRyIGFkZCAxMC4wLjAuMTAvMjQgZGV2IHZldGgxCisraXAxIGFkZHIgZGVsIDEwLjAuMC4xLzI0IGRldiB2ZXRoMQorK24xIHBpbmcgLVcgMSAtYyAxIDE5Mi4xNjguMjQxLjIKKytuMSB3ZyBzZXQgd2cwIHBlZXIgIiRwdWIyIiBlbmRwb2ludCBbZmQwMDphYTo6Ml06MgorK24xIHBpbmcgLVcgMSAtYyAxIDE5Mi4xNjguMjQxLjIKKytpcDEgYWRkciBhZGQgZmQwMDphYTo6MTAvOTYgZGV2IHZldGgxCisraXAxIGFkZHIgZGVsIGZkMDA6YWE6OjEvOTYgZGV2IHZldGgxCisrbjEgcGluZyAtVyAxIC1jIDEgMTkyLjE2OC4yNDEuMgorKworKyMgTm93IHdlIHNob3cgdGhhdCB3ZSBjYW4gc3VjY2Vzc2Z1bGx5IGRvIHJlcGx5IHRvIHNlbmRlciByb3V0aW5nCisraXAxIGxpbmsgc2V0IHZldGgxIGRvd24KKytpcDIgbGluayBzZXQgdmV0aDIgZG93bgorK2lwMSBhZGRyIGZsdXNoIGRldiB2ZXRoMQorK2lwMiBhZGRyIGZsdXNoIGRldiB2ZXRoMgorK2lwMSBhZGRyIGFkZCAxMC4wLjAuMS8yNCBkZXYgdmV0aDEKKytpcDEgYWRkciBhZGQgMTAuMC4wLjIvMjQgZGV2IHZldGgxCisraXAxIGFkZHIgYWRkIGZkMDA6YWE6OjEvOTYgZGV2IHZldGgxCisraXAxIGFkZHIgYWRkIGZkMDA6YWE6OjIvOTYgZGV2IHZldGgxCisraXAyIGFkZHIgYWRkIDEwLjAuMC4zLzI0IGRldiB2ZXRoMgorK2lwMiBhZGRyIGFkZCBmZDAwOmFhOjozLzk2IGRldiB2ZXRoMgorK2lwMSBsaW5rIHNldCB2ZXRoMSB1cAorK2lwMiBsaW5rIHNldCB2ZXRoMiB1cAorK3dhaXRpZmFjZSAkbmV0bnMxIHZldGgxCisrd2FpdGlmYWNlICRuZXRuczIgdmV0aDIKKytuMiB3ZyBzZXQgd2cwIHBlZXIgIiRwdWIxIiBlbmRwb2ludCAxMC4wLjAuMToxCisrbjIgcGluZyAtVyAxIC1jIDEgMTkyLjE2OC4yNDEuMQorK1tbICQobjIgd2cgc2hvdyB3ZzAgZW5kcG9pbnRzKSA9PSAiJHB1YjEJMTAuMC4wLjE6MSIgXV0KKytuMiB3ZyBzZXQgd2cwIHBlZXIgIiRwdWIxIiBlbmRwb2ludCBbZmQwMDphYTo6MV06MQorK24yIHBpbmcgLVcgMSAtYyAxIDE5Mi4xNjguMjQxLjEKKytbWyAkKG4yIHdnIHNob3cgd2cwIGVuZHBvaW50cykgPT0gIiRwdWIxCVtmZDAwOmFhOjoxXToxIiBdXQorK24yIHdnIHNldCB3ZzAgcGVlciAiJHB1YjEiIGVuZHBvaW50IDEwLjAuMC4yOjEKKytuMiBwaW5nIC1XIDEgLWMgMSAxOTIuMTY4LjI0MS4xCisrW1sgJChuMiB3ZyBzaG93IHdnMCBlbmRwb2ludHMpID09ICIkcHViMQkxMC4wLjAuMjoxIiBdXQorK24yIHdnIHNldCB3ZzAgcGVlciAiJHB1YjEiIGVuZHBvaW50IFtmZDAwOmFhOjoyXToxCisrbjIgcGluZyAtVyAxIC1jIDEgMTkyLjE2OC4yNDEuMQorK1tbICQobjIgd2cgc2hvdyB3ZzAgZW5kcG9pbnRzKSA9PSAiJHB1YjEJW2ZkMDA6YWE6OjJdOjEiIF1dCisrCisrIyBXaGF0IGhhcHBlbnMgaWYgdGhlIGluYm91bmQgZGVzdGluYXRpb24gYWRkcmVzcyBiZWxvbmdzIHRvIGEgZGlmZmVyZW50IGludGVyZmFjZSBhcyB0aGUgZGVmYXVsdCByb3V0ZT8KKytpcDEgbGluayBhZGQgZHVtbXkwIHR5cGUgZHVtbXkKKytpcDEgYWRkciBhZGQgMTAuNTAuMC4xLzI0IGRldiBkdW1teTAKKytpcDEgbGluayBzZXQgZHVtbXkwIHVwCisraXAyIHJvdXRlIGFkZCAxMC41MC4wLjAvMjQgZGV2IHZldGgyCisrbjIgd2cgc2V0IHdnMCBwZWVyICIkcHViMSIgZW5kcG9pbnQgMTAuNTAuMC4xOjEKKytuMiBwaW5nIC1XIDEgLWMgMSAxOTIuMTY4LjI0MS4xCisrW1sgJChuMiB3ZyBzaG93IHdnMCBlbmRwb2ludHMpID09ICIkcHViMQkxMC41MC4wLjE6MSIgXV0KKysKKytpcDEgbGluayBkZWwgZHVtbXkwCisraXAxIGFkZHIgZmx1c2ggZGV2IHZldGgxCisraXAyIGFkZHIgZmx1c2ggZGV2IHZldGgyCisraXAxIHJvdXRlIGZsdXNoIGRldiB2ZXRoMQorK2lwMiByb3V0ZSBmbHVzaCBkZXYgdmV0aDIKKysKKysjIE5vdyB3ZSBzZWUgd2hhdCBoYXBwZW5zIGlmIGFub3RoZXIgaW50ZXJmYWNlIHJvdXRlIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBhbiBvbmdvaW5nIG9uZQorK2lwMSBsaW5rIGFkZCB2ZXRoMyB0eXBlIHZldGggcGVlciBuYW1lIHZldGg0CisraXAxIGxpbmsgc2V0IHZldGg0IG5ldG5zICRuZXRuczIKKytpcDEgYWRkciBhZGQgMTAuMC4wLjEvMjQgZGV2IHZldGgxCisraXAyIGFkZHIgYWRkIDEwLjAuMC4yLzI0IGRldiB2ZXRoMgorK2lwMSBhZGRyIGFkZCAxMC4wLjAuMy8yNCBkZXYgdmV0aDMKKytpcDEgbGluayBzZXQgdmV0aDEgdXAKKytpcDIgbGluayBzZXQgdmV0aDIgdXAKKytpcDEgbGluayBzZXQgdmV0aDMgdXAKKytpcDIgbGluayBzZXQgdmV0aDQgdXAKKyt3YWl0aWZhY2UgJG5ldG5zMSB2ZXRoMQorK3dhaXRpZmFjZSAkbmV0bnMyIHZldGgyCisrd2FpdGlmYWNlICRuZXRuczEgdmV0aDMKKyt3YWl0aWZhY2UgJG5ldG5zMiB2ZXRoNAorK2lwMSByb3V0ZSBmbHVzaCBkZXYgdmV0aDEKKytpcDEgcm91dGUgZmx1c2ggZGV2IHZldGgzCisraXAxIHJvdXRlIGFkZCAxMC4wLjAuMC8yNCBkZXYgdmV0aDEgc3JjIDEwLjAuMC4xIG1ldHJpYyAyCisrbjEgd2cgc2V0IHdnMCBwZWVyICIkcHViMiIgZW5kcG9pbnQgMTAuMC4wLjI6MgorK24xIHBpbmcgLVcgMSAtYyAxIDE5Mi4xNjguMjQxLjIKKytbWyAkKG4yIHdnIHNob3cgd2cwIGVuZHBvaW50cykgPT0gIiRwdWIxCTEwLjAuMC4xOjEiIF1dCisraXAxIHJvdXRlIGFkZCAxMC4wLjAuMC8yNCBkZXYgdmV0aDMgc3JjIDEwLjAuMC4zIG1ldHJpYyAxCisrbjEgYmFzaCAtYyAncHJpbnRmIDAgPiAvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi92ZXRoMS9ycF9maWx0ZXInCisrbjIgYmFzaCAtYyAncHJpbnRmIDAgPiAvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi92ZXRoNC9ycF9maWx0ZXInCisrbjEgYmFzaCAtYyAncHJpbnRmIDAgPiAvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi9hbGwvcnBfZmlsdGVyJworK24yIGJhc2ggLWMgJ3ByaW50ZiAwID4gL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvYWxsL3JwX2ZpbHRlcicKKytuMSBwaW5nIC1XIDEgLWMgMSAxOTIuMTY4LjI0MS4yCisrW1sgJChuMiB3ZyBzaG93IHdnMCBlbmRwb2ludHMpID09ICIkcHViMQkxMC4wLjAuMzoxIiBdXQorKworK2lwMSBsaW5rIGRlbCB2ZXRoMQorK2lwMSBsaW5rIGRlbCB2ZXRoMworK2lwMSBsaW5rIGRlbCB3ZzAKKytpcDIgbGluayBkZWwgd2cwCisrCisrIyBXZSB0ZXN0IHRoYXQgTmV0bGluay9JUEMgaXMgd29ya2luZyBwcm9wZXJseSBieSBkb2luZyB0aGluZ3MgdGhhdCB1c3VhbGx5IGNhdXNlIHNwbGl0IHJlc3BvbnNlcworK2lwMCBsaW5rIGFkZCBkZXYgd2cwIHR5cGUgd2lyZWd1YXJkCisrY29uZmlnPSggIltJbnRlcmZhY2VdIiAiUHJpdmF0ZUtleT0kKHdnIGdlbmtleSkiICJbUGVlcl0iICJQdWJsaWNLZXk9JCh3ZyBnZW5rZXkpIiApCisrZm9yIGEgaW4gezEuLjI1NX07IGRvCisrCWZvciBiIGluIHswLi4yNTV9OyBkbworKwkJY29uZmlnKz0oICJBbGxvd2VkSVBzPSRhLiRiLjAuMC8xNiwkYTo6JGIvMTI4IiApCisrCWRvbmUKKytkb25lCisrbjAgd2cgc2V0Y29uZiB3ZzAgPChwcmludGYgJyVzXG4nICIke2NvbmZpZ1tAXX0iKQorK2k9MAorK2ZvciBpcCBpbiAkKG4wIHdnIHNob3cgd2cwIGFsbG93ZWQtaXBzKTsgZG8KKysJKCgrK2kpKQorK2RvbmUKKysoKGkgPT0gMjU1KjI1NioyKzEpKQorK2lwMCBsaW5rIGRlbCB3ZzAKKytpcDAgbGluayBhZGQgZGV2IHdnMCB0eXBlIHdpcmVndWFyZAorK2NvbmZpZz0oICJbSW50ZXJmYWNlXSIgIlByaXZhdGVLZXk9JCh3ZyBnZW5rZXkpIiApCisrZm9yIGEgaW4gezEuLjQwfTsgZG8KKysJY29uZmlnKz0oICJbUGVlcl0iICJQdWJsaWNLZXk9JCh3ZyBnZW5rZXkpIiApCisrCWZvciBiIGluIHsxLi41Mn07IGRvCisrCQljb25maWcrPSggIkFsbG93ZWRJUHM9JGEuJGIuMC4wLzE2IiApCisrCWRvbmUKKytkb25lCisrbjAgd2cgc2V0Y29uZiB3ZzAgPChwcmludGYgJyVzXG4nICIke2NvbmZpZ1tAXX0iKQorK2k9MAorK3doaWxlIHJlYWQgLXIgbGluZTsgZG8KKysJaj0wCisrCWZvciBpcCBpbiAkbGluZTsgZG8KKysJCSgoKytqKSkKKysJZG9uZQorKwkoKGogPT0gNTMpKQorKwkoKCsraSkpCisrZG9uZSA8IDwobjAgd2cgc2hvdyB3ZzAgYWxsb3dlZC1pcHMpCisrKChpID09IDQwKSkKKytpcDAgbGluayBkZWwgd2cwCisraXAwIGxpbmsgYWRkIHdnMCB0eXBlIHdpcmVndWFyZAorK2NvbmZpZz0oICkKKytmb3IgaSBpbiB7MS4uMjl9OyBkbworKwljb25maWcrPSggIltQZWVyXSIgIlB1YmxpY0tleT0kKHdnIGdlbmtleSkiICkKKytkb25lCisrY29uZmlnKz0oICJbUGVlcl0iICJQdWJsaWNLZXk9JCh3ZyBnZW5rZXkpIiAiQWxsb3dlZElQcz0yNTUuMi4zLjQvMzIsYWJjZDo6MjU1LzEyOCIgKQorK24wIHdnIHNldGNvbmYgd2cwIDwocHJpbnRmICclc1xuJyAiJHtjb25maWdbQF19IikKKytuMCB3ZyBzaG93Y29uZiB3ZzAgPiAvZGV2L251bGwKKytpcDAgbGluayBkZWwgd2cwCisrCisrYWxsb3dlZGlwcz0oICkKKytmb3IgaSBpbiB7MS4uMTk3fTsgZG8KKysgICAgICAgIGFsbG93ZWRpcHMrPSggYWJjZDo6JGkgKQorK2RvbmUKKytzYXZlZF9pZnM9IiRJRlMiCisrSUZTPSwKKythbGxvd2VkaXBzPSIke2FsbG93ZWRpcHNbKl19IgorK0lGUz0iJHNhdmVkX2lmcyIKKytpcDAgbGluayBhZGQgd2cwIHR5cGUgd2lyZWd1YXJkCisrbjAgd2cgc2V0IHdnMCBwZWVyICIkcHViMSIKKytuMCB3ZyBzZXQgd2cwIHBlZXIgIiRwdWIyIiBhbGxvd2VkLWlwcyAiJGFsbG93ZWRpcHMiCisreworKwlyZWFkIC1yIHB1YiBhbGxvd2VkaXBzCisrCVtbICRwdWIgPT0gIiRwdWIxIiAmJiAkYWxsb3dlZGlwcyA9PSAiKG5vbmUpIiBdXQorKwlyZWFkIC1yIHB1YiBhbGxvd2VkaXBzCisrCVtbICRwdWIgPT0gIiRwdWIyIiBdXQorKwlpPTAKKysJZm9yIF8gaW4gJGFsbG93ZWRpcHM7IGRvCisrCQkoKCsraSkpCisrCWRvbmUKKysJKChpID09IDE5NykpCisrfSA8IDwobjAgd2cgc2hvdyB3ZzAgYWxsb3dlZC1pcHMpCisraXAwIGxpbmsgZGVsIHdnMAorKworKyEgbjAgd2cgc2hvdyBkb2Vzbm90ZXhpc3QgfHwgZmFsc2UKKysKKytpcDAgbGluayBhZGQgd2cwIHR5cGUgd2lyZWd1YXJkCisrbjAgd2cgc2V0IHdnMCBwcml2YXRlLWtleSA8KGVjaG8gIiRrZXkxIikgcGVlciAiJHB1YjIiIHByZXNoYXJlZC1rZXkgPChlY2hvICIkcHNrIikKKytbWyAkKG4wIHdnIHNob3cgd2cwIHByaXZhdGUta2V5KSA9PSAiJGtleTEiIF1dCisrW1sgJChuMCB3ZyBzaG93IHdnMCBwcmVzaGFyZWQta2V5cykgPT0gIiRwdWIyCSRwc2siIF1dCisrbjAgd2cgc2V0IHdnMCBwcml2YXRlLWtleSAvZGV2L251bGwgcGVlciAiJHB1YjIiIHByZXNoYXJlZC1rZXkgL2Rldi9udWxsCisrW1sgJChuMCB3ZyBzaG93IHdnMCBwcml2YXRlLWtleSkgPT0gIihub25lKSIgXV0KKytbWyAkKG4wIHdnIHNob3cgd2cwIHByZXNoYXJlZC1rZXlzKSA9PSAiJHB1YjIJKG5vbmUpIiBdXQorK24wIHdnIHNldCB3ZzAgcGVlciAiJHB1YjIiCisrbjAgd2cgc2V0IHdnMCBwcml2YXRlLWtleSA8KGVjaG8gIiRrZXkyIikKKytbWyAkKG4wIHdnIHNob3cgd2cwIHB1YmxpYy1rZXkpID09ICIkcHViMiIgXV0KKytbWyAteiAkKG4wIHdnIHNob3cgd2cwIHBlZXJzKSBdXQorK24wIHdnIHNldCB3ZzAgcGVlciAiJHB1YjIiCisrW1sgLXogJChuMCB3ZyBzaG93IHdnMCBwZWVycykgXV0KKytuMCB3ZyBzZXQgd2cwIHByaXZhdGUta2V5IDwoZWNobyAiJGtleTEiKQorK24wIHdnIHNldCB3ZzAgcGVlciAiJHB1YjIiCisrW1sgJChuMCB3ZyBzaG93IHdnMCBwZWVycykgPT0gIiRwdWIyIiBdXQorK24wIHdnIHNldCB3ZzAgcHJpdmF0ZS1rZXkgPChlY2hvICIvJHtrZXkxOjF9IikKKytbWyAkKG4wIHdnIHNob3cgd2cwIHByaXZhdGUta2V5KSA9PSAiKyR7a2V5MToxfSIgXV0KKytuMCB3ZyBzZXQgd2cwIHBlZXIgIiRwdWIyIiBhbGxvd2VkLWlwcyAwLjAuMC4wLzAsMTAuMC4wLjAvOCwxMDAuMC4wLjAvMTAsMTcyLjE2LjAuMC8xMiwxOTIuMTY4LjAuMC8xNgorK24wIHdnIHNldCB3ZzAgcGVlciAiJHB1YjIiIGFsbG93ZWQtaXBzIDAuMC4wLjAvMAorK24wIHdnIHNldCB3ZzAgcGVlciAiJHB1YjIiIGFsbG93ZWQtaXBzIDo6LzAsMTcwMDo6LzExMSw1MDAwOjovNCxlMDAwOjovMzcsOTAwMDo6Lzc1CisrbjAgd2cgc2V0IHdnMCBwZWVyICIkcHViMiIgYWxsb3dlZC1pcHMgOjovMAorK2lwMCBsaW5rIGRlbCB3ZzAKKysKKytkZWNsYXJlIC1BIG9iamVjdHMKKyt3aGlsZSByZWFkIC10IDAuMSAtciBsaW5lIDI+L2Rldi9udWxsIHx8IFtbICQ/IC1uZSAxNDIgXV07IGRvCisrCVtbICRsaW5lID1+IC4qKHdnWzAtOV0rOlwgW0EtWl1bYS16XStcIFswLTldKylcIC4qKGNyZWF0ZWR8ZGVzdHJveWVkKS4qIF1dIHx8IGNvbnRpbnVlCisrCW9iamVjdHNbIiR7QkFTSF9SRU1BVENIWzFdfSJdKz0iJHtCQVNIX1JFTUFUQ0hbMl19IgorK2RvbmUgPCAvZGV2L2ttc2cKKythbGxkZWxldGVkPTEKKytmb3Igb2JqZWN0IGluICIkeyFvYmplY3RzW0BdfSI7IGRvCisrCWlmIFtbICR7b2JqZWN0c1siJG9iamVjdCJdfSAhPSAqY3JlYXRlZGRlc3Ryb3llZCBdXTsgdGhlbgorKwkJZWNobyAiRXJyb3I6ICRvYmplY3Q6IG1lcmVseSAke29iamVjdHNbIiRvYmplY3QiXX0iID4mMworKwkJYWxsZGVsZXRlZD0wCisrCWZpCisrZG9uZQorK1tbICRhbGxkZWxldGVkIC1lcSAxIF1dCisrcHJldHR5ICIiICJPYmplY3RzIHRoYXQgd2VyZSBjcmVhdGVkIHdlcmUgYWxzbyBkZXN0cm95ZWQuIgpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA3My13aXJlZ3VhcmQtc2VsZnRlc3RzLWltcG9ydC1oYXJuZXNzLW1ha2VmaWxlLWZvci10ZXN0LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA3My13aXJlZ3VhcmQtc2VsZnRlc3RzLWltcG9ydC1oYXJuZXNzLW1ha2VmaWxlLWZvci10ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMzg1M2EKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDczLXdpcmVndWFyZC1zZWxmdGVzdHMtaW1wb3J0LWhhcm5lc3MtbWFrZWZpbGUtZm9yLXRlc3QucGF0Y2gKQEAgLTAsMCArMSwxMDc4IEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogU3VuLCAxNSBEZWMgMjAxOSAyMjowODowMCArMDEwMAorU3ViamVjdDogW1BBVENIXSB3aXJlZ3VhcmQ6IHNlbGZ0ZXN0czogaW1wb3J0IGhhcm5lc3MgbWFrZWZpbGUgZm9yIHRlc3Qgc3VpdGUKKworY29tbWl0IDY1ZDg4ZDA0MTE0YmNhN2Q4NWZhZWJkNWZlZDYxMDY5Y2IyYjYzMmMgdXBzdHJlYW0uCisKK1dpcmVHdWFyZCBoYXMgYmVlbiB1c2luZyB0aGlzIG9uIGJ1aWxkLndpcmVndWFyZC5jb20gZm9yIHRoZSBsYXN0CitzZXZlcmFsIHllYXJzIHdpdGggY29uc2lkZXJhYmxlIHN1Y2Nlc3MuIEl0IGFsbG93cyBmb3IgdmVyeSBxdWljayBhbmQKK2l0ZXJhdGl2ZSBkZXZlbG9wbWVudCBjeWNsZXMsIGFuZCBzdXBwb3J0cyBzZXZlcmFsIHBsYXRmb3Jtcy4KKworVG8gcnVuIHRoZSB0ZXN0IHN1aXRlIG9uIHlvdXIgY3VycmVudCBwbGF0Zm9ybSBpbiBRRU1VOgorCisgICQgbWFrZSAtQyB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvcWVtdSAtaiQobnByb2MpCisKK1RvIHJ1biBpdCB3aXRoIEtBU0FOIGFuZCBzdWNoIHR1cm5lZCBvbjoKKworICAkIERFQlVHX0tFUk5FTD15ZXMgbWFrZSAtQyB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvcWVtdSAtaiQobnByb2MpCisKK1RvIHJ1biBpdCBlbXVsYXRlZCBmb3IgYW5vdGhlciBwbGF0Zm9ybSBpbiBRRU1VOgorCisgICQgQVJDSD1hcm0gbWFrZSAtQyB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvcWVtdSAtaiQobnByb2MpCisKK0F0IHRoZSBtb21lbnQsIHdlIHN1cHBvcnQgYWFyY2g2NF9iZSwgYWFyY2g2NCwgYXJtLCBhcm1lYiwgaTY4NiwgbTY4aywKK21pcHM2NCwgbWlwczY0ZWwsIG1pcHMsIG1pcHNlbCwgcG93ZXJwYzY0bGUsIHBvd2VycGMsIGFuZCB4ODZfNjQuCisKK1RoZSBzeXN0ZW0gc3VwcG9ydHMgaW5jcmVtZW50YWwgcmVidWlsZGluZywgc28gaXQgc2hvdWxkIGJlIHZlcnkgZmFzdCB0bworY2hhbmdlIGEgc2luZ2xlIGZpbGUgYW5kIHRoZW4gdGVzdCBpdCBvdXQgYW5kIGhhdmUgaW1tZWRpYXRlIGZlZWRiYWNrLgorCitUaGlzIHJlcXVpcmVzIGZvciB0aGUgcmlnaHQgdG9vbGNoYWluIGFuZCBxZW11IHRvIGJlIGluc3RhbGxlZCBwcmlvci4KK0kndmUgaGFkIHN1Y2Nlc3Mgd2l0aCB0aG9zZSBmcm9tIG11c2wuY2MuCisKK1RoaXMgaXMgdGFpbG9yZWQgZm9yIFdpcmVHdWFyZCBhdCB0aGUgbW9tZW50LCB0aG91Z2ggbGF0ZXIgcHJvamVjdHMKK21pZ2h0IGdlbmVyYWxpemUgaXQgZm9yIG90aGVyIG5ldHdvcmsgdGVzdGluZy4KKworU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CitTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIC4uLi9zZWxmdGVzdHMvd2lyZWd1YXJkL3FlbXUvLmdpdGlnbm9yZSAgICAgICB8ICAgMiArCisgLi4uL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9xZW11L01ha2VmaWxlIHwgMzg1ICsrKysrKysrKysrKysrKysrKworIC4uLi93aXJlZ3VhcmQvcWVtdS9hcmNoL2FhcmNoNjQuY29uZmlnICAgICAgICB8ICAgNSArCisgLi4uL3dpcmVndWFyZC9xZW11L2FyY2gvYWFyY2g2NF9iZS5jb25maWcgICAgIHwgICA2ICsKKyAuLi4vc2VsZnRlc3RzL3dpcmVndWFyZC9xZW11L2FyY2gvYXJtLmNvbmZpZyAgfCAgIDkgKworIC4uLi93aXJlZ3VhcmQvcWVtdS9hcmNoL2FybWViLmNvbmZpZyAgICAgICAgICB8ICAxMCArCisgLi4uL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvcWVtdS9hcmNoL2k2ODYuY29uZmlnIHwgICA1ICsKKyAuLi4vc2VsZnRlc3RzL3dpcmVndWFyZC9xZW11L2FyY2gvbTY4ay5jb25maWcgfCAgIDkgKworIC4uLi9zZWxmdGVzdHMvd2lyZWd1YXJkL3FlbXUvYXJjaC9taXBzLmNvbmZpZyB8ICAxMSArCisgLi4uL3dpcmVndWFyZC9xZW11L2FyY2gvbWlwczY0LmNvbmZpZyAgICAgICAgIHwgIDE0ICsKKyAuLi4vd2lyZWd1YXJkL3FlbXUvYXJjaC9taXBzNjRlbC5jb25maWcgICAgICAgfCAgMTUgKworIC4uLi93aXJlZ3VhcmQvcWVtdS9hcmNoL21pcHNlbC5jb25maWcgICAgICAgICB8ICAxMiArCisgLi4uL3dpcmVndWFyZC9xZW11L2FyY2gvcG93ZXJwYy5jb25maWcgICAgICAgIHwgIDEwICsKKyAuLi4vd2lyZWd1YXJkL3FlbXUvYXJjaC9wb3dlcnBjNjRsZS5jb25maWcgICAgfCAgMTIgKworIC4uLi93aXJlZ3VhcmQvcWVtdS9hcmNoL3g4Nl82NC5jb25maWcgICAgICAgICB8ICAgNSArCisgLi4uL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvcWVtdS9kZWJ1Zy5jb25maWcgICAgIHwgIDY3ICsrKworIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9xZW11L2luaXQuYyB8IDI4NCArKysrKysrKysrKysrCisgLi4uL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvcWVtdS9rZXJuZWwuY29uZmlnICAgIHwgIDg2ICsrKysKKyAxOCBmaWxlcyBjaGFuZ2VkLCA5NDcgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvcWVtdS8uZ2l0aWdub3JlCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9xZW11L01ha2VmaWxlCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9xZW11L2FyY2gvYWFyY2g2NC5jb25maWcKKyBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL3FlbXUvYXJjaC9hYXJjaDY0X2JlLmNvbmZpZworIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvcWVtdS9hcmNoL2FybS5jb25maWcKKyBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL3FlbXUvYXJjaC9hcm1lYi5jb25maWcKKyBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL3FlbXUvYXJjaC9pNjg2LmNvbmZpZworIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvcWVtdS9hcmNoL202OGsuY29uZmlnCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9xZW11L2FyY2gvbWlwcy5jb25maWcKKyBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL3FlbXUvYXJjaC9taXBzNjQuY29uZmlnCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9xZW11L2FyY2gvbWlwczY0ZWwuY29uZmlnCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9xZW11L2FyY2gvbWlwc2VsLmNvbmZpZworIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvcWVtdS9hcmNoL3Bvd2VycGMuY29uZmlnCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9xZW11L2FyY2gvcG93ZXJwYzY0bGUuY29uZmlnCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9xZW11L2FyY2gveDg2XzY0LmNvbmZpZworIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvcWVtdS9kZWJ1Zy5jb25maWcKKyBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL3FlbXUvaW5pdC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9xZW11L2tlcm5lbC5jb25maWcKKworLS0tIC9kZXYvbnVsbAorKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL3FlbXUvLmdpdGlnbm9yZQorQEAgLTAsMCArMSwyIEBACisrYnVpbGQvCisrZGlzdGZpbGVzLworLS0tIC9kZXYvbnVsbAorKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL3FlbXUvTWFrZWZpbGUKK0BAIC0wLDAgKzEsMzg1IEBACisrIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorKyMKKysjIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKysKKytQV0QgOj0gJChzaGVsbCBwd2QpCisrCisrQ0hPU1QgOj0gJChzaGVsbCBnY2MgLWR1bXBtYWNoaW5lKQorK2lmbmVxICgsJChBUkNIKSkKKytDQlVJTEQgOj0gJChzdWJzdCAtZ2NjLCwkKGxhc3R3b3JkICQoc3Vic3QgLywgLCQoZmlyc3R3b3JkICQod2lsZGNhcmQgJChmb3JlYWNoIGJpbmRpciwkKHN1YnN0IDosICwkKFBBVEgpKSwkKGJpbmRpcikvJChBUkNIKS0qLWdjYykpKSkpKQorK2lmZXEgKCwkKENCVUlMRCkpCisrJChlcnJvciBUaGUgdG9vbGNoYWluIGZvciAkKEFSQ0gpIGlzIG5vdCBpbnN0YWxsZWQpCisrZW5kaWYKKytlbHNlCisrQ0JVSUxEIDo9ICQoQ0hPU1QpCisrQVJDSCA6PSAkKGZpcnN0d29yZCAkKHN1YnN0IC0sICwkKENCVUlMRCkpKQorK2VuZGlmCisrCisrIyBTZXQgdGhlc2UgZnJvbSB0aGUgZW52aXJvbm1lbnQgdG8gb3ZlcnJpZGUKKytLRVJORUxfUEFUSCA/PSAkKFBXRCkvLi4vLi4vLi4vLi4vLi4KKytCVUlMRF9QQVRIID89ICQoUFdEKS9idWlsZC8kKEFSQ0gpCisrRElTVEZJTEVTX1BBVEggPz0gJChQV0QpL2Rpc3RmaWxlcworK05SX0NQVVMgPz0gNAorKworK01JUlJPUiA6PSBodHRwczovL2Rvd25sb2FkLndpcmVndWFyZC5jb20vcWVtdS10ZXN0L2Rpc3RmaWxlcy8KKysKKytkZWZhdWx0OiBxZW11CisrCisrIyB2YXJpYWJsZSBuYW1lLCB0YXJiYWxsIHByb2plY3QgbmFtZSwgdmVyc2lvbiwgdGFyYmFsbCBleHRlbnNpb24sIGRlZmF1bHQgVVJJIGJhc2UKKytkZWZpbmUgdGFyX2Rvd25sb2FkID0KKyskKDEpX1ZFUlNJT04gOj0gJCgzKQorKyQoMSlfTkFNRSA6PSAkKDIpLSQkKCQoMSlfVkVSU0lPTikKKyskKDEpX1RBUiA6PSAkKERJU1RGSUxFU19QQVRIKS8kJCgkKDEpX05BTUUpJCg0KQorKyQoMSlfUEFUSCA6PSAkKEJVSUxEX1BBVEgpLyQkKCQoMSlfTkFNRSkKKyskKGNhbGwgZmlsZV9kb3dubG9hZCwkJCgkKDEpX05BTUUpJCg0KSwkKDUpLCQoNikpCisrZW5kZWYKKysKKytkZWZpbmUgZmlsZV9kb3dubG9hZCA9CisrJChESVNURklMRVNfUEFUSCkvJCgxKToKKysJbWtkaXIgLXAgJChESVNURklMRVNfUEFUSCkKKysJZmxvY2sgLXggJCRALmxvY2sgLWMgJ1sgLWYgJCRAIF0gJiYgZXhpdCAwOyB3Z2V0IC1PICQkQC50bXAgJChNSVJST1IpJCgxKSB8fCB3Z2V0IC10IGluZiAtLXJldHJ5LW9uLWh0dHAtZXJyb3I9NDA0IC1PICQkQC50bXAgJCgyKSQoMSkgfHwgcm0gLWYgJCRALnRtcCcKKysJaWYgZWNobyAiJCgzKSAgJCRALnRtcCIgfCBzaGEyNTZzdW0gLWMgLTsgdGhlbiBtdiAkJEAudG1wICQkQDsgZWxzZSBybSAtZiAkJEAudG1wOyBleGl0IDcxOyBmaQorK2VuZGVmCisrCisrJChldmFsICQoY2FsbCB0YXJfZG93bmxvYWQsTVVTTCxtdXNsLDEuMS4yMCwudGFyLmd6LGh0dHBzOi8vd3d3Lm11c2wtbGliYy5vcmcvcmVsZWFzZXMvLDQ0YmU4NzcxZDBlNmM2YjVmODJkZDE1NjYyZWIyOTU3YzlhMzE3M2ExOWE4YjQ5OTY2YWMwNTQyYmJkNDBkNjEpKQorKyQoZXZhbCAkKGNhbGwgdGFyX2Rvd25sb2FkLExJQk1OTCxsaWJtbmwsMS4wLjQsLnRhci5iejIsaHR0cHM6Ly93d3cubmV0ZmlsdGVyLm9yZy9wcm9qZWN0cy9saWJtbmwvZmlsZXMvLDE3MWY4OTY5OWYyODZhNTg1NGI3MmI5MWQwNmU4ZjhlMzY4MzA2NGM1OTAxZmIwOWQ5NTRhOWFiNmY1NTFmODEpKQorKyQoZXZhbCAkKGNhbGwgdGFyX2Rvd25sb2FkLElQRVJGLGlwZXJmLDMuMS43LC50YXIuZ3osaHR0cDovL2Rvd25sb2Fkcy5lcy5uZXQvcHViL2lwZXJmLyxhNGVmNzM0MDZmZTkyMjUwNjAyYjhkYTJhZTg5ZWM1MzIxMWY4MDVkZjk3YTFkMWQ2MjlkYjVhMTQwNDM3MzRmKSkKKyskKGV2YWwgJChjYWxsIHRhcl9kb3dubG9hZCxCQVNILGJhc2gsNS4wLC50YXIuZ3osaHR0cHM6Ly9mdHAuZ251Lm9yZy9nbnUvYmFzaC8sYjRhODBmMmFjNjYxNzBiMjkxM2VmYmZiOWYyNTk0ZjFmNzZjN2IxYWZkMTFmNzk5ZTIyMDM1ZDYzMDc3ZmI0ZCkpCisrJChldmFsICQoY2FsbCB0YXJfZG93bmxvYWQsSVBST1VURTIsaXByb3V0ZTIsNS4xLjAsLnRhci5neixodHRwczovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy9uZXQvaXByb3V0ZTIvLDliNDM3MDdkNjA3NWVjZGNhMTQ4MDNjYThjZTBjODU1Mzg0OGM0OWZhMTU4NmQxMmZkNTA4ZDY2NTc3MjQzZjIpKQorKyQoZXZhbCAkKGNhbGwgdGFyX2Rvd25sb2FkLElQVEFCTEVTLGlwdGFibGVzLDEuNi4xLC50YXIuYnoyLGh0dHBzOi8vd3d3Lm5ldGZpbHRlci5vcmcvcHJvamVjdHMvaXB0YWJsZXMvZmlsZXMvLDBmYzJkN2JkNWQ3YmUxMTMxMTcyNjQ2Njc4OWQ0YzY1ZmI0YzhlMDk2YzkxODJiNTZjZTk3NDQwODY0ZjBjZjUpKQorKyQoZXZhbCAkKGNhbGwgdGFyX2Rvd25sb2FkLE5NQVAsbm1hcCw3LjYwLC50YXIuYnoyLGh0dHBzOi8vbm1hcC5vcmcvZGlzdC8sYTg3OTZlY2M0ZmE2YzM4YWFkNjEzOWQ5NTE1ZGM4MTEzMDIzYTgyZTlkNzg3ZTVhNWZiNWZhMWIwNTUxNmYyMSkpCisrJChldmFsICQoY2FsbCB0YXJfZG93bmxvYWQsSVBVVElMUyxpcHV0aWxzLHMyMDE2MTEwNSwudGFyLmd6LGh0dHBzOi8vZ2l0aHViLmNvbS9pcHV0aWxzL2lwdXRpbHMvYXJjaGl2ZS9zMjAxNjExMDUudGFyLmd6LyMsZjgxMzA5MmYwM2QxNzI5NGZkMjM1NDRiMTI5Yjk1Y2RiODdmZTE5Zjc5NzBhNTE5MDhhNmI4ODUwOWFjYWQ4YSkpCisrJChldmFsICQoY2FsbCB0YXJfZG93bmxvYWQsV0lSRUdVQVJEX1RPT0xTLFdpcmVHdWFyZCwwLjAuMjAxOTEyMTIsLnRhci54eixodHRwczovL2dpdC56eDJjNC5jb20vV2lyZUd1YXJkL3NuYXBzaG90LyxiMGQ3MTgzODBmN2E4ODIyYjJmMTJkNzVlNDYyZmE0ZWFmYTNhNzc4NzEwMDI5ODFmMzY3Y2Q0ZmUyYTFiMDcxKSkKKysKKytLRVJORUxfQlVJTERfUEFUSCA6PSAkKEJVSUxEX1BBVEgpL2tlcm5lbCQoaWYgJChmaW5kc3RyaW5nIHllcywkKERFQlVHX0tFUk5FTCkpLC1kZWJ1ZykKKytyd2lsZGNhcmQ9JChmb3JlYWNoIGQsJCh3aWxkY2FyZCAkMSopLCQoY2FsbCByd2lsZGNhcmQsJGQvLCQyKSAkKGZpbHRlciAkKHN1YnN0ICosJSwkMiksJGQpKQorK1dJUkVHVUFSRF9TT1VSQ0VTIDo9ICQoY2FsbCByd2lsZGNhcmQsJChLRVJORUxfUEFUSCkvZHJpdmVycy9uZXQvd2lyZWd1YXJkLywqKQorKworK2V4cG9ydCBDRkxBR1MgPz0gLU8zIC1waXBlCisrZXhwb3J0IExERkxBR1MgPz0KKytleHBvcnQgQ1BQRkxBR1MgOj0gLUkkKEJVSUxEX1BBVEgpL2luY2x1ZGUKKysKKytpZmVxICgkKENIT1NUKSwkKENCVUlMRCkpCisrQ1JPU1NfQ09NUElMRV9GTEFHIDo9IC0taG9zdD0kKENIT1NUKQorK05PUElFX0dDQyA6PSBnY2MgLWZuby1QSUUKKytDRkxBR1MgKz0gLW1hcmNoPW5hdGl2ZQorK1NUUklQIDo9IHN0cmlwCisrZWxzZQorKyQoaW5mbyBDcm9zcyBjb21waWxhdGlvbjogYnVpbGRpbmcgZm9yICQoQ0JVSUxEKSB1c2luZyAkKENIT1NUKSkKKytDUk9TU19DT01QSUxFX0ZMQUcgOj0gLS1idWlsZD0kKENCVUlMRCkgLS1ob3N0PSQoQ0hPU1QpCisrZXhwb3J0IENST1NTX0NPTVBJTEU9JChDQlVJTEQpLQorK05PUElFX0dDQyA6PSAkKENCVUlMRCktZ2NjIC1mbm8tUElFCisrU1RSSVAgOj0gJChDQlVJTEQpLXN0cmlwCisrZW5kaWYKKytpZmVxICgkKEFSQ0gpLGFhcmNoNjQpCisrUUVNVV9BUkNIIDo9IGFhcmNoNjQKKytLRVJORUxfQVJDSCA6PSBhcm02NAorK0tFUk5FTF9CWklNQUdFIDo9ICQoS0VSTkVMX0JVSUxEX1BBVEgpL2FyY2gvYXJtNjQvYm9vdC9JbWFnZQorK2lmZXEgKCQoQ0hPU1QpLCQoQ0JVSUxEKSkKKytRRU1VX01BQ0hJTkUgOj0gLWNwdSBob3N0IC1tYWNoaW5lIHZpcnQsZ2ljX3ZlcnNpb249aG9zdCxhY2NlbD1rdm0KKytlbHNlCisrUUVNVV9NQUNISU5FIDo9IC1jcHUgY29ydGV4LWE1MyAtbWFjaGluZSB2aXJ0CisrQ0ZMQUdTICs9IC1tYXJjaD1hcm12OC1hIC1tdHVuZT1jb3J0ZXgtYTUzCisrZW5kaWYKKytlbHNlIGlmZXEgKCQoQVJDSCksYWFyY2g2NF9iZSkKKytRRU1VX0FSQ0ggOj0gYWFyY2g2NAorK0tFUk5FTF9BUkNIIDo9IGFybTY0CisrS0VSTkVMX0JaSU1BR0UgOj0gJChLRVJORUxfQlVJTERfUEFUSCkvYXJjaC9hcm02NC9ib290L0ltYWdlCisraWZlcSAoJChDSE9TVCksJChDQlVJTEQpKQorK1FFTVVfTUFDSElORSA6PSAtY3B1IGhvc3QgLW1hY2hpbmUgdmlydCxnaWNfdmVyc2lvbj1ob3N0LGFjY2VsPWt2bQorK2Vsc2UKKytRRU1VX01BQ0hJTkUgOj0gLWNwdSBjb3J0ZXgtYTUzIC1tYWNoaW5lIHZpcnQKKytDRkxBR1MgKz0gLW1hcmNoPWFybXY4LWEgLW10dW5lPWNvcnRleC1hNTMKKytlbmRpZgorK2Vsc2UgaWZlcSAoJChBUkNIKSxhcm0pCisrUUVNVV9BUkNIIDo9IGFybQorK0tFUk5FTF9BUkNIIDo9IGFybQorK0tFUk5FTF9CWklNQUdFIDo9ICQoS0VSTkVMX0JVSUxEX1BBVEgpL2FyY2gvYXJtL2Jvb3QvekltYWdlCisraWZlcSAoJChDSE9TVCksJChDQlVJTEQpKQorK1FFTVVfTUFDSElORSA6PSAtY3B1IGhvc3QgLW1hY2hpbmUgdmlydCxnaWNfdmVyc2lvbj1ob3N0LGFjY2VsPWt2bQorK2Vsc2UKKytRRU1VX01BQ0hJTkUgOj0gLWNwdSBjb3J0ZXgtYTE1IC1tYWNoaW5lIHZpcnQKKytDRkxBR1MgKz0gLW1hcmNoPWFybXY3LWEgLW10dW5lPWNvcnRleC1hMTUgLW1hYmk9YWFwY3MtbGludXgKKytlbmRpZgorK2Vsc2UgaWZlcSAoJChBUkNIKSxhcm1lYikKKytRRU1VX0FSQ0ggOj0gYXJtCisrS0VSTkVMX0FSQ0ggOj0gYXJtCisrS0VSTkVMX0JaSU1BR0UgOj0gJChLRVJORUxfQlVJTERfUEFUSCkvYXJjaC9hcm0vYm9vdC96SW1hZ2UKKytpZmVxICgkKENIT1NUKSwkKENCVUlMRCkpCisrUUVNVV9NQUNISU5FIDo9IC1jcHUgaG9zdCAtbWFjaGluZSB2aXJ0LGdpY192ZXJzaW9uPWhvc3QsYWNjZWw9a3ZtCisrZWxzZQorK1FFTVVfTUFDSElORSA6PSAtY3B1IGNvcnRleC1hMTUgLW1hY2hpbmUgdmlydAorK0NGTEFHUyArPSAtbWFyY2g9YXJtdjctYSAtbWFiaT1hYXBjcy1saW51eCAjIFdlIGRvbid0IHBhc3MgLW10dW5lPWNvcnRleC1hMTUgZHVlIHRvIGEgY29tcGlsZXIgYnVnIG9uIGJpZyBlbmRpYW4uCisrTERGTEFHUyArPSAtV2wsLS1iZTgKKytlbmRpZgorK2Vsc2UgaWZlcSAoJChBUkNIKSx4ODZfNjQpCisrUUVNVV9BUkNIIDo9IHg4Nl82NAorK0tFUk5FTF9BUkNIIDo9IHg4Nl82NAorK0tFUk5FTF9CWklNQUdFIDo9ICQoS0VSTkVMX0JVSUxEX1BBVEgpL2FyY2gveDg2L2Jvb3QvYnpJbWFnZQorK2lmZXEgKCQoQ0hPU1QpLCQoQ0JVSUxEKSkKKytRRU1VX01BQ0hJTkUgOj0gLWNwdSBob3N0IC1tYWNoaW5lIHEzNSxhY2NlbD1rdm0KKytlbHNlCisrUUVNVV9NQUNISU5FIDo9IC1jcHUgU2t5bGFrZS1TZXJ2ZXIgLW1hY2hpbmUgcTM1CisrQ0ZMQUdTICs9IC1tYXJjaD1za3lsYWtlLWF2eDUxMgorK2VuZGlmCisrZWxzZSBpZmVxICgkKEFSQ0gpLGk2ODYpCisrUUVNVV9BUkNIIDo9IGkzODYKKytLRVJORUxfQVJDSCA6PSB4ODYKKytLRVJORUxfQlpJTUFHRSA6PSAkKEtFUk5FTF9CVUlMRF9QQVRIKS9hcmNoL3g4Ni9ib290L2J6SW1hZ2UKKytpZmVxICgkKHN1YnN0IGk2ODYseDg2XzY0LCQoQ0JVSUxEKSksJChDSE9TVCkpCisrUUVNVV9NQUNISU5FIDo9IC1jcHUgaG9zdCAtbWFjaGluZSBxMzUsYWNjZWw9a3ZtCisrZWxzZQorK1FFTVVfTUFDSElORSA6PSAtY3B1IGNvcmVkdW8gLW1hY2hpbmUgcTM1CisrQ0ZMQUdTICs9IC1tYXJjaD1wcmVzY290dAorK2VuZGlmCisrZWxzZSBpZmVxICgkKEFSQ0gpLG1pcHM2NCkKKytRRU1VX0FSQ0ggOj0gbWlwczY0CisrS0VSTkVMX0FSQ0ggOj0gbWlwcworK0tFUk5FTF9CWklNQUdFIDo9ICQoS0VSTkVMX0JVSUxEX1BBVEgpL3ZtbGludXgKKytpZmVxICgkKENIT1NUKSwkKENCVUlMRCkpCisrUUVNVV9NQUNISU5FIDo9IC1jcHUgaG9zdCAtbWFjaGluZSBtYWx0YSxhY2NlbD1rdm0KKytDRkxBR1MgKz0gLUVCCisrZWxzZQorK1FFTVVfTUFDSElORSA6PSAtY3B1IE1JUFM2NFIyLWdlbmVyaWMgLW1hY2hpbmUgbWFsdGEgLXNtcCAxCisrQ0ZMQUdTICs9IC1tYXJjaD1taXBzNjRyMiAtRUIKKytlbmRpZgorK2Vsc2UgaWZlcSAoJChBUkNIKSxtaXBzNjRlbCkKKytRRU1VX0FSQ0ggOj0gbWlwczY0ZWwKKytLRVJORUxfQVJDSCA6PSBtaXBzCisrS0VSTkVMX0JaSU1BR0UgOj0gJChLRVJORUxfQlVJTERfUEFUSCkvdm1saW51eAorK2lmZXEgKCQoQ0hPU1QpLCQoQ0JVSUxEKSkKKytRRU1VX01BQ0hJTkUgOj0gLWNwdSBob3N0IC1tYWNoaW5lIG1hbHRhLGFjY2VsPWt2bQorK0NGTEFHUyArPSAtRUwKKytlbHNlCisrUUVNVV9NQUNISU5FIDo9IC1jcHUgTUlQUzY0UjItZ2VuZXJpYyAtbWFjaGluZSBtYWx0YSAtc21wIDEKKytDRkxBR1MgKz0gLW1hcmNoPW1pcHM2NHIyIC1FTAorK2VuZGlmCisrZWxzZSBpZmVxICgkKEFSQ0gpLG1pcHMpCisrUUVNVV9BUkNIIDo9IG1pcHMKKytLRVJORUxfQVJDSCA6PSBtaXBzCisrS0VSTkVMX0JaSU1BR0UgOj0gJChLRVJORUxfQlVJTERfUEFUSCkvdm1saW51eAorK2lmZXEgKCQoQ0hPU1QpLCQoQ0JVSUxEKSkKKytRRU1VX01BQ0hJTkUgOj0gLWNwdSBob3N0IC1tYWNoaW5lIG1hbHRhLGFjY2VsPWt2bQorK0NGTEFHUyArPSAtRUIKKytlbHNlCisrUUVNVV9NQUNISU5FIDo9IC1jcHUgMjRLZiAtbWFjaGluZSBtYWx0YSAtc21wIDEKKytDRkxBR1MgKz0gLW1hcmNoPW1pcHMzMnIyIC1FQgorK2VuZGlmCisrZWxzZSBpZmVxICgkKEFSQ0gpLG1pcHNlbCkKKytRRU1VX0FSQ0ggOj0gbWlwc2VsCisrS0VSTkVMX0FSQ0ggOj0gbWlwcworK0tFUk5FTF9CWklNQUdFIDo9ICQoS0VSTkVMX0JVSUxEX1BBVEgpL3ZtbGludXgKKytpZmVxICgkKENIT1NUKSwkKENCVUlMRCkpCisrUUVNVV9NQUNISU5FIDo9IC1jcHUgaG9zdCAtbWFjaGluZSBtYWx0YSxhY2NlbD1rdm0KKytDRkxBR1MgKz0gLUVMCisrZWxzZQorK1FFTVVfTUFDSElORSA6PSAtY3B1IDI0S2YgLW1hY2hpbmUgbWFsdGEgLXNtcCAxCisrQ0ZMQUdTICs9IC1tYXJjaD1taXBzMzJyMiAtRUwKKytlbmRpZgorK2Vsc2UgaWZlcSAoJChBUkNIKSxwb3dlcnBjNjRsZSkKKytRRU1VX0FSQ0ggOj0gcHBjNjQKKytLRVJORUxfQVJDSCA6PSBwb3dlcnBjCisrS0VSTkVMX0JaSU1BR0UgOj0gJChLRVJORUxfQlVJTERfUEFUSCkvdm1saW51eAorK2lmZXEgKCQoQ0hPU1QpLCQoQ0JVSUxEKSkKKytRRU1VX01BQ0hJTkUgOj0gLWNwdSBob3N0LGFjY2VsPWt2bSAtbWFjaGluZSBwc2VyaWVzCisrZWxzZQorK1FFTVVfTUFDSElORSA6PSAtbWFjaGluZSBwc2VyaWVzCisrZW5kaWYKKytDRkxBR1MgKz0gLW1jcHU9cG93ZXJwYzY0bGUgLW1sb25nLWRvdWJsZS02NAorK2Vsc2UgaWZlcSAoJChBUkNIKSxwb3dlcnBjKQorK1FFTVVfQVJDSCA6PSBwcGMKKytLRVJORUxfQVJDSCA6PSBwb3dlcnBjCisrS0VSTkVMX0JaSU1BR0UgOj0gJChLRVJORUxfQlVJTERfUEFUSCkvYXJjaC9wb3dlcnBjL2Jvb3QvdUltYWdlCisraWZlcSAoJChDSE9TVCksJChDQlVJTEQpKQorK1FFTVVfTUFDSElORSA6PSAtY3B1IGhvc3QsYWNjZWw9a3ZtIC1tYWNoaW5lIHBwY2U1MDAKKytlbHNlCisrUUVNVV9NQUNISU5FIDo9IC1tYWNoaW5lIHBwY2U1MDAKKytlbmRpZgorK0NGTEFHUyArPSAtbWNwdT1wb3dlcnBjIC1tbG9uZy1kb3VibGUtNjQgLW1zZWN1cmUtcGx0CisrZWxzZSBpZmVxICgkKEFSQ0gpLG02OGspCisrUUVNVV9BUkNIIDo9IG02OGsKKytLRVJORUxfQVJDSCA6PSBtNjhrCisrS0VSTkVMX0JaSU1BR0UgOj0gJChLRVJORUxfQlVJTERfUEFUSCkvdm1saW51eAorK2lmZXEgKCQoQ0hPU1QpLCQoQ0JVSUxEKSkKKytRRU1VX01BQ0hJTkUgOj0gLWNwdSBob3N0LGFjY2VsPWt2bSAtbWFjaGluZSBxODAwCisrZWxzZQorK1FFTVVfTUFDSElORSA6PSAtbWFjaGluZSBxODAwCisrZW5kaWYKKytlbHNlCisrJChlcnJvciBJIG9ubHkgYnVpbGQ6IHg4Nl82NCwgaTY4NiwgYXJtLCBhcm1lYiwgYWFyY2g2NCwgYWFyY2g2NF9iZSwgbWlwcywgbWlwc2VsLCBtaXBzNjQsIG1pcHM2NGVsLCBwb3dlcnBjNjRsZSwgcG93ZXJwYywgbTY4aykKKytlbmRpZgorKworK1JFQUxfQ0MgOj0gJChDQlVJTEQpLWdjYworK01VU0xfQ0MgOj0gJChCVUlMRF9QQVRIKS9tdXNsLWdjYworK2V4cG9ydCBDQyA6PSAkKE1VU0xfQ0MpCisrVVNFUlNQQUNFX0RFUFMgOj0gJChNVVNMX0NDKSAkKEJVSUxEX1BBVEgpL2luY2x1ZGUvLmluc3RhbGxlZCAkKEJVSUxEX1BBVEgpL2luY2x1ZGUvbGludXgvLmluc3RhbGxlZAorKworK2J1aWxkOiAkKEtFUk5FTF9CWklNQUdFKQorK3FlbXU6ICQoS0VSTkVMX0JaSU1BR0UpCisrCXJtIC1mICQoQlVJTERfUEFUSCkvcmVzdWx0CisrCXRpbWVvdXQgLS1mb3JlZ3JvdW5kIDIwbSBxZW11LXN5c3RlbS0kKFFFTVVfQVJDSCkgXAorKwkJLW5vZGVmYXVsdHMgXAorKwkJLW5vZ3JhcGhpYyBcCisrCQktc21wICQoTlJfQ1BVUykgXAorKwkJJChRRU1VX01BQ0hJTkUpIFwKKysJCS1tICQkKGdyZXAgLXEgQ09ORklHX0RFQlVHX0tNRU1MRUFLPXkgJChLRVJORUxfQlVJTERfUEFUSCkvLmNvbmZpZyAmJiBlY2hvIDFHIHx8IGVjaG8gMjU2TSkgXAorKwkJLXNlcmlhbCBzdGRpbyBcCisrCQktc2VyaWFsIGZpbGU6JChCVUlMRF9QQVRIKS9yZXN1bHQgXAorKwkJLW5vLXJlYm9vdCBcCisrCQktbW9uaXRvciBub25lIFwKKysJCS1rZXJuZWwgJDwKKysJZ3JlcCAtRnEgc3VjY2VzcyAkKEJVSUxEX1BBVEgpL3Jlc3VsdAorKworKyQoQlVJTERfUEFUSCkvaW5pdC1jcGlvLXNwZWMudHh0OgorKwlta2RpciAtcCAkKEJVSUxEX1BBVEgpCisrCWVjaG8gImZpbGUgL2luaXQgJChCVUlMRF9QQVRIKS9pbml0IDc1NSAwIDAiID4gJEAKKysJZWNobyAiZmlsZSAvaW5pdC5zaCAkKFBXRCkvLi4vbmV0bnMuc2ggNzU1IDAgMCIgPj4gJEAKKysJZWNobyAiZGlyIC9kZXYgNzU1IDAgMCIgPj4gJEAKKysJZWNobyAibm9kIC9kZXYvY29uc29sZSA2NDQgMCAwIGMgNSAxIiA+PiAkQAorKwllY2hvICJkaXIgL2JpbiA3NTUgMCAwIiA+PiAkQAorKwllY2hvICJmaWxlIC9iaW4vaXBlcmYzICQoSVBFUkZfUEFUSCkvc3JjL2lwZXJmMyA3NTUgMCAwIiA+PiAkQAorKwllY2hvICJmaWxlIC9iaW4vd2cgJChXSVJFR1VBUkRfVE9PTFNfUEFUSCkvc3JjL3Rvb2xzL3dnIDc1NSAwIDAiID4+ICRACisrCWVjaG8gImZpbGUgL2Jpbi9iYXNoICQoQkFTSF9QQVRIKS9iYXNoIDc1NSAwIDAiID4+ICRACisrCWVjaG8gImZpbGUgL2Jpbi9pcCAkKElQUk9VVEUyX1BBVEgpL2lwL2lwIDc1NSAwIDAiID4+ICRACisrCWVjaG8gImZpbGUgL2Jpbi9zcyAkKElQUk9VVEUyX1BBVEgpL21pc2Mvc3MgNzU1IDAgMCIgPj4gJEAKKysJZWNobyAiZmlsZSAvYmluL3BpbmcgJChJUFVUSUxTX1BBVEgpL3BpbmcgNzU1IDAgMCIgPj4gJEAKKysJZWNobyAiZmlsZSAvYmluL25jYXQgJChOTUFQX1BBVEgpL25jYXQvbmNhdCA3NTUgMCAwIiA+PiAkQAorKwllY2hvICJmaWxlIC9iaW4veHRhYmxlcy1tdWx0aSAkKElQVEFCTEVTX1BBVEgpL2lwdGFibGVzL3h0YWJsZXMtbXVsdGkgNzU1IDAgMCIgPj4gJEAKKysJZWNobyAic2xpbmsgL2Jpbi9pcHRhYmxlcyB4dGFibGVzLW11bHRpIDc3NyAwIDAiID4+ICRACisrCWVjaG8gInNsaW5rIC9iaW4vcGluZzYgcGluZyA3NzcgMCAwIiA+PiAkQAorKwllY2hvICJkaXIgL2xpYiA3NTUgMCAwIiA+PiAkQAorKwllY2hvICJmaWxlIC9saWIvbGliYy5zbyAkKE1VU0xfUEFUSCkvbGliL2xpYmMuc28gNzU1IDAgMCIgPj4gJEAKKysJZWNobyAic2xpbmsgL2xpYi9sZC1saW51eC5zby4xIGxpYmMuc28gNzc3IDAgMCIgPj4gJEAKKysKKyskKEtFUk5FTF9CVUlMRF9QQVRIKS8uY29uZmlnOiBrZXJuZWwuY29uZmlnIGFyY2gvJChBUkNIKS5jb25maWcKKysJbWtkaXIgLXAgJChLRVJORUxfQlVJTERfUEFUSCkKKysJY3Aga2VybmVsLmNvbmZpZyAkKEtFUk5FTF9CVUlMRF9QQVRIKS9taW5pbWFsLmNvbmZpZworKwlwcmludGYgJ0NPTkZJR19OUl9DUFVTPSQoTlJfQ1BVUylcbkNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIkKEJVSUxEX1BBVEgpL2luaXQtY3Bpby1zcGVjLnR4dCJcbicgPj4gJChLRVJORUxfQlVJTERfUEFUSCkvbWluaW1hbC5jb25maWcKKysJY2F0IGFyY2gvJChBUkNIKS5jb25maWcgPj4gJChLRVJORUxfQlVJTERfUEFUSCkvbWluaW1hbC5jb25maWcKKysJJChNQUtFKSAtQyAkKEtFUk5FTF9QQVRIKSBPPSQoS0VSTkVMX0JVSUxEX1BBVEgpIEFSQ0g9JChLRVJORUxfQVJDSCkgYWxsbm9jb25maWcKKysJY2QgJChLRVJORUxfQlVJTERfUEFUSCkgJiYgQVJDSD0kKEtFUk5FTF9BUkNIKSAkKEtFUk5FTF9QQVRIKS9zY3JpcHRzL2tjb25maWcvbWVyZ2VfY29uZmlnLnNoIC1uICQoS0VSTkVMX0JVSUxEX1BBVEgpLy5jb25maWcgJChLRVJORUxfQlVJTERfUEFUSCkvbWluaW1hbC5jb25maWcKKysJJChpZiAkKGZpbmRzdHJpbmcgeWVzLCQoREVCVUdfS0VSTkVMKSksY3AgZGVidWcuY29uZmlnICQoS0VSTkVMX0JVSUxEX1BBVEgpICYmIGNkICQoS0VSTkVMX0JVSUxEX1BBVEgpICYmIEFSQ0g9JChLRVJORUxfQVJDSCkgJChLRVJORUxfUEFUSCkvc2NyaXB0cy9rY29uZmlnL21lcmdlX2NvbmZpZy5zaCAtbiAkKEtFUk5FTF9CVUlMRF9QQVRIKS8uY29uZmlnIGRlYnVnLmNvbmZpZywpCisrCisrJChLRVJORUxfQlpJTUFHRSk6ICQoS0VSTkVMX0JVSUxEX1BBVEgpLy5jb25maWcgJChCVUlMRF9QQVRIKS9pbml0LWNwaW8tc3BlYy50eHQgJChNVVNMX1BBVEgpL2xpYi9saWJjLnNvICQoSVBFUkZfUEFUSCkvc3JjL2lwZXJmMyAkKElQVVRJTFNfUEFUSCkvcGluZyAkKEJBU0hfUEFUSCkvYmFzaCAkKElQUk9VVEUyX1BBVEgpL21pc2Mvc3MgJChJUFJPVVRFMl9QQVRIKS9pcC9pcCAkKElQVEFCTEVTX1BBVEgpL2lwdGFibGVzL3h0YWJsZXMtbXVsdGkgJChOTUFQX1BBVEgpL25jYXQvbmNhdCAkKFdJUkVHVUFSRF9UT09MU19QQVRIKS9zcmMvdG9vbHMvd2cgJChCVUlMRF9QQVRIKS9pbml0IC4uL25ldG5zLnNoICQoV0lSRUdVQVJEX1NPVVJDRVMpCisrCSQoTUFLRSkgLUMgJChLRVJORUxfUEFUSCkgTz0kKEtFUk5FTF9CVUlMRF9QQVRIKSBBUkNIPSQoS0VSTkVMX0FSQ0gpIENST1NTX0NPTVBJTEU9JChDUk9TU19DT01QSUxFKSBDQz0iJChOT1BJRV9HQ0MpIgorKworKyQoQlVJTERfUEFUSCkvaW5jbHVkZS9saW51eC8uaW5zdGFsbGVkOiB8ICQoS0VSTkVMX0JVSUxEX1BBVEgpLy5jb25maWcKKysJJChNQUtFKSAtQyAkKEtFUk5FTF9QQVRIKSBPPSQoS0VSTkVMX0JVSUxEX1BBVEgpIElOU1RBTExfSERSX1BBVEg9JChCVUlMRF9QQVRIKSBBUkNIPSQoS0VSTkVMX0FSQ0gpIENST1NTX0NPTVBJTEU9JChDUk9TU19DT01QSUxFKSBoZWFkZXJzX2luc3RhbGwKKysJdG91Y2ggJEAKKysKKyskKE1VU0xfUEFUSCkvbGliL2xpYmMuc286ICQoTVVTTF9UQVIpCisrCW1rZGlyIC1wICQoQlVJTERfUEFUSCkKKysJZmxvY2sgLXMgJDwubG9jayB0YXIgLUMgJChCVUlMRF9QQVRIKSAteGYgJDwKKysJY2QgJChNVVNMX1BBVEgpICYmIENDPSQoUkVBTF9DQykgLi9jb25maWd1cmUgLS1wcmVmaXg9LyAtLWRpc2FibGUtc3RhdGljIC0tYnVpbGQ9JChDQlVJTEQpCisrCSQoTUFLRSkgLUMgJChNVVNMX1BBVEgpCisrCSQoU1RSSVApIC1zICRACisrCisrJChCVUlMRF9QQVRIKS9pbmNsdWRlLy5pbnN0YWxsZWQ6ICQoTVVTTF9QQVRIKS9saWIvbGliYy5zbworKwkkKE1BS0UpIC1DICQoTVVTTF9QQVRIKSBERVNURElSPSQoQlVJTERfUEFUSCkgaW5zdGFsbC1oZWFkZXJzCisrCXRvdWNoICRACisrCisrJChNVVNMX0NDKTogJChNVVNMX1BBVEgpL2xpYi9saWJjLnNvCisrCXNoICQoTVVTTF9QQVRIKS90b29scy9tdXNsLWdjYy5zcGVjcy5zaCAkKEJVSUxEX1BBVEgpL2luY2x1ZGUgJChNVVNMX1BBVEgpL2xpYiAvbGliL2xkLWxpbnV4LnNvLjEgPiAkKEJVSUxEX1BBVEgpL211c2wtZ2NjLnNwZWNzCisrCXByaW50ZiAnIyEvYmluL3NoXG5leGVjICIkKFJFQUxfQ0MpIiAtLXNwZWNzPSIkKEJVSUxEX1BBVEgpL211c2wtZ2NjLnNwZWNzIiAtZm5vLXN0YWNrLXByb3RlY3RvciAtbm8tcGllICIkJEAiXG4nID4gJChCVUlMRF9QQVRIKS9tdXNsLWdjYworKwljaG1vZCAreCAkKEJVSUxEX1BBVEgpL211c2wtZ2NjCisrCisrJChJUEVSRl9QQVRIKS8uaW5zdGFsbGVkOiAkKElQRVJGX1RBUikKKysJbWtkaXIgLXAgJChCVUlMRF9QQVRIKQorKwlmbG9jayAtcyAkPC5sb2NrIHRhciAtQyAkKEJVSUxEX1BBVEgpIC14ZiAkPAorKwlzZWQgLWkgJzFzL14vI2luY2x1ZGUgPHN0ZGludC5oPi8nICQoSVBFUkZfUEFUSCkvc3JjL2Nqc29uLmggJChJUEVSRl9QQVRIKS9zcmMvdGltZXIuaAorKwlzZWQgLWkgLXIgJ3MvLXA/Zy8vZycgJChJUEVSRl9QQVRIKS9zcmMvTWFrZWZpbGUqCisrCXRvdWNoICRACisrCisrJChJUEVSRl9QQVRIKS9zcmMvaXBlcmYzOiB8ICQoSVBFUkZfUEFUSCkvLmluc3RhbGxlZCAkKFVTRVJTUEFDRV9ERVBTKQorKwljZCAkKElQRVJGX1BBVEgpICYmIENGTEFHUz0iJChDRkxBR1MpIC1EX0dOVV9TT1VSQ0UiIC4vY29uZmlndXJlIC0tcHJlZml4PS8gJChDUk9TU19DT01QSUxFX0ZMQUcpIC0tZW5hYmxlLXN0YXRpYyAtLWRpc2FibGUtc2hhcmVkCisrCSQoTUFLRSkgLUMgJChJUEVSRl9QQVRIKQorKwkkKFNUUklQKSAtcyAkQAorKworKyQoTElCTU5MX1BBVEgpLy5pbnN0YWxsZWQ6ICQoTElCTU5MX1RBUikKKysJZmxvY2sgLXMgJDwubG9jayB0YXIgLUMgJChCVUlMRF9QQVRIKSAteGYgJDwKKysJdG91Y2ggJEAKKysKKyskKExJQk1OTF9QQVRIKS9zcmMvLmxpYnMvbGlibW5sLmE6IHwgJChMSUJNTkxfUEFUSCkvLmluc3RhbGxlZCAkKFVTRVJTUEFDRV9ERVBTKQorKwljZCAkKExJQk1OTF9QQVRIKSAmJiAuL2NvbmZpZ3VyZSAtLXByZWZpeD0vICQoQ1JPU1NfQ09NUElMRV9GTEFHKSAtLWVuYWJsZS1zdGF0aWMgLS1kaXNhYmxlLXNoYXJlZAorKwkkKE1BS0UpIC1DICQoTElCTU5MX1BBVEgpCisrCXNlZCAtaSAnczpwcmVmaXg9Lio6cHJlZml4PSQoTElCTU5MX1BBVEgpOicgJChMSUJNTkxfUEFUSCkvbGlibW5sLnBjCisrCisrJChXSVJFR1VBUkRfVE9PTFNfUEFUSCkvLmluc3RhbGxlZDogJChXSVJFR1VBUkRfVE9PTFNfVEFSKQorKwlmbG9jayAtcyAkPC5sb2NrIHRhciAtQyAkKEJVSUxEX1BBVEgpIC14ZiAkPAorKwl0b3VjaCAkQAorKworKyQoV0lSRUdVQVJEX1RPT0xTX1BBVEgpL3NyYy90b29scy93ZzogfCAkKFdJUkVHVUFSRF9UT09MU19QQVRIKS8uaW5zdGFsbGVkICQoTElCTU5MX1BBVEgpL3NyYy8ubGlicy9saWJtbmwuYSAkKFVTRVJTUEFDRV9ERVBTKQorKwlMREZMQUdTPSIkKExERkxBR1MpIC1MJChMSUJNTkxfUEFUSCkvc3JjLy5saWJzIiAkKE1BS0UpIC1DICQoV0lSRUdVQVJEX1RPT0xTX1BBVEgpL3NyYy90b29scyBMSUJNTkxfQ0ZMQUdTPSItSSQoTElCTU5MX1BBVEgpL2luY2x1ZGUiIExJQk1OTF9MRExJQlM9Ii1sbW5sIiB3ZworKwkkKFNUUklQKSAtcyAkQAorKworKyQoQlVJTERfUEFUSCkvaW5pdDogaW5pdC5jIHwgJChVU0VSU1BBQ0VfREVQUykKKysJbWtkaXIgLXAgJChCVUlMRF9QQVRIKQorKwkkKE1VU0xfQ0MpIC1vICRAICQoQ0ZMQUdTKSAkKExERkxBR1MpIC1zdGQ9Z251MTEgJDwKKysJJChTVFJJUCkgLXMgJEAKKysKKyskKElQVVRJTFNfUEFUSCkvLmluc3RhbGxlZDogJChJUFVUSUxTX1RBUikKKysJbWtkaXIgLXAgJChCVUlMRF9QQVRIKQorKwlmbG9jayAtcyAkPC5sb2NrIHRhciAtQyAkKEJVSUxEX1BBVEgpIC14ZiAkPAorKwl0b3VjaCAkQAorKworKyQoSVBVVElMU19QQVRIKS9waW5nOiB8ICQoSVBVVElMU19QQVRIKS8uaW5zdGFsbGVkICQoVVNFUlNQQUNFX0RFUFMpCisrCSQoTUFLRSkgLUMgJChJUFVUSUxTX1BBVEgpIFVTRV9DQVA9bm8gVVNFX0lETj1ubyBVU0VfTkVUVExFPW5vIFVTRV9DUllQVE89bm8gcGluZworKwkkKFNUUklQKSAtcyAkQAorKworKyQoQkFTSF9QQVRIKS8uaW5zdGFsbGVkOiAkKEJBU0hfVEFSKQorKwlta2RpciAtcCAkKEJVSUxEX1BBVEgpCisrCWZsb2NrIC1zICQ8LmxvY2sgdGFyIC1DICQoQlVJTERfUEFUSCkgLXhmICQ8CisrCXRvdWNoICRACisrCisrJChCQVNIX1BBVEgpL2Jhc2g6IHwgJChCQVNIX1BBVEgpLy5pbnN0YWxsZWQgJChVU0VSU1BBQ0VfREVQUykKKysJY2QgJChCQVNIX1BBVEgpICYmIC4vY29uZmlndXJlIC0tcHJlZml4PS8gJChDUk9TU19DT01QSUxFX0ZMQUcpIC0td2l0aG91dC1iYXNoLW1hbGxvYyAtLWRpc2FibGUtZGVidWdnZXIgLS1kaXNhYmxlLWhlbHAtYnVpbHRpbiAtLWRpc2FibGUtaGlzdG9yeSAtLWRpc2FibGUtbXVsdGlieXRlIC0tZGlzYWJsZS1wcm9nY29tcCAtLWRpc2FibGUtcmVhZGxpbmUgLS1kaXNhYmxlLW1lbS1zY3JhbWJsZQorKwkkKE1BS0UpIC1DICQoQkFTSF9QQVRIKQorKwkkKFNUUklQKSAtcyAkQAorKworKyQoSVBST1VURTJfUEFUSCkvLmluc3RhbGxlZDogJChJUFJPVVRFMl9UQVIpCisrCW1rZGlyIC1wICQoQlVJTERfUEFUSCkKKysJZmxvY2sgLXMgJDwubG9jayB0YXIgLUMgJChCVUlMRF9QQVRIKSAteGYgJDwKKysJcHJpbnRmICdDQzo9JChDQylcblBLR19DT05GSUc6PXBrZy1jb25maWdcblRDX0NPTkZJR19YVDo9blxuVENfQ09ORklHX0FUTTo9blxuVENfQ09ORklHX0lQU0VUOj1uXG5JUF9DT05GSUdfU0VUTlM6PXlcbkhBVkVfRUxGOj1uXG5IQVZFX01OTDo9eVxuSEFWRV9CRVJLRUxFWV9EQjo9blxuSEFWRV9MQVRFWDo9blxuSEFWRV9QREZMQVRFWDo9blxuQ0ZMQUdTKz0tREhBVkVfU0VUTlMgLURIQVZFX0xJQk1OTCAtSSQoTElCTU5MX1BBVEgpL2luY2x1ZGVcbkxETElCUys9LWxtbmwnID4gJChJUFJPVVRFMl9QQVRIKS9jb25maWcubWsKKysJcHJpbnRmICdsaWI6IHNuYXBzaG90XG5cdCQkKE1BS0UpIC1DIGxpYlxuaXAvaXA6IGxpYlxuXHQkJChNQUtFKSAtQyBpcCBpcFxubWlzYy9zczogbGliXG5cdCQkKE1BS0UpIC1DIG1pc2Mgc3NcbicgPj4gJChJUFJPVVRFMl9QQVRIKS9NYWtlZmlsZQorKwl0b3VjaCAkQAorKworKyQoSVBST1VURTJfUEFUSCkvaXAvaXA6IHwgJChJUFJPVVRFMl9QQVRIKS8uaW5zdGFsbGVkICQoTElCTU5MX1BBVEgpL3NyYy8ubGlicy9saWJtbmwuYSAkKFVTRVJTUEFDRV9ERVBTKQorKwlMREZMQUdTPSIkKExERkxBR1MpIC1MJChMSUJNTkxfUEFUSCkvc3JjLy5saWJzIiBQS0dfQ09ORklHX0xJQkRJUj0iJChMSUJNTkxfUEFUSCkiICQoTUFLRSkgLUMgJChJUFJPVVRFMl9QQVRIKSBQUkVGSVg9LyBpcC9pcAorKwkkKFNUUklQKSAtcyAkKElQUk9VVEUyX1BBVEgpL2lwL2lwCisrCisrJChJUFJPVVRFMl9QQVRIKS9taXNjL3NzOiB8ICQoSVBST1VURTJfUEFUSCkvLmluc3RhbGxlZCAkKExJQk1OTF9QQVRIKS9zcmMvLmxpYnMvbGlibW5sLmEgJChVU0VSU1BBQ0VfREVQUykKKysJTERGTEFHUz0iJChMREZMQUdTKSAtTCQoTElCTU5MX1BBVEgpL3NyYy8ubGlicyIgUEtHX0NPTkZJR19MSUJESVI9IiQoTElCTU5MX1BBVEgpIiAkKE1BS0UpIC1DICQoSVBST1VURTJfUEFUSCkgUFJFRklYPS8gbWlzYy9zcworKwkkKFNUUklQKSAtcyAkKElQUk9VVEUyX1BBVEgpL21pc2Mvc3MKKysKKyskKElQVEFCTEVTX1BBVEgpLy5pbnN0YWxsZWQ6ICQoSVBUQUJMRVNfVEFSKQorKwlta2RpciAtcCAkKEJVSUxEX1BBVEgpCisrCWZsb2NrIC1zICQ8LmxvY2sgdGFyIC1DICQoQlVJTERfUEFUSCkgLXhmICQ8CisrCXNlZCAtaSAtZSAiL25mbmV0bGluaz1bMDFdL3M6PVswMV06PTA6IiAtZSAiL25mY29ubnRyYWNrPVswMV0vczo9WzAxXTo9MDoiICQoSVBUQUJMRVNfUEFUSCkvY29uZmlndXJlCisrCXRvdWNoICRACisrCisrJChJUFRBQkxFU19QQVRIKS9pcHRhYmxlcy94dGFibGVzLW11bHRpOiB8ICQoSVBUQUJMRVNfUEFUSCkvLmluc3RhbGxlZCAkKExJQk1OTF9QQVRIKS9zcmMvLmxpYnMvbGlibW5sLmEgJChVU0VSU1BBQ0VfREVQUykKKysJY2QgJChJUFRBQkxFU19QQVRIKSAmJiBQS0dfQ09ORklHX0xJQkRJUj0iJChMSUJNTkxfUEFUSCkiIC4vY29uZmlndXJlIC0tcHJlZml4PS8gJChDUk9TU19DT01QSUxFX0ZMQUcpIC0tZW5hYmxlLXN0YXRpYyAtLWRpc2FibGUtc2hhcmVkIC0tZGlzYWJsZS1uZnRhYmxlcyAtLWRpc2FibGUtYnBmLWNvbXBpbGVyIC0tZGlzYWJsZS1uZnN5bnByb3h5IC0tZGlzYWJsZS1saWJpcHEgLS13aXRoLWtlcm5lbD0kKEJVSUxEX1BBVEgpL2luY2x1ZGUKKysJJChNQUtFKSAtQyAkKElQVEFCTEVTX1BBVEgpCisrCSQoU1RSSVApIC1zICRACisrCisrJChOTUFQX1BBVEgpLy5pbnN0YWxsZWQ6ICQoTk1BUF9UQVIpCisrCW1rZGlyIC1wICQoQlVJTERfUEFUSCkKKysJZmxvY2sgLXMgJDwubG9jayB0YXIgLUMgJChCVUlMRF9QQVRIKSAteGYgJDwKKysJdG91Y2ggJEAKKysKKyskKE5NQVBfUEFUSCkvbmNhdC9uY2F0OiB8ICQoTk1BUF9QQVRIKS8uaW5zdGFsbGVkICQoVVNFUlNQQUNFX0RFUFMpCisrCWNkICQoTk1BUF9QQVRIKSAmJiAuL2NvbmZpZ3VyZSAtLXByZWZpeD0vICQoQ1JPU1NfQ09NUElMRV9GTEFHKSAtLWVuYWJsZS1zdGF0aWMgLS1kaXNhYmxlLXNoYXJlZCAtLXdpdGhvdXQtbmRpZmYgLS13aXRob3V0LXplbm1hcCAtLXdpdGhvdXQtbnBpbmcgLS13aXRoLWxpYnBjYXA9aW5jbHVkZWQgLS13aXRoLWxpYnBjcmU9aW5jbHVkZWQgLS13aXRoLWxpYmRuZXQ9aW5jbHVkZWQgLS13aXRob3V0LWxpYmx1YSAtLXdpdGgtbGlibGluZWFyPWluY2x1ZGVkIC0td2l0aG91dC1ubWFwLXVwZGF0ZSAtLXdpdGhvdXQtb3BlbnNzbCAtLXdpdGgtcGNhcD1saW51eAorKwkkKE1BS0UpIC1DICQoTk1BUF9QQVRIKSBidWlsZC1uY2F0CisrCSQoU1RSSVApIC1zICRACisrCisrY2xlYW46CisrCXJtIC1yZiAkKEJVSUxEX1BBVEgpCisrCisrZGlzdGNsZWFuOiBjbGVhbgorKwlybSAtcmYgJChESVNURklMRVNfUEFUSCkKKysKKyttZW51Y29uZmlnOiAkKEtFUk5FTF9CVUlMRF9QQVRIKS8uY29uZmlnCisrCSQoTUFLRSkgLUMgJChLRVJORUxfUEFUSCkgTz0kKEtFUk5FTF9CVUlMRF9QQVRIKSBBUkNIPSQoS0VSTkVMX0FSQ0gpIENST1NTX0NPTVBJTEU9JChDUk9TU19DT01QSUxFKSBDQz0iJChOT1BJRV9HQ0MpIiBtZW51Y29uZmlnCisrCisrLlBIT05ZOiBxZW11IGJ1aWxkIGNsZWFuIGRpc3RjbGVhbiBtZW51Y29uZmlnCisrLkRFTEVURV9PTl9FUlJPUjoKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9xZW11L2FyY2gvYWFyY2g2NC5jb25maWcKK0BAIC0wLDAgKzEsNSBAQAorK0NPTkZJR19TRVJJQUxfQU1CQV9QTDAxMT15CisrQ09ORklHX1NFUklBTF9BTUJBX1BMMDExX0NPTlNPTEU9eQorK0NPTkZJR19DTURMSU5FX0JPT0w9eQorK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eUFNQTAgd2cuc3VjY2Vzcz10dHlBTUExIgorK0NPTkZJR19GUkFNRV9XQVJOPTEyODAKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9xZW11L2FyY2gvYWFyY2g2NF9iZS5jb25maWcKK0BAIC0wLDAgKzEsNiBAQAorK0NPTkZJR19DUFVfQklHX0VORElBTj15CisrQ09ORklHX1NFUklBTF9BTUJBX1BMMDExPXkKKytDT05GSUdfU0VSSUFMX0FNQkFfUEwwMTFfQ09OU09MRT15CisrQ09ORklHX0NNRExJTkVfQk9PTD15CisrQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5QU1BMCB3Zy5zdWNjZXNzPXR0eUFNQTEiCisrQ09ORklHX0ZSQU1FX1dBUk49MTI4MAorLS0tIC9kZXYvbnVsbAorKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL3FlbXUvYXJjaC9hcm0uY29uZmlnCitAQCAtMCwwICsxLDkgQEAKKytDT05GSUdfTU1VPXkKKytDT05GSUdfQVJDSF9NVUxUSV9WNz15CisrQ09ORklHX0FSQ0hfVklSVD15CisrQ09ORklHX1RIVU1CMl9LRVJORUw9bgorK0NPTkZJR19TRVJJQUxfQU1CQV9QTDAxMT15CisrQ09ORklHX1NFUklBTF9BTUJBX1BMMDExX0NPTlNPTEU9eQorK0NPTkZJR19DTURMSU5FX0JPT0w9eQorK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eUFNQTAgd2cuc3VjY2Vzcz10dHlBTUExIgorK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9xZW11L2FyY2gvYXJtZWIuY29uZmlnCitAQCAtMCwwICsxLDEwIEBACisrQ09ORklHX01NVT15CisrQ09ORklHX0FSQ0hfTVVMVElfVjc9eQorK0NPTkZJR19BUkNIX1ZJUlQ9eQorK0NPTkZJR19USFVNQjJfS0VSTkVMPW4KKytDT05GSUdfU0VSSUFMX0FNQkFfUEwwMTE9eQorK0NPTkZJR19TRVJJQUxfQU1CQV9QTDAxMV9DT05TT0xFPXkKKytDT05GSUdfQ01ETElORV9CT09MPXkKKytDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlBTUEwIHdnLnN1Y2Nlc3M9dHR5QU1BMSIKKytDT05GSUdfQ1BVX0JJR19FTkRJQU49eQorK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9xZW11L2FyY2gvaTY4Ni5jb25maWcKK0BAIC0wLDAgKzEsNSBAQAorK0NPTkZJR19TRVJJQUxfODI1MD15CisrQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorK0NPTkZJR19DTURMSU5FX0JPT0w9eQorK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwIHdnLnN1Y2Nlc3M9dHR5UzEiCisrQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorLS0tIC9kZXYvbnVsbAorKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL3FlbXUvYXJjaC9tNjhrLmNvbmZpZworQEAgLTAsMCArMSw5IEBACisrQ09ORklHX01NVT15CisrQ09ORklHX002ODA0MD15CisrQ09ORklHX01BQz15CisrQ09ORklHX1NFUklBTF9QTUFDWklMT0c9eQorK0NPTkZJR19TRVJJQUxfUE1BQ1pJTE9HX1RUWVM9eQorK0NPTkZJR19TRVJJQUxfUE1BQ1pJTE9HX0NPTlNPTEU9eQorK0NPTkZJR19DTURMSU5FX0JPT0w9eQorK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwIHdnLnN1Y2Nlc3M9dHR5UzEiCisrQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorLS0tIC9kZXYvbnVsbAorKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL3FlbXUvYXJjaC9taXBzLmNvbmZpZworQEAgLTAsMCArMSwxMSBAQAorK0NPTkZJR19DUFVfTUlQUzMyX1IyPXkKKytDT05GSUdfTUlQU19NQUxUQT15CisrQ09ORklHX01JUFNfQ1BTPXkKKytDT05GSUdfTUlQU19GUF9TVVBQT1JUPXkKKytDT05GSUdfUE9XRVJfUkVTRVQ9eQorK0NPTkZJR19QT1dFUl9SRVNFVF9TWVNDT049eQorK0NPTkZJR19TRVJJQUxfODI1MD15CisrQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorK0NPTkZJR19DTURMSU5FX0JPT0w9eQorK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwIHdnLnN1Y2Nlc3M9dHR5UzEiCisrQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorLS0tIC9kZXYvbnVsbAorKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL3FlbXUvYXJjaC9taXBzNjQuY29uZmlnCitAQCAtMCwwICsxLDE0IEBACisrQ09ORklHXzY0QklUPXkKKytDT05GSUdfQ1BVX01JUFM2NF9SMj15CisrQ09ORklHX01JUFMzMl9OMzI9eQorK0NPTkZJR19DUFVfSEFTX01TQT15CisrQ09ORklHX01JUFNfTUFMVEE9eQorK0NPTkZJR19NSVBTX0NQUz15CisrQ09ORklHX01JUFNfRlBfU1VQUE9SVD15CisrQ09ORklHX1BPV0VSX1JFU0VUPXkKKytDT05GSUdfUE9XRVJfUkVTRVRfU1lTQ09OPXkKKytDT05GSUdfU0VSSUFMXzgyNTA9eQorK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKKytDT05GSUdfQ01ETElORV9CT09MPXkKKytDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCB3Zy5zdWNjZXNzPXR0eVMxIgorK0NPTkZJR19GUkFNRV9XQVJOPTEyODAKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9xZW11L2FyY2gvbWlwczY0ZWwuY29uZmlnCitAQCAtMCwwICsxLDE1IEBACisrQ09ORklHXzY0QklUPXkKKytDT05GSUdfQ1BVX01JUFM2NF9SMj15CisrQ09ORklHX01JUFMzMl9OMzI9eQorK0NPTkZJR19DUFVfSEFTX01TQT15CisrQ09ORklHX01JUFNfTUFMVEE9eQorK0NPTkZJR19DUFVfTElUVExFX0VORElBTj15CisrQ09ORklHX01JUFNfQ1BTPXkKKytDT05GSUdfTUlQU19GUF9TVVBQT1JUPXkKKytDT05GSUdfUE9XRVJfUkVTRVQ9eQorK0NPTkZJR19QT1dFUl9SRVNFVF9TWVNDT049eQorK0NPTkZJR19TRVJJQUxfODI1MD15CisrQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorK0NPTkZJR19DTURMSU5FX0JPT0w9eQorK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwIHdnLnN1Y2Nlc3M9dHR5UzEiCisrQ09ORklHX0ZSQU1FX1dBUk49MTI4MAorLS0tIC9kZXYvbnVsbAorKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL3FlbXUvYXJjaC9taXBzZWwuY29uZmlnCitAQCAtMCwwICsxLDEyIEBACisrQ09ORklHX0NQVV9NSVBTMzJfUjI9eQorK0NPTkZJR19NSVBTX01BTFRBPXkKKytDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQorK0NPTkZJR19NSVBTX0NQUz15CisrQ09ORklHX01JUFNfRlBfU1VQUE9SVD15CisrQ09ORklHX1BPV0VSX1JFU0VUPXkKKytDT05GSUdfUE9XRVJfUkVTRVRfU1lTQ09OPXkKKytDT05GSUdfU0VSSUFMXzgyNTA9eQorK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKKytDT05GSUdfQ01ETElORV9CT09MPXkKKytDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCB3Zy5zdWNjZXNzPXR0eVMxIgorK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9xZW11L2FyY2gvcG93ZXJwYy5jb25maWcKK0BAIC0wLDAgKzEsMTAgQEAKKytDT05GSUdfUFBDX1FFTVVfRTUwMD15CisrQ09ORklHX0ZTTF9TT0NfQk9PS0U9eQorK0NPTkZJR19QUENfODV4eD15CisrQ09ORklHX1BIWVNfNjRCSVQ9eQorK0NPTkZJR19TRVJJQUxfODI1MD15CisrQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorK0NPTkZJR19NQVRIX0VNVUxBVElPTj15CisrQ09ORklHX0NNRExJTkVfQk9PTD15CisrQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzAgd2cuc3VjY2Vzcz10dHlTMSIKKytDT05GSUdfRlJBTUVfV0FSTj0xMDI0CistLS0gL2Rldi9udWxsCisrKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvcWVtdS9hcmNoL3Bvd2VycGM2NGxlLmNvbmZpZworQEAgLTAsMCArMSwxMiBAQAorK0NPTkZJR19QUEM2ND15CisrQ09ORklHX1BQQ19QU0VSSUVTPXkKKytDT05GSUdfQUxUSVZFQz15CisrQ09ORklHX1ZTWD15CisrQ09ORklHX1BQQ19PRl9CT09UX1RSQU1QT0xJTkU9eQorK0NPTkZJR19QUENfUkFESVhfTU1VPXkKKytDT05GSUdfSFZDX0NPTlNPTEU9eQorK0NPTkZJR19DUFVfTElUVExFX0VORElBTj15CisrQ09ORklHX0NNRExJTkVfQk9PTD15CisrQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9aHZjMCB3Zy5zdWNjZXNzPWh2YzEiCisrQ09ORklHX1NFQ1RJT05fTUlTTUFUQ0hfV0FSTl9PTkxZPXkKKytDT05GSUdfRlJBTUVfV0FSTj0xMjgwCistLS0gL2Rldi9udWxsCisrKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvcWVtdS9hcmNoL3g4Nl82NC5jb25maWcKK0BAIC0wLDAgKzEsNSBAQAorK0NPTkZJR19TRVJJQUxfODI1MD15CisrQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorK0NPTkZJR19DTURMSU5FX0JPT0w9eQorK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwIHdnLnN1Y2Nlc3M9dHR5UzEiCisrQ09ORklHX0ZSQU1FX1dBUk49MTI4MAorLS0tIC9kZXYvbnVsbAorKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL3FlbXUvZGVidWcuY29uZmlnCitAQCAtMCwwICsxLDY3IEBACisrQ09ORklHX0xPQ0FMVkVSU0lPTj0iLWRlYnVnIgorK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKKytDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKytDT05GSUdfU1RBQ0tfVkFMSURBVElPTj15CisrQ09ORklHX0RFQlVHX0tFUk5FTD15CisrQ09ORklHX0RFQlVHX0lORk89eQorK0NPTkZJR19ERUJVR19JTkZPX0RXQVJGND15CisrQ09ORklHX1BBR0VfRVhURU5TSU9OPXkKKytDT05GSUdfUEFHRV9QT0lTT05JTkc9eQorK0NPTkZJR19ERUJVR19PQkpFQ1RTPXkKKytDT05GSUdfREVCVUdfT0JKRUNUU19GUkVFPXkKKytDT05GSUdfREVCVUdfT0JKRUNUU19USU1FUlM9eQorK0NPTkZJR19ERUJVR19PQkpFQ1RTX1dPUks9eQorK0NPTkZJR19ERUJVR19PQkpFQ1RTX1JDVV9IRUFEPXkKKytDT05GSUdfREVCVUdfT0JKRUNUU19QRVJDUFVfQ09VTlRFUj15CisrQ09ORklHX0RFQlVHX09CSkVDVFNfRU5BQkxFX0RFRkFVTFQ9MQorK0NPTkZJR19TTFVCX0RFQlVHX09OPXkKKytDT05GSUdfREVCVUdfVk09eQorK0NPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CisrQ09ORklHX0hBVkVfREVCVUdfU1RBQ0tPVkVSRkxPVz15CisrQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQorK0NPTkZJR19IQVZFX0FSQ0hfS01FTUNIRUNLPXkKKytDT05GSUdfSEFWRV9BUkNIX0tBU0FOPXkKKytDT05GSUdfS0FTQU49eQorK0NPTkZJR19LQVNBTl9JTkxJTkU9eQorK0NPTkZJR19VQlNBTj15CisrQ09ORklHX1VCU0FOX1NBTklUSVpFX0FMTD15CisrQ09ORklHX1VCU0FOX05PX0FMSUdOTUVOVD15CisrQ09ORklHX1VCU0FOX05VTEw9eQorK0NPTkZJR19ERUJVR19LTUVNTEVBSz15CisrQ09ORklHX0RFQlVHX0tNRU1MRUFLX0VBUkxZX0xPR19TSVpFPTgxOTIKKytDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0U9eQorK0NPTkZJR19ERUJVR19TSElSUT15CisrQ09ORklHX1dRX1dBVENIRE9HPXkKKytDT05GSUdfU0NIRURfREVCVUc9eQorK0NPTkZJR19TQ0hFRF9JTkZPPXkKKytDT05GSUdfU0NIRURTVEFUUz15CisrQ09ORklHX1NDSEVEX1NUQUNLX0VORF9DSEVDSz15CisrQ09ORklHX0RFQlVHX1RJTUVLRUVQSU5HPXkKKytDT05GSUdfVElNRVJfU1RBVFM9eQorK0NPTkZJR19ERUJVR19QUkVFTVBUPXkKKytDT05GSUdfREVCVUdfUlRfTVVURVhFUz15CisrQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKKytDT05GSUdfREVCVUdfTVVURVhFUz15CisrQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0M9eQorK0NPTkZJR19QUk9WRV9MT0NLSU5HPXkKKytDT05GSUdfTE9DS0RFUD15CisrQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUD15CisrQ09ORklHX1RSQUNFX0lSUUZMQUdTPXkKKytDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CisrQ09ORklHX0RFQlVHX0xJU1Q9eQorK0NPTkZJR19ERUJVR19QSV9MSVNUPXkKKytDT05GSUdfUFJPVkVfUkNVPXkKKytDT05GSUdfU1BBUlNFX1JDVV9QT0lOVEVSPXkKKytDT05GSUdfUkNVX0NQVV9TVEFMTF9USU1FT1VUPTIxCisrQ09ORklHX1JDVV9UUkFDRT15CisrQ09ORklHX1JDVV9FUVNfREVCVUc9eQorK0NPTkZJR19VU0VSX1NUQUNLVFJBQ0VfU1VQUE9SVD15CisrQ09ORklHX0RFQlVHX1NHPXkKKytDT05GSUdfREVCVUdfTk9USUZJRVJTPXkKKytDT05GSUdfRE9VQkxFRkFVTFQ9eQorK0NPTkZJR19YODZfREVCVUdfRlBVPXkKKytDT05GSUdfREVCVUdfU0VDVElPTl9NSVNNQVRDSD15CisrQ09ORklHX0RFQlVHX1BBR0VBTExPQz15CisrQ09ORklHX0RFQlVHX1BBR0VBTExPQ19FTkFCTEVfREVGQVVMVD15CisrQ09ORklHX0RFQlVHX1dXX01VVEVYX1NMT1dQQVRIPXkKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9xZW11L2luaXQuYworQEAgLTAsMCArMSwyODQgQEAKKysvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorKy8qCisrICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKyAqLworKworKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKysjaW5jbHVkZSA8dW5pc3RkLmg+CisrI2luY2x1ZGUgPGVycm5vLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RkYm9vbC5oPgorKyNpbmNsdWRlIDxmY250bC5oPgorKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorKyNpbmNsdWRlIDxzeXMvbW91bnQuaD4KKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxzeXMvaW8uaD4KKysjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisrI2luY2x1ZGUgPHN5cy9yZWJvb3QuaD4KKysjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKysjaW5jbHVkZSA8c3lzL3NlbmRmaWxlLmg+CisrI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisrCisrX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKSBzdGF0aWMgdm9pZCBwb3dlcm9mZih2b2lkKQorK3sKKysJZmZsdXNoKHN0ZG91dCk7CisrCWZmbHVzaChzdGRlcnIpOworKwlyZWJvb3QoUkJfQVVUT0JPT1QpOworKwlzbGVlcCgzMCk7CisrCWZwcmludGYoc3RkZXJyLCAiXHgxYlszN21ceDFiWzQxbVx4MWJbMW1GYWlsZWQgdG8gcG93ZXIgb2ZmISEhXHgxYlswbVxuIik7CisrCWV4aXQoMSk7CisrfQorKworK3N0YXRpYyB2b2lkIHBhbmljKGNvbnN0IGNoYXIgKndoYXQpCisreworKwlmcHJpbnRmKHN0ZGVyciwgIlxuXG5ceDFiWzM3bVx4MWJbNDFtXHgxYlsxbVNPTUVUSElORyBXRU5UIEhPUlJJQkxZIFdST05HXHgxYlswbVxuXG4gICAgXHgxYlszMW1ceDFiWzFtJXM6ICVzXHgxYlswbVxuXG5ceDFiWzM3bVx4MWJbNDRtXHgxYlsxbVBvd2VyIG9mZi4uLlx4MWJbMG1cblxuIiwgd2hhdCwgc3RyZXJyb3IoZXJybm8pKTsKKysJcG93ZXJvZmYoKTsKKyt9CisrCisrI2RlZmluZSBwcmV0dHlfbWVzc2FnZShtc2cpIHB1dHMoIlx4MWJbMzJtXHgxYlsxbSIgbXNnICJceDFiWzBtIikKKysKKytzdGF0aWMgdm9pZCBwcmludF9iYW5uZXIodm9pZCkKKyt7CisrCXN0cnVjdCB1dHNuYW1lIHV0c25hbWU7CisrCWludCBsZW47CisrCisrCWlmICh1bmFtZSgmdXRzbmFtZSkgPCAwKQorKwkJcGFuaWMoInVuYW1lIik7CisrCisrCWxlbiA9IHN0cmxlbigiICAgIFdpcmVHdWFyZCBUZXN0IFN1aXRlIG9uICAgICAgICIpICsgc3RybGVuKHV0c25hbWUuc3lzbmFtZSkgKyBzdHJsZW4odXRzbmFtZS5yZWxlYXNlKSArIHN0cmxlbih1dHNuYW1lLm1hY2hpbmUpOworKwlwcmludGYoIlx4MWJbNDVtXHgxYlszM21ceDFiWzFtJSouc1x4MWJbMG1cblx4MWJbNDVtXHgxYlszM21ceDFiWzFtICAgIFdpcmVHdWFyZCBUZXN0IFN1aXRlIG9uICVzICVzICVzICAgIFx4MWJbMG1cblx4MWJbNDVtXHgxYlszM21ceDFiWzFtJSouc1x4MWJbMG1cblxuIiwgbGVuLCAiIiwgdXRzbmFtZS5zeXNuYW1lLCB1dHNuYW1lLnJlbGVhc2UsIHV0c25hbWUubWFjaGluZSwgbGVuLCAiIik7CisrfQorKworK3N0YXRpYyB2b2lkIHNlZWRfcm5nKHZvaWQpCisreworKwlpbnQgZmQ7CisrCXN0cnVjdCB7CisrCQlpbnQgZW50cm9weV9jb3VudDsKKysJCWludCBidWZmZXJfc2l6ZTsKKysJCXVuc2lnbmVkIGNoYXIgYnVmZmVyWzI1Nl07CisrCX0gZW50cm9weSA9IHsKKysJCS5lbnRyb3B5X2NvdW50ID0gc2l6ZW9mKGVudHJvcHkuYnVmZmVyKSAqIDgsCisrCQkuYnVmZmVyX3NpemUgPSBzaXplb2YoZW50cm9weS5idWZmZXIpLAorKwkJLmJ1ZmZlciA9ICJBZGRpbmcgcmVhbCBlbnRyb3B5IGlzIG5vdCBhY3R1YWxseSBpbXBvcnRhbnQgZm9yIHRoZXNlIHRlc3RzLiBEb24ndCB0cnkgdGhpcyBhdCBob21lLCBraWRzISIKKysJfTsKKysKKysJaWYgKG1rbm9kKCIvZGV2L3VyYW5kb20iLCBTX0lGQ0hSIHwgMDY0NCwgbWFrZWRldigxLCA5KSkpCisrCQlwYW5pYygibWtub2QoL2Rldi91cmFuZG9tKSIpOworKwlmZCA9IG9wZW4oIi9kZXYvdXJhbmRvbSIsIE9fV1JPTkxZKTsKKysJaWYgKGZkIDwgMCkKKysJCXBhbmljKCJvcGVuKHVyYW5kb20pIik7CisrCWZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyArK2kpIHsKKysJCWlmIChpb2N0bChmZCwgUk5EQURERU5UUk9QWSwgJmVudHJvcHkpIDwgMCkKKysJCQlwYW5pYygiaW9jdGwodXJhbmRvbSkiKTsKKysJfQorKwljbG9zZShmZCk7CisrfQorKworK3N0YXRpYyB2b2lkIG1vdW50X2ZpbGVzeXN0ZW1zKHZvaWQpCisreworKwlwcmV0dHlfbWVzc2FnZSgiWytdIE1vdW50aW5nIGZpbGVzeXN0ZW1zLi4uIik7CisrCW1rZGlyKCIvZGV2IiwgMDc1NSk7CisrCW1rZGlyKCIvcHJvYyIsIDA3NTUpOworKwlta2RpcigiL3N5cyIsIDA3NTUpOworKwlta2RpcigiL3RtcCIsIDA3NTUpOworKwlta2RpcigiL3J1biIsIDA3NTUpOworKwlta2RpcigiL3ZhciIsIDA3NTUpOworKwlpZiAobW91bnQoIm5vbmUiLCAiL2RldiIsICJkZXZ0bXBmcyIsIDAsIE5VTEwpKQorKwkJcGFuaWMoImRldnRtcGZzIG1vdW50Iik7CisrCWlmIChtb3VudCgibm9uZSIsICIvcHJvYyIsICJwcm9jIiwgMCwgTlVMTCkpCisrCQlwYW5pYygicHJvY2ZzIG1vdW50Iik7CisrCWlmIChtb3VudCgibm9uZSIsICIvc3lzIiwgInN5c2ZzIiwgMCwgTlVMTCkpCisrCQlwYW5pYygic3lzZnMgbW91bnQiKTsKKysJaWYgKG1vdW50KCJub25lIiwgIi90bXAiLCAidG1wZnMiLCAwLCBOVUxMKSkKKysJCXBhbmljKCJ0bXBmcyBtb3VudCIpOworKwlpZiAobW91bnQoIm5vbmUiLCAiL3J1biIsICJ0bXBmcyIsIDAsIE5VTEwpKQorKwkJcGFuaWMoInRtcGZzIG1vdW50Iik7CisrCWlmIChtb3VudCgibm9uZSIsICIvc3lzL2tlcm5lbC9kZWJ1ZyIsICJkZWJ1Z2ZzIiwgMCwgTlVMTCkpCisrCQk7IC8qIE5vdCBhIHByb2JsZW0gaWYgaXQgZmFpbHMuKi8KKysJaWYgKHN5bWxpbmsoIi9ydW4iLCAiL3Zhci9ydW4iKSkKKysJCXBhbmljKCJydW4gc3ltbGluayIpOworKwlpZiAoc3ltbGluaygiL3Byb2Mvc2VsZi9mZCIsICIvZGV2L2ZkIikpCisrCQlwYW5pYygiZmQgc3ltbGluayIpOworK30KKysKKytzdGF0aWMgdm9pZCBlbmFibGVfbG9nZ2luZyh2b2lkKQorK3sKKysJaW50IGZkOworKwlwcmV0dHlfbWVzc2FnZSgiWytdIEVuYWJsaW5nIGxvZ2dpbmcuLi4iKTsKKysJZmQgPSBvcGVuKCIvcHJvYy9zeXMva2VybmVsL3ByaW50ayIsIE9fV1JPTkxZKTsKKysJaWYgKGZkID49IDApIHsKKysJCWlmICh3cml0ZShmZCwgIjlcbiIsIDIpICE9IDIpCisrCQkJcGFuaWMoIndyaXRlKHByaW50aykiKTsKKysJCWNsb3NlKGZkKTsKKysJfQorKwlmZCA9IG9wZW4oIi9wcm9jL3N5cy9kZWJ1Zy9leGNlcHRpb24tdHJhY2UiLCBPX1dST05MWSk7CisrCWlmIChmZCA+PSAwKSB7CisrCQlpZiAod3JpdGUoZmQsICIxXG4iLCAyKSAhPSAyKQorKwkJCXBhbmljKCJ3cml0ZShleGNlcHRpb24tdHJhY2UpIik7CisrCQljbG9zZShmZCk7CisrCX0KKysJZmQgPSBvcGVuKCIvcHJvYy9zeXMva2VybmVsL3BhbmljX29uX3dhcm4iLCBPX1dST05MWSk7CisrCWlmIChmZCA+PSAwKSB7CisrCQlpZiAod3JpdGUoZmQsICIxXG4iLCAyKSAhPSAyKQorKwkJCXBhbmljKCJ3cml0ZShwYW5pY19vbl93YXJuKSIpOworKwkJY2xvc2UoZmQpOworKwl9CisrfQorKworK3N0YXRpYyB2b2lkIGttb2Rfc2VsZnRlc3RzKHZvaWQpCisreworKwlGSUxFICpmaWxlOworKwljaGFyIGxpbmVbMjA0OF0sICpzdGFydCwgKnBhc3M7CisrCWJvb2wgc3VjY2VzcyA9IHRydWU7CisrCXByZXR0eV9tZXNzYWdlKCJbK10gTW9kdWxlIHNlbGYtdGVzdHM6Iik7CisrCWZpbGUgPSBmb3BlbigiL3Byb2Mva21zZyIsICJyIik7CisrCWlmICghZmlsZSkKKysJCXBhbmljKCJmb3BlbihrbXNnKSIpOworKwlpZiAoZmNudGwoZmlsZW5vKGZpbGUpLCBGX1NFVEZMLCBPX05PTkJMT0NLKSA8IDApCisrCQlwYW5pYygiZmNudGwoa21zZywgbm9uYmxvY2spIik7CisrCXdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGZpbGUpKSB7CisrCQlzdGFydCA9IHN0cnN0cihsaW5lLCAid2lyZWd1YXJkOiAiKTsKKysJCWlmICghc3RhcnQpCisrCQkJY29udGludWU7CisrCQlzdGFydCArPSAxMTsKKysJCSpzdHJjaHJudWwoc3RhcnQsICdcbicpID0gJ1wwJzsKKysJCWlmIChzdHJzdHIoc3RhcnQsICJ3d3cud2lyZWd1YXJkLmNvbSIpKQorKwkJCWJyZWFrOworKwkJcGFzcyA9IHN0cnN0cihzdGFydCwgIjogcGFzcyIpOworKwkJaWYgKCFwYXNzIHx8IHBhc3NbNl0gIT0gJ1wwJykgeworKwkJCXN1Y2Nlc3MgPSBmYWxzZTsKKysJCQlwcmludGYoIiBceDFiWzMxbSogICVzXHgxYlswbVxuIiwgc3RhcnQpOworKwkJfSBlbHNlCisrCQkJcHJpbnRmKCIgXHgxYlszMm0qICAlc1x4MWJbMG1cbiIsIHN0YXJ0KTsKKysJfQorKwlmY2xvc2UoZmlsZSk7CisrCWlmICghc3VjY2VzcykgeworKwkJcHV0cygiXHgxYlszMW1ceDFiWzFtWy1dIFRlc3RzIGZhaWxlZCEgXHUyNjM5XHgxYlswbSIpOworKwkJcG93ZXJvZmYoKTsKKysJfQorK30KKysKKytzdGF0aWMgdm9pZCBsYXVuY2hfdGVzdHModm9pZCkKKyt7CisrCWNoYXIgY21kbGluZVs0MDk2XSwgKnN1Y2Nlc3NfZGV2OworKwlpbnQgc3RhdHVzLCBmZDsKKysJcGlkX3QgcGlkOworKworKwlwcmV0dHlfbWVzc2FnZSgiWytdIExhdW5jaGluZyB0ZXN0cy4uLiIpOworKwlwaWQgPSBmb3JrKCk7CisrCWlmIChwaWQgPT0gLTEpCisrCQlwYW5pYygiZm9yayIpOworKwllbHNlIGlmIChwaWQgPT0gMCkgeworKwkJZXhlY2woIi9pbml0LnNoIiwgImluaXQiLCBOVUxMKTsKKysJCXBhbmljKCJleGVjIik7CisrCX0KKysJaWYgKHdhaXRwaWQocGlkLCAmc3RhdHVzLCAwKSA8IDApCisrCQlwYW5pYygid2FpdHBpZCIpOworKwlpZiAoV0lGRVhJVEVEKHN0YXR1cykgJiYgV0VYSVRTVEFUVVMoc3RhdHVzKSA9PSAwKSB7CisrCQlwcmV0dHlfbWVzc2FnZSgiWytdIFRlc3RzIHN1Y2Nlc3NmdWwhIDotKSIpOworKwkJZmQgPSBvcGVuKCIvcHJvYy9jbWRsaW5lIiwgT19SRE9OTFkpOworKwkJaWYgKGZkIDwgMCkKKysJCQlwYW5pYygib3BlbigvcHJvYy9jbWRsaW5lKSIpOworKwkJaWYgKHJlYWQoZmQsIGNtZGxpbmUsIHNpemVvZihjbWRsaW5lKSAtIDEpIDw9IDApCisrCQkJcGFuaWMoInJlYWQoL3Byb2MvY21kbGluZSkiKTsKKysJCWNtZGxpbmVbc2l6ZW9mKGNtZGxpbmUpIC0gMV0gPSAnXDAnOworKwkJZm9yIChzdWNjZXNzX2RldiA9IHN0cnRvayhjbWRsaW5lLCAiIFxuIik7IHN1Y2Nlc3NfZGV2OyBzdWNjZXNzX2RldiA9IHN0cnRvayhOVUxMLCAiIFxuIikpIHsKKysJCQlpZiAoc3RybmNtcChzdWNjZXNzX2RldiwgIndnLnN1Y2Nlc3M9IiwgMTEpKQorKwkJCQljb250aW51ZTsKKysJCQltZW1jcHkoc3VjY2Vzc19kZXYgKyAxMSAtIDUsICIvZGV2LyIsIDUpOworKwkJCXN1Y2Nlc3NfZGV2ICs9IDExIC0gNTsKKysJCQlicmVhazsKKysJCX0KKysJCWlmICghc3VjY2Vzc19kZXYgfHwgIXN0cmxlbihzdWNjZXNzX2RldikpCisrCQkJcGFuaWMoIlVuYWJsZSB0byBmaW5kIHN1Y2Nlc3MgZGV2aWNlIik7CisrCisrCQlmZCA9IG9wZW4oc3VjY2Vzc19kZXYsIE9fV1JPTkxZKTsKKysJCWlmIChmZCA8IDApCisrCQkJcGFuaWMoIm9wZW4oc3VjY2Vzc19kZXYpIik7CisrCQlpZiAod3JpdGUoZmQsICJzdWNjZXNzXG4iLCA4KSAhPSA4KQorKwkJCXBhbmljKCJ3cml0ZShzdWNjZXNzX2RldikiKTsKKysJCWNsb3NlKGZkKTsKKysJfSBlbHNlIHsKKysJCWNvbnN0IGNoYXIgKndoeSA9ICJ1bmtub3duIGNhdXNlIjsKKysJCWludCB3aGF0ID0gLTE7CisrCisrCQlpZiAoV0lGRVhJVEVEKHN0YXR1cykpIHsKKysJCQl3aHkgPSAiZXhpdCBjb2RlIjsKKysJCQl3aGF0ID0gV0VYSVRTVEFUVVMoc3RhdHVzKTsKKysJCX0gZWxzZSBpZiAoV0lGU0lHTkFMRUQoc3RhdHVzKSkgeworKwkJCXdoeSA9ICJzaWduYWwiOworKwkJCXdoYXQgPSBXVEVSTVNJRyhzdGF0dXMpOworKwkJfQorKwkJcHJpbnRmKCJceDFiWzMxbVx4MWJbMW1bLV0gVGVzdHMgZmFpbGVkIHdpdGggJXMgJWQhIFx1MjYzOVx4MWJbMG1cbiIsIHdoeSwgd2hhdCk7CisrCX0KKyt9CisrCisrc3RhdGljIHZvaWQgZW5zdXJlX2NvbnNvbGUodm9pZCkKKyt7CisrCWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7CisrCQlpbnQgZmQgPSBvcGVuKCIvZGV2L2NvbnNvbGUiLCBPX1JEV1IpOworKwkJaWYgKGZkIDwgMCkgeworKwkJCXVzbGVlcCg1MDAwMCk7CisrCQkJY29udGludWU7CisrCQl9CisrCQlkdXAyKGZkLCAwKTsKKysJCWR1cDIoZmQsIDEpOworKwkJZHVwMihmZCwgMik7CisrCQljbG9zZShmZCk7CisrCQlpZiAod3JpdGUoMSwgIlwwXDBcMFwwXG4iLCA1KSA9PSA1KQorKwkJCXJldHVybjsKKysJfQorKwlwYW5pYygiVW5hYmxlIHRvIG9wZW4gY29uc29sZSBkZXZpY2UiKTsKKyt9CisrCisrc3RhdGljIHZvaWQgY2xlYXJfbGVha3Modm9pZCkKKyt7CisrCWludCBmZDsKKysKKysJZmQgPSBvcGVuKCIvc3lzL2tlcm5lbC9kZWJ1Zy9rbWVtbGVhayIsIE9fV1JPTkxZKTsKKysJaWYgKGZkIDwgMCkKKysJCXJldHVybjsKKysJcHJldHR5X21lc3NhZ2UoIlsrXSBTdGFydGluZyBtZW1vcnkgbGVhayBkZXRlY3Rpb24uLi4iKTsKKysJd3JpdGUoZmQsICJjbGVhclxuIiwgNSk7CisrCWNsb3NlKGZkKTsKKyt9CisrCisrc3RhdGljIHZvaWQgY2hlY2tfbGVha3Modm9pZCkKKyt7CisrCWludCBmZDsKKysKKysJZmQgPSBvcGVuKCIvc3lzL2tlcm5lbC9kZWJ1Zy9rbWVtbGVhayIsIE9fV1JPTkxZKTsKKysJaWYgKGZkIDwgMCkKKysJCXJldHVybjsKKysJcHJldHR5X21lc3NhZ2UoIlsrXSBTY2FubmluZyBmb3IgbWVtb3J5IGxlYWtzLi4uIik7CisrCXNsZWVwKDIpOyAvKiBXYWl0IGZvciBhbnkgZ3JhY2UgcGVyaW9kcy4gKi8KKysJd3JpdGUoZmQsICJzY2FuXG4iLCA1KTsKKysJY2xvc2UoZmQpOworKworKwlmZCA9IG9wZW4oIi9zeXMva2VybmVsL2RlYnVnL2ttZW1sZWFrIiwgT19SRE9OTFkpOworKwlpZiAoZmQgPCAwKQorKwkJcmV0dXJuOworKwlpZiAoc2VuZGZpbGUoMSwgZmQsIE5VTEwsIDB4N2ZmZmYwMDApID4gMCkKKysJCXBhbmljKCJNZW1vcnkgbGVha3MgZW5jb3VudGVyZWQiKTsKKysJY2xvc2UoZmQpOworK30KKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorK3sKKysJc2VlZF9ybmcoKTsKKysJZW5zdXJlX2NvbnNvbGUoKTsKKysJcHJpbnRfYmFubmVyKCk7CisrCW1vdW50X2ZpbGVzeXN0ZW1zKCk7CisrCWttb2Rfc2VsZnRlc3RzKCk7CisrCWVuYWJsZV9sb2dnaW5nKCk7CisrCWNsZWFyX2xlYWtzKCk7CisrCWxhdW5jaF90ZXN0cygpOworKwljaGVja19sZWFrcygpOworKwlwb3dlcm9mZigpOworKwlyZXR1cm4gMTsKKyt9CistLS0gL2Rldi9udWxsCisrKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvcWVtdS9rZXJuZWwuY29uZmlnCitAQCAtMCwwICsxLDg2IEBACisrQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorK0NPTkZJR19ORVQ9eQorK0NPTkZJR19ORVRERVZJQ0VTPXkKKytDT05GSUdfTkVUX0NPUkU9eQorK0NPTkZJR19ORVRfSVBJUD15CisrQ09ORklHX0RVTU1ZPXkKKytDT05GSUdfVkVUSD15CisrQ09ORklHX01VTFRJVVNFUj15CisrQ09ORklHX05BTUVTUEFDRVM9eQorK0NPTkZJR19ORVRfTlM9eQorK0NPTkZJR19VTklYPXkKKytDT05GSUdfSU5FVD15CisrQ09ORklHX0lQVjY9eQorK0NPTkZJR19ORVRGSUxURVI9eQorK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQorK0NPTkZJR19ORl9DT05OVFJBQ0s9eQorK0NPTkZJR19ORl9OQVQ9eQorK0NPTkZJR19ORVRGSUxURVJfWFRBQkxFUz15CisrQ09ORklHX05FVEZJTFRFUl9YVF9OQVQ9eQorK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPXkKKytDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9eQorK0NPTkZJR19ORl9OQVRfSVBWND15CisrQ09ORklHX0lQX05GX0lQVEFCTEVTPXkKKytDT05GSUdfSVBfTkZfRklMVEVSPXkKKytDT05GSUdfSVBfTkZfTkFUPXkKKytDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKKytDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTPXkKKytDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVM9eQorK0NPTkZJR19UVFk9eQorK0NPTkZJR19CSU5GTVRfRUxGPXkKKytDT05GSUdfQklORk1UX1NDUklQVD15CisrQ09ORklHX1ZEU089eQorK0NPTkZJR19WSVJUVUFMSVpBVElPTj15CisrQ09ORklHX0hZUEVSVklTT1JfR1VFU1Q9eQorK0NPTkZJR19QQVJBVklSVD15CisrQ09ORklHX0tWTV9HVUVTVD15CisrQ09ORklHX1BBUkFWSVJUX1NQSU5MT0NLUz15CisrQ09ORklHX1BSSU5USz15CisrQ09ORklHX0tBTExTWU1TPXkKKytDT05GSUdfQlVHPXkKKytDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1BFUkZPUk1BTkNFPXkKKytDT05GSUdfRU1CRURERUQ9bgorK0NPTkZJR19CQVNFX0ZVTEw9eQorK0NPTkZJR19GVVRFWD15CisrQ09ORklHX1NITUVNPXkKKytDT05GSUdfU0xVQj15CisrQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQPXkKKytDT05GSUdfU01QPXkKKytDT05GSUdfU0NIRURfU01UPXkKKytDT05GSUdfU0NIRURfTUM9eQorK0NPTkZJR19OVU1BPXkKKytDT05GSUdfUFJFRU1QVD15CisrQ09ORklHX05PX0haPXkKKytDT05GSUdfTk9fSFpfSURMRT15CisrQ09ORklHX05PX0haX0ZVTEw9bgorK0NPTkZJR19IWl9QRVJJT0RJQz1uCisrQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CisrQ09ORklHX0FSQ0hfUkFORE9NPXkKKytDT05GSUdfRklMRV9MT0NLSU5HPXkKKytDT05GSUdfUE9TSVhfVElNRVJTPXkKKytDT05GSUdfREVWVE1QRlM9eQorK0NPTkZJR19QUk9DX0ZTPXkKKytDT05GSUdfUFJPQ19TWVNDVEw9eQorK0NPTkZJR19TWVNGUz15CisrQ09ORklHX1RNUEZTPXkKKytDT05GSUdfQ09OU09MRV9MT0dMRVZFTF9ERUZBVUxUPTE1CisrQ09ORklHX1BSSU5US19USU1FPXkKKytDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorK0NPTkZJR19MRUdBQ1lfVlNZU0NBTExfTk9ORT15CisrQ09ORklHX0tFUk5FTF9HWklQPXkKKytDT05GSUdfUEFOSUNfT05fT09QUz15CisrQ09ORklHX0JVR19PTl9EQVRBX0NPUlJVUFRJT049eQorK0NPTkZJR19MT0NLVVBfREVURUNUT1I9eQorK0NPTkZJR19TT0ZUTE9DS1VQX0RFVEVDVE9SPXkKKytDT05GSUdfSEFSRExPQ0tVUF9ERVRFQ1RPUj15CisrQ09ORklHX1dRX1dBVENIRE9HPXkKKytDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisrQ09ORklHX0JPT1RQQVJBTV9IQVJETE9DS1VQX1BBTklDPXkKKytDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUM9eQorK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDPXkKKytDT05GSUdfUEFOSUNfVElNRU9VVD0tMQorK0NPTkZJR19TVEFDS1RSQUNFPXkKKytDT05GSUdfRUFSTFlfUFJJTlRLPXkKKytDT05GSUdfR0RCX1NDUklQVFM9eQorK0NPTkZJR19XSVJFR1VBUkQ9eQorK0NPTkZJR19XSVJFR1VBUkRfREVCVUc9eQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA3NC13aXJlZ3VhcmQtS2NvbmZpZy1zZWxlY3QtcGFyZW50LWRlcGVuZGVuY3ktZm9yLWNyeXB0LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA3NC13aXJlZ3VhcmQtS2NvbmZpZy1zZWxlY3QtcGFyZW50LWRlcGVuZGVuY3ktZm9yLWNyeXB0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZjhmNzcKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDc0LXdpcmVndWFyZC1LY29uZmlnLXNlbGVjdC1wYXJlbnQtZGVwZW5kZW5jeS1mb3ItY3J5cHQucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIkphc29uIEEuIERvbmVuZmVsZCIgPEphc29uQHp4MmM0LmNvbT4KK0RhdGU6IFN1biwgMTUgRGVjIDIwMTkgMjI6MDg6MDEgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gd2lyZWd1YXJkOiBLY29uZmlnOiBzZWxlY3QgcGFyZW50IGRlcGVuZGVuY3kgZm9yIGNyeXB0bworCitjb21taXQgZDdjNjhhMzhiYjRmOWI3YzFhMmU0YTc3Mjg3MmM3NTJlZTVjNDRhNiB1cHN0cmVhbS4KKworVGhpcyBmaXhlcyB0aGUgY3J5cHRvIHNlbGVjdGlvbiBzdWJtZW51IGRlcGVuZW5jaWVzLiBPdGhlcndpc2UsIHdlJ2QKK3dpbmQgdXAgaXNzdWluZyB3YXJuaW5ncyBpbiB3aGljaCBjZXJ0YWluIGRlcGVuZGVuY2llcyB3ZSBhbHNvIHNlbGVjdAorY291bGRuJ3QgYmUgc2F0aXNmaWVkLiBUaGlzIGNvbmRpdGlvbiB3YXMgdHJpZ2dlcmVkIGJ5IHRoZSBhZGRpdGlvbiBvZgordGhlIHRlc3Qgc3VpdGUgYXV0b2J1aWxkZXIgaW4gdGhlIHByZXZpb3VzIGNvbW1pdC4KKworU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CitTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGRyaXZlcnMvbmV0L0tjb25maWcgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCistLS0gYS9kcml2ZXJzL25ldC9LY29uZmlnCisrKysgYi9kcml2ZXJzL25ldC9LY29uZmlnCitAQCAtODUsNiArODUsOCBAQCBjb25maWcgV0lSRUdVQVJECisgCXNlbGVjdCBDUllQVE9fUE9MWTEzMDVfWDg2XzY0IGlmIFg4NiAmJiA2NEJJVAorIAlzZWxlY3QgQ1JZUFRPX0JMQUtFMlNfWDg2IGlmIFg4NiAmJiA2NEJJVAorIAlzZWxlY3QgQ1JZUFRPX0NVUlZFMjU1MTlfWDg2IGlmIFg4NiAmJiA2NEJJVAorKwlzZWxlY3QgQVJNX0NSWVBUTyBpZiBBUk0KKysJc2VsZWN0IEFSTTY0X0NSWVBUTyBpZiBBUk02NAorIAlzZWxlY3QgQ1JZUFRPX0NIQUNIQTIwX05FT04gaWYgKEFSTSB8fCBBUk02NCkgJiYgS0VSTkVMX01PREVfTkVPTgorIAlzZWxlY3QgQ1JZUFRPX1BPTFkxMzA1X05FT04gaWYgQVJNNjQgJiYgS0VSTkVMX01PREVfTkVPTgorIAlzZWxlY3QgQ1JZUFRPX1BPTFkxMzA1X0FSTSBpZiBBUk0KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNzUtd2lyZWd1YXJkLWdsb2JhbC1maXgtc3BlbGxpbmctbWlzdGFrZXMtaW4tY29tbWVudHMucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDc1LXdpcmVndWFyZC1nbG9iYWwtZml4LXNwZWxsaW5nLW1pc3Rha2VzLWluLWNvbW1lbnRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMzRlNjYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDc1LXdpcmVndWFyZC1nbG9iYWwtZml4LXNwZWxsaW5nLW1pc3Rha2VzLWluLWNvbW1lbnRzLnBhdGNoCkBAIC0wLDAgKzEsNjYgQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpvc2ggU29yZWYgPGpzb3JlZkBnbWFpbC5jb20+CitEYXRlOiBTdW4sIDE1IERlYyAyMDE5IDIyOjA4OjAyICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIHdpcmVndWFyZDogZ2xvYmFsOiBmaXggc3BlbGxpbmcgbWlzdGFrZXMgaW4gY29tbWVudHMKKworY29tbWl0IGEyZWM4YjU3MDY5NDRkMjI4MTgxYzhiOTFkODE1ZjQxZDZkZDhlN2IgdXBzdHJlYW0uCisKK1RoaXMgZml4ZXMgdHdvIHNwZWxsaW5nIGVycm9ycyBpbiBzb3VyY2UgY29kZSBjb21tZW50cy4KKworU2lnbmVkLW9mZi1ieTogSm9zaCBTb3JlZiA8anNvcmVmQGdtYWlsLmNvbT4KK1tKYXNvbjogcmV3cm90ZSBjb21taXQgbWVzc2FnZV0KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorU2lnbmVkLW9mZi1ieTogRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jIHwgMiArLQorIGluY2x1ZGUvdWFwaS9saW51eC93aXJlZ3VhcmQuaCAgfCA4ICsrKystLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMKKysrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMKK0BAIC0zODAsNyArMzgwLDcgQEAgc3RhdGljIHZvaWQgd2dfcGFja2V0X2NvbnN1bWVfZGF0YV9kb25lKAorIAkvKiBXZSd2ZSBhbHJlYWR5IHZlcmlmaWVkIHRoZSBQb2x5MTMwNSBhdXRoIHRhZywgd2hpY2ggbWVhbnMgdGhpcyBwYWNrZXQKKyAJICogd2FzIG5vdCBtb2RpZmllZCBpbiB0cmFuc2l0LiBXZSBjYW4gdGhlcmVmb3JlIHRlbGwgdGhlIG5ldHdvcmtpbmcKKyAJICogc3RhY2sgdGhhdCBhbGwgY2hlY2tzdW1zIG9mIGV2ZXJ5IGxheWVyIG9mIGVuY2Fwc3VsYXRpb24gaGF2ZSBhbHJlYWR5CistCSAqIGJlZW4gY2hlY2tlZCAiYnkgdGhlIGhhcmR3YXJlIiBhbmQgdGhlcmVmb3JlIGlzIHVubmVjY2Vzc2FyeSB0byBjaGVjaworKwkgKiBiZWVuIGNoZWNrZWQgImJ5IHRoZSBoYXJkd2FyZSIgYW5kIHRoZXJlZm9yZSBpcyB1bm5lY2Vzc2FyeSB0byBjaGVjaworIAkgKiBhZ2FpbiBpbiBzb2Z0d2FyZS4KKyAJICovCisgCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CistLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvd2lyZWd1YXJkLmgKKysrKyBiL2luY2x1ZGUvdWFwaS9saW51eC93aXJlZ3VhcmQuaAorQEAgLTE4LDEzICsxOCwxMyBAQAorICAqIG9uZSBidXQgbm90IGJvdGggb2Y6CisgICoKKyAgKiAgICBXR0RFVklDRV9BX0lGSU5ERVg6IE5MQV9VMzIKKy0gKiAgICBXR0RFVklDRV9BX0lGTkFNRTogTkxBX05VTF9TVFJJTkcsIG1heGxlbiBJRk5BTUVTSVogLSAxCisrICogICAgV0dERVZJQ0VfQV9JRk5BTUU6IE5MQV9OVUxfU1RSSU5HLCBtYXhsZW4gSUZOQU1TSVogLSAxCisgICoKKyAgKiBUaGUga2VybmVsIHdpbGwgdGhlbiByZXR1cm4gc2V2ZXJhbCBtZXNzYWdlcyAoTkxNX0ZfTVVMVEkpIGNvbnRhaW5pbmcgdGhlCisgICogZm9sbG93aW5nIHRyZWUgb2YgbmVzdGVkIGl0ZW1zOgorICAqCisgICogICAgV0dERVZJQ0VfQV9JRklOREVYOiBOTEFfVTMyCistICogICAgV0dERVZJQ0VfQV9JRk5BTUU6IE5MQV9OVUxfU1RSSU5HLCBtYXhsZW4gSUZOQU1FU0laIC0gMQorKyAqICAgIFdHREVWSUNFX0FfSUZOQU1FOiBOTEFfTlVMX1NUUklORywgbWF4bGVuIElGTkFNU0laIC0gMQorICAqICAgIFdHREVWSUNFX0FfUFJJVkFURV9LRVk6IE5MQV9FWEFDVF9MRU4sIGxlbiBXR19LRVlfTEVOCisgICogICAgV0dERVZJQ0VfQV9QVUJMSUNfS0VZOiBOTEFfRVhBQ1RfTEVOLCBsZW4gV0dfS0VZX0xFTgorICAqICAgIFdHREVWSUNFX0FfTElTVEVOX1BPUlQ6IE5MQV9VMTYKK0BAIC03Nyw3ICs3Nyw3IEBACisgICogV0dERVZJQ0VfQV9JRklOREVYIGFuZCBXR0RFVklDRV9BX0lGTkFNRToKKyAgKgorICAqICAgIFdHREVWSUNFX0FfSUZJTkRFWDogTkxBX1UzMgorLSAqICAgIFdHREVWSUNFX0FfSUZOQU1FOiBOTEFfTlVMX1NUUklORywgbWF4bGVuIElGTkFNRVNJWiAtIDEKKysgKiAgICBXR0RFVklDRV9BX0lGTkFNRTogTkxBX05VTF9TVFJJTkcsIG1heGxlbiBJRk5BTVNJWiAtIDEKKyAgKiAgICBXR0RFVklDRV9BX0ZMQUdTOiBOTEFfVTMyLCAwIG9yIFdHREVWSUNFX0ZfUkVQTEFDRV9QRUVSUyBpZiBhbGwgY3VycmVudAorICAqICAgICAgICAgICAgICAgICAgICAgIHBlZXJzIHNob3VsZCBiZSByZW1vdmVkIHByaW9yIHRvIGFkZGluZyB0aGUgbGlzdCBiZWxvdy4KKyAgKiAgICBXR0RFVklDRV9BX1BSSVZBVEVfS0VZOiBsZW4gV0dfS0VZX0xFTiwgYWxsIHplcm9zIHRvIHJlbW92ZQorQEAgLTEyMSw3ICsxMjEsNyBAQAorICAqIGZpbGxpbmcgaW4gaW5mb3JtYXRpb24gbm90IGNvbnRhaW5lZCBpbiB0aGUgcHJpb3IuIE5vdGUgdGhhdCBpZgorICAqIFdHREVWSUNFX0ZfUkVQTEFDRV9QRUVSUyBpcyBzcGVjaWZpZWQgaW4gdGhlIGZpcnN0IG1lc3NhZ2UsIGl0IHByb2JhYmx5CisgICogc2hvdWxkIG5vdCBiZSBzcGVjaWZpZWQgaW4gZnJhZ21lbnRzIHRoYXQgY29tZSBhZnRlciwgc28gdGhhdCB0aGUgbGlzdAorLSAqIG9mIHBlZXJzIGlzIG9ubHkgY2xlYXJlZCB0aGUgZmlyc3QgdGltZSBidXQgYXBwZW5lZCBhZnRlci4gTGlrZXdpc2UgZm9yCisrICogb2YgcGVlcnMgaXMgb25seSBjbGVhcmVkIHRoZSBmaXJzdCB0aW1lIGJ1dCBhcHBlbmRlZCBhZnRlci4gTGlrZXdpc2UgZm9yCisgICogcGVlcnMsIGlmIFdHUEVFUl9GX1JFUExBQ0VfQUxMT1dFRElQUyBpcyBzcGVjaWZpZWQgaW4gdGhlIGZpcnN0IG1lc3NhZ2UKKyAgKiBvZiBhIHBlZXIsIGl0IGxpa2VseSBzaG91bGQgbm90IGJlIHNwZWNpZmllZCBpbiBzdWJzZXF1ZW50IGZyYWdtZW50cy4KKyAgKgpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA3Ni13aXJlZ3VhcmQtbWFpbi1yZW1vdmUtdW51c2VkLWluY2x1ZGUtbGludXgtdmVyc2lvbi5oLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA3Ni13aXJlZ3VhcmQtbWFpbi1yZW1vdmUtdW51c2VkLWluY2x1ZGUtbGludXgtdmVyc2lvbi5oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYzBiNTYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDc2LXdpcmVndWFyZC1tYWluLXJlbW92ZS11bnVzZWQtaW5jbHVkZS1saW51eC12ZXJzaW9uLmgucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogWXVlSGFpYmluZyA8eXVlaGFpYmluZ0BodWF3ZWkuY29tPgorRGF0ZTogU3VuLCAxNSBEZWMgMjAxOSAyMjowODowMyArMDEwMAorU3ViamVjdDogW1BBVENIXSB3aXJlZ3VhcmQ6IG1haW46IHJlbW92ZSB1bnVzZWQgaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCitjb21taXQgNDM5NjdiNmZmOTFlNTNiY2NlNWFlMDhjMTZhMDU4OGE0NzViNTNhMSB1cHN0cmVhbS4KKworUmVtb3ZlIDxsaW51eC92ZXJzaW9uLmg+IGZyb20gdGhlIGluY2x1ZGVzIGZvciBtYWluLmMsIHdoaWNoIGlzIHVudXNlZC4KKworU2lnbmVkLW9mZi1ieTogWXVlSGFpYmluZyA8eXVlaGFpYmluZ0BodWF3ZWkuY29tPgorW0phc29uOiByZXdvcmRlZCBjb21taXQgbWVzc2FnZV0KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorU2lnbmVkLW9mZi1ieTogRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvbWFpbi5jIHwgMSAtCisgMSBmaWxlIGNoYW5nZWQsIDEgZGVsZXRpb24oLSkKKworLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL21haW4uYworKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL21haW4uYworQEAgLTEyLDcgKzEyLDYgQEAKKyAKKyAjaW5jbHVkZSA8dWFwaS9saW51eC93aXJlZ3VhcmQuaD4KKyAKKy0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisgI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorICNpbmNsdWRlIDxsaW51eC9nZW5ldGxpbmsuaD4KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNzctd2lyZWd1YXJkLWFsbG93ZWRpcHMtdXNlLWtmcmVlX3JjdS1pbnN0ZWFkLW9mLWNhbGxfci5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNzctd2lyZWd1YXJkLWFsbG93ZWRpcHMtdXNlLWtmcmVlX3JjdS1pbnN0ZWFkLW9mLWNhbGxfci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGQ5MDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA3Ny13aXJlZ3VhcmQtYWxsb3dlZGlwcy11c2Uta2ZyZWVfcmN1LWluc3RlYWQtb2YtY2FsbF9yLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFdlaSBZb25nanVuIDx3ZWl5b25nanVuMUBodWF3ZWkuY29tPgorRGF0ZTogU3VuLCAxNSBEZWMgMjAxOSAyMjowODowNCArMDEwMAorU3ViamVjdDogW1BBVENIXSB3aXJlZ3VhcmQ6IGFsbG93ZWRpcHM6IHVzZSBrZnJlZV9yY3UoKSBpbnN0ZWFkIG9mIGNhbGxfcmN1KCkKKworY29tbWl0IGQ4OWVlN2Q1YzczYWYxNWMxYzZmMTJiMDE2Y2RmNDY5NzQyYjU3MjYgdXBzdHJlYW0uCisKK1RoZSBjYWxsYmFjayBmdW5jdGlvbiBvZiBjYWxsX3JjdSgpIGp1c3QgY2FsbHMgYSBrZnJlZSgpLCBzbyB3ZQorY2FuIHVzZSBrZnJlZV9yY3UoKSBpbnN0ZWFkIG9mIGNhbGxfcmN1KCkgKyBjYWxsYmFjayBmdW5jdGlvbi4KKworU2lnbmVkLW9mZi1ieTogV2VpIFlvbmdqdW4gPHdlaXlvbmdqdW4xQGh1YXdlaS5jb20+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL2FsbG93ZWRpcHMuYyB8IDcgKy0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgNiBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL2FsbG93ZWRpcHMuYworKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL2FsbG93ZWRpcHMuYworQEAgLTMxLDExICszMSw2IEBAIHN0YXRpYyB2b2lkIGNvcHlfYW5kX2Fzc2lnbl9jaWRyKHN0cnVjdAorICNkZWZpbmUgQ0hPT1NFX05PREUocGFyZW50LCBrZXkpIFwKKyAJcGFyZW50LT5iaXRbKGtleVtwYXJlbnQtPmJpdF9hdF9hXSA+PiBwYXJlbnQtPmJpdF9hdF9iKSAmIDFdCisgCistc3RhdGljIHZvaWQgbm9kZV9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkKKy17CistCWtmcmVlKGNvbnRhaW5lcl9vZihyY3UsIHN0cnVjdCBhbGxvd2VkaXBzX25vZGUsIHJjdSkpOworLX0KKy0KKyBzdGF0aWMgdm9pZCBwdXNoX3JjdShzdHJ1Y3QgYWxsb3dlZGlwc19ub2RlICoqc3RhY2ssCisgCQkgICAgIHN0cnVjdCBhbGxvd2VkaXBzX25vZGUgX19yY3UgKnAsIHVuc2lnbmVkIGludCAqbGVuKQorIHsKK0BAIC0xMTIsNyArMTA3LDcgQEAgc3RhdGljIHZvaWQgd2Fsa19yZW1vdmVfYnlfcGVlcihzdHJ1Y3QgYQorIAkJCQlpZiAoIW5vZGUtPmJpdFswXSB8fCAhbm9kZS0+Yml0WzFdKSB7CisgCQkJCQlyY3VfYXNzaWduX3BvaW50ZXIoKm5wdHIsIERFUkVGKAorIAkJCQkJICAgICAgICZub2RlLT5iaXRbIVJFRihub2RlLT5iaXRbMF0pXSkpOworLQkJCQkJY2FsbF9yY3UoJm5vZGUtPnJjdSwgbm9kZV9mcmVlX3JjdSk7CisrCQkJCQlrZnJlZV9yY3Uobm9kZSwgcmN1KTsKKyAJCQkJCW5vZGUgPSBERVJFRihucHRyKTsKKyAJCQkJfQorIAkJCX0KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNzgtd2lyZWd1YXJkLXNlbGZ0ZXN0cy1yZW1vdmUtYW5jaWVudC1rZXJuZWwtY29tcGF0aWJpbC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNzgtd2lyZWd1YXJkLXNlbGZ0ZXN0cy1yZW1vdmUtYW5jaWVudC1rZXJuZWwtY29tcGF0aWJpbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmYwZGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA3OC13aXJlZ3VhcmQtc2VsZnRlc3RzLXJlbW92ZS1hbmNpZW50LWtlcm5lbC1jb21wYXRpYmlsLnBhdGNoCkBAIC0wLDAgKzEsMzczIEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogVGh1LCAyIEphbiAyMDIwIDE3OjQ3OjQ5ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIHdpcmVndWFyZDogc2VsZnRlc3RzOiByZW1vdmUgYW5jaWVudCBrZXJuZWwgY29tcGF0aWJpbGl0eQorIGNvZGUKKworY29tbWl0IDlhNjlhNGM4ODAyYWRmNjQyYmM0YTEzZDQ3MWI1YTg2YjQ0ZWQ0MzQgdXBzdHJlYW0uCisKK1F1aXRlIGEgYml0IG9mIHRoZSB0ZXN0IHN1aXRlIHdhcyBkZXNpZ25lZCB0byB3b3JrIHdpdGggYW5jaWVudCBrZXJuZWxzLgorVGhhbmtmdWxseSB3ZSBubyBsb25nZXIgaGF2ZSB0byBkZWFsIHdpdGggdGhpcy4gVGhpcyBjb21taXQgdXBkYXRlcwordGhpbmdzIHRoYXQgd2UgY2FuIGZpbmFsbHkgdXBkYXRlIGFuZCByZW1vdmVzIHRoaW5ncyB0aGF0IHdlIGNhbiBmaW5hbGx5CityZW1vdmUsIHRvIGF2b2lkIHRoZSBidWlsZC11cCBvZiB0aGUgbGFzdCBzZXZlcmFsIHllYXJzIGFzIGEgcmVzdWx0IG9mCitoYXZpbmcgdG8gc3VwcG9ydCBhbmNpZW50IGtlcm5lbHMuIFdlIGNhbiBmaW5hbGx5IHJlbHkgb24gc3VwcHJlc3NfCitwcmVmaXhsZW5ndGggYmVpbmcgYXZhaWxhYmxlLiBPbiB0aGUgYnVpbGQgc2lkZSBvZiB0aGluZ3MsIHRoZSBuby1QSUUKK2hhY2sgaXMgbm8gbG9uZ2VyIHJlcXVpcmVkLCBhbmQgd2UgY2FuIGJ1bXAgc29tZSBvZiB0aGUgdG9vbHMsIHJlcGFpcgorb3VyIG02OGsgYW5kIGk2ODYta3ZtIHN1cHBvcnQsIGFuZCBnZXQgYmV0dGVyIGNvdmVyYWdlIG9mIHRoZSBzdGF0aWMKK2JyYW5jaGVzIHVzZWQgaW4gdGhlIGNyeXB0byBsaWIgYW5kIGluIHVkcF90dW5uZWwuCisKK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorU2lnbmVkLW9mZi1ieTogRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvbmV0bnMuc2ggICAgfCAxMSArLS0KKyAuLi4vdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL3FlbXUvTWFrZWZpbGUgfCA4MiArKysrKysrKysrLS0tLS0tLS0tCisgLi4uL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvcWVtdS9hcmNoL202OGsuY29uZmlnIHwgIDIgKy0KKyB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvcWVtdS9pbml0LmMgfCAgMSArCisgLi4uL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvcWVtdS9rZXJuZWwuY29uZmlnICAgIHwgIDIgKworIDUgZmlsZXMgY2hhbmdlZCwgNTAgaW5zZXJ0aW9ucygrKSwgNDggZGVsZXRpb25zKC0pCisKKy0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9uZXRucy5zaAorKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL25ldG5zLnNoCitAQCAtMzcsNyArMzcsNyBAQCBuMigpIHsgcHJldHR5IDIgIiQqIjsgbWF5YmVfZXhlYyBpcCBuZXRuCisgaXAwKCkgeyBwcmV0dHkgMCAiaXAgJCoiOyBpcCAtbiAkbmV0bnMwICIkQCI7IH0KKyBpcDEoKSB7IHByZXR0eSAxICJpcCAkKiI7IGlwIC1uICRuZXRuczEgIiRAIjsgfQorIGlwMigpIHsgcHJldHR5IDIgImlwICQqIjsgaXAgLW4gJG5ldG5zMiAiJEAiOyB9Cistc2xlZXAoKSB7IHJlYWQgLXQgIiQxIiAtTiAwIHx8IHRydWU7IH0KKytzbGVlcCgpIHsgcmVhZCAtdCAiJDEiIC1OIDEgfHwgdHJ1ZTsgfQorIHdhaXRpcGVyZigpIHsgcHJldHR5ICIkezEvLyotfSIgIndhaXQgZm9yIGlwZXJmOjUyMDEiOyB3aGlsZSBbWyAkKHNzIC1OICIkMSIgLXRscCAnc3BvcnQgPSA1MjAxJykgIT0gKmlwZXJmMyogXV07IGRvIHNsZWVwIDAuMTsgZG9uZTsgfQorIHdhaXRuY2F0dWRwKCkgeyBwcmV0dHkgIiR7MS8vKi19IiAid2FpdCBmb3IgdWRwOjExMTEiOyB3aGlsZSBbWyAkKHNzIC1OICIkMSIgLXVscCAnc3BvcnQgPSAxMTExJykgIT0gKm5jYXQqIF1dOyBkbyBzbGVlcCAwLjE7IGRvbmU7IH0KKyB3YWl0bmNhdHRjcCgpIHsgcHJldHR5ICIkezEvLyotfSIgIndhaXQgZm9yIHRjcDoxMTExIjsgd2hpbGUgW1sgJChzcyAtTiAiJDEiIC10bHAgJ3Nwb3J0ID0gMTExMScpICE9ICpuY2F0KiBdXTsgZG8gc2xlZXAgMC4xOyBkb25lOyB9CitAQCAtMjk0LDEyICsyOTQsOSBAQCBpcDEgLTYgcnVsZSBhZGQgdGFibGUgbWFpbiBzdXBwcmVzc19wcmVmCisgaXAxIC00IHJvdXRlIGFkZCBkZWZhdWx0IGRldiB3ZzAgdGFibGUgNTE4MjAKKyBpcDEgLTQgcnVsZSBhZGQgbm90IGZ3bWFyayA1MTgyMCB0YWJsZSA1MTgyMAorIGlwMSAtNCBydWxlIGFkZCB0YWJsZSBtYWluIHN1cHByZXNzX3ByZWZpeGxlbmd0aCAwCistIyBzdXBwcmVzc19wcmVmaXhsZW5ndGggb25seSBnb3QgYWRkZWQgaW4gMy4xMiwgYW5kIHdlIHdhbnQgdG8gc3VwcG9ydCAzLjEwKy4KKy1pZiBbWyAkKGlwMSAtNCBydWxlIHNob3cgYWxsKSA9PSAqc3VwcHJlc3NfcHJlZml4bGVuZ3RoKiBdXTsgdGhlbgorLQkjIEZsb29kIHRoZSBwaW5ncyBpbnN0ZWFkIG9mIHNlbmRpbmcganVzdCBvbmUsIHRvIHRyaWdnZXIgcm91dGluZyB0YWJsZSByZWZlcmVuY2UgY291bnRpbmcgYnVncy4KKy0JbjEgcGluZyAtVyAxIC1jIDEwMCAtZiAxOTIuMTY4Ljk5LjcKKy0JbjEgcGluZyAtVyAxIC1jIDEwMCAtZiBhYmFiOjoxMTExCistZmkKKysjIEZsb29kIHRoZSBwaW5ncyBpbnN0ZWFkIG9mIHNlbmRpbmcganVzdCBvbmUsIHRvIHRyaWdnZXIgcm91dGluZyB0YWJsZSByZWZlcmVuY2UgY291bnRpbmcgYnVncy4KKytuMSBwaW5nIC1XIDEgLWMgMTAwIC1mIDE5Mi4xNjguOTkuNworK24xIHBpbmcgLVcgMSAtYyAxMDAgLWYgYWJhYjo6MTExMQorIAorIG4wIGlwdGFibGVzIC10IG5hdCAtRgorIGlwMCBsaW5rIGRlbCB2ZXRocmMKKy0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9xZW11L01ha2VmaWxlCisrKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvcWVtdS9NYWtlZmlsZQorQEAgLTUsNiArNSw3IEBACisgUFdEIDo9ICQoc2hlbGwgcHdkKQorIAorIENIT1NUIDo9ICQoc2hlbGwgZ2NjIC1kdW1wbWFjaGluZSkKKytIT1NUX0FSQ0ggOj0gJChmaXJzdHdvcmQgJChzdWJzdCAtLCAsJChDSE9TVCkpKQorIGlmbmVxICgsJChBUkNIKSkKKyBDQlVJTEQgOj0gJChzdWJzdCAtZ2NjLCwkKGxhc3R3b3JkICQoc3Vic3QgLywgLCQoZmlyc3R3b3JkICQod2lsZGNhcmQgJChmb3JlYWNoIGJpbmRpciwkKHN1YnN0IDosICwkKFBBVEgpKSwkKGJpbmRpcikvJChBUkNIKS0qLWdjYykpKSkpKQorIGlmZXEgKCwkKENCVUlMRCkpCitAQCAtMzcsMTkgKzM4LDE5IEBAIGVuZGVmCisgZGVmaW5lIGZpbGVfZG93bmxvYWQgPQorICQoRElTVEZJTEVTX1BBVEgpLyQoMSk6CisgCW1rZGlyIC1wICQoRElTVEZJTEVTX1BBVEgpCistCWZsb2NrIC14ICQkQC5sb2NrIC1jICdbIC1mICQkQCBdICYmIGV4aXQgMDsgd2dldCAtTyAkJEAudG1wICQoTUlSUk9SKSQoMSkgfHwgd2dldCAtdCBpbmYgLS1yZXRyeS1vbi1odHRwLWVycm9yPTQwNCAtTyAkJEAudG1wICQoMikkKDEpIHx8IHJtIC1mICQkQC50bXAnCisrCWZsb2NrIC14ICQkQC5sb2NrIC1jICdbIC1mICQkQCBdICYmIGV4aXQgMDsgd2dldCAtTyAkJEAudG1wICQoTUlSUk9SKSQoMSkgfHwgd2dldCAtTyAkJEAudG1wICQoMikkKDEpIHx8IHJtIC1mICQkQC50bXAnCisgCWlmIGVjaG8gIiQoMykgICQkQC50bXAiIHwgc2hhMjU2c3VtIC1jIC07IHRoZW4gbXYgJCRALnRtcCAkJEA7IGVsc2Ugcm0gLWYgJCRALnRtcDsgZXhpdCA3MTsgZmkKKyBlbmRlZgorIAorLSQoZXZhbCAkKGNhbGwgdGFyX2Rvd25sb2FkLE1VU0wsbXVzbCwxLjEuMjAsLnRhci5neixodHRwczovL3d3dy5tdXNsLWxpYmMub3JnL3JlbGVhc2VzLyw0NGJlODc3MWQwZTZjNmI1ZjgyZGQxNTY2MmViMjk1N2M5YTMxNzNhMTlhOGI0OTk2NmFjMDU0MmJiZDQwZDYxKSkKKyskKGV2YWwgJChjYWxsIHRhcl9kb3dubG9hZCxNVVNMLG11c2wsMS4xLjI0LC50YXIuZ3osaHR0cHM6Ly93d3cubXVzbC1saWJjLm9yZy9yZWxlYXNlcy8sMTM3MGM5YTgxMmIyY2YyYTdkOTI4MDI1MTBjY2EwMDU4Y2MzN2U2NmE3YmVkZDcwMDUxZjBhMzQwMTUwMjJhMykpCisgJChldmFsICQoY2FsbCB0YXJfZG93bmxvYWQsTElCTU5MLGxpYm1ubCwxLjAuNCwudGFyLmJ6MixodHRwczovL3d3dy5uZXRmaWx0ZXIub3JnL3Byb2plY3RzL2xpYm1ubC9maWxlcy8sMTcxZjg5Njk5ZjI4NmE1ODU0YjcyYjkxZDA2ZThmOGUzNjgzMDY0YzU5MDFmYjA5ZDk1NGE5YWI2ZjU1MWY4MSkpCistJChldmFsICQoY2FsbCB0YXJfZG93bmxvYWQsSVBFUkYsaXBlcmYsMy4xLjcsLnRhci5neixodHRwOi8vZG93bmxvYWRzLmVzLm5ldC9wdWIvaXBlcmYvLGE0ZWY3MzQwNmZlOTIyNTA2MDJiOGRhMmFlODllYzUzMjExZjgwNWRmOTdhMWQxZDYyOWRiNWExNDA0MzczNGYpKQorKyQoZXZhbCAkKGNhbGwgdGFyX2Rvd25sb2FkLElQRVJGLGlwZXJmLDMuNywudGFyLmd6LGh0dHBzOi8vZG93bmxvYWRzLmVzLm5ldC9wdWIvaXBlcmYvLGQ4NDYwNDAyMjQzMTdjYWYyZjc1Yzg0M2QzMDlhOTUwYTdkYjIzZjliNDRiOTQ2ODhjY2JlNTU3ZDZkMTcxMGMpKQorICQoZXZhbCAkKGNhbGwgdGFyX2Rvd25sb2FkLEJBU0gsYmFzaCw1LjAsLnRhci5neixodHRwczovL2Z0cC5nbnUub3JnL2dudS9iYXNoLyxiNGE4MGYyYWM2NjE3MGIyOTEzZWZiZmI5ZjI1OTRmMWY3NmM3YjFhZmQxMWY3OTllMjIwMzVkNjMwNzdmYjRkKSkKKy0kKGV2YWwgJChjYWxsIHRhcl9kb3dubG9hZCxJUFJPVVRFMixpcHJvdXRlMiw1LjEuMCwudGFyLmd6LGh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL25ldC9pcHJvdXRlMi8sOWI0MzcwN2Q2MDc1ZWNkY2ExNDgwM2NhOGNlMGM4NTUzODQ4YzQ5ZmExNTg2ZDEyZmQ1MDhkNjY1NzcyNDNmMikpCistJChldmFsICQoY2FsbCB0YXJfZG93bmxvYWQsSVBUQUJMRVMsaXB0YWJsZXMsMS42LjEsLnRhci5iejIsaHR0cHM6Ly93d3cubmV0ZmlsdGVyLm9yZy9wcm9qZWN0cy9pcHRhYmxlcy9maWxlcy8sMGZjMmQ3YmQ1ZDdiZTExMzExNzI2NDY2Nzg5ZDRjNjVmYjRjOGUwOTZjOTE4MmI1NmNlOTc0NDA4NjRmMGNmNSkpCistJChldmFsICQoY2FsbCB0YXJfZG93bmxvYWQsTk1BUCxubWFwLDcuNjAsLnRhci5iejIsaHR0cHM6Ly9ubWFwLm9yZy9kaXN0LyxhODc5NmVjYzRmYTZjMzhhYWQ2MTM5ZDk1MTVkYzgxMTMwMjNhODJlOWQ3ODdlNWE1ZmI1ZmExYjA1NTE2ZjIxKSkKKy0kKGV2YWwgJChjYWxsIHRhcl9kb3dubG9hZCxJUFVUSUxTLGlwdXRpbHMsczIwMTYxMTA1LC50YXIuZ3osaHR0cHM6Ly9naXRodWIuY29tL2lwdXRpbHMvaXB1dGlscy9hcmNoaXZlL3MyMDE2MTEwNS50YXIuZ3ovIyxmODEzMDkyZjAzZDE3Mjk0ZmQyMzU0NGIxMjliOTVjZGI4N2ZlMTlmNzk3MGE1MTkwOGE2Yjg4NTA5YWNhZDhhKSkKKy0kKGV2YWwgJChjYWxsIHRhcl9kb3dubG9hZCxXSVJFR1VBUkRfVE9PTFMsV2lyZUd1YXJkLDAuMC4yMDE5MTIxMiwudGFyLnh6LGh0dHBzOi8vZ2l0Lnp4MmM0LmNvbS9XaXJlR3VhcmQvc25hcHNob3QvLGIwZDcxODM4MGY3YTg4MjJiMmYxMmQ3NWU0NjJmYTRlYWZhM2E3Nzg3MTAwMjk4MWYzNjdjZDRmZTJhMWIwNzEpKQorKyQoZXZhbCAkKGNhbGwgdGFyX2Rvd25sb2FkLElQUk9VVEUyLGlwcm91dGUyLDUuNC4wLC50YXIueHosaHR0cHM6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvbmV0L2lwcm91dGUyLyxmZTk3YWE2MGEwZDRjNWFjODMwYmUxODkzN2UxOGRjMzQwMGNhNzEzYTMzYTg5YWQ4OTZmZjFlM2Q0NjA4NmFlKSkKKyskKGV2YWwgJChjYWxsIHRhcl9kb3dubG9hZCxJUFRBQkxFUyxpcHRhYmxlcywxLjguNCwudGFyLmJ6MixodHRwczovL3d3dy5uZXRmaWx0ZXIub3JnL3Byb2plY3RzL2lwdGFibGVzL2ZpbGVzLyw5OTNhM2E1NDkwYTU0NGMyY2JmMmVmMTVjZjdlN2VkMjFhZjE4NDViYWYyMjgzMThkNWMzNmVmODgyN2UxNTdjKSkKKyskKGV2YWwgJChjYWxsIHRhcl9kb3dubG9hZCxOTUFQLG5tYXAsNy44MCwudGFyLmJ6MixodHRwczovL25tYXAub3JnL2Rpc3QvLGZjZmE1YTBlNDIwOTllMTJlNGJmN2E2OGViZTZmZGUwNTU1MzM4M2E2ODJlODE2YTdlYzkyNTZhYjQ3NzNmYWEpKQorKyQoZXZhbCAkKGNhbGwgdGFyX2Rvd25sb2FkLElQVVRJTFMsaXB1dGlscyxzMjAxOTA3MDksLnRhci5neixodHRwczovL2dpdGh1Yi5jb20vaXB1dGlscy9pcHV0aWxzL2FyY2hpdmUvczIwMTkwNzA5LnRhci5nei8jLGExNTcyMGRkNzQxZDc1MzhkZDI2NDVmOWY1MTZkMTkzNjM2YWU0MzAwZmY3ZGJjOGJmY2E3NTdiZjE2NjQ5MGEpKQorKyQoZXZhbCAkKGNhbGwgdGFyX2Rvd25sb2FkLFdJUkVHVUFSRF9UT09MUyx3aXJlZ3VhcmQtdG9vbHMsMS4wLjIwMTkxMjI2LC50YXIueHosaHR0cHM6Ly9naXQuengyYzQuY29tL3dpcmVndWFyZC10b29scy9zbmFwc2hvdC8sYWE4YWYwZmRjOTg3MmQzNjlkOGM4OTBhODRkYmMyYTI0NjZiNTU3OTVkY2NkNWI0NzcyMWIyZDk3NjQ0YjA0ZikpCisgCisgS0VSTkVMX0JVSUxEX1BBVEggOj0gJChCVUlMRF9QQVRIKS9rZXJuZWwkKGlmICQoZmluZHN0cmluZyB5ZXMsJChERUJVR19LRVJORUwpKSwtZGVidWcpCisgcndpbGRjYXJkPSQoZm9yZWFjaCBkLCQod2lsZGNhcmQgJDEqKSwkKGNhbGwgcndpbGRjYXJkLCRkLywkMikgJChmaWx0ZXIgJChzdWJzdCAqLCUsJDIpLCRkKSkKK0BAIC01OSwyMyArNjAsMjEgQEAgZXhwb3J0IENGTEFHUyA/PSAtTzMgLXBpcGUKKyBleHBvcnQgTERGTEFHUyA/PQorIGV4cG9ydCBDUFBGTEFHUyA6PSAtSSQoQlVJTERfUEFUSCkvaW5jbHVkZQorIAorLWlmZXEgKCQoQ0hPU1QpLCQoQ0JVSUxEKSkKKytpZmVxICgkKEhPU1RfQVJDSCksJChBUkNIKSkKKyBDUk9TU19DT01QSUxFX0ZMQUcgOj0gLS1ob3N0PSQoQ0hPU1QpCistTk9QSUVfR0NDIDo9IGdjYyAtZm5vLVBJRQorIENGTEFHUyArPSAtbWFyY2g9bmF0aXZlCisgU1RSSVAgOj0gc3RyaXAKKyBlbHNlCisgJChpbmZvIENyb3NzIGNvbXBpbGF0aW9uOiBidWlsZGluZyBmb3IgJChDQlVJTEQpIHVzaW5nICQoQ0hPU1QpKQorIENST1NTX0NPTVBJTEVfRkxBRyA6PSAtLWJ1aWxkPSQoQ0JVSUxEKSAtLWhvc3Q9JChDSE9TVCkKKyBleHBvcnQgQ1JPU1NfQ09NUElMRT0kKENCVUlMRCktCistTk9QSUVfR0NDIDo9ICQoQ0JVSUxEKS1nY2MgLWZuby1QSUUKKyBTVFJJUCA6PSAkKENCVUlMRCktc3RyaXAKKyBlbmRpZgorIGlmZXEgKCQoQVJDSCksYWFyY2g2NCkKKyBRRU1VX0FSQ0ggOj0gYWFyY2g2NAorIEtFUk5FTF9BUkNIIDo9IGFybTY0CisgS0VSTkVMX0JaSU1BR0UgOj0gJChLRVJORUxfQlVJTERfUEFUSCkvYXJjaC9hcm02NC9ib290L0ltYWdlCistaWZlcSAoJChDSE9TVCksJChDQlVJTEQpKQorK2lmZXEgKCQoSE9TVF9BUkNIKSwkKEFSQ0gpKQorIFFFTVVfTUFDSElORSA6PSAtY3B1IGhvc3QgLW1hY2hpbmUgdmlydCxnaWNfdmVyc2lvbj1ob3N0LGFjY2VsPWt2bQorIGVsc2UKKyBRRU1VX01BQ0hJTkUgOj0gLWNwdSBjb3J0ZXgtYTUzIC1tYWNoaW5lIHZpcnQKK0BAIC04NSw3ICs4NCw3IEBAIGVsc2UgaWZlcSAoJChBUkNIKSxhYXJjaDY0X2JlKQorIFFFTVVfQVJDSCA6PSBhYXJjaDY0CisgS0VSTkVMX0FSQ0ggOj0gYXJtNjQKKyBLRVJORUxfQlpJTUFHRSA6PSAkKEtFUk5FTF9CVUlMRF9QQVRIKS9hcmNoL2FybTY0L2Jvb3QvSW1hZ2UKKy1pZmVxICgkKENIT1NUKSwkKENCVUlMRCkpCisraWZlcSAoJChIT1NUX0FSQ0gpLCQoQVJDSCkpCisgUUVNVV9NQUNISU5FIDo9IC1jcHUgaG9zdCAtbWFjaGluZSB2aXJ0LGdpY192ZXJzaW9uPWhvc3QsYWNjZWw9a3ZtCisgZWxzZQorIFFFTVVfTUFDSElORSA6PSAtY3B1IGNvcnRleC1hNTMgLW1hY2hpbmUgdmlydAorQEAgLTk1LDcgKzk0LDcgQEAgZWxzZSBpZmVxICgkKEFSQ0gpLGFybSkKKyBRRU1VX0FSQ0ggOj0gYXJtCisgS0VSTkVMX0FSQ0ggOj0gYXJtCisgS0VSTkVMX0JaSU1BR0UgOj0gJChLRVJORUxfQlVJTERfUEFUSCkvYXJjaC9hcm0vYm9vdC96SW1hZ2UKKy1pZmVxICgkKENIT1NUKSwkKENCVUlMRCkpCisraWZlcSAoJChIT1NUX0FSQ0gpLCQoQVJDSCkpCisgUUVNVV9NQUNISU5FIDo9IC1jcHUgaG9zdCAtbWFjaGluZSB2aXJ0LGdpY192ZXJzaW9uPWhvc3QsYWNjZWw9a3ZtCisgZWxzZQorIFFFTVVfTUFDSElORSA6PSAtY3B1IGNvcnRleC1hMTUgLW1hY2hpbmUgdmlydAorQEAgLTEwNSw3ICsxMDQsNyBAQCBlbHNlIGlmZXEgKCQoQVJDSCksYXJtZWIpCisgUUVNVV9BUkNIIDo9IGFybQorIEtFUk5FTF9BUkNIIDo9IGFybQorIEtFUk5FTF9CWklNQUdFIDo9ICQoS0VSTkVMX0JVSUxEX1BBVEgpL2FyY2gvYXJtL2Jvb3QvekltYWdlCistaWZlcSAoJChDSE9TVCksJChDQlVJTEQpKQorK2lmZXEgKCQoSE9TVF9BUkNIKSwkKEFSQ0gpKQorIFFFTVVfTUFDSElORSA6PSAtY3B1IGhvc3QgLW1hY2hpbmUgdmlydCxnaWNfdmVyc2lvbj1ob3N0LGFjY2VsPWt2bQorIGVsc2UKKyBRRU1VX01BQ0hJTkUgOj0gLWNwdSBjb3J0ZXgtYTE1IC1tYWNoaW5lIHZpcnQKK0BAIC0xMTYsNyArMTE1LDcgQEAgZWxzZSBpZmVxICgkKEFSQ0gpLHg4Nl82NCkKKyBRRU1VX0FSQ0ggOj0geDg2XzY0CisgS0VSTkVMX0FSQ0ggOj0geDg2XzY0CisgS0VSTkVMX0JaSU1BR0UgOj0gJChLRVJORUxfQlVJTERfUEFUSCkvYXJjaC94ODYvYm9vdC9iekltYWdlCistaWZlcSAoJChDSE9TVCksJChDQlVJTEQpKQorK2lmZXEgKCQoSE9TVF9BUkNIKSwkKEFSQ0gpKQorIFFFTVVfTUFDSElORSA6PSAtY3B1IGhvc3QgLW1hY2hpbmUgcTM1LGFjY2VsPWt2bQorIGVsc2UKKyBRRU1VX01BQ0hJTkUgOj0gLWNwdSBTa3lsYWtlLVNlcnZlciAtbWFjaGluZSBxMzUKK0BAIC0xMjYsNyArMTI1LDcgQEAgZWxzZSBpZmVxICgkKEFSQ0gpLGk2ODYpCisgUUVNVV9BUkNIIDo9IGkzODYKKyBLRVJORUxfQVJDSCA6PSB4ODYKKyBLRVJORUxfQlpJTUFHRSA6PSAkKEtFUk5FTF9CVUlMRF9QQVRIKS9hcmNoL3g4Ni9ib290L2J6SW1hZ2UKKy1pZmVxICgkKHN1YnN0IGk2ODYseDg2XzY0LCQoQ0JVSUxEKSksJChDSE9TVCkpCisraWZlcSAoJChzdWJzdCB4ODZfNjQsaTY4NiwkKEhPU1RfQVJDSCkpLCQoQVJDSCkpCisgUUVNVV9NQUNISU5FIDo9IC1jcHUgaG9zdCAtbWFjaGluZSBxMzUsYWNjZWw9a3ZtCisgZWxzZQorIFFFTVVfTUFDSElORSA6PSAtY3B1IGNvcmVkdW8gLW1hY2hpbmUgcTM1CitAQCAtMTM2LDcgKzEzNSw3IEBAIGVsc2UgaWZlcSAoJChBUkNIKSxtaXBzNjQpCisgUUVNVV9BUkNIIDo9IG1pcHM2NAorIEtFUk5FTF9BUkNIIDo9IG1pcHMKKyBLRVJORUxfQlpJTUFHRSA6PSAkKEtFUk5FTF9CVUlMRF9QQVRIKS92bWxpbnV4CistaWZlcSAoJChDSE9TVCksJChDQlVJTEQpKQorK2lmZXEgKCQoSE9TVF9BUkNIKSwkKEFSQ0gpKQorIFFFTVVfTUFDSElORSA6PSAtY3B1IGhvc3QgLW1hY2hpbmUgbWFsdGEsYWNjZWw9a3ZtCisgQ0ZMQUdTICs9IC1FQgorIGVsc2UKK0BAIC0xNDcsNyArMTQ2LDcgQEAgZWxzZSBpZmVxICgkKEFSQ0gpLG1pcHM2NGVsKQorIFFFTVVfQVJDSCA6PSBtaXBzNjRlbAorIEtFUk5FTF9BUkNIIDo9IG1pcHMKKyBLRVJORUxfQlpJTUFHRSA6PSAkKEtFUk5FTF9CVUlMRF9QQVRIKS92bWxpbnV4CistaWZlcSAoJChDSE9TVCksJChDQlVJTEQpKQorK2lmZXEgKCQoSE9TVF9BUkNIKSwkKEFSQ0gpKQorIFFFTVVfTUFDSElORSA6PSAtY3B1IGhvc3QgLW1hY2hpbmUgbWFsdGEsYWNjZWw9a3ZtCisgQ0ZMQUdTICs9IC1FTAorIGVsc2UKK0BAIC0xNTgsNyArMTU3LDcgQEAgZWxzZSBpZmVxICgkKEFSQ0gpLG1pcHMpCisgUUVNVV9BUkNIIDo9IG1pcHMKKyBLRVJORUxfQVJDSCA6PSBtaXBzCisgS0VSTkVMX0JaSU1BR0UgOj0gJChLRVJORUxfQlVJTERfUEFUSCkvdm1saW51eAorLWlmZXEgKCQoQ0hPU1QpLCQoQ0JVSUxEKSkKKytpZmVxICgkKEhPU1RfQVJDSCksJChBUkNIKSkKKyBRRU1VX01BQ0hJTkUgOj0gLWNwdSBob3N0IC1tYWNoaW5lIG1hbHRhLGFjY2VsPWt2bQorIENGTEFHUyArPSAtRUIKKyBlbHNlCitAQCAtMTY5LDcgKzE2OCw3IEBAIGVsc2UgaWZlcSAoJChBUkNIKSxtaXBzZWwpCisgUUVNVV9BUkNIIDo9IG1pcHNlbAorIEtFUk5FTF9BUkNIIDo9IG1pcHMKKyBLRVJORUxfQlpJTUFHRSA6PSAkKEtFUk5FTF9CVUlMRF9QQVRIKS92bWxpbnV4CistaWZlcSAoJChDSE9TVCksJChDQlVJTEQpKQorK2lmZXEgKCQoSE9TVF9BUkNIKSwkKEFSQ0gpKQorIFFFTVVfTUFDSElORSA6PSAtY3B1IGhvc3QgLW1hY2hpbmUgbWFsdGEsYWNjZWw9a3ZtCisgQ0ZMQUdTICs9IC1FTAorIGVsc2UKK0BAIC0xODAsNyArMTc5LDcgQEAgZWxzZSBpZmVxICgkKEFSQ0gpLHBvd2VycGM2NGxlKQorIFFFTVVfQVJDSCA6PSBwcGM2NAorIEtFUk5FTF9BUkNIIDo9IHBvd2VycGMKKyBLRVJORUxfQlpJTUFHRSA6PSAkKEtFUk5FTF9CVUlMRF9QQVRIKS92bWxpbnV4CistaWZlcSAoJChDSE9TVCksJChDQlVJTEQpKQorK2lmZXEgKCQoSE9TVF9BUkNIKSwkKEFSQ0gpKQorIFFFTVVfTUFDSElORSA6PSAtY3B1IGhvc3QsYWNjZWw9a3ZtIC1tYWNoaW5lIHBzZXJpZXMKKyBlbHNlCisgUUVNVV9NQUNISU5FIDo9IC1tYWNoaW5lIHBzZXJpZXMKK0BAIC0xOTAsNyArMTg5LDcgQEAgZWxzZSBpZmVxICgkKEFSQ0gpLHBvd2VycGMpCisgUUVNVV9BUkNIIDo9IHBwYworIEtFUk5FTF9BUkNIIDo9IHBvd2VycGMKKyBLRVJORUxfQlpJTUFHRSA6PSAkKEtFUk5FTF9CVUlMRF9QQVRIKS9hcmNoL3Bvd2VycGMvYm9vdC91SW1hZ2UKKy1pZmVxICgkKENIT1NUKSwkKENCVUlMRCkpCisraWZlcSAoJChIT1NUX0FSQ0gpLCQoQVJDSCkpCisgUUVNVV9NQUNISU5FIDo9IC1jcHUgaG9zdCxhY2NlbD1rdm0gLW1hY2hpbmUgcHBjZTUwMAorIGVsc2UKKyBRRU1VX01BQ0hJTkUgOj0gLW1hY2hpbmUgcHBjZTUwMAorQEAgLTIwMCwxMCArMTk5LDExIEBAIGVsc2UgaWZlcSAoJChBUkNIKSxtNjhrKQorIFFFTVVfQVJDSCA6PSBtNjhrCisgS0VSTkVMX0FSQ0ggOj0gbTY4aworIEtFUk5FTF9CWklNQUdFIDo9ICQoS0VSTkVMX0JVSUxEX1BBVEgpL3ZtbGludXgKKy1pZmVxICgkKENIT1NUKSwkKENCVUlMRCkpCistUUVNVV9NQUNISU5FIDo9IC1jcHUgaG9zdCxhY2NlbD1rdm0gLW1hY2hpbmUgcTgwMAorK0tFUk5FTF9DTURMSU5FIDo9ICQoc2hlbGwgc2VkIC1uICdzL0NPTkZJR19DTURMSU5FPVwoLipcKS9cMS9wJyBhcmNoL202OGsuY29uZmlnKQorK2lmZXEgKCQoSE9TVF9BUkNIKSwkKEFSQ0gpKQorK1FFTVVfTUFDSElORSA6PSAtY3B1IGhvc3QsYWNjZWw9a3ZtIC1tYWNoaW5lIHE4MDAgLXNtcCAxIC1hcHBlbmQgJChLRVJORUxfQ01ETElORSkKKyBlbHNlCistUUVNVV9NQUNISU5FIDo9IC1tYWNoaW5lIHE4MDAKKytRRU1VX01BQ0hJTkUgOj0gLW1hY2hpbmUgcTgwMCAtc21wIDEgLWFwcGVuZCAkKEtFUk5FTF9DTURMSU5FKQorIGVuZGlmCisgZWxzZQorICQoZXJyb3IgSSBvbmx5IGJ1aWxkOiB4ODZfNjQsIGk2ODYsIGFybSwgYXJtZWIsIGFhcmNoNjQsIGFhcmNoNjRfYmUsIG1pcHMsIG1pcHNlbCwgbWlwczY0LCBtaXBzNjRlbCwgcG93ZXJwYzY0bGUsIHBvd2VycGMsIG02OGspCitAQCAtMjM4LDE0ICsyMzgsMTQgQEAgJChCVUlMRF9QQVRIKS9pbml0LWNwaW8tc3BlYy50eHQ6CisgCWVjaG8gIm5vZCAvZGV2L2NvbnNvbGUgNjQ0IDAgMCBjIDUgMSIgPj4gJEAKKyAJZWNobyAiZGlyIC9iaW4gNzU1IDAgMCIgPj4gJEAKKyAJZWNobyAiZmlsZSAvYmluL2lwZXJmMyAkKElQRVJGX1BBVEgpL3NyYy9pcGVyZjMgNzU1IDAgMCIgPj4gJEAKKy0JZWNobyAiZmlsZSAvYmluL3dnICQoV0lSRUdVQVJEX1RPT0xTX1BBVEgpL3NyYy90b29scy93ZyA3NTUgMCAwIiA+PiAkQAorKwllY2hvICJmaWxlIC9iaW4vd2cgJChXSVJFR1VBUkRfVE9PTFNfUEFUSCkvc3JjL3dnIDc1NSAwIDAiID4+ICRACisgCWVjaG8gImZpbGUgL2Jpbi9iYXNoICQoQkFTSF9QQVRIKS9iYXNoIDc1NSAwIDAiID4+ICRACisgCWVjaG8gImZpbGUgL2Jpbi9pcCAkKElQUk9VVEUyX1BBVEgpL2lwL2lwIDc1NSAwIDAiID4+ICRACisgCWVjaG8gImZpbGUgL2Jpbi9zcyAkKElQUk9VVEUyX1BBVEgpL21pc2Mvc3MgNzU1IDAgMCIgPj4gJEAKKyAJZWNobyAiZmlsZSAvYmluL3BpbmcgJChJUFVUSUxTX1BBVEgpL3BpbmcgNzU1IDAgMCIgPj4gJEAKKyAJZWNobyAiZmlsZSAvYmluL25jYXQgJChOTUFQX1BBVEgpL25jYXQvbmNhdCA3NTUgMCAwIiA+PiAkQAorLQllY2hvICJmaWxlIC9iaW4veHRhYmxlcy1tdWx0aSAkKElQVEFCTEVTX1BBVEgpL2lwdGFibGVzL3h0YWJsZXMtbXVsdGkgNzU1IDAgMCIgPj4gJEAKKy0JZWNobyAic2xpbmsgL2Jpbi9pcHRhYmxlcyB4dGFibGVzLW11bHRpIDc3NyAwIDAiID4+ICRACisrCWVjaG8gImZpbGUgL2Jpbi94dGFibGVzLWxlZ2FjeS1tdWx0aSAkKElQVEFCTEVTX1BBVEgpL2lwdGFibGVzL3h0YWJsZXMtbGVnYWN5LW11bHRpIDc1NSAwIDAiID4+ICRACisrCWVjaG8gInNsaW5rIC9iaW4vaXB0YWJsZXMgeHRhYmxlcy1sZWdhY3ktbXVsdGkgNzc3IDAgMCIgPj4gJEAKKyAJZWNobyAic2xpbmsgL2Jpbi9waW5nNiBwaW5nIDc3NyAwIDAiID4+ICRACisgCWVjaG8gImRpciAvbGliIDc1NSAwIDAiID4+ICRACisgCWVjaG8gImZpbGUgL2xpYi9saWJjLnNvICQoTVVTTF9QQVRIKS9saWIvbGliYy5zbyA3NTUgMCAwIiA+PiAkQAorQEAgLTI2MCw4ICsyNjAsOCBAQCAkKEtFUk5FTF9CVUlMRF9QQVRIKS8uY29uZmlnOiBrZXJuZWwuY29uCisgCWNkICQoS0VSTkVMX0JVSUxEX1BBVEgpICYmIEFSQ0g9JChLRVJORUxfQVJDSCkgJChLRVJORUxfUEFUSCkvc2NyaXB0cy9rY29uZmlnL21lcmdlX2NvbmZpZy5zaCAtbiAkKEtFUk5FTF9CVUlMRF9QQVRIKS8uY29uZmlnICQoS0VSTkVMX0JVSUxEX1BBVEgpL21pbmltYWwuY29uZmlnCisgCSQoaWYgJChmaW5kc3RyaW5nIHllcywkKERFQlVHX0tFUk5FTCkpLGNwIGRlYnVnLmNvbmZpZyAkKEtFUk5FTF9CVUlMRF9QQVRIKSAmJiBjZCAkKEtFUk5FTF9CVUlMRF9QQVRIKSAmJiBBUkNIPSQoS0VSTkVMX0FSQ0gpICQoS0VSTkVMX1BBVEgpL3NjcmlwdHMva2NvbmZpZy9tZXJnZV9jb25maWcuc2ggLW4gJChLRVJORUxfQlVJTERfUEFUSCkvLmNvbmZpZyBkZWJ1Zy5jb25maWcsKQorIAorLSQoS0VSTkVMX0JaSU1BR0UpOiAkKEtFUk5FTF9CVUlMRF9QQVRIKS8uY29uZmlnICQoQlVJTERfUEFUSCkvaW5pdC1jcGlvLXNwZWMudHh0ICQoTVVTTF9QQVRIKS9saWIvbGliYy5zbyAkKElQRVJGX1BBVEgpL3NyYy9pcGVyZjMgJChJUFVUSUxTX1BBVEgpL3BpbmcgJChCQVNIX1BBVEgpL2Jhc2ggJChJUFJPVVRFMl9QQVRIKS9taXNjL3NzICQoSVBST1VURTJfUEFUSCkvaXAvaXAgJChJUFRBQkxFU19QQVRIKS9pcHRhYmxlcy94dGFibGVzLW11bHRpICQoTk1BUF9QQVRIKS9uY2F0L25jYXQgJChXSVJFR1VBUkRfVE9PTFNfUEFUSCkvc3JjL3Rvb2xzL3dnICQoQlVJTERfUEFUSCkvaW5pdCAuLi9uZXRucy5zaCAkKFdJUkVHVUFSRF9TT1VSQ0VTKQorLQkkKE1BS0UpIC1DICQoS0VSTkVMX1BBVEgpIE89JChLRVJORUxfQlVJTERfUEFUSCkgQVJDSD0kKEtFUk5FTF9BUkNIKSBDUk9TU19DT01QSUxFPSQoQ1JPU1NfQ09NUElMRSkgQ0M9IiQoTk9QSUVfR0NDKSIKKyskKEtFUk5FTF9CWklNQUdFKTogJChLRVJORUxfQlVJTERfUEFUSCkvLmNvbmZpZyAkKEJVSUxEX1BBVEgpL2luaXQtY3Bpby1zcGVjLnR4dCAkKE1VU0xfUEFUSCkvbGliL2xpYmMuc28gJChJUEVSRl9QQVRIKS9zcmMvaXBlcmYzICQoSVBVVElMU19QQVRIKS9waW5nICQoQkFTSF9QQVRIKS9iYXNoICQoSVBST1VURTJfUEFUSCkvbWlzYy9zcyAkKElQUk9VVEUyX1BBVEgpL2lwL2lwICQoSVBUQUJMRVNfUEFUSCkvaXB0YWJsZXMveHRhYmxlcy1sZWdhY3ktbXVsdGkgJChOTUFQX1BBVEgpL25jYXQvbmNhdCAkKFdJUkVHVUFSRF9UT09MU19QQVRIKS9zcmMvd2cgJChCVUlMRF9QQVRIKS9pbml0IC4uL25ldG5zLnNoICQoV0lSRUdVQVJEX1NPVVJDRVMpCisrCSQoTUFLRSkgLUMgJChLRVJORUxfUEFUSCkgTz0kKEtFUk5FTF9CVUlMRF9QQVRIKSBBUkNIPSQoS0VSTkVMX0FSQ0gpIENST1NTX0NPTVBJTEU9JChDUk9TU19DT01QSUxFKQorIAorICQoQlVJTERfUEFUSCkvaW5jbHVkZS9saW51eC8uaW5zdGFsbGVkOiB8ICQoS0VSTkVMX0JVSUxEX1BBVEgpLy5jb25maWcKKyAJJChNQUtFKSAtQyAkKEtFUk5FTF9QQVRIKSBPPSQoS0VSTkVMX0JVSUxEX1BBVEgpIElOU1RBTExfSERSX1BBVEg9JChCVUlMRF9QQVRIKSBBUkNIPSQoS0VSTkVMX0FSQ0gpIENST1NTX0NPTVBJTEU9JChDUk9TU19DT01QSUxFKSBoZWFkZXJzX2luc3RhbGwKK0BAIC0yODAsNyArMjgwLDcgQEAgJChCVUlMRF9QQVRIKS9pbmNsdWRlLy5pbnN0YWxsZWQ6ICQoTVVTTAorIAorICQoTVVTTF9DQyk6ICQoTVVTTF9QQVRIKS9saWIvbGliYy5zbworIAlzaCAkKE1VU0xfUEFUSCkvdG9vbHMvbXVzbC1nY2Muc3BlY3Muc2ggJChCVUlMRF9QQVRIKS9pbmNsdWRlICQoTVVTTF9QQVRIKS9saWIgL2xpYi9sZC1saW51eC5zby4xID4gJChCVUlMRF9QQVRIKS9tdXNsLWdjYy5zcGVjcworLQlwcmludGYgJyMhL2Jpbi9zaFxuZXhlYyAiJChSRUFMX0NDKSIgLS1zcGVjcz0iJChCVUlMRF9QQVRIKS9tdXNsLWdjYy5zcGVjcyIgLWZuby1zdGFjay1wcm90ZWN0b3IgLW5vLXBpZSAiJCRAIlxuJyA+ICQoQlVJTERfUEFUSCkvbXVzbC1nY2MKKysJcHJpbnRmICcjIS9iaW4vc2hcbmV4ZWMgIiQoUkVBTF9DQykiIC0tc3BlY3M9IiQoQlVJTERfUEFUSCkvbXVzbC1nY2Muc3BlY3MiICIkJEAiXG4nID4gJChCVUlMRF9QQVRIKS9tdXNsLWdjYworIAljaG1vZCAreCAkKEJVSUxEX1BBVEgpL211c2wtZ2NjCisgCisgJChJUEVSRl9QQVRIKS8uaW5zdGFsbGVkOiAkKElQRVJGX1RBUikKK0BAIC0yOTEsNyArMjkxLDcgQEAgJChJUEVSRl9QQVRIKS8uaW5zdGFsbGVkOiAkKElQRVJGX1RBUikKKyAJdG91Y2ggJEAKKyAKKyAkKElQRVJGX1BBVEgpL3NyYy9pcGVyZjM6IHwgJChJUEVSRl9QQVRIKS8uaW5zdGFsbGVkICQoVVNFUlNQQUNFX0RFUFMpCistCWNkICQoSVBFUkZfUEFUSCkgJiYgQ0ZMQUdTPSIkKENGTEFHUykgLURfR05VX1NPVVJDRSIgLi9jb25maWd1cmUgLS1wcmVmaXg9LyAkKENST1NTX0NPTVBJTEVfRkxBRykgLS1lbmFibGUtc3RhdGljIC0tZGlzYWJsZS1zaGFyZWQKKysJY2QgJChJUEVSRl9QQVRIKSAmJiBDRkxBR1M9IiQoQ0ZMQUdTKSAtRF9HTlVfU09VUkNFIiAuL2NvbmZpZ3VyZSAtLXByZWZpeD0vICQoQ1JPU1NfQ09NUElMRV9GTEFHKSAtLWVuYWJsZS1zdGF0aWMgLS1kaXNhYmxlLXNoYXJlZCAtLXdpdGgtb3BlbnNzbD1ubworIAkkKE1BS0UpIC1DICQoSVBFUkZfUEFUSCkKKyAJJChTVFJJUCkgLXMgJEAKKyAKK0BAIC0zMDgsOCArMzA4LDggQEAgJChXSVJFR1VBUkRfVE9PTFNfUEFUSCkvLmluc3RhbGxlZDogJChXSQorIAlmbG9jayAtcyAkPC5sb2NrIHRhciAtQyAkKEJVSUxEX1BBVEgpIC14ZiAkPAorIAl0b3VjaCAkQAorIAorLSQoV0lSRUdVQVJEX1RPT0xTX1BBVEgpL3NyYy90b29scy93ZzogfCAkKFdJUkVHVUFSRF9UT09MU19QQVRIKS8uaW5zdGFsbGVkICQoTElCTU5MX1BBVEgpL3NyYy8ubGlicy9saWJtbmwuYSAkKFVTRVJTUEFDRV9ERVBTKQorLQlMREZMQUdTPSIkKExERkxBR1MpIC1MJChMSUJNTkxfUEFUSCkvc3JjLy5saWJzIiAkKE1BS0UpIC1DICQoV0lSRUdVQVJEX1RPT0xTX1BBVEgpL3NyYy90b29scyBMSUJNTkxfQ0ZMQUdTPSItSSQoTElCTU5MX1BBVEgpL2luY2x1ZGUiIExJQk1OTF9MRExJQlM9Ii1sbW5sIiB3ZworKyQoV0lSRUdVQVJEX1RPT0xTX1BBVEgpL3NyYy93ZzogfCAkKFdJUkVHVUFSRF9UT09MU19QQVRIKS8uaW5zdGFsbGVkICQoTElCTU5MX1BBVEgpL3NyYy8ubGlicy9saWJtbmwuYSAkKFVTRVJTUEFDRV9ERVBTKQorKwlMREZMQUdTPSIkKExERkxBR1MpIC1MJChMSUJNTkxfUEFUSCkvc3JjLy5saWJzIiAkKE1BS0UpIC1DICQoV0lSRUdVQVJEX1RPT0xTX1BBVEgpL3NyYyBMSUJNTkxfQ0ZMQUdTPSItSSQoTElCTU5MX1BBVEgpL2luY2x1ZGUiIExJQk1OTF9MRExJQlM9Ii1sbW5sIiB3ZworIAkkKFNUUklQKSAtcyAkQAorIAorICQoQlVJTERfUEFUSCkvaW5pdDogaW5pdC5jIHwgJChVU0VSU1BBQ0VfREVQUykKK0BAIC0zMjMsNyArMzIzLDggQEAgJChJUFVUSUxTX1BBVEgpLy5pbnN0YWxsZWQ6ICQoSVBVVElMU19UQQorIAl0b3VjaCAkQAorIAorICQoSVBVVElMU19QQVRIKS9waW5nOiB8ICQoSVBVVElMU19QQVRIKS8uaW5zdGFsbGVkICQoVVNFUlNQQUNFX0RFUFMpCistCSQoTUFLRSkgLUMgJChJUFVUSUxTX1BBVEgpIFVTRV9DQVA9bm8gVVNFX0lETj1ubyBVU0VfTkVUVExFPW5vIFVTRV9DUllQVE89bm8gcGluZworKwlzZWQgLWkgL2F0ZXhpdC9kICQoSVBVVElMU19QQVRIKS9waW5nLmMKKysJY2QgJChJUFVUSUxTX1BBVEgpICYmICQoQ0MpICQoQ0ZMQUdTKSAtc3RkPWM5OSAtbyAkQCBwaW5nLmMgcGluZ19jb21tb24uYyBwaW5nNl9jb21tb24uYyBpcHV0aWxzX2NvbW1vbi5jIC1EX0dOVV9TT1VSQ0UgLUQnSVBVVElMU19WRVJTSU9OKGYpPWYnIC1scmVzb2x2ICQoTERGTEFHUykKKyAJJChTVFJJUCkgLXMgJEAKKyAKKyAkKEJBU0hfUEFUSCkvLmluc3RhbGxlZDogJChCQVNIX1RBUikKK0BAIC0zNTcsNyArMzU4LDcgQEAgJChJUFRBQkxFU19QQVRIKS8uaW5zdGFsbGVkOiAkKElQVEFCTEVTXworIAlzZWQgLWkgLWUgIi9uZm5ldGxpbms9WzAxXS9zOj1bMDFdOj0wOiIgLWUgIi9uZmNvbm50cmFjaz1bMDFdL3M6PVswMV06PTA6IiAkKElQVEFCTEVTX1BBVEgpL2NvbmZpZ3VyZQorIAl0b3VjaCAkQAorIAorLSQoSVBUQUJMRVNfUEFUSCkvaXB0YWJsZXMveHRhYmxlcy1tdWx0aTogfCAkKElQVEFCTEVTX1BBVEgpLy5pbnN0YWxsZWQgJChMSUJNTkxfUEFUSCkvc3JjLy5saWJzL2xpYm1ubC5hICQoVVNFUlNQQUNFX0RFUFMpCisrJChJUFRBQkxFU19QQVRIKS9pcHRhYmxlcy94dGFibGVzLWxlZ2FjeS1tdWx0aTogfCAkKElQVEFCTEVTX1BBVEgpLy5pbnN0YWxsZWQgJChMSUJNTkxfUEFUSCkvc3JjLy5saWJzL2xpYm1ubC5hICQoVVNFUlNQQUNFX0RFUFMpCisgCWNkICQoSVBUQUJMRVNfUEFUSCkgJiYgUEtHX0NPTkZJR19MSUJESVI9IiQoTElCTU5MX1BBVEgpIiAuL2NvbmZpZ3VyZSAtLXByZWZpeD0vICQoQ1JPU1NfQ09NUElMRV9GTEFHKSAtLWVuYWJsZS1zdGF0aWMgLS1kaXNhYmxlLXNoYXJlZCAtLWRpc2FibGUtbmZ0YWJsZXMgLS1kaXNhYmxlLWJwZi1jb21waWxlciAtLWRpc2FibGUtbmZzeW5wcm94eSAtLWRpc2FibGUtbGliaXBxIC0td2l0aC1rZXJuZWw9JChCVUlMRF9QQVRIKS9pbmNsdWRlCisgCSQoTUFLRSkgLUMgJChJUFRBQkxFU19QQVRIKQorIAkkKFNUUklQKSAtcyAkQAorQEAgLTM2OCw4ICszNjksOSBAQCAkKE5NQVBfUEFUSCkvLmluc3RhbGxlZDogJChOTUFQX1RBUikKKyAJdG91Y2ggJEAKKyAKKyAkKE5NQVBfUEFUSCkvbmNhdC9uY2F0OiB8ICQoTk1BUF9QQVRIKS8uaW5zdGFsbGVkICQoVVNFUlNQQUNFX0RFUFMpCistCWNkICQoTk1BUF9QQVRIKSAmJiAuL2NvbmZpZ3VyZSAtLXByZWZpeD0vICQoQ1JPU1NfQ09NUElMRV9GTEFHKSAtLWVuYWJsZS1zdGF0aWMgLS1kaXNhYmxlLXNoYXJlZCAtLXdpdGhvdXQtbmRpZmYgLS13aXRob3V0LXplbm1hcCAtLXdpdGhvdXQtbnBpbmcgLS13aXRoLWxpYnBjYXA9aW5jbHVkZWQgLS13aXRoLWxpYnBjcmU9aW5jbHVkZWQgLS13aXRoLWxpYmRuZXQ9aW5jbHVkZWQgLS13aXRob3V0LWxpYmx1YSAtLXdpdGgtbGlibGluZWFyPWluY2x1ZGVkIC0td2l0aG91dC1ubWFwLXVwZGF0ZSAtLXdpdGhvdXQtb3BlbnNzbCAtLXdpdGgtcGNhcD1saW51eAorLQkkKE1BS0UpIC1DICQoTk1BUF9QQVRIKSBidWlsZC1uY2F0CisrCWNkICQoTk1BUF9QQVRIKSAmJiAuL2NvbmZpZ3VyZSAtLXByZWZpeD0vICQoQ1JPU1NfQ09NUElMRV9GTEFHKSAtLWVuYWJsZS1zdGF0aWMgLS1kaXNhYmxlLXNoYXJlZCAtLXdpdGhvdXQtbmRpZmYgLS13aXRob3V0LXplbm1hcCAtLXdpdGhvdXQtbnBpbmcgLS13aXRoLWxpYnBjYXA9aW5jbHVkZWQgLS13aXRoLWxpYnBjcmU9aW5jbHVkZWQgLS13aXRoLWxpYmRuZXQ9aW5jbHVkZWQgLS13aXRob3V0LWxpYmx1YSAtLXdpdGgtbGlibGluZWFyPWluY2x1ZGVkIC0td2l0aG91dC1ubWFwLXVwZGF0ZSAtLXdpdGhvdXQtb3BlbnNzbCAtLXdpdGgtcGNhcD1saW51eCAtLXdpdGhvdXQtbGlic3NoCisrCSQoTUFLRSkgLUMgJChOTUFQX1BBVEgpL2xpYnBjYXAKKysJJChNQUtFKSAtQyAkKE5NQVBfUEFUSCkvbmNhdAorIAkkKFNUUklQKSAtcyAkQAorIAorIGNsZWFuOgorQEAgLTM3OSw3ICszODEsNyBAQCBkaXN0Y2xlYW46IGNsZWFuCisgCXJtIC1yZiAkKERJU1RGSUxFU19QQVRIKQorIAorIG1lbnVjb25maWc6ICQoS0VSTkVMX0JVSUxEX1BBVEgpLy5jb25maWcKKy0JJChNQUtFKSAtQyAkKEtFUk5FTF9QQVRIKSBPPSQoS0VSTkVMX0JVSUxEX1BBVEgpIEFSQ0g9JChLRVJORUxfQVJDSCkgQ1JPU1NfQ09NUElMRT0kKENST1NTX0NPTVBJTEUpIENDPSIkKE5PUElFX0dDQykiIG1lbnVjb25maWcKKysJJChNQUtFKSAtQyAkKEtFUk5FTF9QQVRIKSBPPSQoS0VSTkVMX0JVSUxEX1BBVEgpIEFSQ0g9JChLRVJORUxfQVJDSCkgQ1JPU1NfQ09NUElMRT0kKENST1NTX0NPTVBJTEUpIG1lbnVjb25maWcKKyAKKyAuUEhPTlk6IHFlbXUgYnVpbGQgY2xlYW4gZGlzdGNsZWFuIG1lbnVjb25maWcKKyAuREVMRVRFX09OX0VSUk9SOgorLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL3FlbXUvYXJjaC9tNjhrLmNvbmZpZworKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL3FlbXUvYXJjaC9tNjhrLmNvbmZpZworQEAgLTEsOSArMSw5IEBACisgQ09ORklHX01NVT15CisrQ09ORklHX002OEtDTEFTU0lDPXkKKyBDT05GSUdfTTY4MDQwPXkKKyBDT05GSUdfTUFDPXkKKyBDT05GSUdfU0VSSUFMX1BNQUNaSUxPRz15CisgQ09ORklHX1NFUklBTF9QTUFDWklMT0dfVFRZUz15CisgQ09ORklHX1NFUklBTF9QTUFDWklMT0dfQ09OU09MRT15CistQ09ORklHX0NNRExJTkVfQk9PTD15CisgQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5UzAgd2cuc3VjY2Vzcz10dHlTMSIKKyBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CistLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvcWVtdS9pbml0LmMKKysrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9xZW11L2luaXQuYworQEAgLTIxLDYgKzIxLDcgQEAKKyAjaW5jbHVkZSA8c3lzL3JlYm9vdC5oPgorICNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorICNpbmNsdWRlIDxzeXMvc2VuZGZpbGUuaD4KKysjaW5jbHVkZSA8c3lzL3N5c21hY3Jvcy5oPgorICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorIAorLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL3FlbXUva2VybmVsLmNvbmZpZworKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL3FlbXUva2VybmVsLmNvbmZpZworQEAgLTM5LDYgKzM5LDcgQEAgQ09ORklHX1BSSU5USz15CisgQ09ORklHX0tBTExTWU1TPXkKKyBDT05GSUdfQlVHPXkKKyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1BFUkZPUk1BTkNFPXkKKytDT05GSUdfSlVNUF9MQUJFTD15CisgQ09ORklHX0VNQkVEREVEPW4KKyBDT05GSUdfQkFTRV9GVUxMPXkKKyBDT05GSUdfRlVURVg9eQorQEAgLTU1LDYgKzU2LDcgQEAgQ09ORklHX05PX0haX0lETEU9eQorIENPTkZJR19OT19IWl9GVUxMPW4KKyBDT05GSUdfSFpfUEVSSU9ESUM9bgorIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQorK0NPTkZJR19DT01QQVRfMzJCSVRfVElNRT15CisgQ09ORklHX0FSQ0hfUkFORE9NPXkKKyBDT05GSUdfRklMRV9MT0NLSU5HPXkKKyBDT05GSUdfUE9TSVhfVElNRVJTPXkKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNzktd2lyZWd1YXJkLXF1ZXVlaW5nLWRvLW5vdC1hY2NvdW50LWZvci1wZm1lbWFsbG9jLXdoZS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwNzktd2lyZWd1YXJkLXF1ZXVlaW5nLWRvLW5vdC1hY2NvdW50LWZvci1wZm1lbWFsbG9jLXdoZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjAzYjFiCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA3OS13aXJlZ3VhcmQtcXVldWVpbmctZG8tbm90LWFjY291bnQtZm9yLXBmbWVtYWxsb2Mtd2hlLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJKYXNvbiBBLiBEb25lbmZlbGQiIDxKYXNvbkB6eDJjNC5jb20+CitEYXRlOiBUaHUsIDIgSmFuIDIwMjAgMTc6NDc6NTAgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gd2lyZWd1YXJkOiBxdWV1ZWluZzogZG8gbm90IGFjY291bnQgZm9yIHBmbWVtYWxsb2Mgd2hlbgorIGNsZWFyaW5nIHNrYiBoZWFkZXIKKworY29tbWl0IDA0ZDJlYTkyYTE4NDE3NjE5MTgyY2JiNzkwNjNmMTU0ODkyYjAxNTAgdXBzdHJlYW0uCisKK0JlZm9yZSA4YjcwMDg2MjBiODQgKCJuZXQ6IERvbid0IGNvcHkgcGZtZW1hbGxvYyBmbGFnIGluIF9fY29weV9za2JfCitoZWFkZXIoKSIpLCB0aGUgcGZtZW1hbGxvYyBmbGFnIHVzZWQgdG8gYmUgYmV0d2VlbiBoZWFkZXJzX3N0YXJ0IGFuZAoraGVhZGVyc19lbmQsIHdoaWNoIGlzIGEgcmVnaW9uIHdlIGNsZWFyIHdoZW4gcHJlcGFyaW5nIHRoZSBwYWNrZXQgZm9yCitlbmNyeXB0aW9uL2RlY3J5cHRpb24uIFRoaXMgaXMgYSBwYXJhbWV0ZXIgd2UgY2VydGFpbmx5IHdhbnQgdG8KK3ByZXNlcnZlLCB3aGljaCBpcyB3aHkgOGI3MDA4NjIwYjg0IG1vdmVkIGl0IG91dCBvZiB0aGVyZS4gVGhlIGNvZGUgaGVyZQord2FzIHdyaXR0ZW4gaW4gYSB3b3JsZCBiZWZvcmUgOGI3MDA4NjIwYjg0LCB0aG91Z2gsIHdoZXJlIHdlIGhhZCB0bworbWFudWFsbHkgYWNjb3VudCBmb3IgaXQuIFRoaXMgY29tbWl0IGJyaW5ncyB0aGluZ3MgdXAgdG8gc3BlZWQuCisKK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorU2lnbmVkLW9mZi1ieTogRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaCB8IDMgLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaAorQEAgLTgzLDEzICs4MywxMCBAQCBzdGF0aWMgaW5saW5lIF9fYmUxNiB3Z19za2JfZXhhbWluZV91bnRyCisgCisgc3RhdGljIGlubGluZSB2b2lkIHdnX3Jlc2V0X3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorIHsKKy0JY29uc3QgaW50IHBmbWVtYWxsb2MgPSBza2ItPnBmbWVtYWxsb2M7CistCisgCXNrYl9zY3J1Yl9wYWNrZXQoc2tiLCB0cnVlKTsKKyAJbWVtc2V0KCZza2ItPmhlYWRlcnNfc3RhcnQsIDAsCisgCSAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgaGVhZGVyc19lbmQpIC0KKyAJCSAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgaGVhZGVyc19zdGFydCkpOworLQlza2ItPnBmbWVtYWxsb2MgPSBwZm1lbWFsbG9jOworIAlza2ItPnF1ZXVlX21hcHBpbmcgPSAwOworIAlza2ItPm5vaGRyID0gMDsKKyAJc2tiLT5wZWVrZWQgPSAwOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA4MC13aXJlZ3VhcmQtc29ja2V0LW1hcmstc2ticy1hcy1ub3Qtb24tbGlzdC13aGVuLXJlY2VpLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA4MC13aXJlZ3VhcmQtc29ja2V0LW1hcmstc2ticy1hcy1ub3Qtb24tbGlzdC13aGVuLXJlY2VpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3OTQ5MWMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDgwLXdpcmVndWFyZC1zb2NrZXQtbWFyay1za2JzLWFzLW5vdC1vbi1saXN0LXdoZW4tcmVjZWkucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIkphc29uIEEuIERvbmVuZmVsZCIgPEphc29uQHp4MmM0LmNvbT4KK0RhdGU6IFRodSwgMiBKYW4gMjAyMCAxNzo0Nzo1MSArMDEwMAorU3ViamVjdDogW1BBVENIXSB3aXJlZ3VhcmQ6IHNvY2tldDogbWFyayBza2JzIGFzIG5vdCBvbiBsaXN0IHdoZW4gcmVjZWl2aW5nCisgdmlhIGdybworCitjb21taXQgNzM2Nzc1ZDA2YmFjNjBkN2EzNTNlNDA1Mzk4YjQ4YjJiZDhiMWU1NCB1cHN0cmVhbS4KKworQ2VydGFpbiBkcml2ZXJzIHdpbGwgcGFzcyBncm8gc2ticyB0byB1ZHAsIGF0IHdoaWNoIHBvaW50IHRoZSB1ZHAgZHJpdmVyCitzaW1wbHkgaXRlcmF0ZXMgdGhyb3VnaCB0aGVtIGFuZCBwYXNzZXMgdGhlbSBvZmYgdG8gZW5jYXBfcmN2LCB3aGljaCBpcword2hlcmUgd2UgcGljayB1cC4gQXQgdGhlIG1vbWVudCwgd2UncmUgbm90IGF0dGVtcHRpbmcgdG8gY29hbGVzY2UgdGhlc2UKK2ludG8gYnVuZGxlcywgYnV0IHdlIGFsc28gZG9uJ3Qgd2FudCB0byB3aW5kIHVwIGhhdmluZyBjYXNjYWRlZCBsaXN0cyBvZgorc2ticyB0cmVhdGVkIHNlcGFyYXRlbHkuIFRoZSByaWdodCBiZWhhdmlvciBoZXJlLCB0aGVuLCBpcyB0byBqdXN0IG1hcmsKK2VhY2ggaW5jb21pbmcgb25lIGFzIG5vdCBvbiBhIGxpc3QuIFRoaXMgY2FuIGJlIHNlZW4gaW4gcHJhY3RpY2UsIGZvcgorZXhhbXBsZSwgd2l0aCBRdWFsY29tbSdzIHJtbmV0X3BlcmYgZHJpdmVyLgorCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KK1Rlc3RlZC1ieTogWWFyb3NsYXYgRnVybWFuIDx5YXJvMzMwQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NvY2tldC5jIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKKy0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9zb2NrZXQuYworKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NvY2tldC5jCitAQCAtMzMzLDYgKzMzMyw3IEBAIHN0YXRpYyBpbnQgd2dfcmVjZWl2ZShzdHJ1Y3Qgc29jayAqc2ssIHMKKyAJd2cgPSBzay0+c2tfdXNlcl9kYXRhOworIAlpZiAodW5saWtlbHkoIXdnKSkKKyAJCWdvdG8gZXJyOworKwlza2JfbWFya19ub3Rfb25fbGlzdChza2IpOworIAl3Z19wYWNrZXRfcmVjZWl2ZSh3Zywgc2tiKTsKKyAJcmV0dXJuIDA7CisgCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDgxLXdpcmVndWFyZC1hbGxvd2VkaXBzLWZpeC11c2UtYWZ0ZXItZnJlZS1pbi1yb290X3JlbW8ucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDgxLXdpcmVndWFyZC1hbGxvd2VkaXBzLWZpeC11c2UtYWZ0ZXItZnJlZS1pbi1yb290X3JlbW8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc3YWI1OAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwODEtd2lyZWd1YXJkLWFsbG93ZWRpcHMtZml4LXVzZS1hZnRlci1mcmVlLWluLXJvb3RfcmVtby5wYXRjaApAQCAtMCwwICsxLDE2NCBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRXJpYyBEdW1hemV0IDxlZHVtYXpldEBnb29nbGUuY29tPgorRGF0ZTogVHVlLCA0IEZlYiAyMDIwIDIyOjE3OjI1ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIHdpcmVndWFyZDogYWxsb3dlZGlwczogZml4IHVzZS1hZnRlci1mcmVlIGluCisgcm9vdF9yZW1vdmVfcGVlcl9saXN0cworCitjb21taXQgOTk4MTE1OWZjM2I2NzdiMzU3Zjg0ZTA2OWExMWRlNWE1ZWM4YTJhOCB1cHN0cmVhbS4KKworSW4gdGhlIHVubGlrZWx5IGNhc2UgYSBuZXcgbm9kZSBjb3VsZCBub3QgYmUgYWxsb2NhdGVkLCB3ZSBuZWVkIHRvCityZW1vdmUgQG5ld25vZGUgZnJvbSBAcGVlci0+YWxsb3dlZGlwc19saXN0IGJlZm9yZSBmcmVlaW5nIGl0LgorCitzeXpib3QgcmVwb3J0ZWQ6CisKK0JVRzogS0FTQU46IHVzZS1hZnRlci1mcmVlIGluIF9fbGlzdF9kZWxfZW50cnlfdmFsaWQrMHhkYy8weGY1IGxpYi9saXN0X2RlYnVnLmM6NTQKK1JlYWQgb2Ygc2l6ZSA4IGF0IGFkZHIgZmZmZjg4ODA5ODgxYTUzOCBieSB0YXNrIHN5ei1leGVjdXRvci40LzMwMTMzCisKK0NQVTogMCBQSUQ6IDMwMTMzIENvbW06IHN5ei1leGVjdXRvci40IE5vdCB0YWludGVkIDUuNS4wLXN5emthbGxlciAjMAorSGFyZHdhcmUgbmFtZTogR29vZ2xlIEdvb2dsZSBDb21wdXRlIEVuZ2luZS9Hb29nbGUgQ29tcHV0ZSBFbmdpbmUsIEJJT1MgR29vZ2xlIDAxLzAxLzIwMTEKK0NhbGwgVHJhY2U6CisgX19kdW1wX3N0YWNrIGxpYi9kdW1wX3N0YWNrLmM6NzcgW2lubGluZV0KKyBkdW1wX3N0YWNrKzB4MTk3LzB4MjEwIGxpYi9kdW1wX3N0YWNrLmM6MTE4CisgcHJpbnRfYWRkcmVzc19kZXNjcmlwdGlvbi5jb25zdHByb3AuMC5jb2xkKzB4ZDQvMHgzMGIgbW0va2FzYW4vcmVwb3J0LmM6Mzc0CisgX19rYXNhbl9yZXBvcnQuY29sZCsweDFiLzB4MzIgbW0va2FzYW4vcmVwb3J0LmM6NTA2Cisga2FzYW5fcmVwb3J0KzB4MTIvMHgyMCBtbS9rYXNhbi9jb21tb24uYzo2MzkKKyBfX2FzYW5fcmVwb3J0X2xvYWQ4X25vYWJvcnQrMHgxNC8weDIwIG1tL2thc2FuL2dlbmVyaWNfcmVwb3J0LmM6MTM1CisgX19saXN0X2RlbF9lbnRyeV92YWxpZCsweGRjLzB4ZjUgbGliL2xpc3RfZGVidWcuYzo1NAorIF9fbGlzdF9kZWxfZW50cnkgaW5jbHVkZS9saW51eC9saXN0Lmg6MTMyIFtpbmxpbmVdCisgbGlzdF9kZWwgaW5jbHVkZS9saW51eC9saXN0Lmg6MTQ2IFtpbmxpbmVdCisgcm9vdF9yZW1vdmVfcGVlcl9saXN0cysweDI0Zi8weDRiMCBkcml2ZXJzL25ldC93aXJlZ3VhcmQvYWxsb3dlZGlwcy5jOjY1Cisgd2dfYWxsb3dlZGlwc19mcmVlKzB4MjMyLzB4MzkwIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9hbGxvd2VkaXBzLmM6MzAwCisgd2dfcGVlcl9yZW1vdmVfYWxsKzB4ZDUvMHg2MjAgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYzoxODcKKyB3Z19zZXRfZGV2aWNlKzB4ZDAxLzB4MTM1MCBkcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jOjU0MgorIGdlbmxfZmFtaWx5X3Jjdl9tc2dfZG9pdCBuZXQvbmV0bGluay9nZW5ldGxpbmsuYzo2NzIgW2lubGluZV0KKyBnZW5sX2ZhbWlseV9yY3ZfbXNnIG5ldC9uZXRsaW5rL2dlbmV0bGluay5jOjcxNyBbaW5saW5lXQorIGdlbmxfcmN2X21zZysweDY3ZC8weGVhMCBuZXQvbmV0bGluay9nZW5ldGxpbmsuYzo3MzQKKyBuZXRsaW5rX3Jjdl9za2IrMHgxNzcvMHg0NTAgbmV0L25ldGxpbmsvYWZfbmV0bGluay5jOjI0NzcKKyBnZW5sX3JjdisweDI5LzB4NDAgbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6NzQ1CisgbmV0bGlua191bmljYXN0X2tlcm5lbCBuZXQvbmV0bGluay9hZl9uZXRsaW5rLmM6MTMwMiBbaW5saW5lXQorIG5ldGxpbmtfdW5pY2FzdCsweDU5ZS8weDdlMCBuZXQvbmV0bGluay9hZl9uZXRsaW5rLmM6MTMyOAorIG5ldGxpbmtfc2VuZG1zZysweDkxYy8weGVhMCBuZXQvbmV0bGluay9hZl9uZXRsaW5rLmM6MTkxNworIHNvY2tfc2VuZG1zZ19ub3NlYyBuZXQvc29ja2V0LmM6NjUyIFtpbmxpbmVdCisgc29ja19zZW5kbXNnKzB4ZDcvMHgxMzAgbmV0L3NvY2tldC5jOjY3MgorIF9fX19zeXNfc2VuZG1zZysweDc1My8weDg4MCBuZXQvc29ja2V0LmM6MjM0MworIF9fX3N5c19zZW5kbXNnKzB4MTAwLzB4MTcwIG5ldC9zb2NrZXQuYzoyMzk3CisgX19zeXNfc2VuZG1zZysweDEwNS8weDFkMCBuZXQvc29ja2V0LmM6MjQzMAorIF9fZG9fc3lzX3NlbmRtc2cgbmV0L3NvY2tldC5jOjI0MzkgW2lubGluZV0KKyBfX3NlX3N5c19zZW5kbXNnIG5ldC9zb2NrZXQuYzoyNDM3IFtpbmxpbmVdCisgX194NjRfc3lzX3NlbmRtc2crMHg3OC8weGIwIG5ldC9zb2NrZXQuYzoyNDM3CisgZG9fc3lzY2FsbF82NCsweGZhLzB4NzkwIGFyY2gveDg2L2VudHJ5L2NvbW1vbi5jOjI5NAorIGVudHJ5X1NZU0NBTExfNjRfYWZ0ZXJfaHdmcmFtZSsweDQ5LzB4YmUKK1JJUDogMDAzMzoweDQ1YjM5OQorQ29kZTogYWQgYjYgZmIgZmYgYzMgNjYgMmUgMGYgMWYgODQgMDAgMDAgMDAgMDAgMDAgNjYgOTAgNDggODkgZjggNDggODkgZjcgNDggODkgZDYgNDggODkgY2EgNGQgODkgYzIgNGQgODkgYzggNGMgOGIgNGMgMjQgMDggMGYgMDUgPDQ4PiAzZCAwMSBmMCBmZiBmZiAwZiA4MyA3YiBiNiBmYiBmZiBjMyA2NiAyZSAwZiAxZiA4NCAwMCAwMCAwMCAwMAorUlNQOiAwMDJiOjAwMDA3Zjk5YTliY2RjNzggRUZMQUdTOiAwMDAwMDI0NiBPUklHX1JBWDogMDAwMDAwMDAwMDAwMDAyZQorUkFYOiBmZmZmZmZmZmZmZmZmZmRhIFJCWDogMDAwMDdmOTlhOWJjZTZkNCBSQ1g6IDAwMDAwMDAwMDA0NWIzOTkKK1JEWDogMDAwMDAwMDAwMDAwMDAwMCBSU0k6IDAwMDAwMDAwMjAwMDEzNDAgUkRJOiAwMDAwMDAwMDAwMDAwMDAzCitSQlA6IDAwMDAwMDAwMDA3NWJmMjAgUjA4OiAwMDAwMDAwMDAwMDAwMDAwIFIwOTogMDAwMDAwMDAwMDAwMDAwMAorUjEwOiAwMDAwMDAwMDAwMDAwMDAwIFIxMTogMDAwMDAwMDAwMDAwMDI0NiBSMTI6IDAwMDAwMDAwMDAwMDAwMDQKK1IxMzogMDAwMDAwMDAwMDAwMDliYSBSMTQ6IDAwMDAwMDAwMDA0Y2IyYjggUjE1OiAwMDAwMDAwMDAwMDAwMDA5CisKK0FsbG9jYXRlZCBieSB0YXNrIDMwMTAzOgorIHNhdmVfc3RhY2srMHgyMy8weDkwIG1tL2thc2FuL2NvbW1vbi5jOjcyCisgc2V0X3RyYWNrIG1tL2thc2FuL2NvbW1vbi5jOjgwIFtpbmxpbmVdCisgX19rYXNhbl9rbWFsbG9jIG1tL2thc2FuL2NvbW1vbi5jOjUxMyBbaW5saW5lXQorIF9fa2FzYW5fa21hbGxvYy5jb25zdHByb3AuMCsweGNmLzB4ZTAgbW0va2FzYW4vY29tbW9uLmM6NDg2Cisga2FzYW5fa21hbGxvYysweDkvMHgxMCBtbS9rYXNhbi9jb21tb24uYzo1MjcKKyBrbWVtX2NhY2hlX2FsbG9jX3RyYWNlKzB4MTU4LzB4NzkwIG1tL3NsYWIuYzozNTUxCisga21hbGxvYyBpbmNsdWRlL2xpbnV4L3NsYWIuaDo1NTYgW2lubGluZV0KKyBremFsbG9jIGluY2x1ZGUvbGludXgvc2xhYi5oOjY3MCBbaW5saW5lXQorIGFkZCsweDcwYS8weDE5NzAgZHJpdmVycy9uZXQvd2lyZWd1YXJkL2FsbG93ZWRpcHMuYzoyMzYKKyB3Z19hbGxvd2VkaXBzX2luc2VydF92NCsweGY2LzB4MTYwIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9hbGxvd2VkaXBzLmM6MzIwCisgc2V0X2FsbG93ZWRpcCBkcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jOjM0MyBbaW5saW5lXQorIHNldF9wZWVyKzB4ZmI5LzB4MTE1MCBkcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jOjQ2OAorIHdnX3NldF9kZXZpY2UrMHhiZDQvMHgxMzUwIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmM6NTkxCisgZ2VubF9mYW1pbHlfcmN2X21zZ19kb2l0IG5ldC9uZXRsaW5rL2dlbmV0bGluay5jOjY3MiBbaW5saW5lXQorIGdlbmxfZmFtaWx5X3Jjdl9tc2cgbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6NzE3IFtpbmxpbmVdCisgZ2VubF9yY3ZfbXNnKzB4NjdkLzB4ZWEwIG5ldC9uZXRsaW5rL2dlbmV0bGluay5jOjczNAorIG5ldGxpbmtfcmN2X3NrYisweDE3Ny8weDQ1MCBuZXQvbmV0bGluay9hZl9uZXRsaW5rLmM6MjQ3NworIGdlbmxfcmN2KzB4MjkvMHg0MCBuZXQvbmV0bGluay9nZW5ldGxpbmsuYzo3NDUKKyBuZXRsaW5rX3VuaWNhc3Rfa2VybmVsIG5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYzoxMzAyIFtpbmxpbmVdCisgbmV0bGlua191bmljYXN0KzB4NTllLzB4N2UwIG5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYzoxMzI4CisgbmV0bGlua19zZW5kbXNnKzB4OTFjLzB4ZWEwIG5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYzoxOTE3Cisgc29ja19zZW5kbXNnX25vc2VjIG5ldC9zb2NrZXQuYzo2NTIgW2lubGluZV0KKyBzb2NrX3NlbmRtc2crMHhkNy8weDEzMCBuZXQvc29ja2V0LmM6NjcyCisgX19fX3N5c19zZW5kbXNnKzB4NzUzLzB4ODgwIG5ldC9zb2NrZXQuYzoyMzQzCisgX19fc3lzX3NlbmRtc2crMHgxMDAvMHgxNzAgbmV0L3NvY2tldC5jOjIzOTcKKyBfX3N5c19zZW5kbXNnKzB4MTA1LzB4MWQwIG5ldC9zb2NrZXQuYzoyNDMwCisgX19kb19zeXNfc2VuZG1zZyBuZXQvc29ja2V0LmM6MjQzOSBbaW5saW5lXQorIF9fc2Vfc3lzX3NlbmRtc2cgbmV0L3NvY2tldC5jOjI0MzcgW2lubGluZV0KKyBfX3g2NF9zeXNfc2VuZG1zZysweDc4LzB4YjAgbmV0L3NvY2tldC5jOjI0MzcKKyBkb19zeXNjYWxsXzY0KzB4ZmEvMHg3OTAgYXJjaC94ODYvZW50cnkvY29tbW9uLmM6Mjk0CisgZW50cnlfU1lTQ0FMTF82NF9hZnRlcl9od2ZyYW1lKzB4NDkvMHhiZQorCitGcmVlZCBieSB0YXNrIDMwMTAzOgorIHNhdmVfc3RhY2srMHgyMy8weDkwIG1tL2thc2FuL2NvbW1vbi5jOjcyCisgc2V0X3RyYWNrIG1tL2thc2FuL2NvbW1vbi5jOjgwIFtpbmxpbmVdCisga2FzYW5fc2V0X2ZyZWVfaW5mbyBtbS9rYXNhbi9jb21tb24uYzozMzUgW2lubGluZV0KKyBfX2thc2FuX3NsYWJfZnJlZSsweDEwMi8weDE1MCBtbS9rYXNhbi9jb21tb24uYzo0NzQKKyBrYXNhbl9zbGFiX2ZyZWUrMHhlLzB4MTAgbW0va2FzYW4vY29tbW9uLmM6NDgzCisgX19jYWNoZV9mcmVlIG1tL3NsYWIuYzozNDI2IFtpbmxpbmVdCisga2ZyZWUrMHgxMGEvMHgyYzAgbW0vc2xhYi5jOjM3NTcKKyBhZGQrMHgxMmQyLzB4MTk3MCBkcml2ZXJzL25ldC93aXJlZ3VhcmQvYWxsb3dlZGlwcy5jOjI2NgorIHdnX2FsbG93ZWRpcHNfaW5zZXJ0X3Y0KzB4ZjYvMHgxNjAgZHJpdmVycy9uZXQvd2lyZWd1YXJkL2FsbG93ZWRpcHMuYzozMjAKKyBzZXRfYWxsb3dlZGlwIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmM6MzQzIFtpbmxpbmVdCisgc2V0X3BlZXIrMHhmYjkvMHgxMTUwIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmM6NDY4Cisgd2dfc2V0X2RldmljZSsweGJkNC8weDEzNTAgZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYzo1OTEKKyBnZW5sX2ZhbWlseV9yY3ZfbXNnX2RvaXQgbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6NjcyIFtpbmxpbmVdCisgZ2VubF9mYW1pbHlfcmN2X21zZyBuZXQvbmV0bGluay9nZW5ldGxpbmsuYzo3MTcgW2lubGluZV0KKyBnZW5sX3Jjdl9tc2crMHg2N2QvMHhlYTAgbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmM6NzM0CisgbmV0bGlua19yY3Zfc2tiKzB4MTc3LzB4NDUwIG5ldC9uZXRsaW5rL2FmX25ldGxpbmsuYzoyNDc3CisgZ2VubF9yY3YrMHgyOS8weDQwIG5ldC9uZXRsaW5rL2dlbmV0bGluay5jOjc0NQorIG5ldGxpbmtfdW5pY2FzdF9rZXJuZWwgbmV0L25ldGxpbmsvYWZfbmV0bGluay5jOjEzMDIgW2lubGluZV0KKyBuZXRsaW5rX3VuaWNhc3QrMHg1OWUvMHg3ZTAgbmV0L25ldGxpbmsvYWZfbmV0bGluay5jOjEzMjgKKyBuZXRsaW5rX3NlbmRtc2crMHg5MWMvMHhlYTAgbmV0L25ldGxpbmsvYWZfbmV0bGluay5jOjE5MTcKKyBzb2NrX3NlbmRtc2dfbm9zZWMgbmV0L3NvY2tldC5jOjY1MiBbaW5saW5lXQorIHNvY2tfc2VuZG1zZysweGQ3LzB4MTMwIG5ldC9zb2NrZXQuYzo2NzIKKyBfX19fc3lzX3NlbmRtc2crMHg3NTMvMHg4ODAgbmV0L3NvY2tldC5jOjIzNDMKKyBfX19zeXNfc2VuZG1zZysweDEwMC8weDE3MCBuZXQvc29ja2V0LmM6MjM5NworIF9fc3lzX3NlbmRtc2crMHgxMDUvMHgxZDAgbmV0L3NvY2tldC5jOjI0MzAKKyBfX2RvX3N5c19zZW5kbXNnIG5ldC9zb2NrZXQuYzoyNDM5IFtpbmxpbmVdCisgX19zZV9zeXNfc2VuZG1zZyBuZXQvc29ja2V0LmM6MjQzNyBbaW5saW5lXQorIF9feDY0X3N5c19zZW5kbXNnKzB4NzgvMHhiMCBuZXQvc29ja2V0LmM6MjQzNworIGRvX3N5c2NhbGxfNjQrMHhmYS8weDc5MCBhcmNoL3g4Ni9lbnRyeS9jb21tb24uYzoyOTQKKyBlbnRyeV9TWVNDQUxMXzY0X2FmdGVyX2h3ZnJhbWUrMHg0OS8weGJlCisKK1RoZSBidWdneSBhZGRyZXNzIGJlbG9uZ3MgdG8gdGhlIG9iamVjdCBhdCBmZmZmODg4MDk4ODFhNTAwCisgd2hpY2ggYmVsb25ncyB0byB0aGUgY2FjaGUga21hbGxvYy02NCBvZiBzaXplIDY0CitUaGUgYnVnZ3kgYWRkcmVzcyBpcyBsb2NhdGVkIDU2IGJ5dGVzIGluc2lkZSBvZgorIDY0LWJ5dGUgcmVnaW9uIFtmZmZmODg4MDk4ODFhNTAwLCBmZmZmODg4MDk4ODFhNTQwKQorVGhlIGJ1Z2d5IGFkZHJlc3MgYmVsb25ncyB0byB0aGUgcGFnZToKK3BhZ2U6ZmZmZmVhMDAwMjYyMDY4MCByZWZjb3VudDoxIG1hcGNvdW50OjAgbWFwcGluZzpmZmZmODg4MGFhNDAwMzgwIGluZGV4OjB4MAorcmF3OiAwMGZmZmUwMDAwMDAwMjAwIGZmZmZlYTAwMDI1MGI3NDggZmZmZmVhMDAwMjU0YmFjOCBmZmZmODg4MGFhNDAwMzgwCityYXc6IDAwMDAwMDAwMDAwMDAwMDAgZmZmZjg4ODA5ODgxYTAwMCAwMDAwMDAwMTAwMDAwMDIwIDAwMDAwMDAwMDAwMDAwMDAKK3BhZ2UgZHVtcGVkIGJlY2F1c2U6IGthc2FuOiBiYWQgYWNjZXNzIGRldGVjdGVkCisKK01lbW9yeSBzdGF0ZSBhcm91bmQgdGhlIGJ1Z2d5IGFkZHJlc3M6CisgZmZmZjg4ODA5ODgxYTQwMDogZmIgZmIgZmIgZmIgZmIgZmIgZmIgZmIgZmMgZmMgZmMgZmMgZmMgZmMgZmMgZmMKKyBmZmZmODg4MDk4ODFhNDgwOiAwMCAwMCAwMCAwMCAwMCBmYyBmYyBmYyBmYyBmYyBmYyBmYyBmYyBmYyBmYyBmYworPmZmZmY4ODgwOTg4MWE1MDA6IGZiIGZiIGZiIGZiIGZiIGZiIGZiIGZiIGZjIGZjIGZjIGZjIGZjIGZjIGZjIGZjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorIGZmZmY4ODgwOTg4MWE1ODA6IGZiIGZiIGZiIGZiIGZiIGZiIGZiIGZiIGZjIGZjIGZjIGZjIGZjIGZjIGZjIGZjCisgZmZmZjg4ODA5ODgxYTYwMDogMDAgMDAgMDAgMDAgMDAgMDAgZmMgZmMgZmMgZmMgZmMgZmMgZmMgZmMgZmMgZmMKKworRml4ZXM6IGU3MDk2YzEzMWU1MSAoIm5ldDogV2lyZUd1YXJkIHNlY3VyZSBuZXR3b3JrIHR1bm5lbCIpCitTaWduZWQtb2ZmLWJ5OiBFcmljIER1bWF6ZXQgPGVkdW1hemV0QGdvb2dsZS5jb20+CitSZXBvcnRlZC1ieTogc3l6Ym90IDxzeXprYWxsZXJAZ29vZ2xlZ3JvdXBzLmNvbT4KK0NjOiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KK0NjOiB3aXJlZ3VhcmRAbGlzdHMuengyYzQuY29tCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL2FsbG93ZWRpcHMuYyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCistLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvYWxsb3dlZGlwcy5jCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvYWxsb3dlZGlwcy5jCitAQCAtMjYzLDYgKzI2Myw3IEBAIHN0YXRpYyBpbnQgYWRkKHN0cnVjdCBhbGxvd2VkaXBzX25vZGUgX18KKyAJfSBlbHNlIHsKKyAJCW5vZGUgPSBremFsbG9jKHNpemVvZigqbm9kZSksIEdGUF9LRVJORUwpOworIAkJaWYgKHVubGlrZWx5KCFub2RlKSkgeworKwkJCWxpc3RfZGVsKCZuZXdub2RlLT5wZWVyX2xpc3QpOworIAkJCWtmcmVlKG5ld25vZGUpOworIAkJCXJldHVybiAtRU5PTUVNOworIAkJfQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA4Mi13aXJlZ3VhcmQtbm9pc2UtcmVqZWN0LXBlZXJzLXdpdGgtbG93LW9yZGVyLXB1YmxpYy1rLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA4Mi13aXJlZ3VhcmQtbm9pc2UtcmVqZWN0LXBlZXJzLXdpdGgtbG93LW9yZGVyLXB1YmxpYy1rLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1YmIyNzYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDgyLXdpcmVndWFyZC1ub2lzZS1yZWplY3QtcGVlcnMtd2l0aC1sb3ctb3JkZXItcHVibGljLWsucGF0Y2gKQEAgLTAsMCArMSwyMzMgQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJKYXNvbiBBLiBEb25lbmZlbGQiIDxKYXNvbkB6eDJjNC5jb20+CitEYXRlOiBUdWUsIDQgRmViIDIwMjAgMjI6MTc6MjYgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gd2lyZWd1YXJkOiBub2lzZTogcmVqZWN0IHBlZXJzIHdpdGggbG93IG9yZGVyIHB1YmxpYyBrZXlzCisKK2NvbW1pdCBlYzMxYzI2NzZhMTBlMDY0ODc4OTI3YjI0M2ZhZGE4YzJmYjBjMDNjIHVwc3RyZWFtLgorCitPdXIgc3RhdGljLXN0YXRpYyBjYWxjdWxhdGlvbiByZXR1cm5zIGEgZmFpbHVyZSBpZiB0aGUgcHVibGljIGtleSBpcyBvZgorbG93IG9yZGVyLiBXZSBjaGVjayBmb3IgdGhpcyB3aGVuIHBlZXJzIGFyZSBhZGRlZCwgYW5kIGRvbid0IGFsbG93IHRoZW0KK3RvIGJlIGFkZGVkIGlmIHRoZXkncmUgbG93IG9yZGVyLCBleGNlcHQgaW4gdGhlIGNhc2Ugd2hlcmUgd2UgaGF2ZW4ndAoreWV0IGJlZW4gZ2l2ZW4gYSBwcml2YXRlIGtleS4gSW4gdGhhdCBjYXNlLCB3ZSB3b3VsZCBkZWZlciB0aGUgcmVtb3ZhbAorb2YgdGhlIHBlZXIgdW50aWwgd2UncmUgZ2l2ZW4gYSBwcml2YXRlIGtleSwgc2luY2UgYXQgdGhhdCBwb2ludCB3ZSdyZQorZG9pbmcgbmV3IHN0YXRpYy1zdGF0aWMgY2FsY3VsYXRpb25zIHdoaWNoIGluY3VyIGZhaWx1cmVzIHdlIGNhbiBhY3Qgb24uCitUaGlzIG1lYW50LCBob3dldmVyLCB0aGF0IHdlIHdvdW5kIHVwIHJlbW92aW5nIHBlZXJzIHJhdGhlciBsYXRlIGluIHRoZQorY29uZmlndXJhdGlvbiBmbG93LgorCitTeXprYWxsZXIgcG9pbnRzIG91dCB0aGF0IHBlZXJfcmVtb3ZlIGNhbGxzIGZsdXNoX3dvcmtxdWV1ZSwgd2hpY2ggaW4KK3R1cm4gbWlnaHQgdGhlbiB3YWl0IGZvciBzZW5kaW5nIGEgaGFuZHNoYWtlIGluaXRpYXRpb24gdG8gY29tcGxldGUuCitTaW5jZSBoYW5kc2hha2UgaW5pdGlhdGlvbiBuZWVkcyB0aGUgc3RhdGljIGlkZW50aXR5IGxvY2ssIGhvbGRpbmcgdGhlCitzdGF0aWMgaWRlbnRpdHkgbG9jayB3aGlsZSBjYWxsaW5nIHBlZXJfcmVtb3ZlIGNhbiByZXN1bHQgaW4gYSByYXJlCitkZWFkbG9jay4gV2UgaGF2ZSBwcmVjaXNlbHkgdGhpcyBjYXNlIGluIHRoaXMgc2l0dWF0aW9uIG9mIGxhdGUtc3RhZ2UKK3BlZXIgcmVtb3ZhbCBiYXNlZCBvbiBhbiBpbnZhbGlkIHB1YmxpYyBrZXkuIFdlIGNhbid0IGRyb3AgdGhlIGxvY2sgd2hlbgorcmVtb3ZpbmcsIGJlY2F1c2UgdGhlbiBpbmNvbWluZyBoYW5kc2hha2VzIG1pZ2h0IGludGVyYWN0IHdpdGggYSBib2d1cworc3RhdGljLXN0YXRpYyBjYWxjdWxhdGlvbi4KKworV2hpbGUgdGhlIGJhbmQtYWlkIHBhdGNoIGZvciB0aGlzIHdvdWxkIGludm9sdmUgYnJlYWtpbmcgdXAgdGhlIHBlZXIKK3JlbW92YWwgaW50byB0d28gc3RlcHMgbGlrZSB3Z19wZWVyX3JlbW92ZV9hbGwgZG9lcywgaW4gb3JkZXIgdG8gc29sdmUKK3RoZSBsb2NraW5nIGlzc3VlLCB0aGVyZSdzIGFjdHVhbGx5IGEgbXVjaCBtb3JlIGVsZWdhbnQgd2F5IG9mIGZpeGluZwordGhpczoKKworSWYgdGhlIHN0YXRpYy1zdGF0aWMgY2FsY3VsYXRpb24gc3VjY2VlZHMgd2l0aCBvbmUgcHJpdmF0ZSBrZXksIGl0CisqbXVzdCogc3VjY2VlZCB3aXRoIGFsbCBvdGhlcnMsIGJlY2F1c2UgYWxsIDMyLWJ5dGUgc3RyaW5ncyBtYXAgdG8gdmFsaWQKK3ByaXZhdGUga2V5cywgdGhhbmtzIHRvIGNsYW1waW5nLiBUaGF0IG1lYW5zIHdlIGNhbiBnZXQgcmlkIG9mIHRoaXMKK3NpbGx5IGRhbmNlIGFuZCBsb2NraW5nIGhlYWRhY2hlcyBvZiByZW1vdmluZyBwZWVycyBsYXRlIGluIHRoZQorY29uZmlndXJhdGlvbiBmbG93LCBhbmQgaW5zdGVhZCBqdXN0IHJlamVjdCB0aGVtIGVhcmx5IG9uLCByZWdhcmRsZXNzIG9mCit3aGV0aGVyIHRoZSBkZXZpY2UgaGFzIHlldCBiZWVuIGFzc2lnbmVkIGEgcHJpdmF0ZSBrZXkuIEZvciB0aGUgY2FzZQord2hlcmUgdGhlIGRldmljZSBkb2Vzbid0IHlldCBoYXZlIGEgcHJpdmF0ZSBrZXksIHdlIHNhZmVseSB1c2UgemVyb3MKK2p1c3QgZm9yIHRoZSBwdXJwb3NlcyBvZiBjaGVja2luZyBmb3IgbG93IG9yZGVyIHBvaW50cyBieSB3YXkgb2YKK2NoZWNraW5nIHRoZSBvdXRwdXQgb2YgdGhlIGNhbGN1bGF0aW9uLgorCitUaGUgZm9sbG93aW5nIFBvQyB3aWxsIHRyaWdnZXIgdGhlIGRlYWRsb2NrOgorCitpcCBsaW5rIGFkZCB3ZzAgdHlwZSB3aXJlZ3VhcmQKK2lwIGFkZHIgYWRkIDEwLjAuMC4xLzI0IGRldiB3ZzAKK2lwIGxpbmsgc2V0IHdnMCB1cAorcGluZyAtZiAxMC4wLjAuMiAmCit3aGlsZSB0cnVlOyBkbworICAgICAgICB3ZyBzZXQgd2cwIHByaXZhdGUta2V5IC9kZXYvbnVsbCBwZWVyIEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE9IGFsbG93ZWQtaXBzIDEwLjAuMC4wLzI0IGVuZHBvaW50IDEwLjAuMC4zOjEyMzQKKyAgICAgICAgd2cgc2V0IHdnMCBwcml2YXRlLWtleSA8KGVjaG8gQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQT0pCitkb25lCisKK1sgICAgMC45NDkxMDVdID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorWyAgICAwLjk0OTU1MF0gV0FSTklORzogcG9zc2libGUgY2lyY3VsYXIgbG9ja2luZyBkZXBlbmRlbmN5IGRldGVjdGVkCitbICAgIDAuOTUwMTQzXSA1LjUuMC1kZWJ1ZysgIzE4IE5vdCB0YWludGVkCitbICAgIDAuOTUwNDMxXSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1sgICAgMC45NTA5NTldIHdnLzg5IGlzIHRyeWluZyB0byBhY3F1aXJlIGxvY2s6CitbICAgIDAuOTUxMjUyXSBmZmZmODg4MDMzM2UyMTI4ICgod3FfY29tcGxldGlvbil3Zy1rZXgtd2cwKXsrLisufSwgYXQ6IGZsdXNoX3dvcmtxdWV1ZSsweGUzLzB4MTJmMAorWyAgICAwLjk1MTg2NV0KK1sgICAgMC45NTE4NjVdIGJ1dCB0YXNrIGlzIGFscmVhZHkgaG9sZGluZyBsb2NrOgorWyAgICAwLjk1MjI4MF0gZmZmZjg4ODAzMjgxOWJjMCAoJndnLT5zdGF0aWNfaWRlbnRpdHkubG9jayl7KysrK30sIGF0OiB3Z19zZXRfZGV2aWNlKzB4OTVkLzB4Y2MwCitbICAgIDAuOTUzMDExXQorWyAgICAwLjk1MzAxMV0gd2hpY2ggbG9jayBhbHJlYWR5IGRlcGVuZHMgb24gdGhlIG5ldyBsb2NrLgorWyAgICAwLjk1MzAxMV0KK1sgICAgMC45NTM2NTFdCitbICAgIDAuOTUzNjUxXSB0aGUgZXhpc3RpbmcgZGVwZW5kZW5jeSBjaGFpbiAoaW4gcmV2ZXJzZSBvcmRlcikgaXM6CitbICAgIDAuOTU0MjkyXQorWyAgICAwLjk1NDI5Ml0gLT4gIzIgKCZ3Zy0+c3RhdGljX2lkZW50aXR5LmxvY2speysrKyt9OgorWyAgICAwLjk1NDgwNF0gICAgICAgIGxvY2tfYWNxdWlyZSsweDEyNy8weDM1MAorWyAgICAwLjk1NTEzM10gICAgICAgIGRvd25fcmVhZCsweDgzLzB4NDEwCitbICAgIDAuOTU1NDI4XSAgICAgICAgd2dfbm9pc2VfaGFuZHNoYWtlX2NyZWF0ZV9pbml0aWF0aW9uKzB4OTcvMHg3MDAKK1sgICAgMC45NTU4ODVdICAgICAgICB3Z19wYWNrZXRfc2VuZF9oYW5kc2hha2VfaW5pdGlhdGlvbisweDEzYS8weDI4MAorWyAgICAwLjk1NjQwMV0gICAgICAgIHdnX3BhY2tldF9oYW5kc2hha2Vfc2VuZF93b3JrZXIrMHgxMC8weDIwCitbICAgIDAuOTU2ODQxXSAgICAgICAgcHJvY2Vzc19vbmVfd29yaysweDgwNi8weDE1MDAKK1sgICAgMC45NTcxNjddICAgICAgICB3b3JrZXJfdGhyZWFkKzB4OGMvMHhjYjAKK1sgICAgMC45NTc1NDldICAgICAgICBrdGhyZWFkKzB4MmVlLzB4M2IwCitbICAgIDAuOTU3NzkyXSAgICAgICAgcmV0X2Zyb21fZm9yaysweDI0LzB4MzAKK1sgICAgMC45NTgyMzRdCitbICAgIDAuOTU4MjM0XSAtPiAjMSAoKHdvcmtfY29tcGxldGlvbikoJnBlZXItPnRyYW5zbWl0X2hhbmRzaGFrZV93b3JrKSl7Ky4rLn06CitbICAgIDAuOTU4ODA4XSAgICAgICAgbG9ja19hY3F1aXJlKzB4MTI3LzB4MzUwCitbICAgIDAuOTU5MDc1XSAgICAgICAgcHJvY2Vzc19vbmVfd29yaysweDdhYi8weDE1MDAKK1sgICAgMC45NTkzNjldICAgICAgICB3b3JrZXJfdGhyZWFkKzB4OGMvMHhjYjAKK1sgICAgMC45NTk2MzldICAgICAgICBrdGhyZWFkKzB4MmVlLzB4M2IwCitbICAgIDAuOTU5ODk2XSAgICAgICAgcmV0X2Zyb21fZm9yaysweDI0LzB4MzAKK1sgICAgMC45NjAzNDZdCitbICAgIDAuOTYwMzQ2XSAtPiAjMCAoKHdxX2NvbXBsZXRpb24pd2cta2V4LXdnMCl7Ky4rLn06CitbICAgIDAuOTYwOTQ1XSAgICAgICAgY2hlY2tfcHJldl9hZGQrMHgxNjcvMHgxZTIwCitbICAgIDAuOTYxMzUxXSAgICAgICAgX19sb2NrX2FjcXVpcmUrMHgyMDEyLzB4MzE3MAorWyAgICAwLjk2MTcyNV0gICAgICAgIGxvY2tfYWNxdWlyZSsweDEyNy8weDM1MAorWyAgICAwLjk2MTk5MF0gICAgICAgIGZsdXNoX3dvcmtxdWV1ZSsweDEwNi8weDEyZjAKK1sgICAgMC45NjIyODBdICAgICAgICBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkKzB4MTYwLzB4MjIwCitbICAgIDAuOTYyNjAwXSAgICAgICAgd2dfc2V0X2RldmljZSsweGEyNC8weGNjMAorWyAgICAwLjk2Mjk5NF0gICAgICAgIGdlbmxfcmN2X21zZysweDUyZi8weGU5MAorWyAgICAwLjk2MzI5OF0gICAgICAgIG5ldGxpbmtfcmN2X3NrYisweDExMS8weDMyMAorWyAgICAwLjk2MzYxOF0gICAgICAgIGdlbmxfcmN2KzB4MWYvMHgzMAorWyAgICAwLjk2Mzg1M10gICAgICAgIG5ldGxpbmtfdW5pY2FzdCsweDNmNi8weDYxMAorWyAgICAwLjk2NDI0NV0gICAgICAgIG5ldGxpbmtfc2VuZG1zZysweDcwMC8weGI4MAorWyAgICAwLjk2NDU4Nl0gICAgICAgIF9fc3lzX3NlbmR0bysweDFkZC8weDJjMAorWyAgICAwLjk2NDg1NF0gICAgICAgIF9feDY0X3N5c19zZW5kdG8rMHhkOC8weDFiMAorWyAgICAwLjk2NTE0MV0gICAgICAgIGRvX3N5c2NhbGxfNjQrMHg5MC8weGQ5YQorWyAgICAwLjk2NTQwOF0gICAgICAgIGVudHJ5X1NZU0NBTExfNjRfYWZ0ZXJfaHdmcmFtZSsweDQ5LzB4YmUKK1sgICAgMC45NjU3NjldCitbICAgIDAuOTY1NzY5XSBvdGhlciBpbmZvIHRoYXQgbWlnaHQgaGVscCB1cyBkZWJ1ZyB0aGlzOgorWyAgICAwLjk2NTc2OV0KK1sgICAgMC45NjYzMzddIENoYWluIGV4aXN0cyBvZjoKK1sgICAgMC45NjYzMzddICAgKHdxX2NvbXBsZXRpb24pd2cta2V4LXdnMCAtLT4gKHdvcmtfY29tcGxldGlvbikoJnBlZXItPnRyYW5zbWl0X2hhbmRzaGFrZV93b3JrKSAtLT4gJndnLT5zdGF0aWNfaWRlbnRpdHkubG9jaworWyAgICAwLjk2NjMzN10KK1sgICAgMC45Njc0MTddICBQb3NzaWJsZSB1bnNhZmUgbG9ja2luZyBzY2VuYXJpbzoKK1sgICAgMC45Njc0MTddCitbICAgIDAuOTY3ODM2XSAgICAgICAgQ1BVMCAgICAgICAgICAgICAgICAgICAgQ1BVMQorWyAgICAwLjk2ODE1NV0gICAgICAgIC0tLS0gICAgICAgICAgICAgICAgICAgIC0tLS0KK1sgICAgMC45Njg0OTddICAgbG9jaygmd2ctPnN0YXRpY19pZGVudGl0eS5sb2NrKTsKK1sgICAgMC45Njg3NzldICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrKCh3b3JrX2NvbXBsZXRpb24pKCZwZWVyLT50cmFuc21pdF9oYW5kc2hha2Vfd29yaykpOworWyAgICAwLjk2OTM0NV0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2soJndnLT5zdGF0aWNfaWRlbnRpdHkubG9jayk7CitbICAgIDAuOTY5ODA5XSAgIGxvY2soKHdxX2NvbXBsZXRpb24pd2cta2V4LXdnMCk7CitbICAgIDAuOTcwMTQ2XQorWyAgICAwLjk3MDE0Nl0gICoqKiBERUFETE9DSyAqKioKK1sgICAgMC45NzAxNDZdCitbICAgIDAuOTcwNTMxXSA1IGxvY2tzIGhlbGQgYnkgd2cvODk6CitbICAgIDAuOTcwOTA4XSAgIzA6IGZmZmZmZmZmODI3NDMzYzggKGNiX2xvY2speysrKyt9LCBhdDogZ2VubF9yY3YrMHgxMC8weDMwCitbICAgIDAuOTcxNDAwXSAgIzE6IGZmZmZmZmZmODI3NDM0ODAgKGdlbmxfbXV0ZXgpeysuKy59LCBhdDogZ2VubF9yY3ZfbXNnKzB4NjQyLzB4ZTkwCitbICAgIDAuOTcxOTI0XSAgIzI6IGZmZmZmZmZmODI3MTYwYzAgKHJ0bmxfbXV0ZXgpeysuKy59LCBhdDogd2dfc2V0X2RldmljZSsweDlmLzB4Y2MwCitbICAgIDAuOTcyNDg4XSAgIzM6IGZmZmY4ODgwMzI4MTlkZTAgKCZ3Zy0+ZGV2aWNlX3VwZGF0ZV9sb2NrKXsrLisufSwgYXQ6IHdnX3NldF9kZXZpY2UrMHhiMC8weGNjMAorWyAgICAwLjk3MzA5NV0gICM0OiBmZmZmODg4MDMyODE5YmMwICgmd2ctPnN0YXRpY19pZGVudGl0eS5sb2NrKXsrKysrfSwgYXQ6IHdnX3NldF9kZXZpY2UrMHg5NWQvMHhjYzAKK1sgICAgMC45NzM2NTNdCitbICAgIDAuOTczNjUzXSBzdGFjayBiYWNrdHJhY2U6CitbICAgIDAuOTczOTMyXSBDUFU6IDEgUElEOiA4OSBDb21tOiB3ZyBOb3QgdGFpbnRlZCA1LjUuMC1kZWJ1ZysgIzE4CitbICAgIDAuOTc0NDc2XSBDYWxsIFRyYWNlOgorWyAgICAwLjk3NDYzOF0gIGR1bXBfc3RhY2srMHg5Ny8weGUwCitbICAgIDAuOTc0ODY5XSAgY2hlY2tfbm9uY2lyY3VsYXIrMHgzMTIvMHgzZTAKK1sgICAgMC45NzUxMzJdICA/IHByaW50X2NpcmN1bGFyX2J1ZysweDFmMC8weDFmMAorWyAgICAwLjk3NTQxMF0gID8gX19rZXJuZWxfdGV4dF9hZGRyZXNzKzB4OS8weDMwCitbICAgIDAuOTc1NzI3XSAgPyB1bndpbmRfZ2V0X3JldHVybl9hZGRyZXNzKzB4NTEvMHg5MAorWyAgICAwLjk3NjAyNF0gIGNoZWNrX3ByZXZfYWRkKzB4MTY3LzB4MWUyMAorWyAgICAwLjk3NjM2N10gID8gZ3JhcGhfbG9jaysweDcwLzB4MTYwCitbICAgIDAuOTc2NjgyXSAgX19sb2NrX2FjcXVpcmUrMHgyMDEyLzB4MzE3MAorWyAgICAwLjk3Njk5OF0gID8gcmVnaXN0ZXJfbG9ja19jbGFzcysweDExNDAvMHgxMTQwCitbICAgIDAuOTc3MzIzXSAgbG9ja19hY3F1aXJlKzB4MTI3LzB4MzUwCitbICAgIDAuOTc3NjI3XSAgPyBmbHVzaF93b3JrcXVldWUrMHhlMy8weDEyZjAKK1sgICAgMC45Nzc4OTBdICBmbHVzaF93b3JrcXVldWUrMHgxMDYvMHgxMmYwCitbICAgIDAuOTc4MTQ3XSAgPyBmbHVzaF93b3JrcXVldWUrMHhlMy8weDEyZjAKK1sgICAgMC45Nzg0MTBdICA/IGZpbmRfaGVsZF9sb2NrKzB4MmMvMHgxMTAKK1sgICAgMC45Nzg2NjJdICA/IGxvY2tfZG93bmdyYWRlKzB4NmUwLzB4NmUwCitbICAgIDAuOTc4OTE5XSAgPyBxdWV1ZV9yY3Vfd29yaysweDYwLzB4NjAKK1sgICAgMC45NzkxNjZdICA/IG5ldGlmX25hcGlfZGVsKzB4MTUxLzB4M2IwCitbICAgIDAuOTc5NTAxXSAgPyBwZWVyX3JlbW92ZV9hZnRlcl9kZWFkKzB4MTYwLzB4MjIwCitbICAgIDAuOTc5ODcxXSAgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZCsweDE2MC8weDIyMAorWyAgICAwLjk4MDIzMl0gIHdnX3NldF9kZXZpY2UrMHhhMjQvMHhjYzAKK1sgICAgMC45ODA1MTZdICA/IGRlcmVmX3N0YWNrX3JlZysweDhlLzB4YzAKK1sgICAgMC45ODA4MDFdICA/IHNldF9wZWVyKzB4ZTEwLzB4ZTEwCitbICAgIDAuOTgxMDQwXSAgPyBfX3d3X211dGV4X2NoZWNrX3dhaXRlcnMrMHgxNTAvMHgxNTAKK1sgICAgMC45ODE0MzBdICA/IF9fbmxhX3ZhbGlkYXRlX3BhcnNlKzB4MTYzLzB4MjcwCitbICAgIDAuOTgxNzE5XSAgPyBnZW5sX2ZhbWlseV9yY3ZfbXNnX2F0dHJzX3BhcnNlKzB4MTNmLzB4MzEwCitbICAgIDAuOTgyMDc4XSAgZ2VubF9yY3ZfbXNnKzB4NTJmLzB4ZTkwCitbICAgIDAuOTgyMzQ4XSAgPyBnZW5sX2ZhbWlseV9yY3ZfbXNnX2F0dHJzX3BhcnNlKzB4MzEwLzB4MzEwCitbICAgIDAuOTgyNjkwXSAgPyByZWdpc3Rlcl9sb2NrX2NsYXNzKzB4MTE0MC8weDExNDAKK1sgICAgMC45ODMwNDldICBuZXRsaW5rX3Jjdl9za2IrMHgxMTEvMHgzMjAKK1sgICAgMC45ODMyOThdICA/IGdlbmxfZmFtaWx5X3Jjdl9tc2dfYXR0cnNfcGFyc2UrMHgzMTAvMHgzMTAKK1sgICAgMC45ODM2NDVdICA/IG5ldGxpbmtfYWNrKzB4ODgwLzB4ODgwCitbICAgIDAuOTgzODg4XSAgZ2VubF9yY3YrMHgxZi8weDMwCitbICAgIDAuOTg0MTY4XSAgbmV0bGlua191bmljYXN0KzB4M2Y2LzB4NjEwCitbICAgIDAuOTg0NDQzXSAgPyBuZXRsaW5rX2RldGFjaHNrYisweDYwLzB4NjAKK1sgICAgMC45ODQ3MjldICA/IGZpbmRfaGVsZF9sb2NrKzB4MmMvMHgxMTAKK1sgICAgMC45ODQ5NzZdICBuZXRsaW5rX3NlbmRtc2crMHg3MDAvMHhiODAKK1sgICAgMC45ODUyMjBdICA/IG5ldGxpbmtfYnJvYWRjYXN0X2ZpbHRlcmVkKzB4YTYwLzB4YTYwCitbICAgIDAuOTg1NTMzXSAgX19zeXNfc2VuZHRvKzB4MWRkLzB4MmMwCitbICAgIDAuOTg1NzYzXSAgPyBfX3g2NF9zeXNfZ2V0cGVlcm5hbWUrMHhiMC8weGIwCitbICAgIDAuOTg2MDM5XSAgPyBzb2NrZmRfbG9va3VwX2xpZ2h0KzB4MTcvMHgxNjAKK1sgICAgMC45ODYzOTddICA/IF9fc3lzX3JlY3Ztc2crMHg4Yy8weGYwCitbICAgIDAuOTg2NzExXSAgPyBfX3N5c19yZWN2bXNnX3NvY2srMHhkMC8weGQwCitbICAgIDAuOTg3MDE4XSAgX194NjRfc3lzX3NlbmR0bysweGQ4LzB4MWIwCitbICAgIDAuOTg3MjgzXSAgPyBsb2NrZGVwX2hhcmRpcnFzX29uKzB4MzliLzB4NWEwCitbICAgIDAuOTg3NjY2XSAgZG9fc3lzY2FsbF82NCsweDkwLzB4ZDlhCitbICAgIDAuOTg3OTAzXSAgZW50cnlfU1lTQ0FMTF82NF9hZnRlcl9od2ZyYW1lKzB4NDkvMHhiZQorWyAgICAwLjk4ODIyM10gUklQOiAwMDMzOjB4N2ZlNzdjMTIwMDNlCitbICAgIDAuOTg4NTA4XSBDb2RlOiBjMyA4YiAwNyA4NSBjMCA3NSAyNCA0OSA4OSBmYiA0OCA4OSBmMCA0OCA4OSBkNyA0OCA4OSBjZSA0YyA4OSBjMiA0ZCA4OSBjYSA0YyA4YiA0NCAyNCAwOCA0YyA4YiA0YyAyNCAxMCA0YyA0CitbICAgIDAuOTg5NjY2XSBSU1A6IDAwMmI6MDAwMDdmZmZhZGEyZWQ1OCBFRkxBR1M6IDAwMDAwMjQ2IE9SSUdfUkFYOiAwMDAwMDAwMDAwMDAwMDJjCitbICAgIDAuOTkwMTM3XSBSQVg6IGZmZmZmZmZmZmZmZmZmZGEgUkJYOiAwMDAwN2ZlNzdjMTU5ZDQ4IFJDWDogMDAwMDdmZTc3YzEyMDAzZQorWyAgICAwLjk5MDU4M10gUkRYOiAwMDAwMDAwMDAwMDAwMDQwIFJTSTogMDAwMDU1ZmQxZDM4ZTAyMCBSREk6IDAwMDAwMDAwMDAwMDAwMDQKK1sgICAgMC45OTEwOTFdIFJCUDogMDAwMDU1ZmQxZDM4ZTAyMCBSMDg6IDAwMDA1NWZkMWNiNjMzNTggUjA5OiAwMDAwMDAwMDAwMDAwMDBjCitbICAgIDAuOTkxNTY4XSBSMTA6IDAwMDAwMDAwMDAwMDAwMDAgUjExOiAwMDAwMDAwMDAwMDAwMjQ2IFIxMjogMDAwMDAwMDAwMDAwMDAyYworWyAgICAwLjk5MjAxNF0gUjEzOiAwMDAwMDAwMDAwMDAwMDA0IFIxNDogMDAwMDU1ZmQxZDM4ZTAyMCBSMTU6IDAwMDAwMDAwMDAwMDAwMDEKKworU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CitSZXBvcnRlZC1ieTogc3l6Ym90IDxzeXprYWxsZXJAZ29vZ2xlZ3JvdXBzLmNvbT4KK1NpZ25lZC1vZmYtYnk6IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYyB8ICA2ICsrLS0tLQorIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9ub2lzZS5jICAgfCAxMCArKysrKysrLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmMKKysrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmMKK0BAIC01NzUsMTAgKzU3NSw4IEBAIHN0YXRpYyBpbnQgd2dfc2V0X2RldmljZShzdHJ1Y3Qgc2tfYnVmZgorIAkJCQkJCQkgcHJpdmF0ZV9rZXkpOworIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBlZXIsIHRlbXAsICZ3Zy0+cGVlcl9saXN0LAorIAkJCQkJIHBlZXJfbGlzdCkgeworLQkJCWlmICh3Z19ub2lzZV9wcmVjb21wdXRlX3N0YXRpY19zdGF0aWMocGVlcikpCistCQkJCXdnX25vaXNlX2V4cGlyZV9jdXJyZW50X3BlZXJfa2V5cGFpcnMocGVlcik7CistCQkJZWxzZQorLQkJCQl3Z19wZWVyX3JlbW92ZShwZWVyKTsKKysJCQlCVUdfT04oIXdnX25vaXNlX3ByZWNvbXB1dGVfc3RhdGljX3N0YXRpYyhwZWVyKSk7CisrCQkJd2dfbm9pc2VfZXhwaXJlX2N1cnJlbnRfcGVlcl9rZXlwYWlycyhwZWVyKTsKKyAJCX0KKyAJCXdnX2Nvb2tpZV9jaGVja2VyX3ByZWNvbXB1dGVfZGV2aWNlX2tleXMoJndnLT5jb29raWVfY2hlY2tlcik7CisgCQl1cF93cml0ZSgmd2ctPnN0YXRpY19pZGVudGl0eS5sb2NrKTsKKy0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9ub2lzZS5jCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvbm9pc2UuYworQEAgLTQ2LDE3ICs0NiwyMSBAQCB2b2lkIF9faW5pdCB3Z19ub2lzZV9pbml0KHZvaWQpCisgLyogTXVzdCBob2xkIHBlZXItPmhhbmRzaGFrZS5zdGF0aWNfaWRlbnRpdHktPmxvY2sgKi8KKyBib29sIHdnX25vaXNlX3ByZWNvbXB1dGVfc3RhdGljX3N0YXRpYyhzdHJ1Y3Qgd2dfcGVlciAqcGVlcikKKyB7CistCWJvb2wgcmV0ID0gdHJ1ZTsKKysJYm9vbCByZXQ7CisgCisgCWRvd25fd3JpdGUoJnBlZXItPmhhbmRzaGFrZS5sb2NrKTsKKy0JaWYgKHBlZXItPmhhbmRzaGFrZS5zdGF0aWNfaWRlbnRpdHktPmhhc19pZGVudGl0eSkKKysJaWYgKHBlZXItPmhhbmRzaGFrZS5zdGF0aWNfaWRlbnRpdHktPmhhc19pZGVudGl0eSkgeworIAkJcmV0ID0gY3VydmUyNTUxOSgKKyAJCQlwZWVyLT5oYW5kc2hha2UucHJlY29tcHV0ZWRfc3RhdGljX3N0YXRpYywKKyAJCQlwZWVyLT5oYW5kc2hha2Uuc3RhdGljX2lkZW50aXR5LT5zdGF0aWNfcHJpdmF0ZSwKKyAJCQlwZWVyLT5oYW5kc2hha2UucmVtb3RlX3N0YXRpYyk7CistCWVsc2UKKysJfSBlbHNlIHsKKysJCXU4IGVtcHR5W05PSVNFX1BVQkxJQ19LRVlfTEVOXSA9IHsgMCB9OworKworKwkJcmV0ID0gY3VydmUyNTUxOShlbXB0eSwgZW1wdHksIHBlZXItPmhhbmRzaGFrZS5yZW1vdGVfc3RhdGljKTsKKyAJCW1lbXNldChwZWVyLT5oYW5kc2hha2UucHJlY29tcHV0ZWRfc3RhdGljX3N0YXRpYywgMCwKKyAJCSAgICAgICBOT0lTRV9QVUJMSUNfS0VZX0xFTik7CisrCX0KKyAJdXBfd3JpdGUoJnBlZXItPmhhbmRzaGFrZS5sb2NrKTsKKyAJcmV0dXJuIHJldDsKKyB9CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDgzLXdpcmVndWFyZC1zZWxmdGVzdHMtZW5zdXJlLW5vbi1hZGRpdGlvbi1vZi1wZWVycy13aXQucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDgzLXdpcmVndWFyZC1zZWxmdGVzdHMtZW5zdXJlLW5vbi1hZGRpdGlvbi1vZi1wZWVycy13aXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY4NzdhNgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwODMtd2lyZWd1YXJkLXNlbGZ0ZXN0cy1lbnN1cmUtbm9uLWFkZGl0aW9uLW9mLXBlZXJzLXdpdC5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogVHVlLCA0IEZlYiAyMDIwIDIyOjE3OjI3ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIHdpcmVndWFyZDogc2VsZnRlc3RzOiBlbnN1cmUgbm9uLWFkZGl0aW9uIG9mIHBlZXJzIHdpdGgKKyBmYWlsZWQgcHJlY29tcHV0YXRpb24KKworY29tbWl0IGY5Mzk4YWNiYTZhNGFlOWNiOThiZmU0ZDU2NDE0ZDM3NmVmZjhkNTcgdXBzdHJlYW0uCisKK0Vuc3VyZSB0aGF0IHBlZXJzIHdpdGggbG93IG9yZGVyIHBvaW50cyBhcmUgaWdub3JlZCwgYm90aCBpbiB0aGUgY2FzZQord2hlcmUgd2UgYWxyZWFkeSBoYXZlIGEgZGV2aWNlIHByaXZhdGUga2V5IGFuZCBpbiB0aGUgY2FzZSB3aGVyZSB3ZSBkbworbm90LiBUaGlzIGFkZHMgcG9pbnRzIHRoYXQgbmF0dXJhbGx5IGdpdmUgYSB6ZXJvIG91dHB1dC4KKworU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CitTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9uZXRucy5zaCB8IDYgKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKQorCistLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvbmV0bnMuc2gKKysrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9uZXRucy5zaAorQEAgLTUxNiw2ICs1MTYsMTIgQEAgbjAgd2cgc2V0IHdnMCBwZWVyICIkcHViMiIgYWxsb3dlZC1pcHMgMAorIG4wIHdnIHNldCB3ZzAgcGVlciAiJHB1YjIiIGFsbG93ZWQtaXBzIDAuMC4wLjAvMAorIG4wIHdnIHNldCB3ZzAgcGVlciAiJHB1YjIiIGFsbG93ZWQtaXBzIDo6LzAsMTcwMDo6LzExMSw1MDAwOjovNCxlMDAwOjovMzcsOTAwMDo6Lzc1CisgbjAgd2cgc2V0IHdnMCBwZWVyICIkcHViMiIgYWxsb3dlZC1pcHMgOjovMAorK24wIHdnIHNldCB3ZzAgcGVlciAiJHB1YjIiIHJlbW92ZQorK2xvd19vcmRlcl9wb2ludHM9KCBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBPSBBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBPSA0T3Q2ZkR0QnVLNFdWdVA2OFovRWF0b0pqZXVjTXJIOWhtSUZGbDlKdUFBPSBYNXlWdktOUWpDU3gwTEZWbklQdld3UkVYTVJZSEk2RzJDSk8zZENmRVZjPSA3UC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLzM4PSA3Zi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLzM4PSA3di8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLzM4PSApCisrbjAgd2cgc2V0IHdnMCBwcml2YXRlLWtleSAvZGV2L251bGwgJHtsb3dfb3JkZXJfcG9pbnRzW0BdLyMvcGVlciB9CisrW1sgLXogJChuMCB3ZyBzaG93IHdnMCBwZWVycykgXV0KKytuMCB3ZyBzZXQgd2cwIHByaXZhdGUta2V5IDwoZWNobyAiJGtleTEiKSAke2xvd19vcmRlcl9wb2ludHNbQF0vIy9wZWVyIH0KKytbWyAteiAkKG4wIHdnIHNob3cgd2cwIHBlZXJzKSBdXQorIGlwMCBsaW5rIGRlbCB3ZzAKKyAKKyBkZWNsYXJlIC1BIG9iamVjdHMKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwODQtd2lyZWd1YXJkLXNlbGZ0ZXN0cy10aWUtc29ja2V0LXdhaXRpbmctdG8tdGFyZ2V0LXBpZC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwODQtd2lyZWd1YXJkLXNlbGZ0ZXN0cy10aWUtc29ja2V0LXdhaXRpbmctdG8tdGFyZ2V0LXBpZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTMwZjBmCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA4NC13aXJlZ3VhcmQtc2VsZnRlc3RzLXRpZS1zb2NrZXQtd2FpdGluZy10by10YXJnZXQtcGlkLnBhdGNoCkBAIC0wLDAgKzEsNzcgQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJKYXNvbiBBLiBEb25lbmZlbGQiIDxKYXNvbkB6eDJjNC5jb20+CitEYXRlOiBUdWUsIDQgRmViIDIwMjAgMjI6MTc6MjkgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gd2lyZWd1YXJkOiBzZWxmdGVzdHM6IHRpZSBzb2NrZXQgd2FpdGluZyB0byB0YXJnZXQgcGlkCisKK2NvbW1pdCA4OGY0MDRhOWIxZDc1Mzg4MjI1YjFjNjdiNmRkMzI3Y2IyMTgyNzc3IHVwc3RyZWFtLgorCitXaXRob3V0IHRoaXMsIHdlIHdpbmQgdXAgcHJvY2VlZGluZyB0b28gZWFybHkgc29tZXRpbWVzIHdoZW4gdGhlCitwcmV2aW91cyBwcm9jZXNzIGhhcyBqdXN0IHVzZWQgdGhlIHNhbWUgbGlzdGVuaW5nIHBvcnQuIFNvLCB3ZSB0aWUgdGhlCitsaXN0ZW5pbmcgc29ja2V0IHF1ZXJ5IHRvIHRoZSBzcGVjaWZpYyBwaWQgd2UncmUgaW50ZXJlc3RlZCBpbi4KKworU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CitTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9uZXRucy5zaCB8IDE3ICsrKysrKysrLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKKworLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL25ldG5zLnNoCisrKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvbmV0bnMuc2gKK0BAIC0zOCw5ICszOCw4IEBAIGlwMCgpIHsgcHJldHR5IDAgImlwICQqIjsgaXAgLW4gJG5ldG5zMAorIGlwMSgpIHsgcHJldHR5IDEgImlwICQqIjsgaXAgLW4gJG5ldG5zMSAiJEAiOyB9CisgaXAyKCkgeyBwcmV0dHkgMiAiaXAgJCoiOyBpcCAtbiAkbmV0bnMyICIkQCI7IH0KKyBzbGVlcCgpIHsgcmVhZCAtdCAiJDEiIC1OIDEgfHwgdHJ1ZTsgfQorLXdhaXRpcGVyZigpIHsgcHJldHR5ICIkezEvLyotfSIgIndhaXQgZm9yIGlwZXJmOjUyMDEiOyB3aGlsZSBbWyAkKHNzIC1OICIkMSIgLXRscCAnc3BvcnQgPSA1MjAxJykgIT0gKmlwZXJmMyogXV07IGRvIHNsZWVwIDAuMTsgZG9uZTsgfQorLXdhaXRuY2F0dWRwKCkgeyBwcmV0dHkgIiR7MS8vKi19IiAid2FpdCBmb3IgdWRwOjExMTEiOyB3aGlsZSBbWyAkKHNzIC1OICIkMSIgLXVscCAnc3BvcnQgPSAxMTExJykgIT0gKm5jYXQqIF1dOyBkbyBzbGVlcCAwLjE7IGRvbmU7IH0KKy13YWl0bmNhdHRjcCgpIHsgcHJldHR5ICIkezEvLyotfSIgIndhaXQgZm9yIHRjcDoxMTExIjsgd2hpbGUgW1sgJChzcyAtTiAiJDEiIC10bHAgJ3Nwb3J0ID0gMTExMScpICE9ICpuY2F0KiBdXTsgZG8gc2xlZXAgMC4xOyBkb25lOyB9Cisrd2FpdGlwZXJmKCkgeyBwcmV0dHkgIiR7MS8vKi19IiAid2FpdCBmb3IgaXBlcmY6NTIwMSBwaWQgJDIiOyB3aGlsZSBbWyAkKHNzIC1OICIkMSIgLXRscEggJ3Nwb3J0ID0gNTIwMScpICE9ICpcImlwZXJmM1wiLHBpZD0kMixmZD0qIF1dOyBkbyBzbGVlcCAwLjE7IGRvbmU7IH0KKyt3YWl0bmNhdHVkcCgpIHsgcHJldHR5ICIkezEvLyotfSIgIndhaXQgZm9yIHVkcDoxMTExIHBpZCAkMiI7IHdoaWxlIFtbICQoc3MgLU4gIiQxIiAtdWxwSCAnc3BvcnQgPSAxMTExJykgIT0gKlwibmNhdFwiLHBpZD0kMixmZD0qIF1dOyBkbyBzbGVlcCAwLjE7IGRvbmU7IH0KKyB3YWl0aWZhY2UoKSB7IHByZXR0eSAiJHsxLy8qLX0iICJ3YWl0IGZvciAkMiB0byBjb21lIHVwIjsgaXAgbmV0bnMgZXhlYyAiJDEiIGJhc2ggLWMgIndoaWxlIFtbIFwkKDwgXCIvc3lzL2NsYXNzL25ldC8kMi9vcGVyc3RhdGVcIikgIT0gdXAgXV07IGRvIHJlYWQgLXQgLjEgLU4gMCB8fCB0cnVlOyBkb25lOyI7IH0KKyAKKyBjbGVhbnVwKCkgeworQEAgLTExOSwyMiArMTE4LDIyIEBAIHRlc3RzKCkgeworIAorIAkjIFRDUCBvdmVyIElQdjQKKyAJbjIgaXBlcmYzIC1zIC0xIC1CIDE5Mi4xNjguMjQxLjIgJgorLQl3YWl0aXBlcmYgJG5ldG5zMgorKwl3YWl0aXBlcmYgJG5ldG5zMiAkIQorIAluMSBpcGVyZjMgLVogLXQgMyAtYyAxOTIuMTY4LjI0MS4yCisgCisgCSMgVENQIG92ZXIgSVB2NgorIAluMSBpcGVyZjMgLXMgLTEgLUIgZmQwMDo6MSAmCistCXdhaXRpcGVyZiAkbmV0bnMxCisrCXdhaXRpcGVyZiAkbmV0bnMxICQhCisgCW4yIGlwZXJmMyAtWiAtdCAzIC1jIGZkMDA6OjEKKyAKKyAJIyBVRFAgb3ZlciBJUHY0CisgCW4xIGlwZXJmMyAtcyAtMSAtQiAxOTIuMTY4LjI0MS4xICYKKy0Jd2FpdGlwZXJmICRuZXRuczEKKysJd2FpdGlwZXJmICRuZXRuczEgJCEKKyAJbjIgaXBlcmYzIC1aIC10IDMgLWIgMCAtdSAtYyAxOTIuMTY4LjI0MS4xCisgCisgCSMgVURQIG92ZXIgSVB2NgorIAluMiBpcGVyZjMgLXMgLTEgLUIgZmQwMDo6MiAmCistCXdhaXRpcGVyZiAkbmV0bnMyCisrCXdhaXRpcGVyZiAkbmV0bnMyICQhCisgCW4xIGlwZXJmMyAtWiAtdCAzIC1iIDAgLXUgLWMgZmQwMDo6MgorIH0KKyAKK0BAIC0yMDcsNyArMjA2LDcgQEAgbjEgcGluZyAtVyAxIC1jIDEgMTkyLjE2OC4yNDEuMgorIG4xIHdnIHNldCB3ZzAgcGVlciAiJHB1YjIiIGFsbG93ZWQtaXBzIDE5Mi4xNjguMjQxLjAvMjQKKyBleGVjIDQ8IDwobjEgbmNhdCAtbCAtdSAtcCAxMTExKQorIG5jYXRfcGlkPSQhCistd2FpdG5jYXR1ZHAgJG5ldG5zMQorK3dhaXRuY2F0dWRwICRuZXRuczEgJG5jYXRfcGlkCisgbjIgbmNhdCAtdSAxOTIuMTY4LjI0MS4xIDExMTEgPDw8IlgiCisgcmVhZCAtciAtTiAxIC10IDEgb3V0IDwmNCAmJiBbWyAkb3V0ID09ICJYIiBdXQorIGtpbGwgJG5jYXRfcGlkCitAQCAtMjE2LDcgKzIxNSw3IEBAIG4xIHdnIHNldCB3ZzAgcGVlciAiJG1vcmVfc3BlY2lmaWNfa2V5IgorIG4yIHdnIHNldCB3ZzAgbGlzdGVuLXBvcnQgOTk5NworIGV4ZWMgNDwgPChuMSBuY2F0IC1sIC11IC1wIDExMTEpCisgbmNhdF9waWQ9JCEKKy13YWl0bmNhdHVkcCAkbmV0bnMxCisrd2FpdG5jYXR1ZHAgJG5ldG5zMSAkbmNhdF9waWQKKyBuMiBuY2F0IC11IDE5Mi4xNjguMjQxLjEgMTExMSA8PDwiWCIKKyAhIHJlYWQgLXIgLU4gMSAtdCAxIG91dCA8JjQgfHwgZmFsc2UKKyBraWxsICRuY2F0X3BpZApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA4NS13aXJlZ3VhcmQtZGV2aWNlLXVzZS1pY21wX25kb19zZW5kLWhlbHBlci5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwODUtd2lyZWd1YXJkLWRldmljZS11c2UtaWNtcF9uZG9fc2VuZC1oZWxwZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIxZGIxOAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwODUtd2lyZWd1YXJkLWRldmljZS11c2UtaWNtcF9uZG9fc2VuZC1oZWxwZXIucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIkphc29uIEEuIERvbmVuZmVsZCIgPEphc29uQHp4MmM0LmNvbT4KK0RhdGU6IFR1ZSwgMTEgRmViIDIwMjAgMjA6NDc6MDggKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gd2lyZWd1YXJkOiBkZXZpY2U6IHVzZSBpY21wX25kb19zZW5kIGhlbHBlcgorCitjb21taXQgYTEyZDdmM2NiZGM3MmM3NjI1ODgxYzhkYzI2NjBmYzJjOTc5ZmRmMiB1cHN0cmVhbS4KKworQmVjYXVzZSB3aXJlZ3VhcmQgaXMgY2FsbGluZyBpY21wIGZyb20gbmV0d29yayBkZXZpY2UgY29udGV4dCwgaXQgc2hvdWxkCit1c2UgdGhlIG5kbyBoZWxwZXIgc28gdGhhdCB0aGUgcmF0ZSBsaW1pdGluZyBhcHBsaWVzIGNvcnJlY3RseS4gIFRoaXMKK2NvbW1pdCBhZGRzIGEgc21hbGwgdGVzdCB0byB0aGUgd2lyZWd1YXJkIHRlc3Qgc3VpdGUgdG8gZW5zdXJlIHRoYXQgdGhlCituZXcgZnVuY3Rpb25zIGNvbnRpbnVlIGRvaW5nIHRoZSByaWdodCB0aGluZyBpbiB0aGUgY29udGV4dCBvZgord2lyZWd1YXJkLiBJdCBkb2VzIHRoaXMgYnkgc2V0dGluZyB1cCBhIGNvbmRpdGlvbiB0aGF0IHdpbGwgZGVmaW5hdGVseQorZXZva2UgYW4gaWNtcCBlcnJvciBtZXNzYWdlIGZyb20gdGhlIGRyaXZlciwgYnV0IGFsb25nIGEgbmF0J2QgcGF0aC4KKworU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CitTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYyAgICAgICAgICAgICB8ICA0ICsrLS0KKyB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvbmV0bnMuc2ggfCAxMSArKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmMKK0BAIC0yMDMsOSArMjAzLDkgQEAgZXJyX3BlZXI6CisgZXJyOgorIAkrK2Rldi0+c3RhdHMudHhfZXJyb3JzOworIAlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpCistCQlpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9IT1NUX1VOUkVBQ0gsIDApOworKwkJaWNtcF9uZG9fc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX0hPU1RfVU5SRUFDSCwgMCk7CisgCWVsc2UgaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpCistCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9ERVNUX1VOUkVBQ0gsIElDTVBWNl9BRERSX1VOUkVBQ0gsIDApOworKwkJaWNtcHY2X25kb19zZW5kKHNrYiwgSUNNUFY2X0RFU1RfVU5SRUFDSCwgSUNNUFY2X0FERFJfVU5SRUFDSCwgMCk7CisgCWtmcmVlX3NrYihza2IpOworIAlyZXR1cm4gcmV0OworIH0KKy0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9uZXRucy5zaAorKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL25ldG5zLnNoCitAQCAtMjQsNiArMjQsNyBAQAorIHNldCAtZQorIAorIGV4ZWMgMz4mMQorK2V4cG9ydCBMQU5HPUMKKyBleHBvcnQgV0dfSElERV9LRVlTPW5ldmVyCisgbmV0bnMwPSJ3Zy10ZXN0LSQkLTAiCisgbmV0bnMxPSJ3Zy10ZXN0LSQkLTEiCitAQCAtMjk3LDcgKzI5OCwxNyBAQCBpcDEgLTQgcnVsZSBhZGQgdGFibGUgbWFpbiBzdXBwcmVzc19wcmVmCisgbjEgcGluZyAtVyAxIC1jIDEwMCAtZiAxOTIuMTY4Ljk5LjcKKyBuMSBwaW5nIC1XIDEgLWMgMTAwIC1mIGFiYWI6OjExMTEKKyAKKysjIEhhdmUgbnMyIE5BVCBpbnRvIHdnMCBwYWNrZXRzIGZyb20gbnMwLCBidXQgcmV0dXJuIGFuIGljbXAgZXJyb3IgYWxvbmcgdGhlIHJpZ2h0IHJvdXRlLgorK24yIGlwdGFibGVzIC10IG5hdCAtQSBQT1NUUk9VVElORyAtcyAxMC4wLjAuMC8yNCAtZCAxOTIuMTY4LjI0MS4wLzI0IC1qIFNOQVQgLS10byAxOTIuMTY4LjI0MS4yCisrbjAgaXB0YWJsZXMgLXQgZmlsdGVyIC1BIElOUFVUIFwhIC1zIDEwLjAuMC4wLzI0IC1pIHZldGhycyAtaiBEUk9QICMgTWFudWFsIHJwZmlsdGVyIGp1c3QgdG8gYmUgZXhwbGljaXQuCisrbjIgYmFzaCAtYyAncHJpbnRmIDEgPiAvcHJvYy9zeXMvbmV0L2lwdjQvaXBfZm9yd2FyZCcKKytpcDAgLTQgcm91dGUgYWRkIDE5Mi4xNjguMjQxLjEgdmlhIDEwLjAuMC4xMDAKKytuMiB3ZyBzZXQgd2cwIHBlZXIgIiRwdWIxIiByZW1vdmUKKytbWyAkKCEgbjAgcGluZyAtVyAxIC1jIDEgMTkyLjE2OC4yNDEuMSB8fCBmYWxzZSkgPT0gKiJGcm9tIDEwLjAuMC4xMDAgaWNtcF9zZXE9MSBEZXN0aW5hdGlvbiBIb3N0IFVucmVhY2hhYmxlIiogXV0KKysKKyBuMCBpcHRhYmxlcyAtdCBuYXQgLUYKKytuMCBpcHRhYmxlcyAtdCBmaWx0ZXIgLUYKKytuMiBpcHRhYmxlcyAtdCBuYXQgLUYKKyBpcDAgbGluayBkZWwgdmV0aHJjCisgaXAwIGxpbmsgZGVsIHZldGhycworIGlwMSBsaW5rIGRlbCB3ZzAKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwODYtd2lyZWd1YXJkLXNlbGZ0ZXN0cy1yZWR1Y2UtY29tcGxleGl0eS1hbmQtZml4LW1ha2Utci5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwODYtd2lyZWd1YXJkLXNlbGZ0ZXN0cy1yZWR1Y2UtY29tcGxleGl0eS1hbmQtZml4LW1ha2Utci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzI5MmE4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA4Ni13aXJlZ3VhcmQtc2VsZnRlc3RzLXJlZHVjZS1jb21wbGV4aXR5LWFuZC1maXgtbWFrZS1yLnBhdGNoCkBAIC0wLDAgKzEsMTA0IEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogRnJpLCAxNCBGZWIgMjAyMCAyMzo1NzoyMCArMDEwMAorU3ViamVjdDogW1BBVENIXSB3aXJlZ3VhcmQ6IHNlbGZ0ZXN0czogcmVkdWNlIGNvbXBsZXhpdHkgYW5kIGZpeCBtYWtlIHJhY2VzCisKK2NvbW1pdCAwNGRkZjEyMDhmMDNlMWRiYzM5YTQ2MTljNDBlYmE2NDAwNTFiOTUwIHVwc3RyZWFtLgorCitUaGlzIGdpdmVzIHVzIGZld2VyIGRlcGVuZGVuY2llcyBhbmQgc2hvcnRlbnMgYnVpbGQgdGltZSwgZml4ZXMgdXAgc29tZQoraGFzaCBjaGVja2luZyByYWNlIGNvbmRpdGlvbnMsIGFuZCBhbHNvIGZpeGVzIG1pc3NpbmcgZGlyZWN0b3J5IGNyZWF0aW9uCit0aGF0IGNhdXNlZCBpc3N1ZXMgb24gbWFzc2l2ZWx5IHBhcmFsbGVsIGJ1aWxkcy4KKworU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CitTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIC4uLi90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvcWVtdS9NYWtlZmlsZSB8IDM4ICsrKysrKystLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgMjQgZGVsZXRpb25zKC0pCisKKy0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9xZW11L01ha2VmaWxlCisrKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvcWVtdS9NYWtlZmlsZQorQEAgLTM4LDE5ICszOCwxNyBAQCBlbmRlZgorIGRlZmluZSBmaWxlX2Rvd25sb2FkID0KKyAkKERJU1RGSUxFU19QQVRIKS8kKDEpOgorIAlta2RpciAtcCAkKERJU1RGSUxFU19QQVRIKQorLQlmbG9jayAteCAkJEAubG9jayAtYyAnWyAtZiAkJEAgXSAmJiBleGl0IDA7IHdnZXQgLU8gJCRALnRtcCAkKE1JUlJPUikkKDEpIHx8IHdnZXQgLU8gJCRALnRtcCAkKDIpJCgxKSB8fCBybSAtZiAkJEAudG1wJworLQlpZiBlY2hvICIkKDMpICAkJEAudG1wIiB8IHNoYTI1NnN1bSAtYyAtOyB0aGVuIG12ICQkQC50bXAgJCRAOyBlbHNlIHJtIC1mICQkQC50bXA7IGV4aXQgNzE7IGZpCisrCWZsb2NrIC14ICQkQC5sb2NrIC1jICdbIC1mICQkQCBdICYmIGV4aXQgMDsgd2dldCAtTyAkJEAudG1wICQoTUlSUk9SKSQoMSkgfHwgd2dldCAtTyAkJEAudG1wICQoMikkKDEpIHx8IHJtIC1mICQkQC50bXA7IFsgLWYgJCRALnRtcCBdIHx8IGV4aXQgMTsgaWYgZWNobyAiJCgzKSAgJCRALnRtcCIgfCBzaGEyNTZzdW0gLWMgLTsgdGhlbiBtdiAkJEAudG1wICQkQDsgZWxzZSBybSAtZiAkJEAudG1wOyBleGl0IDcxOyBmaScKKyBlbmRlZgorIAorICQoZXZhbCAkKGNhbGwgdGFyX2Rvd25sb2FkLE1VU0wsbXVzbCwxLjEuMjQsLnRhci5neixodHRwczovL3d3dy5tdXNsLWxpYmMub3JnL3JlbGVhc2VzLywxMzcwYzlhODEyYjJjZjJhN2Q5MjgwMjUxMGNjYTAwNThjYzM3ZTY2YTdiZWRkNzAwNTFmMGEzNDAxNTAyMmEzKSkKKy0kKGV2YWwgJChjYWxsIHRhcl9kb3dubG9hZCxMSUJNTkwsbGlibW5sLDEuMC40LC50YXIuYnoyLGh0dHBzOi8vd3d3Lm5ldGZpbHRlci5vcmcvcHJvamVjdHMvbGlibW5sL2ZpbGVzLywxNzFmODk2OTlmMjg2YTU4NTRiNzJiOTFkMDZlOGY4ZTM2ODMwNjRjNTkwMWZiMDlkOTU0YTlhYjZmNTUxZjgxKSkKKyAkKGV2YWwgJChjYWxsIHRhcl9kb3dubG9hZCxJUEVSRixpcGVyZiwzLjcsLnRhci5neixodHRwczovL2Rvd25sb2Fkcy5lcy5uZXQvcHViL2lwZXJmLyxkODQ2MDQwMjI0MzE3Y2FmMmY3NWM4NDNkMzA5YTk1MGE3ZGIyM2Y5YjQ0Yjk0Njg4Y2NiZTU1N2Q2ZDE3MTBjKSkKKyAkKGV2YWwgJChjYWxsIHRhcl9kb3dubG9hZCxCQVNILGJhc2gsNS4wLC50YXIuZ3osaHR0cHM6Ly9mdHAuZ251Lm9yZy9nbnUvYmFzaC8sYjRhODBmMmFjNjYxNzBiMjkxM2VmYmZiOWYyNTk0ZjFmNzZjN2IxYWZkMTFmNzk5ZTIyMDM1ZDYzMDc3ZmI0ZCkpCisgJChldmFsICQoY2FsbCB0YXJfZG93bmxvYWQsSVBST1VURTIsaXByb3V0ZTIsNS40LjAsLnRhci54eixodHRwczovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy9uZXQvaXByb3V0ZTIvLGZlOTdhYTYwYTBkNGM1YWM4MzBiZTE4OTM3ZTE4ZGMzNDAwY2E3MTNhMzNhODlhZDg5NmZmMWUzZDQ2MDg2YWUpKQorICQoZXZhbCAkKGNhbGwgdGFyX2Rvd25sb2FkLElQVEFCTEVTLGlwdGFibGVzLDEuOC40LC50YXIuYnoyLGh0dHBzOi8vd3d3Lm5ldGZpbHRlci5vcmcvcHJvamVjdHMvaXB0YWJsZXMvZmlsZXMvLDk5M2EzYTU0OTBhNTQ0YzJjYmYyZWYxNWNmN2U3ZWQyMWFmMTg0NWJhZjIyODMxOGQ1YzM2ZWY4ODI3ZTE1N2MpKQorICQoZXZhbCAkKGNhbGwgdGFyX2Rvd25sb2FkLE5NQVAsbm1hcCw3LjgwLC50YXIuYnoyLGh0dHBzOi8vbm1hcC5vcmcvZGlzdC8sZmNmYTVhMGU0MjA5OWUxMmU0YmY3YTY4ZWJlNmZkZTA1NTUzMzgzYTY4MmU4MTZhN2VjOTI1NmFiNDc3M2ZhYSkpCisgJChldmFsICQoY2FsbCB0YXJfZG93bmxvYWQsSVBVVElMUyxpcHV0aWxzLHMyMDE5MDcwOSwudGFyLmd6LGh0dHBzOi8vZ2l0aHViLmNvbS9pcHV0aWxzL2lwdXRpbHMvYXJjaGl2ZS9zMjAxOTA3MDkudGFyLmd6LyMsYTE1NzIwZGQ3NDFkNzUzOGRkMjY0NWY5ZjUxNmQxOTM2MzZhZTQzMDBmZjdkYmM4YmZjYTc1N2JmMTY2NDkwYSkpCistJChldmFsICQoY2FsbCB0YXJfZG93bmxvYWQsV0lSRUdVQVJEX1RPT0xTLHdpcmVndWFyZC10b29scywxLjAuMjAxOTEyMjYsLnRhci54eixodHRwczovL2dpdC56eDJjNC5jb20vd2lyZWd1YXJkLXRvb2xzL3NuYXBzaG90LyxhYThhZjBmZGM5ODcyZDM2OWQ4Yzg5MGE4NGRiYzJhMjQ2NmI1NTc5NWRjY2Q1YjQ3NzIxYjJkOTc2NDRiMDRmKSkKKyskKGV2YWwgJChjYWxsIHRhcl9kb3dubG9hZCxXSVJFR1VBUkRfVE9PTFMsd2lyZWd1YXJkLXRvb2xzLDEuMC4yMDIwMDIwNiwudGFyLnh6LGh0dHBzOi8vZ2l0Lnp4MmM0LmNvbS93aXJlZ3VhcmQtdG9vbHMvc25hcHNob3QvLGY1MjA3MjQ4YzZhM2MzZTNiZmM5YWIzMGI5MWMxODk3YjAwODAyZWQ4NjFlMWY5ZmFhZWQ4NzMzNjYwNzhjNjQpKQorIAorIEtFUk5FTF9CVUlMRF9QQVRIIDo9ICQoQlVJTERfUEFUSCkva2VybmVsJChpZiAkKGZpbmRzdHJpbmcgeWVzLCQoREVCVUdfS0VSTkVMKSksLWRlYnVnKQorIHJ3aWxkY2FyZD0kKGZvcmVhY2ggZCwkKHdpbGRjYXJkICQxKiksJChjYWxsIHJ3aWxkY2FyZCwkZC8sJDIpICQoZmlsdGVyICQoc3Vic3QgKiwlLCQyKSwkZCkpCitAQCAtMjk1LDIxICsyOTMsMTMgQEAgJChJUEVSRl9QQVRIKS9zcmMvaXBlcmYzOiB8ICQoSVBFUkZfUEFUSAorIAkkKE1BS0UpIC1DICQoSVBFUkZfUEFUSCkKKyAJJChTVFJJUCkgLXMgJEAKKyAKKy0kKExJQk1OTF9QQVRIKS8uaW5zdGFsbGVkOiAkKExJQk1OTF9UQVIpCistCWZsb2NrIC1zICQ8LmxvY2sgdGFyIC1DICQoQlVJTERfUEFUSCkgLXhmICQ8CistCXRvdWNoICRACistCistJChMSUJNTkxfUEFUSCkvc3JjLy5saWJzL2xpYm1ubC5hOiB8ICQoTElCTU5MX1BBVEgpLy5pbnN0YWxsZWQgJChVU0VSU1BBQ0VfREVQUykKKy0JY2QgJChMSUJNTkxfUEFUSCkgJiYgLi9jb25maWd1cmUgLS1wcmVmaXg9LyAkKENST1NTX0NPTVBJTEVfRkxBRykgLS1lbmFibGUtc3RhdGljIC0tZGlzYWJsZS1zaGFyZWQKKy0JJChNQUtFKSAtQyAkKExJQk1OTF9QQVRIKQorLQlzZWQgLWkgJ3M6cHJlZml4PS4qOnByZWZpeD0kKExJQk1OTF9QQVRIKTonICQoTElCTU5MX1BBVEgpL2xpYm1ubC5wYworLQorICQoV0lSRUdVQVJEX1RPT0xTX1BBVEgpLy5pbnN0YWxsZWQ6ICQoV0lSRUdVQVJEX1RPT0xTX1RBUikKKysJbWtkaXIgLXAgJChCVUlMRF9QQVRIKQorIAlmbG9jayAtcyAkPC5sb2NrIHRhciAtQyAkKEJVSUxEX1BBVEgpIC14ZiAkPAorIAl0b3VjaCAkQAorIAorLSQoV0lSRUdVQVJEX1RPT0xTX1BBVEgpL3NyYy93ZzogfCAkKFdJUkVHVUFSRF9UT09MU19QQVRIKS8uaW5zdGFsbGVkICQoTElCTU5MX1BBVEgpL3NyYy8ubGlicy9saWJtbmwuYSAkKFVTRVJTUEFDRV9ERVBTKQorLQlMREZMQUdTPSIkKExERkxBR1MpIC1MJChMSUJNTkxfUEFUSCkvc3JjLy5saWJzIiAkKE1BS0UpIC1DICQoV0lSRUdVQVJEX1RPT0xTX1BBVEgpL3NyYyBMSUJNTkxfQ0ZMQUdTPSItSSQoTElCTU5MX1BBVEgpL2luY2x1ZGUiIExJQk1OTF9MRExJQlM9Ii1sbW5sIiB3ZworKyQoV0lSRUdVQVJEX1RPT0xTX1BBVEgpL3NyYy93ZzogfCAkKFdJUkVHVUFSRF9UT09MU19QQVRIKS8uaW5zdGFsbGVkICQoVVNFUlNQQUNFX0RFUFMpCisrCSQoTUFLRSkgLUMgJChXSVJFR1VBUkRfVE9PTFNfUEFUSCkvc3JjIHdnCisgCSQoU1RSSVApIC1zICRACisgCisgJChCVUlMRF9QQVRIKS9pbml0OiBpbml0LmMgfCAkKFVTRVJTUEFDRV9ERVBTKQorQEAgLTM0MCwxNyArMzMwLDE3IEBAICQoQkFTSF9QQVRIKS9iYXNoOiB8ICQoQkFTSF9QQVRIKS8uaW5zdGEKKyAkKElQUk9VVEUyX1BBVEgpLy5pbnN0YWxsZWQ6ICQoSVBST1VURTJfVEFSKQorIAlta2RpciAtcCAkKEJVSUxEX1BBVEgpCisgCWZsb2NrIC1zICQ8LmxvY2sgdGFyIC1DICQoQlVJTERfUEFUSCkgLXhmICQ8CistCXByaW50ZiAnQ0M6PSQoQ0MpXG5QS0dfQ09ORklHOj1wa2ctY29uZmlnXG5UQ19DT05GSUdfWFQ6PW5cblRDX0NPTkZJR19BVE06PW5cblRDX0NPTkZJR19JUFNFVDo9blxuSVBfQ09ORklHX1NFVE5TOj15XG5IQVZFX0VMRjo9blxuSEFWRV9NTkw6PXlcbkhBVkVfQkVSS0VMRVlfREI6PW5cbkhBVkVfTEFURVg6PW5cbkhBVkVfUERGTEFURVg6PW5cbkNGTEFHUys9LURIQVZFX1NFVE5TIC1ESEFWRV9MSUJNTkwgLUkkKExJQk1OTF9QQVRIKS9pbmNsdWRlXG5MRExJQlMrPS1sbW5sJyA+ICQoSVBST1VURTJfUEFUSCkvY29uZmlnLm1rCisrCXByaW50ZiAnQ0M6PSQoQ0MpXG5QS0dfQ09ORklHOj1wa2ctY29uZmlnXG5UQ19DT05GSUdfWFQ6PW5cblRDX0NPTkZJR19BVE06PW5cblRDX0NPTkZJR19JUFNFVDo9blxuSVBfQ09ORklHX1NFVE5TOj15XG5IQVZFX0VMRjo9blxuSEFWRV9NTkw6PW5cbkhBVkVfQkVSS0VMRVlfREI6PW5cbkhBVkVfTEFURVg6PW5cbkhBVkVfUERGTEFURVg6PW5cbkNGTEFHUys9LURIQVZFX1NFVE5TXG4nID4gJChJUFJPVVRFMl9QQVRIKS9jb25maWcubWsKKyAJcHJpbnRmICdsaWI6IHNuYXBzaG90XG5cdCQkKE1BS0UpIC1DIGxpYlxuaXAvaXA6IGxpYlxuXHQkJChNQUtFKSAtQyBpcCBpcFxubWlzYy9zczogbGliXG5cdCQkKE1BS0UpIC1DIG1pc2Mgc3NcbicgPj4gJChJUFJPVVRFMl9QQVRIKS9NYWtlZmlsZQorIAl0b3VjaCAkQAorIAorLSQoSVBST1VURTJfUEFUSCkvaXAvaXA6IHwgJChJUFJPVVRFMl9QQVRIKS8uaW5zdGFsbGVkICQoTElCTU5MX1BBVEgpL3NyYy8ubGlicy9saWJtbmwuYSAkKFVTRVJTUEFDRV9ERVBTKQorLQlMREZMQUdTPSIkKExERkxBR1MpIC1MJChMSUJNTkxfUEFUSCkvc3JjLy5saWJzIiBQS0dfQ09ORklHX0xJQkRJUj0iJChMSUJNTkxfUEFUSCkiICQoTUFLRSkgLUMgJChJUFJPVVRFMl9QQVRIKSBQUkVGSVg9LyBpcC9pcAorLQkkKFNUUklQKSAtcyAkKElQUk9VVEUyX1BBVEgpL2lwL2lwCistCistJChJUFJPVVRFMl9QQVRIKS9taXNjL3NzOiB8ICQoSVBST1VURTJfUEFUSCkvLmluc3RhbGxlZCAkKExJQk1OTF9QQVRIKS9zcmMvLmxpYnMvbGlibW5sLmEgJChVU0VSU1BBQ0VfREVQUykKKy0JTERGTEFHUz0iJChMREZMQUdTKSAtTCQoTElCTU5MX1BBVEgpL3NyYy8ubGlicyIgUEtHX0NPTkZJR19MSUJESVI9IiQoTElCTU5MX1BBVEgpIiAkKE1BS0UpIC1DICQoSVBST1VURTJfUEFUSCkgUFJFRklYPS8gbWlzYy9zcworLQkkKFNUUklQKSAtcyAkKElQUk9VVEUyX1BBVEgpL21pc2Mvc3MKKyskKElQUk9VVEUyX1BBVEgpL2lwL2lwOiB8ICQoSVBST1VURTJfUEFUSCkvLmluc3RhbGxlZCAkKFVTRVJTUEFDRV9ERVBTKQorKwkkKE1BS0UpIC1DICQoSVBST1VURTJfUEFUSCkgUFJFRklYPS8gaXAvaXAKKysJJChTVFJJUCkgLXMgJEAKKysKKyskKElQUk9VVEUyX1BBVEgpL21pc2Mvc3M6IHwgJChJUFJPVVRFMl9QQVRIKS8uaW5zdGFsbGVkICQoVVNFUlNQQUNFX0RFUFMpCisrCSQoTUFLRSkgLUMgJChJUFJPVVRFMl9QQVRIKSBQUkVGSVg9LyBtaXNjL3NzCisrCSQoU1RSSVApIC1zICRACisgCisgJChJUFRBQkxFU19QQVRIKS8uaW5zdGFsbGVkOiAkKElQVEFCTEVTX1RBUikKKyAJbWtkaXIgLXAgJChCVUlMRF9QQVRIKQorQEAgLTM1OCw4ICszNDgsOCBAQCAkKElQVEFCTEVTX1BBVEgpLy5pbnN0YWxsZWQ6ICQoSVBUQUJMRVNfCisgCXNlZCAtaSAtZSAiL25mbmV0bGluaz1bMDFdL3M6PVswMV06PTA6IiAtZSAiL25mY29ubnRyYWNrPVswMV0vczo9WzAxXTo9MDoiICQoSVBUQUJMRVNfUEFUSCkvY29uZmlndXJlCisgCXRvdWNoICRACisgCistJChJUFRBQkxFU19QQVRIKS9pcHRhYmxlcy94dGFibGVzLWxlZ2FjeS1tdWx0aTogfCAkKElQVEFCTEVTX1BBVEgpLy5pbnN0YWxsZWQgJChMSUJNTkxfUEFUSCkvc3JjLy5saWJzL2xpYm1ubC5hICQoVVNFUlNQQUNFX0RFUFMpCistCWNkICQoSVBUQUJMRVNfUEFUSCkgJiYgUEtHX0NPTkZJR19MSUJESVI9IiQoTElCTU5MX1BBVEgpIiAuL2NvbmZpZ3VyZSAtLXByZWZpeD0vICQoQ1JPU1NfQ09NUElMRV9GTEFHKSAtLWVuYWJsZS1zdGF0aWMgLS1kaXNhYmxlLXNoYXJlZCAtLWRpc2FibGUtbmZ0YWJsZXMgLS1kaXNhYmxlLWJwZi1jb21waWxlciAtLWRpc2FibGUtbmZzeW5wcm94eSAtLWRpc2FibGUtbGliaXBxIC0td2l0aC1rZXJuZWw9JChCVUlMRF9QQVRIKS9pbmNsdWRlCisrJChJUFRBQkxFU19QQVRIKS9pcHRhYmxlcy94dGFibGVzLWxlZ2FjeS1tdWx0aTogfCAkKElQVEFCTEVTX1BBVEgpLy5pbnN0YWxsZWQgJChVU0VSU1BBQ0VfREVQUykKKysJY2QgJChJUFRBQkxFU19QQVRIKSAmJiAuL2NvbmZpZ3VyZSAtLXByZWZpeD0vICQoQ1JPU1NfQ09NUElMRV9GTEFHKSAtLWVuYWJsZS1zdGF0aWMgLS1kaXNhYmxlLXNoYXJlZCAtLWRpc2FibGUtbmZ0YWJsZXMgLS1kaXNhYmxlLWJwZi1jb21waWxlciAtLWRpc2FibGUtbmZzeW5wcm94eSAtLWRpc2FibGUtbGliaXBxIC0tZGlzYWJsZS1jb25ubGFiZWwgLS13aXRoLWtlcm5lbD0kKEJVSUxEX1BBVEgpL2luY2x1ZGUKKyAJJChNQUtFKSAtQyAkKElQVEFCTEVTX1BBVEgpCisgCSQoU1RSSVApIC1zICRACisgCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDg3LXdpcmVndWFyZC1yZWNlaXZlLXJlc2V0LWxhc3RfdW5kZXJfbG9hZC10by16ZXJvLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA4Ny13aXJlZ3VhcmQtcmVjZWl2ZS1yZXNldC1sYXN0X3VuZGVyX2xvYWQtdG8temVyby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTNkMjhhCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA4Ny13aXJlZ3VhcmQtcmVjZWl2ZS1yZXNldC1sYXN0X3VuZGVyX2xvYWQtdG8temVyby5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogRnJpLCAxNCBGZWIgMjAyMCAyMzo1NzoyMSArMDEwMAorU3ViamVjdDogW1BBVENIXSB3aXJlZ3VhcmQ6IHJlY2VpdmU6IHJlc2V0IGxhc3RfdW5kZXJfbG9hZCB0byB6ZXJvCisKK2NvbW1pdCAyYThhNGRmMzY0NjJhYTg1YjBkYjg3YjdjNWVhMTQ1YmE2N2UzNGE4IHVwc3RyZWFtLgorCitUaGlzIGlzIGEgc21hbGwgb3B0aW1pemF0aW9uIHRoYXQgcHJldmVudHMgbW9yZSBleHBlbnNpdmUgY29tcGFyaXNvbnMKK2Zyb20gaGFwcGVuaW5nIHdoZW4gdGhleSBhcmUgbm8gbG9uZ2VyIG5lY2Vzc2FyeSwgYnkgY2xlYXJpbmcgdGhlCitsYXN0X3VuZGVyX2xvYWQgdmFyaWFibGUgd2hlbmV2ZXIgd2Ugd2luZCB1cCBpbiBhIHN0YXRlIHdoZXJlIHdlIHdlcmUKK3VuZGVyIGxvYWQgYnV0IHdlIG5vIGxvbmdlciBhcmUuCisKK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorU3VnZ2VzdGVkLWJ5OiBNYXR0IER1bndvb2RpZSA8bmNvbkBub2NvbnJveS5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMgfCA3ICsrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCistLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jCitAQCAtMTE4LDEwICsxMTgsMTMgQEAgc3RhdGljIHZvaWQgd2dfcmVjZWl2ZV9oYW5kc2hha2VfcGFja2V0KAorIAorIAl1bmRlcl9sb2FkID0gc2tiX3F1ZXVlX2xlbigmd2ctPmluY29taW5nX2hhbmRzaGFrZXMpID49CisgCQkgICAgIE1BWF9RVUVVRURfSU5DT01JTkdfSEFORFNIQUtFUyAvIDg7CistCWlmICh1bmRlcl9sb2FkKQorKwlpZiAodW5kZXJfbG9hZCkgeworIAkJbGFzdF91bmRlcl9sb2FkID0ga3RpbWVfZ2V0X2NvYXJzZV9ib290dGltZV9ucygpOworLQllbHNlIGlmIChsYXN0X3VuZGVyX2xvYWQpCisrCX0gZWxzZSBpZiAobGFzdF91bmRlcl9sb2FkKSB7CisgCQl1bmRlcl9sb2FkID0gIXdnX2JpcnRoZGF0ZV9oYXNfZXhwaXJlZChsYXN0X3VuZGVyX2xvYWQsIDEpOworKwkJaWYgKCF1bmRlcl9sb2FkKQorKwkJCWxhc3RfdW5kZXJfbG9hZCA9IDA7CisrCX0KKyAJbWFjX3N0YXRlID0gd2dfY29va2llX3ZhbGlkYXRlX3BhY2tldCgmd2ctPmNvb2tpZV9jaGVja2VyLCBza2IsCisgCQkJCQkgICAgICB1bmRlcl9sb2FkKTsKKyAJaWYgKCh1bmRlcl9sb2FkICYmIG1hY19zdGF0ZSA9PSBWQUxJRF9NQUNfV0lUSF9DT09LSUUpIHx8CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDg4LXdpcmVndWFyZC1zZW5kLWFjY291bnQtZm9yLW10dS0wLWRldmljZXMucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDg4LXdpcmVndWFyZC1zZW5kLWFjY291bnQtZm9yLW10dS0wLWRldmljZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg0ZWZlMgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwODgtd2lyZWd1YXJkLXNlbmQtYWNjb3VudC1mb3ItbXR1LTAtZGV2aWNlcy5wYXRjaApAQCAtMCwwICsxLDk1IEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogRnJpLCAxNCBGZWIgMjAyMCAyMzo1NzoyMiArMDEwMAorU3ViamVjdDogW1BBVENIXSB3aXJlZ3VhcmQ6IHNlbmQ6IGFjY291bnQgZm9yIG10dT0wIGRldmljZXMKKworY29tbWl0IDE3NWYxY2E5YTllZDg2ODlkMjAyOGRhMWE3YzYyNGJiNGZiNGZmN2UgdXBzdHJlYW0uCisKK0l0IHR1cm5zIG91dCB0aGVyZSdzIGFuIGVhc3kgd2F5IHRvIGdldCBwYWNrZXRzIHF1ZXVlZCB1cCB3aGlsZSBzdGlsbAoraGF2aW5nIGFuIE1UVSBvZiB6ZXJvLCBhbmQgdGhhdCdzIHZpYSBwZXJzaXN0ZW50IGtlZXAgYWxpdmUuIFRoaXMgY29tbWl0CittYWtlcyBzdXJlIHRoYXQgaW4gd2hhdGV2ZXIgY29uZGl0aW9uLCB3ZSBkb24ndCB3aW5kIHVwIGRpdmlkaW5nIGJ5Cit6ZXJvLiBOb3RlIHRoYXQgYW4gTVRVIG9mIHplcm8gZm9yIGEgd2lyZWd1YXJkIGludGVyZmFjZSBpcyBzb21ldGhpbmcKK3F1YXNpLXZhbGlkLCBzbyBJIGRvbid0IHRoaW5rIHRoZSBjb3JyZWN0IGZpeCBpcyB0byBsaW1pdCBpdCB2aWEKK21pbl9tdHUuIFRoaXMgY2FuIGJlIHJlcHJvZHVjZWQgZWFzaWx5IHdpdGg6CisKK2lwIGxpbmsgYWRkIHdnMCB0eXBlIHdpcmVndWFyZAoraXAgbGluayBhZGQgd2cxIHR5cGUgd2lyZWd1YXJkCitpcCBsaW5rIHNldCB3ZzAgdXAgbXR1IDAKK2lwIGxpbmsgc2V0IHdnMSB1cAord2cgc2V0IHdnMCBwcml2YXRlLWtleSA8KHdnIGdlbmtleSkKK3dnIHNldCB3ZzEgbGlzdGVuLXBvcnQgMSBwcml2YXRlLWtleSA8KHdnIGdlbmtleSkgcGVlciAkKHdnIHNob3cgd2cwIHB1YmxpYy1rZXkpCit3ZyBzZXQgd2cwIHBlZXIgJCh3ZyBzaG93IHdnMSBwdWJsaWMta2V5KSBwZXJzaXN0ZW50LWtlZXBhbGl2ZSAxIGVuZHBvaW50IDEyNy4wLjAuMToxCisKK0hvd2V2ZXIsIHdoaWxlIG1pbl9tdHU9MCBzZWVtcyBmaW5lLCBpdCBtYWtlcyBzZW5zZSB0byByZXN0cmljdCB0aGUKK21heF9tdHUuIFRoaXMgY29tbWl0IGFsc28gcmVzdHJpY3RzIHRoZSBtYXhpbXVtIE1UVSB0byB0aGUgZ3JlYXRlc3QKK251bWJlciBmb3Igd2hpY2ggcm91bmRpbmcgdXAgdG8gdGhlIHBhZGRpbmcgbXVsdGlwbGUgd29uJ3Qgb3ZlcmZsb3cgYQorc2lnbmVkIGludGVnZXIuIFBhY2tldHMgdGhpcyBsYXJnZSB3ZXJlIGFsd2F5cyByZWplY3RlZCBhbnl3YXkKK2V2ZW50dWFsbHksIGR1ZSB0byBjaGVja3MgZGVlcGVyIGluLCBidXQgaXQgc2VlbXMgbW9yZSBzb3VuZCBub3QgdG8gZXZlbgorbGV0IHRoZSBhZG1pbmlzdHJhdG9yIGNvbmZpZ3VyZSBzb21ldGhpbmcgdGhhdCB3b24ndCB3b3JrIGFueXdheS4KKworV2UgdXNlIHRoaXMgb3Bwb3J0dW5pdHkgdG8gY2xlYW4gdXAgdGhpcyBmdW5jdGlvbiBhIGJpdCBzbyB0aGF0IGl0J3MKK2NsZWFyIHdoaWNoIHBhdGhzIHdlJ3JlIGV4cGVjdGluZy4KKworU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CitDYzogRXJpYyBEdW1hemV0IDxlcmljLmR1bWF6ZXRAZ21haWwuY29tPgorUmV2aWV3ZWQtYnk6IEVyaWMgRHVtYXpldCA8ZWR1bWF6ZXRAZ29vZ2xlLmNvbT4KK1NpZ25lZC1vZmYtYnk6IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jIHwgIDcgKysrKy0tLQorIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmMgICB8IDE2ICsrKysrKysrKysrLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYworKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jCitAQCAtMjU4LDYgKzI1OCw4IEBAIHN0YXRpYyB2b2lkIHdnX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICoKKyAJZW51bSB7IFdHX05FVERFVl9GRUFUVVJFUyA9IE5FVElGX0ZfSFdfQ1NVTSB8IE5FVElGX0ZfUlhDU1VNIHwKKyAJCQkJICAgIE5FVElGX0ZfU0cgfCBORVRJRl9GX0dTTyB8CisgCQkJCSAgICBORVRJRl9GX0dTT19TT0ZUV0FSRSB8IE5FVElGX0ZfSElHSERNQSB9OworKwljb25zdCBpbnQgb3ZlcmhlYWQgPSBNRVNTQUdFX01JTklNVU1fTEVOR1RIICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICsKKysJCQkgICAgIG1heChzaXplb2Yoc3RydWN0IGlwdjZoZHIpLCBzaXplb2Yoc3RydWN0IGlwaGRyKSk7CisgCisgCWRldi0+bmV0ZGV2X29wcyA9ICZuZXRkZXZfb3BzOworIAlkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IDA7CitAQCAtMjcxLDkgKzI3Myw4IEBAIHN0YXRpYyB2b2lkIHdnX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICoKKyAJZGV2LT5mZWF0dXJlcyB8PSBXR19ORVRERVZfRkVBVFVSRVM7CisgCWRldi0+aHdfZmVhdHVyZXMgfD0gV0dfTkVUREVWX0ZFQVRVUkVTOworIAlkZXYtPmh3X2VuY19mZWF0dXJlcyB8PSBXR19ORVRERVZfRkVBVFVSRVM7CistCWRldi0+bXR1ID0gRVRIX0RBVEFfTEVOIC0gTUVTU0FHRV9NSU5JTVVNX0xFTkdUSCAtCistCQkgICBzaXplb2Yoc3RydWN0IHVkcGhkcikgLQorLQkJICAgbWF4KHNpemVvZihzdHJ1Y3QgaXB2NmhkciksIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTsKKysJZGV2LT5tdHUgPSBFVEhfREFUQV9MRU4gLSBvdmVyaGVhZDsKKysJZGV2LT5tYXhfbXR1ID0gcm91bmRfZG93bihJTlRfTUFYLCBNRVNTQUdFX1BBRERJTkdfTVVMVElQTEUpIC0gb3ZlcmhlYWQ7CisgCisgCVNFVF9ORVRERVZfREVWVFlQRShkZXYsICZkZXZpY2VfdHlwZSk7CisgCistLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jCitAQCAtMTQzLDE2ICsxNDMsMjIgQEAgc3RhdGljIHZvaWQga2VlcF9rZXlfZnJlc2goc3RydWN0IHdnX3BlZQorIAorIHN0YXRpYyB1bnNpZ25lZCBpbnQgY2FsY3VsYXRlX3NrYl9wYWRkaW5nKHN0cnVjdCBza19idWZmICpza2IpCisgeworKwl1bnNpZ25lZCBpbnQgcGFkZGVkX3NpemUsIGxhc3RfdW5pdCA9IHNrYi0+bGVuOworKworKwlpZiAodW5saWtlbHkoIVBBQ0tFVF9DQihza2IpLT5tdHUpKQorKwkJcmV0dXJuIEFMSUdOKGxhc3RfdW5pdCwgTUVTU0FHRV9QQURESU5HX01VTFRJUExFKSAtIGxhc3RfdW5pdDsKKysKKyAJLyogV2UgZG8gdGhpcyBtb2R1bG8gYnVzaW5lc3Mgd2l0aCB0aGUgTVRVLCBqdXN0IGluIGNhc2UgdGhlIG5ldHdvcmtpbmcKKyAJICogbGF5ZXIgZ2l2ZXMgdXMgYSBwYWNrZXQgdGhhdCdzIGJpZ2dlciB0aGFuIHRoZSBNVFUuIEluIHRoYXQgY2FzZSwgd2UKKyAJICogd291bGRuJ3Qgd2FudCB0aGUgZmluYWwgc3VidHJhY3Rpb24gdG8gb3ZlcmZsb3cgaW4gdGhlIGNhc2Ugb2YgdGhlCistCSAqIHBhZGRlZF9zaXplIGJlaW5nIGNsYW1wZWQuCisrCSAqIHBhZGRlZF9zaXplIGJlaW5nIGNsYW1wZWQuIEZvcnR1bmF0ZWx5LCB0aGF0J3MgdmVyeSByYXJlbHkgdGhlIGNhc2UsCisrCSAqIHNvIHdlIG9wdGltaXplIGZvciB0aGF0IG5vdCBoYXBwZW5pbmcuCisgCSAqLworLQl1bnNpZ25lZCBpbnQgbGFzdF91bml0ID0gc2tiLT5sZW4gJSBQQUNLRVRfQ0Ioc2tiKS0+bXR1OworLQl1bnNpZ25lZCBpbnQgcGFkZGVkX3NpemUgPSBBTElHTihsYXN0X3VuaXQsIE1FU1NBR0VfUEFERElOR19NVUxUSVBMRSk7CisrCWlmICh1bmxpa2VseShsYXN0X3VuaXQgPiBQQUNLRVRfQ0Ioc2tiKS0+bXR1KSkKKysJCWxhc3RfdW5pdCAlPSBQQUNLRVRfQ0Ioc2tiKS0+bXR1OworIAorLQlpZiAocGFkZGVkX3NpemUgPiBQQUNLRVRfQ0Ioc2tiKS0+bXR1KQorLQkJcGFkZGVkX3NpemUgPSBQQUNLRVRfQ0Ioc2tiKS0+bXR1OworKwlwYWRkZWRfc2l6ZSA9IG1pbihQQUNLRVRfQ0Ioc2tiKS0+bXR1LAorKwkJCSAgQUxJR04obGFzdF91bml0LCBNRVNTQUdFX1BBRERJTkdfTVVMVElQTEUpKTsKKyAJcmV0dXJuIHBhZGRlZF9zaXplIC0gbGFzdF91bml0OworIH0KKyAKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwODktd2lyZWd1YXJkLXNvY2tldC1yZW1vdmUtZXh0cmEtY2FsbC10by1zeW5jaHJvbml6ZV9uZS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwODktd2lyZWd1YXJkLXNvY2tldC1yZW1vdmUtZXh0cmEtY2FsbC10by1zeW5jaHJvbml6ZV9uZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NThlOWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA4OS13aXJlZ3VhcmQtc29ja2V0LXJlbW92ZS1leHRyYS1jYWxsLXRvLXN5bmNocm9uaXplX25lLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJKYXNvbiBBLiBEb25lbmZlbGQiIDxKYXNvbkB6eDJjNC5jb20+CitEYXRlOiBGcmksIDE0IEZlYiAyMDIwIDIzOjU3OjIzICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIHdpcmVndWFyZDogc29ja2V0OiByZW1vdmUgZXh0cmEgY2FsbCB0byBzeW5jaHJvbml6ZV9uZXQKKworY29tbWl0IDFmYmMzM2IwYTdmZWI2Y2E3MmJmN2RjOGEwNWQ4MTQ4NWVlOGVlMmUgdXBzdHJlYW0uCisKK3N5bmNocm9uaXplX25ldCgpIGlzIGEgd3JhcHBlciBhcm91bmQgc3luY2hyb25pemVfcmN1KCksIHNvIHRoZXJlJ3Mgbm8KK3BvaW50IGluIGhhdmluZyBzeW5jaHJvbml6ZV9uZXQgYW5kIHN5bmNocm9uaXplX3JjdSBiYWNrIHRvIGJhY2ssCitkZXNwaXRlIHRoZSBkb2N1bWVudGF0aW9uIGNvbW1lbnQgc3VnZ2VzdGluZyBtYXliZSBpdCdzIHNvbWV3aGF0IHVzZWZ1bCwKKyJXYWl0IGZvciBwYWNrZXRzIGN1cnJlbnRseSBiZWluZyByZWNlaXZlZCB0byBiZSBkb25lLiIgVGhpcyBjb21taXQKK3JlbW92ZXMgdGhlIGV4dHJhIGNhbGwuCisKK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorU3VnZ2VzdGVkLWJ5OiBFcmljIER1bWF6ZXQgPGVyaWMuZHVtYXpldEBnbWFpbC5jb20+CitSZXZpZXdlZC1ieTogRXJpYyBEdW1hemV0IDxlZHVtYXpldEBnb29nbGUuY29tPgorU2lnbmVkLW9mZi1ieTogRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvc29ja2V0LmMgfCAxIC0KKyAxIGZpbGUgY2hhbmdlZCwgMSBkZWxldGlvbigtKQorCistLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvc29ja2V0LmMKKysrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9zb2NrZXQuYworQEAgLTQzMiw3ICs0MzIsNiBAQCB2b2lkIHdnX3NvY2tldF9yZWluaXQoc3RydWN0IHdnX2RldmljZSAqCisgCQl3Zy0+aW5jb21pbmdfcG9ydCA9IG50b2hzKGluZXRfc2sobmV3NCktPmluZXRfc3BvcnQpOworIAltdXRleF91bmxvY2soJndnLT5zb2NrZXRfdXBkYXRlX2xvY2spOworIAlzeW5jaHJvbml6ZV9yY3UoKTsKKy0Jc3luY2hyb25pemVfbmV0KCk7CisgCXNvY2tfZnJlZShvbGQ0KTsKKyAJc29ja19mcmVlKG9sZDYpOworIH0KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwOTAtd2lyZWd1YXJkLXNlbGZ0ZXN0cy1yZW1vdmUtZHVwbGljYXRlZC1pbmNsdWRlLXN5cy10eS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwOTAtd2lyZWd1YXJkLXNlbGZ0ZXN0cy1yZW1vdmUtZHVwbGljYXRlZC1pbmNsdWRlLXN5cy10eS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzU0NWU2Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA5MC13aXJlZ3VhcmQtc2VsZnRlc3RzLXJlbW92ZS1kdXBsaWNhdGVkLWluY2x1ZGUtc3lzLXR5LnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFl1ZUhhaWJpbmcgPHl1ZWhhaWJpbmdAaHVhd2VpLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMjAgMTg6MzA6NDMgLTA2MDAKK1N1YmplY3Q6IFtQQVRDSF0gd2lyZWd1YXJkOiBzZWxmdGVzdHM6IHJlbW92ZSBkdXBsaWNhdGVkIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorCitjb21taXQgMTY2MzkxMTU5YzVkZWI4NDc5NWQyZmY0NmU5NWYyNzYxNzdmYTVmYiB1cHN0cmVhbS4KKworVGhpcyBjb21taXQgcmVtb3ZlcyBhIGR1cGxpY2F0ZWQgaW5jbHVkZS4KKworU2lnbmVkLW9mZi1ieTogWXVlSGFpYmluZyA8eXVlaGFpYmluZ0BodWF3ZWkuY29tPgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CitTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9xZW11L2luaXQuYyB8IDEgLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGRlbGV0aW9uKC0pCisKKy0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9xZW11L2luaXQuYworKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL3FlbXUvaW5pdC5jCitAQCAtMTMsNyArMTMsNiBAQAorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxzeXMvd2FpdC5oPgorICNpbmNsdWRlIDxzeXMvbW91bnQuaD4KKy0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvaW8uaD4KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwOTEtd2lyZWd1YXJkLXF1ZXVlaW5nLWFjY291bnQtZm9yLXNrYi1wcm90b2NvbC0wLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA5MS13aXJlZ3VhcmQtcXVldWVpbmctYWNjb3VudC1mb3Itc2tiLXByb3RvY29sLTAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTljYTY1NQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwOTEtd2lyZWd1YXJkLXF1ZXVlaW5nLWFjY291bnQtZm9yLXNrYi1wcm90b2NvbC0wLnBhdGNoCkBAIC0wLDAgKzEsMTAwIEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAyMCAxODozMDo0NSAtMDYwMAorU3ViamVjdDogW1BBVENIXSB3aXJlZ3VhcmQ6IHF1ZXVlaW5nOiBhY2NvdW50IGZvciBza2ItPnByb3RvY29sPT0wCisKK2NvbW1pdCBhNTU4ODYwNGFmNDQ4NjY0ZTc5NmRhZjNjMWQ1YTQ1MjNjNjA2NjdiIHVwc3RyZWFtLgorCitXZSBjYXJyeSBvdXQgY2hlY2tzIHRvIHRoZSBlZmZlY3Qgb2Y6CisKKyAgaWYgKHNrYi0+cHJvdG9jb2wgIT0gd2dfZXhhbWluZV9wYWNrZXRfcHJvdG9jb2woc2tiKSkKKyAgICBnb3RvIGVycjsKKworQnkgaGF2aW5nIHdnX3NrYl9leGFtaW5lX3VudHJ1c3RlZF9pcF9oZHIgcmV0dXJuIDAgb24gZmFpbHVyZSwgdGhpcworbWVhbnMgdGhhdCB0aGUgY2hlY2sgYWJvdmUgc3RpbGwgcGFzc2VzIGluIHRoZSBjYXNlIHdoZXJlIHNrYi0+cHJvdG9jb2wKK2lzIHplcm8sIHdoaWNoIGlzIHBvc3NpYmxlIHRvIGhpdCB3aXRoIEFGX1BBQ0tFVDoKKworICBzdHJ1Y3Qgc29ja2FkZHJfcGt0IHNhZGRyID0geyAuc3BrdF9kZXZpY2UgPSAid2cwIiB9OworICB1bnNpZ25lZCBjaGFyIGJ1ZmZlcls1XSA9IHsgMCB9OworICBzZW5kdG8oc29ja2V0KEFGX1BBQ0tFVCwgU09DS19QQUNLRVQsIC8qIHNrYi0+cHJvdG9jb2wgPSAqLyAwKSwKKyAgICAgICAgIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIDAsIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKikmc2FkZHIsIHNpemVvZihzYWRkcikpOworCitBZGRpdGlvbmFsIGNoZWNrcyBtZWFuIHRoYXQgdGhpcyBpc24ndCBhY3R1YWxseSBhIHByb2JsZW0gaW4gdGhlIGNvZGUKK2Jhc2UsIGJ1dCBJIGNvdWxkIGltYWdpbmUgaXQgYmVjb21pbmcgYSBwcm9ibGVtIGxhdGVyIGlmIHRoZSBmdW5jdGlvbiBpcwordXNlZCBtb3JlIGxpYmVyYWxseS4KKworSSB3b3VsZCBwcmVmZXIgdG8gZml4IHRoaXMgYnkgaGF2aW5nIHdnX2V4YW1pbmVfcGFja2V0X3Byb3RvY29sIHJldHVybiBhCiszMi1iaXQgfjAgdmFsdWUgb24gZmFpbHVyZSwgd2hpY2ggd2lsbCBuZXZlciBtYXRjaCBhbnkgdmFsdWUgb2YKK3NrYi0+cHJvdG9jb2wsIHdoaWNoIHdvdWxkIHNpbXBseSBjaGFuZ2UgdGhlIGdlbmVyYXRlZCBjb2RlIGZyb20gYSBtb3YKK3RvIGEgbW92enguIEhvd2V2ZXIsIHNwYXJzZSBjb21wbGFpbnMsIGFuZCBhZGRpbmcgX19mb3JjZSBjYXN0cyBkb2Vzbid0CitzZWVtIGxpa2UgYSBnb29kIGlkZWEsIHNvIGluc3RlYWQgd2UganVzdCBhZGQgYSBzaW1wbGUgaGVscGVyIGZ1bmN0aW9uCit0byBjaGVjayBmb3IgdGhlIHplcm8gcmV0dXJuIHZhbHVlLiBTaW5jZSB3Z19leGFtaW5lX3BhY2tldF9wcm90b2NvbAoraXRzZWxmIGdldHMgaW5saW5lZCwgdGhpcyB3aW5kcyB1cCBub3QgYWRkaW5nIGFuIGFkZGl0aW9uYWwgYnJhbmNoIHRvCit0aGUgZ2VuZXJhdGVkIGNvZGUsIHNpbmNlIHRoZSAwIHJldHVybiB2YWx1ZSBhbHJlYWR5IGhhcHBlbnMgaW4gYQorbWVyZ2FibGUgYnJhbmNoLgorCitSZXBvcnRlZC1ieTogRmFiaWFuIEZyZXllciA8ZmFiaWFuZnJleWVyQHJhZGljYWxseW9wZW5zZWN1cml0eS5jb20+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jICAgfCAyICstCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmggfCA4ICsrKysrKystCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYyAgfCA0ICsrLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYworKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jCitAQCAtMTIyLDcgKzEyMiw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCB3Z194bWl0KHN0cnVjdCBza19idWYKKyAJdTMyIG10dTsKKyAJaW50IHJldDsKKyAKKy0JaWYgKHVubGlrZWx5KHdnX3NrYl9leGFtaW5lX3VudHJ1c3RlZF9pcF9oZHIoc2tiKSAhPSBza2ItPnByb3RvY29sKSkgeworKwlpZiAodW5saWtlbHkoIXdnX2NoZWNrX3BhY2tldF9wcm90b2NvbChza2IpKSkgeworIAkJcmV0ID0gLUVQUk9UT05PU1VQUE9SVDsKKyAJCW5ldF9kYmdfcmF0ZWxpbWl0ZWQoIiVzOiBJbnZhbGlkIElQIHBhY2tldFxuIiwgZGV2LT5uYW1lKTsKKyAJCWdvdG8gZXJyOworLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmgKKysrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oCitAQCAtNjYsNyArNjYsNyBAQCBzdHJ1Y3QgcGFja2V0X2NiIHsKKyAjZGVmaW5lIFBBQ0tFVF9QRUVSKHNrYikgKFBBQ0tFVF9DQihza2IpLT5rZXlwYWlyLT5lbnRyeS5wZWVyKQorIAorIC8qIFJldHVybnMgZWl0aGVyIHRoZSBjb3JyZWN0IHNrYi0+cHJvdG9jb2wgdmFsdWUsIG9yIDAgaWYgaW52YWxpZC4gKi8KKy1zdGF0aWMgaW5saW5lIF9fYmUxNiB3Z19za2JfZXhhbWluZV91bnRydXN0ZWRfaXBfaGRyKHN0cnVjdCBza19idWZmICpza2IpCisrc3RhdGljIGlubGluZSBfX2JlMTYgd2dfZXhhbWluZV9wYWNrZXRfcHJvdG9jb2woc3RydWN0IHNrX2J1ZmYgKnNrYikKKyB7CisgCWlmIChza2JfbmV0d29ya19oZWFkZXIoc2tiKSA+PSBza2ItPmhlYWQgJiYKKyAJICAgIChza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIHNpemVvZihzdHJ1Y3QgaXBoZHIpKSA8PQorQEAgLTgxLDYgKzgxLDEyIEBAIHN0YXRpYyBpbmxpbmUgX19iZTE2IHdnX3NrYl9leGFtaW5lX3VudHIKKyAJcmV0dXJuIDA7CisgfQorIAorK3N0YXRpYyBpbmxpbmUgYm9vbCB3Z19jaGVja19wYWNrZXRfcHJvdG9jb2woc3RydWN0IHNrX2J1ZmYgKnNrYikKKyt7CisrCV9fYmUxNiByZWFsX3Byb3RvY29sID0gd2dfZXhhbWluZV9wYWNrZXRfcHJvdG9jb2woc2tiKTsKKysJcmV0dXJuIHJlYWxfcHJvdG9jb2wgJiYgc2tiLT5wcm90b2NvbCA9PSByZWFsX3Byb3RvY29sOworK30KKysKKyBzdGF0aWMgaW5saW5lIHZvaWQgd2dfcmVzZXRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IpCisgeworIAlza2Jfc2NydWJfcGFja2V0KHNrYiwgdHJ1ZSk7CistLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jCitAQCAtNTYsNyArNTYsNyBAQCBzdGF0aWMgaW50IHByZXBhcmVfc2tiX2hlYWRlcihzdHJ1Y3Qgc2tfCisgCXNpemVfdCBkYXRhX29mZnNldCwgZGF0YV9sZW4sIGhlYWRlcl9sZW47CisgCXN0cnVjdCB1ZHBoZHIgKnVkcDsKKyAKKy0JaWYgKHVubGlrZWx5KHdnX3NrYl9leGFtaW5lX3VudHJ1c3RlZF9pcF9oZHIoc2tiKSAhPSBza2ItPnByb3RvY29sIHx8CisrCWlmICh1bmxpa2VseSghd2dfY2hlY2tfcGFja2V0X3Byb3RvY29sKHNrYikgfHwKKyAJCSAgICAgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSA8IHNrYi0+aGVhZCB8fAorIAkJICAgICAoc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSkgPgorIAkJCSAgICAgc2tiX3RhaWxfcG9pbnRlcihza2IpKSkKK0BAIC0zODgsNyArMzg4LDcgQEAgc3RhdGljIHZvaWQgd2dfcGFja2V0X2NvbnN1bWVfZGF0YV9kb25lKAorIAkgKi8KKyAJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKyAJc2tiLT5jc3VtX2xldmVsID0gfjA7IC8qIEFsbCBsZXZlbHMgKi8KKy0Jc2tiLT5wcm90b2NvbCA9IHdnX3NrYl9leGFtaW5lX3VudHJ1c3RlZF9pcF9oZHIoc2tiKTsKKysJc2tiLT5wcm90b2NvbCA9IHdnX2V4YW1pbmVfcGFja2V0X3Byb3RvY29sKHNrYik7CisgCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkgeworIAkJbGVuID0gbnRvaHMoaXBfaGRyKHNrYiktPnRvdF9sZW4pOworIAkJaWYgKHVubGlrZWx5KGxlbiA8IHNpemVvZihzdHJ1Y3QgaXBoZHIpKSkKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwOTItd2lyZWd1YXJkLXJlY2VpdmUtcmVtb3ZlLWRlYWQtY29kZS1mcm9tLWRlZmF1bHQtcGFjay5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwOTItd2lyZWd1YXJkLXJlY2VpdmUtcmVtb3ZlLWRlYWQtY29kZS1mcm9tLWRlZmF1bHQtcGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2Q0ZmJmCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA5Mi13aXJlZ3VhcmQtcmVjZWl2ZS1yZW1vdmUtZGVhZC1jb2RlLWZyb20tZGVmYXVsdC1wYWNrLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJKYXNvbiBBLiBEb25lbmZlbGQiIDxKYXNvbkB6eDJjNC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDIwIDE4OjMwOjQ2IC0wNjAwCitTdWJqZWN0OiBbUEFUQ0hdIHdpcmVndWFyZDogcmVjZWl2ZTogcmVtb3ZlIGRlYWQgY29kZSBmcm9tIGRlZmF1bHQgcGFja2V0IHR5cGUKKyBjYXNlCisKK2NvbW1pdCAyYjg3NjVjNTJkYjI0YzBmYmNjODFiYWM5YjVlODM5MGYyYzdkM2M4IHVwc3RyZWFtLgorCitUaGUgc2l0dWF0aW9uIGluIHdoaWNoIHdlIHdpbmQgdXAgaGl0dGluZyB0aGUgZGVmYXVsdCBjYXNlIGhlcmUKK2luZGljYXRlcyBhIG1ham9yIGJ1ZyBpbiBlYXJsaWVyIHBhcnNpbmcgY29kZS4gSXQgaXMgbm90IGEgdXN1YWwgdGhpbmcKK3RoYXQgc2hvdWxkIGV2ZXIgaGFwcGVuLCB3aGljaCBtZWFucyBhICJmcmllbmRseSIgbWVzc2FnZSBmb3IgaXQgZG9lc24ndAorbWFrZSBzZW5zZS4gUmF0aGVyLCByZXBsYWNlIHRoaXMgd2l0aCBhIFdBUk5fT04sIGp1c3QgbGlrZSB3ZSBkbyBlYXJsaWVyCitpbiB0aGUgZmlsZSBmb3IgYSBzaW1pbGFyIHNpdHVhdGlvbiwgc28gdGhhdCBzb21lYm9keSBzZW5kcyB1cyBhIGJ1ZworcmVwb3J0IGFuZCB3ZSBjYW4gZml4IGl0LgorCitSZXBvcnRlZC1ieTogRmFiaWFuIEZyZXllciA8ZmFiaWFuZnJleWVyQHJhZGljYWxseW9wZW5zZWN1cml0eS5jb20+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYyB8IDMgKy0tCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAyIGRlbGV0aW9ucygtKQorCistLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jCitAQCAtNTg3LDggKzU4Nyw3IEBAIHZvaWQgd2dfcGFja2V0X3JlY2VpdmUoc3RydWN0IHdnX2RldmljZQorIAkJd2dfcGFja2V0X2NvbnN1bWVfZGF0YSh3Zywgc2tiKTsKKyAJCWJyZWFrOworIAlkZWZhdWx0OgorLQkJbmV0X2RiZ19za2JfcmF0ZWxpbWl0ZWQoIiVzOiBJbnZhbGlkIHBhY2tldCBmcm9tICVwSVNwZnNjXG4iLAorLQkJCQkJd2ctPmRldi0+bmFtZSwgc2tiKTsKKysJCVdBUk4oMSwgIk5vbi1leGhhdXN0aXZlIHBhcnNpbmcgb2YgcGFja2V0IGhlYWRlciBsZWFkIHRvIHVua25vd24gcGFja2V0IHR5cGUhXG4iKTsKKyAJCWdvdG8gZXJyOworIAl9CisgCXJldHVybjsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwOTMtd2lyZWd1YXJkLW5vaXNlLWVycm9yLW91dC1wcmVjb21wdXRlZC1ESC1kdXJpbmctaGFuZC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwOTMtd2lyZWd1YXJkLW5vaXNlLWVycm9yLW91dC1wcmVjb21wdXRlZC1ESC1kdXJpbmctaGFuZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWMzMDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA5My13aXJlZ3VhcmQtbm9pc2UtZXJyb3Itb3V0LXByZWNvbXB1dGVkLURILWR1cmluZy1oYW5kLnBhdGNoCkBAIC0wLDAgKzEsMjI0IEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAyMCAxODozMDo0NyAtMDYwMAorU3ViamVjdDogW1BBVENIXSB3aXJlZ3VhcmQ6IG5vaXNlOiBlcnJvciBvdXQgcHJlY29tcHV0ZWQgREggZHVyaW5nIGhhbmRzaGFrZQorIHJhdGhlciB0aGFuIGNvbmZpZworCitjb21taXQgMTFhNzY4NmFhOTljN2ZlNGIzZjgwZjZkY2NjZDU0MTI5ODE3OTg0ZCB1cHN0cmVhbS4KKworV2UgcHJlY29tcHV0ZSB0aGUgc3RhdGljLXN0YXRpYyBFQ0RIIGR1cmluZyBjb25maWd1cmF0aW9uIHRpbWUsIGluIG9yZGVyCit0byBzYXZlIGFuIGV4cGVuc2l2ZSBjb21wdXRhdGlvbiBsYXRlciB3aGVuIHJlY2VpdmluZyBuZXR3b3JrIHBhY2tldHMuCitIb3dldmVyLCBub3QgYWxsIEVDREggY29tcHV0YXRpb25zIHlpZWxkIGEgY29udHJpYnV0b3J5IHJlc3VsdC4gUHJpb3IsCit3ZSB3ZXJlIGp1c3Qgbm90IGxldHRpbmcgdGhvc2UgcGVlcnMgYmUgYWRkZWQgdG8gdGhlIGludGVyZmFjZS4gSG93ZXZlciwKK3RoaXMgY3JlYXRlcyBhIHN0cmFuZ2UgaW5jb25zaXN0ZW5jeSwgc2luY2UgaXQgd2FzIHN0aWxsIHBvc3NpYmxlIHRvIGFkZAorb3RoZXIgd2VpcmQgcG9pbnRzLCBsaWtlIGEgdmFsaWQgcHVibGljIGtleSBwbHVzIGEgbG93LW9yZGVyIHBvaW50LCBhbmQsCitsaWtlIHBvaW50cyB0aGF0IHJlc3VsdCBpbiB6ZXJvcywgYSBoYW5kc2hha2Ugd291bGQgbm90IGNvbXBsZXRlLiBJbgorb3JkZXIgdG8gbWFrZSB0aGUgYmVoYXZpb3IgbW9yZSB1bmlmb3JtIGFuZCBsZXNzIHN1cnByaXNpbmcsIHNpbXBseQorYWxsb3cgYWxsIHBlZXJzIHRvIGJlIGFkZGVkLiBUaGVuLCB3ZSdsbCBlcnJvciBvdXQgbGF0ZXIgd2hlbiBkb2luZyB0aGUKK2NyeXB0byBpZiB0aGVyZSdzIGFuIGlzc3VlLiBUaGlzIGFsc28gYWRkcyBtb3JlIHNlcGFyYXRpb24gYmV0d2VlbiB0aGUKK2NyeXB0byBsYXllciBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gbGF5ZXIuCisKK0Rpc2N1c3NlZC13aXRoOiBNYXRoaWFzIEhhbGwtQW5kZXJzZW4gPG1hdGhpYXNAaGFsbC1hbmRlcnNlbi5kaz4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorU2lnbmVkLW9mZi1ieTogRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jICAgICAgICAgICAgfCAgOCArLS0tCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL25vaXNlLmMgICAgICAgICAgICAgIHwgNTUgKysrKysrKysrKysrLS0tLS0tLS0tLQorIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9ub2lzZS5oICAgICAgICAgICAgICB8IDEyICsrLS0tCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYyAgICAgICAgICAgICAgIHwgIDcgKy0tCisgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL25ldG5zLnNoIHwgMTUgKysrKy0tCisgNSBmaWxlcyBjaGFuZ2VkLCA0OSBpbnNlcnRpb25zKCspLCA0OCBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYworKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYworQEAgLTQxNywxMSArNDE3LDcgQEAgc3RhdGljIGludCBzZXRfcGVlcihzdHJ1Y3Qgd2dfZGV2aWNlICp3ZworIAorIAkJcGVlciA9IHdnX3BlZXJfY3JlYXRlKHdnLCBwdWJsaWNfa2V5LCBwcmVzaGFyZWRfa2V5KTsKKyAJCWlmIChJU19FUlIocGVlcikpIHsKKy0JCQkvKiBTaW1pbGFyIHRvIHRoZSBhYm92ZSwgaWYgdGhlIGtleSBpcyBpbnZhbGlkLCB3ZSBza2lwCistCQkJICogaXQgd2l0aG91dCBmYW5mYXJlLCBzbyB0aGF0IHNlcnZpY2VzIGRvbid0IG5lZWQgdG8KKy0JCQkgKiB3b3JyeSBhYm91dCBkb2luZyBrZXkgdmFsaWRhdGlvbiB0aGVtc2VsdmVzLgorLQkJCSAqLworLQkJCXJldCA9IFBUUl9FUlIocGVlcikgPT0gLUVLRVlSRUpFQ1RFRCA/IDAgOiBQVFJfRVJSKHBlZXIpOworKwkJCXJldCA9IFBUUl9FUlIocGVlcik7CisgCQkJcGVlciA9IE5VTEw7CisgCQkJZ290byBvdXQ7CisgCQl9CitAQCAtNTc1LDcgKzU3MSw3IEBAIHN0YXRpYyBpbnQgd2dfc2V0X2RldmljZShzdHJ1Y3Qgc2tfYnVmZgorIAkJCQkJCQkgcHJpdmF0ZV9rZXkpOworIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBlZXIsIHRlbXAsICZ3Zy0+cGVlcl9saXN0LAorIAkJCQkJIHBlZXJfbGlzdCkgeworLQkJCUJVR19PTighd2dfbm9pc2VfcHJlY29tcHV0ZV9zdGF0aWNfc3RhdGljKHBlZXIpKTsKKysJCQl3Z19ub2lzZV9wcmVjb21wdXRlX3N0YXRpY19zdGF0aWMocGVlcik7CisgCQkJd2dfbm9pc2VfZXhwaXJlX2N1cnJlbnRfcGVlcl9rZXlwYWlycyhwZWVyKTsKKyAJCX0KKyAJCXdnX2Nvb2tpZV9jaGVja2VyX3ByZWNvbXB1dGVfZGV2aWNlX2tleXMoJndnLT5jb29raWVfY2hlY2tlcik7CistLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvbm9pc2UuYworKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL25vaXNlLmMKK0BAIC00NCwzMiArNDQsMjMgQEAgdm9pZCBfX2luaXQgd2dfbm9pc2VfaW5pdCh2b2lkKQorIH0KKyAKKyAvKiBNdXN0IGhvbGQgcGVlci0+aGFuZHNoYWtlLnN0YXRpY19pZGVudGl0eS0+bG9jayAqLworLWJvb2wgd2dfbm9pc2VfcHJlY29tcHV0ZV9zdGF0aWNfc3RhdGljKHN0cnVjdCB3Z19wZWVyICpwZWVyKQorK3ZvaWQgd2dfbm9pc2VfcHJlY29tcHV0ZV9zdGF0aWNfc3RhdGljKHN0cnVjdCB3Z19wZWVyICpwZWVyKQorIHsKKy0JYm9vbCByZXQ7CistCisgCWRvd25fd3JpdGUoJnBlZXItPmhhbmRzaGFrZS5sb2NrKTsKKy0JaWYgKHBlZXItPmhhbmRzaGFrZS5zdGF0aWNfaWRlbnRpdHktPmhhc19pZGVudGl0eSkgeworLQkJcmV0ID0gY3VydmUyNTUxOSgKKy0JCQlwZWVyLT5oYW5kc2hha2UucHJlY29tcHV0ZWRfc3RhdGljX3N0YXRpYywKKysJaWYgKCFwZWVyLT5oYW5kc2hha2Uuc3RhdGljX2lkZW50aXR5LT5oYXNfaWRlbnRpdHkgfHwKKysJICAgICFjdXJ2ZTI1NTE5KHBlZXItPmhhbmRzaGFrZS5wcmVjb21wdXRlZF9zdGF0aWNfc3RhdGljLAorIAkJCXBlZXItPmhhbmRzaGFrZS5zdGF0aWNfaWRlbnRpdHktPnN0YXRpY19wcml2YXRlLAorLQkJCXBlZXItPmhhbmRzaGFrZS5yZW1vdGVfc3RhdGljKTsKKy0JfSBlbHNlIHsKKy0JCXU4IGVtcHR5W05PSVNFX1BVQkxJQ19LRVlfTEVOXSA9IHsgMCB9OworLQorLQkJcmV0ID0gY3VydmUyNTUxOShlbXB0eSwgZW1wdHksIHBlZXItPmhhbmRzaGFrZS5yZW1vdGVfc3RhdGljKTsKKysJCQlwZWVyLT5oYW5kc2hha2UucmVtb3RlX3N0YXRpYykpCisgCQltZW1zZXQocGVlci0+aGFuZHNoYWtlLnByZWNvbXB1dGVkX3N0YXRpY19zdGF0aWMsIDAsCisgCQkgICAgICAgTk9JU0VfUFVCTElDX0tFWV9MRU4pOworLQl9CisgCXVwX3dyaXRlKCZwZWVyLT5oYW5kc2hha2UubG9jayk7CistCXJldHVybiByZXQ7CisgfQorIAorLWJvb2wgd2dfbm9pc2VfaGFuZHNoYWtlX2luaXQoc3RydWN0IG5vaXNlX2hhbmRzaGFrZSAqaGFuZHNoYWtlLAorLQkJCSAgIHN0cnVjdCBub2lzZV9zdGF0aWNfaWRlbnRpdHkgKnN0YXRpY19pZGVudGl0eSwKKy0JCQkgICBjb25zdCB1OCBwZWVyX3B1YmxpY19rZXlbTk9JU0VfUFVCTElDX0tFWV9MRU5dLAorLQkJCSAgIGNvbnN0IHU4IHBlZXJfcHJlc2hhcmVkX2tleVtOT0lTRV9TWU1NRVRSSUNfS0VZX0xFTl0sCistCQkJICAgc3RydWN0IHdnX3BlZXIgKnBlZXIpCisrdm9pZCB3Z19ub2lzZV9oYW5kc2hha2VfaW5pdChzdHJ1Y3Qgbm9pc2VfaGFuZHNoYWtlICpoYW5kc2hha2UsCisrCQkJICAgICBzdHJ1Y3Qgbm9pc2Vfc3RhdGljX2lkZW50aXR5ICpzdGF0aWNfaWRlbnRpdHksCisrCQkJICAgICBjb25zdCB1OCBwZWVyX3B1YmxpY19rZXlbTk9JU0VfUFVCTElDX0tFWV9MRU5dLAorKwkJCSAgICAgY29uc3QgdTggcGVlcl9wcmVzaGFyZWRfa2V5W05PSVNFX1NZTU1FVFJJQ19LRVlfTEVOXSwKKysJCQkgICAgIHN0cnVjdCB3Z19wZWVyICpwZWVyKQorIHsKKyAJbWVtc2V0KGhhbmRzaGFrZSwgMCwgc2l6ZW9mKCpoYW5kc2hha2UpKTsKKyAJaW5pdF9yd3NlbSgmaGFuZHNoYWtlLT5sb2NrKTsKK0BAIC04MSw3ICs3Miw3IEBAIGJvb2wgd2dfbm9pc2VfaGFuZHNoYWtlX2luaXQoc3RydWN0IG5vaXMKKyAJCSAgICAgICBOT0lTRV9TWU1NRVRSSUNfS0VZX0xFTik7CisgCWhhbmRzaGFrZS0+c3RhdGljX2lkZW50aXR5ID0gc3RhdGljX2lkZW50aXR5OworIAloYW5kc2hha2UtPnN0YXRlID0gSEFORFNIQUtFX1pFUk9FRDsKKy0JcmV0dXJuIHdnX25vaXNlX3ByZWNvbXB1dGVfc3RhdGljX3N0YXRpYyhwZWVyKTsKKysJd2dfbm9pc2VfcHJlY29tcHV0ZV9zdGF0aWNfc3RhdGljKHBlZXIpOworIH0KKyAKKyBzdGF0aWMgdm9pZCBoYW5kc2hha2VfemVybyhzdHJ1Y3Qgbm9pc2VfaGFuZHNoYWtlICpoYW5kc2hha2UpCitAQCAtNDAzLDYgKzM5NCwxOSBAQCBzdGF0aWMgYm9vbCBfX211c3RfY2hlY2sgbWl4X2RoKHU4IGNoYWluCisgCXJldHVybiB0cnVlOworIH0KKyAKKytzdGF0aWMgYm9vbCBfX211c3RfY2hlY2sgbWl4X3ByZWNvbXB1dGVkX2RoKHU4IGNoYWluaW5nX2tleVtOT0lTRV9IQVNIX0xFTl0sCisrCQkJCQkgICAgdTgga2V5W05PSVNFX1NZTU1FVFJJQ19LRVlfTEVOXSwKKysJCQkJCSAgICBjb25zdCB1OCBwcmVjb21wdXRlZFtOT0lTRV9QVUJMSUNfS0VZX0xFTl0pCisreworKwlzdGF0aWMgdTggemVyb19wb2ludFtOT0lTRV9QVUJMSUNfS0VZX0xFTl07CisrCWlmICh1bmxpa2VseSghY3J5cHRvX21lbW5lcShwcmVjb21wdXRlZCwgemVyb19wb2ludCwgTk9JU0VfUFVCTElDX0tFWV9MRU4pKSkKKysJCXJldHVybiBmYWxzZTsKKysJa2RmKGNoYWluaW5nX2tleSwga2V5LCBOVUxMLCBwcmVjb21wdXRlZCwgTk9JU0VfSEFTSF9MRU4sCisrCSAgICBOT0lTRV9TWU1NRVRSSUNfS0VZX0xFTiwgMCwgTk9JU0VfUFVCTElDX0tFWV9MRU4sCisrCSAgICBjaGFpbmluZ19rZXkpOworKwlyZXR1cm4gdHJ1ZTsKKyt9CisrCisgc3RhdGljIHZvaWQgbWl4X2hhc2godTggaGFzaFtOT0lTRV9IQVNIX0xFTl0sIGNvbnN0IHU4ICpzcmMsIHNpemVfdCBzcmNfbGVuKQorIHsKKyAJc3RydWN0IGJsYWtlMnNfc3RhdGUgYmxha2U7CitAQCAtNTMxLDEwICs1MzUsOSBAQCB3Z19ub2lzZV9oYW5kc2hha2VfY3JlYXRlX2luaXRpYXRpb24oc3RyCisgCQkJTk9JU0VfUFVCTElDX0tFWV9MRU4sIGtleSwgaGFuZHNoYWtlLT5oYXNoKTsKKyAKKyAJLyogc3MgKi8KKy0Ja2RmKGhhbmRzaGFrZS0+Y2hhaW5pbmdfa2V5LCBrZXksIE5VTEwsCistCSAgICBoYW5kc2hha2UtPnByZWNvbXB1dGVkX3N0YXRpY19zdGF0aWMsIE5PSVNFX0hBU0hfTEVOLAorLQkgICAgTk9JU0VfU1lNTUVUUklDX0tFWV9MRU4sIDAsIE5PSVNFX1BVQkxJQ19LRVlfTEVOLAorLQkgICAgaGFuZHNoYWtlLT5jaGFpbmluZ19rZXkpOworKwlpZiAoIW1peF9wcmVjb21wdXRlZF9kaChoYW5kc2hha2UtPmNoYWluaW5nX2tleSwga2V5LAorKwkJCQloYW5kc2hha2UtPnByZWNvbXB1dGVkX3N0YXRpY19zdGF0aWMpKQorKwkJZ290byBvdXQ7CisgCisgCS8qIHt0fSAqLworIAl0YWk2NG5fbm93KHRpbWVzdGFtcCk7CitAQCAtNTk1LDkgKzU5OCw5IEBAIHdnX25vaXNlX2hhbmRzaGFrZV9jb25zdW1lX2luaXRpYXRpb24oc3QKKyAJaGFuZHNoYWtlID0gJnBlZXItPmhhbmRzaGFrZTsKKyAKKyAJLyogc3MgKi8KKy0Ja2RmKGNoYWluaW5nX2tleSwga2V5LCBOVUxMLCBoYW5kc2hha2UtPnByZWNvbXB1dGVkX3N0YXRpY19zdGF0aWMsCistCSAgICBOT0lTRV9IQVNIX0xFTiwgTk9JU0VfU1lNTUVUUklDX0tFWV9MRU4sIDAsIE5PSVNFX1BVQkxJQ19LRVlfTEVOLAorLQkgICAgY2hhaW5pbmdfa2V5KTsKKysJaWYgKCFtaXhfcHJlY29tcHV0ZWRfZGgoY2hhaW5pbmdfa2V5LCBrZXksCisrCQkJCWhhbmRzaGFrZS0+cHJlY29tcHV0ZWRfc3RhdGljX3N0YXRpYykpCisrCSAgICBnb3RvIG91dDsKKyAKKyAJLyoge3R9ICovCisgCWlmICghbWVzc2FnZV9kZWNyeXB0KHQsIHNyYy0+ZW5jcnlwdGVkX3RpbWVzdGFtcCwKKy0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9ub2lzZS5oCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvbm9pc2UuaAorQEAgLTk0LDExICs5NCwxMSBAQCBzdHJ1Y3Qgbm9pc2VfaGFuZHNoYWtlIHsKKyBzdHJ1Y3Qgd2dfZGV2aWNlOworIAorIHZvaWQgd2dfbm9pc2VfaW5pdCh2b2lkKTsKKy1ib29sIHdnX25vaXNlX2hhbmRzaGFrZV9pbml0KHN0cnVjdCBub2lzZV9oYW5kc2hha2UgKmhhbmRzaGFrZSwKKy0JCQkgICBzdHJ1Y3Qgbm9pc2Vfc3RhdGljX2lkZW50aXR5ICpzdGF0aWNfaWRlbnRpdHksCistCQkJICAgY29uc3QgdTggcGVlcl9wdWJsaWNfa2V5W05PSVNFX1BVQkxJQ19LRVlfTEVOXSwKKy0JCQkgICBjb25zdCB1OCBwZWVyX3ByZXNoYXJlZF9rZXlbTk9JU0VfU1lNTUVUUklDX0tFWV9MRU5dLAorLQkJCSAgIHN0cnVjdCB3Z19wZWVyICpwZWVyKTsKKyt2b2lkIHdnX25vaXNlX2hhbmRzaGFrZV9pbml0KHN0cnVjdCBub2lzZV9oYW5kc2hha2UgKmhhbmRzaGFrZSwKKysJCQkgICAgIHN0cnVjdCBub2lzZV9zdGF0aWNfaWRlbnRpdHkgKnN0YXRpY19pZGVudGl0eSwKKysJCQkgICAgIGNvbnN0IHU4IHBlZXJfcHVibGljX2tleVtOT0lTRV9QVUJMSUNfS0VZX0xFTl0sCisrCQkJICAgICBjb25zdCB1OCBwZWVyX3ByZXNoYXJlZF9rZXlbTk9JU0VfU1lNTUVUUklDX0tFWV9MRU5dLAorKwkJCSAgICAgc3RydWN0IHdnX3BlZXIgKnBlZXIpOworIHZvaWQgd2dfbm9pc2VfaGFuZHNoYWtlX2NsZWFyKHN0cnVjdCBub2lzZV9oYW5kc2hha2UgKmhhbmRzaGFrZSk7Cisgc3RhdGljIGlubGluZSB2b2lkIHdnX25vaXNlX3Jlc2V0X2xhc3Rfc2VudF9oYW5kc2hha2UoYXRvbWljNjRfdCAqaGFuZHNoYWtlX25zKQorIHsKK0BAIC0xMTYsNyArMTE2LDcgQEAgdm9pZCB3Z19ub2lzZV9leHBpcmVfY3VycmVudF9wZWVyX2tleXBhaQorIHZvaWQgd2dfbm9pc2Vfc2V0X3N0YXRpY19pZGVudGl0eV9wcml2YXRlX2tleSgKKyAJc3RydWN0IG5vaXNlX3N0YXRpY19pZGVudGl0eSAqc3RhdGljX2lkZW50aXR5LAorIAljb25zdCB1OCBwcml2YXRlX2tleVtOT0lTRV9QVUJMSUNfS0VZX0xFTl0pOworLWJvb2wgd2dfbm9pc2VfcHJlY29tcHV0ZV9zdGF0aWNfc3RhdGljKHN0cnVjdCB3Z19wZWVyICpwZWVyKTsKKyt2b2lkIHdnX25vaXNlX3ByZWNvbXB1dGVfc3RhdGljX3N0YXRpYyhzdHJ1Y3Qgd2dfcGVlciAqcGVlcik7CisgCisgYm9vbAorIHdnX25vaXNlX2hhbmRzaGFrZV9jcmVhdGVfaW5pdGlhdGlvbihzdHJ1Y3QgbWVzc2FnZV9oYW5kc2hha2VfaW5pdGlhdGlvbiAqZHN0LAorLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYworKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYworQEAgLTM0LDExICszNCw4IEBAIHN0cnVjdCB3Z19wZWVyICp3Z19wZWVyX2NyZWF0ZShzdHJ1Y3Qgd2cKKyAJCXJldHVybiBFUlJfUFRSKHJldCk7CisgCXBlZXItPmRldmljZSA9IHdnOworIAorLQlpZiAoIXdnX25vaXNlX2hhbmRzaGFrZV9pbml0KCZwZWVyLT5oYW5kc2hha2UsICZ3Zy0+c3RhdGljX2lkZW50aXR5LAorLQkJCQkgICAgIHB1YmxpY19rZXksIHByZXNoYXJlZF9rZXksIHBlZXIpKSB7CistCQlyZXQgPSAtRUtFWVJFSkVDVEVEOworLQkJZ290byBlcnJfMTsKKy0JfQorKwl3Z19ub2lzZV9oYW5kc2hha2VfaW5pdCgmcGVlci0+aGFuZHNoYWtlLCAmd2ctPnN0YXRpY19pZGVudGl0eSwKKysJCQkJcHVibGljX2tleSwgcHJlc2hhcmVkX2tleSwgcGVlcik7CisgCWlmIChkc3RfY2FjaGVfaW5pdCgmcGVlci0+ZW5kcG9pbnRfY2FjaGUsIEdGUF9LRVJORUwpKQorIAkJZ290byBlcnJfMTsKKyAJaWYgKHdnX3BhY2tldF9xdWV1ZV9pbml0KCZwZWVyLT50eF9xdWV1ZSwgd2dfcGFja2V0X3R4X3dvcmtlciwgZmFsc2UsCistLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvbmV0bnMuc2gKKysrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9uZXRucy5zaAorQEAgLTUyNywxMSArNTI3LDE2IEBAIG4wIHdnIHNldCB3ZzAgcGVlciAiJHB1YjIiIGFsbG93ZWQtaXBzIDAKKyBuMCB3ZyBzZXQgd2cwIHBlZXIgIiRwdWIyIiBhbGxvd2VkLWlwcyA6Oi8wLDE3MDA6Oi8xMTEsNTAwMDo6LzQsZTAwMDo6LzM3LDkwMDA6Oi83NQorIG4wIHdnIHNldCB3ZzAgcGVlciAiJHB1YjIiIGFsbG93ZWQtaXBzIDo6LzAKKyBuMCB3ZyBzZXQgd2cwIHBlZXIgIiRwdWIyIiByZW1vdmUKKy1sb3dfb3JkZXJfcG9pbnRzPSggQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQT0gQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQT0gNE90NmZEdEJ1SzRXVnVQNjhaL0VhdG9KamV1Y01ySDlobUlGRmw5SnVBQT0gWDV5VnZLTlFqQ1N4MExGVm5JUHZXd1JFWE1SWUhJNkcyQ0pPM2RDZkVWYz0gN1AvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8zOD0gN2YvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8zOD0gN3YvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8zOD0gKQorLW4wIHdnIHNldCB3ZzAgcHJpdmF0ZS1rZXkgL2Rldi9udWxsICR7bG93X29yZGVyX3BvaW50c1tAXS8jL3BlZXIgfQorLVtbIC16ICQobjAgd2cgc2hvdyB3ZzAgcGVlcnMpIF1dCistbjAgd2cgc2V0IHdnMCBwcml2YXRlLWtleSA8KGVjaG8gIiRrZXkxIikgJHtsb3dfb3JkZXJfcG9pbnRzW0BdLyMvcGVlciB9CistW1sgLXogJChuMCB3ZyBzaG93IHdnMCBwZWVycykgXV0KKytmb3IgbG93X29yZGVyX3BvaW50IGluIEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE9IEFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE9IDRPdDZmRHRCdUs0V1Z1UDY4Wi9FYXRvSmpldWNNckg5aG1JRkZsOUp1QUE9IFg1eVZ2S05RakNTeDBMRlZuSVB2V3dSRVhNUllISTZHMkNKTzNkQ2ZFVmM9IDdQLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vMzg9IDdmLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vMzg9IDd2Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vMzg9OyBkbworKwluMCB3ZyBzZXQgd2cwIHBlZXIgIiRsb3dfb3JkZXJfcG9pbnQiIHBlcnNpc3RlbnQta2VlcGFsaXZlIDEgZW5kcG9pbnQgMTI3LjAuMC4xOjExMTEKKytkb25lCisrW1sgLW4gJChuMCB3ZyBzaG93IHdnMCBwZWVycykgXV0KKytleGVjIDQ8IDwobjAgbmNhdCAtbCAtdSAtcCAxMTExKQorK25jYXRfcGlkPSQhCisrd2FpdG5jYXR1ZHAgJG5ldG5zMCAkbmNhdF9waWQKKytpcDAgbGluayBzZXQgd2cwIHVwCisrISByZWFkIC1yIC1uIDEgLXQgMiA8JjQgfHwgZmFsc2UKKytraWxsICRuY2F0X3BpZAorIGlwMCBsaW5rIGRlbCB3ZzAKKyAKKyBkZWNsYXJlIC1BIG9iamVjdHMKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwOTQtd2lyZWd1YXJkLXNlbmQtcmVtb3ZlLWVycmFudC1uZXdsaW5lLWZyb20tcGFja2V0X2VuYy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwOTQtd2lyZWd1YXJkLXNlbmQtcmVtb3ZlLWVycmFudC1uZXdsaW5lLWZyb20tcGFja2V0X2VuYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTJiNmE3Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA5NC13aXJlZ3VhcmQtc2VuZC1yZW1vdmUtZXJyYW50LW5ld2xpbmUtZnJvbS1wYWNrZXRfZW5jLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFN1bHRhbiBBbHNhd2FmIDxzdWx0YW5Aa2VybmVsdG9hc3QuY29tPgorRGF0ZTogV2VkLCAyOSBBcHIgMjAyMCAxNDo1OToyMCAtMDYwMAorU3ViamVjdDogW1BBVENIXSB3aXJlZ3VhcmQ6IHNlbmQ6IHJlbW92ZSBlcnJhbnQgbmV3bGluZSBmcm9tCisgcGFja2V0X2VuY3J5cHRfd29ya2VyCisKK2NvbW1pdCBkNjgzM2U0Mjc4NmUwNTBlNzUyMmQ2YTkxYTkzNjFlNTQwODU4OTdkIHVwc3RyZWFtLgorCitUaGlzIGNvbW1pdCByZW1vdmVzIGEgdXNlbGVzcyBuZXdsaW5lIGF0IHRoZSBlbmQgb2YgYSBzY29wZSwgd2hpY2gKK2RvZXNuJ3QgYWRkIGFueXRoaW5nIGluIHRoZSB3YXkgb2Ygb3JnYW5pemF0aW9uIG9yIHJlYWRhYmlsaXR5LgorCitTaWduZWQtb2ZmLWJ5OiBTdWx0YW4gQWxzYXdhZiA8c3VsdGFuQGtlcm5lbHRvYXN0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorU2lnbmVkLW9mZi1ieTogRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jIHwgMSAtCisgMSBmaWxlIGNoYW5nZWQsIDEgZGVsZXRpb24oLSkKKworLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYworKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYworQEAgLTMwNCw3ICszMDQsNiBAQCB2b2lkIHdnX3BhY2tldF9lbmNyeXB0X3dvcmtlcihzdHJ1Y3Qgd29yCisgCQl9CisgCQl3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyKCZQQUNLRVRfUEVFUihmaXJzdCktPnR4X3F1ZXVlLCBmaXJzdCwKKyAJCQkJCSAgc3RhdGUpOworLQorIAl9CisgfQorIApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA5NS13aXJlZ3VhcmQtcXVldWVpbmctY2xlYW51cC1wdHJfcmluZy1pbi1lcnJvci1wYXRoLW9mLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA5NS13aXJlZ3VhcmQtcXVldWVpbmctY2xlYW51cC1wdHJfcmluZy1pbi1lcnJvci1wYXRoLW9mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MmM1MDkKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDk1LXdpcmVndWFyZC1xdWV1ZWluZy1jbGVhbnVwLXB0cl9yaW5nLWluLWVycm9yLXBhdGgtb2YucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIkphc29uIEEuIERvbmVuZmVsZCIgPEphc29uQHp4MmM0LmNvbT4KK0RhdGU6IFdlZCwgMjkgQXByIDIwMjAgMTQ6NTk6MjEgLTA2MDAKK1N1YmplY3Q6IFtQQVRDSF0gd2lyZWd1YXJkOiBxdWV1ZWluZzogY2xlYW51cCBwdHJfcmluZyBpbiBlcnJvciBwYXRoIG9mCisgcGFja2V0X3F1ZXVlX2luaXQKKworY29tbWl0IDEzMGM1ODYwNjE3MTMyNmM4MTg0MWE0OWNjOTEzY2QzNTQxMTNkZDkgdXBzdHJlYW0uCisKK1ByaW9yLCBpZiB0aGUgYWxsb2NfcGVyY3B1IG9mIHBhY2tldF9wZXJjcHVfbXVsdGljb3JlX3dvcmtlcl9hbGxvYworZmFpbGVkLCB0aGUgcHJldmlvdXNseSBhbGxvY2F0ZWQgcHRyX3Jpbmcgd291bGRuJ3QgYmUgZnJlZWQuIFRoaXMgY29tbWl0CithZGRzIHRoZSBtaXNzaW5nIGNhbGwgdG8gcHRyX3JpbmdfY2xlYW51cCBpbiB0aGUgZXJyb3IgY2FzZS4KKworUmVwb3J0ZWQtYnk6IFN1bHRhbiBBbHNhd2FmIDxzdWx0YW5Aa2VybmVsdG9hc3QuY29tPgorRml4ZXM6IGU3MDk2YzEzMWU1MSAoIm5ldDogV2lyZUd1YXJkIHNlY3VyZSBuZXR3b3JrIHR1bm5lbCIpCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmMgfCA0ICsrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5jCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuYworQEAgLTM1LDggKzM1LDEwIEBAIGludCB3Z19wYWNrZXRfcXVldWVfaW5pdChzdHJ1Y3QgY3J5cHRfcXUKKyAJCWlmIChtdWx0aWNvcmUpIHsKKyAJCQlxdWV1ZS0+d29ya2VyID0gd2dfcGFja2V0X3BlcmNwdV9tdWx0aWNvcmVfd29ya2VyX2FsbG9jKAorIAkJCQlmdW5jdGlvbiwgcXVldWUpOworLQkJCWlmICghcXVldWUtPndvcmtlcikKKysJCQlpZiAoIXF1ZXVlLT53b3JrZXIpIHsKKysJCQkJcHRyX3JpbmdfY2xlYW51cCgmcXVldWUtPnJpbmcsIE5VTEwpOworIAkJCQlyZXR1cm4gLUVOT01FTTsKKysJCQl9CisgCQl9IGVsc2UgeworIAkJCUlOSVRfV09SSygmcXVldWUtPndvcmssIGZ1bmN0aW9uKTsKKyAJCX0KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwOTYtd2lyZWd1YXJkLXJlY2VpdmUtdXNlLXR1bm5lbC1oZWxwZXJzLWZvci1kZWNhcHN1bGF0aS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwOTYtd2lyZWd1YXJkLXJlY2VpdmUtdXNlLXR1bm5lbC1oZWxwZXJzLWZvci1kZWNhcHN1bGF0aS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzIzNThjCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA5Ni13aXJlZ3VhcmQtcmVjZWl2ZS11c2UtdHVubmVsLWhlbHBlcnMtZm9yLWRlY2Fwc3VsYXRpLnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9Ub2tlPTIwSD1DMz1COGlsYW5kLUo9QzM9QjhyZ2Vuc2VuPz0gPHRva2VAcmVkaGF0LmNvbT4KK0RhdGU6IFdlZCwgMjkgQXByIDIwMjAgMTQ6NTk6MjIgLTA2MDAKK1N1YmplY3Q6IFtQQVRDSF0gd2lyZWd1YXJkOiByZWNlaXZlOiB1c2UgdHVubmVsIGhlbHBlcnMgZm9yIGRlY2Fwc3VsYXRpbmcgRUNOCisgbWFya2luZ3MKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworY29tbWl0IGVlYmFiY2IyNmVhMWUzMjk1NzA0NDc3YzZjZDRlNzcyYzk2YTk1NTkgdXBzdHJlYW0uCisKK1dpcmVHdWFyZCBjdXJyZW50bHkgb25seSBwcm9wYWdhdGVzIEVDTiBtYXJraW5ncyBvbiB0dW5uZWwgZGVjYXAgYWNjb3JkaW5nCit0byB0aGUgb2xkIFJGQzMxNjggc3BlY2lmaWNhdGlvbi4gSG93ZXZlciwgdGhlIHNwZWMgaGFzIHNpbmNlIGJlZW4gdXBkYXRlZAoraW4gUkZDNjA0MCB0byByZWNvbW1lbmQgc2xpZ2h0bHkgZGlmZmVyZW50IGRlY2Fwc3VsYXRpb24gc2VtYW50aWNzLiBUaGlzCit3YXMgaW1wbGVtZW50ZWQgaW4gdGhlIGtlcm5lbCBhcyBhIHNldCBvZiBjb21tb24gaGVscGVycyBmb3IgRUNOCitkZWNhcHN1bGF0aW9uLCBzbyBsZXQncyBqdXN0IHN3aXRjaCBvdmVyIFdpcmVHdWFyZCB0byB1c2luZyB0aG9zZSwgc28gaXQKK2NhbiBiZW5lZml0IGZyb20gdGhpcyBlbmhhbmNlbWVudCBhbmQgYW55IGZ1dHVyZSB0d2Vha3MuIFdlIGRvIG5vdCBkcm9wCitwYWNrZXRzIHdpdGggaW52YWxpZCBFQ04gbWFya2luZyBjb21iaW5hdGlvbnMsIGJlY2F1c2UgV2lyZUd1YXJkIGlzCitmcmVxdWVudGx5IHVzZWQgdG8gd29yayBhcm91bmQgYnJva2VuIElTUHMsIHdoaWNoIGNvdWxkIGJlIGRvaW5nIHRoYXQuCisKK0ZpeGVzOiBlNzA5NmMxMzFlNTEgKCJuZXQ6IFdpcmVHdWFyZCBzZWN1cmUgbmV0d29yayB0dW5uZWwiKQorUmVwb3J0ZWQtYnk6IE9saXZpZXIgVGlsbWFucyA8b2xpdmllci50aWxtYW5zQG5va2lhLWJlbGwtbGFicy5jb20+CitDYzogRGF2ZSBUYWh0IDxkYXZlLnRhaHRAZ21haWwuY29tPgorQ2M6IFJvZG5leSBXLiBHcmltZXMgPGlldGZAZ25kcnNoLmRuc21nci5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBUb2tlIEjDuGlsYW5kLUrDuHJnZW5zZW4gPHRva2VAcmVkaGF0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorU2lnbmVkLW9mZi1ieTogRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jIHwgNiArKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCistLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jCitAQCAtMzkzLDEzICszOTMsMTEgQEAgc3RhdGljIHZvaWQgd2dfcGFja2V0X2NvbnN1bWVfZGF0YV9kb25lKAorIAkJbGVuID0gbnRvaHMoaXBfaGRyKHNrYiktPnRvdF9sZW4pOworIAkJaWYgKHVubGlrZWx5KGxlbiA8IHNpemVvZihzdHJ1Y3QgaXBoZHIpKSkKKyAJCQlnb3RvIGRpc2hvbmVzdF9wYWNrZXRfc2l6ZTsKKy0JCWlmIChJTkVUX0VDTl9pc19jZShQQUNLRVRfQ0Ioc2tiKS0+ZHMpKQorLQkJCUlQX0VDTl9zZXRfY2UoaXBfaGRyKHNrYikpOworKwkJSU5FVF9FQ05fZGVjYXBzdWxhdGUoc2tiLCBQQUNLRVRfQ0Ioc2tiKS0+ZHMsIGlwX2hkcihza2IpLT50b3MpOworIAl9IGVsc2UgaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpIHsKKyAJCWxlbiA9IG50b2hzKGlwdjZfaGRyKHNrYiktPnBheWxvYWRfbGVuKSArCisgCQkgICAgICBzaXplb2Yoc3RydWN0IGlwdjZoZHIpOworLQkJaWYgKElORVRfRUNOX2lzX2NlKFBBQ0tFVF9DQihza2IpLT5kcykpCistCQkJSVA2X0VDTl9zZXRfY2Uoc2tiLCBpcHY2X2hkcihza2IpKTsKKysJCUlORVRfRUNOX2RlY2Fwc3VsYXRlKHNrYiwgUEFDS0VUX0NCKHNrYiktPmRzLCBpcHY2X2dldF9kc2ZpZWxkKGlwdjZfaGRyKHNrYikpKTsKKyAJfSBlbHNlIHsKKyAJCWdvdG8gZGlzaG9uZXN0X3BhY2tldF90eXBlOworIAl9CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDk3LXdpcmVndWFyZC1zZWxmdGVzdHMtdXNlLW5vcm1hbC1rZXJuZWwtc3RhY2stc2l6ZS1vbi0ucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDk3LXdpcmVndWFyZC1zZWxmdGVzdHMtdXNlLW5vcm1hbC1rZXJuZWwtc3RhY2stc2l6ZS1vbi0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ1NDNkMgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwOTctd2lyZWd1YXJkLXNlbGZ0ZXN0cy11c2Utbm9ybWFsLWtlcm5lbC1zdGFjay1zaXplLW9uLS5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogV2VkLCA2IE1heSAyMDIwIDE1OjMzOjAyIC0wNjAwCitTdWJqZWN0OiBbUEFUQ0hdIHdpcmVndWFyZDogc2VsZnRlc3RzOiB1c2Ugbm9ybWFsIGtlcm5lbCBzdGFjayBzaXplIG9uIHBwYzY0CisKK2NvbW1pdCBhMGZkN2NjODdhMDE4ZGYxYTE3ZjlkM2YwYmQ5OTRjMWYyMmM2YjM0IHVwc3RyZWFtLgorCitXaGlsZSBhdCBzb21lIHBvaW50IGl0IG1pZ2h0IGhhdmUgbWFkZSBzZW5zZSB0byBiZSBydW5uaW5nIHRoZXNlIHRlc3RzCitvbiBwcGM2NCB3aXRoIDRrIHN0YWNrcywgdGhlIGtlcm5lbCBoYXNuJ3QgYWN0dWFsbHkgdXNlZCA0ayBzdGFja3Mgb24KKzY0LWJpdCBwb3dlcnBjIGluIGEgbG9uZyB0aW1lLCBhbmQgbW9yZSBpbnRlcmVzdGluZyB0aGluZ3MgdGhhdCB3ZSB0ZXN0Citkb24ndCByZWFsbHkgd29yayB3aGVuIHdlIGRldmlhdGUgZnJvbSB0aGUgZGVmYXVsdCAoMTZrKS4gU28sIHdlIHN0b3AKK3B1c2hpbmcgb3VyIGx1Y2sgaW4gdGhpcyBjb21taXQsIGFuZCByZXR1cm4gdG8gdGhlIGRlZmF1bHQgaW5zdGVhZCBvZgordGhlIG1pbmltdW0uCisKK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorU2lnbmVkLW9mZi1ieTogRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvcWVtdS9hcmNoL3Bvd2VycGM2NGxlLmNvbmZpZyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCistLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvcWVtdS9hcmNoL3Bvd2VycGM2NGxlLmNvbmZpZworKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL3FlbXUvYXJjaC9wb3dlcnBjNjRsZS5jb25maWcKK0BAIC0xMCwzICsxMCw0IEBAIENPTkZJR19DTURMSU5FX0JPT0w9eQorIENPTkZJR19DTURMSU5FPSJjb25zb2xlPWh2YzAgd2cuc3VjY2Vzcz1odmMxIgorIENPTkZJR19TRUNUSU9OX01JU01BVENIX1dBUk5fT05MWT15CisgQ09ORklHX0ZSQU1FX1dBUk49MTI4MAorK0NPTkZJR19USFJFQURfU0hJRlQ9MTQKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwOTgtd2lyZWd1YXJkLXNvY2tldC1yZW1vdmUtZXJyYW50LXJlc3RyaWN0aW9uLW9uLWxvb3Bpbi5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwOTgtd2lyZWd1YXJkLXNvY2tldC1yZW1vdmUtZXJyYW50LXJlc3RyaWN0aW9uLW9uLWxvb3Bpbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGFmYTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDA5OC13aXJlZ3VhcmQtc29ja2V0LXJlbW92ZS1lcnJhbnQtcmVzdHJpY3Rpb24tb24tbG9vcGluLnBhdGNoCkBAIC0wLDAgKzEsMTYyIEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogV2VkLCA2IE1heSAyMDIwIDE1OjMzOjAzIC0wNjAwCitTdWJqZWN0OiBbUEFUQ0hdIHdpcmVndWFyZDogc29ja2V0OiByZW1vdmUgZXJyYW50IHJlc3RyaWN0aW9uIG9uIGxvb3BpbmcgdG8KKyBzZWxmCisKK2NvbW1pdCBiNjczZTI0YWFkMzY5ODFmMzI3YTY1NzA0MTJmZmE3NzU0ZGU4OTExIHVwc3RyZWFtLgorCitJdCdzIGFscmVhZHkgcG9zc2libGUgdG8gY3JlYXRlIHR3byBkaWZmZXJlbnQgaW50ZXJmYWNlcyBhbmQgbG9vcAorcGFja2V0cyBiZXR3ZWVuIHRoZW0uIFRoaXMgaGFzIGFsd2F5cyBiZWVuIHBvc3NpYmxlIHdpdGggdHVubmVscyBpbiB0aGUKK2tlcm5lbCwgYW5kIGlzbid0IHNwZWNpZmljIHRvIHdpcmVndWFyZC4gVGhlcmVmb3JlLCB0aGUgbmV0d29ya2luZyBzdGFjaworYWxyZWFkeSBuZWVkcyB0byBkZWFsIHdpdGggdGhhdC4gQXQgdGhlIHZlcnkgbGVhc3QsIHRoZSBwYWNrZXQgd2luZHMgdXAKK2V4Y2VlZGluZyB0aGUgTVRVIGFuZCBpcyBkaXNjYXJkZWQgYXQgdGhhdCBwb2ludC4gU28sIHNpbmNlIHRoaXMgaXMKK2FscmVhZHkgc29tZXRoaW5nIHRoYXQgaGFwcGVucywgdGhlcmUncyBubyBuZWVkIHRvIGZvcmJpZCB0aGUgbm90IHZlcnkKK2V4Y2VwdGlvbmFsIGNhc2Ugb2Ygcm91dGluZyBhIHBhY2tldCBiYWNrIHRvIHRoZSBzYW1lIGludGVyZmFjZTsgdGhpcworbG9vcCBpcyBubyBkaWZmZXJlbnQgdGhhbiBvdGhlcnMsIGFuZCB3ZSBzaG91bGRuJ3Qgc3BlY2lhbCBjYXNlIGl0LCBidXQKK3JhdGhlciByZWx5IG9uIGdlbmVyaWMgaGFuZGxpbmcgb2YgbG9vcHMgaW4gZ2VuZXJhbC4gVGhpcyBhbHNvIG1ha2VzIGl0CitlYXNpZXIgdG8gZG8gaW50ZXJlc3RpbmcgdGhpbmdzIHdpdGggd2lyZWd1YXJkIHN1Y2ggYXMgb25pb24gcm91dGluZy4KKworQXQgdGhlIHNhbWUgdGltZSwgd2UgYWRkIGEgc2VsZnRlc3QgZm9yIHRoaXMsIGVuc3VyaW5nIHRoYXQgYm90aCBvbmlvbgorcm91dGluZyB3b3JrcyBhbmQgaW5maW5pdGUgcm91dGluZyBsb29wcyBkbyBub3QgY3Jhc2ggdGhlIGtlcm5lbC4gV2UKK2Fsc28gYWRkIGEgdGVzdCBjYXNlIGZvciB3aXJlZ3VhcmQgaW50ZXJmYWNlcyBuZXN0aW5nIHBhY2tldHMgYW5kCitzZW5kaW5nIHRyYWZmaWMgYmV0d2VlbiBlYWNoIG90aGVyLCBhcyB3ZWxsIGFzIHRoZSBsb29wIGluIHRoaXMgY2FzZQordG9vLiBXZSBtYWtlIHN1cmUgdG8gc2VuZCBzb21lIHRocm91Z2hwdXQtaGVhdnkgdHJhZmZpYyBmb3IgdGhpcyB1c2UKK2Nhc2UsIHRvIHN0cmVzcyBvdXQgYW55IHBvc3NpYmxlIHJlY3Vyc2lvbiBpc3N1ZXMgd2l0aCB0aGUgbG9ja3MgYXJvdW5kCit3b3JrcXVldWVzLgorCitGaXhlczogZTcwOTZjMTMxZTUxICgibmV0OiBXaXJlR3VhcmQgc2VjdXJlIG5ldHdvcmsgdHVubmVsIikKK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorU2lnbmVkLW9mZi1ieTogRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvc29ja2V0LmMgICAgICAgICAgICAgfCAxMiAtLS0tLQorIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9uZXRucy5zaCB8IDU0ICsrKysrKysrKysrKysrKysrKysrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDUxIGluc2VydGlvbnMoKyksIDE1IGRlbGV0aW9ucygtKQorCistLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvc29ja2V0LmMKKysrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9zb2NrZXQuYworQEAgLTc2LDEyICs3Niw2IEBAIHN0YXRpYyBpbnQgc2VuZDQoc3RydWN0IHdnX2RldmljZSAqd2csIHMKKyAJCQluZXRfZGJnX3JhdGVsaW1pdGVkKCIlczogTm8gcm91dGUgdG8gJXBJU3Bmc2MsIGVycm9yICVkXG4iLAorIAkJCQkJICAgIHdnLT5kZXYtPm5hbWUsICZlbmRwb2ludC0+YWRkciwgcmV0KTsKKyAJCQlnb3RvIGVycjsKKy0JCX0gZWxzZSBpZiAodW5saWtlbHkocnQtPmRzdC5kZXYgPT0gc2tiLT5kZXYpKSB7CistCQkJaXBfcnRfcHV0KHJ0KTsKKy0JCQlyZXQgPSAtRUxPT1A7CistCQkJbmV0X2RiZ19yYXRlbGltaXRlZCgiJXM6IEF2b2lkaW5nIHJvdXRpbmcgbG9vcCB0byAlcElTcGZzY1xuIiwKKy0JCQkJCSAgICB3Zy0+ZGV2LT5uYW1lLCAmZW5kcG9pbnQtPmFkZHIpOworLQkJCWdvdG8gZXJyOworIAkJfQorIAkJaWYgKGNhY2hlKQorIAkJCWRzdF9jYWNoZV9zZXRfaXA0KGNhY2hlLCAmcnQtPmRzdCwgZmwuc2FkZHIpOworQEAgLTE0OSwxMiArMTQzLDYgQEAgc3RhdGljIGludCBzZW5kNihzdHJ1Y3Qgd2dfZGV2aWNlICp3ZywgcworIAkJCW5ldF9kYmdfcmF0ZWxpbWl0ZWQoIiVzOiBObyByb3V0ZSB0byAlcElTcGZzYywgZXJyb3IgJWRcbiIsCisgCQkJCQkgICAgd2ctPmRldi0+bmFtZSwgJmVuZHBvaW50LT5hZGRyLCByZXQpOworIAkJCWdvdG8gZXJyOworLQkJfSBlbHNlIGlmICh1bmxpa2VseShkc3QtPmRldiA9PSBza2ItPmRldikpIHsKKy0JCQlkc3RfcmVsZWFzZShkc3QpOworLQkJCXJldCA9IC1FTE9PUDsKKy0JCQluZXRfZGJnX3JhdGVsaW1pdGVkKCIlczogQXZvaWRpbmcgcm91dGluZyBsb29wIHRvICVwSVNwZnNjXG4iLAorLQkJCQkJICAgIHdnLT5kZXYtPm5hbWUsICZlbmRwb2ludC0+YWRkcik7CistCQkJZ290byBlcnI7CisgCQl9CisgCQlpZiAoY2FjaGUpCisgCQkJZHN0X2NhY2hlX3NldF9pcDYoY2FjaGUsIGRzdCwgJmZsLnNhZGRyKTsKKy0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9uZXRucy5zaAorKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL25ldG5zLnNoCitAQCAtNDgsOCArNDgsMTEgQEAgY2xlYW51cCgpIHsKKyAJZXhlYyAyPi9kZXYvbnVsbAorIAlwcmludGYgIiRvcmlnX21lc3NhZ2VfY29zdCIgPiAvcHJvYy9zeXMvbmV0L2NvcmUvbWVzc2FnZV9jb3N0CisgCWlwMCBsaW5rIGRlbCBkZXYgd2cwCisrCWlwMCBsaW5rIGRlbCBkZXYgd2cxCisgCWlwMSBsaW5rIGRlbCBkZXYgd2cwCisrCWlwMSBsaW5rIGRlbCBkZXYgd2cxCisgCWlwMiBsaW5rIGRlbCBkZXYgd2cwCisrCWlwMiBsaW5rIGRlbCBkZXYgd2cxCisgCWxvY2FsIHRvX2tpbGw9IiQoaXAgbmV0bnMgcGlkcyAkbmV0bnMwKSAkKGlwIG5ldG5zIHBpZHMgJG5ldG5zMSkgJChpcCBuZXRucyBwaWRzICRuZXRuczIpIgorIAlbWyAtbiAkdG9fa2lsbCBdXSAmJiBraWxsICR0b19raWxsCisgCXBwIGlwIG5ldG5zIGRlbCAkbmV0bnMxCitAQCAtNzcsMTggKzgwLDIwIEBAIGlwMCBsaW5rIHNldCB3ZzAgbmV0bnMgJG5ldG5zMgorIGtleTE9IiQocHAgd2cgZ2Vua2V5KSIKKyBrZXkyPSIkKHBwIHdnIGdlbmtleSkiCisga2V5Mz0iJChwcCB3ZyBnZW5rZXkpIgorK2tleTQ9IiQocHAgd2cgZ2Vua2V5KSIKKyBwdWIxPSIkKHBwIHdnIHB1YmtleSA8PDwiJGtleTEiKSIKKyBwdWIyPSIkKHBwIHdnIHB1YmtleSA8PDwiJGtleTIiKSIKKyBwdWIzPSIkKHBwIHdnIHB1YmtleSA8PDwiJGtleTMiKSIKKytwdWI0PSIkKHBwIHdnIHB1YmtleSA8PDwiJGtleTQiKSIKKyBwc2s9IiQocHAgd2cgZ2VucHNrKSIKKyBbWyAtbiAka2V5MSAmJiAtbiAka2V5MiAmJiAtbiAkcHNrIF1dCisgCisgY29uZmlndXJlX3BlZXJzKCkgeworIAlpcDEgYWRkciBhZGQgMTkyLjE2OC4yNDEuMS8yNCBkZXYgd2cwCistCWlwMSBhZGRyIGFkZCBmZDAwOjoxLzI0IGRldiB3ZzAKKysJaXAxIGFkZHIgYWRkIGZkMDA6OjEvMTEyIGRldiB3ZzAKKyAKKyAJaXAyIGFkZHIgYWRkIDE5Mi4xNjguMjQxLjIvMjQgZGV2IHdnMAorLQlpcDIgYWRkciBhZGQgZmQwMDo6Mi8yNCBkZXYgd2cwCisrCWlwMiBhZGRyIGFkZCBmZDAwOjoyLzExMiBkZXYgd2cwCisgCisgCW4xIHdnIHNldCB3ZzAgXAorIAkJcHJpdmF0ZS1rZXkgPChlY2hvICIka2V5MSIpIFwKK0BAIC0yMzAsOSArMjM1LDM4IEBAIG4xIHBpbmcgLVcgMSAtYyAxIDE5Mi4xNjguMjQxLjIKKyBuMSB3ZyBzZXQgd2cwIHByaXZhdGUta2V5IDwoZWNobyAiJGtleTMiKQorIG4yIHdnIHNldCB3ZzAgcGVlciAiJHB1YjMiIHByZXNoYXJlZC1rZXkgPChlY2hvICIkcHNrIikgYWxsb3dlZC1pcHMgMTkyLjE2OC4yNDEuMS8zMiBwZWVyICIkcHViMSIgcmVtb3ZlCisgbjEgcGluZyAtVyAxIC1jIDEgMTkyLjE2OC4yNDEuMgorK24yIHdnIHNldCB3ZzAgcGVlciAiJHB1YjMiIHJlbW92ZQorIAorLWlwMSBsaW5rIGRlbCB3ZzAKKysjIFRlc3QgdGhhdCB3ZSBjYW4gcm91dGUgd2cgdGhyb3VnaCB3ZworK2lwMSBhZGRyIGZsdXNoIGRldiB3ZzAKKytpcDIgYWRkciBmbHVzaCBkZXYgd2cwCisraXAxIGFkZHIgYWRkIGZkMDA6OjU6MS8xMTIgZGV2IHdnMAorK2lwMiBhZGRyIGFkZCBmZDAwOjo1OjIvMTEyIGRldiB3ZzAKKytuMSB3ZyBzZXQgd2cwIHByaXZhdGUta2V5IDwoZWNobyAiJGtleTEiKSBwZWVyICIkcHViMiIgcHJlc2hhcmVkLWtleSA8KGVjaG8gIiRwc2siKSBhbGxvd2VkLWlwcyBmZDAwOjo1OjIvMTI4IGVuZHBvaW50IDEyNy4wLjAuMToyCisrbjIgd2cgc2V0IHdnMCBwcml2YXRlLWtleSA8KGVjaG8gIiRrZXkyIikgbGlzdGVuLXBvcnQgMiBwZWVyICIkcHViMSIgcHJlc2hhcmVkLWtleSA8KGVjaG8gIiRwc2siKSBhbGxvd2VkLWlwcyBmZDAwOjo1OjEvMTI4IGVuZHBvaW50IDEyNy4yMTIuMTIxLjk5Ojk5OTgKKytpcDEgbGluayBhZGQgd2cxIHR5cGUgd2lyZWd1YXJkCisraXAyIGxpbmsgYWRkIHdnMSB0eXBlIHdpcmVndWFyZAorK2lwMSBhZGRyIGFkZCAxOTIuMTY4LjI0MS4xLzI0IGRldiB3ZzEKKytpcDEgYWRkciBhZGQgZmQwMDo6MS8xMTIgZGV2IHdnMQorK2lwMiBhZGRyIGFkZCAxOTIuMTY4LjI0MS4yLzI0IGRldiB3ZzEKKytpcDIgYWRkciBhZGQgZmQwMDo6Mi8xMTIgZGV2IHdnMQorK2lwMSBsaW5rIHNldCBtdHUgMTM0MCB1cCBkZXYgd2cxCisraXAyIGxpbmsgc2V0IG10dSAxMzQwIHVwIGRldiB3ZzEKKytuMSB3ZyBzZXQgd2cxIGxpc3Rlbi1wb3J0IDUgcHJpdmF0ZS1rZXkgPChlY2hvICIka2V5MyIpIHBlZXIgIiRwdWI0IiBhbGxvd2VkLWlwcyAxOTIuMTY4LjI0MS4yLzMyLGZkMDA6OjIvMTI4IGVuZHBvaW50IFtmZDAwOjo1OjJdOjUKKytuMiB3ZyBzZXQgd2cxIGxpc3Rlbi1wb3J0IDUgcHJpdmF0ZS1rZXkgPChlY2hvICIka2V5NCIpIHBlZXIgIiRwdWIzIiBhbGxvd2VkLWlwcyAxOTIuMTY4LjI0MS4xLzMyLGZkMDA6OjEvMTI4IGVuZHBvaW50IFtmZDAwOjo1OjFdOjUKKyt0ZXN0cworKyMgVHJ5IHRvIHNldCB1cCBhIHJvdXRpbmcgbG9vcCBiZXR3ZWVuIHRoZSB0d28gbmFtZXNwYWNlcworK2lwMSBsaW5rIHNldCBuZXRucyAkbmV0bnMwIGRldiB3ZzEKKytpcDAgYWRkciBhZGQgMTkyLjE2OC4yNDEuMS8yNCBkZXYgd2cxCisraXAwIGxpbmsgc2V0IHVwIGRldiB3ZzEKKytuMCBwaW5nIC1XIDEgLWMgMSAxOTIuMTY4LjI0MS4yCisrbjEgd2cgc2V0IHdnMCBwZWVyICIkcHViMiIgZW5kcG9pbnQgMTkyLjE2OC4yNDEuMjo3CisgaXAyIGxpbmsgZGVsIHdnMAorK2lwMiBsaW5rIGRlbCB3ZzEKKyshIG4wIHBpbmcgLVcgMSAtYyAxMCAtZiAxOTIuMTY4LjI0MS4yIHx8IGZhbHNlICMgU2hvdWxkIG5vdCBjcmFzaCBrZXJuZWwKKysKKytpcDAgbGluayBkZWwgd2cxCisraXAxIGxpbmsgZGVsIHdnMAorIAorICMgVGVzdCB1c2luZyBOQVQuIFdlIG5vdyBjaGFuZ2UgdGhlIHRvcG9sb2d5IHRvIHRoaXM6CisgIyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQICAgICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAKK0BAIC0yODIsNiArMzE2LDIwIEBAIHBwIHNsZWVwIDMKKyBuMiBwaW5nIC1XIDEgLWMgMSAxOTIuMTY4LjI0MS4xCisgbjEgd2cgc2V0IHdnMCBwZWVyICIkcHViMiIgcGVyc2lzdGVudC1rZWVwYWxpdmUgMAorIAorKyMgVGVzdCB0aGF0IG9uaW9uIHJvdXRpbmcgd29ya3MsIGV2ZW4gd2hlbiBpdCBsb29wcworK24xIHdnIHNldCB3ZzAgcGVlciAiJHB1YjMiIGFsbG93ZWQtaXBzIDE5Mi4xNjguMjQyLjIvMzIgZW5kcG9pbnQgMTkyLjE2OC4yNDEuMjo1CisraXAxIGFkZHIgYWRkIDE5Mi4xNjguMjQyLjEvMjQgZGV2IHdnMAorK2lwMiBsaW5rIGFkZCB3ZzEgdHlwZSB3aXJlZ3VhcmQKKytpcDIgYWRkciBhZGQgMTkyLjE2OC4yNDIuMi8yNCBkZXYgd2cxCisrbjIgd2cgc2V0IHdnMSBwcml2YXRlLWtleSA8KGVjaG8gIiRrZXkzIikgbGlzdGVuLXBvcnQgNSBwZWVyICIkcHViMSIgYWxsb3dlZC1pcHMgMTkyLjE2OC4yNDIuMS8zMgorK2lwMiBsaW5rIHNldCB3ZzEgdXAKKytuMSBwaW5nIC1XIDEgLWMgMSAxOTIuMTY4LjI0Mi4yCisraXAyIGxpbmsgZGVsIHdnMQorK24xIHdnIHNldCB3ZzAgcGVlciAiJHB1YjMiIGVuZHBvaW50IDE5Mi4xNjguMjQyLjI6NQorKyEgbjEgcGluZyAtVyAxIC1jIDEgMTkyLjE2OC4yNDIuMiB8fCBmYWxzZSAjIFNob3VsZCBub3QgY3Jhc2gga2VybmVsCisrbjEgd2cgc2V0IHdnMCBwZWVyICIkcHViMyIgcmVtb3ZlCisraXAxIGFkZHIgZGVsIDE5Mi4xNjguMjQyLjEvMjQgZGV2IHdnMAorKworICMgRG8gYSB3Zy1xdWljayg4KS1zdHlsZSBwb2xpY3kgcm91dGluZyBmb3IgdGhlIGRlZmF1bHQgcm91dGUsIG1ha2luZyBzdXJlIHZldGhjIGhhcyBhIHY2IGFkZHJlc3MgdG8gdGVhc2Ugb3V0IGJ1Z3MuCisgaXAxIC02IGFkZHIgYWRkIGZjMDA6OjkvOTYgZGV2IHZldGhjCisgaXAxIC02IHJvdXRlIGFkZCBkZWZhdWx0IHZpYSBmYzAwOjoxCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDk5LXdpcmVndWFyZC1zZW5kLXJlY2VpdmUtY29uZF9yZXNjaGVkLXdoZW4tcHJvY2Vzc2luZy0ucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMDk5LXdpcmVndWFyZC1zZW5kLXJlY2VpdmUtY29uZF9yZXNjaGVkLXdoZW4tcHJvY2Vzc2luZy0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk5YjM2YgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAwOTktd2lyZWd1YXJkLXNlbmQtcmVjZWl2ZS1jb25kX3Jlc2NoZWQtd2hlbi1wcm9jZXNzaW5nLS5wYXRjaApAQCAtMCwwICsxLDU4IEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogV2VkLCA2IE1heSAyMDIwIDE1OjMzOjA0IC0wNjAwCitTdWJqZWN0OiBbUEFUQ0hdIHdpcmVndWFyZDogc2VuZC9yZWNlaXZlOiBjb25kX3Jlc2NoZWQoKSB3aGVuIHByb2Nlc3NpbmcKKyB3b3JrZXIgcmluZ2J1ZmZlcnMKKworY29tbWl0IDQwMDVmNWMzYzlkMDA2MTU3YmE3MTY1OTRlMGQ3MGM4OGEyMzVjNWUgdXBzdHJlYW0uCisKK1VzZXJzIHdpdGggcGF0aG9sb2dpY2FsIGhhcmR3YXJlIHJlcG9ydGVkIENQVSBzdGFsbHMgb24gQ09ORklHXworUFJFRU1QVF9WT0xVTlRBUlk9eSwgYmVjYXVzZSB0aGUgcmluZ2J1ZmZlcnMgd291bGQgc3RheSBmdWxsLCBtZWFuaW5nCit0aGVzZSB3b3JrZXJzIHdvdWxkIG5ldmVyIHRlcm1pbmF0ZS4gVGhhdCB0dXJuZWQgb3V0IG5vdCB0byBiZSBva2F5IG9uCitzeXN0ZW1zIHdpdGhvdXQgZm9yY2VkIHByZWVtcHRpb24sIHdoaWNoIFN1bHRhbiBvYnNlcnZlZC4gVGhpcyBjb21taXQKK2FkZHMgYSBjb25kX3Jlc2NoZWQoKSB0byB0aGUgYm90dG9tIG9mIGVhY2ggbG9vcCBpdGVyYXRpb24sIHNvIHRoYXQKK3RoZXNlIHdvcmtlcnMgZG9uJ3QgaG9nIHRoZSBjb3JlLiBOb3RlIHRoYXQgd2UgZG9uJ3QgbmVlZCB0aGlzIG9uIHRoZQorbmFwaSBwb2xsIHdvcmtlciwgc2luY2UgdGhhdCB0ZXJtaW5hdGVzIGFmdGVyIGl0cyBidWRnZXQgaXMgZXhwZW5kZWQuCisKK1N1Z2dlc3RlZC1ieTogU3VsdGFuIEFsc2F3YWYgPHN1bHRhbkBrZXJuZWx0b2FzdC5jb20+CitSZXBvcnRlZC1ieTogV2FuZyBKaWFuIDxsYXJrd2FuZ0BnbWFpbC5jb20+CitGaXhlczogZTcwOTZjMTMxZTUxICgibmV0OiBXaXJlR3VhcmQgc2VjdXJlIG5ldHdvcmsgdHVubmVsIikKK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorU2lnbmVkLW9mZi1ieTogRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jIHwgMiArKworIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmMgICAgfCA0ICsrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKQorCistLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jCitAQCAtNTE2LDYgKzUxNiw4IEBAIHZvaWQgd2dfcGFja2V0X2RlY3J5cHRfd29ya2VyKHN0cnVjdCB3b3IKKyAJCQkJJlBBQ0tFVF9DQihza2IpLT5rZXlwYWlyLT5yZWNlaXZpbmcpKSA/CisgCQkJCVBBQ0tFVF9TVEFURV9DUllQVEVEIDogUEFDS0VUX1NUQVRFX0RFQUQ7CisgCQl3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX25hcGkoc2tiLCBzdGF0ZSk7CisrCQlpZiAobmVlZF9yZXNjaGVkKCkpCisrCQkJY29uZF9yZXNjaGVkKCk7CisgCX0KKyB9CisgCistLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jCitAQCAtMjgxLDYgKzI4MSw4IEBAIHZvaWQgd2dfcGFja2V0X3R4X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHIKKyAKKyAJCXdnX25vaXNlX2tleXBhaXJfcHV0KGtleXBhaXIsIGZhbHNlKTsKKyAJCXdnX3BlZXJfcHV0KHBlZXIpOworKwkJaWYgKG5lZWRfcmVzY2hlZCgpKQorKwkJCWNvbmRfcmVzY2hlZCgpOworIAl9CisgfQorIAorQEAgLTMwNCw2ICszMDYsOCBAQCB2b2lkIHdnX3BhY2tldF9lbmNyeXB0X3dvcmtlcihzdHJ1Y3Qgd29yCisgCQl9CisgCQl3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyKCZQQUNLRVRfUEVFUihmaXJzdCktPnR4X3F1ZXVlLCBmaXJzdCwKKyAJCQkJCSAgc3RhdGUpOworKwkJaWYgKG5lZWRfcmVzY2hlZCgpKQorKwkJCWNvbmRfcmVzY2hlZCgpOworIAl9CisgfQorIApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDEwMC13aXJlZ3VhcmQtc2VsZnRlc3RzLWluaXRhbGl6ZS1pcHY2LW1lbWJlcnMtdG8tTlVMTC10LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDEwMC13aXJlZ3VhcmQtc2VsZnRlc3RzLWluaXRhbGl6ZS1pcHY2LW1lbWJlcnMtdG8tTlVMTC10LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMTI0YmUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTAwLXdpcmVndWFyZC1zZWxmdGVzdHMtaW5pdGFsaXplLWlwdjYtbWVtYmVycy10by1OVUxMLXQucGF0Y2gKQEAgLTAsMCArMSw1MSBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIkphc29uIEEuIERvbmVuZmVsZCIgPEphc29uQHp4MmM0LmNvbT4KK0RhdGU6IFdlZCwgNiBNYXkgMjAyMCAxNTozMzowNSAtMDYwMAorU3ViamVjdDogW1BBVENIXSB3aXJlZ3VhcmQ6IHNlbGZ0ZXN0czogaW5pdGFsaXplIGlwdjYgbWVtYmVycyB0byBOVUxMIHRvCisgc3F1ZWxjaCBjbGFuZyB3YXJuaW5nCisKK2NvbW1pdCA0ZmVkODE4ZWY1NGIwOGQ0YjI5MjAwZTQxNmNjZTY1NTQ2YWQ1MzEyIHVwc3RyZWFtLgorCitXaXRob3V0IHNldHRpbmcgdGhlc2UgdG8gTlVMTCwgY2xhbmcgY29tcGxhaW5zIGluIGNlcnRhaW4KK2NvbmZpZ3VyYXRpb25zIHRoYXQgaGF2ZSBDT05GSUdfSVBWNj1uOgorCitJbiBmaWxlIGluY2x1ZGVkIGZyb20gZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JhdGVsaW1pdGVyLmM6MjIzOgorZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L3JhdGVsaW1pdGVyLmM6MTczOjM0OiBlcnJvcjogdmFyaWFibGUgJ3NrYjYnIGlzIHVuaW5pdGlhbGl6ZWQgd2hlbiB1c2VkIGhlcmUgWy1XZXJyb3IsLVd1bmluaXRpYWxpemVkXQorICAgICAgICAgICAgICAgIHJldCA9IHRpbWluZ3NfdGVzdChza2I0LCBoZHI0LCBza2I2LCBoZHI2LCAmdGVzdF9jb3VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5+fn4KK2RyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9yYXRlbGltaXRlci5jOjEyMzoyOTogbm90ZTogaW5pdGlhbGl6ZSB0aGUgdmFyaWFibGUgJ3NrYjYnIHRvIHNpbGVuY2UgdGhpcyB3YXJuaW5nCisgICAgICAgIHN0cnVjdCBza19idWZmICpza2I0LCAqc2tiNjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBOVUxMCitkcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VsZnRlc3QvcmF0ZWxpbWl0ZXIuYzoxNzM6NDA6IGVycm9yOiB2YXJpYWJsZSAnaGRyNicgaXMgdW5pbml0aWFsaXplZCB3aGVuIHVzZWQgaGVyZSBbLVdlcnJvciwtV3VuaW5pdGlhbGl6ZWRdCisgICAgICAgICAgICAgICAgcmV0ID0gdGltaW5nc190ZXN0KHNrYjQsIGhkcjQsIHNrYjYsIGhkcjYsICZ0ZXN0X2NvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXn5+fgorZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L3JhdGVsaW1pdGVyLmM6MTI1OjIyOiBub3RlOiBpbml0aWFsaXplIHRoZSB2YXJpYWJsZSAnaGRyNicgdG8gc2lsZW5jZSB0aGlzIHdhcm5pbmcKKyAgICAgICAgc3RydWN0IGlwdjZoZHIgKmhkcjY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorCitXZSBzaWxlbmNlIHRoaXMgd2FybmluZyBieSBzZXR0aW5nIHRoZSB2YXJpYWJsZXMgdG8gTlVMTCBhcyB0aGUgd2FybmluZworc3VnZ2VzdHMuCisKK1JlcG9ydGVkLWJ5OiBBcm5kIEJlcmdtYW5uIDxhcm5kQGFybmRiLmRlPgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CitTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9yYXRlbGltaXRlci5jIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L3JhdGVsaW1pdGVyLmMKKysrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9yYXRlbGltaXRlci5jCitAQCAtMTIwLDkgKzEyMCw5IEBAIGJvb2wgX19pbml0IHdnX3JhdGVsaW1pdGVyX3NlbGZ0ZXN0KHZvaWQKKyAJZW51bSB7IFRSSUFMU19CRUZPUkVfR0lWSU5HX1VQID0gNTAwMCB9OworIAlib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKyAJaW50IHRlc3QgPSAwLCB0cmlhbHM7CistCXN0cnVjdCBza19idWZmICpza2I0LCAqc2tiNjsKKysJc3RydWN0IHNrX2J1ZmYgKnNrYjQsICpza2I2ID0gTlVMTDsKKyAJc3RydWN0IGlwaGRyICpoZHI0OworLQlzdHJ1Y3QgaXB2NmhkciAqaGRyNjsKKysJc3RydWN0IGlwdjZoZHIgKmhkcjYgPSBOVUxMOworIAorIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfS0FTQU4pIHx8IElTX0VOQUJMRUQoQ09ORklHX1VCU0FOKSkKKyAJCXJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDEwMS13aXJlZ3VhcmQtc2VuZC1yZWNlaXZlLXVzZS1leHBsaWNpdC11bmxpa2VseS1icmFuY2gtLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDEwMS13aXJlZ3VhcmQtc2VuZC1yZWNlaXZlLXVzZS1leHBsaWNpdC11bmxpa2VseS1icmFuY2gtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMGUyZjIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTAxLXdpcmVndWFyZC1zZW5kLXJlY2VpdmUtdXNlLWV4cGxpY2l0LXVubGlrZWx5LWJyYW5jaC0ucGF0Y2gKQEAgLTAsMCArMSw4OCBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIkphc29uIEEuIERvbmVuZmVsZCIgPEphc29uQHp4MmM0LmNvbT4KK0RhdGU6IFdlZCwgNiBNYXkgMjAyMCAxNTozMzowNiAtMDYwMAorU3ViamVjdDogW1BBVENIXSB3aXJlZ3VhcmQ6IHNlbmQvcmVjZWl2ZTogdXNlIGV4cGxpY2l0IHVubGlrZWx5IGJyYW5jaCBpbnN0ZWFkCisgb2YgaW1wbGljaXQgY29hbGVzY2luZworCitjb21taXQgMjQzZjIxNDg5MzdhZGM3MmJjYWFhNTkwZDQ4MmQ1OTljOTM2ZWZkZSB1cHN0cmVhbS4KKworSXQncyB2ZXJ5IHVubGlrZWx5IHRoYXQgc2VuZCB3aWxsIGJlY29tZSB0cnVlLiBJdCdzIG5lYXJseSBhbHdheXMgZmFsc2UKK2JldHdlZW4gMCBhbmQgMTIwIHNlY29uZHMgb2YgYSBzZXNzaW9uLCBhbmQgaW4gbW9zdCBjYXNlcyBiZWNvbWVzIHRydWUKK29ubHkgYmV0d2VlbiAxMjAgYW5kIDEyMSBzZWNvbmRzIGJlZm9yZSBiZWNvbWluZyBmYWxzZSBhZ2Fpbi4gU28sCit1bmxpa2VseShzZW5kKSBpcyBjbGVhcmx5IHRoZSByaWdodCBvcHRpb24gaGVyZS4KKworV2hhdCBoYXBwZW5lZCBiZWZvcmUgd2FzIHRoYXQgd2UgaGFkIHRoaXMgY29tcGxleCBib29sZWFuIGV4cHJlc3Npb24KK3dpdGggbXVsdGlwbGUgbGlrZWx5IGFuZCB1bmxpa2VseSBjbGF1c2VzIG5lc3RlZC4gU2luY2UgdGhpcyBpcworZXZhbHVhdGVkIGxlZnQtdG8tcmlnaHQgYW55d2F5LCB0aGUgd2hvbGUgdGhpbmcgZ290IGNvbnZlcnRlZCB0bwordW5saWtlbHkuIFNvLCB3ZSBjYW4gY2xlYW4gdGhpcyB1cCB0byBiZXR0ZXIgcmVwcmVzZW50IHdoYXQncyBnb2luZyBvbi4KKworVGhlIGdlbmVyYXRlZCBjb2RlIGlzIHRoZSBzYW1lLgorCitTdWdnZXN0ZWQtYnk6IFN1bHRhbiBBbHNhd2FmIDxzdWx0YW5Aa2VybmVsdG9hc3QuY29tPgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CitTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMgfCAxMyArKysrKystLS0tLS0tCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYyAgICB8IDE1ICsrKysrKy0tLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMKKysrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMKK0BAIC0yMjYsMjEgKzIyNiwyMCBAQCB2b2lkIHdnX3BhY2tldF9oYW5kc2hha2VfcmVjZWl2ZV93b3JrZXIoCisgc3RhdGljIHZvaWQga2VlcF9rZXlfZnJlc2goc3RydWN0IHdnX3BlZXIgKnBlZXIpCisgeworIAlzdHJ1Y3Qgbm9pc2Vfa2V5cGFpciAqa2V5cGFpcjsKKy0JYm9vbCBzZW5kID0gZmFsc2U7CisrCWJvb2wgc2VuZDsKKyAKKyAJaWYgKHBlZXItPnNlbnRfbGFzdG1pbnV0ZV9oYW5kc2hha2UpCisgCQlyZXR1cm47CisgCisgCXJjdV9yZWFkX2xvY2tfYmgoKTsKKyAJa2V5cGFpciA9IHJjdV9kZXJlZmVyZW5jZV9iaChwZWVyLT5rZXlwYWlycy5jdXJyZW50X2tleXBhaXIpOworLQlpZiAobGlrZWx5KGtleXBhaXIgJiYgUkVBRF9PTkNFKGtleXBhaXItPnNlbmRpbmcuaXNfdmFsaWQpKSAmJgorLQkgICAga2V5cGFpci0+aV9hbV90aGVfaW5pdGlhdG9yICYmCistCSAgICB1bmxpa2VseSh3Z19iaXJ0aGRhdGVfaGFzX2V4cGlyZWQoa2V5cGFpci0+c2VuZGluZy5iaXJ0aGRhdGUsCistCQkJUkVKRUNUX0FGVEVSX1RJTUUgLSBLRUVQQUxJVkVfVElNRU9VVCAtIFJFS0VZX1RJTUVPVVQpKSkKKy0JCXNlbmQgPSB0cnVlOworKwlzZW5kID0ga2V5cGFpciAmJiBSRUFEX09OQ0Uoa2V5cGFpci0+c2VuZGluZy5pc192YWxpZCkgJiYKKysJICAgICAgIGtleXBhaXItPmlfYW1fdGhlX2luaXRpYXRvciAmJgorKwkgICAgICAgd2dfYmlydGhkYXRlX2hhc19leHBpcmVkKGtleXBhaXItPnNlbmRpbmcuYmlydGhkYXRlLAorKwkJCVJFSkVDVF9BRlRFUl9USU1FIC0gS0VFUEFMSVZFX1RJTUVPVVQgLSBSRUtFWV9USU1FT1VUKTsKKyAJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CisgCistCWlmIChzZW5kKSB7CisrCWlmICh1bmxpa2VseShzZW5kKSkgeworIAkJcGVlci0+c2VudF9sYXN0bWludXRlX2hhbmRzaGFrZSA9IHRydWU7CisgCQl3Z19wYWNrZXRfc2VuZF9xdWV1ZWRfaGFuZHNoYWtlX2luaXRpYXRpb24ocGVlciwgZmFsc2UpOworIAl9CistLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jCitAQCAtMTI0LDIwICsxMjQsMTcgQEAgdm9pZCB3Z19wYWNrZXRfc2VuZF9oYW5kc2hha2VfY29va2llKHN0cgorIHN0YXRpYyB2b2lkIGtlZXBfa2V5X2ZyZXNoKHN0cnVjdCB3Z19wZWVyICpwZWVyKQorIHsKKyAJc3RydWN0IG5vaXNlX2tleXBhaXIgKmtleXBhaXI7CistCWJvb2wgc2VuZCA9IGZhbHNlOworKwlib29sIHNlbmQ7CisgCisgCXJjdV9yZWFkX2xvY2tfYmgoKTsKKyAJa2V5cGFpciA9IHJjdV9kZXJlZmVyZW5jZV9iaChwZWVyLT5rZXlwYWlycy5jdXJyZW50X2tleXBhaXIpOworLQlpZiAobGlrZWx5KGtleXBhaXIgJiYgUkVBRF9PTkNFKGtleXBhaXItPnNlbmRpbmcuaXNfdmFsaWQpKSAmJgorLQkgICAgKHVubGlrZWx5KGF0b21pYzY0X3JlYWQoJmtleXBhaXItPnNlbmRpbmcuY291bnRlci5jb3VudGVyKSA+CistCQkgICAgICBSRUtFWV9BRlRFUl9NRVNTQUdFUykgfHwKKy0JICAgICAoa2V5cGFpci0+aV9hbV90aGVfaW5pdGlhdG9yICYmCistCSAgICAgIHVubGlrZWx5KHdnX2JpcnRoZGF0ZV9oYXNfZXhwaXJlZChrZXlwYWlyLT5zZW5kaW5nLmJpcnRoZGF0ZSwKKy0JCQkJCQlSRUtFWV9BRlRFUl9USU1FKSkpKSkKKy0JCXNlbmQgPSB0cnVlOworKwlzZW5kID0ga2V5cGFpciAmJiBSRUFEX09OQ0Uoa2V5cGFpci0+c2VuZGluZy5pc192YWxpZCkgJiYKKysJICAgICAgIChhdG9taWM2NF9yZWFkKCZrZXlwYWlyLT5zZW5kaW5nLmNvdW50ZXIuY291bnRlcikgPiBSRUtFWV9BRlRFUl9NRVNTQUdFUyB8fAorKwkJKGtleXBhaXItPmlfYW1fdGhlX2luaXRpYXRvciAmJgorKwkJIHdnX2JpcnRoZGF0ZV9oYXNfZXhwaXJlZChrZXlwYWlyLT5zZW5kaW5nLmJpcnRoZGF0ZSwgUkVLRVlfQUZURVJfVElNRSkpKTsKKyAJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CisgCistCWlmIChzZW5kKQorKwlpZiAodW5saWtlbHkoc2VuZCkpCisgCQl3Z19wYWNrZXRfc2VuZF9xdWV1ZWRfaGFuZHNoYWtlX2luaXRpYXRpb24ocGVlciwgZmFsc2UpOworIH0KKyAKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMDItd2lyZWd1YXJkLXNlbGZ0ZXN0cy11c2UtbmV3ZXItaXByb3V0ZTItZm9yLWdjYy0xMC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMDItd2lyZWd1YXJkLXNlbGZ0ZXN0cy11c2UtbmV3ZXItaXByb3V0ZTItZm9yLWdjYy0xMC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGVmZTM3Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDEwMi13aXJlZ3VhcmQtc2VsZnRlc3RzLXVzZS1uZXdlci1pcHJvdXRlMi1mb3ItZ2NjLTEwLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJKYXNvbiBBLiBEb25lbmZlbGQiIDxKYXNvbkB6eDJjNC5jb20+CitEYXRlOiBUdWUsIDE5IE1heSAyMDIwIDIyOjQ5OjI3IC0wNjAwCitTdWJqZWN0OiBbUEFUQ0hdIHdpcmVndWFyZDogc2VsZnRlc3RzOiB1c2UgbmV3ZXIgaXByb3V0ZTIgZm9yIGdjYy0xMAorCitjb21taXQgZWUzYzFhYTNmMzRiNzg0MmMxNTU3Y2ZlNWQ4YzNmN2I4YzY5MmRlOCB1cHN0cmVhbS4KKworZ2NjLTEwIHN3aXRjaGVkIHRvIGRlZmF1bHRpbmcgdG8gLWZuby1jb21tb24sIHdoaWNoIGJyb2tlIGlwcm91dGUyLTUuNC4KK1RoaXMgd2FzIGZpeGVkIGluIGlwcm91dGUtNS42LCBzbyBzd2l0Y2ggdG8gdGhhdC4gQmVjYXVzZSB3ZSdyZSBhZnRlciBhCitzdGFibGUgdGVzdGluZyBzdXJmYWNlLCB3ZSBnZW5lcmFsbHkgZG9uJ3QgbGlrZSB0byBidW1wIHRoZXNlCit1bm5lY2Vzc2FyaWx5LCBidXQgaW4gdGhpcyBjYXNlLCBiZWluZyBhYmxlIHRvIGFjdHVhbGx5IGJ1aWxkIGlzIGEgYmFzaWMKK25lY2Vzc2l0eS4KKworU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CitTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9xZW11L01ha2VmaWxlIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCistLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvcWVtdS9NYWtlZmlsZQorKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL3FlbXUvTWFrZWZpbGUKK0BAIC00NCw3ICs0NCw3IEBAIGVuZGVmCisgJChldmFsICQoY2FsbCB0YXJfZG93bmxvYWQsTVVTTCxtdXNsLDEuMS4yNCwudGFyLmd6LGh0dHBzOi8vd3d3Lm11c2wtbGliYy5vcmcvcmVsZWFzZXMvLDEzNzBjOWE4MTJiMmNmMmE3ZDkyODAyNTEwY2NhMDA1OGNjMzdlNjZhN2JlZGQ3MDA1MWYwYTM0MDE1MDIyYTMpKQorICQoZXZhbCAkKGNhbGwgdGFyX2Rvd25sb2FkLElQRVJGLGlwZXJmLDMuNywudGFyLmd6LGh0dHBzOi8vZG93bmxvYWRzLmVzLm5ldC9wdWIvaXBlcmYvLGQ4NDYwNDAyMjQzMTdjYWYyZjc1Yzg0M2QzMDlhOTUwYTdkYjIzZjliNDRiOTQ2ODhjY2JlNTU3ZDZkMTcxMGMpKQorICQoZXZhbCAkKGNhbGwgdGFyX2Rvd25sb2FkLEJBU0gsYmFzaCw1LjAsLnRhci5neixodHRwczovL2Z0cC5nbnUub3JnL2dudS9iYXNoLyxiNGE4MGYyYWM2NjE3MGIyOTEzZWZiZmI5ZjI1OTRmMWY3NmM3YjFhZmQxMWY3OTllMjIwMzVkNjMwNzdmYjRkKSkKKy0kKGV2YWwgJChjYWxsIHRhcl9kb3dubG9hZCxJUFJPVVRFMixpcHJvdXRlMiw1LjQuMCwudGFyLnh6LGh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL25ldC9pcHJvdXRlMi8sZmU5N2FhNjBhMGQ0YzVhYzgzMGJlMTg5MzdlMThkYzM0MDBjYTcxM2EzM2E4OWFkODk2ZmYxZTNkNDYwODZhZSkpCisrJChldmFsICQoY2FsbCB0YXJfZG93bmxvYWQsSVBST1VURTIsaXByb3V0ZTIsNS42LjAsLnRhci54eixodHRwczovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy9uZXQvaXByb3V0ZTIvLDFiNWIwZTI1Y2U2ZTIzZGE3NTI2ZWExZGEwNDRlODE0YWQ4NWJhNzYxYjEwZGQyOWMyYjAyN2MwNTZiMDQ2OTIpKQorICQoZXZhbCAkKGNhbGwgdGFyX2Rvd25sb2FkLElQVEFCTEVTLGlwdGFibGVzLDEuOC40LC50YXIuYnoyLGh0dHBzOi8vd3d3Lm5ldGZpbHRlci5vcmcvcHJvamVjdHMvaXB0YWJsZXMvZmlsZXMvLDk5M2EzYTU0OTBhNTQ0YzJjYmYyZWYxNWNmN2U3ZWQyMWFmMTg0NWJhZjIyODMxOGQ1YzM2ZWY4ODI3ZTE1N2MpKQorICQoZXZhbCAkKGNhbGwgdGFyX2Rvd25sb2FkLE5NQVAsbm1hcCw3LjgwLC50YXIuYnoyLGh0dHBzOi8vbm1hcC5vcmcvZGlzdC8sZmNmYTVhMGU0MjA5OWUxMmU0YmY3YTY4ZWJlNmZkZTA1NTUzMzgzYTY4MmU4MTZhN2VjOTI1NmFiNDc3M2ZhYSkpCisgJChldmFsICQoY2FsbCB0YXJfZG93bmxvYWQsSVBVVElMUyxpcHV0aWxzLHMyMDE5MDcwOSwudGFyLmd6LGh0dHBzOi8vZ2l0aHViLmNvbS9pcHV0aWxzL2lwdXRpbHMvYXJjaGl2ZS9zMjAxOTA3MDkudGFyLmd6LyMsYTE1NzIwZGQ3NDFkNzUzOGRkMjY0NWY5ZjUxNmQxOTM2MzZhZTQzMDBmZjdkYmM4YmZjYTc1N2JmMTY2NDkwYSkpCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTAzLXdpcmVndWFyZC1ub2lzZS1yZWFkLXByZXNoYXJlZC1rZXktd2hpbGUtdGFraW5nLWxvY2sucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTAzLXdpcmVndWFyZC1ub2lzZS1yZWFkLXByZXNoYXJlZC1rZXktd2hpbGUtdGFraW5nLWxvY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRhYzRiNwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMDMtd2lyZWd1YXJkLW5vaXNlLXJlYWQtcHJlc2hhcmVkLWtleS13aGlsZS10YWtpbmctbG9jay5wYXRjaApAQCAtMCwwICsxLDYxIEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogVHVlLCAxOSBNYXkgMjAyMCAyMjo0OToyOCAtMDYwMAorU3ViamVjdDogW1BBVENIXSB3aXJlZ3VhcmQ6IG5vaXNlOiByZWFkIHByZXNoYXJlZCBrZXkgd2hpbGUgdGFraW5nIGxvY2sKKworY29tbWl0IGJjNjdkMzcxMjU2ZjVjNDdkODI0ZTJlZWM1MWU0NmM4ZDYyZDAyMmUgdXBzdHJlYW0uCisKK1ByaW9yIHdlIHJlYWQgdGhlIHByZXNoYXJlZCBrZXkgYWZ0ZXIgZHJvcHBpbmcgdGhlIGhhbmRzaGFrZSBsb2NrLCB3aGljaAoraXNuJ3QgYW4gYWN0dWFsIGNyeXB0byBpc3N1ZSBpZiBpdCByYWNlcywgYnV0IGl0J3Mgc3RpbGwgbm90IHF1aXRlCitjb3JyZWN0LiBTbyBjb3B5IHRoYXQgcGFydCBvZiB0aGUgc3RhdGUgaW50byBhIHRlbXBvcmFyeSBsaWtlIHdlIGRvIHdpdGgKK3RoZSByZXN0IG9mIHRoZSBoYW5kc2hha2Ugc3RhdGUgdmFyaWFibGVzLiBUaGVuIHdlIGNhbiByZWxlYXNlIHRoZSBsb2NrLAorb3BlcmF0ZSBvbiB0aGUgdGVtcG9yYXJ5LCBhbmQgemVybyBpdCBvdXQgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24uIEluCitwZXJmb3JtYW5jZSB0ZXN0cywgdGhlIGltcGFjdCBvZiB0aGlzIHdhcyBlbnRpcmVseSB1bm5vdGljYWJsZSwgcHJvYmFibHkKK2JlY2F1c2UgdGhvc2UgYnl0ZXMgYXJlIGNvbWluZyBmcm9tIHRoZSBzYW1lIGNhY2hlbGluZSBhcyBvdGhlciB0aGluZ3MKK3RoYXQgYXJlIGJlaW5nIGNvcGllZCBvdXQgaW4gdGhlIHNhbWUgbWFubmVyLgorCitSZXBvcnRlZC1ieTogTWF0dCBEdW53b29kaWUgPG5jb25Abm9jb25yb3kubmV0PgorRml4ZXM6IGU3MDk2YzEzMWU1MSAoIm5ldDogV2lyZUd1YXJkIHNlY3VyZSBuZXR3b3JrIHR1bm5lbCIpCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL25vaXNlLmMgfCA2ICsrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL25vaXNlLmMKKysrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9ub2lzZS5jCitAQCAtNzE1LDYgKzcxNSw3IEBAIHdnX25vaXNlX2hhbmRzaGFrZV9jb25zdW1lX3Jlc3BvbnNlKHN0cnUKKyAJdTggZVtOT0lTRV9QVUJMSUNfS0VZX0xFTl07CisgCXU4IGVwaGVtZXJhbF9wcml2YXRlW05PSVNFX1BVQkxJQ19LRVlfTEVOXTsKKyAJdTggc3RhdGljX3ByaXZhdGVbTk9JU0VfUFVCTElDX0tFWV9MRU5dOworKwl1OCBwcmVzaGFyZWRfa2V5W05PSVNFX1NZTU1FVFJJQ19LRVlfTEVOXTsKKyAKKyAJZG93bl9yZWFkKCZ3Zy0+c3RhdGljX2lkZW50aXR5LmxvY2spOworIAorQEAgLTczMyw2ICs3MzQsOCBAQCB3Z19ub2lzZV9oYW5kc2hha2VfY29uc3VtZV9yZXNwb25zZShzdHJ1CisgCW1lbWNweShjaGFpbmluZ19rZXksIGhhbmRzaGFrZS0+Y2hhaW5pbmdfa2V5LCBOT0lTRV9IQVNIX0xFTik7CisgCW1lbWNweShlcGhlbWVyYWxfcHJpdmF0ZSwgaGFuZHNoYWtlLT5lcGhlbWVyYWxfcHJpdmF0ZSwKKyAJICAgICAgIE5PSVNFX1BVQkxJQ19LRVlfTEVOKTsKKysJbWVtY3B5KHByZXNoYXJlZF9rZXksIGhhbmRzaGFrZS0+cHJlc2hhcmVkX2tleSwKKysJICAgICAgIE5PSVNFX1NZTU1FVFJJQ19LRVlfTEVOKTsKKyAJdXBfcmVhZCgmaGFuZHNoYWtlLT5sb2NrKTsKKyAKKyAJaWYgKHN0YXRlICE9IEhBTkRTSEFLRV9DUkVBVEVEX0lOSVRJQVRJT04pCitAQCAtNzUwLDcgKzc1Myw3IEBAIHdnX25vaXNlX2hhbmRzaGFrZV9jb25zdW1lX3Jlc3BvbnNlKHN0cnUKKyAJCWdvdG8gZmFpbDsKKyAKKyAJLyogcHNrICovCistCW1peF9wc2soY2hhaW5pbmdfa2V5LCBoYXNoLCBrZXksIGhhbmRzaGFrZS0+cHJlc2hhcmVkX2tleSk7CisrCW1peF9wc2soY2hhaW5pbmdfa2V5LCBoYXNoLCBrZXksIHByZXNoYXJlZF9rZXkpOworIAorIAkvKiB7fSAqLworIAlpZiAoIW1lc3NhZ2VfZGVjcnlwdChOVUxMLCBzcmMtPmVuY3J5cHRlZF9ub3RoaW5nLAorQEAgLTc4Myw2ICs3ODYsNyBAQCBvdXQ6CisgCW1lbXplcm9fZXhwbGljaXQoY2hhaW5pbmdfa2V5LCBOT0lTRV9IQVNIX0xFTik7CisgCW1lbXplcm9fZXhwbGljaXQoZXBoZW1lcmFsX3ByaXZhdGUsIE5PSVNFX1BVQkxJQ19LRVlfTEVOKTsKKyAJbWVtemVyb19leHBsaWNpdChzdGF0aWNfcHJpdmF0ZSwgTk9JU0VfUFVCTElDX0tFWV9MRU4pOworKwltZW16ZXJvX2V4cGxpY2l0KHByZXNoYXJlZF9rZXksIE5PSVNFX1NZTU1FVFJJQ19LRVlfTEVOKTsKKyAJdXBfcmVhZCgmd2ctPnN0YXRpY19pZGVudGl0eS5sb2NrKTsKKyAJcmV0dXJuIHJldF9wZWVyOworIH0KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMDQtd2lyZWd1YXJkLXF1ZXVlaW5nLXByZXNlcnZlLWZsb3ctaGFzaC1hY3Jvc3MtcGFja2V0LS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMDQtd2lyZWd1YXJkLXF1ZXVlaW5nLXByZXNlcnZlLWZsb3ctaGFzaC1hY3Jvc3MtcGFja2V0LS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWRlYWRiCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDEwNC13aXJlZ3VhcmQtcXVldWVpbmctcHJlc2VydmUtZmxvdy1oYXNoLWFjcm9zcy1wYWNrZXQtLnBhdGNoCkBAIC0wLDAgKzEsMTE2IEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogVHVlLCAxOSBNYXkgMjAyMCAyMjo0OToyOSAtMDYwMAorU3ViamVjdDogW1BBVENIXSB3aXJlZ3VhcmQ6IHF1ZXVlaW5nOiBwcmVzZXJ2ZSBmbG93IGhhc2ggYWNyb3NzIHBhY2tldAorIHNjcnViYmluZworTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitjb21taXQgYzc4YTBiNGE3ODgzOWQ1NzJkOGE4MGY2YTYyMjIxYzBkNzg0MzEzNSB1cHN0cmVhbS4KKworSXQncyBpbXBvcnRhbnQgdGhhdCB3ZSBjbGVhciBtb3N0IGhlYWRlciBmaWVsZHMgZHVyaW5nIGVuY2Fwc3VsYXRpb24gYW5kCitkZWNhcHN1bGF0aW9uLCBiZWNhdXNlIHRoZSBwYWNrZXQgaXMgc3Vic3RhbnRpYWxseSBjaGFuZ2VkLCBhbmQgd2UgZG9uJ3QKK3dhbnQgYW55IGluZm8gbGVhayBvciBsb2dpYyBidWcgZHVlIHRvIGFuIGFjY2lkZW50YWwgY29ycmVsYXRpb24uIEJ1dCwKK2ZvciBlbmNhcHN1bGF0aW9uLCBpdCdzIHdyb25nIHRvIGNsZWFyIHNrYi0+aGFzaCwgc2luY2UgaXQncyB1c2VkIGJ5CitmcV9jb2RlbCBhbmQgZmxvdyBkaXNzZWN0aW9uIGluIGdlbmVyYWwuIFdpdGhvdXQgaXQsIGNsYXNzaWZpY2F0aW9uIGRvZXMKK25vdCBwcm9jZWVkIGFzIHVzdWFsLiBUaGlzIGNoYW5nZSBtaWdodCBtYWtlIGl0IGVhc2llciB0byBlc3RpbWF0ZSB0aGUKK251bWJlciBvZiBpbm5lcmZsb3dzIGJ5IGV4YW1pbmluZyBjbHVzdGVyaW5nIG9mIG91dCBvZiBvcmRlciBwYWNrZXRzLAorYnV0IHRoaXMgc2hvdWxkbid0IG9wZW4gdXAgYW55dGhpbmcgdGhhdCBjYW4ndCBhbHJlYWR5IGJlIGluZmVycmVkCitvdGhlcndpc2UgKGUuZy4gc3luIHBhY2tldCBzaXplIGluZmVyZW5jZSksIGFuZCBmcV9jb2RlbCBjYW4gYmUgZGlzYWJsZWQKK2FueXdheS4KKworRnVydGhlcm1vcmUsIGl0IG1pZ2h0IGJlIHRoZSBjYXNlIHRoYXQgdGhlIGhhc2ggaXNuJ3QgdXNlZCBvciBxdWVyaWVkIGF0CithbGwgdW50aWwgYWZ0ZXIgd2lyZWd1YXJkIHRyYW5zbWl0cyB0aGUgZW5jcnlwdGVkIFVEUCBwYWNrZXQsIHdoaWNoCittZWFucyBza2ItPmhhc2ggbWlnaHQgc3RpbGwgYmUgemVybyBhdCB0aGlzIHBvaW50LCBhbmQgdGh1cyBubyBoYXNoCit0YWtlbiBvdmVyIHRoZSBpbm5lciBwYWNrZXQgZGF0YS4gSW4gb3JkZXIgdG8gYWRkcmVzcyB0aGlzIHNpdHVhdGlvbiwgd2UKK2ZvcmNlIGEgY2FsY3VsYXRpb24gb2Ygc2tiLT5oYXNoIGJlZm9yZSBlbmNyeXB0aW5nIHBhY2tldCBkYXRhLgorCitPZiBjb3Vyc2UgdGhpcyBtZWFucyB0aGF0IGZxX2NvZGVsIG1pZ2h0IHRyYW5zbWl0IHBhY2tldHMgc2xpZ2h0bHkgbW9yZQorb3V0IG9mIG9yZGVyIHRoYW4gdXN1YWwuIFRva2UgZGlkIHNvbWUgdGVzdGluZyBvbiBiZWVmeSBtYWNoaW5lcyB3aXRoCitoaWdoIHF1YW50aXRpZXMgb2YgcGFyYWxsZWwgZmxvd3MgYW5kIGZvdW5kIHRoYXQgaW5jcmVhc2luZyB0aGUKK3JlcGx5LWF0dGFjayBjb3VudGVyIHRvIDgxOTIgdGFrZXMgY2FyZSBvZiB0aGUgbW9zdCBwYXRob2xvZ2ljYWwgY2FzZXMKK3ByZXR0eSB3ZWxsLgorCitSZXBvcnRlZC1ieTogRGF2ZSBUYWh0IDxkYXZlLnRhaHRAZ21haWwuY29tPgorUmV2aWV3ZWQtYW5kLXRlc3RlZC1ieTogVG9rZSBIw7hpbGFuZC1Kw7hyZ2Vuc2VuIDx0b2tlQHRva2UuZGs+CitGaXhlczogZTcwOTZjMTMxZTUxICgibmV0OiBXaXJlR3VhcmQgc2VjdXJlIG5ldHdvcmsgdHVubmVsIikKK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorU2lnbmVkLW9mZi1ieTogRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvbWVzc2FnZXMuaCB8ICAyICstCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmggfCAxMCArKysrKysrKystCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYyAgfCAgMiArLQorIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmMgICAgIHwgIDcgKysrKysrLQorIDQgZmlsZXMgY2hhbmdlZCwgMTcgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL21lc3NhZ2VzLmgKKysrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9tZXNzYWdlcy5oCitAQCAtMzIsNyArMzIsNyBAQCBlbnVtIGNvb2tpZV92YWx1ZXMgeworIH07CisgCisgZW51bSBjb3VudGVyX3ZhbHVlcyB7CistCUNPVU5URVJfQklUU19UT1RBTCA9IDIwNDgsCisrCUNPVU5URVJfQklUU19UT1RBTCA9IDgxOTIsCisgCUNPVU5URVJfUkVEVU5EQU5UX0JJVFMgPSBCSVRTX1BFUl9MT05HLAorIAlDT1VOVEVSX1dJTkRPV19TSVpFID0gQ09VTlRFUl9CSVRTX1RPVEFMIC0gQ09VTlRFUl9SRURVTkRBTlRfQklUUworIH07CistLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaAorKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmgKK0BAIC04NywxMiArODcsMjAgQEAgc3RhdGljIGlubGluZSBib29sIHdnX2NoZWNrX3BhY2tldF9wcm90bworIAlyZXR1cm4gcmVhbF9wcm90b2NvbCAmJiBza2ItPnByb3RvY29sID09IHJlYWxfcHJvdG9jb2w7CisgfQorIAorLXN0YXRpYyBpbmxpbmUgdm9pZCB3Z19yZXNldF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKKytzdGF0aWMgaW5saW5lIHZvaWQgd2dfcmVzZXRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgZW5jYXBzdWxhdGluZykKKyB7CisrCXU4IGw0X2hhc2ggPSBza2ItPmw0X2hhc2g7CisrCXU4IHN3X2hhc2ggPSBza2ItPnN3X2hhc2g7CisrCXUzMiBoYXNoID0gc2tiLT5oYXNoOworIAlza2Jfc2NydWJfcGFja2V0KHNrYiwgdHJ1ZSk7CisgCW1lbXNldCgmc2tiLT5oZWFkZXJzX3N0YXJ0LCAwLAorIAkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIGhlYWRlcnNfZW5kKSAtCisgCQkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIGhlYWRlcnNfc3RhcnQpKTsKKysJaWYgKGVuY2Fwc3VsYXRpbmcpIHsKKysJCXNrYi0+bDRfaGFzaCA9IGw0X2hhc2g7CisrCQlza2ItPnN3X2hhc2ggPSBzd19oYXNoOworKwkJc2tiLT5oYXNoID0gaGFzaDsKKysJfQorIAlza2ItPnF1ZXVlX21hcHBpbmcgPSAwOworIAlza2ItPm5vaGRyID0gMDsKKyAJc2tiLT5wZWVrZWQgPSAwOworLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYworKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYworQEAgLTQ4NCw3ICs0ODQsNyBAQCBpbnQgd2dfcGFja2V0X3J4X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0CisgCQlpZiAodW5saWtlbHkod2dfc29ja2V0X2VuZHBvaW50X2Zyb21fc2tiKCZlbmRwb2ludCwgc2tiKSkpCisgCQkJZ290byBuZXh0OworIAorLQkJd2dfcmVzZXRfcGFja2V0KHNrYik7CisrCQl3Z19yZXNldF9wYWNrZXQoc2tiLCBmYWxzZSk7CisgCQl3Z19wYWNrZXRfY29uc3VtZV9kYXRhX2RvbmUocGVlciwgc2tiLCAmZW5kcG9pbnQpOworIAkJZnJlZSA9IGZhbHNlOworIAorLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYworKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYworQEAgLTE2Nyw2ICsxNjcsMTEgQEAgc3RhdGljIGJvb2wgZW5jcnlwdF9wYWNrZXQoc3RydWN0IHNrX2J1ZgorIAlzdHJ1Y3Qgc2tfYnVmZiAqdHJhaWxlcjsKKyAJaW50IG51bV9mcmFnczsKKyAKKysJLyogRm9yY2UgaGFzaCBjYWxjdWxhdGlvbiBiZWZvcmUgZW5jcnlwdGlvbiBzbyB0aGF0IGZsb3cgYW5hbHlzaXMgaXMKKysJICogY29uc2lzdGVudCBvdmVyIHRoZSBpbm5lciBwYWNrZXQuCisrCSAqLworKwlza2JfZ2V0X2hhc2goc2tiKTsKKysKKyAJLyogQ2FsY3VsYXRlIGxlbmd0aHMuICovCisgCXBhZGRpbmdfbGVuID0gY2FsY3VsYXRlX3NrYl9wYWRkaW5nKHNrYik7CisgCXRyYWlsZXJfbGVuID0gcGFkZGluZ19sZW4gKyBub2lzZV9lbmNyeXB0ZWRfbGVuKDApOworQEAgLTI5NSw3ICszMDAsNyBAQCB2b2lkIHdnX3BhY2tldF9lbmNyeXB0X3dvcmtlcihzdHJ1Y3Qgd29yCisgCQlza2JfbGlzdF93YWxrX3NhZmUoZmlyc3QsIHNrYiwgbmV4dCkgeworIAkJCWlmIChsaWtlbHkoZW5jcnlwdF9wYWNrZXQoc2tiLAorIAkJCQkJUEFDS0VUX0NCKGZpcnN0KS0+a2V5cGFpcikpKSB7CistCQkJCXdnX3Jlc2V0X3BhY2tldChza2IpOworKwkJCQl3Z19yZXNldF9wYWNrZXQoc2tiLCB0cnVlKTsKKyAJCQl9IGVsc2UgeworIAkJCQlzdGF0ZSA9IFBBQ0tFVF9TVEFURV9ERUFEOworIAkJCQlicmVhazsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMDUtd2lyZWd1YXJkLW5vaXNlLXNlcGFyYXRlLXJlY2VpdmUtY291bnRlci1mcm9tLXNlbmQtYy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMDUtd2lyZWd1YXJkLW5vaXNlLXNlcGFyYXRlLXJlY2VpdmUtY291bnRlci1mcm9tLXNlbmQtYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2QzOGQzCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDEwNS13aXJlZ3VhcmQtbm9pc2Utc2VwYXJhdGUtcmVjZWl2ZS1jb3VudGVyLWZyb20tc2VuZC1jLnBhdGNoCkBAIC0wLDAgKzEsMzMwIEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogVHVlLCAxOSBNYXkgMjAyMCAyMjo0OTozMCAtMDYwMAorU3ViamVjdDogW1BBVENIXSB3aXJlZ3VhcmQ6IG5vaXNlOiBzZXBhcmF0ZSByZWNlaXZlIGNvdW50ZXIgZnJvbSBzZW5kIGNvdW50ZXIKKworY29tbWl0IGE5ZTkwZDk5MzFmM2E0NzRmMDRiYWI3ODJjY2Q5ZDc3OTA0OTQxZTkgdXBzdHJlYW0uCisKK0luICJ3aXJlZ3VhcmQ6IHF1ZXVlaW5nOiBwcmVzZXJ2ZSBmbG93IGhhc2ggYWNyb3NzIHBhY2tldCBzY3J1YmJpbmciLCB3ZQord2VyZSByZXF1aXJlZCB0byBzbGlnaHRseSBpbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgcmVjZWl2ZSByZXBsYXkKK2NvdW50ZXIgdG8gc29tZXRoaW5nIHN0aWxsIGZhaXJseSBzbWFsbCwgYnV0IGFuIGluY3JlYXNlIG5vbmV0aGVsZXNzLgorSXQgdHVybnMgb3V0IHRoYXQgd2UgY2FuIHJlY291cCBzb21lIG9mIHRoZSBhZGRpdGlvbmFsIG1lbW9yeSBvdmVyaGVhZAorYnkgc3BsaXR0aW5nIHVwIHRoZSBwcmlvciB1bmlvbiB0eXBlIGludG8gdHdvIGRpc3RpbmN0IHR5cGVzLiBCZWZvcmUsIHdlCit1c2VkIHRoZSBzYW1lICJub2lzZV9jb3VudGVyIiB1bmlvbiBmb3IgYm90aCBzZW5kaW5nIGFuZCByZWNlaXZpbmcsIHdpdGgKK3NlbmRpbmcganVzdCB1c2luZyBhIHNpbXBsZSBhdG9taWM2NF90LCB3aGlsZSByZWNlaXZpbmcgdXNlZCB0aGUgZnVsbAorcmVwbGF5IGNvdW50ZXIgY2hlY2tlci4gVGhpcyBtZWFudCB0aGF0IG1vc3Qgb2YgdGhlIG1lbW9yeSBiZWluZworYWxsb2NhdGVkIGZvciB0aGUgc2VuZGluZyBjb3VudGVyIHdhcyBiZWluZyB3YXN0ZWQuIFNpbmNlIHRoZSBvbGQKKyJub2lzZV9jb3VudGVyIiB0eXBlIGluY3JlYXNlZCBpbiBzaXplIGluIHRoZSBwcmlvciBjb21taXQsIG5vdyBpcyBhCitnb29kIHRpbWUgdG8gc3BsaXQgdXAgdGhhdCB1bmlvbiB0eXBlIGludG8gYSBkaXN0aW5jdCAibm9pc2VfcmVwbGF5XworY291bnRlciIgZm9yIHJlY2VpdmluZyBhbmQgYSBib3JpbmcgYXRvbWljNjRfdCBmb3Igc2VuZGluZywgZWFjaCB1c2luZworbmVpdGhlciBtb3JlIG5vciBsZXNzIG1lbW9yeSB0aGFuIHJlcXVpcmVkLgorCitBbHNvLCBzaW5jZSBzb21ldGltZXMgdGhlIHJlcGxheSBjb3VudGVyIGlzIGFjY2Vzc2VkIHdpdGhvdXQKK25lY2Vzc2l0YXRpbmcgYWRkaXRpb25hbCBhY2Nlc3NlcyB0byB0aGUgYml0bWFwLCB3ZSBjYW4gcmVkdWNlIGNhY2hlCittaXNzZXMgYnkgaG9pc3RpbmcgdGhlIGFsd2F5cy1uZWNlc3NhcnkgbG9jayBhYm92ZSB0aGUgYml0bWFwIGluIHRoZQorc3RydWN0IGxheW91dC4gV2UgYWxzbyBjaGFuZ2UgYSAibm9pc2VfcmVwbGF5X2NvdW50ZXIiIHN0YWNrIGFsbG9jYXRpb24KK3RvIGttYWxsb2MgaW4gYSAtRERFQlVHIHNlbGZ0ZXN0IHNvIHRoYXQgS0FTQU4gZG9lc24ndCB0cmlnZ2VyIGEgc3RhY2sKK2ZyYW1lIHdhcm5pbmcuCisKK0FsbCBhbmQgYWxsLCByZW1vdmluZyBhIGJpdCBvZiBhYnN0cmFjdGlvbiBpbiB0aGlzIGNvbW1pdCBtYWtlcyB0aGUgY29kZQorc2ltcGxlciBhbmQgc21hbGxlciwgaW4gYWRkaXRpb24gdG8gdGhlIG1vdGl2YXRpbmcgbWVtb3J5IHVzYWdlCityZWN1cGVyYXRpb24uIEZvciBleGFtcGxlLCBwYXNzaW5nIGFyb3VuZCByYXcgIm5vaXNlX3N5bW1ldHJpY19rZXkiCitzdHJ1Y3RzIGlzIHNvbWV0aGluZyB0aGF0IHJlYWxseSBvbmx5IG1ha2VzIHNlbnNlIHdpdGhpbiBub2lzZS5jLCBpbiB0aGUKK29uZSBwbGFjZSB3aGVyZSB0aGUgc2VuZGluZyBhbmQgcmVjZWl2aW5nIGtleXMgY2FuIHNhZmVseSBiZSB0aG91Z2h0IG9mCithcyB0aGUgc2FtZSB0eXBlIG9mIG9iamVjdDsgc3Vic2VxdWVudCB0byB0aGF0LCBpdCdzIGltcG9ydGFudCB0aGF0IHdlCit1bmlmb3JtbHkgYWNjZXNzIHRoZXNlIHRocm91Z2gga2V5cGFpci0+e3NlbmRpbmcscmVjZWl2aW5nfSwgd2hlcmUgdGhlaXIKK2Rpc3RpbmN0IHJvbGVzIGFyZSBhbHdheXMgbWFkZSBleHBsaWNpdC4gU28gdGhpcyBwYXRjaCBhbGxvd3MgdXMgdG8gZHJhdwordGhhdCBkaXN0aW5jdGlvbiBjbGVhcmx5IGFzIHdlbGwuCisKK0ZpeGVzOiBlNzA5NmMxMzFlNTEgKCJuZXQ6IFdpcmVHdWFyZCBzZWN1cmUgbmV0d29yayB0dW5uZWwiKQorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CitTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9ub2lzZS5jICAgICAgICAgICAgfCAxNiArKystLS0tLS0KKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvbm9pc2UuaCAgICAgICAgICAgIHwgMTQgKysrKy0tLS0KKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jICAgICAgICAgIHwgNDIgKysrKysrKysrKysrLS0tLS0tLS0tLS0tCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L2NvdW50ZXIuYyB8IDE3ICsrKysrKystLS0KKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VuZC5jICAgICAgICAgICAgIHwgMTIgKysrLS0tLQorIDUgZmlsZXMgY2hhbmdlZCwgNDggaW5zZXJ0aW9ucygrKSwgNTMgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9ub2lzZS5jCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvbm9pc2UuYworQEAgLTEwNCw2ICsxMDQsNyBAQCBzdGF0aWMgc3RydWN0IG5vaXNlX2tleXBhaXIgKmtleXBhaXJfY3JlCisgCisgCWlmICh1bmxpa2VseSgha2V5cGFpcikpCisgCQlyZXR1cm4gTlVMTDsKKysJc3Bpbl9sb2NrX2luaXQoJmtleXBhaXItPnJlY2VpdmluZ19jb3VudGVyLmxvY2spOworIAlrZXlwYWlyLT5pbnRlcm5hbF9pZCA9IGF0b21pYzY0X2luY19yZXR1cm4oJmtleXBhaXJfY291bnRlcik7CisgCWtleXBhaXItPmVudHJ5LnR5cGUgPSBJTkRFWF9IQVNIVEFCTEVfS0VZUEFJUjsKKyAJa2V5cGFpci0+ZW50cnkucGVlciA9IHBlZXI7CitAQCAtMzU4LDI1ICszNTksMTYgQEAgb3V0OgorIAltZW16ZXJvX2V4cGxpY2l0KG91dHB1dCwgQkxBS0UyU19IQVNIX1NJWkUgKyAxKTsKKyB9CisgCistc3RhdGljIHZvaWQgc3ltbWV0cmljX2tleV9pbml0KHN0cnVjdCBub2lzZV9zeW1tZXRyaWNfa2V5ICprZXkpCisteworLQlzcGluX2xvY2tfaW5pdCgma2V5LT5jb3VudGVyLnJlY2VpdmUubG9jayk7CistCWF0b21pYzY0X3NldCgma2V5LT5jb3VudGVyLmNvdW50ZXIsIDApOworLQltZW1zZXQoa2V5LT5jb3VudGVyLnJlY2VpdmUuYmFja3RyYWNrLCAwLAorLQkgICAgICAgc2l6ZW9mKGtleS0+Y291bnRlci5yZWNlaXZlLmJhY2t0cmFjaykpOworLQlrZXktPmJpcnRoZGF0ZSA9IGt0aW1lX2dldF9jb2Fyc2VfYm9vdHRpbWVfbnMoKTsKKy0Ja2V5LT5pc192YWxpZCA9IHRydWU7CistfQorLQorIHN0YXRpYyB2b2lkIGRlcml2ZV9rZXlzKHN0cnVjdCBub2lzZV9zeW1tZXRyaWNfa2V5ICpmaXJzdF9kc3QsCisgCQkJc3RydWN0IG5vaXNlX3N5bW1ldHJpY19rZXkgKnNlY29uZF9kc3QsCisgCQkJY29uc3QgdTggY2hhaW5pbmdfa2V5W05PSVNFX0hBU0hfTEVOXSkKKyB7CisrCXU2NCBiaXJ0aGRhdGUgPSBrdGltZV9nZXRfY29hcnNlX2Jvb3R0aW1lX25zKCk7CisgCWtkZihmaXJzdF9kc3QtPmtleSwgc2Vjb25kX2RzdC0+a2V5LCBOVUxMLCBOVUxMLAorIAkgICAgTk9JU0VfU1lNTUVUUklDX0tFWV9MRU4sIE5PSVNFX1NZTU1FVFJJQ19LRVlfTEVOLCAwLCAwLAorIAkgICAgY2hhaW5pbmdfa2V5KTsKKy0Jc3ltbWV0cmljX2tleV9pbml0KGZpcnN0X2RzdCk7CistCXN5bW1ldHJpY19rZXlfaW5pdChzZWNvbmRfZHN0KTsKKysJZmlyc3RfZHN0LT5iaXJ0aGRhdGUgPSBzZWNvbmRfZHN0LT5iaXJ0aGRhdGUgPSBiaXJ0aGRhdGU7CisrCWZpcnN0X2RzdC0+aXNfdmFsaWQgPSBzZWNvbmRfZHN0LT5pc192YWxpZCA9IHRydWU7CisgfQorIAorIHN0YXRpYyBib29sIF9fbXVzdF9jaGVjayBtaXhfZGgodTggY2hhaW5pbmdfa2V5W05PSVNFX0hBU0hfTEVOXSwKKy0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9ub2lzZS5oCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvbm9pc2UuaAorQEAgLTE1LDE4ICsxNSwxNCBAQAorICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorICNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisgCistdW5pb24gbm9pc2VfY291bnRlciB7CistCXN0cnVjdCB7CistCQl1NjQgY291bnRlcjsKKy0JCXVuc2lnbmVkIGxvbmcgYmFja3RyYWNrW0NPVU5URVJfQklUU19UT1RBTCAvIEJJVFNfUEVSX0xPTkddOworLQkJc3BpbmxvY2tfdCBsb2NrOworLQl9IHJlY2VpdmU7CistCWF0b21pYzY0X3QgY291bnRlcjsKKytzdHJ1Y3Qgbm9pc2VfcmVwbGF5X2NvdW50ZXIgeworKwl1NjQgY291bnRlcjsKKysJc3BpbmxvY2tfdCBsb2NrOworKwl1bnNpZ25lZCBsb25nIGJhY2t0cmFja1tDT1VOVEVSX0JJVFNfVE9UQUwgLyBCSVRTX1BFUl9MT05HXTsKKyB9OworIAorIHN0cnVjdCBub2lzZV9zeW1tZXRyaWNfa2V5IHsKKyAJdTgga2V5W05PSVNFX1NZTU1FVFJJQ19LRVlfTEVOXTsKKy0JdW5pb24gbm9pc2VfY291bnRlciBjb3VudGVyOworIAl1NjQgYmlydGhkYXRlOworIAlib29sIGlzX3ZhbGlkOworIH07CitAQCAtMzQsNyArMzAsOSBAQCBzdHJ1Y3Qgbm9pc2Vfc3ltbWV0cmljX2tleSB7Cisgc3RydWN0IG5vaXNlX2tleXBhaXIgeworIAlzdHJ1Y3QgaW5kZXhfaGFzaHRhYmxlX2VudHJ5IGVudHJ5OworIAlzdHJ1Y3Qgbm9pc2Vfc3ltbWV0cmljX2tleSBzZW5kaW5nOworKwlhdG9taWM2NF90IHNlbmRpbmdfY291bnRlcjsKKyAJc3RydWN0IG5vaXNlX3N5bW1ldHJpY19rZXkgcmVjZWl2aW5nOworKwlzdHJ1Y3Qgbm9pc2VfcmVwbGF5X2NvdW50ZXIgcmVjZWl2aW5nX2NvdW50ZXI7CisgCV9fbGUzMiByZW1vdGVfaW5kZXg7CisgCWJvb2wgaV9hbV90aGVfaW5pdGlhdG9yOworIAlzdHJ1Y3Qga3JlZiByZWZjb3VudDsKKy0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMKKysrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMKK0BAIC0yNDUsMjAgKzI0NSwyMCBAQCBzdGF0aWMgdm9pZCBrZWVwX2tleV9mcmVzaChzdHJ1Y3Qgd2dfcGVlCisgCX0KKyB9CisgCistc3RhdGljIGJvb2wgZGVjcnlwdF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5vaXNlX3N5bW1ldHJpY19rZXkgKmtleSkKKytzdGF0aWMgYm9vbCBkZWNyeXB0X3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbm9pc2Vfa2V5cGFpciAqa2V5cGFpcikKKyB7CisgCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1tNQVhfU0tCX0ZSQUdTICsgOF07CisgCXN0cnVjdCBza19idWZmICp0cmFpbGVyOworIAl1bnNpZ25lZCBpbnQgb2Zmc2V0OworIAlpbnQgbnVtX2ZyYWdzOworIAorLQlpZiAodW5saWtlbHkoIWtleSkpCisrCWlmICh1bmxpa2VseSgha2V5cGFpcikpCisgCQlyZXR1cm4gZmFsc2U7CisgCistCWlmICh1bmxpa2VseSghUkVBRF9PTkNFKGtleS0+aXNfdmFsaWQpIHx8CistCQkgIHdnX2JpcnRoZGF0ZV9oYXNfZXhwaXJlZChrZXktPmJpcnRoZGF0ZSwgUkVKRUNUX0FGVEVSX1RJTUUpIHx8CistCQkgIGtleS0+Y291bnRlci5yZWNlaXZlLmNvdW50ZXIgPj0gUkVKRUNUX0FGVEVSX01FU1NBR0VTKSkgeworLQkJV1JJVEVfT05DRShrZXktPmlzX3ZhbGlkLCBmYWxzZSk7CisrCWlmICh1bmxpa2VseSghUkVBRF9PTkNFKGtleXBhaXItPnJlY2VpdmluZy5pc192YWxpZCkgfHwKKysJCSAgd2dfYmlydGhkYXRlX2hhc19leHBpcmVkKGtleXBhaXItPnJlY2VpdmluZy5iaXJ0aGRhdGUsIFJFSkVDVF9BRlRFUl9USU1FKSB8fAorKwkJICBrZXlwYWlyLT5yZWNlaXZpbmdfY291bnRlci5jb3VudGVyID49IFJFSkVDVF9BRlRFUl9NRVNTQUdFUykpIHsKKysJCVdSSVRFX09OQ0Uoa2V5cGFpci0+cmVjZWl2aW5nLmlzX3ZhbGlkLCBmYWxzZSk7CisgCQlyZXR1cm4gZmFsc2U7CisgCX0KKyAKK0BAIC0yODMsNyArMjgzLDcgQEAgc3RhdGljIGJvb2wgZGVjcnlwdF9wYWNrZXQoc3RydWN0IHNrX2J1ZgorIAorIAlpZiAoIWNoYWNoYTIwcG9seTEzMDVfZGVjcnlwdF9zZ19pbnBsYWNlKHNnLCBza2ItPmxlbiwgTlVMTCwgMCwKKyAJCQkJCSAgICAgICAgIFBBQ0tFVF9DQihza2IpLT5ub25jZSwKKy0JCQkJCQkga2V5LT5rZXkpKQorKwkJCQkJCSBrZXlwYWlyLT5yZWNlaXZpbmcua2V5KSkKKyAJCXJldHVybiBmYWxzZTsKKyAKKyAJLyogQW5vdGhlciB1Z2x5IHNpdHVhdGlvbiBvZiBwdXNoaW5nIGFuZCBwdWxsaW5nIHRoZSBoZWFkZXIgc28gYXMgdG8KK0BAIC0yOTgsNDEgKzI5OCw0MSBAQCBzdGF0aWMgYm9vbCBkZWNyeXB0X3BhY2tldChzdHJ1Y3Qgc2tfYnVmCisgfQorIAorIC8qIFRoaXMgaXMgUkZDNjQ3OSwgYSByZXBsYXkgZGV0ZWN0aW9uIGJpdG1hcCBhbGdvcml0aG0gdGhhdCBhdm9pZHMgYml0c2hpZnRzICovCistc3RhdGljIGJvb2wgY291bnRlcl92YWxpZGF0ZSh1bmlvbiBub2lzZV9jb3VudGVyICpjb3VudGVyLCB1NjQgdGhlaXJfY291bnRlcikKKytzdGF0aWMgYm9vbCBjb3VudGVyX3ZhbGlkYXRlKHN0cnVjdCBub2lzZV9yZXBsYXlfY291bnRlciAqY291bnRlciwgdTY0IHRoZWlyX2NvdW50ZXIpCisgeworIAl1bnNpZ25lZCBsb25nIGluZGV4LCBpbmRleF9jdXJyZW50LCB0b3AsIGk7CisgCWJvb2wgcmV0ID0gZmFsc2U7CisgCistCXNwaW5fbG9ja19iaCgmY291bnRlci0+cmVjZWl2ZS5sb2NrKTsKKysJc3Bpbl9sb2NrX2JoKCZjb3VudGVyLT5sb2NrKTsKKyAKKy0JaWYgKHVubGlrZWx5KGNvdW50ZXItPnJlY2VpdmUuY291bnRlciA+PSBSRUpFQ1RfQUZURVJfTUVTU0FHRVMgKyAxIHx8CisrCWlmICh1bmxpa2VseShjb3VudGVyLT5jb3VudGVyID49IFJFSkVDVF9BRlRFUl9NRVNTQUdFUyArIDEgfHwKKyAJCSAgICAgdGhlaXJfY291bnRlciA+PSBSRUpFQ1RfQUZURVJfTUVTU0FHRVMpKQorIAkJZ290byBvdXQ7CisgCisgCSsrdGhlaXJfY291bnRlcjsKKyAKKyAJaWYgKHVubGlrZWx5KChDT1VOVEVSX1dJTkRPV19TSVpFICsgdGhlaXJfY291bnRlcikgPAorLQkJICAgICBjb3VudGVyLT5yZWNlaXZlLmNvdW50ZXIpKQorKwkJICAgICBjb3VudGVyLT5jb3VudGVyKSkKKyAJCWdvdG8gb3V0OworIAorIAlpbmRleCA9IHRoZWlyX2NvdW50ZXIgPj4gaWxvZzIoQklUU19QRVJfTE9ORyk7CisgCistCWlmIChsaWtlbHkodGhlaXJfY291bnRlciA+IGNvdW50ZXItPnJlY2VpdmUuY291bnRlcikpIHsKKy0JCWluZGV4X2N1cnJlbnQgPSBjb3VudGVyLT5yZWNlaXZlLmNvdW50ZXIgPj4gaWxvZzIoQklUU19QRVJfTE9ORyk7CisrCWlmIChsaWtlbHkodGhlaXJfY291bnRlciA+IGNvdW50ZXItPmNvdW50ZXIpKSB7CisrCQlpbmRleF9jdXJyZW50ID0gY291bnRlci0+Y291bnRlciA+PiBpbG9nMihCSVRTX1BFUl9MT05HKTsKKyAJCXRvcCA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIGluZGV4IC0gaW5kZXhfY3VycmVudCwKKyAJCQkgICAgQ09VTlRFUl9CSVRTX1RPVEFMIC8gQklUU19QRVJfTE9ORyk7CisgCQlmb3IgKGkgPSAxOyBpIDw9IHRvcDsgKytpKQorLQkJCWNvdW50ZXItPnJlY2VpdmUuYmFja3RyYWNrWyhpICsgaW5kZXhfY3VycmVudCkgJgorKwkJCWNvdW50ZXItPmJhY2t0cmFja1soaSArIGluZGV4X2N1cnJlbnQpICYKKyAJCQkJKChDT1VOVEVSX0JJVFNfVE9UQUwgLyBCSVRTX1BFUl9MT05HKSAtIDEpXSA9IDA7CistCQljb3VudGVyLT5yZWNlaXZlLmNvdW50ZXIgPSB0aGVpcl9jb3VudGVyOworKwkJY291bnRlci0+Y291bnRlciA9IHRoZWlyX2NvdW50ZXI7CisgCX0KKyAKKyAJaW5kZXggJj0gKENPVU5URVJfQklUU19UT1RBTCAvIEJJVFNfUEVSX0xPTkcpIC0gMTsKKyAJcmV0ID0gIXRlc3RfYW5kX3NldF9iaXQodGhlaXJfY291bnRlciAmIChCSVRTX1BFUl9MT05HIC0gMSksCistCQkJCSZjb3VudGVyLT5yZWNlaXZlLmJhY2t0cmFja1tpbmRleF0pOworKwkJCQkmY291bnRlci0+YmFja3RyYWNrW2luZGV4XSk7CisgCisgb3V0OgorLQlzcGluX3VubG9ja19iaCgmY291bnRlci0+cmVjZWl2ZS5sb2NrKTsKKysJc3Bpbl91bmxvY2tfYmgoJmNvdW50ZXItPmxvY2spOworIAlyZXR1cm4gcmV0OworIH0KKyAKK0BAIC00NzIsMTIgKzQ3MiwxMiBAQCBpbnQgd2dfcGFja2V0X3J4X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0CisgCQlpZiAodW5saWtlbHkoc3RhdGUgIT0gUEFDS0VUX1NUQVRFX0NSWVBURUQpKQorIAkJCWdvdG8gbmV4dDsKKyAKKy0JCWlmICh1bmxpa2VseSghY291bnRlcl92YWxpZGF0ZSgma2V5cGFpci0+cmVjZWl2aW5nLmNvdW50ZXIsCisrCQlpZiAodW5saWtlbHkoIWNvdW50ZXJfdmFsaWRhdGUoJmtleXBhaXItPnJlY2VpdmluZ19jb3VudGVyLAorIAkJCQkJICAgICAgIFBBQ0tFVF9DQihza2IpLT5ub25jZSkpKSB7CisgCQkJbmV0X2RiZ19yYXRlbGltaXRlZCgiJXM6IFBhY2tldCBoYXMgaW52YWxpZCBub25jZSAlbGx1IChtYXggJWxsdSlcbiIsCisgCQkJCQkgICAgcGVlci0+ZGV2aWNlLT5kZXYtPm5hbWUsCisgCQkJCQkgICAgUEFDS0VUX0NCKHNrYiktPm5vbmNlLAorLQkJCQkJICAgIGtleXBhaXItPnJlY2VpdmluZy5jb3VudGVyLnJlY2VpdmUuY291bnRlcik7CisrCQkJCQkgICAga2V5cGFpci0+cmVjZWl2aW5nX2NvdW50ZXIuY291bnRlcik7CisgCQkJZ290byBuZXh0OworIAkJfQorIAorQEAgLTUxMSw4ICs1MTEsOCBAQCB2b2lkIHdnX3BhY2tldF9kZWNyeXB0X3dvcmtlcihzdHJ1Y3Qgd29yCisgCXN0cnVjdCBza19idWZmICpza2I7CisgCisgCXdoaWxlICgoc2tiID0gcHRyX3JpbmdfY29uc3VtZV9iaCgmcXVldWUtPnJpbmcpKSAhPSBOVUxMKSB7CistCQllbnVtIHBhY2tldF9zdGF0ZSBzdGF0ZSA9IGxpa2VseShkZWNyeXB0X3BhY2tldChza2IsCistCQkJCSZQQUNLRVRfQ0Ioc2tiKS0+a2V5cGFpci0+cmVjZWl2aW5nKSkgPworKwkJZW51bSBwYWNrZXRfc3RhdGUgc3RhdGUgPQorKwkJCWxpa2VseShkZWNyeXB0X3BhY2tldChza2IsIFBBQ0tFVF9DQihza2IpLT5rZXlwYWlyKSkgPworIAkJCQlQQUNLRVRfU1RBVEVfQ1JZUFRFRCA6IFBBQ0tFVF9TVEFURV9ERUFEOworIAkJd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl9uYXBpKHNrYiwgc3RhdGUpOworIAkJaWYgKG5lZWRfcmVzY2hlZCgpKQorLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L2NvdW50ZXIuYworKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L2NvdW50ZXIuYworQEAgLTYsMTggKzYsMjQgQEAKKyAjaWZkZWYgREVCVUcKKyBib29sIF9faW5pdCB3Z19wYWNrZXRfY291bnRlcl9zZWxmdGVzdCh2b2lkKQorIHsKKysJc3RydWN0IG5vaXNlX3JlcGxheV9jb3VudGVyICpjb3VudGVyOworIAl1bnNpZ25lZCBpbnQgdGVzdF9udW0gPSAwLCBpOworLQl1bmlvbiBub2lzZV9jb3VudGVyIGNvdW50ZXI7CisgCWJvb2wgc3VjY2VzcyA9IHRydWU7CisgCistI2RlZmluZSBUX0lOSVQgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLQkJbWVtc2V0KCZjb3VudGVyLCAwLCBzaXplb2YodW5pb24gbm9pc2VfY291bnRlcikpOyBcCistCQlzcGluX2xvY2tfaW5pdCgmY291bnRlci5yZWNlaXZlLmxvY2spOyAgICAgICAgICAgIFwKKysJY291bnRlciA9IGttYWxsb2Moc2l6ZW9mKCpjb3VudGVyKSwgR0ZQX0tFUk5FTCk7CisrCWlmICh1bmxpa2VseSghY291bnRlcikpIHsKKysJCXByX2Vycigibm9uY2UgY291bnRlciBzZWxmLXRlc3QgbWFsbG9jOiBGQUlMXG4iKTsKKysJCXJldHVybiBmYWxzZTsKKysJfQorKworKyNkZWZpbmUgVF9JTklUIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQltZW1zZXQoY291bnRlciwgMCwgc2l6ZW9mKCpjb3VudGVyKSk7ICBcCisrCQlzcGluX2xvY2tfaW5pdCgmY291bnRlci0+bG9jayk7ICAgICAgICBcCisgCX0gd2hpbGUgKDApCisgI2RlZmluZSBUX0xJTSAoQ09VTlRFUl9XSU5ET1dfU0laRSArIDEpCisgI2RlZmluZSBUKG4sIHYpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAJCSsrdGVzdF9udW07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0JCWlmIChjb3VudGVyX3ZhbGlkYXRlKCZjb3VudGVyLCBuKSAhPSAodikpIHsgICAgICAgICAgIFwKKysJCWlmIChjb3VudGVyX3ZhbGlkYXRlKGNvdW50ZXIsIG4pICE9ICh2KSkgeyAgICAgICAgICAgIFwKKyAJCQlwcl9lcnIoIm5vbmNlIGNvdW50ZXIgc2VsZi10ZXN0ICV1OiBGQUlMXG4iLCAgXAorIAkJCSAgICAgICB0ZXN0X251bSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgCQkJc3VjY2VzcyA9IGZhbHNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK0BAIC05OSw2ICsxMDUsNyBAQCBib29sIF9faW5pdCB3Z19wYWNrZXRfY291bnRlcl9zZWxmdGVzdCh2CisgCisgCWlmIChzdWNjZXNzKQorIAkJcHJfaW5mbygibm9uY2UgY291bnRlciBzZWxmLXRlc3RzOiBwYXNzXG4iKTsKKysJa2ZyZWUoY291bnRlcik7CisgCXJldHVybiBzdWNjZXNzOworIH0KKyAjZW5kaWYKKy0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmMKKysrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9zZW5kLmMKK0BAIC0xMjksNyArMTI5LDcgQEAgc3RhdGljIHZvaWQga2VlcF9rZXlfZnJlc2goc3RydWN0IHdnX3BlZQorIAlyY3VfcmVhZF9sb2NrX2JoKCk7CisgCWtleXBhaXIgPSByY3VfZGVyZWZlcmVuY2VfYmgocGVlci0+a2V5cGFpcnMuY3VycmVudF9rZXlwYWlyKTsKKyAJc2VuZCA9IGtleXBhaXIgJiYgUkVBRF9PTkNFKGtleXBhaXItPnNlbmRpbmcuaXNfdmFsaWQpICYmCistCSAgICAgICAoYXRvbWljNjRfcmVhZCgma2V5cGFpci0+c2VuZGluZy5jb3VudGVyLmNvdW50ZXIpID4gUkVLRVlfQUZURVJfTUVTU0FHRVMgfHwKKysJICAgICAgIChhdG9taWM2NF9yZWFkKCZrZXlwYWlyLT5zZW5kaW5nX2NvdW50ZXIpID4gUkVLRVlfQUZURVJfTUVTU0FHRVMgfHwKKyAJCShrZXlwYWlyLT5pX2FtX3RoZV9pbml0aWF0b3IgJiYKKyAJCSB3Z19iaXJ0aGRhdGVfaGFzX2V4cGlyZWQoa2V5cGFpci0+c2VuZGluZy5iaXJ0aGRhdGUsIFJFS0VZX0FGVEVSX1RJTUUpKSk7CisgCXJjdV9yZWFkX3VubG9ja19iaCgpOworQEAgLTM0OSw3ICszNDksNiBAQCB2b2lkIHdnX3BhY2tldF9wdXJnZV9zdGFnZWRfcGFja2V0cyhzdHJ1CisgCisgdm9pZCB3Z19wYWNrZXRfc2VuZF9zdGFnZWRfcGFja2V0cyhzdHJ1Y3Qgd2dfcGVlciAqcGVlcikKKyB7CistCXN0cnVjdCBub2lzZV9zeW1tZXRyaWNfa2V5ICprZXk7CisgCXN0cnVjdCBub2lzZV9rZXlwYWlyICprZXlwYWlyOworIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHBhY2tldHM7CisgCXN0cnVjdCBza19idWZmICpza2I7CitAQCAtMzY5LDEwICszNjgsOSBAQCB2b2lkIHdnX3BhY2tldF9zZW5kX3N0YWdlZF9wYWNrZXRzKHN0cnVjCisgCXJjdV9yZWFkX3VubG9ja19iaCgpOworIAlpZiAodW5saWtlbHkoIWtleXBhaXIpKQorIAkJZ290byBvdXRfbm9rZXk7CistCWtleSA9ICZrZXlwYWlyLT5zZW5kaW5nOworLQlpZiAodW5saWtlbHkoIVJFQURfT05DRShrZXktPmlzX3ZhbGlkKSkpCisrCWlmICh1bmxpa2VseSghUkVBRF9PTkNFKGtleXBhaXItPnNlbmRpbmcuaXNfdmFsaWQpKSkKKyAJCWdvdG8gb3V0X25va2V5OworLQlpZiAodW5saWtlbHkod2dfYmlydGhkYXRlX2hhc19leHBpcmVkKGtleS0+YmlydGhkYXRlLAorKwlpZiAodW5saWtlbHkod2dfYmlydGhkYXRlX2hhc19leHBpcmVkKGtleXBhaXItPnNlbmRpbmcuYmlydGhkYXRlLAorIAkJCQkJICAgICAgUkVKRUNUX0FGVEVSX1RJTUUpKSkKKyAJCWdvdG8gb3V0X2ludmFsaWQ7CisgCitAQCAtMzg3LDcgKzM4NSw3IEBAIHZvaWQgd2dfcGFja2V0X3NlbmRfc3RhZ2VkX3BhY2tldHMoc3RydWMKKyAJCSAqLworIAkJUEFDS0VUX0NCKHNrYiktPmRzID0gaXBfdHVubmVsX2Vjbl9lbmNhcCgwLCBpcF9oZHIoc2tiKSwgc2tiKTsKKyAJCVBBQ0tFVF9DQihza2IpLT5ub25jZSA9CistCQkJCWF0b21pYzY0X2luY19yZXR1cm4oJmtleS0+Y291bnRlci5jb3VudGVyKSAtIDE7CisrCQkJCWF0b21pYzY0X2luY19yZXR1cm4oJmtleXBhaXItPnNlbmRpbmdfY291bnRlcikgLSAxOworIAkJaWYgKHVubGlrZWx5KFBBQ0tFVF9DQihza2IpLT5ub25jZSA+PSBSRUpFQ1RfQUZURVJfTUVTU0FHRVMpKQorIAkJCWdvdG8gb3V0X2ludmFsaWQ7CisgCX0KK0BAIC0zOTksNyArMzk3LDcgQEAgdm9pZCB3Z19wYWNrZXRfc2VuZF9zdGFnZWRfcGFja2V0cyhzdHJ1YworIAlyZXR1cm47CisgCisgb3V0X2ludmFsaWQ6CistCVdSSVRFX09OQ0Uoa2V5LT5pc192YWxpZCwgZmFsc2UpOworKwlXUklURV9PTkNFKGtleXBhaXItPnNlbmRpbmcuaXNfdmFsaWQsIGZhbHNlKTsKKyBvdXRfbm9rZXk6CisgCXdnX25vaXNlX2tleXBhaXJfcHV0KGtleXBhaXIsIGZhbHNlKTsKKyAKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMDYtd2lyZWd1YXJkLW5vaXNlLWRvLW5vdC1hc3NpZ24taW5pdGlhdGlvbi10aW1lLWluLWlmLS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMDYtd2lyZWd1YXJkLW5vaXNlLWRvLW5vdC1hc3NpZ24taW5pdGlhdGlvbi10aW1lLWluLWlmLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTNjNzY0Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDEwNi13aXJlZ3VhcmQtbm9pc2UtZG8tbm90LWFzc2lnbi1pbml0aWF0aW9uLXRpbWUtaW4taWYtLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZyYW5rIFdlcm5lci1LcmlwcGVuZG9yZiA8bWFpbEBoYjlmeHEuY2g+CitEYXRlOiBUdWUsIDIzIEp1biAyMDIwIDAzOjU5OjQ0IC0wNjAwCitTdWJqZWN0OiBbUEFUQ0hdIHdpcmVndWFyZDogbm9pc2U6IGRvIG5vdCBhc3NpZ24gaW5pdGlhdGlvbiB0aW1lIGluIGlmCisgY29uZGl0aW9uCisKK2NvbW1pdCA1NThiMzUzYzljMmE3MTc1MDlmMjkxYzA2NmM2YmQ4ZjVmNWUyMWJlIHVwc3RyZWFtLgorCitGaXhlcyBhbiBlcnJvciBjb25kaXRpb24gcmVwb3J0ZWQgYnkgY2hlY2twYXRjaC5wbCB3aGljaCBjYXVzZWQgYnkKK2Fzc2lnbmluZyBhIHZhcmlhYmxlIGluIGFuIGlmIGNvbmRpdGlvbiBpbiB3Z19ub2lzZV9oYW5kc2hha2VfY29uc3VtZV8KK2luaXRpYXRpb24oKS4KKworU2lnbmVkLW9mZi1ieTogRnJhbmsgV2VybmVyLUtyaXBwZW5kb3JmIDxtYWlsQGhiOWZ4cS5jaD4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorU2lnbmVkLW9mZi1ieTogRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvbm9pc2UuYyB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9ub2lzZS5jCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvbm9pc2UuYworQEAgLTYxNyw4ICs2MTcsOCBAQCB3Z19ub2lzZV9oYW5kc2hha2VfY29uc3VtZV9pbml0aWF0aW9uKHN0CisgCW1lbWNweShoYW5kc2hha2UtPmhhc2gsIGhhc2gsIE5PSVNFX0hBU0hfTEVOKTsKKyAJbWVtY3B5KGhhbmRzaGFrZS0+Y2hhaW5pbmdfa2V5LCBjaGFpbmluZ19rZXksIE5PSVNFX0hBU0hfTEVOKTsKKyAJaGFuZHNoYWtlLT5yZW1vdGVfaW5kZXggPSBzcmMtPnNlbmRlcl9pbmRleDsKKy0JaWYgKChzNjQpKGhhbmRzaGFrZS0+bGFzdF9pbml0aWF0aW9uX2NvbnN1bXB0aW9uIC0KKy0JICAgIChpbml0aWF0aW9uX2NvbnN1bXB0aW9uID0ga3RpbWVfZ2V0X2NvYXJzZV9ib290dGltZV9ucygpKSkgPCAwKQorKwlpbml0aWF0aW9uX2NvbnN1bXB0aW9uID0ga3RpbWVfZ2V0X2NvYXJzZV9ib290dGltZV9ucygpOworKwlpZiAoKHM2NCkoaGFuZHNoYWtlLT5sYXN0X2luaXRpYXRpb25fY29uc3VtcHRpb24gLSBpbml0aWF0aW9uX2NvbnN1bXB0aW9uKSA8IDApCisgCQloYW5kc2hha2UtPmxhc3RfaW5pdGlhdGlvbl9jb25zdW1wdGlvbiA9IGluaXRpYXRpb25fY29uc3VtcHRpb247CisgCWhhbmRzaGFrZS0+c3RhdGUgPSBIQU5EU0hBS0VfQ09OU1VNRURfSU5JVElBVElPTjsKKyAJdXBfd3JpdGUoJmhhbmRzaGFrZS0+bG9jayk7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTA3LXdpcmVndWFyZC1kZXZpY2UtYXZvaWQtY2lyY3VsYXItbmV0bnMtcmVmZXJlbmNlcy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMDctd2lyZWd1YXJkLWRldmljZS1hdm9pZC1jaXJjdWxhci1uZXRucy1yZWZlcmVuY2VzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMzAyM2EKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTA3LXdpcmVndWFyZC1kZXZpY2UtYXZvaWQtY2lyY3VsYXItbmV0bnMtcmVmZXJlbmNlcy5wYXRjaApAQCAtMCwwICsxLDI5NiBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIkphc29uIEEuIERvbmVuZmVsZCIgPEphc29uQHp4MmM0LmNvbT4KK0RhdGU6IFR1ZSwgMjMgSnVuIDIwMjAgMDM6NTk6NDUgLTA2MDAKK1N1YmplY3Q6IFtQQVRDSF0gd2lyZWd1YXJkOiBkZXZpY2U6IGF2b2lkIGNpcmN1bGFyIG5ldG5zIHJlZmVyZW5jZXMKKworY29tbWl0IDkwMDU3NWFhMzNhM2VhYWVmODAyYjMxZGUxODdhODVjNGE0YjRiZDAgdXBzdHJlYW0uCisKK0JlZm9yZSwgd2UgdG9vayBhIHJlZmVyZW5jZSB0byB0aGUgY3JlYXRpbmcgbmV0bnMgaWYgdGhlIG5ldyBuZXRucyB3YXMKK2RpZmZlcmVudC4gVGhpcyBjYXVzZWQgaXNzdWVzIHdpdGggY2lyY3VsYXIgcmVmZXJlbmNlcywgd2l0aCB0d28KK3dpcmVndWFyZCBpbnRlcmZhY2VzIHN3YXBwaW5nIG5hbWVzcGFjZXMuIFRoZSBzb2x1dGlvbiBpcyB0byByYXRoZXIgbm90Cit0YWtlIGFueSBleHRyYSByZWZlcmVuY2VzIGF0IGFsbCwgYnV0IGluc3RlYWQgc2ltcGx5IGludmFsaWRhdGUgdGhlCitjcmVhdGluZyBuZXRucyBwb2ludGVyIHdoZW4gdGhhdCBuZXRucyBpcyBkZWxldGVkLgorCitJbiBvcmRlciB0byBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYWdhaW4sIHRoaXMgY29tbWl0IGltcHJvdmVzIHRoZQorcm91Z2ggb2JqZWN0IGxlYWsgdHJhY2tpbmcgYnkgYWxsb3dpbmcgaXQgdG8gYWNjb3VudCBmb3IgY3JlYXRlZCBhbmQKK2Rlc3Ryb3llZCBpbnRlcmZhY2VzLCBhc2lkZSBmcm9tIGp1c3QgcGVlcnMgYW5kIGtleXMuIFRoYXQgdGhlbiBtYWtlcyBpdAorcG9zc2libGUgdG8gY2hlY2sgZm9yIHRoZSBvYmplY3QgbGVhayB3aGVuIGhhdmluZyB0d28gaW50ZXJmYWNlcyB0YWtlIGEKK3JlZmVyZW5jZSB0byBlYWNoIG90aGVycycgbmFtZXNwYWNlcy4KKworRml4ZXM6IGU3MDk2YzEzMWU1MSAoIm5ldDogV2lyZUd1YXJkIHNlY3VyZSBuZXR3b3JrIHR1bm5lbCIpCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jICAgICAgICAgICAgIHwgNTggKysrKysrKysrKy0tLS0tLS0tLS0tLQorIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuaCAgICAgICAgICAgICB8ICAzICstCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYyAgICAgICAgICAgIHwgMTQgKysrKy0tCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NvY2tldC5jICAgICAgICAgICAgIHwgMjUgKysrKysrKy0tLQorIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9uZXRucy5zaCB8IDEzICsrKystCisgNSBmaWxlcyBjaGFuZ2VkLCA2NyBpbnNlcnRpb25zKCspLCA0NiBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmMKK0BAIC00NSwxNyArNDUsMTggQEAgc3RhdGljIGludCB3Z19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZQorIAlpZiAoZGV2X3Y2KQorIAkJZGV2X3Y2LT5jbmYuYWRkcl9nZW5fbW9kZSA9IElONl9BRERSX0dFTl9NT0RFX05PTkU7CisgCisrCW11dGV4X2xvY2soJndnLT5kZXZpY2VfdXBkYXRlX2xvY2spOworIAlyZXQgPSB3Z19zb2NrZXRfaW5pdCh3Zywgd2ctPmluY29taW5nX3BvcnQpOworIAlpZiAocmV0IDwgMCkKKy0JCXJldHVybiByZXQ7CistCW11dGV4X2xvY2soJndnLT5kZXZpY2VfdXBkYXRlX2xvY2spOworKwkJZ290byBvdXQ7CisgCWxpc3RfZm9yX2VhY2hfZW50cnkocGVlciwgJndnLT5wZWVyX2xpc3QsIHBlZXJfbGlzdCkgeworIAkJd2dfcGFja2V0X3NlbmRfc3RhZ2VkX3BhY2tldHMocGVlcik7CisgCQlpZiAocGVlci0+cGVyc2lzdGVudF9rZWVwYWxpdmVfaW50ZXJ2YWwpCisgCQkJd2dfcGFja2V0X3NlbmRfa2VlcGFsaXZlKHBlZXIpOworIAl9Cisrb3V0OgorIAltdXRleF91bmxvY2soJndnLT5kZXZpY2VfdXBkYXRlX2xvY2spOworLQlyZXR1cm4gMDsKKysJcmV0dXJuIHJldDsKKyB9CisgCisgI2lmZGVmIENPTkZJR19QTV9TTEVFUAorQEAgLTIyNSw2ICsyMjYsNyBAQCBzdGF0aWMgdm9pZCB3Z19kZXN0cnVjdChzdHJ1Y3QgbmV0X2RldmljCisgCWxpc3RfZGVsKCZ3Zy0+ZGV2aWNlX2xpc3QpOworIAlydG5sX3VubG9jaygpOworIAltdXRleF9sb2NrKCZ3Zy0+ZGV2aWNlX3VwZGF0ZV9sb2NrKTsKKysJcmN1X2Fzc2lnbl9wb2ludGVyKHdnLT5jcmVhdGluZ19uZXQsIE5VTEwpOworIAl3Zy0+aW5jb21pbmdfcG9ydCA9IDA7CisgCXdnX3NvY2tldF9yZWluaXQod2csIE5VTEwsIE5VTEwpOworIAkvKiBUaGUgZmluYWwgcmVmZXJlbmNlcyBhcmUgY2xlYXJlZCBpbiB0aGUgYmVsb3cgY2FsbHMgdG8gZGVzdHJveV93b3JrcXVldWUuICovCitAQCAtMjQwLDEzICsyNDIsMTEgQEAgc3RhdGljIHZvaWQgd2dfZGVzdHJ1Y3Qoc3RydWN0IG5ldF9kZXZpYworIAlza2JfcXVldWVfcHVyZ2UoJndnLT5pbmNvbWluZ19oYW5kc2hha2VzKTsKKyAJZnJlZV9wZXJjcHUoZGV2LT50c3RhdHMpOworIAlmcmVlX3BlcmNwdSh3Zy0+aW5jb21pbmdfaGFuZHNoYWtlc193b3JrZXIpOworLQlpZiAod2ctPmhhdmVfY3JlYXRpbmdfbmV0X3JlZikKKy0JCXB1dF9uZXQod2ctPmNyZWF0aW5nX25ldCk7CisgCWt2ZnJlZSh3Zy0+aW5kZXhfaGFzaHRhYmxlKTsKKyAJa3ZmcmVlKHdnLT5wZWVyX2hhc2h0YWJsZSk7CisgCW11dGV4X3VubG9jaygmd2ctPmRldmljZV91cGRhdGVfbG9jayk7CisgCistCXByX2RlYnVnKCIlczogSW50ZXJmYWNlIGRlbGV0ZWRcbiIsIGRldi0+bmFtZSk7CisrCXByX2RlYnVnKCIlczogSW50ZXJmYWNlIGRlc3Ryb3llZFxuIiwgZGV2LT5uYW1lKTsKKyAJZnJlZV9uZXRkZXYoZGV2KTsKKyB9CisgCitAQCAtMjkyLDcgKzI5Miw3IEBAIHN0YXRpYyBpbnQgd2dfbmV3bGluayhzdHJ1Y3QgbmV0ICpzcmNfbmUKKyAJc3RydWN0IHdnX2RldmljZSAqd2cgPSBuZXRkZXZfcHJpdihkZXYpOworIAlpbnQgcmV0ID0gLUVOT01FTTsKKyAKKy0Jd2ctPmNyZWF0aW5nX25ldCA9IHNyY19uZXQ7CisrCXJjdV9hc3NpZ25fcG9pbnRlcih3Zy0+Y3JlYXRpbmdfbmV0LCBzcmNfbmV0KTsKKyAJaW5pdF9yd3NlbSgmd2ctPnN0YXRpY19pZGVudGl0eS5sb2NrKTsKKyAJbXV0ZXhfaW5pdCgmd2ctPnNvY2tldF91cGRhdGVfbG9jayk7CisgCW11dGV4X2luaXQoJndnLT5kZXZpY2VfdXBkYXRlX2xvY2spOworQEAgLTM5MywzMCArMzkzLDI2IEBAIHN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBsaW5rX29wcyBfX3IKKyAJLm5ld2xpbmsJCT0gd2dfbmV3bGluaywKKyB9OworIAorLXN0YXRpYyBpbnQgd2dfbmV0ZGV2aWNlX25vdGlmaWNhdGlvbihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAorLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkYXRhKQorK3N0YXRpYyB2b2lkIHdnX25ldG5zX3ByZV9leGl0KHN0cnVjdCBuZXQgKm5ldCkKKyB7CistCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoKHN0cnVjdCBuZXRkZXZfbm90aWZpZXJfaW5mbyAqKWRhdGEpLT5kZXY7CistCXN0cnVjdCB3Z19kZXZpY2UgKndnID0gbmV0ZGV2X3ByaXYoZGV2KTsKKy0KKy0JQVNTRVJUX1JUTkwoKTsKKy0KKy0JaWYgKGFjdGlvbiAhPSBORVRERVZfUkVHSVNURVIgfHwgZGV2LT5uZXRkZXZfb3BzICE9ICZuZXRkZXZfb3BzKQorLQkJcmV0dXJuIDA7CisrCXN0cnVjdCB3Z19kZXZpY2UgKndnOworIAorLQlpZiAoZGV2X25ldChkZXYpID09IHdnLT5jcmVhdGluZ19uZXQgJiYgd2ctPmhhdmVfY3JlYXRpbmdfbmV0X3JlZikgeworLQkJcHV0X25ldCh3Zy0+Y3JlYXRpbmdfbmV0KTsKKy0JCXdnLT5oYXZlX2NyZWF0aW5nX25ldF9yZWYgPSBmYWxzZTsKKy0JfSBlbHNlIGlmIChkZXZfbmV0KGRldikgIT0gd2ctPmNyZWF0aW5nX25ldCAmJgorLQkJICAgIXdnLT5oYXZlX2NyZWF0aW5nX25ldF9yZWYpIHsKKy0JCXdnLT5oYXZlX2NyZWF0aW5nX25ldF9yZWYgPSB0cnVlOworLQkJZ2V0X25ldCh3Zy0+Y3JlYXRpbmdfbmV0KTsKKysJcnRubF9sb2NrKCk7CisrCWxpc3RfZm9yX2VhY2hfZW50cnkod2csICZkZXZpY2VfbGlzdCwgZGV2aWNlX2xpc3QpIHsKKysJCWlmIChyY3VfYWNjZXNzX3BvaW50ZXIod2ctPmNyZWF0aW5nX25ldCkgPT0gbmV0KSB7CisrCQkJcHJfZGVidWcoIiVzOiBDcmVhdGluZyBuYW1lc3BhY2UgZXhpdGluZ1xuIiwgd2ctPmRldi0+bmFtZSk7CisrCQkJbmV0aWZfY2Fycmllcl9vZmYod2ctPmRldik7CisrCQkJbXV0ZXhfbG9jaygmd2ctPmRldmljZV91cGRhdGVfbG9jayk7CisrCQkJcmN1X2Fzc2lnbl9wb2ludGVyKHdnLT5jcmVhdGluZ19uZXQsIE5VTEwpOworKwkJCXdnX3NvY2tldF9yZWluaXQod2csIE5VTEwsIE5VTEwpOworKwkJCW11dGV4X3VubG9jaygmd2ctPmRldmljZV91cGRhdGVfbG9jayk7CisrCQl9CisgCX0KKy0JcmV0dXJuIDA7CisrCXJ0bmxfdW5sb2NrKCk7CisgfQorIAorLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbmV0ZGV2aWNlX25vdGlmaWVyID0geworLQkubm90aWZpZXJfY2FsbCA9IHdnX25ldGRldmljZV9ub3RpZmljYXRpb24KKytzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHBlcm5ldF9vcHMgPSB7CisrCS5wcmVfZXhpdCA9IHdnX25ldG5zX3ByZV9leGl0CisgfTsKKyAKKyBpbnQgX19pbml0IHdnX2RldmljZV9pbml0KHZvaWQpCitAQCAtNDI5LDE4ICs0MjUsMTggQEAgaW50IF9faW5pdCB3Z19kZXZpY2VfaW5pdCh2b2lkKQorIAkJcmV0dXJuIHJldDsKKyAjZW5kaWYKKyAKKy0JcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZuZXRkZXZpY2Vfbm90aWZpZXIpOworKwlyZXQgPSByZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKCZwZXJuZXRfb3BzKTsKKyAJaWYgKHJldCkKKyAJCWdvdG8gZXJyb3JfcG07CisgCisgCXJldCA9IHJ0bmxfbGlua19yZWdpc3RlcigmbGlua19vcHMpOworIAlpZiAocmV0KQorLQkJZ290byBlcnJvcl9uZXRkZXZpY2U7CisrCQlnb3RvIGVycm9yX3Blcm5ldDsKKyAKKyAJcmV0dXJuIDA7CisgCistZXJyb3JfbmV0ZGV2aWNlOgorLQl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmbmV0ZGV2aWNlX25vdGlmaWVyKTsKKytlcnJvcl9wZXJuZXQ6CisrCXVucmVnaXN0ZXJfcGVybmV0X2RldmljZSgmcGVybmV0X29wcyk7CisgZXJyb3JfcG06CisgI2lmZGVmIENPTkZJR19QTV9TTEVFUAorIAl1bnJlZ2lzdGVyX3BtX25vdGlmaWVyKCZwbV9ub3RpZmllcik7CitAQCAtNDUxLDcgKzQ0Nyw3IEBAIGVycm9yX3BtOgorIHZvaWQgd2dfZGV2aWNlX3VuaW5pdCh2b2lkKQorIHsKKyAJcnRubF9saW5rX3VucmVnaXN0ZXIoJmxpbmtfb3BzKTsKKy0JdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJm5ldGRldmljZV9ub3RpZmllcik7CisrCXVucmVnaXN0ZXJfcGVybmV0X2RldmljZSgmcGVybmV0X29wcyk7CisgI2lmZGVmIENPTkZJR19QTV9TTEVFUAorIAl1bnJlZ2lzdGVyX3BtX25vdGlmaWVyKCZwbV9ub3RpZmllcik7CisgI2VuZGlmCistLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmgKKysrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuaAorQEAgLTQwLDcgKzQwLDcgQEAgc3RydWN0IHdnX2RldmljZSB7CisgCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisgCXN0cnVjdCBjcnlwdF9xdWV1ZSBlbmNyeXB0X3F1ZXVlLCBkZWNyeXB0X3F1ZXVlOworIAlzdHJ1Y3Qgc29jayBfX3JjdSAqc29jazQsICpzb2NrNjsKKy0Jc3RydWN0IG5ldCAqY3JlYXRpbmdfbmV0OworKwlzdHJ1Y3QgbmV0IF9fcmN1ICpjcmVhdGluZ19uZXQ7CisgCXN0cnVjdCBub2lzZV9zdGF0aWNfaWRlbnRpdHkgc3RhdGljX2lkZW50aXR5OworIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqaGFuZHNoYWtlX3JlY2VpdmVfd3EsICpoYW5kc2hha2Vfc2VuZF93cTsKKyAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnBhY2tldF9jcnlwdF93cTsKK0BAIC01Niw3ICs1Niw2IEBAIHN0cnVjdCB3Z19kZXZpY2UgeworIAl1bnNpZ25lZCBpbnQgbnVtX3BlZXJzLCBkZXZpY2VfdXBkYXRlX2dlbjsKKyAJdTMyIGZ3bWFyazsKKyAJdTE2IGluY29taW5nX3BvcnQ7CistCWJvb2wgaGF2ZV9jcmVhdGluZ19uZXRfcmVmOworIH07CisgCisgaW50IHdnX2RldmljZV9pbml0KHZvaWQpOworLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYworKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYworQEAgLTUxNywxMSArNTE3LDE1IEBAIHN0YXRpYyBpbnQgd2dfc2V0X2RldmljZShzdHJ1Y3Qgc2tfYnVmZgorIAlpZiAoZmxhZ3MgJiB+X19XR0RFVklDRV9GX0FMTCkKKyAJCWdvdG8gb3V0OworIAorLQlyZXQgPSAtRVBFUk07CistCWlmICgoaW5mby0+YXR0cnNbV0dERVZJQ0VfQV9MSVNURU5fUE9SVF0gfHwKKy0JICAgICBpbmZvLT5hdHRyc1tXR0RFVklDRV9BX0ZXTUFSS10pICYmCistCSAgICAhbnNfY2FwYWJsZSh3Zy0+Y3JlYXRpbmdfbmV0LT51c2VyX25zLCBDQVBfTkVUX0FETUlOKSkKKy0JCWdvdG8gb3V0OworKwlpZiAoaW5mby0+YXR0cnNbV0dERVZJQ0VfQV9MSVNURU5fUE9SVF0gfHwgaW5mby0+YXR0cnNbV0dERVZJQ0VfQV9GV01BUktdKSB7CisrCQlzdHJ1Y3QgbmV0ICpuZXQ7CisrCQlyY3VfcmVhZF9sb2NrKCk7CisrCQluZXQgPSByY3VfZGVyZWZlcmVuY2Uod2ctPmNyZWF0aW5nX25ldCk7CisrCQlyZXQgPSAhbmV0IHx8ICFuc19jYXBhYmxlKG5ldC0+dXNlcl9ucywgQ0FQX05FVF9BRE1JTikgPyAtRVBFUk0gOiAwOworKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisrCQlpZiAocmV0KQorKwkJCWdvdG8gb3V0OworKwl9CisgCisgCSsrd2ctPmRldmljZV91cGRhdGVfZ2VuOworIAorLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NvY2tldC5jCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvc29ja2V0LmMKK0BAIC0zNDcsNiArMzQ3LDcgQEAgc3RhdGljIHZvaWQgc2V0X3NvY2tfb3B0cyhzdHJ1Y3Qgc29ja2V0CisgCisgaW50IHdnX3NvY2tldF9pbml0KHN0cnVjdCB3Z19kZXZpY2UgKndnLCB1MTYgcG9ydCkKKyB7CisrCXN0cnVjdCBuZXQgKm5ldDsKKyAJaW50IHJldDsKKyAJc3RydWN0IHVkcF90dW5uZWxfc29ja19jZmcgY2ZnID0geworIAkJLnNrX3VzZXJfZGF0YSA9IHdnLAorQEAgLTM3MSwzNyArMzcyLDQ3IEBAIGludCB3Z19zb2NrZXRfaW5pdChzdHJ1Y3Qgd2dfZGV2aWNlICp3ZywKKyAJfTsKKyAjZW5kaWYKKyAKKysJcmN1X3JlYWRfbG9jaygpOworKwluZXQgPSByY3VfZGVyZWZlcmVuY2Uod2ctPmNyZWF0aW5nX25ldCk7CisrCW5ldCA9IG5ldCA/IG1heWJlX2dldF9uZXQobmV0KSA6IE5VTEw7CisrCXJjdV9yZWFkX3VubG9jaygpOworKwlpZiAodW5saWtlbHkoIW5ldCkpCisrCQlyZXR1cm4gLUVOT05FVDsKKysKKyAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKKyByZXRyeToKKyAjZW5kaWYKKyAKKy0JcmV0ID0gdWRwX3NvY2tfY3JlYXRlKHdnLT5jcmVhdGluZ19uZXQsICZwb3J0NCwgJm5ldzQpOworKwlyZXQgPSB1ZHBfc29ja19jcmVhdGUobmV0LCAmcG9ydDQsICZuZXc0KTsKKyAJaWYgKHJldCA8IDApIHsKKyAJCXByX2VycigiJXM6IENvdWxkIG5vdCBjcmVhdGUgSVB2NCBzb2NrZXRcbiIsIHdnLT5kZXYtPm5hbWUpOworLQkJcmV0dXJuIHJldDsKKysJCWdvdG8gb3V0OworIAl9CisgCXNldF9zb2NrX29wdHMobmV3NCk7CistCXNldHVwX3VkcF90dW5uZWxfc29jayh3Zy0+Y3JlYXRpbmdfbmV0LCBuZXc0LCAmY2ZnKTsKKysJc2V0dXBfdWRwX3R1bm5lbF9zb2NrKG5ldCwgbmV3NCwgJmNmZyk7CisgCisgI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCisgCWlmIChpcHY2X21vZF9lbmFibGVkKCkpIHsKKyAJCXBvcnQ2LmxvY2FsX3VkcF9wb3J0ID0gaW5ldF9zayhuZXc0LT5zayktPmluZXRfc3BvcnQ7CistCQlyZXQgPSB1ZHBfc29ja19jcmVhdGUod2ctPmNyZWF0aW5nX25ldCwgJnBvcnQ2LCAmbmV3Nik7CisrCQlyZXQgPSB1ZHBfc29ja19jcmVhdGUobmV0LCAmcG9ydDYsICZuZXc2KTsKKyAJCWlmIChyZXQgPCAwKSB7CisgCQkJdWRwX3R1bm5lbF9zb2NrX3JlbGVhc2UobmV3NCk7CisgCQkJaWYgKHJldCA9PSAtRUFERFJJTlVTRSAmJiAhcG9ydCAmJiByZXRyaWVzKysgPCAxMDApCisgCQkJCWdvdG8gcmV0cnk7CisgCQkJcHJfZXJyKCIlczogQ291bGQgbm90IGNyZWF0ZSBJUHY2IHNvY2tldFxuIiwKKyAJCQkgICAgICAgd2ctPmRldi0+bmFtZSk7CistCQkJcmV0dXJuIHJldDsKKysJCQlnb3RvIG91dDsKKyAJCX0KKyAJCXNldF9zb2NrX29wdHMobmV3Nik7CistCQlzZXR1cF91ZHBfdHVubmVsX3NvY2sod2ctPmNyZWF0aW5nX25ldCwgbmV3NiwgJmNmZyk7CisrCQlzZXR1cF91ZHBfdHVubmVsX3NvY2sobmV0LCBuZXc2LCAmY2ZnKTsKKyAJfQorICNlbmRpZgorIAorIAl3Z19zb2NrZXRfcmVpbml0KHdnLCBuZXc0LT5zaywgbmV3NiA/IG5ldzYtPnNrIDogTlVMTCk7CistCXJldHVybiAwOworKwlyZXQgPSAwOworK291dDoKKysJcHV0X25ldChuZXQpOworKwlyZXR1cm4gcmV0OworIH0KKyAKKyB2b2lkIHdnX3NvY2tldF9yZWluaXQoc3RydWN0IHdnX2RldmljZSAqd2csIHN0cnVjdCBzb2NrICpuZXc0LAorLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL25ldG5zLnNoCisrKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvbmV0bnMuc2gKK0BAIC01ODcsOSArNTg3LDIwIEBAIGlwMCBsaW5rIHNldCB3ZzAgdXAKKyBraWxsICRuY2F0X3BpZAorIGlwMCBsaW5rIGRlbCB3ZzAKKyAKKysjIEVuc3VyZSB0aGVyZSBhcmVuJ3QgY2lyY3VsYXIgcmVmZXJlbmNlIGxvb3BzCisraXAxIGxpbmsgYWRkIHdnMSB0eXBlIHdpcmVndWFyZAorK2lwMiBsaW5rIGFkZCB3ZzIgdHlwZSB3aXJlZ3VhcmQKKytpcDEgbGluayBzZXQgd2cxIG5ldG5zICRuZXRuczIKKytpcDIgbGluayBzZXQgd2cyIG5ldG5zICRuZXRuczEKKytwcCBpcCBuZXRucyBkZWxldGUgJG5ldG5zMQorK3BwIGlwIG5ldG5zIGRlbGV0ZSAkbmV0bnMyCisrcHAgaXAgbmV0bnMgYWRkICRuZXRuczEKKytwcCBpcCBuZXRucyBhZGQgJG5ldG5zMgorKworK3NsZWVwIDIgIyBXYWl0IGZvciBjbGVhbnVwIGFuZCBncmFjZSBwZXJpb2RzCisgZGVjbGFyZSAtQSBvYmplY3RzCisgd2hpbGUgcmVhZCAtdCAwLjEgLXIgbGluZSAyPi9kZXYvbnVsbCB8fCBbWyAkPyAtbmUgMTQyIF1dOyBkbworLQlbWyAkbGluZSA9fiAuKih3Z1swLTldKzpcIFtBLVpdW2Etel0rXCBbMC05XSspXCAuKihjcmVhdGVkfGRlc3Ryb3llZCkuKiBdXSB8fCBjb250aW51ZQorKwlbWyAkbGluZSA9fiAuKih3Z1swLTldKzpcIFtBLVpdW2Etel0rXCA/WzAtOV0qKVwgLiooY3JlYXRlZHxkZXN0cm95ZWQpLiogXV0gfHwgY29udGludWUKKyAJb2JqZWN0c1siJHtCQVNIX1JFTUFUQ0hbMV19Il0rPSIke0JBU0hfUkVNQVRDSFsyXX0iCisgZG9uZSA8IC9kZXYva21zZworIGFsbGRlbGV0ZWQ9MQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDEwOC13aXJlZ3VhcmQtcmVjZWl2ZS1hY2NvdW50LWZvci1uYXBpX2dyb19yZWNlaXZlLW5ldmVyLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDEwOC13aXJlZ3VhcmQtcmVjZWl2ZS1hY2NvdW50LWZvci1uYXBpX2dyb19yZWNlaXZlLW5ldmVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjZWIwYjkKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTA4LXdpcmVndWFyZC1yZWNlaXZlLWFjY291bnQtZm9yLW5hcGlfZ3JvX3JlY2VpdmUtbmV2ZXIucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIkphc29uIEEuIERvbmVuZmVsZCIgPEphc29uQHp4MmM0LmNvbT4KK0RhdGU6IFdlZCwgMjQgSnVuIDIwMjAgMTY6MDY6MDMgLTA2MDAKK1N1YmplY3Q6IFtQQVRDSF0gd2lyZWd1YXJkOiByZWNlaXZlOiBhY2NvdW50IGZvciBuYXBpX2dyb19yZWNlaXZlIG5ldmVyCisgcmV0dXJuaW5nIEdST19EUk9QCisKK2NvbW1pdCBkZjA4MTI2ZTM4MzNlOWRjYTE5ZTI0MDdkYjVmNTg2MGE3YzE5NGZiIHVwc3RyZWFtLgorCitUaGUgbmFwaV9ncm9fcmVjZWl2ZSBmdW5jdGlvbiBubyBsb25nZXIgcmV0dXJucyBHUk9fRFJPUCBldmVyLCBtYWtpbmcKK2hhbmRsaW5nIEdST19EUk9QIGRlYWQgY29kZS4gVGhpcyBjb21taXQgcmVtb3ZlcyB0aGF0IGRlYWQgY29kZS4KK0Z1cnRoZXIsIGl0J3Mgbm90IGV2ZW4gY2xlYXIgdGhhdCBkZXZpY2UgZHJpdmVycyBoYXZlIGFueSBidXNpbmVzcyBpbgordGFraW5nIGFjdGlvbiBhZnRlciBwYXNzaW5nIG9mZiByZWNlaXZlZCBwYWNrZXRzOyB0aGF0J3MgYXJndWFibHkgb3V0IG9mCit0aGVpciBoYW5kcy4KKworRml4ZXM6IGU3MDk2YzEzMWU1MSAoIm5ldDogV2lyZUd1YXJkIHNlY3VyZSBuZXR3b3JrIHR1bm5lbCIpCitGaXhlczogNjU3MGJjNzljMGRmICgibmV0OiBjb3JlOiB1c2UgbGlzdGlmaWVkIFJ4IGZvciBHUk9fTk9STUFMIGluIG5hcGlfZ3JvX3JlY2VpdmUoKSIpCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYyB8IDEwICsrLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCistLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jCitAQCAtNDE0LDE0ICs0MTQsOCBAQCBzdGF0aWMgdm9pZCB3Z19wYWNrZXRfY29uc3VtZV9kYXRhX2RvbmUoCisgCWlmICh1bmxpa2VseShyb3V0ZWRfcGVlciAhPSBwZWVyKSkKKyAJCWdvdG8gZGlzaG9uZXN0X3BhY2tldF9wZWVyOworIAorLQlpZiAodW5saWtlbHkobmFwaV9ncm9fcmVjZWl2ZSgmcGVlci0+bmFwaSwgc2tiKSA9PSBHUk9fRFJPUCkpIHsKKy0JCSsrZGV2LT5zdGF0cy5yeF9kcm9wcGVkOworLQkJbmV0X2RiZ19yYXRlbGltaXRlZCgiJXM6IEZhaWxlZCB0byBnaXZlIHBhY2tldCB0byB1c2Vyc3BhY2UgZnJvbSBwZWVyICVsbHUgKCVwSVNwZnNjKVxuIiwKKy0JCQkJICAgIGRldi0+bmFtZSwgcGVlci0+aW50ZXJuYWxfaWQsCistCQkJCSAgICAmcGVlci0+ZW5kcG9pbnQuYWRkcik7CistCX0gZWxzZSB7CistCQl1cGRhdGVfcnhfc3RhdHMocGVlciwgbWVzc2FnZV9kYXRhX2xlbihsZW5fYmVmb3JlX3RyaW0pKTsKKy0JfQorKwluYXBpX2dyb19yZWNlaXZlKCZwZWVyLT5uYXBpLCBza2IpOworKwl1cGRhdGVfcnhfc3RhdHMocGVlciwgbWVzc2FnZV9kYXRhX2xlbihsZW5fYmVmb3JlX3RyaW0pKTsKKyAJcmV0dXJuOworIAorIGRpc2hvbmVzdF9wYWNrZXRfcGVlcjoKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMDktbmV0LWlwX3R1bm5lbC1hZGQtaGVhZGVyX29wcy1mb3ItbGF5ZXItMy1kZXZpY2VzLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDEwOS1uZXQtaXBfdHVubmVsLWFkZC1oZWFkZXJfb3BzLWZvci1sYXllci0zLWRldmljZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZkNmIxNAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMDktbmV0LWlwX3R1bm5lbC1hZGQtaGVhZGVyX29wcy1mb3ItbGF5ZXItMy1kZXZpY2VzLnBhdGNoCkBAIC0wLDAgKzEsNTggQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJKYXNvbiBBLiBEb25lbmZlbGQiIDxKYXNvbkB6eDJjNC5jb20+CitEYXRlOiBNb24sIDI5IEp1biAyMDIwIDE5OjA2OjE4IC0wNjAwCitTdWJqZWN0OiBbUEFUQ0hdIG5ldDogaXBfdHVubmVsOiBhZGQgaGVhZGVyX29wcyBmb3IgbGF5ZXIgMyBkZXZpY2VzCisKK2NvbW1pdCAyNjA2YWZmOTE2ODU0YjYxMjM0YmY4NTAwMWJlOTc3N2JhYjJkNWY4IHVwc3RyZWFtLgorCitTb21lIGRldmljZXMgdGhhdCB0YWtlIHN0cmFpZ2h0IHVwIGxheWVyIDMgcGFja2V0cyBiZW5lZml0IGZyb20gaGF2aW5nIGEKK3NoYXJlZCBoZWFkZXJfb3BzIHNvIHRoYXQgQUZfUEFDS0VUIHNvY2tldHMgY2FuIGluamVjdCBwYWNrZXRzIHRoYXQgYXJlCityZWNvZ25pemVkLiBUaGlzIHNoYXJlZCBpbmZyYXN0cnVjdHVyZSB3aWxsIGJlIHVzZWQgYnkgb3RoZXIgZHJpdmVycwordGhhdCBjdXJyZW50bHkgY2FuJ3QgaW5qZWN0IHBhY2tldHMgdXNpbmcgQUZfUEFDS0VULiBJdCBhbHNvIGV4cG9zZXMgdGhlCitwYXJzZXIgZnVuY3Rpb24sIGFzIGl0IGlzIHVzZWZ1bCBpbiBzdGFuZGFsb25lIGZvcm0gdG9vLgorCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KK0Fja2VkLWJ5OiBXaWxsZW0gZGUgQnJ1aWpuIDx3aWxsZW1iQGdvb2dsZS5jb20+CitTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaCAgfCAgMyArKysKKyBuZXQvaXB2NC9pcF90dW5uZWxfY29yZS5jIHwgMTggKysrKysrKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspCisKKy0tLSBhL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaAorKysrIGIvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oCitAQCAtMjg5LDYgKzI4OSw5IEBAIGludCBpcF90dW5uZWxfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZQorIAkJICAgICAgc3RydWN0IGlwX3R1bm5lbF9wYXJtICpwLCBfX3UzMiBmd21hcmspOworIHZvaWQgaXBfdHVubmVsX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBuZXRfaWQpOworIAorK2V4dGVybiBjb25zdCBzdHJ1Y3QgaGVhZGVyX29wcyBpcF90dW5uZWxfaGVhZGVyX29wczsKKytfX2JlMTYgaXBfdHVubmVsX3BhcnNlX3Byb3RvY29sKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpOworKworIHN0cnVjdCBpcF90dW5uZWxfZW5jYXBfb3BzIHsKKyAJc2l6ZV90ICgqZW5jYXBfaGxlbikoc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSk7CisgCWludCAoKmJ1aWxkX2hlYWRlcikoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZSwKKy0tLSBhL25ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMKKysrKyBiL25ldC9pcHY0L2lwX3R1bm5lbF9jb3JlLmMKK0BAIC00NDYsMyArNDQ2LDIxIEBAIHZvaWQgaXBfdHVubmVsX3VubmVlZF9tZXRhZGF0YSh2b2lkKQorIAlzdGF0aWNfYnJhbmNoX2RlYygmaXBfdHVubmVsX21ldGFkYXRhX2NudCk7CisgfQorIEVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF91bm5lZWRfbWV0YWRhdGEpOworKworKy8qIFJldHVybnMgZWl0aGVyIHRoZSBjb3JyZWN0IHNrYi0+cHJvdG9jb2wgdmFsdWUsIG9yIDAgaWYgaW52YWxpZC4gKi8KKytfX2JlMTYgaXBfdHVubmVsX3BhcnNlX3Byb3RvY29sKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCisreworKwlpZiAoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgPj0gc2tiLT5oZWFkICYmCisrCSAgICAoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBzaXplb2Yoc3RydWN0IGlwaGRyKSkgPD0gc2tiX3RhaWxfcG9pbnRlcihza2IpICYmCisrCSAgICBpcF9oZHIoc2tiKS0+dmVyc2lvbiA9PSA0KQorKwkJcmV0dXJuIGh0b25zKEVUSF9QX0lQKTsKKysJaWYgKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpID49IHNrYi0+aGVhZCAmJgorKwkgICAgKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkgPD0gc2tiX3RhaWxfcG9pbnRlcihza2IpICYmCisrCSAgICBpcHY2X2hkcihza2IpLT52ZXJzaW9uID09IDYpCisrCQlyZXR1cm4gaHRvbnMoRVRIX1BfSVBWNik7CisrCXJldHVybiAwOworK30KKytFWFBPUlRfU1lNQk9MKGlwX3R1bm5lbF9wYXJzZV9wcm90b2NvbCk7CisrCisrY29uc3Qgc3RydWN0IGhlYWRlcl9vcHMgaXBfdHVubmVsX2hlYWRlcl9vcHMgPSB7IC5wYXJzZV9wcm90b2NvbCA9IGlwX3R1bm5lbF9wYXJzZV9wcm90b2NvbCB9OworK0VYUE9SVF9TWU1CT0woaXBfdHVubmVsX2hlYWRlcl9vcHMpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDExMC13aXJlZ3VhcmQtaW1wbGVtZW50LWhlYWRlcl9vcHMtcGFyc2VfcHJvdG9jb2wtZm9yLUFGLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDExMC13aXJlZ3VhcmQtaW1wbGVtZW50LWhlYWRlcl9vcHMtcGFyc2VfcHJvdG9jb2wtZm9yLUFGLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNWVjZmYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTEwLXdpcmVndWFyZC1pbXBsZW1lbnQtaGVhZGVyX29wcy1wYXJzZV9wcm90b2NvbC1mb3ItQUYucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIkphc29uIEEuIERvbmVuZmVsZCIgPEphc29uQHp4MmM0LmNvbT4KK0RhdGU6IE1vbiwgMjkgSnVuIDIwMjAgMTk6MDY6MjAgLTA2MDAKK1N1YmplY3Q6IFtQQVRDSF0gd2lyZWd1YXJkOiBpbXBsZW1lbnQgaGVhZGVyX29wcy0+cGFyc2VfcHJvdG9jb2wgZm9yIEFGX1BBQ0tFVAorCitjb21taXQgMDFhNDk2N2M3MWMwMDRmOGVjYWQ0YWI1NzAyMTM0ODYzNjUwMmZhOSB1cHN0cmVhbS4KKworV2lyZUd1YXJkIHVzZXMgc2tiLT5wcm90b2NvbCB0byBkZXRlcm1pbmUgcGFja2V0IHR5cGUsIGFuZCBiYWlscyBvdXQgaWYKK2l0J3Mgbm90IHNldCBvciBzZXQgdG8gc29tZXRoaW5nIGl0J3Mgbm90IGV4cGVjdGluZy4gRm9yIEFGX1BBQ0tFVAoraW5qZWN0aW9uLCB3ZSBuZWVkIHRvIHN1cHBvcnQgaXRzIGNhbGwgY2hhaW4gb2Y6CisKKyAgICBwYWNrZXRfc2VuZG1zZyAtPiBwYWNrZXRfc25kIC0+IHBhY2tldF9wYXJzZV9oZWFkZXJzIC0+CisgICAgICBkZXZfcGFyc2VfaGVhZGVyX3Byb3RvY29sIC0+IHBhcnNlX3Byb3RvY29sCisKK1dpdGhvdXQgYSB2YWxpZCBwYXJzZV9wcm90b2NvbCwgdGhpcyByZXR1cm5zIHplcm8sIGFuZCB3aXJlZ3VhcmQgdGhlbgorcmVqZWN0cyB0aGUgc2tiLiBTbywgdGhpcyB3aXJlcyB1cCB0aGUgaXBfdHVubmVsIGhhbmRsZXIgZm9yIGxheWVyIDMKK3BhY2tldHMgZm9yIHRoYXQgY2FzZS4KKworUmVwb3J0ZWQtYnk6IEhhbnMgV2lwcGVsIDxuZGV2QGh3aXBsLm5ldD4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorU2lnbmVkLW9mZi1ieTogRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmMgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmMKK0BAIC0yNjIsNiArMjYyLDcgQEAgc3RhdGljIHZvaWQgd2dfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKgorIAkJCSAgICAgbWF4KHNpemVvZihzdHJ1Y3QgaXB2NmhkciksIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTsKKyAKKyAJZGV2LT5uZXRkZXZfb3BzID0gJm5ldGRldl9vcHM7CisrCWRldi0+aGVhZGVyX29wcyA9ICZpcF90dW5uZWxfaGVhZGVyX29wczsKKyAJZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSAwOworIAlkZXYtPmFkZHJfbGVuID0gMDsKKyAJZGV2LT5uZWVkZWRfaGVhZHJvb20gPSBEQVRBX1BBQ0tFVF9IRUFEX1JPT007CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTExLXdpcmVndWFyZC1xdWV1ZWluZy1tYWtlLXVzZS1vZi1pcF90dW5uZWxfcGFyc2VfcHJvdG8ucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTExLXdpcmVndWFyZC1xdWV1ZWluZy1tYWtlLXVzZS1vZi1pcF90dW5uZWxfcGFyc2VfcHJvdG8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc3NzczMgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMTEtd2lyZWd1YXJkLXF1ZXVlaW5nLW1ha2UtdXNlLW9mLWlwX3R1bm5lbF9wYXJzZV9wcm90by5wYXRjaApAQCAtMCwwICsxLDY4IEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogTW9uLCAyOSBKdW4gMjAyMCAxOTowNjoyMSAtMDYwMAorU3ViamVjdDogW1BBVENIXSB3aXJlZ3VhcmQ6IHF1ZXVlaW5nOiBtYWtlIHVzZSBvZiBpcF90dW5uZWxfcGFyc2VfcHJvdG9jb2wKKworY29tbWl0IDFhNTc0MDc0YWU3ZDFkNzQ1YzE2Zjc3MTA2NTVmMzhhNTMxNzRjMjcgdXBzdHJlYW0uCisKK05vdyB0aGF0IHdnX2V4YW1pbmVfcGFja2V0X3Byb3RvY29sIGhhcyBiZWVuIGFkZGVkIGZvciBnZW5lcmFsCitjb25zdW1wdGlvbiBhcyBpcF90dW5uZWxfcGFyc2VfcHJvdG9jb2wsIGl0J3MgcG9zc2libGUgdG8gcmVtb3ZlCit3Z19leGFtaW5lX3BhY2tldF9wcm90b2NvbCBhbmQgc2ltcGx5IHVzZSB0aGUgbmV3CitpcF90dW5uZWxfcGFyc2VfcHJvdG9jb2wgZnVuY3Rpb24gZGlyZWN0bHkuCisKK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorU2lnbmVkLW9mZi1ieTogRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaCB8IDE5ICsrLS0tLS0tLS0tLS0tLS0tLS0KKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcmVjZWl2ZS5jICB8ICAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDE4IGRlbGV0aW9ucygtKQorCistLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuaAorKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmgKK0BAIC0xMSw2ICsxMSw3IEBACisgI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorICNpbmNsdWRlIDxsaW51eC9pcC5oPgorICNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CisrI2luY2x1ZGUgPG5ldC9pcF90dW5uZWxzLmg+CisgCisgc3RydWN0IHdnX2RldmljZTsKKyBzdHJ1Y3Qgd2dfcGVlcjsKK0BAIC02NSwyNSArNjYsOSBAQCBzdHJ1Y3QgcGFja2V0X2NiIHsKKyAjZGVmaW5lIFBBQ0tFVF9DQihza2IpICgoc3RydWN0IHBhY2tldF9jYiAqKSgoc2tiKS0+Y2IpKQorICNkZWZpbmUgUEFDS0VUX1BFRVIoc2tiKSAoUEFDS0VUX0NCKHNrYiktPmtleXBhaXItPmVudHJ5LnBlZXIpCisgCistLyogUmV0dXJucyBlaXRoZXIgdGhlIGNvcnJlY3Qgc2tiLT5wcm90b2NvbCB2YWx1ZSwgb3IgMCBpZiBpbnZhbGlkLiAqLworLXN0YXRpYyBpbmxpbmUgX19iZTE2IHdnX2V4YW1pbmVfcGFja2V0X3Byb3RvY29sKHN0cnVjdCBza19idWZmICpza2IpCisteworLQlpZiAoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgPj0gc2tiLT5oZWFkICYmCistCSAgICAoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBzaXplb2Yoc3RydWN0IGlwaGRyKSkgPD0KKy0JCSAgICBza2JfdGFpbF9wb2ludGVyKHNrYikgJiYKKy0JICAgIGlwX2hkcihza2IpLT52ZXJzaW9uID09IDQpCistCQlyZXR1cm4gaHRvbnMoRVRIX1BfSVApOworLQlpZiAoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgPj0gc2tiLT5oZWFkICYmCistCSAgICAoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKSA8PQorLQkJICAgIHNrYl90YWlsX3BvaW50ZXIoc2tiKSAmJgorLQkgICAgaXB2Nl9oZHIoc2tiKS0+dmVyc2lvbiA9PSA2KQorLQkJcmV0dXJuIGh0b25zKEVUSF9QX0lQVjYpOworLQlyZXR1cm4gMDsKKy19CistCisgc3RhdGljIGlubGluZSBib29sIHdnX2NoZWNrX3BhY2tldF9wcm90b2NvbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorIHsKKy0JX19iZTE2IHJlYWxfcHJvdG9jb2wgPSB3Z19leGFtaW5lX3BhY2tldF9wcm90b2NvbChza2IpOworKwlfX2JlMTYgcmVhbF9wcm90b2NvbCA9IGlwX3R1bm5lbF9wYXJzZV9wcm90b2NvbChza2IpOworIAlyZXR1cm4gcmVhbF9wcm90b2NvbCAmJiBza2ItPnByb3RvY29sID09IHJlYWxfcHJvdG9jb2w7CisgfQorIAorLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYworKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYworQEAgLTM4Nyw3ICszODcsNyBAQCBzdGF0aWMgdm9pZCB3Z19wYWNrZXRfY29uc3VtZV9kYXRhX2RvbmUoCisgCSAqLworIAlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworIAlza2ItPmNzdW1fbGV2ZWwgPSB+MDsgLyogQWxsIGxldmVscyAqLworLQlza2ItPnByb3RvY29sID0gd2dfZXhhbWluZV9wYWNrZXRfcHJvdG9jb2woc2tiKTsKKysJc2tiLT5wcm90b2NvbCA9IGlwX3R1bm5lbF9wYXJzZV9wcm90b2NvbChza2IpOworIAlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHsKKyAJCWxlbiA9IG50b2hzKGlwX2hkcihza2IpLT50b3RfbGVuKTsKKyAJCWlmICh1bmxpa2VseShsZW4gPCBzaXplb2Yoc3RydWN0IGlwaGRyKSkpCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTEyLW5ldGxpbmstY29uc2lzdGVudGx5LXVzZS1OTEFfUE9MSUNZX0VYQUNUX0xFTi5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMTItbmV0bGluay1jb25zaXN0ZW50bHktdXNlLU5MQV9QT0xJQ1lfRVhBQ1RfTEVOLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMjcxMmIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTEyLW5ldGxpbmstY29uc2lzdGVudGx5LXVzZS1OTEFfUE9MSUNZX0VYQUNUX0xFTi5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lcy5iZXJnQGludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMTggQXVnIDIwMjAgMTA6MTc6MzEgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gbmV0bGluazogY29uc2lzdGVudGx5IHVzZSBOTEFfUE9MSUNZX0VYQUNUX0xFTigpCisKK2NvbW1pdCA4MTQwODYwYzgxN2YzZTlmNzhiY2QxZTQyMGI5Nzc3ZGRjYmFhNjI5IHVwc3RyZWFtLgorCitDaGFuZ2UgcGxhY2VzIHRoYXQgb3Blbi1jb2RlIE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKCkgdG8KK3VzZSB0aGUgbWFjcm8gaW5zdGVhZCwgZ2l2aW5nIHVzIGZsZXhpYmlsaXR5IGluIGhvdyB3ZQoraGFuZGxlIHRoZSBkZXRhaWxzIG9mIHRoZSBtYWNyby4KKworU2lnbmVkLW9mZi1ieTogSm9oYW5uZXMgQmVyZyA8am9oYW5uZXMuYmVyZ0BpbnRlbC5jb20+CitBY2tlZC1ieTogTWF0dGhpZXUgQmFlcnRzIDxtYXR0aGlldS5iYWVydHNAdGVzc2FyZXMubmV0PgorU2lnbmVkLW9mZi1ieTogRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorW0phc29uOiBvbmx5IHBpY2tlZCB0aGUgZHJpdmVycy9uZXQvd2lyZWd1YXJkLyogcGFydF0KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYyB8IDEwICsrKysrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCistLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvbmV0bGluay5jCitAQCAtMjIsOCArMjIsOCBAQCBzdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IGdlbmxfZmFtaWx5OworIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBkZXZpY2VfcG9saWN5W1dHREVWSUNFX0FfTUFYICsgMV0gPSB7CisgCVtXR0RFVklDRV9BX0lGSU5ERVhdCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCisgCVtXR0RFVklDRV9BX0lGTkFNRV0JCT0geyAudHlwZSA9IE5MQV9OVUxfU1RSSU5HLCAubGVuID0gSUZOQU1TSVogLSAxIH0sCistCVtXR0RFVklDRV9BX1BSSVZBVEVfS0VZXQk9IHsgLnR5cGUgPSBOTEFfRVhBQ1RfTEVOLCAubGVuID0gTk9JU0VfUFVCTElDX0tFWV9MRU4gfSwKKy0JW1dHREVWSUNFX0FfUFVCTElDX0tFWV0JCT0geyAudHlwZSA9IE5MQV9FWEFDVF9MRU4sIC5sZW4gPSBOT0lTRV9QVUJMSUNfS0VZX0xFTiB9LAorKwlbV0dERVZJQ0VfQV9QUklWQVRFX0tFWV0JPSBOTEFfUE9MSUNZX0VYQUNUX0xFTihOT0lTRV9QVUJMSUNfS0VZX0xFTiksCisrCVtXR0RFVklDRV9BX1BVQkxJQ19LRVldCQk9IE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKE5PSVNFX1BVQkxJQ19LRVlfTEVOKSwKKyAJW1dHREVWSUNFX0FfRkxBR1NdCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCisgCVtXR0RFVklDRV9BX0xJU1RFTl9QT1JUXQk9IHsgLnR5cGUgPSBOTEFfVTE2IH0sCisgCVtXR0RFVklDRV9BX0ZXTUFSS10JCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKK0BAIC0zMSwxMiArMzEsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGRldmljZV9wbworIH07CisgCisgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHBlZXJfcG9saWN5W1dHUEVFUl9BX01BWCArIDFdID0geworLQlbV0dQRUVSX0FfUFVCTElDX0tFWV0JCQkJPSB7IC50eXBlID0gTkxBX0VYQUNUX0xFTiwgLmxlbiA9IE5PSVNFX1BVQkxJQ19LRVlfTEVOIH0sCistCVtXR1BFRVJfQV9QUkVTSEFSRURfS0VZXQkJCT0geyAudHlwZSA9IE5MQV9FWEFDVF9MRU4sIC5sZW4gPSBOT0lTRV9TWU1NRVRSSUNfS0VZX0xFTiB9LAorKwlbV0dQRUVSX0FfUFVCTElDX0tFWV0JCQkJPSBOTEFfUE9MSUNZX0VYQUNUX0xFTihOT0lTRV9QVUJMSUNfS0VZX0xFTiksCisrCVtXR1BFRVJfQV9QUkVTSEFSRURfS0VZXQkJCT0gTkxBX1BPTElDWV9FWEFDVF9MRU4oTk9JU0VfU1lNTUVUUklDX0tFWV9MRU4pLAorIAlbV0dQRUVSX0FfRkxBR1NdCQkJCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKKyAJW1dHUEVFUl9BX0VORFBPSU5UXQkJCQk9IHsgLnR5cGUgPSBOTEFfTUlOX0xFTiwgLmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpIH0sCisgCVtXR1BFRVJfQV9QRVJTSVNURU5UX0tFRVBBTElWRV9JTlRFUlZBTF0JPSB7IC50eXBlID0gTkxBX1UxNiB9LAorLQlbV0dQRUVSX0FfTEFTVF9IQU5EU0hBS0VfVElNRV0JCQk9IHsgLnR5cGUgPSBOTEFfRVhBQ1RfTEVOLCAubGVuID0gc2l6ZW9mKHN0cnVjdCBfX2tlcm5lbF90aW1lc3BlYykgfSwKKysJW1dHUEVFUl9BX0xBU1RfSEFORFNIQUtFX1RJTUVdCQkJPSBOTEFfUE9MSUNZX0VYQUNUX0xFTihzaXplb2Yoc3RydWN0IF9fa2VybmVsX3RpbWVzcGVjKSksCisgCVtXR1BFRVJfQV9SWF9CWVRFU10JCQkJPSB7IC50eXBlID0gTkxBX1U2NCB9LAorIAlbV0dQRUVSX0FfVFhfQllURVNdCQkJCT0geyAudHlwZSA9IE5MQV9VNjQgfSwKKyAJW1dHUEVFUl9BX0FMTE9XRURJUFNdCQkJCT0geyAudHlwZSA9IE5MQV9ORVNURUQgfSwKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMTMtbmV0bGluay1jb25zaXN0ZW50bHktdXNlLU5MQV9QT0xJQ1lfTUlOX0xFTi5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMTMtbmV0bGluay1jb25zaXN0ZW50bHktdXNlLU5MQV9QT0xJQ1lfTUlOX0xFTi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjQxNGJjCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDExMy1uZXRsaW5rLWNvbnNpc3RlbnRseS11c2UtTkxBX1BPTElDWV9NSU5fTEVOLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpvaGFubmVzIEJlcmcgPGpvaGFubmVzLmJlcmdAaW50ZWwuY29tPgorRGF0ZTogVHVlLCAxOCBBdWcgMjAyMCAxMDoxNzozMiArMDIwMAorU3ViamVjdDogW1BBVENIXSBuZXRsaW5rOiBjb25zaXN0ZW50bHkgdXNlIE5MQV9QT0xJQ1lfTUlOX0xFTigpCisKK2NvbW1pdCBiYzA0MzU4NTUwNDFkN2ZmZjBiODNkZDk5MmZjNGJlMzRhYTExYWZiIHVwc3RyZWFtLgorCitDaGFuZ2UgcGxhY2VzIHRoYXQgb3Blbi1jb2RlIE5MQV9QT0xJQ1lfTUlOX0xFTigpIHRvCit1c2UgdGhlIG1hY3JvIGluc3RlYWQsIGdpdmluZyB1cyBmbGV4aWJpbGl0eSBpbiBob3cgd2UKK2hhbmRsZSB0aGUgZGV0YWlscyBvZiB0aGUgbWFjcm8uCisKK1NpZ25lZC1vZmYtYnk6IEpvaGFubmVzIEJlcmcgPGpvaGFubmVzLmJlcmdAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorW0phc29uOiBvbmx5IHBpY2tlZCB0aGUgZHJpdmVycy9uZXQvd2lyZWd1YXJkLyogcGFydF0KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL25ldGxpbmsuYyB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmMKKysrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9uZXRsaW5rLmMKK0BAIC0zNCw3ICszNCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBwZWVyX3BvbGkKKyAJW1dHUEVFUl9BX1BVQkxJQ19LRVldCQkJCT0gTkxBX1BPTElDWV9FWEFDVF9MRU4oTk9JU0VfUFVCTElDX0tFWV9MRU4pLAorIAlbV0dQRUVSX0FfUFJFU0hBUkVEX0tFWV0JCQk9IE5MQV9QT0xJQ1lfRVhBQ1RfTEVOKE5PSVNFX1NZTU1FVFJJQ19LRVlfTEVOKSwKKyAJW1dHUEVFUl9BX0ZMQUdTXQkJCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCistCVtXR1BFRVJfQV9FTkRQT0lOVF0JCQkJPSB7IC50eXBlID0gTkxBX01JTl9MRU4sIC5sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSB9LAorKwlbV0dQRUVSX0FfRU5EUE9JTlRdCQkJCT0gTkxBX1BPTElDWV9NSU5fTEVOKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKSwKKyAJW1dHUEVFUl9BX1BFUlNJU1RFTlRfS0VFUEFMSVZFX0lOVEVSVkFMXQk9IHsgLnR5cGUgPSBOTEFfVTE2IH0sCisgCVtXR1BFRVJfQV9MQVNUX0hBTkRTSEFLRV9USU1FXQkJCT0gTkxBX1BPTElDWV9FWEFDVF9MRU4oc2l6ZW9mKHN0cnVjdCBfX2tlcm5lbF90aW1lc3BlYykpLAorIAlbV0dQRUVSX0FfUlhfQllURVNdCQkJCT0geyAudHlwZSA9IE5MQV9VNjQgfSwKK0BAIC00NSw3ICs0NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBwZWVyX3BvbGkKKyAKKyBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgYWxsb3dlZGlwX3BvbGljeVtXR0FMTE9XRURJUF9BX01BWCArIDFdID0geworIAlbV0dBTExPV0VESVBfQV9GQU1JTFldCQk9IHsgLnR5cGUgPSBOTEFfVTE2IH0sCistCVtXR0FMTE9XRURJUF9BX0lQQUREUl0JCT0geyAudHlwZSA9IE5MQV9NSU5fTEVOLCAubGVuID0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSB9LAorKwlbV0dBTExPV0VESVBfQV9JUEFERFJdCQk9IE5MQV9QT0xJQ1lfTUlOX0xFTihzaXplb2Yoc3RydWN0IGluX2FkZHIpKSwKKyAJW1dHQUxMT1dFRElQX0FfQ0lEUl9NQVNLXQk9IHsgLnR5cGUgPSBOTEFfVTggfQorIH07CisgCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTE0LXdpcmVndWFyZC1ub2lzZS10YWtlLWxvY2std2hlbi1yZW1vdmluZy1oYW5kc2hha2UtZW4ucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTE0LXdpcmVndWFyZC1ub2lzZS10YWtlLWxvY2std2hlbi1yZW1vdmluZy1oYW5kc2hha2UtZW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgwNTI4YwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMTQtd2lyZWd1YXJkLW5vaXNlLXRha2UtbG9jay13aGVuLXJlbW92aW5nLWhhbmRzaGFrZS1lbi5wYXRjaApAQCAtMCwwICsxLDEyNyBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIkphc29uIEEuIERvbmVuZmVsZCIgPEphc29uQHp4MmM0LmNvbT4KK0RhdGU6IFdlZCwgOSBTZXAgMjAyMCAxMzo1ODoxNCArMDIwMAorU3ViamVjdDogW1BBVENIXSB3aXJlZ3VhcmQ6IG5vaXNlOiB0YWtlIGxvY2sgd2hlbiByZW1vdmluZyBoYW5kc2hha2UgZW50cnkKKyBmcm9tIHRhYmxlCisKK2NvbW1pdCA5MTc5YmEzMTM2N2JjZjQ4MWMzYzc5YjVmMDI4Yzk0ZmFhZDlmMzBhIHVwc3RyZWFtLgorCitFcmljIHJlcG9ydGVkIHRoYXQgc3l6a2FsbGVyIGZvdW5kIGEgcmFjZSBvZiB0aGlzIHZhcmlldHk6CisKK0NQVSAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BVIDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3Z19pbmRleF9oYXNodGFibGVfcmVwbGFjZShvbGQsIC4uLikgICAgICAgfAorICBpZiAoaGxpc3RfdW5oYXNoZWQoJm9sZC0+aW5kZXhfaGFzaCkpICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdnX2luZGV4X2hhc2h0YWJsZV9yZW1vdmUob2xkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBobGlzdF9kZWxfaW5pdF9yY3UoJm9sZC0+aW5kZXhfaGFzaCkKKwkJCQkgICAgICAgICAgIHwgICAgIG9sZC0+aW5kZXhfaGFzaC5wcHJldiA9IE5VTEwKKyAgaGxpc3RfcmVwbGFjZV9yY3UoJm9sZC0+aW5kZXhfaGFzaCwgLi4uKSB8CisgICAgKm9sZC0+aW5kZXhfaGFzaC5wcHJldiAgICAgICAgICAgICAgICAgfAorCitTeXpib3Qgd2Fzbid0IGFjdHVhbGx5IGFibGUgdG8gcmVwcm9kdWNlIHRoaXMgbW9yZSB0aGFuIG9uY2Ugb3IgY3JlYXRlIGEKK3JlcHJvZHVjZXIsIGJlY2F1c2UgdGhlIHJhY2Ugd2luZG93IGJldHdlZW4gY2hlY2tpbmcgImhsaXN0X3VuaGFzaGVkIiBhbmQKK2NhbGxpbmcgImhsaXN0X3JlcGxhY2VfcmN1IiBpcyBqdXN0IHNvIHNtYWxsLiBBZGRpbmcgYW4gbWRlbGF5KDUpIG9yCitzaW1pbGFyIHRoZXJlIGhlbHBzIG1ha2UgdGhpcyBkZW1vbnN0cmFibGUgdXNpbmcgdGhpcyBzaW1wbGUgc2NyaXB0OgorCisgICAgIyEvYmluL2Jhc2gKKyAgICBzZXQgLWV4CisgICAgdHJhcCAna2lsbCAkcGlkMTsga2lsbCAkcGlkMjsgaXAgbGluayBkZWwgd2cwOyBpcCBsaW5rIGRlbCB3ZzEnIEVYSVQKKyAgICBpcCBsaW5rIGFkZCB3ZzAgdHlwZSB3aXJlZ3VhcmQKKyAgICBpcCBsaW5rIGFkZCB3ZzEgdHlwZSB3aXJlZ3VhcmQKKyAgICB3ZyBzZXQgd2cwIHByaXZhdGUta2V5IDwod2cgZ2Vua2V5KSBsaXN0ZW4tcG9ydCA5OTk5CisgICAgd2cgc2V0IHdnMSBwcml2YXRlLWtleSA8KHdnIGdlbmtleSkgcGVlciAkKHdnIHNob3cgd2cwIHB1YmxpYy1rZXkpIGVuZHBvaW50IDEyNy4wLjAuMTo5OTk5IHBlcnNpc3RlbnQta2VlcGFsaXZlIDEKKyAgICB3ZyBzZXQgd2cwIHBlZXIgJCh3ZyBzaG93IHdnMSBwdWJsaWMta2V5KQorICAgIGlwIGxpbmsgc2V0IHdnMCB1cAorICAgIHllcyBsaW5rIHNldCB3ZzEgdXAgfCBpcCAtZm9yY2UgLWJhdGNoIC0gJgorICAgIHBpZDE9JCEKKyAgICB5ZXMgbGluayBzZXQgd2cxIGRvd24gfCBpcCAtZm9yY2UgLWJhdGNoIC0gJgorICAgIHBpZDI9JCEKKyAgICB3YWl0CisKK1RoZSBmdW5kdW1lbnRhbCB1bmRlcmx5aW5nIHByb2JsZW0gaXMgdGhhdCB3ZSBwZXJtaXQgY2FsbHMgdG8gd2dfaW5kZXhfCitoYXNodGFibGVfcmVtb3ZlKGhhbmRzaGFrZS5lbnRyeSkgd2l0aG91dCByZXF1aXJpbmcgdGhlIGNhbGxlciB0byB0YWtlCit0aGUgaGFuZHNoYWtlIG11dGV4IHRoYXQgaXMgaW50ZW5kZWQgdG8gcHJvdGVjdCBtZW1iZXJzIG9mIGhhbmRzaGFrZQorZHVyaW5nIG11dGF0aW9ucy4gVGhpcyBpcyBjb25zaXN0ZW50bHkgdGhlIGNhc2Ugd2l0aCBjYWxscyB0byB3Z19pbmRleF8KK2hhc2h0YWJsZV9pbnNlcnQoaGFuZHNoYWtlLmVudHJ5KSBhbmQgd2dfaW5kZXhfaGFzaHRhYmxlX3JlcGxhY2UoCitoYW5kc2hha2UuZW50cnkpLCBidXQgaXQncyBtaXNzaW5nIGZyb20gYSBwZXJ0aW5lbnQgY2FsbHNpdGUgb2Ygd2dfCitpbmRleF9oYXNodGFibGVfcmVtb3ZlKGhhbmRzaGFrZS5lbnRyeSkuIFNvLCB0aGlzIHBhdGNoIG1ha2VzIHN1cmUgdGhhdAorbXV0ZXggaXMgdGFrZW4uCisKK1RoZSBvcmlnaW5hbCBjb2RlIHdhcyBhIGxpdHRsZSBiaXQgZnVua3kgdGhvdWdoLCBpbiB0aGUgZm9ybSBvZjoKKworICAgIHJlbW92ZShoYW5kc2hha2UuZW50cnkpCisgICAgbG9jaygpLCBtZW16ZXJvKGhhbmRzaGFrZS5zb21lX21lbWJlcnMpLCB1bmxvY2soKQorICAgIHJlbW92ZShoYW5kc2hha2UuZW50cnkpCisKK1RoZSBvcmlnaW5hbCBpbnRlbnRpb24gb2YgdGhhdCBkb3VibGUgcmVtb3ZhbCBwYXR0ZXJuIG91dHNpZGUgdGhlIGxvY2sKK2FwcGVhcnMgdG8gYmUgc29tZSBhdHRlbXB0IHRvIHByZXZlbnQgaW5zZXJ0aW9ucyB0aGF0IG1pZ2h0IGhhcHBlbiB3aGlsZQorbG9ja3MgYXJlIGRyb3BwZWQgZHVyaW5nIGV4cGVuc2l2ZSBjcnlwdG8gb3BlcmF0aW9ucywgYnV0IGFjdHVhbGx5LCBhbGwKK2NhbGxlcnMgb2Ygd2dfaW5kZXhfaGFzaHRhYmxlX2luc2VydChoYW5kc2hha2UuZW50cnkpIHRha2UgdGhlIHdyaXRlCitsb2NrIGFuZCB0aGVuIGV4cGxpY2l0bHkgY2hlY2sgaGFuZHNoYWtlLnN0YXRlLCBhcyB0aGV5IHNob3VsZCwgd2hpY2gKK3RoZSBhZm9yZW1lbnRpb25lZCBtZW16ZXJvIGNsZWFycywgd2hpY2ggbWVhbnMgYW4gaW5zZXJ0aW9uIHNob3VsZAorYWxyZWFkeSBiZSBpbXBvc3NpYmxlLiBBbmQgcmVnYXJkbGVzcywgdGhlIG9yaWdpbmFsIGludGVudGlvbiB3YXMKK25lY2Vzc2FyaWx5IHJhY3ksIHNpbmNlIGl0IHdhc24ndCBndWFyYW50ZWVkIHRoYXQgc29tZXRoaW5nIGVsc2Ugd291bGQKK3J1biBhZnRlciB0aGUgdW5sb2NrKCkgaW5zdGVhZCBvZiBhZnRlciB0aGUgcmVtb3ZlKCkuIFNvLCBmcm9tIGEKK3NvdW5kbmVzcyBwZXJzcGVjdGl2ZSwgaXQgc2VlbXMgcG9zaXRpdmUgdG8gcmVtb3ZlIHdoYXQgbG9va3MgbGlrZSBhCitoYWNrIGF0IGJlc3QuCisKK1RoZSBjcmFzaCBmcm9tIGJvdGggc3l6Ym90IGFuZCBmcm9tIHRoZSBzY3JpcHQgYWJvdmUgaXMgYXMgZm9sbG93czoKKworICBnZW5lcmFsIHByb3RlY3Rpb24gZmF1bHQsIHByb2JhYmx5IGZvciBub24tY2Fub25pY2FsIGFkZHJlc3MgMHhkZmZmZmMwMDAwMDAwMDAwOiAwMDAwIFsjMV0gUFJFRU1QVCBTTVAgS0FTQU4KKyAgS0FTQU46IG51bGwtcHRyLWRlcmVmIGluIHJhbmdlIFsweDAwMDAwMDAwMDAwMDAwMDAtMHgwMDAwMDAwMDAwMDAwMDA3XQorICBDUFU6IDAgUElEOiA3Mzk1IENvbW06IGt3b3JrZXIvMDozIE5vdCB0YWludGVkIDUuOS4wLXJjNC1zeXprYWxsZXIgIzAKKyAgSGFyZHdhcmUgbmFtZTogR29vZ2xlIEdvb2dsZSBDb21wdXRlIEVuZ2luZS9Hb29nbGUgQ29tcHV0ZSBFbmdpbmUsIEJJT1MgR29vZ2xlIDAxLzAxLzIwMTEKKyAgV29ya3F1ZXVlOiB3Zy1rZXgtd2cxIHdnX3BhY2tldF9oYW5kc2hha2VfcmVjZWl2ZV93b3JrZXIKKyAgUklQOiAwMDEwOmhsaXN0X3JlcGxhY2VfcmN1IGluY2x1ZGUvbGludXgvcmN1bGlzdC5oOjUwNSBbaW5saW5lXQorICBSSVA6IDAwMTA6d2dfaW5kZXhfaGFzaHRhYmxlX3JlcGxhY2UrMHgxNzYvMHgzMzAgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXJsb29rdXAuYzoxNzQKKyAgQ29kZTogMDAgZmMgZmYgZGYgNDggODkgZjkgNDggYzEgZTkgMDMgODAgM2MgMDEgMDAgMGYgODUgNDQgMDEgMDAgMDAgNDggYjkgMDAgMDAgMDAgMDAgMDAgZmMgZmYgZGYgNDggOGIgNDUgMTAgNDggODkgYzYgNDggYzEgZWUgMDMgPDgwPiAzYyAwZSAwMCAwZiA4NSAwNiAwMSAwMCAwMCA0OCA4NSBkMiA0YyA4OSAyOCA3NCA0NyBlOCBhMyA0ZiBiNQorICBSU1A6IDAwMTg6ZmZmZmM5MDAwNmE5N2JmOCBFRkxBR1M6IDAwMDEwMjQ2CisgIFJBWDogMDAwMDAwMDAwMDAwMDAwMCBSQlg6IGZmZmY4ODgwNTBmZmM0ZjggUkNYOiBkZmZmZmMwMDAwMDAwMDAwCisgIFJEWDogMDAwMDAwMDAwMDAwMDAwMCBSU0k6IDAwMDAwMDAwMDAwMDAwMDAgUkRJOiBmZmZmODg4MDhlMDRlMDEwCisgIFJCUDogZmZmZjg4ODA4ZTA0ZTAwMCBSMDg6IDAwMDAwMDAwMDAwMDAwMDEgUjA5OiBmZmZmODg4MDU0M2QwMDAwCisgIFIxMDogZmZmZmVkMTAwYTg3YTAwMCBSMTE6IDAwMDAwMDAwMDAwMDAxNmUgUjEyOiBmZmZmODg4MDU0M2QwMDAwCisgIFIxMzogZmZmZjg4ODA4ZTA0ZTAwOCBSMTQ6IGZmZmY4ODgwNTBmZmM1MDggUjE1OiBmZmZmODg4MDUwZmZjNTAwCisgIEZTOiAgMDAwMDAwMDAwMDAwMDAwMCgwMDAwKSBHUzpmZmZmODg4MGFlNjAwMDAwKDAwMDApIGtubEdTOjAwMDAwMDAwMDAwMDAwMDAKKyAgQ1M6ICAwMDEwIERTOiAwMDAwIEVTOiAwMDAwIENSMDogMDAwMDAwMDA4MDA1MDAzMworICBDUjI6IDAwMDAwMDAwZjU1MDVkYjAgQ1IzOiAwMDAwMDAwMDk3Y2Y3MDAwIENSNDogMDAwMDAwMDAwMDE1MjZmMAorICBEUjA6IDAwMDAwMDAwMDAwMDAwMDAgRFIxOiAwMDAwMDAwMDAwMDAwMDAwIERSMjogMDAwMDAwMDAwMDAwMDAwMAorICBEUjM6IDAwMDAwMDAwMDAwMDAwMDAgRFI2OiAwMDAwMDAwMGZmZmUwZmYwIERSNzogMDAwMDAwMDAwMDAwMDQwMAorICBDYWxsIFRyYWNlOgorICB3Z19ub2lzZV9oYW5kc2hha2VfYmVnaW5fc2Vzc2lvbisweDc1Mi8weGM5YSBkcml2ZXJzL25ldC93aXJlZ3VhcmQvbm9pc2UuYzo4MjAKKyAgd2dfcmVjZWl2ZV9oYW5kc2hha2VfcGFja2V0IGRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmM6MTgzIFtpbmxpbmVdCisgIHdnX3BhY2tldF9oYW5kc2hha2VfcmVjZWl2ZV93b3JrZXIrMHgzM2IvMHg3MzAgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3JlY2VpdmUuYzoyMjAKKyAgcHJvY2Vzc19vbmVfd29yaysweDk0Yy8weDE2NzAga2VybmVsL3dvcmtxdWV1ZS5jOjIyNjkKKyAgd29ya2VyX3RocmVhZCsweDY0Yy8weDExMjAga2VybmVsL3dvcmtxdWV1ZS5jOjI0MTUKKyAga3RocmVhZCsweDNiNS8weDRhMCBrZXJuZWwva3RocmVhZC5jOjI5MgorICByZXRfZnJvbV9mb3JrKzB4MWYvMHgzMCBhcmNoL3g4Ni9lbnRyeS9lbnRyeV82NC5TOjI5NAorCitSZXBvcnRlZC1ieTogc3l6Ym90IDxzeXprYWxsZXJAZ29vZ2xlZ3JvdXBzLmNvbT4KK1JlcG9ydGVkLWJ5OiBFcmljIER1bWF6ZXQgPGVkdW1hemV0QGdvb2dsZS5jb20+CitMaW5rOiBodHRwczovL2xvcmUua2VybmVsLm9yZy93aXJlZ3VhcmQvMjAyMDA5MDgxNDU5MTEuNDA5MDQ4MC0xLWVkdW1hemV0QGdvb2dsZS5jb20vCitGaXhlczogZTcwOTZjMTMxZTUxICgibmV0OiBXaXJlR3VhcmQgc2VjdXJlIG5ldHdvcmsgdHVubmVsIikKK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorU2lnbmVkLW9mZi1ieTogRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvbm9pc2UuYyB8IDUgKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDQgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9ub2lzZS5jCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvbm9pc2UuYworQEAgLTg3LDE1ICs4NywxMiBAQCBzdGF0aWMgdm9pZCBoYW5kc2hha2VfemVybyhzdHJ1Y3Qgbm9pc2VfCisgCisgdm9pZCB3Z19ub2lzZV9oYW5kc2hha2VfY2xlYXIoc3RydWN0IG5vaXNlX2hhbmRzaGFrZSAqaGFuZHNoYWtlKQorIHsKKysJZG93bl93cml0ZSgmaGFuZHNoYWtlLT5sb2NrKTsKKyAJd2dfaW5kZXhfaGFzaHRhYmxlX3JlbW92ZSgKKyAJCQloYW5kc2hha2UtPmVudHJ5LnBlZXItPmRldmljZS0+aW5kZXhfaGFzaHRhYmxlLAorIAkJCSZoYW5kc2hha2UtPmVudHJ5KTsKKy0JZG93bl93cml0ZSgmaGFuZHNoYWtlLT5sb2NrKTsKKyAJaGFuZHNoYWtlX3plcm8oaGFuZHNoYWtlKTsKKyAJdXBfd3JpdGUoJmhhbmRzaGFrZS0+bG9jayk7CistCXdnX2luZGV4X2hhc2h0YWJsZV9yZW1vdmUoCistCQkJaGFuZHNoYWtlLT5lbnRyeS5wZWVyLT5kZXZpY2UtPmluZGV4X2hhc2h0YWJsZSwKKy0JCQkmaGFuZHNoYWtlLT5lbnRyeSk7CisgfQorIAorIHN0YXRpYyBzdHJ1Y3Qgbm9pc2Vfa2V5cGFpciAqa2V5cGFpcl9jcmVhdGUoc3RydWN0IHdnX3BlZXIgKnBlZXIpCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTE1LXdpcmVndWFyZC1wZWVybG9va3VwLXRha2UtbG9jay1iZWZvcmUtY2hlY2tpbmctaGFzaC0ucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTE1LXdpcmVndWFyZC1wZWVybG9va3VwLXRha2UtbG9jay1iZWZvcmUtY2hlY2tpbmctaGFzaC0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdmNDZkZAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMTUtd2lyZWd1YXJkLXBlZXJsb29rdXAtdGFrZS1sb2NrLWJlZm9yZS1jaGVja2luZy1oYXNoLS5wYXRjaApAQCAtMCwwICsxLDYyIEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogV2VkLCA5IFNlcCAyMDIwIDEzOjU4OjE1ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIHdpcmVndWFyZDogcGVlcmxvb2t1cDogdGFrZSBsb2NrIGJlZm9yZSBjaGVja2luZyBoYXNoIGluCisgcmVwbGFjZSBvcGVyYXRpb24KKworY29tbWl0IDYxNDdmN2IxZTkwZmYwOWJkNTJhZmM4YjkyMDZhN2ZjZDEzM2RhZjcgdXBzdHJlYW0uCisKK0VyaWMncyBzdWdnZXN0ZWQgZml4IGZvciB0aGUgcHJldmlvdXMgY29tbWl0J3MgbWVudGlvbmVkIHJhY2UgY29uZGl0aW9uCit3YXMgdG8gc2ltcGx5IHRha2UgdGhlIHRhYmxlLT5sb2NrIGluIHdnX2luZGV4X2hhc2h0YWJsZV9yZXBsYWNlKCkuIFRoZQordGFibGUtPmxvY2sgb2YgdGhlIGhhc2ggdGFibGUgaXMgc3VwcG9zZWQgdG8gcHJvdGVjdCB0aGUgYnVja2V0IGhlYWRzLAorbm90IHRoZSBlbnRpcmVzLCBidXQgYWN0dWFsbHksIHNpbmNlIGFsbCB0aGUgbXV0YXRvciBmdW5jdGlvbnMgYXJlCithbHJlYWR5IHRha2luZyBpdCwgaXQgbWFrZXMgc2Vuc2UgdG8gdGFrZSBpdCB0b28gZm9yIHRoZSB0ZXN0IHRvCitobGlzdF91bmhhc2hlZCwgYXMgYSBkZWZlbnNlIGluIGRlcHRoIG1lYXN1cmUsIHNvIHRoYXQgaXQgbm8gbG9uZ2VyCityYWNlcyB3aXRoIGRlbGV0aW9ucywgcmVnYXJkbGVzcyBvZiB3aGF0IG90aGVyIGxvY2tzIGFyZSBwcm90ZWN0aW5nCitpbmRpdmlkdWFsIGVudHJpZXMuIFRoaXMgaXMgc2Vuc2libGUgZnJvbSBhIHBlcmZvcm1hbmNlIHBlcnNwZWN0aXZlCitiZWNhdXNlLCBhcyBFcmljIHBvaW50ZWQgb3V0LCB0aGUgY2FzZSBvZiBiZWluZyB1bmhhc2hlZCBpcyBhbHJlYWR5IHRoZQordW5saWtlbHkgY2FzZSwgc28gdGhpcyB3b24ndCBhZGQgY29tbW9uIGNvbnRlbnRpb24uIEFuZCBjb21wYXJpbmcKK2luc3RydWN0aW9ucywgdGhpcyBiYXNpY2FsbHkgZG9lc24ndCBtYWtlIG11Y2ggb2YgYSBkaWZmZXJlbmNlIG90aGVyCit0aGFuIHB1c2hpbmcgYW5kIHBvcHBpbmcgJXIxMywgdXNlZCBieSB0aGUgbmV3IGBib29sIHJldGAuIE1vcmUKK2dlbmVyYWxseSwgSSBsaWtlIHRoZSBpZGVhIG9mIGxvY2tpbmcgY29uc2lzdGVuY3kgYWNyb3NzIHRhYmxlIG11dGF0b3IKK2Z1bmN0aW9ucywgYW5kIHRoaXMgbWlnaHQgbGV0IG1lIHJlc3Qgc2xpZ2h0bHkgZWFzaWVyIGF0IG5pZ2h0LgorCitTdWdnZXN0ZWQtYnk6IEVyaWMgRHVtYXpldCA8ZWR1bWF6ZXRAZ29vZ2xlLmNvbT4KK0xpbms6IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL3dpcmVndWFyZC8yMDIwMDkwODE0NTkxMS40MDkwNDgwLTEtZWR1bWF6ZXRAZ29vZ2xlLmNvbS8KK0ZpeGVzOiBlNzA5NmMxMzFlNTEgKCJuZXQ6IFdpcmVHdWFyZCBzZWN1cmUgbmV0d29yayB0dW5uZWwiKQorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CitTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVybG9va3VwLmMgfCAxMSArKysrKysrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVybG9va3VwLmMKKysrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVybG9va3VwLmMKK0BAIC0xNjcsOSArMTY3LDEzIEBAIGJvb2wgd2dfaW5kZXhfaGFzaHRhYmxlX3JlcGxhY2Uoc3RydWN0IGkKKyAJCQkJc3RydWN0IGluZGV4X2hhc2h0YWJsZV9lbnRyeSAqb2xkLAorIAkJCQlzdHJ1Y3QgaW5kZXhfaGFzaHRhYmxlX2VudHJ5ICpuZXcpCisgeworLQlpZiAodW5saWtlbHkoaGxpc3RfdW5oYXNoZWQoJm9sZC0+aW5kZXhfaGFzaCkpKQorLQkJcmV0dXJuIGZhbHNlOworKwlib29sIHJldDsKKysKKyAJc3Bpbl9sb2NrX2JoKCZ0YWJsZS0+bG9jayk7CisrCXJldCA9ICFobGlzdF91bmhhc2hlZCgmb2xkLT5pbmRleF9oYXNoKTsKKysJaWYgKHVubGlrZWx5KCFyZXQpKQorKwkJZ290byBvdXQ7CisrCisgCW5ldy0+aW5kZXggPSBvbGQtPmluZGV4OworIAlobGlzdF9yZXBsYWNlX3JjdSgmb2xkLT5pbmRleF9oYXNoLCAmbmV3LT5pbmRleF9oYXNoKTsKKyAKK0BAIC0xODAsOCArMTg0LDkgQEAgYm9vbCB3Z19pbmRleF9oYXNodGFibGVfcmVwbGFjZShzdHJ1Y3QgaQorIAkgKiBzaW1wbHkgZ2V0cyBkcm9wcGVkLCB3aGljaCBpc24ndCB0ZXJyaWJsZS4KKyAJICovCisgCUlOSVRfSExJU1RfTk9ERSgmb2xkLT5pbmRleF9oYXNoKTsKKytvdXQ6CisgCXNwaW5fdW5sb2NrX2JoKCZ0YWJsZS0+bG9jayk7CistCXJldHVybiB0cnVlOworKwlyZXR1cm4gcmV0OworIH0KKyAKKyB2b2lkIHdnX2luZGV4X2hhc2h0YWJsZV9yZW1vdmUoc3RydWN0IGluZGV4X2hhc2h0YWJsZSAqdGFibGUsCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTE2LXdpcmVndWFyZC1zZWxmdGVzdHMtY2hlY2stdGhhdC1yb3V0ZV9tZV9oYXJkZXItcGFja2UucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTE2LXdpcmVndWFyZC1zZWxmdGVzdHMtY2hlY2stdGhhdC1yb3V0ZV9tZV9oYXJkZXItcGFja2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDljMWIwYgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMTYtd2lyZWd1YXJkLXNlbGZ0ZXN0cy1jaGVjay10aGF0LXJvdXRlX21lX2hhcmRlci1wYWNrZS5wYXRjaApAQCAtMCwwICsxLDU2IEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogVGh1LCAyOSBPY3QgMjAyMCAwMzo1NjowNSArMDEwMAorU3ViamVjdDogW1BBVENIXSB3aXJlZ3VhcmQ6IHNlbGZ0ZXN0czogY2hlY2sgdGhhdCByb3V0ZV9tZV9oYXJkZXIgcGFja2V0cyB1c2UKKyB0aGUgcmlnaHQgc2sKKworY29tbWl0IGFmOGFmY2YxZmRkNWYzNjVmNzBlMjM4NmMyZDhjN2ExYWJkODUzZDcgdXBzdHJlYW0uCisKK0lmIG5ldGZpbHRlciBjaGFuZ2VzIHRoZSBwYWNrZXQgbWFyaywgdGhlIHBhY2tldCBpcyByZXJvdXRlZC4gVGhlCitpcF9yb3V0ZV9tZV9oYXJkZXIgZmFtaWx5IG9mIGZ1bmN0aW9ucyBmYWlscyB0byB1c2UgdGhlIHJpZ2h0IHNrLCBvcHRpbmcKK3RvIGluc3RlYWQgdXNlIHNrYi0+c2ssIHJlc3VsdGluZyBpbiBhIHJvdXRpbmcgbG9vcCB3aGVuIHVzZWQgd2l0aAordHVubmVscy4gV2l0aCB0aGUgbmV4dCBjaGFuZ2UgZml4aW5nIHRoaXMgaXNzdWUgaW4gbmV0ZmlsdGVyLCB0ZXN0IGZvcgordGhlIHJlbGV2YW50IGNvbmRpdGlvbiBpbnNpZGUgb3VyIHRlc3Qgc3VpdGUsIHNpbmNlIHdpcmVndWFyZCB3YXMgd2hlcmUKK3RoZSBidWcgd2FzIGRpc2NvdmVyZWQuCisKK1JlcG9ydGVkLWJ5OiBDaGVuIE1pbnFpYW5nIDxwdHB0NTJAZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CitTaWduZWQtb2ZmLWJ5OiBQYWJsbyBOZWlyYSBBeXVzbyA8cGFibG9AbmV0ZmlsdGVyLm9yZz4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL25ldG5zLnNoICAgICAgICAgICB8IDggKysrKysrKysKKyB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvcWVtdS9rZXJuZWwuY29uZmlnIHwgMiArKworIDIgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKQorCistLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvbmV0bnMuc2gKKysrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9uZXRucy5zaAorQEAgLTMxNiw2ICszMTYsMTQgQEAgcHAgc2xlZXAgMworIG4yIHBpbmcgLVcgMSAtYyAxIDE5Mi4xNjguMjQxLjEKKyBuMSB3ZyBzZXQgd2cwIHBlZXIgIiRwdWIyIiBwZXJzaXN0ZW50LWtlZXBhbGl2ZSAwCisgCisrIyBUZXN0IHRoYXQgc2tfYm91bmRfZGV2X2lmIHdvcmtzCisrbjEgcGluZyAtSSB3ZzAgLWMgMSAtVyAxIDE5Mi4xNjguMjQxLjIKKysjIFdoYXQgYWJvdXQgd2hlbiB0aGUgbWFyayBjaGFuZ2VzIGFuZCB0aGUgcGFja2V0IG11c3QgYmUgcmVyb3V0ZWQ/CisrbjEgaXB0YWJsZXMgLXQgbWFuZ2xlIC1JIE9VVFBVVCAtaiBNQVJLIC0tc2V0LXhtYXJrIDEKKytuMSBwaW5nIC1jIDEgLVcgMSAxOTIuMTY4LjI0MS4yICMgRmlyc3QgdGhlIGJvcmluZyBjYXNlCisrbjEgcGluZyAtSSB3ZzAgLWMgMSAtVyAxIDE5Mi4xNjguMjQxLjIgIyBUaGVuIHRoZSBza19ib3VuZF9kZXZfaWYgY2FzZQorK24xIGlwdGFibGVzIC10IG1hbmdsZSAtRCBPVVRQVVQgLWogTUFSSyAtLXNldC14bWFyayAxCisrCisgIyBUZXN0IHRoYXQgb25pb24gcm91dGluZyB3b3JrcywgZXZlbiB3aGVuIGl0IGxvb3BzCisgbjEgd2cgc2V0IHdnMCBwZWVyICIkcHViMyIgYWxsb3dlZC1pcHMgMTkyLjE2OC4yNDIuMi8zMiBlbmRwb2ludCAxOTIuMTY4LjI0MS4yOjUKKyBpcDEgYWRkciBhZGQgMTkyLjE2OC4yNDIuMS8yNCBkZXYgd2cwCistLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvcWVtdS9rZXJuZWwuY29uZmlnCisrKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvcWVtdS9rZXJuZWwuY29uZmlnCitAQCAtMTgsMTAgKzE4LDEyIEBAIENPTkZJR19ORl9OQVQ9eQorIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUz15CisgQ09ORklHX05FVEZJTFRFUl9YVF9OQVQ9eQorIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPXkKKytDT05GSUdfTkVURklMVEVSX1hUX01BUks9eQorIENPTkZJR19ORl9DT05OVFJBQ0tfSVBWND15CisgQ09ORklHX05GX05BVF9JUFY0PXkKKyBDT05GSUdfSVBfTkZfSVBUQUJMRVM9eQorIENPTkZJR19JUF9ORl9GSUxURVI9eQorK0NPTkZJR19JUF9ORl9NQU5HTEU9eQorIENPTkZJR19JUF9ORl9OQVQ9eQorIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQorIENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVM9eQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDExNy13aXJlZ3VhcmQtYXZvaWQtZG91YmxlLXVubGlrZWx5LW5vdGF0aW9uLXdoZW4tdXNpbmctLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDExNy13aXJlZ3VhcmQtYXZvaWQtZG91YmxlLXVubGlrZWx5LW5vdGF0aW9uLXdoZW4tdXNpbmctLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZmMxYmIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTE3LXdpcmVndWFyZC1hdm9pZC1kb3VibGUtdW5saWtlbHktbm90YXRpb24td2hlbi11c2luZy0ucGF0Y2gKQEAgLTAsMCArMSw1NSBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQW50b25pbyBRdWFydHVsbGkgPGFAdW5zdGFibGUuY2M+CitEYXRlOiBNb24sIDIyIEZlYiAyMDIxIDE3OjI1OjQzICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIHdpcmVndWFyZDogYXZvaWQgZG91YmxlIHVubGlrZWx5KCkgbm90YXRpb24gd2hlbiB1c2luZworIElTX0VSUigpCisKK2NvbW1pdCAzMGFjNGUyZjU0ZWMwNjdiN2I5Y2EwZGIyN2U3NTY4MTU4MTM3OGQ2IHVwc3RyZWFtLgorCitUaGUgZGVmaW5pdGlvbiBvZiBJU19FUlIoKSBhbHJlYWR5IGFwcGxpZXMgdGhlIHVubGlrZWx5KCkgbm90YXRpb24KK3doZW4gY2hlY2tpbmcgdGhlIGVycm9yIHN0YXR1cyBvZiB0aGUgcGFzc2VkIHBvaW50ZXIuIEZvciB0aGlzCityZWFzb24gdGhlcmUgaXMgbm8gbmVlZCB0byBoYXZlIHRoZSBzYW1lIG5vdGF0aW9uIG91dHNpZGUgb2YKK0lTX0VSUigpIGl0c2VsZi4KKworQ2xlYW4gdXAgY29kZSBieSByZW1vdmluZyByZWR1bmRhbnQgbm90YXRpb24uCisKK1NpZ25lZC1vZmYtYnk6IEFudG9uaW8gUXVhcnR1bGxpIDxhQHVuc3RhYmxlLmNjPgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CitTaWduZWQtb2ZmLWJ5OiBKYWt1YiBLaWNpbnNraSA8a3ViYUBrZXJuZWwub3JnPgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmMgfCAyICstCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NvY2tldC5jIHwgNCArKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuYworKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jCitAQCAtMTU3LDcgKzE1Nyw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCB3Z194bWl0KHN0cnVjdCBza19idWYKKyAJfSBlbHNlIHsKKyAJCXN0cnVjdCBza19idWZmICpzZWdzID0gc2tiX2dzb19zZWdtZW50KHNrYiwgMCk7CisgCistCQlpZiAodW5saWtlbHkoSVNfRVJSKHNlZ3MpKSkgeworKwkJaWYgKElTX0VSUihzZWdzKSkgeworIAkJCXJldCA9IFBUUl9FUlIoc2Vncyk7CisgCQkJZ290byBlcnJfcGVlcjsKKyAJCX0KKy0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9zb2NrZXQuYworKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NvY2tldC5jCitAQCAtNzEsNyArNzEsNyBAQCBzdGF0aWMgaW50IHNlbmQ0KHN0cnVjdCB3Z19kZXZpY2UgKndnLCBzCisgCQkJCWlwX3J0X3B1dChydCk7CisgCQkJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfZmxvdyhzb2NrX25ldChzb2NrKSwgJmZsLCBzb2NrKTsKKyAJCX0KKy0JCWlmICh1bmxpa2VseShJU19FUlIocnQpKSkgeworKwkJaWYgKElTX0VSUihydCkpIHsKKyAJCQlyZXQgPSBQVFJfRVJSKHJ0KTsKKyAJCQluZXRfZGJnX3JhdGVsaW1pdGVkKCIlczogTm8gcm91dGUgdG8gJXBJU3Bmc2MsIGVycm9yICVkXG4iLAorIAkJCQkJICAgIHdnLT5kZXYtPm5hbWUsICZlbmRwb2ludC0+YWRkciwgcmV0KTsKK0BAIC0xMzgsNyArMTM4LDcgQEAgc3RhdGljIGludCBzZW5kNihzdHJ1Y3Qgd2dfZGV2aWNlICp3ZywgcworIAkJfQorIAkJZHN0ID0gaXB2Nl9zdHViLT5pcHY2X2RzdF9sb29rdXBfZmxvdyhzb2NrX25ldChzb2NrKSwgc29jaywgJmZsLAorIAkJCQkJCSAgICAgIE5VTEwpOworLQkJaWYgKHVubGlrZWx5KElTX0VSUihkc3QpKSkgeworKwkJaWYgKElTX0VSUihkc3QpKSB7CisgCQkJcmV0ID0gUFRSX0VSUihkc3QpOworIAkJCW5ldF9kYmdfcmF0ZWxpbWl0ZWQoIiVzOiBObyByb3V0ZSB0byAlcElTcGZzYywgZXJyb3IgJWRcbiIsCisgCQkJCQkgICAgd2ctPmRldi0+bmFtZSwgJmVuZHBvaW50LT5hZGRyLCByZXQpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDExOC13aXJlZ3VhcmQtc29ja2V0LXJlbW92ZS1ib2d1cy1fX2JlMzItYW5ub3RhdGlvbi5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMTgtd2lyZWd1YXJkLXNvY2tldC1yZW1vdmUtYm9ndXMtX19iZTMyLWFubm90YXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc5NmY1NAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMTgtd2lyZWd1YXJkLXNvY2tldC1yZW1vdmUtYm9ndXMtX19iZTMyLWFubm90YXRpb24ucGF0Y2gKQEAgLTAsMCArMSw1MiBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmFubiBIb3JuIDxqYW5uaEBnb29nbGUuY29tPgorRGF0ZTogTW9uLCAyMiBGZWIgMjAyMSAxNzoyNTo0NCArMDEwMAorU3ViamVjdDogW1BBVENIXSB3aXJlZ3VhcmQ6IHNvY2tldDogcmVtb3ZlIGJvZ3VzIF9fYmUzMiBhbm5vdGF0aW9uCisKK2NvbW1pdCA3ZjU3YmQ4ZGMyMmRlMzVkZGQ4OTUyOTRhYTU1NDAwM2U0ZjE5YTcyIHVwc3RyZWFtLgorCitUaGUgZW5kcG9pbnQtPnNyY19pZjQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCBmaXhlZC1lbmRpYW4gbnVtYmVyczsgcmVtb3ZlCit0aGUgYm9ndXMgYW5ub3RhdGlvbi4KKworVGhpcyB3YXMgaW50cm9kdWNlZCBpbgoraHR0cHM6Ly9naXQuengyYzQuY29tL3dpcmVndWFyZC1tb25vbGl0aGljLWhpc3RvcmljYWwvY29tbWl0P2lkPTE0ZTdkMGE0OTlhNjc2ZWM1NTE3NmMwZGUyZjlmY2JkMzQwNzRhODIKK2luIHRoZSBoaXN0b3JpY2FsIFdpcmVHdWFyZCByZXBvIGJlY2F1c2UgdGhlIG9sZCBjb2RlIHVzZWQgdG8KK3plcm8taW5pdGlhbGl6ZSBtdWx0aXBsZSBtZW1iZXJzIGFzIGZvbGxvd3M6CisKKyAgICBlbmRwb2ludC0+c3JjNC5zX2FkZHIgPSBlbmRwb2ludC0+c3JjX2lmNCA9IGZsLnNhZGRyID0gMDsKKworQmVjYXVzZSBmbC5zYWRkciBpcyBmaXhlZC1lbmRpYW4gYW5kIGFuIGFzc2lnbm1lbnQgcmV0dXJucyBhIHZhbHVlIHdpdGggdGhlCit0eXBlIG9mIGl0cyBsZWZ0IG9wZXJhbmQsIHRoaXMgbWVhbnQgdGhhdCBzcGFyc2UgZGV0ZWN0ZWQgYW4gYXNzaWdubWVudAorYmV0d2VlbiB2YWx1ZXMgb2YgZGlmZmVyZW50IGVuZGlhbm5lc3MuCisKK1NpbmNlIHRoZW4sIHRoaXMgYXNzaWdubWVudCB3YXMgYWxyZWFkeSBzcGxpdCB1cCBpbnRvIHNlcGFyYXRlIHN0YXRlbWVudHM7CitqdXN0IHRoZSBjYXN0IHN1cnZpdmVkLgorCitTaWduZWQtb2ZmLWJ5OiBKYW5uIEhvcm4gPGphbm5oQGdvb2dsZS5jb20+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IEpha3ViIEtpY2luc2tpIDxrdWJhQGtlcm5lbC5vcmc+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9zb2NrZXQuYyB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9zb2NrZXQuYworKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NvY2tldC5jCitAQCAtNTMsNyArNTMsNyBAQCBzdGF0aWMgaW50IHNlbmQ0KHN0cnVjdCB3Z19kZXZpY2UgKndnLCBzCisgCQlpZiAodW5saWtlbHkoIWluZXRfY29uZmlybV9hZGRyKHNvY2tfbmV0KHNvY2spLCBOVUxMLCAwLAorIAkJCQkJCWZsLnNhZGRyLCBSVF9TQ09QRV9IT1NUKSkpIHsKKyAJCQllbmRwb2ludC0+c3JjNC5zX2FkZHIgPSAwOworLQkJCSooX19mb3JjZSBfX2JlMzIgKikmZW5kcG9pbnQtPnNyY19pZjQgPSAwOworKwkJCWVuZHBvaW50LT5zcmNfaWY0ID0gMDsKKyAJCQlmbC5zYWRkciA9IDA7CisgCQkJaWYgKGNhY2hlKQorIAkJCQlkc3RfY2FjaGVfcmVzZXQoY2FjaGUpOworQEAgLTYzLDcgKzYzLDcgQEAgc3RhdGljIGludCBzZW5kNChzdHJ1Y3Qgd2dfZGV2aWNlICp3ZywgcworIAkJCSAgICAgUFRSX0VSUihydCkgPT0gLUVJTlZBTCkgfHwgKCFJU19FUlIocnQpICYmCisgCQkJICAgICBydC0+ZHN0LmRldi0+aWZpbmRleCAhPSBlbmRwb2ludC0+c3JjX2lmNCkpKSkgeworIAkJCWVuZHBvaW50LT5zcmM0LnNfYWRkciA9IDA7CistCQkJKihfX2ZvcmNlIF9fYmUzMiAqKSZlbmRwb2ludC0+c3JjX2lmNCA9IDA7CisrCQkJZW5kcG9pbnQtPnNyY19pZjQgPSAwOworIAkJCWZsLnNhZGRyID0gMDsKKyAJCQlpZiAoY2FjaGUpCisgCQkJCWRzdF9jYWNoZV9yZXNldChjYWNoZSk7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTE5LXdpcmVndWFyZC1zZWxmdGVzdHMtdGVzdC1tdWx0aXBsZS1wYXJhbGxlbC1zdHJlYW1zLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDExOS13aXJlZ3VhcmQtc2VsZnRlc3RzLXRlc3QtbXVsdGlwbGUtcGFyYWxsZWwtc3RyZWFtcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDkzZGU0Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDExOS13aXJlZ3VhcmQtc2VsZnRlc3RzLXRlc3QtbXVsdGlwbGUtcGFyYWxsZWwtc3RyZWFtcy5wYXRjaApAQCAtMCwwICsxLDUyIEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogTW9uLCAyMiBGZWIgMjAyMSAxNzoyNTo0NSArMDEwMAorU3ViamVjdDogW1BBVENIXSB3aXJlZ3VhcmQ6IHNlbGZ0ZXN0czogdGVzdCBtdWx0aXBsZSBwYXJhbGxlbCBzdHJlYW1zCisKK2NvbW1pdCBkNWE0OWFhNmMzZTI2NGE5M2E3ZDA4NDg1ZDY2ZTM0NmJlMDk2OWRkIHVwc3RyZWFtLgorCitJbiBvcmRlciB0byB0ZXN0IG5kb19zdGFydF94bWl0IGJlaW5nIGNhbGxlZCBpbiBwYXJhbGxlbCwgZXhwbGljaXRseSBhZGQKK3NlcGFyYXRlIHRlc3RzLCB3aGljaCBzaG91bGQgYWxsIHJ1biBvbiBkaWZmZXJlbnQgY29yZXMuIFRoaXMgc2hvdWxkCitoZWxwIHRlYXNlIG91dCBidWdzIGFzc29jaWF0ZWQgd2l0aCBxdWV1ZWluZyB1cCBwYWNrZXRzIGZyb20gZGlmZmVyZW50Citjb3JlcyBpbiBwYXJhbGxlbC4gQ3VycmVudGx5LCBpdCBoYXNuJ3QgZm91bmQgdGhvc2UgdHlwZXMgb2YgYnVncywgYnV0CitnaXZlbiBmdXR1cmUgcGxhbm5lZCB3b3JrLCB0aGlzIGlzIGEgdXNlZnVsIHJlZ3Jlc3Npb24gdG8gYXZvaWQuCisKK0ZpeGVzOiBlNzA5NmMxMzFlNTEgKCJuZXQ6IFdpcmVHdWFyZCBzZWN1cmUgbmV0d29yayB0dW5uZWwiKQorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CitTaWduZWQtb2ZmLWJ5OiBKYWt1YiBLaWNpbnNraSA8a3ViYUBrZXJuZWwub3JnPgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvbmV0bnMuc2ggfCAxNSArKysrKysrKysrKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCistLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvbmV0bnMuc2gKKysrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9uZXRucy5zaAorQEAgLTM5LDcgKzM5LDcgQEAgaXAwKCkgeyBwcmV0dHkgMCAiaXAgJCoiOyBpcCAtbiAkbmV0bnMwCisgaXAxKCkgeyBwcmV0dHkgMSAiaXAgJCoiOyBpcCAtbiAkbmV0bnMxICIkQCI7IH0KKyBpcDIoKSB7IHByZXR0eSAyICJpcCAkKiI7IGlwIC1uICRuZXRuczIgIiRAIjsgfQorIHNsZWVwKCkgeyByZWFkIC10ICIkMSIgLU4gMSB8fCB0cnVlOyB9Cistd2FpdGlwZXJmKCkgeyBwcmV0dHkgIiR7MS8vKi19IiAid2FpdCBmb3IgaXBlcmY6NTIwMSBwaWQgJDIiOyB3aGlsZSBbWyAkKHNzIC1OICIkMSIgLXRscEggJ3Nwb3J0ID0gNTIwMScpICE9ICpcImlwZXJmM1wiLHBpZD0kMixmZD0qIF1dOyBkbyBzbGVlcCAwLjE7IGRvbmU7IH0KKyt3YWl0aXBlcmYoKSB7IHByZXR0eSAiJHsxLy8qLX0iICJ3YWl0IGZvciBpcGVyZjokezM6LTUyMDF9IHBpZCAkMiI7IHdoaWxlIFtbICQoc3MgLU4gIiQxIiAtdGxwSCAic3BvcnQgPSAkezM6LTUyMDF9IikgIT0gKlwiaXBlcmYzXCIscGlkPSQyLGZkPSogXV07IGRvIHNsZWVwIDAuMTsgZG9uZTsgfQorIHdhaXRuY2F0dWRwKCkgeyBwcmV0dHkgIiR7MS8vKi19IiAid2FpdCBmb3IgdWRwOjExMTEgcGlkICQyIjsgd2hpbGUgW1sgJChzcyAtTiAiJDEiIC11bHBIICdzcG9ydCA9IDExMTEnKSAhPSAqXCJuY2F0XCIscGlkPSQyLGZkPSogXV07IGRvIHNsZWVwIDAuMTsgZG9uZTsgfQorIHdhaXRpZmFjZSgpIHsgcHJldHR5ICIkezEvLyotfSIgIndhaXQgZm9yICQyIHRvIGNvbWUgdXAiOyBpcCBuZXRucyBleGVjICIkMSIgYmFzaCAtYyAid2hpbGUgW1sgXCQoPCBcIi9zeXMvY2xhc3MvbmV0LyQyL29wZXJzdGF0ZVwiKSAhPSB1cCBdXTsgZG8gcmVhZCAtdCAuMSAtTiAwIHx8IHRydWU7IGRvbmU7IjsgfQorIAorQEAgLTE0MSw2ICsxNDEsMTkgQEAgdGVzdHMoKSB7CisgCW4yIGlwZXJmMyAtcyAtMSAtQiBmZDAwOjoyICYKKyAJd2FpdGlwZXJmICRuZXRuczIgJCEKKyAJbjEgaXBlcmYzIC1aIC10IDMgLWIgMCAtdSAtYyBmZDAwOjoyCisrCisrCSMgVENQIG92ZXIgSVB2NCwgaW4gcGFyYWxsZWwKKysJZm9yIG1heCBpbiA0IDUgNTA7IGRvCisrCQlsb2NhbCBwaWRzPSggKQorKwkJZm9yICgoaT0wOyBpIDwgbWF4OyArK2kpKSBkbworKwkJCW4yIGlwZXJmMyAtcCAkKCggNTIwMCArIGkgKSkgLXMgLTEgLUIgMTkyLjE2OC4yNDEuMiAmCisrCQkJcGlkcys9KCAkISApOyB3YWl0aXBlcmYgJG5ldG5zMiAkISAkKCggNTIwMCArIGkgKSkKKysJCWRvbmUKKysJCWZvciAoKGk9MDsgaSA8IG1heDsgKytpKSkgZG8KKysJCQluMSBpcGVyZjMgLVogLXQgMyAtcCAkKCggNTIwMCArIGkgKSkgLWMgMTkyLjE2OC4yNDEuMiAmCisrCQlkb25lCisrCQl3YWl0ICIke3BpZHNbQF19IgorKwlkb25lCisgfQorIAorIFtbICQoaXAxIGxpbmsgc2hvdyBkZXYgd2cwKSA9fiBtdHVcIChbMC05XSspIF1dICYmIG9yaWdfbXR1PSIke0JBU0hfUkVNQVRDSFsxXX0iCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTIwLXdpcmVndWFyZC1wZWVyLXB1dC1mcmVxdWVudGx5LXVzZWQtbWVtYmVycy1hYm92ZS1jYWMucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTIwLXdpcmVndWFyZC1wZWVyLXB1dC1mcmVxdWVudGx5LXVzZWQtbWVtYmVycy1hYm92ZS1jYWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjllNzZiOQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMjAtd2lyZWd1YXJkLXBlZXItcHV0LWZyZXF1ZW50bHktdXNlZC1tZW1iZXJzLWFib3ZlLWNhYy5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogTW9uLCAyMiBGZWIgMjAyMSAxNzoyNTo0NiArMDEwMAorU3ViamVjdDogW1BBVENIXSB3aXJlZ3VhcmQ6IHBlZXI6IHB1dCBmcmVxdWVudGx5IHVzZWQgbWVtYmVycyBhYm92ZSBjYWNoZQorIGxpbmVzCisKK2NvbW1pdCA1YTA1OTg2OTU2MzRhNmJiNDEyNjgxODkwMmRkOTE0MGNkOWRmOGI2IHVwc3RyZWFtLgorCitUaGUgaXNfZGVhZCBib29sZWFuIGlzIGNoZWNrZWQgZm9yIGV2ZXJ5IHNpbmdsZSBwYWNrZXQsIHdoaWxlIHRoZQoraW50ZXJuYWxfaWQgbWVtYmVyIGlzIHVzZWQgYmFzaWNhbGx5IG9ubHkgZm9yIHByX2RlYnVnIG1lc3NhZ2VzLiBTbyBpdAorbWFrZXMgc2Vuc2UgdG8gaG9pc3QgdXAgaXNfZGVhZCBpbnRvIHNvbWUgc3BhY2UgZm9ybWVybHkgdW51c2VkIGJ5IGEKK3N0cnVjdCBob2xlLCB3aGlsZSBkZW1vdGluZyBpbnRlcm5hbF9hcGkgdG8gYmVsb3cgdGhlIGxvd2VzdCBzdHJ1Y3QKK2NhY2hlIGxpbmUuCisKK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorU2lnbmVkLW9mZi1ieTogSmFrdWIgS2ljaW5za2kgPGt1YmFAa2VybmVsLm9yZz4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaCB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmgKKysrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmgKK0BAIC0zOSw2ICszOSw3IEBAIHN0cnVjdCB3Z19wZWVyIHsKKyAJc3RydWN0IGNyeXB0X3F1ZXVlIHR4X3F1ZXVlLCByeF9xdWV1ZTsKKyAJc3RydWN0IHNrX2J1ZmZfaGVhZCBzdGFnZWRfcGFja2V0X3F1ZXVlOworIAlpbnQgc2VyaWFsX3dvcmtfY3B1OworKwlib29sIGlzX2RlYWQ7CisgCXN0cnVjdCBub2lzZV9rZXlwYWlycyBrZXlwYWlyczsKKyAJc3RydWN0IGVuZHBvaW50IGVuZHBvaW50OworIAlzdHJ1Y3QgZHN0X2NhY2hlIGVuZHBvaW50X2NhY2hlOworQEAgLTYxLDkgKzYyLDggQEAgc3RydWN0IHdnX3BlZXIgeworIAlzdHJ1Y3QgcmN1X2hlYWQgcmN1OworIAlzdHJ1Y3QgbGlzdF9oZWFkIHBlZXJfbGlzdDsKKyAJc3RydWN0IGxpc3RfaGVhZCBhbGxvd2VkaXBzX2xpc3Q7CistCXU2NCBpbnRlcm5hbF9pZDsKKyAJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CistCWJvb2wgaXNfZGVhZDsKKysJdTY0IGludGVybmFsX2lkOworIH07CisgCisgc3RydWN0IHdnX3BlZXIgKndnX3BlZXJfY3JlYXRlKHN0cnVjdCB3Z19kZXZpY2UgKndnLApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDEyMS13aXJlZ3VhcmQtZGV2aWNlLWRvLW5vdC1nZW5lcmF0ZS1JQ01QLWZvci1ub24tSVAtcGFjLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDEyMS13aXJlZ3VhcmQtZGV2aWNlLWRvLW5vdC1nZW5lcmF0ZS1JQ01QLWZvci1ub24tSVAtcGFjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3M2VlOWIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTIxLXdpcmVndWFyZC1kZXZpY2UtZG8tbm90LWdlbmVyYXRlLUlDTVAtZm9yLW5vbi1JUC1wYWMucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIkphc29uIEEuIERvbmVuZmVsZCIgPEphc29uQHp4MmM0LmNvbT4KK0RhdGU6IE1vbiwgMjIgRmViIDIwMjEgMTc6MjU6NDcgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gd2lyZWd1YXJkOiBkZXZpY2U6IGRvIG5vdCBnZW5lcmF0ZSBJQ01QIGZvciBub24tSVAgcGFja2V0cworCitjb21taXQgOTlmZmY1MjY0ZTdhYjA2ZjQ1YjBhZDYwMjQzNDc1YmUwYThkMDU1OSB1cHN0cmVhbS4KKworSWYgc2tiLT5wcm90b2NvbCBkb2Vzbid0IG1hdGNoIHRoZSBhY3R1YWwgc2tiLT5kYXRhIGhlYWRlciwgaXQncworcHJvYmFibHkgbm90IGEgZ29vZCBpZGVhIHRvIHBhc3MgaXQgb2ZmIHRvIGljbXB7LHY2fV9uZG9fc2VuZCwgd2hpY2ggaXMKK2V4cGVjdGluZyB0byByZXBseSB0byBhIHZhbGlkIElQIHBhY2tldC4gU28gdGhpcyBjb21taXQgaGFzIHRoYXQgZWFybHkKK21pc21hdGNoIGNhc2UganVtcCB0byBhIGxhdGVyIGVycm9yIGxhYmVsLgorCitGaXhlczogZTcwOTZjMTMxZTUxICgibmV0OiBXaXJlR3VhcmQgc2VjdXJlIG5ldHdvcmsgdHVubmVsIikKK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorU2lnbmVkLW9mZi1ieTogSmFrdWIgS2ljaW5za2kgPGt1YmFAa2VybmVsLm9yZz4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jIHwgNyArKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmMKK0BAIC0xMzgsNyArMTM4LDcgQEAgc3RhdGljIG5ldGRldl90eF90IHdnX3htaXQoc3RydWN0IHNrX2J1ZgorIAkJZWxzZSBpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkKKyAJCQluZXRfZGJnX3JhdGVsaW1pdGVkKCIlczogTm8gcGVlciBoYXMgYWxsb3dlZCBJUHMgbWF0Y2hpbmcgJXBJNlxuIiwKKyAJCQkJCSAgICBkZXYtPm5hbWUsICZpcHY2X2hkcihza2IpLT5kYWRkcik7CistCQlnb3RvIGVycjsKKysJCWdvdG8gZXJyX2ljbXA7CisgCX0KKyAKKyAJZmFtaWx5ID0gUkVBRF9PTkNFKHBlZXItPmVuZHBvaW50LmFkZHIuc2FfZmFtaWx5KTsKK0BAIC0yMDEsMTIgKzIwMSwxMyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3Qgd2dfeG1pdChzdHJ1Y3Qgc2tfYnVmCisgCisgZXJyX3BlZXI6CisgCXdnX3BlZXJfcHV0KHBlZXIpOworLWVycjoKKy0JKytkZXYtPnN0YXRzLnR4X2Vycm9yczsKKytlcnJfaWNtcDoKKyAJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKQorIAkJaWNtcF9uZG9fc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX0hPU1RfVU5SRUFDSCwgMCk7CisgCWVsc2UgaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpCisgCQlpY21wdjZfbmRvX3NlbmQoc2tiLCBJQ01QVjZfREVTVF9VTlJFQUNILCBJQ01QVjZfQUREUl9VTlJFQUNILCAwKTsKKytlcnI6CisrCSsrZGV2LT5zdGF0cy50eF9lcnJvcnM7CisgCWtmcmVlX3NrYihza2IpOworIAlyZXR1cm4gcmV0OworIH0KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMjItd2lyZWd1YXJkLXF1ZXVlaW5nLWdldC1yaWQtb2YtcGVyLXBlZXItcmluZy1idWZmZXJzLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDEyMi13aXJlZ3VhcmQtcXVldWVpbmctZ2V0LXJpZC1vZi1wZXItcGVlci1yaW5nLWJ1ZmZlcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRjN2RkYQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMjItd2lyZWd1YXJkLXF1ZXVlaW5nLWdldC1yaWQtb2YtcGVyLXBlZXItcmluZy1idWZmZXJzLnBhdGNoCkBAIC0wLDAgKzEsNTYwIEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogTW9uLCAyMiBGZWIgMjAyMSAxNzoyNTo0OCArMDEwMAorU3ViamVjdDogW1BBVENIXSB3aXJlZ3VhcmQ6IHF1ZXVlaW5nOiBnZXQgcmlkIG9mIHBlci1wZWVyIHJpbmcgYnVmZmVycworTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitjb21taXQgOGI1NTUzYWNlODNjY2VkNzc1ZWVmZDBmM2YxOGI1YzYyMTRjY2Y3YSB1cHN0cmVhbS4KKworSGF2aW5nIHR3byByaW5nIGJ1ZmZlcnMgcGVyLXBlZXIgbWVhbnMgdGhhdCBldmVyeSBwZWVyIHJlc3VsdHMgaW4gdHdvCittYXNzaXZlIHJpbmcgYWxsb2NhdGlvbnMuIE9uIGFuIDgtY29yZSB4ODZfNjQgbWFjaGluZSwgdGhpcyBjb21taXQKK3JlZHVjZXMgdGhlIHBlci1wZWVyIGFsbG9jYXRpb24gZnJvbSAxOCw2ODggYnl0ZXMgdG8gMSw4NTYgYnl0ZXMsIHdoaWNoCitpcyBhbiA5MCUgcmVkdWN0aW9uLiBOaW5ldHkgcGVyY2VudCEgV2l0aCBzb21lIHNpbmdsZS1tYWNoaW5lCitkZXBsb3ltZW50cyBhcHByb2FjaGluZyA1MDAsMDAwIHBlZXJzLCB3ZSdyZSB0YWxraW5nIGFib3V0IGEgcmVkdWN0aW9uCitmcm9tIDcgZ2lncyBvZiBtZW1vcnkgZG93biB0byA3MDAgbWVncyBvZiBtZW1vcnkuCisKK0luIG9yZGVyIHRvIGdldCByaWQgb2YgdGhlc2UgcGVyLXBlZXIgYWxsb2NhdGlvbnMsIHRoaXMgY29tbWl0IHN3aXRjaGVzCit0byB1c2luZyBhIGxpc3QtYmFzZWQgcXVldWVpbmcgYXBwcm9hY2guIEN1cnJlbnRseSBHU08gZnJhZ21lbnRzIGFyZQorY2hhaW5lZCB0b2dldGhlciB1c2luZyB0aGUgc2tiLT5uZXh0IHBvaW50ZXIgKHRoZSBza2JfbGlzdF8qIHNpbmdseQorbGlua2VkIGxpc3QgYXBwcm9hY2gpLCBzbyB3ZSBmb3JtIHRoZSBwZXItcGVlciBxdWV1ZSBhcm91bmQgdGhlIHVudXNlZAorc2tiLT5wcmV2IHBvaW50ZXIgKHdoaWNoIHNvcnQgb2YgbWFrZXMgc2Vuc2UgYmVjYXVzZSB0aGUgbGlua3MgYXJlCitwb2ludGluZyBiYWNrd2FyZHMpLiBVc2Ugb2Ygc2tiX3F1ZXVlXyogaXMgbm90IHBvc3NpYmxlIGhlcmUsIGJlY2F1c2UKK3RoYXQgaXMgYmFzZWQgb24gZG91Ymx5IGxpbmtlZCBsaXN0cyBhbmQgc3BpbmxvY2tzLiBNdWx0aXBsZSBjb3JlcyBjYW4KK3dyaXRlIGludG8gdGhlIHF1ZXVlIGF0IGFueSBnaXZlbiB0aW1lLCBiZWNhdXNlIGl0cyB3cml0ZXMgb2NjdXIgaW4gdGhlCitzdGFydF94bWl0IHBhdGggb3IgaW4gdGhlIHVkcF9yZWN2IHBhdGguIEJ1dCByZWFkcyBoYXBwZW4gaW4gYSBzaW5nbGUKK3dvcmtxdWV1ZSBpdGVtIHBlci1wZWVyLCBhbW91bnRpbmcgdG8gYSBtdWx0aS1wcm9kdWNlciwgc2luZ2xlLWNvbnN1bWVyCitwYXJhZGlnbS4KKworVGhlIE1QU0MgcXVldWUgaXMgaW1wbGVtZW50ZWQgbG9ja2xlc3NseSBhbmQgbmV2ZXIgYmxvY2tzLiBIb3dldmVyLCBpdAoraXMgbm90IGxpbmVhcml6YWJsZSAodGhvdWdoIGl0IGlzIHNlcmlhbGl6YWJsZSksIHdpdGggYSB2ZXJ5IHRpZ2h0IGFuZAordW5saWtlbHkgcmFjZSBvbiB3cml0ZXMsIHdoaWNoLCB3aGVuIGhpdCAoc29tZSB0aW55IGZyYWN0aW9uIG9mIHRoZQorMC4xNSUgb2YgcGFydGlhbCBhZGRzIG9uIGEgZnVsbHkgbG9hZGVkIDE2LWNvcmUgeDg2XzY0IHN5c3RlbSksIGNhdXNlcwordGhlIHF1ZXVlIHJlYWRlciB0byB0ZXJtaW5hdGUgZWFybHkuIEhvd2V2ZXIsIGJlY2F1c2UgZXZlcnkgcGFja2V0IHNlbnQKK3F1ZXVlcyB1cCB0aGUgc2FtZSB3b3JrcXVldWUgaXRlbSBhZnRlciBpdCBpcyBmdWxseSBhZGRlZCwgdGhlIHdvcmtlcgorcmVzdW1lcyBhZ2FpbiwgYW5kIHN0b3BwaW5nIGVhcmx5IGlzbid0IGFjdHVhbGx5IGEgcHJvYmxlbSwgc2luY2UgYXQKK3RoYXQgcG9pbnQgdGhlIHBhY2tldCB3b3VsZG4ndCBoYXZlIHlldCBiZWVuIGFkZGVkIHRvIHRoZSBlbmNyeXB0aW9uCitxdWV1ZS4gVGhlc2UgcHJvcGVydGllcyBhbGxvdyB1cyB0byBhdm9pZCBkaXNhYmxpbmcgaW50ZXJydXB0cyBvcgorc3Bpbm5pbmcuIFRoZSBkZXNpZ24gaXMgYmFzZWQgb24gRG1pdHJ5IFZ5dWtvdidzIGFsZ29yaXRobSBbMV0uCisKK1BlcmZvcm1hbmNlLXdpc2UsIG9yZGluYXJpbHkgbGlzdC1iYXNlZCBxdWV1ZXMgYXJlbid0IHByZWZlcmFibGUgdG8KK3JpbmdidWZmZXJzLCBiZWNhdXNlIG9mIGNhY2hlIG1pc3NlcyB3aGVuIGZvbGxvd2luZyBwb2ludGVycyBhcm91bmQuCitIb3dldmVyLCB3ZSAqYWxyZWFkeSogaGF2ZSB0byBmb2xsb3cgdGhlIGFkamFjZW50IHBvaW50ZXJzIHdoZW4gd29ya2luZwordGhyb3VnaCBmcmFnbWVudHMsIHNvIHRoZXJlIHNob3VsZG4ndCBhY3R1YWxseSBiZSBhbnkgY2hhbmdlIHRoZXJlLiBBCitwb3RlbnRpYWwgZG93bnNpZGUgaXMgdGhhdCBkZXF1ZXVlaW5nIGlzIGEgYml0IG1vcmUgY29tcGxpY2F0ZWQsIGJ1dCB0aGUKK3B0cl9yaW5nIHN0cnVjdHVyZSB1c2VkIHByaW9yIGhhZCBhIHNwaW5sb2NrIHdoZW4gZGVxdWV1ZWluZywgc28gYWxsIGFuZAorYWxsIHRoZSBkaWZmZXJlbmNlIGFwcGVhcnMgdG8gYmUgYSB3YXNoLgorCitBY3R1YWxseSwgZnJvbSBwcm9maWxpbmcsIHRoZSBiaWdnZXN0IHBlcmZvcm1hbmNlIGhpdCwgYnkgZmFyLCBvZiB0aGlzCitjb21taXQgd2luZHMgdXAgYmVpbmcgYXRvbWljX2FkZF91bmxlc3MoY291bnQsIDEsIG1heCkgYW5kIGF0b21pY18KK2RlYyhjb3VudCksIHdoaWNoIGFjY291bnQgZm9yIHRoZSBtYWpvcml0eSBvZiBDUFUgdGltZSwgYWNjb3JkaW5nIHRvCitwZXJmLiBJbiB0aGF0IHNlbnNlLCB0aGUgcHJldmlvdXMgcmluZyBidWZmZXIgd2FzIHN1cGVyaW9yIGluIHRoYXQgaXQKK2NvdWxkIGNoZWNrIGlmIGl0IHdhcyBmdWxsIGJ5IGhlYWQ9PXRhaWwsIHdoaWNoIHRoZSBsaXN0LWJhc2VkIGFwcHJvYWNoCitjYW5ub3QgZG8uCisKK0J1dCBhbGwgYW5kIGFsbCwgdGhpcyBlbmFibGVzIHVzIHRvIGdldCBtYXNzaXZlIG1lbW9yeSBzYXZpbmdzLCBhbGxvd2luZworV2lyZUd1YXJkIHRvIHNjYWxlIGZvciByZWFsIHdvcmxkIGRlcGxveW1lbnRzLCB3aXRob3V0IHRha2luZyBtdWNoIG9mIGEKK3BlcmZvcm1hbmNlIGhpdC4KKworWzFdIGh0dHA6Ly93d3cuMTAyNGNvcmVzLm5ldC9ob21lL2xvY2stZnJlZS1hbGdvcml0aG1zL3F1ZXVlcy9pbnRydXNpdmUtbXBzYy1ub2RlLWJhc2VkLXF1ZXVlCisKK1Jldmlld2VkLWJ5OiBEbWl0cnkgVnl1a292IDxkdnl1a292QGdvb2dsZS5jb20+CitSZXZpZXdlZC1ieTogVG9rZSBIw7hpbGFuZC1Kw7hyZ2Vuc2VuIDx0b2tlQHJlZGhhdC5jb20+CitGaXhlczogZTcwOTZjMTMxZTUxICgibmV0OiBXaXJlR3VhcmQgc2VjdXJlIG5ldHdvcmsgdHVubmVsIikKK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorU2lnbmVkLW9mZi1ieTogSmFrdWIgS2ljaW5za2kgPGt1YmFAa2VybmVsLm9yZz4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jICAgfCAxMiArKy0tLQorIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9kZXZpY2UuaCAgIHwgMTUgKysrLS0tCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYyAgICAgfCAyOCArKysrLS0tLS0tLQorIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmggICAgIHwgIDQgKy0KKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuYyB8IDg2ICsrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmggfCA0NSArKysrKysrKysrKystLS0tLQorIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMgIHwgMTYgKysrLS0tCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYyAgICAgfCAzMSArKysrLS0tLS0tLS0KKyA4IGZpbGVzIGNoYW5nZWQsIDE0NCBpbnNlcnRpb25zKCspLCA5MyBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5jCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmMKK0BAIC0yMzUsOCArMjM1LDggQEAgc3RhdGljIHZvaWQgd2dfZGVzdHJ1Y3Qoc3RydWN0IG5ldF9kZXZpYworIAlkZXN0cm95X3dvcmtxdWV1ZSh3Zy0+aGFuZHNoYWtlX3JlY2VpdmVfd3EpOworIAlkZXN0cm95X3dvcmtxdWV1ZSh3Zy0+aGFuZHNoYWtlX3NlbmRfd3EpOworIAlkZXN0cm95X3dvcmtxdWV1ZSh3Zy0+cGFja2V0X2NyeXB0X3dxKTsKKy0Jd2dfcGFja2V0X3F1ZXVlX2ZyZWUoJndnLT5kZWNyeXB0X3F1ZXVlLCB0cnVlKTsKKy0Jd2dfcGFja2V0X3F1ZXVlX2ZyZWUoJndnLT5lbmNyeXB0X3F1ZXVlLCB0cnVlKTsKKysJd2dfcGFja2V0X3F1ZXVlX2ZyZWUoJndnLT5kZWNyeXB0X3F1ZXVlKTsKKysJd2dfcGFja2V0X3F1ZXVlX2ZyZWUoJndnLT5lbmNyeXB0X3F1ZXVlKTsKKyAJcmN1X2JhcnJpZXIoKTsgLyogV2FpdCBmb3IgYWxsIHRoZSBwZWVycyB0byBiZSBhY3R1YWxseSBmcmVlZC4gKi8KKyAJd2dfcmF0ZWxpbWl0ZXJfdW5pbml0KCk7CisgCW1lbXplcm9fZXhwbGljaXQoJndnLT5zdGF0aWNfaWRlbnRpdHksIHNpemVvZih3Zy0+c3RhdGljX2lkZW50aXR5KSk7CitAQCAtMzM4LDEyICszMzgsMTIgQEAgc3RhdGljIGludCB3Z19uZXdsaW5rKHN0cnVjdCBuZXQgKnNyY19uZQorIAkJZ290byBlcnJfZGVzdHJveV9oYW5kc2hha2Vfc2VuZDsKKyAKKyAJcmV0ID0gd2dfcGFja2V0X3F1ZXVlX2luaXQoJndnLT5lbmNyeXB0X3F1ZXVlLCB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXIsCistCQkJCSAgIHRydWUsIE1BWF9RVUVVRURfUEFDS0VUUyk7CisrCQkJCSAgIE1BWF9RVUVVRURfUEFDS0VUUyk7CisgCWlmIChyZXQgPCAwKQorIAkJZ290byBlcnJfZGVzdHJveV9wYWNrZXRfY3J5cHQ7CisgCisgCXJldCA9IHdnX3BhY2tldF9xdWV1ZV9pbml0KCZ3Zy0+ZGVjcnlwdF9xdWV1ZSwgd2dfcGFja2V0X2RlY3J5cHRfd29ya2VyLAorLQkJCQkgICB0cnVlLCBNQVhfUVVFVUVEX1BBQ0tFVFMpOworKwkJCQkgICBNQVhfUVVFVUVEX1BBQ0tFVFMpOworIAlpZiAocmV0IDwgMCkKKyAJCWdvdG8gZXJyX2ZyZWVfZW5jcnlwdF9xdWV1ZTsKKyAKK0BAIC0zNjgsOSArMzY4LDkgQEAgc3RhdGljIGludCB3Z19uZXdsaW5rKHN0cnVjdCBuZXQgKnNyY19uZQorIGVycl91bmluaXRfcmF0ZWxpbWl0ZXI6CisgCXdnX3JhdGVsaW1pdGVyX3VuaW5pdCgpOworIGVycl9mcmVlX2RlY3J5cHRfcXVldWU6CistCXdnX3BhY2tldF9xdWV1ZV9mcmVlKCZ3Zy0+ZGVjcnlwdF9xdWV1ZSwgdHJ1ZSk7CisrCXdnX3BhY2tldF9xdWV1ZV9mcmVlKCZ3Zy0+ZGVjcnlwdF9xdWV1ZSk7CisgZXJyX2ZyZWVfZW5jcnlwdF9xdWV1ZToKKy0Jd2dfcGFja2V0X3F1ZXVlX2ZyZWUoJndnLT5lbmNyeXB0X3F1ZXVlLCB0cnVlKTsKKysJd2dfcGFja2V0X3F1ZXVlX2ZyZWUoJndnLT5lbmNyeXB0X3F1ZXVlKTsKKyBlcnJfZGVzdHJveV9wYWNrZXRfY3J5cHQ6CisgCWRlc3Ryb3lfd29ya3F1ZXVlKHdnLT5wYWNrZXRfY3J5cHRfd3EpOworIGVycl9kZXN0cm95X2hhbmRzaGFrZV9zZW5kOgorLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL2RldmljZS5oCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvZGV2aWNlLmgKK0BAIC0yNywxMyArMjcsMTQgQEAgc3RydWN0IG11bHRpY29yZV93b3JrZXIgeworIAorIHN0cnVjdCBjcnlwdF9xdWV1ZSB7CisgCXN0cnVjdCBwdHJfcmluZyByaW5nOworLQl1bmlvbiB7CistCQlzdHJ1Y3QgeworLQkJCXN0cnVjdCBtdWx0aWNvcmVfd29ya2VyIF9fcGVyY3B1ICp3b3JrZXI7CistCQkJaW50IGxhc3RfY3B1OworLQkJfTsKKy0JCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworLQl9OworKwlzdHJ1Y3QgbXVsdGljb3JlX3dvcmtlciBfX3BlcmNwdSAqd29ya2VyOworKwlpbnQgbGFzdF9jcHU7CisrfTsKKysKKytzdHJ1Y3QgcHJldl9xdWV1ZSB7CisrCXN0cnVjdCBza19idWZmICpoZWFkLCAqdGFpbCwgKnBlZWtlZDsKKysJc3RydWN0IHsgc3RydWN0IHNrX2J1ZmYgKm5leHQsICpwcmV2OyB9IGVtcHR5OyAvLyBNYXRjaCBmaXJzdCAyIG1lbWJlcnMgb2Ygc3RydWN0IHNrX2J1ZmYuCisrCWF0b21pY190IGNvdW50OworIH07CisgCisgc3RydWN0IHdnX2RldmljZSB7CistLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jCitAQCAtMzIsMjcgKzMyLDIyIEBAIHN0cnVjdCB3Z19wZWVyICp3Z19wZWVyX2NyZWF0ZShzdHJ1Y3Qgd2cKKyAJcGVlciA9IGt6YWxsb2Moc2l6ZW9mKCpwZWVyKSwgR0ZQX0tFUk5FTCk7CisgCWlmICh1bmxpa2VseSghcGVlcikpCisgCQlyZXR1cm4gRVJSX1BUUihyZXQpOworLQlwZWVyLT5kZXZpY2UgPSB3ZzsKKysJaWYgKGRzdF9jYWNoZV9pbml0KCZwZWVyLT5lbmRwb2ludF9jYWNoZSwgR0ZQX0tFUk5FTCkpCisrCQlnb3RvIGVycjsKKyAKKysJcGVlci0+ZGV2aWNlID0gd2c7CisgCXdnX25vaXNlX2hhbmRzaGFrZV9pbml0KCZwZWVyLT5oYW5kc2hha2UsICZ3Zy0+c3RhdGljX2lkZW50aXR5LAorIAkJCQlwdWJsaWNfa2V5LCBwcmVzaGFyZWRfa2V5LCBwZWVyKTsKKy0JaWYgKGRzdF9jYWNoZV9pbml0KCZwZWVyLT5lbmRwb2ludF9jYWNoZSwgR0ZQX0tFUk5FTCkpCistCQlnb3RvIGVycl8xOworLQlpZiAod2dfcGFja2V0X3F1ZXVlX2luaXQoJnBlZXItPnR4X3F1ZXVlLCB3Z19wYWNrZXRfdHhfd29ya2VyLCBmYWxzZSwKKy0JCQkJIE1BWF9RVUVVRURfUEFDS0VUUykpCistCQlnb3RvIGVycl8yOworLQlpZiAod2dfcGFja2V0X3F1ZXVlX2luaXQoJnBlZXItPnJ4X3F1ZXVlLCBOVUxMLCBmYWxzZSwKKy0JCQkJIE1BWF9RVUVVRURfUEFDS0VUUykpCistCQlnb3RvIGVycl8zOworLQorIAlwZWVyLT5pbnRlcm5hbF9pZCA9IGF0b21pYzY0X2luY19yZXR1cm4oJnBlZXJfY291bnRlcik7CisgCXBlZXItPnNlcmlhbF93b3JrX2NwdSA9IG5yX2NwdW1hc2tfYml0czsKKyAJd2dfY29va2llX2luaXQoJnBlZXItPmxhdGVzdF9jb29raWUpOworIAl3Z190aW1lcnNfaW5pdChwZWVyKTsKKyAJd2dfY29va2llX2NoZWNrZXJfcHJlY29tcHV0ZV9wZWVyX2tleXMocGVlcik7CisgCXNwaW5fbG9ja19pbml0KCZwZWVyLT5rZXlwYWlycy5rZXlwYWlyX3VwZGF0ZV9sb2NrKTsKKy0JSU5JVF9XT1JLKCZwZWVyLT50cmFuc21pdF9oYW5kc2hha2Vfd29yaywKKy0JCSAgd2dfcGFja2V0X2hhbmRzaGFrZV9zZW5kX3dvcmtlcik7CisrCUlOSVRfV09SSygmcGVlci0+dHJhbnNtaXRfaGFuZHNoYWtlX3dvcmssIHdnX3BhY2tldF9oYW5kc2hha2Vfc2VuZF93b3JrZXIpOworKwlJTklUX1dPUksoJnBlZXItPnRyYW5zbWl0X3BhY2tldF93b3JrLCB3Z19wYWNrZXRfdHhfd29ya2VyKTsKKysJd2dfcHJldl9xdWV1ZV9pbml0KCZwZWVyLT50eF9xdWV1ZSk7CisrCXdnX3ByZXZfcXVldWVfaW5pdCgmcGVlci0+cnhfcXVldWUpOworIAlyd2xvY2tfaW5pdCgmcGVlci0+ZW5kcG9pbnRfbG9jayk7CisgCWtyZWZfaW5pdCgmcGVlci0+cmVmY291bnQpOworIAlza2JfcXVldWVfaGVhZF9pbml0KCZwZWVyLT5zdGFnZWRfcGFja2V0X3F1ZXVlKTsKK0BAIC02OCwxMSArNjMsNyBAQCBzdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnCisgCXByX2RlYnVnKCIlczogUGVlciAlbGx1IGNyZWF0ZWRcbiIsIHdnLT5kZXYtPm5hbWUsIHBlZXItPmludGVybmFsX2lkKTsKKyAJcmV0dXJuIHBlZXI7CisgCistZXJyXzM6CistCXdnX3BhY2tldF9xdWV1ZV9mcmVlKCZwZWVyLT50eF9xdWV1ZSwgZmFsc2UpOworLWVycl8yOgorLQlkc3RfY2FjaGVfZGVzdHJveSgmcGVlci0+ZW5kcG9pbnRfY2FjaGUpOworLWVycl8xOgorK2VycjoKKyAJa2ZyZWUocGVlcik7CisgCXJldHVybiBFUlJfUFRSKHJldCk7CisgfQorQEAgLTE5Nyw4ICsxODgsNyBAQCBzdGF0aWMgdm9pZCByY3VfcmVsZWFzZShzdHJ1Y3QgcmN1X2hlYWQKKyAJc3RydWN0IHdnX3BlZXIgKnBlZXIgPSBjb250YWluZXJfb2YocmN1LCBzdHJ1Y3Qgd2dfcGVlciwgcmN1KTsKKyAKKyAJZHN0X2NhY2hlX2Rlc3Ryb3koJnBlZXItPmVuZHBvaW50X2NhY2hlKTsKKy0Jd2dfcGFja2V0X3F1ZXVlX2ZyZWUoJnBlZXItPnJ4X3F1ZXVlLCBmYWxzZSk7CistCXdnX3BhY2tldF9xdWV1ZV9mcmVlKCZwZWVyLT50eF9xdWV1ZSwgZmFsc2UpOworKwlXQVJOX09OKHdnX3ByZXZfcXVldWVfcGVlaygmcGVlci0+dHhfcXVldWUpIHx8IHdnX3ByZXZfcXVldWVfcGVlaygmcGVlci0+cnhfcXVldWUpKTsKKyAKKyAJLyogVGhlIGZpbmFsIHplcm9pbmcgdGFrZXMgY2FyZSBvZiBjbGVhcmluZyBhbnkgcmVtYWluaW5nIGhhbmRzaGFrZSBrZXkKKyAJICogbWF0ZXJpYWwgYW5kIG90aGVyIHBvdGVudGlhbGx5IHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi4KKy0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmgKKysrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmgKK0BAIC0zNiw3ICszNiw3IEBAIHN0cnVjdCBlbmRwb2ludCB7CisgCisgc3RydWN0IHdnX3BlZXIgeworIAlzdHJ1Y3Qgd2dfZGV2aWNlICpkZXZpY2U7CistCXN0cnVjdCBjcnlwdF9xdWV1ZSB0eF9xdWV1ZSwgcnhfcXVldWU7CisrCXN0cnVjdCBwcmV2X3F1ZXVlIHR4X3F1ZXVlLCByeF9xdWV1ZTsKKyAJc3RydWN0IHNrX2J1ZmZfaGVhZCBzdGFnZWRfcGFja2V0X3F1ZXVlOworIAlpbnQgc2VyaWFsX3dvcmtfY3B1OworIAlib29sIGlzX2RlYWQ7CitAQCAtNDYsNyArNDYsNyBAQCBzdHJ1Y3Qgd2dfcGVlciB7CisgCXJ3bG9ja190IGVuZHBvaW50X2xvY2s7CisgCXN0cnVjdCBub2lzZV9oYW5kc2hha2UgaGFuZHNoYWtlOworIAlhdG9taWM2NF90IGxhc3Rfc2VudF9oYW5kc2hha2U7CistCXN0cnVjdCB3b3JrX3N0cnVjdCB0cmFuc21pdF9oYW5kc2hha2Vfd29yaywgY2xlYXJfcGVlcl93b3JrOworKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHJhbnNtaXRfaGFuZHNoYWtlX3dvcmssIGNsZWFyX3BlZXJfd29yaywgdHJhbnNtaXRfcGFja2V0X3dvcms7CisgCXN0cnVjdCBjb29raWUgbGF0ZXN0X2Nvb2tpZTsKKyAJc3RydWN0IGhsaXN0X25vZGUgcHVia2V5X2hhc2g7CisgCXU2NCByeF9ieXRlcywgdHhfYnl0ZXM7CistLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcXVldWVpbmcuYworKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmMKK0BAIC05LDggKzksNyBAQCBzdHJ1Y3QgbXVsdGljb3JlX3dvcmtlciBfX3BlcmNwdSAqCisgd2dfcGFja2V0X3BlcmNwdV9tdWx0aWNvcmVfd29ya2VyX2FsbG9jKHdvcmtfZnVuY190IGZ1bmN0aW9uLCB2b2lkICpwdHIpCisgeworIAlpbnQgY3B1OworLQlzdHJ1Y3QgbXVsdGljb3JlX3dvcmtlciBfX3BlcmNwdSAqd29ya2VyID0KKy0JCWFsbG9jX3BlcmNwdShzdHJ1Y3QgbXVsdGljb3JlX3dvcmtlcik7CisrCXN0cnVjdCBtdWx0aWNvcmVfd29ya2VyIF9fcGVyY3B1ICp3b3JrZXIgPSBhbGxvY19wZXJjcHUoc3RydWN0IG11bHRpY29yZV93b3JrZXIpOworIAorIAlpZiAoIXdvcmtlcikKKyAJCXJldHVybiBOVUxMOworQEAgLTIzLDcgKzIyLDcgQEAgd2dfcGFja2V0X3BlcmNwdV9tdWx0aWNvcmVfd29ya2VyX2FsbG9jKAorIH0KKyAKKyBpbnQgd2dfcGFja2V0X3F1ZXVlX2luaXQoc3RydWN0IGNyeXB0X3F1ZXVlICpxdWV1ZSwgd29ya19mdW5jX3QgZnVuY3Rpb24sCistCQkJIGJvb2wgbXVsdGljb3JlLCB1bnNpZ25lZCBpbnQgbGVuKQorKwkJCSB1bnNpZ25lZCBpbnQgbGVuKQorIHsKKyAJaW50IHJldDsKKyAKK0BAIC0zMSwyNSArMzAsNzggQEAgaW50IHdnX3BhY2tldF9xdWV1ZV9pbml0KHN0cnVjdCBjcnlwdF9xdQorIAlyZXQgPSBwdHJfcmluZ19pbml0KCZxdWV1ZS0+cmluZywgbGVuLCBHRlBfS0VSTkVMKTsKKyAJaWYgKHJldCkKKyAJCXJldHVybiByZXQ7CistCWlmIChmdW5jdGlvbikgeworLQkJaWYgKG11bHRpY29yZSkgeworLQkJCXF1ZXVlLT53b3JrZXIgPSB3Z19wYWNrZXRfcGVyY3B1X211bHRpY29yZV93b3JrZXJfYWxsb2MoCistCQkJCWZ1bmN0aW9uLCBxdWV1ZSk7CistCQkJaWYgKCFxdWV1ZS0+d29ya2VyKSB7CistCQkJCXB0cl9yaW5nX2NsZWFudXAoJnF1ZXVlLT5yaW5nLCBOVUxMKTsKKy0JCQkJcmV0dXJuIC1FTk9NRU07CistCQkJfQorLQkJfSBlbHNlIHsKKy0JCQlJTklUX1dPUksoJnF1ZXVlLT53b3JrLCBmdW5jdGlvbik7CistCQl9CisrCXF1ZXVlLT53b3JrZXIgPSB3Z19wYWNrZXRfcGVyY3B1X211bHRpY29yZV93b3JrZXJfYWxsb2MoZnVuY3Rpb24sIHF1ZXVlKTsKKysJaWYgKCFxdWV1ZS0+d29ya2VyKSB7CisrCQlwdHJfcmluZ19jbGVhbnVwKCZxdWV1ZS0+cmluZywgTlVMTCk7CisrCQlyZXR1cm4gLUVOT01FTTsKKyAJfQorIAlyZXR1cm4gMDsKKyB9CisgCistdm9pZCB3Z19wYWNrZXRfcXVldWVfZnJlZShzdHJ1Y3QgY3J5cHRfcXVldWUgKnF1ZXVlLCBib29sIG11bHRpY29yZSkKKyt2b2lkIHdnX3BhY2tldF9xdWV1ZV9mcmVlKHN0cnVjdCBjcnlwdF9xdWV1ZSAqcXVldWUpCisgeworLQlpZiAobXVsdGljb3JlKQorLQkJZnJlZV9wZXJjcHUocXVldWUtPndvcmtlcik7CisrCWZyZWVfcGVyY3B1KHF1ZXVlLT53b3JrZXIpOworIAlXQVJOX09OKCFfX3B0cl9yaW5nX2VtcHR5KCZxdWV1ZS0+cmluZykpOworIAlwdHJfcmluZ19jbGVhbnVwKCZxdWV1ZS0+cmluZywgTlVMTCk7CisgfQorKworKyNkZWZpbmUgTkVYVChza2IpICgoc2tiKS0+cHJldikKKysjZGVmaW5lIFNUVUIocXVldWUpICgoc3RydWN0IHNrX2J1ZmYgKikmcXVldWUtPmVtcHR5KQorKworK3ZvaWQgd2dfcHJldl9xdWV1ZV9pbml0KHN0cnVjdCBwcmV2X3F1ZXVlICpxdWV1ZSkKKyt7CisrCU5FWFQoU1RVQihxdWV1ZSkpID0gTlVMTDsKKysJcXVldWUtPmhlYWQgPSBxdWV1ZS0+dGFpbCA9IFNUVUIocXVldWUpOworKwlxdWV1ZS0+cGVla2VkID0gTlVMTDsKKysJYXRvbWljX3NldCgmcXVldWUtPmNvdW50LCAwKTsKKysJQlVJTERfQlVHX09OKAorKwkJb2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIG5leHQpICE9IG9mZnNldG9mKHN0cnVjdCBwcmV2X3F1ZXVlLCBlbXB0eS5uZXh0KSAtCisrCQkJCQkJCW9mZnNldG9mKHN0cnVjdCBwcmV2X3F1ZXVlLCBlbXB0eSkgfHwKKysJCW9mZnNldG9mKHN0cnVjdCBza19idWZmLCBwcmV2KSAhPSBvZmZzZXRvZihzdHJ1Y3QgcHJldl9xdWV1ZSwgZW1wdHkucHJldikgLQorKwkJCQkJCQkgb2Zmc2V0b2Yoc3RydWN0IHByZXZfcXVldWUsIGVtcHR5KSk7CisrfQorKworK3N0YXRpYyB2b2lkIF9fd2dfcHJldl9xdWV1ZV9lbnF1ZXVlKHN0cnVjdCBwcmV2X3F1ZXVlICpxdWV1ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKKyt7CisrCVdSSVRFX09OQ0UoTkVYVChza2IpLCBOVUxMKTsKKysJV1JJVEVfT05DRShORVhUKHhjaGdfcmVsZWFzZSgmcXVldWUtPmhlYWQsIHNrYikpLCBza2IpOworK30KKysKKytib29sIHdnX3ByZXZfcXVldWVfZW5xdWV1ZShzdHJ1Y3QgcHJldl9xdWV1ZSAqcXVldWUsIHN0cnVjdCBza19idWZmICpza2IpCisreworKwlpZiAoIWF0b21pY19hZGRfdW5sZXNzKCZxdWV1ZS0+Y291bnQsIDEsIE1BWF9RVUVVRURfUEFDS0VUUykpCisrCQlyZXR1cm4gZmFsc2U7CisrCV9fd2dfcHJldl9xdWV1ZV9lbnF1ZXVlKHF1ZXVlLCBza2IpOworKwlyZXR1cm4gdHJ1ZTsKKyt9CisrCisrc3RydWN0IHNrX2J1ZmYgKndnX3ByZXZfcXVldWVfZGVxdWV1ZShzdHJ1Y3QgcHJldl9xdWV1ZSAqcXVldWUpCisreworKwlzdHJ1Y3Qgc2tfYnVmZiAqdGFpbCA9IHF1ZXVlLT50YWlsLCAqbmV4dCA9IHNtcF9sb2FkX2FjcXVpcmUoJk5FWFQodGFpbCkpOworKworKwlpZiAodGFpbCA9PSBTVFVCKHF1ZXVlKSkgeworKwkJaWYgKCFuZXh0KQorKwkJCXJldHVybiBOVUxMOworKwkJcXVldWUtPnRhaWwgPSBuZXh0OworKwkJdGFpbCA9IG5leHQ7CisrCQluZXh0ID0gc21wX2xvYWRfYWNxdWlyZSgmTkVYVChuZXh0KSk7CisrCX0KKysJaWYgKG5leHQpIHsKKysJCXF1ZXVlLT50YWlsID0gbmV4dDsKKysJCWF0b21pY19kZWMoJnF1ZXVlLT5jb3VudCk7CisrCQlyZXR1cm4gdGFpbDsKKysJfQorKwlpZiAodGFpbCAhPSBSRUFEX09OQ0UocXVldWUtPmhlYWQpKQorKwkJcmV0dXJuIE5VTEw7CisrCV9fd2dfcHJldl9xdWV1ZV9lbnF1ZXVlKHF1ZXVlLCBTVFVCKHF1ZXVlKSk7CisrCW5leHQgPSBzbXBfbG9hZF9hY3F1aXJlKCZORVhUKHRhaWwpKTsKKysJaWYgKG5leHQpIHsKKysJCXF1ZXVlLT50YWlsID0gbmV4dDsKKysJCWF0b21pY19kZWMoJnF1ZXVlLT5jb3VudCk7CisrCQlyZXR1cm4gdGFpbDsKKysJfQorKwlyZXR1cm4gTlVMTDsKKyt9CisrCisrI3VuZGVmIE5FWFQKKysjdW5kZWYgU1RVQgorLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3F1ZXVlaW5nLmgKKysrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9xdWV1ZWluZy5oCitAQCAtMTcsMTIgKzE3LDEzIEBAIHN0cnVjdCB3Z19kZXZpY2U7Cisgc3RydWN0IHdnX3BlZXI7Cisgc3RydWN0IG11bHRpY29yZV93b3JrZXI7Cisgc3RydWN0IGNyeXB0X3F1ZXVlOworK3N0cnVjdCBwcmV2X3F1ZXVlOworIHN0cnVjdCBza19idWZmOworIAorIC8qIHF1ZXVlaW5nLmMgQVBJczogKi8KKyBpbnQgd2dfcGFja2V0X3F1ZXVlX2luaXQoc3RydWN0IGNyeXB0X3F1ZXVlICpxdWV1ZSwgd29ya19mdW5jX3QgZnVuY3Rpb24sCistCQkJIGJvb2wgbXVsdGljb3JlLCB1bnNpZ25lZCBpbnQgbGVuKTsKKy12b2lkIHdnX3BhY2tldF9xdWV1ZV9mcmVlKHN0cnVjdCBjcnlwdF9xdWV1ZSAqcXVldWUsIGJvb2wgbXVsdGljb3JlKTsKKysJCQkgdW5zaWduZWQgaW50IGxlbik7Cisrdm9pZCB3Z19wYWNrZXRfcXVldWVfZnJlZShzdHJ1Y3QgY3J5cHRfcXVldWUgKnF1ZXVlKTsKKyBzdHJ1Y3QgbXVsdGljb3JlX3dvcmtlciBfX3BlcmNwdSAqCisgd2dfcGFja2V0X3BlcmNwdV9tdWx0aWNvcmVfd29ya2VyX2FsbG9jKHdvcmtfZnVuY190IGZ1bmN0aW9uLCB2b2lkICpwdHIpOworIAorQEAgLTEzNSw4ICsxMzYsMzEgQEAgc3RhdGljIGlubGluZSBpbnQgd2dfY3B1bWFza19uZXh0X29ubGluZQorIAlyZXR1cm4gY3B1OworIH0KKyAKKyt2b2lkIHdnX3ByZXZfcXVldWVfaW5pdChzdHJ1Y3QgcHJldl9xdWV1ZSAqcXVldWUpOworKworKy8qIE11bHRpIHByb2R1Y2VyICovCisrYm9vbCB3Z19wcmV2X3F1ZXVlX2VucXVldWUoc3RydWN0IHByZXZfcXVldWUgKnF1ZXVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKysKKysvKiBTaW5nbGUgY29uc3VtZXIgKi8KKytzdHJ1Y3Qgc2tfYnVmZiAqd2dfcHJldl9xdWV1ZV9kZXF1ZXVlKHN0cnVjdCBwcmV2X3F1ZXVlICpxdWV1ZSk7CisrCisrLyogU2luZ2xlIGNvbnN1bWVyICovCisrc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqd2dfcHJldl9xdWV1ZV9wZWVrKHN0cnVjdCBwcmV2X3F1ZXVlICpxdWV1ZSkKKyt7CisrCWlmIChxdWV1ZS0+cGVla2VkKQorKwkJcmV0dXJuIHF1ZXVlLT5wZWVrZWQ7CisrCXF1ZXVlLT5wZWVrZWQgPSB3Z19wcmV2X3F1ZXVlX2RlcXVldWUocXVldWUpOworKwlyZXR1cm4gcXVldWUtPnBlZWtlZDsKKyt9CisrCisrLyogU2luZ2xlIGNvbnN1bWVyICovCisrc3RhdGljIGlubGluZSB2b2lkIHdnX3ByZXZfcXVldWVfZHJvcF9wZWVrZWQoc3RydWN0IHByZXZfcXVldWUgKnF1ZXVlKQorK3sKKysJcXVldWUtPnBlZWtlZCA9IE5VTEw7CisrfQorKworIHN0YXRpYyBpbmxpbmUgaW50IHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcigKKy0Jc3RydWN0IGNyeXB0X3F1ZXVlICpkZXZpY2VfcXVldWUsIHN0cnVjdCBjcnlwdF9xdWV1ZSAqcGVlcl9xdWV1ZSwKKysJc3RydWN0IGNyeXB0X3F1ZXVlICpkZXZpY2VfcXVldWUsIHN0cnVjdCBwcmV2X3F1ZXVlICpwZWVyX3F1ZXVlLAorIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EsIGludCAqbmV4dF9jcHUpCisgeworIAlpbnQgY3B1OworQEAgLTE0NSw4ICsxNjksOSBAQCBzdGF0aWMgaW5saW5lIGludCB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9kCisgCS8qIFdlIGZpcnN0IHF1ZXVlIHRoaXMgdXAgZm9yIHRoZSBwZWVyIGluZ2VzdGlvbiwgYnV0IHRoZSBjb25zdW1lcgorIAkgKiB3aWxsIHdhaXQgZm9yIHRoZSBzdGF0ZSB0byBjaGFuZ2UgdG8gQ1JZUFRFRCBvciBERUFEIGJlZm9yZS4KKyAJICovCistCWlmICh1bmxpa2VseShwdHJfcmluZ19wcm9kdWNlX2JoKCZwZWVyX3F1ZXVlLT5yaW5nLCBza2IpKSkKKysJaWYgKHVubGlrZWx5KCF3Z19wcmV2X3F1ZXVlX2VucXVldWUocGVlcl9xdWV1ZSwgc2tiKSkpCisgCQlyZXR1cm4gLUVOT1NQQzsKKysKKyAJLyogVGhlbiB3ZSBxdWV1ZSBpdCB1cCBpbiB0aGUgZGV2aWNlIHF1ZXVlLCB3aGljaCBjb25zdW1lcyB0aGUKKyAJICogcGFja2V0IGFzIHNvb24gYXMgaXQgY2FuLgorIAkgKi8KK0BAIC0xNTcsOSArMTgyLDcgQEAgc3RhdGljIGlubGluZSBpbnQgd2dfcXVldWVfZW5xdWV1ZV9wZXJfZAorIAlyZXR1cm4gMDsKKyB9CisgCistc3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXIoc3RydWN0IGNyeXB0X3F1ZXVlICpxdWV1ZSwKKy0JCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKy0JCQkJCSAgICAgZW51bSBwYWNrZXRfc3RhdGUgc3RhdGUpCisrc3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXRfc3RhdGUgc3RhdGUpCisgeworIAkvKiBXZSB0YWtlIGEgcmVmZXJlbmNlLCBiZWNhdXNlIGFzIHNvb24gYXMgd2UgY2FsbCBhdG9taWNfc2V0LCB0aGUKKyAJICogcGVlciBjYW4gYmUgZnJlZWQgZnJvbSBiZWxvdyB1cy4KK0BAIC0xNjcsMTQgKzE5MCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgd2dfcXVldWVfZW5xdWV1ZV9wZXJfCisgCXN0cnVjdCB3Z19wZWVyICpwZWVyID0gd2dfcGVlcl9nZXQoUEFDS0VUX1BFRVIoc2tiKSk7CisgCisgCWF0b21pY19zZXRfcmVsZWFzZSgmUEFDS0VUX0NCKHNrYiktPnN0YXRlLCBzdGF0ZSk7CistCXF1ZXVlX3dvcmtfb24od2dfY3B1bWFza19jaG9vc2Vfb25saW5lKCZwZWVyLT5zZXJpYWxfd29ya19jcHUsCistCQkJCQkgICAgICAgcGVlci0+aW50ZXJuYWxfaWQpLAorLQkJICAgICAgcGVlci0+ZGV2aWNlLT5wYWNrZXRfY3J5cHRfd3EsICZxdWV1ZS0+d29yayk7CisrCXF1ZXVlX3dvcmtfb24od2dfY3B1bWFza19jaG9vc2Vfb25saW5lKCZwZWVyLT5zZXJpYWxfd29ya19jcHUsIHBlZXItPmludGVybmFsX2lkKSwKKysJCSAgICAgIHBlZXItPmRldmljZS0+cGFja2V0X2NyeXB0X3dxLCAmcGVlci0+dHJhbnNtaXRfcGFja2V0X3dvcmspOworIAl3Z19wZWVyX3B1dChwZWVyKTsKKyB9CisgCistc3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfbmFwaShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorLQkJCQkJCSAgZW51bSBwYWNrZXRfc3RhdGUgc3RhdGUpCisrc3RhdGljIGlubGluZSB2b2lkIHdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfcngoc3RydWN0IHNrX2J1ZmYgKnNrYiwgZW51bSBwYWNrZXRfc3RhdGUgc3RhdGUpCisgeworIAkvKiBXZSB0YWtlIGEgcmVmZXJlbmNlLCBiZWNhdXNlIGFzIHNvb24gYXMgd2UgY2FsbCBhdG9taWNfc2V0LCB0aGUKKyAJICogcGVlciBjYW4gYmUgZnJlZWQgZnJvbSBiZWxvdyB1cy4KKy0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMKKysrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9yZWNlaXZlLmMKK0BAIC00NDQsNyArNDQ0LDYgQEAgcGFja2V0X3Byb2Nlc3NlZDoKKyBpbnQgd2dfcGFja2V0X3J4X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQorIHsKKyAJc3RydWN0IHdnX3BlZXIgKnBlZXIgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IHdnX3BlZXIsIG5hcGkpOworLQlzdHJ1Y3QgY3J5cHRfcXVldWUgKnF1ZXVlID0gJnBlZXItPnJ4X3F1ZXVlOworIAlzdHJ1Y3Qgbm9pc2Vfa2V5cGFpciAqa2V5cGFpcjsKKyAJc3RydWN0IGVuZHBvaW50IGVuZHBvaW50OworIAllbnVtIHBhY2tldF9zdGF0ZSBzdGF0ZTsKK0BAIC00NTUsMTEgKzQ1NCwxMCBAQCBpbnQgd2dfcGFja2V0X3J4X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0CisgCWlmICh1bmxpa2VseShidWRnZXQgPD0gMCkpCisgCQlyZXR1cm4gMDsKKyAKKy0Jd2hpbGUgKChza2IgPSBfX3B0cl9yaW5nX3BlZWsoJnF1ZXVlLT5yaW5nKSkgIT0gTlVMTCAmJgorKwl3aGlsZSAoKHNrYiA9IHdnX3ByZXZfcXVldWVfcGVlaygmcGVlci0+cnhfcXVldWUpKSAhPSBOVUxMICYmCisgCSAgICAgICAoc3RhdGUgPSBhdG9taWNfcmVhZF9hY3F1aXJlKCZQQUNLRVRfQ0Ioc2tiKS0+c3RhdGUpKSAhPQorIAkJICAgICAgIFBBQ0tFVF9TVEFURV9VTkNSWVBURUQpIHsKKy0JCV9fcHRyX3JpbmdfZGlzY2FyZF9vbmUoJnF1ZXVlLT5yaW5nKTsKKy0JCXBlZXIgPSBQQUNLRVRfUEVFUihza2IpOworKwkJd2dfcHJldl9xdWV1ZV9kcm9wX3BlZWtlZCgmcGVlci0+cnhfcXVldWUpOworIAkJa2V5cGFpciA9IFBBQ0tFVF9DQihza2IpLT5rZXlwYWlyOworIAkJZnJlZSA9IHRydWU7CisgCitAQCAtNTA4LDcgKzUwNiw3IEBAIHZvaWQgd2dfcGFja2V0X2RlY3J5cHRfd29ya2VyKHN0cnVjdCB3b3IKKyAJCWVudW0gcGFja2V0X3N0YXRlIHN0YXRlID0KKyAJCQlsaWtlbHkoZGVjcnlwdF9wYWNrZXQoc2tiLCBQQUNLRVRfQ0Ioc2tiKS0+a2V5cGFpcikpID8KKyAJCQkJUEFDS0VUX1NUQVRFX0NSWVBURUQgOiBQQUNLRVRfU1RBVEVfREVBRDsKKy0JCXdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfbmFwaShza2IsIHN0YXRlKTsKKysJCXdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfcngoc2tiLCBzdGF0ZSk7CisgCQlpZiAobmVlZF9yZXNjaGVkKCkpCisgCQkJY29uZF9yZXNjaGVkKCk7CisgCX0KK0BAIC01MzEsMTIgKzUyOSwxMCBAQCBzdGF0aWMgdm9pZCB3Z19wYWNrZXRfY29uc3VtZV9kYXRhKHN0cnVjCisgCWlmICh1bmxpa2VseShSRUFEX09OQ0UocGVlci0+aXNfZGVhZCkpKQorIAkJZ290byBlcnI7CisgCistCXJldCA9IHdnX3F1ZXVlX2VucXVldWVfcGVyX2RldmljZV9hbmRfcGVlcigmd2ctPmRlY3J5cHRfcXVldWUsCistCQkJCQkJICAgJnBlZXItPnJ4X3F1ZXVlLCBza2IsCistCQkJCQkJICAgd2ctPnBhY2tldF9jcnlwdF93cSwKKy0JCQkJCQkgICAmd2ctPmRlY3J5cHRfcXVldWUubGFzdF9jcHUpOworKwlyZXQgPSB3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9kZXZpY2VfYW5kX3BlZXIoJndnLT5kZWNyeXB0X3F1ZXVlLCAmcGVlci0+cnhfcXVldWUsIHNrYiwKKysJCQkJCQkgICB3Zy0+cGFja2V0X2NyeXB0X3dxLCAmd2ctPmRlY3J5cHRfcXVldWUubGFzdF9jcHUpOworIAlpZiAodW5saWtlbHkocmV0ID09IC1FUElQRSkpCistCQl3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX25hcGkoc2tiLCBQQUNLRVRfU1RBVEVfREVBRCk7CisrCQl3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyX3J4KHNrYiwgUEFDS0VUX1NUQVRFX0RFQUQpOworIAlpZiAobGlrZWx5KCFyZXQgfHwgcmV0ID09IC1FUElQRSkpIHsKKyAJCXJjdV9yZWFkX3VubG9ja19iaCgpOworIAkJcmV0dXJuOworLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYworKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbmQuYworQEAgLTIzOSw4ICsyMzksNyBAQCB2b2lkIHdnX3BhY2tldF9zZW5kX2tlZXBhbGl2ZShzdHJ1Y3Qgd2dfCisgCXdnX3BhY2tldF9zZW5kX3N0YWdlZF9wYWNrZXRzKHBlZXIpOworIH0KKyAKKy1zdGF0aWMgdm9pZCB3Z19wYWNrZXRfY3JlYXRlX2RhdGFfZG9uZShzdHJ1Y3Qgc2tfYnVmZiAqZmlyc3QsCistCQkJCSAgICAgICBzdHJ1Y3Qgd2dfcGVlciAqcGVlcikKKytzdGF0aWMgdm9pZCB3Z19wYWNrZXRfY3JlYXRlX2RhdGFfZG9uZShzdHJ1Y3Qgd2dfcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKmZpcnN0KQorIHsKKyAJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKm5leHQ7CisgCWJvb2wgaXNfa2VlcGFsaXZlLCBkYXRhX3NlbnQgPSBmYWxzZTsKK0BAIC0yNjIsMjIgKzI2MSwxOSBAQCBzdGF0aWMgdm9pZCB3Z19wYWNrZXRfY3JlYXRlX2RhdGFfZG9uZShzCisgCisgdm9pZCB3Z19wYWNrZXRfdHhfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKKyB7CistCXN0cnVjdCBjcnlwdF9xdWV1ZSAqcXVldWUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGNyeXB0X3F1ZXVlLAorLQkJCQkJCSB3b3JrKTsKKysJc3RydWN0IHdnX3BlZXIgKnBlZXIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHdnX3BlZXIsIHRyYW5zbWl0X3BhY2tldF93b3JrKTsKKyAJc3RydWN0IG5vaXNlX2tleXBhaXIgKmtleXBhaXI7CisgCWVudW0gcGFja2V0X3N0YXRlIHN0YXRlOworIAlzdHJ1Y3Qgc2tfYnVmZiAqZmlyc3Q7CistCXN0cnVjdCB3Z19wZWVyICpwZWVyOworIAorLQl3aGlsZSAoKGZpcnN0ID0gX19wdHJfcmluZ19wZWVrKCZxdWV1ZS0+cmluZykpICE9IE5VTEwgJiYKKysJd2hpbGUgKChmaXJzdCA9IHdnX3ByZXZfcXVldWVfcGVlaygmcGVlci0+dHhfcXVldWUpKSAhPSBOVUxMICYmCisgCSAgICAgICAoc3RhdGUgPSBhdG9taWNfcmVhZF9hY3F1aXJlKCZQQUNLRVRfQ0IoZmlyc3QpLT5zdGF0ZSkpICE9CisgCQkgICAgICAgUEFDS0VUX1NUQVRFX1VOQ1JZUFRFRCkgeworLQkJX19wdHJfcmluZ19kaXNjYXJkX29uZSgmcXVldWUtPnJpbmcpOworLQkJcGVlciA9IFBBQ0tFVF9QRUVSKGZpcnN0KTsKKysJCXdnX3ByZXZfcXVldWVfZHJvcF9wZWVrZWQoJnBlZXItPnR4X3F1ZXVlKTsKKyAJCWtleXBhaXIgPSBQQUNLRVRfQ0IoZmlyc3QpLT5rZXlwYWlyOworIAorIAkJaWYgKGxpa2VseShzdGF0ZSA9PSBQQUNLRVRfU1RBVEVfQ1JZUFRFRCkpCistCQkJd2dfcGFja2V0X2NyZWF0ZV9kYXRhX2RvbmUoZmlyc3QsIHBlZXIpOworKwkJCXdnX3BhY2tldF9jcmVhdGVfZGF0YV9kb25lKHBlZXIsIGZpcnN0KTsKKyAJCWVsc2UKKyAJCQlrZnJlZV9za2JfbGlzdChmaXJzdCk7CisgCitAQCAtMzA2LDE2ICszMDIsMTQgQEAgdm9pZCB3Z19wYWNrZXRfZW5jcnlwdF93b3JrZXIoc3RydWN0IHdvcgorIAkJCQlicmVhazsKKyAJCQl9CisgCQl9CistCQl3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyKCZQQUNLRVRfUEVFUihmaXJzdCktPnR4X3F1ZXVlLCBmaXJzdCwKKy0JCQkJCSAgc3RhdGUpOworKwkJd2dfcXVldWVfZW5xdWV1ZV9wZXJfcGVlcl90eChmaXJzdCwgc3RhdGUpOworIAkJaWYgKG5lZWRfcmVzY2hlZCgpKQorIAkJCWNvbmRfcmVzY2hlZCgpOworIAl9CisgfQorIAorLXN0YXRpYyB2b2lkIHdnX3BhY2tldF9jcmVhdGVfZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqZmlyc3QpCisrc3RhdGljIHZvaWQgd2dfcGFja2V0X2NyZWF0ZV9kYXRhKHN0cnVjdCB3Z19wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqZmlyc3QpCisgeworLQlzdHJ1Y3Qgd2dfcGVlciAqcGVlciA9IFBBQ0tFVF9QRUVSKGZpcnN0KTsKKyAJc3RydWN0IHdnX2RldmljZSAqd2cgPSBwZWVyLT5kZXZpY2U7CisgCWludCByZXQgPSAtRUlOVkFMOworIAorQEAgLTMyMywxMyArMzE3LDEwIEBAIHN0YXRpYyB2b2lkIHdnX3BhY2tldF9jcmVhdGVfZGF0YShzdHJ1Y3QKKyAJaWYgKHVubGlrZWx5KFJFQURfT05DRShwZWVyLT5pc19kZWFkKSkpCisgCQlnb3RvIGVycjsKKyAKKy0JcmV0ID0gd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyKCZ3Zy0+ZW5jcnlwdF9xdWV1ZSwKKy0JCQkJCQkgICAmcGVlci0+dHhfcXVldWUsIGZpcnN0LAorLQkJCQkJCSAgIHdnLT5wYWNrZXRfY3J5cHRfd3EsCistCQkJCQkJICAgJndnLT5lbmNyeXB0X3F1ZXVlLmxhc3RfY3B1KTsKKysJcmV0ID0gd2dfcXVldWVfZW5xdWV1ZV9wZXJfZGV2aWNlX2FuZF9wZWVyKCZ3Zy0+ZW5jcnlwdF9xdWV1ZSwgJnBlZXItPnR4X3F1ZXVlLCBmaXJzdCwKKysJCQkJCQkgICB3Zy0+cGFja2V0X2NyeXB0X3dxLCAmd2ctPmVuY3J5cHRfcXVldWUubGFzdF9jcHUpOworIAlpZiAodW5saWtlbHkocmV0ID09IC1FUElQRSkpCistCQl3Z19xdWV1ZV9lbnF1ZXVlX3Blcl9wZWVyKCZwZWVyLT50eF9xdWV1ZSwgZmlyc3QsCistCQkJCQkgIFBBQ0tFVF9TVEFURV9ERUFEKTsKKysJCXdnX3F1ZXVlX2VucXVldWVfcGVyX3BlZXJfdHgoZmlyc3QsIFBBQ0tFVF9TVEFURV9ERUFEKTsKKyBlcnI6CisgCXJjdV9yZWFkX3VubG9ja19iaCgpOworIAlpZiAobGlrZWx5KCFyZXQgfHwgcmV0ID09IC1FUElQRSkpCitAQCAtMzkzLDcgKzM4NCw3IEBAIHZvaWQgd2dfcGFja2V0X3NlbmRfc3RhZ2VkX3BhY2tldHMoc3RydWMKKyAJcGFja2V0cy5wcmV2LT5uZXh0ID0gTlVMTDsKKyAJd2dfcGVlcl9nZXQoa2V5cGFpci0+ZW50cnkucGVlcik7CisgCVBBQ0tFVF9DQihwYWNrZXRzLm5leHQpLT5rZXlwYWlyID0ga2V5cGFpcjsKKy0Jd2dfcGFja2V0X2NyZWF0ZV9kYXRhKHBhY2tldHMubmV4dCk7CisrCXdnX3BhY2tldF9jcmVhdGVfZGF0YShwZWVyLCBwYWNrZXRzLm5leHQpOworIAlyZXR1cm47CisgCisgb3V0X2ludmFsaWQ6CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTIzLXdpcmVndWFyZC1rY29uZmlnLXVzZS1hcm0tY2hhY2hhLWV2ZW4td2l0aC1uby1uZW9uLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDEyMy13aXJlZ3VhcmQta2NvbmZpZy11c2UtYXJtLWNoYWNoYS1ldmVuLXdpdGgtbm8tbmVvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTI1MTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDEyMy13aXJlZ3VhcmQta2NvbmZpZy11c2UtYXJtLWNoYWNoYS1ldmVuLXdpdGgtbm8tbmVvbi5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogTW9uLCAyMiBGZWIgMjAyMSAxNzoyNTo0OSArMDEwMAorU3ViamVjdDogW1BBVENIXSB3aXJlZ3VhcmQ6IGtjb25maWc6IHVzZSBhcm0gY2hhY2hhIGV2ZW4gd2l0aCBubyBuZW9uCisKK2NvbW1pdCBiY2UyNDczOTI3YWY4ZGUxMmFkMTMxYTc0M2Y1NWQ2OWQzNThjMGI5IHVwc3RyZWFtLgorCitUaGUgY29uZGl0aW9uIGhlcmUgd2FzIGluY29ycmVjdDogYSBub24tbmVvbiBmYWxsYmFjayBpbXBsZW1lbnRhdGlvbiBpcworYXZhaWxhYmxlIG9uIGFybTMyIHdoZW4gTkVPTiBpcyBub3Qgc3VwcG9ydGVkLgorCitSZXBvcnRlZC1ieTogSWx5YSBMaXBuaXRza2l5IDxpbHlhLmxpcG5pdHNraXlAZ21haWwuY29tPgorRml4ZXM6IGU3MDk2YzEzMWU1MSAoIm5ldDogV2lyZUd1YXJkIHNlY3VyZSBuZXR3b3JrIHR1bm5lbCIpCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IEpha3ViIEtpY2luc2tpIDxrdWJhQGtlcm5lbC5vcmc+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGRyaXZlcnMvbmV0L0tjb25maWcgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSBhL2RyaXZlcnMvbmV0L0tjb25maWcKKysrKyBiL2RyaXZlcnMvbmV0L0tjb25maWcKK0BAIC04Nyw3ICs4Nyw3IEBAIGNvbmZpZyBXSVJFR1VBUkQKKyAJc2VsZWN0IENSWVBUT19DVVJWRTI1NTE5X1g4NiBpZiBYODYgJiYgNjRCSVQKKyAJc2VsZWN0IEFSTV9DUllQVE8gaWYgQVJNCisgCXNlbGVjdCBBUk02NF9DUllQVE8gaWYgQVJNNjQKKy0Jc2VsZWN0IENSWVBUT19DSEFDSEEyMF9ORU9OIGlmIChBUk0gfHwgQVJNNjQpICYmIEtFUk5FTF9NT0RFX05FT04KKysJc2VsZWN0IENSWVBUT19DSEFDSEEyMF9ORU9OIGlmIEFSTSB8fCAoQVJNNjQgJiYgS0VSTkVMX01PREVfTkVPTikKKyAJc2VsZWN0IENSWVBUT19QT0xZMTMwNV9ORU9OIGlmIEFSTTY0ICYmIEtFUk5FTF9NT0RFX05FT04KKyAJc2VsZWN0IENSWVBUT19QT0xZMTMwNV9BUk0gaWYgQVJNCisgCXNlbGVjdCBDUllQVE9fQ1VSVkUyNTUxOV9ORU9OIGlmIEFSTSAmJiBLRVJORUxfTU9ERV9ORU9OCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTI0LWNyeXB0by1taXBzLXBvbHkxMzA1LWVuYWJsZS1mb3ItYWxsLU1JUFMtcHJvY2Vzc29ycy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMjQtY3J5cHRvLW1pcHMtcG9seTEzMDUtZW5hYmxlLWZvci1hbGwtTUlQUy1wcm9jZXNzb3JzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZWU4NDEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTI0LWNyeXB0by1taXBzLXBvbHkxMzA1LWVuYWJsZS1mb3ItYWxsLU1JUFMtcHJvY2Vzc29ycy5wYXRjaApAQCAtMCwwICsxLDYwIEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiTWFjaWVqIFcuIFJvenlja2kiIDxtYWNyb0BvcmNhbS5tZS51az4KK0RhdGU6IFRodSwgMTEgTWFyIDIwMjEgMjE6NTA6NDcgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gY3J5cHRvOiBtaXBzL3BvbHkxMzA1IC0gZW5hYmxlIGZvciBhbGwgTUlQUyBwcm9jZXNzb3JzCisKK2NvbW1pdCA2YzgxMGNmMjBmZWVmMGQ0MzM4ZTliNDI0YWI3ZjI2NDRhOGIzNTNlIHVwc3RyZWFtLgorCitUaGUgTUlQUyBQb2x5MTMwNSBpbXBsZW1lbnRhdGlvbiBpcyBnZW5lcmljIE1JUFMgY29kZSB3cml0dGVuIHN1Y2ggYXMgdG8KK3N1cHBvcnQgZG93biB0byB0aGUgb3JpZ2luYWwgTUlQUyBJIGFuZCBNSVBTIElJSSBJU0EgZm9yIHRoZSAzMi1iaXQgYW5kCis2NC1iaXQgdmFyaWFudCByZXNwZWN0aXZlbHkuICBMaWZ0IHRoZSBjdXJyZW50IGxpbWl0YXRpb24gdGhlbiB0byBlbmFibGUKK2NvZGUgZm9yIE1JUFNyMSBJU0Egb3IgbmV3ZXIgcHJvY2Vzc29ycyBvbmx5IGFuZCBoYXZlIGl0IGF2YWlsYWJsZSBmb3IKK2FsbCBNSVBTIHByb2Nlc3NvcnMuCisKK1NpZ25lZC1vZmYtYnk6IE1hY2llaiBXLiBSb3p5Y2tpIDxtYWNyb0BvcmNhbS5tZS51az4KK0ZpeGVzOiBhMTFkMDU1ZTdhNjQgKCJjcnlwdG86IG1pcHMvcG9seTEzMDUgLSBpbmNvcnBvcmF0ZSBPcGVuU1NML0NSWVBUT0dBTVMgb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIikKK0NjOiBzdGFibGVAdmdlci5rZXJuZWwub3JnICMgdjUuNSsKK0Fja2VkLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IFRob21hcyBCb2dlbmRvZXJmZXIgPHRzYm9nZW5kQGFscGhhLmZyYW5rZW4uZGU+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGFyY2gvbWlwcy9jcnlwdG8vTWFrZWZpbGUgfCA0ICsrLS0KKyBjcnlwdG8vS2NvbmZpZyAgICAgICAgICAgIHwgMiArLQorIGRyaXZlcnMvbmV0L0tjb25maWcgICAgICAgfCAyICstCisgMyBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKKy0tLSBhL2FyY2gvbWlwcy9jcnlwdG8vTWFrZWZpbGUKKysrKyBiL2FyY2gvbWlwcy9jcnlwdG8vTWFrZWZpbGUKK0BAIC0xMiw4ICsxMiw4IEBAIEFGTEFHU19jaGFjaGEtY29yZS5vICs9IC1PMiAjIG5lZWRlZCB0bworIG9iai0kKENPTkZJR19DUllQVE9fUE9MWTEzMDVfTUlQUykgKz0gcG9seTEzMDUtbWlwcy5vCisgcG9seTEzMDUtbWlwcy15IDo9IHBvbHkxMzA1LWNvcmUubyBwb2x5MTMwNS1nbHVlLm8KKyAKKy1wZXJsYXNtLWZsYXZvdXItJChDT05GSUdfQ1BVX01JUFMzMikgOj0gbzMyCistcGVybGFzbS1mbGF2b3VyLSQoQ09ORklHX0NQVV9NSVBTNjQpIDo9IDY0CisrcGVybGFzbS1mbGF2b3VyLSQoQ09ORklHXzMyQklUKSA6PSBvMzIKKytwZXJsYXNtLWZsYXZvdXItJChDT05GSUdfNjRCSVQpIDo9IDY0CisgCisgcXVpZXRfY21kX3Blcmxhc20gPSBQRVJMQVNNICRACisgICAgICAgY21kX3Blcmxhc20gPSAkKFBFUkwpICQoPCkgJChwZXJsYXNtLWZsYXZvdXIteSkgJChAKQorLS0tIGEvY3J5cHRvL0tjb25maWcKKysrKyBiL2NyeXB0by9LY29uZmlnCitAQCAtNzQwLDcgKzc0MCw3IEBAIGNvbmZpZyBDUllQVE9fUE9MWTEzMDVfWDg2XzY0CisgCisgY29uZmlnIENSWVBUT19QT0xZMTMwNV9NSVBTCisgCXRyaXN0YXRlICJQb2x5MTMwNSBhdXRoZW50aWNhdG9yIGFsZ29yaXRobSAoTUlQUyBvcHRpbWl6ZWQpIgorLQlkZXBlbmRzIG9uIENQVV9NSVBTMzIgfHwgKENQVV9NSVBTNjQgJiYgNjRCSVQpCisrCWRlcGVuZHMgb24gTUlQUworIAlzZWxlY3QgQ1JZUFRPX0FSQ0hfSEFWRV9MSUJfUE9MWTEzMDUKKyAKKyBjb25maWcgQ1JZUFRPX01ENAorLS0tIGEvZHJpdmVycy9uZXQvS2NvbmZpZworKysrIGIvZHJpdmVycy9uZXQvS2NvbmZpZworQEAgLTkyLDcgKzkyLDcgQEAgY29uZmlnIFdJUkVHVUFSRAorIAlzZWxlY3QgQ1JZUFRPX1BPTFkxMzA1X0FSTSBpZiBBUk0KKyAJc2VsZWN0IENSWVBUT19DVVJWRTI1NTE5X05FT04gaWYgQVJNICYmIEtFUk5FTF9NT0RFX05FT04KKyAJc2VsZWN0IENSWVBUT19DSEFDSEFfTUlQUyBpZiBDUFVfTUlQUzMyX1IyCistCXNlbGVjdCBDUllQVE9fUE9MWTEzMDVfTUlQUyBpZiBDUFVfTUlQUzMyIHx8IChDUFVfTUlQUzY0ICYmIDY0QklUKQorKwlzZWxlY3QgQ1JZUFRPX1BPTFkxMzA1X01JUFMgaWYgTUlQUworIAloZWxwCisgCSAgV2lyZUd1YXJkIGlzIGEgc2VjdXJlLCBmYXN0LCBhbmQgZWFzeSB0byB1c2UgcmVwbGFjZW1lbnQgZm9yIElQU2VjCisgCSAgdGhhdCB1c2VzIG1vZGVybiBjcnlwdG9ncmFwaHkgYW5kIGNsZXZlciBuZXR3b3JraW5nIHRyaWNrcy4gSXQncwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDEyNS1jcnlwdG8tbWlwcy1hZGQtcG9seTEzMDUtY29yZS5TLXRvLS5naXRpZ25vcmUucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTI1LWNyeXB0by1taXBzLWFkZC1wb2x5MTMwNS1jb3JlLlMtdG8tLmdpdGlnbm9yZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTZkNjdkCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDEyNS1jcnlwdG8tbWlwcy1hZGQtcG9seTEzMDUtY29yZS5TLXRvLS5naXRpZ25vcmUucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSWx5YSBMaXBuaXRza2l5IDxpbHlhLmxpcG5pdHNraXlAZ21haWwuY29tPgorRGF0ZTogU2F0LCAyNyBNYXIgMjAyMSAxOTozOTo0MyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBjcnlwdG86IG1pcHM6IGFkZCBwb2x5MTMwNS1jb3JlLlMgdG8gLmdpdGlnbm9yZQorCitjb21taXQgZGM5MmQwZGY1MWRjNjFkZTg4YmY2ZjQ4ODRhMTdiZjczZDVjNjMyNiB1cHN0cmVhbS4KKworcG9seTEzMDUtY29yZS5TIGlzIGFuIGF1dG8tZ2VuZXJhdGVkIGZpbGUsIHNvIGl0IHNob3VsZCBiZSBpZ25vcmVkLgorCitGaXhlczogYTExZDA1NWU3YTY0ICgiY3J5cHRvOiBtaXBzL3BvbHkxMzA1IC0gaW5jb3Jwb3JhdGUgT3BlblNTTC9DUllQVE9HQU1TIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiIpCitTaWduZWQtb2ZmLWJ5OiBJbHlhIExpcG5pdHNraXkgPGlseWEubGlwbml0c2tpeUBnbWFpbC5jb20+CitDYzogQXJkIEJpZXNoZXV2ZWwgPGFyZGJAa2VybmVsLm9yZz4KK1NpZ25lZC1vZmYtYnk6IFRob21hcyBCb2dlbmRvZXJmZXIgPHRzYm9nZW5kQGFscGhhLmZyYW5rZW4uZGU+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGFyY2gvbWlwcy9jcnlwdG8vLmdpdGlnbm9yZSB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGFyY2gvbWlwcy9jcnlwdG8vLmdpdGlnbm9yZQorCistLS0gL2Rldi9udWxsCisrKysgYi9hcmNoL21pcHMvY3J5cHRvLy5naXRpZ25vcmUKK0BAIC0wLDAgKzEsMiBAQAorKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQorK3BvbHkxMzA1LWNvcmUuUwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDEyNi1jcnlwdG8tcG9seTEzMDUtZml4LXBvbHkxMzA1X2NvcmVfc2V0a2V5LWRlY2xhcmF0aW9uLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDEyNi1jcnlwdG8tcG9seTEzMDUtZml4LXBvbHkxMzA1X2NvcmVfc2V0a2V5LWRlY2xhcmF0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZDY2MjUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTI2LWNyeXB0by1wb2x5MTMwNS1maXgtcG9seTEzMDVfY29yZV9zZXRrZXktZGVjbGFyYXRpb24ucGF0Y2gKQEAgLTAsMCArMSwxNzIgQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFybmQgQmVyZ21hbm4gPGFybmRAYXJuZGIuZGU+CitEYXRlOiBNb24sIDIyIE1hciAyMDIxIDE4OjA1OjE1ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyeXB0bzogcG9seTEzMDUgLSBmaXggcG9seTEzMDVfY29yZV9zZXRrZXkoKSBkZWNsYXJhdGlvbgorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitjb21taXQgOGQxOTVlN2E4YWRhNjg5MjhmMmFlZGIyYzE4MzAyYTQ1MThmZTY4ZSB1cHN0cmVhbS4KKworZ2NjLTExIHBvaW50cyBvdXQgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZSBkZWNsYXJhdGlvbiBhbmQgdGhlIGRlZmluaXRpb24KK29mIHBvbHkxMzA1X2NvcmVfc2V0a2V5KCk6CisKK2xpYi9jcnlwdG8vcG9seTEzMDUtZG9ubmEzMi5jOjEzOjY3OiBlcnJvcjogYXJndW1lbnQgMiBvZiB0eXBlIOKAmGNvbnN0IHU4WzE2XeKAmSB7YWthIOKAmGNvbnN0IHVuc2lnbmVkIGNoYXJbMTZd4oCZfSB3aXRoIG1pc21hdGNoZWQgYm91bmQgWy1XZXJyb3I9YXJyYXktcGFyYW1ldGVyPV0KKyAgIDEzIHwgdm9pZCBwb2x5MTMwNV9jb3JlX3NldGtleShzdHJ1Y3QgcG9seTEzMDVfY29yZV9rZXkgKmtleSwgY29uc3QgdTggcmF3X2tleVsxNl0pCisgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH5+fn5+fn5+fl5+fn5+fn5+fn5+CitJbiBmaWxlIGluY2x1ZGVkIGZyb20gbGliL2NyeXB0by9wb2x5MTMwNS1kb25uYTMyLmM6MTE6CitpbmNsdWRlL2NyeXB0by9pbnRlcm5hbC9wb2x5MTMwNS5oOjIxOjY4OiBub3RlOiBwcmV2aW91c2x5IGRlY2xhcmVkIGFzIOKAmGNvbnN0IHU4ICrigJkge2FrYSDigJhjb25zdCB1bnNpZ25lZCBjaGFyICrigJl9CisgICAyMSB8IHZvaWQgcG9seTEzMDVfY29yZV9zZXRrZXkoc3RydWN0IHBvbHkxMzA1X2NvcmVfa2V5ICprZXksIGNvbnN0IHU4ICpyYXdfa2V5KTsKKworVGhpcyBpcyBoYXJtbGVzcyBpbiBwcmluY2lwbGUsIGFzIHRoZSBjYWxsaW5nIGNvbnZlbnRpb25zIGFyZSB0aGUgc2FtZSwKK2J1dCB0aGUgbW9yZSBzcGVjaWZpYyBwcm90b3R5cGUgYWxsb3dzIGJldHRlciB0eXBlIGNoZWNraW5nIGluIHRoZQorY2FsbGVyLgorCitDaGFuZ2UgdGhlIGRlY2xhcmF0aW9uIHRvIG1hdGNoIHRoZSBhY3R1YWwgZnVuY3Rpb24gZGVmaW5pdGlvbi4KK1RoZSBwb2x5MTMwNV9zaW1kX2luaXQoKSBpcyBhIGJpdCBzdXNwaWNpb3VzIGhlcmUsIGFzIGl0IHByZXZpb3VzbHkKK2hhZCBhIDMyLWJ5dGUgYXJndW1lbnQgdHlwZSwgYnV0IGxvb2tzIGxpa2UgaXQgbmVlZHMgdG8gdGFrZSB0aGUKKzE2LWJ5dGUgUE9MWTEzMDVfQkxPQ0tfU0laRSBhcnJheSBpbnN0ZWFkLgorCitGaXhlczogMWMwOGExMDQzNjBmICgiY3J5cHRvOiBwb2x5MTMwNSAtIGFkZCBuZXcgMzIgYW5kIDY0LWJpdCBnZW5lcmljIHZlcnNpb25zIikKK1NpZ25lZC1vZmYtYnk6IEFybmQgQmVyZ21hbm4gPGFybmRAYXJuZGIuZGU+CitSZXZpZXdlZC1ieTogQXJkIEJpZXNoZXV2ZWwgPGFyZGJAa2VybmVsLm9yZz4KK1Jldmlld2VkLWJ5OiBFcmljIEJpZ2dlcnMgPGViaWdnZXJzQGdvb2dsZS5jb20+CitTaWduZWQtb2ZmLWJ5OiBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGFyY2gvYXJtL2NyeXB0by9wb2x5MTMwNS1nbHVlLmMgICAgfCAyICstCisgYXJjaC9hcm02NC9jcnlwdG8vcG9seTEzMDUtZ2x1ZS5jICB8IDIgKy0KKyBhcmNoL21pcHMvY3J5cHRvL3BvbHkxMzA1LWdsdWUuYyAgIHwgMiArLQorIGFyY2gveDg2L2NyeXB0by9wb2x5MTMwNV9nbHVlLmMgICAgfCA2ICsrKy0tLQorIGluY2x1ZGUvY3J5cHRvL2ludGVybmFsL3BvbHkxMzA1LmggfCAzICsrLQorIGluY2x1ZGUvY3J5cHRvL3BvbHkxMzA1LmggICAgICAgICAgfCA2ICsrKystLQorIGxpYi9jcnlwdG8vcG9seTEzMDUtZG9ubmEzMi5jICAgICAgfCAzICsrLQorIGxpYi9jcnlwdG8vcG9seTEzMDUtZG9ubmE2NC5jICAgICAgfCAzICsrLQorIGxpYi9jcnlwdG8vcG9seTEzMDUuYyAgICAgICAgICAgICAgfCAzICsrLQorIDkgZmlsZXMgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCisKKy0tLSBhL2FyY2gvYXJtL2NyeXB0by9wb2x5MTMwNS1nbHVlLmMKKysrKyBiL2FyY2gvYXJtL2NyeXB0by9wb2x5MTMwNS1nbHVlLmMKK0BAIC0yOSw3ICsyOSw3IEBAIHZvaWQgX193ZWFrIHBvbHkxMzA1X2Jsb2Nrc19uZW9uKHZvaWQgKnMKKyAKKyBzdGF0aWMgX19yb19hZnRlcl9pbml0IERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGhhdmVfbmVvbik7CisgCistdm9pZCBwb2x5MTMwNV9pbml0X2FyY2goc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4ICpkY3R4LCBjb25zdCB1OCAqa2V5KQorK3ZvaWQgcG9seTEzMDVfaW5pdF9hcmNoKHN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCAqZGN0eCwgY29uc3QgdTgga2V5W1BPTFkxMzA1X0tFWV9TSVpFXSkKKyB7CisgCXBvbHkxMzA1X2luaXRfYXJtKCZkY3R4LT5oLCBrZXkpOworIAlkY3R4LT5zWzBdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGtleSArIDE2KTsKKy0tLSBhL2FyY2gvYXJtNjQvY3J5cHRvL3BvbHkxMzA1LWdsdWUuYworKysrIGIvYXJjaC9hcm02NC9jcnlwdG8vcG9seTEzMDUtZ2x1ZS5jCitAQCAtMjUsNyArMjUsNyBAQCBhc21saW5rYWdlIHZvaWQgcG9seTEzMDVfZW1pdCh2b2lkICpzdGF0CisgCisgc3RhdGljIF9fcm9fYWZ0ZXJfaW5pdCBERUZJTkVfU1RBVElDX0tFWV9GQUxTRShoYXZlX25lb24pOworIAorLXZvaWQgcG9seTEzMDVfaW5pdF9hcmNoKHN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCAqZGN0eCwgY29uc3QgdTggKmtleSkKKyt2b2lkIHBvbHkxMzA1X2luaXRfYXJjaChzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRjdHgsIGNvbnN0IHU4IGtleVtQT0xZMTMwNV9LRVlfU0laRV0pCisgeworIAlwb2x5MTMwNV9pbml0X2FybTY0KCZkY3R4LT5oLCBrZXkpOworIAlkY3R4LT5zWzBdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGtleSArIDE2KTsKKy0tLSBhL2FyY2gvbWlwcy9jcnlwdG8vcG9seTEzMDUtZ2x1ZS5jCisrKysgYi9hcmNoL21pcHMvY3J5cHRvL3BvbHkxMzA1LWdsdWUuYworQEAgLTE3LDcgKzE3LDcgQEAgYXNtbGlua2FnZSB2b2lkIHBvbHkxMzA1X2luaXRfbWlwcyh2b2lkCisgYXNtbGlua2FnZSB2b2lkIHBvbHkxMzA1X2Jsb2Nrc19taXBzKHZvaWQgKnN0YXRlLCBjb25zdCB1OCAqc3JjLCB1MzIgbGVuLCB1MzIgaGliaXQpOworIGFzbWxpbmthZ2Ugdm9pZCBwb2x5MTMwNV9lbWl0X21pcHModm9pZCAqc3RhdGUsIHU4ICpkaWdlc3QsIGNvbnN0IHUzMiAqbm9uY2UpOworIAorLXZvaWQgcG9seTEzMDVfaW5pdF9hcmNoKHN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCAqZGN0eCwgY29uc3QgdTggKmtleSkKKyt2b2lkIHBvbHkxMzA1X2luaXRfYXJjaChzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRjdHgsIGNvbnN0IHU4IGtleVtQT0xZMTMwNV9LRVlfU0laRV0pCisgeworIAlwb2x5MTMwNV9pbml0X21pcHMoJmRjdHgtPmgsIGtleSk7CisgCWRjdHgtPnNbMF0gPSBnZXRfdW5hbGlnbmVkX2xlMzIoa2V5ICsgMTYpOworLS0tIGEvYXJjaC94ODYvY3J5cHRvL3BvbHkxMzA1X2dsdWUuYworKysrIGIvYXJjaC94ODYvY3J5cHRvL3BvbHkxMzA1X2dsdWUuYworQEAgLTE1LDcgKzE1LDcgQEAKKyAjaW5jbHVkZSA8YXNtL3NpbWQuaD4KKyAKKyBhc21saW5rYWdlIHZvaWQgcG9seTEzMDVfaW5pdF94ODZfNjQodm9pZCAqY3R4LAorLQkJCQkgICAgIGNvbnN0IHU4IGtleVtQT0xZMTMwNV9LRVlfU0laRV0pOworKwkJCQkgICAgIGNvbnN0IHU4IGtleVtQT0xZMTMwNV9CTE9DS19TSVpFXSk7CisgYXNtbGlua2FnZSB2b2lkIHBvbHkxMzA1X2Jsb2Nrc194ODZfNjQodm9pZCAqY3R4LCBjb25zdCB1OCAqaW5wLAorIAkJCQkgICAgICAgY29uc3Qgc2l6ZV90IGxlbiwgY29uc3QgdTMyIHBhZGJpdCk7CisgYXNtbGlua2FnZSB2b2lkIHBvbHkxMzA1X2VtaXRfeDg2XzY0KHZvaWQgKmN0eCwgdTggbWFjW1BPTFkxMzA1X0RJR0VTVF9TSVpFXSwKK0BAIC04MCw3ICs4MCw3IEBAIHN0YXRpYyB2b2lkIGNvbnZlcnRfdG9fYmFzZTJfNjQodm9pZCAqY3QKKyAJc3RhdGUtPmlzX2Jhc2UyXzI2ID0gMDsKKyB9CisgCistc3RhdGljIHZvaWQgcG9seTEzMDVfc2ltZF9pbml0KHZvaWQgKmN0eCwgY29uc3QgdTgga2V5W1BPTFkxMzA1X0tFWV9TSVpFXSkKKytzdGF0aWMgdm9pZCBwb2x5MTMwNV9zaW1kX2luaXQodm9pZCAqY3R4LCBjb25zdCB1OCBrZXlbUE9MWTEzMDVfQkxPQ0tfU0laRV0pCisgeworIAlwb2x5MTMwNV9pbml0X3g4Nl82NChjdHgsIGtleSk7CisgfQorQEAgLTEyOCw3ICsxMjgsNyBAQCBzdGF0aWMgdm9pZCBwb2x5MTMwNV9zaW1kX2VtaXQodm9pZCAqY3R4CisgCQlwb2x5MTMwNV9lbWl0X2F2eChjdHgsIG1hYywgbm9uY2UpOworIH0KKyAKKy12b2lkIHBvbHkxMzA1X2luaXRfYXJjaChzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRjdHgsIGNvbnN0IHU4ICprZXkpCisrdm9pZCBwb2x5MTMwNV9pbml0X2FyY2goc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4ICpkY3R4LCBjb25zdCB1OCBrZXlbUE9MWTEzMDVfS0VZX1NJWkVdKQorIHsKKyAJcG9seTEzMDVfc2ltZF9pbml0KCZkY3R4LT5oLCBrZXkpOworIAlkY3R4LT5zWzBdID0gZ2V0X3VuYWxpZ25lZF9sZTMyKCZrZXlbMTZdKTsKKy0tLSBhL2luY2x1ZGUvY3J5cHRvL2ludGVybmFsL3BvbHkxMzA1LmgKKysrKyBiL2luY2x1ZGUvY3J5cHRvL2ludGVybmFsL3BvbHkxMzA1LmgKK0BAIC0xOCw3ICsxOCw4IEBACisgICogb25seSB0aGUgzrUtYWxtb3N0LeKIhi11bml2ZXJzYWwgaGFzaCBmdW5jdGlvbiAobm90IHRoZSBmdWxsIE1BQykgaXMgY29tcHV0ZWQuCisgICovCisgCistdm9pZCBwb2x5MTMwNV9jb3JlX3NldGtleShzdHJ1Y3QgcG9seTEzMDVfY29yZV9rZXkgKmtleSwgY29uc3QgdTggKnJhd19rZXkpOworK3ZvaWQgcG9seTEzMDVfY29yZV9zZXRrZXkoc3RydWN0IHBvbHkxMzA1X2NvcmVfa2V5ICprZXksCisrCQkJICBjb25zdCB1OCByYXdfa2V5W1BPTFkxMzA1X0JMT0NLX1NJWkVdKTsKKyBzdGF0aWMgaW5saW5lIHZvaWQgcG9seTEzMDVfY29yZV9pbml0KHN0cnVjdCBwb2x5MTMwNV9zdGF0ZSAqc3RhdGUpCisgeworIAkqc3RhdGUgPSAoc3RydWN0IHBvbHkxMzA1X3N0YXRlKXt9OworLS0tIGEvaW5jbHVkZS9jcnlwdG8vcG9seTEzMDUuaAorKysrIGIvaW5jbHVkZS9jcnlwdG8vcG9seTEzMDUuaAorQEAgLTU4LDggKzU4LDEwIEBAIHN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCB7CisgCX07CisgfTsKKyAKKy12b2lkIHBvbHkxMzA1X2luaXRfYXJjaChzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRlc2MsIGNvbnN0IHU4ICprZXkpOworLXZvaWQgcG9seTEzMDVfaW5pdF9nZW5lcmljKHN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCAqZGVzYywgY29uc3QgdTggKmtleSk7Cisrdm9pZCBwb2x5MTMwNV9pbml0X2FyY2goc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4ICpkZXNjLAorKwkJCWNvbnN0IHU4IGtleVtQT0xZMTMwNV9LRVlfU0laRV0pOworK3ZvaWQgcG9seTEzMDVfaW5pdF9nZW5lcmljKHN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCAqZGVzYywKKysJCQkgICBjb25zdCB1OCBrZXlbUE9MWTEzMDVfS0VZX1NJWkVdKTsKKyAKKyBzdGF0aWMgaW5saW5lIHZvaWQgcG9seTEzMDVfaW5pdChzdHJ1Y3QgcG9seTEzMDVfZGVzY19jdHggKmRlc2MsIGNvbnN0IHU4ICprZXkpCisgeworLS0tIGEvbGliL2NyeXB0by9wb2x5MTMwNS1kb25uYTMyLmMKKysrKyBiL2xpYi9jcnlwdG8vcG9seTEzMDUtZG9ubmEzMi5jCitAQCAtMTAsNyArMTAsOCBAQAorICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisgI2luY2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9wb2x5MTMwNS5oPgorIAorLXZvaWQgcG9seTEzMDVfY29yZV9zZXRrZXkoc3RydWN0IHBvbHkxMzA1X2NvcmVfa2V5ICprZXksIGNvbnN0IHU4IHJhd19rZXlbMTZdKQorK3ZvaWQgcG9seTEzMDVfY29yZV9zZXRrZXkoc3RydWN0IHBvbHkxMzA1X2NvcmVfa2V5ICprZXksCisrCQkJICBjb25zdCB1OCByYXdfa2V5W1BPTFkxMzA1X0JMT0NLX1NJWkVdKQorIHsKKyAJLyogciAmPSAweGZmZmZmZmMwZmZmZmZmYzBmZmZmZmZjMGZmZmZmZmYgKi8KKyAJa2V5LT5rZXkuclswXSA9IChnZXRfdW5hbGlnbmVkX2xlMzIoJnJhd19rZXlbMF0pKSAmIDB4M2ZmZmZmZjsKKy0tLSBhL2xpYi9jcnlwdG8vcG9seTEzMDUtZG9ubmE2NC5jCisrKysgYi9saWIvY3J5cHRvL3BvbHkxMzA1LWRvbm5hNjQuYworQEAgLTEyLDcgKzEyLDggQEAKKyAKKyB0eXBlZGVmIF9fdWludDEyOF90IHUxMjg7CisgCistdm9pZCBwb2x5MTMwNV9jb3JlX3NldGtleShzdHJ1Y3QgcG9seTEzMDVfY29yZV9rZXkgKmtleSwgY29uc3QgdTggcmF3X2tleVsxNl0pCisrdm9pZCBwb2x5MTMwNV9jb3JlX3NldGtleShzdHJ1Y3QgcG9seTEzMDVfY29yZV9rZXkgKmtleSwKKysJCQkgIGNvbnN0IHU4IHJhd19rZXlbUE9MWTEzMDVfQkxPQ0tfU0laRV0pCisgeworIAl1NjQgdDAsIHQxOworIAorLS0tIGEvbGliL2NyeXB0by9wb2x5MTMwNS5jCisrKysgYi9saWIvY3J5cHRvL3BvbHkxMzA1LmMKK0BAIC0xMiw3ICsxMiw4IEBACisgI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisgCistdm9pZCBwb2x5MTMwNV9pbml0X2dlbmVyaWMoc3RydWN0IHBvbHkxMzA1X2Rlc2NfY3R4ICpkZXNjLCBjb25zdCB1OCAqa2V5KQorK3ZvaWQgcG9seTEzMDVfaW5pdF9nZW5lcmljKHN0cnVjdCBwb2x5MTMwNV9kZXNjX2N0eCAqZGVzYywKKysJCQkgICBjb25zdCB1OCBrZXlbUE9MWTEzMDVfS0VZX1NJWkVdKQorIHsKKyAJcG9seTEzMDVfY29yZV9zZXRrZXkoJmRlc2MtPmNvcmVfciwga2V5KTsKKyAJZGVzYy0+c1swXSA9IGdldF91bmFsaWduZWRfbGUzMihrZXkgKyAxNik7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTI3LXdpcmVndWFyZC1zZWxmdGVzdHMtcmVtb3ZlLW9sZC1jb25udHJhY2sta2NvbmZpZy12YWwucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTI3LXdpcmVndWFyZC1zZWxmdGVzdHMtcmVtb3ZlLW9sZC1jb25udHJhY2sta2NvbmZpZy12YWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U3ZDFhOAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMjctd2lyZWd1YXJkLXNlbGZ0ZXN0cy1yZW1vdmUtb2xkLWNvbm50cmFjay1rY29uZmlnLXZhbC5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogRnJpLCA0IEp1biAyMDIxIDE3OjE3OjMwICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIHdpcmVndWFyZDogc2VsZnRlc3RzOiByZW1vdmUgb2xkIGNvbm50cmFjayBrY29uZmlnIHZhbHVlCisKK2NvbW1pdCBhY2YyNDkyYjUxYzlhM2M0ZGZiOTQ3ZjRkMzQ3N2E4NmQzMTUxNTBmIHVwc3RyZWFtLgorCitPbiByZWNlbnQga2VybmVscywgdGhpcyBjb25maWcgc3ltYm9sIGlzIG5vIGxvbmdlciB1c2VkLgorCitSZXBvcnRlZC1ieTogUnVpIFNhbHZhdGVycmEgPHJzYWx2YXRlcnJhQGdtYWlsLmNvbT4KK0ZpeGVzOiBlNzA5NmMxMzFlNTEgKCJuZXQ6IFdpcmVHdWFyZCBzZWN1cmUgbmV0d29yayB0dW5uZWwiKQorQ2M6IHN0YWJsZUB2Z2VyLmtlcm5lbC5vcmcKK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorU2lnbmVkLW9mZi1ieTogRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvcWVtdS9rZXJuZWwuY29uZmlnIHwgMSAtCisgMSBmaWxlIGNoYW5nZWQsIDEgZGVsZXRpb24oLSkKKworLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL3FlbXUva2VybmVsLmNvbmZpZworKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvd2lyZWd1YXJkL3FlbXUva2VybmVsLmNvbmZpZworQEAgLTE5LDcgKzE5LDYgQEAgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPXkKKyBDT05GSUdfTkVURklMVEVSX1hUX05BVD15CisgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9eQorIENPTkZJR19ORVRGSUxURVJfWFRfTUFSSz15CistQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PXkKKyBDT05GSUdfTkZfTkFUX0lQVjQ9eQorIENPTkZJR19JUF9ORl9JUFRBQkxFUz15CisgQ09ORklHX0lQX05GX0ZJTFRFUj15CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTI4LXdpcmVndWFyZC1zZWxmdGVzdHMtbWFrZS1zdXJlLXJwX2ZpbHRlci1pcy1kaXNhYmxlZC0ucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTI4LXdpcmVndWFyZC1zZWxmdGVzdHMtbWFrZS1zdXJlLXJwX2ZpbHRlci1pcy1kaXNhYmxlZC0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJkMGYzZQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMjgtd2lyZWd1YXJkLXNlbGZ0ZXN0cy1tYWtlLXN1cmUtcnBfZmlsdGVyLWlzLWRpc2FibGVkLS5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogRnJpLCA0IEp1biAyMDIxIDE3OjE3OjMxICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIHdpcmVndWFyZDogc2VsZnRlc3RzOiBtYWtlIHN1cmUgcnBfZmlsdGVyIGlzIGRpc2FibGVkIG9uCisgdmV0aGMKKworY29tbWl0IGY4ODczZDExZDQxMjFhYWQzNTAyNGY5Mzc5ZTQzMWUwYzgzYWJlYWQgdXBzdHJlYW0uCisKK1NvbWUgZGlzdHJvcyBtYXkgZW5hYmxlIHN0cmljdCBycF9maWx0ZXIgYnkgZGVmYXVsdCwgd2hpY2ggd2lsbCBwcmV2ZW50Cit2ZXRoYyBmcm9tIHJlY2VpdmluZyB0aGUgcGFja2V0cyB3aXRoIGFuIHVucm91dGVhYmxlIHJldmVyc2UgcGF0aCBhZGRyZXNzLgorCitSZXBvcnRlZC1ieTogSGFuZ2JpbiBMaXUgPGxpdWhhbmdiaW5AZ21haWwuY29tPgorRml4ZXM6IGU3MDk2YzEzMWU1MSAoIm5ldDogV2lyZUd1YXJkIHNlY3VyZSBuZXR3b3JrIHR1bm5lbCIpCitDYzogc3RhYmxlQHZnZXIua2VybmVsLm9yZworU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CitTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9uZXRucy5zaCB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCistLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy93aXJlZ3VhcmQvbmV0bnMuc2gKKysrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3dpcmVndWFyZC9uZXRucy5zaAorQEAgLTM2Myw2ICszNjMsNyBAQCBpcDEgLTYgcnVsZSBhZGQgdGFibGUgbWFpbiBzdXBwcmVzc19wcmVmCisgaXAxIC00IHJvdXRlIGFkZCBkZWZhdWx0IGRldiB3ZzAgdGFibGUgNTE4MjAKKyBpcDEgLTQgcnVsZSBhZGQgbm90IGZ3bWFyayA1MTgyMCB0YWJsZSA1MTgyMAorIGlwMSAtNCBydWxlIGFkZCB0YWJsZSBtYWluIHN1cHByZXNzX3ByZWZpeGxlbmd0aCAwCisrbjEgYmFzaCAtYyAncHJpbnRmIDAgPiAvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi92ZXRoYy9ycF9maWx0ZXInCisgIyBGbG9vZCB0aGUgcGluZ3MgaW5zdGVhZCBvZiBzZW5kaW5nIGp1c3Qgb25lLCB0byB0cmlnZ2VyIHJvdXRpbmcgdGFibGUgcmVmZXJlbmNlIGNvdW50aW5nIGJ1Z3MuCisgbjEgcGluZyAtVyAxIC1jIDEwMCAtZiAxOTIuMTY4Ljk5LjcKKyBuMSBwaW5nIC1XIDEgLWMgMTAwIC1mIGFiYWI6OjExMTEKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMjktd2lyZWd1YXJkLWRvLW5vdC11c2UtTzMucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTI5LXdpcmVndWFyZC1kby1ub3QtdXNlLU8zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ODkwYTcKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTI5LXdpcmVndWFyZC1kby1ub3QtdXNlLU8zLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJKYXNvbiBBLiBEb25lbmZlbGQiIDxKYXNvbkB6eDJjNC5jb20+CitEYXRlOiBGcmksIDQgSnVuIDIwMjEgMTc6MTc6MzIgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gd2lyZWd1YXJkOiBkbyBub3QgdXNlIC1PMworCitjb21taXQgY2M1MDYwY2EwMjg1ZWZlMjcyOGJjZWQzOTlhMTk1NWE3Y2U4MDhiMiB1cHN0cmVhbS4KKworQXBwYXJlbnRseSwgdmFyaW91cyB2ZXJzaW9ucyBvZiBnY2MgaGF2ZSBPMy1yZWxhdGVkIG1pc2NvbXBpbGVzLiBMb29raW5nCithdCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIC1PMiBhbmQgLU8zIGZvciBnY2MgMTEgZG9lc24ndCBpbmRpY2F0ZQorbWlzY29tcGlsZXMsIGJ1dCB0aGUgZGlmZmVyZW5jZSBhbHNvIGRvZXNuJ3Qgc2VlbSBzbyBzaWduaWZpY2FudCBmb3IKK3BlcmZvcm1hbmNlIHRoYXQgaXQncyB3b3J0aCByaXNraW5nLgorCitMaW5rOiBodHRwczovL2xvcmUua2VybmVsLm9yZy9sa21sL0NBSGstPXdqdW9HeXhEaEFGOFNzclRrTjAtWWZDeDdFNmpVTjNpa0NfdG4yQUtXVFRzQUBtYWlsLmdtYWlsLmNvbS8KK0xpbms6IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xrbWwvQ0FIbU1FOW90QjVXd3hwN0g4YlJfaTJ1SDJlc0VNdm9CTUM4dUVYQk1IOXAwcTFzNkJ3QG1haWwuZ21haWwuY29tLworUmVwb3J0ZWQtYnk6IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9uLm9yZz4KK0ZpeGVzOiBlNzA5NmMxMzFlNTEgKCJuZXQ6IFdpcmVHdWFyZCBzZWN1cmUgbmV0d29yayB0dW5uZWwiKQorQ2M6IHN0YWJsZUB2Z2VyLmtlcm5lbC5vcmcKK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorU2lnbmVkLW9mZi1ieTogRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvTWFrZWZpbGUgfCAzICstLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMiBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL01ha2VmaWxlCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvTWFrZWZpbGUKK0BAIC0xLDUgKzEsNCBAQAorLWNjZmxhZ3MteSA6PSAtTzMKKy1jY2ZsYWdzLXkgKz0gLUQncHJfZm10KGZtdCk9S0JVSUxEX01PRE5BTUUgIjogIiBmbXQnCisrY2NmbGFncy15IDo9IC1EJ3ByX2ZtdChmbXQpPUtCVUlMRF9NT0ROQU1FICI6ICIgZm10JworIGNjZmxhZ3MtJChDT05GSUdfV0lSRUdVQVJEX0RFQlVHKSArPSAtRERFQlVHCisgd2lyZWd1YXJkLXkgOj0gbWFpbi5vCisgd2lyZWd1YXJkLXkgKz0gbm9pc2UubwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDEzMC13aXJlZ3VhcmQtdXNlLXN5bmNocm9uaXplX25ldC1yYXRoZXItdGhhbi1zeW5jaHJvbml6LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDEzMC13aXJlZ3VhcmQtdXNlLXN5bmNocm9uaXplX25ldC1yYXRoZXItdGhhbi1zeW5jaHJvbml6LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwOWZlMzYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTMwLXdpcmVndWFyZC11c2Utc3luY2hyb25pemVfbmV0LXJhdGhlci10aGFuLXN5bmNocm9uaXoucGF0Y2gKQEAgLTAsMCArMSw2NiBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIkphc29uIEEuIERvbmVuZmVsZCIgPEphc29uQHp4MmM0LmNvbT4KK0RhdGU6IEZyaSwgNCBKdW4gMjAyMSAxNzoxNzozMyArMDIwMAorU3ViamVjdDogW1BBVENIXSB3aXJlZ3VhcmQ6IHVzZSBzeW5jaHJvbml6ZV9uZXQgcmF0aGVyIHRoYW4gc3luY2hyb25pemVfcmN1CisKK2NvbW1pdCAyNGI3MGVlZWI0ZjQ2YzA5NDg3ZjgxNTUyMzllYmZiMWY4NzU3NzRhIHVwc3RyZWFtLgorCitNYW55IG9mIHRoZSBzeW5jaHJvbml6YXRpb24gcG9pbnRzIGFyZSBzb21ldGltZXMgY2FsbGVkIHVuZGVyIHRoZSBydG5sCitsb2NrLCB3aGljaCBtZWFucyB3ZSBzaG91bGQgdXNlIHN5bmNocm9uaXplX25ldCByYXRoZXIgdGhhbgorc3luY2hyb25pemVfcmN1LiBVbmRlciB0aGUgaG9vZCwgdGhpcyBleHBhbmRzIHRvIHVzaW5nIHRoZSBleHBlZGl0ZWQKK2ZsYXZvciBvZiBmdW5jdGlvbiBpbiB0aGUgZXZlbnQgdGhhdCBydG5sIGlzIGhlbGQsIGluIG9yZGVyIHRvIG5vdCBzdGFsbAorb3RoZXIgY29uY3VycmVudCBjaGFuZ2VzLgorCitUaGlzIGZpeGVzIHNvbWUgdmVyeSwgdmVyeSBsb25nIGRlbGF5cyB3aGVuIHJlbW92aW5nIG11bHRpcGxlIHBlZXJzIGF0CitvbmNlLCB3aGljaCB3b3VsZCBjYXVzZSBzb21lIG9wZXJhdGlvbnMgdG8gdGFrZSBzZXZlcmFsIG1pbnV0ZXMuCisKK0ZpeGVzOiBlNzA5NmMxMzFlNTEgKCJuZXQ6IFdpcmVHdWFyZCBzZWN1cmUgbmV0d29yayB0dW5uZWwiKQorQ2M6IHN0YWJsZUB2Z2VyLmtlcm5lbC5vcmcKK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorU2lnbmVkLW9mZi1ieTogRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jICAgfCA2ICsrKy0tLQorIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9zb2NrZXQuYyB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYworKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuYworQEAgLTg4LDcgKzg4LDcgQEAgc3RhdGljIHZvaWQgcGVlcl9tYWtlX2RlYWQoc3RydWN0IHdnX3BlZQorIAkvKiBNYXJrIGFzIGRlYWQsIHNvIHRoYXQgd2UgZG9uJ3QgYWxsb3cganVtcGluZyBjb250ZXh0cyBhZnRlci4gKi8KKyAJV1JJVEVfT05DRShwZWVyLT5pc19kZWFkLCB0cnVlKTsKKyAKKy0JLyogVGhlIGNhbGxlciBtdXN0IG5vdyBzeW5jaHJvbml6ZV9yY3UoKSBmb3IgdGhpcyB0byB0YWtlIGVmZmVjdC4gKi8KKysJLyogVGhlIGNhbGxlciBtdXN0IG5vdyBzeW5jaHJvbml6ZV9uZXQoKSBmb3IgdGhpcyB0byB0YWtlIGVmZmVjdC4gKi8KKyB9CisgCisgc3RhdGljIHZvaWQgcGVlcl9yZW1vdmVfYWZ0ZXJfZGVhZChzdHJ1Y3Qgd2dfcGVlciAqcGVlcikKK0BAIC0xNjAsNyArMTYwLDcgQEAgdm9pZCB3Z19wZWVyX3JlbW92ZShzdHJ1Y3Qgd2dfcGVlciAqcGVlcgorIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZwZWVyLT5kZXZpY2UtPmRldmljZV91cGRhdGVfbG9jayk7CisgCisgCXBlZXJfbWFrZV9kZWFkKHBlZXIpOworLQlzeW5jaHJvbml6ZV9yY3UoKTsKKysJc3luY2hyb25pemVfbmV0KCk7CisgCXBlZXJfcmVtb3ZlX2FmdGVyX2RlYWQocGVlcik7CisgfQorIAorQEAgLTE3OCw3ICsxNzgsNyBAQCB2b2lkIHdnX3BlZXJfcmVtb3ZlX2FsbChzdHJ1Y3Qgd2dfZGV2aWNlCisgCQlwZWVyX21ha2VfZGVhZChwZWVyKTsKKyAJCWxpc3RfYWRkX3RhaWwoJnBlZXItPnBlZXJfbGlzdCwgJmRlYWRfcGVlcnMpOworIAl9CistCXN5bmNocm9uaXplX3JjdSgpOworKwlzeW5jaHJvbml6ZV9uZXQoKTsKKyAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBlZXIsIHRlbXAsICZkZWFkX3BlZXJzLCBwZWVyX2xpc3QpCisgCQlwZWVyX3JlbW92ZV9hZnRlcl9kZWFkKHBlZXIpOworIH0KKy0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9zb2NrZXQuYworKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NvY2tldC5jCitAQCAtNDMwLDcgKzQzMCw3IEBAIHZvaWQgd2dfc29ja2V0X3JlaW5pdChzdHJ1Y3Qgd2dfZGV2aWNlICoKKyAJaWYgKG5ldzQpCisgCQl3Zy0+aW5jb21pbmdfcG9ydCA9IG50b2hzKGluZXRfc2sobmV3NCktPmluZXRfc3BvcnQpOworIAltdXRleF91bmxvY2soJndnLT5zb2NrZXRfdXBkYXRlX2xvY2spOworLQlzeW5jaHJvbml6ZV9yY3UoKTsKKysJc3luY2hyb25pemVfbmV0KCk7CisgCXNvY2tfZnJlZShvbGQ0KTsKKyAJc29ja19mcmVlKG9sZDYpOworIH0KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMzEtd2lyZWd1YXJkLXBlZXItYWxsb2NhdGUtaW4ta21lbV9jYWNoZS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMzEtd2lyZWd1YXJkLXBlZXItYWxsb2NhdGUtaW4ta21lbV9jYWNoZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmFlMzI3Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDEzMS13aXJlZ3VhcmQtcGVlci1hbGxvY2F0ZS1pbi1rbWVtX2NhY2hlLnBhdGNoCkBAIC0wLDAgKzEsMTI1IEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogRnJpLCA0IEp1biAyMDIxIDE3OjE3OjM0ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIHdpcmVndWFyZDogcGVlcjogYWxsb2NhdGUgaW4ga21lbV9jYWNoZQorCitjb21taXQgYTRlOWY4ZTMyODdjOWViNmJmNzBkZjk4Mjg3MDk4MGRkMzM0MTg2MyB1cHN0cmVhbS4KKworV2l0aCBkZXBsb3ltZW50cyBoYXZpbmcgdXB3YXJkcyBvZiA2MDBrIHBlZXJzIG5vdywgdGhpcyBzb21ld2hhdCBoZWF2eQorc3RydWN0dXJlIGNvdWxkIGJlbmVmaXQgZnJvbSBtb3JlIGZpbmUtZ3JhaW5lZCBhbGxvY2F0aW9ucy4KK1NwZWNpZmljYWxseSwgaW5zdGVhZCBvZiB1c2luZyBhIDIwNDgtYnl0ZSBzbGFiIGZvciBhIDE1NDQtYnl0ZSBvYmplY3QsCit3ZSBjYW4gbm93IHVzZSAxNTQ0LWJ5dGUgb2JqZWN0cyBkaXJlY3RseSwgdGh1cyBzYXZpbmcgYWxtb3N0IDI1JQorcGVyLXBlZXIsIG9yIHdpdGggNjAwayBwZWVycywgdGhhdCdzIGEgc2F2aW5ncyBvZiAzMDMgTWlCLiBUaGlzIGFsc28KK21ha2VzIHdpcmVndWFyZCdzIG1lbW9yeSB1c2FnZSBtb3JlIHRyYW5zcGFyZW50IGluIHRvb2xzIGxpa2Ugc2xhYnRvcAorYW5kIC9wcm9jL3NsYWJpbmZvLgorCitGaXhlczogOGI1NTUzYWNlODNjICgid2lyZWd1YXJkOiBxdWV1ZWluZzogZ2V0IHJpZCBvZiBwZXItcGVlciByaW5nIGJ1ZmZlcnMiKQorU3VnZ2VzdGVkLWJ5OiBBcm5kIEJlcmdtYW5uIDxhcm5kQGFybmRiLmRlPgorU3VnZ2VzdGVkLWJ5OiBNYXR0aGV3IFdpbGNveCA8d2lsbHlAaW5mcmFkZWFkLm9yZz4KK0NjOiBzdGFibGVAdmdlci5rZXJuZWwub3JnCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL21haW4uYyB8ICA3ICsrKysrKysKKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jIHwgMjEgKysrKysrKysrKysrKysrKystLS0tCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL3BlZXIuaCB8ICAzICsrKworIDMgZmlsZXMgY2hhbmdlZCwgMjcgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL21haW4uYworKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL21haW4uYworQEAgLTI4LDYgKzI4LDEwIEBAIHN0YXRpYyBpbnQgX19pbml0IG1vZF9pbml0KHZvaWQpCisgI2VuZGlmCisgCXdnX25vaXNlX2luaXQoKTsKKyAKKysJcmV0ID0gd2dfcGVlcl9pbml0KCk7CisrCWlmIChyZXQgPCAwKQorKwkJZ290byBlcnJfcGVlcjsKKysKKyAJcmV0ID0gd2dfZGV2aWNlX2luaXQoKTsKKyAJaWYgKHJldCA8IDApCisgCQlnb3RvIGVycl9kZXZpY2U7CitAQCAtNDQsNiArNDgsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBtb2RfaW5pdCh2b2lkKQorIGVycl9uZXRsaW5rOgorIAl3Z19kZXZpY2VfdW5pbml0KCk7CisgZXJyX2RldmljZToKKysJd2dfcGVlcl91bmluaXQoKTsKKytlcnJfcGVlcjoKKyAJcmV0dXJuIHJldDsKKyB9CisgCitAQCAtNTEsNiArNTcsNyBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgbW9kX2V4aXQodm9pZCkKKyB7CisgCXdnX2dlbmV0bGlua191bmluaXQoKTsKKyAJd2dfZGV2aWNlX3VuaW5pdCgpOworKwl3Z19wZWVyX3VuaW5pdCgpOworIH0KKyAKKyBtb2R1bGVfaW5pdChtb2RfaW5pdCk7CistLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvcGVlci5jCitAQCAtMTUsNiArMTUsNyBAQAorICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgorICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisgCisrc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpwZWVyX2NhY2hlOworIHN0YXRpYyBhdG9taWM2NF90IHBlZXJfY291bnRlciA9IEFUT01JQzY0X0lOSVQoMCk7CisgCisgc3RydWN0IHdnX3BlZXIgKndnX3BlZXJfY3JlYXRlKHN0cnVjdCB3Z19kZXZpY2UgKndnLAorQEAgLTI5LDEwICszMCwxMCBAQCBzdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnCisgCWlmICh3Zy0+bnVtX3BlZXJzID49IE1BWF9QRUVSU19QRVJfREVWSUNFKQorIAkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKyAKKy0JcGVlciA9IGt6YWxsb2Moc2l6ZW9mKCpwZWVyKSwgR0ZQX0tFUk5FTCk7CisrCXBlZXIgPSBrbWVtX2NhY2hlX3phbGxvYyhwZWVyX2NhY2hlLCBHRlBfS0VSTkVMKTsKKyAJaWYgKHVubGlrZWx5KCFwZWVyKSkKKyAJCXJldHVybiBFUlJfUFRSKHJldCk7CistCWlmIChkc3RfY2FjaGVfaW5pdCgmcGVlci0+ZW5kcG9pbnRfY2FjaGUsIEdGUF9LRVJORUwpKQorKwlpZiAodW5saWtlbHkoZHN0X2NhY2hlX2luaXQoJnBlZXItPmVuZHBvaW50X2NhY2hlLCBHRlBfS0VSTkVMKSkpCisgCQlnb3RvIGVycjsKKyAKKyAJcGVlci0+ZGV2aWNlID0gd2c7CitAQCAtNjQsNyArNjUsNyBAQCBzdHJ1Y3Qgd2dfcGVlciAqd2dfcGVlcl9jcmVhdGUoc3RydWN0IHdnCisgCXJldHVybiBwZWVyOworIAorIGVycjoKKy0Ja2ZyZWUocGVlcik7CisrCWttZW1fY2FjaGVfZnJlZShwZWVyX2NhY2hlLCBwZWVyKTsKKyAJcmV0dXJuIEVSUl9QVFIocmV0KTsKKyB9CisgCitAQCAtMTkzLDcgKzE5NCw4IEBAIHN0YXRpYyB2b2lkIHJjdV9yZWxlYXNlKHN0cnVjdCByY3VfaGVhZAorIAkvKiBUaGUgZmluYWwgemVyb2luZyB0YWtlcyBjYXJlIG9mIGNsZWFyaW5nIGFueSByZW1haW5pbmcgaGFuZHNoYWtlIGtleQorIAkgKiBtYXRlcmlhbCBhbmQgb3RoZXIgcG90ZW50aWFsbHkgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLgorIAkgKi8KKy0Ja3pmcmVlKHBlZXIpOworKwltZW16ZXJvX2V4cGxpY2l0KHBlZXIsIHNpemVvZigqcGVlcikpOworKwlrbWVtX2NhY2hlX2ZyZWUocGVlcl9jYWNoZSwgcGVlcik7CisgfQorIAorIHN0YXRpYyB2b2lkIGtyZWZfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmY291bnQpCitAQCAtMjI1LDMgKzIyNywxNCBAQCB2b2lkIHdnX3BlZXJfcHV0KHN0cnVjdCB3Z19wZWVyICpwZWVyKQorIAkJcmV0dXJuOworIAlrcmVmX3B1dCgmcGVlci0+cmVmY291bnQsIGtyZWZfcmVsZWFzZSk7CisgfQorKworK2ludCBfX2luaXQgd2dfcGVlcl9pbml0KHZvaWQpCisreworKwlwZWVyX2NhY2hlID0gS01FTV9DQUNIRSh3Z19wZWVyLCAwKTsKKysJcmV0dXJuIHBlZXJfY2FjaGUgPyAwIDogLUVOT01FTTsKKyt9CisrCisrdm9pZCB3Z19wZWVyX3VuaW5pdCh2b2lkKQorK3sKKysJa21lbV9jYWNoZV9kZXN0cm95KHBlZXJfY2FjaGUpOworK30KKy0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmgKKysrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9wZWVyLmgKK0BAIC04MCw0ICs4MCw3IEBAIHZvaWQgd2dfcGVlcl9wdXQoc3RydWN0IHdnX3BlZXIgKnBlZXIpOworIHZvaWQgd2dfcGVlcl9yZW1vdmUoc3RydWN0IHdnX3BlZXIgKnBlZXIpOworIHZvaWQgd2dfcGVlcl9yZW1vdmVfYWxsKHN0cnVjdCB3Z19kZXZpY2UgKndnKTsKKyAKKytpbnQgd2dfcGVlcl9pbml0KHZvaWQpOworK3ZvaWQgd2dfcGVlcl91bmluaXQodm9pZCk7CisrCisgI2VuZGlmIC8qIF9XR19QRUVSX0ggKi8KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMzItd2lyZWd1YXJkLWFsbG93ZWRpcHMtaW5pdGlhbGl6ZS1saXN0LWhlYWQtaW4tc2VsZnRlcy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMzItd2lyZWd1YXJkLWFsbG93ZWRpcHMtaW5pdGlhbGl6ZS1saXN0LWhlYWQtaW4tc2VsZnRlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTRlNWRjCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDEzMi13aXJlZ3VhcmQtYWxsb3dlZGlwcy1pbml0aWFsaXplLWxpc3QtaGVhZC1pbi1zZWxmdGVzLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJKYXNvbiBBLiBEb25lbmZlbGQiIDxKYXNvbkB6eDJjNC5jb20+CitEYXRlOiBGcmksIDQgSnVuIDIwMjEgMTc6MTc6MzUgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gd2lyZWd1YXJkOiBhbGxvd2VkaXBzOiBpbml0aWFsaXplIGxpc3QgaGVhZCBpbiBzZWxmdGVzdAorCitjb21taXQgNDZjZmU4ZWVlMjg1Y2RlNDY1YjQyMDYzNzUwNzg4NDU1MWY1ZDdjYSB1cHN0cmVhbS4KKworVGhlIHJhbmRvbWl6ZWQgdHJpZSB0ZXN0cyB3ZXJlbid0IGluaXRpYWxpemluZyB0aGUgZHVtbXkgcGVlciBsaXN0IGhlYWQsCityZXN1bHRpbmcgaW4gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiB1c2VkLiBGaXggdGhpcyBieQoraW5pdGlhbGl6aW5nIGl0IGluIHRoZSByYW5kb21pemVkIHRyaWUgdGVzdCwganVzdCBsaWtlIHdlIGRvIGZvciB0aGUKK3N0YXRpYyB1bml0IHRlc3QuCisKK1doaWxlIHdlJ3JlIGF0IGl0LCBhbGwgb2YgdGhlIG90aGVyIHN0cmluZ3MgbGlrZSB0aGlzIGhhdmUgdGhlIHdvcmQKKyJzZWxmLXRlc3QiLCBzbyBhZGQgaXQgdG8gdGhlIG1pc3NpbmcgcGxhY2UgaGVyZS4KKworRml4ZXM6IGU3MDk2YzEzMWU1MSAoIm5ldDogV2lyZUd1YXJkIHNlY3VyZSBuZXR3b3JrIHR1bm5lbCIpCitDYzogc3RhYmxlQHZnZXIua2VybmVsLm9yZworU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CitTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9hbGxvd2VkaXBzLmMgfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L2FsbG93ZWRpcHMuYworKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL3NlbGZ0ZXN0L2FsbG93ZWRpcHMuYworQEAgLTI5Niw2ICsyOTYsNyBAQCBzdGF0aWMgX19pbml0IGJvb2wgcmFuZG9taXplZF90ZXN0KHZvaWQpCisgCQkJZ290byBmcmVlOworIAkJfQorIAkJa3JlZl9pbml0KCZwZWVyc1tpXS0+cmVmY291bnQpOworKwkJSU5JVF9MSVNUX0hFQUQoJnBlZXJzW2ldLT5hbGxvd2VkaXBzX2xpc3QpOworIAl9CisgCisgCW11dGV4X2xvY2soJm11dGV4KTsKK0BAIC0zMzMsNyArMzM0LDcgQEAgc3RhdGljIF9faW5pdCBib29sIHJhbmRvbWl6ZWRfdGVzdCh2b2lkKQorIAkJCWlmICh3Z19hbGxvd2VkaXBzX2luc2VydF92NCgmdCwKKyAJCQkJCQkgICAgKHN0cnVjdCBpbl9hZGRyICopbXV0YXRlZCwKKyAJCQkJCQkgICAgY2lkciwgcGVlciwgJm11dGV4KSA8IDApIHsKKy0JCQkJcHJfZXJyKCJhbGxvd2VkaXBzIHJhbmRvbSBtYWxsb2M6IEZBSUxcbiIpOworKwkJCQlwcl9lcnIoImFsbG93ZWRpcHMgcmFuZG9tIHNlbGYtdGVzdCBtYWxsb2M6IEZBSUxcbiIpOworIAkJCQlnb3RvIGZyZWVfbG9ja2VkOworIAkJCX0KKyAJCQlpZiAoaG9ycmlibGVfYWxsb3dlZGlwc19pbnNlcnRfdjQoJmgsCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTMzLXdpcmVndWFyZC1hbGxvd2VkaXBzLXJlbW92ZS1ub2Rlcy1pbi1PLTEucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTMzLXdpcmVndWFyZC1hbGxvd2VkaXBzLXJlbW92ZS1ub2Rlcy1pbi1PLTEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhkYTI0ZQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMzMtd2lyZWd1YXJkLWFsbG93ZWRpcHMtcmVtb3ZlLW5vZGVzLWluLU8tMS5wYXRjaApAQCAtMCwwICsxLDIzNyBAQAorRnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIkphc29uIEEuIERvbmVuZmVsZCIgPEphc29uQHp4MmM0LmNvbT4KK0RhdGU6IEZyaSwgNCBKdW4gMjAyMSAxNzoxNzozNiArMDIwMAorU3ViamVjdDogW1BBVENIXSB3aXJlZ3VhcmQ6IGFsbG93ZWRpcHM6IHJlbW92ZSBub2RlcyBpbiBPKDEpCisKK2NvbW1pdCBmNjM0ZjQxOGMyMjdjOTEyZTdlYTk1YTMyOTllZmRjOWIxMGU0MDIyIHVwc3RyZWFtLgorCitQcmV2aW91c2x5LCBkZWxldGluZyBwZWVycyB3b3VsZCByZXF1aXJlIHRyYXZlcnNpbmcgdGhlIGVudGlyZSB0cmllIGluCitvcmRlciB0byByZWJhbGFuY2Ugbm9kZXMgYW5kIHNhZmVseSBmcmVlIHRoZW0uIFRoaXMgbWVhbnQgdGhhdCByZW1vdmluZworMTAwMCBwZWVycyBmcm9tIGEgdHJpZSB3aXRoIGEgaGFsZiBtaWxsaW9uIG5vZGVzIHdvdWxkIHRha2UgYW4gZXh0cmVtZWx5Citsb25nIHRpbWUsIGR1cmluZyB3aGljaCB3ZSdyZSBob2xkaW5nIHRoZSBydG5sIGxvY2suIExhcmdlLXNjYWxlIHVzZXJzCit3ZXJlIHJlcG9ydGluZyAyMDBtcyBsYXRlbmNpZXMgYWRkZWQgdG8gdGhlIG5ldHdvcmtpbmcgc3RhY2sgYXMgYSB3aG9sZQorZXZlcnkgdGltZSB0aGVpciB1c2Vyc3BhY2Ugc29mdHdhcmUgd291bGQgcXVldWUgdXAgc2lnbmlmaWNhbnQgcmVtb3ZhbHMuCitUaGF0J3MgYSBzZXJpb3VzIHNpdHVhdGlvbi4KKworVGhpcyBjb21taXQgZml4ZXMgdGhhdCBieSBtYWludGFpbmluZyBhIGRvdWJsZSBwb2ludGVyIHRvIHRoZSBwYXJlbnQncworYml0IHBvaW50ZXIgZm9yIGVhY2ggbm9kZSwgYW5kIHRoZW4gdXNpbmcgdGhlIGFscmVhZHkgZXhpc3Rpbmcgbm9kZSBsaXN0CitiZWxvbmdpbmcgdG8gZWFjaCBwZWVyIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBub2RlLCBmaXggdXAgaXRzIHBvaW50ZXJzLAorYW5kIGZyZWUgaXQgd2l0aCBSQ1UuIFRoaXMgbWVhbnMgcmVtb3ZhbCBpcyBPKDEpIGluc3RlYWQgb2YgTyhuKSwgYW5kIHdlCitkb24ndCB1c2UgZ29icyBvZiBzdGFjay4KKworVGhlIHJlbW92YWwgYWxnb3JpdGhtIGhhcyB0aGUgc2FtZSBkb3duc2lkZSBhcyB0aGUgY29kZSB0aGF0IGl0IGZpeGVzOgoraXQgd29uJ3QgY29sbGFwc2UgbmVlZGxlc3NseSBsb25nIHJ1bnMgb2YgZmlsbGVycy4gIFdlIGNhbiBlbmhhbmNlIHRoYXQKK2luIHRoZSBmdXR1cmUgaWYgaXQgZXZlciBiZWNvbWVzIGEgcHJvYmxlbS4gVGhpcyBjb21taXQgZG9jdW1lbnRzIHRoYXQKK2xpbWl0YXRpb24gd2l0aCBhIFRPRE8gY29tbWVudCBpbiBjb2RlLCBhIHNtYWxsIGJ1dCBtZWFuaW5nZnVsCitpbXByb3ZlbWVudCBvdmVyIHRoZSBwcmlvciBzaXR1YXRpb24uCisKK0N1cnJlbnRseSB0aGUgYmlnZ2VzdCBmbGF3LCB3aGljaCB0aGUgbmV4dCBjb21taXQgYWRkcmVzc2VzLCBpcyB0aGF0CitiZWNhdXNlIHRoaXMgaW5jcmVhc2VzIHRoZSBub2RlIHNpemUgb24gNjQtYml0IG1hY2hpbmVzIGZyb20gNjAgYnl0ZXMgdG8KKzY4IGJ5dGVzLiA2MCByb3VuZHMgdXAgdG8gNjQsIGJ1dCA2OCByb3VuZHMgdXAgdG8gMTI4LiBTbyB3ZSB3aW5kIHVwCit1c2luZyB0d2ljZSBhcyBtdWNoIG1lbW9yeSBwZXIgbm9kZSwgYmVjYXVzZSBvZiBwb3dlci1vZi10d28KK2FsbG9jYXRpb25zLCB3aGljaCBpcyBhIGJpZyBidW1tZXIuIFdlJ2xsIG5lZWQgdG8gZmlndXJlIHNvbWV0aGluZyBvdXQKK3RoZXJlLgorCitGaXhlczogZTcwOTZjMTMxZTUxICgibmV0OiBXaXJlR3VhcmQgc2VjdXJlIG5ldHdvcmsgdHVubmVsIikKK0NjOiBzdGFibGVAdmdlci5rZXJuZWwub3JnCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorLS0tCisgZHJpdmVycy9uZXQvd2lyZWd1YXJkL2FsbG93ZWRpcHMuYyB8IDEzMiArKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQorIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9hbGxvd2VkaXBzLmggfCAgIDkgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDU3IGluc2VydGlvbnMoKyksIDg0IGRlbGV0aW9ucygtKQorCistLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvYWxsb3dlZGlwcy5jCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvYWxsb3dlZGlwcy5jCitAQCAtNjYsNjAgKzY2LDYgQEAgc3RhdGljIHZvaWQgcm9vdF9yZW1vdmVfcGVlcl9saXN0cyhzdHJ1YworIAl9CisgfQorIAorLXN0YXRpYyB2b2lkIHdhbGtfcmVtb3ZlX2J5X3BlZXIoc3RydWN0IGFsbG93ZWRpcHNfbm9kZSBfX3JjdSAqKnRvcCwKKy0JCQkJc3RydWN0IHdnX3BlZXIgKnBlZXIsIHN0cnVjdCBtdXRleCAqbG9jaykKKy17CistI2RlZmluZSBSRUYocCkgcmN1X2FjY2Vzc19wb2ludGVyKHApCistI2RlZmluZSBERVJFRihwKSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKCoocCksIGxvY2tkZXBfaXNfaGVsZChsb2NrKSkKKy0jZGVmaW5lIFBVU0gocCkgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLQkJV0FSTl9PTihJU19FTkFCTEVEKERFQlVHKSAmJiBsZW4gPj0gMTI4KTsgICAgICAgICAgICAgICAgICAgICAgXAorLQkJc3RhY2tbbGVuKytdID0gcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLQl9KQorLQorLQlzdHJ1Y3QgYWxsb3dlZGlwc19ub2RlIF9fcmN1ICoqc3RhY2tbMTI4XSwgKipucHRyOworLQlzdHJ1Y3QgYWxsb3dlZGlwc19ub2RlICpub2RlLCAqcHJldjsKKy0JdW5zaWduZWQgaW50IGxlbjsKKy0KKy0JaWYgKHVubGlrZWx5KCFwZWVyIHx8ICFSRUYoKnRvcCkpKQorLQkJcmV0dXJuOworLQorLQlmb3IgKHByZXYgPSBOVUxMLCBsZW4gPSAwLCBQVVNIKHRvcCk7IGxlbiA+IDA7IHByZXYgPSBub2RlKSB7CistCQlucHRyID0gc3RhY2tbbGVuIC0gMV07CistCQlub2RlID0gREVSRUYobnB0cik7CistCQlpZiAoIW5vZGUpIHsKKy0JCQktLWxlbjsKKy0JCQljb250aW51ZTsKKy0JCX0KKy0JCWlmICghcHJldiB8fCBSRUYocHJldi0+Yml0WzBdKSA9PSBub2RlIHx8CistCQkgICAgUkVGKHByZXYtPmJpdFsxXSkgPT0gbm9kZSkgeworLQkJCWlmIChSRUYobm9kZS0+Yml0WzBdKSkKKy0JCQkJUFVTSCgmbm9kZS0+Yml0WzBdKTsKKy0JCQllbHNlIGlmIChSRUYobm9kZS0+Yml0WzFdKSkKKy0JCQkJUFVTSCgmbm9kZS0+Yml0WzFdKTsKKy0JCX0gZWxzZSBpZiAoUkVGKG5vZGUtPmJpdFswXSkgPT0gcHJldikgeworLQkJCWlmIChSRUYobm9kZS0+Yml0WzFdKSkKKy0JCQkJUFVTSCgmbm9kZS0+Yml0WzFdKTsKKy0JCX0gZWxzZSB7CistCQkJaWYgKHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobm9kZS0+cGVlciwKKy0JCQkJbG9ja2RlcF9pc19oZWxkKGxvY2spKSA9PSBwZWVyKSB7CistCQkJCVJDVV9JTklUX1BPSU5URVIobm9kZS0+cGVlciwgTlVMTCk7CistCQkJCWxpc3RfZGVsX2luaXQoJm5vZGUtPnBlZXJfbGlzdCk7CistCQkJCWlmICghbm9kZS0+Yml0WzBdIHx8ICFub2RlLT5iaXRbMV0pIHsKKy0JCQkJCXJjdV9hc3NpZ25fcG9pbnRlcigqbnB0ciwgREVSRUYoCistCQkJCQkgICAgICAgJm5vZGUtPmJpdFshUkVGKG5vZGUtPmJpdFswXSldKSk7CistCQkJCQlrZnJlZV9yY3Uobm9kZSwgcmN1KTsKKy0JCQkJCW5vZGUgPSBERVJFRihucHRyKTsKKy0JCQkJfQorLQkJCX0KKy0JCQktLWxlbjsKKy0JCX0KKy0JfQorLQorLSN1bmRlZiBSRUYKKy0jdW5kZWYgREVSRUYKKy0jdW5kZWYgUFVTSAorLX0KKy0KKyBzdGF0aWMgdW5zaWduZWQgaW50IGZsczEyOCh1NjQgYSwgdTY0IGIpCisgeworIAlyZXR1cm4gYSA/IGZsczY0KGEpICsgNjRVIDogZmxzNjQoYik7CitAQCAtMjI0LDYgKzE3MCw3IEBAIHN0YXRpYyBpbnQgYWRkKHN0cnVjdCBhbGxvd2VkaXBzX25vZGUgX18KKyAJCVJDVV9JTklUX1BPSU5URVIobm9kZS0+cGVlciwgcGVlcik7CisgCQlsaXN0X2FkZF90YWlsKCZub2RlLT5wZWVyX2xpc3QsICZwZWVyLT5hbGxvd2VkaXBzX2xpc3QpOworIAkJY29weV9hbmRfYXNzaWduX2NpZHIobm9kZSwga2V5LCBjaWRyLCBiaXRzKTsKKysJCXJjdV9hc3NpZ25fcG9pbnRlcihub2RlLT5wYXJlbnRfYml0LCB0cmllKTsKKyAJCXJjdV9hc3NpZ25fcG9pbnRlcigqdHJpZSwgbm9kZSk7CisgCQlyZXR1cm4gMDsKKyAJfQorQEAgLTI0Myw5ICsxOTAsOSBAQCBzdGF0aWMgaW50IGFkZChzdHJ1Y3QgYWxsb3dlZGlwc19ub2RlIF9fCisgCWlmICghbm9kZSkgeworIAkJZG93biA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoKnRyaWUsIGxvY2tkZXBfaXNfaGVsZChsb2NrKSk7CisgCX0gZWxzZSB7CistCQlkb3duID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChDSE9PU0VfTk9ERShub2RlLCBrZXkpLAorLQkJCQkJCSBsb2NrZGVwX2lzX2hlbGQobG9jaykpOworKwkJZG93biA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoQ0hPT1NFX05PREUobm9kZSwga2V5KSwgbG9ja2RlcF9pc19oZWxkKGxvY2spKTsKKyAJCWlmICghZG93bikgeworKwkJCXJjdV9hc3NpZ25fcG9pbnRlcihuZXdub2RlLT5wYXJlbnRfYml0LCAmQ0hPT1NFX05PREUobm9kZSwga2V5KSk7CisgCQkJcmN1X2Fzc2lnbl9wb2ludGVyKENIT09TRV9OT0RFKG5vZGUsIGtleSksIG5ld25vZGUpOworIAkJCXJldHVybiAwOworIAkJfQorQEAgLTI1NCwyOSArMjAxLDM3IEBAIHN0YXRpYyBpbnQgYWRkKHN0cnVjdCBhbGxvd2VkaXBzX25vZGUgX18KKyAJcGFyZW50ID0gbm9kZTsKKyAKKyAJaWYgKG5ld25vZGUtPmNpZHIgPT0gY2lkcikgeworKwkJcmN1X2Fzc2lnbl9wb2ludGVyKGRvd24tPnBhcmVudF9iaXQsICZDSE9PU0VfTk9ERShuZXdub2RlLCBkb3duLT5iaXRzKSk7CisgCQlyY3VfYXNzaWduX3BvaW50ZXIoQ0hPT1NFX05PREUobmV3bm9kZSwgZG93bi0+Yml0cyksIGRvd24pOworLQkJaWYgKCFwYXJlbnQpCisrCQlpZiAoIXBhcmVudCkgeworKwkJCXJjdV9hc3NpZ25fcG9pbnRlcihuZXdub2RlLT5wYXJlbnRfYml0LCB0cmllKTsKKyAJCQlyY3VfYXNzaWduX3BvaW50ZXIoKnRyaWUsIG5ld25vZGUpOworLQkJZWxzZQorLQkJCXJjdV9hc3NpZ25fcG9pbnRlcihDSE9PU0VfTk9ERShwYXJlbnQsIG5ld25vZGUtPmJpdHMpLAorLQkJCQkJICAgbmV3bm9kZSk7CistCX0gZWxzZSB7CistCQlub2RlID0ga3phbGxvYyhzaXplb2YoKm5vZGUpLCBHRlBfS0VSTkVMKTsKKy0JCWlmICh1bmxpa2VseSghbm9kZSkpIHsKKy0JCQlsaXN0X2RlbCgmbmV3bm9kZS0+cGVlcl9saXN0KTsKKy0JCQlrZnJlZShuZXdub2RlKTsKKy0JCQlyZXR1cm4gLUVOT01FTTsKKysJCX0gZWxzZSB7CisrCQkJcmN1X2Fzc2lnbl9wb2ludGVyKG5ld25vZGUtPnBhcmVudF9iaXQsICZDSE9PU0VfTk9ERShwYXJlbnQsIG5ld25vZGUtPmJpdHMpKTsKKysJCQlyY3VfYXNzaWduX3BvaW50ZXIoQ0hPT1NFX05PREUocGFyZW50LCBuZXdub2RlLT5iaXRzKSwgbmV3bm9kZSk7CisgCQl9CistCQlJTklUX0xJU1RfSEVBRCgmbm9kZS0+cGVlcl9saXN0KTsKKy0JCWNvcHlfYW5kX2Fzc2lnbl9jaWRyKG5vZGUsIG5ld25vZGUtPmJpdHMsIGNpZHIsIGJpdHMpOworKwkJcmV0dXJuIDA7CisrCX0KKysKKysJbm9kZSA9IGt6YWxsb2Moc2l6ZW9mKCpub2RlKSwgR0ZQX0tFUk5FTCk7CisrCWlmICh1bmxpa2VseSghbm9kZSkpIHsKKysJCWxpc3RfZGVsKCZuZXdub2RlLT5wZWVyX2xpc3QpOworKwkJa2ZyZWUobmV3bm9kZSk7CisrCQlyZXR1cm4gLUVOT01FTTsKKysJfQorKwlJTklUX0xJU1RfSEVBRCgmbm9kZS0+cGVlcl9saXN0KTsKKysJY29weV9hbmRfYXNzaWduX2NpZHIobm9kZSwgbmV3bm9kZS0+Yml0cywgY2lkciwgYml0cyk7CisgCistCQlyY3VfYXNzaWduX3BvaW50ZXIoQ0hPT1NFX05PREUobm9kZSwgZG93bi0+Yml0cyksIGRvd24pOworLQkJcmN1X2Fzc2lnbl9wb2ludGVyKENIT09TRV9OT0RFKG5vZGUsIG5ld25vZGUtPmJpdHMpLCBuZXdub2RlKTsKKy0JCWlmICghcGFyZW50KQorLQkJCXJjdV9hc3NpZ25fcG9pbnRlcigqdHJpZSwgbm9kZSk7CistCQllbHNlCistCQkJcmN1X2Fzc2lnbl9wb2ludGVyKENIT09TRV9OT0RFKHBhcmVudCwgbm9kZS0+Yml0cyksCistCQkJCQkgICBub2RlKTsKKysJcmN1X2Fzc2lnbl9wb2ludGVyKGRvd24tPnBhcmVudF9iaXQsICZDSE9PU0VfTk9ERShub2RlLCBkb3duLT5iaXRzKSk7CisrCXJjdV9hc3NpZ25fcG9pbnRlcihDSE9PU0VfTk9ERShub2RlLCBkb3duLT5iaXRzKSwgZG93bik7CisrCXJjdV9hc3NpZ25fcG9pbnRlcihuZXdub2RlLT5wYXJlbnRfYml0LCAmQ0hPT1NFX05PREUobm9kZSwgbmV3bm9kZS0+Yml0cykpOworKwlyY3VfYXNzaWduX3BvaW50ZXIoQ0hPT1NFX05PREUobm9kZSwgbmV3bm9kZS0+Yml0cyksIG5ld25vZGUpOworKwlpZiAoIXBhcmVudCkgeworKwkJcmN1X2Fzc2lnbl9wb2ludGVyKG5vZGUtPnBhcmVudF9iaXQsIHRyaWUpOworKwkJcmN1X2Fzc2lnbl9wb2ludGVyKCp0cmllLCBub2RlKTsKKysJfSBlbHNlIHsKKysJCXJjdV9hc3NpZ25fcG9pbnRlcihub2RlLT5wYXJlbnRfYml0LCAmQ0hPT1NFX05PREUocGFyZW50LCBub2RlLT5iaXRzKSk7CisrCQlyY3VfYXNzaWduX3BvaW50ZXIoQ0hPT1NFX05PREUocGFyZW50LCBub2RlLT5iaXRzKSwgbm9kZSk7CisgCX0KKyAJcmV0dXJuIDA7CisgfQorQEAgLTMzNSw5ICsyOTAsMzAgQEAgaW50IHdnX2FsbG93ZWRpcHNfaW5zZXJ0X3Y2KHN0cnVjdCBhbGxvdworIHZvaWQgd2dfYWxsb3dlZGlwc19yZW1vdmVfYnlfcGVlcihzdHJ1Y3QgYWxsb3dlZGlwcyAqdGFibGUsCisgCQkJCSAgc3RydWN0IHdnX3BlZXIgKnBlZXIsIHN0cnVjdCBtdXRleCAqbG9jaykKKyB7CisrCXN0cnVjdCBhbGxvd2VkaXBzX25vZGUgKm5vZGUsICpjaGlsZCwgKnRtcDsKKysKKysJaWYgKGxpc3RfZW1wdHkoJnBlZXItPmFsbG93ZWRpcHNfbGlzdCkpCisrCQlyZXR1cm47CisgCSsrdGFibGUtPnNlcTsKKy0Jd2Fsa19yZW1vdmVfYnlfcGVlcigmdGFibGUtPnJvb3Q0LCBwZWVyLCBsb2NrKTsKKy0Jd2Fsa19yZW1vdmVfYnlfcGVlcigmdGFibGUtPnJvb3Q2LCBwZWVyLCBsb2NrKTsKKysJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIHRtcCwgJnBlZXItPmFsbG93ZWRpcHNfbGlzdCwgcGVlcl9saXN0KSB7CisrCQlsaXN0X2RlbF9pbml0KCZub2RlLT5wZWVyX2xpc3QpOworKwkJUkNVX0lOSVRfUE9JTlRFUihub2RlLT5wZWVyLCBOVUxMKTsKKysJCWlmIChub2RlLT5iaXRbMF0gJiYgbm9kZS0+Yml0WzFdKQorKwkJCWNvbnRpbnVlOworKwkJY2hpbGQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKAorKwkJCQlub2RlLT5iaXRbIXJjdV9hY2Nlc3NfcG9pbnRlcihub2RlLT5iaXRbMF0pXSwKKysJCQkJbG9ja2RlcF9pc19oZWxkKGxvY2spKTsKKysJCWlmIChjaGlsZCkKKysJCQljaGlsZC0+cGFyZW50X2JpdCA9IG5vZGUtPnBhcmVudF9iaXQ7CisrCQkqcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChub2RlLT5wYXJlbnRfYml0LCBsb2NrZGVwX2lzX2hlbGQobG9jaykpID0gY2hpbGQ7CisrCQlrZnJlZV9yY3Uobm9kZSwgcmN1KTsKKysKKysJCS8qIFRPRE86IE5vdGUgdGhhdCB3ZSBjdXJyZW50bHkgZG9uJ3Qgd2FsayB1cCBhbmQgZG93biBpbiBvcmRlciB0bworKwkJICogZnJlZSBhbnkgcG90ZW50aWFsIGZpbGxlciBub2Rlcy4gVGhpcyBtZWFucyB0aGF0IHRoaXMgZnVuY3Rpb24KKysJCSAqIGRvZXNuJ3QgZnJlZSB1cCBhcyBtdWNoIGFzIGl0IGNvdWxkLCB3aGljaCBjb3VsZCBiZSByZXZpc2l0ZWQKKysJCSAqIGF0IHNvbWUgcG9pbnQuCisrCQkgKi8KKysJfQorIH0KKyAKKyBpbnQgd2dfYWxsb3dlZGlwc19yZWFkX25vZGUoc3RydWN0IGFsbG93ZWRpcHNfbm9kZSAqbm9kZSwgdTggaXBbMTZdLCB1OCAqY2lkcikKKy0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9hbGxvd2VkaXBzLmgKKysrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9hbGxvd2VkaXBzLmgKK0BAIC0xNSwxNCArMTUsMTEgQEAgc3RydWN0IHdnX3BlZXI7Cisgc3RydWN0IGFsbG93ZWRpcHNfbm9kZSB7CisgCXN0cnVjdCB3Z19wZWVyIF9fcmN1ICpwZWVyOworIAlzdHJ1Y3QgYWxsb3dlZGlwc19ub2RlIF9fcmN1ICpiaXRbMl07CistCS8qIFdoaWxlIGl0IG1heSBzZWVtIHNjYW5kYWxvdXMgdGhhdCB3ZSB3YXN0ZSBzcGFjZSBmb3IgdjQsCistCSAqIHdlJ3JlIGFsbG9jJ2luZyB0byB0aGUgbmVhcmVzdCBwb3dlciBvZiAyIGFueXdheSwgc28gdGhpcworLQkgKiBkb2Vzbid0IGFjdHVhbGx5IG1ha2UgYSBkaWZmZXJlbmNlLgorLQkgKi8KKy0JdTggYml0c1sxNl0gX19hbGlnbmVkKF9fYWxpZ25vZih1NjQpKTsKKyAJdTggY2lkciwgYml0X2F0X2EsIGJpdF9hdF9iLCBiaXRsZW47CisrCXU4IGJpdHNbMTZdIF9fYWxpZ25lZChfX2FsaWdub2YodTY0KSk7CisgCistCS8qIEtlZXAgcmFyZWx5IHVzZWQgbGlzdCBhdCBib3R0b20gdG8gYmUgYmV5b25kIGNhY2hlIGxpbmUuICovCisrCS8qIEtlZXAgcmFyZWx5IHVzZWQgbWVtYmVycyBhdCBib3R0b20gdG8gYmUgYmV5b25kIGNhY2hlIGxpbmUuICovCisrCXN0cnVjdCBhbGxvd2VkaXBzX25vZGUgKl9fcmN1ICpwYXJlbnRfYml0OyAvKiBYWFg6IHRoaXMgcHV0cyB1cyBhdCA2OC0+MTI4IGJ5dGVzIGluc3RlYWQgb2YgNjAtPjY0IGJ5dGVzISEgKi8KKyAJdW5pb24geworIAkJc3RydWN0IGxpc3RfaGVhZCBwZWVyX2xpc3Q7CisgCQlzdHJ1Y3QgcmN1X2hlYWQgcmN1OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDEzNC13aXJlZ3VhcmQtYWxsb3dlZGlwcy1hbGxvY2F0ZS1ub2Rlcy1pbi1rbWVtX2NhY2hlLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDEzNC13aXJlZ3VhcmQtYWxsb3dlZGlwcy1hbGxvY2F0ZS1ub2Rlcy1pbi1rbWVtX2NhY2hlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YjMxYjAKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMDgwLXdpcmVndWFyZC0wMTM0LXdpcmVndWFyZC1hbGxvd2VkaXBzLWFsbG9jYXRlLW5vZGVzLWluLWttZW1fY2FjaGUucGF0Y2gKQEAgLTAsMCArMSwxNzMgQEAKK0Zyb20gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJKYXNvbiBBLiBEb25lbmZlbGQiIDxKYXNvbkB6eDJjNC5jb20+CitEYXRlOiBGcmksIDQgSnVuIDIwMjEgMTc6MTc6MzcgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gd2lyZWd1YXJkOiBhbGxvd2VkaXBzOiBhbGxvY2F0ZSBub2RlcyBpbiBrbWVtX2NhY2hlCisKK2NvbW1pdCBkYzY4MGRlMjhjYTg0OWRmZTU4OWRjMTVhYzU2ZDIyNTA1ZjBlZjExIHVwc3RyZWFtLgorCitUaGUgcHJldmlvdXMgY29tbWl0IG1vdmVkIGZyb20gTyhuKSB0byBPKDEpIGZvciByZW1vdmFsLCBidXQgaW4gdGhlCitwcm9jZXNzIGludHJvZHVjZWQgYW4gYWRkaXRpb25hbCBwb2ludGVyIG1lbWJlciB0byBhIHN0cnVjdCB0aGF0CitpbmNyZWFzZWQgdGhlIHNpemUgZnJvbSA2MCB0byA2OCBieXRlcywgcHV0dGluZyBub2RlcyBpbiB0aGUgMTI4LWJ5dGUKK3NsYWIuIFdpdGggZGVwbG95ZWQgc3lzdGVtcyBoYXZpbmcgYXMgbWFueSBhcyAyIG1pbGxpb24gbm9kZXMsIHRoaXMKK3JlcHJlc2VudHMgYSBzaWduaWZpY2FudCBkb3VibGluZyBpbiBtZW1vcnkgdXNhZ2UgKDEyOCBNaUIgLT4gMjU2IE1pQikuCitGaXggdGhpcyBieSB1c2luZyBvdXIgb3duIGttZW1fY2FjaGUsIHRoYXQncyBzaXplZCBleGFjdGx5IHJpZ2h0LiBUaGlzCithbHNvIG1ha2VzIHdpcmVndWFyZCdzIG1lbW9yeSB1c2FnZSBtb3JlIHRyYW5zcGFyZW50IGluIHRvb2xzIGxpa2UKK3NsYWJ0b3AgYW5kIC9wcm9jL3NsYWJpbmZvLgorCitGaXhlczogZTcwOTZjMTMxZTUxICgibmV0OiBXaXJlR3VhcmQgc2VjdXJlIG5ldHdvcmsgdHVubmVsIikKK1N1Z2dlc3RlZC1ieTogQXJuZCBCZXJnbWFubiA8YXJuZEBhcm5kYi5kZT4KK1N1Z2dlc3RlZC1ieTogTWF0dGhldyBXaWxjb3ggPHdpbGx5QGluZnJhZGVhZC5vcmc+CitDYzogc3RhYmxlQHZnZXIua2VybmVsLm9yZworU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CitTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9hbGxvd2VkaXBzLmMgfCAzMSArKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0KKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvYWxsb3dlZGlwcy5oIHwgIDUgKysrKy0KKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvbWFpbi5jICAgICAgIHwgMTAgKysrKysrKysrLQorIDMgZmlsZXMgY2hhbmdlZCwgMzggaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9uZXQvd2lyZWd1YXJkL2FsbG93ZWRpcHMuYworKysrIGIvZHJpdmVycy9uZXQvd2lyZWd1YXJkL2FsbG93ZWRpcHMuYworQEAgLTYsNiArNiw4IEBACisgI2luY2x1ZGUgImFsbG93ZWRpcHMuaCIKKyAjaW5jbHVkZSAicGVlci5oIgorIAorK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbm9kZV9jYWNoZTsKKysKKyBzdGF0aWMgdm9pZCBzd2FwX2VuZGlhbih1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCB1OCBiaXRzKQorIHsKKyAJaWYgKGJpdHMgPT0gMzIpIHsKK0BAIC00MCw2ICs0MiwxMSBAQCBzdGF0aWMgdm9pZCBwdXNoX3JjdShzdHJ1Y3QgYWxsb3dlZGlwc19uCisgCX0KKyB9CisgCisrc3RhdGljIHZvaWQgbm9kZV9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkKKyt7CisrCWttZW1fY2FjaGVfZnJlZShub2RlX2NhY2hlLCBjb250YWluZXJfb2YocmN1LCBzdHJ1Y3QgYWxsb3dlZGlwc19ub2RlLCByY3UpKTsKKyt9CisrCisgc3RhdGljIHZvaWQgcm9vdF9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkKKyB7CisgCXN0cnVjdCBhbGxvd2VkaXBzX25vZGUgKm5vZGUsICpzdGFja1sxMjhdID0geworQEAgLTQ5LDcgKzU2LDcgQEAgc3RhdGljIHZvaWQgcm9vdF9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYQorIAl3aGlsZSAobGVuID4gMCAmJiAobm9kZSA9IHN0YWNrWy0tbGVuXSkpIHsKKyAJCXB1c2hfcmN1KHN0YWNrLCBub2RlLT5iaXRbMF0sICZsZW4pOworIAkJcHVzaF9yY3Uoc3RhY2ssIG5vZGUtPmJpdFsxXSwgJmxlbik7CistCQlrZnJlZShub2RlKTsKKysJCWttZW1fY2FjaGVfZnJlZShub2RlX2NhY2hlLCBub2RlKTsKKyAJfQorIH0KKyAKK0BAIC0xNjQsNyArMTcxLDcgQEAgc3RhdGljIGludCBhZGQoc3RydWN0IGFsbG93ZWRpcHNfbm9kZSBfXworIAkJcmV0dXJuIC1FSU5WQUw7CisgCisgCWlmICghcmN1X2FjY2Vzc19wb2ludGVyKCp0cmllKSkgeworLQkJbm9kZSA9IGt6YWxsb2Moc2l6ZW9mKCpub2RlKSwgR0ZQX0tFUk5FTCk7CisrCQlub2RlID0ga21lbV9jYWNoZV96YWxsb2Mobm9kZV9jYWNoZSwgR0ZQX0tFUk5FTCk7CisgCQlpZiAodW5saWtlbHkoIW5vZGUpKQorIAkJCXJldHVybiAtRU5PTUVNOworIAkJUkNVX0lOSVRfUE9JTlRFUihub2RlLT5wZWVyLCBwZWVyKTsKK0BAIC0xODAsNyArMTg3LDcgQEAgc3RhdGljIGludCBhZGQoc3RydWN0IGFsbG93ZWRpcHNfbm9kZSBfXworIAkJcmV0dXJuIDA7CisgCX0KKyAKKy0JbmV3bm9kZSA9IGt6YWxsb2Moc2l6ZW9mKCpuZXdub2RlKSwgR0ZQX0tFUk5FTCk7CisrCW5ld25vZGUgPSBrbWVtX2NhY2hlX3phbGxvYyhub2RlX2NhY2hlLCBHRlBfS0VSTkVMKTsKKyAJaWYgKHVubGlrZWx5KCFuZXdub2RlKSkKKyAJCXJldHVybiAtRU5PTUVNOworIAlSQ1VfSU5JVF9QT0lOVEVSKG5ld25vZGUtPnBlZXIsIHBlZXIpOworQEAgLTIxMywxMCArMjIwLDEwIEBAIHN0YXRpYyBpbnQgYWRkKHN0cnVjdCBhbGxvd2VkaXBzX25vZGUgX18KKyAJCXJldHVybiAwOworIAl9CisgCistCW5vZGUgPSBremFsbG9jKHNpemVvZigqbm9kZSksIEdGUF9LRVJORUwpOworKwlub2RlID0ga21lbV9jYWNoZV96YWxsb2Mobm9kZV9jYWNoZSwgR0ZQX0tFUk5FTCk7CisgCWlmICh1bmxpa2VseSghbm9kZSkpIHsKKyAJCWxpc3RfZGVsKCZuZXdub2RlLT5wZWVyX2xpc3QpOworLQkJa2ZyZWUobmV3bm9kZSk7CisrCQlrbWVtX2NhY2hlX2ZyZWUobm9kZV9jYWNoZSwgbmV3bm9kZSk7CisgCQlyZXR1cm4gLUVOT01FTTsKKyAJfQorIAlJTklUX0xJU1RfSEVBRCgmbm9kZS0+cGVlcl9saXN0KTsKK0BAIC0zMDYsNyArMzEzLDcgQEAgdm9pZCB3Z19hbGxvd2VkaXBzX3JlbW92ZV9ieV9wZWVyKHN0cnVjdAorIAkJaWYgKGNoaWxkKQorIAkJCWNoaWxkLT5wYXJlbnRfYml0ID0gbm9kZS0+cGFyZW50X2JpdDsKKyAJCSpyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG5vZGUtPnBhcmVudF9iaXQsIGxvY2tkZXBfaXNfaGVsZChsb2NrKSkgPSBjaGlsZDsKKy0JCWtmcmVlX3JjdShub2RlLCByY3UpOworKwkJY2FsbF9yY3UoJm5vZGUtPnJjdSwgbm9kZV9mcmVlX3JjdSk7CisgCisgCQkvKiBUT0RPOiBOb3RlIHRoYXQgd2UgY3VycmVudGx5IGRvbid0IHdhbGsgdXAgYW5kIGRvd24gaW4gb3JkZXIgdG8KKyAJCSAqIGZyZWUgYW55IHBvdGVudGlhbCBmaWxsZXIgbm9kZXMuIFRoaXMgbWVhbnMgdGhhdCB0aGlzIGZ1bmN0aW9uCitAQCAtMzUwLDQgKzM1NywxNiBAQCBzdHJ1Y3Qgd2dfcGVlciAqd2dfYWxsb3dlZGlwc19sb29rdXBfc3JjCisgCXJldHVybiBOVUxMOworIH0KKyAKKytpbnQgX19pbml0IHdnX2FsbG93ZWRpcHNfc2xhYl9pbml0KHZvaWQpCisreworKwlub2RlX2NhY2hlID0gS01FTV9DQUNIRShhbGxvd2VkaXBzX25vZGUsIDApOworKwlyZXR1cm4gbm9kZV9jYWNoZSA/IDAgOiAtRU5PTUVNOworK30KKysKKyt2b2lkIHdnX2FsbG93ZWRpcHNfc2xhYl91bmluaXQodm9pZCkKKyt7CisrCXJjdV9iYXJyaWVyKCk7CisrCWttZW1fY2FjaGVfZGVzdHJveShub2RlX2NhY2hlKTsKKyt9CisrCisgI2luY2x1ZGUgInNlbGZ0ZXN0L2FsbG93ZWRpcHMuYyIKKy0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9hbGxvd2VkaXBzLmgKKysrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9hbGxvd2VkaXBzLmgKK0BAIC0xOSw3ICsxOSw3IEBAIHN0cnVjdCBhbGxvd2VkaXBzX25vZGUgeworIAl1OCBiaXRzWzE2XSBfX2FsaWduZWQoX19hbGlnbm9mKHU2NCkpOworIAorIAkvKiBLZWVwIHJhcmVseSB1c2VkIG1lbWJlcnMgYXQgYm90dG9tIHRvIGJlIGJleW9uZCBjYWNoZSBsaW5lLiAqLworLQlzdHJ1Y3QgYWxsb3dlZGlwc19ub2RlICpfX3JjdSAqcGFyZW50X2JpdDsgLyogWFhYOiB0aGlzIHB1dHMgdXMgYXQgNjgtPjEyOCBieXRlcyBpbnN0ZWFkIG9mIDYwLT42NCBieXRlcyEhICovCisrCXN0cnVjdCBhbGxvd2VkaXBzX25vZGUgKl9fcmN1ICpwYXJlbnRfYml0OworIAl1bmlvbiB7CisgCQlzdHJ1Y3QgbGlzdF9oZWFkIHBlZXJfbGlzdDsKKyAJCXN0cnVjdCByY3VfaGVhZCByY3U7CitAQCAtNTMsNCArNTMsNyBAQCBzdHJ1Y3Qgd2dfcGVlciAqd2dfYWxsb3dlZGlwc19sb29rdXBfc3JjCisgYm9vbCB3Z19hbGxvd2VkaXBzX3NlbGZ0ZXN0KHZvaWQpOworICNlbmRpZgorIAorK2ludCB3Z19hbGxvd2VkaXBzX3NsYWJfaW5pdCh2b2lkKTsKKyt2b2lkIHdnX2FsbG93ZWRpcHNfc2xhYl91bmluaXQodm9pZCk7CisrCisgI2VuZGlmIC8qIF9XR19BTExPV0VESVBTX0ggKi8KKy0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9tYWluLmMKKysrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9tYWluLmMKK0BAIC0yMSwxMCArMjEsMTUgQEAgc3RhdGljIGludCBfX2luaXQgbW9kX2luaXQodm9pZCkKKyB7CisgCWludCByZXQ7CisgCisrCXJldCA9IHdnX2FsbG93ZWRpcHNfc2xhYl9pbml0KCk7CisrCWlmIChyZXQgPCAwKQorKwkJZ290byBlcnJfYWxsb3dlZGlwczsKKysKKyAjaWZkZWYgREVCVUcKKysJcmV0ID0gLUVOT1RSRUNPVkVSQUJMRTsKKyAJaWYgKCF3Z19hbGxvd2VkaXBzX3NlbGZ0ZXN0KCkgfHwgIXdnX3BhY2tldF9jb3VudGVyX3NlbGZ0ZXN0KCkgfHwKKyAJICAgICF3Z19yYXRlbGltaXRlcl9zZWxmdGVzdCgpKQorLQkJcmV0dXJuIC1FTk9UUkVDT1ZFUkFCTEU7CisrCQlnb3RvIGVycl9wZWVyOworICNlbmRpZgorIAl3Z19ub2lzZV9pbml0KCk7CisgCitAQCAtNTAsNiArNTUsOCBAQCBlcnJfbmV0bGluazoKKyBlcnJfZGV2aWNlOgorIAl3Z19wZWVyX3VuaW5pdCgpOworIGVycl9wZWVyOgorKwl3Z19hbGxvd2VkaXBzX3NsYWJfdW5pbml0KCk7CisrZXJyX2FsbG93ZWRpcHM6CisgCXJldHVybiByZXQ7CisgfQorIAorQEAgLTU4LDYgKzY1LDcgQEAgc3RhdGljIHZvaWQgX19leGl0IG1vZF9leGl0KHZvaWQpCisgCXdnX2dlbmV0bGlua191bmluaXQoKTsKKyAJd2dfZGV2aWNlX3VuaW5pdCgpOworIAl3Z19wZWVyX3VuaW5pdCgpOworKwl3Z19hbGxvd2VkaXBzX3NsYWJfdW5pbml0KCk7CisgfQorIAorIG1vZHVsZV9pbml0KG1vZF9pbml0KTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMzUtd2lyZWd1YXJkLWFsbG93ZWRpcHMtZnJlZS1lbXB0eS1pbnRlcm1lZGlhdGUtbm9kZXMtdy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8wODAtd2lyZWd1YXJkLTAxMzUtd2lyZWd1YXJkLWFsbG93ZWRpcHMtZnJlZS1lbXB0eS1pbnRlcm1lZGlhdGUtbm9kZXMtdy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDQ0YWQyCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzA4MC13aXJlZ3VhcmQtMDEzNS13aXJlZ3VhcmQtYWxsb3dlZGlwcy1mcmVlLWVtcHR5LWludGVybWVkaWF0ZS1ub2Rlcy13LnBhdGNoCkBAIC0wLDAgKzEsNTIxIEBACitGcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiSmFzb24gQS4gRG9uZW5mZWxkIiA8SmFzb25AengyYzQuY29tPgorRGF0ZTogRnJpLCA0IEp1biAyMDIxIDE3OjE3OjM4ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIHdpcmVndWFyZDogYWxsb3dlZGlwczogZnJlZSBlbXB0eSBpbnRlcm1lZGlhdGUgbm9kZXMgd2hlbgorIHJlbW92aW5nIHNpbmdsZSBub2RlCisKK2NvbW1pdCBiZjdiMDQyZGM2MmEzMWY2NmQzYTQxZGQ0ZGZjNzgwNmYyNjdiMzA3IHVwc3RyZWFtLgorCitXaGVuIHJlbW92aW5nIHNpbmdsZSBub2RlcywgaXQncyBwb3NzaWJsZSB0aGF0IHRoYXQgbm9kZSdzIHBhcmVudCBpcyBhbgorZW1wdHkgaW50ZXJtZWRpYXRlIG5vZGUsIGluIHdoaWNoIGNhc2UsIGl0IHRvbyBzaG91bGQgYmUgcmVtb3ZlZC4KK090aGVyd2lzZSB0aGUgdHJpZSBmaWxscyB1cCBhbmQgbmV2ZXIgaXMgZnVsbHkgZW1wdGllZCwgbGVhZGluZyB0bworZ3JhZHVhbCBtZW1vcnkgbGVha3Mgb3ZlciB0aW1lIGZvciB0cmllcyB0aGF0IGFyZSBtb2RpZmllZCBvZnRlbi4gVGhlcmUKK3dhcyBvcmlnaW5hbGx5IGNvZGUgdG8gZG8gdGhpcywgYnV0IHdhcyByZW1vdmVkIGR1cmluZyByZWZhY3RvcmluZyBpbgorMjAxNiBhbmQgbmV2ZXIgcmV3b3JrZWQuIE5vdyB0aGF0IHdlIGhhdmUgcHJvcGVyIHBhcmVudCBwb2ludGVycyBmcm9tCit0aGUgcHJldmlvdXMgY29tbWl0cywgd2UgY2FuIGltcGxlbWVudCB0aGlzIHByb3Blcmx5LgorCitJbiBvcmRlciB0byByZWR1Y2UgYnJhbmNoaW5nIGFuZCBleHBlbnNpdmUgY29tcGFyaXNvbnMsIHdlIHdhbnQgdG8ga2VlcAordGhlIGRvdWJsZSBwb2ludGVyIGZvciBwYXJlbnQgYXNzaWdubWVudCAod2hpY2ggbGV0cyB1cyBlYXNpbHkgY2hhaW4gdXAKK3RvIHRoZSByb290KSwgYnV0IHdlIHN0aWxsIG5lZWQgdG8gYWN0dWFsbHkgZ2V0IHRoZSBwYXJlbnQncyBiYXNlCithZGRyZXNzLiBTbyBlbmNvZGUgdGhlIGJpdCBudW1iZXIgaW50byB0aGUgbGFzdCB0d28gYml0cyBvZiB0aGUgcG9pbnRlciwKK2FuZCBwYWNrIGFuZCB1bnBhY2sgaXQgYXMgbmVlZGVkLiBUaGlzIGlzIGEgbGl0dGxlIGJpdCBjbHVtc3kgYnV0IGlzIHRoZQorZmFzdGVzdCBhbmQgbGVzcyBtZW1vcnkgd2FzdGVmdWwgb2YgdGhlIGNvbXByb21pc2VzLiBOb3RlIHRoYXQgd2UgYWxpZ24KK3RoZSByb290IHN0cnVjdCBoZXJlIHRvIGEgbWluaW11bSBvZiA0LCBiZWNhdXNlIGl0J3MgZW1iZWRkZWQgaW50byBhCitsYXJnZXIgc3RydWN0LCBhbmQgd2UncmUgcmVseWluZyBvbiBoYXZpbmcgdGhlIGJvdHRvbSB0d28gYml0cyBmb3Igb3VyCitmbGFnLCB3aGljaCB3b3VsZCBvbmx5IGJlIDE2LWJpdCBhbGlnbmVkIG9uIG02OGsuCisKK1RoZSBleGlzdGluZyBtYWNyby1iYXNlZCBoZWxwZXJzIHdlcmUgYSBiaXQgdW53aWVsZHkgZm9yIGFkZGluZyB0aGUgYml0CitwYWNraW5nIHRvLCBzbyB0aGlzIGNvbW1pdCByZXBsYWNlcyB0aGVtIHdpdGggc2FmZXIgYW5kIGNsZWFyZXIgb3JkaW5hcnkKK2Z1bmN0aW9ucy4KKworV2UgYWRkIGEgdGVzdCB0byB0aGUgcmFuZG9taXplZC9mdXp6ZXIgcGFydCBvZiB0aGUgc2VsZnRlc3RzLCB0byBmcmVlCit0aGUgcmFuZG9taXplZCB0cmllcyBieS1wZWVyLCByZWZ1enogaXQsIGFuZCByZXBlYXQsIHVudGlsIGl0J3Mgc3VwcG9zZWQKK3RvIGJlIGVtcHR5LCBhbmQgdGhlbiB0aGVuIHNlZSBpZiB0aGF0IGFjdHVhbGx5IHJlc3VsdGVkIGluIHRoZSB3aG9sZQordGhpbmcgYmVpbmcgZW1wdGllZC4gVGhhdCBjb21iaW5lZCB3aXRoIGttZW1jaGVjayBzaG91bGQgaG9wZWZ1bGx5IG1ha2UKK3N1cmUgdGhpcyBjb21taXQgaXMgZG9pbmcgd2hhdCBpdCBzaG91bGQuIEFsb25nIHRoZSB3YXkgdGhpcyByZXN1bHRlZCBpbgordmFyaW91cyBvdGhlciBjbGVhbnVwcyBvZiB0aGUgdGVzdHMgYW5kIGZpeGVzIGZvciByZWNlbnQgZ3JhcGh2aXouCisKK0ZpeGVzOiBlNzA5NmMxMzFlNTEgKCJuZXQ6IFdpcmVHdWFyZCBzZWN1cmUgbmV0d29yayB0dW5uZWwiKQorQ2M6IHN0YWJsZUB2Z2VyLmtlcm5lbC5vcmcKK1NpZ25lZC1vZmYtYnk6IEphc29uIEEuIERvbmVuZmVsZCA8SmFzb25AengyYzQuY29tPgorU2lnbmVkLW9mZi1ieTogRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorU2lnbmVkLW9mZi1ieTogSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+CistLS0KKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvYWxsb3dlZGlwcy5jICAgICAgICAgIHwgMTAyICsrKysrKy0tLS0tLQorIGRyaXZlcnMvbmV0L3dpcmVndWFyZC9hbGxvd2VkaXBzLmggICAgICAgICAgfCAgIDQgKy0KKyBkcml2ZXJzL25ldC93aXJlZ3VhcmQvc2VsZnRlc3QvYWxsb3dlZGlwcy5jIHwgMTYyICsrKysrKysrKystLS0tLS0tLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCAxMzcgaW5zZXJ0aW9ucygrKSwgMTMxIGRlbGV0aW9ucygtKQorCistLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvYWxsb3dlZGlwcy5jCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvYWxsb3dlZGlwcy5jCitAQCAtMzAsOCArMzAsMTEgQEAgc3RhdGljIHZvaWQgY29weV9hbmRfYXNzaWduX2NpZHIoc3RydWN0CisgCW5vZGUtPmJpdGxlbiA9IGJpdHM7CisgCW1lbWNweShub2RlLT5iaXRzLCBzcmMsIGJpdHMgLyA4VSk7CisgfQorLSNkZWZpbmUgQ0hPT1NFX05PREUocGFyZW50LCBrZXkpIFwKKy0JcGFyZW50LT5iaXRbKGtleVtwYXJlbnQtPmJpdF9hdF9hXSA+PiBwYXJlbnQtPmJpdF9hdF9iKSAmIDFdCisrCisrc3RhdGljIGlubGluZSB1OCBjaG9vc2Uoc3RydWN0IGFsbG93ZWRpcHNfbm9kZSAqbm9kZSwgY29uc3QgdTggKmtleSkKKyt7CisrCXJldHVybiAoa2V5W25vZGUtPmJpdF9hdF9hXSA+PiBub2RlLT5iaXRfYXRfYikgJiAxOworK30KKyAKKyBzdGF0aWMgdm9pZCBwdXNoX3JjdShzdHJ1Y3QgYWxsb3dlZGlwc19ub2RlICoqc3RhY2ssCisgCQkgICAgIHN0cnVjdCBhbGxvd2VkaXBzX25vZGUgX19yY3UgKnAsIHVuc2lnbmVkIGludCAqbGVuKQorQEAgLTExMiw3ICsxMTUsNyBAQCBzdGF0aWMgc3RydWN0IGFsbG93ZWRpcHNfbm9kZSAqZmluZF9ub2RlCisgCQkJZm91bmQgPSBub2RlOworIAkJaWYgKG5vZGUtPmNpZHIgPT0gYml0cykKKyAJCQlicmVhazsKKy0JCW5vZGUgPSByY3VfZGVyZWZlcmVuY2VfYmgoQ0hPT1NFX05PREUobm9kZSwga2V5KSk7CisrCQlub2RlID0gcmN1X2RlcmVmZXJlbmNlX2JoKG5vZGUtPmJpdFtjaG9vc2Uobm9kZSwga2V5KV0pOworIAl9CisgCXJldHVybiBmb3VuZDsKKyB9CitAQCAtMTQ0LDggKzE0Nyw3IEBAIHN0YXRpYyBib29sIG5vZGVfcGxhY2VtZW50KHN0cnVjdCBhbGxvd2UKKyAJCQkgICB1OCBjaWRyLCB1OCBiaXRzLCBzdHJ1Y3QgYWxsb3dlZGlwc19ub2RlICoqcm5vZGUsCisgCQkJICAgc3RydWN0IG11dGV4ICpsb2NrKQorIHsKKy0Jc3RydWN0IGFsbG93ZWRpcHNfbm9kZSAqbm9kZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQodHJpZSwKKy0JCQkJCQlsb2NrZGVwX2lzX2hlbGQobG9jaykpOworKwlzdHJ1Y3QgYWxsb3dlZGlwc19ub2RlICpub2RlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCh0cmllLCBsb2NrZGVwX2lzX2hlbGQobG9jaykpOworIAlzdHJ1Y3QgYWxsb3dlZGlwc19ub2RlICpwYXJlbnQgPSBOVUxMOworIAlib29sIGV4YWN0ID0gZmFsc2U7CisgCitAQCAtMTU1LDEzICsxNTcsMjQgQEAgc3RhdGljIGJvb2wgbm9kZV9wbGFjZW1lbnQoc3RydWN0IGFsbG93ZQorIAkJCWV4YWN0ID0gdHJ1ZTsKKyAJCQlicmVhazsKKyAJCX0KKy0JCW5vZGUgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKENIT09TRV9OT0RFKHBhcmVudCwga2V5KSwKKy0JCQkJCQkgbG9ja2RlcF9pc19oZWxkKGxvY2spKTsKKysJCW5vZGUgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBhcmVudC0+Yml0W2Nob29zZShwYXJlbnQsIGtleSldLCBsb2NrZGVwX2lzX2hlbGQobG9jaykpOworIAl9CisgCSpybm9kZSA9IHBhcmVudDsKKyAJcmV0dXJuIGV4YWN0OworIH0KKyAKKytzdGF0aWMgaW5saW5lIHZvaWQgY29ubmVjdF9ub2RlKHN0cnVjdCBhbGxvd2VkaXBzX25vZGUgKipwYXJlbnQsIHU4IGJpdCwgc3RydWN0IGFsbG93ZWRpcHNfbm9kZSAqbm9kZSkKKyt7CisrCW5vZGUtPnBhcmVudF9iaXRfcGFja2VkID0gKHVuc2lnbmVkIGxvbmcpcGFyZW50IHwgYml0OworKwlyY3VfYXNzaWduX3BvaW50ZXIoKnBhcmVudCwgbm9kZSk7CisrfQorKworK3N0YXRpYyBpbmxpbmUgdm9pZCBjaG9vc2VfYW5kX2Nvbm5lY3Rfbm9kZShzdHJ1Y3QgYWxsb3dlZGlwc19ub2RlICpwYXJlbnQsIHN0cnVjdCBhbGxvd2VkaXBzX25vZGUgKm5vZGUpCisreworKwl1OCBiaXQgPSBjaG9vc2UocGFyZW50LCBub2RlLT5iaXRzKTsKKysJY29ubmVjdF9ub2RlKCZwYXJlbnQtPmJpdFtiaXRdLCBiaXQsIG5vZGUpOworK30KKysKKyBzdGF0aWMgaW50IGFkZChzdHJ1Y3QgYWxsb3dlZGlwc19ub2RlIF9fcmN1ICoqdHJpZSwgdTggYml0cywgY29uc3QgdTggKmtleSwKKyAJICAgICAgIHU4IGNpZHIsIHN0cnVjdCB3Z19wZWVyICpwZWVyLCBzdHJ1Y3QgbXV0ZXggKmxvY2spCisgeworQEAgLTE3Nyw4ICsxOTAsNyBAQCBzdGF0aWMgaW50IGFkZChzdHJ1Y3QgYWxsb3dlZGlwc19ub2RlIF9fCisgCQlSQ1VfSU5JVF9QT0lOVEVSKG5vZGUtPnBlZXIsIHBlZXIpOworIAkJbGlzdF9hZGRfdGFpbCgmbm9kZS0+cGVlcl9saXN0LCAmcGVlci0+YWxsb3dlZGlwc19saXN0KTsKKyAJCWNvcHlfYW5kX2Fzc2lnbl9jaWRyKG5vZGUsIGtleSwgY2lkciwgYml0cyk7CistCQlyY3VfYXNzaWduX3BvaW50ZXIobm9kZS0+cGFyZW50X2JpdCwgdHJpZSk7CistCQlyY3VfYXNzaWduX3BvaW50ZXIoKnRyaWUsIG5vZGUpOworKwkJY29ubmVjdF9ub2RlKHRyaWUsIDIsIG5vZGUpOworIAkJcmV0dXJuIDA7CisgCX0KKyAJaWYgKG5vZGVfcGxhY2VtZW50KCp0cmllLCBrZXksIGNpZHIsIGJpdHMsICZub2RlLCBsb2NrKSkgeworQEAgLTE5NywxMCArMjA5LDEwIEBAIHN0YXRpYyBpbnQgYWRkKHN0cnVjdCBhbGxvd2VkaXBzX25vZGUgX18KKyAJaWYgKCFub2RlKSB7CisgCQlkb3duID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCgqdHJpZSwgbG9ja2RlcF9pc19oZWxkKGxvY2spKTsKKyAJfSBlbHNlIHsKKy0JCWRvd24gPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKENIT09TRV9OT0RFKG5vZGUsIGtleSksIGxvY2tkZXBfaXNfaGVsZChsb2NrKSk7CisrCQljb25zdCB1OCBiaXQgPSBjaG9vc2Uobm9kZSwga2V5KTsKKysJCWRvd24gPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKG5vZGUtPmJpdFtiaXRdLCBsb2NrZGVwX2lzX2hlbGQobG9jaykpOworIAkJaWYgKCFkb3duKSB7CistCQkJcmN1X2Fzc2lnbl9wb2ludGVyKG5ld25vZGUtPnBhcmVudF9iaXQsICZDSE9PU0VfTk9ERShub2RlLCBrZXkpKTsKKy0JCQlyY3VfYXNzaWduX3BvaW50ZXIoQ0hPT1NFX05PREUobm9kZSwga2V5KSwgbmV3bm9kZSk7CisrCQkJY29ubmVjdF9ub2RlKCZub2RlLT5iaXRbYml0XSwgYml0LCBuZXdub2RlKTsKKyAJCQlyZXR1cm4gMDsKKyAJCX0KKyAJfQorQEAgLTIwOCwxNSArMjIwLDExIEBAIHN0YXRpYyBpbnQgYWRkKHN0cnVjdCBhbGxvd2VkaXBzX25vZGUgX18KKyAJcGFyZW50ID0gbm9kZTsKKyAKKyAJaWYgKG5ld25vZGUtPmNpZHIgPT0gY2lkcikgeworLQkJcmN1X2Fzc2lnbl9wb2ludGVyKGRvd24tPnBhcmVudF9iaXQsICZDSE9PU0VfTk9ERShuZXdub2RlLCBkb3duLT5iaXRzKSk7CistCQlyY3VfYXNzaWduX3BvaW50ZXIoQ0hPT1NFX05PREUobmV3bm9kZSwgZG93bi0+Yml0cyksIGRvd24pOworLQkJaWYgKCFwYXJlbnQpIHsKKy0JCQlyY3VfYXNzaWduX3BvaW50ZXIobmV3bm9kZS0+cGFyZW50X2JpdCwgdHJpZSk7CistCQkJcmN1X2Fzc2lnbl9wb2ludGVyKCp0cmllLCBuZXdub2RlKTsKKy0JCX0gZWxzZSB7CistCQkJcmN1X2Fzc2lnbl9wb2ludGVyKG5ld25vZGUtPnBhcmVudF9iaXQsICZDSE9PU0VfTk9ERShwYXJlbnQsIG5ld25vZGUtPmJpdHMpKTsKKy0JCQlyY3VfYXNzaWduX3BvaW50ZXIoQ0hPT1NFX05PREUocGFyZW50LCBuZXdub2RlLT5iaXRzKSwgbmV3bm9kZSk7CistCQl9CisrCQljaG9vc2VfYW5kX2Nvbm5lY3Rfbm9kZShuZXdub2RlLCBkb3duKTsKKysJCWlmICghcGFyZW50KQorKwkJCWNvbm5lY3Rfbm9kZSh0cmllLCAyLCBuZXdub2RlKTsKKysJCWVsc2UKKysJCQljaG9vc2VfYW5kX2Nvbm5lY3Rfbm9kZShwYXJlbnQsIG5ld25vZGUpOworIAkJcmV0dXJuIDA7CisgCX0KKyAKK0BAIC0yMjksMTcgKzIzNywxMiBAQCBzdGF0aWMgaW50IGFkZChzdHJ1Y3QgYWxsb3dlZGlwc19ub2RlIF9fCisgCUlOSVRfTElTVF9IRUFEKCZub2RlLT5wZWVyX2xpc3QpOworIAljb3B5X2FuZF9hc3NpZ25fY2lkcihub2RlLCBuZXdub2RlLT5iaXRzLCBjaWRyLCBiaXRzKTsKKyAKKy0JcmN1X2Fzc2lnbl9wb2ludGVyKGRvd24tPnBhcmVudF9iaXQsICZDSE9PU0VfTk9ERShub2RlLCBkb3duLT5iaXRzKSk7CistCXJjdV9hc3NpZ25fcG9pbnRlcihDSE9PU0VfTk9ERShub2RlLCBkb3duLT5iaXRzKSwgZG93bik7CistCXJjdV9hc3NpZ25fcG9pbnRlcihuZXdub2RlLT5wYXJlbnRfYml0LCAmQ0hPT1NFX05PREUobm9kZSwgbmV3bm9kZS0+Yml0cykpOworLQlyY3VfYXNzaWduX3BvaW50ZXIoQ0hPT1NFX05PREUobm9kZSwgbmV3bm9kZS0+Yml0cyksIG5ld25vZGUpOworLQlpZiAoIXBhcmVudCkgeworLQkJcmN1X2Fzc2lnbl9wb2ludGVyKG5vZGUtPnBhcmVudF9iaXQsIHRyaWUpOworLQkJcmN1X2Fzc2lnbl9wb2ludGVyKCp0cmllLCBub2RlKTsKKy0JfSBlbHNlIHsKKy0JCXJjdV9hc3NpZ25fcG9pbnRlcihub2RlLT5wYXJlbnRfYml0LCAmQ0hPT1NFX05PREUocGFyZW50LCBub2RlLT5iaXRzKSk7CistCQlyY3VfYXNzaWduX3BvaW50ZXIoQ0hPT1NFX05PREUocGFyZW50LCBub2RlLT5iaXRzKSwgbm9kZSk7CistCX0KKysJY2hvb3NlX2FuZF9jb25uZWN0X25vZGUobm9kZSwgZG93bik7CisrCWNob29zZV9hbmRfY29ubmVjdF9ub2RlKG5vZGUsIG5ld25vZGUpOworKwlpZiAoIXBhcmVudCkKKysJCWNvbm5lY3Rfbm9kZSh0cmllLCAyLCBub2RlKTsKKysJZWxzZQorKwkJY2hvb3NlX2FuZF9jb25uZWN0X25vZGUocGFyZW50LCBub2RlKTsKKyAJcmV0dXJuIDA7CisgfQorIAorQEAgLTI5Nyw3ICszMDAsOCBAQCBpbnQgd2dfYWxsb3dlZGlwc19pbnNlcnRfdjYoc3RydWN0IGFsbG93Cisgdm9pZCB3Z19hbGxvd2VkaXBzX3JlbW92ZV9ieV9wZWVyKHN0cnVjdCBhbGxvd2VkaXBzICp0YWJsZSwKKyAJCQkJICBzdHJ1Y3Qgd2dfcGVlciAqcGVlciwgc3RydWN0IG11dGV4ICpsb2NrKQorIHsKKy0Jc3RydWN0IGFsbG93ZWRpcHNfbm9kZSAqbm9kZSwgKmNoaWxkLCAqdG1wOworKwlzdHJ1Y3QgYWxsb3dlZGlwc19ub2RlICpub2RlLCAqY2hpbGQsICoqcGFyZW50X2JpdCwgKnBhcmVudCwgKnRtcDsKKysJYm9vbCBmcmVlX3BhcmVudDsKKyAKKyAJaWYgKGxpc3RfZW1wdHkoJnBlZXItPmFsbG93ZWRpcHNfbGlzdCkpCisgCQlyZXR1cm47CitAQCAtMzA3LDE5ICszMTEsMjkgQEAgdm9pZCB3Z19hbGxvd2VkaXBzX3JlbW92ZV9ieV9wZWVyKHN0cnVjdAorIAkJUkNVX0lOSVRfUE9JTlRFUihub2RlLT5wZWVyLCBOVUxMKTsKKyAJCWlmIChub2RlLT5iaXRbMF0gJiYgbm9kZS0+Yml0WzFdKQorIAkJCWNvbnRpbnVlOworLQkJY2hpbGQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKAorLQkJCQlub2RlLT5iaXRbIXJjdV9hY2Nlc3NfcG9pbnRlcihub2RlLT5iaXRbMF0pXSwKKy0JCQkJbG9ja2RlcF9pc19oZWxkKGxvY2spKTsKKysJCWNoaWxkID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChub2RlLT5iaXRbIXJjdV9hY2Nlc3NfcG9pbnRlcihub2RlLT5iaXRbMF0pXSwKKysJCQkJCQkgIGxvY2tkZXBfaXNfaGVsZChsb2NrKSk7CisgCQlpZiAoY2hpbGQpCistCQkJY2hpbGQtPnBhcmVudF9iaXQgPSBub2RlLT5wYXJlbnRfYml0OworLQkJKnJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobm9kZS0+cGFyZW50X2JpdCwgbG9ja2RlcF9pc19oZWxkKGxvY2spKSA9IGNoaWxkOworKwkJCWNoaWxkLT5wYXJlbnRfYml0X3BhY2tlZCA9IG5vZGUtPnBhcmVudF9iaXRfcGFja2VkOworKwkJcGFyZW50X2JpdCA9IChzdHJ1Y3QgYWxsb3dlZGlwc19ub2RlICoqKShub2RlLT5wYXJlbnRfYml0X3BhY2tlZCAmIH4zVUwpOworKwkJKnBhcmVudF9iaXQgPSBjaGlsZDsKKysJCXBhcmVudCA9ICh2b2lkICopcGFyZW50X2JpdCAtCisrCQkJIG9mZnNldG9mKHN0cnVjdCBhbGxvd2VkaXBzX25vZGUsIGJpdFtub2RlLT5wYXJlbnRfYml0X3BhY2tlZCAmIDFdKTsKKysJCWZyZWVfcGFyZW50ID0gIXJjdV9hY2Nlc3NfcG9pbnRlcihub2RlLT5iaXRbMF0pICYmCisrCQkJICAgICAgIXJjdV9hY2Nlc3NfcG9pbnRlcihub2RlLT5iaXRbMV0pICYmCisrCQkJICAgICAgKG5vZGUtPnBhcmVudF9iaXRfcGFja2VkICYgMykgPD0gMSAmJgorKwkJCSAgICAgICFyY3VfYWNjZXNzX3BvaW50ZXIocGFyZW50LT5wZWVyKTsKKysJCWlmIChmcmVlX3BhcmVudCkKKysJCQljaGlsZCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoCisrCQkJCQlwYXJlbnQtPmJpdFshKG5vZGUtPnBhcmVudF9iaXRfcGFja2VkICYgMSldLAorKwkJCQkJbG9ja2RlcF9pc19oZWxkKGxvY2spKTsKKyAJCWNhbGxfcmN1KCZub2RlLT5yY3UsIG5vZGVfZnJlZV9yY3UpOworLQorLQkJLyogVE9ETzogTm90ZSB0aGF0IHdlIGN1cnJlbnRseSBkb24ndCB3YWxrIHVwIGFuZCBkb3duIGluIG9yZGVyIHRvCistCQkgKiBmcmVlIGFueSBwb3RlbnRpYWwgZmlsbGVyIG5vZGVzLiBUaGlzIG1lYW5zIHRoYXQgdGhpcyBmdW5jdGlvbgorLQkJICogZG9lc24ndCBmcmVlIHVwIGFzIG11Y2ggYXMgaXQgY291bGQsIHdoaWNoIGNvdWxkIGJlIHJldmlzaXRlZAorLQkJICogYXQgc29tZSBwb2ludC4KKy0JCSAqLworKwkJaWYgKCFmcmVlX3BhcmVudCkKKysJCQljb250aW51ZTsKKysJCWlmIChjaGlsZCkKKysJCQljaGlsZC0+cGFyZW50X2JpdF9wYWNrZWQgPSBwYXJlbnQtPnBhcmVudF9iaXRfcGFja2VkOworKwkJKihzdHJ1Y3QgYWxsb3dlZGlwc19ub2RlICoqKShwYXJlbnQtPnBhcmVudF9iaXRfcGFja2VkICYgfjNVTCkgPSBjaGlsZDsKKysJCWNhbGxfcmN1KCZwYXJlbnQtPnJjdSwgbm9kZV9mcmVlX3JjdSk7CisgCX0KKyB9CisgCistLS0gYS9kcml2ZXJzL25ldC93aXJlZ3VhcmQvYWxsb3dlZGlwcy5oCisrKysgYi9kcml2ZXJzL25ldC93aXJlZ3VhcmQvYWxsb3dlZGlwcy5oCitAQCAtMTksNyArMTksNyBAQCBzdHJ1Y3QgYWxsb3dlZGlwc19ub2RlIHsKKyAJdTggYml0c1sxNl0gX19hbGlnbmVkKF9fYWxpZ25vZih1NjQpKTsKKyAKKyAJLyogS2VlcCByYXJlbHkgdXNlZCBtZW1iZXJzIGF0IGJvdHRvbSB0byBiZSBiZXlvbmQgY2FjaGUgbGluZS4gKi8KKy0Jc3RydWN0IGFsbG93ZWRpcHNfbm9kZSAqX19yY3UgKnBhcmVudF9iaXQ7CisrCXVuc2lnbmVkIGxvbmcgcGFyZW50X2JpdF9wYWNrZWQ7CisgCXVuaW9uIHsKKyAJCXN0cnVjdCBsaXN0X2hlYWQgcGVlcl9saXN0OworIAkJc3RydWN0IHJjdV9oZWFkIHJjdTsKK0BAIC0zMCw3ICszMCw3IEBAIHN0cnVjdCBhbGxvd2VkaXBzIHsKKyAJc3RydWN0IGFsbG93ZWRpcHNfbm9kZSBfX3JjdSAqcm9vdDQ7CisgCXN0cnVjdCBhbGxvd2VkaXBzX25vZGUgX19yY3UgKnJvb3Q2OworIAl1NjQgc2VxOworLX07CisrfSBfX2FsaWduZWQoNCk7IC8qIFdlIHBhY2sgdGhlIGxvd2VyIDIgYml0cyBvZiAmcm9vdCwgYnV0IG02OGsgb25seSBnaXZlcyAxNi1iaXQgYWxpZ25tZW50LiAqLworIAorIHZvaWQgd2dfYWxsb3dlZGlwc19pbml0KHN0cnVjdCBhbGxvd2VkaXBzICp0YWJsZSk7Cisgdm9pZCB3Z19hbGxvd2VkaXBzX2ZyZWUoc3RydWN0IGFsbG93ZWRpcHMgKnRhYmxlLCBzdHJ1Y3QgbXV0ZXggKm11dGV4KTsKKy0tLSBhL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9hbGxvd2VkaXBzLmMKKysrKyBiL2RyaXZlcnMvbmV0L3dpcmVndWFyZC9zZWxmdGVzdC9hbGxvd2VkaXBzLmMKK0BAIC0xOSwzMiArMTksMjIgQEAKKyAKKyAjaW5jbHVkZSA8bGludXgvc2lwaGFzaC5oPgorIAorLXN0YXRpYyBfX2luaXQgdm9pZCBzd2FwX2VuZGlhbl9hbmRfYXBwbHlfY2lkcih1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCB1OCBiaXRzLAorLQkJCQkJICAgICAgdTggY2lkcikKKy17CistCXN3YXBfZW5kaWFuKGRzdCwgc3JjLCBiaXRzKTsKKy0JbWVtc2V0KGRzdCArIChjaWRyICsgNykgLyA4LCAwLCBiaXRzIC8gOCAtIChjaWRyICsgNykgLyA4KTsKKy0JaWYgKGNpZHIpCistCQlkc3RbKGNpZHIgKyA3KSAvIDggLSAxXSAmPSB+MFUgPDwgKCg4IC0gKGNpZHIgJSA4KSkgJSA4KTsKKy19CistCisgc3RhdGljIF9faW5pdCB2b2lkIHByaW50X25vZGUoc3RydWN0IGFsbG93ZWRpcHNfbm9kZSAqbm9kZSwgdTggYml0cykKKyB7CisgCWNoYXIgKmZtdF9jb25uZWN0aW9uID0gS0VSTl9ERUJVRyAiXHRcIiVwLyVkXCIgLT4gXCIlcC8lZFwiO1xuIjsKKy0JY2hhciAqZm10X2RlY2xhcmF0aW9uID0gS0VSTl9ERUJVRworLQkJIlx0XCIlcC8lZFwiW3N0eWxlPSVzLCBjb2xvcj1cIiMlMDZ4XCJdO1xuIjsKKysJY2hhciAqZm10X2RlY2xhcmF0aW9uID0gS0VSTl9ERUJVRyAiXHRcIiVwLyVkXCJbc3R5bGU9JXMsIGNvbG9yPVwiIyUwNnhcIl07XG4iOworKwl1OCBpcDFbMTZdLCBpcDJbMTZdLCBjaWRyMSwgY2lkcjI7CisgCWNoYXIgKnN0eWxlID0gImRvdHRlZCI7CistCXU4IGlwMVsxNl0sIGlwMlsxNl07CisgCXUzMiBjb2xvciA9IDA7CisgCisrCWlmIChub2RlID09IE5VTEwpCisrCQlyZXR1cm47CisgCWlmIChiaXRzID09IDMyKSB7CisgCQlmbXRfY29ubmVjdGlvbiA9IEtFUk5fREVCVUcgIlx0XCIlcEk0LyVkXCIgLT4gXCIlcEk0LyVkXCI7XG4iOworLQkJZm10X2RlY2xhcmF0aW9uID0gS0VSTl9ERUJVRworLQkJCSJcdFwiJXBJNC8lZFwiW3N0eWxlPSVzLCBjb2xvcj1cIiMlMDZ4XCJdO1xuIjsKKysJCWZtdF9kZWNsYXJhdGlvbiA9IEtFUk5fREVCVUcgIlx0XCIlcEk0LyVkXCJbc3R5bGU9JXMsIGNvbG9yPVwiIyUwNnhcIl07XG4iOworIAl9IGVsc2UgaWYgKGJpdHMgPT0gMTI4KSB7CisgCQlmbXRfY29ubmVjdGlvbiA9IEtFUk5fREVCVUcgIlx0XCIlcEk2LyVkXCIgLT4gXCIlcEk2LyVkXCI7XG4iOworLQkJZm10X2RlY2xhcmF0aW9uID0gS0VSTl9ERUJVRworLQkJCSJcdFwiJXBJNi8lZFwiW3N0eWxlPSVzLCBjb2xvcj1cIiMlMDZ4XCJdO1xuIjsKKysJCWZtdF9kZWNsYXJhdGlvbiA9IEtFUk5fREVCVUcgIlx0XCIlcEk2LyVkXCJbc3R5bGU9JXMsIGNvbG9yPVwiIyUwNnhcIl07XG4iOworIAl9CisgCWlmIChub2RlLT5wZWVyKSB7CisgCQloc2lwaGFzaF9rZXlfdCBrZXkgPSB7IHsgMCB9IH07CitAQCAtNTUsMjQgKzQ1LDIwIEBAIHN0YXRpYyBfX2luaXQgdm9pZCBwcmludF9ub2RlKHN0cnVjdCBhbGwKKyAJCQloc2lwaGFzaF8xdTMyKDB4YWJhZDFkZWEsICZrZXkpICUgMjAwOworIAkJc3R5bGUgPSAiYm9sZCI7CisgCX0KKy0Jc3dhcF9lbmRpYW5fYW5kX2FwcGx5X2NpZHIoaXAxLCBub2RlLT5iaXRzLCBiaXRzLCBub2RlLT5jaWRyKTsKKy0JcHJpbnRrKGZtdF9kZWNsYXJhdGlvbiwgaXAxLCBub2RlLT5jaWRyLCBzdHlsZSwgY29sb3IpOworKwl3Z19hbGxvd2VkaXBzX3JlYWRfbm9kZShub2RlLCBpcDEsICZjaWRyMSk7CisrCXByaW50ayhmbXRfZGVjbGFyYXRpb24sIGlwMSwgY2lkcjEsIHN0eWxlLCBjb2xvcik7CisgCWlmIChub2RlLT5iaXRbMF0pIHsKKy0JCXN3YXBfZW5kaWFuX2FuZF9hcHBseV9jaWRyKGlwMiwKKy0JCQkJcmN1X2RlcmVmZXJlbmNlX3Jhdyhub2RlLT5iaXRbMF0pLT5iaXRzLCBiaXRzLAorLQkJCQlub2RlLT5jaWRyKTsKKy0JCXByaW50ayhmbXRfY29ubmVjdGlvbiwgaXAxLCBub2RlLT5jaWRyLCBpcDIsCistCQkgICAgICAgcmN1X2RlcmVmZXJlbmNlX3Jhdyhub2RlLT5iaXRbMF0pLT5jaWRyKTsKKy0JCXByaW50X25vZGUocmN1X2RlcmVmZXJlbmNlX3Jhdyhub2RlLT5iaXRbMF0pLCBiaXRzKTsKKysJCXdnX2FsbG93ZWRpcHNfcmVhZF9ub2RlKHJjdV9kZXJlZmVyZW5jZV9yYXcobm9kZS0+Yml0WzBdKSwgaXAyLCAmY2lkcjIpOworKwkJcHJpbnRrKGZtdF9jb25uZWN0aW9uLCBpcDEsIGNpZHIxLCBpcDIsIGNpZHIyKTsKKyAJfQorIAlpZiAobm9kZS0+Yml0WzFdKSB7CistCQlzd2FwX2VuZGlhbl9hbmRfYXBwbHlfY2lkcihpcDIsCistCQkJCXJjdV9kZXJlZmVyZW5jZV9yYXcobm9kZS0+Yml0WzFdKS0+Yml0cywKKy0JCQkJYml0cywgbm9kZS0+Y2lkcik7CistCQlwcmludGsoZm10X2Nvbm5lY3Rpb24sIGlwMSwgbm9kZS0+Y2lkciwgaXAyLAorLQkJICAgICAgIHJjdV9kZXJlZmVyZW5jZV9yYXcobm9kZS0+Yml0WzFdKS0+Y2lkcik7CistCQlwcmludF9ub2RlKHJjdV9kZXJlZmVyZW5jZV9yYXcobm9kZS0+Yml0WzFdKSwgYml0cyk7CisrCQl3Z19hbGxvd2VkaXBzX3JlYWRfbm9kZShyY3VfZGVyZWZlcmVuY2VfcmF3KG5vZGUtPmJpdFsxXSksIGlwMiwgJmNpZHIyKTsKKysJCXByaW50ayhmbXRfY29ubmVjdGlvbiwgaXAxLCBjaWRyMSwgaXAyLCBjaWRyMik7CisgCX0KKysJaWYgKG5vZGUtPmJpdFswXSkKKysJCXByaW50X25vZGUocmN1X2RlcmVmZXJlbmNlX3Jhdyhub2RlLT5iaXRbMF0pLCBiaXRzKTsKKysJaWYgKG5vZGUtPmJpdFsxXSkKKysJCXByaW50X25vZGUocmN1X2RlcmVmZXJlbmNlX3Jhdyhub2RlLT5iaXRbMV0pLCBiaXRzKTsKKyB9CisgCisgc3RhdGljIF9faW5pdCB2b2lkIHByaW50X3RyZWUoc3RydWN0IGFsbG93ZWRpcHNfbm9kZSBfX3JjdSAqdG9wLCB1OCBiaXRzKQorQEAgLTEyMSw4ICsxMDcsOCBAQCBzdGF0aWMgX19pbml0IGlubGluZSB1bmlvbiBuZl9pbmV0X2FkZHIKKyB7CisgCXVuaW9uIG5mX2luZXRfYWRkciBtYXNrOworIAorLQltZW1zZXQoJm1hc2ssIDB4MDAsIDEyOCAvIDgpOworLQltZW1zZXQoJm1hc2ssIDB4ZmYsIGNpZHIgLyA4KTsKKysJbWVtc2V0KCZtYXNrLCAwLCBzaXplb2YobWFzaykpOworKwltZW1zZXQoJm1hc2suYWxsLCAweGZmLCBjaWRyIC8gOCk7CisgCWlmIChjaWRyICUgMzIpCisgCQltYXNrLmFsbFtjaWRyIC8gMzJdID0gKF9fZm9yY2UgdTMyKWh0b25sKAorIAkJCSgweEZGRkZGRkZGVUwgPDwgKDMyIC0gKGNpZHIgJSAzMikpKSAmIDB4RkZGRkZGRkZVTCk7CitAQCAtMTQ5LDQyICsxMzUsMzYgQEAgaG9ycmlibGVfbWFza19zZWxmKHN0cnVjdCBob3JyaWJsZV9hbGxvdworIH0KKyAKKyBzdGF0aWMgX19pbml0IGlubGluZSBib29sCistaG9ycmlibGVfbWF0Y2hfdjQoY29uc3Qgc3RydWN0IGhvcnJpYmxlX2FsbG93ZWRpcHNfbm9kZSAqbm9kZSwKKy0JCSAgc3RydWN0IGluX2FkZHIgKmlwKQorK2hvcnJpYmxlX21hdGNoX3Y0KGNvbnN0IHN0cnVjdCBob3JyaWJsZV9hbGxvd2VkaXBzX25vZGUgKm5vZGUsIHN0cnVjdCBpbl9hZGRyICppcCkKKyB7CisgCXJldHVybiAoaXAtPnNfYWRkciAmIG5vZGUtPm1hc2suaXApID09IG5vZGUtPmlwLmlwOworIH0KKyAKKyBzdGF0aWMgX19pbml0IGlubGluZSBib29sCistaG9ycmlibGVfbWF0Y2hfdjYoY29uc3Qgc3RydWN0IGhvcnJpYmxlX2FsbG93ZWRpcHNfbm9kZSAqbm9kZSwKKy0JCSAgc3RydWN0IGluNl9hZGRyICppcCkKKytob3JyaWJsZV9tYXRjaF92Nihjb25zdCBzdHJ1Y3QgaG9ycmlibGVfYWxsb3dlZGlwc19ub2RlICpub2RlLCBzdHJ1Y3QgaW42X2FkZHIgKmlwKQorIHsKKy0JcmV0dXJuIChpcC0+aW42X3UudTZfYWRkcjMyWzBdICYgbm9kZS0+bWFzay5pcDZbMF0pID09CistCQkgICAgICAgbm9kZS0+aXAuaXA2WzBdICYmCistCSAgICAgICAoaXAtPmluNl91LnU2X2FkZHIzMlsxXSAmIG5vZGUtPm1hc2suaXA2WzFdKSA9PQorLQkJICAgICAgIG5vZGUtPmlwLmlwNlsxXSAmJgorLQkgICAgICAgKGlwLT5pbjZfdS51Nl9hZGRyMzJbMl0gJiBub2RlLT5tYXNrLmlwNlsyXSkgPT0KKy0JCSAgICAgICBub2RlLT5pcC5pcDZbMl0gJiYKKysJcmV0dXJuIChpcC0+aW42X3UudTZfYWRkcjMyWzBdICYgbm9kZS0+bWFzay5pcDZbMF0pID09IG5vZGUtPmlwLmlwNlswXSAmJgorKwkgICAgICAgKGlwLT5pbjZfdS51Nl9hZGRyMzJbMV0gJiBub2RlLT5tYXNrLmlwNlsxXSkgPT0gbm9kZS0+aXAuaXA2WzFdICYmCisrCSAgICAgICAoaXAtPmluNl91LnU2X2FkZHIzMlsyXSAmIG5vZGUtPm1hc2suaXA2WzJdKSA9PSBub2RlLT5pcC5pcDZbMl0gJiYKKyAJICAgICAgIChpcC0+aW42X3UudTZfYWRkcjMyWzNdICYgbm9kZS0+bWFzay5pcDZbM10pID09IG5vZGUtPmlwLmlwNlszXTsKKyB9CisgCisgc3RhdGljIF9faW5pdCB2b2lkCistaG9ycmlibGVfaW5zZXJ0X29yZGVyZWQoc3RydWN0IGhvcnJpYmxlX2FsbG93ZWRpcHMgKnRhYmxlLAorLQkJCXN0cnVjdCBob3JyaWJsZV9hbGxvd2VkaXBzX25vZGUgKm5vZGUpCisraG9ycmlibGVfaW5zZXJ0X29yZGVyZWQoc3RydWN0IGhvcnJpYmxlX2FsbG93ZWRpcHMgKnRhYmxlLCBzdHJ1Y3QgaG9ycmlibGVfYWxsb3dlZGlwc19ub2RlICpub2RlKQorIHsKKyAJc3RydWN0IGhvcnJpYmxlX2FsbG93ZWRpcHNfbm9kZSAqb3RoZXIgPSBOVUxMLCAqd2hlcmUgPSBOVUxMOworIAl1OCBteV9jaWRyID0gaG9ycmlibGVfbWFza190b19jaWRyKG5vZGUtPm1hc2spOworIAorIAlobGlzdF9mb3JfZWFjaF9lbnRyeShvdGhlciwgJnRhYmxlLT5oZWFkLCB0YWJsZSkgeworLQkJaWYgKCFtZW1jbXAoJm90aGVyLT5tYXNrLCAmbm9kZS0+bWFzaywKKy0JCQkgICAgc2l6ZW9mKHVuaW9uIG5mX2luZXRfYWRkcikpICYmCistCQkgICAgIW1lbWNtcCgmb3RoZXItPmlwLCAmbm9kZS0+aXAsCistCQkJICAgIHNpemVvZih1bmlvbiBuZl9pbmV0X2FkZHIpKSAmJgorLQkJICAgIG90aGVyLT5pcF92ZXJzaW9uID09IG5vZGUtPmlwX3ZlcnNpb24pIHsKKysJCWlmIChvdGhlci0+aXBfdmVyc2lvbiA9PSBub2RlLT5pcF92ZXJzaW9uICYmCisrCQkgICAgIW1lbWNtcCgmb3RoZXItPm1hc2ssICZub2RlLT5tYXNrLCBzaXplb2YodW5pb24gbmZfaW5ldF9hZGRyKSkgJiYKKysJCSAgICAhbWVtY21wKCZvdGhlci0+aXAsICZub2RlLT5pcCwgc2l6ZW9mKHVuaW9uIG5mX2luZXRfYWRkcikpKSB7CisgCQkJb3RoZXItPnZhbHVlID0gbm9kZS0+dmFsdWU7CisgCQkJa2ZyZWUobm9kZSk7CisgCQkJcmV0dXJuOworIAkJfQorKwl9CisrCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KG90aGVyLCAmdGFibGUtPmhlYWQsIHRhYmxlKSB7CisgCQl3aGVyZSA9IG90aGVyOworIAkJaWYgKGhvcnJpYmxlX21hc2tfdG9fY2lkcihvdGhlci0+bWFzaykgPD0gbXlfY2lkcikKKyAJCQlicmVhazsKK0BAIC0yMDEsOCArMTgxLDcgQEAgc3RhdGljIF9faW5pdCBpbnQKKyBob3JyaWJsZV9hbGxvd2VkaXBzX2luc2VydF92NChzdHJ1Y3QgaG9ycmlibGVfYWxsb3dlZGlwcyAqdGFibGUsCisgCQkJICAgICAgc3RydWN0IGluX2FkZHIgKmlwLCB1OCBjaWRyLCB2b2lkICp2YWx1ZSkKKyB7CistCXN0cnVjdCBob3JyaWJsZV9hbGxvd2VkaXBzX25vZGUgKm5vZGUgPSBremFsbG9jKHNpemVvZigqbm9kZSksCistCQkJCQkJCUdGUF9LRVJORUwpOworKwlzdHJ1Y3QgaG9ycmlibGVfYWxsb3dlZGlwc19ub2RlICpub2RlID0ga3phbGxvYyhzaXplb2YoKm5vZGUpLCBHRlBfS0VSTkVMKTsKKyAKKyAJaWYgKHVubGlrZWx5KCFub2RlKSkKKyAJCXJldHVybiAtRU5PTUVNOworQEAgLTIxOSw4ICsxOTgsNyBAQCBzdGF0aWMgX19pbml0IGludAorIGhvcnJpYmxlX2FsbG93ZWRpcHNfaW5zZXJ0X3Y2KHN0cnVjdCBob3JyaWJsZV9hbGxvd2VkaXBzICp0YWJsZSwKKyAJCQkgICAgICBzdHJ1Y3QgaW42X2FkZHIgKmlwLCB1OCBjaWRyLCB2b2lkICp2YWx1ZSkKKyB7CistCXN0cnVjdCBob3JyaWJsZV9hbGxvd2VkaXBzX25vZGUgKm5vZGUgPSBremFsbG9jKHNpemVvZigqbm9kZSksCistCQkJCQkJCUdGUF9LRVJORUwpOworKwlzdHJ1Y3QgaG9ycmlibGVfYWxsb3dlZGlwc19ub2RlICpub2RlID0ga3phbGxvYyhzaXplb2YoKm5vZGUpLCBHRlBfS0VSTkVMKTsKKyAKKyAJaWYgKHVubGlrZWx5KCFub2RlKSkKKyAJCXJldHVybiAtRU5PTUVNOworQEAgLTIzNCwzOSArMjEyLDQzIEBAIGhvcnJpYmxlX2FsbG93ZWRpcHNfaW5zZXJ0X3Y2KHN0cnVjdCBob3IKKyB9CisgCisgc3RhdGljIF9faW5pdCB2b2lkICoKKy1ob3JyaWJsZV9hbGxvd2VkaXBzX2xvb2t1cF92NChzdHJ1Y3QgaG9ycmlibGVfYWxsb3dlZGlwcyAqdGFibGUsCistCQkJICAgICAgc3RydWN0IGluX2FkZHIgKmlwKQorK2hvcnJpYmxlX2FsbG93ZWRpcHNfbG9va3VwX3Y0KHN0cnVjdCBob3JyaWJsZV9hbGxvd2VkaXBzICp0YWJsZSwgc3RydWN0IGluX2FkZHIgKmlwKQorIHsKKyAJc3RydWN0IGhvcnJpYmxlX2FsbG93ZWRpcHNfbm9kZSAqbm9kZTsKKy0Jdm9pZCAqcmV0ID0gTlVMTDsKKyAKKyAJaGxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgJnRhYmxlLT5oZWFkLCB0YWJsZSkgeworLQkJaWYgKG5vZGUtPmlwX3ZlcnNpb24gIT0gNCkKKy0JCQljb250aW51ZTsKKy0JCWlmIChob3JyaWJsZV9tYXRjaF92NChub2RlLCBpcCkpIHsKKy0JCQlyZXQgPSBub2RlLT52YWx1ZTsKKy0JCQlicmVhazsKKy0JCX0KKysJCWlmIChub2RlLT5pcF92ZXJzaW9uID09IDQgJiYgaG9ycmlibGVfbWF0Y2hfdjQobm9kZSwgaXApKQorKwkJCXJldHVybiBub2RlLT52YWx1ZTsKKyAJfQorLQlyZXR1cm4gcmV0OworKwlyZXR1cm4gTlVMTDsKKyB9CisgCisgc3RhdGljIF9faW5pdCB2b2lkICoKKy1ob3JyaWJsZV9hbGxvd2VkaXBzX2xvb2t1cF92NihzdHJ1Y3QgaG9ycmlibGVfYWxsb3dlZGlwcyAqdGFibGUsCistCQkJICAgICAgc3RydWN0IGluNl9hZGRyICppcCkKKytob3JyaWJsZV9hbGxvd2VkaXBzX2xvb2t1cF92NihzdHJ1Y3QgaG9ycmlibGVfYWxsb3dlZGlwcyAqdGFibGUsIHN0cnVjdCBpbjZfYWRkciAqaXApCisgeworIAlzdHJ1Y3QgaG9ycmlibGVfYWxsb3dlZGlwc19ub2RlICpub2RlOworLQl2b2lkICpyZXQgPSBOVUxMOworIAorIAlobGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCAmdGFibGUtPmhlYWQsIHRhYmxlKSB7CistCQlpZiAobm9kZS0+aXBfdmVyc2lvbiAhPSA2KQorKwkJaWYgKG5vZGUtPmlwX3ZlcnNpb24gPT0gNiAmJiBob3JyaWJsZV9tYXRjaF92Nihub2RlLCBpcCkpCisrCQkJcmV0dXJuIG5vZGUtPnZhbHVlOworKwl9CisrCXJldHVybiBOVUxMOworK30KKysKKysKKytzdGF0aWMgX19pbml0IHZvaWQKKytob3JyaWJsZV9hbGxvd2VkaXBzX3JlbW92ZV9ieV92YWx1ZShzdHJ1Y3QgaG9ycmlibGVfYWxsb3dlZGlwcyAqdGFibGUsIHZvaWQgKnZhbHVlKQorK3sKKysJc3RydWN0IGhvcnJpYmxlX2FsbG93ZWRpcHNfbm9kZSAqbm9kZTsKKysJc3RydWN0IGhsaXN0X25vZGUgKmg7CisrCisrCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobm9kZSwgaCwgJnRhYmxlLT5oZWFkLCB0YWJsZSkgeworKwkJaWYgKG5vZGUtPnZhbHVlICE9IHZhbHVlKQorIAkJCWNvbnRpbnVlOworLQkJaWYgKGhvcnJpYmxlX21hdGNoX3Y2KG5vZGUsIGlwKSkgeworLQkJCXJldCA9IG5vZGUtPnZhbHVlOworLQkJCWJyZWFrOworLQkJfQorKwkJaGxpc3RfZGVsKCZub2RlLT50YWJsZSk7CisrCQlrZnJlZShub2RlKTsKKyAJfQorLQlyZXR1cm4gcmV0OworKworIH0KKyAKKyBzdGF0aWMgX19pbml0IGJvb2wgcmFuZG9taXplZF90ZXN0KHZvaWQpCitAQCAtMzk3LDIzICszNzksMzMgQEAgc3RhdGljIF9faW5pdCBib29sIHJhbmRvbWl6ZWRfdGVzdCh2b2lkKQorIAkJcHJpbnRfdHJlZSh0LnJvb3Q2LCAxMjgpOworIAl9CisgCistCWZvciAoaSA9IDA7IGkgPCBOVU1fUVVFUklFUzsgKytpKSB7CistCQlwcmFuZG9tX2J5dGVzKGlwLCA0KTsKKy0JCWlmIChsb29rdXAodC5yb290NCwgMzIsIGlwKSAhPQorLQkJICAgIGhvcnJpYmxlX2FsbG93ZWRpcHNfbG9va3VwX3Y0KCZoLCAoc3RydWN0IGluX2FkZHIgKilpcCkpIHsKKy0JCQlwcl9lcnIoImFsbG93ZWRpcHMgcmFuZG9tIHNlbGYtdGVzdDogRkFJTFxuIik7CistCQkJZ290byBmcmVlOworKwlmb3IgKGogPSAwOzsgKytqKSB7CisrCQlmb3IgKGkgPSAwOyBpIDwgTlVNX1FVRVJJRVM7ICsraSkgeworKwkJCXByYW5kb21fYnl0ZXMoaXAsIDQpOworKwkJCWlmIChsb29rdXAodC5yb290NCwgMzIsIGlwKSAhPSBob3JyaWJsZV9hbGxvd2VkaXBzX2xvb2t1cF92NCgmaCwgKHN0cnVjdCBpbl9hZGRyICopaXApKSB7CisrCQkJCWhvcnJpYmxlX2FsbG93ZWRpcHNfbG9va3VwX3Y0KCZoLCAoc3RydWN0IGluX2FkZHIgKilpcCk7CisrCQkJCXByX2VycigiYWxsb3dlZGlwcyByYW5kb20gdjQgc2VsZi10ZXN0OiBGQUlMXG4iKTsKKysJCQkJZ290byBmcmVlOworKwkJCX0KKysJCQlwcmFuZG9tX2J5dGVzKGlwLCAxNik7CisrCQkJaWYgKGxvb2t1cCh0LnJvb3Q2LCAxMjgsIGlwKSAhPSBob3JyaWJsZV9hbGxvd2VkaXBzX2xvb2t1cF92NigmaCwgKHN0cnVjdCBpbjZfYWRkciAqKWlwKSkgeworKwkJCQlwcl9lcnIoImFsbG93ZWRpcHMgcmFuZG9tIHY2IHNlbGYtdGVzdDogRkFJTFxuIik7CisrCQkJCWdvdG8gZnJlZTsKKysJCQl9CisgCQl9CisrCQlpZiAoaiA+PSBOVU1fUEVFUlMpCisrCQkJYnJlYWs7CisrCQltdXRleF9sb2NrKCZtdXRleCk7CisrCQl3Z19hbGxvd2VkaXBzX3JlbW92ZV9ieV9wZWVyKCZ0LCBwZWVyc1tqXSwgJm11dGV4KTsKKysJCW11dGV4X3VubG9jaygmbXV0ZXgpOworKwkJaG9ycmlibGVfYWxsb3dlZGlwc19yZW1vdmVfYnlfdmFsdWUoJmgsIHBlZXJzW2pdKTsKKyAJfQorIAorLQlmb3IgKGkgPSAwOyBpIDwgTlVNX1FVRVJJRVM7ICsraSkgeworLQkJcHJhbmRvbV9ieXRlcyhpcCwgMTYpOworLQkJaWYgKGxvb2t1cCh0LnJvb3Q2LCAxMjgsIGlwKSAhPQorLQkJICAgIGhvcnJpYmxlX2FsbG93ZWRpcHNfbG9va3VwX3Y2KCZoLCAoc3RydWN0IGluNl9hZGRyICopaXApKSB7CistCQkJcHJfZXJyKCJhbGxvd2VkaXBzIHJhbmRvbSBzZWxmLXRlc3Q6IEZBSUxcbiIpOworLQkJCWdvdG8gZnJlZTsKKy0JCX0KKysJaWYgKHQucm9vdDQgfHwgdC5yb290NikgeworKwkJcHJfZXJyKCJhbGxvd2VkaXBzIHJhbmRvbSBzZWxmLXRlc3QgcmVtb3ZhbDogRkFJTFxuIik7CisrCQlnb3RvIGZyZWU7CisgCX0KKysKKyAJcmV0ID0gdHJ1ZTsKKyAKKyBmcmVlOgpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzMwMC1NSVBTLUV4Y2x1ZGUtbW9yZS1kc2VtdWwtY29kZS13aGVuLUNPTkZJR19NSVBTX0ZQX1NVLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzMwMC1NSVBTLUV4Y2x1ZGUtbW9yZS1kc2VtdWwtY29kZS13aGVuLUNPTkZJR19NSVBTX0ZQX1NVLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiYzU4ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMzAwLU1JUFMtRXhjbHVkZS1tb3JlLWRzZW11bC1jb2RlLXdoZW4tQ09ORklHX01JUFNfRlBfU1UucGF0Y2gKQEAgLTAsMCArMSwxMzQgQEAKK0Zyb20gZDk2YzMxNTdmOWNhMTc3NzI3ZmJhZDk2MGZjZjZmNTJmMTQ1ZjQ3MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFlvdXNvbmcgWmhvdSA8eXN6aG91NHRlY2hAZ21haWwuY29tPgorRGF0ZTogVGh1LCA5IEphbiAyMDIwIDExOjMzOjE5ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIE1JUFM6IEV4Y2x1ZGUgbW9yZSBkc2VtdWwgY29kZSB3aGVuIENPTkZJR19NSVBTX0ZQX1NVUFBPUlQ9bgorCitUaGlzIGZ1cnRoZXJzIHdoYXQgY29tbWl0IDQyYjEwODE1ZDU1OSAoIk1JUFM6IERvbid0IGNvbXBpbGUgbWF0aC1lbXUKK3doZW4gQ09ORklHX01JUFNfRlBfU1VQUE9SVD1uIikgaGFzIGRvbmUKKworU2lnbmVkLW9mZi1ieTogWW91c29uZyBaaG91IDx5c3pob3U0dGVjaEBnbWFpbC5jb20+CistLS0KKyBhcmNoL21pcHMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggfCAxMiArKysrKystLS0tLS0KKyBhcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYyAgICAgICAgfCAxMCArKysrKysrKy0tCisgYXJjaC9taXBzL2tlcm5lbC92ZHNvLmMgICAgICAgICAgIHwgMjYgKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDI5IGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQorCistLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAorQEAgLTI1MywxMyArMjUzLDEzIEBAIHN0cnVjdCB0aHJlYWRfc3RydWN0IHsKKyAjaWZkZWYgQ09ORklHX01JUFNfRlBfU1VQUE9SVAorIAkvKiBTYXZlZCBmcHUvZnB1IGVtdWxhdG9yIHN0dWZmLiAqLworIAlzdHJ1Y3QgbWlwc19mcHVfc3RydWN0IGZwdSBGUFVfQUxJR047CistI2VuZGlmCisgCS8qIEFzc2lnbmVkIGJyYW5jaCBkZWxheSBzbG90ICdlbXVsYXRpb24nIGZyYW1lICovCisgCWF0b21pY190IGJkX2VtdV9mcmFtZTsKKyAJLyogUEMgb2YgdGhlIGJyYW5jaCBmcm9tIGEgYnJhbmNoIGRlbGF5IHNsb3QgJ2VtdWxhdGlvbicgKi8KKyAJdW5zaWduZWQgbG9uZyBiZF9lbXVfYnJhbmNoX3BjOworIAkvKiBQQyB0byBjb250aW51ZSBmcm9tIGZvbGxvd2luZyBhIGJyYW5jaCBkZWxheSBzbG90ICdlbXVsYXRpb24nICovCisgCXVuc2lnbmVkIGxvbmcgYmRfZW11X2NvbnRfcGM7CisrI2VuZGlmCisgI2lmZGVmIENPTkZJR19NSVBTX01UX0ZQQUZGCisgCS8qIEVtdWxhdGVkIGluc3RydWN0aW9uIGNvdW50ICovCisgCXVuc2lnbmVkIGxvbmcgZW11bGF0ZWRfZnA7CitAQCAtMzAyLDcgKzMwMiwxMSBAQCBzdHJ1Y3QgdGhyZWFkX3N0cnVjdCB7CisgCQkuZnByCQk9IHt7ezAsfSx9LH0sCQkJXAorIAkJLmZjcjMxCQk9IDAsCQkJCVwKKyAJCS5tc2Fjc3IJCT0gMCwJCQkJXAorLQl9LAorKwl9LAkJCQkJCQlcCisrCS8qIERlbGF5IHNsb3QgZW11bGF0aW9uICovCQkJCVwKKysJLmJkX2VtdV9mcmFtZSA9IEFUT01JQ19JTklUKEJEX0VNVUZSQU1FX05PTkUpLAkJXAorKwkuYmRfZW11X2JyYW5jaF9wYyA9IDAsCQkJCQlcCisrCS5iZF9lbXVfY29udF9wYyA9IDAsCisgI2Vsc2UKKyAjIGRlZmluZSBGUFVfSU5JVAorICNlbmRpZgorQEAgLTMzNCwxMCArMzM4LDYgQEAgc3RydWN0IHRocmVhZF9zdHJ1Y3QgeworIAkgKiBGUFUgYWZmaW5pdHkgc3RhdGUgKG51bGwgaWYgbm90IEZQQUZGKQkJXAorIAkgKi8JCQkJCQkJXAorIAlGUEFGRl9JTklUCQkJCQkJXAorLQkvKiBEZWxheSBzbG90IGVtdWxhdGlvbiAqLwkJCQlcCistCS5iZF9lbXVfZnJhbWUgPSBBVE9NSUNfSU5JVChCRF9FTVVGUkFNRV9OT05FKSwJCVwKKy0JLmJkX2VtdV9icmFuY2hfcGMgPSAwLAkJCQkJXAorLQkuYmRfZW11X2NvbnRfcGMgPSAwLAkJCQkJXAorIAkvKgkJCQkJCQlcCisgCSAqIFNhdmVkIERTUCBzdHVmZgkJCQkJXAorIAkgKi8JCQkJCQkJXAorLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMKKysrKyBiL2FyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jCitAQCAtNzUsNyArNzUsOSBAQCB2b2lkIHN0YXJ0X3RocmVhZChzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MsCisgCWxvc2VfZnB1KDApOworIAljbGVhcl90aHJlYWRfZmxhZyhUSUZfTVNBX0NUWF9MSVZFKTsKKyAJY2xlYXJfdXNlZF9tYXRoKCk7CisrI2lmZGVmIENPTkZJR19NSVBTX0ZQX1NVUFBPUlQKKyAJYXRvbWljX3NldCgmY3VycmVudC0+dGhyZWFkLmJkX2VtdV9mcmFtZSwgQkRfRU1VRlJBTUVfTk9ORSk7CisrI2VuZGlmCisgCWluaXRfZHNwKCk7CisgCXJlZ3MtPmNwMF9lcGMgPSBwYzsKKyAJcmVncy0+cmVnc1syOV0gPSBzcDsKK0BAIC0xNzYsNyArMTc4LDkgQEAgaW50IGNvcHlfdGhyZWFkX3Rscyh1bnNpZ25lZCBsb25nIGNsb25lXworIAljbGVhcl90c2tfdGhyZWFkX2ZsYWcocCwgVElGX0ZQVUJPVU5EKTsKKyAjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfRlBBRkYgKi8KKyAKKysjaWZkZWYgQ09ORklHX01JUFNfRlBfU1VQUE9SVAorIAlhdG9taWNfc2V0KCZwLT50aHJlYWQuYmRfZW11X2ZyYW1lLCBCRF9FTVVGUkFNRV9OT05FKTsKKysjZW5kaWYKKyAKKyAJaWYgKGNsb25lX2ZsYWdzICYgQ0xPTkVfU0VUVExTKQorIAkJdGktPnRwX3ZhbHVlID0gdGxzOworQEAgLTY1MCw4ICs2NTQsMTAgQEAgdW5zaWduZWQgbG9uZyBtaXBzX3N0YWNrX3RvcCh2b2lkKQorIHsKKyAJdW5zaWduZWQgbG9uZyB0b3AgPSBUQVNLX1NJWkUgJiBQQUdFX01BU0s7CisgCistCS8qIE9uZSBwYWdlIGZvciBicmFuY2ggZGVsYXkgc2xvdCAiZW11bGF0aW9uIiAqLworLQl0b3AgLT0gUEFHRV9TSVpFOworKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfTUlQU19GUF9TVVBQT1JUKSkgeworKwkJLyogT25lIHBhZ2UgZm9yIGJyYW5jaCBkZWxheSBzbG90ICJlbXVsYXRpb24iICovCisrCQl0b3AgLT0gUEFHRV9TSVpFOworKwl9CisgCisgCS8qIFNwYWNlIGZvciB0aGUgVkRTTywgZGF0YSBwYWdlICYgR0lDIHVzZXIgcGFnZSAqLworIAl0b3AgLT0gUEFHRV9BTElHTihjdXJyZW50LT50aHJlYWQuYWJpLT52ZHNvLT5zaXplKTsKKy0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdmRzby5jCisrKysgYi9hcmNoL21pcHMva2VybmVsL3Zkc28uYworQEAgLTcxLDEwICs3MSwxMiBAQCBzdWJzeXNfaW5pdGNhbGwoaW5pdF92ZHNvKTsKKyAKKyBzdGF0aWMgdW5zaWduZWQgbG9uZyB2ZHNvX2Jhc2Uodm9pZCkKKyB7CistCXVuc2lnbmVkIGxvbmcgYmFzZTsKKysJdW5zaWduZWQgbG9uZyBiYXNlID0gU1RBQ0tfVE9QOworIAorLQkvKiBTa2lwIHRoZSBkZWxheSBzbG90IGVtdWxhdGlvbiBwYWdlICovCistCWJhc2UgPSBTVEFDS19UT1AgKyBQQUdFX1NJWkU7CisrCWlmIChJU19FTkFCTEVEKENPTkZJR19NSVBTX0ZQX1NVUFBPUlQpKSB7CisrCQkvKiBTa2lwIHRoZSBkZWxheSBzbG90IGVtdWxhdGlvbiBwYWdlICovCisrCQliYXNlICs9IFBBR0VfU0laRTsKKysJfQorIAorIAlpZiAoY3VycmVudC0+ZmxhZ3MgJiBQRl9SQU5ET01JWkUpIHsKKyAJCWJhc2UgKz0gZ2V0X3JhbmRvbV9pbnQoKSAmIChWRFNPX1JBTkRPTUlaRV9TSVpFIC0gMSk7CitAQCAtOTUsMTQgKzk3LDE2IEBAIGludCBhcmNoX3NldHVwX2FkZGl0aW9uYWxfcGFnZXMoc3RydWN0IGwKKyAJaWYgKGRvd25fd3JpdGVfa2lsbGFibGUoJm1tLT5tbWFwX3NlbSkpCisgCQlyZXR1cm4gLUVJTlRSOworIAorLQkvKiBNYXAgZGVsYXkgc2xvdCBlbXVsYXRpb24gcGFnZSAqLworLQliYXNlID0gbW1hcF9yZWdpb24oTlVMTCwgU1RBQ0tfVE9QLCBQQUdFX1NJWkUsCistCQkJICAgVk1fUkVBRCB8IFZNX0VYRUMgfAorLQkJCSAgIFZNX01BWVJFQUQgfCBWTV9NQVlXUklURSB8IFZNX01BWUVYRUMsCistCQkJICAgMCwgTlVMTCk7CistCWlmIChJU19FUlJfVkFMVUUoYmFzZSkpIHsKKy0JCXJldCA9IGJhc2U7CistCQlnb3RvIG91dDsKKysJaWYgKElTX0VOQUJMRUQoQ09ORklHX01JUFNfRlBfU1VQUE9SVCkpIHsKKysJCS8qIE1hcCBkZWxheSBzbG90IGVtdWxhdGlvbiBwYWdlICovCisrCQliYXNlID0gbW1hcF9yZWdpb24oTlVMTCwgU1RBQ0tfVE9QLCBQQUdFX1NJWkUsCisrCQkJCVZNX1JFQUQgfCBWTV9FWEVDIHwKKysJCQkJVk1fTUFZUkVBRCB8IFZNX01BWVdSSVRFIHwgVk1fTUFZRVhFQywKKysJCQkJMCwgTlVMTCk7CisrCQlpZiAoSVNfRVJSX1ZBTFVFKGJhc2UpKSB7CisrCQkJcmV0ID0gYmFzZTsKKysJCQlnb3RvIG91dDsKKysJCX0KKyAJfQorIAorIAkvKgpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzMxMC1taXBzLUtjb25maWctQWRkLUFSQ0hfSEFTX0ZPUlRJRllfU09VUkNFLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzMxMC1taXBzLUtjb25maWctQWRkLUFSQ0hfSEFTX0ZPUlRJRllfU09VUkNFLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMmYxMDMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMzEwLW1pcHMtS2NvbmZpZy1BZGQtQVJDSF9IQVNfRk9SVElGWV9TT1VSQ0UucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSBhOGQyYmIwNTU5YjVmZWZhNTE3M2ZmNGU3NDk2Y2M2MjUwZGIyYzhhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRG1pdHJ5IEtvcm90aW4gPGRrb3JvdGluQHdhdmVjb21wLmNvbT4KK0RhdGU6IFRodSwgMTIgU2VwIDIwMTkgMjI6NTM6NDUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gbWlwczogS2NvbmZpZzogQWRkIEFSQ0hfSEFTX0ZPUlRJRllfU09VUkNFCisKK0ZPUlRJRllfU09VUkNFIGRldGVjdHMgdmFyaW91cyBvdmVyZmxvd3MgYXQgY29tcGlsZSBhbmQgcnVuIHRpbWUuCisoNjk3NGYwYzQ1NTVlICgiaW5jbHVkZS9saW51eC9zdHJpbmcuaDoKK2FkZCB0aGUgb3B0aW9uIG9mIGZvcnRpZmllZCBzdHJpbmcuaCBmdW5jdGlvbnMpCisKK0FSQ0hfSEFTX0ZPUlRJRllfU09VUkNFIG1lYW5zIHRoYXQgdGhlIGFyY2hpdGVjdHVyZSBjYW4gYmUgYnVpbHQgYW5kCitydW4gd2l0aCBDT05GSUdfRk9SVElGWV9TT1VSQ0UuCisKK1NpbmNlIG1pcHMgY2FuIGJlIGJ1aWx0IGFuZCBydW4gd2l0aCB0aGF0IGZsYWcsCitzZWxlY3QgQVJDSF9IQVNfRk9SVElGWV9TT1VSQ0UgYXMgZGVmYXVsdC4KKworU2lnbmVkLW9mZi1ieTogRG1pdHJ5IEtvcm90aW4gPGRrb3JvdGluQHdhdmVjb21wLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFBhdWwgQnVydG9uIDxwYXVsLmJ1cnRvbkBtaXBzLmNvbT4KK0NjOiBsaW51eC1taXBzQHZnZXIua2VybmVsLm9yZworLS0tCisgYXJjaC9taXBzL0tjb25maWcgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworLS0tIGEvYXJjaC9taXBzL0tjb25maWcKKysrKyBiL2FyY2gvbWlwcy9LY29uZmlnCitAQCAtNyw2ICs3LDcgQEAgY29uZmlnIE1JUFMKKyAJc2VsZWN0IEFSQ0hfQ0xPQ0tTT1VSQ0VfREFUQQorIAlzZWxlY3QgQVJDSF9IQVNfVElDS19CUk9BRENBU1QgaWYgR0VORVJJQ19DTE9DS0VWRU5UU19CUk9BRENBU1QKKyAJc2VsZWN0IEFSQ0hfSEFTX1VCU0FOX1NBTklUSVpFX0FMTAorKwlzZWxlY3QgQVJDSF9IQVNfRk9SVElGWV9TT1VSQ0UKKyAJc2VsZWN0IEFSQ0hfU1VQUE9SVFNfVVBST0JFUworIAlzZWxlY3QgQVJDSF9VU0VfQlVJTFRJTl9CU1dBUAorIAlzZWxlY3QgQVJDSF9VU0VfQ01QWENIR19MT0NLUkVGIGlmIDY0QklUCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMzEwLXY1LjYtbWlwcy12ZHNvLWZpeC1qYWxyLXQ5LWNyYXNoLWluLXZkc28tY29kZS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8zMTAtdjUuNi1taXBzLXZkc28tZml4LWphbHItdDktY3Jhc2gtaW4tdmRzby1jb2RlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZWVmNGIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMzEwLXY1LjYtbWlwcy12ZHNvLWZpeC1qYWxyLXQ5LWNyYXNoLWluLXZkc28tY29kZS5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIGQzZjcwM2M0MzU5ZmYwNjYxOWIyMzIyYjkxZjY5NzEwNDUzZTZiNmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBWaWN0b3IgS2FtZW5za3kgPGthbWVuc2t5QGNpc2NvLmNvbT4KK0RhdGU6IFR1ZSwgMTEgRmViIDIwMjAgMTE6MjQ6MzMgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gbWlwczogdmRzbzogZml4ICdqYWxyIHQ5JyBjcmFzaCBpbiB2ZHNvIGNvZGUKKworT2JzZXJ2ZWQgdGhhdCB3aGVuIGtlcm5lbCBpcyBidWlsdCB3aXRoIFlvY3RvIG1pcHM2NC1wb2t5LWxpbnV4LWdjYywKK2FuZCBtaXBzNjQtcG9reS1saW51eC1nbnVuMzItZ2NjIHRvb2xjaGFpbiwgcmVzdWx0aW5nIHZkc28gY29udGFpbnMKKydqYWxyIHQ5JyBpbnN0cnVjdGlvbnMgaW4gaXRzIGNvZGUgYW5kIHNpbmNlIGluIHZkc28gY2FzZSBub2JvZHkKK3NldHMgR09UIHRhYmxlIGNvZGUgY3Jhc2hlcyB3aGVuIGluc3RydWN0aW9uIHJlYWNoZWQuIE9uIG90aGVyIGhhbmQKK29ic2VydmVkIHRoYXQgd2hlbiBrZXJuZWwgaXMgYnVpbHQgbWlwcy1wb2t5LWxpbnV4LWdjYyB0b29sY2hhaW4sIHRoZQorc2FtZSAnamFsciB0OScgaW5zdHJ1Y3Rpb24gYXJlIHJlcGxhY2VkIHdpdGggUEMgcmVsYXRpdmUgZnVuY3Rpb24KK2NhbGxzIHVzaW5nICdiYWwnIGluc3RydWN0aW9ucy4KKworVGhlIGRpZmZlcmVuY2UgYm9pbHMgZG93biB0byAtbXJlbGF4LXBpYy1jYWxscyBhbmQgLW1leHBsaWNpdC1yZWxvY3MKK2djYyBvcHRpb25zIHRoYXQgZ2V0cyBkaWZmZXJlbnQgZGVmYXVsdCB2YWx1ZXMgZGVwZW5kaW5nIG9uIGdjYwordGFyZ2V0IHRyaXBsZXRzIGFuZCBjb3JyZXNwb25kaW5nIGJpbnV0aWxzLiAtbXJlbGF4LXBpYy1jYWxscyBnb3QKK2VuYWJsZWQgYnkgZGVmYXVsdCBvbmx5IGluIG1pcHMtcG9reS1saW51eC1nY2MgY2FzZS4gTUlQUyBiaW51dGlscworbGQgcmVsaWVzIG9uIFJfTUlQU19KQUxSIHJlbG9jYXRpb24gdG8gY29udmVydCAnamFsciB0OScgaW50byAnYmFsJworYW5kIHN1Y2ggcmVsb2NhdGlvbiBpcyBnZW5lcmF0ZWQgb25seSBpZiAtbXJlbGF4LXBpYy1jYWxscyBvcHRpb24KK2lzIG9uLgorCitQbGVhc2Ugbm90ZSAnamFsciB0OScgY29udmVyc2lvbiB0byAnYmFsJyBjYW4gaGFwcGVuIG9ubHkgdG8gc3RhdGljCitmdW5jdGlvbnMuIFRoZXNlIHN0YXRpYyBQSUMgY2FsbHMgdXNlIG1pcHMgbG9jYWwgR09UIGVudHJpZXMgdGhhdAorYXJlIHN1cHBvc2VkIHRvIGJlIGZpbGxlZCB3aXRoIHN0YXJ0IG9mIERTTyB2YWx1ZSBieSBydW4tdGltZSBsaW5rZXIKKyhtaXNzaW5nIGluIFZEU08gY2FzZSkgYW5kIHRoZXkgZG8gbm90IGhhdmUgZHluYW1pYyByZWxvY2F0aW9ucy4KK0dsb2JhbCBtaXBzIEdPVCBlbnRyaWVzIG11c3QgaGF2ZSBkeW5hbWljIHJlbG9jYXRpb25zIGFuZCB0aGV5IHNob3VsZAorYmUgcHJldmVudGVkIGJ5IGNtZF92ZHNvX2NoZWNrIE1ha2VmaWxlIHJ1bGUuCisKK1NvbHV0aW9uIGNhbGwgb3V0IC1tcmVsYXgtcGljLWNhbGxzIGFuZCAtbWV4cGxpY2l0LXJlbG9jcyBvcHRpb25zCitleHBsaWNpdGx5IHdoaWxlIGNvbXBpbGluZyBNSVBTIHZkc28gY29kZS4gVGhhdCB3b3VsZCBnZXQgY29ycmVjdAorYW5kIGNvbnNpc3RlbnQgYmV0d2VlbiBkaWZmZXJlbnQgdG9vbGNoYWlucyBiZWhhdmlvdXIuCisKK1JlcG9ydGVkLWJ5OiBCcnVjZSBBc2hmaWVsZCA8YnJ1Y2UuYXNoZmllbGRAZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogVmljdG9yIEthbWVuc2t5IDxrYW1lbnNreUBjaXNjby5jb20+CitTaWduZWQtb2ZmLWJ5OiBQYXVsIEJ1cnRvbiA8cGF1bGJ1cnRvbkBrZXJuZWwub3JnPgorQ2M6IGxpbnV4LW1pcHNAdmdlci5rZXJuZWwub3JnCitDYzogUmFsZiBCYWVjaGxlIDxyYWxmQGxpbnV4LW1pcHMub3JnPgorQ2M6IEphbWVzIEhvZ2FuIDxqaG9nYW5Aa2VybmVsLm9yZz4KK0NjOiBWaW5jZW56byBGcmFzY2lubyA8dmluY2Vuem8uZnJhc2Npbm9AYXJtLmNvbT4KK0NjOiByaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnCistLS0KKyBhcmNoL21pcHMvdmRzby9NYWtlZmlsZSB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCistLS0gYS9hcmNoL21pcHMvdmRzby9NYWtlZmlsZQorKysrIGIvYXJjaC9taXBzL3Zkc28vTWFrZWZpbGUKK0BAIC0yNiw2ICsyNiw3IEBAIGNjZmxhZ3MtdmRzbyA6PSBcCisgY2ZsYWdzLXZkc28gOj0gJChjY2ZsYWdzLXZkc28pIFwKKyAJJChmaWx0ZXIgLVclLCQoZmlsdGVyLW91dCAtV2EkKGNvbW1hKSUsJChLQlVJTERfQ0ZMQUdTKSkpIFwKKyAJLU8zIC1nIC1mUElDIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbiAtRyAwIFwKKysJLW1yZWxheC1waWMtY2FsbHMgLW1leHBsaWNpdC1yZWxvY3MgXAorIAktZm5vLXN0YWNrLXByb3RlY3RvciAtZm5vLWp1bXAtdGFibGVzIC1ERElTQUJMRV9CUkFOQ0hfUFJPRklMSU5HIFwKKyAJJChjYWxsIGNjLW9wdGlvbiwgLWZuby1hc3luY2hyb25vdXMtdW53aW5kLXRhYmxlcykgXAorIAkkKGNhbGwgY2Mtb3B0aW9uLCAtZm5vLXN0YWNrLXByb3RlY3RvcikKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8zMTEtTUlQUy1GaXgtZXhjZXB0aW9uLWhhbmRsZXItbWVtY3B5LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzMxMS1NSVBTLUZpeC1leGNlcHRpb24taGFuZGxlci1tZW1jcHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE2NzI1YwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8zMTEtTUlQUy1GaXgtZXhjZXB0aW9uLWhhbmRsZXItbWVtY3B5LnBhdGNoCkBAIC0wLDAgKzEsMTA3IEBACitGcm9tIGUwMWM5MWEzNjA3OTMyOThjOWUxNjU2YTYxZmFjZWZmMDE0ODdhNDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCZW4gSHV0Y2hpbmdzIDxiZW5AZGVjYWRlbnQub3JnLnVrPgorRGF0ZTogU2F0LCAyMyBNYXkgMjAyMCAyMzo1MDozNCArMDgwMAorU3ViamVjdDogW1BBVENIXSBNSVBTOiBGaXggZXhjZXB0aW9uIGhhbmRsZXIgbWVtY3B5KCkKKworVGhlIGV4Y2VwdGlvbiBoYW5kbGVyIHN1YnJvdXRpbmVzIGFyZSBkZWNsYXJlZCBhcyBhIHNpbmdsZSBjaGFyLCBidXQKK3doZW4gY29waWVkIHRvIHRoZSByZXF1aXJlZCBhZGRyZXNzZXMgdGhlIGNvcHkgbGVuZ3RoIGlzIDB4ODAuCisKK1doZW4gcmFuZ2UgY2hlY2tzIGFyZSBlbmFibGVkIGZvciBtZW1jcHkoKSB0aGlzIHJlc3VsdHMgaW4gYSBidWlsZAorZmFpbHVyZSwgd2l0aCBlcnJvciBtZXNzYWdlcyBzdWNoIGFzOgorCitJbiBmaWxlIGluY2x1ZGVkIGZyb20gYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1pbml0LmM6MTU6CitJbiBmdW5jdGlvbiAnbWVtY3B5JywKKyAgICBpbmxpbmVkIGZyb20gJ21pcHNfbm1pX3NldHVwJyBhdCBhcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWluaXQuYzo5ODoyOgoraW5jbHVkZS9saW51eC9zdHJpbmcuaDozNzY6NDogZXJyb3I6IGNhbGwgdG8gJ19fcmVhZF9vdmVyZmxvdzInIGRlY2xhcmVkIHdpdGggYXR0cmlidXRlIGVycm9yOiBkZXRlY3RlZCByZWFkIGJleW9uZCBzaXplIG9mIG9iamVjdCBwYXNzZWQgYXMgMm5kIHBhcmFtZXRlcgorICAzNzYgfCAgICBfX3JlYWRfb3ZlcmZsb3cyKCk7CisgICAgICB8ICAgIF5+fn5+fn5+fn5+fn5+fn5+fgorCitDaGFuZ2UgdGhlIGRlY2xhcmF0aW9ucyB0byB1c2UgdHlwZSBjaGFyW10uCisKK1NpZ25lZC1vZmYtYnk6IEJlbiBIdXRjaGluZ3MgPGJlbkBkZWNhZGVudC5vcmcudWs+CitTaWduZWQtb2ZmLWJ5OiBZdW5RaWFuZyBTdSA8c3lxQGRlYmlhbi5vcmc+CitTaWduZWQtb2ZmLWJ5OiBUaG9tYXMgQm9nZW5kb2VyZmVyIDx0c2JvZ2VuZEBhbHBoYS5mcmFua2VuLmRlPgorLS0tCisgYXJjaC9taXBzL2xvb25nc29uNjQvY29tbW9uL2luaXQuYyB8IDQgKystLQorIGFyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW5pdC5jICAgfCA4ICsrKystLS0tCisgYXJjaC9taXBzL3Bpc3RhY2hpby9pbml0LmMgICAgICAgICB8IDggKysrKy0tLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQorCistLS0gYS9hcmNoL21pcHMvbG9vbmdzb242NC9jb21tb24vaW5pdC5jCisrKysgYi9hcmNoL21pcHMvbG9vbmdzb242NC9jb21tb24vaW5pdC5jCitAQCAtMTgsMTAgKzE4LDEwIEBAIHVuc2lnbmVkIGxvbmcgX19tYXliZV91bnVzZWQgX2xvb25nc29uX2EKKyBzdGF0aWMgdm9pZCBfX2luaXQgbWlwc19ubWlfc2V0dXAodm9pZCkKKyB7CisgCXZvaWQgKmJhc2U7CistCWV4dGVybiBjaGFyIGV4Y2VwdF92ZWNfbm1pOworKwlleHRlcm4gY2hhciBleGNlcHRfdmVjX25taVtdOworIAorIAliYXNlID0gKHZvaWQgKikoQ0FDX0JBU0UgKyAweDM4MCk7CistCW1lbWNweShiYXNlLCAmZXhjZXB0X3ZlY19ubWksIDB4ODApOworKwltZW1jcHkoYmFzZSwgZXhjZXB0X3ZlY19ubWksIDB4ODApOworIAlmbHVzaF9pY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpYmFzZSwgKHVuc2lnbmVkIGxvbmcpYmFzZSArIDB4ODApOworIH0KKyAKKy0tLSBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW5pdC5jCisrKysgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWluaXQuYworQEAgLTkwLDI0ICs5MCwyNCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgY29uc29sZV9jb25maWcodm9pZCkKKyBzdGF0aWMgdm9pZCBfX2luaXQgbWlwc19ubWlfc2V0dXAodm9pZCkKKyB7CisgCXZvaWQgKmJhc2U7CistCWV4dGVybiBjaGFyIGV4Y2VwdF92ZWNfbm1pOworKwlleHRlcm4gY2hhciBleGNlcHRfdmVjX25taVtdOworIAorIAliYXNlID0gY3B1X2hhc192ZWljID8KKyAJCSh2b2lkICopKENBQ19CQVNFICsgMHhhODApIDoKKyAJCSh2b2lkICopKENBQ19CQVNFICsgMHgzODApOworLQltZW1jcHkoYmFzZSwgJmV4Y2VwdF92ZWNfbm1pLCAweDgwKTsKKysJbWVtY3B5KGJhc2UsIGV4Y2VwdF92ZWNfbm1pLCAweDgwKTsKKyAJZmx1c2hfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWJhc2UsICh1bnNpZ25lZCBsb25nKWJhc2UgKyAweDgwKTsKKyB9CisgCisgc3RhdGljIHZvaWQgX19pbml0IG1pcHNfZWp0YWdfc2V0dXAodm9pZCkKKyB7CisgCXZvaWQgKmJhc2U7CistCWV4dGVybiBjaGFyIGV4Y2VwdF92ZWNfZWp0YWdfZGVidWc7CisrCWV4dGVybiBjaGFyIGV4Y2VwdF92ZWNfZWp0YWdfZGVidWdbXTsKKyAKKyAJYmFzZSA9IGNwdV9oYXNfdmVpYyA/CisgCQkodm9pZCAqKShDQUNfQkFTRSArIDB4YTAwKSA6CisgCQkodm9pZCAqKShDQUNfQkFTRSArIDB4MzAwKTsKKy0JbWVtY3B5KGJhc2UsICZleGNlcHRfdmVjX2VqdGFnX2RlYnVnLCAweDgwKTsKKysJbWVtY3B5KGJhc2UsIGV4Y2VwdF92ZWNfZWp0YWdfZGVidWcsIDB4ODApOworIAlmbHVzaF9pY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpYmFzZSwgKHVuc2lnbmVkIGxvbmcpYmFzZSArIDB4ODApOworIH0KKyAKKy0tLSBhL2FyY2gvbWlwcy9waXN0YWNoaW8vaW5pdC5jCisrKysgYi9hcmNoL21pcHMvcGlzdGFjaGlvL2luaXQuYworQEAgLTgzLDEyICs4MywxMiBAQCBwaHlzX2FkZHJfdCBtaXBzX2NkbW1fcGh5c19iYXNlKHZvaWQpCisgc3RhdGljIHZvaWQgX19pbml0IG1pcHNfbm1pX3NldHVwKHZvaWQpCisgeworIAl2b2lkICpiYXNlOworLQlleHRlcm4gY2hhciBleGNlcHRfdmVjX25taTsKKysJZXh0ZXJuIGNoYXIgZXhjZXB0X3ZlY19ubWlbXTsKKyAKKyAJYmFzZSA9IGNwdV9oYXNfdmVpYyA/CisgCQkodm9pZCAqKShDQUNfQkFTRSArIDB4YTgwKSA6CisgCQkodm9pZCAqKShDQUNfQkFTRSArIDB4MzgwKTsKKy0JbWVtY3B5KGJhc2UsICZleGNlcHRfdmVjX25taSwgMHg4MCk7CisrCW1lbWNweShiYXNlLCBleGNlcHRfdmVjX25taSwgMHg4MCk7CisgCWZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZyliYXNlLAorIAkJCSAgICh1bnNpZ25lZCBsb25nKWJhc2UgKyAweDgwKTsKKyB9CitAQCAtOTYsMTIgKzk2LDEyIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBtaXBzX25taV9zZXR1cCh2b2lkKQorIHN0YXRpYyB2b2lkIF9faW5pdCBtaXBzX2VqdGFnX3NldHVwKHZvaWQpCisgeworIAl2b2lkICpiYXNlOworLQlleHRlcm4gY2hhciBleGNlcHRfdmVjX2VqdGFnX2RlYnVnOworKwlleHRlcm4gY2hhciBleGNlcHRfdmVjX2VqdGFnX2RlYnVnW107CisgCisgCWJhc2UgPSBjcHVfaGFzX3ZlaWMgPworIAkJKHZvaWQgKikoQ0FDX0JBU0UgKyAweGEwMCkgOgorIAkJKHZvaWQgKikoQ0FDX0JBU0UgKyAweDMwMCk7CistCW1lbWNweShiYXNlLCAmZXhjZXB0X3ZlY19lanRhZ19kZWJ1ZywgMHg4MCk7CisrCW1lbWNweShiYXNlLCBleGNlcHRfdmVjX2VqdGFnX2RlYnVnLCAweDgwKTsKKyAJZmx1c2hfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWJhc2UsCisgCQkJICAgKHVuc2lnbmVkIGxvbmcpYmFzZSArIDB4ODApOworIH0KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8zNDMtbmV0ZmlsdGVyLW5mdF9mbG93X29mZmxvYWQtaGFuZGxlLW5ldGRldmljZS1ldmVudHMtZi5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8zNDMtbmV0ZmlsdGVyLW5mdF9mbG93X29mZmxvYWQtaGFuZGxlLW5ldGRldmljZS1ldmVudHMtZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDFmNDJkCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzM0My1uZXRmaWx0ZXItbmZ0X2Zsb3dfb2ZmbG9hZC1oYW5kbGUtbmV0ZGV2aWNlLWV2ZW50cy1mLnBhdGNoCkBAIC0wLDAgKzEsOTkgQEAKK0Zyb206IFBhYmxvIE5laXJhIEF5dXNvIDxwYWJsb0BuZXRmaWx0ZXIub3JnPgorRGF0ZTogVGh1LCAyNSBKYW4gMjAxOCAxMjo1ODo1NSArMDEwMAorU3ViamVjdDogW1BBVENIXSBuZXRmaWx0ZXI6IG5mdF9mbG93X29mZmxvYWQ6IGhhbmRsZSBuZXRkZXZpY2UgZXZlbnRzIGZyb20KKyBuZl9mbG93X3RhYmxlCisKK01vdmUgdGhlIGNvZGUgdGhhdCBkZWFscyB3aXRoIGRldmljZSBldmVudHMgdG8gdGhlIGNvcmUuCisKK1NpZ25lZC1vZmYtYnk6IFBhYmxvIE5laXJhIEF5dXNvIDxwYWJsb0BuZXRmaWx0ZXIub3JnPgorLS0tCisKKy0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMKKysrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMKK0BAIC01MjksNSArNTI5LDM1IEBAIHZvaWQgbmZfZmxvd190YWJsZV9mcmVlKHN0cnVjdCBuZl9mbG93dGEKKyB9CisgRVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd190YWJsZV9mcmVlKTsKKyAKKytzdGF0aWMgaW50IG5mX2Zsb3dfdGFibGVfbmV0ZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywKKysJCQkJICAgICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQorK3sKKysJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpOworKworKwlpZiAoZXZlbnQgIT0gTkVUREVWX0RPV04pCisrCQlyZXR1cm4gTk9USUZZX0RPTkU7CisrCisrCW5mX2Zsb3dfdGFibGVfY2xlYW51cChkZXYpOworKworKwlyZXR1cm4gTk9USUZZX0RPTkU7CisrfQorKworK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZmxvd19vZmZsb2FkX25ldGRldl9ub3RpZmllciA9IHsKKysJLm5vdGlmaWVyX2NhbGwJPSBuZl9mbG93X3RhYmxlX25ldGRldl9ldmVudCwKKyt9OworKworK3N0YXRpYyBpbnQgX19pbml0IG5mX2Zsb3dfdGFibGVfbW9kdWxlX2luaXQodm9pZCkKKyt7CisrCXJldHVybiByZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmZsb3dfb2ZmbG9hZF9uZXRkZXZfbm90aWZpZXIpOworK30KKysKKytzdGF0aWMgdm9pZCBfX2V4aXQgbmZfZmxvd190YWJsZV9tb2R1bGVfZXhpdCh2b2lkKQorK3sKKysJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmZsb3dfb2ZmbG9hZF9uZXRkZXZfbm90aWZpZXIpOworK30KKysKKyttb2R1bGVfaW5pdChuZl9mbG93X3RhYmxlX21vZHVsZV9pbml0KTsKKyttb2R1bGVfZXhpdChuZl9mbG93X3RhYmxlX21vZHVsZV9leGl0KTsKKysKKyBNT0RVTEVfTElDRU5TRSgiR1BMIik7CisgTU9EVUxFX0FVVEhPUigiUGFibG8gTmVpcmEgQXl1c28gPHBhYmxvQG5ldGZpbHRlci5vcmc+Iik7CistLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYworKysrIGIvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMKK0BAIC0yMzQsNDcgKzIzNCwxNCBAQCBzdGF0aWMgc3RydWN0IG5mdF9leHByX3R5cGUgbmZ0X2Zsb3dfb2ZmCisgCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKyB9OworIAorLXN0YXRpYyBpbnQgZmxvd19vZmZsb2FkX25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCistCQkJCSAgICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQorLXsKKy0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpOworLQorLQlpZiAoZXZlbnQgIT0gTkVUREVWX0RPV04pCistCQlyZXR1cm4gTk9USUZZX0RPTkU7CistCistCW5mX2Zsb3dfdGFibGVfY2xlYW51cChkZXYpOworLQorLQlyZXR1cm4gTk9USUZZX0RPTkU7CistfQorLQorLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZmxvd19vZmZsb2FkX25ldGRldl9ub3RpZmllciA9IHsKKy0JLm5vdGlmaWVyX2NhbGwJPSBmbG93X29mZmxvYWRfbmV0ZGV2X2V2ZW50LAorLX07CistCisgc3RhdGljIGludCBfX2luaXQgbmZ0X2Zsb3dfb2ZmbG9hZF9tb2R1bGVfaW5pdCh2b2lkKQorIHsKKy0JaW50IGVycjsKKy0KKy0JZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZmbG93X29mZmxvYWRfbmV0ZGV2X25vdGlmaWVyKTsKKy0JaWYgKGVycikKKy0JCWdvdG8gZXJyOworLQorLQllcnIgPSBuZnRfcmVnaXN0ZXJfZXhwcigmbmZ0X2Zsb3dfb2ZmbG9hZF90eXBlKTsKKy0JaWYgKGVyciA8IDApCistCQlnb3RvIHJlZ2lzdGVyX2V4cHI7CistCistCXJldHVybiAwOworLQorLXJlZ2lzdGVyX2V4cHI6CistCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZmbG93X29mZmxvYWRfbmV0ZGV2X25vdGlmaWVyKTsKKy1lcnI6CistCXJldHVybiBlcnI7CisrCXJldHVybiBuZnRfcmVnaXN0ZXJfZXhwcigmbmZ0X2Zsb3dfb2ZmbG9hZF90eXBlKTsKKyB9CisgCisgc3RhdGljIHZvaWQgX19leGl0IG5mdF9mbG93X29mZmxvYWRfbW9kdWxlX2V4aXQodm9pZCkKKyB7CisgCW5mdF91bnJlZ2lzdGVyX2V4cHIoJm5mdF9mbG93X29mZmxvYWRfdHlwZSk7CistCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZmbG93X29mZmxvYWRfbmV0ZGV2X25vdGlmaWVyKTsKKyB9CisgCisgbW9kdWxlX2luaXQobmZ0X2Zsb3dfb2ZmbG9hZF9tb2R1bGVfaW5pdCk7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMzcwLW5ldGZpbHRlci1uZl9mbG93X3RhYmxlLWZpeC1vZmZsb2FkZWQtY29ubmVjdGlvbi10aW0ucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMzcwLW5ldGZpbHRlci1uZl9mbG93X3RhYmxlLWZpeC1vZmZsb2FkZWQtY29ubmVjdGlvbi10aW0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzczYTE1NgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8zNzAtbmV0ZmlsdGVyLW5mX2Zsb3dfdGFibGUtZml4LW9mZmxvYWRlZC1jb25uZWN0aW9uLXRpbS5wYXRjaApAQCAtMCwwICsxLDExNCBAQAorRnJvbTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorRGF0ZTogV2VkLCAxMyBKdW4gMjAxOCAxMjozMzozOSArMDIwMAorU3ViamVjdDogW1BBVENIXSBuZXRmaWx0ZXI6IG5mX2Zsb3dfdGFibGU6IGZpeCBvZmZsb2FkZWQgY29ubmVjdGlvbiB0aW1lb3V0CisgY29ybmVyIGNhc2UKKworVGhlIGZ1bGwgdGVhcmRvd24gb2Ygb2ZmbG9hZGVkIGZsb3dzIGlzIGRlZmVycmVkIHRvIGEgZ2Mgd29yayBpdGVtLAoraG93ZXZlciBwcm9jZXNzaW5nIG9mIHBhY2tldHMgYnkgbmV0ZmlsdGVyIG5lZWRzIHRvIGhhcHBlbiBpbW1lZGlhdGVseQorYWZ0ZXIgYSB0ZWFyZG93biBpcyByZXF1ZXN0ZWQsIGJlY2F1c2UgdGhlIGNvbm50cmFjayBzdGF0ZSBuZWVkcyB0byBiZQorZml4ZWQgdXAuCisKK1NpbmNlIHRoZSBJUFNfT0ZGTE9BRF9CSVQgaXMgc3RpbGwga2VwdCB1bnRpbCB0aGUgdGVhcmRvd24gaXMgY29tcGxldGUsCit0aGUgbmV0ZmlsdGVyIGNvbm50cmFjayBnYyBjYW4gYWNjaWRlbnRhbGx5IGJ1bXAgdGhlIHRpbWVvdXQgb2YgYQorY29ubmVjdGlvbiB3aGVyZSBvZmZsb2FkIHdhcyBqdXN0IHN0b3BwZWQsIGNhdXNpbmcgYSBjb25udHJhY2sgZW50cnkKK2xlYWsuCisKK0ZpeCB0aGlzIGJ5IG1vdmluZyB0aGUgY29ubnRyYWNrIHRpbWVvdXQgYnVtcGluZyBmcm9tIGNvbm50cmFjayBjb3JlIHRvCit0aGUgbmZfZmxvd19vZmZsb2FkIGFuZCBhZGQgYSBjaGVjayB0byBwcmV2ZW50IGJvZ3VzIHRpbWVvdXQgYnVtcHMuCisKK1NpZ25lZC1vZmYtYnk6IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KKy0tLQorCistLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKKysrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYworQEAgLTEyMDcsMTggKzEyMDcsNiBAQCBzdGF0aWMgYm9vbCBnY193b3JrZXJfY2FuX2Vhcmx5X2Ryb3AoY29uCisgCXJldHVybiBmYWxzZTsKKyB9CisgCistI2RlZmluZQlEQVkJKDg2NDAwICogSFopCistCistLyogU2V0IGFuIGFyYml0cmFyeSB0aW1lb3V0IGxhcmdlIGVub3VnaCBub3QgdG8gZXZlciBleHBpcmUsIHRoaXMgc2F2ZQorLSAqIHVzIGEgY2hlY2sgZm9yIHRoZSBJUFNfT0ZGTE9BRF9CSVQgZnJvbSB0aGUgcGFja2V0IHBhdGggdmlhCistICogbmZfY3RfaXNfZXhwaXJlZCgpLgorLSAqLworLXN0YXRpYyB2b2lkIG5mX2N0X29mZmxvYWRfdGltZW91dChzdHJ1Y3QgbmZfY29ubiAqY3QpCisteworLQlpZiAobmZfY3RfZXhwaXJlcyhjdCkgPCBEQVkgLyAyKQorLQkJY3QtPnRpbWVvdXQgPSBuZmN0X3RpbWVfc3RhbXAgKyBEQVk7CistfQorLQorIHN0YXRpYyB2b2lkIGdjX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCisgeworIAl1bnNpZ25lZCBsb25nIGVuZF90aW1lID0gamlmZmllcyArIEdDX1NDQU5fTUFYX0RVUkFUSU9OOworQEAgLTEyNTAsMTAgKzEyMzgsOCBAQCBzdGF0aWMgdm9pZCBnY193b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0CisgCisgCQkJdG1wID0gbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhoKTsKKyAKKy0JCQlpZiAodGVzdF9iaXQoSVBTX09GRkxPQURfQklULCAmdG1wLT5zdGF0dXMpKSB7CistCQkJCW5mX2N0X29mZmxvYWRfdGltZW91dCh0bXApOworKwkJCWlmICh0ZXN0X2JpdChJUFNfT0ZGTE9BRF9CSVQsICZ0bXAtPnN0YXR1cykpCisgCQkJCWNvbnRpbnVlOworLQkJCX0KKyAKKyAJCQlpZiAobmZfY3RfaXNfZXhwaXJlZCh0bXApKSB7CisgCQkJCW5mX2N0X2djX2V4cGlyZWQodG1wKTsKKy0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMKKysrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMKK0BAIC0xOTgsMTAgKzE5OCwyOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIG5mCisgCS5hdXRvbWF0aWNfc2hyaW5raW5nCT0gdHJ1ZSwKKyB9OworIAorKyNkZWZpbmUgICAgICAgIERBWSAgICAgKDg2NDAwICogSFopCisrCisrLyogU2V0IGFuIGFyYml0cmFyeSB0aW1lb3V0IGxhcmdlIGVub3VnaCBub3QgdG8gZXZlciBleHBpcmUsIHRoaXMgc2F2ZQorKyAqIHVzIGEgY2hlY2sgZm9yIHRoZSBJUFNfT0ZGTE9BRF9CSVQgZnJvbSB0aGUgcGFja2V0IHBhdGggdmlhCisrICogbmZfY3RfaXNfZXhwaXJlZCgpLgorKyAqLworK3N0YXRpYyB2b2lkIG5mX2N0X29mZmxvYWRfdGltZW91dChzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KQorK3sKKysJc3RydWN0IGZsb3dfb2ZmbG9hZF9lbnRyeSAqZW50cnk7CisrCXN0cnVjdCBuZl9jb25uICpjdDsKKysKKysJZW50cnkgPSBjb250YWluZXJfb2YoZmxvdywgc3RydWN0IGZsb3dfb2ZmbG9hZF9lbnRyeSwgZmxvdyk7CisrCWN0ID0gZW50cnktPmN0OworKworKwlpZiAobmZfY3RfZXhwaXJlcyhjdCkgPCBEQVkgLyAyKQorKwkJY3QtPnRpbWVvdXQgPSBuZmN0X3RpbWVfc3RhbXAgKyBEQVk7CisrfQorKworIGludCBmbG93X29mZmxvYWRfYWRkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpCisgeworIAlpbnQgZXJyOworIAorKwluZl9jdF9vZmZsb2FkX3RpbWVvdXQoZmxvdyk7CisgCWZsb3ctPnRpbWVvdXQgPSAodTMyKWppZmZpZXMgKyBORl9GTE9XX1RJTUVPVVQ7CisgCisgCWVyciA9IHJoYXNodGFibGVfaW5zZXJ0X2Zhc3QoJmZsb3dfdGFibGUtPnJoYXNodGFibGUsCitAQCAtMzA0LDYgKzMyMyw3IEBAIG5mX2Zsb3dfdGFibGVfaXRlcmF0ZShzdHJ1Y3QgbmZfZmxvd3RhYmwKKyAJcmhhc2h0YWJsZV93YWxrX3N0YXJ0KCZodGkpOworIAorIAl3aGlsZSAoKHR1cGxlaGFzaCA9IHJoYXNodGFibGVfd2Fsa19uZXh0KCZodGkpKSkgeworKworIAkJaWYgKElTX0VSUih0dXBsZWhhc2gpKSB7CisgCQkJaWYgKFBUUl9FUlIodHVwbGVoYXNoKSAhPSAtRUFHQUlOKSB7CisgCQkJCWVyciA9IFBUUl9FUlIodHVwbGVoYXNoKTsKK0BAIC0zMjgsMTAgKzM0OCwxNyBAQCBzdGF0aWMgdm9pZCBuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcChzdHJ1CisgeworIAlzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlID0gZGF0YTsKKyAJc3RydWN0IGZsb3dfb2ZmbG9hZF9lbnRyeSAqZTsKKysJYm9vbCB0ZWFyZG93bjsKKyAKKyAJZSA9IGNvbnRhaW5lcl9vZihmbG93LCBzdHJ1Y3QgZmxvd19vZmZsb2FkX2VudHJ5LCBmbG93KTsKKy0JaWYgKG5mX2Zsb3dfaGFzX2V4cGlyZWQoZmxvdykgfHwgbmZfY3RfaXNfZHlpbmcoZS0+Y3QpIHx8CistCSAgICAoZmxvdy0+ZmxhZ3MgJiAoRkxPV19PRkZMT0FEX0RZSU5HIHwgRkxPV19PRkZMT0FEX1RFQVJET1dOKSkpCisrCisrCXRlYXJkb3duID0gZmxvdy0+ZmxhZ3MgJiAoRkxPV19PRkZMT0FEX0RZSU5HIHwKKysJCQkJICBGTE9XX09GRkxPQURfVEVBUkRPV04pOworKworKwlpZiAoIXRlYXJkb3duKQorKwkJbmZfY3Rfb2ZmbG9hZF90aW1lb3V0KGZsb3cpOworKworKwlpZiAobmZfZmxvd19oYXNfZXhwaXJlZChmbG93KSB8fCB0ZWFyZG93bikKKyAJCWZsb3dfb2ZmbG9hZF9kZWwoZmxvd190YWJsZSwgZmxvdyk7CisgfQorIApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzM3MS1uZXRmaWx0ZXItbmZfZmxvd190YWJsZS1maXgtdXAtY3Qtc3RhdGUtb2YtZmxvd3MtYWZ0LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzM3MS1uZXRmaWx0ZXItbmZfZmxvd190YWJsZS1maXgtdXAtY3Qtc3RhdGUtb2YtZmxvd3MtYWZ0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MzY0MWQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMzcxLW5ldGZpbHRlci1uZl9mbG93X3RhYmxlLWZpeC11cC1jdC1zdGF0ZS1vZi1mbG93cy1hZnQucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorRnJvbTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorRGF0ZTogVGh1LCAxNCBKdW4gMjAxOCAxMToyMDowOSArMDIwMAorU3ViamVjdDogW1BBVENIXSBuZXRmaWx0ZXI6IG5mX2Zsb3dfdGFibGU6IGZpeCB1cCBjdCBzdGF0ZSBvZiBmbG93cyBhZnRlcgorIHRpbWVvdXQKKworSWYgYSBjb25uZWN0aW9uIHNpbXBseSB0aW1lcyBvdXQgaW5zdGVhZCBvZiBiZWluZyB0b3JuIGRvd24sIGl0IGlzIGxlZnQKK2FjdGl2ZSB3aXRoIGEgbG9uZyB0aW1lb3V0LiBGaXggdGhpcyBieSBjYWxsaW5nIGZsb3dfb2ZmbG9hZF9maXh1cF9jdF9zdGF0ZQoraGVyZSBhcyB3ZWxsLgorCitTaWduZWQtb2ZmLWJ5OiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CistLS0KKworLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYworKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYworQEAgLTI2OCw2ICsyNjgsOSBAQCBzdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfZGVsKHN0cnVjdCBuZl9mCisgCWVsc2UgaWYgKGZsb3ctPmZsYWdzICYgRkxPV19PRkZMT0FEX1RFQVJET1dOKQorIAkJZmxvd19vZmZsb2FkX2ZpeHVwX2N0X3RpbWVvdXQoZS0+Y3QpOworIAorKwlpZiAoIShmbG93LT5mbGFncyAmIEZMT1dfT0ZGTE9BRF9URUFSRE9XTikpCisrCQlmbG93X29mZmxvYWRfZml4dXBfY3Rfc3RhdGUoZS0+Y3QpOworKworIAlmbG93X29mZmxvYWRfZnJlZShmbG93KTsKKyB9CisgCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMzkzLXY1LjUtc2NoX2Nha2UtZHJvcC11bnVzZWQtdmFyaWFibGUtdGluX3F1YW50dW1fcHJpby5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8zOTMtdjUuNS1zY2hfY2FrZS1kcm9wLXVudXNlZC12YXJpYWJsZS10aW5fcXVhbnR1bV9wcmlvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjOWU4YWQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMzkzLXY1LjUtc2NoX2Nha2UtZHJvcC11bnVzZWQtdmFyaWFibGUtdGluX3F1YW50dW1fcHJpby5wYXRjaApAQCAtMCwwICsxLDE1OCBAQAorRnJvbSBkN2UxNzM4ZjBhMGIwNTczYWM5M2NmNTcwYmEzZGY5ZGVlNjFiNjhlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2V2aW4gJ2xkaXInIERhcmJ5c2hpcmUtQnJ5YW50IDxsZGlyQGRhcmJ5c2hpcmUtYnJ5YW50Lm1lLnVrPgorRGF0ZTogV2VkLCAxOCBEZWMgMjAxOSAxNDowNToxMyArMDAwMAorU3ViamVjdDogW1BBVENIIDIvMl0gc2NoX2Nha2U6IGRyb3AgdW51c2VkIHZhcmlhYmxlIHRpbl9xdWFudHVtX3ByaW8KK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworVHVybnMgb3V0IHRpbl9xdWFudHVtX3ByaW8gaXNuJ3QgdXNlZCBhbnltb3JlIGFuZCBpcyBhIGxlZnRvdmVyIGZyb20gYQorcHJldmlvdXMgaW1wbGVtZW50YXRpb24gb2YgZGlmZnNlcnYgdGlucy4gIFNpbmNlIHRoZSB2YXJpYWJsZSBpc24ndCB1c2VkCitpbiBhbnkgY2FsY3VsYXRpb25zIGl0IGNhbiBiZSBlbGltaW5hdGVkLgorCitEcm9wIHZhcmlhYmxlIGFuZCBwbGFjZXMgd2hlcmUgaXQgd2FzIHNldC4gIFJlbmFtZSByZW1haW5pbmcgdmFyaWFibGUKK2FuZCBjb25zb2xpZGF0ZSBuYW1pbmcgb2YgaW50ZXJtZWRpYXRlIHZhcmlhYmxlcyB0aGF0IHNldCBpdC4KKworU2lnbmVkLW9mZi1ieTogS2V2aW4gRGFyYnlzaGlyZS1CcnlhbnQgPGxkaXJAZGFyYnlzaGlyZS1icnlhbnQubWUudWs+CitBY2tlZC1ieTogVG9rZSBIw7hpbGFuZC1Kw7hyZ2Vuc2VuIDx0b2tlQHJlZGhhdC5jb20+CitTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CistLS0KKyBuZXQvc2NoZWQvc2NoX2Nha2UuYyB8IDU5ICsrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKyksIDQxIGRlbGV0aW9ucygtKQorCistLS0gYS9uZXQvc2NoZWQvc2NoX2Nha2UuYworKysrIGIvbmV0L3NjaGVkL3NjaF9jYWtlLmMKK0BAIC0xNzMsOCArMTczLDcgQEAgc3RydWN0IGNha2VfdGluX2RhdGEgeworIAl1NjQJdGluX3JhdGVfYnBzOworIAl1MTYJdGluX3JhdGVfc2hmdDsKKyAKKy0JdTE2CXRpbl9xdWFudHVtX3ByaW87CistCXUxNgl0aW5fcXVhbnR1bV9iYW5kOworKwl1MTYJdGluX3F1YW50dW07CisgCXMzMgl0aW5fZGVmaWNpdDsKKyAJdTMyCXRpbl9iYWNrbG9nOworIAl1MzIJdGluX2Ryb3BwZWQ7CitAQCAtMTk0Nyw3ICsxOTQ2LDcgQEAgYmVnaW46CisgCQl3aGlsZSAoYi0+dGluX2RlZmljaXQgPCAwIHx8CisgCQkgICAgICAgIShiLT5zcGFyc2VfZmxvd19jb3VudCArIGItPmJ1bGtfZmxvd19jb3VudCkpIHsKKyAJCQlpZiAoYi0+dGluX2RlZmljaXQgPD0gMCkKKy0JCQkJYi0+dGluX2RlZmljaXQgKz0gYi0+dGluX3F1YW50dW1fYmFuZDsKKysJCQkJYi0+dGluX2RlZmljaXQgKz0gYi0+dGluX3F1YW50dW07CisgCQkJaWYgKGItPnNwYXJzZV9mbG93X2NvdW50ICsgYi0+YnVsa19mbG93X2NvdW50KQorIAkJCQllbXB0eSA9IGZhbHNlOworIAorQEAgLTIyNjksOCArMjI2OCw3IEBAIHN0YXRpYyBpbnQgY2FrZV9jb25maWdfYmVzdGVmZm9ydChzdHJ1Y3QKKyAKKyAJY2FrZV9zZXRfcmF0ZShiLCByYXRlLCBtdHUsCisgCQkgICAgICB1c190b19ucyhxLT50YXJnZXQpLCB1c190b19ucyhxLT5pbnRlcnZhbCkpOworLQliLT50aW5fcXVhbnR1bV9iYW5kID0gNjU1MzU7CistCWItPnRpbl9xdWFudHVtX3ByaW8gPSA2NTUzNTsKKysJYi0+dGluX3F1YW50dW0gPSA2NTUzNTsKKyAKKyAJcmV0dXJuIDA7CisgfQorQEAgLTIyODEsOCArMjI3OSw3IEBAIHN0YXRpYyBpbnQgY2FrZV9jb25maWdfcHJlY2VkZW5jZShzdHJ1Y3QKKyAJc3RydWN0IGNha2Vfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKKyAJdTMyIG10dSA9IHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpOworIAl1NjQgcmF0ZSA9IHEtPnJhdGVfYnBzOworLQl1MzIgcXVhbnR1bTEgPSAyNTY7CistCXUzMiBxdWFudHVtMiA9IDI1NjsKKysJdTMyIHF1YW50dW0gPSAyNTY7CisgCXUzMiBpOworIAorIAlxLT50aW5fY250ID0gODsKK0BAIC0yMjk1LDE4ICsyMjkyLDE0IEBAIHN0YXRpYyBpbnQgY2FrZV9jb25maWdfcHJlY2VkZW5jZShzdHJ1Y3QKKyAJCWNha2Vfc2V0X3JhdGUoYiwgcmF0ZSwgbXR1LCB1c190b19ucyhxLT50YXJnZXQpLAorIAkJCSAgICAgIHVzX3RvX25zKHEtPmludGVydmFsKSk7CisgCistCQliLT50aW5fcXVhbnR1bV9wcmlvID0gbWF4X3QodTE2LCAxVSwgcXVhbnR1bTEpOworLQkJYi0+dGluX3F1YW50dW1fYmFuZCA9IG1heF90KHUxNiwgMVUsIHF1YW50dW0yKTsKKysJCWItPnRpbl9xdWFudHVtID0gbWF4X3QodTE2LCAxVSwgcXVhbnR1bSk7CisgCisgCQkvKiBjYWxjdWxhdGUgbmV4dCBjbGFzcydzIHBhcmFtZXRlcnMgKi8KKyAJCXJhdGUgICo9IDc7CisgCQlyYXRlID4+PSAzOworIAorLQkJcXVhbnR1bTEgICo9IDM7CistCQlxdWFudHVtMSA+Pj0gMTsKKy0KKy0JCXF1YW50dW0yICAqPSA3OworLQkJcXVhbnR1bTIgPj49IDM7CisrCQlxdWFudHVtICAqPSA3OworKwkJcXVhbnR1bSA+Pj0gMzsKKyAJfQorIAorIAlyZXR1cm4gMDsKK0BAIC0yMzc1LDggKzIzNjgsNyBAQCBzdGF0aWMgaW50IGNha2VfY29uZmlnX2RpZmZzZXJ2OChzdHJ1Y3QKKyAJc3RydWN0IGNha2Vfc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKKyAJdTMyIG10dSA9IHBzY2hlZF9tdHUocWRpc2NfZGV2KHNjaCkpOworIAl1NjQgcmF0ZSA9IHEtPnJhdGVfYnBzOworLQl1MzIgcXVhbnR1bTEgPSAyNTY7CistCXUzMiBxdWFudHVtMiA9IDI1NjsKKysJdTMyIHF1YW50dW0gPSAyNTY7CisgCXUzMiBpOworIAorIAlxLT50aW5fY250ID0gODsKK0BAIC0yMzkyLDE4ICsyMzg0LDE0IEBAIHN0YXRpYyBpbnQgY2FrZV9jb25maWdfZGlmZnNlcnY4KHN0cnVjdAorIAkJY2FrZV9zZXRfcmF0ZShiLCByYXRlLCBtdHUsIHVzX3RvX25zKHEtPnRhcmdldCksCisgCQkJICAgICAgdXNfdG9fbnMocS0+aW50ZXJ2YWwpKTsKKyAKKy0JCWItPnRpbl9xdWFudHVtX3ByaW8gPSBtYXhfdCh1MTYsIDFVLCBxdWFudHVtMSk7CistCQliLT50aW5fcXVhbnR1bV9iYW5kID0gbWF4X3QodTE2LCAxVSwgcXVhbnR1bTIpOworKwkJYi0+dGluX3F1YW50dW0gPSBtYXhfdCh1MTYsIDFVLCBxdWFudHVtKTsKKyAKKyAJCS8qIGNhbGN1bGF0ZSBuZXh0IGNsYXNzJ3MgcGFyYW1ldGVycyAqLworIAkJcmF0ZSAgKj0gNzsKKyAJCXJhdGUgPj49IDM7CisgCistCQlxdWFudHVtMSAgKj0gMzsKKy0JCXF1YW50dW0xID4+PSAxOworLQorLQkJcXVhbnR1bTIgICo9IDc7CistCQlxdWFudHVtMiA+Pj0gMzsKKysJCXF1YW50dW0gICo9IDc7CisrCQlxdWFudHVtID4+PSAzOworIAl9CisgCisgCXJldHVybiAwOworQEAgLTI0NDIsMTcgKzI0MzAsMTEgQEAgc3RhdGljIGludCBjYWtlX2NvbmZpZ19kaWZmc2VydjQoc3RydWN0CisgCWNha2Vfc2V0X3JhdGUoJnEtPnRpbnNbM10sIHJhdGUgPj4gMiwgbXR1LAorIAkJICAgICAgdXNfdG9fbnMocS0+dGFyZ2V0KSwgdXNfdG9fbnMocS0+aW50ZXJ2YWwpKTsKKyAKKy0JLyogcHJpb3JpdHkgd2VpZ2h0cyAqLworLQlxLT50aW5zWzBdLnRpbl9xdWFudHVtX3ByaW8gPSBxdWFudHVtOworLQlxLT50aW5zWzFdLnRpbl9xdWFudHVtX3ByaW8gPSBxdWFudHVtID4+IDQ7CistCXEtPnRpbnNbMl0udGluX3F1YW50dW1fcHJpbyA9IHF1YW50dW0gPDwgMjsKKy0JcS0+dGluc1szXS50aW5fcXVhbnR1bV9wcmlvID0gcXVhbnR1bSA8PCA0OworLQorIAkvKiBiYW5kd2lkdGgtc2hhcmluZyB3ZWlnaHRzICovCistCXEtPnRpbnNbMF0udGluX3F1YW50dW1fYmFuZCA9IHF1YW50dW07CistCXEtPnRpbnNbMV0udGluX3F1YW50dW1fYmFuZCA9IHF1YW50dW0gPj4gNDsKKy0JcS0+dGluc1syXS50aW5fcXVhbnR1bV9iYW5kID0gcXVhbnR1bSA+PiAxOworLQlxLT50aW5zWzNdLnRpbl9xdWFudHVtX2JhbmQgPSBxdWFudHVtID4+IDI7CisrCXEtPnRpbnNbMF0udGluX3F1YW50dW0gPSBxdWFudHVtOworKwlxLT50aW5zWzFdLnRpbl9xdWFudHVtID0gcXVhbnR1bSA+PiA0OworKwlxLT50aW5zWzJdLnRpbl9xdWFudHVtID0gcXVhbnR1bSA+PiAxOworKwlxLT50aW5zWzNdLnRpbl9xdWFudHVtID0gcXVhbnR1bSA+PiAyOworIAorIAlyZXR1cm4gMDsKKyB9CitAQCAtMjQ4MywxNSArMjQ2NSwxMCBAQCBzdGF0aWMgaW50IGNha2VfY29uZmlnX2RpZmZzZXJ2MyhzdHJ1Y3QKKyAJY2FrZV9zZXRfcmF0ZSgmcS0+dGluc1syXSwgcmF0ZSA+PiAyLCBtdHUsCisgCQkgICAgICB1c190b19ucyhxLT50YXJnZXQpLCB1c190b19ucyhxLT5pbnRlcnZhbCkpOworIAorLQkvKiBwcmlvcml0eSB3ZWlnaHRzICovCistCXEtPnRpbnNbMF0udGluX3F1YW50dW1fcHJpbyA9IHF1YW50dW07CistCXEtPnRpbnNbMV0udGluX3F1YW50dW1fcHJpbyA9IHF1YW50dW0gPj4gNDsKKy0JcS0+dGluc1syXS50aW5fcXVhbnR1bV9wcmlvID0gcXVhbnR1bSA8PCA0OworLQorIAkvKiBiYW5kd2lkdGgtc2hhcmluZyB3ZWlnaHRzICovCistCXEtPnRpbnNbMF0udGluX3F1YW50dW1fYmFuZCA9IHF1YW50dW07CistCXEtPnRpbnNbMV0udGluX3F1YW50dW1fYmFuZCA9IHF1YW50dW0gPj4gNDsKKy0JcS0+dGluc1syXS50aW5fcXVhbnR1bV9iYW5kID0gcXVhbnR1bSA+PiAyOworKwlxLT50aW5zWzBdLnRpbl9xdWFudHVtID0gcXVhbnR1bTsKKysJcS0+dGluc1sxXS50aW5fcXVhbnR1bSA9IHF1YW50dW0gPj4gNDsKKysJcS0+dGluc1syXS50aW5fcXVhbnR1bSA9IHF1YW50dW0gPj4gMjsKKyAKKyAJcmV0dXJuIDA7CisgfQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzM5NS12NS44LW5ldC1zY2hfY2FrZS1UYWtlLWFkdmFudGFnZS1vZi1za2ItaGFzaC13aGVyZS1hcHByb3ByaWF0ZS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8zOTUtdjUuOC1uZXQtc2NoX2Nha2UtVGFrZS1hZHZhbnRhZ2Utb2Ytc2tiLWhhc2gtd2hlcmUtYXBwcm9wcmlhdGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ5ODFhYwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC8zOTUtdjUuOC1uZXQtc2NoX2Nha2UtVGFrZS1hZHZhbnRhZ2Utb2Ytc2tiLWhhc2gtd2hlcmUtYXBwcm9wcmlhdGUucGF0Y2gKQEAgLTAsMCArMSwxNzAgQEAKK0Zyb20gYjBjMTllZDYwODhhYjQxZGQyYTcyN2I2MDU5NGI3Mjk3YzE1ZDZjZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9Ub2tlPTIwSD1DMz1COGlsYW5kLUo9QzM9QjhyZ2Vuc2VuPz0gPHRva2VAcmVkaGF0LmNvbT4KK0RhdGU6IEZyaSwgMjkgTWF5IDIwMjAgMTQ6NDM6NDQgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gc2NoX2Nha2U6IFRha2UgYWR2YW50YWdlIG9mIHNrYi0+aGFzaCB3aGVyZSBhcHByb3ByaWF0ZQorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitXaGlsZSB0aGUgb3RoZXIgZnEtYmFzZWQgcWRpc2NzIHRha2UgYWR2YW50YWdlIG9mIHNrYi0+aGFzaCBhbmQgZG9lc24ndAorcmVjb21wdXRlIGl0IGlmIGl0IGlzIGFscmVhZHkgc2V0LCBzY2hfY2FrZSBkb2VzIG5vdC4KKworVGhpcyB3YXMgYSBkZWxpYmVyYXRlIGNob2ljZSBiZWNhdXNlIHNjaF9jYWtlIGhhc2hlcyB2YXJpb3VzIHBhcnRzIG9mIHRoZQorcGFja2V0IGhlYWRlciB0byBzdXBwb3J0IGl0cyBhZHZhbmNlZCBmbG93IGlzb2xhdGlvbiBtb2Rlcy4gSG93ZXZlciwKK2ZvcmVnb2luZyB0aGUgdXNlIG9mIHNrYi0+aGFzaCBlbnRpcmVseSBsb3NlcyBhIGZldyBpbXBvcnRhbnQgYmVuZWZpdHM6CisKKy0gV2hlbiBza2ItPmhhc2ggaXMgc2V0IGJ5IGhhcmR3YXJlLCBhIGZldyBDUFUgY3ljbGVzIGNhbiBiZSBzYXZlZCBieSBub3QKKyAgaGFzaGluZyBhZ2FpbiBpbiBzb2Z0d2FyZS4KKworLSBUdW5uZWwgZW5jYXBzdWxhdGlvbnMgd2lsbCBnZW5lcmFsbHkgcHJlc2VydmUgdGhlIHZhbHVlIG9mIHNrYi0+aGFzaCBmcm9tCisgIGJlZm9yZSB0aGUgZW5jYXBzdWxhdGlvbiwgd2hpY2ggYWxsb3dzIGZsb3ctYmFzZWQgcWRpc2NzIHRvIGRpc3Rpbmd1aXNoCisgIGJldHdlZW4gZmxvd3MgZXZlbiB0aG91Z2ggdGhlIG91dGVyIHBhY2tldCBoZWFkZXIgbm8gbG9uZ2VyIGhhcyBmbG93CisgIGluZm9ybWF0aW9uLgorCitJdCB0dXJucyBvdXQgdGhhdCB3ZSBjYW4gcHJlc2VydmUgdGhlc2UgZGVzaXJhYmxlIHByb3BlcnRpZXMgaW4gbWFueSBjYXNlcywKK3doaWxlIHN0aWxsIHN1cHBvcnRpbmcgdGhlIGFkdmFuY2VkIGZsb3cgaXNvbGF0aW9uIHByb3BlcnRpZXMgb2Ygc2NoX2Nha2UuCitUaGlzIHBhdGNoIGRvZXMgc28gYnkgcmV1c2luZyB0aGUgc2tiLT5oYXNoIHZhbHVlIGFzIHRoZSBmbG93X2hhc2ggcGFydCBvZgordGhlIGhhc2hpbmcgcHJvY2VkdXJlIGluIGNha2VfaGFzaCgpIG9ubHkgaW4gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCistIElmIHRoZSBza2ItPmhhc2ggaXMgbWFya2VkIGFzIGNvdmVyaW5nIHRoZSBmbG93IGhlYWRlcnMgKHNrYi0+bDRfaGFzaCBpcworICBzZXQpCisKK0FORAorCistIE5BVCBoZWFkZXIgcmV3cml0aW5nIGlzIGVpdGhlciBkaXNhYmxlZCwgb3IgZGlkIG5vdCBjaGFuZ2UgYW55IHZhbHVlcworICB1c2VkIGZvciBoYXNoaW5nLiBUaGUgbGF0dGVyIGlzIGltcG9ydGFudCB0byBtYXRjaCBsb2NhbC1vcmlnaW4gcGFja2V0cworICBzdWNoIGFzIHRob3NlIG9mIGEgdHVubmVsIGVuZHBvaW50LgorCitUaGUgaW1tZWRpYXRlIG1vdGl2YXRpb24gZm9yIGZpeGluZyB0aGlzIHdhcyB0aGUgcmVjZW50IHBhdGNoIHRvIFdpcmVHdWFyZAordG8gcHJlc2VydmUgdGhlIHNrYi0+aGFzaCBvbiBlbmNhcHN1bGF0aW9uLiBBcyBzdWNoLCB0aGlzIGlzIGFsc28gd2hhdCBJCit0ZXN0ZWQgYWdhaW5zdDsgd2l0aCB0aGlzIHBhdGNoLCBhZGRlZCBsYXRlbmN5IHVuZGVyIGxvYWQgZm9yIGNvbXBldGluZworZmxvd3MgZHJvcHMgZnJvbSB+OCBtcyB0byBzdWItMW1zIG9uIGFuIFJSVUwgdGVzdCBvdmVyIGEgV2lyZUd1YXJkIHR1bm5lbAorZ29pbmcgdGhyb3VnaCBhIHZpcnR1YWwgbGluayBzaGFwZWQgdG8gMUdicHMgdXNpbmcgc2NoX2Nha2UuIFRoaXMgbWF0Y2hlcwordGhlIHJlc3VsdHMgd2Ugc2F3IHdpdGggYSBzaW1pbGFyIHNldHVwIHVzaW5nIHNjaF9mcV9jb2RlbCB3aGVuIHRlc3RpbmcgdGhlCitXaXJlR3VhcmQgcGF0Y2guCisKK0ZpeGVzOiAwNDZmNmZkNWRhZWYgKCJzY2hlZDogQWRkIENvbW1vbiBBcHBsaWNhdGlvbnMgS2VwdCBFbmhhbmNlZCAoY2FrZSkgcWRpc2MiKQorU2lnbmVkLW9mZi1ieTogVG9rZSBIw7hpbGFuZC1Kw7hyZ2Vuc2VuIDx0b2tlQHJlZGhhdC5jb20+CitTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBLZXZpbiBEYXJieXNoaXJlLUJyeWFudCA8bGRpckBkYXJieXNoaXJlLWJyeWFudC5tZS51az4KKy0tLQorIG5ldC9zY2hlZC9zY2hfY2FrZS5jIHwgNjUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNTEgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCisKKy0tLSBhL25ldC9zY2hlZC9zY2hfY2FrZS5jCisrKysgYi9uZXQvc2NoZWQvc2NoX2Nha2UuYworQEAgLTU4NCwyNiArNTg0LDQ4IEBAIHN0YXRpYyBib29sIGNvYmFsdF9zaG91bGRfZHJvcChzdHJ1Y3QgY28KKyAJcmV0dXJuIGRyb3A7CisgfQorIAorLXN0YXRpYyB2b2lkIGNha2VfdXBkYXRlX2Zsb3drZXlzKHN0cnVjdCBmbG93X2tleXMgKmtleXMsCisrc3RhdGljIGJvb2wgY2FrZV91cGRhdGVfZmxvd2tleXMoc3RydWN0IGZsb3dfa2V5cyAqa2V5cywKKyAJCQkJIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCisgeworICNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spCisgCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdHVwbGUgPSB7fTsKKy0JYm9vbCByZXYgPSAhc2tiLT5fbmZjdDsKKysJYm9vbCByZXYgPSAhc2tiLT5fbmZjdCwgdXBkID0gZmFsc2U7CisrCV9fYmUzMiBpcDsKKyAKKyAJaWYgKHNrYl9wcm90b2NvbChza2IsIHRydWUpICE9IGh0b25zKEVUSF9QX0lQKSkKKy0JCXJldHVybjsKKysJCXJldHVybiBmYWxzZTsKKyAKKyAJaWYgKCFuZl9jdF9nZXRfdHVwbGVfc2tiKCZ0dXBsZSwgc2tiKSkKKy0JCXJldHVybjsKKysJCXJldHVybiBmYWxzZTsKKyAKKy0Ja2V5cy0+YWRkcnMudjRhZGRycy5zcmMgPSByZXYgPyB0dXBsZS5kc3QudTMuaXAgOiB0dXBsZS5zcmMudTMuaXA7CistCWtleXMtPmFkZHJzLnY0YWRkcnMuZHN0ID0gcmV2ID8gdHVwbGUuc3JjLnUzLmlwIDogdHVwbGUuZHN0LnUzLmlwOworKwlpcCA9IHJldiA/IHR1cGxlLmRzdC51My5pcCA6IHR1cGxlLnNyYy51My5pcDsKKysJaWYgKGlwICE9IGtleXMtPmFkZHJzLnY0YWRkcnMuc3JjKSB7CisrCQlrZXlzLT5hZGRycy52NGFkZHJzLnNyYyA9IGlwOworKwkJdXBkID0gdHJ1ZTsKKysJfQorKwlpcCA9IHJldiA/IHR1cGxlLnNyYy51My5pcCA6IHR1cGxlLmRzdC51My5pcDsKKysJaWYgKGlwICE9IGtleXMtPmFkZHJzLnY0YWRkcnMuZHN0KSB7CisrCQlrZXlzLT5hZGRycy52NGFkZHJzLmRzdCA9IGlwOworKwkJdXBkID0gdHJ1ZTsKKysJfQorIAorIAlpZiAoa2V5cy0+cG9ydHMucG9ydHMpIHsKKy0JCWtleXMtPnBvcnRzLnNyYyA9IHJldiA/IHR1cGxlLmRzdC51LmFsbCA6IHR1cGxlLnNyYy51LmFsbDsKKy0JCWtleXMtPnBvcnRzLmRzdCA9IHJldiA/IHR1cGxlLnNyYy51LmFsbCA6IHR1cGxlLmRzdC51LmFsbDsKKysJCV9fYmUxNiBwb3J0OworKworKwkJcG9ydCA9IHJldiA/IHR1cGxlLmRzdC51LmFsbCA6IHR1cGxlLnNyYy51LmFsbDsKKysJCWlmIChwb3J0ICE9IGtleXMtPnBvcnRzLnNyYykgeworKwkJCWtleXMtPnBvcnRzLnNyYyA9IHBvcnQ7CisrCQkJdXBkID0gdHJ1ZTsKKysJCX0KKysJCXBvcnQgPSByZXYgPyB0dXBsZS5zcmMudS5hbGwgOiB0dXBsZS5kc3QudS5hbGw7CisrCQlpZiAocG9ydCAhPSBrZXlzLT5wb3J0cy5kc3QpIHsKKysJCQlwb3J0ID0ga2V5cy0+cG9ydHMuZHN0OworKwkJCXVwZCA9IHRydWU7CisrCQl9CisgCX0KKysJcmV0dXJuIHVwZDsKKysjZWxzZQorKwlyZXR1cm4gZmFsc2U7CisgI2VuZGlmCisgfQorIAorQEAgLTYyNCwyMyArNjQ2LDM2IEBAIHN0YXRpYyBib29sIGNha2VfZGRzdChpbnQgZmxvd19tb2RlKQorIHN0YXRpYyB1MzIgY2FrZV9oYXNoKHN0cnVjdCBjYWtlX3Rpbl9kYXRhICpxLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorIAkJICAgICBpbnQgZmxvd19tb2RlLCB1MTYgZmxvd19vdmVycmlkZSwgdTE2IGhvc3Rfb3ZlcnJpZGUpCisgeworKwlib29sIGhhc2hfZmxvd3MgPSAoIWZsb3dfb3ZlcnJpZGUgJiYgISEoZmxvd19tb2RlICYgQ0FLRV9GTE9XX0ZMT1dTKSk7CisrCWJvb2wgaGFzaF9ob3N0cyA9ICghaG9zdF9vdmVycmlkZSAmJiAhIShmbG93X21vZGUgJiBDQUtFX0ZMT1dfSE9TVFMpKTsKKysJYm9vbCBuYXRfZW5hYmxlZCA9ICEhKGZsb3dfbW9kZSAmIENBS0VfRkxPV19OQVRfRkxBRyk7CisgCXUzMiBmbG93X2hhc2ggPSAwLCBzcmNob3N0X2hhc2ggPSAwLCBkc3Rob3N0X2hhc2ggPSAwOworIAl1MTYgcmVkdWNlZF9oYXNoLCBzcmNob3N0X2lkeCwgZHN0aG9zdF9pZHg7CisgCXN0cnVjdCBmbG93X2tleXMga2V5cywgaG9zdF9rZXlzOworKwlib29sIHVzZV9za2JoYXNoID0gc2tiLT5sNF9oYXNoOworIAorIAlpZiAodW5saWtlbHkoZmxvd19tb2RlID09IENBS0VfRkxPV19OT05FKSkKKyAJCXJldHVybiAwOworIAorLQkvKiBJZiBib3RoIG92ZXJyaWRlcyBhcmUgc2V0IHdlIGNhbiBza2lwIHBhY2tldCBkaXNzZWN0aW9uIGVudGlyZWx5ICovCistCWlmICgoZmxvd19vdmVycmlkZSB8fCAhKGZsb3dfbW9kZSAmIENBS0VfRkxPV19GTE9XUykpICYmCistCSAgICAoaG9zdF9vdmVycmlkZSB8fCAhKGZsb3dfbW9kZSAmIENBS0VfRkxPV19IT1NUUykpKQorKwkvKiBJZiBib3RoIG92ZXJyaWRlcyBhcmUgc2V0LCBvciB3ZSBjYW4gdXNlIHRoZSBTS0IgaGFzaCBhbmQgbmF0IG1vZGUgaXMKKysJICogZGlzYWJsZWQsIHdlIGNhbiBza2lwIHBhY2tldCBkaXNzZWN0aW9uIGVudGlyZWx5LiBJZiBuYXQgbW9kZSBpcworKwkgKiBlbmFibGVkIHRoZXJlJ3MgYW5vdGhlciBjaGVjayBiZWxvdyBhZnRlciBkb2luZyB0aGUgY29ubnRyYWNrIGxvb2t1cC4KKysJICovCisrCWlmICgoIWhhc2hfZmxvd3MgfHwgKHVzZV9za2JoYXNoICYmICFuYXRfZW5hYmxlZCkpICYmICFoYXNoX2hvc3RzKQorIAkJZ290byBza2lwX2hhc2g7CisgCisgCXNrYl9mbG93X2Rpc3NlY3RfZmxvd19rZXlzKHNrYiwgJmtleXMsCisgCQkJCSAgIEZMT1dfRElTU0VDVE9SX0ZfU1RPUF9BVF9GTE9XX0xBQkVMKTsKKyAKKy0JaWYgKGZsb3dfbW9kZSAmIENBS0VfRkxPV19OQVRfRkxBRykKKy0JCWNha2VfdXBkYXRlX2Zsb3drZXlzKCZrZXlzLCBza2IpOworKwkvKiBEb24ndCB1c2UgdGhlIFNLQiBoYXNoIGlmIHdlIGNoYW5nZSB0aGUgbG9va3VwIGtleXMgZnJvbSBjb25udHJhY2sgKi8KKysJaWYgKG5hdF9lbmFibGVkICYmIGNha2VfdXBkYXRlX2Zsb3drZXlzKCZrZXlzLCBza2IpKQorKwkJdXNlX3NrYmhhc2ggPSBmYWxzZTsKKysKKysJLyogSWYgd2UgY2FuIHN0aWxsIHVzZSB0aGUgU0tCIGhhc2ggYW5kIGRvbid0IG5lZWQgdGhlIGhvc3QgaGFzaCwgd2UgY2FuCisrCSAqIHNraXAgdGhlIHJlc3Qgb2YgdGhlIGhhc2hpbmcgcHJvY2VkdXJlCisrCSAqLworKwlpZiAodXNlX3NrYmhhc2ggJiYgIWhhc2hfaG9zdHMpCisrCQlnb3RvIHNraXBfaGFzaDsKKyAKKyAJLyogZmxvd19oYXNoX2Zyb21fa2V5cygpIHNvcnRzIHRoZSBhZGRyZXNzZXMgYnkgdmFsdWUsIHNvIHdlIGhhdmUKKyAJICogdG8gcHJlc2VydmUgdGhlaXIgb3JkZXIgaW4gYSBzZXBhcmF0ZSBkYXRhIHN0cnVjdHVyZSB0byB0cmVhdAorQEAgLTY3OSwxMiArNzE0LDE0IEBAIHN0YXRpYyB1MzIgY2FrZV9oYXNoKHN0cnVjdCBjYWtlX3Rpbl9kYXQKKyAJLyogVGhpcyAqbXVzdCogYmUgYWZ0ZXIgdGhlIGFib3ZlIHN3aXRjaCwgc2luY2UgYXMgYQorIAkgKiBzaWRlLWVmZmVjdCBpdCBzb3J0cyB0aGUgc3JjIGFuZCBkc3QgYWRkcmVzc2VzLgorIAkgKi8KKy0JaWYgKGZsb3dfbW9kZSAmIENBS0VfRkxPV19GTE9XUykKKysJaWYgKGhhc2hfZmxvd3MgJiYgIXVzZV9za2JoYXNoKQorIAkJZmxvd19oYXNoID0gZmxvd19oYXNoX2Zyb21fa2V5cygma2V5cyk7CisgCisgc2tpcF9oYXNoOgorIAlpZiAoZmxvd19vdmVycmlkZSkKKyAJCWZsb3dfaGFzaCA9IGZsb3dfb3ZlcnJpZGUgLSAxOworKwllbHNlIGlmICh1c2Vfc2tiaGFzaCkKKysJCWZsb3dfaGFzaCA9IHNrYi0+aGFzaDsKKyAJaWYgKGhvc3Rfb3ZlcnJpZGUpIHsKKyAJCWRzdGhvc3RfaGFzaCA9IGhvc3Rfb3ZlcnJpZGUgLSAxOworIAkJc3JjaG9zdF9oYXNoID0gaG9zdF9vdmVycmlkZSAtIDE7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvMzk5LTUuOS1zY2hfY2FrZS1hZGQtUkZDLTg2MjItTEUtUEhCLXN1cHBvcnQtdG8tQ0FLRS1kaWZmc2VyLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzM5OS01Ljktc2NoX2Nha2UtYWRkLVJGQy04NjIyLUxFLVBIQi1zdXBwb3J0LXRvLUNBS0UtZGlmZnNlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTcxYjRjCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzM5OS01Ljktc2NoX2Nha2UtYWRkLVJGQy04NjIyLUxFLVBIQi1zdXBwb3J0LXRvLUNBS0UtZGlmZnNlci5wYXRjaApAQCAtMCwwICsxLDU3IEBACitGcm9tIGI4MzkyODA4ZWIzZmMyOGU1MjNlMjhjYjI1OGM4MWNhMjQ2ZGViOWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLZXZpbiBEYXJieXNoaXJlLUJyeWFudCA8bGRpckBkYXJieXNoaXJlLWJyeWFudC5tZS51az4KK0RhdGU6IFRodSwgMjUgSnVuIDIwMjAgMjI6MTg6MDAgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gc2NoX2Nha2U6IGFkZCBSRkMgODYyMiBMRSBQSEIgc3VwcG9ydCB0byBDQUtFIGRpZmZzZXJ2CisgaGFuZGxpbmcKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworQ2hhbmdlIHRpbiBtYXBwaW5nIG9uIGRpZmZzZXJ2MywgNCAmIDggZm9yIExFIFBIQiBzdXBwb3J0LCBpbiBlc3NlbmNlCittYWtpbmcgTEUgYSBtZW1iZXIgb2YgdGhlIEJ1bGsgdGluLgorCitCdWxrIGhhcyB0aGUgbGVhc3QgcHJpb3JpdHkgYW5kIG1pbmltdW0gb2YgMS8xNnRoIHRvdGFsIGJhbmR3aWR0aCBpbiB0aGUKK2ZhY2Ugb2YgaGlnaGVyIHByaW9yaXR5IHRyYWZmaWMuCisKK05COiBEaWZmc2VydiAzICYgNCBzd2FwIHRpbiAwICYgMSBwcmlvcml0aWVzIGZyb20gdGhlIGRlZmF1bHQgb3JkZXIgYXMKK2ZvdW5kIGluIGRpZmZzZXJ2OCwgaW4gY2FzZSBhbnlvbmUgaXMgd29uZGVyaW5nIHdoeSBpdCBsb29rcyBhIGJpdCBvZGQuCisKK1NpZ25lZC1vZmYtYnk6IEtldmluIERhcmJ5c2hpcmUtQnJ5YW50IDxsZGlyQGRhcmJ5c2hpcmUtYnJ5YW50Lm1lLnVrPgorWyByZXdvcmQgY29tbWl0IG1lc3NhZ2Ugc2xpZ2h0bHkgXQorU2lnbmVkLW9mZi1ieTogVG9rZSBIw7hpbGFuZC1Kw7hyZ2Vuc2VuIDx0b2tlQHJlZGhhdC5jb20+CitTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CistLS0KKyBuZXQvc2NoZWQvc2NoX2Nha2UuYyB8IDggKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCistLS0gYS9uZXQvc2NoZWQvc2NoX2Nha2UuYworKysrIGIvbmV0L3NjaGVkL3NjaF9jYWtlLmMKK0BAIC0zMTIsOCArMzEyLDggQEAgc3RhdGljIGNvbnN0IHU4IHByZWNlZGVuY2VbXSA9IHsKKyB9OworIAorIHN0YXRpYyBjb25zdCB1OCBkaWZmc2VydjhbXSA9IHsKKy0JMiwgNSwgMSwgMiwgNCwgMiwgMiwgMiwKKy0JMCwgMiwgMSwgMiwgMSwgMiwgMSwgMiwKKysJMiwgMCwgMSwgMiwgNCwgMiwgMiwgMiwKKysJMSwgMiwgMSwgMiwgMSwgMiwgMSwgMiwKKyAJNSwgMiwgNCwgMiwgNCwgMiwgNCwgMiwKKyAJMywgMiwgMywgMiwgMywgMiwgMywgMiwKKyAJNiwgMiwgMywgMiwgMywgMiwgMywgMiwKK0BAIC0zMjMsNyArMzIzLDcgQEAgc3RhdGljIGNvbnN0IHU4IGRpZmZzZXJ2OFtdID0geworIH07CisgCisgc3RhdGljIGNvbnN0IHU4IGRpZmZzZXJ2NFtdID0geworLQkwLCAyLCAwLCAwLCAyLCAwLCAwLCAwLAorKwkwLCAxLCAwLCAwLCAyLCAwLCAwLCAwLAorIAkxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorIAkyLCAwLCAyLCAwLCAyLCAwLCAyLCAwLAorIAkyLCAwLCAyLCAwLCAyLCAwLCAyLCAwLAorQEAgLTMzNCw3ICszMzQsNyBAQCBzdGF0aWMgY29uc3QgdTggZGlmZnNlcnY0W10gPSB7CisgfTsKKyAKKyBzdGF0aWMgY29uc3QgdTggZGlmZnNlcnYzW10gPSB7CistCTAsIDAsIDAsIDAsIDIsIDAsIDAsIDAsCisrCTAsIDEsIDAsIDAsIDIsIDAsIDAsIDAsCisgCTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNDAwLXY1LjgtZHQtYmluZGluZ3MtbXRkLXBhcnRpdGlvbi1Eb2N1bWVudC10aGUtc2xjLW1vZGUtcHJvcC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC80MDAtdjUuOC1kdC1iaW5kaW5ncy1tdGQtcGFydGl0aW9uLURvY3VtZW50LXRoZS1zbGMtbW9kZS1wcm9wLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MjY4NDMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNDAwLXY1LjgtZHQtYmluZGluZ3MtbXRkLXBhcnRpdGlvbi1Eb2N1bWVudC10aGUtc2xjLW1vZGUtcHJvcC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIDQyMjkyOGEwNDBmZTE3ZDE3ZGVkNjljNTc5MDNjNzkwODQyM2M3ZWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCb3JpcyBCcmV6aWxsb24gPGJicmV6aWxsb25Aa2VybmVsLm9yZz4KK0RhdGU6IFN1biwgMyBNYXkgMjAyMCAxNzo1MzozOCArMDIwMAorU3ViamVjdDogW1BBVENIXSBkdC1iaW5kaW5nczogbXRkOiBwYXJ0aXRpb246IERvY3VtZW50IHRoZSBzbGMtbW9kZSBwcm9wZXJ0eQorCitBZGQgYSBib29sZWFuIHByb3BlcnR5IHRvIGZvcmNlIGEgc3BlY2lmaWMgcGFydGl0aW9uIGF0dGFjaGVkIHRvIGFuIE1MQworTkFORCB0byBiZSBhY2Nlc3NlZCBpbiBhbiBlbXVsYXRlZCBTTEMgbW9kZSB0aGlzIG1ha2luZyB0aGlzIHBhcnRpdGlvbgoraW1tdW5lIHRvIHBhaXJlZC1wYWdlcyBjb3JydXB0aW9ucy4KKworU2lnbmVkLW9mZi1ieTogQm9yaXMgQnJlemlsbG9uIDxiYnJlemlsbG9uQGtlcm5lbC5vcmc+CitTaWduZWQtb2ZmLWJ5OiBNaXF1ZWwgUmF5bmFsIDxtaXF1ZWwucmF5bmFsQGJvb3RsaW4uY29tPgorTGluazogaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvbGludXgtbXRkLzIwMjAwNTAzMTU1MzQxLjE2NzEyLTYtbWlxdWVsLnJheW5hbEBib290bGluLmNvbQorLS0tCisgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL210ZC9wYXJ0aXRpb24udHh0IHwgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisKKy0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tdGQvcGFydGl0aW9uLnR4dAorKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL210ZC9wYXJ0aXRpb24udHh0CitAQCAtNjEsNiArNjEsOSBAQCBPcHRpb25hbCBwcm9wZXJ0aWVzOgorICAgY2xvYmJlcmVkLgorIC0gbG9jayA6IERvIG5vdCB1bmxvY2sgdGhlIHBhcnRpdGlvbiBhdCBpbml0aWFsaXphdGlvbiB0aW1lIChub3Qgc3VwcG9ydGVkIG9uCisgICBhbGwgZGV2aWNlcykKKystIHNsYy1tb2RlOiBUaGlzIHBhcmFtZXRlciwgaWYgcHJlc2VudCwgYWxsb3dzIG9uZSB0byBlbXVsYXRlIFNMQyBtb2RlIG9uIGEKKysgIHBhcnRpdGlvbiBhdHRhY2hlZCB0byBhbiBNTEMgTkFORCB0aHVzIG1ha2luZyB0aGlzIHBhcnRpdGlvbiBpbW11bmUgdG8KKysgIHBhaXJlZC1wYWdlcyBjb3JydXB0aW9ucworIAorIEV4YW1wbGVzOgorIApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzQwMS12NS4xMS1kdC1iaW5kaW5ncy1tdGQtY29udmVydC1maXhlZC1wYXJ0aXRpb25zLXRvLXRoZS1qc29uLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzQwMS12NS4xMS1kdC1iaW5kaW5ncy1tdGQtY29udmVydC1maXhlZC1wYXJ0aXRpb25zLXRvLXRoZS1qc29uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZGVkNDMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNDAxLXY1LjExLWR0LWJpbmRpbmdzLW10ZC1jb252ZXJ0LWZpeGVkLXBhcnRpdGlvbnMtdG8tdGhlLWpzb24ucGF0Y2gKQEAgLTAsMCArMSwzMjQgQEAKK0Zyb20gMDRlOWFiNzUyNjc0ODkyMjQzNjRmYTUxMGE4OGFkYTgzZTExYzMyNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9SYWZhPUM1PTgyPTIwTWk9QzU9ODJlY2tpPz0gPHJhZmFsQG1pbGVja2kucGw+CitEYXRlOiBUaHUsIDEwIERlYyAyMDIwIDE4OjIzOjUyICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGR0LWJpbmRpbmdzOiBtdGQ6IGNvbnZlcnQgImZpeGVkLXBhcnRpdGlvbnMiIHRvIHRoZQorIGpzb24tc2NoZW1hCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK1RoaXMgc3RhbmRhcmRpemVzIGl0cyBkb2N1bWVudGF0aW9uLCBhbGxvd3MgdmFsaWRhdGluZyB3aXRoIE1ha2VmaWxlCitjaGVja3MgYW5kIGhlbHBzIHdyaXRpbmcgRFRTIGZpbGVzLgorCitOb3RpY2VhYmxlIGNoYW5nZXM6CisxLiBEcm9wcGVkICJQYXJ0aXRpb25zIGNhbiBiZSByZXByZXNlbnRlZCBieSBzdWItbm9kZXMgb2YgYSBmbGFzaAorICAgZGV2aWNlLiIgYXMgd2UgYWxzbyBzdXBwb3J0IHN1YnBhcnRpdGlvbnMgKGRvbid0IGhhdmUgdG8gYmUgcGFydCBvZgorICAgZmxhc2ggZGV2aWNlIG5vZGUpCisyLiBEcm9wcGVkICJ0byBMaW51eCIgYXMgYmluZGluZ3MgYXJlIG1lYW50IHRvIGJlIG9zIGFnbm9zdGljLgorCitTaWduZWQtb2ZmLWJ5OiBSYWZhxYIgTWnFgmVja2kgPHJhZmFsQG1pbGVja2kucGw+CitMaW5rOiBodHRwczovL2xvcmUua2VybmVsLm9yZy9yLzIwMjAxMjEwMTcyMzUyLjMxNjMyLTEtemFqZWM1QGdtYWlsLmNvbQorU2lnbmVkLW9mZi1ieTogUm9iIEhlcnJpbmcgPHJvYmhAa2VybmVsLm9yZz4KKy0tLQorIC4uLi9kZXZpY2V0cmVlL2JpbmRpbmdzL210ZC9wYXJ0aXRpb24udHh0ICAgICB8IDEzMSArLS0tLS0tLS0tLS0tLS0KKyAuLi4vbXRkL3BhcnRpdGlvbnMvZml4ZWQtcGFydGl0aW9ucy55YW1sICAgICAgfCAxNTIgKysrKysrKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAxNTQgaW5zZXJ0aW9ucygrKSwgMTI5IGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbXRkL3BhcnRpdGlvbnMvZml4ZWQtcGFydGl0aW9ucy55YW1sCisKKy0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tdGQvcGFydGl0aW9uLnR4dAorKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL210ZC9wYXJ0aXRpb24udHh0CitAQCAtMjQsMTM3ICsyNCwxMCBAQCBhbm90aGVyIHBhcnRpdGlvbmluZyBtZXRob2QuCisgQXZhaWxhYmxlIGJpbmRpbmdzIGFyZSBsaXN0ZWQgaW4gdGhlICJwYXJ0aXRpb25zIiBzdWJkaXJlY3RvcnkuCisgCisgCistRml4ZWQgUGFydGl0aW9ucworLT09PT09PT09PT09PT09PT0KKy0KKy1QYXJ0aXRpb25zIGNhbiBiZSByZXByZXNlbnRlZCBieSBzdWItbm9kZXMgb2YgYSBmbGFzaCBkZXZpY2UuIFRoaXMgY2FuIGJlIHVzZWQKKy1vbiBwbGF0Zm9ybXMgd2hpY2ggaGF2ZSBzdHJvbmcgY29udmVudGlvbnMgYWJvdXQgd2hpY2ggcG9ydGlvbnMgb2YgYSBmbGFzaCBhcmUKKy11c2VkIGZvciB3aGF0IHB1cnBvc2VzLCBidXQgd2hpY2ggZG9uJ3QgdXNlIGFuIG9uLWZsYXNoIHBhcnRpdGlvbiB0YWJsZSBzdWNoCistYXMgUmVkQm9vdC4KKy0KKy1UaGUgcGFydGl0aW9uIHRhYmxlIHNob3VsZCBiZSBhIHN1Ym5vZGUgb2YgdGhlIGZsYXNoIG5vZGUgYW5kIHNob3VsZCBiZSBuYW1lZAorLSdwYXJ0aXRpb25zJy4gVGhpcyBub2RlIHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgcHJvcGVydHk6CistLSBjb21wYXRpYmxlIDogKHJlcXVpcmVkKSBtdXN0IGJlICJmaXhlZC1wYXJ0aXRpb25zIgorLVBhcnRpdGlvbnMgYXJlIHRoZW4gZGVmaW5lZCBpbiBzdWJub2RlcyBvZiB0aGUgcGFydGl0aW9ucyBub2RlLgorK0RlcHJlY2F0ZWQ6IHBhcnRpdGlvbnMgZGVmaW5lZCBpbiBmbGFzaCBub2RlCisrPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAKKyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcGFydGl0aW9ucyBhcyBkaXJlY3Qgc3Vibm9kZXMgb2YgdGhlIGZsYXNoIGRldmljZSBhcmUKKyBzdXBwb3J0ZWQuIFRoaXMgdXNlIGlzIGRpc2NvdXJhZ2VkLgorIE5PVEU6IGFsc28gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBkaXJlY3Qgc3Vibm9kZXMgdGhhdCBoYXZlIGEgY29tcGF0aWJsZQorIHN0cmluZyBhcmUgbm90IGNvbnNpZGVyZWQgcGFydGl0aW9ucywgYXMgdGhleSBtYXkgYmUgdXNlZCBmb3Igb3RoZXIgYmluZGluZ3MuCistCistI2FkZHJlc3MtY2VsbHMgJiAjc2l6ZS1jZWxscyBtdXN0IGJvdGggYmUgcHJlc2VudCBpbiB0aGUgcGFydGl0aW9ucyBzdWJub2RlIG9mIHRoZQorLWZsYXNoIGRldmljZS4gVGhlcmUgYXJlIHR3byB2YWxpZCB2YWx1ZXMgZm9yIGJvdGg6CistPDE+OiBmb3IgcGFydGl0aW9ucyB0aGF0IHJlcXVpcmUgYSBzaW5nbGUgMzItYml0IGNlbGwgdG8gcmVwcmVzZW50IHRoZWlyCistICAgICBzaXplL2FkZHJlc3MgKGFrYSB0aGUgdmFsdWUgaXMgYmVsb3cgNCBHaUIpCistPDI+OiBmb3IgcGFydGl0aW9ucyB0aGF0IHJlcXVpcmUgdHdvIDMyLWJpdCBjZWxscyB0byByZXByZXNlbnQgdGhlaXIKKy0gICAgIHNpemUvYWRkcmVzcyAoYWthIHRoZSB2YWx1ZSBpcyA0IEdpQiBvciBncmVhdGVyKS4KKy0KKy1SZXF1aXJlZCBwcm9wZXJ0aWVzOgorLS0gcmVnIDogVGhlIHBhcnRpdGlvbidzIG9mZnNldCBhbmQgc2l6ZSB3aXRoaW4gdGhlIGZsYXNoCistCistT3B0aW9uYWwgcHJvcGVydGllczoKKy0tIGxhYmVsIDogVGhlIGxhYmVsIC8gbmFtZSBmb3IgdGhpcyBwYXJ0aXRpb24uICBJZiBvbWl0dGVkLCB0aGUgbGFiZWwgaXMgdGFrZW4KKy0gIGZyb20gdGhlIG5vZGUgbmFtZSAoZXhjbHVkaW5nIHRoZSB1bml0IGFkZHJlc3MpLgorLS0gcmVhZC1vbmx5IDogVGhpcyBwYXJhbWV0ZXIsIGlmIHByZXNlbnQsIGlzIGEgaGludCB0byBMaW51eCB0aGF0IHRoaXMKKy0gIHBhcnRpdGlvbiBzaG91bGQgb25seSBiZSBtb3VudGVkIHJlYWQtb25seS4gVGhpcyBpcyB1c3VhbGx5IHVzZWQgZm9yIGZsYXNoCistICBwYXJ0aXRpb25zIGNvbnRhaW5pbmcgZWFybHktYm9vdCBmaXJtd2FyZSBpbWFnZXMgb3IgZGF0YSB3aGljaCBzaG91bGQgbm90IGJlCistICBjbG9iYmVyZWQuCistLSBsb2NrIDogRG8gbm90IHVubG9jayB0aGUgcGFydGl0aW9uIGF0IGluaXRpYWxpemF0aW9uIHRpbWUgKG5vdCBzdXBwb3J0ZWQgb24KKy0gIGFsbCBkZXZpY2VzKQorLS0gc2xjLW1vZGU6IFRoaXMgcGFyYW1ldGVyLCBpZiBwcmVzZW50LCBhbGxvd3Mgb25lIHRvIGVtdWxhdGUgU0xDIG1vZGUgb24gYQorLSAgcGFydGl0aW9uIGF0dGFjaGVkIHRvIGFuIE1MQyBOQU5EIHRodXMgbWFraW5nIHRoaXMgcGFydGl0aW9uIGltbXVuZSB0bworLSAgcGFpcmVkLXBhZ2VzIGNvcnJ1cHRpb25zCistCistRXhhbXBsZXM6CistCistCistZmxhc2hAMCB7CistCXBhcnRpdGlvbnMgeworLQkJY29tcGF0aWJsZSA9ICJmaXhlZC1wYXJ0aXRpb25zIjsKKy0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OworLQkJI3NpemUtY2VsbHMgPSA8MT47CistCistCQlwYXJ0aXRpb25AMCB7CistCQkJbGFiZWwgPSAidS1ib290IjsKKy0JCQlyZWcgPSA8MHgwMDAwMDAwIDB4MTAwMDAwPjsKKy0JCQlyZWFkLW9ubHk7CistCQl9OworLQorLQkJdWltYWdlQDEwMDAwMCB7CistCQkJcmVnID0gPDB4MDEwMDAwMCAweDIwMDAwMD47CistCQl9OworLQl9OworLX07CistCistZmxhc2hAMSB7CistCXBhcnRpdGlvbnMgeworLQkJY29tcGF0aWJsZSA9ICJmaXhlZC1wYXJ0aXRpb25zIjsKKy0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OworLQkJI3NpemUtY2VsbHMgPSA8Mj47CistCistCQkvKiBhIDQgR2lCIHBhcnRpdGlvbiAqLworLQkJcGFydGl0aW9uQDAgeworLQkJCWxhYmVsID0gImZpbGVzeXN0ZW0iOworLQkJCXJlZyA9IDwweDAwMDAwMDAwIDB4MSAweDAwMDAwMDAwPjsKKy0JCX07CistCX07CistfTsKKy0KKy1mbGFzaEAyIHsKKy0JcGFydGl0aW9ucyB7CistCQljb21wYXRpYmxlID0gImZpeGVkLXBhcnRpdGlvbnMiOworLQkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CistCQkjc2l6ZS1jZWxscyA9IDwyPjsKKy0KKy0JCS8qIGFuIDggR2lCIHBhcnRpdGlvbiAqLworLQkJcGFydGl0aW9uQDAgeworLQkJCWxhYmVsID0gImZpbGVzeXN0ZW0gIzEiOworLQkJCXJlZyA9IDwweDAgMHgwMDAwMDAwMCAweDIgMHgwMDAwMDAwMD47CistCQl9OworLQorLQkJLyogYSA0IEdpQiBwYXJ0aXRpb24gKi8KKy0JCXBhcnRpdGlvbkAyMDAwMDAwMDAgeworLQkJCWxhYmVsID0gImZpbGVzeXN0ZW0gIzIiOworLQkJCXJlZyA9IDwweDIgMHgwMDAwMDAwMCAweDEgMHgwMDAwMDAwMD47CistCQl9OworLQl9OworLX07CistCistZmxhc2hAMyB7CistCXBhcnRpdGlvbnMgeworLQkJY29tcGF0aWJsZSA9ICJmaXhlZC1wYXJ0aXRpb25zIjsKKy0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OworLQkJI3NpemUtY2VsbHMgPSA8MT47CistCistCQlwYXJ0aXRpb25AMCB7CistCQkJbGFiZWwgPSAiYm9vdGxvYWRlciI7CistCQkJcmVnID0gPDB4MDAwMDAwIDB4MTAwMDAwPjsKKy0JCQlyZWFkLW9ubHk7CistCQl9OworLQorLQkJZmlybXdhcmVAMTAwMDAwIHsKKy0JCQlsYWJlbCA9ICJmaXJtd2FyZSI7CistCQkJcmVnID0gPDB4MTAwMDAwIDB4ZTAwMDAwPjsKKy0JCQljb21wYXRpYmxlID0gImJyY20sdHJ4IjsKKy0JCX07CistCistCQljYWxpYnJhdGlvbkBmMDAwMDAgeworLQkJCWxhYmVsID0gImNhbGlicmF0aW9uIjsKKy0JCQlyZWcgPSA8MHhmMDAwMDAgMHgxMDAwMDA+OworLQkJCWNvbXBhdGlibGUgPSAiZml4ZWQtcGFydGl0aW9ucyI7CistCQkJcmFuZ2VzID0gPDAgMHhmMDAwMDAgMHgxMDAwMDA+OworLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworLQkJCSNzaXplLWNlbGxzID0gPDE+OworLQorLQkJCXBhcnRpdGlvbkAwIHsKKy0JCQkJbGFiZWwgPSAid2lmaTAiOworLQkJCQlyZWcgPSA8MHgwMDAwMDAgMHgwODAwMDA+OworLQkJCX07CistCistCQkJcGFydGl0aW9uQDgwMDAwIHsKKy0JCQkJbGFiZWwgPSAid2lmaTEiOworLQkJCQlyZWcgPSA8MHgwODAwMDAgMHgwODAwMDA+OworLQkJCX07CistCQl9OworLQl9OworLX07CistLS0gL2Rldi9udWxsCisrKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbXRkL3BhcnRpdGlvbnMvZml4ZWQtcGFydGl0aW9ucy55YW1sCitAQCAtMCwwICsxLDE1MiBAQAorKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UKKyslWUFNTCAxLjIKKystLS0KKyskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL210ZC9wYXJ0aXRpb25zL2ZpeGVkLXBhcnRpdGlvbnMueWFtbCMKKyskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCMKKysKKyt0aXRsZTogRml4ZWQgcGFydGl0aW9ucworKworK2Rlc2NyaXB0aW9uOiB8CisrICBUaGlzIGJpbmRpbmcgY2FuIGJlIHVzZWQgb24gcGxhdGZvcm1zIHdoaWNoIGhhdmUgc3Ryb25nIGNvbnZlbnRpb25zIGFib3V0CisrICB3aGljaCBwb3J0aW9ucyBvZiBhIGZsYXNoIGFyZSB1c2VkIGZvciB3aGF0IHB1cnBvc2VzLCBidXQgd2hpY2ggZG9uJ3QgdXNlIGFuCisrICBvbi1mbGFzaCBwYXJ0aXRpb24gdGFibGUgc3VjaCBhcyBSZWRCb290LgorKworKyAgVGhlIHBhcnRpdGlvbiB0YWJsZSBzaG91bGQgYmUgYSBub2RlIG5hbWVkICJwYXJ0aXRpb25zIi4gUGFydGl0aW9ucyBhcmUgdGhlbgorKyAgZGVmaW5lZCBhcyBzdWJub2Rlcy4KKysKKyttYWludGFpbmVyczoKKysgIC0gUmFmYcWCIE1pxYJlY2tpIDxyYWZhbEBtaWxlY2tpLnBsPgorKworK3Byb3BlcnRpZXM6CisrICBjb21wYXRpYmxlOgorKyAgICBjb25zdDogZml4ZWQtcGFydGl0aW9ucworKworKyAgIiNhZGRyZXNzLWNlbGxzIjogdHJ1ZQorKworKyAgIiNzaXplLWNlbGxzIjogdHJ1ZQorKworK3BhdHRlcm5Qcm9wZXJ0aWVzOgorKyAgIkBbMC05YS1mXSskIjoKKysgICAgZGVzY3JpcHRpb246IG5vZGUgZGVzY3JpYmluZyBhIHNpbmdsZSBmbGFzaCBwYXJ0aXRpb24KKysgICAgdHlwZTogb2JqZWN0CisrCisrICAgIHByb3BlcnRpZXM6CisrICAgICAgcmVnOgorKyAgICAgICAgZGVzY3JpcHRpb246IHBhcnRpdGlvbidzIG9mZnNldCBhbmQgc2l6ZSB3aXRoaW4gdGhlIGZsYXNoCisrICAgICAgICBtYXhJdGVtczogMQorKworKyAgICAgIGxhYmVsOgorKyAgICAgICAgZGVzY3JpcHRpb246IFRoZSBsYWJlbCAvIG5hbWUgZm9yIHRoaXMgcGFydGl0aW9uLiBJZiBvbWl0dGVkLCB0aGUgbGFiZWwKKysgICAgICAgICAgaXMgdGFrZW4gZnJvbSB0aGUgbm9kZSBuYW1lIChleGNsdWRpbmcgdGhlIHVuaXQgYWRkcmVzcykuCisrCisrICAgICAgcmVhZC1vbmx5OgorKyAgICAgICAgZGVzY3JpcHRpb246IFRoaXMgcGFyYW1ldGVyLCBpZiBwcmVzZW50LCBpcyBhIGhpbnQgdGhhdCB0aGlzIHBhcnRpdGlvbgorKyAgICAgICAgICBzaG91bGQgb25seSBiZSBtb3VudGVkIHJlYWQtb25seS4gVGhpcyBpcyB1c3VhbGx5IHVzZWQgZm9yIGZsYXNoCisrICAgICAgICAgIHBhcnRpdGlvbnMgY29udGFpbmluZyBlYXJseS1ib290IGZpcm13YXJlIGltYWdlcyBvciBkYXRhIHdoaWNoIHNob3VsZAorKyAgICAgICAgICBub3QgYmUgY2xvYmJlcmVkLgorKyAgICAgICAgdHlwZTogYm9vbGVhbgorKworKyAgICAgIGxvY2s6CisrICAgICAgICBkZXNjcmlwdGlvbjogRG8gbm90IHVubG9jayB0aGUgcGFydGl0aW9uIGF0IGluaXRpYWxpemF0aW9uIHRpbWUgKG5vdAorKyAgICAgICAgICBzdXBwb3J0ZWQgb24gYWxsIGRldmljZXMpCisrICAgICAgICB0eXBlOiBib29sZWFuCisrCisrICAgICAgc2xjLW1vZGU6CisrICAgICAgICBkZXNjcmlwdGlvbjogVGhpcyBwYXJhbWV0ZXIsIGlmIHByZXNlbnQsIGFsbG93cyBvbmUgdG8gZW11bGF0ZSBTTEMgbW9kZQorKyAgICAgICAgICBvbiBhIHBhcnRpdGlvbiBhdHRhY2hlZCB0byBhbiBNTEMgTkFORCB0aHVzIG1ha2luZyB0aGlzIHBhcnRpdGlvbgorKyAgICAgICAgICBpbW11bmUgdG8gcGFpcmVkLXBhZ2VzIGNvcnJ1cHRpb25zCisrICAgICAgICB0eXBlOiBib29sZWFuCisrCisrICAgIHJlcXVpcmVkOgorKyAgICAgIC0gcmVnCisrCisrcmVxdWlyZWQ6CisrICAtICIjYWRkcmVzcy1jZWxscyIKKysgIC0gIiNzaXplLWNlbGxzIgorKworK2FkZGl0aW9uYWxQcm9wZXJ0aWVzOiB0cnVlCisrCisrZXhhbXBsZXM6CisrICAtIHwKKysgICAgcGFydGl0aW9ucyB7CisrICAgICAgICBjb21wYXRpYmxlID0gImZpeGVkLXBhcnRpdGlvbnMiOworKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSA8MT47CisrICAgICAgICAjc2l6ZS1jZWxscyA9IDwxPjsKKysKKysgICAgICAgIHBhcnRpdGlvbkAwIHsKKysgICAgICAgICAgICBsYWJlbCA9ICJ1LWJvb3QiOworKyAgICAgICAgICAgIHJlZyA9IDwweDAwMDAwMDAgMHgxMDAwMDA+OworKyAgICAgICAgICAgIHJlYWQtb25seTsKKysgICAgICAgIH07CisrCisrICAgICAgICB1aW1hZ2VAMTAwMDAwIHsKKysgICAgICAgICAgICByZWcgPSA8MHgwMTAwMDAwIDB4MjAwMDAwPjsKKysgICAgICAgIH07CisrICAgIH07CisrICAtIHwKKysgICAgcGFydGl0aW9ucyB7CisrICAgICAgICBjb21wYXRpYmxlID0gImZpeGVkLXBhcnRpdGlvbnMiOworKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSA8MT47CisrICAgICAgICAjc2l6ZS1jZWxscyA9IDwyPjsKKysKKysgICAgICAgIC8qIGEgNCBHaUIgcGFydGl0aW9uICovCisrICAgICAgICBwYXJ0aXRpb25AMCB7CisrICAgICAgICAgICAgbGFiZWwgPSAiZmlsZXN5c3RlbSI7CisrICAgICAgICAgICAgcmVnID0gPDB4MDAwMDAwMDAgMHgxIDB4MDAwMDAwMDA+OworKyAgICAgICAgfTsKKysgICAgfTsKKysgIC0gfAorKyAgICBwYXJ0aXRpb25zIHsKKysgICAgICAgIGNvbXBhdGlibGUgPSAiZml4ZWQtcGFydGl0aW9ucyI7CisrICAgICAgICAjYWRkcmVzcy1jZWxscyA9IDwyPjsKKysgICAgICAgICNzaXplLWNlbGxzID0gPDI+OworKworKyAgICAgICAgLyogYW4gOCBHaUIgcGFydGl0aW9uICovCisrICAgICAgICBwYXJ0aXRpb25AMCB7CisrICAgICAgICAgICAgbGFiZWwgPSAiZmlsZXN5c3RlbSAjMSI7CisrICAgICAgICAgICAgcmVnID0gPDB4MCAweDAwMDAwMDAwIDB4MiAweDAwMDAwMDAwPjsKKysgICAgICAgIH07CisrCisrICAgICAgICAvKiBhIDQgR2lCIHBhcnRpdGlvbiAqLworKyAgICAgICAgcGFydGl0aW9uQDIwMDAwMDAwMCB7CisrICAgICAgICAgICAgbGFiZWwgPSAiZmlsZXN5c3RlbSAjMiI7CisrICAgICAgICAgICAgcmVnID0gPDB4MiAweDAwMDAwMDAwIDB4MSAweDAwMDAwMDAwPjsKKysgICAgICAgIH07CisrICAgIH07CisrICAtIHwKKysgICAgcGFydGl0aW9ucyB7CisrICAgICAgICBjb21wYXRpYmxlID0gImZpeGVkLXBhcnRpdGlvbnMiOworKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSA8MT47CisrICAgICAgICAjc2l6ZS1jZWxscyA9IDwxPjsKKysKKysgICAgICAgIHBhcnRpdGlvbkAwIHsKKysgICAgICAgICAgICBsYWJlbCA9ICJib290bG9hZGVyIjsKKysgICAgICAgICAgICByZWcgPSA8MHgwMDAwMDAgMHgxMDAwMDA+OworKyAgICAgICAgICAgIHJlYWQtb25seTsKKysgICAgICAgIH07CisrCisrICAgICAgICBmaXJtd2FyZUAxMDAwMDAgeworKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSAiYnJjbSx0cngiOworKyAgICAgICAgICAgIGxhYmVsID0gImZpcm13YXJlIjsKKysgICAgICAgICAgICByZWcgPSA8MHgxMDAwMDAgMHhlMDAwMDA+OworKyAgICAgICAgfTsKKysKKysgICAgICAgIGNhbGlicmF0aW9uQGYwMDAwMCB7CisrICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJmaXhlZC1wYXJ0aXRpb25zIjsKKysgICAgICAgICAgICBsYWJlbCA9ICJjYWxpYnJhdGlvbiI7CisrICAgICAgICAgICAgcmVnID0gPDB4ZjAwMDAwIDB4MTAwMDAwPjsKKysgICAgICAgICAgICByYW5nZXMgPSA8MCAweGYwMDAwMCAweDEwMDAwMD47CisrICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSA8MT47CisrICAgICAgICAgICAgI3NpemUtY2VsbHMgPSA8MT47CisrCisrICAgICAgICAgICAgcGFydGl0aW9uQDAgeworKyAgICAgICAgICAgICAgICBsYWJlbCA9ICJ3aWZpMCI7CisrICAgICAgICAgICAgICAgIHJlZyA9IDwweDAwMDAwMCAweDA4MDAwMD47CisrICAgICAgICAgICAgfTsKKysKKysgICAgICAgICAgICBwYXJ0aXRpb25AODAwMDAgeworKyAgICAgICAgICAgICAgICBsYWJlbCA9ICJ3aWZpMSI7CisrICAgICAgICAgICAgICAgIHJlZyA9IDwweDA4MDAwMCAweDA4MDAwMD47CisrICAgICAgICAgICAgfTsKKysgICAgICAgIH07CisrICAgIH07CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNDAyLXY1LjEyLTAwMDEtZHQtYmluZGluZ3MtbXRkLW1vdmUtcGFydGl0aW9uLWJpbmRpbmctdG8taXRzLW93bi1maS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC80MDItdjUuMTItMDAwMS1kdC1iaW5kaW5ncy1tdGQtbW92ZS1wYXJ0aXRpb24tYmluZGluZy10by1pdHMtb3duLWZpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYjExNzkKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNDAyLXY1LjEyLTAwMDEtZHQtYmluZGluZ3MtbXRkLW1vdmUtcGFydGl0aW9uLWJpbmRpbmctdG8taXRzLW93bi1maS5wYXRjaApAQCAtMCwwICsxLDExNSBAQAorRnJvbSA2NDE4NTIyMDIyYzcwNmZkODY3YjAwYjI1NzFlZGJhNDhiOGZhOGM3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP1JhZmE9QzU9ODI9MjBNaT1DNT04MmVja2k/PSA8cmFmYWxAbWlsZWNraS5wbD4KK0RhdGU6IFRodSwgMTEgRmViIDIwMjEgMjM6MDQ6MjUgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gZHQtYmluZGluZ3M6IG10ZDogbW92ZSBwYXJ0aXRpb24gYmluZGluZyB0byBpdHMgb3duIGZpbGUKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworU2luZ2xlIHBhcnRpdGlvbiBiaW5kaW5nIGlzIHF1aXRlIGNvbW1vbiBhbmQgbWF5IGJlOgorMS4gVXNlZCBieSBtdWx0aXBsZSBwYXJzZXJzCisyLiBFeHRlbmRlZCBmb3IgbW9yZSBzcGVjaWZpYyBjYXNlcworCitNb3ZlIGl0IHRvIHNlcGFyYXRlZCBmaWxlIHRvIGF2b2lkIGNvZGUgZHVwbGljYXRpb24uCisKK1NpZ25lZC1vZmYtYnk6IFJhZmHFgiBNacWCZWNraSA8cmFmYWxAbWlsZWNraS5wbD4KK1Jldmlld2VkLWJ5OiBSb2IgSGVycmluZyA8cm9iaEBrZXJuZWwub3JnPgorU2lnbmVkLW9mZi1ieTogUmljaGFyZCBXZWluYmVyZ2VyIDxyaWNoYXJkQG5vZC5hdD4KKy0tLQorIC4uLi9tdGQvcGFydGl0aW9ucy9maXhlZC1wYXJ0aXRpb25zLnlhbWwgICAgICB8IDMzICstLS0tLS0tLS0tLS0KKyAuLi4vYmluZGluZ3MvbXRkL3BhcnRpdGlvbnMvcGFydGl0aW9uLnlhbWwgICAgfCA0NyArKysrKysrKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA0OCBpbnNlcnRpb25zKCspLCAzMiBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL210ZC9wYXJ0aXRpb25zL3BhcnRpdGlvbi55YW1sCisKKy0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tdGQvcGFydGl0aW9ucy9maXhlZC1wYXJ0aXRpb25zLnlhbWwKKysrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tdGQvcGFydGl0aW9ucy9maXhlZC1wYXJ0aXRpb25zLnlhbWwKK0BAIC0yNywzOCArMjcsNyBAQCBwcm9wZXJ0aWVzOgorIAorIHBhdHRlcm5Qcm9wZXJ0aWVzOgorICAgIkBbMC05YS1mXSskIjoKKy0gICAgZGVzY3JpcHRpb246IG5vZGUgZGVzY3JpYmluZyBhIHNpbmdsZSBmbGFzaCBwYXJ0aXRpb24KKy0gICAgdHlwZTogb2JqZWN0CistCistICAgIHByb3BlcnRpZXM6CistICAgICAgcmVnOgorLSAgICAgICAgZGVzY3JpcHRpb246IHBhcnRpdGlvbidzIG9mZnNldCBhbmQgc2l6ZSB3aXRoaW4gdGhlIGZsYXNoCistICAgICAgICBtYXhJdGVtczogMQorLQorLSAgICAgIGxhYmVsOgorLSAgICAgICAgZGVzY3JpcHRpb246IFRoZSBsYWJlbCAvIG5hbWUgZm9yIHRoaXMgcGFydGl0aW9uLiBJZiBvbWl0dGVkLCB0aGUgbGFiZWwKKy0gICAgICAgICAgaXMgdGFrZW4gZnJvbSB0aGUgbm9kZSBuYW1lIChleGNsdWRpbmcgdGhlIHVuaXQgYWRkcmVzcykuCistCistICAgICAgcmVhZC1vbmx5OgorLSAgICAgICAgZGVzY3JpcHRpb246IFRoaXMgcGFyYW1ldGVyLCBpZiBwcmVzZW50LCBpcyBhIGhpbnQgdGhhdCB0aGlzIHBhcnRpdGlvbgorLSAgICAgICAgICBzaG91bGQgb25seSBiZSBtb3VudGVkIHJlYWQtb25seS4gVGhpcyBpcyB1c3VhbGx5IHVzZWQgZm9yIGZsYXNoCistICAgICAgICAgIHBhcnRpdGlvbnMgY29udGFpbmluZyBlYXJseS1ib290IGZpcm13YXJlIGltYWdlcyBvciBkYXRhIHdoaWNoIHNob3VsZAorLSAgICAgICAgICBub3QgYmUgY2xvYmJlcmVkLgorLSAgICAgICAgdHlwZTogYm9vbGVhbgorLQorLSAgICAgIGxvY2s6CistICAgICAgICBkZXNjcmlwdGlvbjogRG8gbm90IHVubG9jayB0aGUgcGFydGl0aW9uIGF0IGluaXRpYWxpemF0aW9uIHRpbWUgKG5vdAorLSAgICAgICAgICBzdXBwb3J0ZWQgb24gYWxsIGRldmljZXMpCistICAgICAgICB0eXBlOiBib29sZWFuCistCistICAgICAgc2xjLW1vZGU6CistICAgICAgICBkZXNjcmlwdGlvbjogVGhpcyBwYXJhbWV0ZXIsIGlmIHByZXNlbnQsIGFsbG93cyBvbmUgdG8gZW11bGF0ZSBTTEMgbW9kZQorLSAgICAgICAgICBvbiBhIHBhcnRpdGlvbiBhdHRhY2hlZCB0byBhbiBNTEMgTkFORCB0aHVzIG1ha2luZyB0aGlzIHBhcnRpdGlvbgorLSAgICAgICAgICBpbW11bmUgdG8gcGFpcmVkLXBhZ2VzIGNvcnJ1cHRpb25zCistICAgICAgICB0eXBlOiBib29sZWFuCistCistICAgIHJlcXVpcmVkOgorLSAgICAgIC0gcmVnCisrICAgICRyZWY6ICJwYXJ0aXRpb24ueWFtbCMiCisgCisgcmVxdWlyZWQ6CisgICAtICIjYWRkcmVzcy1jZWxscyIKKy0tLSAvZGV2L251bGwKKysrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tdGQvcGFydGl0aW9ucy9wYXJ0aXRpb24ueWFtbAorQEAgLTAsMCArMSw0NyBAQAorKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UKKyslWUFNTCAxLjIKKystLS0KKyskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL210ZC9wYXJ0aXRpb25zL3BhcnRpdGlvbi55YW1sIworKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sIworKworK3RpdGxlOiBQYXJ0aXRpb24KKysKKytkZXNjcmlwdGlvbjogfAorKyAgVGhpcyBiaW5kaW5nIGRlc2NyaWJlcyBhIHNpbmdsZSBmbGFzaCBwYXJ0aXRpb24uIEVhY2ggcGFydGl0aW9uIG11c3QgaGF2ZSBpdHMKKysgIHJlbGF0aXZlIG9mZnNldCBhbmQgc2l6ZSBzcGVjaWZpZWQuIERlcGVuZGluZyBvbiBwYXJ0aXRpb24gZnVuY3Rpb24gZXh0cmEKKysgIHByb3BlcnRpZXMgY2FuIGJlIHVzZWQuCisrCisrbWFpbnRhaW5lcnM6CisrICAtIFJhZmHFgiBNacWCZWNraSA8cmFmYWxAbWlsZWNraS5wbD4KKysKKytwcm9wZXJ0aWVzOgorKyAgcmVnOgorKyAgICBkZXNjcmlwdGlvbjogcGFydGl0aW9uJ3Mgb2Zmc2V0IGFuZCBzaXplIHdpdGhpbiB0aGUgZmxhc2gKKysgICAgbWF4SXRlbXM6IDEKKysKKysgIGxhYmVsOgorKyAgICBkZXNjcmlwdGlvbjogVGhlIGxhYmVsIC8gbmFtZSBmb3IgdGhpcyBwYXJ0aXRpb24uIElmIG9taXR0ZWQsIHRoZSBsYWJlbAorKyAgICAgIGlzIHRha2VuIGZyb20gdGhlIG5vZGUgbmFtZSAoZXhjbHVkaW5nIHRoZSB1bml0IGFkZHJlc3MpLgorKworKyAgcmVhZC1vbmx5OgorKyAgICBkZXNjcmlwdGlvbjogVGhpcyBwYXJhbWV0ZXIsIGlmIHByZXNlbnQsIGlzIGEgaGludCB0aGF0IHRoaXMgcGFydGl0aW9uCisrICAgICAgc2hvdWxkIG9ubHkgYmUgbW91bnRlZCByZWFkLW9ubHkuIFRoaXMgaXMgdXN1YWxseSB1c2VkIGZvciBmbGFzaAorKyAgICAgIHBhcnRpdGlvbnMgY29udGFpbmluZyBlYXJseS1ib290IGZpcm13YXJlIGltYWdlcyBvciBkYXRhIHdoaWNoIHNob3VsZAorKyAgICAgIG5vdCBiZSBjbG9iYmVyZWQuCisrICAgIHR5cGU6IGJvb2xlYW4KKysKKysgIGxvY2s6CisrICAgIGRlc2NyaXB0aW9uOiBEbyBub3QgdW5sb2NrIHRoZSBwYXJ0aXRpb24gYXQgaW5pdGlhbGl6YXRpb24gdGltZSAobm90CisrICAgICAgc3VwcG9ydGVkIG9uIGFsbCBkZXZpY2VzKQorKyAgICB0eXBlOiBib29sZWFuCisrCisrICBzbGMtbW9kZToKKysgICAgZGVzY3JpcHRpb246IFRoaXMgcGFyYW1ldGVyLCBpZiBwcmVzZW50LCBhbGxvd3Mgb25lIHRvIGVtdWxhdGUgU0xDIG1vZGUKKysgICAgICBvbiBhIHBhcnRpdGlvbiBhdHRhY2hlZCB0byBhbiBNTEMgTkFORCB0aHVzIG1ha2luZyB0aGlzIHBhcnRpdGlvbgorKyAgICAgIGltbXVuZSB0byBwYWlyZWQtcGFnZXMgY29ycnVwdGlvbnMKKysgICAgdHlwZTogYm9vbGVhbgorKworK3JlcXVpcmVkOgorKyAgLSByZWcKKysKKythZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzQwMi12NS4xMi0wMDAyLWR0LWJpbmRpbmdzLW10ZC1hZGQtYmluZGluZy1mb3ItQkNNNDkwOC1wYXJ0aXRpb25zLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzQwMi12NS4xMi0wMDAyLWR0LWJpbmRpbmdzLW10ZC1hZGQtYmluZGluZy1mb3ItQkNNNDkwOC1wYXJ0aXRpb25zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NzZjN2QKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNDAyLXY1LjEyLTAwMDItZHQtYmluZGluZ3MtbXRkLWFkZC1iaW5kaW5nLWZvci1CQ000OTA4LXBhcnRpdGlvbnMucGF0Y2gKQEAgLTAsMCArMSw5MiBAQAorRnJvbSA2ZTlkZmY2ZmUzZmJjNDUyZjE2NTY2ZTRhN2UyOTNiMGRlY2VmZGJhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP1JhZmE9QzU9ODI9MjBNaT1DNT04MmVja2k/PSA8cmFmYWxAbWlsZWNraS5wbD4KK0RhdGU6IFRodSwgMTEgRmViIDIwMjEgMjM6MDQ6MjYgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gZHQtYmluZGluZ3M6IG10ZDogYWRkIGJpbmRpbmcgZm9yIEJDTTQ5MDggcGFydGl0aW9ucworTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitCQ000OTA4IHVzZXMgZml4ZWQgcGFydGl0aW9ucyBsYXlvdXQgYnV0IGZ1bmN0aW9uIG9mIHNvbWUgcGFydGl0aW9ucyBtYXkKK3ZhcnkuIFNvbWUgZGV2aWNlcyB1c2UgbXVsdGlwbGUgZmlybXdhcmUgcGFydGl0aW9ucyBhbmQgdGhvc2UgcGFydGl0aW9ucworc2hvdWxkIGJlIG1hcmtlZCB0byBsZXQgc3lzdGVtIGRpc2NvdmVyIHRoZWlyIHB1cnBvc2UuCisKK1NpZ25lZC1vZmYtYnk6IFJhZmHFgiBNacWCZWNraSA8cmFmYWxAbWlsZWNraS5wbD4KK1NpZ25lZC1vZmYtYnk6IFJpY2hhcmQgV2VpbmJlcmdlciA8cmljaGFyZEBub2QuYXQ+CistLS0KKyAuLi4vcGFydGl0aW9ucy9icmNtLGJjbTQ5MDgtcGFydGl0aW9ucy55YW1sICAgfCA3MCArKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDcwIGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL210ZC9wYXJ0aXRpb25zL2JyY20sYmNtNDkwOC1wYXJ0aXRpb25zLnlhbWwKKworLS0tIC9kZXYvbnVsbAorKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL210ZC9wYXJ0aXRpb25zL2JyY20sYmNtNDkwOC1wYXJ0aXRpb25zLnlhbWwKK0BAIC0wLDAgKzEsNzAgQEAKKysjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlCisrJVlBTUwgMS4yCisrLS0tCisrJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9tdGQvcGFydGl0aW9ucy9icmNtLGJjbTQ5MDgtcGFydGl0aW9ucy55YW1sIworKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sIworKworK3RpdGxlOiBCcm9hZGNvbSBCQ000OTA4IHBhcnRpdGlvbmluZworKworK2Rlc2NyaXB0aW9uOiB8CisrICBCcm9hZGNvbSBCQ000OTA4IENGRSBib290bG9hZGVyIHN1cHBvcnRzIHR3byBmaXJtd2FyZSBwYXJ0aXRpb25zLiBPbmUgaXMgdXNlZAorKyAgZm9yIHJlZ3VsYXIgYm9vdGluZywgdGhlIG90aGVyIGlzIHRyZWF0ZWQgYXMgZmFsbGJhY2suCisrCisrICBUaGlzIGJpbmRpbmcgYWxsb3dzIGRlZmluaW5nIGFsbCBmaXhlZCBwYXJ0aXRpb25zIGFuZCBtYXJraW5nIHRob3NlIGNvbnRhaW5pbmcKKysgIGZpcm13YXJlLiBTeXN0ZW0gY2FuIHVzZSB0aGF0IGluZm9ybWF0aW9uIGUuZy4gZm9yIGJvb3Rpbmcgb3IgZmxhc2hpbmcKKysgIHB1cnBvc2VzLgorKworK21haW50YWluZXJzOgorKyAgLSBSYWZhxYIgTWnFgmVja2kgPHJhZmFsQG1pbGVja2kucGw+CisrCisrcHJvcGVydGllczoKKysgIGNvbXBhdGlibGU6CisrICAgIGNvbnN0OiBicmNtLGJjbTQ5MDgtcGFydGl0aW9ucworKworKyAgIiNhZGRyZXNzLWNlbGxzIjoKKysgICAgZW51bTogWyAxLCAyIF0KKysKKysgICIjc2l6ZS1jZWxscyI6CisrICAgIGVudW06IFsgMSwgMiBdCisrCisrcGF0dGVyblByb3BlcnRpZXM6CisrICAiXnBhcnRpdGlvbkBbMC05YS1mXSskIjoKKysgICAgJHJlZjogInBhcnRpdGlvbi55YW1sIyIKKysgICAgcHJvcGVydGllczoKKysgICAgICBjb21wYXRpYmxlOgorKyAgICAgICAgY29uc3Q6IGJyY20sYmNtNDkwOC1maXJtd2FyZQorKyAgICB1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCisrCisrcmVxdWlyZWQ6CisrICAtICIjYWRkcmVzcy1jZWxscyIKKysgIC0gIiNzaXplLWNlbGxzIgorKworK2FkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZQorKworK2V4YW1wbGVzOgorKyAgLSB8CisrICAgIHBhcnRpdGlvbnMgeworKyAgICAgICAgY29tcGF0aWJsZSA9ICJicmNtLGJjbTQ5MDgtcGFydGl0aW9ucyI7CisrICAgICAgICAjYWRkcmVzcy1jZWxscyA9IDwxPjsKKysgICAgICAgICNzaXplLWNlbGxzID0gPDE+OworKworKyAgICAgICAgcGFydGl0aW9uQDAgeworKyAgICAgICAgICAgIGxhYmVsID0gImNmZXJvbSI7CisrICAgICAgICAgICAgcmVnID0gPDB4MCAweDEwMDAwMD47CisrICAgICAgICB9OworKworKyAgICAgICAgcGFydGl0aW9uQDEwMDAwMCB7CisrICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJicmNtLGJjbTQ5MDgtZmlybXdhcmUiOworKyAgICAgICAgICAgIHJlZyA9IDwweDEwMDAwMCAweGYwMDAwMD47CisrICAgICAgICB9OworKworKyAgICAgICAgcGFydGl0aW9uQDEwMDAwMDAgeworKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSAiYnJjbSxiY200OTA4LWZpcm13YXJlIjsKKysgICAgICAgICAgICByZWcgPSA8MHgxMDAwMDAwIDB4ZjAwMDAwPjsKKysgICAgICAgIH07CisrCisrICAgICAgICBwYXJ0aXRpb25AMWYwMDAwMCB7CisrICAgICAgICAgICAgbGFiZWwgPSAiY2FsaWJyYXRpb24iOworKyAgICAgICAgICAgIHJlZyA9IDwweDFmMDAwMDAgMHgxMDAwMDA+OworKyAgICAgICAgfTsKKysgICAgfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC80MDMtdjUuMTMtbXRkLXBhcnNlcnMtb2ZwYXJ0LXN1cHBvcnQtQkNNNDkwOC1maXhlZC1wYXJ0aXRpb25zLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzQwMy12NS4xMy1tdGQtcGFyc2Vycy1vZnBhcnQtc3VwcG9ydC1CQ000OTA4LWZpeGVkLXBhcnRpdGlvbnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYyOTJiZAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC80MDMtdjUuMTMtbXRkLXBhcnNlcnMtb2ZwYXJ0LXN1cHBvcnQtQkNNNDkwOC1maXhlZC1wYXJ0aXRpb25zLnBhdGNoCkBAIC0wLDAgKzEsNjQ4IEBACitGcm9tIGFmYmVmOGVmYjU5MTc5MjU3OWM2MzNhN2M1NDVmOTE0YzYxNjVmODIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/UmFmYT1DNT04Mj0yME1pPUM1PTgyZWNraT89IDxyYWZhbEBtaWxlY2tpLnBsPgorRGF0ZTogVGh1LCAxMSBGZWIgMjAyMSAyMzowNDoyNyArMDEwMAorU3ViamVjdDogW1BBVENIXSBtdGQ6IHBhcnNlcnM6IG9mcGFydDogc3VwcG9ydCBCQ000OTA4IGZpeGVkIHBhcnRpdGlvbnMKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworU29tZSBkZXZpY2VzIHVzZSBmaXhlZCBwYXJ0aXRpb25pbmcgd2l0aCBzb21lIHBhcnRpdGlvbnMgcmVxdWlyaW5nIHNvbWUKK2V4dHJhIGxvZ2ljLiBFLmcuIEJDTTQ5MDggbWF5IGhhdmUgbXVsdGlwbGUgZmlybXdhcmUgcGFydGl0aW9ucyBidXQKK2RldGVjdGluZyBjdXJyZW50bHkgdXNlZCBvbmUgcmVxdWlyZXMgY2hlY2tpbmcgYm9vdGxvYWRlciBwYXJhbWV0ZXJzLgorCitUbyBzdXBwb3J0IHN1Y2ggY2FzZXMgd2l0aG91dCBkdXBsaWNhdGluZyBhIGxvdCBvZiBjb2RlICh3aXRob3V0IGNvcHlpbmcKK21vc3Qgb2YgdGhlIG9mcGFydC5jIGNvZGUpIHN1cHBvcnQgZm9yIHBvc3QtcGFyc2luZyBjYWxsYmFjayB3YXMgYWRkZWQuCisKK0JDTTQ5MDggc3VwcG9ydCBpbiBvZnBhcnQgY2FuIGJlIGVuYWJsZWQgdXNpbmcgY29uZmlnIG9wdGlvbiBhbmQgcmVzdWx0cworaW4gY29tcGlsaW5nICYgZXhlY3V0aW5nIGEgc3BlY2lmaWMgY2FsbGJhY2suIEl0IHNpbXBseSByZWFkcyBvZmZzZXQgb2YKK2N1cnJlbnRseSB1c2VkIGZpcm13YXJlIHBhcnRpdGlvbiBmcm9tIHRoZSBEVC4gQm9vdGxvYWRlciBzcGVjaWZpZXMgaXQKK3VzaW5nIHRoZSAiYnJjbV9ibHBhcm1zIiBwcm9wZXJ0eS4KKworU2lnbmVkLW9mZi1ieTogUmFmYcWCIE1pxYJlY2tpIDxyYWZhbEBtaWxlY2tpLnBsPgorLS0tCisgZHJpdmVycy9tdGQvcGFyc2Vycy9LY29uZmlnICAgICAgICAgICAgICAgICAgIHwgIDkgKysrCisgZHJpdmVycy9tdGQvcGFyc2Vycy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgIHwgIDIgKworIGRyaXZlcnMvbXRkL3BhcnNlcnMvb2ZwYXJ0X2JjbTQ5MDguYyAgICAgICAgICB8IDY0ICsrKysrKysrKysrKysrKysrKysKKyBkcml2ZXJzL210ZC9wYXJzZXJzL29mcGFydF9iY200OTA4LmggICAgICAgICAgfCAxNSArKysrKworIC4uLi9tdGQvcGFyc2Vycy97b2ZwYXJ0LmMgPT4gb2ZwYXJ0X2NvcmUuY30gICB8IDI4ICsrKysrKystCisgNSBmaWxlcyBjaGFuZ2VkLCAxMTYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tdGQvcGFyc2Vycy9vZnBhcnRfYmNtNDkwOC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbXRkL3BhcnNlcnMvb2ZwYXJ0X2JjbTQ5MDguaAorIHJlbmFtZSBkcml2ZXJzL210ZC9wYXJzZXJzL3tvZnBhcnQuYyA9PiBvZnBhcnRfY29yZS5jfSAoODglKQorCistLS0gYS9kcml2ZXJzL210ZC9wYXJzZXJzL0tjb25maWcKKysrKyBiL2RyaXZlcnMvbXRkL3BhcnNlcnMvS2NvbmZpZworQEAgLTY3LDYgKzY3LDE1IEBAIGNvbmZpZyBNVERfT0ZfUEFSVFMKKyAJICBmbGFzaCBtZW1vcnkgbm9kZSwgYXMgZGVzY3JpYmVkIGluCisgCSAgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL210ZC9wYXJ0aXRpb24udHh0LgorIAorK2NvbmZpZyBNVERfT0ZfUEFSVFNfQkNNNDkwOAorKwlib29sICJCQ000OTA4IHBhcnRpdGlvbmluZyBzdXBwb3J0IgorKwlkZXBlbmRzIG9uIE1URF9PRl9QQVJUUyAmJiAoQVJDSF9CQ000OTA4IHx8IENPTVBJTEVfVEVTVCkKKysJZGVmYXVsdCBBUkNIX0JDTTQ5MDgKKysJaGVscAorKwkgIFRoaXMgcHJvdmlkZXMgcGFydGl0aW9ucyBwYXJzZXIgZm9yIEJDTTQ5MDggZmFtaWx5IGRldmljZXMKKysJICB0aGF0IGNhbiBoYXZlIG11bHRpcGxlICJmaXJtd2FyZSIgcGFydGl0aW9ucy4gSXQgdGFrZXMgY2FyZSBvZgorKwkgIGZpbmRpbmcgY3VycmVudGx5IHVzZWQgb25lIGFuZCBiYWNrdXAgb25lcy4KKysKKyBjb25maWcgTVREX1BBUlNFUl9JTUFHRVRBRworIAl0cmlzdGF0ZSAiUGFyc2VyIGZvciBCQ005NjNYWCBJbWFnZSBUYWcgZm9ybWF0IHBhcnRpdGlvbnMiCisgCWRlcGVuZHMgb24gQkNNNjNYWCB8fCBCTUlQU19HRU5FUklDIHx8IENPTVBJTEVfVEVTVAorLS0tIGEvZHJpdmVycy9tdGQvcGFyc2Vycy9NYWtlZmlsZQorKysrIGIvZHJpdmVycy9tdGQvcGFyc2Vycy9NYWtlZmlsZQorQEAgLTQsNiArNCw4IEBAIG9iai0kKENPTkZJR19NVERfQkNNNDdYWF9QQVJUUykJCSs9IGJjbTQKKyBvYmotJChDT05GSUdfTVREX0JDTTYzWFhfUEFSVFMpCQkrPSBiY202M3h4cGFydC5vCisgb2JqLSQoQ09ORklHX01URF9DTURMSU5FX1BBUlRTKQkJKz0gY21kbGluZXBhcnQubworIG9iai0kKENPTkZJR19NVERfT0ZfUEFSVFMpCQkrPSBvZnBhcnQubworK29mcGFydC15CQkJCSs9IG9mcGFydF9jb3JlLm8KKytvZnBhcnQtJChDT05GSUdfTVREX09GX1BBUlRTX0JDTTQ5MDgpCSs9IG9mcGFydF9iY200OTA4Lm8KKyBvYmotJChDT05GSUdfTVREX1BBUlNFUl9JTUFHRVRBRykJKz0gcGFyc2VyX2ltYWdldGFnLm8KKyBvYmotJChDT05GSUdfTVREX0FGU19QQVJUUykJCSs9IGFmcy5vCisgb2JqLSQoQ09ORklHX01URF9QQVJTRVJfVFJYKQkJKz0gcGFyc2VyX3RyeC5vCistLS0gL2Rldi9udWxsCisrKysgYi9kcml2ZXJzL210ZC9wYXJzZXJzL29mcGFydF9iY200OTA4LmMKK0BAIC0wLDAgKzEsNjQgQEAKKysvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorKy8qCisrICogQ29weXJpZ2h0IChDKSAyMDIxIFJhZmHFgiBNacWCZWNraSA8cmFmYWxAbWlsZWNraS5wbD4KKysgKi8KKysKKysjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisrI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKysjaW5jbHVkZSA8bGludXgvb2YuaD4KKysjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisrI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisrCisrI2luY2x1ZGUgIm9mcGFydF9iY200OTA4LmgiCisrCisrI2RlZmluZSBCTFBBUkFNU19GV19PRkZTRVQJCSJOQU5EX1JGU19PRlMiCisrCisrc3RhdGljIGxvbmcgbG9uZyBiY200OTA4X3BhcnRpdGlvbnNfZndfb2Zmc2V0KHZvaWQpCisreworKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3Q7CisrCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKysJY29uc3QgY2hhciAqczsKKysKKysJcm9vdCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvIik7CisrCWlmICghcm9vdCkKKysJCXJldHVybiAtRU5PRU5UOworKworKwlvZl9wcm9wZXJ0eV9mb3JfZWFjaF9zdHJpbmcocm9vdCwgImJyY21fYmxwYXJtcyIsIHByb3AsIHMpIHsKKysJCXNpemVfdCBsZW4gPSBzdHJsZW4oQkxQQVJBTVNfRldfT0ZGU0VUKTsKKysJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworKwkJaW50IGVycjsKKysKKysJCWlmIChzdHJuY21wKHMsIEJMUEFSQU1TX0ZXX09GRlNFVCwgbGVuKSB8fCBzW2xlbl0gIT0gJz0nKQorKwkJCWNvbnRpbnVlOworKworKwkJZXJyID0ga3N0cnRvdWwocyArIGxlbiArIDEsIDAsICZvZmZzZXQpOworKwkJaWYgKGVycikgeworKwkJCXByX2VycigiZmFpbGVkIHRvIHBhcnNlICVzXG4iLCBzICsgbGVuICsgMSk7CisrCQkJcmV0dXJuIGVycjsKKysJCX0KKysKKysJCXJldHVybiBvZmZzZXQgPDwgMTA7CisrCX0KKysKKysJcmV0dXJuIC1FTk9FTlQ7CisrfQorKworK2ludCBiY200OTA4X3BhcnRpdGlvbnNfcG9zdF9wYXJzZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzLCBpbnQgbnJfcGFydHMpCisreworKwlsb25nIGxvbmcgZndfb2Zmc2V0OworKwlpbnQgaTsKKysKKysJZndfb2Zmc2V0ID0gYmNtNDkwOF9wYXJ0aXRpb25zX2Z3X29mZnNldCgpOworKworKwlmb3IgKGkgPSAwOyBpIDwgbnJfcGFydHM7IGkrKykgeworKwkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBhcnRzW2ldLm9mX25vZGUsICJicmNtLGJjbTQ5MDgtZmlybXdhcmUiKSkgeworKwkJCWlmIChmd19vZmZzZXQgPCAwIHx8IHBhcnRzW2ldLm9mZnNldCA9PSBmd19vZmZzZXQpCisrCQkJCXBhcnRzW2ldLm5hbWUgPSAiZmlybXdhcmUiOworKwkJCWVsc2UKKysJCQkJcGFydHNbaV0ubmFtZSA9ICJiYWNrdXAiOworKwkJfQorKwl9CisrCisrCXJldHVybiAwOworK30KKy0tLSAvZGV2L251bGwKKysrKyBiL2RyaXZlcnMvbXRkL3BhcnNlcnMvb2ZwYXJ0X2JjbTQ5MDguaAorQEAgLTAsMCArMSwxNSBAQAorKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisrI2lmbmRlZiBfX0JDTTQ5MDhfUEFSVElUSU9OU19ICisrI2RlZmluZSBfX0JDTTQ5MDhfUEFSVElUSU9OU19ICisrCisrI2lmZGVmIENPTkZJR19NVERfT0ZfUEFSVFNfQkNNNDkwOAorK2ludCBiY200OTA4X3BhcnRpdGlvbnNfcG9zdF9wYXJzZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzLCBpbnQgbnJfcGFydHMpOworKyNlbHNlCisrc3RhdGljIGlubGluZSBpbnQgYmNtNDkwOF9wYXJ0aXRpb25zX3Bvc3RfcGFyc2Uoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0cywKKysJCQkJCQlpbnQgbnJfcGFydHMpCisreworKwlyZXR1cm4gLUVPUE5PVFNVUFA7CisrfQorKyNlbmRpZgorKworKyNlbmRpZgorLS0tIGEvZHJpdmVycy9tdGQvcGFyc2Vycy9vZnBhcnQuYworKysrIC9kZXYvbnVsbAorQEAgLTEsMjM2ICswLDAgQEAKKy0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgorLS8qCistICogRmxhc2ggcGFydGl0aW9ucyBkZXNjcmliZWQgYnkgdGhlIE9GIChvciBmbGF0dGVuZWQpIGRldmljZSB0cmVlCistICoKKy0gKiBDb3B5cmlnaHQgwqkgMjAwNiBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKy0gKiBBdXRob3I6IFZpdGFseSBXb29sIDx2d29vbEBydS5tdmlzdGEuY29tPgorLSAqCistICogUmV2aXNlZCB0byBoYW5kbGUgbmV3ZXIgc3R5bGUgZmxhc2ggYmluZGluZyBieToKKy0gKiAgIENvcHlyaWdodCDCqSAyMDA3IERhdmlkIEdpYnNvbiwgSUJNIENvcnBvcmF0aW9uLgorLSAqLworLQorLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKy0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgorLSNpbmNsdWRlIDxsaW51eC9vZi5oPgorLSNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CistI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKy0jaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKy0KKy1zdGF0aWMgYm9vbCBub2RlX2hhc19jb21wYXRpYmxlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqcHApCisteworLQlyZXR1cm4gb2ZfZ2V0X3Byb3BlcnR5KHBwLCAiY29tcGF0aWJsZSIsIE5VTEwpOworLX0KKy0KKy1zdGF0aWMgaW50IHBhcnNlX2ZpeGVkX3BhcnRpdGlvbnMoc3RydWN0IG10ZF9pbmZvICptYXN0ZXIsCistCQkJCSAgY29uc3Qgc3RydWN0IG10ZF9wYXJ0aXRpb24gKipwcGFydHMsCistCQkJCSAgc3RydWN0IG10ZF9wYXJ0X3BhcnNlcl9kYXRhICpkYXRhKQorLXsKKy0Jc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzOworLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm10ZF9ub2RlOworLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mcGFydF9ub2RlOworLQljb25zdCBjaGFyICpwYXJ0bmFtZTsKKy0Jc3RydWN0IGRldmljZV9ub2RlICpwcDsKKy0JaW50IG5yX3BhcnRzLCBpLCByZXQgPSAwOworLQlib29sIGRlZGljYXRlZCA9IHRydWU7CistCistCistCS8qIFB1bGwgb2Zfbm9kZSBmcm9tIHRoZSBtYXN0ZXIgZGV2aWNlIG5vZGUgKi8KKy0JbXRkX25vZGUgPSBtdGRfZ2V0X29mX25vZGUobWFzdGVyKTsKKy0JaWYgKCFtdGRfbm9kZSkKKy0JCXJldHVybiAwOworLQorLQlvZnBhcnRfbm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG10ZF9ub2RlLCAicGFydGl0aW9ucyIpOworLQlpZiAoIW9mcGFydF9ub2RlKSB7CistCQkvKgorLQkJICogV2UgbWlnaHQgZ2V0IGhlcmUgZXZlbiB3aGVuIG9mcGFydCBpc24ndCB1c2VkIGF0IGFsbCAoZS5nLiwKKy0JCSAqIHdoZW4gdXNpbmcgYW5vdGhlciBwYXJzZXIpLCBzbyBkb24ndCBiZSBsb3VkZXIgdGhhbgorLQkJICogS0VSTl9ERUJVRworLQkJICovCistCQlwcl9kZWJ1ZygiJXM6ICdwYXJ0aXRpb25zJyBzdWJub2RlIG5vdCBmb3VuZCBvbiAlcE9GLiBUcnlpbmcgdG8gcGFyc2UgZGlyZWN0IHN1Ym5vZGVzIGFzIHBhcnRpdGlvbnMuXG4iLAorLQkJCSBtYXN0ZXItPm5hbWUsIG10ZF9ub2RlKTsKKy0JCW9mcGFydF9ub2RlID0gbXRkX25vZGU7CistCQlkZWRpY2F0ZWQgPSBmYWxzZTsKKy0JfSBlbHNlIGlmICghb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUob2ZwYXJ0X25vZGUsICJmaXhlZC1wYXJ0aXRpb25zIikpIHsKKy0JCS8qIFRoZSAncGFydGl0aW9ucycgc3Vibm9kZSBtaWdodCBiZSB1c2VkIGJ5IGFub3RoZXIgcGFyc2VyICovCistCQlyZXR1cm4gMDsKKy0JfQorLQorLQkvKiBGaXJzdCBjb3VudCB0aGUgc3Vibm9kZXMgKi8KKy0JbnJfcGFydHMgPSAwOworLQlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKG9mcGFydF9ub2RlLCAgcHApIHsKKy0JCWlmICghZGVkaWNhdGVkICYmIG5vZGVfaGFzX2NvbXBhdGlibGUocHApKQorLQkJCWNvbnRpbnVlOworLQorLQkJbnJfcGFydHMrKzsKKy0JfQorLQorLQlpZiAobnJfcGFydHMgPT0gMCkKKy0JCXJldHVybiAwOworLQorLQlwYXJ0cyA9IGtjYWxsb2MobnJfcGFydHMsIHNpemVvZigqcGFydHMpLCBHRlBfS0VSTkVMKTsKKy0JaWYgKCFwYXJ0cykKKy0JCXJldHVybiAtRU5PTUVNOworLQorLQlpID0gMDsKKy0JZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShvZnBhcnRfbm9kZSwgIHBwKSB7CistCQljb25zdCBfX2JlMzIgKnJlZzsKKy0JCWludCBsZW47CistCQlpbnQgYV9jZWxscywgc19jZWxsczsKKy0KKy0JCWlmICghZGVkaWNhdGVkICYmIG5vZGVfaGFzX2NvbXBhdGlibGUocHApKQorLQkJCWNvbnRpbnVlOworLQorLQkJcmVnID0gb2ZfZ2V0X3Byb3BlcnR5KHBwLCAicmVnIiwgJmxlbik7CistCQlpZiAoIXJlZykgeworLQkJCWlmIChkZWRpY2F0ZWQpIHsKKy0JCQkJcHJfZGVidWcoIiVzOiBvZnBhcnQgcGFydGl0aW9uICVwT0YgKCVwT0YpIG1pc3NpbmcgcmVnIHByb3BlcnR5LlxuIiwKKy0JCQkJCSBtYXN0ZXItPm5hbWUsIHBwLAorLQkJCQkJIG10ZF9ub2RlKTsKKy0JCQkJZ290byBvZnBhcnRfZmFpbDsKKy0JCQl9IGVsc2UgeworLQkJCQlucl9wYXJ0cy0tOworLQkJCQljb250aW51ZTsKKy0JCQl9CistCQl9CistCistCQlhX2NlbGxzID0gb2Zfbl9hZGRyX2NlbGxzKHBwKTsKKy0JCXNfY2VsbHMgPSBvZl9uX3NpemVfY2VsbHMocHApOworLQkJaWYgKGxlbiAvIDQgIT0gYV9jZWxscyArIHNfY2VsbHMpIHsKKy0JCQlwcl9kZWJ1ZygiJXM6IG9mcGFydCBwYXJ0aXRpb24gJXBPRiAoJXBPRikgZXJyb3IgcGFyc2luZyByZWcgcHJvcGVydHkuXG4iLAorLQkJCQkgbWFzdGVyLT5uYW1lLCBwcCwKKy0JCQkJIG10ZF9ub2RlKTsKKy0JCQlnb3RvIG9mcGFydF9mYWlsOworLQkJfQorLQorLQkJcGFydHNbaV0ub2Zmc2V0ID0gb2ZfcmVhZF9udW1iZXIocmVnLCBhX2NlbGxzKTsKKy0JCXBhcnRzW2ldLnNpemUgPSBvZl9yZWFkX251bWJlcihyZWcgKyBhX2NlbGxzLCBzX2NlbGxzKTsKKy0JCXBhcnRzW2ldLm9mX25vZGUgPSBwcDsKKy0KKy0JCXBhcnRuYW1lID0gb2ZfZ2V0X3Byb3BlcnR5KHBwLCAibGFiZWwiLCAmbGVuKTsKKy0JCWlmICghcGFydG5hbWUpCistCQkJcGFydG5hbWUgPSBvZl9nZXRfcHJvcGVydHkocHAsICJuYW1lIiwgJmxlbik7CistCQlwYXJ0c1tpXS5uYW1lID0gcGFydG5hbWU7CistCistCQlpZiAob2ZfZ2V0X3Byb3BlcnR5KHBwLCAicmVhZC1vbmx5IiwgJmxlbikpCistCQkJcGFydHNbaV0ubWFza19mbGFncyB8PSBNVERfV1JJVEVBQkxFOworLQorLQkJaWYgKG9mX2dldF9wcm9wZXJ0eShwcCwgImxvY2siLCAmbGVuKSkKKy0JCQlwYXJ0c1tpXS5tYXNrX2ZsYWdzIHw9IE1URF9QT1dFUlVQX0xPQ0s7CistCistCQlpKys7CistCX0KKy0KKy0JaWYgKCFucl9wYXJ0cykKKy0JCWdvdG8gb2ZwYXJ0X25vbmU7CistCistCSpwcGFydHMgPSBwYXJ0czsKKy0JcmV0dXJuIG5yX3BhcnRzOworLQorLW9mcGFydF9mYWlsOgorLQlwcl9lcnIoIiVzOiBlcnJvciBwYXJzaW5nIG9mcGFydCBwYXJ0aXRpb24gJXBPRiAoJXBPRilcbiIsCistCSAgICAgICBtYXN0ZXItPm5hbWUsIHBwLCBtdGRfbm9kZSk7CistCXJldCA9IC1FSU5WQUw7Cistb2ZwYXJ0X25vbmU6CistCW9mX25vZGVfcHV0KHBwKTsKKy0Ja2ZyZWUocGFydHMpOworLQlyZXR1cm4gcmV0OworLX0KKy0KKy1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBwYXJzZV9vZnBhcnRfbWF0Y2hfdGFibGVbXSA9IHsKKy0JeyAuY29tcGF0aWJsZSA9ICJmaXhlZC1wYXJ0aXRpb25zIiB9LAorLQl7fSwKKy19OworLU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHBhcnNlX29mcGFydF9tYXRjaF90YWJsZSk7CistCistc3RhdGljIHN0cnVjdCBtdGRfcGFydF9wYXJzZXIgb2ZwYXJ0X3BhcnNlciA9IHsKKy0JLnBhcnNlX2ZuID0gcGFyc2VfZml4ZWRfcGFydGl0aW9ucywKKy0JLm5hbWUgPSAiZml4ZWQtcGFydGl0aW9ucyIsCistCS5vZl9tYXRjaF90YWJsZSA9IHBhcnNlX29mcGFydF9tYXRjaF90YWJsZSwKKy19OworLQorLXN0YXRpYyBpbnQgcGFyc2Vfb2ZvbGRwYXJ0X3BhcnRpdGlvbnMoc3RydWN0IG10ZF9pbmZvICptYXN0ZXIsCistCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBtdGRfcGFydGl0aW9uICoqcHBhcnRzLAorLQkJCQkgICAgICBzdHJ1Y3QgbXRkX3BhcnRfcGFyc2VyX2RhdGEgKmRhdGEpCisteworLQlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHM7CistCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHA7CistCWludCBpLCBwbGVuLCBucl9wYXJ0czsKKy0JY29uc3Qgc3RydWN0IHsKKy0JCV9fYmUzMiBvZmZzZXQsIGxlbjsKKy0JfSAqcGFydDsKKy0JY29uc3QgY2hhciAqbmFtZXM7CistCistCS8qIFB1bGwgb2Zfbm9kZSBmcm9tIHRoZSBtYXN0ZXIgZGV2aWNlIG5vZGUgKi8KKy0JZHAgPSBtdGRfZ2V0X29mX25vZGUobWFzdGVyKTsKKy0JaWYgKCFkcCkKKy0JCXJldHVybiAwOworLQorLQlwYXJ0ID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAicGFydGl0aW9ucyIsICZwbGVuKTsKKy0JaWYgKCFwYXJ0KQorLQkJcmV0dXJuIDA7IC8qIE5vIHBhcnRpdGlvbnMgZm91bmQgKi8KKy0KKy0JcHJfd2FybigiRGV2aWNlIHRyZWUgdXNlcyBvYnNvbGV0ZSBwYXJ0aXRpb24gbWFwIGJpbmRpbmc6ICVwT0ZcbiIsIGRwKTsKKy0KKy0JbnJfcGFydHMgPSBwbGVuIC8gc2l6ZW9mKHBhcnRbMF0pOworLQorLQlwYXJ0cyA9IGtjYWxsb2MobnJfcGFydHMsIHNpemVvZigqcGFydHMpLCBHRlBfS0VSTkVMKTsKKy0JaWYgKCFwYXJ0cykKKy0JCXJldHVybiAtRU5PTUVNOworLQorLQluYW1lcyA9IG9mX2dldF9wcm9wZXJ0eShkcCwgInBhcnRpdGlvbi1uYW1lcyIsICZwbGVuKTsKKy0KKy0JZm9yIChpID0gMDsgaSA8IG5yX3BhcnRzOyBpKyspIHsKKy0JCXBhcnRzW2ldLm9mZnNldCA9IGJlMzJfdG9fY3B1KHBhcnQtPm9mZnNldCk7CistCQlwYXJ0c1tpXS5zaXplICAgPSBiZTMyX3RvX2NwdShwYXJ0LT5sZW4pICYgfjE7CistCQkvKiBiaXQgMCBzZXQgc2lnbmlmaWVzIHJlYWQgb25seSBwYXJ0aXRpb24gKi8KKy0JCWlmIChiZTMyX3RvX2NwdShwYXJ0LT5sZW4pICYgMSkKKy0JCQlwYXJ0c1tpXS5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRTsKKy0KKy0JCWlmIChuYW1lcyAmJiAocGxlbiA+IDApKSB7CistCQkJaW50IGxlbiA9IHN0cmxlbihuYW1lcykgKyAxOworLQorLQkJCXBhcnRzW2ldLm5hbWUgPSBuYW1lczsKKy0JCQlwbGVuIC09IGxlbjsKKy0JCQluYW1lcyArPSBsZW47CistCQl9IGVsc2UgeworLQkJCXBhcnRzW2ldLm5hbWUgPSAidW5uYW1lZCI7CistCQl9CistCistCQlwYXJ0Kys7CistCX0KKy0KKy0JKnBwYXJ0cyA9IHBhcnRzOworLQlyZXR1cm4gbnJfcGFydHM7CistfQorLQorLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRfcGFyc2VyIG9mb2xkcGFydF9wYXJzZXIgPSB7CistCS5wYXJzZV9mbiA9IHBhcnNlX29mb2xkcGFydF9wYXJ0aXRpb25zLAorLQkubmFtZSA9ICJvZm9sZHBhcnQiLAorLX07CistCistc3RhdGljIGludCBfX2luaXQgb2ZwYXJ0X3BhcnNlcl9pbml0KHZvaWQpCisteworLQlyZWdpc3Rlcl9tdGRfcGFyc2VyKCZvZnBhcnRfcGFyc2VyKTsKKy0JcmVnaXN0ZXJfbXRkX3BhcnNlcigmb2ZvbGRwYXJ0X3BhcnNlcik7CistCXJldHVybiAwOworLX0KKy0KKy1zdGF0aWMgdm9pZCBfX2V4aXQgb2ZwYXJ0X3BhcnNlcl9leGl0KHZvaWQpCisteworLQlkZXJlZ2lzdGVyX210ZF9wYXJzZXIoJm9mcGFydF9wYXJzZXIpOworLQlkZXJlZ2lzdGVyX210ZF9wYXJzZXIoJm9mb2xkcGFydF9wYXJzZXIpOworLX0KKy0KKy1tb2R1bGVfaW5pdChvZnBhcnRfcGFyc2VyX2luaXQpOworLW1vZHVsZV9leGl0KG9mcGFydF9wYXJzZXJfZXhpdCk7CistCistTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworLU1PRFVMRV9ERVNDUklQVElPTigiUGFyc2VyIGZvciBNVEQgcGFydGl0aW9uaW5nIGluZm9ybWF0aW9uIGluIGRldmljZSB0cmVlIik7CistTU9EVUxFX0FVVEhPUigiVml0YWx5IFdvb2wsIERhdmlkIEdpYnNvbiIpOworLS8qCistICogV2hlbiBNVEQgY29yZSBjYW5ub3QgZmluZCB0aGUgcmVxdWVzdGVkIHBhcnNlciwgaXQgdHJpZXMgdG8gbG9hZCB0aGUgbW9kdWxlCistICogd2l0aCB0aGUgc2FtZSBuYW1lLiBTaW5jZSB3ZSBwcm92aWRlIHRoZSBvZm9sZHBhcnQgcGFyc2VyLCB3ZSBzaG91bGQgaGF2ZQorLSAqIHRoZSBjb3JyZXNwb25kaW5nIGFsaWFzLgorLSAqLworLU1PRFVMRV9BTElBUygiZml4ZWQtcGFydGl0aW9ucyIpOworLU1PRFVMRV9BTElBUygib2ZvbGRwYXJ0Iik7CistLS0gL2Rldi9udWxsCisrKysgYi9kcml2ZXJzL210ZC9wYXJzZXJzL29mcGFydF9jb3JlLmMKK0BAIC0wLDAgKzEsMjYwIEBACisrLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKKysvKgorKyAqIEZsYXNoIHBhcnRpdGlvbnMgZGVzY3JpYmVkIGJ5IHRoZSBPRiAob3IgZmxhdHRlbmVkKSBkZXZpY2UgdHJlZQorKyAqCisrICogQ29weXJpZ2h0IMKpIDIwMDYgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisrICogQXV0aG9yOiBWaXRhbHkgV29vbCA8dndvb2xAcnUubXZpc3RhLmNvbT4KKysgKgorKyAqIFJldmlzZWQgdG8gaGFuZGxlIG5ld2VyIHN0eWxlIGZsYXNoIGJpbmRpbmcgYnk6CisrICogICBDb3B5cmlnaHQgwqkgMjAwNyBEYXZpZCBHaWJzb24sIElCTSBDb3Jwb3JhdGlvbi4KKysgKi8KKysKKysjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisrI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKysjaW5jbHVkZSA8bGludXgvb2YuaD4KKysjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisrI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisrCisrI2luY2x1ZGUgIm9mcGFydF9iY200OTA4LmgiCisrCisrc3RydWN0IGZpeGVkX3BhcnRpdGlvbnNfcXVpcmtzIHsKKysJaW50ICgqcG9zdF9wYXJzZSkoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0cywgaW50IG5yX3BhcnRzKTsKKyt9OworKworK3N0cnVjdCBmaXhlZF9wYXJ0aXRpb25zX3F1aXJrcyBiY200OTA4X3BhcnRpdGlvbnNfcXVpcmtzID0geworKwkucG9zdF9wYXJzZSA9IGJjbTQ5MDhfcGFydGl0aW9uc19wb3N0X3BhcnNlLAorK307CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcGFyc2Vfb2ZwYXJ0X21hdGNoX3RhYmxlW107CisrCisrc3RhdGljIGJvb2wgbm9kZV9oYXNfY29tcGF0aWJsZShzdHJ1Y3QgZGV2aWNlX25vZGUgKnBwKQorK3sKKysJcmV0dXJuIG9mX2dldF9wcm9wZXJ0eShwcCwgImNvbXBhdGlibGUiLCBOVUxMKTsKKyt9CisrCisrc3RhdGljIGludCBwYXJzZV9maXhlZF9wYXJ0aXRpb25zKHN0cnVjdCBtdGRfaW5mbyAqbWFzdGVyLAorKwkJCQkgIGNvbnN0IHN0cnVjdCBtdGRfcGFydGl0aW9uICoqcHBhcnRzLAorKwkJCQkgIHN0cnVjdCBtdGRfcGFydF9wYXJzZXJfZGF0YSAqZGF0YSkKKyt7CisrCWNvbnN0IHN0cnVjdCBmaXhlZF9wYXJ0aXRpb25zX3F1aXJrcyAqcXVpcmtzOworKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9pZDsKKysJc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzOworKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm10ZF9ub2RlOworKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mcGFydF9ub2RlOworKwljb25zdCBjaGFyICpwYXJ0bmFtZTsKKysJc3RydWN0IGRldmljZV9ub2RlICpwcDsKKysJaW50IG5yX3BhcnRzLCBpLCByZXQgPSAwOworKwlib29sIGRlZGljYXRlZCA9IHRydWU7CisrCisrCS8qIFB1bGwgb2Zfbm9kZSBmcm9tIHRoZSBtYXN0ZXIgZGV2aWNlIG5vZGUgKi8KKysJbXRkX25vZGUgPSBtdGRfZ2V0X29mX25vZGUobWFzdGVyKTsKKysJaWYgKCFtdGRfbm9kZSkKKysJCXJldHVybiAwOworKworKwlvZnBhcnRfbm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG10ZF9ub2RlLCAicGFydGl0aW9ucyIpOworKwlpZiAoIW9mcGFydF9ub2RlKSB7CisrCQkvKgorKwkJICogV2UgbWlnaHQgZ2V0IGhlcmUgZXZlbiB3aGVuIG9mcGFydCBpc24ndCB1c2VkIGF0IGFsbCAoZS5nLiwKKysJCSAqIHdoZW4gdXNpbmcgYW5vdGhlciBwYXJzZXIpLCBzbyBkb24ndCBiZSBsb3VkZXIgdGhhbgorKwkJICogS0VSTl9ERUJVRworKwkJICovCisrCQlwcl9kZWJ1ZygiJXM6ICdwYXJ0aXRpb25zJyBzdWJub2RlIG5vdCBmb3VuZCBvbiAlcE9GLiBUcnlpbmcgdG8gcGFyc2UgZGlyZWN0IHN1Ym5vZGVzIGFzIHBhcnRpdGlvbnMuXG4iLAorKwkJCSBtYXN0ZXItPm5hbWUsIG10ZF9ub2RlKTsKKysJCW9mcGFydF9ub2RlID0gbXRkX25vZGU7CisrCQlkZWRpY2F0ZWQgPSBmYWxzZTsKKysJfQorKworKwlvZl9pZCA9IG9mX21hdGNoX25vZGUocGFyc2Vfb2ZwYXJ0X21hdGNoX3RhYmxlLCBvZnBhcnRfbm9kZSk7CisrCWlmIChkZWRpY2F0ZWQgJiYgIW9mX2lkKSB7CisrCQkvKiBUaGUgJ3BhcnRpdGlvbnMnIHN1Ym5vZGUgbWlnaHQgYmUgdXNlZCBieSBhbm90aGVyIHBhcnNlciAqLworKwkJcmV0dXJuIDA7CisrCX0KKysKKysJcXVpcmtzID0gb2ZfaWQgPyBvZl9pZC0+ZGF0YSA6IE5VTEw7CisrCisrCS8qIEZpcnN0IGNvdW50IHRoZSBzdWJub2RlcyAqLworKwlucl9wYXJ0cyA9IDA7CisrCWZvcl9lYWNoX2NoaWxkX29mX25vZGUob2ZwYXJ0X25vZGUsICBwcCkgeworKwkJaWYgKCFkZWRpY2F0ZWQgJiYgbm9kZV9oYXNfY29tcGF0aWJsZShwcCkpCisrCQkJY29udGludWU7CisrCisrCQlucl9wYXJ0cysrOworKwl9CisrCisrCWlmIChucl9wYXJ0cyA9PSAwKQorKwkJcmV0dXJuIDA7CisrCisrCXBhcnRzID0ga2NhbGxvYyhucl9wYXJ0cywgc2l6ZW9mKCpwYXJ0cyksIEdGUF9LRVJORUwpOworKwlpZiAoIXBhcnRzKQorKwkJcmV0dXJuIC1FTk9NRU07CisrCisrCWkgPSAwOworKwlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKG9mcGFydF9ub2RlLCAgcHApIHsKKysJCWNvbnN0IF9fYmUzMiAqcmVnOworKwkJaW50IGxlbjsKKysJCWludCBhX2NlbGxzLCBzX2NlbGxzOworKworKwkJaWYgKCFkZWRpY2F0ZWQgJiYgbm9kZV9oYXNfY29tcGF0aWJsZShwcCkpCisrCQkJY29udGludWU7CisrCisrCQlyZWcgPSBvZl9nZXRfcHJvcGVydHkocHAsICJyZWciLCAmbGVuKTsKKysJCWlmICghcmVnKSB7CisrCQkJaWYgKGRlZGljYXRlZCkgeworKwkJCQlwcl9kZWJ1ZygiJXM6IG9mcGFydCBwYXJ0aXRpb24gJXBPRiAoJXBPRikgbWlzc2luZyByZWcgcHJvcGVydHkuXG4iLAorKwkJCQkJIG1hc3Rlci0+bmFtZSwgcHAsCisrCQkJCQkgbXRkX25vZGUpOworKwkJCQlnb3RvIG9mcGFydF9mYWlsOworKwkJCX0gZWxzZSB7CisrCQkJCW5yX3BhcnRzLS07CisrCQkJCWNvbnRpbnVlOworKwkJCX0KKysJCX0KKysKKysJCWFfY2VsbHMgPSBvZl9uX2FkZHJfY2VsbHMocHApOworKwkJc19jZWxscyA9IG9mX25fc2l6ZV9jZWxscyhwcCk7CisrCQlpZiAobGVuIC8gNCAhPSBhX2NlbGxzICsgc19jZWxscykgeworKwkJCXByX2RlYnVnKCIlczogb2ZwYXJ0IHBhcnRpdGlvbiAlcE9GICglcE9GKSBlcnJvciBwYXJzaW5nIHJlZyBwcm9wZXJ0eS5cbiIsCisrCQkJCSBtYXN0ZXItPm5hbWUsIHBwLAorKwkJCQkgbXRkX25vZGUpOworKwkJCWdvdG8gb2ZwYXJ0X2ZhaWw7CisrCQl9CisrCisrCQlwYXJ0c1tpXS5vZmZzZXQgPSBvZl9yZWFkX251bWJlcihyZWcsIGFfY2VsbHMpOworKwkJcGFydHNbaV0uc2l6ZSA9IG9mX3JlYWRfbnVtYmVyKHJlZyArIGFfY2VsbHMsIHNfY2VsbHMpOworKwkJcGFydHNbaV0ub2Zfbm9kZSA9IHBwOworKworKwkJcGFydG5hbWUgPSBvZl9nZXRfcHJvcGVydHkocHAsICJsYWJlbCIsICZsZW4pOworKwkJaWYgKCFwYXJ0bmFtZSkKKysJCQlwYXJ0bmFtZSA9IG9mX2dldF9wcm9wZXJ0eShwcCwgIm5hbWUiLCAmbGVuKTsKKysJCXBhcnRzW2ldLm5hbWUgPSBwYXJ0bmFtZTsKKysKKysJCWlmIChvZl9nZXRfcHJvcGVydHkocHAsICJyZWFkLW9ubHkiLCAmbGVuKSkKKysJCQlwYXJ0c1tpXS5tYXNrX2ZsYWdzIHw9IE1URF9XUklURUFCTEU7CisrCisrCQlpZiAob2ZfZ2V0X3Byb3BlcnR5KHBwLCAibG9jayIsICZsZW4pKQorKwkJCXBhcnRzW2ldLm1hc2tfZmxhZ3MgfD0gTVREX1BPV0VSVVBfTE9DSzsKKysKKysJCWkrKzsKKysJfQorKworKwlpZiAoIW5yX3BhcnRzKQorKwkJZ290byBvZnBhcnRfbm9uZTsKKysKKysJaWYgKHF1aXJrcyAmJiBxdWlya3MtPnBvc3RfcGFyc2UpCisrCQlxdWlya3MtPnBvc3RfcGFyc2UobWFzdGVyLCBwYXJ0cywgbnJfcGFydHMpOworKworKwkqcHBhcnRzID0gcGFydHM7CisrCXJldHVybiBucl9wYXJ0czsKKysKKytvZnBhcnRfZmFpbDoKKysJcHJfZXJyKCIlczogZXJyb3IgcGFyc2luZyBvZnBhcnQgcGFydGl0aW9uICVwT0YgKCVwT0YpXG4iLAorKwkgICAgICAgbWFzdGVyLT5uYW1lLCBwcCwgbXRkX25vZGUpOworKwlyZXQgPSAtRUlOVkFMOworK29mcGFydF9ub25lOgorKwlvZl9ub2RlX3B1dChwcCk7CisrCWtmcmVlKHBhcnRzKTsKKysJcmV0dXJuIHJldDsKKyt9CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcGFyc2Vfb2ZwYXJ0X21hdGNoX3RhYmxlW10gPSB7CisrCS8qIEdlbmVyaWMgKi8KKysJeyAuY29tcGF0aWJsZSA9ICJmaXhlZC1wYXJ0aXRpb25zIiB9LAorKwkvKiBDdXN0b21pemVkICovCisrCXsgLmNvbXBhdGlibGUgPSAiYnJjbSxiY200OTA4LXBhcnRpdGlvbnMiLCAuZGF0YSA9ICZiY200OTA4X3BhcnRpdGlvbnNfcXVpcmtzLCB9LAorKwl7fSwKKyt9OworK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHBhcnNlX29mcGFydF9tYXRjaF90YWJsZSk7CisrCisrc3RhdGljIHN0cnVjdCBtdGRfcGFydF9wYXJzZXIgb2ZwYXJ0X3BhcnNlciA9IHsKKysJLnBhcnNlX2ZuID0gcGFyc2VfZml4ZWRfcGFydGl0aW9ucywKKysJLm5hbWUgPSAiZml4ZWQtcGFydGl0aW9ucyIsCisrCS5vZl9tYXRjaF90YWJsZSA9IHBhcnNlX29mcGFydF9tYXRjaF90YWJsZSwKKyt9OworKworK3N0YXRpYyBpbnQgcGFyc2Vfb2ZvbGRwYXJ0X3BhcnRpdGlvbnMoc3RydWN0IG10ZF9pbmZvICptYXN0ZXIsCisrCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBtdGRfcGFydGl0aW9uICoqcHBhcnRzLAorKwkJCQkgICAgICBzdHJ1Y3QgbXRkX3BhcnRfcGFyc2VyX2RhdGEgKmRhdGEpCisreworKwlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHM7CisrCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHA7CisrCWludCBpLCBwbGVuLCBucl9wYXJ0czsKKysJY29uc3Qgc3RydWN0IHsKKysJCV9fYmUzMiBvZmZzZXQsIGxlbjsKKysJfSAqcGFydDsKKysJY29uc3QgY2hhciAqbmFtZXM7CisrCisrCS8qIFB1bGwgb2Zfbm9kZSBmcm9tIHRoZSBtYXN0ZXIgZGV2aWNlIG5vZGUgKi8KKysJZHAgPSBtdGRfZ2V0X29mX25vZGUobWFzdGVyKTsKKysJaWYgKCFkcCkKKysJCXJldHVybiAwOworKworKwlwYXJ0ID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAicGFydGl0aW9ucyIsICZwbGVuKTsKKysJaWYgKCFwYXJ0KQorKwkJcmV0dXJuIDA7IC8qIE5vIHBhcnRpdGlvbnMgZm91bmQgKi8KKysKKysJcHJfd2FybigiRGV2aWNlIHRyZWUgdXNlcyBvYnNvbGV0ZSBwYXJ0aXRpb24gbWFwIGJpbmRpbmc6ICVwT0ZcbiIsIGRwKTsKKysKKysJbnJfcGFydHMgPSBwbGVuIC8gc2l6ZW9mKHBhcnRbMF0pOworKworKwlwYXJ0cyA9IGtjYWxsb2MobnJfcGFydHMsIHNpemVvZigqcGFydHMpLCBHRlBfS0VSTkVMKTsKKysJaWYgKCFwYXJ0cykKKysJCXJldHVybiAtRU5PTUVNOworKworKwluYW1lcyA9IG9mX2dldF9wcm9wZXJ0eShkcCwgInBhcnRpdGlvbi1uYW1lcyIsICZwbGVuKTsKKysKKysJZm9yIChpID0gMDsgaSA8IG5yX3BhcnRzOyBpKyspIHsKKysJCXBhcnRzW2ldLm9mZnNldCA9IGJlMzJfdG9fY3B1KHBhcnQtPm9mZnNldCk7CisrCQlwYXJ0c1tpXS5zaXplICAgPSBiZTMyX3RvX2NwdShwYXJ0LT5sZW4pICYgfjE7CisrCQkvKiBiaXQgMCBzZXQgc2lnbmlmaWVzIHJlYWQgb25seSBwYXJ0aXRpb24gKi8KKysJCWlmIChiZTMyX3RvX2NwdShwYXJ0LT5sZW4pICYgMSkKKysJCQlwYXJ0c1tpXS5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRTsKKysKKysJCWlmIChuYW1lcyAmJiAocGxlbiA+IDApKSB7CisrCQkJaW50IGxlbiA9IHN0cmxlbihuYW1lcykgKyAxOworKworKwkJCXBhcnRzW2ldLm5hbWUgPSBuYW1lczsKKysJCQlwbGVuIC09IGxlbjsKKysJCQluYW1lcyArPSBsZW47CisrCQl9IGVsc2UgeworKwkJCXBhcnRzW2ldLm5hbWUgPSAidW5uYW1lZCI7CisrCQl9CisrCisrCQlwYXJ0Kys7CisrCX0KKysKKysJKnBwYXJ0cyA9IHBhcnRzOworKwlyZXR1cm4gbnJfcGFydHM7CisrfQorKworK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRfcGFyc2VyIG9mb2xkcGFydF9wYXJzZXIgPSB7CisrCS5wYXJzZV9mbiA9IHBhcnNlX29mb2xkcGFydF9wYXJ0aXRpb25zLAorKwkubmFtZSA9ICJvZm9sZHBhcnQiLAorK307CisrCisrc3RhdGljIGludCBfX2luaXQgb2ZwYXJ0X3BhcnNlcl9pbml0KHZvaWQpCisreworKwlyZWdpc3Rlcl9tdGRfcGFyc2VyKCZvZnBhcnRfcGFyc2VyKTsKKysJcmVnaXN0ZXJfbXRkX3BhcnNlcigmb2ZvbGRwYXJ0X3BhcnNlcik7CisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgdm9pZCBfX2V4aXQgb2ZwYXJ0X3BhcnNlcl9leGl0KHZvaWQpCisreworKwlkZXJlZ2lzdGVyX210ZF9wYXJzZXIoJm9mcGFydF9wYXJzZXIpOworKwlkZXJlZ2lzdGVyX210ZF9wYXJzZXIoJm9mb2xkcGFydF9wYXJzZXIpOworK30KKysKKyttb2R1bGVfaW5pdChvZnBhcnRfcGFyc2VyX2luaXQpOworK21vZHVsZV9leGl0KG9mcGFydF9wYXJzZXJfZXhpdCk7CisrCisrTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworK01PRFVMRV9ERVNDUklQVElPTigiUGFyc2VyIGZvciBNVEQgcGFydGl0aW9uaW5nIGluZm9ybWF0aW9uIGluIGRldmljZSB0cmVlIik7CisrTU9EVUxFX0FVVEhPUigiVml0YWx5IFdvb2wsIERhdmlkIEdpYnNvbiIpOworKy8qCisrICogV2hlbiBNVEQgY29yZSBjYW5ub3QgZmluZCB0aGUgcmVxdWVzdGVkIHBhcnNlciwgaXQgdHJpZXMgdG8gbG9hZCB0aGUgbW9kdWxlCisrICogd2l0aCB0aGUgc2FtZSBuYW1lLiBTaW5jZSB3ZSBwcm92aWRlIHRoZSBvZm9sZHBhcnQgcGFyc2VyLCB3ZSBzaG91bGQgaGF2ZQorKyAqIHRoZSBjb3JyZXNwb25kaW5nIGFsaWFzLgorKyAqLworK01PRFVMRV9BTElBUygiZml4ZWQtcGFydGl0aW9ucyIpOworK01PRFVMRV9BTElBUygib2ZvbGRwYXJ0Iik7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNDA0LXY1LjEzLW10ZC1wYXJzZXJzLW9mcGFydC1saW1pdC1wYXJzaW5nLW9mLWRlcHJlY2F0ZWQtRFQtc3kucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNDA0LXY1LjEzLW10ZC1wYXJzZXJzLW9mcGFydC1saW1pdC1wYXJzaW5nLW9mLWRlcHJlY2F0ZWQtRFQtc3kucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUwNThhZAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC80MDQtdjUuMTMtbXRkLXBhcnNlcnMtb2ZwYXJ0LWxpbWl0LXBhcnNpbmctb2YtZGVwcmVjYXRlZC1EVC1zeS5wYXRjaApAQCAtMCwwICsxLDY5IEBACitGcm9tIDJkNzUxMjAzYWFjZjg2YTFiMzAxYTE4OGQ4NTUxYzdkYTkxMDQzYWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/UmFmYT1DNT04Mj0yME1pPUM1PTgyZWNraT89IDxyYWZhbEBtaWxlY2tpLnBsPgorRGF0ZTogVHVlLCAyIE1hciAyMDIxIDIwOjAwOjEyICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIG10ZDogcGFyc2Vyczogb2ZwYXJ0OiBsaW1pdCBwYXJzaW5nIG9mIGRlcHJlY2F0ZWQgRFQgc3ludGF4CitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK0ZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IG9mcGFydCBzdGlsbCBzdXBwb3J0cyB0aGUgb2xkIHN5bnRheCBsaWtlOgorc3BpLWZsYXNoQDAgeworCWNvbXBhdGlibGUgPSAiamVkZWMsc3BpLW5vciI7CisJcmVnID0gPDB4MD47CisKKwlwYXJ0aXRpb25AMCB7CisJCWxhYmVsID0gImJvb3Rsb2FkZXIiOworCQlyZWcgPSA8MHgwIDB4MTAwMDAwPjsKKwl9OworfTsKKyh3aXRob3V0ICJwYXJ0aXRpb25zIiBzdWJub2RlKS4KKworVGhlcmUgaXMgbm8gcmVhc29uIGhvd2V2ZXIgdG8gc3VwcG9ydCBuZXN0ZWQgcGFydGl0aW9ucyB3aXRob3V0IGEgY2xlYXIKKyJjb21wYXRpYmxlIiBzdHJpbmcgbGlrZToKK3BhcnRpdGlvbnMgeworCWNvbXBhdGlibGUgPSAiZml4ZWQtcGFydGl0aW9ucyI7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisKKwlwYXJ0aXRpb25AMCB7CisJCWxhYmVsID0gImJvb3Rsb2FkZXIiOworCQlyZWcgPSA8MHgwIDB4MTAwMDAwPjsKKworCQlwYXJ0aXRpb25AMCB7CisJCQlsYWJlbCA9ICJjb25maWciOworCQkJcmVnID0gPDB4ODAwMDAgMHg4MDAwMD47CisJCX07CisJfTsKK307Cisod2UgbmV2ZXIgb2ZmaWNpYWxseSBzdXBwb3J0ZWQgb3IgZG9jdW1lbnRlZCB0aGF0KS4KKworTWFrZSBzdXJlIG9mcGFydCBkb2Vzbid0IGF0dGVtcHQgdG8gcGFyc2UgYWJvdmUuCisKK0NjOiBBbnN1ZWwgU21pdGggPGFuc3VlbHNtdGhAZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogUmFmYcWCIE1pxYJlY2tpIDxyYWZhbEBtaWxlY2tpLnBsPgorU2lnbmVkLW9mZi1ieTogTWlxdWVsIFJheW5hbCA8bWlxdWVsLnJheW5hbEBib290bGluLmNvbT4KK0xpbms6IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xpbnV4LW10ZC8yMDIxMDMwMjE5MDAxMi4xMjU1LTEtemFqZWM1QGdtYWlsLmNvbQorLS0tCisgZHJpdmVycy9tdGQvcGFyc2Vycy9vZnBhcnRfY29yZS5jIHwgNCArKystCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCistLS0gYS9kcml2ZXJzL210ZC9wYXJzZXJzL29mcGFydF9jb3JlLmMKKysrKyBiL2RyaXZlcnMvbXRkL3BhcnNlcnMvb2ZwYXJ0X2NvcmUuYworQEAgLTUzLDcgKzUzLDcgQEAgc3RhdGljIGludCBwYXJzZV9maXhlZF9wYXJ0aXRpb25zKHN0cnVjdAorIAkJcmV0dXJuIDA7CisgCisgCW9mcGFydF9ub2RlID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobXRkX25vZGUsICJwYXJ0aXRpb25zIik7CistCWlmICghb2ZwYXJ0X25vZGUpIHsKKysJaWYgKCFvZnBhcnRfbm9kZSAmJiAhbXRkX2lzX3BhcnRpdGlvbihtYXN0ZXIpKSB7CisgCQkvKgorIAkJICogV2UgbWlnaHQgZ2V0IGhlcmUgZXZlbiB3aGVuIG9mcGFydCBpc24ndCB1c2VkIGF0IGFsbCAoZS5nLiwKKyAJCSAqIHdoZW4gdXNpbmcgYW5vdGhlciBwYXJzZXIpLCBzbyBkb24ndCBiZSBsb3VkZXIgdGhhbgorQEAgLTY0LDYgKzY0LDggQEAgc3RhdGljIGludCBwYXJzZV9maXhlZF9wYXJ0aXRpb25zKHN0cnVjdAorIAkJb2ZwYXJ0X25vZGUgPSBtdGRfbm9kZTsKKyAJCWRlZGljYXRlZCA9IGZhbHNlOworIAl9CisrCWlmICghb2ZwYXJ0X25vZGUpCisrCQlyZXR1cm4gMDsKKyAKKyAJb2ZfaWQgPSBvZl9tYXRjaF9ub2RlKHBhcnNlX29mcGFydF9tYXRjaF90YWJsZSwgb2ZwYXJ0X25vZGUpOworIAlpZiAoZGVkaWNhdGVkICYmICFvZl9pZCkgewpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzQwNS12NS4xMy1tdGQtcGFyc2Vycy1vZnBhcnQtbWFrZS1zeW1ib2wtYmNtNDkwOF9wYXJ0aXRpb25zX3F1LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzQwNS12NS4xMy1tdGQtcGFyc2Vycy1vZnBhcnQtbWFrZS1zeW1ib2wtYmNtNDkwOF9wYXJ0aXRpb25zX3F1LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxYjc3OGEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNDA1LXY1LjEzLW10ZC1wYXJzZXJzLW9mcGFydC1tYWtlLXN5bWJvbC1iY200OTA4X3BhcnRpdGlvbnNfcXUucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRnJvbSBiODdiNmQyZDZmNTQwZTI5YzNmOThlMTU3MmQ2NGU1NjBkNzNkNmMxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogV2VpIFlvbmdqdW4gPHdlaXlvbmdqdW4xQGh1YXdlaS5jb20+CitEYXRlOiBUaHUsIDQgTWFyIDIwMjEgMDY6NDY6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gbXRkOiBwYXJzZXJzOiBvZnBhcnQ6IG1ha2Ugc3ltYm9sICdiY200OTA4X3BhcnRpdGlvbnNfcXVpcmtzJworIHN0YXRpYworCitUaGUgc3BhcnNlIHRvb2wgY29tcGxhaW5zIGFzIGZvbGxvd3M6CisKK2RyaXZlcnMvbXRkL3BhcnNlcnMvb2ZwYXJ0X2NvcmUuYzoyNTozMjogd2FybmluZzoKKyBzeW1ib2wgJ2JjbTQ5MDhfcGFydGl0aW9uc19xdWlya3MnIHdhcyBub3QgZGVjbGFyZWQuIFNob3VsZCBpdCBiZSBzdGF0aWM/CisKK1RoaXMgc3ltYm9sIGlzIG5vdCB1c2VkIG91dHNpZGUgb2Ygb2ZwYXJ0X2NvcmUuYywgc28gdGhpcworY29tbWl0IG1hcmtzIGl0IHN0YXRpYy4KKworRml4ZXM6IDQ1N2RhOTMxYjYwOCAoIm10ZDogcGFyc2Vyczogb2ZwYXJ0OiBzdXBwb3J0IEJDTTQ5MDggZml4ZWQgcGFydGl0aW9ucyIpCitSZXBvcnRlZC1ieTogSHVsayBSb2JvdCA8aHVsa2NpQGh1YXdlaS5jb20+CitTaWduZWQtb2ZmLWJ5OiBXZWkgWW9uZ2p1biA8d2VpeW9uZ2p1bjFAaHVhd2VpLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1pcXVlbCBSYXluYWwgPG1pcXVlbC5yYXluYWxAYm9vdGxpbi5jb20+CitMaW5rOiBodHRwczovL2xvcmUua2VybmVsLm9yZy9saW51eC1tdGQvMjAyMTAzMDQwNjQ2MDAuMzI3OTEzOC0xLXdlaXlvbmdqdW4xQGh1YXdlaS5jb20KKy0tLQorIGRyaXZlcnMvbXRkL3BhcnNlcnMvb2ZwYXJ0X2NvcmUuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworLS0tIGEvZHJpdmVycy9tdGQvcGFyc2Vycy9vZnBhcnRfY29yZS5jCisrKysgYi9kcml2ZXJzL210ZC9wYXJzZXJzL29mcGFydF9jb3JlLmMKK0BAIC0yMiw3ICsyMiw3IEBAIHN0cnVjdCBmaXhlZF9wYXJ0aXRpb25zX3F1aXJrcyB7CisgCWludCAoKnBvc3RfcGFyc2UpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHMsIGludCBucl9wYXJ0cyk7CisgfTsKKyAKKy1zdHJ1Y3QgZml4ZWRfcGFydGl0aW9uc19xdWlya3MgYmNtNDkwOF9wYXJ0aXRpb25zX3F1aXJrcyA9IHsKKytzdGF0aWMgc3RydWN0IGZpeGVkX3BhcnRpdGlvbnNfcXVpcmtzIGJjbTQ5MDhfcGFydGl0aW9uc19xdWlya3MgPSB7CisgCS5wb3N0X3BhcnNlID0gYmNtNDkwOF9wYXJ0aXRpb25zX3Bvc3RfcGFyc2UsCisgfTsKKyAKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC80MDYtdjUuMTMtMDAwMS1tdGQtY29yZS1hZGQtbnZtZW0tY2VsbHMtY29tcGF0aWJsZS10by1wYXJzZS1tdGQtYXMtLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzQwNi12NS4xMy0wMDAxLW10ZC1jb3JlLWFkZC1udm1lbS1jZWxscy1jb21wYXRpYmxlLXRvLXBhcnNlLW10ZC1hcy0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNlYTc0MwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC80MDYtdjUuMTMtMDAwMS1tdGQtY29yZS1hZGQtbnZtZW0tY2VsbHMtY29tcGF0aWJsZS10by1wYXJzZS1tdGQtYXMtLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gNjU4YzQ0NDhiYmJmMDJhMTQzYWJmMWI4OWQwOWEzMzM3ZWJkM2JhNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFuc3VlbCBTbWl0aCA8YW5zdWVsc210aEBnbWFpbC5jb20+CitEYXRlOiBGcmksIDEyIE1hciAyMDIxIDA3OjI4OjE5ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIG10ZDogY29yZTogYWRkIG52bWVtLWNlbGxzIGNvbXBhdGlibGUgdG8gcGFyc2UgbXRkIGFzIG52bWVtCisgY2VsbHMKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworUGFydGl0aW9ucyB0aGF0IGNvbnRhaW5zIHRoZSBudm1lbS1jZWxscyBjb21wYXRpYmxlIHdpbGwgcmVnaXN0ZXIKK3RoZWlyIGRpcmVjdCBzdWJvbm9kZXMgYXMgbnZtZW0gY2VsbHMgYW5kIHRoZSBub2RlIHdpbGwgYmUgdHJlYXRlZCBhcyBhCitudm1lbSBwcm92aWRlci4KKworU2lnbmVkLW9mZi1ieTogQW5zdWVsIFNtaXRoIDxhbnN1ZWxzbXRoQGdtYWlsLmNvbT4KK1Rlc3RlZC1ieTogUmFmYcWCIE1pxYJlY2tpIDxyYWZhbEBtaWxlY2tpLnBsPgorU2lnbmVkLW9mZi1ieTogTWlxdWVsIFJheW5hbCA8bWlxdWVsLnJheW5hbEBib290bGluLmNvbT4KK0xpbms6IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xpbnV4LW10ZC8yMDIxMDMxMjA2MjgzMC4yMDU0OC0xLWFuc3VlbHNtdGhAZ21haWwuY29tCistLS0KKyBkcml2ZXJzL210ZC9tdGRjb3JlLmMgfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworLS0tIGEvZHJpdmVycy9tdGQvbXRkY29yZS5jCisrKysgYi9kcml2ZXJzL210ZC9tdGRjb3JlLmMKK0BAIC01NTksNiArNTU5LDcgQEAgc3RhdGljIGludCBtdGRfbnZtZW1fcmVnX3JlYWQodm9pZCAqcHJpdgorIAorIHN0YXRpYyBpbnQgbXRkX252bWVtX2FkZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKKyB7CisrCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IG10ZF9nZXRfb2Zfbm9kZShtdGQpOworIAlzdHJ1Y3QgbnZtZW1fY29uZmlnIGNvbmZpZyA9IHt9OworIAorIAljb25maWcuaWQgPSAtMTsKK0BAIC01NzEsNyArNTcyLDcgQEAgc3RhdGljIGludCBtdGRfbnZtZW1fYWRkKHN0cnVjdCBtdGRfaW5mbworIAljb25maWcuc3RyaWRlID0gMTsKKyAJY29uZmlnLnJlYWRfb25seSA9IHRydWU7CisgCWNvbmZpZy5yb290X29ubHkgPSB0cnVlOworLQljb25maWcubm9fb2Zfbm9kZSA9IHRydWU7CisrCWNvbmZpZy5ub19vZl9ub2RlID0gIW9mX2RldmljZV9pc19jb21wYXRpYmxlKG5vZGUsICJudm1lbS1jZWxscyIpOworIAljb25maWcucHJpdiA9IG10ZDsKKyAKKyAJbXRkLT5udm1lbSA9IG52bWVtX3JlZ2lzdGVyKCZjb25maWcpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzQwNi12NS4xMy0wMDAyLWR0LWJpbmRpbmdzLW52bWVtLWRyb3Atbm9kZW5hbWUtcmVzdHJpY3Rpb24ucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNDA2LXY1LjEzLTAwMDItZHQtYmluZGluZ3MtbnZtZW0tZHJvcC1ub2RlbmFtZS1yZXN0cmljdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDUxNWJkCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzQwNi12NS4xMy0wMDAyLWR0LWJpbmRpbmdzLW52bWVtLWRyb3Atbm9kZW5hbWUtcmVzdHJpY3Rpb24ucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSA1Mjk4MWEwZmE5ZjdkNjg2NDFlMGU2YmI1ODQwNTRjNmQ5ZWIyMDU2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQW5zdWVsIFNtaXRoIDxhbnN1ZWxzbXRoQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMTIgTWFyIDIwMjEgMDc6Mjg6MjAgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gZHQtYmluZGluZ3M6IG52bWVtOiBkcm9wICRub2RlbmFtZSByZXN0cmljdGlvbgorCitEcm9wICRub2RlbmFtZSByZXN0cmljdGlvbiBhcyBub3cgbXRkIHBhcnRpdGlvbiBjYW4gYWxzbyBiZSB1c2VkIGFzCitudm1lbSBwcm92aWRlci4KKworU2lnbmVkLW9mZi1ieTogQW5zdWVsIFNtaXRoIDxhbnN1ZWxzbXRoQGdtYWlsLmNvbT4KK1Jldmlld2VkLWJ5OiBSb2IgSGVycmluZyA8cm9iaEBrZXJuZWwub3JnPgorU2lnbmVkLW9mZi1ieTogTWlxdWVsIFJheW5hbCA8bWlxdWVsLnJheW5hbEBib290bGluLmNvbT4KK0xpbms6IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xpbnV4LW10ZC8yMDIxMDMxMjA2MjgzMC4yMDU0OC0yLWFuc3VlbHNtdGhAZ21haWwuY29tCistLS0KKyBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbnZtZW0vbnZtZW0ueWFtbCB8IDMgLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgZGVsZXRpb25zKC0pCisKKy0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9udm1lbS9udm1lbS55YW1sCisrKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbnZtZW0vbnZtZW0ueWFtbAorQEAgLTIwLDkgKzIwLDYgQEAgZGVzY3JpcHRpb246IHwKKyAgIHN0b3JhZ2UgZGV2aWNlLgorIAorIHByb3BlcnRpZXM6CistICAkbm9kZW5hbWU6CistICAgIHBhdHRlcm46ICJeKGVlcHJvbXxlZnVzZXxudnJhbSkoQC4qfC1bMC05YS1mXSkqJCIKKy0KKyAgICIjYWRkcmVzcy1jZWxscyI6CisgICAgIGNvbnN0OiAxCisgCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNDA2LXY1LjEzLTAwMDMtZHQtYmluZGluZ3MtbXRkLURvY3VtZW50LXVzZS1vZi1udm1lbS1jZWxscy1jb21wYXRpYi5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC80MDYtdjUuMTMtMDAwMy1kdC1iaW5kaW5ncy1tdGQtRG9jdW1lbnQtdXNlLW9mLW52bWVtLWNlbGxzLWNvbXBhdGliLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MjkxOWYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNDA2LXY1LjEzLTAwMDMtZHQtYmluZGluZ3MtbXRkLURvY3VtZW50LXVzZS1vZi1udm1lbS1jZWxscy1jb21wYXRpYi5wYXRjaApAQCAtMCwwICsxLDExOSBAQAorRnJvbSBhYzQyYzQ2Zjk4M2U0YTkwMDNhN2JiOTFhZDQ0YTIzYWI3YjhmNTM0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQW5zdWVsIFNtaXRoIDxhbnN1ZWxzbXRoQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMTIgTWFyIDIwMjEgMDc6Mjg6MjEgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gZHQtYmluZGluZ3M6IG10ZDogRG9jdW1lbnQgdXNlIG9mIG52bWVtLWNlbGxzIGNvbXBhdGlibGUKKworRG9jdW1lbnQgbnZtZW0tY2VsbHMgY29tcGF0aWJsZSB1c2VkIHRvIHRyZWF0IG10ZCBwYXJ0aXRpb25zIGFzIGEKK252bWVtIHByb3ZpZGVyLgorCitTaWduZWQtb2ZmLWJ5OiBBbnN1ZWwgU21pdGggPGFuc3VlbHNtdGhAZ21haWwuY29tPgorUmV2aWV3ZWQtYnk6IFJvYiBIZXJyaW5nIDxyb2JoQGtlcm5lbC5vcmc+CitTaWduZWQtb2ZmLWJ5OiBNaXF1ZWwgUmF5bmFsIDxtaXF1ZWwucmF5bmFsQGJvb3RsaW4uY29tPgorTGluazogaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvbGludXgtbXRkLzIwMjEwMzEyMDYyODMwLjIwNTQ4LTMtYW5zdWVsc210aEBnbWFpbC5jb20KKy0tLQorIC4uLi9iaW5kaW5ncy9tdGQvcGFydGl0aW9ucy9udm1lbS1jZWxscy55YW1sICB8IDk5ICsrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgOTkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbXRkL3BhcnRpdGlvbnMvbnZtZW0tY2VsbHMueWFtbAorCistLS0gL2Rldi9udWxsCisrKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbXRkL3BhcnRpdGlvbnMvbnZtZW0tY2VsbHMueWFtbAorQEAgLTAsMCArMSw5OSBAQAorKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UKKyslWUFNTCAxLjIKKystLS0KKyskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL210ZC9wYXJ0aXRpb25zL252bWVtLWNlbGxzLnlhbWwjCisrJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjCisrCisrdGl0bGU6IE52bWVtIGNlbGxzCisrCisrZGVzY3JpcHRpb246IHwKKysgIEFueSBwYXJ0aXRpb24gY29udGFpbmluZyB0aGUgY29tcGF0aWJsZSAibnZtZW0tY2VsbHMiIHdpbGwgcmVnaXN0ZXIgYXMgYQorKyAgbnZtZW0gcHJvdmlkZXIuCisrICBFYWNoIGRpcmVjdCBzdWJub2RlcyByZXByZXNlbnRzIGEgbnZtZW0gY2VsbCBmb2xsb3dpbmcgdGhlIG52bWVtIGJpbmRpbmcuCisrICBOdm1lbSBiaW5kaW5nIHRvIGRlY2xhcmUgbnZtZW0tY2VsbHMgY2FuIGJlIGZvdW5kIGluOgorKyAgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL252bWVtL252bWVtLnlhbWwKKysKKyttYWludGFpbmVyczoKKysgIC0gQW5zdWVsIFNtaXRoIDxhbnN1ZWxzbXRoQGdtYWlsLmNvbT4KKysKKythbGxPZjoKKysgIC0gJHJlZjogL3NjaGVtYXMvbnZtZW0vbnZtZW0ueWFtbCMKKysKKytwcm9wZXJ0aWVzOgorKyAgY29tcGF0aWJsZToKKysgICAgY29uc3Q6IG52bWVtLWNlbGxzCisrCisrcmVxdWlyZWQ6CisrICAtIGNvbXBhdGlibGUKKysKKythZGRpdGlvbmFsUHJvcGVydGllczogdHJ1ZQorKworK2V4YW1wbGVzOgorKyAgLSB8CisrICAgIHBhcnRpdGlvbnMgeworKyAgICAgIGNvbXBhdGlibGUgPSAiZml4ZWQtcGFydGl0aW9ucyI7CisrICAgICAgI2FkZHJlc3MtY2VsbHMgPSA8MT47CisrICAgICAgI3NpemUtY2VsbHMgPSA8MT47CisrCisrICAgICAgLyogLi4uICovCisrCisrICAgICAgfTsKKysgICAgICBhcnQ6IGFydEAxMjAwMDAwIHsKKysgICAgICAgIGNvbXBhdGlibGUgPSAibnZtZW0tY2VsbHMiOworKyAgICAgICAgcmVnID0gPDB4MTIwMDAwMCAweDAxNDAwMDA+OworKyAgICAgICAgbGFiZWwgPSAiYXJ0IjsKKysgICAgICAgIHJlYWQtb25seTsKKysgICAgICAgICNhZGRyZXNzLWNlbGxzID0gPDE+OworKyAgICAgICAgI3NpemUtY2VsbHMgPSA8MT47CisrCisrICAgICAgICBtYWNhZGRyX2dtYWMxOiBtYWNhZGRyX2dtYWMxQDAgeworKyAgICAgICAgICByZWcgPSA8MHgwIDB4Nj47CisrICAgICAgICB9OworKworKyAgICAgICAgbWFjYWRkcl9nbWFjMjogbWFjYWRkcl9nbWFjMkA2IHsKKysgICAgICAgICAgcmVnID0gPDB4NiAweDY+OworKyAgICAgICAgfTsKKysKKysgICAgICAgIHByZV9jYWxfMjRnOiBwcmVfY2FsXzI0Z0AxMDAwIHsKKysgICAgICAgICAgcmVnID0gPDB4MTAwMCAweDJmMjA+OworKyAgICAgICAgfTsKKysKKysgICAgICAgIHByZV9jYWxfNWc6IHByZV9jYWxfNWdANTAwMHsKKysgICAgICAgICAgcmVnID0gPDB4NTAwMCAweDJmMjA+OworKyAgICAgICAgfTsKKysgICAgICB9OworKyAgLSB8CisrICAgIHBhcnRpdGlvbnMgeworKyAgICAgICAgY29tcGF0aWJsZSA9ICJmaXhlZC1wYXJ0aXRpb25zIjsKKysgICAgICAgICNhZGRyZXNzLWNlbGxzID0gPDE+OworKyAgICAgICAgI3NpemUtY2VsbHMgPSA8MT47CisrCisrICAgICAgICBwYXJ0aXRpb25AMCB7CisrICAgICAgICAgICAgbGFiZWwgPSAiYm9vdGxvYWRlciI7CisrICAgICAgICAgICAgcmVnID0gPDB4MDAwMDAwIDB4MTAwMDAwPjsKKysgICAgICAgICAgICByZWFkLW9ubHk7CisrICAgICAgICB9OworKworKyAgICAgICAgZmlybXdhcmVAMTAwMDAwIHsKKysgICAgICAgICAgICBjb21wYXRpYmxlID0gImJyY20sdHJ4IjsKKysgICAgICAgICAgICBsYWJlbCA9ICJmaXJtd2FyZSI7CisrICAgICAgICAgICAgcmVnID0gPDB4MTAwMDAwIDB4ZTAwMDAwPjsKKysgICAgICAgIH07CisrCisrICAgICAgICBjYWxpYnJhdGlvbkBmMDAwMDAgeworKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSAibnZtZW0tY2VsbHMiOworKyAgICAgICAgICAgIGxhYmVsID0gImNhbGlicmF0aW9uIjsKKysgICAgICAgICAgICByZWcgPSA8MHhmMDAwMDAgMHgxMDAwMDA+OworKyAgICAgICAgICAgIHJhbmdlcyA9IDwwIDB4ZjAwMDAwIDB4MTAwMDAwPjsKKysgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IDwxPjsKKysgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IDwxPjsKKysKKysgICAgICAgICAgICB3aWZpMEAwIHsKKysgICAgICAgICAgICAgICAgcmVnID0gPDB4MDAwMDAwIDB4MDgwMDAwPjsKKysgICAgICAgICAgICB9OworKworKyAgICAgICAgICAgIHdpZmkxQDgwMDAwIHsKKysgICAgICAgICAgICAgICAgcmVnID0gPDB4MDgwMDAwIDB4MDgwMDAwPjsKKysgICAgICAgICAgICB9OworKyAgICAgICAgfTsKKysgICAgfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC80MDctdjUuMTMtMDAwMS1kdC1iaW5kaW5ncy1tdGQtYWRkLWJpbmRpbmctZm9yLUxpbmtzeXMtTm9ydGhzdGFyLXBhLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzQwNy12NS4xMy0wMDAxLWR0LWJpbmRpbmdzLW10ZC1hZGQtYmluZGluZy1mb3ItTGlua3N5cy1Ob3J0aHN0YXItcGEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVhNGFmZAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC80MDctdjUuMTMtMDAwMS1kdC1iaW5kaW5ncy1tdGQtYWRkLWJpbmRpbmctZm9yLUxpbmtzeXMtTm9ydGhzdGFyLXBhLnBhdGNoCkBAIC0wLDAgKzEsOTggQEAKK0Zyb20gMmZhNzI5NDE3NWM3NmUxZWM1NjhhYTc1YzE4OTFmZDkwODcyOGM4ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9SYWZhPUM1PTgyPTIwTWk9QzU9ODJlY2tpPz0gPHJhZmFsQG1pbGVja2kucGw+CitEYXRlOiBGcmksIDEyIE1hciAyMDIxIDE0OjQ5OjE4ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGR0LWJpbmRpbmdzOiBtdGQ6IGFkZCBiaW5kaW5nIGZvciBMaW5rc3lzIE5vcnRoc3RhcgorIHBhcnRpdGlvbnMKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworTGlua3N5cyBvbiBCcm9hZGNvbSBOb3J0aHN0YXIgZGV2aWNlcyB1c2VzIGZpeGVkIGZsYXNoIGxheW91dCB3aXRoCittdWx0aXBsZSBmaXJtd2FyZSBwYXJ0aXRpb25zLgorCitTaWduZWQtb2ZmLWJ5OiBSYWZhxYIgTWnFgmVja2kgPHJhZmFsQG1pbGVja2kucGw+CitSZXZpZXdlZC1ieTogUm9iIEhlcnJpbmcgPHJvYmhAa2VybmVsLm9yZz4KK1NpZ25lZC1vZmYtYnk6IE1pcXVlbCBSYXluYWwgPG1pcXVlbC5yYXluYWxAYm9vdGxpbi5jb20+CitMaW5rOiBodHRwczovL2xvcmUua2VybmVsLm9yZy9saW51eC1tdGQvMjAyMTAzMTIxMzQ5MTkuNzc2Ny0xLXphamVjNUBnbWFpbC5jb20KKy0tLQorIC4uLi9tdGQvcGFydGl0aW9ucy9saW5rc3lzLG5zLXBhcnRpdGlvbnMueWFtbCB8IDc0ICsrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNzQgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbXRkL3BhcnRpdGlvbnMvbGlua3N5cyxucy1wYXJ0aXRpb25zLnlhbWwKKworLS0tIC9kZXYvbnVsbAorKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL210ZC9wYXJ0aXRpb25zL2xpbmtzeXMsbnMtcGFydGl0aW9ucy55YW1sCitAQCAtMCwwICsxLDc0IEBACisrIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZQorKyVZQU1MIDEuMgorKy0tLQorKyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbXRkL3BhcnRpdGlvbnMvbGlua3N5cyxucy1wYXJ0aXRpb25zLnlhbWwjCisrJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjCisrCisrdGl0bGU6IExpbmtzeXMgTm9ydGhzdGFyIHBhcnRpdGlvbmluZworKworK2Rlc2NyaXB0aW9uOiB8CisrICBMaW5rc3lzIGRldmljZXMgYmFzZWQgb24gQnJvYWRjb20gTm9ydGhzdGFyIGFyY2hpdGVjdHVyZSBvZnRlbiB1c2UgdHdvCisrICBmaXJtd2FyZSBwYXJ0aXRpb25zLiBPbmUgaXMgdXNlZCBmb3IgcmVndWxhciBib290aW5nLCB0aGUgb3RoZXIgaXMgdHJlYXRlZCBhcworKyAgZmFsbGJhY2suCisrCisrICBUaGlzIGJpbmRpbmcgYWxsb3dzIGRlZmluaW5nIGFsbCBmaXhlZCBwYXJ0aXRpb25zIGFuZCBtYXJraW5nIHRob3NlIGNvbnRhaW5pbmcKKysgIGZpcm13YXJlLiBTeXN0ZW0gY2FuIHVzZSB0aGF0IGluZm9ybWF0aW9uIGUuZy4gZm9yIGJvb3Rpbmcgb3IgZmxhc2hpbmcKKysgIHB1cnBvc2VzLgorKworK21haW50YWluZXJzOgorKyAgLSBSYWZhxYIgTWnFgmVja2kgPHJhZmFsQG1pbGVja2kucGw+CisrCisrcHJvcGVydGllczoKKysgIGNvbXBhdGlibGU6CisrICAgIGNvbnN0OiBsaW5rc3lzLG5zLXBhcnRpdGlvbnMKKysKKysgICIjYWRkcmVzcy1jZWxscyI6CisrICAgIGVudW06IFsgMSwgMiBdCisrCisrICAiI3NpemUtY2VsbHMiOgorKyAgICBlbnVtOiBbIDEsIDIgXQorKworK3BhdHRlcm5Qcm9wZXJ0aWVzOgorKyAgIl5wYXJ0aXRpb25AWzAtOWEtZl0rJCI6CisrICAgICRyZWY6ICJwYXJ0aXRpb24ueWFtbCMiCisrICAgIHByb3BlcnRpZXM6CisrICAgICAgY29tcGF0aWJsZToKKysgICAgICAgIGl0ZW1zOgorKyAgICAgICAgICAtIGNvbnN0OiBsaW5rc3lzLG5zLWZpcm13YXJlCisrICAgICAgICAgIC0gY29uc3Q6IGJyY20sdHJ4CisrICAgIHVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2UKKysKKytyZXF1aXJlZDoKKysgIC0gIiNhZGRyZXNzLWNlbGxzIgorKyAgLSAiI3NpemUtY2VsbHMiCisrCisrYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlCisrCisrZXhhbXBsZXM6CisrICAtIHwKKysgICAgcGFydGl0aW9ucyB7CisrICAgICAgICBjb21wYXRpYmxlID0gImxpbmtzeXMsbnMtcGFydGl0aW9ucyI7CisrICAgICAgICAjYWRkcmVzcy1jZWxscyA9IDwxPjsKKysgICAgICAgICNzaXplLWNlbGxzID0gPDE+OworKworKyAgICAgICAgcGFydGl0aW9uQDAgeworKyAgICAgICAgICAgIGxhYmVsID0gImJvb3QiOworKyAgICAgICAgICAgIHJlZyA9IDwweDAgMHgxMDAwMDA+OworKyAgICAgICAgICAgIHJlYWQtb25seTsKKysgICAgICAgIH07CisrCisrICAgICAgICBwYXJ0aXRpb25AMTAwMDAwIHsKKysgICAgICAgICAgICBsYWJlbCA9ICJudnJhbSI7CisrICAgICAgICAgICAgcmVnID0gPDB4MTAwMDAwIDB4MTAwMDAwPjsKKysgICAgICAgIH07CisrCisrICAgICAgICBwYXJ0aXRpb25AMjAwMDAwIHsKKysgICAgICAgICAgICBjb21wYXRpYmxlID0gImxpbmtzeXMsbnMtZmlybXdhcmUiLCAiYnJjbSx0cngiOworKyAgICAgICAgICAgIHJlZyA9IDwweDIwMDAwMCAweGYwMDAwMD47CisrICAgICAgICB9OworKworKyAgICAgICAgcGFydGl0aW9uQDExMDAwMDAgeworKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSAibGlua3N5cyxucy1maXJtd2FyZSIsICJicmNtLHRyeCI7CisrICAgICAgICAgICAgcmVnID0gPDB4MTEwMDAwMCAweGYwMDAwMD47CisrICAgICAgICB9OworKyAgICB9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzQwNy12NS4xMy0wMDAyLW10ZC1wYXJzZXJzLW9mcGFydC1zdXBwb3J0LUxpbmtzeXMtTm9ydGhzdGFyLXBhcnRpdGkucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNDA3LXY1LjEzLTAwMDItbXRkLXBhcnNlcnMtb2ZwYXJ0LXN1cHBvcnQtTGlua3N5cy1Ob3J0aHN0YXItcGFydGl0aS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWViOTM5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzQwNy12NS4xMy0wMDAyLW10ZC1wYXJzZXJzLW9mcGFydC1zdXBwb3J0LUxpbmtzeXMtTm9ydGhzdGFyLXBhcnRpdGkucGF0Y2gKQEAgLTAsMCArMSwxNTYgQEAKK0Zyb20gNzEzNGEyZDAyNmQ5NDIyMTBiNGQyNmQ2MDU5YzlkOTc5Y2E3ODY2ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9SYWZhPUM1PTgyPTIwTWk9QzU9ODJlY2tpPz0gPHJhZmFsQG1pbGVja2kucGw+CitEYXRlOiBGcmksIDEyIE1hciAyMDIxIDE0OjQ5OjE5ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIG10ZDogcGFyc2Vyczogb2ZwYXJ0OiBzdXBwb3J0IExpbmtzeXMgTm9ydGhzdGFyIHBhcnRpdGlvbnMKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworVGhpcyBhbGxvd3MgZXh0ZW5kaW5nIG9mcGFydCBwYXJzZXIgd2l0aCBzdXBwb3J0IGZvciBMaW5rc3lzIE5vcnRoc3RhcgorZGV2aWNlcy4gVGhhdCBzdXBwb3J0IHVzZXMgcmVjZW50bHkgYWRkZWQgcXVpcmtzIG1lY2hhbmlzbS4KKworU2lnbmVkLW9mZi1ieTogUmFmYcWCIE1pxYJlY2tpIDxyYWZhbEBtaWxlY2tpLnBsPgorU2lnbmVkLW9mZi1ieTogTWlxdWVsIFJheW5hbCA8bWlxdWVsLnJheW5hbEBib290bGluLmNvbT4KK0xpbms6IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xpbnV4LW10ZC8yMDIxMDMxMjEzNDkxOS43NzY3LTItemFqZWM1QGdtYWlsLmNvbQorLS0tCisgZHJpdmVycy9tdGQvcGFyc2Vycy9LY29uZmlnICAgICAgICAgICAgIHwgMTAgKysrKysKKyBkcml2ZXJzL210ZC9wYXJzZXJzL01ha2VmaWxlICAgICAgICAgICAgfCAgMSArCisgZHJpdmVycy9tdGQvcGFyc2Vycy9vZnBhcnRfY29yZS5jICAgICAgIHwgIDYgKysrCisgZHJpdmVycy9tdGQvcGFyc2Vycy9vZnBhcnRfbGlua3N5c19ucy5jIHwgNTAgKysrKysrKysrKysrKysrKysrKysrKysrKworIGRyaXZlcnMvbXRkL3BhcnNlcnMvb2ZwYXJ0X2xpbmtzeXNfbnMuaCB8IDE4ICsrKysrKysrKworIDUgZmlsZXMgY2hhbmdlZCwgODUgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL210ZC9wYXJzZXJzL29mcGFydF9saW5rc3lzX25zLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tdGQvcGFyc2Vycy9vZnBhcnRfbGlua3N5c19ucy5oCisKKy0tLSBhL2RyaXZlcnMvbXRkL3BhcnNlcnMvS2NvbmZpZworKysrIGIvZHJpdmVycy9tdGQvcGFyc2Vycy9LY29uZmlnCitAQCAtNzYsNiArNzYsMTYgQEAgY29uZmlnIE1URF9PRl9QQVJUU19CQ000OTA4CisgCSAgdGhhdCBjYW4gaGF2ZSBtdWx0aXBsZSAiZmlybXdhcmUiIHBhcnRpdGlvbnMuIEl0IHRha2VzIGNhcmUgb2YKKyAJICBmaW5kaW5nIGN1cnJlbnRseSB1c2VkIG9uZSBhbmQgYmFja3VwIG9uZXMuCisgCisrY29uZmlnIE1URF9PRl9QQVJUU19MSU5LU1lTX05TCisrCWJvb2wgIkxpbmtzeXMgTm9ydGhzdGFyIHBhcnRpdGlvbmluZyBzdXBwb3J0IgorKwlkZXBlbmRzIG9uIE1URF9PRl9QQVJUUyAmJiAoQVJDSF9CQ01fNTMwMVggfHwgQVJDSF9CQ000OTA4IHx8IENPTVBJTEVfVEVTVCkKKysJZGVmYXVsdCBBUkNIX0JDTV81MzAxWAorKwloZWxwCisrCSAgVGhpcyBwcm92aWRlcyBwYXJ0aXRpb25zIHBhcnNlciBmb3IgTGlua3N5cyBkZXZpY2VzIGJhc2VkIG9uIEJyb2FkY29tCisrCSAgTm9ydGhzdGFyIGFyY2hpdGVjdHVyZS4gTGlua3N5cyBjb21tb25seSB1c2VzIGZpeGVkIGZsYXNoIGxheW91dCB3aXRoCisrCSAgdHdvICJmaXJtd2FyZSIgcGFydGl0aW9ucy4gQ3VycmVudGx5IHVzZWQgZmlybXdhcmUgaGFzIHRvIGJlIGRldGVjdGVkCisrCSAgdXNpbmcgQ0ZFIGVudmlyb25tZW50IHZhcmlhYmxlLgorKworIGNvbmZpZyBNVERfUEFSU0VSX0lNQUdFVEFHCisgCXRyaXN0YXRlICJQYXJzZXIgZm9yIEJDTTk2M1hYIEltYWdlIFRhZyBmb3JtYXQgcGFydGl0aW9ucyIKKyAJZGVwZW5kcyBvbiBCQ002M1hYIHx8IEJNSVBTX0dFTkVSSUMgfHwgQ09NUElMRV9URVNUCistLS0gYS9kcml2ZXJzL210ZC9wYXJzZXJzL01ha2VmaWxlCisrKysgYi9kcml2ZXJzL210ZC9wYXJzZXJzL01ha2VmaWxlCitAQCAtNiw2ICs2LDcgQEAgb2JqLSQoQ09ORklHX01URF9DTURMSU5FX1BBUlRTKQkJKz0gY21kbAorIG9iai0kKENPTkZJR19NVERfT0ZfUEFSVFMpCQkrPSBvZnBhcnQubworIG9mcGFydC15CQkJCSs9IG9mcGFydF9jb3JlLm8KKyBvZnBhcnQtJChDT05GSUdfTVREX09GX1BBUlRTX0JDTTQ5MDgpCSs9IG9mcGFydF9iY200OTA4Lm8KKytvZnBhcnQtJChDT05GSUdfTVREX09GX1BBUlRTX0xJTktTWVNfTlMpKz0gb2ZwYXJ0X2xpbmtzeXNfbnMubworIG9iai0kKENPTkZJR19NVERfUEFSU0VSX0lNQUdFVEFHKQkrPSBwYXJzZXJfaW1hZ2V0YWcubworIG9iai0kKENPTkZJR19NVERfQUZTX1BBUlRTKQkJKz0gYWZzLm8KKyBvYmotJChDT05GSUdfTVREX1BBUlNFUl9UUlgpCQkrPSBwYXJzZXJfdHJ4Lm8KKy0tLSBhL2RyaXZlcnMvbXRkL3BhcnNlcnMvb2ZwYXJ0X2NvcmUuYworKysrIGIvZHJpdmVycy9tdGQvcGFyc2Vycy9vZnBhcnRfY29yZS5jCitAQCAtMTcsNiArMTcsNyBAQAorICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorIAorICNpbmNsdWRlICJvZnBhcnRfYmNtNDkwOC5oIgorKyNpbmNsdWRlICJvZnBhcnRfbGlua3N5c19ucy5oIgorIAorIHN0cnVjdCBmaXhlZF9wYXJ0aXRpb25zX3F1aXJrcyB7CisgCWludCAoKnBvc3RfcGFyc2UpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHMsIGludCBucl9wYXJ0cyk7CitAQCAtMjYsNiArMjcsMTAgQEAgc3RhdGljIHN0cnVjdCBmaXhlZF9wYXJ0aXRpb25zX3F1aXJrcyBiYworIAkucG9zdF9wYXJzZSA9IGJjbTQ5MDhfcGFydGl0aW9uc19wb3N0X3BhcnNlLAorIH07CisgCisrc3RhdGljIHN0cnVjdCBmaXhlZF9wYXJ0aXRpb25zX3F1aXJrcyBsaW5rc3lzX25zX3BhcnRpdGlvbnNfcXVpcmtzID0geworKwkucG9zdF9wYXJzZSA9IGxpbmtzeXNfbnNfcGFydGl0aW9uc19wb3N0X3BhcnNlLAorK307CisrCisgc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcGFyc2Vfb2ZwYXJ0X21hdGNoX3RhYmxlW107CisgCisgc3RhdGljIGJvb2wgbm9kZV9oYXNfY29tcGF0aWJsZShzdHJ1Y3QgZGV2aWNlX25vZGUgKnBwKQorQEAgLTE2NCw2ICsxNjksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBwYXJzZV9vCisgCXsgLmNvbXBhdGlibGUgPSAiZml4ZWQtcGFydGl0aW9ucyIgfSwKKyAJLyogQ3VzdG9taXplZCAqLworIAl7IC5jb21wYXRpYmxlID0gImJyY20sYmNtNDkwOC1wYXJ0aXRpb25zIiwgLmRhdGEgPSAmYmNtNDkwOF9wYXJ0aXRpb25zX3F1aXJrcywgfSwKKysJeyAuY29tcGF0aWJsZSA9ICJsaW5rc3lzLG5zLXBhcnRpdGlvbnMiLCAuZGF0YSA9ICZsaW5rc3lzX25zX3BhcnRpdGlvbnNfcXVpcmtzLCB9LAorIAl7fSwKKyB9OworIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHBhcnNlX29mcGFydF9tYXRjaF90YWJsZSk7CistLS0gL2Rldi9udWxsCisrKysgYi9kcml2ZXJzL210ZC9wYXJzZXJzL29mcGFydF9saW5rc3lzX25zLmMKK0BAIC0wLDAgKzEsNTAgQEAKKysvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorKy8qCisrICogQ29weXJpZ2h0IChDKSAyMDIxIFJhZmHFgiBNacWCZWNraSA8cmFmYWxAbWlsZWNraS5wbD4KKysgKi8KKysKKysjaW5jbHVkZSA8bGludXgvYmNtNDd4eF9udnJhbS5oPgorKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisrI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisrCisrI2luY2x1ZGUgIm9mcGFydF9saW5rc3lzX25zLmgiCisrCisrI2RlZmluZSBOVlJBTV9CT09UX1BBUlQJCSJib290cGFydGl0aW9uIgorKworK3N0YXRpYyBpbnQgb2ZwYXJ0X2xpbmtzeXNfbnNfYm9vdHBhcnRpdGlvbih2b2lkKQorK3sKKysJY2hhciBidWZbNF07CisrCWludCBib290cGFydGl0aW9uOworKworKwkvKiBDaGVjayBDRkUgZW52aXJvbm1lbnQgdmFyaWFibGUgKi8KKysJaWYgKGJjbTQ3eHhfbnZyYW1fZ2V0ZW52KE5WUkFNX0JPT1RfUEFSVCwgYnVmLCBzaXplb2YoYnVmKSkgPiAwKSB7CisrCQlpZiAoIWtzdHJ0b2ludChidWYsIDAsICZib290cGFydGl0aW9uKSkKKysJCQlyZXR1cm4gYm9vdHBhcnRpdGlvbjsKKysJCXByX3dhcm4oIkZhaWxlZCB0byBwYXJzZSAlcyB2YWx1ZSBcIiVzXCJcbiIsIE5WUkFNX0JPT1RfUEFSVCwKKysJCQlidWYpOworKwl9IGVsc2UgeworKwkJcHJfd2FybigiRmFpbGVkIHRvIGdldCBOVlJBTSBcIiVzXCJcbiIsIE5WUkFNX0JPT1RfUEFSVCk7CisrCX0KKysKKysJcmV0dXJuIDA7CisrfQorKworK2ludCBsaW5rc3lzX25zX3BhcnRpdGlvbnNfcG9zdF9wYXJzZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKysJCQkJICAgICBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHMsCisrCQkJCSAgICAgaW50IG5yX3BhcnRzKQorK3sKKysJaW50IGJvb3RwYXJ0aXRpb24gPSBvZnBhcnRfbGlua3N5c19uc19ib290cGFydGl0aW9uKCk7CisrCWludCB0cnhfaWR4ID0gMDsKKysJaW50IGk7CisrCisrCWZvciAoaSA9IDA7IGkgPCBucl9wYXJ0czsgaSsrKSB7CisrCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocGFydHNbaV0ub2Zfbm9kZSwgImxpbmtzeXMsbnMtZmlybXdhcmUiKSkgeworKwkJCWlmICh0cnhfaWR4KysgPT0gYm9vdHBhcnRpdGlvbikKKysJCQkJcGFydHNbaV0ubmFtZSA9ICJmaXJtd2FyZSI7CisrCQkJZWxzZQorKwkJCQlwYXJ0c1tpXS5uYW1lID0gImJhY2t1cCI7CisrCQl9CisrCX0KKysKKysJcmV0dXJuIDA7CisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvZHJpdmVycy9tdGQvcGFyc2Vycy9vZnBhcnRfbGlua3N5c19ucy5oCitAQCAtMCwwICsxLDE4IEBACisrLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKysjaWZuZGVmIF9fT0ZQQVJUX0xJTktTWVNfTlNfSAorKyNkZWZpbmUgX19PRlBBUlRfTElOS1NZU19OU19ICisrCisrI2lmZGVmIENPTkZJR19NVERfT0ZfUEFSVFNfTElOS1NZU19OUworK2ludCBsaW5rc3lzX25zX3BhcnRpdGlvbnNfcG9zdF9wYXJzZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKysJCQkJICAgICBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHMsCisrCQkJCSAgICAgaW50IG5yX3BhcnRzKTsKKysjZWxzZQorK3N0YXRpYyBpbmxpbmUgaW50IGxpbmtzeXNfbnNfcGFydGl0aW9uc19wb3N0X3BhcnNlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorKwkJCQkJCSAgIHN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0cywKKysJCQkJCQkgICBpbnQgbnJfcGFydHMpCisreworKwlyZXR1cm4gLUVPUE5PVFNVUFA7CisrfQorKyNlbmRpZgorKworKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzQxMC1tdGQtZml4LWNhbGN1bGF0aW5nLXBhcnRpdGlvbi1lbmQtYWRkcmVzcy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC80MTAtbXRkLWZpeC1jYWxjdWxhdGluZy1wYXJ0aXRpb24tZW5kLWFkZHJlc3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVhZTAxNQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC80MTAtbXRkLWZpeC1jYWxjdWxhdGluZy1wYXJ0aXRpb24tZW5kLWFkZHJlc3MucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbTogPT9VVEYtOD9xP1JhZmE9QzU9ODI9MjBNaT1DNT04MmVja2k/PSA8cmFmYWxAbWlsZWNraS5wbD4KK0RhdGU6IE1vbiwgOSBNYXIgMjAyMCAwODozMDoxOSArMDEwMAorU3ViamVjdDogW1BBVENIXSBtdGQ6IGZpeCBjYWxjdWxhdGluZyBwYXJ0aXRpb24gZW5kIGFkZHJlc3MKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworVGhpcyBmaXhlcyBjaGVjayBmb3IgcGFydGl0aW9ucyB0aGF0IGRvbid0IHN0YXJ0IGF0IGJlZ2lubmluZyBvZiB0aGVpcgorcGFyZW50cy4gTWlzc2luZyBwYXJ0aXRpb24ncyBvZmZzZXQgaW4gZm9ybXVsYSBjb3VsZCByZXN1bHQgaW4gZm9yY2luZworcmVhZC1vbmx5IGluY29ycmVjdGx5LgorCitGaXhlczogNjc1MGY2MWExM2EwICgibXRkOiBpbXByb3ZlIGNhbGN1bGF0aW5nIHBhcnRpdGlvbiBib3VuZGFyaWVzIHdoZW4gY2hlY2tpbmcgZm9yIGFsaWdubWVudCIpCitTaWduZWQtb2ZmLWJ5OiBSYWZhxYIgTWnFgmVja2kgPHJhZmFsQG1pbGVja2kucGw+CistLS0KKyBkcml2ZXJzL210ZC9tdGRwYXJ0LmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSBhL2RyaXZlcnMvbXRkL210ZHBhcnQuYworKysrIGIvZHJpdmVycy9tdGQvbXRkcGFydC5jCitAQCAtNTI0LDcgKzUyNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnQgKmFsbG9jYXRlX3BhcnRpdGkKKyAJCQlwYXJ0LT5uYW1lKTsKKyAJfQorIAorLQl0bXAgPSBwYXJ0X2Fic29sdXRlX29mZnNldChwYXJlbnQpICsgc2xhdmUtPm10ZC5zaXplOworKwl0bXAgPSBwYXJ0X2Fic29sdXRlX29mZnNldChwYXJlbnQpICsgc2xhdmUtPm9mZnNldCArIHNsYXZlLT5tdGQuc2l6ZTsKKyAJcmVtYWluZGVyID0gZG9fZGl2KHRtcCwgd3JfYWxpZ25tZW50KTsKKyAJaWYgKChzbGF2ZS0+bXRkLmZsYWdzICYgTVREX1dSSVRFQUJMRSkgJiYgcmVtYWluZGVyKSB7CisgCQlzbGF2ZS0+bXRkLmZsYWdzICY9IH5NVERfV1JJVEVBQkxFOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzYwMC12NS4xMi1uZXQtZXh0cmFjdC1uYXBpLXBvbGwtZnVuY3Rpb25hbGl0eS10by1fX25hcGlfcG9sbC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC82MDAtdjUuMTItbmV0LWV4dHJhY3QtbmFwaS1wb2xsLWZ1bmN0aW9uYWxpdHktdG8tX19uYXBpX3BvbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVhZWI5NgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC82MDAtdjUuMTItbmV0LWV4dHJhY3QtbmFwaS1wb2xsLWZ1bmN0aW9uYWxpdHktdG8tX19uYXBpX3BvbGwucGF0Y2gKQEAgLTAsMCArMSw4OCBAQAorRnJvbTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorRGF0ZTogTW9uLCA4IEZlYiAyMDIxIDExOjM0OjA4IC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIG5ldDogZXh0cmFjdCBuYXBpIHBvbGwgZnVuY3Rpb25hbGl0eSB0byBfX25hcGlfcG9sbCgpCisKK1RoaXMgY29tbWl0IGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gX19uYXBpX3BvbGwoKSB3aGljaCBkb2VzIHRoZSBtYWluCitsb2dpYyBvZiB0aGUgZXhpc3RpbmcgbmFwaV9wb2xsKCkgZnVuY3Rpb24sIGFuZCB3aWxsIGJlIGNhbGxlZCBieSBvdGhlcgorZnVuY3Rpb25zIGluIGxhdGVyIGNvbW1pdHMuCitUaGlzIGlkZWEgYW5kIGltcGxlbWVudGF0aW9uIGlzIGRvbmUgYnkgRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPiBhbmQKK2lzIHByb3Bvc2VkIGFzIHBhcnQgb2YgdGhlIHBhdGNoIHRvIG1vdmUgbmFwaSB3b3JrIHRvIHdvcmtfcXVldWUKK2NvbnRleHQuCitUaGlzIGNvbW1pdCBieSBpdHNlbGYgaXMgYSBjb2RlIHJlc3RydWN0dXJlLgorCitTaWduZWQtb2ZmLWJ5OiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CitTaWduZWQtb2ZmLWJ5OiBXZWkgV2FuZyA8d2Vpd2FuQGdvb2dsZS5jb20+CitSZXZpZXdlZC1ieTogQWxleGFuZGVyIER1eWNrIDxhbGV4YW5kZXJkdXlja0BmYi5jb20+CitTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CistLS0KKworLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrKyBiL25ldC9jb3JlL2Rldi5jCitAQCAtNjMyNSwxNSArNjMyNSwxMCBAQCB2b2lkIG5ldGlmX25hcGlfZGVsKHN0cnVjdCBuYXBpX3N0cnVjdCAqCisgfQorIEVYUE9SVF9TWU1CT0wobmV0aWZfbmFwaV9kZWwpOworIAorLXN0YXRpYyBpbnQgbmFwaV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbiwgc3RydWN0IGxpc3RfaGVhZCAqcmVwb2xsKQorK3N0YXRpYyBpbnQgX19uYXBpX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuLCBib29sICpyZXBvbGwpCisgeworLQl2b2lkICpoYXZlOworIAlpbnQgd29yaywgd2VpZ2h0OworIAorLQlsaXN0X2RlbF9pbml0KCZuLT5wb2xsX2xpc3QpOworLQorLQloYXZlID0gbmV0cG9sbF9wb2xsX2xvY2sobik7CistCisgCXdlaWdodCA9IG4tPndlaWdodDsKKyAKKyAJLyogVGhpcyBOQVBJX1NUQVRFX1NDSEVEIHRlc3QgaXMgZm9yIGF2b2lkaW5nIGEgcmFjZQorQEAgLTYzNTEsNyArNjM0Niw3IEBAIHN0YXRpYyBpbnQgbmFwaV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdAorIAlXQVJOX09OX09OQ0Uod29yayA+IHdlaWdodCk7CisgCisgCWlmIChsaWtlbHkod29yayA8IHdlaWdodCkpCistCQlnb3RvIG91dF91bmxvY2s7CisrCQlyZXR1cm4gd29yazsKKyAKKyAJLyogRHJpdmVycyBtdXN0IG5vdCBtb2RpZnkgdGhlIE5BUEkgc3RhdGUgaWYgdGhleQorIAkgKiBjb25zdW1lIHRoZSBlbnRpcmUgd2VpZ2h0LiAgSW4gc3VjaCBjYXNlcyB0aGlzIGNvZGUKK0BAIC02MzYwLDcgKzYzNTUsNyBAQCBzdGF0aWMgaW50IG5hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QKKyAJICovCisgCWlmICh1bmxpa2VseShuYXBpX2Rpc2FibGVfcGVuZGluZyhuKSkpIHsKKyAJCW5hcGlfY29tcGxldGUobik7CistCQlnb3RvIG91dF91bmxvY2s7CisrCQlyZXR1cm4gd29yazsKKyAJfQorIAorIAlpZiAobi0+Z3JvX2JpdG1hc2spIHsKK0BAIC02Mzc4LDEyICs2MzczLDI5IEBAIHN0YXRpYyBpbnQgbmFwaV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdAorIAlpZiAodW5saWtlbHkoIWxpc3RfZW1wdHkoJm4tPnBvbGxfbGlzdCkpKSB7CisgCQlwcl93YXJuX29uY2UoIiVzOiBCdWRnZXQgZXhoYXVzdGVkIGFmdGVyIG5hcGkgcmVzY2hlZHVsZWRcbiIsCisgCQkJICAgICBuLT5kZXYgPyBuLT5kZXYtPm5hbWUgOiAiYmFja2xvZyIpOworLQkJZ290byBvdXRfdW5sb2NrOworKwkJcmV0dXJuIHdvcms7CisgCX0KKyAKKy0JbGlzdF9hZGRfdGFpbCgmbi0+cG9sbF9saXN0LCByZXBvbGwpOworKwkqcmVwb2xsID0gdHJ1ZTsKKysKKysJcmV0dXJuIHdvcms7CisrfQorKworK3N0YXRpYyBpbnQgbmFwaV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbiwgc3RydWN0IGxpc3RfaGVhZCAqcmVwb2xsKQorK3sKKysJYm9vbCBkb19yZXBvbGwgPSBmYWxzZTsKKysJdm9pZCAqaGF2ZTsKKysJaW50IHdvcms7CisrCisrCWxpc3RfZGVsX2luaXQoJm4tPnBvbGxfbGlzdCk7CisrCisrCWhhdmUgPSBuZXRwb2xsX3BvbGxfbG9jayhuKTsKKysKKysJd29yayA9IF9fbmFwaV9wb2xsKG4sICZkb19yZXBvbGwpOworKworKwlpZiAoZG9fcmVwb2xsKQorKwkJbGlzdF9hZGRfdGFpbCgmbi0+cG9sbF9saXN0LCByZXBvbGwpOworIAorLW91dF91bmxvY2s6CisgCW5ldHBvbGxfcG9sbF91bmxvY2soaGF2ZSk7CisgCisgCXJldHVybiB3b3JrOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzYwMS12NS4xMi1uZXQtaW1wbGVtZW50LXRocmVhZGVkLWFibGUtbmFwaS1wb2xsLWxvb3Atc3VwcG9ydC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC82MDEtdjUuMTItbmV0LWltcGxlbWVudC10aHJlYWRlZC1hYmxlLW5hcGktcG9sbC1sb29wLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM1NDhmMwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC82MDEtdjUuMTItbmV0LWltcGxlbWVudC10aHJlYWRlZC1hYmxlLW5hcGktcG9sbC1sb29wLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwyNjEgQEAKK0Zyb206IFdlaSBXYW5nIDx3ZWl3YW5AZ29vZ2xlLmNvbT4KK0RhdGU6IE1vbiwgOCBGZWIgMjAyMSAxMTozNDowOSAtMDgwMAorU3ViamVjdDogW1BBVENIXSBuZXQ6IGltcGxlbWVudCB0aHJlYWRlZC1hYmxlIG5hcGkgcG9sbCBsb29wIHN1cHBvcnQKKworVGhpcyBwYXRjaCBhbGxvd3MgcnVubmluZyBlYWNoIG5hcGkgcG9sbCBsb29wIGluc2lkZSBpdHMgb3duCitrZXJuZWwgdGhyZWFkLgorVGhlIGt0aHJlYWQgaXMgY3JlYXRlZCBkdXJpbmcgbmV0aWZfbmFwaV9hZGQoKSBpZiBkZXYtPnRocmVhZGVkCitpcyBzZXQuIEFuZCB0aHJlYWRlZCBtb2RlIGlzIGVuYWJsZWQgaW4gbmFwaV9lbmFibGUoKS4gV2Ugd2lsbAorcHJvdmlkZSBhIHdheSB0byBzZXQgZGV2LT50aHJlYWRlZCBhbmQgZW5hYmxlIHRocmVhZGVkIG1vZGUKK3dpdGhvdXQgYSBkZXZpY2UgdXAvZG93biBpbiB0aGUgZm9sbG93aW5nIHBhdGNoLgorCitPbmNlIHRoYXQgdGhyZWFkZWQgbW9kZSBpcyBlbmFibGVkIGFuZCB0aGUga3RocmVhZCBpcworc3RhcnRlZCwgbmFwaV9zY2hlZHVsZSgpIHdpbGwgd2FrZS11cCBzdWNoIHRocmVhZCBpbnN0ZWFkCitvZiBzY2hlZHVsaW5nIHRoZSBzb2Z0aXJxLgorCitUaGUgdGhyZWFkZWQgcG9sbCBsb29wIGJlaGF2ZXMgcXVpdGUgbGlrZWx5IHRoZSBuZXRfcnhfYWN0aW9uLAorYnV0IGl0IGRvZXMgbm90IGhhdmUgdG8gbWFuaXB1bGF0ZSBsb2NhbCBpcnFzIGFuZCB1c2VzCithbiBleHBsaWNpdCBzY2hlZHVsaW5nIHBvaW50IGJhc2VkIG9uIG5ldGRldl9idWRnZXQuCisKK0NvLWRldmVsb3BlZC1ieTogUGFvbG8gQWJlbmkgPHBhYmVuaUByZWRoYXQuY29tPgorU2lnbmVkLW9mZi1ieTogUGFvbG8gQWJlbmkgPHBhYmVuaUByZWRoYXQuY29tPgorQ28tZGV2ZWxvcGVkLWJ5OiBIYW5uZXMgRnJlZGVyaWMgU293YSA8aGFubmVzQHN0cmVzc2luZHVrdGlvbi5vcmc+CitTaWduZWQtb2ZmLWJ5OiBIYW5uZXMgRnJlZGVyaWMgU293YSA8aGFubmVzQHN0cmVzc2luZHVrdGlvbi5vcmc+CitDby1kZXZlbG9wZWQtYnk6IEpha3ViIEtpY2luc2tpIDxrdWJhQGtlcm5lbC5vcmc+CitTaWduZWQtb2ZmLWJ5OiBKYWt1YiBLaWNpbnNraSA8a3ViYUBrZXJuZWwub3JnPgorU2lnbmVkLW9mZi1ieTogV2VpIFdhbmcgPHdlaXdhbkBnb29nbGUuY29tPgorUmV2aWV3ZWQtYnk6IEFsZXhhbmRlciBEdXljayA8YWxleGFuZGVyZHV5Y2tAZmIuY29tPgorU2lnbmVkLW9mZi1ieTogRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorLS0tCisKKy0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKKysrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKK0BAIC0zNDAsNiArMzQwLDcgQEAgc3RydWN0IG5hcGlfc3RydWN0IHsKKyAJc3RydWN0IGxpc3RfaGVhZAlkZXZfbGlzdDsKKyAJc3RydWN0IGhsaXN0X25vZGUJbmFwaV9oYXNoX25vZGU7CisgCXVuc2lnbmVkIGludAkJbmFwaV9pZDsKKysJc3RydWN0IHRhc2tfc3RydWN0CSp0aHJlYWQ7CisgfTsKKyAKKyBlbnVtIHsKK0BAIC0zNTAsNiArMzUxLDcgQEAgZW51bSB7CisgCU5BUElfU1RBVEVfSEFTSEVELAkvKiBJbiBOQVBJIGhhc2ggKGJ1c3kgcG9sbGluZyBwb3NzaWJsZSkgKi8KKyAJTkFQSV9TVEFURV9OT19CVVNZX1BPTEwsLyogRG8gbm90IGFkZCBpbiBuYXBpX2hhc2gsIG5vIGJ1c3kgcG9sbGluZyAqLworIAlOQVBJX1NUQVRFX0lOX0JVU1lfUE9MTCwvKiBza19idXN5X2xvb3AoKSBvd25zIHRoaXMgTkFQSSAqLworKwlOQVBJX1NUQVRFX1RIUkVBREVELAkJLyogVGhlIHBvbGwgaXMgcGVyZm9ybWVkIGluc2lkZSBpdHMgb3duIHRocmVhZCovCisgfTsKKyAKKyBlbnVtIHsKK0BAIC0zNjAsNiArMzYyLDcgQEAgZW51bSB7CisgCU5BUElGX1NUQVRFX0hBU0hFRAkgPSBCSVQoTkFQSV9TVEFURV9IQVNIRUQpLAorIAlOQVBJRl9TVEFURV9OT19CVVNZX1BPTEwgPSBCSVQoTkFQSV9TVEFURV9OT19CVVNZX1BPTEwpLAorIAlOQVBJRl9TVEFURV9JTl9CVVNZX1BPTEwgPSBCSVQoTkFQSV9TVEFURV9JTl9CVVNZX1BPTEwpLAorKwlOQVBJRl9TVEFURV9USFJFQURFRAkgPSBCSVQoTkFQSV9TVEFURV9USFJFQURFRCksCisgfTsKKyAKKyBlbnVtIGdyb19yZXN1bHQgeworQEAgLTUwNCwyMCArNTA3LDcgQEAgYm9vbCBuYXBpX2hhc2hfZGVsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbgorICAqLworIHZvaWQgbmFwaV9kaXNhYmxlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbik7CisgCistLyoqCistICoJbmFwaV9lbmFibGUgLSBlbmFibGUgTkFQSSBzY2hlZHVsaW5nCistICoJQG46IE5BUEkgY29udGV4dAorLSAqCistICogUmVzdW1lIE5BUEkgZnJvbSBiZWluZyBzY2hlZHVsZWQgb24gdGhpcyBjb250ZXh0LgorLSAqIE11c3QgYmUgcGFpcmVkIHdpdGggbmFwaV9kaXNhYmxlLgorLSAqLworLXN0YXRpYyBpbmxpbmUgdm9pZCBuYXBpX2VuYWJsZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4pCisteworLQlCVUdfT04oIXRlc3RfYml0KE5BUElfU1RBVEVfU0NIRUQsICZuLT5zdGF0ZSkpOworLQlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKKy0JY2xlYXJfYml0KE5BUElfU1RBVEVfU0NIRUQsICZuLT5zdGF0ZSk7CistCWNsZWFyX2JpdChOQVBJX1NUQVRFX05QU1ZDLCAmbi0+c3RhdGUpOworLX0KKyt2b2lkIG5hcGlfZW5hYmxlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbik7CisgCisgLyoqCisgICoJbmFwaV9zeW5jaHJvbml6ZSAtIHdhaXQgdW50aWwgTkFQSSBpcyBub3QgcnVubmluZworQEAgLTE3ODMsNiArMTc3Myw4IEBAIGVudW0gbmV0ZGV2X21sX3ByaXZfdHlwZSB7CisgICoKKyAgKglAd29sX2VuYWJsZWQ6CVdha2Utb24tTEFOIGlzIGVuYWJsZWQKKyAgKgorKyAqCUB0aHJlYWRlZDoJbmFwaSB0aHJlYWRlZCBtb2RlIGlzIGVuYWJsZWQKKysgKgorICAqCUZJWE1FOiBjbGVhbnVwIHN0cnVjdCBuZXRfZGV2aWNlIHN1Y2ggdGhhdCBuZXR3b3JrIHByb3RvY29sIGluZm8KKyAgKgltb3ZlcyBvdXQuCisgICovCitAQCAtMjA3NSw2ICsyMDY3LDcgQEAgc3RydWN0IG5ldF9kZXZpY2UgeworIAlzdHJ1Y3QgbG9ja19jbGFzc19rZXkJYWRkcl9saXN0X2xvY2tfa2V5OworIAlib29sCQkJcHJvdG9fZG93bjsKKyAJdW5zaWduZWQJCXdvbF9lbmFibGVkOjE7CisrCXVuc2lnbmVkCQl0aHJlYWRlZDoxOworIH07CisgI2RlZmluZSB0b19uZXRfZGV2KGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgbmV0X2RldmljZSwgZGV2KQorIAorLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrKyBiL25ldC9jb3JlL2Rldi5jCitAQCAtOTEsNiArOTEsNyBAQAorICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisgI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisgI2luY2x1ZGUgPGxpbnV4L2JwZi5oPgorICNpbmNsdWRlIDxsaW51eC9icGZfdHJhY2UuaD4KKyAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KK0BAIC0xMjg5LDYgKzEyOTAsMjcgQEAgdm9pZCBuZXRkZXZfbm90aWZ5X3BlZXJzKHN0cnVjdCBuZXRfZGV2aQorIH0KKyBFWFBPUlRfU1lNQk9MKG5ldGRldl9ub3RpZnlfcGVlcnMpOworIAorK3N0YXRpYyBpbnQgbmFwaV90aHJlYWRlZF9wb2xsKHZvaWQgKmRhdGEpOworKworK3N0YXRpYyBpbnQgbmFwaV9rdGhyZWFkX2NyZWF0ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4pCisreworKwlpbnQgZXJyID0gMDsKKysKKysJLyogQ3JlYXRlIGFuZCB3YWtlIHVwIHRoZSBrdGhyZWFkIG9uY2UgdG8gcHV0IGl0IGluCisrCSAqIFRBU0tfSU5URVJSVVBUSUJMRSBtb2RlIHRvIGF2b2lkIHRoZSBibG9ja2VkIHRhc2sKKysJICogd2FybmluZyBhbmQgd29yayB3aXRoIGxvYWRhdmcuCisrCSAqLworKwluLT50aHJlYWQgPSBrdGhyZWFkX3J1bihuYXBpX3RocmVhZGVkX3BvbGwsIG4sICJuYXBpLyVzLSVkIiwKKysJCQkJbi0+ZGV2LT5uYW1lLCBuLT5uYXBpX2lkKTsKKysJaWYgKElTX0VSUihuLT50aHJlYWQpKSB7CisrCQllcnIgPSBQVFJfRVJSKG4tPnRocmVhZCk7CisrCQlwcl9lcnIoImt0aHJlYWRfcnVuIGZhaWxlZCB3aXRoIGVyciAlZFxuIiwgZXJyKTsKKysJCW4tPnRocmVhZCA9IE5VTEw7CisrCX0KKysKKysJcmV0dXJuIGVycjsKKyt9CisrCisgc3RhdGljIGludCBfX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKKyB7CisgCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gZGV2LT5uZXRkZXZfb3BzOworQEAgLTM4ODgsNiArMzkxMCwyMSBAQCBpbnQgZ3JvX25vcm1hbF9iYXRjaCBfX3JlYWRfbW9zdGx5ID0gODsKKyBzdGF0aWMgaW5saW5lIHZvaWQgX19fX25hcGlfc2NoZWR1bGUoc3RydWN0IHNvZnRuZXRfZGF0YSAqc2QsCisgCQkJCSAgICAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQorIHsKKysJc3RydWN0IHRhc2tfc3RydWN0ICp0aHJlYWQ7CisrCisrCWlmICh0ZXN0X2JpdChOQVBJX1NUQVRFX1RIUkVBREVELCAmbmFwaS0+c3RhdGUpKSB7CisrCQkvKiBQYWlyZWQgd2l0aCBzbXBfbWJfX2JlZm9yZV9hdG9taWMoKSBpbgorKwkJICogbmFwaV9lbmFibGUoKS4gVXNlIFJFQURfT05DRSgpIHRvIGd1YXJhbnRlZQorKwkJICogYSBjb21wbGV0ZSByZWFkIG9uIG5hcGktPnRocmVhZC4gT25seSBjYWxsCisrCQkgKiB3YWtlX3VwX3Byb2Nlc3MoKSB3aGVuIGl0J3Mgbm90IE5VTEwuCisrCQkgKi8KKysJCXRocmVhZCA9IFJFQURfT05DRShuYXBpLT50aHJlYWQpOworKwkJaWYgKHRocmVhZCkgeworKwkJCXdha2VfdXBfcHJvY2Vzcyh0aHJlYWQpOworKwkJCXJldHVybjsKKysJCX0KKysJfQorKworIAlsaXN0X2FkZF90YWlsKCZuYXBpLT5wb2xsX2xpc3QsICZzZC0+cG9sbF9saXN0KTsKKyAJX19yYWlzZV9zb2Z0aXJxX2lycW9mZihORVRfUlhfU09GVElSUSk7CisgfQorQEAgLTYyNzksNiArNjMxNiwxMiBAQCB2b2lkIG5ldGlmX25hcGlfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkCisgCXNldF9iaXQoTkFQSV9TVEFURV9OUFNWQywgJm5hcGktPnN0YXRlKTsKKyAJbGlzdF9hZGRfcmN1KCZuYXBpLT5kZXZfbGlzdCwgJmRldi0+bmFwaV9saXN0KTsKKyAJbmFwaV9oYXNoX2FkZChuYXBpKTsKKysJLyogQ3JlYXRlIGt0aHJlYWQgZm9yIHRoaXMgbmFwaSBpZiBkZXYtPnRocmVhZGVkIGlzIHNldC4KKysJICogQ2xlYXIgZGV2LT50aHJlYWRlZCBpZiBrdGhyZWFkIGNyZWF0aW9uIGZhaWxlZCBzbyB0aGF0CisrCSAqIHRocmVhZGVkIG1vZGUgd2lsbCBub3QgYmUgZW5hYmxlZCBpbiBuYXBpX2VuYWJsZSgpLgorKwkgKi8KKysJaWYgKGRldi0+dGhyZWFkZWQgJiYgbmFwaV9rdGhyZWFkX2NyZWF0ZShuYXBpKSkKKysJCWRldi0+dGhyZWFkZWQgPSAwOworIH0KKyBFWFBPUlRfU1lNQk9MKG5ldGlmX25hcGlfYWRkKTsKKyAKK0BAIC02Mjk1LDkgKzYzMzgsMjggQEAgdm9pZCBuYXBpX2Rpc2FibGUoc3RydWN0IG5hcGlfc3RydWN0ICpuKQorIAlocnRpbWVyX2NhbmNlbCgmbi0+dGltZXIpOworIAorIAljbGVhcl9iaXQoTkFQSV9TVEFURV9ESVNBQkxFLCAmbi0+c3RhdGUpOworKwljbGVhcl9iaXQoTkFQSV9TVEFURV9USFJFQURFRCwgJm4tPnN0YXRlKTsKKyB9CisgRVhQT1JUX1NZTUJPTChuYXBpX2Rpc2FibGUpOworIAorKy8qKgorKyAqCW5hcGlfZW5hYmxlIC0gZW5hYmxlIE5BUEkgc2NoZWR1bGluZworKyAqCUBuOiBOQVBJIGNvbnRleHQKKysgKgorKyAqIFJlc3VtZSBOQVBJIGZyb20gYmVpbmcgc2NoZWR1bGVkIG9uIHRoaXMgY29udGV4dC4KKysgKiBNdXN0IGJlIHBhaXJlZCB3aXRoIG5hcGlfZGlzYWJsZS4KKysgKi8KKyt2b2lkIG5hcGlfZW5hYmxlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbikKKyt7CisrCUJVR19PTighdGVzdF9iaXQoTkFQSV9TVEFURV9TQ0hFRCwgJm4tPnN0YXRlKSk7CisrCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOworKwljbGVhcl9iaXQoTkFQSV9TVEFURV9TQ0hFRCwgJm4tPnN0YXRlKTsKKysJY2xlYXJfYml0KE5BUElfU1RBVEVfTlBTVkMsICZuLT5zdGF0ZSk7CisrCWlmIChuLT5kZXYtPnRocmVhZGVkICYmIG4tPnRocmVhZCkKKysJCXNldF9iaXQoTkFQSV9TVEFURV9USFJFQURFRCwgJm4tPnN0YXRlKTsKKyt9CisrRVhQT1JUX1NZTUJPTChuYXBpX2VuYWJsZSk7CisrCisgc3RhdGljIHZvaWQgZmx1c2hfZ3JvX2hhc2goc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQorIHsKKyAJaW50IGk7CitAQCAtNjMyMiw2ICs2Mzg0LDExIEBAIHZvaWQgbmV0aWZfbmFwaV9kZWwoc3RydWN0IG5hcGlfc3RydWN0ICoKKyAKKyAJZmx1c2hfZ3JvX2hhc2gobmFwaSk7CisgCW5hcGktPmdyb19iaXRtYXNrID0gMDsKKysKKysJaWYgKG5hcGktPnRocmVhZCkgeworKwkJa3RocmVhZF9zdG9wKG5hcGktPnRocmVhZCk7CisrCQluYXBpLT50aHJlYWQgPSBOVUxMOworKwl9CisgfQorIEVYUE9SVF9TWU1CT0wobmV0aWZfbmFwaV9kZWwpOworIAorQEAgLTY0MDEsNiArNjQ2OCw1MSBAQCBzdGF0aWMgaW50IG5hcGlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QKKyAJcmV0dXJuIHdvcms7CisgfQorIAorK3N0YXRpYyBpbnQgbmFwaV90aHJlYWRfd2FpdChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpCisreworKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworKworKwl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSAmJiAhbmFwaV9kaXNhYmxlX3BlbmRpbmcobmFwaSkpIHsKKysJCWlmICh0ZXN0X2JpdChOQVBJX1NUQVRFX1NDSEVELCAmbmFwaS0+c3RhdGUpKSB7CisrCQkJV0FSTl9PTighbGlzdF9lbXB0eSgmbmFwaS0+cG9sbF9saXN0KSk7CisrCQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworKwkJCXJldHVybiAwOworKwkJfQorKworKwkJc2NoZWR1bGUoKTsKKysJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisrCX0KKysJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworKwlyZXR1cm4gLTE7CisrfQorKworK3N0YXRpYyBpbnQgbmFwaV90aHJlYWRlZF9wb2xsKHZvaWQgKmRhdGEpCisreworKwlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkgPSBkYXRhOworKwl2b2lkICpoYXZlOworKworKwl3aGlsZSAoIW5hcGlfdGhyZWFkX3dhaXQobmFwaSkpIHsKKysJCWZvciAoOzspIHsKKysJCQlib29sIHJlcG9sbCA9IGZhbHNlOworKworKwkJCWxvY2FsX2JoX2Rpc2FibGUoKTsKKysKKysJCQloYXZlID0gbmV0cG9sbF9wb2xsX2xvY2sobmFwaSk7CisrCQkJX19uYXBpX3BvbGwobmFwaSwgJnJlcG9sbCk7CisrCQkJbmV0cG9sbF9wb2xsX3VubG9jayhoYXZlKTsKKysKKysJCQlfX2tmcmVlX3NrYl9mbHVzaCgpOworKwkJCWxvY2FsX2JoX2VuYWJsZSgpOworKworKwkJCWlmICghcmVwb2xsKQorKwkJCQlicmVhazsKKysKKysJCQljb25kX3Jlc2NoZWQoKTsKKysJCX0KKysJfQorKwlyZXR1cm4gMDsKKyt9CisrCisgc3RhdGljIF9fbGF0ZW50X2VudHJvcHkgdm9pZCBuZXRfcnhfYWN0aW9uKHN0cnVjdCBzb2Z0aXJxX2FjdGlvbiAqaCkKKyB7CisgCXN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkID0gdGhpc19jcHVfcHRyKCZzb2Z0bmV0X2RhdGEpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzYwMi12NS4xMi1uZXQtYWRkLXN5c2ZzLWF0dHJpYnV0ZS10by1jb250cm9sLW5hcGktdGhyZWFkZWQtbW9kLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzYwMi12NS4xMi1uZXQtYWRkLXN5c2ZzLWF0dHJpYnV0ZS10by1jb250cm9sLW5hcGktdGhyZWFkZWQtbW9kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYzM0YTEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNjAyLXY1LjEyLW5ldC1hZGQtc3lzZnMtYXR0cmlidXRlLXRvLWNvbnRyb2wtbmFwaS10aHJlYWRlZC1tb2QucGF0Y2gKQEAgLTAsMCArMSwxNzcgQEAKK0Zyb206IFdlaSBXYW5nIDx3ZWl3YW5AZ29vZ2xlLmNvbT4KK0RhdGU6IE1vbiwgOCBGZWIgMjAyMSAxMTozNDoxMCAtMDgwMAorU3ViamVjdDogW1BBVENIXSBuZXQ6IGFkZCBzeXNmcyBhdHRyaWJ1dGUgdG8gY29udHJvbCBuYXBpIHRocmVhZGVkIG1vZGUKKworVGhpcyBwYXRjaCBhZGRzIGEgbmV3IHN5c2ZzIGF0dHJpYnV0ZSB0byB0aGUgbmV0d29yayBkZXZpY2UgY2xhc3MuCitTYWlkIGF0dHJpYnV0ZSBwcm92aWRlcyBhIHBlci1kZXZpY2UgY29udHJvbCB0byBlbmFibGUvZGlzYWJsZSB0aGUKK3RocmVhZGVkIG1vZGUgZm9yIGFsbCB0aGUgbmFwaSBpbnN0YW5jZXMgb2YgdGhlIGdpdmVuIG5ldHdvcmsgZGV2aWNlLAord2l0aG91dCB0aGUgbmVlZCBmb3IgYSBkZXZpY2UgdXAvZG93bi4KK1VzZXIgc2V0cyBpdCB0byAxIG9yIDAgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhyZWFkZWQgbW9kZS4KK05vdGU6IHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gdGhyZWFkZWQgYW5kIHRoZSBjdXJyZW50IHNvZnRpcnEgYmFzZWQgbW9kZQorZm9yIGEgbmFwaSBpbnN0YW5jZSwgaXQgd2lsbCBub3QgaW1tZWRpYXRlbHkgdGFrZSBlZmZlY3QgaWYgdGhlIG5hcGkgaXMKK2N1cnJlbnRseSBiZWluZyBwb2xsZWQuIFRoZSBtb2RlIHN3aXRjaCB3aWxsIGhhcHBlbiBmb3IgdGhlIG5leHQgdGltZQorbmFwaV9zY2hlZHVsZSgpIGlzIGNhbGxlZC4KKworQ28tZGV2ZWxvcGVkLWJ5OiBQYW9sbyBBYmVuaSA8cGFiZW5pQHJlZGhhdC5jb20+CitTaWduZWQtb2ZmLWJ5OiBQYW9sbyBBYmVuaSA8cGFiZW5pQHJlZGhhdC5jb20+CitDby1kZXZlbG9wZWQtYnk6IEhhbm5lcyBGcmVkZXJpYyBTb3dhIDxoYW5uZXNAc3RyZXNzaW5kdWt0aW9uLm9yZz4KK1NpZ25lZC1vZmYtYnk6IEhhbm5lcyBGcmVkZXJpYyBTb3dhIDxoYW5uZXNAc3RyZXNzaW5kdWt0aW9uLm9yZz4KK0NvLWRldmVsb3BlZC1ieTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorU2lnbmVkLW9mZi1ieTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorU2lnbmVkLW9mZi1ieTogV2VpIFdhbmcgPHdlaXdhbkBnb29nbGUuY29tPgorUmV2aWV3ZWQtYnk6IEFsZXhhbmRlciBEdXljayA8YWxleGFuZGVyZHV5Y2tAZmIuY29tPgorU2lnbmVkLW9mZi1ieTogRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorLS0tCisKKy0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtbmV0CisrKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLW5ldAorQEAgLTMwMSwzICszMDEsMTggQEAgQ29udGFjdDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZworIERlc2NyaXB0aW9uOgorIAkJMzItYml0IHVuc2lnbmVkIGludGVnZXIgY291bnRpbmcgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgbGluayBoYXMKKyAJCWJlZW4gZG93bgorKworK1doYXQ6CQkvc3lzL2NsYXNzL25ldC88aWZhY2U+L3RocmVhZGVkCisrRGF0ZToJCUphbiAyMDIxCisrS2VybmVsVmVyc2lvbjoJNS4xMgorK0NvbnRhY3Q6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKKytEZXNjcmlwdGlvbjoKKysJCUJvb2xlYW4gdmFsdWUgdG8gY29udHJvbCB0aGUgdGhyZWFkZWQgbW9kZSBwZXIgZGV2aWNlLiBVc2VyIGNvdWxkCisrCQlzZXQgdGhpcyB2YWx1ZSB0byBlbmFibGUvZGlzYWJsZSB0aHJlYWRlZCBtb2RlIGZvciBhbGwgbmFwaQorKwkJYmVsb25naW5nIHRvIHRoaXMgZGV2aWNlLCB3aXRob3V0IHRoZSBuZWVkIHRvIGRvIGRldmljZSB1cC9kb3duLgorKworKwkJUG9zc2libGUgdmFsdWVzOgorKwkJPT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKwkJMCAgdGhyZWFkZWQgbW9kZSBkaXNhYmxlZCBmb3IgdGhpcyBkZXYKKysJCTEgIHRocmVhZGVkIG1vZGUgZW5hYmxlZCBmb3IgdGhpcyBkZXYKKysJCT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKKysrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKK0BAIC00OTgsNiArNDk4LDggQEAgc3RhdGljIGlubGluZSBib29sIG5hcGlfY29tcGxldGUoc3RydWN0CisgICovCisgYm9vbCBuYXBpX2hhc2hfZGVsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSk7CisgCisraW50IGRldl9zZXRfdGhyZWFkZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0aHJlYWRlZCk7CisrCisgLyoqCisgICoJbmFwaV9kaXNhYmxlIC0gcHJldmVudCBOQVBJIGZyb20gc2NoZWR1bGluZworICAqCUBuOiBOQVBJIGNvbnRleHQKKy0tLSBhL25ldC9jb3JlL2Rldi5jCisrKysgYi9uZXQvY29yZS9kZXYuYworQEAgLTM5MTQsOCArMzkxNCw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX19fbmFwaV9zY2hlZHVsZShzdHIKKyAKKyAJaWYgKHRlc3RfYml0KE5BUElfU1RBVEVfVEhSRUFERUQsICZuYXBpLT5zdGF0ZSkpIHsKKyAJCS8qIFBhaXJlZCB3aXRoIHNtcF9tYl9fYmVmb3JlX2F0b21pYygpIGluCistCQkgKiBuYXBpX2VuYWJsZSgpLiBVc2UgUkVBRF9PTkNFKCkgdG8gZ3VhcmFudGVlCistCQkgKiBhIGNvbXBsZXRlIHJlYWQgb24gbmFwaS0+dGhyZWFkLiBPbmx5IGNhbGwKKysJCSAqIG5hcGlfZW5hYmxlKCkvZGV2X3NldF90aHJlYWRlZCgpLgorKwkJICogVXNlIFJFQURfT05DRSgpIHRvIGd1YXJhbnRlZSBhIGNvbXBsZXRlCisrCQkgKiByZWFkIG9uIG5hcGktPnRocmVhZC4gT25seSBjYWxsCisgCQkgKiB3YWtlX3VwX3Byb2Nlc3MoKSB3aGVuIGl0J3Mgbm90IE5VTEwuCisgCQkgKi8KKyAJCXRocmVhZCA9IFJFQURfT05DRShuYXBpLT50aHJlYWQpOworQEAgLTYyOTMsNiArNjI5NCw0OSBAQCBzdGF0aWMgdm9pZCBpbml0X2dyb19oYXNoKHN0cnVjdCBuYXBpX3N0CisgCW5hcGktPmdyb19iaXRtYXNrID0gMDsKKyB9CisgCisraW50IGRldl9zZXRfdGhyZWFkZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0aHJlYWRlZCkKKyt7CisrCXN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaTsKKysJaW50IGVyciA9IDA7CisrCisrCWlmIChkZXYtPnRocmVhZGVkID09IHRocmVhZGVkKQorKwkJcmV0dXJuIDA7CisrCisrCWlmICh0aHJlYWRlZCkgeworKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShuYXBpLCAmZGV2LT5uYXBpX2xpc3QsIGRldl9saXN0KSB7CisrCQkJaWYgKCFuYXBpLT50aHJlYWQpIHsKKysJCQkJZXJyID0gbmFwaV9rdGhyZWFkX2NyZWF0ZShuYXBpKTsKKysJCQkJaWYgKGVycikgeworKwkJCQkJdGhyZWFkZWQgPSBmYWxzZTsKKysJCQkJCWJyZWFrOworKwkJCQl9CisrCQkJfQorKwkJfQorKwl9CisrCisrCWRldi0+dGhyZWFkZWQgPSB0aHJlYWRlZDsKKysKKysJLyogTWFrZSBzdXJlIGt0aHJlYWQgaXMgY3JlYXRlZCBiZWZvcmUgVEhSRUFERUQgYml0CisrCSAqIGlzIHNldC4KKysJICovCisrCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOworKworKwkvKiBTZXR0aW5nL3Vuc2V0dGluZyB0aHJlYWRlZCBtb2RlIG9uIGEgbmFwaSBtaWdodCBub3QgaW1tZWRpYXRlbHkKKysJICogdGFrZSBlZmZlY3QsIGlmIHRoZSBjdXJyZW50IG5hcGkgaW5zdGFuY2UgaXMgYWN0aXZlbHkgYmVpbmcKKysJICogcG9sbGVkLiBJbiB0aGlzIGNhc2UsIHRoZSBzd2l0Y2ggYmV0d2VlbiB0aHJlYWRlZCBtb2RlIGFuZAorKwkgKiBzb2Z0aXJxIG1vZGUgd2lsbCBoYXBwZW4gaW4gdGhlIG5leHQgcm91bmQgb2YgbmFwaV9zY2hlZHVsZSgpLgorKwkgKiBUaGlzIHNob3VsZCBub3QgY2F1c2UgaGljY3Vwcy9zdGFsbHMgdG8gdGhlIGxpdmUgdHJhZmZpYy4KKysJICovCisrCWxpc3RfZm9yX2VhY2hfZW50cnkobmFwaSwgJmRldi0+bmFwaV9saXN0LCBkZXZfbGlzdCkgeworKwkJaWYgKHRocmVhZGVkKQorKwkJCXNldF9iaXQoTkFQSV9TVEFURV9USFJFQURFRCwgJm5hcGktPnN0YXRlKTsKKysJCWVsc2UKKysJCQljbGVhcl9iaXQoTkFQSV9TVEFURV9USFJFQURFRCwgJm5hcGktPnN0YXRlKTsKKysJfQorKworKwlyZXR1cm4gZXJyOworK30KKysKKyB2b2lkIG5ldGlmX25hcGlfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKKyAJCSAgICBpbnQgKCpwb2xsKShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKiwgaW50KSwgaW50IHdlaWdodCkKKyB7CistLS0gYS9uZXQvY29yZS9uZXQtc3lzZnMuYworKysrIGIvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKK0BAIC01NTcsNiArNTU3LDQ1IEBAIHN0YXRpYyBzc2l6ZV90IHBoeXNfc3dpdGNoX2lkX3Nob3coc3RydWMKKyB9Cisgc3RhdGljIERFVklDRV9BVFRSX1JPKHBoeXNfc3dpdGNoX2lkKTsKKyAKKytzdGF0aWMgc3NpemVfdCB0aHJlYWRlZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKysJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCisreworKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdG9fbmV0X2RldihkZXYpOworKwlzc2l6ZV90IHJldCA9IC1FSU5WQUw7CisrCisrCWlmICghcnRubF90cnlsb2NrKCkpCisrCQlyZXR1cm4gcmVzdGFydF9zeXNjYWxsKCk7CisrCisrCWlmIChkZXZfaXNhbGl2ZShuZXRkZXYpKQorKwkJcmV0ID0gc3ByaW50ZihidWYsIGZtdF9kZWMsIG5ldGRldi0+dGhyZWFkZWQpOworKworKwlydG5sX3VubG9jaygpOworKwlyZXR1cm4gcmV0OworK30KKysKKytzdGF0aWMgaW50IG1vZGlmeV9uYXBpX3RocmVhZGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgdmFsKQorK3sKKysJaW50IHJldDsKKysKKysJaWYgKGxpc3RfZW1wdHkoJmRldi0+bmFwaV9saXN0KSkKKysJCXJldHVybiAtRU9QTk9UU1VQUDsKKysKKysJaWYgKHZhbCAhPSAwICYmIHZhbCAhPSAxKQorKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworKworKwlyZXQgPSBkZXZfc2V0X3RocmVhZGVkKGRldiwgdmFsKTsKKysKKysJcmV0dXJuIHJldDsKKyt9CisrCisrc3RhdGljIHNzaXplX3QgdGhyZWFkZWRfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorKwkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorKwkJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKKyt7CisrCXJldHVybiBuZXRkZXZfc3RvcmUoZGV2LCBhdHRyLCBidWYsIGxlbiwgbW9kaWZ5X25hcGlfdGhyZWFkZWQpOworK30KKytzdGF0aWMgREVWSUNFX0FUVFJfUlcodGhyZWFkZWQpOworKworIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpuZXRfY2xhc3NfYXR0cnNbXSBfX3JvX2FmdGVyX2luaXQgPSB7CisgCSZkZXZfYXR0cl9uZXRkZXZfZ3JvdXAuYXR0ciwKKyAJJmRldl9hdHRyX3R5cGUuYXR0ciwKK0BAIC01ODcsNiArNjI2LDcgQEAgc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm5ldF9jbGFzc19hdHRycworIAkmZGV2X2F0dHJfcHJvdG9fZG93bi5hdHRyLAorIAkmZGV2X2F0dHJfY2Fycmllcl91cF9jb3VudC5hdHRyLAorIAkmZGV2X2F0dHJfY2Fycmllcl9kb3duX2NvdW50LmF0dHIsCisrCSZkZXZfYXR0cl90aHJlYWRlZC5hdHRyLAorIAlOVUxMLAorIH07CisgQVRUUklCVVRFX0dST1VQUyhuZXRfY2xhc3MpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzYwMy12NS4xMi1uZXQtZml4LXJhY2UtYmV0d2Vlbi1uYXBpLWt0aHJlYWQtbW9kZS1hbmQtYnVzeS1wb2xsLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzYwMy12NS4xMi1uZXQtZml4LXJhY2UtYmV0d2Vlbi1uYXBpLWt0aHJlYWQtbW9kZS1hbmQtYnVzeS1wb2xsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NGYzM2UKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNjAzLXY1LjEyLW5ldC1maXgtcmFjZS1iZXR3ZWVuLW5hcGkta3RocmVhZC1tb2RlLWFuZC1idXN5LXBvbGwucGF0Y2gKQEAgLTAsMCArMSw5MyBAQAorRnJvbTogV2VpIFdhbmcgPHdlaXdhbkBnb29nbGUuY29tPgorRGF0ZTogTW9uLCAxIE1hciAyMDIxIDE3OjIxOjEzIC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIG5ldDogZml4IHJhY2UgYmV0d2VlbiBuYXBpIGt0aHJlYWQgbW9kZSBhbmQgYnVzeSBwb2xsCisKK0N1cnJlbnRseSwgbmFwaV90aHJlYWRfd2FpdCgpIGNoZWNrcyBmb3IgTkFQSV9TVEFURV9TQ0hFRCBiaXQgdG8KK2RldGVybWluZSBpZiB0aGUga3RocmVhZCBvd25zIHRoaXMgbmFwaSBhbmQgY291bGQgY2FsbCBuYXBpLT5wb2xsKCkgb24KK2l0LiBIb3dldmVyLCBpZiBzb2NrZXQgYnVzeSBwb2xsIGlzIGVuYWJsZWQsIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlCitidXN5IHBvbGwgdGhyZWFkIGdyYWJzIHRoaXMgU0NIRUQgYml0IChhZnRlciB0aGUgcHJldmlvdXMgbmFwaS0+cG9sbCgpCitpbnZva2VzIG5hcGlfY29tcGxldGVfZG9uZSgpIGFuZCBjbGVhcnMgU0NIRUQgYml0KSBhbmQgdHJpZXMgdG8gcG9sbAorb24gdGhlIHNhbWUgbmFwaS4gbmFwaV9kaXNhYmxlKCkgY291bGQgZ3JhYiB0aGUgU0NIRUQgYml0IGFzIHdlbGwuCitUaGlzIHBhdGNoIHRyaWVzIHRvIGZpeCB0aGlzIHJhY2UgYnkgYWRkaW5nIGEgbmV3IGJpdAorTkFQSV9TVEFURV9TQ0hFRF9USFJFQURFRCBpbiBuYXBpLT5zdGF0ZS4gVGhpcyBiaXQgZ2V0cyBzZXQgaW4KK19fX19uYXBpX3NjaGVkdWxlKCkgaWYgdGhlIHRocmVhZGVkIG1vZGUgaXMgZW5hYmxlZCwgYW5kIGdldHMgY2xlYXJlZAoraW4gbmFwaV9jb21wbGV0ZV9kb25lKCksIGFuZCB3ZSBvbmx5IHBvbGwgdGhlIG5hcGkgaW4ga3RocmVhZCBpZiB0aGlzCitiaXQgaXMgc2V0LiBUaGlzIGhlbHBzIGRpc3Rpbmd1aXNoIHRoZSBvd25lcnNoaXAgb2YgdGhlIG5hcGkgYmV0d2Vlbgora3RocmVhZCBhbmQgb3RoZXIgc2NlbmFyaW9zIGFuZCBmaXhlcyB0aGUgcmFjZSBpc3N1ZS4KKworRml4ZXM6IDI5ODYzZDQxYmI2ZSAoIm5ldDogaW1wbGVtZW50IHRocmVhZGVkLWFibGUgbmFwaSBwb2xsIGxvb3Agc3VwcG9ydCIpCitSZXBvcnRlZC1ieTogTWFydGluIFphaGFyaW5vdiA8bWljcm9uMTBAZ21haWwuY29tPgorU3VnZ2VzdGVkLWJ5OiBKYWt1YiBLaWNpbnNraSA8a3ViYUBrZXJuZWwub3JnPgorU2lnbmVkLW9mZi1ieTogV2VpIFdhbmcgPHdlaXdhbkBnb29nbGUuY29tPgorQ2M6IEFsZXhhbmRlciBEdXljayA8YWxleGFuZGVyZHV5Y2tAZmIuY29tPgorQ2M6IEVyaWMgRHVtYXpldCA8ZWR1bWF6ZXRAZ29vZ2xlLmNvbT4KK0NjOiBQYW9sbyBBYmVuaSA8cGFiZW5pQHJlZGhhdC5jb20+CitDYzogSGFubmVzIEZyZWRlcmljIFNvd2EgPGhhbm5lc0BzdHJlc3NpbmR1a3Rpb24ub3JnPgorLS0tCisKKy0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKKysrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKK0BAIC0zNTIsNiArMzUyLDcgQEAgZW51bSB7CisgCU5BUElfU1RBVEVfTk9fQlVTWV9QT0xMLC8qIERvIG5vdCBhZGQgaW4gbmFwaV9oYXNoLCBubyBidXN5IHBvbGxpbmcgKi8KKyAJTkFQSV9TVEFURV9JTl9CVVNZX1BPTEwsLyogc2tfYnVzeV9sb29wKCkgb3ducyB0aGlzIE5BUEkgKi8KKyAJTkFQSV9TVEFURV9USFJFQURFRCwJCS8qIFRoZSBwb2xsIGlzIHBlcmZvcm1lZCBpbnNpZGUgaXRzIG93biB0aHJlYWQqLworKwlOQVBJX1NUQVRFX1NDSEVEX1RIUkVBREVELAkvKiBOYXBpIGlzIGN1cnJlbnRseSBzY2hlZHVsZWQgaW4gdGhyZWFkZWQgbW9kZSAqLworIH07CisgCisgZW51bSB7CitAQCAtMzYzLDYgKzM2NCw3IEBAIGVudW0geworIAlOQVBJRl9TVEFURV9OT19CVVNZX1BPTEwgPSBCSVQoTkFQSV9TVEFURV9OT19CVVNZX1BPTEwpLAorIAlOQVBJRl9TVEFURV9JTl9CVVNZX1BPTEwgPSBCSVQoTkFQSV9TVEFURV9JTl9CVVNZX1BPTEwpLAorIAlOQVBJRl9TVEFURV9USFJFQURFRAkgPSBCSVQoTkFQSV9TVEFURV9USFJFQURFRCksCisrCU5BUElGX1NUQVRFX1NDSEVEX1RIUkVBREVECT0gQklUKE5BUElfU1RBVEVfU0NIRURfVEhSRUFERUQpLAorIH07CisgCisgZW51bSBncm9fcmVzdWx0IHsKKy0tLSBhL25ldC9jb3JlL2Rldi5jCisrKysgYi9uZXQvY29yZS9kZXYuYworQEAgLTM5MjEsNiArMzkyMSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfX19fbmFwaV9zY2hlZHVsZShzdHIKKyAJCSAqLworIAkJdGhyZWFkID0gUkVBRF9PTkNFKG5hcGktPnRocmVhZCk7CisgCQlpZiAodGhyZWFkKSB7CisrCQkJaWYgKHRocmVhZC0+c3RhdGUgIT0gVEFTS19JTlRFUlJVUFRJQkxFKQorKwkJCQlzZXRfYml0KE5BUElfU1RBVEVfU0NIRURfVEhSRUFERUQsICZuYXBpLT5zdGF0ZSk7CisgCQkJd2FrZV91cF9wcm9jZXNzKHRocmVhZCk7CisgCQkJcmV0dXJuOworIAkJfQorQEAgLTYwODEsNyArNjA4Myw4IEBAIGJvb2wgbmFwaV9jb21wbGV0ZV9kb25lKHN0cnVjdCBuYXBpX3N0cnUKKyAKKyAJCVdBUk5fT05fT05DRSghKHZhbCAmIE5BUElGX1NUQVRFX1NDSEVEKSk7CisgCistCQluZXcgPSB2YWwgJiB+KE5BUElGX1NUQVRFX01JU1NFRCB8IE5BUElGX1NUQVRFX1NDSEVEKTsKKysJCW5ldyA9IHZhbCAmIH4oTkFQSUZfU1RBVEVfTUlTU0VEIHwgTkFQSUZfU1RBVEVfU0NIRUQgfAorKwkJCSAgICAgIE5BUElGX1NUQVRFX1NDSEVEX1RIUkVBREVEKTsKKyAKKyAJCS8qIElmIFNUQVRFX01JU1NFRCB3YXMgc2V0LCBsZWF2ZSBTVEFURV9TQ0hFRCBzZXQsCisgCQkgKiBiZWNhdXNlIHdlIHdpbGwgY2FsbCBuYXBpLT5wb2xsKCkgb25lIG1vcmUgdGltZS4KK0BAIC02NTE0LDE2ICs2NTE3LDI1IEBAIHN0YXRpYyBpbnQgbmFwaV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdAorIAorIHN0YXRpYyBpbnQgbmFwaV90aHJlYWRfd2FpdChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpCisgeworKwlib29sIHdva2VuID0gZmFsc2U7CisrCisgCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisgCisgCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpICYmICFuYXBpX2Rpc2FibGVfcGVuZGluZyhuYXBpKSkgeworLQkJaWYgKHRlc3RfYml0KE5BUElfU1RBVEVfU0NIRUQsICZuYXBpLT5zdGF0ZSkpIHsKKysJCS8qIFRlc3RpbmcgU0NIRURfVEhSRUFERUQgYml0IGhlcmUgdG8gbWFrZSBzdXJlIHRoZSBjdXJyZW50CisrCQkgKiBrdGhyZWFkIG93bnMgdGhpcyBuYXBpIGFuZCBjb3VsZCBwb2xsIG9uIHRoaXMgbmFwaS4KKysJCSAqIFRlc3RpbmcgU0NIRUQgYml0IGlzIG5vdCBlbm91Z2ggYmVjYXVzZSBTQ0hFRCBiaXQgbWlnaHQgYmUKKysJCSAqIHNldCBieSBzb21lIG90aGVyIGJ1c3kgcG9sbCB0aHJlYWQgb3IgYnkgbmFwaV9kaXNhYmxlKCkuCisrCQkgKi8KKysJCWlmICh0ZXN0X2JpdChOQVBJX1NUQVRFX1NDSEVEX1RIUkVBREVELCAmbmFwaS0+c3RhdGUpIHx8IHdva2VuKSB7CisgCQkJV0FSTl9PTighbGlzdF9lbXB0eSgmbmFwaS0+cG9sbF9saXN0KSk7CisgCQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworIAkJCXJldHVybiAwOworIAkJfQorIAorIAkJc2NoZWR1bGUoKTsKKysJCS8qIHdva2VuIGJlaW5nIHRydWUgaW5kaWNhdGVzIHRoaXMgdGhyZWFkIG93bnMgdGhpcyBuYXBpLiAqLworKwkJd29rZW4gPSB0cnVlOworIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKyAJfQorIAlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNjA0LXY1LjEyLW5ldC1maXgtaGFuZ3VwLW9uLW5hcGlfZGlzYWJsZS1mb3ItdGhyZWFkZWQtbmFwaS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC82MDQtdjUuMTItbmV0LWZpeC1oYW5ndXAtb24tbmFwaV9kaXNhYmxlLWZvci10aHJlYWRlZC1uYXBpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNDhmZGYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNjA0LXY1LjEyLW5ldC1maXgtaGFuZ3VwLW9uLW5hcGlfZGlzYWJsZS1mb3ItdGhyZWFkZWQtbmFwaS5wYXRjaApAQCAtMCwwICsxLDUzIEBACitGcm9tOiBQYW9sbyBBYmVuaSA8cGFiZW5pQHJlZGhhdC5jb20+CitEYXRlOiBGcmksIDkgQXByIDIwMjEgMTc6MjQ6MTcgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gbmV0OiBmaXggaGFuZ3VwIG9uIG5hcGlfZGlzYWJsZSBmb3IgdGhyZWFkZWQgbmFwaQorCituYXBpX2Rpc2FibGUoKSBpcyBzdWJqZWN0IHRvIGFuIGhhbmd1cCwgd2hlbiB0aGUgdGhyZWFkZWQKK21vZGUgaXMgZW5hYmxlZCBhbmQgdGhlIG5hcGkgaXMgdW5kZXIgaGVhdnkgdHJhZmZpYy4KKworSWYgdGhlIHJlbGV2YW50IG5hcGkgaGFzIGJlZW4gc2NoZWR1bGVkIGFuZCB0aGUgbmFwaV9kaXNhYmxlKCkKK2tpY2tzIGluIGJlZm9yZSB0aGUgbmV4dCBuYXBpX3RocmVhZGVkX3dhaXQoKSBjb21wbGV0ZXMgLSBzbwordGhhdCB0aGUgbGF0dGVyIHF1aXRzIGR1ZSB0byB0aGUgbmFwaV9kaXNhYmxlX3BlbmRpbmcoKSBjb25kaXRpb24sCit0aGUgZXhpc3RpbmcgY29kZSBsZWF2ZXMgdGhlIE5BUElfU1RBVEVfU0NIRUQgYml0IHNldCBhbmQgdGhlCituYXBpX2Rpc2FibGUoKSBsb29wIHdhaXRpbmcgZm9yIHN1Y2ggYml0IHdpbGwgaGFuZy4KKworVGhpcyBwYXRjaCBhZGRyZXNzZXMgdGhlIGlzc3VlIGJ5IGRyb3BwaW5nIHRoZSBOQVBJX1NUQVRFX0RJU0FCTEUKK2JpdCB0ZXN0IGluIG5hcGlfdGhyZWFkX3dhaXQoKS4gVGhlIGxhdGVyIG5hcGlfdGhyZWFkZWRfcG9sbCgpCitpdGVyYXRpb24gd2lsbCB0YWtlIGNhcmUgb2YgY2xlYXJpbmcgdGhlIE5BUElfU1RBVEVfU0NIRUQuCisKK1RoaXMgYWxzbyBhZGRyZXNzZXMgYSByZWxhdGVkIHByb2JsZW0gcmVwb3J0ZWQgYnkgSmFrdWI6CitiZWZvcmUgdGhpcyBwYXRjaCBhIG5hcGlfZGlzYWJsZSgpL25hcGlfZW5hYmxlKCkgcGFpciBraWxsZWQKK3RoZSBuYXBpIHRocmVhZCwgZWZmZWN0aXZlbHkgZGlzYWJsaW5nIHRoZSB0aHJlYWRlZCBtb2RlLgorT24gdGhlIHBhdGNoZWQga2VybmVsIG5hcGlfZGlzYWJsZSgpIHNpbXBseSBzdG9wcyBzY2hlZHVsaW5nCit0aGUgcmVsZXZhbnQgdGhyZWFkLgorCit2MSAtPiB2MjoKKyAgLSBsZXQgdGhlIG1haW4gbmFwaV90aHJlYWRfcG9sbCgpIGxvb3AgY2xlYXIgdGhlIFNDSEVEIGJpdAorCitSZXBvcnRlZC1ieTogSmFrdWIgS2ljaW5za2kgPGt1YmFAa2VybmVsLm9yZz4KK0ZpeGVzOiAyOTg2M2Q0MWJiNmUgKCJuZXQ6IGltcGxlbWVudCB0aHJlYWRlZC1hYmxlIG5hcGkgcG9sbCBsb29wIHN1cHBvcnQiKQorU2lnbmVkLW9mZi1ieTogUGFvbG8gQWJlbmkgPHBhYmVuaUByZWRoYXQuY29tPgorUmV2aWV3ZWQtYnk6IEVyaWMgRHVtYXpldCA8ZWR1bWF6ZXRAZ29vZ2xlLmNvbT4KK0xpbms6IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL3IvODgzOTIzZmEyMjc0NWE5NTg5ZTg2MTA5NjJiN2RjNTlkZjA5ZmIxZi4xNjE3OTgxODQ0LmdpdC5wYWJlbmlAcmVkaGF0LmNvbQorU2lnbmVkLW9mZi1ieTogSmFrdWIgS2ljaW5za2kgPGt1YmFAa2VybmVsLm9yZz4KKy0tLQorCistLS0gYS9uZXQvY29yZS9kZXYuYworKysrIGIvbmV0L2NvcmUvZGV2LmMKK0BAIC02NTIxLDcgKzY1MjEsNyBAQCBzdGF0aWMgaW50IG5hcGlfdGhyZWFkX3dhaXQoc3RydWN0IG5hcGlfCisgCisgCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisgCistCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpICYmICFuYXBpX2Rpc2FibGVfcGVuZGluZyhuYXBpKSkgeworKwl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworIAkJLyogVGVzdGluZyBTQ0hFRF9USFJFQURFRCBiaXQgaGVyZSB0byBtYWtlIHN1cmUgdGhlIGN1cnJlbnQKKyAJCSAqIGt0aHJlYWQgb3ducyB0aGlzIG5hcGkgYW5kIGNvdWxkIHBvbGwgb24gdGhpcyBuYXBpLgorIAkJICogVGVzdGluZyBTQ0hFRCBiaXQgaXMgbm90IGVub3VnaCBiZWNhdXNlIFNDSEVEIGJpdCBtaWdodCBiZQorQEAgLTY1MzksNiArNjUzOSw3IEBAIHN0YXRpYyBpbnQgbmFwaV90aHJlYWRfd2FpdChzdHJ1Y3QgbmFwaV8KKyAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisgCX0KKyAJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworKworIAlyZXR1cm4gLTE7CisgfQorIApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzYxMC12NS45LW5ldC1icmlkZ2UtY2xlYXItYnJpZGdlLXMtcHJpdmF0ZS1za2Itc3BhY2Utb24teG1pdC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC82MTAtdjUuOS1uZXQtYnJpZGdlLWNsZWFyLWJyaWRnZS1zLXByaXZhdGUtc2tiLXNwYWNlLW9uLXhtaXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcwNGQwNQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC82MTAtdjUuOS1uZXQtYnJpZGdlLWNsZWFyLWJyaWRnZS1zLXByaXZhdGUtc2tiLXNwYWNlLW9uLXhtaXQucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbTogTmlrb2xheSBBbGVrc2FuZHJvdiA8bmlrb2xheUBjdW11bHVzbmV0d29ya3MuY29tPgorRGF0ZTogRnJpLCAzMSBKdWwgMjAyMCAxOToyNjoxNiArMDMwMAorU3ViamVjdDogW1BBVENIXSBuZXQ6IGJyaWRnZTogY2xlYXIgYnJpZGdlJ3MgcHJpdmF0ZSBza2Igc3BhY2Ugb24geG1pdAorCitXZSBuZWVkIHRvIGNsZWFyIGFsbCBvZiB0aGUgYnJpZGdlIHByaXZhdGUgc2tiIHZhcmlhYmxlcyBhcyB0aGV5IGNhbiBiZQorc3RhbGUgZHVlIHRvIHRoZSBwYWNrZXQgYmVpbmcgcmVjaXJjdWxhdGVkIHRocm91Z2ggdGhlIHN0YWNrIGFuZCB0aGVuCit0cmFuc21pdHRlZCB0aHJvdWdoIHRoZSBicmlkZ2UgZGV2aWNlLiBTaW1pbGFyIG1lbXNldCBpcyBhbHJlYWR5IGRvbmUgb24KK2JyaWRnZSdzIGlucHV0LiBXZSd2ZSBzZWVuIGNhc2VzIHdoZXJlIHByb3h5YXJwX3JlcGxpZWQgd2FzIDEgb24gcm91dGVkCittdWx0aWNhc3QgcGFja2V0cyB0cmFuc21pdHRlZCB0aHJvdWdoIHRoZSBicmlkZ2UgdG8gcG9ydHMgd2l0aCBuZWlnaAorc3VwcHJlc3Mgd2hpY2ggd2VyZSBnZXR0aW5nIGRyb3BwZWQuIFNhbWUgdGhpbmcgY2FuIGluIHRoZW9yeSBoYXBwZW4gd2l0aAordGhlIHBvcnQgaXNvbGF0aW9uIGJpdCBhcyB3ZWxsLgorCitGaXhlczogODIxZjFiMjFjYWJiICgiYnJpZGdlOiBhZGQgbmV3IEJSX05FSUdIX1NVUFBSRVNTIHBvcnQgZmxhZyB0byBzdXBwcmVzcyBhcnAgYW5kIG5kIGZsb29kIikKK1NpZ25lZC1vZmYtYnk6IE5pa29sYXkgQWxla3NhbmRyb3YgPG5pa29sYXlAY3VtdWx1c25ldHdvcmtzLmNvbT4KK1NpZ25lZC1vZmYtYnk6IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KKy0tLQorCistLS0gYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jCisrKysgYi9uZXQvYnJpZGdlL2JyX2RldmljZS5jCitAQCAtMzUsNiArMzUsOCBAQCBuZXRkZXZfdHhfdCBicl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqCisgCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRlc3Q7CisgCXUxNiB2aWQgPSAwOworIAorKwltZW1zZXQoc2tiLT5jYiwgMCwgc2l6ZW9mKHN0cnVjdCBicl9pbnB1dF9za2JfY2IpKTsKKysKKyAJcmN1X3JlYWRfbG9jaygpOworIAluZl9vcHMgPSByY3VfZGVyZWZlcmVuY2UobmZfYnJfb3BzKTsKKyAJaWYgKG5mX29wcyAmJiBuZl9vcHMtPmJyX2Rldl94bWl0X2hvb2soc2tiKSkgewpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzcwMC12NS41LW5ldC1jb3JlLWFsbG93LWZhc3QtR1JPLWZvci1za2JzLXdpdGgtRXRoZXJuZXQtaGVhZGUucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzAwLXY1LjUtbmV0LWNvcmUtYWxsb3ctZmFzdC1HUk8tZm9yLXNrYnMtd2l0aC1FdGhlcm5ldC1oZWFkZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGI3NmNkCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzcwMC12NS41LW5ldC1jb3JlLWFsbG93LWZhc3QtR1JPLWZvci1za2JzLXdpdGgtRXRoZXJuZXQtaGVhZGUucGF0Y2gKQEAgLTAsMCArMSw3OCBAQAorRnJvbTogQWxleGFuZGVyIExvYmFraW4gPGFsb2Jha2luQGRsaW5rLnJ1PgorRGF0ZTogRnJpLCAxNSBOb3YgMjAxOSAxMjoxMTozNSArMDMwMAorU3ViamVjdDogW1BBVENIXSBuZXQ6IGNvcmU6IGFsbG93IGZhc3QgR1JPIGZvciBza2JzIHdpdGggRXRoZXJuZXQgaGVhZGVyIGluCisgaGVhZAorCitDb21taXQgNzhkM2ZkMGI3ZGU4ICgiZ3JvOiBPbmx5IHVzZSBza2JfZ3JvX2hlYWRlciBmb3IgY29tcGxldGVseQorbm9uLWxpbmVhciBwYWNrZXRzIikgYmFjayBpbiBNYXknMDkgKHYyLjYuMzEtcmMxKSBoYXMgY2hhbmdlZCB0aGUKK29yaWdpbmFsIGNvbmRpdGlvbiAnIXNrYl9oZWFkbGVuKHNrYiknIHRvCisnc2tiLT5tYWNfaGVhZGVyID09IHNrYi0+dGFpbCcgaW4gZ3JvX3Jlc2V0X29mZnNldCgpIHNheWluZzogIlNpbmNlCit0aGUgZHJpdmVycyB0aGF0IG5lZWQgdGhpcyBvcHRpbWlzYXRpb24gYWxsIHByb3ZpZGUgY29tcGxldGVseQorbm9uLWxpbmVhciBwYWNrZXRzIiAobm90ZSB0aGF0IHRoaXMgY29uZGl0aW9uIGhhcyBiZWNvbWUgdGhlIGN1cnJlbnQKKydza2JfbWFjX2hlYWRlcihza2IpID09IHNrYl90YWlsX3BvaW50ZXIoc2tiKScgbGF0ZXIgd2l0aCBjb21tbWl0CitjZWQxNGY2ODA0YTkgKCJuZXQ6IENvcnJlY3QgY29tcGFyaXNvbnMgYW5kIGNhbGN1bGF0aW9ucyB1c2luZworc2tiLT50YWlsIGFuZCBza2ItdHJhbnNwb3J0X2hlYWRlciIpIHdpdGhvdXQgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcykuCisKK0ZvciBub3csIHdlIGhhdmUgdGhlIGZvbGxvd2luZyByb3VnaCBzdGF0aXN0aWNzIGZvciB2NS40LXJjNzoKKzEpIG5hcGlfZ3JvX2ZyYWdzOiAxNAorMikgbmFwaV9ncm9fcmVjZWl2ZSB3aXRoIHNrYi0+aGVhZCBjb250YWluaW5nIChtb3N0IG9mKSBwYXlsb2FkOiA4MworMykgbmFwaV9ncm9fcmVjZWl2ZSB3aXRoIHNrYi0+aGVhZCBjb250YWluaW5nIGFsbCB0aGUgaGVhZGVyczogMjAKKzQpIG5hcGlfZ3JvX3JlY2VpdmUgd2l0aCBza2ItPmhlYWQgY29udGFpbmluZyBvbmx5IEV0aGVybmV0IGhlYWRlcjogMgorCitXaXRoIHRoZSBjdXJyZW50IGNvbmRpdGlvbiwgZmFzdCBHUk8gd2l0aCB0aGUgdXNhZ2Ugb2YKK05BUElfR1JPX0NCKHNrYiktPmZyYWcwIGlzIGF2YWlsYWJsZSBvbmx5IGluIHRoZSBbMV0gY2FzZS4KK1BhY2tldHMgcHVzaGVkIGJ5IFsyXSBhbmQgWzNdIGdvIHRocm91Z2ggdGhlICdzbG93JyBwYXRoLCBidXQKK2l0J3Mgbm90IGEgcHJvYmxlbSBmb3IgdGhlbSBhcyB0aGV5IGFscmVhZHkgY29udGFpbiBhbGwgdGhlIG5lZWRlZAoraGVhZGVycyBpbiBza2ItPmhlYWQsIHNvIHBza2JfbWF5X3B1bGwoKSBvbmx5IG1vdmVzIHNrYi0+ZGF0YS4KKworVGhlIGxheW91dCBvZiBza2JzIGluIHRoZSBmb3VydGggWzRdIGNhc2UgYXQgdGhlIG1vbWVudCBvZgorZGV2X2dyb19yZWNlaXZlKCkgaXMgaWRlbnRpY2FsIHRvIHNrYnMgdGhhdCBoYXZlIGNvbWUgdGhyb3VnaCBbMV0sCithcyBuYXBpX2ZyYWdzX3NrYigpIHB1bGxzIEV0aGVybmV0IGhlYWRlciB0byBza2ItPmhlYWQuIFRoZSBvbmx5CitkaWZmZXJlbmNlIGlzIHRoYXQgdGhlIG1lbnRpb25lZCBjb25kaXRpb24gaXMgYWx3YXlzIGZhbHNlIGZvciB0aGVtLAorYmVjYXVzZSBza2JfcHV0KCkgYW5kIGZyaWVuZHMgaXJyZXZlcnNpYmx5IGFsdGVyIHRoZSB0YWlsIHBvaW50ZXIuCitUaGV5IGFsc28gZ28gdGhyb3VnaCB0aGUgJ3Nsb3cnIHBhdGgsIGJ1dCBub3cgZXZlcnkgc2luZ2xlCitwc2tiX21heV9wdWxsKCkgaW4gZXZlcnkgc2luZ2xlIC5ncm9fcmVjZWl2ZSgpIHdpbGwgY2FsbCB0aGUgKnJlYWxseSoKK3Nsb3cgX19wc2tiX3B1bGxfdGFpbCgpIHRvIHB1bGwgaGVhZGVycyB0byBoZWFkLiBUaGlzIHNpZ25pZmljYW50bHkKK2RlY3JlYXNlcyB0aGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBmb3Igbm8gdmlzaWJsZSByZWFzb25zLgorCitUaGUgb25seSB0d28gdXNlcnMgb2YgbWV0aG9kIFs0XSBpczoKKyogZHJpdmVycy9zdGFnaW5nL3FsZ2UKKyogZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaSAoYWxsIHRocmVlIHZhcmlhbnRzOiBkdm0sIG12bSwgbXZtLW1xKQorCitOb3RlIHRoYXQgaW4gY2FzZSB3aXRoIHdpcmVsZXNzIGRyaXZlcnMgd2UgY2FuJ3QgdXNlIFsxXQorKG5hcGlfZ3JvX2ZyYWdzKCkpIGF0IGxlYXN0IGZvciBub3cgYW5kIG1hYzgwMjExIHN0YWNrIGFsd2F5cworcGVyZm9ybXMgcHVzaGVzIGFuZCBwdWxscyBhbnl3YXlzLCBzbyBwZXJmb3JtYW5jZSBoaXQgaXMgaW5hdm9pZGFibGUuCisKK0F0IHRoZSBtb21lbnQgb2YgdjIuNi4zMSB0aGUgbWVudGlvbmVkIGNoYW5nZSB3YXMgbmVjZXNzYXJ5ICh0aGF0J3MKK3doeSBJIGRvbid0IGFkZCB0aGUgIkZpeGVzOiIgdGFnKSwgYnV0IGl0IGJlY2FtZSBvYnNvbGV0ZSBzaW5jZQorc2tiX2dyb19tYWNfaGVhZGVyKCkgaGFzIGdvbmUgaW4gY29tbWl0IGE1MGUyMzNjNTBkYiAoIm5ldC1ncm86CityZXN0b3JlIGZyYWcwIG9wdGltaXphdGlvbiIpLCBzbyB3ZSBjYW4gc2ltcGx5IHJldmVydCB0aGUgY29uZGl0aW9uCitpbiBncm9fcmVzZXRfb2Zmc2V0KCkgdG8gYWxsb3cgc2ticyBmcm9tIFs0XSBnbyB0aHJvdWdoIHRoZSAnZmFzdCcKK3BhdGgganVzdCBsaWtlIGluIGNhc2UgWzFdLgorCitUaGlzIHdhcyB0ZXN0ZWQgb24gYSA2MDAgTUh6IE1JUFMgQ1BVIGFuZCBhIGN1c3RvbSBkcml2ZXIgYW5kIHRoaXMKK3BhdGNoIGdhdmUgYm9vc3RzIHVwIHRvIDQwIE1icHMgdG8gbWV0aG9kIFs0XSBpbiBib3RoIGRpcmVjdGlvbnMKK2NvbXBhcmluZyB0byBuZXQtbmV4dCwgd2hpY2ggbWFkZSBvdmVyYWxsIHBlcmZvcm1hbmNlIHJlbGF0aXZlbHkKK2Nsb3NlIHRvIFsxXSAod2l0aG91dCBpdCwgWzRdIGlzIHRoZSBzbG93ZXN0KS4KKwordjI6CistIEFkZCBtb3JlIHJlZmVyZW5jZXMgYW5kIGV4cGxhbmF0aW9ucyB0byBjb21taXQgbWVzc2FnZQorLSBGaXggc29tZSB0eXBvcyBpYmlkCistIE5vIGZ1bmN0aW9uYWwgY2hhbmdlcworCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgTG9iYWtpbiA8YWxvYmFraW5AZGxpbmsucnU+CitTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CistLS0KKworLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrKyBiL25ldC9jb3JlL2Rldi5jCitAQCAtNTQ3NSw4ICs1NDc1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHNrYl9ncm9fcmVzZXRfb2Zmc2V0KAorIAlOQVBJX0dST19DQihza2IpLT5mcmFnMCA9IE5VTEw7CisgCU5BUElfR1JPX0NCKHNrYiktPmZyYWcwX2xlbiA9IDA7CisgCistCWlmIChza2JfbWFjX2hlYWRlcihza2IpID09IHNrYl90YWlsX3BvaW50ZXIoc2tiKSAmJgorLQkgICAgcGluZm8tPm5yX2ZyYWdzICYmCisrCWlmICghc2tiX2hlYWRsZW4oc2tiKSAmJiBwaW5mby0+bnJfZnJhZ3MgJiYKKyAJICAgICFQYWdlSGlnaE1lbShza2JfZnJhZ19wYWdlKGZyYWcwKSkgJiYKKyAJICAgICghTkVUX0lQX0FMSUdOIHx8ICEoKHNrYl9mcmFnX29mZihmcmFnMCkgKyBuaG9mZikgJiAzKSkpIHsKKyAJCU5BUElfR1JPX0NCKHNrYiktPmZyYWcwID0gc2tiX2ZyYWdfYWRkcmVzcyhmcmFnMCk7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzE2LXY1LjUtbmV0LXNmcC1tb3ZlLWZ3bm9kZS1wYXJzaW5nLWludG8tc2ZwLWJ1cy1sYXllci5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83MTYtdjUuNS1uZXQtc2ZwLW1vdmUtZndub2RlLXBhcnNpbmctaW50by1zZnAtYnVzLWxheWVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYzlmYTUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzE2LXY1LjUtbmV0LXNmcC1tb3ZlLWZ3bm9kZS1wYXJzaW5nLWludG8tc2ZwLWJ1cy1sYXllci5wYXRjaApAQCAtMCwwICsxLDE4OSBAQAorRnJvbSA0MDU0OTU1ZjBkYTA4YzgxZDQyMjIwY2I0NDU4MjBkNDc0ZjFhYzkyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KK0RhdGU6IFNhdCwgMTQgU2VwIDIwMTkgMTQ6MjE6MjIgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCA2MTQvNjYwXSBuZXQ6IHNmcDogbW92ZSBmd25vZGUgcGFyc2luZyBpbnRvIHNmcC1idXMgbGF5ZXIKKworUmF0aGVyIHRoYW4gcGFyc2luZyB0aGUgc2ZwIGZpcm13YXJlIG5vZGUgaW4gcGh5bGluaywgcGFyc2UgaXQgaW4gdGhlCitzZnAtYnVzIGNvZGUsIHNvIHdlIGNhbiByZS11c2UgdGhpcyBjb2RlIGZvciBQSFlzIHdpdGhvdXQgaGF2aW5nIHRvCitkdXBsaWNhdGUgdGhlIHBhcnNpbmcuCisKK1NpZ25lZC1vZmYtYnk6IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CistLS0KKyBkcml2ZXJzL25ldC9waHkvcGh5bGluay5jIHwgMjEgKysrKy0tLS0tLS0tLQorIGRyaXZlcnMvbmV0L3BoeS9zZnAtYnVzLmMgfCA2NSArKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0KKyBpbmNsdWRlL2xpbnV4L3NmcC5oICAgICAgIHwgMTAgKysrLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1MyBpbnNlcnRpb25zKCspLCA0MyBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYworKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYworQEAgLTU2NSwzMSArNTY1LDE3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyBzZnAKKyBzdGF0aWMgaW50IHBoeWxpbmtfcmVnaXN0ZXJfc2ZwKHN0cnVjdCBwaHlsaW5rICpwbCwKKyAJCQkJc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSkKKyB7CistCXN0cnVjdCBmd25vZGVfcmVmZXJlbmNlX2FyZ3MgcmVmOworKwlzdHJ1Y3Qgc2ZwX2J1cyAqYnVzOworIAlpbnQgcmV0OworIAorLQlpZiAoIWZ3bm9kZSkKKy0JCXJldHVybiAwOworLQorLQlyZXQgPSBmd25vZGVfcHJvcGVydHlfZ2V0X3JlZmVyZW5jZV9hcmdzKGZ3bm9kZSwgInNmcCIsIE5VTEwsCistCQkJCQkJIDAsIDAsICZyZWYpOworLQlpZiAocmV0IDwgMCkgeworLQkJaWYgKHJldCA9PSAtRU5PRU5UKQorLQkJCXJldHVybiAwOworLQorLQkJcGh5bGlua19lcnIocGwsICJ1bmFibGUgdG8gcGFyc2UgXCJzZnBcIiBub2RlOiAlZFxuIiwKKy0JCQkgICAgcmV0KTsKKysJYnVzID0gc2ZwX3JlZ2lzdGVyX3Vwc3RyZWFtX25vZGUoZndub2RlLCBwbCwgJnNmcF9waHlsaW5rX29wcyk7CisrCWlmIChJU19FUlIoYnVzKSkgeworKwkJcmV0ID0gUFRSX0VSUihidXMpOworKwkJcGh5bGlua19lcnIocGwsICJ1bmFibGUgdG8gYXR0YWNoIFNGUCBidXM6ICVkXG4iLCByZXQpOworIAkJcmV0dXJuIHJldDsKKyAJfQorIAorLQlpZiAoIWZ3bm9kZV9kZXZpY2VfaXNfYXZhaWxhYmxlKHJlZi5md25vZGUpKSB7CistCQlmd25vZGVfaGFuZGxlX3B1dChyZWYuZndub2RlKTsKKy0JCXJldHVybiAwOworLQl9CistCistCXBsLT5zZnBfYnVzID0gc2ZwX3JlZ2lzdGVyX3Vwc3RyZWFtKHJlZi5md25vZGUsIHBsLCAmc2ZwX3BoeWxpbmtfb3BzKTsKKy0JaWYgKCFwbC0+c2ZwX2J1cykKKy0JCXJldHVybiAtRU5PTUVNOworKwlwbC0+c2ZwX2J1cyA9IGJ1czsKKyAKKyAJcmV0dXJuIDA7CisgfQorLS0tIGEvZHJpdmVycy9uZXQvcGh5L3NmcC1idXMuYworKysrIGIvZHJpdmVycy9uZXQvcGh5L3NmcC1idXMuYworQEAgLTQsNiArNCw3IEBACisgI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyAjaW5jbHVkZSA8bGludXgvcGh5bGluay5oPgorKyNpbmNsdWRlIDxsaW51eC9wcm9wZXJ0eS5oPgorICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKyAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorIAorQEAgLTUyMCw0NSArNTIxLDY4IEBAIHN0YXRpYyB2b2lkIHNmcF91cHN0cmVhbV9jbGVhcihzdHJ1Y3Qgc2YKKyB9CisgCisgLyoqCistICogc2ZwX3JlZ2lzdGVyX3Vwc3RyZWFtKCkgLSBSZWdpc3RlciB0aGUgbmVpZ2hib3VyaW5nIGRldmljZQorLSAqIEBmd25vZGU6IGZpcm13YXJlIG5vZGUgZm9yIHRoZSBTRlAgYnVzCisrICogc2ZwX3JlZ2lzdGVyX3Vwc3RyZWFtX25vZGUoKSAtIHBhcnNlIGFuZCByZWdpc3RlciB0aGUgbmVpZ2hib3VyaW5nIGRldmljZQorKyAqIEBmd25vZGU6IGZpcm13YXJlIG5vZGUgZm9yIHRoZSBwYXJlbnQgZGV2aWNlIChNQUMgb3IgUEhZKQorICAqIEB1cHN0cmVhbTogdGhlIHVwc3RyZWFtIHByaXZhdGUgZGF0YQorICAqIEBvcHM6IHRoZSB1cHN0cmVhbSdzICZzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcworICAqCistICogUmVnaXN0ZXIgdGhlIHVwc3RyZWFtIGRldmljZSAoZWcsIFBIWSkgd2l0aCB0aGUgU0ZQIGJ1cy4gTUFDIGRyaXZlcnMKKy0gKiBzaG91bGQgdXNlIHBoeWxpbmssIHdoaWNoIHdpbGwgY2FsbCB0aGlzIGZ1bmN0aW9uIGZvciB0aGVtLiBSZXR1cm5zCistICogYSBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgJnN0cnVjdCBzZnBfYnVzLgorKyAqIFBhcnNlIHRoZSBwYXJlbnQgZGV2aWNlJ3MgZmlybXdhcmUgbm9kZSBmb3IgYSBTRlAgYnVzLCBhbmQgcmVnaXN0ZXIgdGhlCisrICogU0ZQIGJ1cyB1c2luZyBzZnBfcmVnaXN0ZXJfdXBzdHJlYW0oKS4KKyAgKgorLSAqIE9uIGVycm9yLCByZXR1cm5zICVOVUxMLgorKyAqIFJldHVybnM6IG9uIHN1Y2Nlc3MsIGEgcG9pbnRlciB0byB0aGUgc2ZwX2J1cyBzdHJ1Y3R1cmUsCisrICoJICAgICVOVUxMIGlmIG5vIFNGUCBpcyBzcGVjaWZpZWQsCisrICogCSAgICBvbiBmYWlsdXJlLCBhbiBlcnJvciBwb2ludGVyIHZhbHVlOgorKyAqIAkJY29ycmVzcG9uZGluZyB0byB0aGUgZXJyb3JzIGRldGFpbGVkIGZvcgorKyAqIAkJZndub2RlX3Byb3BlcnR5X2dldF9yZWZlcmVuY2VfYXJncygpLgorKyAqIAkgICAgICAgICUtRU5PTUVNIGlmIHdlIGZhaWxlZCB0byBhbGxvY2F0ZSB0aGUgYnVzLgorKyAqCQlhbiBlcnJvciBmcm9tIHRoZSB1cHN0cmVhbSdzIGNvbm5lY3RfcGh5KCkgbWV0aG9kLgorICAqLworLXN0cnVjdCBzZnBfYnVzICpzZnBfcmVnaXN0ZXJfdXBzdHJlYW0oc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSwKKy0JCQkJICAgICAgdm9pZCAqdXBzdHJlYW0sCistCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzICpvcHMpCisteworLQlzdHJ1Y3Qgc2ZwX2J1cyAqYnVzID0gc2ZwX2J1c19nZXQoZndub2RlKTsKKy0JaW50IHJldCA9IDA7CistCistCWlmIChidXMpIHsKKy0JCXJ0bmxfbG9jaygpOworLQkJYnVzLT51cHN0cmVhbV9vcHMgPSBvcHM7CistCQlidXMtPnVwc3RyZWFtID0gdXBzdHJlYW07Cisrc3RydWN0IHNmcF9idXMgKnNmcF9yZWdpc3Rlcl91cHN0cmVhbV9ub2RlKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsCisrCQkJCQkgICB2b2lkICp1cHN0cmVhbSwKKysJCQkJCSAgIGNvbnN0IHN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzICpvcHMpCisreworKwlzdHJ1Y3QgZndub2RlX3JlZmVyZW5jZV9hcmdzIHJlZjsKKysJc3RydWN0IHNmcF9idXMgKmJ1czsKKysJaW50IHJldDsKKyAKKy0JCWlmIChidXMtPnNmcCkgeworLQkJCXJldCA9IHNmcF9yZWdpc3Rlcl9idXMoYnVzKTsKKy0JCQlpZiAocmV0KQorLQkJCQlzZnBfdXBzdHJlYW1fY2xlYXIoYnVzKTsKKy0JCX0KKy0JCXJ0bmxfdW5sb2NrKCk7CisrCXJldCA9IGZ3bm9kZV9wcm9wZXJ0eV9nZXRfcmVmZXJlbmNlX2FyZ3MoZndub2RlLCAic2ZwIiwgTlVMTCwKKysJCQkJCQkgMCwgMCwgJnJlZik7CisrCWlmIChyZXQgPT0gLUVOT0VOVCkKKysJCXJldHVybiBOVUxMOworKwllbHNlIGlmIChyZXQgPCAwKQorKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKysKKysJaWYgKCFmd25vZGVfZGV2aWNlX2lzX2F2YWlsYWJsZShyZWYuZndub2RlKSkgeworKwkJZndub2RlX2hhbmRsZV9wdXQocmVmLmZ3bm9kZSk7CisrCQlyZXR1cm4gTlVMTDsKKysJfQorKworKwlidXMgPSBzZnBfYnVzX2dldChyZWYuZndub2RlKTsKKysJZndub2RlX2hhbmRsZV9wdXQocmVmLmZ3bm9kZSk7CisrCWlmICghYnVzKQorKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisrCisrCXJ0bmxfbG9jaygpOworKwlidXMtPnVwc3RyZWFtX29wcyA9IG9wczsKKysJYnVzLT51cHN0cmVhbSA9IHVwc3RyZWFtOworKworKwlpZiAoYnVzLT5zZnApIHsKKysJCXJldCA9IHNmcF9yZWdpc3Rlcl9idXMoYnVzKTsKKysJCWlmIChyZXQpCisrCQkJc2ZwX3Vwc3RyZWFtX2NsZWFyKGJ1cyk7CisrCX0gZWxzZSB7CisrCQlyZXQgPSAwOworIAl9CisrCXJ0bmxfdW5sb2NrKCk7CisgCisgCWlmIChyZXQpIHsKKyAJCXNmcF9idXNfcHV0KGJ1cyk7CistCQlidXMgPSBOVUxMOworKwkJYnVzID0gRVJSX1BUUihyZXQpOworIAl9CisgCisgCXJldHVybiBidXM7CisgfQorLUVYUE9SVF9TWU1CT0xfR1BMKHNmcF9yZWdpc3Rlcl91cHN0cmVhbSk7CisrRVhQT1JUX1NZTUJPTF9HUEwoc2ZwX3JlZ2lzdGVyX3Vwc3RyZWFtX25vZGUpOworIAorIC8qKgorICAqIHNmcF91bnJlZ2lzdGVyX3Vwc3RyZWFtKCkgLSBVbnJlZ2lzdGVyIHNmcCBidXMKKy0tLSBhL2luY2x1ZGUvbGludXgvc2ZwLmgKKysrKyBiL2luY2x1ZGUvbGludXgvc2ZwLmgKK0BAIC01MDgsOSArNTA4LDkgQEAgaW50IHNmcF9nZXRfbW9kdWxlX2VlcHJvbShzdHJ1Y3Qgc2ZwX2J1cworIAkJCSAgdTggKmRhdGEpOworIHZvaWQgc2ZwX3Vwc3RyZWFtX3N0YXJ0KHN0cnVjdCBzZnBfYnVzICpidXMpOworIHZvaWQgc2ZwX3Vwc3RyZWFtX3N0b3Aoc3RydWN0IHNmcF9idXMgKmJ1cyk7Cistc3RydWN0IHNmcF9idXMgKnNmcF9yZWdpc3Rlcl91cHN0cmVhbShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLAorLQkJCQkgICAgICB2b2lkICp1cHN0cmVhbSwKKy0JCQkJICAgICAgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgKm9wcyk7Cisrc3RydWN0IHNmcF9idXMgKnNmcF9yZWdpc3Rlcl91cHN0cmVhbV9ub2RlKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsCisrCQkJCQkgICB2b2lkICp1cHN0cmVhbSwKKysJCQkJCSAgIGNvbnN0IHN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzICpvcHMpOworIHZvaWQgc2ZwX3VucmVnaXN0ZXJfdXBzdHJlYW0oc3RydWN0IHNmcF9idXMgKmJ1cyk7CisgI2Vsc2UKKyBzdGF0aWMgaW5saW5lIGludCBzZnBfcGFyc2VfcG9ydChzdHJ1Y3Qgc2ZwX2J1cyAqYnVzLAorQEAgLTU1MywxMSArNTUzLDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZnBfdXBzdHJlYW1fc3RvcChzdHIKKyB7CisgfQorIAorLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNmcF9idXMgKnNmcF9yZWdpc3Rlcl91cHN0cmVhbSgKKytzdGF0aWMgaW5saW5lIHN0cnVjdCBzZnBfYnVzICpzZnBfcmVnaXN0ZXJfdXBzdHJlYW1fbm9kZSgKKyAJc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSwgdm9pZCAqdXBzdHJlYW0sCisgCWNvbnN0IHN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzICpvcHMpCisgeworLQlyZXR1cm4gKHN0cnVjdCBzZnBfYnVzICopLTE7CisrCXJldHVybiBOVUxMOworIH0KKyAKKyBzdGF0aWMgaW5saW5lIHZvaWQgc2ZwX3VucmVnaXN0ZXJfdXBzdHJlYW0oc3RydWN0IHNmcF9idXMgKmJ1cykKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83MTctdjUuNS1uZXQtc2ZwLXJld29yay11cHN0cmVhbS1pbnRlcmZhY2UucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzE3LXY1LjUtbmV0LXNmcC1yZXdvcmstdXBzdHJlYW0taW50ZXJmYWNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwN2I5ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzE3LXY1LjUtbmV0LXNmcC1yZXdvcmstdXBzdHJlYW0taW50ZXJmYWNlLnBhdGNoCkBAIC0wLDAgKzEsMjU0IEBACitGcm9tIDg2M2I1YjY5NDFmOWY0M2I5MjQzOTNiNmJhMmIzNjY0N2U3ZGVlNDIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorRGF0ZTogVGh1LCA3IE5vdiAyMDE5IDE3OjA2OjA4ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggNjE1LzY2MF0gbmV0OiBzZnA6IHJld29yayB1cHN0cmVhbSBpbnRlcmZhY2UKKworVGhlIGN1cnJlbnQgdXBzdHJlYW0gaW50ZXJmYWNlIGlzIGFuIGFsbC1vci1ub3RoaW5nLCB3aGljaCBpcworc3ViLW9wdGltYWwgZm9yIGZ1dHVyZSBjaGFuZ2VzLCBhcyBpdCBkb2Vzbid0IGFsbG93IHRoZSB1cHN0cmVhbSBkcml2ZXIKK3RvIHByZXBhcmUgZm9yIHRoZSBTRlAgbW9kdWxlIGJlY29taW5nIGF2YWlsYWJsZSwgYXMgaXQgaXMgYXQgYm9vdC4KKworU3dpdGNoIHRvIGEgZmluZC1zZnAtYnVzLCBhZGQtdXBzdHJlYW0sIGRlbC11cHN0cmVhbSwgcHV0LXNmcC1idXMKK2ludGVyZmFjZSBzdHJ1Y3R1cmUgaW5zdGVhZCwgd2hpY2ggYWxsb3dzIHRoZSB1cHN0cmVhbSBkcml2ZXIgdG8KK3ByZXBhcmUgZm9yIGEgbW9kdWxlIGJlaW5nIGF2YWlsYWJsZSBhcyBzb29uIGFzIGFkZC11cHN0cmVhbSBpcyBjYWxsZWQuCisKK1NpZ25lZC1vZmYtYnk6IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CistLS0KKyBkcml2ZXJzL25ldC9waHkvcGh5bGluay5jIHwgMTAgKysrLS0KKyBkcml2ZXJzL25ldC9waHkvc2ZwLWJ1cy5jIHwgOTIgKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tCisgaW5jbHVkZS9saW51eC9zZnAuaCAgICAgICB8IDI1ICsrKysrKystLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA4OCBpbnNlcnRpb25zKCspLCAzOSBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYworKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYworQEAgLTU2OCw3ICs1NjgsNyBAQCBzdGF0aWMgaW50IHBoeWxpbmtfcmVnaXN0ZXJfc2ZwKHN0cnVjdCBwCisgCXN0cnVjdCBzZnBfYnVzICpidXM7CisgCWludCByZXQ7CisgCistCWJ1cyA9IHNmcF9yZWdpc3Rlcl91cHN0cmVhbV9ub2RlKGZ3bm9kZSwgcGwsICZzZnBfcGh5bGlua19vcHMpOworKwlidXMgPSBzZnBfYnVzX2ZpbmRfZndub2RlKGZ3bm9kZSk7CisgCWlmIChJU19FUlIoYnVzKSkgeworIAkJcmV0ID0gUFRSX0VSUihidXMpOworIAkJcGh5bGlua19lcnIocGwsICJ1bmFibGUgdG8gYXR0YWNoIFNGUCBidXM6ICVkXG4iLCByZXQpOworQEAgLTU3Nyw3ICs1NzcsMTAgQEAgc3RhdGljIGludCBwaHlsaW5rX3JlZ2lzdGVyX3NmcChzdHJ1Y3QgcAorIAorIAlwbC0+c2ZwX2J1cyA9IGJ1czsKKyAKKy0JcmV0dXJuIDA7CisrCXJldCA9IHNmcF9idXNfYWRkX3Vwc3RyZWFtKGJ1cywgcGwsICZzZnBfcGh5bGlua19vcHMpOworKwlzZnBfYnVzX3B1dChidXMpOworKworKwlyZXR1cm4gcmV0OworIH0KKyAKKyAvKioKK0BAIC02NzUsOCArNjc4LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19jcmVhdGUpOworICAqLworIHZvaWQgcGh5bGlua19kZXN0cm95KHN0cnVjdCBwaHlsaW5rICpwbCkKKyB7CistCWlmIChwbC0+c2ZwX2J1cykKKy0JCXNmcF91bnJlZ2lzdGVyX3Vwc3RyZWFtKHBsLT5zZnBfYnVzKTsKKysJc2ZwX2J1c19kZWxfdXBzdHJlYW0ocGwtPnNmcF9idXMpOworIAlpZiAocGwtPmxpbmtfZ3BpbykKKyAJCWdwaW9kX3B1dChwbC0+bGlua19ncGlvKTsKKyAKKy0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAtYnVzLmMKKysrKyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAtYnVzLmMKK0BAIC00MDQsMTAgKzQwNCwxOSBAQCBzdGF0aWMgdm9pZCBzZnBfYnVzX3JlbGVhc2Uoc3RydWN0IGtyZWYKKyAJa2ZyZWUoYnVzKTsKKyB9CisgCistc3RhdGljIHZvaWQgc2ZwX2J1c19wdXQoc3RydWN0IHNmcF9idXMgKmJ1cykKKysvKioKKysgKiBzZnBfYnVzX3B1dCgpIC0gcHV0IGEgcmVmZXJlbmNlIG9uIHRoZSAmc3RydWN0IHNmcF9idXMKKysgKiBidXM6IHRoZSAmc3RydWN0IHNmcF9idXMgZm91bmQgdmlhIHNmcF9idXNfZmluZF9md25vZGUoKQorKyAqCisrICogUHV0IGEgcmVmZXJlbmNlIG9uIHRoZSAmc3RydWN0IHNmcF9idXMgYW5kIGZyZWUgdGhlIHVuZGVybHlpbmcgc3RydWN0dXJlCisrICogaWYgdGhpcyB3YXMgdGhlIGxhc3QgcmVmZXJlbmNlLgorKyAqLworK3ZvaWQgc2ZwX2J1c19wdXQoc3RydWN0IHNmcF9idXMgKmJ1cykKKyB7CistCWtyZWZfcHV0X211dGV4KCZidXMtPmtyZWYsIHNmcF9idXNfcmVsZWFzZSwgJnNmcF9tdXRleCk7CisrCWlmIChidXMpCisrCQlrcmVmX3B1dF9tdXRleCgmYnVzLT5rcmVmLCBzZnBfYnVzX3JlbGVhc2UsICZzZnBfbXV0ZXgpOworIH0KKytFWFBPUlRfU1lNQk9MX0dQTChzZnBfYnVzX3B1dCk7CisgCisgc3RhdGljIGludCBzZnBfcmVnaXN0ZXJfYnVzKHN0cnVjdCBzZnBfYnVzICpidXMpCisgeworQEAgLTQyMywxMSArNDMyLDExIEBAIHN0YXRpYyBpbnQgc2ZwX3JlZ2lzdGVyX2J1cyhzdHJ1Y3Qgc2ZwX2IKKyAJCQkJcmV0dXJuIHJldDsKKyAJCX0KKyAJfQorKwlidXMtPnJlZ2lzdGVyZWQgPSB0cnVlOworIAlidXMtPnNvY2tldF9vcHMtPmF0dGFjaChidXMtPnNmcCk7CisgCWlmIChidXMtPnN0YXJ0ZWQpCisgCQlidXMtPnNvY2tldF9vcHMtPnN0YXJ0KGJ1cy0+c2ZwKTsKKyAJYnVzLT51cHN0cmVhbV9vcHMtPmF0dGFjaChidXMtPnVwc3RyZWFtLCBidXMpOworLQlidXMtPnJlZ2lzdGVyZWQgPSB0cnVlOworIAlyZXR1cm4gMDsKKyB9CisgCitAQCAtNTIxLDEzICs1MzAsMTIgQEAgc3RhdGljIHZvaWQgc2ZwX3Vwc3RyZWFtX2NsZWFyKHN0cnVjdCBzZgorIH0KKyAKKyAvKioKKy0gKiBzZnBfcmVnaXN0ZXJfdXBzdHJlYW1fbm9kZSgpIC0gcGFyc2UgYW5kIHJlZ2lzdGVyIHRoZSBuZWlnaGJvdXJpbmcgZGV2aWNlCisrICogc2ZwX2J1c19maW5kX2Z3bm9kZSgpIC0gcGFyc2UgYW5kIGxvY2F0ZSB0aGUgU0ZQIGJ1cyBmcm9tIGZ3bm9kZQorICAqIEBmd25vZGU6IGZpcm13YXJlIG5vZGUgZm9yIHRoZSBwYXJlbnQgZGV2aWNlIChNQUMgb3IgUEhZKQorLSAqIEB1cHN0cmVhbTogdGhlIHVwc3RyZWFtIHByaXZhdGUgZGF0YQorLSAqIEBvcHM6IHRoZSB1cHN0cmVhbSdzICZzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcworICAqCistICogUGFyc2UgdGhlIHBhcmVudCBkZXZpY2UncyBmaXJtd2FyZSBub2RlIGZvciBhIFNGUCBidXMsIGFuZCByZWdpc3RlciB0aGUKKy0gKiBTRlAgYnVzIHVzaW5nIHNmcF9yZWdpc3Rlcl91cHN0cmVhbSgpLgorKyAqIFBhcnNlIHRoZSBwYXJlbnQgZGV2aWNlJ3MgZmlybXdhcmUgbm9kZSBmb3IgYSBTRlAgYnVzLCBhbmQgbG9jYXRlCisrICogdGhlIHNmcF9idXMgc3RydWN0dXJlLCBpbmNyZW1lbnRpbmcgaXRzIHJlZmVyZW5jZSBjb3VudC4gIFRoaXMgbXVzdAorKyAqIGJlIHB1dCB2aWEgc2ZwX2J1c19wdXQoKSB3aGVuIGRvbmUuCisgICoKKyAgKiBSZXR1cm5zOiBvbiBzdWNjZXNzLCBhIHBvaW50ZXIgdG8gdGhlIHNmcF9idXMgc3RydWN0dXJlLAorICAqCSAgICAlTlVMTCBpZiBubyBTRlAgaXMgc3BlY2lmaWVkLAorQEAgLTUzNyw5ICs1NDUsNyBAQCBzdGF0aWMgdm9pZCBzZnBfdXBzdHJlYW1fY2xlYXIoc3RydWN0IHNmCisgICogCSAgICAgICAgJS1FTk9NRU0gaWYgd2UgZmFpbGVkIHRvIGFsbG9jYXRlIHRoZSBidXMuCisgICoJCWFuIGVycm9yIGZyb20gdGhlIHVwc3RyZWFtJ3MgY29ubmVjdF9waHkoKSBtZXRob2QuCisgICovCistc3RydWN0IHNmcF9idXMgKnNmcF9yZWdpc3Rlcl91cHN0cmVhbV9ub2RlKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsCistCQkJCQkgICB2b2lkICp1cHN0cmVhbSwKKy0JCQkJCSAgIGNvbnN0IHN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzICpvcHMpCisrc3RydWN0IHNmcF9idXMgKnNmcF9idXNfZmluZF9md25vZGUoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSkKKyB7CisgCXN0cnVjdCBmd25vZGVfcmVmZXJlbmNlX2FyZ3MgcmVmOworIAlzdHJ1Y3Qgc2ZwX2J1cyAqYnVzOworQEAgLTU2Miw3ICs1NjgsMzkgQEAgc3RydWN0IHNmcF9idXMgKnNmcF9yZWdpc3Rlcl91cHN0cmVhbV9ubworIAlpZiAoIWJ1cykKKyAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworIAorKwlyZXR1cm4gYnVzOworK30KKytFWFBPUlRfU1lNQk9MX0dQTChzZnBfYnVzX2ZpbmRfZndub2RlKTsKKysKKysvKioKKysgKiBzZnBfYnVzX2FkZF91cHN0cmVhbSgpIC0gcGFyc2UgYW5kIHJlZ2lzdGVyIHRoZSBuZWlnaGJvdXJpbmcgZGV2aWNlCisrICogQGJ1czogdGhlICZzdHJ1Y3Qgc2ZwX2J1cyBmb3VuZCB2aWEgc2ZwX2J1c19maW5kX2Z3bm9kZSgpCisrICogQHVwc3RyZWFtOiB0aGUgdXBzdHJlYW0gcHJpdmF0ZSBkYXRhCisrICogQG9wczogdGhlIHVwc3RyZWFtJ3MgJnN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzCisrICoKKysgKiBBZGQgdXBzdHJlYW0gZHJpdmVyIGZvciB0aGUgU0ZQIGJ1cywgYW5kIGlmIHRoZSBidXMgaXMgY29tcGxldGUsIHJlZ2lzdGVyCisrICogdGhlIFNGUCBidXMgdXNpbmcgc2ZwX3JlZ2lzdGVyX3Vwc3RyZWFtKCkuICBUaGlzIHRha2VzIGEgcmVmZXJlbmNlIG9uIHRoZQorKyAqIGJ1cywgc28gaXQgaXMgc2FmZSB0byBwdXQgdGhlIGJ1cyBhZnRlciB0aGlzIGNhbGwuCisrICoKKysgKiBSZXR1cm5zOiBvbiBzdWNjZXNzLCBhIHBvaW50ZXIgdG8gdGhlIHNmcF9idXMgc3RydWN0dXJlLAorKyAqCSAgICAlTlVMTCBpZiBubyBTRlAgaXMgc3BlY2lmaWVkLAorKyAqIAkgICAgb24gZmFpbHVyZSwgYW4gZXJyb3IgcG9pbnRlciB2YWx1ZToKKysgKiAJCWNvcnJlc3BvbmRpbmcgdG8gdGhlIGVycm9ycyBkZXRhaWxlZCBmb3IKKysgKiAJCWZ3bm9kZV9wcm9wZXJ0eV9nZXRfcmVmZXJlbmNlX2FyZ3MoKS4KKysgKiAJICAgICAgICAlLUVOT01FTSBpZiB3ZSBmYWlsZWQgdG8gYWxsb2NhdGUgdGhlIGJ1cy4KKysgKgkJYW4gZXJyb3IgZnJvbSB0aGUgdXBzdHJlYW0ncyBjb25uZWN0X3BoeSgpIG1ldGhvZC4KKysgKi8KKytpbnQgc2ZwX2J1c19hZGRfdXBzdHJlYW0oc3RydWN0IHNmcF9idXMgKmJ1cywgdm9pZCAqdXBzdHJlYW0sCisrCQkJIGNvbnN0IHN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzICpvcHMpCisreworKwlpbnQgcmV0OworKworKwkvKiBJZiBubyBidXMsIHJldHVybiBzdWNjZXNzICovCisrCWlmICghYnVzKQorKwkJcmV0dXJuIDA7CisrCisgCXJ0bmxfbG9jaygpOworKwlrcmVmX2dldCgmYnVzLT5rcmVmKTsKKyAJYnVzLT51cHN0cmVhbV9vcHMgPSBvcHM7CisgCWJ1cy0+dXBzdHJlYW0gPSB1cHN0cmVhbTsKKyAKK0BAIC01NzUsMzMgKzYxMywzMyBAQCBzdHJ1Y3Qgc2ZwX2J1cyAqc2ZwX3JlZ2lzdGVyX3Vwc3RyZWFtX25vCisgCX0KKyAJcnRubF91bmxvY2soKTsKKyAKKy0JaWYgKHJldCkgeworKwlpZiAocmV0KQorIAkJc2ZwX2J1c19wdXQoYnVzKTsKKy0JCWJ1cyA9IEVSUl9QVFIocmV0KTsKKy0JfQorIAorLQlyZXR1cm4gYnVzOworKwlyZXR1cm4gcmV0OworIH0KKy1FWFBPUlRfU1lNQk9MX0dQTChzZnBfcmVnaXN0ZXJfdXBzdHJlYW1fbm9kZSk7CisrRVhQT1JUX1NZTUJPTF9HUEwoc2ZwX2J1c19hZGRfdXBzdHJlYW0pOworIAorIC8qKgorLSAqIHNmcF91bnJlZ2lzdGVyX3Vwc3RyZWFtKCkgLSBVbnJlZ2lzdGVyIHNmcCBidXMKKysgKiBzZnBfYnVzX2RlbF91cHN0cmVhbSgpIC0gRGVsZXRlIGEgc2ZwIGJ1cworICAqIEBidXM6IGEgcG9pbnRlciB0byB0aGUgJnN0cnVjdCBzZnBfYnVzIHN0cnVjdHVyZSBmb3IgdGhlIHNmcCBtb2R1bGUKKyAgKgorLSAqIFVucmVnaXN0ZXIgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgdXBzdHJlYW0gY29ubmVjdGlvbiBmb3IgdGhlIFNGUAorLSAqIG1vZHVsZS4gQGJ1cyBpcyByZXR1cm5lZCBmcm9tIHNmcF9yZWdpc3Rlcl91cHN0cmVhbSgpLgorKyAqIERlbGV0ZSBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCB1cHN0cmVhbSBjb25uZWN0aW9uIGZvciB0aGUgU0ZQCisrICogbW9kdWxlLiBAYnVzIHNob3VsZCBoYXZlIGJlZW4gYWRkZWQgYnkgc2ZwX2J1c19hZGRfdXBzdHJlYW0oKS4KKyAgKi8KKy12b2lkIHNmcF91bnJlZ2lzdGVyX3Vwc3RyZWFtKHN0cnVjdCBzZnBfYnVzICpidXMpCisrdm9pZCBzZnBfYnVzX2RlbF91cHN0cmVhbShzdHJ1Y3Qgc2ZwX2J1cyAqYnVzKQorIHsKKy0JcnRubF9sb2NrKCk7CistCWlmIChidXMtPnNmcCkKKy0JCXNmcF91bnJlZ2lzdGVyX2J1cyhidXMpOworLQlzZnBfdXBzdHJlYW1fY2xlYXIoYnVzKTsKKy0JcnRubF91bmxvY2soKTsKKysJaWYgKGJ1cykgeworKwkJcnRubF9sb2NrKCk7CisrCQlpZiAoYnVzLT5zZnApCisrCQkJc2ZwX3VucmVnaXN0ZXJfYnVzKGJ1cyk7CisrCQlzZnBfdXBzdHJlYW1fY2xlYXIoYnVzKTsKKysJCXJ0bmxfdW5sb2NrKCk7CisgCistCXNmcF9idXNfcHV0KGJ1cyk7CisrCQlzZnBfYnVzX3B1dChidXMpOworKwl9CisgfQorLUVYUE9SVF9TWU1CT0xfR1BMKHNmcF91bnJlZ2lzdGVyX3Vwc3RyZWFtKTsKKytFWFBPUlRfU1lNQk9MX0dQTChzZnBfYnVzX2RlbF91cHN0cmVhbSk7CisgCisgLyogU29ja2V0IGRyaXZlciBlbnRyeSBwb2ludHMgKi8KKyBpbnQgc2ZwX2FkZF9waHkoc3RydWN0IHNmcF9idXMgKmJ1cywgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKKy0tLSBhL2luY2x1ZGUvbGludXgvc2ZwLmgKKysrKyBiL2luY2x1ZGUvbGludXgvc2ZwLmgKK0BAIC01MDgsMTAgKzUwOCwxMSBAQCBpbnQgc2ZwX2dldF9tb2R1bGVfZWVwcm9tKHN0cnVjdCBzZnBfYnVzCisgCQkJICB1OCAqZGF0YSk7Cisgdm9pZCBzZnBfdXBzdHJlYW1fc3RhcnQoc3RydWN0IHNmcF9idXMgKmJ1cyk7Cisgdm9pZCBzZnBfdXBzdHJlYW1fc3RvcChzdHJ1Y3Qgc2ZwX2J1cyAqYnVzKTsKKy1zdHJ1Y3Qgc2ZwX2J1cyAqc2ZwX3JlZ2lzdGVyX3Vwc3RyZWFtX25vZGUoc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSwKKy0JCQkJCSAgIHZvaWQgKnVwc3RyZWFtLAorLQkJCQkJICAgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgKm9wcyk7Cistdm9pZCBzZnBfdW5yZWdpc3Rlcl91cHN0cmVhbShzdHJ1Y3Qgc2ZwX2J1cyAqYnVzKTsKKyt2b2lkIHNmcF9idXNfcHV0KHN0cnVjdCBzZnBfYnVzICpidXMpOworK3N0cnVjdCBzZnBfYnVzICpzZnBfYnVzX2ZpbmRfZndub2RlKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpOworK2ludCBzZnBfYnVzX2FkZF91cHN0cmVhbShzdHJ1Y3Qgc2ZwX2J1cyAqYnVzLCB2b2lkICp1cHN0cmVhbSwKKysJCQkgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgKm9wcyk7Cisrdm9pZCBzZnBfYnVzX2RlbF91cHN0cmVhbShzdHJ1Y3Qgc2ZwX2J1cyAqYnVzKTsKKyAjZWxzZQorIHN0YXRpYyBpbmxpbmUgaW50IHNmcF9wYXJzZV9wb3J0KHN0cnVjdCBzZnBfYnVzICpidXMsCisgCQkJCSBjb25zdCBzdHJ1Y3Qgc2ZwX2VlcHJvbV9pZCAqaWQsCitAQCAtNTUzLDE0ICs1NTQsMjIgQEAgc3RhdGljIGlubGluZSB2b2lkIHNmcF91cHN0cmVhbV9zdG9wKHN0cgorIHsKKyB9CisgCistc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2ZwX2J1cyAqc2ZwX3JlZ2lzdGVyX3Vwc3RyZWFtX25vZGUoCistCXN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsIHZvaWQgKnVwc3RyZWFtLAorLQljb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyAqb3BzKQorK3N0YXRpYyBpbmxpbmUgdm9pZCBzZnBfYnVzX3B1dChzdHJ1Y3Qgc2ZwX2J1cyAqYnVzKQorK3sKKyt9CisrCisrc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2ZwX2J1cyAqc2ZwX2J1c19maW5kX2Z3bm9kZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKQorIHsKKyAJcmV0dXJuIE5VTEw7CisgfQorIAorLXN0YXRpYyBpbmxpbmUgdm9pZCBzZnBfdW5yZWdpc3Rlcl91cHN0cmVhbShzdHJ1Y3Qgc2ZwX2J1cyAqYnVzKQorK3N0YXRpYyBpbnQgc2ZwX2J1c19hZGRfdXBzdHJlYW0oc3RydWN0IHNmcF9idXMgKmJ1cywgdm9pZCAqdXBzdHJlYW0sCisrCQkJCWNvbnN0IHN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzICpvcHMpCisreworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGlubGluZSB2b2lkIHNmcF9idXNfZGVsX3Vwc3RyZWFtKHN0cnVjdCBzZnBfYnVzICpidXMpCisgeworIH0KKyAjZW5kaWYKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83MTgtdjUuNS1uZXQtc2ZwLWZpeC1zZnBfYnVzX3B1dC1rZXJuZWwtZG9jdW1lbnRhdGlvbi5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83MTgtdjUuNS1uZXQtc2ZwLWZpeC1zZnBfYnVzX3B1dC1rZXJuZWwtZG9jdW1lbnRhdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2JmZDhhCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzcxOC12NS41LW5ldC1zZnAtZml4LXNmcF9idXNfcHV0LWtlcm5lbC1kb2N1bWVudGF0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK0Zyb20gZWE3YmZkODE5MjE4MjdkMzM0YzJhMjNiZDExZWYwZTRlMmFiYWZkMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CitEYXRlOiBTYXQsIDkgTm92IDIwMTkgMDg6MTM6NTAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCA2MTYvNjYwXSBuZXQ6IHNmcDogZml4IHNmcF9idXNfcHV0KCkga2VybmVsIGRvY3VtZW50YXRpb24KKworVGhlIGtidWlsZCB0ZXN0IHJvYm90IGZvdW5kIGEgcHJvYmxlbSB3aXRoIGh0bWxkb2NzIHdpdGggdGhlIHJlY2VudAorY2hhbmdlIHRvIHRoZSBTRlAgaW50ZXJmYWNlcy4gIEZpeCB0aGUga2VybmVsIGRvY3VtZW50YXRpb24gZm9yCitzZnBfYnVzX3B1dCgpIHdoaWNoIHdhcyBtaXNzaW5nIGFuICdAJyBiZWZvcmUgdGhlIGFyZ3VtZW50IG5hbWUKK2Rlc2NyaXB0aW9uLgorCitGaXhlczogNzI3YjM2NjhiNzMwICgibmV0OiBzZnA6IHJld29yayB1cHN0cmVhbSBpbnRlcmZhY2UiKQorU2lnbmVkLW9mZi1ieTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KKy0tLQorIGRyaXZlcnMvbmV0L3BoeS9zZnAtYnVzLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAtYnVzLmMKKysrKyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAtYnVzLmMKK0BAIC00MDYsNyArNDA2LDcgQEAgc3RhdGljIHZvaWQgc2ZwX2J1c19yZWxlYXNlKHN0cnVjdCBrcmVmCisgCisgLyoqCisgICogc2ZwX2J1c19wdXQoKSAtIHB1dCBhIHJlZmVyZW5jZSBvbiB0aGUgJnN0cnVjdCBzZnBfYnVzCistICogYnVzOiB0aGUgJnN0cnVjdCBzZnBfYnVzIGZvdW5kIHZpYSBzZnBfYnVzX2ZpbmRfZndub2RlKCkKKysgKiBAYnVzOiB0aGUgJnN0cnVjdCBzZnBfYnVzIGZvdW5kIHZpYSBzZnBfYnVzX2ZpbmRfZndub2RlKCkKKyAgKgorICAqIFB1dCBhIHJlZmVyZW5jZSBvbiB0aGUgJnN0cnVjdCBzZnBfYnVzIGFuZCBmcmVlIHRoZSB1bmRlcmx5aW5nIHN0cnVjdHVyZQorICAqIGlmIHRoaXMgd2FzIHRoZSBsYXN0IHJlZmVyZW5jZS4KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83MTktdjUuNS1uZXQtc2ZwLWZpeC1zZnBfYnVzX2FkZF91cHN0cmVhbS13YXJuaW5nLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzcxOS12NS41LW5ldC1zZnAtZml4LXNmcF9idXNfYWRkX3Vwc3RyZWFtLXdhcm5pbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUyODA0OQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83MTktdjUuNS1uZXQtc2ZwLWZpeC1zZnBfYnVzX2FkZF91cHN0cmVhbS13YXJuaW5nLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK0Zyb20gZjc2ZDg0Y2Q4NWY4YmQzZjA4MzQ5NWY3Y2E3MjM4MjJjYmE4YWJjOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CitEYXRlOiBNb24sIDExIE5vdiAyMDE5IDEwOjIzOjM1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggNjE3LzY2MF0gbmV0OiBzZnA6IGZpeCBzZnBfYnVzX2FkZF91cHN0cmVhbSgpIHdhcm5pbmcKKworV2hlbiBidWlsZGluZyB3aXRoIFNGUCBkaXNhYmxlZCwgdGhlIHN0dWIgZm9yIHNmcF9idXNfYWRkX3Vwc3RyZWFtKCkKK21pc3NlZCAiaW5saW5lIi4gIEFkZCBpdC4KKworRml4ZXM6IDcyN2IzNjY4YjczMCAoIm5ldDogc2ZwOiByZXdvcmsgdXBzdHJlYW0gaW50ZXJmYWNlIikKK1NpZ25lZC1vZmYtYnk6IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CistLS0KKyBpbmNsdWRlL2xpbnV4L3NmcC5oIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworLS0tIGEvaW5jbHVkZS9saW51eC9zZnAuaAorKysrIGIvaW5jbHVkZS9saW51eC9zZnAuaAorQEAgLTU2Myw4ICs1NjMsOCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBzZnBfYnVzICpzZnBfYnVzX2ZpCisgCXJldHVybiBOVUxMOworIH0KKyAKKy1zdGF0aWMgaW50IHNmcF9idXNfYWRkX3Vwc3RyZWFtKHN0cnVjdCBzZnBfYnVzICpidXMsIHZvaWQgKnVwc3RyZWFtLAorLQkJCQljb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyAqb3BzKQorK3N0YXRpYyBpbmxpbmUgaW50IHNmcF9idXNfYWRkX3Vwc3RyZWFtKHN0cnVjdCBzZnBfYnVzICpidXMsIHZvaWQgKnVwc3RyZWFtLAorKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgKm9wcykKKyB7CisgCXJldHVybiAwOworIH0KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83MjAtdjUuNS1uZXQtc2ZwLW1vdmUtc2ZwLXN1Yi1zdGF0ZS1tYWNoaW5lcy1pbnRvLXNlcGFyYXRlLWZ1LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzcyMC12NS41LW5ldC1zZnAtbW92ZS1zZnAtc3ViLXN0YXRlLW1hY2hpbmVzLWludG8tc2VwYXJhdGUtZnUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRjYTg1YgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83MjAtdjUuNS1uZXQtc2ZwLW1vdmUtc2ZwLXN1Yi1zdGF0ZS1tYWNoaW5lcy1pbnRvLXNlcGFyYXRlLWZ1LnBhdGNoCkBAIC0wLDAgKzEsMTI0IEBACitGcm9tIGI5ZDZlZDVjZGI2NzUzM2ZlZGE3ZjIyMWViMDZmMmY5ZjFmZjUwNDcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorRGF0ZTogRnJpLCAxMSBPY3QgMjAxOSAxOTozMzo1OCArMDEwMAorU3ViamVjdDogW1BBVENIIDYxOC82NjBdIG5ldDogc2ZwOiBtb3ZlIHNmcCBzdWItc3RhdGUgbWFjaGluZXMgaW50byBzZXBhcmF0ZQorIGZ1bmN0aW9ucworCitNb3ZlIHRoZSBTRlAgc3ViLXN0YXRlIG1hY2hpbmVzIG91dCBvZiB0aGUgbWFpbiBzdGF0ZSBtYWNoaW5lIGZ1bmN0aW9uLAoraW4gcHJlcGFyYXRpb24gZm9yIGl0IGRvaW5nIGEgYml0IG1vcmUgd2l0aCB0aGUgZGV2aWNlIHN0YXRlLiAgQnkgZG9pbmcKK3NvLCB3ZSBlbnN1cmUgdGhhdCBvdXIgZGVidWcgYWZ0ZXIgdGhlIG1haW4gc3RhdGUgbWFjaGluZSBpcyBhbHdheXMKK3ByaW50ZWQuCisKK1NpZ25lZC1vZmYtYnk6IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CistLS0KKyBkcml2ZXJzL25ldC9waHkvc2ZwLmMgfCA3NCArKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQzIGluc2VydGlvbnMoKyksIDMxIGRlbGV0aW9ucygtKQorCistLS0gYS9kcml2ZXJzL25ldC9waHkvc2ZwLmMKKysrKyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuYworQEAgLTE1NDQsMTkgKzE1NDQsMzQgQEAgc3RhdGljIHZvaWQgc2ZwX3NtX21vZF9yZW1vdmUoc3RydWN0IHNmcAorIAlkZXZfaW5mbyhzZnAtPmRldiwgIm1vZHVsZSByZW1vdmVkXG4iKTsKKyB9CisgCistc3RhdGljIHZvaWQgc2ZwX3NtX2V2ZW50KHN0cnVjdCBzZnAgKnNmcCwgdW5zaWduZWQgaW50IGV2ZW50KQorKy8qIFRoaXMgc3RhdGUgbWFjaGluZSB0cmFja3MgdGhlIG5ldGRldiB1cC9kb3duIHN0YXRlICovCisrc3RhdGljIHZvaWQgc2ZwX3NtX2RldmljZShzdHJ1Y3Qgc2ZwICpzZnAsIHVuc2lnbmVkIGludCBldmVudCkKKyB7CistCW11dGV4X2xvY2soJnNmcC0+c21fbXV0ZXgpOworKwlzd2l0Y2ggKHNmcC0+c21fZGV2X3N0YXRlKSB7CisrCWRlZmF1bHQ6CisrCQlpZiAoZXZlbnQgPT0gU0ZQX0VfREVWX1VQKQorKwkJCXNmcC0+c21fZGV2X3N0YXRlID0gU0ZQX0RFVl9VUDsKKysJCWJyZWFrOworIAorLQlkZXZfZGJnKHNmcC0+ZGV2LCAiU006IGVudGVyICVzOiVzOiVzIGV2ZW50ICVzXG4iLAorLQkJbW9kX3N0YXRlX3RvX3N0cihzZnAtPnNtX21vZF9zdGF0ZSksCistCQlkZXZfc3RhdGVfdG9fc3RyKHNmcC0+c21fZGV2X3N0YXRlKSwKKy0JCXNtX3N0YXRlX3RvX3N0cihzZnAtPnNtX3N0YXRlKSwKKy0JCWV2ZW50X3RvX3N0cihldmVudCkpOworKwljYXNlIFNGUF9ERVZfVVA6CisrCQlpZiAoZXZlbnQgPT0gU0ZQX0VfREVWX0RPV04pIHsKKysJCQkvKiBJZiB0aGUgbW9kdWxlIGhhcyBhIFBIWSwgYXZvaWQgcmFpc2luZyBUWCBkaXNhYmxlCisrCQkJICogYXMgdGhpcyByZXNldHMgdGhlIFBIWS4gT3RoZXJ3aXNlLCByYWlzZSBpdCB0bworKwkJCSAqIHR1cm4gdGhlIGxhc2VyIG9mZi4KKysJCQkgKi8KKysJCQlpZiAoIXNmcC0+bW9kX3BoeSkKKysJCQkJc2ZwX21vZHVsZV90eF9kaXNhYmxlKHNmcCk7CisrCQkJc2ZwLT5zbV9kZXZfc3RhdGUgPSBTRlBfREVWX0RPV047CisrCQl9CisrCQlicmVhazsKKysJfQorK30KKyAKKy0JLyogVGhpcyBzdGF0ZSBtYWNoaW5lIHRyYWNrcyB0aGUgaW5zZXJ0L3JlbW92ZSBzdGF0ZSBvZgorLQkgKiB0aGUgbW9kdWxlLCBhbmQgaGFuZGxlcyBwcm9iaW5nIHRoZSBvbi1ib2FyZCBFRVBST00uCistCSAqLworKy8qIFRoaXMgc3RhdGUgbWFjaGluZSB0cmFja3MgdGhlIGluc2VydC9yZW1vdmUgc3RhdGUgb2YKKysgKiB0aGUgbW9kdWxlLCBhbmQgaGFuZGxlcyBwcm9iaW5nIHRoZSBvbi1ib2FyZCBFRVBST00uCisrICovCisrc3RhdGljIHZvaWQgc2ZwX3NtX21vZHVsZShzdHJ1Y3Qgc2ZwICpzZnAsIHVuc2lnbmVkIGludCBldmVudCkKKyt7CisgCXN3aXRjaCAoc2ZwLT5zbV9tb2Rfc3RhdGUpIHsKKyAJZGVmYXVsdDoKKyAJCWlmIChldmVudCA9PSBTRlBfRV9JTlNFUlQgJiYgc2ZwLT5hdHRhY2hlZCkgeworQEAgLTE1OTYsMjcgKzE2MTEsMTAgQEAgc3RhdGljIHZvaWQgc2ZwX3NtX2V2ZW50KHN0cnVjdCBzZnAgKnNmcAorIAkJfQorIAkJYnJlYWs7CisgCX0KKyt9CisgCistCS8qIFRoaXMgc3RhdGUgbWFjaGluZSB0cmFja3MgdGhlIG5ldGRldiB1cC9kb3duIHN0YXRlICovCistCXN3aXRjaCAoc2ZwLT5zbV9kZXZfc3RhdGUpIHsKKy0JZGVmYXVsdDoKKy0JCWlmIChldmVudCA9PSBTRlBfRV9ERVZfVVApCistCQkJc2ZwLT5zbV9kZXZfc3RhdGUgPSBTRlBfREVWX1VQOworLQkJYnJlYWs7CistCistCWNhc2UgU0ZQX0RFVl9VUDoKKy0JCWlmIChldmVudCA9PSBTRlBfRV9ERVZfRE9XTikgeworLQkJCS8qIElmIHRoZSBtb2R1bGUgaGFzIGEgUEhZLCBhdm9pZCByYWlzaW5nIFRYIGRpc2FibGUKKy0JCQkgKiBhcyB0aGlzIHJlc2V0cyB0aGUgUEhZLiBPdGhlcndpc2UsIHJhaXNlIGl0IHRvCistCQkJICogdHVybiB0aGUgbGFzZXIgb2ZmLgorLQkJCSAqLworLQkJCWlmICghc2ZwLT5tb2RfcGh5KQorLQkJCQlzZnBfbW9kdWxlX3R4X2Rpc2FibGUoc2ZwKTsKKy0JCQlzZnAtPnNtX2Rldl9zdGF0ZSA9IFNGUF9ERVZfRE9XTjsKKy0JCX0KKy0JCWJyZWFrOworLQl9CistCisrc3RhdGljIHZvaWQgc2ZwX3NtX21haW4oc3RydWN0IHNmcCAqc2ZwLCB1bnNpZ25lZCBpbnQgZXZlbnQpCisreworIAkvKiBTb21lIGV2ZW50cyBhcmUgZ2xvYmFsICovCisgCWlmIChzZnAtPnNtX3N0YXRlICE9IFNGUF9TX0RPV04gJiYKKyAJICAgIChzZnAtPnNtX21vZF9zdGF0ZSAhPSBTRlBfTU9EX1BSRVNFTlQgfHwKK0BAIC0xNjI3LDcgKzE2MjUsNiBAQCBzdGF0aWMgdm9pZCBzZnBfc21fZXZlbnQoc3RydWN0IHNmcCAqc2ZwCisgCQlpZiAoc2ZwLT5tb2RfcGh5KQorIAkJCXNmcF9zbV9waHlfZGV0YWNoKHNmcCk7CisgCQlzZnBfc21fbmV4dChzZnAsIFNGUF9TX0RPV04sIDApOworLQkJbXV0ZXhfdW5sb2NrKCZzZnAtPnNtX211dGV4KTsKKyAJCXJldHVybjsKKyAJfQorIAorQEAgLTE2ODIsNiArMTY3OSwyMSBAQCBzdGF0aWMgdm9pZCBzZnBfc21fZXZlbnQoc3RydWN0IHNmcCAqc2ZwCisgCWNhc2UgU0ZQX1NfVFhfRElTQUJMRToKKyAJCWJyZWFrOworIAl9CisrfQorKworK3N0YXRpYyB2b2lkIHNmcF9zbV9ldmVudChzdHJ1Y3Qgc2ZwICpzZnAsIHVuc2lnbmVkIGludCBldmVudCkKKyt7CisrCW11dGV4X2xvY2soJnNmcC0+c21fbXV0ZXgpOworKworKwlkZXZfZGJnKHNmcC0+ZGV2LCAiU006IGVudGVyICVzOiVzOiVzIGV2ZW50ICVzXG4iLAorKwkJbW9kX3N0YXRlX3RvX3N0cihzZnAtPnNtX21vZF9zdGF0ZSksCisrCQlkZXZfc3RhdGVfdG9fc3RyKHNmcC0+c21fZGV2X3N0YXRlKSwKKysJCXNtX3N0YXRlX3RvX3N0cihzZnAtPnNtX3N0YXRlKSwKKysJCWV2ZW50X3RvX3N0cihldmVudCkpOworKworKwlzZnBfc21fbW9kdWxlKHNmcCwgZXZlbnQpOworKwlzZnBfc21fZGV2aWNlKHNmcCwgZXZlbnQpOworKwlzZnBfc21fbWFpbihzZnAsIGV2ZW50KTsKKyAKKyAJZGV2X2RiZyhzZnAtPmRldiwgIlNNOiBleGl0ICVzOiVzOiVzXG4iLAorIAkJbW9kX3N0YXRlX3RvX3N0cihzZnAtPnNtX21vZF9zdGF0ZSksCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzIxLXY1LjUtbmV0LXNmcC1tb3ZlLXR4LWRpc2FibGUtb24tZGV2aWNlLWRvd24tdG8tbWFpbi1zdGF0ZS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83MjEtdjUuNS1uZXQtc2ZwLW1vdmUtdHgtZGlzYWJsZS1vbi1kZXZpY2UtZG93bi10by1tYWluLXN0YXRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMDIxYzgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzIxLXY1LjUtbmV0LXNmcC1tb3ZlLXR4LWRpc2FibGUtb24tZGV2aWNlLWRvd24tdG8tbWFpbi1zdGF0ZS5wYXRjaApAQCAtMCwwICsxLDQxIEBACitGcm9tIDdlODliNzM3Yzk3YTllN2E4MWRkMTU4NDAwMGJjMTM2YjkyZjEyZmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorRGF0ZTogRnJpLCAxMSBPY3QgMjAxOSAyMjoxNDo0NyArMDEwMAorU3ViamVjdDogW1BBVENIIDYxOS82NjBdIG5ldDogc2ZwOiBtb3ZlIHR4IGRpc2FibGUgb24gZGV2aWNlIGRvd24gdG8gbWFpbgorIHN0YXRlIG1hY2hpbmUKKworTW92ZSB0aGUgdHggZGlzYWJsZSBhc3NlcnRpb24gb24gZGV2aWNlIGRvd24gdG8gdGhlIG1haW4gc3RhdGUKK21hY2hpbmUuCisKK1NpZ25lZC1vZmYtYnk6IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CistLS0KKyBkcml2ZXJzL25ldC9waHkvc2ZwLmMgfCAxMCArKy0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9uZXQvcGh5L3NmcC5jCisrKysgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmMKK0BAIC0xNTU0LDE1ICsxNTU0LDggQEAgc3RhdGljIHZvaWQgc2ZwX3NtX2RldmljZShzdHJ1Y3Qgc2ZwICpzZgorIAkJYnJlYWs7CisgCisgCWNhc2UgU0ZQX0RFVl9VUDoKKy0JCWlmIChldmVudCA9PSBTRlBfRV9ERVZfRE9XTikgeworLQkJCS8qIElmIHRoZSBtb2R1bGUgaGFzIGEgUEhZLCBhdm9pZCByYWlzaW5nIFRYIGRpc2FibGUKKy0JCQkgKiBhcyB0aGlzIHJlc2V0cyB0aGUgUEhZLiBPdGhlcndpc2UsIHJhaXNlIGl0IHRvCistCQkJICogdHVybiB0aGUgbGFzZXIgb2ZmLgorLQkJCSAqLworLQkJCWlmICghc2ZwLT5tb2RfcGh5KQorLQkJCQlzZnBfbW9kdWxlX3R4X2Rpc2FibGUoc2ZwKTsKKysJCWlmIChldmVudCA9PSBTRlBfRV9ERVZfRE9XTikKKyAJCQlzZnAtPnNtX2Rldl9zdGF0ZSA9IFNGUF9ERVZfRE9XTjsKKy0JCX0KKyAJCWJyZWFrOworIAl9CisgfQorQEAgLTE2MjQsNiArMTYxNyw3IEBAIHN0YXRpYyB2b2lkIHNmcF9zbV9tYWluKHN0cnVjdCBzZnAgKnNmcCwKKyAJCQlzZnBfc21fbGlua19kb3duKHNmcCk7CisgCQlpZiAoc2ZwLT5tb2RfcGh5KQorIAkJCXNmcF9zbV9waHlfZGV0YWNoKHNmcCk7CisrCQlzZnBfbW9kdWxlX3R4X2Rpc2FibGUoc2ZwKTsKKyAJCXNmcF9zbV9uZXh0KHNmcCwgU0ZQX1NfRE9XTiwgMCk7CisgCQlyZXR1cm47CisgCX0KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83MjItdjUuNS1uZXQtc2ZwLXJlbmFtZS1zZnBfc21faW5zX25leHQtYXMtc2ZwX3NtX21vZF9uZXh0LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzcyMi12NS41LW5ldC1zZnAtcmVuYW1lLXNmcF9zbV9pbnNfbmV4dC1hcy1zZnBfc21fbW9kX25leHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk3NDU4NgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83MjItdjUuNS1uZXQtc2ZwLXJlbmFtZS1zZnBfc21faW5zX25leHQtYXMtc2ZwX3NtX21vZF9uZXh0LnBhdGNoCkBAIC0wLDAgKzEsNzEgQEAKK0Zyb20gZjJhMWNjZmM0YWQ0Zjk3Yzk4YzNjYzE4ZWIzMjk5MjE1MWNlMDg5YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CitEYXRlOiBGcmksIDExIE9jdCAyMDE5IDIyOjI3OjIxICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggNjIwLzY2MF0gbmV0OiBzZnA6IHJlbmFtZSBzZnBfc21faW5zX25leHQoKSBhcworIHNmcF9zbV9tb2RfbmV4dCgpCisKK3NmcF9zbV9pbnNfbmV4dCgpIG1vZGlmaWVzIHRoZSBtb2R1bGUgc3RhdGUgbWFjaGluZS4gIENoYW5nZSBpdCdzIG5hbWUKK3RvIHJlZmxlY3QgdGhpcy4KKworU2lnbmVkLW9mZi1ieTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KKy0tLQorIGRyaXZlcnMvbmV0L3BoeS9zZnAuYyB8IDE2ICsrKysrKysrLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCistLS0gYS9kcml2ZXJzL25ldC9waHkvc2ZwLmMKKysrKyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuYworQEAgLTEyNDUsNyArMTI0NSw3IEBAIHN0YXRpYyB2b2lkIHNmcF9zbV9uZXh0KHN0cnVjdCBzZnAgKnNmcCwKKyAJc2ZwX3NtX3NldF90aW1lcihzZnAsIHRpbWVvdXQpOworIH0KKyAKKy1zdGF0aWMgdm9pZCBzZnBfc21faW5zX25leHQoc3RydWN0IHNmcCAqc2ZwLCB1bnNpZ25lZCBpbnQgc3RhdGUsCisrc3RhdGljIHZvaWQgc2ZwX3NtX21vZF9uZXh0KHN0cnVjdCBzZnAgKnNmcCwgdW5zaWduZWQgaW50IHN0YXRlLAorIAkJCSAgICB1bnNpZ25lZCBpbnQgdGltZW91dCkKKyB7CisgCXNmcC0+c21fbW9kX3N0YXRlID0gc3RhdGU7CitAQCAtMTU2OSwyMiArMTU2OSwyMiBAQCBzdGF0aWMgdm9pZCBzZnBfc21fbW9kdWxlKHN0cnVjdCBzZnAgKnNmCisgCWRlZmF1bHQ6CisgCQlpZiAoZXZlbnQgPT0gU0ZQX0VfSU5TRVJUICYmIHNmcC0+YXR0YWNoZWQpIHsKKyAJCQlzZnBfbW9kdWxlX3R4X2Rpc2FibGUoc2ZwKTsKKy0JCQlzZnBfc21faW5zX25leHQoc2ZwLCBTRlBfTU9EX1BST0JFLCBUX1BST0JFX0lOSVQpOworKwkJCXNmcF9zbV9tb2RfbmV4dChzZnAsIFNGUF9NT0RfUFJPQkUsIFRfUFJPQkVfSU5JVCk7CisgCQl9CisgCQlicmVhazsKKyAKKyAJY2FzZSBTRlBfTU9EX1BST0JFOgorIAkJaWYgKGV2ZW50ID09IFNGUF9FX1JFTU9WRSkgeworLQkJCXNmcF9zbV9pbnNfbmV4dChzZnAsIFNGUF9NT0RfRU1QVFksIDApOworKwkJCXNmcF9zbV9tb2RfbmV4dChzZnAsIFNGUF9NT0RfRU1QVFksIDApOworIAkJfSBlbHNlIGlmIChldmVudCA9PSBTRlBfRV9USU1FT1VUKSB7CisgCQkJaW50IHZhbCA9IHNmcF9zbV9tb2RfcHJvYmUoc2ZwKTsKKyAKKyAJCQlpZiAodmFsID09IDApCistCQkJCXNmcF9zbV9pbnNfbmV4dChzZnAsIFNGUF9NT0RfUFJFU0VOVCwgMCk7CisrCQkJCXNmcF9zbV9tb2RfbmV4dChzZnAsIFNGUF9NT0RfUFJFU0VOVCwgMCk7CisgCQkJZWxzZSBpZiAodmFsID4gMCkKKy0JCQkJc2ZwX3NtX2luc19uZXh0KHNmcCwgU0ZQX01PRF9IUE9XRVIsIHZhbCk7CisrCQkJCXNmcF9zbV9tb2RfbmV4dChzZnAsIFNGUF9NT0RfSFBPV0VSLCB2YWwpOworIAkJCWVsc2UgaWYgKHZhbCAhPSAtRUFHQUlOKQorLQkJCQlzZnBfc21faW5zX25leHQoc2ZwLCBTRlBfTU9EX0VSUk9SLCAwKTsKKysJCQkJc2ZwX3NtX21vZF9uZXh0KHNmcCwgU0ZQX01PRF9FUlJPUiwgMCk7CisgCQkJZWxzZQorIAkJCQlzZnBfc21fc2V0X3RpbWVyKHNmcCwgVF9QUk9CRV9SRVRSWSk7CisgCQl9CitAQCAtMTU5Miw3ICsxNTkyLDcgQEAgc3RhdGljIHZvaWQgc2ZwX3NtX21vZHVsZShzdHJ1Y3Qgc2ZwICpzZgorIAorIAljYXNlIFNGUF9NT0RfSFBPV0VSOgorIAkJaWYgKGV2ZW50ID09IFNGUF9FX1RJTUVPVVQpIHsKKy0JCQlzZnBfc21faW5zX25leHQoc2ZwLCBTRlBfTU9EX1BSRVNFTlQsIDApOworKwkJCXNmcF9zbV9tb2RfbmV4dChzZnAsIFNGUF9NT0RfUFJFU0VOVCwgMCk7CisgCQkJYnJlYWs7CisgCQl9CisgCQkvKiBmYWxsdGhyb3VnaCAqLworQEAgLTE2MDAsNyArMTYwMCw3IEBAIHN0YXRpYyB2b2lkIHNmcF9zbV9tb2R1bGUoc3RydWN0IHNmcCAqc2YKKyAJY2FzZSBTRlBfTU9EX0VSUk9SOgorIAkJaWYgKGV2ZW50ID09IFNGUF9FX1JFTU9WRSkgeworIAkJCXNmcF9zbV9tb2RfcmVtb3ZlKHNmcCk7CistCQkJc2ZwX3NtX2luc19uZXh0KHNmcCwgU0ZQX01PRF9FTVBUWSwgMCk7CisrCQkJc2ZwX3NtX21vZF9uZXh0KHNmcCwgU0ZQX01PRF9FTVBUWSwgMCk7CisgCQl9CisgCQlicmVhazsKKyAJfQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzcyMy12NS41LW5ldC1zZnAtaGFuZGxlLW1vZHVsZS1yZW1vdmUtb3V0c2lkZS1zdGF0ZS1tYWNoaW5lLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzcyMy12NS41LW5ldC1zZnAtaGFuZGxlLW1vZHVsZS1yZW1vdmUtb3V0c2lkZS1zdGF0ZS1tYWNoaW5lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyY2RiOGEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzIzLXY1LjUtbmV0LXNmcC1oYW5kbGUtbW9kdWxlLXJlbW92ZS1vdXRzaWRlLXN0YXRlLW1hY2hpbmUucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorRnJvbSBkMjU5MWVhNTUyMGUyZWU4ZmE1NTdmOTZiYjY0YzIzY2FmYWM0YjIwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KK0RhdGU6IFR1ZSwgMTUgT2N0IDIwMTkgMTA6MzM6MTMgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCA2MjEvNjYwXSBuZXQ6IHNmcDogaGFuZGxlIG1vZHVsZSByZW1vdmUgb3V0c2lkZSBzdGF0ZSBtYWNoaW5lCisKK1JlbW92aW5nIGEgbW9kdWxlIHJlc2V0cyB0aGUgbW9kdWxlIHN0YXRlIG1hY2hpbmUgYmFjayB0byBpdHMgaW5pdGlhbAorc3RhdGUuICBSYXRoZXIgdGhhbiBleHBsaWNpdGx5IGhhbmRsaW5nIHRoaXMgaW4gZXZlcnkgc3RhdGUsIGhhbmRsZSBpdAorZWFybHkgb24gb3V0c2lkZSBvZiB0aGUgc3RhdGUgbWFjaGluZS4KKworU2lnbmVkLW9mZi1ieTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KKy0tLQorIGRyaXZlcnMvbmV0L3BoeS9zZnAuYyB8IDE2ICsrKysrKysrKy0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCistLS0gYS9kcml2ZXJzL25ldC9waHkvc2ZwLmMKKysrKyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuYworQEAgLTE1NjUsNiArMTU2NSwxNCBAQCBzdGF0aWMgdm9pZCBzZnBfc21fZGV2aWNlKHN0cnVjdCBzZnAgKnNmCisgICovCisgc3RhdGljIHZvaWQgc2ZwX3NtX21vZHVsZShzdHJ1Y3Qgc2ZwICpzZnAsIHVuc2lnbmVkIGludCBldmVudCkKKyB7CisrCS8qIEhhbmRsZSByZW1vdmUgZXZlbnQgZ2xvYmFsbHksIGl0IHJlc2V0cyB0aGlzIHN0YXRlIG1hY2hpbmUgKi8KKysJaWYgKGV2ZW50ID09IFNGUF9FX1JFTU9WRSkgeworKwkJaWYgKHNmcC0+c21fbW9kX3N0YXRlID4gU0ZQX01PRF9QUk9CRSkKKysJCQlzZnBfc21fbW9kX3JlbW92ZShzZnApOworKwkJc2ZwX3NtX21vZF9uZXh0KHNmcCwgU0ZQX01PRF9FTVBUWSwgMCk7CisrCQlyZXR1cm47CisrCX0KKysKKyAJc3dpdGNoIChzZnAtPnNtX21vZF9zdGF0ZSkgeworIAlkZWZhdWx0OgorIAkJaWYgKGV2ZW50ID09IFNGUF9FX0lOU0VSVCAmJiBzZnAtPmF0dGFjaGVkKSB7CitAQCAtMTU3NCw5ICsxNTgyLDcgQEAgc3RhdGljIHZvaWQgc2ZwX3NtX21vZHVsZShzdHJ1Y3Qgc2ZwICpzZgorIAkJYnJlYWs7CisgCisgCWNhc2UgU0ZQX01PRF9QUk9CRToKKy0JCWlmIChldmVudCA9PSBTRlBfRV9SRU1PVkUpIHsKKy0JCQlzZnBfc21fbW9kX25leHQoc2ZwLCBTRlBfTU9EX0VNUFRZLCAwKTsKKy0JCX0gZWxzZSBpZiAoZXZlbnQgPT0gU0ZQX0VfVElNRU9VVCkgeworKwkJaWYgKGV2ZW50ID09IFNGUF9FX1RJTUVPVVQpIHsKKyAJCQlpbnQgdmFsID0gc2ZwX3NtX21vZF9wcm9iZShzZnApOworIAorIAkJCWlmICh2YWwgPT0gMCkKK0BAIC0xNTk4LDEwICsxNjA0LDYgQEAgc3RhdGljIHZvaWQgc2ZwX3NtX21vZHVsZShzdHJ1Y3Qgc2ZwICpzZgorIAkJLyogZmFsbHRocm91Z2ggKi8KKyAJY2FzZSBTRlBfTU9EX1BSRVNFTlQ6CisgCWNhc2UgU0ZQX01PRF9FUlJPUjoKKy0JCWlmIChldmVudCA9PSBTRlBfRV9SRU1PVkUpIHsKKy0JCQlzZnBfc21fbW9kX3JlbW92ZShzZnApOworLQkJCXNmcF9zbV9tb2RfbmV4dChzZnAsIFNGUF9NT0RfRU1QVFksIDApOworLQkJfQorIAkJYnJlYWs7CisgCX0KKyB9CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzI0LXY1LjUtbmV0LXNmcC1yZW5hbWUtVF9QUk9CRV9XQUlULXRvLVRfU0VSSUFMLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzcyNC12NS41LW5ldC1zZnAtcmVuYW1lLVRfUFJPQkVfV0FJVC10by1UX1NFUklBTC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODBlN2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzcyNC12NS41LW5ldC1zZnAtcmVuYW1lLVRfUFJPQkVfV0FJVC10by1UX1NFUklBTC5wYXRjaApAQCAtMCwwICsxLDUxIEBACitGcm9tIDYxNTA5MGFjYjNjMGI0MTY5MWYzYTAzNTIyZWEzODM1MDM4N2MwZTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorRGF0ZTogVHVlLCAxNSBPY3QgMjAxOSAxMDo1NDoxNSArMDEwMAorU3ViamVjdDogW1BBVENIIDYyMi82NjBdIG5ldDogc2ZwOiByZW5hbWUgVF9QUk9CRV9XQUlUIHRvIFRfU0VSSUFMCisKK1NGRi04NDcyIHJldiAxMi4yIGRlZmluZXMgdGhlIHRpbWUgZm9yIHRoZSBzZXJpYWwgYnVzIHRvIGJlY29tZSByZWFkeQordXNpbmcgdF9zZXJpYWwuICBVc2UgdGhpcyBhcyBvdXIgaWRlbnRpZmllciBmb3IgdGhpcyB0aW1lb3V0IHRvIG1ha2UKK2l0IGNsZWFyIHdoYXQgd2UgYXJlIHJlZmVycmluZyB0by4KKworU2lnbmVkLW9mZi1ieTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KKy0tLQorIGRyaXZlcnMvbmV0L3BoeS9zZnAuYyB8IDEzICsrKysrKy0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCistLS0gYS9kcml2ZXJzL25ldC9waHkvc2ZwLmMKKysrKyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuYworQEAgLTE0OSwxMSArMTQ5LDEwIEBAIHN0YXRpYyBjb25zdCBlbnVtIGdwaW9kX2ZsYWdzIGdwaW9fZmxhZ3MKKyAgKiB0aGUgc2FtZSBsZW5ndGggb24gdGhlIFBDQiwgd2hpY2ggbWVhbnMgaXQncyBwb3NzaWJsZSBmb3IgTU9EIERFRiAwIHRvCisgICogY29ubmVjdCBiZWZvcmUgdGhlIEkyQyBidXMgb24gTU9EIERFRiAxLzIuCisgICoKKy0gKiBUaGUgU0ZQIE1TQSBzcGVjaWZpZXMgMzAwbXMgYXMgdF9pbml0ICh0aGUgdGltZSB0YWtlbiBmb3IgVFhfRkFVTFQgdG8KKy0gKiBiZSBkZWFzc2VydGVkKSBidXQgbWFrZXMgbm8gbWVudGlvbiBvZiB0aGUgZWFybGllc3QgdGltZSBiZWZvcmUgd2UgY2FuCistICogYWNjZXNzIHRoZSBJMkMgRUVQUk9NLiAgSG93ZXZlciwgQXZhZ28gbW9kdWxlcyByZXF1aXJlIDMwMG1zLgorKyAqIFRoZSBTRkYtODQ3MiBzcGVjaWZpZXMgdF9zZXJpYWwgKCJUaW1lIGZyb20gcG93ZXIgb24gdW50aWwgbW9kdWxlIGlzCisrICogcmVhZHkgZm9yIGRhdGEgdHJhbnNtaXNzaW9uIG92ZXIgdGhlIHR3byB3aXJlIHNlcmlhbCBidXMuIikgYXMgMzAwbXMuCisgICovCistI2RlZmluZSBUX1BST0JFX0lOSVQJbXNlY3NfdG9famlmZmllcygzMDApCisrI2RlZmluZSBUX1NFUklBTAltc2Vjc190b19qaWZmaWVzKDMwMCkKKyAjZGVmaW5lIFRfSFBPV0VSX0xFVkVMCW1zZWNzX3RvX2ppZmZpZXMoMzAwKQorICNkZWZpbmUgVF9QUk9CRV9SRVRSWQltc2Vjc190b19qaWZmaWVzKDEwMCkKKyAKK0BAIC0xNTYwLDggKzE1NTksOCBAQCBzdGF0aWMgdm9pZCBzZnBfc21fZGV2aWNlKHN0cnVjdCBzZnAgKnNmCisgCX0KKyB9CisgCistLyogVGhpcyBzdGF0ZSBtYWNoaW5lIHRyYWNrcyB0aGUgaW5zZXJ0L3JlbW92ZSBzdGF0ZSBvZgorLSAqIHRoZSBtb2R1bGUsIGFuZCBoYW5kbGVzIHByb2JpbmcgdGhlIG9uLWJvYXJkIEVFUFJPTS4KKysvKiBUaGlzIHN0YXRlIG1hY2hpbmUgdHJhY2tzIHRoZSBpbnNlcnQvcmVtb3ZlIHN0YXRlIG9mIHRoZSBtb2R1bGUsIHByb2JlcworKyAqIHRoZSBvbi1ib2FyZCBFRVBST00sIGFuZCBzZXRzIHVwIHRoZSBwb3dlciBsZXZlbC4KKyAgKi8KKyBzdGF0aWMgdm9pZCBzZnBfc21fbW9kdWxlKHN0cnVjdCBzZnAgKnNmcCwgdW5zaWduZWQgaW50IGV2ZW50KQorIHsKK0BAIC0xNTc3LDcgKzE1NzYsNyBAQCBzdGF0aWMgdm9pZCBzZnBfc21fbW9kdWxlKHN0cnVjdCBzZnAgKnNmCisgCWRlZmF1bHQ6CisgCQlpZiAoZXZlbnQgPT0gU0ZQX0VfSU5TRVJUICYmIHNmcC0+YXR0YWNoZWQpIHsKKyAJCQlzZnBfbW9kdWxlX3R4X2Rpc2FibGUoc2ZwKTsKKy0JCQlzZnBfc21fbW9kX25leHQoc2ZwLCBTRlBfTU9EX1BST0JFLCBUX1BST0JFX0lOSVQpOworKwkJCXNmcF9zbV9tb2RfbmV4dChzZnAsIFNGUF9NT0RfUFJPQkUsIFRfU0VSSUFMKTsKKyAJCX0KKyAJCWJyZWFrOworIApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzcyNS12NS41LW5ldC1zZnAtcGFyc2UtU0ZQLXBvd2VyLXJlcXVpcmVtZW50LWVhcmxpZXIucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzI1LXY1LjUtbmV0LXNmcC1wYXJzZS1TRlAtcG93ZXItcmVxdWlyZW1lbnQtZWFybGllci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjVlZjlmCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzcyNS12NS41LW5ldC1zZnAtcGFyc2UtU0ZQLXBvd2VyLXJlcXVpcmVtZW50LWVhcmxpZXIucGF0Y2gKQEAgLTAsMCArMSwxMTUgQEAKK0Zyb20gZDRiODc0NjIxOWU4YzAzNjFlNWVkNmU0NDBhYjNhOGE2MDBkMWY3NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CitEYXRlOiBGcmksIDExIE9jdCAyMDE5IDE3OjI0OjQwICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggNjIzLzY2MF0gbmV0OiBzZnA6IHBhcnNlIFNGUCBwb3dlciByZXF1aXJlbWVudCBlYXJsaWVyCisKK1BhcnNlIHRoZSBTRlAgcG93ZXIgcmVxdWlyZW1lbnQgZWFybGllciwgaW4gcHJlcGFyYXRpb24gZm9yIG1vdmluZyB0aGUKK3Bvd2VyIGxldmVsIHNldHVwIGNvZGUuCisKK1NpZ25lZC1vZmYtYnk6IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CistLS0KKyBkcml2ZXJzL25ldC9waHkvc2ZwLmMgfCA0MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjkgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYworKysrIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jCitAQCAtMTk4LDYgKzE5OCw4IEBAIHN0cnVjdCBzZnAgeworIAl1bnNpZ25lZCBpbnQgc21fcmV0cmllczsKKyAKKyAJc3RydWN0IHNmcF9lZXByb21faWQgaWQ7CisrCXVuc2lnbmVkIGludCBtb2R1bGVfcG93ZXJfbVc7CisrCisgI2lmIElTX0VOQUJMRUQoQ09ORklHX0hXTU9OKQorIAlzdHJ1Y3Qgc2ZwX2RpYWcgZGlhZzsKKyAJc3RydWN0IGRldmljZSAqaHdtb25fZGV2OworQEAgLTEzNzQsMTcgKzEzNzYsMTQgQEAgc3RhdGljIHZvaWQgc2ZwX3NtX21vZF9pbml0KHN0cnVjdCBzZnAgKgorIAkJc2ZwX3NtX3Byb2JlX3BoeShzZnApOworIH0KKyAKKy1zdGF0aWMgaW50IHNmcF9zbV9tb2RfaHBvd2VyKHN0cnVjdCBzZnAgKnNmcCkKKytzdGF0aWMgaW50IHNmcF9tb2R1bGVfcGFyc2VfcG93ZXIoc3RydWN0IHNmcCAqc2ZwKQorIHsKKy0JdTMyIHBvd2VyOworLQl1OCB2YWw7CistCWludCBlcnI7CisrCXUzMiBwb3dlcl9tVyA9IDEwMDA7CisgCistCXBvd2VyID0gMTAwMDsKKyAJaWYgKHNmcC0+aWQuZXh0Lm9wdGlvbnMgJiBjcHVfdG9fYmUxNihTRlBfT1BUSU9OU19QT1dFUl9ERUNMKSkKKy0JCXBvd2VyID0gMTUwMDsKKysJCXBvd2VyX21XID0gMTUwMDsKKyAJaWYgKHNmcC0+aWQuZXh0Lm9wdGlvbnMgJiBjcHVfdG9fYmUxNihTRlBfT1BUSU9OU19ISUdIX1BPV0VSX0xFVkVMKSkKKy0JCXBvd2VyID0gMjAwMDsKKysJCXBvd2VyX21XID0gMjAwMDsKKyAKKyAJaWYgKHNmcC0+aWQuZXh0LnNmZjg0NzJfY29tcGxpYW5jZSA9PSBTRlBfU0ZGODQ3Ml9DT01QTElBTkNFX05PTkUgJiYKKyAJICAgIChzZnAtPmlkLmV4dC5kaWFnbW9uICYgKFNGUF9ESUFHTU9OX0RETSB8IFNGUF9ESUFHTU9OX0FERFJNT0RFKSkgIT0KK0BAIC0xMzkzLDIzICsxMzkyLDMzIEBAIHN0YXRpYyBpbnQgc2ZwX3NtX21vZF9ocG93ZXIoc3RydWN0IHNmcAorIAkJICogb3IgcmVxdWlyZXMgYW4gYWRkcmVzcyBjaGFuZ2Ugc2VxdWVuY2UsIHNvIGFzc3VtZSB0aGF0CisgCQkgKiB0aGUgbW9kdWxlIHBvd2VycyB1cCBpbiB0aGUgaW5kaWNhdGVkIHBvd2VyIG1vZGUuCisgCQkgKi8KKy0JCWlmIChwb3dlciA+IHNmcC0+bWF4X3Bvd2VyX21XKSB7CisrCQlpZiAocG93ZXJfbVcgPiBzZnAtPm1heF9wb3dlcl9tVykgeworIAkJCWRldl9lcnIoc2ZwLT5kZXYsCisgCQkJCSJIb3N0IGRvZXMgbm90IHN1cHBvcnQgJXUuJXVXIG1vZHVsZXNcbiIsCistCQkJCXBvd2VyIC8gMTAwMCwgKHBvd2VyIC8gMTAwKSAlIDEwKTsKKysJCQkJcG93ZXJfbVcgLyAxMDAwLCAocG93ZXJfbVcgLyAxMDApICUgMTApOworIAkJCXJldHVybiAtRUlOVkFMOworIAkJfQorIAkJcmV0dXJuIDA7CisgCX0KKyAKKy0JaWYgKHBvd2VyID4gc2ZwLT5tYXhfcG93ZXJfbVcpIHsKKysJaWYgKHBvd2VyX21XID4gc2ZwLT5tYXhfcG93ZXJfbVcpIHsKKyAJCWRldl93YXJuKHNmcC0+ZGV2LAorIAkJCSAiSG9zdCBkb2VzIG5vdCBzdXBwb3J0ICV1LiV1VyBtb2R1bGVzLCBtb2R1bGUgbGVmdCBpbiBwb3dlciBtb2RlIDFcbiIsCistCQkJIHBvd2VyIC8gMTAwMCwgKHBvd2VyIC8gMTAwKSAlIDEwKTsKKysJCQkgcG93ZXJfbVcgLyAxMDAwLCAocG93ZXJfbVcgLyAxMDApICUgMTApOworIAkJcmV0dXJuIDA7CisgCX0KKyAKKy0JaWYgKHBvd2VyIDw9IDEwMDApCisrCXNmcC0+bW9kdWxlX3Bvd2VyX21XID0gcG93ZXJfbVc7CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IHNmcF9zbV9tb2RfaHBvd2VyKHN0cnVjdCBzZnAgKnNmcCkKKyt7CisrCXU4IHZhbDsKKysJaW50IGVycjsKKysKKysJaWYgKHNmcC0+bW9kdWxlX3Bvd2VyX21XIDw9IDEwMDApCisgCQlyZXR1cm4gMDsKKyAKKyAJZXJyID0gc2ZwX3JlYWQoc2ZwLCB0cnVlLCBTRlBfRVhUX1NUQVRVUywgJnZhbCwgc2l6ZW9mKHZhbCkpOworQEAgLTE0MjksNyArMTQzOCw4IEBAIHN0YXRpYyBpbnQgc2ZwX3NtX21vZF9ocG93ZXIoc3RydWN0IHNmcAorIAl9CisgCisgCWRldl9pbmZvKHNmcC0+ZGV2LCAiTW9kdWxlIHN3aXRjaGVkIHRvICV1LiV1VyBwb3dlciBsZXZlbFxuIiwKKy0JCSBwb3dlciAvIDEwMDAsIChwb3dlciAvIDEwMCkgJSAxMCk7CisrCQkgc2ZwLT5tb2R1bGVfcG93ZXJfbVcgLyAxMDAwLAorKwkJIChzZnAtPm1vZHVsZV9wb3dlcl9tVyAvIDEwMCkgJSAxMCk7CisgCXJldHVybiBUX0hQT1dFUl9MRVZFTDsKKyAKKyBlcnI6CitAQCAtMTUxNiw2ICsxNTI2LDExIEBAIHN0YXRpYyBpbnQgc2ZwX3NtX21vZF9wcm9iZShzdHJ1Y3Qgc2ZwICoKKyAJCWRldl93YXJuKHNmcC0+ZGV2LAorIAkJCSAibW9kdWxlIGFkZHJlc3Mgc3dhcCB0byBhY2Nlc3MgcGFnZSAweEEyIGlzIG5vdCBzdXBwb3J0ZWQuXG4iKTsKKyAKKysJLyogUGFyc2UgdGhlIG1vZHVsZSBwb3dlciByZXF1aXJlbWVudCAqLworKwlyZXQgPSBzZnBfbW9kdWxlX3BhcnNlX3Bvd2VyKHNmcCk7CisrCWlmIChyZXQgPCAwKQorKwkJcmV0dXJuIHJldDsKKysKKyAJcmV0ID0gc2ZwX2h3bW9uX2luc2VydChzZnApOworIAlpZiAocmV0IDwgMCkKKyAJCXJldHVybiByZXQ7CitAQCAtMTUzOSw2ICsxNTU0LDcgQEAgc3RhdGljIHZvaWQgc2ZwX3NtX21vZF9yZW1vdmUoc3RydWN0IHNmcAorIAlzZnBfbW9kdWxlX3R4X2Rpc2FibGUoc2ZwKTsKKyAKKyAJbWVtc2V0KCZzZnAtPmlkLCAwLCBzaXplb2Yoc2ZwLT5pZCkpOworKwlzZnAtPm1vZHVsZV9wb3dlcl9tVyA9IDA7CisgCisgCWRldl9pbmZvKHNmcC0+ZGV2LCAibW9kdWxlIHJlbW92ZWRcbiIpOworIH0KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83MjYtdjUuNS1uZXQtc2ZwLWF2b2lkLXBvd2VyLXN3aXRjaC1vbi1hZGRyZXNzLWNoYW5nZS1tb2R1bGVzLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzcyNi12NS41LW5ldC1zZnAtYXZvaWQtcG93ZXItc3dpdGNoLW9uLWFkZHJlc3MtY2hhbmdlLW1vZHVsZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIzN2Y1NQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83MjYtdjUuNS1uZXQtc2ZwLWF2b2lkLXBvd2VyLXN3aXRjaC1vbi1hZGRyZXNzLWNoYW5nZS1tb2R1bGVzLnBhdGNoCkBAIC0wLDAgKzEsNjUgQEAKK0Zyb20gZGNhNjc4Yjg4Mzg5NDU1NzJjZjUwNTg0Y2IzM2E3MTk5YzFmZDM5NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CitEYXRlOiBUaHUsIDE3IE9jdCAyMDE5IDAwOjI0OjE4ICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggNjI0LzY2MF0gbmV0OiBzZnA6IGF2b2lkIHBvd2VyIHN3aXRjaCBvbiBhZGRyZXNzLWNoYW5nZQorIG1vZHVsZXMKKworSWYgdGhlIG1vZHVsZSBpbmRpY2F0ZXMgdGhhdCBpdCByZXF1aXJlcyBhbiBhZGRyZXNzIGNoYW5nZSBzZXF1ZW5jZSB0bworc3dpdGNoIGJldHdlZW4gYWRkcmVzcyAweDUwIGFuZCAweDUxLCB3aGljaCB3ZSBkb24ndCBzdXBwb3J0LCB3ZSBjYW4ndAord3JpdGUgdG8gdGhlIHJlZ2lzdGVyIHRoYXQgY29udHJvbHMgdGhlIHBvd2VyIG1vZGUgdG8gc3dpdGNoIHRvIGhpZ2gKK3Bvd2VyIG1vZGUuICBXYXJuIHRoZSB1c2VyIHRoYXQgdGhlIG1vZHVsZSBtYXkgbm90IGJlIGZ1bmN0aW9uYWwgaW4KK3RoaXMgY2FzZSwgYW5kIGRvbid0IHRyeSB0byBjaGFuZ2UgdGhlIHBvd2VyIG1vZGUuCisKK1NpZ25lZC1vZmYtYnk6IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CistLS0KKyBkcml2ZXJzL25ldC9waHkvc2ZwLmMgfCAzMSArKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIwIGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQorCistLS0gYS9kcml2ZXJzL25ldC9waHkvc2ZwLmMKKysrKyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuYworQEAgLTEzODUsMjUgKzEzODUsMzQgQEAgc3RhdGljIGludCBzZnBfbW9kdWxlX3BhcnNlX3Bvd2VyKHN0cnVjdAorIAlpZiAoc2ZwLT5pZC5leHQub3B0aW9ucyAmIGNwdV90b19iZTE2KFNGUF9PUFRJT05TX0hJR0hfUE9XRVJfTEVWRUwpKQorIAkJcG93ZXJfbVcgPSAyMDAwOworIAorLQlpZiAoc2ZwLT5pZC5leHQuc2ZmODQ3Ml9jb21wbGlhbmNlID09IFNGUF9TRkY4NDcyX0NPTVBMSUFOQ0VfTk9ORSAmJgorLQkgICAgKHNmcC0+aWQuZXh0LmRpYWdtb24gJiAoU0ZQX0RJQUdNT05fRERNIHwgU0ZQX0RJQUdNT05fQUREUk1PREUpKSAhPQorLQkgICAgU0ZQX0RJQUdNT05fRERNKSB7CistCQkvKiBUaGUgbW9kdWxlIGFwcGVhcnMgbm90IHRvIGltcGxlbWVudCBidXMgYWRkcmVzcyAweGEyLAorLQkJICogb3IgcmVxdWlyZXMgYW4gYWRkcmVzcyBjaGFuZ2Ugc2VxdWVuY2UsIHNvIGFzc3VtZSB0aGF0CistCQkgKiB0aGUgbW9kdWxlIHBvd2VycyB1cCBpbiB0aGUgaW5kaWNhdGVkIHBvd2VyIG1vZGUuCistCQkgKi8KKy0JCWlmIChwb3dlcl9tVyA+IHNmcC0+bWF4X3Bvd2VyX21XKSB7CisrCWlmIChwb3dlcl9tVyA+IHNmcC0+bWF4X3Bvd2VyX21XKSB7CisrCQkvKiBNb2R1bGUgcG93ZXIgc3BlY2lmaWNhdGlvbiBleGNlZWRzIHRoZSBhbGxvd2VkIG1heGltdW0uICovCisrCQlpZiAoc2ZwLT5pZC5leHQuc2ZmODQ3Ml9jb21wbGlhbmNlID09CisrCQkJU0ZQX1NGRjg0NzJfQ09NUExJQU5DRV9OT05FICYmCisrCQkgICAgIShzZnAtPmlkLmV4dC5kaWFnbW9uICYgU0ZQX0RJQUdNT05fRERNKSkgeworKwkJCS8qIFRoZSBtb2R1bGUgYXBwZWFycyBub3QgdG8gaW1wbGVtZW50IGJ1cyBhZGRyZXNzCisrCQkJICogMHhhMiwgc28gYXNzdW1lIHRoYXQgdGhlIG1vZHVsZSBwb3dlcnMgdXAgaW4gdGhlCisrCQkJICogaW5kaWNhdGVkIG1vZGUuCisrCQkJICovCisgCQkJZGV2X2VycihzZnAtPmRldiwKKyAJCQkJIkhvc3QgZG9lcyBub3Qgc3VwcG9ydCAldS4ldVcgbW9kdWxlc1xuIiwKKyAJCQkJcG93ZXJfbVcgLyAxMDAwLCAocG93ZXJfbVcgLyAxMDApICUgMTApOworIAkJCXJldHVybiAtRUlOVkFMOworKwkJfSBlbHNlIHsKKysJCQlkZXZfd2FybihzZnAtPmRldiwKKysJCQkJICJIb3N0IGRvZXMgbm90IHN1cHBvcnQgJXUuJXVXIG1vZHVsZXMsIG1vZHVsZSBsZWZ0IGluIHBvd2VyIG1vZGUgMVxuIiwKKysJCQkJIHBvd2VyX21XIC8gMTAwMCwgKHBvd2VyX21XIC8gMTAwKSAlIDEwKTsKKysJCQlyZXR1cm4gMDsKKyAJCX0KKy0JCXJldHVybiAwOworIAl9CisgCistCWlmIChwb3dlcl9tVyA+IHNmcC0+bWF4X3Bvd2VyX21XKSB7CisrCS8qIElmIHRoZSBtb2R1bGUgcmVxdWlyZXMgYSBoaWdoZXIgcG93ZXIgbW9kZSwgYnV0IGFsc28gcmVxdWlyZXMKKysJICogYW4gYWRkcmVzcyBjaGFuZ2Ugc2VxdWVuY2UsIHdhcm4gdGhlIHVzZXIgdGhhdCB0aGUgbW9kdWxlIG1heQorKwkgKiBub3QgYmUgZnVuY3Rpb25hbC4KKysJICovCisrCWlmIChzZnAtPmlkLmV4dC5kaWFnbW9uICYgU0ZQX0RJQUdNT05fQUREUk1PREUgJiYgcG93ZXJfbVcgPiAxMDAwKSB7CisgCQlkZXZfd2FybihzZnAtPmRldiwKKy0JCQkgIkhvc3QgZG9lcyBub3Qgc3VwcG9ydCAldS4ldVcgbW9kdWxlcywgbW9kdWxlIGxlZnQgaW4gcG93ZXIgbW9kZSAxXG4iLAorKwkJCSAiQWRkcmVzcyBDaGFuZ2UgU2VxdWVuY2Ugbm90IHN1cHBvcnRlZCBidXQgbW9kdWxlIHJlcXVpZXMgJXUuJXVXLCBtb2R1bGUgbWF5IG5vdCBiZSBmdW5jdGlvbmFsXG4iLAorIAkJCSBwb3dlcl9tVyAvIDEwMDAsIChwb3dlcl9tVyAvIDEwMCkgJSAxMCk7CisgCQlyZXR1cm4gMDsKKyAJfQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzcyNy12NS41LW5ldC1zZnAtY29udHJvbC1UWF9ESVNBQkxFLWFuZC1waHktb25seS1mcm9tLW1haW4tc3QucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzI3LXY1LjUtbmV0LXNmcC1jb250cm9sLVRYX0RJU0FCTEUtYW5kLXBoeS1vbmx5LWZyb20tbWFpbi1zdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWJjYWM2Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzcyNy12NS41LW5ldC1zZnAtY29udHJvbC1UWF9ESVNBQkxFLWFuZC1waHktb25seS1mcm9tLW1haW4tc3QucGF0Y2gKQEAgLTAsMCArMSw1MiBAQAorRnJvbSBkZjVjNGQ5M2M1YTU5Y2JhMGY3NDc5YTRjZDRlMjJiNTA3MjZjZTg4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KK0RhdGU6IFRodSwgMTcgT2N0IDIwMTkgMTE6MTI6NDIgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCA2MjUvNjYwXSBuZXQ6IHNmcDogY29udHJvbCBUWF9ESVNBQkxFIGFuZCBwaHkgb25seSBmcm9tIG1haW4KKyBzdGF0ZSBtYWNoaW5lCisKK1dlIGluaXRpYWxpc2UgVFhfRElTQUJMRSB3aGVuIHRoZSBzZnAgY2FnZSBpcyBwcm9iZWQsIGFuZCB0aGVuCittYWludGFpbiBpdHMgc3RhdGUgaW4gdGhlIG1haW4gc3RhdGUgbWFjaGluZS4gIEhvd2V2ZXIsIHRoZSBtb2R1bGUKK3N0YXRlIG1hY2hpbmU6CistIG5lZ2F0ZXMgaXQgd2hlbiBkZXRlY3RpbmcgYSBuZXdseSBpbnNlcnRlZCBtb2R1bGUgd2hlbiBpdCdzIGFscmVhZHkKKyAgZ3VhcmFudGVlZCB0byBiZSBuZWdhdGVkLgorLSBuZWdhdGVzIGl0IHdoZW4gdGhlIG1vZHVsZSBpcyByZW1vdmVkLCBidXQgdGhlIG1haW4gc3RhdGUgbWFjaGluZQorICB3aWxsIGRvIHRoaXMgYW55d2F5LgorCitNYWtlIFRYX0RJU0FCTEUgZW50aXJlbHkgY29udHJvbGxlZCBieSB0aGUgbWFpbiBzdGF0ZSBtYWNoaW5lLgorCitUaGUgbWFpbiBzdGF0ZSBtYWNoaW5lIGFsc28gcHJvYmVzIHRoZSBtb2R1bGUgZm9yIGEgUEhZLCBhbmQgcmVtb3ZlcwordGhlIFBIWSB3aGVuIHRoZSB0aGUgbW9kdWxlIGlzIHJlbW92ZWQuICBIZW5jZSwgcmVtb3ZpbmcgdGhlIFBIWSBpbgorc2ZwX3NtX21vZHVsZV9yZW1vdmUoKSBpcyBhbHNvIHJlZHVuZGFudCwgYW5kIGlzIGEgbGVmdC1vdmVyIGZyb20KK3doZW4gd2UgdHJpZWQgdG8gcHJvYmUgZm9yIHRoZSBQSFkgZnJvbSB0aGUgbW9kdWxlIHN0YXRlIG1hY2hpbmUuCisKK1NpZ25lZC1vZmYtYnk6IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CistLS0KKyBkcml2ZXJzL25ldC9waHkvc2ZwLmMgfCA5ICstLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgOCBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9uZXQvcGh5L3NmcC5jCisrKysgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmMKK0BAIC0xNTU3LDExICsxNTU3LDYgQEAgc3RhdGljIHZvaWQgc2ZwX3NtX21vZF9yZW1vdmUoc3RydWN0IHNmcAorIAorIAlzZnBfaHdtb25fcmVtb3ZlKHNmcCk7CisgCistCWlmIChzZnAtPm1vZF9waHkpCistCQlzZnBfc21fcGh5X2RldGFjaChzZnApOworLQorLQlzZnBfbW9kdWxlX3R4X2Rpc2FibGUoc2ZwKTsKKy0KKyAJbWVtc2V0KCZzZnAtPmlkLCAwLCBzaXplb2Yoc2ZwLT5pZCkpOworIAlzZnAtPm1vZHVsZV9wb3dlcl9tVyA9IDA7CisgCitAQCAtMTU5OSwxMCArMTU5NCw4IEBAIHN0YXRpYyB2b2lkIHNmcF9zbV9tb2R1bGUoc3RydWN0IHNmcCAqc2YKKyAKKyAJc3dpdGNoIChzZnAtPnNtX21vZF9zdGF0ZSkgeworIAlkZWZhdWx0OgorLQkJaWYgKGV2ZW50ID09IFNGUF9FX0lOU0VSVCAmJiBzZnAtPmF0dGFjaGVkKSB7CistCQkJc2ZwX21vZHVsZV90eF9kaXNhYmxlKHNmcCk7CisrCQlpZiAoZXZlbnQgPT0gU0ZQX0VfSU5TRVJUICYmIHNmcC0+YXR0YWNoZWQpCisgCQkJc2ZwX3NtX21vZF9uZXh0KHNmcCwgU0ZQX01PRF9QUk9CRSwgVF9TRVJJQUwpOworLQkJfQorIAkJYnJlYWs7CisgCisgCWNhc2UgU0ZQX01PRF9QUk9CRToKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83MjgtdjUuNS1uZXQtc2ZwLXNwbGl0LXRoZS1QSFktcHJvYmUtZnJvbS1zZnBfc21fbW9kX2luaXQucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzI4LXY1LjUtbmV0LXNmcC1zcGxpdC10aGUtUEhZLXByb2JlLWZyb20tc2ZwX3NtX21vZF9pbml0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZGYyNmMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzI4LXY1LjUtbmV0LXNmcC1zcGxpdC10aGUtUEhZLXByb2JlLWZyb20tc2ZwX3NtX21vZF9pbml0LnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK0Zyb20gNWVkMGJkNDliMmQzYWM0NDM5YzJkN2Y0NGU1YTgyYjdjZjZmNDA5YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CitEYXRlOiBGcmksIDE4IE9jdCAyMDE5IDEwOjA5OjAyICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggNjI2LzY2MF0gbmV0OiBzZnA6IHNwbGl0IHRoZSBQSFkgcHJvYmUgZnJvbSBzZnBfc21fbW9kX2luaXQoKQorCitNb3ZlIHRoZSBQSFkgcHJvYmUgaW50byBhIHNlcGFyYXRlIGZ1bmN0aW9uLCBzcGxpdHRpbmcgaXQgZnJvbQorc2ZwX3NtX21vZF9pbml0KCkuICBUaGlzIHdpbGwgYWxsb3cgdXMgdG8gZWxpbWluYXRlIHRoZSA1MG1zIG1kZWxheSgpCitpbnNpZGUgdGhlIHN0YXRlIG1hY2hpbmUuCisKK1NpZ25lZC1vZmYtYnk6IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CistLS0KKyBkcml2ZXJzL25ldC9waHkvc2ZwLmMgfCAyMSArKysrKysrKysrKysrLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9uZXQvcGh5L3NmcC5jCisrKysgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmMKK0BAIC0xMzUzLDE0ICsxMzUzLDEwIEBAIHN0YXRpYyB2b2lkIHNmcF9zbV9mYXVsdChzdHJ1Y3Qgc2ZwICpzZnAKKyBzdGF0aWMgdm9pZCBzZnBfc21fbW9kX2luaXQoc3RydWN0IHNmcCAqc2ZwKQorIHsKKyAJc2ZwX21vZHVsZV90eF9lbmFibGUoc2ZwKTsKKyt9CisgCistCS8qIFdhaXQgdF9pbml0IGJlZm9yZSBpbmRpY2F0aW5nIHRoYXQgdGhlIGxpbmsgaXMgdXAsIHByb3ZpZGVkIHRoZQorLQkgKiBjdXJyZW50IHN0YXRlIGluZGljYXRlcyBubyBUWF9GQVVMVC4gIElmIFRYX0ZBVUxUIGNsZWFycyBiZWZvcmUKKy0JICogdGhpcyB0aW1lLCB0aGF0J3MgZmluZSB0b28uCistCSAqLworLQlzZnBfc21fbmV4dChzZnAsIFNGUF9TX0lOSVQsIFRfSU5JVF9KSUZGSUVTKTsKKy0Jc2ZwLT5zbV9yZXRyaWVzID0gNTsKKy0KKytzdGF0aWMgdm9pZCBzZnBfc21fcHJvYmVfZm9yX3BoeShzdHJ1Y3Qgc2ZwICpzZnApCisreworIAkvKiBTZXR0aW5nIHRoZSBzZXJkZXMgbGluayBtb2RlIGlzIGd1ZXNzd29yazogdGhlcmUncyBubworIAkgKiBmaWVsZCBpbiB0aGUgRUVQUk9NIHdoaWNoIGluZGljYXRlcyB3aGF0IG1vZGUgc2hvdWxkCisgCSAqIGJlIHVzZWQuCitAQCAtMTY0NSw4ICsxNjQxLDE3IEBAIHN0YXRpYyB2b2lkIHNmcF9zbV9tYWluKHN0cnVjdCBzZnAgKnNmcCwKKyAJc3dpdGNoIChzZnAtPnNtX3N0YXRlKSB7CisgCWNhc2UgU0ZQX1NfRE9XTjoKKyAJCWlmIChzZnAtPnNtX21vZF9zdGF0ZSA9PSBTRlBfTU9EX1BSRVNFTlQgJiYKKy0JCSAgICBzZnAtPnNtX2Rldl9zdGF0ZSA9PSBTRlBfREVWX1VQKQorKwkJICAgIHNmcC0+c21fZGV2X3N0YXRlID09IFNGUF9ERVZfVVApIHsKKyAJCQlzZnBfc21fbW9kX2luaXQoc2ZwKTsKKysJCQlzZnBfc21fcHJvYmVfZm9yX3BoeShzZnApOworKworKwkJCS8qIFdhaXQgdF9pbml0IGJlZm9yZSBpbmRpY2F0aW5nIHRoYXQgdGhlIGxpbmsgaXMgdXAsCisrCQkJICogcHJvdmlkZWQgdGhlIGN1cnJlbnQgc3RhdGUgaW5kaWNhdGVzIG5vIFRYX0ZBVUxULiBJZgorKwkJCSAqIFRYX0ZBVUxUIGNsZWFycyBiZWZvcmUgdGhpcyB0aW1lLCB0aGF0J3MgZmluZSB0b28uCisrCQkJICovCisrCQkJc2ZwX3NtX25leHQoc2ZwLCBTRlBfU19JTklULCBUX0lOSVRfSklGRklFUyk7CisrCQkJc2ZwLT5zbV9yZXRyaWVzID0gNTsKKysJCX0KKyAJCWJyZWFrOworIAorIAljYXNlIFNGUF9TX0lOSVQ6CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzI5LXY1LjUtbmV0LXNmcC1lbGltaW5hdGUtbWRlbGF5LWZyb20tUEhZLXByb2JlLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzcyOS12NS41LW5ldC1zZnAtZWxpbWluYXRlLW1kZWxheS1mcm9tLVBIWS1wcm9iZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjZhNzI3Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzcyOS12NS41LW5ldC1zZnAtZWxpbWluYXRlLW1kZWxheS1mcm9tLVBIWS1wcm9iZS5wYXRjaApAQCAtMCwwICsxLDEzMCBAQAorRnJvbSAwZmU3MmFmYWEzMWY5OGViZDcxYmQ2NjgzZmM0NzAyMTEwNWQwMTU3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KK0RhdGU6IEZyaSwgMTggT2N0IDIwMTkgMTA6MjE6NDYgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCA2MjcvNjYwXSBuZXQ6IHNmcDogZWxpbWluYXRlIG1kZWxheSgpIGZyb20gUEhZIHByb2JlCisKK1JhdGhlciB0aGFuIHVzaW5nIG1kZWxheSgpIHRvIHdhaXQgYmVmb3JlIHByb2JpbmcgdGhlIFBIWSAod2hpY2ggaG9sZHMKK3NldmVyYWwgbG9ja3MsIGluY2x1ZGluZyB0aGUgcnRubCBsb2NrKSwgYWRkIGFuIGV4dHJhIHdhaXQgc3RhdGUgdG8KK3RoZSBzdGF0ZSBtYWNoaW5lIHRvIGludHJvZHVjZSB0aGUgNTBtcyBkZWxheSB3aXRob3V0IGhvbGRpbmcgYW55Citsb2Nrcy4KKworU2lnbmVkLW9mZi1ieTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KKy0tLQorIGRyaXZlcnMvbmV0L3BoeS9zZnAuYyB8IDUyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNDAgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYworKysrIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jCitAQCAtNTQsNiArNTQsNyBAQCBlbnVtIHsKKyAJU0ZQX0RFVl9VUCwKKyAKKyAJU0ZQX1NfRE9XTiA9IDAsCisrCVNGUF9TX1dBSVQsCisgCVNGUF9TX0lOSVQsCisgCVNGUF9TX1dBSVRfTE9TLAorIAlTRlBfU19MSU5LX1VQLAorQEAgLTExMCw2ICsxMTEsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqZXZlbnRfdG9fc3RyKHVuc2lnbmVkCisgCisgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzbV9zdGF0ZV9zdHJpbmdzW10gPSB7CisgCVtTRlBfU19ET1dOXSA9ICJkb3duIiwKKysJW1NGUF9TX1dBSVRdID0gIndhaXQiLAorIAlbU0ZQX1NfSU5JVF0gPSAiaW5pdCIsCisgCVtTRlBfU19XQUlUX0xPU10gPSAid2FpdF9sb3MiLAorIAlbU0ZQX1NfTElOS19VUF0gPSAibGlua191cCIsCitAQCAtMTQxLDYgKzE0Myw3IEBAIHN0YXRpYyBjb25zdCBlbnVtIGdwaW9kX2ZsYWdzIGdwaW9fZmxhZ3MKKyAJR1BJT0RfQVNJUywKKyB9OworIAorKyNkZWZpbmUgVF9XQUlUCQltc2Vjc190b19qaWZmaWVzKDUwKQorICNkZWZpbmUgVF9JTklUX0pJRkZJRVMJbXNlY3NfdG9famlmZmllcygzMDApCisgI2RlZmluZSBUX1JFU0VUX1VTCTEwCisgI2RlZmluZSBUX0ZBVUxUX1JFQ09WRVIJbXNlY3NfdG9famlmZmllcygxMDAwKQorQEAgLTE2MSw5ICsxNjQsNiBAQCBzdGF0aWMgY29uc3QgZW51bSBncGlvZF9mbGFncyBncGlvX2ZsYWdzCisgICovCisgI2RlZmluZSBTRlBfUEhZX0FERFIJMjIKKyAKKy0vKiBHaXZlIHRoaXMgbG9uZyBmb3IgdGhlIFBIWSB0byByZXNldC4gKi8KKy0jZGVmaW5lIFRfUEhZX1JFU0VUX01TCTUwCistCisgc3RydWN0IHNmZl9kYXRhIHsKKyAJdW5zaWduZWQgaW50IGdwaW9zOworIAlib29sICgqbW9kdWxlX3N1cHBvcnRlZCkoY29uc3Qgc3RydWN0IHNmcF9lZXByb21faWQgKmlkKTsKK0BAIC0xMjY3LDggKzEyNjcsNiBAQCBzdGF0aWMgdm9pZCBzZnBfc21fcHJvYmVfcGh5KHN0cnVjdCBzZnAKKyAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeTsKKyAJaW50IGVycjsKKyAKKy0JbXNsZWVwKFRfUEhZX1JFU0VUX01TKTsKKy0KKyAJcGh5ID0gbWRpb2J1c19zY2FuKHNmcC0+aTJjX21paSwgU0ZQX1BIWV9BRERSKTsKKyAJaWYgKHBoeSA9PSBFUlJfUFRSKC1FTk9ERVYpKSB7CisgCQlkZXZfaW5mbyhzZnAtPmRldiwgIm5vIFBIWSBkZXRlY3RlZFxuIik7CitAQCAtMTYyMyw2ICsxNjIxLDggQEAgc3RhdGljIHZvaWQgc2ZwX3NtX21vZHVsZShzdHJ1Y3Qgc2ZwICpzZgorIAorIHN0YXRpYyB2b2lkIHNmcF9zbV9tYWluKHN0cnVjdCBzZnAgKnNmcCwgdW5zaWduZWQgaW50IGV2ZW50KQorIHsKKysJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworKworIAkvKiBTb21lIGV2ZW50cyBhcmUgZ2xvYmFsICovCisgCWlmIChzZnAtPnNtX3N0YXRlICE9IFNGUF9TX0RPV04gJiYKKyAJICAgIChzZnAtPnNtX21vZF9zdGF0ZSAhPSBTRlBfTU9EX1BSRVNFTlQgfHwKK0BAIC0xNjQwLDE3ICsxNjQwLDQ1IEBAIHN0YXRpYyB2b2lkIHNmcF9zbV9tYWluKHN0cnVjdCBzZnAgKnNmcCwKKyAJLyogVGhlIG1haW4gc3RhdGUgbWFjaGluZSAqLworIAlzd2l0Y2ggKHNmcC0+c21fc3RhdGUpIHsKKyAJY2FzZSBTRlBfU19ET1dOOgorLQkJaWYgKHNmcC0+c21fbW9kX3N0YXRlID09IFNGUF9NT0RfUFJFU0VOVCAmJgorLQkJICAgIHNmcC0+c21fZGV2X3N0YXRlID09IFNGUF9ERVZfVVApIHsKKy0JCQlzZnBfc21fbW9kX2luaXQoc2ZwKTsKKy0JCQlzZnBfc21fcHJvYmVfZm9yX3BoeShzZnApOworKwkJaWYgKHNmcC0+c21fbW9kX3N0YXRlICE9IFNGUF9NT0RfUFJFU0VOVCB8fAorKwkJICAgIHNmcC0+c21fZGV2X3N0YXRlICE9IFNGUF9ERVZfVVApCisrCQkJYnJlYWs7CisrCisrCQlzZnBfc21fbW9kX2luaXQoc2ZwKTsKKysKKysJCS8qIEluaXRpYWxpc2UgdGhlIGZhdWx0IGNsZWFyYW5jZSByZXRyaWVzICovCisrCQlzZnAtPnNtX3JldHJpZXMgPSA1OworKworKwkJLyogV2UgbmVlZCB0byBjaGVjayB0aGUgVFhfRkFVTFQgc3RhdGUsIHdoaWNoIGlzIG5vdCBkZWZpbmVkCisrCQkgKiB3aGlsZSBUWF9ESVNBQkxFIGlzIGFzc2VydGVkLiBUaGUgZWFybGllc3Qgd2Ugd2FudCB0byBkbworKwkJICogYW55dGhpbmcgKHN1Y2ggYXMgcHJvYmUgZm9yIGEgUEhZKSBpcyA1MG1zLgorKwkJICovCisrCQlzZnBfc21fbmV4dChzZnAsIFNGUF9TX1dBSVQsIFRfV0FJVCk7CisrCQlicmVhazsKKysKKysJY2FzZSBTRlBfU19XQUlUOgorKwkJaWYgKGV2ZW50ICE9IFNGUF9FX1RJTUVPVVQpCisrCQkJYnJlYWs7CisrCisrCQlzZnBfc21fcHJvYmVfZm9yX3BoeShzZnApOworIAorKwkJaWYgKHNmcC0+c3RhdGUgJiBTRlBfRl9UWF9GQVVMVCkgeworIAkJCS8qIFdhaXQgdF9pbml0IGJlZm9yZSBpbmRpY2F0aW5nIHRoYXQgdGhlIGxpbmsgaXMgdXAsCisgCQkJICogcHJvdmlkZWQgdGhlIGN1cnJlbnQgc3RhdGUgaW5kaWNhdGVzIG5vIFRYX0ZBVUxULiBJZgorIAkJCSAqIFRYX0ZBVUxUIGNsZWFycyBiZWZvcmUgdGhpcyB0aW1lLCB0aGF0J3MgZmluZSB0b28uCisgCQkJICovCistCQkJc2ZwX3NtX25leHQoc2ZwLCBTRlBfU19JTklULCBUX0lOSVRfSklGRklFUyk7CistCQkJc2ZwLT5zbV9yZXRyaWVzID0gNTsKKysJCQl0aW1lb3V0ID0gVF9JTklUX0pJRkZJRVM7CisrCQkJaWYgKHRpbWVvdXQgPiBUX1dBSVQpCisrCQkJCXRpbWVvdXQgLT0gVF9XQUlUOworKwkJCWVsc2UKKysJCQkJdGltZW91dCA9IDE7CisrCisrCQkJc2ZwX3NtX25leHQoc2ZwLCBTRlBfU19JTklULCB0aW1lb3V0KTsKKysJCX0gZWxzZSB7CisrCQkJLyogVFhfRkFVTFQgaXMgbm90IGFzc2VydGVkLCBhc3N1bWUgdGhlIG1vZHVsZSBoYXMKKysJCQkgKiBmaW5pc2hlZCBpbml0aWFsaXNpbmcuCisrCQkJICovCisrCQkJZ290byBpbml0X2RvbmU7CisgCQl9CisgCQlicmVhazsKKyAKK0BAIC0xNjU4LDcgKzE2ODYsNyBAQCBzdGF0aWMgdm9pZCBzZnBfc21fbWFpbihzdHJ1Y3Qgc2ZwICpzZnAsCisgCQlpZiAoZXZlbnQgPT0gU0ZQX0VfVElNRU9VVCAmJiBzZnAtPnN0YXRlICYgU0ZQX0ZfVFhfRkFVTFQpCisgCQkJc2ZwX3NtX2ZhdWx0KHNmcCwgdHJ1ZSk7CisgCQllbHNlIGlmIChldmVudCA9PSBTRlBfRV9USU1FT1VUIHx8IGV2ZW50ID09IFNGUF9FX1RYX0NMRUFSKQorLQkJCXNmcF9zbV9saW5rX2NoZWNrX2xvcyhzZnApOworKwlpbml0X2RvbmU6CXNmcF9zbV9saW5rX2NoZWNrX2xvcyhzZnApOworIAkJYnJlYWs7CisgCisgCWNhc2UgU0ZQX1NfV0FJVF9MT1M6CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzMwLXY1LjUtbmV0LXNmcC1hbGxvdy1mYXVsdC1wcm9jZXNzaW5nLXRvLXRyYW5zaXRpb24tdG8tb3RoZS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83MzAtdjUuNS1uZXQtc2ZwLWFsbG93LWZhdWx0LXByb2Nlc3NpbmctdG8tdHJhbnNpdGlvbi10by1vdGhlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NWIwNjEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzMwLXY1LjUtbmV0LXNmcC1hbGxvdy1mYXVsdC1wcm9jZXNzaW5nLXRvLXRyYW5zaXRpb24tdG8tb3RoZS5wYXRjaApAQCAtMCwwICsxLDY5IEBACitGcm9tIDJhYTQyNGVlN2ZiZTQzZTJjZDI0ZTI4YzJmNjM4OGM0ZTE3OTZiZDIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorRGF0ZTogRnJpLCAxOCBPY3QgMjAxOSAwOTo1ODozMyArMDEwMAorU3ViamVjdDogW1BBVENIIDYyOC82NjBdIG5ldDogc2ZwOiBhbGxvdyBmYXVsdCBwcm9jZXNzaW5nIHRvIHRyYW5zaXRpb24gdG8KKyBvdGhlciBzdGF0ZXMKKworQWRkIHRoZSBuZXh0IHN0YXRlIHRvIHNmcF9zbV9mYXVsdCgpIHNvIHRoYXQgaXQgY2FuIGJyYW5jaCB0byBvdGhlcgorc3RhdGVzLiBUaGlzIHdpbGwgYmUgbmVjZXNzYXJ5IHRvIGltcHJvdmUgdGhlIGluaXRpYWxpc2F0aW9uIHBhdGguCisKK1NpZ25lZC1vZmYtYnk6IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CistLS0KKyBkcml2ZXJzL25ldC9waHkvc2ZwLmMgfCAxMiArKysrKystLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCistLS0gYS9kcml2ZXJzL25ldC9waHkvc2ZwLmMKKysrKyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuYworQEAgLTEzMzQsNyArMTMzNCw3IEBAIHN0YXRpYyBib29sIHNmcF9sb3NfZXZlbnRfaW5hY3RpdmUoc3RydWMKKyAJCWV2ZW50ID09IFNGUF9FX0xPU19MT1cpOworIH0KKyAKKy1zdGF0aWMgdm9pZCBzZnBfc21fZmF1bHQoc3RydWN0IHNmcCAqc2ZwLCBib29sIHdhcm4pCisrc3RhdGljIHZvaWQgc2ZwX3NtX2ZhdWx0KHN0cnVjdCBzZnAgKnNmcCwgdW5zaWduZWQgaW50IG5leHRfc3RhdGUsIGJvb2wgd2FybikKKyB7CisgCWlmIChzZnAtPnNtX3JldHJpZXMgJiYgIS0tc2ZwLT5zbV9yZXRyaWVzKSB7CisgCQlkZXZfZXJyKHNmcC0+ZGV2LAorQEAgLTEzNDQsNyArMTM0NCw3IEBAIHN0YXRpYyB2b2lkIHNmcF9zbV9mYXVsdChzdHJ1Y3Qgc2ZwICpzZnAKKyAJCWlmICh3YXJuKQorIAkJCWRldl9lcnIoc2ZwLT5kZXYsICJtb2R1bGUgdHJhbnNtaXQgZmF1bHQgaW5kaWNhdGVkXG4iKTsKKyAKKy0JCXNmcF9zbV9uZXh0KHNmcCwgU0ZQX1NfVFhfRkFVTFQsIFRfRkFVTFRfUkVDT1ZFUik7CisrCQlzZnBfc21fbmV4dChzZnAsIG5leHRfc3RhdGUsIFRfRkFVTFRfUkVDT1ZFUik7CisgCX0KKyB9CisgCitAQCAtMTY4NCwxNCArMTY4NCwxNCBAQCBzdGF0aWMgdm9pZCBzZnBfc21fbWFpbihzdHJ1Y3Qgc2ZwICpzZnAsCisgCisgCWNhc2UgU0ZQX1NfSU5JVDoKKyAJCWlmIChldmVudCA9PSBTRlBfRV9USU1FT1VUICYmIHNmcC0+c3RhdGUgJiBTRlBfRl9UWF9GQVVMVCkKKy0JCQlzZnBfc21fZmF1bHQoc2ZwLCB0cnVlKTsKKysJCQlzZnBfc21fZmF1bHQoc2ZwLCBTRlBfU19UWF9GQVVMVCwgdHJ1ZSk7CisgCQllbHNlIGlmIChldmVudCA9PSBTRlBfRV9USU1FT1VUIHx8IGV2ZW50ID09IFNGUF9FX1RYX0NMRUFSKQorIAlpbml0X2RvbmU6CXNmcF9zbV9saW5rX2NoZWNrX2xvcyhzZnApOworIAkJYnJlYWs7CisgCisgCWNhc2UgU0ZQX1NfV0FJVF9MT1M6CisgCQlpZiAoZXZlbnQgPT0gU0ZQX0VfVFhfRkFVTFQpCistCQkJc2ZwX3NtX2ZhdWx0KHNmcCwgdHJ1ZSk7CisrCQkJc2ZwX3NtX2ZhdWx0KHNmcCwgU0ZQX1NfVFhfRkFVTFQsIHRydWUpOworIAkJZWxzZSBpZiAoc2ZwX2xvc19ldmVudF9pbmFjdGl2ZShzZnAsIGV2ZW50KSkKKyAJCQlzZnBfc21fbGlua191cChzZnApOworIAkJYnJlYWs7CitAQCAtMTY5OSw3ICsxNjk5LDcgQEAgc3RhdGljIHZvaWQgc2ZwX3NtX21haW4oc3RydWN0IHNmcCAqc2ZwLAorIAljYXNlIFNGUF9TX0xJTktfVVA6CisgCQlpZiAoZXZlbnQgPT0gU0ZQX0VfVFhfRkFVTFQpIHsKKyAJCQlzZnBfc21fbGlua19kb3duKHNmcCk7CistCQkJc2ZwX3NtX2ZhdWx0KHNmcCwgdHJ1ZSk7CisrCQkJc2ZwX3NtX2ZhdWx0KHNmcCwgU0ZQX1NfVFhfRkFVTFQsIHRydWUpOworIAkJfSBlbHNlIGlmIChzZnBfbG9zX2V2ZW50X2FjdGl2ZShzZnAsIGV2ZW50KSkgeworIAkJCXNmcF9zbV9saW5rX2Rvd24oc2ZwKTsKKyAJCQlzZnBfc21fbmV4dChzZnAsIFNGUF9TX1dBSVRfTE9TLCAwKTsKK0BAIC0xNzE1LDcgKzE3MTUsNyBAQCBzdGF0aWMgdm9pZCBzZnBfc21fbWFpbihzdHJ1Y3Qgc2ZwICpzZnAsCisgCisgCWNhc2UgU0ZQX1NfUkVJTklUOgorIAkJaWYgKGV2ZW50ID09IFNGUF9FX1RJTUVPVVQgJiYgc2ZwLT5zdGF0ZSAmIFNGUF9GX1RYX0ZBVUxUKSB7CistCQkJc2ZwX3NtX2ZhdWx0KHNmcCwgZmFsc2UpOworKwkJCXNmcF9zbV9mYXVsdChzZnAsIFNGUF9TX1RYX0ZBVUxULCBmYWxzZSk7CisgCQl9IGVsc2UgaWYgKGV2ZW50ID09IFNGUF9FX1RJTUVPVVQgfHwgZXZlbnQgPT0gU0ZQX0VfVFhfQ0xFQVIpIHsKKyAJCQlkZXZfaW5mbyhzZnAtPmRldiwgIm1vZHVsZSB0cmFuc21pdCBmYXVsdCByZWNvdmVyZWRcbiIpOworIAkJCXNmcF9zbV9saW5rX2NoZWNrX2xvcyhzZnApOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzczMS12NS41LW5ldC1zZnAtZW5zdXJlLVRYX0ZBVUxULWhhcy1kZWFzc2VydGVkLWJlZm9yZS1wcm9iaW4ucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzMxLXY1LjUtbmV0LXNmcC1lbnN1cmUtVFhfRkFVTFQtaGFzLWRlYXNzZXJ0ZWQtYmVmb3JlLXByb2Jpbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2NhMjliCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzczMS12NS41LW5ldC1zZnAtZW5zdXJlLVRYX0ZBVUxULWhhcy1kZWFzc2VydGVkLWJlZm9yZS1wcm9iaW4ucGF0Y2gKQEAgLTAsMCArMSw4MCBAQAorRnJvbSAzOGI2MmExMjIzMWJlNGI4NmZjNWNhNTQ3NzU3OWQyOTgzMWMwMmE1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KK0RhdGU6IEZyaSwgMTggT2N0IDIwMTkgMTA6MzE6MDcgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCA2MjkvNjYwXSBuZXQ6IHNmcDogZW5zdXJlIFRYX0ZBVUxUIGhhcyBkZWFzc2VydGVkIGJlZm9yZQorIHByb2JpbmcgdGhlIFBIWQorCitUWF9GQVVMVCBzaG91bGQgYmUgZGVhc3NlcnRlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBtb2R1bGUgaGFzIGNvbXBsZXRlZAoraXRzIGluaXRpYWxpc2F0aW9uLiAgVGhpcyBtYXkgaW5jbHVkZSB0aGUgb24tYm9hcmQgUEhZLCBzbyB3YWl0IHVudGlsCit0aGUgbW9kdWxlIGhhcyBkZWFzc2VydGVkIFRYX0ZBVUxUIGJlZm9yZSBwcm9iaW5nIHRoZSBQSFkuCisKK1RoaXMgbWVhbnMgdGhhdCB3ZSBuZWVkIGFuIGV4dHJhIHN0YXRlIHRvIGhhbmRsZSBhIFRYX0ZBVUxUIHRoYXQKK3JlbWFpbnMgc2V0IGZvciBsb25nZXIgdGhhbiB0X2luaXQsIHNpbmNlIHVzaW5nIHRoZSBleGlzdGluZyBoYW5kbGluZworc3RhdGUgd291bGQgYnlwYXNzIHRoZSBQSFkgcHJvYmUuCisKK1NpZ25lZC1vZmYtYnk6IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CistLS0KKyBkcml2ZXJzL25ldC9waHkvc2ZwLmMgfCAzMSArKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDI1IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYworKysrIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jCitAQCAtNTYsNiArNTYsNyBAQCBlbnVtIHsKKyAJU0ZQX1NfRE9XTiA9IDAsCisgCVNGUF9TX1dBSVQsCisgCVNGUF9TX0lOSVQsCisrCVNGUF9TX0lOSVRfVFhfRkFVTFQsCisgCVNGUF9TX1dBSVRfTE9TLAorIAlTRlBfU19MSU5LX1VQLAorIAlTRlBfU19UWF9GQVVMVCwKK0BAIC0xMTMsNiArMTE0LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzbV9zdGF0ZV9zdHJpbgorIAlbU0ZQX1NfRE9XTl0gPSAiZG93biIsCisgCVtTRlBfU19XQUlUXSA9ICJ3YWl0IiwKKyAJW1NGUF9TX0lOSVRdID0gImluaXQiLAorKwlbU0ZQX1NfSU5JVF9UWF9GQVVMVF0gPSAiaW5pdF90eF9mYXVsdCIsCisgCVtTRlBfU19XQUlUX0xPU10gPSAid2FpdF9sb3MiLAorIAlbU0ZQX1NfTElOS19VUF0gPSAibGlua191cCIsCisgCVtTRlBfU19UWF9GQVVMVF0gPSAidHhfZmF1bHQiLAorQEAgLTE2NjAsOCArMTY2Miw2IEBAIHN0YXRpYyB2b2lkIHNmcF9zbV9tYWluKHN0cnVjdCBzZnAgKnNmcCwKKyAJCWlmIChldmVudCAhPSBTRlBfRV9USU1FT1VUKQorIAkJCWJyZWFrOworIAorLQkJc2ZwX3NtX3Byb2JlX2Zvcl9waHkoc2ZwKTsKKy0KKyAJCWlmIChzZnAtPnN0YXRlICYgU0ZQX0ZfVFhfRkFVTFQpIHsKKyAJCQkvKiBXYWl0IHRfaW5pdCBiZWZvcmUgaW5kaWNhdGluZyB0aGF0IHRoZSBsaW5rIGlzIHVwLAorIAkJCSAqIHByb3ZpZGVkIHRoZSBjdXJyZW50IHN0YXRlIGluZGljYXRlcyBubyBUWF9GQVVMVC4gSWYKK0BAIC0xNjgzLDEwICsxNjgzLDI5IEBAIHN0YXRpYyB2b2lkIHNmcF9zbV9tYWluKHN0cnVjdCBzZnAgKnNmcCwKKyAJCWJyZWFrOworIAorIAljYXNlIFNGUF9TX0lOSVQ6CistCQlpZiAoZXZlbnQgPT0gU0ZQX0VfVElNRU9VVCAmJiBzZnAtPnN0YXRlICYgU0ZQX0ZfVFhfRkFVTFQpCistCQkJc2ZwX3NtX2ZhdWx0KHNmcCwgU0ZQX1NfVFhfRkFVTFQsIHRydWUpOworLQkJZWxzZSBpZiAoZXZlbnQgPT0gU0ZQX0VfVElNRU9VVCB8fCBldmVudCA9PSBTRlBfRV9UWF9DTEVBUikKKy0JaW5pdF9kb25lOglzZnBfc21fbGlua19jaGVja19sb3Moc2ZwKTsKKysJCWlmIChldmVudCA9PSBTRlBfRV9USU1FT1VUICYmIHNmcC0+c3RhdGUgJiBTRlBfRl9UWF9GQVVMVCkgeworKwkJCS8qIFRYX0ZBVUxUIGlzIHN0aWxsIGFzc2VydGVkIGFmdGVyIHRfaW5pdCwgc28gYXNzdW1lCisrCQkJICogdGhlcmUgaXMgYSBmYXVsdC4KKysJCQkgKi8KKysJCQlzZnBfc21fZmF1bHQoc2ZwLCBTRlBfU19JTklUX1RYX0ZBVUxULAorKwkJCQkgICAgIHNmcC0+c21fcmV0cmllcyA9PSA1KTsKKysJCX0gZWxzZSBpZiAoZXZlbnQgPT0gU0ZQX0VfVElNRU9VVCB8fCBldmVudCA9PSBTRlBfRV9UWF9DTEVBUikgeworKwlpbml0X2RvbmU6CS8qIFRYX0ZBVUxUIGRlYXNzZXJ0ZWQgb3Igd2UgdGltZWQgb3V0IHdpdGggVFhfRkFVTFQKKysJCQkgKiBjbGVhci4gIFByb2JlIGZvciB0aGUgUEhZIGFuZCBjaGVjayB0aGUgTE9TIHN0YXRlLgorKwkJCSAqLworKwkJCXNmcF9zbV9wcm9iZV9mb3JfcGh5KHNmcCk7CisrCQkJc2ZwX3NtX2xpbmtfY2hlY2tfbG9zKHNmcCk7CisrCisrCQkJLyogUmVzZXQgdGhlIGZhdWx0IHJldHJ5IGNvdW50ICovCisrCQkJc2ZwLT5zbV9yZXRyaWVzID0gNTsKKysJCX0KKysJCWJyZWFrOworKworKwljYXNlIFNGUF9TX0lOSVRfVFhfRkFVTFQ6CisrCQlpZiAoZXZlbnQgPT0gU0ZQX0VfVElNRU9VVCkgeworKwkJCXNmcF9tb2R1bGVfdHhfZmF1bHRfcmVzZXQoc2ZwKTsKKysJCQlzZnBfc21fbmV4dChzZnAsIFNGUF9TX0lOSVQsIFRfSU5JVF9KSUZGSUVTKTsKKysJCX0KKyAJCWJyZWFrOworIAorIAljYXNlIFNGUF9TX1dBSVRfTE9TOgpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzczMi12NS41LW5ldC1zZnAtdHJhY2stdXBzdHJlYW0tcy1hdHRhY2htZW50LXN0YXRlLWluLXN0YXRlLW0ucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzMyLXY1LjUtbmV0LXNmcC10cmFjay11cHN0cmVhbS1zLWF0dGFjaG1lbnQtc3RhdGUtaW4tc3RhdGUtbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTRkNzgzCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzczMi12NS41LW5ldC1zZnAtdHJhY2stdXBzdHJlYW0tcy1hdHRhY2htZW50LXN0YXRlLWluLXN0YXRlLW0ucGF0Y2gKQEAgLTAsMCArMSwxNTMgQEAKK0Zyb20gZWM2MDM2YTU4Zjk3OWM2NmJiZDVjZDlkMGQxYzc4M2E5OGMyYzY0NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CitEYXRlOiBUdWUsIDUgTm92IDIwMTkgMTI6NTc6NDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCA2MzAvNjYwXSBuZXQ6IHNmcDogdHJhY2sgdXBzdHJlYW0ncyBhdHRhY2htZW50IHN0YXRlIGluIHN0YXRlCisgbWFjaGluZQorCitUcmFjayB0aGUgdXBzdHJlYW0ncyBhdHRhY2htZW50IHN0YXRlIGluIHRoZSBzdGF0ZSBtYWNoaW5lIHJhdGhlciB0aGFuCittYWludGFpbmluZyBhIGJvb2xlYW4sIHdoaWNoIGVuc3VyZXMgdGhhdCB3ZSBoYXZlIGEgc3RyaWN0IG9yZGVyIG9mCitBVFRBQ0ggZm9sbG93ZWQgYnkgYW4gVVAgZXZlbnQgLSB3ZSBjYW4gbmV2ZXIgYmVsaWV2ZSB0aGF0IGEgbmV3bHkKK2F0dGFjaGVkIHVwc3RyZWFtIHdpbGwgYmUgYW55dGhpbmcgYnV0IGRvd24uCisKK1JlYXJyYW5nZSB0aGUgb3JkZXIgb2Ygc3RhdGUgbWFjaGluZXMgc28gd2UgcnVuIHRoZSBtb2R1bGUgc3RhdGUKK21hY2hpbmUgYWZ0ZXIgdGhlIHVwc3RyZWFtIGRldmljZSdzIHN0YXRlIG1hY2hpbmUsIHNvIHRoZSBtb2R1bGUgc3RhdGUKK21hY2hpbmUgY2FuIGNoZWNrIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBkZXZpY2UgYW5kIHRha2UgYWN0aW9uIHRvCitlLmcuIHJlc2V0IGJhY2sgdG8gZW1wdHkgc3RhdGUgd2hlbiB0aGUgdXBzdHJlYW0gaXMgZGV0YWNoZWQuCisKK1RoaXMgaXMgdG8gYWxsb3cgdGhlIG1vZHVsZSBkZXRlY3Rpb24gdG8gcnVuIGluZGVwZW5kZW50bHkgb2YgdGhlCituZXR3b3JrIGRldmljZSBiZWNvbWluZyBhdmFpbGFibGUuCisKK1NpZ25lZC1vZmYtYnk6IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CistLS0KKyBkcml2ZXJzL25ldC9waHkvc2ZwLmMgfCA0MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjkgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYworKysrIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jCitAQCAtMzYsNiArMzYsOCBAQCBlbnVtIHsKKyAKKyAJU0ZQX0VfSU5TRVJUID0gMCwKKyAJU0ZQX0VfUkVNT1ZFLAorKwlTRlBfRV9ERVZfQVRUQUNILAorKwlTRlBfRV9ERVZfREVUQUNILAorIAlTRlBfRV9ERVZfRE9XTiwKKyAJU0ZQX0VfREVWX1VQLAorIAlTRlBfRV9UWF9GQVVMVCwKK0BAIC01MCw3ICs1Miw4IEBAIGVudW0geworIAlTRlBfTU9EX1BSRVNFTlQsCisgCVNGUF9NT0RfRVJST1IsCisgCistCVNGUF9ERVZfRE9XTiA9IDAsCisrCVNGUF9ERVZfREVUQUNIRUQgPSAwLAorKwlTRlBfREVWX0RPV04sCisgCVNGUF9ERVZfVVAsCisgCisgCVNGUF9TX0RPV04gPSAwLAorQEAgLTgwLDYgKzgzLDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKm1vZF9zdGF0ZV90b19zdHIodW5zaQorIH0KKyAKKyBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRldl9zdGF0ZV9zdHJpbmdzW10gPSB7CisrCVtTRlBfREVWX0RFVEFDSEVEXSA9ICJkZXRhY2hlZCIsCisgCVtTRlBfREVWX0RPV05dID0gImRvd24iLAorIAlbU0ZQX0RFVl9VUF0gPSAidXAiLAorIH07CitAQCAtOTQsNiArOTgsOCBAQCBzdGF0aWMgY29uc3QgY2hhciAqZGV2X3N0YXRlX3RvX3N0cih1bnNpCisgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBldmVudF9zdHJpbmdzW10gPSB7CisgCVtTRlBfRV9JTlNFUlRdID0gImluc2VydCIsCisgCVtTRlBfRV9SRU1PVkVdID0gInJlbW92ZSIsCisrCVtTRlBfRV9ERVZfQVRUQUNIXSA9ICJkZXZfYXR0YWNoIiwKKysJW1NGUF9FX0RFVl9ERVRBQ0hdID0gImRldl9kZXRhY2giLAorIAlbU0ZQX0VfREVWX0RPV05dID0gImRldl9kb3duIiwKKyAJW1NGUF9FX0RFVl9VUF0gPSAiZGV2X3VwIiwKKyAJW1NGUF9FX1RYX0ZBVUxUXSA9ICJ0eF9mYXVsdCIsCitAQCAtMTg4LDcgKzE5NCw2IEBAIHN0cnVjdCBzZnAgeworIAlzdHJ1Y3QgZ3Bpb19kZXNjICpncGlvW0dQSU9fTUFYXTsKKyAJaW50IGdwaW9faXJxW0dQSU9fTUFYXTsKKyAKKy0JYm9vbCBhdHRhY2hlZDsKKyAJc3RydWN0IG11dGV4IHN0X211dGV4OwkJCS8qIFByb3RlY3RzIHN0YXRlICovCisgCXVuc2lnbmVkIGludCBzdGF0ZTsKKyAJc3RydWN0IGRlbGF5ZWRfd29yayBwb2xsOworQEAgLTE1NTksMTcgKzE1NjQsMjYgQEAgc3RhdGljIHZvaWQgc2ZwX3NtX21vZF9yZW1vdmUoc3RydWN0IHNmcAorIAlkZXZfaW5mbyhzZnAtPmRldiwgIm1vZHVsZSByZW1vdmVkXG4iKTsKKyB9CisgCistLyogVGhpcyBzdGF0ZSBtYWNoaW5lIHRyYWNrcyB0aGUgbmV0ZGV2IHVwL2Rvd24gc3RhdGUgKi8KKysvKiBUaGlzIHN0YXRlIG1hY2hpbmUgdHJhY2tzIHRoZSB1cHN0cmVhbSdzIHN0YXRlICovCisgc3RhdGljIHZvaWQgc2ZwX3NtX2RldmljZShzdHJ1Y3Qgc2ZwICpzZnAsIHVuc2lnbmVkIGludCBldmVudCkKKyB7CisgCXN3aXRjaCAoc2ZwLT5zbV9kZXZfc3RhdGUpIHsKKyAJZGVmYXVsdDoKKy0JCWlmIChldmVudCA9PSBTRlBfRV9ERVZfVVApCisrCQlpZiAoZXZlbnQgPT0gU0ZQX0VfREVWX0FUVEFDSCkKKysJCQlzZnAtPnNtX2Rldl9zdGF0ZSA9IFNGUF9ERVZfRE9XTjsKKysJCWJyZWFrOworKworKwljYXNlIFNGUF9ERVZfRE9XTjoKKysJCWlmIChldmVudCA9PSBTRlBfRV9ERVZfREVUQUNIKQorKwkJCXNmcC0+c21fZGV2X3N0YXRlID0gU0ZQX0RFVl9ERVRBQ0hFRDsKKysJCWVsc2UgaWYgKGV2ZW50ID09IFNGUF9FX0RFVl9VUCkKKyAJCQlzZnAtPnNtX2Rldl9zdGF0ZSA9IFNGUF9ERVZfVVA7CisgCQlicmVhazsKKyAKKyAJY2FzZSBTRlBfREVWX1VQOgorLQkJaWYgKGV2ZW50ID09IFNGUF9FX0RFVl9ET1dOKQorKwkJaWYgKGV2ZW50ID09IFNGUF9FX0RFVl9ERVRBQ0gpCisrCQkJc2ZwLT5zbV9kZXZfc3RhdGUgPSBTRlBfREVWX0RFVEFDSEVEOworKwkJZWxzZSBpZiAoZXZlbnQgPT0gU0ZQX0VfREVWX0RPV04pCisgCQkJc2ZwLT5zbV9kZXZfc3RhdGUgPSBTRlBfREVWX0RPV047CisgCQlicmVhazsKKyAJfQorQEAgLTE1ODAsMTcgKzE1OTQsMjAgQEAgc3RhdGljIHZvaWQgc2ZwX3NtX2RldmljZShzdHJ1Y3Qgc2ZwICpzZgorICAqLworIHN0YXRpYyB2b2lkIHNmcF9zbV9tb2R1bGUoc3RydWN0IHNmcCAqc2ZwLCB1bnNpZ25lZCBpbnQgZXZlbnQpCisgeworLQkvKiBIYW5kbGUgcmVtb3ZlIGV2ZW50IGdsb2JhbGx5LCBpdCByZXNldHMgdGhpcyBzdGF0ZSBtYWNoaW5lICovCistCWlmIChldmVudCA9PSBTRlBfRV9SRU1PVkUpIHsKKysJLyogSGFuZGxlIHJlbW92ZSBldmVudCBnbG9iYWxseSwgaXQgcmVzZXRzIHRoaXMgc3RhdGUgbWFjaGluZS4KKysJICogQWxzbyBkZWFsIHdpdGggdXBzdHJlYW0gZGV0YWNobWVudC4KKysJICovCisrCWlmIChldmVudCA9PSBTRlBfRV9SRU1PVkUgfHwgc2ZwLT5zbV9kZXZfc3RhdGUgPCBTRlBfREVWX0RPV04pIHsKKyAJCWlmIChzZnAtPnNtX21vZF9zdGF0ZSA+IFNGUF9NT0RfUFJPQkUpCisgCQkJc2ZwX3NtX21vZF9yZW1vdmUoc2ZwKTsKKy0JCXNmcF9zbV9tb2RfbmV4dChzZnAsIFNGUF9NT0RfRU1QVFksIDApOworKwkJaWYgKHNmcC0+c21fbW9kX3N0YXRlICE9IFNGUF9NT0RfRU1QVFkpCisrCQkJc2ZwX3NtX21vZF9uZXh0KHNmcCwgU0ZQX01PRF9FTVBUWSwgMCk7CisgCQlyZXR1cm47CisgCX0KKyAKKyAJc3dpdGNoIChzZnAtPnNtX21vZF9zdGF0ZSkgeworIAlkZWZhdWx0OgorLQkJaWYgKGV2ZW50ID09IFNGUF9FX0lOU0VSVCAmJiBzZnAtPmF0dGFjaGVkKQorKwkJaWYgKGV2ZW50ID09IFNGUF9FX0lOU0VSVCkKKyAJCQlzZnBfc21fbW9kX25leHQoc2ZwLCBTRlBfTU9EX1BST0JFLCBUX1NFUklBTCk7CisgCQlicmVhazsKKyAKK0BAIC0xNzU2LDggKzE3NzMsOCBAQCBzdGF0aWMgdm9pZCBzZnBfc21fZXZlbnQoc3RydWN0IHNmcCAqc2ZwCisgCQlzbV9zdGF0ZV90b19zdHIoc2ZwLT5zbV9zdGF0ZSksCisgCQlldmVudF90b19zdHIoZXZlbnQpKTsKKyAKKy0Jc2ZwX3NtX21vZHVsZShzZnAsIGV2ZW50KTsKKyAJc2ZwX3NtX2RldmljZShzZnAsIGV2ZW50KTsKKysJc2ZwX3NtX21vZHVsZShzZnAsIGV2ZW50KTsKKyAJc2ZwX3NtX21haW4oc2ZwLCBldmVudCk7CisgCisgCWRldl9kYmcoc2ZwLT5kZXYsICJTTTogZXhpdCAlczolczolc1xuIiwKK0BAIC0xNzcwLDE1ICsxNzg3LDE0IEBAIHN0YXRpYyB2b2lkIHNmcF9zbV9ldmVudChzdHJ1Y3Qgc2ZwICpzZnAKKyAKKyBzdGF0aWMgdm9pZCBzZnBfYXR0YWNoKHN0cnVjdCBzZnAgKnNmcCkKKyB7CistCXNmcC0+YXR0YWNoZWQgPSB0cnVlOworKwlzZnBfc21fZXZlbnQoc2ZwLCBTRlBfRV9ERVZfQVRUQUNIKTsKKyAJaWYgKHNmcC0+c3RhdGUgJiBTRlBfRl9QUkVTRU5UKQorIAkJc2ZwX3NtX2V2ZW50KHNmcCwgU0ZQX0VfSU5TRVJUKTsKKyB9CisgCisgc3RhdGljIHZvaWQgc2ZwX2RldGFjaChzdHJ1Y3Qgc2ZwICpzZnApCisgeworLQlzZnAtPmF0dGFjaGVkID0gZmFsc2U7CistCXNmcF9zbV9ldmVudChzZnAsIFNGUF9FX1JFTU9WRSk7CisrCXNmcF9zbV9ldmVudChzZnAsIFNGUF9FX0RFVl9ERVRBQ0gpOworIH0KKyAKKyBzdGF0aWMgdm9pZCBzZnBfc3RhcnQoc3RydWN0IHNmcCAqc2ZwKQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzczMy12NS41LW5ldC1zZnAtc3BsaXQtcG93ZXItbW9kZS1zd2l0Y2hpbmctZnJvbS1wcm9iZS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83MzMtdjUuNS1uZXQtc2ZwLXNwbGl0LXBvd2VyLW1vZGUtc3dpdGNoaW5nLWZyb20tcHJvYmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY0NWU0NAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83MzMtdjUuNS1uZXQtc2ZwLXNwbGl0LXBvd2VyLW1vZGUtc3dpdGNoaW5nLWZyb20tcHJvYmUucGF0Y2gKQEAgLTAsMCArMSwxODQgQEAKK0Zyb20gZmRmZjg2M2E0Y2UzNjc3OTA3ZjY0Mzk2ZTM0YzQ1MDI1YWJiNjYwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CitEYXRlOiBUdWUsIDUgTm92IDIwMTkgMTI6NTk6MzYgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCA2MzEvNjYwXSBuZXQ6IHNmcDogc3BsaXQgcG93ZXIgbW9kZSBzd2l0Y2hpbmcgZnJvbSBwcm9iZQorCitTd2l0Y2ggdGhlIHBvd2VyIG1vZGUgc3dpdGNoaW5nIGZyb20gdGhlIHByb2JlLCBzbyB0aGF0IHdlIGRvbid0CityZXBlYXRlZGx5IHJlLXByb2JlIHRoZSBTRlAgZGV2aWNlIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBhY2Nlc3NpbmcKK3RoZSByZWdpc3RlcnMgYXQgSTJDIGFkZHJlc3MgMHg1MS4KKworSW4gc3BsaXR0aW5nIHRoaXMgb3V0LCB3ZSBjYW4gYWxzbyBmaXggYSBidWcgd2hlcmUgd2UgbGVhdmUgdGhlIG1vZHVsZQoraW4gaGlnaC1wb3dlciBtb2RlIHdoZW4gdGhlIHVwc3RyZWFtIGRldmljZSBpcyBkZXRhY2hlZCBidXQgdGhlIG1vZHVsZQoraXMgc3RpbGwgaW5zZXJ0ZWQuCisKK1NpZ25lZC1vZmYtYnk6IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CistLS0KKyBkcml2ZXJzL25ldC9waHkvc2ZwLmMgfCAxMDEgKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDY0IGluc2VydGlvbnMoKyksIDM3IGRlbGV0aW9ucygtKQorCistLS0gYS9kcml2ZXJzL25ldC9waHkvc2ZwLmMKKysrKyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuYworQEAgLTQ5LDYgKzQ5LDcgQEAgZW51bSB7CisgCVNGUF9NT0RfRU1QVFkgPSAwLAorIAlTRlBfTU9EX1BST0JFLAorIAlTRlBfTU9EX0hQT1dFUiwKKysJU0ZQX01PRF9XQUlUUFdSLAorIAlTRlBfTU9EX1BSRVNFTlQsCisgCVNGUF9NT0RfRVJST1IsCisgCitAQCAtNzEsNiArNzIsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAgKiBjb25zdCBtb2Rfc3RhdGVfc3RyCisgCVtTRlBfTU9EX0VNUFRZXSA9ICJlbXB0eSIsCisgCVtTRlBfTU9EX1BST0JFXSA9ICJwcm9iZSIsCisgCVtTRlBfTU9EX0hQT1dFUl0gPSAiaHBvd2VyIiwKKysJW1NGUF9NT0RfV0FJVFBXUl0gPSAid2FpdHB3ciIsCisgCVtTRlBfTU9EX1BSRVNFTlRdID0gInByZXNlbnQiLAorIAlbU0ZQX01PRF9FUlJPUl0gPSAiZXJyb3IiLAorIH07CitAQCAtMTQyMywzNyArMTQyNSwzNCBAQCBzdGF0aWMgaW50IHNmcF9tb2R1bGVfcGFyc2VfcG93ZXIoc3RydWN0CisgCXJldHVybiAwOworIH0KKyAKKy1zdGF0aWMgaW50IHNmcF9zbV9tb2RfaHBvd2VyKHN0cnVjdCBzZnAgKnNmcCkKKytzdGF0aWMgaW50IHNmcF9zbV9tb2RfaHBvd2VyKHN0cnVjdCBzZnAgKnNmcCwgYm9vbCBlbmFibGUpCisgeworIAl1OCB2YWw7CisgCWludCBlcnI7CisgCistCWlmIChzZnAtPm1vZHVsZV9wb3dlcl9tVyA8PSAxMDAwKQorLQkJcmV0dXJuIDA7CistCisgCWVyciA9IHNmcF9yZWFkKHNmcCwgdHJ1ZSwgU0ZQX0VYVF9TVEFUVVMsICZ2YWwsIHNpemVvZih2YWwpKTsKKyAJaWYgKGVyciAhPSBzaXplb2YodmFsKSkgeworIAkJZGV2X2VycihzZnAtPmRldiwgIkZhaWxlZCB0byByZWFkIEVFUFJPTTogJWRcbiIsIGVycik7CistCQllcnIgPSAtRUFHQUlOOworLQkJZ290byBlcnI7CisrCQlyZXR1cm4gLUVBR0FJTjsKKyAJfQorIAorLQl2YWwgfD0gQklUKDApOworKwlpZiAoZW5hYmxlKQorKwkJdmFsIHw9IEJJVCgwKTsKKysJZWxzZQorKwkJdmFsICY9IH5CSVQoMCk7CisgCisgCWVyciA9IHNmcF93cml0ZShzZnAsIHRydWUsIFNGUF9FWFRfU1RBVFVTLCAmdmFsLCBzaXplb2YodmFsKSk7CisgCWlmIChlcnIgIT0gc2l6ZW9mKHZhbCkpIHsKKyAJCWRldl9lcnIoc2ZwLT5kZXYsICJGYWlsZWQgdG8gd3JpdGUgRUVQUk9NOiAlZFxuIiwgZXJyKTsKKy0JCWVyciA9IC1FQUdBSU47CistCQlnb3RvIGVycjsKKysJCXJldHVybiAtRUFHQUlOOworIAl9CisgCistCWRldl9pbmZvKHNmcC0+ZGV2LCAiTW9kdWxlIHN3aXRjaGVkIHRvICV1LiV1VyBwb3dlciBsZXZlbFxuIiwKKy0JCSBzZnAtPm1vZHVsZV9wb3dlcl9tVyAvIDEwMDAsCistCQkgKHNmcC0+bW9kdWxlX3Bvd2VyX21XIC8gMTAwKSAlIDEwKTsKKy0JcmV0dXJuIFRfSFBPV0VSX0xFVkVMOworKwlpZiAoZW5hYmxlKQorKwkJZGV2X2luZm8oc2ZwLT5kZXYsICJNb2R1bGUgc3dpdGNoZWQgdG8gJXUuJXVXIHBvd2VyIGxldmVsXG4iLAorKwkJCSBzZnAtPm1vZHVsZV9wb3dlcl9tVyAvIDEwMDAsCisrCQkJIChzZnAtPm1vZHVsZV9wb3dlcl9tVyAvIDEwMCkgJSAxMCk7CisgCistZXJyOgorLQlyZXR1cm4gZXJyOworKwlyZXR1cm4gMDsKKyB9CisgCisgc3RhdGljIGludCBzZnBfc21fbW9kX3Byb2JlKHN0cnVjdCBzZnAgKnNmcCkKK0BAIC0xNTQ5LDcgKzE1NDgsNyBAQCBzdGF0aWMgaW50IHNmcF9zbV9tb2RfcHJvYmUoc3RydWN0IHNmcCAqCisgCWlmIChyZXQgPCAwKQorIAkJcmV0dXJuIHJldDsKKyAKKy0JcmV0dXJuIHNmcF9zbV9tb2RfaHBvd2VyKHNmcCk7CisrCXJldHVybiAwOworIH0KKyAKKyBzdGF0aWMgdm9pZCBzZnBfc21fbW9kX3JlbW92ZShzdHJ1Y3Qgc2ZwICpzZnApCitAQCAtMTU5NCwxMyArMTU5MywyMiBAQCBzdGF0aWMgdm9pZCBzZnBfc21fZGV2aWNlKHN0cnVjdCBzZnAgKnNmCisgICovCisgc3RhdGljIHZvaWQgc2ZwX3NtX21vZHVsZShzdHJ1Y3Qgc2ZwICpzZnAsIHVuc2lnbmVkIGludCBldmVudCkKKyB7CistCS8qIEhhbmRsZSByZW1vdmUgZXZlbnQgZ2xvYmFsbHksIGl0IHJlc2V0cyB0aGlzIHN0YXRlIG1hY2hpbmUuCistCSAqIEFsc28gZGVhbCB3aXRoIHVwc3RyZWFtIGRldGFjaG1lbnQuCistCSAqLworLQlpZiAoZXZlbnQgPT0gU0ZQX0VfUkVNT1ZFIHx8IHNmcC0+c21fZGV2X3N0YXRlIDwgU0ZQX0RFVl9ET1dOKSB7CisrCWludCBlcnI7CisrCisrCS8qIEhhbmRsZSByZW1vdmUgZXZlbnQgZ2xvYmFsbHksIGl0IHJlc2V0cyB0aGlzIHN0YXRlIG1hY2hpbmUgKi8KKysJaWYgKGV2ZW50ID09IFNGUF9FX1JFTU9WRSkgeworIAkJaWYgKHNmcC0+c21fbW9kX3N0YXRlID4gU0ZQX01PRF9QUk9CRSkKKyAJCQlzZnBfc21fbW9kX3JlbW92ZShzZnApOworLQkJaWYgKHNmcC0+c21fbW9kX3N0YXRlICE9IFNGUF9NT0RfRU1QVFkpCisrCQlzZnBfc21fbW9kX25leHQoc2ZwLCBTRlBfTU9EX0VNUFRZLCAwKTsKKysJCXJldHVybjsKKysJfQorKworKwkvKiBIYW5kbGUgZGV2aWNlIGRldGFjaCBnbG9iYWxseSAqLworKwlpZiAoc2ZwLT5zbV9kZXZfc3RhdGUgPCBTRlBfREVWX0RPV04pIHsKKysJCWlmIChzZnAtPm1vZHVsZV9wb3dlcl9tVyA+IDEwMDAgJiYKKysJCSAgICBzZnAtPnNtX21vZF9zdGF0ZSA+IFNGUF9NT0RfSFBPV0VSKQorKwkJCXNmcF9zbV9tb2RfaHBvd2VyKHNmcCwgZmFsc2UpOworKwkJaWYgKHNmcC0+c21fbW9kX3N0YXRlID4gU0ZQX01PRF9FTVBUWSkKKyAJCQlzZnBfc21fbW9kX25leHQoc2ZwLCBTRlBfTU9EX0VNUFRZLCAwKTsKKyAJCXJldHVybjsKKyAJfQorQEAgLTE2MTIsMjYgKzE2MjAsNDUgQEAgc3RhdGljIHZvaWQgc2ZwX3NtX21vZHVsZShzdHJ1Y3Qgc2ZwICpzZgorIAkJYnJlYWs7CisgCisgCWNhc2UgU0ZQX01PRF9QUk9CRToKKy0JCWlmIChldmVudCA9PSBTRlBfRV9USU1FT1VUKSB7CistCQkJaW50IHZhbCA9IHNmcF9zbV9tb2RfcHJvYmUoc2ZwKTsKKysJCWlmIChldmVudCAhPSBTRlBfRV9USU1FT1VUKQorKwkJCWJyZWFrOworIAorLQkJCWlmICh2YWwgPT0gMCkKKy0JCQkJc2ZwX3NtX21vZF9uZXh0KHNmcCwgU0ZQX01PRF9QUkVTRU5ULCAwKTsKKy0JCQllbHNlIGlmICh2YWwgPiAwKQorLQkJCQlzZnBfc21fbW9kX25leHQoc2ZwLCBTRlBfTU9EX0hQT1dFUiwgdmFsKTsKKy0JCQllbHNlIGlmICh2YWwgIT0gLUVBR0FJTikKKy0JCQkJc2ZwX3NtX21vZF9uZXh0KHNmcCwgU0ZQX01PRF9FUlJPUiwgMCk7CistCQkJZWxzZQorLQkJCQlzZnBfc21fc2V0X3RpbWVyKHNmcCwgVF9QUk9CRV9SRVRSWSk7CisrCQllcnIgPSBzZnBfc21fbW9kX3Byb2JlKHNmcCk7CisrCQlpZiAoZXJyID09IC1FQUdBSU4pIHsKKysJCQlzZnBfc21fc2V0X3RpbWVyKHNmcCwgVF9QUk9CRV9SRVRSWSk7CisrCQkJYnJlYWs7CisgCQl9CistCQlicmVhazsKKysJCWlmIChlcnIgPCAwKSB7CisrCQkJc2ZwX3NtX21vZF9uZXh0KHNmcCwgU0ZQX01PRF9FUlJPUiwgMCk7CisrCQkJYnJlYWs7CisrCQl9CisrCisrCQkvKiBJZiB0aGlzIGlzIGEgcG93ZXIgbGV2ZWwgMSBtb2R1bGUsIHdlIGFyZSBkb25lICovCisrCQlpZiAoc2ZwLT5tb2R1bGVfcG93ZXJfbVcgPD0gMTAwMCkKKysJCQlnb3RvIGluc2VydDsKKyAKKysJCXNmcF9zbV9tb2RfbmV4dChzZnAsIFNGUF9NT0RfSFBPV0VSLCAwKTsKKysJCS8qIGZhbGwgdGhyb3VnaCAqLworIAljYXNlIFNGUF9NT0RfSFBPV0VSOgorLQkJaWYgKGV2ZW50ID09IFNGUF9FX1RJTUVPVVQpIHsKKy0JCQlzZnBfc21fbW9kX25leHQoc2ZwLCBTRlBfTU9EX1BSRVNFTlQsIDApOworKwkJLyogRW5hYmxlIGhpZ2ggcG93ZXIgbW9kZSAqLworKwkJZXJyID0gc2ZwX3NtX21vZF9ocG93ZXIoc2ZwLCB0cnVlKTsKKysJCWlmIChlcnIgPT0gMCkKKysJCQlzZnBfc21fbW9kX25leHQoc2ZwLCBTRlBfTU9EX1dBSVRQV1IsIFRfSFBPV0VSX0xFVkVMKTsKKysJCWVsc2UgaWYgKGVyciAhPSAtRUFHQUlOKQorKwkJCXNmcF9zbV9tb2RfbmV4dChzZnAsIFNGUF9NT0RfRVJST1IsIDApOworKwkJZWxzZQorKwkJCXNmcF9zbV9zZXRfdGltZXIoc2ZwLCBUX1BST0JFX1JFVFJZKTsKKysJCWJyZWFrOworKworKwljYXNlIFNGUF9NT0RfV0FJVFBXUjoKKysJCS8qIFdhaXQgZm9yIFRfSFBPV0VSX0xFVkVMIHRvIHRpbWUgb3V0ICovCisrCQlpZiAoZXZlbnQgIT0gU0ZQX0VfVElNRU9VVCkKKyAJCQlicmVhazsKKy0JCX0KKy0JCS8qIGZhbGx0aHJvdWdoICovCisrCisrCWluc2VydDoKKysJCXNmcF9zbV9tb2RfbmV4dChzZnAsIFNGUF9NT0RfUFJFU0VOVCwgMCk7CisrCQlicmVhazsKKysKKyAJY2FzZSBTRlBfTU9EX1BSRVNFTlQ6CisgCWNhc2UgU0ZQX01PRF9FUlJPUjoKKyAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzczNC12NS41LW5ldC1zZnAtbW92ZS1tb2R1bGUtaW5zZXJ0LXJlcG9ydGluZy1vdXQtb2YtcHJvYmUucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzM0LXY1LjUtbmV0LXNmcC1tb3ZlLW1vZHVsZS1pbnNlcnQtcmVwb3J0aW5nLW91dC1vZi1wcm9iZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDliZGUyCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzczNC12NS41LW5ldC1zZnAtbW92ZS1tb2R1bGUtaW5zZXJ0LXJlcG9ydGluZy1vdXQtb2YtcHJvYmUucGF0Y2gKQEAgLTAsMCArMSwxNTkgQEAKK0Zyb20gNTdjYmY3NDUzNTUxZGIxZGY2MTliNzk0MTBkNzlmYzQxOGQ4NjJkNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CitEYXRlOiBUdWUsIDUgTm92IDIwMTkgMTM6MDA6NDUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCA2MzIvNjYwXSBuZXQ6IHNmcDogbW92ZSBtb2R1bGUgaW5zZXJ0IHJlcG9ydGluZyBvdXQgb2YgcHJvYmUKKworTW92ZSB0aGUgbW9kdWxlIGluc2VydGlvbiByZXBvcnRpbmcgb3V0IG9mIHRoZSBwcm9iZSBoYW5kbGluZywgYnV0CithZnRlciB3ZSBoYXZlIGRldGVjdGVkIHRoYXQgdGhlIHVwc3RyZWFtIGhhcyBhdHRhY2hlZCAoc2luY2UgdGhhdCBpcword2hvbSB3ZSBhcmUgcmVwb3J0aW5nIGluc2VydGlvbiB0by4pCisKK09ubHkgcmVwb3J0IG1vZHVsZSByZW1vdmFsIGlmIHdlIGhhZCBwcmV2aW91c2x5IHJlcG9ydGVkIGEgbW9kdWxlCitpbnNlcnRpb24uCisKK1RoaXMgZ2l2ZXMgY2xlYW5lciBzZW1hbnRpY3MsIGFuZCBtZWFucyB3ZSBjYW4gcHJvYmUgdGhlIG1vZHVsZSBiZWZvcmUKK3dlIGhhdmUgYW4gdXBzdHJlYW0gYXR0YWNoZWQuCisKK1NpZ25lZC1vZmYtYnk6IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CistLS0KKyBkcml2ZXJzL25ldC9waHkvc2ZwLmMgfCA1OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQwIGluc2VydGlvbnMoKyksIDE4IGRlbGV0aW9ucygtKQorCistLS0gYS9kcml2ZXJzL25ldC9waHkvc2ZwLmMKKysrKyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuYworQEAgLTQ3LDExICs0NywxMiBAQCBlbnVtIHsKKyAJU0ZQX0VfVElNRU9VVCwKKyAKKyAJU0ZQX01PRF9FTVBUWSA9IDAsCisrCVNGUF9NT0RfRVJST1IsCisgCVNGUF9NT0RfUFJPQkUsCisrCVNGUF9NT0RfV0FJVERFViwKKyAJU0ZQX01PRF9IUE9XRVIsCisgCVNGUF9NT0RfV0FJVFBXUiwKKyAJU0ZQX01PRF9QUkVTRU5ULAorLQlTRlBfTU9EX0VSUk9SLAorIAorIAlTRlBfREVWX0RFVEFDSEVEID0gMCwKKyAJU0ZQX0RFVl9ET1dOLAorQEAgLTcwLDExICs3MSwxMiBAQCBlbnVtIHsKKyAKKyBzdGF0aWMgY29uc3QgY2hhciAgKiBjb25zdCBtb2Rfc3RhdGVfc3RyaW5nc1tdID0geworIAlbU0ZQX01PRF9FTVBUWV0gPSAiZW1wdHkiLAorKwlbU0ZQX01PRF9FUlJPUl0gPSAiZXJyb3IiLAorIAlbU0ZQX01PRF9QUk9CRV0gPSAicHJvYmUiLAorKwlbU0ZQX01PRF9XQUlUREVWXSA9ICJ3YWl0ZGV2IiwKKyAJW1NGUF9NT0RfSFBPV0VSXSA9ICJocG93ZXIiLAorIAlbU0ZQX01PRF9XQUlUUFdSXSA9ICJ3YWl0cHdyIiwKKyAJW1NGUF9NT0RfUFJFU0VOVF0gPSAicHJlc2VudCIsCistCVtTRlBfTU9EX0VSUk9SXSA9ICJlcnJvciIsCisgfTsKKyAKKyBzdGF0aWMgY29uc3QgY2hhciAqbW9kX3N0YXRlX3RvX3N0cih1bnNpZ25lZCBzaG9ydCBtb2Rfc3RhdGUpCitAQCAtMTU0NCwxNiArMTU0NiwxMyBAQCBzdGF0aWMgaW50IHNmcF9zbV9tb2RfcHJvYmUoc3RydWN0IHNmcCAqCisgCWlmIChyZXQgPCAwKQorIAkJcmV0dXJuIHJldDsKKyAKKy0JcmV0ID0gc2ZwX21vZHVsZV9pbnNlcnQoc2ZwLT5zZnBfYnVzLCAmc2ZwLT5pZCk7CistCWlmIChyZXQgPCAwKQorLQkJcmV0dXJuIHJldDsKKy0KKyAJcmV0dXJuIDA7CisgfQorIAorIHN0YXRpYyB2b2lkIHNmcF9zbV9tb2RfcmVtb3ZlKHN0cnVjdCBzZnAgKnNmcCkKKyB7CistCXNmcF9tb2R1bGVfcmVtb3ZlKHNmcC0+c2ZwX2J1cyk7CisrCWlmIChzZnAtPnNtX21vZF9zdGF0ZSA+IFNGUF9NT0RfV0FJVERFVikKKysJCXNmcF9tb2R1bGVfcmVtb3ZlKHNmcC0+c2ZwX2J1cyk7CisgCisgCXNmcF9od21vbl9yZW1vdmUoc2ZwKTsKKyAKK0BAIC0xNjA0LDEyICsxNjAzLDEyIEBAIHN0YXRpYyB2b2lkIHNmcF9zbV9tb2R1bGUoc3RydWN0IHNmcCAqc2YKKyAJfQorIAorIAkvKiBIYW5kbGUgZGV2aWNlIGRldGFjaCBnbG9iYWxseSAqLworLQlpZiAoc2ZwLT5zbV9kZXZfc3RhdGUgPCBTRlBfREVWX0RPV04pIHsKKysJaWYgKHNmcC0+c21fZGV2X3N0YXRlIDwgU0ZQX0RFVl9ET1dOICYmCisrCSAgICBzZnAtPnNtX21vZF9zdGF0ZSA+IFNGUF9NT0RfV0FJVERFVikgeworIAkJaWYgKHNmcC0+bW9kdWxlX3Bvd2VyX21XID4gMTAwMCAmJgorIAkJICAgIHNmcC0+c21fbW9kX3N0YXRlID4gU0ZQX01PRF9IUE9XRVIpCisgCQkJc2ZwX3NtX21vZF9ocG93ZXIoc2ZwLCBmYWxzZSk7CistCQlpZiAoc2ZwLT5zbV9tb2Rfc3RhdGUgPiBTRlBfTU9EX0VNUFRZKQorLQkJCXNmcF9zbV9tb2RfbmV4dChzZnAsIFNGUF9NT0RfRU1QVFksIDApOworKwkJc2ZwX3NtX21vZF9uZXh0KHNmcCwgU0ZQX01PRF9XQUlUREVWLCAwKTsKKyAJCXJldHVybjsKKyAJfQorIAorQEAgLTE2MjAsNiArMTYxOSw3IEBAIHN0YXRpYyB2b2lkIHNmcF9zbV9tb2R1bGUoc3RydWN0IHNmcCAqc2YKKyAJCWJyZWFrOworIAorIAljYXNlIFNGUF9NT0RfUFJPQkU6CisrCQkvKiBXYWl0IGZvciBUX1BST0JFX0lOSVQgdG8gdGltZSBvdXQgKi8KKyAJCWlmIChldmVudCAhPSBTRlBfRV9USU1FT1VUKQorIAkJCWJyZWFrOworIAorQEAgLTE2MzMsNiArMTYzMywyMCBAQCBzdGF0aWMgdm9pZCBzZnBfc21fbW9kdWxlKHN0cnVjdCBzZnAgKnNmCisgCQkJYnJlYWs7CisgCQl9CisgCisrCQlzZnBfc21fbW9kX25leHQoc2ZwLCBTRlBfTU9EX1dBSVRERVYsIDApOworKwkJLyogZmFsbCB0aHJvdWdoICovCisrCWNhc2UgU0ZQX01PRF9XQUlUREVWOgorKwkJLyogRW5zdXJlIHRoYXQgdGhlIGRldmljZSBpcyBhdHRhY2hlZCBiZWZvcmUgcHJvY2VlZGluZyAqLworKwkJaWYgKHNmcC0+c21fZGV2X3N0YXRlIDwgU0ZQX0RFVl9ET1dOKQorKwkJCWJyZWFrOworKworKwkJLyogUmVwb3J0IHRoZSBtb2R1bGUgaW5zZXJ0aW9uIHRvIHRoZSB1cHN0cmVhbSBkZXZpY2UgKi8KKysJCWVyciA9IHNmcF9tb2R1bGVfaW5zZXJ0KHNmcC0+c2ZwX2J1cywgJnNmcC0+aWQpOworKwkJaWYgKGVyciA8IDApIHsKKysJCQlzZnBfc21fbW9kX25leHQoc2ZwLCBTRlBfTU9EX0VSUk9SLCAwKTsKKysJCQlicmVhazsKKysJCX0KKysKKyAJCS8qIElmIHRoaXMgaXMgYSBwb3dlciBsZXZlbCAxIG1vZHVsZSwgd2UgYXJlIGRvbmUgKi8KKyAJCWlmIChzZnAtPm1vZHVsZV9wb3dlcl9tVyA8PSAxMDAwKQorIAkJCWdvdG8gaW5zZXJ0OworQEAgLTE2NDIsMTIgKzE2NTYsMTcgQEAgc3RhdGljIHZvaWQgc2ZwX3NtX21vZHVsZShzdHJ1Y3Qgc2ZwICpzZgorIAljYXNlIFNGUF9NT0RfSFBPV0VSOgorIAkJLyogRW5hYmxlIGhpZ2ggcG93ZXIgbW9kZSAqLworIAkJZXJyID0gc2ZwX3NtX21vZF9ocG93ZXIoc2ZwLCB0cnVlKTsKKy0JCWlmIChlcnIgPT0gMCkKKy0JCQlzZnBfc21fbW9kX25leHQoc2ZwLCBTRlBfTU9EX1dBSVRQV1IsIFRfSFBPV0VSX0xFVkVMKTsKKy0JCWVsc2UgaWYgKGVyciAhPSAtRUFHQUlOKQorLQkJCXNmcF9zbV9tb2RfbmV4dChzZnAsIFNGUF9NT0RfRVJST1IsIDApOworLQkJZWxzZQorLQkJCXNmcF9zbV9zZXRfdGltZXIoc2ZwLCBUX1BST0JFX1JFVFJZKTsKKysJCWlmIChlcnIgPCAwKSB7CisrCQkJaWYgKGVyciAhPSAtRUFHQUlOKSB7CisrCQkJCXNmcF9tb2R1bGVfcmVtb3ZlKHNmcC0+c2ZwX2J1cyk7CisrCQkJCXNmcF9zbV9tb2RfbmV4dChzZnAsIFNGUF9NT0RfRVJST1IsIDApOworKwkJCX0gZWxzZSB7CisrCQkJCXNmcF9zbV9zZXRfdGltZXIoc2ZwLCBUX1BST0JFX1JFVFJZKTsKKysJCQl9CisrCQkJYnJlYWs7CisrCQl9CisrCisrCQlzZnBfc21fbW9kX25leHQoc2ZwLCBTRlBfTU9EX1dBSVRQV1IsIFRfSFBPV0VSX0xFVkVMKTsKKyAJCWJyZWFrOworIAorIAljYXNlIFNGUF9NT0RfV0FJVFBXUjoKK0BAIC0xODE1LDggKzE4MzQsNiBAQCBzdGF0aWMgdm9pZCBzZnBfc21fZXZlbnQoc3RydWN0IHNmcCAqc2ZwCisgc3RhdGljIHZvaWQgc2ZwX2F0dGFjaChzdHJ1Y3Qgc2ZwICpzZnApCisgeworIAlzZnBfc21fZXZlbnQoc2ZwLCBTRlBfRV9ERVZfQVRUQUNIKTsKKy0JaWYgKHNmcC0+c3RhdGUgJiBTRlBfRl9QUkVTRU5UKQorLQkJc2ZwX3NtX2V2ZW50KHNmcCwgU0ZQX0VfSU5TRVJUKTsKKyB9CisgCisgc3RhdGljIHZvaWQgc2ZwX2RldGFjaChzdHJ1Y3Qgc2ZwICpzZnApCitAQCAtMjA4NCw2ICsyMTAxLDExIEBAIHN0YXRpYyBpbnQgc2ZwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXYKKyAJCXNmcC0+c3RhdGUgfD0gU0ZQX0ZfUkFURV9TRUxFQ1Q7CisgCXNmcF9zZXRfc3RhdGUoc2ZwLCBzZnAtPnN0YXRlKTsKKyAJc2ZwX21vZHVsZV90eF9kaXNhYmxlKHNmcCk7CisrCWlmIChzZnAtPnN0YXRlICYgU0ZQX0ZfUFJFU0VOVCkgeworKwkJcnRubF9sb2NrKCk7CisrCQlzZnBfc21fZXZlbnQoc2ZwLCBTRlBfRV9JTlNFUlQpOworKwkJcnRubF91bmxvY2soKTsKKysJfQorIAorIAlmb3IgKGkgPSAwOyBpIDwgR1BJT19NQVg7IGkrKykgeworIAkJaWYgKGdwaW9fZmxhZ3NbaV0gIT0gR1BJT0RfSU4gfHwgIXNmcC0+Z3Bpb1tpXSkKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83MzUtdjUuNS1uZXQtc2ZwLWFsbG93LXNmcC10by1wcm9iZS1zbG93LXRvLWluaXRpYWxpc2UtR1BPTi1tLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzczNS12NS41LW5ldC1zZnAtYWxsb3ctc2ZwLXRvLXByb2JlLXNsb3ctdG8taW5pdGlhbGlzZS1HUE9OLW0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIxYWU3NQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83MzUtdjUuNS1uZXQtc2ZwLWFsbG93LXNmcC10by1wcm9iZS1zbG93LXRvLWluaXRpYWxpc2UtR1BPTi1tLnBhdGNoCkBAIC0wLDAgKzEsMTEwIEBACitGcm9tIGZiNTZjZDA4ODgwYWZmOGZiMDMwZTY4NGZhNDMxMWJlZjcxMmE0OTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorRGF0ZTogVHVlLCA1IE5vdiAyMDE5IDEzOjAyOjMwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggNjMzLzY2MF0gbmV0OiBzZnA6IGFsbG93IHNmcCB0byBwcm9iZSBzbG93IHRvIGluaXRpYWxpc2UgR1BPTgorIG1vZHVsZXMKKworU29tZSBHUE9OIG1vZHVsZXMgKGUuZy4gSHVhd2VpIE1BNTY3MUEpIHRha2UgYSBzaWduaWZpY2FudCBhbW91bnQgb2YKK3RpbWUgdG8gc3RhcnQgcmVzcG9uZGluZyBvbiB0aGUgSTJDIGJ1cywgY29udGFyeSB0byB0aGUgU0ZGCitzcGVjaWZpY2F0aW9ucy4KKworV29yayBhcm91bmQgdGhpcyBieSBpbXBsZW1lbnRpbmcgYSB0d28tbGV2ZWwgdGltZW91dCBzdHJhdGVneSwgd2hlcmUKK3dlIGluaXRpYWxseSBxdWlja2x5IHJldHJ5IGZvciB0aGUgbW9kdWxlLCBhbmQgdGhlbiB1c2UgYSBzbG93ZXIgcmV0cnkKK2FmdGVyIHdlIGV4Y2VlZCBhIG1heGltdW0gbnVtYmVyIG9mIHF1aWNrIGF0dGVtcHRzLgorCitTaWduZWQtb2ZmLWJ5OiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorLS0tCisgZHJpdmVycy9uZXQvcGh5L3NmcC5jIHwgMzggKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjggaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYworKysrIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jCitAQCAtMTY3LDkgKzE2NywxMiBAQCBzdGF0aWMgY29uc3QgZW51bSBncGlvZF9mbGFncyBncGlvX2ZsYWdzCisgICogVGhlIFNGRi04NDcyIHNwZWNpZmllcyB0X3NlcmlhbCAoIlRpbWUgZnJvbSBwb3dlciBvbiB1bnRpbCBtb2R1bGUgaXMKKyAgKiByZWFkeSBmb3IgZGF0YSB0cmFuc21pc3Npb24gb3ZlciB0aGUgdHdvIHdpcmUgc2VyaWFsIGJ1cy4iKSBhcyAzMDBtcy4KKyAgKi8KKy0jZGVmaW5lIFRfU0VSSUFMCW1zZWNzX3RvX2ppZmZpZXMoMzAwKQorLSNkZWZpbmUgVF9IUE9XRVJfTEVWRUwJbXNlY3NfdG9famlmZmllcygzMDApCistI2RlZmluZSBUX1BST0JFX1JFVFJZCW1zZWNzX3RvX2ppZmZpZXMoMTAwKQorKyNkZWZpbmUgVF9TRVJJQUwJCW1zZWNzX3RvX2ppZmZpZXMoMzAwKQorKyNkZWZpbmUgVF9IUE9XRVJfTEVWRUwJCW1zZWNzX3RvX2ppZmZpZXMoMzAwKQorKyNkZWZpbmUgVF9QUk9CRV9SRVRSWV9JTklUCW1zZWNzX3RvX2ppZmZpZXMoMTAwKQorKyNkZWZpbmUgUl9QUk9CRV9SRVRSWV9JTklUCTEwCisrI2RlZmluZSBUX1BST0JFX1JFVFJZX1NMT1cJbXNlY3NfdG9famlmZmllcyg1MDAwKQorKyNkZWZpbmUgUl9QUk9CRV9SRVRSWV9TTE9XCTEyCisgCisgLyogU0ZQIG1vZHVsZXMgYXBwZWFyIHRvIGFsd2F5cyBoYXZlIHRoZWlyIFBIWSBjb25maWd1cmVkIGZvciBidXMgYWRkcmVzcworICAqIDB4NTYgKHdoaWNoIHdpdGggbWRpby1pMmMsIHRyYW5zbGF0ZXMgdG8gYSBQSFkgYWRkcmVzcyBvZiAyMikuCitAQCAtMjA0LDYgKzIwNyw4IEBAIHN0cnVjdCBzZnAgeworIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHRpbWVvdXQ7CisgCXN0cnVjdCBtdXRleCBzbV9tdXRleDsJCQkvKiBQcm90ZWN0cyBzdGF0ZSBtYWNoaW5lICovCisgCXVuc2lnbmVkIGNoYXIgc21fbW9kX3N0YXRlOworKwl1bnNpZ25lZCBjaGFyIHNtX21vZF90cmllc19pbml0OworKwl1bnNpZ25lZCBjaGFyIHNtX21vZF90cmllczsKKyAJdW5zaWduZWQgY2hhciBzbV9kZXZfc3RhdGU7CisgCXVuc2lnbmVkIHNob3J0IHNtX3N0YXRlOworIAl1bnNpZ25lZCBpbnQgc21fcmV0cmllczsKK0BAIC0xNDU3LDcgKzE0NjIsNyBAQCBzdGF0aWMgaW50IHNmcF9zbV9tb2RfaHBvd2VyKHN0cnVjdCBzZnAKKyAJcmV0dXJuIDA7CisgfQorIAorLXN0YXRpYyBpbnQgc2ZwX3NtX21vZF9wcm9iZShzdHJ1Y3Qgc2ZwICpzZnApCisrc3RhdGljIGludCBzZnBfc21fbW9kX3Byb2JlKHN0cnVjdCBzZnAgKnNmcCwgYm9vbCByZXBvcnQpCisgeworIAkvKiBTRlAgbW9kdWxlIGluc2VydGVkIC0gcmVhZCBJMkMgZGF0YSAqLworIAlzdHJ1Y3Qgc2ZwX2VlcHJvbV9pZCBpZDsKK0BAIC0xNDY3LDcgKzE0NzIsOCBAQCBzdGF0aWMgaW50IHNmcF9zbV9tb2RfcHJvYmUoc3RydWN0IHNmcCAqCisgCisgCXJldCA9IHNmcF9yZWFkKHNmcCwgZmFsc2UsIDAsICZpZCwgc2l6ZW9mKGlkKSk7CisgCWlmIChyZXQgPCAwKSB7CistCQlkZXZfZXJyKHNmcC0+ZGV2LCAiZmFpbGVkIHRvIHJlYWQgRUVQUk9NOiAlZFxuIiwgcmV0KTsKKysJCWlmIChyZXBvcnQpCisrCQkJZGV2X2VycihzZnAtPmRldiwgImZhaWxlZCB0byByZWFkIEVFUFJPTTogJWRcbiIsIHJldCk7CisgCQlyZXR1cm4gLUVBR0FJTjsKKyAJfQorIAorQEAgLTE2MTQsOCArMTYyMCwxMSBAQCBzdGF0aWMgdm9pZCBzZnBfc21fbW9kdWxlKHN0cnVjdCBzZnAgKnNmCisgCisgCXN3aXRjaCAoc2ZwLT5zbV9tb2Rfc3RhdGUpIHsKKyAJZGVmYXVsdDoKKy0JCWlmIChldmVudCA9PSBTRlBfRV9JTlNFUlQpCisrCQlpZiAoZXZlbnQgPT0gU0ZQX0VfSU5TRVJUKSB7CisgCQkJc2ZwX3NtX21vZF9uZXh0KHNmcCwgU0ZQX01PRF9QUk9CRSwgVF9TRVJJQUwpOworKwkJCXNmcC0+c21fbW9kX3RyaWVzX2luaXQgPSBSX1BST0JFX1JFVFJZX0lOSVQ7CisrCQkJc2ZwLT5zbV9tb2RfdHJpZXMgPSBSX1BST0JFX1JFVFJZX1NMT1c7CisrCQl9CisgCQlicmVhazsKKyAKKyAJY2FzZSBTRlBfTU9EX1BST0JFOgorQEAgLTE2MjMsMTAgKzE2MzIsMTkgQEAgc3RhdGljIHZvaWQgc2ZwX3NtX21vZHVsZShzdHJ1Y3Qgc2ZwICpzZgorIAkJaWYgKGV2ZW50ICE9IFNGUF9FX1RJTUVPVVQpCisgCQkJYnJlYWs7CisgCistCQllcnIgPSBzZnBfc21fbW9kX3Byb2JlKHNmcCk7CisrCQllcnIgPSBzZnBfc21fbW9kX3Byb2JlKHNmcCwgc2ZwLT5zbV9tb2RfdHJpZXMgPT0gMSk7CisgCQlpZiAoZXJyID09IC1FQUdBSU4pIHsKKy0JCQlzZnBfc21fc2V0X3RpbWVyKHNmcCwgVF9QUk9CRV9SRVRSWSk7CistCQkJYnJlYWs7CisrCQkJaWYgKHNmcC0+c21fbW9kX3RyaWVzX2luaXQgJiYKKysJCQkgICAtLXNmcC0+c21fbW9kX3RyaWVzX2luaXQpIHsKKysJCQkJc2ZwX3NtX3NldF90aW1lcihzZnAsIFRfUFJPQkVfUkVUUllfSU5JVCk7CisrCQkJCWJyZWFrOworKwkJCX0gZWxzZSBpZiAoc2ZwLT5zbV9tb2RfdHJpZXMgJiYgLS1zZnAtPnNtX21vZF90cmllcykgeworKwkJCQlpZiAoc2ZwLT5zbV9tb2RfdHJpZXMgPT0gUl9QUk9CRV9SRVRSWV9TTE9XIC0gMSkKKysJCQkJCWRldl93YXJuKHNmcC0+ZGV2LAorKwkJCQkJCSAicGxlYXNlIHdhaXQsIG1vZHVsZSBzbG93IHRvIHJlc3BvbmRcbiIpOworKwkJCQlzZnBfc21fc2V0X3RpbWVyKHNmcCwgVF9QUk9CRV9SRVRSWV9TTE9XKTsKKysJCQkJYnJlYWs7CisrCQkJfQorIAkJfQorIAkJaWYgKGVyciA8IDApIHsKKyAJCQlzZnBfc21fbW9kX25leHQoc2ZwLCBTRlBfTU9EX0VSUk9SLCAwKTsKK0BAIC0xNjYxLDcgKzE2NzksNyBAQCBzdGF0aWMgdm9pZCBzZnBfc21fbW9kdWxlKHN0cnVjdCBzZnAgKnNmCisgCQkJCXNmcF9tb2R1bGVfcmVtb3ZlKHNmcC0+c2ZwX2J1cyk7CisgCQkJCXNmcF9zbV9tb2RfbmV4dChzZnAsIFNGUF9NT0RfRVJST1IsIDApOworIAkJCX0gZWxzZSB7CistCQkJCXNmcF9zbV9zZXRfdGltZXIoc2ZwLCBUX1BST0JFX1JFVFJZKTsKKysJCQkJc2ZwX3NtX3NldF90aW1lcihzZnAsIFRfUFJPQkVfUkVUUllfSU5JVCk7CisgCQkJfQorIAkJCWJyZWFrOworIAkJfQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzczNi12NS41LW5ldC1zZnAtYWxsb3ctbW9kdWxlcy13aXRoLXNsb3ctZGlhZ25vc3RpY3MtdG8tcHJvYmUucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzM2LXY1LjUtbmV0LXNmcC1hbGxvdy1tb2R1bGVzLXdpdGgtc2xvdy1kaWFnbm9zdGljcy10by1wcm9iZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmMxZmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzczNi12NS41LW5ldC1zZnAtYWxsb3ctbW9kdWxlcy13aXRoLXNsb3ctZGlhZ25vc3RpY3MtdG8tcHJvYmUucGF0Y2gKQEAgLTAsMCArMSwxOTggQEAKK0Zyb20gNTU5MzkxZmMyMGZhZTUwNmFkY2IzMTFiOTA0Y2M1NDRjNzY0MzZjMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CitEYXRlOiBUaHUsIDcgTm92IDIwMTkgMTg6NTI6MDcgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCA2MzQvNjYwXSBuZXQ6IHNmcDogYWxsb3cgbW9kdWxlcyB3aXRoIHNsb3cgZGlhZ25vc3RpY3MgdG8KKyBwcm9iZQorCitXaGVuIGEgbW9kdWxlIGlzIGluc2VydGVkLCB3ZSBhdHRlbXB0IHRvIHJlYWQgcmVhZCB0aGUgSUQgZnJvbSBhZGRyZXNzCisweDUwLiAgT25jZSB3ZSBhcmUgYWJsZSB0byByZWFkIHRoZSBJRCwgd2UgaW1tZWRpYXRlbHkgYXR0ZW1wdCB0bworaW5pdGlhbGlzZSB0aGUgaHdtb24gc3VwcG9ydCBieSByZWFkaW5nIGZyb20gYWRkcmVzcyAweDUxLiAgSWYgdGhpcworZmFpbHMsIHRoZW4gd2UgZmFsbCBpbnRvIGVycm9yIHN0YXRlLCBhbmQgYXNzdW1lIHRoYXQgdGhlIG1vZHVsZSBpcworbm90IHVzYWJsZS4KKworTW9kdWxlcyBzdWNoIGFzIHRoZSBBTENBVEVMTFVDRU5UIDNGRTQ2NTQxQUEgdXNlIGEgcmVhbCBFRVBST00gZm9yCitJMkMgYWRkcmVzcyAweDUwLCB3aGljaCByZXNwb25kcyBpbW1lZGlhdGVseS4gIEhvd2V2ZXIsIGFkZHJlc3MgMHg1MQoraXMgYW4gZW11bGF0ZWQsIHdoaWNoIG9ubHkgYmVjb21lcyBhdmFpbGFibGUgb25jZSB0aGUgb24tYm9hcmQgZmlybXdhcmUKK2hhcyBib290ZWQuICBUaGlzIHByb21wdHMgdXMgdG8gZmFsbCBpbnRvIHRoZSBlcnJvciBzdGF0ZS4KKworU2luY2UgdGhlIG1vZHVsZSBtYXkgYmUgdXNhYmxlIHdpdGhvdXQgZGlhZ25vc3RpY3MsIGFycmFuZ2UgZm9yIHRoZQoraHdtb24gcHJvYmUgaW5kZXBlbmRlbnQgb2YgdGhlIHJlc3Qgb2YgdGhlIFNGUCBpdHNlbGYsIHJldHJ5aW5nIGV2ZXJ5Cis1cyBmb3IgdXAgdG8gYWJvdXQgNjBzIGZvciB0aGUgbW9uaXRvcmluZyB0byBiZWNvbWUgYXZhaWxhYmxlLCBhbmQKK3ByaW50IGFuIGVycm9yIG1lc3NhZ2UgaWYgaXQgZG9lc24ndCBiZWNvbWUgYXZhaWxhYmxlLgorCitTaWduZWQtb2ZmLWJ5OiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorLS0tCisgZHJpdmVycy9uZXQvcGh5L3NmcC5jIHwgOTYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA3NCBpbnNlcnRpb25zKCspLCAyMiBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9uZXQvcGh5L3NmcC5jCisrKysgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmMKK0BAIC0yMTgsNiArMjE4LDggQEAgc3RydWN0IHNmcCB7CisgCisgI2lmIElTX0VOQUJMRUQoQ09ORklHX0hXTU9OKQorIAlzdHJ1Y3Qgc2ZwX2RpYWcgZGlhZzsKKysJc3RydWN0IGRlbGF5ZWRfd29yayBod21vbl9wcm9iZTsKKysJdW5zaWduZWQgaW50IGh3bW9uX3RyaWVzOworIAlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7CisgCWNoYXIgKmh3bW9uX25hbWU7CisgI2VuZGlmCitAQCAtMTE1OSwyOSArMTE2MSwyNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGh3bW9uX2NoaXBfaW5mbyBzZnBfCisgCS5pbmZvID0gc2ZwX2h3bW9uX2luZm8sCisgfTsKKyAKKy1zdGF0aWMgaW50IHNmcF9od21vbl9pbnNlcnQoc3RydWN0IHNmcCAqc2ZwKQorK3N0YXRpYyB2b2lkIHNmcF9od21vbl9wcm9iZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCisgeworKwlzdHJ1Y3Qgc2ZwICpzZnAgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHNmcCwgaHdtb25fcHJvYmUud29yayk7CisgCWludCBlcnIsIGk7CisgCistCWlmIChzZnAtPmlkLmV4dC5zZmY4NDcyX2NvbXBsaWFuY2UgPT0gU0ZQX1NGRjg0NzJfQ09NUExJQU5DRV9OT05FKQorLQkJcmV0dXJuIDA7CistCistCWlmICghKHNmcC0+aWQuZXh0LmRpYWdtb24gJiBTRlBfRElBR01PTl9ERE0pKQorLQkJcmV0dXJuIDA7CistCistCWlmIChzZnAtPmlkLmV4dC5kaWFnbW9uICYgU0ZQX0RJQUdNT05fQUREUk1PREUpCistCQkvKiBUaGlzIGRyaXZlciBpbiBnZW5lcmFsIGRvZXMgbm90IHN1cHBvcnQgYWRkcmVzcworLQkJICogY2hhbmdlLgorLQkJICovCistCQlyZXR1cm4gMDsKKy0KKyAJZXJyID0gc2ZwX3JlYWQoc2ZwLCB0cnVlLCAwLCAmc2ZwLT5kaWFnLCBzaXplb2Yoc2ZwLT5kaWFnKSk7CistCWlmIChlcnIgPCAwKQorLQkJcmV0dXJuIGVycjsKKysJaWYgKGVyciA8IDApIHsKKysJCWlmIChzZnAtPmh3bW9uX3RyaWVzLS0pIHsKKysJCQltb2RfZGVsYXllZF93b3JrKHN5c3RlbV93cSwgJnNmcC0+aHdtb25fcHJvYmUsCisrCQkJCQkgVF9QUk9CRV9SRVRSWV9TTE9XKTsKKysJCX0gZWxzZSB7CisrCQkJZGV2X3dhcm4oc2ZwLT5kZXYsICJod21vbiBwcm9iZSBmYWlsZWQ6ICVkXG4iLCBlcnIpOworKwkJfQorKwkJcmV0dXJuOworKwl9CisgCisgCXNmcC0+aHdtb25fbmFtZSA9IGtzdHJkdXAoZGV2X25hbWUoc2ZwLT5kZXYpLCBHRlBfS0VSTkVMKTsKKy0JaWYgKCFzZnAtPmh3bW9uX25hbWUpCistCQlyZXR1cm4gLUVOT0RFVjsKKysJaWYgKCFzZnAtPmh3bW9uX25hbWUpIHsKKysJCWRldl9lcnIoc2ZwLT5kZXYsICJvdXQgb2YgbWVtb3J5IGZvciBod21vbiBuYW1lXG4iKTsKKysJCXJldHVybjsKKysJfQorIAorIAlmb3IgKGkgPSAwOyBzZnAtPmh3bW9uX25hbWVbaV07IGkrKykKKyAJCWlmIChod21vbl9pc19iYWRfY2hhcihzZnAtPmh3bW9uX25hbWVbaV0pKQorQEAgLTExOTEsMTggKzExOTEsNTIgQEAgc3RhdGljIGludCBzZnBfaHdtb25faW5zZXJ0KHN0cnVjdCBzZnAgKgorIAkJCQkJCQkgc2ZwLT5od21vbl9uYW1lLCBzZnAsCisgCQkJCQkJCSAmc2ZwX2h3bW9uX2NoaXBfaW5mbywKKyAJCQkJCQkJIE5VTEwpOworKwlpZiAoSVNfRVJSKHNmcC0+aHdtb25fZGV2KSkKKysJCWRldl9lcnIoc2ZwLT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgaHdtb24gZGV2aWNlOiAlbGRcbiIsCisrCQkJUFRSX0VSUihzZnAtPmh3bW9uX2RldikpOworK30KKysKKytzdGF0aWMgaW50IHNmcF9od21vbl9pbnNlcnQoc3RydWN0IHNmcCAqc2ZwKQorK3sKKysJaWYgKHNmcC0+aWQuZXh0LnNmZjg0NzJfY29tcGxpYW5jZSA9PSBTRlBfU0ZGODQ3Ml9DT01QTElBTkNFX05PTkUpCisrCQlyZXR1cm4gMDsKKysKKysJaWYgKCEoc2ZwLT5pZC5leHQuZGlhZ21vbiAmIFNGUF9ESUFHTU9OX0RETSkpCisrCQlyZXR1cm4gMDsKKysKKysJaWYgKHNmcC0+aWQuZXh0LmRpYWdtb24gJiBTRlBfRElBR01PTl9BRERSTU9ERSkKKysJCS8qIFRoaXMgZHJpdmVyIGluIGdlbmVyYWwgZG9lcyBub3Qgc3VwcG9ydCBhZGRyZXNzCisrCQkgKiBjaGFuZ2UuCisrCQkgKi8KKysJCXJldHVybiAwOworKworKwltb2RfZGVsYXllZF93b3JrKHN5c3RlbV93cSwgJnNmcC0+aHdtb25fcHJvYmUsIDEpOworKwlzZnAtPmh3bW9uX3RyaWVzID0gUl9QUk9CRV9SRVRSWV9TTE9XOworIAorLQlyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKHNmcC0+aHdtb25fZGV2KTsKKysJcmV0dXJuIDA7CisgfQorIAorIHN0YXRpYyB2b2lkIHNmcF9od21vbl9yZW1vdmUoc3RydWN0IHNmcCAqc2ZwKQorIHsKKysJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZzZnAtPmh3bW9uX3Byb2JlKTsKKyAJaWYgKCFJU19FUlJfT1JfTlVMTChzZnAtPmh3bW9uX2RldikpIHsKKyAJCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKHNmcC0+aHdtb25fZGV2KTsKKyAJCXNmcC0+aHdtb25fZGV2ID0gTlVMTDsKKyAJCWtmcmVlKHNmcC0+aHdtb25fbmFtZSk7CisgCX0KKyB9CisrCisrc3RhdGljIGludCBzZnBfaHdtb25faW5pdChzdHJ1Y3Qgc2ZwICpzZnApCisreworKwlJTklUX0RFTEFZRURfV09SSygmc2ZwLT5od21vbl9wcm9iZSwgc2ZwX2h3bW9uX3Byb2JlKTsKKysKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyB2b2lkIHNmcF9od21vbl9leGl0KHN0cnVjdCBzZnAgKnNmcCkKKyt7CisrCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmc2ZwLT5od21vbl9wcm9iZSk7CisrfQorICNlbHNlCisgc3RhdGljIGludCBzZnBfaHdtb25faW5zZXJ0KHN0cnVjdCBzZnAgKnNmcCkKKyB7CitAQCAtMTIxMiw2ICsxMjQ2LDE1IEBAIHN0YXRpYyBpbnQgc2ZwX2h3bW9uX2luc2VydChzdHJ1Y3Qgc2ZwICoKKyBzdGF0aWMgdm9pZCBzZnBfaHdtb25fcmVtb3ZlKHN0cnVjdCBzZnAgKnNmcCkKKyB7CisgfQorKworK3N0YXRpYyBpbnQgc2ZwX2h3bW9uX2luaXQoc3RydWN0IHNmcCAqc2ZwKQorK3sKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyB2b2lkIHNmcF9od21vbl9leGl0KHN0cnVjdCBzZnAgKnNmcCkKKyt7CisrfQorICNlbmRpZgorIAorIC8qIEhlbHBlcnMgKi8KK0BAIC0xNTQ4LDEwICsxNTkxLDYgQEAgc3RhdGljIGludCBzZnBfc21fbW9kX3Byb2JlKHN0cnVjdCBzZnAgKgorIAlpZiAocmV0IDwgMCkKKyAJCXJldHVybiByZXQ7CisgCistCXJldCA9IHNmcF9od21vbl9pbnNlcnQoc2ZwKTsKKy0JaWYgKHJldCA8IDApCistCQlyZXR1cm4gcmV0OworLQorIAlyZXR1cm4gMDsKKyB9CisgCitAQCAtMTcwMCw2ICsxNzM5LDE1IEBAIHN0YXRpYyB2b2lkIHNmcF9zbV9tb2R1bGUoc3RydWN0IHNmcCAqc2YKKyAJY2FzZSBTRlBfTU9EX0VSUk9SOgorIAkJYnJlYWs7CisgCX0KKysKKysjaWYgSVNfRU5BQkxFRChDT05GSUdfSFdNT04pCisrCWlmIChzZnAtPnNtX21vZF9zdGF0ZSA+PSBTRlBfTU9EX1dBSVRERVYgJiYKKysJICAgIElTX0VSUl9PUl9OVUxMKHNmcC0+aHdtb25fZGV2KSkgeworKwkJZXJyID0gc2ZwX2h3bW9uX2luc2VydChzZnApOworKwkJaWYgKGVycikKKysJCQlkZXZfd2FybihzZnAtPmRldiwgImh3bW9uIHByb2JlIGZhaWxlZDogJWRcbiIsIGVycik7CisrCX0KKysjZW5kaWYKKyB9CisgCisgc3RhdGljIHZvaWQgc2ZwX3NtX21haW4oc3RydWN0IHNmcCAqc2ZwLCB1bnNpZ25lZCBpbnQgZXZlbnQpCitAQCAtMjAwMSw2ICsyMDQ5LDggQEAgc3RhdGljIHN0cnVjdCBzZnAgKnNmcF9hbGxvYyhzdHJ1Y3QgZGV2aQorIAlJTklUX0RFTEFZRURfV09SSygmc2ZwLT5wb2xsLCBzZnBfcG9sbCk7CisgCUlOSVRfREVMQVlFRF9XT1JLKCZzZnAtPnRpbWVvdXQsIHNmcF90aW1lb3V0KTsKKyAKKysJc2ZwX2h3bW9uX2luaXQoc2ZwKTsKKysKKyAJcmV0dXJuIHNmcDsKKyB9CisgCitAQCAtMjAwOCw2ICsyMDU4LDggQEAgc3RhdGljIHZvaWQgc2ZwX2NsZWFudXAodm9pZCAqZGF0YSkKKyB7CisgCXN0cnVjdCBzZnAgKnNmcCA9IGRhdGE7CisgCisrCXNmcF9od21vbl9leGl0KHNmcCk7CisrCisgCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmc2ZwLT5wb2xsKTsKKyAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZzZnAtPnRpbWVvdXQpOworIAlpZiAoc2ZwLT5pMmNfbWlpKSB7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzM3LXY1LjUtbmV0LXBoeS1hZGQtY29yZS1waHlsaWItc2ZwLXN1cHBvcnQucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzM3LXY1LjUtbmV0LXBoeS1hZGQtY29yZS1waHlsaWItc2ZwLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRmZTE1MQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83MzctdjUuNS1uZXQtcGh5LWFkZC1jb3JlLXBoeWxpYi1zZnAtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDE4MyBAQAorRnJvbSBlYjE1NmRiNTg4YWM1ODNjZGFlN2I5MWVhYWM5YzBhZDNhMzU4ZTYzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KK0RhdGU6IFN1biwgMTUgU2VwIDIwMTkgMjA6MDU6MzQgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCA2MzUvNjYwXSBuZXQ6IHBoeTogYWRkIGNvcmUgcGh5bGliIHNmcCBzdXBwb3J0CisKK0FkZCBjb3JlIHBoeWxpYiBoZWxwIGZvciBzdXBwb3J0aW5nIFNGUCBzb2NrZXRzIG9uIFBIWXMuICBUaGlzIHByb3ZpZGVzCithIG1lY2hhbmlzbSB0byBpbmZvcm0gdGhlIFNGUCBsYXllciBhYm91dCBQSFkgdXAvZG93biBldmVudHMsIGFuZCBhbHNvCit1bnJlZ2lzdGVyIHRoZSBTRlAgYnVzIHdoZW4gdGhlIFBIWSBpcyBnb2luZyBhd2F5LgorCitTaWduZWQtb2ZmLWJ5OiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorLS0tCisgZHJpdmVycy9uZXQvcGh5L3BoeS5jICAgICAgICB8ICA3ICsrKysKKyBkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIHwgNjYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgaW5jbHVkZS9saW51eC9waHkuaCAgICAgICAgICB8IDExICsrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgODQgaW5zZXJ0aW9ucygrKQorCistLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LmMKKysrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHkuYworQEAgLTIzLDYgKzIzLDcgQEAKKyAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorICNpbmNsdWRlIDxsaW51eC9waHkuaD4KKyAjaW5jbHVkZSA8bGludXgvcGh5X2xlZF90cmlnZ2Vycy5oPgorKyNpbmNsdWRlIDxsaW51eC9zZnAuaD4KKyAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisgI2luY2x1ZGUgPGxpbnV4L21kaW8uaD4KKyAjaW5jbHVkZSA8bGludXgvaW8uaD4KK0BAIC04NjMsNiArODY0LDkgQEAgdm9pZCBwaHlfc3RvcChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQorIAorIAltdXRleF9sb2NrKCZwaHlkZXYtPmxvY2spOworIAorKwlpZiAocGh5ZGV2LT5zZnBfYnVzKQorKwkJc2ZwX3Vwc3RyZWFtX3N0b3AocGh5ZGV2LT5zZnBfYnVzKTsKKysKKyAJcGh5ZGV2LT5zdGF0ZSA9IFBIWV9IQUxURUQ7CisgCisgCW11dGV4X3VubG9jaygmcGh5ZGV2LT5sb2NrKTsKK0BAIC05MjUsNiArOTI5LDkgQEAgdm9pZCBwaHlfc3RhdGVfbWFjaGluZShzdHJ1Y3Qgd29ya19zdHJ1YworIAorIAlvbGRfc3RhdGUgPSBwaHlkZXYtPnN0YXRlOworIAorKwlpZiAocGh5ZGV2LT5zZnBfYnVzKQorKwkJc2ZwX3Vwc3RyZWFtX3N0YXJ0KHBoeWRldi0+c2ZwX2J1cyk7CisrCisgCXN3aXRjaCAocGh5ZGV2LT5zdGF0ZSkgeworIAljYXNlIFBIWV9ET1dOOgorIAljYXNlIFBIWV9SRUFEWToKKy0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKKysrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKK0BAIC0yNyw2ICsyNyw3IEBACisgI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgorICNpbmNsdWRlIDxsaW51eC9waHkuaD4KKyAjaW5jbHVkZSA8bGludXgvcGh5X2xlZF90cmlnZ2Vycy5oPgorKyNpbmNsdWRlIDxsaW51eC9zZnAuaD4KKyAjaW5jbHVkZSA8bGludXgvbWRpby5oPgorICNpbmNsdWRlIDxsaW51eC9pby5oPgorICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CitAQCAtMTE4NSw2ICsxMTg2LDY1IEBAIHBoeV9zdGFuZGFsb25lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorIHN0YXRpYyBERVZJQ0VfQVRUUl9STyhwaHlfc3RhbmRhbG9uZSk7CisgCisgLyoqCisrICogcGh5X3NmcF9hdHRhY2ggLSBhdHRhY2ggdGhlIFNGUCBidXMgdG8gdGhlIFBIWSB1cHN0cmVhbSBuZXR3b3JrIGRldmljZQorKyAqIEB1cHN0cmVhbTogcG9pbnRlciB0byB0aGUgcGh5IGRldmljZQorKyAqIEBidXM6IHNmcCBidXMgcmVwcmVzZW50aW5nIGNhZ2UgYmVpbmcgYXR0YWNoZWQKKysgKgorKyAqIFRoaXMgaXMgdXNlZCB0byBmaWxsIGluIHRoZSBzZnBfdXBzdHJlYW1fb3BzIC5hdHRhY2ggbWVtYmVyLgorKyAqLworK3ZvaWQgcGh5X3NmcF9hdHRhY2godm9pZCAqdXBzdHJlYW0sIHN0cnVjdCBzZnBfYnVzICpidXMpCisreworKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdXBzdHJlYW07CisrCisrCWlmIChwaHlkZXYtPmF0dGFjaGVkX2RldikKKysJCXBoeWRldi0+YXR0YWNoZWRfZGV2LT5zZnBfYnVzID0gYnVzOworKwlwaHlkZXYtPnNmcF9idXNfYXR0YWNoZWQgPSB0cnVlOworK30KKytFWFBPUlRfU1lNQk9MKHBoeV9zZnBfYXR0YWNoKTsKKysKKysvKioKKysgKiBwaHlfc2ZwX2RldGFjaCAtIGRldGFjaCB0aGUgU0ZQIGJ1cyBmcm9tIHRoZSBQSFkgdXBzdHJlYW0gbmV0d29yayBkZXZpY2UKKysgKiBAdXBzdHJlYW06IHBvaW50ZXIgdG8gdGhlIHBoeSBkZXZpY2UKKysgKiBAYnVzOiBzZnAgYnVzIHJlcHJlc2VudGluZyBjYWdlIGJlaW5nIGF0dGFjaGVkCisrICoKKysgKiBUaGlzIGlzIHVzZWQgdG8gZmlsbCBpbiB0aGUgc2ZwX3Vwc3RyZWFtX29wcyAuZGV0YWNoIG1lbWJlci4KKysgKi8KKyt2b2lkIHBoeV9zZnBfZGV0YWNoKHZvaWQgKnVwc3RyZWFtLCBzdHJ1Y3Qgc2ZwX2J1cyAqYnVzKQorK3sKKysJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtOworKworKwlpZiAocGh5ZGV2LT5hdHRhY2hlZF9kZXYpCisrCQlwaHlkZXYtPmF0dGFjaGVkX2Rldi0+c2ZwX2J1cyA9IE5VTEw7CisrCXBoeWRldi0+c2ZwX2J1c19hdHRhY2hlZCA9IGZhbHNlOworK30KKytFWFBPUlRfU1lNQk9MKHBoeV9zZnBfZGV0YWNoKTsKKysKKysvKioKKysgKiBwaHlfc2ZwX3Byb2JlIC0gcHJvYmUgZm9yIGEgU0ZQIGNhZ2UgYXR0YWNoZWQgdG8gdGhpcyBQSFkgZGV2aWNlCisrICogQHBoeWRldjogUG9pbnRlciB0byBwaHlfZGV2aWNlCisrICogQG9wczogU0ZQJ3MgdXBzdHJlYW0gb3BlcmF0aW9ucworKyAqLworK2ludCBwaHlfc2ZwX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCisrCQkgIGNvbnN0IHN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzICpvcHMpCisreworKwlzdHJ1Y3Qgc2ZwX2J1cyAqYnVzOworKwlpbnQgcmV0OworKworKwlpZiAocGh5ZGV2LT5tZGlvLmRldi5md25vZGUpIHsKKysJCWJ1cyA9IHNmcF9idXNfZmluZF9md25vZGUocGh5ZGV2LT5tZGlvLmRldi5md25vZGUpOworKwkJaWYgKElTX0VSUihidXMpKQorKwkJCXJldHVybiBQVFJfRVJSKGJ1cyk7CisrCisrCQlwaHlkZXYtPnNmcF9idXMgPSBidXM7CisrCisrCQlyZXQgPSBzZnBfYnVzX2FkZF91cHN0cmVhbShidXMsIHBoeWRldiwgb3BzKTsKKysJCXNmcF9idXNfcHV0KGJ1cyk7CisrCX0KKysJcmV0dXJuIDA7CisrfQorK0VYUE9SVF9TWU1CT0wocGh5X3NmcF9wcm9iZSk7CisrCisrLyoqCisgICogcGh5X2F0dGFjaF9kaXJlY3QgLSBhdHRhY2ggYSBuZXR3b3JrIGRldmljZSB0byBhIGdpdmVuIFBIWSBkZXZpY2UgcG9pbnRlcgorICAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRvIGF0dGFjaAorICAqIEBwaHlkZXY6IFBvaW50ZXIgdG8gcGh5X2RldmljZSB0byBhdHRhY2gKK0BAIC0xMjYxLDYgKzEzMjEsOSBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UKKyAJCWRldi0+cGh5ZGV2ID0gcGh5ZGV2OworIAl9CisgCisrCWlmIChwaHlkZXYtPnNmcF9idXNfYXR0YWNoZWQpCisrCQlkZXYtPnNmcF9idXMgPSBwaHlkZXYtPnNmcF9idXM7CisrCisgCS8qIFNvbWUgRXRoZXJuZXQgZHJpdmVycyB0cnkgdG8gY29ubmVjdCB0byBhIFBIWSBkZXZpY2UgYmVmb3JlCisgCSAqIGNhbGxpbmcgcmVnaXN0ZXJfbmV0ZGV2aWNlKCkgLT4gbmV0ZGV2X3JlZ2lzdGVyX2tvYmplY3QoKSBhbmQKKyAJICogZG9lcyB0aGUgZGV2LT5kZXYua29iaiBpbml0aWFsaXphdGlvbi4gSGVyZSB3ZSBvbmx5IGNoZWNrIGZvcgorQEAgLTIyOTEsNiArMjM1NCw5IEBAIHN0YXRpYyBpbnQgcGh5X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYKKyAJcGh5ZGV2LT5zdGF0ZSA9IFBIWV9ET1dOOworIAltdXRleF91bmxvY2soJnBoeWRldi0+bG9jayk7CisgCisrCXNmcF9idXNfZGVsX3Vwc3RyZWFtKHBoeWRldi0+c2ZwX2J1cyk7CisrCXBoeWRldi0+c2ZwX2J1cyA9IE5VTEw7CisrCisgCWlmIChwaHlkZXYtPmRydiAmJiBwaHlkZXYtPmRydi0+cmVtb3ZlKSB7CisgCQlwaHlkZXYtPmRydi0+cmVtb3ZlKHBoeWRldik7CisgCistLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oCisrKysgYi9pbmNsdWRlL2xpbnV4L3BoeS5oCitAQCAtMjAzLDYgKzIwMyw4IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqcGh5X21vZGVzKHBoeV8KKyAKKyBzdHJ1Y3QgZGV2aWNlOworIHN0cnVjdCBwaHlsaW5rOworK3N0cnVjdCBzZnBfYnVzOworK3N0cnVjdCBzZnBfdXBzdHJlYW1fb3BzOworIHN0cnVjdCBza19idWZmOworIAorIC8qCitAQCAtMzQzLDYgKzM0NSw4IEBAIHN0cnVjdCBwaHlfYzQ1X2RldmljZV9pZHMgeworICAqIGRldl9mbGFnczogRGV2aWNlLXNwZWNpZmljIGZsYWdzIHVzZWQgYnkgdGhlIFBIWSBkcml2ZXIuCisgICogaXJxOiBJUlEgbnVtYmVyIG9mIHRoZSBQSFkncyBpbnRlcnJ1cHQgKC0xIGlmIG5vbmUpCisgICogcGh5X3RpbWVyOiBUaGUgdGltZXIgZm9yIGhhbmRsaW5nIHRoZSBzdGF0ZSBtYWNoaW5lCisrICogc2ZwX2J1c19hdHRhY2hlZDogZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIFNGUCBidXMgaGFzIGJlZW4gYXR0YWNoZWQKKysgKiBzZnBfYnVzOiBTRlAgYnVzIGF0dGFjaGVkIHRvIHRoaXMgUEhZJ3MgZmliZXIgcG9ydAorICAqIGF0dGFjaGVkX2RldjogVGhlIGF0dGFjaGVkIGVuZXQgZHJpdmVyJ3MgZGV2aWNlIGluc3RhbmNlIHB0cgorICAqIGFkanVzdF9saW5rOiBDYWxsYmFjayBmb3IgdGhlIGVuZXQgY29udHJvbGxlciB0byByZXNwb25kIHRvCisgICogY2hhbmdlcyBpbiB0aGUgbGluayBzdGF0ZS4KK0BAIC00MzQsNiArNDM4LDkgQEAgc3RydWN0IHBoeV9kZXZpY2UgeworIAorIAlzdHJ1Y3QgbXV0ZXggbG9jazsKKyAKKysJLyogVGhpcyBtYXkgYmUgbW9kaWZpZWQgdW5kZXIgdGhlIHJ0bmwgbG9jayAqLworKwlib29sIHNmcF9idXNfYXR0YWNoZWQ7CisrCXN0cnVjdCBzZnBfYnVzICpzZnBfYnVzOworIAlzdHJ1Y3QgcGh5bGluayAqcGh5bGluazsKKyAJc3RydWN0IG5ldF9kZXZpY2UgKmF0dGFjaGVkX2RldjsKKyAKK0BAIC0xMDIzLDYgKzEwMzAsMTAgQEAgaW50IHBoeV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZQorIGludCBwaHlfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOworIGludCBfX3BoeV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CisgaW50IHBoeV9sb29wYmFjayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSk7Cisrdm9pZCBwaHlfc2ZwX2F0dGFjaCh2b2lkICp1cHN0cmVhbSwgc3RydWN0IHNmcF9idXMgKmJ1cyk7Cisrdm9pZCBwaHlfc2ZwX2RldGFjaCh2b2lkICp1cHN0cmVhbSwgc3RydWN0IHNmcF9idXMgKmJ1cyk7CisraW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKKysJICAgICAgICAgIGNvbnN0IHN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzICpvcHMpOworIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlfYXR0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1c19pZCwKKyAJCQkgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTsKKyBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5X2ZpbmRfZmlyc3Qoc3RydWN0IG1paV9idXMgKmJ1cyk7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzM4LXY1LjUtbmV0LXBoeS1tYXJ2ZWxsMTBnLWFkZC1TRlAtc3VwcG9ydC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83MzgtdjUuNS1uZXQtcGh5LW1hcnZlbGwxMGctYWRkLVNGUC1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYTY2NmEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzM4LXY1LjUtbmV0LXBoeS1tYXJ2ZWxsMTBnLWFkZC1TRlAtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDY3IEBACitGcm9tIDA4MzZkOWZiNDFlZDkwMDkwZWY0YWYwZDdhYmU3ODRlZTc3MDZmODAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorRGF0ZTogRnJpLCAxNCBBcHIgMjAxNyAxNDoyMToyNSArMDEwMAorU3ViamVjdDogW1BBVENIIDYzNi82NjBdIG5ldDogcGh5OiBtYXJ2ZWxsMTBnOiBhZGQgU0ZQKyBzdXBwb3J0CisKK0FkZCBzdXBwb3J0IGZvciBTRlArIGNhZ2VzIHRvIHRoZSBNYXJ2ZWxsIDEwRyBQSFkgZHJpdmVyLiBUaGlzIGlzCitzbGlnaHRseSBjb21wbGljYXRlZCBieSB0aGUgd2F5IHBoeWxpYiB3b3JrcyBpbiB0aGF0IHdlIG5lZWQgdG8gdXNlCithIG11bHRpLXN0ZXAgcHJvY2VzcyB0byBhdHRhY2ggdGhlIFNGUCBidXMsIGFuZCB3ZSBhbHNvIG5lZWQgdG8gdHJhY2sKK3RoZSBwaHlsaW5rIHN0YXRlIG1hY2hpbmUgdG8ga25vdyB3aGVuIHRoZSBtb2R1bGUncyB0cmFuc21pdCBkaXNhYmxlCitzaWduYWwgc2hvdWxkIGNoYW5nZSBzdGF0ZS4KKworV2l0aCBhcHByb3ByaWF0ZSBEVCBjaGFuZ2VzLCB0aGlzIGFsbG93cyB0aGUgU0ZQKyBjYW5nZXMgb24gdGhlCitNYWNjaGlhdG9iaW4gcGxhdGZvcm0gdG8gYmUgZnVuY3Rpb25hbC4KKworU2lnbmVkLW9mZi1ieTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KKy0tLQorIGRyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsMTBnLmMgfCAyNSArKysrKysrKysrKysrKysrKysrKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDI0IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworLS0tIGEvZHJpdmVycy9uZXQvcGh5L21hcnZlbGwxMGcuYworKysrIGIvZHJpdmVycy9uZXQvcGh5L21hcnZlbGwxMGcuYworQEAgLTI2LDYgKzI2LDcgQEAKKyAjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KKyAjaW5jbHVkZSA8bGludXgvbWFydmVsbF9waHkuaD4KKyAjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisrI2luY2x1ZGUgPGxpbnV4L3NmcC5oPgorIAorICNkZWZpbmUgTVZfUEhZX0FMQVNLQV9OQlRfUVVJUktfTUFTSwkweGZmZmZmZmZlCisgI2RlZmluZSBNVl9QSFlfQUxBU0tBX05CVF9RVUlSS19SRVYJKE1BUlZFTExfUEhZX0lEXzg4WDMzMTAgfCAweGEpCitAQCAtMjA2LDYgKzIwNywyOCBAQCBzdGF0aWMgaW50IG12MzMxMF9od21vbl9wcm9iZShzdHJ1Y3QgcGh5CisgfQorICNlbmRpZgorIAorK3N0YXRpYyBpbnQgbXYzMzEwX3NmcF9pbnNlcnQodm9pZCAqdXBzdHJlYW0sIGNvbnN0IHN0cnVjdCBzZnBfZWVwcm9tX2lkICppZCkKKyt7CisrCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB1cHN0cmVhbTsKKysJX19FVEhUT09MX0RFQ0xBUkVfTElOS19NT0RFX01BU0soc3VwcG9ydCkgPSB7IDAsIH07CisrCXBoeV9pbnRlcmZhY2VfdCBpZmFjZTsKKysKKysJc2ZwX3BhcnNlX3N1cHBvcnQocGh5ZGV2LT5zZnBfYnVzLCBpZCwgc3VwcG9ydCk7CisrCWlmYWNlID0gc2ZwX3NlbGVjdF9pbnRlcmZhY2UocGh5ZGV2LT5zZnBfYnVzLCBpZCwgc3VwcG9ydCk7CisrCisrCWlmIChpZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfMTBHS1IpIHsKKysJCWRldl9lcnIoJnBoeWRldi0+bWRpby5kZXYsICJpbmNvbXBhdGlibGUgU0ZQIG1vZHVsZSBpbnNlcnRlZFxuIik7CisrCQlyZXR1cm4gLUVJTlZBTDsKKysJfQorKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzIG12MzMxMF9zZnBfb3BzID0geworKwkuYXR0YWNoID0gcGh5X3NmcF9hdHRhY2gsCisrCS5kZXRhY2ggPSBwaHlfc2ZwX2RldGFjaCwKKysJLm1vZHVsZV9pbnNlcnQgPSBtdjMzMTBfc2ZwX2luc2VydCwKKyt9OworKworIHN0YXRpYyBpbnQgbXYzMzEwX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCisgeworIAlzdHJ1Y3QgbXYzMzEwX3ByaXYgKnByaXY7CitAQCAtMjM2LDcgKzI1OSw3IEBAIHN0YXRpYyBpbnQgbXYzMzEwX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWMKKyAJaWYgKHJldCkKKyAJCXJldHVybiByZXQ7CisgCistCXJldHVybiAwOworKwlyZXR1cm4gcGh5X3NmcF9wcm9iZShwaHlkZXYsICZtdjMzMTBfc2ZwX29wcyk7CisgfQorIAorIHN0YXRpYyBpbnQgbXYzMzEwX3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83MzktdjUuNS1uZXQtcGh5bGluay11cGRhdGUtdG8tdXNlLXBoeV9zdXBwb3J0X2FzeW1fcGF1c2UucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzM5LXY1LjUtbmV0LXBoeWxpbmstdXBkYXRlLXRvLXVzZS1waHlfc3VwcG9ydF9hc3ltX3BhdXNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YTgyMTQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzM5LXY1LjUtbmV0LXBoeWxpbmstdXBkYXRlLXRvLXVzZS1waHlfc3VwcG9ydF9hc3ltX3BhdXNlLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK0Zyb20gMDlkN2Q4Mzk1ZWM2MWZiYTQzOTJiMzViYWE2ZjcxYzRlMzY0ODlkZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CitEYXRlOiBGcmksIDggTm92IDIwMTkgMTU6MTg6MDIgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCA2MzcvNjYwXSBuZXQ6IHBoeWxpbms6IHVwZGF0ZSB0byB1c2UgcGh5X3N1cHBvcnRfYXN5bV9wYXVzZSgpCisKK1VzZSBwaHlfc3VwcG9ydF9hc3ltX3BhdXNlKCkgcmF0aGVyIHRoYW4gb3Blbi1jb2RpbmcgaXQuCisKK1NpZ25lZC1vZmYtYnk6IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CistLS0KKyBkcml2ZXJzL25ldC9waHkvcGh5bGluay5jIHwgMTcgKysrKysrKy0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYworKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYworQEAgLTcxOCwxMSArNzE4LDYgQEAgc3RhdGljIGludCBwaHlsaW5rX2JyaW5ndXBfcGh5KHN0cnVjdCBwaAorIAlfX0VUSFRPT0xfREVDTEFSRV9MSU5LX01PREVfTUFTSyhzdXBwb3J0ZWQpOworIAlpbnQgcmV0OworIAorLQltZW1zZXQoJmNvbmZpZywgMCwgc2l6ZW9mKGNvbmZpZykpOworLQlsaW5rbW9kZV9jb3B5KHN1cHBvcnRlZCwgcGh5LT5zdXBwb3J0ZWQpOworLQlsaW5rbW9kZV9jb3B5KGNvbmZpZy5hZHZlcnRpc2luZywgcGh5LT5hZHZlcnRpc2luZyk7CistCWNvbmZpZy5pbnRlcmZhY2UgPSBwbC0+bGlua19jb25maWcuaW50ZXJmYWNlOworLQorIAkvKgorIAkgKiBUaGlzIGlzIHRoZSBuZXcgd2F5IG9mIGRlYWxpbmcgd2l0aCBmbG93IGNvbnRyb2wgZm9yIFBIWXMsCisgCSAqIGFzIGRlc2NyaWJlZCBieSBUaW11ciBUYWJpIGluIGNvbW1pdCA1MjllZDEyNzUyNjMgKCJuZXQ6IHBoeToKK0BAIC03MzAsMTAgKzcyNSwxMiBAQCBzdGF0aWMgaW50IHBoeWxpbmtfYnJpbmd1cF9waHkoc3RydWN0IHBoCisgCSAqIHVzaW5nIG91ciB2YWxpZGF0ZSBjYWxsIHRvIHRoZSBNQUMsIHdlIHJlbHkgdXBvbiB0aGUgTUFDCisgCSAqIGNsZWFyaW5nIHRoZSBiaXRzIGZyb20gYm90aCBzdXBwb3J0ZWQgYW5kIGFkdmVydGlzaW5nIGZpZWxkcy4KKyAJICovCistCWlmIChwaHlsaW5rX3Rlc3Qoc3VwcG9ydGVkLCBQYXVzZSkpCistCQlwaHlsaW5rX3NldChjb25maWcuYWR2ZXJ0aXNpbmcsIFBhdXNlKTsKKy0JaWYgKHBoeWxpbmtfdGVzdChzdXBwb3J0ZWQsIEFzeW1fUGF1c2UpKQorLQkJcGh5bGlua19zZXQoY29uZmlnLmFkdmVydGlzaW5nLCBBc3ltX1BhdXNlKTsKKysJcGh5X3N1cHBvcnRfYXN5bV9wYXVzZShwaHkpOworKworKwltZW1zZXQoJmNvbmZpZywgMCwgc2l6ZW9mKGNvbmZpZykpOworKwlsaW5rbW9kZV9jb3B5KHN1cHBvcnRlZCwgcGh5LT5zdXBwb3J0ZWQpOworKwlsaW5rbW9kZV9jb3B5KGNvbmZpZy5hZHZlcnRpc2luZywgcGh5LT5hZHZlcnRpc2luZyk7CisrCWNvbmZpZy5pbnRlcmZhY2UgPSBwbC0+bGlua19jb25maWcuaW50ZXJmYWNlOworIAorIAlyZXQgPSBwaHlsaW5rX3ZhbGlkYXRlKHBsLCBzdXBwb3J0ZWQsICZjb25maWcpOworIAlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40Lzc0NC12NS41LW5ldC1zZnAtc29mdC1zdGF0dXMtYW5kLWNvbnRyb2wtc3VwcG9ydC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83NDQtdjUuNS1uZXQtc2ZwLXNvZnQtc3RhdHVzLWFuZC1jb250cm9sLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJjOWY2NQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83NDQtdjUuNS1uZXQtc2ZwLXNvZnQtc3RhdHVzLWFuZC1jb250cm9sLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwyMjUgQEAKK0Zyb20gNDBlMGIzYjE1ZjdkYTkyZTZiMDY1MjkyYjE0YWY3YjliZmIxYzZlMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CitEYXRlOiBGcmksIDEzIFNlcCAyMDE5IDIzOjAwOjM1ICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggNjQyLzY2MF0gbmV0OiBzZnA6IHNvZnQgc3RhdHVzIGFuZCBjb250cm9sIHN1cHBvcnQKKworQWRkIHN1cHBvcnQgZm9yIHRoZSBzb2Z0IHN0YXR1cyBhbmQgY29udHJvbCByZWdpc3Rlciwgd2hpY2ggYWxsb3dzCitUWF9GQVVMVCBhbmQgUlhfTE9TIHRvIGJlIG1vbml0b3JlZCBhbmQgVFhfRElTQUJMRSB0byBiZSBzZXQuICBXZQorbWFrZSB1c2Ugb2YgdGhpcyB3aGVuIHRoZSBib2FyZCBkb2VzIG5vdCBzdXBwb3J0IEdQSU9zIGZvciB0aGVzZQorc2lnbmFscy4KKworU2lnbmVkLW9mZi1ieTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KKy0tLQorIGRyaXZlcnMvbmV0L3BoeS9zZnAuYyB8IDExMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0KKyBpbmNsdWRlL2xpbnV4L3NmcC5oICAgfCAgIDQgKysKKyAyIGZpbGVzIGNoYW5nZWQsIDk0IGluc2VydGlvbnMoKyksIDIwIGRlbGV0aW9ucygtKQorCistLS0gYS9kcml2ZXJzL25ldC9waHkvc2ZwLmMKKysrKyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuYworQEAgLTIwMSw3ICsyMDEsMTAgQEAgc3RydWN0IHNmcCB7CisgCXN0cnVjdCBncGlvX2Rlc2MgKmdwaW9bR1BJT19NQVhdOworIAlpbnQgZ3Bpb19pcnFbR1BJT19NQVhdOworIAorKwlib29sIG5lZWRfcG9sbDsKKysKKyAJc3RydWN0IG11dGV4IHN0X211dGV4OwkJCS8qIFByb3RlY3RzIHN0YXRlICovCisrCXVuc2lnbmVkIGludCBzdGF0ZV9zb2Z0X21hc2s7CisgCXVuc2lnbmVkIGludCBzdGF0ZTsKKyAJc3RydWN0IGRlbGF5ZWRfd29yayBwb2xsOworIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHRpbWVvdXQ7CitAQCAtMzk1LDI0ICszOTgsOTAgQEAgc3RhdGljIGludCBzZnBfaTJjX2NvbmZpZ3VyZShzdHJ1Y3Qgc2ZwCisgfQorIAorIC8qIEludGVyZmFjZSAqLworLXN0YXRpYyB1bnNpZ25lZCBpbnQgc2ZwX2dldF9zdGF0ZShzdHJ1Y3Qgc2ZwICpzZnApCisrc3RhdGljIGludCBzZnBfcmVhZChzdHJ1Y3Qgc2ZwICpzZnAsIGJvb2wgYTIsIHU4IGFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKKyB7CistCXJldHVybiBzZnAtPmdldF9zdGF0ZShzZnApOworKwlyZXR1cm4gc2ZwLT5yZWFkKHNmcCwgYTIsIGFkZHIsIGJ1ZiwgbGVuKTsKKyB9CisgCistc3RhdGljIHZvaWQgc2ZwX3NldF9zdGF0ZShzdHJ1Y3Qgc2ZwICpzZnAsIHVuc2lnbmVkIGludCBzdGF0ZSkKKytzdGF0aWMgaW50IHNmcF93cml0ZShzdHJ1Y3Qgc2ZwICpzZnAsIGJvb2wgYTIsIHU4IGFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKKyB7CistCXNmcC0+c2V0X3N0YXRlKHNmcCwgc3RhdGUpOworKwlyZXR1cm4gc2ZwLT53cml0ZShzZnAsIGEyLCBhZGRyLCBidWYsIGxlbik7CisgfQorIAorLXN0YXRpYyBpbnQgc2ZwX3JlYWQoc3RydWN0IHNmcCAqc2ZwLCBib29sIGEyLCB1OCBhZGRyLCB2b2lkICpidWYsIHNpemVfdCBsZW4pCisrc3RhdGljIHVuc2lnbmVkIGludCBzZnBfc29mdF9nZXRfc3RhdGUoc3RydWN0IHNmcCAqc2ZwKQorIHsKKy0JcmV0dXJuIHNmcC0+cmVhZChzZnAsIGEyLCBhZGRyLCBidWYsIGxlbik7CisrCXVuc2lnbmVkIGludCBzdGF0ZSA9IDA7CisrCXU4IHN0YXR1czsKKysKKysJaWYgKHNmcF9yZWFkKHNmcCwgdHJ1ZSwgU0ZQX1NUQVRVUywgJnN0YXR1cywgc2l6ZW9mKHN0YXR1cykpID09CisrCQkgICAgIHNpemVvZihzdGF0dXMpKSB7CisrCQlpZiAoc3RhdHVzICYgU0ZQX1NUQVRVU19SWF9MT1MpCisrCQkJc3RhdGUgfD0gU0ZQX0ZfTE9TOworKwkJaWYgKHN0YXR1cyAmIFNGUF9TVEFUVVNfVFhfRkFVTFQpCisrCQkJc3RhdGUgfD0gU0ZQX0ZfVFhfRkFVTFQ7CisrCX0KKysKKysJcmV0dXJuIHN0YXRlICYgc2ZwLT5zdGF0ZV9zb2Z0X21hc2s7CisgfQorIAorLXN0YXRpYyBpbnQgc2ZwX3dyaXRlKHN0cnVjdCBzZnAgKnNmcCwgYm9vbCBhMiwgdTggYWRkciwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQorK3N0YXRpYyB2b2lkIHNmcF9zb2Z0X3NldF9zdGF0ZShzdHJ1Y3Qgc2ZwICpzZnAsIHVuc2lnbmVkIGludCBzdGF0ZSkKKyB7CistCXJldHVybiBzZnAtPndyaXRlKHNmcCwgYTIsIGFkZHIsIGJ1ZiwgbGVuKTsKKysJdTggc3RhdHVzOworKworKwlpZiAoc2ZwX3JlYWQoc2ZwLCB0cnVlLCBTRlBfU1RBVFVTLCAmc3RhdHVzLCBzaXplb2Yoc3RhdHVzKSkgPT0KKysJCSAgICAgc2l6ZW9mKHN0YXR1cykpIHsKKysJCWlmIChzdGF0ZSAmIFNGUF9GX1RYX0RJU0FCTEUpCisrCQkJc3RhdHVzIHw9IFNGUF9TVEFUVVNfVFhfRElTQUJMRV9GT1JDRTsKKysJCWVsc2UKKysJCQlzdGF0dXMgJj0gflNGUF9TVEFUVVNfVFhfRElTQUJMRV9GT1JDRTsKKysKKysJCXNmcF93cml0ZShzZnAsIHRydWUsIFNGUF9TVEFUVVMsICZzdGF0dXMsIHNpemVvZihzdGF0dXMpKTsKKysJfQorK30KKysKKytzdGF0aWMgdm9pZCBzZnBfc29mdF9zdGFydF9wb2xsKHN0cnVjdCBzZnAgKnNmcCkKKyt7CisrCWNvbnN0IHN0cnVjdCBzZnBfZWVwcm9tX2lkICppZCA9ICZzZnAtPmlkOworKworKwlzZnAtPnN0YXRlX3NvZnRfbWFzayA9IDA7CisrCWlmIChpZC0+ZXh0LmVuaG9wdHMgJiBTRlBfRU5IT1BUU19TT0ZUX1RYX0RJU0FCTEUgJiYKKysJICAgICFzZnAtPmdwaW9bR1BJT19UWF9ESVNBQkxFXSkKKysJCXNmcC0+c3RhdGVfc29mdF9tYXNrIHw9IFNGUF9GX1RYX0RJU0FCTEU7CisrCWlmIChpZC0+ZXh0LmVuaG9wdHMgJiBTRlBfRU5IT1BUU19TT0ZUX1RYX0ZBVUxUICYmCisrCSAgICAhc2ZwLT5ncGlvW0dQSU9fVFhfRkFVTFRdKQorKwkJc2ZwLT5zdGF0ZV9zb2Z0X21hc2sgfD0gU0ZQX0ZfVFhfRkFVTFQ7CisrCWlmIChpZC0+ZXh0LmVuaG9wdHMgJiBTRlBfRU5IT1BUU19TT0ZUX1JYX0xPUyAmJgorKwkgICAgIXNmcC0+Z3Bpb1tHUElPX0xPU10pCisrCQlzZnAtPnN0YXRlX3NvZnRfbWFzayB8PSBTRlBfRl9MT1M7CisrCisrCWlmIChzZnAtPnN0YXRlX3NvZnRfbWFzayAmIChTRlBfRl9MT1MgfCBTRlBfRl9UWF9GQVVMVCkgJiYKKysJICAgICFzZnAtPm5lZWRfcG9sbCkKKysJCW1vZF9kZWxheWVkX3dvcmsoc3lzdGVtX3dxLCAmc2ZwLT5wb2xsLCBwb2xsX2ppZmZpZXMpOworK30KKysKKytzdGF0aWMgdm9pZCBzZnBfc29mdF9zdG9wX3BvbGwoc3RydWN0IHNmcCAqc2ZwKQorK3sKKysJc2ZwLT5zdGF0ZV9zb2Z0X21hc2sgPSAwOworK30KKysKKytzdGF0aWMgdW5zaWduZWQgaW50IHNmcF9nZXRfc3RhdGUoc3RydWN0IHNmcCAqc2ZwKQorK3sKKysJdW5zaWduZWQgaW50IHN0YXRlID0gc2ZwLT5nZXRfc3RhdGUoc2ZwKTsKKysKKysJaWYgKHN0YXRlICYgU0ZQX0ZfUFJFU0VOVCAmJgorKwkgICAgc2ZwLT5zdGF0ZV9zb2Z0X21hc2sgJiAoU0ZQX0ZfTE9TIHwgU0ZQX0ZfVFhfRkFVTFQpKQorKwkJc3RhdGUgfD0gc2ZwX3NvZnRfZ2V0X3N0YXRlKHNmcCk7CisrCisrCXJldHVybiBzdGF0ZTsKKyt9CisrCisrc3RhdGljIHZvaWQgc2ZwX3NldF9zdGF0ZShzdHJ1Y3Qgc2ZwICpzZnAsIHVuc2lnbmVkIGludCBzdGF0ZSkKKyt7CisrCXNmcC0+c2V0X3N0YXRlKHNmcCwgc3RhdGUpOworKworKwlpZiAoc3RhdGUgJiBTRlBfRl9QUkVTRU5UICYmCisrCSAgICBzZnAtPnN0YXRlX3NvZnRfbWFzayAmIFNGUF9GX1RYX0RJU0FCTEUpCisrCQlzZnBfc29mdF9zZXRfc3RhdGUoc2ZwLCBzdGF0ZSk7CisgfQorIAorIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2ZwX2NoZWNrKHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK0BAIC0xNDA3LDExICsxNDc2LDYgQEAgc3RhdGljIHZvaWQgc2ZwX3NtX2ZhdWx0KHN0cnVjdCBzZnAgKnNmcAorIAl9CisgfQorIAorLXN0YXRpYyB2b2lkIHNmcF9zbV9tb2RfaW5pdChzdHJ1Y3Qgc2ZwICpzZnApCisteworLQlzZnBfbW9kdWxlX3R4X2VuYWJsZShzZnApOworLX0KKy0KKyBzdGF0aWMgdm9pZCBzZnBfc21fcHJvYmVfZm9yX3BoeShzdHJ1Y3Qgc2ZwICpzZnApCisgeworIAkvKiBTZXR0aW5nIHRoZSBzZXJkZXMgbGluayBtb2RlIGlzIGd1ZXNzd29yazogdGhlcmUncyBubworQEAgLTE1NzQsNyArMTYzOCw3IEBAIHN0YXRpYyBpbnQgc2ZwX3NtX21vZF9wcm9iZShzdHJ1Y3Qgc2ZwICoKKyAJCSAoaW50KXNpemVvZihpZC5leHQuZGF0ZWNvZGUpLCBpZC5leHQuZGF0ZWNvZGUpOworIAorIAkvKiBDaGVjayB3aGV0aGVyIHdlIHN1cHBvcnQgdGhpcyBtb2R1bGUgKi8KKy0JaWYgKCFzZnAtPnR5cGUtPm1vZHVsZV9zdXBwb3J0ZWQoJnNmcC0+aWQpKSB7CisrCWlmICghc2ZwLT50eXBlLT5tb2R1bGVfc3VwcG9ydGVkKCZpZCkpIHsKKyAJCWRldl9lcnIoc2ZwLT5kZXYsCisgCQkJIm1vZHVsZSBpcyBub3Qgc3VwcG9ydGVkIC0gcGh5cyBpZCAweCUwMnggMHglMDJ4XG4iLAorIAkJCXNmcC0+aWQuYmFzZS5waHlzX2lkLCBzZnAtPmlkLmJhc2UucGh5c19leHRfaWQpOworQEAgLTE3NjQsNiArMTgyOCw3IEBAIHN0YXRpYyB2b2lkIHNmcF9zbV9tYWluKHN0cnVjdCBzZnAgKnNmcCwKKyAJCWlmIChzZnAtPm1vZF9waHkpCisgCQkJc2ZwX3NtX3BoeV9kZXRhY2goc2ZwKTsKKyAJCXNmcF9tb2R1bGVfdHhfZGlzYWJsZShzZnApOworKwkJc2ZwX3NvZnRfc3RvcF9wb2xsKHNmcCk7CisgCQlzZnBfc21fbmV4dChzZnAsIFNGUF9TX0RPV04sIDApOworIAkJcmV0dXJuOworIAl9CitAQCAtMTc3NSw3ICsxODQwLDEwIEBAIHN0YXRpYyB2b2lkIHNmcF9zbV9tYWluKHN0cnVjdCBzZnAgKnNmcCwKKyAJCSAgICBzZnAtPnNtX2Rldl9zdGF0ZSAhPSBTRlBfREVWX1VQKQorIAkJCWJyZWFrOworIAorLQkJc2ZwX3NtX21vZF9pbml0KHNmcCk7CisrCQlpZiAoIShzZnAtPmlkLmV4dC5kaWFnbW9uICYgU0ZQX0RJQUdNT05fQUREUk1PREUpKQorKwkJCXNmcF9zb2Z0X3N0YXJ0X3BvbGwoc2ZwKTsKKysKKysJCXNmcF9tb2R1bGVfdHhfZW5hYmxlKHNmcCk7CisgCisgCQkvKiBJbml0aWFsaXNlIHRoZSBmYXVsdCBjbGVhcmFuY2UgcmV0cmllcyAqLworIAkJc2ZwLT5zbV9yZXRyaWVzID0gNTsKK0BAIC0yMDMxLDcgKzIwOTksMTAgQEAgc3RhdGljIHZvaWQgc2ZwX3BvbGwoc3RydWN0IHdvcmtfc3RydWN0CisgCXN0cnVjdCBzZnAgKnNmcCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc2ZwLCBwb2xsLndvcmspOworIAorIAlzZnBfY2hlY2tfc3RhdGUoc2ZwKTsKKy0JbW9kX2RlbGF5ZWRfd29yayhzeXN0ZW1fd3EsICZzZnAtPnBvbGwsIHBvbGxfamlmZmllcyk7CisrCisrCWlmIChzZnAtPnN0YXRlX3NvZnRfbWFzayAmIChTRlBfRl9MT1MgfCBTRlBfRl9UWF9GQVVMVCkgfHwKKysJICAgIHNmcC0+bmVlZF9wb2xsKQorKwkJbW9kX2RlbGF5ZWRfd29yayhzeXN0ZW1fd3EsICZzZnAtPnBvbGwsIHBvbGxfamlmZmllcyk7CisgfQorIAorIHN0YXRpYyBzdHJ1Y3Qgc2ZwICpzZnBfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2KQorQEAgLTIwNzYsNyArMjE0Nyw2IEBAIHN0YXRpYyBpbnQgc2ZwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXYKKyAJY29uc3Qgc3RydWN0IHNmZl9kYXRhICpzZmY7CisgCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjOworIAlzdHJ1Y3Qgc2ZwICpzZnA7CistCWJvb2wgcG9sbCA9IGZhbHNlOworIAlpbnQgZXJyLCBpOworIAorIAlzZnAgPSBzZnBfYWxsb2MoJnBkZXYtPmRldik7CitAQCAtMjE4NCw3ICsyMjU0LDcgQEAgc3RhdGljIGludCBzZnBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldgorIAkJc2ZwLT5ncGlvX2lycVtpXSA9IGdwaW9kX3RvX2lycShzZnAtPmdwaW9baV0pOworIAkJaWYgKHNmcC0+Z3Bpb19pcnFbaV0gPCAwKSB7CisgCQkJc2ZwLT5ncGlvX2lycVtpXSA9IDA7CistCQkJcG9sbCA9IHRydWU7CisrCQkJc2ZwLT5uZWVkX3BvbGwgPSB0cnVlOworIAkJCWNvbnRpbnVlOworIAkJfQorIAorQEAgLTIxOTYsMTEgKzIyNjYsMTEgQEAgc3RhdGljIGludCBzZnBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldgorIAkJCQkJCWRldl9uYW1lKHNmcC0+ZGV2KSwgc2ZwKTsKKyAJCWlmIChlcnIpIHsKKyAJCQlzZnAtPmdwaW9faXJxW2ldID0gMDsKKy0JCQlwb2xsID0gdHJ1ZTsKKysJCQlzZnAtPm5lZWRfcG9sbCA9IHRydWU7CisgCQl9CisgCX0KKyAKKy0JaWYgKHBvbGwpCisrCWlmIChzZnAtPm5lZWRfcG9sbCkKKyAJCW1vZF9kZWxheWVkX3dvcmsoc3lzdGVtX3dxLCAmc2ZwLT5wb2xsLCBwb2xsX2ppZmZpZXMpOworIAorIAkvKiBXZSBjb3VsZCBoYXZlIGFuIGlzc3VlIGluIGNhc2VzIG5vIFR4IGRpc2FibGUgcGluIGlzIGF2YWlsYWJsZSBvcgorLS0tIGEvaW5jbHVkZS9saW51eC9zZnAuaAorKysrIGIvaW5jbHVkZS9saW51eC9zZnAuaAorQEAgLTQyOCw2ICs0MjgsMTAgQEAgZW51bSB7CisgCVNGUF9URUNfQ1VSCQkJPSAweDZjLAorIAorIAlTRlBfU1RBVFVTCQkJPSAweDZlLAorKwlTRlBfU1RBVFVTX1RYX0RJU0FCTEUJCT0gQklUKDcpLAorKwlTRlBfU1RBVFVTX1RYX0RJU0FCTEVfRk9SQ0UJPSBCSVQoNiksCisrCVNGUF9TVEFUVVNfVFhfRkFVTFQJCT0gQklUKDIpLAorKwlTRlBfU1RBVFVTX1JYX0xPUwkJPSBCSVQoMSksCisgCVNGUF9BTEFSTTAJCQk9IDB4NzAsCisgCVNGUF9BTEFSTTBfVEVNUF9ISUdICQk9IEJJVCg3KSwKKyAJU0ZQX0FMQVJNMF9URU1QX0xPVwkJPSBCSVQoNiksCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzQ1LXY1LjctbmV0LWRzYS1tdDc1MzAtYWRkLXN1cHBvcnQtZm9yLXBvcnQtbWlycm9yaW5nLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40Lzc0NS12NS43LW5ldC1kc2EtbXQ3NTMwLWFkZC1zdXBwb3J0LWZvci1wb3J0LW1pcnJvcmluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWEwNjk5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40Lzc0NS12NS43LW5ldC1kc2EtbXQ3NTMwLWFkZC1zdXBwb3J0LWZvci1wb3J0LW1pcnJvcmluZy5wYXRjaApAQCAtMCwwICsxLDEyMyBAQAorRnJvbSAzN2ZlYWI2MDc2YWE4MTZlZDcyZmU4MzY3NTlhNDg1MzUzMjQxOTE2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogREVORyBRaW5nZmFuZyA8ZHFmZXh0QGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgNiBNYXIgMjAyMCAyMDozNTozNSArMDgwMAorU3ViamVjdDogbmV0OiBkc2E6IG10NzUzMDogYWRkIHN1cHBvcnQgZm9yIHBvcnQgbWlycm9yaW5nCisKK0FkZCBzdXBwb3J0IGZvciBjb25maWd1cmluZyBwb3J0IG1pcnJvcmluZyB0aHJvdWdoIHRoZSBjbHNfbWF0Y2hhbGwKK2NsYXNzaWZpZXIuIFdlIGRvIGEgZnVsbCBpbmdyZXNzIGFuZC9vciBlZ3Jlc3MgY2FwdHVyZSB0b3dhcmRzIGEKK2NhcHR1cmUgcG9ydC4KK01UNzUzMCBzdXBwb3J0cyBvbmUgbW9uaXRvciBwb3J0IGFuZCBtdWx0aXBsZSBtaXJyb3JlZCBwb3J0cy4KKworU2lnbmVkLW9mZi1ieTogREVORyBRaW5nZmFuZyA8ZHFmZXh0QGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KKy0tLQorIGRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYyB8IDYwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIGRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuaCB8ICA3ICsrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgNjcgaW5zZXJ0aW9ucygrKQorCistLS0gYS9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMKKysrKyBiL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYworQEAgLTExNDMsNiArMTE0Myw2NCBAQCBtdDc1MzBfcG9ydF92bGFuX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqCisgCXJldHVybiAwOworIH0KKyAKKytzdGF0aWMgaW50IG10NzUzMF9wb3J0X21pcnJvcl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKKysJCQkJICBzdHJ1Y3QgZHNhX21hbGxfbWlycm9yX3RjX2VudHJ5ICptaXJyb3IsCisrCQkJCSAgYm9vbCBpbmdyZXNzKQorK3sKKysJc3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtPnByaXY7CisrCXUzMiB2YWw7CisrCisrCS8qIENoZWNrIGZvciBleGlzdGVudCBlbnRyeSAqLworKwlpZiAoKGluZ3Jlc3MgPyBwcml2LT5taXJyb3JfcnggOiBwcml2LT5taXJyb3JfdHgpICYgQklUKHBvcnQpKQorKwkJcmV0dXJuIC1FRVhJU1Q7CisrCisrCXZhbCA9IG10NzUzMF9yZWFkKHByaXYsIE1UNzUzMF9NRkMpOworKworKwkvKiBNVDc1MzAgb25seSBzdXBwb3J0cyBvbmUgbW9uaXRvciBwb3J0ICovCisrCWlmICh2YWwgJiBNSVJST1JfRU4gJiYgTUlSUk9SX1BPUlQodmFsKSAhPSBtaXJyb3ItPnRvX2xvY2FsX3BvcnQpCisrCQlyZXR1cm4gLUVFWElTVDsKKysKKysJdmFsIHw9IE1JUlJPUl9FTjsKKysJdmFsICY9IH5NSVJST1JfTUFTSzsKKysJdmFsIHw9IG1pcnJvci0+dG9fbG9jYWxfcG9ydDsKKysJbXQ3NTMwX3dyaXRlKHByaXYsIE1UNzUzMF9NRkMsIHZhbCk7CisrCisrCXZhbCA9IG10NzUzMF9yZWFkKHByaXYsIE1UNzUzMF9QQ1JfUChwb3J0KSk7CisrCWlmIChpbmdyZXNzKSB7CisrCQl2YWwgfD0gUE9SVF9SWF9NSVI7CisrCQlwcml2LT5taXJyb3JfcnggfD0gQklUKHBvcnQpOworKwl9IGVsc2UgeworKwkJdmFsIHw9IFBPUlRfVFhfTUlSOworKwkJcHJpdi0+bWlycm9yX3R4IHw9IEJJVChwb3J0KTsKKysJfQorKwltdDc1MzBfd3JpdGUocHJpdiwgTVQ3NTMwX1BDUl9QKHBvcnQpLCB2YWwpOworKworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIHZvaWQgbXQ3NTMwX3BvcnRfbWlycm9yX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAorKwkJCQkgICBzdHJ1Y3QgZHNhX21hbGxfbWlycm9yX3RjX2VudHJ5ICptaXJyb3IpCisreworKwlzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy0+cHJpdjsKKysJdTMyIHZhbDsKKysKKysJdmFsID0gbXQ3NTMwX3JlYWQocHJpdiwgTVQ3NTMwX1BDUl9QKHBvcnQpKTsKKysJaWYgKG1pcnJvci0+aW5ncmVzcykgeworKwkJdmFsICY9IH5QT1JUX1JYX01JUjsKKysJCXByaXYtPm1pcnJvcl9yeCAmPSB+QklUKHBvcnQpOworKwl9IGVsc2UgeworKwkJdmFsICY9IH5QT1JUX1RYX01JUjsKKysJCXByaXYtPm1pcnJvcl90eCAmPSB+QklUKHBvcnQpOworKwl9CisrCW10NzUzMF93cml0ZShwcml2LCBNVDc1MzBfUENSX1AocG9ydCksIHZhbCk7CisrCisrCWlmICghcHJpdi0+bWlycm9yX3J4ICYmICFwcml2LT5taXJyb3JfdHgpIHsKKysJCXZhbCA9IG10NzUzMF9yZWFkKHByaXYsIE1UNzUzMF9NRkMpOworKwkJdmFsICY9IH5NSVJST1JfRU47CisrCQltdDc1MzBfd3JpdGUocHJpdiwgTVQ3NTMwX01GQywgdmFsKTsKKysJfQorK30KKysKKyBzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sCisgbXRrX2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCkKKyB7CitAQCAtMTUyMCw2ICsxNTc4LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBtdDc1MworIAkucG9ydF92bGFuX3ByZXBhcmUJPSBtdDc1MzBfcG9ydF92bGFuX3ByZXBhcmUsCisgCS5wb3J0X3ZsYW5fYWRkCQk9IG10NzUzMF9wb3J0X3ZsYW5fYWRkLAorIAkucG9ydF92bGFuX2RlbAkJPSBtdDc1MzBfcG9ydF92bGFuX2RlbCwKKysJLnBvcnRfbWlycm9yX2FkZAk9IG10NzUzMF9wb3J0X21pcnJvcl9hZGQsCisrCS5wb3J0X21pcnJvcl9kZWwJPSBtdDc1MzBfcG9ydF9taXJyb3JfZGVsLAorIAkucGh5bGlua192YWxpZGF0ZQk9IG10NzUzMF9waHlsaW5rX3ZhbGlkYXRlLAorIAkucGh5bGlua19tYWNfbGlua19zdGF0ZSA9IG10NzUzMF9waHlsaW5rX21hY19saW5rX3N0YXRlLAorIAkucGh5bGlua19tYWNfY29uZmlnCT0gbXQ3NTMwX3BoeWxpbmtfbWFjX2NvbmZpZywKKy0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuaAorKysrIGIvZHJpdmVycy9uZXQvZHNhL210NzUzMC5oCitAQCAtMzcsNiArMzcsOSBAQCBlbnVtIHsKKyAjZGVmaW5lICBDUFVfRU4JCQkJQklUKDcpCisgI2RlZmluZSAgQ1BVX1BPUlQoeCkJCQkoKHgpIDw8IDQpCisgI2RlZmluZSAgQ1BVX01BU0sJCQkoMHhmIDw8IDQpCisrI2RlZmluZSAgTUlSUk9SX0VOCQkJQklUKDMpCisrI2RlZmluZSAgTUlSUk9SX1BPUlQoeCkJCQkoKHgpICYgMHg3KQorKyNkZWZpbmUgIE1JUlJPUl9NQVNLCQkJMHg3CisgCisgLyogUmVnaXN0ZXJzIGZvciBhZGRyZXNzIHRhYmxlIGFjY2VzcyAqLworICNkZWZpbmUgTVQ3NTMwX0FUQTEJCQkweDc0CitAQCAtMTQyLDYgKzE0NSw4IEBAIGVudW0gbXQ3NTMwX3N0cF9zdGF0ZSB7CisgCisgLyogUmVnaXN0ZXIgZm9yIHBvcnQgY29udHJvbCAqLworICNkZWZpbmUgTVQ3NTMwX1BDUl9QKHgpCQkJKDB4MjAwNCArICgoeCkgKiAweDEwMCkpCisrI2RlZmluZSAgUE9SVF9UWF9NSVIJCQlCSVQoOSkKKysjZGVmaW5lICBQT1JUX1JYX01JUgkJCUJJVCg4KQorICNkZWZpbmUgIFBPUlRfVkxBTih4KQkJCSgoeCkgJiAweDMpCisgCisgZW51bSBtdDc1MzBfcG9ydF9tb2RlIHsKK0BAIC00NjQsNiArNDY5LDggQEAgc3RydWN0IG10NzUzMF9wcml2IHsKKyAJcGh5X2ludGVyZmFjZV90CQlwNl9pbnRlcmZhY2U7CisgCXBoeV9pbnRlcmZhY2VfdAkJcDVfaW50ZXJmYWNlOworIAl1bnNpZ25lZCBpbnQJCXA1X2ludGZfc2VsOworKwl1OAkJCW1pcnJvcl9yeDsKKysJdTgJCQltaXJyb3JfdHg7CisgCisgCXN0cnVjdCBtdDc1MzBfcG9ydAlwb3J0c1tNVDc1MzBfTlVNX1BPUlRTXTsKKyAJLyogcHJvdGVjdCBhbW9uZyBwcm9jZXNzZXMgZm9yIHJlZ2lzdGVycyBhY2Nlc3MqLwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40Lzc0Ni12NS41LW5ldC1kc2EtbXY4OGU2eHh4LVNwbGl0LW1vbml0b3ItcG9ydC1jb25maWd1cmF0aW9uLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40Lzc0Ni12NS41LW5ldC1kc2EtbXY4OGU2eHh4LVNwbGl0LW1vbml0b3ItcG9ydC1jb25maWd1cmF0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MzE3ODcKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzQ2LXY1LjUtbmV0LWRzYS1tdjg4ZTZ4eHgtU3BsaXQtbW9uaXRvci1wb3J0LWNvbmZpZ3VyYXRpb24ucGF0Y2gKQEAgLTAsMCArMSwxNDkgQEAKK0Zyb20gNWM3NGM1NGNlNmZmZjcxOTk5OWZmNDhmMTI4Y2Y0MTUwZWU0ZmY1OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEl3YW4gUiBUaW1tZXIgPGlydGltbWVyQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgNyBOb3YgMjAxOSAyMjoxMToxMyArMDEwMAorU3ViamVjdDogW1BBVENIXSBuZXQ6IGRzYTogbXY4OGU2eHh4OiBTcGxpdCBtb25pdG9yIHBvcnQgY29uZmlndXJhdGlvbgorCitTZXBhcmF0ZSB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgZWdyZXNzIGFuZCBpbmdyZXNzIG1vbml0b3IgcG9ydC4KK1RoaXMgYWxsb3dzIHRoZSBwb3J0IG1pcnJvciBmdW5jdGlvbmFsaXR5IHRvIGRvIGluZ3Jlc3MgYW5kIGVncmVzcworcG9ydCBtaXJyb3JpbmcgdG8gc2VwYXJhdGUgcG9ydHMuCisKK1NpZ25lZC1vZmYtYnk6IEl3YW4gUiBUaW1tZXIgPGlydGltbWVyQGdtYWlsLmNvbT4KK1Jldmlld2VkLWJ5OiBBbmRyZXcgTHVubiA8YW5kcmV3QGx1bm4uY2g+CitTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CistLS0KKyBkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYyAgICB8ICA5ICsrKysrKy0KKyBkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuaCAgICB8ICA5ICsrKysrKy0KKyBkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2dsb2JhbDEuYyB8IDQyICsrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tCisgZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9nbG9iYWwxLmggfCAgOCArKysrLS0KKyA0IGZpbGVzIGNoYW5nZWQsIDUyIGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9ucygtKQorCistLS0gYS9kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYworKysrIGIvZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMKK0BAIC0yMzg0LDcgKzIzODQsMTQgQEAgc3RhdGljIGludCBtdjg4ZTZ4eHhfc2V0dXBfdXBzdHJlYW1fcG9ydAorIAorIAkJaWYgKGNoaXAtPmluZm8tPm9wcy0+c2V0X2VncmVzc19wb3J0KSB7CisgCQkJZXJyID0gY2hpcC0+aW5mby0+b3BzLT5zZXRfZWdyZXNzX3BvcnQoY2hpcCwKKy0JCQkJCQkJICAgICAgIHVwc3RyZWFtX3BvcnQpOworKwkJCQkJCU1WODhFNlhYWF9FR1JFU1NfRElSX0lOR1JFU1MsCisrCQkJCQkJdXBzdHJlYW1fcG9ydCk7CisrCQkJaWYgKGVycikKKysJCQkJcmV0dXJuIGVycjsKKysKKysJCQllcnIgPSBjaGlwLT5pbmZvLT5vcHMtPnNldF9lZ3Jlc3NfcG9ydChjaGlwLAorKwkJCQkJCU1WODhFNlhYWF9FR1JFU1NfRElSX0VHUkVTUywKKysJCQkJCQl1cHN0cmVhbV9wb3J0KTsKKyAJCQlpZiAoZXJyKQorIAkJCQlyZXR1cm4gZXJyOworIAkJfQorLS0tIGEvZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmgKKysrKyBiL2RyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5oCitAQCAtMzMsNiArMzMsMTEgQEAgZW51bSBtdjg4ZTZ4eHhfZWdyZXNzX21vZGUgeworIAlNVjg4RTZYWFhfRUdSRVNTX01PREVfRVRIRVJUWVBFLAorIH07CisgCisrZW51bSBtdjg4ZTZ4eHhfZWdyZXNzX2RpcmVjdGlvbiB7CisrICAgICAgICBNVjg4RTZYWFhfRUdSRVNTX0RJUl9JTkdSRVNTLAorKyAgICAgICAgTVY4OEU2WFhYX0VHUkVTU19ESVJfRUdSRVNTLAorK307CisrCisgZW51bSBtdjg4ZTZ4eHhfZnJhbWVfbW9kZSB7CisgCU1WODhFNlhYWF9GUkFNRV9NT0RFX05PUk1BTCwKKyAJTVY4OEU2WFhYX0ZSQU1FX01PREVfRFNBLAorQEAgLTQ2NCw3ICs0NjksOSBAQCBzdHJ1Y3QgbXY4OGU2eHh4X29wcyB7CisgCWludCAoKnN0YXRzX2dldF9zdGF0cykoc3RydWN0IG12ODhlNnh4eF9jaGlwICpjaGlwLCAgaW50IHBvcnQsCisgCQkJICAgICAgIHVpbnQ2NF90ICpkYXRhKTsKKyAJaW50ICgqc2V0X2NwdV9wb3J0KShzdHJ1Y3QgbXY4OGU2eHh4X2NoaXAgKmNoaXAsIGludCBwb3J0KTsKKy0JaW50ICgqc2V0X2VncmVzc19wb3J0KShzdHJ1Y3QgbXY4OGU2eHh4X2NoaXAgKmNoaXAsIGludCBwb3J0KTsKKysJaW50ICgqc2V0X2VncmVzc19wb3J0KShzdHJ1Y3QgbXY4OGU2eHh4X2NoaXAgKmNoaXAsCisrCQkJICAgICAgIGVudW0gbXY4OGU2eHh4X2VncmVzc19kaXJlY3Rpb24gZGlyZWN0aW9uLAorKwkJCSAgICAgICBpbnQgcG9ydCk7CisgCisgI2RlZmluZSBNVjg4RTZYWFhfQ0FTQ0FERV9QT1JUX05PTkUJCTB4ZQorICNkZWZpbmUgTVY4OEU2WFhYX0NBU0NBREVfUE9SVF9NVUxUSVBMRQkJMHhmCistLS0gYS9kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2dsb2JhbDEuYworKysrIGIvZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9nbG9iYWwxLmMKK0BAIC0yOTQsNyArMjk0LDkgQEAgaW50IG12ODhlNjI1MF9nMV9pZWVlX3ByaV9tYXAoc3RydWN0IG12OAorIC8qIE9mZnNldCAweDFhOiBNb25pdG9yIENvbnRyb2wgKi8KKyAvKiBPZmZzZXQgMHgxYTogTW9uaXRvciAmIE1HTVQgQ29udHJvbCBvbiBzb21lIGRldmljZXMgKi8KKyAKKy1pbnQgbXY4OGU2MDk1X2cxX3NldF9lZ3Jlc3NfcG9ydChzdHJ1Y3QgbXY4OGU2eHh4X2NoaXAgKmNoaXAsIGludCBwb3J0KQorK2ludCBtdjg4ZTYwOTVfZzFfc2V0X2VncmVzc19wb3J0KHN0cnVjdCBtdjg4ZTZ4eHhfY2hpcCAqY2hpcCwKKysJCQkJIGVudW0gbXY4OGU2eHh4X2VncmVzc19kaXJlY3Rpb24gZGlyZWN0aW9uLAorKwkJCQkgaW50IHBvcnQpCisgeworIAl1MTYgcmVnOworIAlpbnQgZXJyOworQEAgLTMwMywxMSArMzA1LDIwIEBAIGludCBtdjg4ZTYwOTVfZzFfc2V0X2VncmVzc19wb3J0KHN0cnVjdAorIAlpZiAoZXJyKQorIAkJcmV0dXJuIGVycjsKKyAKKy0JcmVnICY9IH4oTVY4OEU2MTg1X0cxX01PTklUT1JfQ1RMX0lOR1JFU1NfREVTVF9NQVNLIHwKKy0JCSBNVjg4RTYxODVfRzFfTU9OSVRPUl9DVExfRUdSRVNTX0RFU1RfTUFTSyk7CistCistCXJlZyB8PSBwb3J0IDw8IF9fYmZfc2hmKE1WODhFNjE4NV9HMV9NT05JVE9SX0NUTF9JTkdSRVNTX0RFU1RfTUFTSykgfAorLQkJcG9ydCA8PCBfX2JmX3NoZihNVjg4RTYxODVfRzFfTU9OSVRPUl9DVExfRUdSRVNTX0RFU1RfTUFTSyk7CisrCXN3aXRjaCAoZGlyZWN0aW9uKSB7CisrCWNhc2UgTVY4OEU2WFhYX0VHUkVTU19ESVJfSU5HUkVTUzoKKysJCXJlZyAmPSBNVjg4RTYxODVfRzFfTU9OSVRPUl9DVExfSU5HUkVTU19ERVNUX01BU0s7CisrCQlyZWcgfD0gcG9ydCA8PAorKwkJICAgICAgIF9fYmZfc2hmKE1WODhFNjE4NV9HMV9NT05JVE9SX0NUTF9JTkdSRVNTX0RFU1RfTUFTSyk7CisrCQlicmVhazsKKysJY2FzZSBNVjg4RTZYWFhfRUdSRVNTX0RJUl9FR1JFU1M6CisrCQlyZWcgJj0gTVY4OEU2MTg1X0cxX01PTklUT1JfQ1RMX0VHUkVTU19ERVNUX01BU0s7CisrCQlyZWcgfD0gcG9ydCA8PAorKwkJICAgICAgIF9fYmZfc2hmKE1WODhFNjE4NV9HMV9NT05JVE9SX0NUTF9FR1JFU1NfREVTVF9NQVNLKTsKKysJCWJyZWFrOworKwlkZWZhdWx0OgorKwkJcmV0dXJuIC1FSU5WQUw7CisrCX0KKyAKKyAJcmV0dXJuIG12ODhlNnh4eF9nMV93cml0ZShjaGlwLCBNVjg4RTYxODVfRzFfTU9OSVRPUl9DVEwsIHJlZyk7CisgfQorQEAgLTM0MSwxNyArMzUyLDI0IEBAIHN0YXRpYyBpbnQgbXY4OGU2MzkwX2cxX21vbml0b3Jfd3JpdGUoc3QKKyAJcmV0dXJuIG12ODhlNnh4eF9nMV93cml0ZShjaGlwLCBNVjg4RTYzOTBfRzFfTU9OSVRPUl9NR01UX0NUTCwgcmVnKTsKKyB9CisgCistaW50IG12ODhlNjM5MF9nMV9zZXRfZWdyZXNzX3BvcnQoc3RydWN0IG12ODhlNnh4eF9jaGlwICpjaGlwLCBpbnQgcG9ydCkKKytpbnQgbXY4OGU2MzkwX2cxX3NldF9lZ3Jlc3NfcG9ydChzdHJ1Y3QgbXY4OGU2eHh4X2NoaXAgKmNoaXAsCisrCQkJCSBlbnVtIG12ODhlNnh4eF9lZ3Jlc3NfZGlyZWN0aW9uIGRpcmVjdGlvbiwKKysJCQkJIGludCBwb3J0KQorIHsKKyAJdTE2IHB0cjsKKyAJaW50IGVycjsKKyAKKy0JcHRyID0gTVY4OEU2MzkwX0cxX01PTklUT1JfTUdNVF9DVExfUFRSX0lOR1JFU1NfREVTVDsKKy0JZXJyID0gbXY4OGU2MzkwX2cxX21vbml0b3Jfd3JpdGUoY2hpcCwgcHRyLCBwb3J0KTsKKy0JaWYgKGVycikKKy0JCXJldHVybiBlcnI7CisrCXN3aXRjaCAoZGlyZWN0aW9uKSB7CisrCWNhc2UgTVY4OEU2WFhYX0VHUkVTU19ESVJfSU5HUkVTUzoKKysJCXB0ciA9IE1WODhFNjM5MF9HMV9NT05JVE9SX01HTVRfQ1RMX1BUUl9JTkdSRVNTX0RFU1Q7CisrCQlicmVhazsKKysJY2FzZSBNVjg4RTZYWFhfRUdSRVNTX0RJUl9FR1JFU1M6CisrCQlwdHIgPSBNVjg4RTYzOTBfRzFfTU9OSVRPUl9NR01UX0NUTF9QVFJfRUdSRVNTX0RFU1Q7CisrCQlicmVhazsKKysJZGVmYXVsdDoKKysJCXJldHVybiAtRUlOVkFMOworKwl9CisgCistCXB0ciA9IE1WODhFNjM5MF9HMV9NT05JVE9SX01HTVRfQ1RMX1BUUl9FR1JFU1NfREVTVDsKKyAJZXJyID0gbXY4OGU2MzkwX2cxX21vbml0b3Jfd3JpdGUoY2hpcCwgcHRyLCBwb3J0KTsKKyAJaWYgKGVycikKKyAJCXJldHVybiBlcnI7CistLS0gYS9kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2dsb2JhbDEuaAorKysrIGIvZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9nbG9iYWwxLmgKK0BAIC0yODksOCArMjg5LDEyIEBAIGludCBtdjg4ZTYwOTVfZzFfc3RhdHNfc2V0X2hpc3RvZ3JhbShzdHIKKyBpbnQgbXY4OGU2MzkwX2cxX3N0YXRzX3NldF9oaXN0b2dyYW0oc3RydWN0IG12ODhlNnh4eF9jaGlwICpjaGlwKTsKKyB2b2lkIG12ODhlNnh4eF9nMV9zdGF0c19yZWFkKHN0cnVjdCBtdjg4ZTZ4eHhfY2hpcCAqY2hpcCwgaW50IHN0YXQsIHUzMiAqdmFsKTsKKyBpbnQgbXY4OGU2eHh4X2cxX3N0YXRzX2NsZWFyKHN0cnVjdCBtdjg4ZTZ4eHhfY2hpcCAqY2hpcCk7CistaW50IG12ODhlNjA5NV9nMV9zZXRfZWdyZXNzX3BvcnQoc3RydWN0IG12ODhlNnh4eF9jaGlwICpjaGlwLCBpbnQgcG9ydCk7CistaW50IG12ODhlNjM5MF9nMV9zZXRfZWdyZXNzX3BvcnQoc3RydWN0IG12ODhlNnh4eF9jaGlwICpjaGlwLCBpbnQgcG9ydCk7CisraW50IG12ODhlNjA5NV9nMV9zZXRfZWdyZXNzX3BvcnQoc3RydWN0IG12ODhlNnh4eF9jaGlwICpjaGlwLAorKwkJCQkgZW51bSBtdjg4ZTZ4eHhfZWdyZXNzX2RpcmVjdGlvbiBkaXJlY3Rpb24sCisrCQkJCSBpbnQgcG9ydCk7CisraW50IG12ODhlNjM5MF9nMV9zZXRfZWdyZXNzX3BvcnQoc3RydWN0IG12ODhlNnh4eF9jaGlwICpjaGlwLAorKwkJCQkgZW51bSBtdjg4ZTZ4eHhfZWdyZXNzX2RpcmVjdGlvbiBkaXJlY3Rpb24sCisrCQkJCSBpbnQgcG9ydCk7CisgaW50IG12ODhlNjA5NV9nMV9zZXRfY3B1X3BvcnQoc3RydWN0IG12ODhlNnh4eF9jaGlwICpjaGlwLCBpbnQgcG9ydCk7CisgaW50IG12ODhlNjM5MF9nMV9zZXRfY3B1X3BvcnQoc3RydWN0IG12ODhlNnh4eF9jaGlwICpjaGlwLCBpbnQgcG9ydCk7CisgaW50IG12ODhlNjM5MF9nMV9tZ210X3JzdmQyY3B1KHN0cnVjdCBtdjg4ZTZ4eHhfY2hpcCAqY2hpcCk7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzQ3LXY1LjUtbmV0LWRzYS1tdjg4ZTZ4eHgtQWRkLXN1cHBvcnQtZm9yLXBvcnQtbWlycm9yaW5nLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40Lzc0Ny12NS41LW5ldC1kc2EtbXY4OGU2eHh4LUFkZC1zdXBwb3J0LWZvci1wb3J0LW1pcnJvcmluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjNmNDUwCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40Lzc0Ny12NS41LW5ldC1kc2EtbXY4OGU2eHh4LUFkZC1zdXBwb3J0LWZvci1wb3J0LW1pcnJvcmluZy5wYXRjaApAQCAtMCwwICsxLDI2NiBAQAorRnJvbSBmMDk0MmUwMGExYWJiNjQwNGNhNDMwMmM2NjQ5N2ZjNjIzNjc2YzExIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSXdhbiBSIFRpbW1lciA8aXJ0aW1tZXJAZ21haWwuY29tPgorRGF0ZTogVGh1LCA3IE5vdiAyMDE5IDIyOjExOjE0ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIG5ldDogZHNhOiBtdjg4ZTZ4eHg6IEFkZCBzdXBwb3J0IGZvciBwb3J0IG1pcnJvcmluZworCitBZGQgc3VwcG9ydCBmb3IgY29uZmlndXJpbmcgcG9ydCBtaXJyb3JpbmcgdGhyb3VnaCB0aGUgY2xzX21hdGNoYWxsCitjbGFzc2lmaWVyLiBXZSBkbyBhIGZ1bGwgaW5ncmVzcyBhbmQvb3IgZWdyZXNzIGNhcHR1cmUgdG93YXJkcyBhCitjYXB0dXJlIHBvcnQuIEl0IGFsbG93cyBzZXR0aW5nIGEgZGlmZmVyZW50IGNhcHR1cmUgcG9ydCBmb3IgaW5ncmVzcworYW5kIGVncmVzcyB0cmFmZmljLgorCitJdCBrZWVwcyB0cmFjayBvZiB0aGUgbWlycm9yZWQgcG9ydHMgYW5kIHRoZSBkZXN0aW5hdGlvbiBwb3J0cyB0bworcHJldmVudCBjaGFuZ2VzIHRvIHRoZSBjYXB0dXJlIHBvcnQgd2hpbGUgb3RoZXIgcG9ydHMgYXJlIGJlaW5nCittaXJyb3JlZC4KKworU2lnbmVkLW9mZi1ieTogSXdhbiBSIFRpbW1lciA8aXJ0aW1tZXJAZ21haWwuY29tPgorUmV2aWV3ZWQtYnk6IEFuZHJldyBMdW5uIDxhbmRyZXdAbHVubi5jaD4KK1NpZ25lZC1vZmYtYnk6IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KKy0tLQorIGRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jICAgIHwgNzYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuaCAgICB8ICA2ICsrKworIGRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvZ2xvYmFsMS5jIHwgMTggKysrKystLQorIGRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvcG9ydC5jICAgIHwgMzcgKysrKysrKysrKysrKysKKyBkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L3BvcnQuaCAgICB8ICAzICsrCisgNSBmaWxlcyBjaGFuZ2VkLCAxMzYgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMKKysrKyBiL2RyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jCitAQCAtNDkyNiw2ICs0OTI2LDgwIEBAIHN0YXRpYyBpbnQgbXY4OGU2eHh4X3BvcnRfbWRiX2RlbChzdHJ1Y3QKKyAJcmV0dXJuIGVycjsKKyB9CisgCisrc3RhdGljIGludCBtdjg4ZTZ4eHhfcG9ydF9taXJyb3JfYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCisrCQkJCSAgICAgc3RydWN0IGRzYV9tYWxsX21pcnJvcl90Y19lbnRyeSAqbWlycm9yLAorKwkJCQkgICAgIGJvb2wgaW5ncmVzcykKKyt7CisrCWVudW0gbXY4OGU2eHh4X2VncmVzc19kaXJlY3Rpb24gZGlyZWN0aW9uID0gaW5ncmVzcyA/CisrCQkJCQkJTVY4OEU2WFhYX0VHUkVTU19ESVJfSU5HUkVTUyA6CisrCQkJCQkJTVY4OEU2WFhYX0VHUkVTU19ESVJfRUdSRVNTOworKwlzdHJ1Y3QgbXY4OGU2eHh4X2NoaXAgKmNoaXAgPSBkcy0+cHJpdjsKKysJYm9vbCBvdGhlcl9taXJyb3JzID0gZmFsc2U7CisrCWludCBpOworKwlpbnQgZXJyOworKworKwlpZiAoIWNoaXAtPmluZm8tPm9wcy0+c2V0X2VncmVzc19wb3J0KQorKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworKworKwltdXRleF9sb2NrKCZjaGlwLT5yZWdfbG9jayk7CisrCWlmICgoaW5ncmVzcyA/IGNoaXAtPmluZ3Jlc3NfZGVzdF9wb3J0IDogY2hpcC0+ZWdyZXNzX2Rlc3RfcG9ydCkgIT0KKysJICAgIG1pcnJvci0+dG9fbG9jYWxfcG9ydCkgeworKwkJZm9yIChpID0gMDsgaSA8IG12ODhlNnh4eF9udW1fcG9ydHMoY2hpcCk7IGkrKykKKysJCQlvdGhlcl9taXJyb3JzIHw9IGluZ3Jlc3MgPworKwkJCQkJIGNoaXAtPnBvcnRzW2ldLm1pcnJvcl9pbmdyZXNzIDoKKysJCQkJCSBjaGlwLT5wb3J0c1tpXS5taXJyb3JfZWdyZXNzOworKworKwkJLyogQ2FuJ3QgY2hhbmdlIGVncmVzcyBwb3J0IHdoZW4gb3RoZXIgbWlycm9yIGlzIGFjdGl2ZSAqLworKwkJaWYgKG90aGVyX21pcnJvcnMpIHsKKysJCQllcnIgPSAtRUJVU1k7CisrCQkJZ290byBvdXQ7CisrCQl9CisrCisrCQllcnIgPSBjaGlwLT5pbmZvLT5vcHMtPnNldF9lZ3Jlc3NfcG9ydChjaGlwLAorKwkJCQkJCSAgICAgICBkaXJlY3Rpb24sCisrCQkJCQkJICAgICAgIG1pcnJvci0+dG9fbG9jYWxfcG9ydCk7CisrCQlpZiAoZXJyKQorKwkJCWdvdG8gb3V0OworKwl9CisrCisrCWVyciA9IG12ODhlNnh4eF9wb3J0X3NldF9taXJyb3IoY2hpcCwgcG9ydCwgZGlyZWN0aW9uLCB0cnVlKTsKKytvdXQ6CisrCW11dGV4X3VubG9jaygmY2hpcC0+cmVnX2xvY2spOworKworKwlyZXR1cm4gZXJyOworK30KKysKKytzdGF0aWMgdm9pZCBtdjg4ZTZ4eHhfcG9ydF9taXJyb3JfZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCisrCQkJCSAgICAgIHN0cnVjdCBkc2FfbWFsbF9taXJyb3JfdGNfZW50cnkgKm1pcnJvcikKKyt7CisrCWVudW0gbXY4OGU2eHh4X2VncmVzc19kaXJlY3Rpb24gZGlyZWN0aW9uID0gbWlycm9yLT5pbmdyZXNzID8KKysJCQkJCQlNVjg4RTZYWFhfRUdSRVNTX0RJUl9JTkdSRVNTIDoKKysJCQkJCQlNVjg4RTZYWFhfRUdSRVNTX0RJUl9FR1JFU1M7CisrCXN0cnVjdCBtdjg4ZTZ4eHhfY2hpcCAqY2hpcCA9IGRzLT5wcml2OworKwlib29sIG90aGVyX21pcnJvcnMgPSBmYWxzZTsKKysJaW50IGk7CisrCisrCW11dGV4X2xvY2soJmNoaXAtPnJlZ19sb2NrKTsKKysJaWYgKG12ODhlNnh4eF9wb3J0X3NldF9taXJyb3IoY2hpcCwgcG9ydCwgZGlyZWN0aW9uLCBmYWxzZSkpCisrCQlkZXZfZXJyKGRzLT5kZXYsICJwJWQ6IGZhaWxlZCB0byBkaXNhYmxlIG1pcnJvcmluZ1xuIiwgcG9ydCk7CisrCisrCWZvciAoaSA9IDA7IGkgPCBtdjg4ZTZ4eHhfbnVtX3BvcnRzKGNoaXApOyBpKyspCisrCQlvdGhlcl9taXJyb3JzIHw9IG1pcnJvci0+aW5ncmVzcyA/CisrCQkJCSBjaGlwLT5wb3J0c1tpXS5taXJyb3JfaW5ncmVzcyA6CisrCQkJCSBjaGlwLT5wb3J0c1tpXS5taXJyb3JfZWdyZXNzOworKworKwkvKiBSZXNldCBlZ3Jlc3MgcG9ydCB3aGVuIG5vIG90aGVyIG1pcnJvciBpcyBhY3RpdmUgKi8KKysJaWYgKCFvdGhlcl9taXJyb3JzKSB7CisrCQlpZiAoY2hpcC0+aW5mby0+b3BzLT5zZXRfZWdyZXNzX3BvcnQoY2hpcCwKKysJCQkJCQkgICAgIGRpcmVjdGlvbiwKKysJCQkJCQkgICAgIGRzYV91cHN0cmVhbV9wb3J0KGRzLAorKwkJCQkJCQkJICAgICAgIHBvcnQpKSk7CisrCQkJZGV2X2Vycihkcy0+ZGV2LCAiZmFpbGVkIHRvIHNldCBlZ3Jlc3MgcG9ydFxuIik7CisrCX0KKysKKysJbXV0ZXhfdW5sb2NrKCZjaGlwLT5yZWdfbG9jayk7CisrfQorKworIHN0YXRpYyBpbnQgbXY4OGU2eHh4X3BvcnRfZWdyZXNzX2Zsb29kcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAorIAkJCQkJIGJvb2wgdW5pY2FzdCwgYm9vbCBtdWx0aWNhc3QpCisgeworQEAgLTQ5ODAsNiArNTA1NCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbXY4OGUKKyAJLnBvcnRfbWRiX3ByZXBhcmUgICAgICAgPSBtdjg4ZTZ4eHhfcG9ydF9tZGJfcHJlcGFyZSwKKyAJLnBvcnRfbWRiX2FkZCAgICAgICAgICAgPSBtdjg4ZTZ4eHhfcG9ydF9tZGJfYWRkLAorIAkucG9ydF9tZGJfZGVsICAgICAgICAgICA9IG12ODhlNnh4eF9wb3J0X21kYl9kZWwsCisrCS5wb3J0X21pcnJvcl9hZGQJPSBtdjg4ZTZ4eHhfcG9ydF9taXJyb3JfYWRkLAorKwkucG9ydF9taXJyb3JfZGVsCT0gbXY4OGU2eHh4X3BvcnRfbWlycm9yX2RlbCwKKyAJLmNyb3NzY2hpcF9icmlkZ2Vfam9pbgk9IG12ODhlNnh4eF9jcm9zc2NoaXBfYnJpZGdlX2pvaW4sCisgCS5jcm9zc2NoaXBfYnJpZGdlX2xlYXZlCT0gbXY4OGU2eHh4X2Nyb3NzY2hpcF9icmlkZ2VfbGVhdmUsCisgCS5wb3J0X2h3dHN0YW1wX3NldAk9IG12ODhlNnh4eF9wb3J0X2h3dHN0YW1wX3NldCwKKy0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5oCisrKysgYi9kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuaAorQEAgLTIzMiw2ICsyMzIsOCBAQCBzdHJ1Y3QgbXY4OGU2eHh4X3BvcnQgeworIAl1NjQgdnR1X21lbWJlcl92aW9sYXRpb247CisgCXU2NCB2dHVfbWlzc192aW9sYXRpb247CisgCXU4IGNtb2RlOworKwlib29sIG1pcnJvcl9pbmdyZXNzOworKwlib29sIG1pcnJvcl9lZ3Jlc3M7CisgCXVuc2lnbmVkIGludCBzZXJkZXNfaXJxOworIH07CisgCitAQCAtMzE1LDYgKzMxNywxMCBAQCBzdHJ1Y3QgbXY4OGU2eHh4X2NoaXAgeworIAl1MTYgZXZjYXBfY29uZmlnOworIAl1MTYgZW5hYmxlX2NvdW50OworIAorKwkvKiBDdXJyZW50IGluZ3Jlc3MgYW5kIGVncmVzcyBtb25pdG9yIHBvcnRzICovCisrCWludCBlZ3Jlc3NfZGVzdF9wb3J0OworKwlpbnQgaW5ncmVzc19kZXN0X3BvcnQ7CisrCisgCS8qIFBlci1wb3J0IHRpbWVzdGFtcGluZyByZXNvdXJjZXMuICovCisgCXN0cnVjdCBtdjg4ZTZ4eHhfcG9ydF9od3RzdGFtcCBwb3J0X2h3dHN0YW1wW0RTQV9NQVhfUE9SVFNdOworIAorLS0tIGEvZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9nbG9iYWwxLmMKKysrKyBiL2RyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvZ2xvYmFsMS5jCitAQCAtMjk4LDYgKzI5OCw3IEBAIGludCBtdjg4ZTYwOTVfZzFfc2V0X2VncmVzc19wb3J0KHN0cnVjdAorIAkJCQkgZW51bSBtdjg4ZTZ4eHhfZWdyZXNzX2RpcmVjdGlvbiBkaXJlY3Rpb24sCisgCQkJCSBpbnQgcG9ydCkKKyB7CisrCWludCAqZGVzdF9wb3J0X2NoaXA7CisgCXUxNiByZWc7CisgCWludCBlcnI7CisgCitAQCAtMzA3LDExICszMDgsMTMgQEAgaW50IG12ODhlNjA5NV9nMV9zZXRfZWdyZXNzX3BvcnQoc3RydWN0CisgCisgCXN3aXRjaCAoZGlyZWN0aW9uKSB7CisgCWNhc2UgTVY4OEU2WFhYX0VHUkVTU19ESVJfSU5HUkVTUzoKKysJCWRlc3RfcG9ydF9jaGlwID0gJmNoaXAtPmluZ3Jlc3NfZGVzdF9wb3J0OworIAkJcmVnICY9IE1WODhFNjE4NV9HMV9NT05JVE9SX0NUTF9JTkdSRVNTX0RFU1RfTUFTSzsKKyAJCXJlZyB8PSBwb3J0IDw8CisgCQkgICAgICAgX19iZl9zaGYoTVY4OEU2MTg1X0cxX01PTklUT1JfQ1RMX0lOR1JFU1NfREVTVF9NQVNLKTsKKyAJCWJyZWFrOworIAljYXNlIE1WODhFNlhYWF9FR1JFU1NfRElSX0VHUkVTUzoKKysJCWRlc3RfcG9ydF9jaGlwID0gJmNoaXAtPmVncmVzc19kZXN0X3BvcnQ7CisgCQlyZWcgJj0gTVY4OEU2MTg1X0cxX01PTklUT1JfQ1RMX0VHUkVTU19ERVNUX01BU0s7CisgCQlyZWcgfD0gcG9ydCA8PAorIAkJICAgICAgIF9fYmZfc2hmKE1WODhFNjE4NV9HMV9NT05JVE9SX0NUTF9FR1JFU1NfREVTVF9NQVNLKTsKK0BAIC0zMjAsNyArMzIzLDExIEBAIGludCBtdjg4ZTYwOTVfZzFfc2V0X2VncmVzc19wb3J0KHN0cnVjdAorIAkJcmV0dXJuIC1FSU5WQUw7CisgCX0KKyAKKy0JcmV0dXJuIG12ODhlNnh4eF9nMV93cml0ZShjaGlwLCBNVjg4RTYxODVfRzFfTU9OSVRPUl9DVEwsIHJlZyk7CisrCWVyciA9IG12ODhlNnh4eF9nMV93cml0ZShjaGlwLCBNVjg4RTYxODVfRzFfTU9OSVRPUl9DVEwsIHJlZyk7CisrCWlmICghZXJyKQorKwkJKmRlc3RfcG9ydF9jaGlwID0gcG9ydDsKKysKKysJcmV0dXJuIGVycjsKKyB9CisgCisgLyogT2xkZXIgZ2VuZXJhdGlvbnMgYWxzbyBjYWxsIHRoaXMgdGhlIEFSUCBkZXN0aW5hdGlvbi4gSXQgaGFzIGJlZW4KK0BAIC0zNTYsMTQgKzM2MywxNyBAQCBpbnQgbXY4OGU2MzkwX2cxX3NldF9lZ3Jlc3NfcG9ydChzdHJ1Y3QKKyAJCQkJIGVudW0gbXY4OGU2eHh4X2VncmVzc19kaXJlY3Rpb24gZGlyZWN0aW9uLAorIAkJCQkgaW50IHBvcnQpCisgeworKwlpbnQgKmRlc3RfcG9ydF9jaGlwOworIAl1MTYgcHRyOworIAlpbnQgZXJyOworIAorIAlzd2l0Y2ggKGRpcmVjdGlvbikgeworIAljYXNlIE1WODhFNlhYWF9FR1JFU1NfRElSX0lOR1JFU1M6CisrCQlkZXN0X3BvcnRfY2hpcCA9ICZjaGlwLT5pbmdyZXNzX2Rlc3RfcG9ydDsKKyAJCXB0ciA9IE1WODhFNjM5MF9HMV9NT05JVE9SX01HTVRfQ1RMX1BUUl9JTkdSRVNTX0RFU1Q7CisgCQlicmVhazsKKyAJY2FzZSBNVjg4RTZYWFhfRUdSRVNTX0RJUl9FR1JFU1M6CisrCQlkZXN0X3BvcnRfY2hpcCA9ICZjaGlwLT5lZ3Jlc3NfZGVzdF9wb3J0OworIAkJcHRyID0gTVY4OEU2MzkwX0cxX01PTklUT1JfTUdNVF9DVExfUFRSX0VHUkVTU19ERVNUOworIAkJYnJlYWs7CisgCWRlZmF1bHQ6CitAQCAtMzcxLDEwICszODEsMTAgQEAgaW50IG12ODhlNjM5MF9nMV9zZXRfZWdyZXNzX3BvcnQoc3RydWN0CisgCX0KKyAKKyAJZXJyID0gbXY4OGU2MzkwX2cxX21vbml0b3Jfd3JpdGUoY2hpcCwgcHRyLCBwb3J0KTsKKy0JaWYgKGVycikKKy0JCXJldHVybiBlcnI7CisrCWlmICghZXJyKQorKwkJKmRlc3RfcG9ydF9jaGlwID0gcG9ydDsKKyAKKy0JcmV0dXJuIDA7CisrCXJldHVybiBlcnI7CisgfQorIAorIGludCBtdjg4ZTYzOTBfZzFfc2V0X2NwdV9wb3J0KHN0cnVjdCBtdjg4ZTZ4eHhfY2hpcCAqY2hpcCwgaW50IHBvcnQpCistLS0gYS9kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L3BvcnQuYworKysrIGIvZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9wb3J0LmMKK0BAIC0xMTgxLDYgKzExODEsNDMgQEAgaW50IG12ODhlNjA5NV9wb3J0X3NldF91cHN0cmVhbV9wb3J0KHN0cgorIAlyZXR1cm4gbXY4OGU2eHh4X3BvcnRfd3JpdGUoY2hpcCwgcG9ydCwgTVY4OEU2WFhYX1BPUlRfQ1RMMiwgcmVnKTsKKyB9CisgCisraW50IG12ODhlNnh4eF9wb3J0X3NldF9taXJyb3Ioc3RydWN0IG12ODhlNnh4eF9jaGlwICpjaGlwLCBpbnQgcG9ydCwKKysJCQkgICAgICBlbnVtIG12ODhlNnh4eF9lZ3Jlc3NfZGlyZWN0aW9uIGRpcmVjdGlvbiwKKysJCQkgICAgICBib29sIG1pcnJvcikKKyt7CisrCWJvb2wgKm1pcnJvcl9wb3J0OworKwl1MTYgcmVnOworKwl1MTYgYml0OworKwlpbnQgZXJyOworKworKwllcnIgPSBtdjg4ZTZ4eHhfcG9ydF9yZWFkKGNoaXAsIHBvcnQsIE1WODhFNlhYWF9QT1JUX0NUTDIsICZyZWcpOworKwlpZiAoZXJyKQorKwkJcmV0dXJuIGVycjsKKysKKysJc3dpdGNoIChkaXJlY3Rpb24pIHsKKysJY2FzZSBNVjg4RTZYWFhfRUdSRVNTX0RJUl9JTkdSRVNTOgorKwkJYml0ID0gTVY4OEU2WFhYX1BPUlRfQ1RMMl9JTkdSRVNTX01PTklUT1I7CisrCQltaXJyb3JfcG9ydCA9ICZjaGlwLT5wb3J0c1twb3J0XS5taXJyb3JfaW5ncmVzczsKKysJCWJyZWFrOworKwljYXNlIE1WODhFNlhYWF9FR1JFU1NfRElSX0VHUkVTUzoKKysJCWJpdCA9IE1WODhFNlhYWF9QT1JUX0NUTDJfRUdSRVNTX01PTklUT1I7CisrCQltaXJyb3JfcG9ydCA9ICZjaGlwLT5wb3J0c1twb3J0XS5taXJyb3JfZWdyZXNzOworKwkJYnJlYWs7CisrCWRlZmF1bHQ6CisrCQlyZXR1cm4gLUVJTlZBTDsKKysJfQorKworKwlyZWcgJj0gfmJpdDsKKysJaWYgKG1pcnJvcikKKysJCXJlZyB8PSBiaXQ7CisrCisrCWVyciA9IG12ODhlNnh4eF9wb3J0X3dyaXRlKGNoaXAsIHBvcnQsIE1WODhFNlhYWF9QT1JUX0NUTDIsIHJlZyk7CisrCWlmICghZXJyKQorKwkJKm1pcnJvcl9wb3J0ID0gbWlycm9yOworKworKwlyZXR1cm4gZXJyOworK30KKysKKyBpbnQgbXY4OGU2eHh4X3BvcnRfc2V0XzgwMjFxX21vZGUoc3RydWN0IG12ODhlNnh4eF9jaGlwICpjaGlwLCBpbnQgcG9ydCwKKyAJCQkJICB1MTYgbW9kZSkKKyB7CistLS0gYS9kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L3BvcnQuaAorKysrIGIvZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9wb3J0LmgKK0BAIC0zNjgsNiArMzY4LDkgQEAgaW50IG12ODhlNjM1Ml9wb3J0X2xpbmtfc3RhdGUoc3RydWN0IG12OAorIGludCBtdjg4ZTZ4eHhfcG9ydF9zZXRfbWFwX2RhKHN0cnVjdCBtdjg4ZTZ4eHhfY2hpcCAqY2hpcCwgaW50IHBvcnQpOworIGludCBtdjg4ZTYwOTVfcG9ydF9zZXRfdXBzdHJlYW1fcG9ydChzdHJ1Y3QgbXY4OGU2eHh4X2NoaXAgKmNoaXAsIGludCBwb3J0LAorIAkJCQkgICAgIGludCB1cHN0cmVhbV9wb3J0KTsKKytpbnQgbXY4OGU2eHh4X3BvcnRfc2V0X21pcnJvcihzdHJ1Y3QgbXY4OGU2eHh4X2NoaXAgKmNoaXAsIGludCBwb3J0LAorKwkJCSAgICAgIGVudW0gbXY4OGU2eHh4X2VncmVzc19kaXJlY3Rpb24gZGlyZWN0aW9uLAorKwkJCSAgICAgIGJvb2wgbWlycm9yKTsKKyAKKyBpbnQgbXY4OGU2eHh4X3BvcnRfZGlzYWJsZV9sZWFybl9saW1pdChzdHJ1Y3QgbXY4OGU2eHh4X2NoaXAgKmNoaXAsIGludCBwb3J0KTsKKyBpbnQgbXY4OGU2eHh4X3BvcnRfZGlzYWJsZV9wcmlfb3ZlcnJpZGUoc3RydWN0IG12ODhlNnh4eF9jaGlwICpjaGlwLCBpbnQgcG9ydCk7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzQ4LXY1LjUtbmV0LWRzYS1tdjg4ZTZ4eHgtZml4LWJyb2tlbi1pZi1zdGF0ZW1lbnQtYmVjYXVzZS1vZi5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83NDgtdjUuNS1uZXQtZHNhLW12ODhlNnh4eC1maXgtYnJva2VuLWlmLXN0YXRlbWVudC1iZWNhdXNlLW9mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZTdhN2YKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzQ4LXY1LjUtbmV0LWRzYS1tdjg4ZTZ4eHgtZml4LWJyb2tlbi1pZi1zdGF0ZW1lbnQtYmVjYXVzZS1vZi5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIDRlNDYzN2IxMDM3NGVkZTNjZDMzZDdlMWIzODllNmNlYTYzNDNlYTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDb2xpbiBJYW4gS2luZyA8Y29saW4ua2luZ0BjYW5vbmljYWwuY29tPgorRGF0ZTogVHVlLCAxMiBOb3YgMjAxOSAxMzowNToyMyArMDAwMAorU3ViamVjdDogW1BBVENIXSBuZXQ6IGRzYTogbXY4OGU2eHh4OiBmaXggYnJva2VuIGlmIHN0YXRlbWVudCBiZWNhdXNlIG9mIGEKKyBzdHJheSBzZW1pY29sb24KKworVGhlcmUgaXMgYSBzdHJheSBzZW1pY29sb24gaW4gYW4gaWYgc3RhdGVtZW50IHRoYXQgd2lsbCBjYXVzZSBhIGRldl9lcnIKK21lc3NhZ2UgdG8gYmUgcHJpbnRlZCB1bmNvbmRpdGlvbmFsbHkuIEZpeCB0aGlzIGJ5IHJlbW92aW5nIHRoZSBzdHJheQorc2VtaWNvbG9uLgorCitBZGRyZXNzZXMtQ292ZXJpdHk6ICgiU3RheSBzZW1pY29sb24iKQorRml4ZXM6IGYwOTQyZTAwYTFhYiAoIm5ldDogZHNhOiBtdjg4ZTZ4eHg6IEFkZCBzdXBwb3J0IGZvciBwb3J0IG1pcnJvcmluZyIpCitTaWduZWQtb2ZmLWJ5OiBDb2xpbiBJYW4gS2luZyA8Y29saW4ua2luZ0BjYW5vbmljYWwuY29tPgorUmV2aWV3ZWQtYnk6IEFuZHJldyBMdW5uIDxhbmRyZXdAbHVubi5jaD4KK1NpZ25lZC1vZmYtYnk6IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KKy0tLQorIGRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCistLS0gYS9kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYworKysrIGIvZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMKK0BAIC00OTkzLDcgKzQ5OTMsNyBAQCBzdGF0aWMgdm9pZCBtdjg4ZTZ4eHhfcG9ydF9taXJyb3JfZGVsKHN0CisgCQlpZiAoY2hpcC0+aW5mby0+b3BzLT5zZXRfZWdyZXNzX3BvcnQoY2hpcCwKKyAJCQkJCQkgICAgIGRpcmVjdGlvbiwKKyAJCQkJCQkgICAgIGRzYV91cHN0cmVhbV9wb3J0KGRzLAorLQkJCQkJCQkJICAgICAgIHBvcnQpKSk7CisrCQkJCQkJCQkgICAgICAgcG9ydCkpKQorIAkJCWRldl9lcnIoZHMtPmRldiwgImZhaWxlZCB0byBzZXQgZWdyZXNzIHBvcnRcbiIpOworIAl9CisgCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzQ5LXY1LjUtbmV0LWRzYS1tdjg4ZTZ4eHgtRml4LW1hc2tpbmctb2YtZWdyZXNzLXBvcnQucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzQ5LXY1LjUtbmV0LWRzYS1tdjg4ZTZ4eHgtRml4LW1hc2tpbmctb2YtZWdyZXNzLXBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk3YTgwOAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83NDktdjUuNS1uZXQtZHNhLW12ODhlNnh4eC1GaXgtbWFza2luZy1vZi1lZ3Jlc3MtcG9ydC5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGcm9tIDNlZTMzOWViMjg5NTk2MjlkYjMzYWFhMmI4Y2RlNGM2M2M2Mjg5ZWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbmRyZXcgTHVubiA8YW5kcmV3QGx1bm4uY2g+CitEYXRlOiBUaHUsIDI3IEZlYiAyMDIwIDIxOjIwOjQ5ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIG5ldDogZHNhOiBtdjg4ZTZ4eHg6IEZpeCBtYXNraW5nIG9mIGVncmVzcyBwb3J0CisKK0FkZCBtaXNzaW5nIH4gdG8gdGhlIHVzYWdlIG9mIHRoZSBtYXNrLgorCitSZXBvcnRlZC1ieTogS2V2aW4gQmVuc29uIDxLZXZpbi5CZW5zb25AemlpLmFlcm8+CitSZXBvcnRlZC1ieTogQ2hyaXMgSGVhbHkgPENocmlzLkhlYWx5QHppaS5hZXJvPgorRml4ZXM6IDVjNzRjNTRjZTZmZiAoIm5ldDogZHNhOiBtdjg4ZTZ4eHg6IFNwbGl0IG1vbml0b3IgcG9ydCBjb25maWd1cmF0aW9uIikKK1NpZ25lZC1vZmYtYnk6IEFuZHJldyBMdW5uIDxhbmRyZXdAbHVubi5jaD4KK1NpZ25lZC1vZmYtYnk6IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KKy0tLQorIGRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvZ2xvYmFsMS5jIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9nbG9iYWwxLmMKKysrKyBiL2RyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvZ2xvYmFsMS5jCitAQCAtMzA5LDEzICszMDksMTMgQEAgaW50IG12ODhlNjA5NV9nMV9zZXRfZWdyZXNzX3BvcnQoc3RydWN0CisgCXN3aXRjaCAoZGlyZWN0aW9uKSB7CisgCWNhc2UgTVY4OEU2WFhYX0VHUkVTU19ESVJfSU5HUkVTUzoKKyAJCWRlc3RfcG9ydF9jaGlwID0gJmNoaXAtPmluZ3Jlc3NfZGVzdF9wb3J0OworLQkJcmVnICY9IE1WODhFNjE4NV9HMV9NT05JVE9SX0NUTF9JTkdSRVNTX0RFU1RfTUFTSzsKKysJCXJlZyAmPSB+TVY4OEU2MTg1X0cxX01PTklUT1JfQ1RMX0lOR1JFU1NfREVTVF9NQVNLOworIAkJcmVnIHw9IHBvcnQgPDwKKyAJCSAgICAgICBfX2JmX3NoZihNVjg4RTYxODVfRzFfTU9OSVRPUl9DVExfSU5HUkVTU19ERVNUX01BU0spOworIAkJYnJlYWs7CisgCWNhc2UgTVY4OEU2WFhYX0VHUkVTU19ESVJfRUdSRVNTOgorIAkJZGVzdF9wb3J0X2NoaXAgPSAmY2hpcC0+ZWdyZXNzX2Rlc3RfcG9ydDsKKy0JCXJlZyAmPSBNVjg4RTYxODVfRzFfTU9OSVRPUl9DVExfRUdSRVNTX0RFU1RfTUFTSzsKKysJCXJlZyAmPSB+TVY4OEU2MTg1X0cxX01PTklUT1JfQ1RMX0VHUkVTU19ERVNUX01BU0s7CisgCQlyZWcgfD0gcG9ydCA8PAorIAkJICAgICAgIF9fYmZfc2hmKE1WODhFNjE4NV9HMV9NT05JVE9SX0NUTF9FR1JFU1NfREVTVF9NQVNLKTsKKyAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40Lzc1MC12NS41LW5ldC1waHktYWRkLXN1cHBvcnQtZm9yLWNsYXVzZS0zNy1hdXRvLW5lZ290aWF0aW9uLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40Lzc1MC12NS41LW5ldC1waHktYWRkLXN1cHBvcnQtZm9yLWNsYXVzZS0zNy1hdXRvLW5lZ290aWF0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YzU2ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzUwLXY1LjUtbmV0LXBoeS1hZGQtc3VwcG9ydC1mb3ItY2xhdXNlLTM3LWF1dG8tbmVnb3RpYXRpb24ucGF0Y2gKQEAgLTAsMCArMSwxOTUgQEAKK0Zyb20gZmE2ZTk4Y2VlNTU4NjIyNTY1Yzk3OTI0ZTkyMmI5NzM0MGFlYWJkOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEhlaW5lciBLYWxsd2VpdCA8aGthbGx3ZWl0MUBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDIyIE9jdCAyMDE5IDExOjMxOjA3IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIG5ldDogcGh5OiBhZGQgc3VwcG9ydCBmb3IgY2xhdXNlIDM3IGF1dG8tbmVnb3RpYXRpb24KK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGNsYXVzZSAzNyAxMDAwQmFzZS1YIGF1dG8tbmVnb3RpYXRpb24uCisKK1NpZ25lZC1vZmYtYnk6IEhlaW5lciBLYWxsd2VpdCA8aGthbGx3ZWl0MUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBUYW8gUmVuIDx0YW9yZW5AZmIuY29tPgorVGVzdGVkLWJ5OiBSZW7DqSB2YW4gRG9yc3QgPG9wZW5zb3VyY2VAdmRvcnN0LmNvbT4KK1Jldmlld2VkLWJ5OiBBbmRyZXcgTHVubiA8YW5kcmV3QGx1bm4uY2g+CitTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CistLS0KKyBkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIHwgMTM5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgaW5jbHVkZS9saW51eC9waHkuaCAgICAgICAgICB8ICAgNCArCisgMiBmaWxlcyBjaGFuZ2VkLCAxNDMgaW5zZXJ0aW9ucygrKQorCistLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCisrKysgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCitAQCAtMTY4Miw2ICsxNjgyLDQwIEBAIHN0YXRpYyBpbnQgZ2VucGh5X2NvbmZpZ19hZHZlcnQoc3RydWN0IHAKKyB9CisgCisgLyoqCisrICogZ2VucGh5X2MzN19jb25maWdfYWR2ZXJ0IC0gc2FuaXRpemUgYW5kIGFkdmVydGlzZSBhdXRvLW5lZ290aWF0aW9uIHBhcmFtZXRlcnMKKysgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKKysgKgorKyAqIERlc2NyaXB0aW9uOiBXcml0ZXMgTUlJX0FEVkVSVElTRSB3aXRoIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZXMsCisrICogICBhZnRlciBzYW5pdGl6aW5nIHRoZSB2YWx1ZXMgdG8gbWFrZSBzdXJlIHdlIG9ubHkgYWR2ZXJ0aXNlCisrICogICB3aGF0IGlzIHN1cHBvcnRlZC4gIFJldHVybnMgPCAwIG9uIGVycm9yLCAwIGlmIHRoZSBQSFkncyBhZHZlcnRpc2VtZW50CisrICogICBoYXNuJ3QgY2hhbmdlZCwgYW5kID4gMCBpZiBpdCBoYXMgY2hhbmdlZC4gVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZAorKyAqICAgZm9yIENsYXVzZSAzNyAxMDAwQmFzZS1YIG1vZGUuCisrICovCisrc3RhdGljIGludCBnZW5waHlfYzM3X2NvbmZpZ19hZHZlcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKKyt7CisrCXUxNiBhZHYgPSAwOworKworKwkvKiBPbmx5IGFsbG93IGFkdmVydGlzaW5nIHdoYXQgdGhpcyBQSFkgc3VwcG9ydHMgKi8KKysJbGlua21vZGVfYW5kKHBoeWRldi0+YWR2ZXJ0aXNpbmcsIHBoeWRldi0+YWR2ZXJ0aXNpbmcsCisrCQkgICAgIHBoeWRldi0+c3VwcG9ydGVkKTsKKysKKysJaWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDBiYXNlWF9GdWxsX0JJVCwKKysJCQkgICAgICBwaHlkZXYtPmFkdmVydGlzaW5nKSkKKysJCWFkdiB8PSBBRFZFUlRJU0VfMTAwMFhGVUxMOworKwlpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfUGF1c2VfQklULAorKwkJCSAgICAgIHBoeWRldi0+YWR2ZXJ0aXNpbmcpKQorKwkJYWR2IHw9IEFEVkVSVElTRV8xMDAwWFBBVVNFOworKwlpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfQXN5bV9QYXVzZV9CSVQsCisrCQkJICAgICAgcGh5ZGV2LT5hZHZlcnRpc2luZykpCisrCQlhZHYgfD0gQURWRVJUSVNFXzEwMDBYUFNFX0FTWU07CisrCisrCXJldHVybiBwaHlfbW9kaWZ5X2NoYW5nZWQocGh5ZGV2LCBNSUlfQURWRVJUSVNFLAorKwkJCQkgIEFEVkVSVElTRV8xMDAwWEZVTEwgfCBBRFZFUlRJU0VfMTAwMFhQQVVTRSB8CisrCQkJCSAgQURWRVJUSVNFXzEwMDBYSEFMRiB8IEFEVkVSVElTRV8xMDAwWFBTRV9BU1lNLAorKwkJCQkgIGFkdik7CisrfQorKworKy8qKgorICAqIGdlbnBoeV9jb25maWdfZWVlX2FkdmVydCAtIGRpc2FibGUgdW53YW50ZWQgZWVlIG1vZGUgYWR2ZXJ0aXNlbWVudAorICAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdAorICAqCitAQCAtMTc5MCw2ICsxODI0LDU0IEBAIGludCBfX2dlbnBoeV9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmkKKyBFWFBPUlRfU1lNQk9MKF9fZ2VucGh5X2NvbmZpZ19hbmVnKTsKKyAKKyAvKioKKysgKiBnZW5waHlfYzM3X2NvbmZpZ19hbmVnIC0gcmVzdGFydCBhdXRvLW5lZ290aWF0aW9uIG9yIHdyaXRlIEJNQ1IKKysgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKKysgKgorKyAqIERlc2NyaXB0aW9uOiBJZiBhdXRvLW5lZ290aWF0aW9uIGlzIGVuYWJsZWQsIHdlIGNvbmZpZ3VyZSB0aGUKKysgKiAgIGFkdmVydGlzaW5nLCBhbmQgdGhlbiByZXN0YXJ0IGF1dG8tbmVnb3RpYXRpb24uICBJZiBpdCBpcyBub3QKKysgKiAgIGVuYWJsZWQsIHRoZW4gd2Ugd3JpdGUgdGhlIEJNQ1IuIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQKKysgKiAgIGZvciB1c2Ugd2l0aCBDbGF1c2UgMzcgMTAwMEJhc2UtWCBtb2RlLgorKyAqLworK2ludCBnZW5waHlfYzM3X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCisreworKwlpbnQgZXJyLCBjaGFuZ2VkOworKworKwlpZiAocGh5ZGV2LT5hdXRvbmVnICE9IEFVVE9ORUdfRU5BQkxFKQorKwkJcmV0dXJuIGdlbnBoeV9zZXR1cF9mb3JjZWQocGh5ZGV2KTsKKysKKysJZXJyID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1NQRUVEMTAwMCB8IEJNQ1JfU1BFRUQxMDAsCisrCQkJIEJNQ1JfU1BFRUQxMDAwKTsKKysJaWYgKGVycikKKysJCXJldHVybiBlcnI7CisrCisrCWNoYW5nZWQgPSBnZW5waHlfYzM3X2NvbmZpZ19hZHZlcnQocGh5ZGV2KTsKKysJaWYgKGNoYW5nZWQgPCAwKSAvKiBlcnJvciAqLworKwkJcmV0dXJuIGNoYW5nZWQ7CisrCisrCWlmICghY2hhbmdlZCkgeworKwkJLyogQWR2ZXJ0aXNlbWVudCBoYXNuJ3QgY2hhbmdlZCwgYnV0IG1heWJlIGFuZWcgd2FzIG5ldmVyIG9uIHRvCisrCQkgKiBiZWdpbiB3aXRoPyAgT3IgbWF5YmUgcGh5IHdhcyBpc29sYXRlZD8KKysJCSAqLworKwkJaW50IGN0bCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpOworKworKwkJaWYgKGN0bCA8IDApCisrCQkJcmV0dXJuIGN0bDsKKysKKysJCWlmICghKGN0bCAmIEJNQ1JfQU5FTkFCTEUpIHx8IChjdGwgJiBCTUNSX0lTT0xBVEUpKQorKwkJCWNoYW5nZWQgPSAxOyAvKiBkbyByZXN0YXJ0IGFuZWcgKi8KKysJfQorKworKwkvKiBPbmx5IHJlc3RhcnQgYW5lZyBpZiB3ZSBhcmUgYWR2ZXJ0aXNpbmcgc29tZXRoaW5nIGRpZmZlcmVudAorKwkgKiB0aGFuIHdlIHdlcmUgYmVmb3JlLgorKwkgKi8KKysJaWYgKGNoYW5nZWQgPiAwKQorKwkJcmV0dXJuIGdlbnBoeV9yZXN0YXJ0X2FuZWcocGh5ZGV2KTsKKysKKysJcmV0dXJuIDA7CisrfQorK0VYUE9SVF9TWU1CT0woZ2VucGh5X2MzN19jb25maWdfYW5lZyk7CisrCisrLyoqCisgICogZ2VucGh5X2FuZWdfZG9uZSAtIHJldHVybiBhdXRvLW5lZ290aWF0aW9uIHN0YXR1cworICAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdAorICAqCitAQCAtMTk2Miw2ICsyMDQ0LDYzIEBAIGludCBnZW5waHlfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UKKyBFWFBPUlRfU1lNQk9MKGdlbnBoeV9yZWFkX3N0YXR1cyk7CisgCisgLyoqCisrICogZ2VucGh5X2MzN19yZWFkX3N0YXR1cyAtIGNoZWNrIHRoZSBsaW5rIHN0YXR1cyBhbmQgdXBkYXRlIGN1cnJlbnQgbGluayBzdGF0ZQorKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdAorKyAqCisrICogRGVzY3JpcHRpb246IENoZWNrIHRoZSBsaW5rLCB0aGVuIGZpZ3VyZSBvdXQgdGhlIGN1cnJlbnQgc3RhdGUKKysgKiAgIGJ5IGNvbXBhcmluZyB3aGF0IHdlIGFkdmVydGlzZSB3aXRoIHdoYXQgdGhlIGxpbmsgcGFydG5lcgorKyAqICAgYWR2ZXJ0aXNlcy4gVGhpcyBmdW5jdGlvbiBpcyBmb3IgQ2xhdXNlIDM3IDEwMDBCYXNlLVggbW9kZS4KKysgKi8KKytpbnQgZ2VucGh5X2MzN19yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQorK3sKKysJaW50IGxwYSwgZXJyLCBvbGRfbGluayA9IHBoeWRldi0+bGluazsKKysKKysJLyogVXBkYXRlIHRoZSBsaW5rLCBidXQgcmV0dXJuIGlmIHRoZXJlIHdhcyBhbiBlcnJvciAqLworKwllcnIgPSBnZW5waHlfdXBkYXRlX2xpbmsocGh5ZGV2KTsKKysJaWYgKGVycikKKysJCXJldHVybiBlcnI7CisrCisrCS8qIHdoeSBib3RoZXIgdGhlIFBIWSBpZiBub3RoaW5nIGNhbiBoYXZlIGNoYW5nZWQgKi8KKysJaWYgKHBoeWRldi0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSAmJiBvbGRfbGluayAmJiBwaHlkZXYtPmxpbmspCisrCQlyZXR1cm4gMDsKKysKKysJcGh5ZGV2LT5kdXBsZXggPSBEVVBMRVhfVU5LTk9XTjsKKysJcGh5ZGV2LT5wYXVzZSA9IDA7CisrCXBoeWRldi0+YXN5bV9wYXVzZSA9IDA7CisrCisrCWlmIChwaHlkZXYtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUgJiYgcGh5ZGV2LT5hdXRvbmVnX2NvbXBsZXRlKSB7CisrCQlscGEgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9MUEEpOworKwkJaWYgKGxwYSA8IDApCisrCQkJcmV0dXJuIGxwYTsKKysKKysJCWxpbmttb2RlX21vZF9iaXQoRVRIVE9PTF9MSU5LX01PREVfQXV0b25lZ19CSVQsCisrCQkJCSBwaHlkZXYtPmxwX2FkdmVydGlzaW5nLCBscGEgJiBMUEFfTFBBQ0spOworKwkJbGlua21vZGVfbW9kX2JpdChFVEhUT09MX0xJTktfTU9ERV8xMDAwYmFzZVhfRnVsbF9CSVQsCisrCQkJCSBwaHlkZXYtPmxwX2FkdmVydGlzaW5nLCBscGEgJiBMUEFfMTAwMFhGVUxMKTsKKysJCWxpbmttb2RlX21vZF9iaXQoRVRIVE9PTF9MSU5LX01PREVfUGF1c2VfQklULAorKwkJCQkgcGh5ZGV2LT5scF9hZHZlcnRpc2luZywgbHBhICYgTFBBXzEwMDBYUEFVU0UpOworKwkJbGlua21vZGVfbW9kX2JpdChFVEhUT09MX0xJTktfTU9ERV9Bc3ltX1BhdXNlX0JJVCwKKysJCQkJIHBoeWRldi0+bHBfYWR2ZXJ0aXNpbmcsCisrCQkJCSBscGEgJiBMUEFfMTAwMFhQQVVTRV9BU1lNKTsKKysKKysJCXBoeV9yZXNvbHZlX2FuZWdfbGlua21vZGUocGh5ZGV2KTsKKysJfSBlbHNlIGlmIChwaHlkZXYtPmF1dG9uZWcgPT0gQVVUT05FR19ESVNBQkxFKSB7CisrCQlpbnQgYm1jciA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpOworKworKwkJaWYgKGJtY3IgPCAwKQorKwkJCXJldHVybiBibWNyOworKworKwkJaWYgKGJtY3IgJiBCTUNSX0ZVTExEUExYKQorKwkJCXBoeWRldi0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisrCQllbHNlCisrCQkJcGh5ZGV2LT5kdXBsZXggPSBEVVBMRVhfSEFMRjsKKysJfQorKworKwlyZXR1cm4gMDsKKyt9CisrRVhQT1JUX1NZTUJPTChnZW5waHlfYzM3X3JlYWRfc3RhdHVzKTsKKysKKysvKioKKyAgKiBnZW5waHlfc29mdF9yZXNldCAtIHNvZnR3YXJlIHJlc2V0IHRoZSBQSFkgdmlhIEJNQ1JfUkVTRVQgYml0CisgICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CisgICoKKy0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmgKKysrKyBiL2luY2x1ZGUvbGludXgvcGh5LmgKK0BAIC0xMTIwLDYgKzExMjAsMTAgQEAgaW50IGdlbnBoeV9yZWFkX21tZF91bnN1cHBvcnRlZChzdHJ1Y3QgcAorIGludCBnZW5waHlfd3JpdGVfbW1kX3Vuc3VwcG9ydGVkKHN0cnVjdCBwaHlfZGV2aWNlICpwaGRldiwgaW50IGRldm51bSwKKyAJCQkJIHUxNiByZWdudW0sIHUxNiB2YWwpOworIAorKy8qIENsYXVzZSAzNyAqLworK2ludCBnZW5waHlfYzM3X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOworK2ludCBnZW5waHlfYzM3X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOworKworIC8qIENsYXVzZSA0NSBQSFkgKi8KKyBpbnQgZ2VucGh5X2M0NV9yZXN0YXJ0X2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CisgaW50IGdlbnBoeV9jNDVfY2hlY2tfYW5kX3Jlc3RhcnRfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIHJlc3RhcnQpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40Lzc1MS12NS42LW5ldC1tdm1kaW8tYXZvaWQtZXJyb3ItbWVzc2FnZS1mb3Itb3B0aW9uYWwtSVJRLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40Lzc1MS12NS42LW5ldC1tdm1kaW8tYXZvaWQtZXJyb3ItbWVzc2FnZS1mb3Itb3B0aW9uYWwtSVJRLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNTFkZTgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzUxLXY1LjYtbmV0LW12bWRpby1hdm9pZC1lcnJvci1tZXNzYWdlLWZvci1vcHRpb25hbC1JUlEucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSBmYTI2MzJmNzRlNTdiYmM4NjljOGFkMzc3NTFhMTFiNjE0N2EzYWNjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2hyaXMgUGFja2hhbSA8Y2hyaXMucGFja2hhbUBhbGxpZWR0ZWxlc2lzLmNvLm56PgorRGF0ZTogTW9uLCAxNiBNYXIgMjAyMCAyMDo0OTowNyArMTMwMAorU3ViamVjdDogW1BBVENIXSBuZXQ6IG12bWRpbzogYXZvaWQgZXJyb3IgbWVzc2FnZSBmb3Igb3B0aW9uYWwgSVJRCisKK1BlciB0aGUgZHQtYmluZGluZyB0aGUgaW50ZXJydXB0IGlzIG9wdGlvbmFsIHNvIHVzZQorcGxhdGZvcm1fZ2V0X2lycV9vcHRpb25hbCgpIGluc3RlYWQgb2YgcGxhdGZvcm1fZ2V0X2lycSgpLiBTaW5jZQorY29tbWl0IDc3MjNmNGM1ZWNkYiAoImRyaXZlciBjb3JlOiBwbGF0Zm9ybTogQWRkIGFuIGVycm9yIG1lc3NhZ2UgdG8KK3BsYXRmb3JtX2dldF9pcnEqKCkiKSBwbGF0Zm9ybV9nZXRfaXJxKCkgcHJvZHVjZXMgYW4gZXJyb3IgbWVzc2FnZQorCisgIG9yaW9uLW1kaW8gZjEwNzIwMDQubWRpbzogSVJRIGluZGV4IDAgbm90IGZvdW5kCisKK3doaWNoIGlzIHBlcmZlY3RseSBub3JtYWwgaWYgb25lIGhhc24ndCBzcGVjaWZpZWQgdGhlIG9wdGlvbmFsIHByb3BlcnR5CitpbiB0aGUgZGV2aWNlIHRyZWUuCisKK1NpZ25lZC1vZmYtYnk6IENocmlzIFBhY2toYW0gPGNocmlzLnBhY2toYW1AYWxsaWVkdGVsZXNpcy5jby5uej4KK1Jldmlld2VkLWJ5OiBBbmRyZXcgTHVubiA8YW5kcmV3QGx1bm4uY2g+CitTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CistLS0KKyBkcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCistLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jCisrKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212bWRpby5jCitAQCAtMzQ3LDcgKzM0Nyw3IEBAIHN0YXRpYyBpbnQgb3Jpb25fbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGYKKyAJfQorIAorIAorLQlkZXYtPmVycl9pbnRlcnJ1cHQgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworKwlkZXYtPmVycl9pbnRlcnJ1cHQgPSBwbGF0Zm9ybV9nZXRfaXJxX29wdGlvbmFsKHBkZXYsIDApOworIAlpZiAoZGV2LT5lcnJfaW50ZXJydXB0ID4gMCAmJgorIAkgICAgcmVzb3VyY2Vfc2l6ZShyKSA8IE1WTURJT19FUlJfSU5UX01BU0sgKyA0KSB7CisgCQlkZXZfZXJyKCZwZGV2LT5kZXYsCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzUyLXY1LjgtbmV0LWRzYS1wcm92aWRlLWFuLW9wdGlvbi1mb3ItZHJpdmVycy10by1hbHdheXMtcmVjZS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83NTItdjUuOC1uZXQtZHNhLXByb3ZpZGUtYW4tb3B0aW9uLWZvci1kcml2ZXJzLXRvLWFsd2F5cy1yZWNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZDkzNTEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzUyLXY1LjgtbmV0LWRzYS1wcm92aWRlLWFuLW9wdGlvbi1mb3ItZHJpdmVycy10by1hbHdheXMtcmVjZS5wYXRjaApAQCAtMCwwICsxLDEyMSBAQAorRnJvbSA1NGEwZWQwZGY0OTYwOWY0ZTNmMDk4Zjg5NDNlMzhlMzg5ZGMyZTE1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KK0RhdGU6IFR1ZSwgMTIgTWF5IDIwMjAgMjA6MjA6MjUgKzAzMDAKK1N1YmplY3Q6IG5ldDogZHNhOiBwcm92aWRlIGFuIG9wdGlvbiBmb3IgZHJpdmVycyB0byBhbHdheXMgcmVjZWl2ZSBicmlkZ2UKKyBWTEFOcworCitEU0EgYXNzdW1lcyB0aGF0IGEgYnJpZGdlIHdoaWNoIGhhcyB2bGFuIGZpbHRlcmluZyBkaXNhYmxlZCBpcyBub3QKK3ZsYW4gYXdhcmUsIGFuZCBpZ25vcmVzIGFsbCB2bGFuIGNvbmZpZ3VyYXRpb24uIEhvd2V2ZXIsIHRoZSBrZXJuZWwKK3NvZnR3YXJlIGJyaWRnZSBjb2RlIGFsbG93cyBjb25maWd1cmF0aW9uIGluIHRoaXMgc3RhdGUuCisKK1RoaXMgY2F1c2VzIHRoZSBrZXJuZWwncyBpZGVhIG9mIHRoZSBicmlkZ2UgdmxhbiBzdGF0ZSBhbmQgdGhlCitoYXJkd2FyZSBzdGF0ZSB0byBkaXNhZ3JlZSwgc28gImJyaWRnZSB2bGFuIHNob3ciIGluZGljYXRlcyBhIGNvcnJlY3QKK2NvbmZpZ3VyYXRpb24gYnV0IHRoZSBoYXJkd2FyZSBsYWNrcyBhbGwgY29uZmlndXJhdGlvbi4gRXZlbiB3b3JzZSwKK2VuYWJsaW5nIHZsYW4gZmlsdGVyaW5nIG9uIGEgRFNBIGJyaWRnZSBpbW1lZGlhdGVseSBibG9ja3MgYWxsIHRyYWZmaWMKK3doaWNoLCBnaXZlbiB0aGUgb3V0cHV0IG9mICJicmlkZ2UgdmxhbiBzaG93IiwgaXMgdmVyeSBjb25mdXNpbmcuCisKK1Byb3ZpZGUgYW4gb3B0aW9uIHRoYXQgZHJpdmVycyBjYW4gc2V0IHRvIGluZGljYXRlIHRoZXkgd2FudCB0byByZWNlaXZlCit2bGFuIGNvbmZpZ3VyYXRpb24gZXZlbiB3aGVuIHZsYW4gZmlsdGVyaW5nIGlzIGRpc2FibGVkLiBBdCB0aGUgdmVyeQorbGVhc3QsIHRoaXMgaXMgc2FmZSBmb3IgTWFydmVsbCBEU0EgYnJpZGdlcywgd2hpY2ggZG8gbm90IGxvb2sgdXAKK2luZ3Jlc3MgdHJhZmZpYyBpbiB0aGUgVlRVIGlmIHRoZSBwb3J0IGlzIGluIDgwMjFRIGRpc2FibGVkIHN0YXRlLiBJdCBpcworYWxzbyBzYWZlIGZvciB0aGUgT2NlbG90IHN3aXRjaCBmYW1pbHkuIFdoZXRoZXIgdGhpcyBjaGFuZ2UgaXMgc3VpdGFibGUKK2ZvciBhbGwgRFNBIGJyaWRnZXMgaXMgbm90IGtub3duLgorCitTaWduZWQtb2ZmLWJ5OiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorU2lnbmVkLW9mZi1ieTogVmxhZGltaXIgT2x0ZWFuIDx2bGFkaW1pci5vbHRlYW5AbnhwLmNvbT4KK1Jldmlld2VkLWJ5OiBGbG9yaWFuIEZhaW5lbGxpIDxmLmZhaW5lbGxpQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KKy0tLQorIGluY2x1ZGUvbmV0L2RzYS5oICB8ICA3ICsrKysrKysKKyBuZXQvZHNhL2RzYV9wcml2LmggfCAgMSArCisgbmV0L2RzYS9wb3J0LmMgICAgIHwgMTQgKysrKysrKysrKysrKysKKyBuZXQvZHNhL3NsYXZlLmMgICAgfCAgOCArKysrLS0tLQorIDQgZmlsZXMgY2hhbmdlZCwgMjYgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworLS0tIGEvaW5jbHVkZS9uZXQvZHNhLmgKKysrKyBiL2luY2x1ZGUvbmV0L2RzYS5oCitAQCAtMjcwLDYgKzI3MCwxMyBAQCBzdHJ1Y3QgZHNhX3N3aXRjaCB7CisgCSAqLworIAlib29sCQkJdmxhbl9maWx0ZXJpbmdfaXNfZ2xvYmFsOworIAorKwkvKiBQYXNzIC5wb3J0X3ZsYW5fYWRkIGFuZCAucG9ydF92bGFuX2RlbCB0byBkcml2ZXJzIGV2ZW4gZm9yIGJyaWRnZXMKKysJICogdGhhdCBoYXZlIHZsYW5fZmlsdGVyaW5nPTAuIEFsbCBkcml2ZXJzIHNob3VsZCBpZGVhbGx5IHNldCB0aGlzIChhbmQKKysJICogdGhlbiB0aGUgb3B0aW9uIHdvdWxkIGdldCByZW1vdmVkKSwgYnV0IGl0IGlzIHVua25vd24gd2hldGhlciB0aGlzCisrCSAqIHdvdWxkIGJyZWFrIHRoaW5ncyBvciBub3QuCisrCSAqLworKwlib29sCQkJY29uZmlndXJlX3ZsYW5fd2hpbGVfbm90X2ZpbHRlcmluZzsKKysKKyAJLyogSW4gY2FzZSB2bGFuX2ZpbHRlcmluZ19pc19nbG9iYWwgaXMgc2V0LCB0aGUgVkxBTiBhd2FyZW5lc3Mgc3RhdGUKKyAJICogc2hvdWxkIGJlIHJldHJpZXZlZCBmcm9tIGhlcmUgYW5kIG5vdCBmcm9tIHRoZSBwZXItcG9ydCBzZXR0aW5ncy4KKyAJICovCistLS0gYS9uZXQvZHNhL2RzYV9wcml2LmgKKysrKyBiL25ldC9kc2EvZHNhX3ByaXYuaAorQEAgLTEzOSw2ICsxMzksNyBAQCBpbnQgZHNhX3BvcnRfYnJpZGdlX2pvaW4oc3RydWN0IGRzYV9wb3J0Cisgdm9pZCBkc2FfcG9ydF9icmlkZ2VfbGVhdmUoc3RydWN0IGRzYV9wb3J0ICpkcCwgc3RydWN0IG5ldF9kZXZpY2UgKmJyKTsKKyBpbnQgZHNhX3BvcnRfdmxhbl9maWx0ZXJpbmcoc3RydWN0IGRzYV9wb3J0ICpkcCwgYm9vbCB2bGFuX2ZpbHRlcmluZywKKyAJCQkgICAgc3RydWN0IHN3aXRjaGRldl90cmFucyAqdHJhbnMpOworK2Jvb2wgZHNhX3BvcnRfc2tpcF92bGFuX2NvbmZpZ3VyYXRpb24oc3RydWN0IGRzYV9wb3J0ICpkcCk7CisgaW50IGRzYV9wb3J0X2FnZWluZ190aW1lKHN0cnVjdCBkc2FfcG9ydCAqZHAsIGNsb2NrX3QgYWdlaW5nX2Nsb2NrLAorIAkJCSBzdHJ1Y3Qgc3dpdGNoZGV2X3RyYW5zICp0cmFucyk7CisgaW50IGRzYV9wb3J0X2ZkYl9hZGQoc3RydWN0IGRzYV9wb3J0ICpkcCwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwKKy0tLSBhL25ldC9kc2EvcG9ydC5jCisrKysgYi9uZXQvZHNhL3BvcnQuYworQEAgLTIzOCw2ICsyMzgsMjAgQEAgaW50IGRzYV9wb3J0X3ZsYW5fZmlsdGVyaW5nKHN0cnVjdCBkc2FfcAorIAlyZXR1cm4gMDsKKyB9CisgCisrLyogVGhpcyBlbmZvcmNlcyBsZWdhY3kgYmVoYXZpb3IgZm9yIHN3aXRjaCBkcml2ZXJzIHdoaWNoIGFzc3VtZSB0aGV5IGNhbid0CisrICogcmVjZWl2ZSBWTEFOIGNvbmZpZ3VyYXRpb24gd2hlbiBlbnNsYXZlZCB0byBhIGJyaWRnZSB3aXRoIHZsYW5fZmlsdGVyaW5nPTAKKysgKi8KKytib29sIGRzYV9wb3J0X3NraXBfdmxhbl9jb25maWd1cmF0aW9uKHN0cnVjdCBkc2FfcG9ydCAqZHApCisreworKwlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkcC0+ZHM7CisrCisrCWlmICghZHAtPmJyaWRnZV9kZXYpCisrCQlyZXR1cm4gZmFsc2U7CisrCisrCXJldHVybiAoIWRzLT5jb25maWd1cmVfdmxhbl93aGlsZV9ub3RfZmlsdGVyaW5nICYmCisrCQkhYnJfdmxhbl9lbmFibGVkKGRwLT5icmlkZ2VfZGV2KSk7CisrfQorKworIGludCBkc2FfcG9ydF9hZ2VpbmdfdGltZShzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBjbG9ja190IGFnZWluZ19jbG9jaywKKyAJCQkgc3RydWN0IHN3aXRjaGRldl90cmFucyAqdHJhbnMpCisgeworLS0tIGEvbmV0L2RzYS9zbGF2ZS5jCisrKysgYi9uZXQvZHNhL3NsYXZlLmMKK0BAIC0zMTksNyArMzE5LDcgQEAgc3RhdGljIGludCBkc2Ffc2xhdmVfdmxhbl9hZGQoc3RydWN0IG5ldAorIAlpZiAob2JqLT5vcmlnX2RldiAhPSBkZXYpCisgCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisgCistCWlmIChkcC0+YnJpZGdlX2RldiAmJiAhYnJfdmxhbl9lbmFibGVkKGRwLT5icmlkZ2VfZGV2KSkKKysJaWYgKGRzYV9wb3J0X3NraXBfdmxhbl9jb25maWd1cmF0aW9uKGRwKSkKKyAJCXJldHVybiAwOworIAorIAl2bGFuID0gKlNXSVRDSERFVl9PQkpfUE9SVF9WTEFOKG9iaik7CitAQCAtMzg2LDcgKzM4Niw3IEBAIHN0YXRpYyBpbnQgZHNhX3NsYXZlX3ZsYW5fZGVsKHN0cnVjdCBuZXQKKyAJaWYgKG9iai0+b3JpZ19kZXYgIT0gZGV2KQorIAkJcmV0dXJuIC1FT1BOT1RTVVBQOworIAorLQlpZiAoZHAtPmJyaWRnZV9kZXYgJiYgIWJyX3ZsYW5fZW5hYmxlZChkcC0+YnJpZGdlX2RldikpCisrCWlmIChkc2FfcG9ydF9za2lwX3ZsYW5fY29uZmlndXJhdGlvbihkcCkpCisgCQlyZXR1cm4gMDsKKyAKKyAJLyogRG8gbm90IGRlcHJvZ3JhbSB0aGUgQ1BVIHBvcnQgYXMgaXQgbWF5IGJlIHNoYXJlZCB3aXRoIG90aGVyIHVzZXIKK0BAIC0xMTIwLDcgKzExMjAsNyBAQCBzdGF0aWMgaW50IGRzYV9zbGF2ZV92bGFuX3J4X2FkZF92aWQoc3RyCisgCSAqIG5lZWQgdG8gZW11bGF0ZSB0aGUgc3dpdGNoZGV2IHByZXBhcmUgKyBjb21taXQgcGhhc2UuCisgCSAqLworIAlpZiAoZHAtPmJyaWRnZV9kZXYpIHsKKy0JCWlmICghYnJfdmxhbl9lbmFibGVkKGRwLT5icmlkZ2VfZGV2KSkKKysJCWlmIChkc2FfcG9ydF9za2lwX3ZsYW5fY29uZmlndXJhdGlvbihkcCkpCisgCQkJcmV0dXJuIDA7CisgCisgCQkvKiBicl92bGFuX2dldF9pbmZvKCkgcmV0dXJucyAtRUlOVkFMIG9yIC1FTk9FTlQgaWYgdGhlCitAQCAtMTE1NCw3ICsxMTU0LDcgQEAgc3RhdGljIGludCBkc2Ffc2xhdmVfdmxhbl9yeF9raWxsX3ZpZChzdAorIAkgKiBuZWVkIHRvIGVtdWxhdGUgdGhlIHN3aXRjaGRldiBwcmVwYXJlICsgY29tbWl0IHBoYXNlLgorIAkgKi8KKyAJaWYgKGRwLT5icmlkZ2VfZGV2KSB7CistCQlpZiAoIWJyX3ZsYW5fZW5hYmxlZChkcC0+YnJpZGdlX2RldikpCisrCQlpZiAoZHNhX3BvcnRfc2tpcF92bGFuX2NvbmZpZ3VyYXRpb24oZHApKQorIAkJCXJldHVybiAwOworIAorIAkJLyogYnJfdmxhbl9nZXRfaW5mbygpIHJldHVybnMgLUVJTlZBTCBvciAtRU5PRU5UIGlmIHRoZQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40Lzc1My12NS44LW5ldC1kc2EtbXQ3NTMwLWZpeC1WTEFOLXNldHVwLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40Lzc1My12NS44LW5ldC1kc2EtbXQ3NTMwLWZpeC1WTEFOLXNldHVwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MDRjZWEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzUzLXY1LjgtbmV0LWRzYS1tdDc1MzAtZml4LVZMQU4tc2V0dXAucGF0Y2gKQEAgLTAsMCArMSw1MSBAQAorRnJvbSAwMTQxNzkyZjhiNzMwMDAwNmI4NzRkZGExYzM1YWNkMGFiZDkwZDlkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogREVORyBRaW5nZmFuZyA8ZHFmZXh0QGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMTUgTWF5IDIwMjAgMjM6MjU6NTUgKzA4MDAKK1N1YmplY3Q6IG5ldDogZHNhOiBtdDc1MzA6IGZpeCBWTEFOIHNldHVwCisKK0FsbG93IERTQSB0byBhZGQgVkxBTiBlbnRyaWVzIGV2ZW4gaWYgVkxBTiBmaWx0ZXJpbmcgaXMgZGlzYWJsZWQsIHNvCitlbmFibGluZyBpdCB3aWxsIG5vdCBibG9jayB0aGUgdHJhZmZpYyBvZiBleGlzdGVudCBwb3J0cyBpbiB0aGUgYnJpZGdlCisKK1NpZ25lZC1vZmYtYnk6IERFTkcgUWluZ2ZhbmcgPGRxZmV4dEBnbWFpbC5jb20+CitSZXZpZXdlZC1ieTogRmxvcmlhbiBGYWluZWxsaSA8Zi5mYWluZWxsaUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CistLS0KKyBkcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMgfCAxMyArLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxMiBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9uZXQvZHNhL210NzUzMC5jCisrKysgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMKK0BAIC0xMDgzLDEyICsxMDgzLDYgQEAgbXQ3NTMwX3BvcnRfdmxhbl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKgorIAlzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy0+cHJpdjsKKyAJdTE2IHZpZDsKKyAKKy0JLyogVGhlIHBvcnQgaXMga2VwdCBhcyBWTEFOLXVuYXdhcmUgaWYgYnJpZGdlIHdpdGggdmxhbl9maWx0ZXJpbmcgbm90CistCSAqIGJlaW5nIHNldC4KKy0JICovCistCWlmICghZHNhX3BvcnRfaXNfdmxhbl9maWx0ZXJpbmcoJmRzLT5wb3J0c1twb3J0XSkpCistCQlyZXR1cm47CistCisgCW11dGV4X2xvY2soJnByaXYtPnJlZ19tdXRleCk7CisgCisgCWZvciAodmlkID0gdmxhbi0+dmlkX2JlZ2luOyB2aWQgPD0gdmxhbi0+dmlkX2VuZDsgKyt2aWQpIHsKK0BAIC0xMTE0LDEyICsxMTA4LDYgQEAgbXQ3NTMwX3BvcnRfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKgorIAlzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy0+cHJpdjsKKyAJdTE2IHZpZCwgcHZpZDsKKyAKKy0JLyogVGhlIHBvcnQgaXMga2VwdCBhcyBWTEFOLXVuYXdhcmUgaWYgYnJpZGdlIHdpdGggdmxhbl9maWx0ZXJpbmcgbm90CistCSAqIGJlaW5nIHNldC4KKy0JICovCistCWlmICghZHNhX3BvcnRfaXNfdmxhbl9maWx0ZXJpbmcoJmRzLT5wb3J0c1twb3J0XSkpCistCQlyZXR1cm4gMDsKKy0KKyAJbXV0ZXhfbG9jaygmcHJpdi0+cmVnX211dGV4KTsKKyAKKyAJcHZpZCA9IHByaXYtPnBvcnRzW3BvcnRdLnB2aWQ7CitAQCAtMTIzMiw2ICsxMjIwLDcgQEAgbXQ3NTMwX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKKyAJICogYXMgdHdvIG5ldGRldiBpbnN0YW5jZXMuCisgCSAqLworIAlkbiA9IGRzLT5wb3J0c1tNVDc1MzBfQ1BVX1BPUlRdLm1hc3Rlci0+ZGV2Lm9mX25vZGUtPnBhcmVudDsKKysJZHMtPmNvbmZpZ3VyZV92bGFuX3doaWxlX25vdF9maWx0ZXJpbmcgPSB0cnVlOworIAorIAlpZiAocHJpdi0+aWQgPT0gSURfTVQ3NTMwKSB7CisgCQlyZWd1bGF0b3Jfc2V0X3ZvbHRhZ2UocHJpdi0+Y29yZV9wd3IsIDEwMDAwMDAsIDEwMDAwMDApOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40Lzc1Ni12NS44LW5ldC1kc2EtcnRsODM2Ni1QYXNzLUdFTk1BU0stc2lnbmVkLWJpdHMucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzU2LXY1LjgtbmV0LWRzYS1ydGw4MzY2LVBhc3MtR0VOTUFTSy1zaWduZWQtYml0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGFiNTk4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40Lzc1Ni12NS44LW5ldC1kc2EtcnRsODM2Ni1QYXNzLUdFTk1BU0stc2lnbmVkLWJpdHMucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorRnJvbSA3MzM5OTNmNTAyZjI1NDkxMmIxNDE1ZTEzZjczNjUxZDlmMmU3NGVmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQW5kcmV3IEx1bm4gPGFuZHJld0BsdW5uLmNoPgorRGF0ZTogU3VuLCA1IEp1bCAyMDIwIDIyOjQyOjI3ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMS81XSBuZXQ6IGRzYTogcnRsODM2NjogUGFzcyBHRU5NQVNLKCkgc2lnbmVkIGJpdHMKKworT2RkbHksIEdFTk1BU0soKSByZXF1aXJlcyBzaWduZWQgYml0IG51bWJlcnMsIHNvIHRoYXQgaXQgY2FuIGNvbXBhcmUKK3RoZW0gZm9yIDwgMC4gSWYgcGFzc2VkIGFuIHVuc2lnbmVkIHR5cGUsIHdlIGdldCB3YXJuaW5ncyBhYm91dCB0aGUKK3Rlc3QgbmV2ZXIgYmVpbmcgdHJ1ZS4KKworU2lnbmVkLW9mZi1ieTogQW5kcmV3IEx1bm4gPGFuZHJld0BsdW5uLmNoPgorUmV2aWV3ZWQtYnk6IEZsb3JpYW4gRmFpbmVsbGkgPGYuZmFpbmVsbGlAZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorLS0tCisgZHJpdmVycy9uZXQvZHNhL3J0bDgzNjYuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworLS0tIGEvZHJpdmVycy9uZXQvZHNhL3J0bDgzNjYuYworKysrIGIvZHJpdmVycy9uZXQvZHNhL3J0bDgzNjYuYworQEAgLTMxMSw3ICszMTEsNyBAQCBpbnQgcnRsODM2Nl9pbml0X3ZsYW4oc3RydWN0IHJlYWx0ZWtfc21pCisgCQkJLyogRm9yIHRoZSBDUFUgcG9ydCwgbWFrZSBhbGwgcG9ydHMgbWVtYmVycyBvZiB0aGlzCisgCQkJICogVkxBTi4KKyAJCQkgKi8KKy0JCQltYXNrID0gR0VOTUFTSyhzbWktPm51bV9wb3J0cyAtIDEsIDApOworKwkJCW1hc2sgPSBHRU5NQVNLKChpbnQpc21pLT5udW1fcG9ydHMgLSAxLCAwKTsKKyAJCWVsc2UKKyAJCQkvKiBGb3IgYWxsIG90aGVyIHBvcnRzLCBlbmFibGUgaXRzZWxmIHBsdXMgdGhlCisgCQkJICogQ1BVIHBvcnQuCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzU3LXY1LjgtbmV0LWRzYS10YWdfcnRsNF9hLUltcGxlbWVudC1SZWFsdGVrLTQtYnl0ZS1BLXRhZy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83NTctdjUuOC1uZXQtZHNhLXRhZ19ydGw0X2EtSW1wbGVtZW50LVJlYWx0ZWstNC1ieXRlLUEtdGFnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwZDcwMDAKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzU3LXY1LjgtbmV0LWRzYS10YWdfcnRsNF9hLUltcGxlbWVudC1SZWFsdGVrLTQtYnl0ZS1BLXRhZy5wYXRjaApAQCAtMCwwICsxLDIzMiBAQAorRnJvbSAwNzhjZWQzMGFmNjk2YjUyYTQ1MGEwMTZhMTZlYjQ3NDk5ZDY4MTE3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBsaW5hcm8ub3JnPgorRGF0ZTogV2VkLCA4IEp1bCAyMDIwIDE0OjI1OjM2ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMi81XSBuZXQ6IGRzYTogdGFnX3J0bDRfYTogSW1wbGVtZW50IFJlYWx0ZWsgNCBieXRlIEEgdGFnCisKK1RoaXMgaW1wbGVtZW50cyB0aGUga25vd24gcGFydHMgb2YgdGhlIFJlYWx0ZWsgNCBieXRlCit0YWcgcHJvdG9jb2wgdmVyc2lvbiAweEEsIGFzIGZvdW5kIGluIHRoZSBSVEw4MzY2UkIKK0RTQSBzd2l0Y2guCisKK0l0IGlzIGRlc2lnbmF0ZWQgYXMgcHJvdG9jb2wgdmVyc2lvbiAweEEgYXMgYQorZGlmZmVyZW50IFJlYWx0ZWsgNCBieXRlIHRhZyBmb3JtYXQgd2l0aCBwcm90b2NvbAordmVyc2lvbiAweDkgaXMga25vd24gdG8gZXhpc3QgaW4gdGhlIFJlYWx0ZWsgUlRMODMwNgorY2hpcHMuCisKK1RoZSB0YWcgYW5kIHN3aXRjaCBjaGlwIGxhY2tzIHB1YmxpYyBkb2N1bWVudGF0aW9uLCBzbwordGhlIHRhZyBmb3JtYXQgaGFzIGJlZW4gcmV2ZXJzZS1lbmdpbmVlcmVkIGZyb20KK3BhY2tldCBkdW1wcy4gQXMgb25seSBpbmdyZXNzIHRyYWZmaWMgaGFzIGJlZW4gYXZhaWxhYmxlCitmb3IgYW5hbHlzaXMgYW4gZWdyZXNzIHRhZyBoYXMgbm90IGJlZW4gcG9zc2libGUgdG8KK2RldmVsb3AgKGV2ZW4gdXNpbmcgZWR1Y2F0ZWQgZ3Vlc3NlcyBhYm91dCBiaXQgZmllbGRzKQorc28gdGhpcyBpcyBhcyBmYXIgYXMgaXQgZ2V0cy4gSXQgaXMgbm90IGtub3duIGlmIHRoZQorc3dpdGNoIGV2ZW4gc3VwcG9ydHMgZWdyZXNzIHRhZ2dpbmcuCisKK0V4Y2Vzc2l2ZSBhdHRlbXB0cyB0byBmaWd1cmUgb3V0IHRoZSBlZ3Jlc3MgdGFnIGZvcm1hdAord2FzIG1hZGUuIFdoZW4gbm90aGluZyBlbHNlIHdvcmtlZCwgSSBqdXN0IHRyaWVkIGFsbCBiaXQKK2NvbWJpbmF0aW9ucyB3aXRoIDB4YW5ucCB3aGVyZSBhIGlzIHByb3RvY29sIGFuZCBwIGlzCitwb3J0LiBJIGxvb3BlZCB0aHJvdWdoIGFsbCB2YWx1ZXMgc2V2ZXJhbCB0aW1lcyB0cnlpbmcKK3RvIGdldCBhIHJlc3BvbnNlIGZyb20gcGluZywgd2l0aG91dCBhbnkgcG9zaXRpdmUKK3Jlc3VsdC4KKworVXNpbmcganVzdCB0aGVzZSBpbmdyZXNzIHRhZ3MgaG93ZXZlciwgdGhlIHN3aXRjaAorZnVuY3Rpb25hbGl0eSBpcyB2YXN0bHkgaW1wcm92ZWQgYW5kIHRoZSBwYWNrZXRzIGZpbmQKK3RoZWlyIHdheSBpbnRvIHRoZSBkZXN0aW5hdGlvbiBwb3J0IHdpdGhvdXQgYW55Cit0cmlja3kgVkxBTiBjb25maWd1cmF0aW9uLiBPbiB0aGUgRC1MaW5rIERJUi02ODUgdGhlCitMQU4gcG9ydHMgbm93IGNvbWUgdXAgYW5kIHJlc3BvbmQgdG8gcGluZyB3aXRob3V0CithbnkgY29tbWFuZCBsaW5lIGNvbmZpZ3VyYXRpb24gc28gdGhpcyBpcyBhIHJlYWwKK2ltcHJvdmVtZW50IGZvciB1c2Vycy4KKworRWdyZXNzIHBhY2tldHMgbmVlZCB0byBiZSByZXN0cmljdGVkIHRvIHRoZSBwcm9wZXIKK3RhcmdldCBwb3J0cyB1c2luZyBWTEFOLCB3aGljaCB0aGUgUlRMODM2NlJCIERTQQorc3dpdGNoIGRyaXZlciBhbHJlYWR5IHNldHMgdXAuCisKK0NjOiBERU5HIFFpbmdmYW5nIDxkcWZleHRAZ21haWwuY29tPgorQ2M6IE1hdXJpIFNhbmRiZXJnIDxzYW5kYmVyZ0BtYWlsZmVuY2UuY29tPgorUmV2aWV3ZWQtYnk6IEFuZHJldyBMdW5uIDxhbmRyZXdAbHVubi5jaD4KK1Jldmlld2VkLWJ5OiBGbG9yaWFuIEZhaW5lbGxpIDxmLmZhaW5lbGxpQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IExpbnVzIFdhbGxlaWogPGxpbnVzLndhbGxlaWpAbGluYXJvLm9yZz4KK1NpZ25lZC1vZmYtYnk6IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KKy0tLQorIGluY2x1ZGUvbmV0L2RzYS5oICAgIHwgICAyICsKKyBuZXQvZHNhL0tjb25maWcgICAgICB8ICAgNyArKysKKyBuZXQvZHNhL01ha2VmaWxlICAgICB8ICAgMSArCisgbmV0L2RzYS90YWdfcnRsNF9hLmMgfCAxMzAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDQgZmlsZXMgY2hhbmdlZCwgMTQwIGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbmV0L2RzYS90YWdfcnRsNF9hLmMKKworLS0tIGEvaW5jbHVkZS9uZXQvZHNhLmgKKysrKyBiL2luY2x1ZGUvbmV0L2RzYS5oCitAQCAtNDIsNiArNDIsNyBAQCBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlOworICNkZWZpbmUgRFNBX1RBR19QUk9UT184MDIxUV9WQUxVRQkJMTIKKyAjZGVmaW5lIERTQV9UQUdfUFJPVE9fU0pBMTEwNV9WQUxVRQkJMTMKKyAjZGVmaW5lIERTQV9UQUdfUFJPVE9fS1NaODc5NV9WQUxVRQkJMTQKKysjZGVmaW5lIERTQV9UQUdfUFJPVE9fUlRMNF9BX1ZBTFVFCQkxNworIAorIGVudW0gZHNhX3RhZ19wcm90b2NvbCB7CisgCURTQV9UQUdfUFJPVE9fTk9ORQkJPSBEU0FfVEFHX1BST1RPX05PTkVfVkFMVUUsCitAQCAtNTksNiArNjAsNyBAQCBlbnVtIGRzYV90YWdfcHJvdG9jb2wgeworIAlEU0FfVEFHX1BST1RPXzgwMjFRCQk9IERTQV9UQUdfUFJPVE9fODAyMVFfVkFMVUUsCisgCURTQV9UQUdfUFJPVE9fU0pBMTEwNQkJPSBEU0FfVEFHX1BST1RPX1NKQTExMDVfVkFMVUUsCisgCURTQV9UQUdfUFJPVE9fS1NaODc5NQkJPSBEU0FfVEFHX1BST1RPX0tTWjg3OTVfVkFMVUUsCisrCURTQV9UQUdfUFJPVE9fUlRMNF9BCQk9IERTQV9UQUdfUFJPVE9fUlRMNF9BX1ZBTFVFLAorIH07CisgCisgc3RydWN0IHBhY2tldF90eXBlOworLS0tIGEvbmV0L2RzYS9LY29uZmlnCisrKysgYi9uZXQvZHNhL0tjb25maWcKK0BAIC04MCw2ICs4MCwxMyBAQCBjb25maWcgTkVUX0RTQV9UQUdfS1NaCisgCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRhZ2dpbmcgZnJhbWVzIGZvciB0aGUKKyAJICBNaWNyb2NoaXAgODc5NS85NDc3Lzk4OTMgZmFtaWxpZXMgb2Ygc3dpdGNoZXMuCisgCisrY29uZmlnIE5FVF9EU0FfVEFHX1JUTDRfQQorKwl0cmlzdGF0ZSAiVGFnIGRyaXZlciBmb3IgUmVhbHRlayA0IGJ5dGUgcHJvdG9jb2wgQSB0YWdzIgorKwloZWxwCisrCSAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGFnZ2luZyBmcmFtZXMgZm9yIHRoZQorKwkgIFJlYWx0ZWsgc3dpdGNoZXMgd2l0aCA0IGJ5dGUgcHJvdG9jb2wgQSB0YWdzLCBzaWNoIGFzIGZvdW5kIGluCisrCSAgdGhlIFJlYWx0ZWsgUlRMODM2NlJCLgorKworIGNvbmZpZyBORVRfRFNBX1RBR19RQ0EKKyAJdHJpc3RhdGUgIlRhZyBkcml2ZXIgZm9yIFF1YWxjb21tIEF0aGVyb3MgUUNBOEsgc3dpdGNoZXMiCisgCWhlbHAKKy0tLSBhL25ldC9kc2EvTWFrZWZpbGUKKysrKyBiL25ldC9kc2EvTWFrZWZpbGUKK0BAIC0xMCw2ICsxMCw3IEBAIG9iai0kKENPTkZJR19ORVRfRFNBX1RBR19EU0EpICs9IHRhZ19kc2EKKyBvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfRURTQSkgKz0gdGFnX2Vkc2EubworIG9iai0kKENPTkZJR19ORVRfRFNBX1RBR19HU1dJUCkgKz0gdGFnX2dzd2lwLm8KKyBvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfS1NaKSArPSB0YWdfa3N6Lm8KKytvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfUlRMNF9BKSArPSB0YWdfcnRsNF9hLm8KKyBvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfTEFOOTMwMykgKz0gdGFnX2xhbjkzMDMubworIG9iai0kKENPTkZJR19ORVRfRFNBX1RBR19NVEspICs9IHRhZ19tdGsubworIG9iai0kKENPTkZJR19ORVRfRFNBX1RBR19RQ0EpICs9IHRhZ19xY2EubworLS0tIC9kZXYvbnVsbAorKysrIGIvbmV0L2RzYS90YWdfcnRsNF9hLmMKK0BAIC0wLDAgKzEsMTMwIEBACisrLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKysvKgorKyAqIEhhbmRsZXIgZm9yIFJlYWx0ZWsgNCBieXRlIERTQSBzd2l0Y2ggdGFncworKyAqIEN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIHByb3RvY29sICJBIiBmb3VuZCBpbiBSVEw4MzY2UkIKKysgKiBDb3B5cmlnaHQgKGMpIDIwMjAgTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBsaW5hcm8ub3JnPgorKyAqCisrICogVGhpcyAicHJvcHJpZXRhcnkgdGFnIiBoZWFkZXIgbG9va3MgbGlrZSBzbzoKKysgKgorKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysgKiB8IE1BQyBEQSB8IE1BQyBTQSB8IDB4ODg5OSB8IDIgYnl0ZXMgdGFnIHwgVHlwZSB8CisrICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyAqCisrICogVGhlIDIgYnl0ZXMgdGFnIGZvcm0gYSAxNiBiaXQgYmlnIGVuZGlhbiB3b3JkLiBUaGUgZXhhY3QKKysgKiBtZWFuaW5nIGhhcyBiZWVuIGd1ZXNzZWQgZnJvbSBwYWNrZXQgZHVtcHMgZnJvbSBpbmdyZXNzCisrICogZnJhbWVzLCBhcyBubyB3b3JraW5nIGVncmVzcyB0cmFmZmljIGhhcyBiZWVuIGF2YWlsYWJsZQorKyAqIHdlIGRvIG5vdCBrbm93IHRoZSBmb3JtYXQgb2YgdGhlIGVncmVzcyB0YWdzIG9yIGlmIHRoZXkKKysgKiBhcmUgZXZlbiBzdXBwb3J0ZWQuCisrICovCisrCisrI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisrI2luY2x1ZGUgPGxpbnV4L2JpdHMuaD4KKysKKysjaW5jbHVkZSAiZHNhX3ByaXYuaCIKKysKKysjZGVmaW5lIFJUTDRfQV9IRFJfTEVOCQk0CisrI2RlZmluZSBSVEw0X0FfRVRIRVJUWVBFCTB4ODg5OQorKyNkZWZpbmUgUlRMNF9BX1BST1RPQ09MX1NISUZUCTEyCisrLyoKKysgKiAweDEgPSBSZWFsdGVrIFJlbW90ZSBDb250cm9sIHByb3RvY29sIChSUkNQKQorKyAqIDB4Mi8weDMgc2VlbXMgdG8gYmUgdXNlZCBmb3IgbG9vcGJhY2sgdGVzdGluZworKyAqIDB4OSA9IFJUTDgzMDYgRFNBIHByb3RvY29sCisrICogMHhhID0gUlRMODM2NlJCIERTQSBwcm90b2NvbAorKyAqLworKyNkZWZpbmUgUlRMNF9BX1BST1RPQ09MX1JUTDgzNjZSQgkweGEKKysKKytzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnJ0bDRhX3RhZ194bWl0KHN0cnVjdCBza19idWZmICpza2IsCisrCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCisreworKwkvKgorKwkgKiBKdXN0IGxldCBpdCBwYXNzIHRocnUsIHdlIGRvbid0IGtub3cgaWYgaXQgaXMgcG9zc2libGUKKysJICogdG8gdGFnIGEgZnJhbWUgd2l0aCB0aGUgMHg4ODk5IGV0aGVydHlwZSBhbmQgZGlyZWN0IGl0CisrCSAqIHRvIGEgc3BlY2lmaWMgcG9ydCwgYWxsIGF0dGVtcHRzIGF0IHJldmVyc2UtZW5naW5lZXJpbmcgaGF2ZQorKwkgKiBlbmRlZCB1cCB3aXRoIHRoZSBmcmFtZXMgZ2V0dGluZyBkcm9wcGVkLgorKwkgKgorKwkgKiBUaGUgVkxBTiBzZXQtdXAgbmVlZHMgdG8gcmVzdHJpY3QgdGhlIGZyYW1lcyB0byB0aGUgcmlnaHQgcG9ydC4KKysJICoKKysJICogSWYgeW91IGhhdmUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgdGFnZ2luZyBmb3JtYXQgZm9yIFJUTDgzNjZSQgorKwkgKiAodGFnIHR5cGUgQSkgdGhlbiBwbGVhc2UgY29udHJpYnV0ZS4KKysJICovCisrCXJldHVybiBza2I7CisrfQorKworK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcnRsNGFfdGFnX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorKwkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisrCQkJCSAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCkKKyt7CisrCXUxNiBwcm90cG9ydDsKKysJX19iZTE2ICpwOworKwl1MTYgZXR5cGU7CisrCXU4ICp0YWc7CisrCXU4IHByb3Q7CisrCXU4IHBvcnQ7CisrCisrCWlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIFJUTDRfQV9IRFJfTEVOKSkpCisrCQlyZXR1cm4gTlVMTDsKKysKKysJLyogVGhlIFJUTDQgaGVhZGVyIGhhcyBpdHMgb3duIGN1c3RvbSBFdGhlcnR5cGUgMHg4ODk5IGFuZCB0aGF0CisrCSAqIHN0YXJ0cyByaWdodCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYWNrZXQsIGFmdGVyIHRoZSBzcmMKKysJICogZXRoZXJuZXQgYWRkci4gQXBwYXJhbnRseSBza2ItPmRhdGEgYWx3YXlzIHBvaW50cyAyIGJ5dGVzIGluLAorKwkgKiBiZWhpbmQgdGhlIEV0aGVydHlwZS4KKysJICovCisrCXRhZyA9IHNrYi0+ZGF0YSAtIDI7CisrCXAgPSAoX19iZTE2ICopdGFnOworKwlldHlwZSA9IG50b2hzKCpwKTsKKysJaWYgKGV0eXBlICE9IFJUTDRfQV9FVEhFUlRZUEUpIHsKKysJCS8qIE5vdCBjdXN0b20sIGp1c3QgcGFzcyB0aHJvdWdoICovCisrCQluZXRkZXZfZGJnKGRldiwgIm5vbi1yZWFsdGVrIGV0aGVydHlwZSAweCUwNHhcbiIsIGV0eXBlKTsKKysJCXJldHVybiBza2I7CisrCX0KKysJcCA9IChfX2JlMTYgKikodGFnICsgMik7CisrCXByb3Rwb3J0ID0gbnRvaHMoKnApOworKwkvKiBUaGUgNCB1cHBlciBiaXRzIGFyZSB0aGUgcHJvdG9jb2wgKi8KKysJcHJvdCA9IChwcm90cG9ydCA+PiBSVEw0X0FfUFJPVE9DT0xfU0hJRlQpICYgMHgwZjsKKysJaWYgKHByb3QgIT0gUlRMNF9BX1BST1RPQ09MX1JUTDgzNjZSQikgeworKwkJbmV0ZGV2X2VycihkZXYsICJ1bmtub3duIHJlYWx0ZWsgcHJvdG9jb2wgMHglMDF4XG4iLCBwcm90KTsKKysJCXJldHVybiBOVUxMOworKwl9CisrCXBvcnQgPSBwcm90cG9ydCAmIDB4ZmY7CisrCisrCXNrYi0+ZGV2ID0gZHNhX21hc3Rlcl9maW5kX3NsYXZlKGRldiwgMCwgcG9ydCk7CisrCWlmICghc2tiLT5kZXYpIHsKKysJCW5ldGRldl9kYmcoZGV2LCAiY291bGQgbm90IGZpbmQgc2xhdmUgZm9yIHBvcnQgJWRcbiIsIHBvcnQpOworKwkJcmV0dXJuIE5VTEw7CisrCX0KKysKKysJLyogUmVtb3ZlIFJUTDQgdGFnIGFuZCByZWNhbGN1bGF0ZSBjaGVja3N1bSAqLworKwlza2JfcHVsbF9yY3N1bShza2IsIFJUTDRfQV9IRFJfTEVOKTsKKysKKysJLyogTW92ZSBldGhlcm5ldCBEQSBhbmQgU0EgaW4gZnJvbnQgb2YgdGhlIGRhdGEgKi8KKysJbWVtbW92ZShza2ItPmRhdGEgLSBFVEhfSExFTiwKKysJCXNrYi0+ZGF0YSAtIEVUSF9ITEVOIC0gUlRMNF9BX0hEUl9MRU4sCisrCQkyICogRVRIX0FMRU4pOworKworKwlza2ItPm9mZmxvYWRfZndkX21hcmsgPSAxOworKworKwlyZXR1cm4gc2tiOworK30KKysKKytzdGF0aWMgaW50IHJ0bDRhX3RhZ19mbG93X2Rpc3NlY3QoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2ICpwcm90bywKKysJCQkJICBpbnQgKm9mZnNldCkKKyt7CisrCSpvZmZzZXQgPSBSVEw0X0FfSERSX0xFTjsKKysJLyogU2tpcCBwYXN0IHRoZSB0YWcgYW5kIGZldGNoIHRoZSBlbmNhcHN1bGF0ZWQgRXRoZXJ0eXBlICovCisrCSpwcm90byA9ICgoX19iZTE2ICopc2tiLT5kYXRhKVsxXTsKKysKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMgcnRsNGFfbmV0ZGV2X29wcyA9IHsKKysJLm5hbWUJPSAicnRsNGEiLAorKwkucHJvdG8JPSBEU0FfVEFHX1BST1RPX1JUTDRfQSwKKysJLnhtaXQJPSBydGw0YV90YWdfeG1pdCwKKysJLnJjdgk9IHJ0bDRhX3RhZ19yY3YsCisrCS5mbG93X2Rpc3NlY3QgPSBydGw0YV90YWdfZmxvd19kaXNzZWN0LAorKwkub3ZlcmhlYWQgPSBSVEw0X0FfSERSX0xFTiwKKyt9OworK21vZHVsZV9kc2FfdGFnX2RyaXZlcihydGw0YV9uZXRkZXZfb3BzKTsKKysKKytNT0RVTEVfTElDRU5TRSgiR1BMIik7CisrTU9EVUxFX0FMSUFTX0RTQV9UQUdfRFJJVkVSKERTQV9UQUdfUFJPVE9fUlRMNF9BKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83NTgtdjUuOC1uZXQtZHNhLXJ0bDgzNjZyYi1TdXBwb3J0LXRoZS1DUFUtRFNBLXRhZy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83NTgtdjUuOC1uZXQtZHNhLXJ0bDgzNjZyYi1TdXBwb3J0LXRoZS1DUFUtRFNBLXRhZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjhjMDMzCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40Lzc1OC12NS44LW5ldC1kc2EtcnRsODM2NnJiLVN1cHBvcnQtdGhlLUNQVS1EU0EtdGFnLnBhdGNoCkBAIC0wLDAgKzEsMTAwIEBACitGcm9tIGM2MzNiYTQzYjdhOWMyYmZkYjk5MmZmZDE5OGQ0YzY2MTUyMDQ2NmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQGxpbmFyby5vcmc+CitEYXRlOiBXZWQsIDggSnVsIDIwMjAgMTQ6MjU6MzcgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzVdIG5ldDogZHNhOiBydGw4MzY2cmI6IFN1cHBvcnQgdGhlIENQVSBEU0EgdGFnCisKK1RoaXMgYWN0aXZhdGVzIHRoZSBzdXBwb3J0IHRvIHVzZSB0aGUgQ1BVIHRhZyB0byBwcm9wZXJseQorZGlyZWN0IGluZ3Jlc3MgdHJhZmZpYyB0byB0aGUgcmlnaHQgcG9ydC4KKworQml0IDE1IGluIHJlZ2lzdGVyIFJUTDgzNjhSQl9DUFVfQ1RSTF9SRUcgY2FuIGJlIHNldCB0bworMSB0byBkaXNhYmxlIHRoZSBpbnNlcnRpb24gb2YgdGhlIENQVSB0YWcgd2hpY2ggaXMgd2hhdAordGhlIGNvZGUgY3VycmVudGx5IGRvZXMuIFRoZSBiaXQgMTUgZGVmaW5lIGNhbGxzIHRoaXMKK3NldHRpbmcgUlRMODM2OFJCX0NQVV9JTlNUQUcgd2hpY2ggaXMgY29uZnVzaW5nIHNpbmNlIHRoZQoraW52ZXJzZSBtZWFuaW5nIGlzIGltcGxpZWQ6IHByb2dyYW1tZXJzIG1heSB0aGluayB0aGF0CitzZXR0aW5nIHRoaXMgYml0IHRvIDEgd2lsbCAqZW5hYmxlKiBpbnNlcnRpbmcgdGhlIHRhZworcmF0aGVyIHRoYW4gZGlzYWJsaW5nIGl0LCBzbyByZW5hbWUgdGhpcyBzZXR0aW5nIGluCitiaXQgMTUgdG8gUlRMODM2OFJCX0NQVV9OT19UQUcgd2hpY2ggaXMgbW9yZSB0byB0aGUKK3BvaW50LgorCitBZnRlciB0aGlzIGUuZy4gcGluZyB3b3JrcyBvdXQtb2YtdGhlLWJveCB3aXRoIHRoZQorUlRMODM2NlJCLgorCitDYzogREVORyBRaW5nZmFuZyA8ZHFmZXh0QGdtYWlsLmNvbT4KK0NjOiBNYXVyaSBTYW5kYmVyZyA8c2FuZGJlcmdAbWFpbGZlbmNlLmNvbT4KK1Jldmlld2VkLWJ5OiBBbmRyZXcgTHVubiA8YW5kcmV3QGx1bm4uY2g+CitSZXZpZXdlZC1ieTogRmxvcmlhbiBGYWluZWxsaSA8Zi5mYWluZWxsaUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQGxpbmFyby5vcmc+CitTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CistLS0KKyBkcml2ZXJzL25ldC9kc2EvS2NvbmZpZyAgICAgfCAgMSArCisgZHJpdmVycy9uZXQvZHNhL3J0bDgzNjZyYi5jIHwgMzEgKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCAyMyBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9uZXQvZHNhL0tjb25maWcKKysrKyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnCitAQCAtNjYsNiArNjYsNyBAQCBjb25maWcgTkVUX0RTQV9RQ0E4SworIGNvbmZpZyBORVRfRFNBX1JFQUxURUtfU01JCisgCXRyaXN0YXRlICJSZWFsdGVrIFNNSSBFdGhlcm5ldCBzd2l0Y2ggZmFtaWx5IHN1cHBvcnQiCisgCWRlcGVuZHMgb24gTkVUX0RTQQorKwlzZWxlY3QgTkVUX0RTQV9UQUdfUlRMNF9BCisgCXNlbGVjdCBGSVhFRF9QSFkKKyAJc2VsZWN0IElSUV9ET01BSU4KKyAJc2VsZWN0IFJFQUxURUtfUEhZCistLS0gYS9kcml2ZXJzL25ldC9kc2EvcnRsODM2NnJiLmMKKysrKyBiL2RyaXZlcnMvbmV0L2RzYS9ydGw4MzY2cmIuYworQEAgLTEwOSw4ICsxMDksOCBAQAorIC8qIENQVSBwb3J0IGNvbnRyb2wgcmVnICovCisgI2RlZmluZSBSVEw4MzY4UkJfQ1BVX0NUUkxfUkVHCQkweDAwNjEKKyAjZGVmaW5lIFJUTDgzNjhSQl9DUFVfUE9SVFNfTVNLCQkweDAwRkYKKy0vKiBFbmFibGVzIGluc2VydGluZyBjdXN0b20gdGFnIGxlbmd0aC90eXBlIDB4ODg5OSAqLworLSNkZWZpbmUgUlRMODM2OFJCX0NQVV9JTlNUQUcJCUJJVCgxNSkKKysvKiBEaXNhYmxlcyBpbnNlcnRpbmcgY3VzdG9tIHRhZyBsZW5ndGgvdHlwZSAweDg4OTkgKi8KKysjZGVmaW5lIFJUTDgzNjhSQl9DUFVfTk9fVEFHCQlCSVQoMTUpCisgCisgI2RlZmluZSBSVEw4MzY2UkJfU01BUjAJCQkweDAwNzAgLyogYml0cyAwLi4xNSAqLworICNkZWZpbmUgUlRMODM2NlJCX1NNQVIxCQkJMHgwMDcxIC8qIGJpdHMgMTYuLjMxICovCitAQCAtODQ0LDE2ICs4NDQsMTQgQEAgc3RhdGljIGludCBydGw4MzY2cmJfc2V0dXAoc3RydWN0IGRzYV9zdworIAlpZiAocmV0KQorIAkJcmV0dXJuIHJldDsKKyAKKy0JLyogRW5hYmxlIENQVSBwb3J0IGFuZCBlbmFibGUgaW5zZXJ0aW5nIENQVSB0YWcKKysJLyogRW5hYmxlIENQVSBwb3J0IHdpdGggY3VzdG9tIERTQSB0YWcgODg5OS4KKyAJICoKKy0JICogRGlzYWJsaW5nIFJUTDgzNjhSQl9DUFVfSU5TVEFHIGhlcmUgd2lsbCBjaGFuZ2UgdGhlIGJlaGF2aW91cgorLQkgKiBvZiB0aGUgc3dpdGNoIHRvdGFsbHkgYW5kIGl0IHdpbGwgc3RhcnQgdGFsa2luZyBSZWFsdGVrIFJSQ1AKKy0JICogaW50ZXJuYWxseS4gSXQgaXMgcHJvYmFibHkgcG9zc2libGUgdG8gZXhwZXJpbWVudCB3aXRoIHRoaXMsCistCSAqIGJ1dCB0aGVuIHRoZSBrZXJuZWwgbmVlZHMgdG8gdW5kZXJzdGFuZCBhbmQgaGFuZGxlIFJSQ1AgZmlyc3QuCisrCSAqIElmIHlvdSBzZXQgUlRMODM2OFJCX0NQVV9OT19UQUcgKGJpdCAxNSkgaW4gdGhpcyByZWdpc3RlcnMKKysJICogdGhlIGN1c3RvbSB0YWcgaXMgdHVybmVkIG9mZi4KKyAJICovCisgCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhzbWktPm1hcCwgUlRMODM2OFJCX0NQVV9DVFJMX1JFRywKKyAJCQkJIDB4RkZGRiwKKy0JCQkJIFJUTDgzNjhSQl9DUFVfSU5TVEFHIHwgQklUKHNtaS0+Y3B1X3BvcnQpKTsKKysJCQkJIEJJVChzbWktPmNwdV9wb3J0KSk7CisgCWlmIChyZXQpCisgCQlyZXR1cm4gcmV0OworIAorQEAgLTk2NiwyMSArOTY0LDggQEAgc3RhdGljIGludCBydGw4MzY2cmJfc2V0dXAoc3RydWN0IGRzYV9zdworIHN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2wgcnRsODM2Nl9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywKKyAJCQkJCQkgICAgICBpbnQgcG9ydCkKKyB7CistCS8qIEZvciBub3csIHRoZSBSVEwgc3dpdGNoZXMgYXJlIGhhbmRsZWQgd2l0aG91dCBhbnkgY3VzdG9tIHRhZ3MuCistCSAqCistCSAqIEl0IGlzIHBvc3NpYmxlIHRvIHR1cm4gb24gImN1c3RvbSB0YWdzIiBieSByZW1vdmluZyB0aGUKKy0JICogUlRMODM2OFJCX0NQVV9JTlNUQUcgZmxhZyB3aGVuIGVuYWJsaW5nIHRoZSBwb3J0IGJ1dCB3aGF0IGl0CistCSAqIGRvZXMgaXMgdW5mYW1pbGlhciB0byBEU0E6IGV0aGVybmV0IGZyYW1lcyBvZiB0eXBlIDg4OTksIHRoZSBSZWFsdGVrCistCSAqIFJlbW90ZSBDb250cm9sIFByb3RvY29sIChSUkNQKSBzdGFydCB0byBhcHBlYXIgb24gdGhlIENQVSBwb3J0IG9mCistCSAqIHRoZSBkZXZpY2UuIFNvIHRoaXMgaXMgbm90IHRoZSBvcmRpbmFyeSBmZXcgZXh0cmEgYnl0ZXMgaW4gdGhlCistCSAqIGZyYW1lLiBJbnN0ZWFkIGl0IGFwcGVhcnMgdGhhdCB0aGUgc3dpdGNoIHN0YXJ0cyB0byB0YWxrIFJlYWx0ZWsKKy0JICogUlJDUCBpbnRlcm5hbGx5IHdoaWNoIG1lYW5zIGEgcHJldHR5IGNvbXBsZXggUlJDUCBpbXBsZW1lbnRhdGlvbgorLQkgKiBkZWNvZGluZyBhbmQgcmVzcG9uZGluZyB0aGUgUlJDUCBwcm90b2NvbCBpcyBuZWVkZWQgdG8gZXhwbG9pdCB0aGlzLgorLQkgKgorLQkgKiBUaGUgT3BlblJSQ1AgcHJvamVjdCAoZG9ybWFudCBzaW5jZSAyMDA5KSBoYXZlIHJldmVyc2UtZWdpbmVlcmVkCistCSAqIHBhcnRzIG9mIHRoZSBwcm90b2NvbC4KKy0JICovCistCXJldHVybiBEU0FfVEFHX1BST1RPX05PTkU7CisrCS8qIFRoaXMgc3dpdGNoIHVzZXMgdGhlIDQgYnl0ZSBwcm90b2NvbCBBIFJlYWx0ZWsgRFNBIHRhZyAqLworKwlyZXR1cm4gRFNBX1RBR19QUk9UT19SVEw0X0E7CisgfQorIAorIHN0YXRpYyB2b2lkIHJ0bDgzNjZyYl9hZGp1c3RfbGluayhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40Lzc2NS12NS4xMi1uZXQtZHNhLWF1dG9tYXRpY2FsbHktYnJpbmctdXAtRFNBLW1hc3Rlci13aGVuLW9wZW5pLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40Lzc2NS12NS4xMi1uZXQtZHNhLWF1dG9tYXRpY2FsbHktYnJpbmctdXAtRFNBLW1hc3Rlci13aGVuLW9wZW5pLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYzI2ODkKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzY1LXY1LjEyLW5ldC1kc2EtYXV0b21hdGljYWxseS1icmluZy11cC1EU0EtbWFzdGVyLXdoZW4tb3BlbmkucGF0Y2gKQEAgLTAsMCArMSw4NSBAQAorRnJvbSA5ZDVlZjE5MGU1NjE1YTdiNjNhZjg5Zjg4YzQxMDZhNWJjMTI3OTc0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVmxhZGltaXIgT2x0ZWFuIDx2bGFkaW1pci5vbHRlYW5AbnhwLmNvbT4KK0RhdGU6IEZyaSwgNSBGZWIgMjAyMSAxNTozNzoxMCArMDIwMAorU3ViamVjdDogW1BBVENIXSBuZXQ6IGRzYTogYXV0b21hdGljYWxseSBicmluZyB1cCBEU0EgbWFzdGVyIHdoZW4gb3BlbmluZyB1c2VyCisgcG9ydAorCitEU0Egd2FudHMgdGhlIG1hc3RlciBpbnRlcmZhY2UgdG8gYmUgb3BlbiBiZWZvcmUgdGhlIHVzZXIgcG9ydCBpcyBkdWUgdG8KK2hpc3RvcmljYWwgcmVhc29ucy4gVGhlIHByb21pc2N1aXR5IG9mIGludGVyZmFjZXMgdGhhdCBhcmUgZG93biB1c2VkIHRvCitoYXZlIGlzc3VlcywgYXMgcmVmZXJlbmNlZCBMZW5uZXJ0IEJ1eXRlbmhlayBpbiBjb21taXQgZGYwMmM2ZmYyZTM5CisoImRzYTogZml4IG1hc3RlciBpbnRlcmZhY2UgYWxsbXVsdGkvcHJvbWlzYyBoYW5kbGluZyIpLgorCitUaGUgYnVnZml4IG1lbnRpb25lZCB0aGVyZSwgY29tbWl0IGI2YzQwZDY4ZmY2NCAoIm5ldDogb25seSBpbnZva2UKK2Rldi0+Y2hhbmdlX3J4X2ZsYWdzIHdoZW4gZGV2aWNlIGlzIFVQIiksIHdhcyBiYXNpY2FsbHkgYSAiZG9uJ3QgZG8KK3RoYXQiIGFwcHJvYWNoIHRvIHdvcmtpbmcgYXJvdW5kIHRoZSBwcm9taXNjdWl0eSB3aGlsZSBkb3duIGlzc3VlLgorCitGdXJ0aGVyIHdvcmsgZG9uZSBieSBWbGFkIFlhc2V2aWNoIGluIGNvbW1pdCBkMjYxNWJmNDUwNjkgKCJuZXQ6IGNvcmU6CitBbHdheXMgcHJvcGFnYXRlIGZsYWcgY2hhbmdlcyB0byBpbnRlcmZhY2VzIikgaGFzIHJlc29sdmVkIHRoZQordW5kZXJseWluZyBpc3N1ZSwgYW5kIGl0IGlzIHN0cmljdGx5IHVwIHRvIHRoZSBEU0EgYW5kIDgwMjFxIGRyaXZlcnMKK25vdywgaXQgaXMgbm8gbG9uZ2VyIG1hbmRhdGVkIGJ5IHRoZSBuZXR3b3JraW5nIGNvcmUgdGhhdCB0aGUgbWFzdGVyCitpbnRlcmZhY2UgbXVzdCBiZSB1cCB3aGVuIGNoYW5naW5nIGl0cyBwcm9taXNjdWl0eS4KKworRnJvbSBEU0EncyBwb2ludCBvZiB2aWV3LCBkZWNpZGluZyB0byBlcnJvciBvdXQgaW4gZHNhX3NsYXZlX29wZW4KK2JlY2F1c2UgdGhlIG1hc3RlciBpc24ndCB1cCBpcworKGEpIGEgYmFkIHVzZXIgZXhwZXJpZW5jZSBhbmQKKyhiKSBrbm9ja2luZyBhdCBhbiBvcGVuIGRvb3IuCitFdmVuIGlmIHRoZXJlIHN0aWxsIHdhcyBhbiBpc3N1ZSB3aXRoIHByb21pc2N1aXR5IHdoaWxlIGRvd24sIERTQSBjb3VsZAorc3RpbGwganVzdCBvcGVuIHRoZSBtYXN0ZXIgYW5kIGF2b2lkIGl0LgorCitEb2luZyBpdCB0aGlzIHdheSBoYXMgdGhlIGFkZGl0aW9uYWwgYmVuZWZpdCB0aGF0IHVzZXIgc3BhY2UgY2FuIG5vdworcmVtb3ZlIERTQS1zcGVjaWZpYyB3b3JrYXJvdW5kcywgbGlrZSBzeXN0ZW1kLW5ldHdvcmtkIHdpdGggQmluZENhcnJpZXI6CitodHRwczovL2dpdGh1Yi5jb20vc3lzdGVtZC9zeXN0ZW1kL2lzc3Vlcy83NDc4CisKK0FuZCB3ZSBjYW4gZmluYWxseSByZW1vdmUgb25lIG9mIHRoZSAyIGJ1bGxldHMgaW4gdGhlICJDb21tb24gcGl0ZmFsbHMKK3VzaW5nIERTQSBzZXR1cHMiIGNoYXB0ZXIuCisKK1Rlc3RlZCB3aXRoIHR3byBjYXNjYWRlZCBEU0Egc3dpdGNoZXM6CisKKyQgaXAgbGluayBzZXQgc3cwcDIgdXAKK2ZzbF9lbmV0YyAwMDAwOjAwOjAwLjIgZW5vMjogY29uZmlndXJpbmcgZm9yIGZpeGVkL2ludGVybmFsIGxpbmsgbW9kZQorZnNsX2VuZXRjIDAwMDA6MDA6MDAuMiBlbm8yOiBMaW5rIGlzIFVwIC0gMUdicHMvRnVsbCAtIGZsb3cgY29udHJvbCByeC90eAorbXNjY19mZWxpeCAwMDAwOjAwOjAwLjUgc3dwMDogY29uZmlndXJpbmcgZm9yIGZpeGVkL3NnbWlpIGxpbmsgbW9kZQorbXNjY19mZWxpeCAwMDAwOjAwOjAwLjUgc3dwMDogTGluayBpcyBVcCAtIDFHYnBzL0Z1bGwgLSBmbG93IGNvbnRyb2wgb2ZmCis4MDIxcTogYWRkaW5nIFZMQU4gMCB0byBIVyBmaWx0ZXIgb24gZGV2aWNlIHN3cDAKK3NqYTExMDUgc3BpMi4wIHN3MHAyOiBjb25maWd1cmluZyBmb3IgcGh5L3JnbWlpLWlkIGxpbmsgbW9kZQorSVB2NjogQUREUkNPTkYoTkVUREVWX0NIQU5HRSk6IGVubzI6IGxpbmsgYmVjb21lcyByZWFkeQorSVB2NjogQUREUkNPTkYoTkVUREVWX0NIQU5HRSk6IHN3cDA6IGxpbmsgYmVjb21lcyByZWFkeQorCitTaWduZWQtb2ZmLWJ5OiBWbGFkaW1pciBPbHRlYW4gPHZsYWRpbWlyLm9sdGVhbkBueHAuY29tPgorUmV2aWV3ZWQtYnk6IEFuZHJldyBMdW5uIDxhbmRyZXdAbHVubi5jaD4KK1Jldmlld2VkLWJ5OiBGbG9yaWFuIEZhaW5lbGxpIDxmLmZhaW5lbGxpQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEpha3ViIEtpY2luc2tpIDxrdWJhQGtlcm5lbC5vcmc+CistLS0KKyBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZHNhL2RzYS5yc3QgfCA0IC0tLS0KKyBuZXQvZHNhL3NsYXZlLmMgICAgICAgICAgICAgICAgICAgICAgfCA3ICsrKysrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RzYS9kc2EucnN0CisrKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZHNhL2RzYS5yc3QKK0BAIC0yNzMsMTAgKzI3Myw2IEBAIHdpbGwgbm90IG1ha2UgdXMgZ28gdGhyb3VnaCB0aGUgc3dpdGNoIHQKKyB0aGUgRXRoZXJuZXQgc3dpdGNoIG9uIHRoZSBvdGhlciBlbmQsIGV4cGVjdGluZyBhIHRhZyB3aWxsIHR5cGljYWxseSBkcm9wIHRoaXMKKyBmcmFtZS4KKyAKKy1TbGF2ZSBuZXR3b3JrIGRldmljZXMgY2hlY2sgdGhhdCB0aGUgbWFzdGVyIG5ldHdvcmsgZGV2aWNlIGlzIFVQIGJlZm9yZSBhbGxvd2luZworLXlvdSB0byBhZG1pbmlzdHJhdGl2ZWx5IGJyaW5nIFVQIHRoZXNlIHNsYXZlIG5ldHdvcmsgZGV2aWNlcy4gQSBjb21tb24KKy1jb25maWd1cmF0aW9uIG1pc3Rha2UgaXMgZm9yZ2V0dGluZyB0byBicmluZyBVUCB0aGUgbWFzdGVyIG5ldHdvcmsgZGV2aWNlIGZpcnN0LgorLQorIEludGVyYWN0aW9ucyB3aXRoIG90aGVyIHN1YnN5c3RlbXMKKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgCistLS0gYS9uZXQvZHNhL3NsYXZlLmMKKysrKyBiL25ldC9kc2Evc2xhdmUuYworQEAgLTcwLDggKzcwLDExIEBAIHN0YXRpYyBpbnQgZHNhX3NsYXZlX29wZW4oc3RydWN0IG5ldF9kZXYKKyAJc3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV9zbGF2ZV90b19wb3J0KGRldik7CisgCWludCBlcnI7CisgCistCWlmICghKG1hc3Rlci0+ZmxhZ3MgJiBJRkZfVVApKQorLQkJcmV0dXJuIC1FTkVURE9XTjsKKysJZXJyID0gZGV2X29wZW4obWFzdGVyLCBOVUxMKTsKKysJaWYgKGVyciA8IDApIHsKKysJCW5ldGRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIG9wZW4gbWFzdGVyICVzXG4iLCBtYXN0ZXItPm5hbWUpOworKwkJZ290byBvdXQ7CisrCX0KKyAKKyAJaWYgKCFldGhlcl9hZGRyX2VxdWFsKGRldi0+ZGV2X2FkZHIsIG1hc3Rlci0+ZGV2X2FkZHIpKSB7CisgCQllcnIgPSBkZXZfdWNfYWRkKG1hc3RlciwgZGV2LT5kZXZfYWRkcik7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzcwLXY1LjEyLW5ldC1icmlkZ2Utbm90aWZ5LXN3aXRjaGRldi1vZi1kaXNhcHBlYXJhbmNlLW9mLW9sZC0ucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzcwLXY1LjEyLW5ldC1icmlkZ2Utbm90aWZ5LXN3aXRjaGRldi1vZi1kaXNhcHBlYXJhbmNlLW9mLW9sZC0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY0ZTc0YwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83NzAtdjUuMTItbmV0LWJyaWRnZS1ub3RpZnktc3dpdGNoZGV2LW9mLWRpc2FwcGVhcmFuY2Utb2Ytb2xkLS5wYXRjaApAQCAtMCwwICsxLDEyNiBAQAorRnJvbSA5MGRjOGZkMzYwNzhhNTM2NjcxYWRhZTg4NGQwYjkyOWNjZTY0ODBhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVmxhZGltaXIgT2x0ZWFuIDx2bGFkaW1pci5vbHRlYW5AbnhwLmNvbT4KK0RhdGU6IFdlZCwgNiBKYW4gMjAyMSAxMTo1MTozMCArMDIwMAorU3ViamVjdDogW1BBVENIXSBuZXQ6IGJyaWRnZTogbm90aWZ5IHN3aXRjaGRldiBvZiBkaXNhcHBlYXJhbmNlIG9mIG9sZCBGREIKKyBlbnRyeSB1cG9uIG1pZ3JhdGlvbgorCitDdXJyZW50bHkgdGhlIGJyaWRnZSBlbWl0cyBhdG9taWMgc3dpdGNoZGV2IG5vdGlmaWNhdGlvbnMgZm9yCitkeW5hbWljYWxseSBsZWFybnQgRkRCIGVudHJpZXMuIE1vbml0b3JpbmcgdGhlc2Ugbm90aWZpY2F0aW9ucyB3b3Jrcword29uZGVycyBmb3Igc3dpdGNoZGV2IGRyaXZlcnMgdGhhdCB3YW50IHRvIGtlZXAgdGhlaXIgaGFyZHdhcmUgRkRCIGluCitzeW5jIHdpdGggdGhlIGJyaWRnZSdzIEZEQi4KKworRm9yIGV4YW1wbGUgc3RhdGlvbiBBIHdhbnRzIHRvIHRhbGsgdG8gc3RhdGlvbiBCIGluIHRoZSBkaWFncmFtIGJlbG93LAorYW5kIHdlIGFyZSBjb25jZXJuZWQgd2l0aCB0aGUgYmVoYXZpb3Igb2YgdGhlIGJyaWRnZSBvbiB0aGUgRFVUIGRldmljZToKKworICAgICAgICAgICAgICAgICAgIERVVAorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworIHwgICAgICAgICAgICAgICAgIGJyMCAgICAgICAgICAgICAgICAgfAorIHwgKy0tLS0tLSsgKy0tLS0tLSsgKy0tLS0tLSsgKy0tLS0tLSsgfAorIHwgfCAgICAgIHwgfCAgICAgIHwgfCAgICAgIHwgfCAgICAgIHwgfAorIHwgfCBzd3AwIHwgfCBzd3AxIHwgfCBzd3AyIHwgfCBldGgwIHwgfAorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwKKyAgU3RhdGlvbiBBICAgIHwgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgKy0tKy0tLS0tLSstLSsgICAgKy0tKy0tLS0tLSstLSsKKyAgICAgICAgIHwgIHwgICAgICB8ICB8ICAgIHwgIHwgICAgICB8ICB8CisgICAgICAgICB8ICB8IHN3cDAgfCAgfCAgICB8ICB8IHN3cDAgfCAgfAorIEFub3RoZXIgfCAgKy0tLS0tLSsgIHwgICAgfCAgKy0tLS0tLSsgIHwgQW5vdGhlcgorICBzd2l0Y2ggfCAgICAgYnIwICAgIHwgICAgfCAgICAgYnIwICAgIHwgc3dpdGNoCisgICAgICAgICB8ICArLS0tLS0tKyAgfCAgICB8ICArLS0tLS0tKyAgfAorICAgICAgICAgfCAgfCAgICAgIHwgIHwgICAgfCAgfCAgICAgIHwgIHwKKyAgICAgICAgIHwgIHwgc3dwMSB8ICB8ICAgIHwgIHwgc3dwMSB8ICB8CisgICAgICAgICArLS0rLS0tLS0tKy0tKyAgICArLS0rLS0tLS0tKy0tKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRpb24gQgorCitJbnRlcmZhY2VzIHN3cDAsIHN3cDEsIHN3cDIgYXJlIGhhbmRsZWQgYnkgYSBzd2l0Y2hkZXYgZHJpdmVyIHRoYXQgaGFzCit0aGUgZm9sbG93aW5nIHByb3BlcnR5OiBmcmFtZXMgaW5qZWN0ZWQgZnJvbSBpdHMgY29udHJvbCBpbnRlcmZhY2UgYnlwYXNzCit0aGUgaW50ZXJuYWwgYWRkcmVzcyBhbmFseXplciBsb2dpYywgYW5kIHRoZXJlZm9yZSwgdGhpcyBoYXJkd2FyZSBkb2VzCitub3QgbGVhcm4gZnJvbSB0aGUgc291cmNlIGFkZHJlc3Mgb2YgcGFja2V0cyB0cmFuc21pdHRlZCBieSB0aGUgbmV0d29yaworc3RhY2sgdGhyb3VnaCBpdC4gU28sIHNpbmNlIGJyaWRnaW5nIGJldHdlZW4gZXRoMCAod2hlcmUgU3RhdGlvbiBCIGlzCithdHRhY2hlZCkgYW5kIHN3cDAgKHdoZXJlIFN0YXRpb24gQSBpcyBhdHRhY2hlZCkgaXMgZG9uZSBpbiBzb2Z0d2FyZSwKK3RoZSBzd2l0Y2hkZXYgaGFyZHdhcmUgd2lsbCBuZXZlciBsZWFybiB0aGUgc291cmNlIGFkZHJlc3Mgb2YgU3RhdGlvbiBCLgorU28gdGhlIHRyYWZmaWMgdG93YXJkcyB0aGF0IGRlc3RpbmF0aW9uIHdpbGwgYmUgdHJlYXRlZCBhcyB1bmtub3duLCBpLmUuCitmbG9vZGVkLgorCitUaGlzIGlzIHdoZXJlIHRoZSBicmlkZ2Ugbm90aWZpY2F0aW9ucyBjb21lIGluIGhhbmR5LiBXaGVuIGJyMCBvbiB0aGUKK0RVVCBzZWVzIGZyYW1lcyB3aXRoIFN0YXRpb24gQidzIE1BQyBhZGRyZXNzIG9uIGV0aDAsIHRoZSBzd2l0Y2hkZXYKK2RyaXZlciBnZXRzIHRoZXNlIG5vdGlmaWNhdGlvbnMgYW5kIGNhbiBpbnN0YWxsIGEgcnVsZSB0byBzZW5kIGZyYW1lcwordG93YXJkcyBTdGF0aW9uIEIncyBhZGRyZXNzIHRoYXQgYXJlIGluY29taW5nIGZyb20gc3dwMCwgc3dwMSwgc3dwMiwKK29ubHkgdG93YXJkcyB0aGUgY29udHJvbCBpbnRlcmZhY2UuIFRoaXMgaXMgYWxsIHN3aXRjaGRldiBkcml2ZXIgcHJpdmF0ZQorYnVzaW5lc3MsIHdoaWNoIHRoZSBub3RpZmljYXRpb24gbWFrZXMgcG9zc2libGUuCisKK0FsbCBpcyBmaW5lIHVudGlsIHNvbWVvbmUgdW5wbHVncyBTdGF0aW9uIEIncyBjYWJsZSBhbmQgbW92ZXMgaXQgdG8gdGhlCitvdGhlciBzd2l0Y2g6CisKKyAgICAgICAgICAgICAgICAgICBEVVQKKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyB8ICAgICAgICAgICAgICAgICBicjAgICAgICAgICAgICAgICAgIHwKKyB8ICstLS0tLS0rICstLS0tLS0rICstLS0tLS0rICstLS0tLS0rIHwKKyB8IHwgICAgICB8IHwgICAgICB8IHwgICAgICB8IHwgICAgICB8IHwKKyB8IHwgc3dwMCB8IHwgc3dwMSB8IHwgc3dwMiB8IHwgZXRoMCB8IHwKKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgIHwgICAgICAgIHwgICAgICAgICAgICAgICAgICB8CisgIFN0YXRpb24gQSAgICB8ICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICstLSstLS0tLS0rLS0rICAgICstLSstLS0tLS0rLS0rCisgICAgICAgICB8ICB8ICAgICAgfCAgfCAgICB8ICB8ICAgICAgfCAgfAorICAgICAgICAgfCAgfCBzd3AwIHwgIHwgICAgfCAgfCBzd3AwIHwgIHwKKyBBbm90aGVyIHwgICstLS0tLS0rICB8ICAgIHwgICstLS0tLS0rICB8IEFub3RoZXIKKyAgc3dpdGNoIHwgICAgIGJyMCAgICB8ICAgIHwgICAgIGJyMCAgICB8IHN3aXRjaAorICAgICAgICAgfCAgKy0tLS0tLSsgIHwgICAgfCAgKy0tLS0tLSsgIHwKKyAgICAgICAgIHwgIHwgICAgICB8ICB8ICAgIHwgIHwgICAgICB8ICB8CisgICAgICAgICB8ICB8IHN3cDEgfCAgfCAgICB8ICB8IHN3cDEgfCAgfAorICAgICAgICAgKy0tKy0tLS0tLSstLSsgICAgKy0tKy0tLS0tLSstLSsKKyAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgU3RhdGlvbiBCCisKK0x1Y2tpbHkgZm9yIHRoZSB1c2UgY2FzZXMgd2UgY2FyZSBhYm91dCwgU3RhdGlvbiBCIGlzIG5vaXN5IGVub3VnaCB0aGF0Cit0aGUgRFVUIGhlYXJzIGl0IChvbiBzd3AxIHRoaXMgdGltZSkuIHN3cDEgcmVjZWl2ZXMgdGhlIGZyYW1lcyBhbmQKK2RlbGl2ZXJzIHRoZW0gdG8gdGhlIGJyaWRnZSwgd2hvIGVudGVycyB0aGUgdW5saWtlbHkgcGF0aCBpbiBicl9mZGJfdXBkYXRlCitvZiB1cGRhdGluZyBhbiBleGlzdGluZyBlbnRyeS4gSXQgbW92ZXMgdGhlIGVudHJ5IGluIHRoZSBzb2Z0d2FyZSBicmlkZ2UKK3RvIHN3cDEgYW5kIGVtaXRzIGFuIGFkZGl0aW9uIG5vdGlmaWNhdGlvbiB0b3dhcmRzIHRoYXQuCisKK0FzIGZhciBhcyB0aGUgc3dpdGNoZGV2IGRyaXZlciBpcyBjb25jZXJuZWQsIGFsbCB0aGF0IGl0IG5lZWRzIHRvIGVuc3VyZQoraXMgdGhhdCB0cmFmZmljIGJldHdlZW4gU3RhdGlvbiBBIGFuZCBTdGF0aW9uIEIgaXMgbm90IGZvcmV2ZXIgYnJva2VuLgorSWYgaXQgZG9lcyBub3RoaW5nLCB0aGVuIHRoZSBzdGFsZSBydWxlIHRvIHNlbmQgZnJhbWVzIGZvciBTdGF0aW9uIEIKK3Rvd2FyZHMgdGhlIGNvbnRyb2wgaW50ZXJmYWNlIHJlbWFpbnMgaW4gcGxhY2UuIEJ1dCBTdGF0aW9uIEIgaXMgbm8KK2xvbmdlciByZWFjaGFibGUgdmlhIHRoZSBjb250cm9sIGludGVyZmFjZSwgYnV0IHZpYSBhIHBvcnQgdGhhdCBjYW4KK29mZmxvYWQgdGhlIGJyaWRnZSBwb3J0IGxlYXJuaW5nIGF0dHJpYnV0ZS4gSXQncyBqdXN0IHRoYXQgdGhlIHBvcnQgaXMKK3ByZXZlbnRlZCBmcm9tIGxlYXJuaW5nIHRoaXMgYWRkcmVzcywgc2luY2UgdGhlIHJ1bGUgb3ZlcnJpZGVzIEZEQgordXBkYXRlcy4gU28gdGhlIHJ1bGUgbmVlZHMgdG8gZ28uIFRoZSBxdWVzdGlvbiBpcyB2aWEgd2hhdCBtZWNoYW5pc20uCisKK0l0IHN1cmUgd291bGQgYmUgcG9zc2libGUgZm9yIHRoaXMgc3dpdGNoZGV2IGRyaXZlciB0byBrZWVwIHRyYWNrIG9mIGFsbAorYWRkcmVzc2VzIHdoaWNoIGFyZSBzZW50IHRvIHRoZSBjb250cm9sIGludGVyZmFjZSwgYW5kIHRoZW4gYWxzbyBsaXN0ZW4KK2ZvciBicmlkZ2Ugbm90aWZpZXIgZXZlbnRzIG9uIGl0cyBvd24gcG9ydHMsIHNlYXJjaGluZyBmb3IgdGhlIG9uZXMgdGhhdAoraGF2ZSBhIE1BQyBhZGRyZXNzIHdoaWNoIHdhcyBwcmV2aW91c2x5IHNlbnQgdG8gdGhlIGNvbnRyb2wgaW50ZXJmYWNlLgorQnV0IHRoaXMgaXMgY3VtYmVyc29tZSBhbmQgaW5lZmZpY2llbnQuIEluc3RlYWQsIHdpdGggb25lIHNtYWxsIGNoYW5nZSwKK3RoZSBicmlkZ2UgY291bGQgbm90aWZ5IG9mIHRoZSBhZGRyZXNzIGRlbGV0aW9uIGZyb20gdGhlIG9sZCBwb3J0LCBpbiBhCitzeW1tZXRyaWNhbCBtYW5uZXIgd2l0aCBob3cgaXQgZGlkIGZvciB0aGUgaW5zZXJ0aW9uLiBUaGVuIHRoZSBzd2l0Y2hkZXYKK2RyaXZlciB3b3VsZCBub3QgYmUgcmVxdWlyZWQgdG8gbW9uaXRvciBsZWFybi9mb3JnZXQgZXZlbnRzIGZvciBpdHMgb3duCitwb3J0cy4gSXQgY291bGQganVzdCBkZWxldGUgdGhlIHJ1bGUgdG93YXJkcyB0aGUgY29udHJvbCBpbnRlcmZhY2UgdXBvbgorYnJpZGdlIGVudHJ5IG1pZ3JhdGlvbi4gVGhpcyB3b3VsZCBtYWtlIGhhcmR3YXJlIGFkZHJlc3MgbGVhcm5pbmcgYmUKK3Bvc3NpYmxlIGFnYWluLiBUaGVuIGl0IHdvdWxkIHRha2UgYSBmZXcgbW9yZSBwYWNrZXRzIHVudGlsIHRoZSBoYXJkd2FyZQorYW5kIHNvZnR3YXJlIEZEQiB3b3VsZCBiZSBpbiBzeW5jIGFnYWluLgorCitTaWduZWQtb2ZmLWJ5OiBWbGFkaW1pciBPbHRlYW4gPHZsYWRpbWlyLm9sdGVhbkBueHAuY29tPgorQWNrZWQtYnk6IE5pa29sYXkgQWxla3NhbmRyb3YgPG5pa29sYXlAbnZpZGlhLmNvbT4KK1Jldmlld2VkLWJ5OiBJZG8gU2NoaW1tZWwgPGlkb3NjaEBudmlkaWEuY29tPgorUmV2aWV3ZWQtYnk6IEFuZHJldyBMdW5uIDxhbmRyZXdAbHVubi5jaD4KK1Jldmlld2VkLWJ5OiBGbG9yaWFuIEZhaW5lbGxpIDxmLmZhaW5lbGxpQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEpha3ViIEtpY2luc2tpIDxrdWJhQGtlcm5lbC5vcmc+CistLS0KKyBuZXQvYnJpZGdlL2JyX2ZkYi5jIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKKy0tLSBhL25ldC9icmlkZ2UvYnJfZmRiLmMKKysrKyBiL25ldC9icmlkZ2UvYnJfZmRiLmMKK0BAIC01ODEsNiArNTgxLDcgQEAgdm9pZCBicl9mZGJfdXBkYXRlKHN0cnVjdCBuZXRfYnJpZGdlICpicgorIAorIAkJCS8qIGZhc3RwYXRoOiB1cGRhdGUgb2YgZXhpc3RpbmcgZW50cnkgKi8KKyAJCQlpZiAodW5saWtlbHkoc291cmNlICE9IGZkYi0+ZHN0ICYmICFmZGItPmlzX3N0aWNreSkpIHsKKysJCQkJYnJfc3dpdGNoZGV2X2ZkYl9ub3RpZnkoZmRiLCBSVE1fREVMTkVJR0gpOworIAkJCQlmZGItPmRzdCA9IHNvdXJjZTsKKyAJCQkJZmRiX21vZGlmaWVkID0gdHJ1ZTsKKyAJCQkJLyogVGFrZSBvdmVyIEhXIGxlYXJuZWQgZW50cnkgKi8KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83NzEtdjUuMTItbmV0LWRzYS1iZS1sb3VkZXItd2hlbi1hLW5vbi1sZWdhY3ktRkRCLW9wZXJhdGlvbi1mYS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83NzEtdjUuMTItbmV0LWRzYS1iZS1sb3VkZXItd2hlbi1hLW5vbi1sZWdhY3ktRkRCLW9wZXJhdGlvbi1mYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTNlYjcxCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40Lzc3MS12NS4xMi1uZXQtZHNhLWJlLWxvdWRlci13aGVuLWEtbm9uLWxlZ2FjeS1GREItb3BlcmF0aW9uLWZhLnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK0Zyb20gMmZkMTg2NTAxYjFjZmYxNTVjYzRhNzU1YzIxMDc5M2NmYzBkZmZiNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFZsYWRpbWlyIE9sdGVhbiA8dmxhZGltaXIub2x0ZWFuQG54cC5jb20+CitEYXRlOiBXZWQsIDYgSmFuIDIwMjEgMTE6NTE6MzEgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gbmV0OiBkc2E6IGJlIGxvdWRlciB3aGVuIGEgbm9uLWxlZ2FjeSBGREIgb3BlcmF0aW9uIGZhaWxzCisKK1RoZSBkZXZfY2xvc2UoKSBjYWxsIHdhcyBhZGRlZCBpbiBjb21taXQgYzllYjNlMGY4NzAxICgibmV0OiBkc2E6IEFkZAorc3VwcG9ydCBmb3IgbGVhcm5pbmcgRkRCIHRocm91Z2ggbm90aWZpY2F0aW9uIikgInRvIGluZGljYXRlIGluY29uc2lzdGVudAorc2l0dWF0aW9uIiB3aGVuIHdlIGNvdWxkIG5vdCBkZWxldGUgYW4gRkRCIGVudHJ5IGZyb20gdGhlIHBvcnQuCisKK2JyaWRnZSBmZGIgZGVsIGQ4OjU4OmQ3OjAwOmNhOjZkIGRldiBzd3AwIHNlbGYgbWFzdGVyCisKK0l0IGlzIGEgYml0IGRyYXN0aWMgYW5kIGF0IHRoZSBzYW1lIHRpbWUgbm90IGhlbHBmdWwgaWYgdGhlIGFib3ZlIGZhaWxzCit0byBvbmx5IHByaW50IHdpdGggbmV0ZGV2X2RiZyBsb2cgbGV2ZWwsIGJ1dCBvbiB0aGUgb3RoZXIgaGFuZCB0byBicmluZwordGhlIGludGVyZmFjZSBkb3duLgorCitTbyBpbmNyZWFzZSB0aGUgdmVyYm9zaXR5IG9mIHRoZSBlcnJvciBtZXNzYWdlLCBhbmQgZHJvcCBkZXZfY2xvc2UoKS4KKworU2lnbmVkLW9mZi1ieTogVmxhZGltaXIgT2x0ZWFuIDx2bGFkaW1pci5vbHRlYW5AbnhwLmNvbT4KK1Jldmlld2VkLWJ5OiBBbmRyZXcgTHVubiA8YW5kcmV3QGx1bm4uY2g+CitSZXZpZXdlZC1ieTogRmxvcmlhbiBGYWluZWxsaSA8Zi5mYWluZWxsaUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBKYWt1YiBLaWNpbnNraSA8a3ViYUBrZXJuZWwub3JnPgorLS0tCisgbmV0L2RzYS9zbGF2ZS5jIHwgMTAgKysrKysrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKKy0tLSBhL25ldC9kc2Evc2xhdmUuYworKysrIGIvbmV0L2RzYS9zbGF2ZS5jCitAQCAtMTU5Myw3ICsxNTkzLDkgQEAgc3RhdGljIHZvaWQgZHNhX3NsYXZlX3N3aXRjaGRldl9ldmVudF93bworIAorIAkJZXJyID0gZHNhX3BvcnRfZmRiX2FkZChkcCwgZmRiX2luZm8tPmFkZHIsIGZkYl9pbmZvLT52aWQpOworIAkJaWYgKGVycikgeworLQkJCW5ldGRldl9kYmcoZGV2LCAiZmRiIGFkZCBmYWlsZWQgZXJyPSVkXG4iLCBlcnIpOworKwkJCW5ldGRldl9lcnIoZGV2LAorKwkJCQkgICAiZmFpbGVkIHRvIGFkZCAlcE0gdmlkICVkIHRvIGZkYjogJWRcbiIsCisrCQkJCSAgIGZkYl9pbmZvLT5hZGRyLCBmZGJfaW5mby0+dmlkLCBlcnIpOworIAkJCWJyZWFrOworIAkJfQorIAkJZmRiX2luZm8tPm9mZmxvYWRlZCA9IHRydWU7CitAQCAtMTYwOCw5ICsxNjEwLDExIEBAIHN0YXRpYyB2b2lkIGRzYV9zbGF2ZV9zd2l0Y2hkZXZfZXZlbnRfd28KKyAKKyAJCWVyciA9IGRzYV9wb3J0X2ZkYl9kZWwoZHAsIGZkYl9pbmZvLT5hZGRyLCBmZGJfaW5mby0+dmlkKTsKKyAJCWlmIChlcnIpIHsKKy0JCQluZXRkZXZfZGJnKGRldiwgImZkYiBkZWwgZmFpbGVkIGVycj0lZFxuIiwgZXJyKTsKKy0JCQlkZXZfY2xvc2UoZGV2KTsKKysJCQluZXRkZXZfZXJyKGRldiwKKysJCQkJICAgImZhaWxlZCB0byBkZWxldGUgJXBNIHZpZCAlZCBmcm9tIGZkYjogJWRcbiIsCisrCQkJCSAgIGZkYl9pbmZvLT5hZGRyLCBmZGJfaW5mby0+dmlkLCBlcnIpOworIAkJfQorKworIAkJYnJlYWs7CisgCX0KKyAJcnRubF91bmxvY2soKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83NzItdjUuMTItbmV0LWRzYS1kb24tdC11c2Utc3dpdGNoZGV2X25vdGlmaWVyX2ZkYl9pbmZvLWluLWRzYS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83NzItdjUuMTItbmV0LWRzYS1kb24tdC11c2Utc3dpdGNoZGV2X25vdGlmaWVyX2ZkYl9pbmZvLWluLWRzYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzU4NzBkCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40Lzc3Mi12NS4xMi1uZXQtZHNhLWRvbi10LXVzZS1zd2l0Y2hkZXZfbm90aWZpZXJfZmRiX2luZm8taW4tZHNhLnBhdGNoCkBAIC0wLDAgKzEsMjI2IEBACitGcm9tIGM0YmI3NmE5YTBlZjg3YzRjYzFmNjM2ZGVmZWQ1ZjEyZGViOWY1YTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBWbGFkaW1pciBPbHRlYW4gPHZsYWRpbWlyLm9sdGVhbkBueHAuY29tPgorRGF0ZTogV2VkLCA2IEphbiAyMDIxIDExOjUxOjMyICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIG5ldDogZHNhOiBkb24ndCB1c2Ugc3dpdGNoZGV2X25vdGlmaWVyX2ZkYl9pbmZvIGluCisgZHNhX3N3aXRjaGRldl9ldmVudF93b3JrCisKK0N1cnJlbnRseSBEU0EgZG9lc24ndCBhZGQgRkRCIGVudHJpZXMgb24gdGhlIENQVSBwb3J0LCBiZWNhdXNlIGl0IG9ubHkKK2RvZXMgc28gdGhyb3VnaCBzd2l0Y2hkZXYsIHdoaWNoIGlzIGFzc29jaWF0ZWQgd2l0aCBhIG5ldF9kZXZpY2UsIGFuZAordGhlcmUgYXJlIG5vbmUgb2YgdGhvc2UgZm9yIHRoZSBDUFUgcG9ydC4KKworQnV0IGFjdHVhbGx5IEZEQiBhZGRyZXNzZXMgb24gdGhlIENQVSBwb3J0IGhhdmUgc29tZSB1c2UgY2FzZXMgb2YgdGhlaXIKK293biwgaWYgdGhlIHN3aXRjaGRldiBvcGVyYXRpb25zIGFyZSBpbml0aWF0ZWQgZnJvbSB3aXRoaW4gdGhlIERTQQorbGF5ZXIuIFRoZXJlIGlzIGp1c3Qgb25lIHByb2JsZW0gd2l0aCB0aGUgZXhpc3RpbmcgY29kZTogaXQgcGFzc2VzIGEKK3N0cnVjdHVyZSBpbiBkc2Ffc3dpdGNoZGV2X2V2ZW50X3dvcmsgd2hpY2ggd2FzIHJldHJpZXZlZCBkaXJlY3RseSBmcm9tCitzd2l0Y2hkZXYsIHNvIGl0IGNvbnRhaW5zIGEgbmV0X2RldmljZS4gV2UgbmVlZCB0byBnZW5lcmFsaXplIHRoZQorY29udGVudHMgdG8gc29tZXRoaW5nIHRoYXQgY292ZXJzIHRoZSBDUFUgcG9ydCBhcyB3ZWxsOiB0aGUgImRzLCBwb3J0IgordHVwbGUgaXMgZmluZSBmb3IgdGhhdC4KKworTm90ZSB0aGF0IHRoZSBuZXcgcHJvY2VkdXJlIGZvciBub3RpZnlpbmcgdGhlIHN1Y2Nlc3NmdWwgRkRCIG9mZmxvYWQgaXMKK2luc3BpcmVkIGZyb20gdGhlIHJvY2tlciBtb2RlbC4KKworQWxzbywgbm90aGluZyB3YXMgYmVpbmcgZG9uZSBpZiBhZGRlZF9ieV91c2VyIHdhcyBmYWxzZS4gTGV0J3MgY2hlY2sgZm9yCit0aGF0IGEgbG90IGVhcmxpZXIsIGFuZCBkb24ndCBhY3R1YWxseSBib3RoZXIgdG8gc2NoZWR1bGUgdGhlIHdvcmtlcgorZm9yIG5vdGhpbmcuCisKK1NpZ25lZC1vZmYtYnk6IFZsYWRpbWlyIE9sdGVhbiA8dmxhZGltaXIub2x0ZWFuQG54cC5jb20+CitSZXZpZXdlZC1ieTogRmxvcmlhbiBGYWluZWxsaSA8Zi5mYWluZWxsaUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBKYWt1YiBLaWNpbnNraSA8a3ViYUBrZXJuZWwub3JnPgorLS0tCisgbmV0L2RzYS9kc2FfcHJpdi5oIHwgIDEyICsrKysrCisgbmV0L2RzYS9zbGF2ZS5jICAgIHwgMTA2ICsrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgNjUgaW5zZXJ0aW9ucygrKSwgNTMgZGVsZXRpb25zKC0pCisKKy0tLSBhL25ldC9kc2EvZHNhX3ByaXYuaAorKysrIGIvbmV0L2RzYS9kc2FfcHJpdi5oCitAQCAtNjIsNiArNjIsMTggQEAgc3RydWN0IGRzYV9ub3RpZmllcl92bGFuX2luZm8geworIAlpbnQgcG9ydDsKKyB9OworIAorK3N0cnVjdCBkc2Ffc3dpdGNoZGV2X2V2ZW50X3dvcmsgeworKwlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7CisrCWludCBwb3J0OworKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKysJdW5zaWduZWQgbG9uZyBldmVudDsKKysJLyogU3BlY2lmaWMgZm9yIFNXSVRDSERFVl9GREJfQUREX1RPX0RFVklDRSBhbmQKKysJICogU1dJVENIREVWX0ZEQl9ERUxfVE9fREVWSUNFCisrCSAqLworKwl1bnNpZ25lZCBjaGFyIGFkZHJbRVRIX0FMRU5dOworKwl1MTYgdmlkOworK307CisrCisgc3RydWN0IGRzYV9zbGF2ZV9wcml2IHsKKyAJLyogQ29weSBvZiBDUFUgcG9ydCB4bWl0IGZvciBmYXN0ZXIgYWNjZXNzIGluIHNsYXZlIHRyYW5zbWl0IGhvdCBwYXRoICovCisgCXN0cnVjdCBza19idWZmICoJKCp4bWl0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorLS0tIGEvbmV0L2RzYS9zbGF2ZS5jCisrKysgYi9uZXQvZHNhL3NsYXZlLmMKK0BAIC0xNTY4LDc2ICsxNTY4LDY2IEBAIHN0YXRpYyBpbnQgZHNhX3NsYXZlX25ldGRldmljZV9ldmVudChzdHIKKyAJcmV0dXJuIE5PVElGWV9ET05FOworIH0KKyAKKy1zdHJ1Y3QgZHNhX3N3aXRjaGRldl9ldmVudF93b3JrIHsKKy0Jc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CistCXN0cnVjdCBzd2l0Y2hkZXZfbm90aWZpZXJfZmRiX2luZm8gZmRiX2luZm87CistCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CistCXVuc2lnbmVkIGxvbmcgZXZlbnQ7CistfTsKKytzdGF0aWMgdm9pZAorK2RzYV9mZGJfb2ZmbG9hZF9ub3RpZnkoc3RydWN0IGRzYV9zd2l0Y2hkZXZfZXZlbnRfd29yayAqc3dpdGNoZGV2X3dvcmspCisreworKwlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBzd2l0Y2hkZXZfd29yay0+ZHM7CisrCXN0cnVjdCBzd2l0Y2hkZXZfbm90aWZpZXJfZmRiX2luZm8gaW5mbzsKKysJc3RydWN0IGRzYV9wb3J0ICpkcDsKKysKKysJaWYgKCFkc2FfaXNfdXNlcl9wb3J0KGRzLCBzd2l0Y2hkZXZfd29yay0+cG9ydCkpCisrCQlyZXR1cm47CisrCisrCWluZm8uYWRkciA9IHN3aXRjaGRldl93b3JrLT5hZGRyOworKwlpbmZvLnZpZCA9IHN3aXRjaGRldl93b3JrLT52aWQ7CisrCWluZm8ub2ZmbG9hZGVkID0gdHJ1ZTsKKysJZHAgPSBkc2FfdG9fcG9ydChkcywgc3dpdGNoZGV2X3dvcmstPnBvcnQpOworKwljYWxsX3N3aXRjaGRldl9ub3RpZmllcnMoU1dJVENIREVWX0ZEQl9PRkZMT0FERUQsCisrCQkJCSBkcC0+c2xhdmUsICZpbmZvLmluZm8sIE5VTEwpOworK30KKyAKKyBzdGF0aWMgdm9pZCBkc2Ffc2xhdmVfc3dpdGNoZGV2X2V2ZW50X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorIHsKKyAJc3RydWN0IGRzYV9zd2l0Y2hkZXZfZXZlbnRfd29yayAqc3dpdGNoZGV2X3dvcmsgPQorIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkc2Ffc3dpdGNoZGV2X2V2ZW50X3dvcmssIHdvcmspOworLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc3dpdGNoZGV2X3dvcmstPmRldjsKKy0Jc3RydWN0IHN3aXRjaGRldl9ub3RpZmllcl9mZGJfaW5mbyAqZmRiX2luZm87CistCXN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2Ffc2xhdmVfdG9fcG9ydChkZXYpOworKwlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBzd2l0Y2hkZXZfd29yay0+ZHM7CisrCXN0cnVjdCBkc2FfcG9ydCAqZHA7CisgCWludCBlcnI7CisgCisrCWRwID0gZHNhX3RvX3BvcnQoZHMsIHN3aXRjaGRldl93b3JrLT5wb3J0KTsKKysKKyAJcnRubF9sb2NrKCk7CisgCXN3aXRjaCAoc3dpdGNoZGV2X3dvcmstPmV2ZW50KSB7CisgCWNhc2UgU1dJVENIREVWX0ZEQl9BRERfVE9fREVWSUNFOgorLQkJZmRiX2luZm8gPSAmc3dpdGNoZGV2X3dvcmstPmZkYl9pbmZvOworLQkJaWYgKCFmZGJfaW5mby0+YWRkZWRfYnlfdXNlcikKKy0JCQlicmVhazsKKy0KKy0JCWVyciA9IGRzYV9wb3J0X2ZkYl9hZGQoZHAsIGZkYl9pbmZvLT5hZGRyLCBmZGJfaW5mby0+dmlkKTsKKysJCWVyciA9IGRzYV9wb3J0X2ZkYl9hZGQoZHAsIHN3aXRjaGRldl93b3JrLT5hZGRyLAorKwkJCQkgICAgICAgc3dpdGNoZGV2X3dvcmstPnZpZCk7CisgCQlpZiAoZXJyKSB7CistCQkJbmV0ZGV2X2VycihkZXYsCistCQkJCSAgICJmYWlsZWQgdG8gYWRkICVwTSB2aWQgJWQgdG8gZmRiOiAlZFxuIiwKKy0JCQkJICAgZmRiX2luZm8tPmFkZHIsIGZkYl9pbmZvLT52aWQsIGVycik7CisrCQkJZGV2X2Vycihkcy0+ZGV2LAorKwkJCQkicG9ydCAlZCBmYWlsZWQgdG8gYWRkICVwTSB2aWQgJWQgdG8gZmRiOiAlZFxuIiwKKysJCQkJZHAtPmluZGV4LCBzd2l0Y2hkZXZfd29yay0+YWRkciwKKysJCQkJc3dpdGNoZGV2X3dvcmstPnZpZCwgZXJyKTsKKyAJCQlicmVhazsKKyAJCX0KKy0JCWZkYl9pbmZvLT5vZmZsb2FkZWQgPSB0cnVlOworLQkJY2FsbF9zd2l0Y2hkZXZfbm90aWZpZXJzKFNXSVRDSERFVl9GREJfT0ZGTE9BREVELCBkZXYsCistCQkJCQkgJmZkYl9pbmZvLT5pbmZvLCBOVUxMKTsKKysJCWRzYV9mZGJfb2ZmbG9hZF9ub3RpZnkoc3dpdGNoZGV2X3dvcmspOworIAkJYnJlYWs7CisgCisgCWNhc2UgU1dJVENIREVWX0ZEQl9ERUxfVE9fREVWSUNFOgorLQkJZmRiX2luZm8gPSAmc3dpdGNoZGV2X3dvcmstPmZkYl9pbmZvOworLQkJaWYgKCFmZGJfaW5mby0+YWRkZWRfYnlfdXNlcikKKy0JCQlicmVhazsKKy0KKy0JCWVyciA9IGRzYV9wb3J0X2ZkYl9kZWwoZHAsIGZkYl9pbmZvLT5hZGRyLCBmZGJfaW5mby0+dmlkKTsKKysJCWVyciA9IGRzYV9wb3J0X2ZkYl9kZWwoZHAsIHN3aXRjaGRldl93b3JrLT5hZGRyLAorKwkJCQkgICAgICAgc3dpdGNoZGV2X3dvcmstPnZpZCk7CisgCQlpZiAoZXJyKSB7CistCQkJbmV0ZGV2X2VycihkZXYsCistCQkJCSAgICJmYWlsZWQgdG8gZGVsZXRlICVwTSB2aWQgJWQgZnJvbSBmZGI6ICVkXG4iLAorLQkJCQkgICBmZGJfaW5mby0+YWRkciwgZmRiX2luZm8tPnZpZCwgZXJyKTsKKysJCQlkZXZfZXJyKGRzLT5kZXYsCisrCQkJCSJwb3J0ICVkIGZhaWxlZCB0byBkZWxldGUgJXBNIHZpZCAlZCBmcm9tIGZkYjogJWRcbiIsCisrCQkJCWRwLT5pbmRleCwgc3dpdGNoZGV2X3dvcmstPmFkZHIsCisrCQkJCXN3aXRjaGRldl93b3JrLT52aWQsIGVycik7CisgCQl9CisgCisgCQlicmVhazsKKyAJfQorIAlydG5sX3VubG9jaygpOworIAorLQlrZnJlZShzd2l0Y2hkZXZfd29yay0+ZmRiX2luZm8uYWRkcik7CisgCWtmcmVlKHN3aXRjaGRldl93b3JrKTsKKy0JZGV2X3B1dChkZXYpOworLX0KKy0KKy1zdGF0aWMgaW50CistZHNhX3NsYXZlX3N3aXRjaGRldl9mZGJfd29ya19pbml0KHN0cnVjdCBkc2Ffc3dpdGNoZGV2X2V2ZW50X3dvcmsgKgorLQkJCQkgIHN3aXRjaGRldl93b3JrLAorLQkJCQkgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfbm90aWZpZXJfZmRiX2luZm8gKgorLQkJCQkgIGZkYl9pbmZvKQorLXsKKy0JbWVtY3B5KCZzd2l0Y2hkZXZfd29yay0+ZmRiX2luZm8sIGZkYl9pbmZvLAorLQkgICAgICAgc2l6ZW9mKHN3aXRjaGRldl93b3JrLT5mZGJfaW5mbykpOworLQlzd2l0Y2hkZXZfd29yay0+ZmRiX2luZm8uYWRkciA9IGt6YWxsb2MoRVRIX0FMRU4sIEdGUF9BVE9NSUMpOworLQlpZiAoIXN3aXRjaGRldl93b3JrLT5mZGJfaW5mby5hZGRyKQorLQkJcmV0dXJuIC1FTk9NRU07CistCWV0aGVyX2FkZHJfY29weSgodTggKilzd2l0Y2hkZXZfd29yay0+ZmRiX2luZm8uYWRkciwKKy0JCQlmZGJfaW5mby0+YWRkcik7CistCXJldHVybiAwOworKwlpZiAoZHNhX2lzX3VzZXJfcG9ydChkcywgZHAtPmluZGV4KSkKKysJCWRldl9wdXQoZHAtPnNsYXZlKTsKKyB9CisgCisgLyogQ2FsbGVkIHVuZGVyIHJjdV9yZWFkX2xvY2soKSAqLworQEAgLTE2NDUsNyArMTYzNSw5IEBAIHN0YXRpYyBpbnQgZHNhX3NsYXZlX3N3aXRjaGRldl9ldmVudChzdHIKKyAJCQkJICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpCisgeworIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc3dpdGNoZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7CisrCWNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfbm90aWZpZXJfZmRiX2luZm8gKmZkYl9pbmZvOworIAlzdHJ1Y3QgZHNhX3N3aXRjaGRldl9ldmVudF93b3JrICpzd2l0Y2hkZXZfd29yazsKKysJc3RydWN0IGRzYV9wb3J0ICpkcDsKKyAJaW50IGVycjsKKyAKKyAJaWYgKGV2ZW50ID09IFNXSVRDSERFVl9QT1JUX0FUVFJfU0VUKSB7CitAQCAtMTY1OCwyMCArMTY1MCwzMiBAQCBzdGF0aWMgaW50IGRzYV9zbGF2ZV9zd2l0Y2hkZXZfZXZlbnQoc3RyCisgCWlmICghZHNhX3NsYXZlX2Rldl9jaGVjayhkZXYpKQorIAkJcmV0dXJuIE5PVElGWV9ET05FOworIAorKwlkcCA9IGRzYV9zbGF2ZV90b19wb3J0KGRldik7CisrCisgCXN3aXRjaGRldl93b3JrID0ga3phbGxvYyhzaXplb2YoKnN3aXRjaGRldl93b3JrKSwgR0ZQX0FUT01JQyk7CisgCWlmICghc3dpdGNoZGV2X3dvcmspCisgCQlyZXR1cm4gTk9USUZZX0JBRDsKKyAKKyAJSU5JVF9XT1JLKCZzd2l0Y2hkZXZfd29yay0+d29yaywKKyAJCSAgZHNhX3NsYXZlX3N3aXRjaGRldl9ldmVudF93b3JrKTsKKy0Jc3dpdGNoZGV2X3dvcmstPmRldiA9IGRldjsKKysJc3dpdGNoZGV2X3dvcmstPmRzID0gZHAtPmRzOworKwlzd2l0Y2hkZXZfd29yay0+cG9ydCA9IGRwLT5pbmRleDsKKyAJc3dpdGNoZGV2X3dvcmstPmV2ZW50ID0gZXZlbnQ7CisgCisgCXN3aXRjaCAoZXZlbnQpIHsKKyAJY2FzZSBTV0lUQ0hERVZfRkRCX0FERF9UT19ERVZJQ0U6IC8qIGZhbGwgdGhyb3VnaCAqLworIAljYXNlIFNXSVRDSERFVl9GREJfREVMX1RPX0RFVklDRToKKy0JCWlmIChkc2Ffc2xhdmVfc3dpdGNoZGV2X2ZkYl93b3JrX2luaXQoc3dpdGNoZGV2X3dvcmssIHB0cikpCistCQkJZ290byBlcnJfZmRiX3dvcmtfaW5pdDsKKysJCWZkYl9pbmZvID0gcHRyOworKworKwkJaWYgKCFmZGJfaW5mby0+YWRkZWRfYnlfdXNlcikgeworKwkJCWtmcmVlKHN3aXRjaGRldl93b3JrKTsKKysJCQlyZXR1cm4gTk9USUZZX09LOworKwkJfQorKworKwkJZXRoZXJfYWRkcl9jb3B5KHN3aXRjaGRldl93b3JrLT5hZGRyLAorKwkJCQlmZGJfaW5mby0+YWRkcik7CisrCQlzd2l0Y2hkZXZfd29yay0+dmlkID0gZmRiX2luZm8tPnZpZDsKKysKKyAJCWRldl9ob2xkKGRldik7CisgCQlicmVhazsKKyAJZGVmYXVsdDoKK0BAIC0xNjgxLDEwICsxNjg1LDYgQEAgc3RhdGljIGludCBkc2Ffc2xhdmVfc3dpdGNoZGV2X2V2ZW50KHN0cgorIAorIAlkc2Ffc2NoZWR1bGVfd29yaygmc3dpdGNoZGV2X3dvcmstPndvcmspOworIAlyZXR1cm4gTk9USUZZX09LOworLQorLWVycl9mZGJfd29ya19pbml0OgorLQlrZnJlZShzd2l0Y2hkZXZfd29yayk7CistCXJldHVybiBOT1RJRllfQkFEOworIH0KKyAKKyBzdGF0aWMgaW50IGRzYV9zbGF2ZV9zd2l0Y2hkZXZfYmxvY2tpbmdfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzczLXY1LjEyLW5ldC1kc2EtbW92ZS1zd2l0Y2hkZXYtZXZlbnQtaW1wbGVtZW50YXRpb24tdW5kZXItdGgucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzczLXY1LjEyLW5ldC1kc2EtbW92ZS1zd2l0Y2hkZXYtZXZlbnQtaW1wbGVtZW50YXRpb24tdW5kZXItdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcwOTg2ZgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83NzMtdjUuMTItbmV0LWRzYS1tb3ZlLXN3aXRjaGRldi1ldmVudC1pbXBsZW1lbnRhdGlvbi11bmRlci10aC5wYXRjaApAQCAtMCwwICsxLDg1IEBACitGcm9tIDQ0N2QyOTBhNThiZDMzNWQ2OGY2NjU3MTM4NDIzNjVkM2Q2NDQ3ZGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBWbGFkaW1pciBPbHRlYW4gPHZsYWRpbWlyLm9sdGVhbkBueHAuY29tPgorRGF0ZTogV2VkLCA2IEphbiAyMDIxIDExOjUxOjMzICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIG5ldDogZHNhOiBtb3ZlIHN3aXRjaGRldiBldmVudCBpbXBsZW1lbnRhdGlvbiB1bmRlciB0aGUgc2FtZQorIHN3aXRjaC9jYXNlIHN0YXRlbWVudAorCitXZSdsbCBuZWVkIHRvIHN0YXJ0IGxpc3RlbmluZyB0byBTV0lUQ0hERVZfRkRCX3tBREQsREVMfV9UT19ERVZJQ0UKK2V2ZW50cyBldmVuIGZvciBpbnRlcmZhY2VzIHdoZXJlIGRzYV9zbGF2ZV9kZXZfY2hlY2sgcmV0dXJucyBmYWxzZSwgc28KK3dlIG5lZWQgdGhhdCBjaGVjayBpbnNpZGUgdGhlIHN3aXRjaC1jYXNlIHN0YXRlbWVudCBmb3IgU1dJVENIREVWX0ZEQl8qLgorCitUaGlzIG1vdmVtZW50IGFsc28gYXZvaWRzIGEgdXNlbGVzcyBhbGxvY2F0aW9uIC8gZnJlZSBvZiBzd2l0Y2hkZXZfd29yaworb24gdGhlIHVudHJlYXRlZCAiZGVmYXVsdCBldmVudCIgY2FzZS4KKworU2lnbmVkLW9mZi1ieTogVmxhZGltaXIgT2x0ZWFuIDx2bGFkaW1pci5vbHRlYW5AbnhwLmNvbT4KK1Jldmlld2VkLWJ5OiBGbG9yaWFuIEZhaW5lbGxpIDxmLmZhaW5lbGxpQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEpha3ViIEtpY2luc2tpIDxrdWJhQGtlcm5lbC5vcmc+CistLS0KKyBuZXQvZHNhL3NsYXZlLmMgfCAzNSArKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxNiBpbnNlcnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkKKworLS0tIGEvbmV0L2RzYS9zbGF2ZS5jCisrKysgYi9uZXQvZHNhL3NsYXZlLmMKK0BAIC0xNjQwLDMxICsxNjQwLDI5IEBAIHN0YXRpYyBpbnQgZHNhX3NsYXZlX3N3aXRjaGRldl9ldmVudChzdHIKKyAJc3RydWN0IGRzYV9wb3J0ICpkcDsKKyAJaW50IGVycjsKKyAKKy0JaWYgKGV2ZW50ID09IFNXSVRDSERFVl9QT1JUX0FUVFJfU0VUKSB7CisrCXN3aXRjaCAoZXZlbnQpIHsKKysJY2FzZSBTV0lUQ0hERVZfUE9SVF9BVFRSX1NFVDoKKyAJCWVyciA9IHN3aXRjaGRldl9oYW5kbGVfcG9ydF9hdHRyX3NldChkZXYsIHB0ciwKKyAJCQkJCQkgICAgIGRzYV9zbGF2ZV9kZXZfY2hlY2ssCisgCQkJCQkJICAgICBkc2Ffc2xhdmVfcG9ydF9hdHRyX3NldCk7CisgCQlyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubyhlcnIpOworLQl9CistCistCWlmICghZHNhX3NsYXZlX2Rldl9jaGVjayhkZXYpKQorLQkJcmV0dXJuIE5PVElGWV9ET05FOworKwljYXNlIFNXSVRDSERFVl9GREJfQUREX1RPX0RFVklDRToKKysJY2FzZSBTV0lUQ0hERVZfRkRCX0RFTF9UT19ERVZJQ0U6CisrCQlpZiAoIWRzYV9zbGF2ZV9kZXZfY2hlY2soZGV2KSkKKysJCQlyZXR1cm4gTk9USUZZX0RPTkU7CisgCistCWRwID0gZHNhX3NsYXZlX3RvX3BvcnQoZGV2KTsKKysJCWRwID0gZHNhX3NsYXZlX3RvX3BvcnQoZGV2KTsKKyAKKy0Jc3dpdGNoZGV2X3dvcmsgPSBremFsbG9jKHNpemVvZigqc3dpdGNoZGV2X3dvcmspLCBHRlBfQVRPTUlDKTsKKy0JaWYgKCFzd2l0Y2hkZXZfd29yaykKKy0JCXJldHVybiBOT1RJRllfQkFEOworLQorLQlJTklUX1dPUksoJnN3aXRjaGRldl93b3JrLT53b3JrLAorLQkJICBkc2Ffc2xhdmVfc3dpdGNoZGV2X2V2ZW50X3dvcmspOworLQlzd2l0Y2hkZXZfd29yay0+ZHMgPSBkcC0+ZHM7CistCXN3aXRjaGRldl93b3JrLT5wb3J0ID0gZHAtPmluZGV4OworLQlzd2l0Y2hkZXZfd29yay0+ZXZlbnQgPSBldmVudDsKKysJCXN3aXRjaGRldl93b3JrID0ga3phbGxvYyhzaXplb2YoKnN3aXRjaGRldl93b3JrKSwgR0ZQX0FUT01JQyk7CisrCQlpZiAoIXN3aXRjaGRldl93b3JrKQorKwkJCXJldHVybiBOT1RJRllfQkFEOworKworKwkJSU5JVF9XT1JLKCZzd2l0Y2hkZXZfd29yay0+d29yaywKKysJCQkgIGRzYV9zbGF2ZV9zd2l0Y2hkZXZfZXZlbnRfd29yayk7CisrCQlzd2l0Y2hkZXZfd29yay0+ZHMgPSBkcC0+ZHM7CisrCQlzd2l0Y2hkZXZfd29yay0+cG9ydCA9IGRwLT5pbmRleDsKKysJCXN3aXRjaGRldl93b3JrLT5ldmVudCA9IGV2ZW50OworIAorLQlzd2l0Y2ggKGV2ZW50KSB7CistCWNhc2UgU1dJVENIREVWX0ZEQl9BRERfVE9fREVWSUNFOiAvKiBmYWxsIHRocm91Z2ggKi8KKy0JY2FzZSBTV0lUQ0hERVZfRkRCX0RFTF9UT19ERVZJQ0U6CisgCQlmZGJfaW5mbyA9IHB0cjsKKyAKKyAJCWlmICghZmRiX2luZm8tPmFkZGVkX2J5X3VzZXIpIHsKK0BAIC0xNjc3LDEzICsxNjc1LDEyIEBAIHN0YXRpYyBpbnQgZHNhX3NsYXZlX3N3aXRjaGRldl9ldmVudChzdHIKKyAJCXN3aXRjaGRldl93b3JrLT52aWQgPSBmZGJfaW5mby0+dmlkOworIAorIAkJZGV2X2hvbGQoZGV2KTsKKysJCWRzYV9zY2hlZHVsZV93b3JrKCZzd2l0Y2hkZXZfd29yay0+d29yayk7CisgCQlicmVhazsKKyAJZGVmYXVsdDoKKy0JCWtmcmVlKHN3aXRjaGRldl93b3JrKTsKKyAJCXJldHVybiBOT1RJRllfRE9ORTsKKyAJfQorIAorLQlkc2Ffc2NoZWR1bGVfd29yaygmc3dpdGNoZGV2X3dvcmstPndvcmspOworIAlyZXR1cm4gTk9USUZZX09LOworIH0KKyAKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83NzQtdjUuMTItbmV0LWRzYS1leGl0LWVhcmx5LWluLWRzYV9zbGF2ZV9zd2l0Y2hkZXZfZXZlbnQtaWYtdy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC83NzQtdjUuMTItbmV0LWRzYS1leGl0LWVhcmx5LWluLWRzYV9zbGF2ZV9zd2l0Y2hkZXZfZXZlbnQtaWYtdy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2VkNDA2Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40Lzc3NC12NS4xMi1uZXQtZHNhLWV4aXQtZWFybHktaW4tZHNhX3NsYXZlX3N3aXRjaGRldl9ldmVudC1pZi13LnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gNWZiNGE0NTFhODdkOGVkMzM2M2QyOGI2M2EzMjk1Mzk5MzczZDZjNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFZsYWRpbWlyIE9sdGVhbiA8dmxhZGltaXIub2x0ZWFuQG54cC5jb20+CitEYXRlOiBXZWQsIDYgSmFuIDIwMjEgMTE6NTE6MzQgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gbmV0OiBkc2E6IGV4aXQgZWFybHkgaW4gZHNhX3NsYXZlX3N3aXRjaGRldl9ldmVudCBpZiB3ZSBjYW4ndAorIHByb2dyYW0gdGhlIEZEQgorCitSaWdodCBub3csIHRoZSBmb2xsb3dpbmcgd291bGQgaGFwcGVuIGZvciBhIHN3aXRjaCBkcml2ZXIgdGhhdCBkb2VzIG5vdAoraW1wbGVtZW50IC5wb3J0X2ZkYl9hZGQgb3IgLnBvcnRfZmRiX2RlbC4KKworZHNhX3NsYXZlX3N3aXRjaGRldl9ldmVudCByZXR1cm5zIE5PVElGWV9PSyBhbmQgc2NoZWR1bGVzOgorLT4gZHNhX3NsYXZlX3N3aXRjaGRldl9ldmVudF93b3JrCisgICAtPiBkc2FfcG9ydF9mZGJfYWRkCisgICAgICAtPiBkc2FfcG9ydF9ub3RpZnkoRFNBX05PVElGSUVSX0ZEQl9BREQpCisgICAgICAgICAtPiBkc2Ffc3dpdGNoX2ZkYl9hZGQKKyAgICAgICAgICAgIC0+IGlmICghZHMtPm9wcy0+cG9ydF9mZGJfYWRkKSByZXR1cm4gLUVPUE5PVFNVUFA7CisgICAtPiBhbiBlcnJvciBpcyBwcmludGVkIHdpdGggZGV2X2RiZywgYW5kCisgICAgICBkc2FfZmRiX29mZmxvYWRfbm90aWZ5KHN3aXRjaGRldl93b3JrKSBpcyBub3QgY2FsbGVkLgorCitXZSBjYW4gYXZvaWQgc2NoZWR1bGluZyB0aGUgd29ya2VyIGZvciBub3RoaW5nIGFuZCBzYXkgTk9USUZZX0RPTkUuCitCZWNhdXNlIHdlIGRvbid0IGNhbGwgZHNhX2ZkYl9vZmZsb2FkX25vdGlmeSwgdGhlIHN0YXRpYyBGREIgZW50cnkgd2lsbAorcmVtYWluIGp1c3QgaW4gdGhlIHNvZnR3YXJlIGJyaWRnZS4KKworU2lnbmVkLW9mZi1ieTogVmxhZGltaXIgT2x0ZWFuIDx2bGFkaW1pci5vbHRlYW5AbnhwLmNvbT4KK1Jldmlld2VkLWJ5OiBGbG9yaWFuIEZhaW5lbGxpIDxmLmZhaW5lbGxpQGdtYWlsLmNvbT4KK1Jldmlld2VkLWJ5OiBBbmRyZXcgTHVubiA8YW5kcmV3QGx1bm4uY2g+CitTaWduZWQtb2ZmLWJ5OiBKYWt1YiBLaWNpbnNraSA8a3ViYUBrZXJuZWwub3JnPgorLS0tCisgbmV0L2RzYS9zbGF2ZS5jIHwgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisKKy0tLSBhL25ldC9kc2Evc2xhdmUuYworKysrIGIvbmV0L2RzYS9zbGF2ZS5jCitAQCAtMTY1Myw2ICsxNjUzLDkgQEAgc3RhdGljIGludCBkc2Ffc2xhdmVfc3dpdGNoZGV2X2V2ZW50KHN0cgorIAorIAkJZHAgPSBkc2Ffc2xhdmVfdG9fcG9ydChkZXYpOworIAorKwkJaWYgKCFkcC0+ZHMtPm9wcy0+cG9ydF9mZGJfYWRkIHx8ICFkcC0+ZHMtPm9wcy0+cG9ydF9mZGJfZGVsKQorKwkJCXJldHVybiBOT1RJRllfRE9ORTsKKysKKyAJCXN3aXRjaGRldl93b3JrID0ga3phbGxvYyhzaXplb2YoKnN3aXRjaGRldl93b3JrKSwgR0ZQX0FUT01JQyk7CisgCQlpZiAoIXN3aXRjaGRldl93b3JrKQorIAkJCXJldHVybiBOT1RJRllfQkFEOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40Lzc3NS12NS4xMi1uZXQtZHNhLWxpc3Rlbi1mb3ItU1dJVENIREVWXy1GREItREVMLV9BRERfVE9fREVWSUNFLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40Lzc3NS12NS4xMi1uZXQtZHNhLWxpc3Rlbi1mb3ItU1dJVENIREVWXy1GREItREVMLV9BRERfVE9fREVWSUNFLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ZWQ2ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzc1LXY1LjEyLW5ldC1kc2EtbGlzdGVuLWZvci1TV0lUQ0hERVZfLUZEQi1ERUwtX0FERF9UT19ERVZJQ0UucGF0Y2gKQEAgLTAsMCArMSwyNjMgQEAKK0Zyb20gZDVmMTk0ODZjZWU3OWQwNGMwNTQ0Mjc1NzdhYzk2ZWQxMjM3MDZkYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFZsYWRpbWlyIE9sdGVhbiA8dmxhZGltaXIub2x0ZWFuQG54cC5jb20+CitEYXRlOiBXZWQsIDYgSmFuIDIwMjEgMTE6NTE6MzUgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gbmV0OiBkc2E6IGxpc3RlbiBmb3IgU1dJVENIREVWX3tGREIsREVMfV9BRERfVE9fREVWSUNFIG9uCisgZm9yZWlnbiBicmlkZ2UgbmVpZ2hib3JzCisKK1NvbWUgRFNBIHN3aXRjaGVzIChhbmQgbm90IG9ubHkpIGNhbm5vdCBsZWFybiBzb3VyY2UgTUFDIGFkZHJlc3NlcyBmcm9tCitwYWNrZXRzIGluamVjdGVkIGZyb20gdGhlIENQVS4gVGhleSBvbmx5IHBlcmZvcm0gaGFyZHdhcmUgYWRkcmVzcworbGVhcm5pbmcgZnJvbSBpbmJvdW5kIHRyYWZmaWMuCisKK1RoaXMgY2FuIGJlIHByb2JsZW1hdGljIHdoZW4gd2UgaGF2ZSBhIGJyaWRnZSBzcGFubmluZyBzb21lIERTQSBzd2l0Y2gKK3BvcnRzIGFuZCBzb21lIG5vbi1EU0EgcG9ydHMgKHdoaWNoIHdlJ2xsIGNhbGwgImZvcmVpZ24gaW50ZXJmYWNlcyIgZnJvbQorRFNBJ3MgcGVyc3BlY3RpdmUpLgorCitUaGVyZSBhcmUgMiBjbGFzc2VzIG9mIHByb2JsZW1zIGNyZWF0ZWQgYnkgdGhlIGxhY2sgb2YgbGVhcm5pbmcgb24KK0NQVS1pbmplY3RlZCB0cmFmZmljOgorLSBleGNlc3NpdmUgZmxvb2RpbmcsIGR1ZSB0byB0aGUgZmFjdCB0aGF0IERTQSB0cmVhdHMgdGhvc2UgYWRkcmVzc2VzIGFzCisgIHVua25vd24KKy0gdGhlIHJpc2sgb2Ygc3RhbGUgcm91dGVzLCB3aGljaCBjYW4gbGVhZCB0byB0ZW1wb3JhcnkgcGFja2V0IGxvc3MKKworVG8gaWxsdXN0cmF0ZSB0aGUgc2Vjb25kIGNsYXNzLCBjb25zaWRlciB0aGUgZm9sbG93aW5nIHNpdHVhdGlvbiwgd2hpY2gKK2lzIGNvbW1vbiBpbiBwcm9kdWN0aW9uIGVxdWlwbWVudCAod2lyZWxlc3MgYWNjZXNzIHBvaW50cywgd2hlcmUgdGhlcmUKK2lzIGEgV0xBTiBpbnRlcmZhY2UgYW5kIGFuIEV0aGVybmV0IHN3aXRjaCwgYW5kIHRoZXNlIGZvcm0gYSBzaW5nbGUKK2JyaWRnaW5nIGRvbWFpbikuCisKKyBBUCAxOgorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyMCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICstLS0tLS0tLS0tLS0rICstLS0tLS0tLS0tLS0rICstLS0tLS0tLS0tLS0rICstLS0tLS0tLS0tLS0rICstLS0tLS0tLS0tLS0rCisgfCAgICBzd3AwICAgIHwgfCAgICBzd3AxICAgIHwgfCAgICBzd3AyICAgIHwgfCAgICBzd3AzICAgIHwgfCAgICB3bGFuMCAgIHwKKyArLS0tLS0tLS0tLS0tKyArLS0tLS0tLS0tLS0tKyArLS0tLS0tLS0tLS0tKyArLS0tLS0tLS0tLS0tKyArLS0tLS0tLS0tLS0tKworICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiAgICAgICAgXgorICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfAorICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfAorICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xpZW50IEEgIENsaWVudCBCCisgICAgICAgfAorICAgICAgIHwKKyAgICAgICB8CisgKy0tLS0tLS0tLS0tLSsgKy0tLS0tLS0tLS0tLSsgKy0tLS0tLS0tLS0tLSsgKy0tLS0tLS0tLS0tLSsgKy0tLS0tLS0tLS0tLSsKKyB8ICAgIHN3cDAgICAgfCB8ICAgIHN3cDEgICAgfCB8ICAgIHN3cDIgICAgfCB8ICAgIHN3cDMgICAgfCB8ICAgIHdsYW4wICAgfAorICstLS0tLS0tLS0tLS0rICstLS0tLS0tLS0tLS0rICstLS0tLS0tLS0tLS0rICstLS0tLS0tLS0tLS0rICstLS0tLS0tLS0tLS0rCisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnIwICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgQVAgMgorCistIGJyMCBvZiBBUCAxIHdpbGwga25vdyB0aGF0IENsaWVudHMgQSBhbmQgQiBhcmUgcmVhY2hhYmxlIHZpYSB3bGFuMAorLSB0aGUgaGFyZHdhcmUgZmRiIG9mIGEgRFNBIHN3aXRjaCBkcml2ZXIgdG9kYXkgaXMgbm90IGtlcHQgaW4gc3luYyB3aXRoCisgIHRoZSBzb2Z0d2FyZSBlbnRyaWVzIG9uIG90aGVyIGJyaWRnZSBwb3J0cywgc28gaXQgd2lsbCBub3Qga25vdyB0aGF0CisgIGNsaWVudHMgQSBhbmQgQiBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgQ1BVIHBvcnQgVU5MRVNTIHRoZSBoYXJkd2FyZQorICBzd2l0Y2ggaXRzZWxmIHBlcmZvcm1zIFNBIGxlYXJuaW5nIGZyb20gdHJhZmZpYyBpbmplY3RlZCBmcm9tIHRoZSBDUFUuCisgIE5vbmV0aGVsZXNzLCBhIHN1YnN0YW50aWFsIG51bWJlciBvZiBzd2l0Y2hlcyBkb24ndC4KKy0gdGhlIGhhcmR3YXJlIGZkYiBvZiB0aGUgRFNBIHN3aXRjaCBvbiBBUCAyIG1heSBhdXRvbm9tb3VzbHkgbGVhcm4gdGhhdAorICBDbGllbnQgQSBhbmQgQiBhcmUgcmVhY2hhYmxlIHRocm91Z2ggc3dwMC4gVGhlcmVmb3JlLCB0aGUgc29mdHdhcmUgYnIwCisgIG9mIEFQIDIgYWxzbyBtYXkgb3IgbWF5IG5vdCBsZWFybiB0aGlzLiBJbiB0aGUgZXhhbXBsZSB3ZSdyZQorICBpbGx1c3RyYXRpbmcsIHNvbWUgRXRoZXJuZXQgdHJhZmZpYyBoYXMgYmVlbiBnb2luZyBvbiwgYW5kIGJyMCBmcm9tIEFQCisgIDIgaGFzIGluZGVlZCBsZWFybnQgdGhhdCBpdCBjYW4gcmVhY2ggQ2xpZW50IEIgdGhyb3VnaCBzd3AwLgorCitPbmUgb2YgdGhlIHdpcmVsZXNzIGNsaWVudHMsIHNheSBDbGllbnQgQiwgZGlzY29ubmVjdHMgZnJvbSBBUCAxIGFuZAorcm9hbXMgdG8gQVAgMi4gVGhlIHRvcG9sb2d5IG5vdyBsb29rcyBsaWtlIHRoaXM6CisKKyBBUCAxOgorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyMCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICstLS0tLS0tLS0tLS0rICstLS0tLS0tLS0tLS0rICstLS0tLS0tLS0tLS0rICstLS0tLS0tLS0tLS0rICstLS0tLS0tLS0tLS0rCisgfCAgICBzd3AwICAgIHwgfCAgICBzd3AxICAgIHwgfCAgICBzd3AyICAgIHwgfCAgICBzd3AzICAgIHwgfCAgICB3bGFuMCAgIHwKKyArLS0tLS0tLS0tLS0tKyArLS0tLS0tLS0tLS0tKyArLS0tLS0tLS0tLS0tKyArLS0tLS0tLS0tLS0tKyArLS0tLS0tLS0tLS0tKworICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xpZW50IEEKKyAgICAgICB8CisgICAgICAgfAorICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGllbnQgQgorICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYKKyArLS0tLS0tLS0tLS0tKyArLS0tLS0tLS0tLS0tKyArLS0tLS0tLS0tLS0tKyArLS0tLS0tLS0tLS0tKyArLS0tLS0tLS0tLS0tKworIHwgICAgc3dwMCAgICB8IHwgICAgc3dwMSAgICB8IHwgICAgc3dwMiAgICB8IHwgICAgc3dwMyAgICB8IHwgICAgd2xhbjAgICB8CisgKy0tLS0tLS0tLS0tLSsgKy0tLS0tLS0tLS0tLSsgKy0tLS0tLS0tLS0tLSsgKy0tLS0tLS0tLS0tLSsgKy0tLS0tLS0tLS0tLSsKKyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicjAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyBBUCAyCisKKy0gYnIwIG9mIEFQIDEgc3RpbGwga25vd3MgdGhhdCBDbGllbnQgQSBpcyByZWFjaGFibGUgdmlhIHdsYW4wIChubyBjaGFuZ2UpCistIGJyMCBvZiBBUCAxIHdpbGwgKHBvc3NpYmx5KSBrbm93IHRoYXQgQ2xpZW50IEIgaGFzIGxlZnQgd2xhbjAuIFRoZXJlCisgIGFyZSBjYXNlcyB3aGVyZSBpdCBtaWdodCBuZXZlciBmaW5kIG91dCB0aG91Z2guIEVpdGhlciB3YXksIERTQSB0b2RheQorICBkb2VzIG5vdCBwcm9jZXNzIHRoYXQgbm90aWZpY2F0aW9uIGluIGFueSB3YXkuCistIHRoZSBoYXJkd2FyZSBGREIgb2YgdGhlIERTQSBzd2l0Y2ggb24gQVAgMSBtYXkgbGVhcm4gYXV0b25vbW91c2x5IHRoYXQKKyAgQ2xpZW50IEIgY2FuIGJlIHJlYWNoZWQgdmlhIHN3cDAsIGlmIGl0IHJlY2VpdmVzIGFueSBwYWNrZXQgd2l0aAorICBDbGllbnQgMSdzIHNvdXJjZSBNQUMgYWRkcmVzcyBvdmVyIEV0aGVybmV0LgorLSB0aGUgaGFyZHdhcmUgRkRCIG9mIHRoZSBEU0Egc3dpdGNoIG9uIEFQIDIgc3RpbGwgdGhpbmtzIHRoYXQgQ2xpZW50IEIKKyAgY2FuIGJlIHJlYWNoZWQgdmlhIHN3cDAuIEl0IGRvZXMgbm90IGtub3cgdGhhdCBpdCBoYXMgcm9hbWVkIHRvIHdsYW4wLAorICBiZWNhdXNlIGl0IGRvZXNuJ3QgcGVyZm9ybSBTQSBsZWFybmluZyBmcm9tIHRoZSBDUFUgcG9ydC4KKworTm93IENsaWVudCBBIGNvbnRhY3RzIENsaWVudCBCLgorQVAgMSByb3V0ZXMgdGhlIHBhY2tldCBmaW5lIHRvd2FyZHMgc3dwMCBhbmQgZGVsaXZlcnMgaXQgb24gdGhlIEV0aGVybmV0CitzZWdtZW50LgorQVAgMiBzZWVzIGEgZnJhbWUgb24gc3dwMCBhbmQgaXRzIGZkYiBzYXlzIHRoYXQgdGhlIGRlc3RpbmF0aW9uIGlzIHN3cDAuCitIYWlycGlubmluZyBpcyBkaXNhYmxlZCA9PiBkcm9wLgorCitUaGlzIHByb2JsZW0gY29tZXMgZnJvbSB0aGUgZmFjdCB0aGF0IHRoZXNlIHN3aXRjaGVzIGhhdmUgYSAnYmxpbmQgc3BvdCcKK2ZvciBhZGRyZXNzZXMgY29taW5nIGZyb20gc29mdHdhcmUgYnJpZGdpbmcuIFRoZSBnZW5lcmljIHNvbHV0aW9uIGlzIG5vdAordG8gYXNzdW1lIHRoYXQgaGFyZHdhcmUgbGVhcm5pbmcgY2FuIGJlIGVuYWJsZWQgc29tZWhvdywgYnV0IHRvIGxpc3RlbgordG8gbW9yZSBicmlkZ2UgbGVhcm5pbmcgZXZlbnRzLiBJdCB0dXJucyBvdXQgdGhhdCB0aGUgYnJpZGdlIGRyaXZlciBkb2VzCitsZWFybiBpbiBzb2Z0d2FyZSBmcm9tIGFsbCBpbmJvdW5kIGZyYW1lcywgaW4gX19icl9oYW5kbGVfbG9jYWxfZmluaXNoLgorQSBwcm9wZXIgU1dJVENIREVWX0ZEQl9BRERfVE9fREVWSUNFIG5vdGlmaWNhdGlvbiBpcyBlbWl0dGVkIGZvciB0aGUKK2FkZHJlc3NlcyBzZXJ2aWNlZCBieSB0aGUgYnJpZGdlIG9uICdmb3JlaWduJyBpbnRlcmZhY2VzLiBUaGUgc29mdHdhcmUKK2JyaWRnZSBhbHNvIGRvZXMgdGhlIHJpZ2h0IHRoaW5nIG9uIG1pZ3JhdGlvbiwgYnkgbm90aWZ5aW5nIHRoYXQgdGhlIG9sZAorZW50cnkgaXMgZGVsZXRlZCwgc28gdGhhdCBkb2VzIG5vdCBuZWVkIHRvIGJlIHNwZWNpYWwtY2FzZWQgaW4gRFNBLiBXaGVuCitpdCBpcyBkZWxldGVkLCB3ZSBqdXN0IG5lZWQgdG8gZGVsZXRlIG91ciBzdGF0aWMgRkRCIGVudHJ5IHRvd2FyZHMgdGhlCitDUFUgdG9vLCBhbmQgd2FpdC4KKworVGhlIHByb2JsZW0gaXMgdGhhdCBEU0EgY3VycmVudGx5IG9ubHkgY2FyZXMgYWJvdXQgU1dJVENIREVWX0ZEQl9BRERfVE9fREVWSUNFCitldmVudHMgcmVjZWl2ZWQgb24gaXRzIG93biBpbnRlcmZhY2VzLCBzdWNoIGFzIHN0YXRpYyBGREIgZW50cmllcy4KKworTHVja2lseSB3ZSBjYW4gY2hhbmdlIHRoYXQsIGFuZCBEU0EgY2FuIGxpc3RlbiB0byBhbGwgc3dpdGNoZGV2IEZEQgorYWRkL2RlbCBldmVudHMgaW4gdGhlIHN5c3RlbSBhbmQgZmlndXJlIG91dCBpZiB0aG9zZSBldmVudHMgd2VyZSBlbWl0dGVkCitieSBhIGJyaWRnZSB0aGF0IHNwYW5zIGF0IGxlYXN0IG9uZSBvZiBEU0EncyBvd24gcG9ydHMuIEluIGNhc2UgdGhhdCBpcwordHJ1ZSwgRFNBIHdpbGwgYWxzbyBvZmZsb2FkIHRoYXQgYWRkcmVzcyB0b3dhcmRzIGl0cyBvd24gQ1BVIHBvcnQsIGluCit0aGUgZXZlbnR1YWxpdHkgdGhhdCB0aGVyZSBtaWdodCBiZSBicmlkZ2UgY2xpZW50cyBhdHRhY2hlZCB0byB0aGUgRFNBCitzd2l0Y2ggd2hvIHdhbnQgdG8gdGFsayB0byB0aGUgc3RhdGlvbiBjb25uZWN0ZWQgdG8gdGhlIGZvcmVpZ24KK2ludGVyZmFjZS4KKworSW4gdGVybXMgb2YgaW1wbGVtZW50YXRpb24sIHdlIG5lZWQgdG8ga2VlcCB0aGUgZmRiX2luZm8tPmFkZGVkX2J5X3VzZXIKK2NoZWNrIGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgc3dpdGNoZGV2IGV2ZW50IHdhcyB0YXJnZXRlZCBkaXJlY3RseSBhdCBhCitEU0Egc3dpdGNoIHBvcnQuIEJ1dCB3ZSBkb24ndCBuZWVkIHRvIGxvb2sgYXQgdGhhdCBmbGFnIGZvciBzbm9vcGVkCitldmVudHMuIFNvIHRoZSBjaGVjayBpcyBjdXJyZW50bHkgdG9vIGxhdGUsIHdlIG5lZWQgdG8gbW92ZSBpdCBlYXJsaWVyLgorVGhpcyBhbHNvIHNpbXBsaWZpZXMgdGhlIGNvZGUgYSBiaXQsIHNpbmNlIHdlIGF2b2lkIHVzZWxlc3NseSBhbGxvY2F0aW5nCithbmQgZnJlZWluZyBzd2l0Y2hkZXZfd29yay4KKworV2UgY291bGQgcHJvYmFibHkgZG8gc29tZSBpbXByb3ZlbWVudHMgaW4gdGhlIGZ1dHVyZS4gRm9yIGV4YW1wbGUsCittdWx0aS1icmlkZ2Ugc3VwcG9ydCBpcyBydWRpbWVudGFyeSBhdCB0aGUgbW9tZW50LiBJZiB0aGVyZSBhcmUgdHdvCiticmlkZ2VzIHNwYW5uaW5nIGEgRFNBIHN3aXRjaCdzIHBvcnRzLCBhbmQgYm90aCBvZiB0aGVtIG5lZWQgdG8gc2VydmljZQordGhlIHNhbWUgTUFDIGFkZHJlc3MsIHRoZW4gd2hhdCB3aWxsIGhhcHBlbiBpcyB0aGF0IHRoZSBtaWdyYXRpb24gb2Ygb25lCitvZiB0aG9zZSBzdGF0aW9ucyB3aWxsIHRyaWdnZXIgdGhlIGRlbGV0aW9uIG9mIHRoZSBGREIgZW50cnkgZnJvbSB0aGUKK0NQVSBwb3J0IHdoaWxlIGl0IGlzIHN0aWxsIHVzZWQgYnkgb3RoZXIgYnJpZGdlLiBUaGF0IGNvdWxkIGJlIGltcHJvdmVkCit3aXRoIHJlZmVyZW5jZSBjb3VudGluZyBidXQgaXMgbGVmdCBmb3IgYW5vdGhlciB0aW1lLgorCitUaGlzIGJlaGF2aW9yIG5lZWRzIHRvIGJlIGVuYWJsZWQgYXQgZHJpdmVyIGxldmVsIGJ5IHNldHRpbmcKK2RzLT5hc3Npc3RlZF9sZWFybmluZ19vbl9jcHVfcG9ydCA9IHRydWUuIFRoaXMgaXMgYmVjYXVzZSB3ZSBkb24ndCB3YW50Cit0byBpbmZsaWN0IGEgcG90ZW50aWFsIHBlcmZvcm1hbmNlIHBlbmFsdHkgKGFjY2Vzc2VzIHRocm91Z2gKK01ESU8vSTJDL1NQSSBhcmUgZXhwZW5zaXZlKSB0byBoYXJkd2FyZSB0aGF0IHJlYWxseSBkb2Vzbid0IG5lZWQgaXQKK2JlY2F1c2UgYWRkcmVzcyBsZWFybmluZyBvbiB0aGUgQ1BVIHBvcnQgd29ya3MgdGhlcmUuCisKK1JlcG9ydGVkLWJ5OiBERU5HIFFpbmdmYW5nIDxkcWZleHRAZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogVmxhZGltaXIgT2x0ZWFuIDx2bGFkaW1pci5vbHRlYW5AbnhwLmNvbT4KK1Jldmlld2VkLWJ5OiBGbG9yaWFuIEZhaW5lbGxpIDxmLmZhaW5lbGxpQGdtYWlsLmNvbT4KK1Jldmlld2VkLWJ5OiBBbmRyZXcgTHVubiA8YW5kcmV3QGx1bm4uY2g+CitTaWduZWQtb2ZmLWJ5OiBKYWt1YiBLaWNpbnNraSA8a3ViYUBrZXJuZWwub3JnPgorW0JhY2twb3J0ZWQgdG8gbGludXgtNS40LnldCitTaWduZWQtb2ZmLWJ5OiBERU5HIFFpbmdmYW5nIDxkcWZleHRAZ21haWwuY29tPgorLS0tCisgaW5jbHVkZS9uZXQvZHNhLmggfCAgNSArKysrCisgbmV0L2RzYS9zbGF2ZS5jICAgfCA2MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgNTcgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCisKKy0tLSBhL2luY2x1ZGUvbmV0L2RzYS5oCisrKysgYi9pbmNsdWRlL25ldC9kc2EuaAorQEAgLTI3OSw2ICsyNzksMTEgQEAgc3RydWN0IGRzYV9zd2l0Y2ggeworIAkgKi8KKyAJYm9vbAkJCWNvbmZpZ3VyZV92bGFuX3doaWxlX25vdF9maWx0ZXJpbmc7CisgCisrCS8qIExldCBEU0EgbWFuYWdlIHRoZSBGREIgZW50cmllcyB0b3dhcmRzIHRoZSBDUFUsIGJhc2VkIG9uIHRoZQorKwkgKiBzb2Z0d2FyZSBicmlkZ2UgZGF0YWJhc2UuCisrCSAqLworKwlib29sCQkJYXNzaXN0ZWRfbGVhcm5pbmdfb25fY3B1X3BvcnQ7CisrCisgCS8qIEluIGNhc2Ugdmxhbl9maWx0ZXJpbmdfaXNfZ2xvYmFsIGlzIHNldCwgdGhlIFZMQU4gYXdhcmVuZXNzIHN0YXRlCisgCSAqIHNob3VsZCBiZSByZXRyaWV2ZWQgZnJvbSBoZXJlIGFuZCBub3QgZnJvbSB0aGUgcGVyLXBvcnQgc2V0dGluZ3MuCisgCSAqLworLS0tIGEvbmV0L2RzYS9zbGF2ZS5jCisrKysgYi9uZXQvZHNhL3NsYXZlLmMKK0BAIC0xNjMwLDYgKzE2MzAsMjUgQEAgc3RhdGljIHZvaWQgZHNhX3NsYXZlX3N3aXRjaGRldl9ldmVudF93bworIAkJZGV2X3B1dChkcC0+c2xhdmUpOworIH0KKyAKKytzdGF0aWMgaW50IGRzYV9sb3dlcl9kZXZfd2FsayhzdHJ1Y3QgbmV0X2RldmljZSAqbG93ZXJfZGV2LCB2b2lkICpkYXRhKQorK3sKKysJaWYgKGRzYV9zbGF2ZV9kZXZfY2hlY2sobG93ZXJfZGV2KSkgeworKwkJKigodm9pZCAqKilkYXRhKSA9ICh2b2lkICopbmV0ZGV2X3ByaXYobG93ZXJfZGV2KTsKKysJCXJldHVybiAxOworKwl9CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgc3RydWN0IGRzYV9zbGF2ZV9wcml2ICpkc2Ffc2xhdmVfZGV2X2xvd2VyX2ZpbmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKKyt7CisrCXN0cnVjdCBkc2Ffc2xhdmVfcHJpdiAqZGF0YSA9IE5VTEw7CisrCisrCW5ldGRldl93YWxrX2FsbF9sb3dlcl9kZXZfcmN1KGRldiwgZHNhX2xvd2VyX2Rldl93YWxrLCAodm9pZCAqKikgJmRhdGEpOworKworKwlyZXR1cm4gZGF0YTsKKyt9CisrCisgLyogQ2FsbGVkIHVuZGVyIHJjdV9yZWFkX2xvY2soKSAqLworIHN0YXRpYyBpbnQgZHNhX3NsYXZlX3N3aXRjaGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCwKKyAJCQkJICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpCitAQCAtMTY0OCwxMCArMTY2NywzNyBAQCBzdGF0aWMgaW50IGRzYV9zbGF2ZV9zd2l0Y2hkZXZfZXZlbnQoc3RyCisgCQlyZXR1cm4gbm90aWZpZXJfZnJvbV9lcnJubyhlcnIpOworIAljYXNlIFNXSVRDSERFVl9GREJfQUREX1RPX0RFVklDRToKKyAJY2FzZSBTV0lUQ0hERVZfRkRCX0RFTF9UT19ERVZJQ0U6CistCQlpZiAoIWRzYV9zbGF2ZV9kZXZfY2hlY2soZGV2KSkKKy0JCQlyZXR1cm4gTk9USUZZX0RPTkU7CisrCQlmZGJfaW5mbyA9IHB0cjsKKysKKysJCWlmIChkc2Ffc2xhdmVfZGV2X2NoZWNrKGRldikpIHsKKysJCQlpZiAoIWZkYl9pbmZvLT5hZGRlZF9ieV91c2VyKQorKwkJCQlyZXR1cm4gTk9USUZZX09LOworKworKwkJCWRwID0gZHNhX3NsYXZlX3RvX3BvcnQoZGV2KTsKKysJCX0gZWxzZSB7CisrCQkJLyogU25vb3AgYWRkcmVzc2VzIGxlYXJudCBvbiBmb3JlaWduIGludGVyZmFjZXMKKysJCQkgKiBicmlkZ2VkIHdpdGggdXMsIGZvciBzd2l0Y2hlcyB0aGF0IGRvbid0CisrCQkJICogYXV0b21hdGljYWxseSBsZWFybiBTQSBmcm9tIENQVS1pbmplY3RlZCB0cmFmZmljCisrCQkJICovCisrCQkJc3RydWN0IG5ldF9kZXZpY2UgKmJyX2RldjsKKysJCQlzdHJ1Y3QgZHNhX3NsYXZlX3ByaXYgKnA7CisrCisrCQkJYnJfZGV2ID0gbmV0ZGV2X21hc3Rlcl91cHBlcl9kZXZfZ2V0X3JjdShkZXYpOworKwkJCWlmICghYnJfZGV2KQorKwkJCQlyZXR1cm4gTk9USUZZX0RPTkU7CisrCisrCQkJaWYgKCFuZXRpZl9pc19icmlkZ2VfbWFzdGVyKGJyX2RldikpCisrCQkJCXJldHVybiBOT1RJRllfRE9ORTsKKysKKysJCQlwID0gZHNhX3NsYXZlX2Rldl9sb3dlcl9maW5kKGJyX2Rldik7CisrCQkJaWYgKCFwKQorKwkJCQlyZXR1cm4gTk9USUZZX0RPTkU7CisgCistCQlkcCA9IGRzYV9zbGF2ZV90b19wb3J0KGRldik7CisrCQkJZHAgPSBwLT5kcC0+Y3B1X2RwOworKworKwkJCWlmICghZHAtPmRzLT5hc3Npc3RlZF9sZWFybmluZ19vbl9jcHVfcG9ydCkKKysJCQkJcmV0dXJuIE5PVElGWV9ET05FOworKwkJfQorIAorIAkJaWYgKCFkcC0+ZHMtPm9wcy0+cG9ydF9mZGJfYWRkIHx8ICFkcC0+ZHMtPm9wcy0+cG9ydF9mZGJfZGVsKQorIAkJCXJldHVybiBOT1RJRllfRE9ORTsKK0BAIC0xNjY2LDE4ICsxNzEyLDEzIEBAIHN0YXRpYyBpbnQgZHNhX3NsYXZlX3N3aXRjaGRldl9ldmVudChzdHIKKyAJCXN3aXRjaGRldl93b3JrLT5wb3J0ID0gZHAtPmluZGV4OworIAkJc3dpdGNoZGV2X3dvcmstPmV2ZW50ID0gZXZlbnQ7CisgCistCQlmZGJfaW5mbyA9IHB0cjsKKy0KKy0JCWlmICghZmRiX2luZm8tPmFkZGVkX2J5X3VzZXIpIHsKKy0JCQlrZnJlZShzd2l0Y2hkZXZfd29yayk7CistCQkJcmV0dXJuIE5PVElGWV9PSzsKKy0JCX0KKy0KKyAJCWV0aGVyX2FkZHJfY29weShzd2l0Y2hkZXZfd29yay0+YWRkciwKKyAJCQkJZmRiX2luZm8tPmFkZHIpOworIAkJc3dpdGNoZGV2X3dvcmstPnZpZCA9IGZkYl9pbmZvLT52aWQ7CisgCistCQlkZXZfaG9sZChkZXYpOworKwkJLyogSG9sZCBhIHJlZmVyZW5jZSBvbiB0aGUgc2xhdmUgZm9yIGRzYV9mZGJfb2ZmbG9hZF9ub3RpZnkgKi8KKysJCWlmIChkc2FfaXNfdXNlcl9wb3J0KGRwLT5kcywgZHAtPmluZGV4KSkKKysJCQlkZXZfaG9sZChkZXYpOworIAkJZHNhX3NjaGVkdWxlX3dvcmsoJnN3aXRjaGRldl93b3JrLT53b3JrKTsKKyAJCWJyZWFrOworIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40Lzc4MC1uZXQtZHNhLW10NzUzMC1zZXR1cC1jb3JlLWNsb2NrLWV2ZW4taW4tVFJHTUlJLW1vZGUucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvNzgwLW5ldC1kc2EtbXQ3NTMwLXNldHVwLWNvcmUtY2xvY2stZXZlbi1pbi1UUkdNSUktbW9kZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWQ3Y2QzCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40Lzc4MC1uZXQtZHNhLW10NzUzMC1zZXR1cC1jb3JlLWNsb2NrLWV2ZW4taW4tVFJHTUlJLW1vZGUucGF0Y2gKQEAgLTAsMCArMSw4NCBAQAorRnJvbSBjM2I4ZTA3OTA5ZGJlNjdiMGQ1ODA0MTZjMWE1MjU3NjQzYTczYmU3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSWx5YSBMaXBuaXRza2l5IDxpbHlhLmxpcG5pdHNraXlAZ21haWwuY29tPgorRGF0ZTogRnJpLCAxMiBNYXIgMjAyMSAwMDowNzowMyAtMDgwMAorU3ViamVjdDogW1BBVENIXSBuZXQ6IGRzYTogbXQ3NTMwOiBzZXR1cCBjb3JlIGNsb2NrIGV2ZW4gaW4gVFJHTUlJIG1vZGUKKworQSByZWNlbnQgY2hhbmdlIHRvIE1JUFMgcmFsaW5rIHJlc2V0IGxvZ2ljIG1hZGUgaXQgc28gbXQ3NTMwIGFjdHVhbGx5CityZXNldHMgdGhlIHN3aXRjaCBvbiBwbGF0Zm9ybXMgc3VjaCBhcyBtdDc2MjEgKHdoZXJlIGJpdCAyIGlzIHRoZSByZXNldAorbGluZSBmb3IgdGhlIHN3aXRjaCkuIFRoYXQgZXhwb3NlZCBhbiBpc3N1ZSB3aGVyZSB0aGUgc3dpdGNoIHdvdWxkIG5vdAorZnVuY3Rpb24gcHJvcGVybHkgaW4gVFJHTUlJIG1vZGUgYWZ0ZXIgYSByZXNldC4KKworUmVjb25maWd1cmUgY29yZSBjbG9jayBpbiBUUkdNSUkgbW9kZSB0byBmaXggdGhlIGlzc3VlLgorCitUZXN0ZWQgb24gVWJpcXVpdGkgRVItWCAoTVQ3NjIxKSB3aXRoIFRSR01JSSBtb2RlIGVuYWJsZWQuCisKK0ZpeGVzOiAzZjllZjc3ODVhOWMgKCJNSVBTOiByYWxpbms6IG1hbmFnZSBsb3cgcmVzZXQgbGluZXMiKQorU2lnbmVkLW9mZi1ieTogSWx5YSBMaXBuaXRza2l5IDxpbHlhLmxpcG5pdHNraXlAZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorLS0tCisgZHJpdmVycy9uZXQvZHNhL210NzUzMC5jIHwgNTIgKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyNSBpbnNlcnRpb25zKCspLCAyNyBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9uZXQvZHNhL210NzUzMC5jCisrKysgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMKK0BAIC00MjgsMzQgKzQyOCwzMiBAQCBtdDc1MzBfcGFkX2Nsa19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqCisgCQkJICAgICBURF9ETV9EUlZQKDgpIHwgVERfRE1fRFJWTig4KSk7CisgCisgCS8qIFNldHVwIGNvcmUgY2xvY2sgZm9yIE1UNzUzMCAqLworLQlpZiAoIXRyZ2ludCkgeworLQkJLyogRGlzYWJsZSBNVDc1MzAgY29yZSBjbG9jayAqLworLQkJY29yZV9jbGVhcihwcml2LCBDT1JFX1RSR01JSV9HU1dfQ0xLX0NHLCBSRUdfR1NXQ0tfRU4pOworLQorLQkJLyogRGlzYWJsZSBQTEwsIHNpbmNlIHBoeV9kZXZpY2UgaGFzIG5vdCB5ZXQgYmVlbiBjcmVhdGVkCistCQkgKiBwcm92aWRlZCBmb3IgcGh5X1tyZWFkLHdyaXRlXV9tbWRfaW5kaXJlY3QgaXMgY2FsbGVkLCB3ZQorLQkJICogcHJvdmlkZSBvdXIgb3duIGNvcmVfd3JpdGVfbW1kX2luZGlyZWN0IHRvIGNvbXBsZXRlIHRoaXMKKy0JCSAqIGZ1bmN0aW9uLgorLQkJICovCistCQljb3JlX3dyaXRlX21tZF9pbmRpcmVjdChwcml2LAorLQkJCQkJQ09SRV9HU1dQTExfR1JQMSwKKy0JCQkJCU1ESU9fTU1EX1ZFTkQyLAorLQkJCQkJMCk7CistCistCQkvKiBTZXQgY29yZSBjbG9jayBpbnRvIDUwME1oeiAqLworLQkJY29yZV93cml0ZShwcml2LCBDT1JFX0dTV1BMTF9HUlAyLAorLQkJCSAgIFJHX0dTV1BMTF9QT1NESVZfNTAwTSgxKSB8CistCQkJICAgUkdfR1NXUExMX0ZCS0RJVl81MDBNKDI1KSk7CistCistCQkvKiBFbmFibGUgUExMICovCistCQljb3JlX3dyaXRlKHByaXYsIENPUkVfR1NXUExMX0dSUDEsCistCQkJICAgUkdfR1NXUExMX0VOX1BSRSB8CistCQkJICAgUkdfR1NXUExMX1BPU0RJVl8yMDBNKDIpIHwKKy0JCQkgICBSR19HU1dQTExfRkJLRElWXzIwME0oMzIpKTsKKy0KKy0JCS8qIEVuYWJsZSBNVDc1MzAgY29yZSBjbG9jayAqLworLQkJY29yZV9zZXQocHJpdiwgQ09SRV9UUkdNSUlfR1NXX0NMS19DRywgUkVHX0dTV0NLX0VOKTsKKy0JfQorKwkvKiBEaXNhYmxlIE1UNzUzMCBjb3JlIGNsb2NrICovCisrCWNvcmVfY2xlYXIocHJpdiwgQ09SRV9UUkdNSUlfR1NXX0NMS19DRywgUkVHX0dTV0NLX0VOKTsKKysKKysJLyogRGlzYWJsZSBQTEwsIHNpbmNlIHBoeV9kZXZpY2UgaGFzIG5vdCB5ZXQgYmVlbiBjcmVhdGVkCisrCSAqIHByb3ZpZGVkIGZvciBwaHlfW3JlYWQsd3JpdGVdX21tZF9pbmRpcmVjdCBpcyBjYWxsZWQsIHdlCisrCSAqIHByb3ZpZGUgb3VyIG93biBjb3JlX3dyaXRlX21tZF9pbmRpcmVjdCB0byBjb21wbGV0ZSB0aGlzCisrCSAqIGZ1bmN0aW9uLgorKwkgKi8KKysJY29yZV93cml0ZV9tbWRfaW5kaXJlY3QocHJpdiwKKysJCQkJQ09SRV9HU1dQTExfR1JQMSwKKysJCQkJTURJT19NTURfVkVORDIsCisrCQkJCTApOworKworKwkvKiBTZXQgY29yZSBjbG9jayBpbnRvIDUwME1oeiAqLworKwljb3JlX3dyaXRlKHByaXYsIENPUkVfR1NXUExMX0dSUDIsCisrCQkgICBSR19HU1dQTExfUE9TRElWXzUwME0oMSkgfAorKwkJICAgUkdfR1NXUExMX0ZCS0RJVl81MDBNKDI1KSk7CisrCisrCS8qIEVuYWJsZSBQTEwgKi8KKysJY29yZV93cml0ZShwcml2LCBDT1JFX0dTV1BMTF9HUlAxLAorKwkJICAgUkdfR1NXUExMX0VOX1BSRSB8CisrCQkgICBSR19HU1dQTExfUE9TRElWXzIwME0oMikgfAorKwkJICAgUkdfR1NXUExMX0ZCS0RJVl8yMDBNKDMyKSk7CisrCisrCS8qIEVuYWJsZSBNVDc1MzAgY29yZSBjbG9jayAqLworKwljb3JlX3NldChwcml2LCBDT1JFX1RSR01JSV9HU1dfQ0xLX0NHLCBSRUdfR1NXQ0tfRU4pOworIAorIAkvKiBTZXR1cCB0aGUgTVQ3NTMwIFRSR01JSSBUeCBDbG9jayAqLworIAljb3JlX3NldChwcml2LCBDT1JFX1RSR01JSV9HU1dfQ0xLX0NHLCBSRUdfR1NXQ0tfRU4pOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzgwMC12NS41LWlpby1pbXUtQWRkLXN1cHBvcnQtZm9yLXRoZS1GWE9TODcwMC1JTVUucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvODAwLXY1LjUtaWlvLWltdS1BZGQtc3VwcG9ydC1mb3ItdGhlLUZYT1M4NzAwLUlNVS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWNkMjc2Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzgwMC12NS41LWlpby1pbXUtQWRkLXN1cHBvcnQtZm9yLXRoZS1GWE9TODcwMC1JTVUucGF0Y2gKQEAgLTAsMCArMSw4OTMgQEAKK0Zyb20gODRlNWRkZDVjNDZlYTNiZjBjYWQ2NzBkYTMyMDI4OTk0Y2FkNTkzNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBKb25lcyA8cmpvbmVzQGdhdGV3b3Jrcy5jb20+CitEYXRlOiBNb24sIDE0IE9jdCAyMDE5IDExOjQ5OjIxIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGlpbzogaW11OiBBZGQgc3VwcG9ydCBmb3IgdGhlIEZYT1M4NzAwIElNVQorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitGWE9TODcwMENRIGlzIGEgc21hbGwsIGxvdy1wb3dlciwgMy1heGlzIGxpbmVhciBhY2NlbGVyb21ldGVyIGFuZCAzLWF4aXMKK21hZ25ldG9tZXRlciBjb21iaW5lZCBpbnRvIGEgc2luZ2xlIHBhY2thZ2UuIFRoZSBkZXZpY2UgZmVhdHVyZXMgYQorc2VsZWN0YWJsZSBJMkMgb3IgcG9pbnQtdG8tcG9pbnQgU1BJIHNlcmlhbCBpbnRlcmZhY2Ugd2l0aCAxNC1iaXQKK2FjY2VsZXJvbWV0ZXIgYW5kIDE2LWJpdCBtYWduZXRvbWV0ZXIgQURDIHJlc29sdXRpb24gYWxvbmcgd2l0aAorc21hcnQtZW1iZWRkZWQgZnVuY3Rpb25zLgorCitGWE9TODcwMENRIGhhcyBkeW5hbWljYWxseSBzZWxlY3RhYmxlIGFjY2VsZXJhdGlvbmZ1bGwtc2NhbGUgcmFuZ2VzIG9mCivCsTIgZy/CsTQgZy/CsTggZyBhbmQgYSBmaXhlZCBtYWduZXRpYyBtZWFzdXJlbWVudCByYW5nZSBvZiDCsTEyMDAgzrxULgorT3V0cHV0IGRhdGEgcmF0ZXMgKE9EUikgZnJvbSAxLjU2MyBIeiB0byA4MDAgSHogYXJlIHNlbGVjdGFibGUgYnkgdGhlIHVzZXIKK2ZvciBlYWNoIHNlbnNvci4gSW50ZXJsZWF2ZWQgbWFnbmV0aWMgYW5kIGFjY2VsZXJhdGlvbiBkYXRhIGlzIGF2YWlsYWJsZQorYXQgT0RSIHJhdGVzIG9mIHVwIHRvIDQwMCBIei4gRlhPUzg3MDBDUSBpcyBhdmFpbGFibGUgaW4gYSBwbGFzdGljIFFGTgorcGFja2FnZSBhbmQgaXQgaXMgZ3VhcmFudGVlZCB0byBvcGVyYXRlIG92ZXIgdGhlIGV4dGVuZGVkIHRlbXBlcmF0dXJlCityYW5nZSBvZiDigJM0MCDCsEMgdG8gKzg1IMKwQy4KKworVE9ETzogVHJpZ2dlciBhbmQgSVJRIGNvbmZpZ3VyYXRpb24gc3VwcG9ydAorCitEYXRhc2hlZXQ6CisgIGh0dHA6Ly9jYWNoZS5mcmVlc2NhbGUuY29tL2ZpbGVzL3NlbnNvcnMvZG9jL2RhdGFfc2hlZXQvRlhPUzg3MDBDUS5wZGYKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IEpvbmVzIDxyam9uZXNAZ2F0ZXdvcmtzLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEpvbmF0aGFuIENhbWVyb24gPEpvbmF0aGFuLkNhbWVyb25AaHVhd2VpLmNvbT4KKy0tLQorIGRyaXZlcnMvaWlvL2ltdS9LY29uZmlnICAgICAgICAgfCAgMjcgKysKKyBkcml2ZXJzL2lpby9pbXUvTWFrZWZpbGUgICAgICAgIHwgICA1ICsKKyBkcml2ZXJzL2lpby9pbXUvZnhvczg3MDAuaCAgICAgIHwgIDEwICsKKyBkcml2ZXJzL2lpby9pbXUvZnhvczg3MDBfY29yZS5jIHwgNjQ5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBkcml2ZXJzL2lpby9pbXUvZnhvczg3MDBfaTJjLmMgIHwgIDcxICsrKysrCisgZHJpdmVycy9paW8vaW11L2Z4b3M4NzAwX3NwaS5jICB8ICA1OSArKysrCisgNiBmaWxlcyBjaGFuZ2VkLCA4MjEgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2lpby9pbXUvZnhvczg3MDAuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2lpby9pbXUvZnhvczg3MDBfY29yZS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvaWlvL2ltdS9meG9zODcwMF9pMmMuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2lpby9pbXUvZnhvczg3MDBfc3BpLmMKKworLS0tIGEvZHJpdmVycy9paW8vaW11L0tjb25maWcKKysrKyBiL2RyaXZlcnMvaWlvL2ltdS9LY29uZmlnCitAQCAtNDAsNiArNDAsMzMgQEAgY29uZmlnIEFESVMxNjQ4MAorIAorIHNvdXJjZSAiZHJpdmVycy9paW8vaW11L2JtaTE2MC9LY29uZmlnIgorIAorK2NvbmZpZyBGWE9TODcwMAorKwl0cmlzdGF0ZQorKworK2NvbmZpZyBGWE9TODcwMF9JMkMKKysJdHJpc3RhdGUgIk5YUCBGWE9TODcwMCBJMkMgZHJpdmVyIgorKwlkZXBlbmRzIG9uIEkyQworKwlzZWxlY3QgRlhPUzg3MDAKKysJc2VsZWN0IFJFR01BUF9JMkMKKysJaGVscAorKwkgIFNheSB5ZXMgaGVyZSB0byBidWlsZCBzdXBwb3J0IGZvciB0aGUgTlhQIEZYT1M4NzAwIG0rZyBjb21ibworKwkgIHNlbnNvciBvbiBJMkMuCisrCisrCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlIHdpbGwgYmUKKysJICBjYWxsZWQgZnhvczg3MDBfaTJjLgorKworK2NvbmZpZyBGWE9TODcwMF9TUEkKKysJdHJpc3RhdGUgIk5YUCBGWE9TODcwMCBTUEkgZHJpdmVyIgorKwlkZXBlbmRzIG9uIFNQSQorKwlzZWxlY3QgRlhPUzg3MDAKKysJc2VsZWN0IFJFR01BUF9TUEkKKysJaGVscAorKwkgIFNheSB5ZXMgaGVyZSB0byBidWlsZCBzdXBwb3J0IGZvciB0aGUgTlhQIEZYT1M4NzAwIG0rZyBjb21ibworKwkgIHNlbnNvciBvbiBTUEkuCisrCisrCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlIHdpbGwgYmUKKysJICBjYWxsZWQgZnhvczg3MDBfc3BpLgorKworIGNvbmZpZyBLTVg2MQorIAl0cmlzdGF0ZSAiS2lvbml4IEtNWDYxIDYtYXhpcyBhY2NlbGVyb21ldGVyIGFuZCBtYWduZXRvbWV0ZXIiCisgCWRlcGVuZHMgb24gSTJDCistLS0gYS9kcml2ZXJzL2lpby9pbXUvTWFrZWZpbGUKKysrKyBiL2RyaXZlcnMvaWlvL2ltdS9NYWtlZmlsZQorQEAgLTE0LDYgKzE0LDExIEBAIGFkaXNfbGliLSQoQ09ORklHX0lJT19BRElTX0xJQl9CVUZGRVIpICsKKyBvYmotJChDT05GSUdfSUlPX0FESVNfTElCKSArPSBhZGlzX2xpYi5vCisgCisgb2JqLXkgKz0gYm1pMTYwLworKworK29iai0kKENPTkZJR19GWE9TODcwMCkgKz0gZnhvczg3MDBfY29yZS5vCisrb2JqLSQoQ09ORklHX0ZYT1M4NzAwX0kyQykgKz0gZnhvczg3MDBfaTJjLm8KKytvYmotJChDT05GSUdfRlhPUzg3MDBfU1BJKSArPSBmeG9zODcwMF9zcGkubworKworIG9iai15ICs9IGludl9tcHU2MDUwLworIAorIG9iai0kKENPTkZJR19LTVg2MSkgKz0ga214NjEubworLS0tIC9kZXYvbnVsbAorKysrIGIvZHJpdmVycy9paW8vaW11L2Z4b3M4NzAwLmgKK0BAIC0wLDAgKzEsMTAgQEAKKysvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworKyNpZm5kZWYgRlhPUzg3MDBfSF8KKysjZGVmaW5lIEZYT1M4NzAwX0hfCisrCisrZXh0ZXJuIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIGZ4b3M4NzAwX3JlZ21hcF9jb25maWc7CisrCisraW50IGZ4b3M4NzAwX2NvcmVfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcmVnbWFwICpyZWdtYXAsCisrCQkJY29uc3QgY2hhciAqbmFtZSwgYm9vbCB1c2Vfc3BpKTsKKysKKysjZW5kaWYgIC8qIEZYT1M4NzAwX0hfICovCistLS0gL2Rldi9udWxsCisrKysgYi9kcml2ZXJzL2lpby9pbXUvZnhvczg3MDBfY29yZS5jCitAQCAtMCwwICsxLDY0OSBAQAorKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisrLyoKKysgKiBGWE9TODcwMCAtIE5YUCBJTVUgKGFjY2VsZXJvbWV0ZXIgcGx1cyBtYWduZXRvbWV0ZXIpCisrICoKKysgKiBJSU8gY29yZSBkcml2ZXIgZm9yIEZYT1M4NzAwLCB3aXRoIHN1cHBvcnQgZm9yIEkyQy9TUEkgYnVzc2VzCisrICoKKysgKiBUT0RPOiBCdWZmZXIsIHRyaWdnZXIsIGFuZCBJUlEgc3VwcG9ydAorKyAqLworKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKysjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisrI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKysjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisrCisrI2luY2x1ZGUgPGxpbnV4L2lpby9paW8uaD4KKysjaW5jbHVkZSA8bGludXgvaWlvL3N5c2ZzLmg+CisrCisrI2luY2x1ZGUgImZ4b3M4NzAwLmgiCisrCisrLyogUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKysjZGVmaW5lIEZYT1M4NzAwX1NUQVRVUyAgICAgICAgICAgICAweDAwCisrI2RlZmluZSBGWE9TODcwMF9PVVRfWF9NU0IgICAgICAgICAgMHgwMQorKyNkZWZpbmUgRlhPUzg3MDBfT1VUX1hfTFNCICAgICAgICAgIDB4MDIKKysjZGVmaW5lIEZYT1M4NzAwX09VVF9ZX01TQiAgICAgICAgICAweDAzCisrI2RlZmluZSBGWE9TODcwMF9PVVRfWV9MU0IgICAgICAgICAgMHgwNAorKyNkZWZpbmUgRlhPUzg3MDBfT1VUX1pfTVNCICAgICAgICAgIDB4MDUKKysjZGVmaW5lIEZYT1M4NzAwX09VVF9aX0xTQiAgICAgICAgICAweDA2CisrI2RlZmluZSBGWE9TODcwMF9GX1NFVFVQICAgICAgICAgICAgMHgwOQorKyNkZWZpbmUgRlhPUzg3MDBfVFJJR19DRkcgICAgICAgICAgIDB4MGEKKysjZGVmaW5lIEZYT1M4NzAwX1NZU01PRCAgICAgICAgICAgICAweDBiCisrI2RlZmluZSBGWE9TODcwMF9JTlRfU09VUkNFICAgICAgICAgMHgwYworKyNkZWZpbmUgRlhPUzg3MDBfV0hPX0FNX0kgICAgICAgICAgIDB4MGQKKysjZGVmaW5lIEZYT1M4NzAwX1hZWl9EQVRBX0NGRyAgICAgICAweDBlCisrI2RlZmluZSBGWE9TODcwMF9IUF9GSUxURVJfQ1VUT0ZGICAgMHgwZgorKyNkZWZpbmUgRlhPUzg3MDBfUExfU1RBVFVTICAgICAgICAgIDB4MTAKKysjZGVmaW5lIEZYT1M4NzAwX1BMX0NGRyAgICAgICAgICAgICAweDExCisrI2RlZmluZSBGWE9TODcwMF9QTF9DT1VOVCAgICAgICAgICAgMHgxMgorKyNkZWZpbmUgRlhPUzg3MDBfUExfQkZfWkNPTVAgICAgICAgIDB4MTMKKysjZGVmaW5lIEZYT1M4NzAwX1BMX1RIU19SRUcgICAgICAgICAweDE0CisrI2RlZmluZSBGWE9TODcwMF9BX0ZGTVRfQ0ZHICAgICAgICAgMHgxNQorKyNkZWZpbmUgRlhPUzg3MDBfQV9GRk1UX1NSQyAgICAgICAgIDB4MTYKKysjZGVmaW5lIEZYT1M4NzAwX0FfRkZNVF9USFMgICAgICAgICAweDE3CisrI2RlZmluZSBGWE9TODcwMF9BX0ZGTVRfQ09VTlQgICAgICAgMHgxOAorKyNkZWZpbmUgRlhPUzg3MDBfVFJBTlNJRU5UX0NGRyAgICAgIDB4MWQKKysjZGVmaW5lIEZYT1M4NzAwX1RSQU5TSUVOVF9TUkMgICAgICAweDFlCisrI2RlZmluZSBGWE9TODcwMF9UUkFOU0lFTlRfVEhTICAgICAgMHgxZgorKyNkZWZpbmUgRlhPUzg3MDBfVFJBTlNJRU5UX0NPVU5UICAgIDB4MjAKKysjZGVmaW5lIEZYT1M4NzAwX1BVTFNFX0NGRyAgICAgICAgICAweDIxCisrI2RlZmluZSBGWE9TODcwMF9QVUxTRV9TUkMgICAgICAgICAgMHgyMgorKyNkZWZpbmUgRlhPUzg3MDBfUFVMU0VfVEhTWCAgICAgICAgIDB4MjMKKysjZGVmaW5lIEZYT1M4NzAwX1BVTFNFX1RIU1kgICAgICAgICAweDI0CisrI2RlZmluZSBGWE9TODcwMF9QVUxTRV9USFNaICAgICAgICAgMHgyNQorKyNkZWZpbmUgRlhPUzg3MDBfUFVMU0VfVE1MVCAgICAgICAgIDB4MjYKKysjZGVmaW5lIEZYT1M4NzAwX1BVTFNFX0xUQ1kgICAgICAgICAweDI3CisrI2RlZmluZSBGWE9TODcwMF9QVUxTRV9XSU5EICAgICAgICAgMHgyOAorKyNkZWZpbmUgRlhPUzg3MDBfQVNMUF9DT1VOVCAgICAgICAgIDB4MjkKKysjZGVmaW5lIEZYT1M4NzAwX0NUUkxfUkVHMSAgICAgICAgICAweDJhCisrI2RlZmluZSBGWE9TODcwMF9DVFJMX1JFRzIgICAgICAgICAgMHgyYgorKyNkZWZpbmUgRlhPUzg3MDBfQ1RSTF9SRUczICAgICAgICAgIDB4MmMKKysjZGVmaW5lIEZYT1M4NzAwX0NUUkxfUkVHNCAgICAgICAgICAweDJkCisrI2RlZmluZSBGWE9TODcwMF9DVFJMX1JFRzUgICAgICAgICAgMHgyZQorKyNkZWZpbmUgRlhPUzg3MDBfT0ZGX1ggICAgICAgICAgICAgIDB4MmYKKysjZGVmaW5lIEZYT1M4NzAwX09GRl9ZICAgICAgICAgICAgICAweDMwCisrI2RlZmluZSBGWE9TODcwMF9PRkZfWiAgICAgICAgICAgICAgMHgzMQorKyNkZWZpbmUgRlhPUzg3MDBfTV9EUl9TVEFUVVMgICAgICAgIDB4MzIKKysjZGVmaW5lIEZYT1M4NzAwX01fT1VUX1hfTVNCICAgICAgICAweDMzCisrI2RlZmluZSBGWE9TODcwMF9NX09VVF9YX0xTQiAgICAgICAgMHgzNAorKyNkZWZpbmUgRlhPUzg3MDBfTV9PVVRfWV9NU0IgICAgICAgIDB4MzUKKysjZGVmaW5lIEZYT1M4NzAwX01fT1VUX1lfTFNCICAgICAgICAweDM2CisrI2RlZmluZSBGWE9TODcwMF9NX09VVF9aX01TQiAgICAgICAgMHgzNworKyNkZWZpbmUgRlhPUzg3MDBfTV9PVVRfWl9MU0IgICAgICAgIDB4MzgKKysjZGVmaW5lIEZYT1M4NzAwX0NNUF9YX01TQiAgICAgICAgICAweDM5CisrI2RlZmluZSBGWE9TODcwMF9DTVBfWF9MU0IgICAgICAgICAgMHgzYQorKyNkZWZpbmUgRlhPUzg3MDBfQ01QX1lfTVNCICAgICAgICAgIDB4M2IKKysjZGVmaW5lIEZYT1M4NzAwX0NNUF9ZX0xTQiAgICAgICAgICAweDNjCisrI2RlZmluZSBGWE9TODcwMF9DTVBfWl9NU0IgICAgICAgICAgMHgzZAorKyNkZWZpbmUgRlhPUzg3MDBfQ01QX1pfTFNCICAgICAgICAgIDB4M2UKKysjZGVmaW5lIEZYT1M4NzAwX01fT0ZGX1hfTVNCICAgICAgICAweDNmCisrI2RlZmluZSBGWE9TODcwMF9NX09GRl9YX0xTQiAgICAgICAgMHg0MAorKyNkZWZpbmUgRlhPUzg3MDBfTV9PRkZfWV9NU0IgICAgICAgIDB4NDEKKysjZGVmaW5lIEZYT1M4NzAwX01fT0ZGX1lfTFNCICAgICAgICAweDQyCisrI2RlZmluZSBGWE9TODcwMF9NX09GRl9aX01TQiAgICAgICAgMHg0MworKyNkZWZpbmUgRlhPUzg3MDBfTV9PRkZfWl9MU0IgICAgICAgIDB4NDQKKysjZGVmaW5lIEZYT1M4NzAwX01BWF9YX01TQiAgICAgICAgICAweDQ1CisrI2RlZmluZSBGWE9TODcwMF9NQVhfWF9MU0IgICAgICAgICAgMHg0NgorKyNkZWZpbmUgRlhPUzg3MDBfTUFYX1lfTVNCICAgICAgICAgIDB4NDcKKysjZGVmaW5lIEZYT1M4NzAwX01BWF9ZX0xTQiAgICAgICAgICAweDQ4CisrI2RlZmluZSBGWE9TODcwMF9NQVhfWl9NU0IgICAgICAgICAgMHg0OQorKyNkZWZpbmUgRlhPUzg3MDBfTUFYX1pfTFNCICAgICAgICAgIDB4NGEKKysjZGVmaW5lIEZYT1M4NzAwX01JTl9YX01TQiAgICAgICAgICAweDRiCisrI2RlZmluZSBGWE9TODcwMF9NSU5fWF9MU0IgICAgICAgICAgMHg0YworKyNkZWZpbmUgRlhPUzg3MDBfTUlOX1lfTVNCICAgICAgICAgIDB4NGQKKysjZGVmaW5lIEZYT1M4NzAwX01JTl9ZX0xTQiAgICAgICAgICAweDRlCisrI2RlZmluZSBGWE9TODcwMF9NSU5fWl9NU0IgICAgICAgICAgMHg0ZgorKyNkZWZpbmUgRlhPUzg3MDBfTUlOX1pfTFNCICAgICAgICAgIDB4NTAKKysjZGVmaW5lIEZYT1M4NzAwX1RFTVAgICAgICAgICAgICAgICAweDUxCisrI2RlZmluZSBGWE9TODcwMF9NX1RIU19DRkcgICAgICAgICAgMHg1MgorKyNkZWZpbmUgRlhPUzg3MDBfTV9USFNfU1JDICAgICAgICAgIDB4NTMKKysjZGVmaW5lIEZYT1M4NzAwX01fVEhTX1hfTVNCICAgICAgICAweDU0CisrI2RlZmluZSBGWE9TODcwMF9NX1RIU19YX0xTQiAgICAgICAgMHg1NQorKyNkZWZpbmUgRlhPUzg3MDBfTV9USFNfWV9NU0IgICAgICAgIDB4NTYKKysjZGVmaW5lIEZYT1M4NzAwX01fVEhTX1lfTFNCICAgICAgICAweDU3CisrI2RlZmluZSBGWE9TODcwMF9NX1RIU19aX01TQiAgICAgICAgMHg1OAorKyNkZWZpbmUgRlhPUzg3MDBfTV9USFNfWl9MU0IgICAgICAgIDB4NTkKKysjZGVmaW5lIEZYT1M4NzAwX01fVEhTX0NPVU5UICAgICAgICAweDVhCisrI2RlZmluZSBGWE9TODcwMF9NX0NUUkxfUkVHMSAgICAgICAgMHg1YgorKyNkZWZpbmUgRlhPUzg3MDBfTV9DVFJMX1JFRzIgICAgICAgIDB4NWMKKysjZGVmaW5lIEZYT1M4NzAwX01fQ1RSTF9SRUczICAgICAgICAweDVkCisrI2RlZmluZSBGWE9TODcwMF9NX0lOVF9TUkMgICAgICAgICAgMHg1ZQorKyNkZWZpbmUgRlhPUzg3MDBfQV9WRUNNX0NGRyAgICAgICAgIDB4NWYKKysjZGVmaW5lIEZYT1M4NzAwX0FfVkVDTV9USFNfTVNCICAgICAweDYwCisrI2RlZmluZSBGWE9TODcwMF9BX1ZFQ01fVEhTX0xTQiAgICAgMHg2MQorKyNkZWZpbmUgRlhPUzg3MDBfQV9WRUNNX0NOVCAgICAgICAgIDB4NjIKKysjZGVmaW5lIEZYT1M4NzAwX0FfVkVDTV9JTklUWF9NU0IgICAweDYzCisrI2RlZmluZSBGWE9TODcwMF9BX1ZFQ01fSU5JVFhfTFNCICAgMHg2NAorKyNkZWZpbmUgRlhPUzg3MDBfQV9WRUNNX0lOSVRZX01TQiAgIDB4NjUKKysjZGVmaW5lIEZYT1M4NzAwX0FfVkVDTV9JTklUWV9MU0IgICAweDY2CisrI2RlZmluZSBGWE9TODcwMF9BX1ZFQ01fSU5JVFpfTVNCICAgMHg2NworKyNkZWZpbmUgRlhPUzg3MDBfQV9WRUNNX0lOSVRaX0xTQiAgIDB4NjgKKysjZGVmaW5lIEZYT1M4NzAwX01fVkVDTV9DRkcgICAgICAgICAweDY5CisrI2RlZmluZSBGWE9TODcwMF9NX1ZFQ01fVEhTX01TQiAgICAgMHg2YQorKyNkZWZpbmUgRlhPUzg3MDBfTV9WRUNNX1RIU19MU0IgICAgIDB4NmIKKysjZGVmaW5lIEZYT1M4NzAwX01fVkVDTV9DTlQgICAgICAgICAweDZjCisrI2RlZmluZSBGWE9TODcwMF9NX1ZFQ01fSU5JVFhfTVNCICAgMHg2ZAorKyNkZWZpbmUgRlhPUzg3MDBfTV9WRUNNX0lOSVRYX0xTQiAgIDB4NmUKKysjZGVmaW5lIEZYT1M4NzAwX01fVkVDTV9JTklUWV9NU0IgICAweDZmCisrI2RlZmluZSBGWE9TODcwMF9NX1ZFQ01fSU5JVFlfTFNCICAgMHg3MAorKyNkZWZpbmUgRlhPUzg3MDBfTV9WRUNNX0lOSVRaX01TQiAgIDB4NzEKKysjZGVmaW5lIEZYT1M4NzAwX01fVkVDTV9JTklUWl9MU0IgICAweDcyCisrI2RlZmluZSBGWE9TODcwMF9BX0ZGTVRfVEhTX1hfTVNCICAgMHg3MworKyNkZWZpbmUgRlhPUzg3MDBfQV9GRk1UX1RIU19YX0xTQiAgIDB4NzQKKysjZGVmaW5lIEZYT1M4NzAwX0FfRkZNVF9USFNfWV9NU0IgICAweDc1CisrI2RlZmluZSBGWE9TODcwMF9BX0ZGTVRfVEhTX1lfTFNCICAgMHg3NgorKyNkZWZpbmUgRlhPUzg3MDBfQV9GRk1UX1RIU19aX01TQiAgIDB4NzcKKysjZGVmaW5lIEZYT1M4NzAwX0FfRkZNVF9USFNfWl9MU0IgICAweDc4CisrI2RlZmluZSBGWE9TODcwMF9BX1RSQU5fSU5JVF9NU0IgICAgMHg3OQorKyNkZWZpbmUgRlhPUzg3MDBfQV9UUkFOX0lOSVRfTFNCX1ggIDB4N2EKKysjZGVmaW5lIEZYT1M4NzAwX0FfVFJBTl9JTklUX0xTQl9ZICAweDdiCisrI2RlZmluZSBGWE9TODcwMF9BX1RSQU5fSU5JVF9MU0JfWiAgMHg3ZAorKyNkZWZpbmUgRlhPUzg3MDBfVE1fTlZNX0xPQ0sgICAgICAgIDB4N2UKKysjZGVmaW5lIEZYT1M4NzAwX05WTV9EQVRBMF8zNSAgICAgICAweDgwCisrI2RlZmluZSBGWE9TODcwMF9OVk1fREFUQV9CTkszICAgICAgMHhhNAorKyNkZWZpbmUgRlhPUzg3MDBfTlZNX0RBVEFfQk5LMiAgICAgIDB4YTUKKysjZGVmaW5lIEZYT1M4NzAwX05WTV9EQVRBX0JOSzEgICAgICAweGE2CisrI2RlZmluZSBGWE9TODcwMF9OVk1fREFUQV9CTkswICAgICAgMHhhNworKworKy8qIEJpdCBkZWZpbml0aW9ucyBmb3IgRlhPUzg3MDBfQ1RSTF9SRUcxICovCisrI2RlZmluZSBGWE9TODcwMF9DVFJMX09EUl9NU0sgICAgICAgMHgzOAorKyNkZWZpbmUgRlhPUzg3MDBfQ1RSTF9PRFJfTUFYICAgICAgIDB4MDAKKysjZGVmaW5lIEZYT1M4NzAwX0NUUkxfT0RSX01JTiAgICAgICBHRU5NQVNLKDQsIDMpCisrCisrLyogQml0IGRlZmluaXRpb25zIGZvciBGWE9TODcwMF9NX0NUUkxfUkVHMSAqLworKyNkZWZpbmUgRlhPUzg3MDBfSE1TX01BU0sgICAgICAgICAgIEdFTk1BU0soMSwgMCkKKysjZGVmaW5lIEZYT1M4NzAwX09TX01BU0sgICAgICAgICAgICBHRU5NQVNLKDQsIDIpCisrCisrLyogQml0IGRlZmluaXRpb25zIGZvciBGWE9TODcwMF9NX0NUUkxfUkVHMiAqLworKyNkZWZpbmUgRlhPUzg3MDBfTUFYTUlOX1JTVCAgICAgICAgIEJJVCgyKQorKyNkZWZpbmUgRlhPUzg3MDBfTUFYTUlOX0RJU19USFMgICAgIEJJVCgzKQorKyNkZWZpbmUgRlhPUzg3MDBfTUFYTUlOX0RJUyAgICAgICAgIEJJVCg0KQorKworKyNkZWZpbmUgRlhPUzg3MDBfQUNUSVZFICAgICAgICAgICAgIDB4MDEKKysjZGVmaW5lIEZYT1M4NzAwX0FDVElWRV9NSU5fVVNMRUVQICA0MDAwIC8qIGZyb20gdGFibGUgNiBpbiBkYXRhc2hlZXQgKi8KKysKKysjZGVmaW5lIEZYT1M4NzAwX0RFVklDRV9JRCAgICAgICAgICAweEM3CisrI2RlZmluZSBGWE9TODcwMF9QUkVfREVWSUNFX0lEICAgICAgMHhDNAorKyNkZWZpbmUgRlhPUzg3MDBfREFUQV9CVUZfU0laRSAgICAgIDMKKysKKytzdHJ1Y3QgZnhvczg3MDBfZGF0YSB7CisrCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKKysJc3RydWN0IGlpb190cmlnZ2VyICp0cmlnOworKwlfX2JlMTYgYnVmW0ZYT1M4NzAwX0RBVEFfQlVGX1NJWkVdIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKyt9OworKworKy8qIFJlZ21hcCBpbmZvICovCisrc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfcmFuZ2UgcmVhZF9yYW5nZVtdID0geworKwl7CisrCQkucmFuZ2VfbWluID0gRlhPUzg3MDBfU1RBVFVTLAorKwkJLnJhbmdlX21heCA9IEZYT1M4NzAwX0FfRkZNVF9DT1VOVCwKKysJfSwgeworKwkJLnJhbmdlX21pbiA9IEZYT1M4NzAwX1RSQU5TSUVOVF9DRkcsCisrCQkucmFuZ2VfbWF4ID0gRlhPUzg3MDBfQV9GRk1UX1RIU19aX0xTQiwKKysJfSwKKyt9OworKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX3JhbmdlIHdyaXRlX3JhbmdlW10gPSB7CisrCXsKKysJCS5yYW5nZV9taW4gPSBGWE9TODcwMF9GX1NFVFVQLAorKwkJLnJhbmdlX21heCA9IEZYT1M4NzAwX1RSSUdfQ0ZHLAorKwl9LCB7CisrCQkucmFuZ2VfbWluID0gRlhPUzg3MDBfWFlaX0RBVEFfQ0ZHLAorKwkJLnJhbmdlX21heCA9IEZYT1M4NzAwX0hQX0ZJTFRFUl9DVVRPRkYsCisrCX0sIHsKKysJCS5yYW5nZV9taW4gPSBGWE9TODcwMF9QTF9DRkcsCisrCQkucmFuZ2VfbWF4ID0gRlhPUzg3MDBfQV9GRk1UX0NGRywKKysJfSwgeworKwkJLnJhbmdlX21pbiA9IEZYT1M4NzAwX0FfRkZNVF9USFMsCisrCQkucmFuZ2VfbWF4ID0gRlhPUzg3MDBfVFJBTlNJRU5UX0NGRywKKysJfSwgeworKwkJLnJhbmdlX21pbiA9IEZYT1M4NzAwX1RSQU5TSUVOVF9USFMsCisrCQkucmFuZ2VfbWF4ID0gRlhPUzg3MDBfUFVMU0VfQ0ZHLAorKwl9LCB7CisrCQkucmFuZ2VfbWluID0gRlhPUzg3MDBfUFVMU0VfVEhTWCwKKysJCS5yYW5nZV9tYXggPSBGWE9TODcwMF9PRkZfWiwKKysJfSwgeworKwkJLnJhbmdlX21pbiA9IEZYT1M4NzAwX01fT0ZGX1hfTVNCLAorKwkJLnJhbmdlX21heCA9IEZYT1M4NzAwX01fT0ZGX1pfTFNCLAorKwl9LCB7CisrCQkucmFuZ2VfbWluID0gRlhPUzg3MDBfTV9USFNfQ0ZHLAorKwkJLnJhbmdlX21heCA9IEZYT1M4NzAwX01fVEhTX0NGRywKKysJfSwgeworKwkJLnJhbmdlX21pbiA9IEZYT1M4NzAwX01fVEhTX1hfTVNCLAorKwkJLnJhbmdlX21heCA9IEZYT1M4NzAwX01fQ1RSTF9SRUczLAorKwl9LCB7CisrCQkucmFuZ2VfbWluID0gRlhPUzg3MDBfQV9WRUNNX0NGRywKKysJCS5yYW5nZV9tYXggPSBGWE9TODcwMF9BX0ZGTVRfVEhTX1pfTFNCLAorKwl9LAorK307CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfYWNjZXNzX3RhYmxlIGRyaXZlcl9yZWFkX3RhYmxlID0geworKwkueWVzX3JhbmdlcyA9ICAgcmVhZF9yYW5nZSwKKysJLm5feWVzX3JhbmdlcyA9IEFSUkFZX1NJWkUocmVhZF9yYW5nZSksCisrfTsKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9hY2Nlc3NfdGFibGUgZHJpdmVyX3dyaXRlX3RhYmxlID0geworKwkueWVzX3JhbmdlcyA9ICAgd3JpdGVfcmFuZ2UsCisrCS5uX3llc19yYW5nZXMgPSBBUlJBWV9TSVpFKHdyaXRlX3JhbmdlKSwKKyt9OworKworK2NvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIGZ4b3M4NzAwX3JlZ21hcF9jb25maWcgPSB7CisrCS5yZWdfYml0cyA9IDgsCisrCS52YWxfYml0cyA9IDgsCisrCS5tYXhfcmVnaXN0ZXIgPSBGWE9TODcwMF9OVk1fREFUQV9CTkswLAorKwkucmRfdGFibGUgPSAmZHJpdmVyX3JlYWRfdGFibGUsCisrCS53cl90YWJsZSA9ICZkcml2ZXJfd3JpdGVfdGFibGUsCisrfTsKKytFWFBPUlRfU1lNQk9MKGZ4b3M4NzAwX3JlZ21hcF9jb25maWcpOworKworKyNkZWZpbmUgRlhPUzg3MDBfQ0hBTk5FTChfdHlwZSwgX2F4aXMpIHsJCQlcCisrCS50eXBlID0gX3R5cGUsCQkJCQkJXAorKwkubW9kaWZpZWQgPSAxLAkJCQkJCVwKKysJLmNoYW5uZWwyID0gSUlPX01PRF8jI19heGlzLAkJCQlcCisrCS5pbmZvX21hc2tfc2VwYXJhdGUgPSBCSVQoSUlPX0NIQU5fSU5GT19SQVcpLAkJXAorKwkuaW5mb19tYXNrX3NoYXJlZF9ieV90eXBlID0gQklUKElJT19DSEFOX0lORk9fU0NBTEUpIHwgIFwKKysJCUJJVChJSU9fQ0hBTl9JTkZPX1NBTVBfRlJFUSksCQkJXAorK30KKysKKytlbnVtIGZ4b3M4NzAwX2FjY2VsX3NjYWxlX2JpdHMgeworKwlNT0RFXzJHID0gMCwKKysJTU9ERV80RywKKysJTU9ERV84RywKKyt9OworKworKy8qIHNjYW4gaW5kZXhlcyBmb2xsb3cgREFUQSByZWdpc3RlciBvcmRlciAqLworK2VudW0gZnhvczg3MDBfc2Nhbl9heGlzIHsKKysJRlhPUzg3MDBfU0NBTl9BQ0NFTF9YID0gMCwKKysJRlhPUzg3MDBfU0NBTl9BQ0NFTF9ZLAorKwlGWE9TODcwMF9TQ0FOX0FDQ0VMX1osCisrCUZYT1M4NzAwX1NDQU5fTUFHTl9YLAorKwlGWE9TODcwMF9TQ0FOX01BR05fWSwKKysJRlhPUzg3MDBfU0NBTl9NQUdOX1osCisrCUZYT1M4NzAwX1NDQU5fUkhBTEwsCisrCUZYT1M4NzAwX1NDQU5fVElNRVNUQU1QLAorK307CisrCisrZW51bSBmeG9zODcwMF9zZW5zb3IgeworKwlGWE9TODcwMF9BQ0NFTAk9IDAsCisrCUZYT1M4NzAwX01BR04sCisrCUZYT1M4NzAwX05VTV9TRU5TT1JTIC8qIG11c3QgYmUgbGFzdCAqLworK307CisrCisrZW51bSBmeG9zODcwMF9pbnRfcGluIHsKKysJRlhPUzg3MDBfUElOX0lOVDEsCisrCUZYT1M4NzAwX1BJTl9JTlQyCisrfTsKKysKKytzdHJ1Y3QgZnhvczg3MDBfc2NhbGUgeworKwl1OCBiaXRzOworKwlpbnQgdXNjYWxlOworK307CisrCisrc3RydWN0IGZ4b3M4NzAwX29kciB7CisrCXU4IGJpdHM7CisrCWludCBvZHI7CisrCWludCB1b2RyOworK307CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBmeG9zODcwMF9zY2FsZSBmeG9zODcwMF9hY2NlbF9zY2FsZVtdID0geworKwl7IE1PREVfMkcsIDI0NH0sCisrCXsgTU9ERV80RywgNDg4fSwKKysJeyBNT0RFXzhHLCA5NzZ9LAorK307CisrCisrLyoKKysgKiBBY2NlbGxlcm9tZXRlciBhbmQgbWFnbmV0b21ldGVyIGhhdmUgdGhlIHNhbWUgT0RSIG9wdGlvbnMsIHNldCBpbiB0aGUKKysgKiBDVFJMX1JFRzEgcmVnaXN0ZXIuIE9EUiBpcyBoYWx2ZWQgd2hlbiB1c2luZyBib3RoIHNlbnNvcnMgYXQgb25jZSBpbgorKyAqIGh5YnJpZCBtb2RlLgorKyAqLworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZnhvczg3MDBfb2RyIGZ4b3M4NzAwX29kcltdID0geworKwl7MHgwMCwgODAwLCAwfSwKKysJezB4MDEsIDQwMCwgMH0sCisrCXsweDAyLCAyMDAsIDB9LAorKwl7MHgwMywgMTAwLCAwfSwKKysJezB4MDQsIDUwLCAwfSwKKysJezB4MDUsIDEyLCA1MDAwMDB9LAorKwl7MHgwNiwgNiwgMjUwMDAwfSwKKysJezB4MDcsIDEsIDU2MjUwMH0sCisrfTsKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19jaGFuX3NwZWMgZnhvczg3MDBfY2hhbm5lbHNbXSA9IHsKKysJRlhPUzg3MDBfQ0hBTk5FTChJSU9fQUNDRUwsIFgpLAorKwlGWE9TODcwMF9DSEFOTkVMKElJT19BQ0NFTCwgWSksCisrCUZYT1M4NzAwX0NIQU5ORUwoSUlPX0FDQ0VMLCBaKSwKKysJRlhPUzg3MDBfQ0hBTk5FTChJSU9fTUFHTiwgWCksCisrCUZYT1M4NzAwX0NIQU5ORUwoSUlPX01BR04sIFkpLAorKwlGWE9TODcwMF9DSEFOTkVMKElJT19NQUdOLCBaKSwKKysJSUlPX0NIQU5fU09GVF9USU1FU1RBTVAoRlhPUzg3MDBfU0NBTl9USU1FU1RBTVApLAorK307CisrCisrc3RhdGljIGVudW0gZnhvczg3MDBfc2Vuc29yIGZ4b3M4NzAwX3RvX3NlbnNvcihlbnVtIGlpb19jaGFuX3R5cGUgaWlvX3R5cGUpCisreworKwlzd2l0Y2ggKGlpb190eXBlKSB7CisrCWNhc2UgSUlPX0FDQ0VMOgorKwkJcmV0dXJuIEZYT1M4NzAwX0FDQ0VMOworKwljYXNlIElJT19BTkdMX1ZFTDoKKysJCXJldHVybiBGWE9TODcwMF9NQUdOOworKwlkZWZhdWx0OgorKwkJcmV0dXJuIC1FSU5WQUw7CisrCX0KKyt9CisrCisrc3RhdGljIGludCBmeG9zODcwMF9zZXRfYWN0aXZlX21vZGUoc3RydWN0IGZ4b3M4NzAwX2RhdGEgKmRhdGEsCisrCQkJCSAgICBlbnVtIGZ4b3M4NzAwX3NlbnNvciB0LCBib29sIG1vZGUpCisreworKwlpbnQgcmV0OworKworKwlyZXQgPSByZWdtYXBfd3JpdGUoZGF0YS0+cmVnbWFwLCBGWE9TODcwMF9DVFJMX1JFRzEsIG1vZGUpOworKwlpZiAocmV0KQorKwkJcmV0dXJuIHJldDsKKysKKysJdXNsZWVwX3JhbmdlKEZYT1M4NzAwX0FDVElWRV9NSU5fVVNMRUVQLAorKwkJICAgICBGWE9TODcwMF9BQ1RJVkVfTUlOX1VTTEVFUCArIDEwMDApOworKworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGludCBmeG9zODcwMF9zZXRfc2NhbGUoc3RydWN0IGZ4b3M4NzAwX2RhdGEgKmRhdGEsCisrCQkJICAgICAgZW51bSBmeG9zODcwMF9zZW5zb3IgdCwgaW50IHVzY2FsZSkKKyt7CisrCWludCBpOworKwlzdGF0aWMgY29uc3QgaW50IHNjYWxlX251bSA9IEFSUkFZX1NJWkUoZnhvczg3MDBfYWNjZWxfc2NhbGUpOworKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByZWdtYXBfZ2V0X2RldmljZShkYXRhLT5yZWdtYXApOworKworKwlpZiAodCA9PSBGWE9TODcwMF9NQUdOKSB7CisrCQlkZXZfZXJyKGRldiwgIk1hZ25ldG9tZXRlciBzY2FsZSBpcyBsb2NrZWQgYXQgMTIwMHVUXG4iKTsKKysJCXJldHVybiAtRUlOVkFMOworKwl9CisrCisrCWZvciAoaSA9IDA7IGkgPCBzY2FsZV9udW07IGkrKykKKysJCWlmIChmeG9zODcwMF9hY2NlbF9zY2FsZVtpXS51c2NhbGUgPT0gdXNjYWxlKQorKwkJCWJyZWFrOworKworKwlpZiAoaSA9PSBzY2FsZV9udW0pCisrCQlyZXR1cm4gLUVJTlZBTDsKKysKKysJcmV0dXJuIHJlZ21hcF93cml0ZShkYXRhLT5yZWdtYXAsIEZYT1M4NzAwX1hZWl9EQVRBX0NGRywKKysJCQkgICAgZnhvczg3MDBfYWNjZWxfc2NhbGVbaV0uYml0cyk7CisrfQorKworK3N0YXRpYyBpbnQgZnhvczg3MDBfZ2V0X3NjYWxlKHN0cnVjdCBmeG9zODcwMF9kYXRhICpkYXRhLAorKwkJCSAgICAgIGVudW0gZnhvczg3MDBfc2Vuc29yIHQsIGludCAqdXNjYWxlKQorK3sKKysJaW50IGksIHJldCwgdmFsOworKwlzdGF0aWMgY29uc3QgaW50IHNjYWxlX251bSA9IEFSUkFZX1NJWkUoZnhvczg3MDBfYWNjZWxfc2NhbGUpOworKworKwlpZiAodCA9PSBGWE9TODcwMF9NQUdOKSB7CisrCQkqdXNjYWxlID0gMTIwMDsgLyogTWFnbmV0b21ldGVyIGlzIGxvY2tlZCBhdCAxMjAwdVQgKi8KKysJCXJldHVybiAwOworKwl9CisrCisrCXJldCA9IHJlZ21hcF9yZWFkKGRhdGEtPnJlZ21hcCwgRlhPUzg3MDBfWFlaX0RBVEFfQ0ZHLCAmdmFsKTsKKysJaWYgKHJldCkKKysJCXJldHVybiByZXQ7CisrCisrCWZvciAoaSA9IDA7IGkgPCBzY2FsZV9udW07IGkrKykgeworKwkJaWYgKGZ4b3M4NzAwX2FjY2VsX3NjYWxlW2ldLmJpdHMgPT0gKHZhbCAmIDB4MykpIHsKKysJCQkqdXNjYWxlID0gZnhvczg3MDBfYWNjZWxfc2NhbGVbaV0udXNjYWxlOworKwkJCXJldHVybiAwOworKwkJfQorKwl9CisrCisrCXJldHVybiAtRUlOVkFMOworK30KKysKKytzdGF0aWMgaW50IGZ4b3M4NzAwX2dldF9kYXRhKHN0cnVjdCBmeG9zODcwMF9kYXRhICpkYXRhLCBpbnQgY2hhbl90eXBlLAorKwkJCSAgICAgaW50IGF4aXMsIGludCAqdmFsKQorK3sKKysJdTggYmFzZSwgcmVnOworKwlpbnQgcmV0OworKwllbnVtIGZ4b3M4NzAwX3NlbnNvciB0eXBlID0gZnhvczg3MDBfdG9fc2Vuc29yKGNoYW5fdHlwZSk7CisrCisrCWJhc2UgPSB0eXBlID8gRlhPUzg3MDBfT1VUX1hfTVNCIDogRlhPUzg3MDBfTV9PVVRfWF9NU0I7CisrCisrCS8qIEJsb2NrIHJlYWQgNiBieXRlcyBvZiBkZXZpY2Ugb3V0cHV0IHJlZ2lzdGVycyB0byBhdm9pZCBkYXRhIGxvc3MgKi8KKysJcmV0ID0gcmVnbWFwX2J1bGtfcmVhZChkYXRhLT5yZWdtYXAsIGJhc2UsIGRhdGEtPmJ1ZiwKKysJCQkgICAgICAgRlhPUzg3MDBfREFUQV9CVUZfU0laRSk7CisrCWlmIChyZXQpCisrCQlyZXR1cm4gcmV0OworKworKwkvKiBDb252ZXJ0IGF4aXMgdG8gYnVmZmVyIGluZGV4ICovCisrCXJlZyA9IGF4aXMgLSBJSU9fTU9EX1g7CisrCisrCS8qIENvbnZlcnQgdG8gbmF0aXZlIGVuZGlhbm5lc3MgKi8KKysJKnZhbCA9IHNpZ25fZXh0ZW5kMzIoYmUxNl90b19jcHUoZGF0YS0+YnVmW3JlZ10pLCAxNSk7CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IGZ4b3M4NzAwX3NldF9vZHIoc3RydWN0IGZ4b3M4NzAwX2RhdGEgKmRhdGEsIGVudW0gZnhvczg3MDBfc2Vuc29yIHQsCisrCQkJICAgIGludCBvZHIsIGludCB1b2RyKQorK3sKKysJaW50IGksIHJldCwgdmFsOworKwlib29sIGFjdGl2ZV9tb2RlOworKwlzdGF0aWMgY29uc3QgaW50IG9kcl9udW0gPSBBUlJBWV9TSVpFKGZ4b3M4NzAwX29kcik7CisrCisrCXJldCA9IHJlZ21hcF9yZWFkKGRhdGEtPnJlZ21hcCwgRlhPUzg3MDBfQ1RSTF9SRUcxLCAmdmFsKTsKKysJaWYgKHJldCkKKysJCXJldHVybiByZXQ7CisrCisrCWFjdGl2ZV9tb2RlID0gdmFsICYgRlhPUzg3MDBfQUNUSVZFOworKworKwlpZiAoYWN0aXZlX21vZGUpIHsKKysJCS8qCisrCQkgKiBUaGUgZGV2aWNlIG11c3QgYmUgaW4gc3RhbmRieSBtb2RlIHRvIGNoYW5nZSBhbnkgb2YgdGhlCisrCQkgKiBvdGhlciBmaWVsZHMgd2l0aGluIENUUkxfUkVHMQorKwkJICovCisrCQlyZXQgPSByZWdtYXBfd3JpdGUoZGF0YS0+cmVnbWFwLCBGWE9TODcwMF9DVFJMX1JFRzEsCisrCQkJCSAgIHZhbCAmIH5GWE9TODcwMF9BQ1RJVkUpOworKwkJaWYgKHJldCkKKysJCQlyZXR1cm4gcmV0OworKwl9CisrCisrCWZvciAoaSA9IDA7IGkgPCBvZHJfbnVtOyBpKyspCisrCQlpZiAoZnhvczg3MDBfb2RyW2ldLm9kciA9PSBvZHIgJiYgZnhvczg3MDBfb2RyW2ldLnVvZHIgPT0gdW9kcikKKysJCQlicmVhazsKKysKKysJaWYgKGkgPj0gb2RyX251bSkKKysJCXJldHVybiAtRUlOVkFMOworKworKwlyZXR1cm4gcmVnbWFwX3VwZGF0ZV9iaXRzKGRhdGEtPnJlZ21hcCwKKysJCQkJICBGWE9TODcwMF9DVFJMX1JFRzEsCisrCQkJCSAgRlhPUzg3MDBfQ1RSTF9PRFJfTVNLICsgRlhPUzg3MDBfQUNUSVZFLAorKwkJCQkgIGZ4b3M4NzAwX29kcltpXS5iaXRzIDw8IDMgfCBhY3RpdmVfbW9kZSk7CisrfQorKworK3N0YXRpYyBpbnQgZnhvczg3MDBfZ2V0X29kcihzdHJ1Y3QgZnhvczg3MDBfZGF0YSAqZGF0YSwgZW51bSBmeG9zODcwMF9zZW5zb3IgdCwKKysJCQkgICAgaW50ICpvZHIsIGludCAqdW9kcikKKyt7CisrCWludCBpLCB2YWwsIHJldDsKKysJc3RhdGljIGNvbnN0IGludCBvZHJfbnVtID0gQVJSQVlfU0laRShmeG9zODcwMF9vZHIpOworKworKwlyZXQgPSByZWdtYXBfcmVhZChkYXRhLT5yZWdtYXAsIEZYT1M4NzAwX0NUUkxfUkVHMSwgJnZhbCk7CisrCWlmIChyZXQpCisrCQlyZXR1cm4gcmV0OworKworKwl2YWwgJj0gRlhPUzg3MDBfQ1RSTF9PRFJfTVNLOworKworKwlmb3IgKGkgPSAwOyBpIDwgb2RyX251bTsgaSsrKQorKwkJaWYgKHZhbCA9PSBmeG9zODcwMF9vZHJbaV0uYml0cykKKysJCQlicmVhazsKKysKKysJaWYgKGkgPj0gb2RyX251bSkKKysJCXJldHVybiAtRUlOVkFMOworKworKwkqb2RyID0gZnhvczg3MDBfb2RyW2ldLm9kcjsKKysJKnVvZHIgPSBmeG9zODcwMF9vZHJbaV0udW9kcjsKKysKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQgZnhvczg3MDBfcmVhZF9yYXcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKKysJCQkgICAgIHN0cnVjdCBpaW9fY2hhbl9zcGVjIGNvbnN0ICpjaGFuLAorKwkJCSAgICAgaW50ICp2YWwsIGludCAqdmFsMiwgbG9uZyBtYXNrKQorK3sKKysJaW50IHJldDsKKysJc3RydWN0IGZ4b3M4NzAwX2RhdGEgKmRhdGEgPSBpaW9fcHJpdihpbmRpb19kZXYpOworKworKwlzd2l0Y2ggKG1hc2spIHsKKysJY2FzZSBJSU9fQ0hBTl9JTkZPX1JBVzoKKysJCXJldCA9IGZ4b3M4NzAwX2dldF9kYXRhKGRhdGEsIGNoYW4tPnR5cGUsIGNoYW4tPmNoYW5uZWwyLCB2YWwpOworKwkJaWYgKHJldCkKKysJCQlyZXR1cm4gcmV0OworKwkJcmV0dXJuIElJT19WQUxfSU5UOworKwljYXNlIElJT19DSEFOX0lORk9fU0NBTEU6CisrCQkqdmFsID0gMDsKKysJCXJldCA9IGZ4b3M4NzAwX2dldF9zY2FsZShkYXRhLCBmeG9zODcwMF90b19zZW5zb3IoY2hhbi0+dHlwZSksCisrCQkJCQkgdmFsMik7CisrCQlyZXR1cm4gcmV0ID8gcmV0IDogSUlPX1ZBTF9JTlRfUExVU19NSUNSTzsKKysJY2FzZSBJSU9fQ0hBTl9JTkZPX1NBTVBfRlJFUToKKysJCXJldCA9IGZ4b3M4NzAwX2dldF9vZHIoZGF0YSwgZnhvczg3MDBfdG9fc2Vuc29yKGNoYW4tPnR5cGUpLAorKwkJCQkgICAgICAgdmFsLCB2YWwyKTsKKysJCXJldHVybiByZXQgPyByZXQgOiBJSU9fVkFMX0lOVF9QTFVTX01JQ1JPOworKwlkZWZhdWx0OgorKwkJcmV0dXJuIC1FSU5WQUw7CisrCX0KKyt9CisrCisrc3RhdGljIGludCBmeG9zODcwMF93cml0ZV9yYXcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKKysJCQkgICAgICBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCAqY2hhbiwKKysJCQkgICAgICBpbnQgdmFsLCBpbnQgdmFsMiwgbG9uZyBtYXNrKQorK3sKKysJc3RydWN0IGZ4b3M4NzAwX2RhdGEgKmRhdGEgPSBpaW9fcHJpdihpbmRpb19kZXYpOworKworKwlzd2l0Y2ggKG1hc2spIHsKKysJY2FzZSBJSU9fQ0hBTl9JTkZPX1NDQUxFOgorKwkJcmV0dXJuIGZ4b3M4NzAwX3NldF9zY2FsZShkYXRhLCBmeG9zODcwMF90b19zZW5zb3IoY2hhbi0+dHlwZSksCisrCQkJCQkgIHZhbDIpOworKwljYXNlIElJT19DSEFOX0lORk9fU0FNUF9GUkVROgorKwkJcmV0dXJuIGZ4b3M4NzAwX3NldF9vZHIoZGF0YSwgZnhvczg3MDBfdG9fc2Vuc29yKGNoYW4tPnR5cGUpLAorKwkJCQkJdmFsLCB2YWwyKTsKKysJZGVmYXVsdDoKKysJCXJldHVybiAtRUlOVkFMOworKwl9CisrfQorKworK3N0YXRpYyBJSU9fQ09OU1RfQVRUUihpbl9hY2NlbF9zYW1wbGluZ19mcmVxdWVuY3lfYXZhaWxhYmxlLAorKwkJICAgICAgIjEuNTYyNSA2LjI1IDEyLjUgNTAgMTAwIDIwMCA0MDAgODAwIik7Cisrc3RhdGljIElJT19DT05TVF9BVFRSKGluX21hZ25fc2FtcGxpbmdfZnJlcXVlbmN5X2F2YWlsYWJsZSwKKysJCSAgICAgICIxLjU2MjUgNi4yNSAxMi41IDUwIDEwMCAyMDAgNDAwIDgwMCIpOworK3N0YXRpYyBJSU9fQ09OU1RfQVRUUihpbl9hY2NlbF9zY2FsZV9hdmFpbGFibGUsICIwLjAwMDI0NCAwLjAwMDQ4OCAwLjAwMDk3NiIpOworK3N0YXRpYyBJSU9fQ09OU1RfQVRUUihpbl9tYWduX3NjYWxlX2F2YWlsYWJsZSwgIjAuMDAwMDAxMjAwIik7CisrCisrc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmZ4b3M4NzAwX2F0dHJzW10gPSB7CisrCSZpaW9fY29uc3RfYXR0cl9pbl9hY2NlbF9zYW1wbGluZ19mcmVxdWVuY3lfYXZhaWxhYmxlLmRldl9hdHRyLmF0dHIsCisrCSZpaW9fY29uc3RfYXR0cl9pbl9tYWduX3NhbXBsaW5nX2ZyZXF1ZW5jeV9hdmFpbGFibGUuZGV2X2F0dHIuYXR0ciwKKysJJmlpb19jb25zdF9hdHRyX2luX2FjY2VsX3NjYWxlX2F2YWlsYWJsZS5kZXZfYXR0ci5hdHRyLAorKwkmaWlvX2NvbnN0X2F0dHJfaW5fbWFnbl9zY2FsZV9hdmFpbGFibGUuZGV2X2F0dHIuYXR0ciwKKysJTlVMTCwKKyt9OworKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGZ4b3M4NzAwX2F0dHJzX2dyb3VwID0geworKwkuYXR0cnMgPSBmeG9zODcwMF9hdHRycywKKyt9OworKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2luZm8gZnhvczg3MDBfaW5mbyA9IHsKKysJLnJlYWRfcmF3ID0gZnhvczg3MDBfcmVhZF9yYXcsCisrCS53cml0ZV9yYXcgPSBmeG9zODcwMF93cml0ZV9yYXcsCisrCS5hdHRycyA9ICZmeG9zODcwMF9hdHRyc19ncm91cCwKKyt9OworKworK3N0YXRpYyBpbnQgZnhvczg3MDBfY2hpcF9pbml0KHN0cnVjdCBmeG9zODcwMF9kYXRhICpkYXRhLCBib29sIHVzZV9zcGkpCisreworKwlpbnQgcmV0OworKwl1bnNpZ25lZCBpbnQgdmFsOworKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByZWdtYXBfZ2V0X2RldmljZShkYXRhLT5yZWdtYXApOworKworKwlyZXQgPSByZWdtYXBfcmVhZChkYXRhLT5yZWdtYXAsIEZYT1M4NzAwX1dIT19BTV9JLCAmdmFsKTsKKysJaWYgKHJldCkgeworKwkJZGV2X2VycihkZXYsICJFcnJvciByZWFkaW5nIGNoaXAgaWRcbiIpOworKwkJcmV0dXJuIHJldDsKKysJfQorKwlpZiAodmFsICE9IEZYT1M4NzAwX0RFVklDRV9JRCAmJiB2YWwgIT0gRlhPUzg3MDBfUFJFX0RFVklDRV9JRCkgeworKwkJZGV2X2VycihkZXYsICJXcm9uZyBjaGlwIGlkLCBnb3QgJXggZXhwZWN0ZWQgJXggb3IgJXhcbiIsCisrCQkJdmFsLCBGWE9TODcwMF9ERVZJQ0VfSUQsIEZYT1M4NzAwX1BSRV9ERVZJQ0VfSUQpOworKwkJcmV0dXJuIC1FTk9ERVY7CisrCX0KKysKKysJcmV0ID0gZnhvczg3MDBfc2V0X2FjdGl2ZV9tb2RlKGRhdGEsIEZYT1M4NzAwX0FDQ0VMLCB0cnVlKTsKKysJaWYgKHJldCkKKysJCXJldHVybiByZXQ7CisrCisrCXJldCA9IGZ4b3M4NzAwX3NldF9hY3RpdmVfbW9kZShkYXRhLCBGWE9TODcwMF9NQUdOLCB0cnVlKTsKKysJaWYgKHJldCkKKysJCXJldHVybiByZXQ7CisrCisrCS8qCisrCSAqIFRoZSBkZXZpY2UgbXVzdCBiZSBpbiBzdGFuZGJ5IG1vZGUgdG8gY2hhbmdlIGFueSBvZiB0aGUgb3RoZXIgZmllbGRzCisrCSAqIHdpdGhpbiBDVFJMX1JFRzEKKysJICovCisrCXJldCA9IHJlZ21hcF93cml0ZShkYXRhLT5yZWdtYXAsIEZYT1M4NzAwX0NUUkxfUkVHMSwgMHgwMCk7CisrCWlmIChyZXQpCisrCQlyZXR1cm4gcmV0OworKworKwkvKiBTZXQgbWF4IG92ZXJzYW1wbGUgcmF0aW8gKE9TUikgYW5kIGJvdGggZGV2aWNlcyBhY3RpdmUgKi8KKysJcmV0ID0gcmVnbWFwX3dyaXRlKGRhdGEtPnJlZ21hcCwgRlhPUzg3MDBfTV9DVFJMX1JFRzEsCisrCQkJICAgRlhPUzg3MDBfSE1TX01BU0sgfCBGWE9TODcwMF9PU19NQVNLKTsKKysJaWYgKHJldCkKKysJCXJldHVybiByZXQ7CisrCisrCS8qIERpc2FibGUgYW5kIHJzdCBtaW4vbWF4IG1lYXN1cmVtZW50cyAmIHRocmVzaG9sZCAqLworKwlyZXQgPSByZWdtYXBfd3JpdGUoZGF0YS0+cmVnbWFwLCBGWE9TODcwMF9NX0NUUkxfUkVHMiwKKysJCQkgICBGWE9TODcwMF9NQVhNSU5fUlNUIHwgRlhPUzg3MDBfTUFYTUlOX0RJU19USFMgfAorKwkJCSAgIEZYT1M4NzAwX01BWE1JTl9ESVMpOworKwlpZiAocmV0KQorKwkJcmV0dXJuIHJldDsKKysKKysJLyogTWF4IE9EUiAoODAwSHogaW5kaXZpZHVhbCBvciA0MDBIeiBoeWJyaWQpLCBhY3RpdmUgbW9kZSAqLworKwlyZXQgPSByZWdtYXBfd3JpdGUoZGF0YS0+cmVnbWFwLCBGWE9TODcwMF9DVFJMX1JFRzEsCisrCQkJICAgRlhPUzg3MDBfQ1RSTF9PRFJfTUFYIHwgRlhPUzg3MDBfQUNUSVZFKTsKKysJaWYgKHJldCkKKysJCXJldHVybiByZXQ7CisrCisrCS8qIFNldCBmb3IgbWF4IGZ1bGwtc2NhbGUgcmFuZ2UgKCsvLThHKSAqLworKwlyZXR1cm4gcmVnbWFwX3dyaXRlKGRhdGEtPnJlZ21hcCwgRlhPUzg3MDBfWFlaX0RBVEFfQ0ZHLCBNT0RFXzhHKTsKKyt9CisrCisrc3RhdGljIHZvaWQgZnhvczg3MDBfY2hpcF91bmluaXQodm9pZCAqZGF0YSkKKyt7CisrCXN0cnVjdCBmeG9zODcwMF9kYXRhICpmeG9zODcwMF9kYXRhID0gZGF0YTsKKysKKysJZnhvczg3MDBfc2V0X2FjdGl2ZV9tb2RlKGZ4b3M4NzAwX2RhdGEsIEZYT1M4NzAwX0FDQ0VMLCBmYWxzZSk7CisrCWZ4b3M4NzAwX3NldF9hY3RpdmVfbW9kZShmeG9zODcwMF9kYXRhLCBGWE9TODcwMF9NQUdOLCBmYWxzZSk7CisrfQorKworK2ludCBmeG9zODcwMF9jb3JlX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJlZ21hcCAqcmVnbWFwLAorKwkJCWNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgdXNlX3NwaSkKKyt7CisrCXN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXY7CisrCXN0cnVjdCBmeG9zODcwMF9kYXRhICpkYXRhOworKwlpbnQgcmV0OworKworKwlpbmRpb19kZXYgPSBkZXZtX2lpb19kZXZpY2VfYWxsb2MoZGV2LCBzaXplb2YoKmRhdGEpKTsKKysJaWYgKCFpbmRpb19kZXYpCisrCQlyZXR1cm4gLUVOT01FTTsKKysKKysJZGF0YSA9IGlpb19wcml2KGluZGlvX2Rldik7CisrCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGluZGlvX2Rldik7CisrCWRhdGEtPnJlZ21hcCA9IHJlZ21hcDsKKysKKysJcmV0ID0gZnhvczg3MDBfY2hpcF9pbml0KGRhdGEsIHVzZV9zcGkpOworKwlpZiAocmV0KQorKwkJcmV0dXJuIHJldDsKKysKKysJcmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KGRldiwgZnhvczg3MDBfY2hpcF91bmluaXQsIGRhdGEpOworKwlpZiAocmV0KQorKwkJcmV0dXJuIHJldDsKKysKKysJaW5kaW9fZGV2LT5kZXYucGFyZW50ID0gZGV2OworKwlpbmRpb19kZXYtPmNoYW5uZWxzID0gZnhvczg3MDBfY2hhbm5lbHM7CisrCWluZGlvX2Rldi0+bnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShmeG9zODcwMF9jaGFubmVscyk7CisrCWluZGlvX2Rldi0+bmFtZSA9IG5hbWUgPyBuYW1lIDogImZ4b3M4NzAwIjsKKysJaW5kaW9fZGV2LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOworKwlpbmRpb19kZXYtPmluZm8gPSAmZnhvczg3MDBfaW5mbzsKKysKKysJcmV0dXJuIGRldm1faWlvX2RldmljZV9yZWdpc3RlcihkZXYsIGluZGlvX2Rldik7CisrfQorK0VYUE9SVF9TWU1CT0xfR1BMKGZ4b3M4NzAwX2NvcmVfcHJvYmUpOworKworK01PRFVMRV9BVVRIT1IoIlJvYmVydCBKb25lcyA8cmpvbmVzQGdhdGV3b3Jrcy5jb20+Iik7CisrTU9EVUxFX0RFU0NSSVBUSU9OKCJGWE9TODcwMCA2LUF4aXMgQWNjIGFuZCBNYWcgQ29tYm8gU2Vuc29yIGRyaXZlciIpOworK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKKy0tLSAvZGV2L251bGwKKysrKyBiL2RyaXZlcnMvaWlvL2ltdS9meG9zODcwMF9pMmMuYworQEAgLTAsMCArMSw3MSBAQAorKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisrLyoKKysgKiBGWE9TODcwMCAtIE5YUCBJTVUsIEkyQyBiaXRzCisrICoKKysgKiA3LWJpdCBJMkMgc2xhdmUgYWRkcmVzcyBkZXRlcm1pbmVkIGJ5IFNBMSBhbmQgU0EwIGxvZ2ljIGxldmVsCisrICogaW5wdXRzIHJlcHJlc2VudGVkIGluIHRoZSBmb2xsb3dpbmcgdGFibGU6CisrICogICAgICBTQTEgIHwgIFNBMCAgfCAgU2xhdmUgQWRkcmVzcworKyAqICAgICAgMCAgICB8ICAwICAgIHwgIDB4MUUKKysgKiAgICAgIDAgICAgfCAgMSAgICB8ICAweDFECisrICogICAgICAxICAgIHwgIDAgICAgfCAgMHgxQworKyAqICAgICAgMSAgICB8ICAxICAgIHwgIDB4MUYKKysgKi8KKysjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKysjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisrI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgorKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKysKKysjaW5jbHVkZSAiZnhvczg3MDAuaCIKKysKKytzdGF0aWMgaW50IGZ4b3M4NzAwX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKKyt7CisrCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKKysJY29uc3QgY2hhciAqbmFtZSA9IE5VTEw7CisrCisrCXJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfaTJjKGNsaWVudCwgJmZ4b3M4NzAwX3JlZ21hcF9jb25maWcpOworKwlpZiAoSVNfRVJSKHJlZ21hcCkpIHsKKysJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGkyYyByZWdtYXAgJWRcbiIsCisrCQkJKGludClQVFJfRVJSKHJlZ21hcCkpOworKwkJcmV0dXJuIFBUUl9FUlIocmVnbWFwKTsKKysJfQorKworKwlpZiAoaWQpCisrCQluYW1lID0gaWQtPm5hbWU7CisrCisrCXJldHVybiBmeG9zODcwMF9jb3JlX3Byb2JlKCZjbGllbnQtPmRldiwgcmVnbWFwLCBuYW1lLCBmYWxzZSk7CisrfQorKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBmeG9zODcwMF9pMmNfaWRbXSA9IHsKKysJeyJmeG9zODcwMCIsIDB9LAorKwl7IH0KKyt9OworK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBmeG9zODcwMF9pMmNfaWQpOworKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgZnhvczg3MDBfYWNwaV9tYXRjaFtdID0geworKwl7IkZYT1M4NzAwIiwgMH0sCisrCXsgfQorK307CisrTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBmeG9zODcwMF9hY3BpX21hdGNoKTsKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBmeG9zODcwMF9vZl9tYXRjaFtdID0geworKwl7IC5jb21wYXRpYmxlID0gIm54cCxmeG9zODcwMCIgfSwKKysJeyB9CisrfTsKKytNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBmeG9zODcwMF9vZl9tYXRjaCk7CisrCisrc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGZ4b3M4NzAwX2kyY19kcml2ZXIgPSB7CisrCS5kcml2ZXIgPSB7CisrCQkubmFtZSAgICAgICAgICAgICAgICAgICA9ICJmeG9zODcwMF9pMmMiLAorKwkJLmFjcGlfbWF0Y2hfdGFibGUgICAgICAgPSBBQ1BJX1BUUihmeG9zODcwMF9hY3BpX21hdGNoKSwKKysJCS5vZl9tYXRjaF90YWJsZSAgICAgICAgID0gZnhvczg3MDBfb2ZfbWF0Y2gsCisrCX0sCisrCS5wcm9iZSAgICAgICAgICA9IGZ4b3M4NzAwX2kyY19wcm9iZSwKKysJLmlkX3RhYmxlICAgICAgID0gZnhvczg3MDBfaTJjX2lkLAorK307CisrbW9kdWxlX2kyY19kcml2ZXIoZnhvczg3MDBfaTJjX2RyaXZlcik7CisrCisrTU9EVUxFX0FVVEhPUigiUm9iZXJ0IEpvbmVzIDxyam9uZXNAZ2F0ZXdvcmtzLmNvbT4iKTsKKytNT0RVTEVfREVTQ1JJUFRJT04oIkZYT1M4NzAwIEkyQyBkcml2ZXIiKTsKKytNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CistLS0gL2Rldi9udWxsCisrKysgYi9kcml2ZXJzL2lpby9pbXUvZnhvczg3MDBfc3BpLmMKK0BAIC0wLDAgKzEsNTkgQEAKKysvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorKy8qCisrICogRlhPUzg3MDAgLSBOWFAgSU1VLCBTUEkgYml0cworKyAqLworKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisrI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorKyNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KKysjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisrI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKysKKysjaW5jbHVkZSAiZnhvczg3MDAuaCIKKysKKytzdGF0aWMgaW50IGZ4b3M4NzAwX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQorK3sKKysJc3RydWN0IHJlZ21hcCAqcmVnbWFwOworKwljb25zdCBzdHJ1Y3Qgc3BpX2RldmljZV9pZCAqaWQgPSBzcGlfZ2V0X2RldmljZV9pZChzcGkpOworKworKwlyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X3NwaShzcGksICZmeG9zODcwMF9yZWdtYXBfY29uZmlnKTsKKysJaWYgKElTX0VSUihyZWdtYXApKSB7CisrCQlkZXZfZXJyKCZzcGktPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBzcGkgcmVnbWFwICVkXG4iLAorKwkJCShpbnQpUFRSX0VSUihyZWdtYXApKTsKKysJCXJldHVybiBQVFJfRVJSKHJlZ21hcCk7CisrCX0KKysKKysJcmV0dXJuIGZ4b3M4NzAwX2NvcmVfcHJvYmUoJnNwaS0+ZGV2LCByZWdtYXAsIGlkLT5uYW1lLCB0cnVlKTsKKyt9CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBzcGlfZGV2aWNlX2lkIGZ4b3M4NzAwX3NwaV9pZFtdID0geworKwl7ImZ4b3M4NzAwIiwgMH0sCisrCXsgfQorK307CisrTU9EVUxFX0RFVklDRV9UQUJMRShzcGksIGZ4b3M4NzAwX3NwaV9pZCk7CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBmeG9zODcwMF9hY3BpX21hdGNoW10gPSB7CisrCXsiRlhPUzg3MDAiLCAwfSwKKysJeyB9CisrfTsKKytNT0RVTEVfREVWSUNFX1RBQkxFKGFjcGksIGZ4b3M4NzAwX2FjcGlfbWF0Y2gpOworKworK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGZ4b3M4NzAwX29mX21hdGNoW10gPSB7CisrCXsgLmNvbXBhdGlibGUgPSAibnhwLGZ4b3M4NzAwIiB9LAorKwl7IH0KKyt9OworK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGZ4b3M4NzAwX29mX21hdGNoKTsKKysKKytzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgZnhvczg3MDBfc3BpX2RyaXZlciA9IHsKKysJLnByb2JlICAgICAgICAgID0gZnhvczg3MDBfc3BpX3Byb2JlLAorKwkuaWRfdGFibGUgICAgICAgPSBmeG9zODcwMF9zcGlfaWQsCisrCS5kcml2ZXIgPSB7CisrCQkuYWNwaV9tYXRjaF90YWJsZSAgICAgICA9IEFDUElfUFRSKGZ4b3M4NzAwX2FjcGlfbWF0Y2gpLAorKwkJLm9mX21hdGNoX3RhYmxlICAgICAgICAgPSBmeG9zODcwMF9vZl9tYXRjaCwKKysJCS5uYW1lICAgICAgICAgICAgICAgICAgID0gImZ4b3M4NzAwX3NwaSIsCisrCX0sCisrfTsKKyttb2R1bGVfc3BpX2RyaXZlcihmeG9zODcwMF9zcGlfZHJpdmVyKTsKKysKKytNT0RVTEVfQVVUSE9SKCJSb2JlcnQgSm9uZXMgPHJqb25lc0BnYXRld29ya3MuY29tPiIpOworK01PRFVMRV9ERVNDUklQVElPTigiRlhPUzg3MDAgU1BJIGRyaXZlciIpOworK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC84MDAtdjUuNS1zY3NpLWNvcmUtQWRkLXN5c2ZzLWF0dHJpYnV0ZXMtZm9yLVZQRC1wYWdlcy0waC1hbmQtLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzgwMC12NS41LXNjc2ktY29yZS1BZGQtc3lzZnMtYXR0cmlidXRlcy1mb3ItVlBELXBhZ2VzLTBoLWFuZC0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEzMzI4MAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC84MDAtdjUuNS1zY3NpLWNvcmUtQWRkLXN5c2ZzLWF0dHJpYnV0ZXMtZm9yLVZQRC1wYWdlcy0waC1hbmQtLnBhdGNoCkBAIC0wLDAgKzEsMTIyIEBACitGcm9tIGQxODhiMDY3NWIyMWQ1YTZjYTI3YjNlNzQxMzgxODEzOTgzZjQ3MTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSeWFuIEF0dGFyZCA8cnlhbmF0dGFyZEByeWFuYXR0YXJkLmluZm8+CitEYXRlOiBUaHUsIDI2IFNlcCAyMDE5IDExOjIyOjE3IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIHNjc2k6IGNvcmU6IEFkZCBzeXNmcyBhdHRyaWJ1dGVzIGZvciBWUEQgcGFnZXMgMGggYW5kIDg5aAorCitBZGQgc3lzZnMgYXR0cmlidXRlcyBmb3IgdGhlIEFUQSBpbmZvcm1hdGlvbiBwYWdlIGFuZCBTdXBwb3J0ZWQgVlBEIFBhZ2VzCitwYWdlLgorCitMaW5rOiBodHRwczovL2xvcmUua2VybmVsLm9yZy9yLzIwMTkwOTI2MTYyMjE2LjU2NTkxLTEtcnlhbmF0dGFyZEByeWFuYXR0YXJkLmluZm8KK1NpZ25lZC1vZmYtYnk6IFJ5YW4gQXR0YXJkIDxyeWFuYXR0YXJkQHJ5YW5hdHRhcmQuaW5mbz4KK1Jldmlld2VkLWJ5OiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBLLiBQZXRlcnNlbiA8bWFydGluLnBldGVyc2VuQG9yYWNsZS5jb20+CistLS0KKyBkcml2ZXJzL3Njc2kvc2NzaS5jICAgICAgICB8ICA0ICsrKysKKyBkcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jICB8IDE5ICsrKysrKysrKysrKysrKysrKysKKyBpbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaCB8ICAyICsrCisgMyBmaWxlcyBjaGFuZ2VkLCAyNSBpbnNlcnRpb25zKCspCisKKy0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpLmMKKysrKyBiL2RyaXZlcnMvc2NzaS9zY3NpLmMKK0BAIC00NjUsMTAgKzQ2NSwxNCBAQCB2b2lkIHNjc2lfYXR0YWNoX3ZwZChzdHJ1Y3Qgc2NzaV9kZXZpY2UKKyAJCXJldHVybjsKKyAKKyAJZm9yIChpID0gNDsgaSA8IHZwZF9idWYtPmxlbjsgaSsrKSB7CisrCQlpZiAodnBkX2J1Zi0+ZGF0YVtpXSA9PSAweDApCisrCQkJc2NzaV91cGRhdGVfdnBkX3BhZ2Uoc2RldiwgMHgwLCAmc2Rldi0+dnBkX3BnMCk7CisgCQlpZiAodnBkX2J1Zi0+ZGF0YVtpXSA9PSAweDgwKQorIAkJCXNjc2lfdXBkYXRlX3ZwZF9wYWdlKHNkZXYsIDB4ODAsICZzZGV2LT52cGRfcGc4MCk7CisgCQlpZiAodnBkX2J1Zi0+ZGF0YVtpXSA9PSAweDgzKQorIAkJCXNjc2lfdXBkYXRlX3ZwZF9wYWdlKHNkZXYsIDB4ODMsICZzZGV2LT52cGRfcGc4Myk7CisrCQlpZiAodnBkX2J1Zi0+ZGF0YVtpXSA9PSAweDg5KQorKwkJCXNjc2lfdXBkYXRlX3ZwZF9wYWdlKHNkZXYsIDB4ODksICZzZGV2LT52cGRfcGc4OSk7CisgCX0KKyAJa2ZyZWUodnBkX2J1Zik7CisgfQorLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYworKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYworQEAgLTQzNyw2ICs0MzcsNyBAQCBzdGF0aWMgdm9pZCBzY3NpX2RldmljZV9kZXZfcmVsZWFzZV91c2VyCisgCXN0cnVjdCBkZXZpY2UgKnBhcmVudDsKKyAJc3RydWN0IGxpc3RfaGVhZCAqdGhpcywgKnRtcDsKKyAJc3RydWN0IHNjc2lfdnBkICp2cGRfcGc4MCA9IE5VTEwsICp2cGRfcGc4MyA9IE5VTEw7CisrCXN0cnVjdCBzY3NpX3ZwZCAqdnBkX3BnMCA9IE5VTEwsICp2cGRfcGc4OSA9IE5VTEw7CisgCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisgCXN0cnVjdCBtb2R1bGUgKm1vZDsKKyAKK0BAIC00NjksMTYgKzQ3MCwyNCBAQCBzdGF0aWMgdm9pZCBzY3NpX2RldmljZV9kZXZfcmVsZWFzZV91c2VyCisgCXNkZXYtPnJlcXVlc3RfcXVldWUgPSBOVUxMOworIAorIAltdXRleF9sb2NrKCZzZGV2LT5pbnF1aXJ5X211dGV4KTsKKysJcmN1X3N3YXBfcHJvdGVjdGVkKHNkZXYtPnZwZF9wZzAsIHZwZF9wZzAsCisrCQkJICAgbG9ja2RlcF9pc19oZWxkKCZzZGV2LT5pbnF1aXJ5X211dGV4KSk7CisgCXJjdV9zd2FwX3Byb3RlY3RlZChzZGV2LT52cGRfcGc4MCwgdnBkX3BnODAsCisgCQkJICAgbG9ja2RlcF9pc19oZWxkKCZzZGV2LT5pbnF1aXJ5X211dGV4KSk7CisgCXJjdV9zd2FwX3Byb3RlY3RlZChzZGV2LT52cGRfcGc4MywgdnBkX3BnODMsCisgCQkJICAgbG9ja2RlcF9pc19oZWxkKCZzZGV2LT5pbnF1aXJ5X211dGV4KSk7CisrCXJjdV9zd2FwX3Byb3RlY3RlZChzZGV2LT52cGRfcGc4OSwgdnBkX3BnODksCisrCQkJICAgbG9ja2RlcF9pc19oZWxkKCZzZGV2LT5pbnF1aXJ5X211dGV4KSk7CisgCW11dGV4X3VubG9jaygmc2Rldi0+aW5xdWlyeV9tdXRleCk7CisgCisrCWlmICh2cGRfcGcwKQorKwkJa2ZyZWVfcmN1KHZwZF9wZzAsIHJjdSk7CisgCWlmICh2cGRfcGc4MykKKyAJCWtmcmVlX3JjdSh2cGRfcGc4MywgcmN1KTsKKyAJaWYgKHZwZF9wZzgwKQorIAkJa2ZyZWVfcmN1KHZwZF9wZzgwLCByY3UpOworKwlpZiAodnBkX3BnODkpCisrCQlrZnJlZV9yY3UodnBkX3BnODksIHJjdSk7CisgCWtmcmVlKHNkZXYtPmlucXVpcnkpOworIAlrZnJlZShzZGV2KTsKKyAKK0BAIC04OTEsNiArOTAwLDggQEAgc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIGRldl9hdHRyX3ZwZAorIAorIHNkZXZfdnBkX3BnX2F0dHIocGc4Myk7Cisgc2Rldl92cGRfcGdfYXR0cihwZzgwKTsKKytzZGV2X3ZwZF9wZ19hdHRyKHBnODkpOworK3NkZXZfdnBkX3BnX2F0dHIocGcwKTsKKyAKKyBzdGF0aWMgc3NpemVfdCBzaG93X2lucXVpcnkoc3RydWN0IGZpbGUgKmZpbGVwLCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKKyAJCQkgICAgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLAorQEAgLTEyMjMsMTIgKzEyMzQsMTggQEAgc3RhdGljIHVtb2RlX3Qgc2NzaV9zZGV2X2Jpbl9hdHRyX2lzX3ZpcworIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSB0b19zY3NpX2RldmljZShkZXYpOworIAorIAorKwlpZiAoYXR0ciA9PSAmZGV2X2F0dHJfdnBkX3BnMCAmJiAhc2Rldi0+dnBkX3BnMCkKKysJCXJldHVybiAwOworKworIAlpZiAoYXR0ciA9PSAmZGV2X2F0dHJfdnBkX3BnODAgJiYgIXNkZXYtPnZwZF9wZzgwKQorIAkJcmV0dXJuIDA7CisgCisgCWlmIChhdHRyID09ICZkZXZfYXR0cl92cGRfcGc4MyAmJiAhc2Rldi0+dnBkX3BnODMpCisgCQlyZXR1cm4gMDsKKyAKKysJaWYgKGF0dHIgPT0gJmRldl9hdHRyX3ZwZF9wZzg5ICYmICFzZGV2LT52cGRfcGc4OSkKKysJCXJldHVybiAwOworKworIAlyZXR1cm4gU19JUlVHTzsKKyB9CisgCitAQCAtMTI3MSw4ICsxMjg4LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpzY3NpX3NkZXZfYXR0cnMKKyB9OworIAorIHN0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqc2NzaV9zZGV2X2Jpbl9hdHRyc1tdID0geworKwkmZGV2X2F0dHJfdnBkX3BnMCwKKyAJJmRldl9hdHRyX3ZwZF9wZzgzLAorIAkmZGV2X2F0dHJfdnBkX3BnODAsCisrCSZkZXZfYXR0cl92cGRfcGc4OSwKKyAJJmRldl9hdHRyX2lucXVpcnksCisgCU5VTEwKKyB9OworLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgKKysrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oCitAQCAtMTQwLDggKzE0MCwxMCBAQCBzdHJ1Y3Qgc2NzaV9kZXZpY2UgeworIAljb25zdCBjaGFyICogcmV2OwkJLyogLi4uICJudWxsbnVsbG51bGxudWxsIiBiZWZvcmUgc2NhbiAqLworIAorICNkZWZpbmUgU0NTSV9WUERfUEdfTEVOICAgICAgICAgICAgICAgIDI1NQorKwlzdHJ1Y3Qgc2NzaV92cGQgX19yY3UgKnZwZF9wZzA7CisgCXN0cnVjdCBzY3NpX3ZwZCBfX3JjdSAqdnBkX3BnODM7CisgCXN0cnVjdCBzY3NpX3ZwZCBfX3JjdSAqdnBkX3BnODA7CisrCXN0cnVjdCBzY3NpX3ZwZCBfX3JjdSAqdnBkX3BnODk7CisgCXVuc2lnbmVkIGNoYXIgY3VycmVudF90YWc7CS8qIGN1cnJlbnQgdGFnICovCisgCXN0cnVjdCBzY3NpX3RhcmdldCAgICAgICpzZGV2X3RhcmdldDsgICAvKiB1c2VkIG9ubHkgZm9yIHNpbmdsZV9sdW4gKi8KKyAKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC84MDEtdjUuNS1od21vbi1Ecml2ZXItZm9yLWRpc2stYW5kLXNvbGlkLXN0YXRlLWRyaXZlcy13aXRoLXRlLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzgwMS12NS41LWh3bW9uLURyaXZlci1mb3ItZGlzay1hbmQtc29saWQtc3RhdGUtZHJpdmVzLXdpdGgtdGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJhNjI5NwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC84MDEtdjUuNS1od21vbi1Ecml2ZXItZm9yLWRpc2stYW5kLXNvbGlkLXN0YXRlLWRyaXZlcy13aXRoLXRlLnBhdGNoCkBAIC0wLDAgKzEsNzM3IEBACitGcm9tIDViNDY5MDNkOGJmMzcyZTU2M2JmMjE1MGQ0NmI4N2ZmZjE5N2ExMDkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBHdWVudGVyIFJvZWNrIDxsaW51eEByb2Vjay11cy5uZXQ+CitEYXRlOiBUaHUsIDI4IE5vdiAyMDE5IDIxOjM0OjQwIC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIGh3bW9uOiBEcml2ZXIgZm9yIGRpc2sgYW5kIHNvbGlkIHN0YXRlIGRyaXZlcyB3aXRoCisgdGVtcGVyYXR1cmUgc2Vuc29ycworTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitSZWFkaW5nIHRoZSB0ZW1wZXJhdHVyZSBvZiBBVEEgZHJpdmVzIGhhcyBiZWVuIHN1cHBvcnRlZCBmb3IgeWVhcnMKK2J5IHVzZXJzcGFjZSB0b29scyBzdWNoIGFzIHNtYXJ0dG9vbHMgb3IgaGRkdGVtcC4gVGhlIGRvd25zaWRlIG9mCitzdWNoIHRvb2xzIGlzIHRoYXQgdGhleSBuZWVkIHRvIHJ1biB3aXRoIHN1cGVyLXVzZXIgcHJpdmlsZWdlLCB0aGF0Cit0aGUgdGVtcGVyYXR1cmVzIGFyZSBub3QgcmVwb3J0ZWQgYnkgc3RhbmRhcmQgdG9vbHMgc3VjaCBhcyAnc2Vuc29ycycKK29yICdsaWJzZW5zb3JzJywgYW5kIHRoYXQgZHJpdmUgdGVtcGVyYXR1cmVzIGFyZSBub3QgYXZhaWxhYmxlIGZvciB1c2UKK2luIHRoZSBrZXJuZWwncyB0aGVybWFsIHN1YnN5c3RlbS4KKworVGhpcyBkcml2ZXIgc29sdmVzIHRoaXMgcHJvYmxlbSBieSBhZGRpbmcgc3VwcG9ydCBmb3IgcmVhZGluZyB0aGUKK3RlbXBlcmF0dXJlIG9mIEFUQSBkcml2ZXMgZnJvbSB0aGUga2VybmVsIHVzaW5nIHRoZSBod21vbiBBUEkgYW5kCitieSBhZGRpbmcgYSB0ZW1wZXJhdHVyZSB6b25lIGZvciBlYWNoIGRyaXZlLgorCitXaXRoIHRoaXMgZHJpdmVyLCB0aGUgaGFyZCBkaXNrIHRlbXBlcmF0dXJlIGNhbiBiZSByZWFkIHVzaW5nIHRoZQordW5wcml2aWxlZ2VkICdzZW5zb3JzJyBhcHBsaWNhdGlvbjoKKworJCBzZW5zb3JzIGRyaXZldGVtcC1zY3NpLTEtMAorZHJpdmV0ZW1wLXNjc2ktMS0wCitBZGFwdGVyOiBTQ1NJIGFkYXB0ZXIKK3RlbXAxOiAgICAgICAgKzIzLjDCsEMKKworb3IgZGlyZWN0bHkgZnJvbSBzeXNmczoKKworJCBncmVwIC4gL3N5cy9jbGFzcy9od21vbi9od21vbjkve25hbWUsdGVtcDFfaW5wdXR9Cisvc3lzL2NsYXNzL2h3bW9uL2h3bW9uOS9uYW1lOmRyaXZldGVtcAorL3N5cy9jbGFzcy9od21vbi9od21vbjkvdGVtcDFfaW5wdXQ6MjMwMDAKKworSWYgdGhlIGRyaXZlIHN1cHBvcnRzIFNDVCB0cmFuc3BvcnQgYW5kIHJlcG9ydHMgdGVtcGVyYXR1cmUgbGltaXRzLAordGhvc2UgYXJlIHJlcG9ydGVkIGFzIHdlbGwuCisKK2RyaXZldGVtcC1zY3NpLTAtMAorQWRhcHRlcjogU0NTSSBhZGFwdGVyCit0ZW1wMTogICAgICAgICsyNy4wwrBDICAobG93ICA9ICArMC4wwrBDLCBoaWdoID0gKzYwLjDCsEMpCisgICAgICAgICAgICAgICAgICAgICAgIChjcml0IGxvdyA9IC00MS4wwrBDLCBjcml0ID0gKzg1LjDCsEMpCisgICAgICAgICAgICAgICAgICAgICAgIChsb3dlc3QgPSArMjMuMMKwQywgaGlnaGVzdCA9ICszNC4wwrBDKQorCitUaGUgZHJpdmVyIGF0dGVtcHRzIHRvIHVzZSBTQ1QgQ29tbWFuZCBUcmFuc3BvcnQgdG8gcmVhZCB0aGUgZHJpdmUKK3RlbXBlcmF0dXJlLiBJZiB0aGUgU0NUIENvbW1hbmQgVHJhbnNwb3J0IGZlYXR1cmUgc2V0IGlzIG5vdCBhdmFpbGFibGUsCitvciBpZiBpdCBkb2VzIG5vdCByZXBvcnQgdGhlIGRyaXZlIHRlbXBlcmF0dXJlLCBkcml2ZSB0ZW1wZXJhdHVyZXMgbWF5CitiZSByZWFkYWJsZSB0aHJvdWdoIFNNQVJUIGF0dHJpYnV0ZXMuIFNpbmNlIFNNQVJUIGF0dHJpYnV0ZXMgYXJlIG5vdCB3ZWxsCitkZWZpbmVkLCB0aGlzIG1ldGhvZCBpcyBvbmx5IHVzZWQgYXMgZmFsbGJhY2sgbWVjaGFuaXNtLgorCitDYzogQ2hyaXMgSGVhbHkgPGNwaGVhbHlAZ21haWwuY29tPgorQ2M6IExpbnVzIFdhbGxlaWogPGxpbnVzLndhbGxlaWpAbGluYXJvLm9yZz4KK0NjOiBNYXJ0aW4gSy4gUGV0ZXJzZW4gPG1hcnRpbi5wZXRlcnNlbkBvcmFjbGUuY29tPgorQ2M6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorUmV2aWV3ZWQtYnk6IExpbnVzIFdhbGxlaWogPGxpbnVzLndhbGxlaWpAbGluYXJvLm9yZz4KK1Rlc3RlZC1ieTogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBsaW5hcm8ub3JnPgorU2lnbmVkLW9mZi1ieTogR3VlbnRlciBSb2VjayA8bGludXhAcm9lY2stdXMubmV0PgorLS0tCisgRG9jdW1lbnRhdGlvbi9od21vbi9kcml2ZXRlbXAucnN0IHwgIDUyICsrKworIERvY3VtZW50YXRpb24vaHdtb24vaW5kZXgucnN0ICAgICB8ICAgMSArCisgZHJpdmVycy9od21vbi9LY29uZmlnICAgICAgICAgICAgIHwgIDEwICsKKyBkcml2ZXJzL2h3bW9uL01ha2VmaWxlICAgICAgICAgICAgfCAgIDEgKworIGRyaXZlcnMvaHdtb24vZHJpdmV0ZW1wLmMgICAgICAgICB8IDU3NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyA1IGZpbGVzIGNoYW5nZWQsIDYzOCBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50YXRpb24vaHdtb24vZHJpdmV0ZW1wLnJzdAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2h3bW9uL2RyaXZldGVtcC5jCisKKy0tLSAvZGV2L251bGwKKysrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vZHJpdmV0ZW1wLnJzdAorQEAgLTAsMCArMSw1MiBAQAorKy4uIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisrCisrS2VybmVsIGRyaXZlciBkcml2ZXRlbXAKKys9PT09PT09PT09PT09PT09PT09PT09PQorKworKworK1JlZmVyZW5jZXMKKystLS0tLS0tLS0tCisrCisrQU5TIFQxMy8xNjk5LUQKKytJbmZvcm1hdGlvbiB0ZWNobm9sb2d5IC0gQVQgQXR0YWNobWVudCA4IC0gQVRBL0FUQVBJIENvbW1hbmQgU2V0IChBVEE4LUFDUykKKysKKytBTlMgUHJvamVjdCBUMTAvQlNSIElOQ0lUUyA1MTMKKytJbmZvcm1hdGlvbiB0ZWNobm9sb2d5IC0gU0NTSSBQcmltYXJ5IENvbW1hbmRzIC0gNCAoU1BDLTQpCisrCisrQU5TIFByb2plY3QgSU5DSVRTIDU1NworK0luZm9ybWF0aW9uIHRlY2hub2xvZ3kgLSBTQ1NJIC8gQVRBIFRyYW5zbGF0aW9uIC0gNSAoU0FULTUpCisrCisrCisrRGVzY3JpcHRpb24KKystLS0tLS0tLS0tLQorKworK1RoaXMgZHJpdmVyIHN1cHBvcnRzIHJlcG9ydGluZyB0aGUgdGVtcGVyYXR1cmUgb2YgZGlzayBhbmQgc29saWQgc3RhdGUKKytkcml2ZXMgd2l0aCB0ZW1wZXJhdHVyZSBzZW5zb3JzLgorKworK0lmIHN1cHBvcnRlZCwgaXQgdXNlcyB0aGUgQVRBIFNDVCBDb21tYW5kIFRyYW5zcG9ydCBmZWF0dXJlIHRvIHJlYWQKKyt0aGUgY3VycmVudCBkcml2ZSB0ZW1wZXJhdHVyZSBhbmQsIGlmIGF2YWlsYWJsZSwgdGVtcGVyYXR1cmUgbGltaXRzCisrYXMgd2VsbCBhcyBoaXN0b3JpYyBtaW5pbXVtIGFuZCBtYXhpbXVtIHRlbXBlcmF0dXJlcy4gSWYgU0NUIENvbW1hbmQKKytUcmFuc3BvcnQgaXMgbm90IHN1cHBvcnRlZCwgdGhlIGRyaXZlciB1c2VzIFNNQVJUIGF0dHJpYnV0ZXMgdG8gcmVhZAorK3RoZSBkcml2ZSB0ZW1wZXJhdHVyZS4KKysKKysKKytTeXNmcyBlbnRyaWVzCisrLS0tLS0tLS0tLS0tLQorKworK09ubHkgdGhlIHRlbXAxX2lucHV0IGF0dHJpYnV0ZSBpcyBhbHdheXMgYXZhaWxhYmxlLiBPdGhlciBhdHRyaWJ1dGVzIGFyZQorK2F2YWlsYWJsZSBvbmx5IGlmIHJlcG9ydGVkIGJ5IHRoZSBkcml2ZS4gQWxsIHRlbXBlcmF0dXJlcyBhcmUgcmVwb3J0ZWQgaW4KKyttaWxsaS1kZWdyZWVzIENlbHNpdXMuCisrCisrPT09PT09PT09PT09PT09PT09PT09PT0JPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyt0ZW1wMV9pbnB1dAkJQ3VycmVudCBkcml2ZSB0ZW1wZXJhdHVyZQorK3RlbXAxX2xjcml0CQlNaW5pbXVtIHRlbXBlcmF0dXJlIGxpbWl0LiBPcGVyYXRpbmcgdGhlIGRldmljZSBiZWxvdworKwkJCXRoaXMgdGVtcGVyYXR1cmUgbWF5IGNhdXNlIHBoeXNpY2FsIGRhbWFnZSB0byB0aGUKKysJCQlkZXZpY2UuCisrdGVtcDFfbWluCQlNaW5pbXVtIHJlY29tbWVuZGVkIGNvbnRpbnVvdXMgb3BlcmF0aW5nIGxpbWl0CisrdGVtcDFfbWF4CQlNYXhpbXVtIHJlY29tbWVuZGVkIGNvbnRpbnVvdXMgb3BlcmF0aW5nIHRlbXBlcmF0dXJlCisrdGVtcDFfY3JpdAkJTWF4aW11bSB0ZW1wZXJhdHVyZSBsaW1pdC4gT3BlcmF0aW5nIHRoZSBkZXZpY2UgYWJvdmUKKysJCQl0aGlzIHRlbXBlcmF0dXJlIG1heSBjYXVzZSBwaHlzaWNhbCBkYW1hZ2UgdG8gdGhlCisrCQkJZGV2aWNlLgorK3RlbXAxX2xvd2VzdAkJTWluaW11bSB0ZW1wZXJhdHVyZSBzZWVuIHRoaXMgcG93ZXIgY3ljbGUKKyt0ZW1wMV9oaWdoZXN0CQlNYXhpbXVtIHRlbXBlcmF0dXJlIHNlZW4gdGhpcyBwb3dlciBjeWNsZQorKz09PT09PT09PT09PT09PT09PT09PT09CT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2luZGV4LnJzdAorKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9pbmRleC5yc3QKK0BAIC00NSw2ICs0NSw3IEBAIEhhcmR3YXJlIE1vbml0b3JpbmcgS2VybmVsIERyaXZlcnMKKyAgICBkYTkwNTIKKyAgICBkYTkwNTUKKyAgICBkbWUxNzM3CisrICAgZHJpdmV0ZW1wCisgICAgZHMxNjIxCisgICAgZHM2MjAKKyAgICBlbWMxNDAzCistLS0gYS9kcml2ZXJzL2h3bW9uL0tjb25maWcKKysrKyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZworQEAgLTM4NSw2ICszODUsMTYgQEAgY29uZmlnIFNFTlNPUlNfQVRYUDEKKyAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKKyAJICB3aWxsIGJlIGNhbGxlZCBhdHhwMS4KKyAKKytjb25maWcgU0VOU09SU19EUklWRVRFTVAKKysJdHJpc3RhdGUgIkhhcmQgZGlzayBkcml2ZXMgd2l0aCB0ZW1wZXJhdHVyZSBzZW5zb3JzIgorKwlkZXBlbmRzIG9uIFNDU0kgJiYgQVRBCisrCWhlbHAKKysJICBJZiB5b3Ugc2F5IHllcyB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSB0ZW1wZXJhdHVyZSBzZW5zb3Igb24KKysJICBoYXJkIGRpc2sgZHJpdmVzLgorKworKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQorKwkgIHdpbGwgYmUgY2FsbGVkIHNhdGF0ZW1wLgorKworIGNvbmZpZyBTRU5TT1JTX0RTNjIwCisgCXRyaXN0YXRlICJEYWxsYXMgU2VtaWNvbmR1Y3RvciBEUzYyMCIKKyAJZGVwZW5kcyBvbiBJMkMKKy0tLSBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKKysrKyBiL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKK0BAIC01Niw2ICs1Niw3IEBAIG9iai0kKENPTkZJR19TRU5TT1JTX0RBOTA1Ml9BREMpKz0gZGE5MDUKKyBvYmotJChDT05GSUdfU0VOU09SU19EQTkwNTUpKz0gZGE5MDU1LWh3bW9uLm8KKyBvYmotJChDT05GSUdfU0VOU09SU19ERUxMX1NNTSkJKz0gZGVsbC1zbW0taHdtb24ubworIG9iai0kKENPTkZJR19TRU5TT1JTX0RNRTE3MzcpCSs9IGRtZTE3MzcubworK29iai0kKENPTkZJR19TRU5TT1JTX0RSSVZFVEVNUCkJKz0gZHJpdmV0ZW1wLm8KKyBvYmotJChDT05GSUdfU0VOU09SU19EUzYyMCkJKz0gZHM2MjAubworIG9iai0kKENPTkZJR19TRU5TT1JTX0RTMTYyMSkJKz0gZHMxNjIxLm8KKyBvYmotJChDT05GSUdfU0VOU09SU19FTUMxNDAzKQkrPSBlbWMxNDAzLm8KKy0tLSAvZGV2L251bGwKKysrKyBiL2RyaXZlcnMvaHdtb24vZHJpdmV0ZW1wLmMKK0BAIC0wLDAgKzEsNTc0IEBACisrLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKysvKgorKyAqIEh3bW9uIGNsaWVudCBmb3IgZGlzayBhbmQgc29saWQgc3RhdGUgZHJpdmVzIHdpdGggdGVtcGVyYXR1cmUgc2Vuc29ycworKyAqIENvcHlyaWdodCAoQykgMjAxOSBab2RpYWMgSW5mbGlnaHQgSW5ub3ZhdGlvbnMKKysgKgorKyAqIFdpdGggaW5wdXQgZnJvbToKKysgKiAgICBId21vbiBjbGllbnQgZm9yIFMuTS5BLlIuVC4gaGFyZCBkaXNrIGRyaXZlcyB3aXRoIHRlbXBlcmF0dXJlIHNlbnNvcnMuCisrICogICAgKEMpIDIwMTggTGludXMgV2FsbGVpagorKyAqCisrICogICAgaHdtb246IERyaXZlciBmb3IgU0NTSS9BVEEgdGVtcGVyYXR1cmUgc2Vuc29ycworKyAqICAgIGJ5IENvbnN0YW50aW4gQmFyYW5vdiA8Y29uc3RAbWltYXMucnU+LCBzdWJtaXR0ZWQgU2VwdGVtYmVyIDIwMDkKKysgKgorKyAqIFRoaXMgZHJpdmUgc3VwcG9ydHMgcmVwb3J0aW5nIHRoZSB0ZW1wZXJhdGlyZSBvZiBTQVRBIGRyaXZlcy4gSXQgY2FuIGJlCisrICogZWFzaWx5IGV4dGVuZGVkIHRvIHJlcG9ydCB0aGUgdGVtcGVyYXR1cmUgb2YgU0NTSSBkcml2ZXMuCisrICoKKysgKiBUaGUgcHJpbWFyeSBtZWFucyB0byByZWFkIGRyaXZlIHRlbXBlcmF0dXJlcyBhbmQgdGVtcGVyYXR1cmUgbGltaXRzCisrICogZm9yIEFUQSBkcml2ZXMgaXMgdGhlIFNDVCBDb21tYW5kIFRyYW5zcG9ydCBmZWF0dXJlIHNldCBhcyBzcGVjaWZpZWQgaW4KKysgKiBBVEE4LUFDUy4KKysgKiBJdCBjYW4gYmUgdXNlZCB0byByZWFkIHRoZSBjdXJyZW50IGRyaXZlIHRlbXBlcmF0dXJlLCB0ZW1wZXJhdHVyZSBsaW1pdHMsCisrICogYW5kIGhpc3RvcmljIG1pbmltdW0gYW5kIG1heGltdW0gdGVtcGVyYXR1cmVzLiBUaGUgU0NUIENvbW1hbmQgVHJhbnNwb3J0CisrICogZmVhdHVyZSBzZXQgaXMgZG9jdW1lbnRlZCBpbiAiQVQgQXR0YWNobWVudCA4IC0gQVRBL0FUQVBJIENvbW1hbmQgU2V0CisrICogKEFUQTgtQUNTKSIuCisrICoKKysgKiBJZiB0aGUgU0NUIENvbW1hbmQgVHJhbnNwb3J0IGZlYXR1cmUgc2V0IGlzIG5vdCBhdmFpbGFibGUsIGRyaXZlIHRlbXBlcmF0dXJlcworKyAqIG1heSBiZSByZWFkYWJsZSB0aHJvdWdoIFNNQVJUIGF0dHJpYnV0ZXMuIFNpbmNlIFNNQVJUIGF0dHJpYnV0ZXMgYXJlIG5vdCB3ZWxsCisrICogZGVmaW5lZCwgdGhpcyBtZXRob2QgaXMgb25seSB1c2VkIGFzIGZhbGxiYWNrIG1lY2hhbmlzbS4KKysgKgorKyAqIFRoZXJlIGFyZSB0aHJlZSBTTUFSVCBhdHRyaWJ1dGVzIHdoaWNoIG1heSByZXBvcnQgZHJpdmUgdGVtcGVyYXR1cmVzLgorKyAqIFRob3NlIGFyZSBkZWZpbmVkIGFzIGZvbGxvd3MgKGZyb20KKysgKiBodHRwOi8vd3d3LmNyb3BlbC5jb20vbGlicmFyeS9zbWFydC1hdHRyaWJ1dGUtbGlzdC5hc3B4KS4KKysgKgorKyAqIDE5MAlUZW1wZXJhdHVyZQlUZW1wZXJhdHVyZSwgbW9uaXRvcmVkIGJ5IGEgc2Vuc29yIHNvbWV3aGVyZSBpbnNpZGUKKysgKgkJCXRoZSBkcml2ZS4gUmF3IHZhbHVlIHR5cGljYWx5IGhvbGRzIHRoZSBhY3R1YWwKKysgKgkJCXRlbXBlcmF0dXJlIChoZXhhZGVjaW1hbCkgaW4gaXRzIHJpZ2h0bW9zdCB0d28gZGlnaXRzLgorKyAqCisrICogMTk0CVRlbXBlcmF0dXJlCVRlbXBlcmF0dXJlLCBtb25pdG9yZWQgYnkgYSBzZW5zb3Igc29tZXdoZXJlIGluc2lkZQorKyAqCQkJdGhlIGRyaXZlLiBSYXcgdmFsdWUgdHlwaWNhbHkgaG9sZHMgdGhlIGFjdHVhbAorKyAqCQkJdGVtcGVyYXR1cmUgKGhleGFkZWNpbWFsKSBpbiBpdHMgcmlnaHRtb3N0IHR3byBkaWdpdHMuCisrICoKKysgKiAyMzEJVGVtcGVyYXR1cmUJVGVtcGVyYXR1cmUsIG1vbml0b3JlZCBieSBhIHNlbnNvciBzb21ld2hlcmUgaW5zaWRlCisrICoJCQl0aGUgZHJpdmUuIFJhdyB2YWx1ZSB0eXBpY2FseSBob2xkcyB0aGUgYWN0dWFsCisrICoJCQl0ZW1wZXJhdHVyZSAoaGV4YWRlY2ltYWwpIGluIGl0cyByaWdodG1vc3QgdHdvIGRpZ2l0cy4KKysgKgorKyAqIFdpa2lwZWRpYSBkZWZpbmVzIGF0dHJpYnV0ZXMgYSBiaXQgZGlmZmVyZW50bHkuCisrICoKKysgKiAxOTAJVGVtcGVyYXR1cmUJVmFsdWUgaXMgZXF1YWwgdG8gKDEwMC10ZW1wLiDCsEMpLCBhbGxvd2luZyBtYW51ZmFjdHVyZXIKKysgKglEaWZmZXJlbmNlIG9yCXRvIHNldCBhIG1pbmltdW0gdGhyZXNob2xkIHdoaWNoIGNvcnJlc3BvbmRzIHRvIGEKKysgKglBaXJmbG93CQltYXhpbXVtIHRlbXBlcmF0dXJlLiBUaGlzIGFsc28gZm9sbG93cyB0aGUgY29udmVudGlvbiBvZgorKyAqCVRlbXBlcmF0dXJlCTEwMCBiZWluZyBhIGJlc3QtY2FzZSB2YWx1ZSBhbmQgbG93ZXIgdmFsdWVzIGJlaW5nCisrICoJCQl1bmRlc2lyYWJsZS4gSG93ZXZlciwgc29tZSBvbGRlciBkcml2ZXMgbWF5IGluc3RlYWQKKysgKgkJCXJlcG9ydCByYXcgVGVtcGVyYXR1cmUgKGlkZW50aWNhbCB0byAweEMyKSBvcgorKyAqCQkJVGVtcGVyYXR1cmUgbWludXMgNTAgaGVyZS4KKysgKiAxOTQJVGVtcGVyYXR1cmUgb3IJSW5kaWNhdGVzIHRoZSBkZXZpY2UgdGVtcGVyYXR1cmUsIGlmIHRoZSBhcHByb3ByaWF0ZQorKyAqCVRlbXBlcmF0dXJlCXNlbnNvciBpcyBmaXR0ZWQuIExvd2VzdCBieXRlIG9mIHRoZSByYXcgdmFsdWUgY29udGFpbnMKKysgKglDZWxzaXVzCQl0aGUgZXhhY3QgdGVtcGVyYXR1cmUgdmFsdWUgKENlbHNpdXMgZGVncmVlcykuCisrICogMjMxCUxpZmUgTGVmdAlJbmRpY2F0ZXMgdGhlIGFwcHJveGltYXRlIFNTRCBsaWZlIGxlZnQsIGluIHRlcm1zIG9mCisrICoJKFNTRHMpIG9yCXByb2dyYW0vZXJhc2UgY3ljbGVzIG9yIGF2YWlsYWJsZSByZXNlcnZlZCBibG9ja3MuCisrICoJVGVtcGVyYXR1cmUJQSBub3JtYWxpemVkIHZhbHVlIG9mIDEwMCByZXByZXNlbnRzIGEgbmV3IGRyaXZlLCB3aXRoCisrICoJCQlhIHRocmVzaG9sZCB2YWx1ZSBhdCAxMCBpbmRpY2F0aW5nIGEgbmVlZCBmb3IKKysgKgkJCXJlcGxhY2VtZW50LiBBIHZhbHVlIG9mIDAgbWF5IG1lYW4gdGhhdCB0aGUgZHJpdmUgaXMKKysgKgkJCW9wZXJhdGluZyBpbiByZWFkLW9ubHkgbW9kZSB0byBhbGxvdyBkYXRhIHJlY292ZXJ5LgorKyAqCQkJUHJldmlvdXNseSAocHJlLTIwMTApIG9jY2FzaW9uYWxseSB1c2VkIGZvciBEcml2ZQorKyAqCQkJVGVtcGVyYXR1cmUgKG1vcmUgdHlwaWNhbGx5IHJlcG9ydGVkIGF0IDB4QzIpLgorKyAqCisrICogQ29tbW9uIGRlbm9taW5hdG9yIGlzIHRoYXQgdGhlIGZpcnN0IHJhdyBieXRlIHJlcG9ydHMgdGhlIHRlbXBlcmF0dXJlCisrICogaW4gZGVncmVlcyBDIG9uIGFsbW9zdCBhbGwgZHJpdmVzLiBTb21lIGRyaXZlcyBtYXkgcmVwb3J0IGEgZnJhY3Rpb25hbAorKyAqIHRlbXBlcmF0dXJlIGluIHRoZSBzZWNvbmQgcmF3IGJ5dGUuCisrICoKKysgKiBLbm93biBleGNlcHRpb25zIChmcm9tIGxpYmF0YXNtYXJ0KToKKysgKiAtIFNBTVNVTkcgU1YwNDEySCBhbmQgU0FNU1VORyBTVjEyMDRIKSByZXBvcnQgdGhlIHRlbXBlcmF0dXJlIGluIDEwdGgKKysgKiAgIGRlZ3JlZXMgQyBpbiB0aGUgZmlyc3QgdHdvIHJhdyBieXRlcy4KKysgKiAtIEEgZmV3IE1heHRvciBkcml2ZXMgcmVwb3J0IGFuIHVua25vd24gb3IgYmFkIHZhbHVlIGluIGF0dHJpYnV0ZSAxOTQuCisrICogLSBDZXJ0YWluIEFwcGxlIFNTRCBkcml2ZXMgcmVwb3J0IGFuIHVua25vd24gdmFsdWUgaW4gYXR0cmlidXRlIDE5MC4KKysgKiAgIE9ubHkgY2VydGFpbiBmaXJtd2FyZSB2ZXJzaW9ucyBhcmUgYWZmZWN0ZWQuCisrICoKKysgKiBUaG9zZSBleGNlcHRpb25zIGFmZmVjdCBvbGRlciBBVEEgZHJpdmVzIGFuZCBhcmUgY3VycmVudGx5IGlnbm9yZWQuCisrICogQWxzbywgdGhlIHNlY29uZCByYXcgYnl0ZSAocG9zc2libHkgcmVwb3J0aW5nIHRoZSBmcmFjdGlvbmFsIHRlbXBlcmF0dXJlKQorKyAqIGlzIGN1cnJlbnRseSBpZ25vcmVkLgorKyAqCisrICogTWFueSBkcml2ZXMgYWxzbyByZXBvcnQgdGVtcGVyYXR1cmUgbGltaXRzIGluIGFkZGl0aW9uYWwgU01BUlQgZGF0YSByYXcKKysgKiBieXRlcy4gVGhlIGZvcm1hdCBvZiB0aG9zZSBpcyBub3Qgd2VsbCBkZWZpbmVkIGFuZCB2YXJpZXMgd2lkZWx5LgorKyAqIFRoZSBkcml2ZXIgZG9lcyBub3QgY3VycmVudGx5IGF0dGVtcHQgdG8gcmVwb3J0IHRob3NlIGxpbWl0cy4KKysgKgorKyAqIEFjY29yZGluZyB0byBkYXRhIGluIHNtYXJ0bW9udG9vbHMsIGF0dHJpYnV0ZSAyMzEgaXMgcmFyZWx5IHVzZWQgdG8gcmVwb3J0CisrICogZHJpdmUgdGVtcGVyYXR1cmVzLiBBdCB0aGUgc2FtZSB0aW1lLCBzZXZlcmFsIGRyaXZlcyByZXBvcnQgU1NEIGxpZmUgbGVmdAorKyAqIGluIGF0dHJpYnV0ZSAyMzEsIGJ1dCBkbyBub3Qgc3VwcG9ydCB0ZW1wZXJhdHVyZSBzZW5zb3JzLiBGb3IgdGhpcyByZWFzb24sCisrICogYXR0cmlidXRlIDIzMSBpcyBjdXJyZW50bHkgaWdub3JlZC4KKysgKgorKyAqIEZvbGxvd2luZyBhYm92ZSBkZWZpbml0aW9ucywgdGVtcGVyYXR1cmVzIGFyZSByZXBvcnRlZCBhcyBmb2xsb3dzLgorKyAqICAgSWYgU0NUIENvbW1hbmQgVHJhbnNwb3J0IGlzIHN1cHBvcnRlZCwgaXQgaXMgdXNlZCB0byByZWFkIHRoZQorKyAqICAgdGVtcGVyYXR1cmUgYW5kLCBpZiBhdmFpbGFibGUsIHRlbXBlcmF0dXJlIGxpbWl0cy4KKysgKiAtIE90aGVyd2lzZSwgaWYgU01BUlQgYXR0cmlidXRlIDE5NCBpcyBzdXBwb3J0ZWQsIGl0IGlzIHVzZWQgdG8gcmVhZAorKyAqICAgdGhlIHRlbXBlcmF0dXJlLgorKyAqIC0gT3RoZXJ3aXNlLCBpZiBTTUFSVCBhdHRyaWJ1dGUgMTkwIGlzIHN1cHBvcnRlZCwgaXQgaXMgdXNlZCB0byByZWFkCisrICogICB0aGUgdGVtcGVyYXR1cmUuCisrICovCisrCisrI2luY2x1ZGUgPGxpbnV4L2F0YS5oPgorKyNpbmNsdWRlIDxsaW51eC9iaXRzLmg+CisrI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorKyNpbmNsdWRlIDxsaW51eC9od21vbi5oPgorKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKysjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKysjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKysjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KKysjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgorKyNpbmNsdWRlIDxzY3NpL3Njc2lfZHJpdmVyLmg+CisrI2luY2x1ZGUgPHNjc2kvc2NzaV9wcm90by5oPgorKworK3N0cnVjdCBkcml2ZXRlbXBfZGF0YSB7CisrCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJCS8qIGxpc3Qgb2YgaW5zdGFudGlhdGVkIGRldmljZXMgKi8KKysJc3RydWN0IG11dGV4IGxvY2s7CQkvKiBwcm90ZWN0IGRhdGEgYnVmZmVyIGFjY2Vzc2VzICovCisrCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsJLyogU0NTSSBkZXZpY2UgKi8KKysJc3RydWN0IGRldmljZSAqZGV2OwkJLyogaW5zdGFudGlhdGluZyBkZXZpY2UgKi8KKysJc3RydWN0IGRldmljZSAqaHdkZXY7CQkvKiBoYXJkd2FyZSBtb25pdG9yaW5nIGRldmljZSAqLworKwl1OCBzbWFydGRhdGFbQVRBX1NFQ1RfU0laRV07CS8qIGxvY2FsIGJ1ZmZlciAqLworKwlpbnQgKCpnZXRfdGVtcCkoc3RydWN0IGRyaXZldGVtcF9kYXRhICpzdCwgdTMyIGF0dHIsIGxvbmcgKnZhbCk7CisrCWJvb2wgaGF2ZV90ZW1wX2xvd2VzdDsJCS8qIGxvd2VzdCB0ZW1wIGluIFNDVCBzdGF0dXMgKi8KKysJYm9vbCBoYXZlX3RlbXBfaGlnaGVzdDsJCS8qIGhpZ2hlc3QgdGVtcCBpbiBTQ1Qgc3RhdHVzICovCisrCWJvb2wgaGF2ZV90ZW1wX21pbjsJCS8qIGhhdmUgbWluIHRlbXAgKi8KKysJYm9vbCBoYXZlX3RlbXBfbWF4OwkJLyogaGF2ZSBtYXggdGVtcCAqLworKwlib29sIGhhdmVfdGVtcF9sY3JpdDsJCS8qIGhhdmUgbG93ZXIgY3JpdGljYWwgbGltaXQgKi8KKysJYm9vbCBoYXZlX3RlbXBfY3JpdDsJCS8qIGhhdmUgY3JpdGljYWwgbGltaXQgKi8KKysJaW50IHRlbXBfbWluOwkJCS8qIG1pbiB0ZW1wICovCisrCWludCB0ZW1wX21heDsJCQkvKiBtYXggdGVtcCAqLworKwlpbnQgdGVtcF9sY3JpdDsJCQkvKiBsb3dlciBjcml0aWNhbCBsaW1pdCAqLworKwlpbnQgdGVtcF9jcml0OwkJCS8qIGNyaXRpY2FsIGxpbWl0ICovCisrfTsKKysKKytzdGF0aWMgTElTVF9IRUFEKGRyaXZldGVtcF9kZXZsaXN0KTsKKysKKysjZGVmaW5lIEFUQV9NQVhfU01BUlRfQVRUUlMJMzAKKysjZGVmaW5lIFNNQVJUX1RFTVBfUFJPUF8xOTAJMTkwCisrI2RlZmluZSBTTUFSVF9URU1QX1BST1BfMTk0CTE5NAorKworKyNkZWZpbmUgU0NUX1NUQVRVU19SRVFfQUREUgkweGUwCisrI2RlZmluZSAgU0NUX1NUQVRVU19WRVJTSU9OX0xPVwkJMAkvKiBsb2cgYnl0ZSBvZmZzZXRzICovCisrI2RlZmluZSAgU0NUX1NUQVRVU19WRVJTSU9OX0hJR0gJMQorKyNkZWZpbmUgIFNDVF9TVEFUVVNfVEVNUAkJMjAwCisrI2RlZmluZSAgU0NUX1NUQVRVU19URU1QX0xPV0VTVAkJMjAxCisrI2RlZmluZSAgU0NUX1NUQVRVU19URU1QX0hJR0hFU1QJMjAyCisrI2RlZmluZSBTQ1RfUkVBRF9MT0dfQUREUgkweGUxCisrI2RlZmluZSAgU01BUlRfUkVBRF9MT0cJCQkweGQ1CisrI2RlZmluZSAgU01BUlRfV1JJVEVfTE9HCQkweGQ2CisrCisrI2RlZmluZSBJTlZBTElEX1RFTVAJCTB4ODAKKysKKysjZGVmaW5lIHRlbXBfaXNfdmFsaWQodGVtcCkJKCh0ZW1wKSAhPSBJTlZBTElEX1RFTVApCisrI2RlZmluZSB0ZW1wX2Zyb21fc2N0KHRlbXApCSgoKHM4KSh0ZW1wKSkgKiAxMDAwKQorKworK3N0YXRpYyBpbmxpbmUgYm9vbCBhdGFfaWRfc21hcnRfc3VwcG9ydGVkKHUxNiAqaWQpCisreworKwlyZXR1cm4gaWRbQVRBX0lEX0NPTU1BTkRfU0VUXzFdICYgQklUKDApOworK30KKysKKytzdGF0aWMgaW5saW5lIGJvb2wgYXRhX2lkX3NtYXJ0X2VuYWJsZWQodTE2ICppZCkKKyt7CisrCXJldHVybiBpZFtBVEFfSURfQ0ZTX0VOQUJMRV8xXSAmIEJJVCgwKTsKKyt9CisrCisrc3RhdGljIGludCBkcml2ZXRlbXBfc2NzaV9jb21tYW5kKHN0cnVjdCBkcml2ZXRlbXBfZGF0YSAqc3QsCisrCQkJCSB1OCBhdGFfY29tbWFuZCwgdTggZmVhdHVyZSwKKysJCQkJIHU4IGxiYV9sb3csIHU4IGxiYV9taWQsIHU4IGxiYV9oaWdoKQorK3sKKysJdTggc2NzaV9jbWRbTUFYX0NPTU1BTkRfU0laRV07CisrCWludCBkYXRhX2RpcjsKKysKKysJbWVtc2V0KHNjc2lfY21kLCAwLCBzaXplb2Yoc2NzaV9jbWQpKTsKKysJc2NzaV9jbWRbMF0gPSBBVEFfMTY7CisrCWlmIChhdGFfY29tbWFuZCA9PSBBVEFfQ01EX1NNQVJUICYmIGZlYXR1cmUgPT0gU01BUlRfV1JJVEVfTE9HKSB7CisrCQlzY3NpX2NtZFsxXSA9ICg1IDw8IDEpOwkvKiBQSU8gRGF0YS1vdXQgKi8KKysJCS8qCisrCQkgKiBObyBvZmYubGluZSBvciBjYywgd3JpdGUgdG8gZGV2LCBibG9jayBjb3VudCBpbiBzZWN0b3IgY291bnQKKysJCSAqIGZpZWxkLgorKwkJICovCisrCQlzY3NpX2NtZFsyXSA9IDB4MDY7CisrCQlkYXRhX2RpciA9IERNQV9UT19ERVZJQ0U7CisrCX0gZWxzZSB7CisrCQlzY3NpX2NtZFsxXSA9ICg0IDw8IDEpOwkvKiBQSU8gRGF0YS1pbiAqLworKwkJLyoKKysJCSAqIE5vIG9mZi5saW5lIG9yIGNjLCByZWFkIGZyb20gZGV2LCBibG9jayBjb3VudCBpbiBzZWN0b3IgY291bnQKKysJCSAqIGZpZWxkLgorKwkJICovCisrCQlzY3NpX2NtZFsyXSA9IDB4MGU7CisrCQlkYXRhX2RpciA9IERNQV9GUk9NX0RFVklDRTsKKysJfQorKwlzY3NpX2NtZFs0XSA9IGZlYXR1cmU7CisrCXNjc2lfY21kWzZdID0gMTsJLyogMSBzZWN0b3IgKi8KKysJc2NzaV9jbWRbOF0gPSBsYmFfbG93OworKwlzY3NpX2NtZFsxMF0gPSBsYmFfbWlkOworKwlzY3NpX2NtZFsxMl0gPSBsYmFfaGlnaDsKKysJc2NzaV9jbWRbMTRdID0gYXRhX2NvbW1hbmQ7CisrCisrCXJldHVybiBzY3NpX2V4ZWN1dGVfcmVxKHN0LT5zZGV2LCBzY3NpX2NtZCwgZGF0YV9kaXIsCisrCQkJCXN0LT5zbWFydGRhdGEsIEFUQV9TRUNUX1NJWkUsIE5VTEwsIEhaLCA1LAorKwkJCQlOVUxMKTsKKyt9CisrCisrc3RhdGljIGludCBkcml2ZXRlbXBfYXRhX2NvbW1hbmQoc3RydWN0IGRyaXZldGVtcF9kYXRhICpzdCwgdTggZmVhdHVyZSwKKysJCQkJIHU4IHNlbGVjdCkKKyt7CisrCXJldHVybiBkcml2ZXRlbXBfc2NzaV9jb21tYW5kKHN0LCBBVEFfQ01EX1NNQVJULCBmZWF0dXJlLCBzZWxlY3QsCisrCQkJCSAgICAgQVRBX1NNQVJUX0xCQU1fUEFTUywgQVRBX1NNQVJUX0xCQUhfUEFTUyk7CisrfQorKworK3N0YXRpYyBpbnQgZHJpdmV0ZW1wX2dldF9zbWFydHRlbXAoc3RydWN0IGRyaXZldGVtcF9kYXRhICpzdCwgdTMyIGF0dHIsCisrCQkJCSAgbG9uZyAqdGVtcCkKKyt7CisrCXU4ICpidWYgPSBzdC0+c21hcnRkYXRhOworKwlib29sIGhhdmVfdGVtcCA9IGZhbHNlOworKwl1OCB0ZW1wX3JhdzsKKysJdTggY3N1bTsKKysJaW50IGVycjsKKysJaW50IGk7CisrCisrCWVyciA9IGRyaXZldGVtcF9hdGFfY29tbWFuZChzdCwgQVRBX1NNQVJUX1JFQURfVkFMVUVTLCAwKTsKKysJaWYgKGVycikKKysJCXJldHVybiBlcnI7CisrCisrCS8qIENoZWNrc3VtIHRoZSByZWFkIHZhbHVlIHRhYmxlICovCisrCWNzdW0gPSAwOworKwlmb3IgKGkgPSAwOyBpIDwgQVRBX1NFQ1RfU0laRTsgaSsrKQorKwkJY3N1bSArPSBidWZbaV07CisrCWlmIChjc3VtKSB7CisrCQlkZXZfZGJnKCZzdC0+c2Rldi0+c2Rldl9nZW5kZXYsCisrCQkJImNoZWNrc3VtIGVycm9yIHJlYWRpbmcgU01BUlQgdmFsdWVzXG4iKTsKKysJCXJldHVybiAtRUlPOworKwl9CisrCisrCWZvciAoaSA9IDA7IGkgPCBBVEFfTUFYX1NNQVJUX0FUVFJTOyBpKyspIHsKKysJCXU4ICphdHRyID0gYnVmICsgaSAqIDEyOworKwkJaW50IGlkID0gYXR0clsyXTsKKysKKysJCWlmICghaWQpCisrCQkJY29udGludWU7CisrCisrCQlpZiAoaWQgPT0gU01BUlRfVEVNUF9QUk9QXzE5MCkgeworKwkJCXRlbXBfcmF3ID0gYXR0cls3XTsKKysJCQloYXZlX3RlbXAgPSB0cnVlOworKwkJfQorKwkJaWYgKGlkID09IFNNQVJUX1RFTVBfUFJPUF8xOTQpIHsKKysJCQl0ZW1wX3JhdyA9IGF0dHJbN107CisrCQkJaGF2ZV90ZW1wID0gdHJ1ZTsKKysJCQlicmVhazsKKysJCX0KKysJfQorKworKwlpZiAoaGF2ZV90ZW1wKSB7CisrCQkqdGVtcCA9IHRlbXBfcmF3ICogMTAwMDsKKysJCXJldHVybiAwOworKwl9CisrCisrCXJldHVybiAtRU5YSU87CisrfQorKworK3N0YXRpYyBpbnQgZHJpdmV0ZW1wX2dldF9zY3R0ZW1wKHN0cnVjdCBkcml2ZXRlbXBfZGF0YSAqc3QsIHUzMiBhdHRyLCBsb25nICp2YWwpCisreworKwl1OCAqYnVmID0gc3QtPnNtYXJ0ZGF0YTsKKysJaW50IGVycjsKKysKKysJZXJyID0gZHJpdmV0ZW1wX2F0YV9jb21tYW5kKHN0LCBTTUFSVF9SRUFEX0xPRywgU0NUX1NUQVRVU19SRVFfQUREUik7CisrCWlmIChlcnIpCisrCQlyZXR1cm4gZXJyOworKwlzd2l0Y2ggKGF0dHIpIHsKKysJY2FzZSBod21vbl90ZW1wX2lucHV0OgorKwkJKnZhbCA9IHRlbXBfZnJvbV9zY3QoYnVmW1NDVF9TVEFUVVNfVEVNUF0pOworKwkJYnJlYWs7CisrCWNhc2UgaHdtb25fdGVtcF9sb3dlc3Q6CisrCQkqdmFsID0gdGVtcF9mcm9tX3NjdChidWZbU0NUX1NUQVRVU19URU1QX0xPV0VTVF0pOworKwkJYnJlYWs7CisrCWNhc2UgaHdtb25fdGVtcF9oaWdoZXN0OgorKwkJKnZhbCA9IHRlbXBfZnJvbV9zY3QoYnVmW1NDVF9TVEFUVVNfVEVNUF9ISUdIRVNUXSk7CisrCQlicmVhazsKKysJZGVmYXVsdDoKKysJCWVyciA9IC1FSU5WQUw7CisrCQlicmVhazsKKysJfQorKwlyZXR1cm4gZXJyOworK30KKysKKytzdGF0aWMgaW50IGRyaXZldGVtcF9pZGVudGlmeV9zYXRhKHN0cnVjdCBkcml2ZXRlbXBfZGF0YSAqc3QpCisreworKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSBzdC0+c2RldjsKKysJdTggKmJ1ZiA9IHN0LT5zbWFydGRhdGE7CisrCXN0cnVjdCBzY3NpX3ZwZCAqdnBkOworKwlib29sIGlzX2F0YSwgaXNfc2F0YTsKKysJYm9vbCBoYXZlX3NjdF9kYXRhX3RhYmxlOworKwlib29sIGhhdmVfc2N0X3RlbXA7CisrCWJvb2wgaGF2ZV9zbWFydDsKKysJYm9vbCBoYXZlX3NjdDsKKysJdTE2ICphdGFfaWQ7CisrCXUxNiB2ZXJzaW9uOworKwlsb25nIHRlbXA7CisrCWludCBlcnI7CisrCisrCS8qIFNDU0ktQVRBIFRyYW5zbGF0aW9uIHByZXNlbnQ/ICovCisrCXJjdV9yZWFkX2xvY2soKTsKKysJdnBkID0gcmN1X2RlcmVmZXJlbmNlKHNkZXYtPnZwZF9wZzg5KTsKKysKKysJLyoKKysJICogVmVyaWZ5IHRoYXQgQVRBIElERU5USUZZIERFVklDRSBkYXRhIGlzIGluY2x1ZGVkIGluIEFUQSBJbmZvcm1hdGlvbgorKwkgKiBWUEQgYW5kIHRoYXQgdGhlIGRyaXZlIGltcGxlbWVudHMgdGhlIFNBVEEgcHJvdG9jb2wuCisrCSAqLworKwlpZiAoIXZwZCB8fCB2cGQtPmxlbiA8IDU3MiB8fCB2cGQtPmRhdGFbNTZdICE9IEFUQV9DTURfSURfQVRBIHx8CisrCSAgICB2cGQtPmRhdGFbMzZdICE9IDB4MzQpIHsKKysJCXJjdV9yZWFkX3VubG9jaygpOworKwkJcmV0dXJuIC1FTk9ERVY7CisrCX0KKysJYXRhX2lkID0gKHUxNiAqKSZ2cGQtPmRhdGFbNjBdOworKwlpc19hdGEgPSBhdGFfaWRfaXNfYXRhKGF0YV9pZCk7CisrCWlzX3NhdGEgPSBhdGFfaWRfaXNfc2F0YShhdGFfaWQpOworKwloYXZlX3NjdCA9IGF0YV9pZF9zY3Rfc3VwcG9ydGVkKGF0YV9pZCk7CisrCWhhdmVfc2N0X2RhdGFfdGFibGUgPSBhdGFfaWRfc2N0X2RhdGFfdGFibGVzKGF0YV9pZCk7CisrCWhhdmVfc21hcnQgPSBhdGFfaWRfc21hcnRfc3VwcG9ydGVkKGF0YV9pZCkgJiYKKysJCQkJYXRhX2lkX3NtYXJ0X2VuYWJsZWQoYXRhX2lkKTsKKysKKysJcmN1X3JlYWRfdW5sb2NrKCk7CisrCisrCS8qIGJhaWwgb3V0IGlmIHRoaXMgaXMgbm90IGEgU0FUQSBkZXZpY2UgKi8KKysJaWYgKCFpc19hdGEgfHwgIWlzX3NhdGEpCisrCQlyZXR1cm4gLUVOT0RFVjsKKysJaWYgKCFoYXZlX3NjdCkKKysJCWdvdG8gc2tpcF9zY3Q7CisrCisrCWVyciA9IGRyaXZldGVtcF9hdGFfY29tbWFuZChzdCwgU01BUlRfUkVBRF9MT0csIFNDVF9TVEFUVVNfUkVRX0FERFIpOworKwlpZiAoZXJyKQorKwkJZ290byBza2lwX3NjdDsKKysKKysJdmVyc2lvbiA9IChidWZbU0NUX1NUQVRVU19WRVJTSU9OX0hJR0hdIDw8IDgpIHwKKysJCSAgYnVmW1NDVF9TVEFUVVNfVkVSU0lPTl9MT1ddOworKwlpZiAodmVyc2lvbiAhPSAyICYmIHZlcnNpb24gIT0gMykKKysJCWdvdG8gc2tpcF9zY3Q7CisrCisrCWhhdmVfc2N0X3RlbXAgPSB0ZW1wX2lzX3ZhbGlkKGJ1ZltTQ1RfU1RBVFVTX1RFTVBdKTsKKysJaWYgKCFoYXZlX3NjdF90ZW1wKQorKwkJZ290byBza2lwX3NjdDsKKysKKysJc3QtPmhhdmVfdGVtcF9sb3dlc3QgPSB0ZW1wX2lzX3ZhbGlkKGJ1ZltTQ1RfU1RBVFVTX1RFTVBfTE9XRVNUXSk7CisrCXN0LT5oYXZlX3RlbXBfaGlnaGVzdCA9IHRlbXBfaXNfdmFsaWQoYnVmW1NDVF9TVEFUVVNfVEVNUF9ISUdIRVNUXSk7CisrCisrCWlmICghaGF2ZV9zY3RfZGF0YV90YWJsZSkKKysJCWdvdG8gc2tpcF9zY3Q7CisrCisrCS8qIFJlcXVlc3QgYW5kIHJlYWQgdGVtcGVyYXR1cmUgaGlzdG9yeSB0YWJsZSAqLworKwltZW1zZXQoYnVmLCAnXDAnLCBzaXplb2Yoc3QtPnNtYXJ0ZGF0YSkpOworKwlidWZbMF0gPSA1OwkvKiBkYXRhIHRhYmxlIGNvbW1hbmQgKi8KKysJYnVmWzJdID0gMTsJLyogcmVhZCB0YWJsZSAqLworKwlidWZbNF0gPSAyOwkvKiB0ZW1wZXJhdHVyZSBoaXN0b3J5IHRhYmxlICovCisrCisrCWVyciA9IGRyaXZldGVtcF9hdGFfY29tbWFuZChzdCwgU01BUlRfV1JJVEVfTE9HLCBTQ1RfU1RBVFVTX1JFUV9BRERSKTsKKysJaWYgKGVycikKKysJCWdvdG8gc2tpcF9zY3RfZGF0YTsKKysKKysJZXJyID0gZHJpdmV0ZW1wX2F0YV9jb21tYW5kKHN0LCBTTUFSVF9SRUFEX0xPRywgU0NUX1JFQURfTE9HX0FERFIpOworKwlpZiAoZXJyKQorKwkJZ290byBza2lwX3NjdF9kYXRhOworKworKwkvKgorKwkgKiBUZW1wZXJhdHVyZSBsaW1pdHMgcGVyIEFUIEF0dGFjaG1lbnQgOCAtCisrCSAqIEFUQS9BVEFQSSBDb21tYW5kIFNldCAoQVRBOC1BQ1MpCisrCSAqLworKwlzdC0+aGF2ZV90ZW1wX21heCA9IHRlbXBfaXNfdmFsaWQoYnVmWzZdKTsKKysJc3QtPmhhdmVfdGVtcF9jcml0ID0gdGVtcF9pc192YWxpZChidWZbN10pOworKwlzdC0+aGF2ZV90ZW1wX21pbiA9IHRlbXBfaXNfdmFsaWQoYnVmWzhdKTsKKysJc3QtPmhhdmVfdGVtcF9sY3JpdCA9IHRlbXBfaXNfdmFsaWQoYnVmWzldKTsKKysKKysJc3QtPnRlbXBfbWF4ID0gdGVtcF9mcm9tX3NjdChidWZbNl0pOworKwlzdC0+dGVtcF9jcml0ID0gdGVtcF9mcm9tX3NjdChidWZbN10pOworKwlzdC0+dGVtcF9taW4gPSB0ZW1wX2Zyb21fc2N0KGJ1Zls4XSk7CisrCXN0LT50ZW1wX2xjcml0ID0gdGVtcF9mcm9tX3NjdChidWZbOV0pOworKworK3NraXBfc2N0X2RhdGE6CisrCWlmIChoYXZlX3NjdF90ZW1wKSB7CisrCQlzdC0+Z2V0X3RlbXAgPSBkcml2ZXRlbXBfZ2V0X3NjdHRlbXA7CisrCQlyZXR1cm4gMDsKKysJfQorK3NraXBfc2N0OgorKwlpZiAoIWhhdmVfc21hcnQpCisrCQlyZXR1cm4gLUVOT0RFVjsKKysJc3QtPmdldF90ZW1wID0gZHJpdmV0ZW1wX2dldF9zbWFydHRlbXA7CisrCXJldHVybiBkcml2ZXRlbXBfZ2V0X3NtYXJ0dGVtcChzdCwgaHdtb25fdGVtcF9pbnB1dCwgJnRlbXApOworK30KKysKKytzdGF0aWMgaW50IGRyaXZldGVtcF9pZGVudGlmeShzdHJ1Y3QgZHJpdmV0ZW1wX2RhdGEgKnN0KQorK3sKKysJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gc3QtPnNkZXY7CisrCisrCS8qIEJhaWwgb3V0IGltbWVkaWF0ZWx5IGlmIHRoZXJlIGlzIG5vIGlucXVpcnkgZGF0YSAqLworKwlpZiAoIXNkZXYtPmlucXVpcnkgfHwgc2Rldi0+aW5xdWlyeV9sZW4gPCAxNikKKysJCXJldHVybiAtRU5PREVWOworKworKwkvKiBEaXNrIGRldmljZT8gKi8KKysJaWYgKHNkZXYtPnR5cGUgIT0gVFlQRV9ESVNLICYmIHNkZXYtPnR5cGUgIT0gVFlQRV9aQkMpCisrCQlyZXR1cm4gLUVOT0RFVjsKKysKKysJcmV0dXJuIGRyaXZldGVtcF9pZGVudGlmeV9zYXRhKHN0KTsKKyt9CisrCisrc3RhdGljIGludCBkcml2ZXRlbXBfcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXYsIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsCisrCQkJIHUzMiBhdHRyLCBpbnQgY2hhbm5lbCwgbG9uZyAqdmFsKQorK3sKKysJc3RydWN0IGRyaXZldGVtcF9kYXRhICpzdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworKwlpbnQgZXJyID0gMDsKKysKKysJaWYgKHR5cGUgIT0gaHdtb25fdGVtcCkKKysJCXJldHVybiAtRUlOVkFMOworKworKwlzd2l0Y2ggKGF0dHIpIHsKKysJY2FzZSBod21vbl90ZW1wX2lucHV0OgorKwljYXNlIGh3bW9uX3RlbXBfbG93ZXN0OgorKwljYXNlIGh3bW9uX3RlbXBfaGlnaGVzdDoKKysJCW11dGV4X2xvY2soJnN0LT5sb2NrKTsKKysJCWVyciA9IHN0LT5nZXRfdGVtcChzdCwgYXR0ciwgdmFsKTsKKysJCW11dGV4X3VubG9jaygmc3QtPmxvY2spOworKwkJYnJlYWs7CisrCWNhc2UgaHdtb25fdGVtcF9sY3JpdDoKKysJCSp2YWwgPSBzdC0+dGVtcF9sY3JpdDsKKysJCWJyZWFrOworKwljYXNlIGh3bW9uX3RlbXBfbWluOgorKwkJKnZhbCA9IHN0LT50ZW1wX21pbjsKKysJCWJyZWFrOworKwljYXNlIGh3bW9uX3RlbXBfbWF4OgorKwkJKnZhbCA9IHN0LT50ZW1wX21heDsKKysJCWJyZWFrOworKwljYXNlIGh3bW9uX3RlbXBfY3JpdDoKKysJCSp2YWwgPSBzdC0+dGVtcF9jcml0OworKwkJYnJlYWs7CisrCWRlZmF1bHQ6CisrCQllcnIgPSAtRUlOVkFMOworKwkJYnJlYWs7CisrCX0KKysJcmV0dXJuIGVycjsKKyt9CisrCisrc3RhdGljIHVtb2RlX3QgZHJpdmV0ZW1wX2lzX3Zpc2libGUoY29uc3Qgdm9pZCAqZGF0YSwKKysJCQkJICAgZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSwKKysJCQkJICAgdTMyIGF0dHIsIGludCBjaGFubmVsKQorK3sKKysJY29uc3Qgc3RydWN0IGRyaXZldGVtcF9kYXRhICpzdCA9IGRhdGE7CisrCisrCXN3aXRjaCAodHlwZSkgeworKwljYXNlIGh3bW9uX3RlbXA6CisrCQlzd2l0Y2ggKGF0dHIpIHsKKysJCWNhc2UgaHdtb25fdGVtcF9pbnB1dDoKKysJCQlyZXR1cm4gMDQ0NDsKKysJCWNhc2UgaHdtb25fdGVtcF9sb3dlc3Q6CisrCQkJaWYgKHN0LT5oYXZlX3RlbXBfbG93ZXN0KQorKwkJCQlyZXR1cm4gMDQ0NDsKKysJCQlicmVhazsKKysJCWNhc2UgaHdtb25fdGVtcF9oaWdoZXN0OgorKwkJCWlmIChzdC0+aGF2ZV90ZW1wX2hpZ2hlc3QpCisrCQkJCXJldHVybiAwNDQ0OworKwkJCWJyZWFrOworKwkJY2FzZSBod21vbl90ZW1wX21pbjoKKysJCQlpZiAoc3QtPmhhdmVfdGVtcF9taW4pCisrCQkJCXJldHVybiAwNDQ0OworKwkJCWJyZWFrOworKwkJY2FzZSBod21vbl90ZW1wX21heDoKKysJCQlpZiAoc3QtPmhhdmVfdGVtcF9tYXgpCisrCQkJCXJldHVybiAwNDQ0OworKwkJCWJyZWFrOworKwkJY2FzZSBod21vbl90ZW1wX2xjcml0OgorKwkJCWlmIChzdC0+aGF2ZV90ZW1wX2xjcml0KQorKwkJCQlyZXR1cm4gMDQ0NDsKKysJCQlicmVhazsKKysJCWNhc2UgaHdtb25fdGVtcF9jcml0OgorKwkJCWlmIChzdC0+aGF2ZV90ZW1wX2NyaXQpCisrCQkJCXJldHVybiAwNDQ0OworKwkJCWJyZWFrOworKwkJZGVmYXVsdDoKKysJCQlicmVhazsKKysJCX0KKysJCWJyZWFrOworKwlkZWZhdWx0OgorKwkJYnJlYWs7CisrCX0KKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fY2hhbm5lbF9pbmZvICpkcml2ZXRlbXBfaW5mb1tdID0geworKwlIV01PTl9DSEFOTkVMX0lORk8oY2hpcCwKKysJCQkgICBIV01PTl9DX1JFR0lTVEVSX1RaKSwKKysJSFdNT05fQ0hBTk5FTF9JTkZPKHRlbXAsIEhXTU9OX1RfSU5QVVQgfAorKwkJCSAgIEhXTU9OX1RfTE9XRVNUIHwgSFdNT05fVF9ISUdIRVNUIHwKKysJCQkgICBIV01PTl9UX01JTiB8IEhXTU9OX1RfTUFYIHwKKysJCQkgICBIV01PTl9UX0xDUklUIHwgSFdNT05fVF9DUklUKSwKKysJTlVMTAorK307CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9vcHMgZHJpdmV0ZW1wX29wcyA9IHsKKysJLmlzX3Zpc2libGUgPSBkcml2ZXRlbXBfaXNfdmlzaWJsZSwKKysJLnJlYWQgPSBkcml2ZXRlbXBfcmVhZCwKKyt9OworKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fY2hpcF9pbmZvIGRyaXZldGVtcF9jaGlwX2luZm8gPSB7CisrCS5vcHMgPSAmZHJpdmV0ZW1wX29wcywKKysJLmluZm8gPSBkcml2ZXRlbXBfaW5mbywKKyt9OworKworKy8qCisrICogVGhlIGRldmljZSBhcmd1bWVudCBwb2ludHMgdG8gc2Rldi0+c2Rldl9kZXYuIEl0cyBwYXJlbnQgaXMKKysgKiBzZGV2LT5zZGV2X2dlbmRldiwgd2hpY2ggd2UgY2FuIHVzZSB0byBnZXQgdGhlIHNjc2lfZGV2aWNlIHBvaW50ZXIuCisrICovCisrc3RhdGljIGludCBkcml2ZXRlbXBfYWRkKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGNsYXNzX2ludGVyZmFjZSAqaW50ZikKKyt7CisrCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHRvX3Njc2lfZGV2aWNlKGRldi0+cGFyZW50KTsKKysJc3RydWN0IGRyaXZldGVtcF9kYXRhICpzdDsKKysJaW50IGVycjsKKysKKysJc3QgPSBremFsbG9jKHNpemVvZigqc3QpLCBHRlBfS0VSTkVMKTsKKysJaWYgKCFzdCkKKysJCXJldHVybiAtRU5PTUVNOworKworKwlzdC0+c2RldiA9IHNkZXY7CisrCXN0LT5kZXYgPSBkZXY7CisrCW11dGV4X2luaXQoJnN0LT5sb2NrKTsKKysKKysJaWYgKGRyaXZldGVtcF9pZGVudGlmeShzdCkpIHsKKysJCWVyciA9IC1FTk9ERVY7CisrCQlnb3RvIGFib3J0OworKwl9CisrCisrCXN0LT5od2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3Rlcl93aXRoX2luZm8oZGV2LT5wYXJlbnQsICJkcml2ZXRlbXAiLAorKwkJCQkJCSAgICBzdCwgJmRyaXZldGVtcF9jaGlwX2luZm8sCisrCQkJCQkJICAgIE5VTEwpOworKwlpZiAoSVNfRVJSKHN0LT5od2RldikpIHsKKysJCWVyciA9IFBUUl9FUlIoc3QtPmh3ZGV2KTsKKysJCWdvdG8gYWJvcnQ7CisrCX0KKysKKysJbGlzdF9hZGQoJnN0LT5saXN0LCAmZHJpdmV0ZW1wX2Rldmxpc3QpOworKwlyZXR1cm4gMDsKKysKKythYm9ydDoKKysJa2ZyZWUoc3QpOworKwlyZXR1cm4gZXJyOworK30KKysKKytzdGF0aWMgdm9pZCBkcml2ZXRlbXBfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGNsYXNzX2ludGVyZmFjZSAqaW50ZikKKyt7CisrCXN0cnVjdCBkcml2ZXRlbXBfZGF0YSAqc3QsICp0bXA7CisrCisrCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdCwgdG1wLCAmZHJpdmV0ZW1wX2Rldmxpc3QsIGxpc3QpIHsKKysJCWlmIChzdC0+ZGV2ID09IGRldikgeworKwkJCWxpc3RfZGVsKCZzdC0+bGlzdCk7CisrCQkJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoc3QtPmh3ZGV2KTsKKysJCQlrZnJlZShzdCk7CisrCQkJYnJlYWs7CisrCQl9CisrCX0KKyt9CisrCisrc3RhdGljIHN0cnVjdCBjbGFzc19pbnRlcmZhY2UgZHJpdmV0ZW1wX2ludGVyZmFjZSA9IHsKKysJLmFkZF9kZXYgPSBkcml2ZXRlbXBfYWRkLAorKwkucmVtb3ZlX2RldiA9IGRyaXZldGVtcF9yZW1vdmUsCisrfTsKKysKKytzdGF0aWMgaW50IF9faW5pdCBkcml2ZXRlbXBfaW5pdCh2b2lkKQorK3sKKysJcmV0dXJuIHNjc2lfcmVnaXN0ZXJfaW50ZXJmYWNlKCZkcml2ZXRlbXBfaW50ZXJmYWNlKTsKKyt9CisrCisrc3RhdGljIHZvaWQgX19leGl0IGRyaXZldGVtcF9leGl0KHZvaWQpCisreworKwlzY3NpX3VucmVnaXN0ZXJfaW50ZXJmYWNlKCZkcml2ZXRlbXBfaW50ZXJmYWNlKTsKKyt9CisrCisrbW9kdWxlX2luaXQoZHJpdmV0ZW1wX2luaXQpOworK21vZHVsZV9leGl0KGRyaXZldGVtcF9leGl0KTsKKysKKytNT0RVTEVfQVVUSE9SKCJHdWVudGVyIFJvZWNrIDxsaW51c0Byb2Vjay11cy5uZXQ+Iik7CisrTU9EVUxFX0RFU0NSSVBUSU9OKCJIYXJkIGRyaXZlIHRlbXBlcmF0dXJlIG1vbml0b3IiKTsKKytNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvODAxLXY1LjYtbGVkcy1wb3B1bGF0ZS10aGUtZGV2aWNlLXMtb2Zfbm9kZS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC84MDEtdjUuNi1sZWRzLXBvcHVsYXRlLXRoZS1kZXZpY2Utcy1vZl9ub2RlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjM2I1OGMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvODAxLXY1LjYtbGVkcy1wb3B1bGF0ZS10aGUtZGV2aWNlLXMtb2Zfbm9kZS5wYXRjaApAQCAtMCwwICsxLDM2IEBACitGcm9tIDdhMzQ5ZThjNTM1ZDczMjdiZjgwNzEwMzIzYzcyNWRmNDcxNDliOGQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKZWFuLUphY3F1ZXMgSGlibG90IDxqamhpYmxvdEB0aS5jb20+CitEYXRlOiBTdW4sIDUgSmFuIDIwMjAgMjM6MzE6MTQgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gbGVkczogcG9wdWxhdGUgdGhlIGRldmljZSdzIG9mX25vZGUKKworSWYgaW5pdGlhbGl6YXRpb24gZGF0YSBpcyBhdmFpbGFibGUgYW5kIGl0cyBmd25vZGUgaXMgYWN0dWFsbHkgYQorb2Zfbm9kZSwgc3RvcmUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgbGVkIGRldmljZSdzIHN0cnVjdHVyZS4gVGhpcword2lsbCBhbGxvdyB0aGUgZGV2aWNlIHRvIHVzZSBvciBwcm92aWRlIE9GLWJhc2VkIEFQSSBzdWNoIChkZXZtX3h4eCkuCisKK1NpZ25lZC1vZmYtYnk6IEplYW4tSmFjcXVlcyBIaWJsb3QgPGpqaGlibG90QHRpLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFBhdmVsIE1hY2hlayA8cGF2ZWxAdWN3LmN6PgorW2JhY2twb3J0IHRvIDUuNF0KKy0tLQorCistLS0gYS9kcml2ZXJzL2xlZHMvbGVkLWNsYXNzLmMKKysrKyBiL2RyaXZlcnMvbGVkcy9sZWQtY2xhc3MuYworQEAgLTE5LDYgKzE5LDcgQEAKKyAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyAjaW5jbHVkZSA8dWFwaS9saW51eC91bGVkcy5oPgorKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorICNpbmNsdWRlICJsZWRzLmgiCisgCisgc3RhdGljIHN0cnVjdCBjbGFzcyAqbGVkc19jbGFzczsKK0BAIC0yNzcsOCArMjc4LDEwIEBAIGludCBsZWRfY2xhc3NkZXZfcmVnaXN0ZXJfZXh0KHN0cnVjdCBkZXYKKyAJCW11dGV4X3VubG9jaygmbGVkX2NkZXYtPmxlZF9hY2Nlc3MpOworIAkJcmV0dXJuIFBUUl9FUlIobGVkX2NkZXYtPmRldik7CisgCX0KKy0JaWYgKGluaXRfZGF0YSAmJiBpbml0X2RhdGEtPmZ3bm9kZSkKKysJaWYgKGluaXRfZGF0YSAmJiBpbml0X2RhdGEtPmZ3bm9kZSkgeworIAkJbGVkX2NkZXYtPmRldi0+Zndub2RlID0gaW5pdF9kYXRhLT5md25vZGU7CisrCQlsZWRfY2Rldi0+ZGV2LT5vZl9ub2RlID0gdG9fb2Zfbm9kZShpbml0X2RhdGEtPmZ3bm9kZSk7CisrCX0KKyAKKyAJaWYgKHJldCkKKyAJCWRldl93YXJuKHBhcmVudCwgIkxlZCAlcyByZW5hbWVkIHRvICVzIGR1ZSB0byBuYW1lIGNvbGxpc2lvbiIsCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvODAzLXY1LjgtaTJjLXB4YS11c2Utb2ZmaWNpYWwtYWRkcmVzcy1ieXRlLWhlbHBlci5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC84MDMtdjUuOC1pMmMtcHhhLXVzZS1vZmZpY2lhbC1hZGRyZXNzLWJ5dGUtaGVscGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MzdiNTIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvODAzLXY1LjgtaTJjLXB4YS11c2Utb2ZmaWNpYWwtYWRkcmVzcy1ieXRlLWhlbHBlci5wYXRjaApAQCAtMCwwICsxLDU5IEBACitGcm9tOiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorQmNjOiBsaW51eEBtYWlsLmFybWxpbnV4Lm9yZy51aworQ2M6IGxpbnV4LWkyY0B2Z2VyLmtlcm5lbC5vcmcKK1N1YmplY3Q6IFtQQVRDSCAwMS8xN10gaTJjOiBweGE6IHVzZSBvZmZpY2lhbCBhZGRyZXNzIGJ5dGUgaGVscGVyCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorCitpMmMtcHhhIHdhcyBjcmVhdGVkIGJlZm9yZSBpMmNfOGJpdF9hZGRyX2Zyb21fbXNnKCkgd2FzIGltcGxlbWVudGVkLAorYW5kIHVzZWQgaXRzIG93biBpMmNfcHhhX2FkZHJfYnl0ZSgpIHdoaWNoIGlzIGZ1bmN0aW9uYWxseSB0aGUgc2FtZS4KK1NhZGx5LCBpdCB3YXMgbmV2ZXIgdXBkYXRlZCB0byB1c2UgdGhpcyBuZXcgaGVscGVyLiBTd2l0Y2ggaXQgb3Zlci4KKworU2lnbmVkLW9mZi1ieTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KKy0tLQorIGRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMgfCAyMSArKysrKysrLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYworKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYworQEAgLTY3NCwxNiArNjc0LDYgQEAgc3RhdGljIHZvaWQgaTJjX3B4YV9zbGF2ZV9zdG9wKHN0cnVjdCBweAorICAqIFBYQSBJMkMgTWFzdGVyIG1vZGUKKyAgKi8KKyAKKy1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpMmNfcHhhX2FkZHJfYnl0ZShzdHJ1Y3QgaTJjX21zZyAqbXNnKQorLXsKKy0JdW5zaWduZWQgaW50IGFkZHIgPSAobXNnLT5hZGRyICYgMHg3ZikgPDwgMTsKKy0KKy0JaWYgKG1zZy0+ZmxhZ3MgJiBJMkNfTV9SRCkKKy0JCWFkZHIgfD0gMTsKKy0KKy0JcmV0dXJuIGFkZHI7CistfQorLQorIHN0YXRpYyBpbmxpbmUgdm9pZCBpMmNfcHhhX3N0YXJ0X21lc3NhZ2Uoc3RydWN0IHB4YV9pMmMgKmkyYykKKyB7CisgCXUzMiBpY3I7CitAQCAtNjkxLDggKzY4MSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpMmNfcHhhX3N0YXJ0X21lc3NhZ2UKKyAJLyoKKyAJICogU3RlcCAxOiB0YXJnZXQgc2xhdmUgYWRkcmVzcyBpbnRvIElEQlIKKyAJICovCistCXdyaXRlbChpMmNfcHhhX2FkZHJfYnl0ZShpMmMtPm1zZyksIF9JREJSKGkyYykpOworLQlpMmMtPnJlcV9zbGF2ZV9hZGRyID0gaTJjX3B4YV9hZGRyX2J5dGUoaTJjLT5tc2cpOworKwlpMmMtPnJlcV9zbGF2ZV9hZGRyID0gaTJjXzhiaXRfYWRkcl9mcm9tX21zZyhpMmMtPm1zZyk7CisrCXdyaXRlbChpMmMtPnJlcV9zbGF2ZV9hZGRyLCBfSURCUihpMmMpKTsKKyAKKyAJLyoKKyAJICogU3RlcCAyOiBpbml0aWF0ZSB0aGUgd3JpdGUuCitAQCAtMTAwMyw4ICs5OTMsOCBAQCBzdGF0aWMgdm9pZCBpMmNfcHhhX2lycV90eGVtcHR5KHN0cnVjdCBwCisgCQkvKgorIAkJICogV3JpdGUgdGhlIG5leHQgYWRkcmVzcy4KKyAJCSAqLworLQkJd3JpdGVsKGkyY19weGFfYWRkcl9ieXRlKGkyYy0+bXNnKSwgX0lEQlIoaTJjKSk7CistCQlpMmMtPnJlcV9zbGF2ZV9hZGRyID0gaTJjX3B4YV9hZGRyX2J5dGUoaTJjLT5tc2cpOworKwkJaTJjLT5yZXFfc2xhdmVfYWRkciA9IGkyY184Yml0X2FkZHJfZnJvbV9tc2coaTJjLT5tc2cpOworKwkJd3JpdGVsKGkyYy0+cmVxX3NsYXZlX2FkZHIsIF9JREJSKGkyYykpOworIAorIAkJLyoKKyAJCSAqIEFuZCB0cmlnZ2VyIGEgcmVwZWF0ZWQgc3RhcnQsIGFuZCBzZW5kIHRoZSBieXRlLgpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzgwNC12NS44LWkyYy1weGEtcmVtb3ZlLXVubmVlZGVkLWluY2x1ZGVzLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzgwNC12NS44LWkyYy1weGEtcmVtb3ZlLXVubmVlZGVkLWluY2x1ZGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhOTExMzIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvODA0LXY1LjgtaTJjLXB4YS1yZW1vdmUtdW5uZWVkZWQtaW5jbHVkZXMucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorRnJvbTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KK0JjYzogbGludXhAbWFpbC5hcm1saW51eC5vcmcudWsKK0NjOiBsaW51eC1pMmNAdmdlci5rZXJuZWwub3JnCitTdWJqZWN0OiBbUEFUQ0ggMDIvMTddIGkyYzogcHhhOiByZW1vdmUgdW5uZWVkZWQgaW5jbHVkZXMKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmUKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCisKK2kyYy1weGEgZG9lcyBub3QgbmVlZCBsaW51eC9zY2hlZC5oIG5vciBsaW51eC90aW1lLmggaW5jbHVkZXMsIHNvCityZW1vdmUgdGhlc2UuCisKK1NpZ25lZC1vZmYtYnk6IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CistLS0KKyBkcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jIHwgNCAtLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKKysrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKK0BAIC0yMCw4ICsyMCw2IEBACisgI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+CistI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisgI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisgI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisgI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorQEAgLTM1LDggKzMzLDYgQEAKKyAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9pMmMtcHhhLmg+CisgCistI2luY2x1ZGUgPGFzbS9pcnEuaD4KKy0KKyBzdHJ1Y3QgcHhhX3JlZ19sYXlvdXQgeworIAl1MzIgaWJtcjsKKyAJdTMyIGlkYnI7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvODA1LXY1LjgtaTJjLXB4YS1yZS1hcnJhbmdlLWluY2x1ZGVzLXRvLWJlLWluLWFscGhhYmV0aWNhbC1vci5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC84MDUtdjUuOC1pMmMtcHhhLXJlLWFycmFuZ2UtaW5jbHVkZXMtdG8tYmUtaW4tYWxwaGFiZXRpY2FsLW9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNmRjN2YKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvODA1LXY1LjgtaTJjLXB4YS1yZS1hcnJhbmdlLWluY2x1ZGVzLXRvLWJlLWluLWFscGhhYmV0aWNhbC1vci5wYXRjaApAQCAtMCwwICsxLDUyIEBACitGcm9tOiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorQmNjOiBsaW51eEBtYWlsLmFybWxpbnV4Lm9yZy51aworQ2M6IGxpbnV4LWkyY0B2Z2VyLmtlcm5lbC5vcmcKK1N1YmplY3Q6IFtQQVRDSCAwMy8xN10gaTJjOiBweGE6IHJlLWFycmFuZ2UgaW5jbHVkZXMgdG8gYmUgaW4gYWxwaGFiZXRpY2FsCisgb3JkZXIKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmUKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCisKK0FycmFuZ2UgdGhlIGluY2x1ZGVzIHRvIGJlIGluIGFscGhhYmV0aWNhbCBvcmRlciB0byBoZWxwIGF2b2lkCitkdXBsaWNhdGVkIGluY2x1ZGVzLgorCitTaWduZWQtb2ZmLWJ5OiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorLS0tCisgZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYyB8IDE4ICsrKysrKysrKy0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKKysrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKK0BAIC0xNiwyMiArMTYsMjIgQEAKKyAgKiAgICBEZWMgMjAwNDogQWRkZWQgc3VwcG9ydCBmb3IgUFhBMjd4IGFuZCBzbGF2ZSBkZXZpY2UgcHJvYmluZyBbTGlhbSBHaXJkd29vZF0KKyAgKiAgICBGZWIgMjAwNTogUmV3b3JrIHNsYXZlIG1vZGUgaGFuZGxpbmcgW1JNS10KKyAgKi8KKy0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+CistI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKy0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgorKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKysjaW5jbHVkZSA8bGludXgvZXJyLmg+CisgI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CistI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyAjaW5jbHVkZSA8bGludXgvaTJjLXB4YS5oPgorKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisrI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorKyNpbmNsdWRlIDxsaW51eC9pby5oPgorKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKysjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisgI2luY2x1ZGUgPGxpbnV4L29mLmg+CisgI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKy0jaW5jbHVkZSA8bGludXgvZXJyLmg+CistI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CistI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisgI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvaTJjLXB4YS5oPgorKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisgCisgc3RydWN0IHB4YV9yZWdfbGF5b3V0IHsKKyAJdTMyIGlibXI7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvODA2LXY1LjgtaTJjLXB4YS1yZS1hcnJhbmdlLWZ1bmN0aW9ucy10by1mbG93LWJldHRlci5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC84MDYtdjUuOC1pMmMtcHhhLXJlLWFycmFuZ2UtZnVuY3Rpb25zLXRvLWZsb3ctYmV0dGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMDlmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvODA2LXY1LjgtaTJjLXB4YS1yZS1hcnJhbmdlLWZ1bmN0aW9ucy10by1mbG93LWJldHRlci5wYXRjaApAQCAtMCwwICsxLDM4MCBAQAorRnJvbTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KK0JjYzogbGludXhAbWFpbC5hcm1saW51eC5vcmcudWsKK0NjOiBsaW51eC1pMmNAdmdlci5rZXJuZWwub3JnCitTdWJqZWN0OiBbUEFUQ0ggMDQvMTddIGkyYzogcHhhOiByZS1hcnJhbmdlIGZ1bmN0aW9ucyB0byBmbG93IGJldHRlcgorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZQorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKKworUmUtYXJyYW5nZSB0aGUgUFhBIEkyQyBjb2RlIHRvIGF2b2lkIGZvcndhcmQgZGVjbGFyYXRpb25zLCBhbmQga2VlcAorc2ltaWxhciBmdW5jdGlvbmFsaXR5IChlLmcuIHRoZSBub24tSVJRIG1vZGUgc3VwcG9ydCkgdG9nZXRoZXIuIFRoaXMKK2ltcHJvdmVzIGNvZGUgcmVhZGFiaWxpdHkuCisKK1NpZ25lZC1vZmYtYnk6IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CistLS0KKyBkcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jIHwgMzI1ICsrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDE2MiBpbnNlcnRpb25zKCspLCAxNjMgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKKysrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKK0BAIC0zMjYsNyArMzI2LDYgQEAgc3RhdGljIHZvaWQgaTJjX3B4YV9zY3JlYW1fYmx1ZV9tdXJkZXIocworICNlbmRpZiAvKiBpZmRlZiBERUJVRyAvIGVsc2UgKi8KKyAKKyBzdGF0aWMgdm9pZCBpMmNfcHhhX21hc3Rlcl9jb21wbGV0ZShzdHJ1Y3QgcHhhX2kyYyAqaTJjLCBpbnQgcmV0KTsKKy1zdGF0aWMgaXJxcmV0dXJuX3QgaTJjX3B4YV9oYW5kbGVyKGludCB0aGlzX2lycSwgdm9pZCAqZGV2X2lkKTsKKyAKKyBzdGF0aWMgaW5saW5lIGludCBpMmNfcHhhX2lzX3NsYXZlbW9kZShzdHJ1Y3QgcHhhX2kyYyAqaTJjKQorIHsKK0BAIC02OTcsMzQgKzY5Niw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBpMmNfcHhhX3N0b3BfbWVzc2FnZSgKKyAJd3JpdGVsKGljciwgX0lDUihpMmMpKTsKKyB9CisgCistc3RhdGljIGludCBpMmNfcHhhX3Bpb19zZXRfbWFzdGVyKHN0cnVjdCBweGFfaTJjICppMmMpCisteworLQkvKiBtYWtlIHRpbWVvdXQgdGhlIHNhbWUgYXMgZm9yIGludGVycnVwdCBiYXNlZCBmdW5jdGlvbnMgKi8KKy0JbG9uZyB0aW1lb3V0ID0gMiAqIERFRl9USU1FT1VUOworLQorLQkvKgorLQkgKiBXYWl0IGZvciB0aGUgYnVzIHRvIGJlY29tZSBmcmVlLgorLQkgKi8KKy0Jd2hpbGUgKHRpbWVvdXQtLSAmJiByZWFkbChfSVNSKGkyYykpICYgKElTUl9JQkIgfCBJU1JfVUIpKSB7CistCQl1ZGVsYXkoMTAwMCk7CistCQlzaG93X3N0YXRlKGkyYyk7CistCX0KKy0KKy0JaWYgKHRpbWVvdXQgPCAwKSB7CistCQlzaG93X3N0YXRlKGkyYyk7CistCQlkZXZfZXJyKCZpMmMtPmFkYXAuZGV2LAorLQkJCSJpMmNfcHhhOiB0aW1lb3V0IHdhaXRpbmcgZm9yIGJ1cyBmcmVlXG4iKTsKKy0JCXJldHVybiBJMkNfUkVUUlk7CistCX0KKy0KKy0JLyoKKy0JICogU2V0IG1hc3RlciBtb2RlLgorLQkgKi8KKy0Jd3JpdGVsKHJlYWRsKF9JQ1IoaTJjKSkgfCBJQ1JfU0NMRSwgX0lDUihpMmMpKTsKKy0KKy0JcmV0dXJuIDA7CistfQorLQorIC8qCisgICogUFhBIEkyQyBzZW5kIG1hc3RlciBjb2RlCisgICogMS4gTG9hZCBtYXN0ZXIgY29kZSB0byBJREJSIGFuZCBzZW5kIGl0LgorQEAgLTc1MywxNDAgKzcyNCw2IEBAIHN0YXRpYyBpbnQgaTJjX3B4YV9zZW5kX21hc3RlcmNvZGUoc3RydWMKKyAJcmV0dXJuICh0aW1lb3V0ID09IDApID8gSTJDX1JFVFJZIDogMDsKKyB9CisgCistc3RhdGljIGludCBpMmNfcHhhX2RvX3Bpb194ZmVyKHN0cnVjdCBweGFfaTJjICppMmMsCistCQkJICAgICAgIHN0cnVjdCBpMmNfbXNnICptc2csIGludCBudW0pCisteworLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSA1MDAwMDA7IC8qIDUgc2Vjb25kcyAqLworLQlpbnQgcmV0ID0gMDsKKy0KKy0JcmV0ID0gaTJjX3B4YV9waW9fc2V0X21hc3RlcihpMmMpOworLQlpZiAocmV0KQorLQkJZ290byBvdXQ7CistCistCWkyYy0+bXNnID0gbXNnOworLQlpMmMtPm1zZ19udW0gPSBudW07CistCWkyYy0+bXNnX2lkeCA9IDA7CistCWkyYy0+bXNnX3B0ciA9IDA7CistCWkyYy0+aXJxbG9naWR4ID0gMDsKKy0KKy0JaTJjX3B4YV9zdGFydF9tZXNzYWdlKGkyYyk7CistCistCXdoaWxlIChpMmMtPm1zZ19udW0gPiAwICYmIC0tdGltZW91dCkgeworLQkJaTJjX3B4YV9oYW5kbGVyKDAsIGkyYyk7CistCQl1ZGVsYXkoMTApOworLQl9CistCistCWkyY19weGFfc3RvcF9tZXNzYWdlKGkyYyk7CistCistCS8qCistCSAqIFdlIHBsYWNlIHRoZSByZXR1cm4gY29kZSBpbiBpMmMtPm1zZ19pZHguCistCSAqLworLQlyZXQgPSBpMmMtPm1zZ19pZHg7CistCistb3V0OgorLQlpZiAodGltZW91dCA9PSAwKSB7CistCQlpMmNfcHhhX3NjcmVhbV9ibHVlX211cmRlcihpMmMsICJ0aW1lb3V0Iik7CistCQlyZXQgPSBJMkNfUkVUUlk7CistCX0KKy0KKy0JcmV0dXJuIHJldDsKKy19CistCistLyoKKy0gKiBXZSBhcmUgcHJvdGVjdGVkIGJ5IHRoZSBhZGFwdGVyIGJ1cyBtdXRleC4KKy0gKi8KKy1zdGF0aWMgaW50IGkyY19weGFfZG9feGZlcihzdHJ1Y3QgcHhhX2kyYyAqaTJjLCBzdHJ1Y3QgaTJjX21zZyAqbXNnLCBpbnQgbnVtKQorLXsKKy0JbG9uZyB0aW1lb3V0OworLQlpbnQgcmV0OworLQorLQkvKgorLQkgKiBXYWl0IGZvciB0aGUgYnVzIHRvIGJlY29tZSBmcmVlLgorLQkgKi8KKy0JcmV0ID0gaTJjX3B4YV93YWl0X2J1c19ub3RfYnVzeShpMmMpOworLQlpZiAocmV0KSB7CistCQlkZXZfZXJyKCZpMmMtPmFkYXAuZGV2LCAiaTJjX3B4YTogdGltZW91dCB3YWl0aW5nIGZvciBidXMgZnJlZVxuIik7CistCQlnb3RvIG91dDsKKy0JfQorLQorLQkvKgorLQkgKiBTZXQgbWFzdGVyIG1vZGUuCistCSAqLworLQlyZXQgPSBpMmNfcHhhX3NldF9tYXN0ZXIoaTJjKTsKKy0JaWYgKHJldCkgeworLQkJZGV2X2VycigmaTJjLT5hZGFwLmRldiwgImkyY19weGFfc2V0X21hc3RlcjogZXJyb3IgJWRcbiIsIHJldCk7CistCQlnb3RvIG91dDsKKy0JfQorLQorLQlpZiAoaTJjLT5oaWdoX21vZGUpIHsKKy0JCXJldCA9IGkyY19weGFfc2VuZF9tYXN0ZXJjb2RlKGkyYyk7CistCQlpZiAocmV0KSB7CistCQkJZGV2X2VycigmaTJjLT5hZGFwLmRldiwgImkyY19weGFfc2VuZF9tYXN0ZXJjb2RlIHRpbWVvdXRcbiIpOworLQkJCWdvdG8gb3V0OworLQkJCX0KKy0JfQorLQorLQlzcGluX2xvY2tfaXJxKCZpMmMtPmxvY2spOworLQorLQlpMmMtPm1zZyA9IG1zZzsKKy0JaTJjLT5tc2dfbnVtID0gbnVtOworLQlpMmMtPm1zZ19pZHggPSAwOworLQlpMmMtPm1zZ19wdHIgPSAwOworLQlpMmMtPmlycWxvZ2lkeCA9IDA7CistCistCWkyY19weGFfc3RhcnRfbWVzc2FnZShpMmMpOworLQorLQlzcGluX3VubG9ja19pcnEoJmkyYy0+bG9jayk7CistCistCS8qCistCSAqIFRoZSByZXN0IG9mIHRoZSBwcm9jZXNzaW5nIG9jY3VycyBpbiB0aGUgaW50ZXJydXB0IGhhbmRsZXIuCistCSAqLworLQl0aW1lb3V0ID0gd2FpdF9ldmVudF90aW1lb3V0KGkyYy0+d2FpdCwgaTJjLT5tc2dfbnVtID09IDAsIEhaICogNSk7CistCWkyY19weGFfc3RvcF9tZXNzYWdlKGkyYyk7CistCistCS8qCistCSAqIFdlIHBsYWNlIHRoZSByZXR1cm4gY29kZSBpbiBpMmMtPm1zZ19pZHguCistCSAqLworLQlyZXQgPSBpMmMtPm1zZ19pZHg7CistCistCWlmICghdGltZW91dCAmJiBpMmMtPm1zZ19udW0pIHsKKy0JCWkyY19weGFfc2NyZWFtX2JsdWVfbXVyZGVyKGkyYywgInRpbWVvdXQiKTsKKy0JCXJldCA9IEkyQ19SRVRSWTsKKy0JfQorLQorLSBvdXQ6CistCXJldHVybiByZXQ7CistfQorLQorLXN0YXRpYyBpbnQgaTJjX3B4YV9waW9feGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsCistCQkJICAgIHN0cnVjdCBpMmNfbXNnIG1zZ3NbXSwgaW50IG51bSkKKy17CistCXN0cnVjdCBweGFfaTJjICppMmMgPSBhZGFwLT5hbGdvX2RhdGE7CistCWludCByZXQsIGk7CistCistCS8qIElmIHRoZSBJMkMgY29udHJvbGxlciBpcyBkaXNhYmxlZCB3ZSBuZWVkIHRvIHJlc2V0IGl0CistCSAgKHByb2JhYmx5IGR1ZSB0byBhIHN1c3BlbmQvcmVzdW1lIGRlc3Ryb3lpbmcgc3RhdGUpLiBXZSBkbworLQkgIHRoaXMgaGVyZSBhcyB3ZSBjYW4gdGhlbiBhdm9pZCB3b3JyeWluZyBhYm91dCByZXN1bWluZyB0aGUKKy0JICBjb250cm9sbGVyIGJlZm9yZSBpdHMgdXNlcnMuICovCistCWlmICghKHJlYWRsKF9JQ1IoaTJjKSkgJiBJQ1JfSVVFKSkKKy0JCWkyY19weGFfcmVzZXQoaTJjKTsKKy0KKy0JZm9yIChpID0gYWRhcC0+cmV0cmllczsgaSA+PSAwOyBpLS0pIHsKKy0JCXJldCA9IGkyY19weGFfZG9fcGlvX3hmZXIoaTJjLCBtc2dzLCBudW0pOworLQkJaWYgKHJldCAhPSBJMkNfUkVUUlkpCistCQkJZ290byBvdXQ7CistCistCQlpZiAoaTJjX2RlYnVnKQorLQkJCWRldl9kYmcoJmFkYXAtPmRldiwgIlJldHJ5aW5nIHRyYW5zbWlzc2lvblxuIik7CistCQl1ZGVsYXkoMTAwKTsKKy0JfQorLQlpMmNfcHhhX3NjcmVhbV9ibHVlX211cmRlcihpMmMsICJleGhhdXN0ZWQgcmV0cmllcyIpOworLQlyZXQgPSAtRVJFTU9URUlPOworLSBvdXQ6CistCWkyY19weGFfc2V0X3NsYXZlKGkyYywgcmV0KTsKKy0JcmV0dXJuIHJldDsKKy19CistCisgLyoKKyAgKiBpMmNfcHhhX21hc3Rlcl9jb21wbGV0ZSAtIGNvbXBsZXRlIHRoZSBtZXNzYWdlIGFuZCB3YWtlIHVwLgorICAqLworQEAgLTEwOTMsNiArOTMwLDcxIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBpMmNfcHhhX2hhbmRsZXIoaW50IHQKKyAJcmV0dXJuIElSUV9IQU5ETEVEOworIH0KKyAKKysvKgorKyAqIFdlIGFyZSBwcm90ZWN0ZWQgYnkgdGhlIGFkYXB0ZXIgYnVzIG11dGV4LgorKyAqLworK3N0YXRpYyBpbnQgaTJjX3B4YV9kb194ZmVyKHN0cnVjdCBweGFfaTJjICppMmMsIHN0cnVjdCBpMmNfbXNnICptc2csIGludCBudW0pCisreworKwlsb25nIHRpbWVvdXQ7CisrCWludCByZXQ7CisrCisrCS8qCisrCSAqIFdhaXQgZm9yIHRoZSBidXMgdG8gYmVjb21lIGZyZWUuCisrCSAqLworKwlyZXQgPSBpMmNfcHhhX3dhaXRfYnVzX25vdF9idXN5KGkyYyk7CisrCWlmIChyZXQpIHsKKysJCWRldl9lcnIoJmkyYy0+YWRhcC5kZXYsICJpMmNfcHhhOiB0aW1lb3V0IHdhaXRpbmcgZm9yIGJ1cyBmcmVlXG4iKTsKKysJCWdvdG8gb3V0OworKwl9CisrCisrCS8qCisrCSAqIFNldCBtYXN0ZXIgbW9kZS4KKysJICovCisrCXJldCA9IGkyY19weGFfc2V0X21hc3RlcihpMmMpOworKwlpZiAocmV0KSB7CisrCQlkZXZfZXJyKCZpMmMtPmFkYXAuZGV2LCAiaTJjX3B4YV9zZXRfbWFzdGVyOiBlcnJvciAlZFxuIiwgcmV0KTsKKysJCWdvdG8gb3V0OworKwl9CisrCisrCWlmIChpMmMtPmhpZ2hfbW9kZSkgeworKwkJcmV0ID0gaTJjX3B4YV9zZW5kX21hc3RlcmNvZGUoaTJjKTsKKysJCWlmIChyZXQpIHsKKysJCQlkZXZfZXJyKCZpMmMtPmFkYXAuZGV2LCAiaTJjX3B4YV9zZW5kX21hc3RlcmNvZGUgdGltZW91dFxuIik7CisrCQkJZ290byBvdXQ7CisrCQkJfQorKwl9CisrCisrCXNwaW5fbG9ja19pcnEoJmkyYy0+bG9jayk7CisrCisrCWkyYy0+bXNnID0gbXNnOworKwlpMmMtPm1zZ19udW0gPSBudW07CisrCWkyYy0+bXNnX2lkeCA9IDA7CisrCWkyYy0+bXNnX3B0ciA9IDA7CisrCWkyYy0+aXJxbG9naWR4ID0gMDsKKysKKysJaTJjX3B4YV9zdGFydF9tZXNzYWdlKGkyYyk7CisrCisrCXNwaW5fdW5sb2NrX2lycSgmaTJjLT5sb2NrKTsKKysKKysJLyoKKysJICogVGhlIHJlc3Qgb2YgdGhlIHByb2Nlc3Npbmcgb2NjdXJzIGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4KKysJICovCisrCXRpbWVvdXQgPSB3YWl0X2V2ZW50X3RpbWVvdXQoaTJjLT53YWl0LCBpMmMtPm1zZ19udW0gPT0gMCwgSFogKiA1KTsKKysJaTJjX3B4YV9zdG9wX21lc3NhZ2UoaTJjKTsKKysKKysJLyoKKysJICogV2UgcGxhY2UgdGhlIHJldHVybiBjb2RlIGluIGkyYy0+bXNnX2lkeC4KKysJICovCisrCXJldCA9IGkyYy0+bXNnX2lkeDsKKysKKysJaWYgKCF0aW1lb3V0ICYmIGkyYy0+bXNnX251bSkgeworKwkJaTJjX3B4YV9zY3JlYW1fYmx1ZV9tdXJkZXIoaTJjLCAidGltZW91dCIpOworKwkJcmV0ID0gSTJDX1JFVFJZOworKwl9CisrCisrIG91dDoKKysJcmV0dXJuIHJldDsKKyt9CisgCisgc3RhdGljIGludCBpMmNfcHhhX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBzdHJ1Y3QgaTJjX21zZyBtc2dzW10sIGludCBudW0pCisgeworQEAgLTExMjYsNiArMTAyOCwxMDMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIGkyY19weAorIAkuZnVuY3Rpb25hbGl0eQk9IGkyY19weGFfZnVuY3Rpb25hbGl0eSwKKyB9OworIAorKy8qIE5vbi1pbnRlcnJ1cHQgbW9kZSBzdXBwb3J0ICovCisrc3RhdGljIGludCBpMmNfcHhhX3Bpb19zZXRfbWFzdGVyKHN0cnVjdCBweGFfaTJjICppMmMpCisreworKwkvKiBtYWtlIHRpbWVvdXQgdGhlIHNhbWUgYXMgZm9yIGludGVycnVwdCBiYXNlZCBmdW5jdGlvbnMgKi8KKysJbG9uZyB0aW1lb3V0ID0gMiAqIERFRl9USU1FT1VUOworKworKwkvKgorKwkgKiBXYWl0IGZvciB0aGUgYnVzIHRvIGJlY29tZSBmcmVlLgorKwkgKi8KKysJd2hpbGUgKHRpbWVvdXQtLSAmJiByZWFkbChfSVNSKGkyYykpICYgKElTUl9JQkIgfCBJU1JfVUIpKSB7CisrCQl1ZGVsYXkoMTAwMCk7CisrCQlzaG93X3N0YXRlKGkyYyk7CisrCX0KKysKKysJaWYgKHRpbWVvdXQgPCAwKSB7CisrCQlzaG93X3N0YXRlKGkyYyk7CisrCQlkZXZfZXJyKCZpMmMtPmFkYXAuZGV2LAorKwkJCSJpMmNfcHhhOiB0aW1lb3V0IHdhaXRpbmcgZm9yIGJ1cyBmcmVlXG4iKTsKKysJCXJldHVybiBJMkNfUkVUUlk7CisrCX0KKysKKysJLyoKKysJICogU2V0IG1hc3RlciBtb2RlLgorKwkgKi8KKysJd3JpdGVsKHJlYWRsKF9JQ1IoaTJjKSkgfCBJQ1JfU0NMRSwgX0lDUihpMmMpKTsKKysKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQgaTJjX3B4YV9kb19waW9feGZlcihzdHJ1Y3QgcHhhX2kyYyAqaTJjLAorKwkJCSAgICAgICBzdHJ1Y3QgaTJjX21zZyAqbXNnLCBpbnQgbnVtKQorK3sKKysJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gNTAwMDAwOyAvKiA1IHNlY29uZHMgKi8KKysJaW50IHJldCA9IDA7CisrCisrCXJldCA9IGkyY19weGFfcGlvX3NldF9tYXN0ZXIoaTJjKTsKKysJaWYgKHJldCkKKysJCWdvdG8gb3V0OworKworKwlpMmMtPm1zZyA9IG1zZzsKKysJaTJjLT5tc2dfbnVtID0gbnVtOworKwlpMmMtPm1zZ19pZHggPSAwOworKwlpMmMtPm1zZ19wdHIgPSAwOworKwlpMmMtPmlycWxvZ2lkeCA9IDA7CisrCisrCWkyY19weGFfc3RhcnRfbWVzc2FnZShpMmMpOworKworKwl3aGlsZSAoaTJjLT5tc2dfbnVtID4gMCAmJiAtLXRpbWVvdXQpIHsKKysJCWkyY19weGFfaGFuZGxlcigwLCBpMmMpOworKwkJdWRlbGF5KDEwKTsKKysJfQorKworKwlpMmNfcHhhX3N0b3BfbWVzc2FnZShpMmMpOworKworKwkvKgorKwkgKiBXZSBwbGFjZSB0aGUgcmV0dXJuIGNvZGUgaW4gaTJjLT5tc2dfaWR4LgorKwkgKi8KKysJcmV0ID0gaTJjLT5tc2dfaWR4OworKworK291dDoKKysJaWYgKHRpbWVvdXQgPT0gMCkgeworKwkJaTJjX3B4YV9zY3JlYW1fYmx1ZV9tdXJkZXIoaTJjLCAidGltZW91dCIpOworKwkJcmV0ID0gSTJDX1JFVFJZOworKwl9CisrCisrCXJldHVybiByZXQ7CisrfQorKworK3N0YXRpYyBpbnQgaTJjX3B4YV9waW9feGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsCisrCQkJICAgIHN0cnVjdCBpMmNfbXNnIG1zZ3NbXSwgaW50IG51bSkKKyt7CisrCXN0cnVjdCBweGFfaTJjICppMmMgPSBhZGFwLT5hbGdvX2RhdGE7CisrCWludCByZXQsIGk7CisrCisrCS8qIElmIHRoZSBJMkMgY29udHJvbGxlciBpcyBkaXNhYmxlZCB3ZSBuZWVkIHRvIHJlc2V0IGl0CisrCSAgKHByb2JhYmx5IGR1ZSB0byBhIHN1c3BlbmQvcmVzdW1lIGRlc3Ryb3lpbmcgc3RhdGUpLiBXZSBkbworKwkgIHRoaXMgaGVyZSBhcyB3ZSBjYW4gdGhlbiBhdm9pZCB3b3JyeWluZyBhYm91dCByZXN1bWluZyB0aGUKKysJICBjb250cm9sbGVyIGJlZm9yZSBpdHMgdXNlcnMuICovCisrCWlmICghKHJlYWRsKF9JQ1IoaTJjKSkgJiBJQ1JfSVVFKSkKKysJCWkyY19weGFfcmVzZXQoaTJjKTsKKysKKysJZm9yIChpID0gYWRhcC0+cmV0cmllczsgaSA+PSAwOyBpLS0pIHsKKysJCXJldCA9IGkyY19weGFfZG9fcGlvX3hmZXIoaTJjLCBtc2dzLCBudW0pOworKwkJaWYgKHJldCAhPSBJMkNfUkVUUlkpCisrCQkJZ290byBvdXQ7CisrCisrCQlpZiAoaTJjX2RlYnVnKQorKwkJCWRldl9kYmcoJmFkYXAtPmRldiwgIlJldHJ5aW5nIHRyYW5zbWlzc2lvblxuIik7CisrCQl1ZGVsYXkoMTAwKTsKKysJfQorKwlpMmNfcHhhX3NjcmVhbV9ibHVlX211cmRlcihpMmMsICJleGhhdXN0ZWQgcmV0cmllcyIpOworKwlyZXQgPSAtRVJFTU9URUlPOworKyBvdXQ6CisrCWkyY19weGFfc2V0X3NsYXZlKGkyYywgcmV0KTsKKysJcmV0dXJuIHJldDsKKyt9CisrCisgc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIGkyY19weGFfcGlvX2FsZ29yaXRobSA9IHsKKyAJLm1hc3Rlcl94ZmVyCT0gaTJjX3B4YV9waW9feGZlciwKKyAJLmZ1bmN0aW9uYWxpdHkJPSBpMmNfcHhhX2Z1bmN0aW9uYWxpdHksCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvODA3LXY1LjgtaTJjLXB4YS1yZS1hcnJhbmdlLXJlZ2lzdGVyLWZpZWxkLWRlZmluaXRpb25zLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzgwNy12NS44LWkyYy1weGEtcmUtYXJyYW5nZS1yZWdpc3Rlci1maWVsZC1kZWZpbml0aW9ucy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmFkZTA0Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzgwNy12NS44LWkyYy1weGEtcmUtYXJyYW5nZS1yZWdpc3Rlci1maWVsZC1kZWZpbml0aW9ucy5wYXRjaApAQCAtMCwwICsxLDE2MSBAQAorRnJvbTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KK0JjYzogbGludXhAbWFpbC5hcm1saW51eC5vcmcudWsKK0NjOiBsaW51eC1pMmNAdmdlci5rZXJuZWwub3JnCitTdWJqZWN0OiBbUEFUQ0ggMDUvMTddIGkyYzogcHhhOiByZS1hcnJhbmdlIHJlZ2lzdGVyIGZpZWxkIGRlZmluaXRpb25zCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorCitBcnJhbmdlIHRoZSByZWdpc3RlciBmaWVsZCBkZWZpbml0aW9ucyB0byBiZSBncm91cGVkIHRvZ2V0aGVyLCByYXRoZXIKK3RoYW4gdGhlIEFybWFkYS0zNzAwIGRlZmluaXRpb25zIGJlaW5nIHNlcGFyYXRlZCBmcm9tIHRoZSByZXN0IG9mIHRoZQorZGVmaW5pdGlvbnMuCisKK1NpZ25lZC1vZmYtYnk6IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CistLS0KKyBkcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jIHwgMTEzICsrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUzIGluc2VydGlvbnMoKyksIDYwIGRlbGV0aW9ucygtKQorCistLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jCisrKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jCitAQCAtMzMsNiArMzMsNTYgQEAKKyAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9pMmMtcHhhLmg+CisgI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyAKKysvKiBJMkMgcmVnaXN0ZXIgZmllbGQgZGVmaW5pdGlvbnMgKi8KKysjZGVmaW5lIElDUl9TVEFSVAkoMSA8PCAwKQkgICAvKiBzdGFydCBiaXQgKi8KKysjZGVmaW5lIElDUl9TVE9QCSgxIDw8IDEpCSAgIC8qIHN0b3AgYml0ICovCisrI2RlZmluZSBJQ1JfQUNLTkFLCSgxIDw8IDIpCSAgIC8qIHNlbmQgQUNLKDApIG9yIE5BSygxKSAqLworKyNkZWZpbmUgSUNSX1RCCQkoMSA8PCAzKQkgICAvKiB0cmFuc2ZlciBieXRlIGJpdCAqLworKyNkZWZpbmUgSUNSX01BCQkoMSA8PCA0KQkgICAvKiBtYXN0ZXIgYWJvcnQgKi8KKysjZGVmaW5lIElDUl9TQ0xFCSgxIDw8IDUpCSAgIC8qIG1hc3RlciBjbG9jayBlbmFibGUgKi8KKysjZGVmaW5lIElDUl9JVUUJCSgxIDw8IDYpCSAgIC8qIHVuaXQgZW5hYmxlICovCisrI2RlZmluZSBJQ1JfR0NECQkoMSA8PCA3KQkgICAvKiBnZW5lcmFsIGNhbGwgZGlzYWJsZSAqLworKyNkZWZpbmUgSUNSX0lURUlFCSgxIDw8IDgpCSAgIC8qIGVuYWJsZSB0eCBpbnRlcnJ1cHRzICovCisrI2RlZmluZSBJQ1JfSVJGSUUJKDEgPDwgOSkJICAgLyogZW5hYmxlIHJ4IGludGVycnVwdHMgKi8KKysjZGVmaW5lIElDUl9CRUlFCSgxIDw8IDEwKQkgICAvKiBlbmFibGUgYnVzIGVycm9yIGludHMgKi8KKysjZGVmaW5lIElDUl9TU0RJRQkoMSA8PCAxMSkJICAgLyogc2xhdmUgU1RPUCBkZXRlY3RlZCBpbnQgZW5hYmxlICovCisrI2RlZmluZSBJQ1JfQUxESUUJKDEgPDwgMTIpCSAgIC8qIGVuYWJsZSBhcmJpdHJhdGlvbiBpbnRlcnJ1cHQgKi8KKysjZGVmaW5lIElDUl9TQURJRQkoMSA8PCAxMykJICAgLyogc2xhdmUgYWRkcmVzcyBkZXRlY3RlZCBpbnQgZW5hYmxlICovCisrI2RlZmluZSBJQ1JfVVIJCSgxIDw8IDE0KQkgICAvKiB1bml0IHJlc2V0ICovCisrI2RlZmluZSBJQ1JfRk0JCSgxIDw8IDE1KQkgICAvKiBmYXN0IG1vZGUgKi8KKysjZGVmaW5lIElDUl9IUwkJKDEgPDwgMTYpCSAgIC8qIEhpZ2ggU3BlZWQgbW9kZSAqLworKyNkZWZpbmUgSUNSX0EzNzAwX0ZNCSgxIDw8IDE2KQkgICAvKiBmYXN0IG1vZGUgZm9yIGFybWFkYS0zNzAwICovCisrI2RlZmluZSBJQ1JfQTM3MDBfSFMJKDEgPDwgMTcpCSAgIC8qIGhpZ2ggc3BlZWQgbW9kZSBmb3IgYXJtYWRhLTM3MDAgKi8KKysjZGVmaW5lIElDUl9HUElPRU4JKDEgPDwgMTkpCSAgIC8qIGVuYWJsZSBHUElPIG1vZGUgZm9yIFNDTCBpbiBIUyAqLworKworKyNkZWZpbmUgSVNSX1JXTQkJKDEgPDwgMCkJICAgLyogcmVhZC93cml0ZSBtb2RlICovCisrI2RlZmluZSBJU1JfQUNLTkFLCSgxIDw8IDEpCSAgIC8qIGFjay9uYWsgc3RhdHVzICovCisrI2RlZmluZSBJU1JfVUIJCSgxIDw8IDIpCSAgIC8qIHVuaXQgYnVzeSAqLworKyNkZWZpbmUgSVNSX0lCQgkJKDEgPDwgMykJICAgLyogYnVzIGJ1c3kgKi8KKysjZGVmaW5lIElTUl9TU0QJCSgxIDw8IDQpCSAgIC8qIHNsYXZlIHN0b3AgZGV0ZWN0ZWQgKi8KKysjZGVmaW5lIElTUl9BTEQJCSgxIDw8IDUpCSAgIC8qIGFyYml0cmF0aW9uIGxvc3MgZGV0ZWN0ZWQgKi8KKysjZGVmaW5lIElTUl9JVEUJCSgxIDw8IDYpCSAgIC8qIHR4IGJ1ZmZlciBlbXB0eSAqLworKyNkZWZpbmUgSVNSX0lSRgkJKDEgPDwgNykJICAgLyogcnggYnVmZmVyIGZ1bGwgKi8KKysjZGVmaW5lIElTUl9HQ0FECSgxIDw8IDgpCSAgIC8qIGdlbmVyYWwgY2FsbCBhZGRyZXNzIGRldGVjdGVkICovCisrI2RlZmluZSBJU1JfU0FECQkoMSA8PCA5KQkgICAvKiBzbGF2ZSBhZGRyZXNzIGRldGVjdGVkICovCisrI2RlZmluZSBJU1JfQkVECQkoMSA8PCAxMCkJICAgLyogYnVzIGVycm9yIG5vIEFDSy9OQUsgKi8KKysKKysjZGVmaW5lIElMQ1JfU0xWX1NISUZUCQkwCisrI2RlZmluZSBJTENSX1NMVl9NQVNLCQkoMHgxRkYgPDwgSUxDUl9TTFZfU0hJRlQpCisrI2RlZmluZSBJTENSX0ZMVl9TSElGVAkJOQorKyNkZWZpbmUgSUxDUl9GTFZfTUFTSwkJKDB4MUZGIDw8IElMQ1JfRkxWX1NISUZUKQorKyNkZWZpbmUgSUxDUl9ITFZMX1NISUZUCQkxOAorKyNkZWZpbmUgSUxDUl9ITFZMX01BU0sJCSgweDFGRiA8PCBJTENSX0hMVkxfU0hJRlQpCisrI2RlZmluZSBJTENSX0hMVkhfU0hJRlQJCTI3CisrI2RlZmluZSBJTENSX0hMVkhfTUFTSwkJKDB4MUYgPDwgSUxDUl9ITFZIX1NISUZUKQorKworKyNkZWZpbmUgSVdDUl9DTlRfU0hJRlQJCTAKKysjZGVmaW5lIElXQ1JfQ05UX01BU0sJCSgweDFGIDw8IElXQ1JfQ05UX1NISUZUKQorKyNkZWZpbmUgSVdDUl9IU19DTlQxX1NISUZUCTUKKysjZGVmaW5lIElXQ1JfSFNfQ05UMV9NQVNLCSgweDFGIDw8IElXQ1JfSFNfQ05UMV9TSElGVCkKKysjZGVmaW5lIElXQ1JfSFNfQ05UMl9TSElGVAkxMAorKyNkZWZpbmUgSVdDUl9IU19DTlQyX01BU0sJKDB4MUYgPDwgSVdDUl9IU19DTlQyX1NISUZUKQorKworIHN0cnVjdCBweGFfcmVnX2xheW91dCB7CisgCXUzMiBpYm1yOworIAl1MzIgaWRicjsKK0BAIC01MywxMiArMTAzLDcgQEAgZW51bSBweGFfaTJjX3R5cGVzIHsKKyAJUkVHU19BMzcwMCwKKyB9OworIAorLSNkZWZpbmUgSUNSX0JVU01PREVfRk0JKDEgPDwgMTYpCSAgIC8qIHNoaWZ0ZWQgZmFzdCBtb2RlIGZvciBhcm1hZGEtMzcwMCAqLworLSNkZWZpbmUgSUNSX0JVU01PREVfSFMJKDEgPDwgMTcpCSAgIC8qIHNoaWZ0ZWQgaGlnaCBzcGVlZCBtb2RlIGZvciBhcm1hZGEtMzcwMCAqLworLQorLS8qCistICogSTJDIHJlZ2lzdGVycyBkZWZpbml0aW9ucworLSAqLworKy8qIEkyQyByZWdpc3RlciBsYXlvdXQgZGVmaW5pdGlvbnMgKi8KKyBzdGF0aWMgc3RydWN0IHB4YV9yZWdfbGF5b3V0IHB4YV9yZWdfbGF5b3V0W10gPSB7CisgCVtSRUdTX1BYQTJYWF0gPSB7CisgCQkuaWJtciA9CTB4MDAsCitAQCAtOTYsOCArMTQxLDggQEAgc3RhdGljIHN0cnVjdCBweGFfcmVnX2xheW91dCBweGFfcmVnX2xheQorIAkJLmljciA9CTB4MDgsCisgCQkuaXNyID0JMHgwYywKKyAJCS5pc2FyID0JMHgxMCwKKy0JCS5mbSA9IElDUl9CVVNNT0RFX0ZNLAorLQkJLmhzID0gSUNSX0JVU01PREVfSFMsCisrCQkuZm0gPSBJQ1JfQTM3MDBfRk0sCisrCQkuaHMgPSBJQ1JfQTM3MDBfSFMsCisgCX0sCisgfTsKKyAKK0BAIC0xMTEsNTggKzE1Niw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkIGkKKyB9OworIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGxhdGZvcm0sIGkyY19weGFfaWRfdGFibGUpOworIAorLS8qCistICogSTJDIGJpdCBkZWZpbml0aW9ucworLSAqLworLQorLSNkZWZpbmUgSUNSX1NUQVJUCSgxIDw8IDApCSAgIC8qIHN0YXJ0IGJpdCAqLworLSNkZWZpbmUgSUNSX1NUT1AJKDEgPDwgMSkJICAgLyogc3RvcCBiaXQgKi8KKy0jZGVmaW5lIElDUl9BQ0tOQUsJKDEgPDwgMikJICAgLyogc2VuZCBBQ0soMCkgb3IgTkFLKDEpICovCistI2RlZmluZSBJQ1JfVEIJCSgxIDw8IDMpCSAgIC8qIHRyYW5zZmVyIGJ5dGUgYml0ICovCistI2RlZmluZSBJQ1JfTUEJCSgxIDw8IDQpCSAgIC8qIG1hc3RlciBhYm9ydCAqLworLSNkZWZpbmUgSUNSX1NDTEUJKDEgPDwgNSkJICAgLyogbWFzdGVyIGNsb2NrIGVuYWJsZSAqLworLSNkZWZpbmUgSUNSX0lVRQkJKDEgPDwgNikJICAgLyogdW5pdCBlbmFibGUgKi8KKy0jZGVmaW5lIElDUl9HQ0QJCSgxIDw8IDcpCSAgIC8qIGdlbmVyYWwgY2FsbCBkaXNhYmxlICovCistI2RlZmluZSBJQ1JfSVRFSUUJKDEgPDwgOCkJICAgLyogZW5hYmxlIHR4IGludGVycnVwdHMgKi8KKy0jZGVmaW5lIElDUl9JUkZJRQkoMSA8PCA5KQkgICAvKiBlbmFibGUgcnggaW50ZXJydXB0cyAqLworLSNkZWZpbmUgSUNSX0JFSUUJKDEgPDwgMTApCSAgIC8qIGVuYWJsZSBidXMgZXJyb3IgaW50cyAqLworLSNkZWZpbmUgSUNSX1NTRElFCSgxIDw8IDExKQkgICAvKiBzbGF2ZSBTVE9QIGRldGVjdGVkIGludCBlbmFibGUgKi8KKy0jZGVmaW5lIElDUl9BTERJRQkoMSA8PCAxMikJICAgLyogZW5hYmxlIGFyYml0cmF0aW9uIGludGVycnVwdCAqLworLSNkZWZpbmUgSUNSX1NBRElFCSgxIDw8IDEzKQkgICAvKiBzbGF2ZSBhZGRyZXNzIGRldGVjdGVkIGludCBlbmFibGUgKi8KKy0jZGVmaW5lIElDUl9VUgkJKDEgPDwgMTQpCSAgIC8qIHVuaXQgcmVzZXQgKi8KKy0jZGVmaW5lIElDUl9GTQkJKDEgPDwgMTUpCSAgIC8qIGZhc3QgbW9kZSAqLworLSNkZWZpbmUgSUNSX0hTCQkoMSA8PCAxNikJICAgLyogSGlnaCBTcGVlZCBtb2RlICovCistI2RlZmluZSBJQ1JfR1BJT0VOCSgxIDw8IDE5KQkgICAvKiBlbmFibGUgR1BJTyBtb2RlIGZvciBTQ0wgaW4gSFMgKi8KKy0KKy0jZGVmaW5lIElTUl9SV00JCSgxIDw8IDApCSAgIC8qIHJlYWQvd3JpdGUgbW9kZSAqLworLSNkZWZpbmUgSVNSX0FDS05BSwkoMSA8PCAxKQkgICAvKiBhY2svbmFrIHN0YXR1cyAqLworLSNkZWZpbmUgSVNSX1VCCQkoMSA8PCAyKQkgICAvKiB1bml0IGJ1c3kgKi8KKy0jZGVmaW5lIElTUl9JQkIJCSgxIDw8IDMpCSAgIC8qIGJ1cyBidXN5ICovCistI2RlZmluZSBJU1JfU1NECQkoMSA8PCA0KQkgICAvKiBzbGF2ZSBzdG9wIGRldGVjdGVkICovCistI2RlZmluZSBJU1JfQUxECQkoMSA8PCA1KQkgICAvKiBhcmJpdHJhdGlvbiBsb3NzIGRldGVjdGVkICovCistI2RlZmluZSBJU1JfSVRFCQkoMSA8PCA2KQkgICAvKiB0eCBidWZmZXIgZW1wdHkgKi8KKy0jZGVmaW5lIElTUl9JUkYJCSgxIDw8IDcpCSAgIC8qIHJ4IGJ1ZmZlciBmdWxsICovCistI2RlZmluZSBJU1JfR0NBRAkoMSA8PCA4KQkgICAvKiBnZW5lcmFsIGNhbGwgYWRkcmVzcyBkZXRlY3RlZCAqLworLSNkZWZpbmUgSVNSX1NBRAkJKDEgPDwgOSkJICAgLyogc2xhdmUgYWRkcmVzcyBkZXRlY3RlZCAqLworLSNkZWZpbmUgSVNSX0JFRAkJKDEgPDwgMTApCSAgIC8qIGJ1cyBlcnJvciBubyBBQ0svTkFLICovCistCistLyogYml0IGZpZWxkIHNoaWZ0ICYgbWFzayAqLworLSNkZWZpbmUgSUxDUl9TTFZfU0hJRlQJCTAKKy0jZGVmaW5lIElMQ1JfU0xWX01BU0sJCSgweDFGRiA8PCBJTENSX1NMVl9TSElGVCkKKy0jZGVmaW5lIElMQ1JfRkxWX1NISUZUCQk5CistI2RlZmluZSBJTENSX0ZMVl9NQVNLCQkoMHgxRkYgPDwgSUxDUl9GTFZfU0hJRlQpCistI2RlZmluZSBJTENSX0hMVkxfU0hJRlQJCTE4CistI2RlZmluZSBJTENSX0hMVkxfTUFTSwkJKDB4MUZGIDw8IElMQ1JfSExWTF9TSElGVCkKKy0jZGVmaW5lIElMQ1JfSExWSF9TSElGVAkJMjcKKy0jZGVmaW5lIElMQ1JfSExWSF9NQVNLCQkoMHgxRiA8PCBJTENSX0hMVkhfU0hJRlQpCistCistI2RlZmluZSBJV0NSX0NOVF9TSElGVAkJMAorLSNkZWZpbmUgSVdDUl9DTlRfTUFTSwkJKDB4MUYgPDwgSVdDUl9DTlRfU0hJRlQpCistI2RlZmluZSBJV0NSX0hTX0NOVDFfU0hJRlQJNQorLSNkZWZpbmUgSVdDUl9IU19DTlQxX01BU0sJKDB4MUYgPDwgSVdDUl9IU19DTlQxX1NISUZUKQorLSNkZWZpbmUgSVdDUl9IU19DTlQyX1NISUZUCTEwCistI2RlZmluZSBJV0NSX0hTX0NOVDJfTUFTSwkoMHgxRiA8PCBJV0NSX0hTX0NOVDJfU0hJRlQpCistCisgc3RydWN0IHB4YV9pMmMgeworIAlzcGlubG9ja190CQlsb2NrOworIAl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzgwOC12NS44LWkyYy1weGEtYWRkLWFuZC11c2UtZGVmaW5pdGlvbnMtZm9yLUlCTVItcmVnaXN0ZXIucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvODA4LXY1LjgtaTJjLXB4YS1hZGQtYW5kLXVzZS1kZWZpbml0aW9ucy1mb3ItSUJNUi1yZWdpc3Rlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTk3ODA4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzgwOC12NS44LWkyYy1weGEtYWRkLWFuZC11c2UtZGVmaW5pdGlvbnMtZm9yLUlCTVItcmVnaXN0ZXIucGF0Y2gKQEAgLTAsMCArMSw2NiBAQAorRnJvbTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KK0JjYzogbGludXhAbWFpbC5hcm1saW51eC5vcmcudWsKK0NjOiBsaW51eC1pMmNAdmdlci5rZXJuZWwub3JnCitTdWJqZWN0OiBbUEFUQ0ggMDYvMTddIGkyYzogcHhhOiBhZGQgYW5kIHVzZSBkZWZpbml0aW9ucyBmb3IgSUJNUiByZWdpc3RlcgorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZQorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKKworQWRkIGRlZmluaXRpb25zIGZvciB0aGUgYml0cyBpbiB0aGUgSUJNUiByZWdpc3RlciwgYW5kIHVzZSB0aGVtIGluIHRoZQorY29kZS4gVGhpcyBpbXByb3ZlcyByZWFkYWJpbGl0eS4KKworU2lnbmVkLW9mZi1ieTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KKy0tLQorIGRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMgfCAxMiArKysrKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCistLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jCisrKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jCitAQCAtMzQsNiArMzQsOSBAQAorICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisgCisgLyogSTJDIHJlZ2lzdGVyIGZpZWxkIGRlZmluaXRpb25zICovCisrI2RlZmluZSBJQk1SX1NEQVMJKDEgPDwgMCkKKysjZGVmaW5lIElCTVJfU0NMUwkoMSA8PCAxKQorKworICNkZWZpbmUgSUNSX1NUQVJUCSgxIDw8IDApCSAgIC8qIHN0YXJ0IGJpdCAqLworICNkZWZpbmUgSUNSX1NUT1AJKDEgPDwgMSkJICAgLyogc3RvcCBiaXQgKi8KKyAjZGVmaW5lIElDUl9BQ0tOQUsJKDEgPDwgMikJICAgLyogc2VuZCBBQ0soMCkgb3IgTkFLKDEpICovCitAQCAtMzM0LDcgKzMzNyw3IEBAIHN0YXRpYyB2b2lkIGkyY19weGFfYWJvcnQoc3RydWN0IHB4YV9pMmMKKyAJCXJldHVybjsKKyAJfQorIAorLQl3aGlsZSAoKGkgPiAwKSAmJiAocmVhZGwoX0lCTVIoaTJjKSkgJiAweDEpID09IDApIHsKKysJd2hpbGUgKChpID4gMCkgJiYgKHJlYWRsKF9JQk1SKGkyYykpICYgSUJNUl9TREFTKSA9PSAwKSB7CisgCQl1bnNpZ25lZCBsb25nIGljciA9IHJlYWRsKF9JQ1IoaTJjKSk7CisgCisgCQlpY3IgJj0gfklDUl9TVEFSVDsKK0BAIC0zODksNyArMzkyLDggQEAgc3RhdGljIGludCBpMmNfcHhhX3dhaXRfbWFzdGVyKHN0cnVjdCBweAorIAkJICogcXVpY2sgY2hlY2sgb2YgdGhlIGkyYyBsaW5lcyB0aGVtc2VsdmVzIHRvIGVuc3VyZSB0aGV5J3ZlCisgCQkgKiBnb25lIGhpZ2guLi4KKyAJCSAqLworLQkJaWYgKChyZWFkbChfSVNSKGkyYykpICYgKElTUl9VQiB8IElTUl9JQkIpKSA9PSAwICYmIHJlYWRsKF9JQk1SKGkyYykpID09IDMpIHsKKysJCWlmICgocmVhZGwoX0lTUihpMmMpKSAmIChJU1JfVUIgfCBJU1JfSUJCKSkgPT0gMCAmJgorKwkJICAgIHJlYWRsKF9JQk1SKGkyYykpID09IChJQk1SX1NDTFMgfCBJQk1SX1NEQVMpKSB7CisgCQkJaWYgKGkyY19kZWJ1ZyA+IDApCisgCQkJCWRldl9kYmcoJmkyYy0+YWRhcC5kZXYsICIlczogZG9uZVxuIiwgX19mdW5jX18pOworIAkJCXJldHVybiAxOworQEAgLTU3NCw3ICs1NzgsNyBAQCBzdGF0aWMgdm9pZCBpMmNfcHhhX3NsYXZlX3N0YXJ0KHN0cnVjdCBwCisgCXRpbWVvdXQgPSAweDEwMDAwOworIAorIAl3aGlsZSAoMSkgeworLQkJaWYgKChyZWFkbChfSUJNUihpMmMpKSAmIDIpID09IDIpCisrCQlpZiAoKHJlYWRsKF9JQk1SKGkyYykpICYgSUJNUl9TQ0xTKSA9PSBJQk1SX1NDTFMpCisgCQkJYnJlYWs7CisgCisgCQl0aW1lb3V0LS07CitAQCAtNjM3LDcgKzY0MSw3IEBAIHN0YXRpYyB2b2lkIGkyY19weGFfc2xhdmVfc3RhcnQoc3RydWN0IHAKKyAJdGltZW91dCA9IDB4MTAwMDA7CisgCisgCXdoaWxlICgxKSB7CistCQlpZiAoKHJlYWRsKF9JQk1SKGkyYykpICYgMikgPT0gMikKKysJCWlmICgocmVhZGwoX0lCTVIoaTJjKSkgJiBJQk1SX1NDTFMpID09IElCTVJfU0NMUykKKyAJCQlicmVhazsKKyAKKyAJCXRpbWVvdXQtLTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC84MDktdjUuOC1pMmMtcHhhLWFsd2F5cy1zZXQtZm0tYW5kLWhzLW1lbWJlcnMtZm9yLWVhY2gtdHlwZS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC84MDktdjUuOC1pMmMtcHhhLWFsd2F5cy1zZXQtZm0tYW5kLWhzLW1lbWJlcnMtZm9yLWVhY2gtdHlwZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjFkZWU2Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzgwOS12NS44LWkyYy1weGEtYWx3YXlzLXNldC1mbS1hbmQtaHMtbWVtYmVycy1mb3ItZWFjaC10eXBlLnBhdGNoCkBAIC0wLDAgKzEsNjYgQEAKK0Zyb206IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CitCY2M6IGxpbnV4QG1haWwuYXJtbGludXgub3JnLnVrCitDYzogbGludXgtaTJjQHZnZXIua2VybmVsLm9yZworU3ViamVjdDogW1BBVENIIDA3LzE3XSBpMmM6IHB4YTogYWx3YXlzIHNldCBmbSBhbmQgaHMgbWVtYmVycyBmb3IgZWFjaCB0eXBlCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorCitBbHdheXMgc2V0IHRoZSBmbSBhbmQgaHMgbWVtYmVycyBvZiBzdHJ1Y3QgcHhhX3JlZ19sYXlvdXQuIFRoZXNlCittZW1iZXJzIGFyZSBhbHJlYWR5IHRha2luZyBzcGFjZSwgd2UgZG9uJ3QgbmVlZCBjb2RlIGFzIHdlbGwuCisKK1NpZ25lZC1vZmYtYnk6IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CistLS0KKyBkcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jIHwgMTIgKysrKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKKysrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKK0BAIC0xMTQsNiArMTE0LDggQEAgc3RhdGljIHN0cnVjdCBweGFfcmVnX2xheW91dCBweGFfcmVnX2xheQorIAkJLmljciA9CTB4MTAsCisgCQkuaXNyID0JMHgxOCwKKyAJCS5pc2FyID0JMHgyMCwKKysJCS5mbSA9IElDUl9GTSwKKysJCS5ocyA9IElDUl9IUywKKyAJfSwKKyAJW1JFR1NfUFhBM1hYXSA9IHsKKyAJCS5pYm1yID0JMHgwMCwKK0BAIC0xMjEsNiArMTIzLDggQEAgc3RhdGljIHN0cnVjdCBweGFfcmVnX2xheW91dCBweGFfcmVnX2xheQorIAkJLmljciA9CTB4MDgsCisgCQkuaXNyID0JMHgwYywKKyAJCS5pc2FyID0JMHgxMCwKKysJCS5mbSA9IElDUl9GTSwKKysJCS5ocyA9IElDUl9IUywKKyAJfSwKKyAJW1JFR1NfQ0U0MTAwXSA9IHsKKyAJCS5pYm1yID0JMHgxNCwKK0BAIC0xMjgsNiArMTMyLDggQEAgc3RhdGljIHN0cnVjdCBweGFfcmVnX2xheW91dCBweGFfcmVnX2xheQorIAkJLmljciA9CTB4MDAsCisgCQkuaXNyID0JMHgwNCwKKyAJCS8qIG5vIGlzYXIgcmVnaXN0ZXIgKi8KKysJCS5mbSA9IElDUl9GTSwKKysJCS5ocyA9IElDUl9IUywKKyAJfSwKKyAJW1JFR1NfUFhBOTEwXSA9IHsKKyAJCS5pYm1yID0gMHgwMCwKK0BAIC0xMzcsNiArMTQzLDggQEAgc3RhdGljIHN0cnVjdCBweGFfcmVnX2xheW91dCBweGFfcmVnX2xheQorIAkJLmlzYXIgPSAweDIwLAorIAkJLmlsY3IgPSAweDI4LAorIAkJLml3Y3IgPSAweDMwLAorKwkJLmZtID0gSUNSX0ZNLAorKwkJLmhzID0gSUNSX0hTLAorIAl9LAorIAlbUkVHU19BMzcwMF0gPSB7CisgCQkuaWJtciA9CTB4MDAsCitAQCAtMTIyOSw4ICsxMjM3LDggQEAgc3RhdGljIGludCBpMmNfcHhhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybQorIAlpMmMtPnJlZ19pZGJyID0gaTJjLT5yZWdfYmFzZSArIHB4YV9yZWdfbGF5b3V0W2kyY190eXBlXS5pZGJyOworIAlpMmMtPnJlZ19pY3IgPSBpMmMtPnJlZ19iYXNlICsgcHhhX3JlZ19sYXlvdXRbaTJjX3R5cGVdLmljcjsKKyAJaTJjLT5yZWdfaXNyID0gaTJjLT5yZWdfYmFzZSArIHB4YV9yZWdfbGF5b3V0W2kyY190eXBlXS5pc3I7CistCWkyYy0+Zm1fbWFzayA9IHB4YV9yZWdfbGF5b3V0W2kyY190eXBlXS5mbSA/IDogSUNSX0ZNOworLQlpMmMtPmhzX21hc2sgPSBweGFfcmVnX2xheW91dFtpMmNfdHlwZV0uaHMgPyA6IElDUl9IUzsKKysJaTJjLT5mbV9tYXNrID0gcHhhX3JlZ19sYXlvdXRbaTJjX3R5cGVdLmZtOworKwlpMmMtPmhzX21hc2sgPSBweGFfcmVnX2xheW91dFtpMmNfdHlwZV0uaHM7CisgCisgCWlmIChpMmNfdHlwZSAhPSBSRUdTX0NFNDEwMCkKKyAJCWkyYy0+cmVnX2lzYXIgPSBpMmMtPnJlZ19iYXNlICsgcHhhX3JlZ19sYXlvdXRbaTJjX3R5cGVdLmlzYXI7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvODEwLXY1LjgtaTJjLXB4YS1tb3ZlLXByaXZhdGUtZGVmaW5pdGlvbnMtdG8taTJjLXB4YS5jLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzgxMC12NS44LWkyYy1weGEtbW92ZS1wcml2YXRlLWRlZmluaXRpb25zLXRvLWkyYy1weGEuYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGE0NjMwCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzgxMC12NS44LWkyYy1weGEtbW92ZS1wcml2YXRlLWRlZmluaXRpb25zLXRvLWkyYy1weGEuYy5wYXRjaApAQCAtMCwwICsxLDEyOCBAQAorRnJvbTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KK0JjYzogbGludXhAbWFpbC5hcm1saW51eC5vcmcudWsKK0NjOiBsaW51eC1pMmNAdmdlci5rZXJuZWwub3JnCitTdWJqZWN0OiBbUEFUQ0ggMDgvMTddIGkyYzogcHhhOiBtb3ZlIHByaXZhdGUgZGVmaW5pdGlvbnMgdG8gaTJjLXB4YS5jCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorCitNb3ZlIGRyaXZlci1wcml2YXRlIGRlZmluaXRpb25zIG91dCBvZiB0aGUgaTJjLXB4YS5oIHBsYXRmb3JtIGRhdGEKK2hlYWRlciBmaWxlIGludG8gdGhlIGRyaXZlciBpdHNlbGYuIE5vdGhpbmcgb3V0c2lkZSBvZiB0aGUgZHJpdmVyCittYWtlcyB1c2Ugb2YgdGhlc2UgY29uc3RhbnRzLgorCitTaWduZWQtb2ZmLWJ5OiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorLS0tCisgZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYyAgICAgICAgICB8IDQzICsrKysrKysrKysrKysrKysrKysrKysrKworIGluY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9pMmMtcHhhLmggfCA0OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDQzIGluc2VydGlvbnMoKyksIDQ4IGRlbGV0aW9ucygtKQorCistLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jCisrKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jCitAQCAtODYsNiArODYsNDkgQEAKKyAjZGVmaW5lIElXQ1JfSFNfQ05UMl9TSElGVAkxMAorICNkZWZpbmUgSVdDUl9IU19DTlQyX01BU0sJKDB4MUYgPDwgSVdDUl9IU19DTlQyX1NISUZUKQorIAorKy8qIG5lZWQgYSBsb25nZXIgdGltZW91dCBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGZhY3Qgd2UgbWF5IHdlbGwgYmUKKysgKiBsb29raW5nIGF0IGEgbXVsdGktbWFzdGVyIGVudmlyb25tZW50CisrICovCisrI2RlZmluZSBERUZfVElNRU9VVCAgICAgICAgICAgICAzMgorKworKyNkZWZpbmUgQlVTX0VSUk9SICAgICAgICAgICAgICAgKC1FUkVNT1RFSU8pCisrI2RlZmluZSBYRkVSX05BS0VEICAgICAgICAgICAgICAoLUVDT05OUkVGVVNFRCkKKysjZGVmaW5lIEkyQ19SRVRSWSAgICAgICAgICAgICAgICgtMjAwMCkgLyogYW4gZXJyb3IgaGFzIG9jY3VycmVkIHJldHJ5IHRyYW5zbWl0ICovCisrCisrLyogSUNSIGluaXRpYWxpemUgYml0IHZhbHVlcworKyAqCisrICogMTUgRk0gICAgIDAgKDEwMCBrSHogb3BlcmF0aW9uKQorKyAqIDE0IFVSICAgICAwIChObyB1bml0IHJlc2V0KQorKyAqIDEzIFNBRElFICAwIChEaXNhYmxlcyB0aGUgdW5pdCBmcm9tIGludGVycnVwdGluZyBvbiBzbGF2ZSBhZGRyZXNzZXMKKysgKiAgICAgICAgICAgICAgbWF0Y2hpbmcgaXRzIHNsYXZlIGFkZHJlc3MpCisrICogMTIgQUxESUUgIDAgKERpc2FibGVzIHRoZSB1bml0IGZyb20gaW50ZXJydXB0IHdoZW4gaXQgbG9zZXMgYXJiaXRyYXRpb24KKysgKiAgICAgICAgICAgICAgaW4gbWFzdGVyIG1vZGUpCisrICogMTEgU1NESUUgIDAgKERpc2FibGVzIGludGVycnVwdHMgZnJvbSBhIHNsYXZlIHN0b3AgZGV0ZWN0ZWQsIGluIHNsYXZlIG1vZGUpCisrICogMTAgQkVJRSAgIDEgKEVuYWJsZSBpbnRlcnJ1cHRzIGZyb20gZGV0ZWN0ZWQgYnVzIGVycm9ycywgbm8gQUNLIHNlbnQpCisrICogIDkgSVJGSUUgIDEgKEVuYWJsZSBpbnRlcnJ1cHRzIGZyb20gZnVsbCBidWZmZXIgcmVjZWl2ZWQpCisrICogIDggSVRFSUUgIDEgKEVuYWJsZXMgdGhlIEkyQyB1bml0IHRvIGludGVycnVwdCB3aGVuIHRyYW5zbWl0IGJ1ZmZlciBlbXB0eSkKKysgKiAgNyBHQ0QgICAgMSAoRGlzYWJsZXMgaTJjIHVuaXQgcmVzcG9uc2UgdG8gZ2VuZXJhbCBjYWxsIG1lc3NhZ2VzIGFzIGEgc2xhdmUpCisrICogIDYgSVVFICAgIDAgKERpc2FibGUgdW5pdCB1bnRpbCB3ZSBjaGFuZ2Ugc2V0dGluZ3MpCisrICogIDUgU0NMRSAgIDEgKEVuYWJsZXMgdGhlIGkyYyBjbG9jayBvdXRwdXQgZm9yIG1hc3RlciBtb2RlIChkcml2ZXMgU0NMKQorKyAqICA0IE1BICAgICAwIChPbmx5IHNlbmQgc3RvcCB3aXRoIHRoZSBJQ1Igc3RvcCBiaXQpCisrICogIDMgVEIgICAgIDAgKFdlIGFyZSBub3QgdHJhbnNtaXR0aW5nIGEgYnl0ZSBpbml0aWFsbHkpCisrICogIDIgQUNLTkFLIDAgKFNlbmQgYW4gQUNLIGFmdGVyIHRoZSB1bml0IHJlY2VpdmVzIGEgYnl0ZSkKKysgKiAgMSBTVE9QICAgMCAoRG8gbm90IHNlbmQgYSBTVE9QKQorKyAqICAwIFNUQVJUICAwIChEbyBub3Qgc2VuZCBhIFNUQVJUKQorKyAqLworKyNkZWZpbmUgSTJDX0lDUl9JTklUCShJQ1JfQkVJRSB8IElDUl9JUkZJRSB8IElDUl9JVEVJRSB8IElDUl9HQ0QgfCBJQ1JfU0NMRSkKKysKKysvKiBJMkMgc3RhdHVzIHJlZ2lzdGVyIGluaXQgdmFsdWVzCisrICoKKysgKiAxMCBCRUQgICAgMSAoQ2xlYXIgYnVzIGVycm9yIGRldGVjdGVkKQorKyAqICA5IFNBRCAgICAxIChDbGVhciBzbGF2ZSBhZGRyZXNzIGRldGVjdGVkKQorKyAqICA3IElSRiAgICAxIChDbGVhciBJREJSIFJlY2VpdmUgRnVsbCkKKysgKiAgNiBJVEUgICAgMSAoQ2xlYXIgSURCUiBUcmFuc21pdCBFbXB0eSkKKysgKiAgNSBBTEQgICAgMSAoQ2xlYXIgQXJiaXRyYXRpb24gTG9zcyBEZXRlY3RlZCkKKysgKiAgNCBTU0QgICAgMSAoQ2xlYXIgU2xhdmUgU3RvcCBEZXRlY3RlZCkKKysgKi8KKysjZGVmaW5lIEkyQ19JU1JfSU5JVAkweDdGRiAgLyogc3RhdHVzIHJlZ2lzdGVyIGluaXQgKi8KKysKKyBzdHJ1Y3QgcHhhX3JlZ19sYXlvdXQgeworIAl1MzIgaWJtcjsKKyAJdTMyIGlkYnI7CistLS0gYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvaTJjLXB4YS5oCisrKysgYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvaTJjLXB4YS5oCitAQCAtNyw1NCArNyw2IEBACisgI2lmbmRlZiBfSTJDX1BYQV9IXworICNkZWZpbmUgX0kyQ19QWEFfSF8KKyAKKy0jaWYgMAorLSNkZWZpbmUgREVGX1RJTUVPVVQgICAgICAgICAgICAgMworLSNlbHNlCistLyogbmVlZCBhIGxvbmdlciB0aW1lb3V0IGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCB0aGUgZmFjdCB3ZSBtYXkgd2VsbCBiZQorLSAqIGxvb2tpbmcgYXQgYSBtdWx0aS1tYXN0ZXIgZW52aXJvbm1lbnQKKy0qLworLSNkZWZpbmUgREVGX1RJTUVPVVQgICAgICAgICAgICAgMzIKKy0jZW5kaWYKKy0KKy0jZGVmaW5lIEJVU19FUlJPUiAgICAgICAgICAgICAgICgtRVJFTU9URUlPKQorLSNkZWZpbmUgWEZFUl9OQUtFRCAgICAgICAgICAgICAgKC1FQ09OTlJFRlVTRUQpCistI2RlZmluZSBJMkNfUkVUUlkgICAgICAgICAgICAgICAoLTIwMDApIC8qIGFuIGVycm9yIGhhcyBvY2N1cnJlZCByZXRyeSB0cmFuc21pdCAqLworLQorLS8qIElDUiBpbml0aWFsaXplIGJpdCB2YWx1ZXMKKy0qCistKiAgMTUuIEZNICAgICAgIDAgKDEwMCBLaHogb3BlcmF0aW9uKQorLSogIDE0LiBVUiAgICAgICAwIChObyB1bml0IHJlc2V0KQorLSogIDEzLiBTQURJRSAgICAwIChEaXNhYmxlcyB0aGUgdW5pdCBmcm9tIGludGVycnVwdGluZyBvbiBzbGF2ZSBhZGRyZXNzZXMKKy0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hpbmcgaXRzIHNsYXZlIGFkZHJlc3MpCistKiAgMTIuIEFMRElFICAgIDAgKERpc2FibGVzIHRoZSB1bml0IGZyb20gaW50ZXJydXB0IHdoZW4gaXQgbG9zZXMgYXJiaXRyYXRpb24KKy0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gbWFzdGVyIG1vZGUpCistKiAgMTEuIFNTRElFICAgIDAgKERpc2FibGVzIGludGVycnVwdHMgZnJvbSBhIHNsYXZlIHN0b3AgZGV0ZWN0ZWQsIGluIHNsYXZlIG1vZGUpCistKiAgMTAuIEJFSUUgICAgIDEgKEVuYWJsZSBpbnRlcnJ1cHRzIGZyb20gZGV0ZWN0ZWQgYnVzIGVycm9ycywgbm8gQUNLIHNlbnQpCistKiAgOS4gIElSRklFICAgIDEgKEVuYWJsZSBpbnRlcnJ1cHRzIGZyb20gZnVsbCBidWZmZXIgcmVjZWl2ZWQpCistKiAgOC4gIElURUlFICAgIDEgKEVuYWJsZXMgdGhlIEkyQyB1bml0IHRvIGludGVycnVwdCB3aGVuIHRyYW5zbWl0IGJ1ZmZlciBlbXB0eSkKKy0qICA3LiAgR0NEICAgICAgMSAoRGlzYWJsZXMgaTJjIHVuaXQgcmVzcG9uc2UgdG8gZ2VuZXJhbCBjYWxsIG1lc3NhZ2VzIGFzIGEgc2xhdmUpCistKiAgNi4gIElVRSAgICAgIDAgKERpc2FibGUgdW5pdCB1bnRpbCB3ZSBjaGFuZ2Ugc2V0dGluZ3MpCistKiAgNS4gIFNDTEUgICAgIDEgKEVuYWJsZXMgdGhlIGkyYyBjbG9jayBvdXRwdXQgZm9yIG1hc3RlciBtb2RlIChkcml2ZXMgU0NMKQorLSogIDQuICBNQSAgICAgICAwIChPbmx5IHNlbmQgc3RvcCB3aXRoIHRoZSBJQ1Igc3RvcCBiaXQpCistKiAgMy4gIFRCICAgICAgIDAgKFdlIGFyZSBub3QgdHJhbnNtaXR0aW5nIGEgYnl0ZSBpbml0aWFsbHkpCistKiAgMi4gIEFDS05BSyAgIDAgKFNlbmQgYW4gQUNLIGFmdGVyIHRoZSB1bml0IHJlY2VpdmVzIGEgYnl0ZSkKKy0qICAxLiAgU1RPUCAgICAgMCAoRG8gbm90IHNlbmQgYSBTVE9QKQorLSogIDAuICBTVEFSVCAgICAwIChEbyBub3Qgc2VuZCBhIFNUQVJUKQorLSoKKy0qLworLSNkZWZpbmUgSTJDX0lDUl9JTklUCShJQ1JfQkVJRSB8IElDUl9JUkZJRSB8IElDUl9JVEVJRSB8IElDUl9HQ0QgfCBJQ1JfU0NMRSkKKy0KKy0vKiBJMkMgc3RhdHVzIHJlZ2lzdGVyIGluaXQgdmFsdWVzCistICoKKy0gKiAxMC4gQkVEICAgICAgMSAoQ2xlYXIgYnVzIGVycm9yIGRldGVjdGVkKQorLSAqIDkuICBTQUQgICAgICAxIChDbGVhciBzbGF2ZSBhZGRyZXNzIGRldGVjdGVkKQorLSAqIDcuICBJUkYgICAgICAxIChDbGVhciBJREJSIFJlY2VpdmUgRnVsbCkKKy0gKiA2LiAgSVRFICAgICAgMSAoQ2xlYXIgSURCUiBUcmFuc21pdCBFbXB0eSkKKy0gKiA1LiAgQUxEICAgICAgMSAoQ2xlYXIgQXJiaXRyYXRpb24gTG9zcyBEZXRlY3RlZCkKKy0gKiA0LiAgU1NEICAgICAgMSAoQ2xlYXIgU2xhdmUgU3RvcCBEZXRlY3RlZCkKKy0gKi8KKy0jZGVmaW5lIEkyQ19JU1JfSU5JVAkweDdGRiAgLyogc3RhdHVzIHJlZ2lzdGVyIGluaXQgKi8KKy0KKyBzdHJ1Y3QgaTJjX3NsYXZlX2NsaWVudDsKKyAKKyBzdHJ1Y3QgaTJjX3B4YV9wbGF0Zm9ybV9kYXRhIHsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC84MTEtdjUuOC1pMmMtcHhhLW1vdmUtRFQtSURzLWFsb25nLXNpZGUtcGxhdGZvcm0tSURzLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzgxMS12NS44LWkyYy1weGEtbW92ZS1EVC1JRHMtYWxvbmctc2lkZS1wbGF0Zm9ybS1JRHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI1NjUyMgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC84MTEtdjUuOC1pMmMtcHhhLW1vdmUtRFQtSURzLWFsb25nLXNpZGUtcGxhdGZvcm0tSURzLnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK0Zyb206IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CitCY2M6IGxpbnV4QG1haWwuYXJtbGludXgub3JnLnVrCitDYzogbGludXgtaTJjQHZnZXIua2VybmVsLm9yZworU3ViamVjdDogW1BBVENIIDA5LzE3XSBpMmM6IHB4YTogbW92ZSBEVCBJRHMgYWxvbmcgc2lkZSBwbGF0Zm9ybSBJRHMKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmUKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCisKK01vdmUgdGhlIElEIHRhYmxlcyBpbnRvIG9uZSBwbGFjZSwgbmVhciB0aGUgZGV2aWNlIGRlcGVuZGVudCBkYXRhLgorCitTaWduZWQtb2ZmLWJ5OiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorLS0tCisgZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYyB8IDE4ICsrKysrKysrKy0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKKysrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKK0BAIC0yMDAsNiArMjAwLDE1IEBAIHN0YXRpYyBzdHJ1Y3QgcHhhX3JlZ19sYXlvdXQgcHhhX3JlZ19sYXkKKyAJfSwKKyB9OworIAorK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGkyY19weGFfZHRfaWRzW10gPSB7CisrCXsgLmNvbXBhdGlibGUgPSAibXJ2bCxweGEtaTJjIiwgLmRhdGEgPSAodm9pZCAqKVJFR1NfUFhBMlhYIH0sCisrCXsgLmNvbXBhdGlibGUgPSAibXJ2bCxwd3JpMmMiLCAuZGF0YSA9ICh2b2lkICopUkVHU19QWEEzWFggfSwKKysJeyAuY29tcGF0aWJsZSA9ICJtcnZsLG1tcC10d3NpIiwgLmRhdGEgPSAodm9pZCAqKVJFR1NfUFhBOTEwIH0sCisrCXsgLmNvbXBhdGlibGUgPSAibWFydmVsbCxhcm1hZGEtMzcwMC1pMmMiLCAuZGF0YSA9ICh2b2lkICopUkVHU19BMzcwMCB9LAorKwl7fQorK307CisrTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgaTJjX3B4YV9kdF9pZHMpOworKworIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkIGkyY19weGFfaWRfdGFibGVbXSA9IHsKKyAJeyAicHhhMnh4LWkyYyIsCQlSRUdTX1BYQTJYWCB9LAorIAl7ICJweGEzeHgtcHdyaTJjIiwJUkVHU19QWEEzWFggfSwKK0BAIC0xMTc4LDE1ICsxMTg3LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIGkyY19weAorIAkuZnVuY3Rpb25hbGl0eQk9IGkyY19weGFfZnVuY3Rpb25hbGl0eSwKKyB9OworIAorLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGkyY19weGFfZHRfaWRzW10gPSB7CistCXsgLmNvbXBhdGlibGUgPSAibXJ2bCxweGEtaTJjIiwgLmRhdGEgPSAodm9pZCAqKVJFR1NfUFhBMlhYIH0sCistCXsgLmNvbXBhdGlibGUgPSAibXJ2bCxwd3JpMmMiLCAuZGF0YSA9ICh2b2lkICopUkVHU19QWEEzWFggfSwKKy0JeyAuY29tcGF0aWJsZSA9ICJtcnZsLG1tcC10d3NpIiwgLmRhdGEgPSAodm9pZCAqKVJFR1NfUFhBOTEwIH0sCistCXsgLmNvbXBhdGlibGUgPSAibWFydmVsbCxhcm1hZGEtMzcwMC1pMmMiLCAuZGF0YSA9ICh2b2lkICopUkVHU19BMzcwMCB9LAorLQl7fQorLX07CistTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgaTJjX3B4YV9kdF9pZHMpOworLQorIHN0YXRpYyBpbnQgaTJjX3B4YV9wcm9iZV9kdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBzdHJ1Y3QgcHhhX2kyYyAqaTJjLAorIAkJCSAgICBlbnVtIHB4YV9pMmNfdHlwZXMgKmkyY190eXBlcykKKyB7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvODEzLXY1LjgtaTJjLXB4YS1jbGVhbi11cC1kZWNvZGVfYml0cy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC84MTMtdjUuOC1pMmMtcHhhLWNsZWFuLXVwLWRlY29kZV9iaXRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkY2Y5NjkKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvODEzLXY1LjgtaTJjLXB4YS1jbGVhbi11cC1kZWNvZGVfYml0cy5wYXRjaApAQCAtMCwwICsxLDUzIEBACitGcm9tOiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorQmNjOiBsaW51eEBtYWlsLmFybWxpbnV4Lm9yZy51aworQ2M6IGxpbnV4LWkyY0B2Z2VyLmtlcm5lbC5vcmcKK1N1YmplY3Q6IFtQQVRDSCAxMS8xN10gaTJjOiBweGE6IGNsZWFuIHVwIGRlY29kZV9iaXRzKCkKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmUKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCisKK0NsZWFuIHVwIGRlY29kZV9iaXRzKCkgdG8gdXNlIHByX2NvbnQoKSwgYW5kIG1vdmUgdGhlIG5ld2xpbmUgaW50byB0aGUKK2Z1bmN0aW9uIHJhdGhlciB0aGFuIGF0IGl0cyB0d28gY2FsbHNpdGVzLiBBdm9pZCBwcmludGluZyBhbgordW5uZWNlc3Nhcnkgc3BhY2UgYmVmb3JlIHRoZSBuZXdsaW5lLgorCitTaWduZWQtb2ZmLWJ5OiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorLS0tCisgZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYyB8IDcgKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKKysrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKK0BAIC0yODcsMTMgKzI4NywxNCBAQCBzdHJ1Y3QgYml0cyB7Cisgc3RhdGljIGlubGluZSB2b2lkCisgZGVjb2RlX2JpdHMoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBzdHJ1Y3QgYml0cyAqYml0cywgaW50IG51bSwgdTMyIHZhbCkKKyB7CistCXByaW50aygiJXMgJTA4eDogIiwgcHJlZml4LCB2YWwpOworKwlwcmludGsoIiVzICUwOHg6IiwgcHJlZml4LCB2YWwpOworIAl3aGlsZSAobnVtLS0pIHsKKyAJCWNvbnN0IGNoYXIgKnN0ciA9IHZhbCAmIGJpdHMtPm1hc2sgPyBiaXRzLT5zZXQgOiBiaXRzLT51bnNldDsKKyAJCWlmIChzdHIpCistCQkJcHJpbnRrKCIlcyAiLCBzdHIpOworKwkJCXByX2NvbnQoIiAlcyIsIHN0cik7CisgCQliaXRzKys7CisgCX0KKysJcHJfY29udCgiXG4iKTsKKyB9CisgCisgc3RhdGljIGNvbnN0IHN0cnVjdCBiaXRzIGlzcl9iaXRzW10gPSB7CitAQCAtMzEzLDcgKzMxNCw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYml0cyBpc3JfYml0c1tdID0geworIHN0YXRpYyB2b2lkIGRlY29kZV9JU1IodW5zaWduZWQgaW50IHZhbCkKKyB7CisgCWRlY29kZV9iaXRzKEtFUk5fREVCVUcgIklTUiIsIGlzcl9iaXRzLCBBUlJBWV9TSVpFKGlzcl9iaXRzKSwgdmFsKTsKKy0JcHJpbnRrKCJcbiIpOworIH0KKyAKKyBzdGF0aWMgY29uc3Qgc3RydWN0IGJpdHMgaWNyX2JpdHNbXSA9IHsKK0BAIC0zMzgsNyArMzM4LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBiaXRzIGljcl9iaXRzW10gPSB7Cisgc3RhdGljIHZvaWQgZGVjb2RlX0lDUih1bnNpZ25lZCBpbnQgdmFsKQorIHsKKyAJZGVjb2RlX2JpdHMoS0VSTl9ERUJVRyAiSUNSIiwgaWNyX2JpdHMsIEFSUkFZX1NJWkUoaWNyX2JpdHMpLCB2YWwpOworLQlwcmludGsoIlxuIik7CisgfQorICNlbmRpZgorIApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzgxNC12NS44LWkyYy1weGEtZml4LWkyY19weGFfd2FpdF9idXNfbm90X2J1c3ktYm91bmRhcnktY29uZGkucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvODE0LXY1LjgtaTJjLXB4YS1maXgtaTJjX3B4YV93YWl0X2J1c19ub3RfYnVzeS1ib3VuZGFyeS1jb25kaS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWFkZWNjCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzgxNC12NS44LWkyYy1weGEtZml4LWkyY19weGFfd2FpdF9idXNfbm90X2J1c3ktYm91bmRhcnktY29uZGkucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorRnJvbTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KK0JjYzogbGludXhAbWFpbC5hcm1saW51eC5vcmcudWsKK0NjOiBsaW51eC1pMmNAdmdlci5rZXJuZWwub3JnCitTdWJqZWN0OiBbUEFUQ0ggMTIvMTddIGkyYzogcHhhOiBmaXggaTJjX3B4YV93YWl0X2J1c19ub3RfYnVzeSgpIGJvdW5kYXJ5CisgY29uZGl0aW9uCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorCitGaXggaTJjX3B4YV93YWl0X2J1c19ub3RfYnVzeSgpJ3MgYm91bmRhcnkgY29uZGl0aW9ucywgc28gdGhhdCBhCitjb2luY2lkZW50YWwgc3VjY2VzcyBhbmQgdGltZW91dCByZXN1bHRzIGluIHRoZSBmdW5jdGlvbiByZXR1cm5pbmcKK3N1Y2Nlc3MuCisKK1NpZ25lZC1vZmYtYnk6IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CistLS0KKyBkcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jIHwgMTcgKysrKysrKysrKysrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYworKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYworQEAgLTQxNywxOSArNDE3LDI2IEBAIHN0YXRpYyB2b2lkIGkyY19weGFfYWJvcnQoc3RydWN0IHB4YV9pMmMKKyBzdGF0aWMgaW50IGkyY19weGFfd2FpdF9idXNfbm90X2J1c3koc3RydWN0IHB4YV9pMmMgKmkyYykKKyB7CisgCWludCB0aW1lb3V0ID0gREVGX1RJTUVPVVQ7CisrCXUzMiBpc3I7CisgCistCXdoaWxlICh0aW1lb3V0LS0gJiYgcmVhZGwoX0lTUihpMmMpKSAmIChJU1JfSUJCIHwgSVNSX1VCKSkgeworLQkJaWYgKChyZWFkbChfSVNSKGkyYykpICYgSVNSX1NBRCkgIT0gMCkKKysJd2hpbGUgKDEpIHsKKysJCWlzciA9IHJlYWRsKF9JU1IoaTJjKSk7CisrCQlpZiAoIShpc3IgJiAoSVNSX0lCQiB8IElTUl9VQikpKQorKwkJCXJldHVybiAwOworKworKwkJaWYgKGlzciAmIElTUl9TQUQpCisgCQkJdGltZW91dCArPSA0OworIAorKwkJaWYgKCF0aW1lb3V0LS0pCisrCQkJYnJlYWs7CisrCisgCQltc2xlZXAoMik7CisgCQlzaG93X3N0YXRlKGkyYyk7CisgCX0KKyAKKy0JaWYgKHRpbWVvdXQgPCAwKQorLQkJc2hvd19zdGF0ZShpMmMpOworKwlzaG93X3N0YXRlKGkyYyk7CisgCistCXJldHVybiB0aW1lb3V0IDwgMCA/IEkyQ19SRVRSWSA6IDA7CisrCXJldHVybiBJMkNfUkVUUlk7CisgfQorIAorIHN0YXRpYyBpbnQgaTJjX3B4YV93YWl0X21hc3RlcihzdHJ1Y3QgcHhhX2kyYyAqaTJjKQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzgxNS12NS44LWkyYy1weGEtY29uc29saWRhdGUtaTJjX3B4YV8teGZlci1pbXBsZW1lbnRhdGlvbnMucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvODE1LXY1LjgtaTJjLXB4YS1jb25zb2xpZGF0ZS1pMmNfcHhhXy14ZmVyLWltcGxlbWVudGF0aW9ucy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGViZDRjCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzgxNS12NS44LWkyYy1weGEtY29uc29saWRhdGUtaTJjX3B4YV8teGZlci1pbXBsZW1lbnRhdGlvbnMucGF0Y2gKQEAgLTAsMCArMSw5MSBAQAorRnJvbTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KK0JjYzogbGludXhAbWFpbC5hcm1saW51eC5vcmcudWsKK1N1YmplY3Q6IFtQQVRDSCAxLzddIGkyYzogcHhhOiBjb25zb2xpZGF0ZSBpMmNfcHhhXyp4ZmVyKCkgaW1wbGVtZW50YXRpb25zCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorCitNb3N0IG9mIGkyY19weGFfcGlvX3hmZXIoKSBhbmQgaTJjX3B4YV94ZmVyKCkgYXJlIGlkZW50aWNhbDsgdGhlIG9ubHkKK2RpZmZlcmVuY2VzIGFyZSB0aGF0IGkyY19weGFfcGlvX3hmZXIoKSBtYXkgcmVzZXQgdGhlIGJ1cywgYW5kIHRoZXkKK3VzZSBkaWZmZXJlbnQgdW5kZXJseWluZyB0cmFuc2ZlciBmdW5jdGlvbnMuIFRoZSByZXRyeSBsb29wIGlzIHRoZQorc2FtZS4gQ29uc29saWRhdGUgdGhlc2UgdHdvIGZ1bmN0aW9ucy4KKworU2lnbmVkLW9mZi1ieTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KKy0tLQorIGRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMgfCAzNiArKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKSwgMjAgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKKysrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKK0BAIC0xMDU5LDE4ICsxMDU5LDIwIEBAIHN0YXRpYyBpbnQgaTJjX3B4YV9kb194ZmVyKHN0cnVjdCBweGFfaTIKKyAJcmV0dXJuIHJldDsKKyB9CisgCistc3RhdGljIGludCBpMmNfcHhhX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBzdHJ1Y3QgaTJjX21zZyBtc2dzW10sIGludCBudW0pCisrc3RhdGljIGludCBpMmNfcHhhX2ludGVybmFsX3hmZXIoc3RydWN0IHB4YV9pMmMgKmkyYywKKysJCQkJIHN0cnVjdCBpMmNfbXNnICptc2dzLCBpbnQgbnVtLAorKwkJCQkgaW50ICgqeGZlcikoc3RydWN0IHB4YV9pMmMgKiwKKysJCQkJCSAgICAgc3RydWN0IGkyY19tc2cgKiwgaW50IG51bSkpCisgeworLQlzdHJ1Y3QgcHhhX2kyYyAqaTJjID0gYWRhcC0+YWxnb19kYXRhOworIAlpbnQgcmV0LCBpOworIAorLQlmb3IgKGkgPSBhZGFwLT5yZXRyaWVzOyBpID49IDA7IGktLSkgeworLQkJcmV0ID0gaTJjX3B4YV9kb194ZmVyKGkyYywgbXNncywgbnVtKTsKKysJZm9yIChpID0gaTJjLT5hZGFwLnJldHJpZXM7IGkgPj0gMDsgaS0tKSB7CisrCQlyZXQgPSB4ZmVyKGkyYywgbXNncywgbnVtKTsKKyAJCWlmIChyZXQgIT0gSTJDX1JFVFJZKQorIAkJCWdvdG8gb3V0OworIAorIAkJaWYgKGkyY19kZWJ1ZykKKy0JCQlkZXZfZGJnKCZhZGFwLT5kZXYsICJSZXRyeWluZyB0cmFuc21pc3Npb25cbiIpOworKwkJCWRldl9kYmcoJmkyYy0+YWRhcC5kZXYsICJSZXRyeWluZyB0cmFuc21pc3Npb25cbiIpOworIAkJdWRlbGF5KDEwMCk7CisgCX0KKyAJaTJjX3B4YV9zY3JlYW1fYmx1ZV9tdXJkZXIoaTJjLCAiZXhoYXVzdGVkIHJldHJpZXMiKTsKK0BAIC0xMDgwLDYgKzEwODIsMTQgQEAgc3RhdGljIGludCBpMmNfcHhhX3hmZXIoc3RydWN0IGkyY19hZGFwdAorIAlyZXR1cm4gcmV0OworIH0KKyAKKytzdGF0aWMgaW50IGkyY19weGFfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsCisrCQkJc3RydWN0IGkyY19tc2cgbXNnc1tdLCBpbnQgbnVtKQorK3sKKysJc3RydWN0IHB4YV9pMmMgKmkyYyA9IGFkYXAtPmFsZ29fZGF0YTsKKysKKysJcmV0dXJuIGkyY19weGFfaW50ZXJuYWxfeGZlcihpMmMsIG1zZ3MsIG51bSwgaTJjX3B4YV9kb194ZmVyKTsKKyt9CisrCisgc3RhdGljIHUzMiBpMmNfcHhhX2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQorIHsKKyAJcmV0dXJuIEkyQ19GVU5DX0kyQyB8IEkyQ19GVU5DX1NNQlVTX0VNVUwgfAorQEAgLTExNjMsNyArMTE3Myw2IEBAIHN0YXRpYyBpbnQgaTJjX3B4YV9waW9feGZlcihzdHJ1Y3QgaTJjX2EKKyAJCQkgICAgc3RydWN0IGkyY19tc2cgbXNnc1tdLCBpbnQgbnVtKQorIHsKKyAJc3RydWN0IHB4YV9pMmMgKmkyYyA9IGFkYXAtPmFsZ29fZGF0YTsKKy0JaW50IHJldCwgaTsKKyAKKyAJLyogSWYgdGhlIEkyQyBjb250cm9sbGVyIGlzIGRpc2FibGVkIHdlIG5lZWQgdG8gcmVzZXQgaXQKKyAJICAocHJvYmFibHkgZHVlIHRvIGEgc3VzcGVuZC9yZXN1bWUgZGVzdHJveWluZyBzdGF0ZSkuIFdlIGRvCitAQCAtMTE3MiwyMCArMTE4MSw3IEBAIHN0YXRpYyBpbnQgaTJjX3B4YV9waW9feGZlcihzdHJ1Y3QgaTJjX2EKKyAJaWYgKCEocmVhZGwoX0lDUihpMmMpKSAmIElDUl9JVUUpKQorIAkJaTJjX3B4YV9yZXNldChpMmMpOworIAorLQlmb3IgKGkgPSBhZGFwLT5yZXRyaWVzOyBpID49IDA7IGktLSkgeworLQkJcmV0ID0gaTJjX3B4YV9kb19waW9feGZlcihpMmMsIG1zZ3MsIG51bSk7CistCQlpZiAocmV0ICE9IEkyQ19SRVRSWSkKKy0JCQlnb3RvIG91dDsKKy0KKy0JCWlmIChpMmNfZGVidWcpCistCQkJZGV2X2RiZygmYWRhcC0+ZGV2LCAiUmV0cnlpbmcgdHJhbnNtaXNzaW9uXG4iKTsKKy0JCXVkZWxheSgxMDApOworLQl9CistCWkyY19weGFfc2NyZWFtX2JsdWVfbXVyZGVyKGkyYywgImV4aGF1c3RlZCByZXRyaWVzIik7CistCXJldCA9IC1FUkVNT1RFSU87CistIG91dDoKKy0JaTJjX3B4YV9zZXRfc2xhdmUoaTJjLCByZXQpOworLQlyZXR1cm4gcmV0OworKwlyZXR1cm4gaTJjX3B4YV9pbnRlcm5hbF94ZmVyKGkyYywgbXNncywgbnVtLCBpMmNfcHhhX2RvX3Bpb194ZmVyKTsKKyB9CisgCisgc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIGkyY19weGFfcGlvX2FsZ29yaXRobSA9IHsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC84MTYtdjUuOC1pMmMtcHhhLWF2b2lkLWNvbXBsYWludHMtd2l0aC1ub24tcmVzcG9uc2l2ZS1zbGF2ZXMucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvODE2LXY1LjgtaTJjLXB4YS1hdm9pZC1jb21wbGFpbnRzLXdpdGgtbm9uLXJlc3BvbnNpdmUtc2xhdmVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZTZkYjgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvODE2LXY1LjgtaTJjLXB4YS1hdm9pZC1jb21wbGFpbnRzLXdpdGgtbm9uLXJlc3BvbnNpdmUtc2xhdmVzLnBhdGNoCkBAIC0wLDAgKzEsNjcgQEAKK0Zyb206IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CitCY2M6IGxpbnV4QG1haWwuYXJtbGludXgub3JnLnVrCitTdWJqZWN0OiBbUEFUQ0ggMi83XSBpMmM6IHB4YTogYXZvaWQgY29tcGxhaW50cyB3aXRoIG5vbi1yZXNwb25zaXZlIHNsYXZlcworTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZQorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKKworUnVubmluZyBpMmNkZXRlY3Qgb24gYSBQWEEgSTJDIGFkYXB0ZXIgaXMgdmVyeSBub2lzeTsgaXQgY29tcGxhaW5zCit3aGVuZXZlciBhIHNsYXZlIGZhaWxzIHRvIHJlc3BvbmQgdG8gdGhlIGFkZHJlc3MgY3ljbGUuICBTaW5jZSBpdCBpcworbm9ybWFsIHRvIHByb2JlIGZvciBzbGF2ZXMgaW4gdGhpcyB3YXksIHdlIHNob3VsZCBub3QgZmlsbCB0aGUga2VybmVsCitsb2cuICBUaGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZSB3aXRoIFNGUCBtb2R1bGVzIHRoYXQgdGFrZSBhIHdoaWxlIHRvCityZXNwb25kIG9uIHRoZSBJMkMgYnVzLCBhbmQgcHJvYmluZyB2aWEgdGhlIEkyQyBidXMgaXMgdGhlIG9ubHkgd2F5IHRvCitkZXRlY3QgdGhhdCB0aGV5IGFyZSByZWFkeS4KKworRml4IHRoaXMgYnkgY2hhbmdpbmcgdGhlIGludGVybmFsIHRyYW5zZmVyIHJldHVybiBjb2RlIGZyb20gSTJDX1JFVFJZCit0byBhIG5ldyBOT19TTEFWRSBjb2RlIChtYXBwZWQgdG8gLUVOWElPLCBhcyBwZXIgdGhlIEkyQyBkb2N1bWVudGF0aW9uCitmb3IgdGhpcyBjb25kaXRpb24sIGJ1dCB3ZSBzdGlsbCByZXR1cm4gLUVSRU1PVEVJTyB0byB0aGUgSTJDIHN0YWNrIHRvCittYWludGFpbiBsb25nIGVzdGFibGlzaGVkIGRyaXZlciBiZWhhdmlvdXIuKQorCitTaWduZWQtb2ZmLWJ5OiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorLS0tCisgZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYyB8IDEyICsrKysrKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKKysrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKK0BAIC05MSw2ICs5MSw3IEBACisgICovCisgI2RlZmluZSBERUZfVElNRU9VVCAgICAgICAgICAgICAzMgorIAorKyNkZWZpbmUgTk9fU0xBVkUJCSgtRU5YSU8pCisgI2RlZmluZSBCVVNfRVJST1IgICAgICAgICAgICAgICAoLUVSRU1PVEVJTykKKyAjZGVmaW5lIFhGRVJfTkFLRUQgICAgICAgICAgICAgICgtRUNPTk5SRUZVU0VEKQorICNkZWZpbmUgSTJDX1JFVFJZICAgICAgICAgICAgICAgKC0yMDAwKSAvKiBhbiBlcnJvciBoYXMgb2NjdXJyZWQgcmV0cnkgdHJhbnNtaXQgKi8KK0BAIC04MzgsNyArODM5LDcgQEAgc3RhdGljIHZvaWQgaTJjX3B4YV9pcnFfdHhlbXB0eShzdHJ1Y3QgcAorIAkJICovCisgCQlpZiAoaXNyICYgSVNSX0FDS05BSykgeworIAkJCWlmIChpMmMtPm1zZ19wdHIgPT0gMCAmJiBpMmMtPm1zZ19pZHggPT0gMCkKKy0JCQkJcmV0ID0gSTJDX1JFVFJZOworKwkJCQlyZXQgPSBOT19TTEFWRTsKKyAJCQllbHNlCisgCQkJCXJldCA9IFhGRVJfTkFLRUQ7CisgCQl9CitAQCAtMTA2NiwxNiArMTA2NywxOSBAQCBzdGF0aWMgaW50IGkyY19weGFfaW50ZXJuYWxfeGZlcihzdHJ1Y3QKKyB7CisgCWludCByZXQsIGk7CisgCistCWZvciAoaSA9IGkyYy0+YWRhcC5yZXRyaWVzOyBpID49IDA7IGktLSkgeworKwlmb3IgKGkgPSAwOyA7ICkgeworIAkJcmV0ID0geGZlcihpMmMsIG1zZ3MsIG51bSk7CistCQlpZiAocmV0ICE9IEkyQ19SRVRSWSkKKysJCWlmIChyZXQgIT0gSTJDX1JFVFJZICYmIHJldCAhPSBOT19TTEFWRSkKKyAJCQlnb3RvIG91dDsKKysJCWlmICgrK2kgPj0gaTJjLT5hZGFwLnJldHJpZXMpCisrCQkJYnJlYWs7CisgCisgCQlpZiAoaTJjX2RlYnVnKQorIAkJCWRldl9kYmcoJmkyYy0+YWRhcC5kZXYsICJSZXRyeWluZyB0cmFuc21pc3Npb25cbiIpOworIAkJdWRlbGF5KDEwMCk7CisgCX0KKy0JaTJjX3B4YV9zY3JlYW1fYmx1ZV9tdXJkZXIoaTJjLCAiZXhoYXVzdGVkIHJldHJpZXMiKTsKKysJaWYgKHJldCAhPSBOT19TTEFWRSkKKysJCWkyY19weGFfc2NyZWFtX2JsdWVfbXVyZGVyKGkyYywgImV4aGF1c3RlZCByZXRyaWVzIik7CisgCXJldCA9IC1FUkVNT1RFSU87CisgIG91dDoKKyAJaTJjX3B4YV9zZXRfc2xhdmUoaTJjLCByZXQpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzgxNy12NS44LWkyYy1weGEtZW5zdXJlLXRpbWVvdXQtbWVzc2FnZXMtYXJlLXVuaXF1ZS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC84MTctdjUuOC1pMmMtcHhhLWVuc3VyZS10aW1lb3V0LW1lc3NhZ2VzLWFyZS11bmlxdWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdhNzdiNgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC84MTctdjUuOC1pMmMtcHhhLWVuc3VyZS10aW1lb3V0LW1lc3NhZ2VzLWFyZS11bmlxdWUucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorRnJvbTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KK0JjYzogbGludXhAbWFpbC5hcm1saW51eC5vcmcudWsKK1N1YmplY3Q6IFtQQVRDSCAzLzddIGkyYzogcHhhOiBlbnN1cmUgdGltZW91dCBtZXNzYWdlcyBhcmUgdW5pcXVlCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorCitFbnN1cmUgdGhhdCB0aGUgdmFyaW91cyB0aW1lb3V0IG1lc3NhZ2VzIGNhbiBpZGVudGlmeSB3aGVyZSBpbiB0aGUgY29kZQordGhleSB3ZXJlIHByb2R1Y2VkIGZyb20gdG8gYWlkIGRlYnVnZ2luZy4KKworU2lnbmVkLW9mZi1ieTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KKy0tLQorIGRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMgfCA2ICsrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKKysrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKK0BAIC0xMDUyLDcgKzEwNTIsNyBAQCBzdGF0aWMgaW50IGkyY19weGFfZG9feGZlcihzdHJ1Y3QgcHhhX2kyCisgCXJldCA9IGkyYy0+bXNnX2lkeDsKKyAKKyAJaWYgKCF0aW1lb3V0ICYmIGkyYy0+bXNnX251bSkgeworLQkJaTJjX3B4YV9zY3JlYW1fYmx1ZV9tdXJkZXIoaTJjLCAidGltZW91dCIpOworKwkJaTJjX3B4YV9zY3JlYW1fYmx1ZV9tdXJkZXIoaTJjLCAidGltZW91dCB3aXRoIGFjdGl2ZSBtZXNzYWdlIik7CisgCQlyZXQgPSBJMkNfUkVUUlk7CisgCX0KKyAKK0BAIC0xMTIyLDcgKzExMjIsNyBAQCBzdGF0aWMgaW50IGkyY19weGFfcGlvX3NldF9tYXN0ZXIoc3RydWN0CisgCWlmICh0aW1lb3V0IDwgMCkgeworIAkJc2hvd19zdGF0ZShpMmMpOworIAkJZGV2X2VycigmaTJjLT5hZGFwLmRldiwKKy0JCQkiaTJjX3B4YTogdGltZW91dCB3YWl0aW5nIGZvciBidXMgZnJlZVxuIik7CisrCQkJImkyY19weGE6IHRpbWVvdXQgd2FpdGluZyBmb3IgYnVzIGZyZWUgKHNldF9tYXN0ZXIpXG4iKTsKKyAJCXJldHVybiBJMkNfUkVUUlk7CisgCX0KKyAKK0BAIC0xMTY2LDcgKzExNjYsNyBAQCBzdGF0aWMgaW50IGkyY19weGFfZG9fcGlvX3hmZXIoc3RydWN0IHB4CisgCisgb3V0OgorIAlpZiAodGltZW91dCA9PSAwKSB7CistCQlpMmNfcHhhX3NjcmVhbV9ibHVlX211cmRlcihpMmMsICJ0aW1lb3V0Iik7CisrCQlpMmNfcHhhX3NjcmVhbV9ibHVlX211cmRlcihpMmMsICJ0aW1lb3V0IChkb19waW9feGZlcikiKTsKKyAJCXJldCA9IEkyQ19SRVRSWTsKKyAJfQorIApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzgxOC12NS44LWkyYy1weGEtcmVtb3ZlLXNvbWUtdW5uZWNlc3NhcnktZGVidWcucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvODE4LXY1LjgtaTJjLXB4YS1yZW1vdmUtc29tZS11bm5lY2Vzc2FyeS1kZWJ1Zy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDM4NTg4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzgxOC12NS44LWkyYy1weGEtcmVtb3ZlLXNvbWUtdW5uZWNlc3NhcnktZGVidWcucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRnJvbTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KK0JjYzogbGludXhAbWFpbC5hcm1saW51eC5vcmcudWsKK1N1YmplY3Q6IFtQQVRDSCA0LzddIGkyYzogcHhhOiByZW1vdmUgc29tZSB1bm5lY2Vzc2FyeSBkZWJ1ZworTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZQorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKKworUmVtb3ZlIHVubmVjZXNzYXJ5IHNob3dfc3RhdGUoKSBpbiB0aGUgbG9vcCBpbnNpZGUKK2kyY19weGFfcGlvX3NldF9tYXN0ZXIoKSwgd2hpY2ggY2FuIGJlIHVubmVjZXNzYXJpbHkgdmVyYm9zZS4KKworUmVtb3ZlIHRoZSBpMmNfcHhhX3NjcmVhbV9ibHVlX211cmRlcigpIGluIGkyY19weGFfcGlvX3hmZXIoKSwgd2hpY2gKK3dpbGwgdHJpZ2dlciBpZiB3ZSBhcmUgcHJvYmluZyB0aGUgSTJDIGJ1cyBhbmQgYSBzbGF2ZSBkb2VzIG5vdAorcmVzcG9uZDsgdGhpcyBpcyBhIG5vcm1hbCBldmVudCwgYW5kIG5vdCBzb21ldGhpbmcgdG8gcmVwb3J0LgorCitTaWduZWQtb2ZmLWJ5OiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorLS0tCisgZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYyB8IDQgKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMyBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYworKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYworQEAgLTExMTQsMTAgKzExMTQsOCBAQCBzdGF0aWMgaW50IGkyY19weGFfcGlvX3NldF9tYXN0ZXIoc3RydWN0CisgCS8qCisgCSAqIFdhaXQgZm9yIHRoZSBidXMgdG8gYmVjb21lIGZyZWUuCisgCSAqLworLQl3aGlsZSAodGltZW91dC0tICYmIHJlYWRsKF9JU1IoaTJjKSkgJiAoSVNSX0lCQiB8IElTUl9VQikpIHsKKysJd2hpbGUgKHRpbWVvdXQtLSAmJiByZWFkbChfSVNSKGkyYykpICYgKElTUl9JQkIgfCBJU1JfVUIpKQorIAkJdWRlbGF5KDEwMDApOworLQkJc2hvd19zdGF0ZShpMmMpOworLQl9CisgCisgCWlmICh0aW1lb3V0IDwgMCkgeworIAkJc2hvd19zdGF0ZShpMmMpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzgyMC12NS44LWkyYy1weGEtdXNlLW1hc3Rlci1hYm9ydC1mb3ItZGV2aWNlLXByb2Jlcy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC84MjAtdjUuOC1pMmMtcHhhLXVzZS1tYXN0ZXItYWJvcnQtZm9yLWRldmljZS1wcm9iZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RlOWUzZgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC84MjAtdjUuOC1pMmMtcHhhLXVzZS1tYXN0ZXItYWJvcnQtZm9yLWRldmljZS1wcm9iZXMucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KK0JjYzogbGludXhAbWFpbC5hcm1saW51eC5vcmcudWsKK1N1YmplY3Q6IFtQQVRDSCA2LzddIGkyYzogcHhhOiB1c2UgbWFzdGVyLWFib3J0IGZvciBkZXZpY2UgcHJvYmVzCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorCitVc2UgbWFzdGVyLWFib3J0IHRvIHNlbmQgdGhlIHN0b3AgY29uZGl0aW9uIGFmdGVyIGFuIGFkZHJlc3MgY3ljbGUKK3JhdGhlciB0aGFuIHJlc2V0dGluZyB0aGUgY29udHJvbGxlci4KKworU2lnbmVkLW9mZi1ieTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KKy0tLQorIGRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMgfCAxMCArKy0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYworKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYworQEAgLTg5OSwxNCArODk5LDggQEAgc3RhdGljIHZvaWQgaTJjX3B4YV9pcnFfdHhlbXB0eShzdHJ1Y3QgcAorIAkJaWNyICY9IH5JQ1JfQUxESUU7CisgCQlpY3IgfD0gSUNSX1NUQVJUIHwgSUNSX1RCOworIAl9IGVsc2UgeworLQkJaWYgKGkyYy0+bXNnLT5sZW4gPT0gMCkgeworLQkJCS8qCistCQkJICogRGV2aWNlIHByb2JlcyBoYXZlIGEgbWVzc2FnZSBsZW5ndGggb2YgemVybworLQkJCSAqIGFuZCBuZWVkIHRoZSBidXMgdG8gYmUgcmVzZXQgYmVmb3JlIGl0IGNhbgorLQkJCSAqIGJlIHVzZWQgYWdhaW4uCistCQkJICovCistCQkJaTJjX3B4YV9yZXNldChpMmMpOworLQkJfQorKwkJaWYgKGkyYy0+bXNnLT5sZW4gPT0gMCkKKysJCQlpY3IgfD0gSUNSX01BOworIAkJaTJjX3B4YV9tYXN0ZXJfY29tcGxldGUoaTJjLCAwKTsKKyAJfQorIApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzgyMS12NS44LWkyYy1weGEtaW1wbGVtZW50LWdlbmVyaWMtaTJjLWJ1cy1yZWNvdmVyeS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC84MjEtdjUuOC1pMmMtcHhhLWltcGxlbWVudC1nZW5lcmljLWkyYy1idXMtcmVjb3ZlcnkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkyYjc2MwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC84MjEtdjUuOC1pMmMtcHhhLWltcGxlbWVudC1nZW5lcmljLWkyYy1idXMtcmVjb3ZlcnkucGF0Y2gKQEAgLTAsMCArMSwyODUgQEAKK0Zyb206IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CitCY2M6IGxpbnV4QG1haWwuYXJtbGludXgub3JnLnVrCitTdWJqZWN0OiBbUEFUQ0ggNy83XSBpMmM6IHB4YTogaW1wbGVtZW50IGdlbmVyaWMgaTJjIGJ1cyByZWNvdmVyeQorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZQorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKKworSW1wbGVtZW50IGdlbmVyaWMgR1BJTy1iYXNlZCBJMkMgYnVzIHJlY292ZXJ5IGZvciB0aGUgUFhBIEkyQyBkcml2ZXIuCisKK1Jldmlld2VkLWJ5OiBBbmRyZXcgTHVubiA8YW5kcmV3QGx1bm4uY2g+CitTaWduZWQtb2ZmLWJ5OiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorLS0tCisgZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYyB8IDE3NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxNTkgaW5zZXJ0aW9ucygrKSwgMTcgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKKysrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKK0BAIC0yMCw2ICsyMCw3IEBACisgI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisgI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorKyNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+CisgI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorICNpbmNsdWRlIDxsaW51eC9pMmMtcHhhLmg+CisgI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KK0BAIC0yOSw2ICszMCw3IEBACisgI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorICNpbmNsdWRlIDxsaW51eC9vZi5oPgorICNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKysjaW5jbHVkZSA8bGludXgvcGluY3RybC9jb25zdW1lci5oPgorICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9pMmMtcHhhLmg+CisgI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KK0BAIC0yNjEsNiArMjYzLDExIEBAIHN0cnVjdCBweGFfaTJjIHsKKyAJYm9vbAkJCWhpZ2htb2RlX2VudGVyOworIAl1MzIJCQlmbV9tYXNrOworIAl1MzIJCQloc19tYXNrOworKworKwlzdHJ1Y3QgaTJjX2J1c19yZWNvdmVyeV9pbmZvIHJlY292ZXJ5OworKwlzdHJ1Y3QgcGluY3RybAkJKnBpbmN0cmw7CisrCXN0cnVjdCBwaW5jdHJsX3N0YXRlCSpwaW5jdHJsX2RlZmF1bHQ7CisrCXN0cnVjdCBwaW5jdHJsX3N0YXRlCSpwaW5jdHJsX3JlY292ZXJ5OworIH07CisgCisgI2RlZmluZSBfSUJNUihpMmMpCSgoaTJjKS0+cmVnX2libXIpCitAQCAtNTYwLDEzICs1NjcsOCBAQCBzdGF0aWMgdm9pZCBpMmNfcHhhX3NldF9zbGF2ZShzdHJ1Y3QgcHhhCisgI2RlZmluZSBpMmNfcHhhX3NldF9zbGF2ZShpMmMsIGVycikJZG8geyB9IHdoaWxlICgwKQorICNlbmRpZgorIAorLXN0YXRpYyB2b2lkIGkyY19weGFfcmVzZXQoc3RydWN0IHB4YV9pMmMgKmkyYykKKytzdGF0aWMgdm9pZCBpMmNfcHhhX2RvX3Jlc2V0KHN0cnVjdCBweGFfaTJjICppMmMpCisgeworLQlwcl9kZWJ1ZygiUmVzZXR0aW5nIEkyQyBDb250cm9sbGVyIFVuaXRcbiIpOworLQorLQkvKiBhYm9ydCBhbnkgdHJhbnNmZXIgY3VycmVudGx5IHVuZGVyIHdheSAqLworLQlpMmNfcHhhX2Fib3J0KGkyYyk7CistCisgCS8qIHJlc2V0IGFjY29yZGluZyB0byA5LjggKi8KKyAJd3JpdGVsKElDUl9VUiwgX0lDUihpMmMpKTsKKyAJd3JpdGVsKEkyQ19JU1JfSU5JVCwgX0lTUihpMmMpKTsKK0BAIC01ODUsMTIgKzU4NywyNSBAQCBzdGF0aWMgdm9pZCBpMmNfcHhhX3Jlc2V0KHN0cnVjdCBweGFfaTJjCisgI2VuZGlmCisgCisgCWkyY19weGFfc2V0X3NsYXZlKGkyYywgMCk7CisrfQorIAorK3N0YXRpYyB2b2lkIGkyY19weGFfZW5hYmxlKHN0cnVjdCBweGFfaTJjICppMmMpCisreworIAkvKiBlbmFibGUgdW5pdCAqLworIAl3cml0ZWwocmVhZGwoX0lDUihpMmMpKSB8IElDUl9JVUUsIF9JQ1IoaTJjKSk7CisgCXVkZWxheSgxMDApOworIH0KKyAKKytzdGF0aWMgdm9pZCBpMmNfcHhhX3Jlc2V0KHN0cnVjdCBweGFfaTJjICppMmMpCisreworKwlwcl9kZWJ1ZygiUmVzZXR0aW5nIEkyQyBDb250cm9sbGVyIFVuaXRcbiIpOworKworKwkvKiBhYm9ydCBhbnkgdHJhbnNmZXIgY3VycmVudGx5IHVuZGVyIHdheSAqLworKwlpMmNfcHhhX2Fib3J0KGkyYyk7CisrCWkyY19weGFfZG9fcmVzZXQoaTJjKTsKKysJaTJjX3B4YV9lbmFibGUoaTJjKTsKKyt9CisrCisgCisgI2lmZGVmIENPTkZJR19JMkNfUFhBX1NMQVZFCisgLyoKK0BAIC0xMDAyLDYgKzEwMTcsNyBAQCBzdGF0aWMgaW50IGkyY19weGFfZG9feGZlcihzdHJ1Y3QgcHhhX2kyCisgCXJldCA9IGkyY19weGFfd2FpdF9idXNfbm90X2J1c3koaTJjKTsKKyAJaWYgKHJldCkgeworIAkJZGV2X2VycigmaTJjLT5hZGFwLmRldiwgImkyY19weGE6IHRpbWVvdXQgd2FpdGluZyBmb3IgYnVzIGZyZWVcbiIpOworKwkJaTJjX3JlY292ZXJfYnVzKCZpMmMtPmFkYXApOworIAkJZ290byBvdXQ7CisgCX0KKyAKK0BAIC0xMDQ3LDYgKzEwNjMsNyBAQCBzdGF0aWMgaW50IGkyY19weGFfZG9feGZlcihzdHJ1Y3QgcHhhX2kyCisgCisgCWlmICghdGltZW91dCAmJiBpMmMtPm1zZ19udW0pIHsKKyAJCWkyY19weGFfc2NyZWFtX2JsdWVfbXVyZGVyKGkyYywgInRpbWVvdXQgd2l0aCBhY3RpdmUgbWVzc2FnZSIpOworKwkJaTJjX3JlY292ZXJfYnVzKCZpMmMtPmFkYXApOworIAkJcmV0ID0gSTJDX1JFVFJZOworIAl9CisgCitAQCAtMTIyOCw2ICsxMjQ1LDEyOSBAQCBzdGF0aWMgaW50IGkyY19weGFfcHJvYmVfcGRhdGEoc3RydWN0IHBsCisgCXJldHVybiAwOworIH0KKyAKKytzdGF0aWMgdm9pZCBpMmNfcHhhX3ByZXBhcmVfcmVjb3Zlcnkoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQorK3sKKysJc3RydWN0IHB4YV9pMmMgKmkyYyA9IGFkYXAtPmFsZ29fZGF0YTsKKysJdTMyIGlibXIgPSByZWFkbChfSUJNUihpMmMpKTsKKysKKysJLyoKKysJICogUHJvZ3JhbSB0aGUgR1BJT3MgdG8gcmVmbGVjdCB0aGUgY3VycmVudCBJMkMgYnVzIHN0YXRlIHdoaWxlCisrCSAqIHdlIHRyYW5zaXRpb24gdG8gcmVjb3Zlcnk7IHRoaXMgYXZvaWRzIGdsaXRjaGluZyB0aGUgYnVzLgorKwkgKi8KKysJZ3Bpb2Rfc2V0X3ZhbHVlKGkyYy0+cmVjb3Zlcnkuc2NsX2dwaW9kLCBpYm1yICYgSUJNUl9TQ0xTKTsKKysJZ3Bpb2Rfc2V0X3ZhbHVlKGkyYy0+cmVjb3Zlcnkuc2RhX2dwaW9kLCBpYm1yICYgSUJNUl9TREFTKTsKKysKKysJV0FSTl9PTihwaW5jdHJsX3NlbGVjdF9zdGF0ZShpMmMtPnBpbmN0cmwsIGkyYy0+cGluY3RybF9yZWNvdmVyeSkpOworK30KKysKKytzdGF0aWMgdm9pZCBpMmNfcHhhX3VucHJlcGFyZV9yZWNvdmVyeShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCisreworKwlzdHJ1Y3QgcHhhX2kyYyAqaTJjID0gYWRhcC0+YWxnb19kYXRhOworKwl1MzIgaXNyOworKworKwkvKgorKwkgKiBUaGUgYnVzIHNob3VsZCBub3cgYmUgZnJlZS4gQ2xlYXIgdXAgdGhlIEkyQyBjb250cm9sbGVyIGJlZm9yZQorKwkgKiBoYW5kaW5nIGNvbnRyb2wgb2YgdGhlIGJ1cyBiYWNrIHRvIGF2b2lkIHRoZSBidXMgY2hhbmdpbmcgc3RhdGUuCisrCSAqLworKwlpc3IgPSByZWFkbChfSVNSKGkyYykpOworKwlpZiAoaXNyICYgKElTUl9VQiB8IElTUl9JQkIpKSB7CisrCQlkZXZfZGJnKCZpMmMtPmFkYXAuZGV2LAorKwkJCSJyZWNvdmVyeTogcmVzZXR0aW5nIGNvbnRyb2xsZXIsIElTUj0weCUwOHhcbiIsIGlzcik7CisrCQlpMmNfcHhhX2RvX3Jlc2V0KGkyYyk7CisrCX0KKysKKysJV0FSTl9PTihwaW5jdHJsX3NlbGVjdF9zdGF0ZShpMmMtPnBpbmN0cmwsIGkyYy0+cGluY3RybF9kZWZhdWx0KSk7CisrCisrCWRldl9kYmcoJmkyYy0+YWRhcC5kZXYsICJyZWNvdmVyeTogSUJNUiAweCUwOHggSVNSIDB4JTA4eFxuIiwKKysJICAgICAgICByZWFkbChfSUJNUihpMmMpKSwgcmVhZGwoX0lTUihpMmMpKSk7CisrCisrCWkyY19weGFfZW5hYmxlKGkyYyk7CisrfQorKworK3N0YXRpYyBpbnQgaTJjX3B4YV9pbml0X3JlY292ZXJ5KHN0cnVjdCBweGFfaTJjICppMmMpCisreworKwlzdHJ1Y3QgaTJjX2J1c19yZWNvdmVyeV9pbmZvICpicmkgPSAmaTJjLT5yZWNvdmVyeTsKKysJc3RydWN0IGRldmljZSAqZGV2ID0gaTJjLT5hZGFwLmRldi5wYXJlbnQ7CisrCisrCS8qCisrCSAqIFdoZW4gc2xhdmUgbW9kZSBpcyBlbmFibGVkLCB3ZSBhcmUgbm90IHRoZSBvbmx5IG1hc3RlciBvbiB0aGUgYnVzLgorKwkgKiBCdXMgcmVjb3ZlcnkgY2FuIG9ubHkgYmUgcGVyZm9ybWVkIHdoZW4gd2UgYXJlIHRoZSBtYXN0ZXIsIHdoaWNoCisrCSAqIHdlIGNhbid0IGJlIGNlcnRhaW4gb2YuIFRoZXJlZm9yZSwgd2hlbiBzbGF2ZSBtb2RlIGlzIGVuYWJsZWQsIGRvCisrCSAqIG5vdCBjb25maWd1cmUgYnVzIHJlY292ZXJ5LgorKwkgKi8KKysJaWYgKElTX0VOQUJMRUQoQ09ORklHX0kyQ19QWEFfU0xBVkUpKQorKwkJcmV0dXJuIDA7CisrCisrCWkyYy0+cGluY3RybCA9IGRldm1fcGluY3RybF9nZXQoZGV2KTsKKysJaWYgKElTX0VSUihpMmMtPnBpbmN0cmwpKQorKwkJcmV0dXJuIFBUUl9FUlIoaTJjLT5waW5jdHJsKTsKKysKKysJaWYgKCFpMmMtPnBpbmN0cmwpCisrCQlyZXR1cm4gMDsKKysKKysJaTJjLT5waW5jdHJsX2RlZmF1bHQgPSBwaW5jdHJsX2xvb2t1cF9zdGF0ZShpMmMtPnBpbmN0cmwsCisrCQkJCQkJICAgIFBJTkNUUkxfU1RBVEVfREVGQVVMVCk7CisrCWkyYy0+cGluY3RybF9yZWNvdmVyeSA9IHBpbmN0cmxfbG9va3VwX3N0YXRlKGkyYy0+cGluY3RybCwgInJlY292ZXJ5Iik7CisrCisrCWlmIChJU19FUlIoaTJjLT5waW5jdHJsX2RlZmF1bHQpIHx8IElTX0VSUihpMmMtPnBpbmN0cmxfcmVjb3ZlcnkpKSB7CisrCQlkZXZfaW5mbyhkZXYsICJtaXNzaW5nIHBpbm11eCByZWNvdmVyeSBpbmZvcm1hdGlvbjogJWxkICVsZFxuIiwKKysJCQkgUFRSX0VSUihpMmMtPnBpbmN0cmxfZGVmYXVsdCksCisrCQkJIFBUUl9FUlIoaTJjLT5waW5jdHJsX3JlY292ZXJ5KSk7CisrCQlyZXR1cm4gMDsKKysJfQorKworKwkvKgorKwkgKiBDbGFpbWluZyBHUElPcyBjYW4gaW5mbHVlbmNlIHRoZSBwaW5tdXggc3RhdGUsIGFuZCBtYXkgZ2xpdGNoIHRoZQorKwkgKiBJMkMgYnVzLiBEbyB0aGlzIGNhcmVmdWxseS4KKysJICovCisrCWJyaS0+c2NsX2dwaW9kID0gZGV2bV9ncGlvZF9nZXQoZGV2LCAic2NsIiwgR1BJT0RfT1VUX0hJR0hfT1BFTl9EUkFJTik7CisrCWlmIChicmktPnNjbF9ncGlvZCA9PSBFUlJfUFRSKC1FUFJPQkVfREVGRVIpKQorKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisrCWlmIChJU19FUlIoYnJpLT5zY2xfZ3Bpb2QpKSB7CisrCQlkZXZfaW5mbyhkZXYsICJtaXNzaW5nIHNjbCBncGlvIHJlY292ZXJ5IGluZm9ybWF0aW9uOiAlcGVcbiIsCisrCQkJIGJyaS0+c2NsX2dwaW9kKTsKKysJCXJldHVybiAwOworKwl9CisrCisrCS8qCisrCSAqIFdlIGhhdmUgU0NMLiBQdWxsIFNDTCBsb3cgYW5kIHdhaXQgYSBiaXQgc28gdGhhdCBTREEgZ2xpdGNoZXMKKysJICogaGF2ZSBubyBlZmZlY3QuCisrCSAqLworKwlncGlvZF9kaXJlY3Rpb25fb3V0cHV0KGJyaS0+c2NsX2dwaW9kLCAwKTsKKysJdWRlbGF5KDEwKTsKKysJYnJpLT5zZGFfZ3Bpb2QgPSBkZXZtX2dwaW9kX2dldChkZXYsICJzZGEiLCBHUElPRF9PVVRfSElHSF9PUEVOX0RSQUlOKTsKKysKKysJLyogV2FpdCBhIGJpdCBpbiBjYXNlIG9mIGEgU0RBIGdsaXRjaCwgYW5kIHRoZW4gcmVsZWFzZSBTQ0wuICovCisrCXVkZWxheSgxMCk7CisrCWdwaW9kX2RpcmVjdGlvbl9vdXRwdXQoYnJpLT5zY2xfZ3Bpb2QsIDEpOworKworKwlpZiAoYnJpLT5zZGFfZ3Bpb2QgPT0gRVJSX1BUUigtRVBST0JFX0RFRkVSKSkKKysJCXJldHVybiAtRVBST0JFX0RFRkVSOworKworKwlpZiAoSVNfRVJSKGJyaS0+c2RhX2dwaW9kKSkgeworKwkJZGV2X2luZm8oZGV2LCAibWlzc2luZyBzZGEgZ3BpbyByZWNvdmVyeSBpbmZvcm1hdGlvbjogJXBlXG4iLAorKwkJCSBicmktPnNkYV9ncGlvZCk7CisrCQlyZXR1cm4gMDsKKysJfQorKworKwlicmktPnByZXBhcmVfcmVjb3ZlcnkgPSBpMmNfcHhhX3ByZXBhcmVfcmVjb3Zlcnk7CisrCWJyaS0+dW5wcmVwYXJlX3JlY292ZXJ5ID0gaTJjX3B4YV91bnByZXBhcmVfcmVjb3Zlcnk7CisrCWJyaS0+cmVjb3Zlcl9idXMgPSBpMmNfZ2VuZXJpY19zY2xfcmVjb3Zlcnk7CisrCisrCWkyYy0+YWRhcC5idXNfcmVjb3ZlcnlfaW5mbyA9IGJyaTsKKysKKysJLyoKKysJICogQ2xhaW1pbmcgR1BJT3MgY2FuIGNoYW5nZSB0aGUgcGlubXV4IHN0YXRlLCB3aGljaCBjb25mdXNlcyB0aGUKKysJICogcGluY3RybCBzaW5jZSBwaW5jdHJsJ3MgaWRlYSBvZiB0aGUgY3VycmVudCBzZXR0aW5nIGlzIHVuYWZmZWN0ZWQKKysJICogYnkgdGhlIHBpbm11eCBjaGFuZ2UgY2F1c2VkIGJ5IGNsYWltaW5nIHRoZSBHUElPLiBXb3JrIGFyb3VuZCB0aGF0CisrCSAqIGJ5IHN3aXRjaGluZyBwaW5jdHJsIHRvIHRoZSBHUElPIHN0YXRlIGhlcmUuIFdlIGRvIGl0IHRoaXMgd2F5IHRvCisrCSAqIGF2b2lkIGdsaXRjaGluZyB0aGUgSTJDIGJ1cy4KKysJICovCisrCXBpbmN0cmxfc2VsZWN0X3N0YXRlKGkyYy0+cGluY3RybCwgaTJjLT5waW5jdHJsX3JlY292ZXJ5KTsKKysKKysJcmV0dXJuIHBpbmN0cmxfc2VsZWN0X3N0YXRlKGkyYy0+cGluY3RybCwgaTJjLT5waW5jdHJsX2RlZmF1bHQpOworK30KKysKKyBzdGF0aWMgaW50IGkyY19weGFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorIHsKKyAJc3RydWN0IGkyY19weGFfcGxhdGZvcm1fZGF0YSAqcGxhdCA9IGRldl9nZXRfcGxhdGRhdGEoJmRldi0+ZGV2KTsKK0BAIC0xMjQwLDYgKzEzODAsMTYgQEAgc3RhdGljIGludCBpMmNfcHhhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybQorIAlpZiAoIWkyYykKKyAJCXJldHVybiAtRU5PTUVNOworIAorKwkvKiBEZWZhdWx0IGFkYXB0ZXIgbnVtIHRvIGRldmljZSBpZDsgaTJjX3B4YV9wcm9iZV9kdCBjYW4gb3ZlcnJpZGUuICovCisrCWkyYy0+YWRhcC5uciA9IGRldi0+aWQ7CisrCWkyYy0+YWRhcC5vd25lciAgID0gVEhJU19NT0RVTEU7CisrCWkyYy0+YWRhcC5yZXRyaWVzID0gNTsKKysJaTJjLT5hZGFwLmFsZ29fZGF0YSA9IGkyYzsKKysJaTJjLT5hZGFwLmRldi5wYXJlbnQgPSAmZGV2LT5kZXY7CisrI2lmZGVmIENPTkZJR19PRgorKwlpMmMtPmFkYXAuZGV2Lm9mX25vZGUgPSBkZXYtPmRldi5vZl9ub2RlOworKyNlbmRpZgorKworIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisgCWkyYy0+cmVnX2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJmRldi0+ZGV2LCByZXMpOworIAlpZiAoSVNfRVJSKGkyYy0+cmVnX2Jhc2UpKQorQEAgLTEyNTEsOCArMTQwMSw5IEBAIHN0YXRpYyBpbnQgaTJjX3B4YV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm0KKyAJCXJldHVybiBpcnE7CisgCX0KKyAKKy0JLyogRGVmYXVsdCBhZGFwdGVyIG51bSB0byBkZXZpY2UgaWQ7IGkyY19weGFfcHJvYmVfZHQgY2FuIG92ZXJyaWRlLiAqLworLQlpMmMtPmFkYXAubnIgPSBkZXYtPmlkOworKwlyZXQgPSBpMmNfcHhhX2luaXRfcmVjb3ZlcnkoaTJjKTsKKysJaWYgKHJldCkKKysJCXJldHVybiByZXQ7CisgCisgCXJldCA9IGkyY19weGFfcHJvYmVfZHQoZGV2LCBpMmMsICZpMmNfdHlwZSk7CisgCWlmIChyZXQgPiAwKQorQEAgLTEyNjAsOSArMTQxMSw2IEBAIHN0YXRpYyBpbnQgaTJjX3B4YV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm0KKyAJaWYgKHJldCA8IDApCisgCQlyZXR1cm4gcmV0OworIAorLQlpMmMtPmFkYXAub3duZXIgICA9IFRISVNfTU9EVUxFOworLQlpMmMtPmFkYXAucmV0cmllcyA9IDU7CistCisgCXNwaW5fbG9ja19pbml0KCZpMmMtPmxvY2spOworIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpMmMtPndhaXQpOworIAorQEAgLTEzMzIsMTIgKzE0ODAsNiBAQCBzdGF0aWMgaW50IGkyY19weGFfcHJvYmUoc3RydWN0IHBsYXRmb3JtCisgCisgCWkyY19weGFfcmVzZXQoaTJjKTsKKyAKKy0JaTJjLT5hZGFwLmFsZ29fZGF0YSA9IGkyYzsKKy0JaTJjLT5hZGFwLmRldi5wYXJlbnQgPSAmZGV2LT5kZXY7CistI2lmZGVmIENPTkZJR19PRgorLQlpMmMtPmFkYXAuZGV2Lm9mX25vZGUgPSBkZXYtPmRldi5vZl9ub2RlOworLSNlbmRpZgorLQorIAlyZXQgPSBpMmNfYWRkX251bWJlcmVkX2FkYXB0ZXIoJmkyYy0+YWRhcCk7CisgCWlmIChyZXQgPCAwKQorIAkJZ290byBlcmVxaXJxOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzgyNS12NS44LXNwaS1yYjR4eC1udWxsLXBvaW50ZXItYnVnLWZpeC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC84MjUtdjUuOC1zcGktcmI0eHgtbnVsbC1wb2ludGVyLWJ1Zy1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFlMjZkNQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC84MjUtdjUuOC1zcGktcmI0eHgtbnVsbC1wb2ludGVyLWJ1Zy1maXgucGF0Y2gKQEAgLTAsMCArMSw0OCBAQAorRnJvbTogQ2hyaXN0b3BoZXIgSGlsbCA8Y2g2NTc0QGdtYWlsLmNvbT4KK1RvOiBNYXJrIEJyb3duIDxicm9vbmllQGtlcm5lbC5vcmc+CitDYzogQ2hyaXN0b3BoZXIgSGlsbCA8Y2g2NTc0QGdtYWlsLmNvbT4sIGxpbnV4LXNwaUB2Z2VyLmtlcm5lbC5vcmcsCisgICAgICAgIGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKK1N1YmplY3Q6IFtQQVRDSCAxLzNdIHNwaTogcmI0eHg6IG51bGwgcG9pbnRlciBidWcgZml4CitEYXRlOiBUaHUsIDIxIE1heSAyMDIwIDE0OjM2OjI5IC0wNDAwCitNZXNzYWdlLUlkOiA8MjAyMDA1MjExODM2MzEuMzc4MDYtMS1jaDY1NzRAZ21haWwuY29tPgorWC1NYWlsZXI6IGdpdC1zZW5kLWVtYWlsIDIuMjUuMQorTUlNRS1WZXJzaW9uOiAxLjAKK1NlbmRlcjogbGludXgtc3BpLW93bmVyQHZnZXIua2VybmVsLm9yZworUHJlY2VkZW5jZTogYnVsaworTGlzdC1JRDogPGxpbnV4LXNwaS52Z2VyLmtlcm5lbC5vcmc+CitYLU1haWxpbmctTGlzdDogbGludXgtc3BpQHZnZXIua2VybmVsLm9yZworCitUaGlzIHBhdGNoIGZpeGVzIGEgbnVsbCBwb2ludGVyIGJ1ZyBpbiB0aGUgc3BpIGRyaXZlciBzcGktcmI0eHguYyBieQorbW92aW5nIHRoZSBwcml2YXRlIGRhdGEgaW5pdGlhbGl6YXRpb24gdG8gZWFybGllciBpbiBwcm9iZQorCitTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBIaWxsIDxjaDY1NzRAZ21haWwuY29tPgorLS0tCisgZHJpdmVycy9zcGkvc3BpLXJiNHh4LmMgfCAxMCArKysrKy0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9zcGkvc3BpLXJiNHh4LmMKKysrKyBiL2RyaXZlcnMvc3BpL3NwaS1yYjR4eC5jCitAQCAtMTU4LDYgKzE1OCwxMSBAQCBzdGF0aWMgaW50IHJiNHh4X3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvCisgCW1hc3Rlci0+dHJhbnNmZXJfb25lID0gcmI0eHhfdHJhbnNmZXJfb25lOworIAltYXN0ZXItPnNldF9jcyA9IHJiNHh4X3NldF9jczsKKyAKKysJcmJzcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisrCXJic3BpLT5iYXNlID0gc3BpX2Jhc2U7CisrCXJic3BpLT5jbGsgPSBhaGJfY2xrOworKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCByYnNwaSk7CisrCisgCWVyciA9IGRldm1fc3BpX3JlZ2lzdGVyX21hc3RlcigmcGRldi0+ZGV2LCBtYXN0ZXIpOworIAlpZiAoZXJyKSB7CisgCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgU1BJIG1hc3RlclxuIik7CitAQCAtMTY4LDExICsxNzMsNiBAQCBzdGF0aWMgaW50IHJiNHh4X3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvCisgCWlmIChlcnIpCisgCQlyZXR1cm4gZXJyOworIAorLQlyYnNwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKy0JcmJzcGktPmJhc2UgPSBzcGlfYmFzZTsKKy0JcmJzcGktPmNsayA9IGFoYl9jbGs7CistCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJic3BpKTsKKy0KKyAJLyogRW5hYmxlIFNQSSAqLworIAlyYjR4eF93cml0ZShyYnNwaSwgQVI3MVhYX1NQSV9SRUdfRlMsIEFSNzFYWF9TUElfRlNfR1BJTyk7CisgCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvODI2LXY1Ljgtc3BpLXJiNHh4LXVwZGF0ZS1kcml2ZXItdG8tYmUtZGV2aWNlLXRyZWUtYXdhcmUucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvODI2LXY1Ljgtc3BpLXJiNHh4LXVwZGF0ZS1kcml2ZXItdG8tYmUtZGV2aWNlLXRyZWUtYXdhcmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNlNGYyYgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC84MjYtdjUuOC1zcGktcmI0eHgtdXBkYXRlLWRyaXZlci10by1iZS1kZXZpY2UtdHJlZS1hd2FyZS5wYXRjaApAQCAtMCwwICsxLDYwIEBACitGcm9tOiBDaHJpc3RvcGhlciBIaWxsIDxjaDY1NzRAZ21haWwuY29tPgorVG86IE1hcmsgQnJvd24gPGJyb29uaWVAa2VybmVsLm9yZz4KK0NjOiBDaHJpc3RvcGhlciBIaWxsIDxjaDY1NzRAZ21haWwuY29tPiwgbGludXgtc3BpQHZnZXIua2VybmVsLm9yZywKKyAgICAgICAgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZworU3ViamVjdDogW1BBVENIIDIvM10gc3BpOiByYjR4eDogdXBkYXRlIGRyaXZlciB0byBiZSBkZXZpY2UgdHJlZSBhd2FyZQorRGF0ZTogVGh1LCAyMSBNYXkgMjAyMCAxNDozNjozMCAtMDQwMAorTWVzc2FnZS1JZDogPDIwMjAwNTIxMTgzNjMxLjM3ODA2LTItY2g2NTc0QGdtYWlsLmNvbT4KK1gtTWFpbGVyOiBnaXQtc2VuZC1lbWFpbCAyLjI1LjEKK0luLVJlcGx5LVRvOiA8MjAyMDA1MjExODM2MzEuMzc4MDYtMS1jaDY1NzRAZ21haWwuY29tPgorUmVmZXJlbmNlczogPDIwMjAwNTIxMTgzNjMxLjM3ODA2LTEtY2g2NTc0QGdtYWlsLmNvbT4KK01JTUUtVmVyc2lvbjogMS4wCitTZW5kZXI6IGxpbnV4LXNwaS1vd25lckB2Z2VyLmtlcm5lbC5vcmcKK1ByZWNlZGVuY2U6IGJ1bGsKK0xpc3QtSUQ6IDxsaW51eC1zcGkudmdlci5rZXJuZWwub3JnPgorWC1NYWlsaW5nLUxpc3Q6IGxpbnV4LXNwaUB2Z2VyLmtlcm5lbC5vcmcKKworVGhpcyBwYXRjaCB1cGRhdGVzIHRoZSBzcGkgZHJpdmVyIHNwaS1yYjR4eC5jIHRvIGJlIGRldmljZSB0cmVlIGF3YXJlCisKK1NpZ25lZC1vZmYtYnk6IENocmlzdG9waGVyIEhpbGwgPGNoNjU3NEBnbWFpbC5jb20+CistLS0KKyBkcml2ZXJzL3NwaS9zcGktcmI0eHguYyB8IDkgKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorCistLS0gYS9kcml2ZXJzL3NwaS9zcGktcmI0eHguYworKysrIGIvZHJpdmVycy9zcGkvc3BpLXJiNHh4LmMKK0BAIC0xNCw2ICsxNCw3IEBACisgI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorIAorICNpbmNsdWRlIDxhc20vbWFjaC1hdGg3OS9hcjcxeHhfcmVncy5oPgorIAorQEAgLTE1MCw2ICsxNTEsNyBAQCBzdGF0aWMgaW50IHJiNHh4X3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvCisgCWlmIChJU19FUlIoYWhiX2NsaykpCisgCQlyZXR1cm4gUFRSX0VSUihhaGJfY2xrKTsKKyAKKysJbWFzdGVyLT5kZXYub2Zfbm9kZSA9IHBkZXYtPmRldi5vZl9ub2RlOworIAltYXN0ZXItPmJ1c19udW0gPSAwOworIAltYXN0ZXItPm51bV9jaGlwc2VsZWN0ID0gMzsKKyAJbWFzdGVyLT5tb2RlX2JpdHMgPSBTUElfVFhfRFVBTDsKK0BAIC0xODgsMTEgKzE5MCwxOCBAQCBzdGF0aWMgaW50IHJiNHh4X3NwaV9yZW1vdmUoc3RydWN0IHBsYXRmCisgCXJldHVybiAwOworIH0KKyAKKytzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCByYjR4eF9zcGlfZHRfbWF0Y2hbXSA9IHsKKysJeyAuY29tcGF0aWJsZSA9ICJtaWtyb3RpayxyYjR4eC1zcGkiIH0sCisrCXsgfSwKKyt9OworK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHJiNHh4X3NwaV9kdF9tYXRjaCk7CisrCisgc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcmI0eHhfc3BpX2RydiA9IHsKKyAJLnByb2JlID0gcmI0eHhfc3BpX3Byb2JlLAorIAkucmVtb3ZlID0gcmI0eHhfc3BpX3JlbW92ZSwKKyAJLmRyaXZlciA9IHsKKyAJCS5uYW1lID0gInJiNHh4LXNwaSIsCisrCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIocmI0eHhfc3BpX2R0X21hdGNoKSwKKyAJfSwKKyB9OworIApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzgyNy12NS4xNi1zcGktYWRkLXBvd2VyLWNvbnRyb2wtd2hlbi1zZXRfY3MucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvODI3LXY1LjE2LXNwaS1hZGQtcG93ZXItY29udHJvbC13aGVuLXNldF9jcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2U3OTQwCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzgyNy12NS4xNi1zcGktYWRkLXBvd2VyLWNvbnRyb2wtd2hlbi1zZXRfY3MucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorZHJpdmVyczogc3BpOiBiYWNrcG9ydCBQTSBpbXByb3ZlbWVudCBmb3IgU1BJIGZyYW1ld29yaworCitGaXggUE0gaW1wcm92ZW1lbnQgZm9yIFNQSSBmcmFtZXdvcmsuCitBcyB0byBzZXRfY3MgdGFrZXMgZWZmZWN0IGltbWVkaWF0ZWx5LCBwb3dlciBzcGkKK2lzIG5lZWRlZCB3aGVuIHNldHVwIHNwaS4KKworKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgZDk0OGU2Y2ExODk5ODU0OTVhMjFjZDYyMmMzMWUzMGU3MmI2YjY4OCkKK0xpbms6IGh0dHBzOi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RvcnZhbGRzL2xpbnV4LmdpdC9jb21taXQvZHJpdmVycy9zcGkvc3BpLmM/aD12NS4xNi1yYzQmaWQ9ZDk0OGU2Y2ExODk5ODU0OTVhMjFjZDYyMmMzMWUzMGU3MmI2YjY4OAorKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgNTdhOTQ2MDcwNWYxMDVlMWQ3OWQxNDEwYzVjZmUyODViZWRhODk4NikKK0xpbms6IGh0dHBzOi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RvcnZhbGRzL2xpbnV4LmdpdC9jb21taXQvZHJpdmVycy9zcGkvc3BpLmM/aD12NS4xNi1yYzQmaWQ9NTdhOTQ2MDcwNWYxMDVlMWQ3OWQxNDEwYzVjZmUyODViZWRhODk4NgorCistLS0gYS9kcml2ZXJzL3NwaS9zcGkuYworKysrIGIvZHJpdmVycy9zcGkvc3BpLmMKK0BAIC0zMTcwLDcgKzMxNzAsMjkgQEAgaW50IHNwaV9zZXR1cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQorIAlpZiAoc3BpLT5jb250cm9sbGVyLT5zZXR1cCkKKyAJCXN0YXR1cyA9IHNwaS0+Y29udHJvbGxlci0+c2V0dXAoc3BpKTsKKyAKKy0Jc3BpX3NldF9jcyhzcGksIGZhbHNlKTsKKysJaWYgKHNwaS0+Y29udHJvbGxlci0+YXV0b19ydW50aW1lX3BtICYmIHNwaS0+Y29udHJvbGxlci0+c2V0X2NzKSB7CisrCQlzdGF0dXMgPSBwbV9ydW50aW1lX2dldF9zeW5jKHNwaS0+Y29udHJvbGxlci0+ZGV2LnBhcmVudCk7CisrCQlpZiAoc3RhdHVzIDwgMCkgeworKwkJCXBtX3J1bnRpbWVfcHV0X25vaWRsZShzcGktPmNvbnRyb2xsZXItPmRldi5wYXJlbnQpOworKwkJCWRldl9lcnIoJnNwaS0+Y29udHJvbGxlci0+ZGV2LCAiRmFpbGVkIHRvIHBvd2VyIGRldmljZTogJWRcbiIsCisrCQkJCXN0YXR1cyk7CisrCQkJcmV0dXJuIHN0YXR1czsKKysJCX0KKysKKysJCS8qCisrCQkgKiBXZSBkbyBub3Qgd2FudCB0byByZXR1cm4gcG9zaXRpdmUgdmFsdWUgZnJvbSBwbV9ydW50aW1lX2dldCwKKysJCSAqIHRoZXJlIGFyZSBtYW55IGluc3RhbmNlcyBvZiBkZXZpY2VzIGNhbGxpbmcgc3BpX3NldHVwKCkgYW5kCisrCQkgKiBjaGVja2luZyBmb3IgYSBub24temVybyByZXR1cm4gdmFsdWUgaW5zdGVhZCBvZiBhIG5lZ2F0aXZlCisrCQkgKiByZXR1cm4gdmFsdWUuCisrCQkgKi8KKysJCXN0YXR1cyA9IDA7CisrCisrCQlzcGlfc2V0X2NzKHNwaSwgZmFsc2UpOworKwkJcG1fcnVudGltZV9tYXJrX2xhc3RfYnVzeShzcGktPmNvbnRyb2xsZXItPmRldi5wYXJlbnQpOworKwkJcG1fcnVudGltZV9wdXRfYXV0b3N1c3BlbmQoc3BpLT5jb250cm9sbGVyLT5kZXYucGFyZW50KTsKKysJfSBlbHNlIHsKKysJCXNwaV9zZXRfY3Moc3BpLCBmYWxzZSk7CisrCX0KKyAKKyAJaWYgKHNwaS0+cnQgJiYgIXNwaS0+Y29udHJvbGxlci0+cnQpIHsKKyAJCXNwaS0+Y29udHJvbGxlci0+cnQgPSB0cnVlOworLS0gCisyLjE4LjAKKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzgzMS12NS4xMy0wMDAxLWZpcm13YXJlLWJjbTQ3eHhfbnZyYW0tcmVuYW1lLWZpbmRpbmctZnVuY3Rpb24tYW5kLWkucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvODMxLXY1LjEzLTAwMDEtZmlybXdhcmUtYmNtNDd4eF9udnJhbS1yZW5hbWUtZmluZGluZy1mdW5jdGlvbi1hbmQtaS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTkzODcwCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzgzMS12NS4xMy0wMDAxLWZpcm13YXJlLWJjbTQ3eHhfbnZyYW0tcmVuYW1lLWZpbmRpbmctZnVuY3Rpb24tYW5kLWkucGF0Y2gKQEAgLTAsMCArMSw4MCBAQAorRnJvbSBmYjAwOWNiZGQwNjkzYmQ2MzNmMTFlOTk1MjY2MTdiM2QzOTJjZmFkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP1JhZmE9QzU9ODI9MjBNaT1DNT04MmVja2k/PSA8cmFmYWxAbWlsZWNraS5wbD4KK0RhdGU6IE1vbiwgOCBNYXIgMjAyMSAxMDowMzoxNiArMDEwMAorU3ViamVjdDogW1BBVENIXSBmaXJtd2FyZTogYmNtNDd4eF9udnJhbTogcmVuYW1lIGZpbmRpbmcgZnVuY3Rpb24gYW5kIGl0cworIHZhcmlhYmxlcworTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisxLiBVc2UgImJjbTQ3eHhfIiBmdW5jdGlvbiBuYW1lIHByZWZpeCBmb3IgY29uc2lzdGVuY3kKKzIuIEl0IHRha2VzIGZsYXNoIHN0YXJ0IGFzIGFyZ3VtZW50IHNvIHMvaW9iYXNlL2ZsYXNoX3N0YXJ0LworMy4gIm9mZiIgd2FzIHVzZWQgZm9yIGZpbmRpbmcgZmxhc2ggZW5kIHNvIGp1c3QgY2FsbCBpdCAiZmxhc2hfc2l6ZSIKKworU2lnbmVkLW9mZi1ieTogUmFmYcWCIE1pxYJlY2tpIDxyYWZhbEBtaWxlY2tpLnBsPgorU2lnbmVkLW9mZi1ieTogVGhvbWFzIEJvZ2VuZG9lcmZlciA8dHNib2dlbmRAYWxwaGEuZnJhbmtlbi5kZT4KKy0tLQorIGRyaXZlcnMvZmlybXdhcmUvYnJvYWRjb20vYmNtNDd4eF9udnJhbS5jIHwgMjQgKysrKysrKysrKysrLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvZmlybXdhcmUvYnJvYWRjb20vYmNtNDd4eF9udnJhbS5jCisrKysgYi9kcml2ZXJzL2Zpcm13YXJlL2Jyb2FkY29tL2JjbTQ3eHhfbnZyYW0uYworQEAgLTQ4LDExICs0OCwxMyBAQCBzdGF0aWMgdTMyIGZpbmRfbnZyYW1fc2l6ZSh2b2lkIF9faW9tZW0KKyAJcmV0dXJuIDA7CisgfQorIAorLS8qIFByb2JlIGZvciBOVlJBTSBoZWFkZXIgKi8KKy1zdGF0aWMgaW50IG52cmFtX2ZpbmRfYW5kX2NvcHkodm9pZCBfX2lvbWVtICppb2Jhc2UsIHUzMiBsaW0pCisrLyoqCisrICogYmNtNDd4eF9udnJhbV9maW5kX2FuZF9jb3B5IC0gZmluZCBOVlJBTSBvbiBmbGFzaCBtYXBwaW5nICYgY29weSBpdAorKyAqLworK3N0YXRpYyBpbnQgYmNtNDd4eF9udnJhbV9maW5kX2FuZF9jb3B5KHZvaWQgX19pb21lbSAqZmxhc2hfc3RhcnQsIHNpemVfdCByZXNfc2l6ZSkKKyB7CisgCXN0cnVjdCBudnJhbV9oZWFkZXIgX19pb21lbSAqaGVhZGVyOworLQl1MzIgb2ZmOworKwlzaXplX3QgZmxhc2hfc2l6ZTsKKyAJdTMyIHNpemU7CisgCisgCWlmIChudnJhbV9sZW4pIHsKK0BAIC02MSwyNSArNjMsMjUgQEAgc3RhdGljIGludCBudnJhbV9maW5kX2FuZF9jb3B5KHZvaWQgX19pbworIAl9CisgCisgCS8qIFRPRE86IHdoZW4gbnZyYW0gaXMgb24gbmFuZCBmbGFzaCBjaGVjayBmb3IgYmFkIGJsb2NrcyBmaXJzdC4gKi8KKy0Jb2ZmID0gRkxBU0hfTUlOOworLQl3aGlsZSAob2ZmIDw9IGxpbSkgeworKwlmbGFzaF9zaXplID0gRkxBU0hfTUlOOworKwl3aGlsZSAoZmxhc2hfc2l6ZSA8PSByZXNfc2l6ZSkgeworIAkJLyogV2luZG93ZWQgZmxhc2ggYWNjZXNzICovCistCQlzaXplID0gZmluZF9udnJhbV9zaXplKGlvYmFzZSArIG9mZik7CisrCQlzaXplID0gZmluZF9udnJhbV9zaXplKGZsYXNoX3N0YXJ0ICsgZmxhc2hfc2l6ZSk7CisgCQlpZiAoc2l6ZSkgeworLQkJCWhlYWRlciA9IChzdHJ1Y3QgbnZyYW1faGVhZGVyICopKGlvYmFzZSArIG9mZiAtIHNpemUpOworKwkJCWhlYWRlciA9IChzdHJ1Y3QgbnZyYW1faGVhZGVyICopKGZsYXNoX3N0YXJ0ICsgZmxhc2hfc2l6ZSAtIHNpemUpOworIAkJCWdvdG8gZm91bmQ7CisgCQl9CistCQlvZmYgPDw9IDE7CisrCQlmbGFzaF9zaXplIDw8PSAxOworIAl9CisgCisgCS8qIFRyeSBlbWJlZGRlZCBOVlJBTSBhdCA0IEtCIGFuZCAxIEtCIGFzIGxhc3QgcmVzb3J0cyAqLworLQloZWFkZXIgPSAoc3RydWN0IG52cmFtX2hlYWRlciAqKShpb2Jhc2UgKyA0MDk2KTsKKysJaGVhZGVyID0gKHN0cnVjdCBudnJhbV9oZWFkZXIgKikoZmxhc2hfc3RhcnQgKyA0MDk2KTsKKyAJaWYgKGhlYWRlci0+bWFnaWMgPT0gTlZSQU1fTUFHSUMpIHsKKyAJCXNpemUgPSBOVlJBTV9TUEFDRTsKKyAJCWdvdG8gZm91bmQ7CisgCX0KKyAKKy0JaGVhZGVyID0gKHN0cnVjdCBudnJhbV9oZWFkZXIgKikoaW9iYXNlICsgMTAyNCk7CisrCWhlYWRlciA9IChzdHJ1Y3QgbnZyYW1faGVhZGVyICopKGZsYXNoX3N0YXJ0ICsgMTAyNCk7CisgCWlmIChoZWFkZXItPm1hZ2ljID09IE5WUkFNX01BR0lDKSB7CisgCQlzaXplID0gTlZSQU1fU1BBQ0U7CisgCQlnb3RvIGZvdW5kOworQEAgLTEyNCw3ICsxMjYsNyBAQCBpbnQgYmNtNDd4eF9udnJhbV9pbml0X2Zyb21fbWVtKHUzMiBiYXNlCisgCWlmICghaW9iYXNlKQorIAkJcmV0dXJuIC1FTk9NRU07CisgCistCWVyciA9IG52cmFtX2ZpbmRfYW5kX2NvcHkoaW9iYXNlLCBsaW0pOworKwllcnIgPSBiY200N3h4X252cmFtX2ZpbmRfYW5kX2NvcHkoaW9iYXNlLCBsaW0pOworIAorIAlpb3VubWFwKGlvYmFzZSk7CisgCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvODMxLXY1LjEzLTAwMDItZmlybXdhcmUtYmNtNDd4eF9udnJhbS1hZGQtaGVscGVyLWNoZWNraW5nLWZvci1OVlJBTS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC84MzEtdjUuMTMtMDAwMi1maXJtd2FyZS1iY200N3h4X252cmFtLWFkZC1oZWxwZXItY2hlY2tpbmctZm9yLU5WUkFNLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYjA3MjgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvODMxLXY1LjEzLTAwMDItZmlybXdhcmUtYmNtNDd4eF9udnJhbS1hZGQtaGVscGVyLWNoZWNraW5nLWZvci1OVlJBTS5wYXRjaApAQCAtMCwwICsxLDkwIEBACitGcm9tIDBhMjRiNTFhMzI2NGEzZjk0MmE3NTAyNWVhNWZmNjEzM2M4OTg5YjAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/UmFmYT1DNT04Mj0yME1pPUM1PTgyZWNraT89IDxyYWZhbEBtaWxlY2tpLnBsPgorRGF0ZTogTW9uLCA4IE1hciAyMDIxIDEwOjAzOjE3ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGZpcm13YXJlOiBiY200N3h4X252cmFtOiBhZGQgaGVscGVyIGNoZWNraW5nIGZvciBOVlJBTQorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitUaGlzIGF2b2lkcyBkdXBsaWNhdGluZyBjb2RlIGRvaW5nIGNhc3RpbmcgYW5kIGNoZWNraW5nIGZvciBOVlJBTSBtYWdpYy4KKworU2lnbmVkLW9mZi1ieTogUmFmYcWCIE1pxYJlY2tpIDxyYWZhbEBtaWxlY2tpLnBsPgorU2lnbmVkLW9mZi1ieTogVGhvbWFzIEJvZ2VuZG9lcmZlciA8dHNib2dlbmRAYWxwaGEuZnJhbmtlbi5kZT4KKy0tLQorIGRyaXZlcnMvZmlybXdhcmUvYnJvYWRjb20vYmNtNDd4eF9udnJhbS5jIHwgMzAgKysrKysrKysrKysrKystLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvZmlybXdhcmUvYnJvYWRjb20vYmNtNDd4eF9udnJhbS5jCisrKysgYi9kcml2ZXJzL2Zpcm13YXJlL2Jyb2FkY29tL2JjbTQ3eHhfbnZyYW0uYworQEAgLTM0LDE0ICszNCwyMCBAQCBzdGF0aWMgY2hhciBudnJhbV9idWZbTlZSQU1fU1BBQ0VdOworIHN0YXRpYyBzaXplX3QgbnZyYW1fbGVuOworIHN0YXRpYyBjb25zdCB1MzIgbnZyYW1fc2l6ZXNbXSA9IHsweDYwMDAsIDB4ODAwMCwgMHhGMDAwLCAweDEwMDAwfTsKKyAKKysvKioKKysgKiBiY200N3h4X252cmFtX2lzX3ZhbGlkIC0gY2hlY2sgZm9yIGEgdmFsaWQgTlZSQU0gYXQgc3BlY2lmaWVkIG1lbW9yeQorKyAqLworK3N0YXRpYyBib29sIGJjbTQ3eHhfbnZyYW1faXNfdmFsaWQodm9pZCBfX2lvbWVtICpudnJhbSkKKyt7CisrCXJldHVybiAoKHN0cnVjdCBudnJhbV9oZWFkZXIgKiludnJhbSktPm1hZ2ljID09IE5WUkFNX01BR0lDOworK30KKysKKyBzdGF0aWMgdTMyIGZpbmRfbnZyYW1fc2l6ZSh2b2lkIF9faW9tZW0gKmVuZCkKKyB7CistCXN0cnVjdCBudnJhbV9oZWFkZXIgX19pb21lbSAqaGVhZGVyOworIAlpbnQgaTsKKyAKKyAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobnZyYW1fc2l6ZXMpOyBpKyspIHsKKy0JCWhlYWRlciA9IChzdHJ1Y3QgbnZyYW1faGVhZGVyICopKGVuZCAtIG52cmFtX3NpemVzW2ldKTsKKy0JCWlmIChoZWFkZXItPm1hZ2ljID09IE5WUkFNX01BR0lDKQorKwkJaWYgKGJjbTQ3eHhfbnZyYW1faXNfdmFsaWQoZW5kIC0gbnZyYW1fc2l6ZXNbaV0pKQorIAkJCXJldHVybiBudnJhbV9zaXplc1tpXTsKKyAJfQorIAorQEAgLTU1LDYgKzYxLDcgQEAgc3RhdGljIGludCBiY200N3h4X252cmFtX2ZpbmRfYW5kX2NvcHkodgorIHsKKyAJc3RydWN0IG52cmFtX2hlYWRlciBfX2lvbWVtICpoZWFkZXI7CisgCXNpemVfdCBmbGFzaF9zaXplOworKwlzaXplX3Qgb2Zmc2V0OworIAl1MzIgc2l6ZTsKKyAKKyAJaWYgKG52cmFtX2xlbikgeworQEAgLTY4LDMxICs3NSwzMCBAQCBzdGF0aWMgaW50IGJjbTQ3eHhfbnZyYW1fZmluZF9hbmRfY29weSh2CisgCQkvKiBXaW5kb3dlZCBmbGFzaCBhY2Nlc3MgKi8KKyAJCXNpemUgPSBmaW5kX252cmFtX3NpemUoZmxhc2hfc3RhcnQgKyBmbGFzaF9zaXplKTsKKyAJCWlmIChzaXplKSB7CistCQkJaGVhZGVyID0gKHN0cnVjdCBudnJhbV9oZWFkZXIgKikoZmxhc2hfc3RhcnQgKyBmbGFzaF9zaXplIC0gc2l6ZSk7CisrCQkJb2Zmc2V0ID0gZmxhc2hfc2l6ZSAtIHNpemU7CisgCQkJZ290byBmb3VuZDsKKyAJCX0KKyAJCWZsYXNoX3NpemUgPDw9IDE7CisgCX0KKyAKKyAJLyogVHJ5IGVtYmVkZGVkIE5WUkFNIGF0IDQgS0IgYW5kIDEgS0IgYXMgbGFzdCByZXNvcnRzICovCistCWhlYWRlciA9IChzdHJ1Y3QgbnZyYW1faGVhZGVyICopKGZsYXNoX3N0YXJ0ICsgNDA5Nik7CistCWlmIChoZWFkZXItPm1hZ2ljID09IE5WUkFNX01BR0lDKSB7CistCQlzaXplID0gTlZSQU1fU1BBQ0U7CisrCisrCW9mZnNldCA9IDQwOTY7CisrCWlmIChiY200N3h4X252cmFtX2lzX3ZhbGlkKGZsYXNoX3N0YXJ0ICsgb2Zmc2V0KSkKKyAJCWdvdG8gZm91bmQ7CistCX0KKyAKKy0JaGVhZGVyID0gKHN0cnVjdCBudnJhbV9oZWFkZXIgKikoZmxhc2hfc3RhcnQgKyAxMDI0KTsKKy0JaWYgKGhlYWRlci0+bWFnaWMgPT0gTlZSQU1fTUFHSUMpIHsKKy0JCXNpemUgPSBOVlJBTV9TUEFDRTsKKysJb2Zmc2V0ID0gMTAyNDsKKysJaWYgKGJjbTQ3eHhfbnZyYW1faXNfdmFsaWQoZmxhc2hfc3RhcnQgKyBvZmZzZXQpKQorIAkJZ290byBmb3VuZDsKKy0JfQorIAorIAlwcl9lcnIoIm5vIG52cmFtIGZvdW5kXG4iKTsKKyAJcmV0dXJuIC1FTlhJTzsKKyAKKyBmb3VuZDoKKysJaGVhZGVyID0gKHN0cnVjdCBudnJhbV9oZWFkZXIgKikoZmxhc2hfc3RhcnQgKyBvZmZzZXQpOworIAlfX2lvcmVhZDMyX2NvcHkobnZyYW1fYnVmLCBoZWFkZXIsIHNpemVvZigqaGVhZGVyKSAvIDQpOworIAludnJhbV9sZW4gPSAoKHN0cnVjdCBudnJhbV9oZWFkZXIgKikobnZyYW1fYnVmKSktPmxlbjsKKysJc2l6ZSA9IHJlc19zaXplIC0gb2Zmc2V0OworIAlpZiAobnZyYW1fbGVuID4gc2l6ZSkgeworIAkJcHJfZXJyKCJUaGUgbnZyYW0gc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIGhlYWRlciBzZWVtcyB0byBiZSBiaWdnZXIgdGhhbiB0aGUgcGFydGl0aW9uIG9uIGZsYXNoXG4iKTsKKyAJCW52cmFtX2xlbiA9IHNpemU7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvODMxLXY1LjEzLTAwMDMtZmlybXdhcmUtYmNtNDd4eF9udnJhbS1leHRyYWN0LWNvZGUtY29weWluZy1OVlJBTS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC84MzEtdjUuMTMtMDAwMy1maXJtd2FyZS1iY200N3h4X252cmFtLWV4dHJhY3QtY29kZS1jb3B5aW5nLU5WUkFNLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMzUxZjEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvODMxLXY1LjEzLTAwMDMtZmlybXdhcmUtYmNtNDd4eF9udnJhbS1leHRyYWN0LWNvZGUtY29weWluZy1OVlJBTS5wYXRjaApAQCAtMCwwICsxLDgwIEBACitGcm9tIDI5ODkyM2NmOTk5Y2VjZDJlZjA2ZGYxMjZmODVhM2Q2OGRhOGM0ZDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/UmFmYT1DNT04Mj0yME1pPUM1PTgyZWNraT89IDxyYWZhbEBtaWxlY2tpLnBsPgorRGF0ZTogTW9uLCA4IE1hciAyMDIxIDEwOjAzOjE4ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGZpcm13YXJlOiBiY200N3h4X252cmFtOiBleHRyYWN0IGNvZGUgY29weWluZyBOVlJBTQorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitUaGlzIHNpbXBsaWZpZXMgZnVuY3Rpb24gZmluZGluZyBOVlJBTS4gSXQgZG9lc24ndCBkaXJlY3RseSBkZWFsIHdpdGgKK05WUkFNIHN0cnVjdHVyZSBhbnltb3JlIGFuZCBpcyBhIGJpdCBzbWFsbGVyLgorCitTaWduZWQtb2ZmLWJ5OiBSYWZhxYIgTWnFgmVja2kgPHJhZmFsQG1pbGVja2kucGw+CitTaWduZWQtb2ZmLWJ5OiBUaG9tYXMgQm9nZW5kb2VyZmVyIDx0c2JvZ2VuZEBhbHBoYS5mcmFua2VuLmRlPgorLS0tCisgZHJpdmVycy9maXJtd2FyZS9icm9hZGNvbS9iY200N3h4X252cmFtLmMgfCA0MyArKysrKysrKysrKysrLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyNSBpbnNlcnRpb25zKCspLCAxOCBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9maXJtd2FyZS9icm9hZGNvbS9iY200N3h4X252cmFtLmMKKysrKyBiL2RyaXZlcnMvZmlybXdhcmUvYnJvYWRjb20vYmNtNDd4eF9udnJhbS5jCitAQCAtNTUsMTEgKzU1LDM0IEBAIHN0YXRpYyB1MzIgZmluZF9udnJhbV9zaXplKHZvaWQgX19pb21lbQorIH0KKyAKKyAvKioKKysgKiBiY200N3h4X252cmFtX2NvcHkgLSBjb3B5IE5WUkFNIHRvIGludGVybmFsIGJ1ZmZlcgorKyAqLworK3N0YXRpYyB2b2lkIGJjbTQ3eHhfbnZyYW1fY29weSh2b2lkIF9faW9tZW0gKm52cmFtX3N0YXJ0LCBzaXplX3QgcmVzX3NpemUpCisreworKwlzdHJ1Y3QgbnZyYW1faGVhZGVyIF9faW9tZW0gKmhlYWRlciA9IG52cmFtX3N0YXJ0OworKwlzaXplX3QgY29weV9zaXplOworKworKwljb3B5X3NpemUgPSBoZWFkZXItPmxlbjsKKysJaWYgKGNvcHlfc2l6ZSA+IHJlc19zaXplKSB7CisrCQlwcl9lcnIoIlRoZSBudnJhbSBzaXplIGFjY29yZGluZyB0byB0aGUgaGVhZGVyIHNlZW1zIHRvIGJlIGJpZ2dlciB0aGFuIHRoZSBwYXJ0aXRpb24gb24gZmxhc2hcbiIpOworKwkJY29weV9zaXplID0gcmVzX3NpemU7CisrCX0KKysJaWYgKGNvcHlfc2l6ZSA+PSBOVlJBTV9TUEFDRSkgeworKwkJcHJfZXJyKCJudnJhbSBvbiBmbGFzaCAoJXp1IGJ5dGVzKSBpcyBiaWdnZXIgdGhhbiB0aGUgcmVzZXJ2ZWQgc3BhY2UgaW4gbWVtb3J5LCB3aWxsIGp1c3QgY29weSB0aGUgZmlyc3QgJWkgYnl0ZXNcbiIsCisrCQkgICAgICAgY29weV9zaXplLCBOVlJBTV9TUEFDRSAtIDEpOworKwkJY29weV9zaXplID0gTlZSQU1fU1BBQ0UgLSAxOworKwl9CisrCisrCV9faW9yZWFkMzJfY29weShudnJhbV9idWYsIG52cmFtX3N0YXJ0LCBESVZfUk9VTkRfVVAoY29weV9zaXplLCA0KSk7CisrCW52cmFtX2J1ZltOVlJBTV9TUEFDRSAtIDFdID0gJ1wwJzsKKysJbnZyYW1fbGVuID0gY29weV9zaXplOworK30KKysKKysvKioKKyAgKiBiY200N3h4X252cmFtX2ZpbmRfYW5kX2NvcHkgLSBmaW5kIE5WUkFNIG9uIGZsYXNoIG1hcHBpbmcgJiBjb3B5IGl0CisgICovCisgc3RhdGljIGludCBiY200N3h4X252cmFtX2ZpbmRfYW5kX2NvcHkodm9pZCBfX2lvbWVtICpmbGFzaF9zdGFydCwgc2l6ZV90IHJlc19zaXplKQorIHsKKy0Jc3RydWN0IG52cmFtX2hlYWRlciBfX2lvbWVtICpoZWFkZXI7CisgCXNpemVfdCBmbGFzaF9zaXplOworIAlzaXplX3Qgb2Zmc2V0OworIAl1MzIgc2l6ZTsKK0BAIC05NSwyMyArMTE4LDcgQEAgc3RhdGljIGludCBiY200N3h4X252cmFtX2ZpbmRfYW5kX2NvcHkodgorIAlyZXR1cm4gLUVOWElPOworIAorIGZvdW5kOgorLQloZWFkZXIgPSAoc3RydWN0IG52cmFtX2hlYWRlciAqKShmbGFzaF9zdGFydCArIG9mZnNldCk7CistCV9faW9yZWFkMzJfY29weShudnJhbV9idWYsIGhlYWRlciwgc2l6ZW9mKCpoZWFkZXIpIC8gNCk7CistCW52cmFtX2xlbiA9ICgoc3RydWN0IG52cmFtX2hlYWRlciAqKShudnJhbV9idWYpKS0+bGVuOworLQlzaXplID0gcmVzX3NpemUgLSBvZmZzZXQ7CistCWlmIChudnJhbV9sZW4gPiBzaXplKSB7CistCQlwcl9lcnIoIlRoZSBudnJhbSBzaXplIGFjY29yZGluZyB0byB0aGUgaGVhZGVyIHNlZW1zIHRvIGJlIGJpZ2dlciB0aGFuIHRoZSBwYXJ0aXRpb24gb24gZmxhc2hcbiIpOworLQkJbnZyYW1fbGVuID0gc2l6ZTsKKy0JfQorLQlpZiAobnZyYW1fbGVuID49IE5WUkFNX1NQQUNFKSB7CistCQlwcl9lcnIoIm52cmFtIG9uIGZsYXNoICglenUgYnl0ZXMpIGlzIGJpZ2dlciB0aGFuIHRoZSByZXNlcnZlZCBzcGFjZSBpbiBtZW1vcnksIHdpbGwganVzdCBjb3B5IHRoZSBmaXJzdCAlaSBieXRlc1xuIiwKKy0JCSAgICAgICBudnJhbV9sZW4sIE5WUkFNX1NQQUNFIC0gMSk7CistCQludnJhbV9sZW4gPSBOVlJBTV9TUEFDRSAtIDE7CistCX0KKy0JLyogcHJvY2VlZCByZWFkaW5nIGRhdGEgYWZ0ZXIgaGVhZGVyICovCistCV9faW9yZWFkMzJfY29weShudnJhbV9idWYgKyBzaXplb2YoKmhlYWRlciksIGhlYWRlciArIDEsCistCQkJRElWX1JPVU5EX1VQKG52cmFtX2xlbiwgNCkpOworLQludnJhbV9idWZbTlZSQU1fU1BBQ0UgLSAxXSA9ICdcMCc7CisrCWJjbTQ3eHhfbnZyYW1fY29weShmbGFzaF9zdGFydCArIG9mZnNldCwgcmVzX3NpemUgLSBvZmZzZXQpOworIAorIAlyZXR1cm4gMDsKKyB9CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvODMxLXY1LjEzLTAwMDQtZmlybXdhcmUtYmNtNDd4eF9udnJhbS1sb29rLWZvci1OVlJBTS13aXRoLWZvci1pbnN0ZS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC84MzEtdjUuMTMtMDAwNC1maXJtd2FyZS1iY200N3h4X252cmFtLWxvb2stZm9yLU5WUkFNLXdpdGgtZm9yLWluc3RlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1OWExMzIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvODMxLXY1LjEzLTAwMDQtZmlybXdhcmUtYmNtNDd4eF9udnJhbS1sb29rLWZvci1OVlJBTS13aXRoLWZvci1pbnN0ZS5wYXRjaApAQCAtMCwwICsxLDM3IEBACitGcm9tIDk4YjY4MzI0ZjY3MjM2ZThjOTE1Mjk3NjUzNWRjMWYyN2ZiNjdiYTggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/UmFmYT1DNT04Mj0yME1pPUM1PTgyZWNraT89IDxyYWZhbEBtaWxlY2tpLnBsPgorRGF0ZTogTW9uLCA4IE1hciAyMDIxIDEwOjAzOjE5ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGZpcm13YXJlOiBiY200N3h4X252cmFtOiBsb29rIGZvciBOVlJBTSB3aXRoIGZvciBpbnN0ZWFkIG9mCisgd2hpbGUKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworVGhpcyBsb29wIHJlcXVpcmVzIHZhcmlhYmxlIGluaXRpYWxpemF0aW9uLCBzdG9wIGNvbmRpdGlvbiBhbmQgcG9zdAoraXRlcmF0aW9uIGluY3JlbWVudC4gSXQncyBwcmV0dHkgbXVjaCBhIGZvciBsb29wIGRlZmluaXRpb24uCisKK1NpZ25lZC1vZmYtYnk6IFJhZmHFgiBNacWCZWNraSA8cmFmYWxAbWlsZWNraS5wbD4KK1NpZ25lZC1vZmYtYnk6IFRob21hcyBCb2dlbmRvZXJmZXIgPHRzYm9nZW5kQGFscGhhLmZyYW5rZW4uZGU+CistLS0KKyBkcml2ZXJzL2Zpcm13YXJlL2Jyb2FkY29tL2JjbTQ3eHhfbnZyYW0uYyB8IDQgKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMyBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9maXJtd2FyZS9icm9hZGNvbS9iY200N3h4X252cmFtLmMKKysrKyBiL2RyaXZlcnMvZmlybXdhcmUvYnJvYWRjb20vYmNtNDd4eF9udnJhbS5jCitAQCAtOTMsMTUgKzkzLDEzIEBAIHN0YXRpYyBpbnQgYmNtNDd4eF9udnJhbV9maW5kX2FuZF9jb3B5KHYKKyAJfQorIAorIAkvKiBUT0RPOiB3aGVuIG52cmFtIGlzIG9uIG5hbmQgZmxhc2ggY2hlY2sgZm9yIGJhZCBibG9ja3MgZmlyc3QuICovCistCWZsYXNoX3NpemUgPSBGTEFTSF9NSU47CistCXdoaWxlIChmbGFzaF9zaXplIDw9IHJlc19zaXplKSB7CisrCWZvciAoZmxhc2hfc2l6ZSA9IEZMQVNIX01JTjsgZmxhc2hfc2l6ZSA8PSByZXNfc2l6ZTsgZmxhc2hfc2l6ZSA8PD0gMSkgeworIAkJLyogV2luZG93ZWQgZmxhc2ggYWNjZXNzICovCisgCQlzaXplID0gZmluZF9udnJhbV9zaXplKGZsYXNoX3N0YXJ0ICsgZmxhc2hfc2l6ZSk7CisgCQlpZiAoc2l6ZSkgeworIAkJCW9mZnNldCA9IGZsYXNoX3NpemUgLSBzaXplOworIAkJCWdvdG8gZm91bmQ7CisgCQl9CistCQlmbGFzaF9zaXplIDw8PSAxOworIAl9CisgCisgCS8qIFRyeSBlbWJlZGRlZCBOVlJBTSBhdCA0IEtCIGFuZCAxIEtCIGFzIGxhc3QgcmVzb3J0cyAqLwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzgzMS12NS4xMy0wMDA1LWZpcm13YXJlLWJjbTQ3eHhfbnZyYW0taW5saW5lLWNvZGUtY2hlY2tpbmctTlZSQU0tc2kucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvODMxLXY1LjEzLTAwMDUtZmlybXdhcmUtYmNtNDd4eF9udnJhbS1pbmxpbmUtY29kZS1jaGVja2luZy1OVlJBTS1zaS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWQyNTAwCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzgzMS12NS4xMy0wMDA1LWZpcm13YXJlLWJjbTQ3eHhfbnZyYW0taW5saW5lLWNvZGUtY2hlY2tpbmctTlZSQU0tc2kucGF0Y2gKQEAgLTAsMCArMSw3MCBAQAorRnJvbSBmNTJkYTRjY2ZlYzkxOTJlMTdmNWMxNjI2MGRmZGQ2ZDNlYTc2ZjY1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP1JhZmE9QzU9ODI9MjBNaT1DNT04MmVja2k/PSA8cmFmYWxAbWlsZWNraS5wbD4KK0RhdGU6IE1vbiwgOCBNYXIgMjAyMSAxMDowMzoyMCArMDEwMAorU3ViamVjdDogW1BBVENIXSBmaXJtd2FyZTogYmNtNDd4eF9udnJhbTogaW5saW5lIGNvZGUgY2hlY2tpbmcgTlZSQU0gc2l6ZQorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitTZXBhcmF0ZWQgZnVuY3Rpb24gd2FzIG5vdCBpbXByb3ZpbmcgY29kZSBxdWFsaXR5IG11Y2ggKG9yIGF0IGFsbCkuCitNb3Jlb3ZlciBpdCBleHBlY3RlZCBwb3NzaWJsZSBmbGFzaCBlbmQgYWRkcmVzcyBhcyBhcmd1bWVudCBhbmQgaXQgd2FzCityZXR1cm5pbmcgTlZSQU0gc2l6ZS4KKworVGhlIG5ldyBjb2RlIGFsd2F5cyBvcGVyYXRlcyBvbiBvZmZzZXRzIHdoaWNoIG1lYW5zIGxlc3MgbG9naWMgYW5kIGxlc3MKK2NhbGN1bGF0aW9ucy4KKworU2lnbmVkLW9mZi1ieTogUmFmYcWCIE1pxYJlY2tpIDxyYWZhbEBtaWxlY2tpLnBsPgorU2lnbmVkLW9mZi1ieTogVGhvbWFzIEJvZ2VuZG9lcmZlciA8dHNib2dlbmRAYWxwaGEuZnJhbmtlbi5kZT4KKy0tLQorIGRyaXZlcnMvZmlybXdhcmUvYnJvYWRjb20vYmNtNDd4eF9udnJhbS5jIHwgMjUgKysrKysrKy0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAxOCBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9maXJtd2FyZS9icm9hZGNvbS9iY200N3h4X252cmFtLmMKKysrKyBiL2RyaXZlcnMvZmlybXdhcmUvYnJvYWRjb20vYmNtNDd4eF9udnJhbS5jCitAQCAtNDIsMTggKzQyLDYgQEAgc3RhdGljIGJvb2wgYmNtNDd4eF9udnJhbV9pc192YWxpZCh2b2lkCisgCXJldHVybiAoKHN0cnVjdCBudnJhbV9oZWFkZXIgKiludnJhbSktPm1hZ2ljID09IE5WUkFNX01BR0lDOworIH0KKyAKKy1zdGF0aWMgdTMyIGZpbmRfbnZyYW1fc2l6ZSh2b2lkIF9faW9tZW0gKmVuZCkKKy17CistCWludCBpOworLQorLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShudnJhbV9zaXplcyk7IGkrKykgeworLQkJaWYgKGJjbTQ3eHhfbnZyYW1faXNfdmFsaWQoZW5kIC0gbnZyYW1fc2l6ZXNbaV0pKQorLQkJCXJldHVybiBudnJhbV9zaXplc1tpXTsKKy0JfQorLQorLQlyZXR1cm4gMDsKKy19CistCisgLyoqCisgICogYmNtNDd4eF9udnJhbV9jb3B5IC0gY29weSBOVlJBTSB0byBpbnRlcm5hbCBidWZmZXIKKyAgKi8KK0BAIC04NSw3ICs3Myw3IEBAIHN0YXRpYyBpbnQgYmNtNDd4eF9udnJhbV9maW5kX2FuZF9jb3B5KHYKKyB7CisgCXNpemVfdCBmbGFzaF9zaXplOworIAlzaXplX3Qgb2Zmc2V0OworLQl1MzIgc2l6ZTsKKysJaW50IGk7CisgCisgCWlmIChudnJhbV9sZW4pIHsKKyAJCXByX3dhcm4oIm52cmFtIGFscmVhZHkgaW5pdGlhbGl6ZWRcbiIpOworQEAgLTkzLDEyICs4MSwxMyBAQCBzdGF0aWMgaW50IGJjbTQ3eHhfbnZyYW1fZmluZF9hbmRfY29weSh2CisgCX0KKyAKKyAJLyogVE9ETzogd2hlbiBudnJhbSBpcyBvbiBuYW5kIGZsYXNoIGNoZWNrIGZvciBiYWQgYmxvY2tzIGZpcnN0LiAqLworKworKwkvKiBUcnkgZXZlcnkgcG9zc2libGUgZmxhc2ggc2l6ZSBhbmQgY2hlY2sgZm9yIE5WUkFNIGF0IGl0cyBlbmQgKi8KKyAJZm9yIChmbGFzaF9zaXplID0gRkxBU0hfTUlOOyBmbGFzaF9zaXplIDw9IHJlc19zaXplOyBmbGFzaF9zaXplIDw8PSAxKSB7CistCQkvKiBXaW5kb3dlZCBmbGFzaCBhY2Nlc3MgKi8KKy0JCXNpemUgPSBmaW5kX252cmFtX3NpemUoZmxhc2hfc3RhcnQgKyBmbGFzaF9zaXplKTsKKy0JCWlmIChzaXplKSB7CistCQkJb2Zmc2V0ID0gZmxhc2hfc2l6ZSAtIHNpemU7CistCQkJZ290byBmb3VuZDsKKysJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG52cmFtX3NpemVzKTsgaSsrKSB7CisrCQkJb2Zmc2V0ID0gZmxhc2hfc2l6ZSAtIG52cmFtX3NpemVzW2ldOworKwkJCWlmIChiY200N3h4X252cmFtX2lzX3ZhbGlkKGZsYXNoX3N0YXJ0ICsgb2Zmc2V0KSkKKysJCQkJZ290byBmb3VuZDsKKyAJCX0KKyAJfQorIApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40Lzg1Mi12NS4xMC0wMDAxLW5ldC1zZnAtVlNPTC1WMjgwMUYtQ2FybGl0b3h4UHJvLUNQR09TMDMtMDQ5MC12Mi4wLXcucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvODUyLXY1LjEwLTAwMDEtbmV0LXNmcC1WU09MLVYyODAxRi1DYXJsaXRveHhQcm8tQ1BHT1MwMy0wNDkwLXYyLjAtdy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTAxMDU0Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40Lzg1Mi12NS4xMC0wMDAxLW5ldC1zZnAtVlNPTC1WMjgwMUYtQ2FybGl0b3h4UHJvLUNQR09TMDMtMDQ5MC12Mi4wLXcucGF0Y2gKQEAgLTAsMCArMSwxNDQgQEAKK0Zyb20gMGQwMzViZWQyYTRhNmM0ODc4NTE4NzQ5MzQ4YmU2MWJmMDgyZDEyYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CitEYXRlOiBXZWQsIDkgRGVjIDIwMjAgMTE6MjI6NDkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gbmV0OiBzZnA6IFZTT0wgVjI4MDFGIC8gQ2FybGl0b3h4UHJvIENQR09TMDMtMDQ5MCB2Mi4wCisgd29ya2Fyb3VuZAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitBZGQgYSB3b3JrYXJvdW5kIGZvciB0aGUgZGV0ZWN0aW9uIG9mIFZTT0wgVjI4MDFGIC8gQ2FybGl0b3h4UHJvCitDUEdPUzAzLTA0OTAgdjIuMCBHUE9OIG1vZHVsZSB3aGljaCBDYXJsaXRveHhQcm8gc3RhdGVzIG5lZWRzIHNpbmdsZQorYnl0ZSBJMkMgcmVhZHMgdG8gdGhlIEVFUFJPTS4KKworUGFsaSBSb2jDoXIgcmVwb3J0cyB0aGF0IGhlIGFsc28gaGFzIGEgQ2FybGl0b3h4UHJvLWJhc2VkIFYyODAxRiBtb2R1bGUsCit3aGljaCByZXBvcnRzIGEgbWFudWZhY3R1cmVyIG9mICJPRU0iLiBUaGlzIG1hbnVmYWN0dXJlciBjYW4ndCBiZQorbWF0Y2hlZCBhcyBpdCBhcHBlYXJzIGluIG1hbnkgZGlmZmVyZW50IG1vZHVsZXMsIHNvIGFsc28gbWF0Y2ggdGhlIHBhcnQKK251bWJlciB0b28uCisKK1JlcG9ydGVkLWJ5OiBUaG9tYXMgU2NocmVpYmVyIDx0c2NocmVpYmVAZ21haWwuY29tPgorUmVwb3J0ZWQtYnk6IFBhbGkgUm9ow6FyIDxwYWxpQGtlcm5lbC5vcmc+CitUZXN0ZWQtYnk6IFBhbGkgUm9ow6FyIDxwYWxpQGtlcm5lbC5vcmc+CitSZXZpZXdlZC1ieTogQW5kcmV3IEx1bm4gPGFuZHJld0BsdW5uLmNoPgorU2lnbmVkLW9mZi1ieTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KK1NpZ25lZC1vZmYtYnk6IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KKy0tLQorIGRyaXZlcnMvbmV0L3BoeS9zZnAuYyB8IDYzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNTggaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9uZXQvcGh5L3NmcC5jCisrKysgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmMKK0BAIC0xOTEsNiArMTkxLDcgQEAgc3RydWN0IHNmcCB7CisgCXN0cnVjdCBzZnBfYnVzICpzZnBfYnVzOworIAlzdHJ1Y3QgcGh5X2RldmljZSAqbW9kX3BoeTsKKyAJY29uc3Qgc3RydWN0IHNmZl9kYXRhICp0eXBlOworKwlzaXplX3QgaTJjX2Jsb2NrX3NpemU7CisgCXUzMiBtYXhfcG93ZXJfbVc7CisgCisgCXVuc2lnbmVkIGludCAoKmdldF9zdGF0ZSkoc3RydWN0IHNmcCAqKTsKK0BAIC0zMDUsMTAgKzMwNiwxOSBAQCBzdGF0aWMgaW50IHNmcF9pMmNfcmVhZChzdHJ1Y3Qgc2ZwICpzZnAsCisgCQkJc2l6ZV90IGxlbikKKyB7CisgCXN0cnVjdCBpMmNfbXNnIG1zZ3NbMl07CistCXU4IGJ1c19hZGRyID0gYTIgPyAweDUxIDogMHg1MDsKKysJc2l6ZV90IGJsb2NrX3NpemU7CisgCXNpemVfdCB0aGlzX2xlbjsKKysJdTggYnVzX2FkZHI7CisgCWludCByZXQ7CisgCisrCWlmIChhMikgeworKwkJYmxvY2tfc2l6ZSA9IDE2OworKwkJYnVzX2FkZHIgPSAweDUxOworKwl9IGVsc2UgeworKwkJYmxvY2tfc2l6ZSA9IHNmcC0+aTJjX2Jsb2NrX3NpemU7CisrCQlidXNfYWRkciA9IDB4NTA7CisrCX0KKysKKyAJbXNnc1swXS5hZGRyID0gYnVzX2FkZHI7CisgCW1zZ3NbMF0uZmxhZ3MgPSAwOworIAltc2dzWzBdLmxlbiA9IDE7CitAQCAtMzIwLDggKzMzMCw4IEBAIHN0YXRpYyBpbnQgc2ZwX2kyY19yZWFkKHN0cnVjdCBzZnAgKnNmcCwKKyAKKyAJd2hpbGUgKGxlbikgeworIAkJdGhpc19sZW4gPSBsZW47CistCQlpZiAodGhpc19sZW4gPiAxNikKKy0JCQl0aGlzX2xlbiA9IDE2OworKwkJaWYgKHRoaXNfbGVuID4gYmxvY2tfc2l6ZSkKKysJCQl0aGlzX2xlbiA9IGJsb2NrX3NpemU7CisgCisgCQltc2dzWzFdLmxlbiA9IHRoaXNfbGVuOworIAorQEAgLTE1NjksNiArMTU3OSwyOCBAQCBzdGF0aWMgaW50IHNmcF9zbV9tb2RfaHBvd2VyKHN0cnVjdCBzZnAKKyAJcmV0dXJuIDA7CisgfQorIAorKy8qIFNvbWUgbW9kdWxlcyAoTm9raWEgM0ZFNDY1NDFBQSkgbG9jayB1cCBpZiBieXRlIDB4NTEgaXMgcmVhZCBhcyBhCisrICogc2luZ2xlIHJlYWQuIFN3aXRjaCBiYWNrIHRvIHJlYWRpbmcgMTYgYnl0ZSBibG9ja3MgdW5sZXNzIHdlIGhhdmUKKysgKiBhIENhcmxpdG94eFBybyBtb2R1bGUgKHJlYnJhbmRlZCBWU09MIFYyODAxRikuIEV2ZW4gbW9yZSBhbm5veWluZ2x5LAorKyAqIHNvbWUgVlNPTCBWMjgwMUYgaGF2ZSB0aGUgdmVuZG9yIG5hbWUgY2hhbmdlZCB0byBPRU0uCisrICovCisrc3RhdGljIGludCBzZnBfcXVpcmtfaTJjX2Jsb2NrX3NpemUoY29uc3Qgc3RydWN0IHNmcF9lZXByb21fYmFzZSAqYmFzZSkKKyt7CisrCWlmICghbWVtY21wKGJhc2UtPnZlbmRvcl9uYW1lLCAiVlNPTCAgICAgICAgICAgICIsIDE2KSkKKysJCXJldHVybiAxOworKwlpZiAoIW1lbWNtcChiYXNlLT52ZW5kb3JfbmFtZSwgIk9FTSAgICAgICAgICAgICAiLCAxNikgJiYKKysJICAgICFtZW1jbXAoYmFzZS0+dmVuZG9yX3BuLCAgICJWMjgwMUYgICAgICAgICAgIiwgMTYpKQorKwkJcmV0dXJuIDE7CisrCisrCS8qIFNvbWUgbW9kdWxlcyBjYW4ndCBjb3BlIHdpdGggbG9uZyByZWFkcyAqLworKwlyZXR1cm4gMTY7CisrfQorKworK3N0YXRpYyB2b2lkIHNmcF9xdWlya3NfYmFzZShzdHJ1Y3Qgc2ZwICpzZnAsIGNvbnN0IHN0cnVjdCBzZnBfZWVwcm9tX2Jhc2UgKmJhc2UpCisreworKwlzZnAtPmkyY19ibG9ja19zaXplID0gc2ZwX3F1aXJrX2kyY19ibG9ja19zaXplKGJhc2UpOworK30KKysKKyBzdGF0aWMgaW50IHNmcF9zbV9tb2RfcHJvYmUoc3RydWN0IHNmcCAqc2ZwLCBib29sIHJlcG9ydCkKKyB7CisgCS8qIFNGUCBtb2R1bGUgaW5zZXJ0ZWQgLSByZWFkIEkyQyBkYXRhICovCitAQCAtMTU3NywxNCArMTYwOSwyMCBAQCBzdGF0aWMgaW50IHNmcF9zbV9tb2RfcHJvYmUoc3RydWN0IHNmcCAqCisgCXU4IGNoZWNrOworIAlpbnQgcmV0OworIAorLQlyZXQgPSBzZnBfcmVhZChzZnAsIGZhbHNlLCAwLCAmaWQsIHNpemVvZihpZCkpOworKwkvKiBTb21lIG1vZHVsZXMgKENhcmxpdG94eFBybyBDUEdPUzAzLTA0OTApIGRvIG5vdCBzdXBwb3J0IG11bHRpYnl0ZQorKwkgKiByZWFkcyBmcm9tIHRoZSBFRVBST00sIHNvIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIGJhc2UgaWRlbnRpZnlpbmcKKysJICogaW5mb3JtYXRpb24gb25lIGJ5dGUgYXQgYSB0aW1lLgorKwkgKi8KKysJc2ZwLT5pMmNfYmxvY2tfc2l6ZSA9IDE7CisrCisrCXJldCA9IHNmcF9yZWFkKHNmcCwgZmFsc2UsIDAsICZpZC5iYXNlLCBzaXplb2YoaWQuYmFzZSkpOworIAlpZiAocmV0IDwgMCkgeworIAkJaWYgKHJlcG9ydCkKKyAJCQlkZXZfZXJyKHNmcC0+ZGV2LCAiZmFpbGVkIHRvIHJlYWQgRUVQUk9NOiAlZFxuIiwgcmV0KTsKKyAJCXJldHVybiAtRUFHQUlOOworIAl9CisgCistCWlmIChyZXQgIT0gc2l6ZW9mKGlkKSkgeworKwlpZiAocmV0ICE9IHNpemVvZihpZC5iYXNlKSkgeworIAkJZGV2X2VycihzZnAtPmRldiwgIkVFUFJPTSBzaG9ydCByZWFkOiAlZFxuIiwgcmV0KTsKKyAJCXJldHVybiAtRUFHQUlOOworIAl9CitAQCAtMTYxMiw2ICsxNjUwLDIxIEBAIHN0YXRpYyBpbnQgc2ZwX3NtX21vZF9wcm9iZShzdHJ1Y3Qgc2ZwICoKKyAJCX0KKyAJfQorIAorKwkvKiBBcHBseSBhbnkgZWFybHkgbW9kdWxlLXNwZWNpZmljIHF1aXJrcyAqLworKwlzZnBfcXVpcmtzX2Jhc2Uoc2ZwLCAmaWQuYmFzZSk7CisrCisrCXJldCA9IHNmcF9yZWFkKHNmcCwgZmFsc2UsIFNGUF9DQ19CQVNFICsgMSwgJmlkLmV4dCwgc2l6ZW9mKGlkLmV4dCkpOworKwlpZiAocmV0IDwgMCkgeworKwkJaWYgKHJlcG9ydCkKKysJCQlkZXZfZXJyKHNmcC0+ZGV2LCAiZmFpbGVkIHRvIHJlYWQgRUVQUk9NOiAlZFxuIiwgcmV0KTsKKysJCXJldHVybiAtRUFHQUlOOworKwl9CisrCisrCWlmIChyZXQgIT0gc2l6ZW9mKGlkLmV4dCkpIHsKKysJCWRldl9lcnIoc2ZwLT5kZXYsICJFRVBST00gc2hvcnQgcmVhZDogJWRcbiIsIHJldCk7CisrCQlyZXR1cm4gLUVBR0FJTjsKKysJfQorKworIAljaGVjayA9IHNmcF9jaGVjaygmaWQuZXh0LCBzaXplb2YoaWQuZXh0KSAtIDEpOworIAlpZiAoY2hlY2sgIT0gaWQuZXh0LmNjX2V4dCkgeworIAkJaWYgKGNvdHN3b3JrcykgewpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40Lzg1Mi12NS4xMC0wMDAyLW5ldC1zZnAtYWRkLXdvcmthcm91bmQtZm9yLVJlYWx0ZWstUlRMODY3Mi1hbmQtUlRMOTYucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvODUyLXY1LjEwLTAwMDItbmV0LXNmcC1hZGQtd29ya2Fyb3VuZC1mb3ItUmVhbHRlay1SVEw4NjcyLWFuZC1SVEw5Ni5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2FlOTdjCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40Lzg1Mi12NS4xMC0wMDAyLW5ldC1zZnAtYWRkLXdvcmthcm91bmQtZm9yLVJlYWx0ZWstUlRMODY3Mi1hbmQtUlRMOTYucGF0Y2gKQEAgLTAsMCArMSwyMTEgQEAKK0Zyb20gNDI2YzZjYmM0MDljYmRhOWFiMWE5ZGJmMTVkM2MyZWY5NDdlYjhjMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9QYWxpPTIwUm9oPUMzPUExcj89IDxwYWxpQGtlcm5lbC5vcmc+CitEYXRlOiBNb24sIDI1IEphbiAyMDIxIDE2OjAyOjI3ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIG5ldDogc2ZwOiBhZGQgd29ya2Fyb3VuZCBmb3IgUmVhbHRlayBSVEw4NjcyIGFuZCBSVEw5NjAxQworIGNoaXBzCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK1RoZSB3b3JrYXJvdW5kIGZvciBWU09MIFYyODAxRiBicmFuZCBiYXNlZCBHUE9OIFNGUCBtb2R1bGVzIGFkZGVkIGluIGNvbW1pdAorMGQwMzViZWQyYTRhICgibmV0OiBzZnA6IFZTT0wgVjI4MDFGIC8gQ2FybGl0b3h4UHJvIENQR09TMDMtMDQ5MCB2Mi4wCit3b3JrYXJvdW5kIikgd29ya3Mgb25seSBmb3IgSURzIGFkZGVkIGV4cGxpY2l0bHkgdG8gdGhlIGxpc3QuIFNpbmNlIHRoZXJlCithcmUgcmVicmFuZGVkIG1vZHVsZXMgd2hlcmUgT0VNIHZlbmRvcnMgcHV0IGRpZmZlcmVudCBzdHJpbmdzIGludG8gdGhlCit2ZW5kb3IgbmFtZSBmaWVsZCwgd2UgY2Fubm90IGJhc2Ugd29ya2Fyb3VuZCBvbiBJRHMgb25seS4KKworTW9yZW92ZXIgdGhlIGlzc3VlIHdoaWNoIHRoZSBhYm92ZSBtZW50aW9uZWQgY29tbWl0IHRyaWVkIHRvIHdvcmsgYXJvdW5kIGlzCitnZW5lcmljIG5vdCBvbmx5IHRvIFZTT0wgYmFzZWQgbW9kdWxlcywgYnV0IHJhdGhlciB0byBhbGwgR1BPTiBtb2R1bGVzCitiYXNlZCBvbiBSZWFsdGVrIFJUTDg2NzIgYW5kIFJUTDk2MDFDIGNoaXBzLgorCitUaGVzZSBpbmNsdWRlIGF0IGxlYXN0IHRoZSBmb2xsb3dpbmcgR1BPTiBtb2R1bGVzOgorKiBWLVNPTCBWMjgwMUYKKyogQy1EYXRhIEZENTExR1gtUk0wCisqIE9QVE9OIEdQODAxUgorKiBCQVVEQ09NIEJELTEyMzQtU0ZNCisqIENQR09TMDMtMDQ5MCB2Mi4wCisqIFViaXF1aXRpIFUtRmliZXIgSW5zdGFudAorKiBFWE9UIEVHUzEKKworVGhlc2UgUmVhbHRlayBjaGlwcyBoYXZlIGJyb2tlbiBFRVBST00gZW11bGF0b3Igd2hpY2ggZm9yIE4tYnl0ZSByZWFkCitvcGVyYXRpb24gcmV0dXJucyBqdXN0IHRoZSBmaXJzdCBieXRlIG9mIEVFUFJPTSBkYXRhLCBmb2xsb3dlZCBieSBOLTEKK3plcm9zLgorCitJbnRyb2R1Y2UgYSBuZXcgZnVuY3Rpb24sIHNmcF9pZF9uZWVkc19ieXRlX2lvKCksIHdoaWNoIGRldGVjdHMgU0ZQIG1vZHVsZXMKK3dpdGggYnJva2VuIEVFUFJPTSBlbXVsYXRvciBiYXNlZCBvbiBOLTEgemVyb3MgYW5kIHN3aXRjaCB0byAxIGJ5dGUgRUVQUk9NCityZWFkaW5nIG9wZXJhdGlvbi4KKworRnVuY3Rpb24gc2ZwX2kyY19yZWFkKCkgbm93IGFsd2F5cyB1c2VzIHNpbmdsZSBieXRlIHJlYWRpbmcgd2hlbiBpdCBpcworcmVxdWlyZWQgYW5kIHdoZW4gZnVuY3Rpb24gc2ZwX2h3bW9uX3Byb2JlKCkgZGV0ZWN0cyBzaW5nbGUgYnl0ZSBhY2Nlc3MsCitpdCBkaXNhYmxlcyByZWdpc3RyYXRpb24gb2YgaHdtb24gZGV2aWNlLCBiZWNhdXNlIGluIHRoaXMgY2FzZSB3ZSBjYW5ub3QKK3JlbGlhYmx5IGFuZCBhdG9taWNhbGx5IHJlYWQgMiBieXRlcyBhcyBpcyByZXF1aXJlZCBieSB0aGUgc3RhbmRhcmQgZm9yCityZXRyaWV2aW5nIHZhbHVlcyBmcm9tIGRpYWdub3N0aWMgYXJlYS4KKworKFRoZXNlIFJlYWx0ZWsgY2hpcHMgYXJlIGJyb2tlbiBpbiBhIHdheSB0aGF0IHZpb2xhdGVzIFNGUCBzdGFuZGFyZHMgZm9yCitkaWFnbm9zdGljIGludGVyZmFjZS4gS2VybmVsIGluIHRoaXMgY2FzZSBzaW1wbHkgY2Fubm90IGRvIGFueXRoaW5nIGxlc3MKK29mIHNraXBwaW5nIHJlZ2lzdHJhdGlvbiBvZiB0aGUgaHdtb24gaW50ZXJmYWNlLikKKworVGhpcyBwYXRjaCBmaXhlcyByZWFkaW5nIG9mIEVFUFJPTSBjb250ZW50IGZyb20gU0ZQIG1vZHVsZXMgYmFzZWQgb24KK1JlYWx0ZWsgUlRMODY3MiBhbmQgUlRMOTYwMUMgY2hpcHMuIERpYWdub3N0aWMgaW50ZXJmYWNlIG9mIEVFUFJPTSBzdGF5cworYnJva2VuIGFuZCBjYW5ub3QgYmUgZml4ZWQuCisKK0ZpeGVzOiAwZDAzNWJlZDJhNGEgKCJuZXQ6IHNmcDogVlNPTCBWMjgwMUYgLyBDYXJsaXRveHhQcm8gQ1BHT1MwMy0wNDkwIHYyLjAgd29ya2Fyb3VuZCIpCitDby1kZXZlbG9wZWQtYnk6IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CitTaWduZWQtb2ZmLWJ5OiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorU2lnbmVkLW9mZi1ieTogUGFsaSBSb2jDoXIgPHBhbGlAa2VybmVsLm9yZz4KK1NpZ25lZC1vZmYtYnk6IEpha3ViIEtpY2luc2tpIDxrdWJhQGtlcm5lbC5vcmc+CistLS0KKyBkcml2ZXJzL25ldC9waHkvc2ZwLmMgfCAxMDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDY3IGluc2VydGlvbnMoKyksIDMzIGRlbGV0aW9ucygtKQorCistLS0gYS9kcml2ZXJzL25ldC9waHkvc2ZwLmMKKysrKyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuYworQEAgLTMwNiwxOSArMzA2LDExIEBAIHN0YXRpYyBpbnQgc2ZwX2kyY19yZWFkKHN0cnVjdCBzZnAgKnNmcCwKKyAJCQlzaXplX3QgbGVuKQorIHsKKyAJc3RydWN0IGkyY19tc2cgbXNnc1syXTsKKy0Jc2l6ZV90IGJsb2NrX3NpemU7CisrCXU4IGJ1c19hZGRyID0gYTIgPyAweDUxIDogMHg1MDsKKysJc2l6ZV90IGJsb2NrX3NpemUgPSBzZnAtPmkyY19ibG9ja19zaXplOworIAlzaXplX3QgdGhpc19sZW47CistCXU4IGJ1c19hZGRyOworIAlpbnQgcmV0OworIAorLQlpZiAoYTIpIHsKKy0JCWJsb2NrX3NpemUgPSAxNjsKKy0JCWJ1c19hZGRyID0gMHg1MTsKKy0JfSBlbHNlIHsKKy0JCWJsb2NrX3NpemUgPSBzZnAtPmkyY19ibG9ja19zaXplOworLQkJYnVzX2FkZHIgPSAweDUwOworLQl9CistCisgCW1zZ3NbMF0uYWRkciA9IGJ1c19hZGRyOworIAltc2dzWzBdLmZsYWdzID0gMDsKKyAJbXNnc1swXS5sZW4gPSAxOworQEAgLTEyNDUsNiArMTIzNywyMCBAQCBzdGF0aWMgdm9pZCBzZnBfaHdtb25fcHJvYmUoc3RydWN0IHdvcmtfCisgCXN0cnVjdCBzZnAgKnNmcCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc2ZwLCBod21vbl9wcm9iZS53b3JrKTsKKyAJaW50IGVyciwgaTsKKyAKKysJLyogaHdtb24gaW50ZXJmYWNlIG5lZWRzIHRvIGFjY2VzcyAxNmJpdCByZWdpc3RlcnMgaW4gYXRvbWljIHdheSB0bworKwkgKiBndWFyYW50ZWUgY29oZXJlbmN5IG9mIHRoZSBkaWFnbm9zdGljIG1vbml0b3JpbmcgZGF0YS4gSWYgaXQgaXMgbm90CisrCSAqIHBvc3NpYmxlIHRvIGd1YXJhbnRlZSBjb2hlcmVuY3kgYmVjYXVzZSBFRVBST00gaXMgYnJva2VuIGluIHN1Y2ggd2F5CisrCSAqIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCBhdG9taWMgMTZiaXQgcmVhZCBvcGVyYXRpb24gdGhlbiB3ZSBoYXZlIHRvCisrCSAqIHNraXAgcmVnaXN0cmF0aW9uIG9mIGh3bW9uIGRldmljZS4KKysJICovCisrCWlmIChzZnAtPmkyY19ibG9ja19zaXplIDwgMikgeworKwkJZGV2X2luZm8oc2ZwLT5kZXYsCisrCQkJICJza2lwcGluZyBod21vbiBkZXZpY2UgcmVnaXN0cmF0aW9uIGR1ZSB0byBicm9rZW4gRUVQUk9NXG4iKTsKKysJCWRldl9pbmZvKHNmcC0+ZGV2LAorKwkJCSAiZGlhZ25vc3RpYyBFRVBST00gYXJlYSBjYW5ub3QgYmUgcmVhZCBhdG9taWNhbGx5IHRvIGd1YXJhbnRlZSBkYXRhIGNvaGVyZW5jeVxuIik7CisrCQlyZXR1cm47CisrCX0KKysKKyAJZXJyID0gc2ZwX3JlYWQoc2ZwLCB0cnVlLCAwLCAmc2ZwLT5kaWFnLCBzaXplb2Yoc2ZwLT5kaWFnKSk7CisgCWlmIChlcnIgPCAwKSB7CisgCQlpZiAoc2ZwLT5od21vbl90cmllcy0tKSB7CitAQCAtMTU3OSwyNiArMTU4NSwzMCBAQCBzdGF0aWMgaW50IHNmcF9zbV9tb2RfaHBvd2VyKHN0cnVjdCBzZnAKKyAJcmV0dXJuIDA7CisgfQorIAorLS8qIFNvbWUgbW9kdWxlcyAoTm9raWEgM0ZFNDY1NDFBQSkgbG9jayB1cCBpZiBieXRlIDB4NTEgaXMgcmVhZCBhcyBhCistICogc2luZ2xlIHJlYWQuIFN3aXRjaCBiYWNrIHRvIHJlYWRpbmcgMTYgYnl0ZSBibG9ja3MgdW5sZXNzIHdlIGhhdmUKKy0gKiBhIENhcmxpdG94eFBybyBtb2R1bGUgKHJlYnJhbmRlZCBWU09MIFYyODAxRikuIEV2ZW4gbW9yZSBhbm5veWluZ2x5LAorLSAqIHNvbWUgVlNPTCBWMjgwMUYgaGF2ZSB0aGUgdmVuZG9yIG5hbWUgY2hhbmdlZCB0byBPRU0uCisrLyogR1BPTiBtb2R1bGVzIGJhc2VkIG9uIFJlYWx0ZWsgUlRMODY3MiBhbmQgUlRMOTYwMUMgY2hpcHMgKGUuZy4gVi1TT0wKKysgKiBWMjgwMUYsIENhcmxpdG94eFBybyBDUEdPUzAzLTA0OTAsIFViaXF1aXRpIFUtRmliZXIgSW5zdGFudCwgLi4uKSBkbworKyAqIG5vdCBzdXBwb3J0IG11bHRpYnl0ZSByZWFkcyBmcm9tIHRoZSBFRVBST00uIEVhY2ggbXVsdGktYnl0ZSByZWFkCisrICogb3BlcmF0aW9uIHJldHVybnMganVzdCBvbmUgYnl0ZSBvZiBFRVBST00gZm9sbG93ZWQgYnkgemVyb3MuIFRoZXJlIGlzCisrICogbm8gd2F5IHRvIGlkZW50aWZ5IHdoaWNoIG1vZHVsZXMgYXJlIHVzaW5nIFJlYWx0ZWsgUlRMODY3MiBhbmQgUlRMOTYwMUMKKysgKiBjaGlwcy4gTW9yZW92ZXIgZXZlcnkgT0VNIG9mIFYtU09MIFYyODAxRiBtb2R1bGUgcHV0cyBpdHMgb3duIHZlbmRvcgorKyAqIG5hbWUgYW5kIHZlbmRvciBpZCBpbnRvIEVFUFJPTSwgc28gdGhlcmUgaXMgZXZlbiBubyB3YXkgdG8gZGV0ZWN0IGlmCisrICogbW9kdWxlIGlzIFYtU09MIFYyODAxRi4gVGhlcmVmb3JlIGNoZWNrIGZvciB0aG9zZSB6ZXJvcyBpbiB0aGUgcmVhZAorKyAqIGRhdGEgYW5kIHRoZW4gYmFzZWQgb24gY2hlY2sgc3dpdGNoIHRvIHJlYWRpbmcgRUVQUk9NIHRvIG9uZSBieXRlCisrICogYXQgYSB0aW1lLgorICAqLworLXN0YXRpYyBpbnQgc2ZwX3F1aXJrX2kyY19ibG9ja19zaXplKGNvbnN0IHN0cnVjdCBzZnBfZWVwcm9tX2Jhc2UgKmJhc2UpCisrc3RhdGljIGJvb2wgc2ZwX2lkX25lZWRzX2J5dGVfaW8oc3RydWN0IHNmcCAqc2ZwLCB2b2lkICpidWYsIHNpemVfdCBsZW4pCisgeworLQlpZiAoIW1lbWNtcChiYXNlLT52ZW5kb3JfbmFtZSwgIlZTT0wgICAgICAgICAgICAiLCAxNikpCistCQlyZXR1cm4gMTsKKy0JaWYgKCFtZW1jbXAoYmFzZS0+dmVuZG9yX25hbWUsICJPRU0gICAgICAgICAgICAgIiwgMTYpICYmCistCSAgICAhbWVtY21wKGJhc2UtPnZlbmRvcl9wbiwgICAiVjI4MDFGICAgICAgICAgICIsIDE2KSkKKy0JCXJldHVybiAxOworKwlzaXplX3QgaSwgYmxvY2tfc2l6ZSA9IHNmcC0+aTJjX2Jsb2NrX3NpemU7CisgCistCS8qIFNvbWUgbW9kdWxlcyBjYW4ndCBjb3BlIHdpdGggbG9uZyByZWFkcyAqLworLQlyZXR1cm4gMTY7CistfQorKwkvKiBBbHJlYWR5IHVzaW5nIGJ5dGUgSU8gKi8KKysJaWYgKGJsb2NrX3NpemUgPT0gMSkKKysJCXJldHVybiBmYWxzZTsKKyAKKy1zdGF0aWMgdm9pZCBzZnBfcXVpcmtzX2Jhc2Uoc3RydWN0IHNmcCAqc2ZwLCBjb25zdCBzdHJ1Y3Qgc2ZwX2VlcHJvbV9iYXNlICpiYXNlKQorLXsKKy0Jc2ZwLT5pMmNfYmxvY2tfc2l6ZSA9IHNmcF9xdWlya19pMmNfYmxvY2tfc2l6ZShiYXNlKTsKKysJZm9yIChpID0gMTsgaSA8IGxlbjsgaSArPSBibG9ja19zaXplKSB7CisrCQlpZiAobWVtY2hyX2ludihidWYgKyBpLCAnXDAnLCBtaW4oYmxvY2tfc2l6ZSAtIDEsIGxlbiAtIGkpKSkKKysJCQlyZXR1cm4gZmFsc2U7CisrCX0KKysJcmV0dXJuIHRydWU7CisgfQorIAorIHN0YXRpYyBpbnQgc2ZwX3NtX21vZF9wcm9iZShzdHJ1Y3Qgc2ZwICpzZnAsIGJvb2wgcmVwb3J0KQorQEAgLTE2MDksMTEgKzE2MTksMTEgQEAgc3RhdGljIGludCBzZnBfc21fbW9kX3Byb2JlKHN0cnVjdCBzZnAgKgorIAl1OCBjaGVjazsKKyAJaW50IHJldDsKKyAKKy0JLyogU29tZSBtb2R1bGVzIChDYXJsaXRveHhQcm8gQ1BHT1MwMy0wNDkwKSBkbyBub3Qgc3VwcG9ydCBtdWx0aWJ5dGUKKy0JICogcmVhZHMgZnJvbSB0aGUgRUVQUk9NLCBzbyBzdGFydCBieSByZWFkaW5nIHRoZSBiYXNlIGlkZW50aWZ5aW5nCistCSAqIGluZm9ybWF0aW9uIG9uZSBieXRlIGF0IGEgdGltZS4KKysJLyogU29tZSBTRlAgbW9kdWxlcyBhbmQgYWxzbyBzb21lIExpbnV4IEkyQyBkcml2ZXJzIGRvIG5vdCBsaWtlIHJlYWRzCisrCSAqIGxvbmdlciB0aGFuIDE2IGJ5dGVzLCBzbyByZWFkIHRoZSBFRVBST00gaW4gY2h1bmtzIG9mIDE2IGJ5dGVzIGF0CisrCSAqIGEgdGltZS4KKyAJICovCistCXNmcC0+aTJjX2Jsb2NrX3NpemUgPSAxOworKwlzZnAtPmkyY19ibG9ja19zaXplID0gMTY7CisgCisgCXJldCA9IHNmcF9yZWFkKHNmcCwgZmFsc2UsIDAsICZpZC5iYXNlLCBzaXplb2YoaWQuYmFzZSkpOworIAlpZiAocmV0IDwgMCkgeworQEAgLTE2MjcsNiArMTYzNywzMyBAQCBzdGF0aWMgaW50IHNmcF9zbV9tb2RfcHJvYmUoc3RydWN0IHNmcCAqCisgCQlyZXR1cm4gLUVBR0FJTjsKKyAJfQorIAorKwkvKiBTb21lIFNGUCBtb2R1bGVzIChlLmcuIE5va2lhIDNGRTQ2NTQxQUEpIGxvY2sgdXAgaWYgcmVhZCBmcm9tCisrCSAqIGFkZHJlc3MgMHg1MSBpcyBqdXN0IG9uZSBieXRlIGF0IGEgdGltZS4gQWxzbyBTRkYtODQ3MiByZXF1aXJlcworKwkgKiB0aGF0IEVFUFJPTSBzdXBwb3J0cyBhdG9taWMgMTZiaXQgcmVhZCBvcGVyYXRpb24gZm9yIGRpYWdub3N0aWMKKysJICogZmllbGRzLCBzbyBkbyBub3Qgc3dpdGNoIHRvIG9uZSBieXRlIHJlYWRpbmcgYXQgYSB0aW1lIHVubGVzcyBpdAorKwkgKiBpcyByZWFsbHkgcmVxdWlyZWQgYW5kIHdlIGhhdmUgbm8gb3RoZXIgb3B0aW9uLgorKwkgKi8KKysJaWYgKHNmcF9pZF9uZWVkc19ieXRlX2lvKHNmcCwgJmlkLmJhc2UsIHNpemVvZihpZC5iYXNlKSkpIHsKKysJCWRldl9pbmZvKHNmcC0+ZGV2LAorKwkJCSAiRGV0ZWN0ZWQgYnJva2VuIFJUTDg2NzIvUlRMOTYwMUMgZW11bGF0ZWQgRUVQUk9NXG4iKTsKKysJCWRldl9pbmZvKHNmcC0+ZGV2LAorKwkJCSAiU3dpdGNoaW5nIHRvIHJlYWRpbmcgRUVQUk9NIHRvIG9uZSBieXRlIGF0IGEgdGltZVxuIik7CisrCQlzZnAtPmkyY19ibG9ja19zaXplID0gMTsKKysKKysJCXJldCA9IHNmcF9yZWFkKHNmcCwgZmFsc2UsIDAsICZpZC5iYXNlLCBzaXplb2YoaWQuYmFzZSkpOworKwkJaWYgKHJldCA8IDApIHsKKysJCQlpZiAocmVwb3J0KQorKwkJCQlkZXZfZXJyKHNmcC0+ZGV2LCAiZmFpbGVkIHRvIHJlYWQgRUVQUk9NOiAlZFxuIiwKKysJCQkJCXJldCk7CisrCQkJcmV0dXJuIC1FQUdBSU47CisrCQl9CisrCisrCQlpZiAocmV0ICE9IHNpemVvZihpZC5iYXNlKSkgeworKwkJCWRldl9lcnIoc2ZwLT5kZXYsICJFRVBST00gc2hvcnQgcmVhZDogJWRcbiIsIHJldCk7CisrCQkJcmV0dXJuIC1FQUdBSU47CisrCQl9CisrCX0KKysKKyAJLyogQ290c3dvcmtzIGRvIG5vdCBzZWVtIHRvIHVwZGF0ZSB0aGUgY2hlY2tzdW1zIHdoZW4gdGhleQorIAkgKiBkbyB0aGUgZmluYWwgcHJvZ3JhbW1pbmcgd2l0aCB0aGUgZmluYWwgbW9kdWxlIHBhcnQgbnVtYmVyLAorIAkgKiBzZXJpYWwgbnVtYmVyIGFuZCBkYXRlIGNvZGUuCitAQCAtMTY1MCw5ICsxNjg3LDYgQEAgc3RhdGljIGludCBzZnBfc21fbW9kX3Byb2JlKHN0cnVjdCBzZnAgKgorIAkJfQorIAl9CisgCistCS8qIEFwcGx5IGFueSBlYXJseSBtb2R1bGUtc3BlY2lmaWMgcXVpcmtzICovCistCXNmcF9xdWlya3NfYmFzZShzZnAsICZpZC5iYXNlKTsKKy0KKyAJcmV0ID0gc2ZwX3JlYWQoc2ZwLCBmYWxzZSwgU0ZQX0NDX0JBU0UgKyAxLCAmaWQuZXh0LCBzaXplb2YoaWQuZXh0KSk7CisgCWlmIChyZXQgPCAwKSB7CisgCQlpZiAocmVwb3J0KQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzkwMC12NS45LTAwMDEtZHQtYmluZGluZ3MtQWRkLW11bHRpY29sb3ItY2xhc3MtZHQtYmluZGluZ3MtZG9jdW1lbi5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC85MDAtdjUuOS0wMDAxLWR0LWJpbmRpbmdzLUFkZC1tdWx0aWNvbG9yLWNsYXNzLWR0LWJpbmRpbmdzLWRvY3VtZW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNjMzJiNgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC85MDAtdjUuOS0wMDAxLWR0LWJpbmRpbmdzLUFkZC1tdWx0aWNvbG9yLWNsYXNzLWR0LWJpbmRpbmdzLWRvY3VtZW4ucGF0Y2gKQEAgLTAsMCArMSw3NiBAQAorRnJvbSA1YzdmOGZmZTc0MWRhYWU3ZjhkODExYTIwMzdiMjY5M2YwMmM5MGM1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRGFuIE11cnBoeSA8ZG11cnBoeUB0aS5jb20+CitEYXRlOiBNb24sIDEzIEp1bCAyMDIwIDEwOjQ1OjMxIC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIGR0OiBiaW5kaW5nczogQWRkIG11bHRpY29sb3IgY2xhc3MgZHQgYmluZGluZ3MgZG9jdW1lbnRpb24KK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworQWRkIERUIGJpbmRpbmdzIGZvciB0aGUgTEVEcyBtdWx0aWNvbG9yIGNsYXNzIGZyYW1ld29yay4KK0FkZCBtdWx0aWNvbG9yIElEIHRvIHRoZSBjb2xvciBJRCBsaXN0IGZvciBkZXZpY2UgdHJlZSBiaW5kaW5ncy4KKworQ0M6IFJvYiBIZXJyaW5nIDxyb2JoQGtlcm5lbC5vcmc+CitSZXZpZXdlZC1ieTogUm9iIEhlcnJpbmcgPHJvYmhAa2VybmVsLm9yZz4KK0Fja2VkLWJ5OiBQYXZlbCBNYWNoZWsgPHBhdmVsQHVjdy5jej4KK0Fja2VkLWJ5OiBKYWNlayBBbmFzemV3c2tpIDxqYWNlay5hbmFzemV3c2tpQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IERhbiBNdXJwaHkgPGRtdXJwaHlAdGkuY29tPgorUmV2aWV3ZWQtYnk6IE1hcmVrIEJlaMO6biA8bWFyZWsuYmVodW5AbmljLmN6PgorU2lnbmVkLW9mZi1ieTogUGF2ZWwgTWFjaGVrIDxwYXZlbEB1Y3cuY3o+CistLS0KKyAuLi4vYmluZGluZ3MvbGVkcy9sZWRzLWNsYXNzLW11bHRpY29sb3IueWFtbCAgfCAzNyArKysrKysrKysrKysrKysrKysrCisgaW5jbHVkZS9kdC1iaW5kaW5ncy9sZWRzL2NvbW1vbi5oICAgICAgICAgICAgIHwgIDMgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDM5IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2xlZHMvbGVkcy1jbGFzcy1tdWx0aWNvbG9yLnlhbWwKKworLS0tIC9kZXYvbnVsbAorKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2xlZHMvbGVkcy1jbGFzcy1tdWx0aWNvbG9yLnlhbWwKK0BAIC0wLDAgKzEsMzcgQEAKKysjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSkKKyslWUFNTCAxLjIKKystLS0KKyskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL2xlZHMvbGVkcy1jbGFzcy1tdWx0aWNvbG9yLnlhbWwjCisrJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjCisrCisrdGl0bGU6IENvbW1vbiBwcm9wZXJ0aWVzIGZvciB0aGUgbXVsdGljb2xvciBMRUQgY2xhc3MuCisrCisrbWFpbnRhaW5lcnM6CisrICAtIERhbiBNdXJwaHkgPGRtdXJwaHlAdGkuY29tPgorKworK2Rlc2NyaXB0aW9uOiB8CisrICBCaW5kaW5ncyBmb3IgbXVsdGkgY29sb3IgTEVEcyBzaG93IGhvdyB0byBkZXNjcmliZSBjdXJyZW50IG91dHB1dHMgb2YKKysgIGVpdGhlciBpbnRlZ3JhdGVkIG11bHRpLWNvbG9yIExFRCBlbGVtZW50cyAobGlrZSBSR0IsIFJHQlcsIFJHQldBLVVWCisrICBldGMuKSBvciBzdGFuZGFsb25lIExFRHMsIHRvIGFjaGlldmUgbG9naWNhbGx5IGdyb3VwZWQgbXVsdGktY29sb3IgTEVECisrICBtb2R1bGVzLiBUaGlzIGlzIGFjaGlldmVkIGJ5IGFkZGluZyBtdWx0aS1sZWQgbm9kZXMgbGF5ZXIgdG8gdGhlCisrICBtb25vY2hyb21lIExFRCBiaW5kaW5ncy4KKysgIFRoZSBub2RlcyBhbmQgcHJvcGVydGllcyBkZWZpbmVkIGluIHRoaXMgZG9jdW1lbnQgYXJlIHVuaXF1ZSB0byB0aGUgbXVsdGljb2xvcgorKyAgTEVEIGNsYXNzLiAgQ29tbW9uIExFRCBub2RlcyBhbmQgcHJvcGVydGllcyBhcmUgaW5oZXJpdGVkIGZyb20gdGhlIGNvbW1vbi50eHQKKysgIHdpdGhpbiB0aGlzIGRvY3VtZW50YXRpb24gZGlyZWN0b3J5LgorKworK3BhdHRlcm5Qcm9wZXJ0aWVzOgorKyAgIl5tdWx0aS1sZWRAKFswLTlhLWZdKSQiOgorKyAgICB0eXBlOiBvYmplY3QKKysgICAgZGVzY3JpcHRpb246IFJlcHJlc2VudHMgdGhlIExFRHMgdGhhdCBhcmUgdG8gYmUgZ3JvdXBlZC4KKysgICAgcHJvcGVydGllczoKKysgICAgICBjb2xvcjoKKysgICAgICAgIGNvbnN0OiA4ICAjIExFRF9DT0xPUl9JRF9NVUxUSQorKyAgICAgICAgZGVzY3JpcHRpb246IHwKKysgICAgICAgICAgRm9yIG11bHRpY29sb3IgTEVEIHN1cHBvcnQgdGhpcyBwcm9wZXJ0eSBzaG91bGQgYmUgZGVmaW5lZCBhcworKyAgICAgICAgICBMRURfQ09MT1JfSURfTVVMVEkgd2hpY2ggY2FuIGJlIGZvdW5kIGluIGluY2x1ZGUvbGludXgvbGVkcy9jb21tb24uaC4KKysKKysgICAgJHJlZjogImNvbW1vbi55YW1sIyIKKysKKysgICAgcmVxdWlyZWQ6CisrICAgICAgLSBjb2xvcgorKy4uLgorLS0tIGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9sZWRzL2NvbW1vbi5oCisrKysgYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2xlZHMvY29tbW9uLmgKK0BAIC0yOSw3ICsyOSw4IEBACisgI2RlZmluZSBMRURfQ09MT1JfSURfVklPTEVUCTUKKyAjZGVmaW5lIExFRF9DT0xPUl9JRF9ZRUxMT1cJNgorICNkZWZpbmUgTEVEX0NPTE9SX0lEX0lSCQk3CistI2RlZmluZSBMRURfQ09MT1JfSURfTUFYCTgKKysjZGVmaW5lIExFRF9DT0xPUl9JRF9NVUxUSQk4CisrI2RlZmluZSBMRURfQ09MT1JfSURfTUFYCTkKKyAKKyAvKiBTdGFuZGFyZCBMRUQgZnVuY3Rpb25zICovCisgI2RlZmluZSBMRURfRlVOQ1RJT05fQUNUSVZJVFkgImFjdGl2aXR5IgpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzkwMC12NS45LTAwMDItbGVkcy1BZGQtbXVsdGljb2xvci1JRC10by10aGUtY29sb3ItSUQtbGlzdC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC85MDAtdjUuOS0wMDAyLWxlZHMtQWRkLW11bHRpY29sb3ItSUQtdG8tdGhlLWNvbG9yLUlELWxpc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRlNWRiZAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC85MDAtdjUuOS0wMDAyLWxlZHMtQWRkLW11bHRpY29sb3ItSUQtdG8tdGhlLWNvbG9yLUlELWxpc3QucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbSAxMGQzZTBkODE1ODc5MTI5ZTkxNmNkODNlMTAzNDQzOGUwNmVmZGFhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRGFuIE11cnBoeSA8ZG11cnBoeUB0aS5jb20+CitEYXRlOiBNb24sIDEzIEp1bCAyMDIwIDEwOjQ1OjMyIC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIGxlZHM6IEFkZCBtdWx0aWNvbG9yIElEIHRvIHRoZSBjb2xvciBJRCBsaXN0CitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK0FkZCBhIG5ldyBjb2xvciBJRCB0aGF0IGlzIGRlY2xhcmVkIGFzIE1VTFRJQ09MT1IgYXMgd2l0aCB0aGUKK211bHRpY29sb3IgZnJhbWV3b3JrIGRlY2xhcmluZyBhIGRlZmluaXRpdmUgY29sb3IgaXMgbm90IGFjY3VyYXRlCithcyB0aGUgbm9kZSBjYW4gY29udGFpbiBtdWx0aXBsZSBjb2xvcnMuCisKK1NpZ25lZC1vZmYtYnk6IERhbiBNdXJwaHkgPGRtdXJwaHlAdGkuY29tPgorUmV2aWV3ZWQtYnk6IE1hcmVrIEJlaMO6biA8bWFyZWsuYmVodW5AbmljLmN6PgorU2lnbmVkLW9mZi1ieTogUGF2ZWwgTWFjaGVrIDxwYXZlbEB1Y3cuY3o+CistLS0KKyBkcml2ZXJzL2xlZHMvbGVkLWNvcmUuYyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCistLS0gYS9kcml2ZXJzL2xlZHMvbGVkLWNvcmUuYworKysrIGIvZHJpdmVycy9sZWRzL2xlZC1jb3JlLmMKK0BAIC0zNCw2ICszNCw3IEBAIGNvbnN0IGNoYXIgKiBjb25zdCBsZWRfY29sb3JzW0xFRF9DT0xPUl8KKyAJW0xFRF9DT0xPUl9JRF9WSU9MRVRdID0gInZpb2xldCIsCisgCVtMRURfQ09MT1JfSURfWUVMTE9XXSA9ICJ5ZWxsb3ciLAorIAlbTEVEX0NPTE9SX0lEX0lSXSA9ICJpciIsCisrCVtMRURfQ09MT1JfSURfTVVMVEldID0gIm11bHRpY29sb3IiLAorIH07CisgRVhQT1JUX1NZTUJPTF9HUEwobGVkX2NvbG9ycyk7CisgCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvOTAwLXY1LjktMDAwMy1sZWRzLWFkZC1SR0ItY29sb3Itb3B0aW9uLWFzLXRoYXQtaXMtZGlmZmVyZW50LWZyb20tLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzkwMC12NS45LTAwMDMtbGVkcy1hZGQtUkdCLWNvbG9yLW9wdGlvbi1hcy10aGF0LWlzLWRpZmZlcmVudC1mcm9tLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2MyODE0Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvYmFja3BvcnQtNS40LzkwMC12NS45LTAwMDMtbGVkcy1hZGQtUkdCLWNvbG9yLW9wdGlvbi1hcy10aGF0LWlzLWRpZmZlcmVudC1mcm9tLS5wYXRjaApAQCAtMCwwICsxLDQ4IEBACitGcm9tIDU0MjEyZjVhMWJhMzEyMzI4MTg3N2U1NGMxZTVmNjcyYmY3NTYzZDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXZlbCBNYWNoZWsgPHBhdmVsQHVjdy5jej4KK0RhdGU6IE1vbiwgMyBBdWcgMjAyMCAxMzoyMDowNiArMDIwMAorU3ViamVjdDogW1BBVENIXSBsZWRzOiBhZGQgUkdCIGNvbG9yIG9wdGlvbiwgYXMgdGhhdCBpcyBkaWZmZXJlbnQgZnJvbQorIG11bHRpY29sb3IuCisKK011bHRpY29sb3IgaXMgYSBiaXQgdG9vIGFic3RyYWN0LiBZZXMsIHdlIGNhbiBoYXZlCitHcmVlbi1NYWdlbnRhLVVsdHJhdmlvbGV0IExFRCwgYnV0IHNvIGZhciBhbGwgdGhlIExFRHMgd2Ugc3VwcG9ydCBhcmUKK1JHQiwgYW5kIG5vdCBldmVuIFJHQi1XaGl0ZSBvciBSR0ItWWVsbG93IHZhcmlhbnRzIGVtZXJnZWQuCisKK011bHRpY29sb3IgaXMgbm90IGEgZ29vZCBmaXQgZm9yIFJHQiBMRUQuIEl0IGRvZXMgbm90IHJlYWxseSBrbm93CithYm91dCBMRUQgY29sb3IuICBJbiBwYXJ0aWN1bGFyLCB0aGVyZSdzIG5vIHdheSB0byBtYWtlIExFRCAid2hpdGUiLgorCitVc2Vyc3BhY2UgaXMgaW50ZXJlc3RlZCBpbiBrbm93aW5nICJ0aGlzIExFRCBjYW4gcHJvZHVjZSBhcmJpdHJhcnkKK2NvbG9yIiwgd2hpY2ggbm90IGFsbCBtdWx0aWNvbG9yIExFRHMgY2FuLgorCitTaWduZWQtb2ZmLWJ5OiBQYXZlbCBNYWNoZWsgPHBhdmVsQHVjdy5jej4KKy0tLQorIGRyaXZlcnMvbGVkcy9sZWQtY29yZS5jICAgICAgICAgICB8IDEgKworIGRyaXZlcnMvbGVkcy9sZWRzLWxwNTV4eC1jb21tb24uYyB8IDIgKy0KKyBpbmNsdWRlL2R0LWJpbmRpbmdzL2xlZHMvY29tbW9uLmggfCA2ICsrKystLQorIDMgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCistLS0gYS9kcml2ZXJzL2xlZHMvbGVkLWNvcmUuYworKysrIGIvZHJpdmVycy9sZWRzL2xlZC1jb3JlLmMKK0BAIC0zNSw2ICszNSw3IEBAIGNvbnN0IGNoYXIgKiBjb25zdCBsZWRfY29sb3JzW0xFRF9DT0xPUl8KKyAJW0xFRF9DT0xPUl9JRF9ZRUxMT1ddID0gInllbGxvdyIsCisgCVtMRURfQ09MT1JfSURfSVJdID0gImlyIiwKKyAJW0xFRF9DT0xPUl9JRF9NVUxUSV0gPSAibXVsdGljb2xvciIsCisrCVtMRURfQ09MT1JfSURfUkdCXSA9ICJyZ2IiLAorIH07CisgRVhQT1JUX1NZTUJPTF9HUEwobGVkX2NvbG9ycyk7CisgCistLS0gYS9pbmNsdWRlL2R0LWJpbmRpbmdzL2xlZHMvY29tbW9uLmgKKysrKyBiL2luY2x1ZGUvZHQtYmluZGluZ3MvbGVkcy9jb21tb24uaAorQEAgLTI5LDggKzI5LDEwIEBACisgI2RlZmluZSBMRURfQ09MT1JfSURfVklPTEVUCTUKKyAjZGVmaW5lIExFRF9DT0xPUl9JRF9ZRUxMT1cJNgorICNkZWZpbmUgTEVEX0NPTE9SX0lEX0lSCQk3CistI2RlZmluZSBMRURfQ09MT1JfSURfTVVMVEkJOAorLSNkZWZpbmUgTEVEX0NPTE9SX0lEX01BWAk5CisrI2RlZmluZSBMRURfQ09MT1JfSURfTVVMVEkJOAkvKiBGb3IgbXVsdGljb2xvciBMRURzICovCisrI2RlZmluZSBMRURfQ09MT1JfSURfUkdCCTkJLyogRm9yIG11bHRpY29sb3IgTEVEcyB0aGF0IGNhbiBkbyBhcmJpdHJhcnkgY29sb3IsCisrCQkJCQkgICBzbyB0aGlzIHdvdWxkIGluY2x1ZGUgUkdCVyBhbmQgc2ltaWxhciAqLworKyNkZWZpbmUgTEVEX0NPTE9SX0lEX01BWAkxMAorIAorIC8qIFN0YW5kYXJkIExFRCBmdW5jdGlvbnMgKi8KKyAjZGVmaW5lIExFRF9GVU5DVElPTl9BQ1RJVklUWSAiYWN0aXZpdHkiCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvYmFja3BvcnQtNS40LmluYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2JhY2twb3J0LTUuNC9iYWNrcG9ydC01LjQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNTA4ODMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9iYWNrcG9ydC01LjQvYmFja3BvcnQtNS40LmluYwpAQCAtMCwwICsxLDI1MyBAQAorI3BhdGNoIGJhY2twb3J0LTUuNCAoY29tZSBmcm9tIG9wZW53cnQvbGVkZS90YXJnZXQvbGludXgvbWVkaWF0ZWspCitTUkNfVVJJX2FwcGVuZCA9ICIgXAorICAgIGZpbGU6Ly8wMTAtS2J1aWxkLWRvbi10LWhhcmRjb2RlLXBhdGgtdG8tYXdrLWluLXNjcmlwdHMtbGQtdmVycy5wYXRjaCBcCisgICAgZmlsZTovLzAxMS1rYnVpbGQtZXhwb3J0LVNVQkFSQ0gucGF0Y2ggXAorICAgIGZpbGU6Ly8wMzAtbW9kcG9zdC1hZGQtYS1oZWxwZXItdG8tZ2V0LWRhdGEtcG9pbnRlZC1ieS1hLXN5bWJvbC5wYXRjaCBcCisgICAgZmlsZTovLzAzMS1tb2Rwb3N0LXJlZmFjdG9yLW5hbWVzcGFjZV9mcm9tX2tzdHJ0YWJucy10by1ub3QtaGFyLnBhdGNoIFwKKyAgICBmaWxlOi8vMDQxLXY1LjUtYXJtNjQtSW1wbGVtZW50LW9wdGltaXNlZC1jaGVja3N1bS1yb3V0aW5lLnBhdGNoIFwKKyAgICBmaWxlOi8vMDQyLXY1LjUtYXJtNjQtY3N1bS1GaXgtcGF0aG9sb2dpY2FsLXplcm8tbGVuZ3RoLWNhbGxzLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDAxLWNyeXB0by1saWItdGlkeS11cC1saWItY3J5cHRvLUtjb25maWctYW5kLU1ha2VmaWxlLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDAyLWNyeXB0by1jaGFjaGEtbW92ZS1leGlzdGluZy1saWJyYXJ5LWNvZGUtaW50by1saWItY3IucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAwMDMtY3J5cHRvLXg4Ni1jaGFjaGEtZGVwZW5kLW9uLWdlbmVyaWMtY2hhY2hhLWxpYnJhcnktaS5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDAwNC1jcnlwdG8teDg2LWNoYWNoYS1leHBvc2UtU0lNRC1DaGFDaGEtcm91dGluZS1hcy1saWJyLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDA1LWNyeXB0by1hcm02NC1jaGFjaGEtZGVwZW5kLW9uLWdlbmVyaWMtY2hhY2hhLWxpYnJhcnkucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAwMDYtY3J5cHRvLWFybTY0LWNoYWNoYS1leHBvc2UtYXJtNjQtQ2hhQ2hhLXJvdXRpbmUtYXMtbC5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDAwNy1jcnlwdG8tYXJtLWNoYWNoYS1pbXBvcnQtRXJpYy1CaWdnZXJzLXMtc2NhbGFyLWFjY2VsLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDA4LWNyeXB0by1hcm0tY2hhY2hhLXJlbW92ZS1kZXBlbmRlbmN5LW9uLWdlbmVyaWMtQ2hhQ2gucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAwMDktY3J5cHRvLWFybS1jaGFjaGEtZXhwb3NlLUFSTS1DaGFDaGEtcm91dGluZS1hcy1saWJyYS5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDAxMC1jcnlwdG8tbWlwcy1jaGFjaGEtaW1wb3J0LTMycjItQ2hhQ2hhLWNvZGUtZnJvbS1aaW5jLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDExLWNyeXB0by1taXBzLWNoYWNoYS13aXJlLXVwLWFjY2VsZXJhdGVkLTMycjItY29kZS1mcm8ucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAwMTItY3J5cHRvLWNoYWNoYS11bmV4cG9ydC1jaGFjaGFfZ2VuZXJpYy1yb3V0aW5lcy5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDAxMy1jcnlwdG8tcG9seTEzMDUtbW92ZS1jb3JlLXJvdXRpbmVzLWludG8tYS1zZXBhcmF0ZS1sLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDE0LWNyeXB0by14ODYtcG9seTEzMDUtdW5pZnktUG9seTEzMDUtc3RhdGUtc3RydWN0LXdpdGgucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAwMTUtY3J5cHRvLXBvbHkxMzA1LWV4cG9zZS1pbml0LXVwZGF0ZS1maW5hbC1saWJyYXJ5LWludC5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDAxNi1jcnlwdG8teDg2LXBvbHkxMzA1LWRlcGVuZC1vbi1nZW5lcmljLWxpYnJhcnktbm90LWdlLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDE3LWNyeXB0by14ODYtcG9seTEzMDUtZXhwb3NlLWV4aXN0aW5nLWRyaXZlci1hcy1wb2x5MTMucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAwMTgtY3J5cHRvLWFybTY0LXBvbHkxMzA1LWluY29ycG9yYXRlLU9wZW5TU0wtQ1JZUFRPR0FNUy5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDAxOS1jcnlwdG8tYXJtLXBvbHkxMzA1LWluY29ycG9yYXRlLU9wZW5TU0wtQ1JZUFRPR0FNUy1OLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDIwLWNyeXB0by1taXBzLXBvbHkxMzA1LWluY29ycG9yYXRlLU9wZW5TU0wtQ1JZUFRPR0FNUy0ucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAwMjEtY3J5cHRvLWJsYWtlMnMtZ2VuZXJpYy1DLWxpYnJhcnktaW1wbGVtZW50YXRpb24tYW5kLS5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDAyMi1jcnlwdG8tdGVzdG1nci1hZGQtdGVzdC1jYXNlcy1mb3ItQmxha2Uycy5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDAyMy1jcnlwdG8tYmxha2Uycy1pbXBsZW1lbnQtZ2VuZXJpYy1zaGFzaC1kcml2ZXIucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAwMjQtY3J5cHRvLWJsYWtlMnMteDg2XzY0LVNJTUQtaW1wbGVtZW50YXRpb24ucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAwMjUtY3J5cHRvLWN1cnZlMjU1MTktZ2VuZXJpYy1DLWxpYnJhcnktaW1wbGVtZW50YXRpb25zLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDI2LWNyeXB0by1jdXJ2ZTI1NTE5LWFkZC1rcHAtc2VsZnRlc3QucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAwMjctY3J5cHRvLWN1cnZlMjU1MTktaW1wbGVtZW50LWdlbmVyaWMtS1BQLWRyaXZlci5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDAyOC1jcnlwdG8tbGliLWN1cnZlMjU1MTktd29yay1hcm91bmQtQ2xhbmctc3RhY2stc3BpbGxpLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDI5LWNyeXB0by1jdXJ2ZTI1NTE5LXg4Nl82NC1saWJyYXJ5LWFuZC1LUFAtaW1wbGVtZW50YXQucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAwMzAtY3J5cHRvLWFybS1jdXJ2ZTI1NTE5LWltcG9ydC1CZXJuc3RlaW4tYW5kLVNjaHdhYmUtcy5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDAzMS1jcnlwdG8tYXJtLWN1cnZlMjU1MTktd2lyZS11cC1ORU9OLWltcGxlbWVudGF0aW9uLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDMyLWNyeXB0by1jaGFjaGEyMHBvbHkxMzA1LWltcG9ydC1jb25zdHJ1Y3Rpb24tYW5kLXNlbGYucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAwMzMtY3J5cHRvLWxpYi1jaGFjaGEyMHBvbHkxMzA1LXJlaW1wbGVtZW50LWNyeXB0X2Zyb21fcy5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDAzNC1jcnlwdG8tY2hhY2hhX2dlbmVyaWMtcmVtb3ZlLXVubmVjZXNzYXJ5LXNldGtleS1mdW5jLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDM1LWNyeXB0by14ODYtY2hhY2hhLW9ubHktdW5yZWdpc3Rlci1hbGdvcml0aG1zLWlmLXJlZ2kucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAwMzYtY3J5cHRvLWxpYi1jaGFjaGEyMHBvbHkxMzA1LXVzZS1jaGFjaGEyMF9jcnlwdC5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDAzNy1jcnlwdG8tYXJjaC1jb25kaXRpb25hbGl6ZS1jcnlwdG8tYXBpLWluLWFyY2gtZ2x1ZS1mLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDM4LWNyeXB0by1jaGFjaGEtZml4LXdhcm5pbmctbWVzc2FnZS1pbi1oZWFkZXItZmlsZS5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDAzOS1jcnlwdG8tYXJtLWN1cnZlMjU1MTktYWRkLWFyY2gtc3BlY2lmaWMta2V5LWdlbmVyYXRpLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDQwLWNyeXB0by1saWItY3VydmUyNTUxOS1yZS1hZGQtc2VsZnRlc3RzLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDQxLWNyeXB0by1wb2x5MTMwNS1hZGQtbmV3LTMyLWFuZC02NC1iaXQtZ2VuZXJpYy12ZXJzaW8ucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAwNDItY3J5cHRvLXg4Ni1wb2x5MTMwNS1pbXBvcnQtdW5tb2RpZmllZC1jcnlwdG9nYW1zLWltcC5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDA0My1jcnlwdG8teDg2LXBvbHkxMzA1LXdpcmUtdXAtZmFzdGVyLWltcGxlbWVudGF0aW9ucy1mLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDQ0LWNyeXB0by1hcm0tYXJtNjQtbWlwcy1wb2x5MTMwNS1yZW1vdmUtcmVkdW5kYW50LW5vbi0ucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAwNDUtY3J5cHRvLWN1cnZlMjU1MTktRml4LXNlbGZ0ZXN0LWJ1aWxkLWVycm9yLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDQ2LWNyeXB0by14ODYtcG9seTEzMDUtZml4LS5naXRpZ25vcmUtdHlwby5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDA0Ny1jcnlwdG8tY2hhY2hhMjBwb2x5MTMwNS1hZGQtYmFjay1taXNzaW5nLXRlc3QtdmVjdG9yLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDQ4LWNyeXB0by14ODYtcG9seTEzMDUtZW1pdC1kb2VzLWJhc2UtY29udmVyc2lvbi1pdHNlbGYucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAwNDktY3J5cHRvLWFybS1jaGFjaGEtZml4LWJ1aWxkLWZhaWx1cmVkLXdoZW4ta2VybmVsLW1vZC5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDA1MC1jcnlwdG8tS2NvbmZpZy1hbGxvdy10ZXN0cy10by1iZS1kaXNhYmxlZC13aGVuLW1hbmFnLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDUxLWNyeXB0by1jaGFjaGEyMHBvbHkxMzA1LXByZXZlbnQtaW50ZWdlci1vdmVyZmxvdy1vbi0ucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAwNTItY3J5cHRvLXg4Ni1jdXJ2ZTI1NTE5LXN1cHBvcnQtYXNzZW1ibGVycy13aXRoLW5vLWFkeC5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDA1My1jcnlwdG8tYXJtNjQtY2hhY2hhLWNvcnJlY3RseS13YWxrLXRocm91Z2gtYmxvY2tzLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDU0LWNyeXB0by14ODYtY3VydmUyNTUxOS1yZXBsYWNlLXdpdGgtZm9ybWFsbHktdmVyaWZpZWQucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAwNTUtY3J5cHRvLXg4Ni1jdXJ2ZTI1NTE5LWxlYXZlLXIxMi1hcy1zcGFyZS1yZWdpc3Rlci5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDA1Ni1jcnlwdG8tYXJtLTY0LXBvbHkxMzA1LWFkZC1hcnRpZmFjdC10by0uZ2l0aWdub3JlLWZpLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDU3LWNyeXB0by1hcmNoLWxpYi1saW1pdC1zaW1kLXVzYWdlLXRvLTRrLWNodW5rcy5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDA1OC1jcnlwdG8tbGliLWNoYWNoYTIwcG9seTEzMDUtQWRkLW1pc3NpbmctZnVuY3Rpb24tZGVjLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDU5LWNyeXB0by14ODYtY2hhY2hhLXNzZTMtdXNlLXVuYWxpZ25lZC1sb2Fkcy1mb3Itc3RhdGUucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAwNjAtY3J5cHRvLXg4Ni1jdXJ2ZTI1NTE5LVJlbW92ZS11bnVzZWQtY2FycnktdmFyaWFibGVzLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDYxLWNyeXB0by1hcm0tY3VydmUyNTUxOS1pbmNsdWRlLWxpbnV4LXNjYXR0ZXJsaXN0LmgucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAwNjItY3J5cHRvLWFybS1wb2x5MTMwNS1BZGQtcHJvdG90eXBlLWZvci1wb2x5MTMwNV9ibG9jay5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDA2My1jcnlwdG8tY3VydmUyNTUxOS14ODZfNjQtVXNlLVhPUkwtcjMyLTMyLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDY0LWNyeXB0by1wb2x5MTMwNS14ODZfNjQtVXNlLVhPUkwtcjMyLTMyLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDY1LWNyeXB0by14ODYtcG9seTEzMDUtUmVtb3ZlLWFzc2lnbm1lbnRzLXdpdGgtbm8tZWZmZWMucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAwNjYtY3J5cHRvLXg4Ni1wb2x5MTMwNS1hZGQtYmFjay1hLW5lZWRlZC1hc3NpZ25tZW50LnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDY3LWNyeXB0by1LY29uZmlnLUNSWVBUT19NQU5BR0VSX0VYVFJBX1RFU1RTLXJlcXVpcmVzLXQucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAwNjgtY3J5cHRvLWFybS1jaGFjaGEtbmVvbi1vcHRpbWl6ZS1mb3Itbm9uLWJsb2NrLXNpemUtbS5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDA2OS1jcnlwdG8tYXJtNjQtY2hhY2hhLXNpbXBsaWZ5LXRhaWwtYmxvY2staGFuZGxpbmcucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAwNzAtY3J5cHRvLWxpYi1jaGFjaGEyMHBvbHkxMzA1LWRlZmluZS1lbXB0eS1tb2R1bGUtZXhpdC5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDA3MS1jcnlwdG8tYXJtLWNoYWNoYS1uZW9uLWFkZC1taXNzaW5nLWNvdW50ZXItaW5jcmVtZW50LnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDcyLW5ldC1XaXJlR3VhcmQtc2VjdXJlLW5ldHdvcmstdHVubmVsLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDczLXdpcmVndWFyZC1zZWxmdGVzdHMtaW1wb3J0LWhhcm5lc3MtbWFrZWZpbGUtZm9yLXRlc3QucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAwNzQtd2lyZWd1YXJkLUtjb25maWctc2VsZWN0LXBhcmVudC1kZXBlbmRlbmN5LWZvci1jcnlwdC5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDA3NS13aXJlZ3VhcmQtZ2xvYmFsLWZpeC1zcGVsbGluZy1taXN0YWtlcy1pbi1jb21tZW50cy5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDA3Ni13aXJlZ3VhcmQtbWFpbi1yZW1vdmUtdW51c2VkLWluY2x1ZGUtbGludXgtdmVyc2lvbi5oLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDc3LXdpcmVndWFyZC1hbGxvd2VkaXBzLXVzZS1rZnJlZV9yY3UtaW5zdGVhZC1vZi1jYWxsX3IucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAwNzgtd2lyZWd1YXJkLXNlbGZ0ZXN0cy1yZW1vdmUtYW5jaWVudC1rZXJuZWwtY29tcGF0aWJpbC5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDA3OS13aXJlZ3VhcmQtcXVldWVpbmctZG8tbm90LWFjY291bnQtZm9yLXBmbWVtYWxsb2Mtd2hlLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDgwLXdpcmVndWFyZC1zb2NrZXQtbWFyay1za2JzLWFzLW5vdC1vbi1saXN0LXdoZW4tcmVjZWkucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAwODEtd2lyZWd1YXJkLWFsbG93ZWRpcHMtZml4LXVzZS1hZnRlci1mcmVlLWluLXJvb3RfcmVtby5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDA4Mi13aXJlZ3VhcmQtbm9pc2UtcmVqZWN0LXBlZXJzLXdpdGgtbG93LW9yZGVyLXB1YmxpYy1rLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDgzLXdpcmVndWFyZC1zZWxmdGVzdHMtZW5zdXJlLW5vbi1hZGRpdGlvbi1vZi1wZWVycy13aXQucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAwODQtd2lyZWd1YXJkLXNlbGZ0ZXN0cy10aWUtc29ja2V0LXdhaXRpbmctdG8tdGFyZ2V0LXBpZC5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDA4NS13aXJlZ3VhcmQtZGV2aWNlLXVzZS1pY21wX25kb19zZW5kLWhlbHBlci5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDA4Ni13aXJlZ3VhcmQtc2VsZnRlc3RzLXJlZHVjZS1jb21wbGV4aXR5LWFuZC1maXgtbWFrZS1yLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDg3LXdpcmVndWFyZC1yZWNlaXZlLXJlc2V0LWxhc3RfdW5kZXJfbG9hZC10by16ZXJvLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDg4LXdpcmVndWFyZC1zZW5kLWFjY291bnQtZm9yLW10dS0wLWRldmljZXMucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAwODktd2lyZWd1YXJkLXNvY2tldC1yZW1vdmUtZXh0cmEtY2FsbC10by1zeW5jaHJvbml6ZV9uZS5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDA5MC13aXJlZ3VhcmQtc2VsZnRlc3RzLXJlbW92ZS1kdXBsaWNhdGVkLWluY2x1ZGUtc3lzLXR5LnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDkxLXdpcmVndWFyZC1xdWV1ZWluZy1hY2NvdW50LWZvci1za2ItcHJvdG9jb2wtMC5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDA5Mi13aXJlZ3VhcmQtcmVjZWl2ZS1yZW1vdmUtZGVhZC1jb2RlLWZyb20tZGVmYXVsdC1wYWNrLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDkzLXdpcmVndWFyZC1ub2lzZS1lcnJvci1vdXQtcHJlY29tcHV0ZWQtREgtZHVyaW5nLWhhbmQucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAwOTQtd2lyZWd1YXJkLXNlbmQtcmVtb3ZlLWVycmFudC1uZXdsaW5lLWZyb20tcGFja2V0X2VuYy5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDA5NS13aXJlZ3VhcmQtcXVldWVpbmctY2xlYW51cC1wdHJfcmluZy1pbi1lcnJvci1wYXRoLW9mLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDk2LXdpcmVndWFyZC1yZWNlaXZlLXVzZS10dW5uZWwtaGVscGVycy1mb3ItZGVjYXBzdWxhdGkucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAwOTctd2lyZWd1YXJkLXNlbGZ0ZXN0cy11c2Utbm9ybWFsLWtlcm5lbC1zdGFjay1zaXplLW9uLS5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDA5OC13aXJlZ3VhcmQtc29ja2V0LXJlbW92ZS1lcnJhbnQtcmVzdHJpY3Rpb24tb24tbG9vcGluLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMDk5LXdpcmVndWFyZC1zZW5kLXJlY2VpdmUtY29uZF9yZXNjaGVkLXdoZW4tcHJvY2Vzc2luZy0ucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAxMDAtd2lyZWd1YXJkLXNlbGZ0ZXN0cy1pbml0YWxpemUtaXB2Ni1tZW1iZXJzLXRvLU5VTEwtdC5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDEwMS13aXJlZ3VhcmQtc2VuZC1yZWNlaXZlLXVzZS1leHBsaWNpdC11bmxpa2VseS1icmFuY2gtLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMTAyLXdpcmVndWFyZC1zZWxmdGVzdHMtdXNlLW5ld2VyLWlwcm91dGUyLWZvci1nY2MtMTAucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAxMDMtd2lyZWd1YXJkLW5vaXNlLXJlYWQtcHJlc2hhcmVkLWtleS13aGlsZS10YWtpbmctbG9jay5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDEwNC13aXJlZ3VhcmQtcXVldWVpbmctcHJlc2VydmUtZmxvdy1oYXNoLWFjcm9zcy1wYWNrZXQtLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMTA1LXdpcmVndWFyZC1ub2lzZS1zZXBhcmF0ZS1yZWNlaXZlLWNvdW50ZXItZnJvbS1zZW5kLWMucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAxMDYtd2lyZWd1YXJkLW5vaXNlLWRvLW5vdC1hc3NpZ24taW5pdGlhdGlvbi10aW1lLWluLWlmLS5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDEwNy13aXJlZ3VhcmQtZGV2aWNlLWF2b2lkLWNpcmN1bGFyLW5ldG5zLXJlZmVyZW5jZXMucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAxMDgtd2lyZWd1YXJkLXJlY2VpdmUtYWNjb3VudC1mb3ItbmFwaV9ncm9fcmVjZWl2ZS1uZXZlci5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDEwOS1uZXQtaXBfdHVubmVsLWFkZC1oZWFkZXJfb3BzLWZvci1sYXllci0zLWRldmljZXMucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAxMTAtd2lyZWd1YXJkLWltcGxlbWVudC1oZWFkZXJfb3BzLXBhcnNlX3Byb3RvY29sLWZvci1BRi5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDExMS13aXJlZ3VhcmQtcXVldWVpbmctbWFrZS11c2Utb2YtaXBfdHVubmVsX3BhcnNlX3Byb3RvLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMTEyLW5ldGxpbmstY29uc2lzdGVudGx5LXVzZS1OTEFfUE9MSUNZX0VYQUNUX0xFTi5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDExMy1uZXRsaW5rLWNvbnNpc3RlbnRseS11c2UtTkxBX1BPTElDWV9NSU5fTEVOLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMTE0LXdpcmVndWFyZC1ub2lzZS10YWtlLWxvY2std2hlbi1yZW1vdmluZy1oYW5kc2hha2UtZW4ucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAxMTUtd2lyZWd1YXJkLXBlZXJsb29rdXAtdGFrZS1sb2NrLWJlZm9yZS1jaGVja2luZy1oYXNoLS5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDExNi13aXJlZ3VhcmQtc2VsZnRlc3RzLWNoZWNrLXRoYXQtcm91dGVfbWVfaGFyZGVyLXBhY2tlLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMTE3LXdpcmVndWFyZC1hdm9pZC1kb3VibGUtdW5saWtlbHktbm90YXRpb24td2hlbi11c2luZy0ucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAxMTgtd2lyZWd1YXJkLXNvY2tldC1yZW1vdmUtYm9ndXMtX19iZTMyLWFubm90YXRpb24ucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAxMTktd2lyZWd1YXJkLXNlbGZ0ZXN0cy10ZXN0LW11bHRpcGxlLXBhcmFsbGVsLXN0cmVhbXMucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAxMjAtd2lyZWd1YXJkLXBlZXItcHV0LWZyZXF1ZW50bHktdXNlZC1tZW1iZXJzLWFib3ZlLWNhYy5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDEyMS13aXJlZ3VhcmQtZGV2aWNlLWRvLW5vdC1nZW5lcmF0ZS1JQ01QLWZvci1ub24tSVAtcGFjLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMTIyLXdpcmVndWFyZC1xdWV1ZWluZy1nZXQtcmlkLW9mLXBlci1wZWVyLXJpbmctYnVmZmVycy5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDEyMy13aXJlZ3VhcmQta2NvbmZpZy11c2UtYXJtLWNoYWNoYS1ldmVuLXdpdGgtbm8tbmVvbi5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDEyNC1jcnlwdG8tbWlwcy1wb2x5MTMwNS1lbmFibGUtZm9yLWFsbC1NSVBTLXByb2Nlc3NvcnMucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAxMjUtY3J5cHRvLW1pcHMtYWRkLXBvbHkxMzA1LWNvcmUuUy10by0uZ2l0aWdub3JlLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMTI2LWNyeXB0by1wb2x5MTMwNS1maXgtcG9seTEzMDVfY29yZV9zZXRrZXktZGVjbGFyYXRpb24ucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAxMjctd2lyZWd1YXJkLXNlbGZ0ZXN0cy1yZW1vdmUtb2xkLWNvbm50cmFjay1rY29uZmlnLXZhbC5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDEyOC13aXJlZ3VhcmQtc2VsZnRlc3RzLW1ha2Utc3VyZS1ycF9maWx0ZXItaXMtZGlzYWJsZWQtLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMTI5LXdpcmVndWFyZC1kby1ub3QtdXNlLU8zLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMTMwLXdpcmVndWFyZC11c2Utc3luY2hyb25pemVfbmV0LXJhdGhlci10aGFuLXN5bmNocm9uaXoucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAxMzEtd2lyZWd1YXJkLXBlZXItYWxsb2NhdGUtaW4ta21lbV9jYWNoZS5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDEzMi13aXJlZ3VhcmQtYWxsb3dlZGlwcy1pbml0aWFsaXplLWxpc3QtaGVhZC1pbi1zZWxmdGVzLnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwLXdpcmVndWFyZC0wMTMzLXdpcmVndWFyZC1hbGxvd2VkaXBzLXJlbW92ZS1ub2Rlcy1pbi1PLTEucGF0Y2ggXAorICAgIGZpbGU6Ly8wODAtd2lyZWd1YXJkLTAxMzQtd2lyZWd1YXJkLWFsbG93ZWRpcHMtYWxsb2NhdGUtbm9kZXMtaW4ta21lbV9jYWNoZS5wYXRjaCBcCisgICAgZmlsZTovLzA4MC13aXJlZ3VhcmQtMDEzNS13aXJlZ3VhcmQtYWxsb3dlZGlwcy1mcmVlLWVtcHR5LWludGVybWVkaWF0ZS1ub2Rlcy13LnBhdGNoIFwKKyAgICBmaWxlOi8vMzAwLU1JUFMtRXhjbHVkZS1tb3JlLWRzZW11bC1jb2RlLXdoZW4tQ09ORklHX01JUFNfRlBfU1UucGF0Y2ggXAorICAgIGZpbGU6Ly8zMTAtbWlwcy1LY29uZmlnLUFkZC1BUkNIX0hBU19GT1JUSUZZX1NPVVJDRS5wYXRjaCBcCisgICAgZmlsZTovLzMxMC12NS42LW1pcHMtdmRzby1maXgtamFsci10OS1jcmFzaC1pbi12ZHNvLWNvZGUucGF0Y2ggXAorICAgIGZpbGU6Ly8zMTEtTUlQUy1GaXgtZXhjZXB0aW9uLWhhbmRsZXItbWVtY3B5LnBhdGNoIFwKKyAgICBmaWxlOi8vMzQzLW5ldGZpbHRlci1uZnRfZmxvd19vZmZsb2FkLWhhbmRsZS1uZXRkZXZpY2UtZXZlbnRzLWYucGF0Y2ggXAorICAgIGZpbGU6Ly8zNzAtbmV0ZmlsdGVyLW5mX2Zsb3dfdGFibGUtZml4LW9mZmxvYWRlZC1jb25uZWN0aW9uLXRpbS5wYXRjaCBcCisgICAgZmlsZTovLzM3MS1uZXRmaWx0ZXItbmZfZmxvd190YWJsZS1maXgtdXAtY3Qtc3RhdGUtb2YtZmxvd3MtYWZ0LnBhdGNoIFwKKyAgICBmaWxlOi8vMzkzLXY1LjUtc2NoX2Nha2UtZHJvcC11bnVzZWQtdmFyaWFibGUtdGluX3F1YW50dW1fcHJpby5wYXRjaCBcCisgICAgZmlsZTovLzM5NS12NS44LW5ldC1zY2hfY2FrZS1UYWtlLWFkdmFudGFnZS1vZi1za2ItaGFzaC13aGVyZS1hcHByb3ByaWF0ZS5wYXRjaCBcCisgICAgZmlsZTovLzM5OS01Ljktc2NoX2Nha2UtYWRkLVJGQy04NjIyLUxFLVBIQi1zdXBwb3J0LXRvLUNBS0UtZGlmZnNlci5wYXRjaCBcCisgICAgZmlsZTovLzQwMC12NS44LWR0LWJpbmRpbmdzLW10ZC1wYXJ0aXRpb24tRG9jdW1lbnQtdGhlLXNsYy1tb2RlLXByb3AucGF0Y2ggXAorICAgIGZpbGU6Ly80MDEtdjUuMTEtZHQtYmluZGluZ3MtbXRkLWNvbnZlcnQtZml4ZWQtcGFydGl0aW9ucy10by10aGUtanNvbi5wYXRjaCBcCisgICAgZmlsZTovLzQwMi12NS4xMi0wMDAxLWR0LWJpbmRpbmdzLW10ZC1tb3ZlLXBhcnRpdGlvbi1iaW5kaW5nLXRvLWl0cy1vd24tZmkucGF0Y2ggXAorICAgIGZpbGU6Ly80MDItdjUuMTItMDAwMi1kdC1iaW5kaW5ncy1tdGQtYWRkLWJpbmRpbmctZm9yLUJDTTQ5MDgtcGFydGl0aW9ucy5wYXRjaCBcCisgICAgZmlsZTovLzQwMy12NS4xMy1tdGQtcGFyc2Vycy1vZnBhcnQtc3VwcG9ydC1CQ000OTA4LWZpeGVkLXBhcnRpdGlvbnMucGF0Y2ggXAorICAgIGZpbGU6Ly80MDQtdjUuMTMtbXRkLXBhcnNlcnMtb2ZwYXJ0LWxpbWl0LXBhcnNpbmctb2YtZGVwcmVjYXRlZC1EVC1zeS5wYXRjaCBcCisgICAgZmlsZTovLzQwNS12NS4xMy1tdGQtcGFyc2Vycy1vZnBhcnQtbWFrZS1zeW1ib2wtYmNtNDkwOF9wYXJ0aXRpb25zX3F1LnBhdGNoIFwKKyAgICBmaWxlOi8vNDA2LXY1LjEzLTAwMDEtbXRkLWNvcmUtYWRkLW52bWVtLWNlbGxzLWNvbXBhdGlibGUtdG8tcGFyc2UtbXRkLWFzLS5wYXRjaCBcCisgICAgZmlsZTovLzQwNi12NS4xMy0wMDAyLWR0LWJpbmRpbmdzLW52bWVtLWRyb3Atbm9kZW5hbWUtcmVzdHJpY3Rpb24ucGF0Y2ggXAorICAgIGZpbGU6Ly80MDYtdjUuMTMtMDAwMy1kdC1iaW5kaW5ncy1tdGQtRG9jdW1lbnQtdXNlLW9mLW52bWVtLWNlbGxzLWNvbXBhdGliLnBhdGNoIFwKKyAgICBmaWxlOi8vNDA3LXY1LjEzLTAwMDEtZHQtYmluZGluZ3MtbXRkLWFkZC1iaW5kaW5nLWZvci1MaW5rc3lzLU5vcnRoc3Rhci1wYS5wYXRjaCBcCisgICAgZmlsZTovLzQwNy12NS4xMy0wMDAyLW10ZC1wYXJzZXJzLW9mcGFydC1zdXBwb3J0LUxpbmtzeXMtTm9ydGhzdGFyLXBhcnRpdGkucGF0Y2ggXAorICAgIGZpbGU6Ly80MTAtbXRkLWZpeC1jYWxjdWxhdGluZy1wYXJ0aXRpb24tZW5kLWFkZHJlc3MucGF0Y2ggXAorICAgIGZpbGU6Ly82MDAtdjUuMTItbmV0LWV4dHJhY3QtbmFwaS1wb2xsLWZ1bmN0aW9uYWxpdHktdG8tX19uYXBpX3BvbGwucGF0Y2ggXAorICAgIGZpbGU6Ly82MDEtdjUuMTItbmV0LWltcGxlbWVudC10aHJlYWRlZC1hYmxlLW5hcGktcG9sbC1sb29wLXN1cHBvcnQucGF0Y2ggXAorICAgIGZpbGU6Ly82MDItdjUuMTItbmV0LWFkZC1zeXNmcy1hdHRyaWJ1dGUtdG8tY29udHJvbC1uYXBpLXRocmVhZGVkLW1vZC5wYXRjaCBcCisgICAgZmlsZTovLzYwMy12NS4xMi1uZXQtZml4LXJhY2UtYmV0d2Vlbi1uYXBpLWt0aHJlYWQtbW9kZS1hbmQtYnVzeS1wb2xsLnBhdGNoIFwKKyAgICBmaWxlOi8vNjA0LXY1LjEyLW5ldC1maXgtaGFuZ3VwLW9uLW5hcGlfZGlzYWJsZS1mb3ItdGhyZWFkZWQtbmFwaS5wYXRjaCBcCisgICAgZmlsZTovLzYxMC12NS45LW5ldC1icmlkZ2UtY2xlYXItYnJpZGdlLXMtcHJpdmF0ZS1za2Itc3BhY2Utb24teG1pdC5wYXRjaCBcCisgICAgZmlsZTovLzcwMC12NS41LW5ldC1jb3JlLWFsbG93LWZhc3QtR1JPLWZvci1za2JzLXdpdGgtRXRoZXJuZXQtaGVhZGUucGF0Y2ggXAorICAgIGZpbGU6Ly83MTYtdjUuNS1uZXQtc2ZwLW1vdmUtZndub2RlLXBhcnNpbmctaW50by1zZnAtYnVzLWxheWVyLnBhdGNoIFwKKyAgICBmaWxlOi8vNzE3LXY1LjUtbmV0LXNmcC1yZXdvcmstdXBzdHJlYW0taW50ZXJmYWNlLnBhdGNoIFwKKyAgICBmaWxlOi8vNzE4LXY1LjUtbmV0LXNmcC1maXgtc2ZwX2J1c19wdXQta2VybmVsLWRvY3VtZW50YXRpb24ucGF0Y2ggXAorICAgIGZpbGU6Ly83MTktdjUuNS1uZXQtc2ZwLWZpeC1zZnBfYnVzX2FkZF91cHN0cmVhbS13YXJuaW5nLnBhdGNoIFwKKyAgICBmaWxlOi8vNzIwLXY1LjUtbmV0LXNmcC1tb3ZlLXNmcC1zdWItc3RhdGUtbWFjaGluZXMtaW50by1zZXBhcmF0ZS1mdS5wYXRjaCBcCisgICAgZmlsZTovLzcyMS12NS41LW5ldC1zZnAtbW92ZS10eC1kaXNhYmxlLW9uLWRldmljZS1kb3duLXRvLW1haW4tc3RhdGUucGF0Y2ggXAorICAgIGZpbGU6Ly83MjItdjUuNS1uZXQtc2ZwLXJlbmFtZS1zZnBfc21faW5zX25leHQtYXMtc2ZwX3NtX21vZF9uZXh0LnBhdGNoIFwKKyAgICBmaWxlOi8vNzIzLXY1LjUtbmV0LXNmcC1oYW5kbGUtbW9kdWxlLXJlbW92ZS1vdXRzaWRlLXN0YXRlLW1hY2hpbmUucGF0Y2ggXAorICAgIGZpbGU6Ly83MjQtdjUuNS1uZXQtc2ZwLXJlbmFtZS1UX1BST0JFX1dBSVQtdG8tVF9TRVJJQUwucGF0Y2ggXAorICAgIGZpbGU6Ly83MjUtdjUuNS1uZXQtc2ZwLXBhcnNlLVNGUC1wb3dlci1yZXF1aXJlbWVudC1lYXJsaWVyLnBhdGNoIFwKKyAgICBmaWxlOi8vNzI2LXY1LjUtbmV0LXNmcC1hdm9pZC1wb3dlci1zd2l0Y2gtb24tYWRkcmVzcy1jaGFuZ2UtbW9kdWxlcy5wYXRjaCBcCisgICAgZmlsZTovLzcyNy12NS41LW5ldC1zZnAtY29udHJvbC1UWF9ESVNBQkxFLWFuZC1waHktb25seS1mcm9tLW1haW4tc3QucGF0Y2ggXAorICAgIGZpbGU6Ly83MjgtdjUuNS1uZXQtc2ZwLXNwbGl0LXRoZS1QSFktcHJvYmUtZnJvbS1zZnBfc21fbW9kX2luaXQucGF0Y2ggXAorICAgIGZpbGU6Ly83MjktdjUuNS1uZXQtc2ZwLWVsaW1pbmF0ZS1tZGVsYXktZnJvbS1QSFktcHJvYmUucGF0Y2ggXAorICAgIGZpbGU6Ly83MzAtdjUuNS1uZXQtc2ZwLWFsbG93LWZhdWx0LXByb2Nlc3NpbmctdG8tdHJhbnNpdGlvbi10by1vdGhlLnBhdGNoIFwKKyAgICBmaWxlOi8vNzMxLXY1LjUtbmV0LXNmcC1lbnN1cmUtVFhfRkFVTFQtaGFzLWRlYXNzZXJ0ZWQtYmVmb3JlLXByb2Jpbi5wYXRjaCBcCisgICAgZmlsZTovLzczMi12NS41LW5ldC1zZnAtdHJhY2stdXBzdHJlYW0tcy1hdHRhY2htZW50LXN0YXRlLWluLXN0YXRlLW0ucGF0Y2ggXAorICAgIGZpbGU6Ly83MzMtdjUuNS1uZXQtc2ZwLXNwbGl0LXBvd2VyLW1vZGUtc3dpdGNoaW5nLWZyb20tcHJvYmUucGF0Y2ggXAorICAgIGZpbGU6Ly83MzQtdjUuNS1uZXQtc2ZwLW1vdmUtbW9kdWxlLWluc2VydC1yZXBvcnRpbmctb3V0LW9mLXByb2JlLnBhdGNoIFwKKyAgICBmaWxlOi8vNzM1LXY1LjUtbmV0LXNmcC1hbGxvdy1zZnAtdG8tcHJvYmUtc2xvdy10by1pbml0aWFsaXNlLUdQT04tbS5wYXRjaCBcCisgICAgZmlsZTovLzczNi12NS41LW5ldC1zZnAtYWxsb3ctbW9kdWxlcy13aXRoLXNsb3ctZGlhZ25vc3RpY3MtdG8tcHJvYmUucGF0Y2ggXAorICAgIGZpbGU6Ly83MzctdjUuNS1uZXQtcGh5LWFkZC1jb3JlLXBoeWxpYi1zZnAtc3VwcG9ydC5wYXRjaCBcCisgICAgZmlsZTovLzczOC12NS41LW5ldC1waHktbWFydmVsbDEwZy1hZGQtU0ZQLXN1cHBvcnQucGF0Y2ggXAorICAgIGZpbGU6Ly83MzktdjUuNS1uZXQtcGh5bGluay11cGRhdGUtdG8tdXNlLXBoeV9zdXBwb3J0X2FzeW1fcGF1c2UucGF0Y2ggXAorICAgIGZpbGU6Ly83NDQtdjUuNS1uZXQtc2ZwLXNvZnQtc3RhdHVzLWFuZC1jb250cm9sLXN1cHBvcnQucGF0Y2ggXAorICAgIGZpbGU6Ly83NDUtdjUuNy1uZXQtZHNhLW10NzUzMC1hZGQtc3VwcG9ydC1mb3ItcG9ydC1taXJyb3JpbmcucGF0Y2ggXAorICAgIGZpbGU6Ly83NDYtdjUuNS1uZXQtZHNhLW12ODhlNnh4eC1TcGxpdC1tb25pdG9yLXBvcnQtY29uZmlndXJhdGlvbi5wYXRjaCBcCisgICAgZmlsZTovLzc0Ny12NS41LW5ldC1kc2EtbXY4OGU2eHh4LUFkZC1zdXBwb3J0LWZvci1wb3J0LW1pcnJvcmluZy5wYXRjaCBcCisgICAgZmlsZTovLzc0OC12NS41LW5ldC1kc2EtbXY4OGU2eHh4LWZpeC1icm9rZW4taWYtc3RhdGVtZW50LWJlY2F1c2Utb2YucGF0Y2ggXAorICAgIGZpbGU6Ly83NDktdjUuNS1uZXQtZHNhLW12ODhlNnh4eC1GaXgtbWFza2luZy1vZi1lZ3Jlc3MtcG9ydC5wYXRjaCBcCisgICAgZmlsZTovLzc1MC12NS41LW5ldC1waHktYWRkLXN1cHBvcnQtZm9yLWNsYXVzZS0zNy1hdXRvLW5lZ290aWF0aW9uLnBhdGNoIFwKKyAgICBmaWxlOi8vNzUxLXY1LjYtbmV0LW12bWRpby1hdm9pZC1lcnJvci1tZXNzYWdlLWZvci1vcHRpb25hbC1JUlEucGF0Y2ggXAorICAgIGZpbGU6Ly83NTItdjUuOC1uZXQtZHNhLXByb3ZpZGUtYW4tb3B0aW9uLWZvci1kcml2ZXJzLXRvLWFsd2F5cy1yZWNlLnBhdGNoIFwKKyAgICBmaWxlOi8vNzUzLXY1LjgtbmV0LWRzYS1tdDc1MzAtZml4LVZMQU4tc2V0dXAucGF0Y2ggXAorICAgIGZpbGU6Ly83NTYtdjUuOC1uZXQtZHNhLXJ0bDgzNjYtUGFzcy1HRU5NQVNLLXNpZ25lZC1iaXRzLnBhdGNoIFwKKyAgICBmaWxlOi8vNzU3LXY1LjgtbmV0LWRzYS10YWdfcnRsNF9hLUltcGxlbWVudC1SZWFsdGVrLTQtYnl0ZS1BLXRhZy5wYXRjaCBcCisgICAgZmlsZTovLzc1OC12NS44LW5ldC1kc2EtcnRsODM2NnJiLVN1cHBvcnQtdGhlLUNQVS1EU0EtdGFnLnBhdGNoIFwKKyAgICBmaWxlOi8vNzY1LXY1LjEyLW5ldC1kc2EtYXV0b21hdGljYWxseS1icmluZy11cC1EU0EtbWFzdGVyLXdoZW4tb3BlbmkucGF0Y2ggXAorICAgIGZpbGU6Ly83NzAtdjUuMTItbmV0LWJyaWRnZS1ub3RpZnktc3dpdGNoZGV2LW9mLWRpc2FwcGVhcmFuY2Utb2Ytb2xkLS5wYXRjaCBcCisgICAgZmlsZTovLzc3MS12NS4xMi1uZXQtZHNhLWJlLWxvdWRlci13aGVuLWEtbm9uLWxlZ2FjeS1GREItb3BlcmF0aW9uLWZhLnBhdGNoIFwKKyAgICBmaWxlOi8vNzcyLXY1LjEyLW5ldC1kc2EtZG9uLXQtdXNlLXN3aXRjaGRldl9ub3RpZmllcl9mZGJfaW5mby1pbi1kc2EucGF0Y2ggXAorICAgIGZpbGU6Ly83NzMtdjUuMTItbmV0LWRzYS1tb3ZlLXN3aXRjaGRldi1ldmVudC1pbXBsZW1lbnRhdGlvbi11bmRlci10aC5wYXRjaCBcCisgICAgZmlsZTovLzc3NC12NS4xMi1uZXQtZHNhLWV4aXQtZWFybHktaW4tZHNhX3NsYXZlX3N3aXRjaGRldl9ldmVudC1pZi13LnBhdGNoIFwKKyAgICBmaWxlOi8vNzc1LXY1LjEyLW5ldC1kc2EtbGlzdGVuLWZvci1TV0lUQ0hERVZfLUZEQi1ERUwtX0FERF9UT19ERVZJQ0UucGF0Y2ggXAorICAgIGZpbGU6Ly83ODAtbmV0LWRzYS1tdDc1MzAtc2V0dXAtY29yZS1jbG9jay1ldmVuLWluLVRSR01JSS1tb2RlLnBhdGNoIFwKKyAgICBmaWxlOi8vODAwLXY1LjUtaWlvLWltdS1BZGQtc3VwcG9ydC1mb3ItdGhlLUZYT1M4NzAwLUlNVS5wYXRjaCBcCisgICAgZmlsZTovLzgwMC12NS41LXNjc2ktY29yZS1BZGQtc3lzZnMtYXR0cmlidXRlcy1mb3ItVlBELXBhZ2VzLTBoLWFuZC0ucGF0Y2ggXAorICAgIGZpbGU6Ly84MDEtdjUuNS1od21vbi1Ecml2ZXItZm9yLWRpc2stYW5kLXNvbGlkLXN0YXRlLWRyaXZlcy13aXRoLXRlLnBhdGNoIFwKKyAgICBmaWxlOi8vODAxLXY1LjYtbGVkcy1wb3B1bGF0ZS10aGUtZGV2aWNlLXMtb2Zfbm9kZS5wYXRjaCBcCisgICAgZmlsZTovLzgwMy12NS44LWkyYy1weGEtdXNlLW9mZmljaWFsLWFkZHJlc3MtYnl0ZS1oZWxwZXIucGF0Y2ggXAorICAgIGZpbGU6Ly84MDQtdjUuOC1pMmMtcHhhLXJlbW92ZS11bm5lZWRlZC1pbmNsdWRlcy5wYXRjaCBcCisgICAgZmlsZTovLzgwNS12NS44LWkyYy1weGEtcmUtYXJyYW5nZS1pbmNsdWRlcy10by1iZS1pbi1hbHBoYWJldGljYWwtb3IucGF0Y2ggXAorICAgIGZpbGU6Ly84MDYtdjUuOC1pMmMtcHhhLXJlLWFycmFuZ2UtZnVuY3Rpb25zLXRvLWZsb3ctYmV0dGVyLnBhdGNoIFwKKyAgICBmaWxlOi8vODA3LXY1LjgtaTJjLXB4YS1yZS1hcnJhbmdlLXJlZ2lzdGVyLWZpZWxkLWRlZmluaXRpb25zLnBhdGNoIFwKKyAgICBmaWxlOi8vODA4LXY1LjgtaTJjLXB4YS1hZGQtYW5kLXVzZS1kZWZpbml0aW9ucy1mb3ItSUJNUi1yZWdpc3Rlci5wYXRjaCBcCisgICAgZmlsZTovLzgwOS12NS44LWkyYy1weGEtYWx3YXlzLXNldC1mbS1hbmQtaHMtbWVtYmVycy1mb3ItZWFjaC10eXBlLnBhdGNoIFwKKyAgICBmaWxlOi8vODEwLXY1LjgtaTJjLXB4YS1tb3ZlLXByaXZhdGUtZGVmaW5pdGlvbnMtdG8taTJjLXB4YS5jLnBhdGNoIFwKKyAgICBmaWxlOi8vODExLXY1LjgtaTJjLXB4YS1tb3ZlLURULUlEcy1hbG9uZy1zaWRlLXBsYXRmb3JtLUlEcy5wYXRjaCBcCisgICAgZmlsZTovLzgxMy12NS44LWkyYy1weGEtY2xlYW4tdXAtZGVjb2RlX2JpdHMucGF0Y2ggXAorICAgIGZpbGU6Ly84MTQtdjUuOC1pMmMtcHhhLWZpeC1pMmNfcHhhX3dhaXRfYnVzX25vdF9idXN5LWJvdW5kYXJ5LWNvbmRpLnBhdGNoIFwKKyAgICBmaWxlOi8vODE1LXY1LjgtaTJjLXB4YS1jb25zb2xpZGF0ZS1pMmNfcHhhXy14ZmVyLWltcGxlbWVudGF0aW9ucy5wYXRjaCBcCisgICAgZmlsZTovLzgxNi12NS44LWkyYy1weGEtYXZvaWQtY29tcGxhaW50cy13aXRoLW5vbi1yZXNwb25zaXZlLXNsYXZlcy5wYXRjaCBcCisgICAgZmlsZTovLzgxNy12NS44LWkyYy1weGEtZW5zdXJlLXRpbWVvdXQtbWVzc2FnZXMtYXJlLXVuaXF1ZS5wYXRjaCBcCisgICAgZmlsZTovLzgxOC12NS44LWkyYy1weGEtcmVtb3ZlLXNvbWUtdW5uZWNlc3NhcnktZGVidWcucGF0Y2ggXAorICAgIGZpbGU6Ly84MjAtdjUuOC1pMmMtcHhhLXVzZS1tYXN0ZXItYWJvcnQtZm9yLWRldmljZS1wcm9iZXMucGF0Y2ggXAorICAgIGZpbGU6Ly84MjEtdjUuOC1pMmMtcHhhLWltcGxlbWVudC1nZW5lcmljLWkyYy1idXMtcmVjb3ZlcnkucGF0Y2ggXAorICAgIGZpbGU6Ly84MjUtdjUuOC1zcGktcmI0eHgtbnVsbC1wb2ludGVyLWJ1Zy1maXgucGF0Y2ggXAorICAgIGZpbGU6Ly84MjYtdjUuOC1zcGktcmI0eHgtdXBkYXRlLWRyaXZlci10by1iZS1kZXZpY2UtdHJlZS1hd2FyZS5wYXRjaCBcCisgICAgZmlsZTovLzgyNy12NS4xNi1zcGktYWRkLXBvd2VyLWNvbnRyb2wtd2hlbi1zZXRfY3MucGF0Y2ggXAorICAgIGZpbGU6Ly84MzEtdjUuMTMtMDAwMS1maXJtd2FyZS1iY200N3h4X252cmFtLXJlbmFtZS1maW5kaW5nLWZ1bmN0aW9uLWFuZC1pLnBhdGNoIFwKKyAgICBmaWxlOi8vODMxLXY1LjEzLTAwMDItZmlybXdhcmUtYmNtNDd4eF9udnJhbS1hZGQtaGVscGVyLWNoZWNraW5nLWZvci1OVlJBTS5wYXRjaCBcCisgICAgZmlsZTovLzgzMS12NS4xMy0wMDAzLWZpcm13YXJlLWJjbTQ3eHhfbnZyYW0tZXh0cmFjdC1jb2RlLWNvcHlpbmctTlZSQU0ucGF0Y2ggXAorICAgIGZpbGU6Ly84MzEtdjUuMTMtMDAwNC1maXJtd2FyZS1iY200N3h4X252cmFtLWxvb2stZm9yLU5WUkFNLXdpdGgtZm9yLWluc3RlLnBhdGNoIFwKKyAgICBmaWxlOi8vODMxLXY1LjEzLTAwMDUtZmlybXdhcmUtYmNtNDd4eF9udnJhbS1pbmxpbmUtY29kZS1jaGVja2luZy1OVlJBTS1zaS5wYXRjaCBcCisgICAgZmlsZTovLzg1Mi12NS4xMC0wMDAxLW5ldC1zZnAtVlNPTC1WMjgwMUYtQ2FybGl0b3h4UHJvLUNQR09TMDMtMDQ5MC12Mi4wLXcucGF0Y2ggXAorICAgIGZpbGU6Ly84NTItdjUuMTAtMDAwMi1uZXQtc2ZwLWFkZC13b3JrYXJvdW5kLWZvci1SZWFsdGVrLVJUTDg2NzItYW5kLVJUTDk2LnBhdGNoIFwKKyAgICBmaWxlOi8vOTAwLXY1LjktMDAwMS1kdC1iaW5kaW5ncy1BZGQtbXVsdGljb2xvci1jbGFzcy1kdC1iaW5kaW5ncy1kb2N1bWVuLnBhdGNoIFwKKyAgICBmaWxlOi8vOTAwLXY1LjktMDAwMi1sZWRzLUFkZC1tdWx0aWNvbG9yLUlELXRvLXRoZS1jb2xvci1JRC1saXN0LnBhdGNoIFwKKyAgICBmaWxlOi8vOTAwLXY1LjktMDAwMy1sZWRzLWFkZC1SR0ItY29sb3Itb3B0aW9uLWFzLXRoYXQtaXMtZGlmZmVyZW50LWZyb20tLnBhdGNoIFwKKyAgICAiCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9kZWZjb25maWcgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJhMjkxMQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2RlZmNvbmZpZwpAQCAtMCwwICsxLDY1NjAgQEAKKyMgQ09ORklHXzEwNF9RVUFEXzggaXMgbm90IHNldAorQ09ORklHXzMyQklUPXkKK0NPTkZJR182NEJJVF9USU1FPXkKKyMgQ09ORklHXzZMT1dQQU4gaXMgbm90IHNldAorIyBDT05GSUdfNkxPV1BBTl9ERUJVR0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHXzZQQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5VE9PIGlzIG5vdCBzZXQKKyMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCODUwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCUDA2ME1HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCWDUwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDRVJIREYgaXMgbm90IHNldAorIyBDT05GSUdfQUNFUl9XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQUNQSV9BTFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNQSV9BUEVJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDUElfQlVUVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDUElfQ09ORklHRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUNQSV9DVVNUT01fTUVUSE9EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDUElfRVhUTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDUElfSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDUElfTkZJVCBpcyBub3Qgc2V0CisjIENPTkZJR19BQ1BJX1JFRFVDRURfSEFSRFdBUkVfT05MWSBpcyBub3Qgc2V0CisjIENPTkZJR19BQ1BJX1RBQkxFX1VQR1JBREUgaXMgbm90IHNldAorIyBDT05GSUdfQUNQSV9WSURFTyBpcyBub3Qgc2V0CisjIENPTkZJR19BRDJTMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BRDJTMTIxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BRDJTOTAgaXMgbm90IHNldAorIyBDT05GSUdfQUQ1MDY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FENTI1WF9EUE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FENTI3MiBpcyBub3Qgc2V0CisjIENPTkZJR19BRDUzNjAgaXMgbm90IHNldAorIyBDT05GSUdfQUQ1MzgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FENTQyMSBpcyBub3Qgc2V0CisjIENPTkZJR19BRDU0NDYgaXMgbm90IHNldAorIyBDT05GSUdfQUQ1NDQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FENTUwNCBpcyBub3Qgc2V0CisjIENPTkZJR19BRDU1OTJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FENTU5M1IgaXMgbm90IHNldAorIyBDT05GSUdfQUQ1NjI0Ul9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfQUQ1Njg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FENTY4Nl9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfQUQ1Njk2X0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19BRDU3NTUgaXMgbm90IHNldAorIyBDT05GSUdfQUQ1NzU4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FENTc2MSBpcyBub3Qgc2V0CisjIENPTkZJR19BRDU3NjQgaXMgbm90IHNldAorIyBDT05GSUdfQUQ1NzkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FENTkzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BRDcxMjQgaXMgbm90IHNldAorIyBDT05GSUdfQUQ3MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FENzE1MiBpcyBub3Qgc2V0CisjIENPTkZJR19BRDcxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQUQ3MjY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FENzI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19BRDcyOTEgaXMgbm90IHNldAorIyBDT05GSUdfQUQ3Mjk4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FENzMwMyBpcyBub3Qgc2V0CisjIENPTkZJR19BRDc0NzYgaXMgbm90IHNldAorIyBDT05GSUdfQUQ3NjA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FENzYwNl9JRkFDRV9QQVJBTExFTCBpcyBub3Qgc2V0CisjIENPTkZJR19BRDc2MDZfSUZBQ0VfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FENzc0NiBpcyBub3Qgc2V0CisjIENPTkZJR19BRDc3NjYgaXMgbm90IHNldAorIyBDT05GSUdfQUQ3NzY4XzEgaXMgbm90IHNldAorIyBDT05GSUdfQUQ3NzgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FENzc5MSBpcyBub3Qgc2V0CisjIENPTkZJR19BRDc3OTMgaXMgbm90IHNldAorIyBDT05GSUdfQUQ3ODE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FENzg4NyBpcyBub3Qgc2V0CisjIENPTkZJR19BRDc5MjMgaXMgbm90IHNldAorIyBDT05GSUdfQUQ3OTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FENzk5WCBpcyBub3Qgc2V0CisjIENPTkZJR19BRDgzNjYgaXMgbm90IHNldAorIyBDT05GSUdfQUQ4ODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FEOTUyMyBpcyBub3Qgc2V0CisjIENPTkZJR19BRDk4MzIgaXMgbm90IHNldAorIyBDT05GSUdfQUQ5ODM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAorIyBDT05GSUdfQURFNzg1NCBpcyBub3Qgc2V0CisjIENPTkZJR19BREY0MzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FERjQzNzEgaXMgbm90IHNldAorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRElOX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19BRElTMTYwODAgaXMgbm90IHNldAorIyBDT05GSUdfQURJUzE2MTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FESVMxNjEzNiBpcyBub3Qgc2V0CisjIENPTkZJR19BRElTMTYyMDEgaXMgbm90IHNldAorIyBDT05GSUdfQURJUzE2MjAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FESVMxNjIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19BRElTMTYyNDAgaXMgbm90IHNldAorIyBDT05GSUdfQURJUzE2MjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FESVMxNjQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BRElTMTY0NjAgaXMgbm90IHNldAorIyBDT05GSUdfQURJUzE2NDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FESkRfUzMxMSBpcyBub3Qgc2V0CisjIENPTkZJR19BRE02OTk2X1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19BRE04MjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FEVDczMTYgaXMgbm90IHNldAorQ09ORklHX0FEVklTRV9TWVNDQUxMUz15CisjIENPTkZJR19BRFhMMzQ1X0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19BRFhMMzQ1X1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19BRFhMMzcyX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19BRFhMMzcyX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19BRFhSUzQ1MCBpcyBub3Qgc2V0CitDT05GSUdfQUVBQkk9eQorIyBDT05GSUdfQUZFNDQwMyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkU0NDA0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0RFQlVHX0NVUlNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZfS0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDX0lOSkVDVF9MT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FIQ0lfQ0VWQSBpcyBub3Qgc2V0CisjIENPTkZJR19BSENJX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BSENJX01WRUJVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FIQ0lfUU9SSVEgaXMgbm90IHNldAorQ09ORklHX0FJTz15CisjIENPTkZJR19BSVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FJUk9fQ1MgaXMgbm90IHNldAorIyBDT05GSUdfQUlYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BSzA5OTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FLODk3NCBpcyBub3Qgc2V0CisjIENPTkZJR19BSzg5NzUgaXMgbm90IHNldAorIyBDT05GSUdfQUwzMzIwQSBpcyBub3Qgc2V0CisjIENPTkZJR19BTElNNzEwMV9XRFQgaXMgbm90IHNldAorQ09ORklHX0FMTE9XX0RFVl9DT1JFRFVNUD15CisjIENPTkZJR19BTFRFUkFfTUJPWCBpcyBub3Qgc2V0CisjIENPTkZJR19BTFRFUkFfTVNHRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FMVEVSQV9TVEFQTCBpcyBub3Qgc2V0CisjIENPTkZJR19BTFRFUkFfVFNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FMWCBpcyBub3Qgc2V0CisjIENPTkZJR19BTF9GSUMgaXMgbm90IHNldAorIyBDT05GSUdfQU0yMzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNMzM1WF9QSFlfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNQkFfUEwwOFggaXMgbm90IHNldAorIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQU1EX01FTV9FTkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQU1EX1hHQkUgaXMgbm90IHNldAorIyBDT05GSUdfQU1EX1hHQkVfSEFWRV9FQ0MgaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNSUxPX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19BTkRST0lEIGlzIG5vdCBzZXQKK0NPTkZJR19BTk9OX0lOT0RFUz15CisjIENPTkZJR19BUERTOTMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUERTOTgwMkFMUyBpcyBub3Qgc2V0CisjIENPTkZJR19BUERTOTk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19BUE04MDE4WCBpcyBub3Qgc2V0CisjIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExFX0dNVVggaXMgbm90IHNldAorIyBDT05GSUdfQVBQTEVfUFJPUEVSVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVFVQU5USUFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSNTUyMyBpcyBub3Qgc2V0CisjIENPTkZJR19BUjcgaXMgbm90IHNldAorIyBDT05GSUdfQVI4MjE2X1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19BUjgyMTZfUEhZX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BQ1RJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQUdJTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQUxQSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVJUUEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVNQRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FYWElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQkNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQkNNMjgzNSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0JDTV8yMTY2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0JDTV8yMzU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0JDTV8yODFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0JDTV81MzAxWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0JDTV81MzU3MyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0JDTV82M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQkNNX0NZR05VUyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0JDTV9JUFJPQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0JDTV9OU1AgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9CRVJMSU4gaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9CSVRNQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQlJDTVNUQiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ05TM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ESUdJQ09MT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ETUFfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRE9WRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FWFlOT1MgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hBU19ERVZNRU1fSVNfQUxMT1dFRD15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hBU19VQlNBTl9TQU5JVElaRV9BTEw9eQorIyBDT05GSUdfQVJDSF9ISTN4eHggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ISUdIQkFOSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hJU0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0szIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0VZU1RPTkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MQVlFUlNDQVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEcxSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xQQzMyWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NRURJQVRFSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01FU09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTUlMQkVBVVQgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfTU1BUF9STkRfQklUUz04CitDT05GSUdfQVJDSF9NTUFQX1JORF9CSVRTX01BWD0xNgorQ09ORklHX0FSQ0hfTU1BUF9STkRfQklUU19NSU49OAorQ09ORklHX0FSQ0hfTU1BUF9STkRfQ09NUEFUX0JJVFNfTUFYPTE2CitDT05GSUdfQVJDSF9NTUFQX1JORF9DT01QQVRfQklUU19NSU49OAorIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NVUxUSVBMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVVMVElfVjYgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NVUxUSV9WNyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NVkVCVSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YUyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FRURTX0NQVV9JRExFX0NPVVBMRUQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTk9NQURJSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05QQ00gaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OU1BJUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUDEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAyUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUDQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1hOQVMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QSUNPWENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QUklNQTIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9RQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFRFSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVORVNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JPQ0tDSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TNVBWMjEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0VBVFRMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NITU9CSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0lSRiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NPQ0ZQR0EgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TUFJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1RJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1RNMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVFJBVElYMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVU5YSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NZTlFVQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1RBTkdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVEVHUkEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9USFVOREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVEhVTkRFUjIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9VMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTg1MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9VTklQSElFUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFWFBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVklSVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZUODUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZVTENBTiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XQU5UU19USFBfU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1dNODUwNSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1dNODc1MCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1dNODg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1hHRU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfWlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9aWU5RIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfWllOUU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNfRU1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNfSVJRX05PX0FVVE9TQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTY0XzE2S19QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BUk02NF82NEtfUEFHRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVJNNjRfQ1JZUFRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTY0X0VSUkFUVU1fMTAyNDcxOCBpcyBub3Qgc2V0CisjIENPTkZJR19BUk02NF9FUlJBVFVNXzE0NjMyMjUgaXMgbm90IHNldAorIyBDT05GSUdfQVJNNjRfRVJSQVRVTV8xNTQyNDE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTY0X0VSUkFUVU1fODE5NDcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTY0X0VSUkFUVU1fODI0MDY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTY0X0VSUkFUVU1fODI2MzE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTY0X0VSUkFUVU1fODI3MzE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTY0X0VSUkFUVU1fODMyMDc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTY0X0VSUkFUVU1fODM0MjIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTY0X0VSUkFUVU1fODQzNDE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTY0X0VSUkFUVU1fODQ1NzE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTY0X0VSUkFUVU1fODU4OTIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTY0X0hXX0FGREJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTY0X0xTRV9BVE9NSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTY0X01PRFVMRV9QTFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTY0X1BBTiBpcyBub3Qgc2V0CisjIENPTkZJR19BUk02NF9QTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTY0X1BTRVVET19OTUkgaXMgbm90IHNldAorIyBDT05GSUdfQVJNNjRfUFREVU1QX0RFQlVHRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVJNNjRfUkFORE9NSVpFX1RFWFRfT0ZGU0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTY0X1JBU19FWFROIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTTY0X1JFTE9DX1RFU1QgaXMgbm90IHNldAorQ09ORklHX0FSTTY0X1NXX1RUQlIwX1BBTj15CisjIENPTkZJR19BUk02NF9VQU8gaXMgbm90IHNldAorIyBDT05GSUdfQVJNNjRfVkFfQklUU180OCBpcyBub3Qgc2V0CisjIENPTkZJR19BUk02NF9WSEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0FQUEVOREVEX0RUQiBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fQVJDSF9USU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fQVRBR19EVEJfQ09NUEFUX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9CSUdfTElUVExFX0NQVUZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0NDSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fQ0NJNDAwX1BNVSBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fQ0NJNXh4X1BNVSBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fQ0NJX1BNVSBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fQ0NOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9DUFVJRExFIGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fQ1BVX1RPUE9MT0dZPXkKKyMgQ09ORklHX0FSTV9DUllQVE8gaXMgbm90IHNldAorQ09ORklHX0FSTV9ETUFfTUVNX0JVRkZFUkFCTEU9eQorIyBDT05GSUdfQVJNX0RTVV9QTVUgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0VSUkFUQV8zMjYxMDMgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0VSUkFUQV8zNjQyOTYgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0VSUkFUQV80MTE5MjAgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0VSUkFUQV80MzA5NzMgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0VSUkFUQV80NTg2OTMgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0VSUkFUQV80NjAwNzUgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0VSUkFUQV82NDM3MTkgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0VSUkFUQV83MjA3ODkgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0VSUkFUQV83NDIyMzAgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0VSUkFUQV83NDIyMzEgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0VSUkFUQV83NDM2MjIgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0VSUkFUQV83NTE0NzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0VSUkFUQV83NTQzMjIgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0VSUkFUQV83NTQzMjcgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0VSUkFUQV83NjQzNjkgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0VSUkFUQV83NzMwMjIgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0VSUkFUQV83NzU0MjAgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0VSUkFUQV83OTgxODEgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0VSUkFUQV84MTQyMjAgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX0VSUkFUQV84MTgzMjVfODUyNDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9FUlJBVEFfODIxNDIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9FUlJBVEFfODI1NjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9FUlJBVEFfODUyNDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9FUlJBVEFfODUyNDIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9FUlJBVEFfODU3MjcxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9FUlJBVEFfODU3MjcyIGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fR0lDX01BWF9OUj0xCisjIENPTkZJR19BUk1fS0lSS1dPT0RfQ1BVRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fS1BST0JFU19URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9MUEFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9NSFUgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX01PRFVMRV9QTFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9QQVRDSF9QSFlTX1ZJUlQgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX1BTQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX1BTQ0lfQ0hFQ0tFUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fUFNDSV9DUFVJRExFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9QVERVTVBfREVCVUdGUyBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fU0JTQV9XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fU0NQSV9QUk9UT0NPTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fU0RFX0lOVEVSRkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fU1A4MDVfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX1NQRV9QTVUgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX1RIVU1CRUUgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX1RJTUVSX1NQODA0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9VTldJTkQgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX1ZJUlRfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FTMzkzNSBpcyBub3Qgc2V0CisjIENPTkZJR19BU005MjYwX1RJTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FTVVNfTEFQVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FTVVNfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfQVNZTU1FVFJJQ19LRVlfVFlQRSBpcyBub3Qgc2V0CisjIENPTkZJR19BU1lNTUVUUklDX1BVQkxJQ19LRVlfU1VCVFlQRSBpcyBub3Qgc2V0CisjIENPTkZJR19BU1lOQ19SQUlENl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FTWU5DX1RYX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVDc2QzUwWF9VU0IgaXMgbm90IHNldAorIyBDT05GSUdfQVQ4MDNYX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19BVDkxX1NBTUE1RDJfQURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFHUyBpcyBub3Qgc2V0CitDT05GSUdfQVRBR1NfUFJPQz15CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBX0FDUEkgaXMgbm90IHNldAorQ09ORklHX0FUQV9CTURNQT15CisjIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfU0ZGPXkKKyMgQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUSDEwSyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEgyNSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEg1SyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEg2S0wgaXMgbm90IHNldAorIyBDT05GSUdfQVRINzkgaXMgbm90IHNldAorIyBDT05GSUdfQVRIOUsgaXMgbm90IHNldAorIyBDT05GSUdfQVRIOUtfSFRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUSF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfQVRMQVNfUEhfU0VOU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTF9QSVQgaXMgbm90IHNldAorIyBDT05GSUdfQVRNRUxfU1NDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9BTUJBU1NBRE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9CUjI2ODQgaXMgbm90IHNldAorQ09ORklHX0FUTV9CUjI2ODRfSVBGSUxURVI9eQorIyBDT05GSUdfQVRNX0NMSVAgaXMgbm90IHNldAorQ09ORklHX0FUTV9DTElQX05PX0lDTVA9eQorIyBDT05GSUdfQVRNX0RSSVZFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9FTkkgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0ZJUkVTVFJFQU0gaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0ZPUkUyMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9IRSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fSE9SSVpPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fSUEgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0lEVDc3MjUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9MQU5BSSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fTEFORSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fTVBPQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fTklDU1RBUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fU09MT1MgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fWkFUTSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE9NSUM2NF9TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19BVFAgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVRfQVJDSF9DT01QQVRfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVJPUkFfTkI4ODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9fWlJFTEFERFIgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19BWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FYMjVfREFNQV9TTEFWRSBpcyBub3Qgc2V0CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FYODg3OTZCX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19BWFAyMFhfQURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FYUDIwWF9QT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19BWFAyODhfQURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FYUDI4OF9GVUVMX0dBVUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0MyBpcyBub3Qgc2V0CisjIENPTkZJR19CNDNMRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0I1MyBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfQURQODg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfQURQODg3MCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfQVBQTEUgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0FSQ1hDTk4gaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0JENjEwNyBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTE0zNjMwQSBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTE0zNjM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MUDg1NVggaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xWNTIwN0xQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9QQU5ET1JBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9QTTg5NDFfV0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfUFdNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9SUEkgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX1NBSEFSQSBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfQkFUTUFOX0FEViBpcyBub3Qgc2V0CisjIENPTkZJR19CQVRURVJZX0JRMjdYWFggaXMgbm90IHNldAorIyBDT05GSUdfQkFUVEVSWV9CUTI3WFhYX0hEUSBpcyBub3Qgc2V0CisjIENPTkZJR19CQVRURVJZX0RTMjc2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CQVRURVJZX0RTMjc4MCBpcyBub3Qgc2V0CisjIENPTkZJR19CQVRURVJZX0RTMjc4MSBpcyBub3Qgc2V0CisjIENPTkZJR19CQVRURVJZX0RTMjc4MiBpcyBub3Qgc2V0CisjIENPTkZJR19CQVRURVJZX0dBVUdFX0xUQzI5NDEgaXMgbm90IHNldAorIyBDT05GSUdfQkFUVEVSWV9HT0xERklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19CQVRURVJZX0xFR09fRVYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBVFRFUllfTUFYMTcwNDAgaXMgbm90IHNldAorIyBDT05GSUdfQkFUVEVSWV9NQVgxNzA0MiBpcyBub3Qgc2V0CisjIENPTkZJR19CQVRURVJZX01BWDE3MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBVFRFUllfUlQ1MDMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBVFRFUllfU0JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBWUNPTV9FUFAgaXMgbm90IHNldAorIyBDT05GSUdfQkFZQ09NX1BBUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQVlDT01fU0VSX0ZEWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQVlDT01fU0VSX0hEWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQ0FDSEUgaXMgbm90IHNldAorIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CQ002M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTYzWFhfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTcwMzhfV0RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTdYWFhfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTg0ODgxX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CQ004N1hYX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CQ01BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTUFfRFJJVkVSX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0JDTUFfUE9TU0lCTEU9eQorIyBDT05GSUdfQkNNR0VORVQgaXMgbm90IHNldAorIyBDT05GSUdfQkNNX0lQUk9DX0FEQyBpcyBub3Qgc2V0CisjIENPTkZJR19CQ01fS09OQV9VU0IyX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CQ01fU0JBX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkdNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQkgxNzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JIMTc4MCBpcyBub3Qgc2V0CisjIENPTkZJR19CSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19CSUdfTElUVExFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX0VMRl9GRFBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfRkxBVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX1NDUklQVD15CitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19CTEtfQ0dST1VQX0lPQ09TVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ0dST1VQX0lPTEFURU5DWSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ01ETElORV9QQVJTRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfNERSSVZFUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BTEkxNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BVElJWFAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0dMSUIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DTUQ2NDAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NTNTUzNiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NZODJDNjkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREVMS0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfRFJCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RUQzIyNzggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IVDY1NjBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFQUNQSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFQ1MgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVQQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVQTlAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFX0FVMVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MTcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSk1JQ1JPTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUF9NSU5fQ09VTlQ9OAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTlVMTF9CTEsgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OVk1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUENJRVNTRF9NVElQMzJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX05FVyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9RRDY1WFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9SQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9SU1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUloxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TSUlNQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0lTNTUxMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NLRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NMODJDMTA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NWV0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9USFJPVFRMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNQzg2NzIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfWk9ORUQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX1NFRF9PUEFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19XQlQgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0JNQTE4MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTUEyMjAgaXMgbm90IHNldAorIyBDT05GSUdfQk1DMTUwX0FDQ0VMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JNQzE1MF9NQUdOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JNQzE1MF9NQUdOX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19CTUMxNTBfTUFHTl9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfQk1FNjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JNRzE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTUkxNjBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JNSTE2MF9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfQk1JUFNfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19CTVAyODAgaXMgbm90IHNldAorIyBDT05GSUdfQk5BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlhfU1JJT1YgaXMgbm90IHNldAorIyBDT05GSUdfQk5YVCBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT0tFX1dEVCBpcyBub3Qgc2V0CitDT05GSUdfQk9PS0VfV0RUX0RFRkFVTFRfVElNRU9VVD0zCisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UX1JBVz15CitDT05GSUdfQlBGPXkKKyMgQ09ORklHX0JQRklMVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19CUEZfSklUPXkKKyMgQ09ORklHX0JQRl9KSVRfQUxXQVlTX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSIGlzIG5vdCBzZXQKK0NPTkZJR19CUEZfU1lTQ0FMTD15CisjIENPTkZJR19CUFFFVEhFUiBpcyBub3Qgc2V0CitDT05GSUdfQlFMPXkKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX0JSQ01GTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSQ01TTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSQ01TVEJfR0lTQl9BUkIgaXMgbm90IHNldAorQ09ORklHX0JSSURHRT15CisjIENPTkZJR19CUklER0VfRUJUXzgwMl8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRV9FQlRfQU1PTkcgaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFX0VCVF9BUlAgaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFX0VCVF9BUlBSRVBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0VfRUJUX0JST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0VfRUJUX0ROQVQgaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFX0VCVF9JUCBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0VfRUJUX0lQNiBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0VfRUJUX0xJTUlUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRV9FQlRfTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRV9FQlRfTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0VfRUJUX01BUktfVCBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0VfRUJUX05GTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRV9FQlRfUEtUVFlQRSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0VfRUJUX1JFRElSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRV9FQlRfU05BVCBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0VfRUJUX1NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0VfRUJUX1RfRklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRV9FQlRfVF9OQVQgaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFX0VCVF9WTEFOIGlzIG5vdCBzZXQKK0NPTkZJR19CUklER0VfSUdNUF9TTk9PUElORz15CisjIENPTkZJR19CUklER0VfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFUyBpcyBub3Qgc2V0CitDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HPXkKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfQlJPS0VOX09OX1NNUD15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19BU1NFUlQgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTX1JFRl9WRVJJRlkgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlNfUlVOX1NBTklUWV9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9BVEgzSyBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9CTkVQIGlzIG5vdCBzZXQKK0NPTkZJR19CVF9CTkVQX01DX0ZJTFRFUj15CitDT05GSUdfQlRfQk5FUF9QUk9UT19GSUxURVI9eQorIyBDT05GSUdfQlRfQlJFRFIgaXMgbm90IHNldAorIyBDT05GSUdfQlRfQ01UUCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCQ00yMDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSUJGVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSUJMVUVDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSUJQQTEwWCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCVDNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSUJUU0RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCVFVTQiBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCVFVTQl9BVVRPU1VTUEVORCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCVFVTQl9NVEsgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQlRVU0JfUlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSURUTDEgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJVUFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lVQVJUXzNXSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSVVBUlRfQUc2WFggaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJVUFSVF9BVEgzSyBpcyBub3Qgc2V0CitDT05GSUdfQlRfSENJVUFSVF9CQ1NQPXkKK0NPTkZJR19CVF9IQ0lVQVJUX0g0PXkKKyMgQ09ORklHX0JUX0hDSVVBUlRfTEwgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJVUFSVF9NUlZMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSVVBUlRfUUNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSVZIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSElEUCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9MRSBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX01SVkwgaXMgbm90IHNldAorIyBDT05GSUdfQlRfTVRLU0RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9NVEtVQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX1JGQ09NTSBpcyBub3Qgc2V0CitDT05GSUdfQlRfUkZDT01NX1RUWT15CisjIENPTkZJR19CVF9TRUxGVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfQlVHPXkKKyMgQ09ORklHX0JVR19PTl9EQVRBX0NPUlJVUFRJT04gaXMgbm90IHNldAorQ09ORklHX0JVSUxEVElNRV9FWFRBQkxFX1NPUlQ9eQorIyBDT05GSUdfQlVJTERfQklOMkMgaXMgbm90IHNldAorQ09ORklHX0JVSUxEX1NBTFQ9IiIKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQ0FDSEVfTDJYMF9QTVU9eQorIyBDT05GSUdfQ0FERU5DRV9XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19DQUlGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19DQU5fQkNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTl9ERUJVR19ERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTl9ERVYgaXMgbm90IHNldAorIyBDT05GSUdfQ0FOX0dTX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19DQU5fR1cgaXMgbm90IHNldAorIyBDT05GSUdfQ0FOX0hJMzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19DQU5fSUZJX0NBTkZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTl9KMTkzOSBpcyBub3Qgc2V0CisjIENPTkZJR19DQU5fS1ZBU0VSX1BDSUVGRCBpcyBub3Qgc2V0CisjIENPTkZJR19DQU5fTUNCQV9VU0IgaXMgbm90IHNldAorIyBDT05GSUdfQ0FOX01fQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTl9QRUFLX1BDSUVGRCBpcyBub3Qgc2V0CisjIENPTkZJR19DQU5fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTl9SQ0FSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTl9SQ0FSX0NBTkZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTl9TTENBTiBpcyBub3Qgc2V0CisjIENPTkZJR19DQU5fU1VONEkgaXMgbm90IHNldAorIyBDT05GSUdfQ0FOX1VDQU4gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOX1ZDQU4gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOX1ZYQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBUElfQVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBUElfRUlDT04gaXMgbm90IHNldAorIyBDT05GSUdfQ0FQSV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfQ0FSREJVUz15CisjIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBUkw5MTcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfQ0FWSVVNX0NQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fRVJSQVRVTV8yMjM3NSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fRVJSQVRVTV8yMzE0NCBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fRVJSQVRVTV8yMzE1NCBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fRVJSQVRVTV8yNzQ1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fRVJSQVRVTV8zMDExNSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fT0NURU9OX1NPQyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVZJVU1fUFRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfQ0MxMDAwMV9BREMgaXMgbm90IHNldAorIyBDT05GSUdfQ0NTODExIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19DQU5fTElOSz15CitDT05GSUdfQ0NfSEFTX0FTTV9JTkxJTkU9eQorQ09ORklHX0NDX0hBU19TQU5DT1ZfVFJBQ0VfUEM9eQorQ09ORklHX0NDX0hBU19TVEFDS1BST1RFQ1RPUl9OT05FPXkKK0NPTkZJR19DQ19IQVNfV0FSTl9NQVlCRV9VTklOSVRJQUxJWkVEPXkKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfUEVSRk9STUFOQ0U9eQorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19DRVBIX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NFUEhfTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NGRzgwMjExX0NFUlRJRklDQVRJT05fT05VUyBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIQVJHRVJfQURQNTA2MSBpcyBub3Qgc2V0CisjIENPTkZJR19DSEFSR0VSX0JRMjQxNVggaXMgbm90IHNldAorIyBDT05GSUdfQ0hBUkdFUl9CUTI0MTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIQVJHRVJfQlEyNDI1NyBpcyBub3Qgc2V0CisjIENPTkZJR19DSEFSR0VSX0JRMjQ3MzUgaXMgbm90IHNldAorIyBDT05GSUdfQ0hBUkdFUl9CUTI1ODkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIQVJHRVJfREVURUNUT1JfTUFYMTQ2NTYgaXMgbm90IHNldAorIyBDT05GSUdfQ0hBUkdFUl9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIQVJHRVJfSVNQMTcwNCBpcyBub3Qgc2V0CisjIENPTkZJR19DSEFSR0VSX0xQODcyNyBpcyBub3Qgc2V0CisjIENPTkZJR19DSEFSR0VSX0xUMzY1MSBpcyBub3Qgc2V0CisjIENPTkZJR19DSEFSR0VSX0xUQzM2NTEgaXMgbm90IHNldAorIyBDT05GSUdfQ0hBUkdFUl9NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIQVJHRVJfTUFYODkwMyBpcyBub3Qgc2V0CisjIENPTkZJR19DSEFSR0VSX1JUOTQ1NSBpcyBub3Qgc2V0CisjIENPTkZJR19DSEFSR0VSX1NCUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSEFSR0VSX1NNQjM0NyBpcyBub3Qgc2V0CisjIENPTkZJR19DSEFSR0VSX1RXTDQwMzAgaXMgbm90IHNldAorIyBDT05GSUdfQ0hBUkdFUl9VQ1MxMDAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIQVNIX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIQVNIX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIRUNLUE9JTlRfUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAorIyBDT05GSUdfQ0hFTFNJT19UNCBpcyBub3Qgc2V0CisjIENPTkZJR19DSEVMU0lPX1Q0VkYgaXMgbm90IHNldAorIyBDT05GSUdfQ0hST01FX1BMQVRGT1JNUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfQ0lGU19BTExPV19JTlNFQ1VSRV9MRUdBQ1k9eQorIyBDT05GSUdfQ0lGU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0ZTQ0FDSEUgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19ORlNEX0VYUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQ0lGU19QT1NJWD15CisjIENPTkZJR19DSUZTX1NNQjIgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX1NUQVRTMiBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX1dFQUtfUFdfSEFTSCBpcyBub3Qgc2V0CitDT05GSUdfQ0lGU19YQVRUUj15CisjIENPTkZJR19DSU9fREFDIGlzIG5vdCBzZXQKK0NPTkZJR19DTEFOR19WRVJTSU9OPTAKKyMgQ09ORklHX0NMRUFOQ0FDSEUgaXMgbm90IHNldAorIyBDT05GSUdfQ0xLU1JDX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DTEtfSFNESyBpcyBub3Qgc2V0CisjIENPTkZJR19DTEtfUU9SSVEgaXMgbm90IHNldAorIyBDT05GSUdfQ0xPQ0tfVEhFUk1BTCBpcyBub3Qgc2V0CitDT05GSUdfQ0xTX1UzMl9NQVJLPXkKKyMgQ09ORklHX0NMU19VMzJfUEVSRiBpcyBub3Qgc2V0CisjIENPTkZJR19DTTMyMTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNMzIzMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTTMzMjMgaXMgbm90IHNldAorIyBDT05GSUdfQ00zNjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNMzY2NTEgaXMgbm90IHNldAorIyBDT05GSUdfQ01BIGlzIG5vdCBzZXQKK0NPTkZJR19DTURMSU5FPSIiCisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9GT1JDRSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0ZST01fQk9PVExPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19DT01FREkgaXMgbm90IHNldAorIyBDT05GSUdfQ09NTU9OX0NMS19DRENFNzA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTU1PTl9DTEtfQ0RDRTkyNSBpcyBub3Qgc2V0CisjIENPTkZJR19DT01NT05fQ0xLX0NTMjAwMF9DUCBpcyBub3Qgc2V0CisjIENPTkZJR19DT01NT05fQ0xLX0ZJWEVEX01NSU8gaXMgbm90IHNldAorIyBDT05GSUdfQ09NTU9OX0NMS19JUFJPQyBpcyBub3Qgc2V0CisjIENPTkZJR19DT01NT05fQ0xLX01BWDk0ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ09NTU9OX0NMS19OWFAgaXMgbm90IHNldAorIyBDT05GSUdfQ09NTU9OX0NMS19QSUMzMiBpcyBub3Qgc2V0CisjIENPTkZJR19DT01NT05fQ0xLX1BXTSBpcyBub3Qgc2V0CisjIENPTkZJR19DT01NT05fQ0xLX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19DT01NT05fQ0xLX1FDT00gaXMgbm90IHNldAorIyBDT05GSUdfQ09NTU9OX0NMS19TSTUxNCBpcyBub3Qgc2V0CisjIENPTkZJR19DT01NT05fQ0xLX1NJNTM0MSBpcyBub3Qgc2V0CisjIENPTkZJR19DT01NT05fQ0xLX1NJNTM1MSBpcyBub3Qgc2V0CisjIENPTkZJR19DT01NT05fQ0xLX1NJNTQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTU1PTl9DTEtfU0k1NzAgaXMgbm90IHNldAorIyBDT05GSUdfQ09NTU9OX0NMS19WQzUgaXMgbm90IHNldAorIyBDT05GSUdfQ09NTU9OX0NMS19WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ09NTU9OX0NMS19YR0VORSBpcyBub3Qgc2V0CisjIENPTkZJR19DT01NT05fQ0xLX1hMTlhfQ0xLV1pSRCBpcyBub3Qgc2V0CitDT05GSUdfQ09NUEFDVElPTj15CisjIENPTkZJR19DT01QQUxfTEFQVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTVBJTEVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdfS1ZNX0FNRF9TRVYgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19DT05TT0xFX0xPR0xFVkVMX0RFRkFVTFQ9NworQ09ORklHX0NPTlNPTEVfTE9HTEVWRUxfUVVJRVQ9NAorQ09ORklHX0NPTlNUUlVDVE9SUz15CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09QUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT1JESUMgaXMgbm90IHNldAorIyBDT05GSUdfQ09SRURVTVAgaXMgbm90IHNldAorIyBDT05GSUdfQ09SRVNJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPUlRJTkFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPVU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BBX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1NDSEVEVVRJTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX1NDSEVEVVRJTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0hPVFBMVUdfU1RBVEVfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lDQUNIRV9NSVNNQVRDSF9XT1JLQVJPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9JRExFX0dPVl9MQURERVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lETEVfR09WX01FTlUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lETEVfR09WX1RFTyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSURMRV9NVUxUSVBMRV9EUklWRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9JU09MQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX05PX0VGRklDSUVOVF9GRlMgaXMgbm90IHNldAorQ09ORklHX0NQVV9TV19ET01BSU5fUEFOPXkKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTX0JMT0NLREVWPXkKKyMgQ09ORklHX0NSQU1GU19NVEQgaXMgbm90IHNldAorQ09ORklHX0NSQVNITE9HPXkKKyMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzMyX0JJVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzJfU0FSV0FURT15CisjIENPTkZJR19DUkMzMl9TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMzMl9TTElDRUJZNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMzMl9TTElDRUJZOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorQ09ORklHX0NST1NTX0NPTVBJTEU9IiIKKyMgQ09ORklHX0NST1NTX01FTU9SWV9BVFRBQ0ggaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisjIENPTkZJR19DUllQVE9fODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BRElBTlRVTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQUVBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQUVHSVMxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FFR0lTMTI4TCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQUVHSVMxMjhMX0FFU05JX1NTRTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FFR0lTMTI4X0FFU05JX1NTRTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FFR0lTMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BRUdJUzI1Nl9BRVNOSV9TU0UyIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUVTPXkKKyMgQ09ORklHX0NSWVBUT19BRVNfNTg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BRVNfQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BRVNfQVJNX0JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BRVNfQVJNX0NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BRVNfQVJNNjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FFU19BUk02NF9CUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQUVTX0FSTTY0X0NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BRVNfQVJNNjRfQ0VfQkxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BRVNfQVJNNjRfQ0VfQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BRVNfQVJNNjRfTkVPTl9CTEsgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FFU19OSV9JTlRFTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQUVTX1RJIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTEFLRTJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTEFLRTJTX1g4NiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DSEFDSEEyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0hBQ0hBMjBQT0xZMTMwNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0hBQ0hBMjBfTkVPTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0hBQ0hBX01JUFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSQzMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSQzMyQ19JTlRFTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JDMzJfQVJNX0NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUkNUMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSQ1QxMERJRl9BUk1fQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSQ1QxMERJRl9BUk02NF9DRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1VSVkUyNTUxOSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1VSVkUyNTUxOV9ORU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVVJWRTI1NTE5X1g4NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVZfQVRNRUxfQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVZfQVRNRUxfQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVWX0FUTUVMX0VDQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVWX0FUTUVMX1NIQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVWX0FUTUVMX1NIQTIwNEEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFVl9BVE1FTF9UREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVZfQ0FWSVVNX1pJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVWX0NDUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVWX0NDUF9ERUJVR0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVZfQ0NSRUUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFVl9GU0xfQ0FBTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVWX0ZTTF9DQUFNX0NSWVBUT19BUElfREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVWX0hJU0lfU0VDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVZfSElTSV9aSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFVl9JTUdURUNfSEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVWX01BUlZFTExfQ0VTQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVWX01WX0NFU0EgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFVl9NWENfU0NDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVZfTVhTX0RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVWX05JVFJPWF9DTk41NVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVZfUUFUX0MzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVZfUUFUX0MzWFhYVkYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFVl9RQVRfQzYyWCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVWX1FBVF9DNjJYVkYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFVl9RQVRfREg4OTV4Q0MgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFVl9RQVRfREg4OTV4Q0NWRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVWX1FDRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVWX1M1UCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVWX1NBRkVYQ0VMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVZfU0FIQVJBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVZfU1BfUFNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVZfVEFMSVRPUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVWX1ZJUlRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RSQkdfQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19EUkJHX0hBU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RSQkdfTUVOVSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0hBSU5JViBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNSRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FU1NJViBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0hfQVJNX0NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSF9BUk02NF9DRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0hfQ0xNVUxfTklfSU5URUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hBU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19KSVRURVJFTlRST1BZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LRVlXUkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19MSUJfQUVTPXkKK0NPTkZJR19DUllQVE9fTElCX0FSQzQ9eQorIyBDT05GSUdfQ1JZUFRPX0xJQl9CTEFLRTJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MSUJfQ0hBQ0hBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MSUJfQ0hBQ0hBMjBQT0xZMTMwNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTElCX0NVUlZFMjU1MTkgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xJQl9QT0xZMTMwNSBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0xJQl9QT0xZMTMwNV9SU0laRT05CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaNEhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUFOQUdFUl9ESVNBQkxFX1RFU1RTPXkKKyMgQ09ORklHX0NSWVBUT19NQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01PUlVTMTI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTU9SVVMxMjgwX0FWWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01PUlVTMTI4MF9TU0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NT1JVUzY0MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTU9SVVM2NDBfU1NFMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTkhQT0xZMTMwNV9ORU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19PRkIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ09NUDIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19QQ1JZUFQ9eQorIyBDT05GSUdfQ1JZUFRPX1BPTFkxMzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QT0xZMTMwNV9BUk0gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BPTFkxMzA1X01JUFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BPTFkxMzA1X05FT04gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19SU0EgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjBfNTg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMV9BUk0gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTFfQVJNX0NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExX0FSTV9ORU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExX0FSTTY0X0NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1Nl9BUk0gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1Nl9BUk02NCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMl9BUk1fQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTJfQVJNNjRfQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTNfQVJNNjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyX0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyX0FSTTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTJfQVJNNjRfQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NJTUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NNMyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU00zX0FSTTY0X0NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TTTQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NNNF9BUk02NF9DRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU1BFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TVFJFRUJPRyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfNTg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVVNFUl9BUElfQUVBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVVNFUl9BUElfSEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVVNFUl9BUElfUk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19VU0VSX0FQSV9TS0NJUEhFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFhIQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aU1REIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NTNTUzNV9NRkdQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUzg5eDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19DVzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1hMX0FGVV9EUklWRVJfT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NYTF9CQVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NYTF9FRUggaXMgbm90IHNldAorIyBDT05GSUdfQ1hMX0tFUk5FTF9BUEkgaXMgbm90IHNldAorIyBDT05GSUdfQ1hMX0xJQiBpcyBub3Qgc2V0CisjIENPTkZJR19DWVBSRVNTX0ZJUk1XQVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBMzExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBWCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorIyBDT05GSUdfRERSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0FMSUdOX1JPREFUQSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19BVE9NSUNfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0VGSSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSElHSE1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPX0JURiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPX0RXQVJGNCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfSU5GT19SRURVQ0VEPXkKKyMgQ09ORklHX0RFQlVHX0lORk9fU1BMSVQgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1RfUkVMRUFTRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xMX1VBUlRfODI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MTF9VQVJUX1BMMDFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tERVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OWF9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BBR0VfUkVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BFUkZfVVNFX1ZNQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEVSX0NQVV9NQVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BJTkNUUkwgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUElfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QUkVFTVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JPREFUQV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JTRVEgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SV1NFTVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0VDVElPTl9NSVNNQVRDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRU1JSE9TVElORyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RSSUNUX1VTRVJfQ09QWV9DSEVDS1MgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVEVTVF9EUklWRVJfUkVNT1ZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1RJTUVLRUVQSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1VBUlRfODI1MF9QQUxNQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19VQVJUX0JDTTYzWFggaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dRX0ZPUkNFX1JSX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XV19NVVRFWF9TTE9XUEFUSCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19aQk9PVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfREVBRExJTkU9eQorQ09ORklHX0RFRkFVTFRfSE9TVE5BTUU9Iihub25lKSIKK0NPTkZJR19ERUZBVUxUX0hVTkdfVEFTS19USU1FT1VUPTEyMAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iZGVhZGxpbmUiCitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1JFTk8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKyMgQ09ORklHX0RFRkVSUkVEX1NUUlVDVF9QQUdFX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVMTF9MQVBUT1AgaXMgbm90IHNldAorIyBDT05GSUdfREVMTF9SQlROIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFTExfU01CSU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFTExfU01PODgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVBSRUNBVEVEX1BBUkFNX1NUUlVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVktNRU0gaXMgbm90IHNldAorIyBDT05GSUdfREVWTUVNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVWVE1QRlNfTU9VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVWX0RBWCBpcyBub3Qgc2V0CisjIENPTkZJR19ER0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RHTkMgaXMgbm90IHNldAorIyBDT05GSUdfREhUMTEgaXMgbm90IHNldAorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19ESVNQTEFZX0NPTk5FQ1RPUl9BTkFMT0dfVFYgaXMgbm90IHNldAorIyBDT05GSUdfRElTUExBWV9DT05ORUNUT1JfRFZJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RJU1BMQVlfQ09OTkVDVE9SX0hETUkgaXMgbm90IHNldAorIyBDT05GSUdfRElTUExBWV9FTkNPREVSX1RGUDQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19ESVNQTEFZX0VOQ09ERVJfVFBEMTJTMDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RJU1BMQVlfUEFORUxfRFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RJU1BMQVlfUEFORUxfTEdQSElMSVBTX0xCMDM1UTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RJU1BMQVlfUEFORUxfVFBPX1REMDI4VFRFQzEgaXMgbm90IHNldAorIyBDT05GSUdfRElTUExBWV9QQU5FTF9UUE9fVEQwNDNNVEVBMSBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRE1BQlVGX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BUkQwNiBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFSRDA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQVJEMTAgaXMgbm90IHNldAorIyBDT05GSUdfRE1BU0NDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQVRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRE1BX0RFQ0xBUkVfQ09IRVJFTlQ9eQorIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfRkVOQ0VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0paNDc4MCBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfTk9PUF9PUFMgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVIgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX1ZJUlRfT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX0NBQ0hFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX0NMT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX0RVU1QgaXMgbm90IHNldAorIyBDT05GSUdfRE1fRVJBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX0ZMQUtFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ETV9JTlRFR1JJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRE1fTE9HX1VTRVJTUEFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETV9MT0dfV1JJVEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX01RX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfRE1fTVVMVElQQVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfRE1fU1dJVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX1RISU5fUFJPVklTSU9OSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX1VFVkVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ETV9VTlNUUklQRUQgaXMgbm90IHNldAorIyBDT05GSUdfRE1fVkVSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX1dSSVRFQ0FDSEUgaXMgbm90IHNldAorIyBDT05GSUdfRE1fWkVSTyBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfRE5TX1JFU09MVkVSIGlzIG5vdCBzZXQKK0NPTkZJR19ET1VCTEVGQVVMVD15CisjIENPTkZJR19EUDgzODIyX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EUDgzODQ4X1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EUDgzODY3X1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EUDgzVEM4MTFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RQT1RfREFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RQUzMxMCBpcyBub3Qgc2V0CitDT05GSUdfRFFMPXkKKyMgQ09ORklHX0RSQUdPTlJJU0VfRkYgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9BTURHUFUgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX0FNREdQVV9DSUsgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX0FNREdQVV9HQVJUX0RFQlVHRlMgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX0FNREdQVV9TSSBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fQU1ER1BVX1VTRVJQVFIgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX0FNRF9BQ1AgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX0FNRF9EQ19EQ04yXzAgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX0FOQUxPR0lYX0FOWDc4WFggaXMgbm90IHNldAorIyBDT05GSUdfRFJNX0FSQ1BHVSBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fQVJNQURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9BU1QgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX0JPQ0hTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9DRE5TX0RTSSBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fQ0lSUlVTX1FFTVUgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX0RFQlVHX01NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9ERUJVR19TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fRFBfQVVYX0NIQVJERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX0RQX0NFQyBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fRFVNQl9WR0FfREFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9EV19IRE1JX0NFQyBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fRVROQVZJViBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fRVhZTk9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9GQkRFVl9FTVVMQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRFJNX0ZCREVWX0xFQUtfUEhZU19TTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9GU0xfRENVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9HTTEyVTMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fR01BNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9IRExDRCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fSElTSV9ISUJNQyBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fSElTSV9LSVJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fSTJDX0FEVjc1MTEgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX0kyQ19DSDcwMDYgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX0kyQ19OWFBfVERBOTk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fSTJDX05YUF9UREE5OThYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9JMkNfU0lMMTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9JOTE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9LT01FREEgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fTElCX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fTElNQSBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fTE9BRF9FRElEX0ZJUk1XQVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9MVkRTX0VOQ09ERVIgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX01BTElfRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fTUNERSBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fTUVHQUNISVBTX1NURFBYWFhYX0dFX0I4NTBWM19GVyBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fTUdBRzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fTVhTRkIgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX05PVVZFQVUgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX05YUF9QVE4zNDYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9QQU5FTF9BUk1fVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9QQU5FTF9GRUlZQU5HX0ZZMDcwMjRESTI2QTMwRCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fUEFORUxfSUxJVEVLX0lMOTMyMiBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fUEFORUxfSUxJVEVLX0lMSTk4ODFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9QQU5FTF9JTk5PTFVYX1AwNzlaQ0EgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX1BBTkVMX0pESV9MVDA3ME1FMDUwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX1BBTkVMX0tJTkdESVNQTEFZX0tEMDk3RDA0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9QQU5FTF9MR19MQjAzNVEwMiBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fUEFORUxfTEdfTEc0NTczIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9QQU5FTF9MVkRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9QQU5FTF9ORUNfTkw4MDQ4SEwxMSBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fUEFORUxfTk9WQVRFS19OVDM5MDE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9QQU5FTF9PTElNRVhfTENEX09MSU5VWElOTyBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fUEFORUxfT1JJU0VURUNIX09UTTgwMDlBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9QQU5FTF9PU0RfT1NEMTAxVDI1ODdfNTNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fUEFORUxfUEFOQVNPTklDX1ZWWDEwRjAzNE4wMCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fUEFORUxfUkFTUEJFUlJZUElfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfRFJNX1BBTkVMX1JBWURJVU1fUk02NzE5MSBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fUEFORUxfUkFZRElVTV9STTY4MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9QQU5FTF9ST0NLVEVDSF9KSDA1N04wMDkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fUEFORUxfUk9OQk9fUkIwNzBEMzAgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX1BBTkVMX1NBTVNVTkdfTEQ5MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9QQU5FTF9TQU1TVU5HX1M2RDE2RDAgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX1BBTkVMX1NBTVNVTkdfUzZFM0hBMiBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fUEFORUxfU0FNU1VOR19TNkU2M0owWDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9QQU5FTF9TQU1TVU5HX1M2RTYzTTAgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX1BBTkVMX1NBTVNVTkdfUzZFOEFBMCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fUEFORUxfU0VJS09fNDNXVkYxRyBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fUEFORUxfU0hBUlBfTFExMDFSMVNYMDEgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX1BBTkVMX1NIQVJQX0xTMDM3VjdEVzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9QQU5FTF9TSEFSUF9MUzA0M1QxTEUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fUEFORUxfU0lNUExFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9QQU5FTF9TSVRST05JWF9TVDc3MDEgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX1BBTkVMX1NJVFJPTklYX1NUNzc4OVYgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX1BBTkVMX1NPTllfQUNYNTY1QUtNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9QQU5FTF9UUE9fVEQwMjhUVEVDMSBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fUEFORUxfVFBPX1REMDQzTVRFQTEgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX1BBTkVMX1RQT19UUEcxMTAgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX1BBTkVMX1RSVUxZX05UMzU1OTdfV1FYR0EgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX1BBTkZST1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9QQVJBREVfUFM4NjIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9QTDExMSBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fUVhMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9SQURFT04gaXMgbm90IHNldAorIyBDT05GSUdfRFJNX1JBREVPTl9VU0VSUFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9SQ0FSX0RXX0hETUkgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX1JDQVJfTFZEUyBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fU0lJOTAyWCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fU0lJOTIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fU0lMX1NJSTg2MjAgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX1NUSSBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fU1RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9TVU40SSBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fVEhJTkVfVEhDNjNMVkQxMDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9USUxDREMgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX1RJTllEUk0gaXMgbm90IHNldAorIyBDT05GSUdfRFJNX1RJX1NONjVEU0k4NiBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fVElfVEZQNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9UT1NISUJBX1RDMzU4NzY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9UT1NISUJBX1RDMzU4NzY3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9VREwgaXMgbm90IHNldAorIyBDT05GSUdfRFJNX1ZCT1hWSURFTyBpcyBub3Qgc2V0CisjIENPTkZJR19EUk1fVkM0X0hETUlfQ0VDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9WR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9WSVJUSU9fR1BVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9WS01TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTV9WTVdHRlggaXMgbm90IHNldAorIyBDT05GSUdfRFJNX1hFTiBpcyBub3Qgc2V0CisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfRFMxODAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RTNDQyNCBpcyBub3Qgc2V0CisjIENPTkZJR19EU1RfQ0FDSEUgaXMgbm90IHNldAorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRV9DT0xVTU5TPTgwCitDT05GSUdfRFVNTVlfQ09OU09MRV9ST1dTPTI1CisjIENPTkZJR19EVU1NWV9JUlEgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0FVODUyMl9WNEwgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0RVTU1ZX0ZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UVU5FUl9ESUIwMDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9UVU5FUl9ESUIwMDkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQ19YTEdNQUMgaXMgbm90IHNldAorIyBDT05GSUdfRFdNQUNfRFdDX1FPU19FVEggaXMgbm90IHNldAorIyBDT05GSUdfRFdNQUNfSVBRODA2WCBpcyBub3Qgc2V0CisjIENPTkZJR19EV01BQ19MUEMxOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXTUFDX01FU09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXTUFDX1JPQ0tDSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXTUFDX1NPQ0ZQR0EgaXMgbm90IHNldAorIyBDT05GSUdfRFdNQUNfU1RJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXX0FYSV9ETUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXX0RNQUMgaXMgbm90IHNldAorIyBDT05GSUdfRFdfRE1BQ19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfRFdfRURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19EV19FRE1BX1BDSUUgaXMgbm90IHNldAorIyBDT05GSUdfRFdfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEVfSFdUUyBpcyBub3Qgc2V0CisjIENPTkZJR19FQVJMWV9QUklOVEtfODI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19FQVJMWV9QUklOVEtfVVNCX1hEQkMgaXMgbm90IHNldAorIyBDT05GSUdfRUJDX0MzODRfV0RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDSE8gaXMgbm90IHNldAorIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorIyBDT05GSUdfRUVFUENfTEFQVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNYWDQ2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9ESUdTWV9NVENfQ0ZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9FRTEwMDQgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0lEVF84OUhQRVNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfRUZJIGlzIG5vdCBzZXQKK0NPTkZJR19FRklfUEFSVElUSU9OPXkKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRUxGQ09SRT15CisjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTUFDX1JPQ0tDSElQIGlzIG5vdCBzZXQKK0NPTkZJR19FTUJFRERFRD15CisjIENPTkZJR19FTV9USU1FUl9TVEkgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorIyBDT05GSUdfRU5BX0VUSEVSTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNSWVBURURfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNYMjRKNjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VORVJHWV9NT0RFTCBpcyBub3Qgc2V0CisjIENPTkZJR19FTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOVkVMT1BFX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VQQVBSX1BBUkFWSVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAorQ09ORklHX0VQT0xMPXkKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FUk9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FVDEzMVggaXMgbm90IHNldAorQ09ORklHX0VUSEVSTkVUPXkKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKK0NPTkZJR19FVkVOVEZEPXkKKyMgQ09ORklHX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19FWEZBVF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhQRVJUPXkKK0NPTkZJR19FWFBPUlRGUz15CisjIENPTkZJR19FWFBPUlRGU19CTE9DS19PUFMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRVhUMl9GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9FTkNSWVBUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GU19TRUNVUklUWSBpcyBub3Qgc2V0CitDT05GSUdfRVhUNF9VU0VfRk9SX0VYVDI9eQorIyBDT05GSUdfRVhUQ09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVENPTl9BRENfSkFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFRDT05fQVJJWk9OQSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFRDT05fQVhQMjg4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVENPTl9GU0E5NDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVENPTl9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVENPTl9JTlRFTF9JTlQzNDk2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVENPTl9NQVgzMzU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVENPTl9QVE41MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVENPTl9RQ09NX1NQTUlfTUlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFRDT05fUlQ4OTczQSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFRDT05fU001NTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVENPTl9VU0JfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKK0NPTkZJR19FWFRSQV9UQVJHRVRTPSIiCisjIENPTkZJR19FWFlOT1NfQURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYWU5PU19WSURFTyBpcyBub3Qgc2V0CisjIENPTkZJR19FWkNISVBfTlBTX01BTkFHRU1FTlRfRU5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CisjIENPTkZJR19GMkZTX0NIRUNLX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0YyRlNfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0YyRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRjJGU19GU19FTkNSWVBUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0YyRlNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0YyRlNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorQ09ORklHX0YyRlNfRlNfWEFUVFI9eQorIyBDT05GSUdfRjJGU19JT19UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfRjJGU19TVEFUX0ZTPXkKKyMgQ09ORklHX0ZBSUxPVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRkFOT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfRkFOT1RJRllfQUNDRVNTX1BFUk1JU1NJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX0ZBVF9ERUZBVUxUX1VURjggaXMgbm90IHNldAorIyBDT05GSUdfRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FSQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BUksgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVJNQ0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BU0lMSUFOVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BVFkgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FVT19LMTkwWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQklHX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT1RIX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NBUk1JTkUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NGQl9GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DRkJfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NZQkVSMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EQThYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9HRU9ERSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9HT0xERklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9IR0EgaXMgbm90IHNldAorIyBDT05GSUdfRkJfSTc0MCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9JQk1fR1hUNDUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9JTVNUVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9JTVggaXMgbm90IHNldAorIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9MRTgwNTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0xJVFRMRV9FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFUUk9YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NWFMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTjQxMSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0CitDT05GSUdfRkJfTk9USUZZPXkKKyMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9PRiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9PTUFQMiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9PUEVOQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUE0yIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QUzMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1JBREVPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TSU1QTEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NNNzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NNNzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NNU0NVRlggaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1NEMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9URlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVEZUX0FHTTEyNjRLX0ZMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RGVF9CRDY2MzQ3NCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9URlRfRkJURlRfREVWSUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RGVF9IWDgzNDBCTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9URlRfSFg4MzQ3RCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9URlRfSFg4MzUzRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9URlRfSFg4MzU3RCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9URlRfSUxJOTE2MyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9URlRfSUxJOTMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9URlRfSUxJOTMyNSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9URlRfSUxJOTM0MCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9URlRfSUxJOTM0MSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9URlRfSUxJOTQ4MSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9URlRfSUxJOTQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9URlRfUENEODU0NCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9URlRfUkE4ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RGVF9TNkQwMkExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RGVF9TNkQxMTIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RGVF9TSDExMDYgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVEZUX1NTRDEyODkgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVEZUX1NTRDEzMDUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVEZUX1NTRDEzMDYgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVEZUX1NTRDEzMjUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVEZUX1NTRDEzMzEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVEZUX1NTRDEzNTEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVEZUX1NUNzczNVIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVEZUX1NUNzc4OVYgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVEZUX1RJTllMQ0QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVEZUX1RMUzgyMDQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVEZUX1VDMTYxMSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9URlRfVUMxNzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RGVF9VUEQxNjE3MDQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVEZUX1dBVFRFUk9UVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1VETCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9VVkVTQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WR0ExNiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WT09ET08xIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZUODYyMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9YR0kgaXMgbm90IHNldAorIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQ09FX0ZOSUMgaXMgbm90IHNldAorIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFMTlggaXMgbm90IHNldAorIyBDT05GSUdfRkVOQ0VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRkhBTkRMRSBpcyBub3Qgc2V0CitDT05GSUdfRklCX1JVTEVTPXkKKyMgQ09ORklHX0ZJRUxEQlVTX0RFViBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKKyMgQ09ORklHX0ZJTkRfQklUX0JFTkNITUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVJFV0lSRV9OT1NZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJUkVXSVJFX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19GSVJNV0FSRV9NRU1NQVAgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfRk0xMEsgaXMgbm90IHNldAorIyBDT05GSUdfRk1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfVEVSMTZ4MzIgaXMgbm90IHNldAorIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCitDT05GSUdfRk9SVElGWV9TT1VSQ0U9eQorIyBDT05GSUdfRlBHQSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVGRVJSRURfVEFLRU9WRVIgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVfUE9JTlRFUiBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZST05UU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTSSBpcyBub3Qgc2V0CisjIENPTkZJR19GU0xfRURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19GU0xfRVJSQVRVTV9BMDA4NTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTTF9NQ19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfRlNMX1BRX01ESU8gaXMgbm90IHNldAorIyBDT05GSUdfRlNMX1FETUEgaXMgbm90IHNldAorIyBDT05GSUdfRlNMX1hHTUFDX01ESU8gaXMgbm90IHNldAorQ09ORklHX0ZTTk9USUZZPXkKKyMgQ09ORklHX0ZTX0RBWCBpcyBub3Qgc2V0CisjIENPTkZJR19GU19FTkNSWVBUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19GU19WRVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRlRHTUFDMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19GVE1BQzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NUQVJUVVBfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRlRXRFQwMTBfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfRlVKSVRTVV9FUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVUpJVFNVX0xBUFRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19GVUpJVFNVX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfRlVURVg9eQorQ09ORklHX0ZVVEVYX1BJPXkKKyMgQ09ORklHX0ZXX0NGR19TWVNGUyBpcyBub3Qgc2V0CitDT05GSUdfRldfTE9BREVSPXkKKyMgQ09ORklHX0ZXX0xPQURFUl9DT01QUkVTUyBpcyBub3Qgc2V0CitDT05GSUdfRldfTE9BREVSX1VTRVJfSEVMUEVSPXkKK0NPTkZJR19GV19MT0FERVJfVVNFUl9IRUxQRVJfRkFMTEJBQ0s9eQorIyBDT05GSUdfRlhBUzIxMDAyQyBpcyBub3Qgc2V0CisjIENPTkZJR19GWE9TODcwMF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfRlhPUzg3MDBfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19HQUNUX1BST0I9eQorIyBDT05GSUdfR0FER0VUX1VBQzEgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfR0FURVdPUktTX0dXMTYwODMgaXMgbm90IHNldAorIyBDT05GSUdfR0NDX1BMVUdJTlMgaXMgbm90IHNldAorIyBDT05GSUdfR0NPViBpcyBub3Qgc2V0CisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19HREJfU0NSSVBUUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU1JTklfRVRIRVJORVQgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19BRENfQkFUVEVSWSBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0FEQ19USEVSTUFMIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CisjIENPTkZJR19HRU5FUklDX0NQVV9ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorIyBDT05GSUdfR0VORVJJQ19JUlFfREVCVUdGUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0dFTkVSSUNfTkVUX1VUSUxTPXkKKyMgQ09ORklHX0dFTkVSSUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVWRSBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5XUUUgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HSUdBU0VUX0NBUEkgaXMgbm90IHNldAorIyBDT05GSUdfR0lHQVNFVF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19HSUdBU0VUX0RVTU1ZTEwgaXMgbm90IHNldAorIyBDT05GSUdfR0xPQl9TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19HTlNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dPTERGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dPT0dMRV9GSVJNV0FSRSBpcyBub3Qgc2V0CisjIENPTkZJR19HUDJBUDAyMEEwMEYgaXMgbm90IHNldAorIyBDT05GSUdfR1BEX1BPQ0tFVF9GQU4gaXMgbm90IHNldAorIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CitDT05GSUdfR1BJT0xJQl9GQVNUUEFUSF9MSU1JVD01MTIKKyMgQ09ORklHX0dQSU9fMTA0X0RJT180OEUgaXMgbm90IHNldAorIyBDT05GSUdfR1BJT18xMDRfSURJT18xNiBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPXzEwNF9JRElfNDggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT183NFgxNjQgaXMgbm90IHNldAorIyBDT05GSUdfR1BJT183NFhYX01NSU8gaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19BRE5QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fQURQNTU4OCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0FMVEVSQSBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19BTURQVCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0FNRF9GQ0ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19CQ01fS09OQSBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fQ0FERU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0NTNTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0RXQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fRU0gaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19FWEFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fRjcxODhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fRlRHUElPMDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fR0VORVJJQ19QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0dQSU9fTU0gaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19HUkdQSU8gaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19HV19QTEQgaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19ITFdEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fSUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xZTlhQT0lOVCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01BWDMxOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUFYNzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUI4NlM3WCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DMzM4ODAgaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01MX0lPSCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01PQ0tVUCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01QQzhYWFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDSCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDSUVfSURJT18yNCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDSV9JRElPXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUElTT1NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUEwwNjEgaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19SQ0FSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUkRDMzIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1NBTUE1RDJfUElPQlUgaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19TQ0ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19TQ0gzMTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fU1gxNTBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fU1lTQ09OIGlzIG5vdCBzZXQKK0NPTkZJR19HUElPX1NZU0ZTPXkKKyMgQ09ORklHX0dQSU9fVFBJQzI4MTAgaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19UUzQ5MDAgaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19UUzU1MDAgaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19WWDg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fV0lOQk9ORCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1dTMTZDNDggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19YR0VORSBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1hJTElOWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1hSQTE0MDMgaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19aRVZJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1pYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19HUkVZQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dTX0ZQR0FCT09UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dUUCBpcyBub3Qgc2V0CisjIENPTkZJR19HVVBfQkVOQ0hNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dWRSBpcyBub3Qgc2V0CisjIENPTkZJR19IQUJBTkFfQUkgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorQ09ORklHX0hBUkRFTkVEX1VTRVJDT1BZPXkKKyMgQ09ORklHX0hBUkRFTkVEX1VTRVJDT1BZX0ZBTExCQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBUkRFTkVEX1VTRVJDT1BZX1BBR0VTUEFOIGlzIG5vdCBzZXQKK0NPTkZJR19IQVJERU5fRUwyX1ZFQ1RPUlM9eQorIyBDT05GSUdfSEFSRExPQ0tVUF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9IQVJERU5FRF9VU0VSQ09QWT15CisjIENPTkZJR19IQVZFX0FSQ0hfSEFTSCBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX01NQVBfUk5EX0JJVFM9eQorIyBDT05GSUdfSEFWRV9BUkNIX1ZNQVBfU1RBQ0sgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9XSVRISU5fU1RBQ0tfRlJBTUVTPXkKKyMgQ09ORklHX0hBVkVfQVJNX0FSQ0hfVElNRVIgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRVhJVF9USFJFQUQ9eQorQ09ORklHX0hBVkVfR0NDX1BMVUdJTlM9eQorQ09ORklHX0hBVkVfSEFSREVORURfVVNFUkNPUFlfQUxMT0NBVE9SPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfQ0FUPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWjQ9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15CitDT05GSUdfSEFWRV9LRVJORUxfWFo9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX05NST15CitDT05GSUdfSEFWRV9TVEFDS1BST1RFQ1RPUj15CisjIENPTkZJR19IQ0FMTF9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19IREMxMDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hETEMgaXMgbm90IHNldAorIyBDT05GSUdfSERMQ19DSVNDTyBpcyBub3Qgc2V0CisjIENPTkZJR19IRExDX0ZSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hETENfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hETENfUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hETENfUkFXX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19IRE1JX0xQRV9BVURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19IRFFfTUFTVEVSX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0lOU1RBTEwgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfSEVSTUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSEk4NDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0E0VEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQUNDVVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9BQ1JVWCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQUNSVVhfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0FMUFMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0FQUExFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9BUFBMRUlSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9BU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9BVVJFQUwgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0JBVFRFUllfU1RSRU5HVEggaXMgbm90IHNldAorIyBDT05GSUdfSElEX0JFTEtJTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQkVUT1BfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0JJR0JFTl9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ0hFUlJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DSElDT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DTUVESUEgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NPUlNBSVIgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NPVUdBUiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfQ1AyMTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9DUkVBVElWRV9TQjA1NDAgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0RSQUdPTlJJU0UgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0VMRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9FTVNfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0VaS0VZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HRU1CSVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HRlJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HT09HTEVfSEFNTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0dUNjgzUiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0hPTFRFSyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfSUNBREUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0lURSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfSkFCUkEgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tFWVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0xDUE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTEVOT1ZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9MT0dJVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTE9HSVRFQ0hfREogaXMgbm90IHNldAorIyBDT05GSUdfSElEX0xPR0lURUNIX0hJRFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NQUNBTExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NQUdJQ01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NQUxUUk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NQVlGTEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTUlDUk9TT0ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9NT05URVJFWSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTVVMVElUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfTlRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfT1JURUsgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BBTlRIRVJMT1JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QRU5NT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUEVUQUxZTlggaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BJQ09MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUExBTlRST05JQ1MgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BSSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUFJPRElLRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9SRURSQUdPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUkVUUk9ERSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUk1JIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9ST0NDQVQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NBSVRFSyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU0FNU1VORyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU0VOU09SX0hVQiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TUEVFRExJTksgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NURUFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVEVFTFNFUklFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VOUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVEhJTkdNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RJVk8gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1UyRlpFUk8gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1VDTE9HSUMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1VEUkFXX1BTMyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVklFV1NPTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9XQUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfV0FMVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9XSUlNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9YSU5NTyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1pZREFDUk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CisjIENPTkZJR19ISU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ISVAwNF9FVEggaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfSElTSUxJQ09OX0VSUkFUVU1fMTYxMDEwMTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJU0lMSUNPTl9FUlJBVFVNXzE2MTYwMDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19ISVNJX0ZFTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJWDVIRDJfR01BQyBpcyBub3Qgc2V0CisjIENPTkZJR19ITUM2MzUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hOUyBpcyBub3Qgc2V0CisjIENPTkZJR19ITlMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hOU19EU0FGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hOU19FTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVBfQ1MgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVBfUExYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfQ1BVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMDMgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFAyMDZDIGlzIG5vdCBzZXQKK0NPTkZJR19IUEVUX01NQVBfREVGQVVMVD15CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CisjIENPTkZJR19IUF9XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19IU0FfQU1EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hTSSBpcyBub3Qgc2V0CisjIENPTkZJR19IU1IgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19JMkNQTEQgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19IVFMyMjEgaXMgbm90IHNldAorIyBDT05GSUdfSFRVMjEgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19IVkNfRENDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTEFUX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXU1BJTkxPQ0tfT01BUCBpcyBub3Qgc2V0CitDT05GSUdfSFdfUEVSRl9FVkVOVFM9eQorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTV9BTUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTV9DQVZJVU0gaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NX0VYWU5PUyBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET01fR0VPREUgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NX0lOVEVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTV9JUFJPQ19STkcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NX09NQVAzX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET01fUFBDNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET01fVFBNPXkKKyMgQ09ORklHX0hXX1JBTkRPTV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NX1ZJUlRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19IWDcxMSBpcyBub3Qgc2V0CisjIENPTkZJR19IWVBFUlYgaXMgbm90IHNldAorIyBDT05GSUdfSFlQRVJWX1RTQ1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfSFlTRE4gaXMgbm90IHNldAorIyBDT05GSUdfSFogaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAyNCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAorIyBDT05GSUdfSFpfMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTYgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl9QRVJJT0RJQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQVJCX0dQSU9fQ0hBTExFTkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BVTE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0JDTTI4MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0JDTV9JUFJPQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQ0FERU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQ0JVU19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVNVVhfUElOQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVTSUdOV0FSRV9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFU0lHTldBUkVfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RJT0xBTl9VMkMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0VHMjBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19FTEVLVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19FTUVWMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfR1BJT19GQVVMVF9JTkpFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSEVMUEVSX0FVVE8gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0hJRCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSUJNX0lJQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSU1HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JU01UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19KWjQ3ODAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX01MWENQTEQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX01QQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTVVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19NVVhfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTVVYX0dQTVVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19NVVhfTFRDNDMwNiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTVVYX01MWENQTEQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX01VWF9QQ0E5NTQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19NVVhfUENBOTU0eCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTVVYX1BJTkNUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX01VWF9SRUcgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX01WNjRYWFggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05PTUFESUsgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05WSURJQV9HUFUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NURU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQ0FfSVNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QWEFfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19SQ0FSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19SSzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ST0JPVEZVWlpfT1NJRiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0NNSSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0hfTU9CSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TTEFWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0xBVkVfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TTUJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RIVU5ERVJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfWElMSU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kzQyBpcyBub3Qgc2V0CisjIENPTkZJR19JNDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0k0MEVWRiBpcyBub3Qgc2V0CisjIENPTkZJR19JNjMwMEVTQl9XRFQgaXMgbm90IHNldAorIyBDT05GSUdfSTgyMDkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0k4MjM2NSBpcyBub3Qgc2V0CisjIENPTkZJR19JQVFDT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9BU00gaXMgbm90IHNldAorIyBDT05GSUdfSUJNX0VNQUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERUFQQURfTEFQVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lERV9HRCBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfUFJPQ19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JRExFX1BBR0VfVFJBQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0X0FERjcyNDIgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NF9BVFVTQiBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0X0NBODIxMCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0X0hXU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTRfTUNSMjBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lGQiBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAorIyBDT05GSUdfSUdDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JSU9fQlVGRkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lJT19CVUZGRVJfQ0IgaXMgbm90IHNldAorIyBDT05GSUdfSUlPX0JVRkZFUl9IV19DT05TVU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19JSU9fQ09ORklHRlMgaXMgbm90IHNldAorQ09ORklHX0lJT19DT05TVU1FUlNfUEVSX1RSSUdHRVI9MgorIyBDT05GSUdfSUlPX0NST1NfRUNfQUNDRUxfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lJT19JTlRFUlJVUFRfVFJJR0dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JSU9fTVVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lJT19QRVJJT0RJQ19SVENfVFJJR0dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JSU9fUkVTQ0FMRSBpcyBub3Qgc2V0CisjIENPTkZJR19JSU9fU0lNUExFX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lJT19TU1BfU0VOU09SSFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lJT19TVF9BQ0NFTF8zQVhJUyBpcyBub3Qgc2V0CisjIENPTkZJR19JSU9fU1RfR1lST18zQVhJUyBpcyBub3Qgc2V0CisjIENPTkZJR19JSU9fU1RfTFNNNkRTWCBpcyBub3Qgc2V0CisjIENPTkZJR19JSU9fU1RfTUFHTl8zQVhJUyBpcyBub3Qgc2V0CisjIENPTkZJR19JSU9fU1RfUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSUlPX1NXX0RFVklDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JSU9fU1dfVFJJR0dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JSU9fU1lTRlNfVFJJR0dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JSU9fVFJJR0dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJR19QUk9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTUEgaXMgbm90IHNldAorIyBDT05GSUdfSU1BR0VfQ01ETElORV9IQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lNR1BEQ19XRFQgaXMgbm90IHNldAorIyBDT05GSUdfSU1HX01EQ19ETUEgaXMgbm90IHNldAorIyBDT05GSUdfSU1YN0RfQURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lNWF9JUFVWM19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lNWF9USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOQTJYWF9BREMgaXMgbm90IHNldAorIyBDT05GSUdfSU5ESVJFQ1RfUElPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UQ1BfRElBRyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1VEUF9ESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5HRU5JQ19BREMgaXMgbm90IHNldAorIyBDT05GSUdfSU5HRU5JQ19DR1VfSlo0NzI1QiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkdFTklDX0NHVV9KWjQ3NDAgaXMgbm90IHNldAorIyBDT05GSUdfSU5HRU5JQ19DR1VfSlo0NzcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOR0VOSUNfQ0dVX0paNDc4MCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkdFTklDX1RDVV9DTEsgaXMgbm90IHNldAorIyBDT05GSUdfSU5HRU5JQ19UQ1VfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOR0VOSUNfVElNRVIgaXMgbm90IHNldAorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorIyBDT05GSUdfSU5JVF9PTl9BTExPQ19ERUZBVUxUX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOSVRfT05fRlJFRV9ERUZBVUxUX09OIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUX1NUQUNLX05PTkU9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9UUllMT0NLIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9BRDcxNFggaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfQURYTDM0WCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9BUEFORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URTIgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfQVRMQVNfQlROUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9BVE1FTF9DQVBUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9BWFAyMFhfUEVLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0JNQTE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9DTTEwOSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9DTUEzMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0RSVjI2MFhfSEFQVElDUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9EUlYyNjY1X0hBUFRJQ1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRFJWMjY2N19IQVBUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0UzWDBfQlVUVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfR1AyQSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9HUElPX0JFRVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9HUElPX0RFQ09ERVIgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfR1BJT19ST1RBUllfRU5DT0RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9HUElPX1RJTFRfUE9MTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0dQSU9fVklCUkEgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSURFQVBBRF9TTElERUJBUiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9JTVNfUENVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9LWFRKOSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01BVFJJWEtNQVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUFYODk5N19IQVBUSUMgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01JU0M9eQorIyBDT05GSUdfSU5QVVRfTU1BODQ1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NUFUzMDUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01TTV9WSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QQUxNQVNfUFdSQlVUVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUENTUEtSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9XRVJNQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BXTV9CRUVQRVIgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUFdNX1ZJQlJBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1JFR1VMQVRPUl9IQVBUSUMgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU09DX0JVVFRPTl9BUlJBWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UUFM2NTIxOF9QV1JCVVRUT04gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVFdMNDAzMF9QV1JCVVRUT04gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVFdMNDAzMF9WSUJSQSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UV0w2MDQwX1ZJQlJBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1VJTlBVVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9XSVNUUk9OX0JUTlMgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfWUVBTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlQzNDBYX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5URUdSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOVEVHUklUWV9BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlRFR1JJVFlfU0lHTkFUVVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOVEVMX0FUT01JU1AyX1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOVEVMX0NIVF9JTlQzM0ZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOVEVMX0hJRF9FVkVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlRFTF9JRExFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOVEVMX0lETUE2NCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlRFTF9JT0FURE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOVEVMX0lTSF9ISUQgaXMgbm90IHNldAorIyBDT05GSUdfSU5URUxfTUVJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOVEVMX01FSV9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlRFTF9NRUlfVFhFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOVEVMX01JQ19DQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOVEVMX01JQ19IT1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOVEVMX01JRF9QVEkgaXMgbm90IHNldAorIyBDT05GSUdfSU5URUxfT0FLVFJBSUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5URUxfUE1DX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5URUxfUFVOSVRfSVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOVEVMX1JTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlRFTF9TTUFSVENPTk5FQ1QgaXMgbm90IHNldAorIyBDT05GSUdfSU5URUxfU09DX1BNSUMgaXMgbm90IHNldAorIyBDT05GSUdfSU5URUxfU09DX1BNSUNfQ0hURENfVEkgaXMgbm90IHNldAorIyBDT05GSUdfSU5URUxfU09DX1BNSUNfQ0hUV0MgaXMgbm90IHNldAorIyBDT05GSUdfSU5URUxfVEggaXMgbm90IHNldAorIyBDT05GSUdfSU5URUxfVkJUTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlRFTF9YV0FZX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlRFUkNPTk5FQ1QgaXMgbm90IHNldAorIyBDT05GSUdfSU5URVJWQUxfVFJFRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOVl9NUFU2MDUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlZfTVBVNjA1MF9JSU8gaXMgbm90IHNldAorIyBDT05GSUdfSU5WX01QVTYwNTBfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPTU1VX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU9OSUMgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9CRlEgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9fU1RSSUNUX0RFVk1FTT15CisjIENPTkZJR19JT19VUklORyBpcyBub3Qgc2V0CisjIENPTkZJR19JUDE3WFhfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQNl9ORl9GSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVA2X05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQNl9ORl9NQU5HTEUgaXMgbm90IHNldAorIyBDT05GSUdfSVA2X05GX01BVENIX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUDZfTkZfTUFUQ0hfSEwgaXMgbm90IHNldAorIyBDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVIgaXMgbm90IHNldAorIyBDT05GSUdfSVA2X05GX01BVENIX01IIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQNl9ORl9NQVRDSF9PUFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQNl9ORl9NQVRDSF9SUEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUDZfTkZfTUFUQ0hfUlQgaXMgbm90IHNldAorIyBDT05GSUdfSVA2X05GX01BVENIX1NSSCBpcyBub3Qgc2V0CisjIENPTkZJR19JUDZfTkZfTkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQNl9ORl9SQVcgaXMgbm90IHNldAorIyBDT05GSUdfSVA2X05GX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQNl9ORl9UQVJHRVRfSEwgaXMgbm90IHNldAorIyBDT05GSUdfSVA2X05GX1RBUkdFVF9NQVNRVUVSQURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQNl9ORl9UQVJHRVRfUkVKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQNl9ORl9UQVJHRVRfU1lOUFJPWFkgaXMgbm90IHNldAorIyBDT05GSUdfSVBBQ0tfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1CX0RFVklDRV9JTlRFUkZBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9GT1UgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9GT1VfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfSUxBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQorIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfUk9VVEVfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1NFRzZfSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1NJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1NJVF82UkQgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9WVEkgaXMgbm90IHNldAorIyBDT05GSUdfSVBWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVzIxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSVBXMjEwMF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSVBXMjEwMF9NT05JVE9SPXkKKyMgQ09ORklHX0lQVzIyMDAgaXMgbm90IHNldAorIyBDT05GSUdfSVBXMjIwMF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSVBXMjIwMF9NT05JVE9SPXkKKyMgQ09ORklHX0lQVzIyMDBfUFJPTUlTQ1VPVVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBXMjIwMF9RT1MgaXMgbm90IHNldAorIyBDT05GSUdfSVBXMjIwMF9SQURJT1RBUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CitDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRklCX1RSSUVfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUz15CisjIENPTkZJR19JUF9ORl9BUlBGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0FSUF9NQU5HTEUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfRklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0lQVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX01BTkdMRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9FQ04gaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfUlBGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfVFRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX1RBUkdFVF9FQ04gaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9UQVJHRVRfU1lOUFJPWFkgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfVEFSR0VUX1RUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QSU1TTV9WMSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QSU1TTV9WMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAorQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSD15CitDT05GSUdfSVBfUk9VVEVfVkVSQk9TRT15CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TRVRfSEFTSF9JUE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9WU19NSCBpcyBub3Qgc2V0CitDT05GSUdfSVBfVlNfTUhfVEFCX0lOREVYPTEwCisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUV9BTExfQ1BVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFfRE9NQUlOX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUV9QT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUV9USU1FX0FDQ09VTlRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfSVJfR1BJT19DSVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJfSElYNUhEMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUl9JR09SUExVR1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19JUl9JR1VBTkEgaXMgbm90IHNldAorIyBDT05GSUdfSVJfSU1HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSX0lNT04gaXMgbm90IHNldAorIyBDT05GSUdfSVJfSlZDX0RFQ09ERVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJfTElSQ19DT0RFQyBpcyBub3Qgc2V0CisjIENPTkZJR19JUl9NQ0VVU0IgaXMgbm90IHNldAorIyBDT05GSUdfSVJfTkVDX0RFQ09ERVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJfUkM1X0RFQ09ERVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJfUkM2X0RFQ09ERVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJfUkVEUkFUMyBpcyBub3Qgc2V0CisjIENPTkZJR19JUl9TT05ZX0RFQ09ERVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJfU1RSRUFNWkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSX1RUVVNCSVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNBX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JU0FfQlVTX0FQSSBpcyBub3Qgc2V0CisjIENPTkZJR19JU0NTSV9CT09UX1NZU0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CitDT05GSUdfSVNETj15CisjIENPTkZJR19JU0ROX0FVRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE5fQ0FQSSBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROX0NBUElfQ0FQSURSViBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROX0RJVkVSU0lPTiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROX0RSVl9BQ1QyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE5fRFJWX0dJR0FTRVQgaXMgbm90IHNldAorIyBDT05GSUdfSVNETl9EUlZfSElTQVggaXMgbm90IHNldAorIyBDT05GSUdfSVNETl9EUlZfSUNOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE5fRFJWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfSVNETl9EUlZfUENCSVQgaXMgbm90IHNldAorIyBDT05GSUdfSVNETl9EUlZfU0MgaXMgbm90IHNldAorIyBDT05GSUdfSVNETl9JNEwgaXMgbm90IHNldAorIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAorIyBDT05GSUdfSVNMMjkwMjAgaXMgbm90IHNldAorIyBDT05GSUdfSVNMMjkxMjUgaXMgbm90IHNldAorIyBDT05GSUdfSVNMMjk1MDEgaXMgbm90IHNldAorIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19JU1M0eHggaXMgbm90IHNldAorIyBDT05GSUdfSVRHMzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JV0wzOTQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRkkgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCRVZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pBSUxIT1VTRV9HVUVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19KQkQyX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX0ZBVk9VUkxaTyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DTU9ERV9QUklPUklUWT15CisjIENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorIyBDT05GSUdfSkZGUzJfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CitDT05GSUdfSkZGUzJfRlNfWEFUVFI9eQorQ09ORklHX0pGRlMyX0xaTUE9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfU1VNTUFSWT15CisjIENPTkZJR19KRkZTMl9aTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKK0NPTkZJR19KT0xJRVQ9eQorIyBDT05GSUdfSlNBMTIxMiBpcyBub3Qgc2V0CisjIENPTkZJR19KVU1QX0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0FCU09MVVRFX1BFUkNQVSBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TX0JBU0VfUkVMQVRJVkU9eQorIyBDT05GSUdfS0FMTFNZTVNfVU5DT01QUkVTU0VEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVNBTiBpcyBub3Qgc2V0CitDT05GSUdfS0FTQU5fU1RBQ0s9MQorIyBDT05GSUdfS0NPViBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0NBVCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfR1pJUCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFo0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAorQ09ORklHX0tFUk5FTF9NT0RFX05FT049eQorQ09ORklHX0tFUk5FTF9YWj15CitDT05GSUdfS0VSTkZTPXkKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDX0ZJTEUgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfQURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9BUFBMRVNQSSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9CQ00gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfQ0FQMTFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ETElOS19ESVI2ODUgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9HUElPX1BPTExFRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MTTgzMjMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTE04MzMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01DUyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NUFIxMjEgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09NQVA0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9QWEEyN3ggaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfUVQxMDUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1FUMTA3MCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9RVDIxNjAgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU0FNU1VORyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TTlZTX1BXUktFWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE1QRSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfVENBNjQxNiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9UQ0E4NDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1RFR1JBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1RNMl9UT1VDSEtFWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9UV0w0MDMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZU19SRVFVRVNUX0NBQ0hFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWV9ESF9PUEVSQVRJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNWDYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorIyBDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzcwMTAgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CisjIENPTkZJR19LU1o4ODRYX1BDSSBpcyBub3Qgc2V0CitDT05GSUdfS1VTRVJfSEVMUEVSUz15CisjIENPTkZJR19LVk1fQU1EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tWTV9HVUVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19LVk1fSU5URUwgaXMgbm90IHNldAorIyBDT05GSUdfS1hDSksxMDEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tYU0Q5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0wyVFAgaXMgbm90IHNldAorIyBDT05GSUdfTDJUUF9FVEggaXMgbm90IHNldAorIyBDT05GSUdfTDJUUF9JUCBpcyBub3Qgc2V0CisjIENPTkZJR19MMlRQX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBTjc0M1ggaXMgbm90IHNldAorIyBDT05GSUdfTEFOTUVESUEgaXMgbm90IHNldAorIyBDT05GSUdfTEFOVElRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTEFTQVQgaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRUSUNFX0VDUDNfQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CisjIENPTkZJR19MQ0RfQU1TMzY5RkcwNiBpcyBub3Qgc2V0CisjIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xDRF9IWDgzNTcgaXMgbm90IHNldAorIyBDT05GSUdfTENEX0lMSTkyMlggaXMgbm90IHNldAorIyBDT05GSUdfTENEX0lMSTkzMjAgaXMgbm90IHNldAorIyBDT05GSUdfTENEX0w0RjAwMjQyVDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xDRF9MRDkwNDAgaXMgbm90IHNldAorIyBDT05GSUdfTENEX0xNUzI4M0dGMDUgaXMgbm90IHNldAorIyBDT05GSUdfTENEX0xNUzUwMUtGMDMgaXMgbm90IHNldAorIyBDT05GSUdfTENEX0xUVjM1MFFWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xDRF9PVE0zMjI1QSBpcyBub3Qgc2V0CisjIENPTkZJR19MQ0RfUzZFNjNNMCBpcyBub3Qgc2V0CisjIENPTkZJR19MQ0RfVERPMjRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xDRF9WR0cyNDMyQTQgaXMgbm90IHNldAorQ09ORklHX0xESVNDX0FVVE9MT0FEPXkKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX0xEX0RFQURfQ09ERV9EQVRBX0VMSU1JTkFUSU9OPXkKKyMgQ09ORklHX0xFRFNfQU4zMDI1OUEgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19BUFUgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19CQ002MzI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfQkNNNjM1OCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0JEMjgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0JMSU5LTSBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19CUklHSFRORVNTX0hXX0NIQU5HRUQ9eQorQ09ORklHX0xFRFNfQ0xBU1M9eQorIyBDT05GSUdfTEVEU19DTEFTU19GTEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0NSMDAxNDExNCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0RBQzEyNFMwODUgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfSU5URUxfU1M0MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfSVMzMUZMMzE5WCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0lTMzFGTDMyWFggaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19MTTM1MzAgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19MTTM1MzIgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19MTTM1NXggaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19MTTM2NDIgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19MTTM2OTJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfTFAzOTQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfTFAzOTUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfTFA1NTIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfTFA1NTIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfTFA1NTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfTFA4NTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfTFA4ODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfTFQzNTkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfTUxYQ1BMRCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX01MWFJFRyBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX05JQzc4QlggaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19OUzIgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19PVDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1BDQTk1MzIgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfUENBOTYzWCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1BXTSBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1NQSV9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfU1lTQ09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVENBNjUwNyBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RJX0xNVV9DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UTEM1OTFYWCBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19UUklHR0VSUz15CisjIENPTkZJR19MRURTX1RSSUdHRVJfQUNUSVZJVFkgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0FVRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0NBTUVSQSBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfQ1BVIGlzIG5vdCBzZXQKK0NPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTj15CisjIENPTkZJR19MRURTX1RSSUdHRVJfRElTSyBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15CisjIENPTkZJR19MRURTX1RSSUdHRVJfTVREIGlzIG5vdCBzZXQKK0NPTkZJR19MRURTX1RSSUdHRVJfTkVUREVWPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9PTkVTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9QQU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfUEFUVEVSTiBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9UUkFOU0lFTlQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRF9UUklHR0VSX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19MR1VFU1QgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTFfQ1JZUFRfQ0NNUCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMV9DUllQVF9US0lQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExX0NSWVBUX1dFUCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfTElCRVJUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTElCRVJUQVNfVEhJTkZJUk0gaXMgbm90IHNldAorIyBDT05GSUdfTElCRVJUQVNfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfTElCSVBXX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQk5WRElNTSBpcyBub3Qgc2V0CisjIENPTkZJR19MSURBUl9MSVRFX1YyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJUVVJRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJUVVJRElPX1ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJUzNMMDJEUSBpcyBub3Qgc2V0CisjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CitDT05GSUdfTExDPXkKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfTE1QOTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTE5FVCBpcyBub3Qgc2V0CitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCisjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLRF9WND15CisjIENPTkZJR19MT0NLVVBfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19FVkVOVF9DT1VOVFMgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lHOTQwX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lXSEVFTFNfRkYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNworQ09ORklHX0xPR19DUFVfTUFYX0JVRl9TSElGVD0xMgorIyBDT05GSUdfTE9PTkdTT05fTUMxNDY4MTggaXMgbm90IHNldAorIyBDT05GSUdfTFBDX0lDSCBpcyBub3Qgc2V0CisjIENPTkZJR19MUENfU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xQX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19MU009ImxvY2tkb3duLHlhbWEsbG9hZHBpbixzYWZlc2V0aWQsaW50ZWdyaXR5IgorQ09ORklHX0xTTV9NTUFQX01JTl9BRERSPTY1NTM2CisjIENPTkZJR19MVEMxNjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xUQzI0NzEgaXMgbm90IHNldAorIyBDT05GSUdfTFRDMjQ4NSBpcyBub3Qgc2V0CisjIENPTkZJR19MVEMyNDk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xUQzI2MzIgaXMgbm90IHNldAorIyBDT05GSUdfTFRFX0dETTcyNFggaXMgbm90IHNldAorIyBDT05GSUdfTFRQQyBpcyBub3Qgc2V0CisjIENPTkZJR19MVFI1MDEgaXMgbm90IHNldAorIyBDT05GSUdfTFVTVFJFX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xWMDEwNENTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xXVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFo0SENfQ09NUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfTFo0X0NPTVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xaNF9ERUNPTVBSRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19MWk1BX0NPTVBSRVNTPXkKK0NPTkZJR19MWk1BX0RFQ09NUFJFU1M9eQorIyBDT05GSUdfTFpPX0NPTVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xaT19ERUNPTVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX002MjMzMiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMV9NRVNTQUdFX1RSQUNJTkcgaXMgbm90IHNldAorQ09ORklHX01BQzgwMjExX1NUQV9IQVNIX01BWF9TSVpFPTAKKyMgQ09ORklHX01BQ0IgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9BU005MjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0lOR0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSlo0NzQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTE9PTkdTT04zMiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xPT05HU09ONjQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9QSUMzMiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1BJU1RBQ0hJTyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYMzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RYNDlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1hJTEZQR0EgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAorIyBDT05GSUdfTUFDU0VDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfTUFDVlRBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfRU1VTU9VU0VCVE4gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUczMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKK0NPTkZJR19NQUdJQ19TWVNSUV9ERUZBVUxUX0VOQUJMRT0weDEKKyMgQ09ORklHX01BR0lDX1NZU1JRX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUlMQk9YIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BTkFHRVJfU0JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BTkRBVE9SWV9GSUxFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFOR0xFX0JPT1RBUkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUlZFTExfMTBHX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NQVgxMDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BWDExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BWDExMTggaXMgbm90IHNldAorIyBDT05GSUdfTUFYMTM2MyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVgzMDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQVgzMDEwMiBpcyBub3Qgc2V0CisjIENPTkZJR19NQVgzMTg1NiBpcyBub3Qgc2V0CisjIENPTkZJR19NQVg0NDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQVg0NDAwOSBpcyBub3Qgc2V0CisjIENPTkZJR19NQVg1MTcgaXMgbm90IHNldAorIyBDT05GSUdfTUFYNTQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19NQVg1NDgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BWDU0ODcgaXMgbm90IHNldAorIyBDT05GSUdfTUFYNTgyMSBpcyBub3Qgc2V0CisjIENPTkZJR19NQVg2M1hYX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BWDk2MTEgaXMgbm90IHNldAorIyBDT05GSUdfTUFYSU1fVEhFUk1PQ09VUExFIGlzIG5vdCBzZXQKK0NPTkZJR19NQVlfVVNFX0RFVkxJTks9eQorIyBDT05GSUdfTUIxMjMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01DMzIzMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQ0IgaXMgbm90IHNldAorIyBDT05GSUdfTUNQMzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQ1AzNDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01DUDM5MTEgaXMgbm90IHNldAorIyBDT05GSUdfTUNQNDAxOCBpcyBub3Qgc2V0CisjIENPTkZJR19NQ1A0MTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQ1A0MTMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01DUDQ1MzEgaXMgbm90IHNldAorIyBDT05GSUdfTUNQNDcyNSBpcyBub3Qgc2V0CisjIENPTkZJR19NQ1A0OTIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01DUE0gaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CQ01fVU5JTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JVU19NVVhfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JVU19NVVhfTU1JT1JFRyBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JVU19NVVhfTVVMVElQTEVYRVIgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19ERVZJQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19ISVNJX0ZFTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fTVNDQ19NSUlNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fT0NURU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fVEhVTkRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfQU5BTE9HX1RWX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfQVRUQUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX0NBTUVSQV9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX0NFQ19TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfRElHSVRBTF9UVl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1BDSV9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1JBRElPX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfUkNfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TRFJfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVUJEUlZfQVVUT1NFTEVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTExBTk9YX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19NRU1CQVJSSUVSPXkKKyMgQ09ORklHX01FTU9SWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1PUllfRkFJTFVSRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1PUllfSE9UUExVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTl9BMjFfV0RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FU09OX1NNIGlzIG5vdCBzZXQKK0NPTkZJR19NRVNTQUdFX0xPR0xFVkVMX0RFRkFVTFQ9NAorIyBDT05GSUdfTUZEXzg4UE04MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEXzg4UE04MDUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEXzg4UE04NjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BQVQyODcwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0FDMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BQ1Q4OTQ1QSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVJJWk9OQV9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0FSSVpPTkFfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BUzM3MTEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0FTMzcyMiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0FUTUVMX0ZMRVhDT00gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0FUTUVMX0hMQ0RDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BWFAyMFggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0FYUDIwWF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0JDTTU5MFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9CRDk1NzFNV1YgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0NQQ0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9DUk9TX0VDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9DUzU1MzUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0RBOTA1Ml9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0RBOTA1Ml9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0RBOTA1NSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfREE5MDYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9EQTkwNjMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0RBOTE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfRExOMiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfRVhZTk9TX0xQQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9ISTY0MjFfUE1JQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfSU5URUxfUVVBUktfSTJDX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0pBTlpfQ01PRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9LRU1QTEQgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0xNMzUzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTE9DSE5BR0FSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9MUDM5NDMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0xQODc4OCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUFERVJBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQVgxNDU3NyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUFYNzc2MjAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01BWDc3NjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQVg3NzY4NiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUFYNzc2OTMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01BWDc3ODQzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQVg4OTA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQVg4OTI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQVg4OTk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQVg4OTk4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzWFhYX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxM1hYWF9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01FTkYyMUJNQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTVQ2Mzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9PTUFQX1VTQl9IT1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQUxNQVMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QTTg5MjFfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUE04WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9SQzVUNTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9SREMzMjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9SRVRVIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9SSzgwOCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUk41VDYxOCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUk9ITV9CRDcwNTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9ST0hNX0JENzE4WFggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1JUNTAzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUlRTWF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1JUU1hfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TRUNfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU0k0NzZYX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NLWTgxNDUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU01TQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU1RNRlggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NUTVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TVFBNSUMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TWVNDT04gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDMzU4OVggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVElNQkVSREFMRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVElfQU0zMzVYX1RTQ0FEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVElfTE1VIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9USV9MUDg3M1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RJX0xQODc1NjUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RQUzY1MDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UUFM2NTA5MCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVFBTNjUyMTcgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RQUzY1MjE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UUFM2NTg2WCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVFBTNjU5MTAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RQUzY1OTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UUFM2NTkxMl9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RQUzY1OTEyX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVFBTNjg0NzAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RQUzgwMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UUU1YODYgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1ZJUEVSQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1ZYODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTDEyNzNfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVhfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVhfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODk5NCBpcyBub3Qgc2V0CisjIENPTkZJR19NR19ESVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JQ1JFTF9LUzg5OTVNQSBpcyBub3Qgc2V0CisjIENPTkZJR19NSUNSRUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JQ1JPQ0hJUF9LU1ogaXMgbm90IHNldAorIyBDT05GSUdfTUlDUk9DSElQX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NSUNST0NISVBfVDFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JQ1JPU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTUlHUkFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfTUlLUk9USUsgaXMgbm90IHNldAorIyBDT05GSUdfTUlLUk9USUtfUkI1MzIgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlNfTkFUSVZFX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19BTENIRU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfQ0RNTSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0ZQVV9FTVVMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NSVBTX0ZQX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfTUFMVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19PMzJfRlA2NF9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfUEFSQVZJUlQgaXMgbm90IHNldAorIyBDT05GSUdfTUlQU19QTEFURk9STV9ERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JUFNfU0VBRDMgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19BTENPUl9QQ0kgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfTUlTQ19SVFNYX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX1JUU1hfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0ROX0FWTUZSSVRaIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0ROX0hGQ1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNETl9IRkNVU0IgaXMgbm90IHNldAorIyBDT05GSUdfTUlTRE5fSU5GSU5FT04gaXMgbm90IHNldAorIyBDT05GSUdfTUlTRE5fTkVUSkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0ROX1NQRUVERkFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0ROX1c2NjkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01LSVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDVfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NTFg5MDYxNCBpcyBub3Qgc2V0CisjIENPTkZJR19NTFg5MDYzMiBpcyBub3Qgc2V0CisjIENPTkZJR19NTFhGVyBpcyBub3Qgc2V0CisjIENPTkZJR19NTFhTV19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWF9DUExEX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWF9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUE3NDU1X0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUE3NDU1X1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUE3NjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQTg0NTIgaXMgbm90IHNldAorIyBDT05GSUdfTU1BOTU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUE5NTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMzNTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVJNTU1DSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVUxWCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQkxPQ0sgaXMgbm90IHNldAorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorQ09ORklHX01NQ19CTE9DS19NSU5PUlM9OAorIyBDT05GSUdfTU1DX0NBVklVTV9USFVOREVSWCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQ0I3MTAgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0NRSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfRFcgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0paNDc0MCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfTVRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19NVlNESU8gaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1MzQyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1NESENJX0FDUEkgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1NESENJX0FNNjU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19TREhDSV9CQ01fS09OQSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfU0RIQ0lfQ0FERU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfU0RIQ0lfRl9TREgzMCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfU0RIQ0lfSVBST0MgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1NESENJX01TTSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfU0RIQ0lfT0ZfQVJBU0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19TREhDSV9PRl9BU1BFRUQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1NESENJX09GX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1NESENJX09GX0RXQ01TSEMgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1NESENJX09GX0VTREhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19TREhDSV9PRl9ITFdEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19TREhDSV9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19TREhDSV9QWEFWMiBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfU0RIQ0lfUFhBVjMgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1NESENJX1MzQyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfU0RIQ0lfWEVOT04gaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1NEUklDT0hfQ1MgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfU1RNMzJfU0RNTUMgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RJRk1fU0QgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RPU0hJQkFfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VU0RISTZST0wwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VU0hDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19WSUFfU0RNTUMgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1ZVQjMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUlPVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX01NVT15CitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfQUxMT1dfTUlTU0lOR19OQU1FU1BBQ0VfSU1QT1JUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfQ09NUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1NUUklQUEVEPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PU1QgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9FTEFOX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0lOUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9MT0dJQk0gaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUEMxMTBQQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX0ZPQ0FMVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfU0VOVEVMSUMgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU1lOQVBUSUNTX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TWU5BUFRJQ1NfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PWFRFVCBpcyBub3Qgc2V0CisjIENPTkZJR19NUEwxMTUgaXMgbm90IHNldAorIyBDT05GSUdfTVBMMTE1X0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEwxMTVfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QTDMxMTUgaXMgbm90IHNldAorIyBDT05GSUdfTVBMUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUFUzMDUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUV9JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01RX0lPU0NIRURfS1lCRVIgaXMgbm90IHNldAorIyBDT05GSUdfTVM1NjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX01TNTYzNyBpcyBub3Qgc2V0CisjIENPTkZJR19NU0NDX09DRUxPVF9TV0lUQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01TSV9MQVBUT1AgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisjIENPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9OT1NXQVA9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKKyMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQ0czIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKKyMgQ09ORklHX01URF9HUElPX0FERFIgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0hZUEVSQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9JTVBBNyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9MQVRDSF9BRERSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTFBERFIyX05WTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01DSFAyM0syNTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01UODF4eF9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVlMT0FERVJfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfQU1TX0RFTFRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0FSOTM0WCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9BUjkzNFhfSFdfRUNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0FVMTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9CQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfQkY1WFggaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfQlJDTU5BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfQ0FGRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9DTV9YMjcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0NTNTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9EQVZJTkNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0RFTkFMSSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9ERU5BTElfRFQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfREVOQUxJX1BDSSBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfREVOQUxJX1NDUkFUQ0hfUkVHX0FERFI9MHhmZjEwODAxOAorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9ET0NHNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9FQ0MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfRUNDX0JDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TV19CQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfRUNDX1NXX0hBTU1JTkdfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0ZTTF9FTEJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0ZTTF9JRkMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfRlNMX1VQTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9GU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfR1BNSV9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0hJU0k1MDQgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0lEUz15CisjIENPTkZJR19NVERfTkFORF9KWjQ3NDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVBDNTEyMV9ORkMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9NWElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTkRGQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OVUM5MDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfT01BUDIgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfT01BUF9CQ0hfQlVJTEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfT1JJT04gaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfUEFTRU1JIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1BYQTN4eCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9SQjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9SQjc1MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9SSUNPSCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1NIQVJQU0wgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfU0hfRkxDVEwgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfU09DUkFURVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9UWFg5TkRGTUMgaXMgbm90IHNldAorQ09ORklHX01URF9PRl9QQVJUUz15CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QQVJUSVRJT05FRF9NQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUENNQ0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVBfR0VNSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQX0dQSU9fQUREUiBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfT0ZfR0VNSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQX09GX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SQVdfTkFORCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1JFREJPT1RfRElSRUNUT1JZX0JMT0NLPS0xCisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19SRUFET05MWSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFMTE9DQVRFRCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUk9PVEZTX1JPT1RfREVWPXkKKyMgQ09ORklHX01URF9ST1VURVJCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU01fQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TUElOQU5EX01UMjlGIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TUElfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1BJX05PUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1BJX05PUl9VU0VfNEtfU0VDVE9SUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX1NQSV9OT1JfVVNFXzRLX1NFQ1RPUlNfTElNSVQ9NDA5NgorQ09ORklHX01URF9TUExJVD15CisjIENPTkZJR19NVERfU1BMSVRfQkNNX1dGSV9GVyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1BMSVRfQlJOSU1BR0VfRlcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NQTElUX0VMRl9GVyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1BMSVRfRVZBX0ZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TUExJVF9GSVJNV0FSRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX1NQTElUX0ZJUk1XQVJFX05BTUU9ImZpcm13YXJlIgorIyBDT05GSUdfTVREX1NQTElUX0ZJVF9GVyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1BMSVRfSklNQUdFX0ZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TUExJVF9MWk1BX0ZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TUExJVF9NSU5PUl9GVyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1BMSVRfU0VBTUFfRlcgaXMgbm90IHNldAorQ09ORklHX01URF9TUExJVF9TUVVBU0hGU19ST09UPXkKK0NPTkZJR19NVERfU1BMSVRfU1VQUE9SVD15CisjIENPTkZJR19NVERfU1BMSVRfVFBMSU5LX0ZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TUExJVF9UUlhfRlcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NQTElUX1VJTUFHRV9GVyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1BMSVRfV1JHR19GVyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9VQklfRkFTVE1BUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVUJJX0dMVUVCSSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVUlNQUdFX1NQTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9WSVJUX0NPTkNBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVEtfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01US19TUElfTkFORCBpcyBub3Qgc2V0CitDT05GSUdfTVVMVElVU0VSPXkKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAorIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAorIyBDT05GSUdfTVZNRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01WTkVUQV9CTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVlNXSVRDSF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTVZfWE9SX1YyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01XQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01XTDhLIGlzIG5vdCBzZXQKKyMgQ09ORklHX01YQzQwMDUgaXMgbm90IHNldAorIyBDT05GSUdfTVhDNjI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVTc4MDIgaXMgbm90IHNldAorIyBDT05GSUdfTkJQRkFYSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUNfTUFSS0VJTlMgaXMgbm90IHNldAorQ09ORklHX05FVD15CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVlNJTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfSU5HUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0dMVUVfQ1QgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX09TRiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfQ09OTk1BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0FERFJUWVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9CUEYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NHUk9VUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ0xVU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5MSU1JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ1BVIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ERVZHUk9VUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRUNOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ITCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MMlRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEggaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUMgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTkZBQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PU0YgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09XTkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QSFlTREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVDRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TT0NLRVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUMgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NIRUNLU1VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlkgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfRFNDUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0hMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSE1BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9JRExFVElNRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9MT0cgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkVUTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0cgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTk9UUkFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1QgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9SRURJUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BPUFRTVFJJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RFRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RQUk9YWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVExBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVExJTktfRElBRyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRMSU5LX01NQVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRST00gaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfTkVUV09SS19QSFlfVElNRVNUQU1QSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQUNUX0JQRiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQUNUX0NTVU0gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0FDVF9DVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQUNUX0dBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0FDVF9JRkUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0FDVF9JUFQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0FDVF9NSVJSRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0FDVF9NUExTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9BQ1RfTkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9BQ1RfUEVESVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0FDVF9QT0xJQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0FDVF9TQU1QTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0FDVF9TSU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9BQ1RfU0tCRURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQUNUX1NLQk1PRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQUNUX1RVTk5FTF9LRVkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0FDVF9WTEFOIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0FERU5DRT15CisjIENPTkZJR19ORVRfQ0FMWEVEQV9YR01BQyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0NMUz15CisjIENPTkZJR19ORVRfQ0xTX0FDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX0JBU0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfQlBGIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX0ZMT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX0ZXIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX0lORD15CisjIENPTkZJR19ORVRfQ0xTX01BVENIQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfUk9VVEU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfUlNWUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1JTVlA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfVENJTkRFWCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1UzMiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0NPUkU9eQorIyBDT05GSUdfTkVUX0RFVkxJTksgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RST1BfTU9OSVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0FfQkNNX1NGMiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBX0xBTlRJUV9HU1dJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQV9NSUNST0NISVBfS1NaODc5NSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBX01JQ1JPQ0hJUF9LU1o5NDc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0FfTVQ3NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0FfTVY4OEU2MDYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0FfTVY4OEU2MTIzXzYxXzY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0FfTVY4OEU2MTMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0FfTVY4OEU2MTcxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0FfTVY4OEU2MzUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0FfTVY4OEU2WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0FfTVY4OEU2WFhYX05FRURfUFBVIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0FfUUNBOEsgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQV9SRUFMVEVLX1NNSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBX1NKQTExMDUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQV9TTVNDX0xBTjkzMDNfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX01ESU8gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQV9UQUdfODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQV9UQUdfQlJDTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBX1RBR19CUkNNX1BSRVBFTkQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQV9UQUdfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0FfVEFHX0VEU0EgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQV9UQUdfR1NXSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQV9UQUdfS1NaIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0FfVEFHX0xBTjkzMDMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQV9UQUdfTVRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0FfVEFHX1FDQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBX1RBR19SVEw0X0EgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQV9UQUdfU0pBMTEwNSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBX1RBR19UUkFJTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRU1BVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9FTUFUQ0hfQ0FOSUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0VNQVRDSF9DTVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0VNQVRDSF9JUFQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0VNQVRDSF9NRVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9FTUFUQ0hfTkJZVEUgaXMgbm90IHNldAorQ09ORklHX05FVF9FTUFUQ0hfU1RBQ0s9MzIKKyMgQ09ORklHX05FVF9FTUFUQ0hfVEVYVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRU1BVENIX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRkFJTE9WRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9GT1UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0ZPVV9JUF9UVU5ORUxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JRkUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXkKKyMgQ09ORklHX05FVF9JUEdSRV9ERU1VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBWVEkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfTDNfTUFTVEVSX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfTVBMU19HU08gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX05DU0kgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX05TSCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUEFDS0VUX0VOR0lORSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BUUF9DTEFTU0lGWSBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1JYX0JVU1lfUE9MTD15CisjIENPTkZJR19ORVRfU0IxMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfU0NIRUQ9eQorIyBDT05GSUdfTkVUX1NDSF9BVE0gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSF9DQUtFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfQ0JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfQ0JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfQ0hPS0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSF9DT0RFTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSF9EUlIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSF9EU01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSF9FVEYgaXMgbm90IHNldAorQ09ORklHX05FVF9TQ0hfRklGTz15CisjIENPTkZJR19ORVRfU0NIX0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfU0NIX0ZRX0NPREVMPXkKKyMgQ09ORklHX05FVF9TQ0hfR1JFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX0hGU0MgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSF9ISEYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSF9IVEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSF9JTkdSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfTVFQUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfTVVMVElRIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfTkVURU0gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSF9QSUUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSF9QTFVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfUFJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX1FGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX1JFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX1NGQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX1NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX1NLQlBSSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSF9UQVBSSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSF9UQkYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSF9URVFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ1RQUFJPQkUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NXSVRDSERFViBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVENQUFJPQkUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RDX1NLQl9FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RFQU0gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9VRFBfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfVkVORE9SXzNDT009eQorQ09ORklHX05FVF9WRU5ET1JfODM5MD15CitDT05GSUdfTkVUX1ZFTkRPUl9BREFQVEVDPXkKK0NPTkZJR19ORVRfVkVORE9SX0FHRVJFPXkKK0NPTkZJR19ORVRfVkVORE9SX0FMQUNSSVRFQ0g9eQorQ09ORklHX05FVF9WRU5ET1JfQUxURU9OPXkKK0NPTkZJR19ORVRfVkVORE9SX0FNQVpPTj15CitDT05GSUdfTkVUX1ZFTkRPUl9BTUQ9eQorQ09ORklHX05FVF9WRU5ET1JfQVFVQU5USUE9eQorQ09ORklHX05FVF9WRU5ET1JfQVJDPXkKK0NPTkZJR19ORVRfVkVORE9SX0FUSEVST1M9eQorQ09ORklHX05FVF9WRU5ET1JfQVVST1JBPXkKK0NPTkZJR19ORVRfVkVORE9SX0JST0FEQ09NPXkKK0NPTkZJR19ORVRfVkVORE9SX0JST0NBREU9eQorQ09ORklHX05FVF9WRU5ET1JfQ0FERU5DRT15CitDT05GSUdfTkVUX1ZFTkRPUl9DQVZJVU09eQorQ09ORklHX05FVF9WRU5ET1JfQ0hFTFNJTz15CitDT05GSUdfTkVUX1ZFTkRPUl9DSVJSVVM9eQorQ09ORklHX05FVF9WRU5ET1JfQ0lTQ089eQorQ09ORklHX05FVF9WRU5ET1JfQ09SVElOQT15CitDT05GSUdfTkVUX1ZFTkRPUl9ERUM9eQorQ09ORklHX05FVF9WRU5ET1JfRExJTks9eQorQ09ORklHX05FVF9WRU5ET1JfRU1VTEVYPXkKK0NPTkZJR19ORVRfVkVORE9SX0VYQVI9eQorQ09ORklHX05FVF9WRU5ET1JfRVpDSElQPXkKK0NPTkZJR19ORVRfVkVORE9SX0ZBUkFEQVk9eQorQ09ORklHX05FVF9WRU5ET1JfRlJFRVNDQUxFPXkKK0NPTkZJR19ORVRfVkVORE9SX0ZVSklUU1U9eQorQ09ORklHX05FVF9WRU5ET1JfR09PR0xFPXkKK0NPTkZJR19ORVRfVkVORE9SX0hJU0lMSUNPTj15CitDT05GSUdfTkVUX1ZFTkRPUl9IUD15CitDT05GSUdfTkVUX1ZFTkRPUl9IVUFXRUk9eQorQ09ORklHX05FVF9WRU5ET1JfSTgyNVhYPXkKK0NPTkZJR19ORVRfVkVORE9SX0lCTT15CitDT05GSUdfTkVUX1ZFTkRPUl9JTlRFTD15CitDT05GSUdfTkVUX1ZFTkRPUl9NQVJWRUxMPXkKK0NPTkZJR19ORVRfVkVORE9SX01FTExBTk9YPXkKK0NPTkZJR19ORVRfVkVORE9SX01JQ1JFTD15CitDT05GSUdfTkVUX1ZFTkRPUl9NSUNST0NISVA9eQorQ09ORklHX05FVF9WRU5ET1JfTUlDUk9TRU1JPXkKK0NPTkZJR19ORVRfVkVORE9SX01ZUkk9eQorQ09ORklHX05FVF9WRU5ET1JfTkFUU0VNST15CitDT05GSUdfTkVUX1ZFTkRPUl9ORVRFUklPTj15CitDT05GSUdfTkVUX1ZFTkRPUl9ORVRST05PTUU9eQorQ09ORklHX05FVF9WRU5ET1JfTkk9eQorQ09ORklHX05FVF9WRU5ET1JfTlZJRElBPXkKK0NPTkZJR19ORVRfVkVORE9SX09LST15CitDT05GSUdfTkVUX1ZFTkRPUl9QQUNLRVRfRU5HSU5FUz15CitDT05GSUdfTkVUX1ZFTkRPUl9QRU5TQU5ETz15CitDT05GSUdfTkVUX1ZFTkRPUl9RTE9HSUM9eQorQ09ORklHX05FVF9WRU5ET1JfUVVBTENPTU09eQorQ09ORklHX05FVF9WRU5ET1JfUkRDPXkKK0NPTkZJR19ORVRfVkVORE9SX1JFQUxURUs9eQorQ09ORklHX05FVF9WRU5ET1JfUkVORVNBUz15CitDT05GSUdfTkVUX1ZFTkRPUl9ST0NLRVI9eQorQ09ORklHX05FVF9WRU5ET1JfU0FNU1VORz15CitDT05GSUdfTkVUX1ZFTkRPUl9TRUVRPXkKK0NPTkZJR19ORVRfVkVORE9SX1NJTEFOPXkKK0NPTkZJR19ORVRfVkVORE9SX1NJUz15CitDT05GSUdfTkVUX1ZFTkRPUl9TTVNDPXkKK0NPTkZJR19ORVRfVkVORE9SX1NPQ0lPTkVYVD15CitDT05GSUdfTkVUX1ZFTkRPUl9TT0xBUkZMQVJFPXkKK0NPTkZJR19ORVRfVkVORE9SX1NUTUlDUk89eQorQ09ORklHX05FVF9WRU5ET1JfU1VOPXkKK0NPTkZJR19ORVRfVkVORE9SX1NZTk9QU1lTPXkKK0NPTkZJR19ORVRfVkVORE9SX1RFSFVUST15CitDT05GSUdfTkVUX1ZFTkRPUl9UST15CitDT05GSUdfTkVUX1ZFTkRPUl9UT1NISUJBPXkKK0NPTkZJR19ORVRfVkVORE9SX1ZJQT15CitDT05GSUdfTkVUX1ZFTkRPUl9XSVpORVQ9eQorQ09ORklHX05FVF9WRU5ET1JfWElMSU5YPXkKK0NPTkZJR19ORVRfVkVORE9SX1hJUkNPTT15CisjIENPTkZJR19ORVRfVlJGIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9YR0VORSBpcyBub3Qgc2V0CitDT05GSUdfTkVXX0xFRFM9eQorIyBDT05GSUdfTkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0RfVjJfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNEX1YzPXkKKyMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0RfVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX0FDTF9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfQ09NTU9OPXkKKyMgQ09ORklHX05GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRlNDQUNIRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjIgaXMgbm90IHNldAorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVF9CUklER0VfTUVUQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRfQlJJREdFX1JFSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRfQ09OTkxJTUlUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVF9EVVBfSVBWNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRfRFVQX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkZUX0ZJQl9JUFY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVF9GSUJfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRfRklCX05FVERFViBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRfRkxPV19PRkZMT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVF9PQkpSRUYgaXMgbm90IHNldAorIyBDT05GSUdfTkZUX09TRiBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRfUlQgaXMgbm90IHNldAorIyBDT05GSUdfTkZUX1NFVF9CSVRNQVAgaXMgbm90IHNldAorIyBDT05GSUdfTkZUX1NPQ0tFVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRfU1lOUFJPWFkgaXMgbm90IHNldAorIyBDT05GSUdfTkZUX1RQUk9YWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVF9YRlJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NPTk5UUkFDS19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DT05OVFJBQ0tfRlRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NPTk5UUkFDS19IMzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NPTk5UUkFDS19JUFY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NPTk5UUkFDS19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NPTk5UUkFDS19JUkMgaXMgbm90IHNldAorIyBDT05GSUdfTkZfQ09OTlRSQUNLX0xBQkVMUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DT05OVFJBQ0tfUFBUUCBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NGUz15CisjIENPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfTkZfQ09OTlRSQUNLX1NBTkUgaXMgbm90IHNldAorIyBDT05GSUdfTkZfQ09OTlRSQUNLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkZfQ09OTlRSQUNLX1NJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DT05OVFJBQ0tfU05NUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DT05OVFJBQ0tfVEZUUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DT05OVFJBQ0tfVElNRU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DT05OVFJBQ0tfVElNRVNUQU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NPTk5UUkFDS19aT05FUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DVF9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NUX05FVExJTktfVElNRU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DVF9ORVRMSU5LX0hFTFBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DVF9QUk9UT19EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NUX1BST1RPX0dSRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DVF9QUk9UT19TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NUX1BST1RPX1VEUExJVEUgaXMgbm90IHNldAorIyBDT05GSUdfTkZfREVGUkFHX0lQVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZfRFVQX0lQVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZfRFVQX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkZfRkxPV19UQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9MT0dfQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0xPR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkZfTE9HX0lQVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZfTE9HX05FVERFViBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9OQVQgaXMgbm90IHNldAorIyBDT05GSUdfTkZfTkFUX0FNQU5EQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9OQVRfRlRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX05BVF9IMzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX05BVF9JUkMgaXMgbm90IHNldAorIyBDT05GSUdfTkZfTkFUX01BU1FVRVJBREUgaXMgbm90IHNldAorIyBDT05GSUdfTkZfTkFUX05FRURFRCBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9OQVRfUFBUUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9OQVRfUFJPVE9fR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX05BVF9TSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkZfTkFUX1NOTVBfQkFTSUMgaXMgbm90IHNldAorIyBDT05GSUdfTkZfTkFUX1RGVFAgaXMgbm90IHNldAorIyBDT05GSUdfTkZfUkVKRUNUX0lQVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZfUkVKRUNUX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkZfU09DS0VUX0lQVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZfU09DS0VUX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkZfVEFCTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9UQUJMRVNfQVJQPXkKK0NPTkZJR19ORl9UQUJMRVNfQlJJREdFPXkKK0NPTkZJR19ORl9UQUJMRVNfSU5FVD15CitDT05GSUdfTkZfVEFCTEVTX0lQVjQ9eQorQ09ORklHX05GX1RBQkxFU19JUFY2PXkKK0NPTkZJR19ORl9UQUJMRVNfTkVUREVWPXkKKyMgQ09ORklHX05GX1RBQkxFU19TRVQgaXMgbm90IHNldAorIyBDT05GSUdfTkZfVFBST1hZX0lQVjQgaXMgbm90IHNldAorIyBDT05GSUdfTkZfVFBST1hZX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkk2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OSTkwM1hfV0RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JQzcwMThfV0RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSVUgaXMgbm90IHNldAorIyBDT05GSUdfTklfWEdFX01BTkFHRU1FTlRfRU5FVCBpcyBub3Qgc2V0CitDT05GSUdfTkxBVFRSPXkKKyMgQ09ORklHX05MTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MTV9YTFBfQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfTkxNX1hMUl9CT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfTUFDX0NFTFRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfTUFDX0NFTlRFVVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19NQUNfQ1JPQVRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfTkxTX01BQ19DWVJJTExJQyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfTUFDX0dBRUxJQyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfTUFDX0dSRUVLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19NQUNfSUNFTEFORCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfTUFDX0lOVUlUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19NQUNfUk9NQU4gaXMgbm90IHNldAorIyBDT05GSUdfTkxTX01BQ19ST01BTklBTiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfTUFDX1RVUktJU0ggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorIyBDT05GSUdfTk1CTSBpcyBub3Qgc2V0CitDT05GSUdfTk1JX0xPR19CVUZfU0hJRlQ9MTMKKyMgQ09ORklHX05PQTEzMDUgaXMgbm90IHNldAorIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CisjIENPTkZJR19OT1JURUxfSEVSTUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PVElGSUVSX0VSUk9SX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19OT1VWRUFVX0xFR0FDWV9DVFhfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorIyBDT05GSUdfTk9fQk9PVE1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19OT19IWl9GVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PX0haX0lETEUgaXMgbm90IHNldAorIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CisjIENPTkZJR19OVEIgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfUlcgaXMgbm90IHNldAorIyBDT05GSUdfTlRQX1BQUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVUxMX1RUWSBpcyBub3Qgc2V0CisjIENPTkZJR19OVU1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WTSBpcyBub3Qgc2V0CisjIENPTkZJR19OVk1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19OVk1FTV9CQ01fT0NPVFAgaXMgbm90IHNldAorIyBDT05GSUdfTlZNRU1fSU1YX09DT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WTUVNX1JFQk9PVF9NT0RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WTUVNX1NZU0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WTUVfRkMgaXMgbm90IHNldAorIyBDT05GSUdfTlZNRV9UQVJHRVQgaXMgbm90IHNldAorIyBDT05GSUdfTlZNRV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTlZfVENPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05YUF9TVEIyMjAgaXMgbm90IHNldAorIyBDT05GSUdfTlhQX1NUQjIyNSBpcyBub3Qgc2V0CisjIENPTkZJR19OWFBfVEpBMTFYWF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTl9HU00gaXMgbm90IHNldAorIyBDT05GSUdfT0FCSV9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfT0JTNjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DVEVPTlRYMl9BRiBpcyBub3Qgc2V0CisjIENPTkZJR19PRl9PVkVSTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9SRVNFUlZFRF9NRU09eQorIyBDT05GSUdfT0ZfVU5JVFRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfT01BUDJfRFNTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVAyX0RTU19ERUJVR0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVAyX0RTU19TREkgaXMgbm90IHNldAorIyBDT05GSUdfT01BUF9PQ1AyU0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVBfVVNCMiBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09QRU5WU1dJVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX09QUk9GSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX09QUk9GSUxFX0VWRU5UX01VTFRJUExFWCBpcyBub3Qgc2V0CisjIENPTkZJR19PUFQzMDAxIGlzIG5vdCBzZXQKK0NPTkZJR19PUFRJTUlaRV9JTkxJTklORz15CisjIENPTkZJR19PUkFOR0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PUklPTl9XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19PVkVSTEFZX0ZTPXkKKyMgQ09ORklHX09WRVJMQVlfRlNfSU5ERVggaXMgbm90IHNldAorIyBDT05GSUdfT1ZFUkxBWV9GU19NRVRBQ09QWSBpcyBub3Qgc2V0CitDT05GSUdfT1ZFUkxBWV9GU19SRURJUkVDVF9BTFdBWVNfRk9MTE9XPXkKKyMgQ09ORklHX09WRVJMQVlfRlNfUkVESVJFQ1RfRElSIGlzIG5vdCBzZXQKK0NPTkZJR19PVkVSTEFZX0ZTX1hJTk9fQVVUTz15CisjIENPTkZJR19PV0xfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1A1NF9DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfUEExMjIwMzAwMSBpcyBub3Qgc2V0CitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9ESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9FWFRFTlNJT04gaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9PV05FUiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfMzJLQiBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9TSVpFXzRLQj15CisjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1NJWkVfOEtCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBTE1BU19HUEFEQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQU5BU09OSUNfTEFQVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19QQU5JQ19PTl9PT1BTPXkKK0NPTkZJR19QQU5JQ19PTl9PT1BTX1ZBTFVFPTEKK0NPTkZJR19QQU5JQ19USU1FT1VUPTEKKyMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUkFWSVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUkFWSVJUX1RJTUVfQUNDT1VOVElORyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlRfMTI4NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUX0FYODg3OTYgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVF9HU0MgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVF9QQyBpcyBub3Qgc2V0CitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVJBU0FOX0NGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUzNiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lTQVBOUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT0NURU9OX0NGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT0ZfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QQ01DSUEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1FESSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQ0ggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1RPU0hJQkEgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1dJTkJPTkRfVkxCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDMTA0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDMzAwVE9PIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0hfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSF9HQkUgaXMgbm90IHNldAorIyBDT05GSUdfUENIX1BIVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSTIwMFNZTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lFQUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSUVBRVJfSU5KRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSUVBU1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSUVfQUwgaXMgbm90IHNldAorIyBDT05GSUdfUENJRV9BTFRFUkEgaXMgbm90IHNldAorIyBDT05GSUdfUENJRV9BUk1BREFfOEsgaXMgbm90IHNldAorIyBDT05GSUdfUENJRV9CVyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lFX0NBREVOQ0VfSE9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lFX0RQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lFX0RXX1BMQVQgaXMgbm90IHNldAorIyBDT05GSUdfUENJRV9EV19QTEFUX0hPU1QgaXMgbm90IHNldAorIyBDT05GSUdfUENJRV9FQ1JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSUVfSVBST0MgaXMgbm90IHNldAorIyBDT05GSUdfUENJRV9LSVJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lFX1BUTSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lFX1hJTElOWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfQ05CMjBMRV9RVUlSSyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0RJU0FCTEVfQ09NTU9OX1FVSVJLUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfRU5EUE9JTlQgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0VORFBPSU5UX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0ZUUENJMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9IRVJNRVMgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0hJU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0hPU1RfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSE9TVF9USFVOREVSX0VDQU0gaXMgbm90IHNldAorIyBDT05GSUdfUENJX0hPU1RfVEhVTkRFUl9QRU0gaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfTEFZRVJTQ0FQRSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfTUVTT04gaXMgbm90IHNldAorIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfUEFTSUQgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1BGX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1BSSSBpcyBub3Qgc2V0CitDT05GSUdfUENJX1FVSVJLUz15CisjIENPTkZJR19QQ0lfUkVBTExPQ19FTkFCTEVfQVVUTyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1dfU1dJVENIVEVDIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfU1lTQ0FMTD15CisjIENPTkZJR19QQ0lfVjNfU0VNSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfWEdFTkUgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV8zQzU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfM0M1ODkgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX0FIQTE1MlggaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9BWE5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX0ZET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX0ZNVkoxOFggaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX0hFUk1FUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfTE9BRF9DSVMgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX05JTkpBX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX05NQ0xBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfUENORVQgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1FMT0dJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfUkFZQ1MgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1NNQzkxQzkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9TUEVDVFJVTSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfU1lNNTNDNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9XTDM1MDEgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1hJUkMyUFMgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1hJUkNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDU1BLUl9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19QRDY3MjkgaXMgbm90IHNldAorIyBDT05GSUdfUERBX1BPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkNQVV9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJDUFVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0VWRU5UU19BTURfUE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfUEVSU0lTVEVOVF9LRVlSSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorIyBDT05GSUdfUEhZX0NBREVOQ0VfRFAgaXMgbm90IHNldAorIyBDT05GSUdfUEhZX0NBREVOQ0VfRFBIWSBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlfQ0FERU5DRV9TSUVSUkEgaXMgbm90IHNldAorIyBDT05GSUdfUEhZX0NQQ0FQX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlfRVhZTk9TX0RQX1ZJREVPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWV9FWFlOT1NfTUlQSV9WSURFTyBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlfRlNMX0lNWDhNUV9VU0IgaXMgbm90IHNldAorIyBDT05GSUdfUEhZX01BUFBIT05FX01ETTY2MDAgaXMgbm90IHNldAorIyBDT05GSUdfUEhZX01JWEVMX01JUElfRFBIWSBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlfT0NFTE9UX1NFUkRFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlfUFhBXzI4Tk1fSFNJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlfUFhBXzI4Tk1fVVNCMiBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlfUUNPTV9EV0MzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWV9RQ09NX1VTQl9IUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlfUUNPTV9VU0JfSFNJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlfU0FNU1VOR19VU0IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWV9UVVNCMTIxMCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlfWEdFTkUgaXMgbm90IHNldAorIyBDT05GSUdfUEk0MzMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX0lOX0NPTlRFWFRJRFIgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKK0NPTkZJR19QSU5DT05GPXkKKyMgQ09ORklHX1BJTkNUUkwgaXMgbm90IHNldAorIyBDT05GSUdfUElOQ1RSTF9BTUQgaXMgbm90IHNldAorIyBDT05GSUdfUElOQ1RSTF9BWFAyMDkgaXMgbm90IHNldAorIyBDT05GSUdfUElOQ1RSTF9DRURBUkZPUksgaXMgbm90IHNldAorIyBDT05GSUdfUElOQ1RSTF9FWFlOT1MgaXMgbm90IHNldAorIyBDT05GSUdfUElOQ1RSTF9FWFlOT1M1NDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJTkNUUkxfSUNFTEFLRSBpcyBub3Qgc2V0CisjIENPTkZJR19QSU5DVFJMX0lOR0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfUElOQ1RSTF9NQ1AyM1MwOCBpcyBub3Qgc2V0CisjIENPTkZJR19QSU5DVFJMX01TTThYNzQgaXMgbm90IHNldAorIyBDT05GSUdfUElOQ1RSTF9PQ0VMT1QgaXMgbm90IHNldAorQ09ORklHX1BJTkNUUkxfU0lOR0xFPXkKKyMgQ09ORklHX1BJTkNUUkxfU1RNRlggaXMgbm90IHNldAorIyBDT05GSUdfUElOQ1RSTF9TWDE1MFggaXMgbm90IHNldAorQ09ORklHX1BJTk1VWD15CisjIENPTkZJR19QS0NTN19NRVNTQUdFX1BBUlNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QTDMxMF9FUlJBVEFfNTg4MzY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BMMzEwX0VSUkFUQV83Mjc5MTUgaXMgbm90IHNldAorIyBDT05GSUdfUEwzMTBfRVJSQVRBXzc1Mzk3MCBpcyBub3Qgc2V0CisjIENPTkZJR19QTDMxMF9FUlJBVEFfNzY5NDE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BMMzIwX01CT1ggaXMgbm90IHNldAorIyBDT05GSUdfUEwzMzBfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BMQVRGT1JNX01IVSBpcyBub3Qgc2V0CisjIENPTkZJR19QTEFUX1NQRUFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BMSVAgaXMgbm90IHNldAorQ09ORklHX1BMVUdJTl9IT1NUQ0M9IiIKKyMgQ09ORklHX1BMWF9IRVJNRVMgaXMgbm90IHNldAorIyBDT05GSUdfUE0gaXMgbm90IHNldAorIyBDT05GSUdfUE1CVVMgaXMgbm90IHNldAorIyBDT05GSUdfUE1DX01TUCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfUE1TNzAwMyBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9BVVRPU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUE1fREVWRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9XQUtFTE9DS1MgaXMgbm90IHNldAorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19QT1NJWF9USU1FUlM9eQorIyBDT05GSUdfUE9XRVJDQVAgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfQVZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1JFU0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1JFU0VUX0JSQ01LT05BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1JFU0VUX0JSQ01TVEIgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfUkVTRVRfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9SRVNFVF9HUElPX1JFU1RBUlQgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfUkVTRVRfTFRDMjk1MiBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9SRVNFVF9QSUlYNF9QT1dFUk9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9SRVNFVF9SRVNUQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1JFU0VUX1NZU0NPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9SRVNFVF9TWVNDT05fUE9XRVJPRkYgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfUkVTRVRfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1JFU0VUX1hHRU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFlfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQzR4eF9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzI1NktfUEFHRVMgaXMgbm90IHNldAorQ09ORklHX1BQQ180S19QQUdFUz15CisjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRU1VTEFURURfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VQQVBSX0hWX0JZVEVDSEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBPQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9BU1lOQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBfQlNEQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUFBfREVGTEFURSBpcyBub3Qgc2V0CitDT05GSUdfUFBQX0ZJTFRFUj15CisjIENPTkZJR19QUFBfTVBQRSBpcyBub3Qgc2V0CitDT05GSUdfUFBQX01VTFRJTElOSz15CisjIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAorIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQU19DTElFTlRfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19QUFNfQ0xJRU5UX0tUSU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFNfQ0xJRU5UX0xESVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQU19DTElFTlRfUEFSUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19QUFNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUFBUUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRJUlFfREVMQVlfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUSVJRX0VWRU5UUyBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19QUklOVEs9eQorIyBDT05GSUdfUFJJTlRLX0NBTExFUiBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRLX05NST15CitDT05GSUdfUFJJTlRLX1NBRkVfTE9HX0JVRl9TSElGVD0xMworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CisjIENPTkZJR19QUklTTTJfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAorIyBDT05GSUdfUFJPQ19DSElMRFJFTiBpcyBub3Qgc2V0CitDT05GSUdfUFJPQ19GUz15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0NfU1RSSVBQRUQgaXMgbm90IHNldAorQ09ORklHX1BST0NfU1lTQ1RMPXkKKyMgQ09ORklHX1BST0NfVk1DT1JFX0RFVklDRV9EVU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9SQ1VfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9SQ1VfUkVQRUFURURMWSBpcyBub3Qgc2V0CisjIENPTkZJR19QU0FNUExFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BTQjY5NzBfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BTSSBpcyBub3Qgc2V0CisjIENPTkZJR19QU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfUFRQXzE1ODhfQ0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUFRQXzE1ODhfQ0xPQ0tfSVhQNDZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BUUF8xNTg4X0NMT0NLX0tWTSBpcyBub3Qgc2V0CisjIENPTkZJR19QVFBfMTU4OF9DTE9DS19QQ0ggaXMgbm90IHNldAorIyBDT05GSUdfUFVCTElDX0tFWV9BTEdPX1JTQSBpcyBub3Qgc2V0CisjIENPTkZJR19QVlBBTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BXTSBpcyBub3Qgc2V0CisjIENPTkZJR19QV01fRlNMX0ZUTSBpcyBub3Qgc2V0CisjIENPTkZJR19QV01fUENBOTY4NSBpcyBub3Qgc2V0CitDT05GSUdfUFdSU0VRX0VNTUM9eQorIyBDT05GSUdfUFdSU0VRX1NEODc4NyBpcyBub3Qgc2V0CitDT05GSUdfUFdSU0VRX1NJTVBMRT15CisjIENPTkZJR19RQ0E3MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FDQTcwMDBfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FDQTcwMDBfVUFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19RQ09NX0VNQUMgaXMgbm90IHNldAorIyBDT05GSUdfUUNPTV9GQUxLT1JfRVJSQVRVTV8xMDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FDT01fRkFMS09SX0VSUkFUVU1fMTAwOSBpcyBub3Qgc2V0CisjIENPTkZJR19RQ09NX0ZBTEtPUl9FUlJBVFVNX0UxMDQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FDT01fSElETUEgaXMgbm90IHNldAorIyBDT05GSUdfUUNPTV9ISURNQV9NR01UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FDT01fUURGMjQwMF9FUlJBVFVNXzAwNjUgaXMgbm90IHNldAorIyBDT05GSUdfUUNPTV9TUE1JX0FEQzUgaXMgbm90IHNldAorIyBDT05GSUdfUUNPTV9TUE1JX0lBREMgaXMgbm90IHNldAorIyBDT05GSUdfUUNPTV9TUE1JX1RFTVBfQUxBUk0gaXMgbm90IHNldAorIyBDT05GSUdfUUNPTV9TUE1JX1ZBREMgaXMgbm90IHNldAorIyBDT05GSUdfUUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfUUxDTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMR0UgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RT1JJUV9DUFVGUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FPUklRX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FVRVVFRF9MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfUVVPVEFDVEwgaXMgbm90IHNldAorIyBDT05GSUdfUVVPVEFfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUjYwNDAgaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfUjgxODhFVSBpcyBub3Qgc2V0CisjIENPTkZJR19SODcxMlUgaXMgbm90IHNldAorIyBDT05GSUdfUjg3MjNBVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19BREFQVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19BWlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fQ0FERVQgaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fR0VNVEVLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRElPX01BWElSQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19SVFJBQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fUlRSQUNLMiBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19TRjE2Rk1JIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRElPX1NGMTZGTVIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRElPX1RFUlJBVEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRElPX1RSVVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRElPX1RZUEhPT04gaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fWk9MVFJJWCBpcyBub3Qgc2V0CisjIENPTkZJR19SQUlENl9QUV9CRU5DSE1BUksgaXMgbm90IHNldAorIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19SQUxJTksgaXMgbm90IHNldAorIyBDT05GSUdfUkFORE9NMzJfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkFORE9NSVpFX0JBU0UgaXMgbm90IHNldAorIyBDT05GSUdfUkFORE9NX1RSVVNUX0JPT1RMT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfUkFORE9NX1RSVVNUX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVBJRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBUyBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JCVFJFRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9CT09TVCBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0NQVV9TVEFMTF9USU1FT1VUPTYwCisjIENPTkZJR19SQ1VfRVFTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9FWFBFRElURV9CT09UIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRVhQRVJUPXkKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCitDT05GSUdfUkNVX0ZBTk9VVF9MRUFGPTE2CisjIENPTkZJR19SQ1VfRkFTVF9OT19IWiBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0tUSFJFQURfUFJJTz0wCisjIENPTkZJR19SQ1VfTk9DQl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1BFUkZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfVE9SVFVSRV9URVNUX1NMT1dfSU5JVF9ERUxBWT0zCisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUkNfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDX0RFQ09ERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDX0xPT1BCQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDX01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAorIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfUkRfR1pJUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWjQgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk8gaXMgbm90IHNldAorIyBDT05GSUdfUkRfWFogaXMgbm90IHNldAorIyBDT05GSUdfUkVBREFCTEVfQVNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQURfT05MWV9USFBfRk9SX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFRFdPT0QgaXMgbm90IHNldAorIyBDT05GSUdfUkVFRF9TT0xPTU9OX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkVGQ09VTlRfRlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdNQVAgaXMgbm90IHNldAorIyBDT05GSUdfUkVHTUFQX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdNQVBfTU1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdNQVBfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfODhQRzg2WCBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfQUNUODg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfQUQ1Mzk4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9BTkFUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0RBOTIxMCBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfREE5MjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfRkFONTM1NTUgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0lTTDYyNzFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9JU0w5MzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9MUDM5NzEgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0xQMzk3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfTFA4NzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9MUDg3NTUgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0xUQzM1ODkgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0xUQzM2NzYgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX01BWDE1ODYgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX01BWDg2NDkgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX01BWDg2NjAgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX01BWDg5NTIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX01BWDg5NzMgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX01DUDE2NTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9NVDYzMTEgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1BGVVpFMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9QVjg4MDYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9QVjg4MDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9QVjg4MDkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9QV00gaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1NMRzUxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9TWTgxMDZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9TWTg4MjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9USV9BQkIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1RQUzUxNjMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9UUFM2MjM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVFBTNjUwMjMgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9UUFM2NTEzMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVFBTNjUyNFggaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1VTRVJTUEFDRV9DT05TVU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVkNUUkwgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19SRUlTRVJGU19GU19YQVRUUj15CisjIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkVMT0NBVEFCTEUgaXMgbm90IHNldAorIyBDT05GSUdfUkVNT1RFUFJPQyBpcyBub3Qgc2V0CisjIENPTkZJR19SRU5FU0FTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRVNFVF9BVEg3OSBpcyBub3Qgc2V0CisjIENPTkZJR19SRVNFVF9CRVJMSU4gaXMgbm90IHNldAorIyBDT05GSUdfUkVTRVRfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRVNFVF9JTVg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFU0VUX0xBTlRJUSBpcyBub3Qgc2V0CisjIENPTkZJR19SRVNFVF9MUEMxOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFU0VUX01FU09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFU0VUX1BJU1RBQ0hJTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRVNFVF9TT0NGUEdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFU0VUX1NUTTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFU0VUX1NVTlhJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFU0VUX1RFR1JBX0JQTVAgaXMgbm90IHNldAorIyBDT05GSUdfUkVTRVRfVElfU1lTQ09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFU0VUX1pZTlEgaXMgbm90IHNldAorIyBDT05GSUdfUkZENzc0MDIgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CitDT05GSUdfUkZLSUxMPXkKKyMgQ09ORklHX1JGS0lMTF9GVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTF9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTF9JTlBVVCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTExfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTExfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JJTkdfQlVGRkVSX0JFTkNITUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19SSU5HX0JVRkZFUl9TVEFSVFVQX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUk1JNF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JNTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPQ0tDSElQX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19ST0NLRVIgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBNU0dfUUNPTV9HTElOS19SUE0gaXMgbm90IHNldAorIyBDT05GSUdfUlBNU0dfVklSVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQUjA1MjEgaXMgbm90IHNldAorIyBDT05GSUdfUlNFUSBpcyBub3Qgc2V0CisjIENPTkZJR19SVDJYMDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0FCQjVaRVMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQUJFT1o5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQUJYODBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQVJNQURBMzhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQVUxWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9DQURFTkNFIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX0NNT1M9eQorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzMDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzMDdfQ0VOVFVSWSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTMwN19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM0MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM0NyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY4NV9GQU1JTFkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzI0MDQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzMyMzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9FTTMwMjcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9FUDkzWFggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GVFJUQzAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9ISURfU0VOU09SX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9IWU04NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwMjIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0paNDc0MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ5MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkxNiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01DUDc5NSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01PWEFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01QQzUxMjEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODUwNjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODUzNjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BMMDMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUEwwMzEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QUzMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QVDdDNDMzOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1I3MzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JUQzczMDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SVjMwMjggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SVjMwMjlDMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JWODgwMyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYNDU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYNjExMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TRDMwNzggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TTlZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVU42SSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWEdFTkUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9aWU5RTVAgaXMgbm90IHNldAorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19MSUI9eQorIyBDT05GSUdfUlRDX05WTUVNIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfU1lTVE9IQz15CitDT05GSUdfUlRDX1NZU1RPSENfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRMODE4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVEw4MTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUTDgxOTJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUTDgxOTJVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUTDgzMDZfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUTDgzNjZSQl9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUlRMODM2NlNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUTDgzNjZfU01JIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUTDgzNjZfU01JX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUTDgzNjdCX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SVEw4MzY3X1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SVExMSUIgaXMgbm90IHNldAorIyBDT05GSUdfUlRMX0NBUkRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUUzUyMDggaXMgbm90IHNldAorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfUlVOVElNRV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUlVOVElNRV9URVNUSU5HX01FTlU9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX1JYS0FEPXkKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1TVU5HX0xBUFRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0FDQVJEX0FIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfQUhDSV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0RXQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0ZTTCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0hJR0hCQU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAorQ09ORklHX1NBVEFfTU9CSUxFX0xQTV9QT0xJQ1k9MAorIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUE1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUFJPTUlTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUkNBUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJTCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU1ZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQkNfRklUUEMyX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TQklUTUFQPXkKKyMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0NBMzAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0FDSEVfREVCVUdGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0MgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9BVVRPR1JPVVAgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NDSEVEX0hSVElDSz15CisjIENPTkZJR19TQ0hFRF9NQyBpcyBub3Qgc2V0CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX1NDSEVEX1NNVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9TVEFDS19FTkRfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDUjI0WCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzcwMDBGQVNTVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUhBMTUyWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FIQTE1NDIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BTTUzQzk3NCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JOWDJYX0ZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DSEVMU0lPX0ZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NYR0I0X0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EVEMzMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0VTQVMyUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkRPTUFJTl9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dFTkVSSUNfTkNSNTM4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dFTkVSSUNfTkNSNTM4MF9NTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSElTSV9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU4yMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX01PRD15CisjIENPTkZJR19TQ1NJX01QVDJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NUFQzU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVFfREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlVNSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01ZUkIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NWVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkNSNTNDNDA2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QQVMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNODAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDX0ZBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU01BUlRQUUkgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NZTTUzQzQxNiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfVDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1UxNF8zNEYgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9VRlNIQ0QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9VTFRSQVNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9WSVJUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9XRDcxOVggaXMgbm90IHNldAorIyBDT05GSUdfU0N4MjAwX0FDQiBpcyBub3Qgc2V0CisjIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAorIyBDT05GSUdfU0RfQURDX01PRFVMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNUSU9OX01JU01BVENIX1dBUk5fT05MWT15CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNVUklUWV9ETUVTR19SRVNUUklDVD15CisjIENPTkZJR19TRUNVUklUWV9MT0FEUElOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0xPQ0tET1dOX0xTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9QQVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX1NBRkVTRVRJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0FWQ19TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0JPT1RQQVJBTSBpcyBub3Qgc2V0CitDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9DSEVDS1JFUVBST1RfVkFMVUU9MAorIyBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ERVZFTE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfWUFNQSBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CisjIENPTkZJR19TRU5TSVJJT05fU0dQMzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BQklUVUdVUlUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BQklUVUdVUlUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUNQSV9QT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzMxNCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEQzEyOEQ4MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTI3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFMxMDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEUzc4NzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3MzEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0MTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BTUM2ODIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVBEUzk5MFggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BUFBMRVNNQyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FTMzcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVNCMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVNDNzYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FTUEVFRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUSzAxMTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0JIMTc3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0JIMTc4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0NPUkVURU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfREVMTF9TTU0gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFM2MjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FTUMxNDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRU1DMjEwMyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0VNQzZXMjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZBTTE1SF9QT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZTQ0hNRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0ZUU1RFVVRBVEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRzc2MEEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HNzYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HUElPX0ZBTiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dTQyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0hEQVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSElINjEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0hNQzU4NDMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19ITUM1ODQzX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0hNQzU4NDNfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSFRVMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JNTUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JQk1fQ0ZGUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JSU9fSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JTkEyMDkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JTkEyWFggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JTkEzMjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSU5TUFVSX0lQU1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVIzNTIyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lSMzgwNjQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JUlBTNTQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lTTDI5MDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVNMMjkwMjggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JU0w2ODEzNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19KQzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSzEwVEVNUCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0s4VEVNUCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xJTkVBR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MSVMzTFYwMkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MSVMzX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xJUzNfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE0yNTA2NiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTk1MjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05NTI0MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTUyNDUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEMyOTQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDMjk3OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzI5OTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEMzODE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDE1MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyMTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRRX0NQVVRFTVAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxMTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYwNjQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjA2NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMjA3NTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgzMTcyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDMxNzg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMzE3OTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgzNDQ0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2NjM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjY0MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2Njk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYODY4OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01DUDMwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19OQ1Q2NjgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTkNUNjc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX05DVDc4MDIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19OQ1Q3OTA0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTlBDTTdYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX05TQTMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX05UQ19USEVSTUlTVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfT0NDX1A4X0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BNQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUE9XUjEyMjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QV01fRkFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUFhFMTYxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1JNMzEwMF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19STTMxMDBfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0NINTYyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NDSDU2MzYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TQ0g1NlhYX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NIVDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0hUMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSFQzeCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NIVEMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNTTY2NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TVFRTNzUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEM2NTQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UQzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QMTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QMTAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QMTA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFBTNDA0MjIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UUFM1MzY3OSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVUNEOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1VDRDkyMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WRVhQUkVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WSUFfQ1BVVEVNUCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzczRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1hHRU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfWkw2MTAwIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MD15CisjIENPTkZJR19TRVJJQUxfODI1MF9BQ0NFTlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMXzgyNTBfQVNQRUVEX1ZVQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF84MjUwX0JPQ0EgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfQ1MgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMXzgyNTBfREVQUkVDQVRFRF9PUFRJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlEgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX0RNQT15CisjIENPTkZJR19TRVJJQUxfODI1MF9EVyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfODI1MF9FTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfODI1MF9FWEFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYQVJfU1QxNkM1NTQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMXzgyNTBfRklOVEVLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF84MjUwX0ZPVVJQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF84MjUwX0hVQjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMXzgyNTBfSU5HRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfODI1MF9MUFNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMXzgyNTBfTUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF84MjUwX01PWEEgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKKyMgQ09ORklHX1NFUklBTF84MjUwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfODI1MF9SU0EgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMXzgyNTBfUlQyODhYIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTIKKyMgQ09ORklHX1NFUklBTF9BTFRFUkFfSlRBR1VBUlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0FMVEVSQV9VQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9BTUJBX1BMMDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9BTUJBX1BMMDExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9BUkMgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0JDTTYzWFggaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0NPTkVYQU5UX0RJR0lDT0xPUiBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0RFVl9CVVMgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9FQVJMWUNPTj15CisjIENPTkZJR19TRVJJQUxfRUFSTFlDT05fQVJNX1NFTUlIT1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9GU0xfTElORkxFWFVBUlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0ZTTF9MUFVBUlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0dSTElCX0dBSVNMRVJfQVBCVUFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfSUZYNlg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9NQVgzMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9NQVgzMTBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNX05XUFNFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfUENIX1VBUlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX1JQMiBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfU0MxNklTN1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9TQ0NOWFAgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX1NIX1NDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfU0lGSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9TVE0zMiBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfU1RfQVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9USU1CRVJEQUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9VQVJUTElURSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfWElMSU5YX1BTX1VBUlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fQUxURVJBX1BTMiBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19BTUJBS01JIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX0FQQlBTMiBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19BUkNfUFMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX0NUODJDNzEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX0dQSU9fUFMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX0xJQlBTMiBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19QQVJLQkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1BTMk1VTFQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fU1VONElfUFMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CisjIENPTkZJR19TRkNfRkFMQ09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NGSSBpcyBub3Qgc2V0CisjIENPTkZJR19TRlAgaXMgbm90IHNldAorIyBDT05GSUdfU0dFVE1BU0tfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSVAzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHX1BPT0wgaXMgbm90IHNldAorIyBDT05GSUdfU0dfU1BMSVQgaXMgbm90IHNldAorQ09ORklHX1NITUVNPXkKKyMgQ09ORklHX1NIVUZGTEVfUEFHRV9BTExPQ0FUT1IgaXMgbm90IHNldAorIyBDT05GSUdfU0hfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX1RJTUVSX0NNVCBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9USU1FUl9NVFUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX1RJTUVSX1RNVSBpcyBub3Qgc2V0CisjIENPTkZJR19TSTExMzMgaXMgbm90IHNldAorIyBDT05GSUdfU0kxMTQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJNzAwNSBpcyBub3Qgc2V0CisjIENPTkZJR19TSTcwMjAgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfQ0FSTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9SSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAorQ09ORklHX1NJR05BTEZEPXkKKyMgQ09ORklHX1NJR05FRF9QRV9GSUxFX1ZFUklGSUNBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TSU1QTEVfUE1fQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJT1ggaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCSU5GTz15CisjIENPTkZJR19TTEFCX0ZSRUVMSVNUX0hBUkRFTkVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMQUJfRlJFRUxJU1RfUkFORE9NIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCX01FUkdFX0RFRkFVTFQ9eQorIyBDT05GSUdfU0xIQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTElDT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSU1CVVMgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKK0NPTkZJR19TTFVCX0NQVV9QQVJUSUFMPXkKKyMgQ09ORklHX1NMVUJfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX01FTUNHX1NZU0ZTX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfU01BUlRKT1lQTFVTX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfU01DOTE5NCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FDOTdfUE9XRVJfU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUQxODE2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUQxODQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FETElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BTEk1NDUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUxTMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BTFMzMDAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FMUzQwMDAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FSTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVNJSFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVElJWFAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FUSUlYUF9NT0RFTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVRNRUxfQUM5N0MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FUTUVMX1NPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVU4ODEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVTg4MjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FVODgzMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVVESU9fR1JBUEhfQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVVESU9fR1JBUEhfU0NVX0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FXMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVpUMjMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVpUMzMyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQkNEMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQlQ4N1ggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NBMDEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ01JODMzMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ01JUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzQyMzEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NTNDIzNiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1M0MjgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzQ2WFggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1M1NTM1QVVESU8gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NUWEZJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EQVJMQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EQVJMQTI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREVTSUdOV0FSRV9JMlMgaXMgbm90IHNldAorQ09ORklHX1NORF9EUklWRVJTPXkKKyMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VDSE8zRyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRURNQV9TT0MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU5TMTM3MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRVMxNjg4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FUzE4WFggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VTMTkzOCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRVMxOTY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9GSVJFV0lSRSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRk04MDEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0dJTkEyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfR0lOQTI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9HVVNDTEFTU0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9HVVNFWFRSRU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9HVVNNQVggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEQV9JTlRFTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSERBX0lOVEVMX0RFVEVDVF9ETUlDIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfSERBX1BPV0VSX1NBVkVfREVGQVVMVD0wCitDT05GSUdfU05EX0hEQV9QUkVBTExPQ19TSVpFPTY0CisjIENPTkZJR19TTkRfSERTUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSERTUE0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hSVElNRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hXREVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JMlNfSEk2MjEwX0kyUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSUNFMTcxMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSUNFMTcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09ESiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPREpYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09JTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPSU9YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTlRFTDhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5URUw4WDBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTlRFUldBVkUgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lOVEVSV0FWRV9TVEIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lTQSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSlo0NzQwX1NPQ19JMlMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0tJUktXT09EX1NPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfS09SRzEyMTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0xBWUxBMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0xBWUxBMjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0xPTEEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0xYNjQ2NEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NQUVTVFJPMyBpcyBub3Qgc2V0CitDT05GSUdfU05EX01BWF9DQVJEUz0xNgorIyBDT05GSUdfU05EX01JQSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlSTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlYQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVhFUl9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01PTkEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01QQzUyeHhfU09DX0VGSUtBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NVFM2NCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVhTX1NPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDNTQTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDNfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMNF9MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUFRJOTJYX0FEMTg0OCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BUSTkyWF9DUzQyMzEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QVEk5M1ggaXMgbm90IHNldAorQ09ORklHX1NORF9PU1NFTVVMPXkKKyMgQ09ORklHX1NORF9PWFlHRU4gaXMgbm90IHNldAorQ09ORklHX1NORF9QQ0k9eQorIyBDT05GSUdfU05EX1BDTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENNQ0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ01fT1NTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKKyMgQ09ORklHX1NORF9QQ01fVElNRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDTV9YUlVOX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ1hIUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUERBVURJT0NGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QT1JUTUFOMlg0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QT1dFUlBDX1NPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUFBDIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfUFJPQ19GUz15CisjIENPTkZJR19TTkRfUkFXTUlESSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUkFXTUlESV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JJUFRJREUgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUU5NiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FOTY1MiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUlRDVElNRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NCMTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NCOCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0JBV0UgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0U2WCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TSU1QTEVfQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0lNUExFX1NDVV9DQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TSVM3MDE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19BQzk3X0NPREVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfQURBVTE3MDEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19BREFVMTc2MV9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19BREFVMTc2MV9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19BREFVNzAwMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0FLNDEwNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0FLNDExOCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0FLNDQ1OCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0FLNDU1NCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0FLNDYxMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0FLNDY0MiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0FLNTM4NiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0FLNTU1OCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0FMQzU2MjMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19BTURfQUNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfQU1EX0FDUDN4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfQVUxWEFVRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfQVUxWFBTQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0JEMjg2MjMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19CVF9TQ08gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19DUzM1TDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfQ1MzNUwzMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0NTMzVMMzQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19DUzM1TDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfQ1MzNUwzNiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0NTNDI2NSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0NTNDI3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0NTNDI3MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0NTNDI3MV9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19DUzQyNzFfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfQ1M0Mkw0MiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0NTNDJMNTFfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfQ1M0Mkw1MiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0NTNDJMNTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19DUzQyTDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfQ1M0MlhYOF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19DUzQzMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfQ1M0MzQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfQ1M0MzQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfQ1M1M0wzMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0NYMjA3MlggaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19ESU8yMTI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfRE1JQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0VTNzEzNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0VTNzI0MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0VTODMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0VTODMyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0VTODMyOF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19FUzgzMjhfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfRVVLUkVBX1RMVjMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0ZTTF9BU09DX0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19GU0xfQVNSQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0ZTTF9BVURNSVggaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19GU0xfRVNBSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0ZTTF9NSUNGSUwgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19GU0xfU0FJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfRlNMX1NQRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfRlNMX1NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0dUTTYwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0lDUzQzNDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfSU1HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfSU1YX0FVRE1JWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0lNWF9BVURNVVggaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19JTVhfRVM4MzI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfSU1YX1NQRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfSU1YX1dNODk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0lOTk9fUkszMDM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfSU5URUxfQVBMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfSU5URUxfQkFZVFJBSUwgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19JTlRFTF9CRFdfUlQ1Njc3X01BQ0ggaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19JTlRFTF9CWFRfREE3MjE5X01BWDk4MzU3QV9NQUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfSU5URUxfQlhUX1JUMjk4X01BQ0ggaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19JTlRFTF9CWVRDUl9SVDU2NDBfTUFDSCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0lOVEVMX0JZVENSX1JUNTY1MV9NQUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfSU5URUxfQllUX0NIVF9EQTcyMTNfTUFDSCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0lOVEVMX0JZVF9DSFRfRVM4MzE2X01BQ0ggaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19JTlRFTF9CWVRfQ0hUX05PQ09ERUNfTUFDSCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0lOVEVMX0JZVF9NQVg5ODA5MF9NQUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfSU5URUxfQllUX1JUNTY0MF9NQUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfSU5URUxfQ0ZMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfSU5URUxfQ0hUX0JTV19NQVg5ODA5MF9USV9NQUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfSU5URUxfQ0hUX0JTV19OQVU4ODI0X01BQ0ggaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19JTlRFTF9DSFRfQlNXX1JUNTY0NV9NQUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfSU5URUxfQ0hUX0JTV19SVDU2NzJfTUFDSCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0lOVEVMX0NNTF9IIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfSU5URUxfQ01MX0xQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfSU5URUxfQ05MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfSU5URUxfR0xLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfSU5URUxfSEFTV0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0lOVEVMX0tCTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0lOVEVMX0tCTF9SVDU2NjNfTUFYOTg5MjdfTUFDSCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX0lOVEVMX0tCTF9SVDU2NjNfUlQ1NTE0X01BWDk4OTI3X01BQ0ggaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19JTlRFTF9TS0wgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19JTlRFTF9TS0xfTkFVODhMMjVfTUFYOTgzNTdBX01BQ0ggaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19JTlRFTF9TS0xfTkFVODhMMjVfU1NNNDU2N19NQUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfSU5URUxfU0tMX1JUMjg2X01BQ0ggaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19JTlRFTF9TS1lMQUtFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfSU5URUxfU1NUIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU09DX0lOVEVMX1NTVF9UT1BMRVZFTD15CisjIENPTkZJR19TTkRfU09DX0paNDcyNUJfQ09ERUMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19KWjQ3NDBfQ09ERUMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19NQTEyMFgwUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX01BWDk3NTkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19NQVg5ODA4OCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX01BWDk4MzU3QSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX01BWDk4MzczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfTUFYOTg1MDQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19NQVg5ODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfTUFYOTg2NyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX01BWDk4OTI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfTUVESUFURUsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19NUEM1MjAwX0FDOTcgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19NUEM1MjAwX0kyUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX01TTTg5MTZfV0NEX0FOQUxPRyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX01TTTg5MTZfV0NEX0RJR0lUQUwgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19NVDI3MDEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19NVDYzNTEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19NVDYzNTggaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19NVDgxNzMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19NVEtfQlRDVlNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfTkFVODU0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX05BVTg4MTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19OQVU4ODIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfTkFVODgyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX1BDTTE2ODEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19QQ00xNzg5X0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX1BDTTE3OTJBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfUENNMTc5WF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19QQ00xNzlYX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX1BDTTE4NlhfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfUENNMTg2WF9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19QQ00zMDYwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX1BDTTMwNjBfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfUENNMzE2OEFfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfUENNMzE2OEFfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfUENNNTEyeF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19QQ001MTJ4X1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX1FDT00gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19SSzMzMjggaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19SVDU2MTYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19SVDU2MzEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19SVDU2NzdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfU0dUTDUwMDAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19TSU1QTEVfQU1QTElGSUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfU0lSRl9BVURJT19DT0RFQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX1NPRl9UT1BMRVZFTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX1NQRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfU1NNMjMwNSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX1NTTTI2MDJfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfU1NNMjYwMl9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19TU000NTY3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfU1RBMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfU1RBMzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfU1RJX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX1RBUzI1NTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19UQVM1MDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfVEFTNTcxWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX1RBUzU3MjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19UQVM2NDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfVERBNzQxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX1RGQTk4NzkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19UTFYzMjBBSUMyM19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19UTFYzMjBBSUMyM19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19UTFYzMjBBSUMzMVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfVExWMzIwQUlDMzJYNF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19UTFYzMjBBSUMzMlg0X1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX1RMVjMyMEFJQzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfVFBBNjEzMEEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfVFMzQTIyN0UgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19UU0NTNDJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX1RTQ1M0NTQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19VREExMzM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfV004NTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfV004NTIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfV004NTI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfV004NTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfV004NzExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfV004NzI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfV004NzMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfV004NzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfV004NzQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfV004NzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfV004NzUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfV004NzcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfV004Nzc2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfV004NzgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfV004ODA0X0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX1dNODgwNF9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19XTTg5MDMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19XTTg5MDQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19XTTg5NjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19XTTg5NjIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19XTTg5NzQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19XTTg5NzggaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19XTTg5ODUgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19YSUxJTlhfQVVESU9fRk9STUFUVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0NfWElMSU5YX0kyUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX1hJTElOWF9TUERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DX1hURlBHQV9JMlMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQ19aWF9BVUQ5NlAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09OSUNWSUJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TU0NBUEUgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NTVF9BVE9NX0hJRkkyX1BMQVRGT1JNX0FDUEkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NTVF9BVE9NX0hJRkkyX1BMQVRGT1JNX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU1VONElfQ09ERUMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVElNRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1RSSURFTlQgaXMgbm90IHNldAorQ09ORklHX1NORF9VU0I9eQorIyBDT05GSUdfU05EX1VTQl82RklSRSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVVNCX0FVRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0JfQ0FJQVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQl9ISUZBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQl9QT0QgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQl9QT0RIRCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVVNCX1RPTkVQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0JfVUExMDEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQl9VUzEyMkwgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQl9VU1gyWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVVNCX1ZBUklBWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CisjIENPTkZJR19TTkRfVklBODJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVklBODJYWF9NT0RFTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVklSVFVPU08gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WWFBPQ0tFVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfV0FWRUZST05UIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfWDg2PXkKKyMgQ09ORklHX1NORF9YRU5fRlJPTlRFTkQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAorIyBDT05GSUdfU09DSU9ORVhUX1NZTlFVQUNFUl9QUkVJVFMgaXMgbm90IHNldAorIyBDT05GSUdfU09DS19DR1JPVVBfREFUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TT0NfQU0zM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPQ19BTTQzWFggaXMgbm90IHNldAorIyBDT05GSUdfU09DX0JSQ01TVEIgaXMgbm90IHNldAorIyBDT05GSUdfU09DX0NBTUVSQSBpcyBub3Qgc2V0CisjIENPTkZJR19TT0NfRFJBN1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPQ19IQVNfT01BUDJfU0RSQyBpcyBub3Qgc2V0CisjIENPTkZJR19TT0NfT01BUDUgaXMgbm90IHNldAorIyBDT05GSUdfU09DX1RJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPRlRMT0NLVVBfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09OWVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTllfTEFQVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EV0lSRSBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9PU1NfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTSBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CisjIENPTkZJR19TUDUxMDBfVENPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VfUkNVX1BPSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfU1BFQUtVUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJTkxPQ0tfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfQUxURVJBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9BVTE1NTAgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0FYSV9TUElfRU5HSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9CQ00yODM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9CQ01fUVNQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfQlVUVEVSRkxZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9DQURFTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9DQURFTkNFX1FVQURTUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9ERVNJR05XQVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9GU0xfRFNQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfRlNMX0VTUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0ZTTF9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0dQSU9fT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9JTUdfU1BGSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTE03MF9MTFAgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0xPT1BCQUNLX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NUEM1Mnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NUEM1Mnh4X1BTQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTVRLX1FVQURTUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01YSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX05YUF9GTEVYU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9PQ1RFT04gaXMgbm90IHNldAorIyBDT05GSUdfU1BJX09DX1RJTlkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX09SSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9QTDAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfUFBDNHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9QWEEyWFggaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1BYQTJYWF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1FDT01fUVNQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfUk9DS0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1MzQzY0WFggaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1NDMThJUzYwMiBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfU0lGSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9TTEFWRSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9USFVOREVSWCBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfVElfUVNQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfVE9QQ0xJRkZfUENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9YQ09NTSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfWElMSU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9YV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9aWU5RTVBfR1FTUEkgaXMgbm90IHNldAorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1NQTUkgaXMgbm90IHNldAorIyBDT05GSUdfU1BTMzAgaXMgbm90IHNldAorQ09ORklHX1NRVUFTSEZTPXkKKyMgQ09ORklHX1NRVUFTSEZTXzRLX0RFVkJMS19TSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTX0RFQ09NUF9NVUxUSSBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlNfREVDT01QX01VTFRJX1BFUkNQVT15CisjIENPTkZJR19TUVVBU0hGU19ERUNPTVBfU0lOR0xFIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGU19FTUJFRERFRD15CisjIENPTkZJR19TUVVBU0hGU19GSUxFX0NBQ0hFIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGU19GSUxFX0RJUkVDVD15CitDT05GSUdfU1FVQVNIRlNfRlJBR01FTlRfQ0FDSEVfU0laRT0zCisjIENPTkZJR19TUVVBU0hGU19MWjQgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlNfTFpPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGU19YWj15CisjIENPTkZJR19TUVVBU0hGU19aTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTX1pTVEQgaXMgbm90IHNldAorIyBDT05GSUdfU1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19TUkYwNCBpcyBub3Qgc2V0CisjIENPTkZJR19TUkYwOCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorIyBDT05GSUdfU1NCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTQl9EUklWRVJfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TU0JfSE9TVF9TT0MgaXMgbm90IHNldAorIyBDT05GSUdfU1NCX1BDTUNJQUhPU1QgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0JfU0RJT0hPU1QgaXMgbm90IHNldAorIyBDT05GSUdfU1NCX1NJTEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS1BST1RFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS1BST1RFQ1RPUl9TVFJPTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tUUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19WQUxJREFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFHSU5HPXkKKyMgQ09ORklHX1NUQUdJTkdfQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lOR19HQVNLRVRfRlJBTUVXT1JLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkdfTUVESUEgaXMgbm90IHNldAorQ09ORklHX1NUQU5EQUxPTkU9eQorIyBDT05GSUdfU1RBVElDX0tFWVNfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfU1RBVElDX1VTRVJNT0RFSEVMUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19TVERCSU5VVElMUz15CisjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURV9NT0RFTV9SUFJPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEszMzEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUSzgzMTIgaXMgbm90IHNldAorIyBDT05GSUdfU1RLOEJBNTAgaXMgbm90IHNldAorIyBDT05GSUdfU1RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUTU1BQ19FVEggaXMgbm90IHNldAorIyBDT05GSUdfU1RNTUFDX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19TVE1NQUNfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfU1RNX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUTV9TT1VSQ0VfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfU1RQPXkKKyMgQ09ORklHX1NUUkVBTV9QQVJTRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSUNUX0RFVk1FTSBpcyBub3Qgc2V0CitDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1g9eQorQ09ORklHX1NUUklDVF9NT0RVTEVfUldYPXkKKyMgQ09ORklHX1NUUklOR19TRUxGVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfU1RSSVBfQVNNX1NZTVM9eQorIyBDT05GSUdfU1RYMTA0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUX1VWSVMyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TVU40SV9HUEFEQyBpcyBub3Qgc2V0CisjIENPTkZJR19TVU41MElfREUyX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19TVU41MElfRVJSQVRVTV9VTktOT1dOMSBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfU1VOUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTlJQQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU1VOUlBDX0RJU0FCTEVfSU5TRUNVUkVfRU5DVFlQRVM9eQorIyBDT05GSUdfU1VOUlBDX0dTUyBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5YSV9TUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VSRkFDRV8zX0JVVFRPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVVNQRU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVU1BFTkRfU0tJUF9TWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TV0FQPXkKKyMgQ09ORklHX1NXQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NXQ09ORklHX0I1MyBpcyBub3Qgc2V0CisjIENPTkZJR19TV0NPTkZJR19CNTNfTURJT19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1dDT05GSUdfQjUzX01NQVBfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NXQ09ORklHX0I1M19TUElfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NXQ09ORklHX0I1M19TUkFCX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TV0NPTkZJR19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NXX1NZTkMgaXMgbm90IHNldAorIyBDT05GSUdfU1g5NTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NYR0JFX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5DX0ZJTEUgaXMgbm90IHNldAorIyBDT05GSUdfU1lOT1BTWVNfRFdDX0VUSF9RT1MgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKKyMgQ09ORklHX1NZU0NPTl9SRUJPT1RfTU9ERSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGUz15CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAorIyBDT05GSUdfU1lTRlNfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNURU1QT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1RFTV9CTEFDS0xJU1RfS0VZUklORyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNURU1fREFUQV9WRVJJRklDQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVEVNX1RSVVNURURfS0VZUklORyBpcyBub3Qgc2V0CitDT05GSUdfU1lTVEVNX1RSVVNURURfS0VZUz0iIgorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19UNTQwMyBpcyBub3Qgc2V0CisjIENPTkZJR19UQVJHRVRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tfWEFDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEMzNTgxNSBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfVENHX0NSQiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfRlRQTV9URUUgaXMgbm90IHNldAorIyBDT05GSUdfVENHX0lORklORU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19OU0MgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1NUMzNfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19USVMgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RJU19JMkNfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RJU19JMkNfSU5GSU5FT04gaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RJU19JMkNfTlVWT1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVElTX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVElTX1NUMzNaUDI0X0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVElTX1NUMzNaUDI0X1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19WVFBNX1BST1hZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19YRU4gaXMgbm90IHNldAorIyBDT05GSUdfVENJQyBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQURWQU5DRUQ9eQorIyBDT05GSUdfVENQX0NPTkdfQkJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX0JJQyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfQ09OR19DREcgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKKyMgQ09ORklHX1RDUF9DT05HX0RDVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX0hTVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX0hUQ1AgaXMgbm90IHNldAorIyBDT05GSUdfVENQX0NPTkdfSFlCTEEgaXMgbm90IHNldAorIyBDT05GSUdfVENQX0NPTkdfSUxMSU5PSVMgaXMgbm90IHNldAorIyBDT05GSUdfVENQX0NPTkdfTFAgaXMgbm90IHNldAorIyBDT05GSUdfVENQX0NPTkdfTlYgaXMgbm90IHNldAorIyBDT05GSUdfVENQX0NPTkdfU0NBTEFCTEUgaXMgbm90IHNldAorIyBDT05GSUdfVENQX0NPTkdfVkVHQVMgaXMgbm90IHNldAorIyBDT05GSUdfVENQX0NPTkdfVkVOTyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfQ09OR19XRVNUV09PRCBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfQ09OR19ZRUFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfVENTMzQxNCBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1MzNDcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFRSBpcyBub3Qgc2V0CisjIENPTkZJR19URUdSQV9BSEIgaXMgbm90IHNldAorIyBDT05GSUdfVEVHUkFfSE9TVDFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19URVJBTkVUSUNTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19URVNUX0FTWU5DX0RSSVZFUl9QUk9CRSBpcyBub3Qgc2V0CisjIENPTkZJR19URVNUX0JJVEZJRUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFU1RfQklUTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFU1RfQkxBQ0tIT0xFX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19URVNUX0JQRiBpcyBub3Qgc2V0CisjIENPTkZJR19URVNUX0ZJUk1XQVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFU1RfSEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19URVNUX0hFWERVTVAgaXMgbm90IHNldAorIyBDT05GSUdfVEVTVF9JREEgaXMgbm90IHNldAorIyBDT05GSUdfVEVTVF9LTU9EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFU1RfS1NUUlRPWCBpcyBub3Qgc2V0CisjIENPTkZJR19URVNUX0xJU1RfU09SVCBpcyBub3Qgc2V0CisjIENPTkZJR19URVNUX0xLTSBpcyBub3Qgc2V0CisjIENPTkZJR19URVNUX01FTUNBVF9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFU1RfTUVNSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19URVNUX09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFU1RfUE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVEVTVF9QUklOVEYgaXMgbm90IHNldAorIyBDT05GSUdfVEVTVF9SSEFTSFRBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFU1RfU09SVCBpcyBub3Qgc2V0CisjIENPTkZJR19URVNUX1NUQUNLSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19URVNUX1NUQVRJQ19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFU1RfU1RSSU5HX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfVEVTVF9TVFJTQ1BZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFU1RfU1lTQ1RMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFU1RfVURFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFU1RfVVNFUl9DT1BZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFU1RfVVVJRCBpcyBub3Qgc2V0CisjIENPTkZJR19URVNUX1ZNQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfVEVTVF9YQVJSQVkgaXMgbm90IHNldAorQ09ORklHX1RFWFRTRUFSQ0g9eQorIyBDT05GSUdfVEVYVFNFQVJDSF9CTSBpcyBub3Qgc2V0CisjIENPTkZJR19URVhUU0VBUkNIX0ZTTSBpcyBub3Qgc2V0CisjIENPTkZJR19URVhUU0VBUkNIX0tNUCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfREVGQVVMVF9HT1ZfRkFJUl9TSEFSRSBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0RFRkFVTFRfR09WX1BPV0VSX0FMTE9DQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0RFRkFVTFRfR09WX1VTRVJfU1BBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9FTVVMQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9HT1ZfQkFOR19CQU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfR09WX0ZBSVJfU0hBUkUgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9HT1ZfUE9XRVJfQUxMT0NBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfR09WX1VTRVJfU1BBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX01NSU8gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfV1JJVEFCTEVfVFJJUFMgaXMgbm90IHNldAorIyBDT05GSUdfVEhJTktQQURfQUNQSSBpcyBub3Qgc2V0CitDT05GSUdfVEhJTl9BUkNISVZFUz15CisjIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAorIyBDT05GSUdfVEhVTUIyX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19USFVOREVSQk9MVCBpcyBub3Qgc2V0CisjIENPTkZJR19USFVOREVSX05JQ19CR1ggaXMgbm90IHNldAorIyBDT05GSUdfVEhVTkRFUl9OSUNfUEYgaXMgbm90IHNldAorIyBDT05GSUdfVEhVTkRFUl9OSUNfUkdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIVU5ERVJfTklDX1ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJQ0tfQ1BVX0FDQ09VTlRJTkcgaXMgbm90IHNldAorQ09ORklHX1RJQ0tfT05FU0hPVD15CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUJfRE1BIGlzIG5vdCBzZXQKK0NPTkZJR19USU1FUkZEPXkKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllEUk1fSFg4MzU3RCBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZRFJNX0lMSTkyMjUgaXMgbm90IHNldAorIyBDT05GSUdfVElOWURSTV9JTEk5MzQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllEUk1fTUkwMjgzUVQgaXMgbm90IHNldAorIyBDT05GSUdfVElOWURSTV9SRVBBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllEUk1fU1Q3NTg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllEUk1fU1Q3NzM1UiBpcyBub3Qgc2V0CitDT05GSUdfVElOWV9SQ1U9eQorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19USV9BREMwODFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJX0FEQzA4MzIgaXMgbm90IHNldAorIyBDT05GSUdfVElfQURDMDg0UzAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19USV9BREMxMDhTMTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJX0FEQzEyMTM4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJX0FEQzEyOFMwNTIgaXMgbm90IHNldAorIyBDT05GSUdfVElfQURDMTYxUzYyNiBpcyBub3Qgc2V0CisjIENPTkZJR19USV9BRFMxMDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJX0FEUzEyNFMwOCBpcyBub3Qgc2V0CisjIENPTkZJR19USV9BRFM3OTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJX0FEUzgzNDQgaXMgbm90IHNldAorIyBDT05GSUdfVElfQURTODY4OCBpcyBub3Qgc2V0CisjIENPTkZJR19USV9BTTMzNVhfQURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJX0NQU1cgaXMgbm90IHNldAorIyBDT05GSUdfVElfQ1BTV19BTEUgaXMgbm90IHNldAorIyBDT05GSUdfVElfQ1BTV19QSFlfU0VMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJX0NQVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElfREFDMDgyUzA4NSBpcyBub3Qgc2V0CisjIENPTkZJR19USV9EQUM1NTcxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJX0RBQzczMTEgaXMgbm90IHNldAorIyBDT05GSUdfVElfREFDNzUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19USV9EQUM3NjEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJX0RBVklOQ0lfQ1BETUEgaXMgbm90IHNldAorIyBDT05GSUdfVElfREFWSU5DSV9NRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJX1NZU0NPTl9SRVNFVCBpcyBub3Qgc2V0CisjIENPTkZJR19USV9UTEM0NTQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVExTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RNRF9IRVJNRVMgaXMgbm90IHNldAorIyBDT05GSUdfVE1QMDA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RNUDAwNyBpcyBub3Qgc2V0CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19UTVBGU19YQVRUUj15CisjIENPTkZJR19UT1BTVEFSX0xBUFRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVE9TSElCQV9IQVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOXzg4UE04NjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3NyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzkgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FEQyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FSMTAyMV9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQVRNRUxfTVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FUTUVMX01YVF9UMzcgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQVVPX1BJWENJUiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9CVTIxMDEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0JVMjEwMjkgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQ0hJUE9ORV9JQ044MzE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0NISVBPTkVfSUNOODUwNSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9DT0xJQlJJX1ZGNTAgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQ1k4Q1RNRzExMCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9DWVRUU1A0X0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQ1lUVFNQNF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQ1lUVFNQNF9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQ1lUVFNQX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQ1lUVFNQX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9DWVRUU1BfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0RBOTAzNCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9EQTkwNTIgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRFlOQVBSTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9FRFRfRlQ1WDA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0VFVEkgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUdBTEFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0VHQUxBWF9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUtURjIxMjcgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRVhDMzAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0dPT0RJWCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9IQU1QU0hJUkUgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSElERUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0hQNjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0hQN1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0hUQ1BFTiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9JTEkyMTBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0lNWDZVTF9UU0MgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0lQQVFfTUlDUk8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSVBST0MgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSVFTNVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0xQQzMyWFggaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUFYMTE4MDEgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUMxMzc4MyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NQ1M1MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01FTEZBU19NSVA0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01JR09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01NUzExNCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVgyNSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NWFNfTFJBREMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUENBUCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9QSVhDSVIgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUFJPUEVSVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9SQVNQQkVSUllQSV9GVyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9STV9UUyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9ST0hNX0JVMjEwMjMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUlBJX0ZUNTQwNiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1M2U1k3NjEgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fU0lMRUFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1NJU19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fU1QxMjMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1NUTUZUUyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9TVE1QRSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9TVU40SSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9TVVI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9TVVJGQUNFM19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fU1g4NjU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RJX0FNMzM1WF9UU0MgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RQUzY1MDdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RTNDgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDA0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIwMDUgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDA3X0lJTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDBYX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1VDQjE0MDAgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCXzNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0RNQ19UU0MxMCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfRTJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9FQVNZVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0VHQUxBWCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfRUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9FVFRfVEM0NVVTQiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfRVRVUkJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9HRU5FUkFMX1RPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9HT1RPUCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfR1VOWkUgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0lERUFMVEVLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9JUlRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9JVE0gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0pBU1RFQyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfTkVYSU8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX1BBTkpJVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfWllUUk9OSUMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVzkwWDkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9XQUNPTV9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0FDT01fVzgwMDEgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0RUODdYWF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV004MzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1dNOTcwNSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9XTTk3MTIgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV005NzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1dNOTdYWCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9XTTk3WFhfTUFJTlNUT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1dNOTdYWF9aWUxPTklURSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9aRVQ2MjIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1pGT1JDRSBpcyBub3Qgc2V0CisjIENPTkZJR19UUEwwMTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzYxMDVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFUE9JTlRfQkVOQ0hNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFUl9TTkFQU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkFDRVJfU05BUFNIT1RfUEVSX0NQVV9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfRVZBTF9NQVBfRklMRSBpcyBub3Qgc2V0CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CisjIENPTkZJR19UUkFDRV9TSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNJTkdfRVZFTlRTX0dQSU8gaXMgbm90IHNldAorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CitDT05GSUdfVFJBRF9TSUdOQUxTPXkKKyMgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSSU1fVU5VU0VEX0tTWU1TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSVVNURURfRk9VTkRBVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfVFJVU1RFRF9LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RTTDI1ODMgaXMgbm90IHNldAorIyBDT05GSUdfVFNMMjc3MiBpcyBub3Qgc2V0CisjIENPTkZJR19UU0wyeDd4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RTTDQ1MzEgaXMgbm90IHNldAorIyBDT05GSUdfVFNZUzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RTWVMwMkQgaXMgbm90IHNldAorIyBDT05GSUdfVFRQQ0lfRUVQUk9NIGlzIG5vdCBzZXQKK0NPTkZJR19UVFk9eQorIyBDT05GSUdfVFRZX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVFVOX1ZORVRfQ1JPU1NfTEUgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfTUFEQyBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w2MDMwX0dQQURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDYwNDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19UWVBFQyBpcyBub3Qgc2V0CisjIENPTkZJR19UWVBFQ19UQ1BNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RZUEVDX1VDU0kgaXMgbm90IHNldAorIyBDT05GSUdfVFlQSE9PTiBpcyBub3Qgc2V0CisjIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSUZTX0FUSU1FX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVUJJRlNfRlNfQVVUSEVOVElDQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUJJRlNfRlNfRU5DUllQVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VQklGU19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19VQklGU19GU19aTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSUZTX0ZTX1pTVEQgaXMgbm90IHNldAorQ09ORklHX1VCSUZTX0ZTX1hBVFRSPXkKKyMgQ09ORklHX1VCU0FOIGlzIG5vdCBzZXQKK0NPTkZJR19VQlNBTl9BTElHTk1FTlQ9eQorIyBDT05GSUdfVUNCMTQwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VDU0kgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VETUFCVUYgaXMgbm90IHNldAorQ09ORklHX1VFVkVOVF9IRUxQRVI9eQorQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VSElEIGlzIG5vdCBzZXQKK0NPTkZJR19VSUQxNj15CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUkEgaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklDT0RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVNZU1NQQVIgaXMgbm90IHNldAorIyBDT05GSUdfVU5JU1lTX1ZJU09SQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfVU5JWF9ESUFHIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYX1NDTT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19VTldJTkRFUl9GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VQUk9CRVMgaXMgbm90IHNldAorIyBDT05GSUdfVVBST0JFX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19VUzUxODJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JJUF9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JJUF9WSENJX0hDX1BPUlRTPTgKK0NPTkZJR19VU0JJUF9WSENJX05SX0hDUz0xCisjIENPTkZJR19VU0JJUF9WVURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfQUxJX001NjMyPXkKKyMgQ09ORklHX1VTQl9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfQU4yNzIwPXkKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJNTElOVVg9eQorIyBDT05GSUdfVVNCX0FUTSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0FVVE9TVVNQRU5EX0RFTEFZPTIKKyMgQ09ORklHX1VTQl9CRENfVURDIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfQkVMS0lOPXkKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DRE5TMyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ0hBT1NLRVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NISVBJREVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DT05GSUdGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ09OTl9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWEFDUlUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfREVGQVVMVF9QRVJTSVNUPXkKKyMgQ09ORklHX1VTQl9EU0JSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EVU1NWV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RXQzIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RXQzJfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RXQzJfRFVBTF9ST0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EV0MyX0hPU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RXQzJfUEVSSVBIRVJBTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRFdDMl9UUkFDS19NSVNTRURfU09GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRFdDMyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRFdDM19FWFlOT1MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RXQzNfSEFQUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRFdDM19LRVlTVE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRFdDM19PRl9TSU1QTEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RXQzNfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EV0MzX1FDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RXQzNfVUxQSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VHMjBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX0FUSDc5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX0ZTTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfSENEX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfSENEX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9NU00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfTVYgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKK0NPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRD15CisjIENPTkZJR19VU0JfRUhTRVRfVEVTVF9GSVhUVVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VQU09OMjg4OCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRVpVU0JfRlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GT1RHMjEwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRk9URzIxMF9VREMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZTTF9VU0IyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZVTkNUSU9ORlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZVU0IzMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfU1RPUkFHRV9OVU1fQlVGRkVSUz0yCitDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9MgorIyBDT05GSUdfVVNCX0dBREdFVF9YSUxJTlggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dMODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dSX1VEQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX0JFTlEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX0NPTkVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9DUElBMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfRFRDUzAzMyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfRVRPTVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX0ZJTkVQSVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX0pFSUxJTkogaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX0pMMjAwNUJDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfS0lORUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9LT05JQ0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX01BUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX01SOTczMTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9OVzgwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfT1Y1MTkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX09WNTM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9PVjUzNF85IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9QQUMyMDcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1BBQzczMDIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1BBQzczMTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NFNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TTjlDMjAyOCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU045QzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU09OSVhCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TT05JWEogaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NQQ0ExNTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUENBNTYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUTkwNSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU1E5MDVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9TUTkzMFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NUSzAxNCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU1RLMTEzNSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU1RWMDY4MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU1VOUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfVDYxMyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfVE9QUk8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1RPVVBURUsgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1RWODUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfVkMwMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9WSUNBTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfWElSTElOS19DSVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1pDM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX0FDTV9NUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19EQkdQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX0hJRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19NVUxUSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19OQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfTk9LSUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfV0VCQ0FNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IQ0RfVEVTVF9NT0RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ISUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFNJQ19VU0IzNTAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IU0lDX1VTQjQ2MDQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hTTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFVCX1VTQjI1MVhCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JTVgyMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVBIRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzMDEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tDMjE5MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEFONzhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRURTX1RSSUdHRVJfVVNCUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEX1RSSUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElOS19MQVlFUl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NNTYwMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTTY2NTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NQVNTX1NUT1JBR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01BWDM0MjFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVNNX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVRVMyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVl9VM0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01WX1VEQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVhTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUMjI3MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUMjI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX0FRQzExMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX0FYODgxNzlfMTc4QSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX0FYODgxN1ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9DRENFVEhFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX0NEQ19FRU0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9DRENfTUJJTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX0NEQ19OQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9DRENfU1VCU0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfQ0g5MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfQ1g4MjMxMF9FVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9ETTk2MDEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9EUklWRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfR0w2MjBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfSFVBV0VJX0NEQ19OQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9JTlQ1MVgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfS0FMTUlBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfTUNTNzgzMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX05FVDEwODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9QTFVTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX1FNSV9XV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfUk5ESVNfSE9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX1JORElTX1dMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9TTVNDNzVYWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX1NNU0M5NVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfU1I5NzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfU1I5ODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfWkFVUlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9IQ0RfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0hDRF9TU0IgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19GU00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BXQ19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFhBMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5NyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SQ0FSX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUkVORVNBU19VU0JIUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ST0xFX1NXSVRDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUzIyNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0FJUkNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQVJLMzExNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0JFTEtJTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0NIMzQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQ1AyMTBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQ1lCRVJKQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQ1lQUkVTU19NOCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRElHSV9BQ0NFTEVQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVF9USSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0VNUEVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRjgxMjMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRjgxNTNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRlRESV9TSU8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9HQVJNSU4gaXMgbm90IHNldAorQ09ORklHX1VTQl9TRVJJQUxfR0VORVJJQz15CisjIENPTkZJR19VU0JfU0VSSUFMX0lQQVEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9JUFcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9JUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lVVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU4gaXMgbm90IHNldAorQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9NUFI9eQorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1BEQSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE4WD15CitDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE5PXkKK0NPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMTlRST15CitDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE5UVc9eQorQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOVc9eQorQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0EyOD15CitDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTI4WD15CitDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTI4WEE9eQorQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0EyOFhCPXkKK0NPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBNDlXPXkKK0NPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBNDlXTEM9eQorIyBDT05GSUdfVVNCX1NFUklBTF9LTFNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS09CSUxfU0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfTUNUX1UyMzIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NRVRSTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX01PUzc3MTVfUEFSUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX01PUzc3MjAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3ODQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfTVhVUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX05BVk1BTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX09NTklORVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9PUFRJQ09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfT1RJNjg1OCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1BMMjMwMyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1FDQVVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfUVQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfUVVBTENPTU0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU0VSSUFMX1NBRkVfUEFEREVEPXkKKyMgQ09ORklHX1VTQl9TRVJJQUxfU0lFUlJBV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9TSU1QTEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9TUENQOFg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfU1NVMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfU1lNQk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfVEkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9VUEQ3OEYwNzMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9XSElURUhFQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9XSVNIQk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1hJUkNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1hTRU5TX01UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJRVJSQV9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTlBfVURDX1BMQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NQRUVEVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUS1dFQkNBTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0VORV9VQjYyNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfUkVBTFRFSyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVFYwNlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TV0lUQ0hfRlNBOTQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVUFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VRUFHTEVBVE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VMUEkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VMUElfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTUzcyMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVklERU9fQ0xBU1MgaXMgbm90IHNldAorQ09ORklHX1VTQl9WSURFT19DTEFTU19JTlBVVF9FVkRFVj15CisjIENPTkZJR19VU0JfVkw2MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9EQkdDQVAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9YSENJX01WRUJVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9YVVNCQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ZVVJFWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aUjM2NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRUxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSRkFVTFRGRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VfT0YgaXMgbm90IHNldAorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CisjIENPTkZJR19VX1NFUklBTF9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1Y0TF9NRU0yTUVNX0RSSVZFUlMgaXMgbm90IHNldAorIyBDT05GSUdfVjRMX1RFU1RfRFJJVkVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19WQUxJREFURV9GU19QQVJTRVIgaXMgbm90IHNldAorIyBDT05GSUdfVkJPWEdVRVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZDTkw0MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZDTkw0MDM1IGlzIG5vdCBzZXQKK0NPTkZJR19WRFNPPXkKKyMgQ09ORklHX1ZFTUw2MDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfVkVYUFJFU1NfQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGNjEwX0FEQyBpcyBub3Qgc2V0CisjIENPTkZJR19WRjYxMF9EQUMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQV9BUkIgaXMgbm90IHNldAorIyBDT05GSUdfVkdBX1NXSVRDSEVST08gaXMgbm90IHNldAorIyBDT05GSUdfVkhPU1RfQ1JPU1NfRU5ESUFOX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSE9TVF9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfVkhPU1RfVlNPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19BRFY3MTcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0FEVjcxNzUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQURWNzE4MCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19BRFY3MTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0FEVjczNDMgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQURWNzM5MyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19BRFZfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQUs4ODFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0FTUEVFRCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19CVDgxOSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19CVDg0OCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19CVDg1NiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19CVDg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19DQURFTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0NBRkVfQ0NJQyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19DUzMzMDggaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQ1M1MzQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0NTNTNMMzJBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0NYMjMxWFggaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQ1gyMzQxWCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19DWDI1ODQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0NYODggaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0RNNjQ0Nl9DQ0RDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0RUMzE1NSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19FTTI4WFggaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fRklYRURfTUlOT1JfUkFOR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0dPNzAwNyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19IRFBWUiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19IRVhJVU1fR0VNSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0hFWElVTV9PUklPTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fSVJfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0lWVFYgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fS1MwMTI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX001Mjc5MCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NTDg2Vjc2NjcgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTVNQMzQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NVDlNMTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01UOVQxMTIgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTVQ5VjAxMSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NVDlWMTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01YQiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19OT09OMDEwUEMzMCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PTUFQMl9WT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09WMjY0MCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVjI2NTkgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1Y1Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09WNjY1MCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVjc2NDAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1Y3NjcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09WNzcyWCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVjc3NDAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1Y5NjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1BWUlVTQjIgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fUko1NE4xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTY1ODggaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fU0FBNjc1MkhTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTcxMTAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fU0FBNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TQUE3MTI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTcxMzQgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fU0FBNzE3WCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TQUE3MTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NIX01PQklMRV9DRVUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fU09OWV9CVEZfTVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NSMDMwUEMzMCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UREE3NDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1REQTk4NDAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVEVBNjQxNUMgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVEVBNjQyMCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19USFM3MzAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1RIUzgyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVElNQkVSREFMRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UTFYzMjBBSUMyM0IgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVE02MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1RWQVVESU8gaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVFZQNTE0WCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UVlA1MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1RWUDcwMDIgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVFcyODA0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1RXOTkwMyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UVzk5MDYgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVFc5OTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1VEQTEzNDIgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVVBENjQwMzFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1VQRDY0MDgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1VTQlRWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1VTQlZJU0lPTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19WNEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1ZQMjdTTVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1ZQWDMyMjAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVlM2NjI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1dNODczOSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19XTTg3NzUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fWk9SQU4gaXMgbm90IHNldAorIyBDT05GSUdfVklSVElPX0JBTExPT04gaXMgbm90IHNldAorIyBDT05GSUdfVklSVElPX0JMS19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlRJT19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WSVJUSU9fSU5QVVQgaXMgbm90IHNldAorQ09ORklHX1ZJUlRJT19NRU5VPXkKKyMgQ09ORklHX1ZJUlRJT19NTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlRJT19NTUlPX0NNRExJTkVfREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19WSVJUSU9fUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkdfR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlRfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfVklSVF9UT19CVVM9eQorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVkw1M0wwWF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfVkw2MTgwIGlzIG5vdCBzZXQKK0NPTkZJR19WTEFOXzgwMjFRPXkKKyMgQ09ORklHX1ZMQU5fODAyMVFfR1ZSUCBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRX01WUlAgaXMgbm90IHNldAorIyBDT05GSUdfVk1FX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAorIyBDT05GSUdfVk1TUExJVF8yR19PUFQgaXMgbm90IHNldAorQ09ORklHX1ZNU1BMSVRfM0c9eQorIyBDT05GSUdfVk1TUExJVF8zR19PUFQgaXMgbm90IHNldAorIyBDT05GSUdfVk1XQVJFX1BWU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19WTVhORVQzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZPUF9CVVMgaXMgbm90IHNldAorIyBDT05GSUdfVk9SVEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZTT0NLRVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZTT0NLRVRTX0RJQUcgaXMgbm90IHNldAorIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfVlQ2NjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZUNjY1NiBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYR0UgaXMgbm90IHNldAorIyBDT05GSUdfVlhMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVlo4OVggaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfVzFfQ09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxX01BU1RFUl9EUzFXTSBpcyBub3Qgc2V0CisjIENPTkZJR19XMV9NQVNURVJfRFMyNDgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxX01BU1RFUl9EUzI0OTAgaXMgbm90IHNldAorIyBDT05GSUdfVzFfTUFTVEVSX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfVzFfTUFTVEVSX01BVFJPWCBpcyBub3Qgc2V0CisjIENPTkZJR19XMV9NQVNURVJfU0dJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxX1NMQVZFX0RTMjQwNSBpcyBub3Qgc2V0CisjIENPTkZJR19XMV9TTEFWRV9EUzI0MDYgaXMgbm90IHNldAorIyBDT05GSUdfVzFfU0xBVkVfRFMyNDA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxX1NMQVZFX0RTMjQxMyBpcyBub3Qgc2V0CisjIENPTkZJR19XMV9TTEFWRV9EUzI0MjMgaXMgbm90IHNldAorIyBDT05GSUdfVzFfU0xBVkVfRFMyNDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxX1NMQVZFX0RTMjQzMyBpcyBub3Qgc2V0CisjIENPTkZJR19XMV9TTEFWRV9EUzI0MzggaXMgbm90IHNldAorIyBDT05GSUdfVzFfU0xBVkVfRFMyNTBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxX1NMQVZFX0RTMjc4MCBpcyBub3Qgc2V0CisjIENPTkZJR19XMV9TTEFWRV9EUzI3ODEgaXMgbm90IHNldAorIyBDT05GSUdfVzFfU0xBVkVfRFMyODA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxX1NMQVZFX0RTMjhFMDQgaXMgbm90IHNldAorIyBDT05GSUdfVzFfU0xBVkVfRFMyOEUxNyBpcyBub3Qgc2V0CisjIENPTkZJR19XMV9TTEFWRV9TTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxX1NMQVZFX1RIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1c4MzYyN0hGX1dEVCBpcyBub3Qgc2V0CisjIENPTkZJR19XODM4NzdGX1dEVCBpcyBub3Qgc2V0CisjIENPTkZJR19XODM5NzdGX1dEVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfV0FOWEwgaXMgbm90IHNldAorIyBDT05GSUdfV0FSTl9BTExfVU5TRUVERURfUkFORE9NIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSERPRz15CisjIENPTkZJR19XQVRDSERPR19DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSERPR19IQU5ETEVfQk9PVF9FTkFCTEVEPXkKKyMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSERPR19PUEVOX1RJTUVPVVQ9MAorIyBDT05GSUdfV0FUQ0hET0dfUFJFVElNRU9VVF9HT1YgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0dfU1lTRlMgaXMgbm90IHNldAorIyBDT05GSUdfV0Q4MHgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dEQVRfV0RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0CitDT05GSUdfV0VYVF9DT1JFPXkKK0NPTkZJR19XRVhUX1BSSVY9eQorQ09ORklHX1dFWFRfUFJPQz15CitDT05GSUdfV0VYVF9TUFk9eQorQ09ORklHX1dJTElOS19QTEFURk9STV9EQVRBPXkKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVHVUFSRCBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorQ09ORklHX1dJUkVMRVNTX0VYVD15CisjIENPTkZJR19XSVJFTEVTU19XRFMgaXMgbm90IHNldAorIyBDT05GSUdfV0laTkVUX1c1MTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJWk5FVF9XNTMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19XTDEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfV0wxMlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMMThYWCBpcyBub3Qgc2V0CitDT05GSUdfV0xBTj15CisjIENPTkZJR19XTEFOX1ZFTkRPUl9BRE1URUsgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl9WRU5ET1JfQVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fVkVORE9SX0FUTUVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fVkVORE9SX0JST0FEQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fVkVORE9SX0NJU0NPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fVkVORE9SX0lOVEVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fVkVORE9SX0lOVEVSU0lMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fVkVORE9SX01BUlZFTEwgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl9WRU5ET1JfTUVESUFURUsgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl9WRU5ET1JfUVVBTlRFTk5BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fVkVORE9SX1JBTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOX1ZFTkRPUl9SRUFMVEVLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fVkVORE9SX1JTSSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOX1ZFTkRPUl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOX1ZFTkRPUl9USSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOX1ZFTkRPUl9aWURBUyBpcyBub3Qgc2V0CisjIENPTkZJR19XTENPUkUgaXMgbm90IHNldAorQ09ORklHX1dRX1BPV0VSX0VGRklDSUVOVF9ERUZBVUxUPXkKKyMgQ09ORklHX1dRX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dXX01VVEVYX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19YNTA5X0NFUlRJRklDQVRFX1BBUlNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YODZfUEtHX1RFTVBfVEhFUk1BTCBpcyBub3Qgc2V0CitDT05GSUdfWDg2X1NZU0ZCPXkKKyMgQ09ORklHX1hEUF9TT0NLRVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hFTiBpcyBub3Qgc2V0CisjIENPTkZJR19YRU5fR1JBTlRfRE1BX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hFTl9QVkNBTExTX0ZST05URU5EIGlzIG5vdCBzZXQKK0NPTkZJR19YRU5fU0NSVUJfUEFHRVNfREVGQVVMVD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX0lOVEVSRkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfT05MSU5FX1NDUlVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfV0FSTiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfQVhJX0VNQUMgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0dNSUkyUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0xMX1RFTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9TREZFQyBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfVkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfWEFEQyBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfWllOUU1QX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxMWUJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxfQVhJU19GSUZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0CitDT05GSUdfWFpfREVDPXkKKyMgQ09ORklHX1haX0RFQ19BUk0gaXMgbm90IHNldAorIyBDT05GSUdfWFpfREVDX0FSTVRIVU1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1haX0RFQ19CQ0ogaXMgbm90IHNldAorIyBDT05GSUdfWFpfREVDX0lBNjQgaXMgbm90IHNldAorIyBDT05GSUdfWFpfREVDX1BPV0VSUEMgaXMgbm90IHNldAorIyBDT05GSUdfWFpfREVDX1NQQVJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1haX0RFQ19URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1haX0RFQ19YODYgaXMgbm90IHNldAorIyBDT05GSUdfWUFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CisjIENPTkZJR19ZRU5UQSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRU5UQV9PMiBpcyBub3Qgc2V0CisjIENPTkZJR19ZRU5UQV9SSUNPSCBpcyBub3Qgc2V0CisjIENPTkZJR19ZRU5UQV9USSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRU5UQV9UT1NISUJBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1pCVUQgaXMgbm90IHNldAorIyBDT05GSUdfWkQxMjExUlcgaXMgbm90IHNldAorIyBDT05GSUdfWkQxMjExUldfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAorIyBDT05GSUdfWklJUkFWRV9XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19aSVNPRlMgaXMgbm90IHNldAorIyBDT05GSUdfWkxJQl9ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1pMSUJfSU5GTEFURSBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUE9eQorIyBDT05GSUdfWk9QVDIyMDEgaXMgbm90IHNldAorIyBDT05GSUdfWlBBMjMyNiBpcyBub3Qgc2V0CisjIENPTkZJR19aUE9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19aUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1pSQU1fTUVNT1JZX1RSQUNLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1pTTUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1pYX1RETSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy01LjQvZHJpdmVycy9tdGQvbm1ibS9LY29uZmlnIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMtNS40L2RyaXZlcnMvbXRkL25tYm0vS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGRmMzA1Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMtNS40L2RyaXZlcnMvbXRkL25tYm0vS2NvbmZpZwpAQCAtMCwwICsxLDM1IEBACisKK2NvbmZpZyBOTUJNCisJYm9vbCAiRW5hYmxlIE5BTkQgbWFwcGluZyBibG9jayBtYW5hZ2VtZW50IgorCWRlZmF1bHQgbgorCXNlbGVjdCBDUkMzMgorCitjaG9pY2UKKwlwcm9tcHQgIkRlZmF1bHQgbG9nIGxldmVsIgorCWRlcGVuZHMgb24gTk1CTQorCWRlZmF1bHQgTk1CTV9MT0dfTEVWRUxfSU5GTworCitjb25maWcgTk1CTV9MT0dfTEVWRUxfREVCVUcKKwlib29sICIwIC0gRGVidWciCisKK2NvbmZpZyBOTUJNX0xPR19MRVZFTF9JTkZPCisJYm9vbCAiMSAtIEluZm8iCisKK2NvbmZpZyBOTUJNX0xPR19MRVZFTF9XQVJOCisJYm9vbCAiMiAtIFdhcm4iCisKK2NvbmZpZyBOTUJNX0xPR19MRVZFTF9FUlIKKwlib29sICIzIC0gRXJyb3IiCisKK2NvbmZpZyBOTUJNX0xPR19MRVZFTF9FTUVSRworCWJvb2wgIjQgLSBFbWVyZ2VuY3kiCisKK2NvbmZpZyBOTUJNX0xPR19MRVZFTF9OT05FCisJYm9vbCAiNSAtIE5vbmUiCisKK2VuZGNob2ljZQorCitjb25maWcgTk1CTV9NVEQKKwlib29sICJFbmFibGUgTVREIGJhc2VkIE5BTkQgbWFwcGluZyBibG9jayBtYW5hZ2VtZW50IgorCWRlZmF1bHQgbgorCWRlcGVuZHMgb24gTk1CTQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMtNS40L2RyaXZlcnMvbXRkL25tYm0vTWFrZWZpbGUgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy01LjQvZHJpdmVycy9tdGQvbm1ibS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmU2ZDUwCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMtNS40L2RyaXZlcnMvbXRkL25tYm0vTWFrZWZpbGUKQEAgLTAsMCArMSw2IEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisjCisjIChDKSBDb3B5cmlnaHQgMjAyMCBNZWRpYVRlayBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK29iai0kKENPTkZJR19OTUJNKSArPSBubWJtLWNvcmUubworb2JqLSQoQ09ORklHX05NQk1fTVREKSArPSBubWJtLW10ZC5vCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy01LjQvZHJpdmVycy9tdGQvbm1ibS9ubWJtLWNvcmUuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzLTUuNC9kcml2ZXJzL210ZC9ubWJtL25tYm0tY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZGZiNmEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy01LjQvZHJpdmVycy9tdGQvbm1ibS9ubWJtLWNvcmUuYwpAQCAtMCwwICsxLDI5MzYgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0zLUNsYXVzZQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBNZWRpYVRlayBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQXV0aG9yOiBXZWlqaWUgR2FvIDx3ZWlqaWUuZ2FvQG1lZGlhdGVrLmNvbT4KKyAqLworCisjaW5jbHVkZSAibm1ibS1wcml2YXRlLmgiCisKKyNpbmNsdWRlICJubWJtLWRlYnVnLmgiCisKKyNkZWZpbmUgTk1CTV9WRVJfTUFKT1IJCQkxCisjZGVmaW5lIE5NQk1fVkVSX01JTk9SCQkJMAorI2RlZmluZSBOTUJNX1ZFUgkJCU5NQk1fVkVSU0lPTl9NQUtFKE5NQk1fVkVSX01BSk9SLCBcCisJCQkJCQkJICBOTUJNX1ZFUl9NSU5PUikKKworI2RlZmluZSBOTUJNX0FMSUdOKHYsIGEpCQkoKCh2KSArIChhKSAtIDEpICYgfigoYSkgLSAxKSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTG9nZ2luZyByZWxhdGVkIGZ1bmN0aW9ucyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogbm1ibV9sb2dfbG93ZXIgLSBQcmludCBsb2cgdXNpbmcgT1Mgc3BlY2lmaWMgcm91dGluZQorICogQG5sZDogTk1CTSBsb3dlciBkZXZpY2Ugc3RydWN0dXJlCisgKiBAbGV2ZWw6IGxvZyBsZXZlbAorICogQGZtdDogZm9ybWF0IHN0cmluZworICovCitzdGF0aWMgdm9pZCBubWJtX2xvZ19sb3dlcihzdHJ1Y3Qgbm1ibV9sb3dlcl9kZXZpY2UgKm5sZCwKKwkJCSAgIGVudW0gbm1ibV9sb2dfY2F0ZWdvcnkgbGV2ZWwsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwlpZiAoIW5sZC0+bG9ncHJpbnQpCisJCXJldHVybjsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCW5sZC0+bG9ncHJpbnQobmxkLT5hcmcsIGxldmVsLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQorCisvKgorICogbm1ibV9sb2cgLSBQcmludCBsb2cgdXNpbmcgT1Mgc3BlY2lmaWMgcm91dGluZQorICogQG5pOiBOTUJNIGluc3RhbmNlIHN0cnVjdHVyZQorICogQGxldmVsOiBsb2cgbGV2ZWwKKyAqIEBmbXQ6IGZvcm1hdCBzdHJpbmcKKyAqLworc3RhdGljIHZvaWQgbm1ibV9sb2coc3RydWN0IG5tYm1faW5zdGFuY2UgKm5pLCBlbnVtIG5tYm1fbG9nX2NhdGVnb3J5IGxldmVsLAorCQkgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwlpZiAoIW5pKQorCQlyZXR1cm47CisKKwlpZiAoIW5pLT5sb3dlci5sb2dwcmludCB8fCBsZXZlbCA8IG5pLT5sb2dfZGlzcGxheV9sZXZlbCkKKwkJcmV0dXJuOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJbmktPmxvd2VyLmxvZ3ByaW50KG5pLT5sb3dlci5hcmcsIGxldmVsLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQorCisvKgorICogbm1ibV9zZXRfbG9nX2xldmVsIC0gU2V0IGxvZyBkaXNwbGF5IGxldmVsCisgKiBAbmk6IE5NQk0gaW5zdGFuY2Ugc3RydWN0dXJlCisgKiBAbGV2ZWw6IGxvZyBkaXNwbGF5IGxldmVsCisgKi8KK2VudW0gbm1ibV9sb2dfY2F0ZWdvcnkgbm1ibV9zZXRfbG9nX2xldmVsKHN0cnVjdCBubWJtX2luc3RhbmNlICpuaSwKKwkJCQkJICBlbnVtIG5tYm1fbG9nX2NhdGVnb3J5IGxldmVsKQoreworCWVudW0gbm1ibV9sb2dfY2F0ZWdvcnkgb2xkOworCisJaWYgKCFuaSkKKwkJcmV0dXJuIF9fTk1CTV9MT0dfTUFYOworCisJb2xkID0gbmktPmxvZ19kaXNwbGF5X2xldmVsOworCW5pLT5sb2dfZGlzcGxheV9sZXZlbCA9IGxldmVsOworCXJldHVybiBvbGQ7Cit9CisKKy8qCisgKiBubG9nX3RhYmxlX2NyZWF0aW9uIC0gUHJpbnQgbG9nIG9mIHRhYmxlIGNyZWF0aW9uIGV2ZW50CisgKiBAbmk6IE5NQk0gaW5zdGFuY2Ugc3RydWN0dXJlCisgKiBAbWFpbl90YWJsZTogd2hldGhlciB0aGUgdGFibGUgaXMgbWFpbiBpbmZvIHRhYmxlCisgKiBAc3RhcnRfYmE6IHN0YXJ0IGJsb2NrIGFkZHJlc3Mgb2YgdGhlIHRhYmxlCisgKiBAZW5kX2JhOiBibG9jayBhZGRyZXNzIGFmdGVyIHRoZSBlbmQgb2YgdGhlIHRhYmxlCisgKi8KK3N0YXRpYyB2b2lkIG5sb2dfdGFibGVfY3JlYXRpb24oc3RydWN0IG5tYm1faW5zdGFuY2UgKm5pLCBib29sIG1haW5fdGFibGUsCisJCQkgICAgICAgdWludDMyX3Qgc3RhcnRfYmEsIHVpbnQzMl90IGVuZF9iYSkKK3sKKwlpZiAoc3RhcnRfYmEgPT0gZW5kX2JhIC0gMSkKKwkJbmxvZ19pbmZvKG5pLCAiJXMgaW5mbyB0YWJsZSBoYXMgYmVlbiB3cml0dGVuIHRvIGJsb2NrICV1XG4iLAorCQkJIG1haW5fdGFibGUgPyAiTWFpbiIgOiAiQmFja3VwIiwgc3RhcnRfYmEpOworCWVsc2UKKwkJbmxvZ19pbmZvKG5pLCAiJXMgaW5mbyB0YWJsZSBoYXMgYmVlbiB3cml0dGVuIHRvIGJsb2NrICV1LSV1XG4iLAorCQkJIG1haW5fdGFibGUgPyAiTWFpbiIgOiAiQmFja3VwIiwgc3RhcnRfYmEsIGVuZF9iYSAtIDEpOworCisJbm1ibV9tYXJrX2Jsb2NrX2NvbG9yX2luZm9fdGFibGUobmksIHN0YXJ0X2JhLCBlbmRfYmEgLSAxKTsKK30KKworLyoKKyAqIG5sb2dfdGFibGVfdXBkYXRlIC0gUHJpbnQgbG9nIG9mIHRhYmxlIHVwZGF0ZSBldmVudAorICogQG5pOiBOTUJNIGluc3RhbmNlIHN0cnVjdHVyZQorICogQG1haW5fdGFibGU6IHdoZXRoZXIgdGhlIHRhYmxlIGlzIG1haW4gaW5mbyB0YWJsZQorICogQHN0YXJ0X2JhOiBzdGFydCBibG9jayBhZGRyZXNzIG9mIHRoZSB0YWJsZQorICogQGVuZF9iYTogYmxvY2sgYWRkcmVzcyBhZnRlciB0aGUgZW5kIG9mIHRoZSB0YWJsZQorICovCitzdGF0aWMgdm9pZCBubG9nX3RhYmxlX3VwZGF0ZShzdHJ1Y3Qgbm1ibV9pbnN0YW5jZSAqbmksIGJvb2wgbWFpbl90YWJsZSwKKwkJCSAgICAgdWludDMyX3Qgc3RhcnRfYmEsIHVpbnQzMl90IGVuZF9iYSkKK3sKKwlpZiAoc3RhcnRfYmEgPT0gZW5kX2JhIC0gMSkKKwkJbmxvZ19kZWJ1ZyhuaSwgIiVzIGluZm8gdGFibGUgaGFzIGJlZW4gdXBkYXRlZCBpbiBibG9jayAldVxuIiwKKwkJCSAgbWFpbl90YWJsZSA/ICJNYWluIiA6ICJCYWNrdXAiLCBzdGFydF9iYSk7CisJZWxzZQorCQlubG9nX2RlYnVnKG5pLCAiJXMgaW5mbyB0YWJsZSBoYXMgYmVlbiB1cGRhdGVkIGluIGJsb2NrICV1LSV1XG4iLAorCQkJICBtYWluX3RhYmxlID8gIk1haW4iIDogIkJhY2t1cCIsIHN0YXJ0X2JhLCBlbmRfYmEgLSAxKTsKKworCW5tYm1fbWFya19ibG9ja19jb2xvcl9pbmZvX3RhYmxlKG5pLCBzdGFydF9iYSwgZW5kX2JhIC0gMSk7Cit9CisKKy8qCisgKiBubG9nX3RhYmxlX2ZvdW5kIC0gUHJpbnQgbG9nIG9mIHRhYmxlIGZvdW5kIGV2ZW50CisgKiBAbmk6IE5NQk0gaW5zdGFuY2Ugc3RydWN0dXJlCisgKiBAZmlyc3RfdGFibGU6IHdoZXRoZXIgdGhlIHRhYmxlIGlzIGZpcnN0IGZvdW5kIGluZm8gdGFibGUKKyAqIEB3cml0ZV9jb3VudDogd3JpdGUgY291bnQgb2YgdGhlIGluZm8gdGFibGUKKyAqIEBzdGFydF9iYTogc3RhcnQgYmxvY2sgYWRkcmVzcyBvZiB0aGUgdGFibGUKKyAqIEBlbmRfYmE6IGJsb2NrIGFkZHJlc3MgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgdGFibGUKKyAqLworc3RhdGljIHZvaWQgbmxvZ190YWJsZV9mb3VuZChzdHJ1Y3Qgbm1ibV9pbnN0YW5jZSAqbmksIGJvb2wgZmlyc3RfdGFibGUsCisJCQkgICAgdWludDMyX3Qgd3JpdGVfY291bnQsIHVpbnQzMl90IHN0YXJ0X2JhLAorCQkJICAgIHVpbnQzMl90IGVuZF9iYSkKK3sKKwlpZiAoc3RhcnRfYmEgPT0gZW5kX2JhIC0gMSkKKwkJbmxvZ19pbmZvKG5pLCAiJXMgaW5mbyB0YWJsZSB3aXRoIHdyaXRlY291bnQgJXUgZm91bmQgaW4gYmxvY2sgJXVcbiIsCisJCQkgZmlyc3RfdGFibGUgPyAiRmlyc3QiIDogIlNlY29uZCIsIHdyaXRlX2NvdW50LAorCQkJIHN0YXJ0X2JhKTsKKwllbHNlCisJCW5sb2dfaW5mbyhuaSwgIiVzIGluZm8gdGFibGUgd2l0aCB3cml0ZWNvdW50ICV1IGZvdW5kIGluIGJsb2NrICV1LSV1XG4iLAorCQkJIGZpcnN0X3RhYmxlID8gIkZpcnN0IiA6ICJTZWNvbmQiLCB3cml0ZV9jb3VudCwKKwkJCSBzdGFydF9iYSwgZW5kX2JhIC0gMSk7CisKKwlubWJtX21hcmtfYmxvY2tfY29sb3JfaW5mb190YWJsZShuaSwgc3RhcnRfYmEsIGVuZF9iYSAtIDEpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBBZGRyZXNzIGNvbnZlcnNpb24gZnVuY3Rpb25zICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBhZGRyMmJhIC0gQ29udmVydCBhIGxpbmVhciBhZGRyZXNzIHRvIGJsb2NrIGFkZHJlc3MKKyAqIEBuaTogTk1CTSBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqIEBhZGRyOiBMaW5lYXIgYWRkcmVzcworICovCitzdGF0aWMgdWludDMyX3QgYWRkcjJiYShzdHJ1Y3Qgbm1ibV9pbnN0YW5jZSAqbmksIHVpbnQ2NF90IGFkZHIpCit7CisJcmV0dXJuIGFkZHIgPj4gbmktPmVyYXNlc2l6ZV9zaGlmdDsKK30KKworLyoKKyAqIGJhMmFkZHIgLSBDb252ZXJ0IGEgYmxvY2sgYWRkcmVzcyB0byBsaW5lYXIgYWRkcmVzcworICogQG5pOiBOTUJNIGluc3RhbmNlIHN0cnVjdHVyZQorICogQGJhOiBCbG9jayBhZGRyZXNzCisgKi8KK3N0YXRpYyB1aW50NjRfdCBiYTJhZGRyKHN0cnVjdCBubWJtX2luc3RhbmNlICpuaSwgdWludDMyX3QgYmEpCit7CisJcmV0dXJuICh1aW50NjRfdCliYSA8PCBuaS0+ZXJhc2VzaXplX3NoaWZ0OworfQorLyoKKyAqIHNpemUyYmxrIC0gR2V0IG1pbmltdW0gcmVxdWlyZWQgYmxvY2tzIGZvciBzdG9yaW5nIHNwZWNpZmljIHNpemUgb2YgZGF0YQorICogQG5pOiBOTUJNIGluc3RhbmNlIHN0cnVjdHVyZQorICogQHNpemU6IHNpemUgZm9yIHN0b3JpbmcKKyAqLworc3RhdGljIHVpbnQzMl90IHNpemUyYmxrKHN0cnVjdCBubWJtX2luc3RhbmNlICpuaSwgdWludDY0X3Qgc2l6ZSkKK3sKKwlyZXR1cm4gKHNpemUgKyBuaS0+bG93ZXIuZXJhc2VzaXplIC0gMSkgPj4gbmktPmVyYXNlc2l6ZV9zaGlmdDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogSGlnaCBsZXZlbCBOQU5EIGNoaXAgQVBJcyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogbm1ibV9yZXNldF9jaGlwIC0gUmVzZXQgTkFORCBkZXZpY2UKKyAqIEBubGQ6IExvd2VyIE5BTkQgY2hpcCBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHZvaWQgbm1ibV9yZXNldF9jaGlwKHN0cnVjdCBubWJtX2luc3RhbmNlICpuaSkKK3sKKwlpZiAobmktPmxvd2VyLnJlc2V0X2NoaXApCisJCW5pLT5sb3dlci5yZXNldF9jaGlwKG5pLT5sb3dlci5hcmcpOworfQorCisvKgorICogbm1ibV9yZWFkX3BoeXNfcGFnZSAtIFJlYWQgcGFnZSB3aXRoIHJldHJ5CisgKiBAbmk6IE5NQk0gaW5zdGFuY2Ugc3RydWN0dXJlCisgKiBAYWRkcjogbGluZWFyIGFkZHJlc3Mgd2hlcmUgdGhlIGRhdGEgd2lsbCBiZSByZWFkIGZyb20KKyAqIEBkYXRhOiB0aGUgbWFpbiBkYXRhIHRvIGJlIHJlYWQKKyAqIEBvb2I6IHRoZSBvb2IgZGF0YSB0byBiZSByZWFkCisgKiBAbW9kZTogbW9kZSBmb3IgcHJvY2Vzc2luZyBvb2IgZGF0YQorICoKKyAqIFJlYWQgYSBwYWdlIGZvciBhdCBtb3N0IE5NQk1fVFJZX0NPVU5UIHRpbWVzLgorICoKKyAqIFJldHVybiAwIGZvciBzdWNjZXNzLCBwb3NpdGl2ZSB2YWx1ZSBmb3IgY29ycmVjdGVkIGJpdGZsaXAgY291bnQsCisgKiAtRUJBRE1TRyBmb3IgZWNjIGVycm9yLCBvdGhlciBuZWdhdGl2ZSB2YWx1ZXMgZm9yIG90aGVyIGVycm9ycworICovCitzdGF0aWMgaW50IG5tYm1fcmVhZF9waHlzX3BhZ2Uoc3RydWN0IG5tYm1faW5zdGFuY2UgKm5pLCB1aW50NjRfdCBhZGRyLAorCQkJICAgICAgIHZvaWQgKmRhdGEsIHZvaWQgKm9vYiwgZW51bSBubWJtX29vYl9tb2RlIG1vZGUpCit7CisJaW50IHRyaWVzLCByZXQ7CisKKwlmb3IgKHRyaWVzID0gMDsgdHJpZXMgPCBOTUJNX1RSWV9DT1VOVDsgdHJpZXMrKykgeworCQlyZXQgPSBuaS0+bG93ZXIucmVhZF9wYWdlKG5pLT5sb3dlci5hcmcsIGFkZHIsIGRhdGEsIG9vYiwgbW9kZSk7CisJCWlmIChyZXQgPj0gMCkKKwkJCXJldHVybiByZXQ7CisKKwkJbm1ibV9yZXNldF9jaGlwKG5pKTsKKwl9CisKKwlpZiAocmV0ICE9IC1FQkFETVNHKQorCQlubG9nX2VycihuaSwgIlBhZ2UgcmVhZCBmYWlsZWQgYXQgYWRkcmVzcyAweCUwOGxseFxuIiwgYWRkcik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogbm1ibV93cml0ZV9waHlzX3BhZ2UgLSBXcml0ZSBwYWdlIHdpdGggcmV0cnkKKyAqIEBuaTogTk1CTSBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqIEBhZGRyOiBsaW5lYXIgYWRkcmVzcyB3aGVyZSB0aGUgZGF0YSB3aWxsIGJlIHdyaXR0ZW4gdG8KKyAqIEBkYXRhOiB0aGUgbWFpbiBkYXRhIHRvIGJlIHdyaXR0ZW4KKyAqIEBvb2I6IHRoZSBvb2IgZGF0YSB0byBiZSB3cml0dGVuCisgKiBAbW9kZTogbW9kZSBmb3IgcHJvY2Vzc2luZyBvb2IgZGF0YQorICoKKyAqIFdyaXRlIGEgcGFnZSBmb3IgYXQgbW9zdCBOTUJNX1RSWV9DT1VOVCB0aW1lcy4KKyAqLworc3RhdGljIGJvb2wgbm1ibV93cml0ZV9waHlzX3BhZ2Uoc3RydWN0IG5tYm1faW5zdGFuY2UgKm5pLCB1aW50NjRfdCBhZGRyLAorCQkJCSBjb25zdCB2b2lkICpkYXRhLCBjb25zdCB2b2lkICpvb2IsCisJCQkJIGVudW0gbm1ibV9vb2JfbW9kZSBtb2RlKQoreworCWludCB0cmllcywgcmV0OworCisJaWYgKG5pLT5sb3dlci5mbGFncyAmIE5NQk1fRl9SRUFEX09OTFkpIHsKKwkJbmxvZ19lcnIobmksICIlcyBjYWxsZWQgd2l0aCBOTUJNX0ZfUkVBRF9PTkxZIHNldFxuIiwgYWRkcik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlmb3IgKHRyaWVzID0gMDsgdHJpZXMgPCBOTUJNX1RSWV9DT1VOVDsgdHJpZXMrKykgeworCQlyZXQgPSBuaS0+bG93ZXIud3JpdGVfcGFnZShuaS0+bG93ZXIuYXJnLCBhZGRyLCBkYXRhLCBvb2IsIG1vZGUpOworCQlpZiAoIXJldCkKKwkJCXJldHVybiB0cnVlOworCisJCW5tYm1fcmVzZXRfY2hpcChuaSk7CisJfQorCisJbmxvZ19lcnIobmksICJQYWdlIHdyaXRlIGZhaWxlZCBhdCBhZGRyZXNzIDB4JTA4bGx4XG4iLCBhZGRyKTsKKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIG5tYm1fZXJhc2VfcGh5c19ibG9jayAtIEVyYXNlIGEgYmxvY2sgd2l0aCByZXRyeQorICogQG5pOiBOTUJNIGluc3RhbmNlIHN0cnVjdHVyZQorICogQGFkZHI6IExpbmVhciBhZGRyZXNzCisgKgorICogRXJhc2UgYSBibG9jayBmb3IgYXQgbW9zdCBOTUJNX1RSWV9DT1VOVCB0aW1lcy4KKyAqLworc3RhdGljIGJvb2wgbm1ibV9lcmFzZV9waHlzX2Jsb2NrKHN0cnVjdCBubWJtX2luc3RhbmNlICpuaSwgdWludDY0X3QgYWRkcikKK3sKKwlpbnQgdHJpZXMsIHJldDsKKworCWlmIChuaS0+bG93ZXIuZmxhZ3MgJiBOTUJNX0ZfUkVBRF9PTkxZKSB7CisJCW5sb2dfZXJyKG5pLCAiJXMgY2FsbGVkIHdpdGggTk1CTV9GX1JFQURfT05MWSBzZXRcbiIsIGFkZHIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJZm9yICh0cmllcyA9IDA7IHRyaWVzIDwgTk1CTV9UUllfQ09VTlQ7IHRyaWVzKyspIHsKKwkJcmV0ID0gbmktPmxvd2VyLmVyYXNlX2Jsb2NrKG5pLT5sb3dlci5hcmcsIGFkZHIpOworCQlpZiAoIXJldCkKKwkJCXJldHVybiB0cnVlOworCisJCW5tYm1fcmVzZXRfY2hpcChuaSk7CisJfQorCisJbmxvZ19lcnIobmksICJCbG9jayBlcmFzdXJlIGZhaWxlZCBhdCBhZGRyZXNzIDB4JTA4bGx4XG4iLCBhZGRyKTsKKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIG5tYm1fY2hlY2tfYmFkX3BoeXNfYmxvY2sgLSBDaGVjayB3aGV0aGVyIGEgYmxvY2sgaXMgbWFya2VkIGJhZCBpbiBPT0IKKyAqIEBuaTogTk1CTSBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqIEBiYTogYmxvY2sgYWRkcmVzcworICovCitzdGF0aWMgYm9vbCBubWJtX2NoZWNrX2JhZF9waHlzX2Jsb2NrKHN0cnVjdCBubWJtX2luc3RhbmNlICpuaSwgdWludDMyX3QgYmEpCit7CisJdWludDY0X3QgYWRkciA9IGJhMmFkZHIobmksIGJhKTsKKwlpbnQgcmV0OworCisJaWYgKG5pLT5sb3dlci5pc19iYWRfYmxvY2spCisJCXJldHVybiBuaS0+bG93ZXIuaXNfYmFkX2Jsb2NrKG5pLT5sb3dlci5hcmcsIGFkZHIpOworCisJLyogVHJlYXQgRUNDIGVycm9yIGFzIHJlYWQgc3VjY2VzcyAqLworCXJldCA9IG5tYm1fcmVhZF9waHlzX3BhZ2UobmksIGFkZHIsIE5VTEwsCisJCQkJICBuaS0+cGFnZV9jYWNoZSArIG5pLT5sb3dlci53cml0ZXNpemUsCisJCQkJICBOTUJNX01PREVfUkFXKTsKKwlpZiAocmV0IDwgMCAmJiByZXQgIT0gLUVCQURNU0cpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIG5pLT5wYWdlX2NhY2hlW25pLT5sb3dlci53cml0ZXNpemVdICE9IDB4ZmY7Cit9CisKKy8qCisgKiBubWJtX21hcmtfcGh5c19iYWRfYmxvY2sgLSBNYXJrIGEgYmxvY2sgYmFkCisgKiBAbmk6IE5NQk0gaW5zdGFuY2Ugc3RydWN0dXJlCisgKiBAYWRkcjogTGluZWFyIGFkZHJlc3MKKyAqLworc3RhdGljIGludCBubWJtX21hcmtfcGh5c19iYWRfYmxvY2soc3RydWN0IG5tYm1faW5zdGFuY2UgKm5pLCB1aW50MzJfdCBiYSkKK3sKKwl1aW50NjRfdCBhZGRyID0gYmEyYWRkcihuaSwgYmEpOworCWVudW0gbm1ibV9sb2dfY2F0ZWdvcnkgbGV2ZWw7CisJdWludDMyX3Qgb2ZmOworCisJaWYgKG5pLT5sb3dlci5mbGFncyAmIE5NQk1fRl9SRUFEX09OTFkpIHsKKwkJbmxvZ19lcnIobmksICIlcyBjYWxsZWQgd2l0aCBOTUJNX0ZfUkVBRF9PTkxZIHNldFxuIiwgYWRkcik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlubG9nX2luZm8obmksICJCbG9jayAldSBbMHglMDhsbHhdIHdpbGwgYmUgbWFya2VkIGJhZFxuIiwgYmEsIGFkZHIpOworCisJaWYgKG5pLT5sb3dlci5tYXJrX2JhZF9ibG9jaykKKwkJcmV0dXJuIG5pLT5sb3dlci5tYXJrX2JhZF9ibG9jayhuaS0+bG93ZXIuYXJnLCBhZGRyKTsKKworCS8qIFdob2xlIHBhZ2Ugc2V0IHRvIDB4MDAgKi8KKwltZW1zZXQobmktPnBhZ2VfY2FjaGUsIDAsIG5pLT5yYXdwYWdlX3NpemUpOworCisJLyogV3JpdGUgdG8gYWxsIHBhZ2VzIHdpdGhpbiB0aGlzIGJsb2NrLCBkaXNhYmxlIGFsbCBlcnJvcnMgKi8KKwlsZXZlbCA9IG5tYm1fc2V0X2xvZ19sZXZlbChuaSwgX19OTUJNX0xPR19NQVgpOworCisJZm9yIChvZmYgPSAwOyBvZmYgPCBuaS0+bG93ZXIuZXJhc2VzaXplOyBvZmYgKz0gbmktPmxvd2VyLndyaXRlc2l6ZSkgeworCQlubWJtX3dyaXRlX3BoeXNfcGFnZShuaSwgYWRkciArIG9mZiwgbmktPnBhZ2VfY2FjaGUsCisJCQkJICAgICBuaS0+cGFnZV9jYWNoZSArIG5pLT5sb3dlci53cml0ZXNpemUsCisJCQkJICAgICBOTUJNX01PREVfUkFXKTsKKwl9CisKKwlubWJtX3NldF9sb2dfbGV2ZWwobmksIGxldmVsKTsKKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBOTUJNIHJlbGF0ZWQgZnVuY3Rpb25zICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBubWJtX2NoZWNrX2hlYWRlciAtIENoZWNrIHdoZXRoZXIgYSBOTUJNIHN0cnVjdHVyZSBpcyB2YWxpZAorICogQGRhdGE6IHBvaW50ZXIgdG8gYSBOTUJNIHN0cnVjdHVyZSB3aXRoIGEgTk1CTSBoZWFkZXIgYXQgYmVnaW5uaW5nCisgKiBAc2l6ZTogU2l6ZSBvZiB0aGUgYnVmZmVyIHBvaW50ZWQgYnkgQGhlYWRlcgorICoKKyAqIFRoZSBzaXplIG9mIHRoZSBOTUJNIHN0cnVjdHVyZSBtYXkgYmUgbGFyZ2VyIHRoYW4gTk1CTSBoZWFkZXIsCisgKiBlLmcuIGJsb2NrIG1hcHBpbmcgdGFibGUgYW5kIGJsb2NrIHN0YXRlIHRhYmxlLgorICovCitzdGF0aWMgYm9vbCBubWJtX2NoZWNrX2hlYWRlcihjb25zdCB2b2lkICpkYXRhLCB1aW50MzJfdCBzaXplKQoreworCWNvbnN0IHN0cnVjdCBubWJtX2hlYWRlciAqaGVhZGVyID0gZGF0YTsKKwlzdHJ1Y3Qgbm1ibV9oZWFkZXIgbmhkcjsKKwl1aW50MzJfdCBuZXdfY2hlY2tzdW07CisKKwkvKgorCSAqIE1ha2Ugc3VyZSBleHBlY3RlZCBzdHJ1Y3R1cmUgc2l6ZSBpcyBlcXVhbCBvciBzbWFsbGVyIHRoYW4KKwkgKiBidWZmZXIgc2l6ZS4KKwkgKi8KKwlpZiAoaGVhZGVyLT5zaXplID4gc2l6ZSkKKwkJcmV0dXJuIGZhbHNlOworCisJbWVtY3B5KCZuaGRyLCBkYXRhLCBzaXplb2YobmhkcikpOworCisJbmhkci5jaGVja3N1bSA9IDA7CisJbmV3X2NoZWNrc3VtID0gbm1ibV9jcmMzMigwLCAmbmhkciwgc2l6ZW9mKG5oZHIpKTsKKwlpZiAoaGVhZGVyLT5zaXplID4gc2l6ZW9mKG5oZHIpKQorCQluZXdfY2hlY2tzdW0gPSBubWJtX2NyYzMyKG5ld19jaGVja3N1bSwKKwkJCShjb25zdCB1aW50OF90ICopZGF0YSArIHNpemVvZihuaGRyKSwKKwkJCWhlYWRlci0+c2l6ZSAtIHNpemVvZihuaGRyKSk7CisKKwlpZiAoaGVhZGVyLT5jaGVja3N1bSAhPSBuZXdfY2hlY2tzdW0pCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICogbm1ibV91cGRhdGVfY2hlY2tzdW0gLSBVcGRhdGUgY2hlY2tzdW0gb2YgYSBOTUJNIHN0cnVjdHVyZQorICogQGhlYWRlcjogcG9pbnRlciB0byBhIE5NQk0gc3RydWN0dXJlIHdpdGggYSBOTUJNIGhlYWRlciBhdCBiZWdpbm5pbmcKKyAqCisgKiBUaGUgc2l6ZSBvZiB0aGUgTk1CTSBzdHJ1Y3R1cmUgbXVzdCBiZSBzcGVjaWZpZWQgYnkgQGhlYWRlci0+c2l6ZQorICovCitzdGF0aWMgdm9pZCBubWJtX3VwZGF0ZV9jaGVja3N1bShzdHJ1Y3Qgbm1ibV9oZWFkZXIgKmhlYWRlcikKK3sKKwloZWFkZXItPmNoZWNrc3VtID0gMDsKKwloZWFkZXItPmNoZWNrc3VtID0gbm1ibV9jcmMzMigwLCBoZWFkZXIsIGhlYWRlci0+c2l6ZSk7Cit9CisKKy8qCisgKiBubWJtX2dldF9zcGFyZV9ibG9ja19jb3VudCAtIENhbGN1bGF0ZSBudW1iZXIgb2YgYmxvY2tzIHNob3VsZCBiZSByZXNlcnZlZAorICogQGJsb2NrX2NvdW50OiBudW1iZXIgb2YgYmxvY2tzIG9mIGRhdGEKKyAqCisgKiBDYWxjdWxhdGUgbnVtYmVyIG9mIGJsb2NrcyBzaG91bGQgYmUgcmVzZXJ2ZWQgZm9yIGRhdGEKKyAqLworc3RhdGljIHVpbnQzMl90IG5tYm1fZ2V0X3NwYXJlX2Jsb2NrX2NvdW50KHVpbnQzMl90IGJsb2NrX2NvdW50KQoreworCXVpbnQzMl90IHZhbDsKKworCXZhbCA9IChibG9ja19jb3VudCArIE5NQk1fU1BBUkVfQkxPQ0tfRElWIC8gMikgLyBOTUJNX1NQQVJFX0JMT0NLX0RJVjsKKwl2YWwgKj0gTk1CTV9TUEFSRV9CTE9DS19NVUxUSTsKKworCWlmICh2YWwgPCBOTUJNX1NQQVJFX0JMT0NLX01JTikKKwkJdmFsID0gTk1CTV9TUEFSRV9CTE9DS19NSU47CisKKwlyZXR1cm4gdmFsOworfQorCisvKgorICogbm1ibV9nZXRfYmxvY2tfc3RhdGVfcmF3IC0gR2V0IHN0YXRlIG9mIGEgYmxvY2sgZnJvbSByYXcgYmxvY2sgc3RhdGUgdGFibGUKKyAqIEBibG9ja19zdGF0ZTogcG9pbnRlciB0byByYXcgYmxvY2sgc3RhdGUgdGFibGUgKGJpdG1hcCkKKyAqIEBiYTogYmxvY2sgYWRkcmVzcworICovCitzdGF0aWMgdWludDMyX3Qgbm1ibV9nZXRfYmxvY2tfc3RhdGVfcmF3KG5tYm1fYml0bWFwX3QgKmJsb2NrX3N0YXRlLAorCQkJCQkgdWludDMyX3QgYmEpCit7CisJdWludDMyX3QgdW5pdCwgc2hpZnQ7CisKKwl1bml0ID0gYmEgLyBOTUJNX0JJVE1BUF9CTE9DS1NfUEVSX1VOSVQ7CisJc2hpZnQgPSAoYmEgJSBOTUJNX0JJVE1BUF9CTE9DS1NfUEVSX1VOSVQpICogTk1CTV9CSVRNQVBfQklUU19QRVJfQkxPQ0s7CisKKwlyZXR1cm4gKGJsb2NrX3N0YXRlW3VuaXRdID4+IHNoaWZ0KSAmIEJMT0NLX1NUX01BU0s7Cit9CisKKy8qCisgKiBubWJtX2dldF9ibG9ja19zdGF0ZSAtIEdldCBzdGF0ZSBvZiBhIGJsb2NrIGZyb20gYmxvY2sgc3RhdGUgdGFibGUKKyAqIEBuaTogTk1CTSBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqIEBiYTogYmxvY2sgYWRkcmVzcworICovCitzdGF0aWMgdWludDMyX3Qgbm1ibV9nZXRfYmxvY2tfc3RhdGUoc3RydWN0IG5tYm1faW5zdGFuY2UgKm5pLCB1aW50MzJfdCBiYSkKK3sKKwlyZXR1cm4gbm1ibV9nZXRfYmxvY2tfc3RhdGVfcmF3KG5pLT5ibG9ja19zdGF0ZSwgYmEpOworfQorCisvKgorICogbm1ibV9zZXRfYmxvY2tfc3RhdGUgLSBTZXQgc3RhdGUgb2YgYSBibG9jayB0byBibG9jayBzdGF0ZSB0YWJsZQorICogQG5pOiBOTUJNIGluc3RhbmNlIHN0cnVjdHVyZQorICogQGJhOiBibG9jayBhZGRyZXNzCisgKiBAc3RhdGU6IGJsb2NrIHN0YXRlCisgKgorICogU2V0IHN0YXRlIG9mIGEgYmxvY2suIElmIHRoZSBibG9jayBzdGF0ZSBjaGFuZ2VkLCBuaS0+YmxvY2tfc3RhdGVfY2hhbmdlZAorICogd2lsbCBiZSBpbmNyZWFzZWQuCisgKi8KK3N0YXRpYyBib29sIG5tYm1fc2V0X2Jsb2NrX3N0YXRlKHN0cnVjdCBubWJtX2luc3RhbmNlICpuaSwgdWludDMyX3QgYmEsCisJCQkJIHVpbnQzMl90IHN0YXRlKQoreworCXVpbnQzMl90IHVuaXQsIHNoaWZ0LCBvcmlnOworCW5tYm1fYml0bWFwX3QgdXY7CisKKwl1bml0ID0gYmEgLyBOTUJNX0JJVE1BUF9CTE9DS1NfUEVSX1VOSVQ7CisJc2hpZnQgPSAoYmEgJSBOTUJNX0JJVE1BUF9CTE9DS1NfUEVSX1VOSVQpICogTk1CTV9CSVRNQVBfQklUU19QRVJfQkxPQ0s7CisKKwlvcmlnID0gKG5pLT5ibG9ja19zdGF0ZVt1bml0XSA+PiBzaGlmdCkgJiBCTE9DS19TVF9NQVNLOworCXN0YXRlICY9IEJMT0NLX1NUX01BU0s7CisKKwl1diA9IG5pLT5ibG9ja19zdGF0ZVt1bml0XSAmICh+KEJMT0NLX1NUX01BU0sgPDwgc2hpZnQpKTsKKwl1diB8PSBzdGF0ZSA8PCBzaGlmdDsKKwluaS0+YmxvY2tfc3RhdGVbdW5pdF0gPSB1djsKKworCWlmIChzdGF0ZSA9PSBCTE9DS19TVF9CQUQpCisJCW5tYm1fbWFya19ibG9ja19jb2xvcl9iYWQobmksIGJhKTsKKworCWlmIChvcmlnICE9IHN0YXRlKSB7CisJCW5pLT5ibG9ja19zdGF0ZV9jaGFuZ2VkKys7CisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIG5tYm1fYmxvY2tfd2Fsa19hc2MgLSBTa2lwIHNwZWNpZmllZCBudW1iZXIgb2YgZ29vZCBibG9ja3MsIGFzY2VuZGluZyBhZGRyLgorICogQG5pOiBOTUJNIGluc3RhbmNlIHN0cnVjdHVyZQorICogQGJhOiBzdGFydCBwaHlzaWNhbCBibG9jayBhZGRyZXNzCisgKiBAbmJhOiByZXR1cm4gcGh5c2ljYWwgYmxvY2sgYWRkcmVzcyBhZnRlciB3YWxrCisgKiBAY291bnQ6IG51bWJlciBvZiBnb29kIGJsb2NrcyB0byBiZSBza2lwcGVkCisgKiBAbGltaXQ6IGhpZ2hlc3QgYmxvY2sgYWRkcmVzcyBhbGxvd2VkIGZvciB3YWxraW5nCisgKgorICogU3RhcnQgZnJvbSBAYmEsIHNraXBwaW5nIGFueSBiYWQgYmxvY2tzLCBjb3VudGluZyBAY291bnQgZ29vZCBibG9ja3MsIGFuZAorICogcmV0dXJuIHRoZSBuZXh0IGdvb2QgYmxvY2sgYWRkcmVzcy4KKyAqCisgKiBJZiBubyBlbm91Z2ggZ29vZCBibG9ja3MgY291bnRlZCB3aGlsZSBAbGltaXQgcmVhY2hlZCwgZmFsc2Ugd2lsbCBiZSByZXR1cm5lZC4KKyAqCisgKiBJZiBAY291bnQgPT0gMCwgbmVhcmVzdCBnb29kIGJsb2NrIGFkZHJlc3Mgd2lsbCBiZSByZXR1cm5lZC4KKyAqIEBsaW1pdCBpcyBub3QgY291bnRlZCBpbiB3YWxraW5nLgorICovCitzdGF0aWMgYm9vbCBubWJtX2Jsb2NrX3dhbGtfYXNjKHN0cnVjdCBubWJtX2luc3RhbmNlICpuaSwgdWludDMyX3QgYmEsCisJCQkJdWludDMyX3QgKm5iYSwgdWludDMyX3QgY291bnQsCisJCQkJdWludDMyX3QgbGltaXQpCit7CisJaW50MzJfdCBuYmxvY2sgPSBjb3VudDsKKworCWlmIChsaW1pdCA+PSBuaS0+YmxvY2tfY291bnQpCisJCWxpbWl0ID0gbmktPmJsb2NrX2NvdW50IC0gMTsKKworCXdoaWxlIChiYSA8IGxpbWl0KSB7CisJCWlmIChubWJtX2dldF9ibG9ja19zdGF0ZShuaSwgYmEpID09IEJMT0NLX1NUX0dPT0QpCisJCQluYmxvY2stLTsKKworCQlpZiAobmJsb2NrIDwgMCkgeworCQkJKm5iYSA9IGJhOworCQkJcmV0dXJuIHRydWU7CisJCX0KKworCQliYSsrOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIG5tYm1fYmxvY2tfd2Fsa19kZXNjIC0gU2tpcCBzcGVjaWZpZWQgbnVtYmVyIG9mIGdvb2QgYmxvY2tzLCBkZXNjZW5kaW5nIGFkZHIKKyAqIEBuaTogTk1CTSBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqIEBiYTogc3RhcnQgcGh5c2ljYWwgYmxvY2sgYWRkcmVzcworICogQG5iYTogcmV0dXJuIHBoeXNpY2FsIGJsb2NrIGFkZHJlc3MgYWZ0ZXIgd2FsaworICogQGNvdW50OiBudW1iZXIgb2YgZ29vZCBibG9ja3MgdG8gYmUgc2tpcHBlZAorICogQGxpbWl0OiBsb3dlc3QgYmxvY2sgYWRkcmVzcyBhbGxvd2VkIGZvciB3YWxraW5nCisgKgorICogU3RhcnQgZnJvbSBAYmEsIHNraXBwaW5nIGFueSBiYWQgYmxvY2tzLCBjb3VudGluZyBAY291bnQgZ29vZCBibG9ja3MsIGFuZAorICogcmV0dXJuIHRoZSBuZXh0IGdvb2QgYmxvY2sgYWRkcmVzcy4KKyAqCisgKiBJZiBubyBlbm91Z2ggZ29vZCBibG9ja3MgY291bnRlZCB3aGlsZSBAbGltaXQgcmVhY2hlZCwgZmFsc2Ugd2lsbCBiZSByZXR1cm5lZC4KKyAqCisgKiBJZiBAY291bnQgPT0gMCwgbmVhcmVzdCBnb29kIGJsb2NrIGFkZHJlc3Mgd2lsbCBiZSByZXR1cm5lZC4KKyAqIEBsaW1pdCBpcyBub3QgY291bnRlZCBpbiB3YWxraW5nLgorICovCitzdGF0aWMgYm9vbCBubWJtX2Jsb2NrX3dhbGtfZGVzYyhzdHJ1Y3Qgbm1ibV9pbnN0YW5jZSAqbmksIHVpbnQzMl90IGJhLAorCQkJCSB1aW50MzJfdCAqbmJhLCB1aW50MzJfdCBjb3VudCwgdWludDMyX3QgbGltaXQpCit7CisJaW50MzJfdCBuYmxvY2sgPSBjb3VudDsKKworCWlmIChsaW1pdCA+PSBuaS0+YmxvY2tfY291bnQpCisJCWxpbWl0ID0gbmktPmJsb2NrX2NvdW50IC0gMTsKKworCXdoaWxlIChiYSA+IGxpbWl0KSB7CisJCWlmIChubWJtX2dldF9ibG9ja19zdGF0ZShuaSwgYmEpID09IEJMT0NLX1NUX0dPT0QpCisJCQluYmxvY2stLTsKKworCQlpZiAobmJsb2NrIDwgMCkgeworCQkJKm5iYSA9IGJhOworCQkJcmV0dXJuIHRydWU7CisJCX0KKworCQliYS0tOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIG5tYm1fYmxvY2tfd2FsayAtIFNraXAgc3BlY2lmaWVkIG51bWJlciBvZiBnb29kIGJsb2NrcyBmcm9tIGN1cnIuIGJsb2NrIGFkZHIKKyAqIEBuaTogTk1CTSBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqIEBhc2NlbmRpbmc6IHdoZXRoZXIgdG8gd2FsayBhc2NlbmRpbmcKKyAqIEBiYTogc3RhcnQgcGh5c2ljYWwgYmxvY2sgYWRkcmVzcworICogQG5iYTogcmV0dXJuIHBoeXNpY2FsIGJsb2NrIGFkZHJlc3MgYWZ0ZXIgd2FsaworICogQGNvdW50OiBudW1iZXIgb2YgZ29vZCBibG9ja3MgdG8gYmUgc2tpcHBlZAorICogQGxpbWl0OiBoaWdoZXN0L2xvd2VzdCBibG9jayBhZGRyZXNzIGFsbG93ZWQgZm9yIHdhbGtpbmcKKyAqCisgKiBTdGFydCBmcm9tIEBiYSwgc2tpcHBpbmcgYW55IGJhZCBibG9ja3MsIGNvdW50aW5nIEBjb3VudCBnb29kIGJsb2NrcywgYW5kCisgKiByZXR1cm4gdGhlIG5leHQgZ29vZCBibG9jayBhZGRyZXNzLgorICoKKyAqIElmIG5vIGVub3VnaCBnb29kIGJsb2NrcyBjb3VudGVkIHdoaWxlIEBsaW1pdCByZWFjaGVkLCBmYWxzZSB3aWxsIGJlIHJldHVybmVkLgorICoKKyAqIElmIEBjb3VudCA9PSAwLCBuZWFyZXN0IGdvb2QgYmxvY2sgYWRkcmVzcyB3aWxsIGJlIHJldHVybmVkLgorICogQGxpbWl0IGNhbiBiZSBzZXQgdG8gbmVnYXRpdmUgaWYgbm8gbGltaXQgcmVxdWlyZWQuCisgKiBAbGltaXQgaXMgbm90IGNvdW50ZWQgaW4gd2Fsa2luZy4KKyAqLworc3RhdGljIGJvb2wgbm1ibV9ibG9ja193YWxrKHN0cnVjdCBubWJtX2luc3RhbmNlICpuaSwgYm9vbCBhc2NlbmRpbmcsCisJCQkgICAgdWludDMyX3QgYmEsIHVpbnQzMl90ICpuYmEsIGludDMyX3QgY291bnQsCisJCQkgICAgaW50MzJfdCBsaW1pdCkKK3sKKwlpZiAoYXNjZW5kaW5nKQorCQlyZXR1cm4gbm1ibV9ibG9ja193YWxrX2FzYyhuaSwgYmEsIG5iYSwgY291bnQsIGxpbWl0KTsKKworCXJldHVybiBubWJtX2Jsb2NrX3dhbGtfZGVzYyhuaSwgYmEsIG5iYSwgY291bnQsIGxpbWl0KTsKK30KKworLyoKKyAqIG5tYm1fc2Nhbl9iYWRibG9ja3MgLSBTY2FuIGFuZCByZWNvcmQgYWxsIGJhZCBibG9ja3MKKyAqIEBuaTogTk1CTSBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqCisgKiBTY2FuIHRoZSBlbnRpcmUgbG93ZXIgTkFORCBjaGlwIGFuZCByZWNvcmQgYWxsIGJhZCBibG9ja3MgaW4gdG8gYmxvY2sgc3RhdGUKKyAqIHRhYmxlLgorICovCitzdGF0aWMgdm9pZCBubWJtX3NjYW5fYmFkYmxvY2tzKHN0cnVjdCBubWJtX2luc3RhbmNlICpuaSkKK3sKKwl1aW50MzJfdCBiYTsKKworCWZvciAoYmEgPSAwOyBiYSA8IG5pLT5ibG9ja19jb3VudDsgYmErKykgeworCQlpZiAobm1ibV9jaGVja19iYWRfcGh5c19ibG9jayhuaSwgYmEpKSB7CisJCQlubWJtX3NldF9ibG9ja19zdGF0ZShuaSwgYmEsIEJMT0NLX1NUX0JBRCk7CisJCQlubG9nX2luZm8obmksICJCYWQgYmxvY2sgJXUgWzB4JTA4bGx4XVxuIiwgYmEsCisJCQkJIGJhMmFkZHIobmksIGJhKSk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBubWJtX2J1aWxkX21hcHBpbmdfdGFibGUgLSBCdWlsZCBpbml0aWFsIGJsb2NrIG1hcHBpbmcgdGFibGUKKyAqIEBuaTogTk1CTSBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqCisgKiBUaGUgaW5pdGlhbCBtYXBwaW5nIHRhYmxlIHdpbGwgYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBzdHJhdGFnZSBvZgorICogZmFjdG9yeSBwcm9kdWN0aW9uLgorICovCitzdGF0aWMgdm9pZCBubWJtX2J1aWxkX21hcHBpbmdfdGFibGUoc3RydWN0IG5tYm1faW5zdGFuY2UgKm5pKQoreworCXVpbnQzMl90IHBiLCBsYjsKKworCWZvciAocGIgPSAwLCBsYiA9IDA7IHBiIDwgbmktPm1nbXRfc3RhcnRfYmE7IHBiKyspIHsKKwkJaWYgKG5tYm1fZ2V0X2Jsb2NrX3N0YXRlKG5pLCBwYikgPT0gQkxPQ0tfU1RfQkFEKQorCQkJY29udGludWU7CisKKwkJLyogQWx3YXlzIG1hcCB0byB0aGUgbmV4dCBnb29kIGJsb2NrICovCisJCW5pLT5ibG9ja19tYXBwaW5nW2xiKytdID0gcGI7CisJfQorCisJbmktPmRhdGFfYmxvY2tfY291bnQgPSBsYjsKKworCS8qIFVudXNhYmxlL01hbmFnZW1lbnQgYmxvY2tzICovCisJZm9yIChwYiA9IGxiOyBwYiA8IG5pLT5ibG9ja19jb3VudDsgcGIrKykKKwkJbmktPmJsb2NrX21hcHBpbmdbcGJdID0gLTE7Cit9CisKKy8qCisgKiBubWJtX2VyYXNlX2Jsb2NrX2FuZF9jaGVjayAtIEVyYXNlIGEgYmxvY2sgYW5kIGNoZWNrIGl0cyB1c2FiaWxpdHkKKyAqIEBuaTogTk1CTSBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqIEBiYTogYmxvY2sgYWRkcmVzcyB0byBiZSBlcmFzZWQKKyAqCisgKiBFcmFzZSBhIGJsb2NrIGFuYyBjaGVjayBpdHMgdXNhYmlsaXR5CisgKgorICogUmV0dXJuIHRydWUgaWYgdGhlIGJsb2NrIGlzIHVzYWJsZSwgZmFsc2UgaWYgZXJhc3VyZSBmYWlsdXJlIG9yIHRoZSBibG9jaworICogaGFzIHRvbyBtYW55IGJpdGZsaXBzLgorICovCitzdGF0aWMgYm9vbCBubWJtX2VyYXNlX2Jsb2NrX2FuZF9jaGVjayhzdHJ1Y3Qgbm1ibV9pbnN0YW5jZSAqbmksIHVpbnQzMl90IGJhKQoreworCXVpbnQ2NF90IGFkZHIsIG9mZjsKKwlib29sIHN1Y2Nlc3M7CisJaW50IHJldDsKKworCXN1Y2Nlc3MgPSBubWJtX2VyYXNlX3BoeXNfYmxvY2sobmksIGJhMmFkZHIobmksIGJhKSk7CisJaWYgKCFzdWNjZXNzKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIShuaS0+bG93ZXIuZmxhZ3MgJiBOTUJNX0ZfRU1QVFlfUEFHRV9FQ0NfT0spKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qIENoZWNrIGV2ZXJ5IHBhZ2UgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCB0b28gbWFueSBiaXRmbGlwcyAqLworCisJYWRkciA9IGJhMmFkZHIobmksIGJhKTsKKworCWZvciAob2ZmID0gMDsgb2ZmIDwgbmktPmxvd2VyLmVyYXNlc2l6ZTsgb2ZmICs9IG5pLT5sb3dlci53cml0ZXNpemUpIHsKKwkJV0FUQ0hET0dfUkVTRVQoKTsKKworCQlyZXQgPSBubWJtX3JlYWRfcGh5c19wYWdlKG5pLCBhZGRyICsgb2ZmLCBuaS0+cGFnZV9jYWNoZSwgTlVMTCwKKwkJCQkJICBOTUJNX01PREVfUExBQ0VfT09CKTsKKwkJaWYgKHJldCA9PSAtRUJBRE1TRykgeworCQkJLyoKKwkJCSAqIE5NQk1fRl9FTVBUWV9QQUdFX0VDQ19PSyBtZWFucyB0aGUgZW1wdHkgcGFnZSBpcworCQkJICogc3RpbGwgcHJvdGVjdGVkIGJ5IEVDQy4gU28gcmVhZGluZyBwYWdlcyB3aXRoIEVDQworCQkJICogZW5hYmxlZCBhbmQgLUVCQURNU0cgbWVhbnMgdGhlcmUgYXJlIHRvbyBtYW55CisJCQkgKiBiaXRmbGlwcyB0aGF0IGNhbid0IGJlIHJlY292ZXJlZCwgYW5kIHRoZSBibG9jaworCQkJICogY29udGFpbmluZyB0aGUgcGFnZSBzaG91bGQgYmUgbWFya2VkIGJhZC4KKwkJCSAqLworCQkJbmxvZ19lcnIobmksCisJCQkJICJUb28gbWFueSBiaXRmbGlwcyBpbiBlbXB0eSBwYWdlIGF0IDB4JWxseFxuIiwKKwkJCQkgYWRkciArIG9mZik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIG5tYm1fZXJhc2VfcmFuZ2UgLSBFcmFzZSBhIHJhbmdlIG9mIGJsb2NrcworICogQG5pOiBOTUJNIGluc3RhbmNlIHN0cnVjdHVyZQorICogQGJhOiBibG9jayBhZGRyZXNzIHdoZXJlIHRoZSBlcmFzdXJlIHdpbGwgc3RhcnQKKyAqIEBsaW1pdDogdG9wIGJsb2NrIGFkZHJlc3MgYWxsb3dlZCBmb3IgZXJhc3VyZQorICoKKyAqIEVyYXNlIGJsb2NrcyB3aXRoaW4gdGhlIHNwZWNpZmljIHJhbmdlLiBOZXdseS1mb3VuZCBiYWQgYmxvY2tzIHdpbGwgYmUKKyAqIG1hcmtlZC4KKyAqCisgKiBAbGltaXQgaXMgbm90IGNvdW50ZWQgaW50byB0aGUgYWxsb3dlZCBlcmFzdXJlIGFkZHJlc3MuCisgKi8KK3N0YXRpYyB2b2lkIG5tYm1fZXJhc2VfcmFuZ2Uoc3RydWN0IG5tYm1faW5zdGFuY2UgKm5pLCB1aW50MzJfdCBiYSwKKwkJCSAgICAgdWludDMyX3QgbGltaXQpCit7CisJYm9vbCBzdWNjZXNzOworCisJd2hpbGUgKGJhIDwgbGltaXQpIHsKKwkJV0FUQ0hET0dfUkVTRVQoKTsKKworCQlpZiAobm1ibV9nZXRfYmxvY2tfc3RhdGUobmksIGJhKSAhPSBCTE9DS19TVF9HT09EKQorCQkJZ290byBuZXh0X2Jsb2NrOworCisJCS8qIEluc3VyYW5jZSB0byBkZXRlY3QgdW5leHBlY3RlZCBiYWQgYmxvY2sgbWFya2VkIGJ5IHVzZXIgKi8KKwkJaWYgKG5tYm1fY2hlY2tfYmFkX3BoeXNfYmxvY2sobmksIGJhKSkgeworCQkJbm1ibV9zZXRfYmxvY2tfc3RhdGUobmksIGJhLCBCTE9DS19TVF9CQUQpOworCQkJZ290byBuZXh0X2Jsb2NrOworCQl9CisKKwkJc3VjY2VzcyA9IG5tYm1fZXJhc2VfYmxvY2tfYW5kX2NoZWNrKG5pLCBiYSk7CisJCWlmIChzdWNjZXNzKQorCQkJZ290byBuZXh0X2Jsb2NrOworCisJCW5tYm1fbWFya19waHlzX2JhZF9ibG9jayhuaSwgYmEpOworCQlubWJtX3NldF9ibG9ja19zdGF0ZShuaSwgYmEsIEJMT0NLX1NUX0JBRCk7CisKKwluZXh0X2Jsb2NrOgorCQliYSsrOworCX0KK30KKworLyoKKyAqIG5tYm1fd3JpdGVfcmVwZWF0ZWRfZGF0YSAtIFdyaXRlIGNyaXRpY2FsIGRhdGEgdG8gYSBibG9jayB3aXRoIHJldHJ5CisgKiBAbmk6IE5NQk0gaW5zdGFuY2Ugc3RydWN0dXJlCisgKiBAYmE6IGJsb2NrIGFkZHJlc3Mgd2hlcmUgdGhlIGRhdGEgd2lsbCBiZSB3cml0dGVuIHRvCisgKiBAZGF0YTogdGhlIGRhdGEgdG8gYmUgd3JpdHRlbgorICogQHNpemU6IHNpemUgb2YgdGhlIGRhdGEKKyAqCisgKiBXcml0ZSBkYXRhIHRvIGV2ZXJ5IHBhZ2Ugb2YgdGhlIGJsb2NrLiBTdWNjZXNzIG9ubHkgaWYgYWxsIHBhZ2VzIHdpdGhpbgorICogdGhpcyBibG9jayBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4uCisgKgorICogTWFrZSBzdXJlIGRhdGEgc2l6ZSBpcyBub3QgYmlnZ2VyIHRoYW4gb25lIHBhZ2UuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIHdyaXRlIGFuZCB2ZXJpZnkgZXZlcnkgcGFnZSBmb3IgYXQgbW9zdAorICogTk1CTV9UUllfQ09VTlQgdGltZXMuCisgKi8KK3N0YXRpYyBib29sIG5tYm1fd3JpdGVfcmVwZWF0ZWRfZGF0YShzdHJ1Y3Qgbm1ibV9pbnN0YW5jZSAqbmksIHVpbnQzMl90IGJhLAorCQkJCSAgICAgY29uc3Qgdm9pZCAqZGF0YSwgdWludDMyX3Qgc2l6ZSkKK3sKKwl1aW50NjRfdCBhZGRyLCBvZmY7CisJYm9vbCBzdWNjZXNzOworCWludCByZXQ7CisKKwlpZiAoc2l6ZSA+IG5pLT5sb3dlci53cml0ZXNpemUpCisJCXJldHVybiBmYWxzZTsKKworCWFkZHIgPSBiYTJhZGRyKG5pLCBiYSk7CisKKwlmb3IgKG9mZiA9IDA7IG9mZiA8IG5pLT5sb3dlci5lcmFzZXNpemU7IG9mZiArPSBuaS0+bG93ZXIud3JpdGVzaXplKSB7CisJCVdBVENIRE9HX1JFU0VUKCk7CisKKwkJLyogUHJlcGFyZSBwYWdlIGRhdGEuIGZpbGwgMHhmZiB0byB1bnVzZWQgcmVnaW9uICovCisJCW1lbWNweShuaS0+cGFnZV9jYWNoZSwgZGF0YSwgc2l6ZSk7CisJCW1lbXNldChuaS0+cGFnZV9jYWNoZSArIHNpemUsIDB4ZmYsIG5pLT5yYXdwYWdlX3NpemUgLSBzaXplKTsKKworCQlzdWNjZXNzID0gbm1ibV93cml0ZV9waHlzX3BhZ2UobmksIGFkZHIgKyBvZmYsIG5pLT5wYWdlX2NhY2hlLAorCQkJCQkgICAgICAgTlVMTCwgTk1CTV9NT0RFX1BMQUNFX09PQik7CisJCWlmICghc3VjY2VzcykKKwkJCXJldHVybiBmYWxzZTsKKworCQkvKiBWZXJpZnkgdGhlIGRhdGEganVzdCB3cml0dGVuLiBFQ0MgZXJyb3IgaW5kaWNhdGVzIGZhaWx1cmUgKi8KKwkJcmV0ID0gbm1ibV9yZWFkX3BoeXNfcGFnZShuaSwgYWRkciArIG9mZiwgbmktPnBhZ2VfY2FjaGUsIE5VTEwsCisJCQkJCSAgTk1CTV9NT0RFX1BMQUNFX09PQik7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIGZhbHNlOworCisJCWlmIChtZW1jbXAobmktPnBhZ2VfY2FjaGUsIGRhdGEsIHNpemUpKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCisvKgorICogbm1ibV93cml0ZV9zaWduYXR1cmUgLSBXcml0ZSBzaWduYXR1cmUgdG8gTkFORCBjaGlwCisgKiBAbmk6IE5NQk0gaW5zdGFuY2Ugc3RydWN0dXJlCisgKiBAbGltaXQ6IHRvcCBibG9jayBhZGRyZXNzIGFsbG93ZWQgZm9yIHdyaXRpbmcKKyAqIEBzaWduYXR1cmU6IHRoZSBzaWduYXR1cmUgdG8gYmUgd3JpdHRlbgorICogQHNpZ25hdHVyZV9iYTogdGhlIGFjdHVhbCBibG9jayBhZGRyZXNzIHdoZXJlIHNpZ25hdHVyZSBpcyB3cml0dGVuIHRvCisgKgorICogV3JpdGUgc2lnbmF0dXJlIHdpdGhpbiBhIHNwZWNpZmljIHJhbmdlLCBmcm9tIGNoaXAgYm90dG9tIHRvIGxpbWl0LgorICogQXQgbW9zdCBvbmUgYmxvY2sgd2lsbCBiZSB3cml0dGVuLgorICoKKyAqIEBsaW1pdCBpcyBub3QgY291bnRlZCBpbnRvIHRoZSBhbGxvd2VkIHdyaXRlIGFkZHJlc3MuCisgKi8KK3N0YXRpYyBib29sIG5tYm1fd3JpdGVfc2lnbmF0dXJlKHN0cnVjdCBubWJtX2luc3RhbmNlICpuaSwgdWludDMyX3QgbGltaXQsCisJCQkJIGNvbnN0IHN0cnVjdCBubWJtX3NpZ25hdHVyZSAqc2lnbmF0dXJlLAorCQkJCSB1aW50MzJfdCAqc2lnbmF0dXJlX2JhKQoreworCXVpbnQzMl90IGJhID0gbmktPmJsb2NrX2NvdW50IC0gMTsKKwlib29sIHN1Y2Nlc3M7CisKKwl3aGlsZSAoYmEgPiBsaW1pdCkgeworCQlXQVRDSERPR19SRVNFVCgpOworCisJCWlmIChubWJtX2dldF9ibG9ja19zdGF0ZShuaSwgYmEpICE9IEJMT0NLX1NUX0dPT0QpCisJCQlnb3RvIG5leHRfYmxvY2s7CisKKwkJLyogSW5zdXJhbmNlIHRvIGRldGVjdCB1bmV4cGVjdGVkIGJhZCBibG9jayBtYXJrZWQgYnkgdXNlciAqLworCQlpZiAobm1ibV9jaGVja19iYWRfcGh5c19ibG9jayhuaSwgYmEpKSB7CisJCQlubWJtX3NldF9ibG9ja19zdGF0ZShuaSwgYmEsIEJMT0NLX1NUX0JBRCk7CisJCQlnb3RvIG5leHRfYmxvY2s7CisJCX0KKworCQlzdWNjZXNzID0gbm1ibV9lcmFzZV9ibG9ja19hbmRfY2hlY2sobmksIGJhKTsKKwkJaWYgKCFzdWNjZXNzKQorCQkJZ290byBza2lwX2JhZF9ibG9jazsKKworCQlzdWNjZXNzID0gbm1ibV93cml0ZV9yZXBlYXRlZF9kYXRhKG5pLCBiYSwgc2lnbmF0dXJlLAorCQkJCQkJICAgc2l6ZW9mKCpzaWduYXR1cmUpKTsKKwkJaWYgKHN1Y2Nlc3MpIHsKKwkJCSpzaWduYXR1cmVfYmEgPSBiYTsKKwkJCXJldHVybiB0cnVlOworCQl9CisKKwlza2lwX2JhZF9ibG9jazoKKwkJbm1ibV9tYXJrX3BoeXNfYmFkX2Jsb2NrKG5pLCBiYSk7CisJCW5tYm1fc2V0X2Jsb2NrX3N0YXRlKG5pLCBiYSwgQkxPQ0tfU1RfQkFEKTsKKworCW5leHRfYmxvY2s6CisJCWJhLS07CisJfTsKKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIG5tYm5fcmVhZF9kYXRhIC0gUmVhZCBkYXRhCisgKiBAbmk6IE5NQk0gaW5zdGFuY2Ugc3RydWN0dXJlCisgKiBAYWRkcjogbGluZWFyIGFkZHJlc3Mgd2hlcmUgdGhlIGRhdGEgd2lsbCBiZSByZWFkIGZyb20KKyAqIEBkYXRhOiB0aGUgZGF0YSB0byBiZSByZWFkCisgKiBAc2l6ZTogdGhlIHNpemUgb2YgZGF0YQorICoKKyAqIFJlYWQgZGF0YSByYW5nZS4KKyAqIEV2ZXJ5IHBhZ2Ugd2lsbCBiZSB0cmllZCBmb3IgYXQgbW9zdCBOTUJNX1RSWV9DT1VOVCB0aW1lcy4KKyAqCisgKiBSZXR1cm4gMCBmb3Igc3VjY2VzcywgcG9zaXRpdmUgdmFsdWUgZm9yIGNvcnJlY3RlZCBiaXRmbGlwIGNvdW50LAorICogLUVCQURNU0cgZm9yIGVjYyBlcnJvciwgb3RoZXIgbmVnYXRpdmUgdmFsdWVzIGZvciBvdGhlciBlcnJvcnMKKyAqLworc3RhdGljIGludCBubWJuX3JlYWRfZGF0YShzdHJ1Y3Qgbm1ibV9pbnN0YW5jZSAqbmksIHVpbnQ2NF90IGFkZHIsIHZvaWQgKmRhdGEsCisJCQkgIHVpbnQzMl90IHNpemUpCit7CisJdWludDY0X3Qgb2ZmID0gYWRkcjsKKwl1aW50OF90ICpwdHIgPSBkYXRhOworCXVpbnQzMl90IHNpemVyZW1haW4gPSBzaXplLCBjaHVua3NpemUsIGxlYWRpbmc7CisJaW50IHJldDsKKworCXdoaWxlIChzaXplcmVtYWluKSB7CisJCVdBVENIRE9HX1JFU0VUKCk7CisKKwkJbGVhZGluZyA9IG9mZiAmIG5pLT53cml0ZXNpemVfbWFzazsKKwkJY2h1bmtzaXplID0gbmktPmxvd2VyLndyaXRlc2l6ZSAtIGxlYWRpbmc7CisJCWlmIChjaHVua3NpemUgPiBzaXplcmVtYWluKQorCQkJY2h1bmtzaXplID0gc2l6ZXJlbWFpbjsKKworCQlpZiAoY2h1bmtzaXplID09IG5pLT5sb3dlci53cml0ZXNpemUpIHsKKwkJCXJldCA9IG5tYm1fcmVhZF9waHlzX3BhZ2UobmksIG9mZiAtIGxlYWRpbmcsIHB0ciwgTlVMTCwKKwkJCQkJCSAgTk1CTV9NT0RFX1BMQUNFX09PQik7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCQl9IGVsc2UgeworCQkJcmV0ID0gbm1ibV9yZWFkX3BoeXNfcGFnZShuaSwgb2ZmIC0gbGVhZGluZywKKwkJCQkJCSAgbmktPnBhZ2VfY2FjaGUsIE5VTEwsCisJCQkJCQkgIE5NQk1fTU9ERV9QTEFDRV9PT0IpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKworCQkJbWVtY3B5KHB0ciwgbmktPnBhZ2VfY2FjaGUgKyBsZWFkaW5nLCBjaHVua3NpemUpOworCQl9CisKKwkJb2ZmICs9IGNodW5rc2l6ZTsKKwkJcHRyICs9IGNodW5rc2l6ZTsKKwkJc2l6ZXJlbWFpbiAtPSBjaHVua3NpemU7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBubWJuX3dyaXRlX3ZlcmlmeV9kYXRhIC0gV3JpdGUgZGF0YSB3aXRoIHZhbGlkYXRpb24KKyAqIEBuaTogTk1CTSBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqIEBhZGRyOiBsaW5lYXIgYWRkcmVzcyB3aGVyZSB0aGUgZGF0YSB3aWxsIGJlIHdyaXR0ZW4gdG8KKyAqIEBkYXRhOiB0aGUgZGF0YSB0byBiZSB3cml0dGVuCisgKiBAc2l6ZTogdGhlIHNpemUgb2YgZGF0YQorICoKKyAqIFdyaXRlIGRhdGEgYW5kIHZlcmlmeS4KKyAqIEV2ZXJ5IHBhZ2Ugd2lsbCBiZSB0cmllZCBmb3IgYXQgbW9zdCBOTUJNX1RSWV9DT1VOVCB0aW1lcy4KKyAqLworc3RhdGljIGJvb2wgbm1ibl93cml0ZV92ZXJpZnlfZGF0YShzdHJ1Y3Qgbm1ibV9pbnN0YW5jZSAqbmksIHVpbnQ2NF90IGFkZHIsCisJCQkJICAgY29uc3Qgdm9pZCAqZGF0YSwgdWludDMyX3Qgc2l6ZSkKK3sKKwl1aW50NjRfdCBvZmYgPSBhZGRyOworCWNvbnN0IHVpbnQ4X3QgKnB0ciA9IGRhdGE7CisJdWludDMyX3Qgc2l6ZXJlbWFpbiA9IHNpemUsIGNodW5rc2l6ZSwgbGVhZGluZzsKKwlib29sIHN1Y2Nlc3M7CisJaW50IHJldDsKKworCXdoaWxlIChzaXplcmVtYWluKSB7CisJCVdBVENIRE9HX1JFU0VUKCk7CisKKwkJbGVhZGluZyA9IG9mZiAmIG5pLT53cml0ZXNpemVfbWFzazsKKwkJY2h1bmtzaXplID0gbmktPmxvd2VyLndyaXRlc2l6ZSAtIGxlYWRpbmc7CisJCWlmIChjaHVua3NpemUgPiBzaXplcmVtYWluKQorCQkJY2h1bmtzaXplID0gc2l6ZXJlbWFpbjsKKworCQkvKiBQcmVwYXJlIHBhZ2UgZGF0YS4gZmlsbCAweGZmIHRvIHVudXNlZCByZWdpb24gKi8KKwkJbWVtc2V0KG5pLT5wYWdlX2NhY2hlLCAweGZmLCBuaS0+cmF3cGFnZV9zaXplKTsKKwkJbWVtY3B5KG5pLT5wYWdlX2NhY2hlICsgbGVhZGluZywgcHRyLCBjaHVua3NpemUpOworCisJCXN1Y2Nlc3MgPSBubWJtX3dyaXRlX3BoeXNfcGFnZShuaSwgb2ZmIC0gbGVhZGluZywKKwkJCQkJICAgICAgIG5pLT5wYWdlX2NhY2hlLCBOVUxMLAorCQkJCQkgICAgICAgTk1CTV9NT0RFX1BMQUNFX09PQik7CisJCWlmICghc3VjY2VzcykKKwkJCXJldHVybiBmYWxzZTsKKworCQkvKiBWZXJpZnkgdGhlIGRhdGEganVzdCB3cml0dGVuLiBFQ0MgZXJyb3IgaW5kaWNhdGVzIGZhaWx1cmUgKi8KKwkJcmV0ID0gbm1ibV9yZWFkX3BoeXNfcGFnZShuaSwgb2ZmIC0gbGVhZGluZywgbmktPnBhZ2VfY2FjaGUsCisJCQkJCSAgTlVMTCwgTk1CTV9NT0RFX1BMQUNFX09PQik7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIGZhbHNlOworCisJCWlmIChtZW1jbXAobmktPnBhZ2VfY2FjaGUgKyBsZWFkaW5nLCBwdHIsIGNodW5rc2l6ZSkpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJb2ZmICs9IGNodW5rc2l6ZTsKKwkJcHRyICs9IGNodW5rc2l6ZTsKKwkJc2l6ZXJlbWFpbiAtPSBjaHVua3NpemU7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBubWJtX3dyaXRlX21nbXRfcmFuZ2UgLSBXcml0ZSBtYW5hZ2VtZW50IGRhdGEgaW50byBOQU5EIHdpdGhpbiBhIHJhbmdlCisgKiBAbmk6IE5NQk0gaW5zdGFuY2Ugc3RydWN0dXJlCisgKiBAYWRkcjogcHJlZmVycmVkIHN0YXJ0IGJsb2NrIGFkZHJlc3MgZm9yIHdyaXRpbmcKKyAqIEBsaW1pdDogaGlnaGVzdCBibG9jayBhZGRyZXNzIGFsbG93ZWQgZm9yIHdyaXRpbmcKKyAqIEBkYXRhOiB0aGUgZGF0YSB0byBiZSB3cml0dGVuCisgKiBAc2l6ZTogdGhlIHNpemUgb2YgZGF0YQorICogQGFjdHVhbF9zdGFydF9iYTogYWN0dWFsIHN0YXJ0IGJsb2NrIGFkZHJlc3Mgb2YgZGF0YQorICogQGFjdHVhbF9lbmRfYmE6IGJsb2NrIGFkZHJlc3MgYWZ0ZXIgdGhlIGVuZCBvZiBkYXRhCisgKgorICogQGxpbWl0IGlzIG5vdCBjb3VudGVkIGludG8gdGhlIGFsbG93ZWQgd3JpdGUgYWRkcmVzcy4KKyAqLworc3RhdGljIGJvb2wgbm1ibV93cml0ZV9tZ210X3JhbmdlKHN0cnVjdCBubWJtX2luc3RhbmNlICpuaSwgdWludDMyX3QgYmEsCisJCQkJICB1aW50MzJfdCBsaW1pdCwgY29uc3Qgdm9pZCAqZGF0YSwKKwkJCQkgIHVpbnQzMl90IHNpemUsIHVpbnQzMl90ICphY3R1YWxfc3RhcnRfYmEsCisJCQkJICB1aW50MzJfdCAqYWN0dWFsX2VuZF9iYSkKK3sKKwljb25zdCB1aW50OF90ICpwdHIgPSBkYXRhOworCXVpbnQzMl90IHNpemVyZW1haW4gPSBzaXplLCBjaHVua3NpemU7CisJYm9vbCBzdWNjZXNzOworCisJd2hpbGUgKHNpemVyZW1haW4gJiYgYmEgPCBsaW1pdCkgeworCQlXQVRDSERPR19SRVNFVCgpOworCisJCWNodW5rc2l6ZSA9IHNpemVyZW1haW47CisJCWlmIChjaHVua3NpemUgPiBuaS0+bG93ZXIuZXJhc2VzaXplKQorCQkJY2h1bmtzaXplID0gbmktPmxvd2VyLmVyYXNlc2l6ZTsKKworCQlpZiAobm1ibV9nZXRfYmxvY2tfc3RhdGUobmksIGJhKSAhPSBCTE9DS19TVF9HT09EKQorCQkJZ290byBuZXh0X2Jsb2NrOworCisJCS8qIEluc3VyYW5jZSB0byBkZXRlY3QgdW5leHBlY3RlZCBiYWQgYmxvY2sgbWFya2VkIGJ5IHVzZXIgKi8KKwkJaWYgKG5tYm1fY2hlY2tfYmFkX3BoeXNfYmxvY2sobmksIGJhKSkgeworCQkJbm1ibV9zZXRfYmxvY2tfc3RhdGUobmksIGJhLCBCTE9DS19TVF9CQUQpOworCQkJZ290byBuZXh0X2Jsb2NrOworCQl9CisKKwkJc3VjY2VzcyA9IG5tYm1fZXJhc2VfYmxvY2tfYW5kX2NoZWNrKG5pLCBiYSk7CisJCWlmICghc3VjY2VzcykKKwkJCWdvdG8gc2tpcF9iYWRfYmxvY2s7CisKKwkJc3VjY2VzcyA9IG5tYm5fd3JpdGVfdmVyaWZ5X2RhdGEobmksIGJhMmFkZHIobmksIGJhKSwgcHRyLAorCQkJCQkJIGNodW5rc2l6ZSk7CisJCWlmICghc3VjY2VzcykKKwkJCWdvdG8gc2tpcF9iYWRfYmxvY2s7CisKKwkJaWYgKHNpemVyZW1haW4gPT0gc2l6ZSkKKwkJCSphY3R1YWxfc3RhcnRfYmEgPSBiYTsKKworCQlwdHIgKz0gY2h1bmtzaXplOworCQlzaXplcmVtYWluIC09IGNodW5rc2l6ZTsKKworCQlnb3RvIG5leHRfYmxvY2s7CisKKwlza2lwX2JhZF9ibG9jazoKKwkJbm1ibV9tYXJrX3BoeXNfYmFkX2Jsb2NrKG5pLCBiYSk7CisJCW5tYm1fc2V0X2Jsb2NrX3N0YXRlKG5pLCBiYSwgQkxPQ0tfU1RfQkFEKTsKKworCW5leHRfYmxvY2s6CisJCWJhKys7CisJfQorCisJaWYgKHNpemVyZW1haW4pCisJCXJldHVybiBmYWxzZTsKKworCSphY3R1YWxfZW5kX2JhID0gYmE7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIG5tYm1fZ2VuZXJhdGVfaW5mb190YWJsZV9jYWNoZSAtIEdlbmVyYXRlIGluZm8gdGFibGUgY2FjaGUgZGF0YQorICogQG5pOiBOTUJNIGluc3RhbmNlIHN0cnVjdHVyZQorICoKKyAqIEdlbmVyYXRlIGluZm8gdGFibGUgY2FjaGUgZGF0YSB0byBiZSB3cml0dGVuIGludG8gZmxhc2guCisgKi8KK3N0YXRpYyBib29sIG5tYm1fZ2VuZXJhdGVfaW5mb190YWJsZV9jYWNoZShzdHJ1Y3Qgbm1ibV9pbnN0YW5jZSAqbmkpCit7CisJYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisKKwltZW1zZXQobmktPmluZm9fdGFibGVfY2FjaGUsIDB4ZmYsIG5pLT5pbmZvX3RhYmxlX3NpemUpOworCisJbWVtY3B5KG5pLT5pbmZvX3RhYmxlX2NhY2hlICsgbmktPmluZm9fdGFibGUuc3RhdGVfdGFibGVfb2ZmLAorCSAgICAgICBuaS0+YmxvY2tfc3RhdGUsIG5pLT5zdGF0ZV90YWJsZV9zaXplKTsKKworCW1lbWNweShuaS0+aW5mb190YWJsZV9jYWNoZSArIG5pLT5pbmZvX3RhYmxlLm1hcHBpbmdfdGFibGVfb2ZmLAorCQluaS0+YmxvY2tfbWFwcGluZywgbmktPm1hcHBpbmdfdGFibGVfc2l6ZSk7CisKKwluaS0+aW5mb190YWJsZS5oZWFkZXIubWFnaWMgPSBOTUJNX01BR0lDX0lORk9fVEFCTEU7CisJbmktPmluZm9fdGFibGUuaGVhZGVyLnZlcnNpb24gPSBOTUJNX1ZFUjsKKwluaS0+aW5mb190YWJsZS5oZWFkZXIuc2l6ZSA9IG5pLT5pbmZvX3RhYmxlX3NpemU7CisKKwlpZiAobmktPmJsb2NrX3N0YXRlX2NoYW5nZWQgfHwgbmktPmJsb2NrX21hcHBpbmdfY2hhbmdlZCkgeworCQluaS0+aW5mb190YWJsZS53cml0ZV9jb3VudCsrOworCQljaGFuZ2VkID0gdHJ1ZTsKKwl9CisKKwltZW1jcHkobmktPmluZm9fdGFibGVfY2FjaGUsICZuaS0+aW5mb190YWJsZSwgc2l6ZW9mKG5pLT5pbmZvX3RhYmxlKSk7CisKKwlubWJtX3VwZGF0ZV9jaGVja3N1bSgoc3RydWN0IG5tYm1faGVhZGVyICopbmktPmluZm9fdGFibGVfY2FjaGUpOworCisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKKy8qCisgKiBubWJtX3dyaXRlX2luZm9fdGFibGUgLSBXcml0ZSBpbmZvIHRhYmxlIGludG8gTkFORCB3aXRoaW4gYSByYW5nZQorICogQG5pOiBOTUJNIGluc3RhbmNlIHN0cnVjdHVyZQorICogQGJhOiBwcmVmZXJyZWQgc3RhcnQgYmxvY2sgYWRkcmVzcyBmb3Igd3JpdGluZworICogQGxpbWl0OiBoaWdoZXN0IGJsb2NrIGFkZHJlc3MgYWxsb3dlZCBmb3Igd3JpdGluZworICogQGFjdHVhbF9zdGFydF9iYTogYWN0dWFsIHN0YXJ0IGJsb2NrIGFkZHJlc3Mgb2YgaW5mbyB0YWJsZQorICogQGFjdHVhbF9lbmRfYmE6IGJsb2NrIGFkZHJlc3MgYWZ0ZXIgdGhlIGVuZCBvZiBpbmZvIHRhYmxlCisgKgorICogQGxpbWl0IGlzIGNvdW50ZWQgaW50byB0aGUgYWxsb3dlZCB3cml0ZSBhZGRyZXNzLgorICovCitzdGF0aWMgYm9vbCBubWJtX3dyaXRlX2luZm9fdGFibGUoc3RydWN0IG5tYm1faW5zdGFuY2UgKm5pLCB1aW50MzJfdCBiYSwKKwkJCQkgIHVpbnQzMl90IGxpbWl0LCB1aW50MzJfdCAqYWN0dWFsX3N0YXJ0X2JhLAorCQkJCSAgdWludDMyX3QgKmFjdHVhbF9lbmRfYmEpCit7CisJcmV0dXJuIG5tYm1fd3JpdGVfbWdtdF9yYW5nZShuaSwgYmEsIGxpbWl0LCBuaS0+aW5mb190YWJsZV9jYWNoZSwKKwkJCQkgICAgIG5pLT5pbmZvX3RhYmxlX3NpemUsIGFjdHVhbF9zdGFydF9iYSwKKwkJCQkgICAgIGFjdHVhbF9lbmRfYmEpOworfQorCisvKgorICogbm1ibV9tYXJrX3RhYmxlc19jbGVhbiAtIE1hcmsgaW5mbyB0YWJsZSBgY2xlYW4nCisgKiBAbmk6IE5NQk0gaW5zdGFuY2Ugc3RydWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkIG5tYm1fbWFya190YWJsZXNfY2xlYW4oc3RydWN0IG5tYm1faW5zdGFuY2UgKm5pKQoreworCW5pLT5ibG9ja19zdGF0ZV9jaGFuZ2VkID0gMDsKKwluaS0+YmxvY2tfbWFwcGluZ19jaGFuZ2VkID0gMDsKK30KKworLyoKKyAqIG5tYm1fdHJ5X3Jlc2VydmVfYmxvY2tzIC0gUmVzZXJ2ZSBibG9ja3Mgd2l0aCBjb21wcm9taXNhdGlvbgorICogQG5pOiBOTUJNIGluc3RhbmNlIHN0cnVjdHVyZQorICogQGJhOiBzdGFydCBwaHlzaWNhbCBibG9jayBhZGRyZXNzCisgKiBAbmJhOiByZXR1cm4gcGh5c2ljYWwgYmxvY2sgYWRkcmVzcyBhZnRlciByZXNlcnZhdGlvbgorICogQGNvdW50OiBudW1iZXIgb2YgZ29vZCBibG9ja3MgdG8gYmUgc2tpcHBlZAorICogQG1pbl9jb3VudDogbWluaW11bSBudW1iZXIgb2YgZ29vZCBibG9ja3MgdG8gYmUgc2tpcHBlZAorICogQGxpbWl0OiBoaWdoZXN0L2xvd2VzdCBibG9jayBhZGRyZXNzIGFsbG93ZWQgZm9yIHdhbGtpbmcKKyAqCisgKiBSZXNlcnZlIHNwZWNpZmljIGJsb2Nrcy4gSWYgZmFpbGVkLCB0cnkgdG8gcmVzZXJ2ZSBhcyBtYW55IGFzIHBvc3NpYmxlLgorICovCitzdGF0aWMgYm9vbCBubWJtX3RyeV9yZXNlcnZlX2Jsb2NrcyhzdHJ1Y3Qgbm1ibV9pbnN0YW5jZSAqbmksIHVpbnQzMl90IGJhLAorCQkJCSAgICB1aW50MzJfdCAqbmJhLCB1aW50MzJfdCBjb3VudCwKKwkJCQkgICAgaW50MzJfdCBtaW5fY291bnQsIGludDMyX3QgbGltaXQpCit7CisJaW50MzJfdCBuYmxvY2tzID0gY291bnQ7CisJYm9vbCBzdWNjZXNzOworCisJd2hpbGUgKG5ibG9ja3MgPj0gbWluX2NvdW50KSB7CisJCXN1Y2Nlc3MgPSBubWJtX2Jsb2NrX3dhbGsobmksIHRydWUsIGJhLCBuYmEsIG5ibG9ja3MsIGxpbWl0KTsKKwkJaWYgKHN1Y2Nlc3MpCisJCQlyZXR1cm4gdHJ1ZTsKKworCQluYmxvY2tzLS07CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogbm1ibV9yZWJ1aWxkX2luZm9fdGFibGUgLSBCdWlsZCBtYWluICYgYmFja3VwIGluZm8gdGFibGUgZnJvbSBzY3JhdGNoCisgKiBAbmk6IE5NQk0gaW5zdGFuY2Ugc3RydWN0dXJlCisgKiBAYWxsb3dfbm9fZ2FwOiBhbGxvdyBubyBzcGFyZSBibG9ja3MgYmV0d2VlbiB0d28gdGFibGVzCisgKi8KK3N0YXRpYyBib29sIG5tYm1fcmVidWlsZF9pbmZvX3RhYmxlKHN0cnVjdCBubWJtX2luc3RhbmNlICpuaSkKK3sKKwl1aW50MzJfdCB0YWJsZV9zdGFydF9iYSwgdGFibGVfZW5kX2JhLCBuZXh0X3N0YXJ0X2JhOworCXVpbnQzMl90IG1haW5fdGFibGVfZW5kX2JhOworCWJvb2wgc3VjY2VzczsKKworCS8qIFNldCBpbml0aWFsIHZhbHVlICovCisJbmktPm1haW5fdGFibGVfYmEgPSAwOworCW5pLT5iYWNrdXBfdGFibGVfYmEgPSAwOworCW5pLT5tYXBwaW5nX2Jsb2Nrc19iYSA9IG5pLT5tYXBwaW5nX2Jsb2Nrc190b3BfYmE7CisKKwkvKiBXcml0ZSBtYWluIHRhYmxlICovCisJc3VjY2VzcyA9IG5tYm1fd3JpdGVfaW5mb190YWJsZShuaSwgbmktPm1nbXRfc3RhcnRfYmEsCisJCQkJCW5pLT5tYXBwaW5nX2Jsb2Nrc190b3BfYmEsCisJCQkJCSZ0YWJsZV9zdGFydF9iYSwgJnRhYmxlX2VuZF9iYSk7CisJaWYgKCFzdWNjZXNzKSB7CisJCS8qIEZhaWxlZCB0byB3cml0ZSBtYWluIHRhYmxlLCBkYXRhIHdpbGwgYmUgbG9zdCAqLworCQlubG9nX2VtZXJnKG5pLCAiVW5hYmxlIHRvIHdyaXRlIGF0IGxlYXN0IG9uZSBpbmZvIHRhYmxlIVxuIik7CisJCW5sb2dfZW1lcmcobmksICJQbGVhc2Ugc2F2ZSB5b3VyIGRhdGEgYmVmb3JlIHBvd2VyIG9mZiFcbiIpOworCQluaS0+cHJvdGVjdGVkID0gMTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIE1haW4gaW5mbyB0YWJsZSBpcyBzdWNjZXNzZnVsbHkgd3JpdHRlbiwgcmVjb3JkIGl0cyBvZmZzZXQgKi8KKwluaS0+bWFpbl90YWJsZV9iYSA9IHRhYmxlX3N0YXJ0X2JhOworCW1haW5fdGFibGVfZW5kX2JhID0gdGFibGVfZW5kX2JhOworCisJLyogQWRqdXN0IG1hcHBpbmdfYmxvY2tzX2JhICovCisJbmktPm1hcHBpbmdfYmxvY2tzX2JhID0gdGFibGVfZW5kX2JhOworCisJbm1ibV9tYXJrX3RhYmxlc19jbGVhbihuaSk7CisKKwlubG9nX3RhYmxlX2NyZWF0aW9uKG5pLCB0cnVlLCB0YWJsZV9zdGFydF9iYSwgdGFibGVfZW5kX2JhKTsKKworCS8qIFJlc2VydmUgc3BhcmUgYmxvY2tzIGZvciBtYWluIGluZm8gdGFibGUuICovCisJc3VjY2VzcyA9IG5tYm1fdHJ5X3Jlc2VydmVfYmxvY2tzKG5pLCB0YWJsZV9lbmRfYmEsCisJCQkJCSAgJm5leHRfc3RhcnRfYmEsCisJCQkJCSAgbmktPmluZm9fdGFibGVfc3BhcmVfYmxvY2tzLCAwLAorCQkJCQkgIG5pLT5tYXBwaW5nX2Jsb2Nrc190b3BfYmEgLQorCQkJCQkgIHNpemUyYmxrKG5pLCBuaS0+aW5mb190YWJsZV9zaXplKSk7CisJaWYgKCFzdWNjZXNzKSB7CisJCS8qIFRoZXJlIGlzIG5vIHNwYXJlIGJsb2NrLiAqLworCQlubG9nX2RlYnVnKG5pLCAiTm8gcm9vbSBmb3IgYmFja3VwIGluZm8gdGFibGVcbiIpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKiBXcml0ZSBiYWNrdXAgaW5mbyB0YWJsZS4gKi8KKwlzdWNjZXNzID0gbm1ibV93cml0ZV9pbmZvX3RhYmxlKG5pLCBuZXh0X3N0YXJ0X2JhLAorCQkJCQluaS0+bWFwcGluZ19ibG9ja3NfdG9wX2JhLAorCQkJCQkmdGFibGVfc3RhcnRfYmEsICZ0YWJsZV9lbmRfYmEpOworCWlmICghc3VjY2VzcykgeworCQkvKiBUaGVyZSBpcyBubyBlbm91Z2ggYmxvY2tzIGZvciBiYWNrdXAgdGFibGUuICovCisJCW5sb2dfZGVidWcobmksICJObyByb29tIGZvciBiYWNrdXAgaW5mbyB0YWJsZVxuIik7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qIEJhY2t1cCB0YWJsZSBpcyBzdWNjZXNzZnVsbHkgd3JpdHRlbiwgcmVjb3JkIGl0cyBvZmZzZXQgKi8KKwluaS0+YmFja3VwX3RhYmxlX2JhID0gdGFibGVfc3RhcnRfYmE7CisKKwkvKiBBZGp1c3QgbWFwcGluZ19ibG9ja3Nfb2ZmICovCisJbmktPm1hcHBpbmdfYmxvY2tzX2JhID0gdGFibGVfZW5kX2JhOworCisJLyogRXJhc2Ugc3BhcmUgYmxvY2tzIG9mIG1haW4gdGFibGUgdG8gY2xlYW4gcG9zc2libGUgaW50ZXJmZXJlbmNlIGRhdGEgKi8KKwlubWJtX2VyYXNlX3JhbmdlKG5pLCBtYWluX3RhYmxlX2VuZF9iYSwgbmktPmJhY2t1cF90YWJsZV9iYSk7CisKKwlubG9nX3RhYmxlX2NyZWF0aW9uKG5pLCBmYWxzZSwgdGFibGVfc3RhcnRfYmEsIHRhYmxlX2VuZF9iYSk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIG5tYm1fcmVzY3VlX3NpbmdsZV9pbmZvX3RhYmxlIC0gUmVzY3VlIHdoZW4gdGhlcmUgaXMgb25seSBvbmUgaW5mbyB0YWJsZQorICogQG5pOiBOTUJNIGluc3RhbmNlIHN0cnVjdHVyZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlcmUgaXMgb25seSBvbmUgaW5mbyB0YWJsZSBleGlzdHMuCisgKiBUaGlzIGZ1bmN0aW9uIG1heSBmYWlsIGlmIHdlIGNhbid0IHdyaXRlIG5ldyBpbmZvIHRhYmxlCisgKi8KK3N0YXRpYyBib29sIG5tYm1fcmVzY3VlX3NpbmdsZV9pbmZvX3RhYmxlKHN0cnVjdCBubWJtX2luc3RhbmNlICpuaSkKK3sKKwl1aW50MzJfdCB0YWJsZV9zdGFydF9iYSwgdGFibGVfZW5kX2JhLCB3cml0ZV9iYTsKKwlib29sIHN1Y2Nlc3M7CisKKwkvKiBUcnkgdG8gd3JpdGUgbmV3IGluZm8gdGFibGUgaW4gZnJvbnQgb2YgZXhpc3RpbmcgdGFibGUgKi8KKwlzdWNjZXNzID0gbm1ibV93cml0ZV9pbmZvX3RhYmxlKG5pLCBuaS0+bWdtdF9zdGFydF9iYSwKKwkJCQkJbmktPm1haW5fdGFibGVfYmEsCisJCQkJCSZ0YWJsZV9zdGFydF9iYSwKKwkJCQkJJnRhYmxlX2VuZF9iYSk7CisJaWYgKHN1Y2Nlc3MpIHsKKwkJLyoKKwkJICogTmV3IHRhYmxlIGJlY29tZXMgdGhlIG1haW4gdGFibGUsIGV4aXN0aW5nIHRhYmxlIGJlY29tZXMKKwkJICogdGhlIGJhY2t1cCB0YWJsZS4KKwkJICovCisJCW5pLT5iYWNrdXBfdGFibGVfYmEgPSBuaS0+bWFpbl90YWJsZV9iYTsKKwkJbmktPm1haW5fdGFibGVfYmEgPSB0YWJsZV9zdGFydF9iYTsKKworCQlubWJtX21hcmtfdGFibGVzX2NsZWFuKG5pKTsKKworCQkvKiBFcmFzZSBzcGFyZSBibG9ja3Mgb2YgbWFpbiB0YWJsZSB0byBjbGVhbiBwb3NzaWJsZSBpbnRlcmZlcmVuY2UgZGF0YSAqLworCQlubWJtX2VyYXNlX3JhbmdlKG5pLCB0YWJsZV9lbmRfYmEsIG5pLT5iYWNrdXBfdGFibGVfYmEpOworCisJCW5sb2dfdGFibGVfY3JlYXRpb24obmksIHRydWUsIHRhYmxlX3N0YXJ0X2JhLCB0YWJsZV9lbmRfYmEpOworCisJCXJldHVybiB0cnVlOworCX0KKworCS8qIFRyeSB0byByZXNlcnZlIHNwYXJlIGJsb2NrcyBmb3IgZXhpc3RpbmcgdGFibGUgKi8KKwlzdWNjZXNzID0gbm1ibV90cnlfcmVzZXJ2ZV9ibG9ja3MobmksIG5pLT5tYXBwaW5nX2Jsb2Nrc19iYSwgJndyaXRlX2JhLAorCQkJCQkgIG5pLT5pbmZvX3RhYmxlX3NwYXJlX2Jsb2NrcywgMCwKKwkJCQkJICBuaS0+bWFwcGluZ19ibG9ja3NfdG9wX2JhIC0KKwkJCQkJICBzaXplMmJsayhuaSwgbmktPmluZm9fdGFibGVfc2l6ZSkpOworCWlmICghc3VjY2VzcykgeworCQlubG9nX3dhcm4obmksICJGYWlsZWQgdG8gcmVzY3VlIHNpbmdsZSBpbmZvIHRhYmxlXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIFRyeSB0byB3cml0ZSBuZXcgaW5mbyB0YWJsZSBuZXh0IHRvIHRoZSBleGlzdGluZyB0YWJsZSAqLworCXdoaWxlICh3cml0ZV9iYSA+PSBuaS0+bWFwcGluZ19ibG9ja3NfYmEpIHsKKwkJV0FUQ0hET0dfUkVTRVQoKTsKKworCQlzdWNjZXNzID0gbm1ibV93cml0ZV9pbmZvX3RhYmxlKG5pLCB3cml0ZV9iYSwKKwkJCQkJCW5pLT5tYXBwaW5nX2Jsb2Nrc190b3BfYmEsCisJCQkJCQkmdGFibGVfc3RhcnRfYmEsCisJCQkJCQkmdGFibGVfZW5kX2JhKTsKKwkJaWYgKHN1Y2Nlc3MpCisJCQlicmVhazsKKworCQl3cml0ZV9iYS0tOworCX0KKworCWlmIChzdWNjZXNzKSB7CisJCS8qIEVyYXNlIHNwYXJlIGJsb2NrcyBvZiBtYWluIHRhYmxlIHRvIGNsZWFuIHBvc3NpYmxlIGludGVyZmVyZW5jZSBkYXRhICovCisJCW5tYm1fZXJhc2VfcmFuZ2UobmksIG5pLT5tYXBwaW5nX2Jsb2Nrc19iYSwgdGFibGVfc3RhcnRfYmEpOworCisJCS8qIE5ldyB0YWJsZSBiZWNvbWVzIHRoZSBiYWNrdXAgdGFibGUgKi8KKwkJbmktPmJhY2t1cF90YWJsZV9iYSA9IHRhYmxlX3N0YXJ0X2JhOworCQluaS0+bWFwcGluZ19ibG9ja3NfYmEgPSB0YWJsZV9lbmRfYmE7CisKKwkJbm1ibV9tYXJrX3RhYmxlc19jbGVhbihuaSk7CisKKwkJbmxvZ190YWJsZV9jcmVhdGlvbihuaSwgZmFsc2UsIHRhYmxlX3N0YXJ0X2JhLCB0YWJsZV9lbmRfYmEpOworCisJCXJldHVybiB0cnVlOworCX0KKworCW5sb2dfd2FybihuaSwgIkZhaWxlZCB0byByZXNjdWUgc2luZ2xlIGluZm8gdGFibGVcbiIpOworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIG5tYm1fdXBkYXRlX3NpbmdsZV9pbmZvX3RhYmxlIC0gVXBkYXRlIHNwZWNpZmljIG9uZSBpbmZvIHRhYmxlCisgKiBAbmk6IE5NQk0gaW5zdGFuY2Ugc3RydWN0dXJlCisgKi8KK3N0YXRpYyBib29sIG5tYm1fdXBkYXRlX3NpbmdsZV9pbmZvX3RhYmxlKHN0cnVjdCBubWJtX2luc3RhbmNlICpuaSwKKwkJCQkJICBib29sIHVwZGF0ZV9tYWluX3RhYmxlKQoreworCXVpbnQzMl90IHdyaXRlX3N0YXJ0X2JhLCB3cml0ZV9saW1pdCwgdGFibGVfc3RhcnRfYmEsIHRhYmxlX2VuZF9iYTsKKwlib29sIHN1Y2Nlc3M7CisKKwkvKiBEZXRlcm1pbmUgdGhlIHdyaXRlIHJhbmdlICovCisJaWYgKHVwZGF0ZV9tYWluX3RhYmxlKSB7CisJCXdyaXRlX3N0YXJ0X2JhID0gbmktPm1haW5fdGFibGVfYmE7CisJCXdyaXRlX2xpbWl0ID0gbmktPmJhY2t1cF90YWJsZV9iYTsKKwl9IGVsc2UgeworCQl3cml0ZV9zdGFydF9iYSA9IG5pLT5iYWNrdXBfdGFibGVfYmE7CisJCXdyaXRlX2xpbWl0ID0gbmktPm1hcHBpbmdfYmxvY2tzX3RvcF9iYTsKKwl9CisKKwlubWJtX21hcmtfYmxvY2tfY29sb3JfbWdtdChuaSwgd3JpdGVfc3RhcnRfYmEsIHdyaXRlX2xpbWl0IC0gMSk7CisKKwlzdWNjZXNzID0gbm1ibV93cml0ZV9pbmZvX3RhYmxlKG5pLCB3cml0ZV9zdGFydF9iYSwgd3JpdGVfbGltaXQsCisJCQkJCSZ0YWJsZV9zdGFydF9iYSwgJnRhYmxlX2VuZF9iYSk7CisJaWYgKHN1Y2Nlc3MpIHsKKwkJaWYgKHVwZGF0ZV9tYWluX3RhYmxlKSB7CisJCQluaS0+bWFpbl90YWJsZV9iYSA9IHRhYmxlX3N0YXJ0X2JhOworCQl9IGVsc2UgeworCQkJbmktPmJhY2t1cF90YWJsZV9iYSA9IHRhYmxlX3N0YXJ0X2JhOworCQkJbmktPm1hcHBpbmdfYmxvY2tzX2JhID0gdGFibGVfZW5kX2JhOworCQl9CisKKwkJbm1ibV9tYXJrX3RhYmxlc19jbGVhbihuaSk7CisKKwkJbmxvZ190YWJsZV91cGRhdGUobmksIHVwZGF0ZV9tYWluX3RhYmxlLCB0YWJsZV9zdGFydF9iYSwKKwkJCQkgdGFibGVfZW5kX2JhKTsKKworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlpZiAodXBkYXRlX21haW5fdGFibGUpIHsKKwkJLyoKKwkJICogSWYgZmFpbGVkIHRvIHVwZGF0ZSBtYWluIHRhYmxlLCBtYWtlIGJhY2t1cCB0YWJsZSB0aGUgbmV3CisJCSAqIG1haW4gdGFibGUsIGFuZCBjYWxsIG5tYm1fcmVzY3VlX3NpbmdsZV9pbmZvX3RhYmxlKCkKKwkJICovCisJCW5sb2dfd2FybihuaSwgIlVuYWJsZSB0byB1cGRhdGUgJXMgaW5mbyB0YWJsZVxuIiwKKwkJCSB1cGRhdGVfbWFpbl90YWJsZSA/ICJNYWluIiA6ICJCYWNrdXAiKTsKKworCQluaS0+bWFpbl90YWJsZV9iYSA9IG5pLT5iYWNrdXBfdGFibGVfYmE7CisJCW5pLT5iYWNrdXBfdGFibGVfYmEgPSAwOworCQlyZXR1cm4gbm1ibV9yZXNjdWVfc2luZ2xlX2luZm9fdGFibGUobmkpOworCX0KKworCS8qIE9ubHkgb25lIHRhYmxlIGxlZnQgKi8KKwluaS0+bWFwcGluZ19ibG9ja3NfYmEgPSBuaS0+YmFja3VwX3RhYmxlX2JhOworCW5pLT5iYWNrdXBfdGFibGVfYmEgPSAwOworCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogbm1ibV9yZXNjdWVfbWFpbl9pbmZvX3RhYmxlIC0gUmVzY3VlIHdoZW4gZmFpbGVkIHRvIHdyaXRlIG1haW4gaW5mbyB0YWJsZQorICogQG5pOiBOTUJNIGluc3RhbmNlIHN0cnVjdHVyZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gbWFpbiBpbmZvIHRhYmxlIGZhaWxlZCB0byBiZSB3cml0dGVuLCBhbmQKKyAqICAgIGJhY2t1cCBpbmZvIHRhYmxlIGV4aXN0cy4KKyAqLworc3RhdGljIGJvb2wgbm1ibV9yZXNjdWVfbWFpbl9pbmZvX3RhYmxlKHN0cnVjdCBubWJtX2luc3RhbmNlICpuaSkKK3sKKwl1aW50MzJfdCB0bXBfdGFibGVfc3RhcnRfYmEsIHRtcF90YWJsZV9lbmRfYmEsIG1haW5fdGFibGVfc3RhcnRfYmE7CisJdWludDMyX3QgbWFpbl90YWJsZV9lbmRfYmEsIHdyaXRlX2JhOworCXVpbnQzMl90IGluZm9fdGFibGVfZXJhc2VzaXplID0gc2l6ZTJibGsobmksIG5pLT5pbmZvX3RhYmxlX3NpemUpOworCWJvb2wgc3VjY2VzczsKKworCS8qIFRyeSB0byByZXNlcnZlIHNwYXJlIGJsb2NrcyBmb3IgZXhpc3RpbmcgYmFja3VwIGluZm8gdGFibGUgKi8KKwlzdWNjZXNzID0gbm1ibV90cnlfcmVzZXJ2ZV9ibG9ja3MobmksIG5pLT5tYXBwaW5nX2Jsb2Nrc19iYSwgJndyaXRlX2JhLAorCQkJCQkgIG5pLT5pbmZvX3RhYmxlX3NwYXJlX2Jsb2NrcywgMCwKKwkJCQkJICBuaS0+bWFwcGluZ19ibG9ja3NfdG9wX2JhIC0KKwkJCQkJICBpbmZvX3RhYmxlX2VyYXNlc2l6ZSk7CisJaWYgKCFzdWNjZXNzKSB7CisJCS8qIFRoZXJlIGlzIG5vIHNwYXJlIGJsb2NrLiBCYWNrdXAgaW5mbyB0YWJsZSBiZWNvbWVzIHRoZSBtYWluIHRhYmxlLiAqLworCQlubG9nX2VycihuaSwgIk5vIHJvb20gZm9yIHRlbXBvcmFyeSBpbmZvIHRhYmxlXG4iKTsKKwkJbmktPm1haW5fdGFibGVfYmEgPSBuaS0+YmFja3VwX3RhYmxlX2JhOworCQluaS0+YmFja3VwX3RhYmxlX2JhID0gMDsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyogVHJ5IHRvIHdyaXRlIHRlbXBvcmFyeSBpbmZvIHRhYmxlIGludG8gc3BhcmUgdW5tYXBwZWQgYmxvY2tzICovCisJd2hpbGUgKHdyaXRlX2JhID49IG5pLT5tYXBwaW5nX2Jsb2Nrc19iYSkgeworCQlXQVRDSERPR19SRVNFVCgpOworCisJCXN1Y2Nlc3MgPSBubWJtX3dyaXRlX2luZm9fdGFibGUobmksIHdyaXRlX2JhLAorCQkJCQkJbmktPm1hcHBpbmdfYmxvY2tzX3RvcF9iYSwKKwkJCQkJCSZ0bXBfdGFibGVfc3RhcnRfYmEsCisJCQkJCQkmdG1wX3RhYmxlX2VuZF9iYSk7CisJCWlmIChzdWNjZXNzKQorCQkJYnJlYWs7CisKKwkJd3JpdGVfYmEtLTsKKwl9CisKKwlpZiAoIXN1Y2Nlc3MpIHsKKwkJLyogQmFja3VwIGluZm8gdGFibGUgYmVjb21lcyB0aGUgbWFpbiB0YWJsZSAqLworCQlubG9nX2VycihuaSwgIkZhaWxlZCB0byB1cGRhdGUgbWFpbiBpbmZvIHRhYmxlXG4iKTsKKwkJbmktPm1haW5fdGFibGVfYmEgPSBuaS0+YmFja3VwX3RhYmxlX2JhOworCQluaS0+YmFja3VwX3RhYmxlX2JhID0gMDsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyogQWRqdXN0IG1hcHBpbmdfYmxvY2tzX29mZiAqLworCW5pLT5tYXBwaW5nX2Jsb2Nrc19iYSA9IHRtcF90YWJsZV9lbmRfYmE7CisKKwlubWJtX21hcmtfYmxvY2tfY29sb3JfbWdtdChuaSwgbmktPmJhY2t1cF90YWJsZV9iYSwKKwkJCQkgICB0bXBfdGFibGVfZW5kX2JhIC0gMSk7CisKKwkvKgorCSAqIE5vdyB3cml0ZSBtYWluIGluZm8gdGFibGUgYXQgdGhlIGJlZ2lubmluZyBvZiBtYW5hZ2VtZW50IGFyZWEuCisJICogVGhpcyBvcGVyYXRpb24gd2lsbCBnZW5lcmFsbHkgZGVzdHJveSB0aGUgb3JpZ2luYWwgYmFja3VwIGluZm8KKwkgKiB0YWJsZS4KKwkgKi8KKwlzdWNjZXNzID0gbm1ibV93cml0ZV9pbmZvX3RhYmxlKG5pLCBuaS0+bWdtdF9zdGFydF9iYSwKKwkJCQkJdG1wX3RhYmxlX3N0YXJ0X2JhLAorCQkJCQkmbWFpbl90YWJsZV9zdGFydF9iYSwKKwkJCQkJJm1haW5fdGFibGVfZW5kX2JhKTsKKwlpZiAoIXN1Y2Nlc3MpIHsKKwkJLyogVGVtcG9yYXJ5IGluZm8gdGFibGUgYmVjb21lcyB0aGUgbWFpbiB0YWJsZSAqLworCQluaS0+bWFpbl90YWJsZV9iYSA9IHRtcF90YWJsZV9zdGFydF9iYTsKKwkJbmktPmJhY2t1cF90YWJsZV9iYSA9IDA7CisKKwkJbm1ibV9tYXJrX3RhYmxlc19jbGVhbihuaSk7CisKKwkJbmxvZ19lcnIobmksICJGYWlsZWQgdG8gdXBkYXRlIG1haW4gaW5mbyB0YWJsZVxuIik7CisJCW5tYm1fbWFya19ibG9ja19jb2xvcl9pbmZvX3RhYmxlKG5pLCB0bXBfdGFibGVfc3RhcnRfYmEsCisJCQkJCQkgdG1wX3RhYmxlX2VuZF9iYSAtIDEpOworCisJCXJldHVybiB0cnVlOworCX0KKworCS8qIE1haW4gaW5mbyB0YWJsZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgd3JpdHRlbiwgcmVjb3JkIGl0cyBvZmZzZXQgKi8KKwluaS0+bWFpbl90YWJsZV9iYSA9IG1haW5fdGFibGVfc3RhcnRfYmE7CisKKwlubWJtX21hcmtfdGFibGVzX2NsZWFuKG5pKTsKKworCW5sb2dfdGFibGVfY3JlYXRpb24obmksIHRydWUsIG1haW5fdGFibGVfc3RhcnRfYmEsIG1haW5fdGFibGVfZW5kX2JhKTsKKworCS8qCisJICogVGVtcG9yYXJ5IGluZm8gdGFibGUgYmVjb21lcyB0aGUgbmV3IGJhY2t1cCBpbmZvIHRhYmxlIGlmIGl0J3MKKwkgKiBub3Qgb3ZlcndyaXR0ZW4uCisJICovCisJaWYgKG1haW5fdGFibGVfZW5kX2JhIDw9IHRtcF90YWJsZV9zdGFydF9iYSkgeworCQluaS0+YmFja3VwX3RhYmxlX2JhID0gdG1wX3RhYmxlX3N0YXJ0X2JhOworCisJCW5sb2dfdGFibGVfY3JlYXRpb24obmksIGZhbHNlLCB0bXBfdGFibGVfc3RhcnRfYmEsCisJCQkJICAgdG1wX3RhYmxlX2VuZF9iYSk7CisKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyogQWRqdXN0IG1hcHBpbmdfYmxvY2tzX29mZiAqLworCW5pLT5tYXBwaW5nX2Jsb2Nrc19iYSA9IG1haW5fdGFibGVfZW5kX2JhOworCisJLyogVHJ5IHRvIHJlc2VydmUgc3BhcmUgYmxvY2tzIGZvciBuZXcgbWFpbiBpbmZvIHRhYmxlICovCisJc3VjY2VzcyA9IG5tYm1fdHJ5X3Jlc2VydmVfYmxvY2tzKG5pLCBtYWluX3RhYmxlX2VuZF9iYSwgJndyaXRlX2JhLAorCQkJCQkgIG5pLT5pbmZvX3RhYmxlX3NwYXJlX2Jsb2NrcywgMCwKKwkJCQkJICBuaS0+bWFwcGluZ19ibG9ja3NfdG9wX2JhIC0KKwkJCQkJICBpbmZvX3RhYmxlX2VyYXNlc2l6ZSk7CisJaWYgKCFzdWNjZXNzKSB7CisJCS8qIFRoZXJlIGlzIG5vIHNwYXJlIGJsb2NrLiBPbmx5IG1haW4gdGFibGUgZXhpc3RzLiAqLworCQlubG9nX2VycihuaSwgIk5vIHJvb20gZm9yIGJhY2t1cCBpbmZvIHRhYmxlXG4iKTsKKwkJbmktPmJhY2t1cF90YWJsZV9iYSA9IDA7CisJCXJldHVybiB0cnVlOworCX0KKworCS8qIFdyaXRlIG5ldyBiYWNrdXAgaW5mbyB0YWJsZS4gKi8KKwl3aGlsZSAod3JpdGVfYmEgPj0gbWFpbl90YWJsZV9lbmRfYmEpIHsKKwkJV0FUQ0hET0dfUkVTRVQoKTsKKworCQlzdWNjZXNzID0gbm1ibV93cml0ZV9pbmZvX3RhYmxlKG5pLCB3cml0ZV9iYSwKKwkJCQkJCW5pLT5tYXBwaW5nX2Jsb2Nrc190b3BfYmEsCisJCQkJCQkmdG1wX3RhYmxlX3N0YXJ0X2JhLAorCQkJCQkJJnRtcF90YWJsZV9lbmRfYmEpOworCQlpZiAoc3VjY2VzcykKKwkJCWJyZWFrOworCisJCXdyaXRlX2JhLS07CisJfQorCisJaWYgKCFzdWNjZXNzKSB7CisJCW5sb2dfZXJyKG5pLCAiTm8gcm9vbSBmb3IgYmFja3VwIGluZm8gdGFibGVcbiIpOworCQluaS0+YmFja3VwX3RhYmxlX2JhID0gMDsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyogQmFja3VwIGluZm8gdGFibGUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4sIHJlY29yZCBpdHMgb2Zmc2V0ICovCisJbmktPmJhY2t1cF90YWJsZV9iYSA9IHRtcF90YWJsZV9zdGFydF9iYTsKKworCS8qIEFkanVzdCBtYXBwaW5nX2Jsb2Nrc19vZmYgKi8KKwluaS0+bWFwcGluZ19ibG9ja3NfYmEgPSB0bXBfdGFibGVfZW5kX2JhOworCisJLyogRXJhc2Ugc3BhcmUgYmxvY2tzIG9mIG1haW4gdGFibGUgdG8gY2xlYW4gcG9zc2libGUgaW50ZXJmZXJlbmNlIGRhdGEgKi8KKwlubWJtX2VyYXNlX3JhbmdlKG5pLCBtYWluX3RhYmxlX2VuZF9iYSwgbmktPmJhY2t1cF90YWJsZV9iYSk7CisKKwlubG9nX3RhYmxlX2NyZWF0aW9uKG5pLCBmYWxzZSwgdG1wX3RhYmxlX3N0YXJ0X2JhLCB0bXBfdGFibGVfZW5kX2JhKTsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICogbm1ibV91cGRhdGVfaW5mb190YWJsZV9vbmNlIC0gVXBkYXRlIGluZm8gdGFibGUgb25jZQorICogQG5pOiBOTUJNIGluc3RhbmNlIHN0cnVjdHVyZQorICogQGZvcmNlOiBmb3JjZSB1cGRhdGUKKyAqCisgKiBVcGRhdGUgYm90aCBtYWluIGFuZCBiYWNrdXAgaW5mbyB0YWJsZS4gUmV0dXJuIHRydWUgaWYgYXQgbGVhc3Qgb25lIGluZm8KKyAqIHRhYmxlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB3cml0dGVuLgorICogVGhpcyBmdW5jdGlvbiBvbmx5IHRyeSB0byB1cGRhdGUgaW5mbyB0YWJsZSBvbmNlIHJlZ2FyZCBsZXNzIG9mIHRoZSByZXN1bHQuCisgKi8KK3N0YXRpYyBib29sIG5tYm1fdXBkYXRlX2luZm9fdGFibGVfb25jZShzdHJ1Y3Qgbm1ibV9pbnN0YW5jZSAqbmksIGJvb2wgZm9yY2UpCit7CisJdWludDMyX3QgdGFibGVfc3RhcnRfYmEsIHRhYmxlX2VuZF9iYTsKKwl1aW50MzJfdCBtYWluX3RhYmxlX2xpbWl0OworCWJvb2wgc3VjY2VzczsKKworCS8qIERvIG5vdGhpbmcgaWYgdGhlcmUgaXMgbm8gY2hhbmdlICovCisJaWYgKCFubWJtX2dlbmVyYXRlX2luZm9fdGFibGVfY2FjaGUobmkpICYmICFmb3JjZSkKKwkJcmV0dXJuIHRydWU7CisKKwkvKiBDaGVjayB3aGV0aGVyIGJvdGggdHdvIHRhYmxlcyBleGlzdCAqLworCWlmICghbmktPmJhY2t1cF90YWJsZV9iYSkgeworCQltYWluX3RhYmxlX2xpbWl0ID0gbmktPm1hcHBpbmdfYmxvY2tzX3RvcF9iYTsKKwkJZ290byB3cml0ZV9tYWluX3RhYmxlOworCX0KKworCW5tYm1fbWFya19ibG9ja19jb2xvcl9tZ210KG5pLCBuaS0+YmFja3VwX3RhYmxlX2JhLAorCQkJCSAgIG5pLT5tYXBwaW5nX2Jsb2Nrc19iYSAtIDEpOworCisJLyoKKwkgKiBXcml0ZSBiYWNrdXAgaW5mbyB0YWJsZSBpbiBpdHMgY3VycmVudCByYW5nZS4KKwkgKiBOb3RlIHRoYXQgbGltaXQgaXMgc2V0IHRvIG1hcHBpbmdfYmxvY2tzX3RvcF9vZmYgdG8gcHJvdmlkZSBhcyBtYW55CisJICogc3BhcmUgYmxvY2tzIGFzIHBvc3NpYmxlIGZvciB0aGUgYmFja3VwIHRhYmxlLiBJZiBhdCBsYXN0CisJICogdW5tYXBwZWQgYmxvY2tzIGFyZSB1c2VkIGJ5IGJhY2t1cCB0YWJsZSwgbWFwcGluZ19ibG9ja3Nfb2ZmIHdpbGwKKwkgKiBiZSBhZGp1c3RlZC4KKwkgKi8KKwlzdWNjZXNzID0gbm1ibV93cml0ZV9pbmZvX3RhYmxlKG5pLCBuaS0+YmFja3VwX3RhYmxlX2JhLAorCQkJCQluaS0+bWFwcGluZ19ibG9ja3NfdG9wX2JhLAorCQkJCQkmdGFibGVfc3RhcnRfYmEsICZ0YWJsZV9lbmRfYmEpOworCWlmICghc3VjY2VzcykgeworCQkvKgorCQkgKiBUaGVyZSBpcyBub3RoaW5nIHRvIGRvIGlmIGZhaWxlZCB0byB3cml0ZSBiYWNrdXAgdGFibGUuCisJCSAqIFdyaXRlIHRoZSBtYWluIHRhYmxlIG5vdy4KKwkJICovCisJCW5sb2dfZXJyKG5pLCAiTm8gcm9vbSBmb3IgYmFja3VwIHRhYmxlXG4iKTsKKwkJbmktPm1hcHBpbmdfYmxvY2tzX2JhID0gbmktPmJhY2t1cF90YWJsZV9iYTsKKwkJbmktPmJhY2t1cF90YWJsZV9iYSA9IDA7CisJCW1haW5fdGFibGVfbGltaXQgPSBuaS0+bWFwcGluZ19ibG9ja3NfdG9wX2JhOworCQlnb3RvIHdyaXRlX21haW5fdGFibGU7CisJfQorCisJLyogQmFja3VwIHRhYmxlIGlzIHN1Y2Nlc3NmdWxseSB3cml0dGVuLCByZWNvcmQgaXRzIG9mZnNldCAqLworCW5pLT5iYWNrdXBfdGFibGVfYmEgPSB0YWJsZV9zdGFydF9iYTsKKworCS8qIEFkanVzdCBtYXBwaW5nX2Jsb2Nrc19vZmYgKi8KKwluaS0+bWFwcGluZ19ibG9ja3NfYmEgPSB0YWJsZV9lbmRfYmE7CisKKwlubWJtX21hcmtfdGFibGVzX2NsZWFuKG5pKTsKKworCS8qIFRoZSBub3JtYWwgbGltaXQgb2YgbWFpbiB0YWJsZSAqLworCW1haW5fdGFibGVfbGltaXQgPSBuaS0+YmFja3VwX3RhYmxlX2JhOworCisJbmxvZ190YWJsZV91cGRhdGUobmksIGZhbHNlLCB0YWJsZV9zdGFydF9iYSwgdGFibGVfZW5kX2JhKTsKKword3JpdGVfbWFpbl90YWJsZToKKwlpZiAoIW5pLT5tYWluX3RhYmxlX2JhKQorCQlnb3RvIHJlYnVpbGRfdGFibGVzOworCisJaWYgKCFuaS0+YmFja3VwX3RhYmxlX2JhKQorCQlubWJtX21hcmtfYmxvY2tfY29sb3JfbWdtdChuaSwgbmktPm1nbXRfc3RhcnRfYmEsCisJCQkJCSAgIG5pLT5tYXBwaW5nX2Jsb2Nrc19iYSAtIDEpOworCWVsc2UKKwkJbm1ibV9tYXJrX2Jsb2NrX2NvbG9yX21nbXQobmksIG5pLT5tZ210X3N0YXJ0X2JhLAorCQkJCQkgICBuaS0+YmFja3VwX3RhYmxlX2JhIC0gMSk7CisKKwkvKiBXcml0ZSBtYWluIGluZm8gdGFibGUgaW4gaXRzIGN1cnJlbnQgcmFuZ2UgKi8KKwlzdWNjZXNzID0gbm1ibV93cml0ZV9pbmZvX3RhYmxlKG5pLCBuaS0+bWFpbl90YWJsZV9iYSwKKwkJCQkJbWFpbl90YWJsZV9saW1pdCwgJnRhYmxlX3N0YXJ0X2JhLAorCQkJCQkmdGFibGVfZW5kX2JhKTsKKwlpZiAoIXN1Y2Nlc3MpIHsKKwkJLyogSWYgZmFpbGVkIHRvIHdyaXRlIG1haW4gdGFibGUsIGdvIHJlc2N1ZSBwcm9jZWR1cmUgKi8KKwkJaWYgKCFuaS0+YmFja3VwX3RhYmxlX2JhKQorCQkJZ290byByZWJ1aWxkX3RhYmxlczsKKworCQlyZXR1cm4gbm1ibV9yZXNjdWVfbWFpbl9pbmZvX3RhYmxlKG5pKTsKKwl9CisKKwkvKiBNYWluIGluZm8gdGFibGUgaXMgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4sIHJlY29yZCBpdHMgb2Zmc2V0ICovCisJbmktPm1haW5fdGFibGVfYmEgPSB0YWJsZV9zdGFydF9iYTsKKworCS8qIEFkanVzdCBtYXBwaW5nX2Jsb2Nrc19vZmYgKi8KKwlpZiAoIW5pLT5iYWNrdXBfdGFibGVfYmEpCisJCW5pLT5tYXBwaW5nX2Jsb2Nrc19iYSA9IHRhYmxlX2VuZF9iYTsKKworCW5tYm1fbWFya190YWJsZXNfY2xlYW4obmkpOworCisJbmxvZ190YWJsZV91cGRhdGUobmksIHRydWUsIHRhYmxlX3N0YXJ0X2JhLCB0YWJsZV9lbmRfYmEpOworCisJcmV0dXJuIHRydWU7CisKK3JlYnVpbGRfdGFibGVzOgorCXJldHVybiBubWJtX3JlYnVpbGRfaW5mb190YWJsZShuaSk7Cit9CisKKy8qCisgKiBubWJtX3VwZGF0ZV9pbmZvX3RhYmxlIC0gVXBkYXRlIGluZm8gdGFibGUKKyAqIEBuaTogTk1CTSBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqCisgKiBVcGRhdGUgYm90aCBtYWluIGFuZCBiYWNrdXAgaW5mbyB0YWJsZS4gUmV0dXJuIHRydWUgaWYgYXQgbGVhc3Qgb25lIHRhYmxlCisgKiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgd3JpdHRlbi4KKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCB0cnkgdG8gdXBkYXRlIGluZm8gdGFibGUgcmVwZWF0ZWRseSB1bnRpbCBubyBuZXcgYmFkCisgKiBibG9jayBmb3VuZCBkdXJpbmcgdXBkYXRpbmcuCisgKi8KK3N0YXRpYyBib29sIG5tYm1fdXBkYXRlX2luZm9fdGFibGUoc3RydWN0IG5tYm1faW5zdGFuY2UgKm5pKQoreworCWJvb2wgc3VjY2VzczsKKworCWlmIChuaS0+cHJvdGVjdGVkKQorCQlyZXR1cm4gdHJ1ZTsKKworCXdoaWxlIChuaS0+YmxvY2tfc3RhdGVfY2hhbmdlZCB8fCBuaS0+YmxvY2tfbWFwcGluZ19jaGFuZ2VkKSB7CisJCXN1Y2Nlc3MgPSBubWJtX3VwZGF0ZV9pbmZvX3RhYmxlX29uY2UobmksIGZhbHNlKTsKKwkJaWYgKCFzdWNjZXNzKSB7CisJCQlubG9nX2VycihuaSwgIkZhaWxlZCB0byB1cGRhdGUgaW5mbyB0YWJsZVxuIik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIG5tYm1fbWFwX2Jsb2NrIC0gTWFwIGEgYmFkIGJsb2NrIHRvIGEgdW51c2VkIHNwYXJlIGJsb2NrCisgKiBAbmk6IE5NQk0gaW5zdGFuY2Ugc3RydWN0dXJlCisgKiBAbGI6IGxvZ2ljIGJsb2NrIGFkZHIgdG8gbWFwCisgKi8KK3N0YXRpYyBib29sIG5tYm1fbWFwX2Jsb2NrKHN0cnVjdCBubWJtX2luc3RhbmNlICpuaSwgdWludDMyX3QgbGIpCit7CisJdWludDMyX3QgcGI7CisJYm9vbCBzdWNjZXNzOworCisJaWYgKG5pLT5tYXBwaW5nX2Jsb2Nrc19iYSA9PSBuaS0+bWFwcGluZ19ibG9ja3NfdG9wX2JhKSB7CisJCW5sb2dfd2FybihuaSwgIk5vIHNwYXJlIHVubWFwcGVkIGJsb2Nrcy5cbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJc3VjY2VzcyA9IG5tYm1fYmxvY2tfd2FsayhuaSwgZmFsc2UsIG5pLT5tYXBwaW5nX2Jsb2Nrc190b3BfYmEsICZwYiwgMCwKKwkJCQkgIG5pLT5tYXBwaW5nX2Jsb2Nrc19iYSk7CisJaWYgKCFzdWNjZXNzKSB7CisJCW5sb2dfd2FybihuaSwgIk5vIHNwYXJlIHVubWFwcGVkIGJsb2Nrcy5cbiIpOworCQlubWJtX3VwZGF0ZV9pbmZvX3RhYmxlKG5pKTsKKwkJbmktPm1hcHBpbmdfYmxvY2tzX3RvcF9iYSA9IG5pLT5tYXBwaW5nX2Jsb2Nrc19iYTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCW5pLT5ibG9ja19tYXBwaW5nW2xiXSA9IHBiOworCW5pLT5tYXBwaW5nX2Jsb2Nrc190b3BfYmEtLTsKKwluaS0+YmxvY2tfbWFwcGluZ19jaGFuZ2VkKys7CisKKwlubG9nX2luZm8obmksICJMb2dpYyBibG9jayAldSBtYXBwZWQgdG8gcGh5c2ljYWwgYmxjb2sgJXVcbiIsIGxiLCBwYik7CisJbm1ibV9tYXJrX2Jsb2NrX2NvbG9yX21hcHBlZChuaSwgcGIpOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBubWJtX2NyZWF0ZV9pbmZvX3RhYmxlIC0gQ3JlYXRlIGluZm8gdGFibGUocykKKyAqIEBuaTogTk1CTSBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB0aGUgY2hpcCBoYXMgbm8gZXhpc3RpbmcgaW5mbyB0YWJsZShzKQorICovCitzdGF0aWMgYm9vbCBubWJtX2NyZWF0ZV9pbmZvX3RhYmxlKHN0cnVjdCBubWJtX2luc3RhbmNlICpuaSkKK3sKKwl1aW50MzJfdCBsYjsKKwlib29sIHN1Y2Nlc3M7CisKKwkvKiBTZXQgaW5pdGlhbCBtYXBwaW5nX2Jsb2Nrc190b3Bfb2ZmICAqLworCXN1Y2Nlc3MgPSBubWJtX2Jsb2NrX3dhbGsobmksIGZhbHNlLCBuaS0+c2lnbmF0dXJlX2JhLAorCQkJCSAgJm5pLT5tYXBwaW5nX2Jsb2Nrc190b3BfYmEsIDEsCisJCQkJICBuaS0+bWdtdF9zdGFydF9iYSk7CisJaWYgKCFzdWNjZXNzKSB7CisJCW5sb2dfZXJyKG5pLCAiTm8gcm9vbSBmb3Igc3BhcmUgYmxvY2tzXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIEdlbmVyYXRlIGluZm8gdGFibGUgY2FjaGUgKi8KKwlubWJtX2dlbmVyYXRlX2luZm9fdGFibGVfY2FjaGUobmkpOworCisJLyogV3JpdGUgaW5mbyB0YWJsZSAqLworCXN1Y2Nlc3MgPSBubWJtX3JlYnVpbGRfaW5mb190YWJsZShuaSk7CisJaWYgKCFzdWNjZXNzKSB7CisJCW5sb2dfZXJyKG5pLCAiRmFpbGVkIHRvIGJ1aWxkIGluZm8gdGFibGVzXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIFJlbWFwIGJhZCBibG9jayhzKSBhdCBlbmQgb2YgZGF0YSBhcmVhICovCisJZm9yIChsYiA9IG5pLT5kYXRhX2Jsb2NrX2NvdW50OyBsYiA8IG5pLT5tZ210X3N0YXJ0X2JhOyBsYisrKSB7CisJCXN1Y2Nlc3MgPSBubWJtX21hcF9ibG9jayhuaSwgbGIpOworCQlpZiAoIXN1Y2Nlc3MpCisJCQlicmVhazsKKworCQluaS0+ZGF0YV9ibG9ja19jb3VudCsrOworCX0KKworCS8qIElmIHN0YXRlIHRhYmxlIGFuZC9vciBtYXBwaW5nIHRhYmxlIGNoYW5nZWQsIHVwZGF0ZSBpbmZvIHRhYmxlLiAqLworCXN1Y2Nlc3MgPSBubWJtX3VwZGF0ZV9pbmZvX3RhYmxlKG5pKTsKKwlpZiAoIXN1Y2Nlc3MpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisvKgorICogbm1ibV9jcmVhdGVfbmV3IC0gQ3JlYXRlIE5NQk0gb24gYSBuZXcgY2hpcAorICogQG5pOiBOTUJNIGluc3RhbmNlIHN0cnVjdHVyZQorICovCitzdGF0aWMgYm9vbCBubWJtX2NyZWF0ZV9uZXcoc3RydWN0IG5tYm1faW5zdGFuY2UgKm5pKQoreworCWJvb2wgc3VjY2VzczsKKworCS8qIERldGVybWluZSB0aGUgYm91bmRhcnkgb2YgbWFuYWdlbWVudCBibG9ja3MgKi8KKwluaS0+bWdtdF9zdGFydF9iYSA9IG5pLT5ibG9ja19jb3VudCAqIChOTUJNX01HTVRfRElWIC0gbmktPmxvd2VyLm1heF9yYXRpbykgLyBOTUJNX01HTVRfRElWOworCisJaWYgKG5pLT5sb3dlci5tYXhfcmVzZXJ2ZWRfYmxvY2tzICYmIG5pLT5ibG9ja19jb3VudCAtIG5pLT5tZ210X3N0YXJ0X2JhID4gbmktPmxvd2VyLm1heF9yZXNlcnZlZF9ibG9ja3MpCisJCW5pLT5tZ210X3N0YXJ0X2JhID0gbmktPmJsb2NrX2NvdW50IC0gbmktPmxvd2VyLm1heF9yZXNlcnZlZF9ibG9ja3M7CisKKwlubG9nX2luZm8obmksICJOTUJNIG1hbmFnZW1lbnQgcmVnaW9uIHN0YXJ0cyBhdCBibG9jayAldSBbMHglMDhsbHhdXG4iLAorCQkgIG5pLT5tZ210X3N0YXJ0X2JhLCBiYTJhZGRyKG5pLCBuaS0+bWdtdF9zdGFydF9iYSkpOworCW5tYm1fbWFya19ibG9ja19jb2xvcl9tZ210KG5pLCBuaS0+bWdtdF9zdGFydF9iYSwgbmktPmJsb2NrX2NvdW50IC0gMSk7CisKKwkvKiBGaWxsIGJsb2NrIHN0YXRlIHRhYmxlICYgbWFwcGluZyB0YWJsZSAqLworCW5tYm1fc2Nhbl9iYWRibG9ja3MobmkpOworCW5tYm1fYnVpbGRfbWFwcGluZ190YWJsZShuaSk7CisKKwkvKiBXcml0ZSBzaWduYXR1cmUgKi8KKwluaS0+c2lnbmF0dXJlLmhlYWRlci5tYWdpYyA9IE5NQk1fTUFHSUNfU0lHTkFUVVJFOworCW5pLT5zaWduYXR1cmUuaGVhZGVyLnZlcnNpb24gPSBOTUJNX1ZFUjsKKwluaS0+c2lnbmF0dXJlLmhlYWRlci5zaXplID0gc2l6ZW9mKG5pLT5zaWduYXR1cmUpOworCW5pLT5zaWduYXR1cmUubmFuZF9zaXplID0gbmktPmxvd2VyLnNpemU7CisJbmktPnNpZ25hdHVyZS5ibG9ja19zaXplID0gbmktPmxvd2VyLmVyYXNlc2l6ZTsKKwluaS0+c2lnbmF0dXJlLnBhZ2Vfc2l6ZSA9IG5pLT5sb3dlci53cml0ZXNpemU7CisJbmktPnNpZ25hdHVyZS5zcGFyZV9zaXplID0gbmktPmxvd2VyLm9vYnNpemU7CisJbmktPnNpZ25hdHVyZS5tZ210X3N0YXJ0X3BiID0gbmktPm1nbXRfc3RhcnRfYmE7CisJbmktPnNpZ25hdHVyZS5tYXhfdHJ5X2NvdW50ID0gTk1CTV9UUllfQ09VTlQ7CisJbm1ibV91cGRhdGVfY2hlY2tzdW0oJm5pLT5zaWduYXR1cmUuaGVhZGVyKTsKKworCWlmIChuaS0+bG93ZXIuZmxhZ3MgJiBOTUJNX0ZfUkVBRF9PTkxZKSB7CisJCW5sb2dfaW5mbyhuaSwgIk5NQk0gaGFzIGJlZW4gaW5pdGlhbGl6ZWQgaW4gcmVhZC1vbmx5IG1vZGVcbiIpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlzdWNjZXNzID0gbm1ibV93cml0ZV9zaWduYXR1cmUobmksIG5pLT5tZ210X3N0YXJ0X2JhLAorCQkJCSAgICAgICAmbmktPnNpZ25hdHVyZSwgJm5pLT5zaWduYXR1cmVfYmEpOworCWlmICghc3VjY2VzcykgeworCQlubG9nX2VycihuaSwgIkZhaWxlZCB0byB3cml0ZSBzaWduYXR1cmUgdG8gYSBwcm9wZXIgb2Zmc2V0XG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCW5sb2dfaW5mbyhuaSwgIlNpZ25hdHVyZSBoYXMgYmVlbiB3cml0dGVuIHRvIGJsb2NrICV1IFsweCUwOGxseF1cbiIsCisJCSBuaS0+c2lnbmF0dXJlX2JhLCBiYTJhZGRyKG5pLCBuaS0+c2lnbmF0dXJlX2JhKSk7CisJbm1ibV9tYXJrX2Jsb2NrX2NvbG9yX3NpZ25hdHVyZShuaSwgbmktPnNpZ25hdHVyZV9iYSk7CisKKwkvKiBXcml0ZSBpbmZvIHRhYmxlKHMpICovCisJc3VjY2VzcyA9IG5tYm1fY3JlYXRlX2luZm9fdGFibGUobmkpOworCWlmIChzdWNjZXNzKSB7CisJCW5sb2dfaW5mbyhuaSwgIk5NQk0gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNyZWF0ZWRcbiIpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBubWJtX2NoZWNrX2luZm9fdGFibGVfaGVhZGVyIC0gQ2hlY2sgaWYgYSBpbmZvIHRhYmxlIGhlYWRlciBpcyB2YWxpZAorICogQG5pOiBOTUJNIGluc3RhbmNlIHN0cnVjdHVyZQorICogQGRhdGE6IHBvaW50ZXIgdG8gdGhlIGluZm8gdGFibGUgaGVhZGVyCisgKi8KK3N0YXRpYyBib29sIG5tYm1fY2hlY2tfaW5mb190YWJsZV9oZWFkZXIoc3RydWN0IG5tYm1faW5zdGFuY2UgKm5pLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBubWJtX2luZm9fdGFibGVfaGVhZGVyICppZnRoZHIgPSBkYXRhOworCisJaWYgKGlmdGhkci0+aGVhZGVyLm1hZ2ljICE9IE5NQk1fTUFHSUNfSU5GT19UQUJMRSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKGlmdGhkci0+aGVhZGVyLnNpemUgIT0gbmktPmluZm9fdGFibGVfc2l6ZSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKGlmdGhkci0+bWFwcGluZ190YWJsZV9vZmYgLSBpZnRoZHItPnN0YXRlX3RhYmxlX29mZiA8IG5pLT5zdGF0ZV90YWJsZV9zaXplKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAobmktPmluZm9fdGFibGVfc2l6ZSAtIGlmdGhkci0+bWFwcGluZ190YWJsZV9vZmYgPCBuaS0+bWFwcGluZ190YWJsZV9zaXplKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIG5tYm1fY2hlY2tfaW5mb190YWJsZSAtIENoZWNrIGlmIGEgd2hvbGUgaW5mbyB0YWJsZSBpcyB2YWxpZAorICogQG5pOiBOTUJNIGluc3RhbmNlIHN0cnVjdHVyZQorICogQHN0YXJ0X2JhOiBzdGFydCBibG9jayBhZGRyZXNzIG9mIHRoaXMgdGFibGUKKyAqIEBlbmRfYmE6IGVuZCBibG9jayBhZGRyZXNzIG9mIHRoaXMgdGFibGUKKyAqIEBkYXRhOiBwb2ludGVyIHRvIHRoZSBpbmZvIHRhYmxlIGhlYWRlcgorICogQG1hcHBpbmdfYmxvY2tzX3RvcF9iYTogcmV0dXJuIHRoZSBibG9jayBhZGRyZXNzIG9mIHRvcCByZW1hcHBlZCBibG9jaworICovCitzdGF0aWMgYm9vbCBubWJtX2NoZWNrX2luZm9fdGFibGUoc3RydWN0IG5tYm1faW5zdGFuY2UgKm5pLCB1aW50MzJfdCBzdGFydF9iYSwKKwkJCQkgIHVpbnQzMl90IGVuZF9iYSwgdm9pZCAqZGF0YSwKKwkJCQkgIHVpbnQzMl90ICptYXBwaW5nX2Jsb2Nrc190b3BfYmEpCit7CisJc3RydWN0IG5tYm1faW5mb190YWJsZV9oZWFkZXIgKmlmdGhkciA9IGRhdGE7CisJaW50MzJfdCAqYmxvY2tfbWFwcGluZyA9IChpbnQzMl90ICopKCh1aW50cHRyX3QpZGF0YSArIGlmdGhkci0+bWFwcGluZ190YWJsZV9vZmYpOworCW5tYm1fYml0bWFwX3QgKmJsb2NrX3N0YXRlID0gKG5tYm1fYml0bWFwX3QgKikoKHVpbnRwdHJfdClkYXRhICsgaWZ0aGRyLT5zdGF0ZV90YWJsZV9vZmYpOworCXVpbnQzMl90IG1pbmltdW1fbWFwcGluZ19wYiA9IG5pLT5zaWduYXR1cmVfYmE7CisJdWludDMyX3QgYmE7CisKKwlmb3IgKGJhID0gMDsgYmEgPCBuaS0+ZGF0YV9ibG9ja19jb3VudDsgYmErKykgeworCQlpZiAoKGJsb2NrX21hcHBpbmdbYmFdID49IG5pLT5kYXRhX2Jsb2NrX2NvdW50ICYmIGJsb2NrX21hcHBpbmdbYmFdIDwgZW5kX2JhKSB8fAorCQkgICAgYmxvY2tfbWFwcGluZ1tiYV0gPT0gbmktPnNpZ25hdHVyZV9iYSkKKwkJCXJldHVybiBmYWxzZTsKKworCQlpZiAoYmxvY2tfbWFwcGluZ1tiYV0gPj0gZW5kX2JhICYmIGJsb2NrX21hcHBpbmdbYmFdIDwgbWluaW11bV9tYXBwaW5nX3BiKQorCQkJbWluaW11bV9tYXBwaW5nX3BiID0gYmxvY2tfbWFwcGluZ1tiYV07CisJfQorCisJZm9yIChiYSA9IHN0YXJ0X2JhOyBiYSA8IGVuZF9iYTsgYmErKykgeworCQlpZiAobm1ibV9nZXRfYmxvY2tfc3RhdGUobmksIGJhKSAhPSBCTE9DS19TVF9HT09EKQorCQkJY29udGludWU7CisKKwkJaWYgKG5tYm1fZ2V0X2Jsb2NrX3N0YXRlX3JhdyhibG9ja19zdGF0ZSwgYmEpICE9IEJMT0NLX1NUX0dPT0QpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJKm1hcHBpbmdfYmxvY2tzX3RvcF9iYSA9IG1pbmltdW1fbWFwcGluZ19wYiAtIDE7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIG5tYm1fdHJ5X2xvYWRfaW5mb190YWJsZSAtIFRyeSB0byBsb2FkIGluZm8gdGFibGUgZnJvbSBhIGFkZHJlc3MKKyAqIEBuaTogTk1CTSBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqIEBiYTogc3RhcnQgYmxvY2sgYWRkcmVzcyBvZiB0aGUgaW5mbyB0YWJsZQorICogQGViYTogcmV0dXJuIHRoZSBibG9jayBhZGRyZXNzIGFmdGVyIGVuZCBvZiB0aGUgdGFibGUKKyAqIEB3cml0ZV9jb3VudDogcmV0dXJuIHRoZSB3cml0ZSBjb3VudCBvZiB0aGlzIHRhYmxlCisgKiBAbWFwcGluZ19ibG9ja3NfdG9wX2JhOiByZXR1cm4gdGhlIGJsb2NrIGFkZHJlc3Mgb2YgdG9wIHJlbWFwcGVkIGJsb2NrCisgKiBAdGFibGVfbG9hZGVkOiB1c2VkIHRvIHJlY29yZCB3aGV0aGVyIG5pLT5pbmZvX3RhYmxlIGhhcyB2YWxpZCBkYXRhCisgKi8KK3N0YXRpYyBib29sIG5tYm1fdHJ5X2xvYWRfaW5mb190YWJsZShzdHJ1Y3Qgbm1ibV9pbnN0YW5jZSAqbmksIHVpbnQzMl90IGJhLAorCQkJCSAgICAgdWludDMyX3QgKmViYSwgdWludDMyX3QgKndyaXRlX2NvdW50LAorCQkJCSAgICAgdWludDMyX3QgKm1hcHBpbmdfYmxvY2tzX3RvcF9iYSwKKwkJCQkgICAgIGJvb2wgdGFibGVfbG9hZGVkKQoreworCXN0cnVjdCBubWJtX2luZm9fdGFibGVfaGVhZGVyICppZnRoZHIgPSAodm9pZCAqKW5pLT5pbmZvX3RhYmxlX2NhY2hlOworCXVpbnQ4X3QgKm9mZiA9IG5pLT5pbmZvX3RhYmxlX2NhY2hlOworCXVpbnQzMl90IGxpbWl0ID0gYmEgKyBzaXplMmJsayhuaSwgbmktPmluZm9fdGFibGVfc2l6ZSk7CisJdWludDMyX3Qgc3RhcnRfYmEgPSAwLCBjaHVua3NpemUsIHNpemVyZW1haW4gPSBuaS0+aW5mb190YWJsZV9zaXplOworCWJvb2wgc3VjY2VzcywgY2hlY2toZHIgPSB0cnVlOworCWludCByZXQ7CisKKwl3aGlsZSAoc2l6ZXJlbWFpbiAmJiBiYSA8IGxpbWl0KSB7CisJCVdBVENIRE9HX1JFU0VUKCk7CisKKwkJaWYgKG5tYm1fZ2V0X2Jsb2NrX3N0YXRlKG5pLCBiYSkgIT0gQkxPQ0tfU1RfR09PRCkKKwkJCWdvdG8gbmV4dF9ibG9jazsKKworCQlpZiAobm1ibV9jaGVja19iYWRfcGh5c19ibG9jayhuaSwgYmEpKSB7CisJCQlubWJtX3NldF9ibG9ja19zdGF0ZShuaSwgYmEsIEJMT0NLX1NUX0JBRCk7CisJCQlnb3RvIG5leHRfYmxvY2s7CisJCX0KKworCQljaHVua3NpemUgPSBzaXplcmVtYWluOworCQlpZiAoY2h1bmtzaXplID4gbmktPmxvd2VyLmVyYXNlc2l6ZSkKKwkJCWNodW5rc2l6ZSA9IG5pLT5sb3dlci5lcmFzZXNpemU7CisKKwkJLyogQXNzdW1lIGJsb2NrIHdpdGggRUNDIGVycm9yIGhhcyBubyBpbmZvIHRhYmxlIGRhdGEgKi8KKwkJcmV0ID0gbm1ibl9yZWFkX2RhdGEobmksIGJhMmFkZHIobmksIGJhKSwgb2ZmLCBjaHVua3NpemUpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gc2tpcF9iYWRfYmxvY2s7CisJCWVsc2UgaWYgKHJldCA+IDApCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJaWYgKGNoZWNraGRyKSB7CisJCQlzdWNjZXNzID0gbm1ibV9jaGVja19pbmZvX3RhYmxlX2hlYWRlcihuaSwgb2ZmKTsKKwkJCWlmICghc3VjY2VzcykKKwkJCQlyZXR1cm4gZmFsc2U7CisKKwkJCXN0YXJ0X2JhID0gYmE7CisJCQljaGVja2hkciA9IGZhbHNlOworCQl9CisKKwkJb2ZmICs9IGNodW5rc2l6ZTsKKwkJc2l6ZXJlbWFpbiAtPSBjaHVua3NpemU7CisKKwkJZ290byBuZXh0X2Jsb2NrOworCisJc2tpcF9iYWRfYmxvY2s6CisJCS8qIE9ubHkgbWFyayBiYWQgaW4gbWVtb3J5ICovCisJCW5tYm1fc2V0X2Jsb2NrX3N0YXRlKG5pLCBiYSwgQkxPQ0tfU1RfQkFEKTsKKworCW5leHRfYmxvY2s6CisJCWJhKys7CisJfQorCisJaWYgKHNpemVyZW1haW4pCisJCXJldHVybiBmYWxzZTsKKworCXN1Y2Nlc3MgPSBubWJtX2NoZWNrX2hlYWRlcihuaS0+aW5mb190YWJsZV9jYWNoZSwgbmktPmluZm9fdGFibGVfc2l6ZSk7CisJaWYgKCFzdWNjZXNzKQorCQlyZXR1cm4gZmFsc2U7CisKKwkqZWJhID0gYmE7CisJKndyaXRlX2NvdW50ID0gaWZ0aGRyLT53cml0ZV9jb3VudDsKKworCXN1Y2Nlc3MgPSBubWJtX2NoZWNrX2luZm9fdGFibGUobmksIHN0YXJ0X2JhLCBiYSwgbmktPmluZm9fdGFibGVfY2FjaGUsCisJCQkJCW1hcHBpbmdfYmxvY2tzX3RvcF9iYSk7CisJaWYgKCFzdWNjZXNzKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIXRhYmxlX2xvYWRlZCB8fCBpZnRoZHItPndyaXRlX2NvdW50ID4gbmktPmluZm9fdGFibGUud3JpdGVfY291bnQpIHsKKwkJbWVtY3B5KCZuaS0+aW5mb190YWJsZSwgaWZ0aGRyLCBzaXplb2YobmktPmluZm9fdGFibGUpKTsKKwkJbWVtY3B5KG5pLT5ibG9ja19zdGF0ZSwKKwkJICAgICAgICh1aW50OF90ICopaWZ0aGRyICsgaWZ0aGRyLT5zdGF0ZV90YWJsZV9vZmYsCisJCSAgICAgICBuaS0+c3RhdGVfdGFibGVfc2l6ZSk7CisJCW1lbWNweShuaS0+YmxvY2tfbWFwcGluZywKKwkJICAgICAgICh1aW50OF90ICopaWZ0aGRyICsgaWZ0aGRyLT5tYXBwaW5nX3RhYmxlX29mZiwKKwkJICAgICAgIG5pLT5tYXBwaW5nX3RhYmxlX3NpemUpOworCQluaS0+aW5mb190YWJsZS53cml0ZV9jb3VudCA9IGlmdGhkci0+d3JpdGVfY291bnQ7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBubWJtX3NlYXJjaF9pbmZvX3RhYmxlIC0gU2VhcmNoIGluZm8gdGFibGUgZnJvbSBzcGVjaWZpYyBhZGRyZXNzCisgKiBAbmk6IE5NQk0gaW5zdGFuY2Ugc3RydWN0dXJlCisgKiBAYmE6IHN0YXJ0IGJsb2NrIGFkZHJlc3MgdG8gc2VhcmNoCisgKiBAbGltaXQ6IGhpZ2hlc3QgYmxvY2sgYWRkcmVzcyBhbGxvd2VkIGZvciBzZWFyY2hpbmcKKyAqIEB0YWJsZV9zdGFydF9iYTogcmV0dXJuIHRoZSBzdGFydCBibG9jayBhZGRyZXNzIG9mIHRoaXMgdGFibGUKKyAqIEB0YWJsZV9lbmRfYmE6IHJldHVybiB0aGUgYmxvY2sgYWRkcmVzcyBhZnRlciBlbmQgb2YgdGhpcyB0YWJsZQorICogQHdyaXRlX2NvdW50OiByZXR1cm4gdGhlIHdyaXRlIGNvdW50IG9mIHRoaXMgdGFibGUKKyAqIEBtYXBwaW5nX2Jsb2Nrc190b3BfYmE6IHJldHVybiB0aGUgYmxvY2sgYWRkcmVzcyBvZiB0b3AgcmVtYXBwZWQgYmxvY2sKKyAqIEB0YWJsZV9sb2FkZWQ6IHVzZWQgdG8gcmVjb3JkIHdoZXRoZXIgbmktPmluZm9fdGFibGUgaGFzIHZhbGlkIGRhdGEKKyAqLworc3RhdGljIGJvb2wgbm1ibV9zZWFyY2hfaW5mb190YWJsZShzdHJ1Y3Qgbm1ibV9pbnN0YW5jZSAqbmksIHVpbnQzMl90IGJhLAorCQkJCSAgIHVpbnQzMl90IGxpbWl0LCB1aW50MzJfdCAqdGFibGVfc3RhcnRfYmEsCisJCQkJICAgdWludDMyX3QgKnRhYmxlX2VuZF9iYSwKKwkJCQkgICB1aW50MzJfdCAqd3JpdGVfY291bnQsCisJCQkJICAgdWludDMyX3QgKm1hcHBpbmdfYmxvY2tzX3RvcF9iYSwKKwkJCQkgICBib29sIHRhYmxlX2xvYWRlZCkKK3sKKwlib29sIHN1Y2Nlc3M7CisKKwl3aGlsZSAoYmEgPCBsaW1pdCAtIHNpemUyYmxrKG5pLCBuaS0+aW5mb190YWJsZV9zaXplKSkgeworCQlXQVRDSERPR19SRVNFVCgpOworCisJCXN1Y2Nlc3MgPSBubWJtX3RyeV9sb2FkX2luZm9fdGFibGUobmksIGJhLCB0YWJsZV9lbmRfYmEsCisJCQkJCQkgICB3cml0ZV9jb3VudCwKKwkJCQkJCSAgIG1hcHBpbmdfYmxvY2tzX3RvcF9iYSwKKwkJCQkJCSAgIHRhYmxlX2xvYWRlZCk7CisJCWlmIChzdWNjZXNzKSB7CisJCQkqdGFibGVfc3RhcnRfYmEgPSBiYTsKKwkJCXJldHVybiB0cnVlOworCQl9CisKKwkJYmErKzsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBubWJtX2xvYWRfaW5mb190YWJsZSAtIExvYWQgaW5mbyB0YWJsZShzKSBmcm9tIGEgY2hpcAorICogQG5pOiBOTUJNIGluc3RhbmNlIHN0cnVjdHVyZQorICogQGJhOiBzdGFydCBibG9jayBhZGRyZXNzIHRvIHNlYXJjaCBpbmZvIHRhYmxlCisgKiBAbGltaXQ6IGhpZ2hlc3QgYmxvY2sgYWRkcmVzcyBhbGxvd2VkIGZvciBzZWFyY2hpbmcKKyAqLworc3RhdGljIGJvb2wgbm1ibV9sb2FkX2luZm9fdGFibGUoc3RydWN0IG5tYm1faW5zdGFuY2UgKm5pLCB1aW50MzJfdCBiYSwKKwkJCQkgdWludDMyX3QgbGltaXQpCit7CisJdWludDMyX3QgbWFpbl90YWJsZV9lbmRfYmEsIGJhY2t1cF90YWJsZV9lbmRfYmEsIHRhYmxlX2VuZF9iYTsKKwl1aW50MzJfdCBtYWluX21hcHBpbmdfYmxvY2tzX3RvcF9iYSwgYmFja3VwX21hcHBpbmdfYmxvY2tzX3RvcF9iYTsKKwl1aW50MzJfdCBtYWluX3RhYmxlX3dyaXRlX2NvdW50LCBiYWNrdXBfdGFibGVfd3JpdGVfY291bnQ7CisJdWludDMyX3QgaTsKKwlib29sIHN1Y2Nlc3M7CisKKwkvKiBTZXQgaW5pdGlhbCB2YWx1ZSAqLworCW5pLT5tYWluX3RhYmxlX2JhID0gMDsKKwluaS0+YmFja3VwX3RhYmxlX2JhID0gMDsKKwluaS0+aW5mb190YWJsZS53cml0ZV9jb3VudCA9IDA7CisJbmktPm1hcHBpbmdfYmxvY2tzX3RvcF9iYSA9IG5pLT5zaWduYXR1cmVfYmEgLSAxOworCW5pLT5kYXRhX2Jsb2NrX2NvdW50ID0gbmktPnNpZ25hdHVyZS5tZ210X3N0YXJ0X3BiOworCisJLyogRmluZCBmaXJzdCBpbmZvIHRhYmxlICovCisJc3VjY2VzcyA9IG5tYm1fc2VhcmNoX2luZm9fdGFibGUobmksIGJhLCBsaW1pdCwgJm5pLT5tYWluX3RhYmxlX2JhLAorCQkmbWFpbl90YWJsZV9lbmRfYmEsICZtYWluX3RhYmxlX3dyaXRlX2NvdW50LAorCQkmbWFpbl9tYXBwaW5nX2Jsb2Nrc190b3BfYmEsIGZhbHNlKTsKKwlpZiAoIXN1Y2Nlc3MpIHsKKwkJbmxvZ193YXJuKG5pLCAiTm8gdmFsaWQgaW5mbyB0YWJsZSBmb3VuZFxuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwl0YWJsZV9lbmRfYmEgPSBtYWluX3RhYmxlX2VuZF9iYTsKKworCW5sb2dfdGFibGVfZm91bmQobmksIHRydWUsIG1haW5fdGFibGVfd3JpdGVfY291bnQsIG5pLT5tYWluX3RhYmxlX2JhLAorCQkJbWFpbl90YWJsZV9lbmRfYmEpOworCisJLyogRmluZCBzZWNvbmQgaW5mbyB0YWJsZSAqLworCXN1Y2Nlc3MgPSBubWJtX3NlYXJjaF9pbmZvX3RhYmxlKG5pLCBtYWluX3RhYmxlX2VuZF9iYSwgbGltaXQsCisJCSZuaS0+YmFja3VwX3RhYmxlX2JhLCAmYmFja3VwX3RhYmxlX2VuZF9iYSwKKwkJJmJhY2t1cF90YWJsZV93cml0ZV9jb3VudCwgJmJhY2t1cF9tYXBwaW5nX2Jsb2Nrc190b3BfYmEsIHRydWUpOworCWlmICghc3VjY2VzcykgeworCQlubG9nX3dhcm4obmksICJTZWNvbmQgaW5mbyB0YWJsZSBub3QgZm91bmRcbiIpOworCX0gZWxzZSB7CisJCXRhYmxlX2VuZF9iYSA9IGJhY2t1cF90YWJsZV9lbmRfYmE7CisKKwkJbmxvZ190YWJsZV9mb3VuZChuaSwgZmFsc2UsIGJhY2t1cF90YWJsZV93cml0ZV9jb3VudCwKKwkJCQluaS0+YmFja3VwX3RhYmxlX2JhLCBiYWNrdXBfdGFibGVfZW5kX2JhKTsKKwl9CisKKwkvKiBQaWNrIG1hcHBpbmdfYmxvY2tzX3RvcF9iYSAqLworCWlmICghbmktPmJhY2t1cF90YWJsZV9iYSkgeworCQluaS0+bWFwcGluZ19ibG9ja3NfdG9wX2JhPSBtYWluX21hcHBpbmdfYmxvY2tzX3RvcF9iYTsKKwl9IGVsc2UgeworCQlpZiAobWFpbl90YWJsZV93cml0ZV9jb3VudCA+PSBiYWNrdXBfdGFibGVfd3JpdGVfY291bnQpCisJCQluaS0+bWFwcGluZ19ibG9ja3NfdG9wX2JhID0gbWFpbl9tYXBwaW5nX2Jsb2Nrc190b3BfYmE7CisJCWVsc2UKKwkJCW5pLT5tYXBwaW5nX2Jsb2Nrc190b3BfYmEgPSBiYWNrdXBfbWFwcGluZ19ibG9ja3NfdG9wX2JhOworCX0KKworCS8qIFNldCBmaW5hbCBtYXBwaW5nX2Jsb2Nrc19iYSAqLworCW5pLT5tYXBwaW5nX2Jsb2Nrc19iYSA9IHRhYmxlX2VuZF9iYTsKKworCS8qIFNldCBmaW5hbCBkYXRhX2Jsb2NrX2NvdW50ICovCisJZm9yIChpID0gbmktPnNpZ25hdHVyZS5tZ210X3N0YXJ0X3BiOyBpID4gMDsgaS0tKSB7CisJCWlmIChuaS0+YmxvY2tfbWFwcGluZ1tpIC0gMV0gPj0gMCkgeworCQkJbmktPmRhdGFfYmxvY2tfY291bnQgPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBEZWJ1ZyBwdXJwb3NlOiBtYXJrIG1hcHBlZCBibG9ja3MgYW5kIGJhZCBibG9ja3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbmktPmRhdGFfYmxvY2tfY291bnQ7IGkrKykgeworCQlpZiAobmktPmJsb2NrX21hcHBpbmdbaV0gPiBuaS0+bWFwcGluZ19ibG9ja3NfdG9wX2JhKQorCQkJbm1ibV9tYXJrX2Jsb2NrX2NvbG9yX21hcHBlZChuaSwgbmktPmJsb2NrX21hcHBpbmdbaV0pOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBuaS0+YmxvY2tfY291bnQ7IGkrKykgeworCQlpZiAobm1ibV9nZXRfYmxvY2tfc3RhdGUobmksIGkpID09IEJMT0NLX1NUX0JBRCkKKwkJCW5tYm1fbWFya19ibG9ja19jb2xvcl9iYWQobmksIGkpOworCX0KKworCS8qIFJlZ2VuZXJhdGUgdGhlIGluZm8gdGFibGUgY2FjaGUgZnJvbSB0aGUgZmluYWwgc2VsZWN0ZWQgaW5mbyB0YWJsZSAqLworCW5tYm1fZ2VuZXJhdGVfaW5mb190YWJsZV9jYWNoZShuaSk7CisKKwlpZiAobmktPmxvd2VyLmZsYWdzICYgTk1CTV9GX1JFQURfT05MWSkKKwkJcmV0dXJuIHRydWU7CisKKwkvKgorCSAqIElmIG9ubHkgb25lIHRhYmxlIGV4aXN0cywgdHJ5IHRvIHdyaXRlIGFub3RoZXIgdGFibGUuCisJICogSWYgdHdvIHRhYmxlcyBoYXZlIGRpZmZlcmVudCB3cml0ZSBjb3VudCwgdHJ5IHRvIHVwZGF0ZSBpbmZvIHRhYmxlCisJICovCisJaWYgKCFuaS0+YmFja3VwX3RhYmxlX2JhKSB7CisJCXN1Y2Nlc3MgPSBubWJtX3Jlc2N1ZV9zaW5nbGVfaW5mb190YWJsZShuaSk7CisJfSBlbHNlIGlmIChtYWluX3RhYmxlX3dyaXRlX2NvdW50ICE9IGJhY2t1cF90YWJsZV93cml0ZV9jb3VudCkgeworCQkvKiBNYXJrIHN0YXRlICYgbWFwcGluZyB0YWJsZXMgY2hhbmdlZCAqLworCQluaS0+YmxvY2tfc3RhdGVfY2hhbmdlZCA9IDE7CisJCW5pLT5ibG9ja19tYXBwaW5nX2NoYW5nZWQgPSAxOworCisJCXN1Y2Nlc3MgPSBubWJtX3VwZGF0ZV9zaW5nbGVfaW5mb190YWJsZShuaSwKKwkJCW1haW5fdGFibGVfd3JpdGVfY291bnQgPCBiYWNrdXBfdGFibGVfd3JpdGVfY291bnQpOworCX0gZWxzZSB7CisJCXN1Y2Nlc3MgPSB0cnVlOworCX0KKworCS8qCisJICogSWYgdGhlcmUgaXMgbm8gc3BhcmUgdW5tYXBwZWQgYmxvY2tzLCBvciBzdGlsbCBvbmx5IG9uZSB0YWJsZQorCSAqIGV4aXN0cywgc2V0IHRoZSBjaGlwIHRvIHJlYWQtb25seQorCSAqLworCWlmIChuaS0+bWFwcGluZ19ibG9ja3NfYmEgPT0gbmktPm1hcHBpbmdfYmxvY2tzX3RvcF9iYSkgeworCQlubG9nX3dhcm4obmksICJObyBzcGFyZSB1bm1hcHBlZCBibG9ja3MuIERldmljZSBpcyBub3cgcmVhZC1vbmx5XG4iKTsKKwkJbmktPnByb3RlY3RlZCA9IDE7CisJfSBlbHNlIGlmICghc3VjY2VzcykgeworCQlubG9nX3dhcm4obmksICJPbmx5IG9uZSBpbmZvIHRhYmxlIGZvdW5kLiBEZXZpY2UgaXMgbm93IHJlYWQtb25seVxuIik7CisJCW5pLT5wcm90ZWN0ZWQgPSAxOworCX0KKworCXJldHVybiB0cnVlOworfQorCisvKgorICogbm1ibV9sb2FkX2V4aXN0aW5nIC0gTG9hZCBOTUJNIGZyb20gYSBuZXcgY2hpcAorICogQG5pOiBOTUJNIGluc3RhbmNlIHN0cnVjdHVyZQorICovCitzdGF0aWMgYm9vbCBubWJtX2xvYWRfZXhpc3Rpbmcoc3RydWN0IG5tYm1faW5zdGFuY2UgKm5pKQoreworCWJvb2wgc3VjY2VzczsKKworCS8qIENhbGN1bGF0ZSB0aGUgYm91bmRhcnkgb2YgbWFuYWdlbWVudCBibG9ja3MgKi8KKwluaS0+bWdtdF9zdGFydF9iYSA9IG5pLT5zaWduYXR1cmUubWdtdF9zdGFydF9wYjsKKworCW5sb2dfZGVidWcobmksICJOTUJNIG1hbmFnZW1lbnQgcmVnaW9uIHN0YXJ0cyBhdCBibG9jayAldSBbMHglMDhsbHhdXG4iLAorCQkgIG5pLT5tZ210X3N0YXJ0X2JhLCBiYTJhZGRyKG5pLCBuaS0+bWdtdF9zdGFydF9iYSkpOworCW5tYm1fbWFya19ibG9ja19jb2xvcl9tZ210KG5pLCBuaS0+bWdtdF9zdGFydF9iYSwKKwkJCQkgICBuaS0+c2lnbmF0dXJlX2JhIC0gMSk7CisKKwkvKiBMb29rIGZvciBpbmZvIHRhYmxlKHMpICovCisJc3VjY2VzcyA9IG5tYm1fbG9hZF9pbmZvX3RhYmxlKG5pLCBuaS0+bWdtdF9zdGFydF9iYSwKKwkJbmktPnNpZ25hdHVyZV9iYSk7CisJaWYgKHN1Y2Nlc3MpIHsKKwkJbmxvZ19pbmZvKG5pLCAiTk1CTSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgYXR0YWNoZWQgJXNcbiIsCisJCQkgIChuaS0+bG93ZXIuZmxhZ3MgJiBOTUJNX0ZfUkVBRF9PTkxZKSA/ICJpbiByZWFkLW9ubHkgbW9kZSIgOiAiIik7CisJCXJldHVybiB0cnVlOworCX0KKworCWlmICghKG5pLT5sb3dlci5mbGFncyAmIE5NQk1fRl9DUkVBVEUpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBGaWxsIGJsb2NrIHN0YXRlIHRhYmxlICYgbWFwcGluZyB0YWJsZSAqLworCW5tYm1fc2Nhbl9iYWRibG9ja3MobmkpOworCW5tYm1fYnVpbGRfbWFwcGluZ190YWJsZShuaSk7CisKKwlpZiAobmktPmxvd2VyLmZsYWdzICYgTk1CTV9GX1JFQURfT05MWSkgeworCQlubG9nX2luZm8obmksICJOTUJNIGhhcyBiZWVuIGluaXRpYWxpemVkIGluIHJlYWQtb25seSBtb2RlXG4iKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyogV3JpdGUgaW5mbyB0YWJsZShzKSAqLworCXN1Y2Nlc3MgPSBubWJtX2NyZWF0ZV9pbmZvX3RhYmxlKG5pKTsKKwlpZiAoc3VjY2VzcykgeworCQlubG9nX2luZm8obmksICJOTUJNIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBjcmVhdGVkXG4iKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogbm1ibV9maW5kX3NpZ25hdHVyZSAtIEZpbmQgc2lnbmF0dXJlIGluIHRoZSBsb3dlciBOQU5EIGNoaXAKKyAqIEBuaTogTk1CTSBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqIEBzaWduYXR1cmVfYmE6IHVzZWQgZm9yIHN0b3JpbmcgYmxvY2sgYWRkcmVzcyBvZiB0aGUgc2lnbmF0dXJlCisgKiBAc2lnbmF0dXJlX2JhOiByZXR1cm4gdGhlIGFjdHVhbCBibG9jayBhZGRyZXNzIG9mIHNpZ25hdHVyZSBibG9jaworICoKKyAqIEZpbmQgYSB2YWxpZCBzaWduYXR1cmUgZnJvbSBhIHNwZWNpZmljIHJhbmdlIGluIHRoZSBsb3dlciBOQU5EIGNoaXAsCisgKiBmcm9tIGJvdHRvbSAoaGlnaGVzdCBhZGRyZXNzKSB0byB0b3AgKGxvd2VzdCBhZGRyZXNzKQorICoKKyAqIFJldHVybiB0cnVlIGlmIGZvdW5kLgorICovCitzdGF0aWMgYm9vbCBubWJtX2ZpbmRfc2lnbmF0dXJlKHN0cnVjdCBubWJtX2luc3RhbmNlICpuaSwKKwkJCQlzdHJ1Y3Qgbm1ibV9zaWduYXR1cmUgKnNpZ25hdHVyZSwKKwkJCQl1aW50MzJfdCAqc2lnbmF0dXJlX2JhKQoreworCXN0cnVjdCBubWJtX3NpZ25hdHVyZSBzaWc7CisJdWludDY0X3Qgb2ZmLCBhZGRyOworCXVpbnQzMl90IGJsb2NrX2NvdW50LCBiYSwgbGltaXQ7CisJYm9vbCBzdWNjZXNzOworCWludCByZXQ7CisKKwkvKiBDYWxjdWxhdGUgdG9wIGFuZCBib3R0b20gYmxvY2sgYWRkcmVzcyAqLworCWJsb2NrX2NvdW50ID0gbmktPmxvd2VyLnNpemUgPj4gbmktPmVyYXNlc2l6ZV9zaGlmdDsKKwliYSA9IGJsb2NrX2NvdW50OworCWxpbWl0ID0gKGJsb2NrX2NvdW50IC8gTk1CTV9NR01UX0RJVikgKiAoTk1CTV9NR01UX0RJViAtIG5pLT5sb3dlci5tYXhfcmF0aW8pOworCWlmIChuaS0+bG93ZXIubWF4X3Jlc2VydmVkX2Jsb2NrcyAmJiBibG9ja19jb3VudCAtIGxpbWl0ID4gbmktPmxvd2VyLm1heF9yZXNlcnZlZF9ibG9ja3MpCisJCWxpbWl0ID0gYmxvY2tfY291bnQgLSBuaS0+bG93ZXIubWF4X3Jlc2VydmVkX2Jsb2NrczsKKworCXdoaWxlIChiYSA+PSBsaW1pdCkgeworCQlXQVRDSERPR19SRVNFVCgpOworCisJCWJhLS07CisJCWFkZHIgPSBiYTJhZGRyKG5pLCBiYSk7CisKKwkJaWYgKG5tYm1fY2hlY2tfYmFkX3BoeXNfYmxvY2sobmksIGJhKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIENoZWNrIGV2ZXJ5IHBhZ2UuCisJCSAqIEFzIGxvbmcgYXMgYXQgbGVhc2V0IG9uZSBwYWdlIGNvbnRhaW5zIHZhbGlkIHNpZ25hdHVyZSwKKwkJICogdGhlIGJsb2NrIGlzIHRyZWF0ZWQgYXMgYSB2YWxpZCBzaWduYXR1cmUgYmxvY2suCisJCSAqLworCQlmb3IgKG9mZiA9IDA7IG9mZiA8IG5pLT5sb3dlci5lcmFzZXNpemU7CisJCSAgICAgb2ZmICs9IG5pLT5sb3dlci53cml0ZXNpemUpIHsKKwkJCVdBVENIRE9HX1JFU0VUKCk7CisKKwkJCXJldCA9IG5tYm5fcmVhZF9kYXRhKG5pLCBhZGRyICsgb2ZmLCAmc2lnLAorCQkJCQkgICAgIHNpemVvZihzaWcpKTsKKwkJCWlmIChyZXQpCisJCQkJY29udGludWU7CisKKwkJCS8qIENoZWNrIGZvciBoZWFkZXIgc2l6ZSBhbmQgY2hlY2tzdW0gKi8KKwkJCXN1Y2Nlc3MgPSBubWJtX2NoZWNrX2hlYWRlcigmc2lnLCBzaXplb2Yoc2lnKSk7CisJCQlpZiAoIXN1Y2Nlc3MpCisJCQkJY29udGludWU7CisKKwkJCS8qIENoZWNrIGZvciBoZWFkZXIgbWFnaWMgKi8KKwkJCWlmIChzaWcuaGVhZGVyLm1hZ2ljID09IE5NQk1fTUFHSUNfU0lHTkFUVVJFKSB7CisJCQkJLyogRm91bmQgaXQgKi8KKwkJCQltZW1jcHkoc2lnbmF0dXJlLCAmc2lnLCBzaXplb2Yoc2lnKSk7CisJCQkJKnNpZ25hdHVyZV9iYSA9IGJhOworCQkJCXJldHVybiB0cnVlOworCQkJfQorCQl9CisJfTsKKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIGlzX3Bvd2VyX29mXzJfdTY0IC0gQ2hlY2sgd2hldGhlciBhIDY0LWJpdCBpbnRlZ2VyIGlzIHBvd2VyIG9mIDIKKyAqIEBuOiBudW1iZXIgdG8gY2hlY2sKKyAqLworc3RhdGljIGJvb2wgaXNfcG93ZXJfb2ZfMl91NjQodWludDY0X3QgbikKK3sKKwlyZXR1cm4gKG4gIT0gMCAmJiAoKG4gJiAobiAtIDEpKSA9PSAwKSk7Cit9CisKKy8qCisgKiBubWJtX2NoZWNrX2xvd2VyX21lbWJlcnMgLSBWYWxpZGF0ZSB0aGUgbWVtYmVycyBvZiBsb3dlciBOQU5EIGRldmljZQorICogQG5sZDogTG93ZXIgTkFORCBjaGlwIHN0cnVjdHVyZQorICovCitzdGF0aWMgYm9vbCBubWJtX2NoZWNrX2xvd2VyX21lbWJlcnMoc3RydWN0IG5tYm1fbG93ZXJfZGV2aWNlICpubGQpCit7CisKKwlpZiAoIW5sZC0+c2l6ZSB8fCAhaXNfcG93ZXJfb2ZfMl91NjQobmxkLT5zaXplKSkgeworCQlubWJtX2xvZ19sb3dlcihubGQsIE5NQk1fTE9HX0VSUiwKKwkJCSAgICAgICAiQ2hpcCBzaXplICVsbHUgaXMgbm90IHZhbGlkXG4iLCBubGQtPnNpemUpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKCFubGQtPmVyYXNlc2l6ZSB8fCAhaXNfcG93ZXJfb2ZfMihubGQtPmVyYXNlc2l6ZSkpIHsKKwkJbm1ibV9sb2dfbG93ZXIobmxkLCBOTUJNX0xPR19FUlIsCisJCQkgICAgICAgIkJsb2NrIHNpemUgJXUgaXMgbm90IHZhbGlkXG4iLCBubGQtPmVyYXNlc2l6ZSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAoIW5sZC0+d3JpdGVzaXplIHx8ICFpc19wb3dlcl9vZl8yKG5sZC0+d3JpdGVzaXplKSkgeworCQlubWJtX2xvZ19sb3dlcihubGQsIE5NQk1fTE9HX0VSUiwKKwkJCSAgICAgICAiUGFnZSBzaXplICV1IGlzIG5vdCB2YWxpZFxuIiwgbmxkLT53cml0ZXNpemUpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKCFubGQtPm9vYnNpemUgfHwgIWlzX3Bvd2VyX29mXzIobmxkLT5vb2JzaXplKSkgeworCQlubWJtX2xvZ19sb3dlcihubGQsIE5NQk1fTE9HX0VSUiwKKwkJCSAgICAgICAiUGFnZSBzcGFyZSBzaXplICV1IGlzIG5vdCB2YWxpZFxuIiwgbmxkLT5vb2JzaXplKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmICghbmxkLT5yZWFkX3BhZ2UpIHsKKwkJbm1ibV9sb2dfbG93ZXIobmxkLCBOTUJNX0xPR19FUlIsICJyZWFkX3BhZ2UoKSBpcyByZXF1aXJlZFxuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAoIShubGQtPmZsYWdzICYgTk1CTV9GX1JFQURfT05MWSkgJiYgKCFubGQtPndyaXRlX3BhZ2UgfHwgIW5sZC0+ZXJhc2VfYmxvY2spKSB7CisJCW5tYm1fbG9nX2xvd2VyKG5sZCwgTk1CTV9MT0dfRVJSLAorCQkJICAgICAgICJ3cml0ZV9wYWdlKCkgYW5kIGVyYXNlX2Jsb2NrKCkgYXJlIHJlcXVpcmVkXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIERhdGEgc2FuaXR5IGNoZWNrICovCisJaWYgKCFubGQtPm1heF9yYXRpbykKKwkJbmxkLT5tYXhfcmF0aW8gPSAxOworCisJaWYgKG5sZC0+bWF4X3JhdGlvID49IE5NQk1fTUdNVF9ESVYgLSAxKSB7CisJCW5tYm1fbG9nX2xvd2VyKG5sZCwgTk1CTV9MT0dfRVJSLAorCQkJICAgICAgICJtYXggcmF0aW8gJXUgaXMgaW52YWxpZFxuIiwgbmxkLT5tYXhfcmF0aW8pOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKG5sZC0+bWF4X3Jlc2VydmVkX2Jsb2NrcyAmJiBubGQtPm1heF9yZXNlcnZlZF9ibG9ja3MgPCBOTUJNX01HTVRfQkxPQ0tTX01JTikgeworCQlubWJtX2xvZ19sb3dlcihubGQsIE5NQk1fTE9HX0VSUiwKKwkJCSAgICAgICAibWF4IHJlc2VydmVkIGJsb2NrcyAldSBpcyB0b28gc21hbGxcbiIsIG5sZC0+bWF4X3Jlc2VydmVkX2Jsb2Nrcyk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIG5tYm1fY2FsY19zdHJ1Y3R1cmVfc2l6ZSAtIENhbGN1bGF0ZSB0aGUgaW5zdGFuY2Ugc3RydWN0dXJlIHNpemUKKyAqIEBubGQ6IE5NQk0gbG93ZXIgZGV2aWNlIHN0cnVjdHVyZQorICovCitzaXplX3Qgbm1ibV9jYWxjX3N0cnVjdHVyZV9zaXplKHN0cnVjdCBubWJtX2xvd2VyX2RldmljZSAqbmxkKQoreworCXVpbnQzMl90IHN0YXRlX3RhYmxlX3NpemUsIG1hcHBpbmdfdGFibGVfc2l6ZSwgaW5mb190YWJsZV9zaXplOworCXVpbnQzMl90IGJsb2NrX2NvdW50OworCisJYmxvY2tfY291bnQgPSBubWJtX2xsZGl2KG5sZC0+c2l6ZSwgbmxkLT5lcmFzZXNpemUpOworCisJLyogQ2FsY3VsYXRlIGluZm8gdGFibGUgc2l6ZSAqLworCXN0YXRlX3RhYmxlX3NpemUgPSAoKGJsb2NrX2NvdW50ICsgTk1CTV9CSVRNQVBfQkxPQ0tTX1BFUl9VTklUIC0gMSkgLworCQlOTUJNX0JJVE1BUF9CTE9DS1NfUEVSX1VOSVQpICogTk1CTV9CSVRNQVBfVU5JVF9TSVpFOworCW1hcHBpbmdfdGFibGVfc2l6ZSA9IGJsb2NrX2NvdW50ICogc2l6ZW9mKGludDMyX3QpOworCisJaW5mb190YWJsZV9zaXplID0gTk1CTV9BTElHTihzaXplb2Yoc3RydWN0IG5tYm1faW5mb190YWJsZV9oZWFkZXIpLAorCQkJCSAgICAgbmxkLT53cml0ZXNpemUpOworCWluZm9fdGFibGVfc2l6ZSArPSBOTUJNX0FMSUdOKHN0YXRlX3RhYmxlX3NpemUsIG5sZC0+d3JpdGVzaXplKTsKKwlpbmZvX3RhYmxlX3NpemUgKz0gTk1CTV9BTElHTihtYXBwaW5nX3RhYmxlX3NpemUsIG5sZC0+d3JpdGVzaXplKTsKKworCXJldHVybiBpbmZvX3RhYmxlX3NpemUgKyBzdGF0ZV90YWJsZV9zaXplICsgbWFwcGluZ190YWJsZV9zaXplICsKKwkJbmxkLT53cml0ZXNpemUgKyBubGQtPm9vYnNpemUgKyBzaXplb2Yoc3RydWN0IG5tYm1faW5zdGFuY2UpOworfQorCisvKgorICogbm1ibV9pbml0X3N0cnVjdHVyZSAtIEluaXRpYWxpemUgbWVtYmVycyBvZiBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqIEBuaTogTk1CTSBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHZvaWQgbm1ibV9pbml0X3N0cnVjdHVyZShzdHJ1Y3Qgbm1ibV9pbnN0YW5jZSAqbmkpCit7CisJdWludDMyX3QgcGFnZXNfcGVyX2Jsb2NrLCBibG9ja3NfcGVyX2NoaXA7CisJdWludHB0cl90IHB0cjsKKworCXBhZ2VzX3Blcl9ibG9jayA9IG5pLT5sb3dlci5lcmFzZXNpemUgLyBuaS0+bG93ZXIud3JpdGVzaXplOworCWJsb2Nrc19wZXJfY2hpcCA9IG5tYm1fbGxkaXYobmktPmxvd2VyLnNpemUsIG5pLT5sb3dlci5lcmFzZXNpemUpOworCisJbmktPnJhd3BhZ2Vfc2l6ZSA9IG5pLT5sb3dlci53cml0ZXNpemUgKyBuaS0+bG93ZXIub29ic2l6ZTsKKwluaS0+cmF3YmxvY2tfc2l6ZSA9IHBhZ2VzX3Blcl9ibG9jayAqIG5pLT5yYXdwYWdlX3NpemU7CisJbmktPnJhd2NoaXBfc2l6ZSA9IGJsb2Nrc19wZXJfY2hpcCAqIG5pLT5yYXdibG9ja19zaXplOworCisJbmktPndyaXRlc2l6ZV9tYXNrID0gbmktPmxvd2VyLndyaXRlc2l6ZSAtIDE7CisJbmktPmVyYXNlc2l6ZV9tYXNrID0gbmktPmxvd2VyLmVyYXNlc2l6ZSAtIDE7CisKKwluaS0+d3JpdGVzaXplX3NoaWZ0ID0gZmZzKG5pLT5sb3dlci53cml0ZXNpemUpIC0gMTsKKwluaS0+ZXJhc2VzaXplX3NoaWZ0ID0gZmZzKG5pLT5sb3dlci5lcmFzZXNpemUpIC0gMTsKKworCS8qIENhbGN1bGF0ZSBudW1iZXIgb2YgYmxvY2sgdGhpcyBjaGlwICovCisJbmktPmJsb2NrX2NvdW50ID0gbmktPmxvd2VyLnNpemUgPj4gbmktPmVyYXNlc2l6ZV9zaGlmdDsKKworCS8qIENhbGN1bGF0ZSBpbmZvIHRhYmxlIHNpemUgKi8KKwluaS0+c3RhdGVfdGFibGVfc2l6ZSA9ICgobmktPmJsb2NrX2NvdW50ICsgTk1CTV9CSVRNQVBfQkxPQ0tTX1BFUl9VTklUIC0gMSkgLworCQlOTUJNX0JJVE1BUF9CTE9DS1NfUEVSX1VOSVQpICogTk1CTV9CSVRNQVBfVU5JVF9TSVpFOworCW5pLT5tYXBwaW5nX3RhYmxlX3NpemUgPSBuaS0+YmxvY2tfY291bnQgKiBzaXplb2YoKm5pLT5ibG9ja19tYXBwaW5nKTsKKworCW5pLT5pbmZvX3RhYmxlX3NpemUgPSBOTUJNX0FMSUdOKHNpemVvZihuaS0+aW5mb190YWJsZSksCisJCQkJCSBuaS0+bG93ZXIud3JpdGVzaXplKTsKKwluaS0+aW5mb190YWJsZS5zdGF0ZV90YWJsZV9vZmYgPSBuaS0+aW5mb190YWJsZV9zaXplOworCisJbmktPmluZm9fdGFibGVfc2l6ZSArPSBOTUJNX0FMSUdOKG5pLT5zdGF0ZV90YWJsZV9zaXplLAorCQkJCQkgIG5pLT5sb3dlci53cml0ZXNpemUpOworCW5pLT5pbmZvX3RhYmxlLm1hcHBpbmdfdGFibGVfb2ZmID0gbmktPmluZm9fdGFibGVfc2l6ZTsKKworCW5pLT5pbmZvX3RhYmxlX3NpemUgKz0gTk1CTV9BTElHTihuaS0+bWFwcGluZ190YWJsZV9zaXplLAorCQkJCQkgIG5pLT5sb3dlci53cml0ZXNpemUpOworCisJbmktPmluZm9fdGFibGVfc3BhcmVfYmxvY2tzID0gbm1ibV9nZXRfc3BhcmVfYmxvY2tfY291bnQoCisJCXNpemUyYmxrKG5pLCBuaS0+aW5mb190YWJsZV9zaXplKSk7CisKKwkvKiBBc3NpZ24gbWVtb3J5IHRvIG1lbWJlcnMgKi8KKwlwdHIgPSAodWludHB0cl90KW5pICsgc2l6ZW9mKCpuaSk7CisKKwluaS0+aW5mb190YWJsZV9jYWNoZSA9ICh2b2lkICopcHRyOworCXB0ciArPSBuaS0+aW5mb190YWJsZV9zaXplOworCisJbmktPmJsb2NrX3N0YXRlID0gKHZvaWQgKilwdHI7CisJcHRyICs9IG5pLT5zdGF0ZV90YWJsZV9zaXplOworCisJbmktPmJsb2NrX21hcHBpbmcgPSAodm9pZCAqKXB0cjsKKwlwdHIgKz0gbmktPm1hcHBpbmdfdGFibGVfc2l6ZTsKKworCW5pLT5wYWdlX2NhY2hlID0gKHVpbnQ4X3QgKilwdHI7CisKKwkvKiBJbml0aWFsaXplIGJsb2NrIHN0YXRlIHRhYmxlICovCisJbmktPmJsb2NrX3N0YXRlX2NoYW5nZWQgPSAwOworCW1lbXNldChuaS0+YmxvY2tfc3RhdGUsIDB4ZmYsIG5pLT5zdGF0ZV90YWJsZV9zaXplKTsKKworCS8qIEluaXRpYWxpemUgYmxvY2sgbWFwcGluZyB0YWJsZSAqLworCW5pLT5ibG9ja19tYXBwaW5nX2NoYW5nZWQgPSAwOworfQorCisvKgorICogbm1ibV9hdHRhY2ggLSBBdHRhY2ggdG8gYSBsb3dlciBkZXZpY2UKKyAqIEBubGQ6IE5NQk0gbG93ZXIgZGV2aWNlIHN0cnVjdHVyZQorICogQG5pOiBOTUJNIGluc3RhbmNlIHN0cnVjdHVyZQorICovCitpbnQgbm1ibV9hdHRhY2goc3RydWN0IG5tYm1fbG93ZXJfZGV2aWNlICpubGQsIHN0cnVjdCBubWJtX2luc3RhbmNlICpuaSkKK3sKKwlib29sIHN1Y2Nlc3M7CisKKwlpZiAoIW5sZCB8fCAhbmkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogU2V0IGRlZmF1bHQgbG9nIGxldmVsICovCisJbmktPmxvZ19kaXNwbGF5X2xldmVsID0gTk1CTV9ERUZBVUxUX0xPR19MRVZFTDsKKworCS8qIENoZWNrIGxvd2VyIG1lbWJlcnMgKi8KKwlzdWNjZXNzID0gbm1ibV9jaGVja19sb3dlcl9tZW1iZXJzKG5sZCk7CisJaWYgKCFzdWNjZXNzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIEluaXRpYWxpemUgTk1CTSBpbnN0YW5jZSAqLworCW1lbWNweSgmbmktPmxvd2VyLCBubGQsIHNpemVvZihzdHJ1Y3Qgbm1ibV9sb3dlcl9kZXZpY2UpKTsKKwlubWJtX2luaXRfc3RydWN0dXJlKG5pKTsKKworCXN1Y2Nlc3MgPSBubWJtX2ZpbmRfc2lnbmF0dXJlKG5pLCAmbmktPnNpZ25hdHVyZSwgJm5pLT5zaWduYXR1cmVfYmEpOworCWlmICghc3VjY2VzcykgeworCQlpZiAoIShubGQtPmZsYWdzICYgTk1CTV9GX0NSRUFURSkpIHsKKwkJCW5sb2dfZXJyKG5pLCAiU2lnbmF0dXJlIG5vdCBmb3VuZFxuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCisJCXN1Y2Nlc3MgPSBubWJtX2NyZWF0ZV9uZXcobmkpOworCQlpZiAoIXN1Y2Nlc3MpCisJCQlyZXR1cm4gLUVOT0RFVjsKKworCQlyZXR1cm4gMDsKKwl9CisKKwlubG9nX2luZm8obmksICJTaWduYXR1cmUgZm91bmQgYXQgYmxvY2sgJXUgWzB4JTA4bGx4XVxuIiwKKwkJIG5pLT5zaWduYXR1cmVfYmEsIGJhMmFkZHIobmksIG5pLT5zaWduYXR1cmVfYmEpKTsKKwlubWJtX21hcmtfYmxvY2tfY29sb3Jfc2lnbmF0dXJlKG5pLCBuaS0+c2lnbmF0dXJlX2JhKTsKKworCWlmIChuaS0+c2lnbmF0dXJlLmhlYWRlci52ZXJzaW9uICE9IE5NQk1fVkVSKSB7CisJCW5sb2dfZXJyKG5pLCAiTk1CTSB2ZXJzaW9uICV1LiV1IGlzIG5vdCBzdXBwb3J0ZWRcbiIsCisJCQlOTUJNX1ZFUlNJT05fTUFKT1JfR0VUKG5pLT5zaWduYXR1cmUuaGVhZGVyLnZlcnNpb24pLAorCQkJTk1CTV9WRVJTSU9OX01JTk9SX0dFVChuaS0+c2lnbmF0dXJlLmhlYWRlci52ZXJzaW9uKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChuaS0+c2lnbmF0dXJlLm5hbmRfc2l6ZSAhPSBubGQtPnNpemUgfHwKKwkgICAgbmktPnNpZ25hdHVyZS5ibG9ja19zaXplICE9IG5sZC0+ZXJhc2VzaXplIHx8CisJICAgIG5pLT5zaWduYXR1cmUucGFnZV9zaXplICE9IG5sZC0+d3JpdGVzaXplIHx8CisJICAgIG5pLT5zaWduYXR1cmUuc3BhcmVfc2l6ZSAhPSBubGQtPm9vYnNpemUpIHsKKwkJbmxvZ19lcnIobmksICJOTUJNIGNvbmZpZ3VyYXRpb24gbWlzbWF0Y2hcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzdWNjZXNzID0gbm1ibV9sb2FkX2V4aXN0aW5nKG5pKTsKKwlpZiAoIXN1Y2Nlc3MpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBubWJtX2RldGFjaCAtIERldGFjaCBmcm9tIGEgbG93ZXIgZGV2aWNlLCBhbmQgc2F2ZSBhbGwgdGFibGVzCisgKiBAbmk6IE5NQk0gaW5zdGFuY2Ugc3RydWN0dXJlCisgKi8KK2ludCBubWJtX2RldGFjaChzdHJ1Y3Qgbm1ibV9pbnN0YW5jZSAqbmkpCit7CisJaWYgKCFuaSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIShuaS0+bG93ZXIuZmxhZ3MgJiBOTUJNX0ZfUkVBRF9PTkxZKSkKKwkJbm1ibV91cGRhdGVfaW5mb190YWJsZShuaSk7CisKKwlubWJtX21hcmtfYmxvY2tfY29sb3Jfbm9ybWFsKG5pLCAwLCBuaS0+YmxvY2tfY291bnQgLSAxKTsKKworCXJldHVybiAwOworfQorCisvKgorICogbm1ibV9lcmFzZV9sb2dpY19ibG9jayAtIEVyYXNlIGEgbG9naWMgYmxvY2sKKyAqIEBuaTogTk1CTSBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqIEBubWJtX2VyYXNlX2xvZ2ljX2Jsb2NrOiBsb2dpYyBibG9jayBhZGRyZXNzCisgKgorICogTG9naWMgYmxvY2sgd2lsbCBiZSBtYXBwZWQgdG8gcGh5c2ljYWwgYmxvY2sgYmVmb3JlIGVyYXNpbmcuCisgKiBCYWQgYmxvY2sgZm91bmQgZHVyaW5nIGVyYXNpbmggd2lsbCBiZSByZW1hcHBlZCB0byBhIGdvb2QgYmxvY2sgaWYgdGhlcmUgaXMKKyAqIHN0aWxsIGF0IGxlYXN0IG9uZSBnb29kIHNwYXJlIGJsb2NrIGF2YWlsYWJsZS4KKyAqLworc3RhdGljIGludCBubWJtX2VyYXNlX2xvZ2ljX2Jsb2NrKHN0cnVjdCBubWJtX2luc3RhbmNlICpuaSwgdWludDMyX3QgYmxvY2tfYWRkcikKK3sKKwl1aW50MzJfdCBwYjsKKwlib29sIHN1Y2Nlc3M7CisKK3JldHJ5OgorCS8qIE1hcCBsb2dpYyBibG9jayB0byBwaHlzaWNhbCBibG9jayAqLworCXBiID0gbmktPmJsb2NrX21hcHBpbmdbYmxvY2tfYWRkcl07CisKKwkvKiBXaGV0aGVyIHRoZSBsb2dpYyBibG9jayBpcyBnb29kIChoYXMgdmFsaWQgbWFwcGluZykgKi8KKwlpZiAoKGludDMyX3QpcGIgPCAwKSB7CisJCW5sb2dfZGVidWcobmksICJMb2dpYyBibG9jayAldSBpcyBhIGJhZCBibG9ja1xuIiwgYmxvY2tfYWRkcik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIFJlbWFwIGxvZ2ljIGJsb2NrIGlmIGN1cnJlbnQgcGh5c2ljYWwgYmxvY2sgaXMgYSBiYWQgYmxvY2sgKi8KKwlpZiAobm1ibV9nZXRfYmxvY2tfc3RhdGUobmksIHBiKSA9PSBCTE9DS19TVF9CQUQgfHwKKwkgICAgbm1ibV9nZXRfYmxvY2tfc3RhdGUobmksIHBiKSA9PSBCTE9DS19TVF9ORUVEX1JFTUFQKQorCQlnb3RvIHJlbWFwX2xvZ2ljX2Jsb2NrOworCisJLyogSW5zdXJhbmNlIHRvIGRldGVjdCB1bmV4cGVjdGVkIGJhZCBibG9jayBtYXJrZWQgYnkgdXNlciAqLworCWlmIChubWJtX2NoZWNrX2JhZF9waHlzX2Jsb2NrKG5pLCBwYikpIHsKKwkJbmxvZ193YXJuKG5pLCAiRm91bmQgdW5leHBlY3RlZCBiYWQgYmxvY2sgcG9zc2libHkgbWFya2VkIGJ5IHVzZXJcbiIpOworCQlubWJtX3NldF9ibG9ja19zdGF0ZShuaSwgcGIsIEJMT0NLX1NUX0JBRCk7CisJCWdvdG8gcmVtYXBfbG9naWNfYmxvY2s7CisJfQorCisJc3VjY2VzcyA9IG5tYm1fZXJhc2VfYmxvY2tfYW5kX2NoZWNrKG5pLCBwYik7CisJaWYgKHN1Y2Nlc3MpCisJCXJldHVybiAwOworCisJLyogTWFyayBiYWQgYmxvY2sgKi8KKwlubWJtX21hcmtfcGh5c19iYWRfYmxvY2sobmksIHBiKTsKKwlubWJtX3NldF9ibG9ja19zdGF0ZShuaSwgcGIsIEJMT0NLX1NUX0JBRCk7CisKK3JlbWFwX2xvZ2ljX2Jsb2NrOgorCS8qIFRyeSB0byBhc3NpZ24gYSBuZXcgYmxvY2sgKi8KKwlzdWNjZXNzID0gbm1ibV9tYXBfYmxvY2sobmksIGJsb2NrX2FkZHIpOworCWlmICghc3VjY2VzcykgeworCQkvKiBNYXJrIGxvZ2ljIGJsb2NrIHVudXNhYmxlLCBhbmQgdXBkYXRlIGluZm8gdGFibGUgKi8KKwkJbmktPmJsb2NrX21hcHBpbmdbYmxvY2tfYWRkcl0gPSAtMTsKKwkJaWYgKG5tYm1fZ2V0X2Jsb2NrX3N0YXRlKG5pLCBwYikgIT0gQkxPQ0tfU1RfTkVFRF9SRU1BUCkKKwkJCW5tYm1fc2V0X2Jsb2NrX3N0YXRlKG5pLCBwYiwgQkxPQ0tfU1RfQkFEKTsKKwkJbm1ibV91cGRhdGVfaW5mb190YWJsZShuaSk7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIFVwZGF0ZSBpbmZvIHRhYmxlIGJlZm9yZSBlcmFzaW5nICovCisJaWYgKG5tYm1fZ2V0X2Jsb2NrX3N0YXRlKG5pLCBwYikgIT0gQkxPQ0tfU1RfTkVFRF9SRU1BUCkKKwkJbm1ibV9zZXRfYmxvY2tfc3RhdGUobmksIHBiLCBCTE9DS19TVF9CQUQpOworCW5tYm1fdXBkYXRlX2luZm9fdGFibGUobmkpOworCisJZ290byByZXRyeTsKK30KKworLyoKKyAqIG5tYm1fZXJhc2VfYmxvY2tfcmFuZ2UgLSBFcmFzZSBsb2dpYyBibG9ja3MKKyAqIEBuaTogTk1CTSBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqIEBhZGRyOiBsb2dpYyBsaW5lYXIgYWRkcmVzcworICogQHNpemU6IGVyYXNlIHJhbmdlCisgKiBAZmFpbGVkX2FkZHI6IHJldHVybiBmYWlsZWQgYmxvY2sgYWRkcmVzcyBpZiBlcnJvciBvY2N1cnMKKyAqLworaW50IG5tYm1fZXJhc2VfYmxvY2tfcmFuZ2Uoc3RydWN0IG5tYm1faW5zdGFuY2UgKm5pLCB1aW50NjRfdCBhZGRyLAorCQkJICAgdWludDY0X3Qgc2l6ZSwgdWludDY0X3QgKmZhaWxlZF9hZGRyKQoreworCXVpbnQzMl90IHN0YXJ0X2JhLCBlbmRfYmE7CisJaW50IHJldDsKKworCWlmICghbmkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogU2FuaXR5IGNoZWNrICovCisJaWYgKG5pLT5wcm90ZWN0ZWQgfHwgKG5pLT5sb3dlci5mbGFncyAmIE5NQk1fRl9SRUFEX09OTFkpKSB7CisJCW5sb2dfZGVidWcobmksICJEZXZpY2UgaXMgZm9yY2VkIHJlYWQtb25seVxuIik7CisJCXJldHVybiAtRVJPRlM7CisJfQorCisJaWYgKGFkZHIgPj0gYmEyYWRkcihuaSwgbmktPmRhdGFfYmxvY2tfY291bnQpKSB7CisJCW5sb2dfZXJyKG5pLCAiQWRkcmVzcyAweCVsbHggaXMgaW52YWxpZFxuIiwgYWRkcik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChhZGRyICsgc2l6ZSA+IGJhMmFkZHIobmksIG5pLT5kYXRhX2Jsb2NrX2NvdW50KSkgeworCQlubG9nX2VycihuaSwgIkVyYXNlIHJhbmdlIDB4bGx4dSBpcyB0b28gbGFyZ2VcbiIsIHNpemUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIXNpemUpIHsKKwkJbmxvZ193YXJuKG5pLCAiTm8gYmxvY2tzIHRvIGJlIGVyYXNlZFxuIik7CisJCXJldHVybiAwOworCX0KKworCXN0YXJ0X2JhID0gYWRkcjJiYShuaSwgYWRkcik7CisJZW5kX2JhID0gYWRkcjJiYShuaSwgYWRkciArIHNpemUgLSAxKTsKKworCXdoaWxlIChzdGFydF9iYSA8PSBlbmRfYmEpIHsKKwkJV0FUQ0hET0dfUkVTRVQoKTsKKworCQlyZXQgPSBubWJtX2VyYXNlX2xvZ2ljX2Jsb2NrKG5pLCBzdGFydF9iYSk7CisJCWlmIChyZXQpIHsKKwkJCWlmIChmYWlsZWRfYWRkcikKKwkJCQkqZmFpbGVkX2FkZHIgPSBiYTJhZGRyKG5pLCBzdGFydF9iYSk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJc3RhcnRfYmErKzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIG5tYm1fcmVhZF9sb2dpY19wYWdlIC0gUmVhZCBwYWdlIGJhc2VkIG9uIGxvZ2ljIGFkZHJlc3MKKyAqIEBuaTogTk1CTSBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqIEBhZGRyOiBsb2dpYyBsaW5lYXIgYWRkcmVzcworICogQGRhdGE6IGJ1ZmZlciB0byBzdG9yZSBtYWluIGRhdGEuIG9wdGlvbmFsLgorICogQG9vYjogYnVmZmVyIHRvIHN0b3JlIG9vYiBkYXRhLiBvcHRpb25hbC4KKyAqIEBtb2RlOiByZWFkIG1vZGUKKyAqCisgKiBSZXR1cm4gMCBmb3Igc3VjY2VzcywgcG9zaXRpdmUgdmFsdWUgZm9yIGNvcnJlY3RlZCBiaXRmbGlwIGNvdW50LAorICogLUVCQURNU0cgZm9yIGVjYyBlcnJvciwgb3RoZXIgbmVnYXRpdmUgdmFsdWVzIGZvciBvdGhlciBlcnJvcnMKKyAqLworc3RhdGljIGludCBubWJtX3JlYWRfbG9naWNfcGFnZShzdHJ1Y3Qgbm1ibV9pbnN0YW5jZSAqbmksIHVpbnQ2NF90IGFkZHIsCisJCQkJdm9pZCAqZGF0YSwgdm9pZCAqb29iLCBlbnVtIG5tYm1fb29iX21vZGUgbW9kZSkKK3sKKwl1aW50MzJfdCBsYiwgcGIsIG9mZnNldDsKKwl1aW50NjRfdCBwYWRkcjsKKworCS8qIEV4dHJhY3QgYmxvY2sgYWRkcmVzcyBhbmQgaW4tYmxvY2sgb2Zmc2V0ICovCisJbGIgPSBhZGRyMmJhKG5pLCBhZGRyKTsKKwlvZmZzZXQgPSBhZGRyICYgbmktPmVyYXNlc2l6ZV9tYXNrOworCisJLyogTWFwIGxvZ2ljIGJsb2NrIHRvIHBoeXNpY2FsIGJsb2NrICovCisJcGIgPSBuaS0+YmxvY2tfbWFwcGluZ1tsYl07CisKKwkvKiBXaGV0aGVyIHRoZSBsb2dpYyBibG9jayBpcyBnb29kIChoYXMgdmFsaWQgbWFwcGluZykgKi8KKwlpZiAoKGludDMyX3QpcGIgPCAwKSB7CisJCW5sb2dfZGVidWcobmksICJMb2dpYyBibG9jayAldSBpcyBhIGJhZCBibG9ja1xuIiwgbGIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBGYWlsIGlmIHBoeXNpY2FsIGJsb2NrIGlzIG1hcmtlZCBiYWQgKi8KKwlpZiAobm1ibV9nZXRfYmxvY2tfc3RhdGUobmksIHBiKSA9PSBCTE9DS19TVF9CQUQpCisJCXJldHVybiAtRUlPOworCisJLyogQXNzZW1ibGUgbmV3IGFkZHJlc3MgKi8KKwlwYWRkciA9IGJhMmFkZHIobmksIHBiKSArIG9mZnNldDsKKworCXJldHVybiBubWJtX3JlYWRfcGh5c19wYWdlKG5pLCBwYWRkciwgZGF0YSwgb29iLCBtb2RlKTsKK30KKworLyoKKyAqIG5tYm1fcmVhZF9zaW5nbGVfcGFnZSAtIFJlYWQgb25lIHBhZ2UgYmFzZWQgb24gbG9naWMgYWRkcmVzcworICogQG5pOiBOTUJNIGluc3RhbmNlIHN0cnVjdHVyZQorICogQGFkZHI6IGxvZ2ljIGxpbmVhciBhZGRyZXNzCisgKiBAZGF0YTogYnVmZmVyIHRvIHN0b3JlIG1haW4gZGF0YS4gb3B0aW9uYWwuCisgKiBAb29iOiBidWZmZXIgdG8gc3RvcmUgb29iIGRhdGEuIG9wdGlvbmFsLgorICogQG1vZGU6IHJlYWQgbW9kZQorICoKKyAqIFJldHVybiAwIGZvciBzdWNjZXNzLCBwb3NpdGl2ZSB2YWx1ZSBmb3IgY29ycmVjdGVkIGJpdGZsaXAgY291bnQsCisgKiAtRUJBRE1TRyBmb3IgZWNjIGVycm9yLCBvdGhlciBuZWdhdGl2ZSB2YWx1ZXMgZm9yIG90aGVyIGVycm9ycworICovCitpbnQgbm1ibV9yZWFkX3NpbmdsZV9wYWdlKHN0cnVjdCBubWJtX2luc3RhbmNlICpuaSwgdWludDY0X3QgYWRkciwgdm9pZCAqZGF0YSwKKwkJCSAgdm9pZCAqb29iLCBlbnVtIG5tYm1fb29iX21vZGUgbW9kZSkKK3sKKwlpZiAoIW5pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFNhbml0eSBjaGVjayAqLworCWlmIChuaS0+cHJvdGVjdGVkKSB7CisJCW5sb2dfZGVidWcobmksICJEZXZpY2UgaXMgZm9yY2VkIHJlYWQtb25seVxuIik7CisJCXJldHVybiAtRVJPRlM7CisJfQorCisJaWYgKGFkZHIgPj0gYmEyYWRkcihuaSwgbmktPmRhdGFfYmxvY2tfY291bnQpKSB7CisJCW5sb2dfZXJyKG5pLCAiQWRkcmVzcyAweCVsbHggaXMgaW52YWxpZFxuIiwgYWRkcik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBubWJtX3JlYWRfbG9naWNfcGFnZShuaSwgYWRkciwgZGF0YSwgb29iLCBtb2RlKTsKK30KKworLyoKKyAqIG5tYm1fcmVhZF9yYW5nZSAtIFJlYWQgZGF0YSB3aXRob3V0IG9vYgorICogQG5pOiBOTUJNIGluc3RhbmNlIHN0cnVjdHVyZQorICogQGFkZHI6IGxvZ2ljIGxpbmVhciBhZGRyZXNzCisgKiBAc2l6ZTogZGF0YSBzaXplIHRvIHJlYWQKKyAqIEBkYXRhOiBidWZmZXIgdG8gc3RvcmUgbWFpbiBkYXRhIHRvIGJlIHJlYWQKKyAqIEBtb2RlOiByZWFkIG1vZGUKKyAqIEByZXRsZW46IHJldHVybiBhY3R1YWwgZGF0YSBzaXplIHJlYWQKKyAqCisgKiBSZXR1cm4gMCBmb3Igc3VjY2VzcywgcG9zaXRpdmUgdmFsdWUgZm9yIGNvcnJlY3RlZCBiaXRmbGlwIGNvdW50LAorICogLUVCQURNU0cgZm9yIGVjYyBlcnJvciwgb3RoZXIgbmVnYXRpdmUgdmFsdWVzIGZvciBvdGhlciBlcnJvcnMKKyAqLworaW50IG5tYm1fcmVhZF9yYW5nZShzdHJ1Y3Qgbm1ibV9pbnN0YW5jZSAqbmksIHVpbnQ2NF90IGFkZHIsIHNpemVfdCBzaXplLAorCQkgICAgdm9pZCAqZGF0YSwgZW51bSBubWJtX29vYl9tb2RlIG1vZGUsIHNpemVfdCAqcmV0bGVuKQoreworCXVpbnQ2NF90IG9mZiA9IGFkZHI7CisJdWludDhfdCAqcHRyID0gZGF0YTsKKwlzaXplX3Qgc2l6ZXJlbWFpbiA9IHNpemUsIGNodW5rc2l6ZSwgbGVhZGluZzsKKwlib29sIGhhc19lY2NfZXJyID0gZmFsc2U7CisJaW50IHJldCwgbWF4X2JpdGZsaXBzID0gMDsKKworCWlmICghbmkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogU2FuaXR5IGNoZWNrICovCisJaWYgKG5pLT5wcm90ZWN0ZWQpIHsKKwkJbmxvZ19kZWJ1ZyhuaSwgIkRldmljZSBpcyBmb3JjZWQgcmVhZC1vbmx5XG4iKTsKKwkJcmV0dXJuIC1FUk9GUzsKKwl9CisKKwlpZiAoYWRkciA+PSBiYTJhZGRyKG5pLCBuaS0+ZGF0YV9ibG9ja19jb3VudCkpIHsKKwkJbmxvZ19lcnIobmksICJBZGRyZXNzIDB4JWxseCBpcyBpbnZhbGlkXG4iLCBhZGRyKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGFkZHIgKyBzaXplID4gYmEyYWRkcihuaSwgbmktPmRhdGFfYmxvY2tfY291bnQpKSB7CisJCW5sb2dfZXJyKG5pLCAiUmVhZCByYW5nZSAweCVsbHggaXMgdG9vIGxhcmdlXG4iLCBzaXplKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFzaXplKSB7CisJCW5sb2dfd2FybihuaSwgIk5vIGRhdGEgdG8gYmUgcmVhZFxuIik7CisJCXJldHVybiAwOworCX0KKworCXdoaWxlIChzaXplcmVtYWluKSB7CisJCVdBVENIRE9HX1JFU0VUKCk7CisKKwkJbGVhZGluZyA9IG9mZiAmIG5pLT53cml0ZXNpemVfbWFzazsKKwkJY2h1bmtzaXplID0gbmktPmxvd2VyLndyaXRlc2l6ZSAtIGxlYWRpbmc7CisJCWlmIChjaHVua3NpemUgPiBzaXplcmVtYWluKQorCQkJY2h1bmtzaXplID0gc2l6ZXJlbWFpbjsKKworCQlpZiAoY2h1bmtzaXplID09IG5pLT5sb3dlci53cml0ZXNpemUpIHsKKwkJCXJldCA9IG5tYm1fcmVhZF9sb2dpY19wYWdlKG5pLCBvZmYgLSBsZWFkaW5nLCBwdHIsCisJCQkJCQkJTlVMTCwgbW9kZSk7CisJCQlpZiAocmV0IDwgMCAmJiByZXQgIT0gLUVCQURNU0cpCisJCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQlyZXQgPSBubWJtX3JlYWRfbG9naWNfcGFnZShuaSwgb2ZmIC0gbGVhZGluZywKKwkJCQkJCQluaS0+cGFnZV9jYWNoZSwgTlVMTCwKKwkJCQkJCQltb2RlKTsKKwkJCWlmIChyZXQgPCAwICYmIHJldCAhPSAtRUJBRE1TRykKKwkJCQlicmVhazsKKworCQkJbWVtY3B5KHB0ciwgbmktPnBhZ2VfY2FjaGUgKyBsZWFkaW5nLCBjaHVua3NpemUpOworCQl9CisKKwkJaWYgKHJldCA9PSAtRUJBRE1TRykKKwkJCWhhc19lY2NfZXJyID0gdHJ1ZTsKKworCQlpZiAocmV0ID4gbWF4X2JpdGZsaXBzKQorCQkJbWF4X2JpdGZsaXBzID0gcmV0OworCisJCW9mZiArPSBjaHVua3NpemU7CisJCXB0ciArPSBjaHVua3NpemU7CisJCXNpemVyZW1haW4gLT0gY2h1bmtzaXplOworCX0KKworCWlmIChyZXRsZW4pCisJCSpyZXRsZW4gPSBzaXplIC0gc2l6ZXJlbWFpbjsKKworCWlmIChyZXQgPCAwICYmIHJldCAhPSAtRUJBRE1TRykKKwkJcmV0dXJuIHJldDsKKworCWlmIChoYXNfZWNjX2VycikKKwkJcmV0dXJuIC1FQkFETVNHOworCisJcmV0dXJuIG1heF9iaXRmbGlwczsKK30KKworLyoKKyAqIG5tYm1fd3JpdGVfbG9naWNfcGFnZSAtIFJlYWQgcGFnZSBiYXNlZCBvbiBsb2dpYyBhZGRyZXNzCisgKiBAbmk6IE5NQk0gaW5zdGFuY2Ugc3RydWN0dXJlCisgKiBAYWRkcjogbG9naWMgbGluZWFyIGFkZHJlc3MKKyAqIEBkYXRhOiBidWZmZXIgY29udGFpbnMgbWFpbiBkYXRhLiBvcHRpb25hbC4KKyAqIEBvb2I6IGJ1ZmZlciBjb250YWlucyBvb2IgZGF0YS4gb3B0aW9uYWwuCisgKiBAbW9kZTogd3JpdGUgbW9kZQorICovCitzdGF0aWMgaW50IG5tYm1fd3JpdGVfbG9naWNfcGFnZShzdHJ1Y3Qgbm1ibV9pbnN0YW5jZSAqbmksIHVpbnQ2NF90IGFkZHIsCisJCQkJICBjb25zdCB2b2lkICpkYXRhLCBjb25zdCB2b2lkICpvb2IsCisJCQkJICBlbnVtIG5tYm1fb29iX21vZGUgbW9kZSkKK3sKKwl1aW50MzJfdCBsYiwgcGIsIG9mZnNldDsKKwl1aW50NjRfdCBwYWRkcjsKKwlib29sIHN1Y2Nlc3M7CisKKwkvKiBFeHRyYWN0IGJsb2NrIGFkZHJlc3MgYW5kIGluLWJsb2NrIG9mZnNldCAqLworCWxiID0gYWRkcjJiYShuaSwgYWRkcik7CisJb2Zmc2V0ID0gYWRkciAmIG5pLT5lcmFzZXNpemVfbWFzazsKKworCS8qIE1hcCBsb2dpYyBibG9jayB0byBwaHlzaWNhbCBibG9jayAqLworCXBiID0gbmktPmJsb2NrX21hcHBpbmdbbGJdOworCisJLyogV2hldGhlciB0aGUgbG9naWMgYmxvY2sgaXMgZ29vZCAoaGFzIHZhbGlkIG1hcHBpbmcpICovCisJaWYgKChpbnQzMl90KXBiIDwgMCkgeworCQlubG9nX2RlYnVnKG5pLCAiTG9naWMgYmxvY2sgJXUgaXMgYSBiYWQgYmxvY2tcbiIsIGxiKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogRmFpbCBpZiBwaHlzaWNhbCBibG9jayBpcyBtYXJrZWQgYmFkICovCisJaWYgKG5tYm1fZ2V0X2Jsb2NrX3N0YXRlKG5pLCBwYikgPT0gQkxPQ0tfU1RfQkFEKQorCQlyZXR1cm4gLUVJTzsKKworCS8qIEFzc2VtYmxlIG5ldyBhZGRyZXNzICovCisJcGFkZHIgPSBiYTJhZGRyKG5pLCBwYikgKyBvZmZzZXQ7CisKKwlzdWNjZXNzID0gbm1ibV93cml0ZV9waHlzX3BhZ2UobmksIHBhZGRyLCBkYXRhLCBvb2IsIG1vZGUpOworCWlmIChzdWNjZXNzKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogRG8gbm90IHJlbWFwIGJhZCBibG9jayBoZXJlLiBKdXN0IG1hcmsgdGhpcyBibG9jayBpbiBzdGF0ZSB0YWJsZS4KKwkgKiBSZW1hcCB0aGlzIGJsb2NrIG9uIGVyYXNpbmcuCisJICovCisJbm1ibV9zZXRfYmxvY2tfc3RhdGUobmksIHBiLCBCTE9DS19TVF9ORUVEX1JFTUFQKTsKKwlubWJtX3VwZGF0ZV9pbmZvX3RhYmxlKG5pKTsKKworCXJldHVybiAtRUlPOworfQorCisvKgorICogbm1ibV93cml0ZV9zaW5nbGVfcGFnZSAtIFdyaXRlIG9uZSBwYWdlIGJhc2VkIG9uIGxvZ2ljIGFkZHJlc3MKKyAqIEBuaTogTk1CTSBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqIEBhZGRyOiBsb2dpYyBsaW5lYXIgYWRkcmVzcworICogQGRhdGE6IGJ1ZmZlciBjb250YWlucyBtYWluIGRhdGEuIG9wdGlvbmFsLgorICogQG9vYjogYnVmZmVyIGNvbnRhaW5zIG9vYiBkYXRhLiBvcHRpb25hbC4KKyAqIEBtb2RlOiB3cml0ZSBtb2RlCisgKi8KK2ludCBubWJtX3dyaXRlX3NpbmdsZV9wYWdlKHN0cnVjdCBubWJtX2luc3RhbmNlICpuaSwgdWludDY0X3QgYWRkciwKKwkJCSAgIGNvbnN0IHZvaWQgKmRhdGEsIGNvbnN0IHZvaWQgKm9vYiwKKwkJCSAgIGVudW0gbm1ibV9vb2JfbW9kZSBtb2RlKQoreworCWlmICghbmkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogU2FuaXR5IGNoZWNrICovCisJaWYgKG5pLT5wcm90ZWN0ZWQgfHwgKG5pLT5sb3dlci5mbGFncyAmIE5NQk1fRl9SRUFEX09OTFkpKSB7CisJCW5sb2dfZGVidWcobmksICJEZXZpY2UgaXMgZm9yY2VkIHJlYWQtb25seVxuIik7CisJCXJldHVybiAtRVJPRlM7CisJfQorCisJaWYgKGFkZHIgPj0gYmEyYWRkcihuaSwgbmktPmRhdGFfYmxvY2tfY291bnQpKSB7CisJCW5sb2dfZXJyKG5pLCAiQWRkcmVzcyAweCVsbHggaXMgaW52YWxpZFxuIiwgYWRkcik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBubWJtX3dyaXRlX2xvZ2ljX3BhZ2UobmksIGFkZHIsIGRhdGEsIG9vYiwgbW9kZSk7Cit9CisKKy8qCisgKiBubWJtX3dyaXRlX3JhbmdlIC0gV3JpdGUgZGF0YSB3aXRob3V0IG9vYgorICogQG5pOiBOTUJNIGluc3RhbmNlIHN0cnVjdHVyZQorICogQGFkZHI6IGxvZ2ljIGxpbmVhciBhZGRyZXNzCisgKiBAc2l6ZTogZGF0YSBzaXplIHRvIHdyaXRlCisgKiBAZGF0YTogYnVmZmVyIGNvbnRhaW5zIGRhdGEgdG8gYmUgd3JpdHRlbgorICogQG1vZGU6IHdyaXRlIG1vZGUKKyAqIEByZXRsZW46IHJldHVybiBhY3R1YWwgZGF0YSBzaXplIHdyaXR0ZW4KKyAqLworaW50IG5tYm1fd3JpdGVfcmFuZ2Uoc3RydWN0IG5tYm1faW5zdGFuY2UgKm5pLCB1aW50NjRfdCBhZGRyLCBzaXplX3Qgc2l6ZSwKKwkJICAgICBjb25zdCB2b2lkICpkYXRhLCBlbnVtIG5tYm1fb29iX21vZGUgbW9kZSwKKwkJICAgICBzaXplX3QgKnJldGxlbikKK3sKKwl1aW50NjRfdCBvZmYgPSBhZGRyOworCWNvbnN0IHVpbnQ4X3QgKnB0ciA9IGRhdGE7CisJc2l6ZV90IHNpemVyZW1haW4gPSBzaXplLCBjaHVua3NpemUsIGxlYWRpbmc7CisJaW50IHJldDsKKworCWlmICghbmkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogU2FuaXR5IGNoZWNrICovCisJaWYgKG5pLT5wcm90ZWN0ZWQgfHwgKG5pLT5sb3dlci5mbGFncyAmIE5NQk1fRl9SRUFEX09OTFkpKSB7CisJCW5sb2dfZGVidWcobmksICJEZXZpY2UgaXMgZm9yY2VkIHJlYWQtb25seVxuIik7CisJCXJldHVybiAtRVJPRlM7CisJfQorCisJaWYgKGFkZHIgPj0gYmEyYWRkcihuaSwgbmktPmRhdGFfYmxvY2tfY291bnQpKSB7CisJCW5sb2dfZXJyKG5pLCAiQWRkcmVzcyAweCVsbHggaXMgaW52YWxpZFxuIiwgYWRkcik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChhZGRyICsgc2l6ZSA+IGJhMmFkZHIobmksIG5pLT5kYXRhX2Jsb2NrX2NvdW50KSkgeworCQlubG9nX2VycihuaSwgIldyaXRlIHNpemUgMHglenggaXMgdG9vIGxhcmdlXG4iLCBzaXplKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFzaXplKSB7CisJCW5sb2dfd2FybihuaSwgIk5vIGRhdGEgdG8gYmUgd3JpdHRlblxuIik7CisJCXJldHVybiAwOworCX0KKworCXdoaWxlIChzaXplcmVtYWluKSB7CisJCVdBVENIRE9HX1JFU0VUKCk7CisKKwkJbGVhZGluZyA9IG9mZiAmIG5pLT53cml0ZXNpemVfbWFzazsKKwkJY2h1bmtzaXplID0gbmktPmxvd2VyLndyaXRlc2l6ZSAtIGxlYWRpbmc7CisJCWlmIChjaHVua3NpemUgPiBzaXplcmVtYWluKQorCQkJY2h1bmtzaXplID0gc2l6ZXJlbWFpbjsKKworCQlpZiAoY2h1bmtzaXplID09IG5pLT5sb3dlci53cml0ZXNpemUpIHsKKwkJCXJldCA9IG5tYm1fd3JpdGVfbG9naWNfcGFnZShuaSwgb2ZmIC0gbGVhZGluZywgcHRyLAorCQkJCQkJCSBOVUxMLCBtb2RlKTsKKwkJCWlmIChyZXQpCisJCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQltZW1zZXQobmktPnBhZ2VfY2FjaGUsIDB4ZmYsIGxlYWRpbmcpOworCQkJbWVtY3B5KG5pLT5wYWdlX2NhY2hlICsgbGVhZGluZywgcHRyLCBjaHVua3NpemUpOworCisJCQlyZXQgPSBubWJtX3dyaXRlX2xvZ2ljX3BhZ2UobmksIG9mZiAtIGxlYWRpbmcsCisJCQkJCQkJIG5pLT5wYWdlX2NhY2hlLCBOVUxMLAorCQkJCQkJCSBtb2RlKTsKKwkJCWlmIChyZXQpCisJCQkJYnJlYWs7CisJCX0KKworCQlvZmYgKz0gY2h1bmtzaXplOworCQlwdHIgKz0gY2h1bmtzaXplOworCQlzaXplcmVtYWluIC09IGNodW5rc2l6ZTsKKwl9CisKKwlpZiAocmV0bGVuKQorCQkqcmV0bGVuID0gc2l6ZSAtIHNpemVyZW1haW47CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogbm1ibV9jaGVja19iYWRfYmxvY2sgLSBDaGVjayB3aGV0aGVyIGEgbG9naWMgYmxvY2sgaXMgdXNhYmxlCisgKiBAbmk6IE5NQk0gaW5zdGFuY2Ugc3RydWN0dXJlCisgKiBAYWRkcjogbG9naWMgbGluZWFyIGFkZHJlc3MKKyAqLworaW50IG5tYm1fY2hlY2tfYmFkX2Jsb2NrKHN0cnVjdCBubWJtX2luc3RhbmNlICpuaSwgdWludDY0X3QgYWRkcikKK3sKKwl1aW50MzJfdCBsYiwgcGI7CisKKwlpZiAoIW5pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhZGRyID49IGJhMmFkZHIobmksIG5pLT5kYXRhX2Jsb2NrX2NvdW50KSkgeworCQlubG9nX2VycihuaSwgIkFkZHJlc3MgMHglbGx4IGlzIGludmFsaWRcbiIsIGFkZHIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlsYiA9IGFkZHIyYmEobmksIGFkZHIpOworCisJLyogTWFwIGxvZ2ljIGJsb2NrIHRvIHBoeXNpY2FsIGJsb2NrICovCisJcGIgPSBuaS0+YmxvY2tfbWFwcGluZ1tsYl07CisKKwlpZiAoKGludDMyX3QpcGIgPCAwKQorCQlyZXR1cm4gMTsKKworCWlmIChubWJtX2dldF9ibG9ja19zdGF0ZShuaSwgcGIpID09IEJMT0NLX1NUX0JBRCkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIG5tYm1fbWFya19iYWRfYmxvY2sgLSBNYXJrIGEgbG9naWMgYmxvY2sgdW51c2FibGUKKyAqIEBuaTogTk1CTSBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqIEBhZGRyOiBsb2dpYyBsaW5lYXIgYWRkcmVzcworICovCitpbnQgbm1ibV9tYXJrX2JhZF9ibG9jayhzdHJ1Y3Qgbm1ibV9pbnN0YW5jZSAqbmksIHVpbnQ2NF90IGFkZHIpCit7CisJdWludDMyX3QgbGIsIHBiOworCisJaWYgKCFuaSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBTYW5pdHkgY2hlY2sgKi8KKwlpZiAobmktPnByb3RlY3RlZCB8fCAobmktPmxvd2VyLmZsYWdzICYgTk1CTV9GX1JFQURfT05MWSkpIHsKKwkJbmxvZ19kZWJ1ZyhuaSwgIkRldmljZSBpcyBmb3JjZWQgcmVhZC1vbmx5XG4iKTsKKwkJcmV0dXJuIC1FUk9GUzsKKwl9CisKKwlpZiAoYWRkciA+PSBiYTJhZGRyKG5pLCBuaS0+ZGF0YV9ibG9ja19jb3VudCkpIHsKKwkJbmxvZ19lcnIobmksICJBZGRyZXNzIDB4JWxseCBpcyBpbnZhbGlkXG4iLCBhZGRyKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbGIgPSBhZGRyMmJhKG5pLCBhZGRyKTsKKworCS8qIE1hcCBsb2dpYyBibG9jayB0byBwaHlzaWNhbCBibG9jayAqLworCXBiID0gbmktPmJsb2NrX21hcHBpbmdbbGJdOworCisJaWYgKChpbnQzMl90KXBiIDwgMCkKKwkJcmV0dXJuIDA7CisKKwluaS0+YmxvY2tfbWFwcGluZ1tsYl0gPSAtMTsKKwlubWJtX21hcmtfcGh5c19iYWRfYmxvY2sobmksIHBiKTsKKwlubWJtX3NldF9ibG9ja19zdGF0ZShuaSwgcGIsIEJMT0NLX1NUX0JBRCk7CisJbm1ibV91cGRhdGVfaW5mb190YWJsZShuaSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIG5tYm1fZ2V0X2F2YWlsX3NpemUgLSBHZXQgYXZhaWxhYmxlIHVzZXIgZGF0YSBzaXplCisgKiBAbmk6IE5NQk0gaW5zdGFuY2Ugc3RydWN0dXJlCisgKi8KK3VpbnQ2NF90IG5tYm1fZ2V0X2F2YWlsX3NpemUoc3RydWN0IG5tYm1faW5zdGFuY2UgKm5pKQoreworCWlmICghbmkpCisJCXJldHVybiAwOworCisJcmV0dXJuICh1aW50NjRfdCluaS0+ZGF0YV9ibG9ja19jb3VudCA8PCBuaS0+ZXJhc2VzaXplX3NoaWZ0OworfQorCisvKgorICogbm1ibV9nZXRfbG93ZXJfZGV2aWNlIC0gR2V0IGxvd2VyIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBuaTogTk1CTSBpbnN0YW5jZSBzdHJ1Y3R1cmUKKyAqIEBubGQ6IHBvaW50ZXIgdG8gaG9sZCB0aGUgZGF0YSBvZiBsb3dlciBkZXZpY2Ugc3RydWN0dXJlCisgKi8KK2ludCBubWJtX2dldF9sb3dlcl9kZXZpY2Uoc3RydWN0IG5tYm1faW5zdGFuY2UgKm5pLCBzdHJ1Y3Qgbm1ibV9sb3dlcl9kZXZpY2UgKm5sZCkKK3sKKwlpZiAoIW5pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChubGQpCisJCW1lbWNweShubGQsICZuaS0+bG93ZXIsIHNpemVvZigqbmxkKSk7CisKKwlyZXR1cm4gMDsKK30KKworI2luY2x1ZGUgIm5tYm0tZGVidWcuaW5sIgpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMtNS40L2RyaXZlcnMvbXRkL25tYm0vbm1ibS1kZWJ1Zy5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMtNS40L2RyaXZlcnMvbXRkL25tYm0vbm1ibS1kZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MjExODMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy01LjQvZHJpdmVycy9tdGQvbm1ibS9ubWJtLWRlYnVnLmgKQEAgLTAsMCArMSwyMCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8NCisvKg0KKyAqIENvcHlyaWdodCAoQykgMjAyMCBNZWRpYVRlayBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQorICoNCisgKiBEZWJ1ZyBhZGRvbnMgZm9yIE5BTkQgTWFwcGVkLWJsb2NrIE1hbmFnZW1lbnQgKE5NQk0pDQorICoNCisgKiBBdXRob3I6IFdlaWppZSBHYW8gPHdlaWppZS5nYW9AbWVkaWF0ZWsuY29tPg0KKyAqLw0KKw0KKyNpZm5kZWYgX05NQk1fREVCVUdfSF8NCisjZGVmaW5lIF9OTUJNX0RFQlVHX0hfDQorDQorI2RlZmluZSBubWJtX21hcmtfYmxvY2tfY29sb3Jfbm9ybWFsKG5pLCBzdGFydF9iYSwgZW5kX2JhKQ0KKyNkZWZpbmUgbm1ibV9tYXJrX2Jsb2NrX2NvbG9yX2JhZChuaSwgYmEpDQorI2RlZmluZSBubWJtX21hcmtfYmxvY2tfY29sb3JfbWdtdChuaSwgc3RhcnRfYmEsIGVuZF9iYSkNCisjZGVmaW5lIG5tYm1fbWFya19ibG9ja19jb2xvcl9zaWduYXR1cmUobmksIGJhKQ0KKyNkZWZpbmUgbm1ibV9tYXJrX2Jsb2NrX2NvbG9yX2luZm9fdGFibGUobmksIHN0YXJ0X2JhLCBlbmRfYmEpDQorI2RlZmluZSBubWJtX21hcmtfYmxvY2tfY29sb3JfbWFwcGVkKG5pLCBiYSkNCisNCisjZW5kaWYgLyogX05NQk1fREVCVUdfSF8gKi8NCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy01LjQvZHJpdmVycy9tdGQvbm1ibS9ubWJtLWRlYnVnLmlubCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzLTUuNC9kcml2ZXJzL210ZC9ubWJtL25tYm0tZGVidWcuaW5sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy01LjQvZHJpdmVycy9tdGQvbm1ibS9ubWJtLWRlYnVnLmlubApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMtNS40L2RyaXZlcnMvbXRkL25tYm0vbm1ibS1tdGQuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzLTUuNC9kcml2ZXJzL210ZC9ubWJtL25tYm0tbXRkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNlOWUxOAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzLTUuNC9kcml2ZXJzL210ZC9ubWJtL25tYm0tbXRkLmMKQEAgLTAsMCArMSw3OTUgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogTVREIGxheWVyIGZvciBOQU5EIE1hcHBlZC1ibG9jayBNYW5hZ2VtZW50IChOTUJNKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBNZWRpYVRlayBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQXV0aG9yOiBXZWlqaWUgR2FvIDx3ZWlqaWUuZ2FvQG1lZGlhdGVrLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvZmxhc2hjaGlwLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5fbGV2ZWxzLmg+CisKKyNpbmNsdWRlICJubWJtLXByaXZhdGUuaCIKKyNpbmNsdWRlICJubWJtLWRlYnVnLmgiCisKKyNkZWZpbmUgTk1CTV9NQVhfUkFUSU9fREVGQVVMVAkJCTEKKyNkZWZpbmUgTk1CTV9NQVhfQkxPQ0tTX0RFRkFVTFQJCQkyNTYKKworc3RydWN0IG5tYm1fbXRkIHsKKwlzdHJ1Y3QgbXRkX2luZm8gdXBwZXI7CisJc3RydWN0IG10ZF9pbmZvICpsb3dlcjsKKworCXN0cnVjdCBubWJtX2luc3RhbmNlICpuaTsKKwl1aW50OF90ICpwYWdlX2NhY2hlOworCisJZmxzdGF0ZV90IHN0YXRlOworCXNwaW5sb2NrX3QgbG9jazsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3cTsKKworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Cit9OworCitzdHJ1Y3QgbGlzdF9oZWFkIG5tYm1fZGV2czsKK3N0YXRpYyBERUZJTkVfTVVURVgobm1ibV9kZXZzX2xvY2spOworCitzdGF0aWMgaW50IG5tYm1fbG93ZXJfcmVhZF9wYWdlKHZvaWQgKmFyZywgdWludDY0X3QgYWRkciwgdm9pZCAqYnVmLCB2b2lkICpvb2IsCisJCQkJZW51bSBubWJtX29vYl9tb2RlIG1vZGUpCit7CisJc3RydWN0IG5tYm1fbXRkICpubSA9IGFyZzsKKwlzdHJ1Y3QgbXRkX29vYl9vcHMgb3BzOworCWludCByZXQ7CisKKwltZW1zZXQoJm9wcywgMCwgc2l6ZW9mKG9wcykpOworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBOTUJNX01PREVfUExBQ0VfT09COgorCQlvcHMubW9kZSA9IE1URF9PUFNfUExBQ0VfT09COworCQlicmVhazsKKwljYXNlIE5NQk1fTU9ERV9BVVRPX09PQjoKKwkJb3BzLm1vZGUgPSBNVERfT1BTX0FVVE9fT09COworCQlicmVhazsKKwljYXNlIE5NQk1fTU9ERV9SQVc6CisJCW9wcy5tb2RlID0gTVREX09QU19SQVc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2RlYnVnKCIlczogdW5zdXBwb3J0ZWQgTk1CTSBtb2RlOiAldVxuIiwgX19mdW5jX18sIG1vZGUpOworCQlyZXR1cm4gLUVOT1RTVVBQOworCX0KKworCWlmIChidWYpIHsKKwkJb3BzLmRhdGJ1ZiA9IGJ1ZjsKKwkJb3BzLmxlbiA9IG5tLT5sb3dlci0+d3JpdGVzaXplOworCX0KKworCWlmIChvb2IpIHsKKwkJb3BzLm9vYmJ1ZiA9IG9vYjsKKwkJb3BzLm9vYmxlbiA9IG10ZF9vb2JhdmFpbChubS0+bG93ZXIsICZvcHMpOworCX0KKworCXJldCA9IG10ZF9yZWFkX29vYihubS0+bG93ZXIsIGFkZHIsICZvcHMpOworCW5tLT51cHBlci5lY2Nfc3RhdHMuY29ycmVjdGVkID0gbm0tPmxvd2VyLT5lY2Nfc3RhdHMuY29ycmVjdGVkOworCW5tLT51cHBlci5lY2Nfc3RhdHMuZmFpbGVkID0gbm0tPmxvd2VyLT5lY2Nfc3RhdHMuZmFpbGVkOworCisJLyogUmVwb3J0IGVycm9yIG9uIGZhaWx1cmUgKGluY2x1ZGluZyBlY2MgZXJyb3IpICovCisJaWYgKHJldCA8IDAgJiYgcmV0ICE9IC1FVUNMRUFOKQorCQlyZXR1cm4gcmV0OworCisJLyoKKwkgKiBTaW5jZSBtdGRfcmVhZF9vb2IoKSB3b24ndCByZXBvcnQgZXhhY3QgYml0ZmxpcHMsIHdoYXQgd2UgY2FuIGtub3cKKwkgKiBpcyB3aGV0aGVyIGJpdGZsaXBzIGV4Y2VlZHMgdGhlIHRocmVzaG9sZC4KKwkgKiBXZSB3YW50IHRoZSAtRVVDTEVBTiB0byBiZSBwYXNzZWQgdG8gdGhlIHVwcGVyIGxheWVyLCBidXQgbm90IHRoZQorCSAqIGVycm9yIHZhbHVlIGl0c2VsZi4gVG8gYWNoaWV2ZSB0aGlzLCByZXBvcnQgYml0ZmxpcHMgYWJvdmUgdGhlCisJICogdGhyZXNob2xkLgorCSAqLworCisJaWYgKHJldCA9PSAtRVVDTEVBTikgeworCQlyZXR1cm4gbWluX3QodTMyLCBubS0+bG93ZXItPmJpdGZsaXBfdGhyZXNob2xkICsgMSwKKwkJCSAgICAgbm0tPmxvd2VyLT5lY2Nfc3RyZW5ndGgpOworCX0KKworCS8qIEZvciBiaXRmbGlwcyBsZXNzIHRoYW4gdGhlIHRocmVzaG9sZCwgcmV0dXJuIDAgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBubWJtX2xvd2VyX3dyaXRlX3BhZ2Uodm9pZCAqYXJnLCB1aW50NjRfdCBhZGRyLCBjb25zdCB2b2lkICpidWYsCisJCQkJIGNvbnN0IHZvaWQgKm9vYiwgZW51bSBubWJtX29vYl9tb2RlIG1vZGUpCit7CisJc3RydWN0IG5tYm1fbXRkICpubSA9IGFyZzsKKwlzdHJ1Y3QgbXRkX29vYl9vcHMgb3BzOworCisJbWVtc2V0KCZvcHMsIDAsIHNpemVvZihvcHMpKTsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgTk1CTV9NT0RFX1BMQUNFX09PQjoKKwkJb3BzLm1vZGUgPSBNVERfT1BTX1BMQUNFX09PQjsKKwkJYnJlYWs7CisJY2FzZSBOTUJNX01PREVfQVVUT19PT0I6CisJCW9wcy5tb2RlID0gTVREX09QU19BVVRPX09PQjsKKwkJYnJlYWs7CisJY2FzZSBOTUJNX01PREVfUkFXOgorCQlvcHMubW9kZSA9IE1URF9PUFNfUkFXOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9kZWJ1ZygiJXM6IHVuc3VwcG9ydGVkIE5NQk0gbW9kZTogJXVcbiIsIF9fZnVuY19fLCBtb2RlKTsKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKwl9CisKKwlpZiAoYnVmKSB7CisJCW9wcy5kYXRidWYgPSAodWludDhfdCAqKWJ1ZjsKKwkJb3BzLmxlbiA9IG5tLT5sb3dlci0+d3JpdGVzaXplOworCX0KKworCWlmIChvb2IpIHsKKwkJb3BzLm9vYmJ1ZiA9ICh1aW50OF90ICopb29iOworCQlvcHMub29ibGVuID0gbXRkX29vYmF2YWlsKG5tLT5sb3dlciwgJm9wcyk7CisJfQorCisJcmV0dXJuIG10ZF93cml0ZV9vb2Iobm0tPmxvd2VyLCBhZGRyLCAmb3BzKTsKK30KKworc3RhdGljIGludCBubWJtX2xvd2VyX2VyYXNlX2Jsb2NrKHZvaWQgKmFyZywgdWludDY0X3QgYWRkcikKK3sKKwlzdHJ1Y3Qgbm1ibV9tdGQgKm5tID0gYXJnOworCXN0cnVjdCBlcmFzZV9pbmZvIGVpOworCisJbWVtc2V0KCZlaSwgMCwgc2l6ZW9mKGVpKSk7CisKKwllaS5hZGRyID0gYWRkcjsKKwllaS5sZW4gPSBubS0+bG93ZXItPmVyYXNlc2l6ZTsKKworCXJldHVybiBtdGRfZXJhc2Uobm0tPmxvd2VyLCAmZWkpOworfQorCitzdGF0aWMgaW50IG5tYm1fbG93ZXJfaXNfYmFkX2Jsb2NrKHZvaWQgKmFyZywgdWludDY0X3QgYWRkcikKK3sKKwlzdHJ1Y3Qgbm1ibV9tdGQgKm5tID0gYXJnOworCisJcmV0dXJuIG10ZF9ibG9ja19pc2JhZChubS0+bG93ZXIsIGFkZHIpOworfQorCitzdGF0aWMgaW50IG5tYm1fbG93ZXJfbWFya19iYWRfYmxvY2sodm9pZCAqYXJnLCB1aW50NjRfdCBhZGRyKQoreworCXN0cnVjdCBubWJtX210ZCAqbm0gPSBhcmc7CisKKwlyZXR1cm4gbXRkX2Jsb2NrX21hcmtiYWQobm0tPmxvd2VyLCBhZGRyKTsKK30KKworc3RhdGljIHZvaWQgbm1ibV9sb3dlcl9sb2codm9pZCAqYXJnLCBlbnVtIG5tYm1fbG9nX2NhdGVnb3J5IGxldmVsLAorCQkJICAgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQoreworCXN0cnVjdCBubWJtX210ZCAqbm0gPSBhcmc7CisJY2hhciAqbXNnOworCWNoYXIgKmtsOworCisJbXNnID0ga3Zhc3ByaW50ZihHRlBfS0VSTkVMLCBmbXQsIGFwKTsKKwlpZiAoIW1zZykgeworCQlkZXZfd2FybihubS0+ZGV2LCAidW5hYmxlIHRvIHByaW50IGxvZ1xuIik7CisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKGxldmVsKSB7CisJY2FzZSBOTUJNX0xPR19ERUJVRzoKKwkJa2wgPSBLRVJOX0RFQlVHOworCQlicmVhazsKKwljYXNlIE5NQk1fTE9HX1dBUk46CisJCWtsID0gS0VSTl9XQVJOSU5HOworCQlicmVhazsKKwljYXNlIE5NQk1fTE9HX0VSUjoKKwkJa2wgPSBLRVJOX0VSUjsKKwkJYnJlYWs7CisJY2FzZSBOTUJNX0xPR19FTUVSRzoKKwkJa2wgPSBLRVJOX0VNRVJHOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlrbCA9IEtFUk5fSU5GTyA7CisJfQorCisJZGV2X3ByaW50ayhrbCwgbm0tPmRldiwgIiVzIiwgbXNnKTsKKworCWtmcmVlKG1zZyk7Cit9CisKK3N0YXRpYyBpbnQgbm1ibV9nZXRfZGV2aWNlKHN0cnVjdCBubWJtX210ZCAqbm0sIGludCBuZXdfc3RhdGUpCit7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisKK3JldHJ5OgorCXNwaW5fbG9jaygmbm0tPmxvY2spOworCisJaWYgKG5tLT5zdGF0ZSA9PSBGTF9SRUFEWSkgeworCQlubS0+c3RhdGUgPSBuZXdfc3RhdGU7CisJCXNwaW5fdW5sb2NrKCZubS0+bG9jayk7CisJCXJldHVybiAwOworCX0KKworCWlmIChuZXdfc3RhdGUgPT0gRkxfUE1fU1VTUEVOREVEKSB7CisJCWlmIChubS0+c3RhdGUgPT0gRkxfUE1fU1VTUEVOREVEKSB7CisJCQlzcGluX3VubG9jaygmbm0tPmxvY2spOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJYWRkX3dhaXRfcXVldWUoJm5tLT53cSwgJndhaXQpOworCXNwaW5fdW5sb2NrKCZubS0+bG9jayk7CisJc2NoZWR1bGUoKTsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmbm0tPndxLCAmd2FpdCk7CisJZ290byByZXRyeTsKK30KKworc3RhdGljIHZvaWQgbm1ibV9yZWxlYXNlX2RldmljZShzdHJ1Y3Qgbm1ibV9tdGQgKm5tKQoreworCXNwaW5fbG9jaygmbm0tPmxvY2spOworCW5tLT5zdGF0ZSA9IEZMX1JFQURZOworCXdha2VfdXAoJm5tLT53cSk7CisJc3Bpbl91bmxvY2soJm5tLT5sb2NrKTsKK30KKworc3RhdGljIGludCBubWJtX210ZF9lcmFzZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGVyYXNlX2luZm8gKmluc3RyKQoreworCXN0cnVjdCBubWJtX210ZCAqbm0gPSBjb250YWluZXJfb2YobXRkLCBzdHJ1Y3Qgbm1ibV9tdGQsIHVwcGVyKTsKKwlpbnQgcmV0OworCisJbm1ibV9nZXRfZGV2aWNlKG5tLCBGTF9FUkFTSU5HKTsKKworCXJldCA9IG5tYm1fZXJhc2VfYmxvY2tfcmFuZ2Uobm0tPm5pLCBpbnN0ci0+YWRkciwgaW5zdHItPmxlbiwKKwkJCQkgICAgICZpbnN0ci0+ZmFpbF9hZGRyKTsKKworCW5tYm1fcmVsZWFzZV9kZXZpY2Uobm0pOworCisJaWYgKCFyZXQpCisJCXJldHVybiAwOworCisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgbm1ibV9tdGRfcmVhZF9kYXRhKHN0cnVjdCBubWJtX210ZCAqbm0sIHVpbnQ2NF90IGFkZHIsCisJCQkgICAgICBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcywgZW51bSBubWJtX29vYl9tb2RlIG1vZGUpCit7CisJc2l6ZV90IGxlbiwgb29ibGVuLCBtYXhvb2JsZW4sIGNoa2xlbjsKKwl1aW50MzJfdCBjb2wsIG9vYm9mZnM7CisJdWludDhfdCAqZGF0Y2FjaGUsICpvb2JjYWNoZTsKKwlib29sIGhhc19lY2NfZXJyID0gZmFsc2U7CisJaW50IHJldCwgbWF4X2JpdGZsaXBzID0gMDsKKworCWNvbCA9IGFkZHIgJiBubS0+bG93ZXItPndyaXRlc2l6ZV9tYXNrOworCWFkZHIgJj0gfm5tLT5sb3dlci0+d3JpdGVzaXplX21hc2s7CisJbWF4b29ibGVuID0gbXRkX29vYmF2YWlsKG5tLT5sb3dlciwgb3BzKTsKKwlvb2JvZmZzID0gb3BzLT5vb2JvZmZzOworCW9vYmxlbiA9IG9wcy0+b29ibGVuOworCWxlbiA9IG9wcy0+bGVuOworCisJZGF0Y2FjaGUgPSBsZW4gPyBubS0+cGFnZV9jYWNoZSA6IE5VTEw7CisJb29iY2FjaGUgPSBvb2JsZW4gPyBubS0+cGFnZV9jYWNoZSArIG5tLT5sb3dlci0+d3JpdGVzaXplIDogTlVMTDsKKworCW9wcy0+b29icmV0bGVuID0gMDsKKwlvcHMtPnJldGxlbiA9IDA7CisKKwl3aGlsZSAobGVuIHx8IG9vYmxlbikgeworCQlyZXQgPSBubWJtX3JlYWRfc2luZ2xlX3BhZ2Uobm0tPm5pLCBhZGRyLCBkYXRjYWNoZSwgb29iY2FjaGUsCisJCQkJCSAgICBtb2RlKTsKKwkJaWYgKHJldCA8IDAgJiYgcmV0ICE9IC1FQkFETVNHKQorCQkJcmV0dXJuIHJldDsKKworCQkvKiBDb250aW51ZSByZWFkaW5nIG9uIGVjYyBlcnJvciAqLworCQlpZiAocmV0ID09IC1FQkFETVNHKQorCQkJaGFzX2VjY19lcnIgPSB0cnVlOworCisJCS8qIFJlY29yZCB0aGUgbWF4aW11bSBiaXRmbGlwcyBiZXR3ZWVuIHBhZ2VzICovCisJCWlmIChyZXQgPiBtYXhfYml0ZmxpcHMpCisJCQltYXhfYml0ZmxpcHMgPSByZXQ7CisKKwkJaWYgKGxlbikgeworCQkJLyogTW92ZSBkYXRhICovCisJCQljaGtsZW4gPSBubS0+bG93ZXItPndyaXRlc2l6ZSAtIGNvbDsKKwkJCWlmIChjaGtsZW4gPiBsZW4pCisJCQkJY2hrbGVuID0gbGVuOworCisJCQltZW1jcHkob3BzLT5kYXRidWYgKyBvcHMtPnJldGxlbiwgZGF0Y2FjaGUgKyBjb2wsCisJCQkgICAgICAgY2hrbGVuKTsKKwkJCWxlbiAtPSBjaGtsZW47CisJCQljb2wgPSAwOyAvKiAoY29sICsgY2hrbGVuKSAlICAqLworCQkJb3BzLT5yZXRsZW4gKz0gY2hrbGVuOworCQl9CisKKwkJaWYgKG9vYmxlbikgeworCQkJLyogTW92ZSBvb2IgKi8KKwkJCWNoa2xlbiA9IG1heG9vYmxlbiAtIG9vYm9mZnM7CisJCQlpZiAoY2hrbGVuID4gb29ibGVuKQorCQkJCWNoa2xlbiA9IG9vYmxlbjsKKworCQkJbWVtY3B5KG9wcy0+b29iYnVmICsgb3BzLT5vb2JyZXRsZW4sIG9vYmNhY2hlICsgb29ib2ZmcywKKwkJCSAgICAgICBjaGtsZW4pOworCQkJb29ibGVuIC09IGNoa2xlbjsKKwkJCW9vYm9mZnMgPSAwOyAvKiAob29ib2ZmcyArIGNoa2xlbikgJSBtYXhvb2JsZW47ICovCisJCQlvcHMtPm9vYnJldGxlbiArPSBjaGtsZW47CisJCX0KKworCQlhZGRyICs9IG5tLT5sb3dlci0+d3JpdGVzaXplOworCX0KKworCWlmIChoYXNfZWNjX2VycikKKwkJcmV0dXJuIC1FQkFETVNHOworCisJcmV0dXJuIG1heF9iaXRmbGlwczsKK30KKworc3RhdGljIGludCBubWJtX210ZF9yZWFkX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sCisJCQkgICAgIHN0cnVjdCBtdGRfb29iX29wcyAqb3BzKQoreworCXN0cnVjdCBubWJtX210ZCAqbm0gPSBjb250YWluZXJfb2YobXRkLCBzdHJ1Y3Qgbm1ibV9tdGQsIHVwcGVyKTsKKwl1aW50MzJfdCBtYXhvb2JsZW47CisJZW51bSBubWJtX29vYl9tb2RlIG1vZGU7CisJaW50IHJldDsKKworCWlmICghb3BzLT5vb2JidWYgJiYgIW9wcy0+ZGF0YnVmKSB7CisJCWlmIChvcHMtPm9vYmxlbiB8fCBvcHMtPmxlbikKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXJldHVybiAwOworCX0KKworCXN3aXRjaCAob3BzLT5tb2RlKSB7CisJY2FzZSBNVERfT1BTX1BMQUNFX09PQjoKKwkJbW9kZSA9IE5NQk1fTU9ERV9QTEFDRV9PT0I7CisJCWJyZWFrOworCWNhc2UgTVREX09QU19BVVRPX09PQjoKKwkJbW9kZSA9IE5NQk1fTU9ERV9BVVRPX09PQjsKKwkJYnJlYWs7CisJY2FzZSBNVERfT1BTX1JBVzoKKwkJbW9kZSA9IE5NQk1fTU9ERV9SQVc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2RlYnVnKCIlczogdW5zdXBwb3J0ZWQgb29iIG1vZGU6ICV1XG4iLCBfX2Z1bmNfXywgb3BzLT5tb2RlKTsKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKwl9CisKKwltYXhvb2JsZW4gPSBtdGRfb29iYXZhaWwobXRkLCBvcHMpOworCisJLyogRG8gbm90IGFsbG93IHJlYWQgcGFzdCBlbmQgb2YgZGV2aWNlICovCisJaWYgKG9wcy0+ZGF0YnVmICYmIChmcm9tICsgb3BzLT5sZW4pID4gbXRkLT5zaXplKSB7CisJCXByX2RlYnVnKCIlczogYXR0ZW1wdCB0byByZWFkIGJleW9uZCBlbmQgb2YgZGV2aWNlXG4iLAorCQkJIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFvcHMtPm9vYmJ1ZikgeworCQlubWJtX2dldF9kZXZpY2Uobm0sIEZMX1JFQURJTkcpOworCisJCS8qIE9wdGltaXplZCBmb3IgcmVhZGluZyBkYXRhIG9ubHkgKi8KKwkJcmV0ID0gbm1ibV9yZWFkX3JhbmdlKG5tLT5uaSwgZnJvbSwgb3BzLT5sZW4sIG9wcy0+ZGF0YnVmLAorCQkJCSAgICAgIG1vZGUsICZvcHMtPnJldGxlbik7CisKKwkJbm1ibV9yZWxlYXNlX2RldmljZShubSk7CisKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAodW5saWtlbHkob3BzLT5vb2JvZmZzID49IG1heG9vYmxlbikpIHsKKwkJcHJfZGVidWcoIiVzOiBhdHRlbXB0IHRvIHN0YXJ0IHJlYWQgb3V0c2lkZSBvb2JcbiIsCisJCQlfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh1bmxpa2VseShmcm9tID49IG10ZC0+c2l6ZSB8fAorCSAgICBvcHMtPm9vYm9mZnMgKyBvcHMtPm9vYmxlbiA+ICgobXRkLT5zaXplID4+IG10ZC0+d3JpdGVzaXplX3NoaWZ0KSAtCisJICAgIChmcm9tID4+IG10ZC0+d3JpdGVzaXplX3NoaWZ0KSkgKiBtYXhvb2JsZW4pKSB7CisJCXByX2RlYnVnKCIlczogYXR0ZW1wdCB0byByZWFkIGJleW9uZCBlbmQgb2YgZGV2aWNlXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbm1ibV9nZXRfZGV2aWNlKG5tLCBGTF9SRUFESU5HKTsKKwlyZXQgPSBubWJtX210ZF9yZWFkX2RhdGEobm0sIGZyb20sIG9wcywgbW9kZSk7CisJbm1ibV9yZWxlYXNlX2RldmljZShubSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG5tYm1fbXRkX3dyaXRlX2RhdGEoc3RydWN0IG5tYm1fbXRkICpubSwgdWludDY0X3QgYWRkciwKKwkJCSAgICAgICBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcywgZW51bSBubWJtX29vYl9tb2RlIG1vZGUpCit7CisJc2l6ZV90IGxlbiwgb29ibGVuLCBtYXhvb2JsZW4sIGNoa2xlbjsKKwl1aW50MzJfdCBjb2wsIG9vYm9mZnM7CisJdWludDhfdCAqZGF0Y2FjaGUsICpvb2JjYWNoZTsKKwlpbnQgcmV0OworCisJY29sID0gYWRkciAmIG5tLT5sb3dlci0+d3JpdGVzaXplX21hc2s7CisJYWRkciAmPSB+bm0tPmxvd2VyLT53cml0ZXNpemVfbWFzazsKKwltYXhvb2JsZW4gPSBtdGRfb29iYXZhaWwobm0tPmxvd2VyLCBvcHMpOworCW9vYm9mZnMgPSBvcHMtPm9vYm9mZnM7CisJb29ibGVuID0gb3BzLT5vb2JsZW47CisJbGVuID0gb3BzLT5sZW47CisKKwlkYXRjYWNoZSA9IGxlbiA/IG5tLT5wYWdlX2NhY2hlIDogTlVMTDsKKwlvb2JjYWNoZSA9IG9vYmxlbiA/IG5tLT5wYWdlX2NhY2hlICsgbm0tPmxvd2VyLT53cml0ZXNpemUgOiBOVUxMOworCisJb3BzLT5vb2JyZXRsZW4gPSAwOworCW9wcy0+cmV0bGVuID0gMDsKKworCXdoaWxlIChsZW4gfHwgb29ibGVuKSB7CisJCWlmIChsZW4pIHsKKwkJCS8qIE1vdmUgZGF0YSAqLworCQkJY2hrbGVuID0gbm0tPmxvd2VyLT53cml0ZXNpemUgLSBjb2w7CisJCQlpZiAoY2hrbGVuID4gbGVuKQorCQkJCWNoa2xlbiA9IGxlbjsKKworCQkJbWVtc2V0KGRhdGNhY2hlLCAweGZmLCBjb2wpOworCQkJbWVtY3B5KGRhdGNhY2hlICsgY29sLCBvcHMtPmRhdGJ1ZiArIG9wcy0+cmV0bGVuLAorCQkJICAgICAgIGNoa2xlbik7CisJCQltZW1zZXQoZGF0Y2FjaGUgKyBjb2wgKyBjaGtsZW4sIDB4ZmYsCisJCQkgICAgICAgbm0tPmxvd2VyLT53cml0ZXNpemUgLSBjb2wgLSBjaGtsZW4pOworCQkJbGVuIC09IGNoa2xlbjsKKwkJCWNvbCA9IDA7IC8qIChjb2wgKyBjaGtsZW4pICUgICovCisJCQlvcHMtPnJldGxlbiArPSBjaGtsZW47CisJCX0KKworCQlpZiAob29ibGVuKSB7CisJCQkvKiBNb3ZlIG9vYiAqLworCQkJY2hrbGVuID0gbWF4b29ibGVuIC0gb29ib2ZmczsKKwkJCWlmIChjaGtsZW4gPiBvb2JsZW4pCisJCQkJY2hrbGVuID0gb29ibGVuOworCisJCQltZW1zZXQob29iY2FjaGUsIDB4ZmYsIG9vYm9mZnMpOworCQkJbWVtY3B5KG9vYmNhY2hlICsgb29ib2ZmcywKKwkJCSAgICAgICBvcHMtPm9vYmJ1ZiArIG9wcy0+b29icmV0bGVuLCBjaGtsZW4pOworCQkJbWVtc2V0KG9vYmNhY2hlICsgb29ib2ZmcyArIGNoa2xlbiwgMHhmZiwKKwkJCSAgICAgICBubS0+bG93ZXItPm9vYnNpemUgLSBvb2JvZmZzIC0gY2hrbGVuKTsKKwkJCW9vYmxlbiAtPSBjaGtsZW47CisJCQlvb2JvZmZzID0gMDsgLyogKG9vYm9mZnMgKyBjaGtsZW4pICUgbWF4b29ibGVuOyAqLworCQkJb3BzLT5vb2JyZXRsZW4gKz0gY2hrbGVuOworCQl9CisKKwkJcmV0ID0gbm1ibV93cml0ZV9zaW5nbGVfcGFnZShubS0+bmksIGFkZHIsIGRhdGNhY2hlLCBvb2JjYWNoZSwKKwkJCQkJICAgICBtb2RlKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJYWRkciArPSBubS0+bG93ZXItPndyaXRlc2l6ZTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBubWJtX210ZF93cml0ZV9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywKKwkJCSAgICAgIHN0cnVjdCBtdGRfb29iX29wcyAqb3BzKQoreworCXN0cnVjdCBubWJtX210ZCAqbm0gPSBjb250YWluZXJfb2YobXRkLCBzdHJ1Y3Qgbm1ibV9tdGQsIHVwcGVyKTsKKwllbnVtIG5tYm1fb29iX21vZGUgbW9kZTsKKwl1aW50MzJfdCBtYXhvb2JsZW47CisJaW50IHJldDsKKworCWlmICghb3BzLT5vb2JidWYgJiYgIW9wcy0+ZGF0YnVmKSB7CisJCWlmIChvcHMtPm9vYmxlbiB8fCBvcHMtPmxlbikKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXJldHVybiAwOworCX0KKworCXN3aXRjaCAob3BzLT5tb2RlKSB7CisJY2FzZSBNVERfT1BTX1BMQUNFX09PQjoKKwkJbW9kZSA9IE5NQk1fTU9ERV9QTEFDRV9PT0I7CisJCWJyZWFrOworCWNhc2UgTVREX09QU19BVVRPX09PQjoKKwkJbW9kZSA9IE5NQk1fTU9ERV9BVVRPX09PQjsKKwkJYnJlYWs7CisJY2FzZSBNVERfT1BTX1JBVzoKKwkJbW9kZSA9IE5NQk1fTU9ERV9SQVc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2RlYnVnKCIlczogdW5zdXBwb3J0ZWQgb29iIG1vZGU6ICV1XG4iLCBfX2Z1bmNfXywKKwkJCSBvcHMtPm1vZGUpOworCQlyZXR1cm4gLUVOT1RTVVBQOworCX0KKworCW1heG9vYmxlbiA9IG10ZF9vb2JhdmFpbChtdGQsIG9wcyk7CisKKwkvKiBEbyBub3QgYWxsb3cgd3JpdGUgcGFzdCBlbmQgb2YgZGV2aWNlICovCisJaWYgKG9wcy0+ZGF0YnVmICYmICh0byArIG9wcy0+bGVuKSA+IG10ZC0+c2l6ZSkgeworCQlwcl9kZWJ1ZygiJXM6IGF0dGVtcHQgdG8gd3JpdGUgYmV5b25kIGVuZCBvZiBkZXZpY2VcbiIsCisJCQkgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIW9wcy0+b29iYnVmKSB7CisJCW5tYm1fZ2V0X2RldmljZShubSwgRkxfV1JJVElORyk7CisKKwkJLyogT3B0aW1pemVkIGZvciB3cml0aW5nIGRhdGEgb25seSAqLworCQlyZXQgPSBubWJtX3dyaXRlX3JhbmdlKG5tLT5uaSwgdG8sIG9wcy0+bGVuLCBvcHMtPmRhdGJ1ZiwKKwkJCQkgICAgICAgbW9kZSwgJm9wcy0+cmV0bGVuKTsKKworCQlubWJtX3JlbGVhc2VfZGV2aWNlKG5tKTsKKworCQlyZXR1cm4gcmV0OworCX0KKworCWlmICh1bmxpa2VseShvcHMtPm9vYm9mZnMgPj0gbWF4b29ibGVuKSkgeworCQlwcl9kZWJ1ZygiJXM6IGF0dGVtcHQgdG8gc3RhcnQgd3JpdGUgb3V0c2lkZSBvb2JcbiIsCisJCQlfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh1bmxpa2VseSh0byA+PSBtdGQtPnNpemUgfHwKKwkgICAgb3BzLT5vb2JvZmZzICsgb3BzLT5vb2JsZW4gPiAoKG10ZC0+c2l6ZSA+PiBtdGQtPndyaXRlc2l6ZV9zaGlmdCkgLQorCSAgICAodG8gPj4gbXRkLT53cml0ZXNpemVfc2hpZnQpKSAqIG1heG9vYmxlbikpIHsKKwkJcHJfZGVidWcoIiVzOiBhdHRlbXB0IHRvIHdyaXRlIGJleW9uZCBlbmQgb2YgZGV2aWNlXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbm1ibV9nZXRfZGV2aWNlKG5tLCBGTF9XUklUSU5HKTsKKwlyZXQgPSBubWJtX210ZF93cml0ZV9kYXRhKG5tLCB0bywgb3BzLCBtb2RlKTsKKwlubWJtX3JlbGVhc2VfZGV2aWNlKG5tKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbm1ibV9tdGRfYmxvY2tfaXNiYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZmZzKQoreworCXN0cnVjdCBubWJtX210ZCAqbm0gPSBjb250YWluZXJfb2YobXRkLCBzdHJ1Y3Qgbm1ibV9tdGQsIHVwcGVyKTsKKwlpbnQgcmV0OworCisJbm1ibV9nZXRfZGV2aWNlKG5tLCBGTF9SRUFESU5HKTsKKwlyZXQgPSBubWJtX2NoZWNrX2JhZF9ibG9jayhubS0+bmksIG9mZnMpOworCW5tYm1fcmVsZWFzZV9kZXZpY2Uobm0pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBubWJtX210ZF9ibG9ja19tYXJrYmFkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZmcykKK3sKKwlzdHJ1Y3Qgbm1ibV9tdGQgKm5tID0gY29udGFpbmVyX29mKG10ZCwgc3RydWN0IG5tYm1fbXRkLCB1cHBlcik7CisJaW50IHJldDsKKworCW5tYm1fZ2V0X2RldmljZShubSwgRkxfV1JJVElORyk7CisJcmV0ID0gbm1ibV9tYXJrX2JhZF9ibG9jayhubS0+bmksIG9mZnMpOworCW5tYm1fcmVsZWFzZV9kZXZpY2Uobm0pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbm1ibV9tdGRfc2h1dGRvd24oc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJc3RydWN0IG5tYm1fbXRkICpubSA9IGNvbnRhaW5lcl9vZihtdGQsIHN0cnVjdCBubWJtX210ZCwgdXBwZXIpOworCisJbm1ibV9nZXRfZGV2aWNlKG5tLCBGTF9QTV9TVVNQRU5ERUQpOworfQorCitzdGF0aWMgaW50IG5tYm1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm10ZF9ucCwgKm5wID0gcGRldi0+ZGV2Lm9mX25vZGU7CisJdWludDMyX3QgbWF4X3JhdGlvLCBtYXhfcmVzZXJ2ZWRfYmxvY2tzLCBhbGxvY19zaXplOworCWJvb2wgZm9yY2VkX2NyZWF0ZSwgZW1wdHlfcGFnZV9lY2Nfb2s7CisJc3RydWN0IG5tYm1fbG93ZXJfZGV2aWNlIG5sZDsKKwlzdHJ1Y3QgbXRkX2luZm8gKmxvd2VyLCAqbXRkOworCXN0cnVjdCBubWJtX210ZCAqbm07CisJY29uc3QgY2hhciAqbXRkbmFtZTsKKwlpbnQgcmV0OworCisJbXRkX25wID0gb2ZfcGFyc2VfcGhhbmRsZShucCwgImxvd2VyLW10ZC1kZXZpY2UiLCAwKTsKKwlpZiAobXRkX25wKSB7CisJCWxvd2VyID0gZ2V0X210ZF9kZXZpY2VfYnlfbm9kZShtdGRfbnApOworCQlpZiAoIUlTX0VSUihsb3dlcikpCisJCQlnb3RvIGRvX2F0dGFjaF9tdGQ7CisKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGZpbmQgbXRkIGRldmljZSBieSBwaGFuZGxlXG4iKTsKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJfQorCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobnAsICJsb3dlci1tdGQtbmFtZSIsICZtdGRuYW1lKTsKKwlpZiAoIXJldCkgeworCQlsb3dlciA9IGdldF9tdGRfZGV2aWNlX25tKG10ZG5hbWUpOworCQlpZiAoIUlTX0VSUihsb3dlcikpCisJCQlnb3RvIGRvX2F0dGFjaF9tdGQ7CisKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGZpbmQgbXRkIGRldmljZSBieSBuYW1lICclcydcbiIsCisJCQltdGRuYW1lKTsKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJfQorCitkb19hdHRhY2hfbXRkOgorCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgIm1heC1yYXRpbyIsICZtYXhfcmF0aW8pKQorCQltYXhfcmF0aW8gPSBOTUJNX01BWF9SQVRJT19ERUZBVUxUOworCisJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAibWF4LXJlc2VydmVkLWJsb2NrcyIsCisJCQkJICZtYXhfcmVzZXJ2ZWRfYmxvY2tzKSkKKwkJbWF4X3Jlc2VydmVkX2Jsb2NrcyA9IE5NQk1fTUFYX0JMT0NLU19ERUZBVUxUOworCisJZm9yY2VkX2NyZWF0ZSA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwgImZvcmNlZC1jcmVhdGUiKTsKKwllbXB0eV9wYWdlX2VjY19vayA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwKKwkJCQkJCSAgImVtcHR5LXBhZ2UtZWNjLXByb3RlY3RlZCIpOworCisJbWVtc2V0KCZubGQsIDAsIHNpemVvZihubGQpKTsKKworCW5sZC5mbGFncyA9IDA7CisKKwlpZiAoZm9yY2VkX2NyZWF0ZSkKKwkJbmxkLmZsYWdzIHw9IE5NQk1fRl9DUkVBVEU7CisKKwlpZiAoZW1wdHlfcGFnZV9lY2Nfb2spCisJCW5sZC5mbGFncyB8PSBOTUJNX0ZfRU1QVFlfUEFHRV9FQ0NfT0s7CisKKwlubGQubWF4X3JhdGlvID0gbWF4X3JhdGlvOworCW5sZC5tYXhfcmVzZXJ2ZWRfYmxvY2tzID0gbWF4X3Jlc2VydmVkX2Jsb2NrczsKKworCW5sZC5zaXplID0gbG93ZXItPnNpemU7CisJbmxkLmVyYXNlc2l6ZSA9IGxvd2VyLT5lcmFzZXNpemU7CisJbmxkLndyaXRlc2l6ZSA9IGxvd2VyLT53cml0ZXNpemU7CisJbmxkLm9vYnNpemUgPSBsb3dlci0+b29ic2l6ZTsKKwlubGQub29iYXZhaWwgPSBsb3dlci0+b29iYXZhaWw7CisKKwlubGQucmVhZF9wYWdlID0gbm1ibV9sb3dlcl9yZWFkX3BhZ2U7CisJbmxkLndyaXRlX3BhZ2UgPSBubWJtX2xvd2VyX3dyaXRlX3BhZ2U7CisJbmxkLmVyYXNlX2Jsb2NrID0gbm1ibV9sb3dlcl9lcmFzZV9ibG9jazsKKwlubGQuaXNfYmFkX2Jsb2NrID0gbm1ibV9sb3dlcl9pc19iYWRfYmxvY2s7CisJbmxkLm1hcmtfYmFkX2Jsb2NrID0gbm1ibV9sb3dlcl9tYXJrX2JhZF9ibG9jazsKKworCW5sZC5sb2dwcmludCA9IG5tYm1fbG93ZXJfbG9nOworCisJYWxsb2Nfc2l6ZSA9IG5tYm1fY2FsY19zdHJ1Y3R1cmVfc2l6ZSgmbmxkKTsKKworCW5tID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqbm0pICsgYWxsb2Nfc2l6ZSArCisJCQkgIGxvd2VyLT53cml0ZXNpemUgKyBsb3dlci0+b29ic2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFubSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlubS0+bmkgPSAodm9pZCAqKW5tICsgc2l6ZW9mKCpubSk7CisJbm0tPnBhZ2VfY2FjaGUgPSAodWludDhfdCAqKW5tLT5uaSArIGFsbG9jX3NpemU7CisJbm0tPmxvd2VyID0gbG93ZXI7CisJbm0tPmRldiA9ICZwZGV2LT5kZXY7CisKKwlJTklUX0xJU1RfSEVBRCgmbm0tPm5vZGUpOworCXNwaW5fbG9ja19pbml0KCZubS0+bG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmbm0tPndxKTsKKworCW5sZC5hcmcgPSBubTsKKworCXJldCA9IG5tYm1fYXR0YWNoKCZubGQsIG5tLT5uaSk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwkvKiBJbml0aWFsaXplIHVwcGVyIG10ZCAqLworCW10ZCA9ICZubS0+dXBwZXI7CisKKwltdGQtPm93bmVyID0gVEhJU19NT0RVTEU7CisJbXRkLT5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKKwltdGQtPnR5cGUgPSBsb3dlci0+dHlwZTsKKwltdGQtPmZsYWdzID0gbG93ZXItPmZsYWdzOworCisJbXRkLT5zaXplID0gKHVpbnQ2NF90KW5tLT5uaS0+ZGF0YV9ibG9ja19jb3VudCAqIGxvd2VyLT5lcmFzZXNpemU7CisJbXRkLT5lcmFzZXNpemUgPSBsb3dlci0+ZXJhc2VzaXplOworCW10ZC0+d3JpdGVzaXplID0gbG93ZXItPndyaXRlc2l6ZTsKKwltdGQtPndyaXRlYnVmc2l6ZSA9IGxvd2VyLT53cml0ZXNpemU7CisJbXRkLT5vb2JzaXplID0gbG93ZXItPm9vYnNpemU7CisJbXRkLT5vb2JhdmFpbCA9IGxvd2VyLT5vb2JhdmFpbDsKKworCW10ZC0+ZXJhc2VzaXplX3NoaWZ0ID0gbG93ZXItPmVyYXNlc2l6ZV9zaGlmdDsKKwltdGQtPndyaXRlc2l6ZV9zaGlmdCA9IGxvd2VyLT53cml0ZXNpemVfc2hpZnQ7CisJbXRkLT5lcmFzZXNpemVfbWFzayA9IGxvd2VyLT5lcmFzZXNpemVfbWFzazsKKwltdGQtPndyaXRlc2l6ZV9tYXNrID0gbG93ZXItPndyaXRlc2l6ZV9tYXNrOworCisJbXRkLT5iaXRmbGlwX3RocmVzaG9sZCA9IGxvd2VyLT5iaXRmbGlwX3RocmVzaG9sZDsKKworCW10ZC0+b29ibGF5b3V0ID0gbG93ZXItPm9vYmxheW91dDsKKworCW10ZC0+ZWNjX3N0ZXBfc2l6ZSA9IGxvd2VyLT5lY2Nfc3RlcF9zaXplOworCW10ZC0+ZWNjX3N0cmVuZ3RoID0gbG93ZXItPmVjY19zdHJlbmd0aDsKKworCW10ZC0+bnVtZXJhc2VyZWdpb25zID0gbG93ZXItPm51bWVyYXNlcmVnaW9uczsKKwltdGQtPmVyYXNlcmVnaW9ucyA9IGxvd2VyLT5lcmFzZXJlZ2lvbnM7CisKKwltdGQtPl9lcmFzZSA9IG5tYm1fbXRkX2VyYXNlOworCW10ZC0+X3JlYWRfb29iID0gbm1ibV9tdGRfcmVhZF9vb2I7CisJbXRkLT5fd3JpdGVfb29iID0gbm1ibV9tdGRfd3JpdGVfb29iOworCW10ZC0+X2Jsb2NrX2lzYmFkID0gbm1ibV9tdGRfYmxvY2tfaXNiYWQ7CisJbXRkLT5fYmxvY2tfbWFya2JhZCA9IG5tYm1fbXRkX2Jsb2NrX21hcmtiYWQ7CisJbXRkLT5fcmVib290ID0gbm1ibV9tdGRfc2h1dGRvd247CisKKwltdGRfc2V0X29mX25vZGUobXRkLCBucCk7CisKKwlyZXQgPSBtdGRfZGV2aWNlX3JlZ2lzdGVyKG10ZCwgTlVMTCwgMCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgbXRkIGRldmljZVxuIik7CisJCW5tYm1fZGV0YWNoKG5tLT5uaSk7CisJCWdvdG8gb3V0OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG5tKTsKKworCW11dGV4X2xvY2soJm5tYm1fZGV2c19sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZubS0+bm9kZSwgJm5tYm1fZGV2cyk7CisJbXV0ZXhfdW5sb2NrKCZubWJtX2RldnNfbG9jayk7CisKKwlyZXR1cm4gMDsKKworb3V0OgorCWlmIChubSkKKwkJZGV2bV9rZnJlZSgmcGRldi0+ZGV2LCBubSk7CisKKwlwdXRfbXRkX2RldmljZShsb3dlcik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG5tYm1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG5tYm1fbXRkICpubSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBtdGRfaW5mbyAqbG93ZXIgPSBubS0+bG93ZXI7CisJaW50IHJldDsKKworCXJldCA9IG10ZF9kZXZpY2VfdW5yZWdpc3Rlcigmbm0tPnVwcGVyKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbm1ibV9kZXRhY2gobm0tPm5pKTsKKworCW11dGV4X2xvY2soJm5tYm1fZGV2c19sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZubS0+bm9kZSwgJm5tYm1fZGV2cyk7CisJbXV0ZXhfdW5sb2NrKCZubWJtX2RldnNfbG9jayk7CisKKwlkZXZtX2tmcmVlKCZwZGV2LT5kZXYsIG5tKTsKKworCXB1dF9tdGRfZGV2aWNlKGxvd2VyKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG5tYm1faWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJnZW5lcmljLG5tYm0iIH0sCisJeyB9LAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbm1ibV9pZHMpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBubWJtX2RyaXZlciA9IHsKKwkucHJvYmUgPSBubWJtX3Byb2JlLAorCS5yZW1vdmUgPSBubWJtX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJubWJtIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gbm1ibV9pZHMsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG5tYm1faW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlJTklUX0xJU1RfSEVBRCgmbm1ibV9kZXZzKTsKKworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmbm1ibV9kcml2ZXIpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJmYWlsZWQgdG8gcmVnaXN0ZXIgbm1ibSBkcml2ZXJcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorbW9kdWxlX2luaXQobm1ibV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IG5tYm1fZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZubWJtX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChubWJtX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJXZWlqaWUgR2FvIDx3ZWlqaWUuZ2FvQG1lZGlhdGVrLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTkFORCBtYXBwaW5nIGJsb2NrIG1hbmFnZW1lbnQiKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzLTUuNC9kcml2ZXJzL210ZC9ubWJtL25tYm0tcHJpdmF0ZS5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMtNS40L2RyaXZlcnMvbXRkL25tYm0vbm1ibS1wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI4NWFlYgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzLTUuNC9kcml2ZXJzL210ZC9ubWJtL25tYm0tcHJpdmF0ZS5oCkBAIC0wLDAgKzEsMTM3IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2UgKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWVkaWFUZWsgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIERlZmluaXRpb25zIGZvciBOQU5EIE1hcHBlZC1ibG9jayBNYW5hZ2VtZW50IChOTUJNKQorICoKKyAqIEF1dGhvcjogV2VpamllIEdhbyA8d2VpamllLmdhb0BtZWRpYXRlay5jb20+CisgKi8KKworI2lmbmRlZiBfTk1CTV9QUklWQVRFX0hfCisjZGVmaW5lIF9OTUJNX1BSSVZBVEVfSF8KKworI2luY2x1ZGUgPG5tYm0vbm1ibS5oPgorCisjZGVmaW5lIE5NQk1fTUFHSUNfU0lHTkFUVVJFCQkJMHgzMDRkNGQ0ZQkvKiBOTU0wICovCisjZGVmaW5lIE5NQk1fTUFHSUNfSU5GT19UQUJMRQkJCTB4MzE0ZDRkNGUJLyogTk1NMSAqLworCisjZGVmaW5lIE5NQk1fVkVSU0lPTl9NQUpPUl9TCQkJMAorI2RlZmluZSBOTUJNX1ZFUlNJT05fTUFKT1JfTQkJCTB4ZmZmZgorI2RlZmluZSBOTUJNX1ZFUlNJT05fTUlOT1JfUwkJCTE2CisjZGVmaW5lIE5NQk1fVkVSU0lPTl9NSU5PUl9NCQkJMHhmZmZmCisjZGVmaW5lIE5NQk1fVkVSU0lPTl9NQUtFKG1ham9yLCBtaW5vcikJCSgoKG1ham9yKSAmIE5NQk1fVkVSU0lPTl9NQUpPUl9NKSB8IFwKKwkJCQkJCSgoKG1pbm9yKSAmIE5NQk1fVkVSU0lPTl9NSU5PUl9NKSA8PCBcCisJCQkJCQlOTUJNX1ZFUlNJT05fTUlOT1JfUykpCisjZGVmaW5lIE5NQk1fVkVSU0lPTl9NQUpPUl9HRVQodmVyKQkJKCgodmVyKSA+PiBOTUJNX1ZFUlNJT05fTUFKT1JfUykgJiBcCisJCQkJCQlOTUJNX1ZFUlNJT05fTUFKT1JfTSkKKyNkZWZpbmUgTk1CTV9WRVJTSU9OX01JTk9SX0dFVCh2ZXIpCQkoKCh2ZXIpID4+IE5NQk1fVkVSU0lPTl9NSU5PUl9TKSAmIFwKKwkJCQkJCU5NQk1fVkVSU0lPTl9NSU5PUl9NKQorCit0eXBlZGVmIHVpbnQzMl90CQkJCW5tYm1fYml0bWFwX3Q7CisjZGVmaW5lIE5NQk1fQklUTUFQX1VOSVRfU0laRQkJCShzaXplb2Yobm1ibV9iaXRtYXBfdCkpCisjZGVmaW5lIE5NQk1fQklUTUFQX0JJVFNfUEVSX0JMT0NLCQkyCisjZGVmaW5lIE5NQk1fQklUTUFQX0JJVFNfUEVSX1VOSVQJCSg4ICogc2l6ZW9mKG5tYm1fYml0bWFwX3QpKQorI2RlZmluZSBOTUJNX0JJVE1BUF9CTE9DS1NfUEVSX1VOSVQJCShOTUJNX0JJVE1BUF9CSVRTX1BFUl9VTklUIC8gXAorCQkJCQkJIE5NQk1fQklUTUFQX0JJVFNfUEVSX0JMT0NLKQorCisjZGVmaW5lIE5NQk1fU1BBUkVfQkxPQ0tfTVVMVEkJCQkxCisjZGVmaW5lIE5NQk1fU1BBUkVfQkxPQ0tfRElWCQkJMgorI2RlZmluZSBOTUJNX1NQQVJFX0JMT0NLX01JTgkJCTIKKworI2RlZmluZSBOTUJNX01HTVRfRElWCQkJCTE2CisjZGVmaW5lIE5NQk1fTUdNVF9CTE9DS1NfTUlOCQkJMzIKKworI2RlZmluZSBOTUJNX1RSWV9DT1VOVAkJCQkzCisKKyNkZWZpbmUgQkxPQ0tfU1RfQkFECQkJCTAKKyNkZWZpbmUgQkxPQ0tfU1RfTkVFRF9SRU1BUAkJCTIKKyNkZWZpbmUgQkxPQ0tfU1RfR09PRAkJCQkzCisjZGVmaW5lIEJMT0NLX1NUX01BU0sJCQkJMworCitzdHJ1Y3Qgbm1ibV9oZWFkZXIgeworCXVpbnQzMl90IG1hZ2ljOworCXVpbnQzMl90IHZlcnNpb247CisJdWludDMyX3Qgc2l6ZTsKKwl1aW50MzJfdCBjaGVja3N1bTsKK307CisKK3N0cnVjdCBubWJtX3NpZ25hdHVyZSB7CisJc3RydWN0IG5tYm1faGVhZGVyIGhlYWRlcjsKKwl1aW50NjRfdCBuYW5kX3NpemU7CisJdWludDMyX3QgYmxvY2tfc2l6ZTsKKwl1aW50MzJfdCBwYWdlX3NpemU7CisJdWludDMyX3Qgc3BhcmVfc2l6ZTsKKwl1aW50MzJfdCBtZ210X3N0YXJ0X3BiOworCXVpbnQ4X3QgbWF4X3RyeV9jb3VudDsKKwl1aW50OF90IHBhZGRpbmdbM107Cit9OworCitzdHJ1Y3Qgbm1ibV9pbmZvX3RhYmxlX2hlYWRlciB7CisJc3RydWN0IG5tYm1faGVhZGVyIGhlYWRlcjsKKwl1aW50MzJfdCB3cml0ZV9jb3VudDsKKwl1aW50MzJfdCBzdGF0ZV90YWJsZV9vZmY7CisJdWludDMyX3QgbWFwcGluZ190YWJsZV9vZmY7CisJdWludDMyX3QgcGFkZGluZzsKK307CisKK3N0cnVjdCBubWJtX2luc3RhbmNlIHsKKwlzdHJ1Y3Qgbm1ibV9sb3dlcl9kZXZpY2UgbG93ZXI7CisKKwl1aW50MzJfdCByYXdwYWdlX3NpemU7CisJdWludDMyX3QgcmF3YmxvY2tfc2l6ZTsKKwl1aW50MzJfdCByYXdjaGlwX3NpemU7CisKKwl1aW50MzJfdCB3cml0ZXNpemVfbWFzazsKKwl1aW50MzJfdCBlcmFzZXNpemVfbWFzazsKKwl1aW50MTZfdCB3cml0ZXNpemVfc2hpZnQ7CisJdWludDE2X3QgZXJhc2VzaXplX3NoaWZ0OworCisJc3RydWN0IG5tYm1fc2lnbmF0dXJlIHNpZ25hdHVyZTsKKworCXVpbnQ4X3QgKmluZm9fdGFibGVfY2FjaGU7CisJdWludDMyX3QgaW5mb190YWJsZV9zaXplOworCXVpbnQzMl90IGluZm9fdGFibGVfc3BhcmVfYmxvY2tzOworCXN0cnVjdCBubWJtX2luZm9fdGFibGVfaGVhZGVyIGluZm9fdGFibGU7CisKKwlubWJtX2JpdG1hcF90ICpibG9ja19zdGF0ZTsKKwl1aW50MzJfdCBibG9ja19zdGF0ZV9jaGFuZ2VkOworCXVpbnQzMl90IHN0YXRlX3RhYmxlX3NpemU7CisKKwlpbnQzMl90ICpibG9ja19tYXBwaW5nOworCXVpbnQzMl90IGJsb2NrX21hcHBpbmdfY2hhbmdlZDsKKwl1aW50MzJfdCBtYXBwaW5nX3RhYmxlX3NpemU7CisKKwl1aW50OF90ICpwYWdlX2NhY2hlOworCisJaW50IHByb3RlY3RlZDsKKworCXVpbnQzMl90IGJsb2NrX2NvdW50OworCXVpbnQzMl90IGRhdGFfYmxvY2tfY291bnQ7CisKKwl1aW50MzJfdCBtZ210X3N0YXJ0X2JhOworCXVpbnQzMl90IG1haW5fdGFibGVfYmE7CisJdWludDMyX3QgYmFja3VwX3RhYmxlX2JhOworCXVpbnQzMl90IG1hcHBpbmdfYmxvY2tzX2JhOworCXVpbnQzMl90IG1hcHBpbmdfYmxvY2tzX3RvcF9iYTsKKwl1aW50MzJfdCBzaWduYXR1cmVfYmE7CisKKwllbnVtIG5tYm1fbG9nX2NhdGVnb3J5IGxvZ19kaXNwbGF5X2xldmVsOworfTsKKworLyogTG9nIHV0aWxpdGllcyAqLworI2RlZmluZSBubG9nX2RlYnVnKG5pLCBmbXQsIC4uLikgXAorCW5tYm1fbG9nKG5pLCBOTUJNX0xPR19ERUJVRywgZm10LCAjI19fVkFfQVJHU19fKQorCisjZGVmaW5lIG5sb2dfaW5mbyhuaSwgZm10LCAuLi4pIFwKKwlubWJtX2xvZyhuaSwgTk1CTV9MT0dfSU5GTywgZm10LCAjI19fVkFfQVJHU19fKQorCisjZGVmaW5lIG5sb2dfd2FybihuaSwgZm10LCAuLi4pIFwKKwlubWJtX2xvZyhuaSwgTk1CTV9MT0dfV0FSTiwgZm10LCAjI19fVkFfQVJHU19fKQorCisjZGVmaW5lIG5sb2dfZXJyKG5pLCBmbXQsIC4uLikgXAorCW5tYm1fbG9nKG5pLCBOTUJNX0xPR19FUlIsIGZtdCwgIyNfX1ZBX0FSR1NfXykKKworI2RlZmluZSBubG9nX2VtZXJnKG5pLCBmbXQsIC4uLikgXAorCW5tYm1fbG9nKG5pLCBOTUJNX0xPR19FTUVSRywgZm10LCAjI19fVkFfQVJHU19fKQorCisjZW5kaWYgLyogX05NQk1fUFJJVkFURV9IXyAqLwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMtNS40L2luY2x1ZGUvbm1ibS9ubWJtLW9zLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy01LjQvaW5jbHVkZS9ubWJtL25tYm0tb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2FlODU0Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMtNS40L2luY2x1ZGUvbm1ibS9ubWJtLW9zLmgKQEAgLTAsMCArMSw2OSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWVkaWFUZWsgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIE9TLWRlcGVuZGVudCBkZWZpbml0aW9ucyBmb3IgTkFORCBNYXBwZWQtYmxvY2sgTWFuYWdlbWVudCAoTk1CTSkKKyAqCisgKiBBdXRob3I6IFdlaWppZSBHYW8gPHdlaWppZS5nYW9AbWVkaWF0ZWsuY29tPgorICovCisKKyNpZm5kZWYgX05NQk1fT1NfSF8KKyNkZWZpbmUgX05NQk1fT1NfSF8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbWl0cy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKworc3RhdGljIGlubGluZSB1aW50MzJfdCBubWJtX2NyYzMyKHVpbnQzMl90IGNyY3ZhbCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwl1aW50IGNoa3N6OworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSBidWY7CisKKwl3aGlsZSAoc2l6ZSkgeworCQlpZiAoc2l6ZSA+IFVJTlRfTUFYKQorCQkJY2hrc3ogPSBVSU5UX01BWDsKKwkJZWxzZQorCQkJY2hrc3ogPSAodWludClzaXplOworCisJCWNyY3ZhbCA9IGNyYzMyX2xlKGNyY3ZhbCwgcCwgY2hrc3opOworCQlzaXplIC09IGNoa3N6OworCQlwICs9IGNoa3N6OworCX0KKworCXJldHVybiBjcmN2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3Qgbm1ibV9sbGRpdih1aW50NjRfdCBkaXZpZGVuZCwgdWludDMyX3QgZGl2aXNvcikKK3sKKyNpZiBCSVRTX1BFUl9MT05HID09IDY0CisJcmV0dXJuIGRpdmlkZW5kIC8gZGl2aXNvcjsKKyNlbHNlCisJZG9fZGl2KGRpdmlkZW5kLCBkaXZpc29yKTsKKwlyZXR1cm4gZGl2aWRlbmQ7CisjZW5kaWYKK30KKworI2RlZmluZSBXQVRDSERPR19SRVNFVCgpCisKKyNpZmRlZiBDT05GSUdfTk1CTV9MT0dfTEVWRUxfREVCVUcKKyNkZWZpbmUgTk1CTV9ERUZBVUxUX0xPR19MRVZFTAkJMAorI2VsaWYgZGVmaW5lZChOTUJNX0xPR19MRVZFTF9JTkZPKQorI2RlZmluZSBOTUJNX0RFRkFVTFRfTE9HX0xFVkVMCQkxCisjZWxpZiBkZWZpbmVkKE5NQk1fTE9HX0xFVkVMX1dBUk4pCisjZGVmaW5lIE5NQk1fREVGQVVMVF9MT0dfTEVWRUwJCTIKKyNlbGlmIGRlZmluZWQoTk1CTV9MT0dfTEVWRUxfRVJSKQorI2RlZmluZSBOTUJNX0RFRkFVTFRfTE9HX0xFVkVMCQkzCisjZWxpZiBkZWZpbmVkKE5NQk1fTE9HX0xFVkVMX0VNRVJHKQorI2RlZmluZSBOTUJNX0RFRkFVTFRfTE9HX0xFVkVMCQk0CisjZWxpZiBkZWZpbmVkKE5NQk1fTE9HX0xFVkVMX05PTkUpCisjZGVmaW5lIE5NQk1fREVGQVVMVF9MT0dfTEVWRUwJCTUKKyNlbHNlCisjZGVmaW5lIE5NQk1fREVGQVVMVF9MT0dfTEVWRUwJCTEKKyNlbmRpZgorCisjZW5kaWYgLyogX05NQk1fT1NfSF8gKi8KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzLTUuNC9pbmNsdWRlL25tYm0vbm1ibS5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMtNS40L2luY2x1ZGUvbm1ibS9ubWJtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA0MDA5OAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzLTUuNC9pbmNsdWRlL25tYm0vbm1ibS5oCkBAIC0wLDAgKzEsMTAyIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2UgKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWVkaWFUZWsgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIERlZmluaXRpb25zIGZvciBOQU5EIE1hcHBlZC1ibG9jayBNYW5hZ2VtZW50IChOTUJNKQorICoKKyAqIEF1dGhvcjogV2VpamllIEdhbyA8d2VpamllLmdhb0BtZWRpYXRlay5jb20+CisgKi8KKworI2lmbmRlZiBfTk1CTV9IXworI2RlZmluZSBfTk1CTV9IXworCisjaW5jbHVkZSA8bm1ibS9ubWJtLW9zLmg+CisKK2VudW0gbm1ibV9sb2dfY2F0ZWdvcnkgeworCU5NQk1fTE9HX0RFQlVHLAorCU5NQk1fTE9HX0lORk8sCisJTk1CTV9MT0dfV0FSTiwKKwlOTUJNX0xPR19FUlIsCisJTk1CTV9MT0dfRU1FUkcsCisKKwlfX05NQk1fTE9HX01BWAorfTsKKworZW51bSBubWJtX29vYl9tb2RlIHsKKwlOTUJNX01PREVfUExBQ0VfT09CLAorCU5NQk1fTU9ERV9BVVRPX09PQiwKKwlOTUJNX01PREVfUkFXLAorCisJX19OTUJNX01PREVfTUFYCit9OworCitzdHJ1Y3Qgbm1ibV9sb3dlcl9kZXZpY2UgeworCXVpbnQzMl90IG1heF9yYXRpbzsKKwl1aW50MzJfdCBtYXhfcmVzZXJ2ZWRfYmxvY2tzOworCWludCBmbGFnczsKKworCXVpbnQ2NF90IHNpemU7CisJdWludDMyX3QgZXJhc2VzaXplOworCXVpbnQzMl90IHdyaXRlc2l6ZTsKKwl1aW50MzJfdCBvb2JzaXplOworCXVpbnQzMl90IG9vYmF2YWlsOworCisJdm9pZCAqYXJnOworCWludCAoKnJlc2V0X2NoaXApKHZvaWQgKmFyZyk7CisKKwkvKgorCSAqIHJlYWRfcGFnZToKKwkgKiAgICByZXR1cm4gMCBpZiBzdWNjZWVkcworCSAqICAgIHJldHVybiBwb3NpdGl2ZSBudW1iZXIgZm9yIGVjYyBlcnJvcgorCSAqICAgIHJldHVybiBuZWdhdGl2ZSBudW1iZXIgZm9yIG90aGVyIGVycm9ycworCSAqLworCWludCAoKnJlYWRfcGFnZSkodm9pZCAqYXJnLCB1aW50NjRfdCBhZGRyLCB2b2lkICpidWYsIHZvaWQgKm9vYiwgZW51bSBubWJtX29vYl9tb2RlIG1vZGUpOworCWludCAoKndyaXRlX3BhZ2UpKHZvaWQgKmFyZywgdWludDY0X3QgYWRkciwgY29uc3Qgdm9pZCAqYnVmLCBjb25zdCB2b2lkICpvb2IsIGVudW0gbm1ibV9vb2JfbW9kZSBtb2RlKTsKKwlpbnQgKCplcmFzZV9ibG9jaykodm9pZCAqYXJnLCB1aW50NjRfdCBhZGRyKTsKKworCWludCAoKmlzX2JhZF9ibG9jaykodm9pZCAqYXJnLCB1aW50NjRfdCBhZGRyKTsKKwlpbnQgKCptYXJrX2JhZF9ibG9jaykodm9pZCAqYXJnLCB1aW50NjRfdCBhZGRyKTsKKworCS8qIE9TLWRlcGVuZGVudCBsb2dnaW5nIGZ1bmN0aW9uICovCisJdm9pZCAoKmxvZ3ByaW50KSh2b2lkICphcmcsIGVudW0gbm1ibV9sb2dfY2F0ZWdvcnkgbGV2ZWwsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCk7Cit9OworCitzdHJ1Y3Qgbm1ibV9pbnN0YW5jZTsKKworLyogQ3JlYXRlIE5NQk0gaWYgbWFuYWdlbWVudCBhcmVhIG5vdCBmb3VuZCwgb3Igbm90IGNvbXBsZXRlICovCisjZGVmaW5lIE5NQk1fRl9DUkVBVEUJCQkweDAxCisKKy8qIEVtcHR5IHBhZ2UgaXMgYWxzbyBwcm90ZWN0ZWQgYnkgRUNDLCBhbmQgYml0ZmxpcChzKSBjYW4gYmUgY29ycmVjdGVkICovCisjZGVmaW5lIE5NQk1fRl9FTVBUWV9QQUdFX0VDQ19PSwkweDAyCisKKy8qIERvIG5vdCB3cml0ZSBhbnl0aGluZyBiYWNrIHRvIGZsYXNoICovCisjZGVmaW5lIE5NQk1fRl9SRUFEX09OTFkJCTB4MDQKKworc2l6ZV90IG5tYm1fY2FsY19zdHJ1Y3R1cmVfc2l6ZShzdHJ1Y3Qgbm1ibV9sb3dlcl9kZXZpY2UgKm5sZCk7CitpbnQgbm1ibV9hdHRhY2goc3RydWN0IG5tYm1fbG93ZXJfZGV2aWNlICpubGQsIHN0cnVjdCBubWJtX2luc3RhbmNlICpuaSk7CitpbnQgbm1ibV9kZXRhY2goc3RydWN0IG5tYm1faW5zdGFuY2UgKm5pKTsKKworZW51bSBubWJtX2xvZ19jYXRlZ29yeSBubWJtX3NldF9sb2dfbGV2ZWwoc3RydWN0IG5tYm1faW5zdGFuY2UgKm5pLAorCQkJCQkgIGVudW0gbm1ibV9sb2dfY2F0ZWdvcnkgbGV2ZWwpOworCitpbnQgbm1ibV9lcmFzZV9ibG9ja19yYW5nZShzdHJ1Y3Qgbm1ibV9pbnN0YW5jZSAqbmksIHVpbnQ2NF90IGFkZHIsCisJCQkgICB1aW50NjRfdCBzaXplLCB1aW50NjRfdCAqZmFpbGVkX2FkZHIpOworaW50IG5tYm1fcmVhZF9zaW5nbGVfcGFnZShzdHJ1Y3Qgbm1ibV9pbnN0YW5jZSAqbmksIHVpbnQ2NF90IGFkZHIsIHZvaWQgKmRhdGEsCisJCQkgIHZvaWQgKm9vYiwgZW51bSBubWJtX29vYl9tb2RlIG1vZGUpOworaW50IG5tYm1fcmVhZF9yYW5nZShzdHJ1Y3Qgbm1ibV9pbnN0YW5jZSAqbmksIHVpbnQ2NF90IGFkZHIsIHNpemVfdCBzaXplLAorCQkgICAgdm9pZCAqZGF0YSwgZW51bSBubWJtX29vYl9tb2RlIG1vZGUsIHNpemVfdCAqcmV0bGVuKTsKK2ludCBubWJtX3dyaXRlX3NpbmdsZV9wYWdlKHN0cnVjdCBubWJtX2luc3RhbmNlICpuaSwgdWludDY0X3QgYWRkciwKKwkJCSAgIGNvbnN0IHZvaWQgKmRhdGEsIGNvbnN0IHZvaWQgKm9vYiwKKwkJCSAgIGVudW0gbm1ibV9vb2JfbW9kZSBtb2RlKTsKK2ludCBubWJtX3dyaXRlX3JhbmdlKHN0cnVjdCBubWJtX2luc3RhbmNlICpuaSwgdWludDY0X3QgYWRkciwgc2l6ZV90IHNpemUsCisJCSAgICAgY29uc3Qgdm9pZCAqZGF0YSwgZW51bSBubWJtX29vYl9tb2RlIG1vZGUsCisJCSAgICAgc2l6ZV90ICpyZXRsZW4pOworCitpbnQgbm1ibV9jaGVja19iYWRfYmxvY2soc3RydWN0IG5tYm1faW5zdGFuY2UgKm5pLCB1aW50NjRfdCBhZGRyKTsKK2ludCBubWJtX21hcmtfYmFkX2Jsb2NrKHN0cnVjdCBubWJtX2luc3RhbmNlICpuaSwgdWludDY0X3QgYWRkcik7CisKK3VpbnQ2NF90IG5tYm1fZ2V0X2F2YWlsX3NpemUoc3RydWN0IG5tYm1faW5zdGFuY2UgKm5pKTsKKworaW50IG5tYm1fZ2V0X2xvd2VyX2RldmljZShzdHJ1Y3Qgbm1ibV9pbnN0YW5jZSAqbmksIHN0cnVjdCBubWJtX2xvd2VyX2RldmljZSAqbmxkKTsKKworI2VuZGlmIC8qIF9OTUJNX0hfICovCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbXRkL3BhcnRpdGlvbnMvb3BlbndydCx1aW1hZ2UueWFtbCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tdGQvcGFydGl0aW9ucy9vcGVud3J0LHVpbWFnZS55YW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNTJhYjEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbXRkL3BhcnRpdGlvbnMvb3BlbndydCx1aW1hZ2UueWFtbApAQCAtMCwwICsxLDkxIEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlCislWUFNTCAxLjIKKy0tLQorJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9tdGQvcGFydGl0aW9ucy9vcGVud3J0LHVpbWFnZS55YW1sIworJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjCisKK3RpdGxlOiBPcGVuV3J0IHZhcmlhdGlvbnMgb2YgVS1Cb290IEltYWdlIHBhcnRpdGlvbnMKKworbWFpbnRhaW5lcnM6CisgIC0gQmrDuHJuIE1vcmsgPGJqb3JuQG1vcmsubm8+CisKK2Rlc2NyaXB0aW9uOiB8CisgIFRoZSBpbWFnZSBmb3JtYXQgZGVmaW5lZCBieSB0aGUgYm9vdCBsb2FkZXIgIkRhcyBVLUJvb3QiIGlzIG9mdGVuCisgIG1vZGlmaWVkIG9yIGV4dGVuZGVkIGJ5IGRldmljZSB2ZW5kb3JzLiBUaGlzIGRlZmluZXMgYSBmZXcgb3B0aW9uYWwKKyAgcHJvcGVydGllcyB3aGljaCBjYW4gYmUgdXNlZCB0byBkZXNjcmliZSBzdWNoIG1vZGlmaWNhdGlvbnMuCisKKyMgcGFydGl0aW9uLnR4dCBkZWZpbmVzIGNvbW1vbiBwcm9wZXJ0aWVzLCBidXQgaGFzIG5vdCB5ZXQgYmVlbgorIyBjb252ZXJ0ZWQgdG8gWUFNTAorI2FsbE9mOgorIyAgLSAkcmVmOiAuLi9wYXJ0aXRpb24ueWFtbCMKKworcHJvcGVydGllczoKKyAgY29tcGF0aWJsZToKKyAgICBpdGVtczoKKyAgICAgIC0gZW51bToKKyAgICAgICAgICAtIG9wZW53cnQsdWltYWdlCisgICAgICAtIGNvbnN0OiBkZW54LHVpbWFnZQorCisgIG9wZW53cnQscGFkZGluZzoKKyAgICBkZXNjcmlwdGlvbjogTnVtYmVyIG9mIHBhZGRpbmcgYnl0ZXMgYmV0d2VlbiBoZWFkZXIgYW5kIGRhdGEKKyAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy91aW50MzIKKyAgICBkZWZhdWx0OiAwCisKKyAgb3BlbndydCxpaC1tYWdpYzoKKyAgICBkZXNjcmlwdGlvbjogVS1Cb290IEltYWdlIEhlYWRlciBtYWdpYyBudW1iZXIuCisgICAgJHJlZjogL3NjaGVtYXMvdHlwZXMueWFtbCMvZGVmaW5pdGlvbnMvdWludDMyCisgICAgZGVmYXVsdDogMHgyNzA1MTk1NiAjIElIX01BR0lDCisKKyAgb3BlbndydCxpaC10eXBlOgorICAgIGRlc2NyaXB0aW9uOiBVLUJvb3QgSW1hZ2UgdHlwZQorICAgICRyZWY6IC9zY2hlbWFzL3R5cGVzLnlhbWwjL2RlZmluaXRpb25zL3VpbnQzMgorICAgIGRlZmF1bHQ6IDIgIyBJSF9UWVBFX0tFUk5FTAorCisgIG9wZW53cnQsb2Zmc2V0OgorICAgIGRlc2NyaXB0aW9uOgorICAgICAgT2Zmc2V0IGJldHdlZW4gcGFydGl0aW9uIHN0YXJ0IGFuZCBVLUJvb3QgSW1hZ2UgaW4gYnl0ZXMKKyAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy91aW50MzIKKyAgICBkZWZhdWx0OiAwCisKKyAgb3BlbndydCxwYXJ0aXRpb24tbWFnaWM6CisgICAgZGVzY3JpcHRpb246CisgICAgICBNYWdpYyBudW1iZXIgZm91bmQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBwYXJ0aXRpb24uIFdpbGwgb25seSBiZQorICAgICAgdmFsaWRhdGVkIGlmIGJvdGggdGhpcyBwcm9wZXJ0eSBhbmQgb3BlbndydCxvZmZzZXQgaXMgbm9uLXplcm8KKyAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9kZWZpbml0aW9ucy91aW50MzIKKyAgICBkZWZhdWx0OiAwCisKK3JlcXVpcmVkOgorICAtIGNvbXBhdGlibGUKKyAgLSByZWcKKworI3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2UKK2FkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZQorCitleGFtcGxlczoKKyAgLSB8CisgICAgLy8gZGV2aWNlIHdpdGggbm9uLWRlZmF1bHQgbWFnaWMKKyAgICBwYXJ0aXRpb25AMzAwMDAwIHsKKyAgICAgICAgICBjb21wYXRpYmxlID0gIm9wZW53cnQsdWltYWdlIiwgImRlbngsdWltYWdlIjsKKyAgICAgICAgICByZWcgPSA8MHgwMDMwMDAwMCAweGU4MDAwMD47CisgICAgICAgICAgbGFiZWwgPSAiZmlybXdhcmUiOworICAgICAgICAgIG9wZW53cnQsaWgtbWFnaWMgPSA8MHg0ZTQ3NDUyMD47CisgICAgfTsKKyAgLSB8CisgICAgLy8gZGV2aWNlIHdpdGggVS1Cb290IEltYWdlIGF0IGFuIG9mZnNldCwgd2l0aCBhIHBhcnRpdGlvbiBtYWdpYyB2YWx1ZQorICAgIHBhcnRpdGlvbkA3MDAwMCB7CisgICAgICAgICAgY29tcGF0aWJsZSA9ICJvcGVud3J0LHVpbWFnZSIsICJkZW54LHVpbWFnZSI7CisgICAgICAgICAgcmVnID0gPDB4MDAwNzAwMDAgMHgwMDc5MDAwMD47CisgICAgICAgICAgbGFiZWwgPSAiZmlybXdhcmUiOworICAgICAgICAgIG9wZW53cnQsb2Zmc2V0ID0gPDIwPjsKKyAgICAgICAgICBvcGVud3J0LHBhcnRpdGlvbi1tYWdpYyA9IDwweDQzNTM1OTUzPjsKKyAgICB9OworICAtIHwKKyAgICAvLyBkZXZpY2UgdXNpbmcgYSBub24tZGVmYXVsdCBpbWFnZSB0eXBlCisgICAgI2luY2x1ZGUgImR0LWJpbmRpbmdzL210ZC9wYXJ0aXRpb25zL3VpbWFnZS5oIgorICAgIHBhcnRpdGlvbkA2YzAwMDAgeworICAgICAgICAgIGNvbXBhdGlibGUgPSAib3BlbndydCx1aW1hZ2UiLCAiZGVueCx1aW1hZ2UiOworICAgICAgICAgIHJlZyA9IDwweDZjMDAwMCAweDE5MDAwMDA+OworICAgICAgICAgIGxhYmVsID0gImZpcm13YXJlIjsKKyAgICAgICAgICBvcGVud3J0LGloLW1hZ2ljID0gPDB4MzMzNzMwMzM+OworICAgICAgICAgIG9wZW53cnQsaWgtdHlwZSA9IDxJSF9UWVBFX0ZJTEVTWVNURU0+OworICAgIH07CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWRtNjk5Ni50eHQgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWRtNjk5Ni50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI1OWYxZAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9hZG02OTk2LnR4dApAQCAtMCwwICsxLDExMCBAQAorLS0tLS0tLSAKKworQURNNjk5NkZDIC8gQURNNjk5Nk0gc3dpdGNoIGNoaXAgZHJpdmVyCisKKworMS4gR2VuZXJhbCBpbmZvcm1hdGlvbgorCisgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBGQyBhbmQgTSBtb2RlbHMgb25seS4gVGhlIEFETTY5OTZGIGFuZCBMIGFyZQorICBjb21wbGV0ZWx5IGRpZmZlcmVudCBjaGlwcy4KKyAgCisgIFN1cHBvcnQgZm9yIHRoZSBGQyBtb2RlbCBpcyBleHRyZW1lbHkgbGltaXRlZCBhdCB0aGUgbW9tZW50LiBUaGVyZSBpcyBubyBWTEFOCisgIHN1cHBvcnQgYXMgb2YgeWV0LiBUaGUgZHJpdmVyIHdpbGwgbm90IG9mZmVyIGFuIHN3Y29uZmlnIGludGVyZmFjZSBmb3IgdGhlIEZDCisgIGNoaXAuCisgCisxLjEgVkxBTiBJRHMKKworICBJdCBpcyBwb3NzaWJsZSB0byBkZWZpbmUgMTYgZGlmZmVyZW50IFZMQU5zLiBFdmVyeSBWTEFOIGhhcyBhbiBpZGVudGlmaWVyLCBpdHMKKyAgVkxBTiBJRC4gSXQgaXMgZWFzaWVzdCBpZiB5b3UgdXNlIGF0IG1vc3QgVkxBTiBJRHMgMC0xNS4gSW4gdGhhdCBjYXNlLCB0aGUKKyAgc3djb25maWcgYmFzZWQgY29uZmlndXJhdGlvbiBpcyB2ZXJ5IHN0cmFpZ2h0Zm9yd2FyZC4gVG8gZGVmaW5lIHR3byBWTEFOcyB3aXRoCisgIElEcyA0IGFuZCA1LCB5b3UgY2FuIGludm9rZSwgZm9yIGV4YW1wbGU6CisgIAorICAgICAgIyBzd2NvbmZpZyBkZXYgZXRoWCB2bGFuIDQgc2V0IHBvcnRzICcwIDF0IDIgNXQnIAorICAgICAgIyBzd2NvbmZpZyBkZXYgZXRoWCB2bGFuIDUgc2V0IHBvcnRzICcwdCAxdCA1dCcKKyAgCisgIFRoZSBzd2NvbmZpZyBmcmFtZXdvcmsgd2lsbCBhdXRvbWF0aWNhbGx5IGludm9rZSAncG9ydCBZIHNldCBwdmlkIFonIGZvciBldmVyeQorICBwb3J0IHRoYXQgaXMgYW4gdW50YWdnZWQgbWVtYmVyIG9mIFZMQU4gWSwgc2V0dGluZyBpdHMgUHJpbWFyeSBWTEFOIElELiBJbgorICB0aGlzIGV4YW1wbGUsIHBvcnRzIDAgYW5kIDIgd291bGQgZ2V0ICJwdmlkIDQiLiBUaGUgUHJpbWFyeSBWTEFOIElEIG9mIGEgcG9ydAorICBpcyB0aGUgVkxBTiBJRCBhc3NvY2lhdGVkIHdpdGggdW50YWdnZWQgcGFja2V0cyBjb21pbmcgaW4gb24gdGhhdCBwb3J0LgorICAKKyAgQnV0IGlmIHlvdSB3aXNoIHRvIHVzZSBWTEFOIElEcyBvdXRzaWRlIHRoZSByYW5nZSAwLTE1LCB0aGlzIGF1dG9tYXRpYworICBiZWhhdmlvdXIgb2YgdGhlIHN3Y29uZmlnIGZyYW1ld29yayBiZWNvbWVzIGEgcHJvYmxlbS4gVGhlIDE2IFZMQU5zIHRoYXQKKyAgc3djb25maWcgY2FuIGNvbmZpZ3VyZSBvbiB0aGUgQURNNjk5NiBhbHNvIGhhdmUgYSAidmlkIiBzZXR0aW5nLiBCeSBkZWZhdWx0LAorICB0aGlzIGlzIHRoZSBzYW1lIGFzIHRoZSBudW1iZXIgb2YgdGhlIFZMQU4gZW50cnksIHRvIG1ha2UgdGhlIHNpbXBsZSBiZWhhdmlvdXIKKyAgYWJvdmUgcG9zc2libGUuIFRvIHN0aWxsIHN1cHBvcnQgYSBWTEFOIHdpdGggYSBWTEFOIElEIGhpZ2hlciB0aGFuIDE1CisgIChwcmVzdW1hYmx5IGJlY2F1c2UgeW91IGFyZSBpbiBhIG5ldHdvcmsgd2hlcmUgc3VjaCBWTEFOIElEcyBhcmUgYWxyZWFkeSBpbgorICB1c2UpLCB5b3UgY2FuIGNoYW5nZSB0aGUgInZpZCIgc2V0dGluZyBvZiB0aGUgVkxBTiB0byBhbnl0aGluZyBpbiB0aGUgcmFuZ2UKKyAgMC0xMDIzLiBCdXQgc3VwcG9zZSB5b3UgZGlkIHRoZSBmb2xsb3dpbmc6CisgIAorICAgICAgIyBzd2NvbmZpZyBkZXYgZXRoWCB2bGFuIDAgc2V0IHZpZCA5OTggCisgICAgICAjIHN3Y29uZmlnIGRldiBldGhYIHZsYW4gMCBzZXQgcG9ydHMgJzAgMiA1dCcKKyAKKyAgTm93IHRoZSBzd2NvbmZpZyBmcmFtZXdvcmsgd2lsbCBpc3N1ZSAncG9ydCAwIHNldCBwdmlkIDAnIGFuZCAncG9ydCAyIHNldCBwdmlkCisgIDAnLiBCdXQgdGhlICJwdmlkIiBzaG91bGQgYmUgc2V0IHRvIDk5OCwgc28geW91IGFyZSByZXNwb25zaWJsZSBmb3IgbWFudWFsbHkKKyAgZml4aW5nIHRoaXMhCisKKzEuMiBWTEFOIGZpbHRlcmluZworCisgIFRoZSBzd2l0Y2ggaXMgY29uZmlndXJlZCB0byBhcHBseSBzb3VyY2UgcG9ydCBmaWx0ZXJpbmcuIFRoaXMgbWVhbnMgdGhhdAorICBwYWNrZXRzIGFyZSBvbmx5IGFjY2VwdGVkIHdoZW4gdGhlIHBvcnQgdGhlIHBhY2tldHMgY2FtZSBpbiBvbiBpcyBhIG1lbWJlciBvZgorICB0aGUgVkxBTiB0aGUgcGFja2V0IHNob3VsZCBnbyB0by4KKworICBPbmx5IG1lbWJlcnNoaXAgb2YgYSBWTEFOIGlzIHRlc3RlZCwgaXQgZG9lcyBub3QgbWF0dGVyIHdoZXRoZXIgaXQgaXMgYSB0YWdnZWQKKyAgb3IgdW50YWdnZWQgbWVtYmVyc2hpcC4KKworICBGb3IgdW50YWdnZWQgcGFja2V0cywgdGhlIGRlc3RpbmF0aW9uIFZMQU4gaXMgdGhlIFByaW1hcnkgVkxBTiBJRCBvZiB0aGUKKyAgaW5jb21pbmcgcG9ydC4gU28gaWYgdGhlIFBWSUQgb2YgYSBwb3J0IGlzIDAsIGJ1dCB0aGF0IHBvcnQgaXMgbm90IGEgbWVtYmVyIG9mCisgIHRoZSBWTEFOIHdpdGggSUQgMCwgdGhpcyBtZWFucyB0aGF0IHVudGFnZ2VkIHBhY2tldHMgb24gdGhhdCBwb3J0IGFyZSBkcm9wcGVkLgorICBUaGlzIGNhbiBiZSB1c2VkIGFzIGEgcm91bmRhYm91dCB3YXkgb2YgZHJvcHBpbmcgdW50YWdnZWQgcGFja2V0cyBmcm9tIGEgcG9ydCwKKyAgYSBtb2RlIG9mdGVuIHJlZmVycmVkIHRvIGFzICJBZG1pdCBvbmx5IHRhZ2dlZCBwYWNrZXRzIi4KKworMS4zIFJlc2V0CisKKyAgVGhlIHR3byBzdXBwb3J0ZWQgY2hpcCBtb2RlbHMgZG8gbm90IGhhdmUgYSBzb2Z3YXJlLWluaXRpYXRlZCByZXNldC4gV2hlbiB0aGUKKyAgZHJpdmVyIGlzIGluaXRpYWxpc2VkLCBhcyB3ZWxsIGFzIHdoZW4gdGhlICdyZXNldCcgc3djb25maWcgb3B0aW9uIGlzIGludm9rZWQsCisgIHRoZSBkcml2ZXIgd2lsbCBzZXQgdGhvc2UgcmVnaXN0ZXJzIGl0IGtub3dzIGFib3V0IGFuZCBzdXBwb3J0cyB0byB0aGUgY29ycmVjdAorICBkZWZhdWx0IHZhbHVlLiBCdXQgdGhlcmUgYXJlIGEgbG90IG9mIHJlZ2lzdGVycyBpbiB0aGUgY2hpcCB0aGF0IHRoZSBkcml2ZXIKKyAgZG9lcyBub3Qgc3VwcG9ydC4gSWYgc29tZXRoaW5nIGNoYW5nZWQgdGhvc2UgcmVnaXN0ZXJzLCBpbnZva2luZyAncmVzZXQnIG9yCisgIHBlcmZvcm1pbmcgYSB3YXJtIHJlYm9vdCBtaWdodCBzdGlsbCBsZWF2ZSB0aGUgY2hpcCBpbiBhICJicm9rZW4iIHN0YXRlLiBPbmx5CisgIGEgaGFyZHdhcmUgcmVzZXQgd2lsbCBicmluZyBpdCBiYWNrIGluIHRoZSBkZWZhdWx0IHN0YXRlLgorCisyLiBUZWNobmljYWwgZGV0YWlscyBvbiBQSFlzIGFuZCB0aGUgQURNNjk5NgorCisgIEZyb20gdGhlIHZpZXdwb2ludCBvZiB0aGUgTGludXgga2VybmVsLCBpdCBpcyBjb21tb24gdGhhdCBhbiBFdGhlcm5ldCBhZGFwdGVyCisgIGNhbiBiZSBzZWVuIGFzIGEgc2VwYXJhdGUgTUFDIGVudGl0eSBhbmQgYSBzZXBhcmF0ZSBQSFkgZW50aXR5LiBUaGUgUEhZIGVudGl0eQorICBjYW4gYmUgcXVlcmllZCBhbmQgc2V0IHRocm91Z2ggcmVnaXN0ZXJzIGFjY2Vzc2libGUgdmlhIGFuIE1ESU8gYnVzLiBBIFBIWQorICBub3JtYWxseSBoYXMgYSBzaW5nbGUgYWRkcmVzcyBvbiB0aGF0IGJ1cywgaW4gdGhlIHJhbmdlIDAgdGhyb3VnaCAzMS4KKworICBUaGUgQURNNjk5NiBoYXMgc3BlY2lhbC1wdXJwb3NlIHJlZ2lzdGVycyBpbiB0aGUgcmFuZ2Ugb2YgUEhZcyAwIHRocm91Z2ggMTAuCisgIEV2ZW4gdGhvdWdoIGFsbCB0aGVzZSByZWdpc3RlcnMgY29udHJvbCBhIHNpbmdsZSBBRE02OTk2IGNoaXAsIHRoZSBMaW51eAorICBrZXJuZWwgdHJlYXRzIHRoaXMgYXMgMTEgc2VwYXJhdGUgUEhZcy4gIFRoZSBkcml2ZXIgd2lsbCBiaW5kIHRvIHRoZXNlCisgIGFkZHJlc3NlcyB0byBwcmV2ZW50IGEgZGlmZmVyZW50IFBIWSBkcml2ZXIgZnJvbSBiaW5kaW5nIGFuZCBjb3JydXB0aW5nIHRoZXNlCisgIHJlZ2lzdGVycy4KKworICBXaGF0IExpbnV4IHNlZXMgYXMgdGhlIFBIWSBvbiBhZGRyZXNzIDAgaXMgbWVhbnQgZm9yIHRoZSBFdGhlcm5ldCBNQUMKKyAgY29ubmVjdGVkIHRvIHRoZSBDUFUgcG9ydCBvZiB0aGUgQURNNjk5NiBzd2l0Y2ggY2hpcCAocG9ydCA1KS4gVGhpcyBpcyB0aGUKKyAgRXRoZXJuZXQgTUFDIHlvdSB3aWxsIHVzZSB0byBzZW5kIGFuZCByZWNlaXZlIGRhdGEgdGhyb3VnaCB0aGUgc3dpdGNoLgorCisgIFRoZSBQSFlzIGF0IGFkZHJlc3NlcyAxNiB0aHJvdWdoIDIwIG1hcCB0byB0aGUgUEhZcyBvbiBwb3J0cyAwIHRocm91Z2ggNCBvZgorICB0aGUgc3dpdGNoIGNoaXAuIFRoZXNlIGNhbiBiZSBhY2Nlc3NlZCB3aXRoIHRoZSBHZW5lcmljIFBIWSBkcml2ZXIsIGFzIHRoZQorICByZWdpc3RlcnMgaGF2ZSB0aGUgY29tbW9uIGxheW91dC4KKworICBJZiBhIHNlY29uZCBFdGhlcm5ldCBNQUMgb24geW91ciBib2FyZCBpcyB3aXJlZCB0byB0aGUgcG9ydCA0IFBIWSwgdGhhdCBNQUMKKyAgbmVlZHMgdG8gYmluZCB0byBQSFkgYWRkcmVzcyAyMCBmb3IgdGhlIHBvcnQgdG8gd29yayBjb3JyZWN0bHkuCisKKyAgVGhlIEFETTY5OTYgc3dpdGNoIGRyaXZlciB3aWxsIHJlc2V0IHRoZSBwb3J0cyAwIHRocm91Z2ggMyBvbiBzdGFydHVwIGFuZCB3aGVuCisgICdyZXNldCcgaXMgaW52b2tlZC4gVGhpcyBjb3VsZCBjbGFzaCB3aXRoIGEgZGlmZmVyZW50IFBIWSBkcml2ZXIgaWYgdGhlIGtlcm5lbAorICBiaW5kcyBhIFBIWSBkcml2ZXIgdG8gYWRkcmVzcyAxNiB0aHJvdWdoIDE5LgorCisgIElmIExpbnV4IGJpbmRzIGEgUEhZIG9uIGFkZHJlc3NlcyAxIHRocm91Z2ggMTAgdG8gYW4gRXRoZXJuZXQgTUFDLCB0aGUgQURNNjk5NgorICBkcml2ZXIgd2lsbCBzaW1wbHkgYWx3YXlzIHJlcG9ydCBhIGNvbm5lY3RlZCAxMDAgTWJpdC9zIGZ1bGwtZHVwbGV4IGxpbmsgZm9yCisgIHRoYXQgUEhZLCBhbmQgcHJvdmlkZSBubyBvdGhlciBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIG1vc3QgbGlrZWx5IG5vdCB3aGF0IHlvdQorICB3YW50LiBTbyBpZiB5b3Ugc2VlIGEgbWVzc2FnZSBpbiB5b3VyIGxvZworCisgIAlldGhYOiBQSFkgb3ZlcmxhcHMgQURNNjk5NiwgcHJvdmlkaW5nIGZpeGVkIFBIWSB5eS4KKworICBUaGlzIGlzIG1vc3QgbGlrZWx5IGFuIGluZGljYXRpb24gdGhhdCBldGhYIHdpbGwgbm90IHdvcmsgcHJvcGVybHksIGFuZCB5b3VyCisgIGtlcm5lbCBuZWVkcyB0byBiZSBjb25maWd1cmVkIHRvIGF0dGFjaCBhIGRpZmZlcmVudCBQSFkgdG8gdGhhdCBFdGhlcm5ldCBNQUMuCisKKyAgQ29udHJvbGxpbmcgdGhlIG1hcHBpbmcgYmV0d2VlbiBNQUNzIGFuZCBQSFlzIGlzIHVzdWFsbHkgZG9uZSBpbiBwbGF0Zm9ybS0gb3IKKyAgYm9hcmQtc3BlY2lmaWMgZml4dXAgY29kZS4gVGhlIEFETTY5OTYgZHJpdmVyIGhhcyBubyBpbmZsdWVuY2Ugb3ZlciB0aGlzLgpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvYXJjaC9taXBzL2Z3L215bG9hZGVyL01ha2VmaWxlIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvYXJjaC9taXBzL2Z3L215bG9hZGVyL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0YWNmZDAKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9hcmNoL21pcHMvZncvbXlsb2FkZXIvTWFrZWZpbGUKQEAgLTAsMCArMSw1IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgQ29tcGV4J3MgTXlMb2FkZXIgc3VwcG9ydCBvbiBNSVBTIGFyY2hpdGVjdHVyZQorIworCitsaWIteSArPSBteWxvYWRlci5vCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9hcmNoL21pcHMvZncvbXlsb2FkZXIvbXlsb2FkZXIuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2FyY2gvbWlwcy9mdy9teWxvYWRlci9teWxvYWRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNmY5YWQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9hcmNoL21pcHMvZncvbXlsb2FkZXIvbXlsb2FkZXIuYwpAQCAtMCwwICsxLDYzIEBACisvKgorICogIENvbXBleCdzIE15TG9hZGVyIHNwZWNpZmljIHByb20gcm91dGluZXMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggR2Fib3IgSnVob3MgPGp1aG9zZ0BvcGVud3J0Lm9yZz4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisjaW5jbHVkZSA8YXNtL2Z3L215bG9hZGVyL215bG9hZGVyLmg+CisKKyNkZWZpbmUgU1lTX1BBUkFNU19BRERSCQlLU0VHMUFERFIoMHg4MDAwMDgwMCkKKyNkZWZpbmUgQk9BUkRfUEFSQU1TX0FERFIJS1NFRzFBRERSKDB4ODAwMDBBMDApCisjZGVmaW5lIFBBUlRfVEFCTEVfQUREUgkJS1NFRzFBRERSKDB4ODAwMDBDMDApCisjZGVmaW5lIEJPT1RfUEFSQU1TX0FERFIJS1NFRzFBRERSKDB4ODAwMDBFMDApCisKK3N0YXRpYyBzdHJ1Y3QgbXlsb2FkZXJfaW5mbyBteWxvYWRlcl9pbmZvIF9faW5pdGRhdGE7CitzdGF0aWMgaW50IG15bG9hZGVyX2ZvdW5kIF9faW5pdGRhdGE7CisKK3N0cnVjdCBteWxvYWRlcl9pbmZvICogX19pbml0IG15bG9hZGVyX2dldF9pbmZvKHZvaWQpCit7CisJc3RydWN0IG15bG9fc3lzdGVtX3BhcmFtcyAqc3lzcDsKKwlzdHJ1Y3QgbXlsb19ib2FyZF9wYXJhbXMgKmJvYXJkcDsKKwlzdHJ1Y3QgbXlsb19wYXJ0aXRpb25fdGFibGUgKnBhcnRzOworCisJaWYgKG15bG9hZGVyX2ZvdW5kKQorCQlyZXR1cm4gJm15bG9hZGVyX2luZm87CisKKwlzeXNwID0gKHN0cnVjdCBteWxvX3N5c3RlbV9wYXJhbXMgKikoU1lTX1BBUkFNU19BRERSKTsKKwlib2FyZHAgPSAoc3RydWN0IG15bG9fYm9hcmRfcGFyYW1zICopKEJPQVJEX1BBUkFNU19BRERSKTsKKwlwYXJ0cyA9IChzdHJ1Y3QgbXlsb19wYXJ0aXRpb25fdGFibGUgKikoUEFSVF9UQUJMRV9BRERSKTsKKworCXByaW50ayhLRVJOX0RFQlVHICJNeUxvYWRlcjogc3lzcD0lMDh4LCBib2FyZHA9JTA4eCwgcGFydHM9JTA4eFxuIiwKKwkJc3lzcC0+bWFnaWMsIGJvYXJkcC0+bWFnaWMsIHBhcnRzLT5tYWdpYyk7CisKKwkvKiBDaGVjayBmb3Igc29tZSBtYWdpYyBudW1iZXJzICovCisJaWYgKHN5c3AtPm1hZ2ljICE9IE1ZTE9fTUFHSUNfU1lTX1BBUkFNUyB8fAorCSAgICBib2FyZHAtPm1hZ2ljICE9IE1ZTE9fTUFHSUNfQk9BUkRfUEFSQU1TIHx8CisJICAgIGxlMzJfdG9fY3B1KHBhcnRzLT5tYWdpYykgIT0gTVlMT19NQUdJQ19QQVJUSVRJT05TKQorCQlyZXR1cm4gTlVMTDsKKworCXByaW50ayhLRVJOX0RFQlVHICJNeUxvYWRlcjogaWQ9JTA0eDolMDR4LCBzdWJfaWQ9JTA0eDolMDR4XG4iLAorCQlzeXNwLT52aWQsIHN5c3AtPmRpZCwgc3lzcC0+c3ZpZCwgc3lzcC0+c2RpZCk7CisKKwlteWxvYWRlcl9pbmZvLnZpZCA9IHN5c3AtPnZpZDsKKwlteWxvYWRlcl9pbmZvLmRpZCA9IHN5c3AtPmRpZDsKKwlteWxvYWRlcl9pbmZvLnN2aWQgPSBzeXNwLT5zdmlkOworCW15bG9hZGVyX2luZm8uc2RpZCA9IHN5c3AtPnNkaWQ7CisKKwltZW1jcHkobXlsb2FkZXJfaW5mby5tYWNzLCBib2FyZHAtPmFkZHIsIHNpemVvZihteWxvYWRlcl9pbmZvLm1hY3MpKTsKKworCW15bG9hZGVyX2ZvdW5kID0gMTsKKworCXJldHVybiAmbXlsb2FkZXJfaW5mbzsKK30KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbXRkL210ZHNwbGl0L0tjb25maWcgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL210ZC9tdGRzcGxpdC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MzJiOGQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL210ZC9tdGRzcGxpdC9LY29uZmlnCkBAIC0wLDAgKzEsOTggQEAKK2NvbmZpZyBNVERfU1BMSVQKKwlkZWZfYm9vbCBuCisJaGVscAorCSAgR2VuZXJpYyBNVEQgc3BsaXQgc3VwcG9ydC4KKworY29uZmlnIE1URF9TUExJVF9TVVBQT1JUCisJZGVmX2Jvb2wgTVREID0geQorCitjb21tZW50ICJSb290ZnMgcGFydGl0aW9uIHBhcnNlcnMiCisKK2NvbmZpZyBNVERfU1BMSVRfU1FVQVNIRlNfUk9PVAorCWJvb2wgIlNxdWFzaGZzIGJhc2VkIHJvb3QgcGFydGl0aW9uIHBhcnNlciIKKwlkZXBlbmRzIG9uIE1URF9TUExJVF9TVVBQT1JUCisJc2VsZWN0IE1URF9TUExJVAorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgcHJvdmlkZXMgYSBwYXJzaW5nIGZ1bmN0aW9uIHdoaWNoIGFsbG93cyB0byBkZXRlY3QgdGhlCisJICBvZmZzZXQgYW5kIHNpemUgb2YgdGhlIHVudXNlZCBwb3J0aW9uIG9mIGEgcm9vdGZzIHBhcnRpdGlvbgorCSAgY29udGFpbmluZyBhIHNxdWFzaGZzLgorCitjb21tZW50ICJGaXJtd2FyZSBwYXJ0aXRpb24gcGFyc2VycyIKKworY29uZmlnIE1URF9TUExJVF9CQ01fV0ZJX0ZXCisJYm9vbCAiQnJvYWRjb20gV2hvbGUgRmxhc2ggSW1hZ2UgcGFyc2VyIgorCWRlcGVuZHMgb24gTVREX1NQTElUX1NVUFBPUlQKKwlzZWxlY3QgTVREX1NQTElUCisKK2NvbmZpZyBNVERfU1BMSVRfQ0ZFX0JPT1RGUworCWJvb2wgIlBhcnNlciBmaW5kaW5nIHJvb3RmcyBhcHBlbmRlZCB0byB0aGUgQ0ZFIGJvb3RmcyIKKwlkZXBlbmRzIG9uIE1URF9TUExJVF9TVVBQT1JUICYmIEFSQ0hfQkNNNDkwOAorCXNlbGVjdCBNVERfU1BMSVQKKwloZWxwCisJICBjZmVyb20gb24gQkNNNDkwOCAoYW5kIGJjbTYzeHgpIHVzZXMgSkZGUzIgYm9vdGZzIHBhcnRpdGlvbgorCSAgZm9yIHN0b3Jpbmcga2VybmVsLCBjZmVyYW0gYW5kIHNvbWUgZGV2aWNlIHNwZWNpZmljIGZpbGVzLgorCSAgVGhlcmUgaXNuJ3QgYW55IHN0cmFpZ2h0IHdheSBvZiBzdG9yaW5nIHJvb3RmcyBzbyBpdCBnZXRzCisJICBhcHBlbmRlZCB0byB0aGUgSkZGUzIgYm9vdGZzIHBhcnRpdGlvbi4gS2VybmVsIG5lZWRzIHRvIGZpbmQKKwkgIGl0IGFuZCBydW4gaW5pdCBmcm9tIGl0LiBUaGlzIHBhcnNlciBpcyByZXNwb25zaWJsZSBmb3IKKwkgIGZpbmRpbmcgYXBwZW5kZWQgcm9vdGZzLgorCitjb25maWcgTVREX1NQTElUX1NFQU1BX0ZXCisJYm9vbCAiU2VhbWEgZmlybXdhcmUgcGFyc2VyIgorCWRlcGVuZHMgb24gTVREX1NQTElUX1NVUFBPUlQKKwlzZWxlY3QgTVREX1NQTElUCisKK2NvbmZpZyBNVERfU1BMSVRfV1JHR19GVworCWJvb2wgIldSR0cgZmlybXdhcmUgcGFyc2VyIgorCWRlcGVuZHMgb24gTVREX1NQTElUX1NVUFBPUlQKKwlzZWxlY3QgTVREX1NQTElUCisKK2NvbmZpZyBNVERfU1BMSVRfVUlNQUdFX0ZXCisJYm9vbCAidUltYWdlIGJhc2VkIGZpcm13YXJlIHBhcnRpdGlvbiBwYXJzZXIiCisJZGVwZW5kcyBvbiBNVERfU1BMSVRfU1VQUE9SVAorCXNlbGVjdCBNVERfU1BMSVQKKworY29uZmlnIE1URF9TUExJVF9GSVRfRlcKKwlib29sICJGSVQgYmFzZWQgZmlybXdhcmUgcGFydGl0aW9uIHBhcnNlciIKKwlkZXBlbmRzIG9uIE1URF9TUExJVF9TVVBQT1JUCisJc2VsZWN0IE1URF9TUExJVAorCitjb25maWcgTVREX1NQTElUX0xaTUFfRlcKKwlib29sICJMWk1BIGNvbXByZXNzZWQga2VybmVsIGJhc2VkIGZpcm13YXJlIHBhcnRpdGlvbiBwYXJzZXIiCisJZGVwZW5kcyBvbiBNVERfU1BMSVRfU1VQUE9SVAorCXNlbGVjdCBNVERfU1BMSVQKKworY29uZmlnIE1URF9TUExJVF9UUExJTktfRlcKKwlib29sICJUUC1MaW5rIGZpcm13YXJlIHBhcnNlciIKKwlkZXBlbmRzIG9uIE1URF9TUExJVF9TVVBQT1JUCisJc2VsZWN0IE1URF9TUExJVAorCitjb25maWcgTVREX1NQTElUX1RSWF9GVworCWJvb2wgIlRSWCBpbWFnZSBiYXNlZCBmaXJtd2FyZSBwYXJ0aXRpb24gcGFyc2VyIgorCWRlcGVuZHMgb24gTVREX1NQTElUX1NVUFBPUlQKKwlzZWxlY3QgTVREX1NQTElUCisKK2NvbmZpZyBNVERfU1BMSVRfQlJOSU1BR0VfRlcKKwlib29sICJicm5JbWFnZSAoYnJuYm9vdCBpbWFnZSkgZmlybXdhcmUgcGFyc2VyIgorCWRlcGVuZHMgb24gTVREX1NQTElUX1NVUFBPUlQKKwlzZWxlY3QgTVREX1NQTElUCisKK2NvbmZpZyBNVERfU1BMSVRfRVZBX0ZXCisJYm9vbCAiRVZBIGltYWdlIGJhc2VkIGZpcm13YXJlIHBhcnRpdGlvbiBwYXJzZXIiCisJZGVwZW5kcyBvbiBNVERfU1BMSVRfU1VQUE9SVAorCXNlbGVjdCBNVERfU1BMSVQKKworY29uZmlnIE1URF9TUExJVF9NSU5PUl9GVworCWJvb2wgIk1pa3JvdGlrIE5PUiBpbWFnZSBiYXNlZCBmaXJtd2FyZSBwYXJ0aXRpb24gcGFyc2VyIgorCWRlcGVuZHMgb24gTVREX1NQTElUX1NVUFBPUlQKKwlzZWxlY3QgTVREX1NQTElUCisKK2NvbmZpZyBNVERfU1BMSVRfSklNQUdFX0ZXCisJYm9vbCAiSkJPT1QgSW1hZ2UgYmFzZWQgZmlybXdhcmUgcGFydGl0aW9uIHBhcnNlciIKKwlkZXBlbmRzIG9uIE1URF9TUExJVF9TVVBQT1JUCisJc2VsZWN0IE1URF9TUExJVAorCitjb25maWcgTVREX1NQTElUX0VMRl9GVworCWJvb2wgIkVMRiBsb2FkZXIgZmlybXdhcmUgcGFydGl0aW9uIHBhcnNlciIKKwlkZXBlbmRzIG9uIE1URF9TUExJVF9TVVBQT1JUCisJc2VsZWN0IE1URF9TUExJVApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9tdGQvbXRkc3BsaXQvTWFrZWZpbGUgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL210ZC9tdGRzcGxpdC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjE3ZDhmCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9tdGQvbXRkc3BsaXQvTWFrZWZpbGUKQEAgLTAsMCArMSwxNiBAQAorb2JqLSQoQ09ORklHX01URF9TUExJVCkJCSs9IG10ZHNwbGl0Lm8KK29iai0kKENPTkZJR19NVERfU1BMSVRfQkNNX1dGSV9GVykgKz0gbXRkc3BsaXRfYmNtX3dmaS5vCitvYmotJChDT05GSUdfTVREX1NQTElUX0NGRV9CT09URlMpICs9IG10ZHNwbGl0X2NmZV9ib290ZnMubworb2JqLSQoQ09ORklHX01URF9TUExJVF9TRUFNQV9GVykgKz0gbXRkc3BsaXRfc2VhbWEubworb2JqLSQoQ09ORklHX01URF9TUExJVF9TUVVBU0hGU19ST09UKSArPSBtdGRzcGxpdF9zcXVhc2hmcy5vCitvYmotJChDT05GSUdfTVREX1NQTElUX1VJTUFHRV9GVykgKz0gbXRkc3BsaXRfdWltYWdlLm8KK29iai0kKENPTkZJR19NVERfU1BMSVRfRklUX0ZXKSArPSBtdGRzcGxpdF9maXQubworb2JqLSQoQ09ORklHX01URF9TUExJVF9MWk1BX0ZXKSArPSBtdGRzcGxpdF9sem1hLm8KK29iai0kKENPTkZJR19NVERfU1BMSVRfVFBMSU5LX0ZXKSArPSBtdGRzcGxpdF90cGxpbmsubworb2JqLSQoQ09ORklHX01URF9TUExJVF9UUlhfRlcpICs9IG10ZHNwbGl0X3RyeC5vCitvYmotJChDT05GSUdfTVREX1NQTElUX0JSTklNQUdFX0ZXKSArPSBtdGRzcGxpdF9icm5pbWFnZS5vCitvYmotJChDT05GSUdfTVREX1NQTElUX0VWQV9GVykgKz0gbXRkc3BsaXRfZXZhLm8KK29iai0kKENPTkZJR19NVERfU1BMSVRfV1JHR19GVykgKz0gbXRkc3BsaXRfd3JnZy5vCitvYmotJChDT05GSUdfTVREX1NQTElUX01JTk9SX0ZXKSArPSBtdGRzcGxpdF9taW5vci5vCitvYmotJChDT05GSUdfTVREX1NQTElUX0pJTUFHRV9GVykgKz0gbXRkc3BsaXRfamltYWdlLm8KK29iai0kKENPTkZJR19NVERfU1BMSVRfRUxGX0ZXKSArPSBtdGRzcGxpdF9lbGYubwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9tdGQvbXRkc3BsaXQvbXRkc3BsaXQuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbXRkL210ZHNwbGl0L210ZHNwbGl0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJlNTFkYwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbXRkL210ZHNwbGl0L210ZHNwbGl0LmMKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMyBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMyBHYWJvciBKdWhvcyA8anVob3NnQG9wZW53cnQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEyIEpvbmFzIEdvcnNraSA8am9nb0BvcGVud3J0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBIYXVrZSBNZWhydGVucyA8aGF1a2VAaGF1a2UtbS5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpCSJtdGRzcGxpdDogIiBmbXQKKworI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tYWdpYy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9nZW5lcmljLmg+CisKKyNpbmNsdWRlICJtdGRzcGxpdC5oIgorCisjZGVmaW5lIFVCSV9FQ19NQUdJQwkJCTB4NTU0MjQ5MjMJLyogVUJJIyAqLworCitzdHJ1Y3Qgc3F1YXNoZnNfc3VwZXJfYmxvY2sgeworCV9fbGUzMiBzX21hZ2ljOworCV9fbGUzMiBwYWQwWzldOworCV9fbGU2NCBieXRlc191c2VkOworfTsKKworaW50IG10ZF9nZXRfc3F1YXNoZnNfbGVuKHN0cnVjdCBtdGRfaW5mbyAqbWFzdGVyLAorCQkJIHNpemVfdCBvZmZzZXQsCisJCQkgc2l6ZV90ICpzcXVhc2hmc19sZW4pCit7CisJc3RydWN0IHNxdWFzaGZzX3N1cGVyX2Jsb2NrIHNiOworCXNpemVfdCByZXRsZW47CisJaW50IGVycjsKKworCWVyciA9IG10ZF9yZWFkKG1hc3Rlciwgb2Zmc2V0LCBzaXplb2Yoc2IpLCAmcmV0bGVuLCAodm9pZCAqKSZzYik7CisJaWYgKGVyciB8fCAocmV0bGVuICE9IHNpemVvZihzYikpKSB7CisJCXByX2FsZXJ0KCJlcnJvciBvY2N1cmVkIHdoaWxlIHJlYWRpbmcgZnJvbSBcIiVzXCJcbiIsCisJCQkgbWFzdGVyLT5uYW1lKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGxlMzJfdG9fY3B1KHNiLnNfbWFnaWMpICE9IFNRVUFTSEZTX01BR0lDKSB7CisJCXByX2FsZXJ0KCJubyBzcXVhc2hmcyBmb3VuZCBpbiBcIiVzXCJcbiIsIG1hc3Rlci0+bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldGxlbiA9IGxlNjRfdG9fY3B1KHNiLmJ5dGVzX3VzZWQpOworCWlmIChyZXRsZW4gPD0gMCkgeworCQlwcl9hbGVydCgic3F1YXNoZnMgaXMgZW1wdHkgaW4gXCIlc1wiXG4iLCBtYXN0ZXItPm5hbWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAob2Zmc2V0ICsgcmV0bGVuID4gbWFzdGVyLT5zaXplKSB7CisJCXByX2FsZXJ0KCJzcXVhc2hmcyBoYXMgaW52YWxpZCBzaXplIGluIFwiJXNcIlxuIiwKKwkJCSBtYXN0ZXItPm5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkqc3F1YXNoZnNfbGVuID0gcmV0bGVuOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwobXRkX2dldF9zcXVhc2hmc19sZW4pOworCitzdGF0aWMgc3NpemVfdCBtdGRfbmV4dF9lYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc2l6ZV90IG9mZnNldCkKK3sKKwlyZXR1cm4gbXRkX3JvdW5kZG93bl90b19lYihvZmZzZXQsIG10ZCkgKyBtdGQtPmVyYXNlc2l6ZTsKK30KKworaW50IG10ZF9jaGVja19yb290ZnNfbWFnaWMoc3RydWN0IG10ZF9pbmZvICptdGQsIHNpemVfdCBvZmZzZXQsCisJCQkgICBlbnVtIG10ZHNwbGl0X3BhcnRfdHlwZSAqdHlwZSkKK3sKKwl1MzIgbWFnaWM7CisJc2l6ZV90IHJldGxlbjsKKwlpbnQgcmV0OworCisJcmV0ID0gbXRkX3JlYWQobXRkLCBvZmZzZXQsIHNpemVvZihtYWdpYyksICZyZXRsZW4sCisJCSAgICAgICAodW5zaWduZWQgY2hhciAqKSAmbWFnaWMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAocmV0bGVuICE9IHNpemVvZihtYWdpYykpCisJCXJldHVybiAtRUlPOworCisJaWYgKGxlMzJfdG9fY3B1KG1hZ2ljKSA9PSBTUVVBU0hGU19NQUdJQykgeworCQlpZiAodHlwZSkKKwkJCSp0eXBlID0gTVREU1BMSVRfUEFSVF9UWVBFX1NRVUFTSEZTOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKG1hZ2ljID09IDB4MTk4NTIwMDMpIHsKKwkJaWYgKHR5cGUpCisJCQkqdHlwZSA9IE1URFNQTElUX1BBUlRfVFlQRV9KRkZTMjsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmIChiZTMyX3RvX2NwdShtYWdpYykgPT0gVUJJX0VDX01BR0lDKSB7CisJCWlmICh0eXBlKQorCQkJKnR5cGUgPSBNVERTUExJVF9QQVJUX1RZUEVfVUJJOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG10ZF9jaGVja19yb290ZnNfbWFnaWMpOworCitpbnQgbXRkX2ZpbmRfcm9vdGZzX2Zyb20oc3RydWN0IG10ZF9pbmZvICptdGQsCisJCQkgc2l6ZV90IGZyb20sCisJCQkgc2l6ZV90IGxpbWl0LAorCQkJIHNpemVfdCAqcmV0X29mZnNldCwKKwkJCSBlbnVtIG10ZHNwbGl0X3BhcnRfdHlwZSAqdHlwZSkKK3sKKwlzaXplX3Qgb2Zmc2V0OworCWludCBlcnI7CisKKwlmb3IgKG9mZnNldCA9IGZyb207IG9mZnNldCA8IGxpbWl0OworCSAgICAgb2Zmc2V0ID0gbXRkX25leHRfZWIobXRkLCBvZmZzZXQpKSB7CisJCWVyciA9IG10ZF9jaGVja19yb290ZnNfbWFnaWMobXRkLCBvZmZzZXQsIHR5cGUpOworCQlpZiAoZXJyKQorCQkJY29udGludWU7CisKKwkJKnJldF9vZmZzZXQgPSBvZmZzZXQ7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtRU5PREVWOworfQorRVhQT1JUX1NZTUJPTF9HUEwobXRkX2ZpbmRfcm9vdGZzX2Zyb20pOworCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL210ZC9tdGRzcGxpdC9tdGRzcGxpdC5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9tdGQvbXRkc3BsaXQvbXRkc3BsaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWQ2MmE4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9tdGQvbXRkc3BsaXQvbXRkc3BsaXQuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTMgRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTMgR2Fib3IgSnVob3MgPGp1aG9zZ0BvcGVud3J0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBKb25hcyBHb3Jza2kgPGpvZ29Ab3BlbndydC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSGF1a2UgTWVocnRlbnMgPGhhdWtlQGhhdWtlLW0uZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfTVREU1BMSVRfSAorI2RlZmluZSBfTVREU1BMSVRfSAorCisjZGVmaW5lIEtFUk5FTF9QQVJUX05BTUUJImtlcm5lbCIKKyNkZWZpbmUgUk9PVEZTX1BBUlRfTkFNRQkicm9vdGZzIgorI2RlZmluZSBVQklfUEFSVF9OQU1FCQkidWJpIgorCisjZGVmaW5lIFJPT1RGU19TUExJVF9OQU1FCSJyb290ZnNfZGF0YSIKKworZW51bSBtdGRzcGxpdF9wYXJ0X3R5cGUgeworCU1URFNQTElUX1BBUlRfVFlQRV9VTksgPSAwLAorCU1URFNQTElUX1BBUlRfVFlQRV9TUVVBU0hGUywKKwlNVERTUExJVF9QQVJUX1RZUEVfSkZGUzIsCisJTVREU1BMSVRfUEFSVF9UWVBFX1VCSSwKK307CisKKyNpZmRlZiBDT05GSUdfTVREX1NQTElUCitpbnQgbXRkX2dldF9zcXVhc2hmc19sZW4oc3RydWN0IG10ZF9pbmZvICptYXN0ZXIsCisJCQkgc2l6ZV90IG9mZnNldCwKKwkJCSBzaXplX3QgKnNxdWFzaGZzX2xlbik7CisKK2ludCBtdGRfY2hlY2tfcm9vdGZzX21hZ2ljKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzaXplX3Qgb2Zmc2V0LAorCQkJICAgZW51bSBtdGRzcGxpdF9wYXJ0X3R5cGUgKnR5cGUpOworCitpbnQgbXRkX2ZpbmRfcm9vdGZzX2Zyb20oc3RydWN0IG10ZF9pbmZvICptdGQsCisJCQkgc2l6ZV90IGZyb20sCisJCQkgc2l6ZV90IGxpbWl0LAorCQkJIHNpemVfdCAqcmV0X29mZnNldCwKKwkJCSBlbnVtIG10ZHNwbGl0X3BhcnRfdHlwZSAqdHlwZSk7CisKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBtdGRfZ2V0X3NxdWFzaGZzX2xlbihzdHJ1Y3QgbXRkX2luZm8gKm1hc3RlciwKKwkJCQkgICAgICAgc2l6ZV90IG9mZnNldCwKKwkJCQkgICAgICAgc2l6ZV90ICpzcXVhc2hmc19sZW4pCit7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG10ZF9jaGVja19yb290ZnNfbWFnaWMoc3RydWN0IG10ZF9pbmZvICptdGQsIHNpemVfdCBvZmZzZXQsCisJCQkJCSBlbnVtIG10ZHNwbGl0X3BhcnRfdHlwZSAqdHlwZSkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbXRkX2ZpbmRfcm9vdGZzX2Zyb20oc3RydWN0IG10ZF9pbmZvICptdGQsCisJCQkJICAgICAgIHNpemVfdCBmcm9tLAorCQkJCSAgICAgICBzaXplX3QgbGltaXQsCisJCQkJICAgICAgIHNpemVfdCAqcmV0X29mZnNldCwKKwkJCQkgICAgICAgZW51bSBtdGRzcGxpdF9wYXJ0X3R5cGUgKnR5cGUpCit7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisjZW5kaWYgLyogQ09ORklHX01URF9TUExJVCAqLworCisjZW5kaWYgLyogX01URFNQTElUX0ggKi8KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbXRkL210ZHNwbGl0L210ZHNwbGl0X2JjbV93ZmkuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbXRkL210ZHNwbGl0L210ZHNwbGl0X2JjbV93ZmkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGRjZjY3Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9tdGQvbXRkc3BsaXQvbXRkc3BsaXRfYmNtX3dmaS5jCkBAIC0wLDAgKzEsNTIzIEBACisvKgorICogTVREIHNwbGl0IGZvciBCcm9hZGNvbSBXaG9sZSBGbGFzaCBJbWFnZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAyMCDDgWx2YXJvIEZlcm7DoW5kZXogUm9qYXMgPG5vbHRhcmlAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNkZWZpbmUgamUxNl90b19jcHUoeCkgKCh4KS52MTYpCisjZGVmaW5lIGplMzJfdG9fY3B1KHgpICgoeCkudjMyKQorCisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvamZmczIuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKworI2luY2x1ZGUgIm10ZHNwbGl0LmgiCisKKyNkZWZpbmUgY2hhcl90b19udW0oYykJCSgoYyA+PSAnMCcgJiYgYyA8PSAnOScpID8gKGMgLSAnMCcpIDogKDApKQorCisjZGVmaW5lIEJDTV9XRklfUEFSVFMJCTMKKyNkZWZpbmUgQkNNX1dGSV9TUExJVF9QQVJUUwkyCisKKyNkZWZpbmUgQ0ZFUkFNX05BTUUJCSJjZmVyYW0iCisjZGVmaW5lIENGRVJBTV9OQU1FX0xFTgkJKHNpemVvZihDRkVSQU1fTkFNRSkgLSAxKQorI2RlZmluZSBLRVJORUxfTkFNRQkJInZtbGludXgubHoiCisjZGVmaW5lIEtFUk5FTF9OQU1FX0xFTgkJKHNpemVvZihLRVJORUxfTkFNRSkgLSAxKQorI2RlZmluZSBPUEVOV1JUX05BTUUJCSIxLW9wZW53cnQiCisjZGVmaW5lIE9QRU5XUlRfTkFNRV9MRU4JKHNpemVvZihPUEVOV1JUX05BTUUpIC0gMSkKKworI2RlZmluZSBVQklfTUFHSUMJCTB4NTU0MjQ5MjMKKworI2RlZmluZSBDRkVfTUFHSUNfUEZYCQkiY2ZlcmFtLiIKKyNkZWZpbmUgQ0ZFX01BR0lDX1BGWF9MRU4JKHNpemVvZihDRkVfTUFHSUNfUEZYKSAtIDEpCisjZGVmaW5lIENGRV9NQUdJQwkJImNmZXJhbS4wMDAiCisjZGVmaW5lIENGRV9NQUdJQ19MRU4JCShzaXplb2YoQ0ZFX01BR0lDKSAtIDEpCisjZGVmaW5lIFNFUkNPTU1fTUFHSUNfUEZYCSJlUmNPbU0uIgorI2RlZmluZSBTRVJDT01NX01BR0lDX1BGWF9MRU4JKHNpemVvZihTRVJDT01NX01BR0lDX1BGWCkgLSAxKQorI2RlZmluZSBTRVJDT01NX01BR0lDCQkiZVJjT21NLjAwMCIKKyNkZWZpbmUgU0VSQ09NTV9NQUdJQ19MRU4JKHNpemVvZihTRVJDT01NX01BR0lDKSAtIDEpCisKKyNkZWZpbmUgUEFSVF9DRkVSQU0JCSJjZmVyYW0iCisjZGVmaW5lIFBBUlRfRklSTVdBUkUJCSJmaXJtd2FyZSIKKyNkZWZpbmUgUEFSVF9JTUFHRV8xCQkiaW1nMSIKKyNkZWZpbmUgUEFSVF9JTUFHRV8yCQkiaW1nMiIKKworc3RhdGljIHUzMiBqZmZzMl9kaXJlbnRfY3JjKHN0cnVjdCBqZmZzMl9yYXdfZGlyZW50ICpub2RlKQoreworCXJldHVybiBjcmMzMigwLCBub2RlLCBzaXplb2Yoc3RydWN0IGpmZnMyX3Jhd19kaXJlbnQpIC0gOCk7Cit9CisKK3N0YXRpYyBib29sIGpmZnMyX2RpcmVudF92YWxpZChzdHJ1Y3QgamZmczJfcmF3X2RpcmVudCAqbm9kZSkKK3sKKwlyZXR1cm4gKChqZTE2X3RvX2NwdShub2RlLT5tYWdpYykgPT0gSkZGUzJfTUFHSUNfQklUTUFTSykgJiYKKwkJKGplMTZfdG9fY3B1KG5vZGUtPm5vZGV0eXBlKSA9PSBKRkZTMl9OT0RFVFlQRV9ESVJFTlQpICYmCisJCWplMzJfdG9fY3B1KG5vZGUtPmlubykgJiYKKwkJamUzMl90b19jcHUobm9kZS0+bm9kZV9jcmMpID09IGpmZnMyX2RpcmVudF9jcmMobm9kZSkpOworfQorCitzdGF0aWMgaW50IGpmZnMyX2ZpbmRfZmlsZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqYnVmLAorCQkJICAgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuLAorCQkJICAgbG9mZl90ICpvZmZzLCBsb2ZmX3Qgc2l6ZSwKKwkJCSAgIGNoYXIgKipvdXRfbmFtZSwgc2l6ZV90ICpvdXRfbmFtZV9sZW4pCit7CisJY29uc3QgbG9mZl90IGVuZCA9ICpvZmZzICsgc2l6ZTsKKwlzdHJ1Y3QgamZmczJfcmF3X2RpcmVudCAqbm9kZTsKKwlib29sIHZhbGlkID0gZmFsc2U7CisJc2l6ZV90IHJldGxlbjsKKwl1aW50MTZfdCBtYWdpYzsKKwlpbnQgcmM7CisKKwlmb3IgKDsgKm9mZnMgPCBlbmQ7ICpvZmZzICs9IG10ZC0+ZXJhc2VzaXplKSB7CisJCXVuc2lnbmVkIGludCBibG9ja19vZmZzID0gMDsKKworCQkvKiBTa2lwIENGRSBlcmFzZWQgYmxvY2tzICovCisJCXJjID0gbXRkX3JlYWQobXRkLCAqb2Zmcywgc2l6ZW9mKG1hZ2ljKSwgJnJldGxlbiwKKwkJCSAgICAgICh2b2lkICopICZtYWdpYyk7CisJCWlmIChyYyB8fCByZXRsZW4gIT0gc2l6ZW9mKG1hZ2ljKSkgeworCQkJY29udGludWU7CisJCX0KKworCQkvKiBTa2lwIGJsb2NrcyBub3Qgc3RhcnRpbmcgd2l0aCBKRkZTMiBtYWdpYyAqLworCQlpZiAobWFnaWMgIT0gSkZGUzJfTUFHSUNfQklUTUFTSykKKwkJCWNvbnRpbnVlOworCisJCS8qIFJlYWQgZnVsbCBibG9jayAqLworCQlyYyA9IG10ZF9yZWFkKG10ZCwgKm9mZnMsIG10ZC0+ZXJhc2VzaXplLCAmcmV0bGVuLAorCQkJICAgICAgKHZvaWQgKikgYnVmKTsKKwkJaWYgKHJjKQorCQkJcmV0dXJuIHJjOworCQlpZiAocmV0bGVuICE9IG10ZC0+ZXJhc2VzaXplKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJd2hpbGUgKGJsb2NrX29mZnMgPCBtdGQtPmVyYXNlc2l6ZSkgeworCQkJbm9kZSA9IChzdHJ1Y3QgamZmczJfcmF3X2RpcmVudCAqKSAmYnVmW2Jsb2NrX29mZnNdOworCisJCQlpZiAoIWpmZnMyX2RpcmVudF92YWxpZChub2RlKSkgeworCQkJCWJsb2NrX29mZnMgKz0gNDsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKCFtZW1jbXAobm9kZS0+bmFtZSwgT1BFTldSVF9OQU1FLAorCQkJCSAgICBPUEVOV1JUX05BTUVfTEVOKSkgeworCQkJCXZhbGlkID0gdHJ1ZTsKKwkJCX0gZWxzZSBpZiAoIW1lbWNtcChub2RlLT5uYW1lLCBuYW1lLCBuYW1lX2xlbikpIHsKKwkJCQlpZiAoIXZhbGlkKQorCQkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJCWlmIChvdXRfbmFtZSkKKwkJCQkJKm91dF9uYW1lID0ga3N0cm5kdXAobm9kZS0+bmFtZSwKKwkJCQkJCQkgICAgIG5vZGUtPm5zaXplLAorCQkJCQkJCSAgICAgR0ZQX0tFUk5FTCk7CisKKwkJCQlpZiAob3V0X25hbWVfbGVuKQorCQkJCQkqb3V0X25hbWVfbGVuID0gbm9kZS0+bnNpemU7CisKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKworCQkJYmxvY2tfb2ZmcyArPSBqZTMyX3RvX2NwdShub2RlLT50b3RsZW4pOworCQkJYmxvY2tfb2ZmcyA9IChibG9ja19vZmZzICsgMHgzKSAmIH4weDM7CisJCX0KKwl9CisKKwlyZXR1cm4gLUVOT0VOVDsKK30KKworc3RhdGljIGludCB1Ymlmc19maW5kKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgKm9mZnMsIGxvZmZfdCBzaXplKQoreworCWNvbnN0IGxvZmZfdCBlbmQgPSAqb2ZmcyArIHNpemU7CisJdWludDMyX3QgbWFnaWM7CisJc2l6ZV90IHJldGxlbjsKKwlpbnQgcmM7CisKKwlmb3IgKDsgKm9mZnMgPCBlbmQ7ICpvZmZzICs9IG10ZC0+ZXJhc2VzaXplKSB7CisJCXJjID0gbXRkX3JlYWQobXRkLCAqb2Zmcywgc2l6ZW9mKG1hZ2ljKSwgJnJldGxlbiwKKwkJCSAgICAgICh1bnNpZ25lZCBjaGFyICopICZtYWdpYyk7CisJCWlmIChyYyB8fCByZXRsZW4gIT0gc2l6ZW9mKG1hZ2ljKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChiZTMyX3RvX2NwdShtYWdpYykgPT0gVUJJX01BR0lDKQorCQkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FTk9FTlQ7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfYmNtX3dmaShzdHJ1Y3QgbXRkX2luZm8gKm1hc3RlciwKKwkJCSBjb25zdCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqKnBwYXJ0cywKKwkJCSB1aW50OF90ICpidWYsIGxvZmZfdCBvZmYsIGxvZmZfdCBzaXplLCBib29sIGNmZV9wYXJ0KQoreworCXN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0czsKKwlsb2ZmX3QgY2ZlX29mZiwga2VybmVsX29mZiwgcm9vdGZzX29mZjsKKwl1bnNpZ25lZCBpbnQgbnVtX3BhcnRzID0gQkNNX1dGSV9QQVJUUywgY3VyX3BhcnQgPSAwOworCWludCByZXQ7CisKKwlpZiAoY2ZlX3BhcnQpIHsKKwkJbnVtX3BhcnRzKys7CisJCWNmZV9vZmYgPSBvZmY7CisKKwkJcmV0ID0gamZmczJfZmluZF9maWxlKG1hc3RlciwgYnVmLCBDRkVSQU1fTkFNRSwKKwkJCQkgICAgICBDRkVSQU1fTkFNRV9MRU4sICZjZmVfb2ZmLAorCQkJCSAgICAgIHNpemUgLSAoY2ZlX29mZiAtIG9mZiksIE5VTEwsIE5VTEwpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlrZXJuZWxfb2ZmID0gY2ZlX29mZiArIG1hc3Rlci0+ZXJhc2VzaXplOworCX0gZWxzZSB7CisJCWtlcm5lbF9vZmYgPSBvZmY7CisJfQorCisJcmV0ID0gamZmczJfZmluZF9maWxlKG1hc3RlciwgYnVmLCBLRVJORUxfTkFNRSwgS0VSTkVMX05BTUVfTEVOLAorCQkJICAgICAgJmtlcm5lbF9vZmYsIHNpemUgLSAoa2VybmVsX29mZiAtIG9mZiksCisJCQkgICAgICBOVUxMLCBOVUxMKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcm9vdGZzX29mZiA9IGtlcm5lbF9vZmYgKyBtYXN0ZXItPmVyYXNlc2l6ZTsKKwlyZXQgPSB1Ymlmc19maW5kKG1hc3RlciwgJnJvb3Rmc19vZmYsIHNpemUgLSAocm9vdGZzX29mZiAtIG9mZikpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlwYXJ0cyA9IGt6YWxsb2MobnVtX3BhcnRzICogc2l6ZW9mKCpwYXJ0cyksIEdGUF9LRVJORUwpOworCWlmICghcGFydHMpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGNmZV9wYXJ0KSB7CisJCXBhcnRzW2N1cl9wYXJ0XS5uYW1lID0gUEFSVF9DRkVSQU07CisJCXBhcnRzW2N1cl9wYXJ0XS5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRTsKKwkJcGFydHNbY3VyX3BhcnRdLm9mZnNldCA9IGNmZV9vZmY7CisJCXBhcnRzW2N1cl9wYXJ0XS5zaXplID0ga2VybmVsX29mZiAtIGNmZV9vZmY7CisJCWN1cl9wYXJ0Kys7CisJfQorCisJcGFydHNbY3VyX3BhcnRdLm5hbWUgPSBQQVJUX0ZJUk1XQVJFOworCXBhcnRzW2N1cl9wYXJ0XS5vZmZzZXQgPSBrZXJuZWxfb2ZmOworCXBhcnRzW2N1cl9wYXJ0XS5zaXplID0gc2l6ZSAtIChrZXJuZWxfb2ZmIC0gb2ZmKTsKKwljdXJfcGFydCsrOworCisJcGFydHNbY3VyX3BhcnRdLm5hbWUgPSBLRVJORUxfUEFSVF9OQU1FOworCXBhcnRzW2N1cl9wYXJ0XS5vZmZzZXQgPSBrZXJuZWxfb2ZmOworCXBhcnRzW2N1cl9wYXJ0XS5zaXplID0gcm9vdGZzX29mZiAtIGtlcm5lbF9vZmY7CisJY3VyX3BhcnQrKzsKKworCXBhcnRzW2N1cl9wYXJ0XS5uYW1lID0gVUJJX1BBUlRfTkFNRTsKKwlwYXJ0c1tjdXJfcGFydF0ub2Zmc2V0ID0gcm9vdGZzX29mZjsKKwlwYXJ0c1tjdXJfcGFydF0uc2l6ZSA9IHNpemUgLSAocm9vdGZzX29mZiAtIG9mZik7CisJY3VyX3BhcnQrKzsKKworCSpwcGFydHMgPSBwYXJ0czsKKworCXJldHVybiBudW1fcGFydHM7Cit9CisKK3N0YXRpYyBpbnQgbXRkc3BsaXRfcGFyc2VfYmNtX3dmaShzdHJ1Y3QgbXRkX2luZm8gKm1hc3RlciwKKwkJCQkgIGNvbnN0IHN0cnVjdCBtdGRfcGFydGl0aW9uICoqcHBhcnRzLAorCQkJCSAgc3RydWN0IG10ZF9wYXJ0X3BhcnNlcl9kYXRhICpkYXRhKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbXRkX25vZGU7CisJYm9vbCBjZmVfcGFydCA9IHRydWU7CisJdWludDhfdCAqYnVmOworCWludCByZXQ7CisKKwltdGRfbm9kZSA9IG10ZF9nZXRfb2Zfbm9kZShtYXN0ZXIpOworCWlmICghbXRkX25vZGUpCisJCXJldHVybiAtRUlOVkFMOworCisJYnVmID0ga3phbGxvYyhtYXN0ZXItPmVyYXNlc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChtdGRfbm9kZSwgImJyY20sbm8tY2ZlcmFtIikpCisJCWNmZV9wYXJ0ID0gZmFsc2U7CisKKwlyZXQgPSBwYXJzZV9iY21fd2ZpKG1hc3RlciwgcHBhcnRzLCBidWYsIDAsIG1hc3Rlci0+c2l6ZSwgY2ZlX3BhcnQpOworCisJa2ZyZWUoYnVmKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10ZHNwbGl0X2JjbV93Zmlfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImJyY20sd2ZpIiB9LAorCXsgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRfcGFyc2VyIG10ZHNwbGl0X2JjbV93ZmlfcGFyc2VyID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gImJjbS13ZmktZnciLAorCS5vZl9tYXRjaF90YWJsZSA9IG10ZHNwbGl0X2JjbV93Zmlfb2ZfbWF0Y2gsCisJLnBhcnNlX2ZuID0gbXRkc3BsaXRfcGFyc2VfYmNtX3dmaSwKKwkudHlwZSA9IE1URF9QQVJTRVJfVFlQRV9GSVJNV0FSRSwKK307CisKK3N0YXRpYyBpbnQgY2ZlcmFtX2Jvb3RmbGFnX3ZhbHVlKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbikKK3sKKwlpbnQgcmMgPSAtRU5PRU5UOworCisJaWYgKG5hbWUgJiYKKwkgICAgKG5hbWVfbGVuID49IENGRV9NQUdJQ19MRU4pICYmCisJICAgICFtZW1jbXAobmFtZSwgQ0ZFX01BR0lDX1BGWCwgQ0ZFX01BR0lDX1BGWF9MRU4pKSB7CisJCXJjID0gY2hhcl90b19udW0obmFtZVtDRkVfTUFHSUNfUEZYX0xFTiArIDBdKSAqIDEwMDsKKwkJcmMgKz0gY2hhcl90b19udW0obmFtZVtDRkVfTUFHSUNfUEZYX0xFTiArIDFdKSAqIDEwOworCQlyYyArPSBjaGFyX3RvX251bShuYW1lW0NGRV9NQUdJQ19QRlhfTEVOICsgMl0pICogMTsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgbXRkc3BsaXRfcGFyc2VfYmNtX3dmaV9zcGxpdChzdHJ1Y3QgbXRkX2luZm8gKm1hc3RlciwKKwkJCQkJY29uc3Qgc3RydWN0IG10ZF9wYXJ0aXRpb24gKipwcGFydHMsCisJCQkJCXN0cnVjdCBtdGRfcGFydF9wYXJzZXJfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHM7CisJbG9mZl90IGNmZV9vZmY7CisJbG9mZl90IGltZzFfb2ZmID0gMDsKKwlsb2ZmX3QgaW1nMl9vZmYgPSBtYXN0ZXItPnNpemUgLyAyOworCWxvZmZfdCBpbWcxX3NpemUgPSAoaW1nMl9vZmYgLSBpbWcxX29mZik7CisJbG9mZl90IGltZzJfc2l6ZSA9IChtYXN0ZXItPnNpemUgLSBpbWcyX29mZik7CisJbG9mZl90IGFjdGl2ZV9vZmYsIGluYWN0aXZlX29mZjsKKwlsb2ZmX3QgYWN0aXZlX3NpemUsIGluYWN0aXZlX3NpemU7CisJY29uc3QgY2hhciAqaW5hY3RpdmVfbmFtZTsKKwl1aW50OF90ICpidWY7CisJY2hhciAqY2ZlMV9uYW1lID0gTlVMTCwgKmNmZTJfbmFtZSA9IE5VTEw7CisJc2l6ZV90IGNmZTFfc2l6ZSA9IDAsIGNmZTJfc2l6ZSA9IDA7CisJaW50IHJldDsKKwlpbnQgYmYxLCBiZjI7CisKKwlidWYgPSBremFsbG9jKG1hc3Rlci0+ZXJhc2VzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljZmVfb2ZmID0gaW1nMV9vZmY7CisJcmV0ID0gamZmczJfZmluZF9maWxlKG1hc3RlciwgYnVmLCBDRkVSQU1fTkFNRSwgQ0ZFUkFNX05BTUVfTEVOLAorCQkJICAgICAgJmNmZV9vZmYsIGltZzFfc2l6ZSwgJmNmZTFfbmFtZSwgJmNmZTFfc2l6ZSk7CisKKwljZmVfb2ZmID0gaW1nMl9vZmY7CisJcmV0ID0gamZmczJfZmluZF9maWxlKG1hc3RlciwgYnVmLCBDRkVSQU1fTkFNRSwgQ0ZFUkFNX05BTUVfTEVOLAorCQkJICAgICAgJmNmZV9vZmYsIGltZzJfc2l6ZSwgJmNmZTJfbmFtZSwgJmNmZTJfc2l6ZSk7CisKKwliZjEgPSBjZmVyYW1fYm9vdGZsYWdfdmFsdWUoY2ZlMV9uYW1lLCBjZmUxX3NpemUpOworCWlmIChiZjEgPj0gMCkKKwkJcHJpbnRrKCJjZmVyYW06IGJvb3RmbGFnMT0lZFxuIiwgYmYxKTsKKworCWJmMiA9IGNmZXJhbV9ib290ZmxhZ192YWx1ZShjZmUyX25hbWUsIGNmZTJfc2l6ZSk7CisJaWYgKGJmMiA+PSAwKQorCQlwcmludGsoImNmZXJhbTogYm9vdGZsYWcyPSVkXG4iLCBiZjIpOworCisJa2ZyZWUoY2ZlMV9uYW1lKTsKKwlrZnJlZShjZmUyX25hbWUpOworCisJaWYgKGJmMSA+PSBiZjIpIHsKKwkJYWN0aXZlX29mZiA9IGltZzFfb2ZmOworCQlhY3RpdmVfc2l6ZSA9IGltZzFfc2l6ZTsKKwkJaW5hY3RpdmVfb2ZmID0gaW1nMl9vZmY7CisJCWluYWN0aXZlX3NpemUgPSBpbWcyX3NpemU7CisJCWluYWN0aXZlX25hbWUgPSBQQVJUX0lNQUdFXzI7CisJfSBlbHNlIHsKKwkJYWN0aXZlX29mZiA9IGltZzJfb2ZmOworCQlhY3RpdmVfc2l6ZSA9IGltZzJfc2l6ZTsKKwkJaW5hY3RpdmVfb2ZmID0gaW1nMV9vZmY7CisJCWluYWN0aXZlX3NpemUgPSBpbWcxX3NpemU7CisJCWluYWN0aXZlX25hbWUgPSBQQVJUX0lNQUdFXzE7CisJfQorCisJcmV0ID0gcGFyc2VfYmNtX3dmaShtYXN0ZXIsIHBwYXJ0cywgYnVmLCBhY3RpdmVfb2ZmLCBhY3RpdmVfc2l6ZSwgdHJ1ZSk7CisKKwlrZnJlZShidWYpOworCisJaWYgKHJldCA+IDApIHsKKwkJcGFydHMgPSBremFsbG9jKChyZXQgKyAxKSAqIHNpemVvZigqcGFydHMpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwYXJ0cykKKwkJCXJldHVybiAtRU5PTUVNOworCisJCW1lbWNweShwYXJ0cywgKnBwYXJ0cywgcmV0ICogc2l6ZW9mKCpwYXJ0cykpOworCQlrZnJlZSgqcHBhcnRzKTsKKworCQlwYXJ0c1tyZXRdLm5hbWUgPSBpbmFjdGl2ZV9uYW1lOworCQlwYXJ0c1tyZXRdLm9mZnNldCA9IGluYWN0aXZlX29mZjsKKwkJcGFydHNbcmV0XS5zaXplID0gaW5hY3RpdmVfc2l6ZTsKKwkJcmV0Kys7CisKKwkJKnBwYXJ0cyA9IHBhcnRzOworCX0gZWxzZSB7CisJCXBhcnRzID0ga3phbGxvYyhCQ01fV0ZJX1NQTElUX1BBUlRTICogc2l6ZW9mKCpwYXJ0cyksIEdGUF9LRVJORUwpOworCisJCXBhcnRzWzBdLm5hbWUgPSBQQVJUX0lNQUdFXzE7CisJCXBhcnRzWzBdLm9mZnNldCA9IGltZzFfb2ZmOworCQlwYXJ0c1swXS5zaXplID0gaW1nMV9zaXplOworCisJCXBhcnRzWzFdLm5hbWUgPSBQQVJUX0lNQUdFXzI7CisJCXBhcnRzWzFdLm9mZnNldCA9IGltZzJfb2ZmOworCQlwYXJ0c1sxXS5zaXplID0gaW1nMl9zaXplOworCisJCSpwcGFydHMgPSBwYXJ0czsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGRzcGxpdF9iY21fd2ZpX3NwbGl0X29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJicmNtLHdmaS1zcGxpdCIgfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0X3BhcnNlciBtdGRzcGxpdF9iY21fd2ZpX3NwbGl0X3BhcnNlciA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubmFtZSA9ICJiY20td2ZpLXNwbGl0LWZ3IiwKKwkub2ZfbWF0Y2hfdGFibGUgPSBtdGRzcGxpdF9iY21fd2ZpX3NwbGl0X29mX21hdGNoLAorCS5wYXJzZV9mbiA9IG10ZHNwbGl0X3BhcnNlX2JjbV93Zmlfc3BsaXQsCisJLnR5cGUgPSBNVERfUEFSU0VSX1RZUEVfRklSTVdBUkUsCit9OworCitzdGF0aWMgaW50IHNlcmNvbW1fYm9vdGZsYWdfdmFsdWUoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1ZikKK3sKKwlzaXplX3QgcmV0bGVuOworCWxvZmZfdCBvZmZzOworCWludCByYzsKKworCWZvciAob2ZmcyA9IDA7IG9mZnMgPCBtdGQtPnNpemU7IG9mZnMgKz0gbXRkLT5lcmFzZXNpemUpIHsKKwkJcmMgPSBtdGRfcmVhZChtdGQsIG9mZnMsIFNFUkNPTU1fTUFHSUNfTEVOLCAmcmV0bGVuLCBidWYpOworCQlpZiAocmMgfHwgcmV0bGVuICE9IFNFUkNPTU1fTUFHSUNfTEVOKQorCQkJY29udGludWU7CisKKwkJaWYgKG1lbWNtcChidWYsIFNFUkNPTU1fTUFHSUNfUEZYLCBTRVJDT01NX01BR0lDX1BGWF9MRU4pKQorCQkJY29udGludWU7CisKKwkJcmMgPSBjaGFyX3RvX251bShidWZbU0VSQ09NTV9NQUdJQ19QRlhfTEVOICsgMF0pICogMTAwOworCQlyYyArPSBjaGFyX3RvX251bShidWZbU0VSQ09NTV9NQUdJQ19QRlhfTEVOICsgMV0pICogMTA7CisJCXJjICs9IGNoYXJfdG9fbnVtKGJ1ZltTRVJDT01NX01BR0lDX1BGWF9MRU4gKyAyXSkgKiAxOworCisJCXJldHVybiByYzsKKwl9CisKKwlyZXR1cm4gLUVOT0VOVDsKK30KKworc3RhdGljIGludCBtdGRzcGxpdF9wYXJzZV9zZXJfd2ZpKHN0cnVjdCBtdGRfaW5mbyAqbWFzdGVyLAorCQkJCSAgY29uc3Qgc3RydWN0IG10ZF9wYXJ0aXRpb24gKipwcGFydHMsCisJCQkJICBzdHJ1Y3QgbXRkX3BhcnRfcGFyc2VyX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkX2JmMSwgKm10ZF9iZjI7CisJbG9mZl90IGltZzFfb2ZmID0gMDsKKwlsb2ZmX3QgaW1nMl9vZmYgPSBtYXN0ZXItPnNpemUgLyAyOworCWxvZmZfdCBpbWcxX3NpemUgPSAoaW1nMl9vZmYgLSBpbWcxX29mZik7CisJbG9mZl90IGltZzJfc2l6ZSA9IChtYXN0ZXItPnNpemUgLSBpbWcyX29mZik7CisJbG9mZl90IGFjdGl2ZV9vZmYsIGluYWN0aXZlX29mZjsKKwlsb2ZmX3QgYWN0aXZlX3NpemUsIGluYWN0aXZlX3NpemU7CisJY29uc3QgY2hhciAqaW5hY3RpdmVfbmFtZTsKKwl1aW50OF90ICpidWY7CisJaW50IGJmMSwgYmYyOworCWludCByZXQ7CisKKwltdGRfYmYxID0gZ2V0X210ZF9kZXZpY2Vfbm0oImJvb3RmbGFnMSIpOworCWlmIChJU19FUlIobXRkX2JmMSkpCisJCXJldHVybiAtRU5PRU5UOworCisJbXRkX2JmMiA9IGdldF9tdGRfZGV2aWNlX25tKCJib290ZmxhZzIiKTsKKwlpZiAoSVNfRVJSKG10ZF9iZjIpKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWJ1ZiA9IGt6YWxsb2MobWFzdGVyLT5lcmFzZXNpemUsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWJmMSA9IHNlcmNvbW1fYm9vdGZsYWdfdmFsdWUobXRkX2JmMSwgYnVmKTsKKwlpZiAoYmYxID49IDApCisJCXByaW50aygic2VyY29tbTogYm9vdGZsYWcxPSVkXG4iLCBiZjEpOworCisJYmYyID0gc2VyY29tbV9ib290ZmxhZ192YWx1ZShtdGRfYmYyLCBidWYpOworCWlmIChiZjIgPj0gMCkKKwkJcHJpbnRrKCJzZXJjb21tOiBib290ZmxhZzI9JWRcbiIsIGJmMik7CisKKwlpZiAoYmYxID09IGJmMiAmJiBiZjIgPj0gMCkgeworCQlzdHJ1Y3QgZXJhc2VfaW5mbyBiZl9lcmFzZTsKKworCQliZjIgPSAtRU5PRU5UOworCQliZl9lcmFzZS5hZGRyID0gMDsKKwkJYmZfZXJhc2UubGVuID0gbXRkX2JmMi0+c2l6ZTsKKwkJbXRkX2VyYXNlKG10ZF9iZjIsICZiZl9lcmFzZSk7CisJfQorCisJaWYgKGJmMSA+PSBiZjIpIHsKKwkJYWN0aXZlX29mZiA9IGltZzFfb2ZmOworCQlhY3RpdmVfc2l6ZSA9IGltZzFfc2l6ZTsKKwkJaW5hY3RpdmVfb2ZmID0gaW1nMl9vZmY7CisJCWluYWN0aXZlX3NpemUgPSBpbWcyX3NpemU7CisJCWluYWN0aXZlX25hbWUgPSBQQVJUX0lNQUdFXzI7CisJfSBlbHNlIHsKKwkJYWN0aXZlX29mZiA9IGltZzJfb2ZmOworCQlhY3RpdmVfc2l6ZSA9IGltZzJfc2l6ZTsKKwkJaW5hY3RpdmVfb2ZmID0gaW1nMV9vZmY7CisJCWluYWN0aXZlX3NpemUgPSBpbWcxX3NpemU7CisJCWluYWN0aXZlX25hbWUgPSBQQVJUX0lNQUdFXzE7CisJfQorCisJcmV0ID0gcGFyc2VfYmNtX3dmaShtYXN0ZXIsIHBwYXJ0cywgYnVmLCBhY3RpdmVfb2ZmLCBhY3RpdmVfc2l6ZSwgZmFsc2UpOworCisJa2ZyZWUoYnVmKTsKKworCWlmIChyZXQgPiAwKSB7CisJCXBhcnRzID0ga3phbGxvYygocmV0ICsgMSkgKiBzaXplb2YoKnBhcnRzKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcGFydHMpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQltZW1jcHkocGFydHMsICpwcGFydHMsIHJldCAqIHNpemVvZigqcGFydHMpKTsKKwkJa2ZyZWUoKnBwYXJ0cyk7CisKKwkJcGFydHNbcmV0XS5uYW1lID0gaW5hY3RpdmVfbmFtZTsKKwkJcGFydHNbcmV0XS5vZmZzZXQgPSBpbmFjdGl2ZV9vZmY7CisJCXBhcnRzW3JldF0uc2l6ZSA9IGluYWN0aXZlX3NpemU7CisJCXJldCsrOworCisJCSpwcGFydHMgPSBwYXJ0czsKKwl9IGVsc2UgeworCQlwYXJ0cyA9IGt6YWxsb2MoQkNNX1dGSV9TUExJVF9QQVJUUyAqIHNpemVvZigqcGFydHMpLCBHRlBfS0VSTkVMKTsKKworCQlwYXJ0c1swXS5uYW1lID0gUEFSVF9JTUFHRV8xOworCQlwYXJ0c1swXS5vZmZzZXQgPSBpbWcxX29mZjsKKwkJcGFydHNbMF0uc2l6ZSA9IGltZzFfc2l6ZTsKKworCQlwYXJ0c1sxXS5uYW1lID0gUEFSVF9JTUFHRV8yOworCQlwYXJ0c1sxXS5vZmZzZXQgPSBpbWcyX29mZjsKKwkJcGFydHNbMV0uc2l6ZSA9IGltZzJfc2l6ZTsKKworCQkqcHBhcnRzID0gcGFydHM7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRkc3BsaXRfc2VyX3dmaV9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAic2VyY29tbSx3ZmkiIH0sCisJeyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydF9wYXJzZXIgbXRkc3BsaXRfc2VyX3dmaV9wYXJzZXIgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSAic2VyLXdmaS1mdyIsCisJLm9mX21hdGNoX3RhYmxlID0gbXRkc3BsaXRfc2VyX3dmaV9vZl9tYXRjaCwKKwkucGFyc2VfZm4gPSBtdGRzcGxpdF9wYXJzZV9zZXJfd2ZpLAorCS50eXBlID0gTVREX1BBUlNFUl9UWVBFX0ZJUk1XQVJFLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXRkc3BsaXRfYmNtX3dmaV9pbml0KHZvaWQpCit7CisJcmVnaXN0ZXJfbXRkX3BhcnNlcigmbXRkc3BsaXRfYmNtX3dmaV9wYXJzZXIpOworCXJlZ2lzdGVyX210ZF9wYXJzZXIoJm10ZHNwbGl0X2JjbV93Zmlfc3BsaXRfcGFyc2VyKTsKKwlyZWdpc3Rlcl9tdGRfcGFyc2VyKCZtdGRzcGxpdF9zZXJfd2ZpX3BhcnNlcik7CisKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX2luaXQobXRkc3BsaXRfYmNtX3dmaV9pbml0KTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbXRkL210ZHNwbGl0L210ZHNwbGl0X2JybmltYWdlLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL210ZC9tdGRzcGxpdC9tdGRzcGxpdF9icm5pbWFnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMmQ3OTYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL210ZC9tdGRzcGxpdC9tdGRzcGxpdF9icm5pbWFnZS5jCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMiBKb2huIENyaXNwaW4gPGJsb2dpY0BvcGVud3J0Lm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTUgTWFydGluIEJsdW1lbnN0aW5nbCA8bWFydGluLmJsdW1lbnN0aW5nbEBnb29nbGVtYWlsLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oPgorCisjaW5jbHVkZSAibXRkc3BsaXQuaCIKKworI2RlZmluZSBCUk5JTUFHRV9OUl9QQVJUUwkyCisKKyNkZWZpbmUgQlJOSU1BR0VfQUxJR05fQllURVMJMHg0MDAKKyNkZWZpbmUgQlJOSU1BR0VfRk9PVEVSX1NJWkUJMTIKKworI2RlZmluZSBCUk5JTUFHRV9NSU5fT1ZFUkhFQUQJKEJSTklNQUdFX0ZPT1RFUl9TSVpFKQorI2RlZmluZSBCUk5JTUFHRV9NQVhfT1ZFUkhFQUQJKEJSTklNQUdFX0FMSUdOX0JZVEVTICsgQlJOSU1BR0VfRk9PVEVSX1NJWkUpCisKK3N0YXRpYyBpbnQgbXRkc3BsaXRfcGFyc2VfYnJuaW1hZ2Uoc3RydWN0IG10ZF9pbmZvICptYXN0ZXIsCisJCQkJY29uc3Qgc3RydWN0IG10ZF9wYXJ0aXRpb24gKipwcGFydHMsCisJCQkJc3RydWN0IG10ZF9wYXJ0X3BhcnNlcl9kYXRhICpkYXRhKQoreworCXN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0czsKKwl1aW50MzJfdCBidWY7CisJdW5zaWduZWQgbG9uZyByb290ZnNfb2Zmc2V0LCByb290ZnNfc2l6ZSwga2VybmVsX3NpemU7CisJc2l6ZV90IGxlbjsKKwlpbnQgcmV0ID0gMDsKKworCWZvciAocm9vdGZzX29mZnNldCA9IDA7IHJvb3Rmc19vZmZzZXQgPCBtYXN0ZXItPnNpemU7CisJICAgICByb290ZnNfb2Zmc2V0ICs9IEJSTklNQUdFX0FMSUdOX0JZVEVTKSB7CisJCXJldCA9IG10ZF9jaGVja19yb290ZnNfbWFnaWMobWFzdGVyLCByb290ZnNfb2Zmc2V0LCBOVUxMKTsKKwkJaWYgKCFyZXQpCisJCQlicmVhazsKKwl9CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKHJvb3Rmc19vZmZzZXQgPj0gbWFzdGVyLT5zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IG10ZF9yZWFkKG1hc3Rlciwgcm9vdGZzX29mZnNldCAtIEJSTklNQUdFX0ZPT1RFUl9TSVpFLCA0LCAmbGVuLAorCQkJKHZvaWQgKikmYnVmKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGxlbiAhPSA0KQorCQlyZXR1cm4gLUVJTzsKKworCWtlcm5lbF9zaXplID0gbGUzMl90b19jcHUoYnVmKTsKKworCWlmIChrZXJuZWxfc2l6ZSA+IChyb290ZnNfb2Zmc2V0IC0gQlJOSU1BR0VfTUlOX09WRVJIRUFEKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoa2VybmVsX3NpemUgPCAocm9vdGZzX29mZnNldCAtIEJSTklNQUdFX01BWF9PVkVSSEVBRCkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBUaGUgZm9vdGVyIG11c3QgYmUgdW50b3VjaGVkIGFzIGl0IGNvbnRhaW5zIHRoZSBjaGVja3N1bSBvZiB0aGUKKwkgKiBvcmlnaW5hbCBicm5JbWFnZSAoa2VybmVsICsgc3F1YXNoZnMpIQorCSAqLworCXJvb3Rmc19zaXplID0gbWFzdGVyLT5zaXplIC0gcm9vdGZzX29mZnNldCAtIEJSTklNQUdFX0ZPT1RFUl9TSVpFOworCisJcGFydHMgPSBremFsbG9jKEJSTklNQUdFX05SX1BBUlRTICogc2l6ZW9mKCpwYXJ0cyksIEdGUF9LRVJORUwpOworCWlmICghcGFydHMpCisJCXJldHVybiAtRU5PTUVNOworCisJcGFydHNbMF0ubmFtZSA9IEtFUk5FTF9QQVJUX05BTUU7CisJcGFydHNbMF0ub2Zmc2V0ID0gMDsKKwlwYXJ0c1swXS5zaXplID0ga2VybmVsX3NpemU7CisKKwlwYXJ0c1sxXS5uYW1lID0gUk9PVEZTX1BBUlRfTkFNRTsKKwlwYXJ0c1sxXS5vZmZzZXQgPSByb290ZnNfb2Zmc2V0OworCXBhcnRzWzFdLnNpemUgPSByb290ZnNfc2l6ZTsKKworCSpwcGFydHMgPSBwYXJ0czsKKwlyZXR1cm4gQlJOSU1BR0VfTlJfUEFSVFM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRfcGFyc2VyIG10ZHNwbGl0X2JybmltYWdlX3BhcnNlciA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubmFtZSA9ICJicm5pbWFnZS1mdyIsCisJLnBhcnNlX2ZuID0gbXRkc3BsaXRfcGFyc2VfYnJuaW1hZ2UsCisJLnR5cGUgPSBNVERfUEFSU0VSX1RZUEVfRklSTVdBUkUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtdGRzcGxpdF9icm5pbWFnZV9pbml0KHZvaWQpCit7CisJcmVnaXN0ZXJfbXRkX3BhcnNlcigmbXRkc3BsaXRfYnJuaW1hZ2VfcGFyc2VyKTsKKworCXJldHVybiAwOworfQorCitzdWJzeXNfaW5pdGNhbGwobXRkc3BsaXRfYnJuaW1hZ2VfaW5pdCk7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL210ZC9tdGRzcGxpdC9tdGRzcGxpdF9jZmVfYm9vdGZzLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL210ZC9tdGRzcGxpdC9tdGRzcGxpdF9jZmVfYm9vdGZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM0NzRjOQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbXRkL210ZHNwbGl0L210ZHNwbGl0X2NmZV9ib290ZnMuYwpAQCAtMCwwICsxLDkwIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFJhZmHFgiBNacWCZWNraSA8cmFmYWxAbWlsZWNraS5wbD4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2pmZnMyLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlICJtdGRzcGxpdC5oIgorCisjZGVmaW5lIGplMTZfdG9fY3B1KHgpICgoeCkudjE2KQorI2RlZmluZSBqZTMyX3RvX2NwdSh4KSAoKHgpLnYzMikKKworI2RlZmluZSBOUl9QQVJUUwkJMgorCitzdGF0aWMgaW50IG10ZHNwbGl0X2NmZV9ib290ZnNfcGFyc2Uoc3RydWN0IG10ZF9pbmZvICptdGQsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqKnBwYXJ0cywKKwkJCQkgICAgIHN0cnVjdCBtdGRfcGFydF9wYXJzZXJfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgamZmczJfcmF3X2RpcmVudCBub2RlOworCWVudW0gbXRkc3BsaXRfcGFydF90eXBlIHR5cGU7CisJc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzOworCXNpemVfdCByb290ZnNfb2Zmc2V0OworCXNpemVfdCByZXRsZW47CisJc2l6ZV90IG9mZnNldDsKKwlpbnQgZXJyOworCisJLyogRG9uJ3QgcGFyc2UgYmFja3VwIHBhcnRpdGlvbnMgKi8KKwlpZiAoc3RyY21wKG10ZC0+bmFtZSwgImZpcm13YXJlIikpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogRmluZCB0aGUgZW5kIG9mIEpGRlMyIGJvb3RmcyBwYXJ0aXRpb24gKi8KKwlvZmZzZXQgPSAwOworCWRvIHsKKwkJZXJyID0gbXRkX3JlYWQobXRkLCBvZmZzZXQsIHNpemVvZihub2RlKSwgJnJldGxlbiwgKHZvaWQgKikmbm9kZSk7CisJCWlmIChlcnIgfHwgcmV0bGVuICE9IHNpemVvZihub2RlKSkKKwkJCWJyZWFrOworCisJCWlmIChqZTE2X3RvX2NwdShub2RlLm1hZ2ljKSAhPSBKRkZTMl9NQUdJQ19CSVRNQVNLKQorCQkJYnJlYWs7CisKKwkJb2Zmc2V0ICs9IGplMzJfdG9fY3B1KG5vZGUudG90bGVuKTsKKwkJb2Zmc2V0ID0gKG9mZnNldCArIDB4MykgJiB+MHgzOworCX0gd2hpbGUgKG9mZnNldCA8IG10ZC0+c2l6ZSk7CisKKwkvKiBGaW5kIHJvb3RmcyBwYXJ0aXRpb24gdGhhdCBmb2xsb3dzIHRoZSBib290ZnMgKi8KKwllcnIgPSBtdGRfZmluZF9yb290ZnNfZnJvbShtdGQsIG10ZC0+ZXJhc2VzaXplLCBtdGQtPnNpemUsICZyb290ZnNfb2Zmc2V0LCAmdHlwZSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXBhcnRzID0ga3phbGxvYyhOUl9QQVJUUyAqIHNpemVvZigqcGFydHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBhcnRzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBhcnRzWzBdLm5hbWUgPSAiYm9vdGZzIjsKKwlwYXJ0c1swXS5vZmZzZXQgPSAwOworCXBhcnRzWzBdLnNpemUgPSByb290ZnNfb2Zmc2V0OworCisJaWYgKHR5cGUgPT0gTVREU1BMSVRfUEFSVF9UWVBFX1VCSSkKKwkJcGFydHNbMV0ubmFtZSA9IFVCSV9QQVJUX05BTUU7CisJZWxzZQorCQlwYXJ0c1sxXS5uYW1lID0gUk9PVEZTX1BBUlRfTkFNRTsKKwlwYXJ0c1sxXS5vZmZzZXQgPSByb290ZnNfb2Zmc2V0OworCXBhcnRzWzFdLnNpemUgPSBtdGQtPnNpemUgLSByb290ZnNfb2Zmc2V0OworCisJKnBwYXJ0cyA9IHBhcnRzOworCisJcmV0dXJuIE5SX1BBUlRTOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGRzcGxpdF9jZmVfYm9vdGZzX29mX21hdGNoX3RhYmxlW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJicmNtLGJjbTQ5MDgtZmlybXdhcmUiIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXRkc3BsaXRfY2ZlX2Jvb3Rmc19vZl9tYXRjaF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRfcGFyc2VyIG10ZHNwbGl0X2NmZV9ib290ZnNfcGFyc2VyID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gImNmZS1ib290ZnMiLAorCS5vZl9tYXRjaF90YWJsZSA9IG10ZHNwbGl0X2NmZV9ib290ZnNfb2ZfbWF0Y2hfdGFibGUsCisJLnBhcnNlX2ZuID0gbXRkc3BsaXRfY2ZlX2Jvb3Rmc19wYXJzZSwKK307CisKK21vZHVsZV9tdGRfcGFydF9wYXJzZXIobXRkc3BsaXRfY2ZlX2Jvb3Rmc19wYXJzZXIpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9tdGQvbXRkc3BsaXQvbXRkc3BsaXRfZWxmLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL210ZC9tdGRzcGxpdC9tdGRzcGxpdF9lbGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzgxODQxCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9tdGQvbXRkc3BsaXQvbXRkc3BsaXRfZWxmLmMKQEAgLTAsMCArMSwyODcgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KKy8qCisgKiAgTVREIHNwbGl0dGVyIGZvciBFTEYgbG9hZGVyIGZpcm13YXJlIHBhcnRpdGlvbnMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDIwIFNhbmRlciBWYW5oZXVsZSA8c2FuZGVyQHN2YW5oZXVsZS5uZXQ+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIuCisgKgorICogIFRvIHBhcnNlIHRoZSBFTEYga2VybmVsIGxvYWRlciwgYSBzbWFsbCBFTEYgcGFyc2VyIGlzIHVzZWQgdGhhdCBjYW4KKyAqICBoYW5kbGUgYm90aCBFTEYzMiBvciBFTEY2NCBjbGFzcyBsb2FkZXJzLiBUaGUgc3BsaXR0ZXIgYXNzdW1lcyB0aGF0IHRoZQorICogIGtlcm5lbCBpcyBhbHdheXMgbG9jYXRlZCBiZWZvcmUgdGhlIHJvb3Rmcywgd2hldGhlciBpdCBpcyBlbWJlZGRlZCBpbiB0aGUKKyAqICBsb2FkZXIgb3Igbm90LgorICoKKyAqICBUaGUga2VybmVsIGltYWdlIGlzIHByZWZlcmFibHkgZW1iZWRkZWQgaW5zaWRlIHRoZSBFTEYgbG9hZGVyLCBzbyB0aGUgZW5kCisgKiAgb2YgdGhlIGxvYWRlciBlcXVhbHMgdGhlIGVuZCBvZiB0aGUga2VybmVsIHBhcnRpdGlvbi4gVGhpcyBpcyBkdWUgdG8gdGhlCisgKiAgd2F5IG10ZF9maW5kX3Jvb3Rmc19mcm9tIHNlYXJjaGVzIGZvciB0aGUgdGhlIHJvb3RmczoKKyAqICAtIGlmIHRoZSBrZXJuZWwgaW1hZ2UgaXMgZW1iZWRkZWQgaW4gdGhlIGxvYWRlciwgdGhlIGFwcGVuZGVkIHJvb3RmcyBtYXkKKyAqICAgIGZvbGxvdyB0aGUgbG9hZGVyIGltbWVkaWF0ZWx5LCB3aXRoaW4gdGhlIHNhbWUgZXJhc2UgYmxvY2suCisgKiAgLSBpZiB0aGUga2VybmVsIGltYWdlIGlzIG5vdCBlbWJlZGRlZCBpbiB0aGUgbG9hZGVyLCBidXQgcGxhY2VkIGF0IHNvbWUKKyAqICAgIG9mZnNldCBiZWhpbmQgdGhlIGxvYWRlciAoT0tMSS1zdHlsZSBsb2FkZXIpLCB0aGUgcm9vdGZzIG11c3QgYmUKKyAqICAgIGFsaWduZWQgdG8gYW4gZXJhc2UtYmxvY2sgYWZ0ZXIgdGhlIGxvYWRlciBhbmQga2VybmVsIGltYWdlLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaD4KKworI2luY2x1ZGUgIm10ZHNwbGl0LmgiCisKKyNkZWZpbmUgRUxGX05SX1BBUlRTCTIKKworI2RlZmluZSBFTEZfTUFHSUMJMHg3ZjQ1NGM0NiAvKiAweDdmIEUgTCBGICovCisjZGVmaW5lIEVMRl9DTEFTU18zMgkxCisjZGVmaW5lIEVMRl9DTEFTU182NAkyCisKK3N0cnVjdCBlbGZfaGVhZGVyX2lkZW50IHsKKwl1aW50MzJfdCBtYWdpYzsKKwl1aW50OF90IGNsYXNzOworCXVpbnQ4X3QgZGF0YTsKKwl1aW50OF90IHZlcnNpb247CisJdWludDhfdCBvc2FiaTsKKwl1aW50OF90IGFiaXZlcnNpb247CisJdWludDhfdCBwYWRbN107Cit9OworCitzdHJ1Y3QgZWxmX2hlYWRlcl8zMiB7CisJdWludDE2X3QgdHlwZTsKKwl1aW50MTZfdCBtYWNoaW5lOworCXVpbnQzMl90IHZlcnNpb247CisJdWludDMyX3QgZW50cnk7CisJdWludDMyX3QgcGhvZmY7CisJdWludDMyX3Qgc2hvZmY7CisJdWludDMyX3QgZmxhZ3M7CisJdWludDE2X3QgZWhzaXplOworCXVpbnQxNl90IHBoZW50c2l6ZTsKKwl1aW50MTZfdCBwaG51bTsKKwl1aW50MTZfdCBzaGVudHNpemU7CisJdWludDE2X3Qgc2hudW07CisJdWludDE2X3Qgc2hzdHJuZHg7Cit9OworCitzdHJ1Y3QgZWxmX2hlYWRlcl82NCB7CisJdWludDE2X3QgdHlwZTsKKwl1aW50MTZfdCBtYWNoaW5lOworCXVpbnQzMl90IHZlcnNpb247CisJdWludDY0X3QgZW50cnk7CisJdWludDY0X3QgcGhvZmY7CisJdWludDY0X3Qgc2hvZmY7CisJdWludDMyX3QgZmxhZ3M7CisJdWludDE2X3QgZWhzaXplOworCXVpbnQxNl90IHBoZW50c2l6ZTsKKwl1aW50MTZfdCBwaG51bTsKKwl1aW50MTZfdCBzaGVudHNpemU7CisJdWludDE2X3Qgc2hudW07CisJdWludDE2X3Qgc2hzdHJuZHg7Cit9OworCitzdHJ1Y3QgZWxmX2hlYWRlciB7CisJc3RydWN0IGVsZl9oZWFkZXJfaWRlbnQgaWRlbnQ7CisJdW5pb24geworCQlzdHJ1Y3QgZWxmX2hlYWRlcl8zMiBlbGYzMjsKKwkJc3RydWN0IGVsZl9oZWFkZXJfNjQgZWxmNjQ7CisJfTsKK307CisKK3N0cnVjdCBlbGZfcHJvZ3JhbV9oZWFkZXJfMzIgeworCXVpbnQzMl90IHR5cGU7CisJdWludDMyX3Qgb2Zmc2V0OworCXVpbnQzMl90IHZhZGRyOworCXVpbnQzMl90IHBhZGRyOworCXVpbnQzMl90IGZpbGVzaXplOworCXVpbnQzMl90IG1lbXNpemU7CisJdWludDMyX3QgZmxhZ3M7Cit9OworCitzdHJ1Y3QgZWxmX3Byb2dyYW1faGVhZGVyXzY0IHsKKwl1aW50MzJfdCB0eXBlOworCXVpbnQzMl90IGZsYWdzOworCXVpbnQ2NF90IG9mZnNldDsKKwl1aW50NjRfdCB2YWRkcjsKKwl1aW50NjRfdCBwYWRkcjsKKwl1aW50NjRfdCBmaWxlc2l6ZTsKKwl1aW50NjRfdCBtZW1zaXplOworfTsKKworCitzdGF0aWMgaW50IG10ZHNwbGl0X2VsZl9yZWFkX210ZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc2l6ZV90IG9mZnNldCwKKwkJCQkgdWludDhfdCAqZHN0LCBzaXplX3QgbGVuKQoreworCXNpemVfdCByZXRsZW47CisJaW50IHJldDsKKworCXJldCA9IG10ZF9yZWFkKG10ZCwgb2Zmc2V0LCBsZW4sICZyZXRsZW4sIGRzdCk7CisJaWYgKHJldCkgeworCQlwcl9kZWJ1ZygicmVhZCBlcnJvciBpbiBcIiVzXCJcbiIsIG10ZC0+bmFtZSk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKHJldGxlbiAhPSBsZW4pIHsKKwkJcHJfZGVidWcoInNob3J0IHJlYWQgaW4gXCIlc1wiXG4iLCBtdGQtPm5hbWUpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlbGYzMl9kZXRlcm1pbmVfc2l6ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGVsZl9oZWFkZXIgKmhkciwKKwkJCQlzaXplX3QgKnNpemUpCit7CisJc3RydWN0IGVsZl9oZWFkZXJfMzIgKmhkcjMyID0gJihoZHItPmVsZjMyKTsKKwlpbnQgZXJyOworCXNpemVfdCBzZWN0aW9uX2VuZCwgcGhfdGFibGVfZW5kLCBwaF9lbnRyeTsKKwlzdHJ1Y3QgZWxmX3Byb2dyYW1faGVhZGVyXzMyIHBoOworCisJKnNpemUgPSAwOworCisJaWYgKGhkcjMyLT5zaG9mZiA+IDApIHsKKwkJKnNpemUgPSBoZHIzMi0+c2hvZmYgKyBoZHIzMi0+c2hlbnRzaXplICogaGRyMzItPnNobnVtOworCQlyZXR1cm4gMDsKKwl9CisKKwlwaF9lbnRyeSA9IGhkcjMyLT5waG9mZjsKKwlwaF90YWJsZV9lbmQgPSBoZHIzMi0+cGhvZmYgKyBoZHIzMi0+cGhlbnRzaXplICogaGRyMzItPnBobnVtOworCisJd2hpbGUgKHBoX2VudHJ5IDwgcGhfdGFibGVfZW5kKSB7CisJCWVyciA9IG10ZHNwbGl0X2VsZl9yZWFkX210ZChtdGQsIHBoX2VudHJ5LCAodWludDhfdCAqKSgmcGgpLAorCQkJCQkgICAgc2l6ZW9mKHBoKSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCXNlY3Rpb25fZW5kID0gcGgub2Zmc2V0ICsgcGguZmlsZXNpemU7CisJCWlmIChzZWN0aW9uX2VuZCA+ICpzaXplKQorCQkJKnNpemUgPSBzZWN0aW9uX2VuZDsKKworCQlwaF9lbnRyeSArPSBoZHIzMi0+cGhlbnRzaXplOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVsZjY0X2RldGVybWluZV9zaXplKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZWxmX2hlYWRlciAqaGRyLAorCQkJCXNpemVfdCAqc2l6ZSkKK3sKKwlzdHJ1Y3QgZWxmX2hlYWRlcl82NCAqaGRyNjQgPSAmKGhkci0+ZWxmNjQpOworCWludCBlcnI7CisJc2l6ZV90IHNlY3Rpb25fZW5kLCBwaF90YWJsZV9lbmQsIHBoX2VudHJ5OworCXN0cnVjdCBlbGZfcHJvZ3JhbV9oZWFkZXJfNjQgcGg7CisKKwkqc2l6ZSA9IDA7CisKKwlpZiAoaGRyNjQtPnNob2ZmID4gMCkgeworCQkqc2l6ZSA9IGhkcjY0LT5zaG9mZiArIGhkcjY0LT5zaGVudHNpemUgKiBoZHI2NC0+c2hudW07CisJCXJldHVybiAwOworCX0KKworCXBoX2VudHJ5ID0gaGRyNjQtPnBob2ZmOworCXBoX3RhYmxlX2VuZCA9IGhkcjY0LT5waG9mZiArIGhkcjY0LT5waGVudHNpemUgKiBoZHI2NC0+cGhudW07CisKKwl3aGlsZSAocGhfZW50cnkgPCBwaF90YWJsZV9lbmQpIHsKKwkJZXJyID0gbXRkc3BsaXRfZWxmX3JlYWRfbXRkKG10ZCwgcGhfZW50cnksICh1aW50OF90ICopKCZwaCksCisJCQkJCSAgICBzaXplb2YocGgpKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJc2VjdGlvbl9lbmQgPSBwaC5vZmZzZXQgKyBwaC5maWxlc2l6ZTsKKwkJaWYgKHNlY3Rpb25fZW5kID4gKnNpemUpCisJCQkqc2l6ZSA9IHNlY3Rpb25fZW5kOworCisJCXBoX2VudHJ5ICs9IGhkcjY0LT5waGVudHNpemU7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRkc3BsaXRfcGFyc2VfZWxmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCQkJICAgICAgY29uc3Qgc3RydWN0IG10ZF9wYXJ0aXRpb24gKipwcGFydHMsCisJCQkgICAgICBzdHJ1Y3QgbXRkX3BhcnRfcGFyc2VyX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IGVsZl9oZWFkZXIgaGRyOworCXNpemVfdCBsb2FkZXJfc2l6ZSwgcm9vdGZzX29mZnNldDsKKwllbnVtIG10ZHNwbGl0X3BhcnRfdHlwZSB0eXBlOworCXN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0czsKKwlpbnQgZXJyOworCisJZXJyID0gbXRkc3BsaXRfZWxmX3JlYWRfbXRkKG10ZCwgMCwgKHVpbnQ4X3QgKikmaGRyLCBzaXplb2YoaGRyKSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmIChiZTMyX3RvX2NwdShoZHIuaWRlbnQubWFnaWMpICE9IEVMRl9NQUdJQykgeworCQlwcl9kZWJ1ZygiaW52YWxpZCBFTEYgbWFnaWMgJTA4eFxuIiwKKwkJCSBiZTMyX3RvX2NwdShoZHIuaWRlbnQubWFnaWMpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChoZHIuaWRlbnQuY2xhc3MpIHsKKwljYXNlIEVMRl9DTEFTU18zMjoKKwkJZXJyID0gZWxmMzJfZGV0ZXJtaW5lX3NpemUobXRkLCAmaGRyLCAmbG9hZGVyX3NpemUpOworCQlicmVhazsKKwljYXNlIEVMRl9DTEFTU182NDoKKwkJZXJyID0gZWxmNjRfZGV0ZXJtaW5lX3NpemUobXRkLCAmaGRyLCAmbG9hZGVyX3NpemUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9kZWJ1ZygiaW52YWxpZCBFTEYgY2xhc3MgJWlcbiIsIGhkci5pZGVudC5jbGFzcyk7CisJCWVyciA9IC1FSU5WQUw7CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IG10ZF9maW5kX3Jvb3Rmc19mcm9tKG10ZCwgbG9hZGVyX3NpemUsIG10ZC0+c2l6ZSwKKwkJCQkgICAmcm9vdGZzX29mZnNldCwgJnR5cGUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAocm9vdGZzX29mZnNldCA9PSBtdGQtPnNpemUpIHsKKwkJcHJfZGVidWcoIm5vIHJvb3RmcyBmb3VuZCBpbiBcIiVzXCJcbiIsIG10ZC0+bmFtZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXBhcnRzID0ga3phbGxvYyhFTEZfTlJfUEFSVFMgKiBzaXplb2YoKnBhcnRzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwYXJ0cykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwYXJ0c1swXS5uYW1lID0gS0VSTkVMX1BBUlRfTkFNRTsKKwlwYXJ0c1swXS5vZmZzZXQgPSAwOworCXBhcnRzWzBdLnNpemUgPSByb290ZnNfb2Zmc2V0OworCisJaWYgKHR5cGUgPT0gTVREU1BMSVRfUEFSVF9UWVBFX1VCSSkKKwkJcGFydHNbMV0ubmFtZSA9IFVCSV9QQVJUX05BTUU7CisJZWxzZQorCQlwYXJ0c1sxXS5uYW1lID0gUk9PVEZTX1BBUlRfTkFNRTsKKwlwYXJ0c1sxXS5vZmZzZXQgPSByb290ZnNfb2Zmc2V0OworCXBhcnRzWzFdLnNpemUgPSBtdGQtPnNpemUgLSByb290ZnNfb2Zmc2V0OworCisJKnBwYXJ0cyA9IHBhcnRzOworCXJldHVybiBFTEZfTlJfUEFSVFM7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10ZHNwbGl0X2VsZl9vZl9tYXRjaF90YWJsZVtdID0geworCXsgLmNvbXBhdGlibGUgPSAib3BlbndydCxlbGYiIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXRkc3BsaXRfZWxmX29mX21hdGNoX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydF9wYXJzZXIgbXRkc3BsaXRfZWxmX3BhcnNlciA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubmFtZSA9ICJlbGYtbG9hZGVyLWZ3IiwKKwkub2ZfbWF0Y2hfdGFibGUgPSBtdGRzcGxpdF9lbGZfb2ZfbWF0Y2hfdGFibGUsCisJLnBhcnNlX2ZuID0gbXRkc3BsaXRfcGFyc2VfZWxmLAorCS50eXBlID0gTVREX1BBUlNFUl9UWVBFX0ZJUk1XQVJFLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXRkc3BsaXRfZWxmX2luaXQodm9pZCkKK3sKKwlyZWdpc3Rlcl9tdGRfcGFyc2VyKCZtdGRzcGxpdF9lbGZfcGFyc2VyKTsKKworCXJldHVybiAwOworfQorCitzdWJzeXNfaW5pdGNhbGwobXRkc3BsaXRfZWxmX2luaXQpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9tdGQvbXRkc3BsaXQvbXRkc3BsaXRfZXZhLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL210ZC9tdGRzcGxpdC9tdGRzcGxpdF9ldmEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTAwNGE2Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9tdGQvbXRkc3BsaXQvbXRkc3BsaXRfZXZhLmMKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEyIEpvaG4gQ3Jpc3BpbiA8YmxvZ2ljQG9wZW53cnQub3JnPgorICogIENvcHlyaWdodCAoQykgMjAxNSBNYXJ0aW4gQmx1bWVuc3RpbmdsIDxtYXJ0aW4uYmx1bWVuc3RpbmdsQGdvb2dsZW1haWwuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9nZW5lcmljLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKworI2luY2x1ZGUgIm10ZHNwbGl0LmgiCisKKyNkZWZpbmUgRVZBX05SX1BBUlRTCQkyCisjZGVmaW5lIEVWQV9NQUdJQwkJMHhmZWVkMTI4MQorI2RlZmluZSBFVkFfRk9PVEVSX1NJWkUJCTB4MTgKKyNkZWZpbmUgRVZBX0RVTU1ZX1NRVUFTSEZTX1NJWkUJMHgxMDAKKworc3RydWN0IGV2YV9pbWFnZV9oZWFkZXIgeworCXVpbnQzMl90CW1hZ2ljOworCXVpbnQzMl90CXNpemU7Cit9OworCitzdGF0aWMgaW50IG10ZHNwbGl0X3BhcnNlX2V2YShzdHJ1Y3QgbXRkX2luZm8gKm1hc3RlciwKKwkJCQljb25zdCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqKnBwYXJ0cywKKwkJCQlzdHJ1Y3QgbXRkX3BhcnRfcGFyc2VyX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzOworCXN0cnVjdCBldmFfaW1hZ2VfaGVhZGVyIGhkcjsKKwlzaXplX3QgcmV0bGVuOworCXVuc2lnbmVkIGxvbmcga2VybmVsX3NpemUsIHJvb3Rmc19vZmZzZXQ7CisJaW50IGVycjsKKworCWVyciA9IG10ZF9yZWFkKG1hc3RlciwgMCwgc2l6ZW9mKGhkciksICZyZXRsZW4sICh2b2lkICopICZoZHIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAocmV0bGVuICE9IHNpemVvZihoZHIpKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChsZTMyX3RvX2NwdShoZHIubWFnaWMpICE9IEVWQV9NQUdJQykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlrZXJuZWxfc2l6ZSA9IGxlMzJfdG9fY3B1KGhkci5zaXplKSArIEVWQV9GT09URVJfU0laRTsKKworCS8qIHJvb3RmcyBzdGFydHMgYXQgdGhlIG5leHQgMHgxMDAwMCBib3VuZGFyeTogKi8KKwlyb290ZnNfb2Zmc2V0ID0gcm91bmRfdXAoa2VybmVsX3NpemUsIDB4MTAwMDApOworCisJLyogc2tpcCB0aGUgZHVtbXkgRVZBIHNxdWFzaGZzIHBhcnRpdGlvbiAod2l0aCB3cm9uZyBlbmRpYW5uZXNzKTogKi8KKwlyb290ZnNfb2Zmc2V0ICs9IEVWQV9EVU1NWV9TUVVBU0hGU19TSVpFOworCisJaWYgKHJvb3Rmc19vZmZzZXQgPj0gbWFzdGVyLT5zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVyciA9IG10ZF9jaGVja19yb290ZnNfbWFnaWMobWFzdGVyLCByb290ZnNfb2Zmc2V0LCBOVUxMKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcGFydHMgPSBremFsbG9jKEVWQV9OUl9QQVJUUyAqIHNpemVvZigqcGFydHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBhcnRzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBhcnRzWzBdLm5hbWUgPSBLRVJORUxfUEFSVF9OQU1FOworCXBhcnRzWzBdLm9mZnNldCA9IDA7CisJcGFydHNbMF0uc2l6ZSA9IGtlcm5lbF9zaXplOworCisJcGFydHNbMV0ubmFtZSA9IFJPT1RGU19QQVJUX05BTUU7CisJcGFydHNbMV0ub2Zmc2V0ID0gcm9vdGZzX29mZnNldDsKKwlwYXJ0c1sxXS5zaXplID0gbWFzdGVyLT5zaXplIC0gcm9vdGZzX29mZnNldDsKKworCSpwcGFydHMgPSBwYXJ0czsKKwlyZXR1cm4gRVZBX05SX1BBUlRTOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGRzcGxpdF9ldmFfb2ZfbWF0Y2hfdGFibGVbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImF2bSxldmEtZmlybXdhcmUiIH0sCisJe30sCit9OworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0X3BhcnNlciBtdGRzcGxpdF9ldmFfcGFyc2VyID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gImV2YS1mdyIsCisJLm9mX21hdGNoX3RhYmxlID0gbXRkc3BsaXRfZXZhX29mX21hdGNoX3RhYmxlLAorCS5wYXJzZV9mbiA9IG10ZHNwbGl0X3BhcnNlX2V2YSwKKwkudHlwZSA9IE1URF9QQVJTRVJfVFlQRV9GSVJNV0FSRSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG10ZHNwbGl0X2V2YV9pbml0KHZvaWQpCit7CisJcmVnaXN0ZXJfbXRkX3BhcnNlcigmbXRkc3BsaXRfZXZhX3BhcnNlcik7CisKKwlyZXR1cm4gMDsKK30KKworc3Vic3lzX2luaXRjYWxsKG10ZHNwbGl0X2V2YV9pbml0KTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbXRkL210ZHNwbGl0L210ZHNwbGl0X2ZpdC5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9tdGQvbXRkc3BsaXQvbXRkc3BsaXRfZml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdlZTMzZAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbXRkL210ZHNwbGl0L210ZHNwbGl0X2ZpdC5jCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBMaW51eCBGb3VuZGF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgR2Fib3IgSnVob3MgPGp1aG9zZ0BvcGVud3J0Lm9yZz4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9mZHQuaD4KKworI2luY2x1ZGUgIm10ZHNwbGl0LmgiCisKK3N0cnVjdCBmZHRfaGVhZGVyIHsKKwl1aW50MzJfdCBtYWdpYzsJCQkgLyogbWFnaWMgd29yZCBGRFRfTUFHSUMgKi8KKwl1aW50MzJfdCB0b3RhbHNpemU7CQkgLyogdG90YWwgc2l6ZSBvZiBEVCBibG9jayAqLworCXVpbnQzMl90IG9mZl9kdF9zdHJ1Y3Q7CQkgLyogb2Zmc2V0IHRvIHN0cnVjdHVyZSAqLworCXVpbnQzMl90IG9mZl9kdF9zdHJpbmdzOwkgLyogb2Zmc2V0IHRvIHN0cmluZ3MgKi8KKwl1aW50MzJfdCBvZmZfbWVtX3Jzdm1hcDsJIC8qIG9mZnNldCB0byBtZW1vcnkgcmVzZXJ2ZSBtYXAgKi8KKwl1aW50MzJfdCB2ZXJzaW9uOwkJIC8qIGZvcm1hdCB2ZXJzaW9uICovCisJdWludDMyX3QgbGFzdF9jb21wX3ZlcnNpb247CSAvKiBsYXN0IGNvbXBhdGlibGUgdmVyc2lvbiAqLworCisJLyogdmVyc2lvbiAyIGZpZWxkcyBiZWxvdyAqLworCXVpbnQzMl90IGJvb3RfY3B1aWRfcGh5czsJIC8qIFdoaWNoIHBoeXNpY2FsIENQVSBpZCB3ZSdyZQorCQkJCQkgICAgYm9vdGluZyBvbiAqLworCS8qIHZlcnNpb24gMyBmaWVsZHMgYmVsb3cgKi8KKwl1aW50MzJfdCBzaXplX2R0X3N0cmluZ3M7CSAvKiBzaXplIG9mIHRoZSBzdHJpbmdzIGJsb2NrICovCisKKwkvKiB2ZXJzaW9uIDE3IGZpZWxkcyBiZWxvdyAqLworCXVpbnQzMl90IHNpemVfZHRfc3RydWN0OwkgLyogc2l6ZSBvZiB0aGUgc3RydWN0dXJlIGJsb2NrICovCit9OworCitzdGF0aWMgaW50CittdGRzcGxpdF9maXRfcGFyc2Uoc3RydWN0IG10ZF9pbmZvICptdGQsCisJCSAgIGNvbnN0IHN0cnVjdCBtdGRfcGFydGl0aW9uICoqcHBhcnRzLAorCSAgICAgICAgICAgc3RydWN0IG10ZF9wYXJ0X3BhcnNlcl9kYXRhICpkYXRhKQoreworCXN0cnVjdCBmZHRfaGVhZGVyIGhkcjsKKwlzaXplX3QgaGRyX2xlbiwgcmV0bGVuOworCXNpemVfdCBvZmZzZXQ7CisJc2l6ZV90IGZpdF9vZmZzZXQsIGZpdF9zaXplOworCXNpemVfdCByb290ZnNfb2Zmc2V0LCByb290ZnNfc2l6ZTsKKwlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHM7CisJaW50IHJldDsKKworCWhkcl9sZW4gPSBzaXplb2Yoc3RydWN0IGZkdF9oZWFkZXIpOworCisJLyogUGFyc2UgdGhlIE1URCBkZXZpY2UgJiBzZWFyY2ggZm9yIHRoZSBGSVQgaW1hZ2UgbG9jYXRpb24gKi8KKwlmb3Iob2Zmc2V0ID0gMDsgb2Zmc2V0ICsgaGRyX2xlbiA8PSBtdGQtPnNpemU7IG9mZnNldCArPSBtdGQtPmVyYXNlc2l6ZSkgeworCQlyZXQgPSBtdGRfcmVhZChtdGQsIG9mZnNldCwgaGRyX2xlbiwgJnJldGxlbiwgKHZvaWQqKSAmaGRyKTsKKwkJaWYgKHJldCkgeworCQkJcHJfZXJyKCJyZWFkIGVycm9yIGluIFwiJXNcIiBhdCBvZmZzZXQgMHglbGx4XG4iLAorCQkJICAgICAgIG10ZC0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZykgb2Zmc2V0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlpZiAocmV0bGVuICE9IGhkcl9sZW4pIHsKKwkJCXByX2Vycigic2hvcnQgcmVhZCBpbiBcIiVzXCJcbiIsIG10ZC0+bmFtZSk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCisJCS8qIENoZWNrIHRoZSBtYWdpYyAtIHNlZSBpZiB0aGlzIGlzIGEgRklUIGltYWdlICovCisJCWlmIChiZTMyX3RvX2NwdShoZHIubWFnaWMpICE9IE9GX0RUX0hFQURFUikgeworCQkJcHJfZGVidWcoIm5vIHZhbGlkIEZJVCBpbWFnZSBmb3VuZCBpbiBcIiVzXCIgYXQgb2Zmc2V0ICVsbHhcbiIsCisJCQkJIG10ZC0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZykgb2Zmc2V0KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogV2UgZm91bmQgYSBGSVQgaW1hZ2UuIExldCdzIGtlZXAgZ29pbmcgKi8KKwkJYnJlYWs7CisJfQorCisJZml0X29mZnNldCA9IG9mZnNldDsKKwlmaXRfc2l6ZSA9IGJlMzJfdG9fY3B1KGhkci50b3RhbHNpemUpOworCisJaWYgKGZpdF9zaXplID09IDApIHsKKwkJcHJfZXJyKCJGSVQgaW1hZ2UgaW4gXCIlc1wiIGF0IG9mZnNldCAlbGx4IGhhcyBudWxsIHNpemVcbiIsCisJCSAgICAgICBtdGQtPm5hbWUsICh1bnNpZ25lZCBsb25nIGxvbmcpIGZpdF9vZmZzZXQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBTZWFyY2ggZm9yIHRoZSByb290ZnMgcGFydGl0aW9uIGFmdGVyIHRoZSBGSVQgaW1hZ2UgKi8KKwlyZXQgPSBtdGRfZmluZF9yb290ZnNfZnJvbShtdGQsIGZpdF9vZmZzZXQgKyBmaXRfc2l6ZSwgbXRkLT5zaXplLAorCQkJCSAgICZyb290ZnNfb2Zmc2V0LCBOVUxMKTsKKwlpZiAocmV0KSB7CisJCXByX2luZm8oIm5vIHJvb3RmcyBmb3VuZCBhZnRlciBGSVQgaW1hZ2UgaW4gXCIlc1wiXG4iLAorCQkJbXRkLT5uYW1lKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyb290ZnNfc2l6ZSA9IG10ZC0+c2l6ZSAtIHJvb3Rmc19vZmZzZXQ7CisKKwlwYXJ0cyA9IGt6YWxsb2MoMiAqIHNpemVvZigqcGFydHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBhcnRzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBhcnRzWzBdLm5hbWUgPSBLRVJORUxfUEFSVF9OQU1FOworCXBhcnRzWzBdLm9mZnNldCA9IGZpdF9vZmZzZXQ7CisJcGFydHNbMF0uc2l6ZSA9IG10ZF9yb3VuZGRvd25fdG9fZWIoZml0X3NpemUsIG10ZCkgKyBtdGQtPmVyYXNlc2l6ZTsKKworCXBhcnRzWzFdLm5hbWUgPSBST09URlNfUEFSVF9OQU1FOworCXBhcnRzWzFdLm9mZnNldCA9IHJvb3Rmc19vZmZzZXQ7CisJcGFydHNbMV0uc2l6ZSA9IHJvb3Rmc19zaXplOworCisJKnBwYXJ0cyA9IHBhcnRzOworCXJldHVybiAyOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGRzcGxpdF9maXRfb2ZfbWF0Y2hfdGFibGVbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImRlbngsZml0IiB9LAorCXt9LAorfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydF9wYXJzZXIgdWltYWdlX3BhcnNlciA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubmFtZSA9ICJmaXQtZnciLAorCS5vZl9tYXRjaF90YWJsZSA9IG10ZHNwbGl0X2ZpdF9vZl9tYXRjaF90YWJsZSwKKwkucGFyc2VfZm4gPSBtdGRzcGxpdF9maXRfcGFyc2UsCisJLnR5cGUgPSBNVERfUEFSU0VSX1RZUEVfRklSTVdBUkUsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEluaXQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBfX2luaXQgbXRkc3BsaXRfZml0X2luaXQodm9pZCkKK3sKKwlyZWdpc3Rlcl9tdGRfcGFyc2VyKCZ1aW1hZ2VfcGFyc2VyKTsKKworCXJldHVybiAwOworfQorCittb2R1bGVfaW5pdChtdGRzcGxpdF9maXRfaW5pdCk7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL210ZC9tdGRzcGxpdC9tdGRzcGxpdF9qaW1hZ2UuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbXRkL210ZHNwbGl0L210ZHNwbGl0X2ppbWFnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NzBkZDQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL210ZC9tdGRzcGxpdC9tdGRzcGxpdF9qaW1hZ2UuYwpAQCAtMCwwICsxLDI4NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTggUGF3ZcWCIERlbWJpY2tpIDxwYXdlbGRlbWJpY2tpQGdtYWlsLmNvbT4gCisgKgorICogIEJhc2VkIG9uOiBtdGRzcGxpdF91aW1hZ2UuYworICogIENvcHlyaWdodCAoQykgMjAxMyBHYWJvciBKdWhvcyA8anVob3NnQG9wZW53cnQub3JnPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkJS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9nZW5lcmljLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKworI2luY2x1ZGUgIm10ZHNwbGl0LmgiCisKKyNkZWZpbmUgTUFYX0hFQURFUl9MRU4gKCBTVEFHX1NJWkUgKyBTQ0gyX1NJWkUgKQorCisjZGVmaW5lIFNUQUdfU0laRSAxNgorI2RlZmluZSBTVEFHX0lEIDB4MDQKKyNkZWZpbmUgU1RBR19NQUdJQyAweDJCMjQKKworI2RlZmluZSBTQ0gyX1NJWkUgNDAKKyNkZWZpbmUgU0NIMl9NQUdJQyAweDIxMjQKKyNkZWZpbmUgU0NIMl9WRVIgMHgwMgorCisvKgorICogSmJvb3QgaW1hZ2UgaGVhZGVyLAorICogYWxsIGRhdGEgaW4gbGl0dGxlIGVuZGlhbi4KKyAqLworCitzdHJ1Y3QgamltYWdlX2hlYWRlcgkJLy9zdGFnICsgc2NoMiBqYm9vdCBqb2luZWQgaGVhZGVycworeworCXVpbnQ4X3Qgc3RhZ19jbWFyazsJCS8vIGluIGZhY3RvcnkgMHhGRiAsIGluIHN5c3VwZ3JhZGUgbXVzdCBiZSB0aGUgc2FtZSBhcyBzdGFnX2lkCisJdWludDhfdCBzdGFnX2lkOwkJLy8gMHgwNAorCXVpbnQxNl90IHN0YWdfbWFnaWM7CQkvL21hZ2ljIDB4MkIyNAorCXVpbnQzMl90IHN0YWdfdGltZV9zdGFtcDsJLy8gdGltZXN0YW1wIGNhbGN1bGF0ZWQgaW4gamJvb3Qgd2F5CisJdWludDMyX3Qgc3RhZ19pbWFnZV9sZW5ndGg7CS8vIGxlbnRnaCBvZiBrZXJuZWwgKyBzY2gyIGhlYWRlcgorCXVpbnQxNl90IHN0YWdfaW1hZ2VfY2hlY2tzdW07CS8vIG5lZ2F0ZWQgamJvb3RfY2hlY2tzdW0gb2Ygc2NoMiArIGtlcm5lbAorCXVpbnQxNl90IHN0YWdfdGFnX2NoZWNrc3VtOwkvLyBuZWdhdGVkIGpib290X2NoZWNrc3VtIG9mIHN0YWcgaGVhZGVyIGRhdGEKKwl1aW50MTZfdCBzY2gyX21hZ2ljOwkJLy8gbWFnaWMgMHgyMTI0CisJdWludDhfdCBzY2gyX2NwX3R5cGU7CS8vIDB4MDAgZm9yIGZsYXQsIDB4MDEgZm9yIGp6LCAweDAyIGZvciBnemlwLCAweDAzIGZvciBsem1hCisJdWludDhfdCBzY2gyX3ZlcnNpb247CS8vIDB4MDIgZm9yIHNjaDIKKwl1aW50MzJfdCBzY2gyX3JhbV9hZGRyOwkvLyByYW0gZW50cnkgYWRkcmVzcworCXVpbnQzMl90IHNjaDJfaW1hZ2VfbGVuOwkvLyBrZXJuZWwgaW1hZ2UgbGVuZ3RoCisJdWludDMyX3Qgc2NoMl9pbWFnZV9jcmMzMjsJLy8ga2VybmVsIGltYWdlIGNyYworCXVpbnQzMl90IHNjaDJfc3RhcnRfYWRkcjsJLy8gcmFtIHN0YXJ0IGFkZHJlc3MKKwl1aW50MzJfdCBzY2gyX3Jvb3Rmc19hZGRyOwkvLyByb290ZnMgZmxhc2ggYWRkcmVzcworCXVpbnQzMl90IHNjaDJfcm9vdGZzX2xlbjsJLy8gcm9vdGZscyBsZW5ndGgKKwl1aW50MzJfdCBzY2gyX3Jvb3Rmc19jcmMzMjsJLy8gcm9vdGZzIGNyYzMyCisJdWludDMyX3Qgc2NoMl9oZWFkZXJfY3JjMzI7CS8vIHNjaDIgaGVhZGVyIGNyYzMyLCBkdXJyaW5nIGNhbGN1bGF0aW9uIHRoaXMgYXJlYSBpcyByZXBsYWNlZCBieSB6ZXJvCisJdWludDE2X3Qgc2NoMl9oZWFkZXJfbGVuZ3RoOwkvLyBzY2gyIGhlYWRlciBsZW5ndGg6IDB4MjgKKwl1aW50MTZfdCBzY2gyX2NtZF9saW5lX2xlbmd0aDsJLy8gY21kIGxpbmUgbGVuZ3RoLCBrbm93biB6ZXJvcworfTsKKworc3RhdGljIGludAorcmVhZF9qaW1hZ2VfaGVhZGVyKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzaXplX3Qgb2Zmc2V0LCB1X2NoYXIgKmJ1ZiwKKwkJICAgc2l6ZV90IGhlYWRlcl9sZW4pCit7CisJc2l6ZV90IHJldGxlbjsKKwlpbnQgcmV0OworCisJcmV0ID0gbXRkX3JlYWQobXRkLCBvZmZzZXQsIGhlYWRlcl9sZW4sICZyZXRsZW4sIGJ1Zik7CisJaWYgKHJldCkgeworCQlwcl9kZWJ1ZygicmVhZCBlcnJvciBpbiBcIiVzXCJcbiIsIG10ZC0+bmFtZSk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKHJldGxlbiAhPSBoZWFkZXJfbGVuKSB7CisJCXByX2RlYnVnKCJzaG9ydCByZWFkIGluIFwiJXNcIlxuIiwgbXRkLT5uYW1lKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogX19tdGRzcGxpdF9wYXJzZV9qaW1hZ2UgLSBzY2FuIHBhcnRpdGlvbiBhbmQgY3JlYXRlIGtlcm5lbCArIHJvb3RmcyBwYXJ0cworICoKKyAqIEBmaW5kX2hlYWRlcjogZnVuY3Rpb24gdG8gY2FsbCBmb3IgYSBibG9jayBvZiBkYXRhIHRoYXQgd2lsbCByZXR1cm4gb2Zmc2V0CisgKiAgICAgIG9mIGEgdmFsaWQgakltYWdlIGhlYWRlciBpZiBmb3VuZAorICovCitzdGF0aWMgaW50IF9fbXRkc3BsaXRfcGFyc2VfamltYWdlKHN0cnVjdCBtdGRfaW5mbyAqbWFzdGVyLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBtdGRfcGFydGl0aW9uICoqcHBhcnRzLAorCQkJCSAgIHN0cnVjdCBtdGRfcGFydF9wYXJzZXJfZGF0YSAqZGF0YSwKKwkJCQkgICBzc2l6ZV90ICgqZmluZF9oZWFkZXIpKHVfY2hhciAqYnVmLCBzaXplX3QgbGVuKSkKK3sKKwlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHM7CisJdV9jaGFyICpidWY7CisJaW50IG5yX3BhcnRzOworCXNpemVfdCBvZmZzZXQ7CisJc2l6ZV90IGppbWFnZV9vZmZzZXQ7CisJc2l6ZV90IGppbWFnZV9zaXplID0gMDsKKwlzaXplX3Qgcm9vdGZzX29mZnNldDsKKwlzaXplX3Qgcm9vdGZzX3NpemUgPSAwOworCWludCBqaW1hZ2VfcGFydCwgcmZfcGFydDsKKwlpbnQgcmV0OworCWVudW0gbXRkc3BsaXRfcGFydF90eXBlIHR5cGU7CisKKwlucl9wYXJ0cyA9IDI7CisJcGFydHMgPSBremFsbG9jKG5yX3BhcnRzICogc2l6ZW9mKCpwYXJ0cyksIEdGUF9LRVJORUwpOworCWlmICghcGFydHMpCisJCXJldHVybiAtRU5PTUVNOworCisJYnVmID0gdm1hbGxvYyhNQVhfSEVBREVSX0xFTik7CisJaWYgKCFidWYpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZV9wYXJ0czsKKwl9CisKKwkvKiBmaW5kIGpJbWFnZSBvbiBlcmFzZSBibG9jayBib3VuZGFyaWVzICovCisJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBtYXN0ZXItPnNpemU7IG9mZnNldCArPSBtYXN0ZXItPmVyYXNlc2l6ZSkgeworCQlzdHJ1Y3QgamltYWdlX2hlYWRlciAqaGVhZGVyOworCisJCWppbWFnZV9zaXplID0gMDsKKworCQlyZXQgPSByZWFkX2ppbWFnZV9oZWFkZXIobWFzdGVyLCBvZmZzZXQsIGJ1ZiwgTUFYX0hFQURFUl9MRU4pOworCQlpZiAocmV0KQorCQkJY29udGludWU7CisKKwkJcmV0ID0gZmluZF9oZWFkZXIoYnVmLCBNQVhfSEVBREVSX0xFTik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcl9kZWJ1Zygibm8gdmFsaWQgakltYWdlIGZvdW5kIGluIFwiJXNcIiBhdCBvZmZzZXQgJWxseFxuIiwKKwkJCQkgbWFzdGVyLT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKSBvZmZzZXQpOworCQkJY29udGludWU7CisJCX0KKwkJaGVhZGVyID0gKHN0cnVjdCBqaW1hZ2VfaGVhZGVyICopKGJ1ZiArIHJldCk7CisKKwkJamltYWdlX3NpemUgPSBzaXplb2YoKmhlYWRlcikgKyBoZWFkZXItPnNjaDJfaW1hZ2VfbGVuICsgcmV0OworCQlpZiAoKG9mZnNldCArIGppbWFnZV9zaXplKSA+IG1hc3Rlci0+c2l6ZSkgeworCQkJcHJfZGVidWcoImpJbWFnZSBleGNlZWRzIE1URCBkZXZpY2UgXCIlc1wiXG4iLAorCQkJCSBtYXN0ZXItPm5hbWUpOworCQkJY29udGludWU7CisJCX0KKwkJYnJlYWs7CisJfQorCisJaWYgKGppbWFnZV9zaXplID09IDApIHsKKwkJcHJfZGVidWcoIm5vIGpJbWFnZSBmb3VuZCBpbiBcIiVzXCJcbiIsIG1hc3Rlci0+bmFtZSk7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX2ZyZWVfYnVmOworCX0KKworCWppbWFnZV9vZmZzZXQgPSBvZmZzZXQ7CisKKwlpZiAoamltYWdlX29mZnNldCA9PSAwKSB7CisJCWppbWFnZV9wYXJ0ID0gMDsKKwkJcmZfcGFydCA9IDE7CisKKwkJLyogZmluZCB0aGUgcm9vdHMgYWZ0ZXIgdGhlIGpJbWFnZSAqLworCQlyZXQgPSBtdGRfZmluZF9yb290ZnNfZnJvbShtYXN0ZXIsIGppbWFnZV9vZmZzZXQgKyBqaW1hZ2Vfc2l6ZSwKKwkJCQkJICAgbWFzdGVyLT5zaXplLCAmcm9vdGZzX29mZnNldCwgJnR5cGUpOworCQlpZiAocmV0KSB7CisJCQlwcl9kZWJ1Zygibm8gcm9vdGZzIGFmdGVyIGpJbWFnZSBpbiBcIiVzXCJcbiIsCisJCQkJIG1hc3Rlci0+bmFtZSk7CisJCQlnb3RvIGVycl9mcmVlX2J1ZjsKKwkJfQorCisJCXJvb3Rmc19zaXplID0gbWFzdGVyLT5zaXplIC0gcm9vdGZzX29mZnNldDsKKwkJamltYWdlX3NpemUgPSByb290ZnNfb2Zmc2V0IC0gamltYWdlX29mZnNldDsKKwl9IGVsc2UgeworCQlyZl9wYXJ0ID0gMDsKKwkJamltYWdlX3BhcnQgPSAxOworCisJCS8qIGNoZWNrIHJvb3RmcyBwcmVzZW5jZSBhdCBvZmZzZXQgMCAqLworCQlyZXQgPSBtdGRfY2hlY2tfcm9vdGZzX21hZ2ljKG1hc3RlciwgMCwgJnR5cGUpOworCQlpZiAocmV0KSB7CisJCQlwcl9kZWJ1Zygibm8gcm9vdGZzIGJlZm9yZSBqSW1hZ2UgaW4gXCIlc1wiXG4iLAorCQkJCSBtYXN0ZXItPm5hbWUpOworCQkJZ290byBlcnJfZnJlZV9idWY7CisJCX0KKworCQlyb290ZnNfb2Zmc2V0ID0gMDsKKwkJcm9vdGZzX3NpemUgPSBqaW1hZ2Vfb2Zmc2V0OworCX0KKworCWlmIChyb290ZnNfc2l6ZSA9PSAwKSB7CisJCXByX2RlYnVnKCJubyByb290ZnMgZm91bmQgaW4gXCIlc1wiXG4iLCBtYXN0ZXItPm5hbWUpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9mcmVlX2J1ZjsKKwl9CisKKwlwYXJ0c1tqaW1hZ2VfcGFydF0ubmFtZSA9IEtFUk5FTF9QQVJUX05BTUU7CisJcGFydHNbamltYWdlX3BhcnRdLm9mZnNldCA9IGppbWFnZV9vZmZzZXQ7CisJcGFydHNbamltYWdlX3BhcnRdLnNpemUgPSBqaW1hZ2Vfc2l6ZTsKKworCWlmICh0eXBlID09IE1URFNQTElUX1BBUlRfVFlQRV9VQkkpCisJCXBhcnRzW3JmX3BhcnRdLm5hbWUgPSBVQklfUEFSVF9OQU1FOworCWVsc2UKKwkJcGFydHNbcmZfcGFydF0ubmFtZSA9IFJPT1RGU19QQVJUX05BTUU7CisJcGFydHNbcmZfcGFydF0ub2Zmc2V0ID0gcm9vdGZzX29mZnNldDsKKwlwYXJ0c1tyZl9wYXJ0XS5zaXplID0gcm9vdGZzX3NpemU7CisKKwl2ZnJlZShidWYpOworCisJKnBwYXJ0cyA9IHBhcnRzOworCXJldHVybiBucl9wYXJ0czsKKworZXJyX2ZyZWVfYnVmOgorCXZmcmVlKGJ1Zik7CisKK2Vycl9mcmVlX3BhcnRzOgorCWtmcmVlKHBhcnRzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBqaW1hZ2VfdmVyaWZ5X2RlZmF1bHQodV9jaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGppbWFnZV9oZWFkZXIgKmhlYWRlciA9IChzdHJ1Y3QgamltYWdlX2hlYWRlciAqKWJ1ZjsKKworCS8qIGRlZmF1bHQgc2FuaXR5IGNoZWNrcyAqLworCWlmIChoZWFkZXItPnN0YWdfbWFnaWMgIT0gU1RBR19NQUdJQykgeworCQlwcl9kZWJ1ZygiaW52YWxpZCBqSW1hZ2Ugc3RhZyBoZWFkZXIgbWFnaWM6ICUwNHhcbiIsCisJCQkgaGVhZGVyLT5zdGFnX21hZ2ljKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChoZWFkZXItPnNjaDJfbWFnaWMgIT0gU0NIMl9NQUdJQykgeworCQlwcl9kZWJ1ZygiaW52YWxpZCBqSW1hZ2Ugc2NoMiBoZWFkZXIgbWFnaWM6ICUwNHhcbiIsCisJCQkgaGVhZGVyLT5zdGFnX21hZ2ljKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChoZWFkZXItPnN0YWdfY21hcmsgIT0gaGVhZGVyLT5zdGFnX2lkKSB7CisJCXByX2RlYnVnKCJpbnZhbGlkIGpJbWFnZSBzdGFnIGhlYWRlciBjbWFyazogJTAyeFxuIiwKKwkJCSBoZWFkZXItPnN0YWdfbWFnaWMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKGhlYWRlci0+c3RhZ19pZCAhPSBTVEFHX0lEKSB7CisJCXByX2RlYnVnKCJpbnZhbGlkIGpJbWFnZSBzdGFnIGhlYWRlciBpZDogJTAyeFxuIiwKKwkJCSBoZWFkZXItPnN0YWdfbWFnaWMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKGhlYWRlci0+c2NoMl92ZXJzaW9uICE9IFNDSDJfVkVSKSB7CisJCXByX2RlYnVnKCJpbnZhbGlkIGpJbWFnZSBzY2gyIGhlYWRlciB2ZXJzaW9uOiAlMDJ4XG4iLAorCQkJIGhlYWRlci0+c3RhZ19tYWdpYyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CittdGRzcGxpdF9qaW1hZ2VfcGFyc2VfZ2VuZXJpYyhzdHJ1Y3QgbXRkX2luZm8gKm1hc3RlciwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBtdGRfcGFydGl0aW9uICoqcHBhcnRzLAorCQkJICAgICAgc3RydWN0IG10ZF9wYXJ0X3BhcnNlcl9kYXRhICpkYXRhKQoreworCXJldHVybiBfX210ZHNwbGl0X3BhcnNlX2ppbWFnZShtYXN0ZXIsIHBwYXJ0cywgZGF0YSwKKwkJCQkgICAgICBqaW1hZ2VfdmVyaWZ5X2RlZmF1bHQpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGRzcGxpdF9qaW1hZ2Vfb2ZfbWF0Y2hfdGFibGVbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImFtaXQsamltYWdlIiB9LAorCXt9LAorfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydF9wYXJzZXIgamltYWdlX2dlbmVyaWNfcGFyc2VyID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gImppbWFnZS1mdyIsCisJLm9mX21hdGNoX3RhYmxlID0gbXRkc3BsaXRfamltYWdlX29mX21hdGNoX3RhYmxlLAorCS5wYXJzZV9mbiA9IG10ZHNwbGl0X2ppbWFnZV9wYXJzZV9nZW5lcmljLAorCS50eXBlID0gTVREX1BBUlNFUl9UWVBFX0ZJUk1XQVJFLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJbml0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgX19pbml0IG10ZHNwbGl0X2ppbWFnZV9pbml0KHZvaWQpCit7CisJcmVnaXN0ZXJfbXRkX3BhcnNlcigmamltYWdlX2dlbmVyaWNfcGFyc2VyKTsKKworCXJldHVybiAwOworfQorCittb2R1bGVfaW5pdChtdGRzcGxpdF9qaW1hZ2VfaW5pdCk7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL210ZC9tdGRzcGxpdC9tdGRzcGxpdF9sem1hLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL210ZC9tdGRzcGxpdC9tdGRzcGxpdF9sem1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU4ZjdhZQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbXRkL210ZHNwbGl0L210ZHNwbGl0X2x6bWEuYwpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTQgR2Fib3IgSnVob3MgPGp1aG9zZ0BvcGVud3J0Lm9yZz4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorCisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCisjaW5jbHVkZSAibXRkc3BsaXQuaCIKKworI2RlZmluZSBMWk1BX05SX1BBUlRTCQkyCisjZGVmaW5lIExaTUFfUFJPUEVSVElFU19TSVpFCTUKKworc3RydWN0IGx6bWFfaGVhZGVyIHsKKwl1OCBwcm9wc1tMWk1BX1BST1BFUlRJRVNfU0laRV07CisJdTggc2l6ZV9sb3dbNF07CisJdTggc2l6ZV9oaWdoWzRdOworfTsKKworc3RhdGljIGludCBtdGRzcGxpdF9wYXJzZV9sem1hKHN0cnVjdCBtdGRfaW5mbyAqbWFzdGVyLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBtdGRfcGFydGl0aW9uICoqcHBhcnRzLAorCQkJICAgICAgIHN0cnVjdCBtdGRfcGFydF9wYXJzZXJfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgbHptYV9oZWFkZXIgaGRyOworCXNpemVfdCBoZHJfbGVuLCByZXRsZW47CisJc2l6ZV90IHJvb3Rmc19vZmZzZXQ7CisJdTMyIHQ7CisJc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzOworCWludCBlcnI7CisKKwloZHJfbGVuID0gc2l6ZW9mKGhkcik7CisJZXJyID0gbXRkX3JlYWQobWFzdGVyLCAwLCBoZHJfbGVuLCAmcmV0bGVuLCAodm9pZCAqKSAmaGRyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKHJldGxlbiAhPSBoZHJfbGVuKQorCQlyZXR1cm4gLUVJTzsKKworCS8qIHZlcmlmeSBMWk1BIHByb3BlcnRpZXMgKi8KKwlpZiAoaGRyLnByb3BzWzBdID49ICg5ICogNSAqIDUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXQgPSBnZXRfdW5hbGlnbmVkX2xlMzIoJmhkci5wcm9wc1sxXSk7CisJaWYgKCFpc19wb3dlcl9vZl8yKHQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXQgPSBnZXRfdW5hbGlnbmVkX2xlMzIoJmhkci5zaXplX2hpZ2gpOworCWlmICh0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVyciA9IG10ZF9maW5kX3Jvb3Rmc19mcm9tKG1hc3RlciwgbWFzdGVyLT5lcmFzZXNpemUsIG1hc3Rlci0+c2l6ZSwKKwkJCQkgICAmcm9vdGZzX29mZnNldCwgTlVMTCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXBhcnRzID0ga3phbGxvYyhMWk1BX05SX1BBUlRTICogc2l6ZW9mKCpwYXJ0cyksIEdGUF9LRVJORUwpOworCWlmICghcGFydHMpCisJCXJldHVybiAtRU5PTUVNOworCisJcGFydHNbMF0ubmFtZSA9IEtFUk5FTF9QQVJUX05BTUU7CisJcGFydHNbMF0ub2Zmc2V0ID0gMDsKKwlwYXJ0c1swXS5zaXplID0gcm9vdGZzX29mZnNldDsKKworCXBhcnRzWzFdLm5hbWUgPSBST09URlNfUEFSVF9OQU1FOworCXBhcnRzWzFdLm9mZnNldCA9IHJvb3Rmc19vZmZzZXQ7CisJcGFydHNbMV0uc2l6ZSA9IG1hc3Rlci0+c2l6ZSAtIHJvb3Rmc19vZmZzZXQ7CisKKwkqcHBhcnRzID0gcGFydHM7CisJcmV0dXJuIExaTUFfTlJfUEFSVFM7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10ZHNwbGl0X2x6bWFfb2ZfbWF0Y2hfdGFibGVbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImx6bWEiIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXRkc3BsaXRfbHptYV9vZl9tYXRjaF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRfcGFyc2VyIG10ZHNwbGl0X2x6bWFfcGFyc2VyID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gImx6bWEtZnciLAorCS5vZl9tYXRjaF90YWJsZSA9IG10ZHNwbGl0X2x6bWFfb2ZfbWF0Y2hfdGFibGUsCisJLnBhcnNlX2ZuID0gbXRkc3BsaXRfcGFyc2VfbHptYSwKKwkudHlwZSA9IE1URF9QQVJTRVJfVFlQRV9GSVJNV0FSRSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG10ZHNwbGl0X2x6bWFfaW5pdCh2b2lkKQoreworCXJlZ2lzdGVyX210ZF9wYXJzZXIoJm10ZHNwbGl0X2x6bWFfcGFyc2VyKTsKKworCXJldHVybiAwOworfQorCitzdWJzeXNfaW5pdGNhbGwobXRkc3BsaXRfbHptYV9pbml0KTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbXRkL210ZHNwbGl0L210ZHNwbGl0X21pbm9yLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL210ZC9tdGRzcGxpdC9tdGRzcGxpdF9taW5vci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNjgyMmUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL210ZC9tdGRzcGxpdC9tdGRzcGxpdF9taW5vci5jCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogIE1URCBzcGxpdHRlciBmb3IgTWlrcm9UaWsgTk9SIGRldmljZXMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3IFRoaWJhdXQgVkFSRU5FIDx2YXJlbmV0QHBhcmlzYy1saW51eC5vcmc+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVGhlIHJvb3RmcyBpcyBleHBlY3RlZCBhdCBlcmFzZS1ibG9jayBib3VuZGFyeSBkdWUgdG8gdGhlIHVzZSBvZgorICogIG10ZF9maW5kX3Jvb3Rmc19mcm9tKCkuIFdlIHVzZSBhIHRyaW1tZWQgZG93biB2ZXJzaW9uIG9mIHRoZSB5YWZmcyBoZWFkZXIKKyAqICBmb3IgdHdvIG1haW4gcmVhc29uczoKKyAqICAtIHRoZSBvcmlnaW5hbCBoZWFkZXIgdXNlcyB3ZWFrbHkgZGVmaW5lZCB0eXBlcyAoaW50LCBlbnVtLi4uKSB3aGljaCBjYW4KKyAqICAgIHZhcnkgaW4gbGVuZ3RoIGRlcGVuZGluZyBvbiBidWlsZCBob3N0IChhbmQgdGhlIHN0cnVjdCBpcyBub3QgcGFja2VkKSwKKyAqICAgIGFuZCB0aGUgbmFtZSBmaWVsZCBjYW4gaGF2ZSBhIGRpZmZlcmVudCB0b3RhbCBsZW5ndGggZGVwZW5kaW5nIG9uCisgKiAgICB3aGV0aGVyIG9yIG5vdCB0aGUgeWFmZnMgY29kZSB3YXMgX2J1aWx0XyB3aXRoIHVuaWNvZGUgc3VwcG9ydC4KKyAqICAtIHRoZSBvbmx5IGZpZWxkIHRoYXQgY291bGQgYmUgb2YgcmVhbCB1c2UgaGVyZSAoZmlsZV9zaXplX2xvdykgY29udGFpbnMKKyAqICAgIGludmFsaWQgZGF0YSBpbiB0aGUgaGVhZGVyIGdlbmVyYXRlZCBieSBrZXJuZWwybWlub3IsIHNvIHdlIGNhbm5vdCB1c2UKKyAqICAgIGl0IHRvIGluZmVyIHRoZSBleGFjdCBwb3NpdGlvbiBvZiB0aGUgcm9vdGZzIGFuZCBkbyBhd2F5IHdpdGgKKyAqICAgIG10ZF9maW5kX3Jvb3Rmc19mcm9tKCkgKGFuZCB0aHVzIGhhdmUgbm9uLUVCLWFsaWduZWQgcm9vdGZzKS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorCisjaW5jbHVkZSAibXRkc3BsaXQuaCIKKworI2RlZmluZSBZQUZGU19PQkpFQ1RfVFlQRV9GSUxFCTB4MQorI2RlZmluZSBZQUZGU19PQkpFQ1RJRF9ST09UCTB4MQorI2RlZmluZSBZQUZGU19TVU1fVU5VU0VECTB4RkZGRgorI2RlZmluZSBZQUZGU19OQU1FCQkia2VybmVsIgorCisjZGVmaW5lIE1JTk9SX05SX1BBUlRTCQkyCisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBpcyBiYXNlZCBvbiB5YWZmc19vYmpfaGRyIGZyb20geWFmZnNfZ3V0cy5oCisgKiBUaGUgd2VhayB0eXBlcyBtYXRjaCB1cHN0cmVhbS4gVGhlIGZpZWxkcyBoYXZlIGNwdS1lbmRpYW5uZXNzCisgKi8KK3N0cnVjdCBtaW5vcl9oZWFkZXIgeworCWludCB5YWZmc190eXBlOworCWludCB5YWZmc19vYmpfaWQ7CisJdTE2IHlhZmZzX3N1bV91bnVzZWQ7CisJY2hhciB5YWZmc19uYW1lW3NpemVvZihZQUZGU19OQU1FKV07Cit9OworCitzdGF0aWMgaW50IG10ZHNwbGl0X3BhcnNlX21pbm9yKHN0cnVjdCBtdGRfaW5mbyAqbWFzdGVyLAorCQkJCWNvbnN0IHN0cnVjdCBtdGRfcGFydGl0aW9uICoqcHBhcnRzLAorCQkJCXN0cnVjdCBtdGRfcGFydF9wYXJzZXJfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgbWlub3JfaGVhZGVyIGhkcjsKKwlzaXplX3QgaGRyX2xlbiwgcmV0bGVuOworCXNpemVfdCByb290ZnNfb2Zmc2V0OworCXN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0czsKKwlpbnQgZXJyOworCisJaGRyX2xlbiA9IHNpemVvZihoZHIpOworCWVyciA9IG10ZF9yZWFkKG1hc3RlciwgMCwgaGRyX2xlbiwgJnJldGxlbiwgKHZvaWQgKikgJmhkcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmIChyZXRsZW4gIT0gaGRyX2xlbikKKwkJcmV0dXJuIC1FSU87CisKKwkvKiBtYXRjaCBoZWFkZXIgKi8KKwlpZiAoaGRyLnlhZmZzX3R5cGUgIT0gWUFGRlNfT0JKRUNUX1RZUEVfRklMRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoaGRyLnlhZmZzX29ial9pZCAhPSBZQUZGU19PQkpFQ1RJRF9ST09UKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChoZHIueWFmZnNfc3VtX3VudXNlZCAhPSBZQUZGU19TVU1fVU5VU0VEKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChtZW1jbXAoaGRyLnlhZmZzX25hbWUsIFlBRkZTX05BTUUsIHNpemVvZihZQUZGU19OQU1FKSkpCisJCXJldHVybiAtRUlOVkFMOworCisJZXJyID0gbXRkX2ZpbmRfcm9vdGZzX2Zyb20obWFzdGVyLCBtYXN0ZXItPmVyYXNlc2l6ZSwgbWFzdGVyLT5zaXplLAorCQkJCSAgICZyb290ZnNfb2Zmc2V0LCBOVUxMKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcGFydHMgPSBremFsbG9jKE1JTk9SX05SX1BBUlRTICogc2l6ZW9mKCpwYXJ0cyksIEdGUF9LRVJORUwpOworCWlmICghcGFydHMpCisJCXJldHVybiAtRU5PTUVNOworCisJcGFydHNbMF0ubmFtZSA9IEtFUk5FTF9QQVJUX05BTUU7CisJcGFydHNbMF0ub2Zmc2V0ID0gMDsKKwlwYXJ0c1swXS5zaXplID0gcm9vdGZzX29mZnNldDsKKworCXBhcnRzWzFdLm5hbWUgPSBST09URlNfUEFSVF9OQU1FOworCXBhcnRzWzFdLm9mZnNldCA9IHJvb3Rmc19vZmZzZXQ7CisJcGFydHNbMV0uc2l6ZSA9IG1hc3Rlci0+c2l6ZSAtIHJvb3Rmc19vZmZzZXQ7CisKKwkqcHBhcnRzID0gcGFydHM7CisJcmV0dXJuIE1JTk9SX05SX1BBUlRTOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGRzcGxpdF9taW5vcl9vZl9tYXRjaF90YWJsZVtdID0geworCXsgLmNvbXBhdGlibGUgPSAibWlrcm90aWssbWlub3IiIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXRkc3BsaXRfbWlub3Jfb2ZfbWF0Y2hfdGFibGUpOworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0X3BhcnNlciBtdGRzcGxpdF9taW5vcl9wYXJzZXIgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSAibWlub3ItZnciLAorCS5vZl9tYXRjaF90YWJsZSA9IG10ZHNwbGl0X21pbm9yX29mX21hdGNoX3RhYmxlLAorCS5wYXJzZV9mbiA9IG10ZHNwbGl0X3BhcnNlX21pbm9yLAorCS50eXBlID0gTVREX1BBUlNFUl9UWVBFX0ZJUk1XQVJFLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXRkc3BsaXRfbWlub3JfaW5pdCh2b2lkKQoreworCXJlZ2lzdGVyX210ZF9wYXJzZXIoJm10ZHNwbGl0X21pbm9yX3BhcnNlcik7CisKKwlyZXR1cm4gMDsKK30KKworc3Vic3lzX2luaXRjYWxsKG10ZHNwbGl0X21pbm9yX2luaXQpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9tdGQvbXRkc3BsaXQvbXRkc3BsaXRfc2VhbWEuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbXRkL210ZHNwbGl0L210ZHNwbGl0X3NlYW1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ0OTE3MQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbXRkL210ZHNwbGl0L210ZHNwbGl0X3NlYW1hLmMKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEzIEdhYm9yIEp1aG9zIDxqdWhvc2dAb3BlbndydC5vcmc+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorCisjaW5jbHVkZSAibXRkc3BsaXQuaCIKKworI2RlZmluZSBTRUFNQV9NQUdJQwkJMHg1RUEzQTQxNworI2RlZmluZSBTRUFNQV9OUl9QQVJUUwkJMgorI2RlZmluZSBTRUFNQV9NSU5fUk9PVEZTX09GRlMJMHg4MDAwMAkvKiA1MTJLaUIgKi8KKworc3RydWN0IHNlYW1hX2hlYWRlciB7CisJX19iZTMyCW1hZ2ljOwkJLyogc2hvdWxkIGFsd2F5cyBiZSBTRUFNQV9NQUdJQy4gKi8KKwlfX2JlMTYJcmVzZXJ2ZWQ7CS8qIHJlc2VydmVkIGZvciAgKi8KKwlfX2JlMTYJbWV0YXNpemU7CS8qIHNpemUgb2YgdGhlIE1FVEEgZGF0YSAqLworCV9fYmUzMglzaXplOwkJLyogc2l6ZSBvZiB0aGUgaW1hZ2UgKi8KKwl1OAltZDVbMTZdOwkvKiBkaWdlc3QgKi8KK307CisKK3N0YXRpYyBpbnQgbXRkc3BsaXRfcGFyc2Vfc2VhbWEoc3RydWN0IG10ZF9pbmZvICptYXN0ZXIsCisJCQkJY29uc3Qgc3RydWN0IG10ZF9wYXJ0aXRpb24gKipwcGFydHMsCisJCQkJc3RydWN0IG10ZF9wYXJ0X3BhcnNlcl9kYXRhICpkYXRhKQoreworCXN0cnVjdCBzZWFtYV9oZWFkZXIgaGRyOworCXNpemVfdCBoZHJfbGVuLCByZXRsZW4sIGtlcm5lbF9lbnRfc2l6ZTsKKwlzaXplX3Qgcm9vdGZzX29mZnNldDsKKwlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHM7CisJZW51bSBtdGRzcGxpdF9wYXJ0X3R5cGUgdHlwZTsKKwlpbnQgZXJyOworCisJaGRyX2xlbiA9IHNpemVvZihoZHIpOworCWVyciA9IG10ZF9yZWFkKG1hc3RlciwgMCwgaGRyX2xlbiwgJnJldGxlbiwgKHZvaWQgKikgJmhkcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmIChyZXRsZW4gIT0gaGRyX2xlbikKKwkJcmV0dXJuIC1FSU87CisKKwkvKiBzYW5pdHkgY2hlY2tzICovCisJaWYgKGJlMzJfdG9fY3B1KGhkci5tYWdpYykgIT0gU0VBTUFfTUFHSUMpCisJCXJldHVybiAtRUlOVkFMOworCisJa2VybmVsX2VudF9zaXplID0gaGRyX2xlbiArIGJlMzJfdG9fY3B1KGhkci5zaXplKSArCisJCQkgIGJlMTZfdG9fY3B1KGhkci5tZXRhc2l6ZSk7CisJaWYgKGtlcm5lbF9lbnRfc2l6ZSA+IG1hc3Rlci0+c2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBDaGVjayBmb3IgdGhlIHJvb3RmcyByaWdodCBhZnRlciBTZWFtYSBlbnRpdHkgd2l0aCBhIGtlcm5lbC4gKi8KKwllcnIgPSBtdGRfY2hlY2tfcm9vdGZzX21hZ2ljKG1hc3Rlciwga2VybmVsX2VudF9zaXplLCAmdHlwZSk7CisJaWYgKCFlcnIpIHsKKwkJcm9vdGZzX29mZnNldCA9IGtlcm5lbF9lbnRfc2l6ZTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBPbiBzb21lIGRldmljZXMgZmlybXdhcmUgZW50aXR5IG1pZ2h0IGNvbnRhaW4gYm90aDoga2VybmVsCisJCSAqIGFuZCByb290ZnMuIFdlIGNhbid0IGRldGVybWluZSBrZXJuZWwgc2l6ZSBzbyB3ZSBqdXN0IGhhdmUgdG8KKwkJICogbG9vayBmb3Igcm9vdGZzIG1hZ2ljLgorCQkgKiBTdGFydCB0aGUgc2VhcmNoIGZyb20gYW4gYXJiaXRyYXJ5IG9mZnNldC4KKwkJICovCisJCWVyciA9IG10ZF9maW5kX3Jvb3Rmc19mcm9tKG1hc3RlciwgU0VBTUFfTUlOX1JPT1RGU19PRkZTLAorCQkJCQkgICBtYXN0ZXItPnNpemUsICZyb290ZnNfb2Zmc2V0LCAmdHlwZSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXBhcnRzID0ga3phbGxvYyhTRUFNQV9OUl9QQVJUUyAqIHNpemVvZigqcGFydHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBhcnRzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBhcnRzWzBdLm5hbWUgPSBLRVJORUxfUEFSVF9OQU1FOworCXBhcnRzWzBdLm9mZnNldCA9IHNpemVvZiBoZHIgKyBiZTE2X3RvX2NwdShoZHIubWV0YXNpemUpOworCXBhcnRzWzBdLnNpemUgPSByb290ZnNfb2Zmc2V0IC0gcGFydHNbMF0ub2Zmc2V0OworCisJaWYgKHR5cGUgPT0gTVREU1BMSVRfUEFSVF9UWVBFX1VCSSkKKwkJcGFydHNbMV0ubmFtZSA9IFVCSV9QQVJUX05BTUU7CisJZWxzZQorCQlwYXJ0c1sxXS5uYW1lID0gUk9PVEZTX1BBUlRfTkFNRTsKKwlwYXJ0c1sxXS5vZmZzZXQgPSByb290ZnNfb2Zmc2V0OworCXBhcnRzWzFdLnNpemUgPSBtYXN0ZXItPnNpemUgLSByb290ZnNfb2Zmc2V0OworCisJKnBwYXJ0cyA9IHBhcnRzOworCXJldHVybiBTRUFNQV9OUl9QQVJUUzsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRkc3BsaXRfc2VhbWFfb2ZfbWF0Y2hfdGFibGVbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInNlYW1hIiB9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG10ZHNwbGl0X3NlYW1hX29mX21hdGNoX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydF9wYXJzZXIgbXRkc3BsaXRfc2VhbWFfcGFyc2VyID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gInNlYW1hLWZ3IiwKKwkub2ZfbWF0Y2hfdGFibGUgPSBtdGRzcGxpdF9zZWFtYV9vZl9tYXRjaF90YWJsZSwKKwkucGFyc2VfZm4gPSBtdGRzcGxpdF9wYXJzZV9zZWFtYSwKKwkudHlwZSA9IE1URF9QQVJTRVJfVFlQRV9GSVJNV0FSRSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG10ZHNwbGl0X3NlYW1hX2luaXQodm9pZCkKK3sKKwlyZWdpc3Rlcl9tdGRfcGFyc2VyKCZtdGRzcGxpdF9zZWFtYV9wYXJzZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N1YnN5c19pbml0Y2FsbChtdGRzcGxpdF9zZWFtYV9pbml0KTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbXRkL210ZHNwbGl0L210ZHNwbGl0X3NxdWFzaGZzLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL210ZC9tdGRzcGxpdC9tdGRzcGxpdF9zcXVhc2hmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MzUzZGEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL210ZC9tdGRzcGxpdC9tdGRzcGxpdF9zcXVhc2hmcy5jCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEzIEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTMgR2Fib3IgSnVob3MgPGp1aG9zZ0BvcGVud3J0Lm9yZz4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpCUtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21hZ2ljLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaD4KKworI2luY2x1ZGUgIm10ZHNwbGl0LmgiCisKK3N0YXRpYyBpbnQKK210ZHNwbGl0X3BhcnNlX3NxdWFzaGZzKHN0cnVjdCBtdGRfaW5mbyAqbWFzdGVyLAorCQkJY29uc3Qgc3RydWN0IG10ZF9wYXJ0aXRpb24gKipwcGFydHMsCisJCQlzdHJ1Y3QgbXRkX3BhcnRfcGFyc2VyX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnQ7CisJc3RydWN0IG10ZF9pbmZvICpwYXJlbnRfbXRkOworCXNpemVfdCBwYXJ0X29mZnNldDsKKwlzaXplX3Qgc3F1YXNoZnNfbGVuOworCWludCBlcnI7CisKKwllcnIgPSBtdGRfZ2V0X3NxdWFzaGZzX2xlbihtYXN0ZXIsIDAsICZzcXVhc2hmc19sZW4pOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlwYXJlbnRfbXRkID0gbXRkX2dldF9tYXN0ZXIobWFzdGVyKTsKKwlwYXJ0X29mZnNldCA9IG10ZHBhcnRfZ2V0X29mZnNldChtYXN0ZXIpOworCisJcGFydCA9IGt6YWxsb2Moc2l6ZW9mKCpwYXJ0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwYXJ0KSB7CisJCXByX2FsZXJ0KCJ1bmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBcIiVzXCIgcGFydGl0aW9uXG4iLAorCQkJIFJPT1RGU19TUExJVF9OQU1FKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcGFydC0+bmFtZSA9IFJPT1RGU19TUExJVF9OQU1FOworCXBhcnQtPm9mZnNldCA9IG10ZF9yb3VuZHVwX3RvX2ViKHBhcnRfb2Zmc2V0ICsgc3F1YXNoZnNfbGVuLAorCQkJCQkgcGFyZW50X210ZCkgLSBwYXJ0X29mZnNldDsKKwlwYXJ0LT5zaXplID0gbXRkX3JvdW5kZG93bl90b19lYihtYXN0ZXItPnNpemUgLSBwYXJ0LT5vZmZzZXQsIG1hc3Rlcik7CisKKwkqcHBhcnRzID0gcGFydDsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCBtdGRfcGFydF9wYXJzZXIgbXRkc3BsaXRfc3F1YXNoZnNfcGFyc2VyID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gInNxdWFzaGZzLXNwbGl0IiwKKwkucGFyc2VfZm4gPSBtdGRzcGxpdF9wYXJzZV9zcXVhc2hmcywKKwkudHlwZSA9IE1URF9QQVJTRVJfVFlQRV9ST09URlMsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtdGRzcGxpdF9zcXVhc2hmc19pbml0KHZvaWQpCit7CisJcmVnaXN0ZXJfbXRkX3BhcnNlcigmbXRkc3BsaXRfc3F1YXNoZnNfcGFyc2VyKTsKKworCXJldHVybiAwOworfQorCitzdWJzeXNfaW5pdGNhbGwobXRkc3BsaXRfc3F1YXNoZnNfaW5pdCk7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL210ZC9tdGRzcGxpdC9tdGRzcGxpdF90cGxpbmsuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbXRkL210ZHNwbGl0L210ZHNwbGl0X3RwbGluay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MDljMTAKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL210ZC9tdGRzcGxpdC9tdGRzcGxpdF90cGxpbmsuYwpAQCAtMCwwICsxLDE3NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTMgR2Fib3IgSnVob3MgPGp1aG9zZ0BvcGVud3J0Lm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTQgRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9nZW5lcmljLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKworI2luY2x1ZGUgIm10ZHNwbGl0LmgiCisKKyNkZWZpbmUgVFBMSU5LX05SX1BBUlRTCQkyCisjZGVmaW5lIFRQTElOS19NSU5fUk9PVEZTX09GRlMJMHg4MDAwMAkvKiA1MTJLaUIgKi8KKworI2RlZmluZSBNRDVTVU1fTEVOICAxNgorCitzdHJ1Y3QgZndfdjEgeworCWNoYXIJCXZlbmRvcl9uYW1lWzI0XTsKKwljaGFyCQlmd192ZXJzaW9uWzM2XTsKKwl1aW50MzJfdAlod19pZDsJCS8qIGhhcmR3YXJlIGlkICovCisJdWludDMyX3QJaHdfcmV2OwkJLyogaGFyZHdhcmUgcmV2aXNpb24gKi8KKwl1aW50MzJfdAl1bmsxOworCXVpbnQ4X3QJCW1kNXN1bTFbTUQ1U1VNX0xFTl07CisJdWludDMyX3QJdW5rMjsKKwl1aW50OF90CQltZDVzdW0yW01ENVNVTV9MRU5dOworCXVpbnQzMl90CXVuazM7CisJdWludDMyX3QJa2VybmVsX2xhOwkvKiBrZXJuZWwgbG9hZCBhZGRyZXNzICovCisJdWludDMyX3QJa2VybmVsX2VwOwkvKiBrZXJuZWwgZW50cnkgcG9pbnQgKi8KKwl1aW50MzJfdAlmd19sZW5ndGg7CS8qIHRvdGFsIGxlbmd0aCBvZiB0aGUgZmlybXdhcmUgKi8KKwl1aW50MzJfdAlrZXJuZWxfb2ZzOwkvKiBrZXJuZWwgZGF0YSBvZmZzZXQgKi8KKwl1aW50MzJfdAlrZXJuZWxfbGVuOwkvKiBrZXJuZWwgZGF0YSBsZW5ndGggKi8KKwl1aW50MzJfdAlyb290ZnNfb2ZzOwkvKiByb290ZnMgZGF0YSBvZmZzZXQgKi8KKwl1aW50MzJfdAlyb290ZnNfbGVuOwkvKiByb290ZnMgZGF0YSBsZW5ndGggKi8KKwl1aW50MzJfdAlib290X29mczsJLyogYm9vdGxvYWRlciBkYXRhIG9mZnNldCAqLworCXVpbnQzMl90CWJvb3RfbGVuOwkvKiBib290bG9hZGVyIGRhdGEgbGVuZ3RoICovCisJdWludDhfdAkJcGFkWzM2MF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGZ3X3YyIHsKKwljaGFyCQlmd192ZXJzaW9uWzQ4XTsgLyogMHgwNDogZncgdmVyc2lvbiBzdHJpbmcgKi8KKwl1aW50MzJfdAlod19pZDsJCS8qIDB4MzQ6IGhhcmR3YXJlIGlkICovCisJdWludDMyX3QJaHdfcmV2OwkJLyogMHgzODogRklYTUU6IGhhcmR3YXJlIHJldmlzaW9uPyAqLworCXVpbnQzMl90CXVuazE7CSAgICAgICAgLyogMHgzYzogMHgwMDAwMDAwMCAqLworCXVpbnQ4X3QJCW1kNXN1bTFbTUQ1U1VNX0xFTl07IC8qIDB4NDAgKi8KKwl1aW50MzJfdAl1bmsyOwkJLyogMHg1MDogMHgwMDAwMDAwMCAqLworCXVpbnQ4X3QJCW1kNXN1bTJbTUQ1U1VNX0xFTl07IC8qIDB4NTQgKi8KKwl1aW50MzJfdAl1bmszOwkJLyogMHg2NDogMHhmZmZmZmZmZiAqLworCisJdWludDMyX3QJa2VybmVsX2xhOwkvKiAweDY4OiBrZXJuZWwgbG9hZCBhZGRyZXNzICovCisJdWludDMyX3QJa2VybmVsX2VwOwkvKiAweDZjOiBrZXJuZWwgZW50cnkgcG9pbnQgKi8KKwl1aW50MzJfdAlmd19sZW5ndGg7CS8qIDB4NzA6IHRvdGFsIGxlbmd0aCBvZiB0aGUgaW1hZ2UgKi8KKwl1aW50MzJfdAlrZXJuZWxfb2ZzOwkvKiAweDc0OiBrZXJuZWwgZGF0YSBvZmZzZXQgKi8KKwl1aW50MzJfdAlrZXJuZWxfbGVuOwkvKiAweDc4OiBrZXJuZWwgZGF0YSBsZW5ndGggKi8KKwl1aW50MzJfdAlyb290ZnNfb2ZzOwkvKiAweDdjOiByb290ZnMgZGF0YSBvZmZzZXQgKi8KKwl1aW50MzJfdAlyb290ZnNfbGVuOwkvKiAweDgwOiByb290ZnMgZGF0YSBsZW5ndGggKi8KKwl1aW50MzJfdAlib290X29mczsJLyogMHg4NDogRklYTUU6IHNlZW1zIHRvIGJlIHVudXNlZCAqLworCXVpbnQzMl90CWJvb3RfbGVuOwkvKiAweDg4OiBGSVhNRTogc2VlbXMgdG8gYmUgdW51c2VkICovCisJdWludDE2X3QJdW5rNDsJCS8qIDB4OGM6IDB4NTVhYSAqLworCXVpbnQ4X3QJCXN2ZXJfaGk7CS8qIDB4OGUgKi8KKwl1aW50OF90CQlzdmVyX2xvOwkvKiAweDhmICovCisJdWludDhfdAkJdW5rNTsJCS8qIDB4OTA6IG1hZ2ljOiAweGE1ICovCisJdWludDhfdAkJdmVyX2hpOyAgICAgICAgIC8qIDB4OTEgKi8KKwl1aW50OF90CQl2ZXJfbWlkOyAgICAgICAgLyogMHg5MiAqLworCXVpbnQ4X3QJCXZlcl9sbzsgICAgICAgICAvKiAweDkzICovCisJdWludDhfdAkJcGFkWzM2NF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHRwbGlua19md19oZWFkZXIgeworCXVpbnQzMl90IHZlcnNpb247CisJdW5pb24geworCQlzdHJ1Y3QgZndfdjEgdjE7CisJCXN0cnVjdCBmd192MiB2MjsKKwl9OworfTsKKworc3RhdGljIGludCBtdGRzcGxpdF9wYXJzZV90cGxpbmsoc3RydWN0IG10ZF9pbmZvICptYXN0ZXIsCisJCQkJIGNvbnN0IHN0cnVjdCBtdGRfcGFydGl0aW9uICoqcHBhcnRzLAorCQkJCSBzdHJ1Y3QgbXRkX3BhcnRfcGFyc2VyX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IHRwbGlua19md19oZWFkZXIgaGRyOworCXNpemVfdCBoZHJfbGVuLCByZXRsZW4sIGtlcm5lbF9zaXplOworCXNpemVfdCByb290ZnNfb2Zmc2V0OworCXN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0czsKKwlpbnQgZXJyOworCisJaGRyX2xlbiA9IHNpemVvZihoZHIpOworCWVyciA9IG10ZF9yZWFkKG1hc3RlciwgMCwgaGRyX2xlbiwgJnJldGxlbiwgKHZvaWQgKikgJmhkcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmIChyZXRsZW4gIT0gaGRyX2xlbikKKwkJcmV0dXJuIC1FSU87CisKKwlzd2l0Y2ggKGxlMzJfdG9fY3B1KGhkci52ZXJzaW9uKSkgeworCWNhc2UgMToKKwkJaWYgKGJlMzJfdG9fY3B1KGhkci52MS5rZXJuZWxfb2ZzKSAhPSBzaXplb2YoaGRyKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWtlcm5lbF9zaXplID0gc2l6ZW9mKGhkcikgKyBiZTMyX3RvX2NwdShoZHIudjEua2VybmVsX2xlbik7CisJCXJvb3Rmc19vZmZzZXQgPSBiZTMyX3RvX2NwdShoZHIudjEucm9vdGZzX29mcyk7CisJCWJyZWFrOworCWNhc2UgMjoKKwljYXNlIDM6CisJCWlmIChiZTMyX3RvX2NwdShoZHIudjIua2VybmVsX29mcykgIT0gc2l6ZW9mKGhkcikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlrZXJuZWxfc2l6ZSA9IHNpemVvZihoZHIpICsgYmUzMl90b19jcHUoaGRyLnYyLmtlcm5lbF9sZW4pOworCQlyb290ZnNfb2Zmc2V0ID0gYmUzMl90b19jcHUoaGRyLnYyLnJvb3Rmc19vZnMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoa2VybmVsX3NpemUgPiBtYXN0ZXItPnNpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogRmluZCB0aGUgcm9vdGZzICovCisJZXJyID0gbXRkX2NoZWNrX3Jvb3Rmc19tYWdpYyhtYXN0ZXIsIHJvb3Rmc19vZmZzZXQsIE5VTEwpOworCWlmIChlcnIpIHsKKwkJLyoKKwkJICogVGhlIHNpemUgaW4gdGhlIGhlYWRlciBtaWdodCBjb3ZlciB0aGUgcm9vdGZzIGFzIHdlbGwuCisJCSAqIFN0YXJ0IHRoZSBzZWFyY2ggZnJvbSBhbiBhcmJpdHJhcnkgb2Zmc2V0LgorCQkgKi8KKwkJZXJyID0gbXRkX2ZpbmRfcm9vdGZzX2Zyb20obWFzdGVyLCBUUExJTktfTUlOX1JPT1RGU19PRkZTLAorCQkJCQkgICBtYXN0ZXItPnNpemUsICZyb290ZnNfb2Zmc2V0LCBOVUxMKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJcGFydHMgPSBremFsbG9jKFRQTElOS19OUl9QQVJUUyAqIHNpemVvZigqcGFydHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBhcnRzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBhcnRzWzBdLm5hbWUgPSBLRVJORUxfUEFSVF9OQU1FOworCXBhcnRzWzBdLm9mZnNldCA9IDA7CisJcGFydHNbMF0uc2l6ZSA9IGtlcm5lbF9zaXplOworCisJcGFydHNbMV0ubmFtZSA9IFJPT1RGU19QQVJUX05BTUU7CisJcGFydHNbMV0ub2Zmc2V0ID0gcm9vdGZzX29mZnNldDsKKwlwYXJ0c1sxXS5zaXplID0gbWFzdGVyLT5zaXplIC0gcm9vdGZzX29mZnNldDsKKworCSpwcGFydHMgPSBwYXJ0czsKKwlyZXR1cm4gVFBMSU5LX05SX1BBUlRTOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGRzcGxpdF90cGxpbmtfb2ZfbWF0Y2hfdGFibGVbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInRwbGluayxmaXJtd2FyZSIgfSwKKwl7fSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRfcGFyc2VyIG10ZHNwbGl0X3RwbGlua19wYXJzZXIgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSAidHBsaW5rLWZ3IiwKKwkub2ZfbWF0Y2hfdGFibGUgPSBtdGRzcGxpdF90cGxpbmtfb2ZfbWF0Y2hfdGFibGUsCisJLnBhcnNlX2ZuID0gbXRkc3BsaXRfcGFyc2VfdHBsaW5rLAorCS50eXBlID0gTVREX1BBUlNFUl9UWVBFX0ZJUk1XQVJFLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXRkc3BsaXRfdHBsaW5rX2luaXQodm9pZCkKK3sKKwlyZWdpc3Rlcl9tdGRfcGFyc2VyKCZtdGRzcGxpdF90cGxpbmtfcGFyc2VyKTsKKworCXJldHVybiAwOworfQorCitzdWJzeXNfaW5pdGNhbGwobXRkc3BsaXRfdHBsaW5rX2luaXQpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9tdGQvbXRkc3BsaXQvbXRkc3BsaXRfdHJ4LmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL210ZC9tdGRzcGxpdC9tdGRzcGxpdF90cnguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODUzZWM5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9tdGQvbXRkc3BsaXQvbXRkc3BsaXRfdHJ4LmMKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEzIEdhYm9yIEp1aG9zIDxqdWhvc2dAb3BlbndydC5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDE0IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpCUtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9nZW5lcmljLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKworI2luY2x1ZGUgIm10ZHNwbGl0LmgiCisKKyNkZWZpbmUgVFJYX01BR0lDICAgMHgzMDUyNDQ0OCAgLyogIkhEUjAiICovCisKK3N0cnVjdCB0cnhfaGVhZGVyIHsKKwlfX2xlMzIgbWFnaWM7CisJX19sZTMyIGxlbjsKKwlfX2xlMzIgY3JjMzI7CisJX19sZTMyIGZsYWdfdmVyc2lvbjsKKwlfX2xlMzIgb2Zmc2V0WzRdOworfTsKKworc3RhdGljIGludAorcmVhZF90cnhfaGVhZGVyKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzaXplX3Qgb2Zmc2V0LAorCQkgICBzdHJ1Y3QgdHJ4X2hlYWRlciAqaGVhZGVyKQoreworCXNpemVfdCBoZWFkZXJfbGVuOworCXNpemVfdCByZXRsZW47CisJaW50IHJldDsKKworCWhlYWRlcl9sZW4gPSBzaXplb2YoKmhlYWRlcik7CisJcmV0ID0gbXRkX3JlYWQobXRkLCBvZmZzZXQsIGhlYWRlcl9sZW4sICZyZXRsZW4sCisJCSAgICAgICAodW5zaWduZWQgY2hhciAqKSBoZWFkZXIpOworCWlmIChyZXQpIHsKKwkJcHJfZGVidWcoInJlYWQgZXJyb3IgaW4gXCIlc1wiXG4iLCBtdGQtPm5hbWUpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChyZXRsZW4gIT0gaGVhZGVyX2xlbikgeworCQlwcl9kZWJ1Zygic2hvcnQgcmVhZCBpbiBcIiVzXCJcbiIsIG10ZC0+bmFtZSk7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CittdGRzcGxpdF9wYXJzZV90cngoc3RydWN0IG10ZF9pbmZvICptYXN0ZXIsCisJCSAgIGNvbnN0IHN0cnVjdCBtdGRfcGFydGl0aW9uICoqcHBhcnRzLAorCQkgICBzdHJ1Y3QgbXRkX3BhcnRfcGFyc2VyX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzOworCXN0cnVjdCB0cnhfaGVhZGVyIGhkcjsKKwlpbnQgbnJfcGFydHM7CisJc2l6ZV90IG9mZnNldDsKKwlzaXplX3QgdHJ4X29mZnNldDsKKwlzaXplX3QgdHJ4X3NpemUgPSAwOworCXNpemVfdCByb290ZnNfb2Zmc2V0OworCXNpemVfdCByb290ZnNfc2l6ZSA9IDA7CisJaW50IHJldDsKKworCW5yX3BhcnRzID0gMjsKKwlwYXJ0cyA9IGt6YWxsb2MobnJfcGFydHMgKiBzaXplb2YoKnBhcnRzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwYXJ0cykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBmaW5kIHRyeCBpbWFnZSBvbiBlcmFzZSBibG9jayBib3VuZGFyaWVzICovCisJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBtYXN0ZXItPnNpemU7IG9mZnNldCArPSBtYXN0ZXItPmVyYXNlc2l6ZSkgeworCQl0cnhfc2l6ZSA9IDA7CisKKwkJcmV0ID0gcmVhZF90cnhfaGVhZGVyKG1hc3Rlciwgb2Zmc2V0LCAmaGRyKTsKKwkJaWYgKHJldCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChoZHIubWFnaWMgIT0gY3B1X3RvX2xlMzIoVFJYX01BR0lDKSkgeworCQkJcHJfZGVidWcoIm5vIHZhbGlkIHRyeCBoZWFkZXIgZm91bmQgaW4gXCIlc1wiIGF0IG9mZnNldCAlbGx4XG4iLAorCQkJCSBtYXN0ZXItPm5hbWUsICh1bnNpZ25lZCBsb25nIGxvbmcpIG9mZnNldCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXRyeF9zaXplID0gbGUzMl90b19jcHUoaGRyLmxlbik7CisJCWlmICgob2Zmc2V0ICsgdHJ4X3NpemUpID4gbWFzdGVyLT5zaXplKSB7CisJCQlwcl9kZWJ1ZygidHJ4IGltYWdlIGV4Y2VlZHMgTVREIGRldmljZSBcIiVzXCJcbiIsCisJCQkJIG1hc3Rlci0+bmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCQlicmVhazsKKwl9CisKKwlpZiAodHJ4X3NpemUgPT0gMCkgeworCQlwcl9kZWJ1Zygibm8gdHJ4IGhlYWRlciBmb3VuZCBpbiBcIiVzXCJcbiIsIG1hc3Rlci0+bmFtZSk7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyOworCX0KKworCXRyeF9vZmZzZXQgPSBvZmZzZXQgKyBoZHIub2Zmc2V0WzBdOworCXJvb3Rmc19vZmZzZXQgPSBvZmZzZXQgKyBoZHIub2Zmc2V0WzFdOworCXJvb3Rmc19zaXplID0gbWFzdGVyLT5zaXplIC0gcm9vdGZzX29mZnNldDsKKwl0cnhfc2l6ZSA9IHJvb3Rmc19vZmZzZXQgLSB0cnhfb2Zmc2V0OworCisJaWYgKHJvb3Rmc19zaXplID09IDApIHsKKwkJcHJfZGVidWcoIm5vIHJvb3RmcyBmb3VuZCBpbiBcIiVzXCJcbiIsIG1hc3Rlci0+bmFtZSk7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyOworCX0KKworCXBhcnRzWzBdLm5hbWUgPSBLRVJORUxfUEFSVF9OQU1FOworCXBhcnRzWzBdLm9mZnNldCA9IHRyeF9vZmZzZXQ7CisJcGFydHNbMF0uc2l6ZSA9IHRyeF9zaXplOworCisJcGFydHNbMV0ubmFtZSA9IFJPT1RGU19QQVJUX05BTUU7CisJcGFydHNbMV0ub2Zmc2V0ID0gcm9vdGZzX29mZnNldDsKKwlwYXJ0c1sxXS5zaXplID0gcm9vdGZzX3NpemU7CisKKwkqcHBhcnRzID0gcGFydHM7CisJcmV0dXJuIG5yX3BhcnRzOworCitlcnI6CisJa2ZyZWUocGFydHMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRyeF9wYXJzZXJfb2ZfbWF0Y2hfdGFibGVbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm9wZW53cnQsdHJ4IiB9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHRyeF9wYXJzZXJfb2ZfbWF0Y2hfdGFibGUpOworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0X3BhcnNlciB0cnhfcGFyc2VyID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gInRyeC1mdyIsCisJLm9mX21hdGNoX3RhYmxlID0gdHJ4X3BhcnNlcl9vZl9tYXRjaF90YWJsZSwKKwkucGFyc2VfZm4gPSBtdGRzcGxpdF9wYXJzZV90cngsCisJLnR5cGUgPSBNVERfUEFSU0VSX1RZUEVfRklSTVdBUkUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtdGRzcGxpdF90cnhfaW5pdCh2b2lkKQoreworCXJlZ2lzdGVyX210ZF9wYXJzZXIoJnRyeF9wYXJzZXIpOworCisJcmV0dXJuIDA7Cit9CisKK21vZHVsZV9pbml0KG10ZHNwbGl0X3RyeF9pbml0KTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbXRkL210ZHNwbGl0L210ZHNwbGl0X3VpbWFnZS5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9tdGQvbXRkc3BsaXQvbXRkc3BsaXRfdWltYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNlNTVmYgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbXRkL210ZHNwbGl0L210ZHNwbGl0X3VpbWFnZS5jCkBAIC0wLDAgKzEsMjgyIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMyBHYWJvciBKdWhvcyA8anVob3NnQG9wZW53cnQub3JnPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkJS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvbXRkL3BhcnRpdGlvbnMvdWltYWdlLmg+CisKKyNpbmNsdWRlICJtdGRzcGxpdC5oIgorCisvKgorICogTGVnYWN5IGZvcm1hdCBpbWFnZSBoZWFkZXIsCisgKiBhbGwgZGF0YSBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIgKGFrYSBuYXR1cmFsIGFrYSBiaWdlbmRpYW4pLgorICovCitzdHJ1Y3QgdWltYWdlX2hlYWRlciB7CisJdWludDMyX3QJaWhfbWFnaWM7CS8qIEltYWdlIEhlYWRlciBNYWdpYyBOdW1iZXIJKi8KKwl1aW50MzJfdAlpaF9oY3JjOwkvKiBJbWFnZSBIZWFkZXIgQ1JDIENoZWNrc3VtCSovCisJdWludDMyX3QJaWhfdGltZTsJLyogSW1hZ2UgQ3JlYXRpb24gVGltZXN0YW1wCSovCisJdWludDMyX3QJaWhfc2l6ZTsJLyogSW1hZ2UgRGF0YSBTaXplCQkqLworCXVpbnQzMl90CWloX2xvYWQ7CS8qIERhdGEJIExvYWQgIEFkZHJlc3MJCSovCisJdWludDMyX3QJaWhfZXA7CQkvKiBFbnRyeSBQb2ludCBBZGRyZXNzCQkqLworCXVpbnQzMl90CWloX2RjcmM7CS8qIEltYWdlIERhdGEgQ1JDIENoZWNrc3VtCSovCisJdWludDhfdAkJaWhfb3M7CQkvKiBPcGVyYXRpbmcgU3lzdGVtCQkqLworCXVpbnQ4X3QJCWloX2FyY2g7CS8qIENQVSBhcmNoaXRlY3R1cmUJCSovCisJdWludDhfdAkJaWhfdHlwZTsJLyogSW1hZ2UgVHlwZQkJCSovCisJdWludDhfdAkJaWhfY29tcDsJLyogQ29tcHJlc3Npb24gVHlwZQkJKi8KKwl1aW50OF90CQlpaF9uYW1lW0lIX05NTEVOXTsJLyogSW1hZ2UgTmFtZQkJKi8KK307CisKK3N0YXRpYyBpbnQKK3JlYWRfdWltYWdlX2hlYWRlcihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc2l6ZV90IG9mZnNldCwgdV9jaGFyICpidWYsCisJCSAgIHNpemVfdCBoZWFkZXJfbGVuKQoreworCXNpemVfdCByZXRsZW47CisJaW50IHJldDsKKworCXJldCA9IG10ZF9yZWFkKG10ZCwgb2Zmc2V0LCBoZWFkZXJfbGVuLCAmcmV0bGVuLCBidWYpOworCWlmIChyZXQpIHsKKwkJcHJfZGVidWcoInJlYWQgZXJyb3IgaW4gXCIlc1wiXG4iLCBtdGQtPm5hbWUpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChyZXRsZW4gIT0gaGVhZGVyX2xlbikgeworCQlwcl9kZWJ1Zygic2hvcnQgcmVhZCBpbiBcIiVzXCJcbiIsIG10ZC0+bmFtZSk7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1aW1hZ2VfcGFyc2VfZHQoc3RydWN0IG10ZF9pbmZvICptYXN0ZXIsIGludCAqZXh0cmFsZW4sCisJCQkgICAgdTMyICppaF9tYWdpYywgdTMyICppaF90eXBlLAorCQkJICAgIHUzMiAqaGVhZGVyX29mZnNldCwgdTMyICpwYXJ0X21hZ2ljKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBtdGRfZ2V0X29mX25vZGUobWFzdGVyKTsKKworCWlmICghbnAgfHwgIW9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAib3BlbndydCx1aW1hZ2UiKSkKKwkJcmV0dXJuOworCisJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgIm9wZW53cnQscGFkZGluZyIsIGV4dHJhbGVuKSkKKwkJcHJfZGVidWcoImdvdCBvcGVud3J0LHBhZGRpbmc9JWQgZnJvbSBkZXZpY2UtdHJlZVxuIiwgKmV4dHJhbGVuKTsKKwlpZiAoIW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAib3BlbndydCxpaC1tYWdpYyIsIGloX21hZ2ljKSkKKwkJcHJfZGVidWcoImdvdCBvcGVud3J0LGloLW1hZ2ljPSUwOHggZnJvbSBkZXZpY2UtdHJlZVxuIiwgKmloX21hZ2ljKTsKKwlpZiAoIW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAib3BlbndydCxpaC10eXBlIiwgaWhfdHlwZSkpCisJCXByX2RlYnVnKCJnb3Qgb3BlbndydCxpaC10eXBlPSUwOHggZnJvbSBkZXZpY2UtdHJlZVxuIiwgKmloX3R5cGUpOworCWlmICghb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJvcGVud3J0LG9mZnNldCIsIGhlYWRlcl9vZmZzZXQpKQorCQlwcl9kZWJ1ZygiZ290IGloLXN0YXJ0PSV1IGZyb20gZGV2aWNlLXRyZWVcbiIsICpoZWFkZXJfb2Zmc2V0KTsKKwlpZiAoIW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAib3BlbndydCxwYXJ0aXRpb24tbWFnaWMiLCBwYXJ0X21hZ2ljKSkKKwkJcHJfZGVidWcoImdvdCBvcGVud3J0LHBhcnRpdGlvbi1tYWdpYz0lMDh4IGZyb20gZGV2aWNlLXRyZWVcbiIsICpwYXJ0X21hZ2ljKTsKK30KKworc3RhdGljIHNzaXplX3QgdWltYWdlX3ZlcmlmeV9kZWZhdWx0KHVfY2hhciAqYnVmLCB1MzIgaWhfbWFnaWMsIHUzMiBpaF90eXBlKQoreworCXN0cnVjdCB1aW1hZ2VfaGVhZGVyICpoZWFkZXIgPSAoc3RydWN0IHVpbWFnZV9oZWFkZXIgKilidWY7CisKKwkvKiBkZWZhdWx0IHNhbml0eSBjaGVja3MgKi8KKwlpZiAoYmUzMl90b19jcHUoaGVhZGVyLT5paF9tYWdpYykgIT0gaWhfbWFnaWMpIHsKKwkJcHJfZGVidWcoImludmFsaWQgdUltYWdlIG1hZ2ljOiAlMDh4ICE9ICUwOHhcbiIsCisJCQkgYmUzMl90b19jcHUoaGVhZGVyLT5paF9tYWdpYyksIGloX21hZ2ljKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGhlYWRlci0+aWhfb3MgIT0gSUhfT1NfTElOVVgpIHsKKwkJcHJfZGVidWcoImludmFsaWQgdUltYWdlIE9TOiAlMDh4ICE9ICUwOHhcbiIsCisJCQkgYmUzMl90b19jcHUoaGVhZGVyLT5paF9vcyksIElIX09TX0xJTlVYKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGhlYWRlci0+aWhfdHlwZSAhPSBpaF90eXBlKSB7CisJCXByX2RlYnVnKCJpbnZhbGlkIHVJbWFnZSB0eXBlOiAlMDh4ICE9ICUwOHhcbiIsCisJCQkgYmUzMl90b19jcHUoaGVhZGVyLT5paF90eXBlKSwgaWhfdHlwZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIF9fbXRkc3BsaXRfcGFyc2VfdWltYWdlIC0gc2NhbiBwYXJ0aXRpb24gYW5kIGNyZWF0ZSBrZXJuZWwgKyByb290ZnMgcGFydHMKKyAqCisgKiBAZmluZF9oZWFkZXI6IGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGEgYmxvY2sgb2YgZGF0YSB0aGF0IHdpbGwgcmV0dXJuIG9mZnNldAorICogICAgICBhbmQgdGFpbCBwYWRkaW5nIGxlbmd0aCBvZiBhIHZhbGlkIHVJbWFnZSBoZWFkZXIgaWYgZm91bmQKKyAqLworc3RhdGljIGludCBfX210ZHNwbGl0X3BhcnNlX3VpbWFnZShzdHJ1Y3QgbXRkX2luZm8gKm1hc3RlciwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqKnBwYXJ0cywKKwkJCQkgICBzdHJ1Y3QgbXRkX3BhcnRfcGFyc2VyX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzOworCXVfY2hhciAqYnVmOworCWludCBucl9wYXJ0czsKKwlzaXplX3Qgb2Zmc2V0OworCXNpemVfdCB1aW1hZ2Vfb2Zmc2V0OworCXNpemVfdCB1aW1hZ2Vfc2l6ZSA9IDA7CisJc2l6ZV90IHJvb3Rmc19vZmZzZXQ7CisJc2l6ZV90IHJvb3Rmc19zaXplID0gMDsKKwlzaXplX3QgYnVmbGVuOworCWludCB1aW1hZ2VfcGFydCwgcmZfcGFydDsKKwlpbnQgcmV0OworCWludCBleHRyYWxlbiA9IDA7CisJdTMyIGloX21hZ2ljID0gSUhfTUFHSUM7CisJdTMyIGloX3R5cGUgPSBJSF9UWVBFX0tFUk5FTDsKKwl1MzIgaGVhZGVyX29mZnNldCA9IDA7CisJdTMyIHBhcnRfbWFnaWMgPSAwOworCWVudW0gbXRkc3BsaXRfcGFydF90eXBlIHR5cGU7CisKKwlucl9wYXJ0cyA9IDI7CisJcGFydHMgPSBremFsbG9jKG5yX3BhcnRzICogc2l6ZW9mKCpwYXJ0cyksIEdGUF9LRVJORUwpOworCWlmICghcGFydHMpCisJCXJldHVybiAtRU5PTUVNOworCisJdWltYWdlX3BhcnNlX2R0KG1hc3RlciwgJmV4dHJhbGVuLCAmaWhfbWFnaWMsICZpaF90eXBlLCAmaGVhZGVyX29mZnNldCwgJnBhcnRfbWFnaWMpOworCWJ1ZmxlbiA9IHNpemVvZihzdHJ1Y3QgdWltYWdlX2hlYWRlcikgKyBoZWFkZXJfb2Zmc2V0OworCWJ1ZiA9IHZtYWxsb2MoYnVmbGVuKTsKKwlpZiAoIWJ1ZikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX3BhcnRzOworCX0KKworCS8qIGZpbmQgdUltYWdlIG9uIGVyYXNlIGJsb2NrIGJvdW5kYXJpZXMgKi8KKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IG1hc3Rlci0+c2l6ZTsgb2Zmc2V0ICs9IG1hc3Rlci0+ZXJhc2VzaXplKSB7CisJCXN0cnVjdCB1aW1hZ2VfaGVhZGVyICpoZWFkZXI7CisKKwkJdWltYWdlX3NpemUgPSAwOworCisJCXJldCA9IHJlYWRfdWltYWdlX2hlYWRlcihtYXN0ZXIsIG9mZnNldCwgYnVmLCBidWZsZW4pOworCQlpZiAocmV0KQorCQkJY29udGludWU7CisKKwkJLyogdmVyaWZ5IG9wdGlvbmFsIHBhcnRpdGlvbiBtYWdpYyBiZWZvcmUgdWltYWdlIGhlYWRlciAqLworCQlpZiAoaGVhZGVyX29mZnNldCAmJiBwYXJ0X21hZ2ljICYmIChiZTMyX3RvX2NwdSgqKHUzMiAqKWJ1ZikgIT0gcGFydF9tYWdpYykpCisJCQljb250aW51ZTsKKworCQlyZXQgPSB1aW1hZ2VfdmVyaWZ5X2RlZmF1bHQoYnVmICsgaGVhZGVyX29mZnNldCwgaWhfbWFnaWMsIGloX3R5cGUpOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJfZGVidWcoIm5vIHZhbGlkIHVJbWFnZSBmb3VuZCBpbiBcIiVzXCIgYXQgb2Zmc2V0ICVsbHhcbiIsCisJCQkJIG1hc3Rlci0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZykgb2Zmc2V0KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaGVhZGVyID0gKHN0cnVjdCB1aW1hZ2VfaGVhZGVyICopKGJ1ZiArIGhlYWRlcl9vZmZzZXQpOworCisJCXVpbWFnZV9zaXplID0gc2l6ZW9mKCpoZWFkZXIpICsKKwkJCQliZTMyX3RvX2NwdShoZWFkZXItPmloX3NpemUpICsgaGVhZGVyX29mZnNldCArIGV4dHJhbGVuOworCisJCWlmICgob2Zmc2V0ICsgdWltYWdlX3NpemUpID4gbWFzdGVyLT5zaXplKSB7CisJCQlwcl9kZWJ1ZygidUltYWdlIGV4Y2VlZHMgTVREIGRldmljZSBcIiVzXCJcbiIsCisJCQkJIG1hc3Rlci0+bmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCQlicmVhazsKKwl9CisKKwlpZiAodWltYWdlX3NpemUgPT0gMCkgeworCQlwcl9kZWJ1Zygibm8gdUltYWdlIGZvdW5kIGluIFwiJXNcIlxuIiwgbWFzdGVyLT5uYW1lKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJfZnJlZV9idWY7CisJfQorCisJdWltYWdlX29mZnNldCA9IG9mZnNldDsKKworCWlmICh1aW1hZ2Vfb2Zmc2V0ID09IDApIHsKKwkJdWltYWdlX3BhcnQgPSAwOworCQlyZl9wYXJ0ID0gMTsKKworCQkvKiBmaW5kIHRoZSByb290cyBhZnRlciB0aGUgdUltYWdlICovCisJCXJldCA9IG10ZF9maW5kX3Jvb3Rmc19mcm9tKG1hc3RlciwgdWltYWdlX29mZnNldCArIHVpbWFnZV9zaXplLAorCQkJCQkgICBtYXN0ZXItPnNpemUsICZyb290ZnNfb2Zmc2V0LCAmdHlwZSk7CisJCWlmIChyZXQpIHsKKwkJCXByX2RlYnVnKCJubyByb290ZnMgYWZ0ZXIgdUltYWdlIGluIFwiJXNcIlxuIiwKKwkJCQkgbWFzdGVyLT5uYW1lKTsKKwkJCWdvdG8gZXJyX2ZyZWVfYnVmOworCQl9CisKKwkJcm9vdGZzX3NpemUgPSBtYXN0ZXItPnNpemUgLSByb290ZnNfb2Zmc2V0OworCQl1aW1hZ2Vfc2l6ZSA9IHJvb3Rmc19vZmZzZXQgLSB1aW1hZ2Vfb2Zmc2V0OworCX0gZWxzZSB7CisJCXJmX3BhcnQgPSAwOworCQl1aW1hZ2VfcGFydCA9IDE7CisKKwkJLyogY2hlY2sgcm9vdGZzIHByZXNlbmNlIGF0IG9mZnNldCAwICovCisJCXJldCA9IG10ZF9jaGVja19yb290ZnNfbWFnaWMobWFzdGVyLCAwLCAmdHlwZSk7CisJCWlmIChyZXQpIHsKKwkJCXByX2RlYnVnKCJubyByb290ZnMgYmVmb3JlIHVJbWFnZSBpbiBcIiVzXCJcbiIsCisJCQkJIG1hc3Rlci0+bmFtZSk7CisJCQlnb3RvIGVycl9mcmVlX2J1ZjsKKwkJfQorCisJCXJvb3Rmc19vZmZzZXQgPSAwOworCQlyb290ZnNfc2l6ZSA9IHVpbWFnZV9vZmZzZXQ7CisJfQorCisJaWYgKHJvb3Rmc19zaXplID09IDApIHsKKwkJcHJfZGVidWcoIm5vIHJvb3RmcyBmb3VuZCBpbiBcIiVzXCJcbiIsIG1hc3Rlci0+bmFtZSk7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX2ZyZWVfYnVmOworCX0KKworCXBhcnRzW3VpbWFnZV9wYXJ0XS5uYW1lID0gS0VSTkVMX1BBUlRfTkFNRTsKKwlwYXJ0c1t1aW1hZ2VfcGFydF0ub2Zmc2V0ID0gdWltYWdlX29mZnNldDsKKwlwYXJ0c1t1aW1hZ2VfcGFydF0uc2l6ZSA9IHVpbWFnZV9zaXplOworCisJaWYgKHR5cGUgPT0gTVREU1BMSVRfUEFSVF9UWVBFX1VCSSkKKwkJcGFydHNbcmZfcGFydF0ubmFtZSA9IFVCSV9QQVJUX05BTUU7CisJZWxzZQorCQlwYXJ0c1tyZl9wYXJ0XS5uYW1lID0gUk9PVEZTX1BBUlRfTkFNRTsKKwlwYXJ0c1tyZl9wYXJ0XS5vZmZzZXQgPSByb290ZnNfb2Zmc2V0OworCXBhcnRzW3JmX3BhcnRdLnNpemUgPSByb290ZnNfc2l6ZTsKKworCXZmcmVlKGJ1Zik7CisKKwkqcHBhcnRzID0gcGFydHM7CisJcmV0dXJuIG5yX3BhcnRzOworCitlcnJfZnJlZV9idWY6CisJdmZyZWUoYnVmKTsKKworZXJyX2ZyZWVfcGFydHM6CisJa2ZyZWUocGFydHMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10ZHNwbGl0X3VpbWFnZV9vZl9tYXRjaF90YWJsZVtdID0geworCXsgLmNvbXBhdGlibGUgPSAiZGVueCx1aW1hZ2UiIH0sCisJeyAuY29tcGF0aWJsZSA9ICJvcGVud3J0LHVpbWFnZSIgfSwKKwl7fSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRfcGFyc2VyIHVpbWFnZV9nZW5lcmljX3BhcnNlciA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubmFtZSA9ICJ1aW1hZ2UtZnciLAorCS5vZl9tYXRjaF90YWJsZSA9IG10ZHNwbGl0X3VpbWFnZV9vZl9tYXRjaF90YWJsZSwKKwkucGFyc2VfZm4gPSBfX210ZHNwbGl0X3BhcnNlX3VpbWFnZSwKKwkudHlwZSA9IE1URF9QQVJTRVJfVFlQRV9GSVJNV0FSRSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSW5pdAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IF9faW5pdCBtdGRzcGxpdF91aW1hZ2VfaW5pdCh2b2lkKQoreworCXJlZ2lzdGVyX210ZF9wYXJzZXIoJnVpbWFnZV9nZW5lcmljX3BhcnNlcik7CisKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX2luaXQobXRkc3BsaXRfdWltYWdlX2luaXQpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9tdGQvbXRkc3BsaXQvbXRkc3BsaXRfd3JnZy5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9tdGQvbXRkc3BsaXQvbXRkc3BsaXRfd3JnZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmZDYwNTgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL210ZC9tdGRzcGxpdC9tdGRzcGxpdF93cmdnLmMKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEzIEdhYm9yIEp1aG9zIDxqdWhvc2dAb3BlbndydC5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDE0IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTYgU3Rpam4gVGludGVsIDxzdGlqbkBsaW51eC1pcHY2LmJlPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9nZW5lcmljLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKworI2luY2x1ZGUgIm10ZHNwbGl0LmgiCisKKyNkZWZpbmUgV1JHR19OUl9QQVJUUwkJMgorI2RlZmluZSBXUkdHX01JTl9ST09URlNfT0ZGUwkweDgwMDAwCS8qIDUxMktpQiAqLworI2RlZmluZSBXUkdHMDNfTUFHSUMJCTB4MjAwODAzMjEKKyNkZWZpbmUgV1JHX01BR0lDCQkweDIwMDQwMjIwCisKK3N0cnVjdCB3cmdnMDNfaGVhZGVyIHsKKwljaGFyCQlzaWduYXR1cmVbMzJdOworCXVpbnQzMl90CW1hZ2ljMTsKKwl1aW50MzJfdAltYWdpYzI7CisJY2hhcgkJdmVyc2lvblsxNl07CisJY2hhcgkJbW9kZWxbMTZdOworCXVpbnQzMl90CWZsYWdbMl07CisJdWludDMyX3QJcmVzZXJ2ZVsyXTsKKwljaGFyCQlidWlsZG5vWzE2XTsKKwl1aW50MzJfdAlzaXplOworCXVpbnQzMl90CW9mZnNldDsKKwljaGFyCQlkZXZuYW1lWzMyXTsKKwljaGFyCQlkaWdlc3RbMTZdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCB3cmdfaGVhZGVyIHsKKwljaGFyCQlzaWduYXR1cmVbMzJdOworCXVpbnQzMl90CW1hZ2ljMTsKKwl1aW50MzJfdAltYWdpYzI7CisJdWludDMyX3QJc2l6ZTsKKwl1aW50MzJfdAlvZmZzZXQ7CisJY2hhcgkJZGV2bmFtZVszMl07CisJY2hhcgkJZGlnZXN0WzE2XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKK3N0YXRpYyBpbnQgbXRkc3BsaXRfcGFyc2Vfd3JnZyhzdHJ1Y3QgbXRkX2luZm8gKm1hc3RlciwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqKnBwYXJ0cywKKwkJCSAgICAgICBzdHJ1Y3QgbXRkX3BhcnRfcGFyc2VyX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IHdyZ2cwM19oZWFkZXIgaGRyOworCXNpemVfdCBoZHJfbGVuLCByZXRsZW4sIGtlcm5lbF9lbnRfc2l6ZTsKKwlzaXplX3Qgcm9vdGZzX29mZnNldDsKKwlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHM7CisJZW51bSBtdGRzcGxpdF9wYXJ0X3R5cGUgdHlwZTsKKwlpbnQgZXJyOworCisJaGRyX2xlbiA9IHNpemVvZihoZHIpOworCWVyciA9IG10ZF9yZWFkKG1hc3RlciwgMCwgaGRyX2xlbiwgJnJldGxlbiwgKHZvaWQgKikgJmhkcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmIChyZXRsZW4gIT0gaGRyX2xlbikKKwkJcmV0dXJuIC1FSU87CisKKwkvKiBzYW5pdHkgY2hlY2tzICovCisJaWYgKGxlMzJfdG9fY3B1KGhkci5tYWdpYzEpID09IFdSR0cwM19NQUdJQykgeworCQlrZXJuZWxfZW50X3NpemUgPSBoZHJfbGVuICsgYmUzMl90b19jcHUoaGRyLnNpemUpOworCQkvKgorCQkgKiBJZiB0aGlzIGJlY29tZXMgc2lsbHkgYmlnIGl0J3MgcHJvYmFibHkgYmVjYXVzZSB0aGUKKwkJICogV1JHRyBpbWFnZSBpcyBsaXR0bGUtZW5kaWFuLgorCQkgKi8KKwkJaWYgKGtlcm5lbF9lbnRfc2l6ZSA+IG1hc3Rlci0+c2l6ZSkKKwkJCWtlcm5lbF9lbnRfc2l6ZSA9IGhkcl9sZW4gKyBsZTMyX3RvX2NwdShoZHIuc2l6ZSk7CisKKwkJLyogTm93IHdoYXQgPyEgSXQncyBuZWl0aGVyICovCisJCWlmIChrZXJuZWxfZW50X3NpemUgPiBtYXN0ZXItPnNpemUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgaWYgKGxlMzJfdG9fY3B1KGhkci5tYWdpYzEpID09IFdSR19NQUdJQykgeworCQlrZXJuZWxfZW50X3NpemUgPSBzaXplb2Yoc3RydWN0IHdyZ19oZWFkZXIpICsgbGUzMl90b19jcHUoCisJCSAgICAgICAgICAgICAgICAgICgoc3RydWN0IHdyZ19oZWFkZXIqKSZoZHIpLT5zaXplKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoa2VybmVsX2VudF9zaXplID4gbWFzdGVyLT5zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogVGhlIHNpemUgaW4gdGhlIGhlYWRlciBjb3ZlcnMgdGhlIHJvb3RmcyBhcyB3ZWxsLgorCSAqIFN0YXJ0IHRoZSBzZWFyY2ggZnJvbSBhbiBhcmJpdHJhcnkgb2Zmc2V0LgorCSAqLworCWVyciA9IG10ZF9maW5kX3Jvb3Rmc19mcm9tKG1hc3RlciwgV1JHR19NSU5fUk9PVEZTX09GRlMsCisJCQkJICAgbWFzdGVyLT5zaXplLCAmcm9vdGZzX29mZnNldCwgJnR5cGUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlwYXJ0cyA9IGt6YWxsb2MoV1JHR19OUl9QQVJUUyAqIHNpemVvZigqcGFydHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBhcnRzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBhcnRzWzBdLm5hbWUgPSBLRVJORUxfUEFSVF9OQU1FOworCXBhcnRzWzBdLm9mZnNldCA9IDA7CisJcGFydHNbMF0uc2l6ZSA9IHJvb3Rmc19vZmZzZXQ7CisKKwlwYXJ0c1sxXS5uYW1lID0gUk9PVEZTX1BBUlRfTkFNRTsKKwlwYXJ0c1sxXS5vZmZzZXQgPSByb290ZnNfb2Zmc2V0OworCXBhcnRzWzFdLnNpemUgPSBtYXN0ZXItPnNpemUgLSByb290ZnNfb2Zmc2V0OworCisJKnBwYXJ0cyA9IHBhcnRzOworCXJldHVybiBXUkdHX05SX1BBUlRTOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGRzcGxpdF93cmdnX29mX21hdGNoX3RhYmxlW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJ3cmciIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXRkc3BsaXRfd3JnZ19vZl9tYXRjaF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRfcGFyc2VyIG10ZHNwbGl0X3dyZ2dfcGFyc2VyID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gIndyZ2ctZnciLAorCS5vZl9tYXRjaF90YWJsZSA9IG10ZHNwbGl0X3dyZ2dfb2ZfbWF0Y2hfdGFibGUsCisJLnBhcnNlX2ZuID0gbXRkc3BsaXRfcGFyc2Vfd3JnZywKKwkudHlwZSA9IE1URF9QQVJTRVJfVFlQRV9GSVJNV0FSRSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG10ZHNwbGl0X3dyZ2dfaW5pdCh2b2lkKQoreworCXJlZ2lzdGVyX210ZF9wYXJzZXIoJm10ZHNwbGl0X3dyZ2dfcGFyc2VyKTsKKworCXJldHVybiAwOworfQorCitzdWJzeXNfaW5pdGNhbGwobXRkc3BsaXRfd3JnZ19pbml0KTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbXRkL3BhcnNlcnMvcm91dGVyYm9vdHBhcnQuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbXRkL3BhcnNlcnMvcm91dGVyYm9vdHBhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWJiYTBmCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9tdGQvcGFyc2Vycy9yb3V0ZXJib290cGFydC5jCkBAIC0wLDAgKzEsMzY1IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CisvKgorICogUGFyc2VyIGZvciBNaWtyb1RpayBSb3V0ZXJCb290IHBhcnRpdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDIwIFRoaWJhdXQgVkFSw4hORSA8aGFja3Mra2VybmVsQHNsYXNoZGlydC5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHBhcnNlciBidWlsZHMgZnJvbSB0aGUgImZpeGVkLXBhcnRpdGlvbnMiIG9uZSAoc2VlIG9mcGFydC5jKSwgYnV0IGl0IGNhbgorICogaGFuZGxlIGR5bmFtaWMgcGFydGl0aW9ucyBhcyBmb3VuZCBvbiByb3V0ZXJib290IGRldmljZXMuCisgKgorICogRFRTIG5vZGVzIGFyZSBkZWZpbmVkIGFzIGZvbGxvd3M6CisgKiBGb3IgZml4ZWQgcGFydGl0aW9uczoKKyAqCW5vZGUtbmFtZUB1bml0LWFkZHJlc3PCoHsKKyAqCQlyZWcgPSA8cHJvcC1lbmNvZGVkLWFycmF5PjsKKyAqCQlsYWJlbCA9IDxzdHJpbmc+OworICoJCXJlYWQtb25seTsKKyAqCQlsb2NrOworICoJfTsKKyAqCisgKiByZWcgcHJvcGVydHkgaXMgbWFuZGF0b3J5OyBvdGhlciBwcm9wZXJ0aWVzIGFyZSBvcHRpb25hbC4KKyAqIHJlZyBmb3JtYXQgaXMgPGFkZHJlc3MgbGVuZ3RoPi4gbGVuZ3RoIGNhbiBiZSAwIGlmIHRoZSBuZXh0IHBhcnRpdGlvbiBpcworICogYW5vdGhlciBmaXhlZCBwYXJ0aXRpb24gb3IgYSAid2VsbC1rbm93biIgcGFydGl0aW9uIGFzIGRlZmluZWQgYmVsb3c6IGluIHRoYXQKKyAqIGNhc2UgdGhlIHBhcnRpdGlvbiB3aWxsIGV4dGVuZCB1cCB0byB0aGUgbmV4dCBvbmUuCisgKgorICogRm9yIGR5bmFtaWMgcGFydGl0aW9uczoKKyAqCW5vZGUtbmFtZSB7CisgKgkJc2l6ZSA9IDxwcm9wLWVuY29kZWQtYXJyYXk+OworICoJCWxhYmVsID0gPHN0cmluZz47CisgKgkJcmVhZC1vbmx5OworICoJCWxvY2s7CisgKgl9OworICoKKyAqIHNpemUgcHJvcGVydHkgaXMgbm9ybWFsbHkgbWFuZGF0b3J5LiBJdCBjYW4gb25seSBiZSBvbWl0dGVkIChvciBzZXQgdG8gMCkgaWY6CisgKgktIHRoZSBwYXJ0aXRpb24gaXMgYSAid2VsbC1rbm93biIgb25lIChhcyBkZWZpbmVkIGJlbG93KSwgaW4gd2hpY2ggY2FzZQorICoJICB0aGUgcGFydGl0aW9uIHNpemUgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGFkanVzdGVkOyBvcgorICoJLSB0aGUgbmV4dCBwYXJ0aXRpb24gaXMgYSBmaXhlZCBvbmUgb3IgYSAid2VsbC1rbm93biIgb25lLCBpbiB3aGljaCBjYXNlCisgKgkgIHRoZSBjdXJyZW50IHBhcnRpdGlvbiB3aWxsIGV4dGVuZCB1cCB0byB0aGUgbmV4dCBvbmUuCisgKiBPdGhlciBwcm9wZXJ0aWVzIGFyZSBvcHRpb25hbC4KKyAqIHNpemUgZm9ybWF0IGlzIDxsZW5ndGg+LgorICogQnkgZGVmYXVsdCBkeW5hbWljIHBhcnRpdGlvbnMgYXJlIGFwcGVuZGVkIGFmdGVyIHRoZSBwcmVjZWRpbmcgb25lLCBleGNlcHQKKyAqIGZvciAid2VsbC1rbm93biIgb25lcyB3aGljaCBhcmUgYXV0b21hdGljYWxseSBsb2NhdGVkIG9uIGZsYXNoLgorICoKKyAqIFdlbGwta25vd24gcGFydGl0aW9ucyAobWF0Y2hlZCB2aWEgbGFiZWwgb3Igbm9kZS1uYW1lKToKKyAqIC0gImhhcmRfY29uZmlnIgorICogLSAic29mdF9jb25maWciCisgKiAtICJkdGJfY29uZmlnIgorICoKKyAqIE5vdGU6IHRoaXMgcGFyc2VyIHdpbGwgaGFwcGlseSByZWdpc3RlciAwLXNpemVkIHBhcnRpdGlvbnMgaWYgbWlzdXNlZC4KKyAqCisgKiBUaGlzIHBhcnNlciByZXF1aXJlcyB0aGUgRFRTIHRvIGxpc3QgcGFydGl0aW9ucyBpbiBhc2NlbmRpbmcgb3JkZXIgYXMKKyAqIGV4cGVjdGVkIG9uIHRoZSBNVEQgZGV2aWNlLgorICoKKyAqIFNpbmNlIG9ubHkgdGhlICJoYXJkX2NvbmZpZyIgYW5kICJzb2Z0X2NvbmZpZyIgcGFydGl0aW9ucyBhcmUgdXNlZCBpbiBPcGVuV1JULAorICogYSBtaW5pbWFsIHdvcmtpbmcgRFRTIGNvdWxkIGRlZmluZSBvbmx5IHRoZXNlIHR3byBwYXJ0aXRpb25zIGR5bmFtaWNhbGx5IChpbgorICogdGhlIHJpZ2h0IG9yZGVyLCB1c3VhbGx5IGhhcmRfY29uZmlnIHRoZW4gc29mdF9jb25maWcpLgorICoKKyAqIE5vdGU6IHNvbWUgbWlwcyBSQiBkZXZpY2VzIGVuY29kZSB0aGUgaGFyZF9jb25maWcgb2Zmc2V0IGFuZCBsZW5ndGggaW4gdHdvCisgKiBjb25zZWN1dGl2ZSB1MzIgbG9jYXRlZCBhdCBvZmZzZXQgMHgxNCAoZm9yIHJhbWlwcykgb3IgMHgyNCAoZm9yIGF0aDc5KSBvbgorICogdGhlIFNQSSBOT1IgZmxhc2guIFVuZm9ydHVuYXRlbHkgdGhpcyBzZWVtcyBpbmNvbnNpc3RlbnQgYWNyb3NzIG1hY2hpbmVzIGFuZAorICogZG9lcyBub3QgYXBwbHkgdG8gZS5nLiBpcHEtYmFzZWQgb25lcywgc28gd2UgaWdub3JlIHRoYXQgaW5mb3JtYXRpb24uCisgKgorICogTm90ZTogVG8gZmluZCB3ZWxsLWtub3duIHBhcnRpdGlvbnMsIHRoaXMgcGFyc2VyIHdpbGwgZ28gdGhyb3VnaCB0aGUgZW50aXJlCisgKiB0b3AgbXRkIHBhcnRpdGlvbiBwYXJzZWQsIF9iZWZvcmVfIHRoZSBEVFMgbm9kZXMgYXJlIHByb2Nlc3NlZC4gVGhpcyB3b3JrcworICogd2VsbCBpbiB0aGUgY3VycmVudCBzdGF0ZSBvZiBhZmZhaXJzLCBhbmQgaXMgYSBzaW1wbGVyIGltcGxlbWVudGF0aW9uIHRoYW4KKyAqIHNlYXJjaGluZyBmb3Iga25vd24gcGFydGl0aW9ucyBpbiB0aGUgImhvbGVzIiBsZWZ0IGJldHdlZW4gZml4ZWQtcGFydGl0aW9uLAorICogX2FmdGVyXyBwcm9jZXNzaW5nIERUUyBub2Rlcy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZmR0Lmg+CisjaW5jbHVkZSA8bGludXgvbGliZmR0X2Vudi5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorCisjZGVmaW5lIFJCX01BR0lDX0hBUkQJKCgnSCcpIHwgKCdhJyA8PCA4KSB8ICgncicgPDwgMTYpIHwgKCdkJyA8PCAyNCkpCisjZGVmaW5lIFJCX01BR0lDX1NPRlQJKCgnUycpIHwgKCdvJyA8PCA4KSB8ICgnZicgPDwgMTYpIHwgKCd0JyA8PCAyNCkpCisjZGVmaW5lIFJCX0JMT0NLX1NJWkUJMHgxMDAwCisKK3N0cnVjdCByb3V0ZXJib290X2R5bnBhcnQgeworCWNvbnN0IGNoYXIgKiBjb25zdCBuYW1lOworCWNvbnN0IHUzMiBtYWdpYzsKKwlpbnQgKCogY29uc3Qgc2l6ZV9maXh1cCkoc3RydWN0IG10ZF9pbmZvICosIHN0cnVjdCByb3V0ZXJib290X2R5bnBhcnQgKik7CisJc2l6ZV90IG9mZnNldDsKKwlzaXplX3Qgc2l6ZTsKKwlib29sIGZvdW5kOworfTsKKworc3RhdGljIGludCByb3V0ZXJib290X2R0YnNmaXh1cChzdHJ1Y3QgbXRkX2luZm8gKiwgc3RydWN0IHJvdXRlcmJvb3RfZHlucGFydCAqKTsKKworc3RhdGljIHN0cnVjdCByb3V0ZXJib290X2R5bnBhcnQgcmJfZHlucGFydHNbXSA9IHsKKwl7CisJCS5uYW1lID0gImhhcmRfY29uZmlnIiwKKwkJLm1hZ2ljID0gUkJfTUFHSUNfSEFSRCwJLy8gc3RvcmVkIGluIENQVS1lbmRpYW5uZXNzIG9uIGZsYXNoCisJCS5zaXplX2ZpeHVwID0gTlVMTCwKKwkJLm9mZnNldCA9IDB4MCwKKwkJLnNpemUgPSBSQl9CTE9DS19TSVpFLAorCQkuZm91bmQgPSBmYWxzZSwKKwl9LCB7CisJCS5uYW1lID0gInNvZnRfY29uZmlnIiwKKwkJLm1hZ2ljID0gUkJfTUFHSUNfU09GVCwJLy8gc3RvcmVkIGluIENQVS1lbmRpYW5uZXNzIG9uIGZsYXNoCisJCS5zaXplX2ZpeHVwID0gTlVMTCwKKwkJLm9mZnNldCA9IDB4MCwKKwkJLnNpemUgPSBSQl9CTE9DS19TSVpFLAorCQkuZm91bmQgPSBmYWxzZSwKKwl9LCB7CisJCS5uYW1lID0gImR0Yl9jb25maWciLAorCQkubWFnaWMgPSBmZHQzMl90b19jcHUoT0ZfRFRfSEVBREVSKSwJLy8gc3RvcmVkIEJFIG9uIGZsYXNoCisJCS5zaXplX2ZpeHVwID0gcm91dGVyYm9vdF9kdGJzZml4dXAsCisJCS5vZmZzZXQgPSAweDAsCisJCS5zaXplID0gMHgwLAorCQkuZm91bmQgPSBmYWxzZSwKKwl9Cit9OworCitzdGF0aWMgaW50IHJvdXRlcmJvb3RfZHRic2ZpeHVwKHN0cnVjdCBtdGRfaW5mbyAqbWFzdGVyLCBzdHJ1Y3Qgcm91dGVyYm9vdF9keW5wYXJ0ICpyYmRwYXJ0KQoreworCWludCBlcnI7CisJc2l6ZV90IGJ5dGVzX3JlYWQsIHBzaXplOworCXN0cnVjdCB7CisJCWZkdDMyX3QgbWFnaWM7CisJCWZkdDMyX3QgdG90YWxzaXplOworCQlmZHQzMl90IG9mZl9kdF9zdHJ1Y3Q7CisJCWZkdDMyX3Qgb2ZmX2R0X3N0cmluZ3M7CisJCWZkdDMyX3Qgb2ZmX21lbV9yc3ZtYXA7CisJCWZkdDMyX3QgdmVyc2lvbjsKKwkJZmR0MzJfdCBsYXN0X2NvbXBfdmVyc2lvbjsKKwkJZmR0MzJfdCBib290X2NwdWlkX3BoeXM7CisJCWZkdDMyX3Qgc2l6ZV9kdF9zdHJpbmdzOworCQlmZHQzMl90IHNpemVfZHRfc3RydWN0OworCX0gZmR0X2hlYWRlcjsKKworCWVyciA9IG10ZF9yZWFkKG1hc3RlciwgcmJkcGFydC0+b2Zmc2V0LCBzaXplb2YoZmR0X2hlYWRlciksCisJCSAgICAgICAmYnl0ZXNfcmVhZCwgKHU4ICopJmZkdF9oZWFkZXIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAoYnl0ZXNfcmVhZCAhPSBzaXplb2YoZmR0X2hlYWRlcikpCisJCXJldHVybiAtRUlPOworCisJcHNpemUgPSBmZHQzMl90b19jcHUoZmR0X2hlYWRlci50b3RhbHNpemUpOworCWlmICghcHNpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJcmJkcGFydC0+c2l6ZSA9IHBzaXplOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByb3V0ZXJib290X2ZpbmRfZHlucGFydHMoc3RydWN0IG10ZF9pbmZvICptYXN0ZXIpCit7CisJc2l6ZV90IGJ5dGVzX3JlYWQsIG9mZnNldDsKKwlib29sIGFsbGZvdW5kOworCWludCBlcnIsIGk7CisJdTMyIGJ1ZjsKKworCS8qCisJICogRHluYW1pYyBSb3V0ZXJCb290IHBhcnRpdGlvbnMgb2Zmc2V0cyBhcmUgYWxpZ25lZCB0byBSQl9CTE9DS19TSVpFOgorCSAqIHJlYWQgdGhlIHdob2xlIHBhcnRpdGlvbiBhdCBSQl9CTE9DS19TSVpFIGludGVydmFscyB0byBmaW5kIHNpZ3MuCisJICogU2tpcCBwYXJ0aXRpb24gY29udGVudCB3aGVuIHBvc3NpYmxlLgorCSAqLworCW9mZnNldCA9IDA7CisJd2hpbGUgKG9mZnNldCA8IG1hc3Rlci0+c2l6ZSkgeworCQllcnIgPSBtdGRfcmVhZChtYXN0ZXIsIG9mZnNldCwgc2l6ZW9mKGJ1ZiksICZieXRlc19yZWFkLCAodTggKikmYnVmKTsKKwkJaWYgKGVycikgeworCQkJcHJfZXJyKCIlczogbXRkX3JlYWQgZXJyb3Igd2hpbGUgcGFyc2luZyAob2Zmc2V0OiAweCVYKTogJWRcbiIsCisJCQkgICAgICAgbWFzdGVyLT5uYW1lLCBvZmZzZXQsIGVycik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWFsbGZvdW5kID0gdHJ1ZTsKKworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYl9keW5wYXJ0cyk7IGkrKykgeworCQkJaWYgKHJiX2R5bnBhcnRzW2ldLmZvdW5kKQorCQkJCWNvbnRpbnVlOworCisJCQlhbGxmb3VuZCA9IGZhbHNlOworCisJCQlpZiAocmJfZHlucGFydHNbaV0ubWFnaWMgPT0gYnVmKSB7CisJCQkJcmJfZHlucGFydHNbaV0ub2Zmc2V0ID0gb2Zmc2V0OworCisJCQkJaWYgKHJiX2R5bnBhcnRzW2ldLnNpemVfZml4dXApIHsKKwkJCQkJZXJyID0gcmJfZHlucGFydHNbaV0uc2l6ZV9maXh1cChtYXN0ZXIsICZyYl9keW5wYXJ0c1tpXSk7CisJCQkJCWlmIChlcnIpIHsKKwkJCQkJCXByX2VycigiJXM6IHNpemUgZml4dXAgZXJyb3Igd2hpbGUgcGFyc2luZyBcIiVzXCI6ICVkXG4iLAorCQkJCQkJICAgICAgIG1hc3Rlci0+bmFtZSwgcmJfZHlucGFydHNbaV0ubmFtZSwgZXJyKTsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJfQorCisJCQkJcmJfZHlucGFydHNbaV0uZm91bmQgPSB0cnVlOworCisJCQkJLyoKKwkJCQkgKiBtb3ZlIG9mZnNldCB0byBza2lwIHRoZSB3aG9sZSBwYXJ0aXRpb24gb24KKwkJCQkgKiBuZXh0IGl0ZXJhdGlvbiBpZiBzaXplID4gUkJfQkxPQ0tfU0laRS4KKwkJCQkgKi8KKwkJCQlpZiAocmJfZHlucGFydHNbaV0uc2l6ZSA+IFJCX0JMT0NLX1NJWkUpCisJCQkJCW9mZnNldCArPSBBTElHTl9ET1dOKChyYl9keW5wYXJ0c1tpXS5zaXplIC0gUkJfQkxPQ0tfU0laRSksIFJCX0JMT0NLX1NJWkUpOworCisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlvZmZzZXQgKz0gUkJfQkxPQ0tfU0laRTsKKworCQlpZiAoYWxsZm91bmQpCisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcm91dGVyYm9vdF9wYXJ0aXRpb25zX3BhcnNlKHN0cnVjdCBtdGRfaW5mbyAqbWFzdGVyLAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqKnBwYXJ0cywKKwkJCQkgICAgICAgc3RydWN0IG10ZF9wYXJ0X3BhcnNlcl9kYXRhICpkYXRhKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcmJwYXJ0X25vZGUsICpwcDsKKwlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHM7CisJY29uc3QgY2hhciAqcGFydG5hbWU7CisJc2l6ZV90IG1hc3Rlcl9vZnM7CisJaW50IG5wOworCisJLyogUHVsbCBvZl9ub2RlIGZyb20gdGhlIG1hc3RlciBkZXZpY2Ugbm9kZSAqLworCXJicGFydF9ub2RlID0gbXRkX2dldF9vZl9ub2RlKG1hc3Rlcik7CisJaWYgKCFyYnBhcnRfbm9kZSkKKwkJcmV0dXJuIDA7CisKKwkvKiBGaXJzdCBjb3VudCB0aGUgc3Vibm9kZXMgKi8KKwlucCA9IDA7CisJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShyYnBhcnRfbm9kZSwgIHBwKQorCQlucCsrOworCisJaWYgKCFucCkKKwkJcmV0dXJuIDA7CisKKwlwYXJ0cyA9IGtjYWxsb2MobnAsIHNpemVvZigqcGFydHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBhcnRzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIFByZWVtcHRpdmVseSBsb29rIGZvciBrbm93biBwYXJ0cyBpbiBmbGFzaCAqLworCXJvdXRlcmJvb3RfZmluZF9keW5wYXJ0cyhtYXN0ZXIpOworCisJbnAgPSAwOworCW1hc3Rlcl9vZnMgPSAwOworCWZvcl9lYWNoX2NoaWxkX29mX25vZGUocmJwYXJ0X25vZGUsIHBwKSB7CisJCWNvbnN0IF9fYmUzMiAqcmVnLCAqc3o7CisJCXNpemVfdCBvZmZzZXQsIHNpemU7CisJCWludCBpLCBsZW4sIGFfY2VsbHMsIHNfY2VsbHM7CisKKwkJcGFydG5hbWUgPSBvZl9nZXRfcHJvcGVydHkocHAsICJsYWJlbCIsICZsZW4pOworCQkvKiBBbGxvdyBkZXByZWNhdGVkIHVzZSBvZiAibmFtZSIgaW5zdGVhZCBvZiAibGFiZWwiICovCisJCWlmICghcGFydG5hbWUpCisJCQlwYXJ0bmFtZSA9IG9mX2dldF9wcm9wZXJ0eShwcCwgIm5hbWUiLCAmbGVuKTsKKwkJLyogRmFsbGJhY2sgdG8gbm9kZSBuYW1lIHBlciBzcGVjIGlmIGFsbCBlbHNlIGZhaWxzOiBwYXJ0bmFtZSBpcyBhbHdheXMgc2V0ICovCisJCWlmICghcGFydG5hbWUpCisJCQlwYXJ0bmFtZSA9IHBwLT5uYW1lOworCQlwYXJ0c1tucF0ubmFtZSA9IHBhcnRuYW1lOworCisJCXJlZyA9IG9mX2dldF9wcm9wZXJ0eShwcCwgInJlZyIsICZsZW4pOworCQlpZiAocmVnKSB7CisJCQkvKiBGaXhlZCBwYXJ0aXRpb24gKi8KKwkJCWFfY2VsbHMgPSBvZl9uX2FkZHJfY2VsbHMocHApOworCQkJc19jZWxscyA9IG9mX25fc2l6ZV9jZWxscyhwcCk7CisKKwkJCWlmICgobGVuIC8gNCkgIT0gKGFfY2VsbHMgKyBzX2NlbGxzKSkgeworCQkJCXByX2RlYnVnKCIlczogcm91dGVyYm9vdCBwYXJ0aXRpb24gJXBPRiAoJXBPRikgZXJyb3IgcGFyc2luZyByZWcgcHJvcGVydHkuXG4iLAorCQkJCQkgbWFzdGVyLT5uYW1lLCBwcCwgcmJwYXJ0X25vZGUpOworCQkJCWdvdG8gcmJwYXJ0X2ZhaWw7CisJCQl9CisKKwkJCW9mZnNldCA9IG9mX3JlYWRfbnVtYmVyKHJlZywgYV9jZWxscyk7CisJCQlzaXplID0gb2ZfcmVhZF9udW1iZXIocmVnICsgYV9jZWxscywgc19jZWxscyk7CisJCX0gZWxzZSB7CisJCQkvKiBEeW5hbWljIHBhcnRpdGlvbiAqLworCQkJLyogRGVmYXVsdDogcGFydCBzdGFydHMgYXQgY3VycmVudCBvZmZzZXQsIDAgc2l6ZSAqLworCQkJb2Zmc2V0ID0gbWFzdGVyX29mczsKKwkJCXNpemUgPSAwOworCisJCQkvKiBDaGVjayBpZiB3ZWxsLWtub3duIHBhcnRpdGlvbiAqLworCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmJfZHlucGFydHMpOyBpKyspIHsKKwkJCQlpZiAoIXN0cmNtcChwYXJ0bmFtZSwgcmJfZHlucGFydHNbaV0ubmFtZSkgJiYgcmJfZHlucGFydHNbaV0uZm91bmQpIHsKKwkJCQkJb2Zmc2V0ID0gcmJfZHlucGFydHNbaV0ub2Zmc2V0OworCQkJCQlzaXplID0gcmJfZHlucGFydHNbaV0uc2l6ZTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQkvKiBTdGFuZGFsb25lICdzaXplJyBwcm9wZXJ0eT8gT3ZlcnJpZGUgc2l6ZSAqLworCQkJc3ogPSBvZl9nZXRfcHJvcGVydHkocHAsICJzaXplIiwgJmxlbik7CisJCQlpZiAoc3opIHsKKwkJCQlzX2NlbGxzID0gb2Zfbl9zaXplX2NlbGxzKHBwKTsKKwkJCQlpZiAoKGxlbiAvIDQpICE9IHNfY2VsbHMpIHsKKwkJCQkJcHJfZGVidWcoIiVzOiByb3V0ZXJib290IHBhcnRpdGlvbiAlcE9GICglcE9GKSBlcnJvciBwYXJzaW5nIHNpemUgcHJvcGVydHkuXG4iLAorCQkJCQkJIG1hc3Rlci0+bmFtZSwgcHAsIHJicGFydF9ub2RlKTsKKwkJCQkJZ290byByYnBhcnRfZmFpbDsKKwkJCQl9CisKKwkJCQlzaXplID0gb2ZfcmVhZF9udW1iZXIoc3osIHNfY2VsbHMpOworCQkJfQorCQl9CisKKwkJaWYgKG5wID4gMCkgeworCQkJLyogTWlub3Igc2FuaXR5IGNoZWNrIGZvciBvdmVybGFwcyAqLworCQkJaWYgKG9mZnNldCA8IChwYXJ0c1tucC0xXS5vZmZzZXQgKyBwYXJ0c1tucC0xXS5zaXplKSkgeworCQkJCXByX2VycigiJXM6IHJvdXRlcmJvb3QgcGFydGl0aW9uICVwT0YgKCVwT0YpIFwiJXNcIiBvdmVybGFwcyB3aXRoIHByZXZpb3VzIHBhcnRpdGlvbiBcIiVzXCIuXG4iLAorCQkJCSAgICAgICBtYXN0ZXItPm5hbWUsIHBwLCByYnBhcnRfbm9kZSwKKwkJCQkgICAgICAgcGFydG5hbWUsIHBhcnRzW25wLTFdLm5hbWUpOworCQkJCWdvdG8gcmJwYXJ0X2ZhaWw7CisJCQl9CisKKwkJCS8qIEZpeHVwIGVuZCBvZiBwcmV2aW91cyBwYXJ0aXRpb24gaWYgbmVjZXNzYXJ5ICovCisJCQlpZiAoIXBhcnRzW25wLTFdLnNpemUpCisJCQkJcGFydHNbbnAtMV0uc2l6ZSA9IChvZmZzZXQgLSBwYXJ0c1tucC0xXS5vZmZzZXQpOworCQl9CisKKwkJaWYgKChvZmZzZXQgKyBzaXplKSA+IG1hc3Rlci0+c2l6ZSkgeworCQkJcHJfZXJyKCIlczogcm91dGVyYm9vdCBwYXJ0aXRpb24gJXBPRiAoJXBPRikgXCIlc1wiIGV4dGVuZHMgcGFzdCBlbmQgb2Ygc2VnbWVudC5cbiIsCisJCQkgICAgICAgbWFzdGVyLT5uYW1lLCBwcCwgcmJwYXJ0X25vZGUsIHBhcnRuYW1lKTsKKwkJCWdvdG8gcmJwYXJ0X2ZhaWw7CisJCX0KKworCQlwYXJ0c1tucF0ub2Zmc2V0ID0gb2Zmc2V0OworCQlwYXJ0c1tucF0uc2l6ZSA9IHNpemU7CisJCXBhcnRzW25wXS5vZl9ub2RlID0gcHA7CisKKwkJaWYgKG9mX2dldF9wcm9wZXJ0eShwcCwgInJlYWQtb25seSIsICZsZW4pKQorCQkJcGFydHNbbnBdLm1hc2tfZmxhZ3MgfD0gTVREX1dSSVRFQUJMRTsKKworCQlpZiAob2ZfZ2V0X3Byb3BlcnR5KHBwLCAibG9jayIsICZsZW4pKQorCQkJcGFydHNbbnBdLm1hc2tfZmxhZ3MgfD0gTVREX1BPV0VSVVBfTE9DSzsKKworCQkvKiBLZWVwIG1hc3RlciBvZmZzZXQgYWxpZ25lZCB0byBSQl9CTE9DS19TSVpFICovCisJCW1hc3Rlcl9vZnMgPSBBTElHTihvZmZzZXQgKyBzaXplLCBSQl9CTE9DS19TSVpFKTsKKwkJbnArKzsKKwl9CisKKwkqcHBhcnRzID0gcGFydHM7CisJcmV0dXJuIG5wOworCityYnBhcnRfZmFpbDoKKwlwcl9lcnIoIiVzOiBlcnJvciBwYXJzaW5nIHJvdXRlcmJvb3QgcGFydGl0aW9uICVwT0YgKCVwT0YpXG4iLAorCSAgICAgICBtYXN0ZXItPm5hbWUsIHBwLCByYnBhcnRfbm9kZSk7CisJb2Zfbm9kZV9wdXQocHApOworCWtmcmVlKHBhcnRzKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcGFyc2Vfcm91dGVyYm9vdHBhcnRfbWF0Y2hfdGFibGVbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1pa3JvdGlrLHJvdXRlcmJvb3QtcGFydGl0aW9ucyIgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBwYXJzZV9yb3V0ZXJib290cGFydF9tYXRjaF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRfcGFyc2VyIHJvdXRlcmJvb3RwYXJ0X3BhcnNlciA9IHsKKwkucGFyc2VfZm4gPSByb3V0ZXJib290X3BhcnRpdGlvbnNfcGFyc2UsCisJLm5hbWUgPSAicm91dGVyYm9vdHBhcnQiLAorCS5vZl9tYXRjaF90YWJsZSA9IHBhcnNlX3JvdXRlcmJvb3RwYXJ0X21hdGNoX3RhYmxlLAorfTsKK21vZHVsZV9tdGRfcGFydF9wYXJzZXIocm91dGVyYm9vdHBhcnRfcGFyc2VyKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNVEQgcGFydGl0aW9uaW5nIGZvciBSb3V0ZXJCb290Iik7CitNT0RVTEVfQVVUSE9SKCJUaGliYXV0IFZBUkVORSIpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9uZXQvcGh5L2FkbTY5OTYuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9hZG02OTk2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYwMTNmMgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9hZG02OTk2LmMKQEAgLTAsMCArMSwxMjQzIEBACisvKgorICogQURNNjk5NiBzd2l0Y2ggZHJpdmVyCisgKgorICogc3djb25maWcgaW50ZXJmYWNlIGJhc2VkIG9uIGFyODIxNi5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KKyAqIFZMQU4gc3VwcG9ydCBDb3B5cmlnaHQgKGMpIDIwMTAsIDIwMTEgUGV0ZXIgTGViYmluZyA8cGV0ZXJAZGlnaXRhbGJyYWlucy5jb20+CisgKiBDb3B5cmlnaHQgKGMpIDIwMTMgSGF1a2UgTWVocnRlbnMgPGhhdWtlQGhhdWtlLW0uZGU+CisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgTWF0dGkgTGFha3NvIDxtYWxhYWtzb0BlbGlzYW5ldC5maT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYyIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKworLyojZGVmaW5lIERFQlVHIDEqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2FkbTY5OTYtZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9zd2l0Y2guaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlICJhZG02OTk2LmgiCisKK01PRFVMRV9ERVNDUklQVElPTigiSW5maW5lb24gQURNNjk5NiBTd2l0Y2giKTsKK01PRFVMRV9BVVRIT1IoIkZlbGl4IEZpZXRrYXUsIFBldGVyIExlYmJpbmcgPHBldGVyQGRpZ2l0YWxicmFpbnMuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFkbTY5OTZfbW9kZWxfbmFtZVtdID0KK3sKKwlOVUxMLAorCSJBRE02OTk2RkMiLAorCSJBRE02OTk2TSIsCisJIkFETTY5OTZMIgorfTsKKworc3RydWN0IGFkbTY5OTZfbWliX2Rlc2MgeworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisJY29uc3QgY2hhciAqbmFtZTsKK307CisKK3N0cnVjdCBhZG02OTk2X3ByaXYgeworCXN0cnVjdCBzd2l0Y2hfZGV2IGRldjsKKwl2b2lkICpwcml2OworCisJdTggZWVjczsKKwl1OCBlZXNrOworCXU4IGVlZGk7CisKKwllbnVtIGFkbTY5OTZfbW9kZWwgbW9kZWw7CisKKwlib29sIGVuYWJsZV92bGFuOworCWJvb2wgdmxhbl9lbmFibGVkOwkvKiBDdXJyZW50IGhhcmR3YXJlIHN0YXRlICovCisKKyNpZmRlZiBERUJVRworCXUxNiBhZGRyOwkJLyogRGVidWdnaW5nOiByZWdpc3RlciBhZGRyZXNzIHRvIG9wZXJhdGUgb24gKi8KKyNlbmRpZgorCisJdTE2IHB2aWRbQURNX05VTV9QT1JUU107CS8qIFByaW1hcnkgVkxBTiBJRCAqLworCXU4IHRhZ2dlZF9wb3J0czsKKworCXUxNiB2bGFuX2lkW0FETV9OVU1fVkxBTlNdOworCXU4IHZsYW5fdGFibGVbQURNX05VTV9WTEFOU107CS8qIGJpdG1hcCwgMSA9IHBvcnQgaXMgbWVtYmVyICovCisJdTggdmxhbl90YWdnZWRbQURNX05VTV9WTEFOU107CS8qIGJpdG1hcCwgMSA9IHRhZ2dlZCBtZW1iZXIgKi8KKwkKKwlzdHJ1Y3QgbXV0ZXggbWliX2xvY2s7CisJY2hhciBidWZbMjA0OF07CisKKwlzdHJ1Y3QgbXV0ZXggcmVnX211dGV4OworCisJLyogdXNlIGFic3RyYWN0aW9uIGZvciByZWdvcHMsIHdlIHdhbnQgdG8gYWRkIGdwaW8gc3VwcG9ydCBpbiB0aGUgZnV0dXJlICovCisJdTE2ICgqcmVhZCkoc3RydWN0IGFkbTY5OTZfcHJpdiAqcHJpdiwgZW51bSBhZG1yZWcgcmVnKTsKKwl2b2lkICgqd3JpdGUpKHN0cnVjdCBhZG02OTk2X3ByaXYgKnByaXYsIGVudW0gYWRtcmVnIHJlZywgdTE2IHZhbCk7Cit9OworCisjZGVmaW5lIHRvX2FkbShfZGV2KSBjb250YWluZXJfb2YoX2Rldiwgc3RydWN0IGFkbTY5OTZfcHJpdiwgZGV2KQorI2RlZmluZSBwaHlfdG9fYWRtKF9waHkpICgoc3RydWN0IGFkbTY5OTZfcHJpdiAqKSAoX3BoeSktPnByaXYpCisKKyNkZWZpbmUgTUlCX0RFU0MoX28sIF9uKQlcCisJewkJCVwKKwkJLm9mZnNldCA9IChfbyksCVwKKwkJLm5hbWUgPSAoX24pLAlcCisJfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGFkbTY5OTZfbWliX2Rlc2MgYWRtNjk5Nl9taWJzW10gPSB7CisJTUlCX0RFU0MoQURNX0NMMCwgIlJ4UGFja2V0IiksCisJTUlCX0RFU0MoQURNX0NMNiwgIlJ4Qnl0ZSIpLAorCU1JQl9ERVNDKEFETV9DTDEyLCAiVHhQYWNrZXQiKSwKKwlNSUJfREVTQyhBRE1fQ0wxOCwgIlR4Qnl0ZSIpLAorCU1JQl9ERVNDKEFETV9DTDI0LCAiQ29sbGlzaW9uIiksCisJTUlCX0RFU0MoQURNX0NMMzAsICJFcnJvciIpLAorfTsKKworI2RlZmluZSBBRE02OTk2X01JQl9SWEJfSUQJMQorI2RlZmluZSBBRE02OTk2X01JQl9UWEJfSUQJMworCitzdGF0aWMgaW5saW5lIHUxNgorcjE2KHN0cnVjdCBhZG02OTk2X3ByaXYgKnByaXYsIGVudW0gYWRtcmVnIHJlZykKK3sKKwlyZXR1cm4gcHJpdi0+cmVhZChwcml2LCByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3cxNihzdHJ1Y3QgYWRtNjk5Nl9wcml2ICpwcml2LCBlbnVtIGFkbXJlZyByZWcsIHUxNiB2YWwpCit7CisJcHJpdi0+d3JpdGUocHJpdiwgcmVnLCB2YWwpOworfQorCisvKiBNaW5pbXVtIHRpbWluZyBjb25zdGFudHMgKi8KKyNkZWZpbmUgRUVDS19FREdFX1RJTUUgIDMgICAvKiAzdXMgLSBtYXgoYWRtIDIuNXVzLCA5M2MgMXVzKSAqLworI2RlZmluZSBFRURJX1NFVFVQX1RJTUUgMSAgIC8qIDF1cyAtIG1heChhZG0gMTBucywgOTNjIDQwMG5zKSAqLworI2RlZmluZSBFRUNTX1NFVFVQX1RJTUUgMSAgIC8qIDF1cyAtIG1heChhZG0gbm8sIDkzYyAyMDBucykgKi8KKworc3RhdGljIHZvaWQgYWRtNjk5Nl9ncGlvX3dyaXRlKHN0cnVjdCBhZG02OTk2X3ByaXYgKnByaXYsIGludCBjcywgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgYml0cykKK3sKKwlpbnQgaSwgbGVuID0gKGJpdHMgKyA3KSAvIDg7CisJdTggbWFzazsKKworCWdwaW9fc2V0X3ZhbHVlKHByaXYtPmVlY3MsIGNzKTsKKwl1ZGVsYXkoRUVDS19FREdFX1RJTUUpOworCisJLyogQnl0ZSBhc3NlbWJsZSBmcm9tIE1TQiB0byBMU0IgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJLyogQml0IGJhbmcgZnJvbSBNU0IgdG8gTFNCICovCisJCWZvciAobWFzayA9IDB4ODA7IG1hc2sgJiYgYml0cyA+IDA7IG1hc2sgPj49IDEsIGJpdHMgLS0pIHsKKwkJCS8qIENsb2NrIGxvdyAqLworCQkJZ3Bpb19zZXRfdmFsdWUocHJpdi0+ZWVzaywgMCk7CisJCQl1ZGVsYXkoRUVDS19FREdFX1RJTUUpOworCisJCQkvKiBPdXRwdXQgb24gcmlzaW5nIGVkZ2UgKi8KKwkJCWdwaW9fc2V0X3ZhbHVlKHByaXYtPmVlZGksIChtYXNrICYgYnVmW2ldKSk7CisJCQl1ZGVsYXkoRUVESV9TRVRVUF9USU1FKTsKKworCQkJLyogQ2xvY2sgaGlnaCAqLworCQkJZ3Bpb19zZXRfdmFsdWUocHJpdi0+ZWVzaywgMSk7CisJCQl1ZGVsYXkoRUVDS19FREdFX1RJTUUpOworCQl9CisJfQorCisJLyogQ2xvY2sgbG93ICovCisJZ3Bpb19zZXRfdmFsdWUocHJpdi0+ZWVzaywgMCk7CisJdWRlbGF5KEVFQ0tfRURHRV9USU1FKTsKKworCWlmIChjcykKKwkJZ3Bpb19zZXRfdmFsdWUocHJpdi0+ZWVjcywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGFkbTY5OTZfZ3Bpb19yZWFkKHN0cnVjdCBhZG02OTk2X3ByaXYgKnByaXYsIGludCBjcywgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgYml0cykKK3sKKwlpbnQgaSwgbGVuID0gKGJpdHMgKyA3KSAvIDg7CisJdTggbWFzazsKKworCWdwaW9fc2V0X3ZhbHVlKHByaXYtPmVlY3MsIGNzKTsKKwl1ZGVsYXkoRUVDS19FREdFX1RJTUUpOworCisJLyogQnl0ZSBhc3NlbWJsZSBmcm9tIE1TQiB0byBMU0IgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJdTggYnl0ZTsKKworCQkvKiBCaXQgYmFuZyBmcm9tIE1TQiB0byBMU0IgKi8KKwkJZm9yIChtYXNrID0gMHg4MCwgYnl0ZSA9IDA7IG1hc2sgJiYgYml0cyA+IDA7IG1hc2sgPj49IDEsIGJpdHMgLS0pIHsKKwkJCXU4IGdwOworCisJCQkvKiBDbG9jayBsb3cgKi8KKwkJCWdwaW9fc2V0X3ZhbHVlKHByaXYtPmVlc2ssIDApOworCQkJdWRlbGF5KEVFQ0tfRURHRV9USU1FKTsKKworCQkJLyogSW5wdXQgb24gcmlzaW5nIGVkZ2UgKi8KKwkJCWdwID0gZ3Bpb19nZXRfdmFsdWUocHJpdi0+ZWVkaSk7CisJCQlpZiAoZ3ApCisJCQkJYnl0ZSB8PSBtYXNrOworCisJCQkvKiBDbG9jayBoaWdoICovCisJCQlncGlvX3NldF92YWx1ZShwcml2LT5lZXNrLCAxKTsKKwkJCXVkZWxheShFRUNLX0VER0VfVElNRSk7CisJCX0KKworCQkqYnVmKysgPSBieXRlOworCX0KKworCS8qIENsb2NrIGxvdyAqLworCWdwaW9fc2V0X3ZhbHVlKHByaXYtPmVlc2ssIDApOworCXVkZWxheShFRUNLX0VER0VfVElNRSk7CisKKwlpZiAoY3MpCisJCWdwaW9fc2V0X3ZhbHVlKHByaXYtPmVlY3MsIDApOworfQorCisvKiBBZHZhbmNlIGNsb2NrKHMpICovCitzdGF0aWMgdm9pZCBhZG02OTk2X2dwaW9fYWRjbGsoc3RydWN0IGFkbTY5OTZfcHJpdiAqcHJpdiwgaW50IGNsb2NrcykKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgY2xvY2tzOyBpKyspIHsKKwkJLyogQ2xvY2sgaGlnaCAqLworCQlncGlvX3NldF92YWx1ZShwcml2LT5lZXNrLCAxKTsKKwkJdWRlbGF5KEVFQ0tfRURHRV9USU1FKTsKKworCQkvKiBDbG9jayBsb3cgKi8KKwkJZ3Bpb19zZXRfdmFsdWUocHJpdi0+ZWVzaywgMCk7CisJCXVkZWxheShFRUNLX0VER0VfVElNRSk7CisJfQorfQorCitzdGF0aWMgdTE2CithZG02OTk2X3JlYWRfZ3Bpb19yZWcoc3RydWN0IGFkbTY5OTZfcHJpdiAqcHJpdiwgZW51bSBhZG1yZWcgcmVnKQoreworCS8qIGNtZDogMDEgMTAgVCBERCBSIFJSUlJSUiAqLworCXU4IGJpdHNbNl0gPSB7CisJCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCisJCSgweDA2IDw8IDQpIHwgKCgwICYgMHgwMSkgPDwgMyB8IChyZWcmNjQpPj42KSwKKwkJKChyZWcmNjMpPDwyKQorCX07CisKKwl1OCByYml0c1s0XTsKKworCS8qIEVuYWJsZSBHUElPIG91dHB1dHMgd2l0aCBhbGwgcGlucyB0byAwICovCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHByaXYtPmVlY3MsIDApOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChwcml2LT5lZXNrLCAwKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQocHJpdi0+ZWVkaSwgMCk7CisKKwlhZG02OTk2X2dwaW9fd3JpdGUocHJpdiwgMCwgYml0cywgNDYpOworCWdwaW9fZGlyZWN0aW9uX2lucHV0KHByaXYtPmVlZGkpOworCWFkbTY5OTZfZ3Bpb19hZGNsayhwcml2LCAyKTsKKwlhZG02OTk2X2dwaW9fcmVhZChwcml2LCAwLCByYml0cywgMzIpOworCisJLyogRXh0cmEgY2xvY2socykgcmVxdWlyZWQgcGVyIGRhdGFzaGVldCAqLworCWFkbTY5OTZfZ3Bpb19hZGNsayhwcml2LCAyKTsKKworCS8qIERpc2FibGUgR1BJTyBvdXRwdXRzICovCisJZ3Bpb19kaXJlY3Rpb25faW5wdXQocHJpdi0+ZWVjcyk7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQocHJpdi0+ZWVzayk7CisKKwkgLyogRUVQUk9NIGhhcyAxNi1iaXQgcmVnaXN0ZXJzLCBidXQgcHVtcHMgb3V0IHR3byByZWdpc3RlcnMgaW4gb25lIHJlcXVlc3QgKi8KKwlyZXR1cm4gKHJlZyAmIDB4MDEgPyAgKHJiaXRzWzBdPDw4KSB8IHJiaXRzWzFdIDogKHJiaXRzWzJdPDw4KSB8IChyYml0c1szXSkpOworfQorCisvKiBXcml0ZSBjaGlwIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKy8qIEZvbGxvdyA5M2M2NiB0aW1pbmcgYW5kIGNoaXAncyBtaW4gRUVQUk9NIHRpbWluZyByZXF1aXJlbWVudCAqLworc3RhdGljIHZvaWQKK2FkbTY5OTZfd3JpdGVfZ3Bpb19yZWcoc3RydWN0IGFkbTY5OTZfcHJpdiAqcHJpdiwgZW51bSBhZG1yZWcgcmVnLCB1MTYgdmFsKQoreworCS8qIGNtZCgyN2JpdHMpOiBzYigxKSArIG9wYygwMSkgKyBhZGRyKGJiYmJiYmJiKSArIGRhdGEoYmJiYmJiYmJiYmJiYmJiYikgKi8KKwl1OCBiaXRzWzRdID0geworCQkoMHgwNSA8PCA1KSB8IChyZWcgPj4gMyksCisJCShyZWcgPDwgNSkgfCAodTgpKHZhbCA+PiAxMSksCisJCSh1OCkodmFsID4+IDMpLAorCQkodTgpKHZhbCA8PCA1KQorCX07CisKKwkvKiBFbmFibGUgR1BJTyBvdXRwdXRzIHdpdGggYWxsIHBpbnMgdG8gMCAqLworCWdwaW9fZGlyZWN0aW9uX291dHB1dChwcml2LT5lZWNzLCAwKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQocHJpdi0+ZWVzaywgMCk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHByaXYtPmVlZGksIDApOworCisJLyogV3JpdGUgY21kLiBUb3RhbCAyNyBiaXRzICovCisJYWRtNjk5Nl9ncGlvX3dyaXRlKHByaXYsIDEsIGJpdHMsIDI3KTsKKworCS8qIEV4dHJhIGNsb2NrKHMpIHJlcXVpcmVkIHBlciBkYXRhc2hlZXQgKi8KKwlhZG02OTk2X2dwaW9fYWRjbGsocHJpdiwgMik7CisKKwkvKiBEaXNhYmxlIEdQSU8gb3V0cHV0cyAqLworCWdwaW9fZGlyZWN0aW9uX2lucHV0KHByaXYtPmVlY3MpOworCWdwaW9fZGlyZWN0aW9uX2lucHV0KHByaXYtPmVlc2spOworCWdwaW9fZGlyZWN0aW9uX2lucHV0KHByaXYtPmVlZGkpOworfQorCitzdGF0aWMgdTE2CithZG02OTk2X3JlYWRfbWlpX3JlZyhzdHJ1Y3QgYWRtNjk5Nl9wcml2ICpwcml2LCBlbnVtIGFkbXJlZyByZWcpCit7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHByaXYtPnByaXY7CisJc3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi0+bWRpby5idXM7CisKKwlyZXR1cm4gYnVzLT5yZWFkKGJ1cywgUEhZQUREUihyZWcpKTsKK30KKworc3RhdGljIHZvaWQKK2FkbTY5OTZfd3JpdGVfbWlpX3JlZyhzdHJ1Y3QgYWRtNjk5Nl9wcml2ICpwcml2LCBlbnVtIGFkbXJlZyByZWcsIHUxNiB2YWwpCit7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHByaXYtPnByaXY7CisJc3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi0+bWRpby5idXM7CisKKwlidXMtPndyaXRlKGJ1cywgUEhZQUREUihyZWcpLCB2YWwpOworfQorCitzdGF0aWMgaW50CithZG02OTk2X3NldF9lbmFibGVfdmxhbihzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQlzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBhZG02OTk2X3ByaXYgKnByaXYgPSB0b19hZG0oZGV2KTsKKworCWlmICh2YWwtPnZhbHVlLmkgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByaXYtPmVuYWJsZV92bGFuID0gdmFsLT52YWx1ZS5pOworCisJcmV0dXJuIDA7Cit9OworCitzdGF0aWMgaW50CithZG02OTk2X2dldF9lbmFibGVfdmxhbihzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQlzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBhZG02OTk2X3ByaXYgKnByaXYgPSB0b19hZG0oZGV2KTsKKworCXZhbC0+dmFsdWUuaSA9IHByaXYtPmVuYWJsZV92bGFuOworCisJcmV0dXJuIDA7Cit9OworCisjaWZkZWYgREVCVUcKKworc3RhdGljIGludAorYWRtNjk5Nl9zZXRfYWRkcihzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCSBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBhZG02OTk2X3ByaXYgKnByaXYgPSB0b19hZG0oZGV2KTsKKworCWlmICh2YWwtPnZhbHVlLmkgPiAxMDIzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByaXYtPmFkZHIgPSB2YWwtPnZhbHVlLmk7CisKKwlyZXR1cm4gMDsKK307CisKK3N0YXRpYyBpbnQKK2FkbTY5OTZfZ2V0X2FkZHIoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgYWRtNjk5Nl9wcml2ICpwcml2ID0gdG9fYWRtKGRldik7CisKKwl2YWwtPnZhbHVlLmkgPSBwcml2LT5hZGRyOworCisJcmV0dXJuIDA7Cit9OworCitzdGF0aWMgaW50CithZG02OTk2X3NldF9kYXRhKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IGFkbTY5OTZfcHJpdiAqcHJpdiA9IHRvX2FkbShkZXYpOworCisJaWYgKHZhbC0+dmFsdWUuaSA+IDY1NTM1KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXcxNihwcml2LCBwcml2LT5hZGRyLCB2YWwtPnZhbHVlLmkpOworCisJcmV0dXJuIDA7Cit9OworCitzdGF0aWMgaW50CithZG02OTk2X2dldF9kYXRhKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IGFkbTY5OTZfcHJpdiAqcHJpdiA9IHRvX2FkbShkZXYpOworCisJdmFsLT52YWx1ZS5pID0gcjE2KHByaXYsIHByaXYtPmFkZHIpOworCisJcmV0dXJuIDA7Cit9OworCisjZW5kaWYgLyogZGVmIERFQlVHICovCisKK3N0YXRpYyBpbnQKK2FkbTY5OTZfc2V0X3B2aWQoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgaW50IHBvcnQsIGludCB2bGFuKQoreworCXN0cnVjdCBhZG02OTk2X3ByaXYgKnByaXYgPSB0b19hZG0oZGV2KTsKKworCXByX2RldmVsKCJzZXRfcHZpZCBwb3J0ICVkIHZsYW4gJWRcbiIsIHBvcnQsIHZsYW4pOworCisJaWYgKHZsYW4gPiBBRE1fVkxBTl9NQVhfSUQpCisJCXJldHVybiAtRUlOVkFMOworCisJcHJpdi0+cHZpZFtwb3J0XSA9IHZsYW47CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYWRtNjk5Nl9nZXRfcHZpZChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBpbnQgcG9ydCwgaW50ICp2bGFuKQoreworCXN0cnVjdCBhZG02OTk2X3ByaXYgKnByaXYgPSB0b19hZG0oZGV2KTsKKworCXByX2RldmVsKCJnZXRfcHZpZCBwb3J0ICVkXG4iLCBwb3J0KTsKKwkqdmxhbiA9IHByaXYtPnB2aWRbcG9ydF07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYWRtNjk5Nl9zZXRfdmlkKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgYWRtNjk5Nl9wcml2ICpwcml2ID0gdG9fYWRtKGRldik7CisKKwlwcl9kZXZlbCgic2V0X3ZpZCBwb3J0ICVkIHZpZCAlZFxuIiwgdmFsLT5wb3J0X3ZsYW4sIHZhbC0+dmFsdWUuaSk7CisKKwlpZiAodmFsLT52YWx1ZS5pID4gQURNX1ZMQU5fTUFYX0lEKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByaXYtPnZsYW5faWRbdmFsLT5wb3J0X3ZsYW5dID0gdmFsLT52YWx1ZS5pOworCisJcmV0dXJuIDA7Cit9OworCitzdGF0aWMgaW50CithZG02OTk2X2dldF92aWQoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQlzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBhZG02OTk2X3ByaXYgKnByaXYgPSB0b19hZG0oZGV2KTsKKworCXByX2RldmVsKCJnZXRfdmlkIHBvcnQgJWRcbiIsIHZhbC0+cG9ydF92bGFuKTsKKworCXZhbC0+dmFsdWUuaSA9IHByaXYtPnZsYW5faWRbdmFsLT5wb3J0X3ZsYW5dOworCisJcmV0dXJuIDA7Cit9OworCitzdGF0aWMgaW50CithZG02OTk2X2dldF9wb3J0cyhzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBhZG02OTk2X3ByaXYgKnByaXYgPSB0b19hZG0oZGV2KTsKKwl1OCBwb3J0cyA9IHByaXYtPnZsYW5fdGFibGVbdmFsLT5wb3J0X3ZsYW5dOworCXU4IHRhZ2dlZCA9IHByaXYtPnZsYW5fdGFnZ2VkW3ZhbC0+cG9ydF92bGFuXTsKKwlpbnQgaTsKKworCXByX2RldmVsKCJnZXRfcG9ydHMgcG9ydF92bGFuICVkXG4iLCB2YWwtPnBvcnRfdmxhbik7CisKKwl2YWwtPmxlbiA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgQURNX05VTV9QT1JUUzsgaSsrKSB7CisJCXN0cnVjdCBzd2l0Y2hfcG9ydCAqcDsKKworCQlpZiAoIShwb3J0cyAmICgxIDw8IGkpKSkKKwkJCWNvbnRpbnVlOworCisJCXAgPSAmdmFsLT52YWx1ZS5wb3J0c1t2YWwtPmxlbisrXTsKKwkJcC0+aWQgPSBpOworCQlpZiAodGFnZ2VkICYgKDEgPDwgaSkpCisJCQlwLT5mbGFncyA9ICgxIDw8IFNXSVRDSF9QT1JUX0ZMQUdfVEFHR0VEKTsKKwkJZWxzZQorCQkJcC0+ZmxhZ3MgPSAwOworCX0KKworCXJldHVybiAwOworfTsKKworc3RhdGljIGludAorYWRtNjk5Nl9zZXRfcG9ydHMoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgYWRtNjk5Nl9wcml2ICpwcml2ID0gdG9fYWRtKGRldik7CisJdTggKnBvcnRzID0gJnByaXYtPnZsYW5fdGFibGVbdmFsLT5wb3J0X3ZsYW5dOworCXU4ICp0YWdnZWQgPSAmcHJpdi0+dmxhbl90YWdnZWRbdmFsLT5wb3J0X3ZsYW5dOworCWludCBpOworCisJcHJfZGV2ZWwoInNldF9wb3J0cyBwb3J0X3ZsYW4gJWQgcG9ydHMiLCB2YWwtPnBvcnRfdmxhbik7CisKKwkqcG9ydHMgPSAwOworCSp0YWdnZWQgPSAwOworCisJZm9yIChpID0gMDsgaSA8IHZhbC0+bGVuOyBpKyspIHsKKwkJc3RydWN0IHN3aXRjaF9wb3J0ICpwID0gJnZhbC0+dmFsdWUucG9ydHNbaV07CisKKyNpZmRlZiBERUJVRworCQlwcl9jb250KCIgJWQlcyIsIHAtPmlkLAorCQkgICAgICAgKChwLT5mbGFncyAmICgxIDw8IFNXSVRDSF9QT1JUX0ZMQUdfVEFHR0VEKSkgPyAiVCIgOgorCQkJIiIpKTsKKyNlbmRpZgorCisJCWlmIChwLT5mbGFncyAmICgxIDw8IFNXSVRDSF9QT1JUX0ZMQUdfVEFHR0VEKSkgeworCQkJKnRhZ2dlZCB8PSAoMSA8PCBwLT5pZCk7CisJCQlwcml2LT50YWdnZWRfcG9ydHMgfD0gKDEgPDwgcC0+aWQpOworCQl9CisKKwkJKnBvcnRzIHw9ICgxIDw8IHAtPmlkKTsKKwl9CisKKyNpZmRlZiBERUJVRworCXByX2NvbnQoIlxuIik7CisjZW5kaWYKKworCXJldHVybiAwOworfTsKKworLyoKKyAqIFByZWNvbmRpdGlvbjogcmVnX211dGV4IG11c3QgYmUgaGVsZAorICovCitzdGF0aWMgdm9pZAorYWRtNjk5Nl9lbmFibGVfdmxhbihzdHJ1Y3QgYWRtNjk5Nl9wcml2ICpwcml2KQoreworCXUxNiByZWc7CisKKwlyZWcgPSByMTYocHJpdiwgQURNX09UQkVfUDJfUFZJRCk7CisJcmVnICY9IH4oQURNX09UQkVfTUFTSyk7CisJdzE2KHByaXYsIEFETV9PVEJFX1AyX1BWSUQsIHJlZyk7CisJcmVnID0gcjE2KHByaXYsIEFETV9JRk5URSk7CisJcmVnICY9IH4oQURNX0lGTlRFX01BU0spOworCXcxNihwcml2LCBBRE1fSUZOVEUsIHJlZyk7CisJcmVnID0gcjE2KHByaXYsIEFETV9WSURfQ0hFQ0spOworCXJlZyB8PSBBRE1fVklEX0NIRUNLX01BU0s7CisJdzE2KHByaXYsIEFETV9WSURfQ0hFQ0ssIHJlZyk7CisJcmVnID0gcjE2KHByaXYsIEFETV9TWVNDMCk7CisJcmVnIHw9IEFETV9OVFRFOworCXJlZyAmPSB+KEFETV9SVklEMSk7CisJdzE2KHByaXYsIEFETV9TWVNDMCwgcmVnKTsKKwlyZWcgPSByMTYocHJpdiwgQURNX1NZU0MzKTsKKwlyZWcgfD0gQURNX1RCVjsKKwl3MTYocHJpdiwgQURNX1NZU0MzLCByZWcpOworfQorCitzdGF0aWMgdm9pZAorYWRtNjk5Nl9lbmFibGVfdmxhbl82OTk2bChzdHJ1Y3QgYWRtNjk5Nl9wcml2ICpwcml2KQoreworCXUxNiByZWc7CisKKwlyZWcgPSByMTYocHJpdiwgQURNX1NZU0MzKTsKKwlyZWcgfD0gQURNX1RCVjsKKwlyZWcgfD0gQURNX01BQ19DTE9ORTsKKwl3MTYocHJpdiwgQURNX1NZU0MzLCByZWcpOworfQorCisvKgorICogRGlzYWJsZSBWTEFOcworICoKKyAqIFNldHMgVkxBTiBtYXBwaW5nIGZvciBwb3J0LWJhc2VkIFZMQU4gd2l0aCBhbGwgcG9ydHMgY29ubmVjdGVkIHRvCisgKiBlYWNob3RoZXIgKHRoaXMgaXMgYWxzbyB0aGUgcG93ZXItb24gZGVmYXVsdCkuCisgKgorICogUHJlY29uZGl0aW9uOiByZWdfbXV0ZXggbXVzdCBiZSBoZWxkCisgKi8KK3N0YXRpYyB2b2lkCithZG02OTk2X2Rpc2FibGVfdmxhbihzdHJ1Y3QgYWRtNjk5Nl9wcml2ICpwcml2KQoreworCXUxNiByZWc7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQURNX05VTV9WTEFOUzsgaSsrKSB7CisJCXJlZyA9IEFETV9WTEFOX0ZJTFRfTUVNQkVSX01BU0s7CisJCXcxNihwcml2LCBBRE1fVkxBTl9GSUxUX0woaSksIHJlZyk7CisJCXJlZyA9IEFETV9WTEFOX0ZJTFRfVkFMSUQgfCBBRE1fVkxBTl9GSUxUX1ZJRCgxKTsKKwkJdzE2KHByaXYsIEFETV9WTEFOX0ZJTFRfSChpKSwgcmVnKTsKKwl9CisKKwlyZWcgPSByMTYocHJpdiwgQURNX09UQkVfUDJfUFZJRCk7CisJcmVnIHw9IEFETV9PVEJFX01BU0s7CisJdzE2KHByaXYsIEFETV9PVEJFX1AyX1BWSUQsIHJlZyk7CisJcmVnID0gcjE2KHByaXYsIEFETV9JRk5URSk7CisJcmVnIHw9IEFETV9JRk5URV9NQVNLOworCXcxNihwcml2LCBBRE1fSUZOVEUsIHJlZyk7CisJcmVnID0gcjE2KHByaXYsIEFETV9WSURfQ0hFQ0spOworCXJlZyAmPSB+KEFETV9WSURfQ0hFQ0tfTUFTSyk7CisJdzE2KHByaXYsIEFETV9WSURfQ0hFQ0ssIHJlZyk7CisJcmVnID0gcjE2KHByaXYsIEFETV9TWVNDMCk7CisJcmVnICY9IH4oQURNX05UVEUpOworCXJlZyB8PSBBRE1fUlZJRDE7CisJdzE2KHByaXYsIEFETV9TWVNDMCwgcmVnKTsKKwlyZWcgPSByMTYocHJpdiwgQURNX1NZU0MzKTsKKwlyZWcgJj0gfihBRE1fVEJWKTsKKwl3MTYocHJpdiwgQURNX1NZU0MzLCByZWcpOworfQorCisvKgorICogRGlzYWJsZSBWTEFOcworICoKKyAqIFNldHMgVkxBTiBtYXBwaW5nIGZvciBwb3J0LWJhc2VkIFZMQU4gd2l0aCBhbGwgcG9ydHMgY29ubmVjdGVkIHRvCisgKiBlYWNob3RoZXIgKHRoaXMgaXMgYWxzbyB0aGUgcG93ZXItb24gZGVmYXVsdCkuCisgKgorICogUHJlY29uZGl0aW9uOiByZWdfbXV0ZXggbXVzdCBiZSBoZWxkCisgKi8KK3N0YXRpYyB2b2lkCithZG02OTk2X2Rpc2FibGVfdmxhbl82OTk2bChzdHJ1Y3QgYWRtNjk5Nl9wcml2ICpwcml2KQoreworCXUxNiByZWc7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQURNX05VTV9WTEFOUzsgaSsrKSB7CisJCXcxNihwcml2LCBBRE1fVkxBTl9NQVAoaSksIDApOworCX0KKworCXJlZyA9IHIxNihwcml2LCBBRE1fU1lTQzMpOworCXJlZyAmPSB+KEFETV9UQlYpOworCXJlZyAmPSB+KEFETV9NQUNfQ0xPTkUpOworCXcxNihwcml2LCBBRE1fU1lTQzMsIHJlZyk7Cit9CisKKy8qCisgKiBQcmVjb25kaXRpb246IHJlZ19tdXRleCBtdXN0IGJlIGhlbGQKKyAqLworc3RhdGljIHZvaWQKK2FkbTY5OTZfYXBwbHlfcG9ydF9wdmlkcyhzdHJ1Y3QgYWRtNjk5Nl9wcml2ICpwcml2KQoreworCXUxNiByZWc7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQURNX05VTV9QT1JUUzsgaSsrKSB7CisJCXJlZyA9IHIxNihwcml2LCBhZG1fcG9ydGNmZ1tpXSk7CisJCXJlZyAmPSB+KEFETV9QT1JUQ0ZHX1BWSURfTUFTSyk7CisJCXJlZyB8PSBBRE1fUE9SVENGR19QVklEKHByaXYtPnB2aWRbaV0pOworCQlpZiAocHJpdi0+bW9kZWwgPT0gQURNNjk5NkwpIHsKKwkJCWlmIChwcml2LT50YWdnZWRfcG9ydHMgJiAoMSA8PCBpKSkKKwkJCQlyZWcgfD0gKDEgPDwgNCk7CisJCQllbHNlCisJCQkJcmVnICY9IH4oMSA8PCA0KTsKKwkJfQorCQl3MTYocHJpdiwgYWRtX3BvcnRjZmdbaV0sIHJlZyk7CisJfQorCisJdzE2KHByaXYsIEFETV9QMF9QVklELCBBRE1fUDBfUFZJRF9WQUwocHJpdi0+cHZpZFswXSkpOworCXcxNihwcml2LCBBRE1fUDFfUFZJRCwgQURNX1AxX1BWSURfVkFMKHByaXYtPnB2aWRbMV0pKTsKKwlyZWcgPSByMTYocHJpdiwgQURNX09UQkVfUDJfUFZJRCk7CisJcmVnICY9IH4oQURNX1AyX1BWSURfTUFTSyk7CisJcmVnIHw9IEFETV9QMl9QVklEX1ZBTChwcml2LT5wdmlkWzJdKTsKKwl3MTYocHJpdiwgQURNX09UQkVfUDJfUFZJRCwgcmVnKTsKKwlyZWcgPSBBRE1fUDNfUFZJRF9WQUwocHJpdi0+cHZpZFszXSk7CisJcmVnIHw9IEFETV9QNF9QVklEX1ZBTChwcml2LT5wdmlkWzRdKTsKKwl3MTYocHJpdiwgQURNX1AzX1A0X1BWSUQsIHJlZyk7CisJcmVnID0gcjE2KHByaXYsIEFETV9QNV9QVklEKTsKKwlyZWcgJj0gfihBRE1fUDJfUFZJRF9NQVNLKTsKKwlyZWcgfD0gQURNX1A1X1BWSURfVkFMKHByaXYtPnB2aWRbNV0pOworCXcxNihwcml2LCBBRE1fUDVfUFZJRCwgcmVnKTsKK30KKworLyoKKyAqIFByZWNvbmRpdGlvbjogcmVnX211dGV4IG11c3QgYmUgaGVsZAorICovCitzdGF0aWMgdm9pZAorYWRtNjk5Nl9hcHBseV92bGFuX2ZpbHRlcnMoc3RydWN0IGFkbTY5OTZfcHJpdiAqcHJpdikKK3sKKwl1OCBwb3J0cywgdGFnZ2VkOworCXUxNiB2aWQsIHJlZzsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBRE1fTlVNX1ZMQU5TOyBpKyspIHsKKwkJdmlkID0gcHJpdi0+dmxhbl9pZFtpXTsKKwkJcG9ydHMgPSBwcml2LT52bGFuX3RhYmxlW2ldOworCQl0YWdnZWQgPSBwcml2LT52bGFuX3RhZ2dlZFtpXTsKKworCQlpZiAocG9ydHMgPT0gMCkgeworCQkJLyogRGlzYWJsZSBWTEFOIGVudHJ5ICovCisJCQl3MTYocHJpdiwgQURNX1ZMQU5fRklMVF9IKGkpLCAwKTsKKwkJCXcxNihwcml2LCBBRE1fVkxBTl9GSUxUX0woaSksIDApOworCQkJY29udGludWU7CisJCX0KKworCQlyZWcgPSBBRE1fVkxBTl9GSUxUX01FTUJFUihwb3J0cyk7CisJCXJlZyB8PSBBRE1fVkxBTl9GSUxUX1RBR0dFRCh0YWdnZWQpOworCQl3MTYocHJpdiwgQURNX1ZMQU5fRklMVF9MKGkpLCByZWcpOworCQlyZWcgPSBBRE1fVkxBTl9GSUxUX1ZBTElEIHwgQURNX1ZMQU5fRklMVF9WSUQodmlkKTsKKwkJdzE2KHByaXYsIEFETV9WTEFOX0ZJTFRfSChpKSwgcmVnKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCithZG02OTk2X2FwcGx5X3ZsYW5fZmlsdGVyc182OTk2bChzdHJ1Y3QgYWRtNjk5Nl9wcml2ICpwcml2KQoreworCXU4IHBvcnRzOworCXUxNiByZWc7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQURNX05VTV9WTEFOUzsgaSsrKSB7CisJCXBvcnRzID0gcHJpdi0+dmxhbl90YWJsZVtpXTsKKworCQlpZiAocG9ydHMgPT0gMCkgeworCQkJLyogRGlzYWJsZSBWTEFOIGVudHJ5ICovCisJCQl3MTYocHJpdiwgQURNX1ZMQU5fTUFQKGkpLCAwKTsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJcmVnID0gQURNX1ZMQU5fRklMVChwb3J0cyk7CisJCQl3MTYocHJpdiwgQURNX1ZMQU5fTUFQKGkpLCByZWcpOworCQl9CisJfQorfQorCitzdGF0aWMgaW50CithZG02OTk2X2h3X2FwcGx5KHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYpCit7CisJc3RydWN0IGFkbTY5OTZfcHJpdiAqcHJpdiA9IHRvX2FkbShkZXYpOworCisJcHJfZGV2ZWwoImh3X2FwcGx5XG4iKTsKKworCW11dGV4X2xvY2soJnByaXYtPnJlZ19tdXRleCk7CisKKwlpZiAoIXByaXYtPmVuYWJsZV92bGFuKSB7CisJCWlmIChwcml2LT52bGFuX2VuYWJsZWQpIHsKKwkJCWlmIChwcml2LT5tb2RlbCA9PSBBRE02OTk2TCkKKwkJCQlhZG02OTk2X2Rpc2FibGVfdmxhbl82OTk2bChwcml2KTsKKwkJCWVsc2UKKwkJCQlhZG02OTk2X2Rpc2FibGVfdmxhbihwcml2KTsKKwkJCXByaXYtPnZsYW5fZW5hYmxlZCA9IDA7CisJCX0KKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFwcml2LT52bGFuX2VuYWJsZWQpIHsKKwkJaWYgKHByaXYtPm1vZGVsID09IEFETTY5OTZMKQorCQkJYWRtNjk5Nl9lbmFibGVfdmxhbl82OTk2bChwcml2KTsKKwkJZWxzZQorCQkJYWRtNjk5Nl9lbmFibGVfdmxhbihwcml2KTsKKwkJcHJpdi0+dmxhbl9lbmFibGVkID0gMTsKKwl9CisKKwlhZG02OTk2X2FwcGx5X3BvcnRfcHZpZHMocHJpdik7CisJaWYgKHByaXYtPm1vZGVsID09IEFETTY5OTZMKQorCQlhZG02OTk2X2FwcGx5X3ZsYW5fZmlsdGVyc182OTk2bChwcml2KTsKKwllbHNlCisJCWFkbTY5OTZfYXBwbHlfdmxhbl9maWx0ZXJzKHByaXYpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5yZWdfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZXNldCB0aGUgc3dpdGNoCisgKgorICogVGhlIEFETTY5OTYgY2FuJ3QgZG8gYSBzb2Z0d2FyZS1pbml0aWF0ZWQgcmVzZXQsIHNvIHdlIGp1c3QgaW5pdGlhbGlzZSB0aGUKKyAqIHJlZ2lzdGVycyB3ZSBzdXBwb3J0IGluIHRoaXMgZHJpdmVyLgorICoKKyAqIFByZWNvbmRpdGlvbjogcmVnX211dGV4IG11c3QgYmUgaGVsZAorICovCitzdGF0aWMgdm9pZAorYWRtNjk5Nl9wZXJmb3JtX3Jlc2V0IChzdHJ1Y3QgYWRtNjk5Nl9wcml2ICpwcml2KQoreworCWludCBpOworCisJLyogaW5pdGlhbGl6ZSBwb3J0IGFuZCB2bGFuIHNldHRpbmdzICovCisJZm9yIChpID0gMDsgaSA8IEFETV9OVU1fUE9SVFMgLSAxOyBpKyspIHsKKwkJdzE2KHByaXYsIGFkbV9wb3J0Y2ZnW2ldLCBBRE1fUE9SVENGR19JTklUIHwKKwkJCUFETV9QT1JUQ0ZHX1BWSUQoMCkpOworCX0KKwl3MTYocHJpdiwgYWRtX3BvcnRjZmdbNV0sIEFETV9QT1JUQ0ZHX0NQVSk7CisKKwlpZiAocHJpdi0+bW9kZWwgPT0gQURNNjk5Nk0gfHwgcHJpdi0+bW9kZWwgPT0gQURNNjk5NkZDKSB7CisJCS8qIHJlc2V0IGFsbCBQSFkgcG9ydHMgKi8KKwkJZm9yIChpID0gMDsgaSA8IEFETV9QSFlfUE9SVFM7IGkrKykgeworCQkJdzE2KHByaXYsIEFETV9QSFlfUE9SVChpKSwgQURNX1BIWUNGR19JTklUKTsKKwkJfQorCX0KKworCXByaXYtPmVuYWJsZV92bGFuID0gMDsKKwlwcml2LT52bGFuX2VuYWJsZWQgPSAwOworCisJZm9yIChpID0gMDsgaSA8IEFETV9OVU1fUE9SVFM7IGkrKykgeworCQlwcml2LT5wdmlkW2ldID0gMDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQURNX05VTV9WTEFOUzsgaSsrKSB7CisJCXByaXYtPnZsYW5faWRbaV0gPSBpOworCQlwcml2LT52bGFuX3RhYmxlW2ldID0gMDsKKwkJcHJpdi0+dmxhbl90YWdnZWRbaV0gPSAwOworCX0KKworCWlmIChwcml2LT5tb2RlbCA9PSBBRE02OTk2TSkgeworCQkvKiBDbGVhciBWTEFOIHByaW9yaXR5IG1hcCBzbyBwcmlvJ3MgYXJlIHVudXNlZCAqLworCQl3MTYgKHByaXYsIEFETV9WTEFOX1BSSU9NQVAsIDApOworCisJCWFkbTY5OTZfZGlzYWJsZV92bGFuKHByaXYpOworCQlhZG02OTk2X2FwcGx5X3BvcnRfcHZpZHMocHJpdik7CisJfSBlbHNlIGlmIChwcml2LT5tb2RlbCA9PSBBRE02OTk2TCkgeworCQkvKiBDbGVhciBWTEFOIHByaW9yaXR5IG1hcCBzbyBwcmlvJ3MgYXJlIHVudXNlZCAqLworCQl3MTYgKHByaXYsIEFETV9WTEFOX1BSSU9NQVAsIDApOworCisJCWFkbTY5OTZfZGlzYWJsZV92bGFuXzY5OTZsKHByaXYpOworCQlhZG02OTk2X2FwcGx5X3BvcnRfcHZpZHMocHJpdik7CisJfQorfQorCitzdGF0aWMgaW50CithZG02OTk2X3Jlc2V0X3N3aXRjaChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2KQoreworCXN0cnVjdCBhZG02OTk2X3ByaXYgKnByaXYgPSB0b19hZG0oZGV2KTsKKworCXByX2RldmVsKCJyZXNldFxuIik7CisKKwltdXRleF9sb2NrKCZwcml2LT5yZWdfbXV0ZXgpOworCWFkbTY5OTZfcGVyZm9ybV9yZXNldCAocHJpdik7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5yZWdfbXV0ZXgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CithZG02OTk2X2dldF9wb3J0X2xpbmsoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgaW50IHBvcnQsCisJCXN0cnVjdCBzd2l0Y2hfcG9ydF9saW5rICpsaW5rKQoreworCXN0cnVjdCBhZG02OTk2X3ByaXYgKnByaXYgPSB0b19hZG0oZGV2KTsKKwkKKwl1MTYgcmVnID0gMDsKKwkKKwlpZiAocG9ydCA+PSBBRE1fTlVNX1BPUlRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkKKwlzd2l0Y2ggKHBvcnQpIHsKKwljYXNlIDA6CisJCXJlZyA9IHIxNihwcml2LCBBRE1fUFMwKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlyZWcgPSByMTYocHJpdiwgQURNX1BTMCk7CisJCXJlZyA9IHJlZyA+PiA4OworCQlicmVhazsKKwljYXNlIDI6CisJCXJlZyA9IHIxNihwcml2LCBBRE1fUFMxKTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlyZWcgPSByMTYocHJpdiwgQURNX1BTMSk7CisJCXJlZyA9IHJlZyA+PiA4OworCQlicmVhazsKKwljYXNlIDQ6CisJCXJlZyA9IHIxNihwcml2LCBBRE1fUFMxKTsKKwkJcmVnID0gcmVnID4+IDEyOworCQlicmVhazsKKwljYXNlIDU6CisJCXJlZyA9IHIxNihwcml2LCBBRE1fUFMyKTsKKwkJLyogQml0cyAwLCAxLCAzIGFuZCA0LiAqLworCQlyZWcgPSAocmVnICYgMykgfCAoKHJlZyAmIDI0KSA+PiAxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCQorCWxpbmstPmxpbmsgPSByZWcgJiBBRE1fUFNfTFM7CisJaWYgKCFsaW5rLT5saW5rKQorCQlyZXR1cm4gMDsKKwlsaW5rLT5hbmVnID0gdHJ1ZTsKKwlsaW5rLT5kdXBsZXggPSByZWcgJiBBRE1fUFNfRFM7CisJbGluay0+dHhfZmxvdyA9IHJlZyAmIEFETV9QU19GQ1M7CisJbGluay0+cnhfZmxvdyA9IHJlZyAmIEFETV9QU19GQ1M7CisJaWYgKHJlZyAmIEFETV9QU19TUykKKwkJbGluay0+c3BlZWQgPSBTV0lUQ0hfUE9SVF9TUEVFRF8xMDA7CisJZWxzZQorCQlsaW5rLT5zcGVlZCA9IFNXSVRDSF9QT1JUX1NQRUVEXzEwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2FkbTY5OTZfc3dfZ2V0X3BvcnRfbWliKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCSAgICAgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBhZG02OTk2X3ByaXYgKnByaXYgPSB0b19hZG0oZGV2KTsKKwlpbnQgcG9ydDsKKwljaGFyICpidWYgPSBwcml2LT5idWY7CisJaW50IGksIGxlbiA9IDA7CisJdTMyIHJlZyA9IDA7CisKKwlwb3J0ID0gdmFsLT5wb3J0X3ZsYW47CisJaWYgKHBvcnQgPj0gQURNX05VTV9QT1JUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZwcml2LT5taWJfbG9jayk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YocHJpdi0+YnVmKSAtIGxlbiwKKwkJCSJQb3J0ICVkIE1JQiBjb3VudGVyc1xuIiwKKwkJCXBvcnQpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWRtNjk5Nl9taWJzKTsgaSsrKSB7CisJCXJlZyA9IHIxNihwcml2LCBhZG02OTk2X21pYnNbaV0ub2Zmc2V0ICsgQURNX09GRlNFVF9QT1JUKHBvcnQpKTsKKwkJcmVnICs9IHIxNihwcml2LCBhZG02OTk2X21pYnNbaV0ub2Zmc2V0ICsgQURNX09GRlNFVF9QT1JUKHBvcnQpICsgMSkgPDwgMTY7CisJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihwcml2LT5idWYpIC0gbGVuLAorCQkJCSIlLTEyczogJXVcbiIsCisJCQkJYWRtNjk5Nl9taWJzW2ldLm5hbWUsCisJCQkJcmVnKTsKKwl9CisKKwltdXRleF91bmxvY2soJnByaXYtPm1pYl9sb2NrKTsKKworCXZhbC0+dmFsdWUucyA9IGJ1ZjsKKwl2YWwtPmxlbiA9IGxlbjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CithZG02OTk2X2dldF9wb3J0X3N0YXRzKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsIGludCBwb3J0LAorCQkJc3RydWN0IHN3aXRjaF9wb3J0X3N0YXRzICpzdGF0cykKK3sKKwlzdHJ1Y3QgYWRtNjk5Nl9wcml2ICpwcml2ID0gdG9fYWRtKGRldik7CisJaW50IGlkOworCXUzMiByZWcgPSAwOworCisJaWYgKHBvcnQgPj0gQURNX05VTV9QT1JUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZwcml2LT5taWJfbG9jayk7CisKKwlpZCA9IEFETTY5OTZfTUlCX1RYQl9JRDsKKwlyZWcgPSByMTYocHJpdiwgYWRtNjk5Nl9taWJzW2lkXS5vZmZzZXQgKyBBRE1fT0ZGU0VUX1BPUlQocG9ydCkpOworCXJlZyArPSByMTYocHJpdiwgYWRtNjk5Nl9taWJzW2lkXS5vZmZzZXQgKyBBRE1fT0ZGU0VUX1BPUlQocG9ydCkgKyAxKSA8PCAxNjsKKwlzdGF0cy0+dHhfYnl0ZXMgPSByZWc7CisKKwlpZCA9IEFETTY5OTZfTUlCX1JYQl9JRDsKKwlyZWcgPSByMTYocHJpdiwgYWRtNjk5Nl9taWJzW2lkXS5vZmZzZXQgKyBBRE1fT0ZGU0VUX1BPUlQocG9ydCkpOworCXJlZyArPSByMTYocHJpdiwgYWRtNjk5Nl9taWJzW2lkXS5vZmZzZXQgKyBBRE1fT0ZGU0VUX1BPUlQocG9ydCkgKyAxKSA8PCAxNjsKKwlzdGF0cy0+cnhfYnl0ZXMgPSByZWc7CisKKwltdXRleF91bmxvY2soJnByaXYtPm1pYl9sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHN3aXRjaF9hdHRyIGFkbTY5OTZfZ2xvYmFsc1tdID0geworCXsKKwkgLnR5cGUgPSBTV0lUQ0hfVFlQRV9JTlQsCisJIC5uYW1lID0gImVuYWJsZV92bGFuIiwKKwkgLmRlc2NyaXB0aW9uID0gIkVuYWJsZSBWTEFOcyIsCisJIC5zZXQgPSBhZG02OTk2X3NldF9lbmFibGVfdmxhbiwKKwkgLmdldCA9IGFkbTY5OTZfZ2V0X2VuYWJsZV92bGFuLAorCX0sCisjaWZkZWYgREVCVUcKKwl7CisJIC50eXBlID0gU1dJVENIX1RZUEVfSU5ULAorCSAubmFtZSA9ICJhZGRyIiwKKwkgLmRlc2NyaXB0aW9uID0KKwkgIkRpcmVjdCByZWdpc3RlciBhY2Nlc3M6IHNldCByZWdpc3RlciBhZGRyZXNzICgwIC0gMTAyMykiLAorCSAuc2V0ID0gYWRtNjk5Nl9zZXRfYWRkciwKKwkgLmdldCA9IGFkbTY5OTZfZ2V0X2FkZHIsCisJIH0sCisJeworCSAudHlwZSA9IFNXSVRDSF9UWVBFX0lOVCwKKwkgLm5hbWUgPSAiZGF0YSIsCisJIC5kZXNjcmlwdGlvbiA9CisJICJEaXJlY3QgcmVnaXN0ZXIgYWNjZXNzOiByZWFkL3dyaXRlIHRvIHJlZ2lzdGVyICgwIC0gNjU1MzUpIiwKKwkgLnNldCA9IGFkbTY5OTZfc2V0X2RhdGEsCisJIC5nZXQgPSBhZG02OTk2X2dldF9kYXRhLAorCSB9LAorI2VuZGlmIC8qIGRlZiBERUJVRyAqLworfTsKKworc3RhdGljIHN0cnVjdCBzd2l0Y2hfYXR0ciBhZG02OTk2X3BvcnRbXSA9IHsKKwl7CisJIC50eXBlID0gU1dJVENIX1RZUEVfU1RSSU5HLAorCSAubmFtZSA9ICJtaWIiLAorCSAuZGVzY3JpcHRpb24gPSAiR2V0IHBvcnQncyBNSUIgY291bnRlcnMiLAorCSAuc2V0ID0gTlVMTCwKKwkgLmdldCA9IGFkbTY5OTZfc3dfZ2V0X3BvcnRfbWliLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHN3aXRjaF9hdHRyIGFkbTY5OTZfdmxhbltdID0geworCXsKKwkgLnR5cGUgPSBTV0lUQ0hfVFlQRV9JTlQsCisJIC5uYW1lID0gInZpZCIsCisJIC5kZXNjcmlwdGlvbiA9ICJWTEFOIElEIiwKKwkgLnNldCA9IGFkbTY5OTZfc2V0X3ZpZCwKKwkgLmdldCA9IGFkbTY5OTZfZ2V0X3ZpZCwKKwkgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3dpdGNoX2Rldl9vcHMgYWRtNjk5Nl9vcHMgPSB7CisJLmF0dHJfZ2xvYmFsID0geworCQkJLmF0dHIgPSBhZG02OTk2X2dsb2JhbHMsCisJCQkubl9hdHRyID0gQVJSQVlfU0laRShhZG02OTk2X2dsb2JhbHMpLAorCQkJfSwKKwkuYXR0cl9wb3J0ID0geworCQkgICAgICAuYXR0ciA9IGFkbTY5OTZfcG9ydCwKKwkJICAgICAgLm5fYXR0ciA9IEFSUkFZX1NJWkUoYWRtNjk5Nl9wb3J0KSwKKwkJICAgICAgfSwKKwkuYXR0cl92bGFuID0geworCQkgICAgICAuYXR0ciA9IGFkbTY5OTZfdmxhbiwKKwkJICAgICAgLm5fYXR0ciA9IEFSUkFZX1NJWkUoYWRtNjk5Nl92bGFuKSwKKwkJICAgICAgfSwKKwkuZ2V0X3BvcnRfcHZpZCA9IGFkbTY5OTZfZ2V0X3B2aWQsCisJLnNldF9wb3J0X3B2aWQgPSBhZG02OTk2X3NldF9wdmlkLAorCS5nZXRfdmxhbl9wb3J0cyA9IGFkbTY5OTZfZ2V0X3BvcnRzLAorCS5zZXRfdmxhbl9wb3J0cyA9IGFkbTY5OTZfc2V0X3BvcnRzLAorCS5hcHBseV9jb25maWcgPSBhZG02OTk2X2h3X2FwcGx5LAorCS5yZXNldF9zd2l0Y2ggPSBhZG02OTk2X3Jlc2V0X3N3aXRjaCwKKwkuZ2V0X3BvcnRfbGluayA9IGFkbTY5OTZfZ2V0X3BvcnRfbGluaywKKwkuZ2V0X3BvcnRfc3RhdHMgPSBhZG02OTk2X2dldF9wb3J0X3N0YXRzLAorfTsKKworc3RhdGljIGludCBhZG02OTk2X3N3aXRjaF9pbml0KHN0cnVjdCBhZG02OTk2X3ByaXYgKnByaXYsIGNvbnN0IGNoYXIgKmFsaWFzLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBzd2l0Y2hfZGV2ICpzd2RldjsKKwl1MTYgdGVzdCwgb2xkOworCisJaWYgKCFwcml2LT5tb2RlbCkgeworCQkvKiBEZXRlY3QgdHlwZSBvZiBjaGlwICovCisJCW9sZCA9IHIxNihwcml2LCBBRE1fVklEX0NIRUNLKTsKKwkJdGVzdCA9IG9sZCBeICgxIDw8IDEyKTsKKwkJdzE2KHByaXYsIEFETV9WSURfQ0hFQ0ssIHRlc3QpOworCQl0ZXN0IF49IHIxNihwcml2LCBBRE1fVklEX0NIRUNLKTsKKwkJaWYgKHRlc3QgJiAoMSA8PCAxMikpIHsKKwkJCS8qIAorCQkJICogQml0IDEyIG9mIHRoaXMgcmVnaXN0ZXIgaXMgcmVhZC1vbmx5LiAKKwkJCSAqIFRoaXMgaXMgdGhlIEZDIG1vZGVsLiAKKwkJCSAqLworCQkJcHJpdi0+bW9kZWwgPSBBRE02OTk2RkM7CisJCX0gZWxzZSB7CisJCQkvKiBCaXQgMTIgaXMgcmVhZC13cml0ZS4gVGhpcyBpcyB0aGUgTSBtb2RlbC4gKi8KKwkJCXByaXYtPm1vZGVsID0gQURNNjk5Nk07CisJCQl3MTYocHJpdiwgQURNX1ZJRF9DSEVDSywgb2xkKTsKKwkJfQorCX0KKworCXN3ZGV2ID0gJnByaXYtPmRldjsKKwlzd2Rldi0+bmFtZSA9IChhZG02OTk2X21vZGVsX25hbWVbcHJpdi0+bW9kZWxdKTsKKwlzd2Rldi0+Y3B1X3BvcnQgPSBBRE1fQ1BVX1BPUlQ7CisJc3dkZXYtPnBvcnRzID0gQURNX05VTV9QT1JUUzsKKwlzd2Rldi0+dmxhbnMgPSBBRE1fTlVNX1ZMQU5TOworCXN3ZGV2LT5vcHMgPSAmYWRtNjk5Nl9vcHM7CisJc3dkZXYtPmFsaWFzID0gYWxpYXM7CisKKwkvKiBUaGUgQURNNjk5NkwgY29ubmVjdGVkIHRocm91Z2ggR1BJT3MgZG9lcyBub3Qgc3VwcG9ydCBhbnkgc3dpdGNoCisJICAgc3RhdHVzIGNhbGxzICovCisJaWYgKHByaXYtPm1vZGVsID09IEFETTY5OTZMKSB7CisJCWFkbTY5OTZfb3BzLmF0dHJfcG9ydC5uX2F0dHIgPSAwOworCQlhZG02OTk2X29wcy5nZXRfcG9ydF9saW5rID0gTlVMTDsKKwl9CisKKwlwcl9pbmZvICgiJXM6ICVzIG1vZGVsIFBIWSBmb3VuZC5cbiIsIGFsaWFzLCBzd2Rldi0+bmFtZSk7CisKKwltdXRleF9sb2NrKCZwcml2LT5yZWdfbXV0ZXgpOworCWFkbTY5OTZfcGVyZm9ybV9yZXNldCAocHJpdik7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5yZWdfbXV0ZXgpOworCisJaWYgKHByaXYtPm1vZGVsID09IEFETTY5OTZNIHx8IHByaXYtPm1vZGVsID09IEFETTY5OTZMKSB7CisJCXJldHVybiByZWdpc3Rlcl9zd2l0Y2goc3dkZXYsIG5ldGRldik7CisJfQorCisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbnQgYWRtNjk5Nl9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYWRtNjk5Nl9wcml2ICpwcml2OworCWludCByZXQ7CisKKwlsaW5rbW9kZV96ZXJvKHBkZXYtPnN1cHBvcnRlZCk7CisJbGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV8xMDBiYXNlVF9GdWxsX0JJVCwgcGRldi0+c3VwcG9ydGVkKTsKKwlsaW5rbW9kZV9jb3B5KHBkZXYtPmFkdmVydGlzaW5nLCBwZGV2LT5zdXBwb3J0ZWQpOworCisJaWYgKHBkZXYtPm1kaW8uYWRkciAhPSAwKSB7CisJCXByX2luZm8gKCIlczogUEhZIG92ZXJsYXBzIEFETTY5OTYsIHByb3ZpZGluZyBmaXhlZCBQSFkgMHgleC5cbiIKKwkJCQksIHBkZXYtPmF0dGFjaGVkX2Rldi0+bmFtZSwgcGRldi0+bWRpby5hZGRyKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcHJpdiA9IGRldm1fa3phbGxvYygmcGRldi0+bWRpby5kZXYsIHNpemVvZihzdHJ1Y3QgYWRtNjk5Nl9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCW11dGV4X2luaXQoJnByaXYtPnJlZ19tdXRleCk7CisJbXV0ZXhfaW5pdCgmcHJpdi0+bWliX2xvY2spOworCXByaXYtPnByaXYgPSBwZGV2OworCXByaXYtPnJlYWQgPSBhZG02OTk2X3JlYWRfbWlpX3JlZzsKKwlwcml2LT53cml0ZSA9IGFkbTY5OTZfd3JpdGVfbWlpX3JlZzsKKworCXJldCA9IGFkbTY5OTZfc3dpdGNoX2luaXQocHJpdiwgcGRldi0+YXR0YWNoZWRfZGV2LT5uYW1lLCBwZGV2LT5hdHRhY2hlZF9kZXYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcGRldi0+cHJpdiA9IHByaXY7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdhcm5pbmc6IHBoeWRldi0+cHJpdiBpcyBOVUxMIGlmIHBoeWRldi0+bWRpby5hZGRyICE9IDAKKyAqLworc3RhdGljIGludCBhZG02OTk2X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCit7CisJcGh5ZGV2LT5zcGVlZCA9IFNQRUVEXzEwMDsKKwlwaHlkZXYtPmR1cGxleCA9IERVUExFWF9GVUxMOworCXBoeWRldi0+bGluayA9IDE7CisKKwlwaHlkZXYtPnN0YXRlID0gUEhZX1JVTk5JTkc7CisJbmV0aWZfY2Fycmllcl9vbihwaHlkZXYtPmF0dGFjaGVkX2Rldik7CisJcGh5ZGV2LT5hZGp1c3RfbGluayhwaHlkZXYtPmF0dGFjaGVkX2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdhcm5pbmc6IHBoeWRldi0+cHJpdiBpcyBOVUxMIGlmIHBoeWRldi0+bWRpby5hZGRyICE9IDAKKyAqLworc3RhdGljIGludCBhZG02OTk2X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWRtNjk5Nl9maXh1cChzdHJ1Y3QgcGh5X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtaWlfYnVzICpidXMgPSBkZXYtPm1kaW8uYnVzOworCXUxNiByZWc7CisKKwkvKiBPdXIgY3VzdG9tIHJlZ2lzdGVycyBhcmUgYXQgUEhZIGFkZHJlc3NlcyAwLTEwLiBDbGFpbSB0aG9zZS4gKi8KKwlpZiAoZGV2LT5tZGlvLmFkZHIgPiAxMCkKKwkJcmV0dXJuIDA7CisKKwkvKiBsb29rIGZvciB0aGUgc3dpdGNoIG9uIHRoZSBidXMgKi8KKwlyZWcgPSBidXMtPnJlYWQoYnVzLCBQSFlBRERSKEFETV9TSUcwKSkgJiBBRE1fU0lHMF9NQVNLOworCWlmIChyZWcgIT0gQURNX1NJRzBfVkFMKQorCQlyZXR1cm4gMDsKKworCXJlZyA9IGJ1cy0+cmVhZChidXMsIFBIWUFERFIoQURNX1NJRzEpKSAmIEFETV9TSUcxX01BU0s7CisJaWYgKHJlZyAhPSBBRE1fU0lHMV9WQUwpCisJCXJldHVybiAwOworCisJZGV2LT5waHlfaWQgPSAoQURNX1NJRzBfVkFMIDw8IDE2KSB8IEFETV9TSUcxX1ZBTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkbTY5OTZfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFkbTY5OTZfcmVtb3ZlKHN0cnVjdCBwaHlfZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBhZG02OTk2X3ByaXYgKnByaXYgPSBwaHlfdG9fYWRtKHBkZXYpOworCisJaWYgKHByaXYgJiYgKHByaXYtPm1vZGVsID09IEFETTY5OTZNIHx8IHByaXYtPm1vZGVsID09IEFETTY5OTZMKSkKKwkJdW5yZWdpc3Rlcl9zd2l0Y2goJnByaXYtPmRldik7Cit9CisKK3N0YXRpYyBpbnQgYWRtNjk5Nl9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCit7CisJLyogd2UgZG9uJ3QgbmVlZCBhbiBleHRyYSByZXNldCAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYWRtNjk5Nl9waHlfZHJpdmVyID0geworCS5uYW1lCQk9ICJJbmZpbmVvbiBBRE02OTk2IiwKKwkucGh5X2lkCQk9IChBRE1fU0lHMF9WQUwgPDwgMTYpIHwgQURNX1NJRzFfVkFMLAorCS5waHlfaWRfbWFzawk9IDB4ZmZmZmZmZmYsCisJLmZlYXR1cmVzCT0gUEhZX0JBU0lDX0ZFQVRVUkVTLAorCS5wcm9iZQkJPSBhZG02OTk2X3Byb2JlLAorCS5yZW1vdmUJCT0gYWRtNjk5Nl9yZW1vdmUsCisJLmNvbmZpZ19pbml0CT0gJmFkbTY5OTZfY29uZmlnX2luaXQsCisJLmNvbmZpZ19hbmVnCT0gJmFkbTY5OTZfY29uZmlnX2FuZWcsCisJLnJlYWRfc3RhdHVzCT0gJmFkbTY5OTZfcmVhZF9zdGF0dXMsCisJLnNvZnRfcmVzZXQJPSBhZG02OTk2X3NvZnRfcmVzZXQsCit9OworCitzdGF0aWMgaW50IGFkbTY5OTZfZ3Bpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBhZG02OTk2X2dwaW9fcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgYWRtNjk5Nl9wcml2ICpwcml2OworCWludCByZXQ7CisKKwlpZiAoIXBkYXRhKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByaXYgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBhZG02OTk2X3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVybiAtRU5PTUVNOworCisJbXV0ZXhfaW5pdCgmcHJpdi0+cmVnX211dGV4KTsKKwltdXRleF9pbml0KCZwcml2LT5taWJfbG9jayk7CisKKwlwcml2LT5lZWNzID0gcGRhdGEtPmVlY3M7CisJcHJpdi0+ZWVkaSA9IHBkYXRhLT5lZWRpOworCXByaXYtPmVlc2sgPSBwZGF0YS0+ZWVzazsKKworCXByaXYtPm1vZGVsID0gcGRhdGEtPm1vZGVsOworCXByaXYtPnJlYWQgPSBhZG02OTk2X3JlYWRfZ3Bpb19yZWc7CisJcHJpdi0+d3JpdGUgPSBhZG02OTk2X3dyaXRlX2dwaW9fcmVnOworCisJcmV0ID0gZGV2bV9ncGlvX3JlcXVlc3QoJnBkZXYtPmRldiwgcHJpdi0+ZWVjcywgImFkbV9lZWNzIik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBkZXZtX2dwaW9fcmVxdWVzdCgmcGRldi0+ZGV2LCBwcml2LT5lZWRpLCAiYWRtX2VlZGkiKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IGRldm1fZ3Bpb19yZXF1ZXN0KCZwZGV2LT5kZXYsIHByaXYtPmVlc2ssICJhZG1fZWVzayIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBhZG02OTk2X3N3aXRjaF9pbml0KHByaXYsIGRldl9uYW1lKCZwZGV2LT5kZXYpLCBOVUxMKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWRtNjk5Nl9ncGlvX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBhZG02OTk2X3ByaXYgKnByaXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmIChwcml2ICYmIChwcml2LT5tb2RlbCA9PSBBRE02OTk2TSB8fCBwcml2LT5tb2RlbCA9PSBBRE02OTk2TCkpCisJCXVucmVnaXN0ZXJfc3dpdGNoKCZwcml2LT5kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFkbTY5OTZfZ3Bpb19kcml2ZXIgPSB7CisJLnByb2JlID0gYWRtNjk5Nl9ncGlvX3Byb2JlLAorCS5yZW1vdmUgPSBhZG02OTk2X2dwaW9fcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImFkbTY5OTZfZ3BpbyIsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFkbTY5OTZfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwlwaHlfcmVnaXN0ZXJfZml4dXBfZm9yX2lkKFBIWV9BTllfSUQsIGFkbTY5OTZfZml4dXApOworCWVyciA9IHBoeV9kcml2ZXJfcmVnaXN0ZXIoJmFkbTY5OTZfcGh5X2RyaXZlciwgVEhJU19NT0RVTEUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmFkbTY5OTZfZ3Bpb19kcml2ZXIpOworCWlmIChlcnIpCisJCXBoeV9kcml2ZXJfdW5yZWdpc3RlcigmYWRtNjk5Nl9waHlfZHJpdmVyKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhZG02OTk2X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYWRtNjk5Nl9ncGlvX2RyaXZlcik7CisJcGh5X2RyaXZlcl91bnJlZ2lzdGVyKCZhZG02OTk2X3BoeV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChhZG02OTk2X2luaXQpOworbW9kdWxlX2V4aXQoYWRtNjk5Nl9leGl0KTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9hZG02OTk2LmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL25ldC9waHkvYWRtNjk5Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZDQ2MGEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL25ldC9waHkvYWRtNjk5Ni5oCkBAIC0wLDAgKzEsMTg2IEBACisvKgorICogQURNNjk5NiBzd2l0Y2ggZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KKyAqIENvcHlyaWdodCAoYykgMjAxMCwyMDExIFBldGVyIExlYmJpbmcgPHBldGVyQGRpZ2l0YWxicmFpbnMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdjIgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKi8KKyNpZm5kZWYgX19BRE02OTk2X0gKKyNkZWZpbmUgX19BRE02OTk2X0gKKworLyoKKyAqIEFETV9QSFlfUE9SVFM6IE51bWJlciBvZiBwb3J0cyB3aXRoIGEgUEhZLgorICogV2Ugb25seSBjb250cm9sIHBvcnRzIDAgdG8gMywgYmVjYXVzZSBpZiA0IGlzIGNvbm5lY3RlZCwgaXQgaXMgbW9zdCBsaWtlbHkKKyAqIG5vdCBjb25uZWN0ZWQgdG8gdGhlIHN3aXRjaCBidXQgdG8gYSBzZXBhcmF0ZSBNSUkgYW5kIE1BQyBmb3IgdGhlIFdBTiBwb3J0LgorICovCisjZGVmaW5lIEFETV9QSFlfUE9SVFMJNAorI2RlZmluZSBBRE1fTlVNX1BPUlRTCTYKKyNkZWZpbmUgQURNX0NQVV9QT1JUCTUKKworI2RlZmluZSBBRE1fTlVNX1ZMQU5TIDE2CisjZGVmaW5lIEFETV9WTEFOX01BWF9JRCA0MDk0CisKK2VudW0gYWRtcmVnIHsKKwlBRE1fRUVQUk9NX0JBU0UJCT0gMHgwLAorCQlBRE1fUDBfQ0ZHCQk9IEFETV9FRVBST01fQkFTRSArIDEsCisJCUFETV9QMV9DRkcJCT0gQURNX0VFUFJPTV9CQVNFICsgMywKKwkJQURNX1AyX0NGRwkJPSBBRE1fRUVQUk9NX0JBU0UgKyA1LAorCQlBRE1fUDNfQ0ZHCQk9IEFETV9FRVBST01fQkFTRSArIDcsCisJCUFETV9QNF9DRkcJCT0gQURNX0VFUFJPTV9CQVNFICsgOCwKKwkJQURNX1A1X0NGRwkJPSBBRE1fRUVQUk9NX0JBU0UgKyA5LAorCQlBRE1fU1lTQzAJCT0gQURNX0VFUFJPTV9CQVNFICsgMHhhLAorCQlBRE1fVkxBTl9QUklPTUFQCT0gQURNX0VFUFJPTV9CQVNFICsgMHhlLAorCQlBRE1fU1lTQzMJCT0gQURNX0VFUFJPTV9CQVNFICsgMHgxMSwKKwkJLyogSW5wdXQgRm9yY2UgTm8gVGFnIEVuYWJsZSAqLworCQlBRE1fSUZOVEUJCT0gQURNX0VFUFJPTV9CQVNFICsgMHgyMCwKKwkJQURNX1ZJRF9DSEVDSwkJPSBBRE1fRUVQUk9NX0JBU0UgKyAweDI2LAorCQlBRE1fUDBfUFZJRAkJPSBBRE1fRUVQUk9NX0JBU0UgKyAweDI4LAorCQlBRE1fUDFfUFZJRAkJPSBBRE1fRUVQUk9NX0JBU0UgKyAweDI5LAorCQkvKiBPdXRwdXQgVGFnIEJ5cGFzcyBFbmFibGUgYW5kIFAyIFBWSUQgKi8KKwkJQURNX09UQkVfUDJfUFZJRAk9IEFETV9FRVBST01fQkFTRSArIDB4MmEsCisJCUFETV9QM19QNF9QVklECQk9IEFETV9FRVBST01fQkFTRSArIDB4MmIsCisJCUFETV9QNV9QVklECQk9IEFETV9FRVBST01fQkFTRSArIDB4MmMsCisJQURNX0VFUFJPTV9FWFRfQkFTRQk9IDB4NDAsCisjZGVmaW5lIEFETV9WTEFOX0ZJTFRfTChuKSAoQURNX0VFUFJPTV9FWFRfQkFTRSArIDIgKiAobikpCisjZGVmaW5lIEFETV9WTEFOX0ZJTFRfSChuKSAoQURNX0VFUFJPTV9FWFRfQkFTRSArIDEgKyAyICogKG4pKQorI2RlZmluZSBBRE1fVkxBTl9NQVAobikgKEFETV9FRVBST01fQkFTRSArIDB4MTMgKyBuKQorCUFETV9DT1VOVEVSX0JBU0UJPSAweGEwLAorCQlBRE1fU0lHMAkJPSBBRE1fQ09VTlRFUl9CQVNFICsgMCwKKwkJQURNX1NJRzEJCT0gQURNX0NPVU5URVJfQkFTRSArIDEsCisJCUFETV9QUzAJCT0gQURNX0NPVU5URVJfQkFTRSArIDIsCisJCUFETV9QUzEJCT0gQURNX0NPVU5URVJfQkFTRSArIDMsCisJCUFETV9QUzIJCT0gQURNX0NPVU5URVJfQkFTRSArIDQsCisJCUFETV9DTDAJCT0gQURNX0NPVU5URVJfQkFTRSArIDgsIC8qIFJ4UGFja2V0ICovCisJCUFETV9DTDYJCT0gQURNX0NPVU5URVJfQkFTRSArIDB4MWEsIC8qIFJ4Qnl0ZSAqLworCQlBRE1fQ0wxMgkJPSBBRE1fQ09VTlRFUl9CQVNFICsgMHgyYywgLyogVHhQYWNrZXQgKi8KKwkJQURNX0NMMTgJCT0gQURNX0NPVU5URVJfQkFTRSArIDB4M2UsIC8qIFR4Qnl0ZSAqLworCQlBRE1fQ0wyNAkJPSBBRE1fQ09VTlRFUl9CQVNFICsgMHg1MCwgLyogQ29sbCAqLworCQlBRE1fQ0wzMAkJPSBBRE1fQ09VTlRFUl9CQVNFICsgMHg2MiwgLyogRXJyICovCisjZGVmaW5lIEFETV9PRkZTRVRfUE9SVChuKSAoKG4gKiA0KSAtIChuIC8gNCkgKiAyIC0gKG4gLyA1KSAqIDIpCisJQURNX1BIWV9CQVNFCQk9IDB4MjAwLAorI2RlZmluZSBBRE1fUEhZX1BPUlQobikgKEFETV9QSFlfQkFTRSArICgweDIwICogbikpCit9OworCisvKiBDaGlwIGlkZW50aWZpY2F0aW9uIHBhdHRlcm5zICovCisjZGVmaW5lCUFETV9TSUcwX01BU0sJMHhmZmZmCisjZGVmaW5lIEFETV9TSUcwX1ZBTAkweDEwMjMKKyNkZWZpbmUgQURNX1NJRzFfTUFTSwkweGZmZmYKKyNkZWZpbmUgQURNX1NJRzFfVkFMCTB4MDAwNworCitlbnVtIHsKKwlBRE1fUEhZQ0ZHX0NPTFRTVCAgICAgPSAoMSA8PCA3KSwJLyogRW5hYmxlIGNvbGxpc2lvbiB0ZXN0ICovCisJQURNX1BIWUNGR19EUExYICAgICAgID0gKDEgPDwgOCksCS8qIEVuYWJsZSBmdWxsIGR1cGxleCAqLworCUFETV9QSFlDRkdfQU5FTl9SU1QgICA9ICgxIDw8IDkpLAkvKiBSZXN0YXJ0IGF1dG8gbmVnb3RpYXRpb24gKHNlbGYgY2xlYXIpICovCisJQURNX1BIWUNGR19JU08gICAgICAgID0gKDEgPDwgMTApLAkvKiBJc29sYXRlIFBIWSAqLworCUFETV9QSFlDRkdfUEROICAgICAgICA9ICgxIDw8IDExKSwJLyogUG93ZXIgZG93biBQSFkgKi8KKwlBRE1fUEhZQ0ZHX0FORU4gICAgICAgPSAoMSA8PCAxMiksCS8qIEVuYWJsZSBhdXRvIG5lZ290aWF0aW9uICovCisJQURNX1BIWUNGR19TUEVFRF8xMDAgID0gKDEgPDwgMTMpLAkvKiBFbmFibGUgMTAwIE1iaXQvcyAqLworCUFETV9QSFlDRkdfTFBCSyAgICAgICA9ICgxIDw8IDE0KSwJLyogRW5hYmxlIGxvb3BiYWNrIG9wZXJhdGlvbiAqLworCUFETV9QSFlDRkdfUlNUICAgICAgICA9ICgxIDw8IDE1KSwJLyogUmVzZXQgdGhlIHBvcnQgKHNlbGYgY2xlYXIpICovCisJQURNX1BIWUNGR19JTklUID0gKAorCQlBRE1fUEhZQ0ZHX1JTVCB8CisJCUFETV9QSFlDRkdfU1BFRURfMTAwIHwKKwkJQURNX1BIWUNGR19BTkVOIHwKKwkJQURNX1BIWUNGR19BTkVOX1JTVAorCSkKK307CisKK2VudW0geworCUFETV9QT1JUQ0ZHX0ZDICAgICAgICA9ICgxIDw8IDApLAkvKiBFbmFibGUgODAyLnggZmxvdyBjb250cm9sICovCisJQURNX1BPUlRDRkdfQU4gICAgICAgID0gKDEgPDwgMSksCS8qIEVuYWJsZSBhdXRvLW5lZ290aWF0aW9uICovCisJQURNX1BPUlRDRkdfU1BFRURfMTAwID0gKDEgPDwgMiksCS8qIEVuYWJsZSAxMDAgTWJpdC9zICovCisJQURNX1BPUlRDRkdfRFBMWCAgICAgID0gKDEgPDwgMyksCS8qIEVuYWJsZSBmdWxsIGR1cGxleCAqLworCUFETV9QT1JUQ0ZHX09UICAgICAgICA9ICgxIDw8IDQpLAkvKiBPdXRwdXQgdGFnZ2VkIHBhY2tldHMgKi8KKwlBRE1fUE9SVENGR19QRCAgICAgICAgPSAoMSA8PCA1KSwJLyogUG9ydCBkaXNhYmxlICovCisJQURNX1BPUlRDRkdfVFZfUFJJTyAgID0gKDEgPDwgNiksCS8qIDAgPSBWTEFOIGJhc2VkIHByaW9yaXR5CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCSAqIDEgPSBUT1MgYmFzZWQgcHJpb3JpdHkgKi8KKwlBRE1fUE9SVENGR19QUEUgICAgICAgPSAoMSA8PCA3KSwJLyogUG9ydCBiYXNlZCBwcmlvcml0eSBlbmFibGUgKi8KKwlBRE1fUE9SVENGR19QUF9TICAgICAgPSAoMSA8PCA4KSwJLyogUG9ydCBiYXNlZCBwcmlvcml0eSwgMiBiaXRzICovCisJQURNX1BPUlRDRkdfUFZJRF9CQVNFID0gKDEgPDwgMTApLAkvKiBQcmltYXJ5IFZMQU4gaWQsIDQgYml0cyAqLworCUFETV9QT1JUQ0ZHX0ZTRQkgICAgICA9ICgxIDw8IDE0KSwJLyogRnggc2VsZWN0IGVuYWJsZSAqLworCUFETV9QT1JUQ0ZHX0NBTSAgICAgICA9ICgxIDw8IDE1KSwJLyogQ3Jvc3NvdmVyIEF1dG8gTURJWCAqLworCisJQURNX1BPUlRDRkdfSU5JVCA9ICgKKwkJQURNX1BPUlRDRkdfRkMgfAorCQlBRE1fUE9SVENGR19BTiB8CisJCUFETV9QT1JUQ0ZHX1NQRUVEXzEwMCB8CisJCUFETV9QT1JUQ0ZHX0RQTFggfAorCQlBRE1fUE9SVENGR19DQU0KKwkpLAorCUFETV9QT1JUQ0ZHX0NQVSA9ICgKKwkJQURNX1BPUlRDRkdfRkMgfAorCQlBRE1fUE9SVENGR19TUEVFRF8xMDAgfAorCQlBRE1fUE9SVENGR19PVCB8CisJCUFETV9QT1JUQ0ZHX0RQTFgKKwkpLAorfTsKKworI2RlZmluZSBBRE1fUE9SVENGR19QUElEKG4pICgobiAmIDB4MykgPDwgOCkKKyNkZWZpbmUgQURNX1BPUlRDRkdfUFZJRChuKSAoKG4gJiAweGYpIDw8IDEwKQorI2RlZmluZSBBRE1fUE9SVENGR19QVklEX01BU0sgKDB4ZiA8PCAxMCkKKworI2RlZmluZSBBRE1fSUZOVEVfTUFTSyAoMHgzZiA8PCA5KQorI2RlZmluZSBBRE1fVklEX0NIRUNLX01BU0sgKDB4M2YgPDwgNikKKworI2RlZmluZSBBRE1fUDBfUFZJRF9WQUwobikgKCgoKG4pICYgMHhmZjApID4+IDQpIDw8IDApCisjZGVmaW5lIEFETV9QMV9QVklEX1ZBTChuKSAoKCgobikgJiAweGZmMCkgPj4gNCkgPDwgMCkKKyNkZWZpbmUgQURNX1AyX1BWSURfVkFMKG4pICgoKChuKSAmIDB4ZmYwKSA+PiA0KSA8PCAwKQorI2RlZmluZSBBRE1fUDNfUFZJRF9WQUwobikgKCgoKG4pICYgMHhmZjApID4+IDQpIDw8IDApCisjZGVmaW5lIEFETV9QNF9QVklEX1ZBTChuKSAoKCgobikgJiAweGZmMCkgPj4gNCkgPDwgOCkKKyNkZWZpbmUgQURNX1A1X1BWSURfVkFMKG4pICgoKChuKSAmIDB4ZmYwKSA+PiA0KSA8PCAwKQorI2RlZmluZSBBRE1fUDJfUFZJRF9NQVNLIDB4ZmYKKworI2RlZmluZSBBRE1fT1RCRShuKSAoKChuKSAmIDB4M2YpIDw8IDgpCisjZGVmaW5lIEFETV9PVEJFX01BU0sgKDB4M2YgPDwgOCkKKworLyogQURNX1NZU0MwICovCitlbnVtIHsKKwlBRE1fTlRURQk9ICgxIDw8IDIpLAkvKiBOZXcgVGFnIFRyYW5zbWl0IEVuYWJsZSAqLworCUFETV9SVklEMQk9ICgxIDw8IDgpCS8qIFJlcGxhY2UgVkxBTiBJRCAxICovCit9OworCisvKiBUYWcgQmFzZWQgVkxBTiBpbiBBRE1fU1lTQzMgKi8KKyNkZWZpbmUgQURNX01BQ19DTE9ORQlCSVQoNCkKKyNkZWZpbmUgQURNX1RCVgkJQklUKDUpCisKK3N0YXRpYyBjb25zdCB1OCBhZG1fcG9ydGNmZ1tdID0geworCVswXSA9IEFETV9QMF9DRkcsCisJWzFdID0gQURNX1AxX0NGRywKKwlbMl0gPSBBRE1fUDJfQ0ZHLAorCVszXSA9IEFETV9QM19DRkcsCisJWzRdID0gQURNX1A0X0NGRywKKwlbNV0gPSBBRE1fUDVfQ0ZHLAorfTsKKworLyogRmllbGRzIGluIEFETV9WTEFOX0ZJTFRfTCh4KSAqLworI2RlZmluZSBBRE1fVkxBTl9GSUxUX0ZJRChuKSAoKChuKSAmIDB4ZikgPDwgMTIpCisjZGVmaW5lIEFETV9WTEFOX0ZJTFRfVEFHR0VEKG4pICgoKG4pICYgMHgzZikgPDwgNikKKyNkZWZpbmUgQURNX1ZMQU5fRklMVF9NRU1CRVIobikgKCgobikgJiAweDNmKSA8PCAwKQorI2RlZmluZSBBRE1fVkxBTl9GSUxUX01FTUJFUl9NQVNLIDB4M2YKKy8qIEZpZWxkcyBpbiBBRE1fVkxBTl9GSUxUX0goeCkgKi8KKyNkZWZpbmUgQURNX1ZMQU5fRklMVF9WQUxJRCAoMSA8PCAxNSkKKyNkZWZpbmUgQURNX1ZMQU5fRklMVF9WSUQobikgKCgobikgJiAweGZmZikgPDwgMCkKKworLyogQ29udmVydCBwb3J0cyB0byBhIGZvcm0gZm9yIEFETTY5OTZMIFZMQU4gbWFwICovCisjZGVmaW5lIEFETV9WTEFOX0ZJTFQocG9ydHMpICgocG9ydHMgJiAweDAxKSB8ICgocG9ydHMgJiAweDAyKSA8PCAxKSB8IFwKKwkJCSgocG9ydHMgJiAweDA0KSA8PCAyKSB8ICgocG9ydHMgJiAweDA4KSA8PCAzKSB8IFwKKwkJCSgocG9ydHMgJiAweDEwKSA8PCAzKSB8ICgocG9ydHMgJiAweDIwKSA8PCAzKSkKKworLyogUG9ydCBzdGF0dXMgcmVnaXN0ZXIgKi8KK2VudW0geworCUFETV9QU19MUyA9ICgxIDw8IDApLAkvKiBMaW5rIHN0YXR1cyAqLworCUFETV9QU19TUyA9ICgxIDw8IDEpLAkvKiBTcGVlZCBzdGF0dXMgKi8KKwlBRE1fUFNfRFMgPSAoMSA8PCAyKSwJLyogRHVwbGV4IHN0YXR1cyAqLworCUFETV9QU19GQ1MgPSAoMSA8PCAzKQkvKiBGbG93IGNvbnRyb2wgc3RhdHVzICovCit9OworCisvKgorICogU3BsaXQgdGhlIHJlZ2lzdGVyIGFkZHJlc3MgaW4gcGh5IGlkIGFuZCByZWdpc3RlcgorICogaXQgd2lsbCBnZXQgY29tYmluZWQgYWdhaW4gYnkgdGhlIG1kaW8gYnVzIG9wCisgKi8KKyNkZWZpbmUgUEhZQUREUihfcmVnKQkoKF9yZWcgPj4gNSkgJiAweGZmKSwgKF9yZWcgJiAweDFmKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9hcjgyMTYuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9hcjgyMTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTZjM2M4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9uZXQvcGh5L2FyODIxNi5jCkBAIC0wLDAgKzEsMjkwOSBAQAorLyoKKyAqIGFyODIxNi5jOiBBUjgyMTYgc3dpdGNoIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBHYWJvciBKdWhvcyA8anVob3NnQG9wZW53cnQub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaWYuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX21kaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9uZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxuZXQvZ2VuZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvc3dpdGNoLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xvY2tkZXAuaD4KKyNpbmNsdWRlIDxsaW51eC9hcjgyMTZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisKKyNpbmNsdWRlICJhcjgyMTYuaCIKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBhcjh4eHhfY2hpcCBhcjgzMjdfY2hpcDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgYXI4eHh4X2NoaXAgYXI4MzM3X2NoaXA7CisKKyNkZWZpbmUgTUlCX0RFU0NfQkFTSUMoX3MgLCBfbywgX24pCQlcCisJewkJCQkJXAorCQkuc2l6ZSA9IChfcyksCQkJXAorCQkub2Zmc2V0ID0gKF9vKSwJCQlcCisJCS5uYW1lID0gKF9uKSwJCQlcCisJCS50eXBlID0gQVI4WFhYX01JQl9CQVNJQywJXAorCX0KKworI2RlZmluZSBNSUJfREVTQ19FWFQoX3MgLCBfbywgX24pCQlcCisJewkJCQkJXAorCQkuc2l6ZSA9IChfcyksCQkJXAorCQkub2Zmc2V0ID0gKF9vKSwJCQlcCisJCS5uYW1lID0gKF9uKSwJCQlcCisJCS50eXBlID0gQVI4WFhYX01JQl9FWFRFTkRFRCwJXAorCX0KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhcjh4eHhfbWliX2Rlc2MgYXI4MjE2X21pYnNbXSA9IHsKKwlNSUJfREVTQ19FWFQoMSwgQVI4MjE2X1NUQVRTX1JYQlJPQUQsICJSeEJyb2FkIiksCisJTUlCX0RFU0NfRVhUKDEsIEFSODIxNl9TVEFUU19SWFBBVVNFLCAiUnhQYXVzZSIpLAorCU1JQl9ERVNDX0VYVCgxLCBBUjgyMTZfU1RBVFNfUlhNVUxUSSwgIlJ4TXVsdGkiKSwKKwlNSUJfREVTQ19FWFQoMSwgQVI4MjE2X1NUQVRTX1JYRkNTRVJSLCAiUnhGY3NFcnIiKSwKKwlNSUJfREVTQ19FWFQoMSwgQVI4MjE2X1NUQVRTX1JYQUxJR05FUlIsICJSeEFsaWduRXJyIiksCisJTUlCX0RFU0NfRVhUKDEsIEFSODIxNl9TVEFUU19SWFJVTlQsICJSeFJ1bnQiKSwKKwlNSUJfREVTQ19FWFQoMSwgQVI4MjE2X1NUQVRTX1JYRlJBR01FTlQsICJSeEZyYWdtZW50IiksCisJTUlCX0RFU0NfRVhUKDEsIEFSODIxNl9TVEFUU19SWDY0QllURSwgIlJ4NjRCeXRlIiksCisJTUlCX0RFU0NfRVhUKDEsIEFSODIxNl9TVEFUU19SWDEyOEJZVEUsICJSeDEyOEJ5dGUiKSwKKwlNSUJfREVTQ19FWFQoMSwgQVI4MjE2X1NUQVRTX1JYMjU2QllURSwgIlJ4MjU2Qnl0ZSIpLAorCU1JQl9ERVNDX0VYVCgxLCBBUjgyMTZfU1RBVFNfUlg1MTJCWVRFLCAiUng1MTJCeXRlIiksCisJTUlCX0RFU0NfRVhUKDEsIEFSODIxNl9TVEFUU19SWDEwMjRCWVRFLCAiUngxMDI0Qnl0ZSIpLAorCU1JQl9ERVNDX0VYVCgxLCBBUjgyMTZfU1RBVFNfUlhNQVhCWVRFLCAiUnhNYXhCeXRlIiksCisJTUlCX0RFU0NfRVhUKDEsIEFSODIxNl9TVEFUU19SWFRPT0xPTkcsICJSeFRvb0xvbmciKSwKKwlNSUJfREVTQ19CQVNJQygyLCBBUjgyMTZfU1RBVFNfUlhHT09EQllURSwgIlJ4R29vZEJ5dGUiKSwKKwlNSUJfREVTQ19FWFQoMiwgQVI4MjE2X1NUQVRTX1JYQkFEQllURSwgIlJ4QmFkQnl0ZSIpLAorCU1JQl9ERVNDX0VYVCgxLCBBUjgyMTZfU1RBVFNfUlhPVkVSRkxPVywgIlJ4T3ZlckZsb3ciKSwKKwlNSUJfREVTQ19FWFQoMSwgQVI4MjE2X1NUQVRTX0ZJTFRFUkVELCAiRmlsdGVyZWQiKSwKKwlNSUJfREVTQ19FWFQoMSwgQVI4MjE2X1NUQVRTX1RYQlJPQUQsICJUeEJyb2FkIiksCisJTUlCX0RFU0NfRVhUKDEsIEFSODIxNl9TVEFUU19UWFBBVVNFLCAiVHhQYXVzZSIpLAorCU1JQl9ERVNDX0VYVCgxLCBBUjgyMTZfU1RBVFNfVFhNVUxUSSwgIlR4TXVsdGkiKSwKKwlNSUJfREVTQ19FWFQoMSwgQVI4MjE2X1NUQVRTX1RYVU5ERVJSVU4sICJUeFVuZGVyUnVuIiksCisJTUlCX0RFU0NfRVhUKDEsIEFSODIxNl9TVEFUU19UWDY0QllURSwgIlR4NjRCeXRlIiksCisJTUlCX0RFU0NfRVhUKDEsIEFSODIxNl9TVEFUU19UWDEyOEJZVEUsICJUeDEyOEJ5dGUiKSwKKwlNSUJfREVTQ19FWFQoMSwgQVI4MjE2X1NUQVRTX1RYMjU2QllURSwgIlR4MjU2Qnl0ZSIpLAorCU1JQl9ERVNDX0VYVCgxLCBBUjgyMTZfU1RBVFNfVFg1MTJCWVRFLCAiVHg1MTJCeXRlIiksCisJTUlCX0RFU0NfRVhUKDEsIEFSODIxNl9TVEFUU19UWDEwMjRCWVRFLCAiVHgxMDI0Qnl0ZSIpLAorCU1JQl9ERVNDX0VYVCgxLCBBUjgyMTZfU1RBVFNfVFhNQVhCWVRFLCAiVHhNYXhCeXRlIiksCisJTUlCX0RFU0NfRVhUKDEsIEFSODIxNl9TVEFUU19UWE9WRVJTSVpFLCAiVHhPdmVyU2l6ZSIpLAorCU1JQl9ERVNDX0JBU0lDKDIsIEFSODIxNl9TVEFUU19UWEJZVEUsICJUeEJ5dGUiKSwKKwlNSUJfREVTQ19FWFQoMSwgQVI4MjE2X1NUQVRTX1RYQ09MTElTSU9OLCAiVHhDb2xsaXNpb24iKSwKKwlNSUJfREVTQ19FWFQoMSwgQVI4MjE2X1NUQVRTX1RYQUJPUlRDT0wsICJUeEFib3J0Q29sIiksCisJTUlCX0RFU0NfRVhUKDEsIEFSODIxNl9TVEFUU19UWE1VTFRJQ09MLCAiVHhNdWx0aUNvbCIpLAorCU1JQl9ERVNDX0VYVCgxLCBBUjgyMTZfU1RBVFNfVFhTSU5HTEVDT0wsICJUeFNpbmdsZUNvbCIpLAorCU1JQl9ERVNDX0VYVCgxLCBBUjgyMTZfU1RBVFNfVFhFWENERUZFUiwgIlR4RXhjRGVmZXIiKSwKKwlNSUJfREVTQ19FWFQoMSwgQVI4MjE2X1NUQVRTX1RYREVGRVIsICJUeERlZmVyIiksCisJTUlCX0RFU0NfRVhUKDEsIEFSODIxNl9TVEFUU19UWExBVEVDT0wsICJUeExhdGVDb2wiKSwKK307CisKK2NvbnN0IHN0cnVjdCBhcjh4eHhfbWliX2Rlc2MgYXI4MjM2X21pYnNbMzldID0geworCU1JQl9ERVNDX0VYVCgxLCBBUjgyMzZfU1RBVFNfUlhCUk9BRCwgIlJ4QnJvYWQiKSwKKwlNSUJfREVTQ19FWFQoMSwgQVI4MjM2X1NUQVRTX1JYUEFVU0UsICJSeFBhdXNlIiksCisJTUlCX0RFU0NfRVhUKDEsIEFSODIzNl9TVEFUU19SWE1VTFRJLCAiUnhNdWx0aSIpLAorCU1JQl9ERVNDX0VYVCgxLCBBUjgyMzZfU1RBVFNfUlhGQ1NFUlIsICJSeEZjc0VyciIpLAorCU1JQl9ERVNDX0VYVCgxLCBBUjgyMzZfU1RBVFNfUlhBTElHTkVSUiwgIlJ4QWxpZ25FcnIiKSwKKwlNSUJfREVTQ19FWFQoMSwgQVI4MjM2X1NUQVRTX1JYUlVOVCwgIlJ4UnVudCIpLAorCU1JQl9ERVNDX0VYVCgxLCBBUjgyMzZfU1RBVFNfUlhGUkFHTUVOVCwgIlJ4RnJhZ21lbnQiKSwKKwlNSUJfREVTQ19FWFQoMSwgQVI4MjM2X1NUQVRTX1JYNjRCWVRFLCAiUng2NEJ5dGUiKSwKKwlNSUJfREVTQ19FWFQoMSwgQVI4MjM2X1NUQVRTX1JYMTI4QllURSwgIlJ4MTI4Qnl0ZSIpLAorCU1JQl9ERVNDX0VYVCgxLCBBUjgyMzZfU1RBVFNfUlgyNTZCWVRFLCAiUngyNTZCeXRlIiksCisJTUlCX0RFU0NfRVhUKDEsIEFSODIzNl9TVEFUU19SWDUxMkJZVEUsICJSeDUxMkJ5dGUiKSwKKwlNSUJfREVTQ19FWFQoMSwgQVI4MjM2X1NUQVRTX1JYMTAyNEJZVEUsICJSeDEwMjRCeXRlIiksCisJTUlCX0RFU0NfRVhUKDEsIEFSODIzNl9TVEFUU19SWDE1MThCWVRFLCAiUngxNTE4Qnl0ZSIpLAorCU1JQl9ERVNDX0VYVCgxLCBBUjgyMzZfU1RBVFNfUlhNQVhCWVRFLCAiUnhNYXhCeXRlIiksCisJTUlCX0RFU0NfRVhUKDEsIEFSODIzNl9TVEFUU19SWFRPT0xPTkcsICJSeFRvb0xvbmciKSwKKwlNSUJfREVTQ19CQVNJQygyLCBBUjgyMzZfU1RBVFNfUlhHT09EQllURSwgIlJ4R29vZEJ5dGUiKSwKKwlNSUJfREVTQ19FWFQoMiwgQVI4MjM2X1NUQVRTX1JYQkFEQllURSwgIlJ4QmFkQnl0ZSIpLAorCU1JQl9ERVNDX0VYVCgxLCBBUjgyMzZfU1RBVFNfUlhPVkVSRkxPVywgIlJ4T3ZlckZsb3ciKSwKKwlNSUJfREVTQ19FWFQoMSwgQVI4MjM2X1NUQVRTX0ZJTFRFUkVELCAiRmlsdGVyZWQiKSwKKwlNSUJfREVTQ19FWFQoMSwgQVI4MjM2X1NUQVRTX1RYQlJPQUQsICJUeEJyb2FkIiksCisJTUlCX0RFU0NfRVhUKDEsIEFSODIzNl9TVEFUU19UWFBBVVNFLCAiVHhQYXVzZSIpLAorCU1JQl9ERVNDX0VYVCgxLCBBUjgyMzZfU1RBVFNfVFhNVUxUSSwgIlR4TXVsdGkiKSwKKwlNSUJfREVTQ19FWFQoMSwgQVI4MjM2X1NUQVRTX1RYVU5ERVJSVU4sICJUeFVuZGVyUnVuIiksCisJTUlCX0RFU0NfRVhUKDEsIEFSODIzNl9TVEFUU19UWDY0QllURSwgIlR4NjRCeXRlIiksCisJTUlCX0RFU0NfRVhUKDEsIEFSODIzNl9TVEFUU19UWDEyOEJZVEUsICJUeDEyOEJ5dGUiKSwKKwlNSUJfREVTQ19FWFQoMSwgQVI4MjM2X1NUQVRTX1RYMjU2QllURSwgIlR4MjU2Qnl0ZSIpLAorCU1JQl9ERVNDX0VYVCgxLCBBUjgyMzZfU1RBVFNfVFg1MTJCWVRFLCAiVHg1MTJCeXRlIiksCisJTUlCX0RFU0NfRVhUKDEsIEFSODIzNl9TVEFUU19UWDEwMjRCWVRFLCAiVHgxMDI0Qnl0ZSIpLAorCU1JQl9ERVNDX0VYVCgxLCBBUjgyMzZfU1RBVFNfVFgxNTE4QllURSwgIlR4MTUxOEJ5dGUiKSwKKwlNSUJfREVTQ19FWFQoMSwgQVI4MjM2X1NUQVRTX1RYTUFYQllURSwgIlR4TWF4Qnl0ZSIpLAorCU1JQl9ERVNDX0VYVCgxLCBBUjgyMzZfU1RBVFNfVFhPVkVSU0laRSwgIlR4T3ZlclNpemUiKSwKKwlNSUJfREVTQ19CQVNJQygyLCBBUjgyMzZfU1RBVFNfVFhCWVRFLCAiVHhCeXRlIiksCisJTUlCX0RFU0NfRVhUKDEsIEFSODIzNl9TVEFUU19UWENPTExJU0lPTiwgIlR4Q29sbGlzaW9uIiksCisJTUlCX0RFU0NfRVhUKDEsIEFSODIzNl9TVEFUU19UWEFCT1JUQ09MLCAiVHhBYm9ydENvbCIpLAorCU1JQl9ERVNDX0VYVCgxLCBBUjgyMzZfU1RBVFNfVFhNVUxUSUNPTCwgIlR4TXVsdGlDb2wiKSwKKwlNSUJfREVTQ19FWFQoMSwgQVI4MjM2X1NUQVRTX1RYU0lOR0xFQ09MLCAiVHhTaW5nbGVDb2wiKSwKKwlNSUJfREVTQ19FWFQoMSwgQVI4MjM2X1NUQVRTX1RYRVhDREVGRVIsICJUeEV4Y0RlZmVyIiksCisJTUlCX0RFU0NfRVhUKDEsIEFSODIzNl9TVEFUU19UWERFRkVSLCAiVHhEZWZlciIpLAorCU1JQl9ERVNDX0VYVCgxLCBBUjgyMzZfU1RBVFNfVFhMQVRFQ09MLCAiVHhMYXRlQ29sIiksCit9OworCitzdGF0aWMgREVGSU5FX01VVEVYKGFyOHh4eF9kZXZfbGlzdF9sb2NrKTsKK3N0YXRpYyBMSVNUX0hFQUQoYXI4eHh4X2Rldl9saXN0KTsKKworc3RhdGljIHZvaWQKK2FyOHh4eF9taWJfc3RhcnQoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2KTsKK3N0YXRpYyB2b2lkCithcjh4eHhfbWliX3N0b3Aoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2KTsKKworLyogaW5zcGlyZWQgYnkgcGh5X3BvbGxfcmVzZXQgaW4gZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyAqLworc3RhdGljIGludAorYXI4eHh4X3BoeV9wb2xsX3Jlc2V0KHN0cnVjdCBtaWlfYnVzICpidXMpCit7CisgICAgICAgIHVuc2lnbmVkIGludCBzbGVlcF9tc2VjcyA9IDIwOworICAgICAgICBpbnQgcmV0LCBlbGFwc2VkLCBpOworCisgICAgICAgIGZvciAoZWxhcHNlZCA9IHNsZWVwX21zZWNzOyBlbGFwc2VkIDw9IDYwMDsKKwkgICAgIGVsYXBzZWQgKz0gc2xlZXBfbXNlY3MpIHsKKyAgICAgICAgICAgICAgICBtc2xlZXAoc2xlZXBfbXNlY3MpOworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBBUjhYWFhfTlVNX1BIWVM7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gbWRpb2J1c19yZWFkKGJ1cywgaSwgTUlJX0JNQ1IpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXQgJiBCTUNSX1JFU0VUKQorCQkJCWJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gQVI4WFhYX05VTV9QSFlTIC0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gLUVUSU1FRE9VVDsKK30KKworc3RhdGljIGludAorYXI4eHh4X3BoeV9jaGVja19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCit7CisJaW50IHJldDsKKworCWlmIChwaHlkZXYtPmF1dG9uZWcgIT0gQVVUT05FR19FTkFCTEUpCisJCXJldHVybiAwOworCS8qCisJICogQk1DUl9BTkVOQUJMRSBtaWdodCBoYXZlIGJlZW4gY2xlYXJlZAorCSAqIGJ5IHBoeV9pbml0X2h3IGluIGNlcnRhaW4ga2VybmVsIHZlcnNpb25zCisJICogdGhlcmVmb3JlIGNoZWNrIGZvciBpdAorCSAqLworCXJldCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWlmIChyZXQgJiBCTUNSX0FORU5BQkxFKQorCQlyZXR1cm4gMDsKKworCWRldl9pbmZvKCZwaHlkZXYtPm1kaW8uZGV2LCAiQU5FRyBkaXNhYmxlZCwgcmUtZW5hYmxpbmcgLi4uXG4iKTsKKwlyZXQgfD0gQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUOworCXJldHVybiBwaHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgcmV0KTsKK30KKwordm9pZAorYXI4eHh4X3BoeV9pbml0KHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgbWlpX2J1cyAqYnVzOworCisJYnVzID0gcHJpdi0+c3dfbWlpX2J1cyA/OiBwcml2LT5taWlfYnVzOworCWZvciAoaSA9IDA7IGkgPCBBUjhYWFhfTlVNX1BIWVM7IGkrKykgeworCQlpZiAocHJpdi0+Y2hpcC0+cGh5X2ZpeHVwKQorCQkJcHJpdi0+Y2hpcC0+cGh5X2ZpeHVwKHByaXYsIGkpOworCisJCS8qIGluaXRpYWxpemUgdGhlIHBvcnQgaXRzZWxmICovCisJCW1kaW9idXNfd3JpdGUoYnVzLCBpLCBNSUlfQURWRVJUSVNFLAorCQkJQURWRVJUSVNFX0FMTCB8IEFEVkVSVElTRV9QQVVTRV9DQVAgfCBBRFZFUlRJU0VfUEFVU0VfQVNZTSk7CisJCWlmIChhcjh4eHhfaGFzX2dpZ2UocHJpdikpCisJCQltZGlvYnVzX3dyaXRlKGJ1cywgaSwgTUlJX0NUUkwxMDAwLCBBRFZFUlRJU0VfMTAwMEZVTEwpOworCQltZGlvYnVzX3dyaXRlKGJ1cywgaSwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTsKKwl9CisKKwlhcjh4eHhfcGh5X3BvbGxfcmVzZXQoYnVzKTsKK30KKwordTMyCithcjh4eHhfbWlpX3JlYWQzMihzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYsIGludCBwaHlfaWQsIGludCByZWdudW0pCit7CisJc3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtPm1paV9idXM7CisJdTE2IGxvLCBoaTsKKworCWxvID0gYnVzLT5yZWFkKGJ1cywgcGh5X2lkLCByZWdudW0pOworCWhpID0gYnVzLT5yZWFkKGJ1cywgcGh5X2lkLCByZWdudW0gKyAxKTsKKworCXJldHVybiAoaGkgPDwgMTYpIHwgbG87Cit9CisKK3ZvaWQKK2FyOHh4eF9taWlfd3JpdGUzMihzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYsIGludCBwaHlfaWQsIGludCByZWdudW0sIHUzMiB2YWwpCit7CisJc3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtPm1paV9idXM7CisJdTE2IGxvLCBoaTsKKworCWxvID0gdmFsICYgMHhmZmZmOworCWhpID0gKHUxNikgKHZhbCA+PiAxNik7CisKKwlpZiAocHJpdi0+Y2hpcC0+bWlpX2xvX2ZpcnN0KQorCXsKKwkJYnVzLT53cml0ZShidXMsIHBoeV9pZCwgcmVnbnVtLCBsbyk7CisJCWJ1cy0+d3JpdGUoYnVzLCBwaHlfaWQsIHJlZ251bSArIDEsIGhpKTsKKwl9IGVsc2UgeworCQlidXMtPndyaXRlKGJ1cywgcGh5X2lkLCByZWdudW0gKyAxLCBoaSk7CisJCWJ1cy0+d3JpdGUoYnVzLCBwaHlfaWQsIHJlZ251bSwgbG8pOworCX0KK30KKwordTMyCithcjh4eHhfcmVhZChzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYsIGludCByZWcpCit7CisJc3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtPm1paV9idXM7CisJdTE2IHIxLCByMiwgcGFnZTsKKwl1MzIgdmFsOworCisJc3BsaXRfYWRkcigodTMyKSByZWcsICZyMSwgJnIyLCAmcGFnZSk7CisKKwltdXRleF9sb2NrKCZidXMtPm1kaW9fbG9jayk7CisKKwlidXMtPndyaXRlKGJ1cywgMHgxOCwgMCwgcGFnZSk7CisJd2FpdF9mb3JfcGFnZV9zd2l0Y2goKTsKKwl2YWwgPSBhcjh4eHhfbWlpX3JlYWQzMihwcml2LCAweDEwIHwgcjIsIHIxKTsKKworCW11dGV4X3VubG9jaygmYnVzLT5tZGlvX2xvY2spOworCisJcmV0dXJuIHZhbDsKK30KKwordm9pZAorYXI4eHh4X3dyaXRlKHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiwgaW50IHJlZywgdTMyIHZhbCkKK3sKKwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi0+bWlpX2J1czsKKwl1MTYgcjEsIHIyLCBwYWdlOworCisJc3BsaXRfYWRkcigodTMyKSByZWcsICZyMSwgJnIyLCAmcGFnZSk7CisKKwltdXRleF9sb2NrKCZidXMtPm1kaW9fbG9jayk7CisKKwlidXMtPndyaXRlKGJ1cywgMHgxOCwgMCwgcGFnZSk7CisJd2FpdF9mb3JfcGFnZV9zd2l0Y2goKTsKKwlhcjh4eHhfbWlpX3dyaXRlMzIocHJpdiwgMHgxMCB8IHIyLCByMSwgdmFsKTsKKworCW11dGV4X3VubG9jaygmYnVzLT5tZGlvX2xvY2spOworfQorCit1MzIKK2FyOHh4eF9ybXcoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2LCBpbnQgcmVnLCB1MzIgbWFzaywgdTMyIHZhbCkKK3sKKwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi0+bWlpX2J1czsKKwl1MTYgcjEsIHIyLCBwYWdlOworCXUzMiByZXQ7CisKKwlzcGxpdF9hZGRyKCh1MzIpIHJlZywgJnIxLCAmcjIsICZwYWdlKTsKKworCW11dGV4X2xvY2soJmJ1cy0+bWRpb19sb2NrKTsKKworCWJ1cy0+d3JpdGUoYnVzLCAweDE4LCAwLCBwYWdlKTsKKwl3YWl0X2Zvcl9wYWdlX3N3aXRjaCgpOworCisJcmV0ID0gYXI4eHh4X21paV9yZWFkMzIocHJpdiwgMHgxMCB8IHIyLCByMSk7CisJcmV0ICY9IH5tYXNrOworCXJldCB8PSB2YWw7CisJYXI4eHh4X21paV93cml0ZTMyKHByaXYsIDB4MTAgfCByMiwgcjEsIHJldCk7CisKKwltdXRleF91bmxvY2soJmJ1cy0+bWRpb19sb2NrKTsKKworCXJldHVybiByZXQ7Cit9Cit2b2lkCithcjh4eHhfcGh5X2RiZ19yZWFkKHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiwgaW50IHBoeV9hZGRyLAorICAgICAgICAgICB1MTYgZGJnX2FkZHIsIHUxNiAqZGJnX2RhdGEpCit7CisgICAgICAgc3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtPm1paV9idXM7CisKKyAgICAgICBtdXRleF9sb2NrKCZidXMtPm1kaW9fbG9jayk7CisgICAgICAgYnVzLT53cml0ZShidXMsIHBoeV9hZGRyLCBNSUlfQVRIX0RCR19BRERSLCBkYmdfYWRkcik7CisgICAgICAgKmRiZ19kYXRhID0gYnVzLT5yZWFkKGJ1cywgcGh5X2FkZHIsIE1JSV9BVEhfREJHX0RBVEEpOworICAgICAgIG11dGV4X3VubG9jaygmYnVzLT5tZGlvX2xvY2spOworfQorCit2b2lkCithcjh4eHhfcGh5X2RiZ193cml0ZShzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYsIGludCBwaHlfYWRkciwKKwkJICAgICB1MTYgZGJnX2FkZHIsIHUxNiBkYmdfZGF0YSkKK3sKKwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi0+bWlpX2J1czsKKworCW11dGV4X2xvY2soJmJ1cy0+bWRpb19sb2NrKTsKKwlidXMtPndyaXRlKGJ1cywgcGh5X2FkZHIsIE1JSV9BVEhfREJHX0FERFIsIGRiZ19hZGRyKTsKKwlidXMtPndyaXRlKGJ1cywgcGh5X2FkZHIsIE1JSV9BVEhfREJHX0RBVEEsIGRiZ19kYXRhKTsKKwltdXRleF91bmxvY2soJmJ1cy0+bWRpb19sb2NrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCithcjh4eHhfcGh5X21tZF9wcmVwKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgdTE2IGFkZHIsIHUxNiByZWcpCit7CisJYnVzLT53cml0ZShidXMsIHBoeV9hZGRyLCBNSUlfQVRIX01NRF9BRERSLCBhZGRyKTsKKwlidXMtPndyaXRlKGJ1cywgcGh5X2FkZHIsIE1JSV9BVEhfTU1EX0RBVEEsIHJlZyk7CisJYnVzLT53cml0ZShidXMsIHBoeV9hZGRyLCBNSUlfQVRIX01NRF9BRERSLCBhZGRyIHwgMHg0MDAwKTsKK30KKwordm9pZAorYXI4eHh4X3BoeV9tbWRfd3JpdGUoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2LCBpbnQgcGh5X2FkZHIsIHUxNiBhZGRyLCB1MTYgcmVnLCB1MTYgZGF0YSkKK3sKKwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi0+bWlpX2J1czsKKworCW11dGV4X2xvY2soJmJ1cy0+bWRpb19sb2NrKTsKKwlhcjh4eHhfcGh5X21tZF9wcmVwKGJ1cywgcGh5X2FkZHIsIGFkZHIsIHJlZyk7CisJYnVzLT53cml0ZShidXMsIHBoeV9hZGRyLCBNSUlfQVRIX01NRF9EQVRBLCBkYXRhKTsKKwltdXRleF91bmxvY2soJmJ1cy0+bWRpb19sb2NrKTsKK30KKwordTE2Cithcjh4eHhfcGh5X21tZF9yZWFkKHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiwgaW50IHBoeV9hZGRyLCB1MTYgYWRkciwgdTE2IHJlZykKK3sKKwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi0+bWlpX2J1czsKKwl1MTYgZGF0YTsKKworCW11dGV4X2xvY2soJmJ1cy0+bWRpb19sb2NrKTsKKwlhcjh4eHhfcGh5X21tZF9wcmVwKGJ1cywgcGh5X2FkZHIsIGFkZHIsIHJlZyk7CisJZGF0YSA9IGJ1cy0+cmVhZChidXMsIHBoeV9hZGRyLCBNSUlfQVRIX01NRF9EQVRBKTsKKwltdXRleF91bmxvY2soJmJ1cy0+bWRpb19sb2NrKTsKKworCXJldHVybiBkYXRhOworfQorCitzdGF0aWMgaW50Cithcjh4eHhfcmVnX3dhaXQoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbCwKKwkJdW5zaWduZWQgdGltZW91dCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKyspIHsKKwkJdTMyIHQ7CisKKwkJdCA9IGFyOHh4eF9yZWFkKHByaXYsIHJlZyk7CisJCWlmICgodCAmIG1hc2spID09IHZhbCkKKwkJCXJldHVybiAwOworCisJCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKKwkJY29uZF9yZXNjaGVkKCk7CisJfQorCisJcmV0dXJuIC1FVElNRURPVVQ7Cit9CisKK3N0YXRpYyBpbnQKK2FyOHh4eF9taWJfb3Aoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2LCB1MzIgb3ApCit7CisJdW5zaWduZWQgbWliX2Z1bmMgPSBwcml2LT5jaGlwLT5taWJfZnVuYzsKKwlpbnQgcmV0OworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmcHJpdi0+bWliX2xvY2spOworCisJLyogQ2FwdHVyZSB0aGUgaGFyZHdhcmUgc3RhdGlzdGljcyBmb3IgYWxsIHBvcnRzICovCisJYXI4eHh4X3Jtdyhwcml2LCBtaWJfZnVuYywgQVI4MjE2X01JQl9GVU5DLCAob3AgPDwgQVI4MjE2X01JQl9GVU5DX1MpKTsKKworCS8qIFdhaXQgZm9yIHRoZSBjYXB0dXJpbmcgdG8gY29tcGxldGUuICovCisJcmV0ID0gYXI4eHh4X3JlZ193YWl0KHByaXYsIG1pYl9mdW5jLCBBUjgyMTZfTUlCX0JVU1ksIDAsIDEwKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXJldCA9IDA7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50Cithcjh4eHhfbWliX2NhcHR1cmUoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2KQoreworCXJldHVybiBhcjh4eHhfbWliX29wKHByaXYsIEFSODIxNl9NSUJfRlVOQ19DQVBUVVJFKTsKK30KKworc3RhdGljIGludAorYXI4eHh4X21pYl9mbHVzaChzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYpCit7CisJcmV0dXJuIGFyOHh4eF9taWJfb3AocHJpdiwgQVI4MjE2X01JQl9GVU5DX0ZMVVNIKTsKK30KKworc3RhdGljIHZvaWQKK2FyOHh4eF9taWJfZmV0Y2hfcG9ydF9zdGF0KHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGJvb2wgZmx1c2gpCit7CisJdW5zaWduZWQgaW50IGJhc2U7CisJdTY0ICptaWJfc3RhdHM7CisJaW50IGk7CisKKwlXQVJOX09OKHBvcnQgPj0gcHJpdi0+ZGV2LnBvcnRzKTsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnByaXYtPm1pYl9sb2NrKTsKKworCWJhc2UgPSBwcml2LT5jaGlwLT5yZWdfcG9ydF9zdGF0c19zdGFydCArCisJICAgICAgIHByaXYtPmNoaXAtPnJlZ19wb3J0X3N0YXRzX2xlbmd0aCAqIHBvcnQ7CisKKwltaWJfc3RhdHMgPSAmcHJpdi0+bWliX3N0YXRzW3BvcnQgKiBwcml2LT5jaGlwLT5udW1fbWlic107CisJZm9yIChpID0gMDsgaSA8IHByaXYtPmNoaXAtPm51bV9taWJzOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IGFyOHh4eF9taWJfZGVzYyAqbWliOworCQl1NjQgdDsKKworCQltaWIgPSAmcHJpdi0+Y2hpcC0+bWliX2RlY3NbaV07CisJCWlmIChtaWItPnR5cGUgPiBwcml2LT5taWJfdHlwZSkKKwkJCWNvbnRpbnVlOworCQl0ID0gYXI4eHh4X3JlYWQocHJpdiwgYmFzZSArIG1pYi0+b2Zmc2V0KTsKKwkJaWYgKG1pYi0+c2l6ZSA9PSAyKSB7CisJCQl1NjQgaGk7CisKKwkJCWhpID0gYXI4eHh4X3JlYWQocHJpdiwgYmFzZSArIG1pYi0+b2Zmc2V0ICsgNCk7CisJCQl0IHw9IGhpIDw8IDMyOworCQl9CisKKwkJaWYgKGZsdXNoKQorCQkJbWliX3N0YXRzW2ldID0gMDsKKwkJZWxzZQorCQkJbWliX3N0YXRzW2ldICs9IHQ7CisJCWNvbmRfcmVzY2hlZCgpOworCX0KK30KKworc3RhdGljIHZvaWQKK2FyODIxNl9yZWFkX3BvcnRfbGluayhzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYsIGludCBwb3J0LAorCQkgICAgICBzdHJ1Y3Qgc3dpdGNoX3BvcnRfbGluayAqbGluaykKK3sKKwl1MzIgc3RhdHVzOworCXUzMiBzcGVlZDsKKworCW1lbXNldChsaW5rLCAnXDAnLCBzaXplb2YoKmxpbmspKTsKKworCXN0YXR1cyA9IHByaXYtPmNoaXAtPnJlYWRfcG9ydF9zdGF0dXMocHJpdiwgcG9ydCk7CisKKwlsaW5rLT5hbmVnID0gISEoc3RhdHVzICYgQVI4MjE2X1BPUlRfU1RBVFVTX0xJTktfQVVUTyk7CisJaWYgKGxpbmstPmFuZWcpIHsKKwkJbGluay0+bGluayA9ICEhKHN0YXR1cyAmIEFSODIxNl9QT1JUX1NUQVRVU19MSU5LX1VQKTsKKwl9IGVsc2UgeworCQlsaW5rLT5saW5rID0gdHJ1ZTsKKworCQlpZiAocHJpdi0+Z2V0X3BvcnRfbGluaykgeworCQkJaW50IGVycjsKKworCQkJZXJyID0gcHJpdi0+Z2V0X3BvcnRfbGluayhwb3J0KTsKKwkJCWlmIChlcnIgPj0gMCkKKwkJCQlsaW5rLT5saW5rID0gISFlcnI7CisJCX0KKwl9CisKKwlpZiAoIWxpbmstPmxpbmspCisJCXJldHVybjsKKworCWxpbmstPmR1cGxleCA9ICEhKHN0YXR1cyAmIEFSODIxNl9QT1JUX1NUQVRVU19EVVBMRVgpOworCWxpbmstPnR4X2Zsb3cgPSAhIShzdGF0dXMgJiBBUjgyMTZfUE9SVF9TVEFUVVNfVFhGTE9XKTsKKwlsaW5rLT5yeF9mbG93ID0gISEoc3RhdHVzICYgQVI4MjE2X1BPUlRfU1RBVFVTX1JYRkxPVyk7CisKKwlpZiAobGluay0+YW5lZyAmJiBsaW5rLT5kdXBsZXggJiYgcHJpdi0+Y2hpcC0+cmVhZF9wb3J0X2VlZV9zdGF0dXMpCisJCWxpbmstPmVlZSA9IHByaXYtPmNoaXAtPnJlYWRfcG9ydF9lZWVfc3RhdHVzKHByaXYsIHBvcnQpOworCisJc3BlZWQgPSAoc3RhdHVzICYgQVI4MjE2X1BPUlRfU1RBVFVTX1NQRUVEKSA+PgorCQkgQVI4MjE2X1BPUlRfU1RBVFVTX1NQRUVEX1M7CisKKwlzd2l0Y2ggKHNwZWVkKSB7CisJY2FzZSBBUjgyMTZfUE9SVF9TUEVFRF8xME06CisJCWxpbmstPnNwZWVkID0gU1dJVENIX1BPUlRfU1BFRURfMTA7CisJCWJyZWFrOworCWNhc2UgQVI4MjE2X1BPUlRfU1BFRURfMTAwTToKKwkJbGluay0+c3BlZWQgPSBTV0lUQ0hfUE9SVF9TUEVFRF8xMDA7CisJCWJyZWFrOworCWNhc2UgQVI4MjE2X1BPUlRfU1BFRURfMTAwME06CisJCWxpbmstPnNwZWVkID0gU1dJVENIX1BPUlRfU1BFRURfMTAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbGluay0+c3BlZWQgPSBTV0lUQ0hfUE9SVF9TUEVFRF9VTktOT1dOOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCithcjgyMTZfbWFuZ2xlX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGFyOHh4eF9wcml2ICpwcml2ID0gZGV2LT5waHlfcHRyOworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKworCWlmICh1bmxpa2VseSghcHJpdikpCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoIXByaXYtPnZsYW4pCisJCWdvdG8gc2VuZDsKKworCWlmICh1bmxpa2VseShza2JfaGVhZHJvb20oc2tiKSA8IDIpKSB7CisJCWlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMiwgMCwgR0ZQX0FUT01JQykgPCAwKQorCQkJZ290byBlcnJvcjsKKwl9CisKKwlidWYgPSBza2JfcHVzaChza2IsIDIpOworCWJ1ZlswXSA9IDB4MTA7CisJYnVmWzFdID0gMHg4MDsKKworc2VuZDoKKwlyZXR1cm4gc2tiOworCitlcnJvcjoKKwlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZAorYXI4MjE2X21hbmdsZV9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdjsKKwl1bnNpZ25lZCBjaGFyICpidWY7CisJaW50IHBvcnQsIHZsYW47CisKKwlwcml2ID0gZGV2LT5waHlfcHRyOworCWlmICghcHJpdikKKwkJcmV0dXJuOworCisJLyogZG9uJ3Qgc3RyaXAgdGhlIGhlYWRlciBpZiB2bGFuIG1vZGUgaXMgZGlzYWJsZWQgKi8KKwlpZiAoIXByaXYtPnZsYW4pCisJCXJldHVybjsKKworCS8qIHN0cmlwIGhlYWRlciwgZ2V0IHZsYW4gaWQgKi8KKwlidWYgPSBza2ItPmRhdGE7CisJc2tiX3B1bGwoc2tiLCAyKTsKKworCS8qIGNoZWNrIGZvciB2bGFuIGhlYWRlciBwcmVzZW5jZSAqLworCWlmICgoYnVmWzEyICsgMl0gIT0gMHg4MSkgfHwgKGJ1ZlsxMyArIDJdICE9IDB4MDApKQorCQlyZXR1cm47CisKKwlwb3J0ID0gYnVmWzBdICYgMHg3OworCisJLyogbm8gbmVlZCB0byBmaXggdXAgcGFja2V0cyBjb21pbmcgZnJvbSBhIHRhZ2dlZCBzb3VyY2UgKi8KKwlpZiAocHJpdi0+dmxhbl90YWdnZWQgJiAoMSA8PCBwb3J0KSkKKwkJcmV0dXJuOworCisJLyogbG9va3VwIHBvcnQgdmlkIGZyb20gbG9jYWwgdGFibGUsIHRoZSBzd2l0Y2ggcGFzc2VzIGFuIGludmFsaWQgdmxhbiBpZCAqLworCXZsYW4gPSBwcml2LT52bGFuX2lkW3ByaXYtPnB2aWRbcG9ydF1dOworCisJYnVmWzE0ICsgMl0gJj0gMHhmMDsKKwlidWZbMTQgKyAyXSB8PSB2bGFuID4+IDg7CisJYnVmWzE1ICsgMl0gPSB2bGFuICYgMHhmZjsKK30KKworaW50CithcjgyMTZfd2FpdF9iaXQoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2LCBpbnQgcmVnLCB1MzIgbWFzaywgdTMyIHZhbCkKK3sKKwlpbnQgdGltZW91dCA9IDIwOworCXUzMiB0ID0gMDsKKworCXdoaWxlICgxKSB7CisJCXQgPSBhcjh4eHhfcmVhZChwcml2LCByZWcpOworCQlpZiAoKHQgJiBtYXNrKSA9PSB2YWwpCisJCQlyZXR1cm4gMDsKKworCQlpZiAodGltZW91dC0tIDw9IDApCisJCQlicmVhazsKKworCQl1ZGVsYXkoMTApOworCQljb25kX3Jlc2NoZWQoKTsKKwl9CisKKwlwcl9lcnIoImFyODIxNjogdGltZW91dCBvbiByZWcgJTA4eDogJTA4eCAmICUwOHggIT0gJTA4eFxuIiwKKwkgICAgICAgKHVuc2lnbmVkIGludCkgcmVnLCB0LCBtYXNrLCB2YWwpOworCXJldHVybiAtRVRJTUVET1VUOworfQorCitzdGF0aWMgdm9pZAorYXI4MjE2X3Z0dV9vcChzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYsIHUzMiBvcCwgdTMyIHZhbCkKK3sKKwlpZiAoYXI4MjE2X3dhaXRfYml0KHByaXYsIEFSODIxNl9SRUdfVlRVLCBBUjgyMTZfVlRVX0FDVElWRSwgMCkpCisJCXJldHVybjsKKwlpZiAoKG9wICYgQVI4MjE2X1ZUVV9PUCkgPT0gQVI4MjE2X1ZUVV9PUF9MT0FEKSB7CisJCXZhbCAmPSBBUjgyMTZfVlRVREFUQV9NRU1CRVI7CisJCXZhbCB8PSBBUjgyMTZfVlRVREFUQV9WQUxJRDsKKwkJYXI4eHh4X3dyaXRlKHByaXYsIEFSODIxNl9SRUdfVlRVX0RBVEEsIHZhbCk7CisJfQorCW9wIHw9IEFSODIxNl9WVFVfQUNUSVZFOworCWFyOHh4eF93cml0ZShwcml2LCBBUjgyMTZfUkVHX1ZUVSwgb3ApOworfQorCitzdGF0aWMgdm9pZAorYXI4MjE2X3Z0dV9mbHVzaChzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYpCit7CisJYXI4MjE2X3Z0dV9vcChwcml2LCBBUjgyMTZfVlRVX09QX0ZMVVNILCAwKTsKK30KKworc3RhdGljIHZvaWQKK2FyODIxNl92dHVfbG9hZF92bGFuKHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiwgdTMyIHZpZCwgdTMyIHBvcnRfbWFzaykKK3sKKwl1MzIgb3A7CisKKwlvcCA9IEFSODIxNl9WVFVfT1BfTE9BRCB8ICh2aWQgPDwgQVI4MjE2X1ZUVV9WSURfUyk7CisJYXI4MjE2X3Z0dV9vcChwcml2LCBvcCwgcG9ydF9tYXNrKTsKK30KKworc3RhdGljIGludAorYXI4MjE2X2F0dV9mbHVzaChzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYpCit7CisJaW50IHJldDsKKworCXJldCA9IGFyODIxNl93YWl0X2JpdChwcml2LCBBUjgyMTZfUkVHX0FUVV9GVU5DMCwgQVI4MjE2X0FUVV9BQ1RJVkUsIDApOworCWlmICghcmV0KQorCQlhcjh4eHhfd3JpdGUocHJpdiwgQVI4MjE2X1JFR19BVFVfRlVOQzAsIEFSODIxNl9BVFVfT1BfRkxVU0ggfAorCQkJCQkJCSBBUjgyMTZfQVRVX0FDVElWRSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CithcjgyMTZfYXR1X2ZsdXNoX3BvcnQoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2LCBpbnQgcG9ydCkKK3sKKwl1MzIgdDsKKwlpbnQgcmV0OworCisJcmV0ID0gYXI4MjE2X3dhaXRfYml0KHByaXYsIEFSODIxNl9SRUdfQVRVX0ZVTkMwLCBBUjgyMTZfQVRVX0FDVElWRSwgMCk7CisJaWYgKCFyZXQpIHsKKwkJdCA9IChwb3J0IDw8IEFSODIxNl9BVFVfUE9SVF9OVU1fUykgfCBBUjgyMTZfQVRVX09QX0ZMVVNIX1BPUlQ7CisJCXQgfD0gQVI4MjE2X0FUVV9BQ1RJVkU7CisJCWFyOHh4eF93cml0ZShwcml2LCBBUjgyMTZfUkVHX0FUVV9GVU5DMCwgdCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHUzMgorYXI4MjE2X3JlYWRfcG9ydF9zdGF0dXMoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2LCBpbnQgcG9ydCkKK3sKKwlyZXR1cm4gYXI4eHh4X3JlYWQocHJpdiwgQVI4MjE2X1JFR19QT1JUX1NUQVRVUyhwb3J0KSk7Cit9CisKK3N0YXRpYyB2b2lkCitfX2FyODIxNl9zZXR1cF9wb3J0KHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIHUzMiBtZW1iZXJzLAorCQkgICAgYm9vbCBhdGhfaGRyX2VuKQoreworCXUzMiBoZWFkZXI7CisJdTMyIGVncmVzcywgaW5ncmVzczsKKwl1MzIgcHZpZDsKKworCWlmIChwcml2LT52bGFuKSB7CisJCXB2aWQgPSBwcml2LT52bGFuX2lkW3ByaXYtPnB2aWRbcG9ydF1dOworCQlpZiAocHJpdi0+dmxhbl90YWdnZWQgJiAoMSA8PCBwb3J0KSkKKwkJCWVncmVzcyA9IEFSODIxNl9PVVRfQUREX1ZMQU47CisJCWVsc2UKKwkJCWVncmVzcyA9IEFSODIxNl9PVVRfU1RSSVBfVkxBTjsKKwkJaW5ncmVzcyA9IEFSODIxNl9JTl9TRUNVUkU7CisJfSBlbHNlIHsKKwkJcHZpZCA9IHBvcnQ7CisJCWVncmVzcyA9IEFSODIxNl9PVVRfS0VFUDsKKwkJaW5ncmVzcyA9IEFSODIxNl9JTl9QT1JUX09OTFk7CisJfQorCisJaGVhZGVyID0gYXRoX2hkcl9lbiA/IEFSODIxNl9QT1JUX0NUUkxfSEVBREVSIDogMDsKKworCWFyOHh4eF9ybXcocHJpdiwgQVI4MjE2X1JFR19QT1JUX0NUUkwocG9ydCksCisJCSAgIEFSODIxNl9QT1JUX0NUUkxfTEVBUk4gfCBBUjgyMTZfUE9SVF9DVFJMX1ZMQU5fTU9ERSB8CisJCSAgIEFSODIxNl9QT1JUX0NUUkxfU0lOR0xFX1ZMQU4gfCBBUjgyMTZfUE9SVF9DVFJMX1NUQVRFIHwKKwkJICAgQVI4MjE2X1BPUlRfQ1RSTF9IRUFERVIgfCBBUjgyMTZfUE9SVF9DVFJMX0xFQVJOX0xPQ0ssCisJCSAgIEFSODIxNl9QT1JUX0NUUkxfTEVBUk4gfCBoZWFkZXIgfAorCQkgICAoZWdyZXNzIDw8IEFSODIxNl9QT1JUX0NUUkxfVkxBTl9NT0RFX1MpIHwKKwkJICAgKEFSODIxNl9QT1JUX1NUQVRFX0ZPUldBUkQgPDwgQVI4MjE2X1BPUlRfQ1RSTF9TVEFURV9TKSk7CisKKwlhcjh4eHhfcm13KHByaXYsIEFSODIxNl9SRUdfUE9SVF9WTEFOKHBvcnQpLAorCQkgICBBUjgyMTZfUE9SVF9WTEFOX0RFU1RfUE9SVFMgfCBBUjgyMTZfUE9SVF9WTEFOX01PREUgfAorCQkgICBBUjgyMTZfUE9SVF9WTEFOX0RFRkFVTFRfSUQsCisJCSAgIChtZW1iZXJzIDw8IEFSODIxNl9QT1JUX1ZMQU5fREVTVF9QT1JUU19TKSB8CisJCSAgIChpbmdyZXNzIDw8IEFSODIxNl9QT1JUX1ZMQU5fTU9ERV9TKSB8CisJCSAgIChwdmlkIDw8IEFSODIxNl9QT1JUX1ZMQU5fREVGQVVMVF9JRF9TKSk7Cit9CisKK3N0YXRpYyB2b2lkCithcjgyMTZfc2V0dXBfcG9ydChzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYsIGludCBwb3J0LCB1MzIgbWVtYmVycykKK3sKKwlyZXR1cm4gX19hcjgyMTZfc2V0dXBfcG9ydChwcml2LCBwb3J0LCBtZW1iZXJzLAorCQkJCSAgIGNoaXBfaXNfYXI4MjE2KHByaXYpICYmIHByaXYtPnZsYW4gJiYKKwkJCQkgICBwb3J0ID09IEFSODIxNl9QT1JUX0NQVSk7Cit9CisKK3N0YXRpYyBpbnQKK2FyODIxNl9od19pbml0KHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdikKK3sKKwlpZiAocHJpdi0+aW5pdGlhbGl6ZWQpCisJCXJldHVybiAwOworCisJYXI4eHh4X3dyaXRlKHByaXYsIEFSODIxNl9SRUdfQ1RSTCwgQVI4MjE2X0NUUkxfUkVTRVQpOworCWFyOHh4eF9yZWdfd2FpdChwcml2LCBBUjgyMTZfUkVHX0NUUkwsIEFSODIxNl9DVFJMX1JFU0VULCAwLCAxMDAwKTsKKworCWFyOHh4eF9waHlfaW5pdChwcml2KTsKKworCXByaXYtPmluaXRpYWxpemVkID0gdHJ1ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2FyODIxNl9pbml0X2dsb2JhbHMoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2KQoreworCS8qIHN0YW5kYXJkIGF0aGVyb3MgbWFnaWMgKi8KKwlhcjh4eHhfd3JpdGUocHJpdiwgMHgzOCwgMHhjMDAwMDUwZSk7CisKKwlhcjh4eHhfcm13KHByaXYsIEFSODIxNl9SRUdfR0xPQkFMX0NUUkwsCisJCSAgIEFSODIxNl9HQ1RSTF9NVFUsIDE1MTggKyA4ICsgMik7Cit9CisKK3N0YXRpYyB2b2lkCitfX2FyODIxNl9pbml0X3BvcnQoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2LCBpbnQgcG9ydCwKKwkJICAgYm9vbCBjcHVfZ2UsIGJvb2wgZmxvd19lbikKK3sKKwkvKiBFbmFibGUgcG9ydCBsZWFybmluZyBhbmQgdHggKi8KKwlhcjh4eHhfd3JpdGUocHJpdiwgQVI4MjE2X1JFR19QT1JUX0NUUkwocG9ydCksCisJCUFSODIxNl9QT1JUX0NUUkxfTEVBUk4gfAorCQkoNCA8PCBBUjgyMTZfUE9SVF9DVFJMX1NUQVRFX1MpKTsKKworCWFyOHh4eF93cml0ZShwcml2LCBBUjgyMTZfUkVHX1BPUlRfVkxBTihwb3J0KSwgMCk7CisKKwlpZiAocG9ydCA9PSBBUjgyMTZfUE9SVF9DUFUpIHsKKwkJYXI4eHh4X3dyaXRlKHByaXYsIEFSODIxNl9SRUdfUE9SVF9TVEFUVVMocG9ydCksCisJCQlBUjgyMTZfUE9SVF9TVEFUVVNfTElOS19VUCB8CisJCQkoY3B1X2dlID8gQVI4MjE2X1BPUlRfU1BFRURfMTAwME0gOiBBUjgyMTZfUE9SVF9TUEVFRF8xMDBNKSB8CisJCQlBUjgyMTZfUE9SVF9TVEFUVVNfVFhNQUMgfAorCQkJQVI4MjE2X1BPUlRfU1RBVFVTX1JYTUFDIHwKKwkJCShmbG93X2VuID8gQVI4MjE2X1BPUlRfU1RBVFVTX1JYRkxPVyA6IDApIHwKKwkJCShmbG93X2VuID8gQVI4MjE2X1BPUlRfU1RBVFVTX1RYRkxPVyA6IDApIHwKKwkJCUFSODIxNl9QT1JUX1NUQVRVU19EVVBMRVgpOworCX0gZWxzZSB7CisJCWFyOHh4eF93cml0ZShwcml2LCBBUjgyMTZfUkVHX1BPUlRfU1RBVFVTKHBvcnQpLAorCQkJQVI4MjE2X1BPUlRfU1RBVFVTX0xJTktfQVVUTyk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYXI4MjE2X2luaXRfcG9ydChzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYsIGludCBwb3J0KQoreworCV9fYXI4MjE2X2luaXRfcG9ydChwcml2LCBwb3J0LCBhcjh4eHhfaGFzX2dpZ2UocHJpdiksCisJCQkgICBjaGlwX2lzX2FyODMxNihwcml2KSk7Cit9CisKK3N0YXRpYyB2b2lkCithcjgyMTZfd2FpdF9hdHVfcmVhZHkoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2LCB1MTYgcjIsIHUxNiByMSkKK3sKKwlpbnQgdGltZW91dCA9IDIwOworCisJd2hpbGUgKGFyOHh4eF9taWlfcmVhZDMyKHByaXYsIHIyLCByMSkgJiBBUjgyMTZfQVRVX0FDVElWRSAmJiAtLXRpbWVvdXQpIHsKKwkJdWRlbGF5KDEwKTsKKwkJY29uZF9yZXNjaGVkKCk7CisJfQorCisJaWYgKCF0aW1lb3V0KQorCQlwcl9lcnIoImFyODIxNjogdGltZW91dCB3YWl0aW5nIGZvciBhdHUgdG8gYmVjb21lIHJlYWR5XG4iKTsKK30KKworc3RhdGljIHZvaWQgYXI4MjE2X2dldF9hcmxfZW50cnkoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2LAorCQkJCSBzdHJ1Y3QgYXJsX2VudHJ5ICphLCB1MzIgKnN0YXR1cywgZW51bSBhcmxfb3Agb3ApCit7CisJc3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtPm1paV9idXM7CisJdTE2IHIyLCBwYWdlOworCXUxNiByMV9mdW5jMCwgcjFfZnVuYzEsIHIxX2Z1bmMyOworCXUzMiB0LCB2YWwwLCB2YWwxLCB2YWwyOworCisJc3BsaXRfYWRkcihBUjgyMTZfUkVHX0FUVV9GVU5DMCwgJnIxX2Z1bmMwLCAmcjIsICZwYWdlKTsKKwlyMiB8PSAweDEwOworCisJcjFfZnVuYzEgPSAoQVI4MjE2X1JFR19BVFVfRlVOQzEgPj4gMSkgJiAweDFlOworCXIxX2Z1bmMyID0gKEFSODIxNl9SRUdfQVRVX0ZVTkMyID4+IDEpICYgMHgxZTsKKworCXN3aXRjaCAob3ApIHsKKwljYXNlIEFSOFhYWF9BUkxfSU5JVElBTElaRToKKwkJLyogYWxsIEFUVSByZWdpc3RlcnMgYXJlIG9uIHRoZSBzYW1lIHBhZ2UKKwkJKiB0aGVyZWZvcmUgc2V0IHBhZ2Ugb25seSBvbmNlCisJCSovCisJCWJ1cy0+d3JpdGUoYnVzLCAweDE4LCAwLCBwYWdlKTsKKwkJd2FpdF9mb3JfcGFnZV9zd2l0Y2goKTsKKworCQlhcjgyMTZfd2FpdF9hdHVfcmVhZHkocHJpdiwgcjIsIHIxX2Z1bmMwKTsKKworCQlhcjh4eHhfbWlpX3dyaXRlMzIocHJpdiwgcjIsIHIxX2Z1bmMwLCBBUjgyMTZfQVRVX09QX0dFVF9ORVhUKTsKKwkJYXI4eHh4X21paV93cml0ZTMyKHByaXYsIHIyLCByMV9mdW5jMSwgMCk7CisJCWFyOHh4eF9taWlfd3JpdGUzMihwcml2LCByMiwgcjFfZnVuYzIsIDApOworCQlicmVhazsKKwljYXNlIEFSOFhYWF9BUkxfR0VUX05FWFQ6CisJCXQgPSBhcjh4eHhfbWlpX3JlYWQzMihwcml2LCByMiwgcjFfZnVuYzApOworCQl0IHw9IEFSODIxNl9BVFVfQUNUSVZFOworCQlhcjh4eHhfbWlpX3dyaXRlMzIocHJpdiwgcjIsIHIxX2Z1bmMwLCB0KTsKKwkJYXI4MjE2X3dhaXRfYXR1X3JlYWR5KHByaXYsIHIyLCByMV9mdW5jMCk7CisKKwkJdmFsMCA9IGFyOHh4eF9taWlfcmVhZDMyKHByaXYsIHIyLCByMV9mdW5jMCk7CisJCXZhbDEgPSBhcjh4eHhfbWlpX3JlYWQzMihwcml2LCByMiwgcjFfZnVuYzEpOworCQl2YWwyID0gYXI4eHh4X21paV9yZWFkMzIocHJpdiwgcjIsIHIxX2Z1bmMyKTsKKworCQkqc3RhdHVzID0gKHZhbDIgJiBBUjgyMTZfQVRVX1NUQVRVUykgPj4gQVI4MjE2X0FUVV9TVEFUVVNfUzsKKwkJaWYgKCEqc3RhdHVzKQorCQkJYnJlYWs7CisKKwkJYS0+cG9ydG1hcCA9ICh2YWwyICYgQVI4MjE2X0FUVV9QT1JUUykgPj4gQVI4MjE2X0FUVV9QT1JUU19TOworCQlhLT5tYWNbMF0gPSAodmFsMCAmIEFSODIxNl9BVFVfQUREUjUpID4+IEFSODIxNl9BVFVfQUREUjVfUzsKKwkJYS0+bWFjWzFdID0gKHZhbDAgJiBBUjgyMTZfQVRVX0FERFI0KSA+PiBBUjgyMTZfQVRVX0FERFI0X1M7CisJCWEtPm1hY1syXSA9ICh2YWwxICYgQVI4MjE2X0FUVV9BRERSMykgPj4gQVI4MjE2X0FUVV9BRERSM19TOworCQlhLT5tYWNbM10gPSAodmFsMSAmIEFSODIxNl9BVFVfQUREUjIpID4+IEFSODIxNl9BVFVfQUREUjJfUzsKKwkJYS0+bWFjWzRdID0gKHZhbDEgJiBBUjgyMTZfQVRVX0FERFIxKSA+PiBBUjgyMTZfQVRVX0FERFIxX1M7CisJCWEtPm1hY1s1XSA9ICh2YWwxICYgQVI4MjE2X0FUVV9BRERSMCkgPj4gQVI4MjE2X0FUVV9BRERSMF9TOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK2FyODIxNl9waHlfcmVhZChzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYsIGludCBhZGRyLCBpbnQgcmVnbnVtKQoreworCXUzMiB0LCB2YWwgPSAweGZmZmY7CisJaW50IGVycjsKKworCWlmIChhZGRyID49IEFSODIxNl9OVU1fUE9SVFMpCisJCXJldHVybiAweGZmZmY7CisJdCA9IChyZWdudW0gPDwgQVI4MjE2X01ESU9fQ1RSTF9SRUdfQUREUl9TKSB8CisJICAgIChhZGRyIDw8IEFSODIxNl9NRElPX0NUUkxfUEhZX0FERFJfUykgfAorCSAgICBBUjgyMTZfTURJT19DVFJMX01BU1RFUl9FTiB8CisJICAgIEFSODIxNl9NRElPX0NUUkxfQlVTWSB8CisJICAgIEFSODIxNl9NRElPX0NUUkxfQ01EX1JFQUQ7CisKKwlhcjh4eHhfd3JpdGUocHJpdiwgQVI4MjE2X1JFR19NRElPX0NUUkwsIHQpOworCWVyciA9IGFyOHh4eF9yZWdfd2FpdChwcml2LCBBUjgyMTZfUkVHX01ESU9fQ1RSTCwKKwkJCSAgICAgIEFSODIxNl9NRElPX0NUUkxfQlVTWSwgMCwgNSk7CisJaWYgKCFlcnIpCisJCXZhbCA9IGFyOHh4eF9yZWFkKHByaXYsIEFSODIxNl9SRUdfTURJT19DVFJMKTsKKworCXJldHVybiB2YWwgJiBBUjgyMTZfTURJT19DVFJMX0RBVEFfTTsKK30KKworc3RhdGljIGludAorYXI4MjE2X3BoeV93cml0ZShzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYsIGludCBhZGRyLCBpbnQgcmVnbnVtLCB1MTYgdmFsKQoreworCXUzMiB0OworCWludCByZXQ7CisKKwlpZiAoYWRkciA+PSBBUjgyMTZfTlVNX1BPUlRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXQgPSAoYWRkciA8PCBBUjgyMTZfTURJT19DVFJMX1BIWV9BRERSX1MpIHwKKwkgICAgKHJlZ251bSA8PCBBUjgyMTZfTURJT19DVFJMX1JFR19BRERSX1MpIHwKKwkgICAgQVI4MjE2X01ESU9fQ1RSTF9NQVNURVJfRU4gfAorCSAgICBBUjgyMTZfTURJT19DVFJMX0JVU1kgfAorCSAgICBBUjgyMTZfTURJT19DVFJMX0NNRF9XUklURSB8CisJICAgIHZhbDsKKworCWFyOHh4eF93cml0ZShwcml2LCBBUjgyMTZfUkVHX01ESU9fQ1RSTCwgdCk7CisJcmV0ID0gYXI4eHh4X3JlZ193YWl0KHByaXYsIEFSODIxNl9SRUdfTURJT19DVFJMLAorCQkJICAgICAgQVI4MjE2X01ESU9fQ1RSTF9CVVNZLCAwLCA1KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2FyODIyOV9od19pbml0KHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdikKK3sKKwlpbnQgcGh5X2lmX21vZGU7CisKKwlpZiAocHJpdi0+aW5pdGlhbGl6ZWQpCisJCXJldHVybiAwOworCisJYXI4eHh4X3dyaXRlKHByaXYsIEFSODIxNl9SRUdfQ1RSTCwgQVI4MjE2X0NUUkxfUkVTRVQpOworCWFyOHh4eF9yZWdfd2FpdChwcml2LCBBUjgyMTZfUkVHX0NUUkwsIEFSODIxNl9DVFJMX1JFU0VULCAwLCAxMDAwKTsKKworCXBoeV9pZl9tb2RlID0gb2ZfZ2V0X3BoeV9tb2RlKHByaXYtPnBkZXYtPm9mX25vZGUpOworCisJaWYgKHBoeV9pZl9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJKSB7CisJCWFyOHh4eF93cml0ZShwcml2LCBBUjgyMjlfUkVHX09QRVJfTU9ERTAsCisJCQkJIEFSODIyOV9PUEVSX01PREUwX01BQ19HTUlJX0VOKTsKKwl9IGVsc2UgaWYgKHBoeV9pZl9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkpIHsKKwkJYXI4eHh4X3dyaXRlKHByaXYsIEFSODIyOV9SRUdfT1BFUl9NT0RFMCwKKwkJCQkgQVI4MjI5X09QRVJfTU9ERTBfUEhZX01JSV9FTik7CisJfSBlbHNlIHsKKwkJcHJfZXJyKCJhcjgyMjk6IHVuc3VwcG9ydGVkIG1paSBtb2RlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHByaXYtPnBvcnQ0X3BoeSkgeworCQlhcjh4eHhfd3JpdGUocHJpdiwgQVI4MjI5X1JFR19PUEVSX01PREUxLAorCQkJICAgICBBUjgyMjlfUkVHX09QRVJfTU9ERTFfUEhZNF9NSUlfRU4pOworCQkvKiBkaXNhYmxlIHBvcnQ1IHRvIHByZXZlbnQgbWlpIGNvbmZsaWN0ICovCisJCWFyOHh4eF93cml0ZShwcml2LCBBUjgyMTZfUkVHX1BPUlRfU1RBVFVTKDUpLCAwKTsKKwl9CisKKwlhcjh4eHhfcGh5X2luaXQocHJpdik7CisKKwlwcml2LT5pbml0aWFsaXplZCA9IHRydWU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCithcjgyMjlfaW5pdF9nbG9iYWxzKHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdikKK3sKKworCS8qIEVuYWJsZSBDUFUgcG9ydCwgYW5kIGRpc2FibGUgbWlycm9yIHBvcnQgKi8KKwlhcjh4eHhfd3JpdGUocHJpdiwgQVI4MjE2X1JFR19HTE9CQUxfQ1BVUE9SVCwKKwkJICAgICBBUjgyMTZfR0xPQkFMX0NQVVBPUlRfRU4gfAorCQkgICAgICgxNSA8PCBBUjgyMTZfR0xPQkFMX0NQVVBPUlRfTUlSUk9SX1BPUlRfUykpOworCisJLyogU2V0dXAgVEFHIHByaW9yaXR5IG1hcHBpbmcgKi8KKwlhcjh4eHhfd3JpdGUocHJpdiwgQVI4MjE2X1JFR19UQUdfUFJJT1JJVFksIDB4ZmE1MCk7CisKKwkvKiBFbmFibGUgYWdpbmcsIE1BQyByZXBsYWNpbmcgKi8KKwlhcjh4eHhfd3JpdGUocHJpdiwgQVI4MjE2X1JFR19BVFVfQ1RSTCwKKwkJICAgICAweDJiIC8qIDUgbWluIGFnZSB0aW1lICovIHwKKwkJICAgICBBUjgyMTZfQVRVX0NUUkxfQUdFX0VOIHwKKwkJICAgICBBUjgyMTZfQVRVX0NUUkxfTEVBUk5fQ0hBTkdFKTsKKworCS8qIEVuYWJsZSBBUlAgZnJhbWUgYWNrbm93bGVkZ2UgKi8KKwlhcjh4eHhfcmVnX3NldChwcml2LCBBUjgyMjlfUkVHX1FNX0NUUkwsCisJCSAgICAgICBBUjgyMjlfUU1fQ1RSTF9BUlBfRU4pOworCisJLyoKKwkgKiBFbmFibGUgQnJvYWRjYXN0L3Vua25vd24gbXVsdGljYXN0IGFuZCB1bmljYXN0IGZyYW1lcworCSAqIHRyYW5zbWl0dGVkIHRvIHRoZSBDUFUgcG9ydC4KKwkgKi8KKwlhcjh4eHhfcmVnX3NldChwcml2LCBBUjgyMTZfUkVHX0ZMT09EX01BU0ssCisJCSAgICAgICBBUjgyMjlfRkxPT0RfTUFTS19CQ19EUCgwKSB8CisJCSAgICAgICBBUjgyMjlfRkxPT0RfTUFTS19NQ19EUCgwKSB8CisJCSAgICAgICBBUjgyMjlfRkxPT0RfTUFTS19VQ19EUCgwKSk7CisKKwkvKiBzZXR1cCBNVFUgKi8KKwlhcjh4eHhfcm13KHByaXYsIEFSODIxNl9SRUdfR0xPQkFMX0NUUkwsCisJCSAgIEFSODIzNl9HQ1RSTF9NVFUsIEFSODIzNl9HQ1RSTF9NVFUpOworCisJLyogRW5hYmxlIE1JQiBjb3VudGVycyAqLworCWFyOHh4eF9yZWdfc2V0KHByaXYsIEFSODIxNl9SRUdfTUlCX0ZVTkMsCisJCSAgICAgICBBUjgyMzZfTUlCX0VOKTsKKworCS8qIHNldHVwIFNlcnZpY2UgVEFHICovCisJYXI4eHh4X3Jtdyhwcml2LCBBUjgyMTZfUkVHX1NFUlZJQ0VfVEFHLCBBUjgyMTZfU0VSVklDRV9UQUdfTSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkCithcjgyMjlfaW5pdF9wb3J0KHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiwgaW50IHBvcnQpCit7CisJX19hcjgyMTZfaW5pdF9wb3J0KHByaXYsIHBvcnQsIHRydWUsIHRydWUpOworfQorCisKK3N0YXRpYyBpbnQKK2FyNzI0MHN3X2h3X2luaXQoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2KQoreworCWlmIChwcml2LT5pbml0aWFsaXplZCkKKwkJcmV0dXJuIDA7CisKKwlhcjh4eHhfd3JpdGUocHJpdiwgQVI4MjE2X1JFR19DVFJMLCBBUjgyMTZfQ1RSTF9SRVNFVCk7CisJYXI4eHh4X3JlZ193YWl0KHByaXYsIEFSODIxNl9SRUdfQ1RSTCwgQVI4MjE2X0NUUkxfUkVTRVQsIDAsIDEwMDApOworCisJcHJpdi0+cG9ydDRfcGh5ID0gMTsKKwkvKiBkaXNhYmxlIHBvcnQ1IHRvIHByZXZlbnQgbWlpIGNvbmZsaWN0ICovCisJYXI4eHh4X3dyaXRlKHByaXYsIEFSODIxNl9SRUdfUE9SVF9TVEFUVVMoNSksIDApOworCisJYXI4eHh4X3BoeV9pbml0KHByaXYpOworCisJcHJpdi0+aW5pdGlhbGl6ZWQgPSB0cnVlOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorYXI3MjQwc3dfaW5pdF9nbG9iYWxzKHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdikKK3sKKworCS8qIEVuYWJsZSBDUFUgcG9ydCwgYW5kIGRpc2FibGUgbWlycm9yIHBvcnQgKi8KKwlhcjh4eHhfd3JpdGUocHJpdiwgQVI4MjE2X1JFR19HTE9CQUxfQ1BVUE9SVCwKKwkJICAgICBBUjgyMTZfR0xPQkFMX0NQVVBPUlRfRU4gfAorCQkgICAgICgxNSA8PCBBUjgyMTZfR0xPQkFMX0NQVVBPUlRfTUlSUk9SX1BPUlRfUykpOworCisJLyogU2V0dXAgVEFHIHByaW9yaXR5IG1hcHBpbmcgKi8KKwlhcjh4eHhfd3JpdGUocHJpdiwgQVI4MjE2X1JFR19UQUdfUFJJT1JJVFksIDB4ZmE1MCk7CisKKwkvKiBFbmFibGUgQVJQIGZyYW1lIGFja25vd2xlZGdlLCBhZ2luZywgTUFDIHJlcGxhY2luZyAqLworCWFyOHh4eF93cml0ZShwcml2LCBBUjgyMTZfUkVHX0FUVV9DVFJMLAorCQlBUjgyMTZfQVRVX0NUUkxfUkVTRVJWRUQgfAorCQkweDJiIC8qIDUgbWluIGFnZSB0aW1lICovIHwKKwkJQVI4MjE2X0FUVV9DVFJMX0FHRV9FTiB8CisJCUFSODIxNl9BVFVfQ1RSTF9BUlBfRU4gfAorCQlBUjgyMTZfQVRVX0NUUkxfTEVBUk5fQ0hBTkdFKTsKKworCS8qIEVuYWJsZSBCcm9hZGNhc3QgZnJhbWVzIHRyYW5zbWl0dGVkIHRvIHRoZSBDUFUgKi8KKwlhcjh4eHhfcmVnX3NldChwcml2LCBBUjgyMTZfUkVHX0ZMT09EX01BU0ssCisJCSAgICAgICBBUjgyMTZfRk1fQ1BVX0JST0FEQ0FTVF9FTik7CisKKwkvKiBzZXR1cCBNVFUgKi8KKwlhcjh4eHhfcm13KHByaXYsIEFSODIxNl9SRUdfR0xPQkFMX0NUUkwsCisJCSAgIEFSODIxNl9HQ1RSTF9NVFUsCisJCSAgIEFSODIxNl9HQ1RSTF9NVFUpOworCisJLyogc2V0dXAgU2VydmljZSBUQUcgKi8KKwlhcjh4eHhfcm13KHByaXYsIEFSODIxNl9SRUdfU0VSVklDRV9UQUcsIEFSODIxNl9TRVJWSUNFX1RBR19NLCAwKTsKK30KKworc3RhdGljIHZvaWQKK2FyNzI0MHN3X3NldHVwX3BvcnQoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2LCBpbnQgcG9ydCwgdTMyIG1lbWJlcnMpCit7CisJcmV0dXJuIF9fYXI4MjE2X3NldHVwX3BvcnQocHJpdiwgcG9ydCwgbWVtYmVycywgZmFsc2UpOworfQorCitzdGF0aWMgdm9pZAorYXI4MjM2X3NldHVwX3BvcnQoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2LCBpbnQgcG9ydCwgdTMyIG1lbWJlcnMpCit7CisJdTMyIGVncmVzcywgaW5ncmVzczsKKwl1MzIgcHZpZDsKKworCWlmIChwcml2LT52bGFuKSB7CisJCXB2aWQgPSBwcml2LT52bGFuX2lkW3ByaXYtPnB2aWRbcG9ydF1dOworCQlpZiAocHJpdi0+dmxhbl90YWdnZWQgJiAoMSA8PCBwb3J0KSkKKwkJCWVncmVzcyA9IEFSODIxNl9PVVRfQUREX1ZMQU47CisJCWVsc2UKKwkJCWVncmVzcyA9IEFSODIxNl9PVVRfU1RSSVBfVkxBTjsKKwkJaW5ncmVzcyA9IEFSODIxNl9JTl9TRUNVUkU7CisJfSBlbHNlIHsKKwkJcHZpZCA9IHBvcnQ7CisJCWVncmVzcyA9IEFSODIxNl9PVVRfS0VFUDsKKwkJaW5ncmVzcyA9IEFSODIxNl9JTl9QT1JUX09OTFk7CisJfQorCisJYXI4eHh4X3Jtdyhwcml2LCBBUjgyMTZfUkVHX1BPUlRfQ1RSTChwb3J0KSwKKwkJICAgQVI4MjE2X1BPUlRfQ1RSTF9MRUFSTiB8IEFSODIxNl9QT1JUX0NUUkxfVkxBTl9NT0RFIHwKKwkJICAgQVI4MjE2X1BPUlRfQ1RSTF9TSU5HTEVfVkxBTiB8IEFSODIxNl9QT1JUX0NUUkxfU1RBVEUgfAorCQkgICBBUjgyMTZfUE9SVF9DVFJMX0hFQURFUiB8IEFSODIxNl9QT1JUX0NUUkxfTEVBUk5fTE9DSywKKwkJICAgQVI4MjE2X1BPUlRfQ1RSTF9MRUFSTiB8CisJCSAgIChlZ3Jlc3MgPDwgQVI4MjE2X1BPUlRfQ1RSTF9WTEFOX01PREVfUykgfAorCQkgICAoQVI4MjE2X1BPUlRfU1RBVEVfRk9SV0FSRCA8PCBBUjgyMTZfUE9SVF9DVFJMX1NUQVRFX1MpKTsKKworCWFyOHh4eF9ybXcocHJpdiwgQVI4MjM2X1JFR19QT1JUX1ZMQU4ocG9ydCksCisJCSAgIEFSODIzNl9QT1JUX1ZMQU5fREVGQVVMVF9JRCwKKwkJICAgKHB2aWQgPDwgQVI4MjM2X1BPUlRfVkxBTl9ERUZBVUxUX0lEX1MpKTsKKworCWFyOHh4eF9ybXcocHJpdiwgQVI4MjM2X1JFR19QT1JUX1ZMQU4yKHBvcnQpLAorCQkgICBBUjgyMzZfUE9SVF9WTEFOMl9WTEFOX01PREUgfAorCQkgICBBUjgyMzZfUE9SVF9WTEFOMl9NRU1CRVIsCisJCSAgIChpbmdyZXNzIDw8IEFSODIzNl9QT1JUX1ZMQU4yX1ZMQU5fTU9ERV9TKSB8CisJCSAgIChtZW1iZXJzIDw8IEFSODIzNl9QT1JUX1ZMQU4yX01FTUJFUl9TKSk7Cit9CisKK3N0YXRpYyB2b2lkCithcjgyMzZfaW5pdF9nbG9iYWxzKHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdikKK3sKKwkvKiBlbmFibGUganVtYm8gZnJhbWVzICovCisJYXI4eHh4X3Jtdyhwcml2LCBBUjgyMTZfUkVHX0dMT0JBTF9DVFJMLAorCQkgICBBUjgzMTZfR0NUUkxfTVRVLCA5MDE4ICsgOCArIDIpOworCisJLyogZW5hYmxlIGNwdSBwb3J0IHRvIHJlY2VpdmUgYXJwIGZyYW1lcyAqLworCWFyOHh4eF9yZWdfc2V0KHByaXYsIEFSODIxNl9SRUdfQVRVX0NUUkwsCisJCSAgIEFSODIzNl9BVFVfQ1RSTF9SRVMpOworCisJLyoKKwkgKiBFbmFibGUgQnJvYWRjYXN0L3Vua25vd24gbXVsdGljYXN0IGFuZCB1bmljYXN0IGZyYW1lcworCSAqIHRyYW5zbWl0dGVkIHRvIHRoZSBDUFUgcG9ydC4KKwkgKi8KKwlhcjh4eHhfcmVnX3NldChwcml2LCBBUjgyMTZfUkVHX0ZMT09EX01BU0ssCisJCSAgICAgICBBUjgyMjlfRkxPT0RfTUFTS19CQ19EUCgwKSB8CisJCSAgICAgICBBUjgyMjlfRkxPT0RfTUFTS19NQ19EUCgwKSB8CisJCSAgICAgICBBUjgyMjlfRkxPT0RfTUFTS19VQ19EUCgwKSk7CisKKwkvKiBFbmFibGUgTUlCIGNvdW50ZXJzICovCisJYXI4eHh4X3Jtdyhwcml2LCBBUjgyMTZfUkVHX01JQl9GVU5DLCBBUjgyMTZfTUlCX0ZVTkMgfCBBUjgyMzZfTUlCX0VOLAorCQkgICAoQVI4MjE2X01JQl9GVU5DX05PX09QIDw8IEFSODIxNl9NSUJfRlVOQ19TKSB8CisJCSAgIEFSODIzNl9NSUJfRU4pOworfQorCitzdGF0aWMgaW50CithcjgzMTZfaHdfaW5pdChzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYpCit7CisJdTMyIHZhbCwgbmV3dmFsOworCisJdmFsID0gYXI4eHh4X3JlYWQocHJpdiwgQVI4MzE2X1JFR19QT1NUUklQKTsKKworCWlmIChwcml2LT5waHktPmludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUkpIHsKKwkJaWYgKHByaXYtPnBvcnQ0X3BoeSkgeworCQkJLyogdmFsdWUgdGFrZW4gZnJvbSBVYmlxdWl0aSBSb3V0ZXJTdGF0aW9uIFBybyAqLworCQkJbmV3dmFsID0gMHg4MTQ2MWJlYTsKKwkJCXByX2luZm8oImFyODMxNjogVXNpbmcgcG9ydCA0IGFzIFBIWVxuIik7CisJCX0gZWxzZSB7CisJCQluZXd2YWwgPSAweDAxMjYxYmUyOworCQkJcHJfaW5mbygiYXI4MzE2OiBVc2luZyBwb3J0IDQgYXMgc3dpdGNoIHBvcnRcbiIpOworCQl9CisJfSBlbHNlIGlmIChwcml2LT5waHktPmludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfR01JSSkgeworCQkvKiB2YWx1ZSB0YWtlbiBmcm9tIEFWTSBGcml0eiFCb3ggNzM5MCBzb3VyY2VzICovCisJCW5ld3ZhbCA9IDB4MDEwZTViNzE7CisJfSBlbHNlIHsKKwkJLyogbm8ga25vd24gdmFsdWUgZm9yIHBoeSBpbnRlcmZhY2UgKi8KKwkJcHJfZXJyKCJhcjgzMTY6IHVuc3VwcG9ydGVkIG1paSBtb2RlOiAlZC5cbiIsCisJCSAgICAgICBwcml2LT5waHktPmludGVyZmFjZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh2YWwgPT0gbmV3dmFsKQorCQlnb3RvIG91dDsKKworCWFyOHh4eF93cml0ZShwcml2LCBBUjgzMTZfUkVHX1BPU1RSSVAsIG5ld3ZhbCk7CisKKwlpZiAocHJpdi0+cG9ydDRfcGh5ICYmCisJICAgIHByaXYtPnBoeS0+aW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSSkgeworCQkvKiB3b3JrIGFyb3VuZCBmb3IgcGh5NCByZ21paSBtb2RlICovCisJCWFyOHh4eF9waHlfZGJnX3dyaXRlKHByaXYsIDQsIDB4MTIsIDB4NDgwYyk7CisJCS8qIHJ4IGRlbGF5ICovCisJCWFyOHh4eF9waHlfZGJnX3dyaXRlKHByaXYsIDQsIDB4MCwgMHg4MjRlKTsKKwkJLyogdHggZGVsYXkgKi8KKwkJYXI4eHh4X3BoeV9kYmdfd3JpdGUocHJpdiwgNCwgMHg1LCAweDNkNDcpOworCQltc2xlZXAoMTAwMCk7CisJfQorCisJYXI4eHh4X3BoeV9pbml0KHByaXYpOworCitvdXQ6CisJcHJpdi0+aW5pdGlhbGl6ZWQgPSB0cnVlOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorYXI4MzE2X2luaXRfZ2xvYmFscyhzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYpCit7CisJLyogc3RhbmRhcmQgYXRoZXJvcyBtYWdpYyAqLworCWFyOHh4eF93cml0ZShwcml2LCAweDM4LCAweGMwMDAwNTBlKTsKKworCS8qIGVuYWJsZSBjcHUgcG9ydCB0byByZWNlaXZlIG11bHRpY2FzdCBhbmQgYnJvYWRjYXN0IGZyYW1lcyAqLworCWFyOHh4eF93cml0ZShwcml2LCBBUjgyMTZfUkVHX0ZMT09EX01BU0ssIDB4MDAzZjAwM2YpOworCisJLyogZW5hYmxlIGp1bWJvIGZyYW1lcyAqLworCWFyOHh4eF9ybXcocHJpdiwgQVI4MjE2X1JFR19HTE9CQUxfQ1RSTCwKKwkJICAgQVI4MzE2X0dDVFJMX01UVSwgOTAxOCArIDggKyAyKTsKKworCS8qIEVuYWJsZSBNSUIgY291bnRlcnMgKi8KKwlhcjh4eHhfcm13KHByaXYsIEFSODIxNl9SRUdfTUlCX0ZVTkMsIEFSODIxNl9NSUJfRlVOQyB8IEFSODIzNl9NSUJfRU4sCisJCSAgIChBUjgyMTZfTUlCX0ZVTkNfTk9fT1AgPDwgQVI4MjE2X01JQl9GVU5DX1MpIHwKKwkJICAgQVI4MjM2X01JQl9FTik7Cit9CisKK2ludAorYXI4eHh4X3N3X3NldF92bGFuKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYgPSBzd2Rldl90b19hcjh4eHgoZGV2KTsKKwlwcml2LT52bGFuID0gISF2YWwtPnZhbHVlLmk7CisJcmV0dXJuIDA7Cit9CisKK2ludAorYXI4eHh4X3N3X2dldF92bGFuKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYgPSBzd2Rldl90b19hcjh4eHgoZGV2KTsKKwl2YWwtPnZhbHVlLmkgPSBwcml2LT52bGFuOworCXJldHVybiAwOworfQorCisKK2ludAorYXI4eHh4X3N3X3NldF9wdmlkKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsIGludCBwb3J0LCBpbnQgdmxhbikKK3sKKwlzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYgPSBzd2Rldl90b19hcjh4eHgoZGV2KTsKKworCS8qIG1ha2Ugc3VyZSBubyBpbnZhbGlkIFBWSURzIGdldCBzZXQgKi8KKworCWlmICh2bGFuIDwgMCB8fCB2bGFuID49IGRldi0+dmxhbnMgfHwKKwkgICAgcG9ydCA8IDAgfHwgcG9ydCA+PSBBUjhYMTZfTUFYX1BPUlRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByaXYtPnB2aWRbcG9ydF0gPSB2bGFuOworCXJldHVybiAwOworfQorCitpbnQKK2FyOHh4eF9zd19nZXRfcHZpZChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBpbnQgcG9ydCwgaW50ICp2bGFuKQoreworCXN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiA9IHN3ZGV2X3RvX2FyOHh4eChkZXYpOworCisJaWYgKHBvcnQgPCAwIHx8IHBvcnQgPj0gQVI4WDE2X01BWF9QT1JUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkqdmxhbiA9IHByaXYtPnB2aWRbcG9ydF07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2FyOHh4eF9zd19zZXRfdmlkKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiA9IHN3ZGV2X3RvX2FyOHh4eChkZXYpOworCisJaWYgKHZhbC0+cG9ydF92bGFuID49IGRldi0+dmxhbnMpCisJCXJldHVybiAtRUlOVkFMOworCisJcHJpdi0+dmxhbl9pZFt2YWwtPnBvcnRfdmxhbl0gPSB2YWwtPnZhbHVlLmk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2FyOHh4eF9zd19nZXRfdmlkKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiA9IHN3ZGV2X3RvX2FyOHh4eChkZXYpOworCXZhbC0+dmFsdWUuaSA9IHByaXYtPnZsYW5faWRbdmFsLT5wb3J0X3ZsYW5dOworCXJldHVybiAwOworfQorCitpbnQKK2FyOHh4eF9zd19nZXRfcG9ydF9saW5rKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsIGludCBwb3J0LAorCQkJc3RydWN0IHN3aXRjaF9wb3J0X2xpbmsgKmxpbmspCit7CisJc3RydWN0IGFyOHh4eF9wcml2ICpwcml2ID0gc3dkZXZfdG9fYXI4eHh4KGRldik7CisKKwlhcjgyMTZfcmVhZF9wb3J0X2xpbmsocHJpdiwgcG9ydCwgbGluayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2FyOHh4eF9zd19nZXRfcG9ydHMoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYgPSBzd2Rldl90b19hcjh4eHgoZGV2KTsKKwl1OCBwb3J0czsKKwlpbnQgaTsKKworCWlmICh2YWwtPnBvcnRfdmxhbiA+PSBkZXYtPnZsYW5zKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBvcnRzID0gcHJpdi0+dmxhbl90YWJsZVt2YWwtPnBvcnRfdmxhbl07CisJdmFsLT5sZW4gPSAwOworCWZvciAoaSA9IDA7IGkgPCBkZXYtPnBvcnRzOyBpKyspIHsKKwkJc3RydWN0IHN3aXRjaF9wb3J0ICpwOworCisJCWlmICghKHBvcnRzICYgKDEgPDwgaSkpKQorCQkJY29udGludWU7CisKKwkJcCA9ICZ2YWwtPnZhbHVlLnBvcnRzW3ZhbC0+bGVuKytdOworCQlwLT5pZCA9IGk7CisJCWlmIChwcml2LT52bGFuX3RhZ2dlZCAmICgxIDw8IGkpKQorCQkJcC0+ZmxhZ3MgPSAoMSA8PCBTV0lUQ0hfUE9SVF9GTEFHX1RBR0dFRCk7CisJCWVsc2UKKwkJCXAtPmZsYWdzID0gMDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2FyOHh4eF9zd19zZXRfcG9ydHMoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYgPSBzd2Rldl90b19hcjh4eHgoZGV2KTsKKwl1OCAqdnQgPSAmcHJpdi0+dmxhbl90YWJsZVt2YWwtPnBvcnRfdmxhbl07CisJaW50IGksIGo7CisKKwkqdnQgPSAwOworCWZvciAoaSA9IDA7IGkgPCB2YWwtPmxlbjsgaSsrKSB7CisJCXN0cnVjdCBzd2l0Y2hfcG9ydCAqcCA9ICZ2YWwtPnZhbHVlLnBvcnRzW2ldOworCisJCWlmIChwLT5mbGFncyAmICgxIDw8IFNXSVRDSF9QT1JUX0ZMQUdfVEFHR0VEKSkgeworCQkJcHJpdi0+dmxhbl90YWdnZWQgfD0gKDEgPDwgcC0+aWQpOworCQl9IGVsc2UgeworCQkJcHJpdi0+dmxhbl90YWdnZWQgJj0gfigxIDw8IHAtPmlkKTsKKwkJCXByaXYtPnB2aWRbcC0+aWRdID0gdmFsLT5wb3J0X3ZsYW47CisKKwkJCS8qIG1ha2Ugc3VyZSB0aGF0IGFuIHVudGFnZ2VkIHBvcnQgZG9lcyBub3QKKwkJCSAqIGFwcGVhciBpbiBvdGhlciB2bGFucyAqLworCQkJZm9yIChqID0gMDsgaiA8IGRldi0+dmxhbnM7IGorKykgeworCQkJCWlmIChqID09IHZhbC0+cG9ydF92bGFuKQorCQkJCQljb250aW51ZTsKKwkJCQlwcml2LT52bGFuX3RhYmxlW2pdICY9IH4oMSA8PCBwLT5pZCk7CisJCQl9CisJCX0KKworCQkqdnQgfD0gMSA8PCBwLT5pZDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCithcjgyMTZfc2V0X21pcnJvcl9yZWdzKHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdikKK3sKKwlpbnQgcG9ydDsKKworCS8qIHJlc2V0IGFsbCBtaXJyb3IgcmVnaXN0ZXJzICovCisJYXI4eHh4X3Jtdyhwcml2LCBBUjgyMTZfUkVHX0dMT0JBTF9DUFVQT1JULAorCQkgICBBUjgyMTZfR0xPQkFMX0NQVVBPUlRfTUlSUk9SX1BPUlQsCisJCSAgICgweEYgPDwgQVI4MjE2X0dMT0JBTF9DUFVQT1JUX01JUlJPUl9QT1JUX1MpKTsKKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgQVI4MjE2X05VTV9QT1JUUzsgcG9ydCsrKSB7CisJCWFyOHh4eF9yZWdfY2xlYXIocHJpdiwgQVI4MjE2X1JFR19QT1JUX0NUUkwocG9ydCksCisJCQkgICBBUjgyMTZfUE9SVF9DVFJMX01JUlJPUl9SWCk7CisKKwkJYXI4eHh4X3JlZ19jbGVhcihwcml2LCBBUjgyMTZfUkVHX1BPUlRfQ1RSTChwb3J0KSwKKwkJCSAgIEFSODIxNl9QT1JUX0NUUkxfTUlSUk9SX1RYKTsKKwl9CisKKwkvKiBub3cgZW5hYmxlIG1pcnJvcmluZyBpZiBuZWNlc3NhcnkgKi8KKwlpZiAocHJpdi0+c291cmNlX3BvcnQgPj0gQVI4MjE2X05VTV9QT1JUUyB8fAorCSAgICBwcml2LT5tb25pdG9yX3BvcnQgPj0gQVI4MjE2X05VTV9QT1JUUyB8fAorCSAgICBwcml2LT5zb3VyY2VfcG9ydCA9PSBwcml2LT5tb25pdG9yX3BvcnQpIHsKKwkJcmV0dXJuOworCX0KKworCWFyOHh4eF9ybXcocHJpdiwgQVI4MjE2X1JFR19HTE9CQUxfQ1BVUE9SVCwKKwkJICAgQVI4MjE2X0dMT0JBTF9DUFVQT1JUX01JUlJPUl9QT1JULAorCQkgICAocHJpdi0+bW9uaXRvcl9wb3J0IDw8IEFSODIxNl9HTE9CQUxfQ1BVUE9SVF9NSVJST1JfUE9SVF9TKSk7CisKKwlpZiAocHJpdi0+bWlycm9yX3J4KQorCQlhcjh4eHhfcmVnX3NldChwcml2LCBBUjgyMTZfUkVHX1BPUlRfQ1RSTChwcml2LT5zb3VyY2VfcG9ydCksCisJCQkgICBBUjgyMTZfUE9SVF9DVFJMX01JUlJPUl9SWCk7CisKKwlpZiAocHJpdi0+bWlycm9yX3R4KQorCQlhcjh4eHhfcmVnX3NldChwcml2LCBBUjgyMTZfUkVHX1BPUlRfQ1RSTChwcml2LT5zb3VyY2VfcG9ydCksCisJCQkgICBBUjgyMTZfUE9SVF9DVFJMX01JUlJPUl9UWCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyCithcjh4eHhfYWdlX3RpbWVfdmFsKGludCBhZ2VfdGltZSkKK3sKKwlyZXR1cm4gKGFnZV90aW1lICsgQVI4WFhYX1JFR19BUkxfQ1RSTF9BR0VfVElNRV9TRUNTIC8gMikgLworCSAgICAgICBBUjhYWFhfUkVHX0FSTF9DVFJMX0FHRV9USU1FX1NFQ1M7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYXI4eHh4X3NldF9hZ2VfdGltZShzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYsIGludCByZWcpCit7CisJdTMyIGFnZV90aW1lID0gYXI4eHh4X2FnZV90aW1lX3ZhbChwcml2LT5hcmxfYWdlX3RpbWUpOworCWFyOHh4eF9ybXcocHJpdiwgcmVnLCBBUjgyMTZfQVRVX0NUUkxfQUdFX1RJTUUsIGFnZV90aW1lIDw8IEFSODIxNl9BVFVfQ1RSTF9BR0VfVElNRV9TKTsKK30KKworaW50Cithcjh4eHhfc3dfaHdfYXBwbHkoc3RydWN0IHN3aXRjaF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYgPSBzd2Rldl90b19hcjh4eHgoZGV2KTsKKwljb25zdCBzdHJ1Y3QgYXI4eHh4X2NoaXAgKmNoaXAgPSBwcml2LT5jaGlwOworCXU4IHBvcnRtYXNrW0FSOFgxNl9NQVhfUE9SVFNdOworCWludCBpLCBqOworCisJbXV0ZXhfbG9jaygmcHJpdi0+cmVnX211dGV4KTsKKwkvKiBmbHVzaCBhbGwgdmxhbiB0cmFuc2xhdGlvbiB1bml0IGVudHJpZXMgKi8KKwlwcml2LT5jaGlwLT52dHVfZmx1c2gocHJpdik7CisKKwltZW1zZXQocG9ydG1hc2ssIDAsIHNpemVvZihwb3J0bWFzaykpOworCWlmICghcHJpdi0+aW5pdCkgeworCQkvKiBjYWxjdWxhdGUgdGhlIHBvcnQgZGVzdGluYXRpb24gbWFza3MgYW5kIGxvYWQgdmxhbnMKKwkJICogaW50byB0aGUgdmxhbiB0cmFuc2xhdGlvbiB1bml0ICovCisJCWZvciAoaiA9IDA7IGogPCBkZXYtPnZsYW5zOyBqKyspIHsKKwkJCXU4IHZwID0gcHJpdi0+dmxhbl90YWJsZVtqXTsKKworCQkJaWYgKCF2cCkKKwkJCQljb250aW51ZTsKKworCQkJZm9yIChpID0gMDsgaSA8IGRldi0+cG9ydHM7IGkrKykgeworCQkJCXU4IG1hc2sgPSAoMSA8PCBpKTsKKwkJCQlpZiAodnAgJiBtYXNrKQorCQkJCQlwb3J0bWFza1tpXSB8PSB2cCAmIH5tYXNrOworCQkJfQorCisJCQljaGlwLT52dHVfbG9hZF92bGFuKHByaXYsIHByaXYtPnZsYW5faWRbal0sCisJCQkJCSAgICBwcml2LT52bGFuX3RhYmxlW2pdKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIHZsYW4gZGlzYWJsZWQ6CisJCSAqIGlzb2xhdGUgYWxsIHBvcnRzLCBidXQgY29ubmVjdCB0aGVtIHRvIHRoZSBjcHUgcG9ydCAqLworCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5wb3J0czsgaSsrKSB7CisJCQlpZiAoaSA9PSBBUjgyMTZfUE9SVF9DUFUpCisJCQkJY29udGludWU7CisKKwkJCXBvcnRtYXNrW2ldID0gMSA8PCBBUjgyMTZfUE9SVF9DUFU7CisJCQlwb3J0bWFza1tBUjgyMTZfUE9SVF9DUFVdIHw9ICgxIDw8IGkpOworCQl9CisJfQorCisJLyogdXBkYXRlIHRoZSBwb3J0IGRlc3RpbmF0aW9uIG1hc2sgcmVnaXN0ZXJzIGFuZCB0YWcgc2V0dGluZ3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5wb3J0czsgaSsrKSB7CisJCWNoaXAtPnNldHVwX3BvcnQocHJpdiwgaSwgcG9ydG1hc2tbaV0pOworCX0KKworCWNoaXAtPnNldF9taXJyb3JfcmVncyhwcml2KTsKKworCS8qIHNldCBhZ2UgdGltZSAqLworCWlmIChjaGlwLT5yZWdfYXJsX2N0cmwpCisJCWFyOHh4eF9zZXRfYWdlX3RpbWUocHJpdiwgY2hpcC0+cmVnX2FybF9jdHJsKTsKKworCW11dGV4X3VubG9jaygmcHJpdi0+cmVnX211dGV4KTsKKwlyZXR1cm4gMDsKK30KKworaW50Cithcjh4eHhfc3dfcmVzZXRfc3dpdGNoKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYpCit7CisJc3RydWN0IGFyOHh4eF9wcml2ICpwcml2ID0gc3dkZXZfdG9fYXI4eHh4KGRldik7CisJY29uc3Qgc3RydWN0IGFyOHh4eF9jaGlwICpjaGlwID0gcHJpdi0+Y2hpcDsKKwlpbnQgaTsKKworCW11dGV4X2xvY2soJnByaXYtPnJlZ19tdXRleCk7CisJbWVtc2V0KCZwcml2LT52bGFuLCAwLCBzaXplb2Yoc3RydWN0IGFyOHh4eF9wcml2KSAtCisJCW9mZnNldG9mKHN0cnVjdCBhcjh4eHhfcHJpdiwgdmxhbikpOworCisJZm9yIChpID0gMDsgaSA8IGRldi0+dmxhbnM7IGkrKykKKwkJcHJpdi0+dmxhbl9pZFtpXSA9IGk7CisKKwkvKiBDb25maWd1cmUgYWxsIHBvcnRzICovCisJZm9yIChpID0gMDsgaSA8IGRldi0+cG9ydHM7IGkrKykKKwkJY2hpcC0+aW5pdF9wb3J0KHByaXYsIGkpOworCisJcHJpdi0+bWlycm9yX3J4ID0gZmFsc2U7CisJcHJpdi0+bWlycm9yX3R4ID0gZmFsc2U7CisJcHJpdi0+c291cmNlX3BvcnQgPSAwOworCXByaXYtPm1vbml0b3JfcG9ydCA9IDA7CisJcHJpdi0+YXJsX2FnZV90aW1lID0gQVI4WFhYX0RFRkFVTFRfQVJMX0FHRV9USU1FOworCisJY2hpcC0+aW5pdF9nbG9iYWxzKHByaXYpOworCWNoaXAtPmF0dV9mbHVzaChwcml2KTsKKworCW11dGV4X3VubG9jaygmcHJpdi0+cmVnX211dGV4KTsKKworCXJldHVybiBjaGlwLT5zd19od19hcHBseShkZXYpOworfQorCitpbnQKK2FyOHh4eF9zd19zZXRfcmVzZXRfbWlicyhzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCSBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiA9IHN3ZGV2X3RvX2FyOHh4eChkZXYpOworCXVuc2lnbmVkIGludCBsZW47CisJaW50IHJldDsKKworCWlmICghYXI4eHh4X2hhc19taWJfY291bnRlcnMocHJpdikpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCW11dGV4X2xvY2soJnByaXYtPm1pYl9sb2NrKTsKKworCWxlbiA9IHByaXYtPmRldi5wb3J0cyAqIHByaXYtPmNoaXAtPm51bV9taWJzICoKKwkgICAgICBzaXplb2YoKnByaXYtPm1pYl9zdGF0cyk7CisJbWVtc2V0KHByaXYtPm1pYl9zdGF0cywgJ1wwJywgbGVuKTsKKwlyZXQgPSBhcjh4eHhfbWliX2ZsdXNoKHByaXYpOworCWlmIChyZXQpCisJCWdvdG8gdW5sb2NrOworCisJcmV0ID0gMDsKKwordW5sb2NrOgorCW11dGV4X3VubG9jaygmcHJpdi0+bWliX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK2ludAorYXI4eHh4X3N3X3NldF9taWJfcG9sbF9pbnRlcnZhbChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCSAgICAgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiA9IHN3ZGV2X3RvX2FyOHh4eChkZXYpOworCisJaWYgKCFhcjh4eHhfaGFzX21pYl9jb3VudGVycyhwcml2KSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJYXI4eHh4X21pYl9zdG9wKHByaXYpOworCXByaXYtPm1pYl9wb2xsX2ludGVydmFsID0gdmFsLT52YWx1ZS5pOworCWFyOHh4eF9taWJfc3RhcnQocHJpdik7CisKKwlyZXR1cm4gMDsKK30KKworaW50Cithcjh4eHhfc3dfZ2V0X21pYl9wb2xsX2ludGVydmFsKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJICAgICAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IGFyOHh4eF9wcml2ICpwcml2ID0gc3dkZXZfdG9fYXI4eHh4KGRldik7CisKKwlpZiAoIWFyOHh4eF9oYXNfbWliX2NvdW50ZXJzKHByaXYpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJdmFsLT52YWx1ZS5pID0gcHJpdi0+bWliX3BvbGxfaW50ZXJ2YWw7CisJcmV0dXJuIDA7Cit9CisKK2ludAorYXI4eHh4X3N3X3NldF9taWJfdHlwZShzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCSAgICAgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiA9IHN3ZGV2X3RvX2FyOHh4eChkZXYpOworCisJaWYgKCFhcjh4eHhfaGFzX21pYl9jb3VudGVycyhwcml2KSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCXByaXYtPm1pYl90eXBlID0gdmFsLT52YWx1ZS5pOworCXJldHVybiAwOworfQorCitpbnQKK2FyOHh4eF9zd19nZXRfbWliX3R5cGUoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkgICAgICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYgPSBzd2Rldl90b19hcjh4eHgoZGV2KTsKKworCWlmICghYXI4eHh4X2hhc19taWJfY291bnRlcnMocHJpdikpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl2YWwtPnZhbHVlLmkgPSBwcml2LT5taWJfdHlwZTsKKwlyZXR1cm4gMDsKK30KKworaW50Cithcjh4eHhfc3dfc2V0X21pcnJvcl9yeF9lbmFibGUoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkgICAgICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYgPSBzd2Rldl90b19hcjh4eHgoZGV2KTsKKworCW11dGV4X2xvY2soJnByaXYtPnJlZ19tdXRleCk7CisJcHJpdi0+bWlycm9yX3J4ID0gISF2YWwtPnZhbHVlLmk7CisJcHJpdi0+Y2hpcC0+c2V0X21pcnJvcl9yZWdzKHByaXYpOworCW11dGV4X3VubG9jaygmcHJpdi0+cmVnX211dGV4KTsKKworCXJldHVybiAwOworfQorCitpbnQKK2FyOHh4eF9zd19nZXRfbWlycm9yX3J4X2VuYWJsZShzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCSAgICAgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiA9IHN3ZGV2X3RvX2FyOHh4eChkZXYpOworCXZhbC0+dmFsdWUuaSA9IHByaXYtPm1pcnJvcl9yeDsKKwlyZXR1cm4gMDsKK30KKworaW50Cithcjh4eHhfc3dfc2V0X21pcnJvcl90eF9lbmFibGUoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkgICAgICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYgPSBzd2Rldl90b19hcjh4eHgoZGV2KTsKKworCW11dGV4X2xvY2soJnByaXYtPnJlZ19tdXRleCk7CisJcHJpdi0+bWlycm9yX3R4ID0gISF2YWwtPnZhbHVlLmk7CisJcHJpdi0+Y2hpcC0+c2V0X21pcnJvcl9yZWdzKHByaXYpOworCW11dGV4X3VubG9jaygmcHJpdi0+cmVnX211dGV4KTsKKworCXJldHVybiAwOworfQorCitpbnQKK2FyOHh4eF9zd19nZXRfbWlycm9yX3R4X2VuYWJsZShzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCSAgICAgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiA9IHN3ZGV2X3RvX2FyOHh4eChkZXYpOworCXZhbC0+dmFsdWUuaSA9IHByaXYtPm1pcnJvcl90eDsKKwlyZXR1cm4gMDsKK30KKworaW50Cithcjh4eHhfc3dfc2V0X21pcnJvcl9tb25pdG9yX3BvcnQoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCQkgIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCQkgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IGFyOHh4eF9wcml2ICpwcml2ID0gc3dkZXZfdG9fYXI4eHh4KGRldik7CisKKwltdXRleF9sb2NrKCZwcml2LT5yZWdfbXV0ZXgpOworCXByaXYtPm1vbml0b3JfcG9ydCA9IHZhbC0+dmFsdWUuaTsKKwlwcml2LT5jaGlwLT5zZXRfbWlycm9yX3JlZ3MocHJpdik7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5yZWdfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK2ludAorYXI4eHh4X3N3X2dldF9taXJyb3JfbW9uaXRvcl9wb3J0KHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkJICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkJICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiA9IHN3ZGV2X3RvX2FyOHh4eChkZXYpOworCXZhbC0+dmFsdWUuaSA9IHByaXYtPm1vbml0b3JfcG9ydDsKKwlyZXR1cm4gMDsKK30KKworaW50Cithcjh4eHhfc3dfc2V0X21pcnJvcl9zb3VyY2VfcG9ydChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJCSBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkJIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IGFyOHh4eF9wcml2ICpwcml2ID0gc3dkZXZfdG9fYXI4eHh4KGRldik7CisKKwltdXRleF9sb2NrKCZwcml2LT5yZWdfbXV0ZXgpOworCXByaXYtPnNvdXJjZV9wb3J0ID0gdmFsLT52YWx1ZS5pOworCXByaXYtPmNoaXAtPnNldF9taXJyb3JfcmVncyhwcml2KTsKKwltdXRleF91bmxvY2soJnByaXYtPnJlZ19tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50Cithcjh4eHhfc3dfZ2V0X21pcnJvcl9zb3VyY2VfcG9ydChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJCSBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkJIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IGFyOHh4eF9wcml2ICpwcml2ID0gc3dkZXZfdG9fYXI4eHh4KGRldik7CisJdmFsLT52YWx1ZS5pID0gcHJpdi0+c291cmNlX3BvcnQ7CisJcmV0dXJuIDA7Cit9CisKK2ludAorYXI4eHh4X3N3X3NldF9wb3J0X3Jlc2V0X21pYihzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkgICAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IGFyOHh4eF9wcml2ICpwcml2ID0gc3dkZXZfdG9fYXI4eHh4KGRldik7CisJaW50IHBvcnQ7CisJaW50IHJldDsKKworCWlmICghYXI4eHh4X2hhc19taWJfY291bnRlcnMocHJpdikpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXBvcnQgPSB2YWwtPnBvcnRfdmxhbjsKKwlpZiAocG9ydCA+PSBkZXYtPnBvcnRzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnByaXYtPm1pYl9sb2NrKTsKKwlyZXQgPSBhcjh4eHhfbWliX2NhcHR1cmUocHJpdik7CisJaWYgKHJldCkKKwkJZ290byB1bmxvY2s7CisKKwlhcjh4eHhfbWliX2ZldGNoX3BvcnRfc3RhdChwcml2LCBwb3J0LCB0cnVlKTsKKworCXJldCA9IDA7CisKK3VubG9jazoKKwltdXRleF91bmxvY2soJnByaXYtPm1pYl9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZAorYXI4eHh4X2J5dGVfdG9fc3RyKGNoYXIgKmJ1ZiwgaW50IGxlbiwgdTY0IGJ5dGUpCit7CisJdW5zaWduZWQgbG9uZyBiOworCWNvbnN0IGNoYXIgKnVuaXQ7CisKKwlpZiAoYnl0ZSA+PSAweDQwMDAwMDAwKSB7IC8qIDEgR2lCICovCisJCWIgPSBieXRlICogMTAgLyAweDQwMDAwMDAwOworCQl1bml0ID0gIkdpQiI7CisJfSBlbHNlIGlmIChieXRlID49IDB4MTAwMDAwKSB7IC8qIDEgTWlCICovCisJCWIgPSBieXRlICogMTAgLyAweDEwMDAwMDsKKwkJdW5pdCA9ICJNaUIiOworCX0gZWxzZSBpZiAoYnl0ZSA+PSAweDQwMCkgeyAvKiAxIEtpQiAqLworCQliID0gYnl0ZSAqIDEwIC8gMHg0MDA7CisJCXVuaXQgPSAiS2lCIjsKKwl9IGVsc2UgeworCQliID0gYnl0ZTsKKwkJdW5pdCA9ICJCeXRlIjsKKwl9CisJaWYgKHN0cmNtcCh1bml0LCAiQnl0ZSIpKQorCQlzbnByaW50ZihidWYsIGxlbiwgIiVsdS4lbHUgJXMiLCBiIC8gMTAsIGIgJSAxMCwgdW5pdCk7CisJZWxzZQorCQlzbnByaW50ZihidWYsIGxlbiwgIiVsdSAlcyIsIGIsIHVuaXQpOworfQorCitpbnQKK2FyOHh4eF9zd19nZXRfcG9ydF9taWIoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJICAgICAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IGFyOHh4eF9wcml2ICpwcml2ID0gc3dkZXZfdG9fYXI4eHh4KGRldik7CisJY29uc3Qgc3RydWN0IGFyOHh4eF9jaGlwICpjaGlwID0gcHJpdi0+Y2hpcDsKKwl1NjQgKm1pYl9zdGF0cywgbWliX2RhdGE7CisJdW5zaWduZWQgaW50IHBvcnQ7CisJaW50IHJldDsKKwljaGFyICpidWYgPSBwcml2LT5idWY7CisJY2hhciBidWYxWzY0XTsKKwljb25zdCBjaGFyICptaWJfbmFtZTsKKwlpbnQgaSwgbGVuID0gMDsKKwlib29sIG1pYl9zdGF0c19lbXB0eSA9IHRydWU7CisKKwlpZiAoIWFyOHh4eF9oYXNfbWliX2NvdW50ZXJzKHByaXYpIHx8ICFwcml2LT5taWJfcG9sbF9pbnRlcnZhbCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJcG9ydCA9IHZhbC0+cG9ydF92bGFuOworCWlmIChwb3J0ID49IGRldi0+cG9ydHMpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bWliX2xvY2spOworCXJldCA9IGFyOHh4eF9taWJfY2FwdHVyZShwcml2KTsKKwlpZiAocmV0KQorCQlnb3RvIHVubG9jazsKKworCWFyOHh4eF9taWJfZmV0Y2hfcG9ydF9zdGF0KHByaXYsIHBvcnQsIGZhbHNlKTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihwcml2LT5idWYpIC0gbGVuLAorCQkJIk1JQiBjb3VudGVyc1xuIik7CisKKwltaWJfc3RhdHMgPSAmcHJpdi0+bWliX3N0YXRzW3BvcnQgKiBjaGlwLT5udW1fbWlic107CisJZm9yIChpID0gMDsgaSA8IGNoaXAtPm51bV9taWJzOyBpKyspIHsKKwkJaWYgKGNoaXAtPm1pYl9kZWNzW2ldLnR5cGUgPiBwcml2LT5taWJfdHlwZSkKKwkJCWNvbnRpbnVlOworCQltaWJfbmFtZSA9IGNoaXAtPm1pYl9kZWNzW2ldLm5hbWU7CisJCW1pYl9kYXRhID0gbWliX3N0YXRzW2ldOworCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YocHJpdi0+YnVmKSAtIGxlbiwKKwkJCQkiJS0xMnM6ICVsbHVcbiIsIG1pYl9uYW1lLCBtaWJfZGF0YSk7CisJCWlmICgoIXN0cmNtcChtaWJfbmFtZSwgIlR4Qnl0ZSIpIHx8CisJCSAgICAhc3RyY21wKG1pYl9uYW1lLCAiUnhHb29kQnl0ZSIpKSAmJgorCQkgICAgbWliX2RhdGEgPj0gMTAyNCkgeworCQkJYXI4eHh4X2J5dGVfdG9fc3RyKGJ1ZjEsIHNpemVvZihidWYxKSwgbWliX2RhdGEpOworCQkJLS1sZW47IC8qIGRpc2NhcmQgbmV3bGluZSBhdCB0aGUgZW5kIG9mIGJ1ZiAqLworCQkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKHByaXYtPmJ1ZikgLSBsZW4sCisJCQkJCSIgKCVzKVxuIiwgYnVmMSk7CisJCX0KKwkJaWYgKG1pYl9zdGF0c19lbXB0eSAmJiBtaWJfZGF0YSkKKwkJCW1pYl9zdGF0c19lbXB0eSA9IGZhbHNlOworCX0KKworCWlmIChtaWJfc3RhdHNfZW1wdHkpCisJCWxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKHByaXYtPmJ1ZiksICJObyBNSUIgZGF0YSIpOworCisJdmFsLT52YWx1ZS5zID0gYnVmOworCXZhbC0+bGVuID0gbGVuOworCisJcmV0ID0gMDsKKwordW5sb2NrOgorCW11dGV4X3VubG9jaygmcHJpdi0+bWliX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK2ludAorYXI4eHh4X3N3X3NldF9hcmxfYWdlX3RpbWUoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYgPSBzd2Rldl90b19hcjh4eHgoZGV2KTsKKwlpbnQgYWdlX3RpbWUgPSB2YWwtPnZhbHVlLmk7CisJdTMyIGFnZV90aW1lX3ZhbDsKKworCWlmIChhZ2VfdGltZSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJYWdlX3RpbWVfdmFsID0gYXI4eHh4X2FnZV90aW1lX3ZhbChhZ2VfdGltZSk7CisJaWYgKGFnZV90aW1lX3ZhbCA9PSAwIHx8IGFnZV90aW1lX3ZhbCA+IDB4ZmZmZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcml2LT5hcmxfYWdlX3RpbWUgPSBhZ2VfdGltZTsKKwlyZXR1cm4gMDsKK30KKworaW50Cithcjh4eHhfc3dfZ2V0X2FybF9hZ2VfdGltZShzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisgICAgICAgICAgICAgICAgICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYgPSBzd2Rldl90b19hcjh4eHgoZGV2KTsKKwl2YWwtPnZhbHVlLmkgPSBwcml2LT5hcmxfYWdlX3RpbWU7CisJcmV0dXJuIDA7Cit9CisKK2ludAorYXI4eHh4X3N3X2dldF9hcmxfdGFibGUoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCWNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCXN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IGFyOHh4eF9wcml2ICpwcml2ID0gc3dkZXZfdG9fYXI4eHh4KGRldik7CisJc3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtPm1paV9idXM7CisJY29uc3Qgc3RydWN0IGFyOHh4eF9jaGlwICpjaGlwID0gcHJpdi0+Y2hpcDsKKwljaGFyICpidWYgPSBwcml2LT5hcmxfYnVmOworCWludCBpLCBqLCBrLCBsZW4gPSAwOworCXN0cnVjdCBhcmxfZW50cnkgKmEsICphMTsKKwl1MzIgc3RhdHVzOworCisJaWYgKCFjaGlwLT5nZXRfYXJsX2VudHJ5KQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwltdXRleF9sb2NrKCZwcml2LT5yZWdfbXV0ZXgpOworCW11dGV4X2xvY2soJmJ1cy0+bWRpb19sb2NrKTsKKworCWNoaXAtPmdldF9hcmxfZW50cnkocHJpdiwgTlVMTCwgTlVMTCwgQVI4WFhYX0FSTF9JTklUSUFMSVpFKTsKKworCWZvcihpID0gMDsgaSA8IEFSOFhYWF9OVU1fQVJMX1JFQ09SRFM7ICsraSkgeworCQlhID0gJnByaXYtPmFybF90YWJsZVtpXTsKKwkJZHVwbGljYXRlOgorCQljaGlwLT5nZXRfYXJsX2VudHJ5KHByaXYsIGEsICZzdGF0dXMsIEFSOFhYWF9BUkxfR0VUX05FWFQpOworCisJCWlmICghc3RhdHVzKQorCQkJYnJlYWs7CisKKwkJLyogYXZvaWQgZHVwbGljYXRlcworCQkgKiBBUkwgdGFibGUgY2FuIGluY2x1ZGUgbXVsdGlwbGUgdmFsaWQgZW50cmllcworCQkgKiBwZXIgTUFDLCBqdXN0IHdpdGggZGlmZmVyaW5nIHN0YXR1cyBjb2RlcworCQkgKi8KKwkJZm9yIChqID0gMDsgaiA8IGk7ICsraikgeworCQkJYTEgPSAmcHJpdi0+YXJsX3RhYmxlW2pdOworCQkJaWYgKCFtZW1jbXAoYS0+bWFjLCBhMS0+bWFjLCBzaXplb2YoYS0+bWFjKSkpIHsKKwkJCQkvKiBpZ25vcmUgcG9ydHMgYWxyZWFkeSBzZWVuIGluIGZvcm1lciBlbnRyeSAqLworCQkJCWEtPnBvcnRtYXAgJj0gfmExLT5wb3J0bWFwOworCQkJCWlmICghYS0+cG9ydG1hcCkKKwkJCQkJZ290byBkdXBsaWNhdGU7CisJCQl9CisJCX0KKwl9CisKKwltdXRleF91bmxvY2soJmJ1cy0+bWRpb19sb2NrKTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihwcml2LT5hcmxfYnVmKSAtIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhZGRyZXNzIHJlc29sdXRpb24gdGFibGVcbiIpOworCisJaWYgKGkgPT0gQVI4WFhYX05VTV9BUkxfUkVDT1JEUykKKwkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKHByaXYtPmFybF9idWYpIC0gbGVuLAorCQkJCSJUb28gbWFueSBlbnRyaWVzIGZvdW5kLCBkaXNwbGF5aW5nIHRoZSBmaXJzdCAlZCBvbmx5IVxuIiwKKwkJCQlBUjhYWFhfTlVNX0FSTF9SRUNPUkRTKTsKKworCWZvciAoaiA9IDA7IGogPCBwcml2LT5kZXYucG9ydHM7ICsraikgeworCQlmb3IgKGsgPSAwOyBrIDwgaTsgKytrKSB7CisJCQlhID0gJnByaXYtPmFybF90YWJsZVtrXTsKKwkJCWlmICghKGEtPnBvcnRtYXAgJiBCSVQoaikpKQorCQkJCWNvbnRpbnVlOworCQkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKHByaXYtPmFybF9idWYpIC0gbGVuLAorCQkJCQkiUG9ydCAlZDogTUFDICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQkJCQlqLAorCQkJCQlhLT5tYWNbNV0sIGEtPm1hY1s0XSwgYS0+bWFjWzNdLAorCQkJCQlhLT5tYWNbMl0sIGEtPm1hY1sxXSwgYS0+bWFjWzBdKTsKKwkJfQorCX0KKworCXZhbC0+dmFsdWUucyA9IGJ1ZjsKKwl2YWwtPmxlbiA9IGxlbjsKKworCW11dGV4X3VubG9jaygmcHJpdi0+cmVnX211dGV4KTsKKworCXJldHVybiAwOworfQorCitpbnQKK2FyOHh4eF9zd19zZXRfZmx1c2hfYXJsX3RhYmxlKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkgICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkgICAgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiA9IHN3ZGV2X3RvX2FyOHh4eChkZXYpOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZwcml2LT5yZWdfbXV0ZXgpOworCXJldCA9IHByaXYtPmNoaXAtPmF0dV9mbHVzaChwcml2KTsKKwltdXRleF91bmxvY2soJnByaXYtPnJlZ19tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQKK2FyOHh4eF9zd19zZXRfZmx1c2hfcG9ydF9hcmxfdGFibGUoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCQkgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkJICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYgPSBzd2Rldl90b19hcjh4eHgoZGV2KTsKKwlpbnQgcG9ydCwgcmV0OworCisJcG9ydCA9IHZhbC0+cG9ydF92bGFuOworCWlmIChwb3J0ID49IGRldi0+cG9ydHMpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmcHJpdi0+cmVnX211dGV4KTsKKwlyZXQgPSBwcml2LT5jaGlwLT5hdHVfZmx1c2hfcG9ydChwcml2LCBwb3J0KTsKKwltdXRleF91bmxvY2soJnByaXYtPnJlZ19tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQKK2FyOHh4eF9zd19nZXRfcG9ydF9zdGF0cyhzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBpbnQgcG9ydCwKKwkJCXN0cnVjdCBzd2l0Y2hfcG9ydF9zdGF0cyAqc3RhdHMpCit7CisJc3RydWN0IGFyOHh4eF9wcml2ICpwcml2ID0gc3dkZXZfdG9fYXI4eHh4KGRldik7CisJdTY0ICptaWJfc3RhdHM7CisKKwlpZiAoIWFyOHh4eF9oYXNfbWliX2NvdW50ZXJzKHByaXYpIHx8ICFwcml2LT5taWJfcG9sbF9pbnRlcnZhbCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKCEocHJpdi0+Y2hpcC0+bWliX3J4Yl9pZCB8fCBwcml2LT5jaGlwLT5taWJfdHhiX2lkKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKHBvcnQgPj0gZGV2LT5wb3J0cykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZwcml2LT5taWJfbG9jayk7CisKKwltaWJfc3RhdHMgPSAmcHJpdi0+bWliX3N0YXRzW3BvcnQgKiBwcml2LT5jaGlwLT5udW1fbWlic107CisKKwlzdGF0cy0+dHhfYnl0ZXMgPSBtaWJfc3RhdHNbcHJpdi0+Y2hpcC0+bWliX3R4Yl9pZF07CisJc3RhdHMtPnJ4X2J5dGVzID0gbWliX3N0YXRzW3ByaXYtPmNoaXAtPm1pYl9yeGJfaWRdOworCisJbXV0ZXhfdW5sb2NrKCZwcml2LT5taWJfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2FyOHh4eF9waHlfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGludCByZWdfYWRkcikKK3sKKwlzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYgPSBidXMtPnByaXY7CisJcmV0dXJuIHByaXYtPmNoaXAtPnBoeV9yZWFkKHByaXYsIHBoeV9hZGRyLCByZWdfYWRkcik7Cit9CisKK3N0YXRpYyBpbnQKK2FyOHh4eF9waHlfd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgcmVnX2FkZHIsCisJCSB1MTYgcmVnX3ZhbCkKK3sKKwlzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYgPSBidXMtPnByaXY7CisJcmV0dXJuIHByaXYtPmNoaXAtPnBoeV93cml0ZShwcml2LCBwaHlfYWRkciwgcmVnX2FkZHIsIHJlZ192YWwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyIGFyOHh4eF9zd19hdHRyX2dsb2JhbHNbXSA9IHsKKwl7CisJCS50eXBlID0gU1dJVENIX1RZUEVfSU5ULAorCQkubmFtZSA9ICJlbmFibGVfdmxhbiIsCisJCS5kZXNjcmlwdGlvbiA9ICJFbmFibGUgVkxBTiBtb2RlIiwKKwkJLnNldCA9IGFyOHh4eF9zd19zZXRfdmxhbiwKKwkJLmdldCA9IGFyOHh4eF9zd19nZXRfdmxhbiwKKwkJLm1heCA9IDEKKwl9LAorCXsKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9OT1ZBTCwKKwkJLm5hbWUgPSAicmVzZXRfbWlicyIsCisJCS5kZXNjcmlwdGlvbiA9ICJSZXNldCBhbGwgTUlCIGNvdW50ZXJzIiwKKwkJLnNldCA9IGFyOHh4eF9zd19zZXRfcmVzZXRfbWlicywKKwl9LAorCXsKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9JTlQsCisJCS5uYW1lID0gImFyOHh4eF9taWJfcG9sbF9pbnRlcnZhbCIsCisJCS5kZXNjcmlwdGlvbiA9ICJNSUIgcG9sbGluZyBpbnRlcnZhbCBpbiBtc2VjcyAoMCB0byBkaXNhYmxlKSIsCisJCS5zZXQgPSBhcjh4eHhfc3dfc2V0X21pYl9wb2xsX2ludGVydmFsLAorCQkuZ2V0ID0gYXI4eHh4X3N3X2dldF9taWJfcG9sbF9pbnRlcnZhbAorCX0sCisJeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX0lOVCwKKwkJLm5hbWUgPSAiYXI4eHh4X21pYl90eXBlIiwKKwkJLmRlc2NyaXB0aW9uID0gIk1JQiB0eXBlICgwPWJhc2ljIDE9ZXh0ZW5kZWQpIiwKKwkJLnNldCA9IGFyOHh4eF9zd19zZXRfbWliX3R5cGUsCisJCS5nZXQgPSBhcjh4eHhfc3dfZ2V0X21pYl90eXBlCisJfSwKKwl7CisJCS50eXBlID0gU1dJVENIX1RZUEVfSU5ULAorCQkubmFtZSA9ICJlbmFibGVfbWlycm9yX3J4IiwKKwkJLmRlc2NyaXB0aW9uID0gIkVuYWJsZSBtaXJyb3Jpbmcgb2YgUlggcGFja2V0cyIsCisJCS5zZXQgPSBhcjh4eHhfc3dfc2V0X21pcnJvcl9yeF9lbmFibGUsCisJCS5nZXQgPSBhcjh4eHhfc3dfZ2V0X21pcnJvcl9yeF9lbmFibGUsCisJCS5tYXggPSAxCisJfSwKKwl7CisJCS50eXBlID0gU1dJVENIX1RZUEVfSU5ULAorCQkubmFtZSA9ICJlbmFibGVfbWlycm9yX3R4IiwKKwkJLmRlc2NyaXB0aW9uID0gIkVuYWJsZSBtaXJyb3Jpbmcgb2YgVFggcGFja2V0cyIsCisJCS5zZXQgPSBhcjh4eHhfc3dfc2V0X21pcnJvcl90eF9lbmFibGUsCisJCS5nZXQgPSBhcjh4eHhfc3dfZ2V0X21pcnJvcl90eF9lbmFibGUsCisJCS5tYXggPSAxCisJfSwKKwl7CisJCS50eXBlID0gU1dJVENIX1RZUEVfSU5ULAorCQkubmFtZSA9ICJtaXJyb3JfbW9uaXRvcl9wb3J0IiwKKwkJLmRlc2NyaXB0aW9uID0gIk1pcnJvciBtb25pdG9yIHBvcnQiLAorCQkuc2V0ID0gYXI4eHh4X3N3X3NldF9taXJyb3JfbW9uaXRvcl9wb3J0LAorCQkuZ2V0ID0gYXI4eHh4X3N3X2dldF9taXJyb3JfbW9uaXRvcl9wb3J0LAorCQkubWF4ID0gQVI4MjE2X05VTV9QT1JUUyAtIDEKKwl9LAorCXsKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9JTlQsCisJCS5uYW1lID0gIm1pcnJvcl9zb3VyY2VfcG9ydCIsCisJCS5kZXNjcmlwdGlvbiA9ICJNaXJyb3Igc291cmNlIHBvcnQiLAorCQkuc2V0ID0gYXI4eHh4X3N3X3NldF9taXJyb3Jfc291cmNlX3BvcnQsCisJCS5nZXQgPSBhcjh4eHhfc3dfZ2V0X21pcnJvcl9zb3VyY2VfcG9ydCwKKwkJLm1heCA9IEFSODIxNl9OVU1fUE9SVFMgLSAxCisgCX0sCisJeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX1NUUklORywKKwkJLm5hbWUgPSAiYXJsX3RhYmxlIiwKKwkJLmRlc2NyaXB0aW9uID0gIkdldCBBUkwgdGFibGUiLAorCQkuc2V0ID0gTlVMTCwKKwkJLmdldCA9IGFyOHh4eF9zd19nZXRfYXJsX3RhYmxlLAorCX0sCisJeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX05PVkFMLAorCQkubmFtZSA9ICJmbHVzaF9hcmxfdGFibGUiLAorCQkuZGVzY3JpcHRpb24gPSAiRmx1c2ggQVJMIHRhYmxlIiwKKwkJLnNldCA9IGFyOHh4eF9zd19zZXRfZmx1c2hfYXJsX3RhYmxlLAorCX0sCit9OworCitjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgYXI4eHh4X3N3X2F0dHJfcG9ydFtdID0geworCXsKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9OT1ZBTCwKKwkJLm5hbWUgPSAicmVzZXRfbWliIiwKKwkJLmRlc2NyaXB0aW9uID0gIlJlc2V0IHNpbmdsZSBwb3J0IE1JQiBjb3VudGVycyIsCisJCS5zZXQgPSBhcjh4eHhfc3dfc2V0X3BvcnRfcmVzZXRfbWliLAorCX0sCisJeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX1NUUklORywKKwkJLm5hbWUgPSAibWliIiwKKwkJLmRlc2NyaXB0aW9uID0gIkdldCBwb3J0J3MgTUlCIGNvdW50ZXJzIiwKKwkJLnNldCA9IE5VTEwsCisJCS5nZXQgPSBhcjh4eHhfc3dfZ2V0X3BvcnRfbWliLAorCX0sCisJeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX05PVkFMLAorCQkubmFtZSA9ICJmbHVzaF9hcmxfdGFibGUiLAorCQkuZGVzY3JpcHRpb24gPSAiRmx1c2ggcG9ydCdzIEFSTCB0YWJsZSBlbnRyaWVzIiwKKwkJLnNldCA9IGFyOHh4eF9zd19zZXRfZmx1c2hfcG9ydF9hcmxfdGFibGUsCisJfSwKK307CisKK2NvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciBhcjh4eHhfc3dfYXR0cl92bGFuWzFdID0geworCXsKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9JTlQsCisJCS5uYW1lID0gInZpZCIsCisJCS5kZXNjcmlwdGlvbiA9ICJWTEFOIElEICgwLTQwOTQpIiwKKwkJLnNldCA9IGFyOHh4eF9zd19zZXRfdmlkLAorCQkuZ2V0ID0gYXI4eHh4X3N3X2dldF92aWQsCisJCS5tYXggPSA0MDk0LAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHN3aXRjaF9kZXZfb3BzIGFyOHh4eF9zd19vcHMgPSB7CisJLmF0dHJfZ2xvYmFsID0geworCQkuYXR0ciA9IGFyOHh4eF9zd19hdHRyX2dsb2JhbHMsCisJCS5uX2F0dHIgPSBBUlJBWV9TSVpFKGFyOHh4eF9zd19hdHRyX2dsb2JhbHMpLAorCX0sCisJLmF0dHJfcG9ydCA9IHsKKwkJLmF0dHIgPSBhcjh4eHhfc3dfYXR0cl9wb3J0LAorCQkubl9hdHRyID0gQVJSQVlfU0laRShhcjh4eHhfc3dfYXR0cl9wb3J0KSwKKwl9LAorCS5hdHRyX3ZsYW4gPSB7CisJCS5hdHRyID0gYXI4eHh4X3N3X2F0dHJfdmxhbiwKKwkJLm5fYXR0ciA9IEFSUkFZX1NJWkUoYXI4eHh4X3N3X2F0dHJfdmxhbiksCisJfSwKKwkuZ2V0X3BvcnRfcHZpZCA9IGFyOHh4eF9zd19nZXRfcHZpZCwKKwkuc2V0X3BvcnRfcHZpZCA9IGFyOHh4eF9zd19zZXRfcHZpZCwKKwkuZ2V0X3ZsYW5fcG9ydHMgPSBhcjh4eHhfc3dfZ2V0X3BvcnRzLAorCS5zZXRfdmxhbl9wb3J0cyA9IGFyOHh4eF9zd19zZXRfcG9ydHMsCisJLmFwcGx5X2NvbmZpZyA9IGFyOHh4eF9zd19od19hcHBseSwKKwkucmVzZXRfc3dpdGNoID0gYXI4eHh4X3N3X3Jlc2V0X3N3aXRjaCwKKwkuZ2V0X3BvcnRfbGluayA9IGFyOHh4eF9zd19nZXRfcG9ydF9saW5rLAorCS5nZXRfcG9ydF9zdGF0cyA9IGFyOHh4eF9zd19nZXRfcG9ydF9zdGF0cywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXI4eHh4X2NoaXAgYXI3MjQwc3dfY2hpcCA9IHsKKwkuY2FwcyA9IEFSOFhYWF9DQVBfTUlCX0NPVU5URVJTLAorCisJLnJlZ19wb3J0X3N0YXRzX3N0YXJ0ID0gMHgyMDAwMCwKKwkucmVnX3BvcnRfc3RhdHNfbGVuZ3RoID0gMHgxMDAsCisJLnJlZ19hcmxfY3RybCA9IEFSODIxNl9SRUdfQVRVX0NUUkwsCisKKwkubmFtZSA9ICJBdGhlcm9zIEFSNzI0WC9BUjkzM1ggYnVpbHQtaW4iLAorCS5wb3J0cyA9IEFSNzI0MFNXX05VTV9QT1JUUywKKwkudmxhbnMgPSBBUjgyMTZfTlVNX1ZMQU5TLAorCS5zd29wcyA9ICZhcjh4eHhfc3dfb3BzLAorCisJLmh3X2luaXQgPSBhcjcyNDBzd19od19pbml0LAorCS5pbml0X2dsb2JhbHMgPSBhcjcyNDBzd19pbml0X2dsb2JhbHMsCisJLmluaXRfcG9ydCA9IGFyODIyOV9pbml0X3BvcnQsCisJLnBoeV9yZWFkID0gYXI4MjE2X3BoeV9yZWFkLAorCS5waHlfd3JpdGUgPSBhcjgyMTZfcGh5X3dyaXRlLAorCS5zZXR1cF9wb3J0ID0gYXI3MjQwc3dfc2V0dXBfcG9ydCwKKwkucmVhZF9wb3J0X3N0YXR1cyA9IGFyODIxNl9yZWFkX3BvcnRfc3RhdHVzLAorCS5hdHVfZmx1c2ggPSBhcjgyMTZfYXR1X2ZsdXNoLAorCS5hdHVfZmx1c2hfcG9ydCA9IGFyODIxNl9hdHVfZmx1c2hfcG9ydCwKKwkudnR1X2ZsdXNoID0gYXI4MjE2X3Z0dV9mbHVzaCwKKwkudnR1X2xvYWRfdmxhbiA9IGFyODIxNl92dHVfbG9hZF92bGFuLAorCS5zZXRfbWlycm9yX3JlZ3MgPSBhcjgyMTZfc2V0X21pcnJvcl9yZWdzLAorCS5nZXRfYXJsX2VudHJ5ID0gYXI4MjE2X2dldF9hcmxfZW50cnksCisJLnN3X2h3X2FwcGx5ID0gYXI4eHh4X3N3X2h3X2FwcGx5LAorCisJLm51bV9taWJzID0gQVJSQVlfU0laRShhcjgyMzZfbWlicyksCisJLm1pYl9kZWNzID0gYXI4MjM2X21pYnMsCisJLm1pYl9mdW5jID0gQVI4MjE2X1JFR19NSUJfRlVOQywKKwkubWliX3J4Yl9pZCA9IEFSODIzNl9NSUJfUlhCX0lELAorCS5taWJfdHhiX2lkID0gQVI4MjM2X01JQl9UWEJfSUQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGFyOHh4eF9jaGlwIGFyODIxNl9jaGlwID0geworCS5jYXBzID0gQVI4WFhYX0NBUF9NSUJfQ09VTlRFUlMsCisKKwkucmVnX3BvcnRfc3RhdHNfc3RhcnQgPSAweDE5MDAwLAorCS5yZWdfcG9ydF9zdGF0c19sZW5ndGggPSAweGEwLAorCS5yZWdfYXJsX2N0cmwgPSBBUjgyMTZfUkVHX0FUVV9DVFJMLAorCisJLm5hbWUgPSAiQXRoZXJvcyBBUjgyMTYiLAorCS5wb3J0cyA9IEFSODIxNl9OVU1fUE9SVFMsCisJLnZsYW5zID0gQVI4MjE2X05VTV9WTEFOUywKKwkuc3dvcHMgPSAmYXI4eHh4X3N3X29wcywKKworCS5od19pbml0ID0gYXI4MjE2X2h3X2luaXQsCisJLmluaXRfZ2xvYmFscyA9IGFyODIxNl9pbml0X2dsb2JhbHMsCisJLmluaXRfcG9ydCA9IGFyODIxNl9pbml0X3BvcnQsCisJLnNldHVwX3BvcnQgPSBhcjgyMTZfc2V0dXBfcG9ydCwKKwkucmVhZF9wb3J0X3N0YXR1cyA9IGFyODIxNl9yZWFkX3BvcnRfc3RhdHVzLAorCS5hdHVfZmx1c2ggPSBhcjgyMTZfYXR1X2ZsdXNoLAorCS5hdHVfZmx1c2hfcG9ydCA9IGFyODIxNl9hdHVfZmx1c2hfcG9ydCwKKwkudnR1X2ZsdXNoID0gYXI4MjE2X3Z0dV9mbHVzaCwKKwkudnR1X2xvYWRfdmxhbiA9IGFyODIxNl92dHVfbG9hZF92bGFuLAorCS5zZXRfbWlycm9yX3JlZ3MgPSBhcjgyMTZfc2V0X21pcnJvcl9yZWdzLAorCS5nZXRfYXJsX2VudHJ5ID0gYXI4MjE2X2dldF9hcmxfZW50cnksCisJLnN3X2h3X2FwcGx5ID0gYXI4eHh4X3N3X2h3X2FwcGx5LAorCisJLm51bV9taWJzID0gQVJSQVlfU0laRShhcjgyMTZfbWlicyksCisJLm1pYl9kZWNzID0gYXI4MjE2X21pYnMsCisJLm1pYl9mdW5jID0gQVI4MjE2X1JFR19NSUJfRlVOQywKKwkubWliX3J4Yl9pZCA9IEFSODIxNl9NSUJfUlhCX0lELAorCS5taWJfdHhiX2lkID0gQVI4MjE2X01JQl9UWEJfSUQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGFyOHh4eF9jaGlwIGFyODIyOV9jaGlwID0geworCS5jYXBzID0gQVI4WFhYX0NBUF9NSUJfQ09VTlRFUlMsCisKKwkucmVnX3BvcnRfc3RhdHNfc3RhcnQgPSAweDIwMDAwLAorCS5yZWdfcG9ydF9zdGF0c19sZW5ndGggPSAweDEwMCwKKwkucmVnX2FybF9jdHJsID0gQVI4MjE2X1JFR19BVFVfQ1RSTCwKKworCS5uYW1lID0gIkF0aGVyb3MgQVI4MjI5IiwKKwkucG9ydHMgPSBBUjgyMTZfTlVNX1BPUlRTLAorCS52bGFucyA9IEFSODIxNl9OVU1fVkxBTlMsCisJLnN3b3BzID0gJmFyOHh4eF9zd19vcHMsCisKKwkuaHdfaW5pdCA9IGFyODIyOV9od19pbml0LAorCS5pbml0X2dsb2JhbHMgPSBhcjgyMjlfaW5pdF9nbG9iYWxzLAorCS5pbml0X3BvcnQgPSBhcjgyMjlfaW5pdF9wb3J0LAorCS5waHlfcmVhZCA9IGFyODIxNl9waHlfcmVhZCwKKwkucGh5X3dyaXRlID0gYXI4MjE2X3BoeV93cml0ZSwKKwkuc2V0dXBfcG9ydCA9IGFyODIzNl9zZXR1cF9wb3J0LAorCS5yZWFkX3BvcnRfc3RhdHVzID0gYXI4MjE2X3JlYWRfcG9ydF9zdGF0dXMsCisJLmF0dV9mbHVzaCA9IGFyODIxNl9hdHVfZmx1c2gsCisJLmF0dV9mbHVzaF9wb3J0ID0gYXI4MjE2X2F0dV9mbHVzaF9wb3J0LAorCS52dHVfZmx1c2ggPSBhcjgyMTZfdnR1X2ZsdXNoLAorCS52dHVfbG9hZF92bGFuID0gYXI4MjE2X3Z0dV9sb2FkX3ZsYW4sCisJLnNldF9taXJyb3JfcmVncyA9IGFyODIxNl9zZXRfbWlycm9yX3JlZ3MsCisJLmdldF9hcmxfZW50cnkgPSBhcjgyMTZfZ2V0X2FybF9lbnRyeSwKKwkuc3dfaHdfYXBwbHkgPSBhcjh4eHhfc3dfaHdfYXBwbHksCisKKwkubnVtX21pYnMgPSBBUlJBWV9TSVpFKGFyODIzNl9taWJzKSwKKwkubWliX2RlY3MgPSBhcjgyMzZfbWlicywKKwkubWliX2Z1bmMgPSBBUjgyMTZfUkVHX01JQl9GVU5DLAorCS5taWJfcnhiX2lkID0gQVI4MjM2X01JQl9SWEJfSUQsCisJLm1pYl90eGJfaWQgPSBBUjgyMzZfTUlCX1RYQl9JRCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXI4eHh4X2NoaXAgYXI4MjM2X2NoaXAgPSB7CisJLmNhcHMgPSBBUjhYWFhfQ0FQX01JQl9DT1VOVEVSUywKKworCS5yZWdfcG9ydF9zdGF0c19zdGFydCA9IDB4MjAwMDAsCisJLnJlZ19wb3J0X3N0YXRzX2xlbmd0aCA9IDB4MTAwLAorCS5yZWdfYXJsX2N0cmwgPSBBUjgyMTZfUkVHX0FUVV9DVFJMLAorCisJLm5hbWUgPSAiQXRoZXJvcyBBUjgyMzYiLAorCS5wb3J0cyA9IEFSODIxNl9OVU1fUE9SVFMsCisJLnZsYW5zID0gQVI4MjE2X05VTV9WTEFOUywKKwkuc3dvcHMgPSAmYXI4eHh4X3N3X29wcywKKworCS5od19pbml0ID0gYXI4MjE2X2h3X2luaXQsCisJLmluaXRfZ2xvYmFscyA9IGFyODIzNl9pbml0X2dsb2JhbHMsCisJLmluaXRfcG9ydCA9IGFyODIxNl9pbml0X3BvcnQsCisJLnNldHVwX3BvcnQgPSBhcjgyMzZfc2V0dXBfcG9ydCwKKwkucmVhZF9wb3J0X3N0YXR1cyA9IGFyODIxNl9yZWFkX3BvcnRfc3RhdHVzLAorCS5hdHVfZmx1c2ggPSBhcjgyMTZfYXR1X2ZsdXNoLAorCS5hdHVfZmx1c2hfcG9ydCA9IGFyODIxNl9hdHVfZmx1c2hfcG9ydCwKKwkudnR1X2ZsdXNoID0gYXI4MjE2X3Z0dV9mbHVzaCwKKwkudnR1X2xvYWRfdmxhbiA9IGFyODIxNl92dHVfbG9hZF92bGFuLAorCS5zZXRfbWlycm9yX3JlZ3MgPSBhcjgyMTZfc2V0X21pcnJvcl9yZWdzLAorCS5nZXRfYXJsX2VudHJ5ID0gYXI4MjE2X2dldF9hcmxfZW50cnksCisJLnN3X2h3X2FwcGx5ID0gYXI4eHh4X3N3X2h3X2FwcGx5LAorCisJLm51bV9taWJzID0gQVJSQVlfU0laRShhcjgyMzZfbWlicyksCisJLm1pYl9kZWNzID0gYXI4MjM2X21pYnMsCisJLm1pYl9mdW5jID0gQVI4MjE2X1JFR19NSUJfRlVOQywKKwkubWliX3J4Yl9pZCA9IEFSODIzNl9NSUJfUlhCX0lELAorCS5taWJfdHhiX2lkID0gQVI4MjM2X01JQl9UWEJfSUQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGFyOHh4eF9jaGlwIGFyODMxNl9jaGlwID0geworCS5jYXBzID0gQVI4WFhYX0NBUF9HSUdFIHwgQVI4WFhYX0NBUF9NSUJfQ09VTlRFUlMsCisKKwkucmVnX3BvcnRfc3RhdHNfc3RhcnQgPSAweDIwMDAwLAorCS5yZWdfcG9ydF9zdGF0c19sZW5ndGggPSAweDEwMCwKKwkucmVnX2FybF9jdHJsID0gQVI4MjE2X1JFR19BVFVfQ1RSTCwKKworCS5uYW1lID0gIkF0aGVyb3MgQVI4MzE2IiwKKwkucG9ydHMgPSBBUjgyMTZfTlVNX1BPUlRTLAorCS52bGFucyA9IEFSOFgxNl9NQVhfVkxBTlMsCisJLnN3b3BzID0gJmFyOHh4eF9zd19vcHMsCisKKwkuaHdfaW5pdCA9IGFyODMxNl9od19pbml0LAorCS5pbml0X2dsb2JhbHMgPSBhcjgzMTZfaW5pdF9nbG9iYWxzLAorCS5pbml0X3BvcnQgPSBhcjgyMTZfaW5pdF9wb3J0LAorCS5zZXR1cF9wb3J0ID0gYXI4MjE2X3NldHVwX3BvcnQsCisJLnJlYWRfcG9ydF9zdGF0dXMgPSBhcjgyMTZfcmVhZF9wb3J0X3N0YXR1cywKKwkuYXR1X2ZsdXNoID0gYXI4MjE2X2F0dV9mbHVzaCwKKwkuYXR1X2ZsdXNoX3BvcnQgPSBhcjgyMTZfYXR1X2ZsdXNoX3BvcnQsCisJLnZ0dV9mbHVzaCA9IGFyODIxNl92dHVfZmx1c2gsCisJLnZ0dV9sb2FkX3ZsYW4gPSBhcjgyMTZfdnR1X2xvYWRfdmxhbiwKKwkuc2V0X21pcnJvcl9yZWdzID0gYXI4MjE2X3NldF9taXJyb3JfcmVncywKKwkuZ2V0X2FybF9lbnRyeSA9IGFyODIxNl9nZXRfYXJsX2VudHJ5LAorCS5zd19od19hcHBseSA9IGFyOHh4eF9zd19od19hcHBseSwKKworCS5udW1fbWlicyA9IEFSUkFZX1NJWkUoYXI4MjM2X21pYnMpLAorCS5taWJfZGVjcyA9IGFyODIzNl9taWJzLAorCS5taWJfZnVuYyA9IEFSODIxNl9SRUdfTUlCX0ZVTkMsCisJLm1pYl9yeGJfaWQgPSBBUjgyMzZfTUlCX1JYQl9JRCwKKwkubWliX3R4Yl9pZCA9IEFSODIzNl9NSUJfVFhCX0lELAorfTsKKworc3RhdGljIGludAorYXI4eHh4X3JlYWRfaWQoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2KQoreworCXUzMiB2YWw7CisJdTE2IGlkOworCWludCBpOworCisJdmFsID0gYXI4eHh4X3JlYWQocHJpdiwgQVI4MjE2X1JFR19DVFJMKTsKKwlpZiAodmFsID09IH4wKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlkID0gdmFsICYgKEFSODIxNl9DVFJMX1JFVklTSU9OIHwgQVI4MjE2X0NUUkxfVkVSU0lPTik7CisJZm9yIChpID0gMDsgaSA8IEFSOFgxNl9QUk9CRV9SRVRSSUVTOyBpKyspIHsKKwkJdTE2IHQ7CisKKwkJdmFsID0gYXI4eHh4X3JlYWQocHJpdiwgQVI4MjE2X1JFR19DVFJMKTsKKwkJaWYgKHZhbCA9PSB+MCkKKwkJCXJldHVybiAtRU5PREVWOworCisJCXQgPSB2YWwgJiAoQVI4MjE2X0NUUkxfUkVWSVNJT04gfCBBUjgyMTZfQ1RSTF9WRVJTSU9OKTsKKwkJaWYgKHQgIT0gaWQpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwcml2LT5jaGlwX3ZlciA9IChpZCAmIEFSODIxNl9DVFJMX1ZFUlNJT04pID4+IEFSODIxNl9DVFJMX1ZFUlNJT05fUzsKKwlwcml2LT5jaGlwX3JldiA9IChpZCAmIEFSODIxNl9DVFJMX1JFVklTSU9OKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYXI4eHh4X2lkX2NoaXAoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2KQoreworCWludCByZXQ7CisKKwlyZXQgPSBhcjh4eHhfcmVhZF9pZChwcml2KTsKKwlpZihyZXQpCisJCXJldHVybiByZXQ7CisKKwlzd2l0Y2ggKHByaXYtPmNoaXBfdmVyKSB7CisJY2FzZSBBUjhYWFhfVkVSX0FSODIxNjoKKwkJcHJpdi0+Y2hpcCA9ICZhcjgyMTZfY2hpcDsKKwkJYnJlYWs7CisJY2FzZSBBUjhYWFhfVkVSX0FSODIzNjoKKwkJcHJpdi0+Y2hpcCA9ICZhcjgyMzZfY2hpcDsKKwkJYnJlYWs7CisJY2FzZSBBUjhYWFhfVkVSX0FSODMxNjoKKwkJcHJpdi0+Y2hpcCA9ICZhcjgzMTZfY2hpcDsKKwkJYnJlYWs7CisJY2FzZSBBUjhYWFhfVkVSX0FSODMyNzoKKwkJcHJpdi0+Y2hpcCA9ICZhcjgzMjdfY2hpcDsKKwkJYnJlYWs7CisJY2FzZSBBUjhYWFhfVkVSX0FSODMzNzoKKwkJcHJpdi0+Y2hpcCA9ICZhcjgzMzdfY2hpcDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfZXJyKCJhcjgyMTY6IFVua25vd24gQXRoZXJvcyBkZXZpY2UgW3Zlcj0lZCwgcmV2PSVkXVxuIiwKKwkJICAgICAgIHByaXYtPmNoaXBfdmVyLCBwcml2LT5jaGlwX3Jldik7CisKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCithcjh4eHhfbWliX3dvcmtfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGFyOHh4eF9wcml2ICpwcml2OworCWludCBlcnIsIGk7CisKKwlwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhcjh4eHhfcHJpdiwgbWliX3dvcmsud29yayk7CisKKwltdXRleF9sb2NrKCZwcml2LT5taWJfbG9jayk7CisKKwllcnIgPSBhcjh4eHhfbWliX2NhcHR1cmUocHJpdik7CisJaWYgKGVycikKKwkJZ290byBuZXh0X2F0dGVtcHQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+ZGV2LnBvcnRzOyBpKyspCisJCWFyOHh4eF9taWJfZmV0Y2hfcG9ydF9zdGF0KHByaXYsIGksIGZhbHNlKTsKKworbmV4dF9hdHRlbXB0OgorCW11dGV4X3VubG9jaygmcHJpdi0+bWliX2xvY2spOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcHJpdi0+bWliX3dvcmssCisJCQkgICAgICBtc2Vjc190b19qaWZmaWVzKHByaXYtPm1pYl9wb2xsX2ludGVydmFsKSk7Cit9CisKK3N0YXRpYyBpbnQKK2FyOHh4eF9taWJfaW5pdChzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYpCit7CisJdW5zaWduZWQgaW50IGxlbjsKKworCWlmICghYXI4eHh4X2hhc19taWJfY291bnRlcnMocHJpdikpCisJCXJldHVybiAwOworCisJQlVHX09OKCFwcml2LT5jaGlwLT5taWJfZGVjcyB8fCAhcHJpdi0+Y2hpcC0+bnVtX21pYnMpOworCisJbGVuID0gcHJpdi0+ZGV2LnBvcnRzICogcHJpdi0+Y2hpcC0+bnVtX21pYnMgKgorCSAgICAgIHNpemVvZigqcHJpdi0+bWliX3N0YXRzKTsKKwlwcml2LT5taWJfc3RhdHMgPSBremFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXByaXYtPm1pYl9zdGF0cykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2FyOHh4eF9taWJfc3RhcnQoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2KQoreworCWlmICghYXI4eHh4X2hhc19taWJfY291bnRlcnMocHJpdikgfHwgIXByaXYtPm1pYl9wb2xsX2ludGVydmFsKQorCQlyZXR1cm47CisKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnByaXYtPm1pYl93b3JrLAorCQkJICAgICAgbXNlY3NfdG9famlmZmllcyhwcml2LT5taWJfcG9sbF9pbnRlcnZhbCkpOworfQorCitzdGF0aWMgdm9pZAorYXI4eHh4X21pYl9zdG9wKHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdikKK3sKKwlpZiAoIWFyOHh4eF9oYXNfbWliX2NvdW50ZXJzKHByaXYpIHx8ICFwcml2LT5taWJfcG9sbF9pbnRlcnZhbCkKKwkJcmV0dXJuOworCisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5taWJfd29yayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXI4eHh4X3ByaXYgKgorYXI4eHh4X2NyZWF0ZSh2b2lkKQoreworCXN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdjsKKworCXByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYXI4eHh4X3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAocHJpdiA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCW11dGV4X2luaXQoJnByaXYtPnJlZ19tdXRleCk7CisJbXV0ZXhfaW5pdCgmcHJpdi0+bWliX2xvY2spOworCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5taWJfd29yaywgYXI4eHh4X21pYl93b3JrX2Z1bmMpOworCisJcmV0dXJuIHByaXY7Cit9CisKK3N0YXRpYyB2b2lkCithcjh4eHhfZnJlZShzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYpCit7CisJaWYgKHByaXYtPmNoaXAgJiYgcHJpdi0+Y2hpcC0+Y2xlYW51cCkKKwkJcHJpdi0+Y2hpcC0+Y2xlYW51cChwcml2KTsKKworCWtmcmVlKHByaXYtPmNoaXBfZGF0YSk7CisJa2ZyZWUocHJpdi0+bWliX3N0YXRzKTsKKwlrZnJlZShwcml2KTsKK30KKworc3RhdGljIGludAorYXI4eHh4X3Byb2JlX3N3aXRjaChzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYpCit7CisJY29uc3Qgc3RydWN0IGFyOHh4eF9jaGlwICpjaGlwOworCXN0cnVjdCBzd2l0Y2hfZGV2ICpzd2RldjsKKwlpbnQgcmV0OworCisJY2hpcCA9IHByaXYtPmNoaXA7CisKKwlzd2RldiA9ICZwcml2LT5kZXY7CisJc3dkZXYtPmNwdV9wb3J0ID0gQVI4MjE2X1BPUlRfQ1BVOworCXN3ZGV2LT5uYW1lID0gY2hpcC0+bmFtZTsKKwlzd2Rldi0+dmxhbnMgPSBjaGlwLT52bGFuczsKKwlzd2Rldi0+cG9ydHMgPSBjaGlwLT5wb3J0czsKKwlzd2Rldi0+b3BzID0gY2hpcC0+c3dvcHM7CisKKwlyZXQgPSBhcjh4eHhfbWliX2luaXQocHJpdik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Cithcjh4eHhfc3RhcnQoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2KQoreworCWludCByZXQ7CisKKwlwcml2LT5pbml0ID0gdHJ1ZTsKKworCXJldCA9IHByaXYtPmNoaXAtPmh3X2luaXQocHJpdik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGFyOHh4eF9zd19yZXNldF9zd2l0Y2goJnByaXYtPmRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXByaXYtPmluaXQgPSBmYWxzZTsKKworCWFyOHh4eF9taWJfc3RhcnQocHJpdik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYXI4eHh4X3BoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQoreworCXN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiA9IHBoeWRldi0+cHJpdjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGh5ZGV2LT5hdHRhY2hlZF9kZXY7CisJaW50IHJldDsKKworCWlmIChXQVJOX09OKCFwcml2KSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAocHJpdi0+Y2hpcC0+Y29uZmlnX2F0X3Byb2JlKQorCQlyZXR1cm4gYXI4eHh4X3BoeV9jaGVja19hbmVnKHBoeWRldik7CisKKwlwcml2LT5waHkgPSBwaHlkZXY7CisKKwlpZiAocGh5ZGV2LT5tZGlvLmFkZHIgIT0gMCkgeworCQlpZiAoY2hpcF9pc19hcjgzMTYocHJpdikpIHsKKwkJCS8qIHN3aXRjaCBkZXZpY2UgaGFzIGJlZW4gaW5pdGlhbGl6ZWQsIHJlaW5pdCAqLworCQkJcHJpdi0+ZGV2LnBvcnRzID0gKEFSODIxNl9OVU1fUE9SVFMgLSAxKTsKKwkJCXByaXYtPmluaXRpYWxpemVkID0gZmFsc2U7CisJCQlwcml2LT5wb3J0NF9waHkgPSB0cnVlOworCQkJYXI4MzE2X2h3X2luaXQocHJpdik7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCXJldHVybiAwOworCX0KKworCXJldCA9IGFyOHh4eF9zdGFydChwcml2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogVklEIGZpeHVwIG9ubHkgbmVlZGVkIG9uIGFyODIxNiAqLworCWlmIChjaGlwX2lzX2FyODIxNihwcml2KSkgeworCQlkZXYtPnBoeV9wdHIgPSBwcml2OworCQlkZXYtPnByaXZfZmxhZ3MgfD0gSUZGX05PX0lQX0FMSUdOOworCQlkZXYtPmV0aF9tYW5nbGVfcnggPSBhcjgyMTZfbWFuZ2xlX3J4OworCQlkZXYtPmV0aF9tYW5nbGVfdHggPSBhcjgyMTZfbWFuZ2xlX3R4OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgYm9vbAorYXI4eHh4X2NoZWNrX2xpbmtfc3RhdGVzKHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdikKK3sKKwlib29sIGxpbmtfbmV3LCBjaGFuZ2VkID0gZmFsc2U7CisJdTMyIHN0YXR1czsKKwlpbnQgaTsKKworCW11dGV4X2xvY2soJnByaXYtPnJlZ19tdXRleCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+ZGV2LnBvcnRzOyBpKyspIHsKKwkJc3RhdHVzID0gcHJpdi0+Y2hpcC0+cmVhZF9wb3J0X3N0YXR1cyhwcml2LCBpKTsKKwkJbGlua19uZXcgPSAhIShzdGF0dXMgJiBBUjgyMTZfUE9SVF9TVEFUVVNfTElOS19VUCk7CisJCWlmIChsaW5rX25ldyA9PSBwcml2LT5saW5rX3VwW2ldKQorCQkJY29udGludWU7CisKKwkJcHJpdi0+bGlua191cFtpXSA9IGxpbmtfbmV3OworCQljaGFuZ2VkID0gdHJ1ZTsKKwkJLyogZmx1c2ggQVJMIGVudHJpZXMgZm9yIHRoaXMgcG9ydCBpZiBpdCB3ZW50IGRvd24qLworCQlpZiAoIWxpbmtfbmV3KQorCQkJcHJpdi0+Y2hpcC0+YXR1X2ZsdXNoX3BvcnQocHJpdiwgaSk7CisJCWRldl9pbmZvKCZwcml2LT5waHktPm1kaW8uZGV2LCAiUG9ydCAlZCBpcyAlc1xuIiwKKwkJCSBpLCBsaW5rX25ldyA/ICJ1cCIgOiAiZG93biIpOworCX0KKworCW11dGV4X3VubG9jaygmcHJpdi0+cmVnX211dGV4KTsKKworCXJldHVybiBjaGFuZ2VkOworfQorCitzdGF0aWMgaW50Cithcjh4eHhfcGh5X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCit7CisJc3RydWN0IGFyOHh4eF9wcml2ICpwcml2ID0gcGh5ZGV2LT5wcml2OworCXN0cnVjdCBzd2l0Y2hfcG9ydF9saW5rIGxpbms7CisKKwkvKiBjaGVjayBmb3Igc3dpdGNoIHBvcnQgbGluayBjaGFuZ2VzICovCisJYXI4eHh4X2NoZWNrX2xpbmtfc3RhdGVzKHByaXYpOworCisJaWYgKHBoeWRldi0+bWRpby5hZGRyICE9IDApCisJCXJldHVybiBnZW5waHlfcmVhZF9zdGF0dXMocGh5ZGV2KTsKKworCWFyODIxNl9yZWFkX3BvcnRfbGluayhwcml2LCBwaHlkZXYtPm1kaW8uYWRkciwgJmxpbmspOworCXBoeWRldi0+bGluayA9ICEhbGluay5saW5rOworCWlmICghcGh5ZGV2LT5saW5rKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAobGluay5zcGVlZCkgeworCWNhc2UgU1dJVENIX1BPUlRfU1BFRURfMTA6CisJCXBoeWRldi0+c3BlZWQgPSBTUEVFRF8xMDsKKwkJYnJlYWs7CisJY2FzZSBTV0lUQ0hfUE9SVF9TUEVFRF8xMDA6CisJCXBoeWRldi0+c3BlZWQgPSBTUEVFRF8xMDA7CisJCWJyZWFrOworCWNhc2UgU1dJVENIX1BPUlRfU1BFRURfMTAwMDoKKwkJcGh5ZGV2LT5zcGVlZCA9IFNQRUVEXzEwMDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXBoeWRldi0+c3BlZWQgPSAwOworCX0KKwlwaHlkZXYtPmR1cGxleCA9IGxpbmsuZHVwbGV4ID8gRFVQTEVYX0ZVTEwgOiBEVVBMRVhfSEFMRjsKKworCXBoeWRldi0+c3RhdGUgPSBQSFlfUlVOTklORzsKKwluZXRpZl9jYXJyaWVyX29uKHBoeWRldi0+YXR0YWNoZWRfZGV2KTsKKwlpZiAocGh5ZGV2LT5hZGp1c3RfbGluaykKKwkJcGh5ZGV2LT5hZGp1c3RfbGluayhwaHlkZXYtPmF0dGFjaGVkX2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYXI4eHh4X3BoeV9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQoreworCWlmIChwaHlkZXYtPm1kaW8uYWRkciA9PSAwKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBnZW5waHlfY29uZmlnX2FuZWcocGh5ZGV2KTsKK30KKworc3RhdGljIGludAorYXI4eHh4X2dldF9mZWF0dXJlcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQoreworCXN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiA9IHBoeWRldi0+cHJpdjsKKworCWxpbmttb2RlX2NvcHkocGh5ZGV2LT5zdXBwb3J0ZWQsIFBIWV9CQVNJQ19GRUFUVVJFUyk7CisJaWYgKGFyOHh4eF9oYXNfZ2lnZShwcml2KSkKKwkJbGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV8xMDAwYmFzZVRfRnVsbF9CSVQsIHBoeWRldi0+c3VwcG9ydGVkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgdTMyIGFyOHh4eF9waHlfaWRzW10gPSB7CisJMHgwMDRkZDAzMywKKwkweDAwNGRkMDM0LCAvKiBBUjgzMjcgKi8KKwkweDAwNGRkMDM2LCAvKiBBUjgzMzcgKi8KKwkweDAwNGRkMDQxLAorCTB4MDA0ZGQwNDIsCisJMHgwMDRkZDA0MywgLyogQVI4MjM2ICovCit9OworCitzdGF0aWMgYm9vbAorYXI4eHh4X3BoeV9tYXRjaCh1MzIgcGh5X2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXI4eHh4X3BoeV9pZHMpOyBpKyspCisJCWlmIChwaHlfaWQgPT0gYXI4eHh4X3BoeV9pZHNbaV0pCisJCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wKK2FyOHh4eF9pc19wb3NzaWJsZShzdHJ1Y3QgbWlpX2J1cyAqYnVzKQoreworCXVuc2lnbmVkIGludCBpLCBmb3VuZF9waHlzID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwkJdTMyIHBoeV9pZDsKKworCQlwaHlfaWQgPSBtZGlvYnVzX3JlYWQoYnVzLCBpLCBNSUlfUEhZU0lEMSkgPDwgMTY7CisJCXBoeV9pZCB8PSBtZGlvYnVzX3JlYWQoYnVzLCBpLCBNSUlfUEhZU0lEMik7CisJCWlmIChhcjh4eHhfcGh5X21hdGNoKHBoeV9pZCkpIHsKKwkJCWZvdW5kX3BoeXMrKzsKKwkJfSBlbHNlIGlmIChwaHlfaWQpIHsKKwkJCXByX2RlYnVnKCJhcjh4eHg6IHVua25vd24gUEhZIGF0ICVzOiUwMnggaWQ6JTA4eFxuIiwKKwkJCQkgZGV2X25hbWUoJmJ1cy0+ZGV2KSwgaSwgcGh5X2lkKTsKKwkJfQorCX0KKwlyZXR1cm4gISFmb3VuZF9waHlzOworfQorCitzdGF0aWMgaW50Cithcjh4eHhfcGh5X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCit7CisJc3RydWN0IGFyOHh4eF9wcml2ICpwcml2OworCXN0cnVjdCBzd2l0Y2hfZGV2ICpzd2RldjsKKwlpbnQgcmV0OworCisJLyogc2tpcCBQSFlzIGF0IHVudXNlZCBhZHJlc3NlcyAqLworCWlmIChwaHlkZXYtPm1kaW8uYWRkciAhPSAwICYmIHBoeWRldi0+bWRpby5hZGRyICE9IDMgJiYgcGh5ZGV2LT5tZGlvLmFkZHIgIT0gNCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoIWFyOHh4eF9pc19wb3NzaWJsZShwaHlkZXYtPm1kaW8uYnVzKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltdXRleF9sb2NrKCZhcjh4eHhfZGV2X2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwcml2LCAmYXI4eHh4X2Rldl9saXN0LCBsaXN0KQorCQlpZiAocHJpdi0+bWlpX2J1cyA9PSBwaHlkZXYtPm1kaW8uYnVzKQorCQkJZ290byBmb3VuZDsKKworCXByaXYgPSBhcjh4eHhfY3JlYXRlKCk7CisJaWYgKHByaXYgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIHVubG9jazsKKwl9CisKKwlwcml2LT5taWlfYnVzID0gcGh5ZGV2LT5tZGlvLmJ1czsKKwlwcml2LT5wZGV2ID0gJnBoeWRldi0+bWRpby5kZXY7CisKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihwcml2LT5wZGV2LT5vZl9ub2RlLCAicWNhLG1pYi1wb2xsLWludGVydmFsIiwKKwkJCQkgICAmcHJpdi0+bWliX3BvbGxfaW50ZXJ2YWwpOworCWlmIChyZXQpCisJCXByaXYtPm1pYl9wb2xsX2ludGVydmFsID0gMDsKKworCXJldCA9IGFyOHh4eF9pZF9jaGlwKHByaXYpOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9wcml2OworCisJcmV0ID0gYXI4eHh4X3Byb2JlX3N3aXRjaChwcml2KTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfcHJpdjsKKworCXN3ZGV2ID0gJnByaXYtPmRldjsKKwlzd2Rldi0+YWxpYXMgPSBkZXZfbmFtZSgmcHJpdi0+bWlpX2J1cy0+ZGV2KTsKKwlyZXQgPSByZWdpc3Rlcl9zd2l0Y2goc3dkZXYsIE5VTEwpOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9wcml2OworCisJcHJfaW5mbygiJXM6ICVzIHJldi4gJXUgc3dpdGNoIHJlZ2lzdGVyZWQgb24gJXNcbiIsCisJCXN3ZGV2LT5kZXZuYW1lLCBzd2Rldi0+bmFtZSwgcHJpdi0+Y2hpcF9yZXYsCisJCWRldl9uYW1lKCZwcml2LT5taWlfYnVzLT5kZXYpKTsKKworCWxpc3RfYWRkKCZwcml2LT5saXN0LCAmYXI4eHh4X2Rldl9saXN0KTsKKworZm91bmQ6CisJcHJpdi0+dXNlX2NvdW50Kys7CisKKwlpZiAocGh5ZGV2LT5tZGlvLmFkZHIgPT0gMCAmJiBwcml2LT5jaGlwLT5jb25maWdfYXRfcHJvYmUpIHsKKwkJcHJpdi0+cGh5ID0gcGh5ZGV2OworCisJCXJldCA9IGFyOHh4eF9zdGFydChwcml2KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX3VucmVnaXN0ZXJfc3dpdGNoOworCX0gZWxzZSBpZiAocHJpdi0+Y2hpcC0+cGh5X3JnbWlpX3NldCkgeworCQlwcml2LT5jaGlwLT5waHlfcmdtaWlfc2V0KHByaXYsIHBoeWRldik7CisJfQorCisJcGh5ZGV2LT5wcml2ID0gcHJpdjsKKworCW11dGV4X3VubG9jaygmYXI4eHh4X2Rldl9saXN0X2xvY2spOworCisJcmV0dXJuIDA7CisKK2Vycl91bnJlZ2lzdGVyX3N3aXRjaDoKKwlpZiAoLS1wcml2LT51c2VfY291bnQpCisJCWdvdG8gdW5sb2NrOworCisJdW5yZWdpc3Rlcl9zd2l0Y2goJnByaXYtPmRldik7CisKK2ZyZWVfcHJpdjoKKwlhcjh4eHhfZnJlZShwcml2KTsKK3VubG9jazoKKwltdXRleF91bmxvY2soJmFyOHh4eF9kZXZfbGlzdF9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZAorYXI4eHh4X3BoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGh5ZGV2LT5hdHRhY2hlZF9kZXY7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuOworCisJZGV2LT5waHlfcHRyID0gTlVMTDsKKwlkZXYtPnByaXZfZmxhZ3MgJj0gfklGRl9OT19JUF9BTElHTjsKKwlkZXYtPmV0aF9tYW5nbGVfcnggPSBOVUxMOworCWRldi0+ZXRoX21hbmdsZV90eCA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCithcjh4eHhfcGh5X3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQoreworCXN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiA9IHBoeWRldi0+cHJpdjsKKworCWlmIChXQVJOX09OKCFwcml2KSkKKwkJcmV0dXJuOworCisJcGh5ZGV2LT5wcml2ID0gTlVMTDsKKworCW11dGV4X2xvY2soJmFyOHh4eF9kZXZfbGlzdF9sb2NrKTsKKworCWlmICgtLXByaXYtPnVzZV9jb3VudCA+IDApIHsKKwkJbXV0ZXhfdW5sb2NrKCZhcjh4eHhfZGV2X2xpc3RfbG9jayk7CisJCXJldHVybjsKKwl9CisKKwlsaXN0X2RlbCgmcHJpdi0+bGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZhcjh4eHhfZGV2X2xpc3RfbG9jayk7CisKKwl1bnJlZ2lzdGVyX3N3aXRjaCgmcHJpdi0+ZGV2KTsKKwlhcjh4eHhfbWliX3N0b3AocHJpdik7CisJYXI4eHh4X2ZyZWUocHJpdik7Cit9CisKK3N0YXRpYyBpbnQKK2FyOHh4eF9waHlfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQoreworCS8qIHdlIGRvbid0IG5lZWQgYW4gZXh0cmEgcmVzZXQgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGFyOHh4eF9waHlfZHJpdmVyW10gPSB7CisJeworCQkucGh5X2lkCQk9IDB4MDA0ZDAwMDAsCisJCS5uYW1lCQk9ICJBdGhlcm9zIEFSODIxNi9BUjgyMzYvQVI4MzE2IiwKKwkJLnBoeV9pZF9tYXNrCT0gMHhmZmZmMDAwMCwKKwkJLnByb2JlCQk9IGFyOHh4eF9waHlfcHJvYmUsCisJCS5yZW1vdmUJCT0gYXI4eHh4X3BoeV9yZW1vdmUsCisJCS5kZXRhY2gJCT0gYXI4eHh4X3BoeV9kZXRhY2gsCisJCS5jb25maWdfaW5pdAk9IGFyOHh4eF9waHlfY29uZmlnX2luaXQsCisJCS5jb25maWdfYW5lZwk9IGFyOHh4eF9waHlfY29uZmlnX2FuZWcsCisJCS5yZWFkX3N0YXR1cwk9IGFyOHh4eF9waHlfcmVhZF9zdGF0dXMsCisJCS5zb2Z0X3Jlc2V0CT0gYXI4eHh4X3BoeV9zb2Z0X3Jlc2V0LAorCQkuZ2V0X2ZlYXR1cmVzCT0gYXI4eHh4X2dldF9mZWF0dXJlcywKKwl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBhcjh4eHhfbWRpb2Rldl9vZl9tYXRjaFtdID0geworCXsKKwkJLmNvbXBhdGlibGUgPSAicWNhLGFyNzI0MHN3IiwKKwkJLmRhdGEgPSAmYXI3MjQwc3dfY2hpcCwKKwl9LCB7CisJCS5jb21wYXRpYmxlID0gInFjYSxhcjgyMjkiLAorCQkuZGF0YSA9ICZhcjgyMjlfY2hpcCwKKwl9LCB7CisJCS5jb21wYXRpYmxlID0gInFjYSxhcjgyMzYiLAorCQkuZGF0YSA9ICZhcjgyMzZfY2hpcCwKKwl9LCB7CisJCS5jb21wYXRpYmxlID0gInFjYSxhcjgzMjciLAorCQkuZGF0YSA9ICZhcjgzMjdfY2hpcCwKKwl9LAorCXsgLyogc2VudGluZWwgKi8gfSwKK307CisKK3N0YXRpYyBpbnQKK2FyOHh4eF9tZGlvZGV2X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldikKK3sKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKKwlzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXY7CisJc3RydWN0IHN3aXRjaF9kZXYgKnN3ZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbWRpb19ub2RlOworCWludCByZXQ7CisKKwltYXRjaCA9IG9mX21hdGNoX2RldmljZShhcjh4eHhfbWRpb2Rldl9vZl9tYXRjaCwgJm1kaW9kZXYtPmRldik7CisJaWYgKCFtYXRjaCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcml2ID0gYXI4eHh4X2NyZWF0ZSgpOworCWlmIChwcml2ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJcHJpdi0+bWlpX2J1cyA9IG1kaW9kZXYtPmJ1czsKKwlwcml2LT5wZGV2ID0gJm1kaW9kZXYtPmRldjsKKwlwcml2LT5jaGlwID0gKGNvbnN0IHN0cnVjdCBhcjh4eHhfY2hpcCAqKSBtYXRjaC0+ZGF0YTsKKworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHByaXYtPnBkZXYtPm9mX25vZGUsICJxY2EsbWliLXBvbGwtaW50ZXJ2YWwiLAorCQkJCSAgICZwcml2LT5taWJfcG9sbF9pbnRlcnZhbCk7CisJaWYgKHJldCkKKwkJcHJpdi0+bWliX3BvbGxfaW50ZXJ2YWwgPSAwOworCisJcmV0ID0gYXI4eHh4X3JlYWRfaWQocHJpdik7CisJaWYgKHJldCkKKwkJZ290byBmcmVlX3ByaXY7CisKKwlyZXQgPSBhcjh4eHhfcHJvYmVfc3dpdGNoKHByaXYpOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9wcml2OworCisJaWYgKHByaXYtPmNoaXAtPnBoeV9yZWFkICYmIHByaXYtPmNoaXAtPnBoeV93cml0ZSkgeworCQlwcml2LT5zd19taWlfYnVzID0gZGV2bV9tZGlvYnVzX2FsbG9jKCZtZGlvZGV2LT5kZXYpOworCQlwcml2LT5zd19taWlfYnVzLT5uYW1lID0gImFyOHh4eC1tZGlvIjsKKwkJcHJpdi0+c3dfbWlpX2J1cy0+cmVhZCA9IGFyOHh4eF9waHlfcmVhZDsKKwkJcHJpdi0+c3dfbWlpX2J1cy0+d3JpdGUgPSBhcjh4eHhfcGh5X3dyaXRlOworCQlwcml2LT5zd19taWlfYnVzLT5wcml2ID0gcHJpdjsKKwkJcHJpdi0+c3dfbWlpX2J1cy0+cGFyZW50ID0gJm1kaW9kZXYtPmRldjsKKwkJc25wcmludGYocHJpdi0+c3dfbWlpX2J1cy0+aWQsIE1JSV9CVVNfSURfU0laRSwgIiVzIiwKKwkJCSBkZXZfbmFtZSgmbWRpb2Rldi0+ZGV2KSk7CisJCW1kaW9fbm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKHByaXYtPnBkZXYtPm9mX25vZGUsICJtZGlvLWJ1cyIpOworCQlyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKHByaXYtPnN3X21paV9idXMsIG1kaW9fbm9kZSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZyZWVfcHJpdjsKKwl9CisKKwlzd2RldiA9ICZwcml2LT5kZXY7CisJc3dkZXYtPmFsaWFzID0gZGV2X25hbWUoJm1kaW9kZXYtPmRldik7CisKKwlpZiAob2ZfcHJvcGVydHlfcmVhZF9ib29sKHByaXYtPnBkZXYtPm9mX25vZGUsICJxY2EscGh5NC1taWktZW5hYmxlIikpIHsKKwkJcHJpdi0+cG9ydDRfcGh5ID0gdHJ1ZTsKKwkJc3dkZXYtPnBvcnRzLS07CisJfQorCisJcmV0ID0gcmVnaXN0ZXJfc3dpdGNoKHN3ZGV2LCBOVUxMKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfcHJpdjsKKworCXByX2luZm8oIiVzOiAlcyByZXYuICV1IHN3aXRjaCByZWdpc3RlcmVkIG9uICVzXG4iLAorCQlzd2Rldi0+ZGV2bmFtZSwgc3dkZXYtPm5hbWUsIHByaXYtPmNoaXBfcmV2LAorCQlkZXZfbmFtZSgmcHJpdi0+bWlpX2J1cy0+ZGV2KSk7CisKKwltdXRleF9sb2NrKCZhcjh4eHhfZGV2X2xpc3RfbG9jayk7CisJbGlzdF9hZGQoJnByaXYtPmxpc3QsICZhcjh4eHhfZGV2X2xpc3QpOworCW11dGV4X3VubG9jaygmYXI4eHh4X2Rldl9saXN0X2xvY2spOworCisJcHJpdi0+dXNlX2NvdW50Kys7CisKKwlyZXQgPSBhcjh4eHhfc3RhcnQocHJpdik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfdW5yZWdpc3Rlcl9zd2l0Y2g7CisKKwlkZXZfc2V0X2RydmRhdGEoJm1kaW9kZXYtPmRldiwgcHJpdik7CisKKwlyZXR1cm4gMDsKKworZXJyX3VucmVnaXN0ZXJfc3dpdGNoOgorCWlmICgtLXByaXYtPnVzZV9jb3VudCkKKwkJcmV0dXJuIHJldDsKKworCXVucmVnaXN0ZXJfc3dpdGNoKCZwcml2LT5kZXYpOworCitmcmVlX3ByaXY6CisJYXI4eHh4X2ZyZWUocHJpdik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQKK2FyOHh4eF9tZGlvZGV2X3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCit7CisJc3RydWN0IGFyOHh4eF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZtZGlvZGV2LT5kZXYpOworCisJaWYgKFdBUk5fT04oIXByaXYpKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZhcjh4eHhfZGV2X2xpc3RfbG9jayk7CisKKwlpZiAoLS1wcml2LT51c2VfY291bnQgPiAwKSB7CisJCW11dGV4X3VubG9jaygmYXI4eHh4X2Rldl9saXN0X2xvY2spOworCQlyZXR1cm47CisJfQorCisJbGlzdF9kZWwoJnByaXYtPmxpc3QpOworCW11dGV4X3VubG9jaygmYXI4eHh4X2Rldl9saXN0X2xvY2spOworCisJdW5yZWdpc3Rlcl9zd2l0Y2goJnByaXYtPmRldik7CisJYXI4eHh4X21pYl9zdG9wKHByaXYpOworCWlmKHByaXYtPnN3X21paV9idXMpCisJCW1kaW9idXNfdW5yZWdpc3Rlcihwcml2LT5zd19taWlfYnVzKTsKKwlhcjh4eHhfZnJlZShwcml2KTsKK30KKworc3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciBhcjh4eHhfbWRpb19kcml2ZXIgPSB7CisJLnByb2JlICA9IGFyOHh4eF9tZGlvZGV2X3Byb2JlLAorCS5yZW1vdmUgPSBhcjh4eHhfbWRpb2Rldl9yZW1vdmUsCisJLm1kaW9kcnYuZHJpdmVyID0geworCQkubmFtZSA9ICJhcjh4eHgtc3dpdGNoIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gYXI4eHh4X21kaW9kZXZfb2ZfbWF0Y2gsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFyODIxNl9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHBoeV9kcml2ZXJzX3JlZ2lzdGVyKGFyOHh4eF9waHlfZHJpdmVyLAorCQkJCSAgIEFSUkFZX1NJWkUoYXI4eHh4X3BoeV9kcml2ZXIpLAorCQkJCSAgIFRISVNfTU9EVUxFKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gbWRpb19kcml2ZXJfcmVnaXN0ZXIoJmFyOHh4eF9tZGlvX2RyaXZlcik7CisJaWYgKHJldCkKKwkJcGh5X2RyaXZlcnNfdW5yZWdpc3Rlcihhcjh4eHhfcGh5X2RyaXZlciwKKwkJCQkgICAgICAgQVJSQVlfU0laRShhcjh4eHhfcGh5X2RyaXZlcikpOworCisJcmV0dXJuIHJldDsKK30KK21vZHVsZV9pbml0KGFyODIxNl9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGFyODIxNl9leGl0KHZvaWQpCit7CisJbWRpb19kcml2ZXJfdW5yZWdpc3RlcigmYXI4eHh4X21kaW9fZHJpdmVyKTsKKwlwaHlfZHJpdmVyc191bnJlZ2lzdGVyKGFyOHh4eF9waHlfZHJpdmVyLAorCQkJICAgICAgICBBUlJBWV9TSVpFKGFyOHh4eF9waHlfZHJpdmVyKSk7Cit9Cittb2R1bGVfZXhpdChhcjgyMTZfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9hcjgyMTYuaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9hcjgyMTYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjJjZjYwCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9uZXQvcGh5L2FyODIxNi5oCkBAIC0wLDAgKzEsNzIzIEBACisvKgorICogYXI4MjE2Lmg6IEFSODIxNiBzd2l0Y2ggZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0FSODIxNl9ICisjZGVmaW5lIF9fQVI4MjE2X0gKKworI2RlZmluZSBCSVRTKF9zLCBfbikJKCgoMVVMIDw8IChfbikpIC0gMSkgPDwgX3MpCisKKyNkZWZpbmUgQVI4WFhYX0NBUF9HSUdFCQkJQklUKDApCisjZGVmaW5lIEFSOFhYWF9DQVBfTUlCX0NPVU5URVJTCQlCSVQoMSkKKworI2RlZmluZSBBUjhYWFhfTlVNX1BIWVMgCTUKKyNkZWZpbmUgQVI4MjE2X1BPUlRfQ1BVCTAKKyNkZWZpbmUgQVI4MjE2X05VTV9QT1JUUwk2CisjZGVmaW5lIEFSODIxNl9OVU1fVkxBTlMJMTYKKyNkZWZpbmUgQVI3MjQwU1dfTlVNX1BPUlRTCTUKKyNkZWZpbmUgQVI4MzE2X05VTV9WTEFOUwk0MDk2CisKKy8qIHNpemUgb2YgdGhlIHZsYW4gdGFibGUgKi8KKyNkZWZpbmUgQVI4WDE2X01BWF9WTEFOUwkxMjgKKyNkZWZpbmUgQVI4M1g3X01BWF9WTEFOUwk0MDk2CisjZGVmaW5lIEFSOFhYWF9NQVhfVkxBTlMJQVI4M1g3X01BWF9WTEFOUworCisjZGVmaW5lIEFSOFgxNl9QUk9CRV9SRVRSSUVTCTEwCisjZGVmaW5lIEFSOFgxNl9NQVhfUE9SVFMJOAorCisjZGVmaW5lIEFSOFhYWF9SRUdfQVJMX0NUUkxfQUdFX1RJTUVfU0VDUwk3CisjZGVmaW5lIEFSOFhYWF9ERUZBVUxUX0FSTF9BR0VfVElNRQkJMzAwCisKKy8qIEF0aGVyb3Mgc3BlY2lmaWMgTUlJIHJlZ2lzdGVycyAqLworI2RlZmluZSBNSUlfQVRIX01NRF9BRERSCQkweDBkCisjZGVmaW5lIE1JSV9BVEhfTU1EX0RBVEEJCTB4MGUKKyNkZWZpbmUgTUlJX0FUSF9EQkdfQUREUgkJMHgxZAorI2RlZmluZSBNSUlfQVRIX0RCR19EQVRBCQkweDFlCisKKyNkZWZpbmUgQVI4MjE2X1JFR19DVFJMCQkJMHgwMDAwCisjZGVmaW5lICAgQVI4MjE2X0NUUkxfUkVWSVNJT04JCUJJVFMoMCwgOCkKKyNkZWZpbmUgICBBUjgyMTZfQ1RSTF9SRVZJU0lPTl9TCTAKKyNkZWZpbmUgICBBUjgyMTZfQ1RSTF9WRVJTSU9OCQlCSVRTKDgsIDgpCisjZGVmaW5lICAgQVI4MjE2X0NUUkxfVkVSU0lPTl9TCQk4CisjZGVmaW5lICAgQVI4MjE2X0NUUkxfUkVTRVQJCUJJVCgzMSkKKworI2RlZmluZSBBUjgyMTZfUkVHX0ZMT09EX01BU0sJCTB4MDAyQworI2RlZmluZSAgIEFSODIxNl9GTV9VTklfREVTVF9QT1JUUwlCSVRTKDAsIDYpCisjZGVmaW5lICAgQVI4MjE2X0ZNX01VTFRJX0RFU1RfUE9SVFMJQklUUygxNiwgNikKKyNkZWZpbmUgICBBUjgyMTZfRk1fQ1BVX0JST0FEQ0FTVF9FTglCSVQoMjYpCisjZGVmaW5lICAgQVI4MjI5X0ZMT09EX01BU0tfVUNfRFAoX3ApCUJJVChfcCkKKyNkZWZpbmUgICBBUjgyMjlfRkxPT0RfTUFTS19NQ19EUChfcCkJQklUKDE2ICsgKF9wKSkKKyNkZWZpbmUgICBBUjgyMjlfRkxPT0RfTUFTS19CQ19EUChfcCkJQklUKDI1ICsgKF9wKSkKKworI2RlZmluZSBBUjgyMTZfUkVHX0dMT0JBTF9DVFJMCQkweDAwMzAKKyNkZWZpbmUgICBBUjgyMTZfR0NUUkxfTVRVCQlCSVRTKDAsIDExKQorI2RlZmluZSAgIEFSODIzNl9HQ1RSTF9NVFUJCUJJVFMoMCwgMTQpCisjZGVmaW5lICAgQVI4MzE2X0dDVFJMX01UVQkJQklUUygwLCAxNCkKKworI2RlZmluZSBBUjgyMTZfUkVHX1ZUVQkJCTB4MDA0MAorI2RlZmluZSAgIEFSODIxNl9WVFVfT1AJCQlCSVRTKDAsIDMpCisjZGVmaW5lICAgQVI4MjE2X1ZUVV9PUF9OT09QCQkweDAKKyNkZWZpbmUgICBBUjgyMTZfVlRVX09QX0ZMVVNICQkweDEKKyNkZWZpbmUgICBBUjgyMTZfVlRVX09QX0xPQUQJCTB4MgorI2RlZmluZSAgIEFSODIxNl9WVFVfT1BfUFVSR0UJCTB4MworI2RlZmluZSAgIEFSODIxNl9WVFVfT1BfUkVNT1ZFX1BPUlQJMHg0CisjZGVmaW5lICAgQVI4MjE2X1ZUVV9BQ1RJVkUJCUJJVCgzKQorI2RlZmluZSAgIEFSODIxNl9WVFVfRlVMTAkJQklUKDQpCisjZGVmaW5lICAgQVI4MjE2X1ZUVV9QT1JUCQlCSVRTKDgsIDQpCisjZGVmaW5lICAgQVI4MjE2X1ZUVV9QT1JUX1MJCTgKKyNkZWZpbmUgICBBUjgyMTZfVlRVX1ZJRAkJQklUUygxNiwgMTIpCisjZGVmaW5lICAgQVI4MjE2X1ZUVV9WSURfUwkJMTYKKyNkZWZpbmUgICBBUjgyMTZfVlRVX1BSSU8JCUJJVFMoMjgsIDMpCisjZGVmaW5lICAgQVI4MjE2X1ZUVV9QUklPX1MJCTI4CisjZGVmaW5lICAgQVI4MjE2X1ZUVV9QUklPX0VOCQlCSVQoMzEpCisKKyNkZWZpbmUgQVI4MjE2X1JFR19WVFVfREFUQQkJMHgwMDQ0CisjZGVmaW5lICAgQVI4MjE2X1ZUVURBVEFfTUVNQkVSCQlCSVRTKDAsIDEwKQorI2RlZmluZSAgIEFSODIzNl9WVFVEQVRBX01FTUJFUgkJQklUUygwLCA3KQorI2RlZmluZSAgIEFSODIxNl9WVFVEQVRBX1ZBTElECQlCSVQoMTEpCisKKyNkZWZpbmUgQVI4MjE2X1JFR19BVFVfRlVOQzAJCTB4MDA1MAorI2RlZmluZSAgIEFSODIxNl9BVFVfT1AJCQlCSVRTKDAsIDMpCisjZGVmaW5lICAgQVI4MjE2X0FUVV9PUF9OT09QCQkweDAKKyNkZWZpbmUgICBBUjgyMTZfQVRVX09QX0ZMVVNICQkweDEKKyNkZWZpbmUgICBBUjgyMTZfQVRVX09QX0xPQUQJCTB4MgorI2RlZmluZSAgIEFSODIxNl9BVFVfT1BfUFVSR0UJCTB4MworI2RlZmluZSAgIEFSODIxNl9BVFVfT1BfRkxVU0hfVU5MT0NLRUQJMHg0CisjZGVmaW5lICAgQVI4MjE2X0FUVV9PUF9GTFVTSF9QT1JUCTB4NQorI2RlZmluZSAgIEFSODIxNl9BVFVfT1BfR0VUX05FWFQJMHg2CisjZGVmaW5lICAgQVI4MjE2X0FUVV9BQ1RJVkUJCUJJVCgzKQorI2RlZmluZSAgIEFSODIxNl9BVFVfUE9SVF9OVU0JCUJJVFMoOCwgNCkKKyNkZWZpbmUgICBBUjgyMTZfQVRVX1BPUlRfTlVNX1MJCTgKKyNkZWZpbmUgICBBUjgyMTZfQVRVX0ZVTExfVklPCQlCSVQoMTIpCisjZGVmaW5lICAgQVI4MjE2X0FUVV9BRERSNQkJQklUUygxNiwgOCkKKyNkZWZpbmUgICBBUjgyMTZfQVRVX0FERFI1X1MJCTE2CisjZGVmaW5lICAgQVI4MjE2X0FUVV9BRERSNAkJQklUUygyNCwgOCkKKyNkZWZpbmUgICBBUjgyMTZfQVRVX0FERFI0X1MJCTI0CisKKyNkZWZpbmUgQVI4MjE2X1JFR19BVFVfRlVOQzEJCTB4MDA1NAorI2RlZmluZSAgIEFSODIxNl9BVFVfQUREUjMJCUJJVFMoMCwgOCkKKyNkZWZpbmUgICBBUjgyMTZfQVRVX0FERFIzX1MJCTAKKyNkZWZpbmUgICBBUjgyMTZfQVRVX0FERFIyCQlCSVRTKDgsIDgpCisjZGVmaW5lICAgQVI4MjE2X0FUVV9BRERSMl9TCQk4CisjZGVmaW5lICAgQVI4MjE2X0FUVV9BRERSMQkJQklUUygxNiwgOCkKKyNkZWZpbmUgICBBUjgyMTZfQVRVX0FERFIxX1MJCTE2CisjZGVmaW5lICAgQVI4MjE2X0FUVV9BRERSMAkJQklUUygyNCwgOCkKKyNkZWZpbmUgICBBUjgyMTZfQVRVX0FERFIwX1MJCTI0CisKKyNkZWZpbmUgQVI4MjE2X1JFR19BVFVfRlVOQzIJCTB4MDA1OAorI2RlZmluZSAgIEFSODIxNl9BVFVfUE9SVFMJCUJJVFMoMCwgNikKKyNkZWZpbmUgICBBUjgyMTZfQVRVX1BPUlRTX1MJCTAKKyNkZWZpbmUgICBBUjgyMTZfQVRVX1BPUlQwCQlCSVQoMCkKKyNkZWZpbmUgICBBUjgyMTZfQVRVX1BPUlQxCQlCSVQoMSkKKyNkZWZpbmUgICBBUjgyMTZfQVRVX1BPUlQyCQlCSVQoMikKKyNkZWZpbmUgICBBUjgyMTZfQVRVX1BPUlQzCQlCSVQoMykKKyNkZWZpbmUgICBBUjgyMTZfQVRVX1BPUlQ0CQlCSVQoNCkKKyNkZWZpbmUgICBBUjgyMTZfQVRVX1BPUlQ1CQlCSVQoNSkKKyNkZWZpbmUgICBBUjgyMTZfQVRVX1NUQVRVUwkJQklUUygxNiwgNCkKKyNkZWZpbmUgICBBUjgyMTZfQVRVX1NUQVRVU19TCQkxNgorCisjZGVmaW5lIEFSODIxNl9SRUdfQVRVX0NUUkwJCTB4MDA1QworI2RlZmluZSAgIEFSODIxNl9BVFVfQ1RSTF9BR0VfRU4JQklUKDE3KQorI2RlZmluZSAgIEFSODIxNl9BVFVfQ1RSTF9BR0VfVElNRQlCSVRTKDAsIDE2KQorI2RlZmluZSAgIEFSODIxNl9BVFVfQ1RSTF9BR0VfVElNRV9TCTAKKyNkZWZpbmUgICBBUjgyMzZfQVRVX0NUUkxfUkVTCQlCSVQoMjApCisjZGVmaW5lICAgQVI4MjE2X0FUVV9DVFJMX0xFQVJOX0NIQU5HRQlCSVQoMTgpCisjZGVmaW5lICAgQVI4MjE2X0FUVV9DVFJMX1JFU0VSVkVECUJJVCgxOSkKKyNkZWZpbmUgICBBUjgyMTZfQVRVX0NUUkxfQVJQX0VOCUJJVCgyMCkKKworI2RlZmluZSBBUjgyMTZfUkVHX1RBR19QUklPUklUWQkweDAwNzAKKworI2RlZmluZSBBUjgyMTZfUkVHX1NFUlZJQ0VfVEFHCQkweDAwNzQKKyNkZWZpbmUgIEFSODIxNl9TRVJWSUNFX1RBR19NCQlCSVRTKDAsIDE2KQorCisjZGVmaW5lIEFSODIxNl9SRUdfTUlCX0ZVTkMJCTB4MDA4MAorI2RlZmluZSAgIEFSODIxNl9NSUJfVElNRVIJCUJJVFMoMCwgMTYpCisjZGVmaW5lICAgQVI4MjE2X01JQl9BVF9IQUxGX0VOCQlCSVQoMTYpCisjZGVmaW5lICAgQVI4MjE2X01JQl9CVVNZCQlCSVQoMTcpCisjZGVmaW5lICAgQVI4MjE2X01JQl9GVU5DCQlCSVRTKDI0LCAzKQorI2RlZmluZSAgIEFSODIxNl9NSUJfRlVOQ19TCQkyNAorI2RlZmluZSAgIEFSODIxNl9NSUJfRlVOQ19OT19PUAkJMHgwCisjZGVmaW5lICAgQVI4MjE2X01JQl9GVU5DX0ZMVVNICQkweDEKKyNkZWZpbmUgICBBUjgyMTZfTUlCX0ZVTkNfQ0FQVFVSRQkweDMKKyNkZWZpbmUgICBBUjgyMzZfTUlCX0VOCQkJQklUKDMwKQorCisjZGVmaW5lIEFSODIxNl9SRUdfR0xPQkFMX0NQVVBPUlQJCTB4MDA3OAorI2RlZmluZSAgIEFSODIxNl9HTE9CQUxfQ1BVUE9SVF9NSVJST1JfUE9SVAlCSVRTKDQsIDQpCisjZGVmaW5lICAgQVI4MjE2X0dMT0JBTF9DUFVQT1JUX01JUlJPUl9QT1JUX1MJNAorI2RlZmluZSAgIEFSODIxNl9HTE9CQUxfQ1BVUE9SVF9FTgkJQklUKDgpCisKKyNkZWZpbmUgQVI4MjE2X1JFR19NRElPX0NUUkwJCTB4OTgKKyNkZWZpbmUgICBBUjgyMTZfTURJT19DVFJMX0RBVEFfTQlCSVRTKDAsIDE2KQorI2RlZmluZSAgIEFSODIxNl9NRElPX0NUUkxfUkVHX0FERFJfUwkxNgorI2RlZmluZSAgIEFSODIxNl9NRElPX0NUUkxfUEhZX0FERFJfUwkyMQorI2RlZmluZSAgIEFSODIxNl9NRElPX0NUUkxfQ01EX1dSSVRFCTAKKyNkZWZpbmUgICBBUjgyMTZfTURJT19DVFJMX0NNRF9SRUFECUJJVCgyNykKKyNkZWZpbmUgICBBUjgyMTZfTURJT19DVFJMX01BU1RFUl9FTglCSVQoMzApCisjZGVmaW5lICAgQVI4MjE2X01ESU9fQ1RSTF9CVVNZCUJJVCgzMSkKKworI2RlZmluZSBBUjgyMTZfUE9SVF9PRkZTRVQoX2kpCQkoMHgwMTAwICogKF9pICsgMSkpCisjZGVmaW5lIEFSODIxNl9SRUdfUE9SVF9TVEFUVVMoX2kpCShBUjgyMTZfUE9SVF9PRkZTRVQoX2kpICsgMHgwMDAwKQorI2RlZmluZSAgIEFSODIxNl9QT1JUX1NUQVRVU19TUEVFRAlCSVRTKDAsMikKKyNkZWZpbmUgICBBUjgyMTZfUE9SVF9TVEFUVVNfU1BFRURfUwkwCisjZGVmaW5lICAgQVI4MjE2X1BPUlRfU1RBVFVTX1RYTUFDCUJJVCgyKQorI2RlZmluZSAgIEFSODIxNl9QT1JUX1NUQVRVU19SWE1BQwlCSVQoMykKKyNkZWZpbmUgICBBUjgyMTZfUE9SVF9TVEFUVVNfVFhGTE9XCUJJVCg0KQorI2RlZmluZSAgIEFSODIxNl9QT1JUX1NUQVRVU19SWEZMT1cJQklUKDUpCisjZGVmaW5lICAgQVI4MjE2X1BPUlRfU1RBVFVTX0RVUExFWAlCSVQoNikKKyNkZWZpbmUgICBBUjgyMTZfUE9SVF9TVEFUVVNfTElOS19VUAlCSVQoOCkKKyNkZWZpbmUgICBBUjgyMTZfUE9SVF9TVEFUVVNfTElOS19BVVRPCUJJVCg5KQorI2RlZmluZSAgIEFSODIxNl9QT1JUX1NUQVRVU19MSU5LX1BBVVNFCUJJVCgxMCkKKyNkZWZpbmUgICBBUjgyMTZfUE9SVF9TVEFUVVNfRkxPV19DT05UUk9MICBCSVQoMTIpCisKKyNkZWZpbmUgQVI4MjE2X1JFR19QT1JUX0NUUkwoX2kpCShBUjgyMTZfUE9SVF9PRkZTRVQoX2kpICsgMHgwMDA0KQorCisvKiBwb3J0IGZvcndhcmRpbmcgc3RhdGUgKi8KKyNkZWZpbmUgICBBUjgyMTZfUE9SVF9DVFJMX1NUQVRFCUJJVFMoMCwgMykKKyNkZWZpbmUgICBBUjgyMTZfUE9SVF9DVFJMX1NUQVRFX1MJMAorCisjZGVmaW5lICAgQVI4MjE2X1BPUlRfQ1RSTF9MRUFSTl9MT0NLCUJJVCg3KQorCisvKiBlZ3Jlc3MgODAyLjFxIG1vZGUgKi8KKyNkZWZpbmUgICBBUjgyMTZfUE9SVF9DVFJMX1ZMQU5fTU9ERQlCSVRTKDgsIDIpCisjZGVmaW5lICAgQVI4MjE2X1BPUlRfQ1RSTF9WTEFOX01PREVfUwk4CisKKyNkZWZpbmUgICBBUjgyMTZfUE9SVF9DVFJMX0lHTVBfU05PT1AJQklUKDEwKQorI2RlZmluZSAgIEFSODIxNl9QT1JUX0NUUkxfSEVBREVSCUJJVCgxMSkKKyNkZWZpbmUgICBBUjgyMTZfUE9SVF9DVFJMX01BQ19MT09QCUJJVCgxMikKKyNkZWZpbmUgICBBUjgyMTZfUE9SVF9DVFJMX1NJTkdMRV9WTEFOCUJJVCgxMykKKyNkZWZpbmUgICBBUjgyMTZfUE9SVF9DVFJMX0xFQVJOCUJJVCgxNCkKKyNkZWZpbmUgICBBUjgyMTZfUE9SVF9DVFJMX01JUlJPUl9UWAlCSVQoMTYpCisjZGVmaW5lICAgQVI4MjE2X1BPUlRfQ1RSTF9NSVJST1JfUlgJQklUKDE3KQorCisjZGVmaW5lIEFSODIxNl9SRUdfUE9SVF9WTEFOKF9pKQkoQVI4MjE2X1BPUlRfT0ZGU0VUKF9pKSArIDB4MDAwOCkKKworI2RlZmluZSAgIEFSODIxNl9QT1JUX1ZMQU5fREVGQVVMVF9JRAlCSVRTKDAsIDEyKQorI2RlZmluZSAgIEFSODIxNl9QT1JUX1ZMQU5fREVGQVVMVF9JRF9TCTAKKworI2RlZmluZSAgIEFSODIxNl9QT1JUX1ZMQU5fREVTVF9QT1JUUwlCSVRTKDE2LCA5KQorI2RlZmluZSAgIEFSODIxNl9QT1JUX1ZMQU5fREVTVF9QT1JUU19TCTE2CisKKy8qIGJpdDAgYWRkZWQgdG8gdGhlIHByaW9yaXR5IGZpZWxkIG9mIGVncmVzcyBmcmFtZXMgKi8KKyNkZWZpbmUgICBBUjgyMTZfUE9SVF9WTEFOX1RYX1BSSU8JQklUKDI3KQorCisvKiBwb3J0IGRlZmF1bHQgcHJpb3JpdHkgKi8KKyNkZWZpbmUgICBBUjgyMTZfUE9SVF9WTEFOX1BSSU9SSVRZCUJJVFMoMjgsIDIpCisjZGVmaW5lICAgQVI4MjE2X1BPUlRfVkxBTl9QUklPUklUWV9TCTI4CisKKy8qIGluZ3Jlc3MgODAyLjFxIG1vZGUgKi8KKyNkZWZpbmUgICBBUjgyMTZfUE9SVF9WTEFOX01PREUJCUJJVFMoMzAsIDIpCisjZGVmaW5lICAgQVI4MjE2X1BPUlRfVkxBTl9NT0RFX1MJMzAKKworI2RlZmluZSBBUjgyMTZfUkVHX1BPUlRfUkFURShfaSkJKEFSODIxNl9QT1JUX09GRlNFVChfaSkgKyAweDAwMGMpCisjZGVmaW5lIEFSODIxNl9SRUdfUE9SVF9QUklPKF9pKQkoQVI4MjE2X1BPUlRfT0ZGU0VUKF9pKSArIDB4MDAxMCkKKworI2RlZmluZSBBUjgyMTZfU1RBVFNfUlhCUk9BRAkJMHgwMAorI2RlZmluZSBBUjgyMTZfU1RBVFNfUlhQQVVTRQkJMHgwNAorI2RlZmluZSBBUjgyMTZfU1RBVFNfUlhNVUxUSQkJMHgwOAorI2RlZmluZSBBUjgyMTZfU1RBVFNfUlhGQ1NFUlIJCTB4MGMKKyNkZWZpbmUgQVI4MjE2X1NUQVRTX1JYQUxJR05FUlIJCTB4MTAKKyNkZWZpbmUgQVI4MjE2X1NUQVRTX1JYUlVOVAkJMHgxNAorI2RlZmluZSBBUjgyMTZfU1RBVFNfUlhGUkFHTUVOVAkJMHgxOAorI2RlZmluZSBBUjgyMTZfU1RBVFNfUlg2NEJZVEUJCTB4MWMKKyNkZWZpbmUgQVI4MjE2X1NUQVRTX1JYMTI4QllURQkJMHgyMAorI2RlZmluZSBBUjgyMTZfU1RBVFNfUlgyNTZCWVRFCQkweDI0CisjZGVmaW5lIEFSODIxNl9TVEFUU19SWDUxMkJZVEUJCTB4MjgKKyNkZWZpbmUgQVI4MjE2X1NUQVRTX1JYMTAyNEJZVEUJCTB4MmMKKyNkZWZpbmUgQVI4MjE2X1NUQVRTX1JYTUFYQllURQkJMHgzMAorI2RlZmluZSBBUjgyMTZfU1RBVFNfUlhUT09MT05HCQkweDM0CisjZGVmaW5lIEFSODIxNl9TVEFUU19SWEdPT0RCWVRFCQkweDM4CisjZGVmaW5lIEFSODIxNl9TVEFUU19SWEJBREJZVEUJCTB4NDAKKyNkZWZpbmUgQVI4MjE2X1NUQVRTX1JYT1ZFUkZMT1cJCTB4NDgKKyNkZWZpbmUgQVI4MjE2X1NUQVRTX0ZJTFRFUkVECQkweDRjCisjZGVmaW5lIEFSODIxNl9TVEFUU19UWEJST0FECQkweDUwCisjZGVmaW5lIEFSODIxNl9TVEFUU19UWFBBVVNFCQkweDU0CisjZGVmaW5lIEFSODIxNl9TVEFUU19UWE1VTFRJCQkweDU4CisjZGVmaW5lIEFSODIxNl9TVEFUU19UWFVOREVSUlVOCQkweDVjCisjZGVmaW5lIEFSODIxNl9TVEFUU19UWDY0QllURQkJMHg2MAorI2RlZmluZSBBUjgyMTZfU1RBVFNfVFgxMjhCWVRFCQkweDY0CisjZGVmaW5lIEFSODIxNl9TVEFUU19UWDI1NkJZVEUJCTB4NjgKKyNkZWZpbmUgQVI4MjE2X1NUQVRTX1RYNTEyQllURQkJMHg2YworI2RlZmluZSBBUjgyMTZfU1RBVFNfVFgxMDI0QllURQkJMHg3MAorI2RlZmluZSBBUjgyMTZfU1RBVFNfVFhNQVhCWVRFCQkweDc0CisjZGVmaW5lIEFSODIxNl9TVEFUU19UWE9WRVJTSVpFCQkweDc4CisjZGVmaW5lIEFSODIxNl9TVEFUU19UWEJZVEUJCTB4N2MKKyNkZWZpbmUgQVI4MjE2X1NUQVRTX1RYQ09MTElTSU9OCTB4ODQKKyNkZWZpbmUgQVI4MjE2X1NUQVRTX1RYQUJPUlRDT0wJCTB4ODgKKyNkZWZpbmUgQVI4MjE2X1NUQVRTX1RYTVVMVElDT0wJCTB4OGMKKyNkZWZpbmUgQVI4MjE2X1NUQVRTX1RYU0lOR0xFQ09MCTB4OTAKKyNkZWZpbmUgQVI4MjE2X1NUQVRTX1RYRVhDREVGRVIJCTB4OTQKKyNkZWZpbmUgQVI4MjE2X1NUQVRTX1RYREVGRVIJCTB4OTgKKyNkZWZpbmUgQVI4MjE2X1NUQVRTX1RYTEFURUNPTAkJMHg5YworCisjZGVmaW5lIEFSODIxNl9NSUJfUlhCX0lECQkxNAkvKiBSeEdvb2RCeXRlICovCisjZGVmaW5lIEFSODIxNl9NSUJfVFhCX0lECQkyOQkvKiBUeEJ5dGUgKi8KKworI2RlZmluZSBBUjgyMjlfUkVHX09QRVJfTU9ERTAJCTB4MDQKKyNkZWZpbmUgICBBUjgyMjlfT1BFUl9NT0RFMF9NQUNfR01JSV9FTglCSVQoNikKKyNkZWZpbmUgICBBUjgyMjlfT1BFUl9NT0RFMF9QSFlfTUlJX0VOCUJJVCgxMCkKKworI2RlZmluZSBBUjgyMjlfUkVHX09QRVJfTU9ERTEJCTB4MDgKKyNkZWZpbmUgICBBUjgyMjlfUkVHX09QRVJfTU9ERTFfUEhZNF9NSUlfRU4JQklUKDI4KQorCisjZGVmaW5lIEFSODIyOV9SRUdfUU1fQ1RSTAkJMHgzYworI2RlZmluZSAgIEFSODIyOV9RTV9DVFJMX0FSUF9FTgkJQklUKDE1KQorCisjZGVmaW5lIEFSODIzNl9SRUdfUE9SVF9WTEFOKF9pKQkoQVI4MjE2X1BPUlRfT0ZGU0VUKChfaSkpICsgMHgwMDA4KQorI2RlZmluZSAgIEFSODIzNl9QT1JUX1ZMQU5fREVGQVVMVF9JRAlCSVRTKDE2LCAxMikKKyNkZWZpbmUgICBBUjgyMzZfUE9SVF9WTEFOX0RFRkFVTFRfSURfUwkxNgorI2RlZmluZSAgIEFSODIzNl9QT1JUX1ZMQU5fUFJJT1JJVFkJQklUUygyOSwgMykKKyNkZWZpbmUgICBBUjgyMzZfUE9SVF9WTEFOX1BSSU9SSVRZX1MJMjgKKworI2RlZmluZSBBUjgyMzZfUkVHX1BPUlRfVkxBTjIoX2kpCShBUjgyMTZfUE9SVF9PRkZTRVQoKF9pKSkgKyAweDAwMGMpCisjZGVmaW5lICAgQVI4MjM2X1BPUlRfVkxBTjJfTUVNQkVSCUJJVFMoMTYsIDcpCisjZGVmaW5lICAgQVI4MjM2X1BPUlRfVkxBTjJfTUVNQkVSX1MJMTYKKyNkZWZpbmUgICBBUjgyMzZfUE9SVF9WTEFOMl9UWF9QUklPCUJJVCgyMykKKyNkZWZpbmUgICBBUjgyMzZfUE9SVF9WTEFOMl9WTEFOX01PREUJQklUUygzMCwgMikKKyNkZWZpbmUgICBBUjgyMzZfUE9SVF9WTEFOMl9WTEFOX01PREVfUwkzMAorCisjZGVmaW5lIEFSODIzNl9TVEFUU19SWEJST0FECQkweDAwCisjZGVmaW5lIEFSODIzNl9TVEFUU19SWFBBVVNFCQkweDA0CisjZGVmaW5lIEFSODIzNl9TVEFUU19SWE1VTFRJCQkweDA4CisjZGVmaW5lIEFSODIzNl9TVEFUU19SWEZDU0VSUgkJMHgwYworI2RlZmluZSBBUjgyMzZfU1RBVFNfUlhBTElHTkVSUgkJMHgxMAorI2RlZmluZSBBUjgyMzZfU1RBVFNfUlhSVU5UCQkweDE0CisjZGVmaW5lIEFSODIzNl9TVEFUU19SWEZSQUdNRU5UCQkweDE4CisjZGVmaW5lIEFSODIzNl9TVEFUU19SWDY0QllURQkJMHgxYworI2RlZmluZSBBUjgyMzZfU1RBVFNfUlgxMjhCWVRFCQkweDIwCisjZGVmaW5lIEFSODIzNl9TVEFUU19SWDI1NkJZVEUJCTB4MjQKKyNkZWZpbmUgQVI4MjM2X1NUQVRTX1JYNTEyQllURQkJMHgyOAorI2RlZmluZSBBUjgyMzZfU1RBVFNfUlgxMDI0QllURQkJMHgyYworI2RlZmluZSBBUjgyMzZfU1RBVFNfUlgxNTE4QllURQkJMHgzMAorI2RlZmluZSBBUjgyMzZfU1RBVFNfUlhNQVhCWVRFCQkweDM0CisjZGVmaW5lIEFSODIzNl9TVEFUU19SWFRPT0xPTkcJCTB4MzgKKyNkZWZpbmUgQVI4MjM2X1NUQVRTX1JYR09PREJZVEUJCTB4M2MKKyNkZWZpbmUgQVI4MjM2X1NUQVRTX1JYQkFEQllURQkJMHg0NAorI2RlZmluZSBBUjgyMzZfU1RBVFNfUlhPVkVSRkxPVwkJMHg0YworI2RlZmluZSBBUjgyMzZfU1RBVFNfRklMVEVSRUQJCTB4NTAKKyNkZWZpbmUgQVI4MjM2X1NUQVRTX1RYQlJPQUQJCTB4NTQKKyNkZWZpbmUgQVI4MjM2X1NUQVRTX1RYUEFVU0UJCTB4NTgKKyNkZWZpbmUgQVI4MjM2X1NUQVRTX1RYTVVMVEkJCTB4NWMKKyNkZWZpbmUgQVI4MjM2X1NUQVRTX1RYVU5ERVJSVU4JCTB4NjAKKyNkZWZpbmUgQVI4MjM2X1NUQVRTX1RYNjRCWVRFCQkweDY0CisjZGVmaW5lIEFSODIzNl9TVEFUU19UWDEyOEJZVEUJCTB4NjgKKyNkZWZpbmUgQVI4MjM2X1NUQVRTX1RYMjU2QllURQkJMHg2YworI2RlZmluZSBBUjgyMzZfU1RBVFNfVFg1MTJCWVRFCQkweDcwCisjZGVmaW5lIEFSODIzNl9TVEFUU19UWDEwMjRCWVRFCQkweDc0CisjZGVmaW5lIEFSODIzNl9TVEFUU19UWDE1MThCWVRFCQkweDc4CisjZGVmaW5lIEFSODIzNl9TVEFUU19UWE1BWEJZVEUJCTB4N2MKKyNkZWZpbmUgQVI4MjM2X1NUQVRTX1RYT1ZFUlNJWkUJCTB4ODAKKyNkZWZpbmUgQVI4MjM2X1NUQVRTX1RYQllURQkJMHg4NAorI2RlZmluZSBBUjgyMzZfU1RBVFNfVFhDT0xMSVNJT04JMHg4YworI2RlZmluZSBBUjgyMzZfU1RBVFNfVFhBQk9SVENPTAkJMHg5MAorI2RlZmluZSBBUjgyMzZfU1RBVFNfVFhNVUxUSUNPTAkJMHg5NAorI2RlZmluZSBBUjgyMzZfU1RBVFNfVFhTSU5HTEVDT0wJMHg5OAorI2RlZmluZSBBUjgyMzZfU1RBVFNfVFhFWENERUZFUgkJMHg5YworI2RlZmluZSBBUjgyMzZfU1RBVFNfVFhERUZFUgkJMHhhMAorI2RlZmluZSBBUjgyMzZfU1RBVFNfVFhMQVRFQ09MCQkweGE0CisKKyNkZWZpbmUgQVI4MjM2X01JQl9SWEJfSUQJCTE1CS8qIFJ4R29vZEJ5dGUgKi8KKyNkZWZpbmUgQVI4MjM2X01JQl9UWEJfSUQJCTMxCS8qIFR4Qnl0ZSAqLworCisjZGVmaW5lIEFSODMxNl9SRUdfUE9TVFJJUAkJCTB4MDAwOAorI2RlZmluZSAgIEFSODMxNl9QT1NUUklQX01BQzBfR01JSV9FTgkJQklUKDApCisjZGVmaW5lICAgQVI4MzE2X1BPU1RSSVBfTUFDMF9SR01JSV9FTgkJQklUKDEpCisjZGVmaW5lICAgQVI4MzE2X1BPU1RSSVBfUEhZNF9HTUlJX0VOCQlCSVQoMikKKyNkZWZpbmUgICBBUjgzMTZfUE9TVFJJUF9QSFk0X1JHTUlJX0VOCQlCSVQoMykKKyNkZWZpbmUgICBBUjgzMTZfUE9TVFJJUF9NQUMwX01BQ19NT0RFCQlCSVQoNCkKKyNkZWZpbmUgICBBUjgzMTZfUE9TVFJJUF9SVExfTU9ERQkJQklUKDUpCisjZGVmaW5lICAgQVI4MzE2X1BPU1RSSVBfUkdNSUlfUlhDTEtfREVMQVlfRU4JQklUKDYpCisjZGVmaW5lICAgQVI4MzE2X1BPU1RSSVBfUkdNSUlfVFhDTEtfREVMQVlfRU4JQklUKDcpCisjZGVmaW5lICAgQVI4MzE2X1BPU1RSSVBfU0VSREVTX0VOCQlCSVQoOCkKKyNkZWZpbmUgICBBUjgzMTZfUE9TVFJJUF9TRUxfQU5BX1JTVAkJQklUKDkpCisjZGVmaW5lICAgQVI4MzE2X1BPU1RSSVBfR0FURV8yNU1fRU4JCUJJVCgxMCkKKyNkZWZpbmUgICBBUjgzMTZfUE9TVFJJUF9TRUxfQ0xLMjVNCQlCSVQoMTEpCisjZGVmaW5lICAgQVI4MzE2X1BPU1RSSVBfSElCX1BVTFNFX0hXCQlCSVQoMTIpCisjZGVmaW5lICAgQVI4MzE2X1BPU1RSSVBfREJHX01PREVfSQkJQklUKDEzKQorI2RlZmluZSAgIEFSODMxNl9QT1NUUklQX01BQzVfTUFDX01PREUJCUJJVCgxNCkKKyNkZWZpbmUgICBBUjgzMTZfUE9TVFJJUF9NQUM1X1BIWV9NT0RFCQlCSVQoMTUpCisjZGVmaW5lICAgQVI4MzE2X1BPU1RSSVBfUE9XRVJfRE9XTl9IVwkJQklUKDE2KQorI2RlZmluZSAgIEFSODMxNl9QT1NUUklQX0xQV19TVEFURV9FTgkJQklUKDE3KQorI2RlZmluZSAgIEFSODMxNl9QT1NUUklQX01BTl9FTgkJCUJJVCgxOCkKKyNkZWZpbmUgICBBUjgzMTZfUE9TVFJJUF9QSFlfUExMX09OCQlCSVQoMTkpCisjZGVmaW5lICAgQVI4MzE2X1BPU1RSSVBfTFBXX0VYSVQJCUJJVCgyMCkKKyNkZWZpbmUgICBBUjgzMTZfUE9TVFJJUF9UWERFTEFZX1MwCQlCSVQoMjEpCisjZGVmaW5lICAgQVI4MzE2X1BPU1RSSVBfVFhERUxBWV9TMQkJQklUKDIyKQorI2RlZmluZSAgIEFSODMxNl9QT1NUUklQX1JYREVMQVlfUzAJCUJJVCgyMykKKyNkZWZpbmUgICBBUjgzMTZfUE9TVFJJUF9MRURfT1BFTl9FTgkJQklUKDI0KQorI2RlZmluZSAgIEFSODMxNl9QT1NUUklQX1NQSV9FTgkJCUJJVCgyNSkKKyNkZWZpbmUgICBBUjgzMTZfUE9TVFJJUF9SWERFTEFZX1MxCQlCSVQoMjYpCisjZGVmaW5lICAgQVI4MzE2X1BPU1RSSVBfUE9XRVJfT05fU0VMCQlCSVQoMzEpCisKKy8qIHBvcnQgc3BlZWQgKi8KK2VudW0geworICAgICAgICBBUjgyMTZfUE9SVF9TUEVFRF8xME0gPSAwLAorICAgICAgICBBUjgyMTZfUE9SVF9TUEVFRF8xMDBNID0gMSwKKyAgICAgICAgQVI4MjE2X1BPUlRfU1BFRURfMTAwME0gPSAyLAorICAgICAgICBBUjgyMTZfUE9SVF9TUEVFRF9FUlIgPSAzLAorfTsKKworLyogaW5ncmVzcyA4MDIuMXEgbW9kZSAqLworZW51bSB7CisJQVI4MjE2X0lOX1BPUlRfT05MWSA9IDAsCisJQVI4MjE2X0lOX1BPUlRfRkFMTEJBQ0sgPSAxLAorCUFSODIxNl9JTl9WTEFOX09OTFkgPSAyLAorCUFSODIxNl9JTl9TRUNVUkUgPSAzCit9OworCisvKiBlZ3Jlc3MgODAyLjFxIG1vZGUgKi8KK2VudW0geworCUFSODIxNl9PVVRfS0VFUCA9IDAsCisJQVI4MjE2X09VVF9TVFJJUF9WTEFOID0gMSwKKwlBUjgyMTZfT1VUX0FERF9WTEFOID0gMgorfTsKKworLyogcG9ydCBmb3J3YXJkaW5nIHN0YXRlICovCitlbnVtIHsKKwlBUjgyMTZfUE9SVF9TVEFURV9ESVNBQkxFRCA9IDAsCisJQVI4MjE2X1BPUlRfU1RBVEVfQkxPQ0sgPSAxLAorCUFSODIxNl9QT1JUX1NUQVRFX0xJU1RFTiA9IDIsCisJQVI4MjE2X1BPUlRfU1RBVEVfTEVBUk4gPSAzLAorCUFSODIxNl9QT1JUX1NUQVRFX0ZPUldBUkQgPSA0Cit9OworCisvKiBtaWIgY291bnRlciB0eXBlICovCitlbnVtIHsKKwlBUjhYWFhfTUlCX0JBU0lDID0gMCwKKwlBUjhYWFhfTUlCX0VYVEVOREVEID0gMQorfTsKKworZW51bSB7CisJQVI4WFhYX1ZFUl9BUjgyMTYgPSAweDAxLAorCUFSOFhYWF9WRVJfQVI4MjM2ID0gMHgwMywKKwlBUjhYWFhfVkVSX0FSODMxNiA9IDB4MTAsCisJQVI4WFhYX1ZFUl9BUjgzMjcgPSAweDEyLAorCUFSOFhYWF9WRVJfQVI4MzM3ID0gMHgxMywKK307CisKKyNkZWZpbmUgQVI4WFhYX05VTV9BUkxfUkVDT1JEUwkxMDAKKworZW51bSBhcmxfb3AgeworCUFSOFhYWF9BUkxfSU5JVElBTElaRSwKKwlBUjhYWFhfQVJMX0dFVF9ORVhUCit9OworCitzdHJ1Y3QgYXJsX2VudHJ5IHsKKwl1MTYgcG9ydG1hcDsKKwl1OCBtYWNbNl07Cit9OworCitzdHJ1Y3QgYXI4eHh4X3ByaXY7CisKK3N0cnVjdCBhcjh4eHhfbWliX2Rlc2MgeworCXVuc2lnbmVkIGludCBzaXplOworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1OCB0eXBlOworfTsKKworc3RydWN0IGFyOHh4eF9jaGlwIHsKKwl1bnNpZ25lZCBsb25nIGNhcHM7CisJYm9vbCBjb25maWdfYXRfcHJvYmU7CisJYm9vbCBtaWlfbG9fZmlyc3Q7CisKKwkvKiBwYXJhbWV0ZXJzIHRvIGNhbGN1bGF0ZSBSRUdfUE9SVF9TVEFUU19CQVNFICovCisJdW5zaWduZWQgcmVnX3BvcnRfc3RhdHNfc3RhcnQ7CisJdW5zaWduZWQgcmVnX3BvcnRfc3RhdHNfbGVuZ3RoOworCisJdW5zaWduZWQgcmVnX2FybF9jdHJsOworCisJaW50ICgqaHdfaW5pdCkoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2KTsKKwl2b2lkICgqY2xlYW51cCkoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2KTsKKworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IHZsYW5zOworCWludCBwb3J0czsKKwljb25zdCBzdHJ1Y3Qgc3dpdGNoX2Rldl9vcHMgKnN3b3BzOworCisJdm9pZCAoKmluaXRfZ2xvYmFscykoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2KTsKKwl2b2lkICgqaW5pdF9wb3J0KShzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYsIGludCBwb3J0KTsKKwl2b2lkICgqc2V0dXBfcG9ydCkoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2LCBpbnQgcG9ydCwgdTMyIG1lbWJlcnMpOworCXUzMiAoKnJlYWRfcG9ydF9zdGF0dXMpKHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiwgaW50IHBvcnQpOworCXUzMiAoKnJlYWRfcG9ydF9lZWVfc3RhdHVzKShzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYsIGludCBwb3J0KTsKKwlpbnQgKCphdHVfZmx1c2gpKHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdik7CisJaW50ICgqYXR1X2ZsdXNoX3BvcnQpKHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiwgaW50IHBvcnQpOworCXZvaWQgKCp2dHVfZmx1c2gpKHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdik7CisJdm9pZCAoKnZ0dV9sb2FkX3ZsYW4pKHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiwgdTMyIHZpZCwgdTMyIHBvcnRfbWFzayk7CisJdm9pZCAoKnBoeV9maXh1cCkoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2LCBpbnQgcGh5KTsKKwl2b2lkICgqc2V0X21pcnJvcl9yZWdzKShzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYpOworCXZvaWQgKCpnZXRfYXJsX2VudHJ5KShzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYsIHN0cnVjdCBhcmxfZW50cnkgKmEsCisJCQkgICAgICB1MzIgKnN0YXR1cywgZW51bSBhcmxfb3Agb3ApOworCWludCAoKnN3X2h3X2FwcGx5KShzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2KTsKKwl2b2lkICgqcGh5X3JnbWlpX3NldCkoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKKwlpbnQgKCpwaHlfcmVhZCkoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2LCBpbnQgYWRkciwgaW50IHJlZ251bSk7CisJaW50ICgqcGh5X3dyaXRlKShzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYsIGludCBhZGRyLCBpbnQgcmVnbnVtLCB1MTYgdmFsKTsKKworCWNvbnN0IHN0cnVjdCBhcjh4eHhfbWliX2Rlc2MgKm1pYl9kZWNzOworCXVuc2lnbmVkIG51bV9taWJzOworCXVuc2lnbmVkIG1pYl9mdW5jOworCWludCBtaWJfcnhiX2lkOworCWludCBtaWJfdHhiX2lkOworfTsKKworc3RydWN0IGFyOHh4eF9wcml2IHsKKwlzdHJ1Y3Qgc3dpdGNoX2RldiBkZXY7CisJc3RydWN0IG1paV9idXMgKm1paV9idXM7CisJc3RydWN0IG1paV9idXMgKnN3X21paV9idXM7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeTsKKwlzdHJ1Y3QgZGV2aWNlICpwZGV2OworCisJaW50ICgqZ2V0X3BvcnRfbGluaykodW5zaWduZWQgcG9ydCk7CisKKwljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm5kb19vbGQ7CisJc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5kbzsKKwlzdHJ1Y3QgbXV0ZXggcmVnX211dGV4OworCXU4IGNoaXBfdmVyOworCXU4IGNoaXBfcmV2OworCWNvbnN0IHN0cnVjdCBhcjh4eHhfY2hpcCAqY2hpcDsKKwl2b2lkICpjaGlwX2RhdGE7CisJYm9vbCBpbml0aWFsaXplZDsKKwlib29sIHBvcnQ0X3BoeTsKKwljaGFyIGJ1ZlsyMDQ4XTsKKwlzdHJ1Y3QgYXJsX2VudHJ5IGFybF90YWJsZVtBUjhYWFhfTlVNX0FSTF9SRUNPUkRTXTsKKwljaGFyIGFybF9idWZbQVI4WFhYX05VTV9BUkxfUkVDT1JEUyAqIDMyICsgMjU2XTsKKwlib29sIGxpbmtfdXBbQVI4WDE2X01BWF9QT1JUU107CisKKwlib29sIGluaXQ7CisKKwlzdHJ1Y3QgbXV0ZXggbWliX2xvY2s7CisJc3RydWN0IGRlbGF5ZWRfd29yayBtaWJfd29yazsKKwl1NjQgKm1pYl9zdGF0czsKKwl1MzIgbWliX3BvbGxfaW50ZXJ2YWw7CisJdTggbWliX3R5cGU7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJdW5zaWduZWQgaW50IHVzZV9jb3VudDsKKworCS8qIGFsbCBmaWVsZHMgYmVsb3cgYXJlIGNsZWFyZWQgb24gcmVzZXQgKi8KKwlib29sIHZsYW47CisKKwl1MTYgdmxhbl9pZFtBUjhYWFhfTUFYX1ZMQU5TXTsKKwl1OCB2bGFuX3RhYmxlW0FSOFhYWF9NQVhfVkxBTlNdOworCXU4IHZsYW5fdGFnZ2VkOworCXUxNiBwdmlkW0FSOFgxNl9NQVhfUE9SVFNdOworCWludCBhcmxfYWdlX3RpbWU7CisKKwkvKiBtaXJyb3JpbmcgKi8KKwlib29sIG1pcnJvcl9yeDsKKwlib29sIG1pcnJvcl90eDsKKwlpbnQgc291cmNlX3BvcnQ7CisJaW50IG1vbml0b3JfcG9ydDsKKwl1OCBwb3J0X3ZsYW5fcHJpb1tBUjhYMTZfTUFYX1BPUlRTXTsKK307CisKK3UzMgorYXI4eHh4X21paV9yZWFkMzIoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2LCBpbnQgcGh5X2lkLCBpbnQgcmVnbnVtKTsKK3ZvaWQKK2FyOHh4eF9taWlfd3JpdGUzMihzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYsIGludCBwaHlfaWQsIGludCByZWdudW0sIHUzMiB2YWwpOwordTMyCithcjh4eHhfcmVhZChzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYsIGludCByZWcpOwordm9pZAorYXI4eHh4X3dyaXRlKHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiwgaW50IHJlZywgdTMyIHZhbCk7Cit1MzIKK2FyOHh4eF9ybXcoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2LCBpbnQgcmVnLCB1MzIgbWFzaywgdTMyIHZhbCk7CisKK3ZvaWQKK2FyOHh4eF9waHlfZGJnX3JlYWQoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2LCBpbnQgcGh5X2FkZHIsCisJCXUxNiBkYmdfYWRkciwgdTE2ICpkYmdfZGF0YSk7Cit2b2lkCithcjh4eHhfcGh5X2RiZ193cml0ZShzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYsIGludCBwaHlfYWRkciwKKwkJICAgICB1MTYgZGJnX2FkZHIsIHUxNiBkYmdfZGF0YSk7Cit2b2lkCithcjh4eHhfcGh5X21tZF93cml0ZShzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYsIGludCBwaHlfYWRkciwgdTE2IGFkZHIsIHUxNiByZWcsIHUxNiBkYXRhKTsKK3UxNgorYXI4eHh4X3BoeV9tbWRfcmVhZChzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYsIGludCBwaHlfYWRkciwgdTE2IGFkZHIsIHUxNiByZWcpOwordm9pZAorYXI4eHh4X3BoeV9pbml0KHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdik7CitpbnQKK2FyOHh4eF9zd19zZXRfdmxhbihzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCSAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpOworaW50Cithcjh4eHhfc3dfZ2V0X3ZsYW4oc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKTsKK2ludAorYXI4eHh4X3N3X3NldF9yZXNldF9taWJzKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpOworaW50Cithcjh4eHhfc3dfc2V0X21pYl9wb2xsX2ludGVydmFsKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJICAgICAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpOworaW50Cithcjh4eHhfc3dfZ2V0X21pYl9wb2xsX2ludGVydmFsKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJICAgICAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpOworaW50Cithcjh4eHhfc3dfc2V0X21pYl90eXBlKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJICAgICAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpOworaW50Cithcjh4eHhfc3dfZ2V0X21pYl90eXBlKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJICAgICAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpOworaW50Cithcjh4eHhfc3dfc2V0X21pcnJvcl9yeF9lbmFibGUoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkgICAgICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCk7CitpbnQKK2FyOHh4eF9zd19nZXRfbWlycm9yX3J4X2VuYWJsZShzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCSAgICAgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKTsKK2ludAorYXI4eHh4X3N3X3NldF9taXJyb3JfdHhfZW5hYmxlKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJICAgICAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpOworaW50Cithcjh4eHhfc3dfZ2V0X21pcnJvcl90eF9lbmFibGUoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkgICAgICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCk7CitpbnQKK2FyOHh4eF9zd19zZXRfbWlycm9yX21vbml0b3JfcG9ydChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJCSAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJCSAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCk7CitpbnQKK2FyOHh4eF9zd19nZXRfbWlycm9yX21vbml0b3JfcG9ydChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJCSAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJCSAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCk7CitpbnQKK2FyOHh4eF9zd19zZXRfbWlycm9yX3NvdXJjZV9wb3J0KHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkJIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCQkgc3RydWN0IHN3aXRjaF92YWwgKnZhbCk7CitpbnQKK2FyOHh4eF9zd19nZXRfbWlycm9yX3NvdXJjZV9wb3J0KHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkJIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCQkgc3RydWN0IHN3aXRjaF92YWwgKnZhbCk7CitpbnQKK2FyOHh4eF9zd19zZXRfcHZpZChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBpbnQgcG9ydCwgaW50IHZsYW4pOworaW50Cithcjh4eHhfc3dfZ2V0X3B2aWQoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgaW50IHBvcnQsIGludCAqdmxhbik7CitpbnQKK2FyOHh4eF9zd19od19hcHBseShzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2KTsKK2ludAorYXI4eHh4X3N3X3Jlc2V0X3N3aXRjaChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2KTsKK2ludAorYXI4eHh4X3N3X2dldF9wb3J0X2xpbmsoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgaW50IHBvcnQsCisJCQlzdHJ1Y3Qgc3dpdGNoX3BvcnRfbGluayAqbGluayk7CitpbnQKK2FyOHh4eF9zd19zZXRfcG9ydF9yZXNldF9taWIoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKTsKK2ludAorYXI4eHh4X3N3X2dldF9wb3J0X21pYihzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpOworaW50Cithcjh4eHhfc3dfZ2V0X2FybF9hZ2VfdGltZShzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJICAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCk7CitpbnQKK2FyOHh4eF9zd19zZXRfYXJsX2FnZV90aW1lKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKTsKK2ludAorYXI4eHh4X3N3X2dldF9hcmxfdGFibGUoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCWNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCXN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpOworaW50Cithcjh4eHhfc3dfc2V0X2ZsdXNoX2FybF90YWJsZShzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJICAgICAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJICAgICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCk7CitpbnQKK2FyOHh4eF9zd19zZXRfZmx1c2hfcG9ydF9hcmxfdGFibGUoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCQkgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkJICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCk7CitpbnQKK2FyOHh4eF9zd19nZXRfcG9ydF9zdGF0cyhzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBpbnQgcG9ydCwKKwkJCXN0cnVjdCBzd2l0Y2hfcG9ydF9zdGF0cyAqc3RhdHMpOworaW50CithcjgyMTZfd2FpdF9iaXQoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2LCBpbnQgcmVnLCB1MzIgbWFzaywgdTMyIHZhbCk7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFyOHh4eF9wcml2ICoKK3N3ZGV2X3RvX2FyOHh4eChzdHJ1Y3Qgc3dpdGNoX2RldiAqc3dkZXYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzd2Rldiwgc3RydWN0IGFyOHh4eF9wcml2LCBkZXYpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgYXI4eHh4X2hhc19naWdlKHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdikKK3sKKwlyZXR1cm4gcHJpdi0+Y2hpcC0+Y2FwcyAmIEFSOFhYWF9DQVBfR0lHRTsKK30KKworc3RhdGljIGlubGluZSBib29sIGFyOHh4eF9oYXNfbWliX2NvdW50ZXJzKHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdikKK3sKKwlyZXR1cm4gcHJpdi0+Y2hpcC0+Y2FwcyAmIEFSOFhYWF9DQVBfTUlCX0NPVU5URVJTOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgY2hpcF9pc19hcjgyMTYoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2KQoreworCXJldHVybiBwcml2LT5jaGlwX3ZlciA9PSBBUjhYWFhfVkVSX0FSODIxNjsKK30KKworc3RhdGljIGlubGluZSBib29sIGNoaXBfaXNfYXI4MjM2KHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdikKK3sKKwlyZXR1cm4gcHJpdi0+Y2hpcF92ZXIgPT0gQVI4WFhYX1ZFUl9BUjgyMzY7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBjaGlwX2lzX2FyODMxNihzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYpCit7CisJcmV0dXJuIHByaXYtPmNoaXBfdmVyID09IEFSOFhYWF9WRVJfQVI4MzE2OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgY2hpcF9pc19hcjgzMjcoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2KQoreworCXJldHVybiBwcml2LT5jaGlwX3ZlciA9PSBBUjhYWFhfVkVSX0FSODMyNzsKK30KKworc3RhdGljIGlubGluZSBib29sIGNoaXBfaXNfYXI4MzM3KHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdikKK3sKKwlyZXR1cm4gcHJpdi0+Y2hpcF92ZXIgPT0gQVI4WFhYX1ZFUl9BUjgzMzc7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYXI4eHh4X3JlZ19zZXQoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2LCBpbnQgcmVnLCB1MzIgdmFsKQoreworCWFyOHh4eF9ybXcocHJpdiwgcmVnLCAwLCB2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2FyOHh4eF9yZWdfY2xlYXIoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2LCBpbnQgcmVnLCB1MzIgdmFsKQoreworCWFyOHh4eF9ybXcocHJpdiwgcmVnLCB2YWwsIDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3NwbGl0X2FkZHIodTMyIHJlZ2FkZHIsIHUxNiAqcjEsIHUxNiAqcjIsIHUxNiAqcGFnZSkKK3sKKwlyZWdhZGRyID4+PSAxOworCSpyMSA9IHJlZ2FkZHIgJiAweDFlOworCisJcmVnYWRkciA+Pj0gNTsKKwkqcjIgPSByZWdhZGRyICYgMHg3OworCisJcmVnYWRkciA+Pj0gMzsKKwkqcGFnZSA9IHJlZ2FkZHIgJiAweDFmZjsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit3YWl0X2Zvcl9wYWdlX3N3aXRjaCh2b2lkKQoreworCXVkZWxheSg1KTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL25ldC9waHkvYXI4MzI3LmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL25ldC9waHkvYXI4MzI3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNlNTJjZQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9hcjgzMjcuYwpAQCAtMCwwICsxLDE1NTAgQEAKKy8qCisgKiBhcjgzMjcuYzogQVI4MjE2IHN3aXRjaCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgR2Fib3IgSnVob3MgPGp1aG9zZ0BvcGVud3J0Lm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zd2l0Y2guaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L2xvY2tkZXAuaD4KKyNpbmNsdWRlIDxsaW51eC9hcjgyMTZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvbWRpby5oPgorCisjaW5jbHVkZSAiYXI4MjE2LmgiCisjaW5jbHVkZSAiYXI4MzI3LmgiCisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgYXI4eHh4X21pYl9kZXNjIGFyODIzNl9taWJzWzM5XTsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgYXI4eHh4X3N3X2F0dHJfdmxhblsxXTsKKworc3RhdGljIHUzMgorYXI4MzI3X2dldF9wYWRfY2ZnKHN0cnVjdCBhcjgzMjdfcGFkX2NmZyAqY2ZnKQoreworCXUzMiB0OworCisJaWYgKCFjZmcpCisJCXJldHVybiAwOworCisJdCA9IDA7CisJc3dpdGNoIChjZmctPm1vZGUpIHsKKwljYXNlIEFSODMyN19QQURfTkM6CisJCWJyZWFrOworCisJY2FzZSBBUjgzMjdfUEFEX01BQzJNQUNfTUlJOgorCQl0ID0gQVI4MzI3X1BBRF9NQUNfTUlJX0VOOworCQlpZiAoY2ZnLT5yeGNsa19zZWwpCisJCQl0IHw9IEFSODMyN19QQURfTUFDX01JSV9SWENMS19TRUw7CisJCWlmIChjZmctPnR4Y2xrX3NlbCkKKwkJCXQgfD0gQVI4MzI3X1BBRF9NQUNfTUlJX1RYQ0xLX1NFTDsKKwkJYnJlYWs7CisKKwljYXNlIEFSODMyN19QQURfTUFDMk1BQ19HTUlJOgorCQl0ID0gQVI4MzI3X1BBRF9NQUNfR01JSV9FTjsKKwkJaWYgKGNmZy0+cnhjbGtfc2VsKQorCQkJdCB8PSBBUjgzMjdfUEFEX01BQ19HTUlJX1JYQ0xLX1NFTDsKKwkJaWYgKGNmZy0+dHhjbGtfc2VsKQorCQkJdCB8PSBBUjgzMjdfUEFEX01BQ19HTUlJX1RYQ0xLX1NFTDsKKwkJYnJlYWs7CisKKwljYXNlIEFSODMyN19QQURfTUFDX1NHTUlJOgorCQl0ID0gQVI4MzI3X1BBRF9TR01JSV9FTjsKKworCQkvKgorCQkgKiBXQVIgZm9yIHRoZSBRVWFsY29tbSBBdGhlcm9zIEFQMTM2IGJvYXJkLgorCQkgKiBJdCBzZWVtcyB0aGF0IFJHTUlJIFRYL1JYIGRlbGF5IHNldHRpbmdzIG5lZWRzIHRvIGJlCisJCSAqIGFwcGxpZWQgZm9yIFNHTUlJIG1vZGUgYXMgd2VsbCwgVGhlIGV0aGVybmV0IGlzIG5vdAorCQkgKiByZWxpYWJsZSB3aXRob3V0IHRoaXMuCisJCSAqLworCQl0IHw9IGNmZy0+dHhjbGtfZGVsYXlfc2VsIDw8IEFSODMyN19QQURfUkdNSUlfVFhDTEtfREVMQVlfU0VMX1M7CisJCXQgfD0gY2ZnLT5yeGNsa19kZWxheV9zZWwgPDwgQVI4MzI3X1BBRF9SR01JSV9SWENMS19ERUxBWV9TRUxfUzsKKwkJaWYgKGNmZy0+cnhjbGtfZGVsYXlfZW4pCisJCQl0IHw9IEFSODMyN19QQURfUkdNSUlfUlhDTEtfREVMQVlfRU47CisJCWlmIChjZmctPnR4Y2xrX2RlbGF5X2VuKQorCQkJdCB8PSBBUjgzMjdfUEFEX1JHTUlJX1RYQ0xLX0RFTEFZX0VOOworCisJCWlmIChjZmctPnNnbWlpX2RlbGF5X2VuKQorCQkJdCB8PSBBUjgzMjdfUEFEX1NHTUlJX0RFTEFZX0VOOworCisJCWJyZWFrOworCisJY2FzZSBBUjgzMjdfUEFEX01BQzJQSFlfTUlJOgorCQl0ID0gQVI4MzI3X1BBRF9QSFlfTUlJX0VOOworCQlpZiAoY2ZnLT5yeGNsa19zZWwpCisJCQl0IHw9IEFSODMyN19QQURfUEhZX01JSV9SWENMS19TRUw7CisJCWlmIChjZmctPnR4Y2xrX3NlbCkKKwkJCXQgfD0gQVI4MzI3X1BBRF9QSFlfTUlJX1RYQ0xLX1NFTDsKKwkJYnJlYWs7CisKKwljYXNlIEFSODMyN19QQURfTUFDMlBIWV9HTUlJOgorCQl0ID0gQVI4MzI3X1BBRF9QSFlfR01JSV9FTjsKKwkJaWYgKGNmZy0+cGlwZV9yeGNsa19zZWwpCisJCQl0IHw9IEFSODMyN19QQURfUEhZX0dNSUlfUElQRV9SWENMS19TRUw7CisJCWlmIChjZmctPnJ4Y2xrX3NlbCkKKwkJCXQgfD0gQVI4MzI3X1BBRF9QSFlfR01JSV9SWENMS19TRUw7CisJCWlmIChjZmctPnR4Y2xrX3NlbCkKKwkJCXQgfD0gQVI4MzI3X1BBRF9QSFlfR01JSV9UWENMS19TRUw7CisJCWJyZWFrOworCisJY2FzZSBBUjgzMjdfUEFEX01BQ19SR01JSToKKwkJdCA9IEFSODMyN19QQURfUkdNSUlfRU47CisJCXQgfD0gY2ZnLT50eGNsa19kZWxheV9zZWwgPDwgQVI4MzI3X1BBRF9SR01JSV9UWENMS19ERUxBWV9TRUxfUzsKKwkJdCB8PSBjZmctPnJ4Y2xrX2RlbGF5X3NlbCA8PCBBUjgzMjdfUEFEX1JHTUlJX1JYQ0xLX0RFTEFZX1NFTF9TOworCQlpZiAoY2ZnLT5yeGNsa19kZWxheV9lbikKKwkJCXQgfD0gQVI4MzI3X1BBRF9SR01JSV9SWENMS19ERUxBWV9FTjsKKwkJaWYgKGNmZy0+dHhjbGtfZGVsYXlfZW4pCisJCQl0IHw9IEFSODMyN19QQURfUkdNSUlfVFhDTEtfREVMQVlfRU47CisJCWJyZWFrOworCisJY2FzZSBBUjgzMjdfUEFEX1BIWV9HTUlJOgorCQl0ID0gQVI4MzI3X1BBRF9QSFlYX0dNSUlfRU47CisJCWJyZWFrOworCisJY2FzZSBBUjgzMjdfUEFEX1BIWV9SR01JSToKKwkJdCA9IEFSODMyN19QQURfUEhZWF9SR01JSV9FTjsKKwkJYnJlYWs7CisKKwljYXNlIEFSODMyN19QQURfUEhZX01JSToKKwkJdCA9IEFSODMyN19QQURfUEhZWF9NSUlfRU47CisJCWJyZWFrOworCX0KKworCXJldHVybiB0OworfQorCitzdGF0aWMgdm9pZAorYXI4MzI3X3BoeV9yZ21paV9zZXQoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQoreworCXUxNiBwaHlfdmFsID0gMDsKKwlpbnQgcGh5YWRkciA9IHBoeWRldi0+bWRpby5hZGRyOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwaHlkZXYtPm1kaW8uZGV2Lm9mX25vZGU7CisKKwlpZiAoIW5wKQorCQlyZXR1cm47CisKKwlpZiAoIW9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwgInFjYSxwaHktcmdtaWktZW4iKSkgeworCQlwcl9lcnIoImFyODMyNzogcWNhLHBoeS1yZ21paS1lbiBpcyBub3Qgc3BlY2lmaWVkXG4iKTsKKwkJcmV0dXJuOworCX0KKwlhcjh4eHhfcGh5X2RiZ19yZWFkKHByaXYsIHBoeWFkZHIsCisJCQkJQVI4MzI3X1BIWV9NT0RFX1NFTCwgJnBoeV92YWwpOworCXBoeV92YWwgfD0gQVI4MzI3X1BIWV9NT0RFX1NFTF9SR01JSTsKKwlhcjh4eHhfcGh5X2RiZ193cml0ZShwcml2LCBwaHlhZGRyLAorCQkJCUFSODMyN19QSFlfTU9ERV9TRUwsIHBoeV92YWwpOworCisJLyogc2V0IHJnbWlpIHR4IGNsb2NrIGRlbGF5IGlmIG5lZWRlZCAqLworCWlmICghb2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCAicWNhLHR4Y2xrLWRlbGF5LWVuIikpIHsKKwkJcHJfZXJyKCJhcjgzMjc6IHFjYSx0eGNsay1kZWxheS1lbiBpcyBub3Qgc3BlY2lmaWVkXG4iKTsKKwkJcmV0dXJuOworCX0KKwlhcjh4eHhfcGh5X2RiZ19yZWFkKHByaXYsIHBoeWFkZHIsCisJCQkJQVI4MzI3X1BIWV9TWVNfQ1RSTCwgJnBoeV92YWwpOworCXBoeV92YWwgfD0gQVI4MzI3X1BIWV9TWVNfQ1RSTF9SR01JSV9UWF9ERUxBWTsKKwlhcjh4eHhfcGh5X2RiZ193cml0ZShwcml2LCBwaHlhZGRyLAorCQkJCUFSODMyN19QSFlfU1lTX0NUUkwsIHBoeV92YWwpOworCisJLyogc2V0IHJnbWlpIHJ4IGNsb2NrIGRlbGF5IGlmIG5lZWRlZCAqLworCWlmICghb2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCAicWNhLHJ4Y2xrLWRlbGF5LWVuIikpIHsKKwkJcHJfZXJyKCJhcjgzMjc6IHFjYSxyeGNsay1kZWxheS1lbiBpcyBub3Qgc3BlY2lmaWVkXG4iKTsKKwkJcmV0dXJuOworCX0KKwlhcjh4eHhfcGh5X2RiZ19yZWFkKHByaXYsIHBoeWFkZHIsCisJCQkJQVI4MzI3X1BIWV9URVNUX0NUUkwsICZwaHlfdmFsKTsKKwlwaHlfdmFsIHw9IEFSODMyN19QSFlfVEVTVF9DVFJMX1JHTUlJX1JYX0RFTEFZOworCWFyOHh4eF9waHlfZGJnX3dyaXRlKHByaXYsIHBoeWFkZHIsCisJCQkJQVI4MzI3X1BIWV9URVNUX0NUUkwsIHBoeV92YWwpOworfQorCitzdGF0aWMgdm9pZAorYXI4MzI3X3BoeV9maXh1cChzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYsIGludCBwaHkpCit7CisJc3dpdGNoIChwcml2LT5jaGlwX3JldikgeworCWNhc2UgMToKKwkJLyogRm9yIDEwME0gd2F2ZWZvcm0gKi8KKwkJYXI4eHh4X3BoeV9kYmdfd3JpdGUocHJpdiwgcGh5LCAwLCAweDAyZWEpOworCQkvKiBUdXJuIG9uIEdpZ2FiaXQgY2xvY2sgKi8KKwkJYXI4eHh4X3BoeV9kYmdfd3JpdGUocHJpdiwgcGh5LCAweDNkLCAweDY4YTApOworCQlicmVhazsKKworCWNhc2UgMjoKKwkJYXI4eHh4X3BoeV9tbWRfd3JpdGUocHJpdiwgcGh5LCAweDcsIDB4M2MsIDB4MCk7CisJCS8qIGZhbGx0aHJvdWdoICovCisJY2FzZSA0OgorCQlhcjh4eHhfcGh5X21tZF93cml0ZShwcml2LCBwaHksIDB4MywgMHg4MDBkLCAweDgwM2YpOworCQlhcjh4eHhfcGh5X2RiZ193cml0ZShwcml2LCBwaHksIDB4M2QsIDB4Njg2MCk7CisJCWFyOHh4eF9waHlfZGJnX3dyaXRlKHByaXYsIHBoeSwgMHg1LCAweDJjNDYpOworCQlhcjh4eHhfcGh5X2RiZ193cml0ZShwcml2LCBwaHksIDB4M2MsIDB4NjAwMCk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHUzMgorYXI4MzI3X2dldF9wb3J0X2luaXRfc3RhdHVzKHN0cnVjdCBhcjgzMjdfcG9ydF9jZmcgKmNmZykKK3sKKwl1MzIgdDsKKworCWlmICghY2ZnLT5mb3JjZV9saW5rKQorCQlyZXR1cm4gQVI4MjE2X1BPUlRfU1RBVFVTX0xJTktfQVVUTzsKKworCXQgPSBBUjgyMTZfUE9SVF9TVEFUVVNfVFhNQUMgfCBBUjgyMTZfUE9SVF9TVEFUVVNfUlhNQUM7CisJdCB8PSBjZmctPmR1cGxleCA/IEFSODIxNl9QT1JUX1NUQVRVU19EVVBMRVggOiAwOworCXQgfD0gY2ZnLT5yeHBhdXNlID8gQVI4MjE2X1BPUlRfU1RBVFVTX1JYRkxPVyA6IDA7CisJdCB8PSBjZmctPnR4cGF1c2UgPyBBUjgyMTZfUE9SVF9TVEFUVVNfVFhGTE9XIDogMDsKKworCXN3aXRjaCAoY2ZnLT5zcGVlZCkgeworCWNhc2UgQVI4MzI3X1BPUlRfU1BFRURfMTA6CisJCXQgfD0gQVI4MjE2X1BPUlRfU1BFRURfMTBNOworCQlicmVhazsKKwljYXNlIEFSODMyN19QT1JUX1NQRUVEXzEwMDoKKwkJdCB8PSBBUjgyMTZfUE9SVF9TUEVFRF8xMDBNOworCQlicmVhazsKKwljYXNlIEFSODMyN19QT1JUX1NQRUVEXzEwMDA6CisJCXQgfD0gQVI4MjE2X1BPUlRfU1BFRURfMTAwME07CisJCWJyZWFrOworCX0KKworCXJldHVybiB0OworfQorCisjZGVmaW5lIEFSODMyN19MRURfRU5UUlkoX251bSwgX3JlZywgX3NoaWZ0KSBcCisJW19udW1dID0geyAucmVnID0gKF9yZWcpLCAuc2hpZnQgPSAoX3NoaWZ0KSB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXI4MzI3X2xlZF9lbnRyeQorYXI4MzI3X2xlZF9tYXBbQVI4MzI3X05VTV9MRURTXSA9IHsKKwlBUjgzMjdfTEVEX0VOVFJZKEFSODMyN19MRURfUEhZMF8wLCAwLCAxNCksCisJQVI4MzI3X0xFRF9FTlRSWShBUjgzMjdfTEVEX1BIWTBfMSwgMSwgMTQpLAorCUFSODMyN19MRURfRU5UUlkoQVI4MzI3X0xFRF9QSFkwXzIsIDIsIDE0KSwKKworCUFSODMyN19MRURfRU5UUlkoQVI4MzI3X0xFRF9QSFkxXzAsIDMsIDgpLAorCUFSODMyN19MRURfRU5UUlkoQVI4MzI3X0xFRF9QSFkxXzEsIDMsIDEwKSwKKwlBUjgzMjdfTEVEX0VOVFJZKEFSODMyN19MRURfUEhZMV8yLCAzLCAxMiksCisKKwlBUjgzMjdfTEVEX0VOVFJZKEFSODMyN19MRURfUEhZMl8wLCAzLCAxNCksCisJQVI4MzI3X0xFRF9FTlRSWShBUjgzMjdfTEVEX1BIWTJfMSwgMywgMTYpLAorCUFSODMyN19MRURfRU5UUlkoQVI4MzI3X0xFRF9QSFkyXzIsIDMsIDE4KSwKKworCUFSODMyN19MRURfRU5UUlkoQVI4MzI3X0xFRF9QSFkzXzAsIDMsIDIwKSwKKwlBUjgzMjdfTEVEX0VOVFJZKEFSODMyN19MRURfUEhZM18xLCAzLCAyMiksCisJQVI4MzI3X0xFRF9FTlRSWShBUjgzMjdfTEVEX1BIWTNfMiwgMywgMjQpLAorCisJQVI4MzI3X0xFRF9FTlRSWShBUjgzMjdfTEVEX1BIWTRfMCwgMCwgMzApLAorCUFSODMyN19MRURfRU5UUlkoQVI4MzI3X0xFRF9QSFk0XzEsIDEsIDMwKSwKKwlBUjgzMjdfTEVEX0VOVFJZKEFSODMyN19MRURfUEhZNF8yLCAyLCAzMCksCit9OworCitzdGF0aWMgdm9pZAorYXI4MzI3X3NldF9sZWRfcGF0dGVybihzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBsZWRfbnVtLAorCQkgICAgICAgZW51bSBhcjgzMjdfbGVkX3BhdHRlcm4gcGF0dGVybikKK3sKKwljb25zdCBzdHJ1Y3QgYXI4MzI3X2xlZF9lbnRyeSAqZW50cnk7CisKKwllbnRyeSA9ICZhcjgzMjdfbGVkX21hcFtsZWRfbnVtXTsKKwlhcjh4eHhfcm13KHByaXYsIEFSODMyN19SRUdfTEVEX0NUUkwoZW50cnktPnJlZyksCisJCSAgICgzIDw8IGVudHJ5LT5zaGlmdCksIHBhdHRlcm4gPDwgZW50cnktPnNoaWZ0KTsKK30KKworc3RhdGljIHZvaWQKK2FyODMyN19sZWRfd29ya19mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXI4MzI3X2xlZCAqYWxlZDsKKwl1OCBwYXR0ZXJuOworCisJYWxlZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXI4MzI3X2xlZCwgbGVkX3dvcmspOworCisJcGF0dGVybiA9IGFsZWQtPnBhdHRlcm47CisKKwlhcjgzMjdfc2V0X2xlZF9wYXR0ZXJuKGFsZWQtPnN3X3ByaXYsIGFsZWQtPmxlZF9udW0sCisJCQkgICAgICAgcGF0dGVybik7Cit9CisKK3N0YXRpYyB2b2lkCithcjgzMjdfbGVkX3NjaGVkdWxlX2NoYW5nZShzdHJ1Y3QgYXI4MzI3X2xlZCAqYWxlZCwgdTggcGF0dGVybikKK3sKKwlpZiAoYWxlZC0+cGF0dGVybiA9PSBwYXR0ZXJuKQorCQlyZXR1cm47CisKKwlhbGVkLT5wYXR0ZXJuID0gcGF0dGVybjsKKwlzY2hlZHVsZV93b3JrKCZhbGVkLT5sZWRfd29yayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFyODMyN19sZWQgKgorbGVkX2NkZXZfdG9fYXI4MzI3X2xlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgYXI4MzI3X2xlZCwgY2Rldik7Cit9CisKK3N0YXRpYyBpbnQKK2FyODMyN19sZWRfYmxpbmtfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAorCQkgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZikKK3sKKwlzdHJ1Y3QgYXI4MzI3X2xlZCAqYWxlZCA9IGxlZF9jZGV2X3RvX2FyODMyN19sZWQobGVkX2NkZXYpOworCisJaWYgKCpkZWxheV9vbiA9PSAwICYmICpkZWxheV9vZmYgPT0gMCkgeworCQkqZGVsYXlfb24gPSAxMjU7CisJCSpkZWxheV9vZmYgPSAxMjU7CisJfQorCisJaWYgKCpkZWxheV9vbiAhPSAxMjUgfHwgKmRlbGF5X29mZiAhPSAxMjUpIHsKKwkJLyoKKwkJICogVGhlIGhhcmR3YXJlIG9ubHkgc3VwcG9ydHMgYmxpbmtpbmcgYXQgNEh6LiBGYWxsIGJhY2sKKwkJICogdG8gc29mdHdhcmUgaW1wbGVtZW50YXRpb24gaW4gb3RoZXIgY2FzZXMuCisJCSAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzcGluX2xvY2soJmFsZWQtPmxvY2spOworCisJYWxlZC0+ZW5hYmxlX2h3X21vZGUgPSBmYWxzZTsKKwlhcjgzMjdfbGVkX3NjaGVkdWxlX2NoYW5nZShhbGVkLCBBUjgzMjdfTEVEX1BBVFRFUk5fQkxJTkspOworCisJc3Bpbl91bmxvY2soJmFsZWQtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCithcjgzMjdfbGVkX3NldF9icmlnaHRuZXNzKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAorCQkJICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCit7CisJc3RydWN0IGFyODMyN19sZWQgKmFsZWQgPSBsZWRfY2Rldl90b19hcjgzMjdfbGVkKGxlZF9jZGV2KTsKKwl1OCBwYXR0ZXJuOworCWJvb2wgYWN0aXZlOworCisJYWN0aXZlID0gKGJyaWdodG5lc3MgIT0gTEVEX09GRik7CisJYWN0aXZlIF49IGFsZWQtPmFjdGl2ZV9sb3c7CisKKwlwYXR0ZXJuID0gKGFjdGl2ZSkgPyBBUjgzMjdfTEVEX1BBVFRFUk5fT04gOgorCQkJICAgICBBUjgzMjdfTEVEX1BBVFRFUk5fT0ZGOworCisJc3Bpbl9sb2NrKCZhbGVkLT5sb2NrKTsKKworCWFsZWQtPmVuYWJsZV9od19tb2RlID0gZmFsc2U7CisJYXI4MzI3X2xlZF9zY2hlZHVsZV9jaGFuZ2UoYWxlZCwgcGF0dGVybik7CisKKwlzcGluX3VubG9jaygmYWxlZC0+bG9jayk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CithcjgzMjdfbGVkX2VuYWJsZV9od19tb2RlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBhcjgzMjdfbGVkICphbGVkID0gbGVkX2NkZXZfdG9fYXI4MzI3X2xlZChsZWRfY2Rldik7CisJc3NpemVfdCByZXQgPSAwOworCisJcmV0ICs9IHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBhbGVkLT5lbmFibGVfaHdfbW9kZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdAorYXI4MzI3X2xlZF9lbmFibGVfaHdfbW9kZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY29uc3QgY2hhciAqYnVmLAorCQkJCXNpemVfdCBzaXplKQoreworICAgICAgICBzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBhcjgzMjdfbGVkICphbGVkID0gbGVkX2NkZXZfdG9fYXI4MzI3X2xlZChsZWRfY2Rldik7CisJdTggcGF0dGVybjsKKwl1OCB2YWx1ZTsKKwlpbnQgcmV0OworCisJcmV0ID0ga3N0cnRvdTgoYnVmLCAxMCwgJnZhbHVlKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2soJmFsZWQtPmxvY2spOworCisJYWxlZC0+ZW5hYmxlX2h3X21vZGUgPSAhIXZhbHVlOworCWlmIChhbGVkLT5lbmFibGVfaHdfbW9kZSkKKwkJcGF0dGVybiA9IEFSODMyN19MRURfUEFUVEVSTl9SVUxFOworCWVsc2UKKwkJcGF0dGVybiA9IEFSODMyN19MRURfUEFUVEVSTl9PRkY7CisKKwlhcjgzMjdfbGVkX3NjaGVkdWxlX2NoYW5nZShhbGVkLCBwYXR0ZXJuKTsKKworCXNwaW5fdW5sb2NrKCZhbGVkLT5sb2NrKTsKKworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoZW5hYmxlX2h3X21vZGUsICBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgYXI4MzI3X2xlZF9lbmFibGVfaHdfbW9kZV9zaG93LAorCQkgICBhcjgzMjdfbGVkX2VuYWJsZV9od19tb2RlX3N0b3JlKTsKKworc3RhdGljIGludAorYXI4MzI3X2xlZF9yZWdpc3RlcihzdHJ1Y3QgYXI4MzI3X2xlZCAqYWxlZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKE5VTEwsICZhbGVkLT5jZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChhbGVkLT5tb2RlID09IEFSODMyN19MRURfTU9ERV9IVykgeworCQlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoYWxlZC0+Y2Rldi5kZXYsCisJCQkJCSAmZGV2X2F0dHJfZW5hYmxlX2h3X21vZGUpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJfdW5yZWdpc3RlcjsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX3VucmVnaXN0ZXI6CisJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmFsZWQtPmNkZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkCithcjgzMjdfbGVkX3VucmVnaXN0ZXIoc3RydWN0IGFyODMyN19sZWQgKmFsZWQpCit7CisJaWYgKGFsZWQtPm1vZGUgPT0gQVI4MzI3X0xFRF9NT0RFX0hXKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoYWxlZC0+Y2Rldi5kZXYsICZkZXZfYXR0cl9lbmFibGVfaHdfbW9kZSk7CisKKwlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmYWxlZC0+Y2Rldik7CisJY2FuY2VsX3dvcmtfc3luYygmYWxlZC0+bGVkX3dvcmspOworfQorCitzdGF0aWMgaW50CithcjgzMjdfbGVkX2NyZWF0ZShzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYsCisJCSAgY29uc3Qgc3RydWN0IGFyODMyN19sZWRfaW5mbyAqbGVkX2luZm8pCit7CisJc3RydWN0IGFyODMyN19kYXRhICpkYXRhID0gcHJpdi0+Y2hpcF9kYXRhOworCXN0cnVjdCBhcjgzMjdfbGVkICphbGVkOworCWludCByZXQ7CisKKwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0FSODIxNl9QSFlfTEVEUykpCisJCXJldHVybiAwOworCisJaWYgKCFsZWRfaW5mby0+bmFtZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobGVkX2luZm8tPmxlZF9udW0gPj0gQVI4MzI3X05VTV9MRURTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWFsZWQgPSBremFsbG9jKHNpemVvZigqYWxlZCkgKyBzdHJsZW4obGVkX2luZm8tPm5hbWUpICsgMSwKKwkJICAgICAgIEdGUF9LRVJORUwpOworCWlmICghYWxlZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlhbGVkLT5zd19wcml2ID0gcHJpdjsKKwlhbGVkLT5sZWRfbnVtID0gbGVkX2luZm8tPmxlZF9udW07CisJYWxlZC0+YWN0aXZlX2xvdyA9IGxlZF9pbmZvLT5hY3RpdmVfbG93OworCWFsZWQtPm1vZGUgPSBsZWRfaW5mby0+bW9kZTsKKworCWlmIChhbGVkLT5tb2RlID09IEFSODMyN19MRURfTU9ERV9IVykKKwkJYWxlZC0+ZW5hYmxlX2h3X21vZGUgPSB0cnVlOworCisJYWxlZC0+bmFtZSA9IChjaGFyICopKGFsZWQgKyAxKTsKKwlzdHJjcHkoYWxlZC0+bmFtZSwgbGVkX2luZm8tPm5hbWUpOworCisJYWxlZC0+Y2Rldi5uYW1lID0gYWxlZC0+bmFtZTsKKwlhbGVkLT5jZGV2LmJyaWdodG5lc3Nfc2V0ID0gYXI4MzI3X2xlZF9zZXRfYnJpZ2h0bmVzczsKKwlhbGVkLT5jZGV2LmJsaW5rX3NldCA9IGFyODMyN19sZWRfYmxpbmtfc2V0OworCWFsZWQtPmNkZXYuZGVmYXVsdF90cmlnZ2VyID0gbGVkX2luZm8tPmRlZmF1bHRfdHJpZ2dlcjsKKworCXNwaW5fbG9ja19pbml0KCZhbGVkLT5sb2NrKTsKKwltdXRleF9pbml0KCZhbGVkLT5tdXRleCk7CisJSU5JVF9XT1JLKCZhbGVkLT5sZWRfd29yaywgYXI4MzI3X2xlZF93b3JrX2Z1bmMpOworCisJcmV0ID0gYXI4MzI3X2xlZF9yZWdpc3RlcihhbGVkKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9mcmVlOworCisJZGF0YS0+bGVkc1tkYXRhLT5udW1fbGVkcysrXSA9IGFsZWQ7CisKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWU6CisJa2ZyZWUoYWxlZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQKK2FyODMyN19sZWRfZGVzdHJveShzdHJ1Y3QgYXI4MzI3X2xlZCAqYWxlZCkKK3sKKwlhcjgzMjdfbGVkX3VucmVnaXN0ZXIoYWxlZCk7CisJa2ZyZWUoYWxlZCk7Cit9CisKK3N0YXRpYyB2b2lkCithcjgzMjdfbGVkc19pbml0KHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgYXI4MzI3X2RhdGEgKmRhdGEgPSBwcml2LT5jaGlwX2RhdGE7CisJdW5zaWduZWQgaTsKKworCWlmICghSVNfRU5BQkxFRChDT05GSUdfQVI4MjE2X1BIWV9MRURTKSkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IGRhdGEtPm51bV9sZWRzOyBpKyspIHsKKwkJc3RydWN0IGFyODMyN19sZWQgKmFsZWQ7CisKKwkJYWxlZCA9IGRhdGEtPmxlZHNbaV07CisKKwkJaWYgKGFsZWQtPmVuYWJsZV9od19tb2RlKQorCQkJYWxlZC0+cGF0dGVybiA9IEFSODMyN19MRURfUEFUVEVSTl9SVUxFOworCQllbHNlCisJCQlhbGVkLT5wYXR0ZXJuID0gQVI4MzI3X0xFRF9QQVRURVJOX09GRjsKKworCQlhcjgzMjdfc2V0X2xlZF9wYXR0ZXJuKHByaXYsIGFsZWQtPmxlZF9udW0sIGFsZWQtPnBhdHRlcm4pOworCX0KK30KKworc3RhdGljIHZvaWQKK2FyODMyN19sZWRzX2NsZWFudXAoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2KQoreworCXN0cnVjdCBhcjgzMjdfZGF0YSAqZGF0YSA9IHByaXYtPmNoaXBfZGF0YTsKKwl1bnNpZ25lZCBpOworCisJaWYgKCFJU19FTkFCTEVEKENPTkZJR19BUjgyMTZfUEhZX0xFRFMpKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+bnVtX2xlZHM7IGkrKykgeworCQlzdHJ1Y3QgYXI4MzI3X2xlZCAqYWxlZDsKKworCQlhbGVkID0gZGF0YS0+bGVkc1tpXTsKKwkJYXI4MzI3X2xlZF9kZXN0cm95KGFsZWQpOworCX0KKworCWtmcmVlKGRhdGEtPmxlZHMpOworfQorCitzdGF0aWMgaW50CithcjgzMjdfaHdfY29uZmlnX3BkYXRhKHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiwKKwkJICAgICAgIHN0cnVjdCBhcjgzMjdfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCit7CisJc3RydWN0IGFyODMyN19sZWRfY2ZnICpsZWRfY2ZnOworCXN0cnVjdCBhcjgzMjdfZGF0YSAqZGF0YSA9IHByaXYtPmNoaXBfZGF0YTsKKwl1MzIgcG9zLCBuZXdfcG9zOworCXUzMiB0OworCisJaWYgKCFwZGF0YSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcml2LT5nZXRfcG9ydF9saW5rID0gcGRhdGEtPmdldF9wb3J0X2xpbms7CisKKwlkYXRhLT5wb3J0MF9zdGF0dXMgPSBhcjgzMjdfZ2V0X3BvcnRfaW5pdF9zdGF0dXMoJnBkYXRhLT5wb3J0MF9jZmcpOworCWRhdGEtPnBvcnQ2X3N0YXR1cyA9IGFyODMyN19nZXRfcG9ydF9pbml0X3N0YXR1cygmcGRhdGEtPnBvcnQ2X2NmZyk7CisKKwl0ID0gYXI4MzI3X2dldF9wYWRfY2ZnKHBkYXRhLT5wYWQwX2NmZyk7CisJaWYgKGNoaXBfaXNfYXI4MzM3KHByaXYpICYmICFwZGF0YS0+cGFkMF9jZmctPm1hYzA2X2V4Y2hhbmdlX2RpcykKKwkgICAgdCB8PSBBUjgzMzdfUEFEX01BQzA2X0VYQ0hBTkdFX0VOOworCWFyOHh4eF93cml0ZShwcml2LCBBUjgzMjdfUkVHX1BBRDBfTU9ERSwgdCk7CisKKwl0ID0gYXI4MzI3X2dldF9wYWRfY2ZnKHBkYXRhLT5wYWQ1X2NmZyk7CisJYXI4eHh4X3dyaXRlKHByaXYsIEFSODMyN19SRUdfUEFENV9NT0RFLCB0KTsKKwl0ID0gYXI4MzI3X2dldF9wYWRfY2ZnKHBkYXRhLT5wYWQ2X2NmZyk7CisJYXI4eHh4X3dyaXRlKHByaXYsIEFSODMyN19SRUdfUEFENl9NT0RFLCB0KTsKKworCXBvcyA9IGFyOHh4eF9yZWFkKHByaXYsIEFSODMyN19SRUdfUE9XRVJfT05fU1RSQVApOworCW5ld19wb3MgPSBwb3M7CisKKwlsZWRfY2ZnID0gcGRhdGEtPmxlZF9jZmc7CisJaWYgKGxlZF9jZmcpIHsKKwkJaWYgKGxlZF9jZmctPm9wZW5fZHJhaW4pCisJCQluZXdfcG9zIHw9IEFSODMyN19QT1dFUl9PTl9TVFJBUF9MRURfT1BFTl9FTjsKKwkJZWxzZQorCQkJbmV3X3BvcyAmPSB+QVI4MzI3X1BPV0VSX09OX1NUUkFQX0xFRF9PUEVOX0VOOworCisJCWFyOHh4eF93cml0ZShwcml2LCBBUjgzMjdfUkVHX0xFRF9DVFJMMCwgbGVkX2NmZy0+bGVkX2N0cmwwKTsKKwkJYXI4eHh4X3dyaXRlKHByaXYsIEFSODMyN19SRUdfTEVEX0NUUkwxLCBsZWRfY2ZnLT5sZWRfY3RybDEpOworCQlhcjh4eHhfd3JpdGUocHJpdiwgQVI4MzI3X1JFR19MRURfQ1RSTDIsIGxlZF9jZmctPmxlZF9jdHJsMik7CisJCWFyOHh4eF93cml0ZShwcml2LCBBUjgzMjdfUkVHX0xFRF9DVFJMMywgbGVkX2NmZy0+bGVkX2N0cmwzKTsKKworCQlpZiAobmV3X3BvcyAhPSBwb3MpCisJCQluZXdfcG9zIHw9IEFSODMyN19QT1dFUl9PTl9TVFJBUF9QT1dFUl9PTl9TRUw7CisJfQorCisJaWYgKHBkYXRhLT5zZ21paV9jZmcpIHsKKwkJdCA9IHBkYXRhLT5zZ21paV9jZmctPnNnbWlpX2N0cmw7CisJCWlmIChwcml2LT5jaGlwX3JldiA9PSAxKQorCQkJdCB8PSBBUjgzMjdfU0dNSUlfQ1RSTF9FTl9QTEwgfAorCQkJICAgICBBUjgzMjdfU0dNSUlfQ1RSTF9FTl9SWCB8CisJCQkgICAgIEFSODMyN19TR01JSV9DVFJMX0VOX1RYOworCQllbHNlCisJCQl0ICY9IH4oQVI4MzI3X1NHTUlJX0NUUkxfRU5fUExMIHwKKwkJCSAgICAgICBBUjgzMjdfU0dNSUlfQ1RSTF9FTl9SWCB8CisJCQkgICAgICAgQVI4MzI3X1NHTUlJX0NUUkxfRU5fVFgpOworCisJCWFyOHh4eF93cml0ZShwcml2LCBBUjgzMjdfUkVHX1NHTUlJX0NUUkwsIHQpOworCisJCWlmIChwZGF0YS0+c2dtaWlfY2ZnLT5zZXJkZXNfYWVuKQorCQkJbmV3X3BvcyAmPSB+QVI4MzI3X1BPV0VSX09OX1NUUkFQX1NFUkRFU19BRU47CisJCWVsc2UKKwkJCW5ld19wb3MgfD0gQVI4MzI3X1BPV0VSX09OX1NUUkFQX1NFUkRFU19BRU47CisJfQorCisJYXI4eHh4X3dyaXRlKHByaXYsIEFSODMyN19SRUdfUE9XRVJfT05fU1RSQVAsIG5ld19wb3MpOworCisJaWYgKHBkYXRhLT5sZWRzICYmIHBkYXRhLT5udW1fbGVkcykgeworCQlpbnQgaTsKKworCQlkYXRhLT5sZWRzID0ga3phbGxvYyhwZGF0YS0+bnVtX2xlZHMgKiBzaXplb2Yodm9pZCAqKSwKKwkJCQkgICAgIEdGUF9LRVJORUwpOworCQlpZiAoIWRhdGEtPmxlZHMpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51bV9sZWRzOyBpKyspCisJCQlhcjgzMjdfbGVkX2NyZWF0ZShwcml2LCAmcGRhdGEtPmxlZHNbaV0pOworCX0KKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX09GCitzdGF0aWMgaW50CithcjgzMjdfaHdfY29uZmlnX29mKHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiwgc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlzdHJ1Y3QgYXI4MzI3X2RhdGEgKmRhdGEgPSBwcml2LT5jaGlwX2RhdGE7CisJY29uc3QgX19iZTMyICpwYWRkcjsKKwlpbnQgbGVuOworCWludCBpOworCisJcGFkZHIgPSBvZl9nZXRfcHJvcGVydHkobnAsICJxY2EsYXI4MzI3LWluaXR2YWxzIiwgJmxlbik7CisJaWYgKCFwYWRkciB8fCBsZW4gPCAoMiAqIHNpemVvZigqcGFkZHIpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlsZW4gLz0gc2l6ZW9mKCpwYWRkcik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuIC0gMTsgaSArPSAyKSB7CisJCXUzMiByZWc7CisJCXUzMiB2YWw7CisKKwkJcmVnID0gYmUzMl90b19jcHVwKHBhZGRyICsgaSk7CisJCXZhbCA9IGJlMzJfdG9fY3B1cChwYWRkciArIGkgKyAxKTsKKworCQlzd2l0Y2ggKHJlZykgeworCQljYXNlIEFSODMyN19SRUdfUE9SVF9TVEFUVVMoMCk6CisJCQlkYXRhLT5wb3J0MF9zdGF0dXMgPSB2YWw7CisJCQlicmVhazsKKwkJY2FzZSBBUjgzMjdfUkVHX1BPUlRfU1RBVFVTKDYpOgorCQkJZGF0YS0+cG9ydDZfc3RhdHVzID0gdmFsOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlhcjh4eHhfd3JpdGUocHJpdiwgcmVnLCB2YWwpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIGludAorYXI4MzI3X2h3X2NvbmZpZ19vZihzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisjZW5kaWYKKworc3RhdGljIGludAorYXI4MzI3X2h3X2luaXQoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2KQoreworCWludCByZXQ7CisKKwlwcml2LT5jaGlwX2RhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYXI4MzI3X2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYtPmNoaXBfZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAocHJpdi0+cGRldi0+b2Zfbm9kZSkKKwkJcmV0ID0gYXI4MzI3X2h3X2NvbmZpZ19vZihwcml2LCBwcml2LT5wZGV2LT5vZl9ub2RlKTsKKwllbHNlCisJCXJldCA9IGFyODMyN19od19jb25maWdfcGRhdGEocHJpdiwKKwkJCQkJICAgICBwcml2LT5waHktPm1kaW8uZGV2LnBsYXRmb3JtX2RhdGEpOworCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWFyODMyN19sZWRzX2luaXQocHJpdik7CisKKwlhcjh4eHhfcGh5X2luaXQocHJpdik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2FyODMyN19jbGVhbnVwKHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdikKK3sKKwlhcjgzMjdfbGVkc19jbGVhbnVwKHByaXYpOworfQorCitzdGF0aWMgdm9pZAorYXI4MzI3X2luaXRfZ2xvYmFscyhzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYpCit7CisJc3RydWN0IGFyODMyN19kYXRhICpkYXRhID0gcHJpdi0+Y2hpcF9kYXRhOworCXUzMiB0OworCWludCBpOworCisJLyogZW5hYmxlIENQVSBwb3J0IGFuZCBkaXNhYmxlIG1pcnJvciBwb3J0ICovCisJdCA9IEFSODMyN19GV0RfQ1RSTDBfQ1BVX1BPUlRfRU4gfAorCSAgICBBUjgzMjdfRldEX0NUUkwwX01JUlJPUl9QT1JUOworCWFyOHh4eF93cml0ZShwcml2LCBBUjgzMjdfUkVHX0ZXRF9DVFJMMCwgdCk7CisKKwkvKiBmb3J3YXJkIG11bHRpY2FzdCBhbmQgYnJvYWRjYXN0IGZyYW1lcyB0byBDUFUgKi8KKwl0ID0gKEFSODMyN19QT1JUU19BTEwgPDwgQVI4MzI3X0ZXRF9DVFJMMV9VQ19GTE9PRF9TKSB8CisJICAgIChBUjgzMjdfUE9SVFNfQUxMIDw8IEFSODMyN19GV0RfQ1RSTDFfTUNfRkxPT0RfUykgfAorCSAgICAoQVI4MzI3X1BPUlRTX0FMTCA8PCBBUjgzMjdfRldEX0NUUkwxX0JDX0ZMT09EX1MpOworCWFyOHh4eF93cml0ZShwcml2LCBBUjgzMjdfUkVHX0ZXRF9DVFJMMSwgdCk7CisKKwkvKiBlbmFibGUganVtYm8gZnJhbWVzICovCisJYXI4eHh4X3Jtdyhwcml2LCBBUjgzMjdfUkVHX01BWF9GUkFNRV9TSVpFLAorCQkgICBBUjgzMjdfTUFYX0ZSQU1FX1NJWkVfTVRVLCA5MDE4ICsgOCArIDIpOworCisJLyogRW5hYmxlIE1JQiBjb3VudGVycyAqLworCWFyOHh4eF9yZWdfc2V0KHByaXYsIEFSODMyN19SRUdfTU9EVUxFX0VOLAorCQkgICAgICAgQVI4MzI3X01PRFVMRV9FTl9NSUIpOworCisJLyogRGlzYWJsZSBFRUUgb24gYWxsIHBoeSdzIGR1ZSB0byBzdGFiaWxpdHkgaXNzdWVzICovCisJZm9yIChpID0gMDsgaSA8IEFSOFhYWF9OVU1fUEhZUzsgaSsrKQorCQlkYXRhLT5lZWVbaV0gPSBmYWxzZTsKK30KKworc3RhdGljIHZvaWQKK2FyODMyN19pbml0X3BvcnQoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2LCBpbnQgcG9ydCkKK3sKKwlzdHJ1Y3QgYXI4MzI3X2RhdGEgKmRhdGEgPSBwcml2LT5jaGlwX2RhdGE7CisJdTMyIHQ7CisKKwlpZiAocG9ydCA9PSBBUjgyMTZfUE9SVF9DUFUpCisJCXQgPSBkYXRhLT5wb3J0MF9zdGF0dXM7CisJZWxzZSBpZiAocG9ydCA9PSA2KQorCQl0ID0gZGF0YS0+cG9ydDZfc3RhdHVzOworCWVsc2UKKwkJdCA9IEFSODIxNl9QT1JUX1NUQVRVU19MSU5LX0FVVE87CisKKwlpZiAocG9ydCAhPSBBUjgyMTZfUE9SVF9DUFUgJiYgcG9ydCAhPSA2KSB7CisJCS8qaHcgbGltaXRhdGlvbjppZiBjb25maWd1cmUgbWFjIHdoZW4gdGhlcmUgaXMgdHJhZmZpYywKKwkJcG9ydCBNQUMgbWF5IHdvcmsgYWJub3JtYWwuIE5lZWQgZGlzYWJsZSBsYW4md2FuIG1hYyBhdCBmaXNydCovCisJCWFyOHh4eF93cml0ZShwcml2LCBBUjgzMjdfUkVHX1BPUlRfU1RBVFVTKHBvcnQpLCAwKTsKKwkJbXNsZWVwKDEwMCk7CisJCXQgfD0gQVI4MjE2X1BPUlRfU1RBVFVTX0ZMT1dfQ09OVFJPTDsKKwkJYXI4eHh4X3dyaXRlKHByaXYsIEFSODMyN19SRUdfUE9SVF9TVEFUVVMocG9ydCksIHQpOworCX0gZWxzZSB7CisJCWFyOHh4eF93cml0ZShwcml2LCBBUjgzMjdfUkVHX1BPUlRfU1RBVFVTKHBvcnQpLCB0KTsKKwl9CisKKwlhcjh4eHhfd3JpdGUocHJpdiwgQVI4MzI3X1JFR19QT1JUX0hFQURFUihwb3J0KSwgMCk7CisKKwlhcjh4eHhfd3JpdGUocHJpdiwgQVI4MzI3X1JFR19QT1JUX1ZMQU4wKHBvcnQpLCAwKTsKKworCXQgPSBBUjgzMjdfUE9SVF9WTEFOMV9PVVRfTU9ERV9VTlRPVUNIIDw8IEFSODMyN19QT1JUX1ZMQU4xX09VVF9NT0RFX1M7CisJYXI4eHh4X3dyaXRlKHByaXYsIEFSODMyN19SRUdfUE9SVF9WTEFOMShwb3J0KSwgdCk7CisKKwl0ID0gQVI4MzI3X1BPUlRfTE9PS1VQX0xFQVJOOworCXQgfD0gQVI4MjE2X1BPUlRfU1RBVEVfRk9SV0FSRCA8PCBBUjgzMjdfUE9SVF9MT09LVVBfU1RBVEVfUzsKKwlhcjh4eHhfd3JpdGUocHJpdiwgQVI4MzI3X1JFR19QT1JUX0xPT0tVUChwb3J0KSwgdCk7Cit9CisKK3N0YXRpYyB1MzIKK2FyODMyN19yZWFkX3BvcnRfc3RhdHVzKHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiwgaW50IHBvcnQpCit7CisJdTMyIHQ7CisKKwl0ID0gYXI4eHh4X3JlYWQocHJpdiwgQVI4MzI3X1JFR19QT1JUX1NUQVRVUyhwb3J0KSk7CisJLyogbWFwIHRoZSBmbG93IGNvbnRyb2wgYXV0b25lZyByZXN1bHQgYml0cyB0byB0aGUgZmxvdyBjb250cm9sIGJpdHMKKwkgKiB1c2VkIGluIGZvcmNlZCBtb2RlIHRvIGFsbG93IGFyODIxNl9yZWFkX3BvcnRfbGluayBkZXRlY3QKKwkgKiBmbG93IGNvbnRyb2wgcHJvcGVybHkgaWYgYXV0b25lZyBpcyB1c2VkCisJICovCisJaWYgKHQgJiBBUjgyMTZfUE9SVF9TVEFUVVNfTElOS19VUCAmJgorCSAgICB0ICYgQVI4MjE2X1BPUlRfU1RBVFVTX0xJTktfQVVUTykgeworCQl0ICY9IH4oQVI4MjE2X1BPUlRfU1RBVFVTX1RYRkxPVyB8IEFSODIxNl9QT1JUX1NUQVRVU19SWEZMT1cpOworCQlpZiAodCAmIEFSODMyN19QT1JUX1NUQVRVU19UWEZMT1dfQVVUTykKKwkJCXQgfD0gQVI4MjE2X1BPUlRfU1RBVFVTX1RYRkxPVzsKKwkJaWYgKHQgJiBBUjgzMjdfUE9SVF9TVEFUVVNfUlhGTE9XX0FVVE8pCisJCQl0IHw9IEFSODIxNl9QT1JUX1NUQVRVU19SWEZMT1c7CisJfQorCisJcmV0dXJuIHQ7Cit9CisKK3N0YXRpYyB1MzIKK2FyODMyN19yZWFkX3BvcnRfZWVlX3N0YXR1cyhzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYsIGludCBwb3J0KQoreworCWludCBwaHk7CisJdTE2IHQ7CisKKwlpZiAocG9ydCA+PSBwcml2LT5kZXYucG9ydHMpCisJCXJldHVybiAwOworCisJaWYgKHBvcnQgPT0gMCB8fCBwb3J0ID09IDYpCisJCXJldHVybiAwOworCisJcGh5ID0gcG9ydCAtIDE7CisKKwkvKiBFRUUgQWJpbGl0eSBBdXRvLW5lZ290aWF0aW9uIFJlc3VsdCAqLworCXQgPSBhcjh4eHhfcGh5X21tZF9yZWFkKHByaXYsIHBoeSwgMHg3LCAweDgwMDApOworCisJcmV0dXJuIG1tZF9lZWVfYWR2X3RvX2V0aHRvb2xfYWR2X3QodCk7Cit9CisKK3N0YXRpYyBpbnQKK2FyODMyN19hdHVfZmx1c2goc3RydWN0IGFyOHh4eF9wcml2ICpwcml2KQoreworCWludCByZXQ7CisKKwlyZXQgPSBhcjgyMTZfd2FpdF9iaXQocHJpdiwgQVI4MzI3X1JFR19BVFVfRlVOQywKKwkJCSAgICAgIEFSODMyN19BVFVfRlVOQ19CVVNZLCAwKTsKKwlpZiAoIXJldCkKKwkJYXI4eHh4X3dyaXRlKHByaXYsIEFSODMyN19SRUdfQVRVX0ZVTkMsCisJCQkgICAgIEFSODMyN19BVFVfRlVOQ19PUF9GTFVTSCB8CisJCQkgICAgIEFSODMyN19BVFVfRlVOQ19CVVNZKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2FyODMyN19hdHVfZmx1c2hfcG9ydChzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYsIGludCBwb3J0KQoreworCXUzMiB0OworCWludCByZXQ7CisKKwlyZXQgPSBhcjgyMTZfd2FpdF9iaXQocHJpdiwgQVI4MzI3X1JFR19BVFVfRlVOQywKKwkJCSAgICAgIEFSODMyN19BVFVfRlVOQ19CVVNZLCAwKTsKKwlpZiAoIXJldCkgeworCQl0ID0gKHBvcnQgPDwgQVI4MzI3X0FUVV9QT1JUX05VTV9TKTsKKwkJdCB8PSBBUjgzMjdfQVRVX0ZVTkNfT1BfRkxVU0hfUE9SVDsKKwkJdCB8PSBBUjgzMjdfQVRVX0ZVTkNfQlVTWTsKKwkJYXI4eHh4X3dyaXRlKHByaXYsIEFSODMyN19SRUdfQVRVX0ZVTkMsIHQpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2FyODMyN19nZXRfcG9ydF9pZ21wKHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiwgaW50IHBvcnQpCit7CisJdTMyIGZ3ZF9jdHJsLCBmcmFtZV9hY2s7CisKKwlmd2RfY3RybCA9IChCSVQocG9ydCkgPDwgQVI4MzI3X0ZXRF9DVFJMMV9JR01QX1MpOworCWZyYW1lX2FjayA9ICgoQVI4MzI3X0ZSQU1FX0FDS19DVFJMX0lHTVBfTUxEIHwKKwkJICAgICAgQVI4MzI3X0ZSQU1FX0FDS19DVFJMX0lHTVBfSk9JTiB8CisJCSAgICAgIEFSODMyN19GUkFNRV9BQ0tfQ1RSTF9JR01QX0xFQVZFKSA8PAorCQkgICAgIEFSODMyN19GUkFNRV9BQ0tfQ1RSTF9TKHBvcnQpKTsKKworCXJldHVybiAoYXI4eHh4X3JlYWQocHJpdiwgQVI4MzI3X1JFR19GV0RfQ1RSTDEpICYKKwkJCWZ3ZF9jdHJsKSA9PSBmd2RfY3RybCAmJgorCQkoYXI4eHh4X3JlYWQocHJpdiwgQVI4MzI3X1JFR19GUkFNRV9BQ0tfQ1RSTChwb3J0KSkgJgorCQkJZnJhbWVfYWNrKSA9PSBmcmFtZV9hY2s7Cit9CisKK3N0YXRpYyB2b2lkCithcjgzMjdfc2V0X3BvcnRfaWdtcChzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZW5hYmxlKQoreworCWludCByZWdfZnJhbWVfYWNrID0gQVI4MzI3X1JFR19GUkFNRV9BQ0tfQ1RSTChwb3J0KTsKKwl1MzIgdmFsX2ZyYW1lX2FjayA9IChBUjgzMjdfRlJBTUVfQUNLX0NUUkxfSUdNUF9NTEQgfAorCQkJICBBUjgzMjdfRlJBTUVfQUNLX0NUUkxfSUdNUF9KT0lOIHwKKwkJCSAgQVI4MzI3X0ZSQU1FX0FDS19DVFJMX0lHTVBfTEVBVkUpIDw8CisJCQkgQVI4MzI3X0ZSQU1FX0FDS19DVFJMX1MocG9ydCk7CisKKwlpZiAoZW5hYmxlKSB7CisJCWFyOHh4eF9ybXcocHJpdiwgQVI4MzI3X1JFR19GV0RfQ1RSTDEsCisJCQkgICBCSVQocG9ydCkgPDwgQVI4MzI3X0ZXRF9DVFJMMV9NQ19GTE9PRF9TLAorCQkJICAgQklUKHBvcnQpIDw8IEFSODMyN19GV0RfQ1RSTDFfSUdNUF9TKTsKKwkJYXI4eHh4X3JlZ19zZXQocHJpdiwgcmVnX2ZyYW1lX2FjaywgdmFsX2ZyYW1lX2Fjayk7CisJfSBlbHNlIHsKKwkJYXI4eHh4X3Jtdyhwcml2LCBBUjgzMjdfUkVHX0ZXRF9DVFJMMSwKKwkJCSAgIEJJVChwb3J0KSA8PCBBUjgzMjdfRldEX0NUUkwxX0lHTVBfUywKKwkJCSAgIEJJVChwb3J0KSA8PCBBUjgzMjdfRldEX0NUUkwxX01DX0ZMT09EX1MpOworCQlhcjh4eHhfcmVnX2NsZWFyKHByaXYsIHJlZ19mcmFtZV9hY2ssIHZhbF9mcmFtZV9hY2spOworCX0KK30KKworc3RhdGljIHZvaWQKK2FyODMyN192dHVfb3Aoc3RydWN0IGFyOHh4eF9wcml2ICpwcml2LCB1MzIgb3AsIHUzMiB2YWwpCit7CisJaWYgKGFyODIxNl93YWl0X2JpdChwcml2LCBBUjgzMjdfUkVHX1ZUVV9GVU5DMSwKKwkJCSAgICBBUjgzMjdfVlRVX0ZVTkMxX0JVU1ksIDApKQorCQlyZXR1cm47CisKKwlpZiAoKG9wICYgQVI4MzI3X1ZUVV9GVU5DMV9PUCkgPT0gQVI4MzI3X1ZUVV9GVU5DMV9PUF9MT0FEKQorCQlhcjh4eHhfd3JpdGUocHJpdiwgQVI4MzI3X1JFR19WVFVfRlVOQzAsIHZhbCk7CisKKwlvcCB8PSBBUjgzMjdfVlRVX0ZVTkMxX0JVU1k7CisJYXI4eHh4X3dyaXRlKHByaXYsIEFSODMyN19SRUdfVlRVX0ZVTkMxLCBvcCk7Cit9CisKK3N0YXRpYyB2b2lkCithcjgzMjdfdnR1X2ZsdXNoKHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdikKK3sKKwlhcjgzMjdfdnR1X29wKHByaXYsIEFSODMyN19WVFVfRlVOQzFfT1BfRkxVU0gsIDApOworfQorCitzdGF0aWMgdm9pZAorYXI4MzI3X3Z0dV9sb2FkX3ZsYW4oc3RydWN0IGFyOHh4eF9wcml2ICpwcml2LCB1MzIgdmlkLCB1MzIgcG9ydF9tYXNrKQoreworCXUzMiBvcDsKKwl1MzIgdmFsOworCWludCBpOworCisJb3AgPSBBUjgzMjdfVlRVX0ZVTkMxX09QX0xPQUQgfCAodmlkIDw8IEFSODMyN19WVFVfRlVOQzFfVklEX1MpOworCXZhbCA9IEFSODMyN19WVFVfRlVOQzBfVkFMSUQgfCBBUjgzMjdfVlRVX0ZVTkMwX0lWTDsKKwlmb3IgKGkgPSAwOyBpIDwgQVI4MzI3X05VTV9QT1JUUzsgaSsrKSB7CisJCXUzMiBtb2RlOworCisJCWlmICgocG9ydF9tYXNrICYgQklUKGkpKSA9PSAwKQorCQkJbW9kZSA9IEFSODMyN19WVFVfRlVOQzBfRUdfTU9ERV9OT1Q7CisJCWVsc2UgaWYgKHByaXYtPnZsYW4gPT0gMCkKKwkJCW1vZGUgPSBBUjgzMjdfVlRVX0ZVTkMwX0VHX01PREVfS0VFUDsKKwkJZWxzZSBpZiAoKHByaXYtPnZsYW5fdGFnZ2VkICYgQklUKGkpKSB8fCAocHJpdi0+dmxhbl9pZFtwcml2LT5wdmlkW2ldXSAhPSB2aWQpKQorCQkJbW9kZSA9IEFSODMyN19WVFVfRlVOQzBfRUdfTU9ERV9UQUc7CisJCWVsc2UKKwkJCW1vZGUgPSBBUjgzMjdfVlRVX0ZVTkMwX0VHX01PREVfVU5UQUc7CisKKwkJdmFsIHw9IG1vZGUgPDwgQVI4MzI3X1ZUVV9GVU5DMF9FR19NT0RFX1MoaSk7CisJfQorCWFyODMyN192dHVfb3AocHJpdiwgb3AsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkCithcjgzMjdfc2V0dXBfcG9ydChzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYsIGludCBwb3J0LCB1MzIgbWVtYmVycykKK3sKKwl1MzIgdDsKKwl1MzIgZWdyZXNzLCBpbmdyZXNzOworCXUzMiBwdmlkID0gcHJpdi0+dmxhbl9pZFtwcml2LT5wdmlkW3BvcnRdXTsKKworCWlmIChwcml2LT52bGFuKSB7CisJCWVncmVzcyA9IEFSODMyN19QT1JUX1ZMQU4xX09VVF9NT0RFX1VOTU9EOworCQlpbmdyZXNzID0gQVI4MjE2X0lOX1NFQ1VSRTsKKwl9IGVsc2UgeworCQllZ3Jlc3MgPSBBUjgzMjdfUE9SVF9WTEFOMV9PVVRfTU9ERV9VTlRPVUNIOworCQlpbmdyZXNzID0gQVI4MjE2X0lOX1BPUlRfT05MWTsKKwl9CisKKwl0ID0gcHZpZCA8PCBBUjgzMjdfUE9SVF9WTEFOMF9ERUZfU1ZJRF9TOworCXQgfD0gcHZpZCA8PCBBUjgzMjdfUE9SVF9WTEFOMF9ERUZfQ1ZJRF9TOworCWlmIChwcml2LT52bGFuICYmIHByaXYtPnBvcnRfdmxhbl9wcmlvW3BvcnRdKSB7CisJCXUzMiBwcmlvID0gcHJpdi0+cG9ydF92bGFuX3ByaW9bcG9ydF07CisKKwkJdCB8PSBwcmlvIDw8IEFSODMyN19QT1JUX1ZMQU4wX0RFRl9TUFJJX1M7CisJCXQgfD0gcHJpbyA8PCBBUjgzMjdfUE9SVF9WTEFOMF9ERUZfQ1BSSV9TOworCX0KKwlhcjh4eHhfd3JpdGUocHJpdiwgQVI4MzI3X1JFR19QT1JUX1ZMQU4wKHBvcnQpLCB0KTsKKworCXQgPSBBUjgzMjdfUE9SVF9WTEFOMV9QT1JUX1ZMQU5fUFJPUDsKKwl0IHw9IGVncmVzcyA8PCBBUjgzMjdfUE9SVF9WTEFOMV9PVVRfTU9ERV9TOworCWlmIChwcml2LT52bGFuICYmIHByaXYtPnBvcnRfdmxhbl9wcmlvW3BvcnRdKQorCQl0IHw9IEFSODMyN19QT1JUX1ZMQU4xX1ZMQU5fUFJJX1BST1A7CisKKwlhcjh4eHhfd3JpdGUocHJpdiwgQVI4MzI3X1JFR19QT1JUX1ZMQU4xKHBvcnQpLCB0KTsKKworCXQgPSBtZW1iZXJzOworCXQgfD0gQVI4MzI3X1BPUlRfTE9PS1VQX0xFQVJOOworCXQgfD0gaW5ncmVzcyA8PCBBUjgzMjdfUE9SVF9MT09LVVBfSU5fTU9ERV9TOworCXQgfD0gQVI4MjE2X1BPUlRfU1RBVEVfRk9SV0FSRCA8PCBBUjgzMjdfUE9SVF9MT09LVVBfU1RBVEVfUzsKKwlhcjh4eHhfd3JpdGUocHJpdiwgQVI4MzI3X1JFR19QT1JUX0xPT0tVUChwb3J0KSwgdCk7Cit9CisKK3N0YXRpYyBpbnQKK2FyODMyN19zd19nZXRfcG9ydHMoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYgPSBzd2Rldl90b19hcjh4eHgoZGV2KTsKKwl1OCBwb3J0cyA9IHByaXYtPnZsYW5fdGFibGVbdmFsLT5wb3J0X3ZsYW5dOworCWludCBpOworCisJdmFsLT5sZW4gPSAwOworCWZvciAoaSA9IDA7IGkgPCBkZXYtPnBvcnRzOyBpKyspIHsKKwkJc3RydWN0IHN3aXRjaF9wb3J0ICpwOworCisJCWlmICghKHBvcnRzICYgKDEgPDwgaSkpKQorCQkJY29udGludWU7CisKKwkJcCA9ICZ2YWwtPnZhbHVlLnBvcnRzW3ZhbC0+bGVuKytdOworCQlwLT5pZCA9IGk7CisJCWlmICgocHJpdi0+dmxhbl90YWdnZWQgJiAoMSA8PCBpKSkgfHwgKHByaXYtPnB2aWRbaV0gIT0gdmFsLT5wb3J0X3ZsYW4pKQorCQkJcC0+ZmxhZ3MgPSAoMSA8PCBTV0lUQ0hfUE9SVF9GTEFHX1RBR0dFRCk7CisJCWVsc2UKKwkJCXAtPmZsYWdzID0gMDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2FyODMyN19zd19zZXRfcG9ydHMoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYgPSBzd2Rldl90b19hcjh4eHgoZGV2KTsKKwl1OCAqdnQgPSAmcHJpdi0+dmxhbl90YWJsZVt2YWwtPnBvcnRfdmxhbl07CisJaW50IGk7CisKKwkqdnQgPSAwOworCWZvciAoaSA9IDA7IGkgPCB2YWwtPmxlbjsgaSsrKSB7CisJCXN0cnVjdCBzd2l0Y2hfcG9ydCAqcCA9ICZ2YWwtPnZhbHVlLnBvcnRzW2ldOworCisJCWlmIChwLT5mbGFncyAmICgxIDw8IFNXSVRDSF9QT1JUX0ZMQUdfVEFHR0VEKSkgeworCQkJaWYgKHZhbC0+cG9ydF92bGFuID09IHByaXYtPnB2aWRbcC0+aWRdKSB7CisJCQkJcHJpdi0+dmxhbl90YWdnZWQgfD0gKDEgPDwgcC0+aWQpOworCQkJfQorCQl9IGVsc2UgeworCQkJcHJpdi0+dmxhbl90YWdnZWQgJj0gfigxIDw8IHAtPmlkKTsKKwkJCXByaXYtPnB2aWRbcC0+aWRdID0gdmFsLT5wb3J0X3ZsYW47CisJCX0KKworCQkqdnQgfD0gMSA8PCBwLT5pZDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCithcjgzMjdfc2V0X21pcnJvcl9yZWdzKHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdikKK3sKKwlpbnQgcG9ydDsKKworCS8qIHJlc2V0IGFsbCBtaXJyb3IgcmVnaXN0ZXJzICovCisJYXI4eHh4X3Jtdyhwcml2LCBBUjgzMjdfUkVHX0ZXRF9DVFJMMCwKKwkJICAgQVI4MzI3X0ZXRF9DVFJMMF9NSVJST1JfUE9SVCwKKwkJICAgKDB4RiA8PCBBUjgzMjdfRldEX0NUUkwwX01JUlJPUl9QT1JUX1MpKTsKKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgQVI4MzI3X05VTV9QT1JUUzsgcG9ydCsrKSB7CisJCWFyOHh4eF9yZWdfY2xlYXIocHJpdiwgQVI4MzI3X1JFR19QT1JUX0xPT0tVUChwb3J0KSwKKwkJCSAgIEFSODMyN19QT1JUX0xPT0tVUF9JTkdfTUlSUk9SX0VOKTsKKworCQlhcjh4eHhfcmVnX2NsZWFyKHByaXYsIEFSODMyN19SRUdfUE9SVF9IT0xfQ1RSTDEocG9ydCksCisJCQkgICBBUjgzMjdfUE9SVF9IT0xfQ1RSTDFfRUdfTUlSUk9SX0VOKTsKKwl9CisKKwkvKiBub3cgZW5hYmxlIG1pcnJvcmluZyBpZiBuZWNlc3NhcnkgKi8KKwlpZiAocHJpdi0+c291cmNlX3BvcnQgPj0gQVI4MzI3X05VTV9QT1JUUyB8fAorCSAgICBwcml2LT5tb25pdG9yX3BvcnQgPj0gQVI4MzI3X05VTV9QT1JUUyB8fAorCSAgICBwcml2LT5zb3VyY2VfcG9ydCA9PSBwcml2LT5tb25pdG9yX3BvcnQpIHsKKwkJcmV0dXJuOworCX0KKworCWFyOHh4eF9ybXcocHJpdiwgQVI4MzI3X1JFR19GV0RfQ1RSTDAsCisJCSAgIEFSODMyN19GV0RfQ1RSTDBfTUlSUk9SX1BPUlQsCisJCSAgIChwcml2LT5tb25pdG9yX3BvcnQgPDwgQVI4MzI3X0ZXRF9DVFJMMF9NSVJST1JfUE9SVF9TKSk7CisKKwlpZiAocHJpdi0+bWlycm9yX3J4KQorCQlhcjh4eHhfcmVnX3NldChwcml2LCBBUjgzMjdfUkVHX1BPUlRfTE9PS1VQKHByaXYtPnNvdXJjZV9wb3J0KSwKKwkJCSAgIEFSODMyN19QT1JUX0xPT0tVUF9JTkdfTUlSUk9SX0VOKTsKKworCWlmIChwcml2LT5taXJyb3JfdHgpCisJCWFyOHh4eF9yZWdfc2V0KHByaXYsIEFSODMyN19SRUdfUE9SVF9IT0xfQ1RSTDEocHJpdi0+c291cmNlX3BvcnQpLAorCQkJICAgQVI4MzI3X1BPUlRfSE9MX0NUUkwxX0VHX01JUlJPUl9FTik7Cit9CisKK3N0YXRpYyBpbnQKK2FyODMyN19zd19zZXRfZWVlKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCSAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IGFyOHh4eF9wcml2ICpwcml2ID0gc3dkZXZfdG9fYXI4eHh4KGRldik7CisJc3RydWN0IGFyODMyN19kYXRhICpkYXRhID0gcHJpdi0+Y2hpcF9kYXRhOworCWludCBwb3J0ID0gdmFsLT5wb3J0X3ZsYW47CisJaW50IHBoeTsKKworCWlmIChwb3J0ID49IGRldi0+cG9ydHMpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChwb3J0ID09IDAgfHwgcG9ydCA9PSA2KQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlwaHkgPSBwb3J0IC0gMTsKKworCWRhdGEtPmVlZVtwaHldID0gISEodmFsLT52YWx1ZS5pKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CithcjgzMjdfc3dfZ2V0X2VlZShzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkgIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiA9IHN3ZGV2X3RvX2FyOHh4eChkZXYpOworCWNvbnN0IHN0cnVjdCBhcjgzMjdfZGF0YSAqZGF0YSA9IHByaXYtPmNoaXBfZGF0YTsKKwlpbnQgcG9ydCA9IHZhbC0+cG9ydF92bGFuOworCWludCBwaHk7CisKKwlpZiAocG9ydCA+PSBkZXYtPnBvcnRzKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAocG9ydCA9PSAwIHx8IHBvcnQgPT0gNikKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJcGh5ID0gcG9ydCAtIDE7CisKKwl2YWwtPnZhbHVlLmkgPSBkYXRhLT5lZWVbcGh5XTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorYXI4MzI3X3dhaXRfYXR1X3JlYWR5KHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiwgdTE2IHIyLCB1MTYgcjEpCit7CisJaW50IHRpbWVvdXQgPSAyMDsKKworCXdoaWxlIChhcjh4eHhfbWlpX3JlYWQzMihwcml2LCByMiwgcjEpICYgQVI4MzI3X0FUVV9GVU5DX0JVU1kgJiYgLS10aW1lb3V0KSB7CisJCXVkZWxheSgxMCk7CisJCWNvbmRfcmVzY2hlZCgpOworCX0KKworCWlmICghdGltZW91dCkKKwkJcHJfZXJyKCJhcjgzMjc6IHRpbWVvdXQgd2FpdGluZyBmb3IgYXR1IHRvIGJlY29tZSByZWFkeVxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGFyODMyN19nZXRfYXJsX2VudHJ5KHN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiwKKwkJCQkgc3RydWN0IGFybF9lbnRyeSAqYSwgdTMyICpzdGF0dXMsIGVudW0gYXJsX29wIG9wKQoreworCXN0cnVjdCBtaWlfYnVzICpidXMgPSBwcml2LT5taWlfYnVzOworCXUxNiByMiwgcGFnZTsKKwl1MTYgcjFfZGF0YTAsIHIxX2RhdGExLCByMV9kYXRhMiwgcjFfZnVuYzsKKwl1MzIgdmFsMCwgdmFsMSwgdmFsMjsKKworCXNwbGl0X2FkZHIoQVI4MzI3X1JFR19BVFVfREFUQTAsICZyMV9kYXRhMCwgJnIyLCAmcGFnZSk7CisJcjIgfD0gMHgxMDsKKworCXIxX2RhdGExID0gKEFSODMyN19SRUdfQVRVX0RBVEExID4+IDEpICYgMHgxZTsKKwlyMV9kYXRhMiA9IChBUjgzMjdfUkVHX0FUVV9EQVRBMiA+PiAxKSAmIDB4MWU7CisJcjFfZnVuYyAgPSAoQVI4MzI3X1JFR19BVFVfRlVOQyA+PiAxKSAmIDB4MWU7CisKKwlzd2l0Y2ggKG9wKSB7CisJY2FzZSBBUjhYWFhfQVJMX0lOSVRJQUxJWkU6CisJCS8qIGFsbCBBVFUgcmVnaXN0ZXJzIGFyZSBvbiB0aGUgc2FtZSBwYWdlCisJCSogdGhlcmVmb3JlIHNldCBwYWdlIG9ubHkgb25jZQorCQkqLworCQlidXMtPndyaXRlKGJ1cywgMHgxOCwgMCwgcGFnZSk7CisJCXdhaXRfZm9yX3BhZ2Vfc3dpdGNoKCk7CisKKwkJYXI4MzI3X3dhaXRfYXR1X3JlYWR5KHByaXYsIHIyLCByMV9mdW5jKTsKKworCQlhcjh4eHhfbWlpX3dyaXRlMzIocHJpdiwgcjIsIHIxX2RhdGEwLCAwKTsKKwkJYXI4eHh4X21paV93cml0ZTMyKHByaXYsIHIyLCByMV9kYXRhMSwgMCk7CisJCWFyOHh4eF9taWlfd3JpdGUzMihwcml2LCByMiwgcjFfZGF0YTIsIDApOworCQlicmVhazsKKwljYXNlIEFSOFhYWF9BUkxfR0VUX05FWFQ6CisJCWFyOHh4eF9taWlfd3JpdGUzMihwcml2LCByMiwgcjFfZnVuYywKKwkJCQkgICBBUjgzMjdfQVRVX0ZVTkNfT1BfR0VUX05FWFQgfAorCQkJCSAgIEFSODMyN19BVFVfRlVOQ19CVVNZKTsKKwkJYXI4MzI3X3dhaXRfYXR1X3JlYWR5KHByaXYsIHIyLCByMV9mdW5jKTsKKworCQl2YWwwID0gYXI4eHh4X21paV9yZWFkMzIocHJpdiwgcjIsIHIxX2RhdGEwKTsKKwkJdmFsMSA9IGFyOHh4eF9taWlfcmVhZDMyKHByaXYsIHIyLCByMV9kYXRhMSk7CisJCXZhbDIgPSBhcjh4eHhfbWlpX3JlYWQzMihwcml2LCByMiwgcjFfZGF0YTIpOworCisJCSpzdGF0dXMgPSB2YWwyICYgQVI4MzI3X0FUVV9TVEFUVVM7CisJCWlmICghKnN0YXR1cykKKwkJCWJyZWFrOworCisJCWEtPnBvcnRtYXAgPSAodmFsMSAmIEFSODMyN19BVFVfUE9SVFMpID4+IEFSODMyN19BVFVfUE9SVFNfUzsKKwkJYS0+bWFjWzBdID0gKHZhbDAgJiBBUjgzMjdfQVRVX0FERFIwKSA+PiBBUjgzMjdfQVRVX0FERFIwX1M7CisJCWEtPm1hY1sxXSA9ICh2YWwwICYgQVI4MzI3X0FUVV9BRERSMSkgPj4gQVI4MzI3X0FUVV9BRERSMV9TOworCQlhLT5tYWNbMl0gPSAodmFsMCAmIEFSODMyN19BVFVfQUREUjIpID4+IEFSODMyN19BVFVfQUREUjJfUzsKKwkJYS0+bWFjWzNdID0gKHZhbDAgJiBBUjgzMjdfQVRVX0FERFIzKSA+PiBBUjgzMjdfQVRVX0FERFIzX1M7CisJCWEtPm1hY1s0XSA9ICh2YWwxICYgQVI4MzI3X0FUVV9BRERSNCkgPj4gQVI4MzI3X0FUVV9BRERSNF9TOworCQlhLT5tYWNbNV0gPSAodmFsMSAmIEFSODMyN19BVFVfQUREUjUpID4+IEFSODMyN19BVFVfQUREUjVfUzsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50CithcjgzMjdfc3dfaHdfYXBwbHkoc3RydWN0IHN3aXRjaF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYgPSBzd2Rldl90b19hcjh4eHgoZGV2KTsKKwljb25zdCBzdHJ1Y3QgYXI4MzI3X2RhdGEgKmRhdGEgPSBwcml2LT5jaGlwX2RhdGE7CisJaW50IHJldCwgaTsKKworCXJldCA9IGFyOHh4eF9zd19od19hcHBseShkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmb3IgKGk9MDsgaSA8IEFSOFhYWF9OVU1fUEhZUzsgaSsrKSB7CisJCWlmIChkYXRhLT5lZWVbaV0pCisJCQlhcjh4eHhfcmVnX2NsZWFyKHByaXYsIEFSODMyN19SRUdfRUVFX0NUUkwsCisJCQkgICAgICAgQVI4MzI3X0VFRV9DVFJMX0RJU0FCTEVfUEhZKGkpKTsKKwkJZWxzZQorCQkJYXI4eHh4X3JlZ19zZXQocHJpdiwgQVI4MzI3X1JFR19FRUVfQ1RSTCwKKwkJCSAgICAgICBBUjgzMjdfRUVFX0NUUkxfRElTQUJMRV9QSFkoaSkpOworCX0KKworCXJldHVybiAwOworfQorCitpbnQKK2FyODMyN19zd19nZXRfcG9ydF9pZ21wX3Nub29waW5nKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkJIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCQkgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYgPSBzd2Rldl90b19hcjh4eHgoZGV2KTsKKwlpbnQgcG9ydCA9IHZhbC0+cG9ydF92bGFuOworCisJaWYgKHBvcnQgPj0gZGV2LT5wb3J0cykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZwcml2LT5yZWdfbXV0ZXgpOworCXZhbC0+dmFsdWUuaSA9IGFyODMyN19nZXRfcG9ydF9pZ21wKHByaXYsIHBvcnQpOworCW11dGV4X3VubG9jaygmcHJpdi0+cmVnX211dGV4KTsKKworCXJldHVybiAwOworfQorCitpbnQKK2FyODMyN19zd19zZXRfcG9ydF9pZ21wX3Nub29waW5nKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkJIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCQkgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgYXI4eHh4X3ByaXYgKnByaXYgPSBzd2Rldl90b19hcjh4eHgoZGV2KTsKKwlpbnQgcG9ydCA9IHZhbC0+cG9ydF92bGFuOworCisJaWYgKHBvcnQgPj0gZGV2LT5wb3J0cykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZwcml2LT5yZWdfbXV0ZXgpOworCWFyODMyN19zZXRfcG9ydF9pZ21wKHByaXYsIHBvcnQsIHZhbC0+dmFsdWUuaSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5yZWdfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK2ludAorYXI4MzI3X3N3X2dldF9pZ21wX3Nub29waW5nKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkgICAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJICAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJaW50IHBvcnQ7CisKKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgZGV2LT5wb3J0czsgcG9ydCsrKSB7CisJCXZhbC0+cG9ydF92bGFuID0gcG9ydDsKKwkJaWYgKGFyODMyN19zd19nZXRfcG9ydF9pZ21wX3Nub29waW5nKGRldiwgYXR0ciwgdmFsKSB8fAorCQkgICAgIXZhbC0+dmFsdWUuaSkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitpbnQKK2FyODMyN19zd19zZXRfaWdtcF9zbm9vcGluZyhzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCSAgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCWludCBwb3J0OworCisJZm9yIChwb3J0ID0gMDsgcG9ydCA8IGRldi0+cG9ydHM7IHBvcnQrKykgeworCQl2YWwtPnBvcnRfdmxhbiA9IHBvcnQ7CisJCWlmIChhcjgzMjdfc3dfc2V0X3BvcnRfaWdtcF9zbm9vcGluZyhkZXYsIGF0dHIsIHZhbCkpCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50CithcjgzMjdfc3dfZ2V0X2lnbXBfdjMoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJICAgICAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkgICAgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiA9IHN3ZGV2X3RvX2FyOHh4eChkZXYpOworCXUzMiB2YWxfcmVnOworCisJbXV0ZXhfbG9jaygmcHJpdi0+cmVnX211dGV4KTsKKwl2YWxfcmVnID0gYXI4eHh4X3JlYWQocHJpdiwgQVI4MzI3X1JFR19GUkFNRV9BQ0tfQ1RSTDEpOworCXZhbC0+dmFsdWUuaSA9ICgodmFsX3JlZyAmIEFSODMyN19GUkFNRV9BQ0tfQ1RSTF9JR01QX1YzX0VOKSAhPSAwKTsKKwltdXRleF91bmxvY2soJnByaXYtPnJlZ19tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50CithcjgzMjdfc3dfc2V0X2lnbXBfdjMoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJICAgICAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkgICAgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiA9IHN3ZGV2X3RvX2FyOHh4eChkZXYpOworCisJbXV0ZXhfbG9jaygmcHJpdi0+cmVnX211dGV4KTsKKwlpZiAodmFsLT52YWx1ZS5pKQorCQlhcjh4eHhfcmVnX3NldChwcml2LCBBUjgzMjdfUkVHX0ZSQU1FX0FDS19DVFJMMSwKKwkJCSAgICAgICBBUjgzMjdfRlJBTUVfQUNLX0NUUkxfSUdNUF9WM19FTik7CisJZWxzZQorCQlhcjh4eHhfcmVnX2NsZWFyKHByaXYsIEFSODMyN19SRUdfRlJBTUVfQUNLX0NUUkwxLAorCQkJCSBBUjgzMjdfRlJBTUVfQUNLX0NUUkxfSUdNUF9WM19FTik7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5yZWdfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2FyODMyN19zd19zZXRfcG9ydF92bGFuX3ByaW8oc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJICAgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiA9IHN3ZGV2X3RvX2FyOHh4eChkZXYpOworCWludCBwb3J0ID0gdmFsLT5wb3J0X3ZsYW47CisKKwlpZiAocG9ydCA+PSBkZXYtPnBvcnRzKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAocG9ydCA9PSAwIHx8IHBvcnQgPT0gNikKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCWlmICh2YWwtPnZhbHVlLmkgPCAwIHx8IHZhbC0+dmFsdWUuaSA+IDcpCisJCXJldHVybiAtRUlOVkFMOworCisJcHJpdi0+cG9ydF92bGFuX3ByaW9bcG9ydF0gPSB2YWwtPnZhbHVlLmk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYXI4MzI3X3N3X2dldF9wb3J0X3ZsYW5fcHJpbyhzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBhcjh4eHhfcHJpdiAqcHJpdiA9IHN3ZGV2X3RvX2FyOHh4eChkZXYpOworCWludCBwb3J0ID0gdmFsLT5wb3J0X3ZsYW47CisKKwl2YWwtPnZhbHVlLmkgPSBwcml2LT5wb3J0X3ZsYW5fcHJpb1twb3J0XTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyIGFyODMyN19zd19hdHRyX2dsb2JhbHNbXSA9IHsKKwl7CisJCS50eXBlID0gU1dJVENIX1RZUEVfSU5ULAorCQkubmFtZSA9ICJlbmFibGVfdmxhbiIsCisJCS5kZXNjcmlwdGlvbiA9ICJFbmFibGUgVkxBTiBtb2RlIiwKKwkJLnNldCA9IGFyOHh4eF9zd19zZXRfdmxhbiwKKwkJLmdldCA9IGFyOHh4eF9zd19nZXRfdmxhbiwKKwkJLm1heCA9IDEKKwl9LAorCXsKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9OT1ZBTCwKKwkJLm5hbWUgPSAicmVzZXRfbWlicyIsCisJCS5kZXNjcmlwdGlvbiA9ICJSZXNldCBhbGwgTUlCIGNvdW50ZXJzIiwKKwkJLnNldCA9IGFyOHh4eF9zd19zZXRfcmVzZXRfbWlicywKKwl9LAorCXsKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9JTlQsCisJCS5uYW1lID0gImFyOHh4eF9taWJfcG9sbF9pbnRlcnZhbCIsCisJCS5kZXNjcmlwdGlvbiA9ICJNSUIgcG9sbGluZyBpbnRlcnZhbCBpbiBtc2VjcyAoMCB0byBkaXNhYmxlKSIsCisJCS5zZXQgPSBhcjh4eHhfc3dfc2V0X21pYl9wb2xsX2ludGVydmFsLAorCQkuZ2V0ID0gYXI4eHh4X3N3X2dldF9taWJfcG9sbF9pbnRlcnZhbAorCX0sCisJeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX0lOVCwKKwkJLm5hbWUgPSAiYXI4eHh4X21pYl90eXBlIiwKKwkJLmRlc2NyaXB0aW9uID0gIk1JQiB0eXBlICgwPWJhc2ljIDE9ZXh0ZW5kZWQpIiwKKwkJLnNldCA9IGFyOHh4eF9zd19zZXRfbWliX3R5cGUsCisJCS5nZXQgPSBhcjh4eHhfc3dfZ2V0X21pYl90eXBlCisJfSwKKwl7CisJCS50eXBlID0gU1dJVENIX1RZUEVfSU5ULAorCQkubmFtZSA9ICJlbmFibGVfbWlycm9yX3J4IiwKKwkJLmRlc2NyaXB0aW9uID0gIkVuYWJsZSBtaXJyb3Jpbmcgb2YgUlggcGFja2V0cyIsCisJCS5zZXQgPSBhcjh4eHhfc3dfc2V0X21pcnJvcl9yeF9lbmFibGUsCisJCS5nZXQgPSBhcjh4eHhfc3dfZ2V0X21pcnJvcl9yeF9lbmFibGUsCisJCS5tYXggPSAxCisJfSwKKwl7CisJCS50eXBlID0gU1dJVENIX1RZUEVfSU5ULAorCQkubmFtZSA9ICJlbmFibGVfbWlycm9yX3R4IiwKKwkJLmRlc2NyaXB0aW9uID0gIkVuYWJsZSBtaXJyb3Jpbmcgb2YgVFggcGFja2V0cyIsCisJCS5zZXQgPSBhcjh4eHhfc3dfc2V0X21pcnJvcl90eF9lbmFibGUsCisJCS5nZXQgPSBhcjh4eHhfc3dfZ2V0X21pcnJvcl90eF9lbmFibGUsCisJCS5tYXggPSAxCisJfSwKKwl7CisJCS50eXBlID0gU1dJVENIX1RZUEVfSU5ULAorCQkubmFtZSA9ICJtaXJyb3JfbW9uaXRvcl9wb3J0IiwKKwkJLmRlc2NyaXB0aW9uID0gIk1pcnJvciBtb25pdG9yIHBvcnQiLAorCQkuc2V0ID0gYXI4eHh4X3N3X3NldF9taXJyb3JfbW9uaXRvcl9wb3J0LAorCQkuZ2V0ID0gYXI4eHh4X3N3X2dldF9taXJyb3JfbW9uaXRvcl9wb3J0LAorCQkubWF4ID0gQVI4MzI3X05VTV9QT1JUUyAtIDEKKwl9LAorCXsKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9JTlQsCisJCS5uYW1lID0gIm1pcnJvcl9zb3VyY2VfcG9ydCIsCisJCS5kZXNjcmlwdGlvbiA9ICJNaXJyb3Igc291cmNlIHBvcnQiLAorCQkuc2V0ID0gYXI4eHh4X3N3X3NldF9taXJyb3Jfc291cmNlX3BvcnQsCisJCS5nZXQgPSBhcjh4eHhfc3dfZ2V0X21pcnJvcl9zb3VyY2VfcG9ydCwKKwkJLm1heCA9IEFSODMyN19OVU1fUE9SVFMgLSAxCisJfSwKKwl7CisJCS50eXBlID0gU1dJVENIX1RZUEVfSU5ULAorCQkubmFtZSA9ICJhcmxfYWdlX3RpbWUiLAorCQkuZGVzY3JpcHRpb24gPSAiQVJMIGFnZSB0aW1lIChzZWNzKSIsCisJCS5zZXQgPSBhcjh4eHhfc3dfc2V0X2FybF9hZ2VfdGltZSwKKwkJLmdldCA9IGFyOHh4eF9zd19nZXRfYXJsX2FnZV90aW1lLAorCX0sCisJeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX1NUUklORywKKwkJLm5hbWUgPSAiYXJsX3RhYmxlIiwKKwkJLmRlc2NyaXB0aW9uID0gIkdldCBBUkwgdGFibGUiLAorCQkuc2V0ID0gTlVMTCwKKwkJLmdldCA9IGFyOHh4eF9zd19nZXRfYXJsX3RhYmxlLAorCX0sCisJeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX05PVkFMLAorCQkubmFtZSA9ICJmbHVzaF9hcmxfdGFibGUiLAorCQkuZGVzY3JpcHRpb24gPSAiRmx1c2ggQVJMIHRhYmxlIiwKKwkJLnNldCA9IGFyOHh4eF9zd19zZXRfZmx1c2hfYXJsX3RhYmxlLAorCX0sCisJeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX0lOVCwKKwkJLm5hbWUgPSAiaWdtcF9zbm9vcGluZyIsCisJCS5kZXNjcmlwdGlvbiA9ICJFbmFibGUgSUdNUCBTbm9vcGluZyIsCisJCS5zZXQgPSBhcjgzMjdfc3dfc2V0X2lnbXBfc25vb3BpbmcsCisJCS5nZXQgPSBhcjgzMjdfc3dfZ2V0X2lnbXBfc25vb3BpbmcsCisJCS5tYXggPSAxCisJfSwKKwl7CisJCS50eXBlID0gU1dJVENIX1RZUEVfSU5ULAorCQkubmFtZSA9ICJpZ21wX3YzIiwKKwkJLmRlc2NyaXB0aW9uID0gIkVuYWJsZSBJR01QdjMgc3VwcG9ydCIsCisJCS5zZXQgPSBhcjgzMjdfc3dfc2V0X2lnbXBfdjMsCisJCS5nZXQgPSBhcjgzMjdfc3dfZ2V0X2lnbXBfdjMsCisJCS5tYXggPSAxCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgYXI4MzI3X3N3X2F0dHJfcG9ydFtdID0geworCXsKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9OT1ZBTCwKKwkJLm5hbWUgPSAicmVzZXRfbWliIiwKKwkJLmRlc2NyaXB0aW9uID0gIlJlc2V0IHNpbmdsZSBwb3J0IE1JQiBjb3VudGVycyIsCisJCS5zZXQgPSBhcjh4eHhfc3dfc2V0X3BvcnRfcmVzZXRfbWliLAorCX0sCisJeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX1NUUklORywKKwkJLm5hbWUgPSAibWliIiwKKwkJLmRlc2NyaXB0aW9uID0gIkdldCBwb3J0J3MgTUlCIGNvdW50ZXJzIiwKKwkJLnNldCA9IE5VTEwsCisJCS5nZXQgPSBhcjh4eHhfc3dfZ2V0X3BvcnRfbWliLAorCX0sCisJeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX0lOVCwKKwkJLm5hbWUgPSAiZW5hYmxlX2VlZSIsCisJCS5kZXNjcmlwdGlvbiA9ICJFbmFibGUgRUVFIFBIWSBzbGVlcCBtb2RlIiwKKwkJLnNldCA9IGFyODMyN19zd19zZXRfZWVlLAorCQkuZ2V0ID0gYXI4MzI3X3N3X2dldF9lZWUsCisJCS5tYXggPSAxLAorCX0sCisJeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX05PVkFMLAorCQkubmFtZSA9ICJmbHVzaF9hcmxfdGFibGUiLAorCQkuZGVzY3JpcHRpb24gPSAiRmx1c2ggcG9ydCdzIEFSTCB0YWJsZSBlbnRyaWVzIiwKKwkJLnNldCA9IGFyOHh4eF9zd19zZXRfZmx1c2hfcG9ydF9hcmxfdGFibGUsCisJfSwKKwl7CisJCS50eXBlID0gU1dJVENIX1RZUEVfSU5ULAorCQkubmFtZSA9ICJpZ21wX3Nub29waW5nIiwKKwkJLmRlc2NyaXB0aW9uID0gIkVuYWJsZSBwb3J0J3MgSUdNUCBTbm9vcGluZyIsCisJCS5zZXQgPSBhcjgzMjdfc3dfc2V0X3BvcnRfaWdtcF9zbm9vcGluZywKKwkJLmdldCA9IGFyODMyN19zd19nZXRfcG9ydF9pZ21wX3Nub29waW5nLAorCQkubWF4ID0gMQorCX0sCisJeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX0lOVCwKKwkJLm5hbWUgPSAidmxhbl9wcmlvIiwKKwkJLmRlc2NyaXB0aW9uID0gIlBvcnQgVkxBTiBkZWZhdWx0IHByaW9yaXR5IChWTEFOIFBDUCkgKDAtNykiLAorCQkuc2V0ID0gYXI4MzI3X3N3X3NldF9wb3J0X3ZsYW5fcHJpbywKKwkJLmdldCA9IGFyODMyN19zd19nZXRfcG9ydF92bGFuX3ByaW8sCisJCS5tYXggPSA3LAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHN3aXRjaF9kZXZfb3BzIGFyODMyN19zd19vcHMgPSB7CisJLmF0dHJfZ2xvYmFsID0geworCQkuYXR0ciA9IGFyODMyN19zd19hdHRyX2dsb2JhbHMsCisJCS5uX2F0dHIgPSBBUlJBWV9TSVpFKGFyODMyN19zd19hdHRyX2dsb2JhbHMpLAorCX0sCisJLmF0dHJfcG9ydCA9IHsKKwkJLmF0dHIgPSBhcjgzMjdfc3dfYXR0cl9wb3J0LAorCQkubl9hdHRyID0gQVJSQVlfU0laRShhcjgzMjdfc3dfYXR0cl9wb3J0KSwKKwl9LAorCS5hdHRyX3ZsYW4gPSB7CisJCS5hdHRyID0gYXI4eHh4X3N3X2F0dHJfdmxhbiwKKwkJLm5fYXR0ciA9IEFSUkFZX1NJWkUoYXI4eHh4X3N3X2F0dHJfdmxhbiksCisJfSwKKwkuZ2V0X3BvcnRfcHZpZCA9IGFyOHh4eF9zd19nZXRfcHZpZCwKKwkuc2V0X3BvcnRfcHZpZCA9IGFyOHh4eF9zd19zZXRfcHZpZCwKKwkuZ2V0X3ZsYW5fcG9ydHMgPSBhcjgzMjdfc3dfZ2V0X3BvcnRzLAorCS5zZXRfdmxhbl9wb3J0cyA9IGFyODMyN19zd19zZXRfcG9ydHMsCisJLmFwcGx5X2NvbmZpZyA9IGFyODMyN19zd19od19hcHBseSwKKwkucmVzZXRfc3dpdGNoID0gYXI4eHh4X3N3X3Jlc2V0X3N3aXRjaCwKKwkuZ2V0X3BvcnRfbGluayA9IGFyOHh4eF9zd19nZXRfcG9ydF9saW5rLAorCS5nZXRfcG9ydF9zdGF0cyA9IGFyOHh4eF9zd19nZXRfcG9ydF9zdGF0cywKK307CisKK2NvbnN0IHN0cnVjdCBhcjh4eHhfY2hpcCBhcjgzMjdfY2hpcCA9IHsKKwkuY2FwcyA9IEFSOFhYWF9DQVBfR0lHRSB8IEFSOFhYWF9DQVBfTUlCX0NPVU5URVJTLAorCS5jb25maWdfYXRfcHJvYmUgPSB0cnVlLAorCS5taWlfbG9fZmlyc3QgPSB0cnVlLAorCisJLm5hbWUgPSAiQXRoZXJvcyBBUjgzMjciLAorCS5wb3J0cyA9IEFSODMyN19OVU1fUE9SVFMsCisJLnZsYW5zID0gQVI4M1g3X01BWF9WTEFOUywKKwkuc3dvcHMgPSAmYXI4MzI3X3N3X29wcywKKworCS5yZWdfcG9ydF9zdGF0c19zdGFydCA9IDB4MTAwMCwKKwkucmVnX3BvcnRfc3RhdHNfbGVuZ3RoID0gMHgxMDAsCisJLnJlZ19hcmxfY3RybCA9IEFSODMyN19SRUdfQVJMX0NUUkwsCisKKwkuaHdfaW5pdCA9IGFyODMyN19od19pbml0LAorCS5jbGVhbnVwID0gYXI4MzI3X2NsZWFudXAsCisJLmluaXRfZ2xvYmFscyA9IGFyODMyN19pbml0X2dsb2JhbHMsCisJLmluaXRfcG9ydCA9IGFyODMyN19pbml0X3BvcnQsCisJLnNldHVwX3BvcnQgPSBhcjgzMjdfc2V0dXBfcG9ydCwKKwkucmVhZF9wb3J0X3N0YXR1cyA9IGFyODMyN19yZWFkX3BvcnRfc3RhdHVzLAorCS5yZWFkX3BvcnRfZWVlX3N0YXR1cyA9IGFyODMyN19yZWFkX3BvcnRfZWVlX3N0YXR1cywKKwkuYXR1X2ZsdXNoID0gYXI4MzI3X2F0dV9mbHVzaCwKKwkuYXR1X2ZsdXNoX3BvcnQgPSBhcjgzMjdfYXR1X2ZsdXNoX3BvcnQsCisJLnZ0dV9mbHVzaCA9IGFyODMyN192dHVfZmx1c2gsCisJLnZ0dV9sb2FkX3ZsYW4gPSBhcjgzMjdfdnR1X2xvYWRfdmxhbiwKKwkucGh5X2ZpeHVwID0gYXI4MzI3X3BoeV9maXh1cCwKKwkuc2V0X21pcnJvcl9yZWdzID0gYXI4MzI3X3NldF9taXJyb3JfcmVncywKKwkuZ2V0X2FybF9lbnRyeSA9IGFyODMyN19nZXRfYXJsX2VudHJ5LAorCS5zd19od19hcHBseSA9IGFyODMyN19zd19od19hcHBseSwKKworCS5udW1fbWlicyA9IEFSUkFZX1NJWkUoYXI4MjM2X21pYnMpLAorCS5taWJfZGVjcyA9IGFyODIzNl9taWJzLAorCS5taWJfZnVuYyA9IEFSODMyN19SRUdfTUlCX0ZVTkMsCisJLm1pYl9yeGJfaWQgPSBBUjgyMzZfTUlCX1JYQl9JRCwKKwkubWliX3R4Yl9pZCA9IEFSODIzNl9NSUJfVFhCX0lELAorfTsKKworY29uc3Qgc3RydWN0IGFyOHh4eF9jaGlwIGFyODMzN19jaGlwID0geworCS5jYXBzID0gQVI4WFhYX0NBUF9HSUdFIHwgQVI4WFhYX0NBUF9NSUJfQ09VTlRFUlMsCisJLmNvbmZpZ19hdF9wcm9iZSA9IHRydWUsCisJLm1paV9sb19maXJzdCA9IHRydWUsCisKKwkubmFtZSA9ICJBdGhlcm9zIEFSODMzNyIsCisJLnBvcnRzID0gQVI4MzI3X05VTV9QT1JUUywKKwkudmxhbnMgPSBBUjgzWDdfTUFYX1ZMQU5TLAorCS5zd29wcyA9ICZhcjgzMjdfc3dfb3BzLAorCisJLnJlZ19wb3J0X3N0YXRzX3N0YXJ0ID0gMHgxMDAwLAorCS5yZWdfcG9ydF9zdGF0c19sZW5ndGggPSAweDEwMCwKKwkucmVnX2FybF9jdHJsID0gQVI4MzI3X1JFR19BUkxfQ1RSTCwKKworCS5od19pbml0ID0gYXI4MzI3X2h3X2luaXQsCisJLmNsZWFudXAgPSBhcjgzMjdfY2xlYW51cCwKKwkuaW5pdF9nbG9iYWxzID0gYXI4MzI3X2luaXRfZ2xvYmFscywKKwkuaW5pdF9wb3J0ID0gYXI4MzI3X2luaXRfcG9ydCwKKwkuc2V0dXBfcG9ydCA9IGFyODMyN19zZXR1cF9wb3J0LAorCS5yZWFkX3BvcnRfc3RhdHVzID0gYXI4MzI3X3JlYWRfcG9ydF9zdGF0dXMsCisJLnJlYWRfcG9ydF9lZWVfc3RhdHVzID0gYXI4MzI3X3JlYWRfcG9ydF9lZWVfc3RhdHVzLAorCS5hdHVfZmx1c2ggPSBhcjgzMjdfYXR1X2ZsdXNoLAorCS5hdHVfZmx1c2hfcG9ydCA9IGFyODMyN19hdHVfZmx1c2hfcG9ydCwKKwkudnR1X2ZsdXNoID0gYXI4MzI3X3Z0dV9mbHVzaCwKKwkudnR1X2xvYWRfdmxhbiA9IGFyODMyN192dHVfbG9hZF92bGFuLAorCS5waHlfZml4dXAgPSBhcjgzMjdfcGh5X2ZpeHVwLAorCS5zZXRfbWlycm9yX3JlZ3MgPSBhcjgzMjdfc2V0X21pcnJvcl9yZWdzLAorCS5nZXRfYXJsX2VudHJ5ID0gYXI4MzI3X2dldF9hcmxfZW50cnksCisJLnN3X2h3X2FwcGx5ID0gYXI4MzI3X3N3X2h3X2FwcGx5LAorCS5waHlfcmdtaWlfc2V0ID0gYXI4MzI3X3BoeV9yZ21paV9zZXQsCisKKwkubnVtX21pYnMgPSBBUlJBWV9TSVpFKGFyODIzNl9taWJzKSwKKwkubWliX2RlY3MgPSBhcjgyMzZfbWlicywKKwkubWliX2Z1bmMgPSBBUjgzMjdfUkVHX01JQl9GVU5DLAorCS5taWJfcnhiX2lkID0gQVI4MjM2X01JQl9SWEJfSUQsCisJLm1pYl90eGJfaWQgPSBBUjgyMzZfTUlCX1RYQl9JRCwKK307CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL25ldC9waHkvYXI4MzI3LmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL25ldC9waHkvYXI4MzI3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg4YjI4OAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9hcjgzMjcuaApAQCAtMCwwICsxLDMzMyBAQAorLyoKKyAqIGFyODMyNy5oOiBBUjgyMTYgc3dpdGNoIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19BUjgzMjdfSAorI2RlZmluZSBfX0FSODMyN19ICisKKyNkZWZpbmUgQVI4MzI3X05VTV9QT1JUUwk3CisjZGVmaW5lIEFSODMyN19OVU1fTEVEUwkJMTUKKyNkZWZpbmUgQVI4MzI3X1BPUlRTX0FMTAkweDdmCisjZGVmaW5lIEFSODMyN19OVU1fTEVEX0NUUkxfUkVHUwk0CisKKyNkZWZpbmUgQVI4MzI3X1JFR19NQVNLCQkJCTB4MDAwCisKKyNkZWZpbmUgQVI4MzI3X1JFR19QQUQwX01PREUJCQkweDAwNAorI2RlZmluZSBBUjgzMjdfUkVHX1BBRDVfTU9ERQkJCTB4MDA4CisjZGVmaW5lIEFSODMyN19SRUdfUEFENl9NT0RFCQkJMHgwMGMKKyNkZWZpbmUgICBBUjgzMjdfUEFEX01BQ19NSUlfUlhDTEtfU0VMCQlCSVQoMCkKKyNkZWZpbmUgICBBUjgzMjdfUEFEX01BQ19NSUlfVFhDTEtfU0VMCQlCSVQoMSkKKyNkZWZpbmUgICBBUjgzMjdfUEFEX01BQ19NSUlfRU4JCQlCSVQoMikKKyNkZWZpbmUgICBBUjgzMjdfUEFEX01BQ19HTUlJX1JYQ0xLX1NFTAkJQklUKDQpCisjZGVmaW5lICAgQVI4MzI3X1BBRF9NQUNfR01JSV9UWENMS19TRUwJCUJJVCg1KQorI2RlZmluZSAgIEFSODMyN19QQURfTUFDX0dNSUlfRU4JCUJJVCg2KQorI2RlZmluZSAgIEFSODMyN19QQURfU0dNSUlfRU4JCQlCSVQoNykKKyNkZWZpbmUgICBBUjgzMjdfUEFEX1BIWV9NSUlfUlhDTEtfU0VMCQlCSVQoOCkKKyNkZWZpbmUgICBBUjgzMjdfUEFEX1BIWV9NSUlfVFhDTEtfU0VMCQlCSVQoOSkKKyNkZWZpbmUgICBBUjgzMjdfUEFEX1BIWV9NSUlfRU4JCQlCSVQoMTApCisjZGVmaW5lICAgQVI4MzI3X1BBRF9QSFlfR01JSV9QSVBFX1JYQ0xLX1NFTAlCSVQoMTEpCisjZGVmaW5lICAgQVI4MzI3X1BBRF9QSFlfR01JSV9SWENMS19TRUwJCUJJVCgxMikKKyNkZWZpbmUgICBBUjgzMjdfUEFEX1BIWV9HTUlJX1RYQ0xLX1NFTAkJQklUKDEzKQorI2RlZmluZSAgIEFSODMyN19QQURfUEhZX0dNSUlfRU4JCUJJVCgxNCkKKyNkZWZpbmUgICBBUjgzMjdfUEFEX1BIWVhfR01JSV9FTgkJQklUKDE2KQorI2RlZmluZSAgIEFSODMyN19QQURfUEhZWF9SR01JSV9FTgkJQklUKDE3KQorI2RlZmluZSAgIEFSODMyN19QQURfUEhZWF9NSUlfRU4JCUJJVCgxOCkKKyNkZWZpbmUgICBBUjgzMjdfUEFEX1NHTUlJX0RFTEFZX0VOCQlCSVQoMTkpCisjZGVmaW5lICAgQVI4MzI3X1BBRF9SR01JSV9SWENMS19ERUxBWV9TRUwJQklUUygyMCwgMikKKyNkZWZpbmUgICBBUjgzMjdfUEFEX1JHTUlJX1JYQ0xLX0RFTEFZX1NFTF9TCTIwCisjZGVmaW5lICAgQVI4MzI3X1BBRF9SR01JSV9UWENMS19ERUxBWV9TRUwJQklUUygyMiwgMikKKyNkZWZpbmUgICBBUjgzMjdfUEFEX1JHTUlJX1RYQ0xLX0RFTEFZX1NFTF9TCTIyCisjZGVmaW5lICAgQVI4MzI3X1BBRF9SR01JSV9SWENMS19ERUxBWV9FTglCSVQoMjQpCisjZGVmaW5lICAgQVI4MzI3X1BBRF9SR01JSV9UWENMS19ERUxBWV9FTglCSVQoMjUpCisjZGVmaW5lICAgQVI4MzI3X1BBRF9SR01JSV9FTgkJCUJJVCgyNikKKworI2RlZmluZSBBUjgzMjdfUkVHX1BPV0VSX09OX1NUUkFQCQkweDAxMAorI2RlZmluZSAgIEFSODMyN19QT1dFUl9PTl9TVFJBUF9QT1dFUl9PTl9TRUwJQklUKDMxKQorI2RlZmluZSAgIEFSODMyN19QT1dFUl9PTl9TVFJBUF9MRURfT1BFTl9FTglCSVQoMjQpCisjZGVmaW5lICAgQVI4MzI3X1BPV0VSX09OX1NUUkFQX1NFUkRFU19BRU4JQklUKDcpCisKKyNkZWZpbmUgQVI4MzI3X1JFR19JTlRfU1RBVFVTMAkJCTB4MDIwCisjZGVmaW5lICAgQVI4MzI3X0lOVDBfVlRfRE9ORQkJCUJJVCgyMCkKKworI2RlZmluZSBBUjgzMjdfUkVHX0lOVF9TVEFUVVMxCQkJMHgwMjQKKyNkZWZpbmUgQVI4MzI3X1JFR19JTlRfTUFTSzAJCQkweDAyOAorI2RlZmluZSBBUjgzMjdfUkVHX0lOVF9NQVNLMQkJCTB4MDJjCisKKyNkZWZpbmUgQVI4MzI3X1JFR19NT0RVTEVfRU4JCQkweDAzMAorI2RlZmluZSAgIEFSODMyN19NT0RVTEVfRU5fTUlCCQkJQklUKDApCisKKyNkZWZpbmUgQVI4MzI3X1JFR19NSUJfRlVOQwkJCTB4MDM0CisjZGVmaW5lICAgQVI4MzI3X01JQl9DUFVfS0VFUAkJCUJJVCgyMCkKKworI2RlZmluZSBBUjgzMjdfUkVHX1NFUlZJQ0VfVEFHCQkJMHgwNDgKKyNkZWZpbmUgQVI4MzI3X1JFR19MRURfQ1RSTChfaSkJCQkoMHgwNTAgKyAoX2kpICogNCkKKyNkZWZpbmUgQVI4MzI3X1JFR19MRURfQ1RSTDAJCQkweDA1MAorI2RlZmluZSBBUjgzMjdfUkVHX0xFRF9DVFJMMQkJCTB4MDU0CisjZGVmaW5lIEFSODMyN19SRUdfTEVEX0NUUkwyCQkJMHgwNTgKKyNkZWZpbmUgQVI4MzI3X1JFR19MRURfQ1RSTDMJCQkweDA1YworI2RlZmluZSBBUjgzMjdfUkVHX01BQ19BRERSMAkJCTB4MDYwCisjZGVmaW5lIEFSODMyN19SRUdfTUFDX0FERFIxCQkJMHgwNjQKKworI2RlZmluZSBBUjgzMjdfUkVHX01BWF9GUkFNRV9TSVpFCQkweDA3OAorI2RlZmluZSAgIEFSODMyN19NQVhfRlJBTUVfU0laRV9NVFUJCUJJVFMoMCwgMTQpCisKKyNkZWZpbmUgQVI4MzI3X1JFR19QT1JUX1NUQVRVUyhfaSkJCSgweDA3YyArIChfaSkgKiA0KQorI2RlZmluZSAgIEFSODMyN19QT1JUX1NUQVRVU19UWEZMT1dfQVVUTwlCSVQoMTApCisjZGVmaW5lICAgQVI4MzI3X1BPUlRfU1RBVFVTX1JYRkxPV19BVVRPCUJJVCgxMSkKKworI2RlZmluZSBBUjgzMjdfUkVHX0hFQURFUl9DVFJMCQkJMHgwOTgKKyNkZWZpbmUgQVI4MzI3X1JFR19QT1JUX0hFQURFUihfaSkJCSgweDA5YyArIChfaSkgKiA0KQorCisjZGVmaW5lIEFSODMyN19SRUdfU0dNSUlfQ1RSTAkJCTB4MGUwCisjZGVmaW5lICAgQVI4MzI3X1NHTUlJX0NUUkxfRU5fUExMCQlCSVQoMSkKKyNkZWZpbmUgICBBUjgzMjdfU0dNSUlfQ1RSTF9FTl9SWAkJQklUKDIpCisjZGVmaW5lICAgQVI4MzI3X1NHTUlJX0NUUkxfRU5fVFgJCUJJVCgzKQorCisjZGVmaW5lIEFSODMyN19SRUdfRUVFX0NUUkwJCQkweDEwMAorI2RlZmluZSAgIEFSODMyN19FRUVfQ1RSTF9ESVNBQkxFX1BIWShfaSkJQklUKDQgKyAoX2kpICogMikKKworI2RlZmluZSBBUjgzMjdfUkVHX0ZSQU1FX0FDS19DVFJMMAkJMHgyMTAKKyNkZWZpbmUgICBBUjgzMjdfRlJBTUVfQUNLX0NUUkxfSUdNUF9NTERfRU4wCUJJVCgwKQorI2RlZmluZSAgIEFSODMyN19GUkFNRV9BQ0tfQ1RSTF9JR01QX0pPSU5fRU4wCUJJVCgxKQorI2RlZmluZSAgIEFSODMyN19GUkFNRV9BQ0tfQ1RSTF9JR01QX0xFQVZFX0VOMAlCSVQoMikKKyNkZWZpbmUgICBBUjgzMjdfRlJBTUVfQUNLX0NUUkxfRUFQT0xfRU4wCUJJVCgzKQorI2RlZmluZSAgIEFSODMyN19GUkFNRV9BQ0tfQ1RSTF9ESENQX0VOMAlCSVQoNCkKKyNkZWZpbmUgICBBUjgzMjdfRlJBTUVfQUNLX0NUUkxfQVJQX0FDS19FTjAJQklUKDUpCisjZGVmaW5lICAgQVI4MzI3X0ZSQU1FX0FDS19DVFJMX0FSUF9SRVFfRU4wCUJJVCg2KQorI2RlZmluZSAgIEFSODMyN19GUkFNRV9BQ0tfQ1RSTF9JR01QX01MRF9FTjEJQklUKDgpCisjZGVmaW5lICAgQVI4MzI3X0ZSQU1FX0FDS19DVFJMX0lHTVBfSk9JTl9FTjEJQklUKDkpCisjZGVmaW5lICAgQVI4MzI3X0ZSQU1FX0FDS19DVFJMX0lHTVBfTEVBVkVfRU4xCUJJVCgxMCkKKyNkZWZpbmUgICBBUjgzMjdfRlJBTUVfQUNLX0NUUkxfRUFQT0xfRU4xCUJJVCgxMSkKKyNkZWZpbmUgICBBUjgzMjdfRlJBTUVfQUNLX0NUUkxfREhDUF9FTjEJQklUKDEyKQorI2RlZmluZSAgIEFSODMyN19GUkFNRV9BQ0tfQ1RSTF9BUlBfQUNLX0VOMQlCSVQoMTMpCisjZGVmaW5lICAgQVI4MzI3X0ZSQU1FX0FDS19DVFJMX0FSUF9SRVFfRU4xCUJJVCgxNCkKKyNkZWZpbmUgICBBUjgzMjdfRlJBTUVfQUNLX0NUUkxfSUdNUF9NTERfRU4yCUJJVCgxNikKKyNkZWZpbmUgICBBUjgzMjdfRlJBTUVfQUNLX0NUUkxfSUdNUF9KT0lOX0VOMglCSVQoMTcpCisjZGVmaW5lICAgQVI4MzI3X0ZSQU1FX0FDS19DVFJMX0lHTVBfTEVBVkVfRU4yCUJJVCgxOCkKKyNkZWZpbmUgICBBUjgzMjdfRlJBTUVfQUNLX0NUUkxfRUFQT0xfRU4yCUJJVCgxOSkKKyNkZWZpbmUgICBBUjgzMjdfRlJBTUVfQUNLX0NUUkxfREhDUF9FTjIJQklUKDIwKQorI2RlZmluZSAgIEFSODMyN19GUkFNRV9BQ0tfQ1RSTF9BUlBfQUNLX0VOMglCSVQoMjEpCisjZGVmaW5lICAgQVI4MzI3X0ZSQU1FX0FDS19DVFJMX0FSUF9SRVFfRU4yCUJJVCgyMikKKyNkZWZpbmUgICBBUjgzMjdfRlJBTUVfQUNLX0NUUkxfSUdNUF9NTERfRU4zCUJJVCgyNCkKKyNkZWZpbmUgICBBUjgzMjdfRlJBTUVfQUNLX0NUUkxfSUdNUF9KT0lOX0VOMwlCSVQoMjUpCisjZGVmaW5lICAgQVI4MzI3X0ZSQU1FX0FDS19DVFJMX0lHTVBfTEVBVkVfRU4zCUJJVCgyNikKKyNkZWZpbmUgICBBUjgzMjdfRlJBTUVfQUNLX0NUUkxfRUFQT0xfRU4zCUJJVCgyNykKKyNkZWZpbmUgICBBUjgzMjdfRlJBTUVfQUNLX0NUUkxfREhDUF9FTjMJQklUKDI4KQorI2RlZmluZSAgIEFSODMyN19GUkFNRV9BQ0tfQ1RSTF9BUlBfQUNLX0VOMwlCSVQoMjkpCisjZGVmaW5lICAgQVI4MzI3X0ZSQU1FX0FDS19DVFJMX0FSUF9SRVFfRU4zCUJJVCgzMCkKKworI2RlZmluZSBBUjgzMjdfUkVHX0ZSQU1FX0FDS19DVFJMMQkJMHgyMTQKKyNkZWZpbmUgICBBUjgzMjdfRlJBTUVfQUNLX0NUUkxfSUdNUF9NTERfRU40CUJJVCgwKQorI2RlZmluZSAgIEFSODMyN19GUkFNRV9BQ0tfQ1RSTF9JR01QX0pPSU5fRU40CUJJVCgxKQorI2RlZmluZSAgIEFSODMyN19GUkFNRV9BQ0tfQ1RSTF9JR01QX0xFQVZFX0VONAlCSVQoMikKKyNkZWZpbmUgICBBUjgzMjdfRlJBTUVfQUNLX0NUUkxfRUFQT0xfRU40CUJJVCgzKQorI2RlZmluZSAgIEFSODMyN19GUkFNRV9BQ0tfQ1RSTF9ESENQX0VONAlCSVQoNCkKKyNkZWZpbmUgICBBUjgzMjdfRlJBTUVfQUNLX0NUUkxfQVJQX0FDS19FTjQJQklUKDUpCisjZGVmaW5lICAgQVI4MzI3X0ZSQU1FX0FDS19DVFJMX0FSUF9SRVFfRU40CUJJVCg2KQorI2RlZmluZSAgIEFSODMyN19GUkFNRV9BQ0tfQ1RSTF9JR01QX01MRF9FTjUJQklUKDgpCisjZGVmaW5lICAgQVI4MzI3X0ZSQU1FX0FDS19DVFJMX0lHTVBfSk9JTl9FTjUJQklUKDkpCisjZGVmaW5lICAgQVI4MzI3X0ZSQU1FX0FDS19DVFJMX0lHTVBfTEVBVkVfRU41CUJJVCgxMCkKKyNkZWZpbmUgICBBUjgzMjdfRlJBTUVfQUNLX0NUUkxfRUFQT0xfRU41CUJJVCgxMSkKKyNkZWZpbmUgICBBUjgzMjdfRlJBTUVfQUNLX0NUUkxfREhDUF9FTjUJQklUKDEyKQorI2RlZmluZSAgIEFSODMyN19GUkFNRV9BQ0tfQ1RSTF9BUlBfQUNLX0VONQlCSVQoMTMpCisjZGVmaW5lICAgQVI4MzI3X0ZSQU1FX0FDS19DVFJMX0FSUF9SRVFfRU41CUJJVCgxNCkKKyNkZWZpbmUgICBBUjgzMjdfRlJBTUVfQUNLX0NUUkxfSUdNUF9NTERfRU42CUJJVCgxNikKKyNkZWZpbmUgICBBUjgzMjdfRlJBTUVfQUNLX0NUUkxfSUdNUF9KT0lOX0VONglCSVQoMTcpCisjZGVmaW5lICAgQVI4MzI3X0ZSQU1FX0FDS19DVFJMX0lHTVBfTEVBVkVfRU42CUJJVCgxOCkKKyNkZWZpbmUgICBBUjgzMjdfRlJBTUVfQUNLX0NUUkxfRUFQT0xfRU42CUJJVCgxOSkKKyNkZWZpbmUgICBBUjgzMjdfRlJBTUVfQUNLX0NUUkxfREhDUF9FTjYJQklUKDIwKQorI2RlZmluZSAgIEFSODMyN19GUkFNRV9BQ0tfQ1RSTF9BUlBfQUNLX0VONglCSVQoMjEpCisjZGVmaW5lICAgQVI4MzI3X0ZSQU1FX0FDS19DVFJMX0FSUF9SRVFfRU42CUJJVCgyMikKKyNkZWZpbmUgICBBUjgzMjdfRlJBTUVfQUNLX0NUUkxfSUdNUF9WM19FTglCSVQoMjQpCisjZGVmaW5lICAgQVI4MzI3X0ZSQU1FX0FDS19DVFJMX1BQUE9FX0VOCUJJVCgyNSkKKworI2RlZmluZSBBUjgzMjdfUkVHX0ZSQU1FX0FDS19DVFJMKF9pKQkJKDB4MjEwICsgKChfaSkgLyA0KSAqIDB4NCkKKyNkZWZpbmUgICBBUjgzMjdfRlJBTUVfQUNLX0NUUkxfSUdNUF9NTEQJQklUKDApCisjZGVmaW5lICAgQVI4MzI3X0ZSQU1FX0FDS19DVFJMX0lHTVBfSk9JTglCSVQoMSkKKyNkZWZpbmUgICBBUjgzMjdfRlJBTUVfQUNLX0NUUkxfSUdNUF9MRUFWRQlCSVQoMikKKyNkZWZpbmUgICBBUjgzMjdfRlJBTUVfQUNLX0NUUkxfRUFQT0wJCUJJVCgzKQorI2RlZmluZSAgIEFSODMyN19GUkFNRV9BQ0tfQ1RSTF9ESENQCQlCSVQoNCkKKyNkZWZpbmUgICBBUjgzMjdfRlJBTUVfQUNLX0NUUkxfQVJQX0FDSwkJQklUKDUpCisjZGVmaW5lICAgQVI4MzI3X0ZSQU1FX0FDS19DVFJMX0FSUF9SRVEJCUJJVCg2KQorI2RlZmluZSAgIEFSODMyN19GUkFNRV9BQ0tfQ1RSTF9TKF9pKQkJKCgoX2kpICUgNCkgKiA4KQorCisjZGVmaW5lIEFSODMyN19SRUdfUE9SVF9WTEFOMChfaSkJCSgweDQyMCArIChfaSkgKiAweDgpCisjZGVmaW5lICAgQVI4MzI3X1BPUlRfVkxBTjBfREVGX1BSSV9NQVNLCUJJVFMoMCwgMykKKyNkZWZpbmUgICBBUjgzMjdfUE9SVF9WTEFOMF9ERUZfU1ZJRAkJQklUUygwLCAxMikKKyNkZWZpbmUgICBBUjgzMjdfUE9SVF9WTEFOMF9ERUZfU1ZJRF9TCQkwCisjZGVmaW5lICAgQVI4MzI3X1BPUlRfVkxBTjBfREVGX1NQUkkJCUJJVFMoMTMsIDMpCisjZGVmaW5lICAgQVI4MzI3X1BPUlRfVkxBTjBfREVGX1NQUklfUwkJMTMKKyNkZWZpbmUgICBBUjgzMjdfUE9SVF9WTEFOMF9ERUZfQ1ZJRAkJQklUUygxNiwgMTIpCisjZGVmaW5lICAgQVI4MzI3X1BPUlRfVkxBTjBfREVGX0NWSURfUwkJMTYKKyNkZWZpbmUgICBBUjgzMjdfUE9SVF9WTEFOMF9ERUZfQ1BSSQkJQklUUygyOSwgMykKKyNkZWZpbmUgICBBUjgzMjdfUE9SVF9WTEFOMF9ERUZfQ1BSSV9TCQkyOQorCisjZGVmaW5lIEFSODMyN19SRUdfUE9SVF9WTEFOMShfaSkJCSgweDQyNCArIChfaSkgKiAweDgpCisjZGVmaW5lICAgQVI4MzI3X1BPUlRfVkxBTjFfVkxBTl9QUklfUFJPUAlCSVQoNCkKKyNkZWZpbmUgICBBUjgzMjdfUE9SVF9WTEFOMV9QT1JUX1ZMQU5fUFJPUAlCSVQoNikKKyNkZWZpbmUgICBBUjgzMjdfUE9SVF9WTEFOMV9PVVRfTU9ERQkJQklUUygxMiwgMikKKyNkZWZpbmUgICBBUjgzMjdfUE9SVF9WTEFOMV9PVVRfTU9ERV9TCQkxMgorI2RlZmluZSAgIEFSODMyN19QT1JUX1ZMQU4xX09VVF9NT0RFX1VOTU9ECTAKKyNkZWZpbmUgICBBUjgzMjdfUE9SVF9WTEFOMV9PVVRfTU9ERV9VTlRBRwkxCisjZGVmaW5lICAgQVI4MzI3X1BPUlRfVkxBTjFfT1VUX01PREVfVEFHCTIKKyNkZWZpbmUgICBBUjgzMjdfUE9SVF9WTEFOMV9PVVRfTU9ERV9VTlRPVUNICTMKKworI2RlZmluZSBBUjgzMjdfUkVHX0FUVV9EQVRBMAkJCTB4NjAwCisjZGVmaW5lICAgQVI4MzI3X0FUVV9BRERSMAkJCUJJVFMoMCwgOCkKKyNkZWZpbmUgICBBUjgzMjdfQVRVX0FERFIwX1MJCQkwCisjZGVmaW5lICAgQVI4MzI3X0FUVV9BRERSMQkJCUJJVFMoOCwgOCkKKyNkZWZpbmUgICBBUjgzMjdfQVRVX0FERFIxX1MJCQk4CisjZGVmaW5lICAgQVI4MzI3X0FUVV9BRERSMgkJCUJJVFMoMTYsIDgpCisjZGVmaW5lICAgQVI4MzI3X0FUVV9BRERSMl9TCQkJMTYKKyNkZWZpbmUgICBBUjgzMjdfQVRVX0FERFIzCQkJQklUUygyNCwgOCkKKyNkZWZpbmUgICBBUjgzMjdfQVRVX0FERFIzX1MJCQkyNAorI2RlZmluZSBBUjgzMjdfUkVHX0FUVV9EQVRBMQkJCTB4NjA0CisjZGVmaW5lICAgQVI4MzI3X0FUVV9BRERSNAkJCUJJVFMoMCwgOCkKKyNkZWZpbmUgICBBUjgzMjdfQVRVX0FERFI0X1MJCQkwCisjZGVmaW5lICAgQVI4MzI3X0FUVV9BRERSNQkJCUJJVFMoOCwgOCkKKyNkZWZpbmUgICBBUjgzMjdfQVRVX0FERFI1X1MJCQk4CisjZGVmaW5lICAgQVI4MzI3X0FUVV9QT1JUUwkJCUJJVFMoMTYsIDcpCisjZGVmaW5lICAgQVI4MzI3X0FUVV9QT1JUU19TCQkJMTYKKyNkZWZpbmUgICBBUjgzMjdfQVRVX1BPUlQwCQkJQklUKDE2KQorI2RlZmluZSAgIEFSODMyN19BVFVfUE9SVDEJCQlCSVQoMTcpCisjZGVmaW5lICAgQVI4MzI3X0FUVV9QT1JUMgkJCUJJVCgxOCkKKyNkZWZpbmUgICBBUjgzMjdfQVRVX1BPUlQzCQkJQklUKDE5KQorI2RlZmluZSAgIEFSODMyN19BVFVfUE9SVDQJCQlCSVQoMjApCisjZGVmaW5lICAgQVI4MzI3X0FUVV9QT1JUNQkJCUJJVCgyMSkKKyNkZWZpbmUgICBBUjgzMjdfQVRVX1BPUlQ2CQkJQklUKDIyKQorI2RlZmluZSBBUjgzMjdfUkVHX0FUVV9EQVRBMgkJCTB4NjA4CisjZGVmaW5lICAgQVI4MzI3X0FUVV9TVEFUVVMJCQlCSVRTKDAsIDQpCisKKyNkZWZpbmUgQVI4MzI3X1JFR19BVFVfRlVOQwkJCTB4NjBjCisjZGVmaW5lICAgQVI4MzI3X0FUVV9GVU5DX09QCQkJQklUUygwLCA0KQorI2RlZmluZSAgIEFSODMyN19BVFVfRlVOQ19PUF9OT09QCQkweDAKKyNkZWZpbmUgICBBUjgzMjdfQVRVX0ZVTkNfT1BfRkxVU0gJCTB4MQorI2RlZmluZSAgIEFSODMyN19BVFVfRlVOQ19PUF9MT0FECQkweDIKKyNkZWZpbmUgICBBUjgzMjdfQVRVX0ZVTkNfT1BfUFVSR0UJCTB4MworI2RlZmluZSAgIEFSODMyN19BVFVfRlVOQ19PUF9GTFVTSF9VTkxPQ0tFRAkweDQKKyNkZWZpbmUgICBBUjgzMjdfQVRVX0ZVTkNfT1BfRkxVU0hfUE9SVAkJMHg1CisjZGVmaW5lICAgQVI4MzI3X0FUVV9GVU5DX09QX0dFVF9ORVhUCQkweDYKKyNkZWZpbmUgICBBUjgzMjdfQVRVX0ZVTkNfT1BfU0VBUkNIX01BQwkJMHg3CisjZGVmaW5lICAgQVI4MzI3X0FUVV9GVU5DX09QX0NIQU5HRV9UUlVOSwkweDgKKyNkZWZpbmUgICBBUjgzMjdfQVRVX1BPUlRfTlVNCQkJQklUUyg4LCA0KQorI2RlZmluZSAgIEFSODMyN19BVFVfUE9SVF9OVU1fUwkJCTgKKyNkZWZpbmUgICBBUjgzMjdfQVRVX0ZVTkNfQlVTWQkJCUJJVCgzMSkKKworI2RlZmluZSBBUjgzMjdfUkVHX1ZUVV9GVU5DMAkJCTB4MDYxMAorI2RlZmluZSAgIEFSODMyN19WVFVfRlVOQzBfRUdfTU9ERQkJQklUUyg0LCAxNCkKKyNkZWZpbmUgICBBUjgzMjdfVlRVX0ZVTkMwX0VHX01PREVfUyhfaSkJKDQgKyAoX2kpICogMikKKyNkZWZpbmUgICBBUjgzMjdfVlRVX0ZVTkMwX0VHX01PREVfS0VFUAkJMAorI2RlZmluZSAgIEFSODMyN19WVFVfRlVOQzBfRUdfTU9ERV9VTlRBRwkxCisjZGVmaW5lICAgQVI4MzI3X1ZUVV9GVU5DMF9FR19NT0RFX1RBRwkJMgorI2RlZmluZSAgIEFSODMyN19WVFVfRlVOQzBfRUdfTU9ERV9OT1QJCTMKKyNkZWZpbmUgICBBUjgzMjdfVlRVX0ZVTkMwX0lWTAkJCUJJVCgxOSkKKyNkZWZpbmUgICBBUjgzMjdfVlRVX0ZVTkMwX1ZBTElECQlCSVQoMjApCisKKyNkZWZpbmUgQVI4MzI3X1JFR19WVFVfRlVOQzEJCQkweDA2MTQKKyNkZWZpbmUgICBBUjgzMjdfVlRVX0ZVTkMxX09QCQkJQklUUygwLCAzKQorI2RlZmluZSAgIEFSODMyN19WVFVfRlVOQzFfT1BfTk9PUAkJMAorI2RlZmluZSAgIEFSODMyN19WVFVfRlVOQzFfT1BfRkxVU0gJCTEKKyNkZWZpbmUgICBBUjgzMjdfVlRVX0ZVTkMxX09QX0xPQUQJCTIKKyNkZWZpbmUgICBBUjgzMjdfVlRVX0ZVTkMxX09QX1BVUkdFCQkzCisjZGVmaW5lICAgQVI4MzI3X1ZUVV9GVU5DMV9PUF9SRU1PVkVfUE9SVAk0CisjZGVmaW5lICAgQVI4MzI3X1ZUVV9GVU5DMV9PUF9HRVRfTkVYVAkJNQorI2RlZmluZSAgIEFSODMyN19WVFVfRlVOQzFfT1BfR0VUX09ORQkJNgorI2RlZmluZSAgIEFSODMyN19WVFVfRlVOQzFfRlVMTAkJCUJJVCg0KQorI2RlZmluZSAgIEFSODMyN19WVFVfRlVOQzFfUE9SVAkJCUJJVCg4LCA0KQorI2RlZmluZSAgIEFSODMyN19WVFVfRlVOQzFfUE9SVF9TCQk4CisjZGVmaW5lICAgQVI4MzI3X1ZUVV9GVU5DMV9WSUQJCQlCSVQoMTYsIDEyKQorI2RlZmluZSAgIEFSODMyN19WVFVfRlVOQzFfVklEX1MJCTE2CisjZGVmaW5lICAgQVI4MzI3X1ZUVV9GVU5DMV9CVVNZCQkJQklUKDMxKQorCisjZGVmaW5lIEFSODMyN19SRUdfQVJMX0NUUkwJCQkweDA2MTgKKworI2RlZmluZSBBUjgzMjdfUkVHX0ZXRF9DVFJMMAkJCTB4NjIwCisjZGVmaW5lICAgQVI4MzI3X0ZXRF9DVFJMMF9DUFVfUE9SVF9FTgkJQklUKDEwKQorI2RlZmluZSAgIEFSODMyN19GV0RfQ1RSTDBfTUlSUk9SX1BPUlQJCUJJVFMoNCwgNCkKKyNkZWZpbmUgICBBUjgzMjdfRldEX0NUUkwwX01JUlJPUl9QT1JUX1MJNAorCisjZGVmaW5lIEFSODMyN19SRUdfRldEX0NUUkwxCQkJMHg2MjQKKyNkZWZpbmUgICBBUjgzMjdfRldEX0NUUkwxX1VDX0ZMT09ECQlCSVRTKDAsIDcpCisjZGVmaW5lICAgQVI4MzI3X0ZXRF9DVFJMMV9VQ19GTE9PRF9TCQkwCisjZGVmaW5lICAgQVI4MzI3X0ZXRF9DVFJMMV9NQ19GTE9PRAkJQklUUyg4LCA3KQorI2RlZmluZSAgIEFSODMyN19GV0RfQ1RSTDFfTUNfRkxPT0RfUwkJOAorI2RlZmluZSAgIEFSODMyN19GV0RfQ1RSTDFfQkNfRkxPT0QJCUJJVFMoMTYsIDcpCisjZGVmaW5lICAgQVI4MzI3X0ZXRF9DVFJMMV9CQ19GTE9PRF9TCQkxNgorI2RlZmluZSAgIEFSODMyN19GV0RfQ1RSTDFfSUdNUAkJCUJJVFMoMjQsIDcpCisjZGVmaW5lICAgQVI4MzI3X0ZXRF9DVFJMMV9JR01QX1MJCTI0CisKKyNkZWZpbmUgQVI4MzI3X1JFR19QT1JUX0xPT0tVUChfaSkJCSgweDY2MCArIChfaSkgKiAweGMpCisjZGVmaW5lICAgQVI4MzI3X1BPUlRfTE9PS1VQX01FTUJFUgkJQklUUygwLCA3KQorI2RlZmluZSAgIEFSODMyN19QT1JUX0xPT0tVUF9JTl9NT0RFCQlCSVRTKDgsIDIpCisjZGVmaW5lICAgQVI4MzI3X1BPUlRfTE9PS1VQX0lOX01PREVfUwkJOAorI2RlZmluZSAgIEFSODMyN19QT1JUX0xPT0tVUF9TVEFURQkJQklUUygxNiwgMykKKyNkZWZpbmUgICBBUjgzMjdfUE9SVF9MT09LVVBfU1RBVEVfUwkJMTYKKyNkZWZpbmUgICBBUjgzMjdfUE9SVF9MT09LVVBfTEVBUk4JCUJJVCgyMCkKKyNkZWZpbmUgICBBUjgzMjdfUE9SVF9MT09LVVBfSU5HX01JUlJPUl9FTglCSVQoMjUpCisKKyNkZWZpbmUgQVI4MzI3X1JFR19QT1JUX1BSSU8oX2kpCQkoMHg2NjQgKyAoX2kpICogMHhjKQorCisjZGVmaW5lIEFSODMyN19SRUdfUE9SVF9IT0xfQ1RSTDEoX2kpCQkoMHg5NzQgKyAoX2kpICogMHg4KQorI2RlZmluZSAgIEFSODMyN19QT1JUX0hPTF9DVFJMMV9FR19NSVJST1JfRU4JQklUKDE2KQorCisjZGVmaW5lIEFSODMzN19QQURfTUFDMDZfRVhDSEFOR0VfRU4JCUJJVCgzMSkKKworI2RlZmluZSBBUjgzMjdfUEhZX01PREVfU0VMCQkJMHgxMgorI2RlZmluZSAgIEFSODMyN19QSFlfTU9ERV9TRUxfUkdNSUkJCUJJVCgzKQorI2RlZmluZSBBUjgzMjdfUEhZX1RFU1RfQ1RSTAkJCTB4MAorI2RlZmluZSAgIEFSODMyN19QSFlfVEVTVF9DVFJMX1JHTUlJX1JYX0RFTEFZCUJJVCgxNSkKKyNkZWZpbmUgQVI4MzI3X1BIWV9TWVNfQ1RSTAkJCTB4NQorI2RlZmluZSAgIEFSODMyN19QSFlfU1lTX0NUUkxfUkdNSUlfVFhfREVMQVkJQklUKDgpCisKK2VudW0gYXI4MzI3X2xlZF9wYXR0ZXJuIHsKKwlBUjgzMjdfTEVEX1BBVFRFUk5fT0ZGID0gMCwKKwlBUjgzMjdfTEVEX1BBVFRFUk5fQkxJTkssCisJQVI4MzI3X0xFRF9QQVRURVJOX09OLAorCUFSODMyN19MRURfUEFUVEVSTl9SVUxFLAorfTsKKworc3RydWN0IGFyODMyN19sZWRfZW50cnkgeworCXVuc2lnbmVkIHJlZzsKKwl1bnNpZ25lZCBzaGlmdDsKK307CisKK3N0cnVjdCBhcjgzMjdfbGVkIHsKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2IGNkZXY7CisJc3RydWN0IGFyOHh4eF9wcml2ICpzd19wcml2OworCisJY2hhciAqbmFtZTsKKwlib29sIGFjdGl2ZV9sb3c7CisJdTggbGVkX251bTsKKwllbnVtIGFyODMyN19sZWRfbW9kZSBtb2RlOworCisJc3RydWN0IG11dGV4IG11dGV4OworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgbGVkX3dvcms7CisJYm9vbCBlbmFibGVfaHdfbW9kZTsKKwllbnVtIGFyODMyN19sZWRfcGF0dGVybiBwYXR0ZXJuOworfTsKKworc3RydWN0IGFyODMyN19kYXRhIHsKKwl1MzIgcG9ydDBfc3RhdHVzOworCXUzMiBwb3J0Nl9zdGF0dXM7CisKKwlzdHJ1Y3QgYXI4MzI3X2xlZCAqKmxlZHM7CisJdW5zaWduZWQgaW50IG51bV9sZWRzOworCisJLyogYWxsIGZpZWxkcyBiZWxvdyBhcmUgY2xlYXJlZCBvbiByZXNldCAqLworCWJvb2wgZWVlW0FSOFhYWF9OVU1fUEhZU107Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9iNTMvS2NvbmZpZyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9iNTMvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODI4N2U3Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9uZXQvcGh5L2I1My9LY29uZmlnCkBAIC0wLDAgKzEsMzcgQEAKK21lbnVjb25maWcgU1dDT05GSUdfQjUzCisJdHJpc3RhdGUgIkJyb2FkY29tIGJjbTUzeHggbWFuYWdlZCBzd2l0Y2ggc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFNXQ09ORklHCisJaGVscAorCSAgVGhpcyBkcml2ZXIgYWRkcyBzdXBwb3J0IGZvciBCcm9hZGNvbSBtYW5hZ2VkIHN3aXRjaCBjaGlwcy4gSXQgc3VwcG9ydHMKKwkgIEJDTTUzMjVFLCBCQ001MzY1LCBCQ001Mzl4LCBCQ001MzExNSBhbmQgQkNNNTMxMjUgYXMgd2VsbCBhcyBCQ002M1hYCisJICBpbnRlZ3JhdGVkIHN3aXRjaGVzLgorCitjb25maWcgU1dDT05GSUdfQjUzX1NQSV9EUklWRVIKKwl0cmlzdGF0ZSAiQjUzIFNQSSBjb25uZWN0ZWQgc3dpdGNoIGRyaXZlciIKKwlkZXBlbmRzIG9uIFNXQ09ORklHX0I1MyAmJiBTUEkKKwloZWxwCisJICBTZWxlY3QgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHJlZ2lzdGVyaW5nIHN3aXRjaGVzIGNvbmZpZ3VyZWQgdGhyb3VnaCBTUEkuCisKK2NvbmZpZyBTV0NPTkZJR19CNTNfUEhZX0RSSVZFUgorCXRyaXN0YXRlICJCNTMgTURJTyBjb25uZWN0ZWQgc3dpdGNoIGRyaXZlciIKKwlkZXBlbmRzIG9uIFNXQ09ORklHX0I1MworCXNlbGVjdCBTV0NPTkZJR19CNTNfUEhZX0ZJWFVQCisJaGVscAorCSAgU2VsZWN0IHRvIGVuYWJsZSBzdXBwb3J0IGZvciByZWdpc3RlcmluZyBzd2l0Y2hlcyBjb25maWd1cmVkIHRocm91Z2ggTURJTy4KKworY29uZmlnIFNXQ09ORklHX0I1M19NTUFQX0RSSVZFUgorCXRyaXN0YXRlICJCNTMgTU1BUCBjb25uZWN0ZWQgc3dpdGNoIGRyaXZlciIKKwlkZXBlbmRzIG9uIFNXQ09ORklHX0I1MworCWhlbHAKKwkgIFNlbGVjdCB0byBlbmFibGUgc3VwcG9ydCBmb3IgbWVtb3J5LW1hcHBlZCBzd2l0Y2hlcyBsaWtlIHRoZSBCQ002M1hYCisJICBpbnRlZ3JhdGVkIHN3aXRjaGVzLgorCitjb25maWcgU1dDT05GSUdfQjUzX1NSQUJfRFJJVkVSCisJdHJpc3RhdGUgIkI1MyBTUkFCIGNvbm5lY3RlZCBzd2l0Y2ggZHJpdmVyIgorCWRlcGVuZHMgb24gU1dDT05GSUdfQjUzCisJaGVscAorCSAgU2VsZWN0IHRvIGVuYWJsZSBzdXBwb3J0IGZvciBtZW1vcnktbWFwcGVkIFN3aXRjaCBSZWdpc3RlciBBY2Nlc3MKKwkgIEJyaWRnZSBSZWdpc3RlcnMgKFNSQUIpIGxpa2UgaXQgaXMgZm91bmQgb24gdGhlIEJDTTUzMDEwCisKK2NvbmZpZyBTV0NPTkZJR19CNTNfUEhZX0ZJWFVQCisJYm9vbApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9uZXQvcGh5L2I1My9NYWtlZmlsZSBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9iNTMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNmZjM2NgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9iNTMvTWFrZWZpbGUKQEAgLTAsMCArMSwxMCBAQAorb2JqLSQoQ09ORklHX1NXQ09ORklHX0I1MykJCSs9IGI1M19jb21tb24ubworCitvYmotJChDT05GSUdfU1dDT05GSUdfQjUzX1BIWV9GSVhVUCkJKz0gYjUzX3BoeV9maXh1cC5vCisKK29iai0kKENPTkZJR19TV0NPTkZJR19CNTNfTU1BUF9EUklWRVIpCSs9IGI1M19tbWFwLm8KK29iai0kKENPTkZJR19TV0NPTkZJR19CNTNfU1JBQl9EUklWRVIpCSs9IGI1M19zcmFiLm8KK29iai0kKENPTkZJR19TV0NPTkZJR19CNTNfUEhZX0RSSVZFUikJKz0gYjUzX21kaW8ubworb2JqLSQoQ09ORklHX1NXQ09ORklHX0I1M19TUElfRFJJVkVSKQkrPSBiNTNfc3BpLm8KKworY2NmbGFncy15CQkJCSs9IC1XZXJyb3IKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9iNTMvYjUzX2NvbW1vbi5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9uZXQvcGh5L2I1My9iNTNfY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMwYzVjOAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9iNTMvYjUzX2NvbW1vbi5jCkBAIC0wLDAgKzEsMTczMCBAQAorLyoKKyAqIEI1MyBzd2l0Y2ggZHJpdmVyIG1haW4gbG9naWMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBKb25hcyBHb3Jza2kgPGpvZ29Ab3BlbndydC5vcmc+CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3dpdGNoLmg+CisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9uZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2I1My5oPgorCisjaW5jbHVkZSAiYjUzX3JlZ3MuaCIKKyNpbmNsdWRlICJiNTNfcHJpdi5oIgorCisvKiBidWZmZXIgc2l6ZSBuZWVkZWQgZm9yIGRpc3BsYXlpbmcgYWxsIE1JQnMgd2l0aCBtYXgnZCB2YWx1ZXMgKi8KKyNkZWZpbmUgQjUzX0JVRl9TSVpFCTExODgKKworc3RydWN0IGI1M19taWJfZGVzYyB7CisJdTggc2l6ZTsKKwl1OCBvZmZzZXQ7CisJY29uc3QgY2hhciAqbmFtZTsKK307CisKKy8qIEJDTTUzNjUgTUlCIGNvdW50ZXJzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGI1M19taWJfZGVzYyBiNTNfbWlic182NVtdID0geworCXsgOCwgMHgwMCwgIlR4T2N0ZXRzIiB9LAorCXsgNCwgMHgwOCwgIlR4RHJvcFBrdHMiIH0sCisJeyA0LCAweDEwLCAiVHhCcm9hZGNhc3RQa3RzIiB9LAorCXsgNCwgMHgxNCwgIlR4TXVsdGljYXN0UGt0cyIgfSwKKwl7IDQsIDB4MTgsICJUeFVuaWNhc3RQa3RzIiB9LAorCXsgNCwgMHgxYywgIlR4Q29sbGlzaW9ucyIgfSwKKwl7IDQsIDB4MjAsICJUeFNpbmdsZUNvbGxpc2lvbiIgfSwKKwl7IDQsIDB4MjQsICJUeE11bHRpcGxlQ29sbGlzaW9uIiB9LAorCXsgNCwgMHgyOCwgIlR4RGVmZXJyZWRUcmFuc21pdCIgfSwKKwl7IDQsIDB4MmMsICJUeExhdGVDb2xsaXNpb24iIH0sCisJeyA0LCAweDMwLCAiVHhFeGNlc3NpdmVDb2xsaXNpb24iIH0sCisJeyA0LCAweDM4LCAiVHhQYXVzZVBrdHMiIH0sCisJeyA4LCAweDQ0LCAiUnhPY3RldHMiIH0sCisJeyA0LCAweDRjLCAiUnhVbmRlcnNpemVQa3RzIiB9LAorCXsgNCwgMHg1MCwgIlJ4UGF1c2VQa3RzIiB9LAorCXsgNCwgMHg1NCwgIlBrdHM2NE9jdGV0cyIgfSwKKwl7IDQsIDB4NTgsICJQa3RzNjV0bzEyN09jdGV0cyIgfSwKKwl7IDQsIDB4NWMsICJQa3RzMTI4dG8yNTVPY3RldHMiIH0sCisJeyA0LCAweDYwLCAiUGt0czI1NnRvNTExT2N0ZXRzIiB9LAorCXsgNCwgMHg2NCwgIlBrdHM1MTJ0bzEwMjNPY3RldHMiIH0sCisJeyA0LCAweDY4LCAiUGt0czEwMjR0bzE1MjJPY3RldHMiIH0sCisJeyA0LCAweDZjLCAiUnhPdmVyc2l6ZVBrdHMiIH0sCisJeyA0LCAweDcwLCAiUnhKYWJiZXJzIiB9LAorCXsgNCwgMHg3NCwgIlJ4QWxpZ25tZW50RXJyb3JzIiB9LAorCXsgNCwgMHg3OCwgIlJ4RkNTRXJyb3JzIiB9LAorCXsgOCwgMHg3YywgIlJ4R29vZE9jdGV0cyIgfSwKKwl7IDQsIDB4ODQsICJSeERyb3BQa3RzIiB9LAorCXsgNCwgMHg4OCwgIlJ4VW5pY2FzdFBrdHMiIH0sCisJeyA0LCAweDhjLCAiUnhNdWx0aWNhc3RQa3RzIiB9LAorCXsgNCwgMHg5MCwgIlJ4QnJvYWRjYXN0UGt0cyIgfSwKKwl7IDQsIDB4OTQsICJSeFNBQ2hhbmdlcyIgfSwKKwl7IDQsIDB4OTgsICJSeEZyYWdtZW50cyIgfSwKKwl7IH0sCit9OworCisjZGVmaW5lIEI2M1hYX01JQl9UWEJfSUQJMAkvKiBUeE9jdGV0cyAqLworI2RlZmluZSBCNjNYWF9NSUJfUlhCX0lECTE0CS8qIFJ4T2N0ZXRzICovCisKKy8qIEJDTTYzeHggTUlCIGNvdW50ZXJzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGI1M19taWJfZGVzYyBiNTNfbWlic182M3h4W10gPSB7CisJeyA4LCAweDAwLCAiVHhPY3RldHMiIH0sCisJeyA0LCAweDA4LCAiVHhEcm9wUGt0cyIgfSwKKwl7IDQsIDB4MGMsICJUeFFvU1BrdHMiIH0sCisJeyA0LCAweDEwLCAiVHhCcm9hZGNhc3RQa3RzIiB9LAorCXsgNCwgMHgxNCwgIlR4TXVsdGljYXN0UGt0cyIgfSwKKwl7IDQsIDB4MTgsICJUeFVuaWNhc3RQa3RzIiB9LAorCXsgNCwgMHgxYywgIlR4Q29sbGlzaW9ucyIgfSwKKwl7IDQsIDB4MjAsICJUeFNpbmdsZUNvbGxpc2lvbiIgfSwKKwl7IDQsIDB4MjQsICJUeE11bHRpcGxlQ29sbGlzaW9uIiB9LAorCXsgNCwgMHgyOCwgIlR4RGVmZXJyZWRUcmFuc21pdCIgfSwKKwl7IDQsIDB4MmMsICJUeExhdGVDb2xsaXNpb24iIH0sCisJeyA0LCAweDMwLCAiVHhFeGNlc3NpdmVDb2xsaXNpb24iIH0sCisJeyA0LCAweDM4LCAiVHhQYXVzZVBrdHMiIH0sCisJeyA4LCAweDNjLCAiVHhRb1NPY3RldHMiIH0sCisJeyA4LCAweDQ0LCAiUnhPY3RldHMiIH0sCisJeyA0LCAweDRjLCAiUnhVbmRlcnNpemVQa3RzIiB9LAorCXsgNCwgMHg1MCwgIlJ4UGF1c2VQa3RzIiB9LAorCXsgNCwgMHg1NCwgIlBrdHM2NE9jdGV0cyIgfSwKKwl7IDQsIDB4NTgsICJQa3RzNjV0bzEyN09jdGV0cyIgfSwKKwl7IDQsIDB4NWMsICJQa3RzMTI4dG8yNTVPY3RldHMiIH0sCisJeyA0LCAweDYwLCAiUGt0czI1NnRvNTExT2N0ZXRzIiB9LAorCXsgNCwgMHg2NCwgIlBrdHM1MTJ0bzEwMjNPY3RldHMiIH0sCisJeyA0LCAweDY4LCAiUGt0czEwMjR0bzE1MjJPY3RldHMiIH0sCisJeyA0LCAweDZjLCAiUnhPdmVyc2l6ZVBrdHMiIH0sCisJeyA0LCAweDcwLCAiUnhKYWJiZXJzIiB9LAorCXsgNCwgMHg3NCwgIlJ4QWxpZ25tZW50RXJyb3JzIiB9LAorCXsgNCwgMHg3OCwgIlJ4RkNTRXJyb3JzIiB9LAorCXsgOCwgMHg3YywgIlJ4R29vZE9jdGV0cyIgfSwKKwl7IDQsIDB4ODQsICJSeERyb3BQa3RzIiB9LAorCXsgNCwgMHg4OCwgIlJ4VW5pY2FzdFBrdHMiIH0sCisJeyA0LCAweDhjLCAiUnhNdWx0aWNhc3RQa3RzIiB9LAorCXsgNCwgMHg5MCwgIlJ4QnJvYWRjYXN0UGt0cyIgfSwKKwl7IDQsIDB4OTQsICJSeFNBQ2hhbmdlcyIgfSwKKwl7IDQsIDB4OTgsICJSeEZyYWdtZW50cyIgfSwKKwl7IDQsIDB4YTAsICJSeFN5bWJvbEVycm9ycyIgfSwKKwl7IDQsIDB4YTQsICJSeFFvU1BrdHMiIH0sCisJeyA4LCAweGE4LCAiUnhRb1NPY3RldHMiIH0sCisJeyA0LCAweGIwLCAiUGt0czE1MjN0bzIwNDdPY3RldHMiIH0sCisJeyA0LCAweGI0LCAiUGt0czIwNDh0bzQwOTVPY3RldHMiIH0sCisJeyA0LCAweGI4LCAiUGt0czQwOTZ0bzgxOTFPY3RldHMiIH0sCisJeyA0LCAweGJjLCAiUGt0czgxOTJ0bzk3MjhPY3RldHMiIH0sCisJeyA0LCAweGMwLCAiUnhEaXNjYXJkZWQiIH0sCisJeyB9Cit9OworCisjZGVmaW5lIEI1M1hYX01JQl9UWEJfSUQJMAkvKiBUeE9jdGV0cyAqLworI2RlZmluZSBCNTNYWF9NSUJfUlhCX0lECTEyCS8qIFJ4T2N0ZXRzICovCisKKy8qIE1JQiBjb3VudGVycyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBiNTNfbWliX2Rlc2MgYjUzX21pYnNbXSA9IHsKKwl7IDgsIDB4MDAsICJUeE9jdGV0cyIgfSwKKwl7IDQsIDB4MDgsICJUeERyb3BQa3RzIiB9LAorCXsgNCwgMHgxMCwgIlR4QnJvYWRjYXN0UGt0cyIgfSwKKwl7IDQsIDB4MTQsICJUeE11bHRpY2FzdFBrdHMiIH0sCisJeyA0LCAweDE4LCAiVHhVbmljYXN0UGt0cyIgfSwKKwl7IDQsIDB4MWMsICJUeENvbGxpc2lvbnMiIH0sCisJeyA0LCAweDIwLCAiVHhTaW5nbGVDb2xsaXNpb24iIH0sCisJeyA0LCAweDI0LCAiVHhNdWx0aXBsZUNvbGxpc2lvbiIgfSwKKwl7IDQsIDB4MjgsICJUeERlZmVycmVkVHJhbnNtaXQiIH0sCisJeyA0LCAweDJjLCAiVHhMYXRlQ29sbGlzaW9uIiB9LAorCXsgNCwgMHgzMCwgIlR4RXhjZXNzaXZlQ29sbGlzaW9uIiB9LAorCXsgNCwgMHgzOCwgIlR4UGF1c2VQa3RzIiB9LAorCXsgOCwgMHg1MCwgIlJ4T2N0ZXRzIiB9LAorCXsgNCwgMHg1OCwgIlJ4VW5kZXJzaXplUGt0cyIgfSwKKwl7IDQsIDB4NWMsICJSeFBhdXNlUGt0cyIgfSwKKwl7IDQsIDB4NjAsICJQa3RzNjRPY3RldHMiIH0sCisJeyA0LCAweDY0LCAiUGt0czY1dG8xMjdPY3RldHMiIH0sCisJeyA0LCAweDY4LCAiUGt0czEyOHRvMjU1T2N0ZXRzIiB9LAorCXsgNCwgMHg2YywgIlBrdHMyNTZ0bzUxMU9jdGV0cyIgfSwKKwl7IDQsIDB4NzAsICJQa3RzNTEydG8xMDIzT2N0ZXRzIiB9LAorCXsgNCwgMHg3NCwgIlBrdHMxMDI0dG8xNTIyT2N0ZXRzIiB9LAorCXsgNCwgMHg3OCwgIlJ4T3ZlcnNpemVQa3RzIiB9LAorCXsgNCwgMHg3YywgIlJ4SmFiYmVycyIgfSwKKwl7IDQsIDB4ODAsICJSeEFsaWdubWVudEVycm9ycyIgfSwKKwl7IDQsIDB4ODQsICJSeEZDU0Vycm9ycyIgfSwKKwl7IDgsIDB4ODgsICJSeEdvb2RPY3RldHMiIH0sCisJeyA0LCAweDkwLCAiUnhEcm9wUGt0cyIgfSwKKwl7IDQsIDB4OTQsICJSeFVuaWNhc3RQa3RzIiB9LAorCXsgNCwgMHg5OCwgIlJ4TXVsdGljYXN0UGt0cyIgfSwKKwl7IDQsIDB4OWMsICJSeEJyb2FkY2FzdFBrdHMiIH0sCisJeyA0LCAweGEwLCAiUnhTQUNoYW5nZXMiIH0sCisJeyA0LCAweGE0LCAiUnhGcmFnbWVudHMiIH0sCisJeyA0LCAweGE4LCAiUnhKdW1ib1BrdHMiIH0sCisJeyA0LCAweGFjLCAiUnhTeW1ib2xFcnJvcnMiIH0sCisJeyA0LCAweGMwLCAiUnhEaXNjYXJkZWQiIH0sCisJeyB9Cit9OworCitzdGF0aWMgaW50IGI1M19kb192bGFuX29wKHN0cnVjdCBiNTNfZGV2aWNlICpkZXYsIHU4IG9wKQoreworCXVuc2lnbmVkIGludCBpOworCisJYjUzX3dyaXRlOChkZXYsIEI1M19BUkxJT19QQUdFLCBkZXYtPnZ0YV9yZWdzWzBdLCBWVEFfU1RBUlRfQ01EIHwgb3ApOworCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJdTggdnRhOworCisJCWI1M19yZWFkOChkZXYsIEI1M19BUkxJT19QQUdFLCBkZXYtPnZ0YV9yZWdzWzBdLCAmdnRhKTsKKwkJaWYgKCEodnRhICYgVlRBX1NUQVJUX0NNRCkpCisJCQlyZXR1cm4gMDsKKworCQl1c2xlZXBfcmFuZ2UoMTAwLCAyMDApOworCX0KKworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgdm9pZCBiNTNfc2V0X3ZsYW5fZW50cnkoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgdTE2IHZpZCwgdTE2IG1lbWJlcnMsCisJCQkgICAgICAgdTE2IHVudGFnKQoreworCWlmIChpczUzMjUoZGV2KSkgeworCQl1MzIgZW50cnkgPSAwOworCisJCWlmIChtZW1iZXJzKSB7CisJCQllbnRyeSA9ICgodW50YWcgJiBWQV9VTlRBR19NQVNLXzI1KSA8PCBWQV9VTlRBR19TXzI1KSB8CisJCQkJbWVtYmVyczsKKwkJCWlmIChkZXYtPmNvcmVfcmV2ID49IDMpCisJCQkJZW50cnkgfD0gVkFfVkFMSURfMjVfUjQgfCB2aWQgPDwgVkFfVklEX0hJR0hfUzsKKwkJCWVsc2UKKwkJCQllbnRyeSB8PSBWQV9WQUxJRF8yNTsKKwkJfQorCisJCWI1M193cml0ZTMyKGRldiwgQjUzX1ZMQU5fUEFHRSwgQjUzX1ZMQU5fV1JJVEVfMjUsIGVudHJ5KTsKKwkJYjUzX3dyaXRlMTYoZGV2LCBCNTNfVkxBTl9QQUdFLCBCNTNfVkxBTl9UQUJMRV9BQ0NFU1NfMjUsIHZpZCB8CisJCQkgICAgVlRBX1JXX1NUQVRFX1dSIHwgVlRBX1JXX09QX0VOKTsKKwl9IGVsc2UgaWYgKGlzNTM2NShkZXYpKSB7CisJCXUxNiBlbnRyeSA9IDA7CisKKwkJaWYgKG1lbWJlcnMpCisJCQllbnRyeSA9ICgodW50YWcgJiBWQV9VTlRBR19NQVNLXzY1KSA8PCBWQV9VTlRBR19TXzY1KSB8CisJCQkJbWVtYmVycyB8IFZBX1ZBTElEXzY1OworCisJCWI1M193cml0ZTE2KGRldiwgQjUzX1ZMQU5fUEFHRSwgQjUzX1ZMQU5fV1JJVEVfNjUsIGVudHJ5KTsKKwkJYjUzX3dyaXRlMTYoZGV2LCBCNTNfVkxBTl9QQUdFLCBCNTNfVkxBTl9UQUJMRV9BQ0NFU1NfNjUsIHZpZCB8CisJCQkgICAgVlRBX1JXX1NUQVRFX1dSIHwgVlRBX1JXX09QX0VOKTsKKwl9IGVsc2UgeworCQliNTNfd3JpdGUxNihkZXYsIEI1M19BUkxJT19QQUdFLCBkZXYtPnZ0YV9yZWdzWzFdLCB2aWQpOworCQliNTNfd3JpdGUzMihkZXYsIEI1M19BUkxJT19QQUdFLCBkZXYtPnZ0YV9yZWdzWzJdLAorCQkJICAgICh1bnRhZyA8PCBWVEVfVU5UQUdfUykgfCBtZW1iZXJzKTsKKworCQliNTNfZG9fdmxhbl9vcChkZXYsIFZUQV9DTURfV1JJVEUpOworCX0KK30KKwordm9pZCBiNTNfc2V0X2ZvcndhcmRpbmcoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgaW50IGVuYWJsZSkKK3sKKwl1OCBtZ210OworCisJYjUzX3JlYWQ4KGRldiwgQjUzX0NUUkxfUEFHRSwgQjUzX1NXSVRDSF9NT0RFLCAmbWdtdCk7CisKKwlpZiAoZW5hYmxlKQorCQltZ210IHw9IFNNX1NXX0ZXRF9FTjsKKwllbHNlCisJCW1nbXQgJj0gflNNX1NXX0ZXRF9FTjsKKworCWI1M193cml0ZTgoZGV2LCBCNTNfQ1RSTF9QQUdFLCBCNTNfU1dJVENIX01PREUsIG1nbXQpOworfQorCitzdGF0aWMgdm9pZCBiNTNfZW5hYmxlX3ZsYW4oc3RydWN0IGI1M19kZXZpY2UgKmRldiwgaW50IGVuYWJsZSkKK3sKKwl1OCBtZ210LCB2YzAsIHZjMSwgdmM0ID0gMCwgdmM1OworCisJYjUzX3JlYWQ4KGRldiwgQjUzX0NUUkxfUEFHRSwgQjUzX1NXSVRDSF9NT0RFLCAmbWdtdCk7CisJYjUzX3JlYWQ4KGRldiwgQjUzX1ZMQU5fUEFHRSwgQjUzX1ZMQU5fQ1RSTDAsICZ2YzApOworCWI1M19yZWFkOChkZXYsIEI1M19WTEFOX1BBR0UsIEI1M19WTEFOX0NUUkwxLCAmdmMxKTsKKworCWlmIChpczUzMjUoZGV2KSB8fCBpczUzNjUoZGV2KSkgeworCQliNTNfcmVhZDgoZGV2LCBCNTNfVkxBTl9QQUdFLCBCNTNfVkxBTl9DVFJMNF8yNSwgJnZjNCk7CisJCWI1M19yZWFkOChkZXYsIEI1M19WTEFOX1BBR0UsIEI1M19WTEFOX0NUUkw1XzI1LCAmdmM1KTsKKwl9IGVsc2UgaWYgKGlzNjN4eChkZXYpKSB7CisJCWI1M19yZWFkOChkZXYsIEI1M19WTEFOX1BBR0UsIEI1M19WTEFOX0NUUkw0XzYzWFgsICZ2YzQpOworCQliNTNfcmVhZDgoZGV2LCBCNTNfVkxBTl9QQUdFLCBCNTNfVkxBTl9DVFJMNV82M1hYLCAmdmM1KTsKKwl9IGVsc2UgeworCQliNTNfcmVhZDgoZGV2LCBCNTNfVkxBTl9QQUdFLCBCNTNfVkxBTl9DVFJMNCwgJnZjNCk7CisJCWI1M19yZWFkOChkZXYsIEI1M19WTEFOX1BBR0UsIEI1M19WTEFOX0NUUkw1LCAmdmM1KTsKKwl9CisKKwltZ210ICY9IH5TTV9TV19GV0RfTU9ERTsKKworCWlmIChlbmFibGUpIHsKKwkJdmMwIHw9IFZDMF9WTEFOX0VOIHwgVkMwX1ZJRF9DSEtfRU4gfCBWQzBfVklEX0hBU0hfVklEOworCQl2YzEgfD0gVkMxX1JYX01DU1RfVU5UQUdfRU4gfCBWQzFfUlhfTUNTVF9GV0RfRU47CisJCXZjNCAmPSB+VkM0X0lOR19WSURfQ0hFQ0tfTUFTSzsKKwkJdmM0IHw9IFZDNF9JTkdfVklEX1ZJT19EUk9QIDw8IFZDNF9JTkdfVklEX0NIRUNLX1M7CisJCXZjNSB8PSBWQzVfRFJPUF9WVEFCTEVfTUlTUzsKKworCQlpZiAoaXM1MzI1KGRldikpCisJCQl2YzAgJj0gflZDMF9SRVNFUlZFRF8xOworCisJCWlmIChpczUzMjUoZGV2KSB8fCBpczUzNjUoZGV2KSkKKwkJCXZjMSB8PSBWQzFfUlhfTUNTVF9UQUdfRU47CisKKwkJaWYgKCFpczUzMjUoZGV2KSAmJiAhaXM1MzY1KGRldikpIHsKKwkJCWlmIChkZXYtPmFsbG93X3ZpZF80MDk1KQorCQkJCXZjNSB8PSBWQzVfVklEX0ZGRl9FTjsKKwkJCWVsc2UKKwkJCQl2YzUgJj0gflZDNV9WSURfRkZGX0VOOworCQl9CisJfSBlbHNlIHsKKwkJdmMwICY9IH4oVkMwX1ZMQU5fRU4gfCBWQzBfVklEX0NIS19FTiB8IFZDMF9WSURfSEFTSF9WSUQpOworCQl2YzEgJj0gfihWQzFfUlhfTUNTVF9VTlRBR19FTiB8IFZDMV9SWF9NQ1NUX0ZXRF9FTik7CisJCXZjNCAmPSB+VkM0X0lOR19WSURfQ0hFQ0tfTUFTSzsKKwkJdmM1ICY9IH5WQzVfRFJPUF9WVEFCTEVfTUlTUzsKKworCQlpZiAoaXM1MzI1KGRldikgfHwgaXM1MzY1KGRldikpCisJCQl2YzQgfD0gVkM0X0lOR19WSURfVklPX0ZXRCA8PCBWQzRfSU5HX1ZJRF9DSEVDS19TOworCQllbHNlCisJCQl2YzQgfD0gVkM0X0lOR19WSURfVklPX1RPX0lNUCA8PCBWQzRfSU5HX1ZJRF9DSEVDS19TOworCisJCWlmIChpczUzMjUoZGV2KSB8fCBpczUzNjUoZGV2KSkKKwkJCXZjMSAmPSB+VkMxX1JYX01DU1RfVEFHX0VOOworCisJCWlmICghaXM1MzI1KGRldikgJiYgIWlzNTM2NShkZXYpKQorCQkJdmM1ICY9IH5WQzVfVklEX0ZGRl9FTjsKKwl9CisKKwliNTNfd3JpdGU4KGRldiwgQjUzX1ZMQU5fUEFHRSwgQjUzX1ZMQU5fQ1RSTDAsIHZjMCk7CisJYjUzX3dyaXRlOChkZXYsIEI1M19WTEFOX1BBR0UsIEI1M19WTEFOX0NUUkwxLCB2YzEpOworCisJaWYgKGlzNTMyNShkZXYpIHx8IGlzNTM2NShkZXYpKSB7CisJCS8qIGVuYWJsZSB0aGUgaGlnaCA4IGJpdCB2aWQgY2hlY2sgb24gNTMyNSAqLworCQlpZiAoaXM1MzI1KGRldikgJiYgZW5hYmxlKQorCQkJYjUzX3dyaXRlOChkZXYsIEI1M19WTEFOX1BBR0UsIEI1M19WTEFOX0NUUkwzLAorCQkJCSAgIFZDM19ISUdIXzhCSVRfRU4pOworCQllbHNlCisJCQliNTNfd3JpdGU4KGRldiwgQjUzX1ZMQU5fUEFHRSwgQjUzX1ZMQU5fQ1RSTDMsIDApOworCisJCWI1M193cml0ZTgoZGV2LCBCNTNfVkxBTl9QQUdFLCBCNTNfVkxBTl9DVFJMNF8yNSwgdmM0KTsKKwkJYjUzX3dyaXRlOChkZXYsIEI1M19WTEFOX1BBR0UsIEI1M19WTEFOX0NUUkw1XzI1LCB2YzUpOworCX0gZWxzZSBpZiAoaXM2M3h4KGRldikpIHsKKwkJYjUzX3dyaXRlMTYoZGV2LCBCNTNfVkxBTl9QQUdFLCBCNTNfVkxBTl9DVFJMM182M1hYLCAwKTsKKwkJYjUzX3dyaXRlOChkZXYsIEI1M19WTEFOX1BBR0UsIEI1M19WTEFOX0NUUkw0XzYzWFgsIHZjNCk7CisJCWI1M193cml0ZTgoZGV2LCBCNTNfVkxBTl9QQUdFLCBCNTNfVkxBTl9DVFJMNV82M1hYLCB2YzUpOworCX0gZWxzZSB7CisJCWI1M193cml0ZTE2KGRldiwgQjUzX1ZMQU5fUEFHRSwgQjUzX1ZMQU5fQ1RSTDMsIDApOworCQliNTNfd3JpdGU4KGRldiwgQjUzX1ZMQU5fUEFHRSwgQjUzX1ZMQU5fQ1RSTDQsIHZjNCk7CisJCWI1M193cml0ZTgoZGV2LCBCNTNfVkxBTl9QQUdFLCBCNTNfVkxBTl9DVFJMNSwgdmM1KTsKKwl9CisKKwliNTNfd3JpdGU4KGRldiwgQjUzX0NUUkxfUEFHRSwgQjUzX1NXSVRDSF9NT0RFLCBtZ210KTsKK30KKworc3RhdGljIGludCBiNTNfc2V0X2p1bWJvKHN0cnVjdCBiNTNfZGV2aWNlICpkZXYsIGludCBlbmFibGUsIGludCBhbGxvd18xMF8xMDApCit7CisJdTMyIHBvcnRfbWFzayA9IDA7CisJdTE2IG1heF9zaXplID0gSk1TX01JTl9TSVpFOworCisJaWYgKGlzNTMyNShkZXYpIHx8IGlzNTM2NShkZXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChlbmFibGUpIHsKKwkJcG9ydF9tYXNrID0gZGV2LT5lbmFibGVkX3BvcnRzOworCQltYXhfc2l6ZSA9IEpNU19NQVhfU0laRTsKKwkJaWYgKGFsbG93XzEwXzEwMCkKKwkJCXBvcnRfbWFzayB8PSBKUE1fMTBfMTAwX0pVTUJPX0VOOworCX0KKworCWI1M193cml0ZTMyKGRldiwgQjUzX0pVTUJPX1BBR0UsIGRldi0+anVtYm9fcG1fcmVnLCBwb3J0X21hc2spOworCXJldHVybiBiNTNfd3JpdGUxNihkZXYsIEI1M19KVU1CT19QQUdFLCBkZXYtPmp1bWJvX3NpemVfcmVnLCBtYXhfc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQgYjUzX2ZsdXNoX2FybChzdHJ1Y3QgYjUzX2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGludCBpOworCisJYjUzX3dyaXRlOChkZXYsIEI1M19DVFJMX1BBR0UsIEI1M19GQVNUX0FHRV9DVFJMLAorCQkgICBGQVNUX0FHRV9ET05FIHwgRkFTVF9BR0VfRFlOQU1JQyB8IEZBU1RfQUdFX1NUQVRJQyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQl1OCBmYXN0X2FnZV9jdHJsOworCisJCWI1M19yZWFkOChkZXYsIEI1M19DVFJMX1BBR0UsIEI1M19GQVNUX0FHRV9DVFJMLAorCQkJICAmZmFzdF9hZ2VfY3RybCk7CisKKwkJaWYgKCEoZmFzdF9hZ2VfY3RybCAmIEZBU1RfQUdFX0RPTkUpKQorCQkJcmV0dXJuIDA7CisKKwkJbWRlbGF5KDEpOworCX0KKworCXByX3dhcm4oInRpbWUgb3V0IHdoaWxlIGZsdXNoaW5nIEFSTFxuIik7CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHZvaWQgYjUzX2VuYWJsZV9wb3J0cyhzdHJ1Y3QgYjUzX2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGk7CisKKwliNTNfZm9yX2VhY2hfcG9ydChkZXYsIGkpIHsKKwkJdTggcG9ydF9jdHJsOworCQl1MTYgcHZsYW5fbWFzazsKKworCQkvKgorCQkgKiBwcmV2ZW50IGxlYWtpbmcgcGFja2V0cyBiZXR3ZWVuIHdhbiBhbmQgbGFuIGluIHVubWFuYWdlZAorCQkgKiBtb2RlIHRocm91Z2ggcG9ydCB2bGFucy4KKwkJICovCisJCWlmIChkZXYtPmVuYWJsZV92bGFuIHx8IGlzX2NwdV9wb3J0KGRldiwgaSkpCisJCQlwdmxhbl9tYXNrID0gMHgxZmY7CisJCWVsc2UgaWYgKGlzNTMxeDUoZGV2KSB8fCBpczUzMDF4KGRldikpCisJCQkvKiBCQ001MzExNSBtYXkgdXNlIGEgZGlmZmVyZW50IHBvcnQgYXMgY3B1IHBvcnQgKi8KKwkJCXB2bGFuX21hc2sgPSBCSVQoZGV2LT5zd19kZXYuY3B1X3BvcnQpOworCQllbHNlCisJCQlwdmxhbl9tYXNrID0gQklUKEI1M19DUFVfUE9SVCk7CisKKwkJLyogQkNNNTMyNSBDUFUgcG9ydCBpcyBhdCA4ICovCisJCWlmICgoaXM1MzI1KGRldikgfHwgaXM1MzY1KGRldikpICYmIGkgPT0gQjUzX0NQVV9QT1JUXzI1KQorCQkJaSA9IEI1M19DUFVfUE9SVDsKKworCQlpZiAoZGV2LT5jaGlwX2lkID09IEJDTTUzOThfREVWSUNFX0lEICYmIChpID09IDYgfHwgaSA9PSA3KSkKKwkJCS8qIGRpc2FibGUgdW51c2VkIHBvcnRzIDYgJiA3ICovCisJCQlwb3J0X2N0cmwgPSBQT1JUX0NUUkxfUlhfRElTQUJMRSB8IFBPUlRfQ1RSTF9UWF9ESVNBQkxFOworCQllbHNlIGlmIChpID09IEI1M19DUFVfUE9SVCkKKwkJCXBvcnRfY3RybCA9IFBPUlRfQ1RSTF9SWF9CQ1NUX0VOIHwKKwkJCQkgICAgUE9SVF9DVFJMX1JYX01DU1RfRU4gfAorCQkJCSAgICBQT1JUX0NUUkxfUlhfVUNTVF9FTjsKKwkJZWxzZQorCQkJcG9ydF9jdHJsID0gMDsKKworCQliNTNfd3JpdGUxNihkZXYsIEI1M19QVkxBTl9QQUdFLCBCNTNfUFZMQU5fUE9SVF9NQVNLKGkpLAorCQkJICAgIHB2bGFuX21hc2spOworCisJCS8qIHBvcnQgc3RhdGUgaXMgaGFuZGxlZCBieSBiY202M3h4X2VuZXQgZHJpdmVyICovCisJCWlmICghaXM2M3h4KGRldikgJiYgIShpczUzMDF4KGRldikgJiYgaSA9PSA2KSkKKwkJCWI1M193cml0ZTgoZGV2LCBCNTNfQ1RSTF9QQUdFLCBCNTNfUE9SVF9DVFJMKGkpLAorCQkJCSAgIHBvcnRfY3RybCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBiNTNfZW5hYmxlX21pYihzdHJ1Y3QgYjUzX2RldmljZSAqZGV2KQoreworCXU4IGdjOworCisJYjUzX3JlYWQ4KGRldiwgQjUzX01HTVRfUEFHRSwgQjUzX0dMT0JBTF9DT05GSUcsICZnYyk7CisKKwlnYyAmPSB+KEdDX1JFU0VUX01JQiB8IEdDX01JQl9BQ19FTik7CisKKwliNTNfd3JpdGU4KGRldiwgQjUzX01HTVRfUEFHRSwgQjUzX0dMT0JBTF9DT05GSUcsIGdjKTsKK30KKworc3RhdGljIGludCBiNTNfYXBwbHkoc3RydWN0IGI1M19kZXZpY2UgKmRldikKK3sKKwlpbnQgaTsKKworCS8qIGNsZWFyIGFsbCB2bGFuIGVudHJpZXMgKi8KKwlpZiAoaXM1MzI1KGRldikgfHwgaXM1MzY1KGRldikpIHsKKwkJZm9yIChpID0gMTsgaSA8IGRldi0+c3dfZGV2LnZsYW5zOyBpKyspCisJCQliNTNfc2V0X3ZsYW5fZW50cnkoZGV2LCBpLCAwLCAwKTsKKwl9IGVsc2UgeworCQliNTNfZG9fdmxhbl9vcChkZXYsIFZUQV9DTURfQ0xFQVIpOworCX0KKworCWI1M19lbmFibGVfdmxhbihkZXYsIGRldi0+ZW5hYmxlX3ZsYW4pOworCisJLyogZmlsbCBWTEFOIHRhYmxlICovCisJaWYgKGRldi0+ZW5hYmxlX3ZsYW4pIHsKKwkJZm9yIChpID0gMDsgaSA8IGRldi0+c3dfZGV2LnZsYW5zOyBpKyspIHsKKwkJCXN0cnVjdCBiNTNfdmxhbiAqdmxhbiA9ICZkZXYtPnZsYW5zW2ldOworCisJCQlpZiAoIXZsYW4tPm1lbWJlcnMpCisJCQkJY29udGludWU7CisKKwkJCWI1M19zZXRfdmxhbl9lbnRyeShkZXYsIGksIHZsYW4tPm1lbWJlcnMsIHZsYW4tPnVudGFnKTsKKwkJfQorCisJCWI1M19mb3JfZWFjaF9wb3J0KGRldiwgaSkKKwkJCWI1M193cml0ZTE2KGRldiwgQjUzX1ZMQU5fUEFHRSwKKwkJCQkgICAgQjUzX1ZMQU5fUE9SVF9ERUZfVEFHKGkpLAorCQkJCSAgICBkZXYtPnBvcnRzW2ldLnB2aWQpOworCX0gZWxzZSB7CisJCWI1M19mb3JfZWFjaF9wb3J0KGRldiwgaSkKKwkJCWI1M193cml0ZTE2KGRldiwgQjUzX1ZMQU5fUEFHRSwKKwkJCQkgICAgQjUzX1ZMQU5fUE9SVF9ERUZfVEFHKGkpLCAxKTsKKworCX0KKworCWI1M19lbmFibGVfcG9ydHMoZGV2KTsKKworCWlmICghaXM1MzI1KGRldikgJiYgIWlzNTM2NShkZXYpKQorCQliNTNfc2V0X2p1bWJvKGRldiwgZGV2LT5lbmFibGVfanVtYm8sIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGI1M19zd2l0Y2hfcmVzZXRfZ3BpbyhzdHJ1Y3QgYjUzX2RldmljZSAqZGV2KQoreworCWludCBncGlvID0gZGV2LT5yZXNldF9ncGlvOworCisJaWYgKGdwaW8gPCAwKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFJlc2V0IHNlcXVlbmNlOiBSRVNFVCBsb3coNTBtcyktPmhpZ2goMjBtcykKKwkgKi8KKwlncGlvX3NldF92YWx1ZShncGlvLCAwKTsKKwltZGVsYXkoNTApOworCisJZ3Bpb19zZXRfdmFsdWUoZ3BpbywgMSk7CisJbWRlbGF5KDIwKTsKKworCWRldi0+Y3VycmVudF9wYWdlID0gMHhmZjsKK30KKworc3RhdGljIGludCBiNTNfY29uZmlndXJlX3BvcnRzX29mKHN0cnVjdCBiNTNfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpkbiwgKnBuOworCXUzMiBwb3J0X251bTsKKworCWRuID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZGV2X29mX25vZGUoZGV2LT5kZXYpLCAicG9ydHMiKTsKKworCWZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKGRuLCBwbikgeworCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmZpeGVkX2xpbms7CisKKwkJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBuLCAicmVnIiwgJnBvcnRfbnVtKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChwb3J0X251bSA+IEI1M19DUFVfUE9SVCkKKwkJCWNvbnRpbnVlOworCisJCWZpeGVkX2xpbmsgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShwbiwgImZpeGVkLWxpbmsiKTsKKwkJaWYgKGZpeGVkX2xpbmspIHsKKwkJCXUzMiBzcGQ7CisJCQl1OCBwbyA9IEdNSUlfUE9fTElOSzsKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oNSwgNSwgMCkKKwkJCXBoeV9pbnRlcmZhY2VfdCBtb2RlOworI2Vsc2UKKwkJCWludCBtb2RlID0gb2ZfZ2V0X3BoeV9tb2RlKHBuKTsKKyNlbmRpZgorCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDUsIDUsIDApCisJCQlvZl9nZXRfcGh5X21vZGUocG4sICZtb2RlKTsKKyNlbmRpZgorCisJCQlpZiAoIW9mX3Byb3BlcnR5X3JlYWRfdTMyKGZpeGVkX2xpbmssICJzcGVlZCIsICZzcGQpKSB7CisJCQkJc3dpdGNoIChzcGQpIHsKKwkJCQljYXNlIDEwOgorCQkJCQlwbyB8PSBHTUlJX1BPX1NQRUVEXzEwTTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAxMDA6CisJCQkJCXBvIHw9IEdNSUlfUE9fU1BFRURfMTAwTTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAyMDAwOgorCQkJCQlpZiAoaXNfaW1wX3BvcnQoZGV2LCBwb3J0X251bSkpCisJCQkJCQlwbyB8PSBQT1JUX09WRVJSSURFX1NQRUVEXzIwMDBNOworCQkJCQllbHNlCisJCQkJCQlwbyB8PSBHTUlJX1BPX1NQRUVEXzIwMDBNOworCQkJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJCQljYXNlIDEwMDA6CisJCQkJCXBvIHw9IEdNSUlfUE9fU1BFRURfMTAwME07CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChmaXhlZF9saW5rLCAiZnVsbC1kdXBsZXgiKSkKKwkJCQlwbyB8PSBQT1JUX09WRVJSSURFX0ZVTExfRFVQTEVYOworCQkJaWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChmaXhlZF9saW5rLCAicGF1c2UiKSkKKwkJCQlwbyB8PSBHTUlJX1BPX1JYX0ZMT1c7CisJCQlpZiAob2ZfcHJvcGVydHlfcmVhZF9ib29sKGZpeGVkX2xpbmssICJhc3ltLXBhdXNlIikpCisJCQkJcG8gfD0gR01JSV9QT19UWF9GTE9XOworCisJCQlpZiAoaXNfaW1wX3BvcnQoZGV2LCBwb3J0X251bSkpIHsKKwkJCQlwbyB8PSBQT1JUX09WRVJSSURFX0VOOworCisJCQkJaWYgKGlzNTMyNShkZXYpICYmCisJCQkJICAgIG1vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JFVk1JSSkKKwkJCQkJcG8gfD0gUE9SVF9PVkVSUklERV9SVl9NSUlfMjU7CisKKwkJCQliNTNfd3JpdGU4KGRldiwgQjUzX0NUUkxfUEFHRSwKKwkJCQkJICAgQjUzX1BPUlRfT1ZFUlJJREVfQ1RSTCwgcG8pOworCisJCQkJaWYgKGlzNTMyNShkZXYpICYmCisJCQkJICAgIG1vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JFVk1JSSkgeworCQkJCQliNTNfcmVhZDgoZGV2LCBCNTNfQ1RSTF9QQUdFLAorCQkJCQkJICBCNTNfUE9SVF9PVkVSUklERV9DVFJMLCAmcG8pOworCQkJCQlpZiAoIShwbyAmIFBPUlRfT1ZFUlJJREVfUlZfTUlJXzI1KSkKKwkJCQkJcHJfZXJyKCJGYWlsZWQgdG8gZW5hYmxlIHJldmVyc2UgTUlJIG1vZGVcbiIpOworCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXBvIHw9IEdNSUlfUE9fRU47CisJCQkJYjUzX3dyaXRlOChkZXYsIEI1M19DVFJMX1BBR0UsCisJCQkJCSAgIEI1M19HTUlJX1BPUlRfT1ZFUlJJREVfQ1RSTChwb3J0X251bSksCisJCQkJCSAgIHBvKTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGI1M19jb25maWd1cmVfcG9ydHMoc3RydWN0IGI1M19kZXZpY2UgKmRldikKK3sKKwl1OCBjcHVfcG9ydCA9IGRldi0+c3dfZGV2LmNwdV9wb3J0OworCisJLyogY29uZmlndXJlIE1JSSBwb3J0IGlmIG5lY2Vzc2FyeSAqLworCWlmIChpczUzMjUoZGV2KSkgeworCQl1OCBtaWlfcG9ydF9vdmVycmlkZTsKKworCQliNTNfcmVhZDgoZGV2LCBCNTNfQ1RSTF9QQUdFLCBCNTNfUE9SVF9PVkVSUklERV9DVFJMLAorCQkJICAmbWlpX3BvcnRfb3ZlcnJpZGUpOworCQkvKiByZXZlcnNlIG1paSBuZWVkcyB0byBiZSBlbmFibGVkICovCisJCWlmICghKG1paV9wb3J0X292ZXJyaWRlICYgUE9SVF9PVkVSUklERV9SVl9NSUlfMjUpKSB7CisJCQliNTNfd3JpdGU4KGRldiwgQjUzX0NUUkxfUEFHRSwgQjUzX1BPUlRfT1ZFUlJJREVfQ1RSTCwKKwkJCQkgICBtaWlfcG9ydF9vdmVycmlkZSB8IFBPUlRfT1ZFUlJJREVfUlZfTUlJXzI1KTsKKwkJCWI1M19yZWFkOChkZXYsIEI1M19DVFJMX1BBR0UsIEI1M19QT1JUX09WRVJSSURFX0NUUkwsCisJCQkJICAmbWlpX3BvcnRfb3ZlcnJpZGUpOworCisJCQlpZiAoIShtaWlfcG9ydF9vdmVycmlkZSAmIFBPUlRfT1ZFUlJJREVfUlZfTUlJXzI1KSkgeworCQkJCXByX2VycigiRmFpbGVkIHRvIGVuYWJsZSByZXZlcnNlIE1JSSBtb2RlXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJfQorCX0gZWxzZSBpZiAoaXM1MzF4NShkZXYpICYmIGNwdV9wb3J0ID09IEI1M19DUFVfUE9SVCkgeworCQl1OCBtaWlfcG9ydF9vdmVycmlkZTsKKworCQliNTNfcmVhZDgoZGV2LCBCNTNfQ1RSTF9QQUdFLCBCNTNfUE9SVF9PVkVSUklERV9DVFJMLAorCQkJICAmbWlpX3BvcnRfb3ZlcnJpZGUpOworCQliNTNfd3JpdGU4KGRldiwgQjUzX0NUUkxfUEFHRSwgQjUzX1BPUlRfT1ZFUlJJREVfQ1RSTCwKKwkJCSAgIG1paV9wb3J0X292ZXJyaWRlIHwgUE9SVF9PVkVSUklERV9FTiB8CisJCQkgICBQT1JUX09WRVJSSURFX0xJTkspOworCisJCS8qIEJDTTQ3MTg5IGhhcyBhbm90aGVyIGludGVyZmFjZSBjb25uZWN0ZWQgdG8gdGhlIHBvcnQgNSAqLworCQlpZiAoZGV2LT5lbmFibGVkX3BvcnRzICYgQklUKDUpKSB7CisJCQl1OCBwb19yZWcgPSBCNTNfR01JSV9QT1JUX09WRVJSSURFX0NUUkwoNSk7CisJCQl1OCBnbWlpX3BvOworCisJCQliNTNfcmVhZDgoZGV2LCBCNTNfQ1RSTF9QQUdFLCBwb19yZWcsICZnbWlpX3BvKTsKKwkJCWdtaWlfcG8gfD0gR01JSV9QT19MSU5LIHwKKwkJCQkgICBHTUlJX1BPX1JYX0ZMT1cgfAorCQkJCSAgIEdNSUlfUE9fVFhfRkxPVyB8CisJCQkJICAgR01JSV9QT19FTjsKKwkJCWI1M193cml0ZTgoZGV2LCBCNTNfQ1RSTF9QQUdFLCBwb19yZWcsIGdtaWlfcG8pOworCQl9CisJfSBlbHNlIGlmIChpczUzMDF4KGRldikpIHsKKwkJaWYgKGNwdV9wb3J0ID09IDgpIHsKKwkJCXU4IG1paV9wb3J0X292ZXJyaWRlOworCisJCQliNTNfcmVhZDgoZGV2LCBCNTNfQ1RSTF9QQUdFLCBCNTNfUE9SVF9PVkVSUklERV9DVFJMLAorCQkJCSAgJm1paV9wb3J0X292ZXJyaWRlKTsKKwkJCW1paV9wb3J0X292ZXJyaWRlIHw9IFBPUlRfT1ZFUlJJREVfTElOSyB8CisJCQkJCSAgICAgUE9SVF9PVkVSUklERV9SWF9GTE9XIHwKKwkJCQkJICAgICBQT1JUX09WRVJSSURFX1RYX0ZMT1cgfAorCQkJCQkgICAgIFBPUlRfT1ZFUlJJREVfU1BFRURfMjAwME0gfAorCQkJCQkgICAgIFBPUlRfT1ZFUlJJREVfRU47CisJCQliNTNfd3JpdGU4KGRldiwgQjUzX0NUUkxfUEFHRSwgQjUzX1BPUlRfT1ZFUlJJREVfQ1RSTCwKKwkJCQkgICBtaWlfcG9ydF9vdmVycmlkZSk7CisKKwkJCS8qIFRPRE86IFBvcnRzIDUgJiA3IHJlcXVpcmUgc29tZSBleHRyYSBoYW5kbGluZyAqLworCQl9IGVsc2UgeworCQkJdTggcG9fcmVnID0gQjUzX0dNSUlfUE9SVF9PVkVSUklERV9DVFJMKGNwdV9wb3J0KTsKKwkJCXU4IGdtaWlfcG87CisKKwkJCWI1M19yZWFkOChkZXYsIEI1M19DVFJMX1BBR0UsIHBvX3JlZywgJmdtaWlfcG8pOworCQkJZ21paV9wbyB8PSBHTUlJX1BPX0xJTksgfAorCQkJCSAgIEdNSUlfUE9fUlhfRkxPVyB8CisJCQkJICAgR01JSV9QT19UWF9GTE9XIHwKKwkJCQkgICBHTUlJX1BPX0VOIHwKKwkJCQkgICBHTUlJX1BPX1NQRUVEXzIwMDBNOworCQkJYjUzX3dyaXRlOChkZXYsIEI1M19DVFJMX1BBR0UsIHBvX3JlZywgZ21paV9wbyk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiNTNfc3dpdGNoX3Jlc2V0KHN0cnVjdCBiNTNfZGV2aWNlICpkZXYpCit7CisJaW50IHJldCA9IDA7CisJdTggbWdtdDsKKworCWI1M19zd2l0Y2hfcmVzZXRfZ3BpbyhkZXYpOworCisJaWYgKGlzNTM5eChkZXYpKSB7CisJCWI1M193cml0ZTgoZGV2LCBCNTNfQ1RSTF9QQUdFLCBCNTNfU09GVFJFU0VULCAweDgzKTsKKwkJYjUzX3dyaXRlOChkZXYsIEI1M19DVFJMX1BBR0UsIEI1M19TT0ZUUkVTRVQsIDB4MDApOworCX0KKworCWI1M19yZWFkOChkZXYsIEI1M19DVFJMX1BBR0UsIEI1M19TV0lUQ0hfTU9ERSwgJm1nbXQpOworCisJaWYgKCEobWdtdCAmIFNNX1NXX0ZXRF9FTikpIHsKKwkJbWdtdCAmPSB+U01fU1dfRldEX01PREU7CisJCW1nbXQgfD0gU01fU1dfRldEX0VOOworCisJCWI1M193cml0ZTgoZGV2LCBCNTNfQ1RSTF9QQUdFLCBCNTNfU1dJVENIX01PREUsIG1nbXQpOworCQliNTNfcmVhZDgoZGV2LCBCNTNfQ1RSTF9QQUdFLCBCNTNfU1dJVENIX01PREUsICZtZ210KTsKKworCQlpZiAoIShtZ210ICYgU01fU1dfRldEX0VOKSkgeworCQkJcHJfZXJyKCJGYWlsZWQgdG8gZW5hYmxlIHN3aXRjaCFcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwkvKiBlbmFibGUgYWxsIHBvcnRzICovCisJYjUzX2VuYWJsZV9wb3J0cyhkZXYpOworCisJaWYgKGRldi0+ZGV2LT5vZl9ub2RlKQorCQlyZXQgPSBiNTNfY29uZmlndXJlX3BvcnRzX29mKGRldik7CisJZWxzZQorCQlyZXQgPSBiNTNfY29uZmlndXJlX3BvcnRzKGRldik7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJYjUzX2VuYWJsZV9taWIoZGV2KTsKKworCXJldHVybiBiNTNfZmx1c2hfYXJsKGRldik7Cit9CisKKy8qCisgKiBTd2NvbmZpZyBnbHVlIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyBpbnQgYjUzX2dsb2JhbF9nZXRfdmxhbl9lbmFibGUoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkJICAgICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgYjUzX2RldmljZSAqcHJpdiA9IHN3X3RvX2I1MyhkZXYpOworCisJdmFsLT52YWx1ZS5pID0gcHJpdi0+ZW5hYmxlX3ZsYW47CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiNTNfZ2xvYmFsX3NldF92bGFuX2VuYWJsZShzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCQkgICAgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBiNTNfZGV2aWNlICpwcml2ID0gc3dfdG9fYjUzKGRldik7CisKKwlwcml2LT5lbmFibGVfdmxhbiA9IHZhbC0+dmFsdWUuaTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGI1M19nbG9iYWxfZ2V0X2p1bWJvX2VuYWJsZShzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkJICAgICAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IGI1M19kZXZpY2UgKnByaXYgPSBzd190b19iNTMoZGV2KTsKKworCXZhbC0+dmFsdWUuaSA9IHByaXYtPmVuYWJsZV9qdW1ibzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGI1M19nbG9iYWxfc2V0X2p1bWJvX2VuYWJsZShzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkJICAgICAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IGI1M19kZXZpY2UgKnByaXYgPSBzd190b19iNTMoZGV2KTsKKworCXByaXYtPmVuYWJsZV9qdW1ibyA9IHZhbC0+dmFsdWUuaTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGI1M19nbG9iYWxfZ2V0XzQwOTVfZW5hYmxlKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJCSAgICAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IGI1M19kZXZpY2UgKnByaXYgPSBzd190b19iNTMoZGV2KTsKKworCXZhbC0+dmFsdWUuaSA9IHByaXYtPmFsbG93X3ZpZF80MDk1OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYjUzX2dsb2JhbF9zZXRfNDA5NV9lbmFibGUoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkJICAgICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgYjUzX2RldmljZSAqcHJpdiA9IHN3X3RvX2I1MyhkZXYpOworCisJcHJpdi0+YWxsb3dfdmlkXzQwOTUgPSB2YWwtPnZhbHVlLmk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiNTNfZ2xvYmFsX2dldF9wb3J0cyhzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJCWNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCQlzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBiNTNfZGV2aWNlICpwcml2ID0gc3dfdG9fYjUzKGRldik7CisKKwl2YWwtPmxlbiA9IHNucHJpbnRmKHByaXYtPmJ1ZiwgQjUzX0JVRl9TSVpFLCAiMHglMDR4IiwKKwkJCSAgICBwcml2LT5lbmFibGVkX3BvcnRzKTsKKwl2YWwtPnZhbHVlLnMgPSBwcml2LT5idWY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiNTNfcG9ydF9nZXRfcHZpZChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBpbnQgcG9ydCwgaW50ICp2YWwpCit7CisJc3RydWN0IGI1M19kZXZpY2UgKnByaXYgPSBzd190b19iNTMoZGV2KTsKKworCSp2YWwgPSBwcml2LT5wb3J0c1twb3J0XS5wdmlkOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYjUzX3BvcnRfc2V0X3B2aWQoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgaW50IHBvcnQsIGludCB2YWwpCit7CisJc3RydWN0IGI1M19kZXZpY2UgKnByaXYgPSBzd190b19iNTMoZGV2KTsKKworCWlmICh2YWwgPiAxNSAmJiBpczUzMjUocHJpdikpCisJCXJldHVybiAtRUlOVkFMOworCWlmICh2YWwgPT0gNDA5NSAmJiAhcHJpdi0+YWxsb3dfdmlkXzQwOTUpCisJCXJldHVybiAtRUlOVkFMOworCisJcHJpdi0+cG9ydHNbcG9ydF0ucHZpZCA9IHZhbDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGI1M192bGFuX2dldF9wb3J0cyhzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBiNTNfZGV2aWNlICpwcml2ID0gc3dfdG9fYjUzKGRldik7CisJc3RydWN0IHN3aXRjaF9wb3J0ICpwb3J0ID0gJnZhbC0+dmFsdWUucG9ydHNbMF07CisJc3RydWN0IGI1M192bGFuICp2bGFuID0gJnByaXYtPnZsYW5zW3ZhbC0+cG9ydF92bGFuXTsKKwlpbnQgaTsKKworCXZhbC0+bGVuID0gMDsKKworCWlmICghdmxhbi0+bWVtYmVycykKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5wb3J0czsgaSsrKSB7CisJCWlmICghKHZsYW4tPm1lbWJlcnMgJiBCSVQoaSkpKQorCQkJY29udGludWU7CisKKworCQlpZiAoISh2bGFuLT51bnRhZyAmIEJJVChpKSkpCisJCQlwb3J0LT5mbGFncyA9IEJJVChTV0lUQ0hfUE9SVF9GTEFHX1RBR0dFRCk7CisJCWVsc2UKKwkJCXBvcnQtPmZsYWdzID0gMDsKKworCQlwb3J0LT5pZCA9IGk7CisJCXZhbC0+bGVuKys7CisJCXBvcnQrKzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiNTNfdmxhbl9zZXRfcG9ydHMoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgYjUzX2RldmljZSAqcHJpdiA9IHN3X3RvX2I1MyhkZXYpOworCXN0cnVjdCBzd2l0Y2hfcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgYjUzX3ZsYW4gKnZsYW4gPSAmcHJpdi0+dmxhbnNbdmFsLT5wb3J0X3ZsYW5dOworCWludCBpOworCisJLyogb25seSBCQ001MzI1IGFuZCBCQ001MzY1IHN1cHBvcnRzIFZJRCAwICovCisJaWYgKHZhbC0+cG9ydF92bGFuID09IDAgJiYgIWlzNTMyNShwcml2KSAmJiAhaXM1MzY1KHByaXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFZMQU4gNDA5NSBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nICovCisJaWYgKHZhbC0+cG9ydF92bGFuID09IDQwOTUgJiYgIXByaXYtPmFsbG93X3ZpZF80MDk1KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBvcnQgPSAmdmFsLT52YWx1ZS5wb3J0c1swXTsKKwl2bGFuLT5tZW1iZXJzID0gMDsKKwl2bGFuLT51bnRhZyA9IDA7CisJZm9yIChpID0gMDsgaSA8IHZhbC0+bGVuOyBpKyssIHBvcnQrKykgeworCQl2bGFuLT5tZW1iZXJzIHw9IEJJVChwb3J0LT5pZCk7CisKKwkJaWYgKCEocG9ydC0+ZmxhZ3MgJiBCSVQoU1dJVENIX1BPUlRfRkxBR19UQUdHRUQpKSkgeworCQkJdmxhbi0+dW50YWcgfD0gQklUKHBvcnQtPmlkKTsKKwkJCXByaXYtPnBvcnRzW3BvcnQtPmlkXS5wdmlkID0gdmFsLT5wb3J0X3ZsYW47CisJCX07CisJfQorCisJLyogaWdub3JlIGRpc2FibGVkIHBvcnRzICovCisJdmxhbi0+bWVtYmVycyAmPSBwcml2LT5lbmFibGVkX3BvcnRzOworCXZsYW4tPnVudGFnICY9IHByaXYtPmVuYWJsZWRfcG9ydHM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiNTNfcG9ydF9nZXRfbGluayhzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBpbnQgcG9ydCwKKwkJCSAgICAgc3RydWN0IHN3aXRjaF9wb3J0X2xpbmsgKmxpbmspCit7CisJc3RydWN0IGI1M19kZXZpY2UgKnByaXYgPSBzd190b19iNTMoZGV2KTsKKworCWlmIChpc19jcHVfcG9ydChwcml2LCBwb3J0KSkgeworCQlsaW5rLT5saW5rID0gMTsKKwkJbGluay0+ZHVwbGV4ID0gMTsKKwkJbGluay0+c3BlZWQgPSBpczUzMjUocHJpdikgfHwgaXM1MzY1KHByaXYpID8KKwkJCQlTV0lUQ0hfUE9SVF9TUEVFRF8xMDAgOiBTV0lUQ0hfUE9SVF9TUEVFRF8xMDAwOworCQlsaW5rLT5hbmVnID0gMDsKKwl9IGVsc2UgaWYgKHByaXYtPmVuYWJsZWRfcG9ydHMgJiBCSVQocG9ydCkpIHsKKwkJdTMyIHNwZWVkOworCQl1MTYgbG5rLCBkdXBsZXg7CisKKwkJYjUzX3JlYWQxNihwcml2LCBCNTNfU1RBVF9QQUdFLCBCNTNfTElOS19TVEFULCAmbG5rKTsKKwkJYjUzX3JlYWQxNihwcml2LCBCNTNfU1RBVF9QQUdFLCBwcml2LT5kdXBsZXhfcmVnLCAmZHVwbGV4KTsKKworCQlsbmsgPSAobG5rID4+IHBvcnQpICYgMTsKKwkJZHVwbGV4ID0gKGR1cGxleCA+PiBwb3J0KSAmIDE7CisKKwkJaWYgKGlzNTMyNShwcml2KSB8fCBpczUzNjUocHJpdikpIHsKKwkJCXUxNiB0bXA7CisKKwkJCWI1M19yZWFkMTYocHJpdiwgQjUzX1NUQVRfUEFHRSwgQjUzX1NQRUVEX1NUQVQsICZ0bXApOworCQkJc3BlZWQgPSBTUEVFRF9QT1JUX0ZFKHRtcCwgcG9ydCk7CisJCX0gZWxzZSB7CisJCQliNTNfcmVhZDMyKHByaXYsIEI1M19TVEFUX1BBR0UsIEI1M19TUEVFRF9TVEFULCAmc3BlZWQpOworCQkJc3BlZWQgPSBTUEVFRF9QT1JUX0dFKHNwZWVkLCBwb3J0KTsKKwkJfQorCisJCWxpbmstPmxpbmsgPSBsbms7CisJCWlmIChsbmspIHsKKwkJCWxpbmstPmR1cGxleCA9IGR1cGxleDsKKwkJCXN3aXRjaCAoc3BlZWQpIHsKKwkJCWNhc2UgU1BFRURfU1RBVF8xME06CisJCQkJbGluay0+c3BlZWQgPSBTV0lUQ0hfUE9SVF9TUEVFRF8xMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgU1BFRURfU1RBVF8xMDBNOgorCQkJCWxpbmstPnNwZWVkID0gU1dJVENIX1BPUlRfU1BFRURfMTAwOworCQkJCWJyZWFrOworCQkJY2FzZSBTUEVFRF9TVEFUXzEwMDBNOgorCQkJCWxpbmstPnNwZWVkID0gU1dJVENIX1BPUlRfU1BFRURfMTAwMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWxpbmstPmFuZWcgPSAxOworCX0gZWxzZSB7CisJCWxpbmstPmxpbmsgPSAwOworCX0KKworCXJldHVybiAwOworCit9CisKK3N0YXRpYyBpbnQgYjUzX3BvcnRfc2V0X2xpbmsoc3RydWN0IHN3aXRjaF9kZXYgKnN3X2RldiwgaW50IHBvcnQsCisJCQkgICAgIHN0cnVjdCBzd2l0Y2hfcG9ydF9saW5rICpsaW5rKQoreworCXN0cnVjdCBiNTNfZGV2aWNlICpkZXYgPSBzd190b19iNTMoc3dfZGV2KTsKKworCS8qCisJICogVE9ETzogQkNNNjNYWCByZXF1aXJlcyBzcGVjaWFsIGhhbmRsaW5nIGFzIGl0IGNhbiBoYXZlIGV4dGVybmFsIHBoeXMKKwkgKiBhbmQgcG9ydHMgbWlnaHQgYmUgR0Ugb3Igb25seSBGRQorCSAqLworCWlmIChpczYzeHgoZGV2KSkKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKworCWlmIChwb3J0ID09IHN3X2Rldi0+Y3B1X3BvcnQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCEoQklUKHBvcnQpICYgZGV2LT5lbmFibGVkX3BvcnRzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobGluay0+c3BlZWQgPT0gU1dJVENIX1BPUlRfU1BFRURfMTAwMCAmJgorCSAgICAoaXM1MzI1KGRldikgfHwgaXM1MzY1KGRldikpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChsaW5rLT5zcGVlZCA9PSBTV0lUQ0hfUE9SVF9TUEVFRF8xMDAwICYmICFsaW5rLT5kdXBsZXgpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHN3aXRjaF9nZW5lcmljX3NldF9saW5rKHN3X2RldiwgcG9ydCwgbGluayk7Cit9CisKK3N0YXRpYyBpbnQgYjUzX3BoeV9yZWFkMTYoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgaW50IGFkZHIsIHU4IHJlZywgdTE2ICp2YWx1ZSkKK3sKKwlzdHJ1Y3QgYjUzX2RldmljZSAqcHJpdiA9IHN3X3RvX2I1MyhkZXYpOworCisJaWYgKHByaXYtPm9wcy0+cGh5X3JlYWQxNikKKwkJcmV0dXJuIHByaXYtPm9wcy0+cGh5X3JlYWQxNihwcml2LCBhZGRyLCByZWcsIHZhbHVlKTsKKworCXJldHVybiBiNTNfcmVhZDE2KHByaXYsIEI1M19QT1JUX01JSV9QQUdFKGFkZHIpLCByZWcsIHZhbHVlKTsKK30KKworc3RhdGljIGludCBiNTNfcGh5X3dyaXRlMTYoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgaW50IGFkZHIsIHU4IHJlZywgdTE2IHZhbHVlKQoreworCXN0cnVjdCBiNTNfZGV2aWNlICpwcml2ID0gc3dfdG9fYjUzKGRldik7CisKKwlpZiAocHJpdi0+b3BzLT5waHlfd3JpdGUxNikKKwkJcmV0dXJuIHByaXYtPm9wcy0+cGh5X3dyaXRlMTYocHJpdiwgYWRkciwgcmVnLCB2YWx1ZSk7CisKKwlyZXR1cm4gYjUzX3dyaXRlMTYocHJpdiwgQjUzX1BPUlRfTUlJX1BBR0UoYWRkciksIHJlZywgdmFsdWUpOworfQorCitzdGF0aWMgaW50IGI1M19nbG9iYWxfcmVzZXRfc3dpdGNoKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYpCit7CisJc3RydWN0IGI1M19kZXZpY2UgKnByaXYgPSBzd190b19iNTMoZGV2KTsKKworCS8qIHJlc2V0IHZsYW5zICovCisJcHJpdi0+ZW5hYmxlX3ZsYW4gPSAwOworCXByaXYtPmVuYWJsZV9qdW1ibyA9IDA7CisJcHJpdi0+YWxsb3dfdmlkXzQwOTUgPSAwOworCisJbWVtc2V0KHByaXYtPnZsYW5zLCAwLCBzaXplb2YoKnByaXYtPnZsYW5zKSAqIGRldi0+dmxhbnMpOworCW1lbXNldChwcml2LT5wb3J0cywgMCwgc2l6ZW9mKCpwcml2LT5wb3J0cykgKiBkZXYtPnBvcnRzKTsKKworCXJldHVybiBiNTNfc3dpdGNoX3Jlc2V0KHByaXYpOworfQorCitzdGF0aWMgaW50IGI1M19nbG9iYWxfYXBwbHlfY29uZmlnKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYpCit7CisJc3RydWN0IGI1M19kZXZpY2UgKnByaXYgPSBzd190b19iNTMoZGV2KTsKKworCS8qIGRpc2FibGUgc3dpdGNoaW5nICovCisJYjUzX3NldF9mb3J3YXJkaW5nKHByaXYsIDApOworCisJYjUzX2FwcGx5KHByaXYpOworCisJLyogZW5hYmxlIHN3aXRjaGluZyAqLworCWI1M19zZXRfZm9yd2FyZGluZyhwcml2LCAxKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgYjUzX2dsb2JhbF9yZXNldF9taWIoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCQljb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkJc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgYjUzX2RldmljZSAqcHJpdiA9IHN3X3RvX2I1MyhkZXYpOworCXU4IGdjOworCisJYjUzX3JlYWQ4KHByaXYsIEI1M19NR01UX1BBR0UsIEI1M19HTE9CQUxfQ09ORklHLCAmZ2MpOworCisJYjUzX3dyaXRlOChwcml2LCBCNTNfTUdNVF9QQUdFLCBCNTNfR0xPQkFMX0NPTkZJRywgZ2MgfCBHQ19SRVNFVF9NSUIpOworCW1kZWxheSgxKTsKKwliNTNfd3JpdGU4KHByaXYsIEI1M19NR01UX1BBR0UsIEI1M19HTE9CQUxfQ09ORklHLCBnYyAmIH5HQ19SRVNFVF9NSUIpOworCW1kZWxheSgxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGI1M19wb3J0X2dldF9taWIoc3RydWN0IHN3aXRjaF9kZXYgKnN3X2RldiwKKwkJCSAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkgICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgYjUzX2RldmljZSAqZGV2ID0gc3dfdG9fYjUzKHN3X2Rldik7CisJY29uc3Qgc3RydWN0IGI1M19taWJfZGVzYyAqbWliczsKKwlpbnQgcG9ydCA9IHZhbC0+cG9ydF92bGFuOworCWludCBsZW4gPSAwOworCisJaWYgKCEoQklUKHBvcnQpICYgZGV2LT5lbmFibGVkX3BvcnRzKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKGlzNTM2NShkZXYpKSB7CisJCWlmIChwb3J0ID09IDUpCisJCQlwb3J0ID0gODsKKworCQltaWJzID0gYjUzX21pYnNfNjU7CisJfSBlbHNlIGlmIChpczYzeHgoZGV2KSkgeworCQltaWJzID0gYjUzX21pYnNfNjN4eDsKKwl9IGVsc2UgeworCQltaWJzID0gYjUzX21pYnM7CisJfQorCisJZGV2LT5idWZbMF0gPSAwOworCisJZm9yICg7IG1pYnMtPnNpemUgPiAwOyBtaWJzKyspIHsKKwkJdTY0IHZhbDsKKworCQlpZiAobWlicy0+c2l6ZSA9PSA4KSB7CisJCQliNTNfcmVhZDY0KGRldiwgQjUzX01JQl9QQUdFKHBvcnQpLCBtaWJzLT5vZmZzZXQsICZ2YWwpOworCQl9IGVsc2UgeworCQkJdTMyIHZhbDMyOworCisJCQliNTNfcmVhZDMyKGRldiwgQjUzX01JQl9QQUdFKHBvcnQpLCBtaWJzLT5vZmZzZXQsCisJCQkJICAgJnZhbDMyKTsKKwkJCXZhbCA9IHZhbDMyOworCQl9CisKKwkJbGVuICs9IHNucHJpbnRmKGRldi0+YnVmICsgbGVuLCBCNTNfQlVGX1NJWkUgLSBsZW4sCisJCQkJIiUtMjBzOiAlbGx1XG4iLCBtaWJzLT5uYW1lLCB2YWwpOworCX0KKworCXZhbC0+bGVuID0gbGVuOworCXZhbC0+dmFsdWUucyA9IGRldi0+YnVmOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYjUzX3BvcnRfZ2V0X3N0YXRzKHN0cnVjdCBzd2l0Y2hfZGV2ICpzd19kZXYsIGludCBwb3J0LAorCQkJCXN0cnVjdCBzd2l0Y2hfcG9ydF9zdGF0cyAqc3RhdHMpCit7CisJc3RydWN0IGI1M19kZXZpY2UgKmRldiA9IHN3X3RvX2I1Myhzd19kZXYpOworCWNvbnN0IHN0cnVjdCBiNTNfbWliX2Rlc2MgKm1pYnM7CisJaW50IHR4Yl9pZCwgcnhiX2lkOworCXU2NCByeGIsIHR4YjsKKworCWlmICghKEJJVChwb3J0KSAmIGRldi0+ZW5hYmxlZF9wb3J0cykpCisJCXJldHVybiAtRUlOVkFMOworCisJdHhiX2lkID0gQjUzWFhfTUlCX1RYQl9JRDsKKwlyeGJfaWQgPSBCNTNYWF9NSUJfUlhCX0lEOworCisJaWYgKGlzNTM2NShkZXYpKSB7CisJCWlmIChwb3J0ID09IDUpCisJCQlwb3J0ID0gODsKKworCQltaWJzID0gYjUzX21pYnNfNjU7CisJfSBlbHNlIGlmIChpczYzeHgoZGV2KSkgeworCQltaWJzID0gYjUzX21pYnNfNjN4eDsKKwkJdHhiX2lkID0gQjYzWFhfTUlCX1RYQl9JRDsKKwkJcnhiX2lkID0gQjYzWFhfTUlCX1JYQl9JRDsKKwl9IGVsc2UgeworCQltaWJzID0gYjUzX21pYnM7CisJfQorCisJZGV2LT5idWZbMF0gPSAwOworCisJaWYgKG1pYnMtPnNpemUgPT0gOCkgeworCQliNTNfcmVhZDY0KGRldiwgQjUzX01JQl9QQUdFKHBvcnQpLCBtaWJzW3R4Yl9pZF0ub2Zmc2V0LCAmdHhiKTsKKwkJYjUzX3JlYWQ2NChkZXYsIEI1M19NSUJfUEFHRShwb3J0KSwgbWlic1tyeGJfaWRdLm9mZnNldCwgJnJ4Yik7CisJfSBlbHNlIHsKKwkJdTMyIHZhbDMyOworCisJCWI1M19yZWFkMzIoZGV2LCBCNTNfTUlCX1BBR0UocG9ydCksIG1pYnNbdHhiX2lkXS5vZmZzZXQsICZ2YWwzMik7CisJCXR4YiA9IHZhbDMyOworCisJCWI1M19yZWFkMzIoZGV2LCBCNTNfTUlCX1BBR0UocG9ydCksIG1pYnNbcnhiX2lkXS5vZmZzZXQsICZ2YWwzMik7CisJCXJ4YiA9IHZhbDMyOworCX0KKworCXN0YXRzLT50eF9ieXRlcyA9IHR4YjsKKwlzdGF0cy0+cnhfYnl0ZXMgPSByeGI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzd2l0Y2hfYXR0ciBiNTNfZ2xvYmFsX29wc18yNVtdID0geworCXsKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9JTlQsCisJCS5uYW1lID0gImVuYWJsZV92bGFuIiwKKwkJLmRlc2NyaXB0aW9uID0gIkVuYWJsZSBWTEFOIG1vZGUiLAorCQkuc2V0ID0gYjUzX2dsb2JhbF9zZXRfdmxhbl9lbmFibGUsCisJCS5nZXQgPSBiNTNfZ2xvYmFsX2dldF92bGFuX2VuYWJsZSwKKwkJLm1heCA9IDEsCisJfSwKKwl7CisJCS50eXBlID0gU1dJVENIX1RZUEVfU1RSSU5HLAorCQkubmFtZSA9ICJwb3J0cyIsCisJCS5kZXNjcmlwdGlvbiA9ICJBdmFpbGFibGUgcG9ydHMgKGFzIGJpdG1hc2spIiwKKwkJLmdldCA9IGI1M19nbG9iYWxfZ2V0X3BvcnRzLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHN3aXRjaF9hdHRyIGI1M19nbG9iYWxfb3BzXzY1W10gPSB7CisJeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX0lOVCwKKwkJLm5hbWUgPSAiZW5hYmxlX3ZsYW4iLAorCQkuZGVzY3JpcHRpb24gPSAiRW5hYmxlIFZMQU4gbW9kZSIsCisJCS5zZXQgPSBiNTNfZ2xvYmFsX3NldF92bGFuX2VuYWJsZSwKKwkJLmdldCA9IGI1M19nbG9iYWxfZ2V0X3ZsYW5fZW5hYmxlLAorCQkubWF4ID0gMSwKKwl9LAorCXsKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9TVFJJTkcsCisJCS5uYW1lID0gInBvcnRzIiwKKwkJLmRlc2NyaXB0aW9uID0gIkF2YWlsYWJsZSBwb3J0cyAoYXMgYml0bWFzaykiLAorCQkuZ2V0ID0gYjUzX2dsb2JhbF9nZXRfcG9ydHMsCisJfSwKKwl7CisJCS50eXBlID0gU1dJVENIX1RZUEVfSU5ULAorCQkubmFtZSA9ICJyZXNldF9taWIiLAorCQkuZGVzY3JpcHRpb24gPSAiUmVzZXQgTUlCIGNvdW50ZXJzIiwKKwkJLnNldCA9IGI1M19nbG9iYWxfcmVzZXRfbWliLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHN3aXRjaF9hdHRyIGI1M19nbG9iYWxfb3BzW10gPSB7CisJeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX0lOVCwKKwkJLm5hbWUgPSAiZW5hYmxlX3ZsYW4iLAorCQkuZGVzY3JpcHRpb24gPSAiRW5hYmxlIFZMQU4gbW9kZSIsCisJCS5zZXQgPSBiNTNfZ2xvYmFsX3NldF92bGFuX2VuYWJsZSwKKwkJLmdldCA9IGI1M19nbG9iYWxfZ2V0X3ZsYW5fZW5hYmxlLAorCQkubWF4ID0gMSwKKwl9LAorCXsKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9TVFJJTkcsCisJCS5uYW1lID0gInBvcnRzIiwKKwkJLmRlc2NyaXB0aW9uID0gIkF2YWlsYWJsZSBQb3J0cyAoYXMgYml0bWFzaykiLAorCQkuZ2V0ID0gYjUzX2dsb2JhbF9nZXRfcG9ydHMsCisJfSwKKwl7CisJCS50eXBlID0gU1dJVENIX1RZUEVfSU5ULAorCQkubmFtZSA9ICJyZXNldF9taWIiLAorCQkuZGVzY3JpcHRpb24gPSAiUmVzZXQgTUlCIGNvdW50ZXJzIiwKKwkJLnNldCA9IGI1M19nbG9iYWxfcmVzZXRfbWliLAorCX0sCisJeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX0lOVCwKKwkJLm5hbWUgPSAiZW5hYmxlX2p1bWJvIiwKKwkJLmRlc2NyaXB0aW9uID0gIkVuYWJsZSBKdW1ibyBGcmFtZXMiLAorCQkuc2V0ID0gYjUzX2dsb2JhbF9zZXRfanVtYm9fZW5hYmxlLAorCQkuZ2V0ID0gYjUzX2dsb2JhbF9nZXRfanVtYm9fZW5hYmxlLAorCQkubWF4ID0gMSwKKwl9LAorCXsKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9JTlQsCisJCS5uYW1lID0gImFsbG93X3ZpZF80MDk1IiwKKwkJLmRlc2NyaXB0aW9uID0gIkFsbG93IFZJRCA0MDk1IiwKKwkJLnNldCA9IGI1M19nbG9iYWxfc2V0XzQwOTVfZW5hYmxlLAorCQkuZ2V0ID0gYjUzX2dsb2JhbF9nZXRfNDA5NV9lbmFibGUsCisJCS5tYXggPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHN3aXRjaF9hdHRyIGI1M19wb3J0X29wc1tdID0geworCXsKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9TVFJJTkcsCisJCS5uYW1lID0gIm1pYiIsCisJCS5kZXNjcmlwdGlvbiA9ICJHZXQgcG9ydCdzIE1JQiBjb3VudGVycyIsCisJCS5nZXQgPSBiNTNfcG9ydF9nZXRfbWliLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHN3aXRjaF9hdHRyIGI1M19ub19vcHNbXSA9IHsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2Rldl9vcHMgYjUzX3N3aXRjaF9vcHNfMjUgPSB7CisJLmF0dHJfZ2xvYmFsID0geworCQkuYXR0ciA9IGI1M19nbG9iYWxfb3BzXzI1LAorCQkubl9hdHRyID0gQVJSQVlfU0laRShiNTNfZ2xvYmFsX29wc18yNSksCisJfSwKKwkuYXR0cl9wb3J0ID0geworCQkuYXR0ciA9IGI1M19ub19vcHMsCisJCS5uX2F0dHIgPSBBUlJBWV9TSVpFKGI1M19ub19vcHMpLAorCX0sCisJLmF0dHJfdmxhbiA9IHsKKwkJLmF0dHIgPSBiNTNfbm9fb3BzLAorCQkubl9hdHRyID0gQVJSQVlfU0laRShiNTNfbm9fb3BzKSwKKwl9LAorCisJLmdldF92bGFuX3BvcnRzID0gYjUzX3ZsYW5fZ2V0X3BvcnRzLAorCS5zZXRfdmxhbl9wb3J0cyA9IGI1M192bGFuX3NldF9wb3J0cywKKwkuZ2V0X3BvcnRfcHZpZCA9IGI1M19wb3J0X2dldF9wdmlkLAorCS5zZXRfcG9ydF9wdmlkID0gYjUzX3BvcnRfc2V0X3B2aWQsCisJLmFwcGx5X2NvbmZpZyA9IGI1M19nbG9iYWxfYXBwbHlfY29uZmlnLAorCS5yZXNldF9zd2l0Y2ggPSBiNTNfZ2xvYmFsX3Jlc2V0X3N3aXRjaCwKKwkuZ2V0X3BvcnRfbGluayA9IGI1M19wb3J0X2dldF9saW5rLAorCS5zZXRfcG9ydF9saW5rID0gYjUzX3BvcnRfc2V0X2xpbmssCisJLmdldF9wb3J0X3N0YXRzID0gYjUzX3BvcnRfZ2V0X3N0YXRzLAorCS5waHlfcmVhZDE2ID0gYjUzX3BoeV9yZWFkMTYsCisJLnBoeV93cml0ZTE2ID0gYjUzX3BoeV93cml0ZTE2LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzd2l0Y2hfZGV2X29wcyBiNTNfc3dpdGNoX29wc182NSA9IHsKKwkuYXR0cl9nbG9iYWwgPSB7CisJCS5hdHRyID0gYjUzX2dsb2JhbF9vcHNfNjUsCisJCS5uX2F0dHIgPSBBUlJBWV9TSVpFKGI1M19nbG9iYWxfb3BzXzY1KSwKKwl9LAorCS5hdHRyX3BvcnQgPSB7CisJCS5hdHRyID0gYjUzX3BvcnRfb3BzLAorCQkubl9hdHRyID0gQVJSQVlfU0laRShiNTNfcG9ydF9vcHMpLAorCX0sCisJLmF0dHJfdmxhbiA9IHsKKwkJLmF0dHIgPSBiNTNfbm9fb3BzLAorCQkubl9hdHRyID0gQVJSQVlfU0laRShiNTNfbm9fb3BzKSwKKwl9LAorCisJLmdldF92bGFuX3BvcnRzID0gYjUzX3ZsYW5fZ2V0X3BvcnRzLAorCS5zZXRfdmxhbl9wb3J0cyA9IGI1M192bGFuX3NldF9wb3J0cywKKwkuZ2V0X3BvcnRfcHZpZCA9IGI1M19wb3J0X2dldF9wdmlkLAorCS5zZXRfcG9ydF9wdmlkID0gYjUzX3BvcnRfc2V0X3B2aWQsCisJLmFwcGx5X2NvbmZpZyA9IGI1M19nbG9iYWxfYXBwbHlfY29uZmlnLAorCS5yZXNldF9zd2l0Y2ggPSBiNTNfZ2xvYmFsX3Jlc2V0X3N3aXRjaCwKKwkuZ2V0X3BvcnRfbGluayA9IGI1M19wb3J0X2dldF9saW5rLAorCS5zZXRfcG9ydF9saW5rID0gYjUzX3BvcnRfc2V0X2xpbmssCisJLmdldF9wb3J0X3N0YXRzID0gYjUzX3BvcnRfZ2V0X3N0YXRzLAorCS5waHlfcmVhZDE2ID0gYjUzX3BoeV9yZWFkMTYsCisJLnBoeV93cml0ZTE2ID0gYjUzX3BoeV93cml0ZTE2LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzd2l0Y2hfZGV2X29wcyBiNTNfc3dpdGNoX29wcyA9IHsKKwkuYXR0cl9nbG9iYWwgPSB7CisJCS5hdHRyID0gYjUzX2dsb2JhbF9vcHMsCisJCS5uX2F0dHIgPSBBUlJBWV9TSVpFKGI1M19nbG9iYWxfb3BzKSwKKwl9LAorCS5hdHRyX3BvcnQgPSB7CisJCS5hdHRyID0gYjUzX3BvcnRfb3BzLAorCQkubl9hdHRyID0gQVJSQVlfU0laRShiNTNfcG9ydF9vcHMpLAorCX0sCisJLmF0dHJfdmxhbiA9IHsKKwkJLmF0dHIgPSBiNTNfbm9fb3BzLAorCQkubl9hdHRyID0gQVJSQVlfU0laRShiNTNfbm9fb3BzKSwKKwl9LAorCisJLmdldF92bGFuX3BvcnRzID0gYjUzX3ZsYW5fZ2V0X3BvcnRzLAorCS5zZXRfdmxhbl9wb3J0cyA9IGI1M192bGFuX3NldF9wb3J0cywKKwkuZ2V0X3BvcnRfcHZpZCA9IGI1M19wb3J0X2dldF9wdmlkLAorCS5zZXRfcG9ydF9wdmlkID0gYjUzX3BvcnRfc2V0X3B2aWQsCisJLmFwcGx5X2NvbmZpZyA9IGI1M19nbG9iYWxfYXBwbHlfY29uZmlnLAorCS5yZXNldF9zd2l0Y2ggPSBiNTNfZ2xvYmFsX3Jlc2V0X3N3aXRjaCwKKwkuZ2V0X3BvcnRfbGluayA9IGI1M19wb3J0X2dldF9saW5rLAorCS5zZXRfcG9ydF9saW5rID0gYjUzX3BvcnRfc2V0X2xpbmssCisJLmdldF9wb3J0X3N0YXRzID0gYjUzX3BvcnRfZ2V0X3N0YXRzLAorCS5waHlfcmVhZDE2ID0gYjUzX3BoeV9yZWFkMTYsCisJLnBoeV93cml0ZTE2ID0gYjUzX3BoeV93cml0ZTE2LAorfTsKKworc3RydWN0IGI1M19jaGlwX2RhdGEgeworCXUzMiBjaGlwX2lkOworCWNvbnN0IGNoYXIgKmRldl9uYW1lOworCWNvbnN0IGNoYXIgKmFsaWFzOworCXUxNiB2bGFuczsKKwl1MTYgZW5hYmxlZF9wb3J0czsKKwl1OCBjcHVfcG9ydDsKKwl1OCB2dGFfcmVnc1szXTsKKwl1OCBkdXBsZXhfcmVnOworCXU4IGp1bWJvX3BtX3JlZzsKKwl1OCBqdW1ib19zaXplX3JlZzsKKwljb25zdCBzdHJ1Y3Qgc3dpdGNoX2Rldl9vcHMgKnN3X29wczsKK307CisKKyNkZWZpbmUgQjUzX1ZUQV9SRUdTCVwKKwl7IEI1M19WVF9BQ0NFU1MsIEI1M19WVF9JTkRFWCwgQjUzX1ZUX0VOVFJZIH0KKyNkZWZpbmUgQjUzX1ZUQV9SRUdTXzk3OTggXAorCXsgQjUzX1ZUX0FDQ0VTU185Nzk4LCBCNTNfVlRfSU5ERVhfOTc5OCwgQjUzX1ZUX0VOVFJZXzk3OTggfQorI2RlZmluZSBCNTNfVlRBX1JFR1NfNjNYWCBcCisJeyBCNTNfVlRfQUNDRVNTXzYzWFgsIEI1M19WVF9JTkRFWF82M1hYLCBCNTNfVlRfRU5UUllfNjNYWCB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYjUzX2NoaXBfZGF0YSBiNTNfc3dpdGNoX2NoaXBzW10gPSB7CisJeworCQkuY2hpcF9pZCA9IEJDTTUzMjVfREVWSUNFX0lELAorCQkuZGV2X25hbWUgPSAiQkNNNTMyNSIsCisJCS5hbGlhcyA9ICJiY201MzI1IiwKKwkJLnZsYW5zID0gMTYsCisJCS5lbmFibGVkX3BvcnRzID0gMHgxZiwKKwkJLmNwdV9wb3J0ID0gQjUzX0NQVV9QT1JUXzI1LAorCQkuZHVwbGV4X3JlZyA9IEI1M19EVVBMRVhfU1RBVF9GRSwKKwkJLnN3X29wcyA9ICZiNTNfc3dpdGNoX29wc18yNSwKKwl9LAorCXsKKwkJLmNoaXBfaWQgPSBCQ001MzY1X0RFVklDRV9JRCwKKwkJLmRldl9uYW1lID0gIkJDTTUzNjUiLAorCQkuYWxpYXMgPSAiYmNtNTM2NSIsCisJCS52bGFucyA9IDI1NiwKKwkJLmVuYWJsZWRfcG9ydHMgPSAweDFmLAorCQkuY3B1X3BvcnQgPSBCNTNfQ1BVX1BPUlRfMjUsCisJCS5kdXBsZXhfcmVnID0gQjUzX0RVUExFWF9TVEFUX0ZFLAorCQkuc3dfb3BzID0gJmI1M19zd2l0Y2hfb3BzXzY1LAorCX0sCisJeworCQkuY2hpcF9pZCA9IEJDTTUzOTVfREVWSUNFX0lELAorCQkuZGV2X25hbWUgPSAiQkNNNTM5NSIsCisJCS5hbGlhcyA9ICJiY201Mzk1IiwKKwkJLnZsYW5zID0gNDA5NiwKKwkJLmVuYWJsZWRfcG9ydHMgPSAweDFmLAorCQkuY3B1X3BvcnQgPSBCNTNfQ1BVX1BPUlQsCisJCS52dGFfcmVncyA9IEI1M19WVEFfUkVHUywKKwkJLmR1cGxleF9yZWcgPSBCNTNfRFVQTEVYX1NUQVRfR0UsCisJCS5qdW1ib19wbV9yZWcgPSBCNTNfSlVNQk9fUE9SVF9NQVNLLAorCQkuanVtYm9fc2l6ZV9yZWcgPSBCNTNfSlVNQk9fTUFYX1NJWkUsCisJCS5zd19vcHMgPSAmYjUzX3N3aXRjaF9vcHMsCisJfSwKKwl7CisJCS5jaGlwX2lkID0gQkNNNTM5N19ERVZJQ0VfSUQsCisJCS5kZXZfbmFtZSA9ICJCQ001Mzk3IiwKKwkJLmFsaWFzID0gImJjbTUzOTciLAorCQkudmxhbnMgPSA0MDk2LAorCQkuZW5hYmxlZF9wb3J0cyA9IDB4MWYsCisJCS5jcHVfcG9ydCA9IEI1M19DUFVfUE9SVCwKKwkJLnZ0YV9yZWdzID0gQjUzX1ZUQV9SRUdTXzk3OTgsCisJCS5kdXBsZXhfcmVnID0gQjUzX0RVUExFWF9TVEFUX0dFLAorCQkuanVtYm9fcG1fcmVnID0gQjUzX0pVTUJPX1BPUlRfTUFTSywKKwkJLmp1bWJvX3NpemVfcmVnID0gQjUzX0pVTUJPX01BWF9TSVpFLAorCQkuc3dfb3BzID0gJmI1M19zd2l0Y2hfb3BzLAorCX0sCisJeworCQkuY2hpcF9pZCA9IEJDTTUzOThfREVWSUNFX0lELAorCQkuZGV2X25hbWUgPSAiQkNNNTM5OCIsCisJCS5hbGlhcyA9ICJiY201Mzk4IiwKKwkJLnZsYW5zID0gNDA5NiwKKwkJLmVuYWJsZWRfcG9ydHMgPSAweDdmLAorCQkuY3B1X3BvcnQgPSBCNTNfQ1BVX1BPUlQsCisJCS52dGFfcmVncyA9IEI1M19WVEFfUkVHU185Nzk4LAorCQkuZHVwbGV4X3JlZyA9IEI1M19EVVBMRVhfU1RBVF9HRSwKKwkJLmp1bWJvX3BtX3JlZyA9IEI1M19KVU1CT19QT1JUX01BU0ssCisJCS5qdW1ib19zaXplX3JlZyA9IEI1M19KVU1CT19NQVhfU0laRSwKKwkJLnN3X29wcyA9ICZiNTNfc3dpdGNoX29wcywKKwl9LAorCXsKKwkJLmNoaXBfaWQgPSBCQ001MzExNV9ERVZJQ0VfSUQsCisJCS5kZXZfbmFtZSA9ICJCQ001MzExNSIsCisJCS5hbGlhcyA9ICJiY201MzExNSIsCisJCS52bGFucyA9IDQwOTYsCisJCS5lbmFibGVkX3BvcnRzID0gMHgxZiwKKwkJLnZ0YV9yZWdzID0gQjUzX1ZUQV9SRUdTLAorCQkuY3B1X3BvcnQgPSBCNTNfQ1BVX1BPUlQsCisJCS5kdXBsZXhfcmVnID0gQjUzX0RVUExFWF9TVEFUX0dFLAorCQkuanVtYm9fcG1fcmVnID0gQjUzX0pVTUJPX1BPUlRfTUFTSywKKwkJLmp1bWJvX3NpemVfcmVnID0gQjUzX0pVTUJPX01BWF9TSVpFLAorCQkuc3dfb3BzID0gJmI1M19zd2l0Y2hfb3BzLAorCX0sCisJeworCQkuY2hpcF9pZCA9IEJDTTUzMTI1X0RFVklDRV9JRCwKKwkJLmRldl9uYW1lID0gIkJDTTUzMTI1IiwKKwkJLmFsaWFzID0gImJjbTUzMTI1IiwKKwkJLnZsYW5zID0gNDA5NiwKKwkJLmVuYWJsZWRfcG9ydHMgPSAweDFmLAorCQkuY3B1X3BvcnQgPSBCNTNfQ1BVX1BPUlQsCisJCS52dGFfcmVncyA9IEI1M19WVEFfUkVHUywKKwkJLmR1cGxleF9yZWcgPSBCNTNfRFVQTEVYX1NUQVRfR0UsCisJCS5qdW1ib19wbV9yZWcgPSBCNTNfSlVNQk9fUE9SVF9NQVNLLAorCQkuanVtYm9fc2l6ZV9yZWcgPSBCNTNfSlVNQk9fTUFYX1NJWkUsCisJCS5zd19vcHMgPSAmYjUzX3N3aXRjaF9vcHMsCisJfSwKKwl7CisJCS5jaGlwX2lkID0gQkNNNTMxMjhfREVWSUNFX0lELAorCQkuZGV2X25hbWUgPSAiQkNNNTMxMjgiLAorCQkuYWxpYXMgPSAiYmNtNTMxMjgiLAorCQkudmxhbnMgPSA0MDk2LAorCQkuZW5hYmxlZF9wb3J0cyA9IDB4MWZmLAorCQkuY3B1X3BvcnQgPSBCNTNfQ1BVX1BPUlQsCisJCS52dGFfcmVncyA9IEI1M19WVEFfUkVHUywKKwkJLmR1cGxleF9yZWcgPSBCNTNfRFVQTEVYX1NUQVRfR0UsCisJCS5qdW1ib19wbV9yZWcgPSBCNTNfSlVNQk9fUE9SVF9NQVNLLAorCQkuanVtYm9fc2l6ZV9yZWcgPSBCNTNfSlVNQk9fTUFYX1NJWkUsCisJCS5zd19vcHMgPSAmYjUzX3N3aXRjaF9vcHMsCisJfSwKKwl7CisJCS5jaGlwX2lkID0gQkNNNjNYWF9ERVZJQ0VfSUQsCisJCS5kZXZfbmFtZSA9ICJCQ002M3h4IiwKKwkJLmFsaWFzID0gImJjbTYzeHgiLAorCQkudmxhbnMgPSA0MDk2LAorCQkuZW5hYmxlZF9wb3J0cyA9IDAsIC8qIHBkYXRhIG11c3QgcHJvdmlkZSB0aGVtICovCisJCS5jcHVfcG9ydCA9IEI1M19DUFVfUE9SVCwKKwkJLnZ0YV9yZWdzID0gQjUzX1ZUQV9SRUdTXzYzWFgsCisJCS5kdXBsZXhfcmVnID0gQjUzX0RVUExFWF9TVEFUXzYzWFgsCisJCS5qdW1ib19wbV9yZWcgPSBCNTNfSlVNQk9fUE9SVF9NQVNLXzYzWFgsCisJCS5qdW1ib19zaXplX3JlZyA9IEI1M19KVU1CT19NQVhfU0laRV82M1hYLAorCQkuc3dfb3BzID0gJmI1M19zd2l0Y2hfb3BzLAorCX0sCisJeworCQkuY2hpcF9pZCA9IEJDTTUzMDEwX0RFVklDRV9JRCwKKwkJLmRldl9uYW1lID0gIkJDTTUzMDEwIiwKKwkJLmFsaWFzID0gImJjbTUzMDExIiwKKwkJLnZsYW5zID0gNDA5NiwKKwkJLmVuYWJsZWRfcG9ydHMgPSAweDFmLAorCQkuY3B1X3BvcnQgPSBCNTNfQ1BVX1BPUlRfMjUsIC8qIFRPRE86IGF1dG8gZGV0ZWN0ICovCisJCS52dGFfcmVncyA9IEI1M19WVEFfUkVHUywKKwkJLmR1cGxleF9yZWcgPSBCNTNfRFVQTEVYX1NUQVRfR0UsCisJCS5qdW1ib19wbV9yZWcgPSBCNTNfSlVNQk9fUE9SVF9NQVNLLAorCQkuanVtYm9fc2l6ZV9yZWcgPSBCNTNfSlVNQk9fTUFYX1NJWkUsCisJCS5zd19vcHMgPSAmYjUzX3N3aXRjaF9vcHMsCisJfSwKKwl7CisJCS5jaGlwX2lkID0gQkNNNTMwMTFfREVWSUNFX0lELAorCQkuZGV2X25hbWUgPSAiQkNNNTMwMTEiLAorCQkuYWxpYXMgPSAiYmNtNTMwMTEiLAorCQkudmxhbnMgPSA0MDk2LAorCQkuZW5hYmxlZF9wb3J0cyA9IDB4MWJmLAorCQkuY3B1X3BvcnQgPSBCNTNfQ1BVX1BPUlRfMjUsIC8qIFRPRE86IGF1dG8gZGV0ZWN0ICovCisJCS52dGFfcmVncyA9IEI1M19WVEFfUkVHUywKKwkJLmR1cGxleF9yZWcgPSBCNTNfRFVQTEVYX1NUQVRfR0UsCisJCS5qdW1ib19wbV9yZWcgPSBCNTNfSlVNQk9fUE9SVF9NQVNLLAorCQkuanVtYm9fc2l6ZV9yZWcgPSBCNTNfSlVNQk9fTUFYX1NJWkUsCisJCS5zd19vcHMgPSAmYjUzX3N3aXRjaF9vcHMsCisJfSwKKwl7CisJCS5jaGlwX2lkID0gQkNNNTMwMTJfREVWSUNFX0lELAorCQkuZGV2X25hbWUgPSAiQkNNNTMwMTIiLAorCQkuYWxpYXMgPSAiYmNtNTMwMTEiLAorCQkudmxhbnMgPSA0MDk2LAorCQkuZW5hYmxlZF9wb3J0cyA9IDB4MWJmLAorCQkuY3B1X3BvcnQgPSBCNTNfQ1BVX1BPUlRfMjUsIC8qIFRPRE86IGF1dG8gZGV0ZWN0ICovCisJCS52dGFfcmVncyA9IEI1M19WVEFfUkVHUywKKwkJLmR1cGxleF9yZWcgPSBCNTNfRFVQTEVYX1NUQVRfR0UsCisJCS5qdW1ib19wbV9yZWcgPSBCNTNfSlVNQk9fUE9SVF9NQVNLLAorCQkuanVtYm9fc2l6ZV9yZWcgPSBCNTNfSlVNQk9fTUFYX1NJWkUsCisJCS5zd19vcHMgPSAmYjUzX3N3aXRjaF9vcHMsCisJfSwKKwl7CisJCS5jaGlwX2lkID0gQkNNNTMwMThfREVWSUNFX0lELAorCQkuZGV2X25hbWUgPSAiQkNNNTMwMTgiLAorCQkuYWxpYXMgPSAiYmNtNTMwMTgiLAorCQkudmxhbnMgPSA0MDk2LAorCQkuZW5hYmxlZF9wb3J0cyA9IDB4MWYsCisJCS5jcHVfcG9ydCA9IEI1M19DUFVfUE9SVF8yNSwgLyogVE9ETzogYXV0byBkZXRlY3QgKi8KKwkJLnZ0YV9yZWdzID0gQjUzX1ZUQV9SRUdTLAorCQkuZHVwbGV4X3JlZyA9IEI1M19EVVBMRVhfU1RBVF9HRSwKKwkJLmp1bWJvX3BtX3JlZyA9IEI1M19KVU1CT19QT1JUX01BU0ssCisJCS5qdW1ib19zaXplX3JlZyA9IEI1M19KVU1CT19NQVhfU0laRSwKKwkJLnN3X29wcyA9ICZiNTNfc3dpdGNoX29wcywKKwl9LAorCXsKKwkJLmNoaXBfaWQgPSBCQ001MzAxOV9ERVZJQ0VfSUQsCisJCS5kZXZfbmFtZSA9ICJCQ001MzAxOSIsCisJCS5hbGlhcyA9ICJiY201MzAxOSIsCisJCS52bGFucyA9IDQwOTYsCisJCS5lbmFibGVkX3BvcnRzID0gMHgxZiwKKwkJLmNwdV9wb3J0ID0gQjUzX0NQVV9QT1JUXzI1LCAvKiBUT0RPOiBhdXRvIGRldGVjdCAqLworCQkudnRhX3JlZ3MgPSBCNTNfVlRBX1JFR1MsCisJCS5kdXBsZXhfcmVnID0gQjUzX0RVUExFWF9TVEFUX0dFLAorCQkuanVtYm9fcG1fcmVnID0gQjUzX0pVTUJPX1BPUlRfTUFTSywKKwkJLmp1bWJvX3NpemVfcmVnID0gQjUzX0pVTUJPX01BWF9TSVpFLAorCQkuc3dfb3BzID0gJmI1M19zd2l0Y2hfb3BzLAorCX0sCit9OworCitzdGF0aWMgaW50IGI1M19zd2l0Y2hfaW5pdF9vZihzdHJ1Y3QgYjUzX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sICpwbjsKKwljb25zdCBjaGFyICphbGlhczsKKwl1MzIgcG9ydF9udW07CisJdTE2IHBvcnRzID0gMDsKKworCWRuID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZGV2X29mX25vZGUoZGV2LT5kZXYpLCAicG9ydHMiKTsKKwlpZiAoIWRuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKGRuLCBwbikgeworCQljb25zdCBjaGFyICpsYWJlbDsKKwkJaW50IGxlbjsKKworCQlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIocG4sICJyZWciLCAmcG9ydF9udW0pKQorCQkJY29udGludWU7CisKKwkJaWYgKHBvcnRfbnVtID4gQjUzX0NQVV9QT1JUKQorCQkJY29udGludWU7CisKKwkJcG9ydHMgfD0gQklUKHBvcnRfbnVtKTsKKworCQlsYWJlbCA9IG9mX2dldF9wcm9wZXJ0eShwbiwgImxhYmVsIiwgJmxlbik7CisJCWlmIChsYWJlbCAmJiAhc3RyY21wKGxhYmVsLCAiY3B1IikpCisJCQlkZXYtPnN3X2Rldi5jcHVfcG9ydCA9IHBvcnRfbnVtOworCX0KKworCWRldi0+ZW5hYmxlZF9wb3J0cyA9IHBvcnRzOworCisJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhkZXZfb2Zfbm9kZShkZXYtPmRldiksICJsZWRlLGFsaWFzIiwKKwkJCQkJCSAmYWxpYXMpKQorCQlkZXYtPnN3X2Rldi5hbGlhcyA9IGRldm1fa3N0cmR1cChkZXYtPmRldiwgYWxpYXMsIEdGUF9LRVJORUwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYjUzX3N3aXRjaF9pbml0KHN0cnVjdCBiNTNfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHN3aXRjaF9kZXYgKnN3X2RldiA9ICZkZXYtPnN3X2RldjsKKwl1bnNpZ25lZCBpOworCWludCByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShiNTNfc3dpdGNoX2NoaXBzKTsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBiNTNfY2hpcF9kYXRhICpjaGlwID0gJmI1M19zd2l0Y2hfY2hpcHNbaV07CisKKwkJaWYgKGNoaXAtPmNoaXBfaWQgPT0gZGV2LT5jaGlwX2lkKSB7CisJCQlzd19kZXYtPm5hbWUgPSBjaGlwLT5kZXZfbmFtZTsKKwkJCWlmICghc3dfZGV2LT5hbGlhcykKKwkJCQlzd19kZXYtPmFsaWFzID0gY2hpcC0+YWxpYXM7CisJCQlpZiAoIWRldi0+ZW5hYmxlZF9wb3J0cykKKwkJCQlkZXYtPmVuYWJsZWRfcG9ydHMgPSBjaGlwLT5lbmFibGVkX3BvcnRzOworCQkJZGV2LT5kdXBsZXhfcmVnID0gY2hpcC0+ZHVwbGV4X3JlZzsKKwkJCWRldi0+dnRhX3JlZ3NbMF0gPSBjaGlwLT52dGFfcmVnc1swXTsKKwkJCWRldi0+dnRhX3JlZ3NbMV0gPSBjaGlwLT52dGFfcmVnc1sxXTsKKwkJCWRldi0+dnRhX3JlZ3NbMl0gPSBjaGlwLT52dGFfcmVnc1syXTsKKwkJCWRldi0+anVtYm9fcG1fcmVnID0gY2hpcC0+anVtYm9fcG1fcmVnOworCQkJc3dfZGV2LT5vcHMgPSBjaGlwLT5zd19vcHM7CisJCQlzd19kZXYtPmNwdV9wb3J0ID0gY2hpcC0+Y3B1X3BvcnQ7CisJCQlzd19kZXYtPnZsYW5zID0gY2hpcC0+dmxhbnM7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghc3dfZGV2LT5uYW1lKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGNoZWNrIHdoaWNoIEJDTTUzMjV4IHZlcnNpb24gd2UgaGF2ZSAqLworCWlmIChpczUzMjUoZGV2KSkgeworCQl1OCB2YzQ7CisKKwkJYjUzX3JlYWQ4KGRldiwgQjUzX1ZMQU5fUEFHRSwgQjUzX1ZMQU5fQ1RSTDRfMjUsICZ2YzQpOworCisJCS8qIGNoZWNrIHJlc2VydmVkIGJpdHMgKi8KKwkJc3dpdGNoICh2YzQgJiAzKSB7CisJCWNhc2UgMToKKwkJCS8qIEJDTTUzMjVFICovCisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJLyogQkNNNTMyNUYgLSBkbyBub3QgdXNlIHBvcnQgNCAqLworCQkJZGV2LT5lbmFibGVkX3BvcnRzICY9IH5CSVQoNCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKy8qIE9uIHRoZSBCQ000N1hYIFNvQ3MgdGhpcyBpcyB0aGUgc3VwcG9ydGVkIGludGVybmFsIHN3aXRjaC4qLworI2lmbmRlZiBDT05GSUdfQkNNNDdYWAorCQkJLyogQkNNNTMyNU0gKi8KKwkJCXJldHVybiAtRUlOVkFMOworI2Vsc2UKKwkJCWJyZWFrOworI2VuZGlmCisJCX0KKwl9IGVsc2UgaWYgKGRldi0+Y2hpcF9pZCA9PSBCQ001MzExNV9ERVZJQ0VfSUQpIHsKKwkJdTY0IHN0cmFwX3ZhbHVlOworCisJCWI1M19yZWFkNDgoZGV2LCBCNTNfU1RBVF9QQUdFLCBCNTNfU1RSQVBfVkFMVUUsICZzdHJhcF92YWx1ZSk7CisJCS8qIHVzZSBzZWNvbmQgSU1QIHBvcnQgaWYgR01JSSBpcyBlbmFibGVkICovCisJCWlmIChzdHJhcF92YWx1ZSAmIFNWX0dNSUlfQ1RSTF8xMTUpCisJCQlzd19kZXYtPmNwdV9wb3J0ID0gNTsKKwl9CisKKwlpZiAoZGV2X29mX25vZGUoZGV2LT5kZXYpKSB7CisJCXJldCA9IGI1M19zd2l0Y2hfaW5pdF9vZihkZXYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlkZXYtPmVuYWJsZWRfcG9ydHMgfD0gQklUKHN3X2Rldi0+Y3B1X3BvcnQpOworCXN3X2Rldi0+cG9ydHMgPSBmbHMoZGV2LT5lbmFibGVkX3BvcnRzKTsKKworCWRldi0+cG9ydHMgPSBkZXZtX2t6YWxsb2MoZGV2LT5kZXYsCisJCQkJICBzaXplb2Yoc3RydWN0IGI1M19wb3J0KSAqIHN3X2Rldi0+cG9ydHMsCisJCQkJICBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+cG9ydHMpCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2LT52bGFucyA9IGRldm1fa3phbGxvYyhkZXYtPmRldiwKKwkJCQkgIHNpemVvZihzdHJ1Y3QgYjUzX3ZsYW4pICogc3dfZGV2LT52bGFucywKKwkJCQkgIEdGUF9LRVJORUwpOworCWlmICghZGV2LT52bGFucykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkZXYtPmJ1ZiA9IGRldm1fa3phbGxvYyhkZXYtPmRldiwgQjUzX0JVRl9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+YnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldi0+cmVzZXRfZ3BpbyA9IGI1M19zd2l0Y2hfZ2V0X3Jlc2V0X2dwaW8oZGV2KTsKKwlpZiAoZGV2LT5yZXNldF9ncGlvID49IDApIHsKKwkJcmV0ID0gZGV2bV9ncGlvX3JlcXVlc3Rfb25lKGRldi0+ZGV2LCBkZXYtPnJlc2V0X2dwaW8sCisJCQkJCSAgICBHUElPRl9PVVRfSU5JVF9ISUdILCAicm9ib19yZXNldCIpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gYjUzX3N3aXRjaF9yZXNldChkZXYpOworfQorCitzdHJ1Y3QgYjUzX2RldmljZSAqYjUzX3N3aXRjaF9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpiYXNlLCBzdHJ1Y3QgYjUzX2lvX29wcyAqb3BzLAorCQkJCSAgICB2b2lkICpwcml2KQoreworCXN0cnVjdCBiNTNfZGV2aWNlICpkZXY7CisKKwlkZXYgPSBkZXZtX2t6YWxsb2MoYmFzZSwgc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIE5VTEw7CisKKwlkZXYtPmRldiA9IGJhc2U7CisJZGV2LT5vcHMgPSBvcHM7CisJZGV2LT5wcml2ID0gcHJpdjsKKwltdXRleF9pbml0KCZkZXYtPnJlZ19tdXRleCk7CisKKwlyZXR1cm4gZGV2OworfQorRVhQT1JUX1NZTUJPTChiNTNfc3dpdGNoX2FsbG9jKTsKKworaW50IGI1M19zd2l0Y2hfZGV0ZWN0KHN0cnVjdCBiNTNfZGV2aWNlICpkZXYpCit7CisJdTMyIGlkMzI7CisJdTE2IHRtcDsKKwl1OCBpZDg7CisJaW50IHJldDsKKworCXJldCA9IGI1M19yZWFkOChkZXYsIEI1M19NR01UX1BBR0UsIEI1M19ERVZJQ0VfSUQsICZpZDgpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzd2l0Y2ggKGlkOCkgeworCWNhc2UgMDoKKwkJLyoKKwkJICogQkNNNTMyNSBhbmQgQkNNNTM2NSBkbyBub3QgaGF2ZSB0aGlzIHJlZ2lzdGVyIHNvIHJlYWRzCisJCSAqIHJldHVybiAwLiBCdXQgdGhlIHJlYWQgb3BlcmF0aW9uIGRpZCBzdWNjZWVkLCBzbyBhc3N1bWUKKwkJICogdGhpcyBpcyBvbmUgb2YgdGhlbS4KKwkJICoKKwkJICogTmV4dCBjaGVjayBpZiB3ZSBjYW4gd3JpdGUgdG8gdGhlIDUzMjUncyBWVEEgcmVnaXN0ZXI7IGZvcgorCQkgKiA1MzY1IGl0IGlzIHJlYWQgb25seS4KKwkJICovCisKKwkJYjUzX3dyaXRlMTYoZGV2LCBCNTNfVkxBTl9QQUdFLCBCNTNfVkxBTl9UQUJMRV9BQ0NFU1NfMjUsIDB4Zik7CisJCWI1M19yZWFkMTYoZGV2LCBCNTNfVkxBTl9QQUdFLCBCNTNfVkxBTl9UQUJMRV9BQ0NFU1NfMjUsICZ0bXApOworCisJCWlmICh0bXAgPT0gMHhmKQorCQkJZGV2LT5jaGlwX2lkID0gQkNNNTMyNV9ERVZJQ0VfSUQ7CisJCWVsc2UKKwkJCWRldi0+Y2hpcF9pZCA9IEJDTTUzNjVfREVWSUNFX0lEOworCQlicmVhazsKKwljYXNlIEJDTTUzOTVfREVWSUNFX0lEOgorCWNhc2UgQkNNNTM5N19ERVZJQ0VfSUQ6CisJY2FzZSBCQ001Mzk4X0RFVklDRV9JRDoKKwkJZGV2LT5jaGlwX2lkID0gaWQ4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSBiNTNfcmVhZDMyKGRldiwgQjUzX01HTVRfUEFHRSwgQjUzX0RFVklDRV9JRCwgJmlkMzIpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlzd2l0Y2ggKGlkMzIpIHsKKwkJY2FzZSBCQ001MzExNV9ERVZJQ0VfSUQ6CisJCWNhc2UgQkNNNTMxMjVfREVWSUNFX0lEOgorCQljYXNlIEJDTTUzMTI4X0RFVklDRV9JRDoKKwkJY2FzZSBCQ001MzAxMF9ERVZJQ0VfSUQ6CisJCWNhc2UgQkNNNTMwMTFfREVWSUNFX0lEOgorCQljYXNlIEJDTTUzMDEyX0RFVklDRV9JRDoKKwkJY2FzZSBCQ001MzAxOF9ERVZJQ0VfSUQ6CisJCWNhc2UgQkNNNTMwMTlfREVWSUNFX0lEOgorCQkJZGV2LT5jaGlwX2lkID0gaWQzMjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJfZXJyKCJ1bnN1cHBvcnRlZCBzd2l0Y2ggZGV0ZWN0ZWQgKEJDTTUzJTAyeC9CQ00leClcbiIsCisJCQkgICAgICAgaWQ4LCBpZDMyKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJfQorCisJaWYgKGRldi0+Y2hpcF9pZCA9PSBCQ001MzI1X0RFVklDRV9JRCkKKwkJcmV0dXJuIGI1M19yZWFkOChkZXYsIEI1M19TVEFUX1BBR0UsIEI1M19SRVZfSURfMjUsCisJCQkJICZkZXYtPmNvcmVfcmV2KTsKKwllbHNlCisJCXJldHVybiBiNTNfcmVhZDgoZGV2LCBCNTNfTUdNVF9QQUdFLCBCNTNfUkVWX0lELAorCQkJCSAmZGV2LT5jb3JlX3Jldik7Cit9CitFWFBPUlRfU1lNQk9MKGI1M19zd2l0Y2hfZGV0ZWN0KTsKKworaW50IGI1M19zd2l0Y2hfcmVnaXN0ZXIoc3RydWN0IGI1M19kZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCisJaWYgKGRldi0+cGRhdGEpIHsKKwkJZGV2LT5jaGlwX2lkID0gZGV2LT5wZGF0YS0+Y2hpcF9pZDsKKwkJZGV2LT5lbmFibGVkX3BvcnRzID0gZGV2LT5wZGF0YS0+ZW5hYmxlZF9wb3J0czsKKwkJZGV2LT5zd19kZXYuYWxpYXMgPSBkZXYtPnBkYXRhLT5hbGlhczsKKwl9CisKKwlpZiAoIWRldi0+Y2hpcF9pZCAmJiBiNTNfc3dpdGNoX2RldGVjdChkZXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IGI1M19zd2l0Y2hfaW5pdChkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlwcl9pbmZvKCJmb3VuZCBzd2l0Y2g6ICVzLCByZXYgJWlcbiIsIGRldi0+c3dfZGV2Lm5hbWUsIGRldi0+Y29yZV9yZXYpOworCisJcmV0dXJuIHJlZ2lzdGVyX3N3aXRjaCgmZGV2LT5zd19kZXYsIE5VTEwpOworfQorRVhQT1JUX1NZTUJPTChiNTNfc3dpdGNoX3JlZ2lzdGVyKTsKKworTU9EVUxFX0FVVEhPUigiSm9uYXMgR29yc2tpIDxqb2dvQG9wZW53cnQub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJCNTMgc3dpdGNoIGxpYnJhcnkiKTsKK01PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9iNTMvYjUzX21kaW8uYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9iNTMvYjUzX21kaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGNkYmZmCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9uZXQvcGh5L2I1My9iNTNfbWRpby5jCkBAIC0wLDAgKzEsNDY4IEBACisvKgorICogQjUzIHJlZ2lzdGVyIGFjY2VzcyB0aHJvdWdoIE1JSSByZWdpc3RlcnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBKb25hcyBHb3Jza2kgPGpvZ29Ab3BlbndydC5vcmc+CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSAiYjUzX3ByaXYuaCIKKworI2RlZmluZSBCNTNfUFNFVURPX1BIWQkweDFlIC8qIFJlZ2lzdGVyIEFjY2VzcyBQc2V1ZG8gUEhZICovCisKKy8qIE1JSSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUkVHX01JSV9QQUdFICAgIDB4MTAgICAgLyogTUlJIFBhZ2UgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX01JSV9BRERSICAgIDB4MTEgICAgLyogTUlJIEFkZHJlc3MgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX01JSV9EQVRBMCAgIDB4MTggICAgLyogTUlJIERhdGEgcmVnaXN0ZXIgMCAqLworI2RlZmluZSBSRUdfTUlJX0RBVEExICAgMHgxOSAgICAvKiBNSUkgRGF0YSByZWdpc3RlciAxICovCisjZGVmaW5lIFJFR19NSUlfREFUQTIgICAweDFhICAgIC8qIE1JSSBEYXRhIHJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgUkVHX01JSV9EQVRBMyAgIDB4MWIgICAgLyogTUlJIERhdGEgcmVnaXN0ZXIgMyAqLworCisjZGVmaW5lIFJFR19NSUlfUEFHRV9FTkFCTEUgICAgIEJJVCgwKQorI2RlZmluZSBSRUdfTUlJX0FERFJfV1JJVEUgICAgICBCSVQoMCkKKyNkZWZpbmUgUkVHX01JSV9BRERSX1JFQUQgICAgICAgQklUKDEpCisKK3N0YXRpYyBpbnQgYjUzX21kaW9fb3Aoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgdTggcGFnZSwgdTggcmVnLCB1MTYgb3ApCit7CisJaW50IGk7CisJdTE2IHY7CisJaW50IHJldDsKKwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gZGV2LT5wcml2OworCisJaWYgKGRldi0+Y3VycmVudF9wYWdlICE9IHBhZ2UpIHsKKwkJLyogc2V0IHBhZ2UgbnVtYmVyICovCisJCXYgPSAocGFnZSA8PCA4KSB8IFJFR19NSUlfUEFHRV9FTkFCTEU7CisJCXJldCA9IG1kaW9idXNfd3JpdGUoYnVzLCBCNTNfUFNFVURPX1BIWSwgUkVHX01JSV9QQUdFLCB2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCWRldi0+Y3VycmVudF9wYWdlID0gcGFnZTsKKwl9CisKKwkvKiBzZXQgcmVnaXN0ZXIgYWRkcmVzcyAqLworCXYgPSAocmVnIDw8IDgpIHwgb3A7CisJcmV0ID0gbWRpb2J1c193cml0ZShidXMsIEI1M19QU0VVRE9fUEhZLCBSRUdfTUlJX0FERFIsIHYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBjaGVjayBpZiBvcGVyYXRpb24gY29tcGxldGVkICovCisJZm9yIChpID0gMDsgaSA8IDU7ICsraSkgeworCQl2ID0gbWRpb2J1c19yZWFkKGJ1cywgQjUzX1BTRVVET19QSFksIFJFR19NSUlfQUREUik7CisJCWlmICghKHYgJiAoUkVHX01JSV9BRERSX1dSSVRFIHwgUkVHX01JSV9BRERSX1JFQUQpKSkKKwkJCWJyZWFrOworCQl1c2xlZXBfcmFuZ2UoMTAsIDEwMCk7CisJfQorCisJaWYgKFdBUk5fT04oaSA9PSA1KSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiNTNfbWRpb19yZWFkOChzdHJ1Y3QgYjUzX2RldmljZSAqZGV2LCB1OCBwYWdlLCB1OCByZWcsIHU4ICp2YWwpCit7CisJc3RydWN0IG1paV9idXMgKmJ1cyA9IGRldi0+cHJpdjsKKwlpbnQgcmV0OworCisJcmV0ID0gYjUzX21kaW9fb3AoZGV2LCBwYWdlLCByZWcsIFJFR19NSUlfQUREUl9SRUFEKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJKnZhbCA9IG1kaW9idXNfcmVhZChidXMsIEI1M19QU0VVRE9fUEhZLCBSRUdfTUlJX0RBVEEwKSAmIDB4ZmY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiNTNfbWRpb19yZWFkMTYoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgdTggcGFnZSwgdTggcmVnLCB1MTYgKnZhbCkKK3sKKwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gZGV2LT5wcml2OworCWludCByZXQ7CisKKwlyZXQgPSBiNTNfbWRpb19vcChkZXYsIHBhZ2UsIHJlZywgUkVHX01JSV9BRERSX1JFQUQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkqdmFsID0gbWRpb2J1c19yZWFkKGJ1cywgQjUzX1BTRVVET19QSFksIFJFR19NSUlfREFUQTApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYjUzX21kaW9fcmVhZDMyKHN0cnVjdCBiNTNfZGV2aWNlICpkZXYsIHU4IHBhZ2UsIHU4IHJlZywgdTMyICp2YWwpCit7CisJc3RydWN0IG1paV9idXMgKmJ1cyA9IGRldi0+cHJpdjsKKwlpbnQgcmV0OworCisJcmV0ID0gYjUzX21kaW9fb3AoZGV2LCBwYWdlLCByZWcsIFJFR19NSUlfQUREUl9SRUFEKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJKnZhbCA9IG1kaW9idXNfcmVhZChidXMsIEI1M19QU0VVRE9fUEhZLCBSRUdfTUlJX0RBVEEwKTsKKwkqdmFsIHw9IG1kaW9idXNfcmVhZChidXMsIEI1M19QU0VVRE9fUEhZLCBSRUdfTUlJX0RBVEExKSA8PCAxNjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGI1M19tZGlvX3JlYWQ0OChzdHJ1Y3QgYjUzX2RldmljZSAqZGV2LCB1OCBwYWdlLCB1OCByZWcsIHU2NCAqdmFsKQoreworCXN0cnVjdCBtaWlfYnVzICpidXMgPSBkZXYtPnByaXY7CisJdTY0IHRlbXAgPSAwOworCWludCBpOworCWludCByZXQ7CisKKwlyZXQgPSBiNTNfbWRpb19vcChkZXYsIHBhZ2UsIHJlZywgUkVHX01JSV9BRERSX1JFQUQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmb3IgKGkgPSAyOyBpID49IDA7IGktLSkgeworCQl0ZW1wIDw8PSAxNjsKKwkJdGVtcCB8PSBtZGlvYnVzX3JlYWQoYnVzLCBCNTNfUFNFVURPX1BIWSwgUkVHX01JSV9EQVRBMCArIGkpOworCX0KKworCSp2YWwgPSB0ZW1wOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYjUzX21kaW9fcmVhZDY0KHN0cnVjdCBiNTNfZGV2aWNlICpkZXYsIHU4IHBhZ2UsIHU4IHJlZywgdTY0ICp2YWwpCit7CisJc3RydWN0IG1paV9idXMgKmJ1cyA9IGRldi0+cHJpdjsKKwl1NjQgdGVtcCA9IDA7CisJaW50IGk7CisJaW50IHJldDsKKworCXJldCA9IGI1M19tZGlvX29wKGRldiwgcGFnZSwgcmVnLCBSRUdfTUlJX0FERFJfUkVBRCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWZvciAoaSA9IDM7IGkgPj0gMDsgaS0tKSB7CisJCXRlbXAgPDw9IDE2OworCQl0ZW1wIHw9IG1kaW9idXNfcmVhZChidXMsIEI1M19QU0VVRE9fUEhZLCBSRUdfTUlJX0RBVEEwICsgaSk7CisJfQorCisJKnZhbCA9IHRlbXA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiNTNfbWRpb193cml0ZTgoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgdTggcGFnZSwgdTggcmVnLCB1OCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gZGV2LT5wcml2OworCWludCByZXQ7CisKKwlyZXQgPSBtZGlvYnVzX3dyaXRlKGJ1cywgQjUzX1BTRVVET19QSFksIFJFR19NSUlfREFUQTAsIHZhbHVlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIGI1M19tZGlvX29wKGRldiwgcGFnZSwgcmVnLCBSRUdfTUlJX0FERFJfV1JJVEUpOworfQorCitzdGF0aWMgaW50IGI1M19tZGlvX3dyaXRlMTYoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgdTggcGFnZSwgdTggcmVnLAorCQkJICAgICB1MTYgdmFsdWUpCit7CisJc3RydWN0IG1paV9idXMgKmJ1cyA9IGRldi0+cHJpdjsKKwlpbnQgcmV0OworCisJcmV0ID0gbWRpb2J1c193cml0ZShidXMsIEI1M19QU0VVRE9fUEhZLCBSRUdfTUlJX0RBVEEwLCB2YWx1ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBiNTNfbWRpb19vcChkZXYsIHBhZ2UsIHJlZywgUkVHX01JSV9BRERSX1dSSVRFKTsKK30KKworc3RhdGljIGludCBiNTNfbWRpb193cml0ZTMyKHN0cnVjdCBiNTNfZGV2aWNlICpkZXYsIHU4IHBhZ2UsIHU4IHJlZywKKwkJCQkgICAgdTMyIHZhbHVlKQoreworCXN0cnVjdCBtaWlfYnVzICpidXMgPSBkZXYtPnByaXY7CisJdW5zaWduZWQgaW50IGk7CisJdTMyIHRlbXAgPSB2YWx1ZTsKKworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJaW50IHJldCA9IG1kaW9idXNfd3JpdGUoYnVzLCBCNTNfUFNFVURPX1BIWSwgUkVHX01JSV9EQVRBMCArIGksCisJCQkJICAgIHRlbXAgJiAweGZmZmYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJdGVtcCA+Pj0gMTY7CisJfQorCisJcmV0dXJuIGI1M19tZGlvX29wKGRldiwgcGFnZSwgcmVnLCBSRUdfTUlJX0FERFJfV1JJVEUpOworCit9CisKK3N0YXRpYyBpbnQgYjUzX21kaW9fd3JpdGU0OChzdHJ1Y3QgYjUzX2RldmljZSAqZGV2LCB1OCBwYWdlLCB1OCByZWcsCisJCQkJICAgIHU2NCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gZGV2LT5wcml2OworCXVuc2lnbmVkIGk7CisJdTY0IHRlbXAgPSB2YWx1ZTsKKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJaW50IHJldCA9IG1kaW9idXNfd3JpdGUoYnVzLCBCNTNfUFNFVURPX1BIWSwgUkVHX01JSV9EQVRBMCArIGksCisJCQkJICAgIHRlbXAgJiAweGZmZmYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJdGVtcCA+Pj0gMTY7CisJfQorCisJcmV0dXJuIGI1M19tZGlvX29wKGRldiwgcGFnZSwgcmVnLCBSRUdfTUlJX0FERFJfV1JJVEUpOworCit9CisKK3N0YXRpYyBpbnQgYjUzX21kaW9fd3JpdGU2NChzdHJ1Y3QgYjUzX2RldmljZSAqZGV2LCB1OCBwYWdlLCB1OCByZWcsCisJCQkgICAgIHU2NCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gZGV2LT5wcml2OworCXVuc2lnbmVkIGk7CisJdTY0IHRlbXAgPSB2YWx1ZTsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJaW50IHJldCA9IG1kaW9idXNfd3JpdGUoYnVzLCBCNTNfUFNFVURPX1BIWSwgUkVHX01JSV9EQVRBMCArIGksCisJCQkJICAgIHRlbXAgJiAweGZmZmYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJdGVtcCA+Pj0gMTY7CisJfQorCisJcmV0dXJuIGI1M19tZGlvX29wKGRldiwgcGFnZSwgcmVnLCBSRUdfTUlJX0FERFJfV1JJVEUpOworfQorCitzdGF0aWMgaW50IGI1M19tZGlvX3BoeV9yZWFkMTYoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgaW50IGFkZHIsIHU4IHJlZywKKwkJCSAgICAgICB1MTYgKnZhbHVlKQoreworCXN0cnVjdCBtaWlfYnVzICpidXMgPSBkZXYtPnByaXY7CisKKwkqdmFsdWUgPSBtZGlvYnVzX3JlYWQoYnVzLCBhZGRyLCByZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYjUzX21kaW9fcGh5X3dyaXRlMTYoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgaW50IGFkZHIsIHU4IHJlZywKKwkJCQl1MTYgdmFsdWUpCit7CisJc3RydWN0IG1paV9idXMgKmJ1cyA9IGRldi0+cHJpdjsKKworCXJldHVybiBtZGlvYnVzX3dyaXRlKGJ1cywgYWRkciwgcmVnLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYjUzX2lvX29wcyBiNTNfbWRpb19vcHMgPSB7CisJLnJlYWQ4ID0gYjUzX21kaW9fcmVhZDgsCisJLnJlYWQxNiA9IGI1M19tZGlvX3JlYWQxNiwKKwkucmVhZDMyID0gYjUzX21kaW9fcmVhZDMyLAorCS5yZWFkNDggPSBiNTNfbWRpb19yZWFkNDgsCisJLnJlYWQ2NCA9IGI1M19tZGlvX3JlYWQ2NCwKKwkud3JpdGU4ID0gYjUzX21kaW9fd3JpdGU4LAorCS53cml0ZTE2ID0gYjUzX21kaW9fd3JpdGUxNiwKKwkud3JpdGUzMiA9IGI1M19tZGlvX3dyaXRlMzIsCisJLndyaXRlNDggPSBiNTNfbWRpb193cml0ZTQ4LAorCS53cml0ZTY0ID0gYjUzX21kaW9fd3JpdGU2NCwKKwkucGh5X3JlYWQxNiA9IGI1M19tZGlvX3BoeV9yZWFkMTYsCisJLnBoeV93cml0ZTE2ID0gYjUzX21kaW9fcGh5X3dyaXRlMTYsCit9OworCitzdGF0aWMgaW50IGI1M19waHlfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKK3sKKwlzdHJ1Y3QgYjUzX2RldmljZSAqZGV2OworCWludCByZXQ7CisKKwkvKiBhbGxvdyB0aGUgZ2VuZXJpYyBwaHkgZHJpdmVyIHRvIHRha2Ugb3ZlciAqLworCWlmIChwaHlkZXYtPm1kaW8uYWRkciAhPSBCNTNfUFNFVURPX1BIWSAmJiBwaHlkZXYtPm1kaW8uYWRkciAhPSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRldiA9IGI1M19zd2l0Y2hfYWxsb2MoJnBoeWRldi0+bWRpby5kZXYsICZiNTNfbWRpb19vcHMsIHBoeWRldi0+bWRpby5idXMpOworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldi0+Y3VycmVudF9wYWdlID0gMHhmZjsKKwlkZXYtPnByaXYgPSBwaHlkZXYtPm1kaW8uYnVzOworCWRldi0+b3BzID0gJmI1M19tZGlvX29wczsKKwlkZXYtPnBkYXRhID0gTlVMTDsKKwltdXRleF9pbml0KCZkZXYtPnJlZ19tdXRleCk7CisKKwlyZXQgPSBiNTNfc3dpdGNoX2RldGVjdChkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlsaW5rbW9kZV96ZXJvKHBoeWRldi0+c3VwcG9ydGVkKTsKKwlpZiAoaXM1MzI1KGRldikgfHwgaXM1MzY1KGRldikpCisJCWxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwYmFzZVRfRnVsbF9CSVQsIHBoeWRldi0+c3VwcG9ydGVkKTsKKwllbHNlCisJCWxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwMGJhc2VUX0Z1bGxfQklULCBwaHlkZXYtPnN1cHBvcnRlZCk7CisKKwlsaW5rbW9kZV9jb3B5KHBoeWRldi0+YWR2ZXJ0aXNpbmcsIHBoeWRldi0+c3VwcG9ydGVkKTsKKworCXJldCA9IGI1M19zd2l0Y2hfcmVnaXN0ZXIoZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgc3dpdGNoOiAlaVxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwaHlkZXYtPnByaXYgPSBkZXY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiNTNfcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCit7CisJc3RydWN0IGI1M19kZXZpY2UgKmRldiA9IHBoeWRldi0+cHJpdjsKKworCS8qIHdlIGRvbid0IHVzZSBwYWdlIDB4ZmYsIHNvIGZvcmNlIGEgcGFnZSBzZXQgKi8KKwlkZXYtPmN1cnJlbnRfcGFnZSA9IDB4ZmY7CisJLyogZm9yY2UgdGhlIGV0aFggYXMgYWxpYXMgKi8KKwlkZXYtPnN3X2Rldi5hbGlhcyA9IHBoeWRldi0+YXR0YWNoZWRfZGV2LT5uYW1lOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGI1M19waHlfcmVtb3ZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCit7CisJc3RydWN0IGI1M19kZXZpY2UgKnByaXYgPSBwaHlkZXYtPnByaXY7CisKKwlpZiAoIXByaXYpCisJCXJldHVybjsKKworCWI1M19zd2l0Y2hfcmVtb3ZlKHByaXYpOworCisJcGh5ZGV2LT5wcml2ID0gTlVMTDsKK30KKworc3RhdGljIGludCBiNTNfcGh5X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYjUzX3BoeV9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQoreworCXN0cnVjdCBiNTNfZGV2aWNlICpwcml2ID0gcGh5ZGV2LT5wcml2OworCisJaWYgKGlzNTMyNShwcml2KSB8fCBpczUzNjUocHJpdikpCisJCXBoeWRldi0+c3BlZWQgPSAxMDA7CisJZWxzZQorCQlwaHlkZXYtPnNwZWVkID0gMTAwMDsKKworCXBoeWRldi0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJcGh5ZGV2LT5saW5rID0gMTsKKwlwaHlkZXYtPnN0YXRlID0gUEhZX1JVTk5JTkc7CisKKwluZXRpZl9jYXJyaWVyX29uKHBoeWRldi0+YXR0YWNoZWRfZGV2KTsKKwlwaHlkZXYtPmFkanVzdF9saW5rKHBoeWRldi0+YXR0YWNoZWRfZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBiNTNfb2ZfbWF0Y2hfMVtdID0geworCXsgLmNvbXBhdGlibGUgPSAiYnJjbSxiY201MzI1IiB9LAorCXsgLmNvbXBhdGlibGUgPSAiYnJjbSxiY201Mzk1IiB9LAorCXsgLmNvbXBhdGlibGUgPSAiYnJjbSxiY201Mzk3IiB9LAorCXsgLmNvbXBhdGlibGUgPSAiYnJjbSxiY201Mzk4IiB9LAorCXsgLyogc2VudGluZWwgKi8gfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGI1M19vZl9tYXRjaF8yW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJicmNtLGJjbTUzMTE1IiB9LAorCXsgLmNvbXBhdGlibGUgPSAiYnJjbSxiY201MzEyNSIgfSwKKwl7IC5jb21wYXRpYmxlID0gImJyY20sYmNtNTMxMjgiIH0sCisJeyAvKiBzZW50aW5lbCAqLyB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYjUzX29mX21hdGNoXzNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImJyY20sYmNtNTM2NSIgfSwKKwl7IC8qIHNlbnRpbmVsICovIH0sCit9OworCisvKiBCQ001MzI1LCBCQ001Mzl4ICovCitzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYjUzX3BoeV9kcml2ZXJfaWQxID0geworCS5waHlfaWQJCT0gMHgwMTQzYmMwMCwKKwkubmFtZQkJPSAiQnJvYWRjb20gQjUzICgxKSIsCisJLnBoeV9pZF9tYXNrCT0gMHgxZmZmZmMwMCwKKwkuZmVhdHVyZXMJPSAwLAorCS5wcm9iZQkJPSBiNTNfcGh5X3Byb2JlLAorCS5yZW1vdmUJCT0gYjUzX3BoeV9yZW1vdmUsCisJLmNvbmZpZ19hbmVnCT0gYjUzX3BoeV9jb25maWdfYW5lZywKKwkuY29uZmlnX2luaXQJPSBiNTNfcGh5X2NvbmZpZ19pbml0LAorCS5yZWFkX3N0YXR1cwk9IGI1M19waHlfcmVhZF9zdGF0dXMsCisJLm1kaW9kcnYuZHJpdmVyID0geworCQkubmFtZSA9ICJiY201Mzl4IiwKKwkJLm9mX21hdGNoX3RhYmxlID0gYjUzX29mX21hdGNoXzEsCisJfSwKK307CisKKy8qIEJDTTUzMTI1LCBCQ001MzEyOCAqLworc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGI1M19waHlfZHJpdmVyX2lkMiA9IHsKKwkucGh5X2lkCQk9IDB4MDM2MjVjMDAsCisJLm5hbWUJCT0gIkJyb2FkY29tIEI1MyAoMikiLAorCS5waHlfaWRfbWFzawk9IDB4MWZmZmZjMDAsCisJLmZlYXR1cmVzCT0gMCwKKwkucHJvYmUJCT0gYjUzX3BoeV9wcm9iZSwKKwkucmVtb3ZlCQk9IGI1M19waHlfcmVtb3ZlLAorCS5jb25maWdfYW5lZwk9IGI1M19waHlfY29uZmlnX2FuZWcsCisJLmNvbmZpZ19pbml0CT0gYjUzX3BoeV9jb25maWdfaW5pdCwKKwkucmVhZF9zdGF0dXMJPSBiNTNfcGh5X3JlYWRfc3RhdHVzLAorCS5tZGlvZHJ2LmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiYmNtNTMxeHgiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBiNTNfb2ZfbWF0Y2hfMiwKKwl9LAorfTsKKworLyogQkNNNTM2NSAqLworc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGI1M19waHlfZHJpdmVyX2lkMyA9IHsKKwkucGh5X2lkCQk9IDB4MDA0MDYzMDAsCisJLm5hbWUJCT0gIkJyb2FkY29tIEI1MyAoMykiLAorCS5waHlfaWRfbWFzawk9IDB4MWZmZmZmMDAsCisJLmZlYXR1cmVzCT0gMCwKKwkucHJvYmUJCT0gYjUzX3BoeV9wcm9iZSwKKwkucmVtb3ZlCQk9IGI1M19waHlfcmVtb3ZlLAorCS5jb25maWdfYW5lZwk9IGI1M19waHlfY29uZmlnX2FuZWcsCisJLmNvbmZpZ19pbml0CT0gYjUzX3BoeV9jb25maWdfaW5pdCwKKwkucmVhZF9zdGF0dXMJPSBiNTNfcGh5X3JlYWRfc3RhdHVzLAorCS5tZGlvZHJ2LmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiYmNtNTM2NSIsCisJCS5vZl9tYXRjaF90YWJsZSA9IGI1M19vZl9tYXRjaF8zLAorCX0sCit9OworCitpbnQgX19pbml0IGI1M19waHlfZHJpdmVyX3JlZ2lzdGVyKHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHBoeV9kcml2ZXJfcmVnaXN0ZXIoJmI1M19waHlfZHJpdmVyX2lkMSwgVEhJU19NT0RVTEUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBwaHlfZHJpdmVyX3JlZ2lzdGVyKCZiNTNfcGh5X2RyaXZlcl9pZDIsIFRISVNfTU9EVUxFKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjE7CisKKwlyZXQgPSBwaHlfZHJpdmVyX3JlZ2lzdGVyKCZiNTNfcGh5X2RyaXZlcl9pZDMsIFRISVNfTU9EVUxFKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIDA7CisKKwlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmI1M19waHlfZHJpdmVyX2lkMik7CitlcnIxOgorCXBoeV9kcml2ZXJfdW5yZWdpc3RlcigmYjUzX3BoeV9kcml2ZXJfaWQxKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIF9fZXhpdCBiNTNfcGh5X2RyaXZlcl91bnJlZ2lzdGVyKHZvaWQpCit7CisJcGh5X2RyaXZlcl91bnJlZ2lzdGVyKCZiNTNfcGh5X2RyaXZlcl9pZDMpOworCXBoeV9kcml2ZXJfdW5yZWdpc3RlcigmYjUzX3BoeV9kcml2ZXJfaWQyKTsKKwlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmI1M19waHlfZHJpdmVyX2lkMSk7Cit9CisKK21vZHVsZV9pbml0KGI1M19waHlfZHJpdmVyX3JlZ2lzdGVyKTsKK21vZHVsZV9leGl0KGI1M19waHlfZHJpdmVyX3VucmVnaXN0ZXIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkI1MyBNRElPIGFjY2VzcyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9iNTMvYjUzX21tYXAuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9iNTMvYjUzX21tYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjE4OTVlCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9uZXQvcGh5L2I1My9iNTNfbW1hcC5jCkBAIC0wLDAgKzEsMjQxIEBACisvKgorICogQjUzIHJlZ2lzdGVyIGFjY2VzcyB0aHJvdWdoIG1lbW9yeSBtYXBwZWQgcmVnaXN0ZXJzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMgSm9uYXMgR29yc2tpIDxqb2dvQG9wZW53cnQub3JnPgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2I1My5oPgorCisjaW5jbHVkZSAiYjUzX3ByaXYuaCIKKworc3RhdGljIGludCBiNTNfbW1hcF9yZWFkOChzdHJ1Y3QgYjUzX2RldmljZSAqZGV2LCB1OCBwYWdlLCB1OCByZWcsIHU4ICp2YWwpCit7CisJdTggX19pb21lbSAqcmVncyA9IGRldi0+cHJpdjsKKworCSp2YWwgPSByZWFkYihyZWdzICsgKHBhZ2UgPDwgOCkgKyByZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYjUzX21tYXBfcmVhZDE2KHN0cnVjdCBiNTNfZGV2aWNlICpkZXYsIHU4IHBhZ2UsIHU4IHJlZywgdTE2ICp2YWwpCit7CisJdTggX19pb21lbSAqcmVncyA9IGRldi0+cHJpdjsKKworCWlmIChXQVJOX09OKHJlZyAlIDIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkZXYtPnBkYXRhICYmIGRldi0+cGRhdGEtPmJpZ19lbmRpYW4pCisJCSp2YWwgPSByZWFkd19iZShyZWdzICsgKHBhZ2UgPDwgOCkgKyByZWcpOworCWVsc2UKKwkJKnZhbCA9IHJlYWR3KHJlZ3MgKyAocGFnZSA8PCA4KSArIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiNTNfbW1hcF9yZWFkMzIoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgdTggcGFnZSwgdTggcmVnLCB1MzIgKnZhbCkKK3sKKwl1OCBfX2lvbWVtICpyZWdzID0gZGV2LT5wcml2OworCisJaWYgKFdBUk5fT04ocmVnICUgNCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRldi0+cGRhdGEgJiYgZGV2LT5wZGF0YS0+YmlnX2VuZGlhbikKKwkJKnZhbCA9IHJlYWRsX2JlKHJlZ3MgKyAocGFnZSA8PCA4KSArIHJlZyk7CisJZWxzZQorCQkqdmFsID0gcmVhZGwocmVncyArIChwYWdlIDw8IDgpICsgcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGI1M19tbWFwX3JlYWQ0OChzdHJ1Y3QgYjUzX2RldmljZSAqZGV2LCB1OCBwYWdlLCB1OCByZWcsIHU2NCAqdmFsKQoreworCWlmIChXQVJOX09OKHJlZyAlIDIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChyZWcgJSA0KSB7CisJCXUxNiBsbzsKKwkJdTMyIGhpOworCisJCWI1M19tbWFwX3JlYWQxNihkZXYsIHBhZ2UsIHJlZywgJmxvKTsKKwkJYjUzX21tYXBfcmVhZDMyKGRldiwgcGFnZSwgcmVnICsgMiwgJmhpKTsKKworCQkqdmFsID0gKCh1NjQpaGkgPDwgMTYpIHwgbG87CisJfSBlbHNlIHsKKwkJdTMyIGxvOworCQl1MTYgaGk7CisKKwkJYjUzX21tYXBfcmVhZDMyKGRldiwgcGFnZSwgcmVnLCAmbG8pOworCQliNTNfbW1hcF9yZWFkMTYoZGV2LCBwYWdlLCByZWcgKyA0LCAmaGkpOworCisJCSp2YWwgPSAoKHU2NCloaSA8PCAzMikgfCBsbzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiNTNfbW1hcF9yZWFkNjQoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgdTggcGFnZSwgdTggcmVnLCB1NjQgKnZhbCkKK3sKKwl1MzIgaGksIGxvOworCisJaWYgKFdBUk5fT04ocmVnICUgNCkpCisJCXJldHVybiAtRUlOVkFMOworCisJYjUzX21tYXBfcmVhZDMyKGRldiwgcGFnZSwgcmVnLCAmbG8pOworCWI1M19tbWFwX3JlYWQzMihkZXYsIHBhZ2UsIHJlZyArIDQsICZoaSk7CisKKwkqdmFsID0gKCh1NjQpaGkgPDwgMzIpIHwgbG87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiNTNfbW1hcF93cml0ZTgoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgdTggcGFnZSwgdTggcmVnLCB1OCB2YWx1ZSkKK3sKKwl1OCBfX2lvbWVtICpyZWdzID0gZGV2LT5wcml2OworCisJd3JpdGViKHZhbHVlLCByZWdzICsgKHBhZ2UgPDwgOCkgKyByZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYjUzX21tYXBfd3JpdGUxNihzdHJ1Y3QgYjUzX2RldmljZSAqZGV2LCB1OCBwYWdlLCB1OCByZWcsCisJCQkgICAgIHUxNiB2YWx1ZSkKK3sKKwl1OCBfX2lvbWVtICpyZWdzID0gZGV2LT5wcml2OworCisJaWYgKFdBUk5fT04ocmVnICUgMikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRldi0+cGRhdGEgJiYgZGV2LT5wZGF0YS0+YmlnX2VuZGlhbikKKwkJd3JpdGV3X2JlKHZhbHVlLCByZWdzICsgKHBhZ2UgPDwgOCkgKyByZWcpOworCWVsc2UKKwkJd3JpdGV3KHZhbHVlLCByZWdzICsgKHBhZ2UgPDwgOCkgKyByZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYjUzX21tYXBfd3JpdGUzMihzdHJ1Y3QgYjUzX2RldmljZSAqZGV2LCB1OCBwYWdlLCB1OCByZWcsCisJCQkJICAgIHUzMiB2YWx1ZSkKK3sKKwl1OCBfX2lvbWVtICpyZWdzID0gZGV2LT5wcml2OworCisJaWYgKFdBUk5fT04ocmVnICUgNCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRldi0+cGRhdGEgJiYgZGV2LT5wZGF0YS0+YmlnX2VuZGlhbikKKwkJd3JpdGVsX2JlKHZhbHVlLCByZWdzICsgKHBhZ2UgPDwgOCkgKyByZWcpOworCWVsc2UKKwkJd3JpdGVsKHZhbHVlLCByZWdzICsgKHBhZ2UgPDwgOCkgKyByZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYjUzX21tYXBfd3JpdGU0OChzdHJ1Y3QgYjUzX2RldmljZSAqZGV2LCB1OCBwYWdlLCB1OCByZWcsCisJCQkJICAgIHU2NCB2YWx1ZSkKK3sKKwlpZiAoV0FSTl9PTihyZWcgJSAyKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocmVnICUgNCkgeworCQl1MzIgaGkgPSAodTMyKSh2YWx1ZSA+PiAxNik7CisJCXUxNiBsbyA9ICh1MTYpdmFsdWU7CisKKwkJYjUzX21tYXBfd3JpdGUxNihkZXYsIHBhZ2UsIHJlZywgbG8pOworCQliNTNfbW1hcF93cml0ZTMyKGRldiwgcGFnZSwgcmVnICsgMiwgaGkpOworCX0gZWxzZSB7CisJCXUxNiBoaSA9ICh1MTYpKHZhbHVlID4+IDMyKTsKKwkJdTMyIGxvID0gKHUzMil2YWx1ZTsKKworCQliNTNfbW1hcF93cml0ZTMyKGRldiwgcGFnZSwgcmVnLCBsbyk7CisJCWI1M19tbWFwX3dyaXRlMTYoZGV2LCBwYWdlLCByZWcgKyA0LCBoaSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYjUzX21tYXBfd3JpdGU2NChzdHJ1Y3QgYjUzX2RldmljZSAqZGV2LCB1OCBwYWdlLCB1OCByZWcsCisJCQkgICAgIHU2NCB2YWx1ZSkKK3sKKwl1MzIgaGksIGxvOworCisJaGkgPSAodTMyKSh2YWx1ZSA+PiAzMik7CisJbG8gPSAodTMyKXZhbHVlOworCisJaWYgKFdBUk5fT04ocmVnICUgNCkpCisJCXJldHVybiAtRUlOVkFMOworCisJYjUzX21tYXBfd3JpdGUzMihkZXYsIHBhZ2UsIHJlZywgbG8pOworCWI1M19tbWFwX3dyaXRlMzIoZGV2LCBwYWdlLCByZWcgKyA0LCBoaSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBiNTNfaW9fb3BzIGI1M19tbWFwX29wcyA9IHsKKwkucmVhZDggPSBiNTNfbW1hcF9yZWFkOCwKKwkucmVhZDE2ID0gYjUzX21tYXBfcmVhZDE2LAorCS5yZWFkMzIgPSBiNTNfbW1hcF9yZWFkMzIsCisJLnJlYWQ0OCA9IGI1M19tbWFwX3JlYWQ0OCwKKwkucmVhZDY0ID0gYjUzX21tYXBfcmVhZDY0LAorCS53cml0ZTggPSBiNTNfbW1hcF93cml0ZTgsCisJLndyaXRlMTYgPSBiNTNfbW1hcF93cml0ZTE2LAorCS53cml0ZTMyID0gYjUzX21tYXBfd3JpdGUzMiwKKwkud3JpdGU0OCA9IGI1M19tbWFwX3dyaXRlNDgsCisJLndyaXRlNjQgPSBiNTNfbW1hcF93cml0ZTY0LAorfTsKKworc3RhdGljIGludCBiNTNfbW1hcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBiNTNfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgYjUzX2RldmljZSAqZGV2OworCisJaWYgKCFwZGF0YSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZXYgPSBiNTNfc3dpdGNoX2FsbG9jKCZwZGV2LT5kZXYsICZiNTNfbW1hcF9vcHMsIHBkYXRhLT5yZWdzKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAocGRhdGEpCisJCWRldi0+cGRhdGEgPSBwZGF0YTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CisKKwlyZXR1cm4gYjUzX3N3aXRjaF9yZWdpc3RlcihkZXYpOworfQorCitzdGF0aWMgaW50IGI1M19tbWFwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBiNTNfZGV2aWNlICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmIChkZXYpCisJCWI1M19zd2l0Y2hfcmVtb3ZlKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYjUzX21tYXBfZHJpdmVyID0geworCS5wcm9iZSA9IGI1M19tbWFwX3Byb2JlLAorCS5yZW1vdmUgPSBiNTNfbW1hcF9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiYjUzLXN3aXRjaCIsCisJfSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYjUzX21tYXBfZHJpdmVyKTsKK01PRFVMRV9BVVRIT1IoIkpvbmFzIEdvcnNraSA8am9nb0BvcGVud3J0Lm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQjUzIE1NQVAgYWNjZXNzIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9uZXQvcGh5L2I1My9iNTNfcGh5X2ZpeHVwLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL25ldC9waHkvYjUzL2I1M19waHlfZml4dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTllY2NlCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9uZXQvcGh5L2I1My9iNTNfcGh5X2ZpeHVwLmMKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIEI1MyBQSFkgRml4dXAgY2FsbAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBKb25hcyBHb3Jza2kgPGpvZ29Ab3BlbndydC5vcmc+CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KKworI2RlZmluZSBCNTNfUFNFVURPX1BIWQkweDFlIC8qIFJlZ2lzdGVyIEFjY2VzcyBQc2V1ZG8gUEhZICovCisKKyNkZWZpbmUgQjUzX0JSQ01fT1VJXzEJMHgwMTQzYmMwMAorI2RlZmluZSBCNTNfQlJDTV9PVUlfMgkweDAzNjI1YzAwCisjZGVmaW5lIEI1M19CUkNNX09VSV8zCTB4MDA0MDYzMDAKKworc3RhdGljIGludCBiNTNfcGh5X2ZpeHVwKHN0cnVjdCBwaHlfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1paV9idXMgKmJ1cyA9IGRldi0+bWRpby5idXM7CisJdTMyIHBoeV9pZDsKKworCWlmIChkZXYtPm1kaW8uYWRkciAhPSBCNTNfUFNFVURPX1BIWSkKKwkJcmV0dXJuIDA7CisKKwkvKiByZWFkIHRoZSBmaXJzdCBwb3J0J3MgaWQgKi8KKwlwaHlfaWQgPSBtZGlvYnVzX3JlYWQoYnVzLCAwLCAyKSA8PCAxNjsKKwlwaHlfaWQgfD0gbWRpb2J1c19yZWFkKGJ1cywgMCwgMyk7CisKKwlpZiAoKHBoeV9pZCAmIDB4ZmZmZmZjMDApID09IEI1M19CUkNNX09VSV8xIHx8CisJICAgIChwaHlfaWQgJiAweGZmZmZmYzAwKSA9PSBCNTNfQlJDTV9PVUlfMiB8fAorCSAgICAocGh5X2lkICYgMHhmZmZmZmYwMCkgPT0gQjUzX0JSQ01fT1VJXzMpIHsKKwkJZGV2LT5waHlfaWQgPSBwaHlfaWQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBfX2luaXQgYjUzX3BoeV9maXh1cF9yZWdpc3Rlcih2b2lkKQoreworCXJldHVybiBwaHlfcmVnaXN0ZXJfZml4dXBfZm9yX2lkKFBIWV9BTllfSUQsIGI1M19waHlfZml4dXApOworfQorCitzdWJzeXNfaW5pdGNhbGwoYjUzX3BoeV9maXh1cF9yZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL25ldC9waHkvYjUzL2I1M19wcml2LmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL25ldC9waHkvYjUzL2I1M19wcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdjMTdhZQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9iNTMvYjUzX3ByaXYuaApAQCAtMCwwICsxLDMzNiBAQAorLyoKKyAqIEI1MyBjb21tb24gZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBKb25hcyBHb3Jza2kgPGpvZ29Ab3BlbndydC5vcmc+CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBfX0I1M19QUklWX0gKKyNkZWZpbmUgX19CNTNfUFJJVl9ICisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3N3aXRjaC5oPgorCitzdHJ1Y3QgYjUzX2RldmljZTsKKworc3RydWN0IGI1M19pb19vcHMgeworCWludCAoKnJlYWQ4KShzdHJ1Y3QgYjUzX2RldmljZSAqZGV2LCB1OCBwYWdlLCB1OCByZWcsIHU4ICp2YWx1ZSk7CisJaW50ICgqcmVhZDE2KShzdHJ1Y3QgYjUzX2RldmljZSAqZGV2LCB1OCBwYWdlLCB1OCByZWcsIHUxNiAqdmFsdWUpOworCWludCAoKnJlYWQzMikoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgdTggcGFnZSwgdTggcmVnLCB1MzIgKnZhbHVlKTsKKwlpbnQgKCpyZWFkNDgpKHN0cnVjdCBiNTNfZGV2aWNlICpkZXYsIHU4IHBhZ2UsIHU4IHJlZywgdTY0ICp2YWx1ZSk7CisJaW50ICgqcmVhZDY0KShzdHJ1Y3QgYjUzX2RldmljZSAqZGV2LCB1OCBwYWdlLCB1OCByZWcsIHU2NCAqdmFsdWUpOworCWludCAoKndyaXRlOCkoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgdTggcGFnZSwgdTggcmVnLCB1OCB2YWx1ZSk7CisJaW50ICgqd3JpdGUxNikoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgdTggcGFnZSwgdTggcmVnLCB1MTYgdmFsdWUpOworCWludCAoKndyaXRlMzIpKHN0cnVjdCBiNTNfZGV2aWNlICpkZXYsIHU4IHBhZ2UsIHU4IHJlZywgdTMyIHZhbHVlKTsKKwlpbnQgKCp3cml0ZTQ4KShzdHJ1Y3QgYjUzX2RldmljZSAqZGV2LCB1OCBwYWdlLCB1OCByZWcsIHU2NCB2YWx1ZSk7CisJaW50ICgqd3JpdGU2NCkoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgdTggcGFnZSwgdTggcmVnLCB1NjQgdmFsdWUpOworCWludCAoKnBoeV9yZWFkMTYpKHN0cnVjdCBiNTNfZGV2aWNlICpkZXYsIGludCBhZGRyLCB1OCByZWcsIHUxNiAqdmFsdWUpOworCWludCAoKnBoeV93cml0ZTE2KShzdHJ1Y3QgYjUzX2RldmljZSAqZGV2LCBpbnQgYWRkciwgdTggcmVnLCB1MTYgdmFsdWUpOworfTsKKworZW51bSB7CisJQkNNNTMyNV9ERVZJQ0VfSUQgPSAweDI1LAorCUJDTTUzNjVfREVWSUNFX0lEID0gMHg2NSwKKwlCQ001Mzk1X0RFVklDRV9JRCA9IDB4OTUsCisJQkNNNTM5N19ERVZJQ0VfSUQgPSAweDk3LAorCUJDTTUzOThfREVWSUNFX0lEID0gMHg5OCwKKwlCQ001MzExNV9ERVZJQ0VfSUQgPSAweDUzMTE1LAorCUJDTTUzMTI1X0RFVklDRV9JRCA9IDB4NTMxMjUsCisJQkNNNTMxMjhfREVWSUNFX0lEID0gMHg1MzEyOCwKKwlCQ002M1hYX0RFVklDRV9JRCA9IDB4NjMwMCwKKwlCQ001MzAxMF9ERVZJQ0VfSUQgPSAweDUzMDEwLAorCUJDTTUzMDExX0RFVklDRV9JRCA9IDB4NTMwMTEsCisJQkNNNTMwMTJfREVWSUNFX0lEID0gMHg1MzAxMiwKKwlCQ001MzAxOF9ERVZJQ0VfSUQgPSAweDUzMDE4LAorCUJDTTUzMDE5X0RFVklDRV9JRCA9IDB4NTMwMTksCit9OworCisjZGVmaW5lIEI1M19OX1BPUlRTCTkKKyNkZWZpbmUgQjUzX05fUE9SVFNfMjUJNgorCitzdHJ1Y3QgYjUzX3ZsYW4geworCXVuc2lnbmVkIGludAltZW1iZXJzOkI1M19OX1BPUlRTOworCXVuc2lnbmVkIGludAl1bnRhZzpCNTNfTl9QT1JUUzsKK307CisKK3N0cnVjdCBiNTNfcG9ydCB7CisJdW5zaWduZWQgaW50CXB2aWQ6MTI7Cit9OworCitzdHJ1Y3QgYjUzX2RldmljZSB7CisJc3RydWN0IHN3aXRjaF9kZXYgc3dfZGV2OworCXN0cnVjdCBiNTNfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisKKwlzdHJ1Y3QgbXV0ZXggcmVnX211dGV4OworCWNvbnN0IHN0cnVjdCBiNTNfaW9fb3BzICpvcHM7CisKKwkvKiBjaGlwIHNwZWNpZmljIGRhdGEgKi8KKwl1MzIgY2hpcF9pZDsKKwl1OCBjb3JlX3JldjsKKwl1OCB2dGFfcmVnc1szXTsKKwl1OCBkdXBsZXhfcmVnOworCXU4IGp1bWJvX3BtX3JlZzsKKwl1OCBqdW1ib19zaXplX3JlZzsKKwlpbnQgcmVzZXRfZ3BpbzsKKworCS8qIHVzZWQgcG9ydHMgbWFzayAqLworCXUxNiBlbmFibGVkX3BvcnRzOworCisJLyogY29ubmVjdCBzcGVjaWZpYyBkYXRhICovCisJdTggY3VycmVudF9wYWdlOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwl2b2lkICpwcml2OworCisJLyogcnVuIHRpbWUgY29uZmlndXJhdGlvbiAqLworCXVuc2lnbmVkIGVuYWJsZV92bGFuOjE7CisJdW5zaWduZWQgZW5hYmxlX2p1bWJvOjE7CisJdW5zaWduZWQgYWxsb3dfdmlkXzQwOTU6MTsKKworCXN0cnVjdCBiNTNfcG9ydCAqcG9ydHM7CisJc3RydWN0IGI1M192bGFuICp2bGFuczsKKworCWNoYXIgKmJ1ZjsKK307CisKKyNkZWZpbmUgYjUzX2Zvcl9lYWNoX3BvcnQoZGV2LCBpKSBcCisJZm9yIChpID0gMDsgaSA8IEI1M19OX1BPUlRTOyBpKyspIFwKKwkJaWYgKGRldi0+ZW5hYmxlZF9wb3J0cyAmIEJJVChpKSkKKworCisKK3N0YXRpYyBpbmxpbmUgaW50IGlzNTMyNShzdHJ1Y3QgYjUzX2RldmljZSAqZGV2KQoreworCXJldHVybiBkZXYtPmNoaXBfaWQgPT0gQkNNNTMyNV9ERVZJQ0VfSUQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzNTM2NShzdHJ1Y3QgYjUzX2RldmljZSAqZGV2KQoreworI2lmZGVmIENPTkZJR19CQ000N1hYCisJcmV0dXJuIGRldi0+Y2hpcF9pZCA9PSBCQ001MzY1X0RFVklDRV9JRDsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSBpbnQgaXM1Mzk3Xzk4KHN0cnVjdCBiNTNfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGRldi0+Y2hpcF9pZCA9PSBCQ001Mzk3X0RFVklDRV9JRCB8fAorCQlkZXYtPmNoaXBfaWQgPT0gQkNNNTM5OF9ERVZJQ0VfSUQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzNTM5eChzdHJ1Y3QgYjUzX2RldmljZSAqZGV2KQoreworCXJldHVybiBkZXYtPmNoaXBfaWQgPT0gQkNNNTM5NV9ERVZJQ0VfSUQgfHwKKwkJZGV2LT5jaGlwX2lkID09IEJDTTUzOTdfREVWSUNFX0lEIHx8CisJCWRldi0+Y2hpcF9pZCA9PSBCQ001Mzk4X0RFVklDRV9JRDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXM1MzF4NShzdHJ1Y3QgYjUzX2RldmljZSAqZGV2KQoreworCXJldHVybiBkZXYtPmNoaXBfaWQgPT0gQkNNNTMxMTVfREVWSUNFX0lEIHx8CisJCWRldi0+Y2hpcF9pZCA9PSBCQ001MzEyNV9ERVZJQ0VfSUQgfHwKKwkJZGV2LT5jaGlwX2lkID09IEJDTTUzMTI4X0RFVklDRV9JRDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXM2M3h4KHN0cnVjdCBiNTNfZGV2aWNlICpkZXYpCit7CisjaWZkZWYgQ09ORklHX0JDTTYzWFgKKwlyZXR1cm4gZGV2LT5jaGlwX2lkID09IEJDTTYzWFhfREVWSUNFX0lEOworI2Vsc2UKKwlyZXR1cm4gMDsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIGludCBpczUzMDF4KHN0cnVjdCBiNTNfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGRldi0+Y2hpcF9pZCA9PSBCQ001MzAxMF9ERVZJQ0VfSUQgfHwKKwkJZGV2LT5jaGlwX2lkID09IEJDTTUzMDExX0RFVklDRV9JRCB8fAorCQlkZXYtPmNoaXBfaWQgPT0gQkNNNTMwMTJfREVWSUNFX0lEIHx8CisJCWRldi0+Y2hpcF9pZCA9PSBCQ001MzAxOF9ERVZJQ0VfSUQgfHwKKwkJZGV2LT5jaGlwX2lkID09IEJDTTUzMDE5X0RFVklDRV9JRDsKK30KKworI2RlZmluZSBCNTNfQ1BVX1BPUlRfMjUJNQorI2RlZmluZSBCNTNfQ1BVX1BPUlQJOAorCitzdGF0aWMgaW5saW5lIGludCBpc19jcHVfcG9ydChzdHJ1Y3QgYjUzX2RldmljZSAqZGV2LCBpbnQgcG9ydCkKK3sKKwlyZXR1cm4gZGV2LT5zd19kZXYuY3B1X3BvcnQgPT0gcG9ydDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXNfaW1wX3BvcnQoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgaW50IHBvcnQpCit7CisJaWYgKGlzNTMyNShkZXYpIHx8IGlzNTM2NShkZXYpKQorCQlyZXR1cm4gcG9ydCA9PSBCNTNfQ1BVX1BPUlRfMjU7CisJZWxzZQorCQlyZXR1cm4gcG9ydCA9PSBCNTNfQ1BVX1BPUlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGI1M19kZXZpY2UgKnN3X3RvX2I1MyhzdHJ1Y3Qgc3dpdGNoX2RldiAqc3cpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzdywgc3RydWN0IGI1M19kZXZpY2UsIHN3X2Rldik7Cit9CisKK3N0cnVjdCBiNTNfZGV2aWNlICpiNTNfc3dpdGNoX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmJhc2UsIHN0cnVjdCBiNTNfaW9fb3BzICpvcHMsCisJCQkJICAgIHZvaWQgKnByaXYpOworCitpbnQgYjUzX3N3aXRjaF9kZXRlY3Qoc3RydWN0IGI1M19kZXZpY2UgKmRldik7CisKK2ludCBiNTNfc3dpdGNoX3JlZ2lzdGVyKHN0cnVjdCBiNTNfZGV2aWNlICpkZXYpOworCitzdGF0aWMgaW5saW5lIHZvaWQgYjUzX3N3aXRjaF9yZW1vdmUoc3RydWN0IGI1M19kZXZpY2UgKmRldikKK3sKKwl1bnJlZ2lzdGVyX3N3aXRjaCgmZGV2LT5zd19kZXYpOworfQorCitzdGF0aWMgaW5saW5lIGludCBiNTNfcmVhZDgoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgdTggcGFnZSwgdTggcmVnLCB1OCAqdmFsKQoreworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZkZXYtPnJlZ19tdXRleCk7CisJcmV0ID0gZGV2LT5vcHMtPnJlYWQ4KGRldiwgcGFnZSwgcmVnLCB2YWwpOworCW11dGV4X3VubG9jaygmZGV2LT5yZWdfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQgYjUzX3JlYWQxNihzdHJ1Y3QgYjUzX2RldmljZSAqZGV2LCB1OCBwYWdlLCB1OCByZWcsIHUxNiAqdmFsKQoreworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZkZXYtPnJlZ19tdXRleCk7CisJcmV0ID0gZGV2LT5vcHMtPnJlYWQxNihkZXYsIHBhZ2UsIHJlZywgdmFsKTsKKwltdXRleF91bmxvY2soJmRldi0+cmVnX211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGI1M19yZWFkMzIoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgdTggcGFnZSwgdTggcmVnLCB1MzIgKnZhbCkKK3sKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmZGV2LT5yZWdfbXV0ZXgpOworCXJldCA9IGRldi0+b3BzLT5yZWFkMzIoZGV2LCBwYWdlLCByZWcsIHZhbCk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnJlZ19tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludCBiNTNfcmVhZDQ4KHN0cnVjdCBiNTNfZGV2aWNlICpkZXYsIHU4IHBhZ2UsIHU4IHJlZywgdTY0ICp2YWwpCit7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmRldi0+cmVnX211dGV4KTsKKwlyZXQgPSBkZXYtPm9wcy0+cmVhZDQ4KGRldiwgcGFnZSwgcmVnLCB2YWwpOworCW11dGV4X3VubG9jaygmZGV2LT5yZWdfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQgYjUzX3JlYWQ2NChzdHJ1Y3QgYjUzX2RldmljZSAqZGV2LCB1OCBwYWdlLCB1OCByZWcsIHU2NCAqdmFsKQoreworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZkZXYtPnJlZ19tdXRleCk7CisJcmV0ID0gZGV2LT5vcHMtPnJlYWQ2NChkZXYsIHBhZ2UsIHJlZywgdmFsKTsKKwltdXRleF91bmxvY2soJmRldi0+cmVnX211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGI1M193cml0ZTgoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgdTggcGFnZSwgdTggcmVnLCB1OCB2YWx1ZSkKK3sKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmZGV2LT5yZWdfbXV0ZXgpOworCXJldCA9IGRldi0+b3BzLT53cml0ZTgoZGV2LCBwYWdlLCByZWcsIHZhbHVlKTsKKwltdXRleF91bmxvY2soJmRldi0+cmVnX211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGI1M193cml0ZTE2KHN0cnVjdCBiNTNfZGV2aWNlICpkZXYsIHU4IHBhZ2UsIHU4IHJlZywKKwkJCSAgICAgIHUxNiB2YWx1ZSkKK3sKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmZGV2LT5yZWdfbXV0ZXgpOworCXJldCA9IGRldi0+b3BzLT53cml0ZTE2KGRldiwgcGFnZSwgcmVnLCB2YWx1ZSk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnJlZ19tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludCBiNTNfd3JpdGUzMihzdHJ1Y3QgYjUzX2RldmljZSAqZGV2LCB1OCBwYWdlLCB1OCByZWcsCisJCQkgICAgICB1MzIgdmFsdWUpCit7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmRldi0+cmVnX211dGV4KTsKKwlyZXQgPSBkZXYtPm9wcy0+d3JpdGUzMihkZXYsIHBhZ2UsIHJlZywgdmFsdWUpOworCW11dGV4X3VubG9jaygmZGV2LT5yZWdfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQgYjUzX3dyaXRlNDgoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgdTggcGFnZSwgdTggcmVnLAorCQkJICAgICAgdTY0IHZhbHVlKQoreworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZkZXYtPnJlZ19tdXRleCk7CisJcmV0ID0gZGV2LT5vcHMtPndyaXRlNDgoZGV2LCBwYWdlLCByZWcsIHZhbHVlKTsKKwltdXRleF91bmxvY2soJmRldi0+cmVnX211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGI1M193cml0ZTY0KHN0cnVjdCBiNTNfZGV2aWNlICpkZXYsIHU4IHBhZ2UsIHU4IHJlZywKKwkJCSAgICAgICB1NjQgdmFsdWUpCit7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmRldi0+cmVnX211dGV4KTsKKwlyZXQgPSBkZXYtPm9wcy0+d3JpdGU2NChkZXYsIHBhZ2UsIHJlZywgdmFsdWUpOworCW11dGV4X3VubG9jaygmZGV2LT5yZWdfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworI2lmZGVmIENPTkZJR19CQ000N1hYCisjaW5jbHVkZSA8YmNtNDd4eF9ib2FyZC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvYmNtNDd4eF9udnJhbS5oPgorCitzdGF0aWMgaW5saW5lIGludCBiNTNfc3dpdGNoX2dldF9yZXNldF9ncGlvKHN0cnVjdCBiNTNfZGV2aWNlICpkZXYpCit7CisjaWZkZWYgQ09ORklHX0JDTTQ3WFgKKwllbnVtIGJjbTQ3eHhfYm9hcmQgYm9hcmQgPSBiY200N3h4X2JvYXJkX2dldCgpOworCisJc3dpdGNoIChib2FyZCkgeworCWNhc2UgQkNNNDdYWF9CT0FSRF9MSU5LU1lTX1dSVDMwME5WMTE6CisJY2FzZSBCQ000N1hYX0JPQVJEX0xJTktTWVNfV1JUMzEwTlYxOgorCQlyZXR1cm4gODsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisjZW5kaWYKKworCXJldHVybiBiY200N3h4X252cmFtX2dwaW9fcGluKCJyb2JvX3Jlc2V0Iik7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9uZXQvcGh5L2I1My9iNTNfcmVncy5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9uZXQvcGh5L2I1My9iNTNfcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYmY2NzQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL25ldC9waHkvYjUzL2I1M19yZWdzLmgKQEAgLTAsMCArMSwzNDggQEAKKy8qCisgKiBCNTMgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIEpvbmFzIEdvcnNraSA8am9nb0BvcGVud3J0Lm9yZz4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIF9fQjUzX1JFR1NfSAorI2RlZmluZSBfX0I1M19SRUdTX0gKKworLyogTWFuYWdlbWVudCBQb3J0IChTTVApIFBhZ2Ugb2Zmc2V0cyAqLworI2RlZmluZSBCNTNfQ1RSTF9QQUdFCQkJMHgwMCAvKiBDb250cm9sICovCisjZGVmaW5lIEI1M19TVEFUX1BBR0UJCQkweDAxIC8qIFN0YXR1cyAqLworI2RlZmluZSBCNTNfTUdNVF9QQUdFCQkJMHgwMiAvKiBNYW5hZ2VtZW50IE1vZGUgKi8KKyNkZWZpbmUgQjUzX01JQl9BQ19QQUdFCQkJMHgwMyAvKiBNSUIgQXV0b2Nhc3QgKi8KKyNkZWZpbmUgQjUzX0FSTENUUkxfUEFHRQkJMHgwNCAvKiBBUkwgQ29udHJvbCAqLworI2RlZmluZSBCNTNfQVJMSU9fUEFHRQkJCTB4MDUgLyogQVJMIEFjY2VzcyAqLworI2RlZmluZSBCNTNfRlJBTUVCVUZfUEFHRQkJMHgwNiAvKiBNYW5hZ2VtZW50IGZyYW1lIGFjY2VzcyAqLworI2RlZmluZSBCNTNfTUVNX0FDQ0VTU19QQUdFCQkweDA4IC8qIE1lbW9yeSBhY2Nlc3MgKi8KKworLyogUEhZIFJlZ2lzdGVycyAqLworI2RlZmluZSBCNTNfUE9SVF9NSUlfUEFHRShpKQkJKDB4MTAgKyAoaSkpIC8qIFBvcnQgaSBNSUkgUmVnaXN0ZXJzICovCisjZGVmaW5lIEI1M19JTV9QT1JUX1BBR0UJCTB4MTggLyogSW52ZXJzZSBNSUkgUG9ydCAodG8gRU1BQykgKi8KKyNkZWZpbmUgQjUzX0FMTF9QT1JUX1BBR0UJCTB4MTkgLyogQWxsIHBvcnRzIE1JSSAoYnJvYWRjYXN0KSAqLworCisvKiBNSUIgcmVnaXN0ZXJzICovCisjZGVmaW5lIEI1M19NSUJfUEFHRShpKQkJCSgweDIwICsgKGkpKQorCisvKiBRdWFsaXR5IG9mIFNlcnZpY2UgKFFvUykgUmVnaXN0ZXJzICovCisjZGVmaW5lIEI1M19RT1NfUEFHRQkJCTB4MzAKKworLyogUG9ydCBWTEFOIFBhZ2UgKi8KKyNkZWZpbmUgQjUzX1BWTEFOX1BBR0UJCQkweDMxCisKKy8qIFZMQU4gUmVnaXN0ZXJzICovCisjZGVmaW5lIEI1M19WTEFOX1BBR0UJCQkweDM0CisKKy8qIEp1bWJvIEZyYW1lIFJlZ2lzdGVycyAqLworI2RlZmluZSBCNTNfSlVNQk9fUEFHRQkJCTB4NDAKKworLyogQ0ZQIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXJzIFBhZ2UgKi8KKyNkZWZpbmUgQjUzX0NGUF9QQUdFCQkJMHhhMQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29udHJvbCBQYWdlIHJlZ2lzdGVycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBvcnQgQ29udHJvbCBSZWdpc3RlciAoOCBiaXQpICovCisjZGVmaW5lIEI1M19QT1JUX0NUUkwoaSkJCSgweDAwICsgKGkpKQorI2RlZmluZSAgIFBPUlRfQ1RSTF9SWF9ESVNBQkxFCQlCSVQoMCkKKyNkZWZpbmUgICBQT1JUX0NUUkxfVFhfRElTQUJMRQkJQklUKDEpCisjZGVmaW5lICAgUE9SVF9DVFJMX1JYX0JDU1RfRU4JCUJJVCgyKSAvKiBCcm9hZGNhc3QgUlggKFA4IG9ubHkpICovCisjZGVmaW5lICAgUE9SVF9DVFJMX1JYX01DU1RfRU4JCUJJVCgzKSAvKiBNdWx0aWNhc3QgUlggKFA4IG9ubHkpICovCisjZGVmaW5lICAgUE9SVF9DVFJMX1JYX1VDU1RfRU4JCUJJVCg0KSAvKiBVbmljYXN0IFJYIChQOCBvbmx5KSAqLworI2RlZmluZQkgIFBPUlRfQ1RSTF9TVFBfU1RBVEVfUwkJNQorI2RlZmluZSAgIFBPUlRfQ1RSTF9TVFBfU1RBVEVfTUFTSwkoMHg3IDw8IFBPUlRfQ1RSTF9TVFBfU1RBVEVfUykKKworLyogU01QIENvbnRyb2wgUmVnaXN0ZXIgKDggYml0KSAqLworI2RlZmluZSBCNTNfU01QX0NUUkwJCQkweDBhCisKKy8qIFN3aXRjaCBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgKDggYml0KSAqLworI2RlZmluZSBCNTNfU1dJVENIX01PREUJCQkweDBiCisjZGVmaW5lICAgU01fU1dfRldEX01PREUJCUJJVCgwKQkvKiAxID0gTWFuYWdlZCBNb2RlICovCisjZGVmaW5lICAgU01fU1dfRldEX0VOCQkJQklUKDEpCS8qIEZvcndhcmRpbmcgRW5hYmxlICovCisKKy8qIElNUCBQb3J0IHN0YXRlIG92ZXJyaWRlIHJlZ2lzdGVyICg4IGJpdCkgKi8KKyNkZWZpbmUgQjUzX1BPUlRfT1ZFUlJJREVfQ1RSTAkJMHgwZQorI2RlZmluZSAgIFBPUlRfT1ZFUlJJREVfTElOSwkJQklUKDApCisjZGVmaW5lICAgUE9SVF9PVkVSUklERV9GVUxMX0RVUExFWAlCSVQoMSkgLyogMCA9IEhhbGYgRHVwbGV4ICovCisjZGVmaW5lICAgUE9SVF9PVkVSUklERV9TUEVFRF9TCQkyCisjZGVmaW5lICAgUE9SVF9PVkVSUklERV9TUEVFRF8xME0JKDAgPDwgUE9SVF9PVkVSUklERV9TUEVFRF9TKQorI2RlZmluZSAgIFBPUlRfT1ZFUlJJREVfU1BFRURfMTAwTQkoMSA8PCBQT1JUX09WRVJSSURFX1NQRUVEX1MpCisjZGVmaW5lICAgUE9SVF9PVkVSUklERV9TUEVFRF8xMDAwTQkoMiA8PCBQT1JUX09WRVJSSURFX1NQRUVEX1MpCisjZGVmaW5lICAgUE9SVF9PVkVSUklERV9SVl9NSUlfMjUJQklUKDQpIC8qIEJDTTUzMjUgb25seSAqLworI2RlZmluZSAgIFBPUlRfT1ZFUlJJREVfUlhfRkxPVwkJQklUKDQpCisjZGVmaW5lICAgUE9SVF9PVkVSUklERV9UWF9GTE9XCQlCSVQoNSkKKyNkZWZpbmUgICBQT1JUX09WRVJSSURFX1NQRUVEXzIwMDBNCUJJVCg2KSAvKiBCQ001MzAxWCBvbmx5LCByZXF1aXJlcyBzZXR0aW5nIDEwMDBNICovCisjZGVmaW5lICAgUE9SVF9PVkVSUklERV9FTgkJQklUKDcpIC8qIFVzZSB0aGUgcmVnaXN0ZXIgY29udGVudHMgKi8KKworLyogUG93ZXItZG93biBtb2RlIGNvbnRyb2wgKi8KKyNkZWZpbmUgQjUzX1BEX01PREVfQ1RSTF8yNQkJMHgwZgorCisvKiBJUCBNdWx0aWNhc3QgY29udHJvbCAoOCBiaXQpICovCisjZGVmaW5lIEI1M19JUF9NVUxUSUNBU1RfQ1RSTAkJMHgyMQorI2RlZmluZSAgQjUzX0lQTUNfRldEX0VOCQlCSVQoMSkKKyNkZWZpbmUgIEI1M19VQ19GV0RfRU4JCQlCSVQoNikKKyNkZWZpbmUgIEI1M19NQ19GV0RfRU4JCQlCSVQoNykKKworLyogKDE2IGJpdCkgKi8KKyNkZWZpbmUgQjUzX1VDX0ZMT09EX01BU0sJCTB4MzIKKyNkZWZpbmUgQjUzX01DX0ZMT09EX01BU0sJCTB4MzQKKyNkZWZpbmUgQjUzX0lQTUNfRkxPT0RfTUFTSwkJMHgzNgorCisvKgorICogT3ZlcnJpZGUgUG9ydHMgMC03IFN0YXRlIG9uIGRldmljZXMgd2l0aCB4TUlJIGludGVyZmFjZXMgKDggYml0KQorICoKKyAqIEZvciBwb3J0IDggc3RpbGwgdXNlIEI1M19QT1JUX09WRVJSSURFX0NUUkwKKyAqIFBsZWFzZSBub3RlIHRoYXQgbm90IGFsbCBwb3J0cyBhcmUgYXZhaWxhYmxlIG9uIGV2ZXJ5IGhhcmR3YXJlLCBlLmcuIEJDTTUzMDFYCisgKiBkb24ndCBpbmNsdWRlIG92ZXJyaWRpbmcgcG9ydCA2LCBCQ002M3h4IGFsc28gaGF2ZSBzb21lIGxpbWl0YXRpb25zLgorICovCisjZGVmaW5lIEI1M19HTUlJX1BPUlRfT1ZFUlJJREVfQ1RSTChpKQkoMHg1OCArIChpKSkKKyNkZWZpbmUgICBHTUlJX1BPX0xJTksJCQlCSVQoMCkKKyNkZWZpbmUgICBHTUlJX1BPX0ZVTExfRFVQTEVYCQlCSVQoMSkgLyogMCA9IEhhbGYgRHVwbGV4ICovCisjZGVmaW5lICAgR01JSV9QT19TUEVFRF9TCQkyCisjZGVmaW5lICAgR01JSV9QT19TUEVFRF8xME0JCSgwIDw8IEdNSUlfUE9fU1BFRURfUykKKyNkZWZpbmUgICBHTUlJX1BPX1NQRUVEXzEwME0JCSgxIDw8IEdNSUlfUE9fU1BFRURfUykKKyNkZWZpbmUgICBHTUlJX1BPX1NQRUVEXzEwMDBNCQkoMiA8PCBHTUlJX1BPX1NQRUVEX1MpCisjZGVmaW5lICAgR01JSV9QT19SWF9GTE9XCQlCSVQoNCkKKyNkZWZpbmUgICBHTUlJX1BPX1RYX0ZMT1cJCUJJVCg1KQorI2RlZmluZSAgIEdNSUlfUE9fRU4JCQlCSVQoNikgLyogVXNlIHRoZSByZWdpc3RlciBjb250ZW50cyAqLworI2RlZmluZSAgIEdNSUlfUE9fU1BFRURfMjAwME0JCUJJVCg3KSAvKiBCQ001MzAxWCBvbmx5LCByZXF1aXJlcyBzZXR0aW5nIDEwMDBNICovCisKKy8qIFNvZnR3YXJlIHJlc2V0IHJlZ2lzdGVyICg4IGJpdCkgKi8KKyNkZWZpbmUgQjUzX1NPRlRSRVNFVAkJCTB4NzkKKworLyogRmFzdCBBZ2luZyBDb250cm9sIHJlZ2lzdGVyICg4IGJpdCkgKi8KKyNkZWZpbmUgQjUzX0ZBU1RfQUdFX0NUUkwJCTB4ODgKKyNkZWZpbmUgICBGQVNUX0FHRV9TVEFUSUMJCUJJVCgwKQorI2RlZmluZSAgIEZBU1RfQUdFX0RZTkFNSUMJCUJJVCgxKQorI2RlZmluZSAgIEZBU1RfQUdFX1BPUlQJCQlCSVQoMikKKyNkZWZpbmUgICBGQVNUX0FHRV9WTEFOCQkJQklUKDMpCisjZGVmaW5lICAgRkFTVF9BR0VfU1RQCQkJQklUKDQpCisjZGVmaW5lICAgRkFTVF9BR0VfTUMJCQlCSVQoNSkKKyNkZWZpbmUgICBGQVNUX0FHRV9ET05FCQkJQklUKDcpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTdGF0dXMgUGFnZSByZWdpc3RlcnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBMaW5rIFN0YXR1cyBTdW1tYXJ5IFJlZ2lzdGVyICgxNmJpdCkgKi8KKyNkZWZpbmUgQjUzX0xJTktfU1RBVAkJCTB4MDAKKworLyogTGluayBTdGF0dXMgQ2hhbmdlIFJlZ2lzdGVyICgxNiBiaXQpICovCisjZGVmaW5lIEI1M19MSU5LX1NUQVRfQ0hBTkdFCQkweDAyCisKKy8qIFBvcnQgU3BlZWQgU3VtbWFyeSBSZWdpc3RlciAoMTYgYml0IGZvciBGRSwgMzIgYml0IGZvciBHRSkgKi8KKyNkZWZpbmUgQjUzX1NQRUVEX1NUQVQJCQkweDA0CisjZGVmaW5lICBTUEVFRF9QT1JUX0ZFKHJlZywgcG9ydCkJKCgocmVnKSA+PiAocG9ydCkpICYgMSkKKyNkZWZpbmUgIFNQRUVEX1BPUlRfR0UocmVnLCBwb3J0KQkoKChyZWcpID4+IDIgKiAocG9ydCkpICYgMykKKyNkZWZpbmUgIFNQRUVEX1NUQVRfMTBNCQkJMAorI2RlZmluZSAgU1BFRURfU1RBVF8xMDBNCQkxCisjZGVmaW5lICBTUEVFRF9TVEFUXzEwMDBNCQkyCisKKy8qIER1cGxleCBTdGF0dXMgU3VtbWFyeSAoMTYgYml0KSAqLworI2RlZmluZSBCNTNfRFVQTEVYX1NUQVRfRkUJCTB4MDYKKyNkZWZpbmUgQjUzX0RVUExFWF9TVEFUX0dFCQkweDA4CisjZGVmaW5lIEI1M19EVVBMRVhfU1RBVF82M1hYCQkweDBjCisKKy8qIFJldmlzaW9uIElEIHJlZ2lzdGVyIGZvciBCQ001MzI1ICovCisjZGVmaW5lIEI1M19SRVZfSURfMjUJCQkweDUwCisKKy8qIFN0cmFwIFZhbHVlICg0OCBiaXQpICovCisjZGVmaW5lIEI1M19TVFJBUF9WQUxVRQkJCTB4NzAKKyNkZWZpbmUgICBTVl9HTUlJX0NUUkxfMTE1CQlCSVQoMjcpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNYW5hZ2VtZW50IE1vZGUgUGFnZSBSZWdpc3RlcnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBHbG9iYWwgTWFuYWdlbWVudCBDb25maWcgUmVnaXN0ZXIgKDggYml0KSAqLworI2RlZmluZSBCNTNfR0xPQkFMX0NPTkZJRwkJMHgwMAorI2RlZmluZSAgIEdDX1JFU0VUX01JQgkJCTB4MDEKKyNkZWZpbmUgICBHQ19SWF9CUERVX0VOCQkJMHgwMgorI2RlZmluZSAgIEdDX01JQl9BQ19IRFJfRU4JCTB4MTAKKyNkZWZpbmUgICBHQ19NSUJfQUNfRU4JCQkweDIwCisjZGVmaW5lICAgR0NfRlJNX01HTVRfUE9SVF9NCQkweEMwCisjZGVmaW5lICAgR0NfRlJNX01HTVRfUE9SVF8wNAkJMHgwMAorI2RlZmluZSAgIEdDX0ZSTV9NR01UX1BPUlRfTUlJCQkweDgwCisKKy8qIEJyb2FkY29tIEhlYWRlciBjb250cm9sIHJlZ2lzdGVyICg4IGJpdCkgKi8KKyNkZWZpbmUgQjUzX0JSQ01fSERSCQkJMHgwMworI2RlZmluZSAgIEJSQ01fSERSX1A4X0VOCQlCSVQoMCkgLyogRW5hYmxlIHRhZ2dpbmcgb24gcG9ydCA4ICovCisjZGVmaW5lICAgQlJDTV9IRFJfUDVfRU4JCUJJVCgxKSAvKiBFbmFibGUgdGFnZ2luZyBvbiBwb3J0IDUgKi8KKworLyogRGV2aWNlIElEIHJlZ2lzdGVyICg4IG9yIDMyIGJpdCkgKi8KKyNkZWZpbmUgQjUzX0RFVklDRV9JRAkJCTB4MzAKKworLyogUmV2aXNpb24gSUQgcmVnaXN0ZXIgKDggYml0KSAqLworI2RlZmluZSBCNTNfUkVWX0lECQkJMHg0MAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQVJMIEFjY2VzcyBQYWdlIFJlZ2lzdGVycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFZMQU4gVGFibGUgQWNjZXNzIFJlZ2lzdGVyICg4IGJpdCkgKi8KKyNkZWZpbmUgQjUzX1ZUX0FDQ0VTUwkJCTB4ODAKKyNkZWZpbmUgQjUzX1ZUX0FDQ0VTU185Nzk4CQkweDYwIC8qIGZvciBCQ001Mzk3L0JDTTUzOTggKi8KKyNkZWZpbmUgQjUzX1ZUX0FDQ0VTU182M1hYCQkweDYwIC8qIGZvciBCQ002MzI4LzYyLzY4ICovCisjZGVmaW5lICAgVlRBX0NNRF9XUklURQkJCTAKKyNkZWZpbmUgICBWVEFfQ01EX1JFQUQJCQkxCisjZGVmaW5lICAgVlRBX0NNRF9DTEVBUgkJCTIKKyNkZWZpbmUgICBWVEFfU1RBUlRfQ01ECQkJQklUKDcpCisKKy8qIFZMQU4gVGFibGUgSW5kZXggUmVnaXN0ZXIgKDE2IGJpdCkgKi8KKyNkZWZpbmUgQjUzX1ZUX0lOREVYCQkJMHg4MQorI2RlZmluZSBCNTNfVlRfSU5ERVhfOTc5OAkJMHg2MQorI2RlZmluZSBCNTNfVlRfSU5ERVhfNjNYWAkJMHg2MgorCisvKiBWTEFOIFRhYmxlIEVudHJ5IFJlZ2lzdGVyICgzMiBiaXQpICovCisjZGVmaW5lIEI1M19WVF9FTlRSWQkJCTB4ODMKKyNkZWZpbmUgQjUzX1ZUX0VOVFJZXzk3OTgJCTB4NjMKKyNkZWZpbmUgQjUzX1ZUX0VOVFJZXzYzWFgJCTB4NjQKKyNkZWZpbmUgICBWVEVfTUVNQkVSUwkJCTB4MWZmCisjZGVmaW5lICAgVlRFX1VOVEFHX1MJCQk5CisjZGVmaW5lICAgVlRFX1VOVEFHCQkJKDB4MWZmIDw8IDkpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQb3J0IFZMQU4gUmVnaXN0ZXJzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUG9ydCBWTEFOIG1hc2sgKDE2IGJpdCkgSU1QIHBvcnQgaXMgYWx3YXlzIDgsIGFsc28gb24gNTMyNSAmIGNvICovCisjZGVmaW5lIEI1M19QVkxBTl9QT1JUX01BU0soaSkJCSgoaSkgKiAyKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogODAyLjFRIFBhZ2UgUmVnaXN0ZXJzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogR2xvYmFsIFFvUyBDb250cm9sICg4IGJpdCkgKi8KKyNkZWZpbmUgQjUzX1FPU19HTE9CQUxfQ1RMCQkweDAwCisKKy8qIEVuYWJsZSA4MDIuMVEgZm9yIGluZGl2aWR1YWwgUG9ydHMgKDE2IGJpdCkgKi8KKyNkZWZpbmUgQjUzXzgwMl8xUF9FTgkJCTB4MDQKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFZMQU4gUGFnZSBSZWdpc3RlcnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBWTEFOIENvbnRyb2wgMCAoOCBiaXQpICovCisjZGVmaW5lIEI1M19WTEFOX0NUUkwwCQkJMHgwMAorI2RlZmluZSAgIFZDMF84MDIxUEZfQ1RSTF9NQVNLCQkweDMKKyNkZWZpbmUgICBWQzBfODAyMVBGX0NUUkxfTk9ORQkJMHgwCisjZGVmaW5lICAgVkMwXzgwMjFQRl9DVFJMX0NIQU5HRV9QUkkJMHgxCisjZGVmaW5lICAgVkMwXzgwMjFQRl9DVFJMX0NIQU5HRV9WSUQJMHgyCisjZGVmaW5lICAgVkMwXzgwMjFQRl9DVFJMX0NIQU5HRV9CT1RICTB4MworI2RlZmluZSAgIFZDMF84MDIxUUZfQ1RSTF9NQVNLCQkweGMKKyNkZWZpbmUgICBWQzBfODAyMVFGX0NUUkxfQ0hBTkdFX1BSSQkweDEKKyNkZWZpbmUgICBWQzBfODAyMVFGX0NUUkxfQ0hBTkdFX1ZJRAkweDIKKyNkZWZpbmUgICBWQzBfODAyMVFGX0NUUkxfQ0hBTkdFX0JPVEgJMHgzCisjZGVmaW5lICAgVkMwX1JFU0VSVkVEXzEJCUJJVCgxKQorI2RlZmluZSAgIFZDMF9EUk9QX1ZJRF9NSVNTCQlCSVQoNCkKKyNkZWZpbmUgICBWQzBfVklEX0hBU0hfVklECQlCSVQoNSkKKyNkZWZpbmUgICBWQzBfVklEX0NIS19FTgkJQklUKDYpCS8qIFVzZSBWSUQsREEgb3IgVklELFNBICovCisjZGVmaW5lICAgVkMwX1ZMQU5fRU4JCQlCSVQoNykJLyogODAyLjFRIFZMQU4gRW5hYmxlZCAqLworCisvKiBWTEFOIENvbnRyb2wgMSAoOCBiaXQpICovCisjZGVmaW5lIEI1M19WTEFOX0NUUkwxCQkJMHgwMQorI2RlZmluZSAgIFZDMV9SWF9NQ1NUX1RBR19FTgkJQklUKDEpCisjZGVmaW5lICAgVkMxX1JYX01DU1RfRldEX0VOCQlCSVQoMikKKyNkZWZpbmUgICBWQzFfUlhfTUNTVF9VTlRBR19FTgkJQklUKDMpCisKKy8qIFZMQU4gQ29udHJvbCAyICg4IGJpdCkgKi8KKyNkZWZpbmUgQjUzX1ZMQU5fQ1RSTDIJCQkweDAyCisKKy8qIFZMQU4gQ29udHJvbCAzICg4IGJpdCB3aGVuIEJDTTUzMjUsIDE2IGJpdCBlbHNlKSAqLworI2RlZmluZSBCNTNfVkxBTl9DVFJMMwkJCTB4MDMKKyNkZWZpbmUgQjUzX1ZMQU5fQ1RSTDNfNjNYWAkJMHgwNAorI2RlZmluZSAgIFZDM19NQVhTSVpFXzE1MzIJCUJJVCg2KSAvKiA1MzI1IG9ubHkgKi8KKyNkZWZpbmUgICBWQzNfSElHSF84QklUX0VOCQlCSVQoNykgLyogNTMyNSBvbmx5ICovCisKKy8qIFZMQU4gQ29udHJvbCA0ICg4IGJpdCkgKi8KKyNkZWZpbmUgQjUzX1ZMQU5fQ1RSTDQJCQkweDA1CisjZGVmaW5lIEI1M19WTEFOX0NUUkw0XzI1CQkweDA0CisjZGVmaW5lIEI1M19WTEFOX0NUUkw0XzYzWFgJCTB4MDYKKyNkZWZpbmUgICBWQzRfSU5HX1ZJRF9DSEVDS19TCQk2CisjZGVmaW5lICAgVkM0X0lOR19WSURfQ0hFQ0tfTUFTSwkoMHgzIDw8IFZDNF9JTkdfVklEX0NIRUNLX1MpCisjZGVmaW5lICAgVkM0X0lOR19WSURfVklPX0ZXRAkJMCAvKiBmb3J3YXJkLCBidXQgZG8gbm90IGxlYXJuICovCisjZGVmaW5lICAgVkM0X0lOR19WSURfVklPX0RST1AJCTEgLyogZHJvcCBWSUQgdmlvbGF0aW9ucyAqLworI2RlZmluZSAgIFZDNF9OT19JTkdfVklEX0NISwkJMiAvKiBkbyBub3QgY2hlY2sgKi8KKyNkZWZpbmUgICBWQzRfSU5HX1ZJRF9WSU9fVE9fSU1QCTMgLyogcmVkaXJlY3QgdG8gTUlJIHBvcnQgKi8KKworLyogVkxBTiBDb250cm9sIDUgKDggYml0KSAqLworI2RlZmluZSBCNTNfVkxBTl9DVFJMNQkJCTB4MDYKKyNkZWZpbmUgQjUzX1ZMQU5fQ1RSTDVfMjUJCTB4MDUKKyNkZWZpbmUgQjUzX1ZMQU5fQ1RSTDVfNjNYWAkJMHgwNworI2RlZmluZSAgIFZDNV9WSURfRkZGX0VOCQlCSVQoMikKKyNkZWZpbmUgICBWQzVfRFJPUF9WVEFCTEVfTUlTUwkJQklUKDMpCisKKy8qIFZMQU4gQ29udHJvbCA2ICg4IGJpdCkgKi8KKyNkZWZpbmUgQjUzX1ZMQU5fQ1RSTDYJCQkweDA3CisjZGVmaW5lIEI1M19WTEFOX0NUUkw2XzYzWFgJCTB4MDgKKworLyogVkxBTiBUYWJsZSBBY2Nlc3MgUmVnaXN0ZXIgKDE2IGJpdCkgKi8KKyNkZWZpbmUgQjUzX1ZMQU5fVEFCTEVfQUNDRVNTXzI1CTB4MDYJLyogQkNNNTMyNUUvNTM1MCAqLworI2RlZmluZSBCNTNfVkxBTl9UQUJMRV9BQ0NFU1NfNjUJMHgwOAkvKiBCQ001MzY1ICovCisjZGVmaW5lICAgVlRBX1ZJRF9MT1dfTUFTS18yNQkJMHhmCisjZGVmaW5lICAgVlRBX1ZJRF9MT1dfTUFTS182NQkJMHhmZgorI2RlZmluZSAgIFZUQV9WSURfSElHSF9TXzI1CQk0CisjZGVmaW5lICAgVlRBX1ZJRF9ISUdIX1NfNjUJCTgKKyNkZWZpbmUgICBWVEFfVklEX0hJR0hfTUFTS18yNQkJKDB4ZmYgPDwgVlRBX1ZJRF9ISUdIX1NfMjVFKQorI2RlZmluZSAgIFZUQV9WSURfSElHSF9NQVNLXzY1CQkoMHhmIDw8IFZUQV9WSURfSElHSF9TXzY1KQorI2RlZmluZSAgIFZUQV9SV19TVEFURQkJCUJJVCgxMikKKyNkZWZpbmUgICBWVEFfUldfU1RBVEVfUkQJCTAKKyNkZWZpbmUgICBWVEFfUldfU1RBVEVfV1IJCUJJVCgxMikKKyNkZWZpbmUgICBWVEFfUldfT1BfRU4JCQlCSVQoMTMpCisKKy8qIFZMQU4gUmVhZC9Xcml0ZSBSZWdpc3RlcnMgZm9yICgxNi8zMiBiaXQpICovCisjZGVmaW5lIEI1M19WTEFOX1dSSVRFXzI1CQkweDA4CisjZGVmaW5lIEI1M19WTEFOX1dSSVRFXzY1CQkweDBhCisjZGVmaW5lIEI1M19WTEFOX1JFQUQJCQkweDBjCisjZGVmaW5lICAgVkFfTUVNQkVSX01BU0sJCTB4M2YKKyNkZWZpbmUgICBWQV9VTlRBR19TXzI1CQkJNgorI2RlZmluZSAgIFZBX1VOVEFHX01BU0tfMjUJCTB4M2YKKyNkZWZpbmUgICBWQV9VTlRBR19TXzY1CQkJNworI2RlZmluZSAgIFZBX1VOVEFHX01BU0tfNjUJCTB4MWYKKyNkZWZpbmUgICBWQV9WSURfSElHSF9TCQkJMTIKKyNkZWZpbmUgICBWQV9WSURfSElHSF9NQVNLCQkoMHhmZmZmIDw8IFZBX1ZJRF9ISUdIX1MpCisjZGVmaW5lICAgVkFfVkFMSURfMjUJCQlCSVQoMjApCisjZGVmaW5lICAgVkFfVkFMSURfMjVfUjQJCUJJVCgyNCkKKyNkZWZpbmUgICBWQV9WQUxJRF82NQkJCUJJVCgxNCkKKworLyogVkxBTiBQb3J0IERlZmF1bHQgVGFnICgxNiBiaXQpICovCisjZGVmaW5lIEI1M19WTEFOX1BPUlRfREVGX1RBRyhpKQkoMHgxMCArIDIgKiAoaSkpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBKdW1ibyBGcmFtZSBQYWdlIFJlZ2lzdGVycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEp1bWJvIEVuYWJsZSBQb3J0IE1hc2sgKGJpdCBpID09IHBvcnQgaSBlbmFibGVkKSAoMzIgYml0KSAqLworI2RlZmluZSBCNTNfSlVNQk9fUE9SVF9NQVNLCQkweDAxCisjZGVmaW5lIEI1M19KVU1CT19QT1JUX01BU0tfNjNYWAkweDA0CisjZGVmaW5lICAgSlBNXzEwXzEwMF9KVU1CT19FTgkJQklUKDI0KSAvKiBHaWdFIGFsd2F5cyBlbmFibGVkICovCisKKy8qIEdvb2QgRnJhbWUgTWF4IFNpemUgd2l0aG91dCA4MDIuMVEgVEFHICgxNiBiaXQpICovCisjZGVmaW5lIEI1M19KVU1CT19NQVhfU0laRQkJMHgwNQorI2RlZmluZSBCNTNfSlVNQk9fTUFYX1NJWkVfNjNYWAkJMHgwOAorI2RlZmluZSAgIEpNU19NSU5fU0laRQkJCTE1MTgKKyNkZWZpbmUgICBKTVNfTUFYX1NJWkUJCQk5NzI0CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDRlAgQ29uZmlndXJhdGlvbiBQYWdlIFJlZ2lzdGVycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIENGUCBDb250cm9sIFJlZ2lzdGVyIHdpdGggcG9ydHMgbWFwICg4IGJpdCkgKi8KKyNkZWZpbmUgQjUzX0NGUF9DVFJMCQkJMHgwMAorCisjZW5kaWYgLyogIV9fQjUzX1JFR1NfSCAqLwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9uZXQvcGh5L2I1My9iNTNfc3BpLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL25ldC9waHkvYjUzL2I1M19zcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmM4ZjdlCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9uZXQvcGh5L2I1My9iNTNfc3BpLmMKQEAgLTAsMCArMSwzNDQgQEAKKy8qCisgKiBCNTMgcmVnaXN0ZXIgYWNjZXNzIHRocm91Z2ggU1BJCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgSm9uYXMgR29yc2tpIDxqb2dvQG9wZW53cnQub3JnPgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2I1My5oPgorCisjaW5jbHVkZSAiYjUzX3ByaXYuaCIKKworI2RlZmluZSBCNTNfU1BJX0RBVEEJCTB4ZjAKKworI2RlZmluZSBCNTNfU1BJX1NUQVRVUwkJMHhmZQorI2RlZmluZSBCNTNfU1BJX0NNRF9TUElGCUJJVCg3KQorI2RlZmluZSBCNTNfU1BJX0NNRF9SQUNLCUJJVCg1KQorCisjZGVmaW5lIEI1M19TUElfQ01EX1JFQUQJMHgwMAorI2RlZmluZSBCNTNfU1BJX0NNRF9XUklURQkweDAxCisjZGVmaW5lIEI1M19TUElfQ01EX05PUk1BTAkweDYwCisjZGVmaW5lIEI1M19TUElfQ01EX0ZBU1QJMHgxMAorCisjZGVmaW5lIEI1M19TUElfUEFHRV9TRUxFQ1QJMHhmZgorCitzdGF0aWMgaW5saW5lIGludCBiNTNfc3BpX3JlYWRfcmVnKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHU4IHJlZywgdTggKnZhbCwKKwkJCQkgICAgIHVuc2lnbmVkIGxlbikKK3sKKwl1OCB0eGJ1ZlsyXTsKKworCXR4YnVmWzBdID0gQjUzX1NQSV9DTURfTk9STUFMIHwgQjUzX1NQSV9DTURfUkVBRDsKKwl0eGJ1ZlsxXSA9IHJlZzsKKworCXJldHVybiBzcGlfd3JpdGVfdGhlbl9yZWFkKHNwaSwgdHhidWYsIDIsIHZhbCwgbGVuKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYjUzX3NwaV9jbGVhcl9zdGF0dXMoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1OCByeGJ1ZjsKKwlpbnQgcmV0OworCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJcmV0ID0gYjUzX3NwaV9yZWFkX3JlZyhzcGksIEI1M19TUElfU1RBVFVTLCAmcnhidWYsIDEpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlpZiAoIShyeGJ1ZiAmIEI1M19TUElfQ01EX1NQSUYpKQorCQkJYnJlYWs7CisKKwkJbWRlbGF5KDEpOworCX0KKworCWlmIChpID09IDEwKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBiNTNfc3BpX3NldF9wYWdlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHU4IHBhZ2UpCit7CisJdTggdHhidWZbM107CisKKwl0eGJ1ZlswXSA9IEI1M19TUElfQ01EX05PUk1BTCB8IEI1M19TUElfQ01EX1dSSVRFOworCXR4YnVmWzFdID0gQjUzX1NQSV9QQUdFX1NFTEVDVDsKKwl0eGJ1ZlsyXSA9IHBhZ2U7CisKKwlyZXR1cm4gc3BpX3dyaXRlKHNwaSwgdHhidWYsIHNpemVvZih0eGJ1ZikpOworfQorCitzdGF0aWMgaW5saW5lIGludCBiNTNfcHJlcGFyZV9yZWdfYWNjZXNzKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHU4IHBhZ2UpCit7CisJaW50IHJldCA9IGI1M19zcGlfY2xlYXJfc3RhdHVzKHNwaSk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIGI1M19zcGlfc2V0X3BhZ2Uoc3BpLCBwYWdlKTsKK30KKworc3RhdGljIGludCBiNTNfc3BpX3ByZXBhcmVfcmVnX3JlYWQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgdTggcmVnKQoreworCXU4IHJ4YnVmOworCWludCByZXRyeV9jb3VudDsKKwlpbnQgcmV0OworCisJcmV0ID0gYjUzX3NwaV9yZWFkX3JlZyhzcGksIHJlZywgJnJ4YnVmLCAxKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZm9yIChyZXRyeV9jb3VudCA9IDA7IHJldHJ5X2NvdW50IDwgMTA7IHJldHJ5X2NvdW50KyspIHsKKwkJcmV0ID0gYjUzX3NwaV9yZWFkX3JlZyhzcGksIEI1M19TUElfU1RBVFVTLCAmcnhidWYsIDEpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlpZiAocnhidWYgJiBCNTNfU1BJX0NNRF9SQUNLKQorCQkJYnJlYWs7CisKKwkJbWRlbGF5KDEpOworCX0KKworCWlmIChyZXRyeV9jb3VudCA9PSAxMCkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiNTNfc3BpX3JlYWQoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgdTggcGFnZSwgdTggcmVnLCB1OCAqZGF0YSwKKwkJCXVuc2lnbmVkIGxlbikKK3sKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gZGV2LT5wcml2OworCWludCByZXQ7CisKKwlyZXQgPSBiNTNfcHJlcGFyZV9yZWdfYWNjZXNzKHNwaSwgcGFnZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGI1M19zcGlfcHJlcGFyZV9yZWdfcmVhZChzcGksIHJlZyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBiNTNfc3BpX3JlYWRfcmVnKHNwaSwgQjUzX1NQSV9EQVRBLCBkYXRhLCBsZW4pOworfQorCitzdGF0aWMgaW50IGI1M19zcGlfcmVhZDgoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgdTggcGFnZSwgdTggcmVnLCB1OCAqdmFsKQoreworCXJldHVybiBiNTNfc3BpX3JlYWQoZGV2LCBwYWdlLCByZWcsIHZhbCwgMSk7Cit9CisKK3N0YXRpYyBpbnQgYjUzX3NwaV9yZWFkMTYoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgdTggcGFnZSwgdTggcmVnLCB1MTYgKnZhbCkKK3sKKwlpbnQgcmV0ID0gYjUzX3NwaV9yZWFkKGRldiwgcGFnZSwgcmVnLCAodTggKil2YWwsIDIpOworCisJaWYgKCFyZXQpCisJCSp2YWwgPSBsZTE2X3RvX2NwdSgqdmFsKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYjUzX3NwaV9yZWFkMzIoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgdTggcGFnZSwgdTggcmVnLCB1MzIgKnZhbCkKK3sKKwlpbnQgcmV0ID0gYjUzX3NwaV9yZWFkKGRldiwgcGFnZSwgcmVnLCAodTggKil2YWwsIDQpOworCisJaWYgKCFyZXQpCisJCSp2YWwgPSBsZTMyX3RvX2NwdSgqdmFsKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYjUzX3NwaV9yZWFkNDgoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgdTggcGFnZSwgdTggcmVnLCB1NjQgKnZhbCkKK3sKKwlpbnQgcmV0OworCisJKnZhbCA9IDA7CisJcmV0ID0gYjUzX3NwaV9yZWFkKGRldiwgcGFnZSwgcmVnLCAodTggKil2YWwsIDYpOworCWlmICghcmV0KQorCQkqdmFsID0gbGU2NF90b19jcHUoKnZhbCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGI1M19zcGlfcmVhZDY0KHN0cnVjdCBiNTNfZGV2aWNlICpkZXYsIHU4IHBhZ2UsIHU4IHJlZywgdTY0ICp2YWwpCit7CisJaW50IHJldCA9IGI1M19zcGlfcmVhZChkZXYsIHBhZ2UsIHJlZywgKHU4ICopdmFsLCA4KTsKKworCWlmICghcmV0KQorCQkqdmFsID0gbGU2NF90b19jcHUoKnZhbCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGI1M19zcGlfd3JpdGU4KHN0cnVjdCBiNTNfZGV2aWNlICpkZXYsIHU4IHBhZ2UsIHU4IHJlZywgdTggdmFsdWUpCit7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IGRldi0+cHJpdjsKKwlpbnQgcmV0OworCXU4IHR4YnVmWzNdOworCisJcmV0ID0gYjUzX3ByZXBhcmVfcmVnX2FjY2VzcyhzcGksIHBhZ2UpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl0eGJ1ZlswXSA9IEI1M19TUElfQ01EX05PUk1BTCB8IEI1M19TUElfQ01EX1dSSVRFOworCXR4YnVmWzFdID0gcmVnOworCXR4YnVmWzJdID0gdmFsdWU7CisKKwlyZXR1cm4gc3BpX3dyaXRlKHNwaSwgdHhidWYsIHNpemVvZih0eGJ1ZikpOworfQorCitzdGF0aWMgaW50IGI1M19zcGlfd3JpdGUxNihzdHJ1Y3QgYjUzX2RldmljZSAqZGV2LCB1OCBwYWdlLCB1OCByZWcsIHUxNiB2YWx1ZSkKK3sKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gZGV2LT5wcml2OworCWludCByZXQ7CisJdTggdHhidWZbNF07CisKKwlyZXQgPSBiNTNfcHJlcGFyZV9yZWdfYWNjZXNzKHNwaSwgcGFnZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXR4YnVmWzBdID0gQjUzX1NQSV9DTURfTk9STUFMIHwgQjUzX1NQSV9DTURfV1JJVEU7CisJdHhidWZbMV0gPSByZWc7CisJcHV0X3VuYWxpZ25lZF9sZTE2KHZhbHVlLCAmdHhidWZbMl0pOworCisJcmV0dXJuIHNwaV93cml0ZShzcGksIHR4YnVmLCBzaXplb2YodHhidWYpKTsKK30KKworc3RhdGljIGludCBiNTNfc3BpX3dyaXRlMzIoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgdTggcGFnZSwgdTggcmVnLCB1MzIgdmFsdWUpCit7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IGRldi0+cHJpdjsKKwlpbnQgcmV0OworCXU4IHR4YnVmWzZdOworCisJcmV0ID0gYjUzX3ByZXBhcmVfcmVnX2FjY2VzcyhzcGksIHBhZ2UpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl0eGJ1ZlswXSA9IEI1M19TUElfQ01EX05PUk1BTCB8IEI1M19TUElfQ01EX1dSSVRFOworCXR4YnVmWzFdID0gcmVnOworCXB1dF91bmFsaWduZWRfbGUzMih2YWx1ZSwgJnR4YnVmWzJdKTsKKworCXJldHVybiBzcGlfd3JpdGUoc3BpLCB0eGJ1Ziwgc2l6ZW9mKHR4YnVmKSk7Cit9CisKK3N0YXRpYyBpbnQgYjUzX3NwaV93cml0ZTQ4KHN0cnVjdCBiNTNfZGV2aWNlICpkZXYsIHU4IHBhZ2UsIHU4IHJlZywgdTY0IHZhbHVlKQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBkZXYtPnByaXY7CisJaW50IHJldDsKKwl1OCB0eGJ1ZlsxMF07CisKKwlyZXQgPSBiNTNfcHJlcGFyZV9yZWdfYWNjZXNzKHNwaSwgcGFnZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXR4YnVmWzBdID0gQjUzX1NQSV9DTURfTk9STUFMIHwgQjUzX1NQSV9DTURfV1JJVEU7CisJdHhidWZbMV0gPSByZWc7CisJcHV0X3VuYWxpZ25lZF9sZTY0KHZhbHVlLCAmdHhidWZbMl0pOworCisJcmV0dXJuIHNwaV93cml0ZShzcGksIHR4YnVmLCBzaXplb2YodHhidWYpIC0gMik7Cit9CisKK3N0YXRpYyBpbnQgYjUzX3NwaV93cml0ZTY0KHN0cnVjdCBiNTNfZGV2aWNlICpkZXYsIHU4IHBhZ2UsIHU4IHJlZywgdTY0IHZhbHVlKQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBkZXYtPnByaXY7CisJaW50IHJldDsKKwl1OCB0eGJ1ZlsxMF07CisKKwlyZXQgPSBiNTNfcHJlcGFyZV9yZWdfYWNjZXNzKHNwaSwgcGFnZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXR4YnVmWzBdID0gQjUzX1NQSV9DTURfTk9STUFMIHwgQjUzX1NQSV9DTURfV1JJVEU7CisJdHhidWZbMV0gPSByZWc7CisJcHV0X3VuYWxpZ25lZF9sZTY0KHZhbHVlLCAmdHhidWZbMl0pOworCisJcmV0dXJuIHNwaV93cml0ZShzcGksIHR4YnVmLCBzaXplb2YodHhidWYpKTsKK30KKworc3RhdGljIHN0cnVjdCBiNTNfaW9fb3BzIGI1M19zcGlfb3BzID0geworCS5yZWFkOCA9IGI1M19zcGlfcmVhZDgsCisJLnJlYWQxNiA9IGI1M19zcGlfcmVhZDE2LAorCS5yZWFkMzIgPSBiNTNfc3BpX3JlYWQzMiwKKwkucmVhZDQ4ID0gYjUzX3NwaV9yZWFkNDgsCisJLnJlYWQ2NCA9IGI1M19zcGlfcmVhZDY0LAorCS53cml0ZTggPSBiNTNfc3BpX3dyaXRlOCwKKwkud3JpdGUxNiA9IGI1M19zcGlfd3JpdGUxNiwKKwkud3JpdGUzMiA9IGI1M19zcGlfd3JpdGUzMiwKKwkud3JpdGU0OCA9IGI1M19zcGlfd3JpdGU0OCwKKwkud3JpdGU2NCA9IGI1M19zcGlfd3JpdGU2NCwKK307CisKK3N0YXRpYyBpbnQgYjUzX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBiNTNfZGV2aWNlICpkZXY7CisJaW50IHJldDsKKworCWRldiA9IGI1M19zd2l0Y2hfYWxsb2MoJnNwaS0+ZGV2LCAmYjUzX3NwaV9vcHMsIHNwaSk7CisJaWYgKCFkZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHNwaS0+ZGV2LnBsYXRmb3JtX2RhdGEpCisJCWRldi0+cGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOworCisJcmV0ID0gYjUzX3N3aXRjaF9yZWdpc3RlcihkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzcGlfc2V0X2RydmRhdGEoc3BpLCBkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYjUzX3NwaV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgYjUzX2RldmljZSAqZGV2ID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7CisKKwlpZiAoZGV2KQorCQliNTNfc3dpdGNoX3JlbW92ZShkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGI1M19vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiYnJjbSxiY201MzI1IiB9LAorCXsgLmNvbXBhdGlibGUgPSAiYnJjbSxiY201MzExNSIgfSwKKwl7IC5jb21wYXRpYmxlID0gImJyY20sYmNtNTMxMjUiIH0sCisJeyAuY29tcGF0aWJsZSA9ICJicmNtLGJjbTUzMTI4IiB9LAorCXsgLmNvbXBhdGlibGUgPSAiYnJjbSxiY201MzY1IiB9LAorCXsgLmNvbXBhdGlibGUgPSAiYnJjbSxiY201Mzk1IiB9LAorCXsgLmNvbXBhdGlibGUgPSAiYnJjbSxiY201Mzk3IiB9LAorCXsgLmNvbXBhdGlibGUgPSAiYnJjbSxiY201Mzk4IiB9LAorCXsgLyogc2VudGluZWwgKi8gfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBiNTNfc3BpX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJiNTMtc3dpdGNoIiwKKwkJLmJ1cwk9ICZzcGlfYnVzX3R5cGUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBiNTNfb2ZfbWF0Y2gsCisJfSwKKwkucHJvYmUJPSBiNTNfc3BpX3Byb2JlLAorCS5yZW1vdmUJPSBiNTNfc3BpX3JlbW92ZSwKK307CisKK21vZHVsZV9zcGlfZHJpdmVyKGI1M19zcGlfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiSm9uYXMgR29yc2tpIDxqb2dvQG9wZW53cnQub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJCNTMgU1BJIGFjY2VzcyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9iNTMvYjUzX3NyYWIuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9iNTMvYjUzX3NyYWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTJkYWEzCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9uZXQvcGh5L2I1My9iNTNfc3JhYi5jCkBAIC0wLDAgKzEsMzc4IEBACisvKgorICogQjUzIHJlZ2lzdGVyIGFjY2VzcyB0aHJvdWdoIFN3aXRjaCBSZWdpc3RlciBBY2Nlc3MgQnJpZGdlIFJlZ2lzdGVycworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBIYXVrZSBNZWhydGVucyA8aGF1a2VAaGF1a2UtbS5kZT4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9iNTMuaD4KKworI2luY2x1ZGUgImI1M19wcml2LmgiCisKKy8qIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiB0aGUgU1JBQiAqLworI2RlZmluZSBCNTNfU1JBQl9DTURTVEFUCQkweDJjCisjZGVmaW5lICBCNTNfU1JBQl9DTURTVEFUX1JTVAkJQklUKDIpCisjZGVmaW5lICBCNTNfU1JBQl9DTURTVEFUX1dSSVRFCQlCSVQoMSkKKyNkZWZpbmUgIEI1M19TUkFCX0NNRFNUQVRfR09SRFlOCUJJVCgwKQorI2RlZmluZSAgQjUzX1NSQUJfQ01EU1RBVF9QQUdFCQkyNAorI2RlZmluZSAgQjUzX1NSQUJfQ01EU1RBVF9SRUcJCTE2CisKKy8qIGhpZ2ggb3JkZXIgd29yZCBvZiB3cml0ZSBkYXRhIHRvIHN3aXRjaCByZWdpc3RlICovCisjZGVmaW5lIEI1M19TUkFCX1dEX0gJCQkweDMwCisKKy8qIGxvdyBvcmRlciB3b3JkIG9mIHdyaXRlIGRhdGEgdG8gc3dpdGNoIHJlZ2lzdGUgKi8KKyNkZWZpbmUgQjUzX1NSQUJfV0RfTAkJCTB4MzQKKworLyogaGlnaCBvcmRlciB3b3JkIG9mIHJlYWQgZGF0YSBmcm9tIHN3aXRjaCByZWdpc3RlciAqLworI2RlZmluZSBCNTNfU1JBQl9SRF9ICQkJMHgzOAorCisvKiBsb3cgb3JkZXIgd29yZCBvZiByZWFkIGRhdGEgZnJvbSBzd2l0Y2ggcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQjUzX1NSQUJfUkRfTAkJCTB4M2MKKworLyogY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHRoZSBTUkFCICovCisjZGVmaW5lIEI1M19TUkFCX0NUUkxTCQkJMHg0MAorI2RlZmluZSAgQjUzX1NSQUJfQ1RSTFNfUkNBUkVRCQlCSVQoMykKKyNkZWZpbmUgIEI1M19TUkFCX0NUUkxTX1JDQUdOVAkJQklUKDQpCisjZGVmaW5lICBCNTNfU1JBQl9DVFJMU19TV19JTklUX0RPTkUJQklUKDYpCisKKy8qIHRoZSByZWdpc3RlciBjYXB0dXJlcyBpbnRlcnJ1cHQgcHVsc2VzIGZyb20gdGhlIHN3aXRjaCAqLworI2RlZmluZSBCNTNfU1JBQl9JTlRSCQkJMHg0NAorCitzdGF0aWMgaW50IGI1M19zcmFiX3JlcXVlc3RfZ3JhbnQoc3RydWN0IGI1M19kZXZpY2UgKmRldikKK3sKKwl1OCBfX2lvbWVtICpyZWdzID0gZGV2LT5wcml2OworCXUzMiBjdHJsczsKKwlpbnQgaTsKKworCWN0cmxzID0gcmVhZGwocmVncyArIEI1M19TUkFCX0NUUkxTKTsKKwljdHJscyB8PSBCNTNfU1JBQl9DVFJMU19SQ0FSRVE7CisJd3JpdGVsKGN0cmxzLCByZWdzICsgQjUzX1NSQUJfQ1RSTFMpOworCisJZm9yIChpID0gMDsgaSA8IDIwOyBpKyspIHsKKwkJY3RybHMgPSByZWFkbChyZWdzICsgQjUzX1NSQUJfQ1RSTFMpOworCQlpZiAoY3RybHMgJiBCNTNfU1JBQl9DVFJMU19SQ0FHTlQpCisJCQlicmVhazsKKwkJdXNsZWVwX3JhbmdlKDEwLCAxMDApOworCX0KKwlpZiAoV0FSTl9PTihpID09IDUpKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBiNTNfc3JhYl9yZWxlYXNlX2dyYW50KHN0cnVjdCBiNTNfZGV2aWNlICpkZXYpCit7CisJdTggX19pb21lbSAqcmVncyA9IGRldi0+cHJpdjsKKwl1MzIgY3RybHM7CisKKwljdHJscyA9IHJlYWRsKHJlZ3MgKyBCNTNfU1JBQl9DVFJMUyk7CisJY3RybHMgJj0gfkI1M19TUkFCX0NUUkxTX1JDQVJFUTsKKwl3cml0ZWwoY3RybHMsIHJlZ3MgKyBCNTNfU1JBQl9DVFJMUyk7Cit9CisKK3N0YXRpYyBpbnQgYjUzX3NyYWJfb3Aoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgdTggcGFnZSwgdTggcmVnLCB1MzIgb3ApCit7CisJaW50IGk7CisJdTMyIGNtZHN0YXQ7CisJdTggX19pb21lbSAqcmVncyA9IGRldi0+cHJpdjsKKworCS8qIHNldCByZWdpc3RlciBhZGRyZXNzICovCisJY21kc3RhdCA9IChwYWdlIDw8IEI1M19TUkFCX0NNRFNUQVRfUEFHRSkgfAorCQkgIChyZWcgPDwgQjUzX1NSQUJfQ01EU1RBVF9SRUcpIHwKKwkJICBCNTNfU1JBQl9DTURTVEFUX0dPUkRZTiB8CisJCSAgb3A7CisJd3JpdGVsKGNtZHN0YXQsIHJlZ3MgKyBCNTNfU1JBQl9DTURTVEFUKTsKKworCS8qIGNoZWNrIGlmIG9wZXJhdGlvbiBjb21wbGV0ZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgNTsgKytpKSB7CisJCWNtZHN0YXQgPSByZWFkbChyZWdzICsgQjUzX1NSQUJfQ01EU1RBVCk7CisJCWlmICghKGNtZHN0YXQgJiBCNTNfU1JBQl9DTURTVEFUX0dPUkRZTikpCisJCQlicmVhazsKKwkJdXNsZWVwX3JhbmdlKDEwLCAxMDApOworCX0KKworCWlmIChXQVJOX09OKGkgPT0gNSkpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYjUzX3NyYWJfcmVhZDgoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgdTggcGFnZSwgdTggcmVnLCB1OCAqdmFsKQoreworCXU4IF9faW9tZW0gKnJlZ3MgPSBkZXYtPnByaXY7CisJaW50IHJldCA9IDA7CisKKwlyZXQgPSBiNTNfc3JhYl9yZXF1ZXN0X2dyYW50KGRldik7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlyZXQgPSBiNTNfc3JhYl9vcChkZXYsIHBhZ2UsIHJlZywgMCk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwkqdmFsID0gcmVhZGwocmVncyArIEI1M19TUkFCX1JEX0wpICYgMHhmZjsKKworZXJyOgorCWI1M19zcmFiX3JlbGVhc2VfZ3JhbnQoZGV2KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYjUzX3NyYWJfcmVhZDE2KHN0cnVjdCBiNTNfZGV2aWNlICpkZXYsIHU4IHBhZ2UsIHU4IHJlZywgdTE2ICp2YWwpCit7CisJdTggX19pb21lbSAqcmVncyA9IGRldi0+cHJpdjsKKwlpbnQgcmV0ID0gMDsKKworCXJldCA9IGI1M19zcmFiX3JlcXVlc3RfZ3JhbnQoZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCXJldCA9IGI1M19zcmFiX29wKGRldiwgcGFnZSwgcmVnLCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCSp2YWwgPSByZWFkbChyZWdzICsgQjUzX1NSQUJfUkRfTCkgJiAweGZmZmY7CisKK2VycjoKKwliNTNfc3JhYl9yZWxlYXNlX2dyYW50KGRldik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGI1M19zcmFiX3JlYWQzMihzdHJ1Y3QgYjUzX2RldmljZSAqZGV2LCB1OCBwYWdlLCB1OCByZWcsIHUzMiAqdmFsKQoreworCXU4IF9faW9tZW0gKnJlZ3MgPSBkZXYtPnByaXY7CisJaW50IHJldCA9IDA7CisKKwlyZXQgPSBiNTNfc3JhYl9yZXF1ZXN0X2dyYW50KGRldik7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlyZXQgPSBiNTNfc3JhYl9vcChkZXYsIHBhZ2UsIHJlZywgMCk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwkqdmFsID0gcmVhZGwocmVncyArIEI1M19TUkFCX1JEX0wpOworCitlcnI6CisJYjUzX3NyYWJfcmVsZWFzZV9ncmFudChkZXYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBiNTNfc3JhYl9yZWFkNDgoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgdTggcGFnZSwgdTggcmVnLCB1NjQgKnZhbCkKK3sKKwl1OCBfX2lvbWVtICpyZWdzID0gZGV2LT5wcml2OworCWludCByZXQgPSAwOworCisJcmV0ID0gYjUzX3NyYWJfcmVxdWVzdF9ncmFudChkZXYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJcmV0ID0gYjUzX3NyYWJfb3AoZGV2LCBwYWdlLCByZWcsIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJKnZhbCA9IHJlYWRsKHJlZ3MgKyBCNTNfU1JBQl9SRF9MKTsKKwkqdmFsICs9ICgodTY0KXJlYWRsKHJlZ3MgKyBCNTNfU1JBQl9SRF9IKSAmIDB4ZmZmZikgPDwgMzI7CisKK2VycjoKKwliNTNfc3JhYl9yZWxlYXNlX2dyYW50KGRldik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGI1M19zcmFiX3JlYWQ2NChzdHJ1Y3QgYjUzX2RldmljZSAqZGV2LCB1OCBwYWdlLCB1OCByZWcsIHU2NCAqdmFsKQoreworCXU4IF9faW9tZW0gKnJlZ3MgPSBkZXYtPnByaXY7CisJaW50IHJldCA9IDA7CisKKwlyZXQgPSBiNTNfc3JhYl9yZXF1ZXN0X2dyYW50KGRldik7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlyZXQgPSBiNTNfc3JhYl9vcChkZXYsIHBhZ2UsIHJlZywgMCk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwkqdmFsID0gcmVhZGwocmVncyArIEI1M19TUkFCX1JEX0wpOworCSp2YWwgKz0gKHU2NClyZWFkbChyZWdzICsgQjUzX1NSQUJfUkRfSCkgPDwgMzI7CisKK2VycjoKKwliNTNfc3JhYl9yZWxlYXNlX2dyYW50KGRldik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGI1M19zcmFiX3dyaXRlOChzdHJ1Y3QgYjUzX2RldmljZSAqZGV2LCB1OCBwYWdlLCB1OCByZWcsIHU4IHZhbHVlKQoreworCXU4IF9faW9tZW0gKnJlZ3MgPSBkZXYtPnByaXY7CisJaW50IHJldCA9IDA7CisKKwlyZXQgPSBiNTNfc3JhYl9yZXF1ZXN0X2dyYW50KGRldik7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwl3cml0ZWwodmFsdWUsIHJlZ3MgKyBCNTNfU1JBQl9XRF9MKTsKKworCXJldCA9IGI1M19zcmFiX29wKGRldiwgcGFnZSwgcmVnLCBCNTNfU1JBQl9DTURTVEFUX1dSSVRFKTsKKworZXJyOgorCWI1M19zcmFiX3JlbGVhc2VfZ3JhbnQoZGV2KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYjUzX3NyYWJfd3JpdGUxNihzdHJ1Y3QgYjUzX2RldmljZSAqZGV2LCB1OCBwYWdlLCB1OCByZWcsCisJCQkgICAgIHUxNiB2YWx1ZSkKK3sKKwl1OCBfX2lvbWVtICpyZWdzID0gZGV2LT5wcml2OworCWludCByZXQgPSAwOworCisJcmV0ID0gYjUzX3NyYWJfcmVxdWVzdF9ncmFudChkZXYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJd3JpdGVsKHZhbHVlLCByZWdzICsgQjUzX1NSQUJfV0RfTCk7CisKKwlyZXQgPSBiNTNfc3JhYl9vcChkZXYsIHBhZ2UsIHJlZywgQjUzX1NSQUJfQ01EU1RBVF9XUklURSk7CisKK2VycjoKKwliNTNfc3JhYl9yZWxlYXNlX2dyYW50KGRldik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGI1M19zcmFiX3dyaXRlMzIoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgdTggcGFnZSwgdTggcmVnLAorCQkJCSAgICB1MzIgdmFsdWUpCit7CisJdTggX19pb21lbSAqcmVncyA9IGRldi0+cHJpdjsKKwlpbnQgcmV0ID0gMDsKKworCXJldCA9IGI1M19zcmFiX3JlcXVlc3RfZ3JhbnQoZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCXdyaXRlbCh2YWx1ZSwgcmVncyArIEI1M19TUkFCX1dEX0wpOworCisJcmV0ID0gYjUzX3NyYWJfb3AoZGV2LCBwYWdlLCByZWcsIEI1M19TUkFCX0NNRFNUQVRfV1JJVEUpOworCitlcnI6CisJYjUzX3NyYWJfcmVsZWFzZV9ncmFudChkZXYpOworCisJcmV0dXJuIHJldDsKKworfQorCitzdGF0aWMgaW50IGI1M19zcmFiX3dyaXRlNDgoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgdTggcGFnZSwgdTggcmVnLAorCQkJCSAgICB1NjQgdmFsdWUpCit7CisJdTggX19pb21lbSAqcmVncyA9IGRldi0+cHJpdjsKKwlpbnQgcmV0ID0gMDsKKworCXJldCA9IGI1M19zcmFiX3JlcXVlc3RfZ3JhbnQoZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCXdyaXRlbCgodTMyKXZhbHVlLCByZWdzICsgQjUzX1NSQUJfV0RfTCk7CisJd3JpdGVsKCh1MTYpKHZhbHVlID4+IDMyKSwgcmVncyArIEI1M19TUkFCX1dEX0gpOworCisJcmV0ID0gYjUzX3NyYWJfb3AoZGV2LCBwYWdlLCByZWcsIEI1M19TUkFCX0NNRFNUQVRfV1JJVEUpOworCitlcnI6CisJYjUzX3NyYWJfcmVsZWFzZV9ncmFudChkZXYpOworCisJcmV0dXJuIHJldDsKKworfQorCitzdGF0aWMgaW50IGI1M19zcmFiX3dyaXRlNjQoc3RydWN0IGI1M19kZXZpY2UgKmRldiwgdTggcGFnZSwgdTggcmVnLAorCQkJICAgICB1NjQgdmFsdWUpCit7CisJdTggX19pb21lbSAqcmVncyA9IGRldi0+cHJpdjsKKwlpbnQgcmV0ID0gMDsKKworCXJldCA9IGI1M19zcmFiX3JlcXVlc3RfZ3JhbnQoZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCXdyaXRlbCgodTMyKXZhbHVlLCByZWdzICsgQjUzX1NSQUJfV0RfTCk7CisJd3JpdGVsKCh1MzIpKHZhbHVlID4+IDMyKSwgcmVncyArIEI1M19TUkFCX1dEX0gpOworCisJcmV0ID0gYjUzX3NyYWJfb3AoZGV2LCBwYWdlLCByZWcsIEI1M19TUkFCX0NNRFNUQVRfV1JJVEUpOworCitlcnI6CisJYjUzX3NyYWJfcmVsZWFzZV9ncmFudChkZXYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBiNTNfaW9fb3BzIGI1M19zcmFiX29wcyA9IHsKKwkucmVhZDggPSBiNTNfc3JhYl9yZWFkOCwKKwkucmVhZDE2ID0gYjUzX3NyYWJfcmVhZDE2LAorCS5yZWFkMzIgPSBiNTNfc3JhYl9yZWFkMzIsCisJLnJlYWQ0OCA9IGI1M19zcmFiX3JlYWQ0OCwKKwkucmVhZDY0ID0gYjUzX3NyYWJfcmVhZDY0LAorCS53cml0ZTggPSBiNTNfc3JhYl93cml0ZTgsCisJLndyaXRlMTYgPSBiNTNfc3JhYl93cml0ZTE2LAorCS53cml0ZTMyID0gYjUzX3NyYWJfd3JpdGUzMiwKKwkud3JpdGU0OCA9IGI1M19zcmFiX3dyaXRlNDgsCisJLndyaXRlNjQgPSBiNTNfc3JhYl93cml0ZTY0LAorfTsKKworc3RhdGljIGludCBiNTNfc3JhYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBiNTNfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgYjUzX2RldmljZSAqZGV2OworCisJaWYgKCFwZGF0YSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZXYgPSBiNTNfc3dpdGNoX2FsbG9jKCZwZGV2LT5kZXYsICZiNTNfc3JhYl9vcHMsIHBkYXRhLT5yZWdzKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAocGRhdGEpCisJCWRldi0+cGRhdGEgPSBwZGF0YTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CisKKwlyZXR1cm4gYjUzX3N3aXRjaF9yZWdpc3RlcihkZXYpOworfQorCitzdGF0aWMgaW50IGI1M19zcmFiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBiNTNfZGV2aWNlICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmIChkZXYpCisJCWI1M19zd2l0Y2hfcmVtb3ZlKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYjUzX3NyYWJfZHJpdmVyID0geworCS5wcm9iZSA9IGI1M19zcmFiX3Byb2JlLAorCS5yZW1vdmUgPSBiNTNfc3JhYl9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiYjUzLXNyYWItc3dpdGNoIiwKKwl9LAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihiNTNfc3JhYl9kcml2ZXIpOworTU9EVUxFX0FVVEhPUigiSGF1a2UgTWVocnRlbnMgPGhhdWtlQGhhdWtlLW0uZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkI1MyBTd2l0Y2ggUmVnaXN0ZXIgQWNjZXNzIEJyaWRnZSBSZWdpc3RlcnMgKFNSQUIpIGFjY2VzcyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9pcDE3eHguYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9pcDE3eHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzY5ODAzCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9uZXQvcGh5L2lwMTd4eC5jCkBAIC0wLDAgKzEsMTM3MCBAQAorLyoKKyAqIGlwMTd4eC5jOiBTd2NvbmZpZyBjb25maWd1cmF0aW9uIGZvciBJQysgSVAxN3h4IHN3aXRjaCBmYW1pbHkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUGF0cmljayBIb3JuIDxwYXRyaWNrLmhvcm5AZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEwIE1hcnRpbiBNYXJlcyA8bWpAdWN3LmN6PgorICogQ29weXJpZ2h0IChDKSAyMDA5IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3N3aXRjaC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjZGVmaW5lIE1BWF9WTEFOUyAxNgorI2RlZmluZSBNQVhfUE9SVFMgOQorI3VuZGVmIERVTVBfTUlJX0lPCisKK3R5cGVkZWYgc3RydWN0IGlwMTd4eF9yZWcgeworCXUxNiBwOwkJCS8vIHBoeQorCXUxNiBtOwkJCS8vIG1paQorfSByZWc7Cit0eXBlZGVmIGNoYXIgYml0bnVtOworCisjZGVmaW5lIE5PVFNVUFBPUlRFRCB7LTEsLTF9CisKKyNkZWZpbmUgUkVHX1NVUFAoeCkgKCgoeCkubSAhPSAoKHUxNiktMSkpICYmICgoeCkucCAhPSAodTE2KS0xKSkKKworc3RydWN0IGlwMTd4eF9zdGF0ZTsKKworLyoqKioqKioqKioqIENPTlNUQU5UUyAqKioqKioqKioqKi8KK3N0cnVjdCByZWdpc3Rlcl9tYXBwaW5ncyB7CisJY2hhciAqTkFNRTsKKwl1MTYgTU9ERUxfTk87CQkJLy8gQ29tcGFyZSB0byBiaXRzIDQtOSBvZiBNSUkgcmVnaXN0ZXIgMCwzLgorCWJpdG51bSBOVU1fUE9SVFM7CisJYml0bnVtIENQVV9QT1JUOworCisvKiBUaGUgZGVmYXVsdCBWTEFOIGZvciBlYWNoIHBvcnQuCisJIERlZmF1bHQ6IDB4MDAwMSBmb3IgUG9ydHMgMCwxLDIsMworCQkgIDB4MDAwMiBmb3IgUG9ydHMgNCw1ICovCisJcmVnIFZMQU5fREVGQVVMVF9UQUdfUkVHW01BWF9QT1JUU107CisKKy8qIFRoZXNlIHBvcnRzIGFyZSB0YWdnZWQuCisJIERlZmF1bHQ6IDB4MDAgKi8KKwlyZWcgQUREX1RBR19SRUc7CisJcmVnIFJFTU9WRV9UQUdfUkVHOworCWJpdG51bSBBRERfVEFHX0JJVFtNQVhfUE9SVFNdOworLyogVGhlc2UgcG9ydHMgYXJlIHVudGFnZ2VkLgorCSBEZWZhdWx0OiAweDAwIChpLmUuIGRvIG5vdCBhbHRlciBhbnkgVkxBTiB0YWdzLi4uKQorCSBNYXliZSBzZXQgdG8gMCBpZiB1c2VyIGRpc2FibGVzIFZMQU5zLiAqLworCWJpdG51bSBSRU1PVkVfVEFHX0JJVFtNQVhfUE9SVFNdOworCisvKiBQb3J0IE0gYW5kIFBvcnQgTiBhcmUgb24gdGhlIHNhbWUgVkxBTi4KKwkgRGVmYXVsdDogQWxsIHBvcnRzIG9uIGFsbCBWTEFOcy4gKi8KKy8vIFVzZSByZWdpc3RlciB7MjksIDE5K04vMn0KKwlyZWcgVkxBTl9MT09LVVBfUkVHOworLy8gUG9ydCA1IHVzZXMgcmVnaXN0ZXIgezMwLCAxOH0gYnV0IHNhbWUgYXMgb2RkIGJpdHMuCisJcmVnIFZMQU5fTE9PS1VQX1JFR181OwkJLy8gaW4gYSBkaWZmZXJlbnQgcmVnaXN0ZXIgb24gSVAxNzVDLgorCWJpdG51bSBWTEFOX0xPT0tVUF9FVkVOX0JJVFtNQVhfUE9SVFNdOworCWJpdG51bSBWTEFOX0xPT0tVUF9PRERfQklUW01BWF9QT1JUU107CisKKy8qIFRoaXMgVkxBTiBjb3JyZXNwb25kcyB0byB3aGljaCBwb3J0cy4KKwkgRGVmYXVsdDogMHgyZiwweDMwLDB4M2YsMHgzZi4uLiAqLworCXJlZyBUQUdfVkxBTl9NQVNLX1JFRzsKKwliaXRudW0gVEFHX1ZMQU5fTUFTS19FVkVOX0JJVFtNQVhfUE9SVFNdOworCWJpdG51bSBUQUdfVkxBTl9NQVNLX09ERF9CSVRbTUFYX1BPUlRTXTsKKworCWludCBSRVNFVF9WQUw7CisJcmVnIFJFU0VUX1JFRzsKKworCXJlZyBNT0RFX1JFRzsKKwlpbnQgTU9ERV9WQUw7CisKKy8qIEdlbmVyYWwgZmxhZ3MgKi8KKwlyZWcgUk9VVEVSX0NPTlRST0xfUkVHOworCXJlZyBWTEFOX0NPTlRST0xfUkVHOworCWJpdG51bSBUQUdfVkxBTl9CSVQ7CisJYml0bnVtIFJPVVRFUl9FTl9CSVQ7CisJYml0bnVtIE5VTUxBTl9HUk9VUFNfTUFYOworCWJpdG51bSBOVU1MQU5fR1JPVVBTX0JJVDsKKworCXJlZyBNSUlfUkVHSVNURVJfRU47CisJYml0bnVtIE1JSV9SRUdJU1RFUl9FTl9CSVQ7CisKKwkvLyBzZXQgdG8gMSBmb3IgMTc4QywgMCBmb3IgMTc1Qy4KKwliaXRudW0gU0lNUExFX1ZMQU5fUkVHSVNURVJTOwkvLyAxNzVDIGhhcyB0d28gdmxhbnMgcGVyIHJlZ2lzdGVyIGJ1dCAxNzhDIGhhcyBvbmx5IG9uZS4KKworCS8vIFBvaW50ZXJzIHRvIGZ1bmN0aW9ucyB3aGljaCBtYW5pcHVsYXRlIGhhcmR3YXJlIHN0YXRlCisJaW50ICgqdXBkYXRlX3N0YXRlKShzdHJ1Y3QgaXAxN3h4X3N0YXRlICpzdGF0ZSk7CisJaW50ICgqc2V0X3ZsYW5fbW9kZSkoc3RydWN0IGlwMTd4eF9zdGF0ZSAqc3RhdGUpOworCWludCAoKnJlc2V0KShzdHJ1Y3QgaXAxN3h4X3N0YXRlICpzdGF0ZSk7Cit9OworCitzdGF0aWMgaW50IGlwMTc1Y191cGRhdGVfc3RhdGUoc3RydWN0IGlwMTd4eF9zdGF0ZSAqc3RhdGUpOworc3RhdGljIGludCBpcDE3NWNfc2V0X3ZsYW5fbW9kZShzdHJ1Y3QgaXAxN3h4X3N0YXRlICpzdGF0ZSk7CitzdGF0aWMgaW50IGlwMTc1Y19yZXNldChzdHJ1Y3QgaXAxN3h4X3N0YXRlICpzdGF0ZSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnaXN0ZXJfbWFwcGluZ3MgSVAxNzhDID0geworCS5OQU1FID0gIklQMTc4QyIsCisJLk1PREVMX05PID0gMHgxOCwKKwkuVkxBTl9ERUZBVUxUX1RBR19SRUcgPSB7CisJCXszMCwzfSx7MzAsNH0sezMwLDV9LHszMCw2fSx7MzAsN30sezMwLDh9LAorCQl7MzAsOX0sezMwLDEwfSx7MzAsMTF9LAorCX0sCisKKwkuQUREX1RBR19SRUcgPSB7MzAsMTJ9LAorCS5BRERfVEFHX0JJVCA9IHswLDEsMiwzLDQsNSw2LDcsOH0sCisJLlJFTU9WRV9UQUdfUkVHID0gezMwLDEzfSwKKwkuUkVNT1ZFX1RBR19CSVQgPSB7NCw1LDYsNyw4LDksMTAsMTEsMTJ9LAorCisJLlNJTVBMRV9WTEFOX1JFR0lTVEVSUyA9IDEsCisKKwkuVkxBTl9MT09LVVBfUkVHID0gezMxLDB9LC8vICtOCisJLlZMQU5fTE9PS1VQX1JFR181ID0gTk9UU1VQUE9SVEVELCAvLyBub3QgdXNlZCB3aXRoIFNJTVBMRV9WTEFOX1JFR0lTVEVSUworCS5WTEFOX0xPT0tVUF9FVkVOX0JJVCA9IHswLDEsMiwzLDQsNSw2LDcsOH0sCisJLlZMQU5fTE9PS1VQX09ERF9CSVQgPSB7MCwxLDIsMyw0LDUsNiw3LDh9LAorCisJLlRBR19WTEFOX01BU0tfUkVHID0gezMwLDE0fSwgLy8gK04KKwkuVEFHX1ZMQU5fTUFTS19FVkVOX0JJVCA9IHswLDEsMiwzLDQsNSw2LDcsOH0sCisJLlRBR19WTEFOX01BU0tfT0REX0JJVCA9IHswLDEsMiwzLDQsNSw2LDcsOH0sCisKKwkuUkVTRVRfVkFMID0gMHg1NUFBLAorCS5SRVNFVF9SRUcgPSB7MzAsMH0sCisJLk1PREVfVkFMID0gMCwKKwkuTU9ERV9SRUcgPSBOT1RTVVBQT1JURUQsCisKKwkuUk9VVEVSX0NPTlRST0xfUkVHID0gezMwLDMwfSwKKwkuUk9VVEVSX0VOX0JJVCA9IDExLAorCS5OVU1MQU5fR1JPVVBTX01BWCA9IDgsCisJLk5VTUxBTl9HUk9VUFNfQklUID0gOCwgLy8gezAtMn0KKworCS5WTEFOX0NPTlRST0xfUkVHID0gezMwLDEzfSwKKwkuVEFHX1ZMQU5fQklUID0gMywKKworCS5DUFVfUE9SVCA9IDgsCisJLk5VTV9QT1JUUyA9IDksCisKKwkuTUlJX1JFR0lTVEVSX0VOID0gTk9UU1VQUE9SVEVELAorCisJLnVwZGF0ZV9zdGF0ZSA9IGlwMTc1Y191cGRhdGVfc3RhdGUsCisJLnNldF92bGFuX21vZGUgPSBpcDE3NWNfc2V0X3ZsYW5fbW9kZSwKKwkucmVzZXQgPSBpcDE3NWNfcmVzZXQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ2lzdGVyX21hcHBpbmdzIElQMTc1QyA9IHsKKwkuTkFNRSA9ICJJUDE3NUMiLAorCS5NT0RFTF9OTyA9IDB4MTgsCisJLlZMQU5fREVGQVVMVF9UQUdfUkVHID0geworCQl7MjksMjR9LHsyOSwyNX0sezI5LDI2fSx7MjksMjd9LHsyOSwyOH0sezI5LDMwfSwKKwkJTk9UU1VQUE9SVEVELE5PVFNVUFBPUlRFRCxOT1RTVVBQT1JURUQKKwl9LAorCisJLkFERF9UQUdfUkVHID0gezI5LDIzfSwKKwkuUkVNT1ZFX1RBR19SRUcgPSB7MjksMjN9LAorCS5BRERfVEFHX0JJVCA9IHsxMSwxMiwxMywxNCwxNSwxLC0xLC0xLC0xfSwKKwkuUkVNT1ZFX1RBR19CSVQgPSB7Niw3LDgsOSwxMCwwLC0xLC0xLC0xfSwKKworCS5TSU1QTEVfVkxBTl9SRUdJU1RFUlMgPSAwLAorCisJLlZMQU5fTE9PS1VQX1JFRyA9IHsyOSwxOX0sLy8gK04vMgorCS5WTEFOX0xPT0tVUF9SRUdfNSA9IHszMCwxOH0sCisJLlZMQU5fTE9PS1VQX0VWRU5fQklUID0gezgsOSwxMCwxMSwxMiwxNSwtMSwtMSwtMX0sCisJLlZMQU5fTE9PS1VQX09ERF9CSVQgPSB7MCwxLDIsMyw0LDcsLTEsLTEsLTF9LAorCisJLlRBR19WTEFOX01BU0tfUkVHID0gezMwLDF9LCAvLyArTi8yCisJLlRBR19WTEFOX01BU0tfRVZFTl9CSVQgPSB7MCwxLDIsMyw0LDUsLTEsLTEsLTF9LAorCS5UQUdfVkxBTl9NQVNLX09ERF9CSVQgPSB7OCw5LDEwLDExLDEyLDEzLC0xLC0xLC0xfSwKKworCS5SRVNFVF9WQUwgPSAweDE3NUMsCisJLlJFU0VUX1JFRyA9IHszMCwwfSwKKwkuTU9ERV9WQUwgPSAweDE3NUMsCisJLk1PREVfUkVHID0gezI5LDMxfSwKKworCS5ST1VURVJfQ09OVFJPTF9SRUcgPSB7MzAsOX0sCisJLlJPVVRFUl9FTl9CSVQgPSAzLAorCS5OVU1MQU5fR1JPVVBTX01BWCA9IDgsCisJLk5VTUxBTl9HUk9VUFNfQklUID0gMCwgLy8gezAtMn0KKworCS5WTEFOX0NPTlRST0xfUkVHID0gezMwLDl9LAorCS5UQUdfVkxBTl9CSVQgPSA3LAorCisJLk5VTV9QT1JUUyA9IDYsCisJLkNQVV9QT1JUID0gNSwKKworCS5NSUlfUkVHSVNURVJfRU4gPSBOT1RTVVBQT1JURUQsCisKKwkudXBkYXRlX3N0YXRlID0gaXAxNzVjX3VwZGF0ZV9zdGF0ZSwKKwkuc2V0X3ZsYW5fbW9kZSA9IGlwMTc1Y19zZXRfdmxhbl9tb2RlLAorCS5yZXNldCA9IGlwMTc1Y19yZXNldCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnaXN0ZXJfbWFwcGluZ3MgSVAxNzVBID0geworCS5OQU1FID0gIklQMTc1QSIsCisJLk1PREVMX05PID0gMHgwNSwKKwkuVkxBTl9ERUZBVUxUX1RBR19SRUcgPSB7CisJCXswLDI0fSx7MCwyNX0sezAsMjZ9LHswLDI3fSx7MCwyOH0sTk9UU1VQUE9SVEVELAorCQlOT1RTVVBQT1JURUQsTk9UU1VQUE9SVEVELE5PVFNVUFBPUlRFRAorCX0sCisKKwkuQUREX1RBR19SRUcgPSB7MCwyM30sCisJLlJFTU9WRV9UQUdfUkVHID0gezAsMjN9LAorCS5BRERfVEFHX0JJVCA9IHsxMSwxMiwxMywxNCwxNSwtMSwtMSwtMSwtMX0sCisJLlJFTU9WRV9UQUdfQklUID0gezYsNyw4LDksMTAsLTEsLTEsLTEsLTF9LAorCisJLlNJTVBMRV9WTEFOX1JFR0lTVEVSUyA9IDAsCisKKwkvLyBPbmx5IHByb2dyYW1tYWJsZSB2aWEgRUVQUk9NCisJLlZMQU5fTE9PS1VQX1JFRyA9IE5PVFNVUFBPUlRFRCwvLyArTi8yCisJLlZMQU5fTE9PS1VQX1JFR181ID0gTk9UU1VQUE9SVEVELAorCS5WTEFOX0xPT0tVUF9FVkVOX0JJVCA9IHs4LDksMTAsMTEsMTIsLTEsLTEsLTEsLTF9LAorCS5WTEFOX0xPT0tVUF9PRERfQklUID0gezAsMSwyLDMsNCwtMSwtMSwtMSwtMX0sCisKKwkuVEFHX1ZMQU5fTUFTS19SRUcgPSBOT1RTVVBQT1JURUQsIC8vICtOLzIsCisJLlRBR19WTEFOX01BU0tfRVZFTl9CSVQgPSB7LTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTF9LAorCS5UQUdfVkxBTl9NQVNLX09ERF9CSVQgPSB7LTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTF9LAorCisJLlJFU0VUX1ZBTCA9IC0xLAorCS5SRVNFVF9SRUcgPSBOT1RTVVBQT1JURUQsCisJLk1PREVfVkFMID0gMCwKKwkuTU9ERV9SRUcgPSBOT1RTVVBQT1JURUQsCisKKwkuUk9VVEVSX0NPTlRST0xfUkVHID0gTk9UU1VQUE9SVEVELAorCS5WTEFOX0NPTlRST0xfUkVHID0gTk9UU1VQUE9SVEVELAorCS5UQUdfVkxBTl9CSVQgPSAtMSwKKwkuUk9VVEVSX0VOX0JJVCA9IC0xLAorCS5OVU1MQU5fR1JPVVBTX01BWCA9IC0xLAorCS5OVU1MQU5fR1JPVVBTX0JJVCA9IC0xLCAvLyB7MC0yfQorCisJLk5VTV9QT1JUUyA9IDUsCisJLkNQVV9QT1JUID0gNCwKKworCS5NSUlfUkVHSVNURVJfRU4gPSB7MCwgMTh9LAorCS5NSUlfUkVHSVNURVJfRU5fQklUID0gNywKKworCS51cGRhdGVfc3RhdGUgPSBpcDE3NWNfdXBkYXRlX3N0YXRlLAorCS5zZXRfdmxhbl9tb2RlID0gaXAxNzVjX3NldF92bGFuX21vZGUsCisJLnJlc2V0ID0gaXAxNzVjX3Jlc2V0LAorfTsKKworCitzdGF0aWMgaW50IGlwMTc1ZF91cGRhdGVfc3RhdGUoc3RydWN0IGlwMTd4eF9zdGF0ZSAqc3RhdGUpOworc3RhdGljIGludCBpcDE3NWRfc2V0X3ZsYW5fbW9kZShzdHJ1Y3QgaXAxN3h4X3N0YXRlICpzdGF0ZSk7CitzdGF0aWMgaW50IGlwMTc1ZF9yZXNldChzdHJ1Y3QgaXAxN3h4X3N0YXRlICpzdGF0ZSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnaXN0ZXJfbWFwcGluZ3MgSVAxNzVEID0geworCS5OQU1FID0gIklQMTc1RCIsCisJLk1PREVMX05PID0gMHgxOCwKKworCS8vIFRoZSBJUDE3NUQgaGFzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgaW50ZXJmYWNlLCBzbyB3ZSBsZWF2ZSBtb3N0CisJLy8gb2YgdGhlIHJlZ2lzdGVycyB1bmRlZmluZWQgYW5kIHN3aXRjaCB0byBkaWZmZXJlbnQgY29kZSBwYXRocy4KKworCS5WTEFOX0RFRkFVTFRfVEFHX1JFRyA9IHsKKwkJTk9UU1VQUE9SVEVELE5PVFNVUFBPUlRFRCxOT1RTVVBQT1JURUQsTk9UU1VQUE9SVEVELAorCQlOT1RTVVBQT1JURUQsTk9UU1VQUE9SVEVELE5PVFNVUFBPUlRFRCxOT1RTVVBQT1JURUQsCisJfSwKKworCS5BRERfVEFHX1JFRyA9IE5PVFNVUFBPUlRFRCwKKwkuUkVNT1ZFX1RBR19SRUcgPSBOT1RTVVBQT1JURUQsCisKKwkuU0lNUExFX1ZMQU5fUkVHSVNURVJTID0gMCwKKworCS5WTEFOX0xPT0tVUF9SRUcgPSBOT1RTVVBQT1JURUQsCisJLlZMQU5fTE9PS1VQX1JFR181ID0gTk9UU1VQUE9SVEVELAorCS5UQUdfVkxBTl9NQVNLX1JFRyA9IE5PVFNVUFBPUlRFRCwKKworCS5SRVNFVF9WQUwgPSAweDE3NUQsCisJLlJFU0VUX1JFRyA9IHsyMCwyfSwKKwkuTU9ERV9SRUcgPSBOT1RTVVBQT1JURUQsCisKKwkuUk9VVEVSX0NPTlRST0xfUkVHID0gTk9UU1VQUE9SVEVELAorCS5ST1VURVJfRU5fQklUID0gLTEsCisJLk5VTUxBTl9HUk9VUFNfQklUID0gLTEsCisKKwkuVkxBTl9DT05UUk9MX1JFRyA9IE5PVFNVUFBPUlRFRCwKKwkuVEFHX1ZMQU5fQklUID0gLTEsCisKKwkuTlVNX1BPUlRTID0gNiwKKwkuQ1BVX1BPUlQgPSA1LAorCisJLk1JSV9SRUdJU1RFUl9FTiA9IE5PVFNVUFBPUlRFRCwKKworCS51cGRhdGVfc3RhdGUgPSBpcDE3NWRfdXBkYXRlX3N0YXRlLAorCS5zZXRfdmxhbl9tb2RlID0gaXAxNzVkX3NldF92bGFuX21vZGUsCisJLnJlc2V0ID0gaXAxNzVkX3Jlc2V0LAorfTsKKworc3RydWN0IGlwMTd4eF9zdGF0ZSB7CisJc3RydWN0IHN3aXRjaF9kZXYgZGV2OworCXN0cnVjdCBtaWlfYnVzICptaWlfYnVzOworCWJvb2wgcmVnaXN0ZXJlZDsKKworCWludCByb3V0ZXJfbW9kZTsJCS8vIFJPVVRFUl9FTgorCWludCB2bGFuX2VuYWJsZWQ7CQkvLyBUQUdfVkxBTl9FTgorCXN0cnVjdCBwb3J0X3N0YXRlIHsKKwkJdTE2IHB2aWQ7CisJCXVuc2lnbmVkIGludCBzaGFyZXBvcnRzOworCX0gcG9ydHNbTUFYX1BPUlRTXTsKKwl1bnNpZ25lZCBpbnQgYWRkX3RhZzsKKwl1bnNpZ25lZCBpbnQgcmVtb3ZlX3RhZzsKKwlpbnQgbnVtX3ZsYW5zOworCXN0cnVjdCB2bGFuX3N0YXRlIHsKKwkJdW5zaWduZWQgaW50IHBvcnRzOworCQl1bnNpZ25lZCBpbnQgdGFnOwkvLyBWTEFOIHRhZyAoSVAxNzVEIG9ubHkpCisJfSB2bGFuc1tNQVhfVkxBTlNdOworCWNvbnN0IHN0cnVjdCByZWdpc3Rlcl9tYXBwaW5ncyAqcmVnczsKKwlyZWcgcHJvY19taWk7IAkvLyBwaHkvcmVnIGZvciB0aGUgbG93IGxldmVsIHJlZ2lzdGVyIGFjY2VzcyB2aWEgc3djb25maWcKKworCWNoYXIgYnVmWzgwXTsKK307CisKKyNkZWZpbmUgZ2V0X3N0YXRlKF9kZXYpIGNvbnRhaW5lcl9vZigoX2RldiksIHN0cnVjdCBpcDE3eHhfc3RhdGUsIGRldikKKworc3RhdGljIGludCBpcF9waHlfcmVhZChzdHJ1Y3QgaXAxN3h4X3N0YXRlICpzdGF0ZSwgaW50IHBvcnQsIGludCByZWcpCit7CisJaW50IHZhbCA9IG1kaW9idXNfcmVhZChzdGF0ZS0+bWlpX2J1cywgcG9ydCwgcmVnKTsKKwlpZiAodmFsIDwgMCkKKwkJcHJfd2FybigiSVAxN3h4OiBVbmFibGUgdG8gZ2V0IE1JSSByZWdpc3RlciAlZCwlZDogZXJyb3IgJWRcbiIsIHBvcnQsIHJlZywgLXZhbCk7CisjaWZkZWYgRFVNUF9NSUlfSU8KKwllbHNlCisJCXByX2RlYnVnKCJJUDE3eHg6IFJlYWQgTUlJKCVkLCVkKSAtPiAlMDR4XG4iLCBwb3J0LCByZWcsIHZhbCk7CisjZW5kaWYKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW50IGlwX3BoeV93cml0ZShzdHJ1Y3QgaXAxN3h4X3N0YXRlICpzdGF0ZSwgaW50IHBvcnQsIGludCByZWcsIHUxNiB2YWwpCit7CisJaW50IGVycjsKKworI2lmZGVmIERVTVBfTUlJX0lPCisJcHJfZGVidWcoIklQMTd4eDogV3JpdGUgTUlJKCVkLCVkKSA8LSAlMDR4XG4iLCBwb3J0LCByZWcsIHZhbCk7CisjZW5kaWYKKwllcnIgPSBtZGlvYnVzX3dyaXRlKHN0YXRlLT5taWlfYnVzLCBwb3J0LCByZWcsIHZhbCk7CisJaWYgKGVyciA8IDApCisJCXByX3dhcm4oIklQMTd4eDogVW5hYmxlIHRvIHdyaXRlIE1JSSByZWdpc3RlciAlZCwlZDogZXJyb3IgJWRcbiIsIHBvcnQsIHJlZywgLWVycik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBpcF9waHlfd3JpdGVfbWFza2VkKHN0cnVjdCBpcDE3eHhfc3RhdGUgKnN0YXRlLCBpbnQgcG9ydCwgaW50IHJlZywgdW5zaWduZWQgaW50IG1hc2ssIHVuc2lnbmVkIGludCBkYXRhKQoreworCWludCB2YWwgPSBpcF9waHlfcmVhZChzdGF0ZSwgcG9ydCwgcmVnKTsKKwlpZiAodmFsIDwgMCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGlwX3BoeV93cml0ZShzdGF0ZSwgcG9ydCwgcmVnLCAodmFsICYgfm1hc2spIHwgZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgZ2V0UGh5KHN0cnVjdCBpcDE3eHhfc3RhdGUgKnN0YXRlLCByZWcgbWlpKQoreworCWlmICghUkVHX1NVUFAobWlpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIGlwX3BoeV9yZWFkKHN0YXRlLCBtaWkucCwgbWlpLm0pOworfQorCitzdGF0aWMgaW50IHNldFBoeShzdHJ1Y3QgaXAxN3h4X3N0YXRlICpzdGF0ZSwgcmVnIG1paSwgdTE2IHZhbHVlKQoreworCWludCBlcnI7CisKKwlpZiAoIVJFR19TVVBQKG1paSkpCisJCXJldHVybiAtRUZBVUxUOworCWVyciA9IGlwX3BoeV93cml0ZShzdGF0ZSwgbWlpLnAsIG1paS5tLCB2YWx1ZSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJbWRlbGF5KDIpOworCWdldFBoeShzdGF0ZSwgbWlpKTsKKwlyZXR1cm4gMDsKK30KKworCisvKioKKyAqIFRoZXNlIHR3byBtYWNyb3MgYXJlIHRvIHNpbXBsaWZ5IHRoZSBtYXBwaW5nIG9mIGxvZ2ljYWwgYml0cyB0byB0aGUgYml0cyBpbiBoYXJkd2FyZS4KKyAqIE5PVEU6IHRoZXNlIG1hY3JvcyB3aWxsIHJldHVybiBpZiB0aGVyZSBpcyBhbiBlcnJvciEKKyAqLworCisjZGVmaW5lIEdFVF9QT1JUX0JJVFMoc3RhdGUsIGJpdHMsIGFkZHIsIGJpdF9sb29rdXApCQlcCisJZG8gewkJCQkJCQlcCisJCWludCBpLCB2YWwgPSBnZXRQaHkoKHN0YXRlKSwgKGFkZHIpKTsJCVwKKwkJaWYgKHZhbCA8IDApCQkJCQlcCisJCQlyZXR1cm4gdmFsOwkJCQlcCisJCShiaXRzKSA9IDA7CQkJCQlcCisJCWZvciAoaSA9IDA7IGkgPCBNQVhfUE9SVFM7IGkrKykgewkJXAorCQkJaWYgKChiaXRfbG9va3VwKVtpXSA9PSAtMSkgY29udGludWU7CVwKKwkJCWlmICh2YWwgJiAoMTw8KGJpdF9sb29rdXApW2ldKSkJCVwKKwkJCQkoYml0cykgfD0gKDE8PGkpOwkJXAorCQl9CQkJCQkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgU0VUX1BPUlRfQklUUyhzdGF0ZSwgYml0cywgYWRkciwgYml0X2xvb2t1cCkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJaW50IGksIHZhbCA9IGdldFBoeSgoc3RhdGUpLCAoYWRkcikpOwkJXAorCQlpZiAodmFsIDwgMCkJCQkJCVwKKwkJCXJldHVybiB2YWw7CQkJCVwKKwkJZm9yIChpID0gMDsgaSA8IE1BWF9QT1JUUzsgaSsrKSB7CQlcCisJCQl1bnNpZ25lZCBpbnQgbmV3bWFzayA9ICgoYml0cykmKDE8PGkpKTsJXAorCQkJaWYgKChiaXRfbG9va3VwKVtpXSA9PSAtMSkgY29udGludWU7CVwKKwkJCXZhbCAmPSB+KDE8PChiaXRfbG9va3VwKVtpXSk7CQlcCisJCQl2YWwgfD0gKChuZXdtYXNrPj5pKTw8KGJpdF9sb29rdXApW2ldKTsJXAorCQl9CQkJCQkJXAorCQl2YWwgPSBzZXRQaHkoKHN0YXRlKSwgKGFkZHIpLCB2YWwpOwkJXAorCQlpZiAodmFsIDwgMCkJCQkJCVwKKwkJCXJldHVybiB2YWw7CQkJCVwKKwl9IHdoaWxlICgwKQorCisKK3N0YXRpYyBpbnQgZ2V0X21vZGVsKHN0cnVjdCBpcDE3eHhfc3RhdGUgKnN0YXRlKQoreworCWludCBpZDEsIGlkMjsKKwlpbnQgb3VpX2lkLCBtb2RlbF9ubywgcmV2X25vLCBjaGlwX25vOworCisJaWQxID0gaXBfcGh5X3JlYWQoc3RhdGUsIDAsIDIpOworCWlkMiA9IGlwX3BoeV9yZWFkKHN0YXRlLCAwLCAzKTsKKwlvdWlfaWQgPSAoaWQxIDw8IDYpIHwgKChpZDIgPj4gMTApICYgMHgzZik7CisJbW9kZWxfbm8gPSAoaWQyID4+IDQpICYgMHgzZjsKKwlyZXZfbm8gPSBpZDIgJiAweGY7CisJcHJfZGVidWcoIklQMTd4eDogSWRlbnRpZmllZCBvdWk9JTA2eCBtb2RlbD0lMDJ4IHJldj0lWFxuIiwgb3VpX2lkLCBtb2RlbF9ubywgcmV2X25vKTsKKworCWlmIChvdWlfaWQgIT0gMHgwMDkwYzMpICAvLyBObyBvdGhlciBvdWlfaWQgc2hvdWxkIGhhdmUgcmVhY2hlZCB1cyBhbnl3YXkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAobW9kZWxfbm8gPT0gSVAxNzVBLk1PREVMX05PKSB7CisJCXN0YXRlLT5yZWdzID0gJklQMTc1QTsKKwl9IGVsc2UgaWYgKG1vZGVsX25vID09IElQMTc1Qy5NT0RFTF9OTykgeworCQkvKgorCQkgKiAgU2V2ZXJhbCBtb2RlbHMgc2hhcmUgdGhlIHNhbWUgbW9kZWxfbm86CisJCSAqICAxNzhDIGhhcyBtb3JlIFBIWXMsIHNvIHdlIHRyeSB3aGV0aGVyIHRoZSBkZXZpY2UgcmVzcG9uZHMgdG8gYSByZWFkIGZyb20gUEhZNQorCQkgKiAgMTc1RCBoYXMgYSBuZXcgY2hpcCBJRCByZWdpc3RlcgorCQkgKiAgMTc1QyBoYXMgbmVpdGhlcgorCQkgKi8KKwkJaWYgKGlwX3BoeV9yZWFkKHN0YXRlLCA1LCAyKSA9PSAweDAyNDMpIHsKKwkJCXN0YXRlLT5yZWdzID0gJklQMTc4QzsKKwkJfSBlbHNlIHsKKwkJCWNoaXBfbm8gPSBpcF9waHlfcmVhZChzdGF0ZSwgMjAsIDApOworCQkJcHJfZGVidWcoIklQMTd4eDogQ2hpcCBJRCByZWdpc3RlciByZWFkcyAlMDR4XG4iLCBjaGlwX25vKTsKKwkJCWlmIChjaGlwX25vID09IDB4MTc1ZCkgeworCQkJCXN0YXRlLT5yZWdzID0gJklQMTc1RDsKKwkJCX0gZWxzZSB7CisJCQkJc3RhdGUtPnJlZ3MgPSAmSVAxNzVDOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJcHJfd2FybigiSVAxN3h4OiBGb3VuZCBhbiB1bmtub3duIElDKyBzd2l0Y2ggd2l0aCBtb2RlbCBudW1iZXIgJTAyeCwgcmV2aXNpb24gJVguXG4iLCBtb2RlbF9ubywgcmV2X25vKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKiogTG93LWxldmVsIGZ1bmN0aW9ucyBmb3IgdGhlIG9sZGVyIG1vZGVscyAqKiovCisKKy8qKiBPbmx5IHNldCB2bGFuIGFuZCByb3V0ZXIgZmxhZ3MgaW4gdGhlIHN3aXRjaCAqKi8KK3N0YXRpYyBpbnQgaXAxNzVjX3NldF9mbGFncyhzdHJ1Y3QgaXAxN3h4X3N0YXRlICpzdGF0ZSkKK3sKKwlpbnQgdmFsOworCisJaWYgKCFSRUdfU1VQUChzdGF0ZS0+cmVncy0+Uk9VVEVSX0NPTlRST0xfUkVHKSkgeworCQlyZXR1cm4gMDsKKwl9CisKKwl2YWwgPSBnZXRQaHkoc3RhdGUsIHN0YXRlLT5yZWdzLT5ST1VURVJfQ09OVFJPTF9SRUcpOworCWlmICh2YWwgPCAwKSB7CisJCXJldHVybiB2YWw7CisJfQorCWlmIChzdGF0ZS0+cmVncy0+Uk9VVEVSX0VOX0JJVCA+PSAwKSB7CisJCWlmIChzdGF0ZS0+cm91dGVyX21vZGUpIHsKKwkJCXZhbCB8PSAoMTw8c3RhdGUtPnJlZ3MtPlJPVVRFUl9FTl9CSVQpOworCQl9IGVsc2UgeworCQkJdmFsICY9ICh+KDE8PHN0YXRlLT5yZWdzLT5ST1VURVJfRU5fQklUKSk7CisJCX0KKwl9CisJaWYgKHN0YXRlLT5yZWdzLT5UQUdfVkxBTl9CSVQgPj0gMCkgeworCQlpZiAoc3RhdGUtPnZsYW5fZW5hYmxlZCkgeworCQkJdmFsIHw9ICgxPDxzdGF0ZS0+cmVncy0+VEFHX1ZMQU5fQklUKTsKKwkJfSBlbHNlIHsKKwkJCXZhbCAmPSAofigxPDxzdGF0ZS0+cmVncy0+VEFHX1ZMQU5fQklUKSk7CisJCX0KKwl9CisJaWYgKHN0YXRlLT5yZWdzLT5OVU1MQU5fR1JPVVBTX0JJVCA+PSAwKSB7CisJCXZhbCAmPSAofigoc3RhdGUtPnJlZ3MtPk5VTUxBTl9HUk9VUFNfTUFYLTEpPDxzdGF0ZS0+cmVncy0+TlVNTEFOX0dST1VQU19CSVQpKTsKKwkJaWYgKHN0YXRlLT5udW1fdmxhbnMgPiBzdGF0ZS0+cmVncy0+TlVNTEFOX0dST1VQU19NQVgpIHsKKwkJCXZhbCB8PSBzdGF0ZS0+cmVncy0+TlVNTEFOX0dST1VQU19NQVggPDwgc3RhdGUtPnJlZ3MtPk5VTUxBTl9HUk9VUFNfQklUOworCQl9IGVsc2UgaWYgKHN0YXRlLT5udW1fdmxhbnMgPj0gMSkgeworCQkJdmFsIHw9IChzdGF0ZS0+bnVtX3ZsYW5zLTEpIDw8IHN0YXRlLT5yZWdzLT5OVU1MQU5fR1JPVVBTX0JJVDsKKwkJfQorCX0KKwlyZXR1cm4gc2V0UGh5KHN0YXRlLCBzdGF0ZS0+cmVncy0+Uk9VVEVSX0NPTlRST0xfUkVHLCB2YWwpOworfQorCisvKiogU2V0IGFsbCBWTEFOIGFuZCBwb3J0IHN0YXRlLiAgVXN1YWxseSB5b3Ugc2hvdWxkIGNhbGwgImNvcnJlY3Rfdmxhbl9zdGF0ZSIgZmlyc3QuICoqLworc3RhdGljIGludCBpcDE3NWNfc2V0X3N0YXRlKHN0cnVjdCBpcDE3eHhfc3RhdGUgKnN0YXRlKQoreworCWludCBqOworCWludCBpOworCVNFVF9QT1JUX0JJVFMoc3RhdGUsIHN0YXRlLT5hZGRfdGFnLAorCQkJCSAgc3RhdGUtPnJlZ3MtPkFERF9UQUdfUkVHLCBzdGF0ZS0+cmVncy0+QUREX1RBR19CSVQpOworCVNFVF9QT1JUX0JJVFMoc3RhdGUsIHN0YXRlLT5yZW1vdmVfdGFnLAorCQkJCSAgc3RhdGUtPnJlZ3MtPlJFTU9WRV9UQUdfUkVHLCBzdGF0ZS0+cmVncy0+UkVNT1ZFX1RBR19CSVQpOworCisJaWYgKFJFR19TVVBQKHN0YXRlLT5yZWdzLT5WTEFOX0xPT0tVUF9SRUcpKSB7CisJCWZvciAoaj0wOyBqPHN0YXRlLT5yZWdzLT5OVU1fUE9SVFM7IGorKykgeworCQkJcmVnIGFkZHI7CisJCQljb25zdCBiaXRudW0gKmJpdF9sb29rdXAgPSAoaiUyPT0wKT8KKwkJCQlzdGF0ZS0+cmVncy0+VkxBTl9MT09LVVBfRVZFTl9CSVQ6CisJCQkJc3RhdGUtPnJlZ3MtPlZMQU5fTE9PS1VQX09ERF9CSVQ7CisKKwkJCWFkZHIgPSBzdGF0ZS0+cmVncy0+VkxBTl9MT09LVVBfUkVHOworCQkJaWYgKHN0YXRlLT5yZWdzLT5TSU1QTEVfVkxBTl9SRUdJU1RFUlMpIHsKKwkJCQlhZGRyLm0gKz0gajsKKwkJCX0gZWxzZSB7CisJCQkJc3dpdGNoIChqKSB7CisJCQkJY2FzZSAwOgorCQkJCWNhc2UgMToKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAyOgorCQkJCWNhc2UgMzoKKwkJCQkJYWRkci5tKz0xOworCQkJCQlicmVhazsKKwkJCQljYXNlIDQ6CisJCQkJCWFkZHIubSs9MjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSA1OgorCQkJCQlhZGRyID0gc3RhdGUtPnJlZ3MtPlZMQU5fTE9PS1VQX1JFR181OworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlhZGRyLm0gPSAtMTsgLy8gc2hvdWxkbid0IGdldCBoZXJlLCBidXQuLi4KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJLy9wcmludGYoInNoYXJlcG9ydHMgZm9yICVkIGlzICUwMlhcbiIsaixzdGF0ZS0+cG9ydHNbal0uc2hhcmVwb3J0cyk7CisJCQlpZiAoUkVHX1NVUFAoYWRkcikpIHsKKwkJCQlTRVRfUE9SVF9CSVRTKHN0YXRlLCBzdGF0ZS0+cG9ydHNbal0uc2hhcmVwb3J0cywgYWRkciwgYml0X2xvb2t1cCk7CisJCQl9CisJCX0KKwl9CisJaWYgKFJFR19TVVBQKHN0YXRlLT5yZWdzLT5UQUdfVkxBTl9NQVNLX1JFRykpIHsKKwkJZm9yIChqPTA7IGo8TUFYX1ZMQU5TOyBqKyspIHsKKwkJCXJlZyBhZGRyID0gc3RhdGUtPnJlZ3MtPlRBR19WTEFOX01BU0tfUkVHOworCQkJY29uc3QgYml0bnVtICpiaXRfbG9va3VwID0gKGolMj09MCk/CisJCQkJc3RhdGUtPnJlZ3MtPlRBR19WTEFOX01BU0tfRVZFTl9CSVQ6CisJCQkJc3RhdGUtPnJlZ3MtPlRBR19WTEFOX01BU0tfT0REX0JJVDsKKwkJCXVuc2lnbmVkIGludCB2bGFuX21hc2s7CisJCQlpZiAoc3RhdGUtPnJlZ3MtPlNJTVBMRV9WTEFOX1JFR0lTVEVSUykgeworCQkJCWFkZHIubSArPSBqOworCQkJfSBlbHNlIHsKKwkJCQlhZGRyLm0gKz0gai8yOworCQkJfQorCQkJdmxhbl9tYXNrID0gc3RhdGUtPnZsYW5zW2pdLnBvcnRzOworCQkJU0VUX1BPUlRfQklUUyhzdGF0ZSwgdmxhbl9tYXNrLCBhZGRyLCBiaXRfbG9va3VwKTsKKwkJfQorCX0KKworCWZvciAoaT0wOyBpPE1BWF9QT1JUUzsgaSsrKSB7CisJCWlmIChSRUdfU1VQUChzdGF0ZS0+cmVncy0+VkxBTl9ERUZBVUxUX1RBR19SRUdbaV0pKSB7CisJCQlpbnQgZXJyID0gc2V0UGh5KHN0YXRlLCBzdGF0ZS0+cmVncy0+VkxBTl9ERUZBVUxUX1RBR19SRUdbaV0sCisJCQkJCXN0YXRlLT5wb3J0c1tpXS5wdmlkKTsKKwkJCWlmIChlcnIgPCAwKSB7CisJCQkJcmV0dXJuIGVycjsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBpcDE3NWNfc2V0X2ZsYWdzKHN0YXRlKTsKK30KKworLyoqCisgKiAgVXNlcyBvbmx5IHRoZSBWTEFOIHBvcnQgbWFzayBhbmQgdGhlIGFkZCB0YWcgbWFzayB0byBnZW5lcmF0ZSB0aGUgb3RoZXIgZmllbGRzOgorICogIHdoaWNoIHBvcnRzIGFyZSBwYXJ0IG9mIHRoZSBzYW1lIFZMQU4sIHJlbW92aW5nIHZsYW4gdGFncywgYW5kIFZMQU4gdGFnIGlkcy4KKyAqLworc3RhdGljIHZvaWQgaXAxNzVjX2NvcnJlY3Rfdmxhbl9zdGF0ZShzdHJ1Y3QgaXAxN3h4X3N0YXRlICpzdGF0ZSkKK3sKKwlpbnQgaSwgajsKKwlzdGF0ZS0+bnVtX3ZsYW5zID0gMDsKKwlmb3IgKGk9MDsgaTxNQVhfVkxBTlM7IGkrKykgeworCQlpZiAoc3RhdGUtPnZsYW5zW2ldLnBvcnRzICE9IDApIHsKKwkJCXN0YXRlLT5udW1fdmxhbnMgPSBpKzE7IC8vIEhhY2sgLS0gd2UgbmVlZCB0byBzdG9yZSB0aGUgInNldCIgdmxhbnMgc29tZXdoZXJlLi4uCisJCX0KKwl9CisKKwlmb3IgKGk9MDsgaTxzdGF0ZS0+cmVncy0+TlVNX1BPUlRTOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IHBvcnRtYXNrID0gKDE8PGkpOworCQlpZiAoIXN0YXRlLT52bGFuX2VuYWJsZWQpIHsKKwkJCS8vIFNoYXJlIHdpdGggZXZlcnlib2R5IQorCQkJc3RhdGUtPnBvcnRzW2ldLnNoYXJlcG9ydHMgPSAoMTw8c3RhdGUtPnJlZ3MtPk5VTV9QT1JUUyktMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXN0YXRlLT5wb3J0c1tpXS5zaGFyZXBvcnRzID0gcG9ydG1hc2s7CisJCWZvciAoaj0wOyBqPE1BWF9WTEFOUzsgaisrKSB7CisJCQlpZiAoc3RhdGUtPnZsYW5zW2pdLnBvcnRzICYgcG9ydG1hc2spCisJCQkJc3RhdGUtPnBvcnRzW2ldLnNoYXJlcG9ydHMgfD0gc3RhdGUtPnZsYW5zW2pdLnBvcnRzOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGlwMTc1Y191cGRhdGVfc3RhdGUoc3RydWN0IGlwMTd4eF9zdGF0ZSAqc3RhdGUpCit7CisJaXAxNzVjX2NvcnJlY3Rfdmxhbl9zdGF0ZShzdGF0ZSk7CisJcmV0dXJuIGlwMTc1Y19zZXRfc3RhdGUoc3RhdGUpOworfQorCitzdGF0aWMgaW50IGlwMTc1Y19zZXRfdmxhbl9tb2RlKHN0cnVjdCBpcDE3eHhfc3RhdGUgKnN0YXRlKQoreworCXJldHVybiBpcDE3NWNfdXBkYXRlX3N0YXRlKHN0YXRlKTsKK30KKworc3RhdGljIGludCBpcDE3NWNfcmVzZXQoc3RydWN0IGlwMTd4eF9zdGF0ZSAqc3RhdGUpCit7CisJaW50IGVycjsKKworCWlmIChSRUdfU1VQUChzdGF0ZS0+cmVncy0+TU9ERV9SRUcpKSB7CisJCWVyciA9IHNldFBoeShzdGF0ZSwgc3RhdGUtPnJlZ3MtPk1PREVfUkVHLCBzdGF0ZS0+cmVncy0+TU9ERV9WQUwpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJCWVyciA9IGdldFBoeShzdGF0ZSwgc3RhdGUtPnJlZ3MtPk1PREVfUkVHKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiBpcDE3NWNfdXBkYXRlX3N0YXRlKHN0YXRlKTsKK30KKworLyoqKiBMb3ctbGV2ZWwgZnVuY3Rpb25zIGZvciBJUDE3NUQgKioqLworCitzdGF0aWMgaW50IGlwMTc1ZF91cGRhdGVfc3RhdGUoc3RydWN0IGlwMTd4eF9zdGF0ZSAqc3RhdGUpCit7CisJdW5zaWduZWQgaW50IGZpbHRlcl9tYXNrID0gMDsKKwl1bnNpZ25lZCBpbnQgcG9ydHNbMTZdLCBhZGRbMTZdLCByZW1bMTZdOworCWludCBpLCBqOworCWludCBlcnIgPSAwOworCisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJcG9ydHNbaV0gPSAwOworCQlhZGRbaV0gPSAwOworCQlyZW1baV0gPSAwOworCQlpZiAoIXN0YXRlLT52bGFuX2VuYWJsZWQpIHsKKwkJCWVyciB8PSBpcF9waHlfd3JpdGUoc3RhdGUsIDIyLCAxNCtpLCBpKzEpOwkvLyBkZWZhdWx0IHRhZ3MKKwkJCXBvcnRzW2ldID0gMHgzZjsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RhdGUtPnZsYW5zW2ldLnRhZykgeworCQkJLy8gUmVzZXQgdGhlIGZpbHRlcgorCQkJZXJyIHw9IGlwX3BoeV93cml0ZShzdGF0ZSwgMjIsIDE0K2ksIDApOwkvLyB0YWcKKwkJCWNvbnRpbnVlOworCQl9CisJCWZpbHRlcl9tYXNrIHw9IDEgPDwgaTsKKwkJZXJyIHw9IGlwX3BoeV93cml0ZShzdGF0ZSwgMjIsIDE0K2ksIHN0YXRlLT52bGFuc1tpXS50YWcpOworCQlwb3J0c1tpXSA9IHN0YXRlLT52bGFuc1tpXS5wb3J0czsKKwkJZm9yIChqID0gMDsgaiA8IDY7IGorKykgeworCQkJaWYgKHBvcnRzW2ldICYgKDEgPDwgaikpIHsKKwkJCQlpZiAoc3RhdGUtPmFkZF90YWcgJiAoMSA8PCBqKSkKKwkJCQkJYWRkW2ldIHw9IDEgPDwgajsKKwkJCQlpZiAoc3RhdGUtPnJlbW92ZV90YWcgJiAoMSA8PCBqKSkKKwkJCQkJcmVtW2ldIHw9IDEgPDwgajsKKwkJCX0KKwkJfQorCX0KKworCS8vIFBvcnQgbWFza3MsIHRhZyBhZGRzIGFuZCByZW1vdmFscworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJZXJyIHw9IGlwX3BoeV93cml0ZShzdGF0ZSwgMjMsIGksIHBvcnRzWzIqaV0gfCAocG9ydHNbMippKzFdIDw8IDgpKTsKKwkJZXJyIHw9IGlwX3BoeV93cml0ZShzdGF0ZSwgMjMsIDgraSwgYWRkWzIqaV0gfCAoYWRkWzIqaSsxXSA8PCA4KSk7CisJCWVyciB8PSBpcF9waHlfd3JpdGUoc3RhdGUsIDIzLCAxNitpLCByZW1bMippXSB8IChyZW1bMippKzFdIDw8IDgpKTsKKwl9CisJZXJyIHw9IGlwX3BoeV93cml0ZShzdGF0ZSwgMjIsIDEwLCBmaWx0ZXJfbWFzayk7CisKKwkvLyBEZWZhdWx0IFZMQU4gdGFnIGZvciBlYWNoIHBvcnQKKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCQllcnIgfD0gaXBfcGh5X3dyaXRlKHN0YXRlLCAyMiwgNCtpLCBzdGF0ZS0+dmxhbnNbc3RhdGUtPnBvcnRzW2ldLnB2aWRdLnRhZyk7CisKKwlyZXR1cm4gKGVyciA/IC1FSU8gOiAwKTsKK30KKworc3RhdGljIGludCBpcDE3NWRfc2V0X3ZsYW5fbW9kZShzdHJ1Y3QgaXAxN3h4X3N0YXRlICpzdGF0ZSkKK3sKKwlpbnQgaTsKKwlpbnQgZXJyID0gMDsKKworCWlmIChzdGF0ZS0+dmxhbl9lbmFibGVkKSB7CisJCS8vIFZMQU4gY2xhc3NpZmljYXRpb24gcnVsZXM6IHRhZy1iYXNlZCBWTEFOcywgdXNlIFZJRCB0byBjbGFzc2lmeSwKKwkJLy8gZHJvcCBwYWNrZXRzIHRoYXQgY2Fubm90IGJlIGNsYXNzaWZpZWQuCisJCWVyciB8PSBpcF9waHlfd3JpdGVfbWFza2VkKHN0YXRlLCAyMiwgMCwgMHgzZmZmLCAweDAwM2YpOworCisJCS8vIEluZ3Jlc3MgcnVsZXM6IENGST0xIGRyb3BwZWQsIG51bGwgVklEIGlzIHVudGFnZ2VkLCBWSUQ9MSBwYXNzZWQsCisJCS8vIFZJRD0weGZmZiBkaXNjYXJkZWQsIGFkbWluIGJvdGggdGFnZ2VkIGFuZCB1bnRhZ2dlZCwgaW5ncmVzcworCQkvLyBmaWx0ZXJzIGVuYWJsZWQuCisJCWVyciB8PSBpcF9waHlfd3JpdGVfbWFza2VkKHN0YXRlLCAyMiwgMSwgMHgwZmZmLCAweDBjM2YpOworCisJCS8vIEVncmVzcyBydWxlczogSUdNUCBwcm9jZXNzaW5nIG9mZiwga2VlcCBWTEFOIGhlYWRlciBvZmYKKwkJZXJyIHw9IGlwX3BoeV93cml0ZV9tYXNrZWQoc3RhdGUsIDIyLCAyLCAweDBmZmYsIDB4MDAwMCk7CisJfSBlbHNlIHsKKwkJLy8gVkxBTiBjbGFzc2lmaWNhdGlvbiBydWxlczogZXZlcnl0aGluZyBvZmYgJiBjbGVhciB0YWJsZQorCQllcnIgfD0gaXBfcGh5X3dyaXRlX21hc2tlZChzdGF0ZSwgMjIsIDAsIDB4YmZmZiwgMHg4MDAwKTsKKworCQkvLyBJbmdyZXNzIGFuZCBlZ3Jlc3MgcnVsZXM6IHNldCB0byBkZWZhdWx0cworCQllcnIgfD0gaXBfcGh5X3dyaXRlX21hc2tlZChzdGF0ZSwgMjIsIDEsIDB4MGZmZiwgMHgwYzNmKTsKKwkJZXJyIHw9IGlwX3BoeV93cml0ZV9tYXNrZWQoc3RhdGUsIDIyLCAyLCAweDBmZmYsIDB4MDAwMCk7CisJfQorCisJLy8gUmVzZXQgZGVmYXVsdCBWTEFOIGZvciBlYWNoIHBvcnQgdG8gMAorCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCXN0YXRlLT5wb3J0c1tpXS5wdmlkID0gMDsKKworCWVyciB8PSBpcDE3NWRfdXBkYXRlX3N0YXRlKHN0YXRlKTsKKworCXJldHVybiAoZXJyID8gLUVJTyA6IDApOworfQorCitzdGF0aWMgaW50IGlwMTc1ZF9yZXNldChzdHJ1Y3QgaXAxN3h4X3N0YXRlICpzdGF0ZSkKK3sKKwlpbnQgZXJyID0gMDsKKworCS8vIERpc2FibGUgdGhlIHNwZWNpYWwgdGFnZ2luZyBtb2RlCisJZXJyIHw9IGlwX3BoeV93cml0ZV9tYXNrZWQoc3RhdGUsIDIxLCAyMiwgMHgwMDAzLCAweDAwMDApOworCisJLy8gU2V0IDgwMi4xcSBwcm90b2NvbCB0eXBlCisJZXJyIHw9IGlwX3BoeV93cml0ZShzdGF0ZSwgMjIsIDMsIDB4ODEwMCk7CisKKwlzdGF0ZS0+dmxhbl9lbmFibGVkID0gMDsKKwllcnIgfD0gaXAxNzVkX3NldF92bGFuX21vZGUoc3RhdGUpOworCisJcmV0dXJuIChlcnIgPyAtRUlPIDogMCk7Cit9CisKKy8qKiogSGlnaC1sZXZlbCBmdW5jdGlvbnMgKioqLworCitzdGF0aWMgaW50IGlwMTd4eF9nZXRfZW5hYmxlX3ZsYW4oc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLCBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBpcDE3eHhfc3RhdGUgKnN0YXRlID0gZ2V0X3N0YXRlKGRldik7CisKKwl2YWwtPnZhbHVlLmkgPSBzdGF0ZS0+dmxhbl9lbmFibGVkOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpcDE3eHhfcmVzZXRfdmxhbl9jb25maWcoc3RydWN0IGlwMTd4eF9zdGF0ZSAqc3RhdGUpCit7CisJaW50IGk7CisKKwlzdGF0ZS0+cmVtb3ZlX3RhZyA9IChzdGF0ZS0+dmxhbl9lbmFibGVkID8gKCgxPDxzdGF0ZS0+cmVncy0+TlVNX1BPUlRTKS0xKSA6IDB4MDAwMCk7CisJc3RhdGUtPmFkZF90YWcgPSAweDAwMDA7CisJZm9yIChpID0gMDsgaSA8IE1BWF9WTEFOUzsgaSsrKSB7CisJCXN0YXRlLT52bGFuc1tpXS5wb3J0cyA9IDB4MDAwMDsKKwkJc3RhdGUtPnZsYW5zW2ldLnRhZyA9IChpID8gaSA6IDE2KTsKKwl9CisJZm9yIChpID0gMDsgaSA8IE1BWF9QT1JUUzsgaSsrKQorCQlzdGF0ZS0+cG9ydHNbaV0ucHZpZCA9IDA7Cit9CisKK3N0YXRpYyBpbnQgaXAxN3h4X3NldF9lbmFibGVfdmxhbihzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IGlwMTd4eF9zdGF0ZSAqc3RhdGUgPSBnZXRfc3RhdGUoZGV2KTsKKwlpbnQgZW5hYmxlOworCisJZW5hYmxlID0gdmFsLT52YWx1ZS5pOworCWlmIChzdGF0ZS0+dmxhbl9lbmFibGVkID09IGVuYWJsZSkgeworCQkvLyBEbyBub3QgY2hhbmdlIGFueSBzdGF0ZS4KKwkJcmV0dXJuIDA7CisJfQorCXN0YXRlLT52bGFuX2VuYWJsZWQgPSBlbmFibGU7CisKKwkvLyBPdGhlcndpc2UsIGlmIHdlIGFyZSBzd2l0Y2hpbmcgc3RhdGUsIHNldCBmaWVsZHMgdG8gYSBrbm93biBkZWZhdWx0LgorCWlwMTd4eF9yZXNldF92bGFuX2NvbmZpZyhzdGF0ZSk7CisKKwlyZXR1cm4gc3RhdGUtPnJlZ3MtPnNldF92bGFuX21vZGUoc3RhdGUpOworfQorCitzdGF0aWMgaW50IGlwMTd4eF9nZXRfcG9ydHMoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgaXAxN3h4X3N0YXRlICpzdGF0ZSA9IGdldF9zdGF0ZShkZXYpOworCWludCBiOworCWludCBpbmQ7CisJdW5zaWduZWQgaW50IHBvcnRzOworCisJaWYgKHZhbC0+cG9ydF92bGFuID49IGRldi0+dmxhbnMgfHwgdmFsLT5wb3J0X3ZsYW4gPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBvcnRzID0gc3RhdGUtPnZsYW5zW3ZhbC0+cG9ydF92bGFuXS5wb3J0czsKKwliID0gMDsKKwlpbmQgPSAwOworCXdoaWxlIChiIDwgTUFYX1BPUlRTKSB7CisJCWlmIChwb3J0cyYxKSB7CisJCQlpbnQgaXN0YWdnZWQgPSAoKHN0YXRlLT5hZGRfdGFnID4+IGIpICYgMSk7CisJCQl2YWwtPnZhbHVlLnBvcnRzW2luZF0uaWQgPSBiOworCQkJdmFsLT52YWx1ZS5wb3J0c1tpbmRdLmZsYWdzID0gKGlzdGFnZ2VkIDw8IFNXSVRDSF9QT1JUX0ZMQUdfVEFHR0VEKTsKKwkJCWluZCsrOworCQl9CisJCWIrKzsKKwkJcG9ydHMgPj49IDE7CisJfQorCXZhbC0+bGVuID0gaW5kOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXAxN3h4X3NldF9wb3J0cyhzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBpcDE3eHhfc3RhdGUgKnN0YXRlID0gZ2V0X3N0YXRlKGRldik7CisJaW50IGk7CisKKwlpZiAodmFsLT5wb3J0X3ZsYW4gPj0gZGV2LT52bGFucyB8fCB2YWwtPnBvcnRfdmxhbiA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJc3RhdGUtPnZsYW5zW3ZhbC0+cG9ydF92bGFuXS5wb3J0cyA9IDA7CisJZm9yIChpID0gMDsgaSA8IHZhbC0+bGVuOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IGJpdG1hc2sgPSAoMTw8dmFsLT52YWx1ZS5wb3J0c1tpXS5pZCk7CisJCXN0YXRlLT52bGFuc1t2YWwtPnBvcnRfdmxhbl0ucG9ydHMgfD0gYml0bWFzazsKKwkJaWYgKHZhbC0+dmFsdWUucG9ydHNbaV0uZmxhZ3MgJiAoMTw8U1dJVENIX1BPUlRfRkxBR19UQUdHRUQpKSB7CisJCQlzdGF0ZS0+YWRkX3RhZyB8PSBiaXRtYXNrOworCQkJc3RhdGUtPnJlbW92ZV90YWcgJj0gKH5iaXRtYXNrKTsKKwkJfSBlbHNlIHsKKwkJCXN0YXRlLT5hZGRfdGFnICY9ICh+Yml0bWFzayk7CisJCQlzdGF0ZS0+cmVtb3ZlX3RhZyB8PSBiaXRtYXNrOworCQl9CisJfQorCisJcmV0dXJuIHN0YXRlLT5yZWdzLT51cGRhdGVfc3RhdGUoc3RhdGUpOworfQorCitzdGF0aWMgaW50IGlwMTd4eF9hcHBseShzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2KQoreworCXN0cnVjdCBpcDE3eHhfc3RhdGUgKnN0YXRlID0gZ2V0X3N0YXRlKGRldik7CisKKwlpZiAoUkVHX1NVUFAoc3RhdGUtPnJlZ3MtPk1JSV9SRUdJU1RFUl9FTikpIHsKKwkJaW50IHZhbCA9IGdldFBoeShzdGF0ZSwgc3RhdGUtPnJlZ3MtPk1JSV9SRUdJU1RFUl9FTik7CisJCWlmICh2YWwgPCAwKSB7CisJCQlyZXR1cm4gdmFsOworCQl9CisJCXZhbCB8PSAoMTw8c3RhdGUtPnJlZ3MtPk1JSV9SRUdJU1RFUl9FTl9CSVQpOworCQlyZXR1cm4gc2V0UGh5KHN0YXRlLCBzdGF0ZS0+cmVncy0+TUlJX1JFR0lTVEVSX0VOLCB2YWwpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpcDE3eHhfcmVzZXQoc3RydWN0IHN3aXRjaF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgaXAxN3h4X3N0YXRlICpzdGF0ZSA9IGdldF9zdGF0ZShkZXYpOworCWludCBpLCBlcnI7CisKKwlpZiAoUkVHX1NVUFAoc3RhdGUtPnJlZ3MtPlJFU0VUX1JFRykpIHsKKwkJZXJyID0gc2V0UGh5KHN0YXRlLCBzdGF0ZS0+cmVncy0+UkVTRVRfUkVHLCBzdGF0ZS0+cmVncy0+UkVTRVRfVkFMKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQllcnIgPSBnZXRQaHkoc3RhdGUsIHN0YXRlLT5yZWdzLT5SRVNFVF9SRUcpOworCisJCS8qCisJCSAqICBEYXRhIHNoZWV0IHNwZWNpZmllcyByZXNldCBwZXJpb2QgdG8gYmUgMiBtc2VjLgorCQkgKiAgKEkgZG9uJ3Qgc2VlIGFueSBtZW50aW9uIG9mIHRoZSAybXMgZGVsYXkgaW4gdGhlIElQMTc4QyBzcGVjLCBvbmx5CisJCSAqICBpbiBJUDE3NUMsIGJ1dCBpdCBjYW4ndCBodXJ0LikKKwkJICovCisJCW1kZWxheSgyKTsKKwl9CisKKwkvKiByZXNldCBzd2l0Y2ggcG9ydHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3RhdGUtPnJlZ3MtPk5VTV9QT1JUUy0xOyBpKyspIHsKKwkJZXJyID0gaXBfcGh5X3dyaXRlKHN0YXRlLCBpLCBNSUlfQk1DUiwgQk1DUl9SRVNFVCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlzdGF0ZS0+cm91dGVyX21vZGUgPSAwOworCXN0YXRlLT52bGFuX2VuYWJsZWQgPSAwOworCWlwMTd4eF9yZXNldF92bGFuX2NvbmZpZyhzdGF0ZSk7CisKKwlyZXR1cm4gc3RhdGUtPnJlZ3MtPnJlc2V0KHN0YXRlKTsKK30KKworc3RhdGljIGludCBpcDE3eHhfZ2V0X3RhZ2dlZChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IGlwMTd4eF9zdGF0ZSAqc3RhdGUgPSBnZXRfc3RhdGUoZGV2KTsKKworCWlmIChzdGF0ZS0+YWRkX3RhZyAmICgxPDx2YWwtPnBvcnRfdmxhbikpIHsKKwkJaWYgKHN0YXRlLT5yZW1vdmVfdGFnICYgKDE8PHZhbC0+cG9ydF92bGFuKSkKKwkJCXZhbC0+dmFsdWUuaSA9IDM7IC8vIHNob3VsZG4ndCBldmVyIGhhcHBlbi4KKwkJZWxzZQorCQkJdmFsLT52YWx1ZS5pID0gMTsKKwl9IGVsc2UgeworCQlpZiAoc3RhdGUtPnJlbW92ZV90YWcgJiAoMTw8dmFsLT5wb3J0X3ZsYW4pKQorCQkJdmFsLT52YWx1ZS5pID0gMDsKKwkJZWxzZQorCQkJdmFsLT52YWx1ZS5pID0gMjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXAxN3h4X3NldF90YWdnZWQoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLCBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBpcDE3eHhfc3RhdGUgKnN0YXRlID0gZ2V0X3N0YXRlKGRldik7CisKKwlzdGF0ZS0+YWRkX3RhZyAmPSB+KDE8PHZhbC0+cG9ydF92bGFuKTsKKwlzdGF0ZS0+cmVtb3ZlX3RhZyAmPSB+KDE8PHZhbC0+cG9ydF92bGFuKTsKKworCWlmICh2YWwtPnZhbHVlLmkgPT0gMCkKKwkJc3RhdGUtPnJlbW92ZV90YWcgfD0gKDE8PHZhbC0+cG9ydF92bGFuKTsKKwlpZiAodmFsLT52YWx1ZS5pID09IDEpCisJCXN0YXRlLT5hZGRfdGFnIHw9ICgxPDx2YWwtPnBvcnRfdmxhbik7CisKKwlyZXR1cm4gc3RhdGUtPnJlZ3MtPnVwZGF0ZV9zdGF0ZShzdGF0ZSk7Cit9CisKKy8qKiBHZXQgdGhlIGN1cnJlbnQgcGh5IGFkZHJlc3MgKi8KK3N0YXRpYyBpbnQgaXAxN3h4X2dldF9waHkoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLCBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBpcDE3eHhfc3RhdGUgKnN0YXRlID0gZ2V0X3N0YXRlKGRldik7CisKKwl2YWwtPnZhbHVlLmkgPSBzdGF0ZS0+cHJvY19taWkucDsKKwlyZXR1cm4gMDsKK30KKworLyoqIFNldCBhIG5ldyBwaHkgYWRkcmVzcyBmb3IgbG93IGxldmVsIGFjY2VzcyB0byByZWdpc3RlcnMgKi8KK3N0YXRpYyBpbnQgaXAxN3h4X3NldF9waHkoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLCBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBpcDE3eHhfc3RhdGUgKnN0YXRlID0gZ2V0X3N0YXRlKGRldik7CisJaW50IG5ld19yZWcgPSB2YWwtPnZhbHVlLmk7CisKKwlpZiAobmV3X3JlZyA8IDAgfHwgbmV3X3JlZyA+IDMxKQorCQlzdGF0ZS0+cHJvY19taWkucCA9ICh1MTYpLTE7CisJZWxzZQorCQlzdGF0ZS0+cHJvY19taWkucCA9ICh1MTYpbmV3X3JlZzsKKwlyZXR1cm4gMDsKK30KKworLyoqIEdldCB0aGUgY3VycmVudCByZWdpc3RlciBudW1iZXIgKi8KK3N0YXRpYyBpbnQgaXAxN3h4X2dldF9yZWcoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLCBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBpcDE3eHhfc3RhdGUgKnN0YXRlID0gZ2V0X3N0YXRlKGRldik7CisKKwl2YWwtPnZhbHVlLmkgPSBzdGF0ZS0+cHJvY19taWkubTsKKwlyZXR1cm4gMDsKK30KKworLyoqIFNldCBhIG5ldyByZWdpc3RlciBhZGRyZXNzIGZvciBsb3cgbGV2ZWwgYWNjZXNzIHRvIHJlZ2lzdGVycyAqLworc3RhdGljIGludCBpcDE3eHhfc2V0X3JlZyhzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IGlwMTd4eF9zdGF0ZSAqc3RhdGUgPSBnZXRfc3RhdGUoZGV2KTsKKwlpbnQgbmV3X3JlZyA9IHZhbC0+dmFsdWUuaTsKKworCWlmIChuZXdfcmVnIDwgMCB8fCBuZXdfcmVnID4gMzEpCisJCXN0YXRlLT5wcm9jX21paS5tID0gKHUxNiktMTsKKwllbHNlCisJCXN0YXRlLT5wcm9jX21paS5tID0gKHUxNiluZXdfcmVnOworCXJldHVybiAwOworfQorCisvKiogR2V0IHRoZSByZWdpc3RlciBjb250ZW50IG9mIHN0YXRlLT5wcm9jX21paSAqLworc3RhdGljIGludCBpcDE3eHhfZ2V0X3ZhbChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IGlwMTd4eF9zdGF0ZSAqc3RhdGUgPSBnZXRfc3RhdGUoZGV2KTsKKwlpbnQgcmV0dmFsID0gLUVJTlZBTDsKKwlpZiAoUkVHX1NVUFAoc3RhdGUtPnByb2NfbWlpKSkKKwkJcmV0dmFsID0gZ2V0UGh5KHN0YXRlLCBzdGF0ZS0+cHJvY19taWkpOworCisJaWYgKHJldHZhbCA8IDApIHsKKwkJcmV0dXJuIHJldHZhbDsKKwl9IGVsc2UgeworCQl2YWwtPnZhbHVlLmkgPSByZXR2YWw7CisJCXJldHVybiAwOworCX0KK30KKworLyoqIFdyaXRlIGEgdmFsdWUgdG8gdGhlIHJlZ2lzdGVyIGRlZmluZWQgYnkgcGh5L3JlZyBhYm92ZSAqLworc3RhdGljIGludCBpcDE3eHhfc2V0X3ZhbChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IGlwMTd4eF9zdGF0ZSAqc3RhdGUgPSBnZXRfc3RhdGUoZGV2KTsKKwlpbnQgbXl2YWwsIGVyciA9IC1FSU5WQUw7CisKKwlteXZhbCA9IHZhbC0+dmFsdWUuaTsKKwlpZiAobXl2YWwgPD0gMHhmZmZmICYmIG15dmFsID49IDAgJiYgUkVHX1NVUFAoc3RhdGUtPnByb2NfbWlpKSkgeworCQllcnIgPSBzZXRQaHkoc3RhdGUsIHN0YXRlLT5wcm9jX21paSwgKHUxNilteXZhbCk7CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgaXAxN3h4X3JlYWRfbmFtZShzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IGlwMTd4eF9zdGF0ZSAqc3RhdGUgPSBnZXRfc3RhdGUoZGV2KTsKKwl2YWwtPnZhbHVlLnMgPSBzdGF0ZS0+cmVncy0+TkFNRTsgLy8gSnVzdCBhIGNvbnN0IHBvaW50ZXIsIHdvbid0IGJlIGZyZWVkIGJ5IHN3Y29uZmlnLgorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlwMTd4eF9nZXRfdGFnKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgaXAxN3h4X3N0YXRlICpzdGF0ZSA9IGdldF9zdGF0ZShkZXYpOworCWludCB2bGFuID0gdmFsLT5wb3J0X3ZsYW47CisKKwlpZiAodmxhbiA8IDAgfHwgdmxhbiA+PSBNQVhfVkxBTlMpCisJCXJldHVybiAtRUlOVkFMOworCisJdmFsLT52YWx1ZS5pID0gc3RhdGUtPnZsYW5zW3ZsYW5dLnRhZzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpcDE3eHhfc2V0X3RhZyhzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IGlwMTd4eF9zdGF0ZSAqc3RhdGUgPSBnZXRfc3RhdGUoZGV2KTsKKwlpbnQgdmxhbiA9IHZhbC0+cG9ydF92bGFuOworCWludCB0YWcgPSB2YWwtPnZhbHVlLmk7CisKKwlpZiAodmxhbiA8IDAgfHwgdmxhbiA+PSBNQVhfVkxBTlMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHRhZyA8IDAgfHwgdGFnID4gNDA5NSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdGF0ZS0+dmxhbnNbdmxhbl0udGFnID0gdGFnOworCXJldHVybiBzdGF0ZS0+cmVncy0+dXBkYXRlX3N0YXRlKHN0YXRlKTsKK30KKworc3RhdGljIGludCBpcDE3eHhfc2V0X3BvcnRfc3BlZWQoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLCBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBpcDE3eHhfc3RhdGUgKnN0YXRlID0gZ2V0X3N0YXRlKGRldik7CisJaW50IG5yID0gdmFsLT5wb3J0X3ZsYW47CisJaW50IGN0cmw7CisJaW50IGF1dG9uZWc7CisJaW50IHNwZWVkOworCWlmICh2YWwtPnZhbHVlLmkgPT0gMTAwKSB7CisJCXNwZWVkID0gMTsKKwkJYXV0b25lZyA9IDA7CisJfSBlbHNlIGlmICh2YWwtPnZhbHVlLmkgPT0gMTApIHsKKwkJc3BlZWQgPSAwOworCQlhdXRvbmVnID0gMDsKKwl9IGVsc2UgeworCQlhdXRvbmVnID0gMTsKKwkJc3BlZWQgPSAxOworCX0KKworCS8qIENhbid0IHNldCBzcGVlZCBmb3IgY3B1IHBvcnQgKi8KKwlpZiAobnIgPT0gc3RhdGUtPnJlZ3MtPkNQVV9QT1JUKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChuciA+PSBkZXYtPnBvcnRzIHx8IG5yIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljdHJsID0gaXBfcGh5X3JlYWQoc3RhdGUsIG5yLCAwKTsKKwlpZiAoY3RybCA8IDApCisJCXJldHVybiAtRUlPOworCisJY3RybCAmPSAofigxPDwxMikpOworCWN0cmwgJj0gKH4oMTw8MTMpKTsKKwljdHJsIHw9IChhdXRvbmVnPDwxMik7CisJY3RybCB8PSAoc3BlZWQ8PDEzKTsKKworCXJldHVybiBpcF9waHlfd3JpdGUoc3RhdGUsIG5yLCAwLCBjdHJsKTsKK30KKworc3RhdGljIGludCBpcDE3eHhfZ2V0X3BvcnRfc3BlZWQoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLCBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBpcDE3eHhfc3RhdGUgKnN0YXRlID0gZ2V0X3N0YXRlKGRldik7CisJaW50IG5yID0gdmFsLT5wb3J0X3ZsYW47CisJaW50IHNwZWVkLCBzdGF0dXM7CisKKwlpZiAobnIgPT0gc3RhdGUtPnJlZ3MtPkNQVV9QT1JUKSB7CisJCXZhbC0+dmFsdWUuaSA9IDEwMDsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKG5yID49IGRldi0+cG9ydHMgfHwgbnIgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0YXR1cyA9IGlwX3BoeV9yZWFkKHN0YXRlLCBuciwgMSk7CisJc3BlZWQgPSBpcF9waHlfcmVhZChzdGF0ZSwgbnIsIDE4KTsKKwlpZiAoc3RhdHVzIDwgMCB8fCBzcGVlZCA8IDApCisJCXJldHVybiAtRUlPOworCisJaWYgKHN0YXR1cyAmIDQpCisJCXZhbC0+dmFsdWUuaSA9ICgoc3BlZWQgJiAoMTw8MTEpKSA/IDEwMCA6IDEwKTsKKwllbHNlCisJCXZhbC0+dmFsdWUuaSA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpcDE3eHhfZ2V0X3BvcnRfc3RhdHVzKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgaXAxN3h4X3N0YXRlICpzdGF0ZSA9IGdldF9zdGF0ZShkZXYpOworCWludCBjdHJsLCBzcGVlZCwgc3RhdHVzOworCWludCBuciA9IHZhbC0+cG9ydF92bGFuOworCWludCBsZW47CisJY2hhciAqYnVmID0gc3RhdGUtPmJ1ZjsgLy8gZml4ZWQtbGVuZ3RoIGF0IDgwLgorCisJaWYgKG5yID09IHN0YXRlLT5yZWdzLT5DUFVfUE9SVCkgeworCQlzcHJpbnRmKGJ1ZiwgInVwLCAxMDAgTWJwcywgY3B1IHBvcnQiKTsKKwkJdmFsLT52YWx1ZS5zID0gYnVmOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAobnIgPj0gZGV2LT5wb3J0cyB8fCBuciA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJY3RybCA9IGlwX3BoeV9yZWFkKHN0YXRlLCBuciwgMCk7CisJc3RhdHVzID0gaXBfcGh5X3JlYWQoc3RhdGUsIG5yLCAxKTsKKwlzcGVlZCA9IGlwX3BoeV9yZWFkKHN0YXRlLCBuciwgMTgpOworCWlmIChjdHJsIDwgMCB8fCBzdGF0dXMgPCAwIHx8IHNwZWVkIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoc3RhdHVzICYgNCkKKwkJbGVuID0gc3ByaW50ZihidWYsICJ1cCwgJWQgTWJwcywgJXMgZHVwbGV4IiwKKwkJCSgoc3BlZWQgJiAoMTw8MTEpKSA/IDEwMCA6IDEwKSwKKwkJCSgoc3BlZWQgJiAoMTw8MTApKSA/ICJmdWxsIiA6ICJoYWxmIikpOworCWVsc2UKKwkJbGVuID0gc3ByaW50ZihidWYsICJkb3duIik7CisKKwlpZiAoY3RybCAmICgxPDwxMikpIHsKKwkJbGVuICs9IHNwcmludGYoYnVmK2xlbiwgIiwgYXV0by1uZWdvdGlhdGUiKTsKKwkJaWYgKCEoc3RhdHVzICYgKDE8PDUpKSkKKwkJCWxlbiArPSBzcHJpbnRmKGJ1ZitsZW4sICIgKGluIHByb2dyZXNzKSIpOworCX0gZWxzZSB7CisJCWxlbiArPSBzcHJpbnRmKGJ1ZitsZW4sICIsIGZpeGVkIHNwZWVkICglZCkiLAorCQkJKChjdHJsICYgKDE8PDEzKSkgPyAxMDAgOiAxMCkpOworCX0KKworCWJ1ZltsZW5dID0gJ1wwJzsKKwl2YWwtPnZhbHVlLnMgPSBidWY7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXAxN3h4X2dldF9wdmlkKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsIGludCBwb3J0LCBpbnQgKnZhbCkKK3sKKwlzdHJ1Y3QgaXAxN3h4X3N0YXRlICpzdGF0ZSA9IGdldF9zdGF0ZShkZXYpOworCisJKnZhbCA9IHN0YXRlLT5wb3J0c1twb3J0XS5wdmlkOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlwMTd4eF9zZXRfcHZpZChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBpbnQgcG9ydCwgaW50IHZhbCkKK3sKKwlzdHJ1Y3QgaXAxN3h4X3N0YXRlICpzdGF0ZSA9IGdldF9zdGF0ZShkZXYpOworCisJaWYgKHZhbCA8IDAgfHwgdmFsID49IE1BWF9WTEFOUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdGF0ZS0+cG9ydHNbcG9ydF0ucHZpZCA9IHZhbDsKKwlyZXR1cm4gc3RhdGUtPnJlZ3MtPnVwZGF0ZV9zdGF0ZShzdGF0ZSk7Cit9CisKKworZW51bSBQb3J0cyB7CisJSVAxN1hYX1BPUlRfU1RBVFVTLAorCUlQMTdYWF9QT1JUX0xJTkssCisJSVAxN1hYX1BPUlRfVEFHR0VELAorCUlQMTdYWF9QT1JUX1BWSUQsCit9OworCitlbnVtIEdsb2JhbHMgeworCUlQMTdYWF9FTkFCTEVfVkxBTiwKKwlJUDE3WFhfR0VUX05BTUUsCisJSVAxN1hYX1JFR0lTVEVSX1BIWSwKKwlJUDE3WFhfUkVHSVNURVJfTUlJLAorCUlQMTdYWF9SRUdJU1RFUl9WQUxVRSwKKwlJUDE3WFhfUkVHSVNURVJfRVJSTk8sCit9OworCitlbnVtIFZsYW5zIHsKKwlJUDE3WFhfVkxBTl9UQUcsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyIGlwMTd4eF9nbG9iYWxbXSA9IHsKKwlbSVAxN1hYX0VOQUJMRV9WTEFOXSA9IHsKKwkJLmlkID0gSVAxN1hYX0VOQUJMRV9WTEFOLAorCQkudHlwZSA9IFNXSVRDSF9UWVBFX0lOVCwKKwkJLm5hbWUgID0gImVuYWJsZV92bGFuIiwKKwkJLmRlc2NyaXB0aW9uID0gIkZsYWcgdG8gZW5hYmxlIG9yIGRpc2FibGUgVkxBTnMgYW5kIHRhZ2dpbmciLAorCQkuZ2V0ICA9IGlwMTd4eF9nZXRfZW5hYmxlX3ZsYW4sCisJCS5zZXQgPSBpcDE3eHhfc2V0X2VuYWJsZV92bGFuLAorCX0sCisJW0lQMTdYWF9HRVRfTkFNRV0gPSB7CisJCS5pZCA9IElQMTdYWF9HRVRfTkFNRSwKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9TVFJJTkcsCisJCS5kZXNjcmlwdGlvbiA9ICJSZXR1cm5zIHRoZSB0eXBlIG9mIElDKyBjaGlwLiIsCisJCS5uYW1lICA9ICJuYW1lIiwKKwkJLmdldCAgPSBpcDE3eHhfcmVhZF9uYW1lLAorCQkuc2V0ID0gTlVMTCwKKwl9LAorCS8qIGphbDogYWRkZWQgZm9yIGxvdyBsZXZlbCBkZWJ1Z2dpbmcgZXRjLiAqLworCVtJUDE3WFhfUkVHSVNURVJfUEhZXSA9IHsKKwkJLmlkID0gSVAxN1hYX1JFR0lTVEVSX1BIWSwKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9JTlQsCisJCS5kZXNjcmlwdGlvbiA9ICJEaXJlY3QgcmVnaXN0ZXIgYWNjZXNzOiBzZXQgUEhZICgwLTQsIG9yIDI5LDMwLDMxKSIsCisJCS5uYW1lICA9ICJwaHkiLAorCQkuZ2V0ICA9IGlwMTd4eF9nZXRfcGh5LAorCQkuc2V0ID0gaXAxN3h4X3NldF9waHksCisJfSwKKwlbSVAxN1hYX1JFR0lTVEVSX01JSV0gPSB7CisJCS5pZCA9IElQMTdYWF9SRUdJU1RFUl9NSUksCisJCS50eXBlID0gU1dJVENIX1RZUEVfSU5ULAorCQkuZGVzY3JpcHRpb24gPSAiRGlyZWN0IHJlZ2lzdGVyIGFjY2Vzczogc2V0IE1JSSByZWdpc3RlciBudW1iZXIgKDAtMzEpIiwKKwkJLm5hbWUgID0gInJlZyIsCisJCS5nZXQgID0gaXAxN3h4X2dldF9yZWcsCisJCS5zZXQgPSBpcDE3eHhfc2V0X3JlZywKKwl9LAorCVtJUDE3WFhfUkVHSVNURVJfVkFMVUVdID0geworCQkuaWQgPSBJUDE3WFhfUkVHSVNURVJfVkFMVUUsCisJCS50eXBlID0gU1dJVENIX1RZUEVfSU5ULAorCQkuZGVzY3JpcHRpb24gPSAiRGlyZWN0IHJlZ2lzdGVyIGFjY2VzczogcmVhZC93cml0ZSB0byByZWdpc3RlciAoMC02NTUzNSkiLAorCQkubmFtZSAgPSAidmFsIiwKKwkJLmdldCAgPSBpcDE3eHhfZ2V0X3ZhbCwKKwkJLnNldCA9IGlwMTd4eF9zZXRfdmFsLAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyIGlwMTd4eF92bGFuW10gPSB7CisJW0lQMTdYWF9WTEFOX1RBR10gPSB7CisJCS5pZCA9IElQMTdYWF9WTEFOX1RBRywKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9JTlQsCisJCS5kZXNjcmlwdGlvbiA9ICJWTEFOIElEICgwLTQwOTUpIFtJUDE3NUQgb25seV0iLAorCQkubmFtZSA9ICJ2aWQiLAorCQkuZ2V0ID0gaXAxN3h4X2dldF90YWcsCisJCS5zZXQgPSBpcDE3eHhfc2V0X3RhZywKKwl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyIGlwMTd4eF9wb3J0W10gPSB7CisJW0lQMTdYWF9QT1JUX1NUQVRVU10gPSB7CisJCS5pZCA9IElQMTdYWF9QT1JUX1NUQVRVUywKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9TVFJJTkcsCisJCS5kZXNjcmlwdGlvbiA9ICJSZXR1cm5zIERldGFpbGVkIHBvcnQgc3RhdHVzIiwKKwkJLm5hbWUgID0gInN0YXR1cyIsCisJCS5nZXQgID0gaXAxN3h4X2dldF9wb3J0X3N0YXR1cywKKwkJLnNldCA9IE5VTEwsCisJfSwKKwlbSVAxN1hYX1BPUlRfTElOS10gPSB7CisJCS5pZCA9IElQMTdYWF9QT1JUX0xJTkssCisJCS50eXBlID0gU1dJVENIX1RZUEVfSU5ULAorCQkuZGVzY3JpcHRpb24gPSAiTGluayBzcGVlZC4gQ2FuIHdyaXRlIDAgZm9yIGF1dG8tbmVnb3RpYXRlLCBvciAxMCBvciAxMDAiLAorCQkubmFtZSAgPSAibGluayIsCisJCS5nZXQgID0gaXAxN3h4X2dldF9wb3J0X3NwZWVkLAorCQkuc2V0ID0gaXAxN3h4X3NldF9wb3J0X3NwZWVkLAorCX0sCisJW0lQMTdYWF9QT1JUX1RBR0dFRF0gPSB7CisJCS5pZCA9IElQMTdYWF9QT1JUX0xJTkssCisJCS50eXBlID0gU1dJVENIX1RZUEVfSU5ULAorCQkuZGVzY3JpcHRpb24gPSAiMCA9IHVudGFnLCAxID0gYWRkIHRhZ3MsIDIgPSBkbyBub3QgYWx0ZXIgKFRoaXMgdmFsdWUgaXMgcmVzZXQgaWYgdmxhbnMgYXJlIGFsdGVyZWQpIiwKKwkJLm5hbWUgID0gInRhZ2dlZCIsCisJCS5nZXQgID0gaXAxN3h4X2dldF90YWdnZWQsCisJCS5zZXQgPSBpcDE3eHhfc2V0X3RhZ2dlZCwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzd2l0Y2hfZGV2X29wcyBpcDE3eHhfb3BzID0geworCS5hdHRyX2dsb2JhbCA9IHsKKwkJLmF0dHIgPSBpcDE3eHhfZ2xvYmFsLAorCQkubl9hdHRyID0gQVJSQVlfU0laRShpcDE3eHhfZ2xvYmFsKSwKKwl9LAorCS5hdHRyX3BvcnQgPSB7CisJCS5hdHRyID0gaXAxN3h4X3BvcnQsCisJCS5uX2F0dHIgPSBBUlJBWV9TSVpFKGlwMTd4eF9wb3J0KSwKKwl9LAorCS5hdHRyX3ZsYW4gPSB7CisJCS5hdHRyID0gaXAxN3h4X3ZsYW4sCisJCS5uX2F0dHIgPSBBUlJBWV9TSVpFKGlwMTd4eF92bGFuKSwKKwl9LAorCisJLmdldF9wb3J0X3B2aWQgPSBpcDE3eHhfZ2V0X3B2aWQsCisJLnNldF9wb3J0X3B2aWQgPSBpcDE3eHhfc2V0X3B2aWQsCisJLmdldF92bGFuX3BvcnRzID0gaXAxN3h4X2dldF9wb3J0cywKKwkuc2V0X3ZsYW5fcG9ydHMgPSBpcDE3eHhfc2V0X3BvcnRzLAorCS5hcHBseV9jb25maWcgPSBpcDE3eHhfYXBwbHksCisJLnJlc2V0X3N3aXRjaCA9IGlwMTd4eF9yZXNldCwKK307CisKK3N0YXRpYyBpbnQgaXAxN3h4X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBpcDE3eHhfc3RhdGUgKnN0YXRlOworCXN0cnVjdCBzd2l0Y2hfZGV2ICpkZXY7CisJaW50IGVycjsKKworCS8qIFdlIG9ubHkgYXR0YWNoIHRvIFBIWSAwLCBidXQgdXNlIGFsbCBhdmFpbGFibGUgUEhZcyAqLworCWlmIChwZGV2LT5tZGlvLmFkZHIgIT0gMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOworCWlmICghc3RhdGUpCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2ID0gJnN0YXRlLT5kZXY7CisKKwlwZGV2LT5wcml2ID0gc3RhdGU7CisJc3RhdGUtPm1paV9idXMgPSBwZGV2LT5tZGlvLmJ1czsKKworCWVyciA9IGdldF9tb2RlbChzdGF0ZSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlkZXYtPnZsYW5zID0gTUFYX1ZMQU5TOworCWRldi0+Y3B1X3BvcnQgPSBzdGF0ZS0+cmVncy0+Q1BVX1BPUlQ7CisJZGV2LT5wb3J0cyA9IHN0YXRlLT5yZWdzLT5OVU1fUE9SVFM7CisJZGV2LT5uYW1lID0gc3RhdGUtPnJlZ3MtPk5BTUU7CisJZGV2LT5vcHMgPSAmaXAxN3h4X29wczsKKworCXByX2luZm8oIklQMTd4eDogRm91bmQgJXMgYXQgJXNcbiIsIGRldi0+bmFtZSwgZGV2X25hbWUoJnBkZXYtPm1kaW8uZGV2KSk7CisJcmV0dXJuIDA7CisKK2Vycm9yOgorCWtmcmVlKHN0YXRlKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGlwMTd4eF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgaXAxN3h4X3N0YXRlICpzdGF0ZSA9IHBkZXYtPnByaXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBkZXYtPmF0dGFjaGVkX2RldjsKKwlpbnQgZXJyOworCisJZXJyID0gcmVnaXN0ZXJfc3dpdGNoKCZzdGF0ZS0+ZGV2LCBkZXYpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJc3RhdGUtPnJlZ2lzdGVyZWQgPSB0cnVlOworCWlwMTd4eF9yZXNldCgmc3RhdGUtPmRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGlwMTd4eF9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGlwMTd4eF9zdGF0ZSAqc3RhdGUgPSBwZGV2LT5wcml2OworCisJaWYgKHN0YXRlLT5yZWdpc3RlcmVkKQorCQl1bnJlZ2lzdGVyX3N3aXRjaCgmc3RhdGUtPmRldik7CisJa2ZyZWUoc3RhdGUpOworfQorCitzdGF0aWMgaW50IGlwMTd4eF9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpcDE3eHhfYW5lZ19kb25lKHN0cnVjdCBwaHlfZGV2aWNlICpwZGV2KQoreworCXJldHVybiAxOwkvKiBSZXR1cm4gYW55IHBvc2l0aXZlIHZhbHVlICovCit9CisKK3N0YXRpYyBpbnQgaXAxN3h4X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwZGV2KQoreworCXBkZXYtPnNwZWVkID0gU1BFRURfMTAwOworCXBkZXYtPmR1cGxleCA9IERVUExFWF9GVUxMOworCXBkZXYtPnBhdXNlID0gcGRldi0+YXN5bV9wYXVzZSA9IDA7CisJcGRldi0+bGluayA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGlwMTd4eF9kcml2ZXJbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJJQysgSVAxN3h4IiwKKwkJLnBoeV9pZAkJPSAweDAyNDMwYzAwLAorCQkucGh5X2lkX21hc2sJPSAweDBmZmZmYzAwLAorCQkuZmVhdHVyZXMJPSBQSFlfQkFTSUNfRkVBVFVSRVMsCisJCS5wcm9iZQkJPSBpcDE3eHhfcHJvYmUsCisJCS5yZW1vdmUJCT0gaXAxN3h4X3JlbW92ZSwKKwkJLmNvbmZpZ19pbml0CT0gaXAxN3h4X2NvbmZpZ19pbml0LAorCQkuY29uZmlnX2FuZWcJPSBpcDE3eHhfY29uZmlnX2FuZWcsCisJCS5hbmVnX2RvbmUJPSBpcDE3eHhfYW5lZ19kb25lLAorCQkucmVhZF9zdGF0dXMJPSBpcDE3eHhfcmVhZF9zdGF0dXMsCisJfQorfTsKKworbW9kdWxlX3BoeV9kcml2ZXIoaXAxN3h4X2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIlBhdHJpY2sgSG9ybiA8cGF0cmljay5ob3JuQGdtYWlsLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIkZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4iKTsKK01PRFVMRV9BVVRIT1IoIk1hcnRpbiBNYXJlcyA8bWpAdWN3LmN6PiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9uZXQvcGh5L212c3dpdGNoLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL25ldC9waHkvbXZzd2l0Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDNiOWUxCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9uZXQvcGh5L212c3dpdGNoLmMKQEAgLTAsMCArMSw0NDYgQEAKKy8qCisgKiBNYXJ2ZWxsIDg4RTYwNjAgc3dpdGNoIGRyaXZlcgorICogQ29weXJpZ2h0IChjKSAyMDA4IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYyIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlICJtdnN3aXRjaC5oIgorCisvKiBVbmRlZmluZSB0aGlzIHRvIHVzZSB0cmFpbGVyIG1vZGUgaW5zdGVhZC4KKyAqIEkgZG9uJ3Qga25vdyBpZiBoZWFkZXIgbW9kZSB3b3JrcyB3aXRoIGFsbCBjaGlwcyAqLworI2RlZmluZSBIRUFERVJfTU9ERQkxCisKK01PRFVMRV9ERVNDUklQVElPTigiTWFydmVsbCA4OEU2MDYwIFN3aXRjaCBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkZlbGl4IEZpZXRrYXUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2RlZmluZSBNVlNXSVRDSF9NQUdJQyAweDg4RTYwNjAKKworc3RydWN0IG12c3dpdGNoX3ByaXYgeworCW5ldGRldl9mZWF0dXJlc190IG9yaWdfZmVhdHVyZXM7CisJdTggdmxhbnNbMTZdOworfTsKKworI2RlZmluZSB0b19tdnN3KF9waHkpICgoc3RydWN0IG12c3dpdGNoX3ByaXYgKikgKF9waHkpLT5wcml2KQorCitzdGF0aWMgaW5saW5lIHUxNgorcjE2KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBhZGRyLCBpbnQgcmVnKQoreworCXN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtPm1kaW8uYnVzOworCisJcmV0dXJuIGJ1cy0+cmVhZChidXMsIGFkZHIsIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordzE2KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBhZGRyLCBpbnQgcmVnLCB1MTYgdmFsKQoreworCXN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtPm1kaW8uYnVzOworCisJYnVzLT53cml0ZShidXMsIGFkZHIsIHJlZywgdmFsKTsKK30KKworCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgorbXZzd2l0Y2hfbWFuZ2xlX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IG12c3dpdGNoX3ByaXYgKnByaXY7CisJY2hhciAqYnVmID0gTlVMTDsKKwl1MTYgdmlkOworCisJcHJpdiA9IGRldi0+cGh5X3B0cjsKKwlpZiAodW5saWtlbHkoIXByaXYpKQorCQlnb3RvIGVycm9yOworCisJaWYgKHVubGlrZWx5KHNrYi0+bGVuIDwgMTYpKQorCQlnb3RvIGVycm9yOworCisjaWZkZWYgSEVBREVSX01PREUKKwlpZiAoX192bGFuX2h3YWNjZWxfZ2V0X3RhZyhza2IsICZ2aWQpKQorCQlnb3RvIGVycm9yOworCisJaWYgKHNrYl9jbG9uZWQoc2tiKSB8fCAoc2tiLT5sZW4gPD0gNjIpIHx8IChza2JfaGVhZHJvb20oc2tiKSA8IE1WX0hFQURFUl9TSVpFKSkgeworCQlpZiAocHNrYl9leHBhbmRfaGVhZChza2IsIE1WX0hFQURFUl9TSVpFLCAoc2tiLT5sZW4gPCA2MiA/IDYyIC0gc2tiLT5sZW4gOiAwKSwgR0ZQX0FUT01JQykpCisJCQlnb3RvIGVycm9yX2V4cGFuZDsKKwkJaWYgKHNrYi0+bGVuIDwgNjIpCisJCQlza2ItPmxlbiA9IDYyOworCX0KKwlidWYgPSBza2JfcHVzaChza2IsIE1WX0hFQURFUl9TSVpFKTsKKyNlbHNlCisJaWYgKF9fdmxhbl9nZXRfdGFnKHNrYiwgJnZpZCkpCisJCWdvdG8gZXJyb3I7CisKKwlpZiAodW5saWtlbHkoKHZpZCA+IDE1IHx8ICFwcml2LT52bGFuc1t2aWRdKSkpCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoc2tiLT5sZW4gPD0gNjQpIHsKKwkJaWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCA2NCArIE1WX1RSQUlMRVJfU0laRSAtIHNrYi0+bGVuLCBHRlBfQVRPTUlDKSkKKwkJCWdvdG8gZXJyb3JfZXhwYW5kOworCisJCWJ1ZiA9IHNrYi0+ZGF0YSArIDY0OworCQlza2ItPmxlbiA9IDY0ICsgTVZfVFJBSUxFUl9TSVpFOworCX0gZWxzZSB7CisJCWlmIChza2JfY2xvbmVkKHNrYikgfHwgdW5saWtlbHkoc2tiX3RhaWxyb29tKHNrYikgPCA0KSkgeworCQkJaWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCA0LCBHRlBfQVRPTUlDKSkKKwkJCQlnb3RvIGVycm9yX2V4cGFuZDsKKwkJfQorCQlidWYgPSBza2JfcHV0KHNrYiwgNCk7CisJfQorCisJLyogbW92ZSB0aGUgZXRoZXJuZXQgaGVhZGVyIDQgYnl0ZXMgZm9yd2FyZCwgb3ZlcndyaXRpbmcgdGhlIHZsYW4gdGFnICovCisJbWVtbW92ZShza2ItPmRhdGEgKyA0LCBza2ItPmRhdGEsIDEyKTsKKwlza2ItPmRhdGEgKz0gNDsKKwlza2ItPmxlbiAtPSA0OworCXNrYi0+bWFjX2hlYWRlciArPSA0OworI2VuZGlmCisKKwlpZiAoIWJ1ZikKKwkJZ290byBlcnJvcjsKKworCisjaWZkZWYgSEVBREVSX01PREUKKwkvKiBwcmVwZW5kIHRoZSB0YWcgKi8KKwkqKChfX2JlMTYgKikgYnVmKSA9IGNwdV90b19iZTE2KAorCQkoKHZpZCA8PCBNVl9IRUFERVJfVkxBTl9TKSAmIE1WX0hFQURFUl9WTEFOX00pIHwKKwkJKChwcml2LT52bGFuc1t2aWRdIDw8IE1WX0hFQURFUl9QT1JUU19TKSAmIE1WX0hFQURFUl9QT1JUU19NKQorCSk7CisjZWxzZQorCS8qIGFwcGVuZCB0aGUgdGFnICovCisJKigoX19iZTMyICopIGJ1ZikgPSBjcHVfdG9fYmUzMigoCisJCShNVl9UUkFJTEVSX09WRVJSSURFIDw8IE1WX1RSQUlMRVJfRkxBR1NfUykgfAorCQkoKHByaXYtPnZsYW5zW3ZpZF0gJiBNVl9UUkFJTEVSX1BPUlRTX00pIDw8IE1WX1RSQUlMRVJfUE9SVFNfUykKKwkpKTsKKyNlbmRpZgorCisJcmV0dXJuIHNrYjsKKworZXJyb3JfZXhwYW5kOgorCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCXByaW50aygiJXM6IGZhaWxlZCB0byBleHBhbmQvdXBkYXRlIHNrYiBmb3IgdGhlIHN3aXRjaFxuIiwgZGV2LT5uYW1lKTsKKworZXJyb3I6CisJLyogYW55IGVycm9ycz8gZHJvcCB0aGUgcGFja2V0ISAqLworCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCittdnN3aXRjaF9tYW5nbGVfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgbXZzd2l0Y2hfcHJpdiAqcHJpdjsKKwl1bnNpZ25lZCBjaGFyICpidWY7CisJaW50IHZsYW4gPSAtMTsKKwlpbnQgaTsKKworCXByaXYgPSBkZXYtPnBoeV9wdHI7CisJaWYgKFdBUk5fT05fT05DRSghcHJpdikpCisJCXJldHVybjsKKworI2lmZGVmIEhFQURFUl9NT0RFCisJYnVmID0gc2tiLT5kYXRhOworCXNrYl9wdWxsKHNrYiwgTVZfSEVBREVSX1NJWkUpOworI2Vsc2UKKwlidWYgPSBza2ItPmRhdGEgKyBza2ItPmxlbiAtIE1WX1RSQUlMRVJfU0laRTsKKwlpZiAoYnVmWzBdICE9IDB4ODApCisJCXJldHVybjsKKyNlbmRpZgorCisJLyogbG9vayBmb3IgdGhlIHZsYW4gbWF0Y2hpbmcgdGhlIGluY29taW5nIHBvcnQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcml2LT52bGFucyk7IGkrKykgeworCQlpZiAoKDEgPDwgYnVmWzFdKSAmIHByaXYtPnZsYW5zW2ldKQorCQkJdmxhbiA9IGk7CisJfQorCisJaWYgKHZsYW4gPT0gLTEpCisJCXJldHVybjsKKworCV9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLCBodG9ucyhFVEhfUF84MDIxUSksIHZsYW4pOworfQorCisKK3N0YXRpYyBpbnQKK212c3dpdGNoX3dhaXRfbWFzayhzdHJ1Y3QgcGh5X2RldmljZSAqcGRldiwgaW50IGFkZHIsIGludCByZWcsIHUxNiBtYXNrLCB1MTYgdmFsKQoreworCWludCBpID0gMTAwOworCXUxNiByOworCisJZG8geworCQlyID0gcjE2KHBkZXYsIGFkZHIsIHJlZykgJiBtYXNrOworCQlpZiAociA9PSB2YWwpCisJCQlyZXR1cm4gMDsKKwl9IHdoaWxlKC0taSA+IDApOworCXJldHVybiAtRVRJTUVET1VUOworfQorCitzdGF0aWMgaW50CittdnN3aXRjaF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbXZzd2l0Y2hfcHJpdiAqcHJpdiA9IHRvX212c3cocGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBkZXYtPmF0dGFjaGVkX2RldjsKKwl1OCB2bG1hcCA9IDA7CisJaW50IGk7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcmludGsoIiVzOiBNYXJ2ZWxsIDg4RTYwNjAgUEhZIGRyaXZlciBhdHRhY2hlZC5cbiIsIGRldi0+bmFtZSk7CisJbGlua21vZGVfemVybyhwZGV2LT5zdXBwb3J0ZWQpOworCWxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwYmFzZVRfRnVsbF9CSVQsIHBkZXYtPnN1cHBvcnRlZCk7CisJbGlua21vZGVfY29weShwZGV2LT5hZHZlcnRpc2luZywgcGRldi0+c3VwcG9ydGVkKTsKKwlkZXYtPnBoeV9wdHIgPSBwcml2OworCXBkZXYtPmlycSA9IFBIWV9QT0xMOworI2lmZGVmIEhFQURFUl9NT0RFCisJZGV2LT5mbGFncyB8PSBJRkZfUFJPTUlTQzsKKyNlbmRpZgorCisJLyogaW5pdGlhbGl6ZSBkZWZhdWx0IHZsYW5zICovCisJZm9yIChpID0gMDsgaSA8IE1WX1BPUlRTOyBpKyspCisJCXByaXYtPnZsYW5zWyhpID09IE1WX1dBTlBPUlQgPyAyIDogMSldIHw9ICgxIDw8IGkpOworCisJLyogYmVmb3JlIGVudGVyaW5nIHJlc2V0LCBkaXNhYmxlIGFsbCBwb3J0cyAqLworCWZvciAoaSA9IDA7IGkgPCBNVl9QT1JUUzsgaSsrKQorCQl3MTYocGRldiwgTVZfUE9SVFJFRyhDT05UUk9MLCBpKSwgMHgwMCk7CisKKwltc2xlZXAoMik7IC8qIHdhaXQgZm9yIHRoZSBzdGF0dXMgY2hhbmdlIHRvIHNldHRsZSBpbiAqLworCisJLyogcHV0IHRoZSBBVFUgaW4gcmVzZXQgKi8KKwl3MTYocGRldiwgTVZfU1dJVENIUkVHKEFUVV9DVFJMKSwgTVZfQVRVQ1RMX1JFU0VUKTsKKworCWkgPSBtdnN3aXRjaF93YWl0X21hc2socGRldiwgTVZfU1dJVENIUkVHKEFUVV9DVFJMKSwgTVZfQVRVQ1RMX1JFU0VULCAwKTsKKwlpZiAoaSA8IDApIHsKKwkJcHJpbnRrKCIlczogVGltZW91dCB3YWl0aW5nIGZvciB0aGUgc3dpdGNoIHRvIHJlc2V0LlxuIiwgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIGk7CisJfQorCisJLyogc2V0IHRoZSBBVFUgZmxhZ3MgKi8KKwl3MTYocGRldiwgTVZfU1dJVENIUkVHKEFUVV9DVFJMKSwKKwkJTVZfQVRVQ1RMX05PX0xFQVJOIHwKKwkJTVZfQVRVQ1RMX0FUVV8xSyB8CisJCU1WX0FUVUNUTF9BR0VUSU1FKE1WX0FUVUNUTF9BR0VUSU1FX01JTikgLyogbWluaW11bSB3aXRob3V0IGRpc2FibGluZyBhZ2VpbmcgKi8KKwkpOworCisJLyogaW5pdGlhbGl6ZSB0aGUgY3B1IHBvcnQgKi8KKwl3MTYocGRldiwgTVZfUE9SVFJFRyhDT05UUk9MLCBNVl9DUFVQT1JUKSwKKyNpZmRlZiBIRUFERVJfTU9ERQorCQlNVl9QT1JUQ1RSTF9IRUFERVIgfAorI2Vsc2UKKwkJTVZfUE9SVENUUkxfUlhUUiB8CisJCU1WX1BPUlRDVFJMX1RYVFIgfAorI2VuZGlmCisJCU1WX1BPUlRDVFJMX0VOQUJMRUQKKwkpOworCS8qIHdhaXQgZm9yIHRoZSBwaHkgY2hhbmdlIHRvIHNldHRsZSBpbiAqLworCW1zbGVlcCgyKTsKKwlmb3IgKGkgPSAwOyBpIDwgTVZfUE9SVFM7IGkrKykgeworCQl1OCBwdmlkID0gMDsKKwkJaW50IGo7CisKKwkJdmxtYXAgPSAwOworCisJCS8qIGxvb2sgZm9yIHRoZSBtYXRjaGluZyB2bGFuICovCisJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKHByaXYtPnZsYW5zKTsgaisrKSB7CisJCQlpZiAocHJpdi0+dmxhbnNbal0gJiAoMSA8PCBpKSkgeworCQkJCXZsbWFwID0gcHJpdi0+dmxhbnNbal07CisJCQkJcHZpZCA9IGo7CisJCQl9CisJCX0KKwkJLyogbGVhdmUgcG9ydCB1bmNvbmZpZ3VyZWQgaWYgaXQncyBub3QgcGFydCBvZiBhIHZsYW4gKi8KKwkJaWYgKCF2bG1hcCkKKwkJCWNvbnRpbnVlOworCisJCS8qIGFkZCB0aGUgY3B1IHBvcnQgdG8gdGhlIGFsbG93ZWQgZGVzdGluYXRpb25zIGxpc3QgKi8KKwkJdmxtYXAgfD0gKDEgPDwgTVZfQ1BVUE9SVCk7CisKKwkJLyogdGFrZSBwb3J0IG91dCBvZiBpdHMgb3duIHZsYW4gZGVzdGluYXRpb24gbWFwICovCisJCXZsbWFwICY9IH4oMSA8PCBpKTsKKworCQkvKiBhcHBseSB2bGFuIHNldHRpbmdzICovCisJCXcxNihwZGV2LCBNVl9QT1JUUkVHKFZMQU5NQVAsIGkpLAorCQkJTVZfUE9SVFZMQU5fUE9SVFModmxtYXApIHwKKwkJCU1WX1BPUlRWTEFOX0lEKGkpCisJCSk7CisKKwkJLyogcmUtZW5hYmxlIHBvcnQgKi8KKwkJdzE2KHBkZXYsIE1WX1BPUlRSRUcoQ09OVFJPTCwgaSksCisJCQlNVl9QT1JUQ1RSTF9FTkFCTEVECisJCSk7CisJfQorCisJdzE2KHBkZXYsIE1WX1BPUlRSRUcoVkxBTk1BUCwgTVZfQ1BVUE9SVCksCisJCU1WX1BPUlRWTEFOX0lEKE1WX0NQVVBPUlQpCisJKTsKKworCS8qIHNldCB0aGUgcG9ydCBhc3NvY2lhdGlvbiB2ZWN0b3IgKi8KKwlmb3IgKGkgPSAwOyBpIDw9IE1WX1BPUlRTOyBpKyspIHsKKwkJdzE2KHBkZXYsIE1WX1BPUlRSRUcoQVNTT0MsIGkpLAorCQkJTVZfUE9SVEFTU09DX1BPUlRTKDEgPDwgaSkKKwkJKTsKKwl9CisKKwkvKiBpbml0IHN3aXRjaCBjb250cm9sICovCisJdzE2KHBkZXYsIE1WX1NXSVRDSFJFRyhDVFJMKSwKKwkJTVZfU1dJVENIQ1RMX01TSVpFIHwKKwkJTVZfU1dJVENIQ1RMX0RST1AKKwkpOworCisJZGV2LT5ldGhfbWFuZ2xlX3J4ID0gbXZzd2l0Y2hfbWFuZ2xlX3J4OworCWRldi0+ZXRoX21hbmdsZV90eCA9IG12c3dpdGNoX21hbmdsZV90eDsKKwlwcml2LT5vcmlnX2ZlYXR1cmVzID0gZGV2LT5mZWF0dXJlczsKKworI2lmZGVmIEhFQURFUl9NT0RFCisJZGV2LT5wcml2X2ZsYWdzIHw9IElGRl9OT19JUF9BTElHTjsKKwlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYIHwgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFg7CisjZWxzZQorCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfUlg7CisjZW5kaWYKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CittdnN3aXRjaF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGRldikKK3sKKwlwZGV2LT5zcGVlZCA9IFNQRUVEXzEwMDsKKwlwZGV2LT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwlwZGV2LT5saW5rID0gMTsKKworCS8qIFhYWCB1Z2x5IHdvcmthcm91bmQ6IHdlIGNhbid0IGZvcmNlIHRoZSBzd2l0Y2gKKwkgKiB0byBncmFjZWZ1bGx5IGhhbmRsZSBob3N0cyBtb3ZpbmcgZnJvbSBvbmUgcG9ydCB0byBhbm90aGVyLAorCSAqIHNvIHdlIGhhdmUgdG8gcmVndWxhcmx5IGNsZWFyIHRoZSBBVFUgZGF0YWJhc2UgKi8KKworCS8qIHdhaXQgZm9yIHRoZSBBVFUgdG8gYmVjb21lIGF2YWlsYWJsZSAqLworCW12c3dpdGNoX3dhaXRfbWFzayhwZGV2LCBNVl9TV0lUQ0hSRUcoQVRVX09QKSwgTVZfQVRVT1BfSU5QUk9HUkVTUywgMCk7CisKKwkvKiBmbHVzaCB0aGUgQVRVICovCisJdzE2KHBkZXYsIE1WX1NXSVRDSFJFRyhBVFVfT1ApLAorCQlNVl9BVFVPUF9JTlBST0dSRVNTIHwKKwkJTVZfQVRVT1BfRkxVU0hfQUxMCisJKTsKKworCS8qIHdhaXQgZm9yIG9wZXJhdGlvbiB0byBjb21wbGV0ZSAqLworCW12c3dpdGNoX3dhaXRfbWFzayhwZGV2LCBNVl9TV0lUQ0hSRUcoQVRVX09QKSwgTVZfQVRVT1BfSU5QUk9HUkVTUywgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbXZzd2l0Y2hfYW5lZ19kb25lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCit7CisJcmV0dXJuIDE7CS8qIFJldHVybiBhbnkgcG9zaXRpdmUgdmFsdWUgKi8KK30KKworc3RhdGljIGludAorbXZzd2l0Y2hfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK212c3dpdGNoX2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbXZzd2l0Y2hfcHJpdiAqcHJpdiA9IHRvX212c3cocGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBkZXYtPmF0dGFjaGVkX2RldjsKKworCWlmICghZGV2KQorCQlyZXR1cm47CisKKwlkZXYtPnBoeV9wdHIgPSBOVUxMOworCWRldi0+ZXRoX21hbmdsZV9yeCA9IE5VTEw7CisJZGV2LT5ldGhfbWFuZ2xlX3R4ID0gTlVMTDsKKwlkZXYtPmZlYXR1cmVzID0gcHJpdi0+b3JpZ19mZWF0dXJlczsKKwlkZXYtPnByaXZfZmxhZ3MgJj0gfklGRl9OT19JUF9BTElHTjsKK30KKworc3RhdGljIHZvaWQKK212c3dpdGNoX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbXZzd2l0Y2hfcHJpdiAqcHJpdiA9IHRvX212c3cocGRldik7CisKKwlrZnJlZShwcml2KTsKK30KKworc3RhdGljIGludAorbXZzd2l0Y2hfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG12c3dpdGNoX3ByaXYgKnByaXY7CisKKwlwcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG12c3dpdGNoX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAocHJpdiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBkZXYtPnByaXYgPSBwcml2OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK212c3dpdGNoX2ZpeHVwKHN0cnVjdCBwaHlfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1paV9idXMgKmJ1cyA9IGRldi0+bWRpby5idXM7CisJdTE2IHJlZzsKKworCWlmIChkZXYtPm1kaW8uYWRkciAhPSAweDEwKQorCQlyZXR1cm4gMDsKKworCXJlZyA9IGJ1cy0+cmVhZChidXMsIE1WX1BPUlRSRUcoSURFTlQsIDApKSAmIE1WX0lERU5UX01BU0s7CisJaWYgKHJlZyAhPSBNVl9JREVOVF9WQUxVRSkKKwkJcmV0dXJuIDA7CisKKwlkZXYtPnBoeV9pZCA9IE1WU1dJVENIX01BR0lDOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtdnN3aXRjaF9kcml2ZXIgPSB7CisJLm5hbWUJCT0gIk1hcnZlbGwgODhFNjA2MCIsCisJLnBoeV9pZAkJPSBNVlNXSVRDSF9NQUdJQywKKwkucGh5X2lkX21hc2sJPSAweGZmZmZmZmZmLAorCS5mZWF0dXJlcwk9IFBIWV9CQVNJQ19GRUFUVVJFUywKKwkucHJvYmUJCT0gJm12c3dpdGNoX3Byb2JlLAorCS5yZW1vdmUJCT0gJm12c3dpdGNoX3JlbW92ZSwKKwkuZGV0YWNoCQk9ICZtdnN3aXRjaF9kZXRhY2gsCisJLmNvbmZpZ19pbml0CT0gJm12c3dpdGNoX2NvbmZpZ19pbml0LAorCS5jb25maWdfYW5lZwk9ICZtdnN3aXRjaF9jb25maWdfYW5lZywKKwkuYW5lZ19kb25lCT0gJm12c3dpdGNoX2FuZWdfZG9uZSwKKwkucmVhZF9zdGF0dXMJPSAmbXZzd2l0Y2hfcmVhZF9zdGF0dXMsCit9OworCitzdGF0aWMgaW50IF9faW5pdAorbXZzd2l0Y2hfaW5pdCh2b2lkKQoreworCXBoeV9yZWdpc3Rlcl9maXh1cF9mb3JfaWQoUEhZX0FOWV9JRCwgbXZzd2l0Y2hfZml4dXApOworCXJldHVybiBwaHlfZHJpdmVyX3JlZ2lzdGVyKCZtdnN3aXRjaF9kcml2ZXIsIFRISVNfTU9EVUxFKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0CittdnN3aXRjaF9leGl0KHZvaWQpCit7CisJcGh5X2RyaXZlcl91bnJlZ2lzdGVyKCZtdnN3aXRjaF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChtdnN3aXRjaF9pbml0KTsKK21vZHVsZV9leGl0KG12c3dpdGNoX2V4aXQpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9uZXQvcGh5L212c3dpdGNoLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL25ldC9waHkvbXZzd2l0Y2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjJhMWExCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9uZXQvcGh5L212c3dpdGNoLmgKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiBNYXJ2ZWxsIDg4RTYwNjAgc3dpdGNoIGRyaXZlcgorICogQ29weXJpZ2h0IChjKSAyMDA4IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYyIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICovCisjaWZuZGVmIF9fTVZTV0lUQ0hfSAorI2RlZmluZSBfX01WU1dJVENIX0gKKworI2RlZmluZSBNVl9IRUFERVJfU0laRQkyCisjZGVmaW5lIE1WX0hFQURFUl9QT1JUU19NCTB4MDAxZgorI2RlZmluZSBNVl9IRUFERVJfUE9SVFNfUwkwCisjZGVmaW5lIE1WX0hFQURFUl9WTEFOX00JMHhmMDAwCisjZGVmaW5lIE1WX0hFQURFUl9WTEFOX1MJMTIKKworI2RlZmluZSBNVl9UUkFJTEVSX1NJWkUJNAorI2RlZmluZSBNVl9UUkFJTEVSX1BPUlRTX00JMHgxZgorI2RlZmluZSBNVl9UUkFJTEVSX1BPUlRTX1MJMTYKKyNkZWZpbmUgTVZfVFJBSUxFUl9GTEFHU19TCTI0CisjZGVmaW5lIE1WX1RSQUlMRVJfT1ZFUlJJREUJMHg4MAorCisKKyNkZWZpbmUgTVZfUE9SVFMJNQorI2RlZmluZSBNVl9XQU5QT1JUCTQKKyNkZWZpbmUgTVZfQ1BVUE9SVAk1CisKKyNkZWZpbmUgTVZfQkFTRQkJMHgxMAorCisjZGVmaW5lIE1WX1BIWVBPUlRfQkFTRQkJKE1WX0JBU0UgKyAweDApCisjZGVmaW5lIE1WX1BIWVBPUlQoX24pCQkoTVZfUEhZUE9SVF9CQVNFICsgKF9uKSkKKyNkZWZpbmUgTVZfU1dJVENIUE9SVF9CQVNFCShNVl9CQVNFICsgMHg4KQorI2RlZmluZSBNVl9TV0lUQ0hQT1JUKF9uKQkoTVZfU1dJVENIUE9SVF9CQVNFICsgKF9uKSkKKyNkZWZpbmUgTVZfU1dJVENIUkVHUwkJKE1WX0JBU0UgKyAweGYpCisKK2VudW0geworCU1WX1BIWV9DT05UUk9MICAgICAgPSAweDAwLAorCU1WX1BIWV9TVEFUVVMgICAgICAgPSAweDAxLAorCU1WX1BIWV9JREVOVDAgICAgICAgPSAweDAyLAorCU1WX1BIWV9JREVOVDEgICAgICAgPSAweDAzLAorCU1WX1BIWV9BTkVHICAgICAgICAgPSAweDA0LAorCU1WX1BIWV9MSU5LX0FCSUxJVFkgPSAweDA1LAorCU1WX1BIWV9BTkVHX0VYUEFORCAgPSAweDA2LAorCU1WX1BIWV9YTUlUX05FWFRQICAgPSAweDA3LAorCU1WX1BIWV9MSU5LX05FWFRQICAgPSAweDA4LAorCU1WX1BIWV9DT05UUk9MMSAgICAgPSAweDEwLAorCU1WX1BIWV9TVEFUVVMxICAgICAgPSAweDExLAorCU1WX1BIWV9JTlRSX0VOICAgICAgPSAweDEyLAorCU1WX1BIWV9JTlRSX1NUQVRVUyAgPSAweDEzLAorCU1WX1BIWV9JTlRSX1BPUlQgICAgPSAweDE0LAorCU1WX1BIWV9SRUNWX0NPVU5URVIgPSAweDE2LAorCU1WX1BIWV9MRURfUEFSQUxMRUwgPSAweDE2LAorCU1WX1BIWV9MRURfU1RSRUFNICAgPSAweDE3LAorCU1WX1BIWV9MRURfQ1RSTCAgICAgPSAweDE4LAorCU1WX1BIWV9MRURfT1ZFUlJJREUgPSAweDE5LAorCU1WX1BIWV9WQ1RfQ1RSTCAgICAgPSAweDFhLAorCU1WX1BIWV9WQ1RfU1RBVFVTICAgPSAweDFiLAorCU1WX1BIWV9DT05UUk9MMiAgICAgPSAweDFlCit9OworI2RlZmluZSBNVl9QSFlSRUcoX3R5cGUsIF9wb3J0KSBNVl9QSFlQT1JUKF9wb3J0KSwgTVZfUEhZXyMjX3R5cGUKKworZW51bSB7CisJTVZfUE9SVF9TVEFUVVMgICAgICA9IDB4MDAsCisJTVZfUE9SVF9JREVOVCAgICAgICA9IDB4MDMsCisJTVZfUE9SVF9DT05UUk9MICAgICA9IDB4MDQsCisJTVZfUE9SVF9WTEFOTUFQICAgICA9IDB4MDYsCisJTVZfUE9SVF9BU1NPQyAgICAgICA9IDB4MGIsCisJTVZfUE9SVF9SWENPVU5UICAgICA9IDB4MTAsCisJTVZfUE9SVF9UWENPVU5UICAgICA9IDB4MTEsCit9OworI2RlZmluZSBNVl9QT1JUUkVHKF90eXBlLCBfcG9ydCkgTVZfU1dJVENIUE9SVChfcG9ydCksIE1WX1BPUlRfIyNfdHlwZQorCitlbnVtIHsKKwlNVl9QT1JUQ1RSTF9CTE9DSyAgID0gICgxIDw8IDApLAorCU1WX1BPUlRDVFJMX0xFQVJOICAgPSAgKDIgPDwgMCksCisJTVZfUE9SVENUUkxfRU5BQkxFRCA9ICAoMyA8PCAwKSwKKwlNVl9QT1JUQ1RSTF9WTEFOVFVOID0gICgxIDw8IDcpLAkvKiBFbmZvcmNlIFZMQU5zIG9uIHBhY2tldHMgKi8KKwlNVl9QT1JUQ1RSTF9SWFRSICAgID0gICgxIDw8IDgpLAkvKiBFbmFibGUgTWFydmVsbCBwYWNrZXQgdHJhaWxlciBmb3IgaW5ncmVzcyAqLworCU1WX1BPUlRDVFJMX0hFQURFUgk9ICgxIDw8IDExKSwJLyogRW5hYmxlIE1hcnZlbGwgcGFja2V0IGhlYWRlciBtb2RlIGZvciBwb3J0ICovCisJTVZfUE9SVENUUkxfVFhUUiAgICA9ICgxIDw8IDE0KSwJLyogRW5hYmxlIE1hcnZlbGwgcGFja2V0IHRyYWlsZXIgZm9yIGVncmVzcyAqLworCU1WX1BPUlRDVFJMX0ZPUkNFRkwgPSAoMSA8PCAxNSksCS8qIGZvcmNlIGZsb3cgY29udHJvbCAqLworfTsKKworI2RlZmluZSBNVl9QT1JUVkxBTl9JRChfbikgKCgoX24pICYgMHhmKSA8PCAxMikKKyNkZWZpbmUgTVZfUE9SVFZMQU5fUE9SVFMoX24pICgoX24pICYgMHgzZikKKworI2RlZmluZSBNVl9QT1JUQVNTT0NfUE9SVFMoX24pICgoX24pICYgMHgxZikKKyNkZWZpbmUgTVZfUE9SVEFTU09DX01PTklUT1IJKDEgPDwgMTUpCisKK2VudW0geworCU1WX1NXSVRDSF9NQUMwICAgICAgPSAweDAxLAorCU1WX1NXSVRDSF9NQUMxICAgICAgPSAweDAyLAorCU1WX1NXSVRDSF9NQUMyICAgICAgPSAweDAzLAorCU1WX1NXSVRDSF9DVFJMICAgICAgPSAweDA0LAorCU1WX1NXSVRDSF9BVFVfQ1RSTCAgPSAweDBhLAorCU1WX1NXSVRDSF9BVFVfT1AgICAgPSAweDBiLAorCU1WX1NXSVRDSF9BVFVfREFUQSAgPSAweDBjLAorCU1WX1NXSVRDSF9BVFVfTUFDMCAgPSAweDBkLAorCU1WX1NXSVRDSF9BVFVfTUFDMSAgPSAweDBlLAorCU1WX1NXSVRDSF9BVFVfTUFDMiAgPSAweDBmLAorfTsKKyNkZWZpbmUgTVZfU1dJVENIUkVHKF90eXBlKSBNVl9TV0lUQ0hSRUdTLCBNVl9TV0lUQ0hfIyNfdHlwZQorCitlbnVtIHsKKwlNVl9TV0lUQ0hDVExfRUVJRSAgID0gICgxIDw8IDApLAkvKiBFRVBST00gaW50ZXJydXB0IGVuYWJsZSAqLworCU1WX1NXSVRDSENUTF9QSFlJRSAgPSAgKDEgPDwgMSksCS8qIFBIWSBpbnRlcnJ1cHQgZW5hYmxlICovCisJTVZfU1dJVENIQ1RMX0FUVURPTkU9ICAoMSA8PCAyKSwJLyogQVRVIGRvbmUgaW50ZXJydXB0IGVuYWJsZSAqLworCU1WX1NXSVRDSENUTF9BVFVJRSAgPSAgKDEgPDwgMyksCS8qIEFUVSBpbnRlcnJ1cHQgZW5hYmxlICovCisJTVZfU1dJVENIQ1RMX0NUUk1PREU9ICAoMSA8PCA4KSwJLyogc3RhdGlzdGljcyBmb3IgcnggYW5kIHR4IGVycm9ycyAqLworCU1WX1NXSVRDSENUTF9SRUxPQUQgPSAgKDEgPDwgOSksCS8qIHJlbG9hZCByZWdpc3RlcnMgZnJvbSBlZXByb20gKi8KKwlNVl9TV0lUQ0hDVExfTVNJWkUgID0gKDEgPDwgMTApLAkvKiBpbmNyZWFzZSBtYXhpbXVtIGZyYW1lIHNpemUgKi8KKwlNVl9TV0lUQ0hDVExfRFJPUCAgID0gKDEgPDwgMTMpLAkvKiBkaXNjYXJkIGZyYW1lcyB3aXRoIGV4Y2Vzc2l2ZSBjb2xsaXNpb25zICovCit9OworCitlbnVtIHsKKyNkZWZpbmUgTVZfQVRVQ1RMX0FHRVRJTUVfTUlOCTE2CisjZGVmaW5lIE1WX0FUVUNUTF9BR0VUSU1FX01BWAk0MDgwCisjZGVmaW5lIE1WX0FUVUNUTF9BR0VUSU1FKF9uKQkoKCgoX24pIC8gMTYpICYgMHhmZikgPDwgNCkKKwlNVl9BVFVDVExfQVRVXzI1NiAgID0gKDAgPDwgMTIpLAorCU1WX0FUVUNUTF9BVFVfNTEyICAgPSAoMSA8PCAxMiksCisJTVZfQVRVQ1RMX0FUVV8xSwk9ICgyIDw8IDEyKSwKKwlNVl9BVFVDVExfQVRVTUFTSyAgID0gKDMgPDwgMTIpLAorCU1WX0FUVUNUTF9OT19MRUFSTiAgPSAoMSA8PCAxNCksCisJTVZfQVRVQ1RMX1JFU0VUICAgICA9ICgxIDw8IDE1KSwKK307CisKK2VudW0geworI2RlZmluZSBNVl9BVFVPUF9EQk5VTShfbikJKChfbikgJiAweDBmKQorCisJTVZfQVRVT1BfTk9PUCAgICAgICA9ICgwIDw8IDEyKSwKKwlNVl9BVFVPUF9GTFVTSF9BTEwgID0gKDEgPDwgMTIpLAorCU1WX0FUVU9QX0ZMVVNIX1UgICAgPSAoMiA8PCAxMiksCisJTVZfQVRVT1BfTE9BRF9EQiAgICA9ICgzIDw8IDEyKSwKKwlNVl9BVFVPUF9HRVRfTkVYVCAgID0gKDQgPDwgMTIpLAorCU1WX0FUVU9QX0ZMVVNIX0RCICAgPSAoNSA8PCAxMiksCisJTVZfQVRVT1BfRkxVU0hfREJfVVU9ICg2IDw8IDEyKSwKKworCU1WX0FUVU9QX0lOUFJPR1JFU1MgPSAoMSA8PCAxNSksCit9OworCisjZGVmaW5lIE1WX0lERU5UX01BU0sJCTB4ZmZmMAorI2RlZmluZSBNVl9JREVOVF9WQUxVRQkJMHgwNjAwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9uZXQvcGh5L3BzYjY5NzAuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9wc2I2OTcwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNlZTc1NwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9wc2I2OTcwLmMKQEAgLTAsMCArMSw0NDQgQEAKKy8qCisgKiBMYW50aXEgUFNCNjk3MCAoVGFudG9zKSBTd2l0Y2ggZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5LDIwMTAgVGVhbSBFbWJlZGRlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYyIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGUgc3dpdGNoIHByb2dyYW1taW5nIGRvbmUgaW4gdGhpcyBkcml2ZXIgZm9sbG93cyB0aGUgCisgKiAiRXRoZXJuZXQgVHJhZmZpYyBTZXBhcmF0aW9uIHVzaW5nIFZMQU4iIEFwcGxpY2F0aW9uIE5vdGUgYXMKKyAqIHB1Ymxpc2hlZCBieSBMYW50aXEuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N3aXRjaC5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKworI2RlZmluZSBQU0I2OTcwX01BWF9WTEFOUwkJMTYKKyNkZWZpbmUgUFNCNjk3MF9OVU1fUE9SVFMJCTcKKyNkZWZpbmUgUFNCNjk3MF9ERUZBVUxUX1BPUlRfQ1BVCTYKKyNkZWZpbmUgUFNCNjk3MF9JU19DUFVfUE9SVCh4KQkJKCh4KSA+IDQpCisKKyNkZWZpbmUgUEhZQUREUihfcmVnKQkJKChfcmVnID4+IDUpICYgMHhmZiksIChfcmVnICYgMHgxZikKKworLyogLS0tIElkZW50aWZpY2F0aW9uIC0tLSAqLworI2RlZmluZSBQU0I2OTcwX0NJMAkJMHgwMTAwCisjZGVmaW5lIFBTQjY5NzBfQ0kwX01BU0sJMHgwMDBmCisjZGVmaW5lIFBTQjY5NzBfQ0kxCQkweDAxMDEKKyNkZWZpbmUgUFNCNjk3MF9DSTFfVkFMCQkweDI1OTkKKyNkZWZpbmUgUFNCNjk3MF9DSTFfTUFTSwkweGZmZmYKKworLyogLS0tIFZMQU4gZmlsdGVyIHRhYmxlIC0tLSAqLworI2RlZmluZSBQU0I2OTcwX1ZGeEwoaSkJCSgoaSkqMisweDEwKQkvKiBWTEFOIEZpbHRlciBMb3cgKi8KKyNkZWZpbmUgUFNCNjk3MF9WRnhMX1ZWCQkoMSA8PCAxNSkJLyogVkxBTl9WYWxpZCAqLworCisjZGVmaW5lIFBTQjY5NzBfVkZ4SChpKQkJKChpKSoyKzB4MTEpCS8qIFZMQU4gRmlsdGVyIEhpZ2ggKi8KKyNkZWZpbmUgUFNCNjk3MF9WRnhIX1RNX1NISUZUCTcJCS8qIFRhZ2dlZCBNZW1iZXIgKi8KKworLyogLS0tIFBvcnQgcmVnaXN0ZXJzIC0tLSAqLworI2RlZmluZSBQU0I2OTcwX0VDKHApCQkoKHApKjB4MjArMikJLyogRXh0ZW5kZWQgQ29udHJvbCAqLworI2RlZmluZSBQU0I2OTcwX0VDX0lGTlRFCSgxIDw8IDEpCS8qIElucHV0IEZvcmNlIE5vIFRhZyBFbmFibGUgKi8KKworI2RlZmluZSBQU0I2OTcwX1BCVk0ocCkJCSgocCkqMHgyMCszKQkvKiBQb3J0IEJhc2UgVkxBTiBNYXAgKi8KKyNkZWZpbmUgUFNCNjk3MF9QQlZNX1ZNQ0UJKDEgPDwgOCkKKyNkZWZpbmUgUFNCNjk3MF9QQlZNX0FPVlRQCSgxIDw8IDkpCisjZGVmaW5lIFBTQjY5NzBfUEJWTV9WU0QJKDEgPDwgMTApCisjZGVmaW5lIFBTQjY5NzBfUEJWTV9WQwkJKDEgPDwgMTEpCS8qIFZJRCBDaGVjayB3aXRoIFZJRCB0YWJsZSAqLworI2RlZmluZSBQU0I2OTcwX1BCVk1fVEJWRQkoMSA8PCAxMykJLyogVGFnLUJhc2VkIFZMQU4gZW5hYmxlICovCisKKyNkZWZpbmUgUFNCNjk3MF9EVklEKHApCQkoKHApKjB4MjArNCkJLyogRGVmYXVsdCBWTEFOIElEICYgUHJpb3JpdHkgKi8KKworc3RydWN0IHBzYjY5NzBfcHJpdiB7CisJc3RydWN0IHN3aXRjaF9kZXYgZGV2OworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHk7CisJdTE2ICgqcmVhZCkgKHN0cnVjdCBwaHlfZGV2aWNlKiBwaHlkZXYsIGludCByZWcpOworCXZvaWQgKCp3cml0ZSkgKHN0cnVjdCBwaHlfZGV2aWNlKiBwaHlkZXYsIGludCByZWcsIHUxNiB2YWwpOworCXN0cnVjdCBtdXRleCByZWdfbXV0ZXg7CisKKwkvKiBhbGwgZmllbGRzIGJlbG93IGFyZSBjbGVhcmVkIG9uIHJlc2V0ICovCisJYm9vbCB2bGFuOworCXUxNiB2bGFuX2lkW1BTQjY5NzBfTUFYX1ZMQU5TXTsKKwl1OCB2bGFuX3RhYmxlW1BTQjY5NzBfTUFYX1ZMQU5TXTsKKwl1OCB2bGFuX3RhZ2dlZDsKKwl1MTYgcHZpZFtQU0I2OTcwX05VTV9QT1JUU107Cit9OworCisjZGVmaW5lIHRvX3BzYjY5NzAoX2RldikgY29udGFpbmVyX29mKF9kZXYsIHN0cnVjdCBwc2I2OTcwX3ByaXYsIGRldikKKworc3RhdGljIHUxNiBwc2I2OTcwX21paV9yZWFkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCByZWcpCit7CisJc3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi0+bWRpby5idXM7CisKKwlyZXR1cm4gYnVzLT5yZWFkKGJ1cywgUEhZQUREUihyZWcpKTsKK30KKworc3RhdGljIHZvaWQgcHNiNjk3MF9taWlfd3JpdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHJlZywgdTE2IHZhbCkKK3sKKwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcGh5ZGV2LT5tZGlvLmJ1czsKKworCWJ1cy0+d3JpdGUoYnVzLCBQSFlBRERSKHJlZyksIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQKK3BzYjY5NzBfc2V0X3ZsYW4oc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgcHNiNjk3MF9wcml2ICpwcml2ID0gdG9fcHNiNjk3MChkZXYpOworCXByaXYtPnZsYW4gPSAhIXZhbC0+dmFsdWUuaTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcHNiNjk3MF9nZXRfdmxhbihzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCSBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBwc2I2OTcwX3ByaXYgKnByaXYgPSB0b19wc2I2OTcwKGRldik7CisJdmFsLT52YWx1ZS5pID0gcHJpdi0+dmxhbjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwc2I2OTcwX3NldF9wdmlkKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsIGludCBwb3J0LCBpbnQgdmxhbikKK3sKKwlzdHJ1Y3QgcHNiNjk3MF9wcml2ICpwcml2ID0gdG9fcHNiNjk3MChkZXYpOworCisJLyogbWFrZSBzdXJlIG5vIGludmFsaWQgUFZJRHMgZ2V0IHNldCAqLworCWlmICh2bGFuID49IGRldi0+dmxhbnMpCisJCXJldHVybiAtRUlOVkFMOworCisJcHJpdi0+cHZpZFtwb3J0XSA9IHZsYW47CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHNiNjk3MF9nZXRfcHZpZChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBpbnQgcG9ydCwgaW50ICp2bGFuKQoreworCXN0cnVjdCBwc2I2OTcwX3ByaXYgKnByaXYgPSB0b19wc2I2OTcwKGRldik7CisJKnZsYW4gPSBwcml2LT5wdmlkW3BvcnRdOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Citwc2I2OTcwX3NldF92aWQoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQlzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBwc2I2OTcwX3ByaXYgKnByaXYgPSB0b19wc2I2OTcwKGRldik7CisJcHJpdi0+dmxhbl9pZFt2YWwtPnBvcnRfdmxhbl0gPSB2YWwtPnZhbHVlLmk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3BzYjY5NzBfZ2V0X3ZpZChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCXN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IHBzYjY5NzBfcHJpdiAqcHJpdiA9IHRvX3BzYjY5NzAoZGV2KTsKKwl2YWwtPnZhbHVlLmkgPSBwcml2LT52bGFuX2lkW3ZhbC0+cG9ydF92bGFuXTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzd2l0Y2hfYXR0ciBwc2I2OTcwX2dsb2JhbHNbXSA9IHsKKwl7CisJIC50eXBlID0gU1dJVENIX1RZUEVfSU5ULAorCSAubmFtZSA9ICJlbmFibGVfdmxhbiIsCisJIC5kZXNjcmlwdGlvbiA9ICJFbmFibGUgVkxBTiBtb2RlIiwKKwkgLnNldCA9IHBzYjY5NzBfc2V0X3ZsYW4sCisJIC5nZXQgPSBwc2I2OTcwX2dldF92bGFuLAorCSAubWF4ID0gMX0sCit9OworCitzdGF0aWMgc3RydWN0IHN3aXRjaF9hdHRyIHBzYjY5NzBfcG9ydFtdID0geworfTsKKworc3RhdGljIHN0cnVjdCBzd2l0Y2hfYXR0ciBwc2I2OTcwX3ZsYW5bXSA9IHsKKwl7CisJIC50eXBlID0gU1dJVENIX1RZUEVfSU5ULAorCSAubmFtZSA9ICJ2aWQiLAorCSAuZGVzY3JpcHRpb24gPSAiVkxBTiBJRCAoMC00MDk0KSIsCisJIC5zZXQgPSBwc2I2OTcwX3NldF92aWQsCisJIC5nZXQgPSBwc2I2OTcwX2dldF92aWQsCisJIC5tYXggPSA0MDk0LAorCSB9LAorfTsKKworc3RhdGljIGludCBwc2I2OTcwX2dldF9wb3J0cyhzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBwc2I2OTcwX3ByaXYgKnByaXYgPSB0b19wc2I2OTcwKGRldik7CisJdTggcG9ydHMgPSBwcml2LT52bGFuX3RhYmxlW3ZhbC0+cG9ydF92bGFuXTsKKwlpbnQgaTsKKworCXZhbC0+bGVuID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgUFNCNjk3MF9OVU1fUE9SVFM7IGkrKykgeworCQlzdHJ1Y3Qgc3dpdGNoX3BvcnQgKnA7CisKKwkJaWYgKCEocG9ydHMgJiAoMSA8PCBpKSkpCisJCQljb250aW51ZTsKKworCQlwID0gJnZhbC0+dmFsdWUucG9ydHNbdmFsLT5sZW4rK107CisJCXAtPmlkID0gaTsKKwkJaWYgKHByaXYtPnZsYW5fdGFnZ2VkICYgKDEgPDwgaSkpCisJCQlwLT5mbGFncyA9ICgxIDw8IFNXSVRDSF9QT1JUX0ZMQUdfVEFHR0VEKTsKKwkJZWxzZQorCQkJcC0+ZmxhZ3MgPSAwOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwc2I2OTcwX3NldF9wb3J0cyhzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBwc2I2OTcwX3ByaXYgKnByaXYgPSB0b19wc2I2OTcwKGRldik7CisJdTggKnZ0ID0gJnByaXYtPnZsYW5fdGFibGVbdmFsLT5wb3J0X3ZsYW5dOworCWludCBpLCBqOworCisJKnZ0ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgdmFsLT5sZW47IGkrKykgeworCQlzdHJ1Y3Qgc3dpdGNoX3BvcnQgKnAgPSAmdmFsLT52YWx1ZS5wb3J0c1tpXTsKKworCQlpZiAocC0+ZmxhZ3MgJiAoMSA8PCBTV0lUQ0hfUE9SVF9GTEFHX1RBR0dFRCkpCisJCQlwcml2LT52bGFuX3RhZ2dlZCB8PSAoMSA8PCBwLT5pZCk7CisJCWVsc2UgeworCQkJcHJpdi0+dmxhbl90YWdnZWQgJj0gfigxIDw8IHAtPmlkKTsKKwkJCXByaXYtPnB2aWRbcC0+aWRdID0gdmFsLT5wb3J0X3ZsYW47CisKKwkJCS8qIG1ha2Ugc3VyZSB0aGF0IGFuIHVudGFnZ2VkIHBvcnQgZG9lcyBub3QKKwkJCSAqIGFwcGVhciBpbiBvdGhlciB2bGFucyAqLworCQkJZm9yIChqID0gMDsgaiA8IFBTQjY5NzBfTUFYX1ZMQU5TOyBqKyspIHsKKwkJCQlpZiAoaiA9PSB2YWwtPnBvcnRfdmxhbikKKwkJCQkJY29udGludWU7CisJCQkJcHJpdi0+dmxhbl90YWJsZVtqXSAmPSB+KDEgPDwgcC0+aWQpOworCQkJfQorCQl9CisKKwkJKnZ0IHw9IDEgPDwgcC0+aWQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBzYjY5NzBfaHdfYXBwbHkoc3RydWN0IHN3aXRjaF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgcHNiNjk3MF9wcml2ICpwcml2ID0gdG9fcHNiNjk3MChkZXYpOworCWludCBpLCBqOworCisJbXV0ZXhfbG9jaygmcHJpdi0+cmVnX211dGV4KTsKKworCWlmIChwcml2LT52bGFuKSB7CisJCS8qIGludG8gdGhlIHZsYW4gdHJhbnNsYXRpb24gdW5pdCAqLworCQlmb3IgKGogPSAwOyBqIDwgUFNCNjk3MF9NQVhfVkxBTlM7IGorKykgeworCQkJdTggdnAgPSBwcml2LT52bGFuX3RhYmxlW2pdOworCisJCQlpZiAodnApIHsKKwkJCQlwcml2LT53cml0ZShwcml2LT5waHksIFBTQjY5NzBfVkZ4TChqKSwKKwkJCQkJICAgIFBTQjY5NzBfVkZ4TF9WViB8IHByaXYtPnZsYW5faWRbal0pOworCQkJCXByaXYtPndyaXRlKHByaXYtPnBoeSwgUFNCNjk3MF9WRnhIKGopLAorCQkJCQkgICAgKCh2cCAmIHByaXYtPgorCQkJCQkgICAgICB2bGFuX3RhZ2dlZCkgPDwKKwkJCQkJICAgICBQU0I2OTcwX1ZGeEhfVE1fU0hJRlQpIHwgdnApOworCQkJfSBlbHNlCS8qIGNsZWFyIFZMQU4gVmFsaWQgZmxhZyBmb3IgdW51c2VkIHZsYW5zICovCisJCQkJcHJpdi0+d3JpdGUocHJpdi0+cGh5LCBQU0I2OTcwX1ZGeEwoaiksIDApOworCisJCX0KKwl9CisKKwkvKiB1cGRhdGUgdGhlIHBvcnQgZGVzdGluYXRpb24gbWFzayByZWdpc3RlcnMgYW5kIHRhZyBzZXR0aW5ncyAqLworCWZvciAoaSA9IDA7IGkgPCBQU0I2OTcwX05VTV9QT1JUUzsgaSsrKSB7CisJCWludCBkdmlkID0gMSwgcGJ2bSA9IDB4N2YgfCBQU0I2OTcwX1BCVk1fVlNELCBlYyA9IDA7CisKKwkJaWYgKHByaXYtPnZsYW4pIHsKKwkJCWVjID0gUFNCNjk3MF9FQ19JRk5URTsKKwkJCWR2aWQgPSBwcml2LT52bGFuX2lkW3ByaXYtPnB2aWRbaV1dOworCQkJcGJ2bSB8PSBQU0I2OTcwX1BCVk1fVEJWRSB8IFBTQjY5NzBfUEJWTV9WTUNFOworCisJCQlpZiAoKGkgPDwgMSkgJiBwcml2LT52bGFuX3RhZ2dlZCkKKwkJCQlwYnZtIHw9IFBTQjY5NzBfUEJWTV9BT1ZUUCB8IFBTQjY5NzBfUEJWTV9WQzsKKwkJfQorCisJCXByaXYtPndyaXRlKHByaXYtPnBoeSwgUFNCNjk3MF9QQlZNKGkpLCBwYnZtKTsKKworCQlpZiAoIVBTQjY5NzBfSVNfQ1BVX1BPUlQoaSkpIHsKKwkJCXByaXYtPndyaXRlKHByaXYtPnBoeSwgUFNCNjk3MF9FQyhpKSwgZWMpOworCQkJcHJpdi0+d3JpdGUocHJpdi0+cGh5LCBQU0I2OTcwX0RWSUQoaSksIGR2aWQpOworCQl9CisJfQorCisJbXV0ZXhfdW5sb2NrKCZwcml2LT5yZWdfbXV0ZXgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBzYjY5NzBfcmVzZXRfc3dpdGNoKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYpCit7CisJc3RydWN0IHBzYjY5NzBfcHJpdiAqcHJpdiA9IHRvX3BzYjY5NzAoZGV2KTsKKwlpbnQgaTsKKworCW11dGV4X2xvY2soJnByaXYtPnJlZ19tdXRleCk7CisKKwltZW1zZXQoJnByaXYtPnZsYW4sIDAsIHNpemVvZihzdHJ1Y3QgcHNiNjk3MF9wcml2KSAtCisJICAgICAgIG9mZnNldG9mKHN0cnVjdCBwc2I2OTcwX3ByaXYsIHZsYW4pKTsKKworCWZvciAoaSA9IDA7IGkgPCBQU0I2OTcwX01BWF9WTEFOUzsgaSsrKQorCQlwcml2LT52bGFuX2lkW2ldID0gaTsKKworCW11dGV4X3VubG9jaygmcHJpdi0+cmVnX211dGV4KTsKKworCXJldHVybiBwc2I2OTcwX2h3X2FwcGx5KGRldik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2Rldl9vcHMgcHNiNjk3MF9vcHMgPSB7CisJLmF0dHJfZ2xvYmFsID0geworCQkJLmF0dHIgPSBwc2I2OTcwX2dsb2JhbHMsCisJCQkubl9hdHRyID0gQVJSQVlfU0laRShwc2I2OTcwX2dsb2JhbHMpLAorCQkJfSwKKwkuYXR0cl9wb3J0ID0geworCQkgICAgICAuYXR0ciA9IHBzYjY5NzBfcG9ydCwKKwkJICAgICAgLm5fYXR0ciA9IEFSUkFZX1NJWkUocHNiNjk3MF9wb3J0KSwKKwkJICAgICAgfSwKKwkuYXR0cl92bGFuID0geworCQkgICAgICAuYXR0ciA9IHBzYjY5NzBfdmxhbiwKKwkJICAgICAgLm5fYXR0ciA9IEFSUkFZX1NJWkUocHNiNjk3MF92bGFuKSwKKwkJICAgICAgfSwKKwkuZ2V0X3BvcnRfcHZpZCA9IHBzYjY5NzBfZ2V0X3B2aWQsCisJLnNldF9wb3J0X3B2aWQgPSBwc2I2OTcwX3NldF9wdmlkLAorCS5nZXRfdmxhbl9wb3J0cyA9IHBzYjY5NzBfZ2V0X3BvcnRzLAorCS5zZXRfdmxhbl9wb3J0cyA9IHBzYjY5NzBfc2V0X3BvcnRzLAorCS5hcHBseV9jb25maWcgPSBwc2I2OTcwX2h3X2FwcGx5LAorCS5yZXNldF9zd2l0Y2ggPSBwc2I2OTcwX3Jlc2V0X3N3aXRjaCwKK307CisKK3N0YXRpYyBpbnQgcHNiNjk3MF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcHNiNjk3MF9wcml2ICpwcml2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwZGV2LT5hdHRhY2hlZF9kZXY7CisJc3RydWN0IHN3aXRjaF9kZXYgKnN3ZGV2OworCWludCByZXQ7CisKKwlwcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBzYjY5NzBfcHJpdiksIEdGUF9LRVJORUwpOworCWlmIChwcml2ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJcHJpdi0+cGh5ID0gcGRldjsKKworCWlmIChwZGV2LT5tZGlvLmFkZHIgPT0gMCkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBzYjY5NzAgc3dpdGNoIGRyaXZlciBhdHRhY2hlZC5cbiIsCisJCSAgICAgICBwZGV2LT5hdHRhY2hlZF9kZXYtPm5hbWUpOworCisJaWYgKHBkZXYtPm1kaW8uYWRkciAhPSAwKSB7CisJCWtmcmVlKHByaXYpOworCQlyZXR1cm4gMDsKKwl9CisKKwlsaW5rbW9kZV96ZXJvKHBkZXYtPnN1cHBvcnRlZCk7CisJbGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV8xMDBiYXNlVF9GdWxsX0JJVCwgcGRldi0+c3VwcG9ydGVkKTsKKwlsaW5rbW9kZV9jb3B5KHBkZXYtPmFkdmVydGlzaW5nLCBwZGV2LT5zdXBwb3J0ZWQpOworCisJbXV0ZXhfaW5pdCgmcHJpdi0+cmVnX211dGV4KTsKKwlwcml2LT5yZWFkID0gcHNiNjk3MF9taWlfcmVhZDsKKwlwcml2LT53cml0ZSA9IHBzYjY5NzBfbWlpX3dyaXRlOworCisJcGRldi0+cHJpdiA9IHByaXY7CisKKwlzd2RldiA9ICZwcml2LT5kZXY7CisJc3dkZXYtPmNwdV9wb3J0ID0gUFNCNjk3MF9ERUZBVUxUX1BPUlRfQ1BVOworCXN3ZGV2LT5vcHMgPSAmcHNiNjk3MF9vcHM7CisKKwlzd2Rldi0+bmFtZSA9ICJMYW50aXEgUFNCNjk3MCI7CisJc3dkZXYtPnZsYW5zID0gUFNCNjk3MF9NQVhfVkxBTlM7CisJc3dkZXYtPnBvcnRzID0gUFNCNjk3MF9OVU1fUE9SVFM7CisKKwlpZiAoKHJldCA9IHJlZ2lzdGVyX3N3aXRjaCgmcHJpdi0+ZGV2LCBwZGV2LT5hdHRhY2hlZF9kZXYpKSA8IDApIHsKKwkJa2ZyZWUocHJpdik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlyZXQgPSBwc2I2OTcwX3Jlc2V0X3N3aXRjaCgmcHJpdi0+ZGV2KTsKKwlpZiAocmV0KSB7CisJCWtmcmVlKHByaXYpOworCQlnb3RvIGRvbmU7CisJfQorCisJZGV2LT5waHlfcHRyID0gcHJpdjsKKworZG9uZToKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBzYjY5NzBfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKK3sKKwlwaHlkZXYtPnNwZWVkID0gU1BFRURfMTAwOworCXBoeWRldi0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJcGh5ZGV2LT5saW5rID0gMTsKKworCXBoeWRldi0+c3RhdGUgPSBQSFlfUlVOTklORzsKKwluZXRpZl9jYXJyaWVyX29uKHBoeWRldi0+YXR0YWNoZWRfZGV2KTsKKwlwaHlkZXYtPmFkanVzdF9saW5rKHBoeWRldi0+YXR0YWNoZWRfZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBzYjY5NzBfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwc2I2OTcwX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwc2I2OTcwX3JlbW92ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcHNiNjk3MF9wcml2ICpwcml2ID0gcGRldi0+cHJpdjsKKworCWlmICghcHJpdikKKwkJcmV0dXJuOworCisJaWYgKHBkZXYtPm1kaW8uYWRkciA9PSAwKQorCQl1bnJlZ2lzdGVyX3N3aXRjaCgmcHJpdi0+ZGV2KTsKKwlrZnJlZShwcml2KTsKK30KKworc3RhdGljIGludCBwc2I2OTcwX2ZpeHVwKHN0cnVjdCBwaHlfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1paV9idXMgKmJ1cyA9IGRldi0+bWRpby5idXM7CisJdTE2IHJlZzsKKworCS8qIGxvb2sgZm9yIHRoZSBzd2l0Y2ggb24gdGhlIGJ1cyAqLworCXJlZyA9IGJ1cy0+cmVhZChidXMsIFBIWUFERFIoUFNCNjk3MF9DSTEpKSAmIFBTQjY5NzBfQ0kxX01BU0s7CisJaWYgKHJlZyAhPSBQU0I2OTcwX0NJMV9WQUwpCisJCXJldHVybiAwOworCisJZGV2LT5waHlfaWQgPSAocmVnIDw8IDE2KTsKKwlkZXYtPnBoeV9pZCB8PSBidXMtPnJlYWQoYnVzLCBQSFlBRERSKFBTQjY5NzBfQ0kwKSkgJiBQU0I2OTcwX0NJMF9NQVNLOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBwc2I2OTcwX2RyaXZlciA9IHsKKwkubmFtZSA9ICJMYW50aXEgUFNCNjk3MCIsCisJLnBoeV9pZCA9IFBTQjY5NzBfQ0kxX1ZBTCA8PCAxNiwKKwkucGh5X2lkX21hc2sgPSAweGZmZmYwMDAwLAorCS5mZWF0dXJlcyA9IFBIWV9CQVNJQ19GRUFUVVJFUywKKwkucHJvYmUgPSBwc2I2OTcwX3Byb2JlLAorCS5yZW1vdmUgPSBwc2I2OTcwX3JlbW92ZSwKKwkuY29uZmlnX2luaXQgPSAmcHNiNjk3MF9jb25maWdfaW5pdCwKKwkuY29uZmlnX2FuZWcgPSAmcHNiNjk3MF9jb25maWdfYW5lZywKKwkucmVhZF9zdGF0dXMgPSAmcHNiNjk3MF9yZWFkX3N0YXR1cywKK307CisKK2ludCBfX2luaXQgcHNiNjk3MF9pbml0KHZvaWQpCit7CisJcGh5X3JlZ2lzdGVyX2ZpeHVwX2Zvcl9pZChQSFlfQU5ZX0lELCBwc2I2OTcwX2ZpeHVwKTsKKwlyZXR1cm4gcGh5X2RyaXZlcl9yZWdpc3RlcigmcHNiNjk3MF9kcml2ZXIsIFRISVNfTU9EVUxFKTsKK30KKworbW9kdWxlX2luaXQocHNiNjk3MF9pbml0KTsKKwordm9pZCBfX2V4aXQgcHNiNjk3MF9leGl0KHZvaWQpCit7CisJcGh5X2RyaXZlcl91bnJlZ2lzdGVyKCZwc2I2OTcwX2RyaXZlcik7Cit9CisKK21vZHVsZV9leGl0KHBzYjY5NzBfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiTGFudGlxIFBTQjY5NzAgU3dpdGNoIik7CitNT0RVTEVfQVVUSE9SKCJJdGhhbWFyIFIuIEFkZW1hIDxpdGhhbWFyLmFkZW1hQHRlYW0tZW1iZWRkZWQubmw+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL25ldC9waHkvcnRsODMwNi5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9uZXQvcGh5L3J0bDgzMDYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWJjNzU4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9uZXQvcGh5L3J0bDgzMDYuYwpAQCAtMCwwICsxLDEwNjMgQEAKKy8qCisgKiBydGw4MzA2LmM6IFJUTDgzMDZTIHN3aXRjaCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaWYuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgorI2luY2x1ZGUgPG5ldC9nZW5ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9zd2l0Y2guaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKworLy8jZGVmaW5lIERFQlVHIDEKKworLyogR2xvYmFsIChQSFkwKSAqLworI2RlZmluZSBSVEw4MzA2X1JFR19QQUdFCQkxNgorI2RlZmluZSBSVEw4MzA2X1JFR19QQUdFX0xPCQkoMSA8PCAxNSkKKyNkZWZpbmUgUlRMODMwNl9SRUdfUEFHRV9ISQkJKDEgPDwgMSkgLyogaW52ZXJ0ZWQgKi8KKworI2RlZmluZSBSVEw4MzA2X05VTV9WTEFOUwkJMTYKKyNkZWZpbmUgUlRMODMwNl9OVU1fUE9SVFMJCTYKKyNkZWZpbmUgUlRMODMwNl9QT1JUX0NQVQkJNQorI2RlZmluZSBSVEw4MzA2X05VTV9QQUdFUwkJNAorI2RlZmluZSBSVEw4MzA2X05VTV9SRUdTCQkzMgorCisjZGVmaW5lIFJUTF9OQU1FX1MgICAgICAgICAgIlJUTDgzMDZTIgorI2RlZmluZSBSVExfTkFNRV9TRCAgICAgICAgICJSVEw4MzA2U0QiCisjZGVmaW5lIFJUTF9OQU1FX1NETSAgICAgICAgIlJUTDgzMDZTRE0iCisjZGVmaW5lIFJUTF9OQU1FX1VOS05PV04gICAgIlJUTDgzMDYodW5rbm93bikiCisKKyNkZWZpbmUgUlRMODMwNl9NQUdJQwkweDgzMDYKKworc3RhdGljIExJU1RfSEVBRChwaHlkZXZzKTsKKworc3RydWN0IHJ0bF9wcml2IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHN3aXRjaF9kZXYgZGV2OworCWludCBwYWdlOworCWludCB0eXBlOworCWludCBkb19jcHU7CisJc3RydWN0IG1paV9idXMgKmJ1czsKKwljaGFyIGh3bmFtZVtzaXplb2YoUlRMX05BTUVfVU5LTk9XTildOworCWJvb2wgZml4dXA7Cit9OworCitzdHJ1Y3QgcnRsX3BoeXJlZ3MgeworCWludCBud2F5OworCWludCBzcGVlZDsKKwlpbnQgZHVwbGV4OworfTsKKworI2RlZmluZSB0b19ydGwoX2RldikgY29udGFpbmVyX29mKF9kZXYsIHN0cnVjdCBydGxfcHJpdiwgZGV2KQorCitlbnVtIHsKKwlSVExfVFlQRV9TLAorCVJUTF9UWVBFX1NELAorCVJUTF9UWVBFX1NETSwKK307CisKK3N0cnVjdCBydGxfcmVnIHsKKwlpbnQgcGFnZTsKKwlpbnQgcGh5OworCWludCByZWc7CisJaW50IGJpdHM7CisJaW50IHNoaWZ0OworCWludCBpbnZlcnRlZDsKK307CisKKyNkZWZpbmUgUlRMX1ZMQU5fUkVHT0ZTKG5hbWUpIFwKKwkoUlRMX1JFR19WTEFOMV8jI25hbWUgLSBSVExfUkVHX1ZMQU4wXyMjbmFtZSkKKworI2RlZmluZSBSVExfUE9SVF9SRUdPRlMobmFtZSkgXAorCShSVExfUkVHX1BPUlQxXyMjbmFtZSAtIFJUTF9SRUdfUE9SVDBfIyNuYW1lKQorCisjZGVmaW5lIFJUTF9QT1JUX1JFRyhpZCwgcmVnKSBcCisJKFJUTF9SRUdfUE9SVDBfIyNyZWcgKyAoaWQgKiBSVExfUE9SVF9SRUdPRlMocmVnKSkpCisKKyNkZWZpbmUgUlRMX1ZMQU5fUkVHKGlkLCByZWcpIFwKKwkoUlRMX1JFR19WTEFOMF8jI3JlZyArIChpZCAqIFJUTF9WTEFOX1JFR09GUyhyZWcpKSkKKworI2RlZmluZSBSVExfR0xPQkFMX1JFR0FUVFIocmVnKSBcCisJLmlkID0gUlRMX1JFR18jI3JlZywgXAorCS50eXBlID0gU1dJVENIX1RZUEVfSU5ULCBcCisJLm9mcyA9IDAsIFwKKwkuc2V0ID0gcnRsX2F0dHJfc2V0X2ludCwgXAorCS5nZXQgPSBydGxfYXR0cl9nZXRfaW50CisKKyNkZWZpbmUgUlRMX1BPUlRfUkVHQVRUUihyZWcpIFwKKwkuaWQgPSBSVExfUkVHX1BPUlQwXyMjcmVnLCBcCisJLnR5cGUgPSBTV0lUQ0hfVFlQRV9JTlQsIFwKKwkub2ZzID0gUlRMX1BPUlRfUkVHT0ZTKHJlZyksIFwKKwkuc2V0ID0gcnRsX2F0dHJfc2V0X3BvcnRfaW50LCBcCisJLmdldCA9IHJ0bF9hdHRyX2dldF9wb3J0X2ludAorCisjZGVmaW5lIFJUTF9WTEFOX1JFR0FUVFIocmVnKSBcCisJLmlkID0gUlRMX1JFR19WTEFOMF8jI3JlZywgXAorCS50eXBlID0gU1dJVENIX1RZUEVfSU5ULCBcCisJLm9mcyA9IFJUTF9WTEFOX1JFR09GUyhyZWcpLCBcCisJLnNldCA9IHJ0bF9hdHRyX3NldF92bGFuX2ludCwgXAorCS5nZXQgPSBydGxfYXR0cl9nZXRfdmxhbl9pbnQKKworZW51bSBydGxfcmVnaWR4IHsKKwlSVExfUkVHX0NISVBJRCwKKwlSVExfUkVHX0NISVBWRVIsCisJUlRMX1JFR19DSElQVFlQRSwKKwlSVExfUkVHX0NQVVBPUlQsCisKKwlSVExfUkVHX0VOX0NQVVBPUlQsCisJUlRMX1JFR19FTl9UQUdfT1VULAorCVJUTF9SRUdfRU5fVEFHX0NMUiwKKwlSVExfUkVHX0VOX1RBR19JTiwKKwlSVExfUkVHX1RSQVBfQ1BVLAorCVJUTF9SRUdfQ1BVX0xJTktVUCwKKwlSVExfUkVHX1RSVU5LX1BPUlRTRUwsCisJUlRMX1JFR19FTl9UUlVOSywKKwlSVExfUkVHX1JFU0VULAorCisJUlRMX1JFR19WTEFOX0VOQUJMRSwKKwlSVExfUkVHX1ZMQU5fRklMVEVSLAorCVJUTF9SRUdfVkxBTl9UQUdfT05MWSwKKwlSVExfUkVHX1ZMQU5fVEFHX0FXQVJFLAorI2RlZmluZSBSVExfVkxBTl9FTlVNKGlkKSBcCisJUlRMX1JFR19WTEFOIyNpZCMjX1ZJRCwgXAorCVJUTF9SRUdfVkxBTiMjaWQjI19QT1JUTUFTSworCVJUTF9WTEFOX0VOVU0oMCksCisJUlRMX1ZMQU5fRU5VTSgxKSwKKwlSVExfVkxBTl9FTlVNKDIpLAorCVJUTF9WTEFOX0VOVU0oMyksCisJUlRMX1ZMQU5fRU5VTSg0KSwKKwlSVExfVkxBTl9FTlVNKDUpLAorCVJUTF9WTEFOX0VOVU0oNiksCisJUlRMX1ZMQU5fRU5VTSg3KSwKKwlSVExfVkxBTl9FTlVNKDgpLAorCVJUTF9WTEFOX0VOVU0oOSksCisJUlRMX1ZMQU5fRU5VTSgxMCksCisJUlRMX1ZMQU5fRU5VTSgxMSksCisJUlRMX1ZMQU5fRU5VTSgxMiksCisJUlRMX1ZMQU5fRU5VTSgxMyksCisJUlRMX1ZMQU5fRU5VTSgxNCksCisJUlRMX1ZMQU5fRU5VTSgxNSksCisjZGVmaW5lIFJUTF9QT1JUX0VOVU0oaWQpIFwKKwlSVExfUkVHX1BPUlQjI2lkIyNfUFZJRCwgXAorCVJUTF9SRUdfUE9SVCMjaWQjI19OVUxMX1ZJRF9SRVBMQUNFLCBcCisJUlRMX1JFR19QT1JUIyNpZCMjX05PTl9QVklEX0RJU0NBUkQsIFwKKwlSVExfUkVHX1BPUlQjI2lkIyNfVklEX0lOU0VSVCwgXAorCVJUTF9SRUdfUE9SVCMjaWQjI19UQUdfSU5TRVJULCBcCisJUlRMX1JFR19QT1JUIyNpZCMjX0xJTkssIFwKKwlSVExfUkVHX1BPUlQjI2lkIyNfU1BFRUQsIFwKKwlSVExfUkVHX1BPUlQjI2lkIyNfTldBWSwgXAorCVJUTF9SRUdfUE9SVCMjaWQjI19OUkVTVEFSVCwgXAorCVJUTF9SRUdfUE9SVCMjaWQjI19EVVBMRVgsIFwKKwlSVExfUkVHX1BPUlQjI2lkIyNfUlhFTiwgXAorCVJUTF9SRUdfUE9SVCMjaWQjI19UWEVOCisJUlRMX1BPUlRfRU5VTSgwKSwKKwlSVExfUE9SVF9FTlVNKDEpLAorCVJUTF9QT1JUX0VOVU0oMiksCisJUlRMX1BPUlRfRU5VTSgzKSwKKwlSVExfUE9SVF9FTlVNKDQpLAorCVJUTF9QT1JUX0VOVU0oNSksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bF9yZWcgcnRsX3JlZ3NbXSA9IHsKKwlbUlRMX1JFR19DSElQSURdICAgICAgICAgPSB7IDAsIDQsIDMwLCAxNiwgIDAsIDAgfSwKKwlbUlRMX1JFR19DSElQVkVSXSAgICAgICAgPSB7IDAsIDQsIDMxLCAgOCwgIDAsIDAgfSwKKwlbUlRMX1JFR19DSElQVFlQRV0gICAgICAgPSB7IDAsIDQsIDMxLCAgMiwgIDgsIDAgfSwKKworCS8qIENQVSBwb3J0IG51bWJlciAqLworCVtSVExfUkVHX0NQVVBPUlRdICAgICAgICA9IHsgMiwgNCwgMjEsICAzLCAgMCwgMCB9LAorCS8qIEVuYWJsZSBDUFUgcG9ydCBmdW5jdGlvbiAqLworCVtSVExfUkVHX0VOX0NQVVBPUlRdICAgICA9IHsgMywgMiwgMjEsICAxLCAxNSwgMSB9LAorCS8qIEVuYWJsZSBDUFUgcG9ydCB0YWcgaW5zZXJ0aW9uICovCisJW1JUTF9SRUdfRU5fVEFHX09VVF0gICAgID0geyAzLCAyLCAyMSwgIDEsIDEyLCAwIH0sCisJLyogRW5hYmxlIENQVSBwb3J0IHRhZyByZW1vdmFsICovCisJW1JUTF9SRUdfRU5fVEFHX0NMUl0gICAgID0geyAzLCAyLCAyMSwgIDEsIDExLCAwIH0sCisJLyogRW5hYmxlIENQVSBwb3J0IHRhZyBjaGVja2luZyAqLworCVtSVExfUkVHX0VOX1RBR19JTl0gICAgICA9IHsgMCwgNCwgMjEsICAxLCAgNywgMCB9LAorCVtSVExfUkVHX0VOX1RSVU5LXSAgICAgICA9IHsgMCwgMCwgMTksICAxLCAxMSwgMSB9LAorCVtSVExfUkVHX1RSVU5LX1BPUlRTRUxdICA9IHsgMCwgMCwgMTYsICAxLCAgNiwgMSB9LAorCVtSVExfUkVHX1JFU0VUXSAgICAgICAgICA9IHsgMCwgMCwgMTYsICAxLCAxMiwgMCB9LAorCisJW1JUTF9SRUdfVFJBUF9DUFVdICAgICAgID0geyAzLCAyLCAyMiwgIDEsICA2LCAwIH0sCisJW1JUTF9SRUdfQ1BVX0xJTktVUF0gICAgID0geyAwLCA2LCAyMiwgIDEsIDE1LCAwIH0sCisKKwlbUlRMX1JFR19WTEFOX1RBR19PTkxZXSAgPSB7IDAsIDAsIDE2LCAgMSwgIDgsIDEgfSwKKwlbUlRMX1JFR19WTEFOX0ZJTFRFUl0gICAgPSB7IDAsIDAsIDE2LCAgMSwgIDksIDEgfSwKKwlbUlRMX1JFR19WTEFOX1RBR19BV0FSRV0gPSB7IDAsIDAsIDE2LCAgMSwgMTAsIDEgfSwKKwlbUlRMX1JFR19WTEFOX0VOQUJMRV0gICAgPSB7IDAsIDAsIDE4LCAgMSwgIDgsIDEgfSwKKworI2RlZmluZSBSVExfVkxBTl9SRUdTKGlkLCBwaHksIHBhZ2UsIHJlZ29mcykgXAorCVtSVExfUkVHX1ZMQU4jI2lkIyNfVklEXSA9IHsgcGFnZSwgcGh5LCAyNSArIHJlZ29mcywgMTIsIDAsIDAgfSwgXAorCVtSVExfUkVHX1ZMQU4jI2lkIyNfUE9SVE1BU0tdID0geyBwYWdlLCBwaHksIDI0ICsgcmVnb2ZzLCA2LCAwLCAwIH0KKwlSVExfVkxBTl9SRUdTKCAwLCAwLCAwLCAwKSwKKwlSVExfVkxBTl9SRUdTKCAxLCAxLCAwLCAwKSwKKwlSVExfVkxBTl9SRUdTKCAyLCAyLCAwLCAwKSwKKwlSVExfVkxBTl9SRUdTKCAzLCAzLCAwLCAwKSwKKwlSVExfVkxBTl9SRUdTKCA0LCA0LCAwLCAwKSwKKwlSVExfVkxBTl9SRUdTKCA1LCAwLCAxLCAyKSwKKwlSVExfVkxBTl9SRUdTKCA2LCAxLCAxLCAyKSwKKwlSVExfVkxBTl9SRUdTKCA3LCAyLCAxLCAyKSwKKwlSVExfVkxBTl9SRUdTKCA4LCAzLCAxLCAyKSwKKwlSVExfVkxBTl9SRUdTKCA5LCA0LCAxLCAyKSwKKwlSVExfVkxBTl9SRUdTKDEwLCAwLCAxLCA0KSwKKwlSVExfVkxBTl9SRUdTKDExLCAxLCAxLCA0KSwKKwlSVExfVkxBTl9SRUdTKDEyLCAyLCAxLCA0KSwKKwlSVExfVkxBTl9SRUdTKDEzLCAzLCAxLCA0KSwKKwlSVExfVkxBTl9SRUdTKDE0LCA0LCAxLCA0KSwKKwlSVExfVkxBTl9SRUdTKDE1LCAwLCAxLCA2KSwKKworI2RlZmluZSBSRUdfUE9SVF9TRVRUSU5HKHBvcnQsIHBoeSkgXAorCVtSVExfUkVHX1BPUlQjI3BvcnQjI19TUEVFRF0gPSB7IDAsIHBoeSwgMCwgMSwgMTMsIDAgfSwgXAorCVtSVExfUkVHX1BPUlQjI3BvcnQjI19OV0FZXSA9IHsgMCwgcGh5LCAwLCAxLCAxMiwgMCB9LCBcCisJW1JUTF9SRUdfUE9SVCMjcG9ydCMjX05SRVNUQVJUXSA9IHsgMCwgcGh5LCAwLCAxLCA5LCAwIH0sIFwKKwlbUlRMX1JFR19QT1JUIyNwb3J0IyNfRFVQTEVYXSA9IHsgMCwgcGh5LCAwLCAxLCA4LCAwIH0sIFwKKwlbUlRMX1JFR19QT1JUIyNwb3J0IyNfVFhFTl0gPSB7IDAsIHBoeSwgMjQsIDEsIDExLCAwIH0sIFwKKwlbUlRMX1JFR19QT1JUIyNwb3J0IyNfUlhFTl0gPSB7IDAsIHBoeSwgMjQsIDEsIDEwLCAwIH0sIFwKKwlbUlRMX1JFR19QT1JUIyNwb3J0IyNfTElOS10gPSB7IDAsIHBoeSwgMSwgMSwgMiwgMCB9LCBcCisJW1JUTF9SRUdfUE9SVCMjcG9ydCMjX05VTExfVklEX1JFUExBQ0VdID0geyAwLCBwaHksIDIyLCAxLCAxMiwgMCB9LCBcCisJW1JUTF9SRUdfUE9SVCMjcG9ydCMjX05PTl9QVklEX0RJU0NBUkRdID0geyAwLCBwaHksIDIyLCAxLCAxMSwgMCB9LCBcCisJW1JUTF9SRUdfUE9SVCMjcG9ydCMjX1ZJRF9JTlNFUlRdID0geyAwLCBwaHksIDIyLCAyLCA5LCAwIH0sIFwKKwlbUlRMX1JFR19QT1JUIyNwb3J0IyNfVEFHX0lOU0VSVF0gPSB7IDAsIHBoeSwgMjIsIDIsIDAsIDAgfQorCisJUkVHX1BPUlRfU0VUVElORygwLCAwKSwKKwlSRUdfUE9SVF9TRVRUSU5HKDEsIDEpLAorCVJFR19QT1JUX1NFVFRJTkcoMiwgMiksCisJUkVHX1BPUlRfU0VUVElORygzLCAzKSwKKwlSRUdfUE9SVF9TRVRUSU5HKDQsIDQpLAorCVJFR19QT1JUX1NFVFRJTkcoNSwgNiksCisKKyNkZWZpbmUgUkVHX1BPUlRfUFZJRChwaHksIHBhZ2UsIHJlZ29mcykgXAorCXsgcGFnZSwgcGh5LCAyNCArIHJlZ29mcywgNCwgMTIsIDAgfQorCVtSVExfUkVHX1BPUlQwX1BWSURdID0gUkVHX1BPUlRfUFZJRCgwLCAwLCAwKSwKKwlbUlRMX1JFR19QT1JUMV9QVklEXSA9IFJFR19QT1JUX1BWSUQoMSwgMCwgMCksCisJW1JUTF9SRUdfUE9SVDJfUFZJRF0gPSBSRUdfUE9SVF9QVklEKDIsIDAsIDApLAorCVtSVExfUkVHX1BPUlQzX1BWSURdID0gUkVHX1BPUlRfUFZJRCgzLCAwLCAwKSwKKwlbUlRMX1JFR19QT1JUNF9QVklEXSA9IFJFR19QT1JUX1BWSUQoNCwgMCwgMCksCisJW1JUTF9SRUdfUE9SVDVfUFZJRF0gPSBSRUdfUE9SVF9QVklEKDAsIDEsIDIpLAorfTsKKworCitzdGF0aWMgaW5saW5lIHZvaWQKK3J0bF9zZXRfcGFnZShzdHJ1Y3QgcnRsX3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBwYWdlKQoreworCXN0cnVjdCBtaWlfYnVzICpidXMgPSBwcml2LT5idXM7CisJdTE2IHBnc2VsOworCisJaWYgKHByaXYtPmZpeHVwKQorCQlyZXR1cm47CisKKwlpZiAocHJpdi0+cGFnZSA9PSBwYWdlKQorCQlyZXR1cm47CisKKwlCVUdfT04ocGFnZSA+IFJUTDgzMDZfTlVNX1BBR0VTKTsKKwlwZ3NlbCA9IGJ1cy0+cmVhZChidXMsIDAsIFJUTDgzMDZfUkVHX1BBR0UpOworCXBnc2VsICY9IH4oUlRMODMwNl9SRUdfUEFHRV9MTyB8IFJUTDgzMDZfUkVHX1BBR0VfSEkpOworCWlmIChwYWdlICYgKDEgPDwgMCkpCisJCXBnc2VsIHw9IFJUTDgzMDZfUkVHX1BBR0VfTE87CisJaWYgKCEocGFnZSAmICgxIDw8IDEpKSkgLyogYml0IGlzIGludmVydGVkICovCisJCXBnc2VsIHw9IFJUTDgzMDZfUkVHX1BBR0VfSEk7CisJYnVzLT53cml0ZShidXMsIDAsIFJUTDgzMDZfUkVHX1BBR0UsIHBnc2VsKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3J0bF93MTYoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgdW5zaWduZWQgaW50IHBhZ2UsIHVuc2lnbmVkIGludCBwaHksIHVuc2lnbmVkIGludCByZWcsIHUxNiB2YWwpCit7CisJc3RydWN0IHJ0bF9wcml2ICpwcml2ID0gdG9fcnRsKGRldik7CisJc3RydWN0IG1paV9idXMgKmJ1cyA9IHByaXYtPmJ1czsKKworCXJ0bF9zZXRfcGFnZShwcml2LCBwYWdlKTsKKwlidXMtPndyaXRlKGJ1cywgcGh5LCByZWcsIHZhbCk7CisJYnVzLT5yZWFkKGJ1cywgcGh5LCByZWcpOyAvKiBmbHVzaCAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludAorcnRsX3IxNihzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgcGFnZSwgdW5zaWduZWQgaW50IHBoeSwgdW5zaWduZWQgaW50IHJlZykKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnByaXYgPSB0b19ydGwoZGV2KTsKKwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi0+YnVzOworCisJcnRsX3NldF9wYWdlKHByaXYsIHBhZ2UpOworCXJldHVybiBidXMtPnJlYWQoYnVzLCBwaHksIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2CitydGxfcm13KHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsIHVuc2lnbmVkIGludCBwYWdlLCB1bnNpZ25lZCBpbnQgcGh5LCB1bnNpZ25lZCBpbnQgcmVnLCB1MTYgbWFzaywgdTE2IHZhbCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnByaXYgPSB0b19ydGwoZGV2KTsKKwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi0+YnVzOworCXUxNiByOworCisJcnRsX3NldF9wYWdlKHByaXYsIHBhZ2UpOworCXIgPSBidXMtPnJlYWQoYnVzLCBwaHksIHJlZyk7CisJciAmPSB+bWFzazsKKwlyIHw9IHZhbDsKKwlidXMtPndyaXRlKGJ1cywgcGh5LCByZWcsIHIpOworCXJldHVybiBidXMtPnJlYWQoYnVzLCBwaHksIHJlZyk7IC8qIGZsdXNoICovCit9CisKKworc3RhdGljIGlubGluZSBpbnQKK3J0bF9nZXQoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgZW51bSBydGxfcmVnaWR4IHMpCit7CisJY29uc3Qgc3RydWN0IHJ0bF9yZWcgKnIgPSAmcnRsX3JlZ3Nbc107CisJdTE2IHZhbDsKKworCUJVR19PTihzID49IEFSUkFZX1NJWkUocnRsX3JlZ3MpKTsKKwlpZiAoci0+Yml0cyA9PSAwKSAvKiB1bmltcGxlbWVudGVkICovCisJCXJldHVybiAwOworCisJdmFsID0gcnRsX3IxNihkZXYsIHItPnBhZ2UsIHItPnBoeSwgci0+cmVnKTsKKworCWlmIChyLT5zaGlmdCA+IDApCisJCXZhbCA+Pj0gci0+c2hpZnQ7CisKKwlpZiAoci0+aW52ZXJ0ZWQpCisJCXZhbCA9IH52YWw7CisKKwl2YWwgJj0gKDEgPDwgci0+Yml0cykgLSAxOworCisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGludAorcnRsX3NldChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBlbnVtIHJ0bF9yZWdpZHggcywgdW5zaWduZWQgaW50IHZhbCkKK3sKKwljb25zdCBzdHJ1Y3QgcnRsX3JlZyAqciA9ICZydGxfcmVnc1tzXTsKKwl1MTYgbWFzayA9IDB4ZmZmZjsKKworCUJVR19PTihzID49IEFSUkFZX1NJWkUocnRsX3JlZ3MpKTsKKworCWlmIChyLT5iaXRzID09IDApIC8qIHVuaW1wbGVtZW50ZWQgKi8KKwkJcmV0dXJuIDA7CisKKwlpZiAoci0+c2hpZnQgPiAwKQorCQl2YWwgPDw9IHItPnNoaWZ0OworCisJaWYgKHItPmludmVydGVkKQorCQl2YWwgPSB+dmFsOworCisJaWYgKHItPmJpdHMgIT0gMTYpIHsKKwkJbWFzayA9ICgxIDw8IHItPmJpdHMpIC0gMTsKKwkJbWFzayA8PD0gci0+c2hpZnQ7CisJfQorCXZhbCAmPSBtYXNrOworCXJldHVybiBydGxfcm13KGRldiwgci0+cGFnZSwgci0+cGh5LCByLT5yZWcsIG1hc2ssIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkCitydGxfcGh5X3NhdmUoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgaW50IHBvcnQsIHN0cnVjdCBydGxfcGh5cmVncyAqcmVncykKK3sKKwlyZWdzLT5ud2F5ID0gcnRsX2dldChkZXYsIFJUTF9QT1JUX1JFRyhwb3J0LCBOV0FZKSk7CisJcmVncy0+c3BlZWQgPSBydGxfZ2V0KGRldiwgUlRMX1BPUlRfUkVHKHBvcnQsIFNQRUVEKSk7CisJcmVncy0+ZHVwbGV4ID0gcnRsX2dldChkZXYsIFJUTF9QT1JUX1JFRyhwb3J0LCBEVVBMRVgpKTsKK30KKworc3RhdGljIHZvaWQKK3J0bF9waHlfcmVzdG9yZShzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBpbnQgcG9ydCwgc3RydWN0IHJ0bF9waHlyZWdzICpyZWdzKQoreworCXJ0bF9zZXQoZGV2LCBSVExfUE9SVF9SRUcocG9ydCwgTldBWSksIHJlZ3MtPm53YXkpOworCXJ0bF9zZXQoZGV2LCBSVExfUE9SVF9SRUcocG9ydCwgU1BFRUQpLCByZWdzLT5zcGVlZCk7CisJcnRsX3NldChkZXYsIFJUTF9QT1JUX1JFRyhwb3J0LCBEVVBMRVgpLCByZWdzLT5kdXBsZXgpOworfQorCitzdGF0aWMgdm9pZAorcnRsX3BvcnRfc2V0X2VuYWJsZShzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBpbnQgcG9ydCwgaW50IGVuYWJsZWQpCit7CisJcnRsX3NldChkZXYsIFJUTF9QT1JUX1JFRyhwb3J0LCBSWEVOKSwgZW5hYmxlZCk7CisJcnRsX3NldChkZXYsIFJUTF9QT1JUX1JFRyhwb3J0LCBUWEVOKSwgZW5hYmxlZCk7CisKKwlpZiAoKHBvcnQgPj0gNSkgfHwgIWVuYWJsZWQpCisJCXJldHVybjsKKworCS8qIHJlc3RhcnQgYXV0b25lZ290aWF0aW9uIGlmIGVuYWJsZWQgKi8KKwlydGxfc2V0KGRldiwgUlRMX1BPUlRfUkVHKHBvcnQsIE5SRVNUQVJUKSwgMSk7Cit9CisKK3N0YXRpYyBpbnQKK3J0bF9od19hcHBseShzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2KQoreworCWludCBpOworCWludCB0cnVua19lbiwgdHJ1bmtfcHNlbDsKKwlzdHJ1Y3QgcnRsX3BoeXJlZ3MgcG9ydDU7CisKKwlydGxfcGh5X3NhdmUoZGV2LCA1LCAmcG9ydDUpOworCisJLyogZGlzYWJsZSByeC90eCBmcm9tIFBIWXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgUlRMODMwNl9OVU1fUE9SVFMgLSAxOyBpKyspIHsKKwkJcnRsX3BvcnRfc2V0X2VuYWJsZShkZXYsIGksIDApOworCX0KKworCS8qIHNhdmUgdHJ1bmtpbmcgc3RhdHVzICovCisJdHJ1bmtfZW4gPSBydGxfZ2V0KGRldiwgUlRMX1JFR19FTl9UUlVOSyk7CisJdHJ1bmtfcHNlbCA9IHJ0bF9nZXQoZGV2LCBSVExfUkVHX1RSVU5LX1BPUlRTRUwpOworCisJLyogdHJ1bmsgcG9ydCAzIGFuZCA0CisJICogWFhYOiBCaWcgV1RGLCBidXQgUmVhbFRlayBzZWVtcyB0byBkbyBpdCAqLworCXJ0bF9zZXQoZGV2LCBSVExfUkVHX0VOX1RSVU5LLCAxKTsKKwlydGxfc2V0KGRldiwgUlRMX1JFR19UUlVOS19QT1JUU0VMLCAxKTsKKworCS8qIGV4ZWN1dGUgdGhlIHNvZnR3YXJlIHJlc2V0ICovCisJcnRsX3NldChkZXYsIFJUTF9SRUdfUkVTRVQsIDEpOworCisJLyogd2FpdCBmb3IgdGhlIHJlc2V0IHRvIGNvbXBsZXRlLAorCSAqIGJ1dCBkb24ndCB3YWl0IGZvciB0b28gbG9uZyAqLworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCWlmIChydGxfZ2V0KGRldiwgUlRMX1JFR19SRVNFVCkgPT0gMCkKKwkJCWJyZWFrOworCisJCW1zbGVlcCgxKTsKKwl9CisKKwkvKiBlbmFibGUgcngvdHggZnJvbSBQSFlzICovCisJZm9yIChpID0gMDsgaSA8IFJUTDgzMDZfTlVNX1BPUlRTIC0gMTsgaSsrKSB7CisJCXJ0bF9wb3J0X3NldF9lbmFibGUoZGV2LCBpLCAxKTsKKwl9CisKKwkvKiByZXN0b3JlIHRydW5raW5nIHNldHRpbmdzICovCisJcnRsX3NldChkZXYsIFJUTF9SRUdfRU5fVFJVTkssIHRydW5rX2VuKTsKKwlydGxfc2V0KGRldiwgUlRMX1JFR19UUlVOS19QT1JUU0VMLCB0cnVua19wc2VsKTsKKwlydGxfcGh5X3Jlc3RvcmUoZGV2LCA1LCAmcG9ydDUpOworCisJcnRsX3NldChkZXYsIFJUTF9SRUdfQ1BVX0xJTktVUCwgMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3J0bF9od19pbml0KHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYpCit7CisJc3RydWN0IHJ0bF9wcml2ICpwcml2ID0gdG9fcnRsKGRldik7CisJaW50IGNwdV9tYXNrID0gMSA8PCBkZXYtPmNwdV9wb3J0OworCWludCBpOworCisJcnRsX3NldChkZXYsIFJUTF9SRUdfVkxBTl9FTkFCTEUsIDApOworCXJ0bF9zZXQoZGV2LCBSVExfUkVHX1ZMQU5fRklMVEVSLCAwKTsKKwlydGxfc2V0KGRldiwgUlRMX1JFR19FTl9UUlVOSywgMCk7CisJcnRsX3NldChkZXYsIFJUTF9SRUdfVFJVTktfUE9SVFNFTCwgMCk7CisKKwkvKiBpbml0aWFsaXplIGNwdSBwb3J0IHNldHRpbmdzICovCisJaWYgKHByaXYtPmRvX2NwdSkgeworCQlydGxfc2V0KGRldiwgUlRMX1JFR19DUFVQT1JULCBkZXYtPmNwdV9wb3J0KTsKKwkJcnRsX3NldChkZXYsIFJUTF9SRUdfRU5fQ1BVUE9SVCwgMSk7CisJfSBlbHNlIHsKKwkJcnRsX3NldChkZXYsIFJUTF9SRUdfQ1BVUE9SVCwgNyk7CisJCXJ0bF9zZXQoZGV2LCBSVExfUkVHX0VOX0NQVVBPUlQsIDApOworCX0KKwlydGxfc2V0KGRldiwgUlRMX1JFR19FTl9UQUdfT1VULCAwKTsKKwlydGxfc2V0KGRldiwgUlRMX1JFR19FTl9UQUdfSU4sIDApOworCXJ0bF9zZXQoZGV2LCBSVExfUkVHX0VOX1RBR19DTFIsIDApOworCisJLyogcmVzZXQgYWxsIHZsYW5zICovCisJZm9yIChpID0gMDsgaSA8IFJUTDgzMDZfTlVNX1ZMQU5TOyBpKyspIHsKKwkJcnRsX3NldChkZXYsIFJUTF9WTEFOX1JFRyhpLCBWSUQpLCBpKTsKKwkJcnRsX3NldChkZXYsIFJUTF9WTEFOX1JFRyhpLCBQT1JUTUFTSyksIDApOworCX0KKworCS8qIGRlZmF1bHQgdG8gcG9ydCBpc29sYXRpb24gKi8KKwlmb3IgKGkgPSAwOyBpIDwgUlRMODMwNl9OVU1fUE9SVFM7IGkrKykgeworCQl1bnNpZ25lZCBsb25nIG1hc2s7CisKKwkJaWYgKCgxIDw8IGkpID09IGNwdV9tYXNrKQorCQkJbWFzayA9ICgoMSA8PCBSVEw4MzA2X05VTV9QT1JUUykgLSAxKSAmIH5jcHVfbWFzazsgLyogYWxsIGJpdHMgc2V0ICovCisJCWVsc2UKKwkJCW1hc2sgPSBjcHVfbWFzayB8ICgxIDw8IGkpOworCisJCXJ0bF9zZXQoZGV2LCBSVExfVkxBTl9SRUcoaSwgUE9SVE1BU0spLCBtYXNrKTsKKwkJcnRsX3NldChkZXYsIFJUTF9QT1JUX1JFRyhpLCBQVklEKSwgaSk7CisJCXJ0bF9zZXQoZGV2LCBSVExfUE9SVF9SRUcoaSwgTlVMTF9WSURfUkVQTEFDRSksIDEpOworCQlydGxfc2V0KGRldiwgUlRMX1BPUlRfUkVHKGksIFZJRF9JTlNFUlQpLCAxKTsKKwkJcnRsX3NldChkZXYsIFJUTF9QT1JUX1JFRyhpLCBUQUdfSU5TRVJUKSwgMyk7CisJfQorCXJ0bF9od19hcHBseShkZXYpOworfQorCisjaWZkZWYgREVCVUcKK3N0YXRpYyBpbnQKK3J0bF9zZXRfdXNlX2NwdXBvcnQoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLCBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBydGxfcHJpdiAqcHJpdiA9IHRvX3J0bChkZXYpOworCXByaXYtPmRvX2NwdSA9IHZhbC0+dmFsdWUuaTsKKwlydGxfaHdfaW5pdChkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitydGxfZ2V0X3VzZV9jcHVwb3J0KHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnByaXYgPSB0b19ydGwoZGV2KTsKKwl2YWwtPnZhbHVlLmkgPSBwcml2LT5kb19jcHU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3J0bF9zZXRfY3B1cG9ydChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJZGV2LT5jcHVfcG9ydCA9IHZhbC0+dmFsdWUuaTsKKwlydGxfaHdfaW5pdChkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitydGxfZ2V0X2NwdXBvcnQoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLCBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXZhbC0+dmFsdWUuaSA9IGRldi0+Y3B1X3BvcnQ7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludAorcnRsX3Jlc2V0KHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYpCit7CisJcnRsX2h3X2luaXQoZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcnRsX2F0dHJfc2V0X2ludChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJaW50IGlkeCA9IGF0dHItPmlkICsgKHZhbC0+cG9ydF92bGFuICogYXR0ci0+b2ZzKTsKKwlzdHJ1Y3QgcnRsX3BoeXJlZ3MgcG9ydDsKKworCWlmIChhdHRyLT5pZCA+PSBBUlJBWV9TSVpFKHJ0bF9yZWdzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoKGF0dHItPm1heCA+IDApICYmICh2YWwtPnZhbHVlLmkgPiBhdHRyLT5tYXgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGFjY2VzcyB0byBwaHkgcmVnaXN0ZXIgMjIgb24gcG9ydCA0LzUKKwkgKiBuZWVkcyBwaHkgc3RhdHVzIHNhdmUvcmVzdG9yZSAqLworCWlmICgodmFsLT5wb3J0X3ZsYW4gPiAzKSAmJgorCQkocnRsX3JlZ3NbaWR4XS5yZWcgPT0gMjIpICYmCisJCShydGxfcmVnc1tpZHhdLnBhZ2UgPT0gMCkpIHsKKworCQlydGxfcGh5X3NhdmUoZGV2LCB2YWwtPnBvcnRfdmxhbiwgJnBvcnQpOworCQlydGxfc2V0KGRldiwgaWR4LCB2YWwtPnZhbHVlLmkpOworCQlydGxfcGh5X3Jlc3RvcmUoZGV2LCB2YWwtPnBvcnRfdmxhbiwgJnBvcnQpOworCX0gZWxzZSB7CisJCXJ0bF9zZXQoZGV2LCBpZHgsIHZhbC0+dmFsdWUuaSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3J0bF9hdHRyX2dldF9pbnQoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLCBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCWludCBpZHggPSBhdHRyLT5pZCArICh2YWwtPnBvcnRfdmxhbiAqIGF0dHItPm9mcyk7CisKKwlpZiAoaWR4ID49IEFSUkFZX1NJWkUocnRsX3JlZ3MpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZhbC0+dmFsdWUuaSA9IHJ0bF9nZXQoZGV2LCBpZHgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitydGxfYXR0cl9zZXRfcG9ydF9pbnQoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLCBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCWlmICh2YWwtPnBvcnRfdmxhbiA+PSBSVEw4MzA2X05VTV9QT1JUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gcnRsX2F0dHJfc2V0X2ludChkZXYsIGF0dHIsIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQKK3J0bF9hdHRyX2dldF9wb3J0X2ludChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJaWYgKHZhbC0+cG9ydF92bGFuID49IFJUTDgzMDZfTlVNX1BPUlRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gcnRsX2F0dHJfZ2V0X2ludChkZXYsIGF0dHIsIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgCitydGxfZ2V0X3BvcnRfbGluayhzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBpbnQgcG9ydCwgc3RydWN0IHN3aXRjaF9wb3J0X2xpbmsgKmxpbmspCit7CisJaWYgKHBvcnQgPj0gUlRMODMwNl9OVU1fUE9SVFMpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogaW4gY2FzZSB0aGUgbGluayBjaGFuZ2VzIGZyb20gZG93biB0byB1cCwgdGhlIHJlZ2lzdGVyIGlzIG9ubHkgdXBkYXRlZCBvbiByZWFkICovCisJbGluay0+bGluayA9IHJ0bF9nZXQoZGV2LCBSVExfUE9SVF9SRUcocG9ydCwgTElOSykpOworCWlmICghbGluay0+bGluaykKKwkJbGluay0+bGluayA9IHJ0bF9nZXQoZGV2LCBSVExfUE9SVF9SRUcocG9ydCwgTElOSykpOworCisJaWYgKCFsaW5rLT5saW5rKQorCQlyZXR1cm4gMDsKKworCWxpbmstPmR1cGxleCA9IHJ0bF9nZXQoZGV2LCBSVExfUE9SVF9SRUcocG9ydCwgRFVQTEVYKSk7CisJbGluay0+YW5lZyA9IHJ0bF9nZXQoZGV2LCBSVExfUE9SVF9SRUcocG9ydCwgTldBWSkpOworCisJaWYgKHJ0bF9nZXQoZGV2LCBSVExfUE9SVF9SRUcocG9ydCwgU1BFRUQpKSkKKwkJbGluay0+c3BlZWQgPSBTV0lUQ0hfUE9SVF9TUEVFRF8xMDA7CisJZWxzZQorCQlsaW5rLT5zcGVlZCA9IFNXSVRDSF9QT1JUX1NQRUVEXzEwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3J0bF9hdHRyX3NldF92bGFuX2ludChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJaWYgKHZhbC0+cG9ydF92bGFuID49IGRldi0+dmxhbnMpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHJ0bF9hdHRyX3NldF9pbnQoZGV2LCBhdHRyLCB2YWwpOworfQorCitzdGF0aWMgaW50CitydGxfYXR0cl9nZXRfdmxhbl9pbnQoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLCBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCWlmICh2YWwtPnBvcnRfdmxhbiA+PSBkZXYtPnZsYW5zKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBydGxfYXR0cl9nZXRfaW50KGRldiwgYXR0ciwgdmFsKTsKK30KKworc3RhdGljIGludAorcnRsX2dldF9wb3J0cyhzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXVuc2lnbmVkIGludCBpLCBtYXNrOworCisJbWFzayA9IHJ0bF9nZXQoZGV2LCBSVExfVkxBTl9SRUcodmFsLT5wb3J0X3ZsYW4sIFBPUlRNQVNLKSk7CisJZm9yIChpID0gMDsgaSA8IFJUTDgzMDZfTlVNX1BPUlRTOyBpKyspIHsKKwkJc3RydWN0IHN3aXRjaF9wb3J0ICpwb3J0OworCisJCWlmICghKG1hc2sgJiAoMSA8PCBpKSkpCisJCQljb250aW51ZTsKKworCQlwb3J0ID0gJnZhbC0+dmFsdWUucG9ydHNbdmFsLT5sZW5dOworCQlwb3J0LT5pZCA9IGk7CisJCWlmIChydGxfZ2V0KGRldiwgUlRMX1BPUlRfUkVHKGksIFRBR19JTlNFUlQpKSA9PSAyIHx8IGkgPT0gZGV2LT5jcHVfcG9ydCkKKwkJCXBvcnQtPmZsYWdzID0gKDEgPDwgU1dJVENIX1BPUlRfRkxBR19UQUdHRUQpOworCQl2YWwtPmxlbisrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitydGxfc2V0X3ZsYW4oc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLCBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBydGxfcHJpdiAqcHJpdiA9IHRvX3J0bChkZXYpOworCXN0cnVjdCBydGxfcGh5cmVncyBwb3J0OworCWludCBlbiA9IHZhbC0+dmFsdWUuaTsKKwlpbnQgaTsKKworCXJ0bF9zZXQoZGV2LCBSVExfUkVHX0VOX1RBR19PVVQsIGVuICYmIHByaXYtPmRvX2NwdSk7CisJcnRsX3NldChkZXYsIFJUTF9SRUdfRU5fVEFHX0lOLCBlbiAmJiBwcml2LT5kb19jcHUpOworCXJ0bF9zZXQoZGV2LCBSVExfUkVHX0VOX1RBR19DTFIsIGVuICYmIHByaXYtPmRvX2NwdSk7CisJcnRsX3NldChkZXYsIFJUTF9SRUdfVkxBTl9UQUdfQVdBUkUsIGVuKTsKKwlpZiAoZW4pCisJCXJ0bF9zZXQoZGV2LCBSVExfUkVHX1ZMQU5fRklMVEVSLCBlbik7CisKKwlmb3IgKGkgPSAwOyBpIDwgUlRMODMwNl9OVU1fUE9SVFM7IGkrKykgeworCQlpZiAoaSA+IDMpCisJCQlydGxfcGh5X3NhdmUoZGV2LCB2YWwtPnBvcnRfdmxhbiwgJnBvcnQpOworCQlydGxfc2V0KGRldiwgUlRMX1BPUlRfUkVHKGksIE5VTExfVklEX1JFUExBQ0UpLCAxKTsKKwkJcnRsX3NldChkZXYsIFJUTF9QT1JUX1JFRyhpLCBWSURfSU5TRVJUKSwgKGVuID8gKGkgPT0gZGV2LT5jcHVfcG9ydCA/IDAgOiAxKSA6IDEpKTsKKwkJcnRsX3NldChkZXYsIFJUTF9QT1JUX1JFRyhpLCBUQUdfSU5TRVJUKSwgKGVuID8gKGkgPT0gZGV2LT5jcHVfcG9ydCA/IDIgOiAxKSA6IDMpKTsKKwkJaWYgKGkgPiAzKQorCQkJcnRsX3BoeV9yZXN0b3JlKGRldiwgdmFsLT5wb3J0X3ZsYW4sICZwb3J0KTsKKwl9CisJcnRsX3NldChkZXYsIFJUTF9SRUdfVkxBTl9FTkFCTEUsIGVuKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitydGxfZ2V0X3ZsYW4oc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLCBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXZhbC0+dmFsdWUuaSA9IHJ0bF9nZXQoZGV2LCBSVExfUkVHX1ZMQU5fRU5BQkxFKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcnRsX3NldF9wb3J0cyhzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXVuc2lnbmVkIGludCBtYXNrID0gMDsKKwl1bnNpZ25lZCBpbnQgb2xkbWFzazsKKwlpbnQgaTsKKworCWZvcihpID0gMDsgaSA8IHZhbC0+bGVuOyBpKyspCisJeworCQlzdHJ1Y3Qgc3dpdGNoX3BvcnQgKnBvcnQgPSAmdmFsLT52YWx1ZS5wb3J0c1tpXTsKKwkJYm9vbCB0YWdnZWQgPSBmYWxzZTsKKworCQltYXNrIHw9ICgxIDw8IHBvcnQtPmlkKTsKKworCQlpZiAocG9ydC0+aWQgPT0gZGV2LT5jcHVfcG9ydCkKKwkJCWNvbnRpbnVlOworCisJCWlmICgoaSA9PSBkZXYtPmNwdV9wb3J0KSB8fAorCQkJKHBvcnQtPmZsYWdzICYgKDEgPDwgU1dJVENIX1BPUlRfRkxBR19UQUdHRUQpKSkKKwkJCXRhZ2dlZCA9IHRydWU7CisKKwkJLyogZml4IHVwIFBWSURzIGZvciBhZGRlZCBwb3J0cyAqLworCQlpZiAoIXRhZ2dlZCkKKwkJCXJ0bF9zZXQoZGV2LCBSVExfUE9SVF9SRUcocG9ydC0+aWQsIFBWSUQpLCB2YWwtPnBvcnRfdmxhbik7CisKKwkJcnRsX3NldChkZXYsIFJUTF9QT1JUX1JFRyhwb3J0LT5pZCwgTk9OX1BWSURfRElTQ0FSRCksICh0YWdnZWQgPyAwIDogMSkpOworCQlydGxfc2V0KGRldiwgUlRMX1BPUlRfUkVHKHBvcnQtPmlkLCBWSURfSU5TRVJUKSwgKHRhZ2dlZCA/IDAgOiAxKSk7CisJCXJ0bF9zZXQoZGV2LCBSVExfUE9SVF9SRUcocG9ydC0+aWQsIFRBR19JTlNFUlQpLCAodGFnZ2VkID8gMiA6IDEpKTsKKwl9CisKKwlvbGRtYXNrID0gcnRsX2dldChkZXYsIFJUTF9WTEFOX1JFRyh2YWwtPnBvcnRfdmxhbiwgUE9SVE1BU0spKTsKKwlydGxfc2V0KGRldiwgUlRMX1ZMQU5fUkVHKHZhbC0+cG9ydF92bGFuLCBQT1JUTUFTSyksIG1hc2spOworCisJLyogZml4IHVwIFBWSURzIGZvciByZW1vdmVkIHBvcnRzLCBkZWZhdWx0IHRvIGxhc3QgdmxhbiAqLworCW9sZG1hc2sgJj0gfm1hc2s7CisJZm9yIChpID0gMDsgaSA8IFJUTDgzMDZfTlVNX1BPUlRTOyBpKyspIHsKKwkJaWYgKCEob2xkbWFzayAmICgxIDw8IGkpKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChpID09IGRldi0+Y3B1X3BvcnQpCisJCQljb250aW51ZTsKKworCQlpZiAocnRsX2dldChkZXYsIFJUTF9QT1JUX1JFRyhpLCBQVklEKSkgPT0gdmFsLT5wb3J0X3ZsYW4pCisJCQlydGxfc2V0KGRldiwgUlRMX1BPUlRfUkVHKGksIFBWSUQpLCBkZXYtPnZsYW5zIC0gMSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3dpdGNoX2F0dHIgcnRsX2dsb2JhbHNbXSA9IHsKKwl7CisJCS50eXBlID0gU1dJVENIX1RZUEVfSU5ULAorCQkubmFtZSA9ICJlbmFibGVfdmxhbiIsCisJCS5kZXNjcmlwdGlvbiA9ICJFbmFibGUgVkxBTiBtb2RlIiwKKwkJLm1heCA9IDEsCisJCS5zZXQgPSBydGxfc2V0X3ZsYW4sCisJCS5nZXQgPSBydGxfZ2V0X3ZsYW4sCisJfSwKKwl7CisJCVJUTF9HTE9CQUxfUkVHQVRUUihFTl9UUlVOSyksCisJCS5uYW1lID0gInRydW5rIiwKKwkJLmRlc2NyaXB0aW9uID0gIkVuYWJsZSBwb3J0IHRydW5raW5nIiwKKwkJLm1heCA9IDEsCisJfSwKKwl7CisJCVJUTF9HTE9CQUxfUkVHQVRUUihUUlVOS19QT1JUU0VMKSwKKwkJLm5hbWUgPSAidHJ1bmtfc2VsIiwKKwkJLmRlc2NyaXB0aW9uID0gIlNlbGVjdCBwb3J0cyBmb3IgdHJ1bmtpbmcgKDA6IDAsMSAtIDE6IDMsNCkiLAorCQkubWF4ID0gMSwKKwl9LAorI2lmZGVmIERFQlVHCisJeworCQlSVExfR0xPQkFMX1JFR0FUVFIoVkxBTl9GSUxURVIpLAorCQkubmFtZSA9ICJ2bGFuX2ZpbHRlciIsCisJCS5kZXNjcmlwdGlvbiA9ICJGaWx0ZXIgaW5jb21pbmcgcGFja2V0cyBmb3IgYWxsb3dlZCBWTEFOUyIsCisJCS5tYXggPSAxLAorCX0sCisJeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX0lOVCwKKwkJLm5hbWUgPSAiY3B1cG9ydCIsCisJCS5kZXNjcmlwdGlvbiA9ICJDUFUgUG9ydCIsCisJCS5zZXQgPSBydGxfc2V0X2NwdXBvcnQsCisJCS5nZXQgPSBydGxfZ2V0X2NwdXBvcnQsCisJCS5tYXggPSBSVEw4MzA2X05VTV9QT1JUUywKKwl9LAorCXsKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9JTlQsCisJCS5uYW1lID0gInVzZV9jcHVwb3J0IiwKKwkJLmRlc2NyaXB0aW9uID0gIkNQVSBQb3J0IGhhbmRsaW5nIGZsYWciLAorCQkuc2V0ID0gcnRsX3NldF91c2VfY3B1cG9ydCwKKwkJLmdldCA9IHJ0bF9nZXRfdXNlX2NwdXBvcnQsCisJCS5tYXggPSBSVEw4MzA2X05VTV9QT1JUUywKKwl9LAorCXsKKwkJUlRMX0dMT0JBTF9SRUdBVFRSKFRSQVBfQ1BVKSwKKwkJLm5hbWUgPSAidHJhcF9jcHUiLAorCQkuZGVzY3JpcHRpb24gPSAiVkxBTiB0cmFwIHRvIENQVSIsCisJCS5tYXggPSAxLAorCX0sCisJeworCQlSVExfR0xPQkFMX1JFR0FUVFIoVkxBTl9UQUdfQVdBUkUpLAorCQkubmFtZSA9ICJ2bGFuX3RhZ19hd2FyZSIsCisJCS5kZXNjcmlwdGlvbiA9ICJFbmFibGUgVkxBTiB0YWcgYXdhcmVuZXNzIiwKKwkJLm1heCA9IDEsCisJfSwKKwl7CisJCVJUTF9HTE9CQUxfUkVHQVRUUihWTEFOX1RBR19PTkxZKSwKKwkJLm5hbWUgPSAidGFnX29ubHkiLAorCQkuZGVzY3JpcHRpb24gPSAiT25seSBhY2NlcHQgdGFnZ2VkIHBhY2tldHMiLAorCQkubWF4ID0gMSwKKwl9LAorI2VuZGlmCit9Oworc3RhdGljIHN0cnVjdCBzd2l0Y2hfYXR0ciBydGxfcG9ydFtdID0geworCXsKKwkJUlRMX1BPUlRfUkVHQVRUUihQVklEKSwKKwkJLm5hbWUgPSAicHZpZCIsCisJCS5kZXNjcmlwdGlvbiA9ICJQb3J0IFZMQU4gSUQiLAorCQkubWF4ID0gUlRMODMwNl9OVU1fVkxBTlMgLSAxLAorCX0sCisjaWZkZWYgREVCVUcKKwl7CisJCVJUTF9QT1JUX1JFR0FUVFIoTlVMTF9WSURfUkVQTEFDRSksCisJCS5uYW1lID0gIm51bGxfdmlkIiwKKwkJLmRlc2NyaXB0aW9uID0gIk5VTEwgVklEIGdldHMgcmVwbGFjZWQgYnkgcG9ydCBkZWZhdWx0IHZpZCIsCisJCS5tYXggPSAxLAorCX0sCisJeworCQlSVExfUE9SVF9SRUdBVFRSKE5PTl9QVklEX0RJU0NBUkQpLAorCQkubmFtZSA9ICJub25fcHZpZF9kaXNjYXJkIiwKKwkJLmRlc2NyaXB0aW9uID0gImRpc2NhcmQgcGFja2V0cyB3aXRoIFZJRCAhPSBQVklEIiwKKwkJLm1heCA9IDEsCisJfSwKKwl7CisJCVJUTF9QT1JUX1JFR0FUVFIoVklEX0lOU0VSVCksCisJCS5uYW1lID0gInZpZF9pbnNlcnRfcmVtb3ZlIiwKKwkJLmRlc2NyaXB0aW9uID0gImhvdyBzaG91bGQgdGhlIHN3aXRjaCBpbnNlcnQgYW5kIHJlbW92ZSB2aWRzID8iLAorCQkubWF4ID0gMywKKwl9LAorCXsKKwkJUlRMX1BPUlRfUkVHQVRUUihUQUdfSU5TRVJUKSwKKwkJLm5hbWUgPSAidGFnX2luc2VydCIsCisJCS5kZXNjcmlwdGlvbiA9ICJ0YWcgaW5zZXJ0aW9uIGhhbmRsaW5nIiwKKwkJLm1heCA9IDMsCisJfSwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCBzd2l0Y2hfYXR0ciBydGxfdmxhbltdID0geworCXsKKwkJUlRMX1ZMQU5fUkVHQVRUUihWSUQpLAorCQkubmFtZSA9ICJ2aWQiLAorCQkuZGVzY3JpcHRpb24gPSAiVkxBTiBJRCAoMS00MDk1KSIsCisJCS5tYXggPSA0MDk1LAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHN3aXRjaF9kZXZfb3BzIHJ0bDgzMDZfb3BzID0geworCS5hdHRyX2dsb2JhbCA9IHsKKwkJLmF0dHIgPSBydGxfZ2xvYmFscywKKwkJLm5fYXR0ciA9IEFSUkFZX1NJWkUocnRsX2dsb2JhbHMpLAorCX0sCisJLmF0dHJfcG9ydCA9IHsKKwkJLmF0dHIgPSBydGxfcG9ydCwKKwkJLm5fYXR0ciA9IEFSUkFZX1NJWkUocnRsX3BvcnQpLAorCX0sCisJLmF0dHJfdmxhbiA9IHsKKwkJLmF0dHIgPSBydGxfdmxhbiwKKwkJLm5fYXR0ciA9IEFSUkFZX1NJWkUocnRsX3ZsYW4pLAorCX0sCisKKwkuZ2V0X3ZsYW5fcG9ydHMgPSBydGxfZ2V0X3BvcnRzLAorCS5zZXRfdmxhbl9wb3J0cyA9IHJ0bF9zZXRfcG9ydHMsCisJLmFwcGx5X2NvbmZpZyA9IHJ0bF9od19hcHBseSwKKwkucmVzZXRfc3dpdGNoID0gcnRsX3Jlc2V0LAorCS5nZXRfcG9ydF9saW5rID0gcnRsX2dldF9wb3J0X2xpbmssCit9OworCitzdGF0aWMgaW50CitydGw4MzA2X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwZGV2LT5hdHRhY2hlZF9kZXY7CisJc3RydWN0IHJ0bF9wcml2ICpwcml2ID0gcGRldi0+cHJpdjsKKwlzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2ID0gJnByaXYtPmRldjsKKwlzdHJ1Y3Qgc3dpdGNoX3ZhbCB2YWw7CisJdW5zaWduZWQgaW50IGNoaXBpZCwgY2hpcHZlciwgY2hpcHR5cGU7CisJaW50IGVycjsKKworCS8qIE9ubHkgaW5pdCB0aGUgc3dpdGNoIGZvciB0aGUgcHJpbWFyeSBQSFkgKi8KKwlpZiAocGRldi0+bWRpby5hZGRyICE9IDApCisJCXJldHVybiAwOworCisJdmFsLnZhbHVlLmkgPSAxOworCXByaXYtPmRldi5jcHVfcG9ydCA9IFJUTDgzMDZfUE9SVF9DUFU7CisJcHJpdi0+ZGV2LnBvcnRzID0gUlRMODMwNl9OVU1fUE9SVFM7CisJcHJpdi0+ZGV2LnZsYW5zID0gUlRMODMwNl9OVU1fVkxBTlM7CisJcHJpdi0+ZGV2Lm9wcyA9ICZydGw4MzA2X29wczsKKwlwcml2LT5kb19jcHUgPSAwOworCXByaXYtPnBhZ2UgPSAtMTsKKwlwcml2LT5idXMgPSBwZGV2LT5tZGlvLmJ1czsKKworCWNoaXBpZCA9IHJ0bF9nZXQoZGV2LCBSVExfUkVHX0NISVBJRCk7CisJY2hpcHZlciA9IHJ0bF9nZXQoZGV2LCBSVExfUkVHX0NISVBWRVIpOworCWNoaXB0eXBlID0gcnRsX2dldChkZXYsIFJUTF9SRUdfQ0hJUFRZUEUpOworCXN3aXRjaChjaGlwdHlwZSkgeworCWNhc2UgMDoKKwljYXNlIDI6CisJCXN0cm5jcHkocHJpdi0+aHduYW1lLCBSVExfTkFNRV9TLCBzaXplb2YocHJpdi0+aHduYW1lKSk7CisJCXByaXYtPnR5cGUgPSBSVExfVFlQRV9TOworCQlicmVhazsKKwljYXNlIDE6CisJCXN0cm5jcHkocHJpdi0+aHduYW1lLCBSVExfTkFNRV9TRCwgc2l6ZW9mKHByaXYtPmh3bmFtZSkpOworCQlwcml2LT50eXBlID0gUlRMX1RZUEVfU0Q7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJc3RybmNweShwcml2LT5od25hbWUsIFJUTF9OQU1FX1NETSwgc2l6ZW9mKHByaXYtPmh3bmFtZSkpOworCQlwcml2LT50eXBlID0gUlRMX1RZUEVfU0RNOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzdHJuY3B5KHByaXYtPmh3bmFtZSwgUlRMX05BTUVfVU5LTk9XTiwgc2l6ZW9mKHByaXYtPmh3bmFtZSkpOworCQlicmVhazsKKwl9CisKKwlkZXYtPm5hbWUgPSBwcml2LT5od25hbWU7CisJcnRsX2h3X2luaXQoZGV2KTsKKworCXByaW50ayhLRVJOX0lORk8gIlJlZ2lzdGVyaW5nICVzIHN3aXRjaCB3aXRoIENoaXAgSUQ6IDB4JTA0eCwgdmVyc2lvbjogMHglMDR4XG4iLCBwcml2LT5od25hbWUsIGNoaXBpZCwgY2hpcHZlcik7CisKKwllcnIgPSByZWdpc3Rlcl9zd2l0Y2goZGV2LCBuZXRkZXYpOworCWlmIChlcnIgPCAwKSB7CisJCWtmcmVlKHByaXYpOworCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQKK3J0bDgzMDZfZml4dXAoc3RydWN0IHBoeV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJ0bF9wcml2IHByaXY7CisJdTE2IGNoaXBpZDsKKworCS8qIEF0dGFjaCB0byBwcmltYXJ5IExBTiBwb3J0IGFuZCBXQU4gcG9ydCAqLworCWlmIChwZGV2LT5tZGlvLmFkZHIgIT0gMCAmJiBwZGV2LT5tZGlvLmFkZHIgIT0gNCkKKwkJcmV0dXJuIDA7CisKKwltZW1zZXQoJnByaXYsIDAsIHNpemVvZihwcml2KSk7CisJcHJpdi5maXh1cCA9IHRydWU7CisJcHJpdi5wYWdlID0gLTE7CisJcHJpdi5idXMgPSBwZGV2LT5tZGlvLmJ1czsKKwljaGlwaWQgPSBydGxfZ2V0KCZwcml2LmRldiwgUlRMX1JFR19DSElQSUQpOworCWlmIChjaGlwaWQgPT0gMHg1OTg4KQorCQlwZGV2LT5waHlfaWQgPSBSVEw4MzA2X01BR0lDOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3J0bDgzMDZfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJ0bF9wcml2ICpwcml2OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwcml2LCAmcGh5ZGV2cywgbGlzdCkgeworCQkvKgorCQkgKiBzaGFyZSBvbmUgcnRsX3ByaXYgaW5zdGFuY2UgYmV0d2VlbiB2aXJ0dWFsIHBoeQorCQkgKiBkZXZpY2VzIG9uIHRoZSBzYW1lIGJ1cworCQkgKi8KKwkJaWYgKHByaXYtPmJ1cyA9PSBwZGV2LT5tZGlvLmJ1cykKKwkJCWdvdG8gZm91bmQ7CisJfQorCXByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcnRsX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVybiAtRU5PTUVNOworCisJcHJpdi0+YnVzID0gcGRldi0+bWRpby5idXM7CisKK2ZvdW5kOgorCXBkZXYtPnByaXYgPSBwcml2OworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorcnRsODMwNl9yZW1vdmUoc3RydWN0IHBoeV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJ0bF9wcml2ICpwcml2ID0gcGRldi0+cHJpdjsKKwl1bnJlZ2lzdGVyX3N3aXRjaCgmcHJpdi0+ZGV2KTsKKwlrZnJlZShwcml2KTsKK30KKworc3RhdGljIGludAorcnRsODMwNl9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnByaXYgPSBwZGV2LT5wcml2OworCisJLyogT25seSBmb3IgV0FOICovCisJaWYgKHBkZXYtPm1kaW8uYWRkciA9PSAwKQorCQlyZXR1cm4gMDsKKworCS8qIFJlc3RhcnQgYXV0b25lZ290aWF0aW9uICovCisJcnRsX3NldCgmcHJpdi0+ZGV2LCBSVExfUE9SVF9SRUcoNCwgTldBWSksIDEpOworCXJ0bF9zZXQoJnByaXYtPmRldiwgUlRMX1BPUlRfUkVHKDQsIE5SRVNUQVJUKSwgMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcnRsODMwNl9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcnRsX3ByaXYgKnByaXYgPSBwZGV2LT5wcml2OworCXN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYgPSAmcHJpdi0+ZGV2OworCisJaWYgKHBkZXYtPm1kaW8uYWRkciA9PSA0KSB7CisJCS8qIFdBTiAqLworCQlwZGV2LT5zcGVlZCA9IHJ0bF9nZXQoZGV2LCBSVExfUE9SVF9SRUcoNCwgU1BFRUQpKSA/IFNQRUVEXzEwMCA6IFNQRUVEXzEwOworCQlwZGV2LT5kdXBsZXggPSBydGxfZ2V0KGRldiwgUlRMX1BPUlRfUkVHKDQsIERVUExFWCkpID8gRFVQTEVYX0ZVTEwgOiBEVVBMRVhfSEFMRjsKKwkJcGRldi0+bGluayA9ICEhcnRsX2dldChkZXYsIFJUTF9QT1JUX1JFRyg0LCBMSU5LKSk7CisJfSBlbHNlIHsKKwkJLyogTEFOICovCisJCXBkZXYtPnNwZWVkID0gU1BFRURfMTAwOworCQlwZGV2LT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwkJcGRldi0+bGluayA9IDE7CisJfQorCisJLyoKKwkgKiBCeXBhc3MgZ2VuZXJpYyBQSFkgc3RhdHVzIHJlYWQsCisJICogaXQgZG9lc24ndCB3b3JrIHdpdGggdGhpcyBzd2l0Y2gKKwkgKi8KKwlpZiAocGRldi0+bGluaykgeworCQlwZGV2LT5zdGF0ZSA9IFBIWV9SVU5OSU5HOworCQluZXRpZl9jYXJyaWVyX29uKHBkZXYtPmF0dGFjaGVkX2Rldik7CisJCXBkZXYtPmFkanVzdF9saW5rKHBkZXYtPmF0dGFjaGVkX2Rldik7CisJfSBlbHNlIHsKKwkJcGRldi0+c3RhdGUgPSBQSFlfTk9MSU5LOworCQluZXRpZl9jYXJyaWVyX29mZihwZGV2LT5hdHRhY2hlZF9kZXYpOworCQlwZGV2LT5hZGp1c3RfbGluayhwZGV2LT5hdHRhY2hlZF9kZXYpOworCX0KKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBydGw4MzA2X2RyaXZlciA9IHsKKwkubmFtZQkJPSAiUmVhbHRlayBSVEw4MzA2UyIsCisJLnBoeV9pZAkJPSBSVEw4MzA2X01BR0lDLAorCS5waHlfaWRfbWFzawk9IDB4ZmZmZmZmZmYsCisJLmZlYXR1cmVzCT0gUEhZX0JBU0lDX0ZFQVRVUkVTLAorCS5wcm9iZQkJPSAmcnRsODMwNl9wcm9iZSwKKwkucmVtb3ZlCQk9ICZydGw4MzA2X3JlbW92ZSwKKwkuY29uZmlnX2luaXQJPSAmcnRsODMwNl9jb25maWdfaW5pdCwKKwkuY29uZmlnX2FuZWcJPSAmcnRsODMwNl9jb25maWdfYW5lZywKKwkucmVhZF9zdGF0dXMJPSAmcnRsODMwNl9yZWFkX3N0YXR1cywKK307CisKKworc3RhdGljIGludCBfX2luaXQKK3J0bF9pbml0KHZvaWQpCit7CisJcGh5X3JlZ2lzdGVyX2ZpeHVwX2Zvcl9pZChQSFlfQU5ZX0lELCBydGw4MzA2X2ZpeHVwKTsKKwlyZXR1cm4gcGh5X2RyaXZlcl9yZWdpc3RlcigmcnRsODMwNl9kcml2ZXIsIFRISVNfTU9EVUxFKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0CitydGxfZXhpdCh2b2lkKQoreworCXBoeV9kcml2ZXJfdW5yZWdpc3RlcigmcnRsODMwNl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChydGxfaW5pdCk7Cittb2R1bGVfZXhpdChydGxfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9ydGw4MzY2X3NtaS5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9uZXQvcGh5L3J0bDgzNjZfc21pLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgzNzVlNQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9ydGw4MzY2X3NtaS5jCkBAIC0wLDAgKzEsMTYyNCBAQAorLyoKKyAqIFJlYWx0ZWsgUlRMODM2NiBTTUkgaW50ZXJmYWNlIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIEdhYm9yIEp1aG9zIDxqdWhvc2dAb3BlbndydC5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3J0bDgzNjYuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfbWRpby5oPgorCisjaWZkZWYgQ09ORklHX1JUTDgzNjZfU01JX0RFQlVHX0ZTCisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJydGw4MzY2X3NtaS5oIgorCisjZGVmaW5lIFJUTDgzNjZfU01JX0FDS19SRVRSWV9DT1VOVCAgICAgICAgIDUKKworI2RlZmluZSBSVEw4MzY2X1NNSV9IV19TVE9QX0RFTEFZCQkyNQkvKiBtc2VjcyAqLworI2RlZmluZSBSVEw4MzY2X1NNSV9IV19TVEFSVF9ERUxBWQkJMTAwCS8qIG1zZWNzICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBydGw4MzY2X3NtaV9jbGtfZGVsYXkoc3RydWN0IHJ0bDgzNjZfc21pICpzbWkpCit7CisJbmRlbGF5KHNtaS0+Y2xrX2RlbGF5KTsKK30KKworc3RhdGljIHZvaWQgcnRsODM2Nl9zbWlfc3RhcnQoc3RydWN0IHJ0bDgzNjZfc21pICpzbWkpCit7CisJdW5zaWduZWQgaW50IHNkYSA9IHNtaS0+Z3Bpb19zZGE7CisJdW5zaWduZWQgaW50IHNjayA9IHNtaS0+Z3Bpb19zY2s7CisKKwkvKgorCSAqIFNldCBHUElPIHBpbnMgdG8gb3V0cHV0IG1vZGUsIHdpdGggaW5pdGlhbCBzdGF0ZToKKwkgKiBTQ0sgPSAwLCBTREEgPSAxCisJICovCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHNjaywgMCk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHNkYSwgMSk7CisJcnRsODM2Nl9zbWlfY2xrX2RlbGF5KHNtaSk7CisKKwkvKiBDTEsgMTogMCAtPiAxLCAxIC0+IDAgKi8KKwlncGlvX3NldF92YWx1ZShzY2ssIDEpOworCXJ0bDgzNjZfc21pX2Nsa19kZWxheShzbWkpOworCWdwaW9fc2V0X3ZhbHVlKHNjaywgMCk7CisJcnRsODM2Nl9zbWlfY2xrX2RlbGF5KHNtaSk7CisKKwkvKiBDTEsgMjogKi8KKwlncGlvX3NldF92YWx1ZShzY2ssIDEpOworCXJ0bDgzNjZfc21pX2Nsa19kZWxheShzbWkpOworCWdwaW9fc2V0X3ZhbHVlKHNkYSwgMCk7CisJcnRsODM2Nl9zbWlfY2xrX2RlbGF5KHNtaSk7CisJZ3Bpb19zZXRfdmFsdWUoc2NrLCAwKTsKKwlydGw4MzY2X3NtaV9jbGtfZGVsYXkoc21pKTsKKwlncGlvX3NldF92YWx1ZShzZGEsIDEpOworfQorCitzdGF0aWMgdm9pZCBydGw4MzY2X3NtaV9zdG9wKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pKQoreworCXVuc2lnbmVkIGludCBzZGEgPSBzbWktPmdwaW9fc2RhOworCXVuc2lnbmVkIGludCBzY2sgPSBzbWktPmdwaW9fc2NrOworCisJcnRsODM2Nl9zbWlfY2xrX2RlbGF5KHNtaSk7CisJZ3Bpb19zZXRfdmFsdWUoc2RhLCAwKTsKKwlncGlvX3NldF92YWx1ZShzY2ssIDEpOworCXJ0bDgzNjZfc21pX2Nsa19kZWxheShzbWkpOworCWdwaW9fc2V0X3ZhbHVlKHNkYSwgMSk7CisJcnRsODM2Nl9zbWlfY2xrX2RlbGF5KHNtaSk7CisJZ3Bpb19zZXRfdmFsdWUoc2NrLCAxKTsKKwlydGw4MzY2X3NtaV9jbGtfZGVsYXkoc21pKTsKKwlncGlvX3NldF92YWx1ZShzY2ssIDApOworCXJ0bDgzNjZfc21pX2Nsa19kZWxheShzbWkpOworCWdwaW9fc2V0X3ZhbHVlKHNjaywgMSk7CisKKwkvKiBhZGQgYSBjbGljayAqLworCXJ0bDgzNjZfc21pX2Nsa19kZWxheShzbWkpOworCWdwaW9fc2V0X3ZhbHVlKHNjaywgMCk7CisJcnRsODM2Nl9zbWlfY2xrX2RlbGF5KHNtaSk7CisJZ3Bpb19zZXRfdmFsdWUoc2NrLCAxKTsKKworCS8qIHNldCBHUElPIHBpbnMgdG8gaW5wdXQgbW9kZSAqLworCWdwaW9fZGlyZWN0aW9uX2lucHV0KHNkYSk7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoc2NrKTsKK30KKworc3RhdGljIHZvaWQgcnRsODM2Nl9zbWlfd3JpdGVfYml0cyhzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwgdTMyIGRhdGEsIHUzMiBsZW4pCit7CisJdW5zaWduZWQgaW50IHNkYSA9IHNtaS0+Z3Bpb19zZGE7CisJdW5zaWduZWQgaW50IHNjayA9IHNtaS0+Z3Bpb19zY2s7CisKKwlmb3IgKDsgbGVuID4gMDsgbGVuLS0pIHsKKwkJcnRsODM2Nl9zbWlfY2xrX2RlbGF5KHNtaSk7CisKKwkJLyogcHJlcGFyZSBkYXRhICovCisJCWdwaW9fc2V0X3ZhbHVlKHNkYSwgISEoZGF0YSAmICggMSA8PCAobGVuIC0gMSkpKSk7CisJCXJ0bDgzNjZfc21pX2Nsa19kZWxheShzbWkpOworCisJCS8qIGNsb2NraW5nICovCisJCWdwaW9fc2V0X3ZhbHVlKHNjaywgMSk7CisJCXJ0bDgzNjZfc21pX2Nsa19kZWxheShzbWkpOworCQlncGlvX3NldF92YWx1ZShzY2ssIDApOworCX0KK30KKworc3RhdGljIHZvaWQgcnRsODM2Nl9zbWlfcmVhZF9iaXRzKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLCB1MzIgbGVuLCB1MzIgKmRhdGEpCit7CisJdW5zaWduZWQgaW50IHNkYSA9IHNtaS0+Z3Bpb19zZGE7CisJdW5zaWduZWQgaW50IHNjayA9IHNtaS0+Z3Bpb19zY2s7CisKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChzZGEpOworCisJZm9yICgqZGF0YSA9IDA7IGxlbiA+IDA7IGxlbi0tKSB7CisJCXUzMiB1OworCisJCXJ0bDgzNjZfc21pX2Nsa19kZWxheShzbWkpOworCisJCS8qIGNsb2NraW5nICovCisJCWdwaW9fc2V0X3ZhbHVlKHNjaywgMSk7CisJCXJ0bDgzNjZfc21pX2Nsa19kZWxheShzbWkpOworCQl1ID0gISFncGlvX2dldF92YWx1ZShzZGEpOworCQlncGlvX3NldF92YWx1ZShzY2ssIDApOworCisJCSpkYXRhIHw9ICh1IDw8IChsZW4gLSAxKSk7CisJfQorCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHNkYSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2Nl9zbWlfd2FpdF9mb3JfYWNrKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pKQoreworCWludCByZXRyeV9jbnQ7CisKKwlyZXRyeV9jbnQgPSAwOworCWRvIHsKKwkJdTMyIGFjazsKKworCQlydGw4MzY2X3NtaV9yZWFkX2JpdHMoc21pLCAxLCAmYWNrKTsKKwkJaWYgKGFjayA9PSAwKQorCQkJYnJlYWs7CisKKwkJaWYgKCsrcmV0cnlfY250ID4gUlRMODM2Nl9TTUlfQUNLX1JFVFJZX0NPVU5UKSB7CisJCQlkZXZfZXJyKHNtaS0+cGFyZW50LCAiQUNLIHRpbWVvdXRcbiIpOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCX0KKwl9IHdoaWxlICgxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjZfc21pX3dyaXRlX2J5dGUoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIHU4IGRhdGEpCit7CisJcnRsODM2Nl9zbWlfd3JpdGVfYml0cyhzbWksIGRhdGEsIDgpOworCXJldHVybiBydGw4MzY2X3NtaV93YWl0X2Zvcl9hY2soc21pKTsKK30KKworc3RhdGljIGludCBydGw4MzY2X3NtaV93cml0ZV9ieXRlX25vYWNrKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLCB1OCBkYXRhKQoreworCXJ0bDgzNjZfc21pX3dyaXRlX2JpdHMoc21pLCBkYXRhLCA4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MzY2X3NtaV9yZWFkX2J5dGUwKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLCB1OCAqZGF0YSkKK3sKKwl1MzIgdDsKKworCS8qIHJlYWQgZGF0YSAqLworCXJ0bDgzNjZfc21pX3JlYWRfYml0cyhzbWksIDgsICZ0KTsKKwkqZGF0YSA9ICh0ICYgMHhmZik7CisKKwkvKiBzZW5kIGFuIEFDSyAqLworCXJ0bDgzNjZfc21pX3dyaXRlX2JpdHMoc21pLCAweDAwLCAxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjZfc21pX3JlYWRfYnl0ZTEoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIHU4ICpkYXRhKQoreworCXUzMiB0OworCisJLyogcmVhZCBkYXRhICovCisJcnRsODM2Nl9zbWlfcmVhZF9iaXRzKHNtaSwgOCwgJnQpOworCSpkYXRhID0gKHQgJiAweGZmKTsKKworCS8qIHNlbmQgYW4gQUNLICovCisJcnRsODM2Nl9zbWlfd3JpdGVfYml0cyhzbWksIDB4MDEsIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19ydGw4MzY2X3NtaV9yZWFkX3JlZyhzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwgdTMyIGFkZHIsIHUzMiAqZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IGxvID0gMDsKKwl1OCBoaSA9IDA7CisJaW50IHJldDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzbWktPmxvY2ssIGZsYWdzKTsKKworCXJ0bDgzNjZfc21pX3N0YXJ0KHNtaSk7CisKKwkvKiBzZW5kIFJFQUQgY29tbWFuZCAqLworCXJldCA9IHJ0bDgzNjZfc21pX3dyaXRlX2J5dGUoc21pLCBzbWktPmNtZF9yZWFkKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCS8qIHNldCBBRERSWzc6MF0gKi8KKwlyZXQgPSBydGw4MzY2X3NtaV93cml0ZV9ieXRlKHNtaSwgYWRkciAmIDB4ZmYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJLyogc2V0IEFERFJbMTU6OF0gKi8KKwlyZXQgPSBydGw4MzY2X3NtaV93cml0ZV9ieXRlKHNtaSwgYWRkciA+PiA4KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCS8qIHJlYWQgREFUQVs3OjBdICovCisJcnRsODM2Nl9zbWlfcmVhZF9ieXRlMChzbWksICZsbyk7CisJLyogcmVhZCBEQVRBWzE1OjhdICovCisJcnRsODM2Nl9zbWlfcmVhZF9ieXRlMShzbWksICZoaSk7CisKKwkqZGF0YSA9ICgodTMyKSBsbykgfCAoKCh1MzIpIGhpKSA8PCA4KTsKKworCXJldCA9IDA7CisKKyBvdXQ6CisJcnRsODM2Nl9zbWlfc3RvcChzbWkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtaS0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKy8qIFJlYWQvd3JpdGUgdmlhIG1kaW9idXMgKi8KKyNkZWZpbmUgTURDX01ESU9fQ1RSTDBfUkVHCQkzMQorI2RlZmluZSBNRENfTURJT19TVEFSVF9SRUcJCTI5CisjZGVmaW5lIE1EQ19NRElPX0NUUkwxX1JFRwkJMjEKKyNkZWZpbmUgTURDX01ESU9fQUREUkVTU19SRUcJCTIzCisjZGVmaW5lIE1EQ19NRElPX0RBVEFfV1JJVEVfUkVHCQkyNAorI2RlZmluZSBNRENfTURJT19EQVRBX1JFQURfUkVHCQkyNQorCisjZGVmaW5lIE1EQ19NRElPX1NUQVJUX09QCQkweEZGRkYKKyNkZWZpbmUgTURDX01ESU9fQUREUl9PUAkJMHgwMDBFCisjZGVmaW5lIE1EQ19NRElPX1JFQURfT1AJCTB4MDAwMQorI2RlZmluZSBNRENfTURJT19XUklURV9PUAkJMHgwMDAzCisjZGVmaW5lIE1EQ19SRUFMVEVLX1BIWV9BRERSCQkweDAKKworaW50IF9fcnRsODM2Nl9tZGlvX3JlYWRfcmVnKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLCB1MzIgYWRkciwgdTMyICpkYXRhKQoreworCXUzMiBwaHlfaWQgPSBNRENfUkVBTFRFS19QSFlfQUREUjsKKwlzdHJ1Y3QgbWlpX2J1cyAqbWJ1cyA9IHNtaS0+ZXh0X21idXM7CisKKwlCVUdfT04oaW5faW50ZXJydXB0KCkpOworCisJbXV0ZXhfbG9jaygmbWJ1cy0+bWRpb19sb2NrKTsKKwkvKiBXcml0ZSBTdGFydCBjb21tYW5kIHRvIHJlZ2lzdGVyIDI5ICovCisJbWJ1cy0+d3JpdGUobWJ1cywgcGh5X2lkLCBNRENfTURJT19TVEFSVF9SRUcsIE1EQ19NRElPX1NUQVJUX09QKTsKKworCS8qIFdyaXRlIGFkZHJlc3MgY29udHJvbCBjb2RlIHRvIHJlZ2lzdGVyIDMxICovCisJbWJ1cy0+d3JpdGUobWJ1cywgcGh5X2lkLCBNRENfTURJT19DVFJMMF9SRUcsIE1EQ19NRElPX0FERFJfT1ApOworCisJLyogV3JpdGUgU3RhcnQgY29tbWFuZCB0byByZWdpc3RlciAyOSAqLworCW1idXMtPndyaXRlKG1idXMsIHBoeV9pZCwgTURDX01ESU9fU1RBUlRfUkVHLCBNRENfTURJT19TVEFSVF9PUCk7CisKKwkvKiBXcml0ZSBhZGRyZXNzIHRvIHJlZ2lzdGVyIDIzICovCisJbWJ1cy0+d3JpdGUobWJ1cywgcGh5X2lkLCBNRENfTURJT19BRERSRVNTX1JFRywgYWRkcik7CisKKwkvKiBXcml0ZSBTdGFydCBjb21tYW5kIHRvIHJlZ2lzdGVyIDI5ICovCisJbWJ1cy0+d3JpdGUobWJ1cywgcGh5X2lkLCBNRENfTURJT19TVEFSVF9SRUcsIE1EQ19NRElPX1NUQVJUX09QKTsKKworCS8qIFdyaXRlIHJlYWQgY29udHJvbCBjb2RlIHRvIHJlZ2lzdGVyIDIxICovCisJbWJ1cy0+d3JpdGUobWJ1cywgcGh5X2lkLCBNRENfTURJT19DVFJMMV9SRUcsIE1EQ19NRElPX1JFQURfT1ApOworCisJLyogV3JpdGUgU3RhcnQgY29tbWFuZCB0byByZWdpc3RlciAyOSAqLworCW1idXMtPndyaXRlKHNtaS0+ZXh0X21idXMsIHBoeV9pZCwgTURDX01ESU9fU1RBUlRfUkVHLCBNRENfTURJT19TVEFSVF9PUCk7CisKKwkvKiBSZWFkIGRhdGEgZnJvbSByZWdpc3RlciAyNSAqLworCSpkYXRhID0gbWJ1cy0+cmVhZChtYnVzLCBwaHlfaWQsIE1EQ19NRElPX0RBVEFfUkVBRF9SRUcpOworCisJbXV0ZXhfdW5sb2NrKCZtYnVzLT5tZGlvX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19ydGw4MzY2X21kaW9fd3JpdGVfcmVnKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLCB1MzIgYWRkciwgdTMyIGRhdGEpCit7CisJdTMyIHBoeV9pZCA9IE1EQ19SRUFMVEVLX1BIWV9BRERSOworCXN0cnVjdCBtaWlfYnVzICptYnVzID0gc21pLT5leHRfbWJ1czsKKworCUJVR19PTihpbl9pbnRlcnJ1cHQoKSk7CisKKwltdXRleF9sb2NrKCZtYnVzLT5tZGlvX2xvY2spOworCisJLyogV3JpdGUgU3RhcnQgY29tbWFuZCB0byByZWdpc3RlciAyOSAqLworCW1idXMtPndyaXRlKG1idXMsIHBoeV9pZCwgTURDX01ESU9fU1RBUlRfUkVHLCBNRENfTURJT19TVEFSVF9PUCk7CisKKwkvKiBXcml0ZSBhZGRyZXNzIGNvbnRyb2wgY29kZSB0byByZWdpc3RlciAzMSAqLworCW1idXMtPndyaXRlKG1idXMsIHBoeV9pZCwgTURDX01ESU9fQ1RSTDBfUkVHLCBNRENfTURJT19BRERSX09QKTsKKworCS8qIFdyaXRlIFN0YXJ0IGNvbW1hbmQgdG8gcmVnaXN0ZXIgMjkgKi8KKwltYnVzLT53cml0ZShtYnVzLCBwaHlfaWQsIE1EQ19NRElPX1NUQVJUX1JFRywgTURDX01ESU9fU1RBUlRfT1ApOworCisJLyogV3JpdGUgYWRkcmVzcyB0byByZWdpc3RlciAyMyAqLworCW1idXMtPndyaXRlKG1idXMsIHBoeV9pZCwgTURDX01ESU9fQUREUkVTU19SRUcsIGFkZHIpOworCisJLyogV3JpdGUgU3RhcnQgY29tbWFuZCB0byByZWdpc3RlciAyOSAqLworCW1idXMtPndyaXRlKG1idXMsIHBoeV9pZCwgTURDX01ESU9fU1RBUlRfUkVHLCBNRENfTURJT19TVEFSVF9PUCk7CisKKwkvKiBXcml0ZSBkYXRhIHRvIHJlZ2lzdGVyIDI0ICovCisJbWJ1cy0+d3JpdGUobWJ1cywgcGh5X2lkLCBNRENfTURJT19EQVRBX1dSSVRFX1JFRywgZGF0YSk7CisKKwkvKiBXcml0ZSBTdGFydCBjb21tYW5kIHRvIHJlZ2lzdGVyIDI5ICovCisJbWJ1cy0+d3JpdGUobWJ1cywgcGh5X2lkLCBNRENfTURJT19TVEFSVF9SRUcsIE1EQ19NRElPX1NUQVJUX09QKTsKKworCS8qIFdyaXRlIGRhdGEgY29udHJvbCBjb2RlIHRvIHJlZ2lzdGVyIDIxICovCisJbWJ1cy0+d3JpdGUobWJ1cywgcGh5X2lkLCBNRENfTURJT19DVFJMMV9SRUcsIE1EQ19NRElPX1dSSVRFX09QKTsKKworCW11dGV4X3VubG9jaygmbWJ1cy0+bWRpb19sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHJ0bDgzNjZfc21pX3JlYWRfcmVnKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLCB1MzIgYWRkciwgdTMyICpkYXRhKQoreworCWlmIChzbWktPmV4dF9tYnVzKQorCQlyZXR1cm4gX19ydGw4MzY2X21kaW9fcmVhZF9yZWcoc21pLCBhZGRyLCBkYXRhKTsKKwllbHNlCisJCXJldHVybiBfX3J0bDgzNjZfc21pX3JlYWRfcmVnKHNtaSwgYWRkciwgZGF0YSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChydGw4MzY2X3NtaV9yZWFkX3JlZyk7CisKK3N0YXRpYyBpbnQgX19ydGw4MzY2X3NtaV93cml0ZV9yZWcoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksCisJCQkJICAgdTMyIGFkZHIsIHUzMiBkYXRhLCBib29sIGFjaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc21pLT5sb2NrLCBmbGFncyk7CisKKwlydGw4MzY2X3NtaV9zdGFydChzbWkpOworCisJLyogc2VuZCBXUklURSBjb21tYW5kICovCisJcmV0ID0gcnRsODM2Nl9zbWlfd3JpdGVfYnl0ZShzbWksIHNtaS0+Y21kX3dyaXRlKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCS8qIHNldCBBRERSWzc6MF0gKi8KKwlyZXQgPSBydGw4MzY2X3NtaV93cml0ZV9ieXRlKHNtaSwgYWRkciAmIDB4ZmYpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJLyogc2V0IEFERFJbMTU6OF0gKi8KKwlyZXQgPSBydGw4MzY2X3NtaV93cml0ZV9ieXRlKHNtaSwgYWRkciA+PiA4KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCS8qIHdyaXRlIERBVEFbNzowXSAqLworCXJldCA9IHJ0bDgzNjZfc21pX3dyaXRlX2J5dGUoc21pLCBkYXRhICYgMHhmZik7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwkvKiB3cml0ZSBEQVRBWzE1OjhdICovCisJaWYgKGFjaykKKwkJcmV0ID0gcnRsODM2Nl9zbWlfd3JpdGVfYnl0ZShzbWksIGRhdGEgPj4gOCk7CisJZWxzZQorCQlyZXQgPSBydGw4MzY2X3NtaV93cml0ZV9ieXRlX25vYWNrKHNtaSwgZGF0YSA+PiA4KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXJldCA9IDA7CisKKyBvdXQ6CisJcnRsODM2Nl9zbWlfc3RvcChzbWkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtaS0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IHJ0bDgzNjZfc21pX3dyaXRlX3JlZyhzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwgdTMyIGFkZHIsIHUzMiBkYXRhKQoreworCWlmIChzbWktPmV4dF9tYnVzKQorCQlyZXR1cm4gX19ydGw4MzY2X21kaW9fd3JpdGVfcmVnKHNtaSwgYWRkciwgZGF0YSk7CisJZWxzZQorCQlyZXR1cm4gX19ydGw4MzY2X3NtaV93cml0ZV9yZWcoc21pLCBhZGRyLCBkYXRhLCB0cnVlKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJ0bDgzNjZfc21pX3dyaXRlX3JlZyk7CisKK2ludCBydGw4MzY2X3NtaV93cml0ZV9yZWdfbm9hY2soc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIHUzMiBhZGRyLCB1MzIgZGF0YSkKK3sKKwlyZXR1cm4gX19ydGw4MzY2X3NtaV93cml0ZV9yZWcoc21pLCBhZGRyLCBkYXRhLCBmYWxzZSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChydGw4MzY2X3NtaV93cml0ZV9yZWdfbm9hY2spOworCitpbnQgcnRsODM2Nl9zbWlfcm13cihzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwgdTMyIGFkZHIsIHUzMiBtYXNrLCB1MzIgZGF0YSkKK3sKKwl1MzIgdDsKKwlpbnQgZXJyOworCisJZXJyID0gcnRsODM2Nl9zbWlfcmVhZF9yZWcoc21pLCBhZGRyLCAmdCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHJ0bDgzNjZfc21pX3dyaXRlX3JlZyhzbWksIGFkZHIsICh0ICYgfm1hc2spIHwgZGF0YSk7CisJcmV0dXJuIGVycjsKKworfQorRVhQT1JUX1NZTUJPTF9HUEwocnRsODM2Nl9zbWlfcm13cik7CisKK3N0YXRpYyBpbnQgcnRsODM2Nl9yZXNldChzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSkKK3sKKwlpZiAoc21pLT5od19yZXNldCkgeworCQlzbWktPmh3X3Jlc2V0KHNtaSwgdHJ1ZSk7CisJCW1zbGVlcChSVEw4MzY2X1NNSV9IV19TVE9QX0RFTEFZKTsKKwkJc21pLT5od19yZXNldChzbWksIGZhbHNlKTsKKwkJbXNsZWVwKFJUTDgzNjZfU01JX0hXX1NUQVJUX0RFTEFZKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIHNtaS0+b3BzLT5yZXNldF9jaGlwKHNtaSk7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2Nl9tY19pc191c2VkKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLCBpbnQgbWNfaW5kZXgsIGludCAqdXNlZCkKK3sKKwlpbnQgZXJyOworCWludCBpOworCisJKnVzZWQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBzbWktPm51bV9wb3J0czsgaSsrKSB7CisJCWludCBpbmRleCA9IDA7CisKKwkJZXJyID0gc21pLT5vcHMtPmdldF9tY19pbmRleChzbWksIGksICZpbmRleCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCWlmIChtY19pbmRleCA9PSBpbmRleCkgeworCQkJKnVzZWQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MzY2X3NldF92bGFuKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLCBpbnQgdmlkLCB1MzIgbWVtYmVyLAorCQkJICAgIHUzMiB1bnRhZywgdTMyIGZpZCkKK3sKKwlzdHJ1Y3QgcnRsODM2Nl92bGFuXzRrIHZsYW40azsKKwlpbnQgZXJyOworCWludCBpOworCisJLyogVXBkYXRlIHRoZSA0SyB0YWJsZSAqLworCWVyciA9IHNtaS0+b3BzLT5nZXRfdmxhbl80ayhzbWksIHZpZCwgJnZsYW40ayk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXZsYW40ay5tZW1iZXIgPSBtZW1iZXI7CisJdmxhbjRrLnVudGFnID0gdW50YWc7CisJdmxhbjRrLmZpZCA9IGZpZDsKKwllcnIgPSBzbWktPm9wcy0+c2V0X3ZsYW5fNGsoc21pLCAmdmxhbjRrKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogVHJ5IHRvIGZpbmQgYW4gZXhpc3RpbmcgTUMgZW50cnkgZm9yIHRoaXMgVklEICovCisJZm9yIChpID0gMDsgaSA8IHNtaS0+bnVtX3ZsYW5fbWM7IGkrKykgeworCQlzdHJ1Y3QgcnRsODM2Nl92bGFuX21jIHZsYW5tYzsKKworCQllcnIgPSBzbWktPm9wcy0+Z2V0X3ZsYW5fbWMoc21pLCBpLCAmdmxhbm1jKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJaWYgKHZpZCA9PSB2bGFubWMudmlkKSB7CisJCQkvKiB1cGRhdGUgdGhlIE1DIGVudHJ5ICovCisJCQl2bGFubWMubWVtYmVyID0gbWVtYmVyOworCQkJdmxhbm1jLnVudGFnID0gdW50YWc7CisJCQl2bGFubWMuZmlkID0gZmlkOworCisJCQllcnIgPSBzbWktPm9wcy0+c2V0X3ZsYW5fbWMoc21pLCBpLCAmdmxhbm1jKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBydGw4MzY2X2dldF9wdmlkKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLCBpbnQgcG9ydCwgaW50ICp2YWwpCit7CisJc3RydWN0IHJ0bDgzNjZfdmxhbl9tYyB2bGFubWM7CisJaW50IGVycjsKKwlpbnQgaW5kZXg7CisKKwllcnIgPSBzbWktPm9wcy0+Z2V0X21jX2luZGV4KHNtaSwgcG9ydCwgJmluZGV4KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gc21pLT5vcHMtPmdldF92bGFuX21jKHNtaSwgaW5kZXgsICZ2bGFubWMpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkqdmFsID0gdmxhbm1jLnZpZDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MzY2X3NldF9wdmlkKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLCB1bnNpZ25lZCBwb3J0LAorCQkJICAgIHVuc2lnbmVkIHZpZCkKK3sKKwlzdHJ1Y3QgcnRsODM2Nl92bGFuX21jIHZsYW5tYzsKKwlzdHJ1Y3QgcnRsODM2Nl92bGFuXzRrIHZsYW40azsKKwlpbnQgZXJyOworCWludCBpOworCisJLyogVHJ5IHRvIGZpbmQgYW4gZXhpc3RpbmcgTUMgZW50cnkgZm9yIHRoaXMgVklEICovCisJZm9yIChpID0gMDsgaSA8IHNtaS0+bnVtX3ZsYW5fbWM7IGkrKykgeworCQllcnIgPSBzbWktPm9wcy0+Z2V0X3ZsYW5fbWMoc21pLCBpLCAmdmxhbm1jKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJaWYgKHZpZCA9PSB2bGFubWMudmlkKSB7CisJCQllcnIgPSBzbWktPm9wcy0+c2V0X3ZsYW5fbWMoc21pLCBpLCAmdmxhbm1jKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKworCQkJZXJyID0gc21pLT5vcHMtPnNldF9tY19pbmRleChzbWksIHBvcnQsIGkpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCS8qIFdlIGhhdmUgbm8gTUMgZW50cnkgZm9yIHRoaXMgVklELCB0cnkgdG8gZmluZCBhbiBlbXB0eSBvbmUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc21pLT5udW1fdmxhbl9tYzsgaSsrKSB7CisJCWVyciA9IHNtaS0+b3BzLT5nZXRfdmxhbl9tYyhzbWksIGksICZ2bGFubWMpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQlpZiAodmxhbm1jLnZpZCA9PSAwICYmIHZsYW5tYy5tZW1iZXIgPT0gMCkgeworCQkJLyogVXBkYXRlIHRoZSBlbnRyeSBmcm9tIHRoZSA0SyB0YWJsZSAqLworCQkJZXJyID0gc21pLT5vcHMtPmdldF92bGFuXzRrKHNtaSwgdmlkLCAmdmxhbjRrKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKworCQkJdmxhbm1jLnZpZCA9IHZpZDsKKwkJCXZsYW5tYy5tZW1iZXIgPSB2bGFuNGsubWVtYmVyOworCQkJdmxhbm1jLnVudGFnID0gdmxhbjRrLnVudGFnOworCQkJdmxhbm1jLmZpZCA9IHZsYW40ay5maWQ7CisJCQllcnIgPSBzbWktPm9wcy0+c2V0X3ZsYW5fbWMoc21pLCBpLCAmdmxhbm1jKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKworCQkJZXJyID0gc21pLT5vcHMtPnNldF9tY19pbmRleChzbWksIHBvcnQsIGkpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCS8qIE1DIHRhYmxlIGlzIGZ1bGwsIHRyeSB0byBmaW5kIGFuIHVudXNlZCBlbnRyeSBhbmQgcmVwbGFjZSBpdCAqLworCWZvciAoaSA9IDA7IGkgPCBzbWktPm51bV92bGFuX21jOyBpKyspIHsKKwkJaW50IHVzZWQ7CisKKwkJZXJyID0gcnRsODM2Nl9tY19pc191c2VkKHNtaSwgaSwgJnVzZWQpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQlpZiAoIXVzZWQpIHsKKwkJCS8qIFVwZGF0ZSB0aGUgZW50cnkgZnJvbSB0aGUgNEsgdGFibGUgKi8KKwkJCWVyciA9IHNtaS0+b3BzLT5nZXRfdmxhbl80ayhzbWksIHZpZCwgJnZsYW40ayk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisKKwkJCXZsYW5tYy52aWQgPSB2aWQ7CisJCQl2bGFubWMubWVtYmVyID0gdmxhbjRrLm1lbWJlcjsKKwkJCXZsYW5tYy51bnRhZyA9IHZsYW40ay51bnRhZzsKKwkJCXZsYW5tYy5maWQgPSB2bGFuNGsuZmlkOworCQkJZXJyID0gc21pLT5vcHMtPnNldF92bGFuX21jKHNtaSwgaSwgJnZsYW5tYyk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisKKwkJCWVyciA9IHNtaS0+b3BzLT5zZXRfbWNfaW5kZXgoc21pLCBwb3J0LCBpKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwlkZXZfZXJyKHNtaS0+cGFyZW50LAorCQkiYWxsIFZMQU4gbWVtYmVyIGNvbmZpZ3VyYXRpb25zIGFyZSBpbiB1c2VcbiIpOworCisJcmV0dXJuIC1FTk9TUEM7Cit9CisKK2ludCBydGw4MzY2X2VuYWJsZV92bGFuKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLCBpbnQgZW5hYmxlKQoreworCWludCBlcnI7CisKKwllcnIgPSBzbWktPm9wcy0+ZW5hYmxlX3ZsYW4oc21pLCBlbmFibGUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlzbWktPnZsYW5fZW5hYmxlZCA9IGVuYWJsZTsKKworCWlmICghZW5hYmxlKSB7CisJCXNtaS0+dmxhbjRrX2VuYWJsZWQgPSAwOworCQllcnIgPSBzbWktPm9wcy0+ZW5hYmxlX3ZsYW40ayhzbWksIGVuYWJsZSk7CisJfQorCisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJ0bDgzNjZfZW5hYmxlX3ZsYW4pOworCitzdGF0aWMgaW50IHJ0bDgzNjZfZW5hYmxlX3ZsYW40ayhzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwgaW50IGVuYWJsZSkKK3sKKwlpbnQgZXJyOworCisJaWYgKGVuYWJsZSkgeworCQllcnIgPSBzbWktPm9wcy0+ZW5hYmxlX3ZsYW4oc21pLCBlbmFibGUpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQlzbWktPnZsYW5fZW5hYmxlZCA9IGVuYWJsZTsKKwl9CisKKwllcnIgPSBzbWktPm9wcy0+ZW5hYmxlX3ZsYW40ayhzbWksIGVuYWJsZSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXNtaS0+dmxhbjRrX2VuYWJsZWQgPSBlbmFibGU7CisJcmV0dXJuIDA7Cit9CisKK2ludCBydGw4MzY2X2VuYWJsZV9hbGxfcG9ydHMoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIGludCBlbmFibGUpCit7CisJaW50IHBvcnQ7CisJaW50IGVycjsKKworCWZvciAocG9ydCA9IDA7IHBvcnQgPCBzbWktPm51bV9wb3J0czsgcG9ydCsrKSB7CisJCWVyciA9IHNtaS0+b3BzLT5lbmFibGVfcG9ydChzbWksIHBvcnQsIGVuYWJsZSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwocnRsODM2Nl9lbmFibGVfYWxsX3BvcnRzKTsKKworaW50IHJ0bDgzNjZfcmVzZXRfdmxhbihzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSkKK3sKKwlzdHJ1Y3QgcnRsODM2Nl92bGFuX21jIHZsYW5tYzsKKwlpbnQgZXJyOworCWludCBpOworCisJcnRsODM2Nl9lbmFibGVfdmxhbihzbWksIDApOworCXJ0bDgzNjZfZW5hYmxlX3ZsYW40ayhzbWksIDApOworCisJLyogY2xlYXIgVkxBTiBtZW1iZXIgY29uZmlndXJhdGlvbnMgKi8KKwl2bGFubWMudmlkID0gMDsKKwl2bGFubWMucHJpb3JpdHkgPSAwOworCXZsYW5tYy5tZW1iZXIgPSAwOworCXZsYW5tYy51bnRhZyA9IDA7CisJdmxhbm1jLmZpZCA9IDA7CisJZm9yIChpID0gMDsgaSA8IHNtaS0+bnVtX3ZsYW5fbWM7IGkrKykgeworCQllcnIgPSBzbWktPm9wcy0+c2V0X3ZsYW5fbWMoc21pLCBpLCAmdmxhbm1jKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChydGw4MzY2X3Jlc2V0X3ZsYW4pOworCitzdGF0aWMgaW50IHJ0bDgzNjZfaW5pdF92bGFuKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pKQoreworCWludCBwb3J0OworCWludCBlcnI7CisKKwllcnIgPSBydGw4MzY2X3Jlc2V0X3ZsYW4oc21pKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZm9yIChwb3J0ID0gMDsgcG9ydCA8IHNtaS0+bnVtX3BvcnRzOyBwb3J0KyspIHsKKwkJdTMyIG1hc2s7CisKKwkJaWYgKHBvcnQgPT0gc21pLT5jcHVfcG9ydCkKKwkJCW1hc2sgPSAoMSA8PCBzbWktPm51bV9wb3J0cykgLSAxOworCQllbHNlCisJCQltYXNrID0gKDEgPDwgcG9ydCkgfCAoMSA8PCBzbWktPmNwdV9wb3J0KTsKKworCQllcnIgPSBydGw4MzY2X3NldF92bGFuKHNtaSwgKHBvcnQgKyAxKSwgbWFzaywgbWFzaywgMCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCWVyciA9IHJ0bDgzNjZfc2V0X3B2aWQoc21pLCBwb3J0LCAocG9ydCArIDEpKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIHJ0bDgzNjZfZW5hYmxlX3ZsYW4oc21pLCAxKTsKK30KKworI2lmZGVmIENPTkZJR19SVEw4MzY2X1NNSV9ERUJVR19GUworaW50IHJ0bDgzNjZfZGVidWdmc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGlub2RlLT5pX3ByaXZhdGU7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChydGw4MzY2X2RlYnVnZnNfb3Blbik7CisKK3N0YXRpYyBzc2l6ZV90IHJ0bDgzNjZfcmVhZF9kZWJ1Z2ZzX3ZsYW5fbWMoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCSAgICAgIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHJ0bDgzNjZfc21pICpzbWkgPSAoc3RydWN0IHJ0bDgzNjZfc21pICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCWludCBpLCBsZW4gPSAwOworCWNoYXIgKmJ1ZiA9IHNtaS0+YnVmOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKHNtaS0+YnVmKSAtIGxlbiwKKwkJCSIlMnMgJTZzICU0cyAlNnMgJTZzICUzc1xuIiwKKwkJCSJpZCIsICJ2aWQiLCJwcmlvIiwgIm1lbWJlciIsICJ1bnRhZyIsICJmaWQiKTsKKworCWZvciAoaSA9IDA7IGkgPCBzbWktPm51bV92bGFuX21jOyArK2kpIHsKKwkJc3RydWN0IHJ0bDgzNjZfdmxhbl9tYyB2bGFubWM7CisKKwkJc21pLT5vcHMtPmdldF92bGFuX21jKHNtaSwgaSwgJnZsYW5tYyk7CisKKwkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKHNtaS0+YnVmKSAtIGxlbiwKKwkJCQkiJTJkICU2ZCAlNGQgMHglMDR4IDB4JTA0eCAlM2RcbiIsCisJCQkJaSwgdmxhbm1jLnZpZCwgdmxhbm1jLnByaW9yaXR5LAorCQkJCXZsYW5tYy5tZW1iZXIsIHZsYW5tYy51bnRhZywgdmxhbm1jLmZpZCk7CisJfQorCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOworfQorCisjZGVmaW5lIFJUTDgzNjZfVkxBTjRLX1BBR0VfU0laRQk2NAorI2RlZmluZSBSVEw4MzY2X1ZMQU40S19OVU1fUEFHRVMJKDQwOTYgLyBSVEw4MzY2X1ZMQU40S19QQUdFX1NJWkUpCisKK3N0YXRpYyBzc2l6ZV90IHJ0bDgzNjZfcmVhZF9kZWJ1Z2ZzX3ZsYW5fNGsoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCSAgICBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSA9IChzdHJ1Y3QgcnRsODM2Nl9zbWkgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IGksIGxlbiA9IDA7CisJaW50IG9mZnNldDsKKwljaGFyICpidWYgPSBzbWktPmJ1ZjsKKworCWlmIChzbWktPmRiZ192bGFuXzRrX3BhZ2UgPj0gUlRMODM2Nl9WTEFONEtfTlVNX1BBR0VTKSB7CisJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihzbWktPmJ1ZikgLSBsZW4sCisJCQkJImludmFsaWQgcGFnZTogJXVcbiIsIHNtaS0+ZGJnX3ZsYW5fNGtfcGFnZSk7CisJCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKKwl9CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2Yoc21pLT5idWYpIC0gbGVuLAorCQkJIiU0cyAlNnMgJTZzICUzc1xuIiwKKwkJCSJ2aWQiLCAibWVtYmVyIiwgInVudGFnIiwgImZpZCIpOworCisJb2Zmc2V0ID0gUlRMODM2Nl9WTEFONEtfUEFHRV9TSVpFICogc21pLT5kYmdfdmxhbl80a19wYWdlOworCWZvciAoaSA9IDA7IGkgPCBSVEw4MzY2X1ZMQU40S19QQUdFX1NJWkU7IGkrKykgeworCQlzdHJ1Y3QgcnRsODM2Nl92bGFuXzRrIHZsYW40azsKKworCQlzbWktPm9wcy0+Z2V0X3ZsYW5fNGsoc21pLCBvZmZzZXQgKyBpLCAmdmxhbjRrKTsKKworCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2Yoc21pLT5idWYpIC0gbGVuLAorCQkJCSIlNGQgMHglMDR4IDB4JTA0eCAlM2RcbiIsCisJCQkJdmxhbjRrLnZpZCwgdmxhbjRrLm1lbWJlciwKKwkJCQl2bGFuNGsudW50YWcsIHZsYW40ay5maWQpOworCX0KKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIHNzaXplX3QgcnRsODM2Nl9yZWFkX2RlYnVnZnNfcHZpZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBydGw4MzY2X3NtaSAqc21pID0gKHN0cnVjdCBydGw4MzY2X3NtaSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyICpidWYgPSBzbWktPmJ1ZjsKKwlpbnQgbGVuID0gMDsKKwlpbnQgaTsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihzbWktPmJ1ZikgLSBsZW4sICIlNHMgJTRzXG4iLAorCQkJInBvcnQiLCAicHZpZCIpOworCisJZm9yIChpID0gMDsgaSA8IHNtaS0+bnVtX3BvcnRzOyBpKyspIHsKKwkJaW50IHB2aWQ7CisJCWludCBlcnI7CisKKwkJZXJyID0gcnRsODM2Nl9nZXRfcHZpZChzbWksIGksICZwdmlkKTsKKwkJaWYgKGVycikKKwkJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihzbWktPmJ1ZikgLSBsZW4sCisJCQkJIiU0ZCBlcnJvclxuIiwgaSk7CisJCWVsc2UKKwkJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihzbWktPmJ1ZikgLSBsZW4sCisJCQkJIiU0ZCAlNGRcbiIsIGksIHB2aWQpOworCX0KKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIHNzaXplX3QgcnRsODM2Nl9yZWFkX2RlYnVnZnNfcmVnKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHJ0bDgzNjZfc21pICpzbWkgPSAoc3RydWN0IHJ0bDgzNjZfc21pICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXUzMiB0LCByZWcgPSBzbWktPmRiZ19yZWc7CisJaW50IGVyciwgbGVuID0gMDsKKwljaGFyICpidWYgPSBzbWktPmJ1ZjsKKworCW1lbXNldChidWYsICdcMCcsIHNpemVvZihzbWktPmJ1ZikpOworCisJZXJyID0gcnRsODM2Nl9zbWlfcmVhZF9yZWcoc21pLCByZWcsICZ0KTsKKwlpZiAoZXJyKSB7CisJCWxlbiArPSBzbnByaW50ZihidWYsIHNpemVvZihzbWktPmJ1ZiksCisJCQkJIlJlYWQgZmFpbGVkIChyZWc6IDB4JTA0eClcbiIsIHJlZyk7CisJCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKKwl9CisKKwlsZW4gKz0gc25wcmludGYoYnVmLCBzaXplb2Yoc21pLT5idWYpLCAicmVnID0gMHglMDR4LCB2YWwgPSAweCUwNHhcbiIsCisJCQlyZWcsIHQpOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOworfQorCitzdGF0aWMgc3NpemVfdCBydGw4MzY2X3dyaXRlX2RlYnVnZnNfcmVnKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSA9IChzdHJ1Y3QgcnRsODM2Nl9zbWkgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyBkYXRhOworCXUzMiByZWcgPSBzbWktPmRiZ19yZWc7CisJaW50IGVycjsKKwlzaXplX3QgbGVuOworCWNoYXIgKmJ1ZiA9IHNtaS0+YnVmOworCisJbGVuID0gbWluKGNvdW50LCBzaXplb2Yoc21pLT5idWYpIC0gMSk7CisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGxlbikpIHsKKwkJZGV2X2VycihzbWktPnBhcmVudCwgImNvcHkgZnJvbSB1c2VyIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWJ1ZltsZW5dID0gJ1wwJzsKKwlpZiAobGVuID4gMCAmJiBidWZbbGVuIC0gMV0gPT0gJ1xuJykKKwkJYnVmW2xlbiAtIDFdID0gJ1wwJzsKKworCisJaWYgKGtzdHJ0b3VsKGJ1ZiwgMTYsICZkYXRhKSkgeworCQlkZXZfZXJyKHNtaS0+cGFyZW50LCAiSW52YWxpZCByZWcgdmFsdWUgJXNcbiIsIGJ1Zik7CisJfSBlbHNlIHsKKwkJZXJyID0gcnRsODM2Nl9zbWlfd3JpdGVfcmVnKHNtaSwgcmVnLCBkYXRhKTsKKwkJaWYgKGVycikgeworCQkJZGV2X2VycihzbWktPnBhcmVudCwKKwkJCQkid3JpdGluZyByZWcgMHglMDR4IHZhbCAweCUwNGx4IGZhaWxlZFxuIiwKKwkJCQlyZWcsIGRhdGEpOworCQl9CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBydGw4MzY2X3JlYWRfZGVidWdmc19taWJzKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHJ0bDgzNjZfc21pICpzbWkgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IGksIGosIGxlbiA9IDA7CisJY2hhciAqYnVmID0gc21pLT5idWY7CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2Yoc21pLT5idWYpIC0gbGVuLCAiJS0zNnMiLAorCQkJIkNvdW50ZXIiKTsKKworCWZvciAoaSA9IDA7IGkgPCBzbWktPm51bV9wb3J0czsgaSsrKSB7CisJCWNoYXIgcG9ydF9idWZbMTBdOworCisJCXNucHJpbnRmKHBvcnRfYnVmLCBzaXplb2YocG9ydF9idWYpLCAiUG9ydCAlZCIsIGkpOworCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2Yoc21pLT5idWYpIC0gbGVuLCAiICUxMnMiLAorCQkJCXBvcnRfYnVmKTsKKwl9CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKHNtaS0+YnVmKSAtIGxlbiwgIlxuIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgc21pLT5udW1fbWliX2NvdW50ZXJzOyBpKyspIHsKKwkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKHNtaS0+YnVmKSAtIGxlbiwgIiUtMzZzICIsCisJCQkJc21pLT5taWJfY291bnRlcnNbaV0ubmFtZSk7CisJCWZvciAoaiA9IDA7IGogPCBzbWktPm51bV9wb3J0czsgaisrKSB7CisJCQl1bnNpZ25lZCBsb25nIGxvbmcgY291bnRlciA9IDA7CisKKwkJCWlmICghc21pLT5vcHMtPmdldF9taWJfY291bnRlcihzbWksIGksIGosICZjb3VudGVyKSkKKwkJCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLAorCQkJCQkJc2l6ZW9mKHNtaS0+YnVmKSAtIGxlbiwKKwkJCQkJCSIlMTJsbHUgIiwgY291bnRlcik7CisJCQllbHNlCisJCQkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwKKwkJCQkJCXNpemVvZihzbWktPmJ1ZikgLSBsZW4sCisJCQkJCQkiJTEycyAiLCAiZXJyb3IiKTsKKwkJfQorCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2Yoc21pLT5idWYpIC0gbGVuLCAiXG4iKTsKKwl9CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfcnRsODM2Nl9yZWdzID0geworCS5yZWFkCT0gcnRsODM2Nl9yZWFkX2RlYnVnZnNfcmVnLAorCS53cml0ZQk9IHJ0bDgzNjZfd3JpdGVfZGVidWdmc19yZWcsCisJLm9wZW4JPSBydGw4MzY2X2RlYnVnZnNfb3BlbiwKKwkub3duZXIJPSBUSElTX01PRFVMRQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc19ydGw4MzY2X3ZsYW5fbWMgPSB7CisJLnJlYWQJPSBydGw4MzY2X3JlYWRfZGVidWdmc192bGFuX21jLAorCS5vcGVuCT0gcnRsODM2Nl9kZWJ1Z2ZzX29wZW4sCisJLm93bmVyCT0gVEhJU19NT0RVTEUKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfcnRsODM2Nl92bGFuXzRrID0geworCS5yZWFkCT0gcnRsODM2Nl9yZWFkX2RlYnVnZnNfdmxhbl80aywKKwkub3Blbgk9IHJ0bDgzNjZfZGVidWdmc19vcGVuLAorCS5vd25lcgk9IFRISVNfTU9EVUxFCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX3J0bDgzNjZfcHZpZCA9IHsKKwkucmVhZAk9IHJ0bDgzNjZfcmVhZF9kZWJ1Z2ZzX3B2aWQsCisJLm9wZW4JPSBydGw4MzY2X2RlYnVnZnNfb3BlbiwKKwkub3duZXIJPSBUSElTX01PRFVMRQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc19ydGw4MzY2X21pYnMgPSB7CisJLnJlYWQgPSBydGw4MzY2X3JlYWRfZGVidWdmc19taWJzLAorCS5vcGVuID0gcnRsODM2Nl9kZWJ1Z2ZzX29wZW4sCisJLm93bmVyID0gVEhJU19NT0RVTEUKK307CisKK3N0YXRpYyB2b2lkIHJ0bDgzNjZfZGVidWdmc19pbml0KHN0cnVjdCBydGw4MzY2X3NtaSAqc21pKQoreworCXN0cnVjdCBkZW50cnkgKm5vZGU7CisJc3RydWN0IGRlbnRyeSAqcm9vdDsKKworCWlmICghc21pLT5kZWJ1Z2ZzX3Jvb3QpCisJCXNtaS0+ZGVidWdmc19yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKGRldl9uYW1lKHNtaS0+cGFyZW50KSwKKwkJCQkJCSAgICAgICBOVUxMKTsKKworCWlmICghc21pLT5kZWJ1Z2ZzX3Jvb3QpIHsKKwkJZGV2X2VycihzbWktPnBhcmVudCwgIlVuYWJsZSB0byBjcmVhdGUgZGVidWdmcyBkaXJcbiIpOworCQlyZXR1cm47CisJfQorCXJvb3QgPSBzbWktPmRlYnVnZnNfcm9vdDsKKworCW5vZGUgPSBkZWJ1Z2ZzX2NyZWF0ZV94MTYoInJlZyIsIFNfSVJVR08gfCBTX0lXVVNSLCByb290LAorCQkJCSAgJnNtaS0+ZGJnX3JlZyk7CisJaWYgKCFub2RlKSB7CisJCWRldl9lcnIoc21pLT5wYXJlbnQsICJDcmVhdGluZyBkZWJ1Z2ZzIGZpbGUgJyVzJyBmYWlsZWRcbiIsCisJCQkicmVnIik7CisJCXJldHVybjsKKwl9CisKKwlub2RlID0gZGVidWdmc19jcmVhdGVfZmlsZSgidmFsIiwgU19JUlVHTyB8IFNfSVdVU1IsIHJvb3QsIHNtaSwKKwkJCQkgICAmZm9wc19ydGw4MzY2X3JlZ3MpOworCWlmICghbm9kZSkgeworCQlkZXZfZXJyKHNtaS0+cGFyZW50LCAiQ3JlYXRpbmcgZGVidWdmcyBmaWxlICclcycgZmFpbGVkXG4iLAorCQkJInZhbCIpOworCQlyZXR1cm47CisJfQorCisJbm9kZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInZsYW5fbWMiLCBTX0lSVVNSLCByb290LCBzbWksCisJCQkJICAgJmZvcHNfcnRsODM2Nl92bGFuX21jKTsKKwlpZiAoIW5vZGUpIHsKKwkJZGV2X2VycihzbWktPnBhcmVudCwgIkNyZWF0aW5nIGRlYnVnZnMgZmlsZSAnJXMnIGZhaWxlZFxuIiwKKwkJCSJ2bGFuX21jIik7CisJCXJldHVybjsKKwl9CisKKwlub2RlID0gZGVidWdmc19jcmVhdGVfdTgoInZsYW5fNGtfcGFnZSIsIFNfSVJVR08gfCBTX0lXVVNSLCByb290LAorCQkJCSAgJnNtaS0+ZGJnX3ZsYW5fNGtfcGFnZSk7CisJaWYgKCFub2RlKSB7CisJCWRldl9lcnIoc21pLT5wYXJlbnQsICJDcmVhdGluZyBkZWJ1Z2ZzIGZpbGUgJyVzJyBmYWlsZWRcbiIsCisJCQkidmxhbl80a19wYWdlIik7CisJCXJldHVybjsKKwl9CisKKwlub2RlID0gZGVidWdmc19jcmVhdGVfZmlsZSgidmxhbl80ayIsIFNfSVJVU1IsIHJvb3QsIHNtaSwKKwkJCQkgICAmZm9wc19ydGw4MzY2X3ZsYW5fNGspOworCWlmICghbm9kZSkgeworCQlkZXZfZXJyKHNtaS0+cGFyZW50LCAiQ3JlYXRpbmcgZGVidWdmcyBmaWxlICclcycgZmFpbGVkXG4iLAorCQkJInZsYW5fNGsiKTsKKwkJcmV0dXJuOworCX0KKworCW5vZGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJwdmlkIiwgU19JUlVTUiwgcm9vdCwgc21pLAorCQkJCSAgICZmb3BzX3J0bDgzNjZfcHZpZCk7CisJaWYgKCFub2RlKSB7CisJCWRldl9lcnIoc21pLT5wYXJlbnQsICJDcmVhdGluZyBkZWJ1Z2ZzIGZpbGUgJyVzJyBmYWlsZWRcbiIsCisJCQkicHZpZCIpOworCQlyZXR1cm47CisJfQorCisJbm9kZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoIm1pYnMiLCBTX0lSVVNSLCBzbWktPmRlYnVnZnNfcm9vdCwgc21pLAorCQkJCSAgICZmb3BzX3J0bDgzNjZfbWlicyk7CisJaWYgKCFub2RlKQorCQlkZXZfZXJyKHNtaS0+cGFyZW50LCAiQ3JlYXRpbmcgZGVidWdmcyBmaWxlICclcycgZmFpbGVkXG4iLAorCQkJIm1pYnMiKTsKK30KKworc3RhdGljIHZvaWQgcnRsODM2Nl9kZWJ1Z2ZzX3JlbW92ZShzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSkKK3sKKwlpZiAoc21pLT5kZWJ1Z2ZzX3Jvb3QpIHsKKwkJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKHNtaS0+ZGVidWdmc19yb290KTsKKwkJc21pLT5kZWJ1Z2ZzX3Jvb3QgPSBOVUxMOworCX0KK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgcnRsODM2Nl9kZWJ1Z2ZzX2luaXQoc3RydWN0IHJ0bDgzNjZfc21pICpzbWkpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgcnRsODM2Nl9kZWJ1Z2ZzX3JlbW92ZShzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSkge30KKyNlbmRpZiAvKiBDT05GSUdfUlRMODM2Nl9TTUlfREVCVUdfRlMgKi8KKworc3RhdGljIGludCBydGw4MzY2X3NtaV9taWlfaW5pdChzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSkKK3sKKwlpbnQgcmV0OworCisjaWZkZWYgQ09ORklHX09GCisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IE5VTEw7CisKKwlucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKHNtaS0+cGFyZW50LT5vZl9ub2RlLCAibWRpby1idXMiKTsKKyNlbmRpZgorCisJc21pLT5taWlfYnVzID0gbWRpb2J1c19hbGxvYygpOworCWlmIChzbWktPm1paV9idXMgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisKKwlzbWktPm1paV9idXMtPnByaXYgPSAodm9pZCAqKSBzbWk7CisJc21pLT5taWlfYnVzLT5uYW1lID0gZGV2X25hbWUoc21pLT5wYXJlbnQpOworCXNtaS0+bWlpX2J1cy0+cmVhZCA9IHNtaS0+b3BzLT5taWlfcmVhZDsKKwlzbWktPm1paV9idXMtPndyaXRlID0gc21pLT5vcHMtPm1paV93cml0ZTsKKwlzbnByaW50ZihzbWktPm1paV9idXMtPmlkLCBNSUlfQlVTX0lEX1NJWkUsICIlcyIsCisJCSBkZXZfbmFtZShzbWktPnBhcmVudCkpOworCXNtaS0+bWlpX2J1cy0+cGFyZW50ID0gc21pLT5wYXJlbnQ7CisJc21pLT5taWlfYnVzLT5waHlfbWFzayA9IH4oMHgxZik7CisKKyNpZmRlZiBDT05GSUdfT0YKKwlpZiAobnApCisJCXJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoc21pLT5taWlfYnVzLCBucCk7CisJZWxzZQorI2VuZGlmCisJCXJldCA9IG1kaW9idXNfcmVnaXN0ZXIoc21pLT5taWlfYnVzKTsKKworCWlmIChyZXQpCisJCWdvdG8gZXJyX2ZyZWU7CisKKwlyZXR1cm4gMDsKKworIGVycl9mcmVlOgorCW1kaW9idXNfZnJlZShzbWktPm1paV9idXMpOworIGVycjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBydGw4MzY2X3NtaV9taWlfY2xlYW51cChzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSkKK3sKKwltZGlvYnVzX3VucmVnaXN0ZXIoc21pLT5taWlfYnVzKTsKKwltZGlvYnVzX2ZyZWUoc21pLT5taWlfYnVzKTsKK30KKworaW50IHJ0bDgzNjZfc3dfcmVzZXRfc3dpdGNoKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYpCit7CisJc3RydWN0IHJ0bDgzNjZfc21pICpzbWkgPSBzd190b19ydGw4MzY2X3NtaShkZXYpOworCWludCBlcnI7CisKKwllcnIgPSBydGw4MzY2X3Jlc2V0KHNtaSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHNtaS0+b3BzLT5zZXR1cChzbWkpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBydGw4MzY2X3Jlc2V0X3ZsYW4oc21pKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gcnRsODM2Nl9lbmFibGVfdmxhbihzbWksIDEpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gcnRsODM2Nl9lbmFibGVfYWxsX3BvcnRzKHNtaSwgMSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChydGw4MzY2X3N3X3Jlc2V0X3N3aXRjaCk7CisKK2ludCBydGw4MzY2X3N3X2dldF9wb3J0X3B2aWQoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgaW50IHBvcnQsIGludCAqdmFsKQoreworCXN0cnVjdCBydGw4MzY2X3NtaSAqc21pID0gc3dfdG9fcnRsODM2Nl9zbWkoZGV2KTsKKwlyZXR1cm4gcnRsODM2Nl9nZXRfcHZpZChzbWksIHBvcnQsIHZhbCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChydGw4MzY2X3N3X2dldF9wb3J0X3B2aWQpOworCitpbnQgcnRsODM2Nl9zd19zZXRfcG9ydF9wdmlkKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsIGludCBwb3J0LCBpbnQgdmFsKQoreworCXN0cnVjdCBydGw4MzY2X3NtaSAqc21pID0gc3dfdG9fcnRsODM2Nl9zbWkoZGV2KTsKKwlyZXR1cm4gcnRsODM2Nl9zZXRfcHZpZChzbWksIHBvcnQsIHZhbCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChydGw4MzY2X3N3X3NldF9wb3J0X3B2aWQpOworCitpbnQgcnRsODM2Nl9zd19nZXRfcG9ydF9taWIoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCSAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkgICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSA9IHN3X3RvX3J0bDgzNjZfc21pKGRldik7CisJaW50IGksIGxlbiA9IDA7CisJdW5zaWduZWQgbG9uZyBsb25nIGNvdW50ZXIgPSAwOworCWNoYXIgKmJ1ZiA9IHNtaS0+YnVmOworCisJaWYgKHZhbC0+cG9ydF92bGFuID49IHNtaS0+bnVtX3BvcnRzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihzbWktPmJ1ZikgLSBsZW4sCisJCQkiUG9ydCAlZCBNSUIgY291bnRlcnNcbiIsCisJCQl2YWwtPnBvcnRfdmxhbik7CisKKwlmb3IgKGkgPSAwOyBpIDwgc21pLT5udW1fbWliX2NvdW50ZXJzOyArK2kpIHsKKwkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKHNtaS0+YnVmKSAtIGxlbiwKKwkJCQkiJS0zNnM6ICIsIHNtaS0+bWliX2NvdW50ZXJzW2ldLm5hbWUpOworCQlpZiAoIXNtaS0+b3BzLT5nZXRfbWliX2NvdW50ZXIoc21pLCBpLCB2YWwtPnBvcnRfdmxhbiwKKwkJCQkJICAgICAgICZjb3VudGVyKSkKKwkJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihzbWktPmJ1ZikgLSBsZW4sCisJCQkJCSIlbGx1XG4iLCBjb3VudGVyKTsKKwkJZWxzZQorCQkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKHNtaS0+YnVmKSAtIGxlbiwKKwkJCQkJIiVzXG4iLCAiZXJyb3IiKTsKKwl9CisKKwl2YWwtPnZhbHVlLnMgPSBidWY7CisJdmFsLT5sZW4gPSBsZW47CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChydGw4MzY2X3N3X2dldF9wb3J0X21pYik7CisKK2ludCBydGw4MzY2X3N3X2dldF9wb3J0X3N0YXRzKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsIGludCBwb3J0LAorCQkJCXN0cnVjdCBzd2l0Y2hfcG9ydF9zdGF0cyAqc3RhdHMsCisJCQkJaW50IHR4Yl9pZCwgaW50IHJ4Yl9pZCkKK3sKKwlzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSA9IHN3X3RvX3J0bDgzNjZfc21pKGRldik7CisJdW5zaWduZWQgbG9uZyBsb25nIGNvdW50ZXIgPSAwOworCWludCByZXQ7CisKKwlpZiAocG9ydCA+PSBzbWktPm51bV9wb3J0cykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBzbWktPm9wcy0+Z2V0X21pYl9jb3VudGVyKHNtaSwgdHhiX2lkLCBwb3J0LCAmY291bnRlcik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXN0YXRzLT50eF9ieXRlcyA9IGNvdW50ZXI7CisKKwlyZXQgPSBzbWktPm9wcy0+Z2V0X21pYl9jb3VudGVyKHNtaSwgcnhiX2lkLCBwb3J0LCAmY291bnRlcik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXN0YXRzLT5yeF9ieXRlcyA9IGNvdW50ZXI7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJ0bDgzNjZfc3dfZ2V0X3BvcnRfc3RhdHMpOworCitpbnQgcnRsODM2Nl9zd19nZXRfdmxhbl9pbmZvKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCSAgICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlpbnQgaTsKKwl1MzIgbGVuID0gMDsKKwlzdHJ1Y3QgcnRsODM2Nl92bGFuXzRrIHZsYW40azsKKwlzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSA9IHN3X3RvX3J0bDgzNjZfc21pKGRldik7CisJY2hhciAqYnVmID0gc21pLT5idWY7CisJaW50IGVycjsKKworCWlmICghc21pLT5vcHMtPmlzX3ZsYW5fdmFsaWQoc21pLCB2YWwtPnBvcnRfdmxhbikpCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtc2V0KGJ1ZiwgJ1wwJywgc2l6ZW9mKHNtaS0+YnVmKSk7CisKKwllcnIgPSBzbWktPm9wcy0+Z2V0X3ZsYW5fNGsoc21pLCB2YWwtPnBvcnRfdmxhbiwgJnZsYW40ayk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihzbWktPmJ1ZikgLSBsZW4sCisJCQkiVkxBTiAlZDogUG9ydHM6ICciLCB2bGFuNGsudmlkKTsKKworCWZvciAoaSA9IDA7IGkgPCBzbWktPm51bV9wb3J0czsgaSsrKSB7CisJCWlmICghKHZsYW40ay5tZW1iZXIgJiAoMSA8PCBpKSkpCisJCQljb250aW51ZTsKKworCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2Yoc21pLT5idWYpIC0gbGVuLCAiJWQlcyIsIGksCisJCQkJKHZsYW40ay51bnRhZyAmICgxIDw8IGkpKSA/ICIiIDogInQiKTsKKwl9CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2Yoc21pLT5idWYpIC0gbGVuLAorCQkJIicsIG1lbWJlcnM9JTA0eCwgdW50YWc9JTA0eCwgZmlkPSV1IiwKKwkJCXZsYW40ay5tZW1iZXIsIHZsYW40ay51bnRhZywgdmxhbjRrLmZpZCk7CisKKwl2YWwtPnZhbHVlLnMgPSBidWY7CisJdmFsLT5sZW4gPSBsZW47CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJ0bDgzNjZfc3dfZ2V0X3ZsYW5faW5mbyk7CisKK2ludCBydGw4MzY2X3N3X2dldF92bGFuX3BvcnRzKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IHJ0bDgzNjZfc21pICpzbWkgPSBzd190b19ydGw4MzY2X3NtaShkZXYpOworCXN0cnVjdCBzd2l0Y2hfcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgcnRsODM2Nl92bGFuXzRrIHZsYW40azsKKwlpbnQgaTsKKworCWlmICghc21pLT5vcHMtPmlzX3ZsYW5fdmFsaWQoc21pLCB2YWwtPnBvcnRfdmxhbikpCisJCXJldHVybiAtRUlOVkFMOworCisJc21pLT5vcHMtPmdldF92bGFuXzRrKHNtaSwgdmFsLT5wb3J0X3ZsYW4sICZ2bGFuNGspOworCisJcG9ydCA9ICZ2YWwtPnZhbHVlLnBvcnRzWzBdOworCXZhbC0+bGVuID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgc21pLT5udW1fcG9ydHM7IGkrKykgeworCQlpZiAoISh2bGFuNGsubWVtYmVyICYgQklUKGkpKSkKKwkJCWNvbnRpbnVlOworCisJCXBvcnQtPmlkID0gaTsKKwkJcG9ydC0+ZmxhZ3MgPSAodmxhbjRrLnVudGFnICYgQklUKGkpKSA/CisJCQkJCTAgOiBCSVQoU1dJVENIX1BPUlRfRkxBR19UQUdHRUQpOworCQl2YWwtPmxlbisrOworCQlwb3J0Kys7CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwocnRsODM2Nl9zd19nZXRfdmxhbl9wb3J0cyk7CisKK2ludCBydGw4MzY2X3N3X3NldF92bGFuX3BvcnRzKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IHJ0bDgzNjZfc21pICpzbWkgPSBzd190b19ydGw4MzY2X3NtaShkZXYpOworCXN0cnVjdCBzd2l0Y2hfcG9ydCAqcG9ydDsKKwl1MzIgbWVtYmVyID0gMDsKKwl1MzIgdW50YWcgPSAwOworCWludCBlcnI7CisJaW50IGk7CisKKwlpZiAoIXNtaS0+b3BzLT5pc192bGFuX3ZhbGlkKHNtaSwgdmFsLT5wb3J0X3ZsYW4pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBvcnQgPSAmdmFsLT52YWx1ZS5wb3J0c1swXTsKKwlmb3IgKGkgPSAwOyBpIDwgdmFsLT5sZW47IGkrKywgcG9ydCsrKSB7CisJCWludCBwdmlkID0gMDsKKwkJbWVtYmVyIHw9IEJJVChwb3J0LT5pZCk7CisKKwkJaWYgKCEocG9ydC0+ZmxhZ3MgJiBCSVQoU1dJVENIX1BPUlRfRkxBR19UQUdHRUQpKSkKKwkJCXVudGFnIHw9IEJJVChwb3J0LT5pZCk7CisKKwkJLyoKKwkJICogVG8gZW5zdXJlIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIE1DIGVudHJ5IGZvciB0aGlzIFZMQU4sCisJCSAqIGluaXRpYWxpemUgdGhlIHBvcnQgVkxBTiBJRCBoZXJlLgorCQkgKi8KKwkJZXJyID0gcnRsODM2Nl9nZXRfcHZpZChzbWksIHBvcnQtPmlkLCAmcHZpZCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJaWYgKHB2aWQgPT0gMCkgeworCQkJZXJyID0gcnRsODM2Nl9zZXRfcHZpZChzbWksIHBvcnQtPmlkLCB2YWwtPnBvcnRfdmxhbik7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCisJcmV0dXJuIHJ0bDgzNjZfc2V0X3ZsYW4oc21pLCB2YWwtPnBvcnRfdmxhbiwgbWVtYmVyLCB1bnRhZywgMCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChydGw4MzY2X3N3X3NldF92bGFuX3BvcnRzKTsKKworaW50IHJ0bDgzNjZfc3dfZ2V0X3ZsYW5fZmlkKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkgICAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJICAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IHJ0bDgzNjZfdmxhbl80ayB2bGFuNGs7CisJc3RydWN0IHJ0bDgzNjZfc21pICpzbWkgPSBzd190b19ydGw4MzY2X3NtaShkZXYpOworCWludCBlcnI7CisKKwlpZiAoIXNtaS0+b3BzLT5pc192bGFuX3ZhbGlkKHNtaSwgdmFsLT5wb3J0X3ZsYW4pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVyciA9IHNtaS0+b3BzLT5nZXRfdmxhbl80ayhzbWksIHZhbC0+cG9ydF92bGFuLCAmdmxhbjRrKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJdmFsLT52YWx1ZS5pID0gdmxhbjRrLmZpZDsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwocnRsODM2Nl9zd19nZXRfdmxhbl9maWQpOworCitpbnQgcnRsODM2Nl9zd19zZXRfdmxhbl9maWQoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCSAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkgICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgcnRsODM2Nl92bGFuXzRrIHZsYW40azsKKwlzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSA9IHN3X3RvX3J0bDgzNjZfc21pKGRldik7CisJaW50IGVycjsKKworCWlmICghc21pLT5vcHMtPmlzX3ZsYW5fdmFsaWQoc21pLCB2YWwtPnBvcnRfdmxhbikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHZhbC0+dmFsdWUuaSA8IDAgfHwgdmFsLT52YWx1ZS5pID4gYXR0ci0+bWF4KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVyciA9IHNtaS0+b3BzLT5nZXRfdmxhbl80ayhzbWksIHZhbC0+cG9ydF92bGFuLCAmdmxhbjRrKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIHJ0bDgzNjZfc2V0X3ZsYW4oc21pLCB2YWwtPnBvcnRfdmxhbiwKKwkJCQl2bGFuNGsubWVtYmVyLAorCQkJCXZsYW40ay51bnRhZywKKwkJCQl2YWwtPnZhbHVlLmkpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocnRsODM2Nl9zd19zZXRfdmxhbl9maWQpOworCitpbnQgcnRsODM2Nl9zd19nZXRfdmxhbl9lbmFibGUoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkgICAgICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSA9IHN3X3RvX3J0bDgzNjZfc21pKGRldik7CisKKwlpZiAoYXR0ci0+b2ZzID4gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYXR0ci0+b2ZzID09IDEpCisJCXZhbC0+dmFsdWUuaSA9IHNtaS0+dmxhbl9lbmFibGVkOworCWVsc2UKKwkJdmFsLT52YWx1ZS5pID0gc21pLT52bGFuNGtfZW5hYmxlZDsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwocnRsODM2Nl9zd19nZXRfdmxhbl9lbmFibGUpOworCitpbnQgcnRsODM2Nl9zd19zZXRfdmxhbl9lbmFibGUoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkgICAgICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSA9IHN3X3RvX3J0bDgzNjZfc21pKGRldik7CisJaW50IGVycjsKKworCWlmIChhdHRyLT5vZnMgPiAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhdHRyLT5vZnMgPT0gMSkKKwkJZXJyID0gcnRsODM2Nl9lbmFibGVfdmxhbihzbWksIHZhbC0+dmFsdWUuaSk7CisJZWxzZQorCQllcnIgPSBydGw4MzY2X2VuYWJsZV92bGFuNGsoc21pLCB2YWwtPnZhbHVlLmkpOworCisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJ0bDgzNjZfc3dfc2V0X3ZsYW5fZW5hYmxlKTsKKworc3RydWN0IHJ0bDgzNjZfc21pICpydGw4MzY2X3NtaV9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQpCit7CisJc3RydWN0IHJ0bDgzNjZfc21pICpzbWk7CisKKwlCVUdfT04oIXBhcmVudCk7CisKKwlzbWkgPSBremFsbG9jKHNpemVvZigqc21pKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzbWkpIHsKKwkJZGV2X2VycihwYXJlbnQsICJubyBtZW1vcnkgZm9yIHByaXZhdGUgZGF0YVxuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCXNtaS0+cGFyZW50ID0gcGFyZW50OworCXJldHVybiBzbWk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChydGw4MzY2X3NtaV9hbGxvYyk7CisKK3N0YXRpYyBpbnQgX19ydGw4MzY2X3NtaV9pbml0KHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLCBjb25zdCBjaGFyICpuYW1lKQoreworCWludCBlcnI7CisKKwlpZiAoIXNtaS0+ZXh0X21idXMpIHsKKwkJZXJyID0gZ3Bpb19yZXF1ZXN0KHNtaS0+Z3Bpb19zZGEsIG5hbWUpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInJ0bDgzNjZfc21pOiBncGlvX3JlcXVlc3QgZmFpbGVkIGZvciAldSwgZXJyPSVkXG4iLAorCQkJCXNtaS0+Z3Bpb19zZGEsIGVycik7CisJCQlnb3RvIGVycl9vdXQ7CisJCX0KKworCQllcnIgPSBncGlvX3JlcXVlc3Qoc21pLT5ncGlvX3NjaywgbmFtZSk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAicnRsODM2Nl9zbWk6IGdwaW9fcmVxdWVzdCBmYWlsZWQgZm9yICV1LCBlcnI9JWRcbiIsCisJCQkJc21pLT5ncGlvX3NjaywgZXJyKTsKKwkJCWdvdG8gZXJyX2ZyZWVfc2RhOworCQl9CisJfQorCisJc3Bpbl9sb2NrX2luaXQoJnNtaS0+bG9jayk7CisKKwkvKiBzdGFydCB0aGUgc3dpdGNoICovCisJaWYgKHNtaS0+aHdfcmVzZXQpIHsKKwkJc21pLT5od19yZXNldChzbWksIGZhbHNlKTsKKwkJbXNsZWVwKFJUTDgzNjZfU01JX0hXX1NUQVJUX0RFTEFZKTsKKwl9CisKKwlyZXR1cm4gMDsKKworIGVycl9mcmVlX3NkYToKKwlncGlvX2ZyZWUoc21pLT5ncGlvX3NkYSk7CisgZXJyX291dDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX3J0bDgzNjZfc21pX2NsZWFudXAoc3RydWN0IHJ0bDgzNjZfc21pICpzbWkpCit7CisJaWYgKHNtaS0+aHdfcmVzZXQpCisJCXNtaS0+aHdfcmVzZXQoc21pLCB0cnVlKTsKKworCWlmICghc21pLT5leHRfbWJ1cykgeworCQlncGlvX2ZyZWUoc21pLT5ncGlvX3Njayk7CisJCWdwaW9fZnJlZShzbWktPmdwaW9fc2RhKTsKKwl9Cit9CisKK2VudW0gcnRsODM2Nl90eXBlIHJ0bDgzNjZfc21pX2RldGVjdChzdHJ1Y3QgcnRsODM2Nl9wbGF0Zm9ybV9kYXRhICpwZGF0YSkKK3sKKwlzdGF0aWMgc3RydWN0IHJ0bDgzNjZfc21pIHNtaTsKKwllbnVtIHJ0bDgzNjZfdHlwZSB0eXBlID0gUlRMODM2Nl9UWVBFX1VOS05PV047CisJdTMyIHJlZyA9IDA7CisKKwltZW1zZXQoJnNtaSwgMCwgc2l6ZW9mKHNtaSkpOworCXNtaS5ncGlvX3NkYSA9IHBkYXRhLT5ncGlvX3NkYTsKKwlzbWkuZ3Bpb19zY2sgPSBwZGF0YS0+Z3Bpb19zY2s7CisJc21pLmNsa19kZWxheSA9IDEwOworCXNtaS5jbWRfcmVhZCAgPSAweGE5OworCXNtaS5jbWRfd3JpdGUgPSAweGE4OworCisJaWYgKF9fcnRsODM2Nl9zbWlfaW5pdCgmc21pLCAicnRsODM2NiIpKQorCQlnb3RvIG91dDsKKworCWlmIChydGw4MzY2X3NtaV9yZWFkX3JlZygmc21pLCAweDVjLCAmcmVnKSkKKwkJZ290byBjbGVhbnVwOworCisJc3dpdGNoKHJlZykgeworCWNhc2UgMHg2MDI3OgorCQlwcmludGsoIkZvdW5kIGFuIFJUTDgzNjZTIHN3aXRjaFxuIik7CisJCXR5cGUgPSBSVEw4MzY2X1RZUEVfUzsKKwkJYnJlYWs7CisJY2FzZSAweDU5Mzc6CisJCXByaW50aygiRm91bmQgYW4gUlRMODM2NlJCIHN3aXRjaFxuIik7CisJCXR5cGUgPSBSVEw4MzY2X1RZUEVfUkI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50aygiRm91bmQgYW4gVW5rbm93biBSVEw4MzY2IHN3aXRjaCAoaWQ9MHglMDR4KVxuIiwgcmVnKTsKKwkJYnJlYWs7CisJfQorCitjbGVhbnVwOgorCV9fcnRsODM2Nl9zbWlfY2xlYW51cCgmc21pKTsKK291dDoKKwlyZXR1cm4gdHlwZTsKK30KKworaW50IHJ0bDgzNjZfc21pX2luaXQoc3RydWN0IHJ0bDgzNjZfc21pICpzbWkpCit7CisJaW50IGVycjsKKworCWlmICghc21pLT5vcHMpCisJCXJldHVybiAtRUlOVkFMOworCisJZXJyID0gX19ydGw4MzY2X3NtaV9pbml0KHNtaSwgZGV2X25hbWUoc21pLT5wYXJlbnQpKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXQ7CisKKwlpZiAoIXNtaS0+ZXh0X21idXMpCisJCWRldl9pbmZvKHNtaS0+cGFyZW50LCAidXNpbmcgR1BJTyBwaW5zICV1IChTREEpIGFuZCAldSAoU0NLKVxuIiwKKwkJCSBzbWktPmdwaW9fc2RhLCBzbWktPmdwaW9fc2NrKTsKKwllbHNlCisJCWRldl9pbmZvKHNtaS0+cGFyZW50LCAidXNpbmcgTURJTyBidXMgJyVzJ1xuIiwgc21pLT5leHRfbWJ1cy0+bmFtZSk7CisKKwllcnIgPSBzbWktPm9wcy0+ZGV0ZWN0KHNtaSk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKHNtaS0+cGFyZW50LCAiY2hpcCBkZXRlY3Rpb24gZmFpbGVkLCBlcnI9JWRcbiIsIGVycik7CisJCWdvdG8gZXJyX2ZyZWVfc2NrOworCX0KKworCWVyciA9IHJ0bDgzNjZfcmVzZXQoc21pKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9mcmVlX3NjazsKKworCWVyciA9IHNtaS0+b3BzLT5zZXR1cChzbWkpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycihzbWktPnBhcmVudCwgImNoaXAgc2V0dXAgZmFpbGVkLCBlcnI9JWRcbiIsIGVycik7CisJCWdvdG8gZXJyX2ZyZWVfc2NrOworCX0KKworCWVyciA9IHJ0bDgzNjZfaW5pdF92bGFuKHNtaSk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKHNtaS0+cGFyZW50LCAiVkxBTiBpbml0aWFsaXphdGlvbiBmYWlsZWQsIGVycj0lZFxuIiwKKwkJCWVycik7CisJCWdvdG8gZXJyX2ZyZWVfc2NrOworCX0KKworCWVyciA9IHJ0bDgzNjZfZW5hYmxlX2FsbF9wb3J0cyhzbWksIDEpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2ZyZWVfc2NrOworCisJZXJyID0gcnRsODM2Nl9zbWlfbWlpX2luaXQoc21pKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9mcmVlX3NjazsKKworCXJ0bDgzNjZfZGVidWdmc19pbml0KHNtaSk7CisKKwlyZXR1cm4gMDsKKworIGVycl9mcmVlX3NjazoKKwlfX3J0bDgzNjZfc21pX2NsZWFudXAoc21pKTsKKyBlcnJfb3V0OgorCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChydGw4MzY2X3NtaV9pbml0KTsKKwordm9pZCBydGw4MzY2X3NtaV9jbGVhbnVwKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pKQoreworCXJ0bDgzNjZfZGVidWdmc19yZW1vdmUoc21pKTsKKwlydGw4MzY2X3NtaV9taWlfY2xlYW51cChzbWkpOworCV9fcnRsODM2Nl9zbWlfY2xlYW51cChzbWkpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocnRsODM2Nl9zbWlfY2xlYW51cCk7CisKKyNpZmRlZiBDT05GSUdfT0YKK3N0YXRpYyB2b2lkIHJ0bDgzNjZfc21pX3Jlc2V0KHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLCBib29sIGFjdGl2ZSkKK3sKKwlpZiAoYWN0aXZlKQorCQlyZXNldF9jb250cm9sX2Fzc2VydChzbWktPnJlc2V0KTsKKwllbHNlCisJCXJlc2V0X2NvbnRyb2xfZGVhc3NlcnQoc21pLT5yZXNldCk7Cit9CisKK2ludCBydGw4MzY2X3NtaV9wcm9iZV9vZihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSkKK3sKKwlpbnQgc2NrID0gb2ZfZ2V0X25hbWVkX2dwaW8ocGRldi0+ZGV2Lm9mX25vZGUsICJncGlvLXNjayIsIDApOworCWludCBzZGEgPSBvZl9nZXRfbmFtZWRfZ3BpbyhwZGV2LT5kZXYub2Zfbm9kZSwgImdwaW8tc2RhIiwgMCk7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHBkZXYtPmRldi5vZl9ub2RlOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbWRpb19ub2RlOworCisJbWRpb19ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShucCwgIm1paS1idXMiLCAwKTsKKwlpZiAoIW1kaW9fbm9kZSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgZmluZCBtZGlvIG5vZGUgcGhhbmRsZSIpOworCQlnb3RvIHRyeV9ncGlvOworCX0KKworCXNtaS0+ZXh0X21idXMgPSBvZl9tZGlvX2ZpbmRfYnVzKG1kaW9fbm9kZSk7CisJaWYgKCFzbWktPmV4dF9tYnVzKSB7CisJCWRldl9pbmZvKCZwZGV2LT5kZXYsCisJCQkiY2Fubm90IGZpbmQgbWRpbyBidXMgZnJvbSBidXMgaGFuZGxlICh5ZXQpIik7CisJCWdvdG8gdHJ5X2dwaW87CisJfQorCisJcmV0dXJuIDA7CisKK3RyeV9ncGlvOgorCWlmICghZ3Bpb19pc192YWxpZChzY2spIHx8ICFncGlvX2lzX3ZhbGlkKHNkYSkpIHsKKwkJaWYgKCFtZGlvX25vZGUpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImdwaW9zIG1pc3NpbmcgaW4gZGV2aWN0cmVlXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9IGVsc2UgeworCQkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJCX0KKwl9CisKKwlzbWktPmdwaW9fc2RhID0gc2RhOworCXNtaS0+Z3Bpb19zY2sgPSBzY2s7CisJc21pLT5yZXNldCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXQoJnBkZXYtPmRldiwgInN3aXRjaCIpOworCWlmICghSVNfRVJSKHNtaS0+cmVzZXQpKQorCQlzbWktPmh3X3Jlc2V0ID0gcnRsODM2Nl9zbWlfcmVzZXQ7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBydGw4MzY2X3NtaV9wcm9iZV9vZihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSkKK3sKKwlyZXR1cm4gLUVOT0RFVjsKK30KKyNlbmRpZgorCitpbnQgcnRsODM2Nl9zbWlfcHJvYmVfcGxhdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSkKK3sKKwlzdHJ1Y3QgcnRsODM2Nl9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJaWYgKCFwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhIHNwZWNpZmllZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNtaS0+Z3Bpb19zZGEgPSBwZGF0YS0+Z3Bpb19zZGE7CisJc21pLT5ncGlvX3NjayA9IHBkYXRhLT5ncGlvX3NjazsKKwlzbWktPmh3X3Jlc2V0ID0gcGRhdGEtPmh3X3Jlc2V0OworCisJcmV0dXJuIDA7Cit9CisKKworc3RydWN0IHJ0bDgzNjZfc21pICpydGw4MzY2X3NtaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBydGw4MzY2X3NtaSAqc21pOworCWludCBlcnI7CisKKwlzbWkgPSBydGw4MzY2X3NtaV9hbGxvYygmcGRldi0+ZGV2KTsKKwlpZiAoIXNtaSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAocGRldi0+ZGV2Lm9mX25vZGUpCisJCWVyciA9IHJ0bDgzNjZfc21pX3Byb2JlX29mKHBkZXYsIHNtaSk7CisJZWxzZQorCQllcnIgPSBydGw4MzY2X3NtaV9wcm9iZV9wbGF0KHBkZXYsIHNtaSk7CisKKwlpZiAoZXJyKQorCQlnb3RvIGZyZWVfc21pOworCisJcmV0dXJuIHNtaTsKKworZnJlZV9zbWk6CisJa2ZyZWUoc21pKTsKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocnRsODM2Nl9zbWlfcHJvYmUpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlJlYWx0ZWsgUlRMODM2NiBTTUkgaW50ZXJmYWNlIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiR2Fib3IgSnVob3MgPGp1aG9zZ0BvcGVud3J0Lm9yZz4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9ydGw4MzY2X3NtaS5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9uZXQvcGh5L3J0bDgzNjZfc21pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFkOTg4YQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9ydGw4MzY2X3NtaS5oCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogUmVhbHRlayBSVEw4MzY2IFNNSSBpbnRlcmZhY2UgZHJpdmVyIGRlZmluZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBHYWJvciBKdWhvcyA8anVob3NnQG9wZW53cnQub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfUlRMODM2Nl9TTUlfSAorI2RlZmluZSBfUlRMODM2Nl9TTUlfSAorCisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisjaW5jbHVkZSA8bGludXgvc3dpdGNoLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVzZXQuaD4KKworc3RydWN0IHJ0bDgzNjZfc21pX29wczsKK3N0cnVjdCBydGw4MzY2X3ZsYW5fb3BzOworc3RydWN0IG1paV9idXM7CitzdHJ1Y3QgZGVudHJ5Oworc3RydWN0IGlub2RlOworc3RydWN0IGZpbGU7CisKK3N0cnVjdCBydGw4MzY2X21pYl9jb3VudGVyIHsKKwl1bnNpZ25lZAliYXNlOworCXVuc2lnbmVkCW9mZnNldDsKKwl1bnNpZ25lZAlsZW5ndGg7CisJY29uc3QgY2hhcgkqbmFtZTsKK307CisKK3N0cnVjdCBydGw4MzY2X3NtaSB7CisJc3RydWN0IGRldmljZQkJKnBhcmVudDsKKwl1bnNpZ25lZCBpbnQJCWdwaW9fc2RhOworCXVuc2lnbmVkIGludAkJZ3Bpb19zY2s7CisJdm9pZAkJCSgqaHdfcmVzZXQpKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLCBib29sIGFjdGl2ZSk7CisJdW5zaWduZWQgaW50CQljbGtfZGVsYXk7CS8qIG5zICovCisJdTgJCQljbWRfcmVhZDsKKwl1OAkJCWNtZF93cml0ZTsKKwlzcGlubG9ja190CQlsb2NrOworCXN0cnVjdCBtaWlfYnVzCQkqbWlpX2J1czsKKwlpbnQJCQltaWlfaXJxW1BIWV9NQVhfQUREUl07CisJc3RydWN0IHN3aXRjaF9kZXYJc3dfZGV2OworCisJdW5zaWduZWQgaW50CQljcHVfcG9ydDsKKwl1bnNpZ25lZCBpbnQJCW51bV9wb3J0czsKKwl1bnNpZ25lZCBpbnQJCW51bV92bGFuX21jOworCXVuc2lnbmVkIGludAkJbnVtX21pYl9jb3VudGVyczsKKwlzdHJ1Y3QgcnRsODM2Nl9taWJfY291bnRlciAqbWliX2NvdW50ZXJzOworCisJc3RydWN0IHJ0bDgzNjZfc21pX29wcwkqb3BzOworCisJaW50CQkJdmxhbl9lbmFibGVkOworCWludAkJCXZsYW40a19lbmFibGVkOworCisJY2hhcgkJCWJ1Zls0MDk2XTsKKworCXN0cnVjdCByZXNldF9jb250cm9sCSpyZXNldDsKKworI2lmZGVmIENPTkZJR19SVEw4MzY2X1NNSV9ERUJVR19GUworCXN0cnVjdCBkZW50cnkgICAgICAgICAgICpkZWJ1Z2ZzX3Jvb3Q7CisJdTE2CQkJZGJnX3JlZzsKKwl1OAkJCWRiZ192bGFuXzRrX3BhZ2U7CisjZW5kaWYKKwlzdHJ1Y3QgbWlpX2J1cwkJKmV4dF9tYnVzOworfTsKKworc3RydWN0IHJ0bDgzNjZfdmxhbl9tYyB7CisJdTE2CXZpZDsKKwl1MTYJdW50YWc7CisJdTE2CW1lbWJlcjsKKwl1OAlmaWQ7CisJdTgJcHJpb3JpdHk7Cit9OworCitzdHJ1Y3QgcnRsODM2Nl92bGFuXzRrIHsKKwl1MTYJdmlkOworCXUxNgl1bnRhZzsKKwl1MTYJbWVtYmVyOworCXU4CWZpZDsKK307CisKK3N0cnVjdCBydGw4MzY2X3NtaV9vcHMgeworCWludAkoKmRldGVjdCkoc3RydWN0IHJ0bDgzNjZfc21pICpzbWkpOworCWludAkoKnJlc2V0X2NoaXApKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pKTsKKwlpbnQJKCpzZXR1cCkoc3RydWN0IHJ0bDgzNjZfc21pICpzbWkpOworCisJaW50CSgqbWlpX3JlYWQpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnKTsKKwlpbnQJKCptaWlfd3JpdGUpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnLCB1MTYgdmFsKTsKKworCWludAkoKmdldF92bGFuX21jKShzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwgdTMyIGluZGV4LAorCQkJICAgICAgIHN0cnVjdCBydGw4MzY2X3ZsYW5fbWMgKnZsYW5tYyk7CisJaW50CSgqc2V0X3ZsYW5fbWMpKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLCB1MzIgaW5kZXgsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHJ0bDgzNjZfdmxhbl9tYyAqdmxhbm1jKTsKKwlpbnQJKCpnZXRfdmxhbl80aykoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIHUzMiB2aWQsCisJCQkgICAgICAgc3RydWN0IHJ0bDgzNjZfdmxhbl80ayAqdmxhbjRrKTsKKwlpbnQJKCpzZXRfdmxhbl80aykoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHJ0bDgzNjZfdmxhbl80ayAqdmxhbjRrKTsKKwlpbnQJKCpnZXRfbWNfaW5kZXgpKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLCBpbnQgcG9ydCwgaW50ICp2YWwpOworCWludAkoKnNldF9tY19pbmRleCkoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIGludCBwb3J0LCBpbnQgaW5kZXgpOworCWludAkoKmdldF9taWJfY291bnRlcikoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIGludCBjb3VudGVyLAorCQkJCSAgIGludCBwb3J0LCB1bnNpZ25lZCBsb25nIGxvbmcgKnZhbCk7CisJaW50CSgqaXNfdmxhbl92YWxpZCkoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIHVuc2lnbmVkIHZsYW4pOworCWludAkoKmVuYWJsZV92bGFuKShzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwgaW50IGVuYWJsZSk7CisJaW50CSgqZW5hYmxlX3ZsYW40aykoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIGludCBlbmFibGUpOworCWludAkoKmVuYWJsZV9wb3J0KShzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwgaW50IHBvcnQsIGludCBlbmFibGUpOworfTsKKworc3RydWN0IHJ0bDgzNjZfc21pICpydGw4MzY2X3NtaV9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQpOworaW50IHJ0bDgzNjZfc21pX2luaXQoc3RydWN0IHJ0bDgzNjZfc21pICpzbWkpOwordm9pZCBydGw4MzY2X3NtaV9jbGVhbnVwKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pKTsKK2ludCBydGw4MzY2X3NtaV93cml0ZV9yZWcoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIHUzMiBhZGRyLCB1MzIgZGF0YSk7CitpbnQgcnRsODM2Nl9zbWlfd3JpdGVfcmVnX25vYWNrKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLCB1MzIgYWRkciwgdTMyIGRhdGEpOworaW50IHJ0bDgzNjZfc21pX3JlYWRfcmVnKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLCB1MzIgYWRkciwgdTMyICpkYXRhKTsKK2ludCBydGw4MzY2X3NtaV9ybXdyKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLCB1MzIgYWRkciwgdTMyIG1hc2ssIHUzMiBkYXRhKTsKKworaW50IHJ0bDgzNjZfcmVzZXRfdmxhbihzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSk7CitpbnQgcnRsODM2Nl9lbmFibGVfdmxhbihzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwgaW50IGVuYWJsZSk7CitpbnQgcnRsODM2Nl9lbmFibGVfYWxsX3BvcnRzKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLCBpbnQgZW5hYmxlKTsKKworI2lmZGVmIENPTkZJR19SVEw4MzY2X1NNSV9ERUJVR19GUworaW50IHJ0bDgzNjZfZGVidWdmc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBydGw4MzY2X3NtaSAqc3dfdG9fcnRsODM2Nl9zbWkoc3RydWN0IHN3aXRjaF9kZXYgKnN3KQoreworCXJldHVybiBjb250YWluZXJfb2Yoc3csIHN0cnVjdCBydGw4MzY2X3NtaSwgc3dfZGV2KTsKK30KKworaW50IHJ0bDgzNjZfc3dfcmVzZXRfc3dpdGNoKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYpOworaW50IHJ0bDgzNjZfc3dfZ2V0X3BvcnRfcHZpZChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBpbnQgcG9ydCwgaW50ICp2YWwpOworaW50IHJ0bDgzNjZfc3dfc2V0X3BvcnRfcHZpZChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBpbnQgcG9ydCwgaW50IHZhbCk7CitpbnQgcnRsODM2Nl9zd19nZXRfcG9ydF9taWIoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCSAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkgICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCk7CitpbnQgcnRsODM2Nl9zd19nZXRfdmxhbl9pbmZvKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCSAgICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCk7CitpbnQgcnRsODM2Nl9zd19nZXRfdmxhbl9maWQoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCSAgICAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJICAgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKTsKK2ludCBydGw4MzY2X3N3X3NldF92bGFuX2ZpZChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkgICAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpOworaW50IHJ0bDgzNjZfc3dfZ2V0X3ZsYW5fcG9ydHMoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgc3RydWN0IHN3aXRjaF92YWwgKnZhbCk7CitpbnQgcnRsODM2Nl9zd19zZXRfdmxhbl9wb3J0cyhzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKTsKK2ludCBydGw4MzY2X3N3X2dldF92bGFuX2VuYWJsZShzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCSAgICAgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKTsKK2ludCBydGw4MzY2X3N3X3NldF92bGFuX2VuYWJsZShzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCSAgICAgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKTsKK2ludCBydGw4MzY2X3N3X2dldF9wb3J0X3N0YXRzKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsIGludCBwb3J0LAorCQkJCXN0cnVjdCBzd2l0Y2hfcG9ydF9zdGF0cyAqc3RhdHMsCisJCQkJaW50IHR4Yl9pZCwgaW50IHJ4Yl9pZCk7CisKK3N0cnVjdCBydGw4MzY2X3NtaSogcnRsODM2Nl9zbWlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CisKKyNlbmRpZiAvKiAgX1JUTDgzNjZfU01JX0ggKi8KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9ydGw4MzY2cmIuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9ydGw4MzY2cmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTAxMTYwCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9uZXQvcGh5L3J0bDgzNjZyYi5jCkBAIC0wLDAgKzEsMTUzMiBAQAorLyoKKyAqIFBsYXRmb3JtIGRyaXZlciBmb3IgdGhlIFJlYWx0ZWsgUlRMODM2NlJCIGV0aGVybmV0IHN3aXRjaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIEdhYm9yIEp1aG9zIDxqdWhvc2dAb3BlbndydC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQW50dGkgU2VwcMOkbMOkIDxhLnNlcHBhbGFAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFJvbWFuIFllcnlvbWluIDxyb21hbkBhZHZlbS5sdj4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBDb2xpbiBMZWl0bmVyIDxjb2xpbi5sZWl0bmVyQGdvb2dsZW1haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9ydGw4MzY2Lmg+CisKKyNpbmNsdWRlICJydGw4MzY2X3NtaS5oIgorCisjZGVmaW5lIFJUTDgzNjZSQl9EUklWRVJfREVTQwkiUmVhbHRlayBSVEw4MzY2UkIgZXRoZXJuZXQgc3dpdGNoIGRyaXZlciIKKyNkZWZpbmUgUlRMODM2NlJCX0RSSVZFUl9WRVIJIjAuMi40IgorCisjZGVmaW5lIFJUTDgzNjZSQl9QSFlfTk9fTUFYCTQKKyNkZWZpbmUgUlRMODM2NlJCX1BIWV9QQUdFX01BWAk3CisjZGVmaW5lIFJUTDgzNjZSQl9QSFlfQUREUl9NQVgJMzEKKworLyogU3dpdGNoIEdsb2JhbCBDb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIFJUTDgzNjZSQl9TR0NSCQkJCTB4MDAwMAorI2RlZmluZSBSVEw4MzY2UkJfU0dDUl9FTl9CQ19TVE9STV9DVFJMCQlCSVQoMCkKKyNkZWZpbmUgUlRMODM2NlJCX1NHQ1JfTUFYX0xFTkdUSChfeCkJCShfeCA8PCA0KQorI2RlZmluZSBSVEw4MzY2UkJfU0dDUl9NQVhfTEVOR1RIX01BU0sJCVJUTDgzNjZSQl9TR0NSX01BWF9MRU5HVEgoMHgzKQorI2RlZmluZSBSVEw4MzY2UkJfU0dDUl9NQVhfTEVOR1RIXzE1MjIJCVJUTDgzNjZSQl9TR0NSX01BWF9MRU5HVEgoMHgwKQorI2RlZmluZSBSVEw4MzY2UkJfU0dDUl9NQVhfTEVOR1RIXzE1MzYJCVJUTDgzNjZSQl9TR0NSX01BWF9MRU5HVEgoMHgxKQorI2RlZmluZSBSVEw4MzY2UkJfU0dDUl9NQVhfTEVOR1RIXzE1NTIJCVJUTDgzNjZSQl9TR0NSX01BWF9MRU5HVEgoMHgyKQorI2RlZmluZSBSVEw4MzY2UkJfU0dDUl9NQVhfTEVOR1RIXzkyMTYJCVJUTDgzNjZSQl9TR0NSX01BWF9MRU5HVEgoMHgzKQorI2RlZmluZSBSVEw4MzY2UkJfU0dDUl9FTl9WTEFOCQkJQklUKDEzKQorI2RlZmluZSBSVEw4MzY2UkJfU0dDUl9FTl9WTEFOXzRLVEIJCUJJVCgxNCkKKworLyogUG9ydCBFbmFibGUgQ29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBSVEw4MzY2UkJfUEVDUgkJCQkweDAwMDEKKworLyogUG9ydCBNaXJyb3IgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBSVEw4MzY2UkJfUE1DUgkJCQkweDAwMDcKKyNkZWZpbmUgUlRMODM2NlJCX1BNQ1JfU09VUkNFX1BPUlQoX3gpCQkoX3gpCisjZGVmaW5lIFJUTDgzNjZSQl9QTUNSX1NPVVJDRV9QT1JUX01BU0sJCTB4MDAwZgorI2RlZmluZSBSVEw4MzY2UkJfUE1DUl9NT05JVE9SX1BPUlQoX3gpCQkoKF94KSA8PCA0KQorI2RlZmluZSBSVEw4MzY2UkJfUE1DUl9NT05JVE9SX1BPUlRfTUFTSwkweDAwZjAKKyNkZWZpbmUgUlRMODM2NlJCX1BNQ1JfTUlSUk9SX1JYCQlCSVQoOCkKKyNkZWZpbmUgUlRMODM2NlJCX1BNQ1JfTUlSUk9SX1RYCQlCSVQoOSkKKyNkZWZpbmUgUlRMODM2NlJCX1BNQ1JfTUlSUk9SX1NQQwkJQklUKDEwKQorI2RlZmluZSBSVEw4MzY2UkJfUE1DUl9NSVJST1JfSVNPCQlCSVQoMTEpCisKKy8qIFN3aXRjaCBTZWN1cml0eSBDb250cm9sIHJlZ2lzdGVycyAqLworI2RlZmluZSBSVEw4MzY2UkJfU1NDUjAJCQkJMHgwMDAyCisjZGVmaW5lIFJUTDgzNjZSQl9TU0NSMQkJCQkweDAwMDMKKyNkZWZpbmUgUlRMODM2NlJCX1NTQ1IyCQkJCTB4MDAwNAorI2RlZmluZSBSVEw4MzY2UkJfU1NDUjJfRFJPUF9VTktOT1dOX0RBCQlCSVQoMCkKKworI2RlZmluZSBSVEw4MzY2UkJfUkVTRVRfQ1RSTF9SRUcJCTB4MDEwMAorI2RlZmluZSBSVEw4MzY2UkJfQ0hJUF9DVFJMX1JFU0VUX0hXCQkxCisjZGVmaW5lIFJUTDgzNjZSQl9DSElQX0NUUkxfUkVTRVRfU1cJCSgxIDw8IDEpCisKKyNkZWZpbmUgUlRMODM2NlJCX0NISVBfVkVSU0lPTl9DVFJMX1JFRwkJMHgwNTBBCisjZGVmaW5lIFJUTDgzNjZSQl9DSElQX1ZFUlNJT05fTUFTSwkJMHhmCisjZGVmaW5lIFJUTDgzNjZSQl9DSElQX0lEX1JFRwkJCTB4MDUwOQorI2RlZmluZSBSVEw4MzY2UkJfQ0hJUF9JRF84MzY2CQkJMHg1OTM3CisKKy8qIFBIWSByZWdpc3RlcnMgY29udHJvbCAqLworI2RlZmluZSBSVEw4MzY2UkJfUEhZX0FDQ0VTU19DVFJMX1JFRwkJMHg4MDAwCisjZGVmaW5lIFJUTDgzNjZSQl9QSFlfQUNDRVNTX0RBVEFfUkVHCQkweDgwMDIKKworI2RlZmluZSBSVEw4MzY2UkJfUEhZX0NUUkxfUkVBRAkJCTEKKyNkZWZpbmUgUlRMODM2NlJCX1BIWV9DVFJMX1dSSVRFCQkwCisKKyNkZWZpbmUgUlRMODM2NlJCX1BIWV9SRUdfTUFTSwkJCTB4MWYKKyNkZWZpbmUgUlRMODM2NlJCX1BIWV9QQUdFX09GRlNFVAkJNQorI2RlZmluZSBSVEw4MzY2UkJfUEhZX1BBR0VfTUFTSwkJCSgweGYgPDwgNSkKKyNkZWZpbmUgUlRMODM2NlJCX1BIWV9OT19PRkZTRVQJCQk5CisjZGVmaW5lIFJUTDgzNjZSQl9QSFlfTk9fTUFTSwkJCSgweDFmIDw8IDkpCisKKyNkZWZpbmUgUlRMODM2NlJCX1ZMQU5fSU5HUkVTU19DVFJMMl9SRUcJMHgwMzdmCisKKy8qIExFRCBjb250cm9sIHJlZ2lzdGVycyAqLworI2RlZmluZSBSVEw4MzY2UkJfTEVEX0JMSU5LUkFURV9SRUcJCTB4MDQzMAorI2RlZmluZSBSVEw4MzY2UkJfTEVEX0JMSU5LUkFURV9CSVQJCTAKKyNkZWZpbmUgUlRMODM2NlJCX0xFRF9CTElOS1JBVEVfTUFTSwkJMHgwMDA3CisKKyNkZWZpbmUgUlRMODM2NlJCX0xFRF9DVFJMX1JFRwkJCTB4MDQzMQorI2RlZmluZSBSVEw4MzY2UkJfTEVEXzBfMV9DVFJMX1JFRwkJMHgwNDMyCisjZGVmaW5lIFJUTDgzNjZSQl9MRURfMl8zX0NUUkxfUkVHCQkweDA0MzMKKworI2RlZmluZSBSVEw4MzY2UkJfTUlCX0NPVU5UCQkJMzMKKyNkZWZpbmUgUlRMODM2NlJCX0dMT0JBTF9NSUJfQ09VTlQJCTEKKyNkZWZpbmUgUlRMODM2NlJCX01JQl9DT1VOVEVSX1BPUlRfT0ZGU0VUCTB4MDA1MAorI2RlZmluZSBSVEw4MzY2UkJfTUlCX0NPVU5URVJfQkFTRQkJMHgxMDAwCisjZGVmaW5lIFJUTDgzNjZSQl9NSUJfQ1RSTF9SRUcJCQkweDEzRjAKKyNkZWZpbmUgUlRMODM2NlJCX01JQl9DVFJMX1VTRVJfTUFTSwkJMHgwRkZDCisjZGVmaW5lIFJUTDgzNjZSQl9NSUJfQ1RSTF9CVVNZX01BU0sJCUJJVCgwKQorI2RlZmluZSBSVEw4MzY2UkJfTUlCX0NUUkxfUkVTRVRfTUFTSwkJQklUKDEpCisjZGVmaW5lIFJUTDgzNjZSQl9NSUJfQ1RSTF9QT1JUX1JFU0VUKF9wKQlCSVQoMiArIChfcCkpCisjZGVmaW5lIFJUTDgzNjZSQl9NSUJfQ1RSTF9HTE9CQUxfUkVTRVQJCUJJVCgxMSkKKworI2RlZmluZSBSVEw4MzY2UkJfUE9SVF9WTEFOX0NUUkxfQkFTRQkJMHgwMDYzCisjZGVmaW5lIFJUTDgzNjZSQl9QT1JUX1ZMQU5fQ1RSTF9SRUcoX3ApICBcCisJCShSVEw4MzY2UkJfUE9SVF9WTEFOX0NUUkxfQkFTRSArIChfcCkgLyA0KQorI2RlZmluZSBSVEw4MzY2UkJfUE9SVF9WTEFOX0NUUkxfTUFTSwkJMHhmCisjZGVmaW5lIFJUTDgzNjZSQl9QT1JUX1ZMQU5fQ1RSTF9TSElGVChfcCkJKDQgKiAoKF9wKSAlIDQpKQorCisKKyNkZWZpbmUgUlRMODM2NlJCX1ZMQU5fVEFCTEVfUkVBRF9CQVNFCQkweDAxOEMKKyNkZWZpbmUgUlRMODM2NlJCX1ZMQU5fVEFCTEVfV1JJVEVfQkFTRQkJMHgwMTg1CisKKworI2RlZmluZSBSVEw4MzY2UkJfVEFCTEVfQUNDRVNTX0NUUkxfUkVHCQkweDAxODAKKyNkZWZpbmUgUlRMODM2NlJCX1RBQkxFX1ZMQU5fUkVBRF9DVFJMCQkweDBFMDEKKyNkZWZpbmUgUlRMODM2NlJCX1RBQkxFX1ZMQU5fV1JJVEVfQ1RSTAkJMHgwRjAxCisKKyNkZWZpbmUgUlRMODM2NlJCX1ZMQU5fTUNfQkFTRShfeCkJCSgweDAwMjAgKyAoX3gpICogMykKKworCisjZGVmaW5lIFJUTDgzNjZSQl9QT1JUX0xJTktfU1RBVFVTX0JBU0UJCTB4MDAxNAorI2RlZmluZSBSVEw4MzY2UkJfUE9SVF9TVEFUVVNfU1BFRURfTUFTSwkweDAwMDMKKyNkZWZpbmUgUlRMODM2NlJCX1BPUlRfU1RBVFVTX0RVUExFWF9NQVNLCTB4MDAwNAorI2RlZmluZSBSVEw4MzY2UkJfUE9SVF9TVEFUVVNfTElOS19NQVNLCQkweDAwMTAKKyNkZWZpbmUgUlRMODM2NlJCX1BPUlRfU1RBVFVTX1RYUEFVU0VfTUFTSwkweDAwMjAKKyNkZWZpbmUgUlRMODM2NlJCX1BPUlRfU1RBVFVTX1JYUEFVU0VfTUFTSwkweDAwNDAKKyNkZWZpbmUgUlRMODM2NlJCX1BPUlRfU1RBVFVTX0FOX01BU0sJCTB4MDA4MAorCisKKyNkZWZpbmUgUlRMODM2NlJCX1BPUlRfTlVNX0NQVQkJNQorI2RlZmluZSBSVEw4MzY2UkJfTlVNX1BPUlRTCQk2CisjZGVmaW5lIFJUTDgzNjZSQl9OVU1fVkxBTlMJCTE2CisjZGVmaW5lIFJUTDgzNjZSQl9OVU1fTEVER1JPVVBTCQk0CisjZGVmaW5lIFJUTDgzNjZSQl9OVU1fVklEUwkJNDA5NgorI2RlZmluZSBSVEw4MzY2UkJfUFJJT1JJVFlNQVgJCTcKKyNkZWZpbmUgUlRMODM2NlJCX0ZJRE1BWAkJNworCisKKyNkZWZpbmUgUlRMODM2NlJCX1BPUlRfMQkJKDEgPDwgMCkgLyogSW4gdXNlcnNwYWNlIHBvcnQgMCAqLworI2RlZmluZSBSVEw4MzY2UkJfUE9SVF8yCQkoMSA8PCAxKSAvKiBJbiB1c2Vyc3BhY2UgcG9ydCAxICovCisjZGVmaW5lIFJUTDgzNjZSQl9QT1JUXzMJCSgxIDw8IDIpIC8qIEluIHVzZXJzcGFjZSBwb3J0IDIgKi8KKyNkZWZpbmUgUlRMODM2NlJCX1BPUlRfNAkJKDEgPDwgMykgLyogSW4gdXNlcnNwYWNlIHBvcnQgMyAqLworI2RlZmluZSBSVEw4MzY2UkJfUE9SVF81CQkoMSA8PCA0KSAvKiBJbiB1c2Vyc3BhY2UgcG9ydCA0ICovCisKKyNkZWZpbmUgUlRMODM2NlJCX1BPUlRfQ1BVCQkoMSA8PCA1KSAvKiBDUFUgcG9ydCAqLworCisjZGVmaW5lIFJUTDgzNjZSQl9QT1JUX0FMTAkJKFJUTDgzNjZSQl9QT1JUXzEgfAlcCisJCQkJCSBSVEw4MzY2UkJfUE9SVF8yIHwJXAorCQkJCQkgUlRMODM2NlJCX1BPUlRfMyB8CVwKKwkJCQkJIFJUTDgzNjZSQl9QT1JUXzQgfAlcCisJCQkJCSBSVEw4MzY2UkJfUE9SVF81IHwJXAorCQkJCQkgUlRMODM2NlJCX1BPUlRfQ1BVKQorCisjZGVmaW5lIFJUTDgzNjZSQl9QT1JUX0FMTF9CVVRfQ1BVCShSVEw4MzY2UkJfUE9SVF8xIHwJXAorCQkJCQkgUlRMODM2NlJCX1BPUlRfMiB8CVwKKwkJCQkJIFJUTDgzNjZSQl9QT1JUXzMgfAlcCisJCQkJCSBSVEw4MzY2UkJfUE9SVF80IHwJXAorCQkJCQkgUlRMODM2NlJCX1BPUlRfNSkKKworI2RlZmluZSBSVEw4MzY2UkJfUE9SVF9BTExfRVhURVJOQUwJKFJUTDgzNjZSQl9QT1JUXzEgfAlcCisJCQkJCSBSVEw4MzY2UkJfUE9SVF8yIHwJXAorCQkJCQkgUlRMODM2NlJCX1BPUlRfMyB8CVwKKwkJCQkJIFJUTDgzNjZSQl9QT1JUXzQpCisKKyNkZWZpbmUgUlRMODM2NlJCX1BPUlRfQUxMX0lOVEVSTkFMCSBSVEw4MzY2UkJfUE9SVF9DUFUKKworI2RlZmluZSBSVEw4MzY2UkJfVkxBTl9WSURfTUFTSwkJMHhmZmYKKyNkZWZpbmUgUlRMODM2NlJCX1ZMQU5fUFJJT1JJVFlfU0hJRlQJMTIKKyNkZWZpbmUgUlRMODM2NlJCX1ZMQU5fUFJJT1JJVFlfTUFTSwkweDcKKyNkZWZpbmUgUlRMODM2NlJCX1ZMQU5fVU5UQUdfU0hJRlQJOAorI2RlZmluZSBSVEw4MzY2UkJfVkxBTl9VTlRBR19NQVNLCTB4ZmYKKyNkZWZpbmUgUlRMODM2NlJCX1ZMQU5fTUVNQkVSX01BU0sJMHhmZgorI2RlZmluZSBSVEw4MzY2UkJfVkxBTl9GSURfTUFTSwkJMHg3CisKKworLyogUG9ydCBpbmdyZXNzIGJhbmR3aWR0aCBjb250cm9sICovCisjZGVmaW5lIFJUTDgzNjZSQl9JQl9CQVNFCQkweDAyMDAKKyNkZWZpbmUgUlRMODM2NlJCX0lCX1JFRyhwbnVtKQkJKFJUTDgzNjZSQl9JQl9CQVNFICsgcG51bSkKKyNkZWZpbmUgUlRMODM2NlJCX0lCX0JEVEhfTUFTSwkJMHgzZmZmCisjZGVmaW5lIFJUTDgzNjZSQl9JQl9QUkVJRkdfT0ZGU0VUCTE0CisjZGVmaW5lIFJUTDgzNjZSQl9JQl9QUkVJRkdfTUFTSwkoMSA8PCBSVEw4MzY2UkJfSUJfUFJFSUZHX09GRlNFVCkKKworLyogUG9ydCBlZ3Jlc3MgYmFuZHdpZHRoIGNvbnRyb2wgKi8KKyNkZWZpbmUgUlRMODM2NlJCX0VCX0JBU0UJCTB4MDJkMQorI2RlZmluZSBSVEw4MzY2UkJfRUJfUkVHKHBudW0pCQkoUlRMODM2NlJCX0VCX0JBU0UgKyBwbnVtKQorI2RlZmluZSBSVEw4MzY2UkJfRUJfQkRUSF9NQVNLCQkweDNmZmYKKyNkZWZpbmUgUlRMODM2NlJCX0VCX1BSRUlGR19SRUcJMHgwMmY4CisjZGVmaW5lIFJUTDgzNjZSQl9FQl9QUkVJRkdfT0ZGU0VUCTkKKyNkZWZpbmUgUlRMODM2NlJCX0VCX1BSRUlGR19NQVNLCSgxIDw8IFJUTDgzNjZSQl9FQl9QUkVJRkdfT0ZGU0VUKQorCisjZGVmaW5lIFJUTDgzNjZSQl9CRFRIX1NXX01BWAkJMTA0ODUxMgorI2RlZmluZSBSVEw4MzY2UkJfQkRUSF9VTklUCQk2NAorI2RlZmluZSBSVEw4MzY2UkJfQkRUSF9SRUdfREVGQVVMVAkxNjM4MworCisvKiBRT1MgKi8KKyNkZWZpbmUgUlRMODM2NlJCX1FPU19CSVQJCTE1CisjZGVmaW5lIFJUTDgzNjZSQl9RT1NfTUFTSwkJKDEgPDwgUlRMODM2NlJCX1FPU19CSVQpCisvKiBJbmNsdWRlL0V4Y2x1ZGUgUHJlYW1ibGUgYW5kIElGRyAoMjAgYnl0ZXMpLiAwOkV4Y2x1ZGUsIDE6SW5jbHVkZS4gKi8KKyNkZWZpbmUgUlRMODM2NlJCX1FPU19ERUZBVUxUX1BSRUlGRwkxCisKKworI2RlZmluZSBSVEw4MzY2UkJfTUlCX1JYQl9JRAkJMAkvKiBJZkluT2N0ZXRzICovCisjZGVmaW5lIFJUTDgzNjZSQl9NSUJfVFhCX0lECQkyMAkvKiBJZk91dE9jdGV0cyAqLworCitzdGF0aWMgc3RydWN0IHJ0bDgzNjZfbWliX2NvdW50ZXIgcnRsODM2NnJiX21pYl9jb3VudGVyc1tdID0geworCXsgMCwgIDAsIDQsICJJZkluT2N0ZXRzIgkJCQl9LAorCXsgMCwgIDQsIDQsICJFdGhlclN0YXRzT2N0ZXRzIgkJCQl9LAorCXsgMCwgIDgsIDIsICJFdGhlclN0YXRzVW5kZXJTaXplUGt0cyIJCQl9LAorCXsgMCwgMTAsIDIsICJFdGhlckZyYWdtZW50cyIJCQkJfSwKKwl7IDAsIDEyLCAyLCAiRXRoZXJTdGF0c1BrdHM2NE9jdGV0cyIJCQl9LAorCXsgMCwgMTQsIDIsICJFdGhlclN0YXRzUGt0czY1dG8xMjdPY3RldHMiCQl9LAorCXsgMCwgMTYsIDIsICJFdGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzIgkJfSwKKwl7IDAsIDE4LCAyLCAiRXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0cyIJCX0sCisJeyAwLCAyMCwgMiwgIkV0aGVyU3RhdHNQa3RzNTEydG8xMDIzT2N0ZXRzIgkJfSwKKwl7IDAsIDIyLCAyLCAiRXRoZXJTdGF0c1BrdHMxMDI0dG8xNTE4T2N0ZXRzIgkJfSwKKwl7IDAsIDI0LCAyLCAiRXRoZXJPdmVyc2l6ZVN0YXRzIgkJCX0sCisJeyAwLCAyNiwgMiwgIkV0aGVyU3RhdHNKYWJiZXJzIgkJCQl9LAorCXsgMCwgMjgsIDIsICJJZkluVWNhc3RQa3RzIgkJCQl9LAorCXsgMCwgMzAsIDIsICJFdGhlclN0YXRzTXVsdGljYXN0UGt0cyIJCQl9LAorCXsgMCwgMzIsIDIsICJFdGhlclN0YXRzQnJvYWRjYXN0UGt0cyIJCQl9LAorCXsgMCwgMzQsIDIsICJFdGhlclN0YXRzRHJvcEV2ZW50cyIJCQl9LAorCXsgMCwgMzYsIDIsICJEb3QzU3RhdHNGQ1NFcnJvcnMiCQkJfSwKKwl7IDAsIDM4LCAyLCAiRG90M1N0YXRzU3ltYm9sRXJyb3JzIgkJCX0sCisJeyAwLCA0MCwgMiwgIkRvdDNJblBhdXNlRnJhbWVzIgkJCQl9LAorCXsgMCwgNDIsIDIsICJEb3QzQ29udHJvbEluVW5rbm93bk9wY29kZXMiCQl9LAorCXsgMCwgNDQsIDQsICJJZk91dE9jdGV0cyIJCQkJfSwKKwl7IDAsIDQ4LCAyLCAiRG90M1N0YXRzU2luZ2xlQ29sbGlzaW9uRnJhbWVzIgkJfSwKKwl7IDAsIDUwLCAyLCAiRG90M1N0YXRNdWx0aXBsZUNvbGxpc2lvbkZyYW1lcyIJCX0sCisJeyAwLCA1MiwgMiwgIkRvdDNzRGVmZXJyZWRUcmFuc21pc3Npb25zIgkJfSwKKwl7IDAsIDU0LCAyLCAiRG90M1N0YXRzTGF0ZUNvbGxpc2lvbnMiCQkJfSwKKwl7IDAsIDU2LCAyLCAiRXRoZXJTdGF0c0NvbGxpc2lvbnMiCQkJfSwKKwl7IDAsIDU4LCAyLCAiRG90M1N0YXRzRXhjZXNzaXZlQ29sbGlzaW9ucyIJCX0sCisJeyAwLCA2MCwgMiwgIkRvdDNPdXRQYXVzZUZyYW1lcyIJCQl9LAorCXsgMCwgNjIsIDIsICJEb3QxZEJhc2VQb3J0RGVsYXlFeGNlZWRlZERpc2NhcmRzIgl9LAorCXsgMCwgNjQsIDIsICJEb3QxZFRwUG9ydEluRGlzY2FyZHMiCQkJfSwKKwl7IDAsIDY2LCAyLCAiSWZPdXRVY2FzdFBrdHMiCQkJCX0sCisJeyAwLCA2OCwgMiwgIklmT3V0TXVsdGljYXN0UGt0cyIJCQl9LAorCXsgMCwgNzAsIDIsICJJZk91dEJyb2FkY2FzdFBrdHMiCQkJfSwKK307CisKKyNkZWZpbmUgUkVHX1dSKF9zbWksIF9yZWcsIF92YWwpCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQllcnIgPSBydGw4MzY2X3NtaV93cml0ZV9yZWcoX3NtaSwgX3JlZywgX3ZhbCk7CQlcCisJCWlmIChlcnIpCQkJCQkJXAorCQkJcmV0dXJuIGVycjsJCQkJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFJFR19STVcoX3NtaSwgX3JlZywgX21hc2ssIF92YWwpCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWVyciA9IHJ0bDgzNjZfc21pX3Jtd3IoX3NtaSwgX3JlZywgX21hc2ssIF92YWwpOwlcCisJCWlmIChlcnIpCQkJCQkJXAorCQkJcmV0dXJuIGVycjsJCQkJCVwKKwl9IHdoaWxlICgwKQorCitzdGF0aWMgaW50IHJ0bDgzNjZyYl9yZXNldF9jaGlwKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pKQoreworCWludCB0aW1lb3V0ID0gMTA7CisJdTMyIGRhdGE7CisKKwlydGw4MzY2X3NtaV93cml0ZV9yZWdfbm9hY2soc21pLCBSVEw4MzY2UkJfUkVTRVRfQ1RSTF9SRUcsCisJCQkgCSAgICBSVEw4MzY2UkJfQ0hJUF9DVFJMX1JFU0VUX0hXKTsKKwlkbyB7CisJCW1zbGVlcCgxKTsKKwkJaWYgKHJ0bDgzNjZfc21pX3JlYWRfcmVnKHNtaSwgUlRMODM2NlJCX1JFU0VUX0NUUkxfUkVHLCAmZGF0YSkpCisJCQlyZXR1cm4gLUVJTzsKKworCQlpZiAoIShkYXRhICYgUlRMODM2NlJCX0NISVBfQ1RSTF9SRVNFVF9IVykpCisJCQlicmVhazsKKwl9IHdoaWxlICgtLXRpbWVvdXQpOworCisJaWYgKCF0aW1lb3V0KSB7CisJCXByaW50aygiVGltZW91dCB3YWl0aW5nIGZvciB0aGUgc3dpdGNoIHRvIHJlc2V0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2NnJiX3NldHVwKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pKQoreworCWludCBlcnI7CisjaWZkZWYgQ09ORklHX09GCisJdW5zaWduZWQgaTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCXVuc2lnbmVkIG51bV9pbml0dmFsczsKKwljb25zdCBfX2JlMzIgKnBhZGRyOworCisJbnAgPSBzbWktPnBhcmVudC0+b2Zfbm9kZTsKKworCXBhZGRyID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicmVhbHRlayxpbml0dmFscyIsICZudW1faW5pdHZhbHMpOworCWlmIChwYWRkcikgeworCQlkZXZfaW5mbyhzbWktPnBhcmVudCwgImFwcGx5aW5nIGluaXR2YWxzIGZyb20gRFRTXG4iKTsKKworCQlpZiAobnVtX2luaXR2YWxzIDwgKDIgKiBzaXplb2YoKnBhZGRyKSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQludW1faW5pdHZhbHMgLz0gc2l6ZW9mKCpwYWRkcik7CisKKwkJZm9yIChpID0gMDsgaSA8IG51bV9pbml0dmFscyAtIDE7IGkgKz0gMikgeworCQkJdTMyIHJlZyA9IGJlMzJfdG9fY3B1cChwYWRkciArIGkpOworCQkJdTMyIHZhbCA9IGJlMzJfdG9fY3B1cChwYWRkciArIGkgKyAxKTsKKworCQkJUkVHX1dSKHNtaSwgcmVnLCB2YWwpOworCQl9CisJfQorI2VuZGlmCisKKwkvKiBzZXQgbWF4aW11bSBwYWNrZXQgbGVuZ3RoIHRvIDE1MzYgYnl0ZXMgKi8KKwlSRUdfUk1XKHNtaSwgUlRMODM2NlJCX1NHQ1IsIFJUTDgzNjZSQl9TR0NSX01BWF9MRU5HVEhfTUFTSywKKwkJUlRMODM2NlJCX1NHQ1JfTUFYX0xFTkdUSF8xNTM2KTsKKworCS8qIGVuYWJsZSBsZWFybmluZyBmb3IgYWxsIHBvcnRzICovCisJUkVHX1dSKHNtaSwgUlRMODM2NlJCX1NTQ1IwLCAwKTsKKworCS8qIGVuYWJsZSBhdXRvIGFnZWluZyBmb3IgYWxsIHBvcnRzICovCisJUkVHX1dSKHNtaSwgUlRMODM2NlJCX1NTQ1IxLCAwKTsKKworCS8qCisJICogZGlzY2FyZCBWTEFOIHRhZ2dlZCBwYWNrZXRzIGlmIHRoZSBwb3J0IGlzIG5vdCBhIG1lbWJlciBvZgorCSAqIHRoZSBWTEFOIHdpdGggd2hpY2ggdGhlIHBhY2tldHMgaXMgYXNzb2NpYXRlZC4KKwkgKi8KKwlSRUdfV1Ioc21pLCBSVEw4MzY2UkJfVkxBTl9JTkdSRVNTX0NUUkwyX1JFRywgUlRMODM2NlJCX1BPUlRfQUxMKTsKKworCS8qIGRvbid0IGRyb3AgcGFja2V0cyB3aG9zZSBEQSBoYXMgbm90IGJlZW4gbGVhcm5lZCAqLworCVJFR19STVcoc21pLCBSVEw4MzY2UkJfU1NDUjIsIFJUTDgzNjZSQl9TU0NSMl9EUk9QX1VOS05PV05fREEsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2NnJiX3JlYWRfcGh5X3JlZyhzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwKKwkJCQkgdTMyIHBoeV9ubywgdTMyIHBhZ2UsIHUzMiBhZGRyLCB1MzIgKmRhdGEpCit7CisJdTMyIHJlZzsKKwlpbnQgcmV0OworCisJaWYgKHBoeV9ubyA+IFJUTDgzNjZSQl9QSFlfTk9fTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChwYWdlID4gUlRMODM2NlJCX1BIWV9QQUdFX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYWRkciA+IFJUTDgzNjZSQl9QSFlfQUREUl9NQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gcnRsODM2Nl9zbWlfd3JpdGVfcmVnKHNtaSwgUlRMODM2NlJCX1BIWV9BQ0NFU1NfQ1RSTF9SRUcsCisJCQkJICAgIFJUTDgzNjZSQl9QSFlfQ1RSTF9SRUFEKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmVnID0gMHg4MDAwIHwgKDEgPDwgKHBoeV9ubyArIFJUTDgzNjZSQl9QSFlfTk9fT0ZGU0VUKSkgfAorCSAgICAgICgocGFnZSA8PCBSVEw4MzY2UkJfUEhZX1BBR0VfT0ZGU0VUKSAmIFJUTDgzNjZSQl9QSFlfUEFHRV9NQVNLKSB8CisJICAgICAgKGFkZHIgJiBSVEw4MzY2UkJfUEhZX1JFR19NQVNLKTsKKworCXJldCA9IHJ0bDgzNjZfc21pX3dyaXRlX3JlZyhzbWksIHJlZywgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHJ0bDgzNjZfc21pX3JlYWRfcmVnKHNtaSwgUlRMODM2NlJCX1BIWV9BQ0NFU1NfREFUQV9SRUcsIGRhdGEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MzY2cmJfd3JpdGVfcGh5X3JlZyhzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwKKwkJCQkgIHUzMiBwaHlfbm8sIHUzMiBwYWdlLCB1MzIgYWRkciwgdTMyIGRhdGEpCit7CisJdTMyIHJlZzsKKwlpbnQgcmV0OworCisJaWYgKHBoeV9ubyA+IFJUTDgzNjZSQl9QSFlfTk9fTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChwYWdlID4gUlRMODM2NlJCX1BIWV9QQUdFX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYWRkciA+IFJUTDgzNjZSQl9QSFlfQUREUl9NQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gcnRsODM2Nl9zbWlfd3JpdGVfcmVnKHNtaSwgUlRMODM2NlJCX1BIWV9BQ0NFU1NfQ1RSTF9SRUcsCisJCQkJICAgIFJUTDgzNjZSQl9QSFlfQ1RSTF9XUklURSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJlZyA9IDB4ODAwMCB8ICgxIDw8IChwaHlfbm8gKyBSVEw4MzY2UkJfUEhZX05PX09GRlNFVCkpIHwKKwkgICAgICAoKHBhZ2UgPDwgUlRMODM2NlJCX1BIWV9QQUdFX09GRlNFVCkgJiBSVEw4MzY2UkJfUEhZX1BBR0VfTUFTSykgfAorCSAgICAgIChhZGRyICYgUlRMODM2NlJCX1BIWV9SRUdfTUFTSyk7CisKKwlyZXQgPSBydGw4MzY2X3NtaV93cml0ZV9yZWcoc21pLCByZWcsIGRhdGEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MzY2cmJfZ2V0X21pYl9jb3VudGVyKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLCBpbnQgY291bnRlciwKKwkJCQkgICAgIGludCBwb3J0LCB1bnNpZ25lZCBsb25nIGxvbmcgKnZhbCkKK3sKKwlpbnQgaTsKKwlpbnQgZXJyOworCXUzMiBhZGRyLCBkYXRhOworCXU2NCBtaWJ2YWx1ZTsKKworCWlmIChwb3J0ID4gUlRMODM2NlJCX05VTV9QT1JUUyB8fCBjb3VudGVyID49IFJUTDgzNjZSQl9NSUJfQ09VTlQpCisJCXJldHVybiAtRUlOVkFMOworCisJYWRkciA9IFJUTDgzNjZSQl9NSUJfQ09VTlRFUl9CQVNFICsKKwkgICAgICAgUlRMODM2NlJCX01JQl9DT1VOVEVSX1BPUlRfT0ZGU0VUICogKHBvcnQpICsKKwkgICAgICAgcnRsODM2NnJiX21pYl9jb3VudGVyc1tjb3VudGVyXS5vZmZzZXQ7CisKKwkvKgorCSAqIFdyaXRpbmcgYWNjZXNzIGNvdW50ZXIgYWRkcmVzcyBmaXJzdAorCSAqIHRoZW4gQVNJQyB3aWxsIHByZXBhcmUgNjRiaXRzIGNvdW50ZXIgd2FpdCBmb3IgYmVpbmcgcmV0cml2ZWQKKwkgKi8KKwlkYXRhID0gMDsgLyogd3JpdGluZyBkYXRhIHdpbGwgYmUgZGlzY2FyZCBieSBBU0lDICovCisJZXJyID0gcnRsODM2Nl9zbWlfd3JpdGVfcmVnKHNtaSwgYWRkciwgZGF0YSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIHJlYWQgTUlCIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwllcnIgPSAgcnRsODM2Nl9zbWlfcmVhZF9yZWcoc21pLCBSVEw4MzY2UkJfTUlCX0NUUkxfUkVHLCAmZGF0YSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmIChkYXRhICYgUlRMODM2NlJCX01JQl9DVFJMX0JVU1lfTUFTSykKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmIChkYXRhICYgUlRMODM2NlJCX01JQl9DVFJMX1JFU0VUX01BU0spCisJCXJldHVybiAtRUlPOworCisJbWlidmFsdWUgPSAwOworCWZvciAoaSA9IHJ0bDgzNjZyYl9taWJfY291bnRlcnNbY291bnRlcl0ubGVuZ3RoOyBpID4gMDsgaS0tKSB7CisJCWVyciA9IHJ0bDgzNjZfc21pX3JlYWRfcmVnKHNtaSwgYWRkciArIChpIC0gMSksICZkYXRhKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJbWlidmFsdWUgPSAobWlidmFsdWUgPDwgMTYpIHwgKGRhdGEgJiAweEZGRkYpOworCX0KKworCSp2YWwgPSBtaWJ2YWx1ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MzY2cmJfZ2V0X3ZsYW5fNGsoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIHUzMiB2aWQsCisJCQkJIHN0cnVjdCBydGw4MzY2X3ZsYW5fNGsgKnZsYW40aykKK3sKKwl1MzIgZGF0YVszXTsKKwlpbnQgZXJyOworCWludCBpOworCisJbWVtc2V0KHZsYW40aywgJ1wwJywgc2l6ZW9mKHN0cnVjdCBydGw4MzY2X3ZsYW5fNGspKTsKKworCWlmICh2aWQgPj0gUlRMODM2NlJCX05VTV9WSURTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIHdyaXRlIFZJRCAqLworCWVyciA9IHJ0bDgzNjZfc21pX3dyaXRlX3JlZyhzbWksIFJUTDgzNjZSQl9WTEFOX1RBQkxFX1dSSVRFX0JBU0UsCisJCQkJICAgIHZpZCAmIFJUTDgzNjZSQl9WTEFOX1ZJRF9NQVNLKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogd3JpdGUgdGFibGUgYWNjZXNzIGNvbnRyb2wgd29yZCAqLworCWVyciA9IHJ0bDgzNjZfc21pX3dyaXRlX3JlZyhzbWksIFJUTDgzNjZSQl9UQUJMRV9BQ0NFU1NfQ1RSTF9SRUcsCisJCQkJICAgIFJUTDgzNjZSQl9UQUJMRV9WTEFOX1JFQURfQ1RSTCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJZXJyID0gcnRsODM2Nl9zbWlfcmVhZF9yZWcoc21pLAorCQkJCQkgICBSVEw4MzY2UkJfVkxBTl9UQUJMRV9SRUFEX0JBU0UgKyBpLAorCQkJCQkgICAmZGF0YVtpXSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXZsYW40ay0+dmlkID0gdmlkOworCXZsYW40ay0+dW50YWcgPSAoZGF0YVsxXSA+PiBSVEw4MzY2UkJfVkxBTl9VTlRBR19TSElGVCkgJgorCQkJUlRMODM2NlJCX1ZMQU5fVU5UQUdfTUFTSzsKKwl2bGFuNGstPm1lbWJlciA9IGRhdGFbMV0gJiBSVEw4MzY2UkJfVkxBTl9NRU1CRVJfTUFTSzsKKwl2bGFuNGstPmZpZCA9IGRhdGFbMl0gJiBSVEw4MzY2UkJfVkxBTl9GSURfTUFTSzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjZyYl9zZXRfdmxhbl80ayhzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwKKwkJCQkgY29uc3Qgc3RydWN0IHJ0bDgzNjZfdmxhbl80ayAqdmxhbjRrKQoreworCXUzMiBkYXRhWzNdOworCWludCBlcnI7CisJaW50IGk7CisKKwlpZiAodmxhbjRrLT52aWQgPj0gUlRMODM2NlJCX05VTV9WSURTIHx8CisJICAgIHZsYW40ay0+bWVtYmVyID4gUlRMODM2NlJCX1ZMQU5fTUVNQkVSX01BU0sgfHwKKwkgICAgdmxhbjRrLT51bnRhZyA+IFJUTDgzNjZSQl9WTEFOX1VOVEFHX01BU0sgfHwKKwkgICAgdmxhbjRrLT5maWQgPiBSVEw4MzY2UkJfRklETUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGFbMF0gPSB2bGFuNGstPnZpZCAmIFJUTDgzNjZSQl9WTEFOX1ZJRF9NQVNLOworCWRhdGFbMV0gPSAodmxhbjRrLT5tZW1iZXIgJiBSVEw4MzY2UkJfVkxBTl9NRU1CRVJfTUFTSykgfAorCQkgICgodmxhbjRrLT51bnRhZyAmIFJUTDgzNjZSQl9WTEFOX1VOVEFHX01BU0spIDw8CisJCQlSVEw4MzY2UkJfVkxBTl9VTlRBR19TSElGVCk7CisJZGF0YVsyXSA9IHZsYW40ay0+ZmlkICYgUlRMODM2NlJCX1ZMQU5fRklEX01BU0s7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCWVyciA9IHJ0bDgzNjZfc21pX3dyaXRlX3JlZyhzbWksCisJCQkJCSAgICBSVEw4MzY2UkJfVkxBTl9UQUJMRV9XUklURV9CQVNFICsgaSwKKwkJCQkJICAgIGRhdGFbaV0pOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiB3cml0ZSB0YWJsZSBhY2Nlc3MgY29udHJvbCB3b3JkICovCisJZXJyID0gcnRsODM2Nl9zbWlfd3JpdGVfcmVnKHNtaSwgUlRMODM2NlJCX1RBQkxFX0FDQ0VTU19DVFJMX1JFRywKKwkJCQkgICAgUlRMODM2NlJCX1RBQkxFX1ZMQU5fV1JJVEVfQ1RSTCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjZyYl9nZXRfdmxhbl9tYyhzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwgdTMyIGluZGV4LAorCQkJCSBzdHJ1Y3QgcnRsODM2Nl92bGFuX21jICp2bGFubWMpCit7CisJdTMyIGRhdGFbM107CisJaW50IGVycjsKKwlpbnQgaTsKKworCW1lbXNldCh2bGFubWMsICdcMCcsIHNpemVvZihzdHJ1Y3QgcnRsODM2Nl92bGFuX21jKSk7CisKKwlpZiAoaW5kZXggPj0gUlRMODM2NlJCX05VTV9WTEFOUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCWVyciA9IHJ0bDgzNjZfc21pX3JlYWRfcmVnKHNtaSwKKwkJCQkJICAgUlRMODM2NlJCX1ZMQU5fTUNfQkFTRShpbmRleCkgKyBpLAorCQkJCQkgICAmZGF0YVtpXSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXZsYW5tYy0+dmlkID0gZGF0YVswXSAmIFJUTDgzNjZSQl9WTEFOX1ZJRF9NQVNLOworCXZsYW5tYy0+cHJpb3JpdHkgPSAoZGF0YVswXSA+PiBSVEw4MzY2UkJfVkxBTl9QUklPUklUWV9TSElGVCkgJgorCQkJICAgUlRMODM2NlJCX1ZMQU5fUFJJT1JJVFlfTUFTSzsKKwl2bGFubWMtPnVudGFnID0gKGRhdGFbMV0gPj4gUlRMODM2NlJCX1ZMQU5fVU5UQUdfU0hJRlQpICYKKwkJCVJUTDgzNjZSQl9WTEFOX1VOVEFHX01BU0s7CisJdmxhbm1jLT5tZW1iZXIgPSBkYXRhWzFdICYgUlRMODM2NlJCX1ZMQU5fTUVNQkVSX01BU0s7CisJdmxhbm1jLT5maWQgPSBkYXRhWzJdICYgUlRMODM2NlJCX1ZMQU5fRklEX01BU0s7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MzY2cmJfc2V0X3ZsYW5fbWMoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIHUzMiBpbmRleCwKKwkJCQkgY29uc3Qgc3RydWN0IHJ0bDgzNjZfdmxhbl9tYyAqdmxhbm1jKQoreworCXUzMiBkYXRhWzNdOworCWludCBlcnI7CisJaW50IGk7CisKKwlpZiAoaW5kZXggPj0gUlRMODM2NlJCX05VTV9WTEFOUyB8fAorCSAgICB2bGFubWMtPnZpZCA+PSBSVEw4MzY2UkJfTlVNX1ZJRFMgfHwKKwkgICAgdmxhbm1jLT5wcmlvcml0eSA+IFJUTDgzNjZSQl9QUklPUklUWU1BWCB8fAorCSAgICB2bGFubWMtPm1lbWJlciA+IFJUTDgzNjZSQl9WTEFOX01FTUJFUl9NQVNLIHx8CisJICAgIHZsYW5tYy0+dW50YWcgPiBSVEw4MzY2UkJfVkxBTl9VTlRBR19NQVNLIHx8CisJICAgIHZsYW5tYy0+ZmlkID4gUlRMODM2NlJCX0ZJRE1BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkYXRhWzBdID0gKHZsYW5tYy0+dmlkICYgUlRMODM2NlJCX1ZMQU5fVklEX01BU0spIHwKKwkJICAoKHZsYW5tYy0+cHJpb3JpdHkgJiBSVEw4MzY2UkJfVkxBTl9QUklPUklUWV9NQVNLKSA8PAorCQkJUlRMODM2NlJCX1ZMQU5fUFJJT1JJVFlfU0hJRlQpOworCWRhdGFbMV0gPSAodmxhbm1jLT5tZW1iZXIgJiBSVEw4MzY2UkJfVkxBTl9NRU1CRVJfTUFTSykgfAorCQkgICgodmxhbm1jLT51bnRhZyAmIFJUTDgzNjZSQl9WTEFOX1VOVEFHX01BU0spIDw8CisJCQlSVEw4MzY2UkJfVkxBTl9VTlRBR19TSElGVCk7CisJZGF0YVsyXSA9IHZsYW5tYy0+ZmlkICYgUlRMODM2NlJCX1ZMQU5fRklEX01BU0s7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCWVyciA9IHJ0bDgzNjZfc21pX3dyaXRlX3JlZyhzbWksCisJCQkJCSAgICBSVEw4MzY2UkJfVkxBTl9NQ19CQVNFKGluZGV4KSArIGksCisJCQkJCSAgICBkYXRhW2ldKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2NnJiX2dldF9tY19pbmRleChzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwgaW50IHBvcnQsIGludCAqdmFsKQoreworCXUzMiBkYXRhOworCWludCBlcnI7CisKKwlpZiAocG9ydCA+PSBSVEw4MzY2UkJfTlVNX1BPUlRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVyciA9IHJ0bDgzNjZfc21pX3JlYWRfcmVnKHNtaSwgUlRMODM2NlJCX1BPUlRfVkxBTl9DVFJMX1JFRyhwb3J0KSwKKwkJCQkgICAmZGF0YSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCSp2YWwgPSAoZGF0YSA+PiBSVEw4MzY2UkJfUE9SVF9WTEFOX0NUUkxfU0hJRlQocG9ydCkpICYKKwkgICAgICAgUlRMODM2NlJCX1BPUlRfVkxBTl9DVFJMX01BU0s7CisKKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgaW50IHJ0bDgzNjZyYl9zZXRfbWNfaW5kZXgoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIGludCBwb3J0LCBpbnQgaW5kZXgpCit7CisJaWYgKHBvcnQgPj0gUlRMODM2NlJCX05VTV9QT1JUUyB8fCBpbmRleCA+PSBSVEw4MzY2UkJfTlVNX1ZMQU5TKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBydGw4MzY2X3NtaV9ybXdyKHNtaSwgUlRMODM2NlJCX1BPUlRfVkxBTl9DVFJMX1JFRyhwb3J0KSwKKwkJCQlSVEw4MzY2UkJfUE9SVF9WTEFOX0NUUkxfTUFTSyA8PAorCQkJCQlSVEw4MzY2UkJfUE9SVF9WTEFOX0NUUkxfU0hJRlQocG9ydCksCisJCQkJKGluZGV4ICYgUlRMODM2NlJCX1BPUlRfVkxBTl9DVFJMX01BU0spIDw8CisJCQkJCVJUTDgzNjZSQl9QT1JUX1ZMQU5fQ1RSTF9TSElGVChwb3J0KSk7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2NnJiX2lzX3ZsYW5fdmFsaWQoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIHVuc2lnbmVkIHZsYW4pCit7CisJdW5zaWduZWQgbWF4ID0gUlRMODM2NlJCX05VTV9WTEFOUzsKKworCWlmIChzbWktPnZsYW40a19lbmFibGVkKQorCQltYXggPSBSVEw4MzY2UkJfTlVNX1ZJRFMgLSAxOworCisJaWYgKHZsYW4gPT0gMCB8fCB2bGFuID49IG1heCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBydGw4MzY2cmJfZW5hYmxlX3ZsYW4oc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIGludCBlbmFibGUpCit7CisJcmV0dXJuIHJ0bDgzNjZfc21pX3Jtd3Ioc21pLCBSVEw4MzY2UkJfU0dDUiwgUlRMODM2NlJCX1NHQ1JfRU5fVkxBTiwKKwkJCQkoZW5hYmxlKSA/IFJUTDgzNjZSQl9TR0NSX0VOX1ZMQU4gOiAwKTsKK30KKworc3RhdGljIGludCBydGw4MzY2cmJfZW5hYmxlX3ZsYW40ayhzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwgaW50IGVuYWJsZSkKK3sKKwlyZXR1cm4gcnRsODM2Nl9zbWlfcm13cihzbWksIFJUTDgzNjZSQl9TR0NSLAorCQkJCVJUTDgzNjZSQl9TR0NSX0VOX1ZMQU5fNEtUQiwKKwkJCQkoZW5hYmxlKSA/IFJUTDgzNjZSQl9TR0NSX0VOX1ZMQU5fNEtUQiA6IDApOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjZyYl9lbmFibGVfcG9ydChzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwgaW50IHBvcnQsIGludCBlbmFibGUpCit7CisJcmV0dXJuIHJ0bDgzNjZfc21pX3Jtd3Ioc21pLCBSVEw4MzY2UkJfUEVDUiwgKDEgPDwgcG9ydCksCisJCQkJKGVuYWJsZSkgPyAwIDogKDEgPDwgcG9ydCkpOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjZyYl9zd19yZXNldF9taWJzKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkJICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkJICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBydGw4MzY2X3NtaSAqc21pID0gc3dfdG9fcnRsODM2Nl9zbWkoZGV2KTsKKworCXJldHVybiBydGw4MzY2X3NtaV9ybXdyKHNtaSwgUlRMODM2NlJCX01JQl9DVFJMX1JFRywgMCwKKwkJCSAgICAgICAgUlRMODM2NlJCX01JQl9DVFJMX0dMT0JBTF9SRVNFVCk7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2NnJiX3N3X2dldF9ibGlua3JhdGUoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCQkgICAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IHJ0bDgzNjZfc21pICpzbWkgPSBzd190b19ydGw4MzY2X3NtaShkZXYpOworCXUzMiBkYXRhOworCisJcnRsODM2Nl9zbWlfcmVhZF9yZWcoc21pLCBSVEw4MzY2UkJfTEVEX0JMSU5LUkFURV9SRUcsICZkYXRhKTsKKworCXZhbC0+dmFsdWUuaSA9IChkYXRhICYgKFJUTDgzNjZSQl9MRURfQkxJTktSQVRFX01BU0spKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjZyYl9zd19zZXRfYmxpbmtyYXRlKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCQkgICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSA9IHN3X3RvX3J0bDgzNjZfc21pKGRldik7CisKKwlpZiAodmFsLT52YWx1ZS5pID49IDYpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHJ0bDgzNjZfc21pX3Jtd3Ioc21pLCBSVEw4MzY2UkJfTEVEX0JMSU5LUkFURV9SRUcsCisJCQkJUlRMODM2NlJCX0xFRF9CTElOS1JBVEVfTUFTSywKKwkJCQl2YWwtPnZhbHVlLmkpOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjZyYl9zd19nZXRfbGVhcm5pbmdfZW5hYmxlKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCQkgICAgICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSA9IHN3X3RvX3J0bDgzNjZfc21pKGRldik7CisJdTMyIGRhdGE7CisKKwlydGw4MzY2X3NtaV9yZWFkX3JlZyhzbWksIFJUTDgzNjZSQl9TU0NSMCwgJmRhdGEpOworCXZhbC0+dmFsdWUuaSA9ICFkYXRhOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBydGw4MzY2cmJfc3dfc2V0X2xlYXJuaW5nX2VuYWJsZShzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkJICAgICAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IHJ0bDgzNjZfc21pICpzbWkgPSBzd190b19ydGw4MzY2X3NtaShkZXYpOworCXUzMiBwb3J0bWFzayA9IDA7CisJaW50IGVyciA9IDA7CisKKwlpZiAoIXZhbC0+dmFsdWUuaSkKKwkJcG9ydG1hc2sgPSBSVEw4MzY2UkJfUE9SVF9BTEw7CisKKwkvKiBzZXQgbGVhcm5pbmcgZm9yIGFsbCBwb3J0cyAqLworCVJFR19XUihzbWksIFJUTDgzNjZSQl9TU0NSMCwgcG9ydG1hc2spOworCisJLyogc2V0IGF1dG8gYWdlaW5nIGZvciBhbGwgcG9ydHMgKi8KKwlSRUdfV1Ioc21pLCBSVEw4MzY2UkJfU1NDUjEsIHBvcnRtYXNrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjZyYl9zd19nZXRfcG9ydF9saW5rKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkJICAgICBpbnQgcG9ydCwKKwkJCQkgICAgIHN0cnVjdCBzd2l0Y2hfcG9ydF9saW5rICpsaW5rKQoreworCXN0cnVjdCBydGw4MzY2X3NtaSAqc21pID0gc3dfdG9fcnRsODM2Nl9zbWkoZGV2KTsKKwl1MzIgZGF0YSA9IDA7CisJdTMyIHNwZWVkOworCisJaWYgKHBvcnQgPj0gUlRMODM2NlJCX05VTV9QT1JUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlydGw4MzY2X3NtaV9yZWFkX3JlZyhzbWksIFJUTDgzNjZSQl9QT1JUX0xJTktfU1RBVFVTX0JBU0UgKyAocG9ydCAvIDIpLAorCQkJICAgICAmZGF0YSk7CisKKwlpZiAocG9ydCAlIDIpCisJCWRhdGEgPSBkYXRhID4+IDg7CisKKwlsaW5rLT5saW5rID0gISEoZGF0YSAmIFJUTDgzNjZSQl9QT1JUX1NUQVRVU19MSU5LX01BU0spOworCWlmICghbGluay0+bGluaykKKwkJcmV0dXJuIDA7CisKKwlsaW5rLT5kdXBsZXggPSAhIShkYXRhICYgUlRMODM2NlJCX1BPUlRfU1RBVFVTX0RVUExFWF9NQVNLKTsKKwlsaW5rLT5yeF9mbG93ID0gISEoZGF0YSAmIFJUTDgzNjZSQl9QT1JUX1NUQVRVU19SWFBBVVNFX01BU0spOworCWxpbmstPnR4X2Zsb3cgPSAhIShkYXRhICYgUlRMODM2NlJCX1BPUlRfU1RBVFVTX1RYUEFVU0VfTUFTSyk7CisJbGluay0+YW5lZyA9ICEhKGRhdGEgJiBSVEw4MzY2UkJfUE9SVF9TVEFUVVNfQU5fTUFTSyk7CisKKwlzcGVlZCA9IChkYXRhICYgUlRMODM2NlJCX1BPUlRfU1RBVFVTX1NQRUVEX01BU0spOworCXN3aXRjaCAoc3BlZWQpIHsKKwljYXNlIDA6CisJCWxpbmstPnNwZWVkID0gU1dJVENIX1BPUlRfU1BFRURfMTA7CisJCWJyZWFrOworCWNhc2UgMToKKwkJbGluay0+c3BlZWQgPSBTV0lUQ0hfUE9SVF9TUEVFRF8xMDA7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJbGluay0+c3BlZWQgPSBTV0lUQ0hfUE9SVF9TUEVFRF8xMDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlsaW5rLT5zcGVlZCA9IFNXSVRDSF9QT1JUX1NQRUVEX1VOS05PV047CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjZyYl9zd19zZXRfcG9ydF9sZWQoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJCSAgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBydGw4MzY2X3NtaSAqc21pID0gc3dfdG9fcnRsODM2Nl9zbWkoZGV2KTsKKwl1MzIgZGF0YTsKKwl1MzIgbWFzazsKKwl1MzIgcmVnOworCisJaWYgKHZhbC0+cG9ydF92bGFuID49IFJUTDgzNjZSQl9OVU1fUE9SVFMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHZhbC0+cG9ydF92bGFuID09IFJUTDgzNjZSQl9QT1JUX05VTV9DUFUpIHsKKwkJcmVnID0gUlRMODM2NlJCX0xFRF9CTElOS1JBVEVfUkVHOworCQltYXNrID0gMHhGIDw8IDQ7CisJCWRhdGEgPSB2YWwtPnZhbHVlLmkgPDwgNDsKKwl9IGVsc2UgeworCQlyZWcgPSBSVEw4MzY2UkJfTEVEX0NUUkxfUkVHOworCQltYXNrID0gMHhGIDw8ICh2YWwtPnBvcnRfdmxhbiAqIDQpLAorCQlkYXRhID0gdmFsLT52YWx1ZS5pIDw8ICh2YWwtPnBvcnRfdmxhbiAqIDQpOworCX0KKworCXJldHVybiBydGw4MzY2X3NtaV9ybXdyKHNtaSwgcmVnLCBtYXNrLCBkYXRhKTsKK30KKworc3RhdGljIGludCBydGw4MzY2cmJfc3dfZ2V0X3BvcnRfbGVkKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCQkgICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSA9IHN3X3RvX3J0bDgzNjZfc21pKGRldik7CisJdTMyIGRhdGEgPSAwOworCisJaWYgKHZhbC0+cG9ydF92bGFuID49IFJUTDgzNjZSQl9OVU1fTEVER1JPVVBTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJ0bDgzNjZfc21pX3JlYWRfcmVnKHNtaSwgUlRMODM2NlJCX0xFRF9DVFJMX1JFRywgJmRhdGEpOworCXZhbC0+dmFsdWUuaSA9IChkYXRhID4+ICh2YWwtPnBvcnRfdmxhbiAqIDQpKSAmIDB4MDAwRjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjZyYl9zd19zZXRfcG9ydF9kaXNhYmxlKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCQkgICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSA9IHN3X3RvX3J0bDgzNjZfc21pKGRldik7CisJdTMyIG1hc2ssIGRhdGE7CisKKwlpZiAodmFsLT5wb3J0X3ZsYW4gPj0gUlRMODM2NlJCX05VTV9QT1JUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltYXNrID0gMSA8PCB2YWwtPnBvcnRfdmxhbiA7CisJaWYgKHZhbC0+dmFsdWUuaSkKKwkJZGF0YSA9IG1hc2s7CisJZWxzZQorCQlkYXRhID0gMDsKKworCXJldHVybiBydGw4MzY2X3NtaV9ybXdyKHNtaSwgUlRMODM2NlJCX1BFQ1IsIG1hc2ssIGRhdGEpOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjZyYl9zd19nZXRfcG9ydF9kaXNhYmxlKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCQkgICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSA9IHN3X3RvX3J0bDgzNjZfc21pKGRldik7CisJdTMyIGRhdGE7CisKKwlpZiAodmFsLT5wb3J0X3ZsYW4gPj0gUlRMODM2NlJCX05VTV9QT1JUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlydGw4MzY2X3NtaV9yZWFkX3JlZyhzbWksIFJUTDgzNjZSQl9QRUNSLCAmZGF0YSk7CisJaWYgKGRhdGEgJiAoMSA8PCB2YWwtPnBvcnRfdmxhbikpCisJCXZhbC0+dmFsdWUuaSA9IDE7CisJZWxzZQorCQl2YWwtPnZhbHVlLmkgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2NnJiX3N3X3NldF9wb3J0X3JhdGVfaW4oc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJCSAgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBydGw4MzY2X3NtaSAqc21pID0gc3dfdG9fcnRsODM2Nl9zbWkoZGV2KTsKKworCWlmICh2YWwtPnBvcnRfdmxhbiA+PSBSVEw4MzY2UkJfTlVNX1BPUlRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh2YWwtPnZhbHVlLmkgPiAwICYmIHZhbC0+dmFsdWUuaSA8IFJUTDgzNjZSQl9CRFRIX1NXX01BWCkKKwkJdmFsLT52YWx1ZS5pID0gKHZhbC0+dmFsdWUuaSAtIDEpIC8gUlRMODM2NlJCX0JEVEhfVU5JVDsKKwllbHNlCisJCXZhbC0+dmFsdWUuaSA9IFJUTDgzNjZSQl9CRFRIX1JFR19ERUZBVUxUOworCisJcmV0dXJuIHJ0bDgzNjZfc21pX3Jtd3Ioc21pLCBSVEw4MzY2UkJfSUJfUkVHKHZhbC0+cG9ydF92bGFuKSwKKwkJUlRMODM2NlJCX0lCX0JEVEhfTUFTSyB8IFJUTDgzNjZSQl9JQl9QUkVJRkdfTUFTSywKKwkJdmFsLT52YWx1ZS5pIHwKKwkJKFJUTDgzNjZSQl9RT1NfREVGQVVMVF9QUkVJRkcgPDwgUlRMODM2NlJCX0lCX1BSRUlGR19PRkZTRVQpKTsKKworfQorCitzdGF0aWMgaW50IHJ0bDgzNjZyYl9zd19nZXRfcG9ydF9yYXRlX2luKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCQkgICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSA9IHN3X3RvX3J0bDgzNjZfc21pKGRldik7CisJdTMyIGRhdGE7CisKKwlpZiAodmFsLT5wb3J0X3ZsYW4gPj0gUlRMODM2NlJCX05VTV9QT1JUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlydGw4MzY2X3NtaV9yZWFkX3JlZyhzbWksIFJUTDgzNjZSQl9JQl9SRUcodmFsLT5wb3J0X3ZsYW4pLCAmZGF0YSk7CisJZGF0YSAmPSBSVEw4MzY2UkJfSUJfQkRUSF9NQVNLOworCWlmIChkYXRhIDwgUlRMODM2NlJCX0lCX0JEVEhfTUFTSykKKwkJZGF0YSArPSAxOworCisJdmFsLT52YWx1ZS5pID0gKGludClkYXRhICogUlRMODM2NlJCX0JEVEhfVU5JVDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjZyYl9zd19zZXRfcG9ydF9yYXRlX291dChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJCSAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkJICAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IHJ0bDgzNjZfc21pICpzbWkgPSBzd190b19ydGw4MzY2X3NtaShkZXYpOworCisJaWYgKHZhbC0+cG9ydF92bGFuID49IFJUTDgzNjZSQl9OVU1fUE9SVFMpCisJCXJldHVybiAtRUlOVkFMOworCisJcnRsODM2Nl9zbWlfcm13cihzbWksIFJUTDgzNjZSQl9FQl9QUkVJRkdfUkVHLAorCQlSVEw4MzY2UkJfRUJfUFJFSUZHX01BU0ssCisJCShSVEw4MzY2UkJfUU9TX0RFRkFVTFRfUFJFSUZHIDw8IFJUTDgzNjZSQl9FQl9QUkVJRkdfT0ZGU0VUKSk7CisKKwlpZiAodmFsLT52YWx1ZS5pID4gMCAmJiB2YWwtPnZhbHVlLmkgPCBSVEw4MzY2UkJfQkRUSF9TV19NQVgpCisJCXZhbC0+dmFsdWUuaSA9ICh2YWwtPnZhbHVlLmkgLSAxKSAvIFJUTDgzNjZSQl9CRFRIX1VOSVQ7CisJZWxzZQorCQl2YWwtPnZhbHVlLmkgPSBSVEw4MzY2UkJfQkRUSF9SRUdfREVGQVVMVDsKKworCXJldHVybiBydGw4MzY2X3NtaV9ybXdyKHNtaSwgUlRMODM2NlJCX0VCX1JFRyh2YWwtPnBvcnRfdmxhbiksCisJCQlSVEw4MzY2UkJfRUJfQkRUSF9NQVNLLCB2YWwtPnZhbHVlLmkgKTsKKworfQorCitzdGF0aWMgaW50IHJ0bDgzNjZyYl9zd19nZXRfcG9ydF9yYXRlX291dChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJCSAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkJICAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IHJ0bDgzNjZfc21pICpzbWkgPSBzd190b19ydGw4MzY2X3NtaShkZXYpOworCXUzMiBkYXRhOworCisJaWYgKHZhbC0+cG9ydF92bGFuID49IFJUTDgzNjZSQl9OVU1fUE9SVFMpCisJCXJldHVybiAtRUlOVkFMOworCisJcnRsODM2Nl9zbWlfcmVhZF9yZWcoc21pLCBSVEw4MzY2UkJfRUJfUkVHKHZhbC0+cG9ydF92bGFuKSwgJmRhdGEpOworCWRhdGEgJj0gUlRMODM2NlJCX0VCX0JEVEhfTUFTSzsKKwlpZiAoZGF0YSA8IFJUTDgzNjZSQl9FQl9CRFRIX01BU0spCisJCWRhdGEgKz0gMTsKKworCXZhbC0+dmFsdWUuaSA9IChpbnQpZGF0YSAqIFJUTDgzNjZSQl9CRFRIX1VOSVQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MzY2cmJfc3dfc2V0X3Fvc19lbmFibGUoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJCSAgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBydGw4MzY2X3NtaSAqc21pID0gc3dfdG9fcnRsODM2Nl9zbWkoZGV2KTsKKwl1MzIgZGF0YTsKKworCWlmICh2YWwtPnZhbHVlLmkpCisJCWRhdGEgPSBSVEw4MzY2UkJfUU9TX01BU0s7CisJZWxzZQorCQlkYXRhID0gMDsKKworCXJldHVybiBydGw4MzY2X3NtaV9ybXdyKHNtaSwgUlRMODM2NlJCX1NHQ1IsIFJUTDgzNjZSQl9RT1NfTUFTSywgZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2NnJiX3N3X2dldF9xb3NfZW5hYmxlKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCQkgICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSA9IHN3X3RvX3J0bDgzNjZfc21pKGRldik7CisJdTMyIGRhdGE7CisKKwlydGw4MzY2X3NtaV9yZWFkX3JlZyhzbWksIFJUTDgzNjZSQl9TR0NSLCAmZGF0YSk7CisJaWYgKGRhdGEgJiBSVEw4MzY2UkJfUU9TX01BU0spCisJCXZhbC0+dmFsdWUuaSA9IDE7CisJZWxzZQorCQl2YWwtPnZhbHVlLmkgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2NnJiX3N3X3NldF9taXJyb3JfcnhfZW5hYmxlKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCQkgICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSA9IHN3X3RvX3J0bDgzNjZfc21pKGRldik7CisJdTMyIGRhdGE7CisKKwlpZiAodmFsLT52YWx1ZS5pKQorCQlkYXRhID0gUlRMODM2NlJCX1BNQ1JfTUlSUk9SX1JYOworCWVsc2UKKwkJZGF0YSA9IDA7CisKKwlyZXR1cm4gcnRsODM2Nl9zbWlfcm13cihzbWksIFJUTDgzNjZSQl9QTUNSLCBSVEw4MzY2UkJfUE1DUl9NSVJST1JfUlgsIGRhdGEpOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjZyYl9zd19nZXRfbWlycm9yX3J4X2VuYWJsZShzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJCSAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkJICAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IHJ0bDgzNjZfc21pICpzbWkgPSBzd190b19ydGw4MzY2X3NtaShkZXYpOworCXUzMiBkYXRhOworCisJcnRsODM2Nl9zbWlfcmVhZF9yZWcoc21pLCBSVEw4MzY2UkJfUE1DUiwgJmRhdGEpOworCWlmIChkYXRhICYgUlRMODM2NlJCX1BNQ1JfTUlSUk9SX1JYKQorCQl2YWwtPnZhbHVlLmkgPSAxOworCWVsc2UKKwkJdmFsLT52YWx1ZS5pID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjZyYl9zd19zZXRfbWlycm9yX3R4X2VuYWJsZShzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJCSAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkJICAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IHJ0bDgzNjZfc21pICpzbWkgPSBzd190b19ydGw4MzY2X3NtaShkZXYpOworCXUzMiBkYXRhOworCisJaWYgKHZhbC0+dmFsdWUuaSkKKwkJZGF0YSA9IFJUTDgzNjZSQl9QTUNSX01JUlJPUl9UWDsKKwllbHNlCisJCWRhdGEgPSAwOworCisJcmV0dXJuIHJ0bDgzNjZfc21pX3Jtd3Ioc21pLCBSVEw4MzY2UkJfUE1DUiwgUlRMODM2NlJCX1BNQ1JfTUlSUk9SX1RYLCBkYXRhKTsKK30KKworc3RhdGljIGludCBydGw4MzY2cmJfc3dfZ2V0X21pcnJvcl90eF9lbmFibGUoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJCSAgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBydGw4MzY2X3NtaSAqc21pID0gc3dfdG9fcnRsODM2Nl9zbWkoZGV2KTsKKwl1MzIgZGF0YTsKKworCXJ0bDgzNjZfc21pX3JlYWRfcmVnKHNtaSwgUlRMODM2NlJCX1BNQ1IsICZkYXRhKTsKKwlpZiAoZGF0YSAmIFJUTDgzNjZSQl9QTUNSX01JUlJPUl9UWCkKKwkJdmFsLT52YWx1ZS5pID0gMTsKKwllbHNlCisJCXZhbC0+dmFsdWUuaSA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MzY2cmJfc3dfc2V0X21vbml0b3JfaXNvbGF0aW9uX2VuYWJsZShzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJCSAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkJICAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IHJ0bDgzNjZfc21pICpzbWkgPSBzd190b19ydGw4MzY2X3NtaShkZXYpOworCXUzMiBkYXRhOworCisJaWYgKHZhbC0+dmFsdWUuaSkKKwkJZGF0YSA9IFJUTDgzNjZSQl9QTUNSX01JUlJPUl9JU087CisJZWxzZQorCQlkYXRhID0gMDsKKworCXJldHVybiBydGw4MzY2X3NtaV9ybXdyKHNtaSwgUlRMODM2NlJCX1BNQ1IsIFJUTDgzNjZSQl9QTUNSX01JUlJPUl9JU08sIGRhdGEpOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjZyYl9zd19nZXRfbW9uaXRvcl9pc29sYXRpb25fZW5hYmxlKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCQkgICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSA9IHN3X3RvX3J0bDgzNjZfc21pKGRldik7CisJdTMyIGRhdGE7CisKKwlydGw4MzY2X3NtaV9yZWFkX3JlZyhzbWksIFJUTDgzNjZSQl9QTUNSLCAmZGF0YSk7CisJaWYgKGRhdGEgJiBSVEw4MzY2UkJfUE1DUl9NSVJST1JfSVNPKQorCQl2YWwtPnZhbHVlLmkgPSAxOworCWVsc2UKKwkJdmFsLT52YWx1ZS5pID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjZyYl9zd19zZXRfbWlycm9yX3BhdXNlX2ZyYW1lc19lbmFibGUoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJCSAgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBydGw4MzY2X3NtaSAqc21pID0gc3dfdG9fcnRsODM2Nl9zbWkoZGV2KTsKKwl1MzIgZGF0YTsKKworCWlmICh2YWwtPnZhbHVlLmkpCisJCWRhdGEgPSBSVEw4MzY2UkJfUE1DUl9NSVJST1JfU1BDOworCWVsc2UKKwkJZGF0YSA9IDA7CisKKwlyZXR1cm4gcnRsODM2Nl9zbWlfcm13cihzbWksIFJUTDgzNjZSQl9QTUNSLCBSVEw4MzY2UkJfUE1DUl9NSVJST1JfU1BDLCBkYXRhKTsKK30KKworc3RhdGljIGludCBydGw4MzY2cmJfc3dfZ2V0X21pcnJvcl9wYXVzZV9mcmFtZXNfZW5hYmxlKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCQkgICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSA9IHN3X3RvX3J0bDgzNjZfc21pKGRldik7CisJdTMyIGRhdGE7CisKKwlydGw4MzY2X3NtaV9yZWFkX3JlZyhzbWksIFJUTDgzNjZSQl9QTUNSLCAmZGF0YSk7CisJaWYgKGRhdGEgJiBSVEw4MzY2UkJfUE1DUl9NSVJST1JfU1BDKQorCQl2YWwtPnZhbHVlLmkgPSAxOworCWVsc2UKKwkJdmFsLT52YWx1ZS5pID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjZyYl9zd19zZXRfbWlycm9yX21vbml0b3JfcG9ydChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJCSAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkJICAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IHJ0bDgzNjZfc21pICpzbWkgPSBzd190b19ydGw4MzY2X3NtaShkZXYpOworCXUzMiBkYXRhOworCisJZGF0YSA9IFJUTDgzNjZSQl9QTUNSX01PTklUT1JfUE9SVCh2YWwtPnZhbHVlLmkpOworCisJcmV0dXJuIHJ0bDgzNjZfc21pX3Jtd3Ioc21pLCBSVEw4MzY2UkJfUE1DUiwgUlRMODM2NlJCX1BNQ1JfTU9OSVRPUl9QT1JUX01BU0ssIGRhdGEpOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjZyYl9zd19nZXRfbWlycm9yX21vbml0b3JfcG9ydChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJCSAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkJICAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IHJ0bDgzNjZfc21pICpzbWkgPSBzd190b19ydGw4MzY2X3NtaShkZXYpOworCXUzMiBkYXRhOworCisJcnRsODM2Nl9zbWlfcmVhZF9yZWcoc21pLCBSVEw4MzY2UkJfUE1DUiwgJmRhdGEpOworCXZhbC0+dmFsdWUuaSA9IChkYXRhICYgUlRMODM2NlJCX1BNQ1JfTU9OSVRPUl9QT1JUX01BU0spID4+IDQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MzY2cmJfc3dfc2V0X21pcnJvcl9zb3VyY2VfcG9ydChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJCSAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkJICAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IHJ0bDgzNjZfc21pICpzbWkgPSBzd190b19ydGw4MzY2X3NtaShkZXYpOworCXUzMiBkYXRhOworCisJZGF0YSA9IFJUTDgzNjZSQl9QTUNSX1NPVVJDRV9QT1JUKHZhbC0+dmFsdWUuaSk7CisKKwlyZXR1cm4gcnRsODM2Nl9zbWlfcm13cihzbWksIFJUTDgzNjZSQl9QTUNSLCBSVEw4MzY2UkJfUE1DUl9TT1VSQ0VfUE9SVF9NQVNLLCBkYXRhKTsKK30KKworc3RhdGljIGludCBydGw4MzY2cmJfc3dfZ2V0X21pcnJvcl9zb3VyY2VfcG9ydChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJCSAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkJICAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IHJ0bDgzNjZfc21pICpzbWkgPSBzd190b19ydGw4MzY2X3NtaShkZXYpOworCXUzMiBkYXRhOworCisJcnRsODM2Nl9zbWlfcmVhZF9yZWcoc21pLCBSVEw4MzY2UkJfUE1DUiwgJmRhdGEpOworCXZhbC0+dmFsdWUuaSA9IGRhdGEgJiBSVEw4MzY2UkJfUE1DUl9TT1VSQ0VfUE9SVF9NQVNLOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2NnJiX3N3X3Jlc2V0X3BvcnRfbWlicyhzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkJICAgICAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IHJ0bDgzNjZfc21pICpzbWkgPSBzd190b19ydGw4MzY2X3NtaShkZXYpOworCisJaWYgKHZhbC0+cG9ydF92bGFuID49IFJUTDgzNjZSQl9OVU1fUE9SVFMpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHJ0bDgzNjZfc21pX3Jtd3Ioc21pLCBSVEw4MzY2UkJfTUlCX0NUUkxfUkVHLCAwLAorCQkJCVJUTDgzNjZSQl9NSUJfQ1RSTF9QT1JUX1JFU0VUKHZhbC0+cG9ydF92bGFuKSk7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2NnJiX3N3X2dldF9wb3J0X3N0YXRzKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsIGludCBwb3J0LAorCQkJCQlzdHJ1Y3Qgc3dpdGNoX3BvcnRfc3RhdHMgKnN0YXRzKQoreworCXJldHVybiAocnRsODM2Nl9zd19nZXRfcG9ydF9zdGF0cyhkZXYsIHBvcnQsIHN0YXRzLAorCQkJCVJUTDgzNjZSQl9NSUJfVFhCX0lELCBSVEw4MzY2UkJfTUlCX1JYQl9JRCkpOworfQorCitzdGF0aWMgc3RydWN0IHN3aXRjaF9hdHRyIHJ0bDgzNjZyYl9nbG9iYWxzW10gPSB7CisJeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX0lOVCwKKwkJLm5hbWUgPSAiZW5hYmxlX2xlYXJuaW5nIiwKKwkJLmRlc2NyaXB0aW9uID0gIkVuYWJsZSBsZWFybmluZywgZW5hYmxlIGFnaW5nIiwKKwkJLnNldCA9IHJ0bDgzNjZyYl9zd19zZXRfbGVhcm5pbmdfZW5hYmxlLAorCQkuZ2V0ID0gcnRsODM2NnJiX3N3X2dldF9sZWFybmluZ19lbmFibGUsCisJCS5tYXggPSAxCisJfSwgeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX0lOVCwKKwkJLm5hbWUgPSAiZW5hYmxlX3ZsYW4iLAorCQkuZGVzY3JpcHRpb24gPSAiRW5hYmxlIFZMQU4gbW9kZSIsCisJCS5zZXQgPSBydGw4MzY2X3N3X3NldF92bGFuX2VuYWJsZSwKKwkJLmdldCA9IHJ0bDgzNjZfc3dfZ2V0X3ZsYW5fZW5hYmxlLAorCQkubWF4ID0gMSwKKwkJLm9mcyA9IDEKKwl9LCB7CisJCS50eXBlID0gU1dJVENIX1RZUEVfSU5ULAorCQkubmFtZSA9ICJlbmFibGVfdmxhbjRrIiwKKwkJLmRlc2NyaXB0aW9uID0gIkVuYWJsZSBWTEFOIDRLIG1vZGUiLAorCQkuc2V0ID0gcnRsODM2Nl9zd19zZXRfdmxhbl9lbmFibGUsCisJCS5nZXQgPSBydGw4MzY2X3N3X2dldF92bGFuX2VuYWJsZSwKKwkJLm1heCA9IDEsCisJCS5vZnMgPSAyCisJfSwgeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX05PVkFMLAorCQkubmFtZSA9ICJyZXNldF9taWJzIiwKKwkJLmRlc2NyaXB0aW9uID0gIlJlc2V0IGFsbCBNSUIgY291bnRlcnMiLAorCQkuc2V0ID0gcnRsODM2NnJiX3N3X3Jlc2V0X21pYnMsCisJfSwgeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX0lOVCwKKwkJLm5hbWUgPSAiYmxpbmtyYXRlIiwKKwkJLmRlc2NyaXB0aW9uID0gIkdldC9TZXQgTEVEIGJsaW5raW5nIHJhdGUgKDAgPSA0M21zLCAxID0gODRtcywiCisJCSIgMiA9IDEyMG1zLCAzID0gMTcwbXMsIDQgPSAzNDBtcywgNSA9IDY3MG1zKSIsCisJCS5zZXQgPSBydGw4MzY2cmJfc3dfc2V0X2JsaW5rcmF0ZSwKKwkJLmdldCA9IHJ0bDgzNjZyYl9zd19nZXRfYmxpbmtyYXRlLAorCQkubWF4ID0gNQorCX0sIHsKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9JTlQsCisJCS5uYW1lID0gImVuYWJsZV9xb3MiLAorCQkuZGVzY3JpcHRpb24gPSAiRW5hYmxlIFFPUyIsCisJCS5zZXQgPSBydGw4MzY2cmJfc3dfc2V0X3Fvc19lbmFibGUsCisJCS5nZXQgPSBydGw4MzY2cmJfc3dfZ2V0X3Fvc19lbmFibGUsCisJCS5tYXggPSAxCisJfSwgeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX0lOVCwKKwkJLm5hbWUgPSAiZW5hYmxlX21pcnJvcl9yeCIsCisJCS5kZXNjcmlwdGlvbiA9ICJFbmFibGUgbWlycm9yaW5nIG9mIFJYIHBhY2tldHMiLAorCQkuc2V0ID0gcnRsODM2NnJiX3N3X3NldF9taXJyb3JfcnhfZW5hYmxlLAorCQkuZ2V0ID0gcnRsODM2NnJiX3N3X2dldF9taXJyb3JfcnhfZW5hYmxlLAorCQkubWF4ID0gMQorCX0sIHsKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9JTlQsCisJCS5uYW1lID0gImVuYWJsZV9taXJyb3JfdHgiLAorCQkuZGVzY3JpcHRpb24gPSAiRW5hYmxlIG1pcnJvcmluZyBvZiBUWCBwYWNrZXRzIiwKKwkJLnNldCA9IHJ0bDgzNjZyYl9zd19zZXRfbWlycm9yX3R4X2VuYWJsZSwKKwkJLmdldCA9IHJ0bDgzNjZyYl9zd19nZXRfbWlycm9yX3R4X2VuYWJsZSwKKwkJLm1heCA9IDEKKwl9LCB7CisJCS50eXBlID0gU1dJVENIX1RZUEVfSU5ULAorCQkubmFtZSA9ICJlbmFibGVfbW9uaXRvcl9pc29sYXRpb24iLAorCQkuZGVzY3JpcHRpb24gPSAiRW5hYmxlIGlzb2xhdGlvbiBvZiBtb25pdG9yIHBvcnQgKFRYIHBhY2tldHMgd2lsbCBiZSBkcm9wcGVkKSIsCisJCS5zZXQgPSBydGw4MzY2cmJfc3dfc2V0X21vbml0b3JfaXNvbGF0aW9uX2VuYWJsZSwKKwkJLmdldCA9IHJ0bDgzNjZyYl9zd19nZXRfbW9uaXRvcl9pc29sYXRpb25fZW5hYmxlLAorCQkubWF4ID0gMQorCX0sIHsKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9JTlQsCisJCS5uYW1lID0gImVuYWJsZV9taXJyb3JfcGF1c2VfZnJhbWVzIiwKKwkJLmRlc2NyaXB0aW9uID0gIkVuYWJsZSBtaXJyb3Jpbmcgb2YgUlggcGF1c2UgZnJhbWVzIiwKKwkJLnNldCA9IHJ0bDgzNjZyYl9zd19zZXRfbWlycm9yX3BhdXNlX2ZyYW1lc19lbmFibGUsCisJCS5nZXQgPSBydGw4MzY2cmJfc3dfZ2V0X21pcnJvcl9wYXVzZV9mcmFtZXNfZW5hYmxlLAorCQkubWF4ID0gMQorCX0sIHsKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9JTlQsCisJCS5uYW1lID0gIm1pcnJvcl9tb25pdG9yX3BvcnQiLAorCQkuZGVzY3JpcHRpb24gPSAiTWlycm9yIG1vbml0b3IgcG9ydCIsCisJCS5zZXQgPSBydGw4MzY2cmJfc3dfc2V0X21pcnJvcl9tb25pdG9yX3BvcnQsCisJCS5nZXQgPSBydGw4MzY2cmJfc3dfZ2V0X21pcnJvcl9tb25pdG9yX3BvcnQsCisJCS5tYXggPSA1CisJfSwgeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX0lOVCwKKwkJLm5hbWUgPSAibWlycm9yX3NvdXJjZV9wb3J0IiwKKwkJLmRlc2NyaXB0aW9uID0gIk1pcnJvciBzb3VyY2UgcG9ydCIsCisJCS5zZXQgPSBydGw4MzY2cmJfc3dfc2V0X21pcnJvcl9zb3VyY2VfcG9ydCwKKwkJLmdldCA9IHJ0bDgzNjZyYl9zd19nZXRfbWlycm9yX3NvdXJjZV9wb3J0LAorCQkubWF4ID0gNQorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHN3aXRjaF9hdHRyIHJ0bDgzNjZyYl9wb3J0W10gPSB7CisJeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX05PVkFMLAorCQkubmFtZSA9ICJyZXNldF9taWIiLAorCQkuZGVzY3JpcHRpb24gPSAiUmVzZXQgc2luZ2xlIHBvcnQgTUlCIGNvdW50ZXJzIiwKKwkJLnNldCA9IHJ0bDgzNjZyYl9zd19yZXNldF9wb3J0X21pYnMsCisJfSwgeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX1NUUklORywKKwkJLm5hbWUgPSAibWliIiwKKwkJLmRlc2NyaXB0aW9uID0gIkdldCBNSUIgY291bnRlcnMgZm9yIHBvcnQiLAorCQkubWF4ID0gMzMsCisJCS5zZXQgPSBOVUxMLAorCQkuZ2V0ID0gcnRsODM2Nl9zd19nZXRfcG9ydF9taWIsCisJfSwgeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX0lOVCwKKwkJLm5hbWUgPSAibGVkIiwKKwkJLmRlc2NyaXB0aW9uID0gIkdldC9TZXQgcG9ydCBncm91cCAoMCAtIDMpIGxlZCBtb2RlICgwIC0gMTUpIiwKKwkJLm1heCA9IDE1LAorCQkuc2V0ID0gcnRsODM2NnJiX3N3X3NldF9wb3J0X2xlZCwKKwkJLmdldCA9IHJ0bDgzNjZyYl9zd19nZXRfcG9ydF9sZWQsCisJfSwgeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX0lOVCwKKwkJLm5hbWUgPSAiZGlzYWJsZSIsCisJCS5kZXNjcmlwdGlvbiA9ICJHZXQvU2V0IHBvcnQgc3RhdGUgKGVuYWJsZWQgb3IgZGlzYWJsZWQpIiwKKwkJLm1heCA9IDEsCisJCS5zZXQgPSBydGw4MzY2cmJfc3dfc2V0X3BvcnRfZGlzYWJsZSwKKwkJLmdldCA9IHJ0bDgzNjZyYl9zd19nZXRfcG9ydF9kaXNhYmxlLAorCX0sIHsKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9JTlQsCisJCS5uYW1lID0gInJhdGVfaW4iLAorCQkuZGVzY3JpcHRpb24gPSAiR2V0L1NldCBwb3J0IGluZ3Jlc3MgKGluY29taW5nKSBiYW5kd2lkdGggbGltaXQgaW4ga2JwcyIsCisJCS5tYXggPSBSVEw4MzY2UkJfQkRUSF9TV19NQVgsCisJCS5zZXQgPSBydGw4MzY2cmJfc3dfc2V0X3BvcnRfcmF0ZV9pbiwKKwkJLmdldCA9IHJ0bDgzNjZyYl9zd19nZXRfcG9ydF9yYXRlX2luLAorCX0sIHsKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9JTlQsCisJCS5uYW1lID0gInJhdGVfb3V0IiwKKwkJLmRlc2NyaXB0aW9uID0gIkdldC9TZXQgcG9ydCBlZ3Jlc3MgKG91dGdvaW5nKSBiYW5kd2lkdGggbGltaXQgaW4ga2JwcyIsCisJCS5tYXggPSBSVEw4MzY2UkJfQkRUSF9TV19NQVgsCisJCS5zZXQgPSBydGw4MzY2cmJfc3dfc2V0X3BvcnRfcmF0ZV9vdXQsCisJCS5nZXQgPSBydGw4MzY2cmJfc3dfZ2V0X3BvcnRfcmF0ZV9vdXQsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3dpdGNoX2F0dHIgcnRsODM2NnJiX3ZsYW5bXSA9IHsKKwl7CisJCS50eXBlID0gU1dJVENIX1RZUEVfU1RSSU5HLAorCQkubmFtZSA9ICJpbmZvIiwKKwkJLmRlc2NyaXB0aW9uID0gIkdldCB2bGFuIGluZm9ybWF0aW9uIiwKKwkJLm1heCA9IDEsCisJCS5zZXQgPSBOVUxMLAorCQkuZ2V0ID0gcnRsODM2Nl9zd19nZXRfdmxhbl9pbmZvLAorCX0sIHsKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9JTlQsCisJCS5uYW1lID0gImZpZCIsCisJCS5kZXNjcmlwdGlvbiA9ICJHZXQvU2V0IHZsYW4gRklEIiwKKwkJLm1heCA9IFJUTDgzNjZSQl9GSURNQVgsCisJCS5zZXQgPSBydGw4MzY2X3N3X3NldF92bGFuX2ZpZCwKKwkJLmdldCA9IHJ0bDgzNjZfc3dfZ2V0X3ZsYW5fZmlkLAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHN3aXRjaF9kZXZfb3BzIHJ0bDgzNjZfb3BzID0geworCS5hdHRyX2dsb2JhbCA9IHsKKwkJLmF0dHIgPSBydGw4MzY2cmJfZ2xvYmFscywKKwkJLm5fYXR0ciA9IEFSUkFZX1NJWkUocnRsODM2NnJiX2dsb2JhbHMpLAorCX0sCisJLmF0dHJfcG9ydCA9IHsKKwkJLmF0dHIgPSBydGw4MzY2cmJfcG9ydCwKKwkJLm5fYXR0ciA9IEFSUkFZX1NJWkUocnRsODM2NnJiX3BvcnQpLAorCX0sCisJLmF0dHJfdmxhbiA9IHsKKwkJLmF0dHIgPSBydGw4MzY2cmJfdmxhbiwKKwkJLm5fYXR0ciA9IEFSUkFZX1NJWkUocnRsODM2NnJiX3ZsYW4pLAorCX0sCisKKwkuZ2V0X3ZsYW5fcG9ydHMgPSBydGw4MzY2X3N3X2dldF92bGFuX3BvcnRzLAorCS5zZXRfdmxhbl9wb3J0cyA9IHJ0bDgzNjZfc3dfc2V0X3ZsYW5fcG9ydHMsCisJLmdldF9wb3J0X3B2aWQgPSBydGw4MzY2X3N3X2dldF9wb3J0X3B2aWQsCisJLnNldF9wb3J0X3B2aWQgPSBydGw4MzY2X3N3X3NldF9wb3J0X3B2aWQsCisJLnJlc2V0X3N3aXRjaCA9IHJ0bDgzNjZfc3dfcmVzZXRfc3dpdGNoLAorCS5nZXRfcG9ydF9saW5rID0gcnRsODM2NnJiX3N3X2dldF9wb3J0X2xpbmssCisJLmdldF9wb3J0X3N0YXRzID0gcnRsODM2NnJiX3N3X2dldF9wb3J0X3N0YXRzLAorfTsKKworc3RhdGljIGludCBydGw4MzY2cmJfc3dpdGNoX2luaXQoc3RydWN0IHJ0bDgzNjZfc21pICpzbWkpCit7CisJc3RydWN0IHN3aXRjaF9kZXYgKmRldiA9ICZzbWktPnN3X2RldjsKKwlpbnQgZXJyOworCisJZGV2LT5uYW1lID0gIlJUTDgzNjZSQiI7CisJZGV2LT5jcHVfcG9ydCA9IFJUTDgzNjZSQl9QT1JUX05VTV9DUFU7CisJZGV2LT5wb3J0cyA9IFJUTDgzNjZSQl9OVU1fUE9SVFM7CisJZGV2LT52bGFucyA9IFJUTDgzNjZSQl9OVU1fVklEUzsKKwlkZXYtPm9wcyA9ICZydGw4MzY2X29wczsKKwlkZXYtPmFsaWFzID0gZGV2X25hbWUoc21pLT5wYXJlbnQpOworCisJZXJyID0gcmVnaXN0ZXJfc3dpdGNoKGRldiwgTlVMTCk7CisJaWYgKGVycikKKwkJZGV2X2VycihzbWktPnBhcmVudCwgInN3aXRjaCByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDgzNjZyYl9zd2l0Y2hfY2xlYW51cChzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSkKK3sKKwl1bnJlZ2lzdGVyX3N3aXRjaCgmc21pLT5zd19kZXYpOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjZyYl9taWlfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZykKK3sKKwlzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSA9IGJ1cy0+cHJpdjsKKwl1MzIgdmFsID0gMDsKKwlpbnQgZXJyOworCisJZXJyID0gcnRsODM2NnJiX3JlYWRfcGh5X3JlZyhzbWksIGFkZHIsIDAsIHJlZywgJnZhbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIDB4ZmZmZjsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2NnJiX21paV93cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZywgdTE2IHZhbCkKK3sKKwlzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSA9IGJ1cy0+cHJpdjsKKwl1MzIgdDsKKwlpbnQgZXJyOworCisJZXJyID0gcnRsODM2NnJiX3dyaXRlX3BoeV9yZWcoc21pLCBhZGRyLCAwLCByZWcsIHZhbCk7CisJLyogZmx1c2ggd3JpdGUgKi8KKwkodm9pZCkgcnRsODM2NnJiX3JlYWRfcGh5X3JlZyhzbWksIGFkZHIsIDAsIHJlZywgJnQpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBydGw4MzY2cmJfZGV0ZWN0KHN0cnVjdCBydGw4MzY2X3NtaSAqc21pKQoreworCXUzMiBjaGlwX2lkID0gMDsKKwl1MzIgY2hpcF92ZXIgPSAwOworCWludCByZXQ7CisKKwlyZXQgPSBydGw4MzY2X3NtaV9yZWFkX3JlZyhzbWksIFJUTDgzNjZSQl9DSElQX0lEX1JFRywgJmNoaXBfaWQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihzbWktPnBhcmVudCwgInVuYWJsZSB0byByZWFkIGNoaXAgaWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXN3aXRjaCAoY2hpcF9pZCkgeworCWNhc2UgUlRMODM2NlJCX0NISVBfSURfODM2NjoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycihzbWktPnBhcmVudCwgInVua25vd24gY2hpcCBpZCAoJTA0eClcbiIsIGNoaXBfaWQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXQgPSBydGw4MzY2X3NtaV9yZWFkX3JlZyhzbWksIFJUTDgzNjZSQl9DSElQX1ZFUlNJT05fQ1RSTF9SRUcsCisJCQkJICAgJmNoaXBfdmVyKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoc21pLT5wYXJlbnQsICJ1bmFibGUgdG8gcmVhZCBjaGlwIHZlcnNpb25cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRldl9pbmZvKHNtaS0+cGFyZW50LCAiUlRMJTA0eCB2ZXIuICV1IGNoaXAgZm91bmRcbiIsCisJCSBjaGlwX2lkLCBjaGlwX3ZlciAmIFJUTDgzNjZSQl9DSElQX1ZFUlNJT05fTUFTSyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBydGw4MzY2X3NtaV9vcHMgcnRsODM2NnJiX3NtaV9vcHMgPSB7CisJLmRldGVjdAkJPSBydGw4MzY2cmJfZGV0ZWN0LAorCS5yZXNldF9jaGlwCT0gcnRsODM2NnJiX3Jlc2V0X2NoaXAsCisJLnNldHVwCQk9IHJ0bDgzNjZyYl9zZXR1cCwKKworCS5taWlfcmVhZAk9IHJ0bDgzNjZyYl9taWlfcmVhZCwKKwkubWlpX3dyaXRlCT0gcnRsODM2NnJiX21paV93cml0ZSwKKworCS5nZXRfdmxhbl9tYwk9IHJ0bDgzNjZyYl9nZXRfdmxhbl9tYywKKwkuc2V0X3ZsYW5fbWMJPSBydGw4MzY2cmJfc2V0X3ZsYW5fbWMsCisJLmdldF92bGFuXzRrCT0gcnRsODM2NnJiX2dldF92bGFuXzRrLAorCS5zZXRfdmxhbl80awk9IHJ0bDgzNjZyYl9zZXRfdmxhbl80aywKKwkuZ2V0X21jX2luZGV4CT0gcnRsODM2NnJiX2dldF9tY19pbmRleCwKKwkuc2V0X21jX2luZGV4CT0gcnRsODM2NnJiX3NldF9tY19pbmRleCwKKwkuZ2V0X21pYl9jb3VudGVyID0gcnRsODM2NnJiX2dldF9taWJfY291bnRlciwKKwkuaXNfdmxhbl92YWxpZAk9IHJ0bDgzNjZyYl9pc192bGFuX3ZhbGlkLAorCS5lbmFibGVfdmxhbgk9IHJ0bDgzNjZyYl9lbmFibGVfdmxhbiwKKwkuZW5hYmxlX3ZsYW40awk9IHJ0bDgzNjZyYl9lbmFibGVfdmxhbjRrLAorCS5lbmFibGVfcG9ydAk9IHJ0bDgzNjZyYl9lbmFibGVfcG9ydCwKK307CisKK3N0YXRpYyBpbnQgcnRsODM2NnJiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RhdGljIGludCBydGw4MzY2X3NtaV92ZXJzaW9uX3ByaW50ZWQ7CisJc3RydWN0IHJ0bDgzNjZfc21pICpzbWk7CisJaW50IGVycjsKKworCWlmICghcnRsODM2Nl9zbWlfdmVyc2lvbl9wcmludGVkKyspCisJCXByaW50ayhLRVJOX05PVElDRSBSVEw4MzY2UkJfRFJJVkVSX0RFU0MKKwkJICAgICAgICIgdmVyc2lvbiAiIFJUTDgzNjZSQl9EUklWRVJfVkVSIlxuIik7CisKKwlzbWkgPSBydGw4MzY2X3NtaV9wcm9iZShwZGV2KTsKKwlpZiAoSVNfRVJSKHNtaSkpCisJCXJldHVybiBQVFJfRVJSKHNtaSk7CisKKwlzbWktPmNsa19kZWxheSA9IDEwOworCXNtaS0+Y21kX3JlYWQgPSAweGE5OworCXNtaS0+Y21kX3dyaXRlID0gMHhhODsKKwlzbWktPm9wcyA9ICZydGw4MzY2cmJfc21pX29wczsKKwlzbWktPmNwdV9wb3J0ID0gUlRMODM2NlJCX1BPUlRfTlVNX0NQVTsKKwlzbWktPm51bV9wb3J0cyA9IFJUTDgzNjZSQl9OVU1fUE9SVFM7CisJc21pLT5udW1fdmxhbl9tYyA9IFJUTDgzNjZSQl9OVU1fVkxBTlM7CisJc21pLT5taWJfY291bnRlcnMgPSBydGw4MzY2cmJfbWliX2NvdW50ZXJzOworCXNtaS0+bnVtX21pYl9jb3VudGVycyA9IEFSUkFZX1NJWkUocnRsODM2NnJiX21pYl9jb3VudGVycyk7CisKKwllcnIgPSBydGw4MzY2X3NtaV9pbml0KHNtaSk7CisJaWYgKGVycikKKwkJZ290byBlcnJfZnJlZV9zbWk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBzbWkpOworCisJZXJyID0gcnRsODM2NnJiX3N3aXRjaF9pbml0KHNtaSk7CisJaWYgKGVycikKKwkJZ290byBlcnJfY2xlYXJfZHJ2ZGF0YTsKKworCXJldHVybiAwOworCisgZXJyX2NsZWFyX2RydmRhdGE6CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJcnRsODM2Nl9zbWlfY2xlYW51cChzbWkpOworIGVycl9mcmVlX3NtaToKKwlrZnJlZShzbWkpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2NnJiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBydGw4MzY2X3NtaSAqc21pID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAoc21pKSB7CisJCXJ0bDgzNjZyYl9zd2l0Y2hfY2xlYW51cChzbWkpOworCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwkJcnRsODM2Nl9zbWlfY2xlYW51cChzbWkpOworCQlrZnJlZShzbWkpOworCX0KKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX09GCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBydGw4MzY2cmJfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInJlYWx0ZWsscnRsODM2NnJiIiB9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHJ0bDgzNjZyYl9tYXRjaCk7CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcnRsODM2NnJiX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSBSVEw4MzY2UkJfRFJJVkVSX05BTUUsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKHJ0bDgzNjZyYl9tYXRjaCksCisJfSwKKwkucHJvYmUJCT0gcnRsODM2NnJiX3Byb2JlLAorCS5yZW1vdmUJCT0gcnRsODM2NnJiX3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHJ0bDgzNjZyYl9tb2R1bGVfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnJ0bDgzNjZyYl9kcml2ZXIpOworfQorbW9kdWxlX2luaXQocnRsODM2NnJiX21vZHVsZV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHJ0bDgzNjZyYl9tb2R1bGVfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZydGw4MzY2cmJfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHJ0bDgzNjZyYl9tb2R1bGVfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTihSVEw4MzY2UkJfRFJJVkVSX0RFU0MpOworTU9EVUxFX1ZFUlNJT04oUlRMODM2NlJCX0RSSVZFUl9WRVIpOworTU9EVUxFX0FVVEhPUigiR2Fib3IgSnVob3MgPGp1aG9zZ0BvcGVud3J0Lm9yZz4iKTsKK01PRFVMRV9BVVRIT1IoIkFudHRpIFNlcHDDpGzDpCA8YS5zZXBwYWxhQGdtYWlsLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIlJvbWFuIFllcnlvbWluIDxyb21hbkBhZHZlbS5sdj4iKTsKK01PRFVMRV9BVVRIT1IoIkNvbGluIExlaXRuZXIgPGNvbGluLmxlaXRuZXJAZ29vZ2xlbWFpbC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgUlRMODM2NlJCX0RSSVZFUl9OQU1FKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9ydGw4MzY2cy5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9uZXQvcGh5L3J0bDgzNjZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM3NDY3NwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9ydGw4MzY2cy5jCkBAIC0wLDAgKzEsMTMyMCBAQAorLyoKKyAqIFBsYXRmb3JtIGRyaXZlciBmb3IgdGhlIFJlYWx0ZWsgUlRMODM2NlMgZXRoZXJuZXQgc3dpdGNoCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgR2Fib3IgSnVob3MgPGp1aG9zZ0BvcGVud3J0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBBbnR0aSBTZXBww6Rsw6QgPGEuc2VwcGFsYUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3J0bDgzNjYuaD4KKworI2luY2x1ZGUgInJ0bDgzNjZfc21pLmgiCisKKyNkZWZpbmUgUlRMODM2NlNfRFJJVkVSX0RFU0MJIlJlYWx0ZWsgUlRMODM2NlMgZXRoZXJuZXQgc3dpdGNoIGRyaXZlciIKKyNkZWZpbmUgUlRMODM2NlNfRFJJVkVSX1ZFUgkiMC4yLjIiCisKKyNkZWZpbmUgUlRMODM2NlNfUEhZX05PX01BWAk0CisjZGVmaW5lIFJUTDgzNjZTX1BIWV9QQUdFX01BWAk3CisjZGVmaW5lIFJUTDgzNjZTX1BIWV9BRERSX01BWAkzMQorCisvKiBTd2l0Y2ggR2xvYmFsIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUlRMODM2NlNfU0dDUgkJCQkweDAwMDAKKyNkZWZpbmUgUlRMODM2NlNfU0dDUl9FTl9CQ19TVE9STV9DVFJMCQlCSVQoMCkKKyNkZWZpbmUgUlRMODM2NlNfU0dDUl9NQVhfTEVOR1RIKF94KQkJKF94IDw8IDQpCisjZGVmaW5lIFJUTDgzNjZTX1NHQ1JfTUFYX0xFTkdUSF9NQVNLCQlSVEw4MzY2U19TR0NSX01BWF9MRU5HVEgoMHgzKQorI2RlZmluZSBSVEw4MzY2U19TR0NSX01BWF9MRU5HVEhfMTUyMgkJUlRMODM2NlNfU0dDUl9NQVhfTEVOR1RIKDB4MCkKKyNkZWZpbmUgUlRMODM2NlNfU0dDUl9NQVhfTEVOR1RIXzE1MzYJCVJUTDgzNjZTX1NHQ1JfTUFYX0xFTkdUSCgweDEpCisjZGVmaW5lIFJUTDgzNjZTX1NHQ1JfTUFYX0xFTkdUSF8xNTUyCQlSVEw4MzY2U19TR0NSX01BWF9MRU5HVEgoMHgyKQorI2RlZmluZSBSVEw4MzY2U19TR0NSX01BWF9MRU5HVEhfMTYwMDAJCVJUTDgzNjZTX1NHQ1JfTUFYX0xFTkdUSCgweDMpCisjZGVmaW5lIFJUTDgzNjZTX1NHQ1JfRU5fVkxBTgkJCUJJVCgxMykKKworLyogUG9ydCBFbmFibGUgQ29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBSVEw4MzY2U19QRUNSCQkJCTB4MDAwMQorCisvKiBHcmVlbiBFdGhlcm5ldCBGZWF0dXJlIChiYXNlZCBvbiBHUExfQkVMS0lOX0Y1RDgyMzUtNF92MTAwMCB2MS4wMS4yNCkgKi8KKyNkZWZpbmUgUlRMODM2NlNfR1JFRU5fRVRIRVJORVRfQ1RSTF9SRUcJMHgwMDBhCisjZGVmaW5lIFJUTDgzNjZTX0dSRUVOX0VUSEVSTkVUX0NUUkxfTUFTSwkweDAwMTgKKyNkZWZpbmUgUlRMODM2NlNfR1JFRU5fRVRIRVJORVRfVFhfQklUCQkoMSA8PCAzKQorI2RlZmluZSBSVEw4MzY2U19HUkVFTl9FVEhFUk5FVF9SWF9CSVQJCSgxIDw8IDQpCisKKy8qIFN3aXRjaCBTZWN1cml0eSBDb250cm9sIHJlZ2lzdGVycyAqLworI2RlZmluZSBSVEw4MzY2U19TU0NSMAkJCQkweDAwMDIKKyNkZWZpbmUgUlRMODM2NlNfU1NDUjEJCQkJMHgwMDAzCisjZGVmaW5lIFJUTDgzNjZTX1NTQ1IyCQkJCTB4MDAwNAorI2RlZmluZSBSVEw4MzY2U19TU0NSMl9EUk9QX1VOS05PV05fREEJCUJJVCgwKQorCisjZGVmaW5lIFJUTDgzNjZTX1JFU0VUX0NUUkxfUkVHCQkJMHgwMTAwCisjZGVmaW5lIFJUTDgzNjZTX0NISVBfQ1RSTF9SRVNFVF9IVwkJMQorI2RlZmluZSBSVEw4MzY2U19DSElQX0NUUkxfUkVTRVRfU1cJCSgxIDw8IDEpCisKKyNkZWZpbmUgUlRMODM2NlNfQ0hJUF9WRVJTSU9OX0NUUkxfUkVHCQkweDAxMDQKKyNkZWZpbmUgUlRMODM2NlNfQ0hJUF9WRVJTSU9OX01BU0sJCTB4ZgorI2RlZmluZSBSVEw4MzY2U19DSElQX0lEX1JFRwkJCTB4MDEwNQorI2RlZmluZSBSVEw4MzY2U19DSElQX0lEXzgzNjYJCQkweDgzNjYKKworLyogUEhZIHJlZ2lzdGVycyBjb250cm9sICovCisjZGVmaW5lIFJUTDgzNjZTX1BIWV9BQ0NFU1NfQ1RSTF9SRUcJCTB4ODAyOAorI2RlZmluZSBSVEw4MzY2U19QSFlfQUNDRVNTX0RBVEFfUkVHCQkweDgwMjkKKworI2RlZmluZSBSVEw4MzY2U19QSFlfQ1RSTF9SRUFECQkJMQorI2RlZmluZSBSVEw4MzY2U19QSFlfQ1RSTF9XUklURQkJCTAKKworI2RlZmluZSBSVEw4MzY2U19QSFlfUkVHX01BU0sJCQkweDFmCisjZGVmaW5lIFJUTDgzNjZTX1BIWV9QQUdFX09GRlNFVAkJNQorI2RlZmluZSBSVEw4MzY2U19QSFlfUEFHRV9NQVNLCQkJKDB4NyA8PCA1KQorI2RlZmluZSBSVEw4MzY2U19QSFlfTk9fT0ZGU0VUCQkJOQorI2RlZmluZSBSVEw4MzY2U19QSFlfTk9fTUFTSwkJCSgweDFmIDw8IDkpCisKKy8qIEdyZWVuIEV0aGVybmV0IEZlYXR1cmUgZm9yIFBIWSBwb3J0cyAqLworI2RlZmluZSBSVEw4MzY2U19QSFlfUE9XRVJfU0FWSU5HX0NUUkxfUkVHCTEyCisjZGVmaW5lIFJUTDgzNjZTX1BIWV9QT1dFUl9TQVZJTkdfTUFTSwkJMHgxMDAwCisKKy8qIExFRCBjb250cm9sIHJlZ2lzdGVycyAqLworI2RlZmluZSBSVEw4MzY2U19MRURfQkxJTktSQVRFX1JFRwkJMHgwNDIwCisjZGVmaW5lIFJUTDgzNjZTX0xFRF9CTElOS1JBVEVfQklUCQkwCisjZGVmaW5lIFJUTDgzNjZTX0xFRF9CTElOS1JBVEVfTUFTSwkJMHgwMDA3CisKKyNkZWZpbmUgUlRMODM2NlNfTEVEX0NUUkxfUkVHCQkJMHgwNDIxCisjZGVmaW5lIFJUTDgzNjZTX0xFRF8wXzFfQ1RSTF9SRUcJCTB4MDQyMgorI2RlZmluZSBSVEw4MzY2U19MRURfMl8zX0NUUkxfUkVHCQkweDA0MjMKKworI2RlZmluZSBSVEw4MzY2U19NSUJfQ09VTlQJCQkzMworI2RlZmluZSBSVEw4MzY2U19HTE9CQUxfTUlCX0NPVU5UCQkxCisjZGVmaW5lIFJUTDgzNjZTX01JQl9DT1VOVEVSX1BPUlRfT0ZGU0VUCTB4MDA0MAorI2RlZmluZSBSVEw4MzY2U19NSUJfQ09VTlRFUl9CQVNFCQkweDEwMDAKKyNkZWZpbmUgUlRMODM2NlNfTUlCX0NPVU5URVJfUE9SVF9PRkZTRVQyCTB4MDAwOAorI2RlZmluZSBSVEw4MzY2U19NSUJfQ09VTlRFUl9CQVNFMgkJMHgxMTgwCisjZGVmaW5lIFJUTDgzNjZTX01JQl9DVFJMX1JFRwkJCTB4MTFGMAorI2RlZmluZSBSVEw4MzY2U19NSUJfQ1RSTF9VU0VSX01BU0sJCTB4MDFGRgorI2RlZmluZSBSVEw4MzY2U19NSUJfQ1RSTF9CVVNZX01BU0sJCTB4MDAwMQorI2RlZmluZSBSVEw4MzY2U19NSUJfQ1RSTF9SRVNFVF9NQVNLCQkweDAwMDIKKworI2RlZmluZSBSVEw4MzY2U19NSUJfQ1RSTF9HTE9CQUxfUkVTRVRfTUFTSwkweDAwMDQKKyNkZWZpbmUgUlRMODM2NlNfTUlCX0NUUkxfUE9SVF9SRVNFVF9CSVQJMHgwMDAzCisjZGVmaW5lIFJUTDgzNjZTX01JQl9DVFJMX1BPUlRfUkVTRVRfTUFTSwkweDAxRkMKKworCisjZGVmaW5lIFJUTDgzNjZTX1BPUlRfVkxBTl9DVFJMX0JBU0UJCTB4MDA1OAorI2RlZmluZSBSVEw4MzY2U19QT1JUX1ZMQU5fQ1RSTF9SRUcoX3ApICBcCisJCShSVEw4MzY2U19QT1JUX1ZMQU5fQ1RSTF9CQVNFICsgKF9wKSAvIDQpCisjZGVmaW5lIFJUTDgzNjZTX1BPUlRfVkxBTl9DVFJMX01BU0sJCTB4ZgorI2RlZmluZSBSVEw4MzY2U19QT1JUX1ZMQU5fQ1RSTF9TSElGVChfcCkJKDQgKiAoKF9wKSAlIDQpKQorCisKKyNkZWZpbmUgUlRMODM2NlNfVkxBTl9UQUJMRV9SRUFEX0JBU0UJCTB4MDE4QgorI2RlZmluZSBSVEw4MzY2U19WTEFOX1RBQkxFX1dSSVRFX0JBU0UJCTB4MDE4NQorCisjZGVmaW5lIFJUTDgzNjZTX1ZMQU5fVEJfQ1RSTF9SRUcJCTB4MDEwRgorCisjZGVmaW5lIFJUTDgzNjZTX1RBQkxFX0FDQ0VTU19DVFJMX1JFRwkJMHgwMTgwCisjZGVmaW5lIFJUTDgzNjZTX1RBQkxFX1ZMQU5fUkVBRF9DVFJMCQkweDBFMDEKKyNkZWZpbmUgUlRMODM2NlNfVEFCTEVfVkxBTl9XUklURV9DVFJMCQkweDBGMDEKKworI2RlZmluZSBSVEw4MzY2U19WTEFOX01DX0JBU0UoX3gpCQkoMHgwMDE2ICsgKF94KSAqIDIpCisKKyNkZWZpbmUgUlRMODM2NlNfVkxBTl9NRU1CRVJJTkdSRVNTX1JFRwkJMHgwMzc5CisKKyNkZWZpbmUgUlRMODM2NlNfUE9SVF9MSU5LX1NUQVRVU19CQVNFCQkweDAwNjAKKyNkZWZpbmUgUlRMODM2NlNfUE9SVF9TVEFUVVNfU1BFRURfTUFTSwkJMHgwMDAzCisjZGVmaW5lIFJUTDgzNjZTX1BPUlRfU1RBVFVTX0RVUExFWF9NQVNLCTB4MDAwNAorI2RlZmluZSBSVEw4MzY2U19QT1JUX1NUQVRVU19MSU5LX01BU0sJCTB4MDAxMAorI2RlZmluZSBSVEw4MzY2U19QT1JUX1NUQVRVU19UWFBBVVNFX01BU0sJMHgwMDIwCisjZGVmaW5lIFJUTDgzNjZTX1BPUlRfU1RBVFVTX1JYUEFVU0VfTUFTSwkweDAwNDAKKyNkZWZpbmUgUlRMODM2NlNfUE9SVF9TVEFUVVNfQU5fTUFTSwkJMHgwMDgwCisKKworI2RlZmluZSBSVEw4MzY2U19QT1JUX05VTV9DUFUJCTUKKyNkZWZpbmUgUlRMODM2NlNfTlVNX1BPUlRTCQk2CisjZGVmaW5lIFJUTDgzNjZTX05VTV9WTEFOUwkJMTYKKyNkZWZpbmUgUlRMODM2NlNfTlVNX0xFREdST1VQUwkJNAorI2RlZmluZSBSVEw4MzY2U19OVU1fVklEUwkJNDA5NgorI2RlZmluZSBSVEw4MzY2U19QUklPUklUWU1BWAkJNworI2RlZmluZSBSVEw4MzY2U19GSURNQVgJCQk3CisKKworI2RlZmluZSBSVEw4MzY2U19QT1JUXzEJCQkoMSA8PCAwKSAvKiBJbiB1c2Vyc3BhY2UgcG9ydCAwICovCisjZGVmaW5lIFJUTDgzNjZTX1BPUlRfMgkJCSgxIDw8IDEpIC8qIEluIHVzZXJzcGFjZSBwb3J0IDEgKi8KKyNkZWZpbmUgUlRMODM2NlNfUE9SVF8zCQkJKDEgPDwgMikgLyogSW4gdXNlcnNwYWNlIHBvcnQgMiAqLworI2RlZmluZSBSVEw4MzY2U19QT1JUXzQJCQkoMSA8PCAzKSAvKiBJbiB1c2Vyc3BhY2UgcG9ydCAzICovCisKKyNkZWZpbmUgUlRMODM2NlNfUE9SVF9VTktOT1dOCQkoMSA8PCA0KSAvKiBObyBrbm93biBjb25uZWN0aW9uICovCisjZGVmaW5lIFJUTDgzNjZTX1BPUlRfQ1BVCQkoMSA8PCA1KSAvKiBDUFUgcG9ydCAqLworCisjZGVmaW5lIFJUTDgzNjZTX1BPUlRfQUxMCQkoUlRMODM2NlNfUE9SVF8xIHwJXAorCQkJCQkgUlRMODM2NlNfUE9SVF8yIHwJXAorCQkJCQkgUlRMODM2NlNfUE9SVF8zIHwJXAorCQkJCQkgUlRMODM2NlNfUE9SVF80IHwJXAorCQkJCQkgUlRMODM2NlNfUE9SVF9VTktOT1dOIHwgXAorCQkJCQkgUlRMODM2NlNfUE9SVF9DUFUpCisKKyNkZWZpbmUgUlRMODM2NlNfUE9SVF9BTExfQlVUX0NQVQkoUlRMODM2NlNfUE9SVF8xIHwJXAorCQkJCQkgUlRMODM2NlNfUE9SVF8yIHwJXAorCQkJCQkgUlRMODM2NlNfUE9SVF8zIHwJXAorCQkJCQkgUlRMODM2NlNfUE9SVF80IHwJXAorCQkJCQkgUlRMODM2NlNfUE9SVF9VTktOT1dOKQorCisjZGVmaW5lIFJUTDgzNjZTX1BPUlRfQUxMX0VYVEVSTkFMCShSVEw4MzY2U19QT1JUXzEgfAlcCisJCQkJCSBSVEw4MzY2U19QT1JUXzIgfAlcCisJCQkJCSBSVEw4MzY2U19QT1JUXzMgfAlcCisJCQkJCSBSVEw4MzY2U19QT1JUXzQpCisKKyNkZWZpbmUgUlRMODM2NlNfUE9SVF9BTExfSU5URVJOQUwJKFJUTDgzNjZTX1BPUlRfVU5LTk9XTiB8IFwKKwkJCQkJIFJUTDgzNjZTX1BPUlRfQ1BVKQorCisjZGVmaW5lIFJUTDgzNjZTX1ZMQU5fVklEX01BU0sJCTB4ZmZmCisjZGVmaW5lIFJUTDgzNjZTX1ZMQU5fUFJJT1JJVFlfU0hJRlQJMTIKKyNkZWZpbmUgUlRMODM2NlNfVkxBTl9QUklPUklUWV9NQVNLCTB4NworI2RlZmluZSBSVEw4MzY2U19WTEFOX01FTUJFUl9NQVNLCTB4M2YKKyNkZWZpbmUgUlRMODM2NlNfVkxBTl9VTlRBR19TSElGVAk2CisjZGVmaW5lIFJUTDgzNjZTX1ZMQU5fVU5UQUdfTUFTSwkweDNmCisjZGVmaW5lIFJUTDgzNjZTX1ZMQU5fRklEX1NISUZUCQkxMgorI2RlZmluZSBSVEw4MzY2U19WTEFOX0ZJRF9NQVNLCQkweDcKKworI2RlZmluZSBSVEw4MzY2U19NSUJfUlhCX0lECQkwCS8qIElmSW5PY3RldHMgKi8KKyNkZWZpbmUgUlRMODM2NlNfTUlCX1RYQl9JRAkJMjAJLyogSWZPdXRPY3RldHMgKi8KKworc3RhdGljIHN0cnVjdCBydGw4MzY2X21pYl9jb3VudGVyIHJ0bDgzNjZzX21pYl9jb3VudGVyc1tdID0geworCXsgMCwgIDAsIDQsICJJZkluT2N0ZXRzIgkJCQl9LAorCXsgMCwgIDQsIDQsICJFdGhlclN0YXRzT2N0ZXRzIgkJCQl9LAorCXsgMCwgIDgsIDIsICJFdGhlclN0YXRzVW5kZXJTaXplUGt0cyIJCQl9LAorCXsgMCwgMTAsIDIsICJFdGhlckZyYWdtZW50cyIJCQkJfSwKKwl7IDAsIDEyLCAyLCAiRXRoZXJTdGF0c1BrdHM2NE9jdGV0cyIJCQl9LAorCXsgMCwgMTQsIDIsICJFdGhlclN0YXRzUGt0czY1dG8xMjdPY3RldHMiCQl9LAorCXsgMCwgMTYsIDIsICJFdGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzIgkJfSwKKwl7IDAsIDE4LCAyLCAiRXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0cyIJCX0sCisJeyAwLCAyMCwgMiwgIkV0aGVyU3RhdHNQa3RzNTEydG8xMDIzT2N0ZXRzIgkJfSwKKwl7IDAsIDIyLCAyLCAiRXRoZXJTdGF0c1BrdHMxMDI0dG8xNTE4T2N0ZXRzIgkJfSwKKwl7IDAsIDI0LCAyLCAiRXRoZXJPdmVyc2l6ZVN0YXRzIgkJCX0sCisJeyAwLCAyNiwgMiwgIkV0aGVyU3RhdHNKYWJiZXJzIgkJCQl9LAorCXsgMCwgMjgsIDIsICJJZkluVWNhc3RQa3RzIgkJCQl9LAorCXsgMCwgMzAsIDIsICJFdGhlclN0YXRzTXVsdGljYXN0UGt0cyIJCQl9LAorCXsgMCwgMzIsIDIsICJFdGhlclN0YXRzQnJvYWRjYXN0UGt0cyIJCQl9LAorCXsgMCwgMzQsIDIsICJFdGhlclN0YXRzRHJvcEV2ZW50cyIJCQl9LAorCXsgMCwgMzYsIDIsICJEb3QzU3RhdHNGQ1NFcnJvcnMiCQkJfSwKKwl7IDAsIDM4LCAyLCAiRG90M1N0YXRzU3ltYm9sRXJyb3JzIgkJCX0sCisJeyAwLCA0MCwgMiwgIkRvdDNJblBhdXNlRnJhbWVzIgkJCQl9LAorCXsgMCwgNDIsIDIsICJEb3QzQ29udHJvbEluVW5rbm93bk9wY29kZXMiCQl9LAorCXsgMCwgNDQsIDQsICJJZk91dE9jdGV0cyIJCQkJfSwKKwl7IDAsIDQ4LCAyLCAiRG90M1N0YXRzU2luZ2xlQ29sbGlzaW9uRnJhbWVzIgkJfSwKKwl7IDAsIDUwLCAyLCAiRG90M1N0YXRNdWx0aXBsZUNvbGxpc2lvbkZyYW1lcyIJCX0sCisJeyAwLCA1MiwgMiwgIkRvdDNzRGVmZXJyZWRUcmFuc21pc3Npb25zIgkJfSwKKwl7IDAsIDU0LCAyLCAiRG90M1N0YXRzTGF0ZUNvbGxpc2lvbnMiCQkJfSwKKwl7IDAsIDU2LCAyLCAiRXRoZXJTdGF0c0NvbGxpc2lvbnMiCQkJfSwKKwl7IDAsIDU4LCAyLCAiRG90M1N0YXRzRXhjZXNzaXZlQ29sbGlzaW9ucyIJCX0sCisJeyAwLCA2MCwgMiwgIkRvdDNPdXRQYXVzZUZyYW1lcyIJCQl9LAorCXsgMCwgNjIsIDIsICJEb3QxZEJhc2VQb3J0RGVsYXlFeGNlZWRlZERpc2NhcmRzIgl9LAorCisJLyoKKwkgKiBUaGUgZm9sbG93aW5nIGNvdW50ZXJzIGFyZSBhY2Nlc3NpYmxlIGF0IGEgZGlmZmVyZW50CisJICogYmFzZSBhZGRyZXNzLgorCSAqLworCXsgMSwgIDAsIDIsICJEb3QxZFRwUG9ydEluRGlzY2FyZHMiCQkJfSwKKwl7IDEsICAyLCAyLCAiSWZPdXRVY2FzdFBrdHMiCQkJCX0sCisJeyAxLCAgNCwgMiwgIklmT3V0TXVsdGljYXN0UGt0cyIJCQl9LAorCXsgMSwgIDYsIDIsICJJZk91dEJyb2FkY2FzdFBrdHMiCQkJfSwKK307CisKKyNkZWZpbmUgUkVHX1dSKF9zbWksIF9yZWcsIF92YWwpCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQllcnIgPSBydGw4MzY2X3NtaV93cml0ZV9yZWcoX3NtaSwgX3JlZywgX3ZhbCk7CQlcCisJCWlmIChlcnIpCQkJCQkJXAorCQkJcmV0dXJuIGVycjsJCQkJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFJFR19STVcoX3NtaSwgX3JlZywgX21hc2ssIF92YWwpCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWVyciA9IHJ0bDgzNjZfc21pX3Jtd3IoX3NtaSwgX3JlZywgX21hc2ssIF92YWwpOwlcCisJCWlmIChlcnIpCQkJCQkJXAorCQkJcmV0dXJuIGVycjsJCQkJCVwKKwl9IHdoaWxlICgwKQorCitzdGF0aWMgaW50IHJ0bDgzNjZzX3Jlc2V0X2NoaXAoc3RydWN0IHJ0bDgzNjZfc21pICpzbWkpCit7CisJaW50IHRpbWVvdXQgPSAxMDsKKwl1MzIgZGF0YTsKKworCXJ0bDgzNjZfc21pX3dyaXRlX3JlZ19ub2FjayhzbWksIFJUTDgzNjZTX1JFU0VUX0NUUkxfUkVHLAorCQkJCSAgICBSVEw4MzY2U19DSElQX0NUUkxfUkVTRVRfSFcpOworCWRvIHsKKwkJbXNsZWVwKDEpOworCQlpZiAocnRsODM2Nl9zbWlfcmVhZF9yZWcoc21pLCBSVEw4MzY2U19SRVNFVF9DVFJMX1JFRywgJmRhdGEpKQorCQkJcmV0dXJuIC1FSU87CisKKwkJaWYgKCEoZGF0YSAmIFJUTDgzNjZTX0NISVBfQ1RSTF9SRVNFVF9IVykpCisJCQlicmVhazsKKwl9IHdoaWxlICgtLXRpbWVvdXQpOworCisJaWYgKCF0aW1lb3V0KSB7CisJCXByaW50aygiVGltZW91dCB3YWl0aW5nIGZvciB0aGUgc3dpdGNoIHRvIHJlc2V0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2NnNfcmVhZF9waHlfcmVnKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLAorCQkJCSB1MzIgcGh5X25vLCB1MzIgcGFnZSwgdTMyIGFkZHIsIHUzMiAqZGF0YSkKK3sKKwl1MzIgcmVnOworCWludCByZXQ7CisKKwlpZiAocGh5X25vID4gUlRMODM2NlNfUEhZX05PX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocGFnZSA+IFJUTDgzNjZTX1BIWV9QQUdFX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYWRkciA+IFJUTDgzNjZTX1BIWV9BRERSX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBydGw4MzY2X3NtaV93cml0ZV9yZWcoc21pLCBSVEw4MzY2U19QSFlfQUNDRVNTX0NUUkxfUkVHLAorCQkJCSAgICBSVEw4MzY2U19QSFlfQ1RSTF9SRUFEKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmVnID0gMHg4MDAwIHwgKDEgPDwgKHBoeV9ubyArIFJUTDgzNjZTX1BIWV9OT19PRkZTRVQpKSB8CisJICAgICAgKChwYWdlIDw8IFJUTDgzNjZTX1BIWV9QQUdFX09GRlNFVCkgJiBSVEw4MzY2U19QSFlfUEFHRV9NQVNLKSB8CisJICAgICAgKGFkZHIgJiBSVEw4MzY2U19QSFlfUkVHX01BU0spOworCisJcmV0ID0gcnRsODM2Nl9zbWlfd3JpdGVfcmVnKHNtaSwgcmVnLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gcnRsODM2Nl9zbWlfcmVhZF9yZWcoc21pLCBSVEw4MzY2U19QSFlfQUNDRVNTX0RBVEFfUkVHLCBkYXRhKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2NnNfd3JpdGVfcGh5X3JlZyhzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwKKwkJCQkgIHUzMiBwaHlfbm8sIHUzMiBwYWdlLCB1MzIgYWRkciwgdTMyIGRhdGEpCit7CisJdTMyIHJlZzsKKwlpbnQgcmV0OworCisJaWYgKHBoeV9ubyA+IFJUTDgzNjZTX1BIWV9OT19NQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHBhZ2UgPiBSVEw4MzY2U19QSFlfUEFHRV9NQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGFkZHIgPiBSVEw4MzY2U19QSFlfQUREUl9NQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gcnRsODM2Nl9zbWlfd3JpdGVfcmVnKHNtaSwgUlRMODM2NlNfUEhZX0FDQ0VTU19DVFJMX1JFRywKKwkJCQkgICAgUlRMODM2NlNfUEhZX0NUUkxfV1JJVEUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZWcgPSAweDgwMDAgfCAoMSA8PCAocGh5X25vICsgUlRMODM2NlNfUEhZX05PX09GRlNFVCkpIHwKKwkgICAgICAoKHBhZ2UgPDwgUlRMODM2NlNfUEhZX1BBR0VfT0ZGU0VUKSAmIFJUTDgzNjZTX1BIWV9QQUdFX01BU0spIHwKKwkgICAgICAoYWRkciAmIFJUTDgzNjZTX1BIWV9SRUdfTUFTSyk7CisKKwlyZXQgPSBydGw4MzY2X3NtaV93cml0ZV9yZWcoc21pLCByZWcsIGRhdGEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MzY2c19zZXRfZ3JlZW5fcG9ydChzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwgaW50IHBvcnQsIGludCBlbmFibGUpCit7CisJaW50IGVycjsKKwl1MzIgcGh5RGF0YTsKKworCWlmIChwb3J0ID49IFJUTDgzNjZTX05VTV9QT1JUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllcnIgPSBydGw4MzY2c19yZWFkX3BoeV9yZWcoc21pLCBwb3J0LCAwLCBSVEw4MzY2U19QSFlfUE9XRVJfU0FWSU5HX0NUUkxfUkVHLCAmcGh5RGF0YSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmIChlbmFibGUpCisJCXBoeURhdGEgfD0gUlRMODM2NlNfUEhZX1BPV0VSX1NBVklOR19NQVNLOworCWVsc2UKKwkJcGh5RGF0YSAmPSB+UlRMODM2NlNfUEhZX1BPV0VSX1NBVklOR19NQVNLOworCisJZXJyID0gcnRsODM2NnNfd3JpdGVfcGh5X3JlZyhzbWksIHBvcnQsIDAsIFJUTDgzNjZTX1BIWV9QT1dFUl9TQVZJTkdfQ1RSTF9SRUcsIHBoeURhdGEpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MzY2c19zZXRfZ3JlZW4oc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIGludCBlbmFibGUpCit7CisJaW50IGVycjsKKwl1bnNpZ25lZCBpOworCXUzMiBkYXRhID0gMDsKKworCWlmICghZW5hYmxlKSB7CisJCWZvciAoaSA9IDA7IGkgPD0gUlRMODM2NlNfUEhZX05PX01BWDsgaSsrKSB7CisJCQlydGw4MzY2c19zZXRfZ3JlZW5fcG9ydChzbWksIGksIDApOworCQl9CisJfQorCisJaWYgKGVuYWJsZSkKKwkJZGF0YSA9IChSVEw4MzY2U19HUkVFTl9FVEhFUk5FVF9UWF9CSVQgfCBSVEw4MzY2U19HUkVFTl9FVEhFUk5FVF9SWF9CSVQpOworCisJUkVHX1JNVyhzbWksIFJUTDgzNjZTX0dSRUVOX0VUSEVSTkVUX0NUUkxfUkVHLCBSVEw4MzY2U19HUkVFTl9FVEhFUk5FVF9DVFJMX01BU0ssIGRhdGEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2NnNfc2V0dXAoc3RydWN0IHJ0bDgzNjZfc21pICpzbWkpCit7CisJc3RydWN0IHJ0bDgzNjZfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJaW50IGVycjsKKwl1bnNpZ25lZCBpOworI2lmZGVmIENPTkZJR19PRgorCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJdW5zaWduZWQgbnVtX2luaXR2YWxzOworCWNvbnN0IF9fYmUzMiAqcGFkZHI7CisjZW5kaWYKKworCXBkYXRhID0gc21pLT5wYXJlbnQtPnBsYXRmb3JtX2RhdGE7CisJaWYgKHBkYXRhICYmIHBkYXRhLT5udW1faW5pdHZhbHMgJiYgcGRhdGEtPmluaXR2YWxzKSB7CisJCWRldl9pbmZvKHNtaS0+cGFyZW50LCAiYXBwbHlpbmcgaW5pdHZhbHNcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51bV9pbml0dmFsczsgaSsrKQorCQkJUkVHX1dSKHNtaSwgcGRhdGEtPmluaXR2YWxzW2ldLnJlZywKKwkJCSAgICAgICBwZGF0YS0+aW5pdHZhbHNbaV0udmFsKTsKKwl9CisKKyNpZmRlZiBDT05GSUdfT0YKKwlucCA9IHNtaS0+cGFyZW50LT5vZl9ub2RlOworCisJcGFkZHIgPSBvZl9nZXRfcHJvcGVydHkobnAsICJyZWFsdGVrLGluaXR2YWxzIiwgJm51bV9pbml0dmFscyk7CisJaWYgKHBhZGRyKSB7CisJCWRldl9pbmZvKHNtaS0+cGFyZW50LCAiYXBwbHlpbmcgaW5pdHZhbHMgZnJvbSBEVFNcbiIpOworCisJCWlmIChudW1faW5pdHZhbHMgPCAoMiAqIHNpemVvZigqcGFkZHIpKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCW51bV9pbml0dmFscyAvPSBzaXplb2YoKnBhZGRyKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2luaXR2YWxzIC0gMTsgaSArPSAyKSB7CisJCQl1MzIgcmVnID0gYmUzMl90b19jcHVwKHBhZGRyICsgaSk7CisJCQl1MzIgdmFsID0gYmUzMl90b19jcHVwKHBhZGRyICsgaSArIDEpOworCisJCQlSRUdfV1Ioc21pLCByZWcsIHZhbCk7CisJCX0KKwl9CisKKwlpZiAob2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCAicmVhbHRlayxncmVlbi1ldGhlcm5ldC1mZWF0dXJlcyIpKSB7CisJCWRldl9pbmZvKHNtaS0+cGFyZW50LCAiYWN0aXZhdGluZyBHcmVlbiBFdGhlcm5ldCBmZWF0dXJlc1xuIik7CisKKwkJZXJyID0gcnRsODM2NnNfc2V0X2dyZWVuKHNtaSwgMSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCWZvciAoaSA9IDA7IGkgPD0gUlRMODM2NlNfUEhZX05PX01BWDsgaSsrKSB7CisJCQllcnIgPSBydGw4MzY2c19zZXRfZ3JlZW5fcG9ydChzbWksIGksIDEpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQl9CisJfQorI2VuZGlmCisKKwkvKiBzZXQgbWF4aW11bSBwYWNrZXQgbGVuZ3RoIHRvIDE1MzYgYnl0ZXMgKi8KKwlSRUdfUk1XKHNtaSwgUlRMODM2NlNfU0dDUiwgUlRMODM2NlNfU0dDUl9NQVhfTEVOR1RIX01BU0ssCisJCVJUTDgzNjZTX1NHQ1JfTUFYX0xFTkdUSF8xNTM2KTsKKworCS8qIGVuYWJsZSBsZWFybmluZyBmb3IgYWxsIHBvcnRzICovCisJUkVHX1dSKHNtaSwgUlRMODM2NlNfU1NDUjAsIDApOworCisJLyogZW5hYmxlIGF1dG8gYWdlaW5nIGZvciBhbGwgcG9ydHMgKi8KKwlSRUdfV1Ioc21pLCBSVEw4MzY2U19TU0NSMSwgMCk7CisKKwkvKgorCSAqIGRpc2NhcmQgVkxBTiB0YWdnZWQgcGFja2V0cyBpZiB0aGUgcG9ydCBpcyBub3QgYSBtZW1iZXIgb2YKKwkgKiB0aGUgVkxBTiB3aXRoIHdoaWNoIHRoZSBwYWNrZXRzIGlzIGFzc29jaWF0ZWQuCisJICovCisJUkVHX1dSKHNtaSwgUlRMODM2NlNfVkxBTl9NRU1CRVJJTkdSRVNTX1JFRywgUlRMODM2NlNfUE9SVF9BTEwpOworCisJLyogZG9uJ3QgZHJvcCBwYWNrZXRzIHdob3NlIERBIGhhcyBub3QgYmVlbiBsZWFybmVkICovCisJUkVHX1JNVyhzbWksIFJUTDgzNjZTX1NTQ1IyLCBSVEw4MzY2U19TU0NSMl9EUk9QX1VOS05PV05fREEsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2Nl9nZXRfbWliX2NvdW50ZXIoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIGludCBjb3VudGVyLAorCQkJCSAgIGludCBwb3J0LCB1bnNpZ25lZCBsb25nIGxvbmcgKnZhbCkKK3sKKwlpbnQgaTsKKwlpbnQgZXJyOworCXUzMiBhZGRyLCBkYXRhOworCXU2NCBtaWJ2YWx1ZTsKKworCWlmIChwb3J0ID4gUlRMODM2NlNfTlVNX1BPUlRTIHx8IGNvdW50ZXIgPj0gUlRMODM2NlNfTUlCX0NPVU5UKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAocnRsODM2NnNfbWliX2NvdW50ZXJzW2NvdW50ZXJdLmJhc2UpIHsKKwljYXNlIDA6CisJCWFkZHIgPSBSVEw4MzY2U19NSUJfQ09VTlRFUl9CQVNFICsKKwkJICAgICAgIFJUTDgzNjZTX01JQl9DT1VOVEVSX1BPUlRfT0ZGU0VUICogcG9ydDsKKwkJYnJlYWs7CisKKwljYXNlIDE6CisJCWFkZHIgPSBSVEw4MzY2U19NSUJfQ09VTlRFUl9CQVNFMiArCisJCQlSVEw4MzY2U19NSUJfQ09VTlRFUl9QT1JUX09GRlNFVDIgKiBwb3J0OworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWFkZHIgKz0gcnRsODM2NnNfbWliX2NvdW50ZXJzW2NvdW50ZXJdLm9mZnNldDsKKworCS8qCisJICogV3JpdGluZyBhY2Nlc3MgY291bnRlciBhZGRyZXNzIGZpcnN0CisJICogdGhlbiBBU0lDIHdpbGwgcHJlcGFyZSA2NGJpdHMgY291bnRlciB3YWl0IGZvciBiZWluZyByZXRyaXZlZAorCSAqLworCWRhdGEgPSAwOyAvKiB3cml0aW5nIGRhdGEgd2lsbCBiZSBkaXNjYXJkIGJ5IEFTSUMgKi8KKwllcnIgPSBydGw4MzY2X3NtaV93cml0ZV9yZWcoc21pLCBhZGRyLCBkYXRhKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogcmVhZCBNSUIgY29udHJvbCByZWdpc3RlciAqLworCWVyciA9ICBydGw4MzY2X3NtaV9yZWFkX3JlZyhzbWksIFJUTDgzNjZTX01JQl9DVFJMX1JFRywgJmRhdGEpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAoZGF0YSAmIFJUTDgzNjZTX01JQl9DVFJMX0JVU1lfTUFTSykKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmIChkYXRhICYgUlRMODM2NlNfTUlCX0NUUkxfUkVTRVRfTUFTSykKKwkJcmV0dXJuIC1FSU87CisKKwltaWJ2YWx1ZSA9IDA7CisJZm9yIChpID0gcnRsODM2NnNfbWliX2NvdW50ZXJzW2NvdW50ZXJdLmxlbmd0aDsgaSA+IDA7IGktLSkgeworCQllcnIgPSBydGw4MzY2X3NtaV9yZWFkX3JlZyhzbWksIGFkZHIgKyAoaSAtIDEpLCAmZGF0YSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCW1pYnZhbHVlID0gKG1pYnZhbHVlIDw8IDE2KSB8IChkYXRhICYgMHhGRkZGKTsKKwl9CisKKwkqdmFsID0gbWlidmFsdWU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2NnNfZ2V0X3ZsYW5fNGsoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIHUzMiB2aWQsCisJCQkJc3RydWN0IHJ0bDgzNjZfdmxhbl80ayAqdmxhbjRrKQoreworCXUzMiBkYXRhWzJdOworCWludCBlcnI7CisJaW50IGk7CisKKwltZW1zZXQodmxhbjRrLCAnXDAnLCBzaXplb2Yoc3RydWN0IHJ0bDgzNjZfdmxhbl80aykpOworCisJaWYgKHZpZCA+PSBSVEw4MzY2U19OVU1fVklEUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiB3cml0ZSBWSUQgKi8KKwllcnIgPSBydGw4MzY2X3NtaV93cml0ZV9yZWcoc21pLCBSVEw4MzY2U19WTEFOX1RBQkxFX1dSSVRFX0JBU0UsCisJCQkJICAgIHZpZCAmIFJUTDgzNjZTX1ZMQU5fVklEX01BU0spOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiB3cml0ZSB0YWJsZSBhY2Nlc3MgY29udHJvbCB3b3JkICovCisJZXJyID0gcnRsODM2Nl9zbWlfd3JpdGVfcmVnKHNtaSwgUlRMODM2NlNfVEFCTEVfQUNDRVNTX0NUUkxfUkVHLAorCQkJCSAgICBSVEw4MzY2U19UQUJMRV9WTEFOX1JFQURfQ1RSTCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJZXJyID0gcnRsODM2Nl9zbWlfcmVhZF9yZWcoc21pLAorCQkJCQkgICBSVEw4MzY2U19WTEFOX1RBQkxFX1JFQURfQkFTRSArIGksCisJCQkJCSAgICZkYXRhW2ldKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJdmxhbjRrLT52aWQgPSB2aWQ7CisJdmxhbjRrLT51bnRhZyA9IChkYXRhWzFdID4+IFJUTDgzNjZTX1ZMQU5fVU5UQUdfU0hJRlQpICYKKwkJCVJUTDgzNjZTX1ZMQU5fVU5UQUdfTUFTSzsKKwl2bGFuNGstPm1lbWJlciA9IGRhdGFbMV0gJiBSVEw4MzY2U19WTEFOX01FTUJFUl9NQVNLOworCXZsYW40ay0+ZmlkID0gKGRhdGFbMV0gPj4gUlRMODM2NlNfVkxBTl9GSURfU0hJRlQpICYKKwkJCVJUTDgzNjZTX1ZMQU5fRklEX01BU0s7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MzY2c19zZXRfdmxhbl80ayhzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwKKwkJCQljb25zdCBzdHJ1Y3QgcnRsODM2Nl92bGFuXzRrICp2bGFuNGspCit7CisJdTMyIGRhdGFbMl07CisJaW50IGVycjsKKwlpbnQgaTsKKworCWlmICh2bGFuNGstPnZpZCA+PSBSVEw4MzY2U19OVU1fVklEUyB8fAorCSAgICB2bGFuNGstPm1lbWJlciA+IFJUTDgzNjZTX1ZMQU5fTUVNQkVSX01BU0sgfHwKKwkgICAgdmxhbjRrLT51bnRhZyA+IFJUTDgzNjZTX1ZMQU5fVU5UQUdfTUFTSyB8fAorCSAgICB2bGFuNGstPmZpZCA+IFJUTDgzNjZTX0ZJRE1BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkYXRhWzBdID0gdmxhbjRrLT52aWQgJiBSVEw4MzY2U19WTEFOX1ZJRF9NQVNLOworCWRhdGFbMV0gPSAodmxhbjRrLT5tZW1iZXIgJiBSVEw4MzY2U19WTEFOX01FTUJFUl9NQVNLKSB8CisJCSAgKCh2bGFuNGstPnVudGFnICYgUlRMODM2NlNfVkxBTl9VTlRBR19NQVNLKSA8PAorCQkJUlRMODM2NlNfVkxBTl9VTlRBR19TSElGVCkgfAorCQkgICgodmxhbjRrLT5maWQgJiBSVEw4MzY2U19WTEFOX0ZJRF9NQVNLKSA8PAorCQkJUlRMODM2NlNfVkxBTl9GSURfU0hJRlQpOworCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQllcnIgPSBydGw4MzY2X3NtaV93cml0ZV9yZWcoc21pLAorCQkJCQkgICAgUlRMODM2NlNfVkxBTl9UQUJMRV9XUklURV9CQVNFICsgaSwKKwkJCQkJICAgIGRhdGFbaV0pOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiB3cml0ZSB0YWJsZSBhY2Nlc3MgY29udHJvbCB3b3JkICovCisJZXJyID0gcnRsODM2Nl9zbWlfd3JpdGVfcmVnKHNtaSwgUlRMODM2NlNfVEFCTEVfQUNDRVNTX0NUUkxfUkVHLAorCQkJCSAgICBSVEw4MzY2U19UQUJMRV9WTEFOX1dSSVRFX0NUUkwpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBydGw4MzY2c19nZXRfdmxhbl9tYyhzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwgdTMyIGluZGV4LAorCQkJCXN0cnVjdCBydGw4MzY2X3ZsYW5fbWMgKnZsYW5tYykKK3sKKwl1MzIgZGF0YVsyXTsKKwlpbnQgZXJyOworCWludCBpOworCisJbWVtc2V0KHZsYW5tYywgJ1wwJywgc2l6ZW9mKHN0cnVjdCBydGw4MzY2X3ZsYW5fbWMpKTsKKworCWlmIChpbmRleCA+PSBSVEw4MzY2U19OVU1fVkxBTlMpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQllcnIgPSBydGw4MzY2X3NtaV9yZWFkX3JlZyhzbWksCisJCQkJCSAgIFJUTDgzNjZTX1ZMQU5fTUNfQkFTRShpbmRleCkgKyBpLAorCQkJCQkgICAmZGF0YVtpXSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXZsYW5tYy0+dmlkID0gZGF0YVswXSAmIFJUTDgzNjZTX1ZMQU5fVklEX01BU0s7CisJdmxhbm1jLT5wcmlvcml0eSA9IChkYXRhWzBdID4+IFJUTDgzNjZTX1ZMQU5fUFJJT1JJVFlfU0hJRlQpICYKKwkJCSAgIFJUTDgzNjZTX1ZMQU5fUFJJT1JJVFlfTUFTSzsKKwl2bGFubWMtPnVudGFnID0gKGRhdGFbMV0gPj4gUlRMODM2NlNfVkxBTl9VTlRBR19TSElGVCkgJgorCQkJUlRMODM2NlNfVkxBTl9VTlRBR19NQVNLOworCXZsYW5tYy0+bWVtYmVyID0gZGF0YVsxXSAmIFJUTDgzNjZTX1ZMQU5fTUVNQkVSX01BU0s7CisJdmxhbm1jLT5maWQgPSAoZGF0YVsxXSA+PiBSVEw4MzY2U19WTEFOX0ZJRF9TSElGVCkgJgorCQkgICAgICBSVEw4MzY2U19WTEFOX0ZJRF9NQVNLOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2NnNfc2V0X3ZsYW5fbWMoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIHUzMiBpbmRleCwKKwkJCQljb25zdCBzdHJ1Y3QgcnRsODM2Nl92bGFuX21jICp2bGFubWMpCit7CisJdTMyIGRhdGFbMl07CisJaW50IGVycjsKKwlpbnQgaTsKKworCWlmIChpbmRleCA+PSBSVEw4MzY2U19OVU1fVkxBTlMgfHwKKwkgICAgdmxhbm1jLT52aWQgPj0gUlRMODM2NlNfTlVNX1ZJRFMgfHwKKwkgICAgdmxhbm1jLT5wcmlvcml0eSA+IFJUTDgzNjZTX1BSSU9SSVRZTUFYIHx8CisJICAgIHZsYW5tYy0+bWVtYmVyID4gUlRMODM2NlNfVkxBTl9NRU1CRVJfTUFTSyB8fAorCSAgICB2bGFubWMtPnVudGFnID4gUlRMODM2NlNfVkxBTl9VTlRBR19NQVNLIHx8CisJICAgIHZsYW5tYy0+ZmlkID4gUlRMODM2NlNfRklETUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGFbMF0gPSAodmxhbm1jLT52aWQgJiBSVEw4MzY2U19WTEFOX1ZJRF9NQVNLKSB8CisJCSAgKCh2bGFubWMtPnByaW9yaXR5ICYgUlRMODM2NlNfVkxBTl9QUklPUklUWV9NQVNLKSA8PAorCQkJUlRMODM2NlNfVkxBTl9QUklPUklUWV9TSElGVCk7CisJZGF0YVsxXSA9ICh2bGFubWMtPm1lbWJlciAmIFJUTDgzNjZTX1ZMQU5fTUVNQkVSX01BU0spIHwKKwkJICAoKHZsYW5tYy0+dW50YWcgJiBSVEw4MzY2U19WTEFOX1VOVEFHX01BU0spIDw8CisJCQlSVEw4MzY2U19WTEFOX1VOVEFHX1NISUZUKSB8CisJCSAgKCh2bGFubWMtPmZpZCAmIFJUTDgzNjZTX1ZMQU5fRklEX01BU0spIDw8CisJCQlSVEw4MzY2U19WTEFOX0ZJRF9TSElGVCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWVyciA9IHJ0bDgzNjZfc21pX3dyaXRlX3JlZyhzbWksCisJCQkJCSAgICBSVEw4MzY2U19WTEFOX01DX0JBU0UoaW5kZXgpICsgaSwKKwkJCQkJICAgIGRhdGFbaV0pOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MzY2c19nZXRfbWNfaW5kZXgoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIGludCBwb3J0LCBpbnQgKnZhbCkKK3sKKwl1MzIgZGF0YTsKKwlpbnQgZXJyOworCisJaWYgKHBvcnQgPj0gUlRMODM2NlNfTlVNX1BPUlRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVyciA9IHJ0bDgzNjZfc21pX3JlYWRfcmVnKHNtaSwgUlRMODM2NlNfUE9SVF9WTEFOX0NUUkxfUkVHKHBvcnQpLAorCQkJCSAgICZkYXRhKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJKnZhbCA9IChkYXRhID4+IFJUTDgzNjZTX1BPUlRfVkxBTl9DVFJMX1NISUZUKHBvcnQpKSAmCisJICAgICAgIFJUTDgzNjZTX1BPUlRfVkxBTl9DVFJMX01BU0s7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MzY2c19zZXRfbWNfaW5kZXgoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIGludCBwb3J0LCBpbnQgaW5kZXgpCit7CisJaWYgKHBvcnQgPj0gUlRMODM2NlNfTlVNX1BPUlRTIHx8IGluZGV4ID49IFJUTDgzNjZTX05VTV9WTEFOUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gcnRsODM2Nl9zbWlfcm13cihzbWksIFJUTDgzNjZTX1BPUlRfVkxBTl9DVFJMX1JFRyhwb3J0KSwKKwkJCQlSVEw4MzY2U19QT1JUX1ZMQU5fQ1RSTF9NQVNLIDw8CisJCQkJCVJUTDgzNjZTX1BPUlRfVkxBTl9DVFJMX1NISUZUKHBvcnQpLAorCQkJCShpbmRleCAmIFJUTDgzNjZTX1BPUlRfVkxBTl9DVFJMX01BU0spIDw8CisJCQkJCVJUTDgzNjZTX1BPUlRfVkxBTl9DVFJMX1NISUZUKHBvcnQpKTsKK30KKworc3RhdGljIGludCBydGw4MzY2c19lbmFibGVfdmxhbihzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwgaW50IGVuYWJsZSkKK3sKKwlyZXR1cm4gcnRsODM2Nl9zbWlfcm13cihzbWksIFJUTDgzNjZTX1NHQ1IsIFJUTDgzNjZTX1NHQ1JfRU5fVkxBTiwKKwkJCQkoZW5hYmxlKSA/IFJUTDgzNjZTX1NHQ1JfRU5fVkxBTiA6IDApOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjZzX2VuYWJsZV92bGFuNGsoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIGludCBlbmFibGUpCit7CisJcmV0dXJuIHJ0bDgzNjZfc21pX3Jtd3Ioc21pLCBSVEw4MzY2U19WTEFOX1RCX0NUUkxfUkVHLAorCQkJCTEsIChlbmFibGUpID8gMSA6IDApOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjZzX2lzX3ZsYW5fdmFsaWQoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIHVuc2lnbmVkIHZsYW4pCit7CisJdW5zaWduZWQgbWF4ID0gUlRMODM2NlNfTlVNX1ZMQU5TOworCisJaWYgKHNtaS0+dmxhbjRrX2VuYWJsZWQpCisJCW1heCA9IFJUTDgzNjZTX05VTV9WSURTIC0gMTsKKworCWlmICh2bGFuID09IDAgfHwgdmxhbiA+PSBtYXgpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2NnNfZW5hYmxlX3BvcnQoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIGludCBwb3J0LCBpbnQgZW5hYmxlKQoreworCXJldHVybiBydGw4MzY2X3NtaV9ybXdyKHNtaSwgUlRMODM2NlNfUEVDUiwgKDEgPDwgcG9ydCksCisJCQkJKGVuYWJsZSkgPyAwIDogKDEgPDwgcG9ydCkpOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjZzX3N3X3Jlc2V0X21pYnMoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCQkgIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCQkgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IHJ0bDgzNjZfc21pICpzbWkgPSBzd190b19ydGw4MzY2X3NtaShkZXYpOworCisJcmV0dXJuIHJ0bDgzNjZfc21pX3Jtd3Ioc21pLCBSVEw4MzY2U19NSUJfQ1RSTF9SRUcsIDAsICgxIDw8IDIpKTsKK30KKworc3RhdGljIGludCBydGw4MzY2c19zd19nZXRfYmxpbmtyYXRlKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkJICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkJICAgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBydGw4MzY2X3NtaSAqc21pID0gc3dfdG9fcnRsODM2Nl9zbWkoZGV2KTsKKwl1MzIgZGF0YTsKKworCXJ0bDgzNjZfc21pX3JlYWRfcmVnKHNtaSwgUlRMODM2NlNfTEVEX0JMSU5LUkFURV9SRUcsICZkYXRhKTsKKworCXZhbC0+dmFsdWUuaSA9IChkYXRhICYgKFJUTDgzNjZTX0xFRF9CTElOS1JBVEVfTUFTSykpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2NnNfc3dfc2V0X2JsaW5rcmF0ZShzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJCSAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkJICAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IHJ0bDgzNjZfc21pICpzbWkgPSBzd190b19ydGw4MzY2X3NtaShkZXYpOworCisJaWYgKHZhbC0+dmFsdWUuaSA+PSA2KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBydGw4MzY2X3NtaV9ybXdyKHNtaSwgUlRMODM2NlNfTEVEX0JMSU5LUkFURV9SRUcsCisJCQkJUlRMODM2NlNfTEVEX0JMSU5LUkFURV9NQVNLLAorCQkJCXZhbC0+dmFsdWUuaSk7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2NnNfc3dfZ2V0X21heF9sZW5ndGgoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCQkJY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJCQlzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBydGw4MzY2X3NtaSAqc21pID0gc3dfdG9fcnRsODM2Nl9zbWkoZGV2KTsKKwl1MzIgZGF0YTsKKworCXJ0bDgzNjZfc21pX3JlYWRfcmVnKHNtaSwgUlRMODM2NlNfU0dDUiwgJmRhdGEpOworCisJdmFsLT52YWx1ZS5pID0gKChkYXRhICYgKFJUTDgzNjZTX1NHQ1JfTUFYX0xFTkdUSF9NQVNLKSkgPj4gNCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MzY2c19zd19zZXRfbWF4X2xlbmd0aChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJCQljb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkJCXN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IHJ0bDgzNjZfc21pICpzbWkgPSBzd190b19ydGw4MzY2X3NtaShkZXYpOworCWNoYXIgbGVuZ3RoX2NvZGU7CisKKwlzd2l0Y2ggKHZhbC0+dmFsdWUuaSkgeworCQljYXNlIDA6CisJCQlsZW5ndGhfY29kZSA9IFJUTDgzNjZTX1NHQ1JfTUFYX0xFTkdUSF8xNTIyOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWxlbmd0aF9jb2RlID0gUlRMODM2NlNfU0dDUl9NQVhfTEVOR1RIXzE1MzY7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJbGVuZ3RoX2NvZGUgPSBSVEw4MzY2U19TR0NSX01BWF9MRU5HVEhfMTU1MjsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlsZW5ndGhfY29kZSA9IFJUTDgzNjZTX1NHQ1JfTUFYX0xFTkdUSF8xNjAwMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHJ0bDgzNjZfc21pX3Jtd3Ioc21pLCBSVEw4MzY2U19TR0NSLAorCQkJUlRMODM2NlNfU0dDUl9NQVhfTEVOR1RIX01BU0ssCisJCQlsZW5ndGhfY29kZSk7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2NnNfc3dfZ2V0X2xlYXJuaW5nX2VuYWJsZShzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJCQkgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkJCSAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IHJ0bDgzNjZfc21pICpzbWkgPSBzd190b19ydGw4MzY2X3NtaShkZXYpOworCXUzMiBkYXRhOworCisJcnRsODM2Nl9zbWlfcmVhZF9yZWcoc21pLFJUTDgzNjZTX1NTQ1IwLCAmZGF0YSk7CisJdmFsLT52YWx1ZS5pID0gIWRhdGE7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHJ0bDgzNjZzX3N3X3NldF9sZWFybmluZ19lbmFibGUoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCQkJICAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJCQkgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBydGw4MzY2X3NtaSAqc21pID0gc3dfdG9fcnRsODM2Nl9zbWkoZGV2KTsKKwl1MzIgcG9ydG1hc2sgPSAwOworCWludCBlcnIgPSAwOworCisJaWYgKCF2YWwtPnZhbHVlLmkpCisJCXBvcnRtYXNrID0gUlRMODM2NlNfUE9SVF9BTEw7CisKKwkvKiBzZXQgbGVhcm5pbmcgZm9yIGFsbCBwb3J0cyAqLworCVJFR19XUihzbWksIFJUTDgzNjZTX1NTQ1IwLCBwb3J0bWFzayk7CisKKwkvKiBzZXQgYXV0byBhZ2VpbmcgZm9yIGFsbCBwb3J0cyAqLworCVJFR19XUihzbWksIFJUTDgzNjZTX1NTQ1IxLCBwb3J0bWFzayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MzY2c19zd19nZXRfZ3JlZW4oc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCSAgICAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IHJ0bDgzNjZfc21pICpzbWkgPSBzd190b19ydGw4MzY2X3NtaShkZXYpOworCXUzMiBkYXRhOworCWludCBlcnI7CisKKwllcnIgPSBydGw4MzY2X3NtaV9yZWFkX3JlZyhzbWksIFJUTDgzNjZTX0dSRUVOX0VUSEVSTkVUX0NUUkxfUkVHLCAmZGF0YSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXZhbC0+dmFsdWUuaSA9ICgoZGF0YSAmIChSVEw4MzY2U19HUkVFTl9FVEhFUk5FVF9UWF9CSVQgfCBSVEw4MzY2U19HUkVFTl9FVEhFUk5FVF9SWF9CSVQpKSAhPSAwKSA/IDEgOiAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2NnNfc3dfc2V0X2dyZWVuKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkJIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCQkgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSA9IHN3X3RvX3J0bDgzNjZfc21pKGRldik7CisKKwlyZXR1cm4gcnRsODM2NnNfc2V0X2dyZWVuKHNtaSwgdmFsLT52YWx1ZS5pKTsKK30KKworc3RhdGljIGludCBydGw4MzY2c19zd19nZXRfcG9ydF9saW5rKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkJICAgICBpbnQgcG9ydCwKKwkJCQkgICAgIHN0cnVjdCBzd2l0Y2hfcG9ydF9saW5rICpsaW5rKQoreworCXN0cnVjdCBydGw4MzY2X3NtaSAqc21pID0gc3dfdG9fcnRsODM2Nl9zbWkoZGV2KTsKKwl1MzIgZGF0YSA9IDA7CisJdTMyIHNwZWVkOworCisJaWYgKHBvcnQgPj0gUlRMODM2NlNfTlVNX1BPUlRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJ0bDgzNjZfc21pX3JlYWRfcmVnKHNtaSwgUlRMODM2NlNfUE9SVF9MSU5LX1NUQVRVU19CQVNFICsgKHBvcnQgLyAyKSwKKwkJCSAgICAgJmRhdGEpOworCisJaWYgKHBvcnQgJSAyKQorCQlkYXRhID0gZGF0YSA+PiA4OworCisJbGluay0+bGluayA9ICEhKGRhdGEgJiBSVEw4MzY2U19QT1JUX1NUQVRVU19MSU5LX01BU0spOworCWlmICghbGluay0+bGluaykKKwkJcmV0dXJuIDA7CisKKwlsaW5rLT5kdXBsZXggPSAhIShkYXRhICYgUlRMODM2NlNfUE9SVF9TVEFUVVNfRFVQTEVYX01BU0spOworCWxpbmstPnJ4X2Zsb3cgPSAhIShkYXRhICYgUlRMODM2NlNfUE9SVF9TVEFUVVNfUlhQQVVTRV9NQVNLKTsKKwlsaW5rLT50eF9mbG93ID0gISEoZGF0YSAmIFJUTDgzNjZTX1BPUlRfU1RBVFVTX1RYUEFVU0VfTUFTSyk7CisJbGluay0+YW5lZyA9ICEhKGRhdGEgJiBSVEw4MzY2U19QT1JUX1NUQVRVU19BTl9NQVNLKTsKKworCXNwZWVkID0gKGRhdGEgJiBSVEw4MzY2U19QT1JUX1NUQVRVU19TUEVFRF9NQVNLKTsKKwlzd2l0Y2ggKHNwZWVkKSB7CisJY2FzZSAwOgorCQlsaW5rLT5zcGVlZCA9IFNXSVRDSF9QT1JUX1NQRUVEXzEwOworCQlicmVhazsKKwljYXNlIDE6CisJCWxpbmstPnNwZWVkID0gU1dJVENIX1BPUlRfU1BFRURfMTAwOworCQlicmVhazsKKwljYXNlIDI6CisJCWxpbmstPnNwZWVkID0gU1dJVENIX1BPUlRfU1BFRURfMTAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbGluay0+c3BlZWQgPSBTV0lUQ0hfUE9SVF9TUEVFRF9VTktOT1dOOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MzY2c19zd19zZXRfcG9ydF9sZWQoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJCSAgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBydGw4MzY2X3NtaSAqc21pID0gc3dfdG9fcnRsODM2Nl9zbWkoZGV2KTsKKwl1MzIgZGF0YTsKKwl1MzIgbWFzazsKKwl1MzIgcmVnOworCisJaWYgKHZhbC0+cG9ydF92bGFuID49IFJUTDgzNjZTX05VTV9QT1JUUyB8fAorCSAgICAoMSA8PCB2YWwtPnBvcnRfdmxhbikgPT0gUlRMODM2NlNfUE9SVF9VTktOT1dOKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh2YWwtPnBvcnRfdmxhbiA9PSBSVEw4MzY2U19QT1JUX05VTV9DUFUpIHsKKwkJcmVnID0gUlRMODM2NlNfTEVEX0JMSU5LUkFURV9SRUc7CisJCW1hc2sgPSAweEYgPDwgNDsKKwkJZGF0YSA9IHZhbC0+dmFsdWUuaSA8PCA0OworCX0gZWxzZSB7CisJCXJlZyA9IFJUTDgzNjZTX0xFRF9DVFJMX1JFRzsKKwkJbWFzayA9IDB4RiA8PCAodmFsLT5wb3J0X3ZsYW4gKiA0KSwKKwkJZGF0YSA9IHZhbC0+dmFsdWUuaSA8PCAodmFsLT5wb3J0X3ZsYW4gKiA0KTsKKwl9CisKKwlyZXR1cm4gcnRsODM2Nl9zbWlfcm13cihzbWksIHJlZywgbWFzaywgZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2NnNfc3dfZ2V0X3BvcnRfbGVkKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCQkgICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSA9IHN3X3RvX3J0bDgzNjZfc21pKGRldik7CisJdTMyIGRhdGEgPSAwOworCisJaWYgKHZhbC0+cG9ydF92bGFuID49IFJUTDgzNjZTX05VTV9MRURHUk9VUFMpCisJCXJldHVybiAtRUlOVkFMOworCisJcnRsODM2Nl9zbWlfcmVhZF9yZWcoc21pLCBSVEw4MzY2U19MRURfQ1RSTF9SRUcsICZkYXRhKTsKKwl2YWwtPnZhbHVlLmkgPSAoZGF0YSA+PiAodmFsLT5wb3J0X3ZsYW4gKiA0KSkgJiAweDAwMEY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MzY2c19zd19nZXRfZ3JlZW5fcG9ydChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCQkgICAgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBydGw4MzY2X3NtaSAqc21pID0gc3dfdG9fcnRsODM2Nl9zbWkoZGV2KTsKKwlpbnQgZXJyOworCXUzMiBwaHlEYXRhOworCisJaWYgKHZhbC0+cG9ydF92bGFuID49IFJUTDgzNjZTX05VTV9QT1JUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllcnIgPSBydGw4MzY2c19yZWFkX3BoeV9yZWcoc21pLCB2YWwtPnBvcnRfdmxhbiwgMCwgUlRMODM2NlNfUEhZX1BPV0VSX1NBVklOR19DVFJMX1JFRywgJnBoeURhdGEpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwl2YWwtPnZhbHVlLmkgPSAoKHBoeURhdGEgJiBSVEw4MzY2U19QSFlfUE9XRVJfU0FWSU5HX01BU0spICE9IDApID8gMSA6IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MzY2c19zd19zZXRfZ3JlZW5fcG9ydChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCQkgICAgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBydGw4MzY2X3NtaSAqc21pID0gc3dfdG9fcnRsODM2Nl9zbWkoZGV2KTsKKwlyZXR1cm4gcnRsODM2NnNfc2V0X2dyZWVuX3BvcnQoc21pLCB2YWwtPnBvcnRfdmxhbiwgdmFsLT52YWx1ZS5pKTsKK30KKworc3RhdGljIGludCBydGw4MzY2c19zd19yZXNldF9wb3J0X21pYnMoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJCSAgICAgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBydGw4MzY2X3NtaSAqc21pID0gc3dfdG9fcnRsODM2Nl9zbWkoZGV2KTsKKworCWlmICh2YWwtPnBvcnRfdmxhbiA+PSBSVEw4MzY2U19OVU1fUE9SVFMpCisJCXJldHVybiAtRUlOVkFMOworCisKKwlyZXR1cm4gcnRsODM2Nl9zbWlfcm13cihzbWksIFJUTDgzNjZTX01JQl9DVFJMX1JFRywKKwkJCQkwLCAoMSA8PCAodmFsLT5wb3J0X3ZsYW4gKyAzKSkpOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjZzX3N3X2dldF9wb3J0X3N0YXRzKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsIGludCBwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzd2l0Y2hfcG9ydF9zdGF0cyAqc3RhdHMpCit7CisJcmV0dXJuIChydGw4MzY2X3N3X2dldF9wb3J0X3N0YXRzKGRldiwgcG9ydCwgc3RhdHMsCisJCQkJUlRMODM2NlNfTUlCX1RYQl9JRCwgUlRMODM2NlNfTUlCX1JYQl9JRCkpOworfQorCitzdGF0aWMgc3RydWN0IHN3aXRjaF9hdHRyIHJ0bDgzNjZzX2dsb2JhbHNbXSA9IHsKKwl7CisJCS50eXBlID0gU1dJVENIX1RZUEVfSU5ULAorCQkubmFtZSA9ICJlbmFibGVfbGVhcm5pbmciLAorCQkuZGVzY3JpcHRpb24gPSAiRW5hYmxlIGxlYXJuaW5nLCBlbmFibGUgYWdpbmciLAorCQkuc2V0ID0gcnRsODM2NnNfc3dfc2V0X2xlYXJuaW5nX2VuYWJsZSwKKwkJLmdldCA9IHJ0bDgzNjZzX3N3X2dldF9sZWFybmluZ19lbmFibGUsCisJCS5tYXggPSAxLAorCX0sIHsKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9JTlQsCisJCS5uYW1lID0gImVuYWJsZV92bGFuIiwKKwkJLmRlc2NyaXB0aW9uID0gIkVuYWJsZSBWTEFOIG1vZGUiLAorCQkuc2V0ID0gcnRsODM2Nl9zd19zZXRfdmxhbl9lbmFibGUsCisJCS5nZXQgPSBydGw4MzY2X3N3X2dldF92bGFuX2VuYWJsZSwKKwkJLm1heCA9IDEsCisJCS5vZnMgPSAxCisJfSwgeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX0lOVCwKKwkJLm5hbWUgPSAiZW5hYmxlX3ZsYW40ayIsCisJCS5kZXNjcmlwdGlvbiA9ICJFbmFibGUgVkxBTiA0SyBtb2RlIiwKKwkJLnNldCA9IHJ0bDgzNjZfc3dfc2V0X3ZsYW5fZW5hYmxlLAorCQkuZ2V0ID0gcnRsODM2Nl9zd19nZXRfdmxhbl9lbmFibGUsCisJCS5tYXggPSAxLAorCQkub2ZzID0gMgorCX0sIHsKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9OT1ZBTCwKKwkJLm5hbWUgPSAicmVzZXRfbWlicyIsCisJCS5kZXNjcmlwdGlvbiA9ICJSZXNldCBhbGwgTUlCIGNvdW50ZXJzIiwKKwkJLnNldCA9IHJ0bDgzNjZzX3N3X3Jlc2V0X21pYnMsCisJfSwgeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX0lOVCwKKwkJLm5hbWUgPSAiYmxpbmtyYXRlIiwKKwkJLmRlc2NyaXB0aW9uID0gIkdldC9TZXQgTEVEIGJsaW5raW5nIHJhdGUgKDAgPSA0M21zLCAxID0gODRtcywiCisJCSIgMiA9IDEyMG1zLCAzID0gMTcwbXMsIDQgPSAzNDBtcywgNSA9IDY3MG1zKSIsCisJCS5zZXQgPSBydGw4MzY2c19zd19zZXRfYmxpbmtyYXRlLAorCQkuZ2V0ID0gcnRsODM2NnNfc3dfZ2V0X2JsaW5rcmF0ZSwKKwkJLm1heCA9IDUKKwl9LCB7CisJCS50eXBlID0gU1dJVENIX1RZUEVfSU5ULAorCQkubmFtZSA9ICJtYXhfbGVuZ3RoIiwKKwkJLmRlc2NyaXB0aW9uID0gIkdldC9TZXQgdGhlIG1heGltdW0gbGVuZ3RoIG9mIHZhbGlkIHBhY2tldHMiCisJCSIgKDAgPSAxNTIyLCAxID0gMTUzNiwgMiA9IDE1NTIsIDMgPSAxNjAwMCAoOTIxNj8pKSIsCisJCS5zZXQgPSBydGw4MzY2c19zd19zZXRfbWF4X2xlbmd0aCwKKwkJLmdldCA9IHJ0bDgzNjZzX3N3X2dldF9tYXhfbGVuZ3RoLAorCQkubWF4ID0gMywKKwl9LCB7CisJCS50eXBlID0gU1dJVENIX1RZUEVfSU5ULAorCQkubmFtZSA9ICJncmVlbl9tb2RlIiwKKwkJLmRlc2NyaXB0aW9uID0gIkdldC9TZXQgdGhlIHJvdXRlciBncmVlbiBmZWF0dXJlIiwKKwkJLnNldCA9IHJ0bDgzNjZzX3N3X3NldF9ncmVlbiwKKwkJLmdldCA9IHJ0bDgzNjZzX3N3X2dldF9ncmVlbiwKKwkJLm1heCA9IDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3dpdGNoX2F0dHIgcnRsODM2NnNfcG9ydFtdID0geworCXsKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9OT1ZBTCwKKwkJLm5hbWUgPSAicmVzZXRfbWliIiwKKwkJLmRlc2NyaXB0aW9uID0gIlJlc2V0IHNpbmdsZSBwb3J0IE1JQiBjb3VudGVycyIsCisJCS5zZXQgPSBydGw4MzY2c19zd19yZXNldF9wb3J0X21pYnMsCisJfSwgeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX1NUUklORywKKwkJLm5hbWUgPSAibWliIiwKKwkJLmRlc2NyaXB0aW9uID0gIkdldCBNSUIgY291bnRlcnMgZm9yIHBvcnQiLAorCQkubWF4ID0gMzMsCisJCS5zZXQgPSBOVUxMLAorCQkuZ2V0ID0gcnRsODM2Nl9zd19nZXRfcG9ydF9taWIsCisJfSwgeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX0lOVCwKKwkJLm5hbWUgPSAibGVkIiwKKwkJLmRlc2NyaXB0aW9uID0gIkdldC9TZXQgcG9ydCBncm91cCAoMCAtIDMpIGxlZCBtb2RlICgwIC0gMTUpIiwKKwkJLm1heCA9IDE1LAorCQkuc2V0ID0gcnRsODM2NnNfc3dfc2V0X3BvcnRfbGVkLAorCQkuZ2V0ID0gcnRsODM2NnNfc3dfZ2V0X3BvcnRfbGVkLAorCX0sIHsKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9JTlQsCisJCS5uYW1lID0gImdyZWVuX3BvcnQiLAorCQkuZGVzY3JpcHRpb24gPSAiR2V0L1NldCBwb3J0IGdyZWVuIGZlYXR1cmUgKDAgLSAxKSIsCisJCS5tYXggPSAxLAorCQkuc2V0ID0gcnRsODM2NnNfc3dfc2V0X2dyZWVuX3BvcnQsCisJCS5nZXQgPSBydGw4MzY2c19zd19nZXRfZ3JlZW5fcG9ydCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzd2l0Y2hfYXR0ciBydGw4MzY2c192bGFuW10gPSB7CisJeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX1NUUklORywKKwkJLm5hbWUgPSAiaW5mbyIsCisJCS5kZXNjcmlwdGlvbiA9ICJHZXQgdmxhbiBpbmZvcm1hdGlvbiIsCisJCS5tYXggPSAxLAorCQkuc2V0ID0gTlVMTCwKKwkJLmdldCA9IHJ0bDgzNjZfc3dfZ2V0X3ZsYW5faW5mbywKKwl9LCB7CisJCS50eXBlID0gU1dJVENIX1RZUEVfSU5ULAorCQkubmFtZSA9ICJmaWQiLAorCQkuZGVzY3JpcHRpb24gPSAiR2V0L1NldCB2bGFuIEZJRCIsCisJCS5tYXggPSBSVEw4MzY2U19GSURNQVgsCisJCS5zZXQgPSBydGw4MzY2X3N3X3NldF92bGFuX2ZpZCwKKwkJLmdldCA9IHJ0bDgzNjZfc3dfZ2V0X3ZsYW5fZmlkLAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHN3aXRjaF9kZXZfb3BzIHJ0bDgzNjZfb3BzID0geworCS5hdHRyX2dsb2JhbCA9IHsKKwkJLmF0dHIgPSBydGw4MzY2c19nbG9iYWxzLAorCQkubl9hdHRyID0gQVJSQVlfU0laRShydGw4MzY2c19nbG9iYWxzKSwKKwl9LAorCS5hdHRyX3BvcnQgPSB7CisJCS5hdHRyID0gcnRsODM2NnNfcG9ydCwKKwkJLm5fYXR0ciA9IEFSUkFZX1NJWkUocnRsODM2NnNfcG9ydCksCisJfSwKKwkuYXR0cl92bGFuID0geworCQkuYXR0ciA9IHJ0bDgzNjZzX3ZsYW4sCisJCS5uX2F0dHIgPSBBUlJBWV9TSVpFKHJ0bDgzNjZzX3ZsYW4pLAorCX0sCisKKwkuZ2V0X3ZsYW5fcG9ydHMgPSBydGw4MzY2X3N3X2dldF92bGFuX3BvcnRzLAorCS5zZXRfdmxhbl9wb3J0cyA9IHJ0bDgzNjZfc3dfc2V0X3ZsYW5fcG9ydHMsCisJLmdldF9wb3J0X3B2aWQgPSBydGw4MzY2X3N3X2dldF9wb3J0X3B2aWQsCisJLnNldF9wb3J0X3B2aWQgPSBydGw4MzY2X3N3X3NldF9wb3J0X3B2aWQsCisJLnJlc2V0X3N3aXRjaCA9IHJ0bDgzNjZfc3dfcmVzZXRfc3dpdGNoLAorCS5nZXRfcG9ydF9saW5rID0gcnRsODM2NnNfc3dfZ2V0X3BvcnRfbGluaywKKwkuZ2V0X3BvcnRfc3RhdHMgPSBydGw4MzY2c19zd19nZXRfcG9ydF9zdGF0cywKK307CisKK3N0YXRpYyBpbnQgcnRsODM2NnNfc3dpdGNoX2luaXQoc3RydWN0IHJ0bDgzNjZfc21pICpzbWkpCit7CisJc3RydWN0IHN3aXRjaF9kZXYgKmRldiA9ICZzbWktPnN3X2RldjsKKwlpbnQgZXJyOworCisJZGV2LT5uYW1lID0gIlJUTDgzNjZTIjsKKwlkZXYtPmNwdV9wb3J0ID0gUlRMODM2NlNfUE9SVF9OVU1fQ1BVOworCWRldi0+cG9ydHMgPSBSVEw4MzY2U19OVU1fUE9SVFM7CisJZGV2LT52bGFucyA9IFJUTDgzNjZTX05VTV9WSURTOworCWRldi0+b3BzID0gJnJ0bDgzNjZfb3BzOworCWRldi0+YWxpYXMgPSBkZXZfbmFtZShzbWktPnBhcmVudCk7CisKKwllcnIgPSByZWdpc3Rlcl9zd2l0Y2goZGV2LCBOVUxMKTsKKwlpZiAoZXJyKQorCQlkZXZfZXJyKHNtaS0+cGFyZW50LCAic3dpdGNoIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgcnRsODM2NnNfc3dpdGNoX2NsZWFudXAoc3RydWN0IHJ0bDgzNjZfc21pICpzbWkpCit7CisJdW5yZWdpc3Rlcl9zd2l0Y2goJnNtaS0+c3dfZGV2KTsKK30KKworc3RhdGljIGludCBydGw4MzY2c19taWlfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZykKK3sKKwlzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSA9IGJ1cy0+cHJpdjsKKwl1MzIgdmFsID0gMDsKKwlpbnQgZXJyOworCisJZXJyID0gcnRsODM2NnNfcmVhZF9waHlfcmVnKHNtaSwgYWRkciwgMCwgcmVnLCAmdmFsKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gMHhmZmZmOworCisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGludCBydGw4MzY2c19taWlfd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWcsIHUxNiB2YWwpCit7CisJc3RydWN0IHJ0bDgzNjZfc21pICpzbWkgPSBidXMtPnByaXY7CisJdTMyIHQ7CisJaW50IGVycjsKKworCWVyciA9IHJ0bDgzNjZzX3dyaXRlX3BoeV9yZWcoc21pLCBhZGRyLCAwLCByZWcsIHZhbCk7CisJLyogZmx1c2ggd3JpdGUgKi8KKwkodm9pZCkgcnRsODM2NnNfcmVhZF9waHlfcmVnKHNtaSwgYWRkciwgMCwgcmVnLCAmdCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjZzX2RldGVjdChzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSkKK3sKKwl1MzIgY2hpcF9pZCA9IDA7CisJdTMyIGNoaXBfdmVyID0gMDsKKwlpbnQgcmV0OworCisJcmV0ID0gcnRsODM2Nl9zbWlfcmVhZF9yZWcoc21pLCBSVEw4MzY2U19DSElQX0lEX1JFRywgJmNoaXBfaWQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihzbWktPnBhcmVudCwgInVuYWJsZSB0byByZWFkIGNoaXAgaWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXN3aXRjaCAoY2hpcF9pZCkgeworCWNhc2UgUlRMODM2NlNfQ0hJUF9JRF84MzY2OgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKHNtaS0+cGFyZW50LCAidW5rbm93biBjaGlwIGlkICglMDR4KVxuIiwgY2hpcF9pZCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldCA9IHJ0bDgzNjZfc21pX3JlYWRfcmVnKHNtaSwgUlRMODM2NlNfQ0hJUF9WRVJTSU9OX0NUUkxfUkVHLAorCQkJCSAgICZjaGlwX3Zlcik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKHNtaS0+cGFyZW50LCAidW5hYmxlIHRvIHJlYWQgY2hpcCB2ZXJzaW9uXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkZXZfaW5mbyhzbWktPnBhcmVudCwgIlJUTCUwNHggdmVyLiAldSBjaGlwIGZvdW5kXG4iLAorCQkgY2hpcF9pZCwgY2hpcF92ZXIgJiBSVEw4MzY2U19DSElQX1ZFUlNJT05fTUFTSyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBydGw4MzY2X3NtaV9vcHMgcnRsODM2NnNfc21pX29wcyA9IHsKKwkuZGV0ZWN0CQk9IHJ0bDgzNjZzX2RldGVjdCwKKwkucmVzZXRfY2hpcAk9IHJ0bDgzNjZzX3Jlc2V0X2NoaXAsCisJLnNldHVwCQk9IHJ0bDgzNjZzX3NldHVwLAorCisJLm1paV9yZWFkCT0gcnRsODM2NnNfbWlpX3JlYWQsCisJLm1paV93cml0ZQk9IHJ0bDgzNjZzX21paV93cml0ZSwKKworCS5nZXRfdmxhbl9tYwk9IHJ0bDgzNjZzX2dldF92bGFuX21jLAorCS5zZXRfdmxhbl9tYwk9IHJ0bDgzNjZzX3NldF92bGFuX21jLAorCS5nZXRfdmxhbl80awk9IHJ0bDgzNjZzX2dldF92bGFuXzRrLAorCS5zZXRfdmxhbl80awk9IHJ0bDgzNjZzX3NldF92bGFuXzRrLAorCS5nZXRfbWNfaW5kZXgJPSBydGw4MzY2c19nZXRfbWNfaW5kZXgsCisJLnNldF9tY19pbmRleAk9IHJ0bDgzNjZzX3NldF9tY19pbmRleCwKKwkuZ2V0X21pYl9jb3VudGVyID0gcnRsODM2Nl9nZXRfbWliX2NvdW50ZXIsCisJLmlzX3ZsYW5fdmFsaWQJPSBydGw4MzY2c19pc192bGFuX3ZhbGlkLAorCS5lbmFibGVfdmxhbgk9IHJ0bDgzNjZzX2VuYWJsZV92bGFuLAorCS5lbmFibGVfdmxhbjRrCT0gcnRsODM2NnNfZW5hYmxlX3ZsYW40aywKKwkuZW5hYmxlX3BvcnQJPSBydGw4MzY2c19lbmFibGVfcG9ydCwKK307CisKK3N0YXRpYyBpbnQgcnRsODM2NnNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdGF0aWMgaW50IHJ0bDgzNjZfc21pX3ZlcnNpb25fcHJpbnRlZDsKKwlzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaTsKKwlpbnQgZXJyOworCisJaWYgKCFydGw4MzY2X3NtaV92ZXJzaW9uX3ByaW50ZWQrKykKKwkJcHJpbnRrKEtFUk5fTk9USUNFIFJUTDgzNjZTX0RSSVZFUl9ERVNDCisJCSAgICAgICAiIHZlcnNpb24gIiBSVEw4MzY2U19EUklWRVJfVkVSIlxuIik7CisKKwlzbWkgPSBydGw4MzY2X3NtaV9wcm9iZShwZGV2KTsKKwlpZiAoSVNfRVJSKHNtaSkpCisJCXJldHVybiBQVFJfRVJSKHNtaSk7CisKKwlzbWktPmNsa19kZWxheSA9IDEwOworCXNtaS0+Y21kX3JlYWQgPSAweGE5OworCXNtaS0+Y21kX3dyaXRlID0gMHhhODsKKwlzbWktPm9wcyA9ICZydGw4MzY2c19zbWlfb3BzOworCXNtaS0+Y3B1X3BvcnQgPSBSVEw4MzY2U19QT1JUX05VTV9DUFU7CisJc21pLT5udW1fcG9ydHMgPSBSVEw4MzY2U19OVU1fUE9SVFM7CisJc21pLT5udW1fdmxhbl9tYyA9IFJUTDgzNjZTX05VTV9WTEFOUzsKKwlzbWktPm1pYl9jb3VudGVycyA9IHJ0bDgzNjZzX21pYl9jb3VudGVyczsKKwlzbWktPm51bV9taWJfY291bnRlcnMgPSBBUlJBWV9TSVpFKHJ0bDgzNjZzX21pYl9jb3VudGVycyk7CisKKwllcnIgPSBydGw4MzY2X3NtaV9pbml0KHNtaSk7CisJaWYgKGVycikKKwkJZ290byBlcnJfZnJlZV9zbWk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBzbWkpOworCisJZXJyID0gcnRsODM2NnNfc3dpdGNoX2luaXQoc21pKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9jbGVhcl9kcnZkYXRhOworCisJcmV0dXJuIDA7CisKKyBlcnJfY2xlYXJfZHJ2ZGF0YToKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlydGw4MzY2X3NtaV9jbGVhbnVwKHNtaSk7CisgZXJyX2ZyZWVfc21pOgorCWtmcmVlKHNtaSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBydGw4MzY2c19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKHNtaSkgeworCQlydGw4MzY2c19zd2l0Y2hfY2xlYW51cChzbWkpOworCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwkJcnRsODM2Nl9zbWlfY2xlYW51cChzbWkpOworCQlrZnJlZShzbWkpOworCX0KKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX09GCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBydGw4MzY2c19tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAicmVhbHRlayxydGw4MzY2cyIgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBydGw4MzY2c19tYXRjaCk7CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcnRsODM2NnNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9IFJUTDgzNjZTX0RSSVZFUl9OQU1FLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisjaWZkZWYgQ09ORklHX09GCisJCS5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihydGw4MzY2c19tYXRjaCksCisjZW5kaWYKKwl9LAorCS5wcm9iZQkJPSBydGw4MzY2c19wcm9iZSwKKwkucmVtb3ZlCQk9IHJ0bDgzNjZzX3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHJ0bDgzNjZzX21vZHVsZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcnRsODM2NnNfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHJ0bDgzNjZzX21vZHVsZV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHJ0bDgzNjZzX21vZHVsZV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnJ0bDgzNjZzX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChydGw4MzY2c19tb2R1bGVfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTihSVEw4MzY2U19EUklWRVJfREVTQyk7CitNT0RVTEVfVkVSU0lPTihSVEw4MzY2U19EUklWRVJfVkVSKTsKK01PRFVMRV9BVVRIT1IoIkdhYm9yIEp1aG9zIDxqdWhvc2dAb3BlbndydC5vcmc+Iik7CitNT0RVTEVfQVVUSE9SKCJBbnR0aSBTZXBww6Rsw6QgPGEuc2VwcGFsYUBnbWFpbC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgUlRMODM2NlNfRFJJVkVSX05BTUUpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9uZXQvcGh5L3J0bDgzNjcuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9ydGw4MzY3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YwNTY5ZAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9ydGw4MzY3LmMKQEAgLTAsMCArMSwxODQ2IEBACisvKgorICogUGxhdGZvcm0gZHJpdmVyIGZvciB0aGUgUmVhbHRlayBSVEw4MzY3Ui9NIGV0aGVybmV0IHN3aXRjaGVzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdhYm9yIEp1aG9zIDxqdWhvc2dAb3BlbndydC5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3J0bDgzNjcuaD4KKworI2luY2x1ZGUgInJ0bDgzNjZfc21pLmgiCisKKyNkZWZpbmUgUlRMODM2N19SRVNFVF9ERUxBWQkxMDAwCS8qIG1zZWNzKi8KKworI2RlZmluZSBSVEw4MzY3X1BIWV9BRERSX01BWAk4CisjZGVmaW5lIFJUTDgzNjdfUEhZX1JFR19NQVgJMzEKKworI2RlZmluZSBSVEw4MzY3X1ZJRF9NQVNLCTB4ZmZmZgorI2RlZmluZSBSVEw4MzY3X0ZJRF9NQVNLCTB4ZmZmCisjZGVmaW5lIFJUTDgzNjdfVU5UQUdfTUFTSwkweGZmZmYKKyNkZWZpbmUgUlRMODM2N19NRU1CRVJfTUFTSwkweGZmZmYKKworI2RlZmluZSBSVEw4MzY3X1BPUlRfQ0ZHX1JFRyhfcCkJCSgweDAwMGUgKyAweDIwICogKF9wKSkKKyNkZWZpbmUgICBSVEw4MzY3X1BPUlRfQ0ZHX0VHUkVTU19NT0RFX1NISUZUCTQKKyNkZWZpbmUgICBSVEw4MzY3X1BPUlRfQ0ZHX0VHUkVTU19NT0RFX01BU0sJMHgzCisjZGVmaW5lICAgUlRMODM2N19QT1JUX0NGR19FR1JFU1NfTU9ERV9PUklHSU5BTAkwCisjZGVmaW5lICAgUlRMODM2N19QT1JUX0NGR19FR1JFU1NfTU9ERV9LRUVQCTEKKyNkZWZpbmUgICBSVEw4MzY3X1BPUlRfQ0ZHX0VHUkVTU19NT0RFX1BSSQkyCisjZGVmaW5lICAgUlRMODM2N19QT1JUX0NGR19FR1JFU1NfTU9ERV9SRUFMCTMKKworI2RlZmluZSBSVEw4MzY3X0JZUEFTU19MSU5FX1JBVEVfUkVHCQkweDAzZjcKKworI2RlZmluZSBSVEw4MzY3X1RBX0NUUkxfUkVHCQkJMHgwNTAwCisjZGVmaW5lICAgUlRMODM2N19UQV9DVFJMX1NUQVRVUwkJQklUKDEyKQorI2RlZmluZSAgIFJUTDgzNjdfVEFfQ1RSTF9NRVRIT0QJCUJJVCg1KQorI2RlZmluZSAgIFJUTDgzNjdfVEFfQ1RSTF9DTURfU0hJRlQJCTQKKyNkZWZpbmUgICBSVEw4MzY3X1RBX0NUUkxfQ01EX1JFQUQJCTAKKyNkZWZpbmUgICBSVEw4MzY3X1RBX0NUUkxfQ01EX1dSSVRFCQkxCisjZGVmaW5lICAgUlRMODM2N19UQV9DVFJMX1RBQkxFX1NISUZUCQkwCisjZGVmaW5lICAgUlRMODM2N19UQV9DVFJMX1RBQkxFX0FDTFJVTEUJCTEKKyNkZWZpbmUgICBSVEw4MzY3X1RBX0NUUkxfVEFCTEVfQUNMQUNUCQkyCisjZGVmaW5lICAgUlRMODM2N19UQV9DVFJMX1RBQkxFX0NWTEFOCQkzCisjZGVmaW5lICAgUlRMODM2N19UQV9DVFJMX1RBQkxFX0wyCQk0CisjZGVmaW5lICAgUlRMODM2N19UQV9DVFJMX0NWTEFOX1JFQUQgXAorCQkoKFJUTDgzNjdfVEFfQ1RSTF9DTURfUkVBRCA8PCBSVEw4MzY3X1RBX0NUUkxfQ01EX1NISUZUKSB8IFwKKwkJIFJUTDgzNjdfVEFfQ1RSTF9UQUJMRV9DVkxBTikKKyNkZWZpbmUgICBSVEw4MzY3X1RBX0NUUkxfQ1ZMQU5fV1JJVEUgXAorCQkoKFJUTDgzNjdfVEFfQ1RSTF9DTURfV1JJVEUgPDwgUlRMODM2N19UQV9DVFJMX0NNRF9TSElGVCkgfCBcCisJCSBSVEw4MzY3X1RBX0NUUkxfVEFCTEVfQ1ZMQU4pCisKKyNkZWZpbmUgUlRMODM2N19UQV9BRERSX1JFRwkJCTB4MDUwMQorI2RlZmluZSAgIFJUTDgzNjdfVEFfQUREUl9NQVNLCQkJMHgzZmZmCisKKyNkZWZpbmUgUlRMODM2N19UQV9EQVRBX1JFRyhfeCkJCQkoMHgwNTAzICsgKF94KSkKKyNkZWZpbmUgICBSVEw4MzY3X1RBX1ZMQU5fREFUQV9TSVpFCQk0CisjZGVmaW5lICAgUlRMODM2N19UQV9WTEFOX1ZJRF9NQVNLCQlSVEw4MzY3X1ZJRF9NQVNLCisjZGVmaW5lICAgUlRMODM2N19UQV9WTEFOX01FTUJFUl9TSElGVAkJMAorI2RlZmluZSAgIFJUTDgzNjdfVEFfVkxBTl9NRU1CRVJfTUFTSwkJUlRMODM2N19NRU1CRVJfTUFTSworI2RlZmluZSAgIFJUTDgzNjdfVEFfVkxBTl9GSURfU0hJRlQJCTAKKyNkZWZpbmUgICBSVEw4MzY3X1RBX1ZMQU5fRklEX01BU0sJCVJUTDgzNjdfRklEX01BU0sKKyNkZWZpbmUgICBSVEw4MzY3X1RBX1ZMQU5fVU5UQUcxX1NISUZUCQkxNAorI2RlZmluZSAgIFJUTDgzNjdfVEFfVkxBTl9VTlRBRzFfTUFTSwkJMHgzCisjZGVmaW5lICAgUlRMODM2N19UQV9WTEFOX1VOVEFHMl9TSElGVAkJMAorI2RlZmluZSAgIFJUTDgzNjdfVEFfVkxBTl9VTlRBRzJfTUFTSwkJMHgzZmZmCisKKyNkZWZpbmUgUlRMODM2N19WTEFOX1BWSURfQ1RSTF9SRUcoX3ApCQkoMHgwNzAwICsgKF9wKSAvIDIpCisjZGVmaW5lIFJUTDgzNjdfVkxBTl9QVklEX0NUUkxfTUFTSwkJMHgxZgorI2RlZmluZSBSVEw4MzY3X1ZMQU5fUFZJRF9DVFJMX1NISUZUKF9wKQkoOCAqICgoX3ApICUgMikpCisKKyNkZWZpbmUgUlRMODM2N19WTEFOX01DX0JBU0UoX3gpCQkoMHgwNzI4ICsgKF94KSAqIDQpCisjZGVmaW5lICAgUlRMODM2N19WTEFOX01DX0RBVEFfU0laRQkJNAorI2RlZmluZSAgIFJUTDgzNjdfVkxBTl9NQ19NRU1CRVJfU0hJRlQJCTAKKyNkZWZpbmUgICBSVEw4MzY3X1ZMQU5fTUNfTUVNQkVSX01BU0sJCVJUTDgzNjdfTUVNQkVSX01BU0sKKyNkZWZpbmUgICBSVEw4MzY3X1ZMQU5fTUNfRklEX1NISUZUCQkwCisjZGVmaW5lICAgUlRMODM2N19WTEFOX01DX0ZJRF9NQVNLCQlSVEw4MzY3X0ZJRF9NQVNLCisjZGVmaW5lICAgUlRMODM2N19WTEFOX01DX0VWSURfU0hJRlQJCTAKKyNkZWZpbmUgICBSVEw4MzY3X1ZMQU5fTUNfRVZJRF9NQVNLCQlSVEw4MzY3X1ZJRF9NQVNLCisKKyNkZWZpbmUgUlRMODM2N19WTEFOX0NUUkxfUkVHCQkJMHgwN2E4CisjZGVmaW5lICAgUlRMODM2N19WTEFOX0NUUkxfRU5BQkxFCQlCSVQoMCkKKworI2RlZmluZSBSVEw4MzY3X1ZMQU5fSU5HUkVTU19SRUcJCTB4MDdhOQorCisjZGVmaW5lIFJUTDgzNjdfUE9SVF9JU09MQVRJT05fUkVHKF9wKQkJKDB4MDhhMiArIChfcCkpCisKKyNkZWZpbmUgUlRMODM2N19NSUJfQ09VTlRFUl9SRUcoX3gpCQkoMHgxMDAwICsgKF94KSkKKworI2RlZmluZSBSVEw4MzY3X01JQl9BRERSRVNTX1JFRwkJCTB4MTAwNAorCisjZGVmaW5lIFJUTDgzNjdfTUlCX0NUUkxfUkVHKF94KQkJKDB4MTAwNSArIChfeCkpCisjZGVmaW5lICAgUlRMODM2N19NSUJfQ1RSTF9HTE9CQUxfUkVTRVRfTUFTSwlCSVQoMTEpCisjZGVmaW5lICAgUlRMODM2N19NSUJfQ1RSTF9RTV9SRVNFVF9NQVNLCUJJVCgxMCkKKyNkZWZpbmUgICBSVEw4MzY3X01JQl9DVFJMX1BPUlRfUkVTRVRfTUFTSyhfcCkJQklUKDIgKyAoX3ApKQorI2RlZmluZSAgIFJUTDgzNjdfTUlCX0NUUkxfUkVTRVRfTUFTSwkJQklUKDEpCisjZGVmaW5lICAgUlRMODM2N19NSUJfQ1RSTF9CVVNZX01BU0sJCUJJVCgwKQorCisjZGVmaW5lIFJUTDgzNjdfTUlCX0NPVU5UCQkJMzYKKyNkZWZpbmUgUlRMODM2N19NSUJfQ09VTlRFUl9QT1JUX09GRlNFVAkJMHgwMDUwCisKKyNkZWZpbmUgUlRMODM2N19TV0MwX1JFRwkJCTB4MTIwMAorI2RlZmluZSAgIFJUTDgzNjdfU1dDMF9NQVhfTEVOR1RIX1NISUZUCQkxMworI2RlZmluZSAgIFJUTDgzNjdfU1dDMF9NQVhfTEVOR1RIKF94KQkJKChfeCkgPDwgMTMpCisjZGVmaW5lICAgUlRMODM2N19TV0MwX01BWF9MRU5HVEhfTUFTSwkJUlRMODM2N19TV0MwX01BWF9MRU5HVEgoMHgzKQorI2RlZmluZSAgIFJUTDgzNjdfU1dDMF9NQVhfTEVOR1RIXzE1MjIJCVJUTDgzNjdfU1dDMF9NQVhfTEVOR1RIKDApCisjZGVmaW5lICAgUlRMODM2N19TV0MwX01BWF9MRU5HVEhfMTUzNgkJUlRMODM2N19TV0MwX01BWF9MRU5HVEgoMSkKKyNkZWZpbmUgICBSVEw4MzY3X1NXQzBfTUFYX0xFTkdUSF8xNTUyCQlSVEw4MzY3X1NXQzBfTUFYX0xFTkdUSCgyKQorI2RlZmluZSAgIFJUTDgzNjdfU1dDMF9NQVhfTEVOR1RIXzE2MDAwCQlSVEw4MzY3X1NXQzBfTUFYX0xFTkdUSCgzKQorCisjZGVmaW5lIFJUTDgzNjdfQ0hJUF9OVU1CRVJfUkVHCQkJMHgxMzAwCisKKyNkZWZpbmUgUlRMODM2N19DSElQX1ZFUl9SRUcJCQkweDEzMDEKKyNkZWZpbmUgICBSVEw4MzY3X0NISVBfVkVSX1JMVklEX1NISUZUCQkxMgorI2RlZmluZSAgIFJUTDgzNjdfQ0hJUF9WRVJfUkxWSURfTUFTSwkJMHhmCisjZGVmaW5lICAgUlRMODM2N19DSElQX1ZFUl9NQ0lEX1NISUZUCQk4CisjZGVmaW5lICAgUlRMODM2N19DSElQX1ZFUl9NQ0lEX01BU0sJCTB4ZgorI2RlZmluZSAgIFJUTDgzNjdfQ0hJUF9WRVJfQk9JRF9TSElGVAkJNAorI2RlZmluZSAgIFJUTDgzNjdfQ0hJUF9WRVJfQk9JRF9NQVNLCQkweGYKKworI2RlZmluZSBSVEw4MzY3X0NISVBfTU9ERV9SRUcJCQkweDEzMDIKKyNkZWZpbmUgICBSVEw4MzY3X0NISVBfTU9ERV9NQVNLCQkweDcKKworI2RlZmluZSBSVEw4MzY3X0NISVBfREVCVUcwX1JFRwkJCTB4MTMwMworI2RlZmluZSAgIFJUTDgzNjdfQ0hJUF9ERUJVRzBfRFVNTVkwKF94KQlCSVQoOCArIChfeCkpCisKKyNkZWZpbmUgUlRMODM2N19DSElQX0RFQlVHMV9SRUcJCQkweDEzMDQKKworI2RlZmluZSBSVEw4MzY3X0RJU19SRUcJCQkJMHgxMzA1CisjZGVmaW5lICAgUlRMODM2N19ESVNfU0tJUF9NSUlfUlhFUihfeCkJCUJJVCgxMiArIChfeCkpCisjZGVmaW5lICAgUlRMODM2N19ESVNfUkdNSUlfU0hJRlQoX3gpCQkoNCAqIChfeCkpCisjZGVmaW5lICAgUlRMODM2N19ESVNfUkdNSUlfTUFTSwkJMHg3CisKKyNkZWZpbmUgUlRMODM2N19FWFRfUkdNWEZfUkVHKF94KQkJKDB4MTMwNiArIChfeCkpCisjZGVmaW5lICAgUlRMODM2N19FWFRfUkdNWEZfRFVNTVkwX1NISUZUCTUKKyNkZWZpbmUgICBSVEw4MzY3X0VYVF9SR01YRl9EVU1NWTBfTUFTSwkweDdmZgorI2RlZmluZSAgIFJUTDgzNjdfRVhUX1JHTVhGX1RYREVMQVlfU0hJRlQJMworI2RlZmluZSAgIFJUTDgzNjdfRVhUX1JHTVhGX1RYREVMQVlfTUFTSwkxCisjZGVmaW5lICAgUlRMODM2N19FWFRfUkdNWEZfUlhERUxBWV9NQVNLCTB4NworCisjZGVmaW5lIFJUTDgzNjdfRElfRk9SQ0VfUkVHKF94KQkJKDB4MTMxMCArIChfeCkpCisjZGVmaW5lICAgUlRMODM2N19ESV9GT1JDRV9NT0RFCQkJQklUKDEyKQorI2RlZmluZSAgIFJUTDgzNjdfRElfRk9SQ0VfTldBWQkJCUJJVCg3KQorI2RlZmluZSAgIFJUTDgzNjdfRElfRk9SQ0VfVFhQQVVTRQkJQklUKDYpCisjZGVmaW5lICAgUlRMODM2N19ESV9GT1JDRV9SWFBBVVNFCQlCSVQoNSkKKyNkZWZpbmUgICBSVEw4MzY3X0RJX0ZPUkNFX0xJTksJCQlCSVQoNCkKKyNkZWZpbmUgICBSVEw4MzY3X0RJX0ZPUkNFX0RVUExFWAkJQklUKDIpCisjZGVmaW5lICAgUlRMODM2N19ESV9GT1JDRV9TUEVFRF9NQVNLCQkzCisjZGVmaW5lICAgUlRMODM2N19ESV9GT1JDRV9TUEVFRF8xMAkJMAorI2RlZmluZSAgIFJUTDgzNjdfRElfRk9SQ0VfU1BFRURfMTAwCQkxCisjZGVmaW5lICAgUlRMODM2N19ESV9GT1JDRV9TUEVFRF8xMDAwCQkyCisKKyNkZWZpbmUgUlRMODM2N19NQUNfRk9SQ0VfUkVHKF94KQkJKDB4MTMxMiArIChfeCkpCisKKyNkZWZpbmUgUlRMODM2N19DSElQX1JFU0VUX1JFRwkJCTB4MTMyMgorI2RlZmluZSAgIFJUTDgzNjdfQ0hJUF9SRVNFVF9TVwkJCUJJVCgxKQorI2RlZmluZSAgIFJUTDgzNjdfQ0hJUF9SRVNFVF9IVwkJCUJJVCgwKQorCisjZGVmaW5lIFJUTDgzNjdfUE9SVF9TVEFUVVNfUkVHKF9wKQkJKDB4MTM1MiArIChfcCkpCisjZGVmaW5lICAgUlRMODM2N19QT1JUX1NUQVRVU19OV0FZCQlCSVQoNykKKyNkZWZpbmUgICBSVEw4MzY3X1BPUlRfU1RBVFVTX1RYUEFVU0UJCUJJVCg2KQorI2RlZmluZSAgIFJUTDgzNjdfUE9SVF9TVEFUVVNfUlhQQVVTRQkJQklUKDUpCisjZGVmaW5lICAgUlRMODM2N19QT1JUX1NUQVRVU19MSU5LCQlCSVQoNCkKKyNkZWZpbmUgICBSVEw4MzY3X1BPUlRfU1RBVFVTX0RVUExFWAkJQklUKDIpCisjZGVmaW5lICAgUlRMODM2N19QT1JUX1NUQVRVU19TUEVFRF9NQVNLCTB4MDAwMworI2RlZmluZSAgIFJUTDgzNjdfUE9SVF9TVEFUVVNfU1BFRURfMTAJCTAKKyNkZWZpbmUgICBSVEw4MzY3X1BPUlRfU1RBVFVTX1NQRUVEXzEwMAkJMQorI2RlZmluZSAgIFJUTDgzNjdfUE9SVF9TVEFUVVNfU1BFRURfMTAwMAkyCisKKyNkZWZpbmUgUlRMODM2N19SVExfTk9fUkVHCQkJMHgxM2MwCisjZGVmaW5lICAgUlRMODM2N19SVExfTk9fODM2N1IJCQkweDM2NzAKKyNkZWZpbmUgICBSVEw4MzY3X1JUTF9OT184MzY3TQkJCTB4MzY3MQorCisjZGVmaW5lIFJUTDgzNjdfUlRMX1ZFUl9SRUcJCQkweDEzYzEKKyNkZWZpbmUgICBSVEw4MzY3X1JUTF9WRVJfTUFTSwkJCTB4ZgorCisjZGVmaW5lIFJUTDgzNjdfUlRMX01BR0lDX0lEX1JFRwkJMHgxM2MyCisjZGVmaW5lICAgUlRMODM2N19SVExfTUFHSUNfSURfVkFMCQkweDAyNDkKKworI2RlZmluZSBSVEw4MzY3X0xFRF9TWVNfQ09ORklHX1JFRwkJMHgxYjAwCisjZGVmaW5lIFJUTDgzNjdfTEVEX01PREVfUkVHCQkJMHgxYjAyCisjZGVmaW5lICAgUlRMODM2N19MRURfTU9ERV9SQVRFX00JCTB4NworI2RlZmluZSAgIFJUTDgzNjdfTEVEX01PREVfUkFURV9TCQkxCisKKyNkZWZpbmUgUlRMODM2N19MRURfQ09ORklHX1JFRwkJCTB4MWIwMworI2RlZmluZSAgIFJUTDgzNjdfTEVEX0NPTkZJR19EQVRBX1MJCTEyCisjZGVmaW5lICAgUlRMODM2N19MRURfQ09ORklHX0RBVEFfTQkJMHgzCisjZGVmaW5lICAgUlRMODM2N19MRURfQ09ORklHX1NFTAkJQklUKDE0KQorI2RlZmluZSAgIFJUTDgzNjdfTEVEX0NPTkZJR19MRURfQ0ZHX00JCTB4ZgorCisjZGVmaW5lIFJUTDgzNjdfUEFSQV9MRURfSU9fRU4xX1JFRwkJMHgxYjI0CisjZGVmaW5lIFJUTDgzNjdfUEFSQV9MRURfSU9fRU4yX1JFRwkJMHgxYjI1CisjZGVmaW5lICAgUlRMODM2N19QQVJBX0xFRF9JT19FTl9QTUFTSwkJMHhmZgorCisjZGVmaW5lIFJUTDgzNjdfSUFfQ1RSTF9SRUcJCQkweDFmMDAKKyNkZWZpbmUgICBSVEw4MzY3X0lBX0NUUkxfUlcoX3gpCQkoKF94KSA8PCAxKQorI2RlZmluZSAgIFJUTDgzNjdfSUFfQ1RSTF9SV19SRUFECQlSVEw4MzY3X0lBX0NUUkxfUlcoMCkKKyNkZWZpbmUgICBSVEw4MzY3X0lBX0NUUkxfUldfV1JJVEUJCVJUTDgzNjdfSUFfQ1RSTF9SVygxKQorI2RlZmluZSAgIFJUTDgzNjdfSUFfQ1RSTF9DTURfTUFTSwkJQklUKDApCisKKyNkZWZpbmUgUlRMODM2N19JQV9TVEFUVVNfUkVHCQkJMHgxZjAxCisjZGVmaW5lICAgUlRMODM2N19JQV9TVEFUVVNfUEhZX0JVU1kJCUJJVCgyKQorI2RlZmluZSAgIFJUTDgzNjdfSUFfU1RBVFVTX1NEU19CVVNZCQlCSVQoMSkKKyNkZWZpbmUgICBSVEw4MzY3X0lBX1NUQVRVU19NRFhfQlVTWQkJQklUKDApCisKKyNkZWZpbmUgUlRMODM2N19JQV9BRERSRVNTX1JFRwkJCTB4MWYwMgorCisjZGVmaW5lIFJUTDgzNjdfSUFfV1JJVEVfREFUQV9SRUcJCTB4MWYwMworI2RlZmluZSBSVEw4MzY3X0lBX1JFQURfREFUQV9SRUcJCTB4MWYwNAorCisjZGVmaW5lIFJUTDgzNjdfSU5URVJOQUxfUEhZX1JFRyhfYSwgX3IpCSgweDIwMDAgKyAzMiAqIChfYSkgKyAoX3IpKQorCisjZGVmaW5lIFJUTDgzNjdfQ1BVX1BPUlRfTlVNCQk5CisjZGVmaW5lIFJUTDgzNjdfTlVNX1BPUlRTCQkxMAorI2RlZmluZSBSVEw4MzY3X05VTV9WTEFOUwkJMzIKKyNkZWZpbmUgUlRMODM2N19OVU1fTEVER1JPVVBTCQk0CisjZGVmaW5lIFJUTDgzNjdfTlVNX1ZJRFMJCTQwOTYKKyNkZWZpbmUgUlRMODM2N19QUklPUklUWU1BWAkJNworI2RlZmluZSBSVEw4MzY3X0ZJRE1BWAkJCTcKKworI2RlZmluZSBSVEw4MzY3X1BPUlRfMAkJCUJJVCgwKQorI2RlZmluZSBSVEw4MzY3X1BPUlRfMQkJCUJJVCgxKQorI2RlZmluZSBSVEw4MzY3X1BPUlRfMgkJCUJJVCgyKQorI2RlZmluZSBSVEw4MzY3X1BPUlRfMwkJCUJJVCgzKQorI2RlZmluZSBSVEw4MzY3X1BPUlRfNAkJCUJJVCg0KQorI2RlZmluZSBSVEw4MzY3X1BPUlRfNQkJCUJJVCg1KQorI2RlZmluZSBSVEw4MzY3X1BPUlRfNgkJCUJJVCg2KQorI2RlZmluZSBSVEw4MzY3X1BPUlRfNwkJCUJJVCg3KQorI2RlZmluZSBSVEw4MzY3X1BPUlRfRTEJCQlCSVQoOCkJLyogZXh0ZXJuYWwgcG9ydCAxICovCisjZGVmaW5lIFJUTDgzNjdfUE9SVF9FMAkJCUJJVCg5KQkvKiBleHRlcm5hbCBwb3J0IDAgKi8KKworI2RlZmluZSBSVEw4MzY3X1BPUlRTX0FMTAkJCQkJXAorCShSVEw4MzY3X1BPUlRfMCB8IFJUTDgzNjdfUE9SVF8xIHwgUlRMODM2N19QT1JUXzIgfAlcCisJIFJUTDgzNjdfUE9SVF8zIHwgUlRMODM2N19QT1JUXzQgfCBSVEw4MzY3X1BPUlRfNSB8CVwKKwkgUlRMODM2N19QT1JUXzYgfCBSVEw4MzY3X1BPUlRfNyB8IFJUTDgzNjdfUE9SVF9FMSB8CVwKKwkgUlRMODM2N19QT1JUX0UwKQorCisjZGVmaW5lIFJUTDgzNjdfUE9SVFNfQUxMX0JVVF9DUFUJCQkJXAorCShSVEw4MzY3X1BPUlRfMCB8IFJUTDgzNjdfUE9SVF8xIHwgUlRMODM2N19QT1JUXzIgfAlcCisJIFJUTDgzNjdfUE9SVF8zIHwgUlRMODM2N19QT1JUXzQgfCBSVEw4MzY3X1BPUlRfNSB8CVwKKwkgUlRMODM2N19QT1JUXzYgfCBSVEw4MzY3X1BPUlRfNyB8IFJUTDgzNjdfUE9SVF9FMSkKKworc3RydWN0IHJ0bDgzNjdfaW5pdHZhbCB7CisJdTE2IHJlZzsKKwl1MTYgdmFsOworfTsKKworI2RlZmluZSBSVEw4MzY3X01JQl9SWEJfSUQJCTAJLyogSWZJbk9jdGV0cyAqLworI2RlZmluZSBSVEw4MzY3X01JQl9UWEJfSUQJCTIwCS8qIElmT3V0T2N0ZXRzICovCisKK3N0YXRpYyBzdHJ1Y3QgcnRsODM2Nl9taWJfY291bnRlciBydGw4MzY3X21pYl9jb3VudGVyc1tdID0geworCXsgMCwgIDAsIDQsICJJZkluT2N0ZXRzIgkJCQl9LAorCXsgMCwgIDQsIDIsICJEb3QzU3RhdHNGQ1NFcnJvcnMiCQkJfSwKKwl7IDAsICA2LCAyLCAiRG90M1N0YXRzU3ltYm9sRXJyb3JzIgkJCX0sCisJeyAwLCAgOCwgMiwgIkRvdDNJblBhdXNlRnJhbWVzIgkJCQl9LAorCXsgMCwgMTAsIDIsICJEb3QzQ29udHJvbEluVW5rbm93bk9wY29kZXMiCQl9LAorCXsgMCwgMTIsIDIsICJFdGhlclN0YXRzRnJhZ21lbnRzIgkJCX0sCisJeyAwLCAxNCwgMiwgIkV0aGVyU3RhdHNKYWJiZXJzIgkJCQl9LAorCXsgMCwgMTYsIDIsICJJZkluVWNhc3RQa3RzIgkJCQl9LAorCXsgMCwgMTgsIDIsICJFdGhlclN0YXRzRHJvcEV2ZW50cyIJCQl9LAorCXsgMCwgMjAsIDQsICJFdGhlclN0YXRzT2N0ZXRzIgkJCQl9LAorCisJeyAwLCAyNCwgMiwgIkV0aGVyU3RhdHNVbmRlclNpemVQa3RzIgkJCX0sCisJeyAwLCAyNiwgMiwgIkV0aGVyT3ZlcnNpemVTdGF0cyIJCQl9LAorCXsgMCwgMjgsIDIsICJFdGhlclN0YXRzUGt0czY0T2N0ZXRzIgkJCX0sCisJeyAwLCAzMCwgMiwgIkV0aGVyU3RhdHNQa3RzNjV0bzEyN09jdGV0cyIJCX0sCisJeyAwLCAzMiwgMiwgIkV0aGVyU3RhdHNQa3RzMTI4dG8yNTVPY3RldHMiCQl9LAorCXsgMCwgMzQsIDIsICJFdGhlclN0YXRzUGt0czI1NnRvNTExT2N0ZXRzIgkJfSwKKwl7IDAsIDM2LCAyLCAiRXRoZXJTdGF0c1BrdHM1MTJ0bzEwMjNPY3RldHMiCQl9LAorCXsgMCwgMzgsIDIsICJFdGhlclN0YXRzUGt0czEwMjR0bzE1MThPY3RldHMiCQl9LAorCXsgMCwgNDAsIDIsICJFdGhlclN0YXRzTXVsdGljYXN0UGt0cyIJCQl9LAorCXsgMCwgNDIsIDIsICJFdGhlclN0YXRzQnJvYWRjYXN0UGt0cyIJCQl9LAorCisJeyAwLCA0NCwgNCwgIklmT3V0T2N0ZXRzIgkJCQl9LAorCisJeyAwLCA0OCwgMiwgIkRvdDNTdGF0c1NpbmdsZUNvbGxpc2lvbkZyYW1lcyIJCX0sCisJeyAwLCA1MCwgMiwgIkRvdDNTdGF0TXVsdGlwbGVDb2xsaXNpb25GcmFtZXMiCQl9LAorCXsgMCwgNTIsIDIsICJEb3Qzc0RlZmVycmVkVHJhbnNtaXNzaW9ucyIJCX0sCisJeyAwLCA1NCwgMiwgIkRvdDNTdGF0c0xhdGVDb2xsaXNpb25zIgkJCX0sCisJeyAwLCA1NiwgMiwgIkV0aGVyU3RhdHNDb2xsaXNpb25zIgkJCX0sCisJeyAwLCA1OCwgMiwgIkRvdDNTdGF0c0V4Y2Vzc2l2ZUNvbGxpc2lvbnMiCQl9LAorCXsgMCwgNjAsIDIsICJEb3QzT3V0UGF1c2VGcmFtZXMiCQkJfSwKKwl7IDAsIDYyLCAyLCAiRG90MWRCYXNlUG9ydERlbGF5RXhjZWVkZWREaXNjYXJkcyIJfSwKKwl7IDAsIDY0LCAyLCAiRG90MWRUcFBvcnRJbkRpc2NhcmRzIgkJCX0sCisJeyAwLCA2NiwgMiwgIklmT3V0VWNhc3RQa3RzIgkJCQl9LAorCXsgMCwgNjgsIDIsICJJZk91dE11bHRpY2FzdFBrdHMiCQkJfSwKKwl7IDAsIDcwLCAyLCAiSWZPdXRCcm9hZGNhc3RQa3RzIgkJCX0sCisJeyAwLCA3MiwgMiwgIk91dE9hbXBkdVBrdHMiCQkJCX0sCisJeyAwLCA3NCwgMiwgIkluT2FtcGR1UGt0cyIJCQkJfSwKKwl7IDAsIDc2LCAyLCAiUGt0Z2VuUGt0cyIJCQkJfSwKK307CisKKyNkZWZpbmUgUkVHX1JEKF9zbWksIF9yZWcsIF92YWwpCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQllcnIgPSBydGw4MzY2X3NtaV9yZWFkX3JlZyhfc21pLCBfcmVnLCBfdmFsKTsJCVwKKwkJaWYgKGVycikJCQkJCQlcCisJCQlyZXR1cm4gZXJyOwkJCQkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgUkVHX1dSKF9zbWksIF9yZWcsIF92YWwpCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQllcnIgPSBydGw4MzY2X3NtaV93cml0ZV9yZWcoX3NtaSwgX3JlZywgX3ZhbCk7CQlcCisJCWlmIChlcnIpCQkJCQkJXAorCQkJcmV0dXJuIGVycjsJCQkJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFJFR19STVcoX3NtaSwgX3JlZywgX21hc2ssIF92YWwpCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWVyciA9IHJ0bDgzNjZfc21pX3Jtd3IoX3NtaSwgX3JlZywgX21hc2ssIF92YWwpOwlcCisJCWlmIChlcnIpCQkJCQkJXAorCQkJcmV0dXJuIGVycjsJCQkJCVwKKwl9IHdoaWxlICgwKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bDgzNjdfaW5pdHZhbCBydGw4MzY3X2luaXR2YWxzXzBfMFtdID0geworCXsweDEzM2YsIDB4MDAzMH0sIHsweDEzM2UsIDB4MDAwZX0sIHsweDIyMWYsIDB4MDAwMH0sIHsweDIyMTUsIDB4MTAwNn0sCisJezB4MjIxZiwgMHgwMDA1fSwgezB4MjIwMCwgMHgwMGM2fSwgezB4MjIxZiwgMHgwMDA3fSwgezB4MjIxZSwgMHgwMDQ4fSwKKwl7MHgyMjE1LCAweDY0MTJ9LCB7MHgyMjE2LCAweDY0MTJ9LCB7MHgyMjE3LCAweDY0MTJ9LCB7MHgyMjE4LCAweDY0MTJ9LAorCXsweDIyMTksIDB4NjQxMn0sIHsweDIyMUEsIDB4NjQxMn0sIHsweDIyMWYsIDB4MDAwMX0sIHsweDIyMGMsIDB4ZGJmMH0sCisJezB4MjIwOSwgMHgyNTc2fSwgezB4MjIwNywgMHgyODdFfSwgezB4MjIwQSwgMHg2OEU1fSwgezB4MjIxRCwgMHgzREE0fSwKKwl7MHgyMjFDLCAweEU3Rjd9LCB7MHgyMjE0LCAweDdGNTJ9LCB7MHgyMjE4LCAweDdGQ0V9LCB7MHgyMjA4LCAweDA0Qjd9LAorCXsweDIyMDYsIDB4NDA3Mn0sIHsweDIyMTAsIDB4RjA1RX0sIHsweDIyMUIsIDB4QjQxNH0sIHsweDIyMUYsIDB4MDAwM30sCisJezB4MjIxQSwgMHgwNkE2fSwgezB4MjIxMCwgMHhGMDVFfSwgezB4MjIxMywgMHgwNkVCfSwgezB4MjIxMiwgMHhGNEQyfSwKKwl7MHgyMjBFLCAweEUxMjB9LCB7MHgyMjAwLCAweDdDMDB9LCB7MHgyMjAyLCAweDVGRDB9LCB7MHgyMjBELCAweDAyMDd9LAorCXsweDIyMWYsIDB4MDAwMn0sIHsweDIyMDUsIDB4MDk3OH0sIHsweDIyMDIsIDB4OEMwMX0sIHsweDIyMDcsIDB4MzYyMH0sCisJezB4MjIxQywgMHgwMDAxfSwgezB4MjIwMywgMHgwNDIwfSwgezB4MjIwNCwgMHg4MEM4fSwgezB4MTMzZSwgMHgwZWRlfSwKKwl7MHgyMjFmLCAweDAwMDJ9LCB7MHgyMjBjLCAweDAwNzN9LCB7MHgyMjBkLCAweEVCNjV9LCB7MHgyMjBlLCAweDUxZDF9LAorCXsweDIyMGYsIDB4NWRjYn0sIHsweDIyMTAsIDB4MzA0NH0sIHsweDIyMTEsIDB4MTgwMH0sIHsweDIyMTIsIDB4N0UwMH0sCisJezB4MjIxMywgMHgwMDAwfSwgezB4MTMzZiwgMHgwMDEwfSwgezB4MTMzZSwgMHgwZmZlfSwgezB4MjA3ZiwgMHgwMDAyfSwKKwl7MHgyMDc0LCAweDNEMjJ9LCB7MHgyMDc1LCAweDIwMDB9LCB7MHgyMDc2LCAweDYwNDB9LCB7MHgyMDc3LCAweDAwMDB9LAorCXsweDIwNzgsIDB4MGYwYX0sIHsweDIwNzksIDB4NTBBQn0sIHsweDIwN2EsIDB4MDAwMH0sIHsweDIwN2IsIDB4MGYwZn0sCisJezB4MjA1ZiwgMHgwMDAyfSwgezB4MjA1NCwgMHhGRjAwfSwgezB4MjA1NSwgMHgwMDBBfSwgezB4MjA1NiwgMHgwMDBBfSwKKwl7MHgyMDU3LCAweDAwMDV9LCB7MHgyMDU4LCAweDAwMDV9LCB7MHgyMDU5LCAweDAwMDB9LCB7MHgyMDVBLCAweDAwMDV9LAorCXsweDIwNUIsIDB4MDAwNX0sIHsweDIwNUMsIDB4MDAwNX0sIHsweDIwOWYsIDB4MDAwMn0sIHsweDIwOTQsIDB4MDBBQX0sCisJezB4MjA5NSwgMHgwMEFBfSwgezB4MjA5NiwgMHgwMEFBfSwgezB4MjA5NywgMHgwMEFBfSwgezB4MjA5OCwgMHgwMDU1fSwKKwl7MHgyMDk5LCAweDAwQUF9LCB7MHgyMDlBLCAweDAwQUF9LCB7MHgyMDlCLCAweDAwQUF9LCB7MHgxMzYzLCAweDgzNTR9LAorCXsweDEyNzAsIDB4MzMzM30sIHsweDEyNzEsIDB4MzMzM30sIHsweDEyNzIsIDB4MzMzM30sIHsweDEzMzAsIDB4MDBEQn0sCisJezB4MTIwMywgMHhmZjAwfSwgezB4MTIwMCwgMHg3ZmM0fSwgezB4MTIxZCwgMHgxMDA2fSwgezB4MTIxZSwgMHgwM2U4fSwKKwl7MHgxMjFmLCAweDAyYjN9LCB7MHgxMjIwLCAweDAyOGZ9LCB7MHgxMjIxLCAweDAyOWJ9LCB7MHgxMjIyLCAweDAyNzd9LAorCXsweDEyMjMsIDB4MDJiM30sIHsweDEyMjQsIDB4MDI4Zn0sIHsweDEyMjUsIDB4MDI5Yn0sIHsweDEyMjYsIDB4MDI3N30sCisJezB4MTIyNywgMHgwMGMwfSwgezB4MTIyOCwgMHgwMGI0fSwgezB4MTIyZiwgMHgwMGMwfSwgezB4MTIzMCwgMHgwMGI0fSwKKwl7MHgxMjI5LCAweDAwMjB9LCB7MHgxMjJhLCAweDAwMGN9LCB7MHgxMjMxLCAweDAwMzB9LCB7MHgxMjMyLCAweDAwMjR9LAorCXsweDAyMTksIDB4MDAzMn0sIHsweDAyMDAsIDB4MDNlOH0sIHsweDAyMDEsIDB4MDNlOH0sIHsweDAyMDIsIDB4MDNlOH0sCisJezB4MDIwMywgMHgwM2U4fSwgezB4MDIwNCwgMHgwM2U4fSwgezB4MDIwNSwgMHgwM2U4fSwgezB4MDIwNiwgMHgwM2U4fSwKKwl7MHgwMjA3LCAweDAzZTh9LCB7MHgwMjE4LCAweDAwMzJ9LCB7MHgwMjA4LCAweDAyOWJ9LCB7MHgwMjA5LCAweDAyOWJ9LAorCXsweDAyMGEsIDB4MDI5Yn0sIHsweDAyMGIsIDB4MDI5Yn0sIHsweDAyMGMsIDB4MDI5Yn0sIHsweDAyMGQsIDB4MDI5Yn0sCisJezB4MDIwZSwgMHgwMjlifSwgezB4MDIwZiwgMHgwMjlifSwgezB4MDIxMCwgMHgwMjlifSwgezB4MDIxMSwgMHgwMjlifSwKKwl7MHgwMjEyLCAweDAyOWJ9LCB7MHgwMjEzLCAweDAyOWJ9LCB7MHgwMjE0LCAweDAyOWJ9LCB7MHgwMjE1LCAweDAyOWJ9LAorCXsweDAyMTYsIDB4MDI5Yn0sIHsweDAyMTcsIDB4MDI5Yn0sIHsweDA5MDAsIDB4MDAwMH0sIHsweDA5MDEsIDB4MDAwMH0sCisJezB4MDkwMiwgMHgwMDAwfSwgezB4MDkwMywgMHgwMDAwfSwgezB4MDg2NSwgMHgzMjEwfSwgezB4MDg3YiwgMHgwMDAwfSwKKwl7MHgwODdjLCAweGZmMDB9LCB7MHgwODdkLCAweDAwMDB9LCB7MHgwODdlLCAweDAwMDB9LCB7MHgwODAxLCAweDAxMDB9LAorCXsweDA4MDIsIDB4MDEwMH0sIHsweDE3MDAsIDB4MDE0Q30sIHsweDAzMDEsIDB4MDBGRn0sIHsweDEyQUEsIDB4MDA5Nn0sCisJezB4MTMzZiwgMHgwMDMwfSwgezB4MTMzZSwgMHgwMDBlfSwgezB4MjIxZiwgMHgwMDA1fSwgezB4MjIwMCwgMHgwMEM0fSwKKwl7MHgyMjFmLCAweDAwMDB9LCB7MHgyMjEwLCAweDA1RUZ9LCB7MHgyMjA0LCAweDA1RTF9LCB7MHgyMjAwLCAweDEzNDB9LAorCXsweDEzM2YsIDB4MDAxMH0sIHsweDIwQTAsIDB4MTk0MH0sIHsweDIwQzAsIDB4MTk0MH0sIHsweDIwRTAsIDB4MTk0MH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bDgzNjdfaW5pdHZhbCBydGw4MzY3X2luaXR2YWxzXzBfMVtdID0geworCXsweDEzM2YsIDB4MDAzMH0sIHsweDEzM2UsIDB4MDAwZX0sIHsweDIyMWYsIDB4MDAwMH0sIHsweDIyMTUsIDB4MTAwNn0sCisJezB4MjIxZiwgMHgwMDA1fSwgezB4MjIwMCwgMHgwMGM2fSwgezB4MjIxZiwgMHgwMDA3fSwgezB4MjIxZSwgMHgwMDQ4fSwKKwl7MHgyMjE1LCAweDY0MTJ9LCB7MHgyMjE2LCAweDY0MTJ9LCB7MHgyMjE3LCAweDY0MTJ9LCB7MHgyMjE4LCAweDY0MTJ9LAorCXsweDIyMTksIDB4NjQxMn0sIHsweDIyMUEsIDB4NjQxMn0sIHsweDIyMWYsIDB4MDAwMX0sIHsweDIyMGMsIDB4ZGJmMH0sCisJezB4MjIwOSwgMHgyNTc2fSwgezB4MjIwNywgMHgyODdFfSwgezB4MjIwQSwgMHg2OEU1fSwgezB4MjIxRCwgMHgzREE0fSwKKwl7MHgyMjFDLCAweEU3Rjd9LCB7MHgyMjE0LCAweDdGNTJ9LCB7MHgyMjE4LCAweDdGQ0V9LCB7MHgyMjA4LCAweDA0Qjd9LAorCXsweDIyMDYsIDB4NDA3Mn0sIHsweDIyMTAsIDB4RjA1RX0sIHsweDIyMUIsIDB4QjQxNH0sIHsweDIyMUYsIDB4MDAwM30sCisJezB4MjIxQSwgMHgwNkE2fSwgezB4MjIxMCwgMHhGMDVFfSwgezB4MjIxMywgMHgwNkVCfSwgezB4MjIxMiwgMHhGNEQyfSwKKwl7MHgyMjBFLCAweEUxMjB9LCB7MHgyMjAwLCAweDdDMDB9LCB7MHgyMjAyLCAweDVGRDB9LCB7MHgyMjBELCAweDAyMDd9LAorCXsweDIyMWYsIDB4MDAwMn0sIHsweDIyMDUsIDB4MDk3OH0sIHsweDIyMDIsIDB4OEMwMX0sIHsweDIyMDcsIDB4MzYyMH0sCisJezB4MjIxQywgMHgwMDAxfSwgezB4MjIwMywgMHgwNDIwfSwgezB4MjIwNCwgMHg4MEM4fSwgezB4MTMzZSwgMHgwZWRlfSwKKwl7MHgyMjFmLCAweDAwMDJ9LCB7MHgyMjBjLCAweDAwNzN9LCB7MHgyMjBkLCAweEVCNjV9LCB7MHgyMjBlLCAweDUxZDF9LAorCXsweDIyMGYsIDB4NWRjYn0sIHsweDIyMTAsIDB4MzA0NH0sIHsweDIyMTEsIDB4MTgwMH0sIHsweDIyMTIsIDB4N0UwMH0sCisJezB4MjIxMywgMHgwMDAwfSwgezB4MTMzZiwgMHgwMDEwfSwgezB4MTMzZSwgMHgwZmZlfSwgezB4MjA3ZiwgMHgwMDAyfSwKKwl7MHgyMDc0LCAweDNEMjJ9LCB7MHgyMDc1LCAweDIwMDB9LCB7MHgyMDc2LCAweDYwNDB9LCB7MHgyMDc3LCAweDAwMDB9LAorCXsweDIwNzgsIDB4MGYwYX0sIHsweDIwNzksIDB4NTBBQn0sIHsweDIwN2EsIDB4MDAwMH0sIHsweDIwN2IsIDB4MGYwZn0sCisJezB4MjA1ZiwgMHgwMDAyfSwgezB4MjA1NCwgMHhGRjAwfSwgezB4MjA1NSwgMHgwMDBBfSwgezB4MjA1NiwgMHgwMDBBfSwKKwl7MHgyMDU3LCAweDAwMDV9LCB7MHgyMDU4LCAweDAwMDV9LCB7MHgyMDU5LCAweDAwMDB9LCB7MHgyMDVBLCAweDAwMDV9LAorCXsweDIwNUIsIDB4MDAwNX0sIHsweDIwNUMsIDB4MDAwNX0sIHsweDIwOWYsIDB4MDAwMn0sIHsweDIwOTQsIDB4MDBBQX0sCisJezB4MjA5NSwgMHgwMEFBfSwgezB4MjA5NiwgMHgwMEFBfSwgezB4MjA5NywgMHgwMEFBfSwgezB4MjA5OCwgMHgwMDU1fSwKKwl7MHgyMDk5LCAweDAwQUF9LCB7MHgyMDlBLCAweDAwQUF9LCB7MHgyMDlCLCAweDAwQUF9LCB7MHgxMzYzLCAweDgzNTR9LAorCXsweDEyNzAsIDB4MzMzM30sIHsweDEyNzEsIDB4MzMzM30sIHsweDEyNzIsIDB4MzMzM30sIHsweDEzMzAsIDB4MDBEQn0sCisJezB4MTIwMywgMHhmZjAwfSwgezB4MTIwMCwgMHg3ZmM0fSwgezB4MTIxZCwgMHgxYjA2fSwgezB4MTIxZSwgMHgwN2YwfSwKKwl7MHgxMjFmLCAweDA0Mzh9LCB7MHgxMjIwLCAweDA0MGZ9LCB7MHgxMjIxLCAweDA0MGZ9LCB7MHgxMjIyLCAweDAzZWJ9LAorCXsweDEyMjMsIDB4MDQzOH0sIHsweDEyMjQsIDB4MDQwZn0sIHsweDEyMjUsIDB4MDQwZn0sIHsweDEyMjYsIDB4MDNlYn0sCisJezB4MTIyNywgMHgwMTQ0fSwgezB4MTIyOCwgMHgwMTM4fSwgezB4MTIyZiwgMHgwMTQ0fSwgezB4MTIzMCwgMHgwMTM4fSwKKwl7MHgxMjI5LCAweDAwMjB9LCB7MHgxMjJhLCAweDAwMGN9LCB7MHgxMjMxLCAweDAwMzB9LCB7MHgxMjMyLCAweDAwMjR9LAorCXsweDAyMTksIDB4MDAzMn0sIHsweDAyMDAsIDB4MDdkMH0sIHsweDAyMDEsIDB4MDdkMH0sIHsweDAyMDIsIDB4MDdkMH0sCisJezB4MDIwMywgMHgwN2QwfSwgezB4MDIwNCwgMHgwN2QwfSwgezB4MDIwNSwgMHgwN2QwfSwgezB4MDIwNiwgMHgwN2QwfSwKKwl7MHgwMjA3LCAweDA3ZDB9LCB7MHgwMjE4LCAweDAwMzJ9LCB7MHgwMjA4LCAweDAxOTB9LCB7MHgwMjA5LCAweDAxOTB9LAorCXsweDAyMGEsIDB4MDE5MH0sIHsweDAyMGIsIDB4MDE5MH0sIHsweDAyMGMsIDB4MDE5MH0sIHsweDAyMGQsIDB4MDE5MH0sCisJezB4MDIwZSwgMHgwMTkwfSwgezB4MDIwZiwgMHgwMTkwfSwgezB4MDIxMCwgMHgwMTkwfSwgezB4MDIxMSwgMHgwMTkwfSwKKwl7MHgwMjEyLCAweDAxOTB9LCB7MHgwMjEzLCAweDAxOTB9LCB7MHgwMjE0LCAweDAxOTB9LCB7MHgwMjE1LCAweDAxOTB9LAorCXsweDAyMTYsIDB4MDE5MH0sIHsweDAyMTcsIDB4MDE5MH0sIHsweDA5MDAsIDB4MDAwMH0sIHsweDA5MDEsIDB4MDAwMH0sCisJezB4MDkwMiwgMHgwMDAwfSwgezB4MDkwMywgMHgwMDAwfSwgezB4MDg2NSwgMHgzMjEwfSwgezB4MDg3YiwgMHgwMDAwfSwKKwl7MHgwODdjLCAweGZmMDB9LCB7MHgwODdkLCAweDAwMDB9LCB7MHgwODdlLCAweDAwMDB9LCB7MHgwODAxLCAweDAxMDB9LAorCXsweDA4MDIsIDB4MDEwMH0sIHsweDE3MDAsIDB4MDEyNX0sIHsweDAzMDEsIDB4MDBGRn0sIHsweDEyQUEsIDB4MDA5Nn0sCisJezB4MTMzZiwgMHgwMDMwfSwgezB4MTMzZSwgMHgwMDBlfSwgezB4MjIxZiwgMHgwMDA1fSwgezB4MjIwMCwgMHgwMEM0fSwKKwl7MHgyMjFmLCAweDAwMDB9LCB7MHgyMjEwLCAweDA1RUZ9LCB7MHgyMjA0LCAweDA1RTF9LCB7MHgyMjAwLCAweDEzNDB9LAorCXsweDEzM2YsIDB4MDAxMH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bDgzNjdfaW5pdHZhbCBydGw4MzY3X2luaXR2YWxzXzFfMFtdID0geworCXsweDFCMjQsIDB4MDAwMH0sIHsweDFCMjUsIDB4MDAwMH0sIHsweDFCMjYsIDB4MDAwMH0sIHsweDFCMjcsIDB4MDAwMH0sCisJezB4MjA3RiwgMHgwMDAyfSwgezB4MjA3OSwgMHgwMjAwfSwgezB4MjA3RiwgMHgwMDAwfSwgezB4MTMzRiwgMHgwMDMwfSwKKwl7MHgxMzNFLCAweDAwMEV9LCB7MHgyMjFGLCAweDAwMDV9LCB7MHgyMjAxLCAweDA3MDB9LCB7MHgyMjA1LCAweDhCODJ9LAorCXsweDIyMDYsIDB4MDVDQn0sIHsweDIyMUYsIDB4MDAwMn0sIHsweDIyMDQsIDB4ODBDMn0sIHsweDIyMDUsIDB4MDkzOH0sCisJezB4MjIxRiwgMHgwMDAzfSwgezB4MjIxMiwgMHhDNEQyfSwgezB4MjIwRCwgMHgwMjA3fSwgezB4MjIxRiwgMHgwMDAxfSwKKwl7MHgyMjA3LCAweDI2N0V9LCB7MHgyMjFDLCAweEU1Rjd9LCB7MHgyMjFCLCAweDA0MjR9LCB7MHgyMjFGLCAweDAwMDd9LAorCXsweDIyMUUsIDB4MDA0MH0sIHsweDIyMTgsIDB4MDAwMH0sIHsweDIyMUYsIDB4MDAwN30sIHsweDIyMUUsIDB4MDAyQ30sCisJezB4MjIxOCwgMHgwMDhCfSwgezB4MjIxRiwgMHgwMDA1fSwgezB4MjIwNSwgMHhGRkY2fSwgezB4MjIwNiwgMHgwMDgwfSwKKwl7MHgyMjA1LCAweDgwMDB9LCB7MHgyMjA2LCAweEY4RTB9LCB7MHgyMjA2LCAweEUwMDB9LCB7MHgyMjA2LCAweEUxRTB9LAorCXsweDIyMDYsIDB4MDFBQ30sIHsweDIyMDYsIDB4MjQwOH0sIHsweDIyMDYsIDB4RTA4Qn0sIHsweDIyMDYsIDB4ODRGN30sCisJezB4MjIwNiwgMHgyMEU0fSwgezB4MjIwNiwgMHg4Qjg0fSwgezB4MjIwNiwgMHhGQzA1fSwgezB4MjIwNiwgMHhGOEZBfSwKKwl7MHgyMjA2LCAweEVGNjl9LCB7MHgyMjA2LCAweEUwOEJ9LCB7MHgyMjA2LCAweDg2QUN9LCB7MHgyMjA2LCAweDIwMUF9LAorCXsweDIyMDYsIDB4QkY4MH0sIHsweDIyMDYsIDB4NTlEMH0sIHsweDIyMDYsIDB4MjQwMn0sIHsweDIyMDYsIDB4ODAzRH0sCisJezB4MjIwNiwgMHhFMEUwfSwgezB4MjIwNiwgMHhFNEUxfSwgezB4MjIwNiwgMHhFMEU1fSwgezB4MjIwNiwgMHg1ODA2fSwKKwl7MHgyMjA2LCAweDY4QzB9LCB7MHgyMjA2LCAweEQxRDJ9LCB7MHgyMjA2LCAweEU0RTB9LCB7MHgyMjA2LCAweEU0RTV9LAorCXsweDIyMDYsIDB4RTBFNX0sIHsweDIyMDYsIDB4RUY5Nn0sIHsweDIyMDYsIDB4RkVGQ30sIHsweDIyMDYsIDB4MDVGQn0sCisJezB4MjIwNiwgMHgwQkZCfSwgezB4MjIwNiwgMHg1OEZGfSwgezB4MjIwNiwgMHg5RTExfSwgezB4MjIwNiwgMHgwNkYwfSwKKwl7MHgyMjA2LCAweDBDODF9LCB7MHgyMjA2LCAweDhBRTB9LCB7MHgyMjA2LCAweDAwMTl9LCB7MHgyMjA2LCAweDFCODl9LAorCXsweDIyMDYsIDB4Q0ZFQn0sIHsweDIyMDYsIDB4MTlFQn0sIHsweDIyMDYsIDB4MTlCMH0sIHsweDIyMDYsIDB4RUZGRn0sCisJezB4MjIwNiwgMHgwQkZGfSwgezB4MjIwNiwgMHgwNDI1fSwgezB4MjIwNiwgMHgwODA3fSwgezB4MjIwNiwgMHgyNjQwfSwKKwl7MHgyMjA2LCAweDcyMjd9LCB7MHgyMjA2LCAweDI2N0V9LCB7MHgyMjA2LCAweDI4MDR9LCB7MHgyMjA2LCAweEI3Mjl9LAorCXsweDIyMDYsIDB4MjU3Nn0sIHsweDIyMDYsIDB4MkE2OH0sIHsweDIyMDYsIDB4RTUyQn0sIHsweDIyMDYsIDB4QUQwMH0sCisJezB4MjIwNiwgMHgyQ0RCfSwgezB4MjIwNiwgMHhGMDJEfSwgezB4MjIwNiwgMHg2N0JCfSwgezB4MjIwNiwgMHgyRTdCfSwKKwl7MHgyMjA2LCAweDBGMkZ9LCB7MHgyMjA2LCAweDczNjV9LCB7MHgyMjA2LCAweDMxQUN9LCB7MHgyMjA2LCAweENDMzJ9LAorCXsweDIyMDYsIDB4MjMwMH0sIHsweDIyMDYsIDB4MzMyRH0sIHsweDIyMDYsIDB4MTczNH0sIHsweDIyMDYsIDB4N0Y1Mn0sCisJezB4MjIwNiwgMHgzNTEwfSwgezB4MjIwNiwgMHgwMDM2fSwgezB4MjIwNiwgMHgwNjAwfSwgezB4MjIwNiwgMHgzNzBDfSwKKwl7MHgyMjA2LCAweEMwMzh9LCB7MHgyMjA2LCAweDdGQ0V9LCB7MHgyMjA2LCAweDNDRTV9LCB7MHgyMjA2LCAweEY3M0R9LAorCXsweDIyMDYsIDB4M0RBNH0sIHsweDIyMDYsIDB4NjUzMH0sIHsweDIyMDYsIDB4M0U2N30sIHsweDIyMDYsIDB4MDA1M30sCisJezB4MjIwNiwgMHg2OUQyfSwgezB4MjIwNiwgMHgwRjZBfSwgezB4MjIwNiwgMHgwMTJDfSwgezB4MjIwNiwgMHg2QzJCfSwKKwl7MHgyMjA2LCAweDEzNkV9LCB7MHgyMjA2LCAweEUxMDB9LCB7MHgyMjA2LCAweDZGMTJ9LCB7MHgyMjA2LCAweEY3NzF9LAorCXsweDIyMDYsIDB4MDA2Qn0sIHsweDIyMDYsIDB4NzMwNn0sIHsweDIyMDYsIDB4RUI3NH0sIHsweDIyMDYsIDB4OTRDN30sCisJezB4MjIwNiwgMHg3Njk4fSwgezB4MjIwNiwgMHgwQTc3fSwgezB4MjIwNiwgMHg1MDAwfSwgezB4MjIwNiwgMHg3ODhBfSwKKwl7MHgyMjA2LCAweDE1Nzl9LCB7MHgyMjA2LCAweDdGNkZ9LCB7MHgyMjA2LCAweDdBMDZ9LCB7MHgyMjA2LCAweEE2MDB9LAorCXsweDIyMDUsIDB4OEI5MH0sIHsweDIyMDYsIDB4ODAwMH0sIHsweDIyMDUsIDB4OEI5Mn0sIHsweDIyMDYsIDB4ODAwMH0sCisJezB4MjIwNSwgMHg4Qjk0fSwgezB4MjIwNiwgMHg4MDE0fSwgezB4MjIwOCwgMHhGRkZBfSwgezB4MjIwMiwgMHgzQzY1fSwKKwl7MHgyMjA1LCAweEZGRjZ9LCB7MHgyMjA2LCAweDAwRjd9LCB7MHgyMjFGLCAweDAwMDB9LCB7MHgyMjFGLCAweDAwMDd9LAorCXsweDIyMUUsIDB4MDA0Mn0sIHsweDIyMTgsIDB4MDAwMH0sIHsweDIyMUUsIDB4MDAyRH0sIHsweDIyMTgsIDB4RjAxMH0sCisJezB4MjIxRSwgMHgwMDIwfSwgezB4MjIxNSwgMHgwMDAwfSwgezB4MjIxRSwgMHgwMDIzfSwgezB4MjIxNiwgMHg4MDAwfSwKKwl7MHgyMjFGLCAweDAwMDB9LCB7MHgxMzNGLCAweDAwMTB9LCB7MHgxMzNFLCAweDBGRkV9LCB7MHgxMzYyLCAweDAxMTV9LAorCXsweDEzNjMsIDB4MDAwMn0sIHsweDEzNjMsIDB4MDAwMH0sIHsweDEzMDYsIDB4MDAwQ30sIHsweDEzMDcsIDB4MDAwQ30sCisJezB4MTMwMywgMHgwMDY3fSwgezB4MTMwNCwgMHg0NDQ0fSwgezB4MTIwMywgMHhGRjAwfSwgezB4MTIwMCwgMHg3RkM0fSwKKwl7MHgxMjFELCAweDdEMTZ9LCB7MHgxMjFFLCAweDAzRTh9LCB7MHgxMjFGLCAweDAyNEV9LCB7MHgxMjIwLCAweDAyMzB9LAorCXsweDEyMjEsIDB4MDI0NH0sIHsweDEyMjIsIDB4MDIyNn0sIHsweDEyMjMsIDB4MDI0RX0sIHsweDEyMjQsIDB4MDIzMH0sCisJezB4MTIyNSwgMHgwMjQ0fSwgezB4MTIyNiwgMHgwMjI2fSwgezB4MTIyNywgMHgwMEMwfSwgezB4MTIyOCwgMHgwMEI0fSwKKwl7MHgxMjJGLCAweDAwQzB9LCB7MHgxMjMwLCAweDAwQjR9LCB7MHgwMjA4LCAweDAzRTh9LCB7MHgwMjA5LCAweDAzRTh9LAorCXsweDAyMEEsIDB4MDNFOH0sIHsweDAyMEIsIDB4MDNFOH0sIHsweDAyMEMsIDB4MDNFOH0sIHsweDAyMEQsIDB4MDNFOH0sCisJezB4MDIwRSwgMHgwM0U4fSwgezB4MDIwRiwgMHgwM0U4fSwgezB4MDIxMCwgMHgwM0U4fSwgezB4MDIxMSwgMHgwM0U4fSwKKwl7MHgwMjEyLCAweDAzRTh9LCB7MHgwMjEzLCAweDAzRTh9LCB7MHgwMjE0LCAweDAzRTh9LCB7MHgwMjE1LCAweDAzRTh9LAorCXsweDAyMTYsIDB4MDNFOH0sIHsweDAyMTcsIDB4MDNFOH0sIHsweDA5MDAsIDB4MDAwMH0sIHsweDA5MDEsIDB4MDAwMH0sCisJezB4MDkwMiwgMHgwMDAwfSwgezB4MDkwMywgMHgwMDAwfSwgezB4MDg2NSwgMHgzMjEwfSwgezB4MDg3QiwgMHgwMDAwfSwKKwl7MHgwODdDLCAweEZGMDB9LCB7MHgwODdELCAweDAwMDB9LCB7MHgwODdFLCAweDAwMDB9LCB7MHgwODAxLCAweDAxMDB9LAorCXsweDA4MDIsIDB4MDEwMH0sIHsweDBBMjAsIDB4MjA0MH0sIHsweDBBMjEsIDB4MjA0MH0sIHsweDBBMjIsIDB4MjA0MH0sCisJezB4MEEyMywgMHgyMDQwfSwgezB4MEEyNCwgMHgyMDQwfSwgezB4MEEyOCwgMHgyMDQwfSwgezB4MEEyOSwgMHgyMDQwfSwKKwl7MHgxMzNGLCAweDAwMzB9LCB7MHgxMzNFLCAweDAwMEV9LCB7MHgyMjFGLCAweDAwMDB9LCB7MHgyMjAwLCAweDEzNDB9LAorCXsweDIyMUYsIDB4MDAwMH0sIHsweDEzM0YsIDB4MDAxMH0sIHsweDEzM0UsIDB4MEZGRX0sIHsweDIwQTAsIDB4MTk0MH0sCisJezB4MjBDMCwgMHgxOTQwfSwgezB4MjBFMCwgMHgxOTQwfSwgezB4MTMwYywgMHgwMDUwfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsODM2N19pbml0dmFsIHJ0bDgzNjdfaW5pdHZhbHNfMV8xW10gPSB7CisJezB4MUIyNCwgMHgwMDAwfSwgezB4MUIyNSwgMHgwMDAwfSwgezB4MUIyNiwgMHgwMDAwfSwgezB4MUIyNywgMHgwMDAwfSwKKwl7MHgyMDdGLCAweDAwMDJ9LCB7MHgyMDc5LCAweDAyMDB9LCB7MHgyMDdGLCAweDAwMDB9LCB7MHgxMzNGLCAweDAwMzB9LAorCXsweDEzM0UsIDB4MDAwRX0sIHsweDIyMUYsIDB4MDAwNX0sIHsweDIyMDEsIDB4MDcwMH0sIHsweDIyMDUsIDB4OEI4Mn0sCisJezB4MjIwNiwgMHgwNUNCfSwgezB4MjIxRiwgMHgwMDAyfSwgezB4MjIwNCwgMHg4MEMyfSwgezB4MjIwNSwgMHgwOTM4fSwKKwl7MHgyMjFGLCAweDAwMDN9LCB7MHgyMjEyLCAweEM0RDJ9LCB7MHgyMjBELCAweDAyMDd9LCB7MHgyMjFGLCAweDAwMDF9LAorCXsweDIyMDcsIDB4MjY3RX0sIHsweDIyMUMsIDB4RTVGN30sIHsweDIyMUIsIDB4MDQyNH0sIHsweDIyMUYsIDB4MDAwN30sCisJezB4MjIxRSwgMHgwMDQwfSwgezB4MjIxOCwgMHgwMDAwfSwgezB4MjIxRiwgMHgwMDA3fSwgezB4MjIxRSwgMHgwMDJDfSwKKwl7MHgyMjE4LCAweDAwOEJ9LCB7MHgyMjFGLCAweDAwMDV9LCB7MHgyMjA1LCAweEZGRjZ9LCB7MHgyMjA2LCAweDAwODB9LAorCXsweDIyMDUsIDB4ODAwMH0sIHsweDIyMDYsIDB4RjhFMH0sIHsweDIyMDYsIDB4RTAwMH0sIHsweDIyMDYsIDB4RTFFMH0sCisJezB4MjIwNiwgMHgwMUFDfSwgezB4MjIwNiwgMHgyNDA4fSwgezB4MjIwNiwgMHhFMDhCfSwgezB4MjIwNiwgMHg4NEY3fSwKKwl7MHgyMjA2LCAweDIwRTR9LCB7MHgyMjA2LCAweDhCODR9LCB7MHgyMjA2LCAweEZDMDV9LCB7MHgyMjA2LCAweEY4RkF9LAorCXsweDIyMDYsIDB4RUY2OX0sIHsweDIyMDYsIDB4RTA4Qn0sIHsweDIyMDYsIDB4ODZBQ30sIHsweDIyMDYsIDB4MjAxQX0sCisJezB4MjIwNiwgMHhCRjgwfSwgezB4MjIwNiwgMHg1OUQwfSwgezB4MjIwNiwgMHgyNDAyfSwgezB4MjIwNiwgMHg4MDNEfSwKKwl7MHgyMjA2LCAweEUwRTB9LCB7MHgyMjA2LCAweEU0RTF9LCB7MHgyMjA2LCAweEUwRTV9LCB7MHgyMjA2LCAweDU4MDZ9LAorCXsweDIyMDYsIDB4NjhDMH0sIHsweDIyMDYsIDB4RDFEMn0sIHsweDIyMDYsIDB4RTRFMH0sIHsweDIyMDYsIDB4RTRFNX0sCisJezB4MjIwNiwgMHhFMEU1fSwgezB4MjIwNiwgMHhFRjk2fSwgezB4MjIwNiwgMHhGRUZDfSwgezB4MjIwNiwgMHgwNUZCfSwKKwl7MHgyMjA2LCAweDBCRkJ9LCB7MHgyMjA2LCAweDU4RkZ9LCB7MHgyMjA2LCAweDlFMTF9LCB7MHgyMjA2LCAweDA2RjB9LAorCXsweDIyMDYsIDB4MEM4MX0sIHsweDIyMDYsIDB4OEFFMH0sIHsweDIyMDYsIDB4MDAxOX0sIHsweDIyMDYsIDB4MUI4OX0sCisJezB4MjIwNiwgMHhDRkVCfSwgezB4MjIwNiwgMHgxOUVCfSwgezB4MjIwNiwgMHgxOUIwfSwgezB4MjIwNiwgMHhFRkZGfSwKKwl7MHgyMjA2LCAweDBCRkZ9LCB7MHgyMjA2LCAweDA0MjV9LCB7MHgyMjA2LCAweDA4MDd9LCB7MHgyMjA2LCAweDI2NDB9LAorCXsweDIyMDYsIDB4NzIyN30sIHsweDIyMDYsIDB4MjY3RX0sIHsweDIyMDYsIDB4MjgwNH0sIHsweDIyMDYsIDB4QjcyOX0sCisJezB4MjIwNiwgMHgyNTc2fSwgezB4MjIwNiwgMHgyQTY4fSwgezB4MjIwNiwgMHhFNTJCfSwgezB4MjIwNiwgMHhBRDAwfSwKKwl7MHgyMjA2LCAweDJDREJ9LCB7MHgyMjA2LCAweEYwMkR9LCB7MHgyMjA2LCAweDY3QkJ9LCB7MHgyMjA2LCAweDJFN0J9LAorCXsweDIyMDYsIDB4MEYyRn0sIHsweDIyMDYsIDB4NzM2NX0sIHsweDIyMDYsIDB4MzFBQ30sIHsweDIyMDYsIDB4Q0MzMn0sCisJezB4MjIwNiwgMHgyMzAwfSwgezB4MjIwNiwgMHgzMzJEfSwgezB4MjIwNiwgMHgxNzM0fSwgezB4MjIwNiwgMHg3RjUyfSwKKwl7MHgyMjA2LCAweDM1MTB9LCB7MHgyMjA2LCAweDAwMzZ9LCB7MHgyMjA2LCAweDA2MDB9LCB7MHgyMjA2LCAweDM3MEN9LAorCXsweDIyMDYsIDB4QzAzOH0sIHsweDIyMDYsIDB4N0ZDRX0sIHsweDIyMDYsIDB4M0NFNX0sIHsweDIyMDYsIDB4RjczRH0sCisJezB4MjIwNiwgMHgzREE0fSwgezB4MjIwNiwgMHg2NTMwfSwgezB4MjIwNiwgMHgzRTY3fSwgezB4MjIwNiwgMHgwMDUzfSwKKwl7MHgyMjA2LCAweDY5RDJ9LCB7MHgyMjA2LCAweDBGNkF9LCB7MHgyMjA2LCAweDAxMkN9LCB7MHgyMjA2LCAweDZDMkJ9LAorCXsweDIyMDYsIDB4MTM2RX0sIHsweDIyMDYsIDB4RTEwMH0sIHsweDIyMDYsIDB4NkYxMn0sIHsweDIyMDYsIDB4Rjc3MX0sCisJezB4MjIwNiwgMHgwMDZCfSwgezB4MjIwNiwgMHg3MzA2fSwgezB4MjIwNiwgMHhFQjc0fSwgezB4MjIwNiwgMHg5NEM3fSwKKwl7MHgyMjA2LCAweDc2OTh9LCB7MHgyMjA2LCAweDBBNzd9LCB7MHgyMjA2LCAweDUwMDB9LCB7MHgyMjA2LCAweDc4OEF9LAorCXsweDIyMDYsIDB4MTU3OX0sIHsweDIyMDYsIDB4N0Y2Rn0sIHsweDIyMDYsIDB4N0EwNn0sIHsweDIyMDYsIDB4QTYwMH0sCisJezB4MjIwNSwgMHg4QjkwfSwgezB4MjIwNiwgMHg4MDAwfSwgezB4MjIwNSwgMHg4QjkyfSwgezB4MjIwNiwgMHg4MDAwfSwKKwl7MHgyMjA1LCAweDhCOTR9LCB7MHgyMjA2LCAweDgwMTR9LCB7MHgyMjA4LCAweEZGRkF9LCB7MHgyMjAyLCAweDNDNjV9LAorCXsweDIyMDUsIDB4RkZGNn0sIHsweDIyMDYsIDB4MDBGN30sIHsweDIyMUYsIDB4MDAwMH0sIHsweDIyMUYsIDB4MDAwN30sCisJezB4MjIxRSwgMHgwMDQyfSwgezB4MjIxOCwgMHgwMDAwfSwgezB4MjIxRSwgMHgwMDJEfSwgezB4MjIxOCwgMHhGMDEwfSwKKwl7MHgyMjFFLCAweDAwMjB9LCB7MHgyMjE1LCAweDAwMDB9LCB7MHgyMjFFLCAweDAwMjN9LCB7MHgyMjE2LCAweDgwMDB9LAorCXsweDIyMUYsIDB4MDAwMH0sIHsweDEzM0YsIDB4MDAxMH0sIHsweDEzM0UsIDB4MEZGRX0sIHsweDEzNjIsIDB4MDExNX0sCisJezB4MTM2MywgMHgwMDAyfSwgezB4MTM2MywgMHgwMDAwfSwgezB4MTMwNiwgMHgwMDBDfSwgezB4MTMwNywgMHgwMDBDfSwKKwl7MHgxMzAzLCAweDAwNjd9LCB7MHgxMzA0LCAweDQ0NDR9LCB7MHgxMjAzLCAweEZGMDB9LCB7MHgxMjAwLCAweDdGQzR9LAorCXsweDA5MDAsIDB4MDAwMH0sIHsweDA5MDEsIDB4MDAwMH0sIHsweDA5MDIsIDB4MDAwMH0sIHsweDA5MDMsIDB4MDAwMH0sCisJezB4MDg2NSwgMHgzMjEwfSwgezB4MDg3QiwgMHgwMDAwfSwgezB4MDg3QywgMHhGRjAwfSwgezB4MDg3RCwgMHgwMDAwfSwKKwl7MHgwODdFLCAweDAwMDB9LCB7MHgwODAxLCAweDAxMDB9LCB7MHgwODAyLCAweDAxMDB9LCB7MHgwQTIwLCAweDIwNDB9LAorCXsweDBBMjEsIDB4MjA0MH0sIHsweDBBMjIsIDB4MjA0MH0sIHsweDBBMjMsIDB4MjA0MH0sIHsweDBBMjQsIDB4MjA0MH0sCisJezB4MEEyNSwgMHgyMDQwfSwgezB4MEEyNiwgMHgyMDQwfSwgezB4MEEyNywgMHgyMDQwfSwgezB4MEEyOCwgMHgyMDQwfSwKKwl7MHgwQTI5LCAweDIwNDB9LCB7MHgxMzNGLCAweDAwMzB9LCB7MHgxMzNFLCAweDAwMEV9LCB7MHgyMjFGLCAweDAwMDB9LAorCXsweDIyMDAsIDB4MTM0MH0sIHsweDIyMUYsIDB4MDAwMH0sIHsweDEzM0YsIDB4MDAxMH0sIHsweDEzM0UsIDB4MEZGRX0sCisJezB4MUIwMywgMHgwODc2fSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsODM2N19pbml0dmFsIHJ0bDgzNjdfaW5pdHZhbHNfMl8wW10gPSB7CisJezB4MWIyNCwgMHgwMDAwfSwgezB4MWIyNSwgMHgwMDAwfSwgezB4MWIyNiwgMHgwMDAwfSwgezB4MWIyNywgMHgwMDAwfSwKKwl7MHgxMzNmLCAweDAwMzB9LCB7MHgxMzNlLCAweDAwMGV9LCB7MHgyMjFmLCAweDAwMDd9LCB7MHgyMjFlLCAweDAwNDh9LAorCXsweDIyMTksIDB4NDAxMn0sIHsweDIyMWYsIDB4MDAwM30sIHsweDIyMDEsIDB4MzU1NH0sIHsweDIyMDIsIDB4NjNlOH0sCisJezB4MjIwMywgMHg5OWMyfSwgezB4MjIwNCwgMHgwMTEzfSwgezB4MjIwNSwgMHgzMDNlfSwgezB4MjIwZCwgMHgwMjA3fSwKKwl7MHgyMjBlLCAweGUxMDB9LCB7MHgyMjFmLCAweDAwMDd9LCB7MHgyMjFlLCAweDAwNDB9LCB7MHgyMjE4LCAweDAwMDB9LAorCXsweDIyMWYsIDB4MDAwN30sIHsweDIyMWUsIDB4MDAyY30sIHsweDIyMTgsIDB4MDA4Yn0sIHsweDIyMWYsIDB4MDAwNX0sCisJezB4MjIwNSwgMHhmZmY2fSwgezB4MjIwNiwgMHgwMDgwfSwgezB4MjIxZiwgMHgwMDA1fSwgezB4MjIwNSwgMHg4MDAwfSwKKwl7MHgyMjA2LCAweDAyODB9LCB7MHgyMjA2LCAweDJiZjd9LCB7MHgyMjA2LCAweDAwZTB9LCB7MHgyMjA2LCAweGZmZjd9LAorCXsweDIyMDYsIDB4YTA4MH0sIHsweDIyMDYsIDB4MDJhZX0sIHsweDIyMDYsIDB4ZjYwMn0sIHsweDIyMDYsIDB4ODA0ZX0sCisJezB4MjIwNiwgMHgwMjAxfSwgezB4MjIwNiwgMHg1MDAyfSwgezB4MjIwNiwgMHgwMTYzfSwgezB4MjIwNiwgMHgwMjAxfSwKKwl7MHgyMjA2LCAweDc5ZTB9LCB7MHgyMjA2LCAweDhiOGN9LCB7MHgyMjA2LCAweGUxOGJ9LCB7MHgyMjA2LCAweDhkMWV9LAorCXsweDIyMDYsIDB4MDFlMX0sIHsweDIyMDYsIDB4OGI4ZX0sIHsweDIyMDYsIDB4MWUwMX0sIHsweDIyMDYsIDB4YTAwMH0sCisJezB4MjIwNiwgMHhlNGFlfSwgezB4MjIwNiwgMHhkOGJmfSwgezB4MjIwNiwgMHg4Yjg4fSwgezB4MjIwNiwgMHhlYzAwfSwKKwl7MHgyMjA2LCAweDE5YTl9LCB7MHgyMjA2LCAweDhiOTB9LCB7MHgyMjA2LCAweGY5ZWV9LCB7MHgyMjA2LCAweGZmZjZ9LAorCXsweDIyMDYsIDB4MDBlZX0sIHsweDIyMDYsIDB4ZmZmN30sIHsweDIyMDYsIDB4ZmNlMH0sIHsweDIyMDYsIDB4ZTE0MH0sCisJezB4MjIwNiwgMHhlMWUxfSwgezB4MjIwNiwgMHg0MWY3fSwgezB4MjIwNiwgMHgyZmY2fSwgezB4MjIwNiwgMHgyOGU0fSwKKwl7MHgyMjA2LCAweGUxNDB9LCB7MHgyMjA2LCAweGU1ZTF9LCB7MHgyMjA2LCAweDQxMDR9LCB7MHgyMjA2LCAweGY4ZmF9LAorCXsweDIyMDYsIDB4ZWY2OX0sIHsweDIyMDYsIDB4ZTA4Yn0sIHsweDIyMDYsIDB4ODZhY30sIHsweDIyMDYsIDB4MjAxYX0sCisJezB4MjIwNiwgMHhiZjgwfSwgezB4MjIwNiwgMHg3N2QwfSwgezB4MjIwNiwgMHg2YzAyfSwgezB4MjIwNiwgMHgyOTc4fSwKKwl7MHgyMjA2LCAweGUwZTB9LCB7MHgyMjA2LCAweGU0ZTF9LCB7MHgyMjA2LCAweGUwZTV9LCB7MHgyMjA2LCAweDU4MDZ9LAorCXsweDIyMDYsIDB4NjhjMH0sIHsweDIyMDYsIDB4ZDFkMn0sIHsweDIyMDYsIDB4ZTRlMH0sIHsweDIyMDYsIDB4ZTRlNX0sCisJezB4MjIwNiwgMHhlMGU1fSwgezB4MjIwNiwgMHhlZjk2fSwgezB4MjIwNiwgMHhmZWZjfSwgezB4MjIwNiwgMHgwNDI1fSwKKwl7MHgyMjA2LCAweDA4MDd9LCB7MHgyMjA2LCAweDI2NDB9LCB7MHgyMjA2LCAweDcyMjd9LCB7MHgyMjA2LCAweDI2N2V9LAorCXsweDIyMDYsIDB4MjgwNH0sIHsweDIyMDYsIDB4YjcyOX0sIHsweDIyMDYsIDB4MjU3Nn0sIHsweDIyMDYsIDB4MmE2OH0sCisJezB4MjIwNiwgMHhlNTJifSwgezB4MjIwNiwgMHhhZDAwfSwgezB4MjIwNiwgMHgyY2RifSwgezB4MjIwNiwgMHhmMDJkfSwKKwl7MHgyMjA2LCAweDY3YmJ9LCB7MHgyMjA2LCAweDJlN2J9LCB7MHgyMjA2LCAweDBmMmZ9LCB7MHgyMjA2LCAweDczNjV9LAorCXsweDIyMDYsIDB4MzFhY30sIHsweDIyMDYsIDB4Y2MzMn0sIHsweDIyMDYsIDB4MjMwMH0sIHsweDIyMDYsIDB4MzMyZH0sCisJezB4MjIwNiwgMHgxNzM0fSwgezB4MjIwNiwgMHg3ZjUyfSwgezB4MjIwNiwgMHgzNTEwfSwgezB4MjIwNiwgMHgwMDM2fSwKKwl7MHgyMjA2LCAweDA2MDB9LCB7MHgyMjA2LCAweDM3MGN9LCB7MHgyMjA2LCAweGMwMzh9LCB7MHgyMjA2LCAweDdmY2V9LAorCXsweDIyMDYsIDB4M2NlNX0sIHsweDIyMDYsIDB4ZjczZH0sIHsweDIyMDYsIDB4M2RhNH0sIHsweDIyMDYsIDB4NjUzMH0sCisJezB4MjIwNiwgMHgzZTY3fSwgezB4MjIwNiwgMHgwMDUzfSwgezB4MjIwNiwgMHg2OWQyfSwgezB4MjIwNiwgMHgwZjZhfSwKKwl7MHgyMjA2LCAweDAxMmN9LCB7MHgyMjA2LCAweDZjMmJ9LCB7MHgyMjA2LCAweDEzNmV9LCB7MHgyMjA2LCAweGUxMDB9LAorCXsweDIyMDYsIDB4NmYxMn0sIHsweDIyMDYsIDB4Zjc3MX0sIHsweDIyMDYsIDB4MDA2Yn0sIHsweDIyMDYsIDB4NzMwNn0sCisJezB4MjIwNiwgMHhlYjc0fSwgezB4MjIwNiwgMHg5NGM3fSwgezB4MjIwNiwgMHg3Njk4fSwgezB4MjIwNiwgMHgwYTc3fSwKKwl7MHgyMjA2LCAweDUwMDB9LCB7MHgyMjA2LCAweDc4OGF9LCB7MHgyMjA2LCAweDE1Nzl9LCB7MHgyMjA2LCAweDdmNmZ9LAorCXsweDIyMDYsIDB4N2EwNn0sIHsweDIyMDYsIDB4YTYwMH0sIHsweDIyMDEsIDB4MDcwMX0sIHsweDIyMDAsIDB4MDQwNX0sCisJezB4MjIxZiwgMHgwMDAwfSwgezB4MjIwMCwgMHgxMzQwfSwgezB4MjIxZiwgMHgwMDAwfSwgezB4MTMzZiwgMHgwMDEwfSwKKwl7MHgxMzNlLCAweDBmZmV9LCB7MHgxMjAzLCAweGZmMDB9LCB7MHgxMjAwLCAweDdmYzR9LCB7MHgxMjFkLCAweDdEMTZ9LAorCXsweDEyMWUsIDB4MDNlOH0sIHsweDEyMWYsIDB4MDI0ZX0sIHsweDEyMjAsIDB4MDIzMH0sIHsweDEyMjEsIDB4MDI0NH0sCisJezB4MTIyMiwgMHgwMjI2fSwgezB4MTIyMywgMHgwMjRlfSwgezB4MTIyNCwgMHgwMjMwfSwgezB4MTIyNSwgMHgwMjQ0fSwKKwl7MHgxMjI2LCAweDAyMjZ9LCB7MHgxMjI3LCAweDAwYzB9LCB7MHgxMjI4LCAweDAwYjR9LCB7MHgxMjJmLCAweDAwYzB9LAorCXsweDEyMzAsIDB4MDBiNH0sIHsweDAyMDgsIDB4MDNlOH0sIHsweDAyMDksIDB4MDNlOH0sIHsweDAyMGEsIDB4MDNlOH0sCisJezB4MDIwYiwgMHgwM2U4fSwgezB4MDIwYywgMHgwM2U4fSwgezB4MDIwZCwgMHgwM2U4fSwgezB4MDIwZSwgMHgwM2U4fSwKKwl7MHgwMjBmLCAweDAzZTh9LCB7MHgwMjEwLCAweDAzZTh9LCB7MHgwMjExLCAweDAzZTh9LCB7MHgwMjEyLCAweDAzZTh9LAorCXsweDAyMTMsIDB4MDNlOH0sIHsweDAyMTQsIDB4MDNlOH0sIHsweDAyMTUsIDB4MDNlOH0sIHsweDAyMTYsIDB4MDNlOH0sCisJezB4MDIxNywgMHgwM2U4fSwgezB4MDkwMCwgMHgwMDAwfSwgezB4MDkwMSwgMHgwMDAwfSwgezB4MDkwMiwgMHgwMDAwfSwKKwl7MHgwOTAzLCAweDAwMDB9LCB7MHgwODY1LCAweDMyMTB9LCB7MHgwODdiLCAweDAwMDB9LCB7MHgwODdjLCAweGZmMDB9LAorCXsweDA4N2QsIDB4MDAwMH0sIHsweDA4N2UsIDB4MDAwMH0sIHsweDA4MDEsIDB4MDEwMH0sIHsweDA4MDIsIDB4MDEwMH0sCisJezB4MEEyMCwgMHgyMDQwfSwgezB4MEEyMSwgMHgyMDQwfSwgezB4MEEyMiwgMHgyMDQwfSwgezB4MEEyMywgMHgyMDQwfSwKKwl7MHgwQTI0LCAweDIwNDB9LCB7MHgwQTI4LCAweDIwNDB9LCB7MHgwQTI5LCAweDIwNDB9LCB7MHgyMEEwLCAweDE5NDB9LAorCXsweDIwQzAsIDB4MTk0MH0sIHsweDIwRTAsIDB4MTk0MH0sIHsweDEzMGMsIDB4MDA1MH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bDgzNjdfaW5pdHZhbCBydGw4MzY3X2luaXR2YWxzXzJfMVtdID0geworCXsweDFiMjQsIDB4MDAwMH0sIHsweDFiMjUsIDB4MDAwMH0sIHsweDFiMjYsIDB4MDAwMH0sIHsweDFiMjcsIDB4MDAwMH0sCisJezB4MTMzZiwgMHgwMDMwfSwgezB4MTMzZSwgMHgwMDBlfSwgezB4MjIxZiwgMHgwMDA3fSwgezB4MjIxZSwgMHgwMDQ4fSwKKwl7MHgyMjE5LCAweDQwMTJ9LCB7MHgyMjFmLCAweDAwMDN9LCB7MHgyMjAxLCAweDM1NTR9LCB7MHgyMjAyLCAweDYzZTh9LAorCXsweDIyMDMsIDB4OTljMn0sIHsweDIyMDQsIDB4MDExM30sIHsweDIyMDUsIDB4MzAzZX0sIHsweDIyMGQsIDB4MDIwN30sCisJezB4MjIwZSwgMHhlMTAwfSwgezB4MjIxZiwgMHgwMDA3fSwgezB4MjIxZSwgMHgwMDQwfSwgezB4MjIxOCwgMHgwMDAwfSwKKwl7MHgyMjFmLCAweDAwMDd9LCB7MHgyMjFlLCAweDAwMmN9LCB7MHgyMjE4LCAweDAwOGJ9LCB7MHgyMjFmLCAweDAwMDV9LAorCXsweDIyMDUsIDB4ZmZmNn0sIHsweDIyMDYsIDB4MDA4MH0sIHsweDIyMWYsIDB4MDAwNX0sIHsweDIyMDUsIDB4ODAwMH0sCisJezB4MjIwNiwgMHgwMjgwfSwgezB4MjIwNiwgMHgyYmY3fSwgezB4MjIwNiwgMHgwMGUwfSwgezB4MjIwNiwgMHhmZmY3fSwKKwl7MHgyMjA2LCAweGEwODB9LCB7MHgyMjA2LCAweDAyYWV9LCB7MHgyMjA2LCAweGY2MDJ9LCB7MHgyMjA2LCAweDgwNGV9LAorCXsweDIyMDYsIDB4MDIwMX0sIHsweDIyMDYsIDB4NTAwMn0sIHsweDIyMDYsIDB4MDE2M30sIHsweDIyMDYsIDB4MDIwMX0sCisJezB4MjIwNiwgMHg3OWUwfSwgezB4MjIwNiwgMHg4YjhjfSwgezB4MjIwNiwgMHhlMThifSwgezB4MjIwNiwgMHg4ZDFlfSwKKwl7MHgyMjA2LCAweDAxZTF9LCB7MHgyMjA2LCAweDhiOGV9LCB7MHgyMjA2LCAweDFlMDF9LCB7MHgyMjA2LCAweGEwMDB9LAorCXsweDIyMDYsIDB4ZTRhZX0sIHsweDIyMDYsIDB4ZDhiZn0sIHsweDIyMDYsIDB4OGI4OH0sIHsweDIyMDYsIDB4ZWMwMH0sCisJezB4MjIwNiwgMHgxOWE5fSwgezB4MjIwNiwgMHg4YjkwfSwgezB4MjIwNiwgMHhmOWVlfSwgezB4MjIwNiwgMHhmZmY2fSwKKwl7MHgyMjA2LCAweDAwZWV9LCB7MHgyMjA2LCAweGZmZjd9LCB7MHgyMjA2LCAweGZjZTB9LCB7MHgyMjA2LCAweGUxNDB9LAorCXsweDIyMDYsIDB4ZTFlMX0sIHsweDIyMDYsIDB4NDFmN30sIHsweDIyMDYsIDB4MmZmNn0sIHsweDIyMDYsIDB4MjhlNH0sCisJezB4MjIwNiwgMHhlMTQwfSwgezB4MjIwNiwgMHhlNWUxfSwgezB4MjIwNiwgMHg0MTA0fSwgezB4MjIwNiwgMHhmOGZhfSwKKwl7MHgyMjA2LCAweGVmNjl9LCB7MHgyMjA2LCAweGUwOGJ9LCB7MHgyMjA2LCAweDg2YWN9LCB7MHgyMjA2LCAweDIwMWF9LAorCXsweDIyMDYsIDB4YmY4MH0sIHsweDIyMDYsIDB4NzdkMH0sIHsweDIyMDYsIDB4NmMwMn0sIHsweDIyMDYsIDB4Mjk3OH0sCisJezB4MjIwNiwgMHhlMGUwfSwgezB4MjIwNiwgMHhlNGUxfSwgezB4MjIwNiwgMHhlMGU1fSwgezB4MjIwNiwgMHg1ODA2fSwKKwl7MHgyMjA2LCAweDY4YzB9LCB7MHgyMjA2LCAweGQxZDJ9LCB7MHgyMjA2LCAweGU0ZTB9LCB7MHgyMjA2LCAweGU0ZTV9LAorCXsweDIyMDYsIDB4ZTBlNX0sIHsweDIyMDYsIDB4ZWY5Nn0sIHsweDIyMDYsIDB4ZmVmY30sIHsweDIyMDYsIDB4MDQyNX0sCisJezB4MjIwNiwgMHgwODA3fSwgezB4MjIwNiwgMHgyNjQwfSwgezB4MjIwNiwgMHg3MjI3fSwgezB4MjIwNiwgMHgyNjdlfSwKKwl7MHgyMjA2LCAweDI4MDR9LCB7MHgyMjA2LCAweGI3Mjl9LCB7MHgyMjA2LCAweDI1NzZ9LCB7MHgyMjA2LCAweDJhNjh9LAorCXsweDIyMDYsIDB4ZTUyYn0sIHsweDIyMDYsIDB4YWQwMH0sIHsweDIyMDYsIDB4MmNkYn0sIHsweDIyMDYsIDB4ZjAyZH0sCisJezB4MjIwNiwgMHg2N2JifSwgezB4MjIwNiwgMHgyZTdifSwgezB4MjIwNiwgMHgwZjJmfSwgezB4MjIwNiwgMHg3MzY1fSwKKwl7MHgyMjA2LCAweDMxYWN9LCB7MHgyMjA2LCAweGNjMzJ9LCB7MHgyMjA2LCAweDIzMDB9LCB7MHgyMjA2LCAweDMzMmR9LAorCXsweDIyMDYsIDB4MTczNH0sIHsweDIyMDYsIDB4N2Y1Mn0sIHsweDIyMDYsIDB4MzUxMH0sIHsweDIyMDYsIDB4MDAzNn0sCisJezB4MjIwNiwgMHgwNjAwfSwgezB4MjIwNiwgMHgzNzBjfSwgezB4MjIwNiwgMHhjMDM4fSwgezB4MjIwNiwgMHg3ZmNlfSwKKwl7MHgyMjA2LCAweDNjZTV9LCB7MHgyMjA2LCAweGY3M2R9LCB7MHgyMjA2LCAweDNkYTR9LCB7MHgyMjA2LCAweDY1MzB9LAorCXsweDIyMDYsIDB4M2U2N30sIHsweDIyMDYsIDB4MDA1M30sIHsweDIyMDYsIDB4NjlkMn0sIHsweDIyMDYsIDB4MGY2YX0sCisJezB4MjIwNiwgMHgwMTJjfSwgezB4MjIwNiwgMHg2YzJifSwgezB4MjIwNiwgMHgxMzZlfSwgezB4MjIwNiwgMHhlMTAwfSwKKwl7MHgyMjA2LCAweDZmMTJ9LCB7MHgyMjA2LCAweGY3NzF9LCB7MHgyMjA2LCAweDAwNmJ9LCB7MHgyMjA2LCAweDczMDZ9LAorCXsweDIyMDYsIDB4ZWI3NH0sIHsweDIyMDYsIDB4OTRjN30sIHsweDIyMDYsIDB4NzY5OH0sIHsweDIyMDYsIDB4MGE3N30sCisJezB4MjIwNiwgMHg1MDAwfSwgezB4MjIwNiwgMHg3ODhhfSwgezB4MjIwNiwgMHgxNTc5fSwgezB4MjIwNiwgMHg3ZjZmfSwKKwl7MHgyMjA2LCAweDdhMDZ9LCB7MHgyMjA2LCAweGE2MDB9LCB7MHgyMjAxLCAweDA3MDF9LCB7MHgyMjAwLCAweDA0MDV9LAorCXsweDIyMWYsIDB4MDAwMH0sIHsweDIyMDAsIDB4MTM0MH0sIHsweDIyMWYsIDB4MDAwMH0sIHsweDEzM2YsIDB4MDAxMH0sCisJezB4MTMzZSwgMHgwZmZlfSwgezB4MTIwMywgMHhmZjAwfSwgezB4MTIwMCwgMHg3ZmM0fSwgezB4MDkwMCwgMHgwMDAwfSwKKwl7MHgwOTAxLCAweDAwMDB9LCB7MHgwOTAyLCAweDAwMDB9LCB7MHgwOTAzLCAweDAwMDB9LCB7MHgwODY1LCAweDMyMTB9LAorCXsweDA4N2IsIDB4MDAwMH0sIHsweDA4N2MsIDB4ZmYwMH0sIHsweDA4N2QsIDB4MDAwMH0sIHsweDA4N2UsIDB4MDAwMH0sCisJezB4MDgwMSwgMHgwMTAwfSwgezB4MDgwMiwgMHgwMTAwfSwgezB4MEEyMCwgMHgyMDQwfSwgezB4MEEyMSwgMHgyMDQwfSwKKwl7MHgwQTIyLCAweDIwNDB9LCB7MHgwQTIzLCAweDIwNDB9LCB7MHgwQTI0LCAweDIwNDB9LCB7MHgwQTI1LCAweDIwNDB9LAorCXsweDBBMjYsIDB4MjA0MH0sIHsweDBBMjcsIDB4MjA0MH0sIHsweDBBMjgsIDB4MjA0MH0sIHsweDBBMjksIDB4MjA0MH0sCisJezB4MTMwYywgMHgwMDUwfSwKK307CisKK3N0YXRpYyBpbnQgcnRsODM2N193cml0ZV9pbml0dmFscyhzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwKKwkJCQkgIGNvbnN0IHN0cnVjdCBydGw4MzY3X2luaXR2YWwgKmluaXR2YWxzLAorCQkJCSAgaW50IGNvdW50KQoreworCWludCBlcnI7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKwkJUkVHX1dSKHNtaSwgaW5pdHZhbHNbaV0ucmVnLCBpbml0dmFsc1tpXS52YWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2N19yZWFkX3BoeV9yZWcoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksCisJCQkJdTMyIHBoeV9hZGRyLCB1MzIgcGh5X3JlZywgdTMyICp2YWwpCit7CisJaW50IHRpbWVvdXQ7CisJdTMyIGRhdGE7CisJaW50IGVycjsKKworCWlmIChwaHlfYWRkciA+IFJUTDgzNjdfUEhZX0FERFJfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChwaHlfcmVnID4gUlRMODM2N19QSFlfUkVHX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlSRUdfUkQoc21pLCBSVEw4MzY3X0lBX1NUQVRVU19SRUcsICZkYXRhKTsKKwlpZiAoZGF0YSAmIFJUTDgzNjdfSUFfU1RBVFVTX1BIWV9CVVNZKQorCQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCS8qIHByZXBhcmUgYWRkcmVzcyAqLworCVJFR19XUihzbWksIFJUTDgzNjdfSUFfQUREUkVTU19SRUcsCisJICAgICAgIFJUTDgzNjdfSU5URVJOQUxfUEhZX1JFRyhwaHlfYWRkciwgcGh5X3JlZykpOworCisJLyogc2VuZCByZWFkIGNvbW1hbmQgKi8KKwlSRUdfV1Ioc21pLCBSVEw4MzY3X0lBX0NUUkxfUkVHLAorCSAgICAgICBSVEw4MzY3X0lBX0NUUkxfQ01EX01BU0sgfCBSVEw4MzY3X0lBX0NUUkxfUldfUkVBRCk7CisKKwl0aW1lb3V0ID0gNTsKKwlkbyB7CisJCVJFR19SRChzbWksIFJUTDgzNjdfSUFfU1RBVFVTX1JFRywgJmRhdGEpOworCQlpZiAoKGRhdGEgJiBSVEw4MzY3X0lBX1NUQVRVU19QSFlfQlVTWSkgPT0gMCkKKwkJCWJyZWFrOworCisJCWlmICh0aW1lb3V0LS0pIHsKKwkJCWRldl9lcnIoc21pLT5wYXJlbnQsICJwaHkgcmVhZCB0aW1lZCBvdXRcbiIpOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCX0KKworCQl1ZGVsYXkoMSk7CisJfSB3aGlsZSAoMSk7CisKKwkvKiByZWFkIGRhdGEgKi8KKwlSRUdfUkQoc21pLCBSVEw4MzY3X0lBX1JFQURfREFUQV9SRUcsIHZhbCk7CisKKwlkZXZfZGJnKHNtaS0+cGFyZW50LCAicGh5X3JlYWQ6IGFkZHI6JTAyeCwgcmVnOiUwMngsIHZhbDolMDR4XG4iLAorCQlwaHlfYWRkciwgcGh5X3JlZywgKnZhbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2N193cml0ZV9waHlfcmVnKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLAorCQkJCSB1MzIgcGh5X2FkZHIsIHUzMiBwaHlfcmVnLCB1MzIgdmFsKQoreworCWludCB0aW1lb3V0OworCXUzMiBkYXRhOworCWludCBlcnI7CisKKwlkZXZfZGJnKHNtaS0+cGFyZW50LCAicGh5X3dyaXRlOiBhZGRyOiUwMngsIHJlZzolMDJ4LCB2YWw6JTA0eFxuIiwKKwkJcGh5X2FkZHIsIHBoeV9yZWcsIHZhbCk7CisKKwlpZiAocGh5X2FkZHIgPiBSVEw4MzY3X1BIWV9BRERSX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocGh5X3JlZyA+IFJUTDgzNjdfUEhZX1JFR19NQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJUkVHX1JEKHNtaSwgUlRMODM2N19JQV9TVEFUVVNfUkVHLCAmZGF0YSk7CisJaWYgKGRhdGEgJiBSVEw4MzY3X0lBX1NUQVRVU19QSFlfQlVTWSkKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisKKwkvKiBwcmVhcHJlIGRhdGEgKi8KKwlSRUdfV1Ioc21pLCBSVEw4MzY3X0lBX1dSSVRFX0RBVEFfUkVHLCB2YWwpOworCisJLyogcHJlcGFyZSBhZGRyZXNzICovCisJUkVHX1dSKHNtaSwgUlRMODM2N19JQV9BRERSRVNTX1JFRywKKwkgICAgICAgUlRMODM2N19JTlRFUk5BTF9QSFlfUkVHKHBoeV9hZGRyLCBwaHlfcmVnKSk7CisKKwkvKiBzZW5kIHdyaXRlIGNvbW1hbmQgKi8KKwlSRUdfV1Ioc21pLCBSVEw4MzY3X0lBX0NUUkxfUkVHLAorCSAgICAgICBSVEw4MzY3X0lBX0NUUkxfQ01EX01BU0sgfCBSVEw4MzY3X0lBX0NUUkxfUldfV1JJVEUpOworCisJdGltZW91dCA9IDU7CisJZG8geworCQlSRUdfUkQoc21pLCBSVEw4MzY3X0lBX1NUQVRVU19SRUcsICZkYXRhKTsKKwkJaWYgKChkYXRhICYgUlRMODM2N19JQV9TVEFUVVNfUEhZX0JVU1kpID09IDApCisJCQlicmVhazsKKworCQlpZiAodGltZW91dC0tKSB7CisJCQlkZXZfZXJyKHNtaS0+cGFyZW50LCAicGh5IHdyaXRlIHRpbWVkIG91dFxuIik7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJfQorCisJCXVkZWxheSgxKTsKKwl9IHdoaWxlICgxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjdfaW5pdF9yZWdzMChzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwgdW5zaWduZWQgbW9kZSkKK3sKKwljb25zdCBzdHJ1Y3QgcnRsODM2N19pbml0dmFsICppbml0dmFsczsKKwlpbnQgY291bnQ7CisJaW50IGVycjsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgMDoKKwkJaW5pdHZhbHMgPSBydGw4MzY3X2luaXR2YWxzXzBfMDsKKwkJY291bnQgPSBBUlJBWV9TSVpFKHJ0bDgzNjdfaW5pdHZhbHNfMF8wKTsKKwkJYnJlYWs7CisKKwljYXNlIDE6CisJY2FzZSAyOgorCQlpbml0dmFscyA9IHJ0bDgzNjdfaW5pdHZhbHNfMF8xOworCQljb3VudCA9IEFSUkFZX1NJWkUocnRsODM2N19pbml0dmFsc18wXzEpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWRldl9lcnIoc21pLT5wYXJlbnQsICIlczogdW5rbm93IG1vZGUgJXVcbiIsIF9fZnVuY19fLCBtb2RlKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZXJyID0gcnRsODM2N193cml0ZV9pbml0dmFscyhzbWksIGluaXR2YWxzLCBjb3VudCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIFRPRE86IGNvbXBsZXRlIHRoaXMgKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjdfaW5pdF9yZWdzMShzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwgdW5zaWduZWQgbW9kZSkKK3sKKwljb25zdCBzdHJ1Y3QgcnRsODM2N19pbml0dmFsICppbml0dmFsczsKKwlpbnQgY291bnQ7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIDA6CisJCWluaXR2YWxzID0gcnRsODM2N19pbml0dmFsc18xXzA7CisJCWNvdW50ID0gQVJSQVlfU0laRShydGw4MzY3X2luaXR2YWxzXzFfMCk7CisJCWJyZWFrOworCisJY2FzZSAxOgorCWNhc2UgMjoKKwkJaW5pdHZhbHMgPSBydGw4MzY3X2luaXR2YWxzXzFfMTsKKwkJY291bnQgPSBBUlJBWV9TSVpFKHJ0bDgzNjdfaW5pdHZhbHNfMV8xKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkZXZfZXJyKHNtaS0+cGFyZW50LCAiJXM6IHVua25vdyBtb2RlICV1XG4iLCBfX2Z1bmNfXywgbW9kZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldHVybiBydGw4MzY3X3dyaXRlX2luaXR2YWxzKHNtaSwgaW5pdHZhbHMsIGNvdW50KTsKK30KKworc3RhdGljIGludCBydGw4MzY3X2luaXRfcmVnczIoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIHVuc2lnbmVkIG1vZGUpCit7CisJY29uc3Qgc3RydWN0IHJ0bDgzNjdfaW5pdHZhbCAqaW5pdHZhbHM7CisJaW50IGNvdW50OworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSAwOgorCQlpbml0dmFscyA9IHJ0bDgzNjdfaW5pdHZhbHNfMl8wOworCQljb3VudCA9IEFSUkFZX1NJWkUocnRsODM2N19pbml0dmFsc18yXzApOworCQlicmVhazsKKworCWNhc2UgMToKKwljYXNlIDI6CisJCWluaXR2YWxzID0gcnRsODM2N19pbml0dmFsc18yXzE7CisJCWNvdW50ID0gQVJSQVlfU0laRShydGw4MzY3X2luaXR2YWxzXzJfMSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZGV2X2VycihzbWktPnBhcmVudCwgIiVzOiB1bmtub3cgbW9kZSAldVxuIiwgX19mdW5jX18sIG1vZGUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gcnRsODM2N193cml0ZV9pbml0dmFscyhzbWksIGluaXR2YWxzLCBjb3VudCk7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2N19pbml0X3JlZ3Moc3RydWN0IHJ0bDgzNjZfc21pICpzbWkpCit7CisJdTMyIGRhdGE7CisJdTMyIHJsdmlkOworCXUzMiBtb2RlOworCWludCBlcnI7CisKKwlSRUdfV1Ioc21pLCBSVEw4MzY3X1JUTF9NQUdJQ19JRF9SRUcsIFJUTDgzNjdfUlRMX01BR0lDX0lEX1ZBTCk7CisKKwlSRUdfUkQoc21pLCBSVEw4MzY3X0NISVBfVkVSX1JFRywgJmRhdGEpOworCXJsdmlkID0gKGRhdGEgPj4gUlRMODM2N19DSElQX1ZFUl9STFZJRF9TSElGVCkgJgorCQlSVEw4MzY3X0NISVBfVkVSX1JMVklEX01BU0s7CisKKwlSRUdfUkQoc21pLCBSVEw4MzY3X0NISVBfTU9ERV9SRUcsICZkYXRhKTsKKwltb2RlID0gZGF0YSAmIFJUTDgzNjdfQ0hJUF9NT0RFX01BU0s7CisKKwlzd2l0Y2ggKHJsdmlkKSB7CisJY2FzZSAwOgorCQllcnIgPSBydGw4MzY3X2luaXRfcmVnczAoc21pLCBtb2RlKTsKKwkJYnJlYWs7CisKKwljYXNlIDE6CisJCWVyciA9IHJ0bDgzNjdfd3JpdGVfcGh5X3JlZyhzbWksIDAsIDMxLCA1KTsKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCisJCWVyciA9IHJ0bDgzNjdfd3JpdGVfcGh5X3JlZyhzbWksIDAsIDUsIDB4M2ZmZSk7CisJCWlmIChlcnIpCisJCQlicmVhazsKKworCQllcnIgPSBydGw4MzY3X3JlYWRfcGh5X3JlZyhzbWksIDAsIDYsICZkYXRhKTsKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCisJCWlmIChkYXRhID09IDB4OTRlYikgeworCQkJZXJyID0gcnRsODM2N19pbml0X3JlZ3MxKHNtaSwgbW9kZSk7CisJCX0gZWxzZSBpZiAoZGF0YSA9PSAweDIxMDQpIHsKKwkJCWVyciA9IHJ0bDgzNjdfaW5pdF9yZWdzMihzbWksIG1vZGUpOworCQl9IGVsc2UgeworCQkJZGV2X2VycihzbWktPnBhcmVudCwgInVua25vdyBwaHkgZGF0YSAlMDR4XG4iLCBkYXRhKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkZXZfZXJyKHNtaS0+cGFyZW50LCAidW5rbm93IHJsdmlkICV1XG4iLCBybHZpZCk7CisJCWVyciA9IC1FTk9ERVY7CisJCWJyZWFrOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2N19yZXNldF9jaGlwKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pKQoreworCWludCB0aW1lb3V0ID0gMTA7CisJaW50IGVycjsKKwl1MzIgZGF0YTsKKworCVJFR19XUihzbWksIFJUTDgzNjdfQ0hJUF9SRVNFVF9SRUcsIFJUTDgzNjdfQ0hJUF9SRVNFVF9IVyk7CisJbXNsZWVwKFJUTDgzNjdfUkVTRVRfREVMQVkpOworCisJZG8geworCQlSRUdfUkQoc21pLCBSVEw4MzY3X0NISVBfUkVTRVRfUkVHLCAmZGF0YSk7CisJCWlmICghKGRhdGEgJiBSVEw4MzY3X0NISVBfUkVTRVRfSFcpKQorCQkJYnJlYWs7CisKKwkJbXNsZWVwKDEpOworCX0gd2hpbGUgKC0tdGltZW91dCk7CisKKwlpZiAoIXRpbWVvdXQpIHsKKwkJZGV2X2VycihzbWktPnBhcmVudCwgImNoaXAgcmVzZXQgdGltZWQgb3V0XG4iKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2N19leHRpZl9zZXRfbW9kZShzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwgaW50IGlkLAorCQkJCSAgZW51bSBydGw4MzY3X2V4dGlmX21vZGUgbW9kZSkKK3sKKwlpbnQgZXJyOworCisJLyogc2V0IHBvcnQgbW9kZSAqLworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgUlRMODM2N19FWFRJRl9NT0RFX1JHTUlJOgorCWNhc2UgUlRMODM2N19FWFRJRl9NT0RFX1JHTUlJXzMzVjoKKwkJUkVHX1dSKHNtaSwgUlRMODM2N19DSElQX0RFQlVHMF9SRUcsIDB4MDM2Nyk7CisJCVJFR19XUihzbWksIFJUTDgzNjdfQ0hJUF9ERUJVRzFfUkVHLCAweDc3NzcpOworCQlicmVhazsKKworCWNhc2UgUlRMODM2N19FWFRJRl9NT0RFX1RNSUlfTUFDOgorCWNhc2UgUlRMODM2N19FWFRJRl9NT0RFX1RNSUlfUEhZOgorCQlSRUdfUk1XKHNtaSwgUlRMODM2N19CWVBBU1NfTElORV9SQVRFX1JFRywKKwkJCUJJVCgoaWQgKyAxKSAlIDIpLCBCSVQoKGlkICsgMSkgJSAyKSk7CisJCWJyZWFrOworCisJY2FzZSBSVEw4MzY3X0VYVElGX01PREVfR01JSToKKwkJUkVHX1JNVyhzbWksIFJUTDgzNjdfQ0hJUF9ERUJVRzBfUkVHLAorCQkgICAgICAgIFJUTDgzNjdfQ0hJUF9ERUJVRzBfRFVNTVkwKGlkKSwKKwkJCVJUTDgzNjdfQ0hJUF9ERUJVRzBfRFVNTVkwKGlkKSk7CisJCVJFR19STVcoc21pLCBSVEw4MzY3X0VYVF9SR01YRl9SRUcoaWQpLCBCSVQoNiksIEJJVCg2KSk7CisJCWJyZWFrOworCisJY2FzZSBSVEw4MzY3X0VYVElGX01PREVfTUlJX01BQzoKKwljYXNlIFJUTDgzNjdfRVhUSUZfTU9ERV9NSUlfUEhZOgorCWNhc2UgUlRMODM2N19FWFRJRl9NT0RFX0RJU0FCTEVEOgorCQlSRUdfUk1XKHNtaSwgUlRMODM2N19CWVBBU1NfTElORV9SQVRFX1JFRywKKwkJCUJJVCgoaWQgKyAxKSAlIDIpLCAwKTsKKwkJUkVHX1JNVyhzbWksIFJUTDgzNjdfRVhUX1JHTVhGX1JFRyhpZCksIEJJVCg2KSwgMCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZGV2X2VycihzbWktPnBhcmVudCwKKwkJCSJpbnZhbGlkIG1vZGUgZm9yIGV4dGVybmFsIGludGVyZmFjZSAlZFxuIiwgaWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlSRUdfUk1XKHNtaSwgUlRMODM2N19ESVNfUkVHLAorCQlSVEw4MzY3X0RJU19SR01JSV9NQVNLIDw8IFJUTDgzNjdfRElTX1JHTUlJX1NISUZUKGlkKSwKKwkJbW9kZSA8PCBSVEw4MzY3X0RJU19SR01JSV9TSElGVChpZCkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2N19leHRpZl9zZXRfZm9yY2Uoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIGludCBpZCwKKwkJCQkgICBzdHJ1Y3QgcnRsODM2N19wb3J0X2FiaWxpdHkgKnBhKQoreworCXUzMiBtYXNrOworCXUzMiB2YWw7CisJaW50IGVycjsKKworCW1hc2sgPSAoUlRMODM2N19ESV9GT1JDRV9NT0RFIHwKKwkJUlRMODM2N19ESV9GT1JDRV9OV0FZIHwKKwkJUlRMODM2N19ESV9GT1JDRV9UWFBBVVNFIHwKKwkJUlRMODM2N19ESV9GT1JDRV9SWFBBVVNFIHwKKwkJUlRMODM2N19ESV9GT1JDRV9MSU5LIHwKKwkJUlRMODM2N19ESV9GT1JDRV9EVVBMRVggfAorCQlSVEw4MzY3X0RJX0ZPUkNFX1NQRUVEX01BU0spOworCisJdmFsID0gcGEtPnNwZWVkOworCXZhbCB8PSBwYS0+Zm9yY2VfbW9kZSA/IFJUTDgzNjdfRElfRk9SQ0VfTU9ERSA6IDA7CisJdmFsIHw9IHBhLT5ud2F5ID8gUlRMODM2N19ESV9GT1JDRV9OV0FZIDogMDsKKwl2YWwgfD0gcGEtPnR4cGF1c2UgPyBSVEw4MzY3X0RJX0ZPUkNFX1RYUEFVU0UgOiAwOworCXZhbCB8PSBwYS0+cnhwYXVzZSA/IFJUTDgzNjdfRElfRk9SQ0VfUlhQQVVTRSA6IDA7CisJdmFsIHw9IHBhLT5saW5rID8gUlRMODM2N19ESV9GT1JDRV9MSU5LIDogMDsKKwl2YWwgfD0gcGEtPmR1cGxleCA/IFJUTDgzNjdfRElfRk9SQ0VfRFVQTEVYIDogMDsKKworCVJFR19STVcoc21pLCBSVEw4MzY3X0RJX0ZPUkNFX1JFRyhpZCksIG1hc2ssIHZhbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MzY3X2V4dGlmX3NldF9yZ21paV9kZWxheShzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwgaW50IGlkLAorCQkJCQkgdW5zaWduZWQgdHhkZWxheSwgdW5zaWduZWQgcnhkZWxheSkKK3sKKwl1MzIgbWFzazsKKwl1MzIgdmFsOworCWludCBlcnI7CisKKwltYXNrID0gKFJUTDgzNjdfRVhUX1JHTVhGX1JYREVMQVlfTUFTSyB8CisJCShSVEw4MzY3X0VYVF9SR01YRl9UWERFTEFZX01BU0sgPDwKKwkJCVJUTDgzNjdfRVhUX1JHTVhGX1RYREVMQVlfU0hJRlQpKTsKKworCXZhbCA9IHJ4ZGVsYXk7CisJdmFsIHw9IHR4ZGVsYXkgPDwgUlRMODM2N19FWFRfUkdNWEZfVFhERUxBWV9TSElGVDsKKworCVJFR19STVcoc21pLCBSVEw4MzY3X0VYVF9SR01YRl9SRUcoaWQpLCBtYXNrLCB2YWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2N19leHRpZl9pbml0KHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLCBpbnQgaWQsCisJCQkgICAgICBzdHJ1Y3QgcnRsODM2N19leHRpZl9jb25maWcgKmNmZykKK3sKKwllbnVtIHJ0bDgzNjdfZXh0aWZfbW9kZSBtb2RlOworCWludCBlcnI7CisKKwltb2RlID0gKGNmZykgPyBjZmctPm1vZGUgOiBSVEw4MzY3X0VYVElGX01PREVfRElTQUJMRUQ7CisKKwllcnIgPSBydGw4MzY3X2V4dGlmX3NldF9tb2RlKHNtaSwgaWQsIG1vZGUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAobW9kZSAhPSBSVEw4MzY3X0VYVElGX01PREVfRElTQUJMRUQpIHsKKwkJZXJyID0gcnRsODM2N19leHRpZl9zZXRfZm9yY2Uoc21pLCBpZCwgJmNmZy0+YWJpbGl0eSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCWVyciA9IHJ0bDgzNjdfZXh0aWZfc2V0X3JnbWlpX2RlbGF5KHNtaSwgaWQsIGNmZy0+dHhkZWxheSwKKwkJCQkJCSAgICAgY2ZnLT5yeGRlbGF5KTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2N19sZWRfZ3JvdXBfc2V0X3BvcnRzKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZ3JvdXAsIHUxNiBwb3J0X21hc2spCit7CisJdTMyIHJlZzsKKwl1MzIgczsKKwlpbnQgZXJyOworCisJcG9ydF9tYXNrICY9IFJUTDgzNjdfUEFSQV9MRURfSU9fRU5fUE1BU0s7CisJcyA9IChncm91cCAlIDIpICogODsKKwlyZWcgPSBSVEw4MzY3X1BBUkFfTEVEX0lPX0VOMV9SRUcgKyAoZ3JvdXAgLyAyKTsKKworCVJFR19STVcoc21pLCByZWcsIChSVEw4MzY3X1BBUkFfTEVEX0lPX0VOX1BNQVNLIDw8IHMpLCBwb3J0X21hc2sgPDwgcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MzY3X2xlZF9ncm91cF9zZXRfbW9kZShzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgbW9kZSkKK3sKKwl1MTYgbWFzazsKKwl1MTYgc2V0OworCWludCBlcnI7CisKKwltb2RlICY9IFJUTDgzNjdfTEVEX0NPTkZJR19EQVRBX007CisKKwltYXNrID0gKFJUTDgzNjdfTEVEX0NPTkZJR19EQVRBX00gPDwgUlRMODM2N19MRURfQ09ORklHX0RBVEFfUykgfAorCQlSVEw4MzY3X0xFRF9DT05GSUdfU0VMOworCXNldCA9IChtb2RlIDw8IFJUTDgzNjdfTEVEX0NPTkZJR19EQVRBX1MpIHwgUlRMODM2N19MRURfQ09ORklHX1NFTDsKKworCVJFR19STVcoc21pLCBSVEw4MzY3X0xFRF9DT05GSUdfUkVHLCBtYXNrLCBzZXQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2N19sZWRfZ3JvdXBfc2V0X2NvbmZpZyhzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwKKwkJCQkgICAgICAgIHVuc2lnbmVkIGludCBsZWQsIHVuc2lnbmVkIGludCBjZmcpCit7CisJdTE2IG1hc2s7CisJdTE2IHNldDsKKwlpbnQgZXJyOworCisJbWFzayA9IChSVEw4MzY3X0xFRF9DT05GSUdfTEVEX0NGR19NIDw8IChsZWQgKiA0KSkgfAorCQlSVEw4MzY3X0xFRF9DT05GSUdfU0VMOworCXNldCA9IChjZmcgJiBSVEw4MzY3X0xFRF9DT05GSUdfTEVEX0NGR19NKSA8PCAobGVkICogNCk7CisKKwlSRUdfUk1XKHNtaSwgUlRMODM2N19MRURfQ09ORklHX1JFRywgbWFzaywgc2V0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MzY3X2xlZF9vcF9zZWxlY3RfcGFyYWxsZWwoc3RydWN0IHJ0bDgzNjZfc21pICpzbWkpCit7CisJaW50IGVycjsKKworCVJFR19XUihzbWksIFJUTDgzNjdfTEVEX1NZU19DT05GSUdfUkVHLCAweDE0NzIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjdfbGVkX2JsaW5rcmF0ZV9zZXQoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIHVuc2lnbmVkIGludCByYXRlKQoreworCXUxNiBtYXNrOworCXUxNiBzZXQ7CisJaW50IGVycjsKKworCW1hc2sgPSBSVEw4MzY3X0xFRF9NT0RFX1JBVEVfTSA8PCBSVEw4MzY3X0xFRF9NT0RFX1JBVEVfUzsKKwlzZXQgPSAocmF0ZSAmIFJUTDgzNjdfTEVEX01PREVfUkFURV9NKSA8PCBSVEw4MzY3X0xFRF9NT0RFX1JBVEVfUzsKKwlSRUdfUk1XKHNtaSwgUlRMODM2N19MRURfTU9ERV9SRUcsIG1hc2ssIHNldCk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19PRgorc3RhdGljIGludCBydGw4MzY3X2V4dGlmX2luaXRfb2Yoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIGludCBpZCwKKwkJCQkgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgcnRsODM2N19leHRpZl9jb25maWcgKmNmZzsKKwljb25zdCBfX2JlMzIgKnByb3A7CisJaW50IHNpemU7CisJaW50IGVycjsKKworCXByb3AgPSBvZl9nZXRfcHJvcGVydHkoc21pLT5wYXJlbnQtPm9mX25vZGUsIG5hbWUsICZzaXplKTsKKwlpZiAoIXByb3ApCisJCXJldHVybiBydGw4MzY3X2V4dGlmX2luaXQoc21pLCBpZCwgTlVMTCk7CisKKwlpZiAoc2l6ZSAhPSAoOSAqIHNpemVvZigqcHJvcCkpKSB7CisJCWRldl9lcnIoc21pLT5wYXJlbnQsICIlcyBwcm9wZXJ0eSBpcyBpbnZhbGlkXG4iLCBuYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY2ZnID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJ0bDgzNjdfZXh0aWZfY29uZmlnKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjZmcpCisJCXJldHVybiAtRU5PTUVNOworCisJY2ZnLT50eGRlbGF5ID0gYmUzMl90b19jcHVwKHByb3ArKyk7CisJY2ZnLT5yeGRlbGF5ID0gYmUzMl90b19jcHVwKHByb3ArKyk7CisJY2ZnLT5tb2RlID0gYmUzMl90b19jcHVwKHByb3ArKyk7CisJY2ZnLT5hYmlsaXR5LmZvcmNlX21vZGUgPSBiZTMyX3RvX2NwdXAocHJvcCsrKTsKKwljZmctPmFiaWxpdHkudHhwYXVzZSA9IGJlMzJfdG9fY3B1cChwcm9wKyspOworCWNmZy0+YWJpbGl0eS5yeHBhdXNlID0gYmUzMl90b19jcHVwKHByb3ArKyk7CisJY2ZnLT5hYmlsaXR5LmxpbmsgPSBiZTMyX3RvX2NwdXAocHJvcCsrKTsKKwljZmctPmFiaWxpdHkuZHVwbGV4ID0gYmUzMl90b19jcHVwKHByb3ArKyk7CisJY2ZnLT5hYmlsaXR5LnNwZWVkID0gYmUzMl90b19jcHVwKHByb3ArKyk7CisKKwllcnIgPSBydGw4MzY3X2V4dGlmX2luaXQoc21pLCBpZCwgY2ZnKTsKKwlrZnJlZShjZmcpOworCisJcmV0dXJuIGVycjsKK30KKyNlbHNlCitzdGF0aWMgaW50IHJ0bDgzNjdfZXh0aWZfaW5pdF9vZihzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwgaW50IGlkLAorCQkJCSBjb25zdCBjaGFyICpuYW1lKQoreworCXJldHVybiAtRUlOVkFMOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgcnRsODM2N19zZXR1cChzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSkKK3sKKwlzdHJ1Y3QgcnRsODM2N19wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlpbnQgZXJyOworCWludCBpOworCisJcGRhdGEgPSBzbWktPnBhcmVudC0+cGxhdGZvcm1fZGF0YTsKKworCWVyciA9IHJ0bDgzNjdfaW5pdF9yZWdzKHNtaSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIGluaXRpYWxpemUgZXh0ZXJuYWwgaW50ZXJmYWNlcyAqLworCWlmIChzbWktPnBhcmVudC0+b2Zfbm9kZSkgeworCQllcnIgPSBydGw4MzY3X2V4dGlmX2luaXRfb2Yoc21pLCAwLCAicmVhbHRlayxleHRpZjAiKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJZXJyID0gcnRsODM2N19leHRpZl9pbml0X29mKHNtaSwgMSwgInJlYWx0ZWssZXh0aWYxIik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0gZWxzZSB7CisJCWVyciA9IHJ0bDgzNjdfZXh0aWZfaW5pdChzbWksIDAsIHBkYXRhLT5leHRpZjBfY2ZnKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJZXJyID0gcnRsODM2N19leHRpZl9pbml0KHNtaSwgMSwgcGRhdGEtPmV4dGlmMV9jZmcpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBzZXQgbWF4aW11bSBwYWNrZXQgbGVuZ3RoIHRvIDE1MzYgYnl0ZXMgKi8KKwlSRUdfUk1XKHNtaSwgUlRMODM2N19TV0MwX1JFRywgUlRMODM2N19TV0MwX01BWF9MRU5HVEhfTUFTSywKKwkJUlRMODM2N19TV0MwX01BWF9MRU5HVEhfMTUzNik7CisKKwkvKgorCSAqIGRpc2NhcmQgVkxBTiB0YWdnZWQgcGFja2V0cyBpZiB0aGUgcG9ydCBpcyBub3QgYSBtZW1iZXIgb2YKKwkgKiB0aGUgVkxBTiB3aXRoIHdoaWNoIHRoZSBwYWNrZXRzIGlzIGFzc29jaWF0ZWQuCisJICovCisJUkVHX1dSKHNtaSwgUlRMODM2N19WTEFOX0lOR1JFU1NfUkVHLCBSVEw4MzY3X1BPUlRTX0FMTCk7CisKKwkvKgorCSAqIFNldHVwIGVncmVzcyB0YWcgbW9kZSBmb3IgZWFjaCBwb3J0LgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBSVEw4MzY3X05VTV9QT1JUUzsgaSsrKQorCQlSRUdfUk1XKHNtaSwKKwkJCVJUTDgzNjdfUE9SVF9DRkdfUkVHKGkpLAorCQkJUlRMODM2N19QT1JUX0NGR19FR1JFU1NfTU9ERV9NQVNLIDw8CisJCQkJUlRMODM2N19QT1JUX0NGR19FR1JFU1NfTU9ERV9TSElGVCwKKwkJCVJUTDgzNjdfUE9SVF9DRkdfRUdSRVNTX01PREVfT1JJR0lOQUwgPDwKKwkJCQlSVEw4MzY3X1BPUlRfQ0ZHX0VHUkVTU19NT0RFX1NISUZUKTsKKworCS8qIHNldHVwIExFRHMgKi8KKwllcnIgPSBydGw4MzY3X2xlZF9ncm91cF9zZXRfcG9ydHMoc21pLCAwLCBSVEw4MzY3X1BPUlRTX0FMTCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHJ0bDgzNjdfbGVkX2dyb3VwX3NldF9tb2RlKHNtaSwgMCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHJ0bDgzNjdfbGVkX29wX3NlbGVjdF9wYXJhbGxlbChzbWkpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBydGw4MzY3X2xlZF9ibGlua3JhdGVfc2V0KHNtaSwgMSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHJ0bDgzNjdfbGVkX2dyb3VwX3NldF9jb25maWcoc21pLCAwLCAyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2N19nZXRfbWliX2NvdW50ZXIoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIGludCBjb3VudGVyLAorCQkJCSAgIGludCBwb3J0LCB1bnNpZ25lZCBsb25nIGxvbmcgKnZhbCkKK3sKKwlzdHJ1Y3QgcnRsODM2Nl9taWJfY291bnRlciAqbWliOworCWludCBvZmZzZXQ7CisJaW50IGk7CisJaW50IGVycjsKKwl1MzIgYWRkciwgZGF0YTsKKwl1NjQgbWlidmFsdWU7CisKKwlpZiAocG9ydCA+IFJUTDgzNjdfTlVNX1BPUlRTIHx8IGNvdW50ZXIgPj0gUlRMODM2N19NSUJfQ09VTlQpCisJCXJldHVybiAtRUlOVkFMOworCisJbWliID0gJnJ0bDgzNjdfbWliX2NvdW50ZXJzW2NvdW50ZXJdOworCWFkZHIgPSBSVEw4MzY3X01JQl9DT1VOVEVSX1BPUlRfT0ZGU0VUICogcG9ydCArIG1pYi0+b2Zmc2V0OworCisJLyoKKwkgKiBXcml0aW5nIGFjY2VzcyBjb3VudGVyIGFkZHJlc3MgZmlyc3QKKwkgKiB0aGVuIEFTSUMgd2lsbCBwcmVwYXJlIDY0Yml0cyBjb3VudGVyIHdhaXQgZm9yIGJlaW5nIHJldHJpdmVkCisJICovCisJUkVHX1dSKHNtaSwgUlRMODM2N19NSUJfQUREUkVTU19SRUcsIGFkZHIgPj4gMik7CisKKwkvKiByZWFkIE1JQiBjb250cm9sIHJlZ2lzdGVyICovCisJUkVHX1JEKHNtaSwgUlRMODM2N19NSUJfQ1RSTF9SRUcoMCksICZkYXRhKTsKKworCWlmIChkYXRhICYgUlRMODM2N19NSUJfQ1RSTF9CVVNZX01BU0spCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoZGF0YSAmIFJUTDgzNjdfTUlCX0NUUkxfUkVTRVRfTUFTSykKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAobWliLT5sZW5ndGggPT0gNCkKKwkJb2Zmc2V0ID0gMzsKKwllbHNlCisJCW9mZnNldCA9IChtaWItPm9mZnNldCArIDEpICUgNDsKKworCW1pYnZhbHVlID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbWliLT5sZW5ndGg7IGkrKykgeworCQlSRUdfUkQoc21pLCBSVEw4MzY3X01JQl9DT1VOVEVSX1JFRyhvZmZzZXQgLSBpKSwgJmRhdGEpOworCQltaWJ2YWx1ZSA9IChtaWJ2YWx1ZSA8PCAxNikgfCAoZGF0YSAmIDB4RkZGRik7CisJfQorCisJKnZhbCA9IG1pYnZhbHVlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjdfZ2V0X3ZsYW5fNGsoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIHUzMiB2aWQsCisJCQkJc3RydWN0IHJ0bDgzNjZfdmxhbl80ayAqdmxhbjRrKQoreworCXUzMiBkYXRhW1JUTDgzNjdfVEFfVkxBTl9EQVRBX1NJWkVdOworCWludCBlcnI7CisJaW50IGk7CisKKwltZW1zZXQodmxhbjRrLCAnXDAnLCBzaXplb2Yoc3RydWN0IHJ0bDgzNjZfdmxhbl80aykpOworCisJaWYgKHZpZCA+PSBSVEw4MzY3X05VTV9WSURTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIHdyaXRlIFZJRCAqLworCVJFR19XUihzbWksIFJUTDgzNjdfVEFfQUREUl9SRUcsIHZpZCk7CisKKwkvKiB3cml0ZSB0YWJsZSBhY2Nlc3MgY29udHJvbCB3b3JkICovCisJUkVHX1dSKHNtaSwgUlRMODM2N19UQV9DVFJMX1JFRywgUlRMODM2N19UQV9DVFJMX0NWTEFOX1JFQUQpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGF0YSk7IGkrKykKKwkJUkVHX1JEKHNtaSwgUlRMODM2N19UQV9EQVRBX1JFRyhpKSwgJmRhdGFbaV0pOworCisJdmxhbjRrLT52aWQgPSB2aWQ7CisJdmxhbjRrLT5tZW1iZXIgPSAoZGF0YVswXSA+PiBSVEw4MzY3X1RBX1ZMQU5fTUVNQkVSX1NISUZUKSAmCisJCQkgUlRMODM2N19UQV9WTEFOX01FTUJFUl9NQVNLOworCXZsYW40ay0+ZmlkID0gKGRhdGFbMV0gPj4gUlRMODM2N19UQV9WTEFOX0ZJRF9TSElGVCkgJgorCQkgICAgICBSVEw4MzY3X1RBX1ZMQU5fRklEX01BU0s7CisJdmxhbjRrLT51bnRhZyA9IChkYXRhWzJdID4+IFJUTDgzNjdfVEFfVkxBTl9VTlRBRzFfU0hJRlQpICYKKwkJCVJUTDgzNjdfVEFfVkxBTl9VTlRBRzFfTUFTSzsKKwl2bGFuNGstPnVudGFnIHw9ICgoZGF0YVszXSA+PiBSVEw4MzY3X1RBX1ZMQU5fVU5UQUcyX1NISUZUKSAmCisJCQkgIFJUTDgzNjdfVEFfVkxBTl9VTlRBRzJfTUFTSykgPDwgMjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjdfc2V0X3ZsYW5fNGsoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksCisJCQkJY29uc3Qgc3RydWN0IHJ0bDgzNjZfdmxhbl80ayAqdmxhbjRrKQoreworCXUzMiBkYXRhW1JUTDgzNjdfVEFfVkxBTl9EQVRBX1NJWkVdOworCWludCBlcnI7CisJaW50IGk7CisKKwlpZiAodmxhbjRrLT52aWQgPj0gUlRMODM2N19OVU1fVklEUyB8fAorCSAgICB2bGFuNGstPm1lbWJlciA+IFJUTDgzNjdfVEFfVkxBTl9NRU1CRVJfTUFTSyB8fAorCSAgICB2bGFuNGstPnVudGFnID4gUlRMODM2N19VTlRBR19NQVNLIHx8CisJICAgIHZsYW40ay0+ZmlkID4gUlRMODM2N19GSURNQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJZGF0YVswXSA9ICh2bGFuNGstPm1lbWJlciAmIFJUTDgzNjdfVEFfVkxBTl9NRU1CRVJfTUFTSykgPDwKKwkJICBSVEw4MzY3X1RBX1ZMQU5fTUVNQkVSX1NISUZUOworCWRhdGFbMV0gPSAodmxhbjRrLT5maWQgJiBSVEw4MzY3X1RBX1ZMQU5fRklEX01BU0spIDw8CisJCSAgUlRMODM2N19UQV9WTEFOX0ZJRF9TSElGVDsKKwlkYXRhWzJdID0gKHZsYW40ay0+dW50YWcgJiBSVEw4MzY3X1RBX1ZMQU5fVU5UQUcxX01BU0spIDw8CisJCSAgUlRMODM2N19UQV9WTEFOX1VOVEFHMV9TSElGVDsKKwlkYXRhWzNdID0gKCh2bGFuNGstPnVudGFnID4+IDIpICYgUlRMODM2N19UQV9WTEFOX1VOVEFHMl9NQVNLKSA8PAorCQkgIFJUTDgzNjdfVEFfVkxBTl9VTlRBRzJfU0hJRlQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkYXRhKTsgaSsrKQorCQlSRUdfV1Ioc21pLCBSVEw4MzY3X1RBX0RBVEFfUkVHKGkpLCBkYXRhW2ldKTsKKworCS8qIHdyaXRlIFZJRCAqLworCVJFR19XUihzbWksIFJUTDgzNjdfVEFfQUREUl9SRUcsCisJICAgICAgIHZsYW40ay0+dmlkICYgUlRMODM2N19UQV9WTEFOX1ZJRF9NQVNLKTsKKworCS8qIHdyaXRlIHRhYmxlIGFjY2VzcyBjb250cm9sIHdvcmQgKi8KKwlSRUdfV1Ioc21pLCBSVEw4MzY3X1RBX0NUUkxfUkVHLCBSVEw4MzY3X1RBX0NUUkxfQ1ZMQU5fV1JJVEUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2N19nZXRfdmxhbl9tYyhzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwgdTMyIGluZGV4LAorCQkJCXN0cnVjdCBydGw4MzY2X3ZsYW5fbWMgKnZsYW5tYykKK3sKKwl1MzIgZGF0YVtSVEw4MzY3X1ZMQU5fTUNfREFUQV9TSVpFXTsKKwlpbnQgZXJyOworCWludCBpOworCisJbWVtc2V0KHZsYW5tYywgJ1wwJywgc2l6ZW9mKHN0cnVjdCBydGw4MzY2X3ZsYW5fbWMpKTsKKworCWlmIChpbmRleCA+PSBSVEw4MzY3X05VTV9WTEFOUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkYXRhKTsgaSsrKQorCQlSRUdfUkQoc21pLCBSVEw4MzY3X1ZMQU5fTUNfQkFTRShpbmRleCkgKyBpLCAmZGF0YVtpXSk7CisKKwl2bGFubWMtPm1lbWJlciA9IChkYXRhWzBdID4+IFJUTDgzNjdfVkxBTl9NQ19NRU1CRVJfU0hJRlQpICYKKwkJCSBSVEw4MzY3X1ZMQU5fTUNfTUVNQkVSX01BU0s7CisJdmxhbm1jLT5maWQgPSAoZGF0YVsxXSA+PiBSVEw4MzY3X1ZMQU5fTUNfRklEX1NISUZUKSAmCisJCSAgICAgIFJUTDgzNjdfVkxBTl9NQ19GSURfTUFTSzsKKwl2bGFubWMtPnZpZCA9IChkYXRhWzNdID4+IFJUTDgzNjdfVkxBTl9NQ19FVklEX1NISUZUKSAmCisJCSAgICAgIFJUTDgzNjdfVkxBTl9NQ19FVklEX01BU0s7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MzY3X3NldF92bGFuX21jKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLCB1MzIgaW5kZXgsCisJCQkJY29uc3Qgc3RydWN0IHJ0bDgzNjZfdmxhbl9tYyAqdmxhbm1jKQoreworCXUzMiBkYXRhW1JUTDgzNjdfVkxBTl9NQ19EQVRBX1NJWkVdOworCWludCBlcnI7CisJaW50IGk7CisKKwlpZiAoaW5kZXggPj0gUlRMODM2N19OVU1fVkxBTlMgfHwKKwkgICAgdmxhbm1jLT52aWQgPj0gUlRMODM2N19OVU1fVklEUyB8fAorCSAgICB2bGFubWMtPnByaW9yaXR5ID4gUlRMODM2N19QUklPUklUWU1BWCB8fAorCSAgICB2bGFubWMtPm1lbWJlciA+IFJUTDgzNjdfVkxBTl9NQ19NRU1CRVJfTUFTSyB8fAorCSAgICB2bGFubWMtPnVudGFnID4gUlRMODM2N19VTlRBR19NQVNLIHx8CisJICAgIHZsYW5tYy0+ZmlkID4gUlRMODM2N19GSURNQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJZGF0YVswXSA9ICh2bGFubWMtPm1lbWJlciAmIFJUTDgzNjdfVkxBTl9NQ19NRU1CRVJfTUFTSykgPDwKKwkJICBSVEw4MzY3X1ZMQU5fTUNfTUVNQkVSX1NISUZUOworCWRhdGFbMV0gPSAodmxhbm1jLT5maWQgJiBSVEw4MzY3X1ZMQU5fTUNfRklEX01BU0spIDw8CisJCSAgUlRMODM2N19WTEFOX01DX0ZJRF9TSElGVDsKKwlkYXRhWzJdID0gMDsKKwlkYXRhWzNdID0gKHZsYW5tYy0+dmlkICYgUlRMODM2N19WTEFOX01DX0VWSURfTUFTSykgPDwKKwkJICAgUlRMODM2N19WTEFOX01DX0VWSURfU0hJRlQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkYXRhKTsgaSsrKQorCQlSRUdfV1Ioc21pLCBSVEw4MzY3X1ZMQU5fTUNfQkFTRShpbmRleCkgKyBpLCBkYXRhW2ldKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjdfZ2V0X21jX2luZGV4KHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLCBpbnQgcG9ydCwgaW50ICp2YWwpCit7CisJdTMyIGRhdGE7CisJaW50IGVycjsKKworCWlmIChwb3J0ID49IFJUTDgzNjdfTlVNX1BPUlRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCVJFR19SRChzbWksIFJUTDgzNjdfVkxBTl9QVklEX0NUUkxfUkVHKHBvcnQpLCAmZGF0YSk7CisKKwkqdmFsID0gKGRhdGEgPj4gUlRMODM2N19WTEFOX1BWSURfQ1RSTF9TSElGVChwb3J0KSkgJgorCSAgICAgICBSVEw4MzY3X1ZMQU5fUFZJRF9DVFJMX01BU0s7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MzY3X3NldF9tY19pbmRleChzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwgaW50IHBvcnQsIGludCBpbmRleCkKK3sKKwlpZiAocG9ydCA+PSBSVEw4MzY3X05VTV9QT1JUUyB8fCBpbmRleCA+PSBSVEw4MzY3X05VTV9WTEFOUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gcnRsODM2Nl9zbWlfcm13cihzbWksIFJUTDgzNjdfVkxBTl9QVklEX0NUUkxfUkVHKHBvcnQpLAorCQkJCVJUTDgzNjdfVkxBTl9QVklEX0NUUkxfTUFTSyA8PAorCQkJCQlSVEw4MzY3X1ZMQU5fUFZJRF9DVFJMX1NISUZUKHBvcnQpLAorCQkJCShpbmRleCAmIFJUTDgzNjdfVkxBTl9QVklEX0NUUkxfTUFTSykgPDwKKwkJCQkJUlRMODM2N19WTEFOX1BWSURfQ1RSTF9TSElGVChwb3J0KSk7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2N19lbmFibGVfdmxhbihzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwgaW50IGVuYWJsZSkKK3sKKwlyZXR1cm4gcnRsODM2Nl9zbWlfcm13cihzbWksIFJUTDgzNjdfVkxBTl9DVFJMX1JFRywKKwkJCQlSVEw4MzY3X1ZMQU5fQ1RSTF9FTkFCTEUsCisJCQkJKGVuYWJsZSkgPyBSVEw4MzY3X1ZMQU5fQ1RSTF9FTkFCTEUgOiAwKTsKK30KKworc3RhdGljIGludCBydGw4MzY3X2VuYWJsZV92bGFuNGsoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIGludCBlbmFibGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2N19pc192bGFuX3ZhbGlkKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLCB1bnNpZ25lZCB2bGFuKQoreworCXVuc2lnbmVkIG1heCA9IFJUTDgzNjdfTlVNX1ZMQU5TOworCisJaWYgKHNtaS0+dmxhbjRrX2VuYWJsZWQpCisJCW1heCA9IFJUTDgzNjdfTlVNX1ZJRFMgLSAxOworCisJaWYgKHZsYW4gPT0gMCB8fCB2bGFuID49IG1heCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBydGw4MzY3X2VuYWJsZV9wb3J0KHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLCBpbnQgcG9ydCwgaW50IGVuYWJsZSkKK3sKKwlpbnQgZXJyOworCisJUkVHX1dSKHNtaSwgUlRMODM2N19QT1JUX0lTT0xBVElPTl9SRUcocG9ydCksCisJICAgICAgIChlbmFibGUpID8gUlRMODM2N19QT1JUU19BTEwgOiAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjdfc3dfcmVzZXRfbWlicyhzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJCSAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJCSAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSA9IHN3X3RvX3J0bDgzNjZfc21pKGRldik7CisKKwlyZXR1cm4gcnRsODM2Nl9zbWlfcm13cihzbWksIFJUTDgzNjdfTUlCX0NUUkxfUkVHKDApLCAwLAorCQkJCVJUTDgzNjdfTUlCX0NUUkxfR0xPQkFMX1JFU0VUX01BU0spOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjdfc3dfZ2V0X3BvcnRfbGluayhzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJCSAgICBpbnQgcG9ydCwKKwkJCQkgICAgc3RydWN0IHN3aXRjaF9wb3J0X2xpbmsgKmxpbmspCit7CisJc3RydWN0IHJ0bDgzNjZfc21pICpzbWkgPSBzd190b19ydGw4MzY2X3NtaShkZXYpOworCXUzMiBkYXRhID0gMDsKKwl1MzIgc3BlZWQ7CisKKwlpZiAocG9ydCA+PSBSVEw4MzY3X05VTV9QT1JUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlydGw4MzY2X3NtaV9yZWFkX3JlZyhzbWksIFJUTDgzNjdfUE9SVF9TVEFUVVNfUkVHKHBvcnQpLCAmZGF0YSk7CisKKwlsaW5rLT5saW5rID0gISEoZGF0YSAmIFJUTDgzNjdfUE9SVF9TVEFUVVNfTElOSyk7CisJaWYgKCFsaW5rLT5saW5rKQorCQlyZXR1cm4gMDsKKworCWxpbmstPmR1cGxleCA9ICEhKGRhdGEgJiBSVEw4MzY3X1BPUlRfU1RBVFVTX0RVUExFWCk7CisJbGluay0+cnhfZmxvdyA9ICEhKGRhdGEgJiBSVEw4MzY3X1BPUlRfU1RBVFVTX1JYUEFVU0UpOworCWxpbmstPnR4X2Zsb3cgPSAhIShkYXRhICYgUlRMODM2N19QT1JUX1NUQVRVU19UWFBBVVNFKTsKKwlsaW5rLT5hbmVnID0gISEoZGF0YSAmIFJUTDgzNjdfUE9SVF9TVEFUVVNfTldBWSk7CisKKwlzcGVlZCA9IChkYXRhICYgUlRMODM2N19QT1JUX1NUQVRVU19TUEVFRF9NQVNLKTsKKwlzd2l0Y2ggKHNwZWVkKSB7CisJY2FzZSAwOgorCQlsaW5rLT5zcGVlZCA9IFNXSVRDSF9QT1JUX1NQRUVEXzEwOworCQlicmVhazsKKwljYXNlIDE6CisJCWxpbmstPnNwZWVkID0gU1dJVENIX1BPUlRfU1BFRURfMTAwOworCQlicmVhazsKKwljYXNlIDI6CisJCWxpbmstPnNwZWVkID0gU1dJVENIX1BPUlRfU1BFRURfMTAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbGluay0+c3BlZWQgPSBTV0lUQ0hfUE9SVF9TUEVFRF9VTktOT1dOOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MzY3X3N3X2dldF9tYXhfbGVuZ3RoKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkJICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkJICAgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBydGw4MzY2X3NtaSAqc21pID0gc3dfdG9fcnRsODM2Nl9zbWkoZGV2KTsKKwl1MzIgZGF0YTsKKworCXJ0bDgzNjZfc21pX3JlYWRfcmVnKHNtaSwgUlRMODM2N19TV0MwX1JFRywgJmRhdGEpOworCXZhbC0+dmFsdWUuaSA9IChkYXRhICYgUlRMODM2N19TV0MwX01BWF9MRU5HVEhfTUFTSykgPj4KKwkJCVJUTDgzNjdfU1dDMF9NQVhfTEVOR1RIX1NISUZUOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2N19zd19zZXRfbWF4X2xlbmd0aChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJCSAgICAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJCSAgICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSA9IHN3X3RvX3J0bDgzNjZfc21pKGRldik7CisJdTMyIG1heF9sZW47CisKKwlzd2l0Y2ggKHZhbC0+dmFsdWUuaSkgeworCWNhc2UgMDoKKwkJbWF4X2xlbiA9IFJUTDgzNjdfU1dDMF9NQVhfTEVOR1RIXzE1MjI7CisJCWJyZWFrOworCWNhc2UgMToKKwkJbWF4X2xlbiA9IFJUTDgzNjdfU1dDMF9NQVhfTEVOR1RIXzE1MzY7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJbWF4X2xlbiA9IFJUTDgzNjdfU1dDMF9NQVhfTEVOR1RIXzE1NTI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJbWF4X2xlbiA9IFJUTDgzNjdfU1dDMF9NQVhfTEVOR1RIXzE2MDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcnRsODM2Nl9zbWlfcm13cihzbWksIFJUTDgzNjdfU1dDMF9SRUcsCisJCQkgICAgICAgIFJUTDgzNjdfU1dDMF9NQVhfTEVOR1RIX01BU0ssIG1heF9sZW4pOworfQorCisKK3N0YXRpYyBpbnQgcnRsODM2N19zd19yZXNldF9wb3J0X21pYnMoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJCSAgICAgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBydGw4MzY2X3NtaSAqc21pID0gc3dfdG9fcnRsODM2Nl9zbWkoZGV2KTsKKwlpbnQgcG9ydDsKKworCXBvcnQgPSB2YWwtPnBvcnRfdmxhbjsKKwlpZiAocG9ydCA+PSBSVEw4MzY3X05VTV9QT1JUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gcnRsODM2Nl9zbWlfcm13cihzbWksIFJUTDgzNjdfTUlCX0NUUkxfUkVHKHBvcnQgLyA4KSwgMCwKKwkJCQlSVEw4MzY3X01JQl9DVFJMX1BPUlRfUkVTRVRfTUFTSyhwb3J0ICUgOCkpOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjdfc3dfZ2V0X3BvcnRfc3RhdHMoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgaW50IHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN3aXRjaF9wb3J0X3N0YXRzICpzdGF0cykKK3sKKwlyZXR1cm4gKHJ0bDgzNjZfc3dfZ2V0X3BvcnRfc3RhdHMoZGV2LCBwb3J0LCBzdGF0cywKKwkJCQlSVEw4MzY3X01JQl9UWEJfSUQsIFJUTDgzNjdfTUlCX1JYQl9JRCkpOworfQorCitzdGF0aWMgc3RydWN0IHN3aXRjaF9hdHRyIHJ0bDgzNjdfZ2xvYmFsc1tdID0geworCXsKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9JTlQsCisJCS5uYW1lID0gImVuYWJsZV92bGFuIiwKKwkJLmRlc2NyaXB0aW9uID0gIkVuYWJsZSBWTEFOIG1vZGUiLAorCQkuc2V0ID0gcnRsODM2Nl9zd19zZXRfdmxhbl9lbmFibGUsCisJCS5nZXQgPSBydGw4MzY2X3N3X2dldF92bGFuX2VuYWJsZSwKKwkJLm1heCA9IDEsCisJCS5vZnMgPSAxCisJfSwgeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX0lOVCwKKwkJLm5hbWUgPSAiZW5hYmxlX3ZsYW40ayIsCisJCS5kZXNjcmlwdGlvbiA9ICJFbmFibGUgVkxBTiA0SyBtb2RlIiwKKwkJLnNldCA9IHJ0bDgzNjZfc3dfc2V0X3ZsYW5fZW5hYmxlLAorCQkuZ2V0ID0gcnRsODM2Nl9zd19nZXRfdmxhbl9lbmFibGUsCisJCS5tYXggPSAxLAorCQkub2ZzID0gMgorCX0sIHsKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9OT1ZBTCwKKwkJLm5hbWUgPSAicmVzZXRfbWlicyIsCisJCS5kZXNjcmlwdGlvbiA9ICJSZXNldCBhbGwgTUlCIGNvdW50ZXJzIiwKKwkJLnNldCA9IHJ0bDgzNjdfc3dfcmVzZXRfbWlicywKKwl9LCB7CisJCS50eXBlID0gU1dJVENIX1RZUEVfSU5ULAorCQkubmFtZSA9ICJtYXhfbGVuZ3RoIiwKKwkJLmRlc2NyaXB0aW9uID0gIkdldC9TZXQgdGhlIG1heGltdW0gbGVuZ3RoIG9mIHZhbGlkIHBhY2tldHMiCisJCQkgICAgICAgIigwOjE1MjIsIDE6MTUzNiwgMjoxNTUyLCAzOjE2MDAwKSIsCisJCS5zZXQgPSBydGw4MzY3X3N3X3NldF9tYXhfbGVuZ3RoLAorCQkuZ2V0ID0gcnRsODM2N19zd19nZXRfbWF4X2xlbmd0aCwKKwkJLm1heCA9IDMsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBzd2l0Y2hfYXR0ciBydGw4MzY3X3BvcnRbXSA9IHsKKwl7CisJCS50eXBlID0gU1dJVENIX1RZUEVfTk9WQUwsCisJCS5uYW1lID0gInJlc2V0X21pYiIsCisJCS5kZXNjcmlwdGlvbiA9ICJSZXNldCBzaW5nbGUgcG9ydCBNSUIgY291bnRlcnMiLAorCQkuc2V0ID0gcnRsODM2N19zd19yZXNldF9wb3J0X21pYnMsCisJfSwgeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX1NUUklORywKKwkJLm5hbWUgPSAibWliIiwKKwkJLmRlc2NyaXB0aW9uID0gIkdldCBNSUIgY291bnRlcnMgZm9yIHBvcnQiLAorCQkubWF4ID0gMzMsCisJCS5zZXQgPSBOVUxMLAorCQkuZ2V0ID0gcnRsODM2Nl9zd19nZXRfcG9ydF9taWIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3dpdGNoX2F0dHIgcnRsODM2N192bGFuW10gPSB7CisJeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX1NUUklORywKKwkJLm5hbWUgPSAiaW5mbyIsCisJCS5kZXNjcmlwdGlvbiA9ICJHZXQgdmxhbiBpbmZvcm1hdGlvbiIsCisJCS5tYXggPSAxLAorCQkuc2V0ID0gTlVMTCwKKwkJLmdldCA9IHJ0bDgzNjZfc3dfZ2V0X3ZsYW5faW5mbywKKwl9LCB7CisJCS50eXBlID0gU1dJVENIX1RZUEVfSU5ULAorCQkubmFtZSA9ICJmaWQiLAorCQkuZGVzY3JpcHRpb24gPSAiR2V0L1NldCB2bGFuIEZJRCIsCisJCS5tYXggPSBSVEw4MzY3X0ZJRE1BWCwKKwkJLnNldCA9IHJ0bDgzNjZfc3dfc2V0X3ZsYW5fZmlkLAorCQkuZ2V0ID0gcnRsODM2Nl9zd19nZXRfdmxhbl9maWQsCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2Rldl9vcHMgcnRsODM2N19zd19vcHMgPSB7CisJLmF0dHJfZ2xvYmFsID0geworCQkuYXR0ciA9IHJ0bDgzNjdfZ2xvYmFscywKKwkJLm5fYXR0ciA9IEFSUkFZX1NJWkUocnRsODM2N19nbG9iYWxzKSwKKwl9LAorCS5hdHRyX3BvcnQgPSB7CisJCS5hdHRyID0gcnRsODM2N19wb3J0LAorCQkubl9hdHRyID0gQVJSQVlfU0laRShydGw4MzY3X3BvcnQpLAorCX0sCisJLmF0dHJfdmxhbiA9IHsKKwkJLmF0dHIgPSBydGw4MzY3X3ZsYW4sCisJCS5uX2F0dHIgPSBBUlJBWV9TSVpFKHJ0bDgzNjdfdmxhbiksCisJfSwKKworCS5nZXRfdmxhbl9wb3J0cyA9IHJ0bDgzNjZfc3dfZ2V0X3ZsYW5fcG9ydHMsCisJLnNldF92bGFuX3BvcnRzID0gcnRsODM2Nl9zd19zZXRfdmxhbl9wb3J0cywKKwkuZ2V0X3BvcnRfcHZpZCA9IHJ0bDgzNjZfc3dfZ2V0X3BvcnRfcHZpZCwKKwkuc2V0X3BvcnRfcHZpZCA9IHJ0bDgzNjZfc3dfc2V0X3BvcnRfcHZpZCwKKwkucmVzZXRfc3dpdGNoID0gcnRsODM2Nl9zd19yZXNldF9zd2l0Y2gsCisJLmdldF9wb3J0X2xpbmsgPSBydGw4MzY3X3N3X2dldF9wb3J0X2xpbmssCisJLmdldF9wb3J0X3N0YXRzID0gcnRsODM2N19zd19nZXRfcG9ydF9zdGF0cywKK307CisKK3N0YXRpYyBpbnQgcnRsODM2N19zd2l0Y2hfaW5pdChzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSkKK3sKKwlzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2ID0gJnNtaS0+c3dfZGV2OworCWludCBlcnI7CisKKwlkZXYtPm5hbWUgPSAiUlRMODM2NyI7CisJZGV2LT5jcHVfcG9ydCA9IFJUTDgzNjdfQ1BVX1BPUlRfTlVNOworCWRldi0+cG9ydHMgPSBSVEw4MzY3X05VTV9QT1JUUzsKKwlkZXYtPnZsYW5zID0gUlRMODM2N19OVU1fVklEUzsKKwlkZXYtPm9wcyA9ICZydGw4MzY3X3N3X29wczsKKwlkZXYtPmFsaWFzID0gZGV2X25hbWUoc21pLT5wYXJlbnQpOworCisJZXJyID0gcmVnaXN0ZXJfc3dpdGNoKGRldiwgTlVMTCk7CisJaWYgKGVycikKKwkJZGV2X2VycihzbWktPnBhcmVudCwgInN3aXRjaCByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDgzNjdfc3dpdGNoX2NsZWFudXAoc3RydWN0IHJ0bDgzNjZfc21pICpzbWkpCit7CisJdW5yZWdpc3Rlcl9zd2l0Y2goJnNtaS0+c3dfZGV2KTsKK30KKworc3RhdGljIGludCBydGw4MzY3X21paV9yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnKQoreworCXN0cnVjdCBydGw4MzY2X3NtaSAqc21pID0gYnVzLT5wcml2OworCXUzMiB2YWwgPSAwOworCWludCBlcnI7CisKKwllcnIgPSBydGw4MzY3X3JlYWRfcGh5X3JlZyhzbWksIGFkZHIsIHJlZywgJnZhbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIDB4ZmZmZjsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2N19taWlfd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWcsIHUxNiB2YWwpCit7CisJc3RydWN0IHJ0bDgzNjZfc21pICpzbWkgPSBidXMtPnByaXY7CisJdTMyIHQ7CisJaW50IGVycjsKKworCWVyciA9IHJ0bDgzNjdfd3JpdGVfcGh5X3JlZyhzbWksIGFkZHIsIHJlZywgdmFsKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogZmx1c2ggd3JpdGUgKi8KKwkodm9pZCkgcnRsODM2N19yZWFkX3BoeV9yZWcoc21pLCBhZGRyLCByZWcsICZ0KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2N19kZXRlY3Qoc3RydWN0IHJ0bDgzNjZfc21pICpzbWkpCit7CisJdTMyIHJ0bF9ubyA9IDA7CisJdTMyIHJ0bF92ZXIgPSAwOworCWNoYXIgKmNoaXBfbmFtZTsKKwlpbnQgcmV0OworCisJcmV0ID0gcnRsODM2Nl9zbWlfcmVhZF9yZWcoc21pLCBSVEw4MzY3X1JUTF9OT19SRUcsICZydGxfbm8pOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihzbWktPnBhcmVudCwgInVuYWJsZSB0byByZWFkIGNoaXAgbnVtYmVyXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlzd2l0Y2ggKHJ0bF9ubykgeworCWNhc2UgUlRMODM2N19SVExfTk9fODM2N1I6CisJCWNoaXBfbmFtZSA9ICI4MzY3UiI7CisJCWJyZWFrOworCWNhc2UgUlRMODM2N19SVExfTk9fODM2N006CisJCWNoaXBfbmFtZSA9ICI4MzY3TSI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoc21pLT5wYXJlbnQsICJ1bmtub3duIGNoaXAgbnVtYmVyICglMDR4KVxuIiwgcnRsX25vKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0ID0gcnRsODM2Nl9zbWlfcmVhZF9yZWcoc21pLCBSVEw4MzY3X1JUTF9WRVJfUkVHLCAmcnRsX3Zlcik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKHNtaS0+cGFyZW50LCAidW5hYmxlIHRvIHJlYWQgY2hpcCB2ZXJzaW9uXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkZXZfaW5mbyhzbWktPnBhcmVudCwgIlJUTCVzIHZlci4gJXUgY2hpcCBmb3VuZFxuIiwKKwkJIGNoaXBfbmFtZSwgcnRsX3ZlciAmIFJUTDgzNjdfUlRMX1ZFUl9NQVNLKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHJ0bDgzNjZfc21pX29wcyBydGw4MzY3X3NtaV9vcHMgPSB7CisJLmRldGVjdAkJPSBydGw4MzY3X2RldGVjdCwKKwkucmVzZXRfY2hpcAk9IHJ0bDgzNjdfcmVzZXRfY2hpcCwKKwkuc2V0dXAJCT0gcnRsODM2N19zZXR1cCwKKworCS5taWlfcmVhZAk9IHJ0bDgzNjdfbWlpX3JlYWQsCisJLm1paV93cml0ZQk9IHJ0bDgzNjdfbWlpX3dyaXRlLAorCisJLmdldF92bGFuX21jCT0gcnRsODM2N19nZXRfdmxhbl9tYywKKwkuc2V0X3ZsYW5fbWMJPSBydGw4MzY3X3NldF92bGFuX21jLAorCS5nZXRfdmxhbl80awk9IHJ0bDgzNjdfZ2V0X3ZsYW5fNGssCisJLnNldF92bGFuXzRrCT0gcnRsODM2N19zZXRfdmxhbl80aywKKwkuZ2V0X21jX2luZGV4CT0gcnRsODM2N19nZXRfbWNfaW5kZXgsCisJLnNldF9tY19pbmRleAk9IHJ0bDgzNjdfc2V0X21jX2luZGV4LAorCS5nZXRfbWliX2NvdW50ZXIgPSBydGw4MzY3X2dldF9taWJfY291bnRlciwKKwkuaXNfdmxhbl92YWxpZAk9IHJ0bDgzNjdfaXNfdmxhbl92YWxpZCwKKwkuZW5hYmxlX3ZsYW4JPSBydGw4MzY3X2VuYWJsZV92bGFuLAorCS5lbmFibGVfdmxhbjRrCT0gcnRsODM2N19lbmFibGVfdmxhbjRrLAorCS5lbmFibGVfcG9ydAk9IHJ0bDgzNjdfZW5hYmxlX3BvcnQsCit9OworCitzdGF0aWMgaW50IHJ0bDgzNjdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaTsKKwlpbnQgZXJyOworCisJc21pID0gcnRsODM2Nl9zbWlfcHJvYmUocGRldik7CisJaWYgKElTX0VSUihzbWkpKQorCQlyZXR1cm4gUFRSX0VSUihzbWkpOworCisJc21pLT5jbGtfZGVsYXkgPSAxNTAwOworCXNtaS0+Y21kX3JlYWQgPSAweGI5OworCXNtaS0+Y21kX3dyaXRlID0gMHhiODsKKwlzbWktPm9wcyA9ICZydGw4MzY3X3NtaV9vcHM7CisJc21pLT5jcHVfcG9ydCA9IFJUTDgzNjdfQ1BVX1BPUlRfTlVNOworCXNtaS0+bnVtX3BvcnRzID0gUlRMODM2N19OVU1fUE9SVFM7CisJc21pLT5udW1fdmxhbl9tYyA9IFJUTDgzNjdfTlVNX1ZMQU5TOworCXNtaS0+bWliX2NvdW50ZXJzID0gcnRsODM2N19taWJfY291bnRlcnM7CisJc21pLT5udW1fbWliX2NvdW50ZXJzID0gQVJSQVlfU0laRShydGw4MzY3X21pYl9jb3VudGVycyk7CisKKwllcnIgPSBydGw4MzY2X3NtaV9pbml0KHNtaSk7CisJaWYgKGVycikKKwkJZ290byBlcnJfZnJlZV9zbWk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBzbWkpOworCisJZXJyID0gcnRsODM2N19zd2l0Y2hfaW5pdChzbWkpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2NsZWFyX2RydmRhdGE7CisKKwlyZXR1cm4gMDsKKworIGVycl9jbGVhcl9kcnZkYXRhOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCXJ0bDgzNjZfc21pX2NsZWFudXAoc21pKTsKKyBlcnJfZnJlZV9zbWk6CisJa2ZyZWUoc21pKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjdfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJ0bDgzNjZfc21pICpzbWkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmIChzbWkpIHsKKwkJcnRsODM2N19zd2l0Y2hfY2xlYW51cChzbWkpOworCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwkJcnRsODM2Nl9zbWlfY2xlYW51cChzbWkpOworCQlrZnJlZShzbWkpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBydGw4MzY3X3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJ0bDgzNjZfc21pICpzbWkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmIChzbWkpCisJCXJ0bDgzNjdfcmVzZXRfY2hpcChzbWkpOworfQorCisjaWZkZWYgQ09ORklHX09GCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBydGw4MzY3X21hdGNoW10gPSB7CisgICAgICAgeyAuY29tcGF0aWJsZSA9ICJyZWFsdGVrLHJ0bDgzNjciIH0sCisgICAgICAge30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgcnRsODM2N19tYXRjaCk7CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcnRsODM2N19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gUlRMODM2N19EUklWRVJfTkFNRSwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorI2lmZGVmIENPTkZJR19PRgorCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIocnRsODM2N19tYXRjaCksCisjZW5kaWYKKwl9LAorCS5wcm9iZQkJPSBydGw4MzY3X3Byb2JlLAorCS5yZW1vdmUJCT0gcnRsODM2N19yZW1vdmUsCisJLnNodXRkb3duCT0gcnRsODM2N19zaHV0ZG93biwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHJ0bDgzNjdfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZydGw4MzY3X2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChydGw4MzY3X21vZHVsZV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHJ0bDgzNjdfbW9kdWxlX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcnRsODM2N19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQocnRsODM2N19tb2R1bGVfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiUmVhbHRlayBSVEw4MzY3IGV0aGVybmV0IHN3aXRjaCBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkdhYm9yIEp1aG9zIDxqdWhvc2dAb3BlbndydC5vcmc+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgUlRMODM2N19EUklWRVJfTkFNRSk7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL25ldC9waHkvcnRsODM2N2IuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9ydGw4MzY3Yi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1OTk3OTEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL25ldC9waHkvcnRsODM2N2IuYwpAQCAtMCwwICsxLDE2NzMgQEAKKy8qCisgKiBQbGF0Zm9ybSBkcml2ZXIgZm9yIHRoZSBSZWFsdGVrIFJUTDgzNjdSLVZCIGV0aGVybmV0IHN3aXRjaGVzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdhYm9yIEp1aG9zIDxqdWhvc2dAb3BlbndydC5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3J0bDgzNjcuaD4KKworI2luY2x1ZGUgInJ0bDgzNjZfc21pLmgiCisKKyNkZWZpbmUgUlRMODM2N0JfUkVTRVRfREVMQVkJMTAwMAkvKiBtc2VjcyovCisKKyNkZWZpbmUgUlRMODM2N0JfUEhZX0FERFJfTUFYCTgKKyNkZWZpbmUgUlRMODM2N0JfUEhZX1JFR19NQVgJMzEKKworI2RlZmluZSBSVEw4MzY3Ql9WSURfTUFTSwkweDNmZmYKKyNkZWZpbmUgUlRMODM2N0JfRklEX01BU0sJMHhmCisjZGVmaW5lIFJUTDgzNjdCX1VOVEFHX01BU0sJMHhmZgorI2RlZmluZSBSVEw4MzY3Ql9NRU1CRVJfTUFTSwkweGZmCisKKyNkZWZpbmUgUlRMODM2N0JfUE9SVF9NSVNDX0NGR19SRUcoX3ApCQkoMHgwMDBlICsgMHgyMCAqIChfcCkpCisjZGVmaW5lICAgUlRMODM2N0JfUE9SVF9NSVNDX0NGR19FR1JFU1NfTU9ERV9TSElGVAk0CisjZGVmaW5lICAgUlRMODM2N0JfUE9SVF9NSVNDX0NGR19FR1JFU1NfTU9ERV9NQVNLCTB4MworI2RlZmluZSAgIFJUTDgzNjdCX1BPUlRfTUlTQ19DRkdfRUdSRVNTX01PREVfT1JJR0lOQUwJMAorI2RlZmluZSAgIFJUTDgzNjdCX1BPUlRfTUlTQ19DRkdfRUdSRVNTX01PREVfS0VFUAkxCisjZGVmaW5lICAgUlRMODM2N0JfUE9SVF9NSVNDX0NGR19FR1JFU1NfTU9ERV9QUkkJMgorI2RlZmluZSAgIFJUTDgzNjdCX1BPUlRfTUlTQ19DRkdfRUdSRVNTX01PREVfUkVBTAkzCisKKyNkZWZpbmUgUlRMODM2N0JfQllQQVNTX0xJTkVfUkFURV9SRUcJCTB4MDNmNworCisjZGVmaW5lIFJUTDgzNjdCX1RBX0NUUkxfUkVHCQkJMHgwNTAwIC8qR09PRCovCisjZGVmaW5lICAgUlRMODM2N0JfVEFfQ1RSTF9TUEFfU0hJRlQJCTgKKyNkZWZpbmUgICBSVEw4MzY3Ql9UQV9DVFJMX1NQQV9NQVNLCQkweDcKKyNkZWZpbmUgICBSVEw4MzY3Ql9UQV9DVFJMX01FVEhPRAkJQklUKDQpLypHT09EKi8KKyNkZWZpbmUgICBSVEw4MzY3Ql9UQV9DVFJMX0NNRF9TSElGVAkJMworI2RlZmluZSAgIFJUTDgzNjdCX1RBX0NUUkxfQ01EX1JFQUQJCTAKKyNkZWZpbmUgICBSVEw4MzY3Ql9UQV9DVFJMX0NNRF9XUklURQkJMQorI2RlZmluZSAgIFJUTDgzNjdCX1RBX0NUUkxfVEFCTEVfU0hJRlQJCTAgLypHT09EKi8KKyNkZWZpbmUgICBSVEw4MzY3Ql9UQV9DVFJMX1RBQkxFX0FDTFJVTEUJMQorI2RlZmluZSAgIFJUTDgzNjdCX1RBX0NUUkxfVEFCTEVfQUNMQUNUCQkyCisjZGVmaW5lICAgUlRMODM2N0JfVEFfQ1RSTF9UQUJMRV9DVkxBTgkJMworI2RlZmluZSAgIFJUTDgzNjdCX1RBX0NUUkxfVEFCTEVfTDIJCTQKKyNkZWZpbmUgICBSVEw4MzY3Ql9UQV9DVFJMX0NWTEFOX1JFQUQgXAorCQkoKFJUTDgzNjdCX1RBX0NUUkxfQ01EX1JFQUQgPDwgUlRMODM2N0JfVEFfQ1RSTF9DTURfU0hJRlQpIHwgXAorCQkgUlRMODM2N0JfVEFfQ1RSTF9UQUJMRV9DVkxBTikKKyNkZWZpbmUgICBSVEw4MzY3Ql9UQV9DVFJMX0NWTEFOX1dSSVRFIFwKKwkJKChSVEw4MzY3Ql9UQV9DVFJMX0NNRF9XUklURSA8PCBSVEw4MzY3Ql9UQV9DVFJMX0NNRF9TSElGVCkgfCBcCisJCSBSVEw4MzY3Ql9UQV9DVFJMX1RBQkxFX0NWTEFOKQorCisjZGVmaW5lIFJUTDgzNjdCX1RBX0FERFJfUkVHCQkJMHgwNTAxLypHT09EKi8KKyNkZWZpbmUgICBSVEw4MzY3Ql9UQV9BRERSX01BU0sJCQkweDNmZmYvKkdPT0QqLworCisjZGVmaW5lIFJUTDgzNjdCX1RBX0xVVF9SRUcJCQkweDA1MDIvKkdPT0QqLworCisjZGVmaW5lIFJUTDgzNjdCX1RBX1dSREFUQV9SRUcoX3gpCQkoMHgwNTEwICsgKF94KSkvKkdPT0QqLworI2RlZmluZSAgIFJUTDgzNjdCX1RBX1ZMQU5fTlVNX1dPUkRTCQkyCisjZGVmaW5lICAgUlRMODM2N0JfVEFfVkxBTl9WSURfTUFTSwkJUlRMODM2N0JfVklEX01BU0sKKyNkZWZpbmUgICBSVEw4MzY3Ql9UQV9WTEFOMF9NRU1CRVJfU0hJRlQJMAorI2RlZmluZSAgIFJUTDgzNjdCX1RBX1ZMQU4wX01FTUJFUl9NQVNLCQlSVEw4MzY3Ql9NRU1CRVJfTUFTSworI2RlZmluZSAgIFJUTDgzNjdCX1RBX1ZMQU4wX1VOVEFHX1NISUZUCQk4CisjZGVmaW5lICAgUlRMODM2N0JfVEFfVkxBTjBfVU5UQUdfTUFTSwkJUlRMODM2N0JfTUVNQkVSX01BU0sKKyNkZWZpbmUgICBSVEw4MzY3Ql9UQV9WTEFOMV9GSURfU0hJRlQJCTAKKyNkZWZpbmUgICBSVEw4MzY3Ql9UQV9WTEFOMV9GSURfTUFTSwkJUlRMODM2N0JfRklEX01BU0sKKworI2RlZmluZSBSVEw4MzY3Ql9UQV9SRERBVEFfUkVHKF94KQkJKDB4MDUyMCArIChfeCkpLypHT09EKi8KKworI2RlZmluZSBSVEw4MzY3Ql9WTEFOX1BWSURfQ1RSTF9SRUcoX3ApCQkoMHgwNzAwICsgKF9wKSAvIDIpIC8qR09PRCovCisjZGVmaW5lIFJUTDgzNjdCX1ZMQU5fUFZJRF9DVFJMX01BU0sJCTB4MWYgLypHT09EKi8KKyNkZWZpbmUgUlRMODM2N0JfVkxBTl9QVklEX0NUUkxfU0hJRlQoX3ApCSg4ICogKChfcCkgJSAyKSkgLypHT09EKi8KKworI2RlZmluZSBSVEw4MzY3Ql9WTEFOX01DX0JBU0UoX3gpCQkoMHgwNzI4ICsgKF94KSAqIDQpIC8qR09PRCovCisjZGVmaW5lICAgUlRMODM2N0JfVkxBTl9NQ19OVU1fV09SRFMJCTQgLypHT09EKi8KKyNkZWZpbmUgICBSVEw4MzY3Ql9WTEFOX01DMF9NRU1CRVJfU0hJRlQJMC8qR09PRCovCisjZGVmaW5lICAgUlRMODM2N0JfVkxBTl9NQzBfTUVNQkVSX01BU0sJCVJUTDgzNjdCX01FTUJFUl9NQVNLLypHT09EKi8KKyNkZWZpbmUgICBSVEw4MzY3Ql9WTEFOX01DMV9GSURfU0hJRlQJCTAvKkdPT0QqLworI2RlZmluZSAgIFJUTDgzNjdCX1ZMQU5fTUMxX0ZJRF9NQVNLCQlSVEw4MzY3Ql9GSURfTUFTSy8qR09PRCovCisjZGVmaW5lICAgUlRMODM2N0JfVkxBTl9NQzNfRVZJRF9TSElGVAkJMC8qR09PRCovCisjZGVmaW5lICAgUlRMODM2N0JfVkxBTl9NQzNfRVZJRF9NQVNLCQlSVEw4MzY3Ql9WSURfTUFTSy8qR09PRCovCisKKyNkZWZpbmUgUlRMODM2N0JfVkxBTl9DVFJMX1JFRwkJCTB4MDdhOCAvKkdPT0QqLworI2RlZmluZSAgIFJUTDgzNjdCX1ZMQU5fQ1RSTF9FTkFCTEUJCUJJVCgwKQorCisjZGVmaW5lIFJUTDgzNjdCX1ZMQU5fSU5HUkVTU19SRUcJCTB4MDdhOSAvKkdPT0QqLworCisjZGVmaW5lIFJUTDgzNjdCX1BPUlRfSVNPTEFUSU9OX1JFRyhfcCkJCSgweDA4YTIgKyAoX3ApKSAvKkdPT0QqLworCisjZGVmaW5lIFJUTDgzNjdCX01JQl9DT1VOVEVSX1JFRyhfeCkJCSgweDEwMDAgKyAoX3gpKQkvKkdPT0QqLworI2RlZmluZSBSVEw4MzY3Ql9NSUJfQ09VTlRFUl9QT1JUX09GRlNFVAkweDAwN2MgLypHT09EKi8KKworI2RlZmluZSBSVEw4MzY3Ql9NSUJfQUREUkVTU19SRUcJCTB4MTAwNCAvKkdPT0QqLworCisjZGVmaW5lIFJUTDgzNjdCX01JQl9DVFJMMF9SRUcoX3gpCQkoMHgxMDA1ICsgKF94KSkgLypHT09EKi8KKyNkZWZpbmUgICBSVEw4MzY3Ql9NSUJfQ1RSTDBfR0xPQkFMX1JFU0VUX01BU0sJQklUKDExKQkvKkdPT0QqLworI2RlZmluZSAgIFJUTDgzNjdCX01JQl9DVFJMMF9RTV9SRVNFVF9NQVNLCUJJVCgxMCkgLypHT09EKi8KKyNkZWZpbmUgICBSVEw4MzY3Ql9NSUJfQ1RSTDBfUE9SVF9SRVNFVF9NQVNLKF9wKSBCSVQoMiArIChfcCkpIC8qR09PRCovCisjZGVmaW5lICAgUlRMODM2N0JfTUlCX0NUUkwwX1JFU0VUX01BU0sJCUJJVCgxKSAvKkdPT0QqLworI2RlZmluZSAgIFJUTDgzNjdCX01JQl9DVFJMMF9CVVNZX01BU0sJCUJJVCgwKSAvKkdPT0QqLworCisjZGVmaW5lIFJUTDgzNjdCX1NXQzBfUkVHCQkJMHgxMjAwLypHT09EKi8KKyNkZWZpbmUgICBSVEw4MzY3Ql9TV0MwX01BWF9MRU5HVEhfU0hJRlQJMTMvKkdPT0QqLworI2RlZmluZSAgIFJUTDgzNjdCX1NXQzBfTUFYX0xFTkdUSChfeCkJCSgoX3gpIDw8IDEzKSAvKkdPT0QqLworI2RlZmluZSAgIFJUTDgzNjdCX1NXQzBfTUFYX0xFTkdUSF9NQVNLCQlSVEw4MzY3Ql9TV0MwX01BWF9MRU5HVEgoMHgzKQorI2RlZmluZSAgIFJUTDgzNjdCX1NXQzBfTUFYX0xFTkdUSF8xNTIyCQlSVEw4MzY3Ql9TV0MwX01BWF9MRU5HVEgoMCkKKyNkZWZpbmUgICBSVEw4MzY3Ql9TV0MwX01BWF9MRU5HVEhfMTUzNgkJUlRMODM2N0JfU1dDMF9NQVhfTEVOR1RIKDEpCisjZGVmaW5lICAgUlRMODM2N0JfU1dDMF9NQVhfTEVOR1RIXzE1NTIJCVJUTDgzNjdCX1NXQzBfTUFYX0xFTkdUSCgyKQorI2RlZmluZSAgIFJUTDgzNjdCX1NXQzBfTUFYX0xFTkdUSF8xNjAwMAlSVEw4MzY3Ql9TV0MwX01BWF9MRU5HVEgoMykKKworI2RlZmluZSBSVEw4MzY3Ql9DSElQX05VTUJFUl9SRUcJCTB4MTMwMC8qR09PRCovCisKKyNkZWZpbmUgUlRMODM2N0JfQ0hJUF9WRVJfUkVHCQkJMHgxMzAxLypHT09EKi8KKyNkZWZpbmUgICBSVEw4MzY3Ql9DSElQX1ZFUl9STFZJRF9TSElGVAkJMTIvKkdPT0QqLworI2RlZmluZSAgIFJUTDgzNjdCX0NISVBfVkVSX1JMVklEX01BU0sJCTB4Zi8qR09PRCovCisjZGVmaW5lICAgUlRMODM2N0JfQ0hJUF9WRVJfTUNJRF9TSElGVAkJOC8qR09PRCovCisjZGVmaW5lICAgUlRMODM2N0JfQ0hJUF9WRVJfTUNJRF9NQVNLCQkweGYvKkdPT0QqLworI2RlZmluZSAgIFJUTDgzNjdCX0NISVBfVkVSX0JPSURfU0hJRlQJCTQvKkdPT0QqLworI2RlZmluZSAgIFJUTDgzNjdCX0NISVBfVkVSX0JPSURfTUFTSwkJMHhmLypHT09EKi8KKyNkZWZpbmUgICBSVEw4MzY3Ql9DSElQX1ZFUl9BRkVfU0hJRlQJCTAvKkdPT0QqLworI2RlZmluZSAgIFJUTDgzNjdCX0NISVBfVkVSX0FGRV9NQVNLCQkweDEvKkdPT0QqLworCisjZGVmaW5lIFJUTDgzNjdCX0NISVBfTU9ERV9SRUcJCQkweDEzMDIKKyNkZWZpbmUgICBSVEw4MzY3Ql9DSElQX01PREVfTUFTSwkJMHg3CisKKyNkZWZpbmUgUlRMODM2N0JfQ0hJUF9ERUJVRzBfUkVHCQkweDEzMDMKKyNkZWZpbmUgICBSVEw4MzY3Ql9ERUJVRzBfU0VMMzMoX3gpCQlCSVQoOCArIChfeCkpCisjZGVmaW5lICAgUlRMODM2N0JfREVCVUcwX0RSSV9PVEhFUgkJQklUKDcpCisjZGVmaW5lICAgUlRMODM2N0JfREVCVUcwX0RSSV9SRyhfeCkJCUJJVCg1ICsgKF94KSkKKyNkZWZpbmUgICBSVEw4MzY3Ql9ERUJVRzBfRFJJKF94KQkJQklUKDMgKyAoX3gpKQorI2RlZmluZSAgIFJUTDgzNjdCX0RFQlVHMF9TTFJfT1RIRVIJCUJJVCgyKQorI2RlZmluZSAgIFJUTDgzNjdCX0RFQlVHMF9TTFIoX3gpCQlCSVQoX3gpCisKKyNkZWZpbmUgUlRMODM2N0JfQ0hJUF9ERUJVRzFfUkVHCQkweDEzMDQKKyNkZWZpbmUgICBSVEw4MzY3Ql9ERUJVRzFfRE5fTUFTSyhfeCkJCVwKKwkgICAgR0VOTUFTSyg2ICsgKF94KSo4LCA0ICsgKF94KSo4KQorI2RlZmluZSAgIFJUTDgzNjdCX0RFQlVHMV9ETl9TSElGVChfeCkJCSg0ICsgKF94KSAqIDgpCisjZGVmaW5lICAgUlRMODM2N0JfREVCVUcxX0RQX01BU0soX3gpCQlcCisJICAgIEdFTk1BU0soMiArIChfeCkgKiA4LCAoX3gpICogOCkKKyNkZWZpbmUgICBSVEw4MzY3Ql9ERUJVRzFfRFBfU0hJRlQoX3gpCQkoKF94KSAqIDgpCisKKyNkZWZpbmUgUlRMODM2N0JfQ0hJUF9ERUJVRzJfUkVHCQkweDEzZTIKKyNkZWZpbmUgICBSVEw4MzY3Ql9ERUJVRzJfUkcyX0ROX01BU0sJCUdFTk1BU0soOCwgNikKKyNkZWZpbmUgICBSVEw4MzY3Ql9ERUJVRzJfUkcyX0ROX1NISUZUCQk2CisjZGVmaW5lICAgUlRMODM2N0JfREVCVUcyX1JHMl9EUF9NQVNLCQlHRU5NQVNLKDUsIDMpCisjZGVmaW5lICAgUlRMODM2N0JfREVCVUcyX1JHMl9EUF9TSElGVAkJMworI2RlZmluZSAgIFJUTDgzNjdCX0RFQlVHMl9EUklfRVhUMl9SRwkJQklUKDIpCisjZGVmaW5lICAgUlRMODM2N0JfREVCVUcyX0RSSV9FWFQyCQlCSVQoMSkKKyNkZWZpbmUgICBSVEw4MzY3Ql9ERUJVRzJfU0xSX0VYVDIJCUJJVCgwKQorCisjZGVmaW5lIFJUTDgzNjdCX0RJU19SRUcJCQkweDEzMDUKKyNkZWZpbmUgICBSVEw4MzY3Ql9ESVNfU0tJUF9NSUlfUlhFUihfeCkJQklUKDEyICsgKF94KSkKKyNkZWZpbmUgICBSVEw4MzY3Ql9ESVNfUkdNSUlfU0hJRlQoX3gpCQkoNCAqIChfeCkpCisjZGVmaW5lICAgUlRMODM2N0JfRElTX1JHTUlJX01BU0sJCTB4NworCisjZGVmaW5lIFJUTDgzNjdCX0RJUzJfUkVHCQkJMHgxM2MzCisjZGVmaW5lICAgUlRMODM2N0JfRElTMl9TS0lQX01JSV9SWEVSX1NISUZUCTQKKyNkZWZpbmUgICBSVEw4MzY3Ql9ESVMyX1NLSVBfTUlJX1JYRVIJCTB4MTAKKyNkZWZpbmUgICBSVEw4MzY3Ql9ESVMyX1JHTUlJX1NISUZUCQkwCisjZGVmaW5lICAgUlRMODM2N0JfRElTMl9SR01JSV9NQVNLCQkweGYKKworI2RlZmluZSBSVEw4MzY3Ql9FWFRfUkdNWEZfUkVHKF94KQkJXAorCSAgKChfeCkgPT0gMiA/IDB4MTNjNSA6IDB4MTMwNiArIChfeCkpCisjZGVmaW5lICAgUlRMODM2N0JfRVhUX1JHTVhGX0RVTU1ZMF9TSElGVAk1CisjZGVmaW5lICAgUlRMODM2N0JfRVhUX1JHTVhGX0RVTU1ZMF9NQVNLCTB4N2ZmCisjZGVmaW5lICAgUlRMODM2N0JfRVhUX1JHTVhGX1RYREVMQVlfU0hJRlQJMworI2RlZmluZSAgIFJUTDgzNjdCX0VYVF9SR01YRl9UWERFTEFZX01BU0sJMQorI2RlZmluZSAgIFJUTDgzNjdCX0VYVF9SR01YRl9SWERFTEFZX01BU0sJMHg3CisKKyNkZWZpbmUgUlRMODM2N0JfRElfRk9SQ0VfUkVHKF94KQkJXAorCSAgKChfeCkgPT0gMiA/IDB4MTNjNCA6IDB4MTMxMCArIChfeCkpCisjZGVmaW5lICAgUlRMODM2N0JfRElfRk9SQ0VfTU9ERQkJQklUKDEyKQorI2RlZmluZSAgIFJUTDgzNjdCX0RJX0ZPUkNFX05XQVkJCUJJVCg3KQorI2RlZmluZSAgIFJUTDgzNjdCX0RJX0ZPUkNFX1RYUEFVU0UJCUJJVCg2KQorI2RlZmluZSAgIFJUTDgzNjdCX0RJX0ZPUkNFX1JYUEFVU0UJCUJJVCg1KQorI2RlZmluZSAgIFJUTDgzNjdCX0RJX0ZPUkNFX0xJTksJCUJJVCg0KQorI2RlZmluZSAgIFJUTDgzNjdCX0RJX0ZPUkNFX0RVUExFWAkJQklUKDIpCisjZGVmaW5lICAgUlRMODM2N0JfRElfRk9SQ0VfU1BFRURfTUFTSwkJMworI2RlZmluZSAgIFJUTDgzNjdCX0RJX0ZPUkNFX1NQRUVEXzEwCQkwCisjZGVmaW5lICAgUlRMODM2N0JfRElfRk9SQ0VfU1BFRURfMTAwCQkxCisjZGVmaW5lICAgUlRMODM2N0JfRElfRk9SQ0VfU1BFRURfMTAwMAkJMgorCisjZGVmaW5lIFJUTDgzNjdCX01BQ19GT1JDRV9SRUcoX3gpCQkoMHgxMzEyICsgKF94KSkKKworI2RlZmluZSBSVEw4MzY3Ql9DSElQX1JFU0VUX1JFRwkJCTB4MTMyMiAvKkdPT0QqLworI2RlZmluZSAgIFJUTDgzNjdCX0NISVBfUkVTRVRfU1cJCUJJVCgxKSAvKkdPT0QqLworI2RlZmluZSAgIFJUTDgzNjdCX0NISVBfUkVTRVRfSFcJCUJJVCgwKSAvKkdPT0QqLworCisjZGVmaW5lIFJUTDgzNjdCX1BPUlRfU1RBVFVTX1JFRyhfcCkJCSgweDEzNTIgKyAoX3ApKSAvKkdPT0QqLworI2RlZmluZSAgIFJUTDgzNjdCX1BPUlRfU1RBVFVTX0VOXzEwMDBfU1BJCUJJVCgxMSkgLypHT09EKi8KKyNkZWZpbmUgICBSVEw4MzY3Ql9QT1JUX1NUQVRVU19FTl8xMDBfU1BJCUJJVCgxMCkvKkdPT0QqLworI2RlZmluZSAgIFJUTDgzNjdCX1BPUlRfU1RBVFVTX05XQVlfRkFVTFQJQklUKDkpLypHT09EKi8KKyNkZWZpbmUgICBSVEw4MzY3Ql9QT1JUX1NUQVRVU19MSU5LX01BU1RFUglCSVQoOCkvKkdPT0QqLworI2RlZmluZSAgIFJUTDgzNjdCX1BPUlRfU1RBVFVTX05XQVkJCUJJVCg3KS8qR09PRCovCisjZGVmaW5lICAgUlRMODM2N0JfUE9SVF9TVEFUVVNfVFhQQVVTRQkJQklUKDYpLypHT09EKi8KKyNkZWZpbmUgICBSVEw4MzY3Ql9QT1JUX1NUQVRVU19SWFBBVVNFCQlCSVQoNSkvKkdPT0QqLworI2RlZmluZSAgIFJUTDgzNjdCX1BPUlRfU1RBVFVTX0xJTksJCUJJVCg0KS8qR09PRCovCisjZGVmaW5lICAgUlRMODM2N0JfUE9SVF9TVEFUVVNfRFVQTEVYCQlCSVQoMikvKkdPT0QqLworI2RlZmluZSAgIFJUTDgzNjdCX1BPUlRfU1RBVFVTX1NQRUVEX01BU0sJMHgwMDAzLypHT09EKi8KKyNkZWZpbmUgICBSVEw4MzY3Ql9QT1JUX1NUQVRVU19TUEVFRF8xMAkJMC8qR09PRCovCisjZGVmaW5lICAgUlRMODM2N0JfUE9SVF9TVEFUVVNfU1BFRURfMTAwCTEvKkdPT0QqLworI2RlZmluZSAgIFJUTDgzNjdCX1BPUlRfU1RBVFVTX1NQRUVEXzEwMDAJMi8qR09PRCovCisKKyNkZWZpbmUgUlRMODM2N0JfUlRMX01BR0lDX0lEX1JFRwkJMHgxM2MyCisjZGVmaW5lICAgUlRMODM2N0JfUlRMX01BR0lDX0lEX1ZBTAkJMHgwMjQ5CisKKyNkZWZpbmUgUlRMODM2N0JfSUFfQ1RSTF9SRUcJCQkweDFmMDAKKyNkZWZpbmUgICBSVEw4MzY3Ql9JQV9DVFJMX1JXKF94KQkJKChfeCkgPDwgMSkKKyNkZWZpbmUgICBSVEw4MzY3Ql9JQV9DVFJMX1JXX1JFQUQJCVJUTDgzNjdCX0lBX0NUUkxfUlcoMCkKKyNkZWZpbmUgICBSVEw4MzY3Ql9JQV9DVFJMX1JXX1dSSVRFCQlSVEw4MzY3Ql9JQV9DVFJMX1JXKDEpCisjZGVmaW5lICAgUlRMODM2N0JfSUFfQ1RSTF9DTURfTUFTSwkJQklUKDApCisKKyNkZWZpbmUgUlRMODM2N0JfSUFfU1RBVFVTX1JFRwkJCTB4MWYwMQorI2RlZmluZSAgIFJUTDgzNjdCX0lBX1NUQVRVU19QSFlfQlVTWQkJQklUKDIpCisjZGVmaW5lICAgUlRMODM2N0JfSUFfU1RBVFVTX1NEU19CVVNZCQlCSVQoMSkKKyNkZWZpbmUgICBSVEw4MzY3Ql9JQV9TVEFUVVNfTURYX0JVU1kJCUJJVCgwKQorCisjZGVmaW5lIFJUTDgzNjdCX0lBX0FERFJFU1NfUkVHCQkJMHgxZjAyCisjZGVmaW5lIFJUTDgzNjdCX0lBX1dSSVRFX0RBVEFfUkVHCQkweDFmMDMKKyNkZWZpbmUgUlRMODM2N0JfSUFfUkVBRF9EQVRBX1JFRwkJMHgxZjA0CisKKyNkZWZpbmUgUlRMODM2N0JfSU5URVJOQUxfUEhZX1JFRyhfYSwgX3IpCSgweDIwMDAgKyAzMiAqIChfYSkgKyAoX3IpKQorCisjZGVmaW5lIFJUTDgzNjdCX05VTV9NSUJfQ09VTlRFUlMJNTgKKworI2RlZmluZSBSVEw4MzY3Ql9DUFVfUE9SVF9OVU0JCTUKKyNkZWZpbmUgUlRMODM2N0JfTlVNX1BPUlRTCQk4CisjZGVmaW5lIFJUTDgzNjdCX05VTV9WTEFOUwkJMzIKKyNkZWZpbmUgUlRMODM2N0JfTlVNX1ZJRFMJCTQwOTYKKyNkZWZpbmUgUlRMODM2N0JfUFJJT1JJVFlNQVgJCTcKKyNkZWZpbmUgUlRMODM2N0JfRklETUFYCQkJNworCisjZGVmaW5lIFJUTDgzNjdCX1BPUlRfMAkJCUJJVCgwKQorI2RlZmluZSBSVEw4MzY3Ql9QT1JUXzEJCQlCSVQoMSkKKyNkZWZpbmUgUlRMODM2N0JfUE9SVF8yCQkJQklUKDIpCisjZGVmaW5lIFJUTDgzNjdCX1BPUlRfMwkJCUJJVCgzKQorI2RlZmluZSBSVEw4MzY3Ql9QT1JUXzQJCQlCSVQoNCkKKyNkZWZpbmUgUlRMODM2N0JfUE9SVF9FMAkJQklUKDUpCS8qIEV4dGVybmFsIHBvcnQgMCAqLworI2RlZmluZSBSVEw4MzY3Ql9QT1JUX0UxCQlCSVQoNikJLyogRXh0ZXJuYWwgcG9ydCAxICovCisjZGVmaW5lIFJUTDgzNjdCX1BPUlRfRTIJCUJJVCg3KQkvKiBFeHRlcm5hbCBwb3J0IDIgKi8KKworI2RlZmluZSBSVEw4MzY3Ql9QT1JUU19BTEwJCQkJCVwKKwkoUlRMODM2N0JfUE9SVF8wIHwgUlRMODM2N0JfUE9SVF8xIHwgUlRMODM2N0JfUE9SVF8yIHwJXAorCSBSVEw4MzY3Ql9QT1JUXzMgfCBSVEw4MzY3Ql9QT1JUXzQgfCBSVEw4MzY3Ql9QT1JUX0UwIHwgXAorCSBSVEw4MzY3Ql9QT1JUX0UxIHwgUlRMODM2N0JfUE9SVF9FMikKKworI2RlZmluZSBSVEw4MzY3Ql9QT1JUU19BTExfQlVUX0NQVQkJCQlcCisJKFJUTDgzNjdCX1BPUlRfMCB8IFJUTDgzNjdCX1BPUlRfMSB8IFJUTDgzNjdCX1BPUlRfMiB8CVwKKwkgUlRMODM2N0JfUE9SVF8zIHwgUlRMODM2N0JfUE9SVF80IHwgUlRMODM2N0JfUE9SVF9FMSB8CVwKKwkgUlRMODM2N0JfUE9SVF9FMikKKworc3RydWN0IHJ0bDgzNjdiX2luaXR2YWwgeworCXUxNiByZWc7CisJdTE2IHZhbDsKK307CisKKyNkZWZpbmUgUlRMODM2N0JfTUlCX1JYQl9JRAkJMAkvKiBJZkluT2N0ZXRzICovCisjZGVmaW5lIFJUTDgzNjdCX01JQl9UWEJfSUQJCTI4CS8qIElmT3V0T2N0ZXRzICovCisKK3N0YXRpYyBzdHJ1Y3QgcnRsODM2Nl9taWJfY291bnRlcgorcnRsODM2N2JfbWliX2NvdW50ZXJzW1JUTDgzNjdCX05VTV9NSUJfQ09VTlRFUlNdID0geworCXswLCAgIDAsIDQsICJpZkluT2N0ZXRzIgkJCX0sCisJezAsICAgNCwgMiwgImRvdDNTdGF0c0ZDU0Vycm9ycyIJCX0sCisJezAsICAgNiwgMiwgImRvdDNTdGF0c1N5bWJvbEVycm9ycyIJCX0sCisJezAsICAgOCwgMiwgImRvdDNJblBhdXNlRnJhbWVzIgkJCX0sCisJezAsICAxMCwgMiwgImRvdDNDb250cm9sSW5Vbmtub3duT3Bjb2RlcyIJfSwKKwl7MCwgIDEyLCAyLCAiZXRoZXJTdGF0c0ZyYWdtZW50cyIJCX0sCisJezAsICAxNCwgMiwgImV0aGVyU3RhdHNKYWJiZXJzIgkJCX0sCisJezAsICAxNiwgMiwgImlmSW5VY2FzdFBrdHMiCQkJfSwKKwl7MCwgIDE4LCAyLCAiZXRoZXJTdGF0c0Ryb3BFdmVudHMiCQl9LAorCXswLCAgMjAsIDIsICJpZkluTXVsdGljYXN0UGt0cyIJCQl9LAorCXswLCAgMjIsIDIsICJpZkluQnJvYWRjYXN0UGt0cyIJCQl9LAorCXswLCAgMjQsIDIsICJpbk1sZENoZWNrc3VtRXJyb3IiCQl9LAorCXswLCAgMjYsIDIsICJpbklnbXBDaGVja3N1bUVycm9yIgkJfSwKKwl7MCwgIDI4LCAyLCAiaW5NbGRTcGVjaWZpY1F1ZXJ5IgkJfSwKKwl7MCwgIDMwLCAyLCAiaW5NbGRHZW5lcmFsUXVlcnkiCQkJfSwKKwl7MCwgIDMyLCAyLCAiaW5JZ21wU3BlY2lmaWNRdWVyeSIJCX0sCisJezAsICAzNCwgMiwgImluSWdtcEdlbmVyYWxRdWVyeSIJCX0sCisJezAsICAzNiwgMiwgImluTWxkTGVhdmVzIgkJCX0sCisJezAsICAzOCwgMiwgImluSWdtcExlYXZlcyIJCQl9LAorCisJezAsICA0MCwgNCwgImV0aGVyU3RhdHNPY3RldHMiCQkJfSwKKwl7MCwgIDQ0LCAyLCAiZXRoZXJTdGF0c1VuZGVyU2l6ZVBrdHMiCQl9LAorCXswLCAgNDYsIDIsICJldGhlck92ZXJzaXplU3RhdHMiCQl9LAorCXswLCAgNDgsIDIsICJldGhlclN0YXRzUGt0czY0T2N0ZXRzIgkJfSwKKwl7MCwgIDUwLCAyLCAiZXRoZXJTdGF0c1BrdHM2NXRvMTI3T2N0ZXRzIgl9LAorCXswLCAgNTIsIDIsICJldGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzIgl9LAorCXswLCAgNTQsIDIsICJldGhlclN0YXRzUGt0czI1NnRvNTExT2N0ZXRzIgl9LAorCXswLCAgNTYsIDIsICJldGhlclN0YXRzUGt0czUxMnRvMTAyM09jdGV0cyIJfSwKKwl7MCwgIDU4LCAyLCAiZXRoZXJTdGF0c1BrdHMxMDI0dG8xNTE4T2N0ZXRzIgl9LAorCisJezAsICA2MCwgNCwgImlmT3V0T2N0ZXRzIgkJCX0sCisJezAsICA2NCwgMiwgImRvdDNTdGF0c1NpbmdsZUNvbGxpc2lvbkZyYW1lcyIJfSwKKwl7MCwgIDY2LCAyLCAiZG90M1N0YXRNdWx0aXBsZUNvbGxpc2lvbkZyYW1lcyIJfSwKKwl7MCwgIDY4LCAyLCAiZG90M3NEZWZlcnJlZFRyYW5zbWlzc2lvbnMiCX0sCisJezAsICA3MCwgMiwgImRvdDNTdGF0c0xhdGVDb2xsaXNpb25zIgkJfSwKKwl7MCwgIDcyLCAyLCAiZXRoZXJTdGF0c0NvbGxpc2lvbnMiCQl9LAorCXswLCAgNzQsIDIsICJkb3QzU3RhdHNFeGNlc3NpdmVDb2xsaXNpb25zIgl9LAorCXswLCAgNzYsIDIsICJkb3QzT3V0UGF1c2VGcmFtZXMiCQl9LAorCXswLCAgNzgsIDIsICJpZk91dERpc2NhcmRzIgkJCX0sCisJezAsICA4MCwgMiwgImRvdDFkVHBQb3J0SW5EaXNjYXJkcyIJCX0sCisJezAsICA4MiwgMiwgImlmT3V0VWNhc3RQa3RzIgkJCX0sCisJezAsICA4NCwgMiwgImlmT3V0TXVsdGljYXN0UGt0cyIJCX0sCisJezAsICA4NiwgMiwgImlmT3V0QnJvYWRjYXN0UGt0cyIJCX0sCisJezAsICA4OCwgMiwgIm91dE9hbXBkdVBrdHMiCQkJfSwKKwl7MCwgIDkwLCAyLCAiaW5PYW1wZHVQa3RzIgkJCX0sCisJezAsICA5MiwgMiwgImluSWdtcEpvaW5zU3VjY2VzcyIJCX0sCisJezAsICA5NCwgMiwgImluSWdtcEpvaW5zRmFpbCIJCQl9LAorCXswLCAgOTYsIDIsICJpbk1sZEpvaW5zU3VjY2VzcyIJCQl9LAorCXswLCAgOTgsIDIsICJpbk1sZEpvaW5zRmFpbCIJCQl9LAorCXswLCAxMDAsIDIsICJpblJlcG9ydFN1cHByZXNzaW9uRHJvcCIJCX0sCisJezAsIDEwMiwgMiwgImluTGVhdmVTdXBwcmVzc2lvbkRyb3AiCQl9LAorCXswLCAxMDQsIDIsICJvdXRJZ21wUmVwb3J0cyIJCQl9LAorCXswLCAxMDYsIDIsICJvdXRJZ21wTGVhdmVzIgkJCX0sCisJezAsIDEwOCwgMiwgIm91dElnbXBHZW5lcmFsUXVlcnkiCQl9LAorCXswLCAxMTAsIDIsICJvdXRJZ21wU3BlY2lmaWNRdWVyeSIJCX0sCisJezAsIDExMiwgMiwgIm91dE1sZFJlcG9ydHMiCQkJfSwKKwl7MCwgMTE0LCAyLCAib3V0TWxkTGVhdmVzIgkJCX0sCisJezAsIDExNiwgMiwgIm91dE1sZEdlbmVyYWxRdWVyeSIJCX0sCisJezAsIDExOCwgMiwgIm91dE1sZFNwZWNpZmljUXVlcnkiCQl9LAorCXswLCAxMjAsIDIsICJpbktub3duTXVsdGljYXN0UGt0cyIJCX0sCit9OworCisjZGVmaW5lIFJFR19SRChfc21pLCBfcmVnLCBfdmFsKQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJZXJyID0gcnRsODM2Nl9zbWlfcmVhZF9yZWcoX3NtaSwgX3JlZywgX3ZhbCk7CQlcCisJCWlmIChlcnIpCQkJCQkJXAorCQkJcmV0dXJuIGVycjsJCQkJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFJFR19XUihfc21pLCBfcmVnLCBfdmFsKQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJZXJyID0gcnRsODM2Nl9zbWlfd3JpdGVfcmVnKF9zbWksIF9yZWcsIF92YWwpOwkJXAorCQlpZiAoZXJyKQkJCQkJCVwKKwkJCXJldHVybiBlcnI7CQkJCQlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBSRUdfUk1XKF9zbWksIF9yZWcsIF9tYXNrLCBfdmFsKQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQllcnIgPSBydGw4MzY2X3NtaV9ybXdyKF9zbWksIF9yZWcsIF9tYXNrLCBfdmFsKTsJXAorCQlpZiAoZXJyKQkJCQkJCVwKKwkJCXJldHVybiBlcnI7CQkJCQlcCisJfSB3aGlsZSAoMCkKKworc3RhdGljIGNvbnN0IHN0cnVjdCBydGw4MzY3Yl9pbml0dmFsIHJ0bDgzNjdyX3ZiX2luaXR2YWxzXzBbXSA9IHsKKwl7MHgxQjAzLCAweDA4NzZ9LCB7MHgxMjAwLCAweDdGQzR9LCB7MHgwMzAxLCAweDAwMjZ9LCB7MHgxNzIyLCAweDBFMTR9LAorCXsweDIwNUYsIDB4MDAwMn0sIHsweDIwNTksIDB4MUEwMH0sIHsweDIwNUYsIDB4MDAwMH0sIHsweDIwN0YsIDB4MDAwMn0sCisJezB4MjA3NywgMHgwMDAwfSwgezB4MjA3OCwgMHgwMDAwfSwgezB4MjA3OSwgMHgwMDAwfSwgezB4MjA3QSwgMHgwMDAwfSwKKwl7MHgyMDdCLCAweDAwMDB9LCB7MHgyMDdGLCAweDAwMDB9LCB7MHgyMDVGLCAweDAwMDJ9LCB7MHgyMDUzLCAweDAwMDB9LAorCXsweDIwNTQsIDB4MDAwMH0sIHsweDIwNTUsIDB4MDAwMH0sIHsweDIwNTYsIDB4MDAwMH0sIHsweDIwNTcsIDB4MDAwMH0sCisJezB4MjA1RiwgMHgwMDAwfSwgezB4MTJBNCwgMHgxMTBBfSwgezB4MTJBNiwgMHgxNTBBfSwgezB4MTNGMSwgMHgwMDEzfSwKKwl7MHgxM0Y0LCAweDAwMTB9LCB7MHgxM0Y1LCAweDAwMDB9LCB7MHgwMDE4LCAweDBGMDB9LCB7MHgwMDM4LCAweDBGMDB9LAorCXsweDAwNTgsIDB4MEYwMH0sIHsweDAwNzgsIDB4MEYwMH0sIHsweDAwOTgsIDB4MEYwMH0sIHsweDEyQjYsIDB4MEMwMn0sCisJezB4MTJCNywgMHgwMzBGfSwgezB4MTJCOCwgMHgxMUZGfSwgezB4MTJCQywgMHgwMDA0fSwgezB4MTM2MiwgMHgwMTE1fSwKKwl7MHgxMzYzLCAweDAwMDJ9LCB7MHgxMzYzLCAweDAwMDB9LCB7MHgxMzNGLCAweDAwMzB9LCB7MHgxMzNFLCAweDAwMEV9LAorCXsweDIyMUYsIDB4MDAwN30sIHsweDIyMUUsIDB4MDAyRH0sIHsweDIyMTgsIDB4RjAzMH0sIHsweDIyMUYsIDB4MDAwN30sCisJezB4MjIxRSwgMHgwMDIzfSwgezB4MjIxNiwgMHgwMDA1fSwgezB4MjIxNSwgMHgwMEI5fSwgezB4MjIxOSwgMHgwMDQ0fSwKKwl7MHgyMjE1LCAweDAwQkF9LCB7MHgyMjE5LCAweDAwMjB9LCB7MHgyMjE1LCAweDAwQkJ9LCB7MHgyMjE5LCAweDAwQzF9LAorCXsweDIyMTUsIDB4MDE0OH0sIHsweDIyMTksIDB4MDA5Nn0sIHsweDIyMTUsIDB4MDE2RX0sIHsweDIyMTksIDB4MDAyNn0sCisJezB4MjIxNiwgMHgwMDAwfSwgezB4MjIxNiwgMHgwMDAwfSwgezB4MjIxRSwgMHgwMDJEfSwgezB4MjIxOCwgMHhGMDEwfSwKKwl7MHgyMjFGLCAweDAwMDd9LCB7MHgyMjFFLCAweDAwMjB9LCB7MHgyMjE1LCAweDBEMDB9LCB7MHgyMjFGLCAweDAwMDB9LAorCXsweDIyMUYsIDB4MDAwMH0sIHsweDIyMTcsIDB4MjE2MH0sIHsweDIyMUYsIDB4MDAwMX0sIHsweDIyMTAsIDB4RjI1RX0sCisJezB4MjIxRiwgMHgwMDA3fSwgezB4MjIxRSwgMHgwMDQyfSwgezB4MjIxNSwgMHgwRjAwfSwgezB4MjIxNSwgMHgwRjAwfSwKKwl7MHgyMjE2LCAweDc0MDh9LCB7MHgyMjE1LCAweDBFMDB9LCB7MHgyMjE1LCAweDBGMDB9LCB7MHgyMjE1LCAweDBGMDF9LAorCXsweDIyMTYsIDB4NDAwMH0sIHsweDIyMTUsIDB4MEUwMX0sIHsweDIyMTUsIDB4MEYwMX0sIHsweDIyMTUsIDB4MEYwMn0sCisJezB4MjIxNiwgMHg5NDAwfSwgezB4MjIxNSwgMHgwRTAyfSwgezB4MjIxNSwgMHgwRjAyfSwgezB4MjIxNSwgMHgwRjAzfSwKKwl7MHgyMjE2LCAweDc0MDh9LCB7MHgyMjE1LCAweDBFMDN9LCB7MHgyMjE1LCAweDBGMDN9LCB7MHgyMjE1LCAweDBGMDR9LAorCXsweDIyMTYsIDB4NDAwOH0sIHsweDIyMTUsIDB4MEUwNH0sIHsweDIyMTUsIDB4MEYwNH0sIHsweDIyMTUsIDB4MEYwNX0sCisJezB4MjIxNiwgMHg5NDAwfSwgezB4MjIxNSwgMHgwRTA1fSwgezB4MjIxNSwgMHgwRjA1fSwgezB4MjIxNSwgMHgwRjA2fSwKKwl7MHgyMjE2LCAweDA4MDN9LCB7MHgyMjE1LCAweDBFMDZ9LCB7MHgyMjE1LCAweDBGMDZ9LCB7MHgyMjE1LCAweDBEMDB9LAorCXsweDIyMTUsIDB4MDEwMH0sIHsweDIyMUYsIDB4MDAwMX0sIHsweDIyMTAsIDB4RjA1RX0sIHsweDIyMUYsIDB4MDAwMH0sCisJezB4MjIxNywgMHgyMTAwfSwgezB4MjIxRiwgMHgwMDAwfSwgezB4MjIwRCwgMHgwMDAzfSwgezB4MjIwRSwgMHgwMDE1fSwKKwl7MHgyMjBELCAweDQwMDN9LCB7MHgyMjBFLCAweDAwMDZ9LCB7MHgyMjFGLCAweDAwMDB9LCB7MHgyMjAwLCAweDEzNDB9LAorCXsweDEzM0YsIDB4MDAxMH0sIHsweDEyQTAsIDB4MDA1OH0sIHsweDEyQTEsIDB4MDA1OH0sIHsweDEzM0UsIDB4MDAwRX0sCisJezB4MTMzRiwgMHgwMDMwfSwgezB4MjIxRiwgMHgwMDAwfSwgezB4MjIxMCwgMHgwMTY2fSwgezB4MjIxRiwgMHgwMDAwfSwKKwl7MHgxMzNFLCAweDAwMEV9LCB7MHgxMzNGLCAweDAwMTB9LCB7MHgxMzNGLCAweDAwMzB9LCB7MHgxMzNFLCAweDAwMEV9LAorCXsweDIyMUYsIDB4MDAwNX0sIHsweDIyMDUsIDB4RkZGNn0sIHsweDIyMDYsIDB4MDA4MH0sIHsweDIyMDUsIDB4OEI2RX0sCisJezB4MjIwNiwgMHgwMDAwfSwgezB4MjIwRiwgMHgwMTAwfSwgezB4MjIwNSwgMHg4MDAwfSwgezB4MjIwNiwgMHgwMjgwfSwKKwl7MHgyMjA2LCAweDI4Rjd9LCB7MHgyMjA2LCAweDAwRTB9LCB7MHgyMjA2LCAweEZGRjd9LCB7MHgyMjA2LCAweEEwODB9LAorCXsweDIyMDYsIDB4MDJBRX0sIHsweDIyMDYsIDB4RjYwMn0sIHsweDIyMDYsIDB4MDE1M30sIHsweDIyMDYsIDB4MDIwMX0sCisJezB4MjIwNiwgMHg2NjAyfSwgezB4MjIwNiwgMHg4MEI5fSwgezB4MjIwNiwgMHhFMDhCfSwgezB4MjIwNiwgMHg4Q0UxfSwKKwl7MHgyMjA2LCAweDhCOER9LCB7MHgyMjA2LCAweDFFMDF9LCB7MHgyMjA2LCAweEUxOEJ9LCB7MHgyMjA2LCAweDhFMUV9LAorCXsweDIyMDYsIDB4MDFBMH0sIHsweDIyMDYsIDB4MDBFN30sIHsweDIyMDYsIDB4QUVEQn0sIHsweDIyMDYsIDB4RUVFMH0sCisJezB4MjIwNiwgMHgxMjBFfSwgezB4MjIwNiwgMHhFRUUwfSwgezB4MjIwNiwgMHgxMzAwfSwgezB4MjIwNiwgMHhFRUUwfSwKKwl7MHgyMjA2LCAweDIwMDF9LCB7MHgyMjA2LCAweEVFRTB9LCB7MHgyMjA2LCAweDIxNjZ9LCB7MHgyMjA2LCAweEVFRTB9LAorCXsweDIyMDYsIDB4QzQ2M30sIHsweDIyMDYsIDB4RUVFMH0sIHsweDIyMDYsIDB4QzVFOH0sIHsweDIyMDYsIDB4RUVFMH0sCisJezB4MjIwNiwgMHhDNjk5fSwgezB4MjIwNiwgMHhFRUUwfSwgezB4MjIwNiwgMHhDN0MyfSwgezB4MjIwNiwgMHhFRUUwfSwKKwl7MHgyMjA2LCAweEM4MDF9LCB7MHgyMjA2LCAweEVFRTB9LCB7MHgyMjA2LCAweEM5MTN9LCB7MHgyMjA2LCAweEVFRTB9LAorCXsweDIyMDYsIDB4Q0EzMH0sIHsweDIyMDYsIDB4RUVFMH0sIHsweDIyMDYsIDB4Q0IzRX0sIHsweDIyMDYsIDB4RUVFMH0sCisJezB4MjIwNiwgMHhEQ0UxfSwgezB4MjIwNiwgMHhFRUUwfSwgezB4MjIwNiwgMHhERDAwfSwgezB4MjIwNiwgMHhFRUUyfSwKKwl7MHgyMjA2LCAweDAwMDF9LCB7MHgyMjA2LCAweEVFRTJ9LCB7MHgyMjA2LCAweDAxMDB9LCB7MHgyMjA2LCAweEVFRTR9LAorCXsweDIyMDYsIDB4ODg2MH0sIHsweDIyMDYsIDB4RUVFNH0sIHsweDIyMDYsIDB4ODkwMn0sIHsweDIyMDYsIDB4RUVFNH0sCisJezB4MjIwNiwgMHg4QzAwfSwgezB4MjIwNiwgMHhFRUU0fSwgezB4MjIwNiwgMHg4RDMwfSwgezB4MjIwNiwgMHhFRUVBfSwKKwl7MHgyMjA2LCAweDE0ODB9LCB7MHgyMjA2LCAweEVFRUF9LCB7MHgyMjA2LCAweDE1MDN9LCB7MHgyMjA2LCAweEVFRUF9LAorCXsweDIyMDYsIDB4QzYwMH0sIHsweDIyMDYsIDB4RUVFQX0sIHsweDIyMDYsIDB4QzcwNn0sIHsweDIyMDYsIDB4RUU4NX0sCisJezB4MjIwNiwgMHhFRTAwfSwgezB4MjIwNiwgMHhFRTg1fSwgezB4MjIwNiwgMHhFRjAwfSwgezB4MjIwNiwgMHhFRThCfSwKKwl7MHgyMjA2LCAweDY3NTB9LCB7MHgyMjA2LCAweEVFOEJ9LCB7MHgyMjA2LCAweDY2MzJ9LCB7MHgyMjA2LCAweEVFOEF9LAorCXsweDIyMDYsIDB4RDQ0OH0sIHsweDIyMDYsIDB4RUU4QX0sIHsweDIyMDYsIDB4RDU0OH0sIHsweDIyMDYsIDB4RUU4QX0sCisJezB4MjIwNiwgMHhENjQ5fSwgezB4MjIwNiwgMHhFRThBfSwgezB4MjIwNiwgMHhEN0Y4fSwgezB4MjIwNiwgMHhFRThCfSwKKwl7MHgyMjA2LCAweDg1RTJ9LCB7MHgyMjA2LCAweEVFOEJ9LCB7MHgyMjA2LCAweDg3MDB9LCB7MHgyMjA2LCAweEVFRkZ9LAorCXsweDIyMDYsIDB4RjYwMH0sIHsweDIyMDYsIDB4RUVGRn0sIHsweDIyMDYsIDB4RjdGQ30sIHsweDIyMDYsIDB4MDRGOH0sCisJezB4MjIwNiwgMHhFMDhCfSwgezB4MjIwNiwgMHg4RUFEfSwgezB4MjIwNiwgMHgyMDIzfSwgezB4MjIwNiwgMHhGNjIwfSwKKwl7MHgyMjA2LCAweEU0OEJ9LCB7MHgyMjA2LCAweDhFMDJ9LCB7MHgyMjA2LCAweDI4Nzd9LCB7MHgyMjA2LCAweDAyMjV9LAorCXsweDIyMDYsIDB4QzcwMn0sIHsweDIyMDYsIDB4MjZBMX0sIHsweDIyMDYsIDB4MDI4MX0sIHsweDIyMDYsIDB4QjMwMn0sCisJezB4MjIwNiwgMHg4NDk2fSwgezB4MjIwNiwgMHgwMjAyfSwgezB4MjIwNiwgMHhBMTAyfSwgezB4MjIwNiwgMHgyN0YxfSwKKwl7MHgyMjA2LCAweDAyMjh9LCB7MHgyMjA2LCAweEY5MDJ9LCB7MHgyMjA2LCAweDJBQTB9LCB7MHgyMjA2LCAweDAyODJ9LAorCXsweDIyMDYsIDB4QjhFMH0sIHsweDIyMDYsIDB4OEI4RX0sIHsweDIyMDYsIDB4QUQyMX0sIHsweDIyMDYsIDB4MDhGNn0sCisJezB4MjIwNiwgMHgyMUU0fSwgezB4MjIwNiwgMHg4QjhFfSwgezB4MjIwNiwgMHgwMjAyfSwgezB4MjIwNiwgMHg4MEUwfSwKKwl7MHgyMjA2LCAweDhCOEV9LCB7MHgyMjA2LCAweEFEMjJ9LCB7MHgyMjA2LCAweDA1RjZ9LCB7MHgyMjA2LCAweDIyRTR9LAorCXsweDIyMDYsIDB4OEI4RX0sIHsweDIyMDYsIDB4RTA4Qn0sIHsweDIyMDYsIDB4OEVBRH0sIHsweDIyMDYsIDB4MjMwNX0sCisJezB4MjIwNiwgMHhGNjIzfSwgezB4MjIwNiwgMHhFNDhCfSwgezB4MjIwNiwgMHg4RUUwfSwgezB4MjIwNiwgMHg4QjhFfSwKKwl7MHgyMjA2LCAweEFEMjR9LCB7MHgyMjA2LCAweDA4RjZ9LCB7MHgyMjA2LCAweDI0RTR9LCB7MHgyMjA2LCAweDhCOEV9LAorCXsweDIyMDYsIDB4MDIyN30sIHsweDIyMDYsIDB4NkFFMH0sIHsweDIyMDYsIDB4OEI4RX0sIHsweDIyMDYsIDB4QUQyNX0sCisJezB4MjIwNiwgMHgwNUY2fSwgezB4MjIwNiwgMHgyNUU0fSwgezB4MjIwNiwgMHg4QjhFfSwgezB4MjIwNiwgMHhFMDhCfSwKKwl7MHgyMjA2LCAweDhFQUR9LCB7MHgyMjA2LCAweDI2MEJ9LCB7MHgyMjA2LCAweEY2MjZ9LCB7MHgyMjA2LCAweEU0OEJ9LAorCXsweDIyMDYsIDB4OEUwMn0sIHsweDIyMDYsIDB4ODMwRH0sIHsweDIyMDYsIDB4MDIxRH0sIHsweDIyMDYsIDB4NkJFMH0sCisJezB4MjIwNiwgMHg4QjhFfSwgezB4MjIwNiwgMHhBRDI3fSwgezB4MjIwNiwgMHgwNUY2fSwgezB4MjIwNiwgMHgyN0U0fSwKKwl7MHgyMjA2LCAweDhCOEV9LCB7MHgyMjA2LCAweDAyODF9LCB7MHgyMjA2LCAweDQ0MDJ9LCB7MHgyMjA2LCAweDA0NUN9LAorCXsweDIyMDYsIDB4RkMwNH0sIHsweDIyMDYsIDB4RjhFMH0sIHsweDIyMDYsIDB4OEI4M30sIHsweDIyMDYsIDB4QUQyM30sCisJezB4MjIwNiwgMHgzMEUwfSwgezB4MjIwNiwgMHhFMDIyfSwgezB4MjIwNiwgMHhFMUUwfSwgezB4MjIwNiwgMHgyMzU5fSwKKwl7MHgyMjA2LCAweDAyRTB9LCB7MHgyMjA2LCAweDg1RUZ9LCB7MHgyMjA2LCAweEU1ODV9LCB7MHgyMjA2LCAweEVGQUN9LAorCXsweDIyMDYsIDB4MjkwN30sIHsweDIyMDYsIDB4MUYwMX0sIHsweDIyMDYsIDB4OUU1MX0sIHsweDIyMDYsIDB4QUQyOX0sCisJezB4MjIwNiwgMHgyMEUwfSwgezB4MjIwNiwgMHg4QjgzfSwgezB4MjIwNiwgMHhBRDIxfSwgezB4MjIwNiwgMHgwNkUxfSwKKwl7MHgyMjA2LCAweDhCODR9LCB7MHgyMjA2LCAweEFEMjh9LCB7MHgyMjA2LCAweDQyRTB9LCB7MHgyMjA2LCAweDhCODV9LAorCXsweDIyMDYsIDB4QUQyMX0sIHsweDIyMDYsIDB4MDZFMX0sIHsweDIyMDYsIDB4OEI4NH0sIHsweDIyMDYsIDB4QUQyOX0sCisJezB4MjIwNiwgMHgzNkJGfSwgezB4MjIwNiwgMHgzNEJGfSwgezB4MjIwNiwgMHgwMjJDfSwgezB4MjIwNiwgMHgzMUFFfSwKKwl7MHgyMjA2LCAweDJFRTB9LCB7MHgyMjA2LCAweDhCODN9LCB7MHgyMjA2LCAweEFEMjF9LCB7MHgyMjA2LCAweDEwRTB9LAorCXsweDIyMDYsIDB4OEI4NH0sIHsweDIyMDYsIDB4RjYyMH0sIHsweDIyMDYsIDB4RTQ4Qn0sIHsweDIyMDYsIDB4ODRFRX0sCisJezB4MjIwNiwgMHg4QURBfSwgezB4MjIwNiwgMHgwMEVFfSwgezB4MjIwNiwgMHg4QURCfSwgezB4MjIwNiwgMHgwMEUwfSwKKwl7MHgyMjA2LCAweDhCODV9LCB7MHgyMjA2LCAweEFEMjF9LCB7MHgyMjA2LCAweDBDRTB9LCB7MHgyMjA2LCAweDhCODR9LAorCXsweDIyMDYsIDB4RjYyMX0sIHsweDIyMDYsIDB4RTQ4Qn0sIHsweDIyMDYsIDB4ODRFRX0sIHsweDIyMDYsIDB4OEI3Mn0sCisJezB4MjIwNiwgMHhGRkJGfSwgezB4MjIwNiwgMHgzNEMyfSwgezB4MjIwNiwgMHgwMjJDfSwgezB4MjIwNiwgMHgzMUZDfSwKKwl7MHgyMjA2LCAweDA0Rjh9LCB7MHgyMjA2LCAweEZBRUZ9LCB7MHgyMjA2LCAweDY5RTB9LCB7MHgyMjA2LCAweDhCODV9LAorCXsweDIyMDYsIDB4QUQyMX0sIHsweDIyMDYsIDB4NDJFMH0sIHsweDIyMDYsIDB4RTAyMn0sIHsweDIyMDYsIDB4RTFFMH0sCisJezB4MjIwNiwgMHgyMzU4fSwgezB4MjIwNiwgMHhDMDU5fSwgezB4MjIwNiwgMHgwMjFFfSwgezB4MjIwNiwgMHgwMUUxfSwKKwl7MHgyMjA2LCAweDhCNzJ9LCB7MHgyMjA2LCAweDFGMTB9LCB7MHgyMjA2LCAweDlFMkZ9LCB7MHgyMjA2LCAweEU0OEJ9LAorCXsweDIyMDYsIDB4NzJBRH0sIHsweDIyMDYsIDB4MjEyM30sIHsweDIyMDYsIDB4RTE4Qn0sIHsweDIyMDYsIDB4ODRGN30sCisJezB4MjIwNiwgMHgyOUU1fSwgezB4MjIwNiwgMHg4Qjg0fSwgezB4MjIwNiwgMHhBQzI3fSwgezB4MjIwNiwgMHgxMEFDfSwKKwl7MHgyMjA2LCAweDI2MDV9LCB7MHgyMjA2LCAweDAyMDV9LCB7MHgyMjA2LCAweDIzQUV9LCB7MHgyMjA2LCAweDE2MDJ9LAorCXsweDIyMDYsIDB4MDUzNX0sIHsweDIyMDYsIDB4MDI4Mn0sIHsweDIyMDYsIDB4MzBBRX0sIHsweDIyMDYsIDB4MEUwMn0sCisJezB4MjIwNiwgMHgwNTZBfSwgezB4MjIwNiwgMHgwMjgyfSwgezB4MjIwNiwgMHg3NUFFfSwgezB4MjIwNiwgMHgwNjAyfSwKKwl7MHgyMjA2LCAweDA0REN9LCB7MHgyMjA2LCAweDAyODJ9LCB7MHgyMjA2LCAweDA0RUZ9LCB7MHgyMjA2LCAweDk2RkV9LAorCXsweDIyMDYsIDB4RkMwNH0sIHsweDIyMDYsIDB4RjhGOX0sIHsweDIyMDYsIDB4RTA4Qn0sIHsweDIyMDYsIDB4ODdBRH0sCisJezB4MjIwNiwgMHgyMzIxfSwgezB4MjIwNiwgMHhFMEVBfSwgezB4MjIwNiwgMHgxNEUxfSwgezB4MjIwNiwgMHhFQTE1fSwKKwl7MHgyMjA2LCAweEFEMjZ9LCB7MHgyMjA2LCAweDE4RjZ9LCB7MHgyMjA2LCAweDI3RTR9LCB7MHgyMjA2LCAweEVBMTR9LAorCXsweDIyMDYsIDB4RTVFQX0sIHsweDIyMDYsIDB4MTVGNn0sIHsweDIyMDYsIDB4MjZFNH0sIHsweDIyMDYsIDB4RUExNH0sCisJezB4MjIwNiwgMHhFNUVBfSwgezB4MjIwNiwgMHgxNUY3fSwgezB4MjIwNiwgMHgyN0U0fSwgezB4MjIwNiwgMHhFQTE0fSwKKwl7MHgyMjA2LCAweEU1RUF9LCB7MHgyMjA2LCAweDE1RkR9LCB7MHgyMjA2LCAweEZDMDR9LCB7MHgyMjA2LCAweEY4Rjl9LAorCXsweDIyMDYsIDB4RTA4Qn0sIHsweDIyMDYsIDB4ODdBRH0sIHsweDIyMDYsIDB4MjMzQX0sIHsweDIyMDYsIDB4QUQyMn0sCisJezB4MjIwNiwgMHgzN0UwfSwgezB4MjIwNiwgMHhFMDIwfSwgezB4MjIwNiwgMHhFMUUwfSwgezB4MjIwNiwgMHgyMUFDfSwKKwl7MHgyMjA2LCAweDIxMkV9LCB7MHgyMjA2LCAweEUwRUF9LCB7MHgyMjA2LCAweDE0RTF9LCB7MHgyMjA2LCAweEVBMTV9LAorCXsweDIyMDYsIDB4RjYyN30sIHsweDIyMDYsIDB4RTRFQX0sIHsweDIyMDYsIDB4MTRFNX0sIHsweDIyMDYsIDB4RUExNX0sCisJezB4MjIwNiwgMHhFMkVBfSwgezB4MjIwNiwgMHgxMkUzfSwgezB4MjIwNiwgMHhFQTEzfSwgezB4MjIwNiwgMHg1QThGfSwKKwl7MHgyMjA2LCAweDZBMjB9LCB7MHgyMjA2LCAweEU2RUF9LCB7MHgyMjA2LCAweDEyRTd9LCB7MHgyMjA2LCAweEVBMTN9LAorCXsweDIyMDYsIDB4RjcyNn0sIHsweDIyMDYsIDB4RTRFQX0sIHsweDIyMDYsIDB4MTRFNX0sIHsweDIyMDYsIDB4RUExNX0sCisJezB4MjIwNiwgMHhGNzI3fSwgezB4MjIwNiwgMHhFNEVBfSwgezB4MjIwNiwgMHgxNEU1fSwgezB4MjIwNiwgMHhFQTE1fSwKKwl7MHgyMjA2LCAweEZERkN9LCB7MHgyMjA2LCAweDA0Rjh9LCB7MHgyMjA2LCAweEY5RTB9LCB7MHgyMjA2LCAweDhCODd9LAorCXsweDIyMDYsIDB4QUQyM30sIHsweDIyMDYsIDB4MzhBRH0sIHsweDIyMDYsIDB4MjEzNX0sIHsweDIyMDYsIDB4RTBFMH0sCisJezB4MjIwNiwgMHgyMEUxfSwgezB4MjIwNiwgMHhFMDIxfSwgezB4MjIwNiwgMHhBQzIxfSwgezB4MjIwNiwgMHgyQ0UwfSwKKwl7MHgyMjA2LCAweEVBMTR9LCB7MHgyMjA2LCAweEUxRUF9LCB7MHgyMjA2LCAweDE1RjZ9LCB7MHgyMjA2LCAweDI3RTR9LAorCXsweDIyMDYsIDB4RUExNH0sIHsweDIyMDYsIDB4RTVFQX0sIHsweDIyMDYsIDB4MTVFMn0sIHsweDIyMDYsIDB4RUExMn0sCisJezB4MjIwNiwgMHhFM0VBfSwgezB4MjIwNiwgMHgxMzVBfSwgezB4MjIwNiwgMHg4RkU2fSwgezB4MjIwNiwgMHhFQTEyfSwKKwl7MHgyMjA2LCAweEU3RUF9LCB7MHgyMjA2LCAweDEzRjd9LCB7MHgyMjA2LCAweDI2RTR9LCB7MHgyMjA2LCAweEVBMTR9LAorCXsweDIyMDYsIDB4RTVFQX0sIHsweDIyMDYsIDB4MTVGN30sIHsweDIyMDYsIDB4MjdFNH0sIHsweDIyMDYsIDB4RUExNH0sCisJezB4MjIwNiwgMHhFNUVBfSwgezB4MjIwNiwgMHgxNUZEfSwgezB4MjIwNiwgMHhGQzA0fSwgezB4MjIwNiwgMHhGOEZBfSwKKwl7MHgyMjA2LCAweEVGNjl9LCB7MHgyMjA2LCAweEUwOEJ9LCB7MHgyMjA2LCAweDg2QUR9LCB7MHgyMjA2LCAweDIxNDZ9LAorCXsweDIyMDYsIDB4RTBFMH0sIHsweDIyMDYsIDB4MjJFMX0sIHsweDIyMDYsIDB4RTAyM30sIHsweDIyMDYsIDB4NThDMH0sCisJezB4MjIwNiwgMHg1OTAyfSwgezB4MjIwNiwgMHgxRTAxfSwgezB4MjIwNiwgMHhFMThCfSwgezB4MjIwNiwgMHg2NTFGfSwKKwl7MHgyMjA2LCAweDEwOUV9LCB7MHgyMjA2LCAweDMzRTR9LCB7MHgyMjA2LCAweDhCNjV9LCB7MHgyMjA2LCAweEFEMjF9LAorCXsweDIyMDYsIDB4MjJBRH0sIHsweDIyMDYsIDB4MjcyQX0sIHsweDIyMDYsIDB4RDQwMH0sIHsweDIyMDYsIDB4MDFCRn0sCisJezB4MjIwNiwgMHgzNEYyfSwgezB4MjIwNiwgMHgwMjJDfSwgezB4MjIwNiwgMHhBMkJGfSwgezB4MjIwNiwgMHgzNEY1fSwKKwl7MHgyMjA2LCAweDAyMkN9LCB7MHgyMjA2LCAweEUwRTB9LCB7MHgyMjA2LCAweDhCNjd9LCB7MHgyMjA2LCAweDFCMTB9LAorCXsweDIyMDYsIDB4QUExNH0sIHsweDIyMDYsIDB4RTE4Qn0sIHsweDIyMDYsIDB4NjYwRH0sIHsweDIyMDYsIDB4MTQ1OX0sCisJezB4MjIwNiwgMHgwRkFFfSwgezB4MjIwNiwgMHgwNUUxfSwgezB4MjIwNiwgMHg4QjY2fSwgezB4MjIwNiwgMHg1OTBGfSwKKwl7MHgyMjA2LCAweEJGODV9LCB7MHgyMjA2LCAweDYxMDJ9LCB7MHgyMjA2LCAweDJDQTJ9LCB7MHgyMjA2LCAweEVGOTZ9LAorCXsweDIyMDYsIDB4RkVGQ30sIHsweDIyMDYsIDB4MDRGOH0sIHsweDIyMDYsIDB4RjlGQX0sIHsweDIyMDYsIDB4RkJFRn0sCisJezB4MjIwNiwgMHg3OUUyfSwgezB4MjIwNiwgMHg4QUQyfSwgezB4MjIwNiwgMHhBQzE5fSwgezB4MjIwNiwgMHgyREUwfSwKKwl7MHgyMjA2LCAweEUwMzZ9LCB7MHgyMjA2LCAweEUxRTB9LCB7MHgyMjA2LCAweDM3RUZ9LCB7MHgyMjA2LCAweDMxMUZ9LAorCXsweDIyMDYsIDB4MzI1Qn0sIHsweDIyMDYsIDB4MDE5RX0sIHsweDIyMDYsIDB4MUY3QX0sIHsweDIyMDYsIDB4MDE1OX0sCisJezB4MjIwNiwgMHgwMTlGfSwgezB4MjIwNiwgMHgwQUJGfSwgezB4MjIwNiwgMHgzNDhFfSwgezB4MjIwNiwgMHgwMjJDfSwKKwl7MHgyMjA2LCAweDMxRjZ9LCB7MHgyMjA2LCAweDA2QUV9LCB7MHgyMjA2LCAweDBGRjZ9LCB7MHgyMjA2LCAweDAzMDJ9LAorCXsweDIyMDYsIDB4MDQ3MH0sIHsweDIyMDYsIDB4RjcwM30sIHsweDIyMDYsIDB4RjcwNn0sIHsweDIyMDYsIDB4QkYzNH0sCisJezB4MjIwNiwgMHg5MzAyfSwgezB4MjIwNiwgMHgyQzMxfSwgezB4MjIwNiwgMHhBQzFBfSwgezB4MjIwNiwgMHgyNUUwfSwKKwl7MHgyMjA2LCAweEUwMjJ9LCB7MHgyMjA2LCAweEUxRTB9LCB7MHgyMjA2LCAweDIzRUZ9LCB7MHgyMjA2LCAweDMwMER9LAorCXsweDIyMDYsIDB4MzExRn0sIHsweDIyMDYsIDB4MzI1Qn0sIHsweDIyMDYsIDB4MDI5RX0sIHsweDIyMDYsIDB4MTU3QX0sCisJezB4MjIwNiwgMHgwMjU4fSwgezB4MjIwNiwgMHhDNEEwfSwgezB4MjIwNiwgMHgwNDA4fSwgezB4MjIwNiwgMHhCRjM0fSwKKwl7MHgyMjA2LCAweDlFMDJ9LCB7MHgyMjA2LCAweDJDMzF9LCB7MHgyMjA2LCAweEFFMDZ9LCB7MHgyMjA2LCAweEJGMzR9LAorCXsweDIyMDYsIDB4OUMwMn0sIHsweDIyMDYsIDB4MkMzMX0sIHsweDIyMDYsIDB4QUMxQn0sIHsweDIyMDYsIDB4NEFFMH0sCisJezB4MjIwNiwgMHhFMDEyfSwgezB4MjIwNiwgMHhFMUUwfSwgezB4MjIwNiwgMHgxM0VGfSwgezB4MjIwNiwgMHgzMDBEfSwKKwl7MHgyMjA2LCAweDMzMUZ9LCB7MHgyMjA2LCAweDMyNUJ9LCB7MHgyMjA2LCAweDFDOUV9LCB7MHgyMjA2LCAweDNBRUZ9LAorCXsweDIyMDYsIDB4MzI1Qn0sIHsweDIyMDYsIDB4MUM5Rn0sIHsweDIyMDYsIDB4MDlCRn0sIHsweDIyMDYsIDB4MzQ5OH0sCisJezB4MjIwNiwgMHgwMjJDfSwgezB4MjIwNiwgMHgzMTAyfSwgezB4MjIwNiwgMHg4M0M1fSwgezB4MjIwNiwgMHg1QTAzfSwKKwl7MHgyMjA2LCAweDBEMDN9LCB7MHgyMjA2LCAweDU4MUN9LCB7MHgyMjA2LCAweDFFMjB9LCB7MHgyMjA2LCAweDAyMDd9LAorCXsweDIyMDYsIDB4QTBBMH0sIHsweDIyMDYsIDB4MDAwRX0sIHsweDIyMDYsIDB4MDI4NH0sIHsweDIyMDYsIDB4MTdBRH0sCisJezB4MjIwNiwgMHgxODE3fSwgezB4MjIwNiwgMHhCRjM0fSwgezB4MjIwNiwgMHg5QTAyfSwgezB4MjIwNiwgMHgyQzMxfSwKKwl7MHgyMjA2LCAweEFFMEZ9LCB7MHgyMjA2LCAweEJGMzR9LCB7MHgyMjA2LCAweEM4MDJ9LCB7MHgyMjA2LCAweDJDMzF9LAorCXsweDIyMDYsIDB4QkYzNH0sIHsweDIyMDYsIDB4QzUwMn0sIHsweDIyMDYsIDB4MkMzMX0sIHsweDIyMDYsIDB4MDI4NH0sCisJezB4MjIwNiwgMHg1MkU2fSwgezB4MjIwNiwgMHg4QUQyfSwgezB4MjIwNiwgMHhFRjk3fSwgezB4MjIwNiwgMHhGRkZFfSwKKwl7MHgyMjA2LCAweEZERkN9LCB7MHgyMjA2LCAweDA0Rjh9LCB7MHgyMjA2LCAweEJGMzR9LCB7MHgyMjA2LCAweERBMDJ9LAorCXsweDIyMDYsIDB4MkNFMH0sIHsweDIyMDYsIDB4RTU4QX0sIHsweDIyMDYsIDB4RDNCRn0sIHsweDIyMDYsIDB4MzRENH0sCisJezB4MjIwNiwgMHgwMjJDfSwgezB4MjIwNiwgMHhFMDBDfSwgezB4MjIwNiwgMHgxMTU5fSwgezB4MjIwNiwgMHgwMkUwfSwKKwl7MHgyMjA2LCAweDhBRDN9LCB7MHgyMjA2LCAweDFFMDF9LCB7MHgyMjA2LCAweEU0OEF9LCB7MHgyMjA2LCAweEQzRDF9LAorCXsweDIyMDYsIDB4MDBCRn0sIHsweDIyMDYsIDB4MzREQX0sIHsweDIyMDYsIDB4MDIyQ30sIHsweDIyMDYsIDB4QTJEMX0sCisJezB4MjIwNiwgMHgwMUJGfSwgezB4MjIwNiwgMHgzNEQ0fSwgezB4MjIwNiwgMHgwMjJDfSwgezB4MjIwNiwgMHhBMkJGfSwKKwl7MHgyMjA2LCAweDM0Q0J9LCB7MHgyMjA2LCAweDAyMkN9LCB7MHgyMjA2LCAweEUwRTV9LCB7MHgyMjA2LCAweDhBQ0V9LAorCXsweDIyMDYsIDB4QkY4NX0sIHsweDIyMDYsIDB4NjcwMn0sIHsweDIyMDYsIDB4MkNFMH0sIHsweDIyMDYsIDB4RTU4QX0sCisJezB4MjIwNiwgMHhDRkJGfSwgezB4MjIwNiwgMHg4NTY0fSwgezB4MjIwNiwgMHgwMjJDfSwgezB4MjIwNiwgMHhFMEU1fSwKKwl7MHgyMjA2LCAweDhBRDB9LCB7MHgyMjA2LCAweEJGODV9LCB7MHgyMjA2LCAweDZBMDJ9LCB7MHgyMjA2LCAweDJDRTB9LAorCXsweDIyMDYsIDB4RTU4QX0sIHsweDIyMDYsIDB4RDFGQ30sIHsweDIyMDYsIDB4MDRGOH0sIHsweDIyMDYsIDB4RTE4QX0sCisJezB4MjIwNiwgMHhEMUJGfSwgezB4MjIwNiwgMHg4NTZBfSwgezB4MjIwNiwgMHgwMjJDfSwgezB4MjIwNiwgMHhBMkUxfSwKKwl7MHgyMjA2LCAweDhBRDB9LCB7MHgyMjA2LCAweEJGODV9LCB7MHgyMjA2LCAweDY0MDJ9LCB7MHgyMjA2LCAweDJDQTJ9LAorCXsweDIyMDYsIDB4RTE4QX0sIHsweDIyMDYsIDB4Q0ZCRn0sIHsweDIyMDYsIDB4ODU2N30sIHsweDIyMDYsIDB4MDIyQ30sCisJezB4MjIwNiwgMHhBMkUxfSwgezB4MjIwNiwgMHg4QUNFfSwgezB4MjIwNiwgMHhCRjM0fSwgezB4MjIwNiwgMHhDQjAyfSwKKwl7MHgyMjA2LCAweDJDQTJ9LCB7MHgyMjA2LCAweEUxOEF9LCB7MHgyMjA2LCAweEQzQkZ9LCB7MHgyMjA2LCAweDM0REF9LAorCXsweDIyMDYsIDB4MDIyQ30sIHsweDIyMDYsIDB4QTJFMX0sIHsweDIyMDYsIDB4OEFEM30sIHsweDIyMDYsIDB4MEQxMX0sCisJezB4MjIwNiwgMHhCRjM0fSwgezB4MjIwNiwgMHhENDAyfSwgezB4MjIwNiwgMHgyQ0EyfSwgezB4MjIwNiwgMHhGQzA0fSwKKwl7MHgyMjA2LCAweEY5QTB9LCB7MHgyMjA2LCAweDA0MDV9LCB7MHgyMjA2LCAweEUzOEF9LCB7MHgyMjA2LCAweEQ0QUV9LAorCXsweDIyMDYsIDB4MTNBMH0sIHsweDIyMDYsIDB4MDgwNX0sIHsweDIyMDYsIDB4RTM4QX0sIHsweDIyMDYsIDB4RDVBRX0sCisJezB4MjIwNiwgMHgwQkEwfSwgezB4MjIwNiwgMHgwQzA1fSwgezB4MjIwNiwgMHhFMzhBfSwgezB4MjIwNiwgMHhENkFFfSwKKwl7MHgyMjA2LCAweDAzRTN9LCB7MHgyMjA2LCAweDhBRDd9LCB7MHgyMjA2LCAweEVGMTN9LCB7MHgyMjA2LCAweEJGMzR9LAorCXsweDIyMDYsIDB4Q0IwMn0sIHsweDIyMDYsIDB4MkNBMn0sIHsweDIyMDYsIDB4RUYxM30sIHsweDIyMDYsIDB4MEQxMX0sCisJezB4MjIwNiwgMHhCRjg1fSwgezB4MjIwNiwgMHg2NzAyfSwgezB4MjIwNiwgMHgyQ0EyfSwgezB4MjIwNiwgMHhFRjEzfSwKKwl7MHgyMjA2LCAweDBEMTR9LCB7MHgyMjA2LCAweEJGODV9LCB7MHgyMjA2LCAweDY0MDJ9LCB7MHgyMjA2LCAweDJDQTJ9LAorCXsweDIyMDYsIDB4RUYxM30sIHsweDIyMDYsIDB4MEQxN30sIHsweDIyMDYsIDB4QkY4NX0sIHsweDIyMDYsIDB4NkEwMn0sCisJezB4MjIwNiwgMHgyQ0EyfSwgezB4MjIwNiwgMHhGRDA0fSwgezB4MjIwNiwgMHhGOEUwfSwgezB4MjIwNiwgMHg4Qjg1fSwKKwl7MHgyMjA2LCAweEFEMjd9LCB7MHgyMjA2LCAweDJERTB9LCB7MHgyMjA2LCAweEUwMzZ9LCB7MHgyMjA2LCAweEUxRTB9LAorCXsweDIyMDYsIDB4MzdFMX0sIHsweDIyMDYsIDB4OEI3M30sIHsweDIyMDYsIDB4MUYxMH0sIHsweDIyMDYsIDB4OUUyMH0sCisJezB4MjIwNiwgMHhFNDhCfSwgezB4MjIwNiwgMHg3M0FDfSwgezB4MjIwNiwgMHgyMDBCfSwgezB4MjIwNiwgMHhBQzIxfSwKKwl7MHgyMjA2LCAweDBEQUN9LCB7MHgyMjA2LCAweDI1MEZ9LCB7MHgyMjA2LCAweEFDMjd9LCB7MHgyMjA2LCAweDBFQUV9LAorCXsweDIyMDYsIDB4MEYwMn0sIHsweDIyMDYsIDB4ODRDQ30sIHsweDIyMDYsIDB4QUUwQX0sIHsweDIyMDYsIDB4MDI4NH0sCisJezB4MjIwNiwgMHhEMUFFfSwgezB4MjIwNiwgMHgwNUFFfSwgezB4MjIwNiwgMHgwMzAyfSwgezB4MjIwNiwgMHg4NEQ4fSwKKwl7MHgyMjA2LCAweEZDMDR9LCB7MHgyMjA2LCAweEVFOEJ9LCB7MHgyMjA2LCAweDY4MDB9LCB7MHgyMjA2LCAweDA0MDJ9LAorCXsweDIyMDYsIDB4ODRFNX0sIHsweDIyMDYsIDB4MDI4NX0sIHsweDIyMDYsIDB4MjgwNH0sIHsweDIyMDYsIDB4MDI4NX0sCisJezB4MjIwNiwgMHg0OTA0fSwgezB4MjIwNiwgMHhFRThCfSwgezB4MjIwNiwgMHg2ODAwfSwgezB4MjIwNiwgMHhFRThCfSwKKwl7MHgyMjA2LCAweDY5MDJ9LCB7MHgyMjA2LCAweDA0Rjh9LCB7MHgyMjA2LCAweEY5RTB9LCB7MHgyMjA2LCAweDhCODV9LAorCXsweDIyMDYsIDB4QUQyNn0sIHsweDIyMDYsIDB4MzhEMH0sIHsweDIyMDYsIDB4MEIwMn0sIHsweDIyMDYsIDB4MkI0RH0sCisJezB4MjIwNiwgMHg1ODgyfSwgezB4MjIwNiwgMHg3ODgyfSwgezB4MjIwNiwgMHg5RjJEfSwgezB4MjIwNiwgMHhFMDhCfSwKKwl7MHgyMjA2LCAweDY4RTF9LCB7MHgyMjA2LCAweDhCNjl9LCB7MHgyMjA2LCAweDFGMTB9LCB7MHgyMjA2LCAweDlFQzh9LAorCXsweDIyMDYsIDB4MTBFNH0sIHsweDIyMDYsIDB4OEI2OH0sIHsweDIyMDYsIDB4RTBFMH0sIHsweDIyMDYsIDB4MDBFMX0sCisJezB4MjIwNiwgMHhFMDAxfSwgezB4MjIwNiwgMHhGNzI3fSwgezB4MjIwNiwgMHhFNEUwfSwgezB4MjIwNiwgMHgwMEU1fSwKKwl7MHgyMjA2LCAweEUwMDF9LCB7MHgyMjA2LCAweEUyRTB9LCB7MHgyMjA2LCAweDIwRTN9LCB7MHgyMjA2LCAweEUwMjF9LAorCXsweDIyMDYsIDB4QUQzMH0sIHsweDIyMDYsIDB4RjdGNn0sIHsweDIyMDYsIDB4MjdFNH0sIHsweDIyMDYsIDB4RTAwMH0sCisJezB4MjIwNiwgMHhFNUUwfSwgezB4MjIwNiwgMHgwMUZEfSwgezB4MjIwNiwgMHhGQzA0fSwgezB4MjIwNiwgMHhGOEZBfSwKKwl7MHgyMjA2LCAweEVGNjl9LCB7MHgyMjA2LCAweEUwOEJ9LCB7MHgyMjA2LCAweDg2QUR9LCB7MHgyMjA2LCAweDIyMTJ9LAorCXsweDIyMDYsIDB4RTBFMH0sIHsweDIyMDYsIDB4MTRFMX0sIHsweDIyMDYsIDB4RTAxNX0sIHsweDIyMDYsIDB4QUQyNn0sCisJezB4MjIwNiwgMHg5Q0UxfSwgezB4MjIwNiwgMHg4NUUwfSwgezB4MjIwNiwgMHhCRjg1fSwgezB4MjIwNiwgMHg2RDAyfSwKKwl7MHgyMjA2LCAweDJDQTJ9LCB7MHgyMjA2LCAweEVGOTZ9LCB7MHgyMjA2LCAweEZFRkN9LCB7MHgyMjA2LCAweDA0Rjh9LAorCXsweDIyMDYsIDB4RkFFRn0sIHsweDIyMDYsIDB4NjlFMH0sIHsweDIyMDYsIDB4OEI4Nn0sIHsweDIyMDYsIDB4QUQyMn0sCisJezB4MjIwNiwgMHgwOUUxfSwgezB4MjIwNiwgMHg4NUUxfSwgezB4MjIwNiwgMHhCRjg1fSwgezB4MjIwNiwgMHg2RDAyfSwKKwl7MHgyMjA2LCAweDJDQTJ9LCB7MHgyMjA2LCAweEVGOTZ9LCB7MHgyMjA2LCAweEZFRkN9LCB7MHgyMjA2LCAweDA0NjR9LAorCXsweDIyMDYsIDB4RTQ4Q30sIHsweDIyMDYsIDB4RkRFNH0sIHsweDIyMDYsIDB4ODBDQX0sIHsweDIyMDYsIDB4RTQ4MH0sCisJezB4MjIwNiwgMHg2NkUwfSwgezB4MjIwNiwgMHg4RTcwfSwgezB4MjIwNiwgMHhFMDc2fSwgezB4MjIwNSwgMHhFMTQyfSwKKwl7MHgyMjA2LCAweDA3MDF9LCB7MHgyMjA1LCAweEUxNDB9LCB7MHgyMjA2LCAweDA0MDV9LCB7MHgyMjBGLCAweDAwMDB9LAorCXsweDIyMUYsIDB4MDAwMH0sIHsweDIyMDAsIDB4MTM0MH0sIHsweDEzM0UsIDB4MDAwRX0sIHsweDEzM0YsIDB4MDAxMH0sCisJezB4MTNFQiwgMHgxMUJCfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBydGw4MzY3Yl9pbml0dmFsIHJ0bDgzNjdyX3ZiX2luaXR2YWxzXzFbXSA9IHsKKwl7MHgxQjAzLCAweDA4NzZ9LCB7MHgxMjAwLCAweDdGQzR9LCB7MHgxMzA1LCAweEMwMDB9LCB7MHgxMjFFLCAweDAzQ0F9LAorCXsweDEyMzMsIDB4MDM1Mn0sIHsweDEyMzQsIDB4MDA2NH0sIHsweDEyMzcsIDB4MDA5Nn0sIHsweDEyMzgsIDB4MDA3OH0sCisJezB4MTIzOSwgMHgwMDg0fSwgezB4MTIzQSwgMHgwMDMwfSwgezB4MjA1RiwgMHgwMDAyfSwgezB4MjA1OSwgMHgxQTAwfSwKKwl7MHgyMDVGLCAweDAwMDB9LCB7MHgyMDdGLCAweDAwMDJ9LCB7MHgyMDc3LCAweDAwMDB9LCB7MHgyMDc4LCAweDAwMDB9LAorCXsweDIwNzksIDB4MDAwMH0sIHsweDIwN0EsIDB4MDAwMH0sIHsweDIwN0IsIDB4MDAwMH0sIHsweDIwN0YsIDB4MDAwMH0sCisJezB4MjA1RiwgMHgwMDAyfSwgezB4MjA1MywgMHgwMDAwfSwgezB4MjA1NCwgMHgwMDAwfSwgezB4MjA1NSwgMHgwMDAwfSwKKwl7MHgyMDU2LCAweDAwMDB9LCB7MHgyMDU3LCAweDAwMDB9LCB7MHgyMDVGLCAweDAwMDB9LCB7MHgxMzNGLCAweDAwMzB9LAorCXsweDEzM0UsIDB4MDAwRX0sIHsweDIyMUYsIDB4MDAwNX0sIHsweDIyMDUsIDB4OEI4Nn0sIHsweDIyMDYsIDB4ODAwRX0sCisJezB4MjIxRiwgMHgwMDAwfSwgezB4MTMzRiwgMHgwMDEwfSwgezB4MTJBMywgMHgyMjAwfSwgezB4NjEwNywgMHhFNThCfSwKKwl7MHg2MTAzLCAweEE5NzB9LCB7MHgwMDE4LCAweDBGMDB9LCB7MHgwMDM4LCAweDBGMDB9LCB7MHgwMDU4LCAweDBGMDB9LAorCXsweDAwNzgsIDB4MEYwMH0sIHsweDAwOTgsIDB4MEYwMH0sIHsweDEzM0YsIDB4MDAzMH0sIHsweDEzM0UsIDB4MDAwRX0sCisJezB4MjIxRiwgMHgwMDA1fSwgezB4MjIwNSwgMHg4QjZFfSwgezB4MjIwNiwgMHgwMDAwfSwgezB4MjIwRiwgMHgwMTAwfSwKKwl7MHgyMjA1LCAweEZGRjZ9LCB7MHgyMjA2LCAweDAwODB9LCB7MHgyMjA1LCAweDgwMDB9LCB7MHgyMjA2LCAweDAyODB9LAorCXsweDIyMDYsIDB4MkJGN30sIHsweDIyMDYsIDB4MDBFMH0sIHsweDIyMDYsIDB4RkZGN30sIHsweDIyMDYsIDB4QTA4MH0sCisJezB4MjIwNiwgMHgwMkFFfSwgezB4MjIwNiwgMHhGNjAyfSwgezB4MjIwNiwgMHgwMTUzfSwgezB4MjIwNiwgMHgwMjAxfSwKKwl7MHgyMjA2LCAweDY2MDJ9LCB7MHgyMjA2LCAweDgwNDR9LCB7MHgyMjA2LCAweDAyMDF9LCB7MHgyMjA2LCAweDdDRTB9LAorCXsweDIyMDYsIDB4OEI4Q30sIHsweDIyMDYsIDB4RTE4Qn0sIHsweDIyMDYsIDB4OEQxRX0sIHsweDIyMDYsIDB4MDFFMX0sCisJezB4MjIwNiwgMHg4QjhFfSwgezB4MjIwNiwgMHgxRTAxfSwgezB4MjIwNiwgMHhBMDAwfSwgezB4MjIwNiwgMHhFNEFFfSwKKwl7MHgyMjA2LCAweEQ4RUV9LCB7MHgyMjA2LCAweDg1QzB9LCB7MHgyMjA2LCAweDAwRUV9LCB7MHgyMjA2LCAweDg1QzF9LAorCXsweDIyMDYsIDB4MDBFRX0sIHsweDIyMDYsIDB4OEFGQ30sIHsweDIyMDYsIDB4MDdFRX0sIHsweDIyMDYsIDB4OEFGRH0sCisJezB4MjIwNiwgMHg3M0VFfSwgezB4MjIwNiwgMHhGRkY2fSwgezB4MjIwNiwgMHgwMEVFfSwgezB4MjIwNiwgMHhGRkY3fSwKKwl7MHgyMjA2LCAweEZDMDR9LCB7MHgyMjA2LCAweEY4RTB9LCB7MHgyMjA2LCAweDhCOEV9LCB7MHgyMjA2LCAweEFEMjB9LAorCXsweDIyMDYsIDB4MDMwMn0sIHsweDIyMDYsIDB4ODA1MH0sIHsweDIyMDYsIDB4RkMwNH0sIHsweDIyMDYsIDB4RjhGOX0sCisJezB4MjIwNiwgMHhFMDhCfSwgezB4MjIwNiwgMHg4NUFEfSwgezB4MjIwNiwgMHgyNTQ4fSwgezB4MjIwNiwgMHhFMDhBfSwKKwl7MHgyMjA2LCAweEU0RTF9LCB7MHgyMjA2LCAweDhBRTV9LCB7MHgyMjA2LCAweDdDMDB9LCB7MHgyMjA2LCAweDAwOUV9LAorCXsweDIyMDYsIDB4MzVFRX0sIHsweDIyMDYsIDB4OEFFNH0sIHsweDIyMDYsIDB4MDBFRX0sIHsweDIyMDYsIDB4OEFFNX0sCisJezB4MjIwNiwgMHgwMEUwfSwgezB4MjIwNiwgMHg4QUZDfSwgezB4MjIwNiwgMHhFMThBfSwgezB4MjIwNiwgMHhGREUyfSwKKwl7MHgyMjA2LCAweDg1QzB9LCB7MHgyMjA2LCAweEUzODV9LCB7MHgyMjA2LCAweEMxMDJ9LCB7MHgyMjA2LCAweDJEQUN9LAorCXsweDIyMDYsIDB4QUQyMH0sIHsweDIyMDYsIDB4MTJFRX0sIHsweDIyMDYsIDB4OEFFNH0sIHsweDIyMDYsIDB4MDNFRX0sCisJezB4MjIwNiwgMHg4QUU1fSwgezB4MjIwNiwgMHhCN0VFfSwgezB4MjIwNiwgMHg4NUMwfSwgezB4MjIwNiwgMHgwMEVFfSwKKwl7MHgyMjA2LCAweDg1QzF9LCB7MHgyMjA2LCAweDAwQUV9LCB7MHgyMjA2LCAweDExMTV9LCB7MHgyMjA2LCAweEU2ODV9LAorCXsweDIyMDYsIDB4QzBFN30sIHsweDIyMDYsIDB4ODVDMX0sIHsweDIyMDYsIDB4QUUwOH0sIHsweDIyMDYsIDB4RUU4NX0sCisJezB4MjIwNiwgMHhDMDAwfSwgezB4MjIwNiwgMHhFRTg1fSwgezB4MjIwNiwgMHhDMTAwfSwgezB4MjIwNiwgMHhGREZDfSwKKwl7MHgyMjA2LCAweDA0MDB9LCB7MHgyMjA1LCAweEUxNDJ9LCB7MHgyMjA2LCAweDA3MDF9LCB7MHgyMjA1LCAweEUxNDB9LAorCXsweDIyMDYsIDB4MDQwNX0sIHsweDIyMEYsIDB4MDAwMH0sIHsweDIyMUYsIDB4MDAwMH0sIHsweDEzM0UsIDB4MDAwRX0sCisJezB4MTMzRiwgMHgwMDEwfSwgezB4MTNFQiwgMHgxMUJCfSwgezB4MjA3RiwgMHgwMDAyfSwgezB4MjA3MywgMHgxRDIyfSwKKwl7MHgyMDdGLCAweDAwMDB9LCB7MHgxMzNGLCAweDAwMzB9LCB7MHgxMzNFLCAweDAwMEV9LCB7MHgyMjAwLCAweDEzNDB9LAorCXsweDEzM0UsIDB4MDAwRX0sIHsweDEzM0YsIDB4MDAxMH0sCit9OworCitzdGF0aWMgaW50IHJ0bDgzNjdiX3dyaXRlX2luaXR2YWxzKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLAorCQkJCSAgY29uc3Qgc3RydWN0IHJ0bDgzNjdiX2luaXR2YWwgKmluaXR2YWxzLAorCQkJCSAgaW50IGNvdW50KQoreworCWludCBlcnI7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKwkJUkVHX1dSKHNtaSwgaW5pdHZhbHNbaV0ucmVnLCBpbml0dmFsc1tpXS52YWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2N2JfcmVhZF9waHlfcmVnKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLAorCQkJCXUzMiBwaHlfYWRkciwgdTMyIHBoeV9yZWcsIHUzMiAqdmFsKQoreworCWludCB0aW1lb3V0OworCXUzMiBkYXRhOworCWludCBlcnI7CisKKwlpZiAocGh5X2FkZHIgPiBSVEw4MzY3Ql9QSFlfQUREUl9NQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHBoeV9yZWcgPiBSVEw4MzY3Ql9QSFlfUkVHX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlSRUdfUkQoc21pLCBSVEw4MzY3Ql9JQV9TVEFUVVNfUkVHLCAmZGF0YSk7CisJaWYgKGRhdGEgJiBSVEw4MzY3Ql9JQV9TVEFUVVNfUEhZX0JVU1kpCisJCXJldHVybiAtRVRJTUVET1VUOworCisJLyogcHJlcGFyZSBhZGRyZXNzICovCisJUkVHX1dSKHNtaSwgUlRMODM2N0JfSUFfQUREUkVTU19SRUcsCisJICAgICAgIFJUTDgzNjdCX0lOVEVSTkFMX1BIWV9SRUcocGh5X2FkZHIsIHBoeV9yZWcpKTsKKworCS8qIHNlbmQgcmVhZCBjb21tYW5kICovCisJUkVHX1dSKHNtaSwgUlRMODM2N0JfSUFfQ1RSTF9SRUcsCisJICAgICAgIFJUTDgzNjdCX0lBX0NUUkxfQ01EX01BU0sgfCBSVEw4MzY3Ql9JQV9DVFJMX1JXX1JFQUQpOworCisJdGltZW91dCA9IDU7CisJZG8geworCQlSRUdfUkQoc21pLCBSVEw4MzY3Ql9JQV9TVEFUVVNfUkVHLCAmZGF0YSk7CisJCWlmICgoZGF0YSAmIFJUTDgzNjdCX0lBX1NUQVRVU19QSFlfQlVTWSkgPT0gMCkKKwkJCWJyZWFrOworCisJCWlmICh0aW1lb3V0LS0pIHsKKwkJCWRldl9lcnIoc21pLT5wYXJlbnQsICJwaHkgcmVhZCB0aW1lZCBvdXRcbiIpOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCX0KKworCQl1ZGVsYXkoMSk7CisJfSB3aGlsZSAoMSk7CisKKwkvKiByZWFkIGRhdGEgKi8KKwlSRUdfUkQoc21pLCBSVEw4MzY3Ql9JQV9SRUFEX0RBVEFfUkVHLCB2YWwpOworCisJZGV2X2RiZyhzbWktPnBhcmVudCwgInBoeV9yZWFkOiBhZGRyOiUwMngsIHJlZzolMDJ4LCB2YWw6JTA0eFxuIiwKKwkJcGh5X2FkZHIsIHBoeV9yZWcsICp2YWwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjdiX3dyaXRlX3BoeV9yZWcoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksCisJCQkJIHUzMiBwaHlfYWRkciwgdTMyIHBoeV9yZWcsIHUzMiB2YWwpCit7CisJaW50IHRpbWVvdXQ7CisJdTMyIGRhdGE7CisJaW50IGVycjsKKworCWRldl9kYmcoc21pLT5wYXJlbnQsICJwaHlfd3JpdGU6IGFkZHI6JTAyeCwgcmVnOiUwMngsIHZhbDolMDR4XG4iLAorCQlwaHlfYWRkciwgcGh5X3JlZywgdmFsKTsKKworCWlmIChwaHlfYWRkciA+IFJUTDgzNjdCX1BIWV9BRERSX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocGh5X3JlZyA+IFJUTDgzNjdCX1BIWV9SRUdfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCVJFR19SRChzbWksIFJUTDgzNjdCX0lBX1NUQVRVU19SRUcsICZkYXRhKTsKKwlpZiAoZGF0YSAmIFJUTDgzNjdCX0lBX1NUQVRVU19QSFlfQlVTWSkKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisKKwkvKiBwcmVhcHJlIGRhdGEgKi8KKwlSRUdfV1Ioc21pLCBSVEw4MzY3Ql9JQV9XUklURV9EQVRBX1JFRywgdmFsKTsKKworCS8qIHByZXBhcmUgYWRkcmVzcyAqLworCVJFR19XUihzbWksIFJUTDgzNjdCX0lBX0FERFJFU1NfUkVHLAorCSAgICAgICBSVEw4MzY3Ql9JTlRFUk5BTF9QSFlfUkVHKHBoeV9hZGRyLCBwaHlfcmVnKSk7CisKKwkvKiBzZW5kIHdyaXRlIGNvbW1hbmQgKi8KKwlSRUdfV1Ioc21pLCBSVEw4MzY3Ql9JQV9DVFJMX1JFRywKKwkgICAgICAgUlRMODM2N0JfSUFfQ1RSTF9DTURfTUFTSyB8IFJUTDgzNjdCX0lBX0NUUkxfUldfV1JJVEUpOworCisJdGltZW91dCA9IDU7CisJZG8geworCQlSRUdfUkQoc21pLCBSVEw4MzY3Ql9JQV9TVEFUVVNfUkVHLCAmZGF0YSk7CisJCWlmICgoZGF0YSAmIFJUTDgzNjdCX0lBX1NUQVRVU19QSFlfQlVTWSkgPT0gMCkKKwkJCWJyZWFrOworCisJCWlmICh0aW1lb3V0LS0pIHsKKwkJCWRldl9lcnIoc21pLT5wYXJlbnQsICJwaHkgd3JpdGUgdGltZWQgb3V0XG4iKTsKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQl9CisKKwkJdWRlbGF5KDEpOworCX0gd2hpbGUgKDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2N2JfaW5pdF9yZWdzKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pKQoreworCWNvbnN0IHN0cnVjdCBydGw4MzY3Yl9pbml0dmFsICppbml0dmFsczsKKwl1MzIgY2hpcF92ZXI7CisJdTMyIHJsdmlkOworCWludCBjb3VudDsKKwlpbnQgZXJyOworCisJUkVHX1dSKHNtaSwgUlRMODM2N0JfUlRMX01BR0lDX0lEX1JFRywgUlRMODM2N0JfUlRMX01BR0lDX0lEX1ZBTCk7CisJUkVHX1JEKHNtaSwgUlRMODM2N0JfQ0hJUF9WRVJfUkVHLCAmY2hpcF92ZXIpOworCisJcmx2aWQgPSAoY2hpcF92ZXIgPj4gUlRMODM2N0JfQ0hJUF9WRVJfUkxWSURfU0hJRlQpICYKKwkJUlRMODM2N0JfQ0hJUF9WRVJfUkxWSURfTUFTSzsKKworCXN3aXRjaCAocmx2aWQpIHsKKwljYXNlIDA6CisJCWluaXR2YWxzID0gcnRsODM2N3JfdmJfaW5pdHZhbHNfMDsKKwkJY291bnQgPSBBUlJBWV9TSVpFKHJ0bDgzNjdyX3ZiX2luaXR2YWxzXzApOworCQlicmVhazsKKworCWNhc2UgMToKKwkJaW5pdHZhbHMgPSBydGw4MzY3cl92Yl9pbml0dmFsc18xOworCQljb3VudCA9IEFSUkFZX1NJWkUocnRsODM2N3JfdmJfaW5pdHZhbHNfMSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZGV2X2VycihzbWktPnBhcmVudCwgInVua25vdyBybHZpZCAldVxuIiwgcmx2aWQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBUT0RPOiBkaXNhYmxlIFJMVFAgKi8KKworCXJldHVybiBydGw4MzY3Yl93cml0ZV9pbml0dmFscyhzbWksIGluaXR2YWxzLCBjb3VudCk7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2N2JfcmVzZXRfY2hpcChzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSkKK3sKKwlpbnQgdGltZW91dCA9IDEwOworCWludCBlcnI7CisJdTMyIGRhdGE7CisKKwlSRUdfV1Ioc21pLCBSVEw4MzY3Ql9DSElQX1JFU0VUX1JFRywgUlRMODM2N0JfQ0hJUF9SRVNFVF9IVyk7CisJbXNsZWVwKFJUTDgzNjdCX1JFU0VUX0RFTEFZKTsKKworCWRvIHsKKwkJUkVHX1JEKHNtaSwgUlRMODM2N0JfQ0hJUF9SRVNFVF9SRUcsICZkYXRhKTsKKwkJaWYgKCEoZGF0YSAmIFJUTDgzNjdCX0NISVBfUkVTRVRfSFcpKQorCQkJYnJlYWs7CisKKwkJbXNsZWVwKDEpOworCX0gd2hpbGUgKC0tdGltZW91dCk7CisKKwlpZiAoIXRpbWVvdXQpIHsKKwkJZGV2X2VycihzbWktPnBhcmVudCwgImNoaXAgcmVzZXQgdGltZWQgb3V0XG4iKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2N2JfZXh0aWZfc2V0X21vZGUoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIGludCBpZCwKKwkJCQkgICBlbnVtIHJ0bDgzNjdfZXh0aWZfbW9kZSBtb2RlKQoreworCWludCBlcnI7CisKKwkvKiBzZXQgcG9ydCBtb2RlICovCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBSVEw4MzY3X0VYVElGX01PREVfUkdNSUk6CisJCVJFR19STVcoc21pLCBSVEw4MzY3Ql9DSElQX0RFQlVHMF9SRUcsCisJCQlSVEw4MzY3Ql9ERUJVRzBfU0VMMzMoaWQpLAorCQkJUlRMODM2N0JfREVCVUcwX1NFTDMzKGlkKSk7CisJCWlmIChpZCA8PSAxKSB7CisJCQlSRUdfUk1XKHNtaSwgUlRMODM2N0JfQ0hJUF9ERUJVRzBfUkVHLAorCQkJCVJUTDgzNjdCX0RFQlVHMF9EUkkoaWQpIHwKKwkJCQkJUlRMODM2N0JfREVCVUcwX0RSSV9SRyhpZCkgfAorCQkJCQlSVEw4MzY3Ql9ERUJVRzBfU0xSKGlkKSwKKwkJCQlSVEw4MzY3Ql9ERUJVRzBfRFJJX1JHKGlkKSB8CisJCQkJCVJUTDgzNjdCX0RFQlVHMF9TTFIoaWQpKTsKKwkJCVJFR19STVcoc21pLCBSVEw4MzY3Ql9DSElQX0RFQlVHMV9SRUcsCisJCQkJUlRMODM2N0JfREVCVUcxX0ROX01BU0soaWQpIHwKKwkJCQkJUlRMODM2N0JfREVCVUcxX0RQX01BU0soaWQpLAorCQkJCSg3IDw8IFJUTDgzNjdCX0RFQlVHMV9ETl9TSElGVChpZCkpIHwKKwkJCQkJKDcgPDwgUlRMODM2N0JfREVCVUcxX0RQX1NISUZUKGlkKSkpOworCQl9IGVsc2UgeworCQkJUkVHX1JNVyhzbWksIFJUTDgzNjdCX0NISVBfREVCVUcyX1JFRywKKwkJCQlSVEw4MzY3Ql9ERUJVRzJfRFJJX0VYVDIgfAorCQkJCQlSVEw4MzY3Ql9ERUJVRzJfRFJJX0VYVDJfUkcgfAorCQkJCQlSVEw4MzY3Ql9ERUJVRzJfU0xSX0VYVDIgfAorCQkJCQlSVEw4MzY3Ql9ERUJVRzJfUkcyX0ROX01BU0sgfAorCQkJCQlSVEw4MzY3Ql9ERUJVRzJfUkcyX0RQX01BU0ssCisJCQkJUlRMODM2N0JfREVCVUcyX0RSSV9FWFQyX1JHIHwKKwkJCQkJUlRMODM2N0JfREVCVUcyX1NMUl9FWFQyIHwKKwkJCQkJKDcgPDwgUlRMODM2N0JfREVCVUcyX1JHMl9ETl9TSElGVCkgfAorCQkJCQkoNyA8PCBSVEw4MzY3Ql9ERUJVRzJfUkcyX0RQX1NISUZUKSk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFJUTDgzNjdfRVhUSUZfTU9ERV9UTUlJX01BQzoKKwljYXNlIFJUTDgzNjdfRVhUSUZfTU9ERV9UTUlJX1BIWToKKwkJUkVHX1JNVyhzbWksIFJUTDgzNjdCX0JZUEFTU19MSU5FX1JBVEVfUkVHLCBCSVQoaWQpLCBCSVQoaWQpKTsKKwkJYnJlYWs7CisKKwljYXNlIFJUTDgzNjdfRVhUSUZfTU9ERV9HTUlJOgorCQlSRUdfUk1XKHNtaSwgUlRMODM2N0JfQ0hJUF9ERUJVRzBfUkVHLAorCQkJUlRMODM2N0JfREVCVUcwX1NFTDMzKGlkKSwKKwkJCVJUTDgzNjdCX0RFQlVHMF9TRUwzMyhpZCkpOworCQlSRUdfUk1XKHNtaSwgUlRMODM2N0JfRVhUX1JHTVhGX1JFRyhpZCksIEJJVCg2KSwgQklUKDYpKTsKKwkJYnJlYWs7CisKKwljYXNlIFJUTDgzNjdfRVhUSUZfTU9ERV9NSUlfTUFDOgorCWNhc2UgUlRMODM2N19FWFRJRl9NT0RFX01JSV9QSFk6CisJY2FzZSBSVEw4MzY3X0VYVElGX01PREVfRElTQUJMRUQ6CisJCVJFR19STVcoc21pLCBSVEw4MzY3Ql9CWVBBU1NfTElORV9SQVRFX1JFRywgQklUKGlkKSwgMCk7CisJCVJFR19STVcoc21pLCBSVEw4MzY3Ql9FWFRfUkdNWEZfUkVHKGlkKSwgQklUKDYpLCAwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkZXZfZXJyKHNtaS0+cGFyZW50LAorCQkJImludmFsaWQgbW9kZSBmb3IgZXh0ZXJuYWwgaW50ZXJmYWNlICVkXG4iLCBpZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChpZCA8PSAxKQorCQlSRUdfUk1XKHNtaSwgUlRMODM2N0JfRElTX1JFRywKKwkJCVJUTDgzNjdCX0RJU19SR01JSV9NQVNLIDw8IFJUTDgzNjdCX0RJU19SR01JSV9TSElGVChpZCksCisJCQltb2RlIDw8IFJUTDgzNjdCX0RJU19SR01JSV9TSElGVChpZCkpOworCWVsc2UKKwkJUkVHX1JNVyhzbWksIFJUTDgzNjdCX0RJUzJfUkVHLAorCQkJUlRMODM2N0JfRElTMl9SR01JSV9NQVNLIDw8IFJUTDgzNjdCX0RJUzJfUkdNSUlfU0hJRlQsCisJCQltb2RlIDw8IFJUTDgzNjdCX0RJUzJfUkdNSUlfU0hJRlQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2N2JfZXh0aWZfc2V0X2ZvcmNlKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLCBpbnQgaWQsCisJCQkJICAgIHN0cnVjdCBydGw4MzY3X3BvcnRfYWJpbGl0eSAqcGEpCit7CisJdTMyIG1hc2s7CisJdTMyIHZhbDsKKwlpbnQgZXJyOworCisJbWFzayA9IChSVEw4MzY3Ql9ESV9GT1JDRV9NT0RFIHwKKwkJUlRMODM2N0JfRElfRk9SQ0VfTldBWSB8CisJCVJUTDgzNjdCX0RJX0ZPUkNFX1RYUEFVU0UgfAorCQlSVEw4MzY3Ql9ESV9GT1JDRV9SWFBBVVNFIHwKKwkJUlRMODM2N0JfRElfRk9SQ0VfTElOSyB8CisJCVJUTDgzNjdCX0RJX0ZPUkNFX0RVUExFWCB8CisJCVJUTDgzNjdCX0RJX0ZPUkNFX1NQRUVEX01BU0spOworCisJdmFsID0gcGEtPnNwZWVkOworCXZhbCB8PSBwYS0+Zm9yY2VfbW9kZSA/IFJUTDgzNjdCX0RJX0ZPUkNFX01PREUgOiAwOworCXZhbCB8PSBwYS0+bndheSA/IFJUTDgzNjdCX0RJX0ZPUkNFX05XQVkgOiAwOworCXZhbCB8PSBwYS0+dHhwYXVzZSA/IFJUTDgzNjdCX0RJX0ZPUkNFX1RYUEFVU0UgOiAwOworCXZhbCB8PSBwYS0+cnhwYXVzZSA/IFJUTDgzNjdCX0RJX0ZPUkNFX1JYUEFVU0UgOiAwOworCXZhbCB8PSBwYS0+bGluayA/IFJUTDgzNjdCX0RJX0ZPUkNFX0xJTksgOiAwOworCXZhbCB8PSBwYS0+ZHVwbGV4ID8gUlRMODM2N0JfRElfRk9SQ0VfRFVQTEVYIDogMDsKKworCVJFR19STVcoc21pLCBSVEw4MzY3Ql9ESV9GT1JDRV9SRUcoaWQpLCBtYXNrLCB2YWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2N2JfZXh0aWZfc2V0X3JnbWlpX2RlbGF5KHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLCBpbnQgaWQsCisJCQkJCSB1bnNpZ25lZCB0eGRlbGF5LCB1bnNpZ25lZCByeGRlbGF5KQoreworCXUzMiBtYXNrOworCXUzMiB2YWw7CisJaW50IGVycjsKKworCW1hc2sgPSAoUlRMODM2N0JfRVhUX1JHTVhGX1JYREVMQVlfTUFTSyB8CisJCShSVEw4MzY3Ql9FWFRfUkdNWEZfVFhERUxBWV9NQVNLIDw8CisJCQlSVEw4MzY3Ql9FWFRfUkdNWEZfVFhERUxBWV9TSElGVCkpOworCisJdmFsID0gcnhkZWxheTsKKwl2YWwgfD0gdHhkZWxheSA8PCBSVEw4MzY3Ql9FWFRfUkdNWEZfVFhERUxBWV9TSElGVDsKKworCVJFR19STVcoc21pLCBSVEw4MzY3Ql9FWFRfUkdNWEZfUkVHKGlkKSwgbWFzaywgdmFsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjdiX2V4dGlmX2luaXQoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIGludCBpZCwKKwkJCSAgICAgICBzdHJ1Y3QgcnRsODM2N19leHRpZl9jb25maWcgKmNmZykKK3sKKwllbnVtIHJ0bDgzNjdfZXh0aWZfbW9kZSBtb2RlOworCWludCBlcnI7CisKKwltb2RlID0gKGNmZykgPyBjZmctPm1vZGUgOiBSVEw4MzY3X0VYVElGX01PREVfRElTQUJMRUQ7CisKKwllcnIgPSBydGw4MzY3Yl9leHRpZl9zZXRfbW9kZShzbWksIGlkLCBtb2RlKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKG1vZGUgIT0gUlRMODM2N19FWFRJRl9NT0RFX0RJU0FCTEVEKSB7CisJCWVyciA9IHJ0bDgzNjdiX2V4dGlmX3NldF9mb3JjZShzbWksIGlkLCAmY2ZnLT5hYmlsaXR5KTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJZXJyID0gcnRsODM2N2JfZXh0aWZfc2V0X3JnbWlpX2RlbGF5KHNtaSwgaWQsIGNmZy0+dHhkZWxheSwKKwkJCQkJCSAgICAgY2ZnLT5yeGRlbGF5KTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfT0YKK3N0YXRpYyBpbnQgcnRsODM2N2JfZXh0aWZfaW5pdF9vZihzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwgaW50IGlkLAorCQkJCSAgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgcnRsODM2N19leHRpZl9jb25maWcgKmNmZzsKKwljb25zdCBfX2JlMzIgKnByb3A7CisJaW50IHNpemU7CisJaW50IGVycjsKKworCXByb3AgPSBvZl9nZXRfcHJvcGVydHkoc21pLT5wYXJlbnQtPm9mX25vZGUsIG5hbWUsICZzaXplKTsKKwlpZiAoIXByb3ApCisJCXJldHVybiBydGw4MzY3Yl9leHRpZl9pbml0KHNtaSwgaWQsIE5VTEwpOworCisJaWYgKHNpemUgIT0gKDkgKiBzaXplb2YoKnByb3ApKSkgeworCQlkZXZfZXJyKHNtaS0+cGFyZW50LCAiJXMgcHJvcGVydHkgaXMgaW52YWxpZFxuIiwgbmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNmZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBydGw4MzY3X2V4dGlmX2NvbmZpZyksIEdGUF9LRVJORUwpOworCWlmICghY2ZnKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNmZy0+dHhkZWxheSA9IGJlMzJfdG9fY3B1cChwcm9wKyspOworCWNmZy0+cnhkZWxheSA9IGJlMzJfdG9fY3B1cChwcm9wKyspOworCWNmZy0+bW9kZSA9IGJlMzJfdG9fY3B1cChwcm9wKyspOworCWNmZy0+YWJpbGl0eS5mb3JjZV9tb2RlID0gYmUzMl90b19jcHVwKHByb3ArKyk7CisJY2ZnLT5hYmlsaXR5LnR4cGF1c2UgPSBiZTMyX3RvX2NwdXAocHJvcCsrKTsKKwljZmctPmFiaWxpdHkucnhwYXVzZSA9IGJlMzJfdG9fY3B1cChwcm9wKyspOworCWNmZy0+YWJpbGl0eS5saW5rID0gYmUzMl90b19jcHVwKHByb3ArKyk7CisJY2ZnLT5hYmlsaXR5LmR1cGxleCA9IGJlMzJfdG9fY3B1cChwcm9wKyspOworCWNmZy0+YWJpbGl0eS5zcGVlZCA9IGJlMzJfdG9fY3B1cChwcm9wKyspOworCisJZXJyID0gcnRsODM2N2JfZXh0aWZfaW5pdChzbWksIGlkLCBjZmcpOworCWtmcmVlKGNmZyk7CisKKwlyZXR1cm4gZXJyOworfQorI2Vsc2UKK3N0YXRpYyBpbnQgcnRsODM2N2JfZXh0aWZfaW5pdF9vZihzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwgaW50IGlkLAorCQkJCSAgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHJ0bDgzNjdiX3NldHVwKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pKQoreworCXN0cnVjdCBydGw4MzY3X3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCWludCBlcnI7CisJaW50IGk7CisKKwlwZGF0YSA9IHNtaS0+cGFyZW50LT5wbGF0Zm9ybV9kYXRhOworCisJZXJyID0gcnRsODM2N2JfaW5pdF9yZWdzKHNtaSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIGluaXRpYWxpemUgZXh0ZXJuYWwgaW50ZXJmYWNlcyAqLworCWlmIChzbWktPnBhcmVudC0+b2Zfbm9kZSkgeworCQllcnIgPSBydGw4MzY3Yl9leHRpZl9pbml0X29mKHNtaSwgMCwgInJlYWx0ZWssZXh0aWYwIik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCWVyciA9IHJ0bDgzNjdiX2V4dGlmX2luaXRfb2Yoc21pLCAxLCAicmVhbHRlayxleHRpZjEiKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJZXJyID0gcnRsODM2N2JfZXh0aWZfaW5pdF9vZihzbWksIDIsICJyZWFsdGVrLGV4dGlmMiIpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9IGVsc2UgeworCQllcnIgPSBydGw4MzY3Yl9leHRpZl9pbml0KHNtaSwgMCwgcGRhdGEtPmV4dGlmMF9jZmcpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQllcnIgPSBydGw4MzY3Yl9leHRpZl9pbml0KHNtaSwgMSwgcGRhdGEtPmV4dGlmMV9jZmcpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBzZXQgbWF4aW11bSBwYWNrZXQgbGVuZ3RoIHRvIDE1MzYgYnl0ZXMgKi8KKwlSRUdfUk1XKHNtaSwgUlRMODM2N0JfU1dDMF9SRUcsIFJUTDgzNjdCX1NXQzBfTUFYX0xFTkdUSF9NQVNLLAorCQlSVEw4MzY3Ql9TV0MwX01BWF9MRU5HVEhfMTUzNik7CisKKwkvKgorCSAqIGRpc2NhcmQgVkxBTiB0YWdnZWQgcGFja2V0cyBpZiB0aGUgcG9ydCBpcyBub3QgYSBtZW1iZXIgb2YKKwkgKiB0aGUgVkxBTiB3aXRoIHdoaWNoIHRoZSBwYWNrZXRzIGlzIGFzc29jaWF0ZWQuCisJICovCisJUkVHX1dSKHNtaSwgUlRMODM2N0JfVkxBTl9JTkdSRVNTX1JFRywgUlRMODM2N0JfUE9SVFNfQUxMKTsKKworCS8qCisJICogU2V0dXAgZWdyZXNzIHRhZyBtb2RlIGZvciBlYWNoIHBvcnQuCisJICovCisJZm9yIChpID0gMDsgaSA8IFJUTDgzNjdCX05VTV9QT1JUUzsgaSsrKQorCQlSRUdfUk1XKHNtaSwKKwkJCVJUTDgzNjdCX1BPUlRfTUlTQ19DRkdfUkVHKGkpLAorCQkJUlRMODM2N0JfUE9SVF9NSVNDX0NGR19FR1JFU1NfTU9ERV9NQVNLIDw8CisJCQkJUlRMODM2N0JfUE9SVF9NSVNDX0NGR19FR1JFU1NfTU9ERV9TSElGVCwKKwkJCVJUTDgzNjdCX1BPUlRfTUlTQ19DRkdfRUdSRVNTX01PREVfT1JJR0lOQUwgPDwKKwkJCQlSVEw4MzY3Ql9QT1JUX01JU0NfQ0ZHX0VHUkVTU19NT0RFX1NISUZUKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjdiX2dldF9taWJfY291bnRlcihzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwgaW50IGNvdW50ZXIsCisJCQkJICAgIGludCBwb3J0LCB1bnNpZ25lZCBsb25nIGxvbmcgKnZhbCkKK3sKKwlzdHJ1Y3QgcnRsODM2Nl9taWJfY291bnRlciAqbWliOworCWludCBvZmZzZXQ7CisJaW50IGk7CisJaW50IGVycjsKKwl1MzIgYWRkciwgZGF0YTsKKwl1NjQgbWlidmFsdWU7CisKKwlpZiAocG9ydCA+IFJUTDgzNjdCX05VTV9QT1JUUyB8fAorCSAgICBjb3VudGVyID49IFJUTDgzNjdCX05VTV9NSUJfQ09VTlRFUlMpCisJCXJldHVybiAtRUlOVkFMOworCisJbWliID0gJnJ0bDgzNjdiX21pYl9jb3VudGVyc1tjb3VudGVyXTsKKwlhZGRyID0gUlRMODM2N0JfTUlCX0NPVU5URVJfUE9SVF9PRkZTRVQgKiBwb3J0ICsgbWliLT5vZmZzZXQ7CisKKwkvKgorCSAqIFdyaXRpbmcgYWNjZXNzIGNvdW50ZXIgYWRkcmVzcyBmaXJzdAorCSAqIHRoZW4gQVNJQyB3aWxsIHByZXBhcmUgNjRiaXRzIGNvdW50ZXIgd2FpdCBmb3IgYmVpbmcgcmV0cml2ZWQKKwkgKi8KKwlSRUdfV1Ioc21pLCBSVEw4MzY3Ql9NSUJfQUREUkVTU19SRUcsIGFkZHIgPj4gMik7CisKKwkvKiByZWFkIE1JQiBjb250cm9sIHJlZ2lzdGVyICovCisJUkVHX1JEKHNtaSwgUlRMODM2N0JfTUlCX0NUUkwwX1JFRygwKSwgJmRhdGEpOworCisJaWYgKGRhdGEgJiBSVEw4MzY3Ql9NSUJfQ1RSTDBfQlVTWV9NQVNLKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKGRhdGEgJiBSVEw4MzY3Ql9NSUJfQ1RSTDBfUkVTRVRfTUFTSykKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAobWliLT5sZW5ndGggPT0gNCkKKwkJb2Zmc2V0ID0gMzsKKwllbHNlCisJCW9mZnNldCA9IChtaWItPm9mZnNldCArIDEpICUgNDsKKworCW1pYnZhbHVlID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbWliLT5sZW5ndGg7IGkrKykgeworCQlSRUdfUkQoc21pLCBSVEw4MzY3Ql9NSUJfQ09VTlRFUl9SRUcob2Zmc2V0IC0gaSksICZkYXRhKTsKKwkJbWlidmFsdWUgPSAobWlidmFsdWUgPDwgMTYpIHwgKGRhdGEgJiAweEZGRkYpOworCX0KKworCSp2YWwgPSBtaWJ2YWx1ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MzY3Yl9nZXRfdmxhbl80ayhzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwgdTMyIHZpZCwKKwkJCQlzdHJ1Y3QgcnRsODM2Nl92bGFuXzRrICp2bGFuNGspCit7CisJdTMyIGRhdGFbUlRMODM2N0JfVEFfVkxBTl9OVU1fV09SRFNdOworCWludCBlcnI7CisJaW50IGk7CisKKwltZW1zZXQodmxhbjRrLCAnXDAnLCBzaXplb2Yoc3RydWN0IHJ0bDgzNjZfdmxhbl80aykpOworCisJaWYgKHZpZCA+PSBSVEw4MzY3Ql9OVU1fVklEUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiB3cml0ZSBWSUQgKi8KKwlSRUdfV1Ioc21pLCBSVEw4MzY3Ql9UQV9BRERSX1JFRywgdmlkKTsKKworCS8qIHdyaXRlIHRhYmxlIGFjY2VzcyBjb250cm9sIHdvcmQgKi8KKwlSRUdfV1Ioc21pLCBSVEw4MzY3Ql9UQV9DVFJMX1JFRywgUlRMODM2N0JfVEFfQ1RSTF9DVkxBTl9SRUFEKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRhdGEpOyBpKyspCisJCVJFR19SRChzbWksIFJUTDgzNjdCX1RBX1JEREFUQV9SRUcoaSksICZkYXRhW2ldKTsKKworCXZsYW40ay0+dmlkID0gdmlkOworCXZsYW40ay0+bWVtYmVyID0gKGRhdGFbMF0gPj4gUlRMODM2N0JfVEFfVkxBTjBfTUVNQkVSX1NISUZUKSAmCisJCQkgUlRMODM2N0JfVEFfVkxBTjBfTUVNQkVSX01BU0s7CisJdmxhbjRrLT51bnRhZyA9IChkYXRhWzBdID4+IFJUTDgzNjdCX1RBX1ZMQU4wX1VOVEFHX1NISUZUKSAmCisJCQlSVEw4MzY3Ql9UQV9WTEFOMF9VTlRBR19NQVNLOworCXZsYW40ay0+ZmlkID0gKGRhdGFbMV0gPj4gUlRMODM2N0JfVEFfVkxBTjFfRklEX1NISUZUKSAmCisJCSAgICAgIFJUTDgzNjdCX1RBX1ZMQU4xX0ZJRF9NQVNLOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2N2Jfc2V0X3ZsYW5fNGsoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksCisJCQkJY29uc3Qgc3RydWN0IHJ0bDgzNjZfdmxhbl80ayAqdmxhbjRrKQoreworCXUzMiBkYXRhW1JUTDgzNjdCX1RBX1ZMQU5fTlVNX1dPUkRTXTsKKwlpbnQgZXJyOworCWludCBpOworCisJaWYgKHZsYW40ay0+dmlkID49IFJUTDgzNjdCX05VTV9WSURTIHx8CisJICAgIHZsYW40ay0+bWVtYmVyID4gUlRMODM2N0JfVEFfVkxBTjBfTUVNQkVSX01BU0sgfHwKKwkgICAgdmxhbjRrLT51bnRhZyA+IFJUTDgzNjdCX1VOVEFHX01BU0sgfHwKKwkgICAgdmxhbjRrLT5maWQgPiBSVEw4MzY3Ql9GSURNQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtc2V0KGRhdGEsIDAsIHNpemVvZihkYXRhKSk7CisKKwlkYXRhWzBdID0gKHZsYW40ay0+bWVtYmVyICYgUlRMODM2N0JfVEFfVkxBTjBfTUVNQkVSX01BU0spIDw8CisJCSAgUlRMODM2N0JfVEFfVkxBTjBfTUVNQkVSX1NISUZUOworCWRhdGFbMF0gfD0gKHZsYW40ay0+dW50YWcgJiBSVEw4MzY3Ql9UQV9WTEFOMF9VTlRBR19NQVNLKSA8PAorCQkgICBSVEw4MzY3Ql9UQV9WTEFOMF9VTlRBR19TSElGVDsKKwlkYXRhWzFdID0gKHZsYW40ay0+ZmlkICYgUlRMODM2N0JfVEFfVkxBTjFfRklEX01BU0spIDw8CisJCSAgUlRMODM2N0JfVEFfVkxBTjFfRklEX1NISUZUOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGF0YSk7IGkrKykKKwkJUkVHX1dSKHNtaSwgUlRMODM2N0JfVEFfV1JEQVRBX1JFRyhpKSwgZGF0YVtpXSk7CisKKwkvKiB3cml0ZSBWSUQgKi8KKwlSRUdfV1Ioc21pLCBSVEw4MzY3Ql9UQV9BRERSX1JFRywKKwkgICAgICAgdmxhbjRrLT52aWQgJiBSVEw4MzY3Ql9UQV9WTEFOX1ZJRF9NQVNLKTsKKworCS8qIHdyaXRlIHRhYmxlIGFjY2VzcyBjb250cm9sIHdvcmQgKi8KKwlSRUdfV1Ioc21pLCBSVEw4MzY3Ql9UQV9DVFJMX1JFRywgUlRMODM2N0JfVEFfQ1RSTF9DVkxBTl9XUklURSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MzY3Yl9nZXRfdmxhbl9tYyhzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwgdTMyIGluZGV4LAorCQkJCXN0cnVjdCBydGw4MzY2X3ZsYW5fbWMgKnZsYW5tYykKK3sKKwl1MzIgZGF0YVtSVEw4MzY3Ql9WTEFOX01DX05VTV9XT1JEU107CisJaW50IGVycjsKKwlpbnQgaTsKKworCW1lbXNldCh2bGFubWMsICdcMCcsIHNpemVvZihzdHJ1Y3QgcnRsODM2Nl92bGFuX21jKSk7CisKKwlpZiAoaW5kZXggPj0gUlRMODM2N0JfTlVNX1ZMQU5TKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRhdGEpOyBpKyspCisJCVJFR19SRChzbWksIFJUTDgzNjdCX1ZMQU5fTUNfQkFTRShpbmRleCkgKyBpLCAmZGF0YVtpXSk7CisKKwl2bGFubWMtPm1lbWJlciA9IChkYXRhWzBdID4+IFJUTDgzNjdCX1ZMQU5fTUMwX01FTUJFUl9TSElGVCkgJgorCQkJIFJUTDgzNjdCX1ZMQU5fTUMwX01FTUJFUl9NQVNLOworCXZsYW5tYy0+ZmlkID0gKGRhdGFbMV0gPj4gUlRMODM2N0JfVkxBTl9NQzFfRklEX1NISUZUKSAmCisJCSAgICAgIFJUTDgzNjdCX1ZMQU5fTUMxX0ZJRF9NQVNLOworCXZsYW5tYy0+dmlkID0gKGRhdGFbM10gPj4gUlRMODM2N0JfVkxBTl9NQzNfRVZJRF9TSElGVCkgJgorCQkgICAgICBSVEw4MzY3Ql9WTEFOX01DM19FVklEX01BU0s7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MzY3Yl9zZXRfdmxhbl9tYyhzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwgdTMyIGluZGV4LAorCQkJCWNvbnN0IHN0cnVjdCBydGw4MzY2X3ZsYW5fbWMgKnZsYW5tYykKK3sKKwl1MzIgZGF0YVtSVEw4MzY3Ql9WTEFOX01DX05VTV9XT1JEU107CisJaW50IGVycjsKKwlpbnQgaTsKKworCWlmIChpbmRleCA+PSBSVEw4MzY3Ql9OVU1fVkxBTlMgfHwKKwkgICAgdmxhbm1jLT52aWQgPj0gUlRMODM2N0JfTlVNX1ZJRFMgfHwKKwkgICAgdmxhbm1jLT5wcmlvcml0eSA+IFJUTDgzNjdCX1BSSU9SSVRZTUFYIHx8CisJICAgIHZsYW5tYy0+bWVtYmVyID4gUlRMODM2N0JfVkxBTl9NQzBfTUVNQkVSX01BU0sgfHwKKwkgICAgdmxhbm1jLT51bnRhZyA+IFJUTDgzNjdCX1VOVEFHX01BU0sgfHwKKwkgICAgdmxhbm1jLT5maWQgPiBSVEw4MzY3Ql9GSURNQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJZGF0YVswXSA9ICh2bGFubWMtPm1lbWJlciAmIFJUTDgzNjdCX1ZMQU5fTUMwX01FTUJFUl9NQVNLKSA8PAorCQkgIFJUTDgzNjdCX1ZMQU5fTUMwX01FTUJFUl9TSElGVDsKKwlkYXRhWzFdID0gKHZsYW5tYy0+ZmlkICYgUlRMODM2N0JfVkxBTl9NQzFfRklEX01BU0spIDw8CisJCSAgUlRMODM2N0JfVkxBTl9NQzFfRklEX1NISUZUOworCWRhdGFbMl0gPSAwOworCWRhdGFbM10gPSAodmxhbm1jLT52aWQgJiBSVEw4MzY3Ql9WTEFOX01DM19FVklEX01BU0spIDw8CisJCSAgIFJUTDgzNjdCX1ZMQU5fTUMzX0VWSURfU0hJRlQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkYXRhKTsgaSsrKQorCQlSRUdfV1Ioc21pLCBSVEw4MzY3Ql9WTEFOX01DX0JBU0UoaW5kZXgpICsgaSwgZGF0YVtpXSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MzY3Yl9nZXRfbWNfaW5kZXgoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIGludCBwb3J0LCBpbnQgKnZhbCkKK3sKKwl1MzIgZGF0YTsKKwlpbnQgZXJyOworCisJaWYgKHBvcnQgPj0gUlRMODM2N0JfTlVNX1BPUlRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCVJFR19SRChzbWksIFJUTDgzNjdCX1ZMQU5fUFZJRF9DVFJMX1JFRyhwb3J0KSwgJmRhdGEpOworCisJKnZhbCA9IChkYXRhID4+IFJUTDgzNjdCX1ZMQU5fUFZJRF9DVFJMX1NISUZUKHBvcnQpKSAmCisJICAgICAgIFJUTDgzNjdCX1ZMQU5fUFZJRF9DVFJMX01BU0s7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MzY3Yl9zZXRfbWNfaW5kZXgoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIGludCBwb3J0LCBpbnQgaW5kZXgpCit7CisJaWYgKHBvcnQgPj0gUlRMODM2N0JfTlVNX1BPUlRTIHx8IGluZGV4ID49IFJUTDgzNjdCX05VTV9WTEFOUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gcnRsODM2Nl9zbWlfcm13cihzbWksIFJUTDgzNjdCX1ZMQU5fUFZJRF9DVFJMX1JFRyhwb3J0KSwKKwkJCQlSVEw4MzY3Ql9WTEFOX1BWSURfQ1RSTF9NQVNLIDw8CisJCQkJCVJUTDgzNjdCX1ZMQU5fUFZJRF9DVFJMX1NISUZUKHBvcnQpLAorCQkJCShpbmRleCAmIFJUTDgzNjdCX1ZMQU5fUFZJRF9DVFJMX01BU0spIDw8CisJCQkJCVJUTDgzNjdCX1ZMQU5fUFZJRF9DVFJMX1NISUZUKHBvcnQpKTsKK30KKworc3RhdGljIGludCBydGw4MzY3Yl9lbmFibGVfdmxhbihzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSwgaW50IGVuYWJsZSkKK3sKKwlyZXR1cm4gcnRsODM2Nl9zbWlfcm13cihzbWksIFJUTDgzNjdCX1ZMQU5fQ1RSTF9SRUcsCisJCQkJUlRMODM2N0JfVkxBTl9DVFJMX0VOQUJMRSwKKwkJCQkoZW5hYmxlKSA/IFJUTDgzNjdCX1ZMQU5fQ1RSTF9FTkFCTEUgOiAwKTsKK30KKworc3RhdGljIGludCBydGw4MzY3Yl9lbmFibGVfdmxhbjRrKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLCBpbnQgZW5hYmxlKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjdiX2lzX3ZsYW5fdmFsaWQoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIHVuc2lnbmVkIHZsYW4pCit7CisJdW5zaWduZWQgbWF4ID0gUlRMODM2N0JfTlVNX1ZMQU5TOworCisJaWYgKHNtaS0+dmxhbjRrX2VuYWJsZWQpCisJCW1heCA9IFJUTDgzNjdCX05VTV9WSURTIC0gMTsKKworCWlmICh2bGFuID09IDAgfHwgdmxhbiA+PSBtYXgpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2N2JfZW5hYmxlX3BvcnQoc3RydWN0IHJ0bDgzNjZfc21pICpzbWksIGludCBwb3J0LCBpbnQgZW5hYmxlKQoreworCWludCBlcnI7CisKKwlSRUdfV1Ioc21pLCBSVEw4MzY3Ql9QT1JUX0lTT0xBVElPTl9SRUcocG9ydCksCisJICAgICAgIChlbmFibGUpID8gUlRMODM2N0JfUE9SVFNfQUxMIDogMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MzY3Yl9zd19yZXNldF9taWJzKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkJICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkJICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBydGw4MzY2X3NtaSAqc21pID0gc3dfdG9fcnRsODM2Nl9zbWkoZGV2KTsKKworCXJldHVybiBydGw4MzY2X3NtaV9ybXdyKHNtaSwgUlRMODM2N0JfTUlCX0NUUkwwX1JFRygwKSwgMCwKKwkJCQlSVEw4MzY3Ql9NSUJfQ1RSTDBfR0xPQkFMX1JFU0VUX01BU0spOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjdiX3N3X2dldF9wb3J0X2xpbmsoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCQkgICAgaW50IHBvcnQsCisJCQkJICAgIHN0cnVjdCBzd2l0Y2hfcG9ydF9saW5rICpsaW5rKQoreworCXN0cnVjdCBydGw4MzY2X3NtaSAqc21pID0gc3dfdG9fcnRsODM2Nl9zbWkoZGV2KTsKKwl1MzIgZGF0YSA9IDA7CisJdTMyIHNwZWVkOworCisJaWYgKHBvcnQgPj0gUlRMODM2N0JfTlVNX1BPUlRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJ0bDgzNjZfc21pX3JlYWRfcmVnKHNtaSwgUlRMODM2N0JfUE9SVF9TVEFUVVNfUkVHKHBvcnQpLCAmZGF0YSk7CisKKwlsaW5rLT5saW5rID0gISEoZGF0YSAmIFJUTDgzNjdCX1BPUlRfU1RBVFVTX0xJTkspOworCWlmICghbGluay0+bGluaykKKwkJcmV0dXJuIDA7CisKKwlsaW5rLT5kdXBsZXggPSAhIShkYXRhICYgUlRMODM2N0JfUE9SVF9TVEFUVVNfRFVQTEVYKTsKKwlsaW5rLT5yeF9mbG93ID0gISEoZGF0YSAmIFJUTDgzNjdCX1BPUlRfU1RBVFVTX1JYUEFVU0UpOworCWxpbmstPnR4X2Zsb3cgPSAhIShkYXRhICYgUlRMODM2N0JfUE9SVF9TVEFUVVNfVFhQQVVTRSk7CisJbGluay0+YW5lZyA9ICEhKGRhdGEgJiBSVEw4MzY3Ql9QT1JUX1NUQVRVU19OV0FZKTsKKworCXNwZWVkID0gKGRhdGEgJiBSVEw4MzY3Ql9QT1JUX1NUQVRVU19TUEVFRF9NQVNLKTsKKwlzd2l0Y2ggKHNwZWVkKSB7CisJY2FzZSAwOgorCQlsaW5rLT5zcGVlZCA9IFNXSVRDSF9QT1JUX1NQRUVEXzEwOworCQlicmVhazsKKwljYXNlIDE6CisJCWxpbmstPnNwZWVkID0gU1dJVENIX1BPUlRfU1BFRURfMTAwOworCQlicmVhazsKKwljYXNlIDI6CisJCWxpbmstPnNwZWVkID0gU1dJVENIX1BPUlRfU1BFRURfMTAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbGluay0+c3BlZWQgPSBTV0lUQ0hfUE9SVF9TUEVFRF9VTktOT1dOOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MzY3Yl9zd19nZXRfbWF4X2xlbmd0aChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJCSAgICAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJCSAgICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSA9IHN3X3RvX3J0bDgzNjZfc21pKGRldik7CisJdTMyIGRhdGE7CisKKwlydGw4MzY2X3NtaV9yZWFkX3JlZyhzbWksIFJUTDgzNjdCX1NXQzBfUkVHLCAmZGF0YSk7CisJdmFsLT52YWx1ZS5pID0gKGRhdGEgJiBSVEw4MzY3Ql9TV0MwX01BWF9MRU5HVEhfTUFTSykgPj4KKwkJCVJUTDgzNjdCX1NXQzBfTUFYX0xFTkdUSF9TSElGVDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjdiX3N3X3NldF9tYXhfbGVuZ3RoKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkJICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkJICAgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBydGw4MzY2X3NtaSAqc21pID0gc3dfdG9fcnRsODM2Nl9zbWkoZGV2KTsKKwl1MzIgbWF4X2xlbjsKKworCXN3aXRjaCAodmFsLT52YWx1ZS5pKSB7CisJY2FzZSAwOgorCQltYXhfbGVuID0gUlRMODM2N0JfU1dDMF9NQVhfTEVOR1RIXzE1MjI7CisJCWJyZWFrOworCWNhc2UgMToKKwkJbWF4X2xlbiA9IFJUTDgzNjdCX1NXQzBfTUFYX0xFTkdUSF8xNTM2OworCQlicmVhazsKKwljYXNlIDI6CisJCW1heF9sZW4gPSBSVEw4MzY3Ql9TV0MwX01BWF9MRU5HVEhfMTU1MjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQltYXhfbGVuID0gUlRMODM2N0JfU1dDMF9NQVhfTEVOR1RIXzE2MDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcnRsODM2Nl9zbWlfcm13cihzbWksIFJUTDgzNjdCX1NXQzBfUkVHLAorCQkJICAgICAgICBSVEw4MzY3Ql9TV0MwX01BWF9MRU5HVEhfTUFTSywgbWF4X2xlbik7Cit9CisKKworc3RhdGljIGludCBydGw4MzY3Yl9zd19yZXNldF9wb3J0X21pYnMoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJCSAgICAgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBydGw4MzY2X3NtaSAqc21pID0gc3dfdG9fcnRsODM2Nl9zbWkoZGV2KTsKKwlpbnQgcG9ydDsKKworCXBvcnQgPSB2YWwtPnBvcnRfdmxhbjsKKwlpZiAocG9ydCA+PSBSVEw4MzY3Ql9OVU1fUE9SVFMpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHJ0bDgzNjZfc21pX3Jtd3Ioc21pLCBSVEw4MzY3Ql9NSUJfQ1RSTDBfUkVHKHBvcnQgLyA4KSwgMCwKKwkJCQlSVEw4MzY3Ql9NSUJfQ1RSTDBfUE9SVF9SRVNFVF9NQVNLKHBvcnQgJSA4KSk7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2N2Jfc3dfZ2V0X3BvcnRfc3RhdHMoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgaW50IHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN3aXRjaF9wb3J0X3N0YXRzICpzdGF0cykKK3sKKwlyZXR1cm4gKHJ0bDgzNjZfc3dfZ2V0X3BvcnRfc3RhdHMoZGV2LCBwb3J0LCBzdGF0cywKKwkJCQlSVEw4MzY3Ql9NSUJfVFhCX0lELCBSVEw4MzY3Ql9NSUJfUlhCX0lEKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3dpdGNoX2F0dHIgcnRsODM2N2JfZ2xvYmFsc1tdID0geworCXsKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9JTlQsCisJCS5uYW1lID0gImVuYWJsZV92bGFuIiwKKwkJLmRlc2NyaXB0aW9uID0gIkVuYWJsZSBWTEFOIG1vZGUiLAorCQkuc2V0ID0gcnRsODM2Nl9zd19zZXRfdmxhbl9lbmFibGUsCisJCS5nZXQgPSBydGw4MzY2X3N3X2dldF92bGFuX2VuYWJsZSwKKwkJLm1heCA9IDEsCisJCS5vZnMgPSAxCisJfSwgeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX0lOVCwKKwkJLm5hbWUgPSAiZW5hYmxlX3ZsYW40ayIsCisJCS5kZXNjcmlwdGlvbiA9ICJFbmFibGUgVkxBTiA0SyBtb2RlIiwKKwkJLnNldCA9IHJ0bDgzNjZfc3dfc2V0X3ZsYW5fZW5hYmxlLAorCQkuZ2V0ID0gcnRsODM2Nl9zd19nZXRfdmxhbl9lbmFibGUsCisJCS5tYXggPSAxLAorCQkub2ZzID0gMgorCX0sIHsKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9OT1ZBTCwKKwkJLm5hbWUgPSAicmVzZXRfbWlicyIsCisJCS5kZXNjcmlwdGlvbiA9ICJSZXNldCBhbGwgTUlCIGNvdW50ZXJzIiwKKwkJLnNldCA9IHJ0bDgzNjdiX3N3X3Jlc2V0X21pYnMsCisJfSwgeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX0lOVCwKKwkJLm5hbWUgPSAibWF4X2xlbmd0aCIsCisJCS5kZXNjcmlwdGlvbiA9ICJHZXQvU2V0IHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB2YWxpZCBwYWNrZXRzIgorCQkJICAgICAgICIoMDoxNTIyLCAxOjE1MzYsIDI6MTU1MiwgMzoxNjAwMCkiLAorCQkuc2V0ID0gcnRsODM2N2Jfc3dfc2V0X21heF9sZW5ndGgsCisJCS5nZXQgPSBydGw4MzY3Yl9zd19nZXRfbWF4X2xlbmd0aCwKKwkJLm1heCA9IDMsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBzd2l0Y2hfYXR0ciBydGw4MzY3Yl9wb3J0W10gPSB7CisJeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX05PVkFMLAorCQkubmFtZSA9ICJyZXNldF9taWIiLAorCQkuZGVzY3JpcHRpb24gPSAiUmVzZXQgc2luZ2xlIHBvcnQgTUlCIGNvdW50ZXJzIiwKKwkJLnNldCA9IHJ0bDgzNjdiX3N3X3Jlc2V0X3BvcnRfbWlicywKKwl9LCB7CisJCS50eXBlID0gU1dJVENIX1RZUEVfU1RSSU5HLAorCQkubmFtZSA9ICJtaWIiLAorCQkuZGVzY3JpcHRpb24gPSAiR2V0IE1JQiBjb3VudGVycyBmb3IgcG9ydCIsCisJCS5tYXggPSAzMywKKwkJLnNldCA9IE5VTEwsCisJCS5nZXQgPSBydGw4MzY2X3N3X2dldF9wb3J0X21pYiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzd2l0Y2hfYXR0ciBydGw4MzY3Yl92bGFuW10gPSB7CisJeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX1NUUklORywKKwkJLm5hbWUgPSAiaW5mbyIsCisJCS5kZXNjcmlwdGlvbiA9ICJHZXQgdmxhbiBpbmZvcm1hdGlvbiIsCisJCS5tYXggPSAxLAorCQkuc2V0ID0gTlVMTCwKKwkJLmdldCA9IHJ0bDgzNjZfc3dfZ2V0X3ZsYW5faW5mbywKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzd2l0Y2hfZGV2X29wcyBydGw4MzY3Yl9zd19vcHMgPSB7CisJLmF0dHJfZ2xvYmFsID0geworCQkuYXR0ciA9IHJ0bDgzNjdiX2dsb2JhbHMsCisJCS5uX2F0dHIgPSBBUlJBWV9TSVpFKHJ0bDgzNjdiX2dsb2JhbHMpLAorCX0sCisJLmF0dHJfcG9ydCA9IHsKKwkJLmF0dHIgPSBydGw4MzY3Yl9wb3J0LAorCQkubl9hdHRyID0gQVJSQVlfU0laRShydGw4MzY3Yl9wb3J0KSwKKwl9LAorCS5hdHRyX3ZsYW4gPSB7CisJCS5hdHRyID0gcnRsODM2N2JfdmxhbiwKKwkJLm5fYXR0ciA9IEFSUkFZX1NJWkUocnRsODM2N2JfdmxhbiksCisJfSwKKworCS5nZXRfdmxhbl9wb3J0cyA9IHJ0bDgzNjZfc3dfZ2V0X3ZsYW5fcG9ydHMsCisJLnNldF92bGFuX3BvcnRzID0gcnRsODM2Nl9zd19zZXRfdmxhbl9wb3J0cywKKwkuZ2V0X3BvcnRfcHZpZCA9IHJ0bDgzNjZfc3dfZ2V0X3BvcnRfcHZpZCwKKwkuc2V0X3BvcnRfcHZpZCA9IHJ0bDgzNjZfc3dfc2V0X3BvcnRfcHZpZCwKKwkucmVzZXRfc3dpdGNoID0gcnRsODM2Nl9zd19yZXNldF9zd2l0Y2gsCisJLmdldF9wb3J0X2xpbmsgPSBydGw4MzY3Yl9zd19nZXRfcG9ydF9saW5rLAorCS5nZXRfcG9ydF9zdGF0cyA9IHJ0bDgzNjdiX3N3X2dldF9wb3J0X3N0YXRzLAorfTsKKworc3RhdGljIGludCBydGw4MzY3Yl9zd2l0Y2hfaW5pdChzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSkKK3sKKwlzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2ID0gJnNtaS0+c3dfZGV2OworCWludCBlcnI7CisKKwlkZXYtPm5hbWUgPSAiUlRMODM2N0IiOworCWRldi0+Y3B1X3BvcnQgPSBzbWktPmNwdV9wb3J0OworCWRldi0+cG9ydHMgPSBSVEw4MzY3Ql9OVU1fUE9SVFM7CisJZGV2LT52bGFucyA9IFJUTDgzNjdCX05VTV9WSURTOworCWRldi0+b3BzID0gJnJ0bDgzNjdiX3N3X29wczsKKwlkZXYtPmFsaWFzID0gZGV2X25hbWUoc21pLT5wYXJlbnQpOworCisJZXJyID0gcmVnaXN0ZXJfc3dpdGNoKGRldiwgTlVMTCk7CisJaWYgKGVycikKKwkJZGV2X2VycihzbWktPnBhcmVudCwgInN3aXRjaCByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHJ0bDgzNjdiX3N3aXRjaF9jbGVhbnVwKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pKQoreworCXVucmVnaXN0ZXJfc3dpdGNoKCZzbWktPnN3X2Rldik7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2N2JfbWlpX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWcpCit7CisJc3RydWN0IHJ0bDgzNjZfc21pICpzbWkgPSBidXMtPnByaXY7CisJdTMyIHZhbCA9IDA7CisJaW50IGVycjsKKworCWVyciA9IHJ0bDgzNjdiX3JlYWRfcGh5X3JlZyhzbWksIGFkZHIsIHJlZywgJnZhbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIDB4ZmZmZjsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2N2JfbWlpX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnLCB1MTYgdmFsKQoreworCXN0cnVjdCBydGw4MzY2X3NtaSAqc21pID0gYnVzLT5wcml2OworCXUzMiB0OworCWludCBlcnI7CisKKwllcnIgPSBydGw4MzY3Yl93cml0ZV9waHlfcmVnKHNtaSwgYWRkciwgcmVnLCB2YWwpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBmbHVzaCB3cml0ZSAqLworCSh2b2lkKSBydGw4MzY3Yl9yZWFkX3BoeV9yZWcoc21pLCBhZGRyLCByZWcsICZ0KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2N2JfZGV0ZWN0KHN0cnVjdCBydGw4MzY2X3NtaSAqc21pKQoreworCWNvbnN0IGNoYXIgKmNoaXBfbmFtZTsKKwl1MzIgY2hpcF9udW07CisJdTMyIGNoaXBfdmVyOworCXUzMiBjaGlwX21vZGU7CisJaW50IHJldDsKKworCS8qIFRPRE86IGltcHJvdmUgY2hpcCBkZXRlY3Rpb24gKi8KKwlydGw4MzY2X3NtaV93cml0ZV9yZWcoc21pLCBSVEw4MzY3Ql9SVExfTUFHSUNfSURfUkVHLAorCQkJICAgICAgUlRMODM2N0JfUlRMX01BR0lDX0lEX1ZBTCk7CisKKwlyZXQgPSBydGw4MzY2X3NtaV9yZWFkX3JlZyhzbWksIFJUTDgzNjdCX0NISVBfTlVNQkVSX1JFRywgJmNoaXBfbnVtKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoc21pLT5wYXJlbnQsICJ1bmFibGUgdG8gcmVhZCAlcyByZWdpc3RlclxuIiwKKwkJCSJjaGlwIG51bWJlciIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHJ0bDgzNjZfc21pX3JlYWRfcmVnKHNtaSwgUlRMODM2N0JfQ0hJUF9WRVJfUkVHLCAmY2hpcF92ZXIpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihzbWktPnBhcmVudCwgInVuYWJsZSB0byByZWFkICVzIHJlZ2lzdGVyXG4iLAorCQkJImNoaXAgdmVyc2lvbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHJ0bDgzNjZfc21pX3JlYWRfcmVnKHNtaSwgUlRMODM2N0JfQ0hJUF9NT0RFX1JFRywgJmNoaXBfbW9kZSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKHNtaS0+cGFyZW50LCAidW5hYmxlIHRvIHJlYWQgJXMgcmVnaXN0ZXJcbiIsCisJCQkiY2hpcCBtb2RlIik7CisJCXJldHVybiByZXQ7CisJfQorCisJc3dpdGNoIChjaGlwX3ZlcikgeworCWNhc2UgMHgxMDAwOgorCQljaGlwX25hbWUgPSAiODM2N1JCIjsKKwkJYnJlYWs7CisJY2FzZSAweDEwMTA6CisJCWNoaXBfbmFtZSA9ICI4MzY3Ui1WQiI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoc21pLT5wYXJlbnQsCisJCQkidW5rbm93biBjaGlwIG51bTolMDR4IHZlcjolMDR4LCBtb2RlOiUwNHhcbiIsCisJCQljaGlwX251bSwgY2hpcF92ZXIsIGNoaXBfbW9kZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRldl9pbmZvKHNtaS0+cGFyZW50LCAiUlRMJXMgY2hpcCBmb3VuZFxuIiwgY2hpcF9uYW1lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHJ0bDgzNjZfc21pX29wcyBydGw4MzY3Yl9zbWlfb3BzID0geworCS5kZXRlY3QJCT0gcnRsODM2N2JfZGV0ZWN0LAorCS5yZXNldF9jaGlwCT0gcnRsODM2N2JfcmVzZXRfY2hpcCwKKwkuc2V0dXAJCT0gcnRsODM2N2Jfc2V0dXAsCisKKwkubWlpX3JlYWQJPSBydGw4MzY3Yl9taWlfcmVhZCwKKwkubWlpX3dyaXRlCT0gcnRsODM2N2JfbWlpX3dyaXRlLAorCisJLmdldF92bGFuX21jCT0gcnRsODM2N2JfZ2V0X3ZsYW5fbWMsCisJLnNldF92bGFuX21jCT0gcnRsODM2N2Jfc2V0X3ZsYW5fbWMsCisJLmdldF92bGFuXzRrCT0gcnRsODM2N2JfZ2V0X3ZsYW5fNGssCisJLnNldF92bGFuXzRrCT0gcnRsODM2N2Jfc2V0X3ZsYW5fNGssCisJLmdldF9tY19pbmRleAk9IHJ0bDgzNjdiX2dldF9tY19pbmRleCwKKwkuc2V0X21jX2luZGV4CT0gcnRsODM2N2Jfc2V0X21jX2luZGV4LAorCS5nZXRfbWliX2NvdW50ZXIgPSBydGw4MzY3Yl9nZXRfbWliX2NvdW50ZXIsCisJLmlzX3ZsYW5fdmFsaWQJPSBydGw4MzY3Yl9pc192bGFuX3ZhbGlkLAorCS5lbmFibGVfdmxhbgk9IHJ0bDgzNjdiX2VuYWJsZV92bGFuLAorCS5lbmFibGVfdmxhbjRrCT0gcnRsODM2N2JfZW5hYmxlX3ZsYW40aywKKwkuZW5hYmxlX3BvcnQJPSBydGw4MzY3Yl9lbmFibGVfcG9ydCwKK307CisKK3N0YXRpYyBpbnQgIHJ0bDgzNjdiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJ0bDgzNjZfc21pICpzbWk7CisJaW50IGVycjsKKworCXNtaSA9IHJ0bDgzNjZfc21pX3Byb2JlKHBkZXYpOworCWlmIChJU19FUlIoc21pKSkKKwkJcmV0dXJuIFBUUl9FUlIoc21pKTsKKworCXNtaS0+Y2xrX2RlbGF5ID0gMTUwMDsKKwlzbWktPmNtZF9yZWFkID0gMHhiOTsKKwlzbWktPmNtZF93cml0ZSA9IDB4Yjg7CisJc21pLT5vcHMgPSAmcnRsODM2N2Jfc21pX29wczsKKwlzbWktPm51bV9wb3J0cyA9IFJUTDgzNjdCX05VTV9QT1JUUzsKKwlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIocGRldi0+ZGV2Lm9mX25vZGUsICJjcHVfcG9ydCIsICZzbWktPmNwdV9wb3J0KQorCSAgICB8fCBzbWktPmNwdV9wb3J0ID49IHNtaS0+bnVtX3BvcnRzKQorCQlzbWktPmNwdV9wb3J0ID0gUlRMODM2N0JfQ1BVX1BPUlRfTlVNOworCXNtaS0+bnVtX3ZsYW5fbWMgPSBSVEw4MzY3Ql9OVU1fVkxBTlM7CisJc21pLT5taWJfY291bnRlcnMgPSBydGw4MzY3Yl9taWJfY291bnRlcnM7CisJc21pLT5udW1fbWliX2NvdW50ZXJzID0gQVJSQVlfU0laRShydGw4MzY3Yl9taWJfY291bnRlcnMpOworCisJZXJyID0gcnRsODM2Nl9zbWlfaW5pdChzbWkpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2ZyZWVfc21pOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgc21pKTsKKworCWVyciA9IHJ0bDgzNjdiX3N3aXRjaF9pbml0KHNtaSk7CisJaWYgKGVycikKKwkJZ290byBlcnJfY2xlYXJfZHJ2ZGF0YTsKKworCXJldHVybiAwOworCisgZXJyX2NsZWFyX2RydmRhdGE6CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJcnRsODM2Nl9zbWlfY2xlYW51cChzbWkpOworIGVycl9mcmVlX3NtaToKKwlrZnJlZShzbWkpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2N2JfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJ0bDgzNjZfc21pICpzbWkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmIChzbWkpIHsKKwkJcnRsODM2N2Jfc3dpdGNoX2NsZWFudXAoc21pKTsKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJCXJ0bDgzNjZfc21pX2NsZWFudXAoc21pKTsKKwkJa2ZyZWUoc21pKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcnRsODM2N2Jfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcnRsODM2Nl9zbWkgKnNtaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKHNtaSkKKwkJcnRsODM2N2JfcmVzZXRfY2hpcChzbWkpOworfQorCisjaWZkZWYgQ09ORklHX09GCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBydGw4MzY3Yl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAicmVhbHRlayxydGw4MzY3YiIgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBydGw4MzY3Yl9tYXRjaCk7CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcnRsODM2N2JfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9IFJUTDgzNjdCX0RSSVZFUl9OQU1FLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisjaWZkZWYgQ09ORklHX09GCisJCS5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihydGw4MzY3Yl9tYXRjaCksCisjZW5kaWYKKwl9LAorCS5wcm9iZQkJPSBydGw4MzY3Yl9wcm9iZSwKKwkucmVtb3ZlCQk9IHJ0bDgzNjdiX3JlbW92ZSwKKwkuc2h1dGRvd24JPSBydGw4MzY3Yl9zaHV0ZG93biwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIocnRsODM2N2JfZHJpdmVyKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJSZWFsdGVrIFJUTDgzNjdCIGV0aGVybmV0IHN3aXRjaCBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkdhYm9yIEp1aG9zIDxqdWhvc2dAb3BlbndydC5vcmc+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgUlRMODM2N0JfRFJJVkVSX05BTUUpOworCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL25ldC9waHkvc3djb25maWcuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9zd2NvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MzRlNTcKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL25ldC9waHkvc3djb25maWcuYwpAQCAtMCwwICsxLDEyNDIgQEAKKy8qCisgKiBzd2NvbmZpZy5jOiBTd2l0Y2ggY29uZmlndXJhdGlvbiBBUEkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmLmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvc3dpdGNoLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8dWFwaS9saW51eC9taWkuaD4KKworI2RlZmluZSBTV0NPTkZJR19ERVZOQU1FCSJzd2l0Y2glZCIKKworI2luY2x1ZGUgInN3Y29uZmlnX2xlZHMuYyIKKworTU9EVUxFX0FVVEhPUigiRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgaW50IHN3ZGV2X2lkOworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgc3dkZXZzOworc3RhdGljIERFRklORV9NVVRFWChzd2RldnNfbG9jayk7CitzdHJ1Y3Qgc3djb25maWdfY2FsbGJhY2s7CisKK3N0cnVjdCBzd2NvbmZpZ19jYWxsYmFjayB7CisJc3RydWN0IHNrX2J1ZmYgKm1zZzsKKwlzdHJ1Y3QgZ2VubG1zZ2hkciAqaGRyOworCXN0cnVjdCBnZW5sX2luZm8gKmluZm87CisJaW50IGNtZDsKKworCS8qIGNhbGxiYWNrIGZvciBmaWxsaW5nIGluIHRoZSBtZXNzYWdlIGRhdGEgKi8KKwlpbnQgKCpmaWxsKShzdHJ1Y3Qgc3djb25maWdfY2FsbGJhY2sgKmNiLCB2b2lkICphcmcpOworCisJLyogY2FsbGJhY2sgZm9yIGNsb3NpbmcgdGhlIG1lc3NhZ2UgYmVmb3JlIHNlbmRpbmcgaXQgKi8KKwlpbnQgKCpjbG9zZSkoc3RydWN0IHN3Y29uZmlnX2NhbGxiYWNrICpjYiwgdm9pZCAqYXJnKTsKKworCXN0cnVjdCBubGF0dHIgKm5lc3RbNF07CisJaW50IGFyZ3NbNF07Cit9OworCisvKiBkZWZhdWx0cyAqLworCitzdGF0aWMgaW50Citzd2NvbmZpZ19nZXRfdmxhbl9wb3J0cyhzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQlzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCWludCByZXQ7CisJaWYgKHZhbC0+cG9ydF92bGFuID49IGRldi0+dmxhbnMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFkZXYtPm9wcy0+Z2V0X3ZsYW5fcG9ydHMpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXJldCA9IGRldi0+b3BzLT5nZXRfdmxhbl9wb3J0cyhkZXYsIHZhbCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorc3djb25maWdfc2V0X3ZsYW5fcG9ydHMoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3Qgc3dpdGNoX3BvcnQgKnBvcnRzID0gdmFsLT52YWx1ZS5wb3J0czsKKwljb25zdCBzdHJ1Y3Qgc3dpdGNoX2Rldl9vcHMgKm9wcyA9IGRldi0+b3BzOworCWludCBpOworCisJaWYgKHZhbC0+cG9ydF92bGFuID49IGRldi0+dmxhbnMpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogdmFsaWRhdGUgcG9ydHMgKi8KKwlpZiAodmFsLT5sZW4gPiBkZXYtPnBvcnRzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghb3BzLT5zZXRfdmxhbl9wb3J0cykKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJZm9yIChpID0gMDsgaSA8IHZhbC0+bGVuOyBpKyspIHsKKwkJaWYgKHBvcnRzW2ldLmlkID49IGRldi0+cG9ydHMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAob3BzLT5zZXRfcG9ydF9wdmlkICYmCisJCSAgICAhKHBvcnRzW2ldLmZsYWdzICYgKDEgPDwgU1dJVENIX1BPUlRfRkxBR19UQUdHRUQpKSkKKwkJCW9wcy0+c2V0X3BvcnRfcHZpZChkZXYsIHBvcnRzW2ldLmlkLCB2YWwtPnBvcnRfdmxhbik7CisJfQorCisJcmV0dXJuIG9wcy0+c2V0X3ZsYW5fcG9ydHMoZGV2LCB2YWwpOworfQorCitzdGF0aWMgaW50Citzd2NvbmZpZ19zZXRfcHZpZChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQlzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCWlmICh2YWwtPnBvcnRfdmxhbiA+PSBkZXYtPnBvcnRzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghZGV2LT5vcHMtPnNldF9wb3J0X3B2aWQpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXJldHVybiBkZXYtPm9wcy0+c2V0X3BvcnRfcHZpZChkZXYsIHZhbC0+cG9ydF92bGFuLCB2YWwtPnZhbHVlLmkpOworfQorCitzdGF0aWMgaW50Citzd2NvbmZpZ19nZXRfcHZpZChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQlzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCWlmICh2YWwtPnBvcnRfdmxhbiA+PSBkZXYtPnBvcnRzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghZGV2LT5vcHMtPmdldF9wb3J0X3B2aWQpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXJldHVybiBkZXYtPm9wcy0+Z2V0X3BvcnRfcHZpZChkZXYsIHZhbC0+cG9ydF92bGFuLCAmdmFsLT52YWx1ZS5pKTsKK30KKworc3RhdGljIGludAorc3djb25maWdfc2V0X2xpbmsoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlpZiAoIWRldi0+b3BzLT5zZXRfcG9ydF9saW5rKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlyZXR1cm4gZGV2LT5vcHMtPnNldF9wb3J0X2xpbmsoZGV2LCB2YWwtPnBvcnRfdmxhbiwgdmFsLT52YWx1ZS5saW5rKTsKK30KKworc3RhdGljIGludAorc3djb25maWdfZ2V0X2xpbmsoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3Qgc3dpdGNoX3BvcnRfbGluayAqbGluayA9IHZhbC0+dmFsdWUubGluazsKKworCWlmICh2YWwtPnBvcnRfdmxhbiA+PSBkZXYtPnBvcnRzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghZGV2LT5vcHMtPmdldF9wb3J0X2xpbmspCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCW1lbXNldChsaW5rLCAwLCBzaXplb2YoKmxpbmspKTsKKwlyZXR1cm4gZGV2LT5vcHMtPmdldF9wb3J0X2xpbmsoZGV2LCB2YWwtPnBvcnRfdmxhbiwgbGluayk7Cit9CisKK3N0YXRpYyBpbnQKK3N3Y29uZmlnX2FwcGx5X2NvbmZpZyhzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQlzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCS8qIGRvbid0IGNvbXBsYWluIGlmIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHN3aXRjaCBkcml2ZXIgKi8KKwlpZiAoIWRldi0+b3BzLT5hcHBseV9jb25maWcpCisJCXJldHVybiAwOworCisJcmV0dXJuIGRldi0+b3BzLT5hcHBseV9jb25maWcoZGV2KTsKK30KKworc3RhdGljIGludAorc3djb25maWdfcmVzZXRfc3dpdGNoKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCXN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJLyogZG9uJ3QgY29tcGxhaW4gaWYgbm90IHN1cHBvcnRlZCBieSB0aGUgc3dpdGNoIGRyaXZlciAqLworCWlmICghZGV2LT5vcHMtPnJlc2V0X3N3aXRjaCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gZGV2LT5vcHMtPnJlc2V0X3N3aXRjaChkZXYpOworfQorCitlbnVtIGdsb2JhbF9kZWZhdWx0cyB7CisJR0xPQkFMX0FQUExZLAorCUdMT0JBTF9SRVNFVCwKK307CisKK2VudW0gdmxhbl9kZWZhdWx0cyB7CisJVkxBTl9QT1JUUywKK307CisKK2VudW0gcG9ydF9kZWZhdWx0cyB7CisJUE9SVF9QVklELAorCVBPUlRfTElOSywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3dpdGNoX2F0dHIgZGVmYXVsdF9nbG9iYWxbXSA9IHsKKwlbR0xPQkFMX0FQUExZXSA9IHsKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9OT1ZBTCwKKwkJLm5hbWUgPSAiYXBwbHkiLAorCQkuZGVzY3JpcHRpb24gPSAiQWN0aXZhdGUgY2hhbmdlcyBpbiB0aGUgaGFyZHdhcmUiLAorCQkuc2V0ID0gc3djb25maWdfYXBwbHlfY29uZmlnLAorCX0sCisJW0dMT0JBTF9SRVNFVF0gPSB7CisJCS50eXBlID0gU1dJVENIX1RZUEVfTk9WQUwsCisJCS5uYW1lID0gInJlc2V0IiwKKwkJLmRlc2NyaXB0aW9uID0gIlJlc2V0IHRoZSBzd2l0Y2giLAorCQkuc2V0ID0gc3djb25maWdfcmVzZXRfc3dpdGNoLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3dpdGNoX2F0dHIgZGVmYXVsdF9wb3J0W10gPSB7CisJW1BPUlRfUFZJRF0gPSB7CisJCS50eXBlID0gU1dJVENIX1RZUEVfSU5ULAorCQkubmFtZSA9ICJwdmlkIiwKKwkJLmRlc2NyaXB0aW9uID0gIlByaW1hcnkgVkxBTiBJRCIsCisJCS5zZXQgPSBzd2NvbmZpZ19zZXRfcHZpZCwKKwkJLmdldCA9IHN3Y29uZmlnX2dldF9wdmlkLAorCX0sCisJW1BPUlRfTElOS10gPSB7CisJCS50eXBlID0gU1dJVENIX1RZUEVfTElOSywKKwkJLm5hbWUgPSAibGluayIsCisJCS5kZXNjcmlwdGlvbiA9ICJHZXQgcG9ydCBsaW5rIGluZm9ybWF0aW9uIiwKKwkJLnNldCA9IHN3Y29uZmlnX3NldF9saW5rLAorCQkuZ2V0ID0gc3djb25maWdfZ2V0X2xpbmssCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBzd2l0Y2hfYXR0ciBkZWZhdWx0X3ZsYW5bXSA9IHsKKwlbVkxBTl9QT1JUU10gPSB7CisJCS50eXBlID0gU1dJVENIX1RZUEVfUE9SVFMsCisJCS5uYW1lID0gInBvcnRzIiwKKwkJLmRlc2NyaXB0aW9uID0gIlZMQU4gcG9ydCBtYXBwaW5nIiwKKwkJLnNldCA9IHN3Y29uZmlnX3NldF92bGFuX3BvcnRzLAorCQkuZ2V0ID0gc3djb25maWdfZ2V0X3ZsYW5fcG9ydHMsCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKgorc3djb25maWdfZmluZF9hdHRyX2J5X25hbWUoY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRybGlzdCAqYWxpc3QsCisJCQkJY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBhbGlzdC0+bl9hdHRyOyBpKyspCisJCWlmIChzdHJjbXAobmFtZSwgYWxpc3QtPmF0dHJbaV0ubmFtZSkgPT0gMCkKKwkJCXJldHVybiAmYWxpc3QtPmF0dHJbaV07CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgc3djb25maWdfZGVmYXVsdHNfaW5pdChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2KQoreworCWNvbnN0IHN0cnVjdCBzd2l0Y2hfZGV2X29wcyAqb3BzID0gZGV2LT5vcHM7CisKKwlkZXYtPmRlZl9nbG9iYWwgPSAwOworCWRldi0+ZGVmX3ZsYW4gPSAwOworCWRldi0+ZGVmX3BvcnQgPSAwOworCisJaWYgKG9wcy0+Z2V0X3ZsYW5fcG9ydHMgfHwgb3BzLT5zZXRfdmxhbl9wb3J0cykKKwkJc2V0X2JpdChWTEFOX1BPUlRTLCAmZGV2LT5kZWZfdmxhbik7CisKKwlpZiAob3BzLT5nZXRfcG9ydF9wdmlkIHx8IG9wcy0+c2V0X3BvcnRfcHZpZCkKKwkJc2V0X2JpdChQT1JUX1BWSUQsICZkZXYtPmRlZl9wb3J0KTsKKworCWlmIChvcHMtPmdldF9wb3J0X2xpbmsgJiYKKwkgICAgIXN3Y29uZmlnX2ZpbmRfYXR0cl9ieV9uYW1lKCZvcHMtPmF0dHJfcG9ydCwgImxpbmsiKSkKKwkJc2V0X2JpdChQT1JUX0xJTkssICZkZXYtPmRlZl9wb3J0KTsKKworCS8qIGFsd2F5cyBwcmVzZW50LCBjYW4gYmUgbm8tb3AgKi8KKwlzZXRfYml0KEdMT0JBTF9BUFBMWSwgJmRldi0+ZGVmX2dsb2JhbCk7CisJc2V0X2JpdChHTE9CQUxfUkVTRVQsICZkZXYtPmRlZl9nbG9iYWwpOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgc3dpdGNoX2ZhbTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHN3aXRjaF9wb2xpY3lbU1dJVENIX0FUVFJfTUFYKzFdID0geworCVtTV0lUQ0hfQVRUUl9JRF0gPSB7IC50eXBlID0gTkxBX1UzMiB9LAorCVtTV0lUQ0hfQVRUUl9PUF9JRF0gPSB7IC50eXBlID0gTkxBX1UzMiB9LAorCVtTV0lUQ0hfQVRUUl9PUF9QT1JUXSA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCisJW1NXSVRDSF9BVFRSX09QX1ZMQU5dID0geyAudHlwZSA9IE5MQV9VMzIgfSwKKwlbU1dJVENIX0FUVFJfT1BfVkFMVUVfSU5UXSA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCisJW1NXSVRDSF9BVFRSX09QX1ZBTFVFX1NUUl0gPSB7IC50eXBlID0gTkxBX05VTF9TVFJJTkcgfSwKKwlbU1dJVENIX0FUVFJfT1BfVkFMVUVfUE9SVFNdID0geyAudHlwZSA9IE5MQV9ORVNURUQgfSwKKwlbU1dJVENIX0FUVFJfVFlQRV0gPSB7IC50eXBlID0gTkxBX1UzMiB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHBvcnRfcG9saWN5W1NXSVRDSF9QT1JUX0FUVFJfTUFYKzFdID0geworCVtTV0lUQ0hfUE9SVF9JRF0gPSB7IC50eXBlID0gTkxBX1UzMiB9LAorCVtTV0lUQ0hfUE9SVF9GTEFHX1RBR0dFRF0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbmxhX3BvbGljeSBsaW5rX3BvbGljeVtTV0lUQ0hfTElOS19BVFRSX01BWF0gPSB7CisJW1NXSVRDSF9MSU5LX0ZMQUdfRFVQTEVYXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAorCVtTV0lUQ0hfTElOS19GTEFHX0FORUddID0geyAudHlwZSA9IE5MQV9GTEFHIH0sCisJW1NXSVRDSF9MSU5LX1NQRUVEXSA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQKK3N3Y29uZmlnX2xvY2sodm9pZCkKK3sKKwltdXRleF9sb2NrKCZzd2RldnNfbG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc3djb25maWdfdW5sb2NrKHZvaWQpCit7CisJbXV0ZXhfdW5sb2NrKCZzd2RldnNfbG9jayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3dpdGNoX2RldiAqCitzd2NvbmZpZ19nZXRfZGV2KHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3RydWN0IHN3aXRjaF9kZXYgKmRldiA9IE5VTEw7CisJc3RydWN0IHN3aXRjaF9kZXYgKnA7CisJaW50IGlkOworCisJaWYgKCFpbmZvLT5hdHRyc1tTV0lUQ0hfQVRUUl9JRF0pCisJCWdvdG8gZG9uZTsKKworCWlkID0gbmxhX2dldF91MzIoaW5mby0+YXR0cnNbU1dJVENIX0FUVFJfSURdKTsKKwlzd2NvbmZpZ19sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmc3dkZXZzLCBkZXZfbGlzdCkgeworCQlpZiAoaWQgIT0gcC0+aWQpCisJCQljb250aW51ZTsKKworCQlkZXYgPSBwOworCQlicmVhazsKKwl9CisJaWYgKGRldikKKwkJbXV0ZXhfbG9jaygmZGV2LT5zd19tdXRleCk7CisJZWxzZQorCQlwcl9kZWJ1ZygiZGV2aWNlICVkIG5vdCBmb3VuZFxuIiwgaWQpOworCXN3Y29uZmlnX3VubG9jaygpOworZG9uZToKKwlyZXR1cm4gZGV2OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3N3Y29uZmlnX3B1dF9kZXYoc3RydWN0IHN3aXRjaF9kZXYgKmRldikKK3sKKwltdXRleF91bmxvY2soJmRldi0+c3dfbXV0ZXgpOworfQorCitzdGF0aWMgaW50Citzd2NvbmZpZ19kdW1wX2F0dHIoc3RydWN0IHN3Y29uZmlnX2NhbGxiYWNrICpjYiwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBzd2l0Y2hfYXR0ciAqb3AgPSBhcmc7CisJc3RydWN0IGdlbmxfaW5mbyAqaW5mbyA9IGNiLT5pbmZvOworCXN0cnVjdCBza19idWZmICptc2cgPSBjYi0+bXNnOworCWludCBpZCA9IGNiLT5hcmdzWzBdOworCXZvaWQgKmhkcjsKKworCWhkciA9IGdlbmxtc2dfcHV0KG1zZywgaW5mby0+c25kX3BvcnRpZCwgaW5mby0+c25kX3NlcSwgJnN3aXRjaF9mYW0sCisJCQlOTE1fRl9NVUxUSSwgU1dJVENIX0NNRF9ORVdfQVRUUik7CisJaWYgKElTX0VSUihoZHIpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAobmxhX3B1dF91MzIobXNnLCBTV0lUQ0hfQVRUUl9PUF9JRCwgaWQpKQorCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKwlpZiAobmxhX3B1dF91MzIobXNnLCBTV0lUQ0hfQVRUUl9PUF9UWVBFLCBvcC0+dHlwZSkpCisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCWlmIChubGFfcHV0X3N0cmluZyhtc2csIFNXSVRDSF9BVFRSX09QX05BTUUsIG9wLT5uYW1lKSkKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisJaWYgKG9wLT5kZXNjcmlwdGlvbikKKwkJaWYgKG5sYV9wdXRfc3RyaW5nKG1zZywgU1dJVENIX0FUVFJfT1BfREVTQ1JJUFRJT04sCisJCQlvcC0+ZGVzY3JpcHRpb24pKQorCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKKwlnZW5sbXNnX2VuZChtc2csIGhkcik7CisJcmV0dXJuIG1zZy0+bGVuOworbmxhX3B1dF9mYWlsdXJlOgorCWdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTsKKwlyZXR1cm4gLUVNU0dTSVpFOworfQorCisvKiBzcHJlYWQgbXVsdGlwYXJ0IG1lc3NhZ2VzIGFjcm9zcyBtdWx0aXBsZSBtZXNzYWdlIGJ1ZmZlcnMgKi8KK3N0YXRpYyBpbnQKK3N3Y29uZmlnX3NlbmRfbXVsdGlwYXJ0KHN0cnVjdCBzd2NvbmZpZ19jYWxsYmFjayAqY2IsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgZ2VubF9pbmZvICppbmZvID0gY2ItPmluZm87CisJaW50IHJlc3RhcnQgPSAwOworCWludCBlcnI7CisKKwlkbyB7CisJCWlmICghY2ItPm1zZykgeworCQkJY2ItPm1zZyA9IG5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoY2ItPm1zZyA9PSBOVUxMKQorCQkJCWdvdG8gZXJyb3I7CisJCX0KKworCQlpZiAoIShjYi0+ZmlsbChjYiwgYXJnKSA8IDApKQorCQkJYnJlYWs7CisKKwkJLyogZmlsbCBmYWlsZWQsIGNoZWNrIGlmIHRoaXMgd2FzIGFscmVhZHkgdGhlIHNlY29uZCBhdHRlbXB0ICovCisJCWlmIChyZXN0YXJ0KQorCQkJZ290byBlcnJvcjsKKworCQkvKiB0cnkgYWdhaW4gaW4gYSBuZXcgbWVzc2FnZSwgc2VuZCB0aGUgY3VycmVudCBvbmUgKi8KKwkJcmVzdGFydCA9IDE7CisJCWlmIChjYi0+Y2xvc2UpIHsKKwkJCWlmIChjYi0+Y2xvc2UoY2IsIGFyZykgPCAwKQorCQkJCWdvdG8gZXJyb3I7CisJCX0KKwkJZXJyID0gZ2VubG1zZ19yZXBseShjYi0+bXNnLCBpbmZvKTsKKwkJY2ItPm1zZyA9IE5VTEw7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnJvcjsKKworCX0gd2hpbGUgKHJlc3RhcnQpOworCisJcmV0dXJuIDA7CisKK2Vycm9yOgorCWlmIChjYi0+bXNnKQorCQlubG1zZ19mcmVlKGNiLT5tc2cpOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludAorc3djb25maWdfbGlzdF9hdHRycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQoreworCXN0cnVjdCBnZW5sbXNnaGRyICpoZHIgPSBubG1zZ19kYXRhKGluZm8tPm5saGRyKTsKKwljb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHJsaXN0ICphbGlzdDsKKwlzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2OworCXN0cnVjdCBzd2NvbmZpZ19jYWxsYmFjayBjYjsKKwlpbnQgZXJyID0gLUVJTlZBTDsKKwlpbnQgaTsKKworCS8qIGRlZmF1bHRzICovCisJc3RydWN0IHN3aXRjaF9hdHRyICpkZWZfbGlzdDsKKwl1bnNpZ25lZCBsb25nICpkZWZfYWN0aXZlOworCWludCBuX2RlZjsKKworCWRldiA9IHN3Y29uZmlnX2dldF9kZXYoaW5mbyk7CisJaWYgKCFkZXYpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChoZHItPmNtZCkgeworCWNhc2UgU1dJVENIX0NNRF9MSVNUX0dMT0JBTDoKKwkJYWxpc3QgPSAmZGV2LT5vcHMtPmF0dHJfZ2xvYmFsOworCQlkZWZfbGlzdCA9IGRlZmF1bHRfZ2xvYmFsOworCQlkZWZfYWN0aXZlID0gJmRldi0+ZGVmX2dsb2JhbDsKKwkJbl9kZWYgPSBBUlJBWV9TSVpFKGRlZmF1bHRfZ2xvYmFsKTsKKwkJYnJlYWs7CisJY2FzZSBTV0lUQ0hfQ01EX0xJU1RfVkxBTjoKKwkJYWxpc3QgPSAmZGV2LT5vcHMtPmF0dHJfdmxhbjsKKwkJZGVmX2xpc3QgPSBkZWZhdWx0X3ZsYW47CisJCWRlZl9hY3RpdmUgPSAmZGV2LT5kZWZfdmxhbjsKKwkJbl9kZWYgPSBBUlJBWV9TSVpFKGRlZmF1bHRfdmxhbik7CisJCWJyZWFrOworCWNhc2UgU1dJVENIX0NNRF9MSVNUX1BPUlQ6CisJCWFsaXN0ID0gJmRldi0+b3BzLT5hdHRyX3BvcnQ7CisJCWRlZl9saXN0ID0gZGVmYXVsdF9wb3J0OworCQlkZWZfYWN0aXZlID0gJmRldi0+ZGVmX3BvcnQ7CisJCW5fZGVmID0gQVJSQVlfU0laRShkZWZhdWx0X3BvcnQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlXQVJOX09OKDEpOworCQlnb3RvIG91dDsKKwl9CisKKwltZW1zZXQoJmNiLCAwLCBzaXplb2YoY2IpKTsKKwljYi5pbmZvID0gaW5mbzsKKwljYi5maWxsID0gc3djb25maWdfZHVtcF9hdHRyOworCWZvciAoaSA9IDA7IGkgPCBhbGlzdC0+bl9hdHRyOyBpKyspIHsKKwkJaWYgKGFsaXN0LT5hdHRyW2ldLmRpc2FibGVkKQorCQkJY29udGludWU7CisJCWNiLmFyZ3NbMF0gPSBpOworCQllcnIgPSBzd2NvbmZpZ19zZW5kX211bHRpcGFydCgmY2IsICh2b2lkICopICZhbGlzdC0+YXR0cltpXSk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBkZWZhdWx0cyAqLworCWZvciAoaSA9IDA7IGkgPCBuX2RlZjsgaSsrKSB7CisJCWlmICghdGVzdF9iaXQoaSwgZGVmX2FjdGl2ZSkpCisJCQljb250aW51ZTsKKwkJY2IuYXJnc1swXSA9IFNXSVRDSF9BVFRSX0RFRkFVTFRTX09GRlNFVCArIGk7CisJCWVyciA9IHN3Y29uZmlnX3NlbmRfbXVsdGlwYXJ0KCZjYiwgKHZvaWQgKikgJmRlZl9saXN0W2ldKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVycm9yOworCX0KKwlzd2NvbmZpZ19wdXRfZGV2KGRldik7CisKKwlpZiAoIWNiLm1zZykKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gZ2VubG1zZ19yZXBseShjYi5tc2csIGluZm8pOworCitlcnJvcjoKKwlpZiAoY2IubXNnKQorCQlubG1zZ19mcmVlKGNiLm1zZyk7CitvdXQ6CisJc3djb25maWdfcHV0X2RldihkZXYpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKgorc3djb25maWdfbG9va3VwX2F0dHIoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbywKKwkJc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgZ2VubG1zZ2hkciAqaGRyID0gbmxtc2dfZGF0YShpbmZvLT5ubGhkcik7CisJY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRybGlzdCAqYWxpc3Q7CisJY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgYXR0cl9pZDsKKworCS8qIGRlZmF1bHRzICovCisJc3RydWN0IHN3aXRjaF9hdHRyICpkZWZfbGlzdDsKKwl1bnNpZ25lZCBsb25nICpkZWZfYWN0aXZlOworCWludCBuX2RlZjsKKworCWlmICghaW5mby0+YXR0cnNbU1dJVENIX0FUVFJfT1BfSURdKQorCQlnb3RvIGRvbmU7CisKKwlzd2l0Y2ggKGhkci0+Y21kKSB7CisJY2FzZSBTV0lUQ0hfQ01EX1NFVF9HTE9CQUw6CisJY2FzZSBTV0lUQ0hfQ01EX0dFVF9HTE9CQUw6CisJCWFsaXN0ID0gJmRldi0+b3BzLT5hdHRyX2dsb2JhbDsKKwkJZGVmX2xpc3QgPSBkZWZhdWx0X2dsb2JhbDsKKwkJZGVmX2FjdGl2ZSA9ICZkZXYtPmRlZl9nbG9iYWw7CisJCW5fZGVmID0gQVJSQVlfU0laRShkZWZhdWx0X2dsb2JhbCk7CisJCWJyZWFrOworCWNhc2UgU1dJVENIX0NNRF9TRVRfVkxBTjoKKwljYXNlIFNXSVRDSF9DTURfR0VUX1ZMQU46CisJCWFsaXN0ID0gJmRldi0+b3BzLT5hdHRyX3ZsYW47CisJCWRlZl9saXN0ID0gZGVmYXVsdF92bGFuOworCQlkZWZfYWN0aXZlID0gJmRldi0+ZGVmX3ZsYW47CisJCW5fZGVmID0gQVJSQVlfU0laRShkZWZhdWx0X3ZsYW4pOworCQlpZiAoIWluZm8tPmF0dHJzW1NXSVRDSF9BVFRSX09QX1ZMQU5dKQorCQkJZ290byBkb25lOworCQl2YWwtPnBvcnRfdmxhbiA9IG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW1NXSVRDSF9BVFRSX09QX1ZMQU5dKTsKKwkJaWYgKHZhbC0+cG9ydF92bGFuID49IGRldi0+dmxhbnMpCisJCQlnb3RvIGRvbmU7CisJCWJyZWFrOworCWNhc2UgU1dJVENIX0NNRF9TRVRfUE9SVDoKKwljYXNlIFNXSVRDSF9DTURfR0VUX1BPUlQ6CisJCWFsaXN0ID0gJmRldi0+b3BzLT5hdHRyX3BvcnQ7CisJCWRlZl9saXN0ID0gZGVmYXVsdF9wb3J0OworCQlkZWZfYWN0aXZlID0gJmRldi0+ZGVmX3BvcnQ7CisJCW5fZGVmID0gQVJSQVlfU0laRShkZWZhdWx0X3BvcnQpOworCQlpZiAoIWluZm8tPmF0dHJzW1NXSVRDSF9BVFRSX09QX1BPUlRdKQorCQkJZ290byBkb25lOworCQl2YWwtPnBvcnRfdmxhbiA9IG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW1NXSVRDSF9BVFRSX09QX1BPUlRdKTsKKwkJaWYgKHZhbC0+cG9ydF92bGFuID49IGRldi0+cG9ydHMpCisJCQlnb3RvIGRvbmU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT04oMSk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoIWFsaXN0KQorCQlnb3RvIGRvbmU7CisKKwlhdHRyX2lkID0gbmxhX2dldF91MzIoaW5mby0+YXR0cnNbU1dJVENIX0FUVFJfT1BfSURdKTsKKwlpZiAoYXR0cl9pZCA+PSBTV0lUQ0hfQVRUUl9ERUZBVUxUU19PRkZTRVQpIHsKKwkJYXR0cl9pZCAtPSBTV0lUQ0hfQVRUUl9ERUZBVUxUU19PRkZTRVQ7CisJCWlmIChhdHRyX2lkID49IG5fZGVmKQorCQkJZ290byBkb25lOworCQlpZiAoIXRlc3RfYml0KGF0dHJfaWQsIGRlZl9hY3RpdmUpKQorCQkJZ290byBkb25lOworCQlhdHRyID0gJmRlZl9saXN0W2F0dHJfaWRdOworCX0gZWxzZSB7CisJCWlmIChhdHRyX2lkID49IGFsaXN0LT5uX2F0dHIpCisJCQlnb3RvIGRvbmU7CisJCWF0dHIgPSAmYWxpc3QtPmF0dHJbYXR0cl9pZF07CisJfQorCisJaWYgKGF0dHItPmRpc2FibGVkKQorCQlhdHRyID0gTlVMTDsKKworZG9uZToKKwlpZiAoIWF0dHIpCisJCXByX2RlYnVnKCJhdHRyaWJ1dGUgbG9va3VwIGZhaWxlZFxuIik7CisJdmFsLT5hdHRyID0gYXR0cjsKKwlyZXR1cm4gYXR0cjsKK30KKworc3RhdGljIGludAorc3djb25maWdfcGFyc2VfcG9ydHMoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IG5sYXR0ciAqaGVhZCwKKwkJc3RydWN0IHN3aXRjaF92YWwgKnZhbCwgaW50IG1heCkKK3sKKwlzdHJ1Y3QgbmxhdHRyICpubGE7CisJaW50IHJlbTsKKworCXZhbC0+bGVuID0gMDsKKwlubGFfZm9yX2VhY2hfbmVzdGVkKG5sYSwgaGVhZCwgcmVtKSB7CisJCXN0cnVjdCBubGF0dHIgKnRiW1NXSVRDSF9QT1JUX0FUVFJfTUFYKzFdOworCQlzdHJ1Y3Qgc3dpdGNoX3BvcnQgKnBvcnQ7CisKKwkJaWYgKHZhbC0+bGVuID49IG1heCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXBvcnQgPSAmdmFsLT52YWx1ZS5wb3J0c1t2YWwtPmxlbl07CisKKwkJaWYgKG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgU1dJVENIX1BPUlRfQVRUUl9NQVgsIG5sYSwKKwkJCQlwb3J0X3BvbGljeSwgTlVMTCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoIXRiW1NXSVRDSF9QT1JUX0lEXSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXBvcnQtPmlkID0gbmxhX2dldF91MzIodGJbU1dJVENIX1BPUlRfSURdKTsKKwkJaWYgKHRiW1NXSVRDSF9QT1JUX0ZMQUdfVEFHR0VEXSkKKwkJCXBvcnQtPmZsYWdzIHw9ICgxIDw8IFNXSVRDSF9QT1JUX0ZMQUdfVEFHR0VEKTsKKwkJdmFsLT5sZW4rKzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorc3djb25maWdfcGFyc2VfbGluayhzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgbmxhdHRyICpubGEsCisJCSAgICBzdHJ1Y3Qgc3dpdGNoX3BvcnRfbGluayAqbGluaykKK3sKKwlzdHJ1Y3QgbmxhdHRyICp0YltTV0lUQ0hfTElOS19BVFRSX01BWCArIDFdOworCisJaWYgKG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgU1dJVENIX0xJTktfQVRUUl9NQVgsIG5sYSwgbGlua19wb2xpY3ksIE5VTEwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWxpbmstPmR1cGxleCA9ICEhdGJbU1dJVENIX0xJTktfRkxBR19EVVBMRVhdOworCWxpbmstPmFuZWcgPSAhIXRiW1NXSVRDSF9MSU5LX0ZMQUdfQU5FR107CisJbGluay0+c3BlZWQgPSBubGFfZ2V0X3UzMih0YltTV0lUQ0hfTElOS19TUEVFRF0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3N3Y29uZmlnX3NldF9hdHRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyOworCXN0cnVjdCBzd2l0Y2hfZGV2ICpkZXY7CisJc3RydWN0IHN3aXRjaF92YWwgdmFsOworCWludCBlcnIgPSAtRUlOVkFMOworCisJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCisJZGV2ID0gc3djb25maWdfZ2V0X2RldihpbmZvKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1zZXQoJnZhbCwgMCwgc2l6ZW9mKHZhbCkpOworCWF0dHIgPSBzd2NvbmZpZ19sb29rdXBfYXR0cihkZXYsIGluZm8sICZ2YWwpOworCWlmICghYXR0ciB8fCAhYXR0ci0+c2V0KQorCQlnb3RvIGVycm9yOworCisJdmFsLmF0dHIgPSBhdHRyOworCXN3aXRjaCAoYXR0ci0+dHlwZSkgeworCWNhc2UgU1dJVENIX1RZUEVfTk9WQUw6CisJCWJyZWFrOworCWNhc2UgU1dJVENIX1RZUEVfSU5UOgorCQlpZiAoIWluZm8tPmF0dHJzW1NXSVRDSF9BVFRSX09QX1ZBTFVFX0lOVF0pCisJCQlnb3RvIGVycm9yOworCQl2YWwudmFsdWUuaSA9CisJCQlubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tTV0lUQ0hfQVRUUl9PUF9WQUxVRV9JTlRdKTsKKwkJYnJlYWs7CisJY2FzZSBTV0lUQ0hfVFlQRV9TVFJJTkc6CisJCWlmICghaW5mby0+YXR0cnNbU1dJVENIX0FUVFJfT1BfVkFMVUVfU1RSXSkKKwkJCWdvdG8gZXJyb3I7CisJCXZhbC52YWx1ZS5zID0KKwkJCW5sYV9kYXRhKGluZm8tPmF0dHJzW1NXSVRDSF9BVFRSX09QX1ZBTFVFX1NUUl0pOworCQlicmVhazsKKwljYXNlIFNXSVRDSF9UWVBFX1BPUlRTOgorCQl2YWwudmFsdWUucG9ydHMgPSBkZXYtPnBvcnRidWY7CisJCW1lbXNldChkZXYtPnBvcnRidWYsIDAsCisJCQlzaXplb2Yoc3RydWN0IHN3aXRjaF9wb3J0KSAqIGRldi0+cG9ydHMpOworCisJCS8qIFRPRE86IGltcGxlbWVudCBtdWx0aXBhcnQ/ICovCisJCWlmIChpbmZvLT5hdHRyc1tTV0lUQ0hfQVRUUl9PUF9WQUxVRV9QT1JUU10pIHsKKwkJCWVyciA9IHN3Y29uZmlnX3BhcnNlX3BvcnRzKHNrYiwKKwkJCQlpbmZvLT5hdHRyc1tTV0lUQ0hfQVRUUl9PUF9WQUxVRV9QT1JUU10sCisJCQkJJnZhbCwgZGV2LT5wb3J0cyk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlnb3RvIGVycm9yOworCQl9IGVsc2UgeworCQkJdmFsLmxlbiA9IDA7CisJCQllcnIgPSAwOworCQl9CisJCWJyZWFrOworCWNhc2UgU1dJVENIX1RZUEVfTElOSzoKKwkJdmFsLnZhbHVlLmxpbmsgPSAmZGV2LT5saW5rYnVmOworCQltZW1zZXQoJmRldi0+bGlua2J1ZiwgMCwgc2l6ZW9mKHN0cnVjdCBzd2l0Y2hfcG9ydF9saW5rKSk7CisKKwkJaWYgKGluZm8tPmF0dHJzW1NXSVRDSF9BVFRSX09QX1ZBTFVFX0xJTktdKSB7CisJCQllcnIgPSBzd2NvbmZpZ19wYXJzZV9saW5rKHNrYiwKKwkJCQkJCSAgaW5mby0+YXR0cnNbU1dJVENIX0FUVFJfT1BfVkFMVUVfTElOS10sCisJCQkJCQkgIHZhbC52YWx1ZS5saW5rKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCWdvdG8gZXJyb3I7CisJCX0gZWxzZSB7CisJCQl2YWwubGVuID0gMDsKKwkJCWVyciA9IDA7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZ290byBlcnJvcjsKKwl9CisKKwllcnIgPSBhdHRyLT5zZXQoZGV2LCBhdHRyLCAmdmFsKTsKK2Vycm9yOgorCXN3Y29uZmlnX3B1dF9kZXYoZGV2KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50Citzd2NvbmZpZ19jbG9zZV9wb3J0bGlzdChzdHJ1Y3Qgc3djb25maWdfY2FsbGJhY2sgKmNiLCB2b2lkICphcmcpCit7CisJaWYgKGNiLT5uZXN0WzBdKQorCQlubGFfbmVzdF9lbmQoY2ItPm1zZywgY2ItPm5lc3RbMF0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Citzd2NvbmZpZ19zZW5kX3BvcnQoc3RydWN0IHN3Y29uZmlnX2NhbGxiYWNrICpjYiwgdm9pZCAqYXJnKQoreworCWNvbnN0IHN0cnVjdCBzd2l0Y2hfcG9ydCAqcG9ydCA9IGFyZzsKKwlzdHJ1Y3QgbmxhdHRyICpwID0gTlVMTDsKKworCWlmICghY2ItPm5lc3RbMF0pIHsKKwkJY2ItPm5lc3RbMF0gPSBubGFfbmVzdF9zdGFydChjYi0+bXNnLCBjYi0+Y21kKTsKKwkJaWYgKCFjYi0+bmVzdFswXSkKKwkJCXJldHVybiAtMTsKKwl9CisKKwlwID0gbmxhX25lc3Rfc3RhcnQoY2ItPm1zZywgU1dJVENIX0FUVFJfUE9SVCk7CisJaWYgKCFwKQorCQlnb3RvIGVycm9yOworCisJaWYgKG5sYV9wdXRfdTMyKGNiLT5tc2csIFNXSVRDSF9QT1JUX0lELCBwb3J0LT5pZCkpCisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCWlmIChwb3J0LT5mbGFncyAmICgxIDw8IFNXSVRDSF9QT1JUX0ZMQUdfVEFHR0VEKSkgeworCQlpZiAobmxhX3B1dF9mbGFnKGNiLT5tc2csIFNXSVRDSF9QT1JUX0ZMQUdfVEFHR0VEKSkKKwkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCX0KKworCW5sYV9uZXN0X2VuZChjYi0+bXNnLCBwKTsKKwlyZXR1cm4gMDsKKworbmxhX3B1dF9mYWlsdXJlOgorCQlubGFfbmVzdF9jYW5jZWwoY2ItPm1zZywgcCk7CitlcnJvcjoKKwlubGFfbmVzdF9jYW5jZWwoY2ItPm1zZywgY2ItPm5lc3RbMF0pOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludAorc3djb25maWdfc2VuZF9wb3J0cyhzdHJ1Y3Qgc2tfYnVmZiAqKm1zZywgc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgaW50IGF0dHIsCisJCWNvbnN0IHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IHN3Y29uZmlnX2NhbGxiYWNrIGNiOworCWludCBlcnIgPSAwOworCWludCBpOworCisJaWYgKCF2YWwtPnZhbHVlLnBvcnRzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbXNldCgmY2IsIDAsIHNpemVvZihjYikpOworCWNiLmNtZCA9IGF0dHI7CisJY2IubXNnID0gKm1zZzsKKwljYi5pbmZvID0gaW5mbzsKKwljYi5maWxsID0gc3djb25maWdfc2VuZF9wb3J0OworCWNiLmNsb3NlID0gc3djb25maWdfY2xvc2VfcG9ydGxpc3Q7CisKKwljYi5uZXN0WzBdID0gbmxhX25lc3Rfc3RhcnQoY2IubXNnLCBjYi5jbWQpOworCWZvciAoaSA9IDA7IGkgPCB2YWwtPmxlbjsgaSsrKSB7CisJCWVyciA9IHN3Y29uZmlnX3NlbmRfbXVsdGlwYXJ0KCZjYiwgJnZhbC0+dmFsdWUucG9ydHNbaV0pOworCQlpZiAoZXJyKQorCQkJZ290byBkb25lOworCX0KKwllcnIgPSB2YWwtPmxlbjsKKwlzd2NvbmZpZ19jbG9zZV9wb3J0bGlzdCgmY2IsIE5VTEwpOworCSptc2cgPSBjYi5tc2c7CisKK2RvbmU6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludAorc3djb25maWdfc2VuZF9saW5rKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIGludCBhdHRyLAorCQkgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX3BvcnRfbGluayAqbGluaykKK3sKKwlzdHJ1Y3QgbmxhdHRyICpwID0gTlVMTDsKKwlpbnQgZXJyID0gMDsKKworCXAgPSBubGFfbmVzdF9zdGFydChtc2csIGF0dHIpOworCWlmIChsaW5rLT5saW5rKSB7CisJCWlmIChubGFfcHV0X2ZsYWcobXNnLCBTV0lUQ0hfTElOS19GTEFHX0xJTkspKQorCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisJfQorCWlmIChsaW5rLT5kdXBsZXgpIHsKKwkJaWYgKG5sYV9wdXRfZmxhZyhtc2csIFNXSVRDSF9MSU5LX0ZMQUdfRFVQTEVYKSkKKwkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCX0KKwlpZiAobGluay0+YW5lZykgeworCQlpZiAobmxhX3B1dF9mbGFnKG1zZywgU1dJVENIX0xJTktfRkxBR19BTkVHKSkKKwkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCX0KKwlpZiAobGluay0+dHhfZmxvdykgeworCQlpZiAobmxhX3B1dF9mbGFnKG1zZywgU1dJVENIX0xJTktfRkxBR19UWF9GTE9XKSkKKwkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCX0KKwlpZiAobGluay0+cnhfZmxvdykgeworCQlpZiAobmxhX3B1dF9mbGFnKG1zZywgU1dJVENIX0xJTktfRkxBR19SWF9GTE9XKSkKKwkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCX0KKwlpZiAobmxhX3B1dF91MzIobXNnLCBTV0lUQ0hfTElOS19TUEVFRCwgbGluay0+c3BlZWQpKQorCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKwlpZiAobGluay0+ZWVlICYgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsKSB7CisJCWlmIChubGFfcHV0X2ZsYWcobXNnLCBTV0lUQ0hfTElOS19GTEFHX0VFRV8xMDBCQVNFVCkpCisJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKwl9CisJaWYgKGxpbmstPmVlZSAmIEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwpIHsKKwkJaWYgKG5sYV9wdXRfZmxhZyhtc2csIFNXSVRDSF9MSU5LX0ZMQUdfRUVFXzEwMDBCQVNFVCkpCisJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKwl9CisJbmxhX25lc3RfZW5kKG1zZywgcCk7CisKKwlyZXR1cm4gZXJyOworCitubGFfcHV0X2ZhaWx1cmU6CisJbmxhX25lc3RfY2FuY2VsKG1zZywgcCk7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50Citzd2NvbmZpZ19nZXRfYXR0cihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQoreworCXN0cnVjdCBnZW5sbXNnaGRyICpoZHIgPSBubG1zZ19kYXRhKGluZm8tPm5saGRyKTsKKwljb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHI7CisJc3RydWN0IHN3aXRjaF9kZXYgKmRldjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbXNnID0gTlVMTDsKKwlzdHJ1Y3Qgc3dpdGNoX3ZhbCB2YWw7CisJaW50IGVyciA9IC1FSU5WQUw7CisJaW50IGNtZCA9IGhkci0+Y21kOworCisJZGV2ID0gc3djb25maWdfZ2V0X2RldihpbmZvKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1zZXQoJnZhbCwgMCwgc2l6ZW9mKHZhbCkpOworCWF0dHIgPSBzd2NvbmZpZ19sb29rdXBfYXR0cihkZXYsIGluZm8sICZ2YWwpOworCWlmICghYXR0ciB8fCAhYXR0ci0+Z2V0KQorCQlnb3RvIGVycm9yOworCisJaWYgKGF0dHItPnR5cGUgPT0gU1dJVENIX1RZUEVfUE9SVFMpIHsKKwkJdmFsLnZhbHVlLnBvcnRzID0gZGV2LT5wb3J0YnVmOworCQltZW1zZXQoZGV2LT5wb3J0YnVmLCAwLAorCQkJc2l6ZW9mKHN0cnVjdCBzd2l0Y2hfcG9ydCkgKiBkZXYtPnBvcnRzKTsKKwl9IGVsc2UgaWYgKGF0dHItPnR5cGUgPT0gU1dJVENIX1RZUEVfTElOSykgeworCQl2YWwudmFsdWUubGluayA9ICZkZXYtPmxpbmtidWY7CisJCW1lbXNldCgmZGV2LT5saW5rYnVmLCAwLCBzaXplb2Yoc3RydWN0IHN3aXRjaF9wb3J0X2xpbmspKTsKKwl9CisKKwllcnIgPSBhdHRyLT5nZXQoZGV2LCBhdHRyLCAmdmFsKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycm9yOworCisJbXNnID0gbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1zZykKKwkJZ290byBlcnJvcjsKKworCWhkciA9IGdlbmxtc2dfcHV0KG1zZywgaW5mby0+c25kX3BvcnRpZCwgaW5mby0+c25kX3NlcSwgJnN3aXRjaF9mYW0sCisJCQkwLCBjbWQpOworCWlmIChJU19FUlIoaGRyKSkKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKKwlzd2l0Y2ggKGF0dHItPnR5cGUpIHsKKwljYXNlIFNXSVRDSF9UWVBFX0lOVDoKKwkJaWYgKG5sYV9wdXRfdTMyKG1zZywgU1dJVENIX0FUVFJfT1BfVkFMVUVfSU5ULCB2YWwudmFsdWUuaSkpCisJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKwkJYnJlYWs7CisJY2FzZSBTV0lUQ0hfVFlQRV9TVFJJTkc6CisJCWlmIChubGFfcHV0X3N0cmluZyhtc2csIFNXSVRDSF9BVFRSX09QX1ZBTFVFX1NUUiwgdmFsLnZhbHVlLnMpKQorCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisJCWJyZWFrOworCWNhc2UgU1dJVENIX1RZUEVfUE9SVFM6CisJCWVyciA9IHN3Y29uZmlnX3NlbmRfcG9ydHMoJm1zZywgaW5mbywKKwkJCQlTV0lUQ0hfQVRUUl9PUF9WQUxVRV9QT1JUUywgJnZhbCk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisJCWJyZWFrOworCWNhc2UgU1dJVENIX1RZUEVfTElOSzoKKwkJZXJyID0gc3djb25maWdfc2VuZF9saW5rKG1zZywgaW5mbywKKwkJCQkJIFNXSVRDSF9BVFRSX09QX1ZBTFVFX0xJTkssIHZhbC52YWx1ZS5saW5rKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfZGVidWcoImludmFsaWQgdHlwZSBpbiBhdHRyaWJ1dGVcbiIpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKwl9CisJZ2VubG1zZ19lbmQobXNnLCBoZHIpOworCWVyciA9IG1zZy0+bGVuOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKworCXN3Y29uZmlnX3B1dF9kZXYoZGV2KTsKKwlyZXR1cm4gZ2VubG1zZ19yZXBseShtc2csIGluZm8pOworCitubGFfcHV0X2ZhaWx1cmU6CisJaWYgKG1zZykKKwkJbmxtc2dfZnJlZShtc2cpOworZXJyb3I6CisJc3djb25maWdfcHV0X2RldihkZXYpOworCWlmICghZXJyKQorCQllcnIgPSAtRU5PTUVNOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQKK3N3Y29uZmlnX3NlbmRfc3dpdGNoKHN0cnVjdCBza19idWZmICptc2csIHUzMiBwaWQsIHUzMiBzZXEsIGludCBmbGFncywKKwkJY29uc3Qgc3RydWN0IHN3aXRjaF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgbmxhdHRyICpwID0gTlVMTCwgKm0gPSBOVUxMOworCXZvaWQgKmhkcjsKKwlpbnQgaTsKKworCWhkciA9IGdlbmxtc2dfcHV0KG1zZywgcGlkLCBzZXEsICZzd2l0Y2hfZmFtLCBmbGFncywKKwkJCVNXSVRDSF9DTURfTkVXX0FUVFIpOworCWlmIChJU19FUlIoaGRyKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKG5sYV9wdXRfdTMyKG1zZywgU1dJVENIX0FUVFJfSUQsIGRldi0+aWQpKQorCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKwlpZiAobmxhX3B1dF9zdHJpbmcobXNnLCBTV0lUQ0hfQVRUUl9ERVZfTkFNRSwgZGV2LT5kZXZuYW1lKSkKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisJaWYgKG5sYV9wdXRfc3RyaW5nKG1zZywgU1dJVENIX0FUVFJfQUxJQVMsIGRldi0+YWxpYXMpKQorCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKwlpZiAobmxhX3B1dF9zdHJpbmcobXNnLCBTV0lUQ0hfQVRUUl9OQU1FLCBkZXYtPm5hbWUpKQorCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKwlpZiAobmxhX3B1dF91MzIobXNnLCBTV0lUQ0hfQVRUUl9WTEFOUywgZGV2LT52bGFucykpCisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCWlmIChubGFfcHV0X3UzMihtc2csIFNXSVRDSF9BVFRSX1BPUlRTLCBkZXYtPnBvcnRzKSkKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisJaWYgKG5sYV9wdXRfdTMyKG1zZywgU1dJVENIX0FUVFJfQ1BVX1BPUlQsIGRldi0+Y3B1X3BvcnQpKQorCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKworCW0gPSBubGFfbmVzdF9zdGFydChtc2csIFNXSVRDSF9BVFRSX1BPUlRNQVApOworCWlmICghbSkKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisJZm9yIChpID0gMDsgaSA8IGRldi0+cG9ydHM7IGkrKykgeworCQlwID0gbmxhX25lc3Rfc3RhcnQobXNnLCBTV0lUQ0hfQVRUUl9QT1JUUyk7CisJCWlmICghcCkKKwkJCWNvbnRpbnVlOworCQlpZiAoZGV2LT5wb3J0bWFwW2ldLnMpIHsKKwkJCWlmIChubGFfcHV0X3N0cmluZyhtc2csIFNXSVRDSF9QT1JUTUFQX1NFR01FTlQsCisJCQkJCQlkZXYtPnBvcnRtYXBbaV0ucykpCisJCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisJCQlpZiAobmxhX3B1dF91MzIobXNnLCBTV0lUQ0hfUE9SVE1BUF9WSVJULAorCQkJCQkJZGV2LT5wb3J0bWFwW2ldLnZpcnQpKQorCQkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCQl9CisJCW5sYV9uZXN0X2VuZChtc2csIHApOworCX0KKwlubGFfbmVzdF9lbmQobXNnLCBtKTsKKwlnZW5sbXNnX2VuZChtc2csIGhkcik7CisJcmV0dXJuIG1zZy0+bGVuOworbmxhX3B1dF9mYWlsdXJlOgorCWdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTsKKwlyZXR1cm4gLUVNU0dTSVpFOworfQorCitzdGF0aWMgaW50IHN3Y29uZmlnX2R1bXBfc3dpdGNoZXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQoreworCXN0cnVjdCBzd2l0Y2hfZGV2ICpkZXY7CisJaW50IHN0YXJ0ID0gY2ItPmFyZ3NbMF07CisJaW50IGlkeCA9IDA7CisKKwlzd2NvbmZpZ19sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZzd2RldnMsIGRldl9saXN0KSB7CisJCWlmICgrK2lkeCA8PSBzdGFydCkKKwkJCWNvbnRpbnVlOworCQlpZiAoc3djb25maWdfc2VuZF9zd2l0Y2goc2tiLCBORVRMSU5LX0NCKGNiLT5za2IpLnBvcnRpZCwKKwkJCQljYi0+bmxoLT5ubG1zZ19zZXEsIE5MTV9GX01VTFRJLAorCQkJCWRldikgPCAwKQorCQkJYnJlYWs7CisJfQorCXN3Y29uZmlnX3VubG9jaygpOworCWNiLT5hcmdzWzBdID0gaWR4OworCisJcmV0dXJuIHNrYi0+bGVuOworfQorCitzdGF0aWMgaW50Citzd2NvbmZpZ19kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBnZW5sX29wcyBzd2NvbmZpZ19vcHNbXSA9IHsKKwl7CisJCS5jbWQgPSBTV0lUQ0hfQ01EX0xJU1RfR0xPQkFMLAorCQkudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsCisJCS5kb2l0ID0gc3djb25maWdfbGlzdF9hdHRycywKKwl9LAorCXsKKwkJLmNtZCA9IFNXSVRDSF9DTURfTElTVF9WTEFOLAorCQkudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsCisJCS5kb2l0ID0gc3djb25maWdfbGlzdF9hdHRycywKKwl9LAorCXsKKwkJLmNtZCA9IFNXSVRDSF9DTURfTElTVF9QT1JULAorCQkudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsCisJCS5kb2l0ID0gc3djb25maWdfbGlzdF9hdHRycywKKwl9LAorCXsKKwkJLmNtZCA9IFNXSVRDSF9DTURfR0VUX0dMT0JBTCwKKwkJLnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLAorCQkuZG9pdCA9IHN3Y29uZmlnX2dldF9hdHRyLAorCX0sCisJeworCQkuY21kID0gU1dJVENIX0NNRF9HRVRfVkxBTiwKKwkJLnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLAorCQkuZG9pdCA9IHN3Y29uZmlnX2dldF9hdHRyLAorCX0sCisJeworCQkuY21kID0gU1dJVENIX0NNRF9HRVRfUE9SVCwKKwkJLnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLAorCQkuZG9pdCA9IHN3Y29uZmlnX2dldF9hdHRyLAorCX0sCisJeworCQkuY21kID0gU1dJVENIX0NNRF9TRVRfR0xPQkFMLAorCQkudmFsaWRhdGUgPSBHRU5MX0RPTlRfVkFMSURBVEVfU1RSSUNUIHwgR0VOTF9ET05UX1ZBTElEQVRFX0RVTVAsCisJCS5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSwKKwkJLmRvaXQgPSBzd2NvbmZpZ19zZXRfYXR0ciwKKwl9LAorCXsKKwkJLmNtZCA9IFNXSVRDSF9DTURfU0VUX1ZMQU4sCisJCS52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCwKKwkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAorCQkuZG9pdCA9IHN3Y29uZmlnX3NldF9hdHRyLAorCX0sCisJeworCQkuY21kID0gU1dJVENIX0NNRF9TRVRfUE9SVCwKKwkJLnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLAorCQkuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sCisJCS5kb2l0ID0gc3djb25maWdfc2V0X2F0dHIsCisJfSwKKwl7CisJCS5jbWQgPSBTV0lUQ0hfQ01EX0dFVF9TV0lUQ0gsCisJCS52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCwKKwkJLmR1bXBpdCA9IHN3Y29uZmlnX2R1bXBfc3dpdGNoZXMsCisJCS5kb25lID0gc3djb25maWdfZG9uZSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IHN3aXRjaF9mYW0gPSB7CisJLm5hbWUgPSAic3dpdGNoIiwKKwkuaGRyc2l6ZSA9IDAsCisJLnZlcnNpb24gPSAxLAorCS5tYXhhdHRyID0gU1dJVENIX0FUVFJfTUFYLAorCS5wb2xpY3kgPSBzd2l0Y2hfcG9saWN5LAorCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKKwkub3BzID0gc3djb25maWdfb3BzLAorCS5uX29wcyA9IEFSUkFZX1NJWkUoc3djb25maWdfb3BzKSwKK307CisKKyNpZmRlZiBDT05GSUdfT0YKK3ZvaWQKK29mX3N3aXRjaF9sb2FkX3BvcnRtYXAoc3RydWN0IHN3aXRjaF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBvcnQ7CisKKwlpZiAoIWRldi0+b2Zfbm9kZSkKKwkJcmV0dXJuOworCisJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShkZXYtPm9mX25vZGUsIHBvcnQpIHsKKwkJY29uc3QgX19iZTMyICpwcm9wOworCQljb25zdCBjaGFyICpzZWdtZW50OworCQlpbnQgc2l6ZSwgcGh5czsKKworCQlpZiAoIW9mX2RldmljZV9pc19jb21wYXRpYmxlKHBvcnQsICJzd2NvbmZpZyxwb3J0IikpCisJCQljb250aW51ZTsKKworCQlpZiAob2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcocG9ydCwgInN3Y29uZmlnLHNlZ21lbnQiLCAmc2VnbWVudCkpCisJCQljb250aW51ZTsKKworCQlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KHBvcnQsICJzd2NvbmZpZyxwb3J0bWFwIiwgJnNpemUpOworCQlpZiAoIXByb3ApCisJCQljb250aW51ZTsKKworCQlpZiAoc2l6ZSAhPSAoMiAqIHNpemVvZigqcHJvcCkpKSB7CisJCQlwcl9lcnIoIiVzOiBmYWlsZWQgdG8gcGFyc2UgcG9ydCBtYXBwaW5nXG4iLAorCQkJCQlwb3J0LT5uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcGh5cyA9IGJlMzJfdG9fY3B1cChwcm9wKyspOworCQlpZiAoKHBoeXMgPCAwKSB8IChwaHlzID49IGRldi0+cG9ydHMpKSB7CisJCQlwcl9lcnIoIiVzOiBwaHlzaWNhbCBwb3J0IGluZGV4IG91dCBvZiByYW5nZVxuIiwKKwkJCQkJcG9ydC0+bmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWRldi0+cG9ydG1hcFtwaHlzXS5zID0ga3N0cmR1cChzZWdtZW50LCBHRlBfS0VSTkVMKTsKKwkJZGV2LT5wb3J0bWFwW3BoeXNdLnZpcnQgPSBiZTMyX3RvX2NwdXAocHJvcCk7CisJCXByX2RlYnVnKCJGb3VuZCBwb3J0OiAlcywgcGh5c2ljYWw6ICVkLCB2aXJ0dWFsOiAlZFxuIiwKKwkJCXNlZ21lbnQsIHBoeXMsIGRldi0+cG9ydG1hcFtwaHlzXS52aXJ0KTsKKwl9Cit9CisjZW5kaWYKKworaW50CityZWdpc3Rlcl9zd2l0Y2goc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3Qgc3dpdGNoX2RldiAqc2RldjsKKwljb25zdCBpbnQgbWF4X3N3aXRjaGVzID0gOCAqIHNpemVvZih1bnNpZ25lZCBsb25nKTsKKwl1bnNpZ25lZCBsb25nIGluX3VzZSA9IDA7CisJaW50IGVycjsKKwlpbnQgaTsKKworCUlOSVRfTElTVF9IRUFEKCZkZXYtPmRldl9saXN0KTsKKwlpZiAobmV0ZGV2KSB7CisJCWRldi0+bmV0ZGV2ID0gbmV0ZGV2OworCQlpZiAoIWRldi0+YWxpYXMpCisJCQlkZXYtPmFsaWFzID0gbmV0ZGV2LT5uYW1lOworCX0KKwlCVUdfT04oIWRldi0+YWxpYXMpOworCisJLyogTWFrZSBzdXJlIHN3ZGV2X2lkIGRvZXNuJ3Qgb3ZlcmZsb3cgKi8KKwlpZiAoc3dkZXZfaWQgPT0gSU5UX01BWCkgeworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpZiAoZGV2LT5wb3J0cyA+IDApIHsKKwkJZGV2LT5wb3J0YnVmID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN3aXRjaF9wb3J0KSAqCisJCQkJZGV2LT5wb3J0cywgR0ZQX0tFUk5FTCk7CisJCWlmICghZGV2LT5wb3J0YnVmKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWRldi0+cG9ydG1hcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzd2l0Y2hfcG9ydG1hcCkgKgorCQkJCWRldi0+cG9ydHMsIEdGUF9LRVJORUwpOworCQlpZiAoIWRldi0+cG9ydG1hcCkgeworCQkJa2ZyZWUoZGV2LT5wb3J0YnVmKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQorCXN3Y29uZmlnX2RlZmF1bHRzX2luaXQoZGV2KTsKKwltdXRleF9pbml0KCZkZXYtPnN3X211dGV4KTsKKwlzd2NvbmZpZ19sb2NrKCk7CisJZGV2LT5pZCA9ICsrc3dkZXZfaWQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkZXYsICZzd2RldnMsIGRldl9saXN0KSB7CisJCWlmICghc3NjYW5mKHNkZXYtPmRldm5hbWUsIFNXQ09ORklHX0RFVk5BTUUsICZpKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoaSA8IDAgfHwgaSA+IG1heF9zd2l0Y2hlcykKKwkJCWNvbnRpbnVlOworCisJCXNldF9iaXQoaSwgJmluX3VzZSk7CisJfQorCWkgPSBmaW5kX2ZpcnN0X3plcm9fYml0KCZpbl91c2UsIG1heF9zd2l0Y2hlcyk7CisKKwlpZiAoaSA9PSBtYXhfc3dpdGNoZXMpIHsKKwkJc3djb25maWdfdW5sb2NrKCk7CisJCXJldHVybiAtRU5GSUxFOworCX0KKworI2lmZGVmIENPTkZJR19PRgorCWlmIChkZXYtPnBvcnRzKQorCQlvZl9zd2l0Y2hfbG9hZF9wb3J0bWFwKGRldik7CisjZW5kaWYKKworCS8qIGZpbGwgZGV2aWNlIG5hbWUgKi8KKwlzbnByaW50ZihkZXYtPmRldm5hbWUsIElGTkFNU0laLCBTV0NPTkZJR19ERVZOQU1FLCBpKTsKKworCWxpc3RfYWRkX3RhaWwoJmRldi0+ZGV2X2xpc3QsICZzd2RldnMpOworCXN3Y29uZmlnX3VubG9jaygpOworCisJZXJyID0gc3djb25maWdfY3JlYXRlX2xlZF90cmlnZ2VyKGRldik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmVnaXN0ZXJfc3dpdGNoKTsKKwordm9pZAordW5yZWdpc3Rlcl9zd2l0Y2goc3RydWN0IHN3aXRjaF9kZXYgKmRldikKK3sKKwlzd2NvbmZpZ19kZXN0cm95X2xlZF90cmlnZ2VyKGRldik7CisJa2ZyZWUoZGV2LT5wb3J0YnVmKTsKKwltdXRleF9sb2NrKCZkZXYtPnN3X211dGV4KTsKKwlzd2NvbmZpZ19sb2NrKCk7CisJbGlzdF9kZWwoJmRldi0+ZGV2X2xpc3QpOworCXN3Y29uZmlnX3VubG9jaygpOworCW11dGV4X3VubG9jaygmZGV2LT5zd19tdXRleCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1bnJlZ2lzdGVyX3N3aXRjaCk7CisKK2ludAorc3dpdGNoX2dlbmVyaWNfc2V0X2xpbmsoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgaW50IHBvcnQsCisJCQlzdHJ1Y3Qgc3dpdGNoX3BvcnRfbGluayAqbGluaykKK3sKKwlpZiAoV0FSTl9PTighZGV2LT5vcHMtPnBoeV93cml0ZTE2KSkKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKworCS8qIEdlbmVyaWMgaW1wbGVtZW50YXRpb24gKi8KKwlpZiAobGluay0+YW5lZykgeworCQlkZXYtPm9wcy0+cGh5X3dyaXRlMTYoZGV2LCBwb3J0LCBNSUlfQk1DUiwgMHgwMDAwKTsKKwkJZGV2LT5vcHMtPnBoeV93cml0ZTE2KGRldiwgcG9ydCwgTUlJX0JNQ1IsIEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7CisJfSBlbHNlIHsKKwkJdTE2IGJtY3IgPSAwOworCisJCWlmIChsaW5rLT5kdXBsZXgpCisJCQlibWNyIHw9IEJNQ1JfRlVMTERQTFg7CisKKwkJc3dpdGNoIChsaW5rLT5zcGVlZCkgeworCQljYXNlIFNXSVRDSF9QT1JUX1NQRUVEXzEwOgorCQkJYnJlYWs7CisJCWNhc2UgU1dJVENIX1BPUlRfU1BFRURfMTAwOgorCQkJYm1jciB8PSBCTUNSX1NQRUVEMTAwOworCQkJYnJlYWs7CisJCWNhc2UgU1dJVENIX1BPUlRfU1BFRURfMTAwMDoKKwkJCWJtY3IgfD0gQk1DUl9TUEVFRDEwMDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRU5PVFNVUFA7CisJCX0KKworCQlkZXYtPm9wcy0+cGh5X3dyaXRlMTYoZGV2LCBwb3J0LCBNSUlfQk1DUiwgYm1jcik7CisJfQorCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzd2l0Y2hfZ2VuZXJpY19zZXRfbGluayk7CisKK3N0YXRpYyBpbnQgX19pbml0Citzd2NvbmZpZ19pbml0KHZvaWQpCit7CisJSU5JVF9MSVNUX0hFQUQoJnN3ZGV2cyk7CisKKwlyZXR1cm4gZ2VubF9yZWdpc3Rlcl9mYW1pbHkoJnN3aXRjaF9mYW0pOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQKK3N3Y29uZmlnX2V4aXQodm9pZCkKK3sKKwlnZW5sX3VucmVnaXN0ZXJfZmFtaWx5KCZzd2l0Y2hfZmFtKTsKK30KKworbW9kdWxlX2luaXQoc3djb25maWdfaW5pdCk7Cittb2R1bGVfZXhpdChzd2NvbmZpZ19leGl0KTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvbmV0L3BoeS9zd2NvbmZpZ19sZWRzLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL25ldC9waHkvc3djb25maWdfbGVkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNTNlNWMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL25ldC9waHkvc3djb25maWdfbGVkcy5jCkBAIC0wLDAgKzEsNTU1IEBACisvKgorICogc3djb25maWdfbGVkLmM6IExFRCB0cmlnZ2VyIHN1cHBvcnQgZm9yIHRoZSBzd2l0Y2ggY29uZmlndXJhdGlvbiBBUEkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR2Fib3IgSnVob3MgPGp1aG9zZ0BvcGVud3J0Lm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZkZWYgQ09ORklHX1NXQ09ORklHX0xFRFMKKworI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorCisjZGVmaW5lIFNXQ09ORklHX0xFRF9USU1FUl9JTlRFUlZBTAkoSFogLyAxMCkKKyNkZWZpbmUgU1dDT05GSUdfTEVEX05VTV9QT1JUUwkJMzIKKworI2RlZmluZSBTV0NPTkZJR19MRURfUE9SVF9TUEVFRF9OQQkweDAxCS8qIHVua25vd24gc3BlZWQgKi8KKyNkZWZpbmUgU1dDT05GSUdfTEVEX1BPUlRfU1BFRURfMTAJMHgwMgkvKiAxMCBNYnBzICovCisjZGVmaW5lIFNXQ09ORklHX0xFRF9QT1JUX1NQRUVEXzEwMAkweDA0CS8qIDEwMCBNYnBzICovCisjZGVmaW5lIFNXQ09ORklHX0xFRF9QT1JUX1NQRUVEXzEwMDAJMHgwOAkvKiAxMDAwIE1icHMgKi8KKyNkZWZpbmUgU1dDT05GSUdfTEVEX1BPUlRfU1BFRURfQUxMCShTV0NPTkZJR19MRURfUE9SVF9TUEVFRF9OQSB8IFwKKwkJCQkJIFNXQ09ORklHX0xFRF9QT1JUX1NQRUVEXzEwIHwgXAorCQkJCQkgU1dDT05GSUdfTEVEX1BPUlRfU1BFRURfMTAwIHwgXAorCQkJCQkgU1dDT05GSUdfTEVEX1BPUlRfU1BFRURfMTAwMCkKKworI2RlZmluZSBTV0NPTkZJR19MRURfTU9ERV9MSU5LCQkweDAxCisjZGVmaW5lIFNXQ09ORklHX0xFRF9NT0RFX1RYCQkweDAyCisjZGVmaW5lIFNXQ09ORklHX0xFRF9NT0RFX1JYCQkweDA0CisjZGVmaW5lIFNXQ09ORklHX0xFRF9NT0RFX1RYUlgJCShTV0NPTkZJR19MRURfTU9ERV9UWCAgIHwgXAorCQkJCQkgU1dDT05GSUdfTEVEX01PREVfUlgpCisjZGVmaW5lIFNXQ09ORklHX0xFRF9NT0RFX0FMTAkJKFNXQ09ORklHX0xFRF9NT0RFX0xJTksgfCBcCisJCQkJCSBTV0NPTkZJR19MRURfTU9ERV9UWCAgIHwgXAorCQkJCQkgU1dDT05GSUdfTEVEX01PREVfUlgpCisKK3N0cnVjdCBzd2l0Y2hfbGVkX3RyaWdnZXIgeworCXN0cnVjdCBsZWRfdHJpZ2dlciB0cmlnOworCXN0cnVjdCBzd2l0Y2hfZGV2ICpzd2RldjsKKworCXN0cnVjdCBkZWxheWVkX3dvcmsgc3dfbGVkX3dvcms7CisJdTMyIHBvcnRfbWFzazsKKwl1MzIgcG9ydF9saW5rOworCXVuc2lnbmVkIGxvbmcgbG9uZyBwb3J0X3R4X3RyYWZmaWNbU1dDT05GSUdfTEVEX05VTV9QT1JUU107CisJdW5zaWduZWQgbG9uZyBsb25nIHBvcnRfcnhfdHJhZmZpY1tTV0NPTkZJR19MRURfTlVNX1BPUlRTXTsKKwl1OCBsaW5rX3NwZWVkW1NXQ09ORklHX0xFRF9OVU1fUE9SVFNdOworfTsKKworc3RydWN0IHN3Y29uZmlnX3RyaWdfZGF0YSB7CisJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXY7CisJc3RydWN0IHN3aXRjaF9kZXYgKnN3ZGV2OworCisJcndsb2NrX3QgbG9jazsKKwl1MzIgcG9ydF9tYXNrOworCisJYm9vbCBwcmV2X2xpbms7CisJdW5zaWduZWQgbG9uZyBwcmV2X3RyYWZmaWM7CisJZW51bSBsZWRfYnJpZ2h0bmVzcyBwcmV2X2JyaWdodG5lc3M7CisJdTggbW9kZTsKKwl1OCBzcGVlZF9tYXNrOworfTsKKworc3RhdGljIHZvaWQKK3N3Y29uZmlnX3RyaWdfc2V0X2JyaWdodG5lc3Moc3RydWN0IHN3Y29uZmlnX3RyaWdfZGF0YSAqdHJpZ19kYXRhLAorCQkJICAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCit7CisJbGVkX3NldF9icmlnaHRuZXNzKHRyaWdfZGF0YS0+bGVkX2NkZXYsIGJyaWdodG5lc3MpOworCXRyaWdfZGF0YS0+cHJldl9icmlnaHRuZXNzID0gYnJpZ2h0bmVzczsKK30KKworc3RhdGljIHZvaWQKK3N3Y29uZmlnX3RyaWdfdXBkYXRlX3BvcnRfbWFzayhzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWdnZXIpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqZW50cnk7CisJc3RydWN0IHN3aXRjaF9sZWRfdHJpZ2dlciAqc3dfdHJpZzsKKwl1MzIgcG9ydF9tYXNrOworCisJaWYgKCF0cmlnZ2VyKQorCQlyZXR1cm47CisKKwlzd190cmlnID0gKHZvaWQgKikgdHJpZ2dlcjsKKworCXBvcnRfbWFzayA9IDA7CisJcmVhZF9sb2NrKCZ0cmlnZ2VyLT5sZWRkZXZfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoKGVudHJ5LCAmdHJpZ2dlci0+bGVkX2NkZXZzKSB7CisJCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2OworCQlzdHJ1Y3Qgc3djb25maWdfdHJpZ19kYXRhICp0cmlnX2RhdGE7CisKKwkJbGVkX2NkZXYgPSBsaXN0X2VudHJ5KGVudHJ5LCBzdHJ1Y3QgbGVkX2NsYXNzZGV2LCB0cmlnX2xpc3QpOworCQl0cmlnX2RhdGEgPSBsZWRfY2Rldi0+dHJpZ2dlcl9kYXRhOworCQlpZiAodHJpZ19kYXRhKSB7CisJCQlyZWFkX2xvY2soJnRyaWdfZGF0YS0+bG9jayk7CisJCQlwb3J0X21hc2sgfD0gdHJpZ19kYXRhLT5wb3J0X21hc2s7CisJCQlyZWFkX3VubG9jaygmdHJpZ19kYXRhLT5sb2NrKTsKKwkJfQorCX0KKwlyZWFkX3VubG9jaygmdHJpZ2dlci0+bGVkZGV2X2xpc3RfbG9jayk7CisKKwlzd190cmlnLT5wb3J0X21hc2sgPSBwb3J0X21hc2s7CisKKwlpZiAocG9ydF9tYXNrKQorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnN3X3RyaWctPnN3X2xlZF93b3JrLAorCQkJCSAgICAgIFNXQ09ORklHX0xFRF9USU1FUl9JTlRFUlZBTCk7CisJZWxzZQorCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnN3X3RyaWctPnN3X2xlZF93b3JrKTsKK30KKworc3RhdGljIHNzaXplX3QKK3N3Y29uZmlnX3RyaWdfcG9ydF9tYXNrX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHN3Y29uZmlnX3RyaWdfZGF0YSAqdHJpZ19kYXRhID0gbGVkX2NkZXYtPnRyaWdnZXJfZGF0YTsKKwl1bnNpZ25lZCBsb25nIHBvcnRfbWFzazsKKwlpbnQgcmV0OworCWJvb2wgY2hhbmdlZDsKKworCXJldCA9IGtzdHJ0b3VsKGJ1ZiwgMCwgJnBvcnRfbWFzayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXdyaXRlX2xvY2soJnRyaWdfZGF0YS0+bG9jayk7CisJY2hhbmdlZCA9ICh0cmlnX2RhdGEtPnBvcnRfbWFzayAhPSBwb3J0X21hc2spOworCXRyaWdfZGF0YS0+cG9ydF9tYXNrID0gcG9ydF9tYXNrOworCXdyaXRlX3VubG9jaygmdHJpZ19kYXRhLT5sb2NrKTsKKworCWlmIChjaGFuZ2VkKSB7CisJCWlmIChwb3J0X21hc2sgPT0gMCkKKwkJCXN3Y29uZmlnX3RyaWdfc2V0X2JyaWdodG5lc3ModHJpZ19kYXRhLCBMRURfT0ZGKTsKKworCQlzd2NvbmZpZ190cmlnX3VwZGF0ZV9wb3J0X21hc2sobGVkX2NkZXYtPnRyaWdnZXIpOworCX0KKworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgc3NpemVfdAorc3djb25maWdfdHJpZ19wb3J0X21hc2tfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc3djb25maWdfdHJpZ19kYXRhICp0cmlnX2RhdGEgPSBsZWRfY2Rldi0+dHJpZ2dlcl9kYXRhOworCXUzMiBwb3J0X21hc2s7CisKKwlyZWFkX2xvY2soJnRyaWdfZGF0YS0+bG9jayk7CisJcG9ydF9tYXNrID0gdHJpZ19kYXRhLT5wb3J0X21hc2s7CisJcmVhZF91bmxvY2soJnRyaWdfZGF0YS0+bG9jayk7CisKKwlzcHJpbnRmKGJ1ZiwgIiUjeFxuIiwgcG9ydF9tYXNrKTsKKworCXJldHVybiBzdHJsZW4oYnVmKSArIDE7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihwb3J0X21hc2ssIDA2NDQsIHN3Y29uZmlnX3RyaWdfcG9ydF9tYXNrX3Nob3csCisJCSAgIHN3Y29uZmlnX3RyaWdfcG9ydF9tYXNrX3N0b3JlKTsKKworLyogc3BlZWRfbWFzayBmaWxlIGhhbmRsZXIgLSBkaXNwbGF5IHZhbHVlICovCitzdGF0aWMgc3NpemVfdCBzd2NvbmZpZ190cmlnX3NwZWVkX21hc2tfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHN3Y29uZmlnX3RyaWdfZGF0YSAqdHJpZ19kYXRhID0gbGVkX2NkZXYtPnRyaWdnZXJfZGF0YTsKKwl1OCBzcGVlZF9tYXNrOworCisJcmVhZF9sb2NrKCZ0cmlnX2RhdGEtPmxvY2spOworCXNwZWVkX21hc2sgPSB0cmlnX2RhdGEtPnNwZWVkX21hc2s7CisJcmVhZF91bmxvY2soJnRyaWdfZGF0YS0+bG9jayk7CisKKwlzcHJpbnRmKGJ1ZiwgIiUjeFxuIiwgc3BlZWRfbWFzayk7CisKKwlyZXR1cm4gc3RybGVuKGJ1ZikgKyAxOworfQorCisvKiBzcGVlZF9tYXNrIGZpbGUgaGFuZGxlciAtIHN0b3JlIHZhbHVlICovCitzdGF0aWMgc3NpemVfdCBzd2NvbmZpZ190cmlnX3NwZWVkX21hc2tfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzd2NvbmZpZ190cmlnX2RhdGEgKnRyaWdfZGF0YSA9IGxlZF9jZGV2LT50cmlnZ2VyX2RhdGE7CisJdTggc3BlZWRfbWFzazsKKwlpbnQgcmV0OworCisJcmV0ID0ga3N0cnRvdTgoYnVmLCAwLCAmc3BlZWRfbWFzayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXdyaXRlX2xvY2soJnRyaWdfZGF0YS0+bG9jayk7CisJdHJpZ19kYXRhLT5zcGVlZF9tYXNrID0gc3BlZWRfbWFzayAmIFNXQ09ORklHX0xFRF9QT1JUX1NQRUVEX0FMTDsKKwl3cml0ZV91bmxvY2soJnRyaWdfZGF0YS0+bG9jayk7CisKKwlyZXR1cm4gc2l6ZTsKK30KKworLyogc3BlZWRfbWFzayBzcGVjaWFsIGZpbGUgKi8KK3N0YXRpYyBERVZJQ0VfQVRUUihzcGVlZF9tYXNrLCAwNjQ0LCBzd2NvbmZpZ190cmlnX3NwZWVkX21hc2tfc2hvdywKKwkJICAgc3djb25maWdfdHJpZ19zcGVlZF9tYXNrX3N0b3JlKTsKKworc3RhdGljIHNzaXplX3Qgc3djb25maWdfdHJpZ19tb2RlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHN3Y29uZmlnX3RyaWdfZGF0YSAqdHJpZ19kYXRhID0gbGVkX2NkZXYtPnRyaWdnZXJfZGF0YTsKKwl1OCBtb2RlOworCisJcmVhZF9sb2NrKCZ0cmlnX2RhdGEtPmxvY2spOworCW1vZGUgPSB0cmlnX2RhdGEtPm1vZGU7CisJcmVhZF91bmxvY2soJnRyaWdfZGF0YS0+bG9jayk7CisKKwlpZiAobW9kZSA9PSAwKSB7CisJCXN0cmNweShidWYsICJub25lXG4iKTsKKwl9IGVsc2UgeworCQlpZiAobW9kZSAmIFNXQ09ORklHX0xFRF9NT0RFX0xJTkspCisJCQlzdHJjYXQoYnVmLCAibGluayAiKTsKKwkJaWYgKG1vZGUgJiBTV0NPTkZJR19MRURfTU9ERV9UWCkKKwkJCXN0cmNhdChidWYsICJ0eCAiKTsKKwkJaWYgKG1vZGUgJiBTV0NPTkZJR19MRURfTU9ERV9SWCkKKwkJCXN0cmNhdChidWYsICJyeCAiKTsKKwkJc3RyY2F0KGJ1ZiwgIlxuIik7CisJfQorCisJcmV0dXJuIHN0cmxlbihidWYpKzE7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN3Y29uZmlnX3RyaWdfbW9kZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHN3Y29uZmlnX3RyaWdfZGF0YSAqdHJpZ19kYXRhID0gbGVkX2NkZXYtPnRyaWdnZXJfZGF0YTsKKwljaGFyIGNvcHlidWZbMTI4XTsKKwlpbnQgbmV3X21vZGUgPSAtMTsKKwljaGFyICpwLCAqdG9rZW47CisKKwkvKiB0YWtlIGEgY29weSBzaW5jZSB3ZSBkb24ndCB3YW50IHRvIHRyYXNoIHRoZSBpbmJvdW5kIGJ1ZmZlciB3aGVuIHVzaW5nIHN0cnNlcCAqLworCXN0cm5jcHkoY29weWJ1ZiwgYnVmLCBzaXplb2YoY29weWJ1ZikpOworCWNvcHlidWZbc2l6ZW9mKGNvcHlidWYpIC0gMV0gPSAwOworCXAgPSBjb3B5YnVmOworCisJd2hpbGUgKCh0b2tlbiA9IHN0cnNlcCgmcCwgIiBcdFxuIikpICE9IE5VTEwpIHsKKwkJaWYgKCEqdG9rZW4pCisJCQljb250aW51ZTsKKworCQlpZiAobmV3X21vZGUgPCAwKQorCQkJbmV3X21vZGUgPSAwOworCisJCWlmICghc3RyY21wKHRva2VuLCAibm9uZSIpKQorCQkJbmV3X21vZGUgPSAwOworCQllbHNlIGlmICghc3RyY21wKHRva2VuLCAidHgiKSkKKwkJCW5ld19tb2RlIHw9IFNXQ09ORklHX0xFRF9NT0RFX1RYOworCQllbHNlIGlmICghc3RyY21wKHRva2VuLCAicngiKSkKKwkJCW5ld19tb2RlIHw9IFNXQ09ORklHX0xFRF9NT0RFX1JYOworCQllbHNlIGlmICghc3RyY21wKHRva2VuLCAibGluayIpKQorCQkJbmV3X21vZGUgfD0gU1dDT05GSUdfTEVEX01PREVfTElOSzsKKwkJZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKG5ld19tb2RlIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3cml0ZV9sb2NrKCZ0cmlnX2RhdGEtPmxvY2spOworCXRyaWdfZGF0YS0+bW9kZSA9ICh1OCluZXdfbW9kZTsKKwl3cml0ZV91bmxvY2soJnRyaWdfZGF0YS0+bG9jayk7CisKKwlyZXR1cm4gc2l6ZTsKK30KKworLyogbW9kZSBzcGVjaWFsIGZpbGUgKi8KK3N0YXRpYyBERVZJQ0VfQVRUUihtb2RlLCAwNjQ0LCBzd2NvbmZpZ190cmlnX21vZGVfc2hvdywKKwkJICAgc3djb25maWdfdHJpZ19tb2RlX3N0b3JlKTsKKworc3RhdGljIGludAorc3djb25maWdfdHJpZ19hY3RpdmF0ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKK3sKKwlzdHJ1Y3Qgc3dpdGNoX2xlZF90cmlnZ2VyICpzd190cmlnOworCXN0cnVjdCBzd2NvbmZpZ190cmlnX2RhdGEgKnRyaWdfZGF0YTsKKwlpbnQgZXJyOworCisJdHJpZ19kYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN3Y29uZmlnX3RyaWdfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghdHJpZ19kYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXN3X3RyaWcgPSAodm9pZCAqKSBsZWRfY2Rldi0+dHJpZ2dlcjsKKworCXJ3bG9ja19pbml0KCZ0cmlnX2RhdGEtPmxvY2spOworCXRyaWdfZGF0YS0+bGVkX2NkZXYgPSBsZWRfY2RldjsKKwl0cmlnX2RhdGEtPnN3ZGV2ID0gc3dfdHJpZy0+c3dkZXY7CisJdHJpZ19kYXRhLT5zcGVlZF9tYXNrID0gU1dDT05GSUdfTEVEX1BPUlRfU1BFRURfQUxMOworCXRyaWdfZGF0YS0+bW9kZSA9IFNXQ09ORklHX0xFRF9NT0RFX0FMTDsKKwlsZWRfY2Rldi0+dHJpZ2dlcl9kYXRhID0gdHJpZ19kYXRhOworCisJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGxlZF9jZGV2LT5kZXYsICZkZXZfYXR0cl9wb3J0X21hc2spOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2ZyZWU7CisKKwllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUobGVkX2NkZXYtPmRldiwgJmRldl9hdHRyX3NwZWVkX21hc2spOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2Rldl9mcmVlOworCisJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGxlZF9jZGV2LT5kZXYsICZkZXZfYXR0cl9tb2RlKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9tb2RlX2ZyZWU7CisKKwlyZXR1cm4gMDsKKworZXJyX21vZGVfZnJlZToKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUobGVkX2NkZXYtPmRldiwgJmRldl9hdHRyX3NwZWVkX21hc2spOworCitlcnJfZGV2X2ZyZWU6CisJZGV2aWNlX3JlbW92ZV9maWxlKGxlZF9jZGV2LT5kZXYsICZkZXZfYXR0cl9wb3J0X21hc2spOworCitlcnJfZnJlZToKKwlsZWRfY2Rldi0+dHJpZ2dlcl9kYXRhID0gTlVMTDsKKwlrZnJlZSh0cmlnX2RhdGEpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQKK3N3Y29uZmlnX3RyaWdfZGVhY3RpdmF0ZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKK3sKKwlzdHJ1Y3Qgc3djb25maWdfdHJpZ19kYXRhICp0cmlnX2RhdGE7CisKKwlzd2NvbmZpZ190cmlnX3VwZGF0ZV9wb3J0X21hc2sobGVkX2NkZXYtPnRyaWdnZXIpOworCisJdHJpZ19kYXRhID0gKHZvaWQgKikgbGVkX2NkZXYtPnRyaWdnZXJfZGF0YTsKKwlpZiAodHJpZ19kYXRhKSB7CisJCWRldmljZV9yZW1vdmVfZmlsZShsZWRfY2Rldi0+ZGV2LCAmZGV2X2F0dHJfcG9ydF9tYXNrKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGxlZF9jZGV2LT5kZXYsICZkZXZfYXR0cl9zcGVlZF9tYXNrKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGxlZF9jZGV2LT5kZXYsICZkZXZfYXR0cl9tb2RlKTsKKwkJa2ZyZWUodHJpZ19kYXRhKTsKKwl9Cit9CisKKy8qCisgKiBsaW5rIG9mZiAtPiBsZWQgb2ZmIChjYW4ndCBiZSBhbnkgb3RoZXIgcmVhc29uIHRvIHR1cm4gaXQgb24pCisgKiBsaW5rIG9uOgorICoJbW9kZSBsaW5rOiBsZWQgb24gYnkgZGVmYXVsdCBvbmx5IGlmIHNwZWVkIG1hdGNoZXMsIGVsc2Ugb2ZmCisgKgltb2RlIHR4cng6IGJsaW5rIG9ubHkgaWYgc3BlZWQgbWF0Y2hlcywgZWxzZSBvZmYKKyAqLworc3RhdGljIHZvaWQKK3N3Y29uZmlnX3RyaWdfbGVkX2V2ZW50KHN0cnVjdCBzd2l0Y2hfbGVkX3RyaWdnZXIgKnN3X3RyaWcsCisJCQlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKK3sKKwlzdHJ1Y3Qgc3djb25maWdfdHJpZ19kYXRhICp0cmlnX2RhdGE7CisJdTMyIHBvcnRfbWFzazsKKwlib29sIGxpbms7CisJdTggc3BlZWRfbWFzaywgbW9kZTsKKwllbnVtIGxlZF9icmlnaHRuZXNzIGxlZF9iYXNlLCBsZWRfYmxpbms7CisKKwl0cmlnX2RhdGEgPSBsZWRfY2Rldi0+dHJpZ2dlcl9kYXRhOworCWlmICghdHJpZ19kYXRhKQorCQlyZXR1cm47CisKKwlyZWFkX2xvY2soJnRyaWdfZGF0YS0+bG9jayk7CisJcG9ydF9tYXNrID0gdHJpZ19kYXRhLT5wb3J0X21hc2s7CisJc3BlZWRfbWFzayA9IHRyaWdfZGF0YS0+c3BlZWRfbWFzazsKKwltb2RlID0gdHJpZ19kYXRhLT5tb2RlOworCXJlYWRfdW5sb2NrKCZ0cmlnX2RhdGEtPmxvY2spOworCisJbGluayA9ICEhKHN3X3RyaWctPnBvcnRfbGluayAmIHBvcnRfbWFzayk7CisJaWYgKCFsaW5rKSB7CisJCWlmICh0cmlnX2RhdGEtPnByZXZfYnJpZ2h0bmVzcyAhPSBMRURfT0ZGKQorCQkJc3djb25maWdfdHJpZ19zZXRfYnJpZ2h0bmVzcyh0cmlnX2RhdGEsIExFRF9PRkYpOyAvKiBhbmQgc3RvcCAqLworCX0KKwllbHNlIHsKKwkJdW5zaWduZWQgbG9uZyB0cmFmZmljOworCQlpbnQgc3BlZWRvazsJLyogbGluayBzcGVlZCBmbGFnICovCisJCWludCBpOworCisJCWxlZF9iYXNlID0gTEVEX0ZVTEw7CisJCWxlZF9ibGluayA9IExFRF9PRkY7CisJCXRyYWZmaWMgPSAwOworCQlzcGVlZG9rID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IFNXQ09ORklHX0xFRF9OVU1fUE9SVFM7IGkrKykgeworCQkJaWYgKHBvcnRfbWFzayAmICgxIDw8IGkpKSB7CisJCQkJaWYgKHN3X3RyaWctPmxpbmtfc3BlZWRbaV0gJiBzcGVlZF9tYXNrKSB7CisJCQkJCXRyYWZmaWMgKz0gKChtb2RlICYgU1dDT05GSUdfTEVEX01PREVfVFgpID8KKwkJCQkJCSAgICBzd190cmlnLT5wb3J0X3R4X3RyYWZmaWNbaV0gOiAwKSArCisJCQkJCQkoKG1vZGUgJiBTV0NPTkZJR19MRURfTU9ERV9SWCkgPworCQkJCQkJIHN3X3RyaWctPnBvcnRfcnhfdHJhZmZpY1tpXSA6IDApOworCQkJCQlzcGVlZG9rID0gMTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlpZiAoc3BlZWRvaykgeworCQkJLyogQXQgbGVhc3Qgb25lIHBvcnQgc3BlZWQgbWF0Y2hlcyBzcGVlZF9tYXNrICovCisJCQlpZiAoIShtb2RlICYgU1dDT05GSUdfTEVEX01PREVfTElOSykpIHsKKwkJCQlsZWRfYmFzZSA9IExFRF9PRkY7CisJCQkJbGVkX2JsaW5rID0gTEVEX0ZVTEw7CisJCQl9CisKKwkJCWlmICh0cmlnX2RhdGEtPnByZXZfYnJpZ2h0bmVzcyAhPSBsZWRfYmFzZSkKKwkJCQlzd2NvbmZpZ190cmlnX3NldF9icmlnaHRuZXNzKHRyaWdfZGF0YSwKKwkJCQkJCQkgICAgIGxlZF9iYXNlKTsKKwkJCWVsc2UgaWYgKHRyYWZmaWMgIT0gdHJpZ19kYXRhLT5wcmV2X3RyYWZmaWMpCisJCQkJc3djb25maWdfdHJpZ19zZXRfYnJpZ2h0bmVzcyh0cmlnX2RhdGEsCisJCQkJCQkJICAgICBsZWRfYmxpbmspOworCQl9IGVsc2UgaWYgKHRyaWdfZGF0YS0+cHJldl9icmlnaHRuZXNzICE9IExFRF9PRkYpCisJCQlzd2NvbmZpZ190cmlnX3NldF9icmlnaHRuZXNzKHRyaWdfZGF0YSwgTEVEX09GRik7CisKKwkJdHJpZ19kYXRhLT5wcmV2X3RyYWZmaWMgPSB0cmFmZmljOworCX0KKworCXRyaWdfZGF0YS0+cHJldl9saW5rID0gbGluazsKK30KKworc3RhdGljIHZvaWQKK3N3Y29uZmlnX3RyaWdfdXBkYXRlX2xlZHMoc3RydWN0IHN3aXRjaF9sZWRfdHJpZ2dlciAqc3dfdHJpZykKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKKwlzdHJ1Y3QgbGVkX3RyaWdnZXIgKnRyaWdnZXI7CisKKwl0cmlnZ2VyID0gJnN3X3RyaWctPnRyaWc7CisJcmVhZF9sb2NrKCZ0cmlnZ2VyLT5sZWRkZXZfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoKGVudHJ5LCAmdHJpZ2dlci0+bGVkX2NkZXZzKSB7CisJCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2OworCisJCWxlZF9jZGV2ID0gbGlzdF9lbnRyeShlbnRyeSwgc3RydWN0IGxlZF9jbGFzc2RldiwgdHJpZ19saXN0KTsKKwkJc3djb25maWdfdHJpZ19sZWRfZXZlbnQoc3dfdHJpZywgbGVkX2NkZXYpOworCX0KKwlyZWFkX3VubG9jaygmdHJpZ2dlci0+bGVkZGV2X2xpc3RfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkCitzd2NvbmZpZ19sZWRfd29ya19mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgc3dpdGNoX2xlZF90cmlnZ2VyICpzd190cmlnOworCXN0cnVjdCBzd2l0Y2hfZGV2ICpzd2RldjsKKwl1MzIgcG9ydF9tYXNrOworCXUzMiBsaW5rOworCWludCBpOworCisJc3dfdHJpZyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc3dpdGNoX2xlZF90cmlnZ2VyLAorCQkJICAgICAgIHN3X2xlZF93b3JrLndvcmspOworCisJcG9ydF9tYXNrID0gc3dfdHJpZy0+cG9ydF9tYXNrOworCXN3ZGV2ID0gc3dfdHJpZy0+c3dkZXY7CisKKwlsaW5rID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgU1dDT05GSUdfTEVEX05VTV9QT1JUUzsgaSsrKSB7CisJCXUzMiBwb3J0X2JpdDsKKworCQlzd190cmlnLT5saW5rX3NwZWVkW2ldID0gMDsKKworCQlwb3J0X2JpdCA9IEJJVChpKTsKKwkJaWYgKChwb3J0X21hc2sgJiBwb3J0X2JpdCkgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChzd2Rldi0+b3BzLT5nZXRfcG9ydF9saW5rKSB7CisJCQlzdHJ1Y3Qgc3dpdGNoX3BvcnRfbGluayBwb3J0X2xpbms7CisKKwkJCW1lbXNldCgmcG9ydF9saW5rLCAnXDAnLCBzaXplb2YocG9ydF9saW5rKSk7CisJCQlzd2Rldi0+b3BzLT5nZXRfcG9ydF9saW5rKHN3ZGV2LCBpLCAmcG9ydF9saW5rKTsKKworCQkJaWYgKHBvcnRfbGluay5saW5rKSB7CisJCQkJbGluayB8PSBwb3J0X2JpdDsKKwkJCQlzd2l0Y2ggKHBvcnRfbGluay5zcGVlZCkgeworCQkJCWNhc2UgU1dJVENIX1BPUlRfU1BFRURfVU5LTk9XTjoKKwkJCQkJc3dfdHJpZy0+bGlua19zcGVlZFtpXSA9CisJCQkJCQlTV0NPTkZJR19MRURfUE9SVF9TUEVFRF9OQTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBTV0lUQ0hfUE9SVF9TUEVFRF8xMDoKKwkJCQkJc3dfdHJpZy0+bGlua19zcGVlZFtpXSA9CisJCQkJCQlTV0NPTkZJR19MRURfUE9SVF9TUEVFRF8xMDsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBTV0lUQ0hfUE9SVF9TUEVFRF8xMDA6CisJCQkJCXN3X3RyaWctPmxpbmtfc3BlZWRbaV0gPQorCQkJCQkJU1dDT05GSUdfTEVEX1BPUlRfU1BFRURfMTAwOworCQkJCQlicmVhazsKKwkJCQljYXNlIFNXSVRDSF9QT1JUX1NQRUVEXzEwMDA6CisJCQkJCXN3X3RyaWctPmxpbmtfc3BlZWRbaV0gPQorCQkJCQkJU1dDT05GSUdfTEVEX1BPUlRfU1BFRURfMTAwMDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKHN3ZGV2LT5vcHMtPmdldF9wb3J0X3N0YXRzKSB7CisJCQlzdHJ1Y3Qgc3dpdGNoX3BvcnRfc3RhdHMgcG9ydF9zdGF0czsKKworCQkJbWVtc2V0KCZwb3J0X3N0YXRzLCAnXDAnLCBzaXplb2YocG9ydF9zdGF0cykpOworCQkJc3dkZXYtPm9wcy0+Z2V0X3BvcnRfc3RhdHMoc3dkZXYsIGksICZwb3J0X3N0YXRzKTsKKwkJCXN3X3RyaWctPnBvcnRfdHhfdHJhZmZpY1tpXSA9IHBvcnRfc3RhdHMudHhfYnl0ZXM7CisJCQlzd190cmlnLT5wb3J0X3J4X3RyYWZmaWNbaV0gPSBwb3J0X3N0YXRzLnJ4X2J5dGVzOworCQl9CisJfQorCisJc3dfdHJpZy0+cG9ydF9saW5rID0gbGluazsKKworCXN3Y29uZmlnX3RyaWdfdXBkYXRlX2xlZHMoc3dfdHJpZyk7CisKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnN3X3RyaWctPnN3X2xlZF93b3JrLAorCQkJICAgICAgU1dDT05GSUdfTEVEX1RJTUVSX0lOVEVSVkFMKTsKK30KKworc3RhdGljIGludAorc3djb25maWdfY3JlYXRlX2xlZF90cmlnZ2VyKHN0cnVjdCBzd2l0Y2hfZGV2ICpzd2RldikKK3sKKwlzdHJ1Y3Qgc3dpdGNoX2xlZF90cmlnZ2VyICpzd190cmlnOworCWludCBlcnI7CisKKwlpZiAoIXN3ZGV2LT5vcHMtPmdldF9wb3J0X2xpbmspCisJCXJldHVybiAwOworCisJc3dfdHJpZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzd2l0Y2hfbGVkX3RyaWdnZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN3X3RyaWcpCisJCXJldHVybiAtRU5PTUVNOworCisJc3dfdHJpZy0+c3dkZXYgPSBzd2RldjsKKwlzd190cmlnLT50cmlnLm5hbWUgPSBzd2Rldi0+ZGV2bmFtZTsKKwlzd190cmlnLT50cmlnLmFjdGl2YXRlID0gc3djb25maWdfdHJpZ19hY3RpdmF0ZTsKKwlzd190cmlnLT50cmlnLmRlYWN0aXZhdGUgPSBzd2NvbmZpZ190cmlnX2RlYWN0aXZhdGU7CisKKwlJTklUX0RFTEFZRURfV09SSygmc3dfdHJpZy0+c3dfbGVkX3dvcmssIHN3Y29uZmlnX2xlZF93b3JrX2Z1bmMpOworCisJZXJyID0gbGVkX3RyaWdnZXJfcmVnaXN0ZXIoJnN3X3RyaWctPnRyaWcpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2ZyZWU7CisKKwlzd2Rldi0+bGVkX3RyaWdnZXIgPSBzd190cmlnOworCisJcmV0dXJuIDA7CisKK2Vycl9mcmVlOgorCWtmcmVlKHN3X3RyaWcpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkCitzd2NvbmZpZ19kZXN0cm95X2xlZF90cmlnZ2VyKHN0cnVjdCBzd2l0Y2hfZGV2ICpzd2RldikKK3sKKwlzdHJ1Y3Qgc3dpdGNoX2xlZF90cmlnZ2VyICpzd190cmlnOworCisJc3dfdHJpZyA9IHN3ZGV2LT5sZWRfdHJpZ2dlcjsKKwlpZiAoc3dfdHJpZykgeworCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnN3X3RyaWctPnN3X2xlZF93b3JrKTsKKwkJbGVkX3RyaWdnZXJfdW5yZWdpc3Rlcigmc3dfdHJpZy0+dHJpZyk7CisJCWtmcmVlKHN3X3RyaWcpOworCX0KK30KKworI2Vsc2UgLyogU1dDT05GSUdfTEVEUyAqLworc3RhdGljIGlubGluZSBpbnQKK3N3Y29uZmlnX2NyZWF0ZV9sZWRfdHJpZ2dlcihzdHJ1Y3Qgc3dpdGNoX2RldiAqc3dkZXYpIHsgcmV0dXJuIDA7IH0KKworc3RhdGljIGlubGluZSB2b2lkCitzd2NvbmZpZ19kZXN0cm95X2xlZF90cmlnZ2VyKHN0cnVjdCBzd2l0Y2hfZGV2ICpzd2RldikgeyB9CisjZW5kaWYgLyogQ09ORklHX1NXQ09ORklHX0xFRFMgKi8KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvcGxhdGZvcm0vbWlrcm90aWsvS2NvbmZpZyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvcGxhdGZvcm0vbWlrcm90aWsvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDk5YmExCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9wbGF0Zm9ybS9taWtyb3Rpay9LY29uZmlnCkBAIC0wLDAgKzEsMTkgQEAKK21lbnVjb25maWcgTUlLUk9USUsKKwlib29sICJQbGF0Zm9ybSBzdXBwb3J0IGZvciBNaWtyb1RpayBSb3V0ZXJCb2FyZCB2aXJ0dWFsIGRldmljZXMiCisJZGVmYXVsdCBuCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBnZXQgdG8gc2VlIG9wdGlvbnMgZm9yIHRoZSBNaWtyb1RpayBSb3V0ZXJCb2FyZCBwbGF0Zm9ybS4KKwkgIFRoaXMgb3B0aW9uIGFsb25lIGRvZXMgbm90IGFkZCBhbnkga2VybmVsIGNvZGUuCisKKworaWYgTUlLUk9USUsKKworY29uZmlnIE1JS1JPVElLX1JCX1NZU0ZTCisJdHJpc3RhdGUgIlJvdXRlckJvb3Qgc3lzZnMgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE1URAorCXNlbGVjdCBMWk9fREVDT01QUkVTUworCXNlbGVjdCBDUkMzMgorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIGV4cG9zZXMgUm91dGVyQm9vdCBjb25maWd1cmF0aW9uIGluIHN5c2ZzLgorCitlbmRpZiAjIE1JS1JPVElLCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL3BsYXRmb3JtL21pa3JvdGlrL01ha2VmaWxlIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9wbGF0Zm9ybS9taWtyb3Rpay9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjMyZTFhCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9wbGF0Zm9ybS9taWtyb3Rpay9NYWtlZmlsZQpAQCAtMCwwICsxLDQgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIE1pa3JvVGlrIFJvdXRlckJvYXJkIHBsYXRmb3JtIHNwZWNpZmljIGRyaXZlcnMKKyMKK29iai0kKENPTkZJR19NSUtST1RJS19SQl9TWVNGUykgICAgICs9IHJvdXRlcmJvb3QubyByYl9oYXJkY29uZmlnLm8gcmJfc29mdGNvbmZpZy5vCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL3BsYXRmb3JtL21pa3JvdGlrL3JiX2hhcmRjb25maWcuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvcGxhdGZvcm0vbWlrcm90aWsvcmJfaGFyZGNvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YTY5MjgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL3BsYXRmb3JtL21pa3JvdGlrL3JiX2hhcmRjb25maWcuYwpAQCAtMCwwICsxLDgyNSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQorLyoKKyAqIERyaXZlciBmb3IgTWlrcm9UaWsgUm91dGVyQm9vdCBoYXJkIGNvbmZpZy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgVGhpYmF1dCBWQVLDiE5FIDxoYWNrcytrZXJuZWxAc2xhc2hkaXJ0Lm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgZHJpdmVyIGV4cG9zZXMgdGhlIGRhdGEgZW5jb2RlZCBpbiB0aGUgImhhcmRfY29uZmlnIiBmbGFzaCBzZWdtZW50IG9mCisgKiBNaWtyb1RpayBSb3V0ZXJCT0FSRHMgZGV2aWNlcy4gSXQgcHJlc2VudHMgdGhlIGRhdGEgaW4gYSBzeXNmcyBmb2xkZXIKKyAqIG5hbWVkICJoYXJkX2NvbmZpZyIuIFRoZSBXTEFOIGNhbGlicmF0aW9uIGRhdGEgaXMgYXZhaWxhYmxlIG9uIGRlbWFuZCB2aWEKKyAqIHRoZSAnd2xhbl9kYXRhJyBzeXNmcyBmaWxlIGluIHRoYXQgZm9sZGVyLgorICoKKyAqIFRoaXMgZHJpdmVyIHBlcm1hbmVudGx5IGFsbG9jYXRlcyBhIGNodW5rIG9mIFJBTSBhcyBsYXJnZSBhcyB0aGUgaGFyZF9jb25maWcKKyAqIE1URCBwYXJ0aXRpb24sIGFsdGhvdWdoIGl0IGlzIHRlY2huaWNhbGx5IHBvc3NpYmxlIHRvIG9wZXJhdGUgZW50aXJlbHkgZnJvbQorICogdGhlIE1URCBkZXZpY2Ugd2l0aG91dCB1c2luZyBhIGxvY2FsIGJ1ZmZlciAoZXhjZXB0IHdoZW4gcmVxdWVzdGluZyBXTEFOCisgKiBjYWxpYnJhdGlvbiBkYXRhKSwgYXQgdGhlIGNvc3Qgb2YgYSBwZXJmb3JtYW5jZSBwZW5hbHR5LgorICoKKyAqIE5vdGU6IFBBR0VfU0laRSBpcyBhc3N1bWVkIHRvIGJlID49IDRLLCBoZW5jZSB0aGUgZGV2aWNlIGF0dHJpYnV0ZSBzaG93CisgKiByb3V0aW5lcyBuZWVkIG5vdCBjaGVjayBmb3Igb3V0cHV0IG92ZXJmbG93LgorICoKKyAqIFNvbWUgY29uc3RhbnQgZGVmaW5lcyBleHRyYWN0ZWQgZnJvbSByb3V0ZXJib290LntjLGh9IGJ5IEdhYm9yIEp1aG9zCisgKiA8anVob3NnQG9wZW53cnQub3JnPgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbHpvLmg+CisKKyNpbmNsdWRlICJyb3V0ZXJib290LmgiCisKKyNkZWZpbmUgUkJfSEFSRENPTkZJR19WRVIJCSIwLjA2IgorI2RlZmluZSBSQl9IQ19QUl9QRlgJCQkiW3JiX2hhcmRjb25maWddICIKKworLyogSUQgdmFsdWVzIGZvciBoYXJkd2FyZSBzZXR0aW5ncyAqLworI2RlZmluZSBSQl9JRF9GTEFTSF9JTkZPCQkweDAzCisjZGVmaW5lIFJCX0lEX01BQ19BRERSRVNTX1BBQ0sJCTB4MDQKKyNkZWZpbmUgUkJfSURfQk9BUkRfUFJPRFVDVF9DT0RFCTB4MDUKKyNkZWZpbmUgUkJfSURfQklPU19WRVJTSU9OCQkweDA2CisjZGVmaW5lIFJCX0lEX1NEUkFNX1RJTUlOR1MJCTB4MDgKKyNkZWZpbmUgUkJfSURfREVWSUNFX1RJTUlOR1MJCTB4MDkKKyNkZWZpbmUgUkJfSURfU09GVFdBUkVfSUQJCTB4MEEKKyNkZWZpbmUgUkJfSURfU0VSSUFMX05VTUJFUgkJMHgwQgorI2RlZmluZSBSQl9JRF9NRU1PUllfU0laRQkJMHgwRAorI2RlZmluZSBSQl9JRF9NQUNfQUREUkVTU19DT1VOVAkJMHgwRQorI2RlZmluZSBSQl9JRF9IV19PUFRJT05TCQkweDE1CisjZGVmaW5lIFJCX0lEX1dMQU5fREFUQQkJCTB4MTYKKyNkZWZpbmUgUkJfSURfQk9BUkRfSURFTlRJRklFUgkJMHgxNworI2RlZmluZSBSQl9JRF9QUk9EVUNUX05BTUUJCTB4MjEKKyNkZWZpbmUgUkJfSURfREVGQ09ORgkJCTB4MjYKKyNkZWZpbmUgUkJfSURfQk9BUkRfUkVWSVNJT04JCTB4MjcKKworLyogQml0IGRlZmluaXRpb25zIGZvciBoYXJkd2FyZSBvcHRpb25zICovCisjZGVmaW5lIFJCX0hXX09QVF9OT19VQVJUCQlCSVQoMCkKKyNkZWZpbmUgUkJfSFdfT1BUX0hBU19WT0xUQUdFCQlCSVQoMSkKKyNkZWZpbmUgUkJfSFdfT1BUX0hBU19VU0IJCUJJVCgyKQorI2RlZmluZSBSQl9IV19PUFRfSEFTX0FUVElOWQkJQklUKDMpCisjZGVmaW5lIFJCX0hXX09QVF9QVUxTRV9EVVRZX0NZQ0xFCUJJVCg5KQorI2RlZmluZSBSQl9IV19PUFRfTk9fTkFORAkJQklUKDE0KQorI2RlZmluZSBSQl9IV19PUFRfSEFTX0xDRAkJQklUKDE1KQorI2RlZmluZSBSQl9IV19PUFRfSEFTX1BPRV9PVVQJCUJJVCgxNikKKyNkZWZpbmUgUkJfSFdfT1BUX0hBU191U0QJCUJJVCgxNykKKyNkZWZpbmUgUkJfSFdfT1BUX0hBU19TSU0JCUJJVCgxOCkKKyNkZWZpbmUgUkJfSFdfT1BUX0hBU19TRlAJCUJJVCgyMCkKKyNkZWZpbmUgUkJfSFdfT1BUX0hBU19XSUZJCQlCSVQoMjEpCisjZGVmaW5lIFJCX0hXX09QVF9IQVNfVFNfRk9SX0FEQwlCSVQoMjIpCisjZGVmaW5lIFJCX0hXX09QVF9IQVNfUExDCQlCSVQoMjkpCisKKy8qCisgKiBUYWcgSUQgdmFsdWVzIGZvciBFUkQgZGF0YS4KKyAqIE1pa3JvdGlrIHVzZWQgdG8gcGFjayBhbGwgY2FsaWJyYXRpb24gZGF0YSB1bmRlciBhIHNpbmdsZSB0YWcgaWQgMHgxLCBidXQKKyAqIHJlY2VudGx5IHN3aXRjaGVkIHRvIGEgbmV3IHNjaGVtZSB3aGVyZSBlYWNoIHJhZGlvIGNhbGlicmF0aW9uIGdldHMgYQorICogc2VwYXJhdGUgdGFnLiBUaGUgbmV3IHNjaGVtZSBoYXMgdGFnIGlkIGJpdCAxNSBhbHdheXMgc2V0IGFuZCBzZWVtcyB0byBiZQorICogbXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggdGhlIG9sZCBzY2hlbWUuCisgKi8KKyNkZWZpbmUgUkJfV0xBTl9FUkRfSURfU09MTwkJMHgwMDAxCisjZGVmaW5lIFJCX1dMQU5fRVJEX0lEX01VTFRJXzgwMDEJMHg4MDAxCisjZGVmaW5lIFJCX1dMQU5fRVJEX0lEX01VTFRJXzgyMDEJMHg4MjAxCisKK3N0YXRpYyBzdHJ1Y3Qga29iamVjdCAqaGNfa29iajsKK3N0YXRpYyB1OCAqaGNfYnVmOwkJLy8gcm8gYnVmZmVyIGFmdGVyIGluaXQoKTogbm8gbG9ja2luZyByZXF1aXJlZAorc3RhdGljIHNpemVfdCBoY19idWZsZW47CisKKy8qCisgKiBGb3IgTFpPUiBzdHlsZSBXTEFOIGRhdGEgdW5wYWNraW5nLgorICogVGhpcyBiaW5hcnkgYmxvYiBpcyBwcmVwZW5kZWQgdG8gdGhlIGRhdGEgZW5jb2RlZCBvbiBzb21lIGRldmljZXMgYXMKKyAqIFJCX0lEX1dMQU5fREFUQSwgdGhlIHJlc3VsdCBpcyB0aGVuIGZpcnN0IGRlY29tcHJlc3NlZCB3aXRoIExaTywgYW5kIHRoZW4KKyAqIGZpbmFsbHkgUkxFLWRlY29kZWQuCisgKiBUaGlzIGJpbmFyeSBibG9iIGhhcyBiZWVuIGV4dHJhY3RlZCBmcm9tIFJvdXRlck9TIGJ5CisgKiBodHRwczovL2ZvcnVtLm9wZW53cnQub3JnL3UvaXVzCisgKi8KK3N0YXRpYyBjb25zdCB1OCBoY19sem9yX3ByZWZpeFtdID0geworCTB4MDAsIDB4MDUsIDB4NGMsIDB4NGMsIDB4NDQsIDB4MDAsIDB4MzQsIDB4ZmUsCisJMHhmZSwgMHgzNCwgMHgxMSwgMHgzYywgMHgxZSwgMHgzYywgMHgyZSwgMHgzYywKKwkweDRjLCAweDM0LCAweDAwLCAweDUyLCAweDYyLCAweDkyLCAweGEyLCAweGIyLAorCTB4YzMsIDB4MmEsIDB4MTQsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZmUsIDB4NmEsCisJMHgzYywgMHgxNiwgMHgzMiwgMHgxNiwgMHgxMSwgMHgxZSwgMHgxMiwgMHg0NiwKKwkweDMyLCAweDQ2LCAweDExLCAweDRlLCAweDEyLCAweDM2LCAweDMyLCAweDM2LAorCTB4MTEsIDB4M2UsIDB4MTIsIDB4NWEsIDB4OWEsIDB4NjQsIDB4MDAsIDB4MDQsCisJMHhmZSwgMHgxMCwgMHgzYywgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgyOCwKKwkweDBjLCAweDAwLCAweDBmLCAweGZlLCAweDE0LCAweDAwLCAweDI0LCAweDI0LAorCTB4MjMsIDB4MjQsIDB4MjQsIDB4MjMsIDB4MjUsIDB4MjIsIDB4MjEsIDB4MjEsCisJMHgyMywgMHgyMiwgMHgyMSwgMHgyMiwgMHgyMSwgMHgyZCwgMHgzOCwgMHgwMCwKKwkweDBjLCAweDI1LCAweDI1LCAweDI0LCAweDI1LCAweDI1LCAweDI0LCAweDIzLAorCTB4MjIsIDB4MjEsIDB4MjAsIDB4MjMsIDB4MjEsIDB4MjEsIDB4MjIsIDB4MjEsCisJMHgyZCwgMHgzOCwgMHgwMCwgMHgyOCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMiwKKwkweDAwLCAweDAwLCAweGMwLCAweGZlLCAweDAzLCAweDAwLCAweGMwLCAweDAwLAorCTB4NjIsIDB4ZmYsIDB4NjIsIDB4ZmYsIDB4ZmUsIDB4MDYsIDB4MDAsIDB4YmIsCisJMHhmZiwgMHhiYSwgMHhmZiwgMHhmZSwgMHgwOCwgMHgwMCwgMHg5ZSwgMHhmZiwKKwkweGZlLCAweDBhLCAweDAwLCAweDUzLCAweGZmLCAweGZlLCAweDAyLCAweDAwLAorCTB4MjAsIDB4ZmYsIDB4YjEsIDB4ZmUsIDB4ZmUsIDB4YjIsIDB4ZmUsIDB4ZmUsCisJMHhlZCwgMHhmZSwgMHhmZSwgMHhmZSwgMHgwNCwgMHgwMCwgMHgzYSwgMHhmZiwKKwkweDNhLCAweGZmLCAweGRlLCAweGZkLCAweDVmLCAweDA0LCAweDMzLCAweGZmLAorCTB4NGMsIDB4NzQsIDB4MDMsIDB4MDUsIDB4MDUsIDB4ZmYsIDB4NmQsIDB4ZmUsCisJMHhmZSwgMHg2ZCwgMHhmZSwgMHhmZSwgMHhhZiwgMHgwOCwgMHg2MywgMHhmZiwKKwkweDY0LCAweDZmLCAweDA4LCAweGFjLCAweGZmLCAweGJmLCAweDZkLCAweDA4LAorCTB4N2EsIDB4NmQsIDB4MDgsIDB4OTYsIDB4NzQsIDB4MDQsIDB4MDAsIDB4MDgsCisJMHg3OSwgMHhmZiwgMHhkYSwgMHhmZSwgMHhmZSwgMHhkYiwgMHhmZSwgMHhmZSwKKwkweDU2LCAweGZmLCAweGZlLCAweDA0LCAweDAwLCAweDVlLCAweGZmLCAweDVlLAorCTB4ZmYsIDB4NmMsIDB4ZmUsIDB4ZmUsIDB4ZmUsIDB4MDYsIDB4MDAsIDB4NDEsCisJMHhmZiwgMHg3ZiwgMHg3NCwgMHgwMywgMHgwMCwgMHgxMSwgMHg0NCwgMHhmZiwKKwkweGE5LCAweGZlLCAweGZlLCAweGE5LCAweGZlLCAweGZlLCAweGE1LCAweDhmLAorCTB4MDEsIDB4MDAsIDB4MDgsIDB4MDEsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsCisJMHgwMiwgMHgwNCwgMHgwOCwgMHgwOCwgMHgwMSwgMHgwMSwgMHhmZSwgMHgyMiwKKwkweDAwLCAweDRjLCAweDYwLCAweDY0LCAweDhjLCAweDkwLCAweGQwLCAweGQ0LAorCTB4ZDgsIDB4NWMsIDB4MTAsIDB4MDksIDB4ZDgsIDB4ZmYsIDB4YjAsIDB4ZmYsCisJMHgwMCwgMHgwMCwgMHhiYSwgMHhmZiwgMHgxNCwgMHgwMCwgMHhiYSwgMHhmZiwKKwkweDY0LCAweDAwLCAweDAwLCAweDA4LCAweGZlLCAweDA2LCAweDAwLCAweDc0LAorCTB4ZmYsIDB4NDIsIDB4ZmYsIDB4Y2UsIDB4ZmYsIDB4NjAsIDB4ZmYsIDB4MGEsCisJMHgwMCwgMHhiNCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHhmZSwgMHgwNywKKwkweDAwLCAweDBhLCAweDAwLCAweGIwLCAweGZmLCAweDk2LCAweDRkLCAweDAwLAorCTB4NTYsIDB4NTcsIDB4MTgsIDB4YTYsIDB4ZmYsIDB4OTIsIDB4NzAsIDB4MTEsCisJMHgwMCwgMHgxMiwgMHg5MCwgMHg5MCwgMHg3NiwgMHg1YSwgMHg1NCwgMHg1NCwKKwkweDRjLCAweDQ2LCAweDM4LCAweDAwLCAweDEwLCAweDEwLCAweDA4LCAweGZlLAorCTB4MDUsIDB4MDAsIDB4MzgsIDB4MjksIDB4MjUsIDB4MjMsIDB4MjIsIDB4MjIsCisJMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNiwgMHhlMSwgMHhkZCwgMHhmOCwKKwkweGZlLCAweDAwLCAweGZlLCAweDE1LCAweDAwLCAweDAwLCAweGQwLCAweDAyLAorCTB4NzQsIDB4MDIsIDB4MDgsIDB4ZjgsIDB4ZTUsIDB4ZGUsIDB4MDIsIDB4MDQsCisJMHgwNCwgMHhmZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg1MCwgMHgyZCwKKwkweDAxLCAweDkwLCAweDkwLCAweDc2LCAweDYwLCAweGIwLCAweDA3LCAweDA3LAorCTB4MGMsIDB4MGMsIDB4MDQsIDB4ZmUsIDB4MDUsIDB4MDAsIDB4NjYsIDB4NjYsCisJMHg1YSwgMHg1NiwgMHhiYywgMHgwMSwgMHgwNiwgMHhmYywgMHhmYywgMHhmMSwKKwkweGZlLCAweDA3LCAweDAwLCAweDI0LCAweDk1LCAweDcwLCAweDY0LCAweDE4LAorCTB4MDYsIDB4MmMsIDB4ZmYsIDB4YjUsIDB4ZmUsIDB4ZmUsIDB4YjUsIDB4ZmUsCisJMHhmZSwgMHhlMiwgMHg4YywgMHgyNCwgMHgwMiwgMHgyZiwgMHhmZiwgMHgyZiwKKwkweGZmLCAweGI0LCAweDc4LCAweDAyLCAweDA1LCAweDczLCAweGZmLCAweGVkLAorCTB4ZmUsIDB4ZmUsIDB4NGYsIDB4ZmYsIDB4MzYsIDB4NzQsIDB4MWUsIDB4MDksCisJMHg0ZiwgMHhmZiwgMHg1MCwgMHhmZiwgMHhmZSwgMHgxNiwgMHgwMCwgMHg3MCwKKwkweGFjLCAweDcwLCAweDhlLCAweGFjLCAweDQwLCAweDBlLCAweDAxLCAweDcwLAorCTB4N2YsIDB4OGUsIDB4YWMsIDB4NmMsIDB4MDAsIDB4MGIsIDB4ZmUsIDB4MDIsCisJMHgwMCwgMHhmZSwgMHgwYSwgMHgyYywgMHgyYSwgMHgyYSwgMHgyOCwgMHgyNiwKKwkweDFlLCAweDFlLCAweGZlLCAweDAyLCAweDIwLCAweDY1LCAweDIwLCAweDAwLAorCTB4MDAsIDB4MDUsIDB4MTIsIDB4MDAsIDB4MTEsIDB4MWUsIDB4MTEsIDB4MTEsCisJMHg0MSwgMHgxZSwgMHg0MSwgMHgxMSwgMHgzMSwgMHgxZSwgMHgzMSwgMHgxMSwKKwkweDcwLCAweDc1LCAweDdhLCAweDdmLCAweDg0LCAweDg5LCAweDhlLCAweDkzLAorCTB4OTgsIDB4MzAsIDB4MjAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4ZmUsIDB4MDYsCisJMHgzYywgMHhiYywgMHgzMiwgMHgwYywgMHgwMCwgMHgwMCwgMHgyYSwgMHgxMiwKKwkweDFlLCAweDEyLCAweDJlLCAweDEyLCAweGNjLCAweDEyLCAweDExLCAweDFhLAorCTB4MWUsIDB4MWEsIDB4MmUsIDB4MWEsIDB4NGMsIDB4MTAsIDB4MWUsIDB4MTAsCisJMHgxMSwgMHgxOCwgMHgxZSwgMHg0MiwgMHgxZSwgMHg0MiwgMHgyZSwgMHg0MiwKKwkweGNjLCAweDQyLCAweDExLCAweDRhLCAweDFlLCAweDRhLCAweDJlLCAweDRhLAorCTB4NGMsIDB4NDAsIDB4MWUsIDB4NDAsIDB4MTEsIDB4NDgsIDB4MWUsIDB4MzIsCisJMHgxZSwgMHgzMiwgMHgyZSwgMHgzMiwgMHhjYywgMHgzMiwgMHgxMSwgMHgzYSwKKwkweDFlLCAweDNhLCAweDJlLCAweDNhLCAweDRjLCAweDMwLCAweDFlLCAweDMwLAorCTB4MTEsIDB4MzgsIDB4MWUsIDB4MjcsIDB4OWEsIDB4MDEsIDB4OWQsIDB4YTIsCisJMHgyZiwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0NiwgMHhkZSwgMHhjNCwgMHhiZiwKKwkweGE2LCAweDlkLCAweDgxLCAweDdiLCAweDVjLCAweDYxLCAweDQwLCAweGM3LAorCTB4YzAsIDB4YWUsIDB4YTksIDB4OGMsIDB4ODMsIDB4NmEsIDB4NjIsIDB4NTAsCisJMHgzZSwgMHhjZSwgMHhjMiwgMHhhZSwgMHhhMywgMHg4YywgMHg3YiwgMHg2YSwKKwkweDVhLCAweDUwLCAweDM1LCAweGQ3LCAweGMyLCAweGI3LCAweGE0LCAweDk1LAorCTB4N2UsIDB4NzIsIDB4NWEsIDB4NTksIDB4MzcsIDB4ZmUsIDB4MDIsIDB4ZjgsCisJMHg4YywgMHg5NSwgMHg5MCwgMHg4ZiwgMHgwMCwgMHhkNywgMHhjMCwgMHhiNywKKwkweGEyLCAweDk1LCAweDdiLCAweDcyLCAweDU2LCAweDU5LCAweDMyLCAweGM3LAorCTB4YzMsIDB4YWUsIDB4YWQsIDB4OGMsIDB4ODUsIDB4NmEsIDB4NjMsIDB4NTAsCisJMHgzZSwgMHhjZSwgMHhjMywgMHhhZSwgMHhhNCwgMHg4YywgMHg3YywgMHg2YSwKKwkweDU5LCAweDUwLCAweDM0LCAweGQ3LCAweGMyLCAweGI3LCAweGE1LCAweDk1LAorCTB4N2UsIDB4NzIsIDB4NTksIDB4NTksIDB4MzYsIDB4ZmMsIDB4MDUsIDB4MDAsCisJMHgwMiwgMHhjZSwgMHhjNSwgMHhhZSwgMHhhNSwgMHg5NSwgMHg4MywgMHg3MiwKKwkweDVjLCAweDU5LCAweDM2LCAweGJmLCAweGM2LCAweGE1LCAweGFiLCAweDhjLAorCTB4OGMsIDB4NmEsIDB4NjcsIDB4NTAsIDB4NDEsIDB4NjQsIDB4MDcsIDB4MDAsCisJMHgwMiwgMHg5NSwgMHg4YywgMHg3MiwgMHg2NSwgMHg1OSwgMHgzZiwgMHhjZSwKKwkweGM3LCAweGFlLCAweGE4LCAweDk1LCAweDg2LCAweDcyLCAweDVmLCAweDU5LAorCTB4MzksIDB4ZmUsIDB4MDIsIDB4ZjgsIDB4OGIsIDB4N2MsIDB4MGIsIDB4MDksCisJMHhiNywgMHhjMiwgMHg5ZCwgMHhhNCwgMHg4MywgMHg4NSwgMHg2YSwgMHg2YiwKKwkweDUwLCAweDQ0LCAweGI3LCAweGMxLCAweDY0LCAweDAxLCAweDAwLCAweDA2LAorCTB4NjEsIDB4NWQsIDB4NDgsIDB4M2QsIDB4YWUsIDB4YzQsIDB4OWQsIDB4YWQsCisJMHg3YiwgMHg4NSwgMHg2MSwgMHg2NiwgMHg0OCwgMHg0NiwgMHhhZSwgMHhjMywKKwkweDk1LCAweGEzLCAweDcyLCAweDdjLCAweDU5LCAweDU2LCAweDM4LCAweDMxLAorCTB4N2MsIDB4MGIsIDB4MDAsIDB4MGMsIDB4OTYsIDB4OTEsIDB4OGYsIDB4MDAsCisJMHhiNywgMHhjMCwgMHhhNSwgMHhhYiwgMHg4YywgMHg4YSwgMHg2YSwgMHg2NCwKKwkweDUwLCAweDNjLCAweGI3LCAweGMwLCAweDlkLCAweGEwLCAweDgzLCAweDgwLAorCTB4NmEsIDB4NjQsIDB4NTAsIDB4M2QsIDB4YjcsIDB4YzUsIDB4OWQsIDB4YTUsCisJMHg4MywgMHg4NywgMHg2YywgMHgwOCwgMHgwNywgMHhhZSwgMHhjMCwgMHg5ZCwKKwkweGE4LCAweDgzLCAweDg4LCAweDZhLCAweDZkLCAweDUwLCAweDQ2LCAweGZjLAorCTB4MDUsIDB4MDAsIDB4MTYsIDB4YmYsIDB4YzAsIDB4YTUsIDB4YTIsIDB4OGMsCisJMHg3ZiwgMHg2YSwgMHg1NywgMHg1MCwgMHgyZiwgMHhiNywgMHhjNywgMHhhNSwKKwkweGIxLCAweDhjLCAweDhlLCAweDcyLCAweDZkLCAweDU5LCAweDQ1LCAweGJmLAorCTB4YzYsIDB4YTUsIDB4YTgsIDB4OGMsIDB4ODcsIDB4NmEsIDB4NWYsIDB4NTAsCisJMHgzNywgMHhiZiwgMHhjMiwgMHhhNSwgMHhhNCwgMHg4YywgMHg4MywgMHg2YSwKKwkweDVjLCAweDUwLCAweDM0LCAweGJjLCAweDA1LCAweDAwLCAweDBlLCAweDkwLAorCTB4MDAsIDB4YzcsIDB4YzIsIDB4YWUsIDB4YWEsIDB4OTUsIDB4ODIsIDB4N2IsCisJMHg2MCwgMHg2MSwgMHgzZiwgMHhiNywgMHhjNiwgMHhhNSwgMHhiMSwgMHg4YywKKwkweDhkLCAweDcyLCAweDZiLCAweDYxLCAweDUxLCAweGJmLCAweGM0LCAweGE1LAorCTB4YTUsIDB4OGMsIDB4ODIsIDB4NzIsIDB4NjEsIDB4NTksIDB4MzksIDB4NmMsCisJMHgyNiwgMHgwMywgMHg5NSwgMHg4MiwgMHg3YiwgMHg2MSwgMHg2MSwgMHg0MCwKKwkweGZjLCAweDA1LCAweDAwLCAweDAwLCAweDdlLCAweGQ3LCAweGMzLCAweGI3LAorCTB4YTgsIDB4OWQsIDB4ODAsIDB4ODMsIDB4NWQsIDB4NmEsIDB4M2YsIDB4YmYsCisJMHhjNywgMHhhNSwgMHhhOCwgMHg4YywgMHg4NCwgMHg3MiwgMHg2MCwgMHg2MSwKKwkweDQ2LCAweGJmLCAweGMyLCAweGFlLCAweGIwLCAweDlkLCAweDkyLCAweDgzLAorCTB4NmYsIDB4NmEsIDB4NTAsIDB4ZDcsIDB4YzMsIDB4YjcsIDB4YTcsIDB4OWQsCisJMHg4MCwgMHg4MywgMHg1ZSwgMHg2YSwgMHg0MCwgMHhmZSwgMHgwMiwgMHhmOCwKKwkweDhkLCAweDk2LCAweDkwLCAweDkwLCAweGZlLCAweDA1LCAweDAwLCAweDhhLAorCTB4YzQsIDB4NjMsIDB4YjgsIDB4M2MsIDB4YTYsIDB4MjksIDB4OTcsIDB4MTYsCisJMHg4MSwgMHg4NCwgMHhiNywgMHg1YiwgMHhhOSwgMHgzMywgMHg5NCwgMHgxZSwKKwkweDgzLCAweDExLCAweDcwLCAweGI4LCAweGMyLCAweDcwLCAweGIxLCAweDRkLAorCTB4YTMsIDB4MmEsIDB4OGQsIDB4MWIsIDB4N2IsIDB4YTgsIDB4YmMsIDB4NjgsCisJMHhhYiwgMHg0NywgMHg5ZCwgMHgyNywgMHg4NywgMHgxOCwgMHg3NSwgMHhhZSwKKwkweGM2LCAweDdkLCAweGJiLCAweDRkLCAweGFhLCAweDFjLCAweDg0LCAweDExLAorCTB4NzIsIDB4YTMsIDB4YmIsIDB4NmUsIDB4YWQsIDB4M2MsIDB4OTcsIDB4MjQsCisJMHg4NSwgMHgxNiwgMHg3MSwgMHg4MCwgMHhiMiwgMHg1NywgMHhhNCwgMHgzMCwKKwkweDhlLCAweDFjLCAweDdjLCAweDEwLCAweDY4LCAweGJiLCAweGJkLCAweDc1LAorCTB4YWMsIDB4NGYsIDB4OWUsIDB4MmIsIDB4ODcsIDB4MWEsIDB4NzYsIDB4OTYsCisJMHhjNSwgMHg1ZSwgMHhiNSwgMHgzZSwgMHhhNSwgMHgxZiwgMHg4YywgMHgxMiwKKwkweDdhLCAweGMxLCAweGM2LCAweDQyLCAweDlmLCAweDI3LCAweDhjLCAweDE2LAorCTB4NzcsIDB4MGYsIDB4NjcsIDB4OWQsIDB4YmMsIDB4NjgsIDB4YWQsIDB4MzYsCisJMHg5NSwgMHgyMCwgMHg4MywgMHgxMSwgMHg2ZCwgMHg5YiwgMHhiOCwgMHg2NywKKwkweGE4LCAweDM0LCAweDkwLCAweDFmLCAweDdjLCAweDEwLCAweDY3LCAweDllLAorCTB4YzksIDB4NmEsIDB4YmIsIDB4MzcsIDB4YTQsIDB4MjAsIDB4OTAsIDB4MTEsCisJMHg3YiwgMHhjNiwgMHhjOCwgMHg0NywgMHhhNCwgMHgyYSwgMHg5MCwgMHgxOCwKKwkweDdiLCAweDEwLCAweDZjLCAweGFlLCAweGM0LCAweDVkLCAweGFkLCAweDM3LAorCTB4OWEsIDB4MWYsIDB4ODUsIDB4MTMsIDB4NzUsIDB4NzAsIDB4YWQsIDB4NDIsCisJMHg5OSwgMHgyNSwgMHg4NCwgMHgxNywgMHg3NCwgMHgwYiwgMHg1NiwgMHg4NywKKwkweGM4LCAweDU3LCAweGI4LCAweDJiLCAweDllLCAweDE5LCAweDhhLCAweDBkLAorCTB4NzQsIDB4YTcsIDB4YzgsIDB4NmUsIDB4YjksIDB4MzYsIDB4YTAsIDB4MWYsCisJMHg4YiwgMHgxMSwgMHg3NSwgMHg5NCwgMHhiZSwgMHg0YiwgMHhhNSwgMHgyYSwKKwkweDkyLCAweDE4LCAweDdjLCAweDBmLCAweDZiLCAweGFmLCAweGMwLCAweDU4LAorCTB4YTgsIDB4MzQsIDB4OTQsIDB4MWQsIDB4N2QsIDB4MTIsIDB4NmQsIDB4ODIsCisJMHhjMCwgMHg1MiwgMHhiMCwgMHgyNSwgMHg5NCwgMHgxNCwgMHg3ZiwgMHgwYywKKwkweDY4LCAweDg0LCAweGJmLCAweDNlLCAweGE0LCAweDIyLCAweDhlLCAweDEwLAorCTB4NzYsIDB4MGIsIDB4NjUsIDB4ODgsIDB4YjYsIDB4NDIsIDB4OWIsIDB4MjYsCisJMHg4NywgMHgxNCwgMHg3MCwgMHgwYywgMHg1ZiwgMHhjNSwgMHhjMiwgMHgzZSwKKwkweDk3LCAweDIzLCAweDgzLCAweDEzLCAweDZjLCAweDBjLCAweDVjLCAweGIxLAorCTB4YzksIDB4NzYsIDB4YmMsIDB4NGEsIDB4YWEsIDB4MjAsIDB4OGQsIDB4MTIsCisJMHg3OCwgMHg5MywgMHhiZiwgMHg0NiwgMHhhMywgMHgyNiwgMHg4ZCwgMHgxNCwKKwkweDc0LCAweDBjLCAweDYyLCAweGM4LCAweGM0LCAweDNiLCAweDk3LCAweDIxLAorCTB4ODIsIDB4MTEsIDB4NmEsIDB4MGEsIDB4NTksIDB4YTMsIDB4YjksIDB4NjgsCisJMHhhOSwgMHgzMCwgMHg4ZCwgMHgxYSwgMHg3OCwgMHgwZiwgMHg2MSwgMHhhMCwKKwkweGM5LCAweDczLCAweGJlLCAweDUwLCAweGIxLCAweDMwLCAweDlmLCAweDE0LAorCTB4ODAsIDB4ODMsIDB4YjcsIDB4M2MsIDB4OWEsIDB4MjAsIDB4ODQsIDB4MGUsCisJMHg2YSwgMHgwYSwgMHg1NywgMHhhYywgMHhjMiwgMHg2OCwgMHhiMCwgMHgyZSwKKwkweDkyLCAweDE5LCAweDdjLCAweDBkLCAweDYzLCAweDkzLCAweGJlLCAweDYyLAorCTB4YjAsIDB4M2MsIDB4OWUsIDB4MWEsIDB4ODAsIDB4MGUsIDB4NmIsIDB4YmIsCisJMHgwMiwgMHhhMCwgMHgwMiwgMHhhMCwgMHgwMiwgMHg2ZiwgMHgwMCwgMHg3NSwKKwkweDAwLCAweDc1LCAweDAwLCAweDAwLCAweDAwLCAweGFkLCAweDAyLCAweGIzLAorCTB4MDIsIDB4NmYsIDB4MDAsIDB4ODcsIDB4MDAsIDB4ODUsIDB4ZmUsIDB4MDMsCisJMHgwMCwgMHhjMiwgMHgwMiwgMHg4MiwgMHg0ZCwgMHg5MiwgMHg2ZSwgMHg0ZCwKKwkweGIxLCAweGE4LCAweDg0LCAweDAxLCAweDAwLCAweDA3LCAweDdlLCAweDAwLAorCTB4YTgsIDB4MDIsIDB4YTQsIDB4MDIsIDB4YTQsIDB4MDIsIDB4YTIsIDB4MDAsCisJMHhhNiwgMHgwMCwgMHhhNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNCwgMHgwMiwKKwkweGI0LCAweDAyLCAweDkyLCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDQ2LAorCTB4MDQsIDB4YjAsIDB4MDIsIDB4NjQsIDB4MDIsIDB4MGEsIDB4OGMsIDB4MDAsCisJMHg5MCwgMHgwMiwgMHg5OCwgMHgwMiwgMHg5OCwgMHgwMiwgMHgwZSwgMHgwMSwKKwkweDExLCAweDAxLCAweDExLCAweDUwLCAweGMzLCAweDA4LCAweDg4LCAweDAyLAorCTB4ODgsIDB4MDIsIDB4MTksIDB4MDEsIDB4MDIsIDB4MDEsIDB4MDIsIDB4MDEsCisJMHhmMywgMHgyZCwgMHgwMCwgMHgwMAorfTsKKworLyogQXJyYXkgb2Yga25vd24gaHdfb3B0aW9ucyBiaXRzIHdpdGggaHVtYW4tZnJpZW5kbHkgcGFyc2luZyAqLworc3RhdGljIHN0cnVjdCBoY19od29wdCB7CisJY29uc3QgdTMyIGJpdDsKKwljb25zdCBjaGFyICpzdHI7Cit9IGNvbnN0IGhjX2h3b3B0c1tdID0geworCXsKKwkJLmJpdCA9IFJCX0hXX09QVF9OT19VQVJULAorCQkuc3RyID0gIm5vIFVBUlRcdFx0IiwKKwl9LCB7CisJCS5iaXQgPSBSQl9IV19PUFRfSEFTX1ZPTFRBR0UsCisJCS5zdHIgPSAiaGFzIFZyZWdcdCIsCisJfSwgeworCQkuYml0ID0gUkJfSFdfT1BUX0hBU19VU0IsCisJCS5zdHIgPSAiaGFzIHVzYlx0XHQiLAorCX0sIHsKKwkJLmJpdCA9IFJCX0hXX09QVF9IQVNfQVRUSU5ZLAorCQkuc3RyID0gImhhcyBBVHRpbnlcdCIsCisJfSwgeworCQkuYml0ID0gUkJfSFdfT1BUX05PX05BTkQsCisJCS5zdHIgPSAibm8gTkFORFx0XHQiLAorCX0sIHsKKwkJLmJpdCA9IFJCX0hXX09QVF9IQVNfTENELAorCQkuc3RyID0gImhhcyBMQ0RcdFx0IiwKKwl9LCB7CisJCS5iaXQgPSBSQl9IV19PUFRfSEFTX1BPRV9PVVQsCisJCS5zdHIgPSAiaGFzIFBPRSBvdXRcdCIsCisJfSwgeworCQkuYml0ID0gUkJfSFdfT1BUX0hBU191U0QsCisJCS5zdHIgPSAiaGFzIE1pY3JvU0RcdCIsCisJfSwgeworCQkuYml0ID0gUkJfSFdfT1BUX0hBU19TSU0sCisJCS5zdHIgPSAiaGFzIFNJTVx0XHQiLAorCX0sIHsKKwkJLmJpdCA9IFJCX0hXX09QVF9IQVNfU0ZQLAorCQkuc3RyID0gImhhcyBTRlBcdFx0IiwKKwl9LCB7CisJCS5iaXQgPSBSQl9IV19PUFRfSEFTX1dJRkksCisJCS5zdHIgPSAiaGFzIFdpRmlcdCIsCisJfSwgeworCQkuYml0ID0gUkJfSFdfT1BUX0hBU19UU19GT1JfQURDLAorCQkuc3RyID0gImhhcyBUUyBBRENcdCIsCisJfSwgeworCQkuYml0ID0gUkJfSFdfT1BUX0hBU19QTEMsCisJCS5zdHIgPSAiaGFzIFBMQ1x0XHQiLAorCX0sCit9OworCisvKgorICogVGhlIE1BQyBpcyBzdG9yZWQgbmV0d29yay1lbmRpYW4gb24gYWxsIGRldmljZXMsIGluIDIgMzItYml0IHNlZ21lbnRzOgorICogPFhYOlhYOlhYOlhYPiA8WFg6WFg6MDA6MDA+LiBLZXJuZWwgcHJpbnQgaGFzIHVzIGNvdmVyZWQuCisgKi8KK3N0YXRpYyBzc2l6ZV90IGhjX3RhZ19zaG93X21hYyhjb25zdCB1OCAqcGxkLCB1MTYgcGxkX2xlbiwgY2hhciAqYnVmKQoreworCWlmICg4ICE9IHBsZF9sZW4pCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXBNXG4iLCBwbGQpOworfQorCisvKgorICogUHJpbnQgSFcgb3B0aW9ucyBpbiBhIGh1bWFuIHJlYWRhYmxlIHdheToKKyAqIFRoZSByYXcgbnVtYmVyIGFuZCBpbiBkZWNvZGVkIGZvcm0KKyAqLworc3RhdGljIHNzaXplX3QgaGNfdGFnX3Nob3dfaHdvcHRpb25zKGNvbnN0IHU4ICpwbGQsIHUxNiBwbGRfbGVuLCBjaGFyICpidWYpCit7CisJY2hhciAqb3V0ID0gYnVmOworCXUzMiBkYXRhOwkvLyBjcHUtZW5kaWFuCisJaW50IGk7CisKKwlpZiAoc2l6ZW9mKGRhdGEpICE9IHBsZF9sZW4pCisJCXJldHVybiAtRUlOVkFMOworCisJZGF0YSA9ICoodTMyICopcGxkOworCW91dCArPSBzcHJpbnRmKG91dCwgInJhd1x0XHQ6IDB4JTA4eFxuXG4iLCBkYXRhKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhjX2h3b3B0cyk7IGkrKykKKwkJb3V0ICs9IHNwcmludGYob3V0LCAiJXM6ICVzXG4iLCBoY19od29wdHNbaV0uc3RyLAorCQkJICAgICAgIChkYXRhICYgaGNfaHdvcHRzW2ldLmJpdCkgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKworCXJldHVybiBvdXQgLSBidWY7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGhjX3dsYW5fZGF0YV9iaW5fcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJICAgICBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmLAorCQkJCSAgICAgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KTsKKworc3RhdGljIHN0cnVjdCBoY193bGFuX2F0dHIgeworCWNvbnN0IHUxNiBlcmRfdGFnX2lkOworCXN0cnVjdCBiaW5fYXR0cmlidXRlIGJhdHRyOworCXUxNiBwbGRfb2ZzOworCXUxNiBwbGRfbGVuOworfSBoY193ZF9tdWx0aV9iYXR0cnNbXSA9IHsKKwl7CisJCS5lcmRfdGFnX2lkID0gUkJfV0xBTl9FUkRfSURfTVVMVElfODAwMSwKKwkJLmJhdHRyID0gX19CSU5fQVRUUihkYXRhXzAsIFNfSVJVU1IsIGhjX3dsYW5fZGF0YV9iaW5fcmVhZCwgTlVMTCwgMCksCisJfSwgeworCQkuZXJkX3RhZ19pZCA9IFJCX1dMQU5fRVJEX0lEX01VTFRJXzgyMDEsCisJCS5iYXR0ciA9IF9fQklOX0FUVFIoZGF0YV8yLCBTX0lSVVNSLCBoY193bGFuX2RhdGFfYmluX3JlYWQsIE5VTEwsIDApLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGNfd2xhbl9hdHRyIGhjX3dkX3NvbG9fYmF0dHIgPSB7CisJLmVyZF90YWdfaWQgPSBSQl9XTEFOX0VSRF9JRF9TT0xPLAorCS5iYXR0ciA9IF9fQklOX0FUVFIod2xhbl9kYXRhLCBTX0lSVVNSLCBoY193bGFuX2RhdGFfYmluX3JlYWQsIE5VTEwsIDApLAorfTsKKworc3RhdGljIHNzaXplX3QgaGNfYXR0cl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgY2hhciAqYnVmKTsKKworLyogQXJyYXkgb2Yga25vd24gdGFncyB0byBwdWJsaXNoIGluIHN5c2ZzICovCitzdGF0aWMgc3RydWN0IGhjX2F0dHIgeworCWNvbnN0IHUxNiB0YWdfaWQ7CisJc3NpemVfdCAoKiBjb25zdCB0c2hvdykoY29uc3QgdTggKnBsZCwgdTE2IHBsZF9sZW4sIGNoYXIgKmJ1Zik7CisJc3RydWN0IGtvYmpfYXR0cmlidXRlIGthdHRyOworCXUxNiBwbGRfb2ZzOworCXUxNiBwbGRfbGVuOworfSBoY19hdHRyc1tdID0geworCXsKKwkJLnRhZ19pZCA9IFJCX0lEX0ZMQVNIX0lORk8sCisJCS50c2hvdyA9IHJvdXRlcmJvb3RfdGFnX3Nob3dfdTMycywKKwkJLmthdHRyID0gX19BVFRSKGZsYXNoX2luZm8sIFNfSVJVU1IsIGhjX2F0dHJfc2hvdywgTlVMTCksCisJfSwgeworCQkudGFnX2lkID0gUkJfSURfTUFDX0FERFJFU1NfUEFDSywKKwkJLnRzaG93ID0gaGNfdGFnX3Nob3dfbWFjLAorCQkua2F0dHIgPSBfX0FUVFIobWFjX2Jhc2UsIFNfSVJVU1IsIGhjX2F0dHJfc2hvdywgTlVMTCksCisJfSwgeworCQkudGFnX2lkID0gUkJfSURfQk9BUkRfUFJPRFVDVF9DT0RFLAorCQkudHNob3cgPSByb3V0ZXJib290X3RhZ19zaG93X3N0cmluZywKKwkJLmthdHRyID0gX19BVFRSKGJvYXJkX3Byb2R1Y3RfY29kZSwgU19JUlVTUiwgaGNfYXR0cl9zaG93LCBOVUxMKSwKKwl9LCB7CisJCS50YWdfaWQgPSBSQl9JRF9CSU9TX1ZFUlNJT04sCisJCS50c2hvdyA9IHJvdXRlcmJvb3RfdGFnX3Nob3dfc3RyaW5nLAorCQkua2F0dHIgPSBfX0FUVFIoYm9vdGVyX3ZlcnNpb24sIFNfSVJVU1IsIGhjX2F0dHJfc2hvdywgTlVMTCksCisJfSwgeworCQkudGFnX2lkID0gUkJfSURfU0VSSUFMX05VTUJFUiwKKwkJLnRzaG93ID0gcm91dGVyYm9vdF90YWdfc2hvd19zdHJpbmcsCisJCS5rYXR0ciA9IF9fQVRUUihib2FyZF9zZXJpYWwsIFNfSVJVU1IsIGhjX2F0dHJfc2hvdywgTlVMTCksCisJfSwgeworCQkudGFnX2lkID0gUkJfSURfTUVNT1JZX1NJWkUsCisJCS50c2hvdyA9IHJvdXRlcmJvb3RfdGFnX3Nob3dfdTMycywKKwkJLmthdHRyID0gX19BVFRSKG1lbV9zaXplLCBTX0lSVVNSLCBoY19hdHRyX3Nob3csIE5VTEwpLAorCX0sIHsKKwkJLnRhZ19pZCA9IFJCX0lEX01BQ19BRERSRVNTX0NPVU5ULAorCQkudHNob3cgPSByb3V0ZXJib290X3RhZ19zaG93X3UzMnMsCisJCS5rYXR0ciA9IF9fQVRUUihtYWNfY291bnQsIFNfSVJVU1IsIGhjX2F0dHJfc2hvdywgTlVMTCksCisJfSwgeworCQkudGFnX2lkID0gUkJfSURfSFdfT1BUSU9OUywKKwkJLnRzaG93ID0gaGNfdGFnX3Nob3dfaHdvcHRpb25zLAorCQkua2F0dHIgPSBfX0FUVFIoaHdfb3B0aW9ucywgU19JUlVTUiwgaGNfYXR0cl9zaG93LCBOVUxMKSwKKwl9LCB7CisJCS50YWdfaWQgPSBSQl9JRF9XTEFOX0RBVEEsCisJCS50c2hvdyA9IE5VTEwsCisJfSwgeworCQkudGFnX2lkID0gUkJfSURfQk9BUkRfSURFTlRJRklFUiwKKwkJLnRzaG93ID0gcm91dGVyYm9vdF90YWdfc2hvd19zdHJpbmcsCisJCS5rYXR0ciA9IF9fQVRUUihib2FyZF9pZGVudGlmaWVyLCBTX0lSVVNSLCBoY19hdHRyX3Nob3csIE5VTEwpLAorCX0sIHsKKwkJLnRhZ19pZCA9IFJCX0lEX1BST0RVQ1RfTkFNRSwKKwkJLnRzaG93ID0gcm91dGVyYm9vdF90YWdfc2hvd19zdHJpbmcsCisJCS5rYXR0ciA9IF9fQVRUUihwcm9kdWN0X25hbWUsIFNfSVJVU1IsIGhjX2F0dHJfc2hvdywgTlVMTCksCisJfSwgeworCQkudGFnX2lkID0gUkJfSURfREVGQ09ORiwKKwkJLnRzaG93ID0gcm91dGVyYm9vdF90YWdfc2hvd19zdHJpbmcsCisJCS5rYXR0ciA9IF9fQVRUUihkZWZjb25mLCBTX0lSVVNSLCBoY19hdHRyX3Nob3csIE5VTEwpLAorCX0sIHsKKwkJLnRhZ19pZCA9IFJCX0lEX0JPQVJEX1JFVklTSU9OLAorCQkudHNob3cgPSByb3V0ZXJib290X3RhZ19zaG93X3N0cmluZywKKwkJLmthdHRyID0gX19BVFRSKGJvYXJkX3JldmlzaW9uLCBTX0lSVVNSLCBoY19hdHRyX3Nob3csIE5VTEwpLAorCX0KK307CisKKy8qCisgKiBJZiB0aGUgUkJfSURfV0xBTl9EQVRBIHBheWxvYWQgc3RhcnRzIHdpdGggUkJfTUFHSUNfRVJELCB0aGVuIHBhc3QKKyAqIHRoYXQgbWFnaWMgbnVtYmVyIHRoZSBwYXlsb2FkIGl0c2VsZiBjb250YWlucyBhIHJvdXRlcmJvb3QgdGFnIG5vZGUKKyAqIGxvY2F0aW5nIHRoZSBMWk8tY29tcHJlc3NlZCBjYWxpYnJhdGlvbiBkYXRhLiBTbyBmYXIgdGhpcyBzY2hlbWUgaXMgb25seQorICoga25vd24gdG8gdXNlIGEgc2luZ2xlIHRhZyBhdCBpZCAweDEuCisgKi8KK3N0YXRpYyBpbnQgaGNfd2xhbl9kYXRhX3VucGFja19lcmQoY29uc3QgdTE2IHRhZ19pZCwgY29uc3QgdTggKmluYnVmLCBzaXplX3QgaW5sZW4sCisJCQkJICAgdm9pZCAqb3V0YnVmLCBzaXplX3QgKm91dGxlbikKK3sKKwl1MTYgbHpvX29mcywgbHpvX2xlbjsKKwlpbnQgcmV0OworCisJLyogRmluZCBlbWJlZGRlZCB0YWcgKi8KKwlyZXQgPSByb3V0ZXJib290X3RhZ19maW5kKGluYnVmLCBpbmxlbiwgdGFnX2lkLCAmbHpvX29mcywgJmx6b19sZW4pOworCWlmIChyZXQpIHsKKwkJcHJfZGVidWcoUkJfSENfUFJfUEZYICJubyBFUkQgZGF0YSBmb3IgaWQgMHglMDR4XG4iLCB0YWdfaWQpOworCQlnb3RvIGZhaWw7CisJfQorCisJaWYgKGx6b19sZW4gPiBpbmxlbikgeworCQlwcl9kZWJ1ZyhSQl9IQ19QUl9QRlggIkludmFsaWQgRVJEIGRhdGEgbGVuZ3RoXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBmYWlsOworCX0KKworCXJldCA9IGx6bzF4X2RlY29tcHJlc3Nfc2FmZShpbmJ1Zitsem9fb2ZzLCBsem9fbGVuLCBvdXRidWYsIG91dGxlbik7CisJaWYgKHJldCkKKwkJcHJfZGVidWcoUkJfSENfUFJfUEZYICJMWk8gZGVjb21wcmVzc2lvbiBlcnJvciAoJWQpXG4iLCByZXQpOworCitmYWlsOgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBJZiB0aGUgUkJfSURfV0xBTl9EQVRBIHBheWxvYWQgc3RhcnRzIHdpdGggUkJfTUFHSUNfTFpPUiwgdGhlbiBwYXN0CisgKiB0aGF0IG1hZ2ljIG51bWJlciBpcyBhIHBheWxvYWQgdGhhdCBtdXN0IGJlIGFwcGVuZGVkIHRvIHRoZSBoY19sem9yX3ByZWZpeCwKKyAqIHRoZSByZXN1bHRpbmcgYmxvYiBpcyBMWk8tY29tcHJlc3NlZC4gSW4gdGhlIExaTyBkZWNvbXByZXNzaW9uIHJlc3VsdCwKKyAqIHRoZSBSQl9NQUdJQ19FUkQgbWFnaWMgbnVtYmVyIChhbGlnbmVkKSBtdXN0IGJlIGxvY2F0ZWQuIEZvbGxvd2luZyB0aGF0CisgKiBtYWdpYywgdGhlcmUgaXMgb25lIG9yIG1vcmUgcm91dGVyYm9vdCB0YWcgbm9kZShzKSBsb2NhdGluZyB0aGUgUkxFLWVuY29kZWQKKyAqIGNhbGlicmF0aW9uIGRhdGEgcGF5bG9hZC4KKyAqLworc3RhdGljIGludCBoY193bGFuX2RhdGFfdW5wYWNrX2x6b3IoY29uc3QgdTE2IHRhZ19pZCwgY29uc3QgdTggKmluYnVmLCBzaXplX3QgaW5sZW4sCisJCQkJICAgIHZvaWQgKm91dGJ1Ziwgc2l6ZV90ICpvdXRsZW4pCit7CisJdTE2IHJsZV9vZnMsIHJsZV9sZW47CisJY29uc3QgdTMyICpuZWVkbGU7CisJdTggKnRlbXBidWY7CisJc2l6ZV90IHRlbXBsZW4sIGx6b19sZW47CisJaW50IHJldDsKKworCWx6b19sZW4gPSBpbmxlbiArIHNpemVvZihoY19sem9yX3ByZWZpeCk7CisJaWYgKGx6b19sZW4gPiAqb3V0bGVuKQorCQlyZXR1cm4gLUVGQklHOworCisJLyogVGVtcG9yYXJ5IGJ1ZmZlciBzYW1lIHNpemUgYXMgdGhlIG91dGJ1ZiAqLworCXRlbXBsZW4gPSAqb3V0bGVuOworCXRlbXBidWYgPSBrbWFsbG9jKHRlbXBsZW4sIEdGUF9LRVJORUwpOworCWlmICghdGVtcGJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBDb25jYXRlbmF0ZSBpbnRvIHRoZSBvdXRidWYgKi8KKwltZW1jcHkob3V0YnVmLCBoY19sem9yX3ByZWZpeCwgc2l6ZW9mKGhjX2x6b3JfcHJlZml4KSk7CisJbWVtY3B5KG91dGJ1ZiArIHNpemVvZihoY19sem9yX3ByZWZpeCksIGluYnVmLCBpbmxlbik7CisKKwkvKiBMWk8tZGVjb21wcmVzcyBsem9fbGVuIGJ5dGVzIG9mIG91dGJ1ZiBpbnRvIHRoZSB0ZW1wYnVmICovCisJcmV0ID0gbHpvMXhfZGVjb21wcmVzc19zYWZlKG91dGJ1ZiwgbHpvX2xlbiwgdGVtcGJ1ZiwgJnRlbXBsZW4pOworCWlmIChyZXQpIHsKKwkJaWYgKExaT19FX0lOUFVUX05PVF9DT05TVU1FRCA9PSByZXQpIHsKKwkJCS8qCisJCQkgKiBUaGUgdGFnIGxlbmd0aCBpcyBhbHdheXMgYWxpZ25lZCB0aHVzIHRoZSBMWk8gcGF5bG9hZCBtYXkgYmUgcGFkZGVkLAorCQkJICogd2hpY2ggY2FuIHRyaWdnZXIgYSBzcHVyaW91cyBlcnJvciB3aGljaCB3ZSBpZ25vcmUgaGVyZS4KKwkJCSAqLworCQkJcHJfZGVidWcoUkJfSENfUFJfUEZYICJMWk9SOiBMWk8gRU9GIGJlZm9yZSBidWZmZXIgZW5kIC0gdGhpcyBtYXkgYmUgaGFybWxlc3NcbiIpOworCQl9IGVsc2UgeworCQkJcHJfZGVidWcoUkJfSENfUFJfUEZYICJMWk9SOiBMWk8gZGVjb21wcmVzc2lvbiBlcnJvciAoJWQpXG4iLCByZXQpOworCQkJZ290byBmYWlsOworCQl9CisJfQorCisJLyoKKwkgKiBQb3N0IGRlY29tcHJlc3Npb24gd2UgaGF2ZSBhIGJsb2IgKHBvc3NpYmx5IGJ5cHJvZHVjdCBvZiB0aGUgbHpvCisJICogZGljdGlvbmFyeSkuIFdlIG5lZWQgdG8gZmluZCBSQl9NQUdJQ19FUkQuIFRoZSBtYWdpYyBudW1iZXIgc2VlbXMgdG8KKwkgKiBiZSAzMmJpdC1hbGlnbmVkIGluIHRoZSBkZWNvbXByZXNzaW9uIG91dHB1dC4KKwkgKi8KKwluZWVkbGUgPSAoY29uc3QgdTMyICopdGVtcGJ1ZjsKKwl3aGlsZSAoUkJfTUFHSUNfRVJEICE9ICpuZWVkbGUrKykgeworCQlpZiAoKHU4ICopbmVlZGxlID49IHRlbXBidWYrdGVtcGxlbikgeworCQkJcHJfZGVidWcoUkJfSENfUFJfUEZYICJMWk9SOiBFUkQgbWFnaWMgbm90IGZvdW5kXG4iKTsKKwkJCXJldCA9IC1FTk9EQVRBOworCQkJZ290byBmYWlsOworCQl9CisJfTsKKwl0ZW1wbGVuIC09ICh1OCAqKW5lZWRsZSAtIHRlbXBidWY7CisKKwkvKiBQYXN0IG1hZ2ljLiBMb29rIGZvciB0YWcgbm9kZSAqLworCXJldCA9IHJvdXRlcmJvb3RfdGFnX2ZpbmQoKHU4ICopbmVlZGxlLCB0ZW1wbGVuLCB0YWdfaWQsICZybGVfb2ZzLCAmcmxlX2xlbik7CisJaWYgKHJldCkgeworCQlwcl9kZWJ1ZyhSQl9IQ19QUl9QRlggIkxaT1I6IG5vIFJMRSBkYXRhIGZvciBpZCAweCUwNHhcbiIsIHRhZ19pZCk7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlpZiAocmxlX2xlbiA+IHRlbXBsZW4pIHsKKwkJcHJfZGVidWcoUkJfSENfUFJfUEZYICJMWk9SOiBJbnZhbGlkIFJMRSBkYXRhIGxlbmd0aFxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBSTEUtZGVjb2RlIHRlbXBidWYgZnJvbSBuZWVkbGUgYmFjayBpbnRvIHRoZSBvdXRidWYgKi8KKwlyZXQgPSByb3V0ZXJib290X3JsZV9kZWNvZGUoKHU4ICopbmVlZGxlK3JsZV9vZnMsIHJsZV9sZW4sIG91dGJ1Ziwgb3V0bGVuKTsKKwlpZiAocmV0KQorCQlwcl9kZWJ1ZyhSQl9IQ19QUl9QRlggIkxaT1I6IFJMRSBkZWNvZGluZyBlcnJvciAoJWQpXG4iLCByZXQpOworCitmYWlsOgorCWtmcmVlKHRlbXBidWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaGNfd2xhbl9kYXRhX3VucGFjayhjb25zdCB1MTYgdGFnX2lkLCBjb25zdCBzaXplX3QgdG9mcywgc2l6ZV90IHRsZW4sCisJCQkgICAgICAgdm9pZCAqb3V0YnVmLCBzaXplX3QgKm91dGxlbikKK3sKKwljb25zdCB1OCAqbGJ1ZjsKKwl1MzIgbWFnaWM7CisJaW50IHJldDsKKworCS8qIENhbGxlciBlbnN1cmUgdGxlbiA+IDAuIHRvZnMgaXMgYWxpZ25lZCAqLworCWlmICgodG9mcyArIHRsZW4pID4gaGNfYnVmbGVuKQorCQlyZXR1cm4gLUVJTzsKKworCWxidWYgPSBoY19idWYgKyB0b2ZzOworCW1hZ2ljID0gKih1MzIgKilsYnVmOworCisJcmV0ID0gLUVOT0RBVEE7CisJc3dpdGNoIChtYWdpYykgeworCWNhc2UgUkJfTUFHSUNfTFpPUjoKKwkJLyogU2tpcCBtYWdpYyAqLworCQlsYnVmICs9IHNpemVvZihtYWdpYyk7CisJCXRsZW4gLT0gc2l6ZW9mKG1hZ2ljKTsKKwkJcmV0ID0gaGNfd2xhbl9kYXRhX3VucGFja19sem9yKHRhZ19pZCwgbGJ1ZiwgdGxlbiwgb3V0YnVmLCBvdXRsZW4pOworCQlicmVhazsKKwljYXNlIFJCX01BR0lDX0VSRDoKKwkJLyogU2tpcCBtYWdpYyAqLworCQlsYnVmICs9IHNpemVvZihtYWdpYyk7CisJCXRsZW4gLT0gc2l6ZW9mKG1hZ2ljKTsKKwkJcmV0ID0gaGNfd2xhbl9kYXRhX3VucGFja19lcmQodGFnX2lkLCBsYnVmLCB0bGVuLCBvdXRidWYsIG91dGxlbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qCisJCSAqIElmIHRoZSBSQl9JRF9XTEFOX0RBVEEgcGF5bG9hZCBkb2Vzbid0IHN0YXJ0IHdpdGggYQorCQkgKiBtYWdpYyBudW1iZXIsIHRoZSBwYXlsb2FkIGl0c2VsZiBpcyB0aGUgcmF3IFJMRS1lbmNvZGVkCisJCSAqIGNhbGlicmF0aW9uIGRhdGEuIE9ubHkgUkJfV0xBTl9FUkRfSURfU09MTyBtYWtlcyBzZW5zZSBoZXJlLgorCQkgKi8KKwkJaWYgKFJCX1dMQU5fRVJEX0lEX1NPTE8gPT0gdGFnX2lkKSB7CisJCQlyZXQgPSByb3V0ZXJib290X3JsZV9kZWNvZGUobGJ1ZiwgdGxlbiwgb3V0YnVmLCBvdXRsZW4pOworCQkJaWYgKHJldCkKKwkJCQlwcl9kZWJ1ZyhSQl9IQ19QUl9QRlggIlJMRSBkZWNvZGluZyBlcnJvciAoJWQpXG4iLCByZXQpOworCQl9CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGhjX2F0dHJfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAorCQkJICAgIGNoYXIgKmJ1ZikKK3sKKwljb25zdCBzdHJ1Y3QgaGNfYXR0ciAqaGNfYXR0cjsKKwljb25zdCB1OCAqcGxkOworCXUxNiBwbGRfbGVuOworCisJaGNfYXR0ciA9IGNvbnRhaW5lcl9vZihhdHRyLCB0eXBlb2YoKmhjX2F0dHIpLCBrYXR0cik7CisKKwlpZiAoIWhjX2F0dHItPnBsZF9sZW4pCisJCXJldHVybiAtRU5PRU5UOworCisJcGxkID0gaGNfYnVmICsgaGNfYXR0ci0+cGxkX29mczsKKwlwbGRfbGVuID0gaGNfYXR0ci0+cGxkX2xlbjsKKworCXJldHVybiBoY19hdHRyLT50c2hvdyhwbGQsIHBsZF9sZW4sIGJ1Zik7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWxsb2NhdGUgYW5kIGZyZWUgbWVtb3J5IGV2ZXJ5IHRpbWUgaXQgaXMgY2FsbGVkLiBUaGlzCisgKiBpcyBub3QgdGhlIGZhc3Rlc3Qgd2F5IHRvIGRvIHRoaXMsIGJ1dCBzaW5jZSB0aGUgZGF0YSBpcyByYXJlbHkgcmVhZCAobWFpbmx5CisgKiBhdCBib290IHRpbWUgdG8gbG9hZCB3bGFuIGNhbGRhdGEpLCB0aGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHNhdmUgbWVtb3J5IGZvcgorICogdGhlIHN5c3RlbS4KKyAqLworc3RhdGljIHNzaXplX3QgaGNfd2xhbl9kYXRhX2Jpbl9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkgICAgIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYsCisJCQkJICAgICBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGhjX3dsYW5fYXR0ciAqaGNfd2F0dHI7CisJc2l6ZV90IG91dGxlbjsKKwl2b2lkICpvdXRidWY7CisJaW50IHJldDsKKworCWhjX3dhdHRyID0gY29udGFpbmVyX29mKGF0dHIsIHR5cGVvZigqaGNfd2F0dHIpLCBiYXR0cik7CisKKwlpZiAoIWhjX3dhdHRyLT5wbGRfbGVuKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCW91dGxlbiA9IFJCX0FSVF9TSVpFOworCisJLyogRG9uJ3QgYm90aGVyIHVucGFja2luZyBpZiB0aGUgc291cmNlIGlzIGFscmVhZHkgdG9vIGxhcmdlICovCisJaWYgKGhjX3dhdHRyLT5wbGRfbGVuID4gb3V0bGVuKQorCQlyZXR1cm4gLUVGQklHOworCisJb3V0YnVmID0ga21hbGxvYyhvdXRsZW4sIEdGUF9LRVJORUwpOworCWlmICghb3V0YnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IGhjX3dsYW5fZGF0YV91bnBhY2soaGNfd2F0dHItPmVyZF90YWdfaWQsIGhjX3dhdHRyLT5wbGRfb2ZzLCBoY193YXR0ci0+cGxkX2xlbiwgb3V0YnVmLCAmb3V0bGVuKTsKKwlpZiAocmV0KSB7CisJCWtmcmVlKG91dGJ1Zik7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKG9mZiA+PSBvdXRsZW4pIHsKKwkJa2ZyZWUob3V0YnVmKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKG9mZiArIGNvdW50ID4gb3V0bGVuKQorCQljb3VudCA9IG91dGxlbiAtIG9mZjsKKworCW1lbWNweShidWYsIG91dGJ1ZiArIG9mZiwgY291bnQpOworCisJa2ZyZWUob3V0YnVmKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK2ludCBfX2luaXQgcmJfaGFyZGNvbmZpZ19pbml0KHN0cnVjdCBrb2JqZWN0ICpyYl9rb2JqKQoreworCXN0cnVjdCBrb2JqZWN0ICpoY193bGFuX2tvYmo7CisJc3RydWN0IG10ZF9pbmZvICptdGQ7CisJc2l6ZV90IGJ5dGVzX3JlYWQsIGJ1Zmxlbiwgb3V0bGVuOworCWNvbnN0IHU4ICpidWY7CisJdm9pZCAqb3V0YnVmOworCWludCBpLCBqLCByZXQ7CisJdTMyIG1hZ2ljOworCisJaGNfYnVmID0gTlVMTDsKKwloY19rb2JqID0gTlVMTDsKKwloY193bGFuX2tvYmogPSBOVUxMOworCisJLy8gVE9ETyBhbGxvdyBvdmVycmlkZQorCW10ZCA9IGdldF9tdGRfZGV2aWNlX25tKFJCX01URF9IQVJEX0NPTkZJRyk7CisJaWYgKElTX0VSUihtdGQpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWhjX2J1ZmxlbiA9IG10ZC0+c2l6ZTsKKwloY19idWYgPSBrbWFsbG9jKGhjX2J1ZmxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFoY19idWYpIHsKKwkJcHV0X210ZF9kZXZpY2UobXRkKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0ID0gbXRkX3JlYWQobXRkLCAwLCBoY19idWZsZW4sICZieXRlc19yZWFkLCBoY19idWYpOworCXB1dF9tdGRfZGV2aWNlKG10ZCk7CisKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7CisKKwlpZiAoYnl0ZXNfcmVhZCAhPSBoY19idWZsZW4pIHsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBmYWlsOworCX0KKworCS8qIENoZWNrIHdlIGhhdmUgd2hhdCB3ZSBleHBlY3QgKi8KKwltYWdpYyA9ICooY29uc3QgdTMyICopaGNfYnVmOworCWlmIChSQl9NQUdJQ19IQVJEICE9IG1hZ2ljKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBTa2lwIG1hZ2ljICovCisJYnVmID0gaGNfYnVmICsgc2l6ZW9mKG1hZ2ljKTsKKwlidWZsZW4gPSBoY19idWZsZW4gLSBzaXplb2YobWFnaWMpOworCisJLyogUG9wdWxhdGUgc3lzZnMgKi8KKwlyZXQgPSAtRU5PTUVNOworCWhjX2tvYmogPSBrb2JqZWN0X2NyZWF0ZV9hbmRfYWRkKFJCX01URF9IQVJEX0NPTkZJRywgcmJfa29iaik7CisJaWYgKCFoY19rb2JqKQorCQlnb3RvIGZhaWw7CisKKwkvKiBMb2NhdGUgYW5kIHB1Ymxpc2ggYWxsIGtub3duIHRhZ3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShoY19hdHRycyk7IGkrKykgeworCQlyZXQgPSByb3V0ZXJib290X3RhZ19maW5kKGJ1ZiwgYnVmbGVuLCBoY19hdHRyc1tpXS50YWdfaWQsCisJCQkJCSAgJmhjX2F0dHJzW2ldLnBsZF9vZnMsICZoY19hdHRyc1tpXS5wbGRfbGVuKTsKKwkJaWYgKHJldCkgeworCQkJaGNfYXR0cnNbaV0ucGxkX29mcyA9IGhjX2F0dHJzW2ldLnBsZF9sZW4gPSAwOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBBY2NvdW50IGZvciBza2lwcGVkIG1hZ2ljICovCisJCWhjX2F0dHJzW2ldLnBsZF9vZnMgKz0gc2l6ZW9mKG1hZ2ljKTsKKworCQkvKgorCQkgKiBTcGVjaWFsIGNhc2UgUkJfSURfV0xBTl9EQVRBIHRvIHByZXAgYW5kIGNyZWF0ZSB0aGUgYmluYXJ5IGF0dHJpYnV0ZS4KKwkJICogV2UgZmlyc3QgY2hlY2sgaWYgdGhlIGRhdGEgaXMgIm9sZCBzdHlsZSIgd2l0aGluIGEgc2luZ2xlIHRhZyAob3Igbm8gdGFnIGF0IGFsbCk6CisJCSAqIElmIGl0IGlzIHdlIHB1Ymxpc2ggdGhpcyBzaW5nbGUgYmxvYiBhcyBhIGJpbmFyeSBhdHRyaWJ1dGUgY2hpbGQgb2YgaGNfa29iaiB0bworCQkgKiBwcmVzZXJ2ZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorCQkgKiBJZiBpdCBpc24ndCBhbmQgaW5zdGVhZCB1c2VzIG11bHRpcGxlIEVSRCB0YWdzLCB3ZSBjcmVhdGUgYSBzdWJmb2xkZXIgYW5kCisJCSAqIHB1Ymxpc2ggdGhlIGtub3duIG9uZXMgdGhlcmUuCisJCSAqLworCQlpZiAoKFJCX0lEX1dMQU5fREFUQSA9PSBoY19hdHRyc1tpXS50YWdfaWQpICYmIGhjX2F0dHJzW2ldLnBsZF9sZW4pIHsKKwkJCW91dGxlbiA9IFJCX0FSVF9TSVpFOworCQkJb3V0YnVmID0ga21hbGxvYyhvdXRsZW4sIEdGUF9LRVJORUwpOworCQkJaWYgKCFvdXRidWYpIHsKKwkJCQlwcl93YXJuKFJCX0hDX1BSX1BGWCAiT3V0IG9mIG1lbW9yeSBwYXJzaW5nIFdMQU4gdGFnXG4iKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyogVGVzdCBJRF9TT0xPIGZpcnN0LCBpZiBmb3VuZDogZG9uZSAqLworCQkJcmV0ID0gaGNfd2xhbl9kYXRhX3VucGFjayhSQl9XTEFOX0VSRF9JRF9TT0xPLCBoY19hdHRyc1tpXS5wbGRfb2ZzLCBoY19hdHRyc1tpXS5wbGRfbGVuLCBvdXRidWYsICZvdXRsZW4pOworCQkJaWYgKCFyZXQpIHsKKwkJCQloY193ZF9zb2xvX2JhdHRyLnBsZF9vZnMgPSBoY19hdHRyc1tpXS5wbGRfb2ZzOworCQkJCWhjX3dkX3NvbG9fYmF0dHIucGxkX2xlbiA9IGhjX2F0dHJzW2ldLnBsZF9sZW47CisKKwkJCQlyZXQgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoaGNfa29iaiwgJmhjX3dkX3NvbG9fYmF0dHIuYmF0dHIpOworCQkJCWlmIChyZXQpCisJCQkJCXByX3dhcm4oUkJfSENfUFJfUEZYICJDb3VsZCBub3QgY3JlYXRlICVzIHN5c2ZzIGVudHJ5ICglZClcbiIsCisJCQkJCQloY193ZF9zb2xvX2JhdHRyLmJhdHRyLmF0dHIubmFtZSwgcmV0KTsKKwkJCX0KKwkJCS8qIE90aGVyd2lzZSwgY3JlYXRlICJ3bGFuX2RhdGEiIHN1YnRyZWUgYW5kIHB1Ymxpc2gga25vd24gZGF0YSAqLworCQkJZWxzZSB7CisJCQkJaGNfd2xhbl9rb2JqID0ga29iamVjdF9jcmVhdGVfYW5kX2FkZCgid2xhbl9kYXRhIiwgaGNfa29iaik7CisJCQkJaWYgKCFoY193bGFuX2tvYmopIHsKKwkJCQkJa2ZyZWUob3V0YnVmKTsKKwkJCQkJcHJfd2FybihSQl9IQ19QUl9QRlggIkNvdWxkIG5vdCBjcmVhdGUgd2xhbl9kYXRhIHN5c2ZzIGZvbGRlclxuIik7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKworCQkJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGhjX3dkX211bHRpX2JhdHRycyk7IGorKykgeworCQkJCQlvdXRsZW4gPSBSQl9BUlRfU0laRTsKKwkJCQkJcmV0ID0gaGNfd2xhbl9kYXRhX3VucGFjayhoY193ZF9tdWx0aV9iYXR0cnNbal0uZXJkX3RhZ19pZCwKKwkJCQkJCQkJICBoY19hdHRyc1tpXS5wbGRfb2ZzLCBoY19hdHRyc1tpXS5wbGRfbGVuLCBvdXRidWYsICZvdXRsZW4pOworCQkJCQlpZiAocmV0KSB7CisJCQkJCQloY193ZF9tdWx0aV9iYXR0cnNbal0ucGxkX29mcyA9IGhjX3dkX211bHRpX2JhdHRyc1tqXS5wbGRfbGVuID0gMDsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisKKwkJCQkJaGNfd2RfbXVsdGlfYmF0dHJzW2pdLnBsZF9vZnMgPSBoY19hdHRyc1tpXS5wbGRfb2ZzOworCQkJCQloY193ZF9tdWx0aV9iYXR0cnNbal0ucGxkX2xlbiA9IGhjX2F0dHJzW2ldLnBsZF9sZW47CisKKwkJCQkJcmV0ID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKGhjX3dsYW5fa29iaiwgJmhjX3dkX211bHRpX2JhdHRyc1tqXS5iYXR0cik7CisJCQkJCWlmIChyZXQpCisJCQkJCQlwcl93YXJuKFJCX0hDX1BSX1BGWCAiQ291bGQgbm90IGNyZWF0ZSB3bGFuX2RhdGEvJXMgc3lzZnMgZW50cnkgKCVkKVxuIiwKKwkJCQkJCQloY193ZF9tdWx0aV9iYXR0cnNbal0uYmF0dHIuYXR0ci5uYW1lLCByZXQpOworCQkJCX0KKwkJCX0KKworCQkJa2ZyZWUob3V0YnVmKTsKKwkJfQorCQkvKiBBbGwgb3RoZXIgdGFncyBhcmUgcHVibGlzaGVkIHZpYSBzdGFuZGFyZCBhdHRyaWJ1dGVzICovCisJCWVsc2UgeworCQkJcmV0ID0gc3lzZnNfY3JlYXRlX2ZpbGUoaGNfa29iaiwgJmhjX2F0dHJzW2ldLmthdHRyLmF0dHIpOworCQkJaWYgKHJldCkKKwkJCQlwcl93YXJuKFJCX0hDX1BSX1BGWCAiQ291bGQgbm90IGNyZWF0ZSAlcyBzeXNmcyBlbnRyeSAoJWQpXG4iLAorCQkJCSAgICAgICBoY19hdHRyc1tpXS5rYXR0ci5hdHRyLm5hbWUsIHJldCk7CisJCX0KKwl9CisKKwlwcl9pbmZvKCJNaWtyb1RpayBSb3V0ZXJCT0FSRCBoYXJkd2FyZSBjb25maWd1cmF0aW9uIHN5c2ZzIGRyaXZlciB2IiBSQl9IQVJEQ09ORklHX1ZFUiAiXG4iKTsKKworCXJldHVybiAwOworCitmYWlsOgorCWtmcmVlKGhjX2J1Zik7CisJaGNfYnVmID0gTlVMTDsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIF9fZXhpdCByYl9oYXJkY29uZmlnX2V4aXQodm9pZCkKK3sKKwlrb2JqZWN0X3B1dChoY19rb2JqKTsKKwlrZnJlZShoY19idWYpOworfQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9wbGF0Zm9ybS9taWtyb3Rpay9yYl9zb2Z0Y29uZmlnLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL3BsYXRmb3JtL21pa3JvdGlrL3JiX3NvZnRjb25maWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzBiZDMyCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9wbGF0Zm9ybS9taWtyb3Rpay9yYl9zb2Z0Y29uZmlnLmMKQEAgLTAsMCArMSw4MDYgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKy8qCisgKiBEcml2ZXIgZm9yIE1pa3JvVGlrIFJvdXRlckJvb3Qgc29mdCBjb25maWcuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDIwIFRoaWJhdXQgVkFSw4hORSA8aGFja3Mra2VybmVsQHNsYXNoZGlydC5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIGRyaXZlciBleHBvc2VzIHRoZSBkYXRhIGVuY29kZWQgaW4gdGhlICJzb2Z0X2NvbmZpZyIgZmxhc2ggc2VnbWVudCBvZgorICogTWlrcm9UaWsgUm91dGVyQk9BUkRzIGRldmljZXMuIEl0IHByZXNlbnRzIHRoZSBkYXRhIGluIGEgc3lzZnMgZm9sZGVyCisgKiBuYW1lZCAic29mdF9jb25maWciLiBUaGUgZGF0YSBpcyBwcmVzZW50ZWQgaW4gYSB1c2VyL21hY2hpbmUtZnJpZW5kbHkgd2F5CisgKiB3aXRoIGp1c3QgYXMgbXVjaCBwYXJzaW5nIGFzIGNhbiBiZSBnZW5lcmFsaXplZCBhY3Jvc3MgbWlrcm90aWsgcGxhdGZvcm1zCisgKiAoYXMgaW5mZXJyZWQgZnJvbSByZXZlcnNlLWVuZ2luZWVyaW5nKS4KKyAqCisgKiBUaGUga25vd24gc29mdF9jb25maWcgdGFncyBhcmUgcHJlc2VudGVkIGluIHRoZSAic29mdF9jb25maWciIHN5c2ZzIGZvbGRlciwKKyAqIHdpdGggdGhlIGFkZGl0aW9uIG9mIG9uZSBzcGVjaWZpYyBmaWxlIG5hbWVkICJjb21taXQiLCB3aGljaCBpcyBvbmx5CisgKiBhdmFpbGFibGUgaWYgdGhlIGRyaXZlciBzdXBwb3J0cyB3cml0ZXMgdG8gdGhlIG10ZCBkZXZpY2U6IG5vIG1vZGlmaWNhdGlvbnMKKyAqIG1hZGUgdG8gYW55IG9mIHRoZSBvdGhlciBhdHRyaWJ1dGVzIGFyZSBhY3R1YWxseSB3cml0dGVuIGJhY2sgdG8gZmxhc2ggbWVkaWEKKyAqIHVudGlsIGEgdHJ1ZSB2YWx1ZSBpcyBpbnB1dCBpbnRvIHRoaXMgZmlsZSAoZS5nLiBbWXkxXSkuIFRoaXMgaXMgdG8gYXZvaWQKKyAqIHVubmVjZXNzYXJ5IGZsYXNoIHdlYXIsIGFuZCB0byBwZXJtaXQgdG8gcmV2ZXJ0IGFsbCBjaGFuZ2VzIGJ5IGlzc3VpbmcgYQorICogZmFsc2UgdmFsdWUgKFtObjBdKS4gUmVhZGluZyB0aGUgY29udGVudCBvZiB0aGlzIGZpbGUgc2hvd3MgdGhlIGN1cnJlbnQKKyAqIHN0YXR1cyBvZiB0aGUgZHJpdmVyOiBpZiB0aGUgZGF0YSBpbiBzeXNmcyBtYXRjaGVzIHRoZSBjb250ZW50IG9mIHRoZQorICogc29mdF9jb25maWcgcGFydGl0aW9uLCB0aGUgZmlsZSB3aWxsIHJlYWQgImNsZWFuIi4gT3RoZXJ3aXNlLCBpdCB3aWxsIHJlYWQKKyAqICJkaXJ0eSIuCisgKgorICogVGhlIHdyaXRlYWJsZSBzeXNmcyBmaWxlcyBwcmVzZW50ZWQgYnkgdGhpcyBkcml2ZXIgd2lsbCBhY2NlcHQgb25seSBpbnB1dHMKKyAqIHdoaWNoIGFyZSBpbiBhIHZhbGlkIHJhbmdlIGZvciB0aGUgZ2l2ZW4gdGFnLiBBcyBhIGRlc2lnbiBjaG9pY2UsIHRoZSBkcml2ZXIKKyAqIHdpbGwgbm90IGFzc2VzcyB3aGV0aGVyIHRoZSBpbnB1dHMgYXJlIGlkZW50aWNhbCB0byB0aGUgZXhpc3RpbmcgZGF0YS4KKyAqCisgKiBOb3RlOiBQQUdFX1NJWkUgaXMgYXNzdW1lZCB0byBiZSA+PSA0SywgaGVuY2UgdGhlIGRldmljZSBhdHRyaWJ1dGUgc2hvdworICogcm91dGluZXMgbmVlZCBub3QgY2hlY2sgZm9yIG91dHB1dCBvdmVyZmxvdy4KKyAqCisgKiBTb21lIGNvbnN0YW50IGRlZmluZXMgZXh0cmFjdGVkIGZyb20gcmJjZmcuaCBieSBHYWJvciBKdWhvcworICogPGp1aG9zZ0BvcGVud3J0Lm9yZz4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorCisjaWZkZWYgQ09ORklHX0FUSDc5CisgI2luY2x1ZGUgPGFzbS9tYWNoLWF0aDc5L2F0aDc5Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgInJvdXRlcmJvb3QuaCIKKworI2RlZmluZSBSQl9TT0ZUQ09ORklHX1ZFUgkJIjAuMDMiCisjZGVmaW5lIFJCX1NDX1BSX1BGWAkJCSJbcmJfc29mdGNvbmZpZ10gIgorCisvKgorICogbXRkIG9wZXJhdGlvbnMgYmVmb3JlIDQuMTcgYXJlIGFzeW5jaHJvbm91cywgbm90IGhhbmRsZWQgYnkgdGhpcyBjb2RlCisgKiBBbHNvIG1ha2UgdGhlIGRyaXZlciBhY3QgcmVhZC1vbmx5IGlmIDRLX1NFQ1RPUlMgYXJlIG5vdCBlbmFibGVkLCBzaW5jZSB0aGV5CisgKiBhcmUgcmVxdWlyZSB0byBoYW5kbGUgcGFydGlhbCBlcmFzaW5nIG9mIHRoZSBzbWFsbCBzb2Z0X2NvbmZpZyBwYXJ0aXRpb24uCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19NVERfU1BJX05PUl9VU0VfNEtfU0VDVE9SUykKKyAjZGVmaW5lIFJCX1NDX0hBU19XUklURV9TVVBQT1JUCXRydWUKKyAjZGVmaW5lIFJCX1NDX1dNT0RFCQkJU19JV1VTUgorICNkZWZpbmUgUkJfU0NfUk1PREUJCQlTX0lSVVNSCisjZWxzZQorICNkZWZpbmUgUkJfU0NfSEFTX1dSSVRFX1NVUFBPUlQJZmFsc2UKKyAjZGVmaW5lIFJCX1NDX1dNT0RFCQkJMAorICNkZWZpbmUgUkJfU0NfUk1PREUJCQlTX0lSVVNSCisjZW5kaWYKKworLyogSUQgdmFsdWVzIGZvciBzb2Z0d2FyZSBzZXR0aW5ncyAqLworI2RlZmluZSBSQl9TQ0lEX1VBUlRfU1BFRUQJCTB4MDEJLy8gdTMyKjEKKyNkZWZpbmUgUkJfU0NJRF9CT09UX0RFTEFZCQkweDAyCS8vIHUzMioxCisjZGVmaW5lIFJCX1NDSURfQk9PVF9ERVZJQ0UJCTB4MDMJLy8gdTMyKjEKKyNkZWZpbmUgUkJfU0NJRF9CT09UX0tFWQkJMHgwNAkvLyB1MzIqMQorI2RlZmluZSBSQl9TQ0lEX0NQVV9NT0RFCQkweDA1CS8vIHUzMioxCisjZGVmaW5lIFJCX1NDSURfQklPU19WRVJTSU9OCQkweDA2CS8vIHN0cgorI2RlZmluZSBSQl9TQ0lEX0JPT1RfUFJPVE9DT0wJCTB4MDkJLy8gdTMyKjEKKyNkZWZpbmUgUkJfU0NJRF9DUFVfRlJFUV9JRFgJCTB4MEMJLy8gdTMyKjEKKyNkZWZpbmUgUkJfU0NJRF9CT09URVIJCQkweDBECS8vIHUzMioxCisjZGVmaW5lIFJCX1NDSURfU0lMRU5UX0JPT1QJCTB4MEYJLy8gdTMyKjEKKy8qCisgKiBwcm90ZWN0ZWRfcm91dGVyYm9vdCBzZWVtcyB0byB1c2UgdGFnIDB4MUYuIEl0IG9ubHkgd29ya3MgaW4gY29tYmluYXRpb24gd2l0aAorICogUm91dGVyT1MsIHJlc3VsdGluZyBpbiBhIHdpcGVkIGJvYXJkIG90aGVyd2lzZSwgc28gaXQncyBub3QgaW1wbGVtZW50ZWQgaGVyZS4KKyAqIFRoZSB0YWcgdmFsdWVzIGFyZSBhcyBmb2xsb3dzOgorICogLSBvZmY6IDB4MAorICogLSBvbjogdGhlIGxvd2VyIGhhbGZ3b3JkIGVuY29kZXMgdGhlIG1heCB2YWx1ZSBpbiBzIGZvciB0aGUgcmVzZXQgZmVhdHVyZSwKKyAqCSB0aGUgaGlnaGVyIGhhbGZ3b3JkIGVuY29kZXMgdGhlIG1pbiB2YWx1ZSBpbiBzIGZvciB0aGUgcmVzZXQgZmVhdHVyZS4KKyAqIERlZmF1bHQgdmFsdWUgd2hlbiBvbjogMHgwMDE0MDI1ODogMHgxNCA9IDIwcyAvIDB4MjU4PSA2MDBzCisgKiBTZWUgZGV0YWlscyBoZXJlOiBodHRwczovL3dpa2kubWlrcm90aWsuY29tL3dpa2kvTWFudWFsOlJvdXRlckJPQVJEX3NldHRpbmdzI1Byb3RlY3RlZF9ib290bG9hZGVyCisgKi8KKworLyogVGFnIHZhbHVlcyAqLworCisjZGVmaW5lIFJCX1VBUlRfU1BFRURfMTE1MjAwCQkwCisjZGVmaW5lIFJCX1VBUlRfU1BFRURfNTc2MDAJCTEKKyNkZWZpbmUgUkJfVUFSVF9TUEVFRF8zODQwMAkJMgorI2RlZmluZSBSQl9VQVJUX1NQRUVEXzE5MjAwCQkzCisjZGVmaW5lIFJCX1VBUlRfU1BFRURfOTYwMAkJNAorI2RlZmluZSBSQl9VQVJUX1NQRUVEXzQ4MDAJCTUKKyNkZWZpbmUgUkJfVUFSVF9TUEVFRF8yNDAwCQk2CisjZGVmaW5lIFJCX1VBUlRfU1BFRURfMTIwMAkJNworI2RlZmluZSBSQl9VQVJUX1NQRUVEX09GRgkJOAorCisvKiB2YWxpZCBib290IGRlbGF5OiAxIC0gOXMgaW4gMXMgaW5jcmVtZW50ICovCisjZGVmaW5lIFJCX0JPT1RfREVMQVlfTUlOCQkxCisjZGVmaW5lIFJCX0JPT1RfREVMQVlfTUFYCQk5CisKKyNkZWZpbmUgUkJfQk9PVF9ERVZJQ0VfRVRIRVIJCTAJLy8gImJvb3Qgb3ZlciBFdGhlcm5ldCIKKyNkZWZpbmUgUkJfQk9PVF9ERVZJQ0VfTkFOREVUSAkJMQkvLyAiYm9vdCBmcm9tIE5BTkQsIGlmIGZhaWwgdGhlbiBFdGhlcm5ldCIKKyNkZWZpbmUgUkJfQk9PVF9ERVZJQ0VfQ0ZDQVJECQkyCS8vIChub3QgYXZhaWxhYmxlIGluIHJiY2ZnKQorI2RlZmluZSBSQl9CT09UX0RFVklDRV9FVEhPTkNFCQkzCS8vICJib290IEV0aGVybmV0IG9uY2UsIHRoZW4gTkFORCIKKyNkZWZpbmUgUkJfQk9PVF9ERVZJQ0VfTkFORE9OTFkJCTUJLy8gImJvb3QgZnJvbSBOQU5EIG9ubHkiCisjZGVmaW5lIFJCX0JPT1RfREVWSUNFX0ZMQVNIQ0ZHCQk3CS8vICJib290IGluIGZsYXNoIGNvbmZpZ3VyYXRpb24gbW9kZSIKKyNkZWZpbmUgUkJfQk9PVF9ERVZJQ0VfRkxTSE9OQ0UJCTgJLy8gImJvb3QgaW4gZmxhc2ggY29uZmlndXJhdGlvbiBtb2RlIG9uY2UsIHRoZW4gTkFORCIKKworLyoKKyAqIEFUSDc5IDl4eHggQ1BVIGZyZXF1ZW5jeSBpbmRpY2VzLgorICogSXQgaXMgdW5rbm93biBpZiB0aGV5IGFwcGx5IHRvIGFsbCBBVEg3OSBSQnMsIGFuZCBzb21lIGRvIG5vdCBzZWVtIHRvIGZlYXR1cmUKKyAqIHRoZSB1cHBlciBsZXZlbHMgKFFDQTk1NXgpLCB3aGlsZSBGIGlzIHByZXN1bWFibHkgQVI5MzQ0LW9ubHkuCisgKi8KKyNkZWZpbmUgUkJfQ1BVX0ZSRVFfSURYX0FUSDc5XzlYX0EJKDAgPDwgMykKKyNkZWZpbmUgUkJfQ1BVX0ZSRVFfSURYX0FUSDc5XzlYX0IJKDEgPDwgMykJLy8gMHg4CisjZGVmaW5lIFJCX0NQVV9GUkVRX0lEWF9BVEg3OV85WF9DCSgyIDw8IDMpCS8vIDB4MTAgLSBmYWN0b3J5IGZyZXEgZm9yIG1hbnkgZGV2aWNlcworI2RlZmluZSBSQl9DUFVfRlJFUV9JRFhfQVRINzlfOVhfRAkoMyA8PCAzKQkvLyAweDE4CisjZGVmaW5lIFJCX0NQVV9GUkVRX0lEWF9BVEg3OV85WF9FCSg0IDw8IDMpCS8vIDB4MjAKKyNkZWZpbmUgUkJfQ1BVX0ZSRVFfSURYX0FUSDc5XzlYX0YJKDUgPDwgMykJLy8gMHgyOAorCisjZGVmaW5lIFJCX0NQVV9GUkVRX0lEWF9BVEg3OV85WF9NSU4JCTAJLy8gYWxsIGRldmljZXMgc3VwcG9ydCBsb3dlc3Qgc2V0dGluZworI2RlZmluZSBSQl9DUFVfRlJFUV9JRFhfQVRINzlfOVhfQVI5MzM0X01BWAk1CS8vIHN0b3BzIGF0IEYKKyNkZWZpbmUgUkJfQ1BVX0ZSRVFfSURYX0FUSDc5XzlYX1FDQTk1M1hfTUFYCTQJLy8gc3RvcHMgYXQgRQorI2RlZmluZSBSQl9DUFVfRlJFUV9JRFhfQVRINzlfOVhfUUNBOTU1Nl9NQVgJMgkvLyBzdG9wcyBhdCBDCisjZGVmaW5lIFJCX0NQVV9GUkVRX0lEWF9BVEg3OV85WF9RQ0E5NTU4X01BWAkzCS8vIHN0b3BzIGF0IEQKKworLyogQVRINzkgN3h4eCBDUFUgZnJlcXVlbmN5IGluZGljZXMuICovCisjZGVmaW5lIFJCX0NQVV9GUkVRX0lEWF9BVEg3OV83WF9BCSgoMCAqIDkpIDw8IDQpCisjZGVmaW5lIFJCX0NQVV9GUkVRX0lEWF9BVEg3OV83WF9CCSgoMSAqIDkpIDw8IDQpCisjZGVmaW5lIFJCX0NQVV9GUkVRX0lEWF9BVEg3OV83WF9DCSgoMiAqIDkpIDw8IDQpCisjZGVmaW5lIFJCX0NQVV9GUkVRX0lEWF9BVEg3OV83WF9ECSgoMyAqIDkpIDw8IDQpCisjZGVmaW5lIFJCX0NQVV9GUkVRX0lEWF9BVEg3OV83WF9FCSgoNCAqIDkpIDw8IDQpCisjZGVmaW5lIFJCX0NQVV9GUkVRX0lEWF9BVEg3OV83WF9GCSgoNSAqIDkpIDw8IDQpCisjZGVmaW5lIFJCX0NQVV9GUkVRX0lEWF9BVEg3OV83WF9HCSgoNiAqIDkpIDw8IDQpCisjZGVmaW5lIFJCX0NQVV9GUkVRX0lEWF9BVEg3OV83WF9ICSgoNyAqIDkpIDw8IDQpCisKKyNkZWZpbmUgUkJfQ1BVX0ZSRVFfSURYX0FUSDc5XzdYX01JTgkJMAkvLyBhbGwgZGV2aWNlcyBzdXBwb3J0IGxvd2VzdCBzZXR0aW5nCisjZGVmaW5lIFJCX0NQVV9GUkVRX0lEWF9BVEg3OV83WF9BUjcyNFhfTUFYCTMJLy8gc3RvcHMgYXQgRAorI2RlZmluZSBSQl9DUFVfRlJFUV9JRFhfQVRINzlfN1hfQVI3MTYxX01BWAk3CS8vIHN0b3BzIGF0IEggLSBjaGVjayBpZiBhcHBsaWVzIHRvIGFsbCBBUjcxeHggZGV2aWNlcworCisjZGVmaW5lIFJCX1NDX0NSQzMyX09GRlNFVAkJNAkvLyBsb2NhdGVkIHJpZ2h0IGFmdGVyIG1hZ2ljCisKK3N0YXRpYyBzdHJ1Y3Qga29iamVjdCAqc2Nfa29iajsKK3N0YXRpYyB1OCAqc2NfYnVmOworc3RhdGljIHNpemVfdCBzY19idWZsZW47CitzdGF0aWMgcndsb2NrX3Qgc2NfYnVmcndsOwkJLy8gcncgbG9jayB0byBzY19idWYKKworLyogTVVTVCBiZSB1c2VkIHdpdGggbG9jayBoZWxkICovCisjZGVmaW5lIFJCX1NDX0NMUkNSQygpCQkqKHUzMiAqKShzY19idWYgKyBSQl9TQ19DUkMzMl9PRkZTRVQpID0gMAorI2RlZmluZSBSQl9TQ19HRVRDUkMoKQkJKih1MzIgKikoc2NfYnVmICsgUkJfU0NfQ1JDMzJfT0ZGU0VUKQorI2RlZmluZSBSQl9TQ19TRVRDUkMoX2NyYykJKih1MzIgKikoc2NfYnVmICsgUkJfU0NfQ1JDMzJfT0ZGU0VUKSA9IChfY3JjKQorCitzdHJ1Y3Qgc2NfdTMydHZzIHsKKwljb25zdCB1MzIgdmFsOworCWNvbnN0IGNoYXIgKnN0cjsKK307CisKKyNkZWZpbmUgUkJfU0NfVFZTKF92YWwsIF9zdHIpIHsJCVwKKwkudmFsID0gKF92YWwpLAkJCVwKKwkuc3RyID0gKF9zdHIpLAkJCVwKK30KKworc3RhdGljIHNzaXplX3Qgc2NfdGFnX3Nob3dfdTMydHZzKGNvbnN0IHU4ICpwbGQsIHUxNiBwbGRfbGVuLCBjaGFyICpidWYsCisJCQkJICBjb25zdCBzdHJ1Y3Qgc2NfdTMydHZzIHR2c1tdLCBjb25zdCBpbnQgdHZzZWxtdHMpCit7CisJY29uc3QgY2hhciAqZm10OworCWNoYXIgKm91dCA9IGJ1ZjsKKwl1MzIgZGF0YTsJLy8gY3B1LWVuZGlhbgorCWludCBpOworCisJLy8gZmFsbGJhY2sgdG8gcmF3IGhleCBvdXRwdXQgaWYgd2UgY2FuJ3QgaGFuZGxlIHRoZSBpbnB1dAorCWlmICh0dnNlbG10cyA8IDApCisJCXJldHVybiByb3V0ZXJib290X3RhZ19zaG93X3UzMnMocGxkLCBwbGRfbGVuLCBidWYpOworCisJaWYgKHNpemVvZihkYXRhKSAhPSBwbGRfbGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlYWRfbG9jaygmc2NfYnVmcndsKTsKKwlkYXRhID0gKih1MzIgKilwbGQ7CQkvLyBwbGQgYWxpYXNlcyBzY19idWYKKwlyZWFkX3VubG9jaygmc2NfYnVmcndsKTsKKworCWZvciAoaSA9IDA7IGkgPCB0dnNlbG10czsgaSsrKSB7CisJCWZtdCA9ICh0dnNbaV0udmFsID09IGRhdGEpID8gIlslc10gIiA6ICIlcyAiOworCQlvdXQgKz0gc3ByaW50ZihvdXQsIGZtdCwgdHZzW2ldLnN0cik7CisJfQorCisJb3V0ICs9IHNwcmludGYob3V0LCAiXG4iKTsKKwlyZXR1cm4gb3V0IC0gYnVmOworfQorCitzdGF0aWMgc3NpemVfdCBzY190YWdfc3RvcmVfdTMydHZzKGNvbnN0IHU4ICpwbGQsIHUxNiBwbGRfbGVuLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwKKwkJCQkgICBjb25zdCBzdHJ1Y3Qgc2NfdTMydHZzIHR2c1tdLCBjb25zdCBpbnQgdHZzZWxtdHMpCit7CisJaW50IGk7CisKKwlpZiAodHZzZWxtdHMgPCAwKQorCQlyZXR1cm4gdHZzZWxtdHM7CisKKwlpZiAoc2l6ZW9mKHUzMikgIT0gcGxkX2xlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgdHZzZWxtdHM7IGkrKykgeworCQlpZiAoc3lzZnNfc3RyZXEoYnVmLCB0dnNbaV0uc3RyKSkgeworCQkJd3JpdGVfbG9jaygmc2NfYnVmcndsKTsKKwkJCSoodTMyICopcGxkID0gdHZzW2ldLnZhbDsJLy8gcGxkIGFsaWFzZXMgc2NfYnVmCisJCQlSQl9TQ19DTFJDUkMoKTsKKwkJCXdyaXRlX3VubG9jaygmc2NfYnVmcndsKTsKKwkJCXJldHVybiBjb3VudDsKKwkJfQorCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCitzdHJ1Y3Qgc2NfYm9vbHRzIHsKKwljb25zdCBjaGFyICpzdHJmYWxzZTsKKwljb25zdCBjaGFyICpzdHJ0cnVlOworfTsKKworc3RhdGljIHNzaXplX3Qgc2NfdGFnX3Nob3dfYm9vbHRzKGNvbnN0IHU4ICpwbGQsIHUxNiBwbGRfbGVuLCBjaGFyICpidWYsCisJCQkJICBjb25zdCBzdHJ1Y3Qgc2NfYm9vbHRzICpidHMpCit7CisJY29uc3QgY2hhciAqZm10OworCWNoYXIgKm91dCA9IGJ1ZjsKKwl1MzIgZGF0YTsJLy8gY3B1LWVuZGlhbgorCisJaWYgKHNpemVvZihkYXRhKSAhPSBwbGRfbGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlYWRfbG9jaygmc2NfYnVmcndsKTsKKwlkYXRhID0gKih1MzIgKilwbGQ7CQkvLyBwbGQgYWxpYXNlcyBzY19idWYKKwlyZWFkX3VubG9jaygmc2NfYnVmcndsKTsKKworCWZtdCA9IChkYXRhKSA/ICIlcyBbJXNdXG4iIDogIlslc10gJXNcbiI7CisJb3V0ICs9IHNwcmludGYob3V0LCBmbXQsIGJ0cy0+c3RyZmFsc2UsIGJ0cy0+c3RydHJ1ZSk7CisKKwlyZXR1cm4gb3V0IC0gYnVmOworfQorCitzdGF0aWMgc3NpemVfdCBzY190YWdfc3RvcmVfYm9vbHRzKGNvbnN0IHU4ICpwbGQsIHUxNiBwbGRfbGVuLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwKKwkJCQkgICBjb25zdCBzdHJ1Y3Qgc2NfYm9vbHRzICpidHMpCit7CisJdTMyIGRhdGE7CS8vIGNwdS1lbmRpYW4KKworCWlmIChzaXplb2YoZGF0YSkgIT0gcGxkX2xlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoc3lzZnNfc3RyZXEoYnVmLCBidHMtPnN0cmZhbHNlKSkKKwkJZGF0YSA9IDA7CisJZWxzZSBpZiAoc3lzZnNfc3RyZXEoYnVmLCBidHMtPnN0cnRydWUpKQorCQlkYXRhID0gMTsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJd3JpdGVfbG9jaygmc2NfYnVmcndsKTsKKwkqKHUzMiAqKXBsZCA9IGRhdGE7CQkvLyBwbGQgYWxpYXNlcyBzY19idWYKKwlSQl9TQ19DTFJDUkMoKTsKKwl3cml0ZV91bmxvY2soJnNjX2J1ZnJ3bCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CitzdGF0aWMgc3RydWN0IHNjX3UzMnR2cyBjb25zdCBzY191YXJ0c3BlZWRzW10gPSB7CisJUkJfU0NfVFZTKFJCX1VBUlRfU1BFRURfT0ZGLAkib2ZmIiksCisJUkJfU0NfVFZTKFJCX1VBUlRfU1BFRURfMTIwMCwJIjEyMDAiKSwKKwlSQl9TQ19UVlMoUkJfVUFSVF9TUEVFRF8yNDAwLAkiMjQwMCIpLAorCVJCX1NDX1RWUyhSQl9VQVJUX1NQRUVEXzQ4MDAsCSI0ODAwIiksCisJUkJfU0NfVFZTKFJCX1VBUlRfU1BFRURfOTYwMCwJIjk2MDAiKSwKKwlSQl9TQ19UVlMoUkJfVUFSVF9TUEVFRF8xOTIwMCwJIjE5MjAwIiksCisJUkJfU0NfVFZTKFJCX1VBUlRfU1BFRURfMzg0MDAsCSIzODQwMCIpLAorCVJCX1NDX1RWUyhSQl9VQVJUX1NQRUVEXzU3NjAwLAkiNTc2MDAiKSwKKwlSQl9TQ19UVlMoUkJfVUFSVF9TUEVFRF8xMTUyMDAsCSIxMTUyMDAiKSwKK307CisKKy8qCisgKiBXaGlsZSB0aGUgZGVmaW5lcyBhcmUgY2FycmllZCBvdmVyIGZyb20gcmJjZmcsIHVzZSBzdHJpbmdzIHRoYXQgbW9yZSBjbGVhcmx5CisgKiBzaG93IHRoZSBhY3R1YWwgc2V0dGluZyBwdXJwb3NlIChlc3BlY2lhbGx5IHNpbmNlIHRoZSBOQU5EKiBzZXR0aW5ncyBhcHBseQorICogdG8gYm90aCBuYW5kLSBhbmQgbm9yLWJhc2VkIGRldmljZXMpLiAiY2ZjYXJkIiB3YXMgZGlzYWJsZWQgaW4gcmJjZmc6IGRpc2FibGUKKyAqIGl0IGhlcmUgdG9vLgorICovCitzdGF0aWMgc3RydWN0IHNjX3UzMnR2cyBjb25zdCBzY19ib290ZGV2aWNlc1tdID0geworCVJCX1NDX1RWUyhSQl9CT09UX0RFVklDRV9FVEhFUiwJCSJldGgiKSwKKwlSQl9TQ19UVlMoUkJfQk9PVF9ERVZJQ0VfTkFOREVUSCwJImZsYXNoZXRoIiksCisJLy9SQl9TQ19UVlMoUkJfQk9PVF9ERVZJQ0VfQ0ZDQVJELAkiY2ZjYXJkIiksCisJUkJfU0NfVFZTKFJCX0JPT1RfREVWSUNFX0VUSE9OQ0UsCSJldGhvbmNlIiksCisJUkJfU0NfVFZTKFJCX0JPT1RfREVWSUNFX05BTkRPTkxZLAkiZmxhc2giKSwKKwlSQl9TQ19UVlMoUkJfQk9PVF9ERVZJQ0VfRkxBU0hDRkcsCSJjZmciKSwKKwlSQl9TQ19UVlMoUkJfQk9PVF9ERVZJQ0VfRkxTSE9OQ0UsCSJjZmdvbmNlIiksCit9OworCitzdGF0aWMgc3RydWN0IHNjX2Jvb2x0cyBjb25zdCBzY19ib290a2V5ID0geworCS5zdHJmYWxzZSA9ICJhbnkiLAorCS5zdHJ0cnVlID0gImRlbCIsCit9OworCitzdGF0aWMgc3RydWN0IHNjX2Jvb2x0cyBjb25zdCBzY19jcHVtb2RlID0geworCS5zdHJmYWxzZSA9ICJwb3dlcnNhdmUiLAorCS5zdHJ0cnVlID0gInJlZ3VsYXIiLAorfTsKKworc3RhdGljIHN0cnVjdCBzY19ib29sdHMgY29uc3Qgc2NfYm9vdHByb3RvID0geworCS5zdHJmYWxzZSA9ICJib290cCIsCisJLnN0cnRydWUgPSAiZGhjcCIsCit9OworCitzdGF0aWMgc3RydWN0IHNjX2Jvb2x0cyBjb25zdCBzY19ib290ZXIgPSB7CisJLnN0cmZhbHNlID0gInJlZ3VsYXIiLAorCS5zdHJ0cnVlID0gImJhY2t1cCIsCit9OworCitzdGF0aWMgc3RydWN0IHNjX2Jvb2x0cyBjb25zdCBzY19zaWxlbnRfYm9vdCA9IHsKKwkuc3RyZmFsc2UgPSAib2ZmIiwKKwkuc3RydHJ1ZSA9ICJvbiIsCit9OworCisjZGVmaW5lIFNDX1RBR19TSE9XX1NUT1JFX1UzMlRWU19GVU5DUyhfbmFtZSkJCVwKK3N0YXRpYyBzc2l6ZV90IHNjX3RhZ19zaG93XyMjX25hbWUoY29uc3QgdTggKnBsZCwgdTE2IHBsZF9sZW4sIGNoYXIgKmJ1ZikJXAorewkJCQkJCQkJCQlcCisJcmV0dXJuIHNjX3RhZ19zaG93X3UzMnR2cyhwbGQsIHBsZF9sZW4sIGJ1Ziwgc2NfIyNfbmFtZSwgQVJSQVlfU0laRShzY18jI19uYW1lKSk7CVwKK30JCQkJCQkJCQkJXAorc3RhdGljIHNzaXplX3Qgc2NfdGFnX3N0b3JlXyMjX25hbWUoY29uc3QgdTggKnBsZCwgdTE2IHBsZF9sZW4sIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQlcCit7CQkJCQkJCQkJCVwKKwlyZXR1cm4gc2NfdGFnX3N0b3JlX3UzMnR2cyhwbGQsIHBsZF9sZW4sIGJ1ZiwgY291bnQsIHNjXyMjX25hbWUsIEFSUkFZX1NJWkUoc2NfIyNfbmFtZSkpOwlcCit9CisKKyNkZWZpbmUgU0NfVEFHX1NIT1dfU1RPUkVfQk9PTFRTX0ZVTkNTKF9uYW1lKQkJXAorc3RhdGljIHNzaXplX3Qgc2NfdGFnX3Nob3dfIyNfbmFtZShjb25zdCB1OCAqcGxkLCB1MTYgcGxkX2xlbiwgY2hhciAqYnVmKQlcCit7CQkJCQkJCQkJCVwKKwlyZXR1cm4gc2NfdGFnX3Nob3dfYm9vbHRzKHBsZCwgcGxkX2xlbiwgYnVmLCAmc2NfIyNfbmFtZSk7CVwKK30JCQkJCQkJCQkJXAorc3RhdGljIHNzaXplX3Qgc2NfdGFnX3N0b3JlXyMjX25hbWUoY29uc3QgdTggKnBsZCwgdTE2IHBsZF9sZW4sIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQlcCit7CQkJCQkJCQkJCVwKKwlyZXR1cm4gc2NfdGFnX3N0b3JlX2Jvb2x0cyhwbGQsIHBsZF9sZW4sIGJ1ZiwgY291bnQsICZzY18jI19uYW1lKTsJXAorfQorCitTQ19UQUdfU0hPV19TVE9SRV9VMzJUVlNfRlVOQ1ModWFydHNwZWVkcykKK1NDX1RBR19TSE9XX1NUT1JFX1UzMlRWU19GVU5DUyhib290ZGV2aWNlcykKK1NDX1RBR19TSE9XX1NUT1JFX0JPT0xUU19GVU5DUyhib290a2V5KQorU0NfVEFHX1NIT1dfU1RPUkVfQk9PTFRTX0ZVTkNTKGNwdW1vZGUpCitTQ19UQUdfU0hPV19TVE9SRV9CT09MVFNfRlVOQ1MoYm9vdHByb3RvKQorU0NfVEFHX1NIT1dfU1RPUkVfQk9PTFRTX0ZVTkNTKGJvb3RlcikKK1NDX1RBR19TSE9XX1NUT1JFX0JPT0xUU19GVU5DUyhzaWxlbnRfYm9vdCkKKworc3RhdGljIHNzaXplX3Qgc2NfdGFnX3Nob3dfYm9vdGRlbGF5cyhjb25zdCB1OCAqcGxkLCB1MTYgcGxkX2xlbiwgY2hhciAqYnVmKQoreworCWNvbnN0IGNoYXIgKmZtdDsKKwljaGFyICpvdXQgPSBidWY7CisJdTMyIGRhdGE7CS8vIGNwdS1lbmRpYW4KKwlpbnQgaTsKKworCWlmIChzaXplb2YoZGF0YSkgIT0gcGxkX2xlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZWFkX2xvY2soJnNjX2J1ZnJ3bCk7CisJZGF0YSA9ICoodTMyICopcGxkOwkJLy8gcGxkIGFsaWFzZXMgc2NfYnVmCisJcmVhZF91bmxvY2soJnNjX2J1ZnJ3bCk7CisKKwlmb3IgKGkgPSBSQl9CT09UX0RFTEFZX01JTjsgaSA8PSBSQl9CT09UX0RFTEFZX01BWDsgaSsrKSB7CisJCWZtdCA9IChpID09IGRhdGEpID8gIlslZF0gIiA6ICIlZCAiOworCQlvdXQgKz0gc3ByaW50ZihvdXQsIGZtdCwgaSk7CisJfQorCisJb3V0ICs9IHNwcmludGYob3V0LCAiXG4iKTsKKwlyZXR1cm4gb3V0IC0gYnVmOworfQorCitzdGF0aWMgc3NpemVfdCBzY190YWdfc3RvcmVfYm9vdGRlbGF5cyhjb25zdCB1OCAqcGxkLCB1MTYgcGxkX2xlbiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJdTMyIGRhdGE7CS8vIGNwdS1lbmRpYW4KKwlpbnQgcmV0OworCisJaWYgKHNpemVvZihkYXRhKSAhPSBwbGRfbGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IGtzdHJ0b3UzMihidWYsIDEwLCAmZGF0YSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmICgoZGF0YSA8IFJCX0JPT1RfREVMQVlfTUlOKSB8fCAoUkJfQk9PVF9ERUxBWV9NQVggPCBkYXRhKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3cml0ZV9sb2NrKCZzY19idWZyd2wpOworCSoodTMyICopcGxkID0gZGF0YTsJCS8vIHBsZCBhbGlhc2VzIHNjX2J1ZgorCVJCX1NDX0NMUkNSQygpOworCXdyaXRlX3VubG9jaygmc2NfYnVmcndsKTsKKworCXJldHVybiBjb3VudDsKK30KKworLyogU3VwcG9ydCBDUFUgZnJlcXVlbmN5IGFjY2Vzc29ycyBvbmx5IHdoZW4gdGhlIHRhZyBmb3JtYXQgaGFzIGJlZW4gYXNzZXJ0ZWQgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19BVEg3OSkKKy8qIFVzZSB0aGUgc2FtZSBsZXR0ZXItYmFzZWQgbm9tZW5jbGF0dXJlIGFzIFJvdXRlckJPT1QgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2NfdTMydHZzIGNvbnN0IHNjX2NwdWZyZXFfaW5kZXhlc19hdGg3OV85eFtdID0geworCVJCX1NDX1RWUyhSQl9DUFVfRlJFUV9JRFhfQVRINzlfOVhfQSwJImEiKSwKKwlSQl9TQ19UVlMoUkJfQ1BVX0ZSRVFfSURYX0FUSDc5XzlYX0IsCSJiIiksCisJUkJfU0NfVFZTKFJCX0NQVV9GUkVRX0lEWF9BVEg3OV85WF9DLAkiYyIpLAorCVJCX1NDX1RWUyhSQl9DUFVfRlJFUV9JRFhfQVRINzlfOVhfRCwJImQiKSwKKwlSQl9TQ19UVlMoUkJfQ1BVX0ZSRVFfSURYX0FUSDc5XzlYX0UsCSJlIiksCisJUkJfU0NfVFZTKFJCX0NQVV9GUkVRX0lEWF9BVEg3OV85WF9GLAkiZiIpLAorfTsKKworc3RhdGljIHN0cnVjdCBzY191MzJ0dnMgY29uc3Qgc2NfY3B1ZnJlcV9pbmRleGVzX2F0aDc5Xzd4W10gPSB7CisJUkJfU0NfVFZTKFJCX0NQVV9GUkVRX0lEWF9BVEg3OV83WF9BLAkiYSIpLAorCVJCX1NDX1RWUyhSQl9DUFVfRlJFUV9JRFhfQVRINzlfN1hfQiwJImIiKSwKKwlSQl9TQ19UVlMoUkJfQ1BVX0ZSRVFfSURYX0FUSDc5XzdYX0MsCSJjIiksCisJUkJfU0NfVFZTKFJCX0NQVV9GUkVRX0lEWF9BVEg3OV83WF9ELAkiZCIpLAorCVJCX1NDX1RWUyhSQl9DUFVfRlJFUV9JRFhfQVRINzlfN1hfRSwJImUiKSwKKwlSQl9TQ19UVlMoUkJfQ1BVX0ZSRVFfSURYX0FUSDc5XzdYX0YsCSJmIiksCisJUkJfU0NfVFZTKFJCX0NQVV9GUkVRX0lEWF9BVEg3OV83WF9HLAkiZyIpLAorCVJCX1NDX1RWUyhSQl9DUFVfRlJFUV9JRFhfQVRINzlfN1hfSCwJImgiKSwKK307CisKK3N0YXRpYyBpbnQgc2NfdGFnX2NwdWZyZXFfYXRoNzlfYXJyYXlzaXplKHZvaWQpCit7CisJaW50IGlkeF9tYXg7CisKKwlpZiAoQVRINzlfU09DX0FSNzE2MSA9PSBhdGg3OV9zb2MpCisJCWlkeF9tYXggPSBSQl9DUFVfRlJFUV9JRFhfQVRINzlfN1hfQVI3MTYxX01BWCsxOworCWVsc2UgaWYgKHNvY19pc19hcjcyNHgoKSkKKwkJaWR4X21heCA9IFJCX0NQVV9GUkVRX0lEWF9BVEg3OV83WF9BUjcyNFhfTUFYKzE7CisJZWxzZSBpZiAoc29jX2lzX2FyOTM0NCgpKQorCQlpZHhfbWF4ID0gUkJfQ1BVX0ZSRVFfSURYX0FUSDc5XzlYX0FSOTMzNF9NQVgrMTsKKwllbHNlIGlmIChzb2NfaXNfcWNhOTUzeCgpKQorCQlpZHhfbWF4ID0gUkJfQ1BVX0ZSRVFfSURYX0FUSDc5XzlYX1FDQTk1M1hfTUFYKzE7CisJZWxzZSBpZiAoc29jX2lzX3FjYTk1NTYoKSkKKwkJaWR4X21heCA9IFJCX0NQVV9GUkVRX0lEWF9BVEg3OV85WF9RQ0E5NTU2X01BWCsxOworCWVsc2UgaWYgKHNvY19pc19xY2E5NTU4KCkpCisJCWlkeF9tYXggPSBSQl9DUFVfRlJFUV9JRFhfQVRINzlfOVhfUUNBOTU1OF9NQVgrMTsKKwllbHNlCisJCWlkeF9tYXggPSAtRU9QTk9UU1VQUDsKKworCXJldHVybiBpZHhfbWF4OworfQorCitzdGF0aWMgc3NpemVfdCBzY190YWdfc2hvd19jcHVmcmVxX2luZGV4ZXMoY29uc3QgdTggKnBsZCwgdTE2IHBsZF9sZW4sIGNoYXIgKmJ1ZikKK3sKKwljb25zdCBzdHJ1Y3Qgc2NfdTMydHZzICp0dnM7CisKKwlpZiAoc29jX2lzX2FyNzF4eCgpIHx8IHNvY19pc19hcjcyNHgoKSkKKwkJdHZzID0gc2NfY3B1ZnJlcV9pbmRleGVzX2F0aDc5Xzd4OworCWVsc2UKKwkJdHZzID0gc2NfY3B1ZnJlcV9pbmRleGVzX2F0aDc5Xzl4OworCisJcmV0dXJuIHNjX3RhZ19zaG93X3UzMnR2cyhwbGQsIHBsZF9sZW4sIGJ1ZiwgdHZzLCBzY190YWdfY3B1ZnJlcV9hdGg3OV9hcnJheXNpemUoKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNjX3RhZ19zdG9yZV9jcHVmcmVxX2luZGV4ZXMoY29uc3QgdTggKnBsZCwgdTE2IHBsZF9sZW4sIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWNvbnN0IHN0cnVjdCBzY191MzJ0dnMgKnR2czsKKworCWlmIChzb2NfaXNfYXI3MXh4KCkgfHwgc29jX2lzX2FyNzI0eCgpKQorCQl0dnMgPSBzY19jcHVmcmVxX2luZGV4ZXNfYXRoNzlfN3g7CisJZWxzZQorCQl0dnMgPSBzY19jcHVmcmVxX2luZGV4ZXNfYXRoNzlfOXg7CisKKwlyZXR1cm4gc2NfdGFnX3N0b3JlX3UzMnR2cyhwbGQsIHBsZF9sZW4sIGJ1ZiwgY291bnQsIHR2cywgc2NfdGFnX2NwdWZyZXFfYXRoNzlfYXJyYXlzaXplKCkpOworfQorI2Vsc2UKKyAvKiBCeSBkZWZhdWx0IHdlIG9ubHkgc2hvdyB0aGUgcmF3IHZhbHVlIHRvIGhlbHAgd2l0aCByZXZlcnNlLWVuZ2luZWVyaW5nICovCisgI2RlZmluZSBzY190YWdfc2hvd19jcHVmcmVxX2luZGV4ZXMJcm91dGVyYm9vdF90YWdfc2hvd191MzJzCisgI2RlZmluZSBzY190YWdfc3RvcmVfY3B1ZnJlcV9pbmRleGVzCU5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3NpemVfdCBzY19hdHRyX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICBjaGFyICpidWYpOworc3RhdGljIHNzaXplX3Qgc2NfYXR0cl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAorCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7CisKKy8qIEFycmF5IG9mIGtub3duIHRhZ3MgdG8gcHVibGlzaCBpbiBzeXNmcyAqLworc3RhdGljIHN0cnVjdCBzY19hdHRyIHsKKwljb25zdCB1MTYgdGFnX2lkOworCS8qIHN5c2ZzIHRhZyBzaG93IGF0dHJpYnV0ZS4gTXVzdCBsb2NrIHNjX2J1ZiB3aGVuIGRlcmVmZXJlbmNpbmcgcGxkICovCisJc3NpemVfdCAoKiBjb25zdCB0c2hvdykoY29uc3QgdTggKnBsZCwgdTE2IHBsZF9sZW4sIGNoYXIgKmJ1Zik7CisJLyogc3lzZnMgdGFnIHN0b3JlIGF0dHJpYnV0ZS4gTXVzdCBsb2NrIHNjX2J1ZiB3aGVuIGRlcmVmZXJlbmNpbmcgcGxkICovCisJc3NpemVfdCAoKiBjb25zdCB0c3RvcmUpKGNvbnN0IHU4ICpwbGQsIHUxNiBwbGRfbGVuLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7CisJc3RydWN0IGtvYmpfYXR0cmlidXRlIGthdHRyOworCXUxNiBwbGRfb2ZzOworCXUxNiBwbGRfbGVuOworfSBzY19hdHRyc1tdID0geworCXsKKwkJLnRhZ19pZCA9IFJCX1NDSURfVUFSVF9TUEVFRCwKKwkJLnRzaG93ID0gc2NfdGFnX3Nob3dfdWFydHNwZWVkcywKKwkJLnRzdG9yZSA9IHNjX3RhZ19zdG9yZV91YXJ0c3BlZWRzLAorCQkua2F0dHIgPSBfX0FUVFIodWFydF9zcGVlZCwgUkJfU0NfUk1PREV8UkJfU0NfV01PREUsIHNjX2F0dHJfc2hvdywgc2NfYXR0cl9zdG9yZSksCisJfSwgeworCQkudGFnX2lkID0gUkJfU0NJRF9CT09UX0RFTEFZLAorCQkudHNob3cgPSBzY190YWdfc2hvd19ib290ZGVsYXlzLAorCQkudHN0b3JlID0gc2NfdGFnX3N0b3JlX2Jvb3RkZWxheXMsCisJCS5rYXR0ciA9IF9fQVRUUihib290X2RlbGF5LCBSQl9TQ19STU9ERXxSQl9TQ19XTU9ERSwgc2NfYXR0cl9zaG93LCBzY19hdHRyX3N0b3JlKSwKKwl9LCB7CisJCS50YWdfaWQgPSBSQl9TQ0lEX0JPT1RfREVWSUNFLAorCQkudHNob3cgPSBzY190YWdfc2hvd19ib290ZGV2aWNlcywKKwkJLnRzdG9yZSA9IHNjX3RhZ19zdG9yZV9ib290ZGV2aWNlcywKKwkJLmthdHRyID0gX19BVFRSKGJvb3RfZGV2aWNlLCBSQl9TQ19STU9ERXxSQl9TQ19XTU9ERSwgc2NfYXR0cl9zaG93LCBzY19hdHRyX3N0b3JlKSwKKwl9LCB7CisJCS50YWdfaWQgPSBSQl9TQ0lEX0JPT1RfS0VZLAorCQkudHNob3cgPSBzY190YWdfc2hvd19ib290a2V5LAorCQkudHN0b3JlID0gc2NfdGFnX3N0b3JlX2Jvb3RrZXksCisJCS5rYXR0ciA9IF9fQVRUUihib290X2tleSwgUkJfU0NfUk1PREV8UkJfU0NfV01PREUsIHNjX2F0dHJfc2hvdywgc2NfYXR0cl9zdG9yZSksCisJfSwgeworCQkudGFnX2lkID0gUkJfU0NJRF9DUFVfTU9ERSwKKwkJLnRzaG93ID0gc2NfdGFnX3Nob3dfY3B1bW9kZSwKKwkJLnRzdG9yZSA9IHNjX3RhZ19zdG9yZV9jcHVtb2RlLAorCQkua2F0dHIgPSBfX0FUVFIoY3B1X21vZGUsIFJCX1NDX1JNT0RFfFJCX1NDX1dNT0RFLCBzY19hdHRyX3Nob3csIHNjX2F0dHJfc3RvcmUpLAorCX0sIHsKKwkJLnRhZ19pZCA9IFJCX1NDSURfQklPU19WRVJTSU9OLAorCQkudHNob3cgPSByb3V0ZXJib290X3RhZ19zaG93X3N0cmluZywKKwkJLnRzdG9yZSA9IE5VTEwsCisJCS5rYXR0ciA9IF9fQVRUUihiaW9zX3ZlcnNpb24sIFJCX1NDX1JNT0RFLCBzY19hdHRyX3Nob3csIE5VTEwpLAorCX0sIHsKKwkJLnRhZ19pZCA9IFJCX1NDSURfQk9PVF9QUk9UT0NPTCwKKwkJLnRzaG93ID0gc2NfdGFnX3Nob3dfYm9vdHByb3RvLAorCQkudHN0b3JlID0gc2NfdGFnX3N0b3JlX2Jvb3Rwcm90bywKKwkJLmthdHRyID0gX19BVFRSKGJvb3RfcHJvdG8sIFJCX1NDX1JNT0RFfFJCX1NDX1dNT0RFLCBzY19hdHRyX3Nob3csIHNjX2F0dHJfc3RvcmUpLAorCX0sIHsKKwkJLnRhZ19pZCA9IFJCX1NDSURfQ1BVX0ZSRVFfSURYLAorCQkudHNob3cgPSBzY190YWdfc2hvd19jcHVmcmVxX2luZGV4ZXMsCisJCS50c3RvcmUgPSBzY190YWdfc3RvcmVfY3B1ZnJlcV9pbmRleGVzLAorCQkua2F0dHIgPSBfX0FUVFIoY3B1ZnJlcV9pbmRleCwgUkJfU0NfUk1PREV8UkJfU0NfV01PREUsIHNjX2F0dHJfc2hvdywgc2NfYXR0cl9zdG9yZSksCisJfSwgeworCQkudGFnX2lkID0gUkJfU0NJRF9CT09URVIsCisJCS50c2hvdyA9IHNjX3RhZ19zaG93X2Jvb3RlciwKKwkJLnRzdG9yZSA9IHNjX3RhZ19zdG9yZV9ib290ZXIsCisJCS5rYXR0ciA9IF9fQVRUUihib290ZXIsIFJCX1NDX1JNT0RFfFJCX1NDX1dNT0RFLCBzY19hdHRyX3Nob3csIHNjX2F0dHJfc3RvcmUpLAorCX0sIHsKKwkJLnRhZ19pZCA9IFJCX1NDSURfU0lMRU5UX0JPT1QsCisJCS50c2hvdyA9IHNjX3RhZ19zaG93X3NpbGVudF9ib290LAorCQkudHN0b3JlID0gc2NfdGFnX3N0b3JlX3NpbGVudF9ib290LAorCQkua2F0dHIgPSBfX0FUVFIoc2lsZW50X2Jvb3QsIFJCX1NDX1JNT0RFfFJCX1NDX1dNT0RFLCBzY19hdHRyX3Nob3csIHNjX2F0dHJfc3RvcmUpLAorCX0sCit9OworCitzdGF0aWMgc3NpemVfdCBzY19hdHRyX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICBjaGFyICpidWYpCit7CisJY29uc3Qgc3RydWN0IHNjX2F0dHIgKnNjX2F0dHI7CisJY29uc3QgdTggKnBsZDsKKwl1MTYgcGxkX2xlbjsKKworCXNjX2F0dHIgPSBjb250YWluZXJfb2YoYXR0ciwgdHlwZW9mKCpzY19hdHRyKSwga2F0dHIpOworCisJaWYgKCFzY19hdHRyLT5wbGRfbGVuKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXBsZCA9IHNjX2J1ZiArIHNjX2F0dHItPnBsZF9vZnM7CS8vIHBsZCBhbGlhc2VzIHNjX2J1ZiAtPiBsb2NrIQorCXBsZF9sZW4gPSBzY19hdHRyLT5wbGRfbGVuOworCisJcmV0dXJuIHNjX2F0dHItPnRzaG93KHBsZCwgcGxkX2xlbiwgYnVmKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2NfYXR0cl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAorCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwljb25zdCBzdHJ1Y3Qgc2NfYXR0ciAqc2NfYXR0cjsKKwljb25zdCB1OCAqcGxkOworCXUxNiBwbGRfbGVuOworCisJaWYgKCFSQl9TQ19IQVNfV1JJVEVfU1VQUE9SVCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVBQ0NFUzsKKworCXNjX2F0dHIgPSBjb250YWluZXJfb2YoYXR0ciwgdHlwZW9mKCpzY19hdHRyKSwga2F0dHIpOworCisJaWYgKCFzY19hdHRyLT50c3RvcmUpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmICghc2NfYXR0ci0+cGxkX2xlbikKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlwbGQgPSBzY19idWYgKyBzY19hdHRyLT5wbGRfb2ZzOwkvLyBwbGQgYWxpYXNlcyBzY19idWYgLT4gbG9jayEKKwlwbGRfbGVuID0gc2NfYXR0ci0+cGxkX2xlbjsKKworCXJldHVybiBzY19hdHRyLT50c3RvcmUocGxkLCBwbGRfbGVuLCBidWYsIGNvdW50KTsKK30KKworLyoKKyAqIFNob3dzIHRoZSBjdXJyZW50IGJ1ZmZlciBzdGF0dXM6CisgKiAiY2xlYW4iOiB0aGUgYnVmZmVyIGlzIGluIHN5bmMgd2l0aCB0aGUgbXRkIGRhdGEKKyAqICJkaXJ0eSI6IHRoZSBidWZmZXIgaXMgb3V0IG9mIHN5bmMgd2l0aCB0aGUgbXRkIGRhdGEKKyAqLworc3RhdGljIHNzaXplX3Qgc2NfY29tbWl0X3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgIGNoYXIgKmJ1ZikKK3sKKwljb25zdCBjaGFyICpzdHI7CisJY2hhciAqb3V0ID0gYnVmOworCXUzMiBjcmM7CisKKwlyZWFkX2xvY2soJnNjX2J1ZnJ3bCk7CisJY3JjID0gUkJfU0NfR0VUQ1JDKCk7CisJcmVhZF91bmxvY2soJnNjX2J1ZnJ3bCk7CisKKwlzdHIgPSAoY3JjKSA/ICJjbGVhbiIgOiAiZGlydHkiOworCW91dCArPSBzcHJpbnRmKG91dCwgIiVzXG4iLCBzdHIpOworCisJcmV0dXJuIG91dCAtIGJ1ZjsKK30KKworLyoKKyAqIFBlcmZvcm1zIGJ1ZmZlciBmbHVzaGluZzoKKyAqIFRoaXMgcm91dGluZSBleHBlY3RzIGFuIGlucHV0IGNvbXBhdGlibGUgd2l0aCBrc3RydG9ib29sKCkuCisgKiAtIGEgImZhbHNlIiBpbnB1dCBkaXNjYXJkcyB0aGUgY3VycmVudCBjaGFuZ2VzIGFuZCByZWFkcyBkYXRhIGJhY2sgZnJvbSBtdGQuCisgKiAtIGEgInRydWUiIGlucHV0IGNvbW1pdHMgdGhlIGN1cnJlbnQgY2hhbmdlcyB0byBtdGQuCisgKiBJZiB0aGVyZSBpcyBubyBwZW5kaW5nIGNoYW5nZXMsIHRoaXMgcm91dGluZSBpcyBhIG5vLW9wLgorICogSGFuZGxpbmcgZmFpbHVyZXMgaXMgbGVmdCBhcyBhbiBleGVyY2lzZSB0byB1c2Vyc3BhY2UuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNjX2NvbW1pdF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IG10ZF9pbmZvICptdGQ7CisJc3RydWN0IGVyYXNlX2luZm8gZWk7CisJc2l6ZV90IGJ5dGVzX3J3LCByZXQgPSBjb3VudDsKKwlib29sIGZsdXNoOworCXUzMiBjcmM7CisKKwlpZiAoIVJCX1NDX0hBU19XUklURV9TVVBQT1JUKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlyZWFkX2xvY2soJnNjX2J1ZnJ3bCk7CisJY3JjID0gUkJfU0NfR0VUQ1JDKCk7CisJcmVhZF91bmxvY2soJnNjX2J1ZnJ3bCk7CisKKwlpZiAoY3JjKQorCQlyZXR1cm4gY291bnQ7CS8vIE5PLU9QCisKKwlyZXQgPSBrc3RydG9ib29sKGJ1ZiwgJmZsdXNoKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbXRkID0gZ2V0X210ZF9kZXZpY2Vfbm0oUkJfTVREX1NPRlRfQ09ORklHKTsJLy8gVE9ETyBhbGxvdyBvdmVycmlkZQorCWlmIChJU19FUlIobXRkKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl3cml0ZV9sb2NrKCZzY19idWZyd2wpOworCWlmICghZmx1c2gpCS8vIHJlcmVhZAorCQlyZXQgPSBtdGRfcmVhZChtdGQsIDAsIG10ZC0+c2l6ZSwgJmJ5dGVzX3J3LCBzY19idWYpOworCWVsc2UgewkvLyBjcmMzMiArIGNvbW1pdAorCQkvKgorCQkgKiBDUkMzMiBpcyBjb21wdXRlZCBvbiB0aGUgZW50aXJlIGJ1ZmZlciwgZXhjbHVkaW5nIHRoZSBDUkMKKwkJICogdmFsdWUgaXRzZWxmLiBDUkMgaXMgYWxyZWFkeSBudWxsIHdoZW4gd2UgcmVhY2ggdGhpcyBwb2ludCwKKwkJICogc28gd2UgY2FuIGNvbXB1dGUgdGhlIENSQzMyIG9uIHRoZSBidWZmZXIgYXMgaXMuCisJCSAqIFRoZSBleHBlY3RlZCBDUkMzMiBpcyBFdGhlcm5ldCBGQ1Mgc3R5bGUsIG1lYW5pbmcgdGhlIHNlZWQgaXMKKwkJICogfjAgYW5kIHRoZSBmaW5hbCByZXN1bHQgaXMgYWxzbyBiaXRmbGlwcGVkLgorCQkgKi8KKworCQljcmMgPSB+Y3JjMzIofjAsIHNjX2J1Ziwgc2NfYnVmbGVuKTsKKwkJUkJfU0NfU0VUQ1JDKGNyYyk7CisKKwkJLyoKKwkJICogVGhlIHNvZnRfY29uZmlnIHBhcnRpdGlvbiBpcyBhc3N1bWVkIHRvIGJlIGVudGlyZWx5IGNvbnRhaW5lZAorCQkgKiBpbiBhIHNpbmdsZSBlcmFzZWJsb2NrLgorCQkgKi8KKworCQllaS5hZGRyID0gMDsKKwkJZWkubGVuID0gbXRkLT5zaXplOworCQlyZXQgPSBtdGRfZXJhc2UobXRkLCAmZWkpOworCQlpZiAoIXJldCkKKwkJCXJldCA9IG10ZF93cml0ZShtdGQsIDAsIG10ZC0+c2l6ZSwgJmJ5dGVzX3J3LCBzY19idWYpOworCisJCS8qCisJCSAqIEhhbmRsaW5nIG10ZF93cml0ZSgpIGZhaWx1cmUgaGVyZSBpcyBhIHRyaWNreSBzaXR1YXRpb24uIFRoZQorCQkgKiBwcm9wb3NlZCBhcHByb2FjaCBpcyB0byBsZXQgdXNlcnNwYWNlIGRlYWwgd2l0aCByZXRyeWluZywKKwkJICogd2l0aCB0aGUgY2F2ZWF0IHRoYXQgaXQgbXVzdCB0cnkgdG8gZmx1c2ggdGhlIGJ1ZmZlciBhZ2FpbiBhcworCQkgKiByZXJlYWRpbmcgdGhlIG10ZCBjb250ZW50cyBjb3VsZCBwb3RlbnRpYWxseSByZWFkIGdhcmJhZ2UuCisJCSAqIFRoZSByYXRpb25hbGUgaXM6IGV2ZW4gaWYgd2Uga2VlcCBhIHNoYWRvdyBidWZmZXIgb2YgdGhlCisJCSAqIG9yaWdpbmFsIGNvbnRlbnQsIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHdlIHdpbGwgZXZlciBiZQorCQkgKiBhYmxlIHRvIHdyaXRlIGl0IGFueXdheS4KKwkJICogUmVnYXJkbGVzcywgaXQgYXBwZWFycyB0aGF0IFJvdXRlckJPT1Qgd2lsbCBpZ25vcmUgYW4gaW52YWxpZAorCQkgKiBzb2Z0X2NvbmZpZyAoaW5jbHVkaW5nIGEgY29tcGxldGVseSB3aXBlZCBzZWdtZW50KSBhbmQgd2lsbAorCQkgKiB3cml0ZSBiYWNrIGZhY3RvcnkgZGVmYXVsdHMgd2hlbiBpdCBoYXBwZW5zLgorCQkgKi8KKwl9CisJd3JpdGVfdW5sb2NrKCZzY19idWZyd2wpOworCisJcHV0X210ZF9kZXZpY2UobXRkKTsKKworCWlmIChyZXQpCisJCWdvdG8gbXRkZmFpbDsKKworCWlmIChieXRlc19ydyAhPSBzY19idWZsZW4pIHsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBtdGRmYWlsOworCX0KKworCXJldHVybiBjb3VudDsKKworbXRkZmFpbDoKKwlSQl9TQ19DTFJDUkMoKTsJLy8gbWFyayBidWZmZXIgY29udGVudCBhcyBkaXJ0eS9pbnZhbGlkCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBzY19rYXR0cmNvbW1pdCA9IF9fQVRUUihjb21taXQsIFJCX1NDX1JNT0RFfFJCX1NDX1dNT0RFLCBzY19jb21taXRfc2hvdywgc2NfY29tbWl0X3N0b3JlKTsKKworaW50IF9faW5pdCByYl9zb2Z0Y29uZmlnX2luaXQoc3RydWN0IGtvYmplY3QgKnJiX2tvYmopCit7CisJc3RydWN0IG10ZF9pbmZvICptdGQ7CisJc2l6ZV90IGJ5dGVzX3JlYWQsIGJ1ZmxlbjsKKwljb25zdCB1OCAqYnVmOworCWludCBpLCByZXQ7CisJdTMyIG1hZ2ljOworCisJc2NfYnVmID0gTlVMTDsKKwlzY19rb2JqID0gTlVMTDsKKworCS8vIFRPRE8gYWxsb3cgb3ZlcnJpZGUKKwltdGQgPSBnZXRfbXRkX2RldmljZV9ubShSQl9NVERfU09GVF9DT05GSUcpOworCWlmIChJU19FUlIobXRkKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzY19idWZsZW4gPSBtdGQtPnNpemU7CisJc2NfYnVmID0ga21hbGxvYyhzY19idWZsZW4sIEdGUF9LRVJORUwpOworCWlmICghc2NfYnVmKSB7CisJCXB1dF9tdGRfZGV2aWNlKG10ZCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldCA9IG10ZF9yZWFkKG10ZCwgMCwgc2NfYnVmbGVuLCAmYnl0ZXNfcmVhZCwgc2NfYnVmKTsKKwlwdXRfbXRkX2RldmljZShtdGQpOworCisJaWYgKHJldCkKKwkJZ290byBmYWlsOworCisJaWYgKGJ5dGVzX3JlYWQgIT0gc2NfYnVmbGVuKSB7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBDaGVjayB3ZSBoYXZlIHdoYXQgd2UgZXhwZWN0ICovCisJbWFnaWMgPSAqKGNvbnN0IHUzMiAqKXNjX2J1ZjsKKwlpZiAoUkJfTUFHSUNfU09GVCAhPSBtYWdpYykgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGZhaWw7CisJfQorCisJLyogU2tpcCBtYWdpYyBhbmQgMzJiaXQgQ1JDIGxvY2F0ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgKi8KKwlidWYgPSBzY19idWYgKyAoc2l6ZW9mKG1hZ2ljKSArIHNpemVvZih1MzIpKTsKKwlidWZsZW4gPSBzY19idWZsZW4gLSAoc2l6ZW9mKG1hZ2ljKSArIHNpemVvZih1MzIpKTsKKworCS8qIFBvcHVsYXRlIHN5c2ZzICovCisJcmV0ID0gLUVOT01FTTsKKwlzY19rb2JqID0ga29iamVjdF9jcmVhdGVfYW5kX2FkZChSQl9NVERfU09GVF9DT05GSUcsIHJiX2tvYmopOworCWlmICghc2Nfa29iaikKKwkJZ290byBmYWlsOworCisJcndsb2NrX2luaXQoJnNjX2J1ZnJ3bCk7CisKKwkvKiBMb2NhdGUgYW5kIHB1Ymxpc2ggYWxsIGtub3duIHRhZ3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzY19hdHRycyk7IGkrKykgeworCQlyZXQgPSByb3V0ZXJib290X3RhZ19maW5kKGJ1ZiwgYnVmbGVuLCBzY19hdHRyc1tpXS50YWdfaWQsCisJCQkJCSAgJnNjX2F0dHJzW2ldLnBsZF9vZnMsICZzY19hdHRyc1tpXS5wbGRfbGVuKTsKKwkJaWYgKHJldCkgeworCQkJc2NfYXR0cnNbaV0ucGxkX29mcyA9IHNjX2F0dHJzW2ldLnBsZF9sZW4gPSAwOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBBY2NvdW50IGZvciBza2lwcGVkIG1hZ2ljIGFuZCBjcmMzMiAqLworCQlzY19hdHRyc1tpXS5wbGRfb2ZzICs9IHNpemVvZihtYWdpYykgKyBzaXplb2YodTMyKTsKKworCQlyZXQgPSBzeXNmc19jcmVhdGVfZmlsZShzY19rb2JqLCAmc2NfYXR0cnNbaV0ua2F0dHIuYXR0cik7CisJCWlmIChyZXQpCisJCQlwcl93YXJuKFJCX1NDX1BSX1BGWCAiQ291bGQgbm90IGNyZWF0ZSAlcyBzeXNmcyBlbnRyeSAoJWQpXG4iLAorCQkJICAgICAgIHNjX2F0dHJzW2ldLmthdHRyLmF0dHIubmFtZSwgcmV0KTsKKwl9CisKKwkvKiBGaW5hbGx5IGFkZCB0aGUgJ2NvbW1pdCcgYXR0cmlidXRlICovCisJaWYgKFJCX1NDX0hBU19XUklURV9TVVBQT1JUKSB7CisJCXJldCA9IHN5c2ZzX2NyZWF0ZV9maWxlKHNjX2tvYmosICZzY19rYXR0cmNvbW1pdC5hdHRyKTsKKwkJaWYgKHJldCkgeworCQkJcHJfZXJyKFJCX1NDX1BSX1BGWCAiQ291bGQgbm90IGNyZWF0ZSAlcyBzeXNmcyBlbnRyeSAoJWQpLCBhYm9ydGluZyFcbiIsCisJCQkgICAgICAgc2Nfa2F0dHJjb21taXQuYXR0ci5uYW1lLCByZXQpOworCQkJZ290byBzeXNmc2ZhaWw7CS8vIHJlcXVpcmVkIGF0dHJpYnV0ZQorCQl9CisJfQorCisJcHJfaW5mbygiTWlrcm9UaWsgUm91dGVyQk9BUkQgc29mdHdhcmUgY29uZmlndXJhdGlvbiBzeXNmcyBkcml2ZXIgdiIgUkJfU09GVENPTkZJR19WRVIgIlxuIik7CisKKwlyZXR1cm4gMDsKKworc3lzZnNmYWlsOgorCWtvYmplY3RfcHV0KHNjX2tvYmopOworCXNjX2tvYmogPSBOVUxMOworZmFpbDoKKwlrZnJlZShzY19idWYpOworCXNjX2J1ZiA9IE5VTEw7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBfX2V4aXQgcmJfc29mdGNvbmZpZ19leGl0KHZvaWQpCit7CisJa29iamVjdF9wdXQoc2Nfa29iaik7CisJa2ZyZWUoc2NfYnVmKTsKK30KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvcGxhdGZvcm0vbWlrcm90aWsvcm91dGVyYm9vdC5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvZHJpdmVycy9wbGF0Zm9ybS9taWtyb3Rpay9yb3V0ZXJib290LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM4YzBiZgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvcGxhdGZvcm0vbWlrcm90aWsvcm91dGVyYm9vdC5jCkBAIC0wLDAgKzEsMjE4IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CisvKgorICogRHJpdmVyIGZvciBNaWtyb1RpayBSb3V0ZXJCb290IGZsYXNoIGRhdGEuIENvbW1vbiByb3V0aW5lcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgVGhpYmF1dCBWQVLDiE5FIDxoYWNrcytrZXJuZWxAc2xhc2hkaXJ0Lm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CisKKyNpbmNsdWRlICJyb3V0ZXJib290LmgiCisKK3N0YXRpYyBzdHJ1Y3Qga29iamVjdCAqcmJfa29iajsKKworLyoqCisgKiByb3V0ZXJib290X3RhZ19maW5kKCkgLSBMb2NhdGUgYSBnaXZlbiB0YWcgaW4gcm91dGVyYm9vdCBjb25maWcgZGF0YS4KKyAqIEBidWZoZWFkOiB0aGUgYnVmZmVyIHRvIGxvb2sgaW50by4gTXVzdCBzdGFydCB3aXRoIGEgdGFnIG5vZGUuCisgKiBAYnVmbGVuOiBzaXplIG9mIGJ1ZmhlYWQKKyAqIEB0YWdfaWQ6IHRoZSB0YWcgaWRlbnRpZmllciB0byBsb29rIGZvcgorICogQHBsZF9vZnM6IHdpbGwgYmUgdXBkYXRlZCB3aXRoIHRhZyBwYXlsb2FkIG9mZnNldCBpbiBidWZoZWFkLCBpZiB0YWcgZm91bmQKKyAqIEBwbGRfbGVuOiB3aWxsIGJlIHVwZGF0ZWQgd2l0aCB0YWcgcGF5bG9hZCBzaXplLCBpZiB0YWcgZm91bmQKKyAqCisgKiBUaGlzIGluY2FybmF0aW9uIG9mIHRhZ19maW5kKCkgZG9lcyBvbmx5IHRoYXQ6IGl0IGZpbmRzIGEgc3BlY2lmaWMgcm91dGVyYm9vdAorICogdGFnIG5vZGUgaW4gdGhlIGlucHV0IGJ1ZmZlci4gUm91dGVyYm9vdCB0YWcgbm9kZXMgYXJlIHUzMiB2YWx1ZXM6CisgKiAtIFRoZSBsb3cgbmliYmxlIGlzIHRoZSB0YWcgaWRlbnRpZmljYXRpb24gbnVtYmVyLAorICogLSBUaGUgaGlnaCBuaWJibGUgaXMgdGhlIHRhZyBwYXlsb2FkIGxlbmd0aCAobm9kZSBleGNsdWRlZCkgaW4gYnl0ZXMuCisgKiBUaGUgcGF5bG9hZCBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZSB0YWcgbm9kZS4gVGFnIG5vZGVzIGFyZSAzMmJpdC1hbGlnbmVkLgorICogVGhlIHJldHVybmVkIHBsZF9vZnMgd2lsbCBhbHdheXMgYmUgYWxpZ25lZC4gcGxkX2xlbiBtYXkgbm90IGVuZCBvbiAzMmJpdAorICogYm91bmRhcnkgKHRoZSBvbmx5IGtub3duIGNhc2UgaXMgd2hlbiBwYXJzaW5nIEVSRCBkYXRhKS4KKyAqIFRoZSBub2RlcyBhcmUgY3B1LWVuZGlhbiBvbiB0aGUgZmxhc2ggbWVkaWEuIFRoZSBwYXlsb2FkIGlzIGNwdS1lbmRpYW4gd2hlbgorICogYXBwbGljYWJsZS4gVGFnIG5vZGVzIGFyZSBub3Qgb3JkZXJlZCAoYnkgSUQpIG9uIGZsYXNoLgorICoKKyAqIFJldHVybjogMCBvbiBzdWNjZXNzICh0YWcgZm91bmQpIG9yIGVycm5vCisgKi8KK2ludCByb3V0ZXJib290X3RhZ19maW5kKGNvbnN0IHU4ICpidWZoZWFkLCBjb25zdCBzaXplX3QgYnVmbGVuLCBjb25zdCB1MTYgdGFnX2lkLAorCQkJdTE2ICpwbGRfb2ZzLCB1MTYgKnBsZF9sZW4pCit7CisJY29uc3QgdTMyICpkYXR1bSwgKmJ1ZmVuZDsKKwl1MzIgbm9kZTsKKwl1MTYgaWQsIGxlbjsKKwlpbnQgcmV0OworCisJaWYgKCFidWZoZWFkIHx8ICF0YWdfaWQpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gLUVOT0VOVDsKKwlkYXR1bSA9IChjb25zdCB1MzIgKilidWZoZWFkOworCWJ1ZmVuZCA9IChjb25zdCB1MzIgKikoYnVmaGVhZCArIGJ1Zmxlbik7CisKKwl3aGlsZSAoZGF0dW0gPCBidWZlbmQpIHsKKwkJbm9kZSA9ICpkYXR1bSsrOworCisJCS8qIFRhZyBsaXN0IGVuZHMgd2l0aCBudWxsIG5vZGUgKi8KKwkJaWYgKCFub2RlKQorCQkJYnJlYWs7CisKKwkJaWQgPSBub2RlICYgMHhGRkZGOworCQlsZW4gPSBub2RlID4+IDE2OworCisJCWlmICh0YWdfaWQgPT0gaWQpIHsKKwkJCWlmIChkYXR1bSA+PSBidWZlbmQpCisJCQkJYnJlYWs7CisKKwkJCWlmIChwbGRfb2ZzKQorCQkJCSpwbGRfb2ZzID0gKHUxNikoKHU4ICopZGF0dW0gLSBidWZoZWFkKTsKKwkJCWlmIChwbGRfbGVuKQorCQkJCSpwbGRfbGVuID0gbGVuOworCisJCQlyZXQgPSAwOworCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBUaGUgb25seSBrbm93biBzaXR1YXRpb24gd2hlcmUgbGVuIG1heSBub3QgZW5kIG9uIDMyYml0CisJCSAqIGJvdW5kYXJ5IGlzIHdpdGhpbiBFUkQgZGF0YS4gU2luY2Ugd2UncmUgb25seSBleHRyYWN0aW5nCisJCSAqIG9uZSB0YWcgKHRoZSBmaXJzdCBhbmQgb25seSBvbmUpIGZyb20gdGhhdCBkYXRhLCB3ZSBzaG91bGQKKwkJICogbmV2ZXIgbmVlZCB0byBmb3JjZWZ1bGx5IEFMSUdOKCkuIERvIGl0IGFueXdheSwgdGhpcyBpcyBub3QgYQorCQkgKiBwZXJmb3JtYW5jZSBwYXRoLgorCQkgKi8KKwkJbGVuID0gQUxJR04obGVuLCBzaXplb2YoKmRhdHVtKSk7CisJCWRhdHVtICs9IGxlbiAvIHNpemVvZigqZGF0dW0pOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogcm91dGVyYm9vdF9ybGVfZGVjb2RlKCkgLSBTaW1wbGUgUkxFIChNaWtyb1RpayB2YXJpYW50KSBkZWNvZGluZyByb3V0aW5lLgorICogQGluOiBpbnB1dCBidWZmZXIgdG8gZGVjb2RlCisgKiBAaW5sZW46IHNpemUgb2YgaW4KKyAqIEBvdXQ6IG91dHB1dCBidWZmZXIgdG8gd3JpdGUgZGVjb2RlZCBkYXRhIHRvCisgKiBAb3V0bGVuOiBwb2ludGVyIHRvIG91dCBzaXplIHdoZW4gZnVuY3Rpb24gaXMgY2FsbGVkLCB3aWxsIGJlIHVwZGF0ZWQgd2l0aAorICogc2l6ZSBvZiBkZWNvZGVkIG91dHB1dCBvbiByZXR1cm4KKyAqCisgKiBNaWtyb1RpaydzIHZhcmlhbnQgb2YgUkxFIG9wZXJhdGVzIGFzIGZvbGxvd3MsIGNvbnNpZGVyaW5nIGEgc2lnbmVkIHJ1biBieXRlOgorICogLSBwb3NpdGl2ZSBydW4gPT4gY2xhc3NpYyBSTEUKKyAqIC0gbmVnYXRpdmUgcnVuID0+IHRoZSBuZXh0IC08cnVuPiBieXRlcyBtdXN0IGJlIGNvcGllZCB2ZXJiYXRpbQorICogVGhlIEFQSSBpcyBtYXRjaGVkIHRvIHRoZSBsem8xeCByb3V0aW5lcyBmb3IgY29udmVuaWVuY2UuCisgKgorICogTkI6IFRoZSBvdXRwdXQgYnVmZmVyIGNhbm5vdCBvdmVybGFwIHdpdGggdGhlIGlucHV0IGJ1ZmZlci4KKyAqCisgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvciBlcnJubworICovCitpbnQgcm91dGVyYm9vdF9ybGVfZGVjb2RlKGNvbnN0IHU4ICppbiwgc2l6ZV90IGlubGVuLCB1OCAqb3V0LCBzaXplX3QgKm91dGxlbikKK3sKKwlpbnQgcmV0LCBydW4sIG5ieXRlczsJLy8gdXNlIG5hdGl2ZSB0eXBlcyBmb3Igc3BlZWQKKwl1OCBieXRlOworCisJaWYgKCFpbiB8fCAoaW5sZW4gPCAyKSB8fCAhb3V0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IC1FTk9TUEM7CisJbmJ5dGVzID0gMDsKKwl3aGlsZSAoaW5sZW4gPj0gMikgeworCQlydW4gPSAqaW4rKzsKKwkJaW5sZW4tLTsKKworCQkvKiBWZXJiYXRpbSBjb3BpZXMgKi8KKwkJaWYgKHJ1biAmIDB4ODApIHsKKwkJCS8qIEludmVydCBydW4gYnl0ZSBzaWduICovCisJCQlydW4gPSB+cnVuICYgMHhGRjsKKwkJCXJ1bisrOworCisJCQlpZiAocnVuID4gaW5sZW4pCisJCQkJZ290byBmYWlsOworCisJCQlpbmxlbiAtPSBydW47CisKKwkJCW5ieXRlcyArPSBydW47CisJCQlpZiAobmJ5dGVzID4gKm91dGxlbikKKwkJCQlnb3RvIGZhaWw7CisKKwkJCS8qIEJhc2ljIG1lbWNweSAqLworCQkJd2hpbGUgKHJ1bi0tID4gMCkKKwkJCQkqb3V0KysgPSAqaW4rKzsKKwkJfQorCQkvKiBTdHJlYW0gb2YgaGFsZi13b3JkcyBSTEU6IDxydW4+PGJ5dGU+LiBydW4gPT0gMCBpcyBpZ25vcmVkICovCisJCWVsc2UgeworCQkJYnl0ZSA9ICppbisrOworCQkJaW5sZW4tLTsKKworCQkJbmJ5dGVzICs9IHJ1bjsKKwkJCWlmIChuYnl0ZXMgPiAqb3V0bGVuKQorCQkJCWdvdG8gZmFpbDsKKworCQkJd2hpbGUgKHJ1bi0tID4gMCkKKwkJCQkqb3V0KysgPSBieXRlOworCQl9CisJfQorCisJcmV0ID0gMDsKK2ZhaWw6CisJKm91dGxlbiA9IG5ieXRlczsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9faW5pdCByb3V0ZXJib290X2luaXQodm9pZCkKK3sKKwlyYl9rb2JqID0ga29iamVjdF9jcmVhdGVfYW5kX2FkZCgibWlrcm90aWsiLCBmaXJtd2FyZV9rb2JqKTsKKwlpZiAoIXJiX2tvYmopCisJCXJldHVybiAtRU5PTUVNOworCisJLyoKKwkgKiBXZSBpZ25vcmUgdGhlIGZvbGxvd2luZyByZXR1cm4gdmFsdWVzIGFuZCBhbHdheXMgcmVnaXN0ZXIuCisJICogVGhlc2UgaW5pdCgpIHJvdXRpbmVzIGFyZSBkZXNpZ25lZCBzbyB0aGF0IHRoZWlyIGZhaWxlZCBzdGF0ZSBpcworCSAqIGFsd2F5cyBtYW5hZ2VhYmxlIGJ5IHRoZSBjb3JyZXNwb25kaW5nIGV4aXQoKSBjYWxscy4KKwkgKi8KKwlyYl9oYXJkY29uZmlnX2luaXQocmJfa29iaik7CisJcmJfc29mdGNvbmZpZ19pbml0KHJiX2tvYmopOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCByb3V0ZXJib290X2V4aXQodm9pZCkKK3sKKwlyYl9zb2Z0Y29uZmlnX2V4aXQoKTsKKwlyYl9oYXJkY29uZmlnX2V4aXQoKTsKKwlrb2JqZWN0X3B1dChyYl9rb2JqKTsJLy8gcmVjdXJzaXZlIGFmYWljdAorfQorCisvKiBDb21tb24gcm91dGluZXMgKi8KKworc3NpemVfdCByb3V0ZXJib290X3RhZ19zaG93X3N0cmluZyhjb25zdCB1OCAqcGxkLCB1MTYgcGxkX2xlbiwgY2hhciAqYnVmKQoreworCXJldHVybiBzY25wcmludGYoYnVmLCBwbGRfbGVuKzEsICIlc1xuIiwgcGxkKTsKK30KKworc3NpemVfdCByb3V0ZXJib290X3RhZ19zaG93X3UzMnMoY29uc3QgdTggKnBsZCwgdTE2IHBsZF9sZW4sIGNoYXIgKmJ1ZikKK3sKKwljaGFyICpvdXQgPSBidWY7CisJdTMyICpkYXRhOwkvLyBjcHUtZW5kaWFuCisKKwkvKiBDYWxsZXIgZW5zdXJlcyBwbGRfbGVuID4gMCAqLworCWlmIChwbGRfbGVuICUgc2l6ZW9mKCpkYXRhKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkYXRhID0gKHUzMiAqKXBsZDsKKworCWRvIHsKKwkJb3V0ICs9IHNwcmludGYob3V0LCAiMHglMDh4XG4iLCAqZGF0YSk7CisJCWRhdGErKzsKKwl9IHdoaWxlICgocGxkX2xlbiAtPSBzaXplb2YoKmRhdGEpKSk7CisKKwlyZXR1cm4gb3V0IC0gYnVmOworfQorCittb2R1bGVfaW5pdChyb3V0ZXJib290X2luaXQpOworbW9kdWxlX2V4aXQocm91dGVyYm9vdF9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNaWtyb1RpayBSb3V0ZXJCb290IHN5c2ZzIHN1cHBvcnQiKTsKK01PRFVMRV9BVVRIT1IoIlRoaWJhdXQgVkFSRU5FIik7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL3BsYXRmb3JtL21pa3JvdGlrL3JvdXRlcmJvb3QuaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2RyaXZlcnMvcGxhdGZvcm0vbWlrcm90aWsvcm91dGVyYm9vdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZDg5ODAKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9kcml2ZXJzL3BsYXRmb3JtL21pa3JvdGlrL3JvdXRlcmJvb3QuaApAQCAtMCwwICsxLDM3IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CisvKgorICogQ29tbW9uIGRlZmluaXRpb25zIGZvciBNaWtyb1RpayBSb3V0ZXJCb290IGRhdGEuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDIwIFRoaWJhdXQgVkFSw4hORSA8aGFja3Mra2VybmVsQHNsYXNoZGlydC5vcmc+CisgKi8KKworCisjaWZuZGVmIF9ST1VURVJCT09UX0hfCisjZGVmaW5lIF9ST1VURVJCT09UX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvLyB0aGVzZSBtYWdpYyB2YWx1ZXMgYXJlIHN0b3JlZCBpbiBjcHUtZW5kaWFubmVzcyBvbiBmbGFzaAorI2RlZmluZSBSQl9NQUdJQ19IQVJECSgoJ0gnKSB8ICgnYScgPDwgOCkgfCAoJ3InIDw8IDE2KSB8ICgnZCcgPDwgMjQpKQorI2RlZmluZSBSQl9NQUdJQ19TT0ZUCSgoJ1MnKSB8ICgnbycgPDwgOCkgfCAoJ2YnIDw8IDE2KSB8ICgndCcgPDwgMjQpKQorI2RlZmluZSBSQl9NQUdJQ19MWk9SCSgoJ0wnKSB8ICgnWicgPDwgOCkgfCAoJ08nIDw8IDE2KSB8ICgnUicgPDwgMjQpKQorI2RlZmluZSBSQl9NQUdJQ19FUkQJKCgnRScgPDwgMTYpIHwgKCdSJyA8PCA4KSB8ICgnRCcpKQorCisjZGVmaW5lIFJCX0FSVF9TSVpFCTB4MTAwMDAKKworI2RlZmluZSBSQl9NVERfSEFSRF9DT05GSUcJImhhcmRfY29uZmlnIgorI2RlZmluZSBSQl9NVERfU09GVF9DT05GSUcJInNvZnRfY29uZmlnIgorCitpbnQgcm91dGVyYm9vdF90YWdfZmluZChjb25zdCB1OCAqYnVmaGVhZCwgY29uc3Qgc2l6ZV90IGJ1ZmxlbiwgY29uc3QgdTE2IHRhZ19pZCwgdTE2ICpwbGRfb2ZzLCB1MTYgKnBsZF9sZW4pOworaW50IHJvdXRlcmJvb3RfcmxlX2RlY29kZShjb25zdCB1OCAqaW4sIHNpemVfdCBpbmxlbiwgdTggKm91dCwgc2l6ZV90ICpvdXRsZW4pOworCitpbnQgX19pbml0IHJiX2hhcmRjb25maWdfaW5pdChzdHJ1Y3Qga29iamVjdCAqcmJfa29iaik7Cit2b2lkIF9fZXhpdCByYl9oYXJkY29uZmlnX2V4aXQodm9pZCk7CisKK2ludCBfX2luaXQgcmJfc29mdGNvbmZpZ19pbml0KHN0cnVjdCBrb2JqZWN0ICpyYl9rb2JqKTsKK3ZvaWQgX19leGl0IHJiX3NvZnRjb25maWdfZXhpdCh2b2lkKTsKKworc3NpemVfdCByb3V0ZXJib290X3RhZ19zaG93X3N0cmluZyhjb25zdCB1OCAqcGxkLCB1MTYgcGxkX2xlbiwgY2hhciAqYnVmKTsKK3NzaXplX3Qgcm91dGVyYm9vdF90YWdfc2hvd191MzJzKGNvbnN0IHU4ICpwbGQsIHUxNiBwbGRfbGVuLCBjaGFyICpidWYpOworCisjZW5kaWYgLyogX1JPVVRFUkJPT1RfSF8gKi8KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2luY2x1ZGUvZHQtYmluZGluZ3MvbXRkL3BhcnRpdGlvbnMvdWltYWdlLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9pbmNsdWRlL2R0LWJpbmRpbmdzL210ZC9wYXJ0aXRpb25zL3VpbWFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZDVmN2IKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9pbmNsdWRlL2R0LWJpbmRpbmdzL210ZC9wYXJ0aXRpb25zL3VpbWFnZS5oCkBAIC0wLDAgKzEsMTk4IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCisvKgorICogICAgKioqIElNUE9SVEFOVCAqKioKKyAqIFRoaXMgZmlsZSBpcyBub3Qgb25seSBpbmNsdWRlZCBmcm9tIEMtY29kZSBidXQgYWxzbyBmcm9tIGRldmljZXRyZWUgc291cmNlCisgKiBmaWxlcy4gQXMgc3VjaCB0aGlzIGZpbGUgTVVTVCBvbmx5IGNvbnRhaW4gY29tbWVudHMgYW5kIGRlZmluZXMuCisgKgorICogQmFzZWQgb24gaW1hZ2UuaCBmcm9tIFUtQm9vdCB3aGljaCBpcworICogKEMpIENvcHlyaWdodCAyMDA4IFNlbWloYWxmCisgKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNSBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorICovCisKKyNpZm5kZWYgX19VSU1BR0VfSF9fCisjZGVmaW5lIF9fVUlNQUdFX0hfXworCisvKgorICogT3BlcmF0aW5nIFN5c3RlbSBDb2RlcworICoKKyAqIFRoZSBmb2xsb3dpbmcgYXJlIGV4cG9zZWQgdG8gdUltYWdlIGhlYWRlci4KKyAqIE5ldyBJRHMgKk1VU1QqIGJlIGFwcGVuZGVkIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QgYW5kICpORVZFUioKKyAqIGluc2VydGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorICovCisjZGVmaW5lCUlIX09TX0lOVkFMSUQJCTAJLyogSW52YWxpZCBPUwkqLworI2RlZmluZQlJSF9PU19PUEVOQlNECQkxCS8qIE9wZW5CU0QJKi8KKyNkZWZpbmUJSUhfT1NfTkVUQlNECQkyCS8qIE5ldEJTRAkqLworI2RlZmluZQlJSF9PU19GUkVFQlNECQkzCS8qIEZyZWVCU0QJKi8KKyNkZWZpbmUJSUhfT1NfNF80QlNECQk0CS8qIDQuNEJTRAkqLworI2RlZmluZQlJSF9PU19MSU5VWAkJNQkvKiBMaW51eAkqLworI2RlZmluZQlJSF9PU19TVlI0CQk2CS8qIFNWUjQJCSovCisjZGVmaW5lCUlIX09TX0VTSVgJCTcJLyogRXNpeAkJKi8KKyNkZWZpbmUJSUhfT1NfU09MQVJJUwkJOAkvKiBTb2xhcmlzCSovCisjZGVmaW5lCUlIX09TX0lSSVgJCTkJLyogSXJpeAkJKi8KKyNkZWZpbmUJSUhfT1NfU0NPCSAgICAgICAxMAkvKiBTQ08JCSovCisjZGVmaW5lCUlIX09TX0RFTEwJICAgICAgIDExCS8qIERlbGwJCSovCisjZGVmaW5lCUlIX09TX05DUgkgICAgICAgMTIJLyogTkNSCQkqLworI2RlZmluZQlJSF9PU19MWU5YT1MJICAgICAgIDEzCS8qIEx5bnhPUwkqLworI2RlZmluZQlJSF9PU19WWFdPUktTCSAgICAgICAxNAkvKiBWeFdvcmtzCSovCisjZGVmaW5lCUlIX09TX1BTT1MJICAgICAgIDE1CS8qIHBTT1MJCSovCisjZGVmaW5lCUlIX09TX1FOWAkgICAgICAgMTYJLyogUU5YCQkqLworI2RlZmluZQlJSF9PU19VX0JPT1QJICAgICAgIDE3CS8qIEZpcm13YXJlCSovCisjZGVmaW5lCUlIX09TX1JURU1TCSAgICAgICAxOAkvKiBSVEVNUwkqLworI2RlZmluZQlJSF9PU19BUlRPUwkgICAgICAgMTkJLyogQVJUT1MJKi8KKyNkZWZpbmUJSUhfT1NfVU5JVFkJICAgICAgIDIwCS8qIFVuaXR5IE9TCSovCisjZGVmaW5lCUlIX09TX0lOVEVHUklUWQkgICAgICAgMjEJLyogSU5URUdSSVRZCSovCisjZGVmaW5lCUlIX09TX09TRQkgICAgICAgMjIJLyogT1NFCQkqLworI2RlZmluZQlJSF9PU19QTEFOOQkgICAgICAgMjMJLyogUGxhbiA5CSovCisjZGVmaW5lCUlIX09TX09QRU5SVE9TCSAgICAgICAyNAkvKiBPcGVuUlRPUwkqLworI2RlZmluZQlJSF9PU19BUk1fVFJVU1RFRF9GSVJNV0FSRSAyNSAgICAvKiBBUk0gVHJ1c3RlZCBGaXJtd2FyZSAqLworI2RlZmluZQlJSF9PU19URUUJICAgICAgIDI2CS8qIFRydXN0ZWQgRXhlY3V0aW9uIEVudmlyb25tZW50ICovCisjZGVmaW5lCUlIX09TX09QRU5TQkkJICAgICAgIDI3CS8qIFJJU0MtViBPcGVuU0JJICovCisjZGVmaW5lCUlIX09TX0VGSQkgICAgICAgMjgJLyogRUZJIEZpcm13YXJlIChlLmcuIEdSVUIyKSAqLworCisvKgorICogQ1BVIEFyY2hpdGVjdHVyZSBDb2RlcyAoc3VwcG9ydGVkIGJ5IExpbnV4KQorICoKKyAqIFRoZSBmb2xsb3dpbmcgYXJlIGV4cG9zZWQgdG8gdUltYWdlIGhlYWRlci4KKyAqIE5ldyBJRHMgKk1VU1QqIGJlIGFwcGVuZGVkIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QgYW5kICpORVZFUioKKyAqIGluc2VydGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorICovCisjZGVmaW5lCUlIX0FSQ0hfSU5WQUxJRAkJMAkvKiBJbnZhbGlkIENQVQkqLworI2RlZmluZQlJSF9BUkNIX0FMUEhBCQkxCS8qIEFscGhhCSovCisjZGVmaW5lCUlIX0FSQ0hfQVJNCQkyCS8qIEFSTQkJKi8KKyNkZWZpbmUJSUhfQVJDSF9JMzg2CQkzCS8qIEludGVsIHg4NgkqLworI2RlZmluZQlJSF9BUkNIX0lBNjQJCTQJLyogSUE2NAkJKi8KKyNkZWZpbmUJSUhfQVJDSF9NSVBTCQk1CS8qIE1JUFMJCSovCisjZGVmaW5lCUlIX0FSQ0hfTUlQUzY0CQk2CS8qIE1JUFMJIDY0IEJpdCAqLworI2RlZmluZQlJSF9BUkNIX1BQQwkJNwkvKiBQb3dlclBDCSovCisjZGVmaW5lCUlIX0FSQ0hfUzM5MAkJOAkvKiBJQk0gUzM5MAkqLworI2RlZmluZQlJSF9BUkNIX1NICQk5CS8qIFN1cGVySAkqLworI2RlZmluZQlJSF9BUkNIX1NQQVJDCSAgICAgICAxMAkvKiBTcGFyYwkqLworI2RlZmluZQlJSF9BUkNIX1NQQVJDNjQJICAgICAgIDExCS8qIFNwYXJjIDY0IEJpdCAqLworI2RlZmluZQlJSF9BUkNIX002OEsJICAgICAgIDEyCS8qIE02OEsJCSovCisjZGVmaW5lCUlIX0FSQ0hfTklPUwkgICAgICAgMTMJLyogTmlvcy0zMgkqLworI2RlZmluZQlJSF9BUkNIX01JQ1JPQkxBWkUgICAgIDE0CS8qIE1pY3JvQmxhemUgICAqLworI2RlZmluZQlJSF9BUkNIX05JT1MyCSAgICAgICAxNQkvKiBOaW9zLUlJCSovCisjZGVmaW5lCUlIX0FSQ0hfQkxBQ0tGSU4gICAgICAgMTYJLyogQmxhY2tmaW4JKi8KKyNkZWZpbmUJSUhfQVJDSF9BVlIzMgkgICAgICAgMTcJLyogQVZSMzIJKi8KKyNkZWZpbmUJSUhfQVJDSF9TVDIwMAkgICAgICAgMTgJLyogU1RNaWNyb2VsZWN0cm9uaWNzIFNUMjAwICAqLworI2RlZmluZQlJSF9BUkNIX1NBTkRCT1gJICAgICAgIDE5CS8qIFNhbmRib3ggYXJjaGl0ZWN0dXJlICh0ZXN0IG9ubHkpICovCisjZGVmaW5lCUlIX0FSQ0hfTkRTMzIJICAgICAgIDIwCS8qIEFOREVTIFRlY2hub2xvZ3kgLSBORFMzMiAgKi8KKyNkZWZpbmUJSUhfQVJDSF9PUEVOUklTQyAgICAgICAyMQkvKiBPcGVuUklTQyAxMDAwICAqLworI2RlZmluZQlJSF9BUkNIX0FSTTY0CSAgICAgICAyMgkvKiBBUk02NAkqLworI2RlZmluZQlJSF9BUkNIX0FSQwkgICAgICAgMjMJLyogU3lub3BzeXMgRGVzaWduV2FyZSBBUkMgKi8KKyNkZWZpbmUJSUhfQVJDSF9YODZfNjQJICAgICAgIDI0CS8qIEFNRCB4ODZfNjQsIEludGVsIGFuZCBWaWEgKi8KKyNkZWZpbmUJSUhfQVJDSF9YVEVOU0EJICAgICAgIDI1CS8qIFh0ZW5zYQkqLworI2RlZmluZQlJSF9BUkNIX1JJU0NWCSAgICAgICAyNgkvKiBSSVNDLVYgKi8KKworLyoKKyAqIEltYWdlIFR5cGVzCisgKgorICogIlN0YW5kYWxvbmUgUHJvZ3JhbXMiIGFyZSBkaXJlY3RseSBydW5uYWJsZSBpbiB0aGUgZW52aXJvbm1lbnQKKyAqCXByb3ZpZGVkIGJ5IFUtQm9vdDsgaXQgaXMgZXhwZWN0ZWQgdGhhdCAoaWYgdGhleSBiZWhhdmUKKyAqCXdlbGwpIHlvdSBjYW4gY29udGludWUgdG8gd29yayBpbiBVLUJvb3QgYWZ0ZXIgcmV0dXJuIGZyb20KKyAqCXRoZSBTdGFuZGFsb25lIFByb2dyYW0uCisgKiAiT1MgS2VybmVsIEltYWdlcyIgYXJlIHVzdWFsbHkgaW1hZ2VzIG9mIHNvbWUgRW1iZWRkZWQgT1Mgd2hpY2gKKyAqCXdpbGwgdGFrZSBvdmVyIGNvbnRyb2wgY29tcGxldGVseS4gVXN1YWxseSB0aGVzZSBwcm9ncmFtcworICoJd2lsbCBpbnN0YWxsIHRoZWlyIG93biBzZXQgb2YgZXhjZXB0aW9uIGhhbmRsZXJzLCBkZXZpY2UKKyAqCWRyaXZlcnMsIHNldCB1cCB0aGUgTU1VLCBldGMuIC0gdGhpcyBtZWFucywgdGhhdCB5b3UgY2Fubm90CisgKglleHBlY3QgdG8gcmUtZW50ZXIgVS1Cb290IGV4Y2VwdCBieSByZXNldHRpbmcgdGhlIENQVS4KKyAqICJSQU1EaXNrIEltYWdlcyIgYXJlIG1vcmUgb3IgbGVzcyBqdXN0IGRhdGEgYmxvY2tzLCBhbmQgdGhlaXIKKyAqCXBhcmFtZXRlcnMgKGFkZHJlc3MsIHNpemUpIGFyZSBwYXNzZWQgdG8gYW4gT1Mga2VybmVsIHRoYXQgaXMKKyAqCWJlaW5nIHN0YXJ0ZWQuCisgKiAiTXVsdGktRmlsZSBJbWFnZXMiIGNvbnRhaW4gc2V2ZXJhbCBpbWFnZXMsIHR5cGljYWxseSBhbiBPUworICoJKExpbnV4KSBrZXJuZWwgaW1hZ2UgYW5kIG9uZSBvciBtb3JlIGRhdGEgaW1hZ2VzIGxpa2UKKyAqCVJBTURpc2tzLiBUaGlzIGNvbnN0cnVjdCBpcyB1c2VmdWwgZm9yIGluc3RhbmNlIHdoZW4geW91IHdhbnQKKyAqCXRvIGJvb3Qgb3ZlciB0aGUgbmV0d29yayB1c2luZyBCT09UUCBldGMuLCB3aGVyZSB0aGUgYm9vdAorICoJc2VydmVyIHByb3ZpZGVzIGp1c3QgYSBzaW5nbGUgaW1hZ2UgZmlsZSwgYnV0IHlvdSB3YW50IHRvIGdldAorICoJZm9yIGluc3RhbmNlIGFuIE9TIGtlcm5lbCBhbmQgYSBSQU1EaXNrIGltYWdlLgorICoKKyAqCSJNdWx0aS1GaWxlIEltYWdlcyIgc3RhcnQgd2l0aCBhIGxpc3Qgb2YgaW1hZ2Ugc2l6ZXMsIGVhY2gKKyAqCWltYWdlIHNpemUgKGluIGJ5dGVzKSBzcGVjaWZpZWQgYnkgYW4gInVpbnQzMl90IiBpbiBuZXR3b3JrCisgKglieXRlIG9yZGVyLiBUaGlzIGxpc3QgaXMgdGVybWluYXRlZCBieSBhbiAiKHVpbnQzMl90KTAiLgorICoJSW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHRlcm1pbmF0aW5nIDAgZm9sbG93IHRoZSBpbWFnZXMsIG9uZSBieQorICoJb25lLCBhbGwgYWxpZ25lZCBvbiAidWludDMyX3QiIGJvdW5kYXJpZXMgKHNpemUgcm91bmRlZCB1cCB0bworICoJYSBtdWx0aXBsZSBvZiA0IGJ5dGVzIC0gZXhjZXB0IGZvciB0aGUgbGFzdCBmaWxlKS4KKyAqCisgKiAiRmlybXdhcmUgSW1hZ2VzIiBhcmUgYmluYXJ5IGltYWdlcyBjb250YWluaW5nIGZpcm13YXJlIChsaWtlCisgKglVLUJvb3Qgb3IgRlBHQSBpbWFnZXMpIHdoaWNoIHVzdWFsbHkgd2lsbCBiZSBwcm9ncmFtbWVkIHRvCisgKglmbGFzaCBtZW1vcnkuCisgKgorICogIlNjcmlwdCBmaWxlcyIgYXJlIGNvbW1hbmQgc2VxdWVuY2VzIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBieQorICoJVS1Cb290J3MgY29tbWFuZCBpbnRlcnByZXRlcjsgdGhpcyBmZWF0dXJlIGlzIGVzcGVjaWFsbHkKKyAqCXVzZWZ1bCB3aGVuIHlvdSBjb25maWd1cmUgVS1Cb290IHRvIHVzZSBhIHJlYWwgc2hlbGwgKGh1c2gpCisgKglhcyBjb21tYW5kIGludGVycHJldGVyICg9PiBTaGVsbCBTY3JpcHRzKS4KKyAqCisgKiBUaGUgZm9sbG93aW5nIGFyZSBleHBvc2VkIHRvIHVJbWFnZSBoZWFkZXIuCisgKiBOZXcgSURzICpNVVNUKiBiZSBhcHBlbmRlZCBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0IGFuZCAqTkVWRVIqCisgKiBpbnNlcnRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKyAqLworI2RlZmluZQlJSF9UWVBFX0lOVkFMSUQJCTAJLyogSW52YWxpZCBJbWFnZQkJKi8KKyNkZWZpbmUJSUhfVFlQRV9TVEFOREFMT05FCTEJLyogU3RhbmRhbG9uZSBQcm9ncmFtCQkqLworI2RlZmluZQlJSF9UWVBFX0tFUk5FTAkJMgkvKiBPUyBLZXJuZWwgSW1hZ2UJCSovCisjZGVmaW5lCUlIX1RZUEVfUkFNRElTSwkJMwkvKiBSQU1EaXNrIEltYWdlCQkqLworI2RlZmluZQlJSF9UWVBFX01VTFRJCQk0CS8qIE11bHRpLUZpbGUgSW1hZ2UJCSovCisjZGVmaW5lCUlIX1RZUEVfRklSTVdBUkUJNQkvKiBGaXJtd2FyZSBJbWFnZQkJKi8KKyNkZWZpbmUJSUhfVFlQRV9TQ1JJUFQJCTYJLyogU2NyaXB0IGZpbGUJCQkqLworI2RlZmluZQlJSF9UWVBFX0ZJTEVTWVNURU0JNwkvKiBGaWxlc3lzdGVtIEltYWdlIChhbnkgdHlwZSkJKi8KKyNkZWZpbmUJSUhfVFlQRV9GTEFURFQJCTgJLyogQmluYXJ5IEZsYXQgRGV2aWNlIFRyZWUgQmxvYgkqLworI2RlZmluZQlJSF9UWVBFX0tXQklNQUdFCTkJLyogS2lya3dvb2QgQm9vdCBJbWFnZQkJKi8KKyNkZWZpbmUJSUhfVFlQRV9JTVhJTUFHRSAgICAgICAxMAkvKiBGcmVlc2NhbGUgSU1YQm9vdCBJbWFnZQkqLworI2RlZmluZQlJSF9UWVBFX1VCTElNQUdFICAgICAgIDExCS8qIERhdmluY2kgVUJMIEltYWdlCQkqLworI2RlZmluZQlJSF9UWVBFX09NQVBJTUFHRSAgICAgIDEyCS8qIFRJIE9NQVAgQ29uZmlnIEhlYWRlciBJbWFnZQkqLworI2RlZmluZQlJSF9UWVBFX0FJU0lNQUdFICAgICAgIDEzCS8qIFRJIERhdmluY2kgQUlTIEltYWdlCQkqLworCS8qIE9TIEtlcm5lbCBJbWFnZSwgY2FuIHJ1biBmcm9tIGFueSBsb2FkIGFkZHJlc3MgKi8KKyNkZWZpbmUJSUhfVFlQRV9LRVJORUxfTk9MT0FEICAxNAorI2RlZmluZQlJSF9UWVBFX1BCTElNQUdFICAgICAgIDE1CS8qIEZyZWVzY2FsZSBQQkwgQm9vdCBJbWFnZQkqLworI2RlZmluZQlJSF9UWVBFX01YU0lNQUdFICAgICAgIDE2CS8qIEZyZWVzY2FsZSBNWFNCb290IEltYWdlCSovCisjZGVmaW5lCUlIX1RZUEVfR1BJTUFHRQkgICAgICAgMTcJLyogVEkgS2V5c3RvbmUgR1BIZWFkZXIgSW1hZ2UJKi8KKyNkZWZpbmUJSUhfVFlQRV9BVE1FTElNQUdFICAgICAxOAkvKiBBVE1FTCBST00gYm9vdGFibGUgSW1hZ2UJKi8KKyNkZWZpbmUJSUhfVFlQRV9TT0NGUEdBSU1BR0UgICAxOQkvKiBBbHRlcmEgU09DRlBHQSBDVi9BViBQcmVsb2FkZXIgKi8KKyNkZWZpbmUJSUhfVFlQRV9YODZfU0VUVVAgICAgICAyMAkvKiB4ODYgc2V0dXAuYmluIEltYWdlCQkqLworI2RlZmluZQlJSF9UWVBFX0xQQzMyWFhJTUFHRSAgIDIxCS8qIHg4NiBzZXR1cC5iaW4gSW1hZ2UJCSovCisjZGVmaW5lCUlIX1RZUEVfTE9BREFCTEUgICAgICAgMjIJLyogQSBsaXN0IG9mIHR5cGVsZXNzIGltYWdlcwkqLworI2RlZmluZQlJSF9UWVBFX1JLSU1BR0UJICAgICAgIDIzCS8qIFJvY2tjaGlwIEJvb3QgSW1hZ2UJCSovCisjZGVmaW5lCUlIX1RZUEVfUktTRAkgICAgICAgMjQJLyogUm9ja2NoaXAgU0QgY2FyZAkJKi8KKyNkZWZpbmUJSUhfVFlQRV9SS1NQSQkgICAgICAgMjUJLyogUm9ja2NoaXAgU1BJIGltYWdlCQkqLworI2RlZmluZQlJSF9UWVBFX1pZTlFJTUFHRSAgICAgIDI2CS8qIFhpbGlueCBaeW5xIEJvb3QgSW1hZ2UgKi8KKyNkZWZpbmUJSUhfVFlQRV9aWU5RTVBJTUFHRSAgICAyNwkvKiBYaWxpbnggWnlucU1QIEJvb3QgSW1hZ2UgKi8KKyNkZWZpbmUJSUhfVFlQRV9aWU5RTVBCSUYgICAgICAyOAkvKiBYaWxpbnggWnlucU1QIEJvb3QgSW1hZ2UgKGJpZikgKi8KKyNkZWZpbmUJSUhfVFlQRV9GUEdBCSAgICAgICAyOQkvKiBGUEdBIEltYWdlICovCisjZGVmaW5lCUlIX1RZUEVfVllCUklESU1BR0UgICAgMzAJLyogVllCUklEIC52eWIgSW1hZ2UgKi8KKyNkZWZpbmUJSUhfVFlQRV9URUUgICAgICAgICAgICAzMQkvKiBUcnVzdGVkIEV4ZWN1dGlvbiBFbnZpcm9ubWVudCBPUyBJbWFnZSAqLworI2RlZmluZQlJSF9UWVBFX0ZJUk1XQVJFX0lWVCAgIDMyCS8qIEZpcm13YXJlIEltYWdlIHdpdGggSEFCdjQgSVZUICovCisjZGVmaW5lCUlIX1RZUEVfUE1NQyAgICAgICAgICAgMzMJLyogVEkgUG93ZXIgTWFuYWdlbWVudCBNaWNyby1Db250cm9sbGVyIEZpcm13YXJlICovCisjZGVmaW5lCUlIX1RZUEVfU1RNMzJJTUFHRSAgICAgMzQJLyogU1RNaWNyb2VsZWN0cm9uaWNzIFNUTTMyIEltYWdlICovCisjZGVmaW5lCUlIX1RZUEVfU09DRlBHQUlNQUdFX1YxIDM1CS8qIEFsdGVyYSBTT0NGUEdBIEExMCBQcmVsb2FkZXIJKi8KKyNkZWZpbmUJSUhfVFlQRV9NVEtJTUFHRSAgICAgICAzNgkvKiBNZWRpYVRlayBCb290Uk9NIGxvYWRhYmxlIEltYWdlICovCisjZGVmaW5lCUlIX1RZUEVfSU1YOE1JTUFHRSAgICAgMzcJLyogRnJlZXNjYWxlIElNWDhNQm9vdCBJbWFnZQkqLworI2RlZmluZQlJSF9UWVBFX0lNWDhJTUFHRSAgICAgIDM4CS8qIEZyZWVzY2FsZSBJTVg4Qm9vdCBJbWFnZQkqLworI2RlZmluZQlJSF9UWVBFX0NPUFJPCSAgICAgICAzOQkvKiBDb3Byb2Nlc3NvciBJbWFnZSBmb3IgcmVtb3RlcHJvYyovCisKKworLyoKKyAqIENvbXByZXNzaW9uIFR5cGVzCisgKgorICogVGhlIGZvbGxvd2luZyBhcmUgZXhwb3NlZCB0byB1SW1hZ2UgaGVhZGVyLgorICogTmV3IElEcyAqTVVTVCogYmUgYXBwZW5kZWQgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdCBhbmQgKk5FVkVSKgorICogaW5zZXJ0ZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisgKi8KKyNkZWZpbmUJSUhfQ09NUF9OT05FCQkwCS8qICBObwkgQ29tcHJlc3Npb24gVXNlZAkqLworI2RlZmluZQlJSF9DT01QX0daSVAJCTEJLyogZ3ppcAkgQ29tcHJlc3Npb24gVXNlZAkqLworI2RlZmluZQlJSF9DT01QX0JaSVAyCQkyCS8qIGJ6aXAyIENvbXByZXNzaW9uIFVzZWQJKi8KKyNkZWZpbmUJSUhfQ09NUF9MWk1BCQkzCS8qIGx6bWEgIENvbXByZXNzaW9uIFVzZWQJKi8KKyNkZWZpbmUJSUhfQ09NUF9MWk8JCTQJLyogbHpvICAgQ29tcHJlc3Npb24gVXNlZAkqLworI2RlZmluZQlJSF9DT01QX0xaNAkJNQkvKiBsejQgICBDb21wcmVzc2lvbiBVc2VkCSovCisKKworI2RlZmluZSBMWjRGX01BR0lDCTB4MTg0RDIyMDQJLyogTFo0IE1hZ2ljIE51bWJlcgkJKi8KKyNkZWZpbmUgSUhfTUFHSUMJMHgyNzA1MTk1NgkvKiBJbWFnZSBNYWdpYyBOdW1iZXIJCSovCisjZGVmaW5lIElIX05NTEVOCQkzMgkvKiBJbWFnZSBOYW1lIExlbmd0aAkJKi8KKworLyoKKyAqIE1hZ2ljIHZhbHVlcyBzcGVjaWZpYyB0byAib3BlbndydCx1aW1hZ2UiIHBhcnRpdGlvbnMKKyAqLworI2RlZmluZSBJSF9NQUdJQ19PS0xJCTB4NGY0YjRjNDkJLyogJ09LTEknCQkJKi8KKyNkZWZpbmUgRldfRURJTUFYX09GRlNFVAkyMAkvKiBFZGltYXggRmlybXdhcmUgT2Zmc2V0CSovCisjZGVmaW5lIEZXX01BR0lDX0VESU1BWAkweDQzNTM1OTUzCS8qIEVkaW1heCBGaXJtd2FyZSBNYWdpYyBOdW1iZXIgKi8KKworI2VuZGlmCS8qIF9fVUlNQUdFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvaW5jbHVkZS9saW51eC9hcjgyMTZfcGxhdGZvcm0uaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2luY2x1ZGUvbGludXgvYXI4MjE2X3BsYXRmb3JtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRiYzQ0MgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2luY2x1ZGUvbGludXgvYXI4MjE2X3BsYXRmb3JtLmgKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBBUjgyMTYgc3dpdGNoIGRyaXZlciBwbGF0Zm9ybSBkYXRhCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdhYm9yIEp1aG9zIDxqdWhvc2dAb3BlbndydC5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgQVI4MjE2X1BMQVRGT1JNX0gKKyNkZWZpbmUgQVI4MjE2X1BMQVRGT1JNX0gKKworZW51bSBhcjgzMjdfcGFkX21vZGUgeworCUFSODMyN19QQURfTkMgPSAwLAorCUFSODMyN19QQURfTUFDMk1BQ19NSUksCisJQVI4MzI3X1BBRF9NQUMyTUFDX0dNSUksCisJQVI4MzI3X1BBRF9NQUNfU0dNSUksCisJQVI4MzI3X1BBRF9NQUMyUEhZX01JSSwKKwlBUjgzMjdfUEFEX01BQzJQSFlfR01JSSwKKwlBUjgzMjdfUEFEX01BQ19SR01JSSwKKwlBUjgzMjdfUEFEX1BIWV9HTUlJLAorCUFSODMyN19QQURfUEhZX1JHTUlJLAorCUFSODMyN19QQURfUEhZX01JSSwKK307CisKK2VudW0gYXI4MzI3X2Nsa19kZWxheV9zZWwgeworCUFSODMyN19DTEtfREVMQVlfU0VMMCA9IDAsCisJQVI4MzI3X0NMS19ERUxBWV9TRUwxLAorCUFSODMyN19DTEtfREVMQVlfU0VMMiwKKwlBUjgzMjdfQ0xLX0RFTEFZX1NFTDMsCit9OworCitzdHJ1Y3QgYXI4MzI3X3BhZF9jZmcgeworCWVudW0gYXI4MzI3X3BhZF9tb2RlIG1vZGU7CisJYm9vbCByeGNsa19zZWw7CisJYm9vbCB0eGNsa19zZWw7CisJYm9vbCBwaXBlX3J4Y2xrX3NlbDsKKwlib29sIHR4Y2xrX2RlbGF5X2VuOworCWJvb2wgcnhjbGtfZGVsYXlfZW47CisJYm9vbCBzZ21paV9kZWxheV9lbjsKKwllbnVtIGFyODMyN19jbGtfZGVsYXlfc2VsIHR4Y2xrX2RlbGF5X3NlbDsKKwllbnVtIGFyODMyN19jbGtfZGVsYXlfc2VsIHJ4Y2xrX2RlbGF5X3NlbDsKKwlib29sIG1hYzA2X2V4Y2hhbmdlX2RpczsKK307CisKK2VudW0gYXI4MzI3X3BvcnRfc3BlZWQgeworCUFSODMyN19QT1JUX1NQRUVEXzEwID0gMCwKKwlBUjgzMjdfUE9SVF9TUEVFRF8xMDAsCisJQVI4MzI3X1BPUlRfU1BFRURfMTAwMCwKK307CisKK3N0cnVjdCBhcjgzMjdfcG9ydF9jZmcgeworCWludCBmb3JjZV9saW5rOjE7CisJZW51bSBhcjgzMjdfcG9ydF9zcGVlZCBzcGVlZDsKKwlpbnQgdHhwYXVzZToxOworCWludCByeHBhdXNlOjE7CisJaW50IGR1cGxleDoxOworfTsKKworc3RydWN0IGFyODMyN19zZ21paV9jZmcgeworCXUzMiBzZ21paV9jdHJsOworCWJvb2wgc2VyZGVzX2FlbjsKK307CisKK3N0cnVjdCBhcjgzMjdfbGVkX2NmZyB7CisJdTMyIGxlZF9jdHJsMDsKKwl1MzIgbGVkX2N0cmwxOworCXUzMiBsZWRfY3RybDI7CisJdTMyIGxlZF9jdHJsMzsKKwlib29sIG9wZW5fZHJhaW47Cit9OworCitlbnVtIGFyODMyN19sZWRfbnVtIHsKKwlBUjgzMjdfTEVEX1BIWTBfMCA9IDAsCisJQVI4MzI3X0xFRF9QSFkwXzEsCisJQVI4MzI3X0xFRF9QSFkwXzIsCisJQVI4MzI3X0xFRF9QSFkxXzAsCisJQVI4MzI3X0xFRF9QSFkxXzEsCisJQVI4MzI3X0xFRF9QSFkxXzIsCisJQVI4MzI3X0xFRF9QSFkyXzAsCisJQVI4MzI3X0xFRF9QSFkyXzEsCisJQVI4MzI3X0xFRF9QSFkyXzIsCisJQVI4MzI3X0xFRF9QSFkzXzAsCisJQVI4MzI3X0xFRF9QSFkzXzEsCisJQVI4MzI3X0xFRF9QSFkzXzIsCisJQVI4MzI3X0xFRF9QSFk0XzAsCisJQVI4MzI3X0xFRF9QSFk0XzEsCisJQVI4MzI3X0xFRF9QSFk0XzIsCit9OworCitlbnVtIGFyODMyN19sZWRfbW9kZSB7CisJQVI4MzI3X0xFRF9NT0RFX0hXID0gMCwKKwlBUjgzMjdfTEVEX01PREVfU1csCit9OworCitzdHJ1Y3QgYXI4MzI3X2xlZF9pbmZvIHsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKmRlZmF1bHRfdHJpZ2dlcjsKKwlib29sIGFjdGl2ZV9sb3c7CisJZW51bSBhcjgzMjdfbGVkX251bSBsZWRfbnVtOworCWVudW0gYXI4MzI3X2xlZF9tb2RlIG1vZGU7Cit9OworCisjZGVmaW5lIEFSODMyN19MRURfSU5GTyhfbGVkLCBfbW9kZSwgX25hbWUpIHsJXAorCS5uYW1lID0gKF9uYW1lKSwgCSAgIAkJXAorCS5sZWRfbnVtID0gQVI4MzI3X0xFRF8gIyMgX2xlZCwJCVwKKwkubW9kZSA9IEFSODMyN19MRURfTU9ERV8gIyMgX21vZGUgCVwKK30KKworc3RydWN0IGFyODMyN19wbGF0Zm9ybV9kYXRhIHsKKwlzdHJ1Y3QgYXI4MzI3X3BhZF9jZmcgKnBhZDBfY2ZnOworCXN0cnVjdCBhcjgzMjdfcGFkX2NmZyAqcGFkNV9jZmc7CisJc3RydWN0IGFyODMyN19wYWRfY2ZnICpwYWQ2X2NmZzsKKwlzdHJ1Y3QgYXI4MzI3X3NnbWlpX2NmZyAqc2dtaWlfY2ZnOworCXN0cnVjdCBhcjgzMjdfcG9ydF9jZmcgcG9ydDBfY2ZnOworCXN0cnVjdCBhcjgzMjdfcG9ydF9jZmcgcG9ydDZfY2ZnOworCXN0cnVjdCBhcjgzMjdfbGVkX2NmZyAqbGVkX2NmZzsKKworCWludCAoKmdldF9wb3J0X2xpbmspKHVuc2lnbmVkIHBvcnQpOworCisJdW5zaWduZWQgbnVtX2xlZHM7CisJY29uc3Qgc3RydWN0IGFyODMyN19sZWRfaW5mbyAqbGVkczsKK307CisKKyNlbmRpZiAvKiBBUjgyMTZfUExBVEZPUk1fSCAqLworCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9pbmNsdWRlL2xpbnV4L2F0aDVrX3BsYXRmb3JtLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9pbmNsdWRlL2xpbnV4L2F0aDVrX3BsYXRmb3JtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM4NTIyNAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2luY2x1ZGUvbGludXgvYXRoNWtfcGxhdGZvcm0uaApAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA5IEdhYm9yIEp1aG9zIDxqdWhvc2dAb3BlbndydC5vcmc+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSW1yZSBLYWxveiA8a2Fsb3pAb3BlbndydC5vcmc+CisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgRGFuaWVsIEdvbGxlIDxkYW5pZWwuZ29sbGVAZ21haWwuY29tPgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgX0xJTlVYX0FUSDVLX1BMQVRGT1JNX0gKKyNkZWZpbmUgX0xJTlVYX0FUSDVLX1BMQVRGT1JNX0gKKworI2RlZmluZSBBVEg1S19QTEFUX0VFUF9NQVhfV09SRFMJMjA0OAorCitzdHJ1Y3QgYXRoNWtfcGxhdGZvcm1fZGF0YSB7CisJdTE2ICplZXByb21fZGF0YTsKKwl1OCAqbWFjYWRkcjsKK307CisKKyNlbmRpZiAvKiBfTElOVVhfQVRINUtfUExBVEZPUk1fSCAqLwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvaW5jbHVkZS9saW51eC9hdGg5a19wbGF0Zm9ybS5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvaW5jbHVkZS9saW51eC9hdGg5a19wbGF0Zm9ybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMTAxMDgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9pbmNsdWRlL2xpbnV4L2F0aDlrX3BsYXRmb3JtLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwOSBHYWJvciBKdWhvcyA8anVob3NnQG9wZW53cnQub3JnPgorICogQ29weXJpZ2h0IChjKSAyMDA5IEltcmUgS2Fsb3ogPGthbG96QG9wZW53cnQub3JnPgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgX0xJTlVYX0FUSDlLX1BMQVRGT1JNX0gKKyNkZWZpbmUgX0xJTlVYX0FUSDlLX1BMQVRGT1JNX0gKKworI2RlZmluZSBBVEg5S19QTEFUX0VFUF9NQVhfV09SRFMJMjA0OAorCitzdHJ1Y3QgYXRoOWtfcGxhdGZvcm1fZGF0YSB7CisJY29uc3QgY2hhciAqZWVwcm9tX25hbWU7CisKKwl1MTYgZWVwcm9tX2RhdGFbQVRIOUtfUExBVF9FRVBfTUFYX1dPUkRTXTsKKwl1OCAqbWFjYWRkcjsKKworCWludCBsZWRfcGluOworCXUzMiBncGlvX21hc2s7CisJdTMyIGdwaW9fdmFsOworCisJdTMyIGJ0X2FjdGl2ZV9waW47CisJdTMyIGJ0X3ByaW9yaXR5X3BpbjsKKwl1MzIgd2xhbl9hY3RpdmVfcGluOworCisJYm9vbCBlbmRpYW5fY2hlY2s7CisJYm9vbCBpc19jbGtfMjVtaHo7CisJYm9vbCB0eF9nYWluX2J1ZmZhbG87CisJYm9vbCBkaXNhYmxlXzJnaHo7CisJYm9vbCBkaXNhYmxlXzVnaHo7CisJYm9vbCBsZWRfYWN0aXZlX2hpZ2g7CisKKwlpbnQgKCpnZXRfbWFjX3JldmlzaW9uKSh2b2lkKTsKKwlpbnQgKCpleHRlcm5hbF9yZXNldCkodm9pZCk7CisKKwlib29sIHVzZV9lZXByb207CisKKwlpbnQgbnVtX2xlZHM7CisJY29uc3Qgc3RydWN0IGdwaW9fbGVkICpsZWRzOworCisJdW5zaWduZWQgbnVtX2J0bnM7CisJY29uc3Qgc3RydWN0IGdwaW9fa2V5c19idXR0b24gKmJ0bnM7CisJdW5zaWduZWQgYnRuX3BvbGxfaW50ZXJ2YWw7Cit9OworCisjZW5kaWYgLyogX0xJTlVYX0FUSDlLX1BMQVRGT1JNX0ggKi8KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2luY2x1ZGUvbGludXgvbXlsb2FkZXIuaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2luY2x1ZGUvbGludXgvbXlsb2FkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODllNDE1Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvaW5jbHVkZS9saW51eC9teWxvYWRlci5oCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogIENvbXBleCdzIE15TG9hZGVyIHNwZWNpZmljIGRlZmluaXRpb25zCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNi0yMDA4IEdhYm9yIEp1aG9zIDxqdWhvc2dAb3BlbndydC5vcmc+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfTVlMT0FERVJfSF8KKyNkZWZpbmUgX01ZTE9BREVSX0hfCisKKy8qIE15bG9hZGVyIHNwZWNpZmljIG1hZ2ljIG51bWJlcnMgKi8KKyNkZWZpbmUgTVlMT19NQUdJQ19TWVNfUEFSQU1TCTB4MjAwMjExMDcKKyNkZWZpbmUgTVlMT19NQUdJQ19QQVJUSVRJT05TCTB4MjAwMjExMDMKKyNkZWZpbmUgTVlMT19NQUdJQ19CT0FSRF9QQVJBTVMJMHgyMDAyMTEwMworCisvKiBWZW5kb3IgSUQncyAoc2VlbXMgdG8gYmUgc2FtZSBhcyB0aGUgUENJIHZlbmRvciBJRCdzKSAqLworI2RlZmluZSBWRU5JRF9DT01QRVgJCTB4MTFGNgorCisvKiBEZXZpY2VzIGJhc2VkIG9uIHRoZSBBRE01MTIwICovCisjZGVmaW5lIERFVklEX0NPTVBFWF9OUDI3RwkweDAwNzgKKyNkZWZpbmUgREVWSURfQ09NUEVYX05QMjhHCTB4MDQ0QworI2RlZmluZSBERVZJRF9DT01QRVhfTlAyOEdIUwkweDA0NEUKKyNkZWZpbmUgREVWSURfQ09NUEVYX1dQNTRHdjFDCTB4MDUxNAorI2RlZmluZSBERVZJRF9DT01QRVhfV1A1NEcJMHgwNTE1CisjZGVmaW5lIERFVklEX0NPTVBFWF9XUDU0QUcJMHgwNTQ2CisjZGVmaW5lIERFVklEX0NPTVBFWF9XUFA1NEFHCTB4MDU1MAorI2RlZmluZSBERVZJRF9DT01QRVhfV1BQNTRHCTB4MDU1NQorCisvKiBEZXZpY2VzIGJhc2VkIG9uIHRoZSBBdGhlcm9zIEFSMjMxNyAqLworI2RlZmluZSBERVZJRF9DT01QRVhfTlAyNUcJMHgwNUU2CisjZGVmaW5lIERFVklEX0NPTVBFWF9XUEU1M0cJMHgwNURDCisKKy8qIERldmljZXMgYmFzZWQgb24gdGhlIEF0aGVyb3MgQVI3MXh4ICovCisjZGVmaW5lIERFVklEX0NPTVBFWF9XUDU0MwkweDA2NDAKKyNkZWZpbmUgREVWSURfQ09NUEVYX1dQRTcyCTB4MDY3MgorCisvKiBEZXZpY2VzIGJhc2VkIG9uIHRoZSBJWFA0MjIgKi8KKyNkZWZpbmUgREVWSURfQ09NUEVYX1dQMTgJMHgwNDdFCisjZGVmaW5lIERFVklEX0NPTVBFWF9OUDE4QQkweDA0ODkKKworLyogT3RoZXIgZGV2aWNlcyAqLworI2RlZmluZSBERVZJRF9DT01QRVhfTlAyNkc4TQkweDAzRTgKKyNkZWZpbmUgREVWSURfQ09NUEVYX05QMjZHMTZNCTB4MDNFOQorCitzdHJ1Y3QgbXlsb19wYXJ0aXRpb24geworCXVpbnQxNl90CWZsYWdzOwkvKiBwYXJ0aXRpb24gZmxhZ3MgKi8KKwl1aW50MTZfdAl0eXBlOwkvKiB0eXBlIG9mIHRoZSBwYXJ0aXRpb24gKi8KKwl1aW50MzJfdAlhZGRyOwkvKiByZWxhdGl2ZSBhZGRyZXNzIG9mIHRoZSBwYXJ0aXRpb24gZnJvbSB0aGUKKwkJCQkgICBmbGFzaCBzdGFydCAqLworCXVpbnQzMl90CXNpemU7CS8qIHNpemUgb2YgdGhlIHBhcnRpdGlvbiBpbiBieXRlcyAqLworCXVpbnQzMl90CXBhcmFtOwkvKiBpZiB0aGlzIGlzIHRoZSBhY3RpdmUgcGFydGl0aW9uLCB0aGUKKwkJCQkgICBNeUxvYWRlciBsb2FkIGNvZGUgdG8gdGhpcyBhZGRyZXNzICovCit9OworCisjZGVmaW5lIFBBUlRJVElPTl9GTEFHX0FDVElWRQkweDgwMDAgLyogdGhpcyBpcyB0aGUgYWN0aXZlIHBhcnRpdGlvbiwKKwkJCQkJKiBNeUxvYWRlciBsb2FkcyBmaXJtd2FyZSBmcm9tIGhlcmUgKi8KKyNkZWZpbmUgUEFSVElUSU9OX0ZMQUdfSVNSQU0JMHgyMDAwIC8qIEZJWE1FOiB0aGlzIGlzIGEgUkFNIHBhcnRpdGlvbj8gKi8KKyNkZWZpbmUgUEFSVElJSU9OX0ZMQUdfUkFNTE9BRAkweDEwMDAgLyogRklYTUU6IGxvYWQgdGhpcyBwYXJ0aXRpb24gaW50byB0aGUgUkFNPyAqLworI2RlZmluZSBQQVJUSVRJT05fRkxBR19QUkVMT0FECTB4MDgwMCAvKiB0aGUgcGFydGl0aW9uIGRhdGEgcHJlbG9hZGVkIHRvIFJBTQorCQkJCQkqIGJlZm9yZSBkZWNvbXByZXNzaW9uICovCisjZGVmaW5lIFBBUlRJVElPTl9GTEFHX0xaTUEJMHgwMTAwIC8qIHBhcnRpdGlvbiBkYXRhIGNvbXByZXNzZWQgYnkgTFpNQSAqLworI2RlZmluZSBQQVJUSVRJT05fRkxBR19IQVZFSERSICAweDAwMDIgLyogdGhlIHBhcnRpdGlvbiBkYXRhIGhhdmUgYSBoZWFkZXIgKi8KKworI2RlZmluZSBQQVJUSVRJT05fVFlQRV9GUkVFCTAKKyNkZWZpbmUgUEFSVElUSU9OX1RZUEVfVVNFRAkxCisKKyNkZWZpbmUgTVlMT19NQVhfUEFSVElUSU9OUwk4CS8qIG1heGltdW0gbnVtYmVyIG9mIHBhcnRpdGlvbnMgaW4gdGhlCisJCQkJCSAgIHBhcnRpdGlvbiB0YWJsZSAqLworCitzdHJ1Y3QgbXlsb19wYXJ0aXRpb25fdGFibGUgeworCXVpbnQzMl90CW1hZ2ljOwkJLyogbXVzdCBiZSBNWUxPX01BR0lDX1BBUlRJVElPTlMgKi8KKwl1aW50MzJfdAlyZXMwOwkJLyogdW5rbm93bi91bnVzZWQgKi8KKwl1aW50MzJfdAlyZXMxOwkJLyogdW5rbm93bi91bnVzZWQgKi8KKwl1aW50MzJfdCAJcmVzMjsJCS8qIHVua25vd24vdW51c2VkICovCisJc3RydWN0IG15bG9fcGFydGl0aW9uIHBhcnRpdGlvbnNbTVlMT19NQVhfUEFSVElUSU9OU107Cit9OworCitzdHJ1Y3QgbXlsb19wYXJ0aXRpb25faGVhZGVyIHsKKwl1aW50MzJfdAlsZW47CQkvKiBsZW5ndGggb2YgdGhlIHBhcnRpdGlvbiBkYXRhICovCisJdWludDMyX3QJY3JjOwkJLyogQ1JDIHZhbHVlIG9mIHRoZSBwYXJ0aXRpb24gZGF0YSAqLworfTsKKworc3RydWN0IG15bG9fc3lzdGVtX3BhcmFtcyB7CisJdWludDMyX3QJbWFnaWM7CQkvKiBtdXN0IGJlIE1ZTE9fTUFHSUNfU1lTX1BBUkFNUyAqLworCXVpbnQzMl90CXJlczA7CisJdWludDMyX3QJcmVzMTsKKwl1aW50MzJfdAlteWxvX3ZlcjsKKwl1aW50MTZfdAl2aWQ7CQkvKiBWZW5kb3IgSUQgKi8KKwl1aW50MTZfdAlkaWQ7CQkvKiBEZXZpY2UgSUQgKi8KKwl1aW50MTZfdAlzdmlkOwkJLyogU3ViIFZlbmRvciBJRCAqLworCXVpbnQxNl90CXNkaWQ7CQkvKiBTdWIgRGV2aWNlIElEICovCisJdWludDMyX3QJcmV2OwkJLyogZGV2aWNlIHJldmlzaW9uICovCisJdWludDMyX3QJZndoaTsKKwl1aW50MzJfdAlmd2xvOworCXVpbnQzMl90CXRmdHBfYWRkcjsKKwl1aW50MzJfdAlwcm9nX3N0YXJ0OworCXVpbnQzMl90CWZsYXNoX3NpemU7CS8qIHNpemUgb2YgYm9vdCBGTEFTSCBpbiBieXRlcyAqLworCXVpbnQzMl90CWRyYW1fc2l6ZTsJLyogc2l6ZSBvZiBvbmJvYXJkIFJBTSBpbiBieXRlcyAqLworfTsKKworc3RydWN0IG15bG9fZXRoX2FkZHIgeworCXVpbnQ4X3QJbWFjWzZdOworCXVpbnQ4X3QJY3N1bVsyXTsKK307CisKKyNkZWZpbmUgTVlMT19FVEhBRERSX0NPVU5UCTgJLyogbWF4aW11bSBudW1iZXIgb2YgZXRoZXJuZXQgYWRkcmVzcworCQkJCQkgICBpbiB0aGUgYm9hcmQgcGFyYW1ldGVycyAqLworCitzdHJ1Y3QgbXlsb19ib2FyZF9wYXJhbXMgeworCXVpbnQzMl90CW1hZ2ljOwkvKiBtdXN0IGJlIE1ZTE9fTUFHSUNfQk9BUkRfUEFSQU1TICovCisJdWludDMyX3QJcmVzMDsKKwl1aW50MzJfdAlyZXMxOworCXVpbnQzMl90CXJlczI7CisJc3RydWN0IG15bG9fZXRoX2FkZHIgYWRkcltNWUxPX0VUSEFERFJfQ09VTlRdOworfTsKKworI2VuZGlmIC8qIF9NWUxPQURFUl9IXyovCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvYWRtNjk5Ni1ncGlvLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvYWRtNjk5Ni1ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVhZjliYgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9hZG02OTk2LWdwaW8uaApAQCAtMCwwICsxLDI5IEBACisvKgorICogQURNNjk5NiBHUElPIHBsYXRmb3JtIGRhdGEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSGF1a2UgTWVocnRlbnMgPGhhdWtlQGhhdWtlLW0uZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2MiBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqLworCisjaWZuZGVmIF9fUExBVEZPUk1fQURNNjk5Nl9HUElPX0gKKyNkZWZpbmUgX19QTEFURk9STV9BRE02OTk2X0dQSU9fSAorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKK2VudW0gYWRtNjk5Nl9tb2RlbCB7CisJQURNNjk5NkZDID0gMSwKKwlBRE02OTk2TSA9IDIsCisJQURNNjk5NkwgPSAzLAorfTsKKworc3RydWN0IGFkbTY5OTZfZ3Bpb19wbGF0Zm9ybV9kYXRhIHsKKwl1OCBlZWNzOworCXU4IGVlc2s7CisJdTggZWVkaTsKKwllbnVtIGFkbTY5OTZfbW9kZWwgbW9kZWw7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2luY2x1ZGUvbGludXgvcm91dGVyYm9vdC5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvaW5jbHVkZS9saW51eC9yb3V0ZXJib290LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NkYTg1OAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2luY2x1ZGUvbGludXgvcm91dGVyYm9vdC5oCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogIE1pa3JvdGlrJ3MgUm91dGVyQk9PVCBkZWZpbml0aW9ucworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBHYWJvciBKdWhvcyA8anVob3NnQG9wZW53cnQub3JnPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpZm5kZWYgX1JPVVRFUkJPT1RfSAorI2RlZmluZSBfUk9VVEVSQk9PVF9ICisKKyNkZWZpbmUgUkJfTUFDX1NJWkUJCTYKKworLyoKKyAqIE1hZ2ljIG51bWJlcnMKKyAqLworI2RlZmluZSBSQl9NQUdJQ19IQVJECTB4NjQ3MjYxNDggLyogIkhhcmQiICovCisjZGVmaW5lIFJCX01BR0lDX1NPRlQJMHg3NDY2NkY1MyAvKiAiU29mdCIgKi8KKyNkZWZpbmUgUkJfTUFHSUNfREFXTgkweDZFNzc2MTQ0IC8qICJEYXduIiAqLworCisjZGVmaW5lIFJCX0lEX1RFUk1JTkFUT1IJMAorCisvKgorICogSUQgdmFsdWVzIGZvciBIYXJkd2FyZSBzZXR0aW5ncworICovCisjZGVmaW5lIFJCX0lEX0hBUkRfMDEJCTEKKyNkZWZpbmUgUkJfSURfSEFSRF8wMgkJMgorI2RlZmluZSBSQl9JRF9GTEFTSF9JTkZPCTMKKyNkZWZpbmUgUkJfSURfTUFDX0FERFJFU1NfUEFDSwk0CisjZGVmaW5lIFJCX0lEX0JPQVJEX05BTUUJNQorI2RlZmluZSBSQl9JRF9CSU9TX1ZFUlNJT04JNgorI2RlZmluZSBSQl9JRF9IQVJEXzA3CQk3CisjZGVmaW5lIFJCX0lEX1NEUkFNX1RJTUlOR1MJOAorI2RlZmluZSBSQl9JRF9ERVZJQ0VfVElNSU5HUwk5CisjZGVmaW5lIFJCX0lEX1NPRlRXQVJFX0lECTEwCisjZGVmaW5lIFJCX0lEX1NFUklBTF9OVU1CRVIJMTEKKyNkZWZpbmUgUkJfSURfSEFSRF8xMgkJMTIKKyNkZWZpbmUgUkJfSURfTUVNT1JZX1NJWkUJMTMKKyNkZWZpbmUgUkJfSURfTUFDX0FERFJFU1NfQ09VTlQJMTQKKyNkZWZpbmUgUkJfSURfSFdfT1BUSU9OUwkyMQorI2RlZmluZSBSQl9JRF9XTEFOX0RBVEEJCTIyCisKKy8qCisgKiBJRCB2YWx1ZXMgZm9yIFNvZnR3YXJlIHNldHRpbmdzCisgKi8KKyNkZWZpbmUgUkJfSURfVUFSVF9TUEVFRAkxCisjZGVmaW5lIFJCX0lEX0JPT1RfREVMQVkJMgorI2RlZmluZSBSQl9JRF9CT09UX0RFVklDRQkzCisjZGVmaW5lIFJCX0lEX0JPT1RfS0VZCQk0CisjZGVmaW5lIFJCX0lEX0NQVV9NT0RFCQk1CisjZGVmaW5lIFJCX0lEX0ZXX1ZFUlNJT04JNgorI2RlZmluZSBSQl9JRF9TT0ZUXzA3CQk3CisjZGVmaW5lIFJCX0lEX1NPRlRfMDgJCTgKKyNkZWZpbmUgUkJfSURfQk9PVF9QUk9UT0NPTAk5CisjZGVmaW5lIFJCX0lEX1NPRlRfMTAJCTEwCisjZGVmaW5lIFJCX0lEX1NPRlRfMTEJCTExCisKKy8qCisgKiBVQVJUX1NQRUVEIHZhbHVlcworICovCisjZGVmaW5lIFJCX1VBUlRfU1BFRURfMTE1MjAwCTAKKyNkZWZpbmUgUkJfVUFSVF9TUEVFRF81NzYwMAkxCisjZGVmaW5lIFJCX1VBUlRfU1BFRURfMzg0MDAJMgorI2RlZmluZSBSQl9VQVJUX1NQRUVEXzE5MjAwCTMKKyNkZWZpbmUgUkJfVUFSVF9TUEVFRF85NjAwCTQKKyNkZWZpbmUgUkJfVUFSVF9TUEVFRF80ODAwCTUKKyNkZWZpbmUgUkJfVUFSVF9TUEVFRF8yNDAwCTYKKyNkZWZpbmUgUkJfVUFSVF9TUEVFRF8xMjAwCTcKKworLyoKKyAqIEJPT1RfREVMQVkgdmFsdWVzCisgKi8KKyNkZWZpbmUgUkJfQk9PVF9ERUxBWV8wU0VDCTAKKyNkZWZpbmUgUkJfQk9PVF9ERUxBWV8xU0VDCTEKKyNkZWZpbmUgUkJfQk9PVF9ERUxBWV8yU0VDCTIKKworLyoKKyAqIEJPT1RfREVWSUNFIHZhbHVlcworICovCisjZGVmaW5lIFJCX0JPT1RfREVWSUNFX0VUSEVSCTAKKyNkZWZpbmUgUkJfQk9PVF9ERVZJQ0VfTkFOREVUSAkxCisjZGVmaW5lIFJCX0JPT1RfREVWSUNFX0VUSE9OQ0UJMgorI2RlZmluZSBSQl9CT09UX0RFVklDRV9OQU5ET05MWQkzCisKKy8qCisgKiBCT09UX0tFWSB2YWx1ZXMKKyAqLworI2RlZmluZSBSQl9CT09UX0tFWV9BTlkJCTAKKyNkZWZpbmUgUkJfQk9PVF9LRVlfREVMCQkxCisKKy8qCisgKiBDUFVfTU9ERSB2YWx1ZXMKKyAqLworI2RlZmluZSBSQl9DUFVfTU9ERV9QT1dFUlNBVkUJMAorI2RlZmluZSBSQl9DUFVfTU9ERV9SRUdVTEFSCTEKKworLyoKKyAqIEJPT1RfUFJPVE9DT0wgdmFsdWVzCisgKi8KKyNkZWZpbmUgUkJfQk9PVF9QUk9UT0NPTF9CT09UUAkwCisjZGVmaW5lIFJCX0JPT1RfUFJPVE9DT0xfREhDUAkxCisKKyNlbmRpZiAvKiBfUk9VVEVSQk9PVF9IICovCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9pbmNsdWRlL2xpbnV4L3J0MngwMF9wbGF0Zm9ybS5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvaW5jbHVkZS9saW51eC9ydDJ4MDBfcGxhdGZvcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTAzNzdlCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvaW5jbHVkZS9saW51eC9ydDJ4MDBfcGxhdGZvcm0uaApAQCAtMCwwICsxLDIzIEBACisvKgorICogUGxhdGZvcm0gZGF0YSBkZWZpbml0aW9uIGZvciB0aGUgcnQyeDAwIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHYWJvciBKdWhvcyA8anVob3NnQG9wZW53cnQub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpZm5kZWYgX1JUMlgwMF9QTEFURk9STV9ICisjZGVmaW5lIF9SVDJYMDBfUExBVEZPUk1fSAorCitzdHJ1Y3QgcnQyeDAwX3BsYXRmb3JtX2RhdGEgeworCWNoYXIgKmVlcHJvbV9maWxlX25hbWU7CisJY29uc3QgdTggKm1hY19hZGRyZXNzOworCisJaW50IGRpc2FibGVfMmdoejsKKwlpbnQgZGlzYWJsZV81Z2h6OworfTsKKworI2VuZGlmIC8qIF9SVDJYMDBfUExBVEZPUk1fSCAqLwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvaW5jbHVkZS9saW51eC9ydGw4MzY2LmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9pbmNsdWRlL2xpbnV4L3J0bDgzNjYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2NlOGY1Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvaW5jbHVkZS9saW51eC9ydGw4MzY2LmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIFBsYXRmb3JtIGRhdGEgZGVmaW5pdGlvbiBmb3IgdGhlIFJlYWx0ZWsgUlRMODM2NlJCL1MgZXRoZXJuZXQgc3dpdGNoIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIEdhYm9yIEp1aG9zIDxqdWhvc2dAb3BlbndydC5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9SVEw4MzY2X0gKKyNkZWZpbmUgX1JUTDgzNjZfSAorCisjZGVmaW5lIFJUTDgzNjZfRFJJVkVSX05BTUUJInJ0bDgzNjYiCisjZGVmaW5lIFJUTDgzNjZTX0RSSVZFUl9OQU1FCSJydGw4MzY2cyIKKyNkZWZpbmUgUlRMODM2NlJCX0RSSVZFUl9OQU1FCSJydGw4MzY2cmIiCisKK3N0cnVjdCBydGw4MzY2X3NtaTsKKworZW51bSBydGw4MzY2X3R5cGUgeworCVJUTDgzNjZfVFlQRV9VTktOT1dOLAorCVJUTDgzNjZfVFlQRV9TLAorCVJUTDgzNjZfVFlQRV9SQiwKK307CisKK3N0cnVjdCBydGw4MzY2X2luaXR2YWwgeworCXVuc2lnbmVkCXJlZzsKKwl1MTYJCXZhbDsKK307CisKK3N0cnVjdCBydGw4MzY2X3BsYXRmb3JtX2RhdGEgeworCXVuc2lnbmVkCWdwaW9fc2RhOworCXVuc2lnbmVkCWdwaW9fc2NrOworCXZvaWQJCSgqaHdfcmVzZXQpKHN0cnVjdCBydGw4MzY2X3NtaSAqc21pLCBib29sIGFjdGl2ZSk7CisKKwl1bnNpZ25lZAludW1faW5pdHZhbHM7CisJc3RydWN0IHJ0bDgzNjZfaW5pdHZhbCAqaW5pdHZhbHM7Cit9OworCitlbnVtIHJ0bDgzNjZfdHlwZSBydGw4MzY2X3NtaV9kZXRlY3Qoc3RydWN0IHJ0bDgzNjZfcGxhdGZvcm1fZGF0YSAqcGRhdGEpOworCisjZW5kaWYgLyogIF9SVEw4MzY2X0ggKi8KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2luY2x1ZGUvbGludXgvcnRsODM2Ny5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvZmlsZXMvaW5jbHVkZS9saW51eC9ydGw4MzY3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQxNTAzOQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2luY2x1ZGUvbGludXgvcnRsODM2Ny5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBQbGF0Zm9ybSBkYXRhIGRlZmluaXRpb24gZm9yIHRoZSBSZWFsdGVrIFJUTDgzNjcgZXRoZXJuZXQgc3dpdGNoIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHYWJvciBKdWhvcyA8anVob3NnQG9wZW53cnQub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfUlRMODM2N19ICisjZGVmaW5lIF9SVEw4MzY3X0gKKworI2RlZmluZSBSVEw4MzY3X0RSSVZFUl9OQU1FCSJydGw4MzY3IgorI2RlZmluZSBSVEw4MzY3Ql9EUklWRVJfTkFNRQkicnRsODM2N2IiCisKK2VudW0gcnRsODM2N19wb3J0X3NwZWVkIHsKKwlSVEw4MzY3X1BPUlRfU1BFRURfMTAgPSAwLAorCVJUTDgzNjdfUE9SVF9TUEVFRF8xMDAsCisJUlRMODM2N19QT1JUX1NQRUVEXzEwMDAsCit9OworCitzdHJ1Y3QgcnRsODM2N19wb3J0X2FiaWxpdHkgeworCWludCBmb3JjZV9tb2RlOworCWludCBud2F5OworCWludCB0eHBhdXNlOworCWludCByeHBhdXNlOworCWludCBsaW5rOworCWludCBkdXBsZXg7CisJZW51bSBydGw4MzY3X3BvcnRfc3BlZWQgc3BlZWQ7Cit9OworCitlbnVtIHJ0bDgzNjdfZXh0aWZfbW9kZSB7CisJUlRMODM2N19FWFRJRl9NT0RFX0RJU0FCTEVEID0gMCwKKwlSVEw4MzY3X0VYVElGX01PREVfUkdNSUksCisJUlRMODM2N19FWFRJRl9NT0RFX01JSV9NQUMsCisJUlRMODM2N19FWFRJRl9NT0RFX01JSV9QSFksCisJUlRMODM2N19FWFRJRl9NT0RFX1RNSUlfTUFDLAorCVJUTDgzNjdfRVhUSUZfTU9ERV9UTUlJX1BIWSwKKwlSVEw4MzY3X0VYVElGX01PREVfR01JSSwKKwlSVEw4MzY3X0VYVElGX01PREVfUkdNSUlfMzNWLAorCVJUTDgzNjdCX0VYVElGX01PREVfUk1JSV9NQUMgPSA3LAorCVJUTDgzNjdCX0VYVElGX01PREVfUk1JSV9QSFksCisJUlRMODM2N0JfRVhUSUZfTU9ERV9SR01JSV8zM1YsCit9OworCitzdHJ1Y3QgcnRsODM2N19leHRpZl9jb25maWcgeworCXVuc2lnbmVkIGludCB0eGRlbGF5OworCXVuc2lnbmVkIGludCByeGRlbGF5OworCWVudW0gcnRsODM2N19leHRpZl9tb2RlIG1vZGU7CisJc3RydWN0IHJ0bDgzNjdfcG9ydF9hYmlsaXR5IGFiaWxpdHk7Cit9OworCitzdHJ1Y3QgcnRsODM2N19wbGF0Zm9ybV9kYXRhIHsKKwl1bnNpZ25lZCBncGlvX3NkYTsKKwl1bnNpZ25lZCBncGlvX3NjazsKKwl2b2lkICgqaHdfcmVzZXQpKGJvb2wgYWN0aXZlKTsKKworCXN0cnVjdCBydGw4MzY3X2V4dGlmX2NvbmZpZyAqZXh0aWYwX2NmZzsKKwlzdHJ1Y3QgcnRsODM2N19leHRpZl9jb25maWcgKmV4dGlmMV9jZmc7Cit9OworCisjZW5kaWYgLyogIF9SVEw4MzY3X0ggKi8KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2luY2x1ZGUvbGludXgvc3dpdGNoLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9pbmNsdWRlL2xpbnV4L3N3aXRjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNjIzODQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9pbmNsdWRlL2xpbnV4L3N3aXRjaC5oCkBAIC0wLDAgKzEsMTc5IEBACisvKgorICogc3dpdGNoLmg6IFN3aXRjaCBjb25maWd1cmF0aW9uIEFQSQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9MSU5VWF9TV0lUQ0hfSAorI2RlZmluZSBfTElOVVhfU1dJVENIX0gKKworI2luY2x1ZGUgPG5ldC9nZW5ldGxpbmsuaD4KKyNpbmNsdWRlIDx1YXBpL2xpbnV4L3N3aXRjaC5oPgorCitzdHJ1Y3Qgc3dpdGNoX2RldjsKK3N0cnVjdCBzd2l0Y2hfb3A7CitzdHJ1Y3Qgc3dpdGNoX3ZhbDsKK3N0cnVjdCBzd2l0Y2hfYXR0cjsKK3N0cnVjdCBzd2l0Y2hfYXR0cmxpc3Q7CitzdHJ1Y3Qgc3dpdGNoX2xlZF90cmlnZ2VyOworCitpbnQgcmVnaXN0ZXJfc3dpdGNoKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwordm9pZCB1bnJlZ2lzdGVyX3N3aXRjaChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2KTsKKworLyoqCisgKiBzdHJ1Y3Qgc3dpdGNoX2F0dHJsaXN0IC0gYXR0cmlidXRlIGxpc3QKKyAqCisgKiBAbl9hdHRyOiBudW1iZXIgb2YgYXR0cmlidXRlcworICogQGF0dHI6IHBvaW50ZXIgdG8gdGhlIGF0dHJpYnV0ZXMgYXJyYXkKKyAqLworc3RydWN0IHN3aXRjaF9hdHRybGlzdCB7CisJaW50IG5fYXR0cjsKKwljb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHI7Cit9OworCitlbnVtIHN3aXRjaF9wb3J0X3NwZWVkIHsKKwlTV0lUQ0hfUE9SVF9TUEVFRF9VTktOT1dOID0gMCwKKwlTV0lUQ0hfUE9SVF9TUEVFRF8xMCA9IDEwLAorCVNXSVRDSF9QT1JUX1NQRUVEXzEwMCA9IDEwMCwKKwlTV0lUQ0hfUE9SVF9TUEVFRF8xMDAwID0gMTAwMCwKK307CisKK3N0cnVjdCBzd2l0Y2hfcG9ydF9saW5rIHsKKwlib29sIGxpbms7CisJYm9vbCBkdXBsZXg7CisJYm9vbCBhbmVnOworCWJvb2wgdHhfZmxvdzsKKwlib29sIHJ4X2Zsb3c7CisJZW51bSBzd2l0Y2hfcG9ydF9zcGVlZCBzcGVlZDsKKwkvKiBpbiBldGh0b29sIGFkdl90IGZvcm1hdCAqLworCXUzMiBlZWU7Cit9OworCitzdHJ1Y3Qgc3dpdGNoX3BvcnRfc3RhdHMgeworCXVuc2lnbmVkIGxvbmcgbG9uZyB0eF9ieXRlczsKKwl1bnNpZ25lZCBsb25nIGxvbmcgcnhfYnl0ZXM7Cit9OworCisvKioKKyAqIHN0cnVjdCBzd2l0Y2hfZGV2X29wcyAtIHN3aXRjaCBkcml2ZXIgb3BlcmF0aW9ucworICoKKyAqIEBhdHRyX2dsb2JhbDogZ2xvYmFsIHN3aXRjaCBhdHRyaWJ1dGUgbGlzdAorICogQGF0dHJfcG9ydDogcG9ydCBhdHRyaWJ1dGUgbGlzdAorICogQGF0dHJfdmxhbjogdmxhbiBhdHRyaWJ1dGUgbGlzdAorICoKKyAqIENhbGxiYWNrczoKKyAqCisgKiBAZ2V0X3ZsYW5fcG9ydHM6IHJlYWQgdGhlIHBvcnQgbGlzdCBvZiBhIFZMQU4KKyAqIEBzZXRfdmxhbl9wb3J0czogc2V0IHRoZSBwb3J0IGxpc3Qgb2YgYSBWTEFOCisgKgorICogQGdldF9wb3J0X3B2aWQ6IGdldCB0aGUgcHJpbWFyeSBWTEFOIElEIG9mIGEgcG9ydAorICogQHNldF9wb3J0X3B2aWQ6IHNldCB0aGUgcHJpbWFyeSBWTEFOIElEIG9mIGEgcG9ydAorICoKKyAqIEBhcHBseV9jb25maWc6IGFwcGx5IGFsbCBjaGFuZ2VkIHNldHRpbmdzIHRvIHRoZSBzd2l0Y2gKKyAqIEByZXNldF9zd2l0Y2g6IHJlc2V0dGluZyB0aGUgc3dpdGNoCisgKi8KK3N0cnVjdCBzd2l0Y2hfZGV2X29wcyB7CisJc3RydWN0IHN3aXRjaF9hdHRybGlzdCBhdHRyX2dsb2JhbCwgYXR0cl9wb3J0LCBhdHRyX3ZsYW47CisKKwlpbnQgKCpnZXRfdmxhbl9wb3J0cykoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgc3RydWN0IHN3aXRjaF92YWwgKnZhbCk7CisJaW50ICgqc2V0X3ZsYW5fcG9ydHMpKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpOworCisJaW50ICgqZ2V0X3BvcnRfcHZpZCkoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgaW50IHBvcnQsIGludCAqdmFsKTsKKwlpbnQgKCpzZXRfcG9ydF9wdmlkKShzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBpbnQgcG9ydCwgaW50IHZhbCk7CisKKwlpbnQgKCphcHBseV9jb25maWcpKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYpOworCWludCAoKnJlc2V0X3N3aXRjaCkoc3RydWN0IHN3aXRjaF9kZXYgKmRldik7CisKKwlpbnQgKCpnZXRfcG9ydF9saW5rKShzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBpbnQgcG9ydCwKKwkJCSAgICAgc3RydWN0IHN3aXRjaF9wb3J0X2xpbmsgKmxpbmspOworCWludCAoKnNldF9wb3J0X2xpbmspKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsIGludCBwb3J0LAorCQkJICAgICBzdHJ1Y3Qgc3dpdGNoX3BvcnRfbGluayAqbGluayk7CisJaW50ICgqZ2V0X3BvcnRfc3RhdHMpKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsIGludCBwb3J0LAorCQkJICAgICAgc3RydWN0IHN3aXRjaF9wb3J0X3N0YXRzICpzdGF0cyk7CisKKwlpbnQgKCpwaHlfcmVhZDE2KShzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBpbnQgYWRkciwgdTggcmVnLCB1MTYgKnZhbHVlKTsKKwlpbnQgKCpwaHlfd3JpdGUxNikoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgaW50IGFkZHIsIHU4IHJlZywgdTE2IHZhbHVlKTsKK307CisKK3N0cnVjdCBzd2l0Y2hfZGV2IHsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGU7CisJY29uc3Qgc3RydWN0IHN3aXRjaF9kZXZfb3BzICpvcHM7CisJLyogd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGZpbGxlZCAqLworCWNoYXIgZGV2bmFtZVtJRk5BTVNJWl07CisKKwljb25zdCBjaGFyICpuYW1lOworCS8qIE5COiBlaXRoZXIgYWxpYXMgb3IgbmV0ZGV2IG11c3QgYmUgc2V0ICovCisJY29uc3QgY2hhciAqYWxpYXM7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKworCXVuc2lnbmVkIGludCBwb3J0czsKKwl1bnNpZ25lZCBpbnQgdmxhbnM7CisJdW5zaWduZWQgaW50IGNwdV9wb3J0OworCisJLyogdGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIGludGVybmFsIGZvciBzd2NvbmZpZyAqLworCXVuc2lnbmVkIGludCBpZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGRldl9saXN0OworCXVuc2lnbmVkIGxvbmcgZGVmX2dsb2JhbCwgZGVmX3BvcnQsIGRlZl92bGFuOworCisJc3RydWN0IG11dGV4IHN3X211dGV4OworCXN0cnVjdCBzd2l0Y2hfcG9ydCAqcG9ydGJ1ZjsKKwlzdHJ1Y3Qgc3dpdGNoX3BvcnRtYXAgKnBvcnRtYXA7CisJc3RydWN0IHN3aXRjaF9wb3J0X2xpbmsgbGlua2J1ZjsKKworCWNoYXIgYnVmWzEyOF07CisKKyNpZmRlZiBDT05GSUdfU1dDT05GSUdfTEVEUworCXN0cnVjdCBzd2l0Y2hfbGVkX3RyaWdnZXIgKmxlZF90cmlnZ2VyOworI2VuZGlmCit9OworCitzdHJ1Y3Qgc3dpdGNoX3BvcnQgeworCXUzMiBpZDsKKwl1MzIgZmxhZ3M7Cit9OworCitzdHJ1Y3Qgc3dpdGNoX3BvcnRtYXAgeworCXUzMiB2aXJ0OworCWNvbnN0IGNoYXIgKnM7Cit9OworCitzdHJ1Y3Qgc3dpdGNoX3ZhbCB7CisJY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyOworCXVuc2lnbmVkIGludCBwb3J0X3ZsYW47CisJdW5zaWduZWQgaW50IGxlbjsKKwl1bmlvbiB7CisJCWNvbnN0IGNoYXIgKnM7CisJCXUzMiBpOworCQlzdHJ1Y3Qgc3dpdGNoX3BvcnQgKnBvcnRzOworCQlzdHJ1Y3Qgc3dpdGNoX3BvcnRfbGluayAqbGluazsKKwl9IHZhbHVlOworfTsKKworc3RydWN0IHN3aXRjaF9hdHRyIHsKKwlpbnQgZGlzYWJsZWQ7CisJaW50IHR5cGU7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICpkZXNjcmlwdGlvbjsKKworCWludCAoKnNldCkoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLCBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKTsKKwlpbnQgKCpnZXQpKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwgc3RydWN0IHN3aXRjaF92YWwgKnZhbCk7CisKKwkvKiBmb3IgZHJpdmVyIGludGVybmFsIHVzZSAqLworCWludCBpZDsKKwlpbnQgb2ZzOworCWludCBtYXg7Cit9OworCitpbnQgc3dpdGNoX2dlbmVyaWNfc2V0X2xpbmsoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgaW50IHBvcnQsCisJCQkgICAgc3RydWN0IHN3aXRjaF9wb3J0X2xpbmsgKmxpbmspOworCisjZW5kaWYgLyogX0xJTlVYX1NXSVRDSF9IICovCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9pbmNsdWRlL3VhcGkvbGludXgvc3dpdGNoLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9maWxlcy9pbmNsdWRlL3VhcGkvbGludXgvc3dpdGNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE0NDk2NQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2ZpbGVzL2luY2x1ZGUvdWFwaS9saW51eC9zd2l0Y2guaApAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIHN3aXRjaC5oOiBTd2l0Y2ggY29uZmlndXJhdGlvbiBBUEkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9VQVBJX0xJTlVYX1NXSVRDSF9ICisjZGVmaW5lIF9VQVBJX0xJTlVYX1NXSVRDSF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9nZW5ldGxpbmsuaD4KKyNpZm5kZWYgX19LRVJORUxfXworI2luY2x1ZGUgPG5ldGxpbmsvbmV0bGluay5oPgorI2luY2x1ZGUgPG5ldGxpbmsvZ2VubC9nZW5sLmg+CisjaW5jbHVkZSA8bmV0bGluay9nZW5sL2N0cmwuaD4KKyNlbmRpZgorCisvKiBtYWluIGF0dHJpYnV0ZXMgKi8KK2VudW0geworCVNXSVRDSF9BVFRSX1VOU1BFQywKKwkvKiBnbG9iYWwgKi8KKwlTV0lUQ0hfQVRUUl9UWVBFLAorCS8qIGRldmljZSAqLworCVNXSVRDSF9BVFRSX0lELAorCVNXSVRDSF9BVFRSX0RFVl9OQU1FLAorCVNXSVRDSF9BVFRSX0FMSUFTLAorCVNXSVRDSF9BVFRSX05BTUUsCisJU1dJVENIX0FUVFJfVkxBTlMsCisJU1dJVENIX0FUVFJfUE9SVFMsCisJU1dJVENIX0FUVFJfUE9SVE1BUCwKKwlTV0lUQ0hfQVRUUl9DUFVfUE9SVCwKKwkvKiBhdHRyaWJ1dGVzICovCisJU1dJVENIX0FUVFJfT1BfSUQsCisJU1dJVENIX0FUVFJfT1BfVFlQRSwKKwlTV0lUQ0hfQVRUUl9PUF9OQU1FLAorCVNXSVRDSF9BVFRSX09QX1BPUlQsCisJU1dJVENIX0FUVFJfT1BfVkxBTiwKKwlTV0lUQ0hfQVRUUl9PUF9WQUxVRV9JTlQsCisJU1dJVENIX0FUVFJfT1BfVkFMVUVfU1RSLAorCVNXSVRDSF9BVFRSX09QX1ZBTFVFX1BPUlRTLAorCVNXSVRDSF9BVFRSX09QX1ZBTFVFX0xJTkssCisJU1dJVENIX0FUVFJfT1BfREVTQ1JJUFRJT04sCisJLyogcG9ydCBsaXN0cyAqLworCVNXSVRDSF9BVFRSX1BPUlQsCisJU1dJVENIX0FUVFJfTUFYCit9OworCitlbnVtIHsKKwkvKiBwb3J0IG1hcCAqLworCVNXSVRDSF9QT1JUTUFQX1BPUlRTLAorCVNXSVRDSF9QT1JUTUFQX1NFR01FTlQsCisJU1dJVENIX1BPUlRNQVBfVklSVCwKKwlTV0lUQ0hfUE9SVE1BUF9NQVgKK307CisKKy8qIGNvbW1hbmRzICovCitlbnVtIHsKKwlTV0lUQ0hfQ01EX1VOU1BFQywKKwlTV0lUQ0hfQ01EX0dFVF9TV0lUQ0gsCisJU1dJVENIX0NNRF9ORVdfQVRUUiwKKwlTV0lUQ0hfQ01EX0xJU1RfR0xPQkFMLAorCVNXSVRDSF9DTURfR0VUX0dMT0JBTCwKKwlTV0lUQ0hfQ01EX1NFVF9HTE9CQUwsCisJU1dJVENIX0NNRF9MSVNUX1BPUlQsCisJU1dJVENIX0NNRF9HRVRfUE9SVCwKKwlTV0lUQ0hfQ01EX1NFVF9QT1JULAorCVNXSVRDSF9DTURfTElTVF9WTEFOLAorCVNXSVRDSF9DTURfR0VUX1ZMQU4sCisJU1dJVENIX0NNRF9TRVRfVkxBTgorfTsKKworLyogZGF0YSB0eXBlcyAqLworZW51bSBzd2l0Y2hfdmFsX3R5cGUgeworCVNXSVRDSF9UWVBFX1VOU1BFQywKKwlTV0lUQ0hfVFlQRV9JTlQsCisJU1dJVENIX1RZUEVfU1RSSU5HLAorCVNXSVRDSF9UWVBFX1BPUlRTLAorCVNXSVRDSF9UWVBFX0xJTkssCisJU1dJVENIX1RZUEVfTk9WQUwsCit9OworCisvKiBwb3J0IG5lc3RlZCBhdHRyaWJ1dGVzICovCitlbnVtIHsKKwlTV0lUQ0hfUE9SVF9VTlNQRUMsCisJU1dJVENIX1BPUlRfSUQsCisJU1dJVENIX1BPUlRfRkxBR19UQUdHRUQsCisJU1dJVENIX1BPUlRfQVRUUl9NQVgKK307CisKKy8qIGxpbmsgbmVzdGVkIGF0dHJpYnV0ZXMgKi8KK2VudW0geworCVNXSVRDSF9MSU5LX1VOU1BFQywKKwlTV0lUQ0hfTElOS19GTEFHX0xJTkssCisJU1dJVENIX0xJTktfRkxBR19EVVBMRVgsCisJU1dJVENIX0xJTktfRkxBR19BTkVHLAorCVNXSVRDSF9MSU5LX0ZMQUdfVFhfRkxPVywKKwlTV0lUQ0hfTElOS19GTEFHX1JYX0ZMT1csCisJU1dJVENIX0xJTktfU1BFRUQsCisJU1dJVENIX0xJTktfRkxBR19FRUVfMTAwQkFTRVQsCisJU1dJVENIX0xJTktfRkxBR19FRUVfMTAwMEJBU0VULAorCVNXSVRDSF9MSU5LX0FUVFJfTUFYLAorfTsKKworI2RlZmluZSBTV0lUQ0hfQVRUUl9ERUZBVUxUU19PRkZTRVQJMHgxMDAwCisKKworI2VuZGlmIC8qIF9VQVBJX0xJTlVYX1NXSVRDSF9IICovCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC8yMDQtbW9kdWxlX3N0cmlwLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvaGFjay01LjQvMjA0LW1vZHVsZV9zdHJpcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjdiZWFlCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvaGFjay01LjQvMjA0LW1vZHVsZV9zdHJpcC5wYXRjaApAQCAtMCwwICsxLDIwNCBAQAorRnJvbSBhNzc5YTQ4MmZiOWI5ZjhmY2RmOGIyNTE5Yzc4OWI0YjliYjVkZDA1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorRGF0ZTogRnJpLCA3IEp1bCAyMDE3IDE2OjU2OjQ4ICswMjAwCitTdWJqZWN0OiBidWlsZDogYWRkIGEgaGFjayBmb3IgcmVtb3Zpbmcgbm9uLWVzc2VudGlhbCBtb2R1bGUgaW5mbworCitTaWduZWQtb2ZmLWJ5OiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CistLS0KKyBpbmNsdWRlL2xpbnV4L21vZHVsZS5oICAgICAgfCAxMyArKysrKysrKy0tLS0tCisgaW5jbHVkZS9saW51eC9tb2R1bGVwYXJhbS5oIHwgMTUgKysrKysrKysrKysrLS0tCisgaW5pdC9LY29uZmlnICAgICAgICAgICAgICAgIHwgIDcgKysrKysrKworIGtlcm5lbC9tb2R1bGUuYyAgICAgICAgICAgICB8ICA1ICsrKystCisgc2NyaXB0cy9tb2QvbW9kcG9zdC5jICAgICAgIHwgMTIgKysrKysrKysrKysrCisgNSBmaWxlcyBjaGFuZ2VkLCA0MyBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQorCistLS0gYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCisrKysgYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCitAQCAtMTU3LDYgKzE1Nyw3IEBAIGV4dGVybiB2b2lkIGNsZWFudXBfbW9kdWxlKHZvaWQpOworIAorIC8qIEdlbmVyaWMgaW5mbyBvZiBmb3JtIHRhZyA9ICJpbmZvIiAqLworICNkZWZpbmUgTU9EVUxFX0lORk8odGFnLCBpbmZvKSBfX01PRFVMRV9JTkZPKHRhZywgdGFnLCBpbmZvKQorKyNkZWZpbmUgTU9EVUxFX0lORk9fU1RSSVAodGFnLCBpbmZvKSBfX01PRFVMRV9JTkZPX1NUUklQKHRhZywgdGFnLCBpbmZvKQorIAorIC8qIEZvciB1c2Vyc3BhY2U6IHlvdSBjYW4gYWxzbyBjYWxsIG1lLi4uICovCisgI2RlZmluZSBNT0RVTEVfQUxJQVMoX2FsaWFzKSBNT0RVTEVfSU5GTyhhbGlhcywgX2FsaWFzKQorQEAgLTIxNiwxMiArMjE3LDEyIEBAIGV4dGVybiB2b2lkIGNsZWFudXBfbW9kdWxlKHZvaWQpOworICAqIEF1dGhvcihzKSwgdXNlICJOYW1lIDxlbWFpbD4iIG9yIGp1c3QgIk5hbWUiLCBmb3IgbXVsdGlwbGUKKyAgKiBhdXRob3JzIHVzZSBtdWx0aXBsZSBNT0RVTEVfQVVUSE9SKCkgc3RhdGVtZW50cy9saW5lcy4KKyAgKi8KKy0jZGVmaW5lIE1PRFVMRV9BVVRIT1IoX2F1dGhvcikgTU9EVUxFX0lORk8oYXV0aG9yLCBfYXV0aG9yKQorKyNkZWZpbmUgTU9EVUxFX0FVVEhPUihfYXV0aG9yKSBNT0RVTEVfSU5GT19TVFJJUChhdXRob3IsIF9hdXRob3IpCisgCisgLyogV2hhdCB5b3VyIG1vZHVsZSBkb2VzLiAqLworLSNkZWZpbmUgTU9EVUxFX0RFU0NSSVBUSU9OKF9kZXNjcmlwdGlvbikgTU9EVUxFX0lORk8oZGVzY3JpcHRpb24sIF9kZXNjcmlwdGlvbikKKysjZGVmaW5lIE1PRFVMRV9ERVNDUklQVElPTihfZGVzY3JpcHRpb24pIE1PRFVMRV9JTkZPX1NUUklQKGRlc2NyaXB0aW9uLCBfZGVzY3JpcHRpb24pCisgCistI2lmZGVmIE1PRFVMRQorKyNpZiBkZWZpbmVkKE1PRFVMRSkgJiYgIWRlZmluZWQoQ09ORklHX01PRFVMRV9TVFJJUFBFRCkKKyAvKiBDcmVhdGVzIGFuIGFsaWFzIHNvIGZpbGUyYWxpYXMuYyBjYW4gZmluZCBkZXZpY2UgdGFibGUuICovCisgI2RlZmluZSBNT0RVTEVfREVWSUNFX1RBQkxFKHR5cGUsIG5hbWUpCQkJCQlcCisgZXh0ZXJuIHR5cGVvZihuYW1lKSBfX21vZF8jI3R5cGUjI19fIyNuYW1lIyNfZGV2aWNlX3RhYmxlCQlcCitAQCAtMjQ4LDcgKzI0OSw5IEBAIGV4dGVybiB0eXBlb2YobmFtZSkgX19tb2RfIyN0eXBlIyNfXyMjbmEKKyAgKi8KKyAKKyAjaWYgZGVmaW5lZChNT0RVTEUpIHx8ICFkZWZpbmVkKENPTkZJR19TWVNGUykKKy0jZGVmaW5lIE1PRFVMRV9WRVJTSU9OKF92ZXJzaW9uKSBNT0RVTEVfSU5GTyh2ZXJzaW9uLCBfdmVyc2lvbikKKysjZGVmaW5lIE1PRFVMRV9WRVJTSU9OKF92ZXJzaW9uKSBNT0RVTEVfSU5GT19TVFJJUCh2ZXJzaW9uLCBfdmVyc2lvbikKKysjZWxpZiBkZWZpbmVkKENPTkZJR19NT0RVTEVfU1RSSVBQRUQpCisrI2RlZmluZSBNT0RVTEVfVkVSU0lPTihfdmVyc2lvbikgX19NT0RVTEVfSU5GT19ESVNBQkxFRCh2ZXJzaW9uKQorICNlbHNlCisgI2RlZmluZSBNT0RVTEVfVkVSU0lPTihfdmVyc2lvbikJCQkJCVwKKyAJTU9EVUxFX0lORk8odmVyc2lvbiwgX3ZlcnNpb24pOwkJCQkJXAorQEAgLTI3MSw3ICsyNzQsNyBAQCBleHRlcm4gdHlwZW9mKG5hbWUpIF9fbW9kXyMjdHlwZSMjX18jI25hCisgLyogT3B0aW9uYWwgZmlybXdhcmUgZmlsZSAob3IgZmlsZXMpIG5lZWRlZCBieSB0aGUgbW9kdWxlCisgICogZm9ybWF0IGlzIHNpbXBseSBmaXJtd2FyZSBmaWxlIG5hbWUuICBNdWx0aXBsZSBmaXJtd2FyZQorICAqIGZpbGVzIHJlcXVpcmUgbXVsdGlwbGUgTU9EVUxFX0ZJUk1XQVJFKCkgc3BlY2lmaWVycyAqLworLSNkZWZpbmUgTU9EVUxFX0ZJUk1XQVJFKF9maXJtd2FyZSkgTU9EVUxFX0lORk8oZmlybXdhcmUsIF9maXJtd2FyZSkKKysjZGVmaW5lIE1PRFVMRV9GSVJNV0FSRShfZmlybXdhcmUpIE1PRFVMRV9JTkZPX1NUUklQKGZpcm13YXJlLCBfZmlybXdhcmUpCisgCisgI2RlZmluZSBNT0RVTEVfSU1QT1JUX05TKG5zKSBNT0RVTEVfSU5GTyhpbXBvcnRfbnMsICNucykKKyAKKy0tLSBhL2luY2x1ZGUvbGludXgvbW9kdWxlcGFyYW0uaAorKysrIGIvaW5jbHVkZS9saW51eC9tb2R1bGVwYXJhbS5oCitAQCAtMjAsMTAgKzIwLDI0IEBACisgLyogQ2hvc2VuIHNvIHRoYXQgc3RydWN0cyB3aXRoIGFuIHVuc2lnbmVkIGxvbmcgbGluZSB1cC4gKi8KKyAjZGVmaW5lIE1BWF9QQVJBTV9QUkVGSVhfTEVOICg2NCAtIHNpemVvZih1bnNpZ25lZCBsb25nKSkKKyAKKysvKiBUaGlzIHN0cnVjdCBpcyBoZXJlIGZvciBzeW50YWN0aWMgY29oZXJlbmN5LCBpdCBpcyBub3QgdXNlZCAqLworKyNkZWZpbmUgX19NT0RVTEVfSU5GT19ESVNBQkxFRChuYW1lKQkJCQkJICBcCisrICBzdHJ1Y3QgX19VTklRVUVfSUQobmFtZSkge30KKysKKysjaWZkZWYgQ09ORklHX01PRFVMRV9TVFJJUFBFRAorKyNkZWZpbmUgX19NT0RVTEVfSU5GT19TVFJJUCh0YWcsIG5hbWUsIGluZm8pIF9fTU9EVUxFX0lORk9fRElTQUJMRUQobmFtZSkKKysjZWxzZQorKyNkZWZpbmUgX19NT0RVTEVfSU5GT19TVFJJUCh0YWcsIG5hbWUsIGluZm8pIF9fTU9EVUxFX0lORk8odGFnLCBuYW1lLCBpbmZvKQorKyNlbmRpZgorKworKyNpZmRlZiBNT0RVTEUKKyAjZGVmaW5lIF9fTU9EVUxFX0lORk8odGFnLCBuYW1lLCBpbmZvKQkJCQkJICBcCisgc3RhdGljIGNvbnN0IGNoYXIgX19VTklRVUVfSUQobmFtZSlbXQkJCQkJICBcCisgICBfX3VzZWQgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLm1vZGluZm8iKSwgdW51c2VkLCBhbGlnbmVkKDEpKSkJICBcCisgICA9IF9fTU9EVUxFX0lORk9fUFJFRklYIF9fc3RyaW5naWZ5KHRhZykgIj0iIGluZm8KKysjZWxzZQorKyNkZWZpbmUgX19NT0RVTEVfSU5GTyh0YWcsIG5hbWUsIGluZm8pIF9fTU9EVUxFX0lORk9fRElTQUJMRUQobmFtZSkKKysjZW5kaWYKKyAKKyAjZGVmaW5lIF9fTU9EVUxFX1BBUk1fVFlQRShuYW1lLCBfdHlwZSkJCQkJCSAgXAorICAgX19NT0RVTEVfSU5GTyhwYXJtdHlwZSwgbmFtZSMjdHlwZSwgI25hbWUgIjoiIF90eXBlKQorQEAgLTMxLDcgKzQ1LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgX19VTklRVUVfSUQobmFtZSlbXQorIC8qIE9uZSBmb3IgZWFjaCBwYXJhbWV0ZXIsIGRlc2NyaWJpbmcgaG93IHRvIHVzZSBpdC4gIFNvbWUgZmlsZXMgZG8KKyAgICBtdWx0aXBsZSBvZiB0aGVzZSBwZXIgbGluZSwgc28gY2FuJ3QganVzdCB1c2UgTU9EVUxFX0lORk8uICovCisgI2RlZmluZSBNT0RVTEVfUEFSTV9ERVNDKF9wYXJtLCBkZXNjKSBcCistCV9fTU9EVUxFX0lORk8ocGFybSwgX3Bhcm0sICNfcGFybSAiOiIgZGVzYykKKysJX19NT0RVTEVfSU5GT19TVFJJUChwYXJtLCBfcGFybSwgI19wYXJtICI6IiBkZXNjKQorIAorIHN0cnVjdCBrZXJuZWxfcGFyYW07CisgCistLS0gYS9pbml0L0tjb25maWcKKysrKyBiL2luaXQvS2NvbmZpZworQEAgLTIyMDgsNiArMjIwOCwxMyBAQCBjb25maWcgVFJJTV9VTlVTRURfS1NZTVMKKyAKKyAJICBJZiB1bnN1cmUsIG9yIGlmIHlvdSBuZWVkIHRvIGJ1aWxkIG91dC1vZi10cmVlIG1vZHVsZXMsIHNheSBOLgorIAorK2NvbmZpZyBNT0RVTEVfU1RSSVBQRUQKKysJYm9vbCAiUmVkdWNlIG1vZHVsZSBzaXplIgorKwlkZXBlbmRzIG9uIE1PRFVMRVMKKysJaGVscAorKwkgIFJlbW92ZSBtb2R1bGUgcGFyYW1ldGVyIGRlc2NyaXB0aW9ucywgYXV0aG9yIGluZm8sIHZlcnNpb24sIGFsaWFzZXMsCisrCSAgZGV2aWNlIHRhYmxlcywgZXRjLgorKworIGVuZGlmICMgTU9EVUxFUworIAorIGNvbmZpZyBNT0RVTEVTX1RSRUVfTE9PS1VQCistLS0gYS9rZXJuZWwvbW9kdWxlLmMKKysrKyBiL2tlcm5lbC9tb2R1bGUuYworQEAgLTMyNTYsOSArMzI1NiwxMSBAQCBzdGF0aWMgaW50IHNldHVwX2xvYWRfaW5mbyhzdHJ1Y3QgbG9hZF9pCisgCisgc3RhdGljIGludCBjaGVja19tb2RpbmZvKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKQorIHsKKy0JY29uc3QgY2hhciAqbW9kbWFnaWMgPSBnZXRfbW9kaW5mbyhpbmZvLCAidmVybWFnaWMiKTsKKyAJaW50IGVycjsKKyAKKysjaWZuZGVmIENPTkZJR19NT0RVTEVfU1RSSVBQRUQKKysJY29uc3QgY2hhciAqbW9kbWFnaWMgPSBnZXRfbW9kaW5mbyhpbmZvLCAidmVybWFnaWMiKTsKKysKKyAJaWYgKGZsYWdzICYgTU9EVUxFX0lOSVRfSUdOT1JFX1ZFUk1BR0lDKQorIAkJbW9kbWFnaWMgPSBOVUxMOworIAorQEAgLTMyNzksNiArMzI4MSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfbW9kaW5mbyhzdHJ1Y3QgbW9kdWxlICoKKyAJCQkJbW9kLT5uYW1lKTsKKyAJCWFkZF90YWludF9tb2R1bGUobW9kLCBUQUlOVF9PT1RfTU9EVUxFLCBMT0NLREVQX1NUSUxMX09LKTsKKyAJfQorKyNlbmRpZgorIAorIAljaGVja19tb2RpbmZvX3JldHBvbGluZShtb2QsIGluZm8pOworIAorLS0tIGEvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCisrKysgYi9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKK0BAIC0yMDU2LDcgKzIwNTYsOSBAQCBzdGF0aWMgdm9pZCByZWFkX3N5bWJvbHMoY29uc3QgY2hhciAqbW9kCisgCQlzeW1uYW1lID0gcmVtb3ZlX2RvdChpbmZvLnN0cnRhYiArIHN5bS0+c3RfbmFtZSk7CisgCisgCQloYW5kbGVfbW9kdmVyc2lvbnMobW9kLCAmaW5mbywgc3ltLCBzeW1uYW1lKTsKKysjaWZuZGVmIENPTkZJR19NT0RVTEVfU1RSSVBQRUQKKyAJCWhhbmRsZV9tb2RkZXZ0YWJsZShtb2QsICZpbmZvLCBzeW0sIHN5bW5hbWUpOworKyNlbmRpZgorIAl9CisgCisgCS8qIEFwcGx5IHN5bWJvbCBuYW1lc3BhY2VzIGZyb20gX19rc3RydGFibnNfPHN5bWJvbD4gZW50cmllcy4gKi8KK0BAIC0yMjcwLDggKzIyNzIsMTAgQEAgc3RhdGljIHZvaWQgYWRkX2hlYWRlcihzdHJ1Y3QgYnVmZmVyICpiLAorIAlidWZfcHJpbnRmKGIsICJcbiIpOworIAlidWZfcHJpbnRmKGIsICJCVUlMRF9TQUxUO1xuIik7CisgCWJ1Zl9wcmludGYoYiwgIlxuIik7CisrI2lmbmRlZiBDT05GSUdfTU9EVUxFX1NUUklQUEVECisgCWJ1Zl9wcmludGYoYiwgIk1PRFVMRV9JTkZPKHZlcm1hZ2ljLCBWRVJNQUdJQ19TVFJJTkcpO1xuIik7CisgCWJ1Zl9wcmludGYoYiwgIk1PRFVMRV9JTkZPKG5hbWUsIEtCVUlMRF9NT0ROQU1FKTtcbiIpOworKyNlbmRpZgorIAlidWZfcHJpbnRmKGIsICJcbiIpOworIAlidWZfcHJpbnRmKGIsICJfX3Zpc2libGUgc3RydWN0IG1vZHVsZSBfX3RoaXNfbW9kdWxlXG4iKTsKKyAJYnVmX3ByaW50ZihiLCAiX19zZWN0aW9uKC5nbnUubGlua29uY2UudGhpc19tb2R1bGUpID0ge1xuIik7CitAQCAtMjI4OCw4ICsyMjkyLDEwIEBAIHN0YXRpYyB2b2lkIGFkZF9oZWFkZXIoc3RydWN0IGJ1ZmZlciAqYiwKKyAKKyBzdGF0aWMgdm9pZCBhZGRfaW50cmVlX2ZsYWcoc3RydWN0IGJ1ZmZlciAqYiwgaW50IGlzX2ludHJlZSkKKyB7CisrI2lmbmRlZiBDT05GSUdfTU9EVUxFX1NUUklQUEVECisgCWlmIChpc19pbnRyZWUpCisgCQlidWZfcHJpbnRmKGIsICJcbk1PRFVMRV9JTkZPKGludHJlZSwgXCJZXCIpO1xuIik7CisrI2VuZGlmCisgfQorIAorIC8qIENhbm5vdCBjaGVjayBmb3IgYXNzZW1ibGVyICovCitAQCAtMjMwMiw4ICsyMzA4LDEwIEBAIHN0YXRpYyB2b2lkIGFkZF9yZXRwb2xpbmUoc3RydWN0IGJ1ZmZlcgorIAorIHN0YXRpYyB2b2lkIGFkZF9zdGFnaW5nX2ZsYWcoc3RydWN0IGJ1ZmZlciAqYiwgY29uc3QgY2hhciAqbmFtZSkKKyB7CisrI2lmbmRlZiBDT05GSUdfTU9EVUxFX1NUUklQUEVECisgCWlmIChzdHJzdGFydHMobmFtZSwgImRyaXZlcnMvc3RhZ2luZyIpKQorIAkJYnVmX3ByaW50ZihiLCAiXG5NT0RVTEVfSU5GTyhzdGFnaW5nLCBcIllcIik7XG4iKTsKKysjZW5kaWYKKyB9CisgCisgLyoqCitAQCAtMjM4NywxMSArMjM5NSwxMyBAQCBzdGF0aWMgdm9pZCBhZGRfZGVwZW5kcyhzdHJ1Y3QgYnVmZmVyICpiCisgCisgc3RhdGljIHZvaWQgYWRkX3NyY3ZlcnNpb24oc3RydWN0IGJ1ZmZlciAqYiwgc3RydWN0IG1vZHVsZSAqbW9kKQorIHsKKysjaWZuZGVmIENPTkZJR19NT0RVTEVfU1RSSVBQRUQKKyAJaWYgKG1vZC0+c3JjdmVyc2lvblswXSkgeworIAkJYnVmX3ByaW50ZihiLCAiXG4iKTsKKyAJCWJ1Zl9wcmludGYoYiwgIk1PRFVMRV9JTkZPKHNyY3ZlcnNpb24sIFwiJXNcIik7XG4iLAorIAkJCSAgIG1vZC0+c3JjdmVyc2lvbik7CisgCX0KKysjZW5kaWYKKyB9CisgCisgc3RhdGljIHZvaWQgd3JpdGVfaWZfY2hhbmdlZChzdHJ1Y3QgYnVmZmVyICpiLCBjb25zdCBjaGFyICpmbmFtZSkKK0BAIC0yNjYxLDcgKzI2NzEsOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQlhZGRfc3RhZ2luZ19mbGFnKCZidWYsIG1vZC0+bmFtZSk7CisgCQllcnIgfD0gYWRkX3ZlcnNpb25zKCZidWYsIG1vZCk7CisgCQlhZGRfZGVwZW5kcygmYnVmLCBtb2QpOworKyNpZm5kZWYgQ09ORklHX01PRFVMRV9TVFJJUFBFRAorIAkJYWRkX21vZGRldnRhYmxlKCZidWYsIG1vZCk7CisrI2VuZGlmCisgCQlhZGRfc3JjdmVyc2lvbigmYnVmLCBtb2QpOworIAorIAkJc3ByaW50ZihmbmFtZSwgIiVzLm1vZC5jIiwgbW9kLT5uYW1lKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzIxMC1kYXJ3aW5fc2NyaXB0c19pbmNsdWRlLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvaGFjay01LjQvMjEwLWRhcndpbl9zY3JpcHRzX2luY2x1ZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU2YWRjMAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzIxMC1kYXJ3aW5fc2NyaXB0c19pbmNsdWRlLnBhdGNoCkBAIC0wLDAgKzEsMzA1MyBAQAorRnJvbSBkYjdjMzBkY2Q5YTAzOTFiZjEzYjYyYzlmOTFlMTQ0ZDc2MmVmNDNhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmxvcmlhbiBGYWluZWxsaSA8Zi5mYWluZWxsaUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDcgSnVsIDIwMTcgMTc6MDA6NDkgKzAyMDAKK1N1YmplY3Q6IEFkZCBhbiBPU1ggc3BlY2lmaWMgcGF0Y2ggdG8gbWFrZSB0aGUga2VybmVsIGJlIGNvbXBpbGVkCisKK2xlZGUtY29tbWl0OiAzZmMyYTI0ZjA0MjJiMmY1NWY5ZWQ0M2YxMTZkYjMxMTFmNzAwNTI2CitTaWduZWQtb2ZmLWJ5OiBGbG9yaWFuIEZhaW5lbGxpIDxmLmZhaW5lbGxpQGdtYWlsLmNvbT4KKy0tLQorIHNjcmlwdHMva2NvbmZpZy9NYWtlZmlsZSAgIHwgICAgMyArCisgc2NyaXB0cy9tb2QvZWxmLmggICAgICAgICAgfCAzMDA3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgc2NyaXB0cy9tb2QvbWtfZWxmY29uZmlnLmMgfCAgICA0ICsKKyBzY3JpcHRzL21vZC9tb2Rwb3N0LmggICAgICB8ICAgIDQgKworIDQgZmlsZXMgY2hhbmdlZCwgMzAxOCBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNjcmlwdHMvbW9kL2VsZi5oCisKKy0tLSAvZGV2L251bGwKKysrKyBiL3NjcmlwdHMvbW9kL2VsZi5oCitAQCAtMCwwICsxLDMwMDcgQEAKKysvKiBUaGlzIGZpbGUgZGVmaW5lcyBzdGFuZGFyZCBFTEYgdHlwZXMsIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MuCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCBzZWUKKysgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworKworKyNpZm5kZWYgX0VMRl9ICisrI2RlZmluZQlfRUxGX0ggMQorKworKy8qIFN0YW5kYXJkIEVMRiB0eXBlcy4gICovCisrCisrI2luY2x1ZGUgPHN0ZGludC5oPgorKworKy8qIFR5cGUgZm9yIGEgMTYtYml0IHF1YW50aXR5LiAgKi8KKyt0eXBlZGVmIHVpbnQxNl90IEVsZjMyX0hhbGY7CisrdHlwZWRlZiB1aW50MTZfdCBFbGY2NF9IYWxmOworKworKy8qIFR5cGVzIGZvciBzaWduZWQgYW5kIHVuc2lnbmVkIDMyLWJpdCBxdWFudGl0aWVzLiAgKi8KKyt0eXBlZGVmIHVpbnQzMl90IEVsZjMyX1dvcmQ7CisrdHlwZWRlZglpbnQzMl90ICBFbGYzMl9Td29yZDsKKyt0eXBlZGVmIHVpbnQzMl90IEVsZjY0X1dvcmQ7CisrdHlwZWRlZglpbnQzMl90ICBFbGY2NF9Td29yZDsKKysKKysvKiBUeXBlcyBmb3Igc2lnbmVkIGFuZCB1bnNpZ25lZCA2NC1iaXQgcXVhbnRpdGllcy4gICovCisrdHlwZWRlZiB1aW50NjRfdCBFbGYzMl9Yd29yZDsKKyt0eXBlZGVmCWludDY0X3QgIEVsZjMyX1N4d29yZDsKKyt0eXBlZGVmIHVpbnQ2NF90IEVsZjY0X1h3b3JkOworK3R5cGVkZWYJaW50NjRfdCAgRWxmNjRfU3h3b3JkOworKworKy8qIFR5cGUgb2YgYWRkcmVzc2VzLiAgKi8KKyt0eXBlZGVmIHVpbnQzMl90IEVsZjMyX0FkZHI7CisrdHlwZWRlZiB1aW50NjRfdCBFbGY2NF9BZGRyOworKworKy8qIFR5cGUgb2YgZmlsZSBvZmZzZXRzLiAgKi8KKyt0eXBlZGVmIHVpbnQzMl90IEVsZjMyX09mZjsKKyt0eXBlZGVmIHVpbnQ2NF90IEVsZjY0X09mZjsKKysKKysvKiBUeXBlIGZvciBzZWN0aW9uIGluZGljZXMsIHdoaWNoIGFyZSAxNi1iaXQgcXVhbnRpdGllcy4gICovCisrdHlwZWRlZiB1aW50MTZfdCBFbGYzMl9TZWN0aW9uOworK3R5cGVkZWYgdWludDE2X3QgRWxmNjRfU2VjdGlvbjsKKysKKysvKiBUeXBlIGZvciB2ZXJzaW9uIHN5bWJvbCBpbmZvcm1hdGlvbi4gICovCisrdHlwZWRlZiBFbGYzMl9IYWxmIEVsZjMyX1ZlcnN5bTsKKyt0eXBlZGVmIEVsZjY0X0hhbGYgRWxmNjRfVmVyc3ltOworKworKworKy8qIFRoZSBFTEYgZmlsZSBoZWFkZXIuICBUaGlzIGFwcGVhcnMgYXQgdGhlIHN0YXJ0IG9mIGV2ZXJ5IEVMRiBmaWxlLiAgKi8KKysKKysjZGVmaW5lIEVJX05JREVOVCAoMTYpCisrCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICB1bnNpZ25lZCBjaGFyCWVfaWRlbnRbRUlfTklERU5UXTsJLyogTWFnaWMgbnVtYmVyIGFuZCBvdGhlciBpbmZvICovCisrICBFbGYzMl9IYWxmCWVfdHlwZTsJCQkvKiBPYmplY3QgZmlsZSB0eXBlICovCisrICBFbGYzMl9IYWxmCWVfbWFjaGluZTsJCS8qIEFyY2hpdGVjdHVyZSAqLworKyAgRWxmMzJfV29yZAllX3ZlcnNpb247CQkvKiBPYmplY3QgZmlsZSB2ZXJzaW9uICovCisrICBFbGYzMl9BZGRyCWVfZW50cnk7CQkvKiBFbnRyeSBwb2ludCB2aXJ0dWFsIGFkZHJlc3MgKi8KKysgIEVsZjMyX09mZgllX3Bob2ZmOwkJLyogUHJvZ3JhbSBoZWFkZXIgdGFibGUgZmlsZSBvZmZzZXQgKi8KKysgIEVsZjMyX09mZgllX3Nob2ZmOwkJLyogU2VjdGlvbiBoZWFkZXIgdGFibGUgZmlsZSBvZmZzZXQgKi8KKysgIEVsZjMyX1dvcmQJZV9mbGFnczsJCS8qIFByb2Nlc3Nvci1zcGVjaWZpYyBmbGFncyAqLworKyAgRWxmMzJfSGFsZgllX2Voc2l6ZTsJCS8qIEVMRiBoZWFkZXIgc2l6ZSBpbiBieXRlcyAqLworKyAgRWxmMzJfSGFsZgllX3BoZW50c2l6ZTsJCS8qIFByb2dyYW0gaGVhZGVyIHRhYmxlIGVudHJ5IHNpemUgKi8KKysgIEVsZjMyX0hhbGYJZV9waG51bTsJCS8qIFByb2dyYW0gaGVhZGVyIHRhYmxlIGVudHJ5IGNvdW50ICovCisrICBFbGYzMl9IYWxmCWVfc2hlbnRzaXplOwkJLyogU2VjdGlvbiBoZWFkZXIgdGFibGUgZW50cnkgc2l6ZSAqLworKyAgRWxmMzJfSGFsZgllX3NobnVtOwkJLyogU2VjdGlvbiBoZWFkZXIgdGFibGUgZW50cnkgY291bnQgKi8KKysgIEVsZjMyX0hhbGYJZV9zaHN0cm5keDsJCS8qIFNlY3Rpb24gaGVhZGVyIHN0cmluZyB0YWJsZSBpbmRleCAqLworK30gRWxmMzJfRWhkcjsKKysKKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIHVuc2lnbmVkIGNoYXIJZV9pZGVudFtFSV9OSURFTlRdOwkvKiBNYWdpYyBudW1iZXIgYW5kIG90aGVyIGluZm8gKi8KKysgIEVsZjY0X0hhbGYJZV90eXBlOwkJCS8qIE9iamVjdCBmaWxlIHR5cGUgKi8KKysgIEVsZjY0X0hhbGYJZV9tYWNoaW5lOwkJLyogQXJjaGl0ZWN0dXJlICovCisrICBFbGY2NF9Xb3JkCWVfdmVyc2lvbjsJCS8qIE9iamVjdCBmaWxlIHZlcnNpb24gKi8KKysgIEVsZjY0X0FkZHIJZV9lbnRyeTsJCS8qIEVudHJ5IHBvaW50IHZpcnR1YWwgYWRkcmVzcyAqLworKyAgRWxmNjRfT2ZmCWVfcGhvZmY7CQkvKiBQcm9ncmFtIGhlYWRlciB0YWJsZSBmaWxlIG9mZnNldCAqLworKyAgRWxmNjRfT2ZmCWVfc2hvZmY7CQkvKiBTZWN0aW9uIGhlYWRlciB0YWJsZSBmaWxlIG9mZnNldCAqLworKyAgRWxmNjRfV29yZAllX2ZsYWdzOwkJLyogUHJvY2Vzc29yLXNwZWNpZmljIGZsYWdzICovCisrICBFbGY2NF9IYWxmCWVfZWhzaXplOwkJLyogRUxGIGhlYWRlciBzaXplIGluIGJ5dGVzICovCisrICBFbGY2NF9IYWxmCWVfcGhlbnRzaXplOwkJLyogUHJvZ3JhbSBoZWFkZXIgdGFibGUgZW50cnkgc2l6ZSAqLworKyAgRWxmNjRfSGFsZgllX3BobnVtOwkJLyogUHJvZ3JhbSBoZWFkZXIgdGFibGUgZW50cnkgY291bnQgKi8KKysgIEVsZjY0X0hhbGYJZV9zaGVudHNpemU7CQkvKiBTZWN0aW9uIGhlYWRlciB0YWJsZSBlbnRyeSBzaXplICovCisrICBFbGY2NF9IYWxmCWVfc2hudW07CQkvKiBTZWN0aW9uIGhlYWRlciB0YWJsZSBlbnRyeSBjb3VudCAqLworKyAgRWxmNjRfSGFsZgllX3Noc3RybmR4OwkJLyogU2VjdGlvbiBoZWFkZXIgc3RyaW5nIHRhYmxlIGluZGV4ICovCisrfSBFbGY2NF9FaGRyOworKworKy8qIEZpZWxkcyBpbiB0aGUgZV9pZGVudCBhcnJheS4gIFRoZSBFSV8qIG1hY3JvcyBhcmUgaW5kaWNlcyBpbnRvIHRoZQorKyAgIGFycmF5LiAgVGhlIG1hY3JvcyB1bmRlciBlYWNoIEVJXyogbWFjcm8gYXJlIHRoZSB2YWx1ZXMgdGhlIGJ5dGUKKysgICBtYXkgaGF2ZS4gICovCisrCisrI2RlZmluZSBFSV9NQUcwCQkwCQkvKiBGaWxlIGlkZW50aWZpY2F0aW9uIGJ5dGUgMCBpbmRleCAqLworKyNkZWZpbmUgRUxGTUFHMAkJMHg3ZgkJLyogTWFnaWMgbnVtYmVyIGJ5dGUgMCAqLworKworKyNkZWZpbmUgRUlfTUFHMQkJMQkJLyogRmlsZSBpZGVudGlmaWNhdGlvbiBieXRlIDEgaW5kZXggKi8KKysjZGVmaW5lIEVMRk1BRzEJCSdFJwkJLyogTWFnaWMgbnVtYmVyIGJ5dGUgMSAqLworKworKyNkZWZpbmUgRUlfTUFHMgkJMgkJLyogRmlsZSBpZGVudGlmaWNhdGlvbiBieXRlIDIgaW5kZXggKi8KKysjZGVmaW5lIEVMRk1BRzIJCSdMJwkJLyogTWFnaWMgbnVtYmVyIGJ5dGUgMiAqLworKworKyNkZWZpbmUgRUlfTUFHMwkJMwkJLyogRmlsZSBpZGVudGlmaWNhdGlvbiBieXRlIDMgaW5kZXggKi8KKysjZGVmaW5lIEVMRk1BRzMJCSdGJwkJLyogTWFnaWMgbnVtYmVyIGJ5dGUgMyAqLworKworKy8qIENvbmdsb21lcmF0aW9uIG9mIHRoZSBpZGVudGlmaWNhdGlvbiBieXRlcywgZm9yIGVhc3kgdGVzdGluZyBhcyBhIHdvcmQuICAqLworKyNkZWZpbmUJRUxGTUFHCQkiXDE3N0VMRiIKKysjZGVmaW5lCVNFTEZNQUcJCTQKKysKKysjZGVmaW5lIEVJX0NMQVNTCTQJCS8qIEZpbGUgY2xhc3MgYnl0ZSBpbmRleCAqLworKyNkZWZpbmUgRUxGQ0xBU1NOT05FCTAJCS8qIEludmFsaWQgY2xhc3MgKi8KKysjZGVmaW5lIEVMRkNMQVNTMzIJMQkJLyogMzItYml0IG9iamVjdHMgKi8KKysjZGVmaW5lIEVMRkNMQVNTNjQJMgkJLyogNjQtYml0IG9iamVjdHMgKi8KKysjZGVmaW5lIEVMRkNMQVNTTlVNCTMKKysKKysjZGVmaW5lIEVJX0RBVEEJCTUJCS8qIERhdGEgZW5jb2RpbmcgYnl0ZSBpbmRleCAqLworKyNkZWZpbmUgRUxGREFUQU5PTkUJMAkJLyogSW52YWxpZCBkYXRhIGVuY29kaW5nICovCisrI2RlZmluZSBFTEZEQVRBMkxTQgkxCQkvKiAyJ3MgY29tcGxlbWVudCwgbGl0dGxlIGVuZGlhbiAqLworKyNkZWZpbmUgRUxGREFUQTJNU0IJMgkJLyogMidzIGNvbXBsZW1lbnQsIGJpZyBlbmRpYW4gKi8KKysjZGVmaW5lIEVMRkRBVEFOVU0JMworKworKyNkZWZpbmUgRUlfVkVSU0lPTgk2CQkvKiBGaWxlIHZlcnNpb24gYnl0ZSBpbmRleCAqLworKwkJCQkJLyogVmFsdWUgbXVzdCBiZSBFVl9DVVJSRU5UICovCisrCisrI2RlZmluZSBFSV9PU0FCSQk3CQkvKiBPUyBBQkkgaWRlbnRpZmljYXRpb24gKi8KKysjZGVmaW5lIEVMRk9TQUJJX05PTkUJCTAJLyogVU5JWCBTeXN0ZW0gViBBQkkgKi8KKysjZGVmaW5lIEVMRk9TQUJJX1NZU1YJCTAJLyogQWxpYXMuICAqLworKyNkZWZpbmUgRUxGT1NBQklfSFBVWAkJMQkvKiBIUC1VWCAqLworKyNkZWZpbmUgRUxGT1NBQklfTkVUQlNECQkyCS8qIE5ldEJTRC4gICovCisrI2RlZmluZSBFTEZPU0FCSV9HTlUJCTMJLyogT2JqZWN0IHVzZXMgR05VIEVMRiBleHRlbnNpb25zLiAgKi8KKysjZGVmaW5lIEVMRk9TQUJJX0xJTlVYCQlFTEZPU0FCSV9HTlUgLyogQ29tcGF0aWJpbGl0eSBhbGlhcy4gICovCisrI2RlZmluZSBFTEZPU0FCSV9TT0xBUklTCTYJLyogU3VuIFNvbGFyaXMuICAqLworKyNkZWZpbmUgRUxGT1NBQklfQUlYCQk3CS8qIElCTSBBSVguICAqLworKyNkZWZpbmUgRUxGT1NBQklfSVJJWAkJOAkvKiBTR0kgSXJpeC4gICovCisrI2RlZmluZSBFTEZPU0FCSV9GUkVFQlNECTkJLyogRnJlZUJTRC4gICovCisrI2RlZmluZSBFTEZPU0FCSV9UUlU2NAkJMTAJLyogQ29tcGFxIFRSVTY0IFVOSVguICAqLworKyNkZWZpbmUgRUxGT1NBQklfTU9ERVNUTwkxMQkvKiBOb3ZlbGwgTW9kZXN0by4gICovCisrI2RlZmluZSBFTEZPU0FCSV9PUEVOQlNECTEyCS8qIE9wZW5CU0QuICAqLworKyNkZWZpbmUgRUxGT1NBQklfQVJNX0FFQUJJCTY0CS8qIEFSTSBFQUJJICovCisrI2RlZmluZSBFTEZPU0FCSV9BUk0JCTk3CS8qIEFSTSAqLworKyNkZWZpbmUgRUxGT1NBQklfU1RBTkRBTE9ORQkyNTUJLyogU3RhbmRhbG9uZSAoZW1iZWRkZWQpIGFwcGxpY2F0aW9uICovCisrCisrI2RlZmluZSBFSV9BQklWRVJTSU9OCTgJCS8qIEFCSSB2ZXJzaW9uICovCisrCisrI2RlZmluZSBFSV9QQUQJCTkJCS8qIEJ5dGUgaW5kZXggb2YgcGFkZGluZyBieXRlcyAqLworKworKy8qIExlZ2FsIHZhbHVlcyBmb3IgZV90eXBlIChvYmplY3QgZmlsZSB0eXBlKS4gICovCisrCisrI2RlZmluZSBFVF9OT05FCQkwCQkvKiBObyBmaWxlIHR5cGUgKi8KKysjZGVmaW5lIEVUX1JFTAkJMQkJLyogUmVsb2NhdGFibGUgZmlsZSAqLworKyNkZWZpbmUgRVRfRVhFQwkJMgkJLyogRXhlY3V0YWJsZSBmaWxlICovCisrI2RlZmluZSBFVF9EWU4JCTMJCS8qIFNoYXJlZCBvYmplY3QgZmlsZSAqLworKyNkZWZpbmUgRVRfQ09SRQkJNAkJLyogQ29yZSBmaWxlICovCisrI2RlZmluZQlFVF9OVU0JCTUJCS8qIE51bWJlciBvZiBkZWZpbmVkIHR5cGVzICovCisrI2RlZmluZSBFVF9MT09TCQkweGZlMDAJCS8qIE9TLXNwZWNpZmljIHJhbmdlIHN0YXJ0ICovCisrI2RlZmluZSBFVF9ISU9TCQkweGZlZmYJCS8qIE9TLXNwZWNpZmljIHJhbmdlIGVuZCAqLworKyNkZWZpbmUgRVRfTE9QUk9DCTB4ZmYwMAkJLyogUHJvY2Vzc29yLXNwZWNpZmljIHJhbmdlIHN0YXJ0ICovCisrI2RlZmluZSBFVF9ISVBST0MJMHhmZmZmCQkvKiBQcm9jZXNzb3Itc3BlY2lmaWMgcmFuZ2UgZW5kICovCisrCisrLyogTGVnYWwgdmFsdWVzIGZvciBlX21hY2hpbmUgKGFyY2hpdGVjdHVyZSkuICAqLworKworKyNkZWZpbmUgRU1fTk9ORQkJIDAJCS8qIE5vIG1hY2hpbmUgKi8KKysjZGVmaW5lIEVNX00zMgkJIDEJCS8qIEFUJlQgV0UgMzIxMDAgKi8KKysjZGVmaW5lIEVNX1NQQVJDCSAyCQkvKiBTVU4gU1BBUkMgKi8KKysjZGVmaW5lIEVNXzM4NgkJIDMJCS8qIEludGVsIDgwMzg2ICovCisrI2RlZmluZSBFTV82OEsJCSA0CQkvKiBNb3Rvcm9sYSBtNjhrIGZhbWlseSAqLworKyNkZWZpbmUgRU1fODhLCQkgNQkJLyogTW90b3JvbGEgbTg4ayBmYW1pbHkgKi8KKysjZGVmaW5lIEVNXzg2MAkJIDcJCS8qIEludGVsIDgwODYwICovCisrI2RlZmluZSBFTV9NSVBTCQkgOAkJLyogTUlQUyBSMzAwMCBiaWctZW5kaWFuICovCisrI2RlZmluZSBFTV9TMzcwCQkgOQkJLyogSUJNIFN5c3RlbS8zNzAgKi8KKysjZGVmaW5lIEVNX01JUFNfUlMzX0xFCTEwCQkvKiBNSVBTIFIzMDAwIGxpdHRsZS1lbmRpYW4gKi8KKysKKysjZGVmaW5lIEVNX1BBUklTQwkxNQkJLyogSFBQQSAqLworKyNkZWZpbmUgRU1fVlBQNTAwCTE3CQkvKiBGdWppdHN1IFZQUDUwMCAqLworKyNkZWZpbmUgRU1fU1BBUkMzMlBMVVMJMTgJCS8qIFN1bidzICJ2OHBsdXMiICovCisrI2RlZmluZSBFTV85NjAJCTE5CQkvKiBJbnRlbCA4MDk2MCAqLworKyNkZWZpbmUgRU1fUFBDCQkyMAkJLyogUG93ZXJQQyAqLworKyNkZWZpbmUgRU1fUFBDNjQJMjEJCS8qIFBvd2VyUEMgNjQtYml0ICovCisrI2RlZmluZSBFTV9TMzkwCQkyMgkJLyogSUJNIFMzOTAgKi8KKysKKysjZGVmaW5lIEVNX1Y4MDAJCTM2CQkvKiBORUMgVjgwMCBzZXJpZXMgKi8KKysjZGVmaW5lIEVNX0ZSMjAJCTM3CQkvKiBGdWppdHN1IEZSMjAgKi8KKysjZGVmaW5lIEVNX1JIMzIJCTM4CQkvKiBUUlcgUkgtMzIgKi8KKysjZGVmaW5lIEVNX1JDRQkJMzkJCS8qIE1vdG9yb2xhIFJDRSAqLworKyNkZWZpbmUgRU1fQVJNCQk0MAkJLyogQVJNICovCisrI2RlZmluZSBFTV9GQUtFX0FMUEhBCTQxCQkvKiBEaWdpdGFsIEFscGhhICovCisrI2RlZmluZSBFTV9TSAkJNDIJCS8qIEhpdGFjaGkgU0ggKi8KKysjZGVmaW5lIEVNX1NQQVJDVjkJNDMJCS8qIFNQQVJDIHY5IDY0LWJpdCAqLworKyNkZWZpbmUgRU1fVFJJQ09SRQk0NAkJLyogU2llbWVucyBUcmljb3JlICovCisrI2RlZmluZSBFTV9BUkMJCTQ1CQkvKiBBcmdvbmF1dCBSSVNDIENvcmUgKi8KKysjZGVmaW5lIEVNX0g4XzMwMAk0NgkJLyogSGl0YWNoaSBIOC8zMDAgKi8KKysjZGVmaW5lIEVNX0g4XzMwMEgJNDcJCS8qIEhpdGFjaGkgSDgvMzAwSCAqLworKyNkZWZpbmUgRU1fSDhTCQk0OAkJLyogSGl0YWNoaSBIOFMgKi8KKysjZGVmaW5lIEVNX0g4XzUwMAk0OQkJLyogSGl0YWNoaSBIOC81MDAgKi8KKysjZGVmaW5lIEVNX0lBXzY0CTUwCQkvKiBJbnRlbCBNZXJjZWQgKi8KKysjZGVmaW5lIEVNX01JUFNfWAk1MQkJLyogU3RhbmZvcmQgTUlQUy1YICovCisrI2RlZmluZSBFTV9DT0xERklSRQk1MgkJLyogTW90b3JvbGEgQ29sZGZpcmUgKi8KKysjZGVmaW5lIEVNXzY4SEMxMgk1MwkJLyogTW90b3JvbGEgTTY4SEMxMiAqLworKyNkZWZpbmUgRU1fTU1BCQk1NAkJLyogRnVqaXRzdSBNTUEgTXVsdGltZWRpYSBBY2NlbGVyYXRvciovCisrI2RlZmluZSBFTV9QQ1AJCTU1CQkvKiBTaWVtZW5zIFBDUCAqLworKyNkZWZpbmUgRU1fTkNQVQkJNTYJCS8qIFNvbnkgbkNQVSBlbWJlZWRlZCBSSVNDICovCisrI2RlZmluZSBFTV9ORFIxCQk1NwkJLyogRGVuc28gTkRSMSBtaWNyb3Byb2Nlc3NvciAqLworKyNkZWZpbmUgRU1fU1RBUkNPUkUJNTgJCS8qIE1vdG9yb2xhIFN0YXJ0KkNvcmUgcHJvY2Vzc29yICovCisrI2RlZmluZSBFTV9NRTE2CQk1OQkJLyogVG95b3RhIE1FMTYgcHJvY2Vzc29yICovCisrI2RlZmluZSBFTV9TVDEwMAk2MAkJLyogU1RNaWNyb2VsZWN0cm9uaWMgU1QxMDAgcHJvY2Vzc29yICovCisrI2RlZmluZSBFTV9USU5ZSgk2MQkJLyogQWR2YW5jZWQgTG9naWMgQ29ycC4gVGlueWogZW1iLmZhbSovCisrI2RlZmluZSBFTV9YODZfNjQJNjIJCS8qIEFNRCB4ODYtNjQgYXJjaGl0ZWN0dXJlICovCisrI2RlZmluZSBFTV9QRFNQCQk2MwkJLyogU29ueSBEU1AgUHJvY2Vzc29yICovCisrCisrI2RlZmluZSBFTV9GWDY2CQk2NgkJLyogU2llbWVucyBGWDY2IG1pY3JvY29udHJvbGxlciAqLworKyNkZWZpbmUgRU1fU1Q5UExVUwk2NwkJLyogU1RNaWNyb2VsZWN0cm9uaWNzIFNUOSsgOC8xNiBtYyAqLworKyNkZWZpbmUgRU1fU1Q3CQk2OAkJLyogU1RtaWNyb2VsZWN0cm9uaWNzIFNUNyA4IGJpdCBtYyAqLworKyNkZWZpbmUgRU1fNjhIQzE2CTY5CQkvKiBNb3Rvcm9sYSBNQzY4SEMxNiBtaWNyb2NvbnRyb2xsZXIgKi8KKysjZGVmaW5lIEVNXzY4SEMxMQk3MAkJLyogTW90b3JvbGEgTUM2OEhDMTEgbWljcm9jb250cm9sbGVyICovCisrI2RlZmluZSBFTV82OEhDMDgJNzEJCS8qIE1vdG9yb2xhIE1DNjhIQzA4IG1pY3JvY29udHJvbGxlciAqLworKyNkZWZpbmUgRU1fNjhIQzA1CTcyCQkvKiBNb3Rvcm9sYSBNQzY4SEMwNSBtaWNyb2NvbnRyb2xsZXIgKi8KKysjZGVmaW5lIEVNX1NWWAkJNzMJCS8qIFNpbGljb24gR3JhcGhpY3MgU1Z4ICovCisrI2RlZmluZSBFTV9TVDE5CQk3NAkJLyogU1RNaWNyb2VsZWN0cm9uaWNzIFNUMTkgOCBiaXQgbWMgKi8KKysjZGVmaW5lIEVNX1ZBWAkJNzUJCS8qIERpZ2l0YWwgVkFYICovCisrI2RlZmluZSBFTV9DUklTCQk3NgkJLyogQXhpcyBDb21tdW5pY2F0aW9ucyAzMi1iaXQgZW1iZWRkZWQgcHJvY2Vzc29yICovCisrI2RlZmluZSBFTV9KQVZFTElOCTc3CQkvKiBJbmZpbmVvbiBUZWNobm9sb2dpZXMgMzItYml0IGVtYmVkZGVkIHByb2Nlc3NvciAqLworKyNkZWZpbmUgRU1fRklSRVBBVEgJNzgJCS8qIEVsZW1lbnQgMTQgNjQtYml0IERTUCBQcm9jZXNzb3IgKi8KKysjZGVmaW5lIEVNX1pTUAkJNzkJCS8qIExTSSBMb2dpYyAxNi1iaXQgRFNQIFByb2Nlc3NvciAqLworKyNkZWZpbmUgRU1fTU1JWAkJODAJCS8qIERvbmFsZCBLbnV0aCdzIGVkdWNhdGlvbmFsIDY0LWJpdCBwcm9jZXNzb3IgKi8KKysjZGVmaW5lIEVNX0hVQU5ZCTgxCQkvKiBIYXJ2YXJkIFVuaXZlcnNpdHkgbWFjaGluZS1pbmRlcGVuZGVudCBvYmplY3QgZmlsZXMgKi8KKysjZGVmaW5lIEVNX1BSSVNNCTgyCQkvKiBTaVRlcmEgUHJpc20gKi8KKysjZGVmaW5lIEVNX0FWUgkJODMJCS8qIEF0bWVsIEFWUiA4LWJpdCBtaWNyb2NvbnRyb2xsZXIgKi8KKysjZGVmaW5lIEVNX0ZSMzAJCTg0CQkvKiBGdWppdHN1IEZSMzAgKi8KKysjZGVmaW5lIEVNX0QxMFYJCTg1CQkvKiBNaXRzdWJpc2hpIEQxMFYgKi8KKysjZGVmaW5lIEVNX0QzMFYJCTg2CQkvKiBNaXRzdWJpc2hpIEQzMFYgKi8KKysjZGVmaW5lIEVNX1Y4NTAJCTg3CQkvKiBORUMgdjg1MCAqLworKyNkZWZpbmUgRU1fTTMyUgkJODgJCS8qIE1pdHN1YmlzaGkgTTMyUiAqLworKyNkZWZpbmUgRU1fTU4xMDMwMAk4OQkJLyogTWF0c3VzaGl0YSBNTjEwMzAwICovCisrI2RlZmluZSBFTV9NTjEwMjAwCTkwCQkvKiBNYXRzdXNoaXRhIE1OMTAyMDAgKi8KKysjZGVmaW5lIEVNX1BKCQk5MQkJLyogcGljb0phdmEgKi8KKysjZGVmaW5lIEVNX09QRU5SSVNDCTkyCQkvKiBPcGVuUklTQyAzMi1iaXQgZW1iZWRkZWQgcHJvY2Vzc29yICovCisrI2RlZmluZSBFTV9BUkNfQTUJOTMJCS8qIEFSQyBDb3JlcyBUYW5nZW50LUE1ICovCisrI2RlZmluZSBFTV9YVEVOU0EJOTQJCS8qIFRlbnNpbGljYSBYdGVuc2EgQXJjaGl0ZWN0dXJlICovCisrI2RlZmluZSBFTV9USUxFUFJPCTE4OAkJLyogVGlsZXJhIFRJTEVQcm8gKi8KKysjZGVmaW5lIEVNX1RJTEVHWAkxOTEJCS8qIFRpbGVyYSBUSUxFLUd4ICovCisrI2RlZmluZSBFTV9OVU0JCTE5MgorKworKy8qIElmIGl0IGlzIG5lY2Vzc2FyeSB0byBhc3NpZ24gbmV3IHVub2ZmaWNpYWwgRU1fKiB2YWx1ZXMsIHBsZWFzZQorKyAgIHBpY2sgbGFyZ2UgcmFuZG9tIG51bWJlcnMgKDB4ODUyMywgMHhhN2YyLCBldGMuKSB0byBtaW5pbWl6ZSB0aGUKKysgICBjaGFuY2VzIG9mIGNvbGxpc2lvbiB3aXRoIG9mZmljaWFsIG9yIG5vbi1HTlUgdW5vZmZpY2lhbCB2YWx1ZXMuICAqLworKworKyNkZWZpbmUgRU1fQUxQSEEJMHg5MDI2CisrCisrLyogTGVnYWwgdmFsdWVzIGZvciBlX3ZlcnNpb24gKHZlcnNpb24pLiAgKi8KKysKKysjZGVmaW5lIEVWX05PTkUJCTAJCS8qIEludmFsaWQgRUxGIHZlcnNpb24gKi8KKysjZGVmaW5lIEVWX0NVUlJFTlQJMQkJLyogQ3VycmVudCB2ZXJzaW9uICovCisrI2RlZmluZSBFVl9OVU0JCTIKKysKKysvKiBTZWN0aW9uIGhlYWRlci4gICovCisrCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBFbGYzMl9Xb3JkCXNoX25hbWU7CQkvKiBTZWN0aW9uIG5hbWUgKHN0cmluZyB0YmwgaW5kZXgpICovCisrICBFbGYzMl9Xb3JkCXNoX3R5cGU7CQkvKiBTZWN0aW9uIHR5cGUgKi8KKysgIEVsZjMyX1dvcmQJc2hfZmxhZ3M7CQkvKiBTZWN0aW9uIGZsYWdzICovCisrICBFbGYzMl9BZGRyCXNoX2FkZHI7CQkvKiBTZWN0aW9uIHZpcnR1YWwgYWRkciBhdCBleGVjdXRpb24gKi8KKysgIEVsZjMyX09mZglzaF9vZmZzZXQ7CQkvKiBTZWN0aW9uIGZpbGUgb2Zmc2V0ICovCisrICBFbGYzMl9Xb3JkCXNoX3NpemU7CQkvKiBTZWN0aW9uIHNpemUgaW4gYnl0ZXMgKi8KKysgIEVsZjMyX1dvcmQJc2hfbGluazsJCS8qIExpbmsgdG8gYW5vdGhlciBzZWN0aW9uICovCisrICBFbGYzMl9Xb3JkCXNoX2luZm87CQkvKiBBZGRpdGlvbmFsIHNlY3Rpb24gaW5mb3JtYXRpb24gKi8KKysgIEVsZjMyX1dvcmQJc2hfYWRkcmFsaWduOwkJLyogU2VjdGlvbiBhbGlnbm1lbnQgKi8KKysgIEVsZjMyX1dvcmQJc2hfZW50c2l6ZTsJCS8qIEVudHJ5IHNpemUgaWYgc2VjdGlvbiBob2xkcyB0YWJsZSAqLworK30gRWxmMzJfU2hkcjsKKysKKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIEVsZjY0X1dvcmQJc2hfbmFtZTsJCS8qIFNlY3Rpb24gbmFtZSAoc3RyaW5nIHRibCBpbmRleCkgKi8KKysgIEVsZjY0X1dvcmQJc2hfdHlwZTsJCS8qIFNlY3Rpb24gdHlwZSAqLworKyAgRWxmNjRfWHdvcmQJc2hfZmxhZ3M7CQkvKiBTZWN0aW9uIGZsYWdzICovCisrICBFbGY2NF9BZGRyCXNoX2FkZHI7CQkvKiBTZWN0aW9uIHZpcnR1YWwgYWRkciBhdCBleGVjdXRpb24gKi8KKysgIEVsZjY0X09mZglzaF9vZmZzZXQ7CQkvKiBTZWN0aW9uIGZpbGUgb2Zmc2V0ICovCisrICBFbGY2NF9Yd29yZAlzaF9zaXplOwkJLyogU2VjdGlvbiBzaXplIGluIGJ5dGVzICovCisrICBFbGY2NF9Xb3JkCXNoX2xpbms7CQkvKiBMaW5rIHRvIGFub3RoZXIgc2VjdGlvbiAqLworKyAgRWxmNjRfV29yZAlzaF9pbmZvOwkJLyogQWRkaXRpb25hbCBzZWN0aW9uIGluZm9ybWF0aW9uICovCisrICBFbGY2NF9Yd29yZAlzaF9hZGRyYWxpZ247CQkvKiBTZWN0aW9uIGFsaWdubWVudCAqLworKyAgRWxmNjRfWHdvcmQJc2hfZW50c2l6ZTsJCS8qIEVudHJ5IHNpemUgaWYgc2VjdGlvbiBob2xkcyB0YWJsZSAqLworK30gRWxmNjRfU2hkcjsKKysKKysvKiBTcGVjaWFsIHNlY3Rpb24gaW5kaWNlcy4gICovCisrCisrI2RlZmluZSBTSE5fVU5ERUYJMAkJLyogVW5kZWZpbmVkIHNlY3Rpb24gKi8KKysjZGVmaW5lIFNITl9MT1JFU0VSVkUJMHhmZjAwCQkvKiBTdGFydCBvZiByZXNlcnZlZCBpbmRpY2VzICovCisrI2RlZmluZSBTSE5fTE9QUk9DCTB4ZmYwMAkJLyogU3RhcnQgb2YgcHJvY2Vzc29yLXNwZWNpZmljICovCisrI2RlZmluZSBTSE5fQkVGT1JFCTB4ZmYwMAkJLyogT3JkZXIgc2VjdGlvbiBiZWZvcmUgYWxsIG90aGVycworKwkJCQkJICAgKFNvbGFyaXMpLiAgKi8KKysjZGVmaW5lIFNITl9BRlRFUgkweGZmMDEJCS8qIE9yZGVyIHNlY3Rpb24gYWZ0ZXIgYWxsIG90aGVycworKwkJCQkJICAgKFNvbGFyaXMpLiAgKi8KKysjZGVmaW5lIFNITl9ISVBST0MJMHhmZjFmCQkvKiBFbmQgb2YgcHJvY2Vzc29yLXNwZWNpZmljICovCisrI2RlZmluZSBTSE5fTE9PUwkweGZmMjAJCS8qIFN0YXJ0IG9mIE9TLXNwZWNpZmljICovCisrI2RlZmluZSBTSE5fSElPUwkweGZmM2YJCS8qIEVuZCBvZiBPUy1zcGVjaWZpYyAqLworKyNkZWZpbmUgU0hOX0FCUwkJMHhmZmYxCQkvKiBBc3NvY2lhdGVkIHN5bWJvbCBpcyBhYnNvbHV0ZSAqLworKyNkZWZpbmUgU0hOX0NPTU1PTgkweGZmZjIJCS8qIEFzc29jaWF0ZWQgc3ltYm9sIGlzIGNvbW1vbiAqLworKyNkZWZpbmUgU0hOX1hJTkRFWAkweGZmZmYJCS8qIEluZGV4IGlzIGluIGV4dHJhIHRhYmxlLiAgKi8KKysjZGVmaW5lIFNITl9ISVJFU0VSVkUJMHhmZmZmCQkvKiBFbmQgb2YgcmVzZXJ2ZWQgaW5kaWNlcyAqLworKworKy8qIExlZ2FsIHZhbHVlcyBmb3Igc2hfdHlwZSAoc2VjdGlvbiB0eXBlKS4gICovCisrCisrI2RlZmluZSBTSFRfTlVMTAkgIDAJCS8qIFNlY3Rpb24gaGVhZGVyIHRhYmxlIGVudHJ5IHVudXNlZCAqLworKyNkZWZpbmUgU0hUX1BST0dCSVRTCSAgMQkJLyogUHJvZ3JhbSBkYXRhICovCisrI2RlZmluZSBTSFRfU1lNVEFCCSAgMgkJLyogU3ltYm9sIHRhYmxlICovCisrI2RlZmluZSBTSFRfU1RSVEFCCSAgMwkJLyogU3RyaW5nIHRhYmxlICovCisrI2RlZmluZSBTSFRfUkVMQQkgIDQJCS8qIFJlbG9jYXRpb24gZW50cmllcyB3aXRoIGFkZGVuZHMgKi8KKysjZGVmaW5lIFNIVF9IQVNICSAgNQkJLyogU3ltYm9sIGhhc2ggdGFibGUgKi8KKysjZGVmaW5lIFNIVF9EWU5BTUlDCSAgNgkJLyogRHluYW1pYyBsaW5raW5nIGluZm9ybWF0aW9uICovCisrI2RlZmluZSBTSFRfTk9URQkgIDcJCS8qIE5vdGVzICovCisrI2RlZmluZSBTSFRfTk9CSVRTCSAgOAkJLyogUHJvZ3JhbSBzcGFjZSB3aXRoIG5vIGRhdGEgKGJzcykgKi8KKysjZGVmaW5lIFNIVF9SRUwJCSAgOQkJLyogUmVsb2NhdGlvbiBlbnRyaWVzLCBubyBhZGRlbmRzICovCisrI2RlZmluZSBTSFRfU0hMSUIJICAxMAkJLyogUmVzZXJ2ZWQgKi8KKysjZGVmaW5lIFNIVF9EWU5TWU0JICAxMQkJLyogRHluYW1pYyBsaW5rZXIgc3ltYm9sIHRhYmxlICovCisrI2RlZmluZSBTSFRfSU5JVF9BUlJBWQkgIDE0CQkvKiBBcnJheSBvZiBjb25zdHJ1Y3RvcnMgKi8KKysjZGVmaW5lIFNIVF9GSU5JX0FSUkFZCSAgMTUJCS8qIEFycmF5IG9mIGRlc3RydWN0b3JzICovCisrI2RlZmluZSBTSFRfUFJFSU5JVF9BUlJBWSAxNgkJLyogQXJyYXkgb2YgcHJlLWNvbnN0cnVjdG9ycyAqLworKyNkZWZpbmUgU0hUX0dST1VQCSAgMTcJCS8qIFNlY3Rpb24gZ3JvdXAgKi8KKysjZGVmaW5lIFNIVF9TWU1UQUJfU0hORFggIDE4CQkvKiBFeHRlbmRlZCBzZWN0aW9uIGluZGVjZXMgKi8KKysjZGVmaW5lCVNIVF9OVU0JCSAgMTkJCS8qIE51bWJlciBvZiBkZWZpbmVkIHR5cGVzLiAgKi8KKysjZGVmaW5lIFNIVF9MT09TCSAgMHg2MDAwMDAwMAkvKiBTdGFydCBPUy1zcGVjaWZpYy4gICovCisrI2RlZmluZSBTSFRfR05VX0FUVFJJQlVURVMgMHg2ZmZmZmZmNQkvKiBPYmplY3QgYXR0cmlidXRlcy4gICovCisrI2RlZmluZSBTSFRfR05VX0hBU0gJICAweDZmZmZmZmY2CS8qIEdOVS1zdHlsZSBoYXNoIHRhYmxlLiAgKi8KKysjZGVmaW5lIFNIVF9HTlVfTElCTElTVAkgIDB4NmZmZmZmZjcJLyogUHJlbGluayBsaWJyYXJ5IGxpc3QgKi8KKysjZGVmaW5lIFNIVF9DSEVDS1NVTQkgIDB4NmZmZmZmZjgJLyogQ2hlY2tzdW0gZm9yIERTTyBjb250ZW50LiAgKi8KKysjZGVmaW5lIFNIVF9MT1NVTlcJICAweDZmZmZmZmZhCS8qIFN1bi1zcGVjaWZpYyBsb3cgYm91bmQuICAqLworKyNkZWZpbmUgU0hUX1NVTldfbW92ZQkgIDB4NmZmZmZmZmEKKysjZGVmaW5lIFNIVF9TVU5XX0NPTURBVCAgIDB4NmZmZmZmZmIKKysjZGVmaW5lIFNIVF9TVU5XX3N5bWluZm8gIDB4NmZmZmZmZmMKKysjZGVmaW5lIFNIVF9HTlVfdmVyZGVmCSAgMHg2ZmZmZmZmZAkvKiBWZXJzaW9uIGRlZmluaXRpb24gc2VjdGlvbi4gICovCisrI2RlZmluZSBTSFRfR05VX3Zlcm5lZWQJICAweDZmZmZmZmZlCS8qIFZlcnNpb24gbmVlZHMgc2VjdGlvbi4gICovCisrI2RlZmluZSBTSFRfR05VX3ZlcnN5bQkgIDB4NmZmZmZmZmYJLyogVmVyc2lvbiBzeW1ib2wgdGFibGUuICAqLworKyNkZWZpbmUgU0hUX0hJU1VOVwkgIDB4NmZmZmZmZmYJLyogU3VuLXNwZWNpZmljIGhpZ2ggYm91bmQuICAqLworKyNkZWZpbmUgU0hUX0hJT1MJICAweDZmZmZmZmZmCS8qIEVuZCBPUy1zcGVjaWZpYyB0eXBlICovCisrI2RlZmluZSBTSFRfTE9QUk9DCSAgMHg3MDAwMDAwMAkvKiBTdGFydCBvZiBwcm9jZXNzb3Itc3BlY2lmaWMgKi8KKysjZGVmaW5lIFNIVF9ISVBST0MJICAweDdmZmZmZmZmCS8qIEVuZCBvZiBwcm9jZXNzb3Itc3BlY2lmaWMgKi8KKysjZGVmaW5lIFNIVF9MT1VTRVIJICAweDgwMDAwMDAwCS8qIFN0YXJ0IG9mIGFwcGxpY2F0aW9uLXNwZWNpZmljICovCisrI2RlZmluZSBTSFRfSElVU0VSCSAgMHg4ZmZmZmZmZgkvKiBFbmQgb2YgYXBwbGljYXRpb24tc3BlY2lmaWMgKi8KKysKKysvKiBMZWdhbCB2YWx1ZXMgZm9yIHNoX2ZsYWdzIChzZWN0aW9uIGZsYWdzKS4gICovCisrCisrI2RlZmluZSBTSEZfV1JJVEUJICAgICAoMSA8PCAwKQkvKiBXcml0YWJsZSAqLworKyNkZWZpbmUgU0hGX0FMTE9DCSAgICAgKDEgPDwgMSkJLyogT2NjdXBpZXMgbWVtb3J5IGR1cmluZyBleGVjdXRpb24gKi8KKysjZGVmaW5lIFNIRl9FWEVDSU5TVFIJICAgICAoMSA8PCAyKQkvKiBFeGVjdXRhYmxlICovCisrI2RlZmluZSBTSEZfTUVSR0UJICAgICAoMSA8PCA0KQkvKiBNaWdodCBiZSBtZXJnZWQgKi8KKysjZGVmaW5lIFNIRl9TVFJJTkdTCSAgICAgKDEgPDwgNSkJLyogQ29udGFpbnMgbnVsLXRlcm1pbmF0ZWQgc3RyaW5ncyAqLworKyNkZWZpbmUgU0hGX0lORk9fTElOSwkgICAgICgxIDw8IDYpCS8qIGBzaF9pbmZvJyBjb250YWlucyBTSFQgaW5kZXggKi8KKysjZGVmaW5lIFNIRl9MSU5LX09SREVSCSAgICAgKDEgPDwgNykJLyogUHJlc2VydmUgb3JkZXIgYWZ0ZXIgY29tYmluaW5nICovCisrI2RlZmluZSBTSEZfT1NfTk9OQ09ORk9STUlORyAoMSA8PCA4KQkvKiBOb24tc3RhbmRhcmQgT1Mgc3BlY2lmaWMgaGFuZGxpbmcKKysJCQkJCSAgIHJlcXVpcmVkICovCisrI2RlZmluZSBTSEZfR1JPVVAJICAgICAoMSA8PCA5KQkvKiBTZWN0aW9uIGlzIG1lbWJlciBvZiBhIGdyb3VwLiAgKi8KKysjZGVmaW5lIFNIRl9UTFMJCSAgICAgKDEgPDwgMTApCS8qIFNlY3Rpb24gaG9sZCB0aHJlYWQtbG9jYWwgZGF0YS4gICovCisrI2RlZmluZSBTSEZfTUFTS09TCSAgICAgMHgwZmYwMDAwMAkvKiBPUy1zcGVjaWZpYy4gICovCisrI2RlZmluZSBTSEZfTUFTS1BST0MJICAgICAweGYwMDAwMDAwCS8qIFByb2Nlc3Nvci1zcGVjaWZpYyAqLworKyNkZWZpbmUgU0hGX09SREVSRUQJICAgICAoMSA8PCAzMCkJLyogU3BlY2lhbCBvcmRlcmluZyByZXF1aXJlbWVudAorKwkJCQkJICAgKFNvbGFyaXMpLiAgKi8KKysjZGVmaW5lIFNIRl9FWENMVURFCSAgICAgKDEgPDwgMzEpCS8qIFNlY3Rpb24gaXMgZXhjbHVkZWQgdW5sZXNzCisrCQkJCQkgICByZWZlcmVuY2VkIG9yIGFsbG9jYXRlZCAoU29sYXJpcykuKi8KKysKKysvKiBTZWN0aW9uIGdyb3VwIGhhbmRsaW5nLiAgKi8KKysjZGVmaW5lIEdSUF9DT01EQVQJMHgxCQkvKiBNYXJrIGdyb3VwIGFzIENPTURBVC4gICovCisrCisrLyogU3ltYm9sIHRhYmxlIGVudHJ5LiAgKi8KKysKKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIEVsZjMyX1dvcmQJc3RfbmFtZTsJCS8qIFN5bWJvbCBuYW1lIChzdHJpbmcgdGJsIGluZGV4KSAqLworKyAgRWxmMzJfQWRkcglzdF92YWx1ZTsJCS8qIFN5bWJvbCB2YWx1ZSAqLworKyAgRWxmMzJfV29yZAlzdF9zaXplOwkJLyogU3ltYm9sIHNpemUgKi8KKysgIHVuc2lnbmVkIGNoYXIJc3RfaW5mbzsJCS8qIFN5bWJvbCB0eXBlIGFuZCBiaW5kaW5nICovCisrICB1bnNpZ25lZCBjaGFyCXN0X290aGVyOwkJLyogU3ltYm9sIHZpc2liaWxpdHkgKi8KKysgIEVsZjMyX1NlY3Rpb24Jc3Rfc2huZHg7CQkvKiBTZWN0aW9uIGluZGV4ICovCisrfSBFbGYzMl9TeW07CisrCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBFbGY2NF9Xb3JkCXN0X25hbWU7CQkvKiBTeW1ib2wgbmFtZSAoc3RyaW5nIHRibCBpbmRleCkgKi8KKysgIHVuc2lnbmVkIGNoYXIJc3RfaW5mbzsJCS8qIFN5bWJvbCB0eXBlIGFuZCBiaW5kaW5nICovCisrICB1bnNpZ25lZCBjaGFyIHN0X290aGVyOwkJLyogU3ltYm9sIHZpc2liaWxpdHkgKi8KKysgIEVsZjY0X1NlY3Rpb24Jc3Rfc2huZHg7CQkvKiBTZWN0aW9uIGluZGV4ICovCisrICBFbGY2NF9BZGRyCXN0X3ZhbHVlOwkJLyogU3ltYm9sIHZhbHVlICovCisrICBFbGY2NF9Yd29yZAlzdF9zaXplOwkJLyogU3ltYm9sIHNpemUgKi8KKyt9IEVsZjY0X1N5bTsKKysKKysvKiBUaGUgc3ltaW5mbyBzZWN0aW9uIGlmIGF2YWlsYWJsZSBjb250YWlucyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0CisrICAgZXZlcnkgZHluYW1pYyBzeW1ib2wuICAqLworKworK3R5cGVkZWYgc3RydWN0CisreworKyAgRWxmMzJfSGFsZiBzaV9ib3VuZHRvOwkJLyogRGlyZWN0IGJpbmRpbmdzLCBzeW1ib2wgYm91bmQgdG8gKi8KKysgIEVsZjMyX0hhbGYgc2lfZmxhZ3M7CQkJLyogUGVyIHN5bWJvbCBmbGFncyAqLworK30gRWxmMzJfU3ltaW5mbzsKKysKKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIEVsZjY0X0hhbGYgc2lfYm91bmR0bzsJCS8qIERpcmVjdCBiaW5kaW5ncywgc3ltYm9sIGJvdW5kIHRvICovCisrICBFbGY2NF9IYWxmIHNpX2ZsYWdzOwkJCS8qIFBlciBzeW1ib2wgZmxhZ3MgKi8KKyt9IEVsZjY0X1N5bWluZm87CisrCisrLyogUG9zc2libGUgdmFsdWVzIGZvciBzaV9ib3VuZHRvLiAgKi8KKysjZGVmaW5lIFNZTUlORk9fQlRfU0VMRgkJMHhmZmZmCS8qIFN5bWJvbCBib3VuZCB0byBzZWxmICovCisrI2RlZmluZSBTWU1JTkZPX0JUX1BBUkVOVAkweGZmZmUJLyogU3ltYm9sIGJvdW5kIHRvIHBhcmVudCAqLworKyNkZWZpbmUgU1lNSU5GT19CVF9MT1dSRVNFUlZFCTB4ZmYwMAkvKiBCZWdpbm5pbmcgb2YgcmVzZXJ2ZWQgZW50cmllcyAqLworKworKy8qIFBvc3NpYmxlIGJpdG1hc2tzIGZvciBzaV9mbGFncy4gICovCisrI2RlZmluZSBTWU1JTkZPX0ZMR19ESVJFQ1QJMHgwMDAxCS8qIERpcmVjdCBib3VuZCBzeW1ib2wgKi8KKysjZGVmaW5lIFNZTUlORk9fRkxHX1BBU1NUSFJVCTB4MDAwMgkvKiBQYXNzLXRocnUgc3ltYm9sIGZvciB0cmFuc2xhdG9yICovCisrI2RlZmluZSBTWU1JTkZPX0ZMR19DT1BZCTB4MDAwNAkvKiBTeW1ib2wgaXMgYSBjb3B5LXJlbG9jICovCisrI2RlZmluZSBTWU1JTkZPX0ZMR19MQVpZTE9BRAkweDAwMDgJLyogU3ltYm9sIGJvdW5kIHRvIG9iamVjdCB0byBiZSBsYXp5CisrCQkJCQkgICBsb2FkZWQgKi8KKysvKiBTeW1pbmZvIHZlcnNpb24gdmFsdWVzLiAgKi8KKysjZGVmaW5lIFNZTUlORk9fTk9ORQkJMAorKyNkZWZpbmUgU1lNSU5GT19DVVJSRU5UCQkxCisrI2RlZmluZSBTWU1JTkZPX05VTQkJMgorKworKworKy8qIEhvdyB0byBleHRyYWN0IGFuZCBpbnNlcnQgaW5mb3JtYXRpb24gaGVsZCBpbiB0aGUgc3RfaW5mbyBmaWVsZC4gICovCisrCisrI2RlZmluZSBFTEYzMl9TVF9CSU5EKHZhbCkJCSgoKHVuc2lnbmVkIGNoYXIpICh2YWwpKSA+PiA0KQorKyNkZWZpbmUgRUxGMzJfU1RfVFlQRSh2YWwpCQkoKHZhbCkgJiAweGYpCisrI2RlZmluZSBFTEYzMl9TVF9JTkZPKGJpbmQsIHR5cGUpCSgoKGJpbmQpIDw8IDQpICsgKCh0eXBlKSAmIDB4ZikpCisrCisrLyogQm90aCBFbGYzMl9TeW0gYW5kIEVsZjY0X1N5bSB1c2UgdGhlIHNhbWUgb25lLWJ5dGUgc3RfaW5mbyBmaWVsZC4gICovCisrI2RlZmluZSBFTEY2NF9TVF9CSU5EKHZhbCkJCUVMRjMyX1NUX0JJTkQgKHZhbCkKKysjZGVmaW5lIEVMRjY0X1NUX1RZUEUodmFsKQkJRUxGMzJfU1RfVFlQRSAodmFsKQorKyNkZWZpbmUgRUxGNjRfU1RfSU5GTyhiaW5kLCB0eXBlKQlFTEYzMl9TVF9JTkZPICgoYmluZCksICh0eXBlKSkKKysKKysvKiBMZWdhbCB2YWx1ZXMgZm9yIFNUX0JJTkQgc3ViZmllbGQgb2Ygc3RfaW5mbyAoc3ltYm9sIGJpbmRpbmcpLiAgKi8KKysKKysjZGVmaW5lIFNUQl9MT0NBTAkwCQkvKiBMb2NhbCBzeW1ib2wgKi8KKysjZGVmaW5lIFNUQl9HTE9CQUwJMQkJLyogR2xvYmFsIHN5bWJvbCAqLworKyNkZWZpbmUgU1RCX1dFQUsJMgkJLyogV2VhayBzeW1ib2wgKi8KKysjZGVmaW5lCVNUQl9OVU0JCTMJCS8qIE51bWJlciBvZiBkZWZpbmVkIHR5cGVzLiAgKi8KKysjZGVmaW5lIFNUQl9MT09TCTEwCQkvKiBTdGFydCBvZiBPUy1zcGVjaWZpYyAqLworKyNkZWZpbmUgU1RCX0dOVV9VTklRVUUJMTAJCS8qIFVuaXF1ZSBzeW1ib2wuICAqLworKyNkZWZpbmUgU1RCX0hJT1MJMTIJCS8qIEVuZCBvZiBPUy1zcGVjaWZpYyAqLworKyNkZWZpbmUgU1RCX0xPUFJPQwkxMwkJLyogU3RhcnQgb2YgcHJvY2Vzc29yLXNwZWNpZmljICovCisrI2RlZmluZSBTVEJfSElQUk9DCTE1CQkvKiBFbmQgb2YgcHJvY2Vzc29yLXNwZWNpZmljICovCisrCisrLyogTGVnYWwgdmFsdWVzIGZvciBTVF9UWVBFIHN1YmZpZWxkIG9mIHN0X2luZm8gKHN5bWJvbCB0eXBlKS4gICovCisrCisrI2RlZmluZSBTVFRfTk9UWVBFCTAJCS8qIFN5bWJvbCB0eXBlIGlzIHVuc3BlY2lmaWVkICovCisrI2RlZmluZSBTVFRfT0JKRUNUCTEJCS8qIFN5bWJvbCBpcyBhIGRhdGEgb2JqZWN0ICovCisrI2RlZmluZSBTVFRfRlVOQwkyCQkvKiBTeW1ib2wgaXMgYSBjb2RlIG9iamVjdCAqLworKyNkZWZpbmUgU1RUX1NFQ1RJT04JMwkJLyogU3ltYm9sIGFzc29jaWF0ZWQgd2l0aCBhIHNlY3Rpb24gKi8KKysjZGVmaW5lIFNUVF9GSUxFCTQJCS8qIFN5bWJvbCdzIG5hbWUgaXMgZmlsZSBuYW1lICovCisrI2RlZmluZSBTVFRfQ09NTU9OCTUJCS8qIFN5bWJvbCBpcyBhIGNvbW1vbiBkYXRhIG9iamVjdCAqLworKyNkZWZpbmUgU1RUX1RMUwkJNgkJLyogU3ltYm9sIGlzIHRocmVhZC1sb2NhbCBkYXRhIG9iamVjdCovCisrI2RlZmluZQlTVFRfTlVNCQk3CQkvKiBOdW1iZXIgb2YgZGVmaW5lZCB0eXBlcy4gICovCisrI2RlZmluZSBTVFRfTE9PUwkxMAkJLyogU3RhcnQgb2YgT1Mtc3BlY2lmaWMgKi8KKysjZGVmaW5lIFNUVF9HTlVfSUZVTkMJMTAJCS8qIFN5bWJvbCBpcyBpbmRpcmVjdCBjb2RlIG9iamVjdCAqLworKyNkZWZpbmUgU1RUX0hJT1MJMTIJCS8qIEVuZCBvZiBPUy1zcGVjaWZpYyAqLworKyNkZWZpbmUgU1RUX0xPUFJPQwkxMwkJLyogU3RhcnQgb2YgcHJvY2Vzc29yLXNwZWNpZmljICovCisrI2RlZmluZSBTVFRfSElQUk9DCTE1CQkvKiBFbmQgb2YgcHJvY2Vzc29yLXNwZWNpZmljICovCisrCisrCisrLyogU3ltYm9sIHRhYmxlIGluZGljZXMgYXJlIGZvdW5kIGluIHRoZSBoYXNoIGJ1Y2tldHMgYW5kIGNoYWluIHRhYmxlCisrICAgb2YgYSBzeW1ib2wgaGFzaCB0YWJsZSBzZWN0aW9uLiAgVGhpcyBzcGVjaWFsIGluZGV4IHZhbHVlIGluZGljYXRlcworKyAgIHRoZSBlbmQgb2YgYSBjaGFpbiwgbWVhbmluZyBubyBmdXJ0aGVyIHN5bWJvbHMgYXJlIGZvdW5kIGluIHRoYXQgYnVja2V0LiAgKi8KKysKKysjZGVmaW5lIFNUTl9VTkRFRgkwCQkvKiBFbmQgb2YgYSBjaGFpbi4gICovCisrCisrCisrLyogSG93IHRvIGV4dHJhY3QgYW5kIGluc2VydCBpbmZvcm1hdGlvbiBoZWxkIGluIHRoZSBzdF9vdGhlciBmaWVsZC4gICovCisrCisrI2RlZmluZSBFTEYzMl9TVF9WSVNJQklMSVRZKG8pCSgobykgJiAweDAzKQorKworKy8qIEZvciBFTEY2NCB0aGUgZGVmaW5pdGlvbnMgYXJlIHRoZSBzYW1lLiAgKi8KKysjZGVmaW5lIEVMRjY0X1NUX1ZJU0lCSUxJVFkobykJRUxGMzJfU1RfVklTSUJJTElUWSAobykKKysKKysvKiBTeW1ib2wgdmlzaWJpbGl0eSBzcGVjaWZpY2F0aW9uIGVuY29kZWQgaW4gdGhlIHN0X290aGVyIGZpZWxkLiAgKi8KKysjZGVmaW5lIFNUVl9ERUZBVUxUCTAJCS8qIERlZmF1bHQgc3ltYm9sIHZpc2liaWxpdHkgcnVsZXMgKi8KKysjZGVmaW5lIFNUVl9JTlRFUk5BTAkxCQkvKiBQcm9jZXNzb3Igc3BlY2lmaWMgaGlkZGVuIGNsYXNzICovCisrI2RlZmluZSBTVFZfSElEREVOCTIJCS8qIFN5bSB1bmF2YWlsYWJsZSBpbiBvdGhlciBtb2R1bGVzICovCisrI2RlZmluZSBTVFZfUFJPVEVDVEVECTMJCS8qIE5vdCBwcmVlbXB0aWJsZSwgbm90IGV4cG9ydGVkICovCisrCisrCisrLyogUmVsb2NhdGlvbiB0YWJsZSBlbnRyeSB3aXRob3V0IGFkZGVuZCAoaW4gc2VjdGlvbiBvZiB0eXBlIFNIVF9SRUwpLiAgKi8KKysKKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIEVsZjMyX0FkZHIJcl9vZmZzZXQ7CQkvKiBBZGRyZXNzICovCisrICBFbGYzMl9Xb3JkCXJfaW5mbzsJCQkvKiBSZWxvY2F0aW9uIHR5cGUgYW5kIHN5bWJvbCBpbmRleCAqLworK30gRWxmMzJfUmVsOworKworKy8qIEkgaGF2ZSBzZWVuIHR3byBkaWZmZXJlbnQgZGVmaW5pdGlvbnMgb2YgdGhlIEVsZjY0X1JlbCBhbmQKKysgICBFbGY2NF9SZWxhIHN0cnVjdHVyZXMsIHNvIHdlJ2xsIGxlYXZlIHRoZW0gb3V0IHVudGlsIE5vdmVsbCAob3IKKysgICB3aG9ldmVyKSBnZXRzIHRoZWlyIGFjdCB0b2dldGhlci4gICovCisrLyogVGhlIGZvbGxvd2luZywgYXQgbGVhc3QsIGlzIHVzZWQgb24gU3BhcmMgdjksIE1JUFMsIGFuZCBBbHBoYS4gICovCisrCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBFbGY2NF9BZGRyCXJfb2Zmc2V0OwkJLyogQWRkcmVzcyAqLworKyAgRWxmNjRfWHdvcmQJcl9pbmZvOwkJCS8qIFJlbG9jYXRpb24gdHlwZSBhbmQgc3ltYm9sIGluZGV4ICovCisrfSBFbGY2NF9SZWw7CisrCisrLyogUmVsb2NhdGlvbiB0YWJsZSBlbnRyeSB3aXRoIGFkZGVuZCAoaW4gc2VjdGlvbiBvZiB0eXBlIFNIVF9SRUxBKS4gICovCisrCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBFbGYzMl9BZGRyCXJfb2Zmc2V0OwkJLyogQWRkcmVzcyAqLworKyAgRWxmMzJfV29yZAlyX2luZm87CQkJLyogUmVsb2NhdGlvbiB0eXBlIGFuZCBzeW1ib2wgaW5kZXggKi8KKysgIEVsZjMyX1N3b3JkCXJfYWRkZW5kOwkJLyogQWRkZW5kICovCisrfSBFbGYzMl9SZWxhOworKworK3R5cGVkZWYgc3RydWN0CisreworKyAgRWxmNjRfQWRkcglyX29mZnNldDsJCS8qIEFkZHJlc3MgKi8KKysgIEVsZjY0X1h3b3JkCXJfaW5mbzsJCQkvKiBSZWxvY2F0aW9uIHR5cGUgYW5kIHN5bWJvbCBpbmRleCAqLworKyAgRWxmNjRfU3h3b3JkCXJfYWRkZW5kOwkJLyogQWRkZW5kICovCisrfSBFbGY2NF9SZWxhOworKworKy8qIEhvdyB0byBleHRyYWN0IGFuZCBpbnNlcnQgaW5mb3JtYXRpb24gaGVsZCBpbiB0aGUgcl9pbmZvIGZpZWxkLiAgKi8KKysKKysjZGVmaW5lIEVMRjMyX1JfU1lNKHZhbCkJCSgodmFsKSA+PiA4KQorKyNkZWZpbmUgRUxGMzJfUl9UWVBFKHZhbCkJCSgodmFsKSAmIDB4ZmYpCisrI2RlZmluZSBFTEYzMl9SX0lORk8oc3ltLCB0eXBlKQkJKCgoc3ltKSA8PCA4KSArICgodHlwZSkgJiAweGZmKSkKKysKKysjZGVmaW5lIEVMRjY0X1JfU1lNKGkpCQkJKChpKSA+PiAzMikKKysjZGVmaW5lIEVMRjY0X1JfVFlQRShpKQkJCSgoaSkgJiAweGZmZmZmZmZmKQorKyNkZWZpbmUgRUxGNjRfUl9JTkZPKHN5bSx0eXBlKQkJKCgoKEVsZjY0X1h3b3JkKSAoc3ltKSkgPDwgMzIpICsgKHR5cGUpKQorKworKy8qIFByb2dyYW0gc2VnbWVudCBoZWFkZXIuICAqLworKworK3R5cGVkZWYgc3RydWN0CisreworKyAgRWxmMzJfV29yZAlwX3R5cGU7CQkJLyogU2VnbWVudCB0eXBlICovCisrICBFbGYzMl9PZmYJcF9vZmZzZXQ7CQkvKiBTZWdtZW50IGZpbGUgb2Zmc2V0ICovCisrICBFbGYzMl9BZGRyCXBfdmFkZHI7CQkvKiBTZWdtZW50IHZpcnR1YWwgYWRkcmVzcyAqLworKyAgRWxmMzJfQWRkcglwX3BhZGRyOwkJLyogU2VnbWVudCBwaHlzaWNhbCBhZGRyZXNzICovCisrICBFbGYzMl9Xb3JkCXBfZmlsZXN6OwkJLyogU2VnbWVudCBzaXplIGluIGZpbGUgKi8KKysgIEVsZjMyX1dvcmQJcF9tZW1zejsJCS8qIFNlZ21lbnQgc2l6ZSBpbiBtZW1vcnkgKi8KKysgIEVsZjMyX1dvcmQJcF9mbGFnczsJCS8qIFNlZ21lbnQgZmxhZ3MgKi8KKysgIEVsZjMyX1dvcmQJcF9hbGlnbjsJCS8qIFNlZ21lbnQgYWxpZ25tZW50ICovCisrfSBFbGYzMl9QaGRyOworKworK3R5cGVkZWYgc3RydWN0CisreworKyAgRWxmNjRfV29yZAlwX3R5cGU7CQkJLyogU2VnbWVudCB0eXBlICovCisrICBFbGY2NF9Xb3JkCXBfZmxhZ3M7CQkvKiBTZWdtZW50IGZsYWdzICovCisrICBFbGY2NF9PZmYJcF9vZmZzZXQ7CQkvKiBTZWdtZW50IGZpbGUgb2Zmc2V0ICovCisrICBFbGY2NF9BZGRyCXBfdmFkZHI7CQkvKiBTZWdtZW50IHZpcnR1YWwgYWRkcmVzcyAqLworKyAgRWxmNjRfQWRkcglwX3BhZGRyOwkJLyogU2VnbWVudCBwaHlzaWNhbCBhZGRyZXNzICovCisrICBFbGY2NF9Yd29yZAlwX2ZpbGVzejsJCS8qIFNlZ21lbnQgc2l6ZSBpbiBmaWxlICovCisrICBFbGY2NF9Yd29yZAlwX21lbXN6OwkJLyogU2VnbWVudCBzaXplIGluIG1lbW9yeSAqLworKyAgRWxmNjRfWHdvcmQJcF9hbGlnbjsJCS8qIFNlZ21lbnQgYWxpZ25tZW50ICovCisrfSBFbGY2NF9QaGRyOworKworKy8qIFNwZWNpYWwgdmFsdWUgZm9yIGVfcGhudW0uICBUaGlzIGluZGljYXRlcyB0aGF0IHRoZSByZWFsIG51bWJlciBvZgorKyAgIHByb2dyYW0gaGVhZGVycyBpcyB0b28gbGFyZ2UgdG8gZml0IGludG8gZV9waG51bS4gIEluc3RlYWQgdGhlIHJlYWwKKysgICB2YWx1ZSBpcyBpbiB0aGUgZmllbGQgc2hfaW5mbyBvZiBzZWN0aW9uIDAuICAqLworKworKyNkZWZpbmUgUE5fWE5VTQkJMHhmZmZmCisrCisrLyogTGVnYWwgdmFsdWVzIGZvciBwX3R5cGUgKHNlZ21lbnQgdHlwZSkuICAqLworKworKyNkZWZpbmUJUFRfTlVMTAkJMAkJLyogUHJvZ3JhbSBoZWFkZXIgdGFibGUgZW50cnkgdW51c2VkICovCisrI2RlZmluZSBQVF9MT0FECQkxCQkvKiBMb2FkYWJsZSBwcm9ncmFtIHNlZ21lbnQgKi8KKysjZGVmaW5lIFBUX0RZTkFNSUMJMgkJLyogRHluYW1pYyBsaW5raW5nIGluZm9ybWF0aW9uICovCisrI2RlZmluZSBQVF9JTlRFUlAJMwkJLyogUHJvZ3JhbSBpbnRlcnByZXRlciAqLworKyNkZWZpbmUgUFRfTk9URQkJNAkJLyogQXV4aWxpYXJ5IGluZm9ybWF0aW9uICovCisrI2RlZmluZSBQVF9TSExJQgk1CQkvKiBSZXNlcnZlZCAqLworKyNkZWZpbmUgUFRfUEhEUgkJNgkJLyogRW50cnkgZm9yIGhlYWRlciB0YWJsZSBpdHNlbGYgKi8KKysjZGVmaW5lIFBUX1RMUwkJNwkJLyogVGhyZWFkLWxvY2FsIHN0b3JhZ2Ugc2VnbWVudCAqLworKyNkZWZpbmUJUFRfTlVNCQk4CQkvKiBOdW1iZXIgb2YgZGVmaW5lZCB0eXBlcyAqLworKyNkZWZpbmUgUFRfTE9PUwkJMHg2MDAwMDAwMAkvKiBTdGFydCBvZiBPUy1zcGVjaWZpYyAqLworKyNkZWZpbmUgUFRfR05VX0VIX0ZSQU1FCTB4NjQ3NGU1NTAJLyogR0NDIC5laF9mcmFtZV9oZHIgc2VnbWVudCAqLworKyNkZWZpbmUgUFRfR05VX1NUQUNLCTB4NjQ3NGU1NTEJLyogSW5kaWNhdGVzIHN0YWNrIGV4ZWN1dGFiaWxpdHkgKi8KKysjZGVmaW5lIFBUX0dOVV9SRUxSTwkweDY0NzRlNTUyCS8qIFJlYWQtb25seSBhZnRlciByZWxvY2F0aW9uICovCisrI2RlZmluZSBQVF9MT1NVTlcJMHg2ZmZmZmZmYQorKyNkZWZpbmUgUFRfU1VOV0JTUwkweDZmZmZmZmZhCS8qIFN1biBTcGVjaWZpYyBzZWdtZW50ICovCisrI2RlZmluZSBQVF9TVU5XU1RBQ0sJMHg2ZmZmZmZmYgkvKiBTdGFjayBzZWdtZW50ICovCisrI2RlZmluZSBQVF9ISVNVTlcJMHg2ZmZmZmZmZgorKyNkZWZpbmUgUFRfSElPUwkJMHg2ZmZmZmZmZgkvKiBFbmQgb2YgT1Mtc3BlY2lmaWMgKi8KKysjZGVmaW5lIFBUX0xPUFJPQwkweDcwMDAwMDAwCS8qIFN0YXJ0IG9mIHByb2Nlc3Nvci1zcGVjaWZpYyAqLworKyNkZWZpbmUgUFRfSElQUk9DCTB4N2ZmZmZmZmYJLyogRW5kIG9mIHByb2Nlc3Nvci1zcGVjaWZpYyAqLworKworKy8qIExlZ2FsIHZhbHVlcyBmb3IgcF9mbGFncyAoc2VnbWVudCBmbGFncykuICAqLworKworKyNkZWZpbmUgUEZfWAkJKDEgPDwgMCkJLyogU2VnbWVudCBpcyBleGVjdXRhYmxlICovCisrI2RlZmluZSBQRl9XCQkoMSA8PCAxKQkvKiBTZWdtZW50IGlzIHdyaXRhYmxlICovCisrI2RlZmluZSBQRl9SCQkoMSA8PCAyKQkvKiBTZWdtZW50IGlzIHJlYWRhYmxlICovCisrI2RlZmluZSBQRl9NQVNLT1MJMHgwZmYwMDAwMAkvKiBPUy1zcGVjaWZpYyAqLworKyNkZWZpbmUgUEZfTUFTS1BST0MJMHhmMDAwMDAwMAkvKiBQcm9jZXNzb3Itc3BlY2lmaWMgKi8KKysKKysvKiBMZWdhbCB2YWx1ZXMgZm9yIG5vdGUgc2VnbWVudCBkZXNjcmlwdG9yIHR5cGVzIGZvciBjb3JlIGZpbGVzLiAqLworKworKyNkZWZpbmUgTlRfUFJTVEFUVVMJMQkJLyogQ29udGFpbnMgY29weSBvZiBwcnN0YXR1cyBzdHJ1Y3QgKi8KKysjZGVmaW5lIE5UX0ZQUkVHU0VUCTIJCS8qIENvbnRhaW5zIGNvcHkgb2YgZnByZWdzZXQgc3RydWN0ICovCisrI2RlZmluZSBOVF9QUlBTSU5GTwkzCQkvKiBDb250YWlucyBjb3B5IG9mIHBycHNpbmZvIHN0cnVjdCAqLworKyNkZWZpbmUgTlRfUFJYUkVHCTQJCS8qIENvbnRhaW5zIGNvcHkgb2YgcHJ4cmVnc2V0IHN0cnVjdCAqLworKyNkZWZpbmUgTlRfVEFTS1NUUlVDVAk0CQkvKiBDb250YWlucyBjb3B5IG9mIHRhc2sgc3RydWN0dXJlICovCisrI2RlZmluZSBOVF9QTEFURk9STQk1CQkvKiBTdHJpbmcgZnJvbSBzeXNpbmZvKFNJX1BMQVRGT1JNKSAqLworKyNkZWZpbmUgTlRfQVVYVgkJNgkJLyogQ29udGFpbnMgY29weSBvZiBhdXh2IGFycmF5ICovCisrI2RlZmluZSBOVF9HV0lORE9XUwk3CQkvKiBDb250YWlucyBjb3B5IG9mIGd3aW5kb3dzIHN0cnVjdCAqLworKyNkZWZpbmUgTlRfQVNSUwkJOAkJLyogQ29udGFpbnMgY29weSBvZiBhc3JzZXQgc3RydWN0ICovCisrI2RlZmluZSBOVF9QU1RBVFVTCTEwCQkvKiBDb250YWlucyBjb3B5IG9mIHBzdGF0dXMgc3RydWN0ICovCisrI2RlZmluZSBOVF9QU0lORk8JMTMJCS8qIENvbnRhaW5zIGNvcHkgb2YgcHNpbmZvIHN0cnVjdCAqLworKyNkZWZpbmUgTlRfUFJDUkVECTE0CQkvKiBDb250YWlucyBjb3B5IG9mIHByY3JlZCBzdHJ1Y3QgKi8KKysjZGVmaW5lIE5UX1VUU05BTUUJMTUJCS8qIENvbnRhaW5zIGNvcHkgb2YgdXRzbmFtZSBzdHJ1Y3QgKi8KKysjZGVmaW5lIE5UX0xXUFNUQVRVUwkxNgkJLyogQ29udGFpbnMgY29weSBvZiBsd3BzdGF0dXMgc3RydWN0ICovCisrI2RlZmluZSBOVF9MV1BTSU5GTwkxNwkJLyogQ29udGFpbnMgY29weSBvZiBsd3BpbmZvIHN0cnVjdCAqLworKyNkZWZpbmUgTlRfUFJGUFhSRUcJMjAJCS8qIENvbnRhaW5zIGNvcHkgb2YgZnByeHJlZ3NldCBzdHJ1Y3QgKi8KKysjZGVmaW5lIE5UX1BSWEZQUkVHCTB4NDZlNjJiN2YJLyogQ29udGFpbnMgY29weSBvZiB1c2VyX2Z4c3Jfc3RydWN0ICovCisrI2RlZmluZSBOVF9QUENfVk1YCTB4MTAwCQkvKiBQb3dlclBDIEFsdGl2ZWMvVk1YIHJlZ2lzdGVycyAqLworKyNkZWZpbmUgTlRfUFBDX1NQRQkweDEwMQkJLyogUG93ZXJQQyBTUEUvRVZSIHJlZ2lzdGVycyAqLworKyNkZWZpbmUgTlRfUFBDX1ZTWAkweDEwMgkJLyogUG93ZXJQQyBWU1ggcmVnaXN0ZXJzICovCisrI2RlZmluZSBOVF8zODZfVExTCTB4MjAwCQkvKiBpMzg2IFRMUyBzbG90cyAoc3RydWN0IHVzZXJfZGVzYykgKi8KKysjZGVmaW5lIE5UXzM4Nl9JT1BFUk0JMHgyMDEJCS8qIHg4NiBpbyBwZXJtaXNzaW9uIGJpdG1hcCAoMT1kZW55KSAqLworKyNkZWZpbmUgTlRfWDg2X1hTVEFURQkweDIwMgkJLyogeDg2IGV4dGVuZGVkIHN0YXRlIHVzaW5nIHhzYXZlICovCisrCisrLyogTGVnYWwgdmFsdWVzIGZvciB0aGUgbm90ZSBzZWdtZW50IGRlc2NyaXB0b3IgdHlwZXMgZm9yIG9iamVjdCBmaWxlcy4gICovCisrCisrI2RlZmluZSBOVF9WRVJTSU9OCTEJCS8qIENvbnRhaW5zIGEgdmVyc2lvbiBzdHJpbmcuICAqLworKworKworKy8qIER5bmFtaWMgc2VjdGlvbiBlbnRyeS4gICovCisrCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBFbGYzMl9Td29yZAlkX3RhZzsJCQkvKiBEeW5hbWljIGVudHJ5IHR5cGUgKi8KKysgIHVuaW9uCisrICAgIHsKKysgICAgICBFbGYzMl9Xb3JkIGRfdmFsOwkJCS8qIEludGVnZXIgdmFsdWUgKi8KKysgICAgICBFbGYzMl9BZGRyIGRfcHRyOwkJCS8qIEFkZHJlc3MgdmFsdWUgKi8KKysgICAgfSBkX3VuOworK30gRWxmMzJfRHluOworKworK3R5cGVkZWYgc3RydWN0CisreworKyAgRWxmNjRfU3h3b3JkCWRfdGFnOwkJCS8qIER5bmFtaWMgZW50cnkgdHlwZSAqLworKyAgdW5pb24KKysgICAgeworKyAgICAgIEVsZjY0X1h3b3JkIGRfdmFsOwkJLyogSW50ZWdlciB2YWx1ZSAqLworKyAgICAgIEVsZjY0X0FkZHIgZF9wdHI7CQkJLyogQWRkcmVzcyB2YWx1ZSAqLworKyAgICB9IGRfdW47CisrfSBFbGY2NF9EeW47CisrCisrLyogTGVnYWwgdmFsdWVzIGZvciBkX3RhZyAoZHluYW1pYyBlbnRyeSB0eXBlKS4gICovCisrCisrI2RlZmluZSBEVF9OVUxMCQkwCQkvKiBNYXJrcyBlbmQgb2YgZHluYW1pYyBzZWN0aW9uICovCisrI2RlZmluZSBEVF9ORUVERUQJMQkJLyogTmFtZSBvZiBuZWVkZWQgbGlicmFyeSAqLworKyNkZWZpbmUgRFRfUExUUkVMU1oJMgkJLyogU2l6ZSBpbiBieXRlcyBvZiBQTFQgcmVsb2NzICovCisrI2RlZmluZSBEVF9QTFRHT1QJMwkJLyogUHJvY2Vzc29yIGRlZmluZWQgdmFsdWUgKi8KKysjZGVmaW5lIERUX0hBU0gJCTQJCS8qIEFkZHJlc3Mgb2Ygc3ltYm9sIGhhc2ggdGFibGUgKi8KKysjZGVmaW5lIERUX1NUUlRBQgk1CQkvKiBBZGRyZXNzIG9mIHN0cmluZyB0YWJsZSAqLworKyNkZWZpbmUgRFRfU1lNVEFCCTYJCS8qIEFkZHJlc3Mgb2Ygc3ltYm9sIHRhYmxlICovCisrI2RlZmluZSBEVF9SRUxBCQk3CQkvKiBBZGRyZXNzIG9mIFJlbGEgcmVsb2NzICovCisrI2RlZmluZSBEVF9SRUxBU1oJOAkJLyogVG90YWwgc2l6ZSBvZiBSZWxhIHJlbG9jcyAqLworKyNkZWZpbmUgRFRfUkVMQUVOVAk5CQkvKiBTaXplIG9mIG9uZSBSZWxhIHJlbG9jICovCisrI2RlZmluZSBEVF9TVFJTWgkxMAkJLyogU2l6ZSBvZiBzdHJpbmcgdGFibGUgKi8KKysjZGVmaW5lIERUX1NZTUVOVAkxMQkJLyogU2l6ZSBvZiBvbmUgc3ltYm9sIHRhYmxlIGVudHJ5ICovCisrI2RlZmluZSBEVF9JTklUCQkxMgkJLyogQWRkcmVzcyBvZiBpbml0IGZ1bmN0aW9uICovCisrI2RlZmluZSBEVF9GSU5JCQkxMwkJLyogQWRkcmVzcyBvZiB0ZXJtaW5hdGlvbiBmdW5jdGlvbiAqLworKyNkZWZpbmUgRFRfU09OQU1FCTE0CQkvKiBOYW1lIG9mIHNoYXJlZCBvYmplY3QgKi8KKysjZGVmaW5lIERUX1JQQVRICTE1CQkvKiBMaWJyYXJ5IHNlYXJjaCBwYXRoIChkZXByZWNhdGVkKSAqLworKyNkZWZpbmUgRFRfU1lNQk9MSUMJMTYJCS8qIFN0YXJ0IHN5bWJvbCBzZWFyY2ggaGVyZSAqLworKyNkZWZpbmUgRFRfUkVMCQkxNwkJLyogQWRkcmVzcyBvZiBSZWwgcmVsb2NzICovCisrI2RlZmluZSBEVF9SRUxTWgkxOAkJLyogVG90YWwgc2l6ZSBvZiBSZWwgcmVsb2NzICovCisrI2RlZmluZSBEVF9SRUxFTlQJMTkJCS8qIFNpemUgb2Ygb25lIFJlbCByZWxvYyAqLworKyNkZWZpbmUgRFRfUExUUkVMCTIwCQkvKiBUeXBlIG9mIHJlbG9jIGluIFBMVCAqLworKyNkZWZpbmUgRFRfREVCVUcJMjEJCS8qIEZvciBkZWJ1Z2dpbmc7IHVuc3BlY2lmaWVkICovCisrI2RlZmluZSBEVF9URVhUUkVMCTIyCQkvKiBSZWxvYyBtaWdodCBtb2RpZnkgLnRleHQgKi8KKysjZGVmaW5lIERUX0pNUFJFTAkyMwkJLyogQWRkcmVzcyBvZiBQTFQgcmVsb2NzICovCisrI2RlZmluZQlEVF9CSU5EX05PVwkyNAkJLyogUHJvY2VzcyByZWxvY2F0aW9ucyBvZiBvYmplY3QgKi8KKysjZGVmaW5lCURUX0lOSVRfQVJSQVkJMjUJCS8qIEFycmF5IHdpdGggYWRkcmVzc2VzIG9mIGluaXQgZmN0ICovCisrI2RlZmluZQlEVF9GSU5JX0FSUkFZCTI2CQkvKiBBcnJheSB3aXRoIGFkZHJlc3NlcyBvZiBmaW5pIGZjdCAqLworKyNkZWZpbmUJRFRfSU5JVF9BUlJBWVNaCTI3CQkvKiBTaXplIGluIGJ5dGVzIG9mIERUX0lOSVRfQVJSQVkgKi8KKysjZGVmaW5lCURUX0ZJTklfQVJSQVlTWgkyOAkJLyogU2l6ZSBpbiBieXRlcyBvZiBEVF9GSU5JX0FSUkFZICovCisrI2RlZmluZSBEVF9SVU5QQVRICTI5CQkvKiBMaWJyYXJ5IHNlYXJjaCBwYXRoICovCisrI2RlZmluZSBEVF9GTEFHUwkzMAkJLyogRmxhZ3MgZm9yIHRoZSBvYmplY3QgYmVpbmcgbG9hZGVkICovCisrI2RlZmluZSBEVF9FTkNPRElORwkzMgkJLyogU3RhcnQgb2YgZW5jb2RlZCByYW5nZSAqLworKyNkZWZpbmUgRFRfUFJFSU5JVF9BUlJBWSAzMgkJLyogQXJyYXkgd2l0aCBhZGRyZXNzZXMgb2YgcHJlaW5pdCBmY3QqLworKyNkZWZpbmUgRFRfUFJFSU5JVF9BUlJBWVNaIDMzCQkvKiBzaXplIGluIGJ5dGVzIG9mIERUX1BSRUlOSVRfQVJSQVkgKi8KKysjZGVmaW5lCURUX05VTQkJMzQJCS8qIE51bWJlciB1c2VkICovCisrI2RlZmluZSBEVF9MT09TCQkweDYwMDAwMDBkCS8qIFN0YXJ0IG9mIE9TLXNwZWNpZmljICovCisrI2RlZmluZSBEVF9ISU9TCQkweDZmZmZmMDAwCS8qIEVuZCBvZiBPUy1zcGVjaWZpYyAqLworKyNkZWZpbmUgRFRfTE9QUk9DCTB4NzAwMDAwMDAJLyogU3RhcnQgb2YgcHJvY2Vzc29yLXNwZWNpZmljICovCisrI2RlZmluZSBEVF9ISVBST0MJMHg3ZmZmZmZmZgkvKiBFbmQgb2YgcHJvY2Vzc29yLXNwZWNpZmljICovCisrI2RlZmluZQlEVF9QUk9DTlVNCURUX01JUFNfTlVNCS8qIE1vc3QgdXNlZCBieSBhbnkgcHJvY2Vzc29yICovCisrCisrLyogRFRfKiBlbnRyaWVzIHdoaWNoIGZhbGwgYmV0d2VlbiBEVF9WQUxSTkdISSAmIERUX1ZBTFJOR0xPIHVzZSB0aGUKKysgICBEeW4uZF91bi5kX3ZhbCBmaWVsZCBvZiB0aGUgRWxmKl9EeW4gc3RydWN0dXJlLiAgVGhpcyBmb2xsb3dzIFN1bidzCisrICAgYXBwcm9hY2guICAqLworKyNkZWZpbmUgRFRfVkFMUk5HTE8JMHg2ZmZmZmQwMAorKyNkZWZpbmUgRFRfR05VX1BSRUxJTktFRCAweDZmZmZmZGY1CS8qIFByZWxpbmtpbmcgdGltZXN0YW1wICovCisrI2RlZmluZSBEVF9HTlVfQ09ORkxJQ1RTWiAweDZmZmZmZGY2CS8qIFNpemUgb2YgY29uZmxpY3Qgc2VjdGlvbiAqLworKyNkZWZpbmUgRFRfR05VX0xJQkxJU1RTWiAweDZmZmZmZGY3CS8qIFNpemUgb2YgbGlicmFyeSBsaXN0ICovCisrI2RlZmluZSBEVF9DSEVDS1NVTQkweDZmZmZmZGY4CisrI2RlZmluZSBEVF9QTFRQQURTWgkweDZmZmZmZGY5CisrI2RlZmluZSBEVF9NT1ZFRU5UCTB4NmZmZmZkZmEKKysjZGVmaW5lIERUX01PVkVTWgkweDZmZmZmZGZiCisrI2RlZmluZSBEVF9GRUFUVVJFXzEJMHg2ZmZmZmRmYwkvKiBGZWF0dXJlIHNlbGVjdGlvbiAoRFRGXyopLiAgKi8KKysjZGVmaW5lIERUX1BPU0ZMQUdfMQkweDZmZmZmZGZkCS8qIEZsYWdzIGZvciBEVF8qIGVudHJpZXMsIGVmZmVjdGluZworKwkJCQkJICAgdGhlIGZvbGxvd2luZyBEVF8qIGVudHJ5LiAgKi8KKysjZGVmaW5lIERUX1NZTUlOU1oJMHg2ZmZmZmRmZQkvKiBTaXplIG9mIHN5bWluZm8gdGFibGUgKGluIGJ5dGVzKSAqLworKyNkZWZpbmUgRFRfU1lNSU5FTlQJMHg2ZmZmZmRmZgkvKiBFbnRyeSBzaXplIG9mIHN5bWluZm8gKi8KKysjZGVmaW5lIERUX1ZBTFJOR0hJCTB4NmZmZmZkZmYKKysjZGVmaW5lIERUX1ZBTFRBR0lEWCh0YWcpCShEVF9WQUxSTkdISSAtICh0YWcpKQkvKiBSZXZlcnNlIG9yZGVyISAqLworKyNkZWZpbmUgRFRfVkFMTlVNIDEyCisrCisrLyogRFRfKiBlbnRyaWVzIHdoaWNoIGZhbGwgYmV0d2VlbiBEVF9BRERSUk5HSEkgJiBEVF9BRERSUk5HTE8gdXNlIHRoZQorKyAgIER5bi5kX3VuLmRfcHRyIGZpZWxkIG9mIHRoZSBFbGYqX0R5biBzdHJ1Y3R1cmUuCisrCisrICAgSWYgYW55IGFkanVzdG1lbnQgaXMgbWFkZSB0byB0aGUgRUxGIG9iamVjdCBhZnRlciBpdCBoYXMgYmVlbgorKyAgIGJ1aWx0IHRoZXNlIGVudHJpZXMgd2lsbCBuZWVkIHRvIGJlIGFkanVzdGVkLiAgKi8KKysjZGVmaW5lIERUX0FERFJSTkdMTwkweDZmZmZmZTAwCisrI2RlZmluZSBEVF9HTlVfSEFTSAkweDZmZmZmZWY1CS8qIEdOVS1zdHlsZSBoYXNoIHRhYmxlLiAgKi8KKysjZGVmaW5lIERUX1RMU0RFU0NfUExUCTB4NmZmZmZlZjYKKysjZGVmaW5lIERUX1RMU0RFU0NfR09UCTB4NmZmZmZlZjcKKysjZGVmaW5lIERUX0dOVV9DT05GTElDVAkweDZmZmZmZWY4CS8qIFN0YXJ0IG9mIGNvbmZsaWN0IHNlY3Rpb24gKi8KKysjZGVmaW5lIERUX0dOVV9MSUJMSVNUCTB4NmZmZmZlZjkJLyogTGlicmFyeSBsaXN0ICovCisrI2RlZmluZSBEVF9DT05GSUcJMHg2ZmZmZmVmYQkvKiBDb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLiAgKi8KKysjZGVmaW5lIERUX0RFUEFVRElUCTB4NmZmZmZlZmIJLyogRGVwZW5kZW5jeSBhdWRpdGluZy4gICovCisrI2RlZmluZSBEVF9BVURJVAkweDZmZmZmZWZjCS8qIE9iamVjdCBhdWRpdGluZy4gICovCisrI2RlZmluZQlEVF9QTFRQQUQJMHg2ZmZmZmVmZAkvKiBQTFQgcGFkZGluZy4gICovCisrI2RlZmluZQlEVF9NT1ZFVEFCCTB4NmZmZmZlZmUJLyogTW92ZSB0YWJsZS4gICovCisrI2RlZmluZSBEVF9TWU1JTkZPCTB4NmZmZmZlZmYJLyogU3ltaW5mbyB0YWJsZS4gICovCisrI2RlZmluZSBEVF9BRERSUk5HSEkJMHg2ZmZmZmVmZgorKyNkZWZpbmUgRFRfQUREUlRBR0lEWCh0YWcpCShEVF9BRERSUk5HSEkgLSAodGFnKSkJLyogUmV2ZXJzZSBvcmRlciEgKi8KKysjZGVmaW5lIERUX0FERFJOVU0gMTEKKysKKysvKiBUaGUgdmVyc2lvbmluZyBlbnRyeSB0eXBlcy4gIFRoZSBuZXh0IGFyZSBkZWZpbmVkIGFzIHBhcnQgb2YgdGhlCisrICAgR05VIGV4dGVuc2lvbi4gICovCisrI2RlZmluZSBEVF9WRVJTWU0JMHg2ZmZmZmZmMAorKworKyNkZWZpbmUgRFRfUkVMQUNPVU5UCTB4NmZmZmZmZjkKKysjZGVmaW5lIERUX1JFTENPVU5UCTB4NmZmZmZmZmEKKysKKysvKiBUaGVzZSB3ZXJlIGNob3NlbiBieSBTdW4uICAqLworKyNkZWZpbmUgRFRfRkxBR1NfMQkweDZmZmZmZmZiCS8qIFN0YXRlIGZsYWdzLCBzZWUgREZfMV8qIGJlbG93LiAgKi8KKysjZGVmaW5lCURUX1ZFUkRFRgkweDZmZmZmZmZjCS8qIEFkZHJlc3Mgb2YgdmVyc2lvbiBkZWZpbml0aW9uCisrCQkJCQkgICB0YWJsZSAqLworKyNkZWZpbmUJRFRfVkVSREVGTlVNCTB4NmZmZmZmZmQJLyogTnVtYmVyIG9mIHZlcnNpb24gZGVmaW5pdGlvbnMgKi8KKysjZGVmaW5lCURUX1ZFUk5FRUQJMHg2ZmZmZmZmZQkvKiBBZGRyZXNzIG9mIHRhYmxlIHdpdGggbmVlZGVkCisrCQkJCQkgICB2ZXJzaW9ucyAqLworKyNkZWZpbmUJRFRfVkVSTkVFRE5VTQkweDZmZmZmZmZmCS8qIE51bWJlciBvZiBuZWVkZWQgdmVyc2lvbnMgKi8KKysjZGVmaW5lIERUX1ZFUlNJT05UQUdJRFgodGFnKQkoRFRfVkVSTkVFRE5VTSAtICh0YWcpKQkvKiBSZXZlcnNlIG9yZGVyISAqLworKyNkZWZpbmUgRFRfVkVSU0lPTlRBR05VTSAxNgorKworKy8qIFN1biBhZGRlZCB0aGVzZSBtYWNoaW5lLWluZGVwZW5kZW50IGV4dGVuc2lvbnMgaW4gdGhlICJwcm9jZXNzb3Itc3BlY2lmaWMiCisrICAgcmFuZ2UuICBCZSBjb21wYXRpYmxlLiAgKi8KKysjZGVmaW5lIERUX0FVWElMSUFSWSAgICAweDdmZmZmZmZkICAgICAgLyogU2hhcmVkIG9iamVjdCB0byBsb2FkIGJlZm9yZSBzZWxmICovCisrI2RlZmluZSBEVF9GSUxURVIgICAgICAgMHg3ZmZmZmZmZiAgICAgIC8qIFNoYXJlZCBvYmplY3QgdG8gZ2V0IHZhbHVlcyBmcm9tICovCisrI2RlZmluZSBEVF9FWFRSQVRBR0lEWCh0YWcpCSgoRWxmMzJfV29yZCktKChFbGYzMl9Td29yZCkgKHRhZykgPDwxPj4xKS0xKQorKyNkZWZpbmUgRFRfRVhUUkFOVU0JMworKworKy8qIFZhbHVlcyBvZiBgZF91bi5kX3ZhbCcgaW4gdGhlIERUX0ZMQUdTIGVudHJ5LiAgKi8KKysjZGVmaW5lIERGX09SSUdJTgkweDAwMDAwMDAxCS8qIE9iamVjdCBtYXkgdXNlIERGX09SSUdJTiAqLworKyNkZWZpbmUgREZfU1lNQk9MSUMJMHgwMDAwMDAwMgkvKiBTeW1ib2wgcmVzb2x1dGlvbnMgc3RhcnRzIGhlcmUgKi8KKysjZGVmaW5lIERGX1RFWFRSRUwJMHgwMDAwMDAwNAkvKiBPYmplY3QgY29udGFpbnMgdGV4dCByZWxvY2F0aW9ucyAqLworKyNkZWZpbmUgREZfQklORF9OT1cJMHgwMDAwMDAwOAkvKiBObyBsYXp5IGJpbmRpbmcgZm9yIHRoaXMgb2JqZWN0ICovCisrI2RlZmluZSBERl9TVEFUSUNfVExTCTB4MDAwMDAwMTAJLyogTW9kdWxlIHVzZXMgdGhlIHN0YXRpYyBUTFMgbW9kZWwgKi8KKysKKysvKiBTdGF0ZSBmbGFncyBzZWxlY3RhYmxlIGluIHRoZSBgZF91bi5kX3ZhbCcgZWxlbWVudCBvZiB0aGUgRFRfRkxBR1NfMQorKyAgIGVudHJ5IGluIHRoZSBkeW5hbWljIHNlY3Rpb24uICAqLworKyNkZWZpbmUgREZfMV9OT1cJMHgwMDAwMDAwMQkvKiBTZXQgUlRMRF9OT1cgZm9yIHRoaXMgb2JqZWN0LiAgKi8KKysjZGVmaW5lIERGXzFfR0xPQkFMCTB4MDAwMDAwMDIJLyogU2V0IFJUTERfR0xPQkFMIGZvciB0aGlzIG9iamVjdC4gICovCisrI2RlZmluZSBERl8xX0dST1VQCTB4MDAwMDAwMDQJLyogU2V0IFJUTERfR1JPVVAgZm9yIHRoaXMgb2JqZWN0LiAgKi8KKysjZGVmaW5lIERGXzFfTk9ERUxFVEUJMHgwMDAwMDAwOAkvKiBTZXQgUlRMRF9OT0RFTEVURSBmb3IgdGhpcyBvYmplY3QuKi8KKysjZGVmaW5lIERGXzFfTE9BREZMVFIJMHgwMDAwMDAxMAkvKiBUcmlnZ2VyIGZpbHRlZSBsb2FkaW5nIGF0IHJ1bnRpbWUuKi8KKysjZGVmaW5lIERGXzFfSU5JVEZJUlNUCTB4MDAwMDAwMjAJLyogU2V0IFJUTERfSU5JVEZJUlNUIGZvciB0aGlzIG9iamVjdCovCisrI2RlZmluZSBERl8xX05PT1BFTgkweDAwMDAwMDQwCS8qIFNldCBSVExEX05PT1BFTiBmb3IgdGhpcyBvYmplY3QuICAqLworKyNkZWZpbmUgREZfMV9PUklHSU4JMHgwMDAwMDA4MAkvKiAkT1JJR0lOIG11c3QgYmUgaGFuZGxlZC4gICovCisrI2RlZmluZSBERl8xX0RJUkVDVAkweDAwMDAwMTAwCS8qIERpcmVjdCBiaW5kaW5nIGVuYWJsZWQuICAqLworKyNkZWZpbmUgREZfMV9UUkFOUwkweDAwMDAwMjAwCisrI2RlZmluZSBERl8xX0lOVEVSUE9TRQkweDAwMDAwNDAwCS8qIE9iamVjdCBpcyB1c2VkIHRvIGludGVycG9zZS4gICovCisrI2RlZmluZSBERl8xX05PREVGTElCCTB4MDAwMDA4MDAJLyogSWdub3JlIGRlZmF1bHQgbGliIHNlYXJjaCBwYXRoLiAgKi8KKysjZGVmaW5lIERGXzFfTk9EVU1QCTB4MDAwMDEwMDAJLyogT2JqZWN0IGNhbid0IGJlIGRsZHVtcCdlZC4gICovCisrI2RlZmluZSBERl8xX0NPTkZBTFQJMHgwMDAwMjAwMAkvKiBDb25maWd1cmF0aW9uIGFsdGVybmF0aXZlIGNyZWF0ZWQuKi8KKysjZGVmaW5lIERGXzFfRU5ERklMVEVFCTB4MDAwMDQwMDAJLyogRmlsdGVlIHRlcm1pbmF0ZXMgZmlsdGVycyBzZWFyY2guICovCisrI2RlZmluZQlERl8xX0RJU1BSRUxETkUJMHgwMDAwODAwMAkvKiBEaXNwIHJlbG9jIGFwcGxpZWQgYXQgYnVpbGQgdGltZS4gKi8KKysjZGVmaW5lCURGXzFfRElTUFJFTFBORAkweDAwMDEwMDAwCS8qIERpc3AgcmVsb2MgYXBwbGllZCBhdCBydW4tdGltZS4gICovCisrCisrLyogRmxhZ3MgZm9yIHRoZSBmZWF0dXJlIHNlbGVjdGlvbiBpbiBEVF9GRUFUVVJFXzEuICAqLworKyNkZWZpbmUgRFRGXzFfUEFSSU5JVAkweDAwMDAwMDAxCisrI2RlZmluZSBEVEZfMV9DT05GRVhQCTB4MDAwMDAwMDIKKysKKysvKiBGbGFncyBpbiB0aGUgRFRfUE9TRkxBR18xIGVudHJ5IGVmZmVjdGluZyBvbmx5IHRoZSBuZXh0IERUXyogZW50cnkuICAqLworKyNkZWZpbmUgREZfUDFfTEFaWUxPQUQJMHgwMDAwMDAwMQkvKiBMYXp5bG9hZCBmb2xsb3dpbmcgb2JqZWN0LiAgKi8KKysjZGVmaW5lIERGX1AxX0dST1VQUEVSTQkweDAwMDAwMDAyCS8qIFN5bWJvbHMgZnJvbSBuZXh0IG9iamVjdCBhcmUgbm90CisrCQkJCQkgICBnZW5lcmFsbHkgYXZhaWxhYmxlLiAgKi8KKysKKysvKiBWZXJzaW9uIGRlZmluaXRpb24gc2VjdGlvbnMuICAqLworKworK3R5cGVkZWYgc3RydWN0CisreworKyAgRWxmMzJfSGFsZgl2ZF92ZXJzaW9uOwkJLyogVmVyc2lvbiByZXZpc2lvbiAqLworKyAgRWxmMzJfSGFsZgl2ZF9mbGFnczsJCS8qIFZlcnNpb24gaW5mb3JtYXRpb24gKi8KKysgIEVsZjMyX0hhbGYJdmRfbmR4OwkJCS8qIFZlcnNpb24gSW5kZXggKi8KKysgIEVsZjMyX0hhbGYJdmRfY250OwkJCS8qIE51bWJlciBvZiBhc3NvY2lhdGVkIGF1eCBlbnRyaWVzICovCisrICBFbGYzMl9Xb3JkCXZkX2hhc2g7CQkvKiBWZXJzaW9uIG5hbWUgaGFzaCB2YWx1ZSAqLworKyAgRWxmMzJfV29yZAl2ZF9hdXg7CQkJLyogT2Zmc2V0IGluIGJ5dGVzIHRvIHZlcmRhdXggYXJyYXkgKi8KKysgIEVsZjMyX1dvcmQJdmRfbmV4dDsJCS8qIE9mZnNldCBpbiBieXRlcyB0byBuZXh0IHZlcmRlZgorKwkJCQkJICAgZW50cnkgKi8KKyt9IEVsZjMyX1ZlcmRlZjsKKysKKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIEVsZjY0X0hhbGYJdmRfdmVyc2lvbjsJCS8qIFZlcnNpb24gcmV2aXNpb24gKi8KKysgIEVsZjY0X0hhbGYJdmRfZmxhZ3M7CQkvKiBWZXJzaW9uIGluZm9ybWF0aW9uICovCisrICBFbGY2NF9IYWxmCXZkX25keDsJCQkvKiBWZXJzaW9uIEluZGV4ICovCisrICBFbGY2NF9IYWxmCXZkX2NudDsJCQkvKiBOdW1iZXIgb2YgYXNzb2NpYXRlZCBhdXggZW50cmllcyAqLworKyAgRWxmNjRfV29yZAl2ZF9oYXNoOwkJLyogVmVyc2lvbiBuYW1lIGhhc2ggdmFsdWUgKi8KKysgIEVsZjY0X1dvcmQJdmRfYXV4OwkJCS8qIE9mZnNldCBpbiBieXRlcyB0byB2ZXJkYXV4IGFycmF5ICovCisrICBFbGY2NF9Xb3JkCXZkX25leHQ7CQkvKiBPZmZzZXQgaW4gYnl0ZXMgdG8gbmV4dCB2ZXJkZWYKKysJCQkJCSAgIGVudHJ5ICovCisrfSBFbGY2NF9WZXJkZWY7CisrCisrCisrLyogTGVnYWwgdmFsdWVzIGZvciB2ZF92ZXJzaW9uICh2ZXJzaW9uIHJldmlzaW9uKS4gICovCisrI2RlZmluZSBWRVJfREVGX05PTkUJMAkJLyogTm8gdmVyc2lvbiAqLworKyNkZWZpbmUgVkVSX0RFRl9DVVJSRU5UCTEJCS8qIEN1cnJlbnQgdmVyc2lvbiAqLworKyNkZWZpbmUgVkVSX0RFRl9OVU0JMgkJLyogR2l2ZW4gdmVyc2lvbiBudW1iZXIgKi8KKysKKysvKiBMZWdhbCB2YWx1ZXMgZm9yIHZkX2ZsYWdzICh2ZXJzaW9uIGluZm9ybWF0aW9uIGZsYWdzKS4gICovCisrI2RlZmluZSBWRVJfRkxHX0JBU0UJMHgxCQkvKiBWZXJzaW9uIGRlZmluaXRpb24gb2YgZmlsZSBpdHNlbGYgKi8KKysjZGVmaW5lIFZFUl9GTEdfV0VBSwkweDIJCS8qIFdlYWsgdmVyc2lvbiBpZGVudGlmaWVyICovCisrCisrLyogVmVyc3ltIHN5bWJvbCBpbmRleCB2YWx1ZXMuICAqLworKyNkZWZpbmUJVkVSX05EWF9MT0NBTAkJMAkvKiBTeW1ib2wgaXMgbG9jYWwuICAqLworKyNkZWZpbmUJVkVSX05EWF9HTE9CQUwJCTEJLyogU3ltYm9sIGlzIGdsb2JhbC4gICovCisrI2RlZmluZQlWRVJfTkRYX0xPUkVTRVJWRQkweGZmMDAJLyogQmVnaW5uaW5nIG9mIHJlc2VydmVkIGVudHJpZXMuICAqLworKyNkZWZpbmUJVkVSX05EWF9FTElNSU5BVEUJMHhmZjAxCS8qIFN5bWJvbCBpcyB0byBiZSBlbGltaW5hdGVkLiAgKi8KKysKKysvKiBBdXhpYWxpYXJ5IHZlcnNpb24gaW5mb3JtYXRpb24uICAqLworKworK3R5cGVkZWYgc3RydWN0CisreworKyAgRWxmMzJfV29yZAl2ZGFfbmFtZTsJCS8qIFZlcnNpb24gb3IgZGVwZW5kZW5jeSBuYW1lcyAqLworKyAgRWxmMzJfV29yZAl2ZGFfbmV4dDsJCS8qIE9mZnNldCBpbiBieXRlcyB0byBuZXh0IHZlcmRhdXgKKysJCQkJCSAgIGVudHJ5ICovCisrfSBFbGYzMl9WZXJkYXV4OworKworK3R5cGVkZWYgc3RydWN0CisreworKyAgRWxmNjRfV29yZAl2ZGFfbmFtZTsJCS8qIFZlcnNpb24gb3IgZGVwZW5kZW5jeSBuYW1lcyAqLworKyAgRWxmNjRfV29yZAl2ZGFfbmV4dDsJCS8qIE9mZnNldCBpbiBieXRlcyB0byBuZXh0IHZlcmRhdXgKKysJCQkJCSAgIGVudHJ5ICovCisrfSBFbGY2NF9WZXJkYXV4OworKworKworKy8qIFZlcnNpb24gZGVwZW5kZW5jeSBzZWN0aW9uLiAgKi8KKysKKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIEVsZjMyX0hhbGYJdm5fdmVyc2lvbjsJCS8qIFZlcnNpb24gb2Ygc3RydWN0dXJlICovCisrICBFbGYzMl9IYWxmCXZuX2NudDsJCQkvKiBOdW1iZXIgb2YgYXNzb2NpYXRlZCBhdXggZW50cmllcyAqLworKyAgRWxmMzJfV29yZAl2bl9maWxlOwkJLyogT2Zmc2V0IG9mIGZpbGVuYW1lIGZvciB0aGlzCisrCQkJCQkgICBkZXBlbmRlbmN5ICovCisrICBFbGYzMl9Xb3JkCXZuX2F1eDsJCQkvKiBPZmZzZXQgaW4gYnl0ZXMgdG8gdmVybmF1eCBhcnJheSAqLworKyAgRWxmMzJfV29yZAl2bl9uZXh0OwkJLyogT2Zmc2V0IGluIGJ5dGVzIHRvIG5leHQgdmVybmVlZAorKwkJCQkJICAgZW50cnkgKi8KKyt9IEVsZjMyX1Zlcm5lZWQ7CisrCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBFbGY2NF9IYWxmCXZuX3ZlcnNpb247CQkvKiBWZXJzaW9uIG9mIHN0cnVjdHVyZSAqLworKyAgRWxmNjRfSGFsZgl2bl9jbnQ7CQkJLyogTnVtYmVyIG9mIGFzc29jaWF0ZWQgYXV4IGVudHJpZXMgKi8KKysgIEVsZjY0X1dvcmQJdm5fZmlsZTsJCS8qIE9mZnNldCBvZiBmaWxlbmFtZSBmb3IgdGhpcworKwkJCQkJICAgZGVwZW5kZW5jeSAqLworKyAgRWxmNjRfV29yZAl2bl9hdXg7CQkJLyogT2Zmc2V0IGluIGJ5dGVzIHRvIHZlcm5hdXggYXJyYXkgKi8KKysgIEVsZjY0X1dvcmQJdm5fbmV4dDsJCS8qIE9mZnNldCBpbiBieXRlcyB0byBuZXh0IHZlcm5lZWQKKysJCQkJCSAgIGVudHJ5ICovCisrfSBFbGY2NF9WZXJuZWVkOworKworKworKy8qIExlZ2FsIHZhbHVlcyBmb3Igdm5fdmVyc2lvbiAodmVyc2lvbiByZXZpc2lvbikuICAqLworKyNkZWZpbmUgVkVSX05FRURfTk9ORQkgMAkJLyogTm8gdmVyc2lvbiAqLworKyNkZWZpbmUgVkVSX05FRURfQ1VSUkVOVCAxCQkvKiBDdXJyZW50IHZlcnNpb24gKi8KKysjZGVmaW5lIFZFUl9ORUVEX05VTQkgMgkJLyogR2l2ZW4gdmVyc2lvbiBudW1iZXIgKi8KKysKKysvKiBBdXhpbGlhcnkgbmVlZGVkIHZlcnNpb24gaW5mb3JtYXRpb24uICAqLworKworK3R5cGVkZWYgc3RydWN0CisreworKyAgRWxmMzJfV29yZAl2bmFfaGFzaDsJCS8qIEhhc2ggdmFsdWUgb2YgZGVwZW5kZW5jeSBuYW1lICovCisrICBFbGYzMl9IYWxmCXZuYV9mbGFnczsJCS8qIERlcGVuZGVuY3kgc3BlY2lmaWMgaW5mb3JtYXRpb24gKi8KKysgIEVsZjMyX0hhbGYJdm5hX290aGVyOwkJLyogVW51c2VkICovCisrICBFbGYzMl9Xb3JkCXZuYV9uYW1lOwkJLyogRGVwZW5kZW5jeSBuYW1lIHN0cmluZyBvZmZzZXQgKi8KKysgIEVsZjMyX1dvcmQJdm5hX25leHQ7CQkvKiBPZmZzZXQgaW4gYnl0ZXMgdG8gbmV4dCB2ZXJuYXV4CisrCQkJCQkgICBlbnRyeSAqLworK30gRWxmMzJfVmVybmF1eDsKKysKKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIEVsZjY0X1dvcmQJdm5hX2hhc2g7CQkvKiBIYXNoIHZhbHVlIG9mIGRlcGVuZGVuY3kgbmFtZSAqLworKyAgRWxmNjRfSGFsZgl2bmFfZmxhZ3M7CQkvKiBEZXBlbmRlbmN5IHNwZWNpZmljIGluZm9ybWF0aW9uICovCisrICBFbGY2NF9IYWxmCXZuYV9vdGhlcjsJCS8qIFVudXNlZCAqLworKyAgRWxmNjRfV29yZAl2bmFfbmFtZTsJCS8qIERlcGVuZGVuY3kgbmFtZSBzdHJpbmcgb2Zmc2V0ICovCisrICBFbGY2NF9Xb3JkCXZuYV9uZXh0OwkJLyogT2Zmc2V0IGluIGJ5dGVzIHRvIG5leHQgdmVybmF1eAorKwkJCQkJICAgZW50cnkgKi8KKyt9IEVsZjY0X1Zlcm5hdXg7CisrCisrCisrLyogTGVnYWwgdmFsdWVzIGZvciB2bmFfZmxhZ3MuICAqLworKyNkZWZpbmUgVkVSX0ZMR19XRUFLCTB4MgkJLyogV2VhayB2ZXJzaW9uIGlkZW50aWZpZXIgKi8KKysKKysKKysvKiBBdXhpbGlhcnkgdmVjdG9yLiAgKi8KKysKKysvKiBUaGlzIHZlY3RvciBpcyBub3JtYWxseSBvbmx5IHVzZWQgYnkgdGhlIHByb2dyYW0gaW50ZXJwcmV0ZXIuICBUaGUKKysgICB1c3VhbCBkZWZpbml0aW9uIGluIGFuIEFCSSBzdXBwbGVtZW50IHVzZXMgdGhlIG5hbWUgYXV4dl90LiAgVGhlCisrICAgdmVjdG9yIGlzIG5vdCB1c3VhbGx5IGRlZmluZWQgaW4gYSBzdGFuZGFyZCA8ZWxmLmg+IGZpbGUsIGJ1dCBpdAorKyAgIGNhbid0IGh1cnQuICBXZSByZW5hbWUgaXQgdG8gYXZvaWQgY29uZmxpY3RzLiAgVGhlIHNpemVzIG9mIHRoZXNlCisrICAgdHlwZXMgYXJlIGFuIGFycmFuZ2VtZW50IGJldHdlZW4gdGhlIGV4ZWMgc2VydmVyIGFuZCB0aGUgcHJvZ3JhbQorKyAgIGludGVycHJldGVyLCBzbyB3ZSBkb24ndCBmdWxseSBzcGVjaWZ5IHRoZW0gaGVyZS4gICovCisrCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICB1aW50MzJfdCBhX3R5cGU7CQkvKiBFbnRyeSB0eXBlICovCisrICB1bmlvbgorKyAgICB7CisrICAgICAgdWludDMyX3QgYV92YWw7CQkvKiBJbnRlZ2VyIHZhbHVlICovCisrICAgICAgLyogV2UgdXNlIHRvIGhhdmUgcG9pbnRlciBlbGVtZW50cyBhZGRlZCBoZXJlLiAgV2UgY2Fubm90IGRvIHRoYXQsCisrCSB0aG91Z2gsIHNpbmNlIGl0IGRvZXMgbm90IHdvcmsgd2hlbiB1c2luZyAzMi1iaXQgZGVmaW5pdGlvbnMKKysJIG9uIDY0LWJpdCBwbGF0Zm9ybXMgYW5kIHZpY2UgdmVyc2EuICAqLworKyAgICB9IGFfdW47CisrfSBFbGYzMl9hdXh2X3Q7CisrCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICB1aW50NjRfdCBhX3R5cGU7CQkvKiBFbnRyeSB0eXBlICovCisrICB1bmlvbgorKyAgICB7CisrICAgICAgdWludDY0X3QgYV92YWw7CQkvKiBJbnRlZ2VyIHZhbHVlICovCisrICAgICAgLyogV2UgdXNlIHRvIGhhdmUgcG9pbnRlciBlbGVtZW50cyBhZGRlZCBoZXJlLiAgV2UgY2Fubm90IGRvIHRoYXQsCisrCSB0aG91Z2gsIHNpbmNlIGl0IGRvZXMgbm90IHdvcmsgd2hlbiB1c2luZyAzMi1iaXQgZGVmaW5pdGlvbnMKKysJIG9uIDY0LWJpdCBwbGF0Zm9ybXMgYW5kIHZpY2UgdmVyc2EuICAqLworKyAgICB9IGFfdW47CisrfSBFbGY2NF9hdXh2X3Q7CisrCisrLyogTGVnYWwgdmFsdWVzIGZvciBhX3R5cGUgKGVudHJ5IHR5cGUpLiAgKi8KKysKKysjZGVmaW5lIEFUX05VTEwJCTAJCS8qIEVuZCBvZiB2ZWN0b3IgKi8KKysjZGVmaW5lIEFUX0lHTk9SRQkxCQkvKiBFbnRyeSBzaG91bGQgYmUgaWdub3JlZCAqLworKyNkZWZpbmUgQVRfRVhFQ0ZECTIJCS8qIEZpbGUgZGVzY3JpcHRvciBvZiBwcm9ncmFtICovCisrI2RlZmluZSBBVF9QSERSCQkzCQkvKiBQcm9ncmFtIGhlYWRlcnMgZm9yIHByb2dyYW0gKi8KKysjZGVmaW5lIEFUX1BIRU5UCTQJCS8qIFNpemUgb2YgcHJvZ3JhbSBoZWFkZXIgZW50cnkgKi8KKysjZGVmaW5lIEFUX1BITlVNCTUJCS8qIE51bWJlciBvZiBwcm9ncmFtIGhlYWRlcnMgKi8KKysjZGVmaW5lIEFUX1BBR0VTWgk2CQkvKiBTeXN0ZW0gcGFnZSBzaXplICovCisrI2RlZmluZSBBVF9CQVNFCQk3CQkvKiBCYXNlIGFkZHJlc3Mgb2YgaW50ZXJwcmV0ZXIgKi8KKysjZGVmaW5lIEFUX0ZMQUdTCTgJCS8qIEZsYWdzICovCisrI2RlZmluZSBBVF9FTlRSWQk5CQkvKiBFbnRyeSBwb2ludCBvZiBwcm9ncmFtICovCisrI2RlZmluZSBBVF9OT1RFTEYJMTAJCS8qIFByb2dyYW0gaXMgbm90IEVMRiAqLworKyNkZWZpbmUgQVRfVUlECQkxMQkJLyogUmVhbCB1aWQgKi8KKysjZGVmaW5lIEFUX0VVSUQJCTEyCQkvKiBFZmZlY3RpdmUgdWlkICovCisrI2RlZmluZSBBVF9HSUQJCTEzCQkvKiBSZWFsIGdpZCAqLworKyNkZWZpbmUgQVRfRUdJRAkJMTQJCS8qIEVmZmVjdGl2ZSBnaWQgKi8KKysjZGVmaW5lIEFUX0NMS1RDSwkxNwkJLyogRnJlcXVlbmN5IG9mIHRpbWVzKCkgKi8KKysKKysvKiBTb21lIG1vcmUgc3BlY2lhbCBhX3R5cGUgdmFsdWVzIGRlc2NyaWJpbmcgdGhlIGhhcmR3YXJlLiAgKi8KKysjZGVmaW5lIEFUX1BMQVRGT1JNCTE1CQkvKiBTdHJpbmcgaWRlbnRpZnlpbmcgcGxhdGZvcm0uICAqLworKyNkZWZpbmUgQVRfSFdDQVAJMTYJCS8qIE1hY2hpbmUgZGVwZW5kZW50IGhpbnRzIGFib3V0CisrCQkJCQkgICBwcm9jZXNzb3IgY2FwYWJpbGl0aWVzLiAgKi8KKysKKysvKiBUaGlzIGVudHJ5IGdpdmVzIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEZQVSBpbml0aWFsaXphdGlvbgorKyAgIHBlcmZvcm1lZCBieSB0aGUga2VybmVsLiAgKi8KKysjZGVmaW5lIEFUX0ZQVUNXCTE4CQkvKiBVc2VkIEZQVSBjb250cm9sIHdvcmQuICAqLworKworKy8qIENhY2hlIGJsb2NrIHNpemVzLiAgKi8KKysjZGVmaW5lIEFUX0RDQUNIRUJTSVpFCTE5CQkvKiBEYXRhIGNhY2hlIGJsb2NrIHNpemUuICAqLworKyNkZWZpbmUgQVRfSUNBQ0hFQlNJWkUJMjAJCS8qIEluc3RydWN0aW9uIGNhY2hlIGJsb2NrIHNpemUuICAqLworKyNkZWZpbmUgQVRfVUNBQ0hFQlNJWkUJMjEJCS8qIFVuaWZpZWQgY2FjaGUgYmxvY2sgc2l6ZS4gICovCisrCisrLyogQSBzcGVjaWFsIGlnbm9yZWQgdmFsdWUgZm9yIFBQQywgdXNlZCBieSB0aGUga2VybmVsIHRvIGNvbnRyb2wgdGhlCisrICAgaW50ZXJwcmV0YXRpb24gb2YgdGhlIEFVWFYuIE11c3QgYmUgPiAxNi4gICovCisrI2RlZmluZSBBVF9JR05PUkVQUEMJMjIJCS8qIEVudHJ5IHNob3VsZCBiZSBpZ25vcmVkLiAgKi8KKysKKysjZGVmaW5lCUFUX1NFQ1VSRQkyMwkJLyogQm9vbGVhbiwgd2FzIGV4ZWMgc2V0dWlkLWxpa2U/ICAqLworKworKyNkZWZpbmUgQVRfQkFTRV9QTEFURk9STSAyNAkJLyogU3RyaW5nIGlkZW50aWZ5aW5nIHJlYWwgcGxhdGZvcm1zLiovCisrCisrI2RlZmluZSBBVF9SQU5ET00JMjUJCS8qIEFkZHJlc3Mgb2YgMTYgcmFuZG9tIGJ5dGVzLiAgKi8KKysKKysjZGVmaW5lIEFUX0VYRUNGTgkzMQkJLyogRmlsZW5hbWUgb2YgZXhlY3V0YWJsZS4gICovCisrCisrLyogUG9pbnRlciB0byB0aGUgZ2xvYmFsIHN5c3RlbSBwYWdlIHVzZWQgZm9yIHN5c3RlbSBjYWxscyBhbmQgb3RoZXIKKysgICBuaWNlIHRoaW5ncy4gICovCisrI2RlZmluZSBBVF9TWVNJTkZPCTMyCisrI2RlZmluZSBBVF9TWVNJTkZPX0VIRFIJMzMKKysKKysvKiBTaGFwZXMgb2YgdGhlIGNhY2hlcy4gIEJpdHMgMC0zIGNvbnRhaW5zIGFzc29jaWF0aXZpdHk7IGJpdHMgNC03IGNvbnRhaW5zCisrICAgbG9nMiBvZiBsaW5lIHNpemU7IG1hc2sgdGhvc2UgdG8gZ2V0IGNhY2hlIHNpemUuICAqLworKyNkZWZpbmUgQVRfTDFJX0NBQ0hFU0hBUEUJMzQKKysjZGVmaW5lIEFUX0wxRF9DQUNIRVNIQVBFCTM1CisrI2RlZmluZSBBVF9MMl9DQUNIRVNIQVBFCTM2CisrI2RlZmluZSBBVF9MM19DQUNIRVNIQVBFCTM3CisrCisrLyogTm90ZSBzZWN0aW9uIGNvbnRlbnRzLiAgRWFjaCBlbnRyeSBpbiB0aGUgbm90ZSBzZWN0aW9uIGJlZ2lucyB3aXRoCisrICAgYSBoZWFkZXIgb2YgYSBmaXhlZCBmb3JtLiAgKi8KKysKKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIEVsZjMyX1dvcmQgbl9uYW1lc3o7CQkJLyogTGVuZ3RoIG9mIHRoZSBub3RlJ3MgbmFtZS4gICovCisrICBFbGYzMl9Xb3JkIG5fZGVzY3N6OwkJCS8qIExlbmd0aCBvZiB0aGUgbm90ZSdzIGRlc2NyaXB0b3IuICAqLworKyAgRWxmMzJfV29yZCBuX3R5cGU7CQkJLyogVHlwZSBvZiB0aGUgbm90ZS4gICovCisrfSBFbGYzMl9OaGRyOworKworK3R5cGVkZWYgc3RydWN0CisreworKyAgRWxmNjRfV29yZCBuX25hbWVzejsJCQkvKiBMZW5ndGggb2YgdGhlIG5vdGUncyBuYW1lLiAgKi8KKysgIEVsZjY0X1dvcmQgbl9kZXNjc3o7CQkJLyogTGVuZ3RoIG9mIHRoZSBub3RlJ3MgZGVzY3JpcHRvci4gICovCisrICBFbGY2NF9Xb3JkIG5fdHlwZTsJCQkvKiBUeXBlIG9mIHRoZSBub3RlLiAgKi8KKyt9IEVsZjY0X05oZHI7CisrCisrLyogS25vd24gbmFtZXMgb2Ygbm90ZXMuICAqLworKworKy8qIFNvbGFyaXMgZW50cmllcyBpbiB0aGUgbm90ZSBzZWN0aW9uIGhhdmUgdGhpcyBuYW1lLiAgKi8KKysjZGVmaW5lIEVMRl9OT1RFX1NPTEFSSVMJIlNVTlcgU29sYXJpcyIKKysKKysvKiBOb3RlIGVudHJpZXMgZm9yIEdOVSBzeXN0ZW1zIGhhdmUgdGhpcyBuYW1lLiAgKi8KKysjZGVmaW5lIEVMRl9OT1RFX0dOVQkJIkdOVSIKKysKKysKKysvKiBEZWZpbmVkIHR5cGVzIG9mIG5vdGVzIGZvciBTb2xhcmlzLiAgKi8KKysKKysvKiBWYWx1ZSBvZiBkZXNjcmlwdG9yIChvbmUgd29yZCkgaXMgZGVzaXJlZCBwYWdlc2l6ZSBmb3IgdGhlIGJpbmFyeS4gICovCisrI2RlZmluZSBFTEZfTk9URV9QQUdFU0laRV9ISU5UCTEKKysKKysKKysvKiBEZWZpbmVkIG5vdGUgdHlwZXMgZm9yIEdOVSBzeXN0ZW1zLiAgKi8KKysKKysvKiBBQkkgaW5mb3JtYXRpb24uICBUaGUgZGVzY3JpcHRvciBjb25zaXN0cyBvZiB3b3JkczoKKysgICB3b3JkIDA6IE9TIGRlc2NyaXB0b3IKKysgICB3b3JkIDE6IG1ham9yIHZlcnNpb24gb2YgdGhlIEFCSQorKyAgIHdvcmQgMjogbWlub3IgdmVyc2lvbiBvZiB0aGUgQUJJCisrICAgd29yZCAzOiBzdWJtaW5vciB2ZXJzaW9uIG9mIHRoZSBBQkkKKysqLworKyNkZWZpbmUgTlRfR05VX0FCSV9UQUcJMQorKyNkZWZpbmUgRUxGX05PVEVfQUJJCU5UX0dOVV9BQklfVEFHIC8qIE9sZCBuYW1lLiAgKi8KKysKKysvKiBLbm93biBPU2VzLiAgVGhlc2UgdmFsdWVzIGNhbiBhcHBlYXIgaW4gd29yZCAwIG9mIGFuCisrICAgTlRfR05VX0FCSV9UQUcgbm90ZSBzZWN0aW9uIGVudHJ5LiAgKi8KKysjZGVmaW5lIEVMRl9OT1RFX09TX0xJTlVYCTAKKysjZGVmaW5lIEVMRl9OT1RFX09TX0dOVQkJMQorKyNkZWZpbmUgRUxGX05PVEVfT1NfU09MQVJJUzIJMgorKyNkZWZpbmUgRUxGX05PVEVfT1NfRlJFRUJTRAkzCisrCisrLyogU3ludGhldGljIGh3Y2FwIGluZm9ybWF0aW9uLiAgVGhlIGRlc2NyaXB0b3IgYmVnaW5zIHdpdGggdHdvIHdvcmRzOgorKyAgIHdvcmQgMDogbnVtYmVyIG9mIGVudHJpZXMKKysgICB3b3JkIDE6IGJpdG1hc2sgb2YgZW5hYmxlZCBlbnRyaWVzCisrICAgVGhlbiBmb2xsb3cgdmFyaWFibGUtbGVuZ3RoIGVudHJpZXMsIG9uZSBieXRlIGZvbGxvd2VkIGJ5IGEKKysgICAnXDAnLXRlcm1pbmF0ZWQgaHdjYXAgbmFtZSBzdHJpbmcuICBUaGUgYnl0ZSBnaXZlcyB0aGUgYml0CisrICAgbnVtYmVyIHRvIHRlc3QgaWYgZW5hYmxlZCwgKDFVIDw8IGJpdCkgJiBiaXRtYXNrLiAgKi8KKysjZGVmaW5lIE5UX0dOVV9IV0NBUAkyCisrCisrLyogQnVpbGQgSUQgYml0cyBhcyBnZW5lcmF0ZWQgYnkgbGQgLS1idWlsZC1pZC4KKysgICBUaGUgZGVzY3JpcHRvciBjb25zaXN0cyBvZiBhbnkgbm9uemVybyBudW1iZXIgb2YgYnl0ZXMuICAqLworKyNkZWZpbmUgTlRfR05VX0JVSUxEX0lECTMKKysKKysvKiBWZXJzaW9uIG5vdGUgZ2VuZXJhdGVkIGJ5IEdOVSBnb2xkIGNvbnRhaW5pbmcgYSB2ZXJzaW9uIHN0cmluZy4gICovCisrI2RlZmluZSBOVF9HTlVfR09MRF9WRVJTSU9OCTQKKysKKysKKysvKiBNb3ZlIHJlY29yZHMuICAqLworK3R5cGVkZWYgc3RydWN0CisreworKyAgRWxmMzJfWHdvcmQgbV92YWx1ZTsJCS8qIFN5bWJvbCB2YWx1ZS4gICovCisrICBFbGYzMl9Xb3JkIG1faW5mbzsJCS8qIFNpemUgYW5kIGluZGV4LiAgKi8KKysgIEVsZjMyX1dvcmQgbV9wb2Zmc2V0OwkJLyogU3ltYm9sIG9mZnNldC4gICovCisrICBFbGYzMl9IYWxmIG1fcmVwZWF0OwkJLyogUmVwZWF0IGNvdW50LiAgKi8KKysgIEVsZjMyX0hhbGYgbV9zdHJpZGU7CQkvKiBTdHJpZGUgaW5mby4gICovCisrfSBFbGYzMl9Nb3ZlOworKworK3R5cGVkZWYgc3RydWN0CisreworKyAgRWxmNjRfWHdvcmQgbV92YWx1ZTsJCS8qIFN5bWJvbCB2YWx1ZS4gICovCisrICBFbGY2NF9Yd29yZCBtX2luZm87CQkvKiBTaXplIGFuZCBpbmRleC4gICovCisrICBFbGY2NF9Yd29yZCBtX3BvZmZzZXQ7CS8qIFN5bWJvbCBvZmZzZXQuICAqLworKyAgRWxmNjRfSGFsZiBtX3JlcGVhdDsJCS8qIFJlcGVhdCBjb3VudC4gICovCisrICBFbGY2NF9IYWxmIG1fc3RyaWRlOwkJLyogU3RyaWRlIGluZm8uICAqLworK30gRWxmNjRfTW92ZTsKKysKKysvKiBNYWNybyB0byBjb25zdHJ1Y3QgbW92ZSByZWNvcmRzLiAgKi8KKysjZGVmaW5lIEVMRjMyX01fU1lNKGluZm8pCSgoaW5mbykgPj4gOCkKKysjZGVmaW5lIEVMRjMyX01fU0laRShpbmZvKQkoKHVuc2lnbmVkIGNoYXIpIChpbmZvKSkKKysjZGVmaW5lIEVMRjMyX01fSU5GTyhzeW0sIHNpemUpCSgoKHN5bSkgPDwgOCkgKyAodW5zaWduZWQgY2hhcikgKHNpemUpKQorKworKyNkZWZpbmUgRUxGNjRfTV9TWU0oaW5mbykJRUxGMzJfTV9TWU0gKGluZm8pCisrI2RlZmluZSBFTEY2NF9NX1NJWkUoaW5mbykJRUxGMzJfTV9TSVpFIChpbmZvKQorKyNkZWZpbmUgRUxGNjRfTV9JTkZPKHN5bSwgc2l6ZSkJRUxGMzJfTV9JTkZPIChzeW0sIHNpemUpCisrCisrCisrLyogTW90b3JvbGEgNjhrIHNwZWNpZmljIGRlZmluaXRpb25zLiAgKi8KKysKKysvKiBWYWx1ZXMgZm9yIEVsZjMyX0VoZHIuZV9mbGFncy4gICovCisrI2RlZmluZSBFRl9DUFUzMgkweDAwODEwMDAwCisrCisrLyogbTY4ayByZWxvY3MuICAqLworKworKyNkZWZpbmUgUl82OEtfTk9ORQkwCQkvKiBObyByZWxvYyAqLworKyNkZWZpbmUgUl82OEtfMzIJMQkJLyogRGlyZWN0IDMyIGJpdCAgKi8KKysjZGVmaW5lIFJfNjhLXzE2CTIJCS8qIERpcmVjdCAxNiBiaXQgICovCisrI2RlZmluZSBSXzY4S184CQkzCQkvKiBEaXJlY3QgOCBiaXQgICovCisrI2RlZmluZSBSXzY4S19QQzMyCTQJCS8qIFBDIHJlbGF0aXZlIDMyIGJpdCAqLworKyNkZWZpbmUgUl82OEtfUEMxNgk1CQkvKiBQQyByZWxhdGl2ZSAxNiBiaXQgKi8KKysjZGVmaW5lIFJfNjhLX1BDOAk2CQkvKiBQQyByZWxhdGl2ZSA4IGJpdCAqLworKyNkZWZpbmUgUl82OEtfR09UMzIJNwkJLyogMzIgYml0IFBDIHJlbGF0aXZlIEdPVCBlbnRyeSAqLworKyNkZWZpbmUgUl82OEtfR09UMTYJOAkJLyogMTYgYml0IFBDIHJlbGF0aXZlIEdPVCBlbnRyeSAqLworKyNkZWZpbmUgUl82OEtfR09UOAk5CQkvKiA4IGJpdCBQQyByZWxhdGl2ZSBHT1QgZW50cnkgKi8KKysjZGVmaW5lIFJfNjhLX0dPVDMyTwkxMAkJLyogMzIgYml0IEdPVCBvZmZzZXQgKi8KKysjZGVmaW5lIFJfNjhLX0dPVDE2TwkxMQkJLyogMTYgYml0IEdPVCBvZmZzZXQgKi8KKysjZGVmaW5lIFJfNjhLX0dPVDhPCTEyCQkvKiA4IGJpdCBHT1Qgb2Zmc2V0ICovCisrI2RlZmluZSBSXzY4S19QTFQzMgkxMwkJLyogMzIgYml0IFBDIHJlbGF0aXZlIFBMVCBhZGRyZXNzICovCisrI2RlZmluZSBSXzY4S19QTFQxNgkxNAkJLyogMTYgYml0IFBDIHJlbGF0aXZlIFBMVCBhZGRyZXNzICovCisrI2RlZmluZSBSXzY4S19QTFQ4CTE1CQkvKiA4IGJpdCBQQyByZWxhdGl2ZSBQTFQgYWRkcmVzcyAqLworKyNkZWZpbmUgUl82OEtfUExUMzJPCTE2CQkvKiAzMiBiaXQgUExUIG9mZnNldCAqLworKyNkZWZpbmUgUl82OEtfUExUMTZPCTE3CQkvKiAxNiBiaXQgUExUIG9mZnNldCAqLworKyNkZWZpbmUgUl82OEtfUExUOE8JMTgJCS8qIDggYml0IFBMVCBvZmZzZXQgKi8KKysjZGVmaW5lIFJfNjhLX0NPUFkJMTkJCS8qIENvcHkgc3ltYm9sIGF0IHJ1bnRpbWUgKi8KKysjZGVmaW5lIFJfNjhLX0dMT0JfREFUCTIwCQkvKiBDcmVhdGUgR09UIGVudHJ5ICovCisrI2RlZmluZSBSXzY4S19KTVBfU0xPVAkyMQkJLyogQ3JlYXRlIFBMVCBlbnRyeSAqLworKyNkZWZpbmUgUl82OEtfUkVMQVRJVkUJMjIJCS8qIEFkanVzdCBieSBwcm9ncmFtIGJhc2UgKi8KKysjZGVmaW5lIFJfNjhLX1RMU19HRDMyICAgICAgMjUgICAgICAgICAgLyogMzIgYml0IEdPVCBvZmZzZXQgZm9yIEdEICovCisrI2RlZmluZSBSXzY4S19UTFNfR0QxNiAgICAgIDI2ICAgICAgICAgIC8qIDE2IGJpdCBHT1Qgb2Zmc2V0IGZvciBHRCAqLworKyNkZWZpbmUgUl82OEtfVExTX0dEOCAgICAgICAyNyAgICAgICAgICAvKiA4IGJpdCBHT1Qgb2Zmc2V0IGZvciBHRCAqLworKyNkZWZpbmUgUl82OEtfVExTX0xETTMyICAgICAyOCAgICAgICAgICAvKiAzMiBiaXQgR09UIG9mZnNldCBmb3IgTERNICovCisrI2RlZmluZSBSXzY4S19UTFNfTERNMTYgICAgIDI5ICAgICAgICAgIC8qIDE2IGJpdCBHT1Qgb2Zmc2V0IGZvciBMRE0gKi8KKysjZGVmaW5lIFJfNjhLX1RMU19MRE04ICAgICAgMzAgICAgICAgICAgLyogOCBiaXQgR09UIG9mZnNldCBmb3IgTERNICovCisrI2RlZmluZSBSXzY4S19UTFNfTERPMzIgICAgIDMxICAgICAgICAgIC8qIDMyIGJpdCBtb2R1bGUtcmVsYXRpdmUgb2Zmc2V0ICovCisrI2RlZmluZSBSXzY4S19UTFNfTERPMTYgICAgIDMyICAgICAgICAgIC8qIDE2IGJpdCBtb2R1bGUtcmVsYXRpdmUgb2Zmc2V0ICovCisrI2RlZmluZSBSXzY4S19UTFNfTERPOCAgICAgIDMzICAgICAgICAgIC8qIDggYml0IG1vZHVsZS1yZWxhdGl2ZSBvZmZzZXQgKi8KKysjZGVmaW5lIFJfNjhLX1RMU19JRTMyICAgICAgMzQgICAgICAgICAgLyogMzIgYml0IEdPVCBvZmZzZXQgZm9yIElFICovCisrI2RlZmluZSBSXzY4S19UTFNfSUUxNiAgICAgIDM1ICAgICAgICAgIC8qIDE2IGJpdCBHT1Qgb2Zmc2V0IGZvciBJRSAqLworKyNkZWZpbmUgUl82OEtfVExTX0lFOCAgICAgICAzNiAgICAgICAgICAvKiA4IGJpdCBHT1Qgb2Zmc2V0IGZvciBJRSAqLworKyNkZWZpbmUgUl82OEtfVExTX0xFMzIgICAgICAzNyAgICAgICAgICAvKiAzMiBiaXQgb2Zmc2V0IHJlbGF0aXZlIHRvCisrCQkJCQkgICBzdGF0aWMgVExTIGJsb2NrICovCisrI2RlZmluZSBSXzY4S19UTFNfTEUxNiAgICAgIDM4ICAgICAgICAgIC8qIDE2IGJpdCBvZmZzZXQgcmVsYXRpdmUgdG8KKysJCQkJCSAgIHN0YXRpYyBUTFMgYmxvY2sgKi8KKysjZGVmaW5lIFJfNjhLX1RMU19MRTggICAgICAgMzkgICAgICAgICAgLyogOCBiaXQgb2Zmc2V0IHJlbGF0aXZlIHRvCisrCQkJCQkgICBzdGF0aWMgVExTIGJsb2NrICovCisrI2RlZmluZSBSXzY4S19UTFNfRFRQTU9EMzIgIDQwICAgICAgICAgIC8qIDMyIGJpdCBtb2R1bGUgbnVtYmVyICovCisrI2RlZmluZSBSXzY4S19UTFNfRFRQUkVMMzIgIDQxICAgICAgICAgIC8qIDMyIGJpdCBtb2R1bGUtcmVsYXRpdmUgb2Zmc2V0ICovCisrI2RlZmluZSBSXzY4S19UTFNfVFBSRUwzMiAgIDQyICAgICAgICAgIC8qIDMyIGJpdCBUUC1yZWxhdGl2ZSBvZmZzZXQgKi8KKysvKiBLZWVwIHRoaXMgdGhlIGxhc3QgZW50cnkuICAqLworKyNkZWZpbmUgUl82OEtfTlVNCTQzCisrCisrLyogSW50ZWwgODAzODYgc3BlY2lmaWMgZGVmaW5pdGlvbnMuICAqLworKworKy8qIGkzODYgcmVsb2NzLiAgKi8KKysKKysjZGVmaW5lIFJfMzg2X05PTkUJICAgMAkJLyogTm8gcmVsb2MgKi8KKysjZGVmaW5lIFJfMzg2XzMyCSAgIDEJCS8qIERpcmVjdCAzMiBiaXQgICovCisrI2RlZmluZSBSXzM4Nl9QQzMyCSAgIDIJCS8qIFBDIHJlbGF0aXZlIDMyIGJpdCAqLworKyNkZWZpbmUgUl8zODZfR09UMzIJICAgMwkJLyogMzIgYml0IEdPVCBlbnRyeSAqLworKyNkZWZpbmUgUl8zODZfUExUMzIJICAgNAkJLyogMzIgYml0IFBMVCBhZGRyZXNzICovCisrI2RlZmluZSBSXzM4Nl9DT1BZCSAgIDUJCS8qIENvcHkgc3ltYm9sIGF0IHJ1bnRpbWUgKi8KKysjZGVmaW5lIFJfMzg2X0dMT0JfREFUCSAgIDYJCS8qIENyZWF0ZSBHT1QgZW50cnkgKi8KKysjZGVmaW5lIFJfMzg2X0pNUF9TTE9UCSAgIDcJCS8qIENyZWF0ZSBQTFQgZW50cnkgKi8KKysjZGVmaW5lIFJfMzg2X1JFTEFUSVZFCSAgIDgJCS8qIEFkanVzdCBieSBwcm9ncmFtIGJhc2UgKi8KKysjZGVmaW5lIFJfMzg2X0dPVE9GRgkgICA5CQkvKiAzMiBiaXQgb2Zmc2V0IHRvIEdPVCAqLworKyNkZWZpbmUgUl8zODZfR09UUEMJICAgMTAJCS8qIDMyIGJpdCBQQyByZWxhdGl2ZSBvZmZzZXQgdG8gR09UICovCisrI2RlZmluZSBSXzM4Nl8zMlBMVAkgICAxMQorKyNkZWZpbmUgUl8zODZfVExTX1RQT0ZGCSAgIDE0CQkvKiBPZmZzZXQgaW4gc3RhdGljIFRMUyBibG9jayAqLworKyNkZWZpbmUgUl8zODZfVExTX0lFCSAgIDE1CQkvKiBBZGRyZXNzIG9mIEdPVCBlbnRyeSBmb3Igc3RhdGljIFRMUworKwkJCQkJICAgYmxvY2sgb2Zmc2V0ICovCisrI2RlZmluZSBSXzM4Nl9UTFNfR09USUUJICAgMTYJCS8qIEdPVCBlbnRyeSBmb3Igc3RhdGljIFRMUyBibG9jaworKwkJCQkJICAgb2Zmc2V0ICovCisrI2RlZmluZSBSXzM4Nl9UTFNfTEUJICAgMTcJCS8qIE9mZnNldCByZWxhdGl2ZSB0byBzdGF0aWMgVExTCisrCQkJCQkgICBibG9jayAqLworKyNkZWZpbmUgUl8zODZfVExTX0dECSAgIDE4CQkvKiBEaXJlY3QgMzIgYml0IGZvciBHTlUgdmVyc2lvbiBvZgorKwkJCQkJICAgZ2VuZXJhbCBkeW5hbWljIHRocmVhZCBsb2NhbCBkYXRhICovCisrI2RlZmluZSBSXzM4Nl9UTFNfTERNCSAgIDE5CQkvKiBEaXJlY3QgMzIgYml0IGZvciBHTlUgdmVyc2lvbiBvZgorKwkJCQkJICAgbG9jYWwgZHluYW1pYyB0aHJlYWQgbG9jYWwgZGF0YQorKwkJCQkJICAgaW4gTEUgY29kZSAqLworKyNkZWZpbmUgUl8zODZfMTYJICAgMjAKKysjZGVmaW5lIFJfMzg2X1BDMTYJICAgMjEKKysjZGVmaW5lIFJfMzg2XzgJCSAgIDIyCisrI2RlZmluZSBSXzM4Nl9QQzgJICAgMjMKKysjZGVmaW5lIFJfMzg2X1RMU19HRF8zMgkgICAyNAkJLyogRGlyZWN0IDMyIGJpdCBmb3IgZ2VuZXJhbCBkeW5hbWljCisrCQkJCQkgICB0aHJlYWQgbG9jYWwgZGF0YSAqLworKyNkZWZpbmUgUl8zODZfVExTX0dEX1BVU0ggIDI1CQkvKiBUYWcgZm9yIHB1c2hsIGluIEdEIFRMUyBjb2RlICovCisrI2RlZmluZSBSXzM4Nl9UTFNfR0RfQ0FMTCAgMjYJCS8qIFJlbG9jYXRpb24gZm9yIGNhbGwgdG8KKysJCQkJCSAgIF9fdGxzX2dldF9hZGRyKCkgKi8KKysjZGVmaW5lIFJfMzg2X1RMU19HRF9QT1AgICAyNwkJLyogVGFnIGZvciBwb3BsIGluIEdEIFRMUyBjb2RlICovCisrI2RlZmluZSBSXzM4Nl9UTFNfTERNXzMyICAgMjgJCS8qIERpcmVjdCAzMiBiaXQgZm9yIGxvY2FsIGR5bmFtaWMKKysJCQkJCSAgIHRocmVhZCBsb2NhbCBkYXRhIGluIExFIGNvZGUgKi8KKysjZGVmaW5lIFJfMzg2X1RMU19MRE1fUFVTSCAyOQkJLyogVGFnIGZvciBwdXNobCBpbiBMRE0gVExTIGNvZGUgKi8KKysjZGVmaW5lIFJfMzg2X1RMU19MRE1fQ0FMTCAzMAkJLyogUmVsb2NhdGlvbiBmb3IgY2FsbCB0bworKwkJCQkJICAgX190bHNfZ2V0X2FkZHIoKSBpbiBMRE0gY29kZSAqLworKyNkZWZpbmUgUl8zODZfVExTX0xETV9QT1AgIDMxCQkvKiBUYWcgZm9yIHBvcGwgaW4gTERNIFRMUyBjb2RlICovCisrI2RlZmluZSBSXzM4Nl9UTFNfTERPXzMyICAgMzIJCS8qIE9mZnNldCByZWxhdGl2ZSB0byBUTFMgYmxvY2sgKi8KKysjZGVmaW5lIFJfMzg2X1RMU19JRV8zMgkgICAzMwkJLyogR09UIGVudHJ5IGZvciBuZWdhdGVkIHN0YXRpYyBUTFMKKysJCQkJCSAgIGJsb2NrIG9mZnNldCAqLworKyNkZWZpbmUgUl8zODZfVExTX0xFXzMyCSAgIDM0CQkvKiBOZWdhdGVkIG9mZnNldCByZWxhdGl2ZSB0byBzdGF0aWMKKysJCQkJCSAgIFRMUyBibG9jayAqLworKyNkZWZpbmUgUl8zODZfVExTX0RUUE1PRDMyIDM1CQkvKiBJRCBvZiBtb2R1bGUgY29udGFpbmluZyBzeW1ib2wgKi8KKysjZGVmaW5lIFJfMzg2X1RMU19EVFBPRkYzMiAzNgkJLyogT2Zmc2V0IGluIFRMUyBibG9jayAqLworKyNkZWZpbmUgUl8zODZfVExTX1RQT0ZGMzIgIDM3CQkvKiBOZWdhdGVkIG9mZnNldCBpbiBzdGF0aWMgVExTIGJsb2NrICovCisrLyogMzg/ICovCisrI2RlZmluZSBSXzM4Nl9UTFNfR09UREVTQyAgMzkJCS8qIEdPVCBvZmZzZXQgZm9yIFRMUyBkZXNjcmlwdG9yLiAgKi8KKysjZGVmaW5lIFJfMzg2X1RMU19ERVNDX0NBTEwgNDAJCS8qIE1hcmtlciBvZiBjYWxsIHRocm91Z2ggVExTCisrCQkJCQkgICBkZXNjcmlwdG9yIGZvcgorKwkJCQkJICAgcmVsYXhhdGlvbi4gICovCisrI2RlZmluZSBSXzM4Nl9UTFNfREVTQyAgICAgNDEJCS8qIFRMUyBkZXNjcmlwdG9yIGNvbnRhaW5pbmcKKysJCQkJCSAgIHBvaW50ZXIgdG8gY29kZSBhbmQgdG8KKysJCQkJCSAgIGFyZ3VtZW50LCByZXR1cm5pbmcgdGhlIFRMUworKwkJCQkJICAgb2Zmc2V0IGZvciB0aGUgc3ltYm9sLiAgKi8KKysjZGVmaW5lIFJfMzg2X0lSRUxBVElWRQkgICA0MgkJLyogQWRqdXN0IGluZGlyZWN0bHkgYnkgcHJvZ3JhbSBiYXNlICovCisrLyogS2VlcCB0aGlzIHRoZSBsYXN0IGVudHJ5LiAgKi8KKysjZGVmaW5lIFJfMzg2X05VTQkgICA0MworKworKy8qIFNVTiBTUEFSQyBzcGVjaWZpYyBkZWZpbml0aW9ucy4gICovCisrCisrLyogTGVnYWwgdmFsdWVzIGZvciBTVF9UWVBFIHN1YmZpZWxkIG9mIHN0X2luZm8gKHN5bWJvbCB0eXBlKS4gICovCisrCisrI2RlZmluZSBTVFRfU1BBUkNfUkVHSVNURVIJMTMJLyogR2xvYmFsIHJlZ2lzdGVyIHJlc2VydmVkIHRvIGFwcC4gKi8KKysKKysvKiBWYWx1ZXMgZm9yIEVsZjY0X0VoZHIuZV9mbGFncy4gICovCisrCisrI2RlZmluZSBFRl9TUEFSQ1Y5X01NCQkzCisrI2RlZmluZSBFRl9TUEFSQ1Y5X1RTTwkJMAorKyNkZWZpbmUgRUZfU1BBUkNWOV9QU08JCTEKKysjZGVmaW5lIEVGX1NQQVJDVjlfUk1PCQkyCisrI2RlZmluZSBFRl9TUEFSQ19MRURBVEEJCTB4ODAwMDAwIC8qIGxpdHRsZSBlbmRpYW4gZGF0YSAqLworKyNkZWZpbmUgRUZfU1BBUkNfRVhUX01BU0sJMHhGRkZGMDAKKysjZGVmaW5lIEVGX1NQQVJDXzMyUExVUwkJMHgwMDAxMDAgLyogZ2VuZXJpYyBWOCsgZmVhdHVyZXMgKi8KKysjZGVmaW5lIEVGX1NQQVJDX1NVTl9VUzEJMHgwMDAyMDAgLyogU3VuIFVsdHJhU1BBUkMxIGV4dGVuc2lvbnMgKi8KKysjZGVmaW5lIEVGX1NQQVJDX0hBTF9SMQkJMHgwMDA0MDAgLyogSEFMIFIxIGV4dGVuc2lvbnMgKi8KKysjZGVmaW5lIEVGX1NQQVJDX1NVTl9VUzMJMHgwMDA4MDAgLyogU3VuIFVsdHJhU1BBUkNJSUkgZXh0ZW5zaW9ucyAqLworKworKy8qIFNQQVJDIHJlbG9jcy4gICovCisrCisrI2RlZmluZSBSX1NQQVJDX05PTkUJCTAJLyogTm8gcmVsb2MgKi8KKysjZGVmaW5lIFJfU1BBUkNfOAkJMQkvKiBEaXJlY3QgOCBiaXQgKi8KKysjZGVmaW5lIFJfU1BBUkNfMTYJCTIJLyogRGlyZWN0IDE2IGJpdCAqLworKyNkZWZpbmUgUl9TUEFSQ18zMgkJMwkvKiBEaXJlY3QgMzIgYml0ICovCisrI2RlZmluZSBSX1NQQVJDX0RJU1A4CQk0CS8qIFBDIHJlbGF0aXZlIDggYml0ICovCisrI2RlZmluZSBSX1NQQVJDX0RJU1AxNgkJNQkvKiBQQyByZWxhdGl2ZSAxNiBiaXQgKi8KKysjZGVmaW5lIFJfU1BBUkNfRElTUDMyCQk2CS8qIFBDIHJlbGF0aXZlIDMyIGJpdCAqLworKyNkZWZpbmUgUl9TUEFSQ19XRElTUDMwCQk3CS8qIFBDIHJlbGF0aXZlIDMwIGJpdCBzaGlmdGVkICovCisrI2RlZmluZSBSX1NQQVJDX1dESVNQMjIJCTgJLyogUEMgcmVsYXRpdmUgMjIgYml0IHNoaWZ0ZWQgKi8KKysjZGVmaW5lIFJfU1BBUkNfSEkyMgkJOQkvKiBIaWdoIDIyIGJpdCAqLworKyNkZWZpbmUgUl9TUEFSQ18yMgkJMTAJLyogRGlyZWN0IDIyIGJpdCAqLworKyNkZWZpbmUgUl9TUEFSQ18xMwkJMTEJLyogRGlyZWN0IDEzIGJpdCAqLworKyNkZWZpbmUgUl9TUEFSQ19MTzEwCQkxMgkvKiBUcnVuY2F0ZWQgMTAgYml0ICovCisrI2RlZmluZSBSX1NQQVJDX0dPVDEwCQkxMwkvKiBUcnVuY2F0ZWQgMTAgYml0IEdPVCBlbnRyeSAqLworKyNkZWZpbmUgUl9TUEFSQ19HT1QxMwkJMTQJLyogMTMgYml0IEdPVCBlbnRyeSAqLworKyNkZWZpbmUgUl9TUEFSQ19HT1QyMgkJMTUJLyogMjIgYml0IEdPVCBlbnRyeSBzaGlmdGVkICovCisrI2RlZmluZSBSX1NQQVJDX1BDMTAJCTE2CS8qIFBDIHJlbGF0aXZlIDEwIGJpdCB0cnVuY2F0ZWQgKi8KKysjZGVmaW5lIFJfU1BBUkNfUEMyMgkJMTcJLyogUEMgcmVsYXRpdmUgMjIgYml0IHNoaWZ0ZWQgKi8KKysjZGVmaW5lIFJfU1BBUkNfV1BMVDMwCQkxOAkvKiAzMCBiaXQgUEMgcmVsYXRpdmUgUExUIGFkZHJlc3MgKi8KKysjZGVmaW5lIFJfU1BBUkNfQ09QWQkJMTkJLyogQ29weSBzeW1ib2wgYXQgcnVudGltZSAqLworKyNkZWZpbmUgUl9TUEFSQ19HTE9CX0RBVAkyMAkvKiBDcmVhdGUgR09UIGVudHJ5ICovCisrI2RlZmluZSBSX1NQQVJDX0pNUF9TTE9UCTIxCS8qIENyZWF0ZSBQTFQgZW50cnkgKi8KKysjZGVmaW5lIFJfU1BBUkNfUkVMQVRJVkUJMjIJLyogQWRqdXN0IGJ5IHByb2dyYW0gYmFzZSAqLworKyNkZWZpbmUgUl9TUEFSQ19VQTMyCQkyMwkvKiBEaXJlY3QgMzIgYml0IHVuYWxpZ25lZCAqLworKworKy8qIEFkZGl0aW9uYWwgU3BhcmM2NCByZWxvY3MuICAqLworKworKyNkZWZpbmUgUl9TUEFSQ19QTFQzMgkJMjQJLyogRGlyZWN0IDMyIGJpdCByZWYgdG8gUExUIGVudHJ5ICovCisrI2RlZmluZSBSX1NQQVJDX0hJUExUMjIJCTI1CS8qIEhpZ2ggMjIgYml0IFBMVCBlbnRyeSAqLworKyNkZWZpbmUgUl9TUEFSQ19MT1BMVDEwCQkyNgkvKiBUcnVuY2F0ZWQgMTAgYml0IFBMVCBlbnRyeSAqLworKyNkZWZpbmUgUl9TUEFSQ19QQ1BMVDMyCQkyNwkvKiBQQyByZWwgMzIgYml0IHJlZiB0byBQTFQgZW50cnkgKi8KKysjZGVmaW5lIFJfU1BBUkNfUENQTFQyMgkJMjgJLyogUEMgcmVsIGhpZ2ggMjIgYml0IFBMVCBlbnRyeSAqLworKyNkZWZpbmUgUl9TUEFSQ19QQ1BMVDEwCQkyOQkvKiBQQyByZWwgdHJ1bmMgMTAgYml0IFBMVCBlbnRyeSAqLworKyNkZWZpbmUgUl9TUEFSQ18xMAkJMzAJLyogRGlyZWN0IDEwIGJpdCAqLworKyNkZWZpbmUgUl9TUEFSQ18xMQkJMzEJLyogRGlyZWN0IDExIGJpdCAqLworKyNkZWZpbmUgUl9TUEFSQ182NAkJMzIJLyogRGlyZWN0IDY0IGJpdCAqLworKyNkZWZpbmUgUl9TUEFSQ19PTE8xMAkJMzMJLyogMTBiaXQgd2l0aCBzZWNvbmRhcnkgMTNiaXQgYWRkZW5kICovCisrI2RlZmluZSBSX1NQQVJDX0hIMjIJCTM0CS8qIFRvcCAyMiBiaXRzIG9mIGRpcmVjdCA2NCBiaXQgKi8KKysjZGVmaW5lIFJfU1BBUkNfSE0xMAkJMzUJLyogSGlnaCBtaWRkbGUgMTAgYml0cyBvZiAuLi4gKi8KKysjZGVmaW5lIFJfU1BBUkNfTE0yMgkJMzYJLyogTG93IG1pZGRsZSAyMiBiaXRzIG9mIC4uLiAqLworKyNkZWZpbmUgUl9TUEFSQ19QQ19ISDIyCQkzNwkvKiBUb3AgMjIgYml0cyBvZiBwYyByZWwgNjQgYml0ICovCisrI2RlZmluZSBSX1NQQVJDX1BDX0hNMTAJCTM4CS8qIEhpZ2ggbWlkZGxlIDEwIGJpdCBvZiAuLi4gKi8KKysjZGVmaW5lIFJfU1BBUkNfUENfTE0yMgkJMzkJLyogTG93IG1pZ2dsZSAyMiBiaXRzIG9mIC4uLiAqLworKyNkZWZpbmUgUl9TUEFSQ19XRElTUDE2CQk0MAkvKiBQQyByZWxhdGl2ZSAxNiBiaXQgc2hpZnRlZCAqLworKyNkZWZpbmUgUl9TUEFSQ19XRElTUDE5CQk0MQkvKiBQQyByZWxhdGl2ZSAxOSBiaXQgc2hpZnRlZCAqLworKyNkZWZpbmUgUl9TUEFSQ19HTE9CX0pNUAk0MgkvKiB3YXMgcGFydCBvZiB2OSBBQkkgYnV0IHdhcyByZW1vdmVkICovCisrI2RlZmluZSBSX1NQQVJDXzcJCTQzCS8qIERpcmVjdCA3IGJpdCAqLworKyNkZWZpbmUgUl9TUEFSQ181CQk0NAkvKiBEaXJlY3QgNSBiaXQgKi8KKysjZGVmaW5lIFJfU1BBUkNfNgkJNDUJLyogRGlyZWN0IDYgYml0ICovCisrI2RlZmluZSBSX1NQQVJDX0RJU1A2NAkJNDYJLyogUEMgcmVsYXRpdmUgNjQgYml0ICovCisrI2RlZmluZSBSX1NQQVJDX1BMVDY0CQk0NwkvKiBEaXJlY3QgNjQgYml0IHJlZiB0byBQTFQgZW50cnkgKi8KKysjZGVmaW5lIFJfU1BBUkNfSElYMjIJCTQ4CS8qIEhpZ2ggMjIgYml0IGNvbXBsZW1lbnRlZCAqLworKyNkZWZpbmUgUl9TUEFSQ19MT1gxMAkJNDkJLyogVHJ1bmNhdGVkIDExIGJpdCBjb21wbGVtZW50ZWQgKi8KKysjZGVmaW5lIFJfU1BBUkNfSDQ0CQk1MAkvKiBEaXJlY3QgaGlnaCAxMiBvZiA0NCBiaXQgKi8KKysjZGVmaW5lIFJfU1BBUkNfTTQ0CQk1MQkvKiBEaXJlY3QgbWlkIDIyIG9mIDQ0IGJpdCAqLworKyNkZWZpbmUgUl9TUEFSQ19MNDQJCTUyCS8qIERpcmVjdCBsb3cgMTAgb2YgNDQgYml0ICovCisrI2RlZmluZSBSX1NQQVJDX1JFR0lTVEVSCTUzCS8qIEdsb2JhbCByZWdpc3RlciB1c2FnZSAqLworKyNkZWZpbmUgUl9TUEFSQ19VQTY0CQk1NAkvKiBEaXJlY3QgNjQgYml0IHVuYWxpZ25lZCAqLworKyNkZWZpbmUgUl9TUEFSQ19VQTE2CQk1NQkvKiBEaXJlY3QgMTYgYml0IHVuYWxpZ25lZCAqLworKyNkZWZpbmUgUl9TUEFSQ19UTFNfR0RfSEkyMgk1NgorKyNkZWZpbmUgUl9TUEFSQ19UTFNfR0RfTE8xMAk1NworKyNkZWZpbmUgUl9TUEFSQ19UTFNfR0RfQURECTU4CisrI2RlZmluZSBSX1NQQVJDX1RMU19HRF9DQUxMCTU5CisrI2RlZmluZSBSX1NQQVJDX1RMU19MRE1fSEkyMgk2MAorKyNkZWZpbmUgUl9TUEFSQ19UTFNfTERNX0xPMTAJNjEKKysjZGVmaW5lIFJfU1BBUkNfVExTX0xETV9BREQJNjIKKysjZGVmaW5lIFJfU1BBUkNfVExTX0xETV9DQUxMCTYzCisrI2RlZmluZSBSX1NQQVJDX1RMU19MRE9fSElYMjIJNjQKKysjZGVmaW5lIFJfU1BBUkNfVExTX0xET19MT1gxMAk2NQorKyNkZWZpbmUgUl9TUEFSQ19UTFNfTERPX0FERAk2NgorKyNkZWZpbmUgUl9TUEFSQ19UTFNfSUVfSEkyMgk2NworKyNkZWZpbmUgUl9TUEFSQ19UTFNfSUVfTE8xMAk2OAorKyNkZWZpbmUgUl9TUEFSQ19UTFNfSUVfTEQJNjkKKysjZGVmaW5lIFJfU1BBUkNfVExTX0lFX0xEWAk3MAorKyNkZWZpbmUgUl9TUEFSQ19UTFNfSUVfQURECTcxCisrI2RlZmluZSBSX1NQQVJDX1RMU19MRV9ISVgyMgk3MgorKyNkZWZpbmUgUl9TUEFSQ19UTFNfTEVfTE9YMTAJNzMKKysjZGVmaW5lIFJfU1BBUkNfVExTX0RUUE1PRDMyCTc0CisrI2RlZmluZSBSX1NQQVJDX1RMU19EVFBNT0Q2NAk3NQorKyNkZWZpbmUgUl9TUEFSQ19UTFNfRFRQT0ZGMzIJNzYKKysjZGVmaW5lIFJfU1BBUkNfVExTX0RUUE9GRjY0CTc3CisrI2RlZmluZSBSX1NQQVJDX1RMU19UUE9GRjMyCTc4CisrI2RlZmluZSBSX1NQQVJDX1RMU19UUE9GRjY0CTc5CisrI2RlZmluZSBSX1NQQVJDX0dPVERBVEFfSElYMjIJODAKKysjZGVmaW5lIFJfU1BBUkNfR09UREFUQV9MT1gxMAk4MQorKyNkZWZpbmUgUl9TUEFSQ19HT1REQVRBX09QX0hJWDIyCTgyCisrI2RlZmluZSBSX1NQQVJDX0dPVERBVEFfT1BfTE9YMTAJODMKKysjZGVmaW5lIFJfU1BBUkNfR09UREFUQV9PUAk4NAorKyNkZWZpbmUgUl9TUEFSQ19IMzQJCTg1CisrI2RlZmluZSBSX1NQQVJDX1NJWkUzMgkJODYKKysjZGVmaW5lIFJfU1BBUkNfU0laRTY0CQk4NworKyNkZWZpbmUgUl9TUEFSQ19XRElTUDEwCQk4OAorKyNkZWZpbmUgUl9TUEFSQ19KTVBfSVJFTAkyNDgKKysjZGVmaW5lIFJfU1BBUkNfSVJFTEFUSVZFCTI0OQorKyNkZWZpbmUgUl9TUEFSQ19HTlVfVlRJTkhFUklUCTI1MAorKyNkZWZpbmUgUl9TUEFSQ19HTlVfVlRFTlRSWQkyNTEKKysjZGVmaW5lIFJfU1BBUkNfUkVWMzIJCTI1MgorKy8qIEtlZXAgdGhpcyB0aGUgbGFzdCBlbnRyeS4gICovCisrI2RlZmluZSBSX1NQQVJDX05VTQkJMjUzCisrCisrLyogRm9yIFNwYXJjNjQsIGxlZ2FsIHZhbHVlcyBmb3IgZF90YWcgb2YgRWxmNjRfRHluLiAgKi8KKysKKysjZGVmaW5lIERUX1NQQVJDX1JFR0lTVEVSIDB4NzAwMDAwMDEKKysjZGVmaW5lIERUX1NQQVJDX05VTQkyCisrCisrLyogTUlQUyBSMzAwMCBzcGVjaWZpYyBkZWZpbml0aW9ucy4gICovCisrCisrLyogTGVnYWwgdmFsdWVzIGZvciBlX2ZsYWdzIGZpZWxkIG9mIEVsZjMyX0VoZHIuICAqLworKworKyNkZWZpbmUgRUZfTUlQU19OT1JFT1JERVIgICAxCQkvKiBBIC5ub3Jlb3JkZXIgZGlyZWN0aXZlIHdhcyB1c2VkICovCisrI2RlZmluZSBFRl9NSVBTX1BJQwkgICAgMgkJLyogQ29udGFpbnMgUElDIGNvZGUgKi8KKysjZGVmaW5lIEVGX01JUFNfQ1BJQwkgICAgNAkJLyogVXNlcyBQSUMgY2FsbGluZyBzZXF1ZW5jZSAqLworKyNkZWZpbmUgRUZfTUlQU19YR09UCSAgICA4CisrI2RlZmluZSBFRl9NSVBTXzY0QklUX1dISVJMIDE2CisrI2RlZmluZSBFRl9NSVBTX0FCSTIJICAgIDMyCisrI2RlZmluZSBFRl9NSVBTX0FCSV9PTjMyICAgIDY0CisrI2RlZmluZSBFRl9NSVBTX0FSQ0gJICAgIDB4ZjAwMDAwMDAJLyogTUlQUyBhcmNoaXRlY3R1cmUgbGV2ZWwgKi8KKysKKysvKiBMZWdhbCB2YWx1ZXMgZm9yIE1JUFMgYXJjaGl0ZWN0dXJlIGxldmVsLiAgKi8KKysKKysjZGVmaW5lIEVGX01JUFNfQVJDSF8xCSAgICAweDAwMDAwMDAwCS8qIC1taXBzMSBjb2RlLiAgKi8KKysjZGVmaW5lIEVGX01JUFNfQVJDSF8yCSAgICAweDEwMDAwMDAwCS8qIC1taXBzMiBjb2RlLiAgKi8KKysjZGVmaW5lIEVGX01JUFNfQVJDSF8zCSAgICAweDIwMDAwMDAwCS8qIC1taXBzMyBjb2RlLiAgKi8KKysjZGVmaW5lIEVGX01JUFNfQVJDSF80CSAgICAweDMwMDAwMDAwCS8qIC1taXBzNCBjb2RlLiAgKi8KKysjZGVmaW5lIEVGX01JUFNfQVJDSF81CSAgICAweDQwMDAwMDAwCS8qIC1taXBzNSBjb2RlLiAgKi8KKysjZGVmaW5lIEVGX01JUFNfQVJDSF8zMgkgICAgMHg2MDAwMDAwMAkvKiBNSVBTMzIgY29kZS4gICovCisrI2RlZmluZSBFRl9NSVBTX0FSQ0hfNjQJICAgIDB4NzAwMDAwMDAJLyogTUlQUzY0IGNvZGUuICAqLworKworKy8qIFRoZSBmb2xsb3dpbmcgYXJlIG5vbi1vZmZpY2lhbCBuYW1lcyBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkLiAgKi8KKysKKysjZGVmaW5lIEVfTUlQU19BUkNIXzEJICAweDAwMDAwMDAwCS8qIC1taXBzMSBjb2RlLiAgKi8KKysjZGVmaW5lIEVfTUlQU19BUkNIXzIJICAweDEwMDAwMDAwCS8qIC1taXBzMiBjb2RlLiAgKi8KKysjZGVmaW5lIEVfTUlQU19BUkNIXzMJICAweDIwMDAwMDAwCS8qIC1taXBzMyBjb2RlLiAgKi8KKysjZGVmaW5lIEVfTUlQU19BUkNIXzQJICAweDMwMDAwMDAwCS8qIC1taXBzNCBjb2RlLiAgKi8KKysjZGVmaW5lIEVfTUlQU19BUkNIXzUJICAweDQwMDAwMDAwCS8qIC1taXBzNSBjb2RlLiAgKi8KKysjZGVmaW5lIEVfTUlQU19BUkNIXzMyCSAgMHg2MDAwMDAwMAkvKiBNSVBTMzIgY29kZS4gICovCisrI2RlZmluZSBFX01JUFNfQVJDSF82NAkgIDB4NzAwMDAwMDAJLyogTUlQUzY0IGNvZGUuICAqLworKworKy8qIFNwZWNpYWwgc2VjdGlvbiBpbmRpY2VzLiAgKi8KKysKKysjZGVmaW5lIFNITl9NSVBTX0FDT01NT04gICAgMHhmZjAwCS8qIEFsbG9jYXRlZCBjb21tb24gc3ltYm9scyAqLworKyNkZWZpbmUgU0hOX01JUFNfVEVYVAkgICAgMHhmZjAxCS8qIEFsbG9jYXRlZCB0ZXN0IHN5bWJvbHMuICAqLworKyNkZWZpbmUgU0hOX01JUFNfREFUQQkgICAgMHhmZjAyCS8qIEFsbG9jYXRlZCBkYXRhIHN5bWJvbHMuICAqLworKyNkZWZpbmUgU0hOX01JUFNfU0NPTU1PTiAgICAweGZmMDMJLyogU21hbGwgY29tbW9uIHN5bWJvbHMgKi8KKysjZGVmaW5lIFNITl9NSVBTX1NVTkRFRklORUQgMHhmZjA0CS8qIFNtYWxsIHVuZGVmaW5lZCBzeW1ib2xzICovCisrCisrLyogTGVnYWwgdmFsdWVzIGZvciBzaF90eXBlIGZpZWxkIG9mIEVsZjMyX1NoZHIuICAqLworKworKyNkZWZpbmUgU0hUX01JUFNfTElCTElTVCAgICAgICAweDcwMDAwMDAwIC8qIFNoYXJlZCBvYmplY3RzIHVzZWQgaW4gbGluayAqLworKyNkZWZpbmUgU0hUX01JUFNfTVNZTQkgICAgICAgMHg3MDAwMDAwMQorKyNkZWZpbmUgU0hUX01JUFNfQ09ORkxJQ1QgICAgICAweDcwMDAwMDAyIC8qIENvbmZsaWN0aW5nIHN5bWJvbHMgKi8KKysjZGVmaW5lIFNIVF9NSVBTX0dQVEFCCSAgICAgICAweDcwMDAwMDAzIC8qIEdsb2JhbCBkYXRhIGFyZWEgc2l6ZXMgKi8KKysjZGVmaW5lIFNIVF9NSVBTX1VDT0RFCSAgICAgICAweDcwMDAwMDA0IC8qIFJlc2VydmVkIGZvciBTR0kvTUlQUyBjb21waWxlcnMgKi8KKysjZGVmaW5lIFNIVF9NSVBTX0RFQlVHCSAgICAgICAweDcwMDAwMDA1IC8qIE1JUFMgRUNPRkYgZGVidWdnaW5nIGluZm9ybWF0aW9uKi8KKysjZGVmaW5lIFNIVF9NSVBTX1JFR0lORk8gICAgICAgMHg3MDAwMDAwNiAvKiBSZWdpc3RlciB1c2FnZSBpbmZvcm1hdGlvbiAqLworKyNkZWZpbmUgU0hUX01JUFNfUEFDS0FHRSAgICAgICAweDcwMDAwMDA3CisrI2RlZmluZSBTSFRfTUlQU19QQUNLU1lNICAgICAgIDB4NzAwMDAwMDgKKysjZGVmaW5lIFNIVF9NSVBTX1JFTEQJICAgICAgIDB4NzAwMDAwMDkKKysjZGVmaW5lIFNIVF9NSVBTX0lGQUNFICAgICAgICAgMHg3MDAwMDAwYgorKyNkZWZpbmUgU0hUX01JUFNfQ09OVEVOVCAgICAgICAweDcwMDAwMDBjCisrI2RlZmluZSBTSFRfTUlQU19PUFRJT05TICAgICAgIDB4NzAwMDAwMGQgLyogTWlzY2VsbGFuZW91cyBvcHRpb25zLiAgKi8KKysjZGVmaW5lIFNIVF9NSVBTX1NIRFIJICAgICAgIDB4NzAwMDAwMTAKKysjZGVmaW5lIFNIVF9NSVBTX0ZERVNDCSAgICAgICAweDcwMDAwMDExCisrI2RlZmluZSBTSFRfTUlQU19FWFRTWU0JICAgICAgIDB4NzAwMDAwMTIKKysjZGVmaW5lIFNIVF9NSVBTX0RFTlNFCSAgICAgICAweDcwMDAwMDEzCisrI2RlZmluZSBTSFRfTUlQU19QREVTQwkgICAgICAgMHg3MDAwMDAxNAorKyNkZWZpbmUgU0hUX01JUFNfTE9DU1lNCSAgICAgICAweDcwMDAwMDE1CisrI2RlZmluZSBTSFRfTUlQU19BVVhTWU0JICAgICAgIDB4NzAwMDAwMTYKKysjZGVmaW5lIFNIVF9NSVBTX09QVFNZTQkgICAgICAgMHg3MDAwMDAxNworKyNkZWZpbmUgU0hUX01JUFNfTE9DU1RSCSAgICAgICAweDcwMDAwMDE4CisrI2RlZmluZSBTSFRfTUlQU19MSU5FCSAgICAgICAweDcwMDAwMDE5CisrI2RlZmluZSBTSFRfTUlQU19SRkRFU0MJICAgICAgIDB4NzAwMDAwMWEKKysjZGVmaW5lIFNIVF9NSVBTX0RFTFRBU1lNICAgICAgMHg3MDAwMDAxYgorKyNkZWZpbmUgU0hUX01JUFNfREVMVEFJTlNUICAgICAweDcwMDAwMDFjCisrI2RlZmluZSBTSFRfTUlQU19ERUxUQUNMQVNTICAgIDB4NzAwMDAwMWQKKysjZGVmaW5lIFNIVF9NSVBTX0RXQVJGICAgICAgICAgMHg3MDAwMDAxZSAvKiBEV0FSRiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uICAqLworKyNkZWZpbmUgU0hUX01JUFNfREVMVEFERUNMICAgICAweDcwMDAwMDFmCisrI2RlZmluZSBTSFRfTUlQU19TWU1CT0xfTElCICAgIDB4NzAwMDAwMjAKKysjZGVmaW5lIFNIVF9NSVBTX0VWRU5UUwkgICAgICAgMHg3MDAwMDAyMSAvKiBFdmVudCBzZWN0aW9uLiAgKi8KKysjZGVmaW5lIFNIVF9NSVBTX1RSQU5TTEFURSAgICAgMHg3MDAwMDAyMgorKyNkZWZpbmUgU0hUX01JUFNfUElYSUUJICAgICAgIDB4NzAwMDAwMjMKKysjZGVmaW5lIFNIVF9NSVBTX1hMQVRFCSAgICAgICAweDcwMDAwMDI0CisrI2RlZmluZSBTSFRfTUlQU19YTEFURV9ERUJVRyAgIDB4NzAwMDAwMjUKKysjZGVmaW5lIFNIVF9NSVBTX1dISVJMCSAgICAgICAweDcwMDAwMDI2CisrI2RlZmluZSBTSFRfTUlQU19FSF9SRUdJT04gICAgIDB4NzAwMDAwMjcKKysjZGVmaW5lIFNIVF9NSVBTX1hMQVRFX09MRCAgICAgMHg3MDAwMDAyOAorKyNkZWZpbmUgU0hUX01JUFNfUERSX0VYQ0VQVElPTiAweDcwMDAwMDI5CisrCisrLyogTGVnYWwgdmFsdWVzIGZvciBzaF9mbGFncyBmaWVsZCBvZiBFbGYzMl9TaGRyLiAgKi8KKysKKysjZGVmaW5lIFNIRl9NSVBTX0dQUkVMCSAweDEwMDAwMDAwCS8qIE11c3QgYmUgcGFydCBvZiBnbG9iYWwgZGF0YSBhcmVhICovCisrI2RlZmluZSBTSEZfTUlQU19NRVJHRQkgMHgyMDAwMDAwMAorKyNkZWZpbmUgU0hGX01JUFNfQUREUgkgMHg0MDAwMDAwMAorKyNkZWZpbmUgU0hGX01JUFNfU1RSSU5HUyAweDgwMDAwMDAwCisrI2RlZmluZSBTSEZfTUlQU19OT1NUUklQIDB4MDgwMDAwMDAKKysjZGVmaW5lIFNIRl9NSVBTX0xPQ0FMCSAweDA0MDAwMDAwCisrI2RlZmluZSBTSEZfTUlQU19OQU1FUwkgMHgwMjAwMDAwMAorKyNkZWZpbmUgU0hGX01JUFNfTk9EVVBFCSAweDAxMDAwMDAwCisrCisrCisrLyogU3ltYm9sIHRhYmxlcy4gICovCisrCisrLyogTUlQUyBzcGVjaWZpYyB2YWx1ZXMgZm9yIGBzdF9vdGhlcicuICAqLworKyNkZWZpbmUgU1RPX01JUFNfREVGQVVMVAkJMHgwCisrI2RlZmluZSBTVE9fTUlQU19JTlRFUk5BTAkJMHgxCisrI2RlZmluZSBTVE9fTUlQU19ISURERU4JCQkweDIKKysjZGVmaW5lIFNUT19NSVBTX1BST1RFQ1RFRAkJMHgzCisrI2RlZmluZSBTVE9fTUlQU19QTFQJCQkweDgKKysjZGVmaW5lIFNUT19NSVBTX1NDX0FMSUdOX1VOVVNFRAkweGZmCisrCisrLyogTUlQUyBzcGVjaWZpYyB2YWx1ZXMgZm9yIGBzdF9pbmZvJy4gICovCisrI2RlZmluZSBTVEJfTUlQU19TUExJVF9DT01NT04JCTEzCisrCisrLyogRW50cmllcyBmb3VuZCBpbiBzZWN0aW9ucyBvZiB0eXBlIFNIVF9NSVBTX0dQVEFCLiAgKi8KKysKKyt0eXBlZGVmIHVuaW9uCisreworKyAgc3RydWN0CisrICAgIHsKKysgICAgICBFbGYzMl9Xb3JkIGd0X2N1cnJlbnRfZ192YWx1ZTsJLyogLUcgdmFsdWUgdXNlZCBmb3IgY29tcGlsYXRpb24gKi8KKysgICAgICBFbGYzMl9Xb3JkIGd0X3VudXNlZDsJCS8qIE5vdCB1c2VkICovCisrICAgIH0gZ3RfaGVhZGVyOwkJCS8qIEZpcnN0IGVudHJ5IGluIHNlY3Rpb24gKi8KKysgIHN0cnVjdAorKyAgICB7CisrICAgICAgRWxmMzJfV29yZCBndF9nX3ZhbHVlOwkJLyogSWYgdGhpcyB2YWx1ZSB3ZXJlIHVzZWQgZm9yIC1HICovCisrICAgICAgRWxmMzJfV29yZCBndF9ieXRlczsJCS8qIFRoaXMgbWFueSBieXRlcyB3b3VsZCBiZSB1c2VkICovCisrICAgIH0gZ3RfZW50cnk7CQkJCS8qIFN1YnNlcXVlbnQgZW50cmllcyBpbiBzZWN0aW9uICovCisrfSBFbGYzMl9ncHRhYjsKKysKKysvKiBFbnRyeSBmb3VuZCBpbiBzZWN0aW9ucyBvZiB0eXBlIFNIVF9NSVBTX1JFR0lORk8uICAqLworKworK3R5cGVkZWYgc3RydWN0CisreworKyAgRWxmMzJfV29yZAlyaV9ncHJtYXNrOwkJLyogR2VuZXJhbCByZWdpc3RlcnMgdXNlZCAqLworKyAgRWxmMzJfV29yZAlyaV9jcHJtYXNrWzRdOwkJLyogQ29wcm9jZXNzb3IgcmVnaXN0ZXJzIHVzZWQgKi8KKysgIEVsZjMyX1N3b3JkCXJpX2dwX3ZhbHVlOwkJLyogJGdwIHJlZ2lzdGVyIHZhbHVlICovCisrfSBFbGYzMl9SZWdJbmZvOworKworKy8qIEVudHJpZXMgZm91bmQgaW4gc2VjdGlvbnMgb2YgdHlwZSBTSFRfTUlQU19PUFRJT05TLiAgKi8KKysKKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIHVuc2lnbmVkIGNoYXIga2luZDsJCS8qIERldGVybWluZXMgaW50ZXJwcmV0YXRpb24gb2YgdGhlCisrCQkJCSAgIHZhcmlhYmxlIHBhcnQgb2YgZGVzY3JpcHRvci4gICovCisrICB1bnNpZ25lZCBjaGFyIHNpemU7CQkvKiBTaXplIG9mIGRlc2NyaXB0b3IsIGluY2x1ZGluZyBoZWFkZXIuICAqLworKyAgRWxmMzJfU2VjdGlvbiBzZWN0aW9uOwkvKiBTZWN0aW9uIGhlYWRlciBpbmRleCBvZiBzZWN0aW9uIGFmZmVjdGVkLAorKwkJCQkgICAwIGZvciBnbG9iYWwgb3B0aW9ucy4gICovCisrICBFbGYzMl9Xb3JkIGluZm87CQkvKiBLaW5kLXNwZWNpZmljIGluZm9ybWF0aW9uLiAgKi8KKyt9IEVsZl9PcHRpb25zOworKworKy8qIFZhbHVlcyBmb3IgYGtpbmQnIGZpZWxkIGluIEVsZl9PcHRpb25zLiAgKi8KKysKKysjZGVmaW5lIE9ES19OVUxMCTAJLyogVW5kZWZpbmVkLiAgKi8KKysjZGVmaW5lIE9ES19SRUdJTkZPCTEJLyogUmVnaXN0ZXIgdXNhZ2UgaW5mb3JtYXRpb24uICAqLworKyNkZWZpbmUgT0RLX0VYQ0VQVElPTlMJMgkvKiBFeGNlcHRpb24gcHJvY2Vzc2luZyBvcHRpb25zLiAgKi8KKysjZGVmaW5lIE9ES19QQUQJCTMJLyogU2VjdGlvbiBwYWRkaW5nIG9wdGlvbnMuICAqLworKyNkZWZpbmUgT0RLX0hXUEFUQ0gJNAkvKiBIYXJkd2FyZSB3b3JrYXJvdW5kcyBwZXJmb3JtZWQgKi8KKysjZGVmaW5lIE9ES19GSUxMCTUJLyogcmVjb3JkIHRoZSBmaWxsIHZhbHVlIHVzZWQgYnkgdGhlIGxpbmtlci4gKi8KKysjZGVmaW5lIE9ES19UQUdTCTYJLyogcmVzZXJ2ZSBzcGFjZSBmb3IgZGVza3RvcCB0b29scyB0byB3cml0ZS4gKi8KKysjZGVmaW5lIE9ES19IV0FORAk3CS8qIEhXIHdvcmthcm91bmRzLiAgJ0FORCcgYml0cyB3aGVuIG1lcmdpbmcuICovCisrI2RlZmluZSBPREtfSFdPUgk4CS8qIEhXIHdvcmthcm91bmRzLiAgJ09SJyBiaXRzIHdoZW4gbWVyZ2luZy4gICovCisrCisrLyogVmFsdWVzIGZvciBgaW5mbycgaW4gRWxmX09wdGlvbnMgZm9yIE9ES19FWENFUFRJT05TIGVudHJpZXMuICAqLworKworKyNkZWZpbmUgT0VYX0ZQVV9NSU4JMHgxZgkvKiBGUEUncyB3aGljaCBNVVNUIGJlIGVuYWJsZWQuICAqLworKyNkZWZpbmUgT0VYX0ZQVV9NQVgJMHgxZjAwCS8qIEZQRSdzIHdoaWNoIE1BWSBiZSBlbmFibGVkLiAgKi8KKysjZGVmaW5lIE9FWF9QQUdFMAkweDEwMDAwCS8qIHBhZ2UgemVybyBtdXN0IGJlIG1hcHBlZC4gICovCisrI2RlZmluZSBPRVhfU01NCQkweDIwMDAwCS8qIEZvcmNlIHNlcXVlbnRpYWwgbWVtb3J5IG1vZGU/ICAqLworKyNkZWZpbmUgT0VYX0ZQREJVRwkweDQwMDAwCS8qIEZvcmNlIGZsb2F0aW5nIHBvaW50IGRlYnVnIG1vZGU/ICAqLworKyNkZWZpbmUgT0VYX1BSRUNJU0VGUAlPRVhfRlBEQlVHCisrI2RlZmluZSBPRVhfRElTTUlTUwkweDgwMDAwCS8qIERpc21pc3MgaW52YWxpZCBhZGRyZXNzIGZhdWx0cz8gICovCisrCisrI2RlZmluZSBPRVhfRlBVX0lOVkFMCTB4MTAKKysjZGVmaW5lIE9FWF9GUFVfRElWMAkweDA4CisrI2RlZmluZSBPRVhfRlBVX09GTE8JMHgwNAorKyNkZWZpbmUgT0VYX0ZQVV9VRkxPCTB4MDIKKysjZGVmaW5lIE9FWF9GUFVfSU5FWAkweDAxCisrCisrLyogTWFza3MgZm9yIGBpbmZvJyBpbiBFbGZfT3B0aW9ucyBmb3IgYW4gT0RLX0hXUEFUQ0ggZW50cnkuICAqLworKworKyNkZWZpbmUgT0hXX1I0S0VPUAkweDEJLyogUjQwMDAgZW5kLW9mLXBhZ2UgcGF0Y2guICAqLworKyNkZWZpbmUgT0hXX1I4S1BGRVRDSAkweDIJLyogbWF5IG5lZWQgUjgwMDAgcHJlZmV0Y2ggcGF0Y2guICAqLworKyNkZWZpbmUgT0hXX1I1S0VPUAkweDQJLyogUjUwMDAgZW5kLW9mLXBhZ2UgcGF0Y2guICAqLworKyNkZWZpbmUgT0hXX1I1S0NWVEwJMHg4CS8qIFI1MDAwIGN2dC5bZHNdLmwgYnVnLiAgY2xlYW49MS4gICovCisrCisrI2RlZmluZSBPUEFEX1BSRUZJWAkweDEKKysjZGVmaW5lIE9QQURfUE9TVEZJWAkweDIKKysjZGVmaW5lIE9QQURfU1lNQk9MCTB4NAorKworKy8qIEVudHJ5IGZvdW5kIGluIGAub3B0aW9ucycgc2VjdGlvbi4gICovCisrCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBFbGYzMl9Xb3JkIGh3cF9mbGFnczE7CS8qIEV4dHJhIGZsYWdzLiAgKi8KKysgIEVsZjMyX1dvcmQgaHdwX2ZsYWdzMjsJLyogRXh0cmEgZmxhZ3MuICAqLworK30gRWxmX09wdGlvbnNfSHc7CisrCisrLyogTWFza3MgZm9yIGBpbmZvJyBpbiBFbGZPcHRpb25zIGZvciBPREtfSFdBTkQgYW5kIE9ES19IV09SIGVudHJpZXMuICAqLworKworKyNkZWZpbmUgT0hXQTBfUjRLRU9QX0NIRUNLRUQJMHgwMDAwMDAwMQorKyNkZWZpbmUgT0hXQTFfUjRLRU9QX0NMRUFOCTB4MDAwMDAwMDIKKysKKysvKiBNSVBTIHJlbG9jcy4gICovCisrCisrI2RlZmluZSBSX01JUFNfTk9ORQkJMAkvKiBObyByZWxvYyAqLworKyNkZWZpbmUgUl9NSVBTXzE2CQkxCS8qIERpcmVjdCAxNiBiaXQgKi8KKysjZGVmaW5lIFJfTUlQU18zMgkJMgkvKiBEaXJlY3QgMzIgYml0ICovCisrI2RlZmluZSBSX01JUFNfUkVMMzIJCTMJLyogUEMgcmVsYXRpdmUgMzIgYml0ICovCisrI2RlZmluZSBSX01JUFNfMjYJCTQJLyogRGlyZWN0IDI2IGJpdCBzaGlmdGVkICovCisrI2RlZmluZSBSX01JUFNfSEkxNgkJNQkvKiBIaWdoIDE2IGJpdCAqLworKyNkZWZpbmUgUl9NSVBTX0xPMTYJCTYJLyogTG93IDE2IGJpdCAqLworKyNkZWZpbmUgUl9NSVBTX0dQUkVMMTYJCTcJLyogR1AgcmVsYXRpdmUgMTYgYml0ICovCisrI2RlZmluZSBSX01JUFNfTElURVJBTAkJOAkvKiAxNiBiaXQgbGl0ZXJhbCBlbnRyeSAqLworKyNkZWZpbmUgUl9NSVBTX0dPVDE2CQk5CS8qIDE2IGJpdCBHT1QgZW50cnkgKi8KKysjZGVmaW5lIFJfTUlQU19QQzE2CQkxMAkvKiBQQyByZWxhdGl2ZSAxNiBiaXQgKi8KKysjZGVmaW5lIFJfTUlQU19DQUxMMTYJCTExCS8qIDE2IGJpdCBHT1QgZW50cnkgZm9yIGZ1bmN0aW9uICovCisrI2RlZmluZSBSX01JUFNfR1BSRUwzMgkJMTIJLyogR1AgcmVsYXRpdmUgMzIgYml0ICovCisrCisrI2RlZmluZSBSX01JUFNfU0hJRlQ1CQkxNgorKyNkZWZpbmUgUl9NSVBTX1NISUZUNgkJMTcKKysjZGVmaW5lIFJfTUlQU182NAkJMTgKKysjZGVmaW5lIFJfTUlQU19HT1RfRElTUAkJMTkKKysjZGVmaW5lIFJfTUlQU19HT1RfUEFHRQkJMjAKKysjZGVmaW5lIFJfTUlQU19HT1RfT0ZTVAkJMjEKKysjZGVmaW5lIFJfTUlQU19HT1RfSEkxNgkJMjIKKysjZGVmaW5lIFJfTUlQU19HT1RfTE8xNgkJMjMKKysjZGVmaW5lIFJfTUlQU19TVUIJCTI0CisrI2RlZmluZSBSX01JUFNfSU5TRVJUX0EJCTI1CisrI2RlZmluZSBSX01JUFNfSU5TRVJUX0IJCTI2CisrI2RlZmluZSBSX01JUFNfREVMRVRFCQkyNworKyNkZWZpbmUgUl9NSVBTX0hJR0hFUgkJMjgKKysjZGVmaW5lIFJfTUlQU19ISUdIRVNUCQkyOQorKyNkZWZpbmUgUl9NSVBTX0NBTExfSEkxNgkzMAorKyNkZWZpbmUgUl9NSVBTX0NBTExfTE8xNgkzMQorKyNkZWZpbmUgUl9NSVBTX1NDTl9ESVNQCQkzMgorKyNkZWZpbmUgUl9NSVBTX1JFTDE2CQkzMworKyNkZWZpbmUgUl9NSVBTX0FERF9JTU1FRElBVEUJMzQKKysjZGVmaW5lIFJfTUlQU19QSlVNUAkJMzUKKysjZGVmaW5lIFJfTUlQU19SRUxHT1QJCTM2CisrI2RlZmluZSBSX01JUFNfSkFMUgkJMzcKKysjZGVmaW5lIFJfTUlQU19UTFNfRFRQTU9EMzIJMzgJLyogTW9kdWxlIG51bWJlciAzMiBiaXQgKi8KKysjZGVmaW5lIFJfTUlQU19UTFNfRFRQUkVMMzIJMzkJLyogTW9kdWxlLXJlbGF0aXZlIG9mZnNldCAzMiBiaXQgKi8KKysjZGVmaW5lIFJfTUlQU19UTFNfRFRQTU9ENjQJNDAJLyogTW9kdWxlIG51bWJlciA2NCBiaXQgKi8KKysjZGVmaW5lIFJfTUlQU19UTFNfRFRQUkVMNjQJNDEJLyogTW9kdWxlLXJlbGF0aXZlIG9mZnNldCA2NCBiaXQgKi8KKysjZGVmaW5lIFJfTUlQU19UTFNfR0QJCTQyCS8qIDE2IGJpdCBHT1Qgb2Zmc2V0IGZvciBHRCAqLworKyNkZWZpbmUgUl9NSVBTX1RMU19MRE0JCTQzCS8qIDE2IGJpdCBHT1Qgb2Zmc2V0IGZvciBMRE0gKi8KKysjZGVmaW5lIFJfTUlQU19UTFNfRFRQUkVMX0hJMTYJNDQJLyogTW9kdWxlLXJlbGF0aXZlIG9mZnNldCwgaGlnaCAxNiBiaXRzICovCisrI2RlZmluZSBSX01JUFNfVExTX0RUUFJFTF9MTzE2CTQ1CS8qIE1vZHVsZS1yZWxhdGl2ZSBvZmZzZXQsIGxvdyAxNiBiaXRzICovCisrI2RlZmluZSBSX01JUFNfVExTX0dPVFRQUkVMCTQ2CS8qIDE2IGJpdCBHT1Qgb2Zmc2V0IGZvciBJRSAqLworKyNkZWZpbmUgUl9NSVBTX1RMU19UUFJFTDMyCTQ3CS8qIFRQLXJlbGF0aXZlIG9mZnNldCwgMzIgYml0ICovCisrI2RlZmluZSBSX01JUFNfVExTX1RQUkVMNjQJNDgJLyogVFAtcmVsYXRpdmUgb2Zmc2V0LCA2NCBiaXQgKi8KKysjZGVmaW5lIFJfTUlQU19UTFNfVFBSRUxfSEkxNgk0OQkvKiBUUC1yZWxhdGl2ZSBvZmZzZXQsIGhpZ2ggMTYgYml0cyAqLworKyNkZWZpbmUgUl9NSVBTX1RMU19UUFJFTF9MTzE2CTUwCS8qIFRQLXJlbGF0aXZlIG9mZnNldCwgbG93IDE2IGJpdHMgKi8KKysjZGVmaW5lIFJfTUlQU19HTE9CX0RBVAkJNTEKKysjZGVmaW5lIFJfTUlQU19DT1BZCQkxMjYKKysjZGVmaW5lIFJfTUlQU19KVU1QX1NMT1QgICAgICAgIDEyNworKy8qIEtlZXAgdGhpcyB0aGUgbGFzdCBlbnRyeS4gICovCisrI2RlZmluZSBSX01JUFNfTlVNCQkxMjgKKysKKysvKiBMZWdhbCB2YWx1ZXMgZm9yIHBfdHlwZSBmaWVsZCBvZiBFbGYzMl9QaGRyLiAgKi8KKysKKysjZGVmaW5lIFBUX01JUFNfUkVHSU5GTwkweDcwMDAwMDAwCS8qIFJlZ2lzdGVyIHVzYWdlIGluZm9ybWF0aW9uICovCisrI2RlZmluZSBQVF9NSVBTX1JUUFJPQyAgMHg3MDAwMDAwMQkvKiBSdW50aW1lIHByb2NlZHVyZSB0YWJsZS4gKi8KKysjZGVmaW5lIFBUX01JUFNfT1BUSU9OUyAweDcwMDAwMDAyCisrCisrLyogU3BlY2lhbCBwcm9ncmFtIGhlYWRlciB0eXBlcy4gICovCisrCisrI2RlZmluZSBQRl9NSVBTX0xPQ0FMCTB4MTAwMDAwMDAKKysKKysvKiBMZWdhbCB2YWx1ZXMgZm9yIGRfdGFnIGZpZWxkIG9mIEVsZjMyX0R5bi4gICovCisrCisrI2RlZmluZSBEVF9NSVBTX1JMRF9WRVJTSU9OICAweDcwMDAwMDAxCS8qIFJ1bnRpbWUgbGlua2VyIGludGVyZmFjZSB2ZXJzaW9uICovCisrI2RlZmluZSBEVF9NSVBTX1RJTUVfU1RBTVAgICAweDcwMDAwMDAyCS8qIFRpbWVzdGFtcCAqLworKyNkZWZpbmUgRFRfTUlQU19JQ0hFQ0tTVU0gICAgMHg3MDAwMDAwMwkvKiBDaGVja3N1bSAqLworKyNkZWZpbmUgRFRfTUlQU19JVkVSU0lPTiAgICAgMHg3MDAwMDAwNAkvKiBWZXJzaW9uIHN0cmluZyAoc3RyaW5nIHRibCBpbmRleCkgKi8KKysjZGVmaW5lIERUX01JUFNfRkxBR1MJICAgICAweDcwMDAwMDA1CS8qIEZsYWdzICovCisrI2RlZmluZSBEVF9NSVBTX0JBU0VfQUREUkVTUyAweDcwMDAwMDA2CS8qIEJhc2UgYWRkcmVzcyAqLworKyNkZWZpbmUgRFRfTUlQU19NU1lNCSAgICAgMHg3MDAwMDAwNworKyNkZWZpbmUgRFRfTUlQU19DT05GTElDVCAgICAgMHg3MDAwMDAwOAkvKiBBZGRyZXNzIG9mIENPTkZMSUNUIHNlY3Rpb24gKi8KKysjZGVmaW5lIERUX01JUFNfTElCTElTVAkgICAgIDB4NzAwMDAwMDkJLyogQWRkcmVzcyBvZiBMSUJMSVNUIHNlY3Rpb24gKi8KKysjZGVmaW5lIERUX01JUFNfTE9DQUxfR09UTk8gIDB4NzAwMDAwMGEJLyogTnVtYmVyIG9mIGxvY2FsIEdPVCBlbnRyaWVzICovCisrI2RlZmluZSBEVF9NSVBTX0NPTkZMSUNUTk8gICAweDcwMDAwMDBiCS8qIE51bWJlciBvZiBDT05GTElDVCBlbnRyaWVzICovCisrI2RlZmluZSBEVF9NSVBTX0xJQkxJU1ROTyAgICAweDcwMDAwMDEwCS8qIE51bWJlciBvZiBMSUJMSVNUIGVudHJpZXMgKi8KKysjZGVmaW5lIERUX01JUFNfU1lNVEFCTk8gICAgIDB4NzAwMDAwMTEJLyogTnVtYmVyIG9mIERZTlNZTSBlbnRyaWVzICovCisrI2RlZmluZSBEVF9NSVBTX1VOUkVGRVhUTk8gICAweDcwMDAwMDEyCS8qIEZpcnN0IGV4dGVybmFsIERZTlNZTSAqLworKyNkZWZpbmUgRFRfTUlQU19HT1RTWU0JICAgICAweDcwMDAwMDEzCS8qIEZpcnN0IEdPVCBlbnRyeSBpbiBEWU5TWU0gKi8KKysjZGVmaW5lIERUX01JUFNfSElQQUdFTk8gICAgIDB4NzAwMDAwMTQJLyogTnVtYmVyIG9mIEdPVCBwYWdlIHRhYmxlIGVudHJpZXMgKi8KKysjZGVmaW5lIERUX01JUFNfUkxEX01BUAkgICAgIDB4NzAwMDAwMTYJLyogQWRkcmVzcyBvZiBydW4gdGltZSBsb2FkZXIgbWFwLiAgKi8KKysjZGVmaW5lIERUX01JUFNfREVMVEFfQ0xBU1MgIDB4NzAwMDAwMTcJLyogRGVsdGEgQysrIGNsYXNzIGRlZmluaXRpb24uICAqLworKyNkZWZpbmUgRFRfTUlQU19ERUxUQV9DTEFTU19OTyAgICAweDcwMDAwMDE4IC8qIE51bWJlciBvZiBlbnRyaWVzIGluCisrCQkJCQkJRFRfTUlQU19ERUxUQV9DTEFTUy4gICovCisrI2RlZmluZSBEVF9NSVBTX0RFTFRBX0lOU1RBTkNFICAgIDB4NzAwMDAwMTkgLyogRGVsdGEgQysrIGNsYXNzIGluc3RhbmNlcy4gICovCisrI2RlZmluZSBEVF9NSVBTX0RFTFRBX0lOU1RBTkNFX05PIDB4NzAwMDAwMWEgLyogTnVtYmVyIG9mIGVudHJpZXMgaW4KKysJCQkJCQlEVF9NSVBTX0RFTFRBX0lOU1RBTkNFLiAgKi8KKysjZGVmaW5lIERUX01JUFNfREVMVEFfUkVMT0MgIDB4NzAwMDAwMWIgLyogRGVsdGEgcmVsb2NhdGlvbnMuICAqLworKyNkZWZpbmUgRFRfTUlQU19ERUxUQV9SRUxPQ19OTyAweDcwMDAwMDFjIC8qIE51bWJlciBvZiBlbnRyaWVzIGluCisrCQkJCQkgICAgIERUX01JUFNfREVMVEFfUkVMT0MuICAqLworKyNkZWZpbmUgRFRfTUlQU19ERUxUQV9TWU0gICAgMHg3MDAwMDAxZCAvKiBEZWx0YSBzeW1ib2xzIHRoYXQgRGVsdGEKKysJCQkJCSAgIHJlbG9jYXRpb25zIHJlZmVyIHRvLiAgKi8KKysjZGVmaW5lIERUX01JUFNfREVMVEFfU1lNX05PIDB4NzAwMDAwMWUgLyogTnVtYmVyIG9mIGVudHJpZXMgaW4KKysJCQkJCSAgIERUX01JUFNfREVMVEFfU1lNLiAgKi8KKysjZGVmaW5lIERUX01JUFNfREVMVEFfQ0xBU1NTWU0gMHg3MDAwMDAyMCAvKiBEZWx0YSBzeW1ib2xzIHRoYXQgaG9sZCB0aGUKKysJCQkJCSAgICAgY2xhc3MgZGVjbGFyYXRpb24uICAqLworKyNkZWZpbmUgRFRfTUlQU19ERUxUQV9DTEFTU1NZTV9OTyAweDcwMDAwMDIxIC8qIE51bWJlciBvZiBlbnRyaWVzIGluCisrCQkJCQkJRFRfTUlQU19ERUxUQV9DTEFTU1NZTS4gICovCisrI2RlZmluZSBEVF9NSVBTX0NYWF9GTEFHUyAgICAweDcwMDAwMDIyIC8qIEZsYWdzIGluZGljYXRpbmcgZm9yIEMrKyBmbGF2b3IuICAqLworKyNkZWZpbmUgRFRfTUlQU19QSVhJRV9JTklUICAgMHg3MDAwMDAyMworKyNkZWZpbmUgRFRfTUlQU19TWU1CT0xfTElCICAgMHg3MDAwMDAyNAorKyNkZWZpbmUgRFRfTUlQU19MT0NBTFBBR0VfR09USURYIDB4NzAwMDAwMjUKKysjZGVmaW5lIERUX01JUFNfTE9DQUxfR09USURYIDB4NzAwMDAwMjYKKysjZGVmaW5lIERUX01JUFNfSElEREVOX0dPVElEWCAweDcwMDAwMDI3CisrI2RlZmluZSBEVF9NSVBTX1BST1RFQ1RFRF9HT1RJRFggMHg3MDAwMDAyOAorKyNkZWZpbmUgRFRfTUlQU19PUFRJT05TCSAgICAgMHg3MDAwMDAyOSAvKiBBZGRyZXNzIG9mIC5vcHRpb25zLiAgKi8KKysjZGVmaW5lIERUX01JUFNfSU5URVJGQUNFICAgIDB4NzAwMDAwMmEgLyogQWRkcmVzcyBvZiAuaW50ZXJmYWNlLiAgKi8KKysjZGVmaW5lIERUX01JUFNfRFlOU1RSX0FMSUdOIDB4NzAwMDAwMmIKKysjZGVmaW5lIERUX01JUFNfSU5URVJGQUNFX1NJWkUgMHg3MDAwMDAyYyAvKiBTaXplIG9mIHRoZSAuaW50ZXJmYWNlIHNlY3Rpb24uICovCisrI2RlZmluZSBEVF9NSVBTX1JMRF9URVhUX1JFU09MVkVfQUREUiAweDcwMDAwMDJkIC8qIEFkZHJlc3Mgb2YgcmxkX3RleHRfcnNvbHZlCisrCQkJCQkJICAgIGZ1bmN0aW9uIHN0b3JlZCBpbiBHT1QuICAqLworKyNkZWZpbmUgRFRfTUlQU19QRVJGX1NVRkZJWCAgMHg3MDAwMDAyZSAvKiBEZWZhdWx0IHN1ZmZpeCBvZiBkc28gdG8gYmUgYWRkZWQKKysJCQkJCSAgIGJ5IHJsZCBvbiBkbG9wZW4oKSBjYWxscy4gICovCisrI2RlZmluZSBEVF9NSVBTX0NPTVBBQ1RfU0laRSAweDcwMDAwMDJmIC8qIChPMzIpU2l6ZSBvZiBjb21wYWN0IHJlbCBzZWN0aW9uLiAqLworKyNkZWZpbmUgRFRfTUlQU19HUF9WQUxVRSAgICAgMHg3MDAwMDAzMCAvKiBHUCB2YWx1ZSBmb3IgYXV4IEdPVHMuICAqLworKyNkZWZpbmUgRFRfTUlQU19BVVhfRFlOQU1JQyAgMHg3MDAwMDAzMSAvKiBBZGRyZXNzIG9mIGF1eCAuZHluYW1pYy4gICovCisrLyogVGhlIGFkZHJlc3Mgb2YgLmdvdC5wbHQgaW4gYW4gZXhlY3V0YWJsZSB1c2luZyB0aGUgbmV3IG5vbi1QSUMgQUJJLiAgKi8KKysjZGVmaW5lIERUX01JUFNfUExUR09UCSAgICAgMHg3MDAwMDAzMgorKy8qIFRoZSBiYXNlIG9mIHRoZSBQTFQgaW4gYW4gZXhlY3V0YWJsZSB1c2luZyB0aGUgbmV3IG5vbi1QSUMgQUJJIGlmIHRoYXQKKysgICBQTFQgaXMgd3JpdGFibGUuICBGb3IgYSBub24td3JpdGFibGUgUExULCB0aGlzIGlzIG9taXR0ZWQgb3IgaGFzIGEgemVybworKyAgIHZhbHVlLiAgKi8KKysjZGVmaW5lIERUX01JUFNfUldQTFQgICAgICAgIDB4NzAwMDAwMzQKKysjZGVmaW5lIERUX01JUFNfTlVNCSAgICAgMHgzNQorKworKy8qIExlZ2FsIHZhbHVlcyBmb3IgRFRfTUlQU19GTEFHUyBFbGYzMl9EeW4gZW50cnkuICAqLworKworKyNkZWZpbmUgUkhGX05PTkUJCSAgIDAJCS8qIE5vIGZsYWdzICovCisrI2RlZmluZSBSSEZfUVVJQ0tTVEFSVAkJICAgKDEgPDwgMCkJLyogVXNlIHF1aWNrc3RhcnQgKi8KKysjZGVmaW5lIFJIRl9OT1RQT1QJCSAgICgxIDw8IDEpCS8qIEhhc2ggc2l6ZSBub3QgcG93ZXIgb2YgMiAqLworKyNkZWZpbmUgUkhGX05PX0xJQlJBUllfUkVQTEFDRU1FTlQgKDEgPDwgMikJLyogSWdub3JlIExEX0xJQlJBUllfUEFUSCAqLworKyNkZWZpbmUgUkhGX05PX01PVkUJCSAgICgxIDw8IDMpCisrI2RlZmluZSBSSEZfU0dJX09OTFkJCSAgICgxIDw8IDQpCisrI2RlZmluZSBSSEZfR1VBUkFOVEVFX0lOSVQJICAgKDEgPDwgNSkKKysjZGVmaW5lIFJIRl9ERUxUQV9DX1BMVVNfUExVUwkgICAoMSA8PCA2KQorKyNkZWZpbmUgUkhGX0dVQVJBTlRFRV9TVEFSVF9JTklUICAgKDEgPDwgNykKKysjZGVmaW5lIFJIRl9QSVhJRQkJICAgKDEgPDwgOCkKKysjZGVmaW5lIFJIRl9ERUZBVUxUX0RFTEFZX0xPQUQJICAgKDEgPDwgOSkKKysjZGVmaW5lIFJIRl9SRVFVSUNLU1RBUlQJICAgKDEgPDwgMTApCisrI2RlZmluZSBSSEZfUkVRVUlDS1NUQVJURUQJICAgKDEgPDwgMTEpCisrI2RlZmluZSBSSEZfQ09SRAkJICAgKDEgPDwgMTIpCisrI2RlZmluZSBSSEZfTk9fVU5SRVNfVU5ERUYJICAgKDEgPDwgMTMpCisrI2RlZmluZSBSSEZfUkxEX09SREVSX1NBRkUJICAgKDEgPDwgMTQpCisrCisrLyogRW50cmllcyBmb3VuZCBpbiBzZWN0aW9ucyBvZiB0eXBlIFNIVF9NSVBTX0xJQkxJU1QuICAqLworKworK3R5cGVkZWYgc3RydWN0CisreworKyAgRWxmMzJfV29yZCBsX25hbWU7CQkvKiBOYW1lIChzdHJpbmcgdGFibGUgaW5kZXgpICovCisrICBFbGYzMl9Xb3JkIGxfdGltZV9zdGFtcDsJLyogVGltZXN0YW1wICovCisrICBFbGYzMl9Xb3JkIGxfY2hlY2tzdW07CS8qIENoZWNrc3VtICovCisrICBFbGYzMl9Xb3JkIGxfdmVyc2lvbjsJCS8qIEludGVyZmFjZSB2ZXJzaW9uICovCisrICBFbGYzMl9Xb3JkIGxfZmxhZ3M7CQkvKiBGbGFncyAqLworK30gRWxmMzJfTGliOworKworK3R5cGVkZWYgc3RydWN0CisreworKyAgRWxmNjRfV29yZCBsX25hbWU7CQkvKiBOYW1lIChzdHJpbmcgdGFibGUgaW5kZXgpICovCisrICBFbGY2NF9Xb3JkIGxfdGltZV9zdGFtcDsJLyogVGltZXN0YW1wICovCisrICBFbGY2NF9Xb3JkIGxfY2hlY2tzdW07CS8qIENoZWNrc3VtICovCisrICBFbGY2NF9Xb3JkIGxfdmVyc2lvbjsJCS8qIEludGVyZmFjZSB2ZXJzaW9uICovCisrICBFbGY2NF9Xb3JkIGxfZmxhZ3M7CQkvKiBGbGFncyAqLworK30gRWxmNjRfTGliOworKworKworKy8qIExlZ2FsIHZhbHVlcyBmb3IgbF9mbGFncy4gICovCisrCisrI2RlZmluZSBMTF9OT05FCQkgIDAKKysjZGVmaW5lIExMX0VYQUNUX01BVENICSAgKDEgPDwgMCkJLyogUmVxdWlyZSBleGFjdCBtYXRjaCAqLworKyNkZWZpbmUgTExfSUdOT1JFX0lOVF9WRVIgKDEgPDwgMSkJLyogSWdub3JlIGludGVyZmFjZSB2ZXJzaW9uICovCisrI2RlZmluZSBMTF9SRVFVSVJFX01JTk9SICAoMSA8PCAyKQorKyNkZWZpbmUgTExfRVhQT1JUUwkgICgxIDw8IDMpCisrI2RlZmluZSBMTF9ERUxBWV9MT0FECSAgKDEgPDwgNCkKKysjZGVmaW5lIExMX0RFTFRBCSAgKDEgPDwgNSkKKysKKysvKiBFbnRyaWVzIGZvdW5kIGluIHNlY3Rpb25zIG9mIHR5cGUgU0hUX01JUFNfQ09ORkxJQ1QuICAqLworKworK3R5cGVkZWYgRWxmMzJfQWRkciBFbGYzMl9Db25mbGljdDsKKysKKysKKysvKiBIUFBBIHNwZWNpZmljIGRlZmluaXRpb25zLiAgKi8KKysKKysvKiBMZWdhbCB2YWx1ZXMgZm9yIGVfZmxhZ3MgZmllbGQgb2YgRWxmMzJfRWhkci4gICovCisrCisrI2RlZmluZSBFRl9QQVJJU0NfVFJBUE5JTAkweDAwMDEwMDAwIC8qIFRyYXAgbmlsIHBvaW50ZXIgZGVyZWZlcmVuY2UuICAqLworKyNkZWZpbmUgRUZfUEFSSVNDX0VYVAkJMHgwMDAyMDAwMCAvKiBQcm9ncmFtIHVzZXMgYXJjaC4gZXh0ZW5zaW9ucy4gKi8KKysjZGVmaW5lIEVGX1BBUklTQ19MU0IJCTB4MDAwNDAwMDAgLyogUHJvZ3JhbSBleHBlY3RzIGxpdHRsZSBlbmRpYW4uICovCisrI2RlZmluZSBFRl9QQVJJU0NfV0lERQkJMHgwMDA4MDAwMCAvKiBQcm9ncmFtIGV4cGVjdHMgd2lkZSBtb2RlLiAgKi8KKysjZGVmaW5lIEVGX1BBUklTQ19OT19LQUJQCTB4MDAxMDAwMDAgLyogTm8ga2VybmVsIGFzc2lzdGVkIGJyYW5jaAorKwkJCQkJICAgICAgcHJlZGljdGlvbi4gICovCisrI2RlZmluZSBFRl9QQVJJU0NfTEFaWVNXQVAJMHgwMDQwMDAwMCAvKiBBbGxvdyBsYXp5IHN3YXBwaW5nLiAgKi8KKysjZGVmaW5lIEVGX1BBUklTQ19BUkNICQkweDAwMDBmZmZmIC8qIEFyY2hpdGVjdHVyZSB2ZXJzaW9uLiAgKi8KKysKKysvKiBEZWZpbmVkIHZhbHVlcyBmb3IgYGVfZmxhZ3MgJiBFRl9QQVJJU0NfQVJDSCcgYXJlOiAgKi8KKysKKysjZGVmaW5lIEVGQV9QQVJJU0NfMV8wCQkgICAgMHgwMjBiIC8qIFBBLVJJU0MgMS4wIGJpZy1lbmRpYW4uICAqLworKyNkZWZpbmUgRUZBX1BBUklTQ18xXzEJCSAgICAweDAyMTAgLyogUEEtUklTQyAxLjEgYmlnLWVuZGlhbi4gICovCisrI2RlZmluZSBFRkFfUEFSSVNDXzJfMAkJICAgIDB4MDIxNCAvKiBQQS1SSVNDIDIuMCBiaWctZW5kaWFuLiAgKi8KKysKKysvKiBBZGRpdGlvbmFsIHNlY3Rpb24gaW5kZWNlcy4gICovCisrCisrI2RlZmluZSBTSE5fUEFSSVNDX0FOU0lfQ09NTU9OCTB4ZmYwMAkgICAvKiBTZWN0aW9uIGZvciB0ZW5hdGl2ZWx5IGRlY2xhcmVkCisrCQkJCQkgICAgICBzeW1ib2xzIGluIEFOU0kgQy4gICovCisrI2RlZmluZSBTSE5fUEFSSVNDX0hVR0VfQ09NTU9OCTB4ZmYwMQkgICAvKiBDb21tb24gYmxvY2tzIGluIGh1Z2UgbW9kZWwuICAqLworKworKy8qIExlZ2FsIHZhbHVlcyBmb3Igc2hfdHlwZSBmaWVsZCBvZiBFbGYzMl9TaGRyLiAgKi8KKysKKysjZGVmaW5lIFNIVF9QQVJJU0NfRVhUCQkweDcwMDAwMDAwIC8qIENvbnRhaW5zIHByb2R1Y3Qgc3BlY2lmaWMgZXh0LiAqLworKyNkZWZpbmUgU0hUX1BBUklTQ19VTldJTkQJMHg3MDAwMDAwMSAvKiBVbndpbmQgaW5mb3JtYXRpb24uICAqLworKyNkZWZpbmUgU0hUX1BBUklTQ19ET0MJCTB4NzAwMDAwMDIgLyogRGVidWcgaW5mbyBmb3Igb3B0aW1pemVkIGNvZGUuICovCisrCisrLyogTGVnYWwgdmFsdWVzIGZvciBzaF9mbGFncyBmaWVsZCBvZiBFbGYzMl9TaGRyLiAgKi8KKysKKysjZGVmaW5lIFNIRl9QQVJJU0NfU0hPUlQJMHgyMDAwMDAwMCAvKiBTZWN0aW9uIHdpdGggc2hvcnQgYWRkcmVzc2luZy4gKi8KKysjZGVmaW5lIFNIRl9QQVJJU0NfSFVHRQkJMHg0MDAwMDAwMCAvKiBTZWN0aW9uIGZhciBmcm9tIGdwLiAgKi8KKysjZGVmaW5lIFNIRl9QQVJJU0NfU0JQCQkweDgwMDAwMDAwIC8qIFN0YXRpYyBicmFuY2ggcHJlZGljdGlvbiBjb2RlLiAqLworKworKy8qIExlZ2FsIHZhbHVlcyBmb3IgU1RfVFlQRSBzdWJmaWVsZCBvZiBzdF9pbmZvIChzeW1ib2wgdHlwZSkuICAqLworKworKyNkZWZpbmUgU1RUX1BBUklTQ19NSUxMSUNPREUJMTMJLyogTWlsbGljb2RlIGZ1bmN0aW9uIGVudHJ5IHBvaW50LiAgKi8KKysKKysjZGVmaW5lIFNUVF9IUF9PUEFRVUUJCShTVFRfTE9PUyArIDB4MSkKKysjZGVmaW5lIFNUVF9IUF9TVFVCCQkoU1RUX0xPT1MgKyAweDIpCisrCisrLyogSFBQQSByZWxvY3MuICAqLworKworKyNkZWZpbmUgUl9QQVJJU0NfTk9ORQkJMAkvKiBObyByZWxvYy4gICovCisrI2RlZmluZSBSX1BBUklTQ19ESVIzMgkJMQkvKiBEaXJlY3QgMzItYml0IHJlZmVyZW5jZS4gICovCisrI2RlZmluZSBSX1BBUklTQ19ESVIyMUwJCTIJLyogTGVmdCAyMSBiaXRzIG9mIGVmZi4gYWRkcmVzcy4gICovCisrI2RlZmluZSBSX1BBUklTQ19ESVIxN1IJCTMJLyogUmlnaHQgMTcgYml0cyBvZiBlZmYuIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfRElSMTdGCQk0CS8qIDE3IGJpdHMgb2YgZWZmLiBhZGRyZXNzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX0RJUjE0UgkJNgkvKiBSaWdodCAxNCBiaXRzIG9mIGVmZi4gYWRkcmVzcy4gICovCisrI2RlZmluZSBSX1BBUklTQ19QQ1JFTDMyCTkJLyogMzItYml0IHJlbC4gYWRkcmVzcy4gICovCisrI2RlZmluZSBSX1BBUklTQ19QQ1JFTDIxTAkxMAkvKiBMZWZ0IDIxIGJpdHMgb2YgcmVsLiBhZGRyZXNzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMTdSCTExCS8qIFJpZ2h0IDE3IGJpdHMgb2YgcmVsLiBhZGRyZXNzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMTdGCTEyCS8qIDE3IGJpdHMgb2YgcmVsLiBhZGRyZXNzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMTRSCTE0CS8qIFJpZ2h0IDE0IGJpdHMgb2YgcmVsLiBhZGRyZXNzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX0RQUkVMMjFMCTE4CS8qIExlZnQgMjEgYml0cyBvZiByZWwuIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfRFBSRUwxNFIJMjIJLyogUmlnaHQgMTQgYml0cyBvZiByZWwuIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfR1BSRUwyMUwJMjYJLyogR1AtcmVsYXRpdmUsIGxlZnQgMjEgYml0cy4gICovCisrI2RlZmluZSBSX1BBUklTQ19HUFJFTDE0UgkzMAkvKiBHUC1yZWxhdGl2ZSwgcmlnaHQgMTQgYml0cy4gICovCisrI2RlZmluZSBSX1BBUklTQ19MVE9GRjIxTAkzNAkvKiBMVC1yZWxhdGl2ZSwgbGVmdCAyMSBiaXRzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGMTRSCTM4CS8qIExULXJlbGF0aXZlLCByaWdodCAxNCBiaXRzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX1NFQ1JFTDMyCTQxCS8qIDMyIGJpdHMgc2VjdGlvbiByZWwuIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfU0VHQkFTRQk0OAkvKiBObyByZWxvY2F0aW9uLCBzZXQgc2VnbWVudCBiYXNlLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX1NFR1JFTDMyCTQ5CS8qIDMyIGJpdHMgc2VnbWVudCByZWwuIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfUExUT0ZGMjFMCTUwCS8qIFBMVCByZWwuIGFkZHJlc3MsIGxlZnQgMjEgYml0cy4gICovCisrI2RlZmluZSBSX1BBUklTQ19QTFRPRkYxNFIJNTQJLyogUExUIHJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCisrI2RlZmluZSBSX1BBUklTQ19MVE9GRl9GUFRSMzIJNTcJLyogMzIgYml0cyBMVC1yZWwuIGZ1bmN0aW9uIHBvaW50ZXIuICovCisrI2RlZmluZSBSX1BBUklTQ19MVE9GRl9GUFRSMjFMCTU4CS8qIExULXJlbC4gZmN0IHB0ciwgbGVmdCAyMSBiaXRzLiAqLworKyNkZWZpbmUgUl9QQVJJU0NfTFRPRkZfRlBUUjE0Ugk2MgkvKiBMVC1yZWwuIGZjdCBwdHIsIHJpZ2h0IDE0IGJpdHMuICovCisrI2RlZmluZSBSX1BBUklTQ19GUFRSNjQJCTY0CS8qIDY0IGJpdHMgZnVuY3Rpb24gYWRkcmVzcy4gICovCisrI2RlZmluZSBSX1BBUklTQ19QTEFCRUwzMgk2NQkvKiAzMiBiaXRzIGZ1bmN0aW9uIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfUExBQkVMMjFMCTY2CS8qIExlZnQgMjEgYml0cyBvZiBmZGVzYyBhZGRyZXNzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX1BMQUJFTDE0Ugk3MAkvKiBSaWdodCAxNCBiaXRzIG9mIGZkZXNjIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfUENSRUw2NAk3MgkvKiA2NCBiaXRzIFBDLXJlbC4gYWRkcmVzcy4gICovCisrI2RlZmluZSBSX1BBUklTQ19QQ1JFTDIyRgk3NAkvKiAyMiBiaXRzIFBDLXJlbC4gYWRkcmVzcy4gICovCisrI2RlZmluZSBSX1BBUklTQ19QQ1JFTDE0V1IJNzUJLyogUEMtcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMTREUgk3NgkvKiBQQyByZWwuIGFkZHJlc3MsIHJpZ2h0IDE0IGJpdHMuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfUENSRUwxNkYJNzcJLyogMTYgYml0cyBQQy1yZWwuIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfUENSRUwxNldGCTc4CS8qIDE2IGJpdHMgUEMtcmVsLiBhZGRyZXNzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMTZERgk3OQkvKiAxNiBiaXRzIFBDLXJlbC4gYWRkcmVzcy4gICovCisrI2RlZmluZSBSX1BBUklTQ19ESVI2NAkJODAJLyogNjQgYml0cyBvZiBlZmYuIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfRElSMTRXUgk4MwkvKiAxNCBiaXRzIG9mIGVmZi4gYWRkcmVzcy4gICovCisrI2RlZmluZSBSX1BBUklTQ19ESVIxNERSCTg0CS8qIDE0IGJpdHMgb2YgZWZmLiBhZGRyZXNzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX0RJUjE2RgkJODUJLyogMTYgYml0cyBvZiBlZmYuIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfRElSMTZXRgk4NgkvKiAxNiBiaXRzIG9mIGVmZi4gYWRkcmVzcy4gICovCisrI2RlZmluZSBSX1BBUklTQ19ESVIxNkRGCTg3CS8qIDE2IGJpdHMgb2YgZWZmLiBhZGRyZXNzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX0dQUkVMNjQJODgJLyogNjQgYml0cyBvZiBHUC1yZWwuIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfR1BSRUwxNFdSCTkxCS8qIEdQLXJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCisrI2RlZmluZSBSX1BBUklTQ19HUFJFTDE0RFIJOTIJLyogR1AtcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX0dQUkVMMTZGCTkzCS8qIDE2IGJpdHMgR1AtcmVsLiBhZGRyZXNzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX0dQUkVMMTZXRgk5NAkvKiAxNiBiaXRzIEdQLXJlbC4gYWRkcmVzcy4gICovCisrI2RlZmluZSBSX1BBUklTQ19HUFJFTDE2REYJOTUJLyogMTYgYml0cyBHUC1yZWwuIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfTFRPRkY2NAk5NgkvKiA2NCBiaXRzIExULXJlbC4gYWRkcmVzcy4gICovCisrI2RlZmluZSBSX1BBUklTQ19MVE9GRjE0V1IJOTkJLyogTFQtcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGMTREUgkxMDAJLyogTFQtcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGMTZGCTEwMQkvKiAxNiBiaXRzIExULXJlbC4gYWRkcmVzcy4gICovCisrI2RlZmluZSBSX1BBUklTQ19MVE9GRjE2V0YJMTAyCS8qIDE2IGJpdHMgTFQtcmVsLiBhZGRyZXNzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGMTZERgkxMDMJLyogMTYgYml0cyBMVC1yZWwuIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfU0VDUkVMNjQJMTA0CS8qIDY0IGJpdHMgc2VjdGlvbiByZWwuIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfU0VHUkVMNjQJMTEyCS8qIDY0IGJpdHMgc2VnbWVudCByZWwuIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfUExUT0ZGMTRXUgkxMTUJLyogUExULXJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCisrI2RlZmluZSBSX1BBUklTQ19QTFRPRkYxNERSCTExNgkvKiBQTFQtcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX1BMVE9GRjE2RgkxMTcJLyogMTYgYml0cyBMVC1yZWwuIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfUExUT0ZGMTZXRgkxMTgJLyogMTYgYml0cyBQTFQtcmVsLiBhZGRyZXNzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX1BMVE9GRjE2REYJMTE5CS8qIDE2IGJpdHMgUExULXJlbC4gYWRkcmVzcy4gICovCisrI2RlZmluZSBSX1BBUklTQ19MVE9GRl9GUFRSNjQJMTIwCS8qIDY0IGJpdHMgTFQtcmVsLiBmdW5jdGlvbiBwdHIuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfTFRPRkZfRlBUUjE0V1IJMTIzCS8qIExULXJlbC4gZmN0LiBwdHIuLCByaWdodCAxNCBiaXRzLiAqLworKyNkZWZpbmUgUl9QQVJJU0NfTFRPRkZfRlBUUjE0RFIJMTI0CS8qIExULXJlbC4gZmN0LiBwdHIuLCByaWdodCAxNCBiaXRzLiAqLworKyNkZWZpbmUgUl9QQVJJU0NfTFRPRkZfRlBUUjE2RgkxMjUJLyogMTYgYml0cyBMVC1yZWwuIGZ1bmN0aW9uIHB0ci4gICovCisrI2RlZmluZSBSX1BBUklTQ19MVE9GRl9GUFRSMTZXRgkxMjYJLyogMTYgYml0cyBMVC1yZWwuIGZ1bmN0aW9uIHB0ci4gICovCisrI2RlZmluZSBSX1BBUklTQ19MVE9GRl9GUFRSMTZERgkxMjcJLyogMTYgYml0cyBMVC1yZWwuIGZ1bmN0aW9uIHB0ci4gICovCisrI2RlZmluZSBSX1BBUklTQ19MT1JFU0VSVkUJMTI4CisrI2RlZmluZSBSX1BBUklTQ19DT1BZCQkxMjgJLyogQ29weSByZWxvY2F0aW9uLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX0lQTFQJCTEyOQkvKiBEeW5hbWljIHJlbG9jLCBpbXBvcnRlZCBQTFQgKi8KKysjZGVmaW5lIFJfUEFSSVNDX0VQTFQJCTEzMAkvKiBEeW5hbWljIHJlbG9jLCBleHBvcnRlZCBQTFQgKi8KKysjZGVmaW5lIFJfUEFSSVNDX1RQUkVMMzIJMTUzCS8qIDMyIGJpdHMgVFAtcmVsLiBhZGRyZXNzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX1RQUkVMMjFMCTE1NAkvKiBUUC1yZWwuIGFkZHJlc3MsIGxlZnQgMjEgYml0cy4gICovCisrI2RlZmluZSBSX1BBUklTQ19UUFJFTDE0UgkxNTgJLyogVFAtcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGX1RQMjFMCTE2MgkvKiBMVC1UUC1yZWwuIGFkZHJlc3MsIGxlZnQgMjEgYml0cy4gKi8KKysjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGX1RQMTRSCTE2NgkvKiBMVC1UUC1yZWwuIGFkZHJlc3MsIHJpZ2h0IDE0IGJpdHMuKi8KKysjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGX1RQMTRGCTE2NwkvKiAxNCBiaXRzIExULVRQLXJlbC4gYWRkcmVzcy4gICovCisrI2RlZmluZSBSX1BBUklTQ19UUFJFTDY0CTIxNgkvKiA2NCBiaXRzIFRQLXJlbC4gYWRkcmVzcy4gICovCisrI2RlZmluZSBSX1BBUklTQ19UUFJFTDE0V1IJMjE5CS8qIFRQLXJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCisrI2RlZmluZSBSX1BBUklTQ19UUFJFTDE0RFIJMjIwCS8qIFRQLXJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCisrI2RlZmluZSBSX1BBUklTQ19UUFJFTDE2RgkyMjEJLyogMTYgYml0cyBUUC1yZWwuIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfVFBSRUwxNldGCTIyMgkvKiAxNiBiaXRzIFRQLXJlbC4gYWRkcmVzcy4gICovCisrI2RlZmluZSBSX1BBUklTQ19UUFJFTDE2REYJMjIzCS8qIDE2IGJpdHMgVFAtcmVsLiBhZGRyZXNzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGX1RQNjQJMjI0CS8qIDY0IGJpdHMgTFQtVFAtcmVsLiBhZGRyZXNzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGX1RQMTRXUgkyMjcJLyogTFQtVFAtcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiovCisrI2RlZmluZSBSX1BBUklTQ19MVE9GRl9UUDE0RFIJMjI4CS8qIExULVRQLXJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4qLworKyNkZWZpbmUgUl9QQVJJU0NfTFRPRkZfVFAxNkYJMjI5CS8qIDE2IGJpdHMgTFQtVFAtcmVsLiBhZGRyZXNzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGX1RQMTZXRgkyMzAJLyogMTYgYml0cyBMVC1UUC1yZWwuIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfTFRPRkZfVFAxNkRGCTIzMQkvKiAxNiBiaXRzIExULVRQLXJlbC4gYWRkcmVzcy4gICovCisrI2RlZmluZSBSX1BBUklTQ19HTlVfVlRFTlRSWQkyMzIKKysjZGVmaW5lIFJfUEFSSVNDX0dOVV9WVElOSEVSSVQJMjMzCisrI2RlZmluZSBSX1BBUklTQ19UTFNfR0QyMUwJMjM0CS8qIEdEIDIxLWJpdCBsZWZ0LiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX1RMU19HRDE0UgkyMzUJLyogR0QgMTQtYml0IHJpZ2h0LiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX1RMU19HRENBTEwJMjM2CS8qIEdEIGNhbGwgdG8gX190X2dfYS4gICovCisrI2RlZmluZSBSX1BBUklTQ19UTFNfTERNMjFMCTIzNwkvKiBMRCBtb2R1bGUgMjEtYml0IGxlZnQuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfVExTX0xETTE0UgkyMzgJLyogTEQgbW9kdWxlIDE0LWJpdCByaWdodC4gICovCisrI2RlZmluZSBSX1BBUklTQ19UTFNfTERNQ0FMTAkyMzkJLyogTEQgbW9kdWxlIGNhbGwgdG8gX190X2dfYS4gICovCisrI2RlZmluZSBSX1BBUklTQ19UTFNfTERPMjFMCTI0MAkvKiBMRCBvZmZzZXQgMjEtYml0IGxlZnQuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfVExTX0xETzE0UgkyNDEJLyogTEQgb2Zmc2V0IDE0LWJpdCByaWdodC4gICovCisrI2RlZmluZSBSX1BBUklTQ19UTFNfRFRQTU9EMzIJMjQyCS8qIERUUCBtb2R1bGUgMzItYml0LiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX1RMU19EVFBNT0Q2NAkyNDMJLyogRFRQIG1vZHVsZSA2NC1iaXQuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfVExTX0RUUE9GRjMyCTI0NAkvKiBEVFAgb2Zmc2V0IDMyLWJpdC4gICovCisrI2RlZmluZSBSX1BBUklTQ19UTFNfRFRQT0ZGNjQJMjQ1CS8qIERUUCBvZmZzZXQgMzItYml0LiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX1RMU19MRTIxTAlSX1BBUklTQ19UUFJFTDIxTAorKyNkZWZpbmUgUl9QQVJJU0NfVExTX0xFMTRSCVJfUEFSSVNDX1RQUkVMMTRSCisrI2RlZmluZSBSX1BBUklTQ19UTFNfSUUyMUwJUl9QQVJJU0NfTFRPRkZfVFAyMUwKKysjZGVmaW5lIFJfUEFSSVNDX1RMU19JRTE0UglSX1BBUklTQ19MVE9GRl9UUDE0UgorKyNkZWZpbmUgUl9QQVJJU0NfVExTX1RQUkVMMzIJUl9QQVJJU0NfVFBSRUwzMgorKyNkZWZpbmUgUl9QQVJJU0NfVExTX1RQUkVMNjQJUl9QQVJJU0NfVFBSRUw2NAorKyNkZWZpbmUgUl9QQVJJU0NfSElSRVNFUlZFCTI1NQorKworKy8qIExlZ2FsIHZhbHVlcyBmb3IgcF90eXBlIGZpZWxkIG9mIEVsZjMyX1BoZHIvRWxmNjRfUGhkci4gICovCisrCisrI2RlZmluZSBQVF9IUF9UTFMJCShQVF9MT09TICsgMHgwKQorKyNkZWZpbmUgUFRfSFBfQ09SRV9OT05FCQkoUFRfTE9PUyArIDB4MSkKKysjZGVmaW5lIFBUX0hQX0NPUkVfVkVSU0lPTgkoUFRfTE9PUyArIDB4MikKKysjZGVmaW5lIFBUX0hQX0NPUkVfS0VSTkVMCShQVF9MT09TICsgMHgzKQorKyNkZWZpbmUgUFRfSFBfQ09SRV9DT01NCQkoUFRfTE9PUyArIDB4NCkKKysjZGVmaW5lIFBUX0hQX0NPUkVfUFJPQwkJKFBUX0xPT1MgKyAweDUpCisrI2RlZmluZSBQVF9IUF9DT1JFX0xPQURBQkxFCShQVF9MT09TICsgMHg2KQorKyNkZWZpbmUgUFRfSFBfQ09SRV9TVEFDSwkoUFRfTE9PUyArIDB4NykKKysjZGVmaW5lIFBUX0hQX0NPUkVfU0hNCQkoUFRfTE9PUyArIDB4OCkKKysjZGVmaW5lIFBUX0hQX0NPUkVfTU1GCQkoUFRfTE9PUyArIDB4OSkKKysjZGVmaW5lIFBUX0hQX1BBUkFMTEVMCQkoUFRfTE9PUyArIDB4MTApCisrI2RlZmluZSBQVF9IUF9GQVNUQklORAkJKFBUX0xPT1MgKyAweDExKQorKyNkZWZpbmUgUFRfSFBfT1BUX0FOTk9UCQkoUFRfTE9PUyArIDB4MTIpCisrI2RlZmluZSBQVF9IUF9IU0xfQU5OT1QJCShQVF9MT09TICsgMHgxMykKKysjZGVmaW5lIFBUX0hQX1NUQUNLCQkoUFRfTE9PUyArIDB4MTQpCisrCisrI2RlZmluZSBQVF9QQVJJU0NfQVJDSEVYVAkweDcwMDAwMDAwCisrI2RlZmluZSBQVF9QQVJJU0NfVU5XSU5ECTB4NzAwMDAwMDEKKysKKysvKiBMZWdhbCB2YWx1ZXMgZm9yIHBfZmxhZ3MgZmllbGQgb2YgRWxmMzJfUGhkci9FbGY2NF9QaGRyLiAgKi8KKysKKysjZGVmaW5lIFBGX1BBUklTQ19TQlAJCTB4MDgwMDAwMDAKKysKKysjZGVmaW5lIFBGX0hQX1BBR0VfU0laRQkJMHgwMDEwMDAwMAorKyNkZWZpbmUgUEZfSFBfRkFSX1NIQVJFRAkweDAwMjAwMDAwCisrI2RlZmluZSBQRl9IUF9ORUFSX1NIQVJFRAkweDAwNDAwMDAwCisrI2RlZmluZSBQRl9IUF9DT0RFCQkweDAxMDAwMDAwCisrI2RlZmluZSBQRl9IUF9NT0RJRlkJCTB4MDIwMDAwMDAKKysjZGVmaW5lIFBGX0hQX0xBWllTV0FQCQkweDA0MDAwMDAwCisrI2RlZmluZSBQRl9IUF9TQlAJCTB4MDgwMDAwMDAKKysKKysKKysvKiBBbHBoYSBzcGVjaWZpYyBkZWZpbml0aW9ucy4gICovCisrCisrLyogTGVnYWwgdmFsdWVzIGZvciBlX2ZsYWdzIGZpZWxkIG9mIEVsZjY0X0VoZHIuICAqLworKworKyNkZWZpbmUgRUZfQUxQSEFfMzJCSVQJCTEJLyogQWxsIGFkZHJlc3NlcyBtdXN0IGJlIDwgMkdCLiAgKi8KKysjZGVmaW5lIEVGX0FMUEhBX0NBTlJFTEFYCTIJLyogUmVsb2NhdGlvbnMgZm9yIHJlbGF4aW5nIGV4aXN0LiAgKi8KKysKKysvKiBMZWdhbCB2YWx1ZXMgZm9yIHNoX3R5cGUgZmllbGQgb2YgRWxmNjRfU2hkci4gICovCisrCisrLyogVGhlc2UgdHdvIGFyZSBwcmltZXJpbHkgY29uY2VybmVkIHdpdGggRUNPRkYgZGVidWdnaW5nIGluZm8uICAqLworKyNkZWZpbmUgU0hUX0FMUEhBX0RFQlVHCQkweDcwMDAwMDAxCisrI2RlZmluZSBTSFRfQUxQSEFfUkVHSU5GTwkweDcwMDAwMDAyCisrCisrLyogTGVnYWwgdmFsdWVzIGZvciBzaF9mbGFncyBmaWVsZCBvZiBFbGY2NF9TaGRyLiAgKi8KKysKKysjZGVmaW5lIFNIRl9BTFBIQV9HUFJFTAkJMHgxMDAwMDAwMAorKworKy8qIExlZ2FsIHZhbHVlcyBmb3Igc3Rfb3RoZXIgZmllbGQgb2YgRWxmNjRfU3ltLiAgKi8KKysjZGVmaW5lIFNUT19BTFBIQV9OT1BWCQkweDgwCS8qIE5vIFBWIHJlcXVpcmVkLiAgKi8KKysjZGVmaW5lIFNUT19BTFBIQV9TVERfR1BMT0FECTB4ODgJLyogUFYgb25seSB1c2VkIGZvciBpbml0aWFsIGxkZ3AuICAqLworKworKy8qIEFscGhhIHJlbG9jcy4gICovCisrCisrI2RlZmluZSBSX0FMUEhBX05PTkUJCTAJLyogTm8gcmVsb2MgKi8KKysjZGVmaW5lIFJfQUxQSEFfUkVGTE9ORwkJMQkvKiBEaXJlY3QgMzIgYml0ICovCisrI2RlZmluZSBSX0FMUEhBX1JFRlFVQUQJCTIJLyogRGlyZWN0IDY0IGJpdCAqLworKyNkZWZpbmUgUl9BTFBIQV9HUFJFTDMyCQkzCS8qIEdQIHJlbGF0aXZlIDMyIGJpdCAqLworKyNkZWZpbmUgUl9BTFBIQV9MSVRFUkFMCQk0CS8qIEdQIHJlbGF0aXZlIDE2IGJpdCB3L29wdGltaXphdGlvbiAqLworKyNkZWZpbmUgUl9BTFBIQV9MSVRVU0UJCTUJLyogT3B0aW1pemF0aW9uIGhpbnQgZm9yIExJVEVSQUwgKi8KKysjZGVmaW5lIFJfQUxQSEFfR1BESVNQCQk2CS8qIEFkZCBkaXNwbGFjZW1lbnQgdG8gR1AgKi8KKysjZGVmaW5lIFJfQUxQSEFfQlJBRERSCQk3CS8qIFBDKzQgcmVsYXRpdmUgMjMgYml0IHNoaWZ0ZWQgKi8KKysjZGVmaW5lIFJfQUxQSEFfSElOVAkJOAkvKiBQQys0IHJlbGF0aXZlIDE2IGJpdCBzaGlmdGVkICovCisrI2RlZmluZSBSX0FMUEhBX1NSRUwxNgkJOQkvKiBQQyByZWxhdGl2ZSAxNiBiaXQgKi8KKysjZGVmaW5lIFJfQUxQSEFfU1JFTDMyCQkxMAkvKiBQQyByZWxhdGl2ZSAzMiBiaXQgKi8KKysjZGVmaW5lIFJfQUxQSEFfU1JFTDY0CQkxMQkvKiBQQyByZWxhdGl2ZSA2NCBiaXQgKi8KKysjZGVmaW5lIFJfQUxQSEFfR1BSRUxISUdICTE3CS8qIEdQIHJlbGF0aXZlIDMyIGJpdCwgaGlnaCAxNiBiaXRzICovCisrI2RlZmluZSBSX0FMUEhBX0dQUkVMTE9XCTE4CS8qIEdQIHJlbGF0aXZlIDMyIGJpdCwgbG93IDE2IGJpdHMgKi8KKysjZGVmaW5lIFJfQUxQSEFfR1BSRUwxNgkJMTkJLyogR1AgcmVsYXRpdmUgMTYgYml0ICovCisrI2RlZmluZSBSX0FMUEhBX0NPUFkJCTI0CS8qIENvcHkgc3ltYm9sIGF0IHJ1bnRpbWUgKi8KKysjZGVmaW5lIFJfQUxQSEFfR0xPQl9EQVQJMjUJLyogQ3JlYXRlIEdPVCBlbnRyeSAqLworKyNkZWZpbmUgUl9BTFBIQV9KTVBfU0xPVAkyNgkvKiBDcmVhdGUgUExUIGVudHJ5ICovCisrI2RlZmluZSBSX0FMUEhBX1JFTEFUSVZFCTI3CS8qIEFkanVzdCBieSBwcm9ncmFtIGJhc2UgKi8KKysjZGVmaW5lIFJfQUxQSEFfVExTX0dEX0hJCTI4CisrI2RlZmluZSBSX0FMUEhBX1RMU0dECQkyOQorKyNkZWZpbmUgUl9BTFBIQV9UTFNfTERNCQkzMAorKyNkZWZpbmUgUl9BTFBIQV9EVFBNT0Q2NAkzMQorKyNkZWZpbmUgUl9BTFBIQV9HT1REVFBSRUwJMzIKKysjZGVmaW5lIFJfQUxQSEFfRFRQUkVMNjQJMzMKKysjZGVmaW5lIFJfQUxQSEFfRFRQUkVMSEkJMzQKKysjZGVmaW5lIFJfQUxQSEFfRFRQUkVMTE8JMzUKKysjZGVmaW5lIFJfQUxQSEFfRFRQUkVMMTYJMzYKKysjZGVmaW5lIFJfQUxQSEFfR09UVFBSRUwJMzcKKysjZGVmaW5lIFJfQUxQSEFfVFBSRUw2NAkJMzgKKysjZGVmaW5lIFJfQUxQSEFfVFBSRUxISQkJMzkKKysjZGVmaW5lIFJfQUxQSEFfVFBSRUxMTwkJNDAKKysjZGVmaW5lIFJfQUxQSEFfVFBSRUwxNgkJNDEKKysvKiBLZWVwIHRoaXMgdGhlIGxhc3QgZW50cnkuICAqLworKyNkZWZpbmUgUl9BTFBIQV9OVU0JCTQ2CisrCisrLyogTWFnaWMgdmFsdWVzIG9mIHRoZSBMSVRVU0UgcmVsb2NhdGlvbiBhZGRlbmQuICAqLworKyNkZWZpbmUgTElUVVNFX0FMUEhBX0FERFIJMAorKyNkZWZpbmUgTElUVVNFX0FMUEhBX0JBU0UJMQorKyNkZWZpbmUgTElUVVNFX0FMUEhBX0JZVE9GRgkyCisrI2RlZmluZSBMSVRVU0VfQUxQSEFfSlNSCTMKKysjZGVmaW5lIExJVFVTRV9BTFBIQV9UTFNfR0QJNAorKyNkZWZpbmUgTElUVVNFX0FMUEhBX1RMU19MRE0JNQorKworKy8qIExlZ2FsIHZhbHVlcyBmb3IgZF90YWcgb2YgRWxmNjRfRHluLiAgKi8KKysjZGVmaW5lIERUX0FMUEhBX1BMVFJPCQkoRFRfTE9QUk9DICsgMCkKKysjZGVmaW5lIERUX0FMUEhBX05VTQkJMQorKworKy8qIFBvd2VyUEMgc3BlY2lmaWMgZGVjbGFyYXRpb25zICovCisrCisrLyogVmFsdWVzIGZvciBFbGYzMi82NF9FaGRyLmVfZmxhZ3MuICAqLworKyNkZWZpbmUgRUZfUFBDX0VNQgkJMHg4MDAwMDAwMAkvKiBQb3dlclBDIGVtYmVkZGVkIGZsYWcgKi8KKysKKysvKiBDeWdudXMgbG9jYWwgYml0cyBiZWxvdyAqLworKyNkZWZpbmUgRUZfUFBDX1JFTE9DQVRBQkxFCTB4MDAwMTAwMDAJLyogUG93ZXJQQyAtbXJlbG9jYXRhYmxlIGZsYWcqLworKyNkZWZpbmUgRUZfUFBDX1JFTE9DQVRBQkxFX0xJQgkweDAwMDA4MDAwCS8qIFBvd2VyUEMgLW1yZWxvY2F0YWJsZS1saWIKKysJCQkJCQkgICBmbGFnICovCisrCisrLyogUG93ZXJQQyByZWxvY2F0aW9ucyBkZWZpbmVkIGJ5IHRoZSBBQklzICovCisrI2RlZmluZSBSX1BQQ19OT05FCQkwCisrI2RlZmluZSBSX1BQQ19BRERSMzIJCTEJLyogMzJiaXQgYWJzb2x1dGUgYWRkcmVzcyAqLworKyNkZWZpbmUgUl9QUENfQUREUjI0CQkyCS8qIDI2Yml0IGFkZHJlc3MsIDIgYml0cyBpZ25vcmVkLiAgKi8KKysjZGVmaW5lIFJfUFBDX0FERFIxNgkJMwkvKiAxNmJpdCBhYnNvbHV0ZSBhZGRyZXNzICovCisrI2RlZmluZSBSX1BQQ19BRERSMTZfTE8JCTQJLyogbG93ZXIgMTZiaXQgb2YgYWJzb2x1dGUgYWRkcmVzcyAqLworKyNkZWZpbmUgUl9QUENfQUREUjE2X0hJCQk1CS8qIGhpZ2ggMTZiaXQgb2YgYWJzb2x1dGUgYWRkcmVzcyAqLworKyNkZWZpbmUgUl9QUENfQUREUjE2X0hBCQk2CS8qIGFkanVzdGVkIGhpZ2ggMTZiaXQgKi8KKysjZGVmaW5lIFJfUFBDX0FERFIxNAkJNwkvKiAxNmJpdCBhZGRyZXNzLCAyIGJpdHMgaWdub3JlZCAqLworKyNkZWZpbmUgUl9QUENfQUREUjE0X0JSVEFLRU4JOAorKyNkZWZpbmUgUl9QUENfQUREUjE0X0JSTlRBS0VOCTkKKysjZGVmaW5lIFJfUFBDX1JFTDI0CQkxMAkvKiBQQyByZWxhdGl2ZSAyNiBiaXQgKi8KKysjZGVmaW5lIFJfUFBDX1JFTDE0CQkxMQkvKiBQQyByZWxhdGl2ZSAxNiBiaXQgKi8KKysjZGVmaW5lIFJfUFBDX1JFTDE0X0JSVEFLRU4JMTIKKysjZGVmaW5lIFJfUFBDX1JFTDE0X0JSTlRBS0VOCTEzCisrI2RlZmluZSBSX1BQQ19HT1QxNgkJMTQKKysjZGVmaW5lIFJfUFBDX0dPVDE2X0xPCQkxNQorKyNkZWZpbmUgUl9QUENfR09UMTZfSEkJCTE2CisrI2RlZmluZSBSX1BQQ19HT1QxNl9IQQkJMTcKKysjZGVmaW5lIFJfUFBDX1BMVFJFTDI0CQkxOAorKyNkZWZpbmUgUl9QUENfQ09QWQkJMTkKKysjZGVmaW5lIFJfUFBDX0dMT0JfREFUCQkyMAorKyNkZWZpbmUgUl9QUENfSk1QX1NMT1QJCTIxCisrI2RlZmluZSBSX1BQQ19SRUxBVElWRQkJMjIKKysjZGVmaW5lIFJfUFBDX0xPQ0FMMjRQQwkJMjMKKysjZGVmaW5lIFJfUFBDX1VBRERSMzIJCTI0CisrI2RlZmluZSBSX1BQQ19VQUREUjE2CQkyNQorKyNkZWZpbmUgUl9QUENfUkVMMzIJCTI2CisrI2RlZmluZSBSX1BQQ19QTFQzMgkJMjcKKysjZGVmaW5lIFJfUFBDX1BMVFJFTDMyCQkyOAorKyNkZWZpbmUgUl9QUENfUExUMTZfTE8JCTI5CisrI2RlZmluZSBSX1BQQ19QTFQxNl9ISQkJMzAKKysjZGVmaW5lIFJfUFBDX1BMVDE2X0hBCQkzMQorKyNkZWZpbmUgUl9QUENfU0RBUkVMMTYJCTMyCisrI2RlZmluZSBSX1BQQ19TRUNUT0ZGCQkzMworKyNkZWZpbmUgUl9QUENfU0VDVE9GRl9MTwkzNAorKyNkZWZpbmUgUl9QUENfU0VDVE9GRl9ISQkzNQorKyNkZWZpbmUgUl9QUENfU0VDVE9GRl9IQQkzNgorKworKy8qIFBvd2VyUEMgcmVsb2NhdGlvbnMgZGVmaW5lZCBmb3IgdGhlIFRMUyBhY2Nlc3MgQUJJLiAgKi8KKysjZGVmaW5lIFJfUFBDX1RMUwkJNjcgLyogbm9uZQkoc3ltK2FkZClAdGxzICovCisrI2RlZmluZSBSX1BQQ19EVFBNT0QzMgkJNjggLyogd29yZDMyCShzeW0rYWRkKUBkdHBtb2QgKi8KKysjZGVmaW5lIFJfUFBDX1RQUkVMMTYJCTY5IC8qIGhhbGYxNioJKHN5bSthZGQpQHRwcmVsICovCisrI2RlZmluZSBSX1BQQ19UUFJFTDE2X0xPCTcwIC8qIGhhbGYxNgkoc3ltK2FkZClAdHByZWxAbCAqLworKyNkZWZpbmUgUl9QUENfVFBSRUwxNl9ISQk3MSAvKiBoYWxmMTYJKHN5bSthZGQpQHRwcmVsQGggKi8KKysjZGVmaW5lIFJfUFBDX1RQUkVMMTZfSEEJNzIgLyogaGFsZjE2CShzeW0rYWRkKUB0cHJlbEBoYSAqLworKyNkZWZpbmUgUl9QUENfVFBSRUwzMgkJNzMgLyogd29yZDMyCShzeW0rYWRkKUB0cHJlbCAqLworKyNkZWZpbmUgUl9QUENfRFRQUkVMMTYJCTc0IC8qIGhhbGYxNioJKHN5bSthZGQpQGR0cHJlbCAqLworKyNkZWZpbmUgUl9QUENfRFRQUkVMMTZfTE8JNzUgLyogaGFsZjE2CShzeW0rYWRkKUBkdHByZWxAbCAqLworKyNkZWZpbmUgUl9QUENfRFRQUkVMMTZfSEkJNzYgLyogaGFsZjE2CShzeW0rYWRkKUBkdHByZWxAaCAqLworKyNkZWZpbmUgUl9QUENfRFRQUkVMMTZfSEEJNzcgLyogaGFsZjE2CShzeW0rYWRkKUBkdHByZWxAaGEgKi8KKysjZGVmaW5lIFJfUFBDX0RUUFJFTDMyCQk3OCAvKiB3b3JkMzIJKHN5bSthZGQpQGR0cHJlbCAqLworKyNkZWZpbmUgUl9QUENfR09UX1RMU0dEMTYJNzkgLyogaGFsZjE2Kgkoc3ltK2FkZClAZ290QHRsc2dkICovCisrI2RlZmluZSBSX1BQQ19HT1RfVExTR0QxNl9MTwk4MCAvKiBoYWxmMTYJKHN5bSthZGQpQGdvdEB0bHNnZEBsICovCisrI2RlZmluZSBSX1BQQ19HT1RfVExTR0QxNl9ISQk4MSAvKiBoYWxmMTYJKHN5bSthZGQpQGdvdEB0bHNnZEBoICovCisrI2RlZmluZSBSX1BQQ19HT1RfVExTR0QxNl9IQQk4MiAvKiBoYWxmMTYJKHN5bSthZGQpQGdvdEB0bHNnZEBoYSAqLworKyNkZWZpbmUgUl9QUENfR09UX1RMU0xEMTYJODMgLyogaGFsZjE2Kgkoc3ltK2FkZClAZ290QHRsc2xkICovCisrI2RlZmluZSBSX1BQQ19HT1RfVExTTEQxNl9MTwk4NCAvKiBoYWxmMTYJKHN5bSthZGQpQGdvdEB0bHNsZEBsICovCisrI2RlZmluZSBSX1BQQ19HT1RfVExTTEQxNl9ISQk4NSAvKiBoYWxmMTYJKHN5bSthZGQpQGdvdEB0bHNsZEBoICovCisrI2RlZmluZSBSX1BQQ19HT1RfVExTTEQxNl9IQQk4NiAvKiBoYWxmMTYJKHN5bSthZGQpQGdvdEB0bHNsZEBoYSAqLworKyNkZWZpbmUgUl9QUENfR09UX1RQUkVMMTYJODcgLyogaGFsZjE2Kgkoc3ltK2FkZClAZ290QHRwcmVsICovCisrI2RlZmluZSBSX1BQQ19HT1RfVFBSRUwxNl9MTwk4OCAvKiBoYWxmMTYJKHN5bSthZGQpQGdvdEB0cHJlbEBsICovCisrI2RlZmluZSBSX1BQQ19HT1RfVFBSRUwxNl9ISQk4OSAvKiBoYWxmMTYJKHN5bSthZGQpQGdvdEB0cHJlbEBoICovCisrI2RlZmluZSBSX1BQQ19HT1RfVFBSRUwxNl9IQQk5MCAvKiBoYWxmMTYJKHN5bSthZGQpQGdvdEB0cHJlbEBoYSAqLworKyNkZWZpbmUgUl9QUENfR09UX0RUUFJFTDE2CTkxIC8qIGhhbGYxNioJKHN5bSthZGQpQGdvdEBkdHByZWwgKi8KKysjZGVmaW5lIFJfUFBDX0dPVF9EVFBSRUwxNl9MTwk5MiAvKiBoYWxmMTYqCShzeW0rYWRkKUBnb3RAZHRwcmVsQGwgKi8KKysjZGVmaW5lIFJfUFBDX0dPVF9EVFBSRUwxNl9ISQk5MyAvKiBoYWxmMTYqCShzeW0rYWRkKUBnb3RAZHRwcmVsQGggKi8KKysjZGVmaW5lIFJfUFBDX0dPVF9EVFBSRUwxNl9IQQk5NCAvKiBoYWxmMTYqCShzeW0rYWRkKUBnb3RAZHRwcmVsQGhhICovCisrCisrLyogVGhlIHJlbWFpbmluZyByZWxvY3MgYXJlIGZyb20gdGhlIEVtYmVkZGVkIEVMRiBBQkksIGFuZCBhcmUgbm90CisrICAgaW4gdGhlIFNWUjQgRUxGIEFCSS4gICovCisrI2RlZmluZSBSX1BQQ19FTUJfTkFERFIzMgkxMDEKKysjZGVmaW5lIFJfUFBDX0VNQl9OQUREUjE2CTEwMgorKyNkZWZpbmUgUl9QUENfRU1CX05BRERSMTZfTE8JMTAzCisrI2RlZmluZSBSX1BQQ19FTUJfTkFERFIxNl9ISQkxMDQKKysjZGVmaW5lIFJfUFBDX0VNQl9OQUREUjE2X0hBCTEwNQorKyNkZWZpbmUgUl9QUENfRU1CX1NEQUkxNgkxMDYKKysjZGVmaW5lIFJfUFBDX0VNQl9TREEySTE2CTEwNworKyNkZWZpbmUgUl9QUENfRU1CX1NEQTJSRUwJMTA4CisrI2RlZmluZSBSX1BQQ19FTUJfU0RBMjEJCTEwOQkvKiAxNiBiaXQgb2Zmc2V0IGluIFNEQSAqLworKyNkZWZpbmUgUl9QUENfRU1CX01SS1JFRgkxMTAKKysjZGVmaW5lIFJfUFBDX0VNQl9SRUxTRUMxNgkxMTEKKysjZGVmaW5lIFJfUFBDX0VNQl9SRUxTVF9MTwkxMTIKKysjZGVmaW5lIFJfUFBDX0VNQl9SRUxTVF9ISQkxMTMKKysjZGVmaW5lIFJfUFBDX0VNQl9SRUxTVF9IQQkxMTQKKysjZGVmaW5lIFJfUFBDX0VNQl9CSVRfRkxECTExNQorKyNkZWZpbmUgUl9QUENfRU1CX1JFTFNEQQkxMTYJLyogMTYgYml0IHJlbGF0aXZlIG9mZnNldCBpbiBTREEgKi8KKysKKysvKiBEaWFiIHRvb2wgcmVsb2NhdGlvbnMuICAqLworKyNkZWZpbmUgUl9QUENfRElBQl9TREEyMV9MTwkxODAJLyogbGlrZSBFTUJfU0RBMjEsIGJ1dCBsb3dlciAxNiBiaXQgKi8KKysjZGVmaW5lIFJfUFBDX0RJQUJfU0RBMjFfSEkJMTgxCS8qIGxpa2UgRU1CX1NEQTIxLCBidXQgaGlnaCAxNiBiaXQgKi8KKysjZGVmaW5lIFJfUFBDX0RJQUJfU0RBMjFfSEEJMTgyCS8qIGxpa2UgRU1CX1NEQTIxLCBhZGp1c3RlZCBoaWdoIDE2ICovCisrI2RlZmluZSBSX1BQQ19ESUFCX1JFTFNEQV9MTwkxODMJLyogbGlrZSBFTUJfUkVMU0RBLCBidXQgbG93ZXIgMTYgYml0ICovCisrI2RlZmluZSBSX1BQQ19ESUFCX1JFTFNEQV9ISQkxODQJLyogbGlrZSBFTUJfUkVMU0RBLCBidXQgaGlnaCAxNiBiaXQgKi8KKysjZGVmaW5lIFJfUFBDX0RJQUJfUkVMU0RBX0hBCTE4NQkvKiBsaWtlIEVNQl9SRUxTREEsIGFkanVzdGVkIGhpZ2ggMTYgKi8KKysKKysvKiBHTlUgZXh0ZW5zaW9uIHRvIHN1cHBvcnQgbG9jYWwgaWZ1bmMuICAqLworKyNkZWZpbmUgUl9QUENfSVJFTEFUSVZFCQkyNDgKKysKKysvKiBHTlUgcmVsb2NzIHVzZWQgaW4gUElDIGNvZGUgc2VxdWVuY2VzLiAgKi8KKysjZGVmaW5lIFJfUFBDX1JFTDE2CQkyNDkJLyogaGFsZjE2ICAgKHN5bSthZGQtLikgKi8KKysjZGVmaW5lIFJfUFBDX1JFTDE2X0xPCQkyNTAJLyogaGFsZjE2ICAgKHN5bSthZGQtLilAbCAqLworKyNkZWZpbmUgUl9QUENfUkVMMTZfSEkJCTI1MQkvKiBoYWxmMTYgICAoc3ltK2FkZC0uKUBoICovCisrI2RlZmluZSBSX1BQQ19SRUwxNl9IQQkJMjUyCS8qIGhhbGYxNiAgIChzeW0rYWRkLS4pQGhhICovCisrCisrLyogVGhpcyBpcyBhIHBob255IHJlbG9jIHRvIGhhbmRsZSBhbnkgb2xkIGZhc2hpb25lZCBUT0MxNiByZWZlcmVuY2VzCisrICAgdGhhdCBtYXkgc3RpbGwgYmUgaW4gb2JqZWN0IGZpbGVzLiAgKi8KKysjZGVmaW5lIFJfUFBDX1RPQzE2CQkyNTUKKysKKysvKiBQb3dlclBDIHNwZWNpZmljIHZhbHVlcyBmb3IgdGhlIER5biBkX3RhZyBmaWVsZC4gICovCisrI2RlZmluZSBEVF9QUENfR09UCQkoRFRfTE9QUk9DICsgMCkKKysjZGVmaW5lIERUX1BQQ19OVU0JCTEKKysKKysvKiBQb3dlclBDNjQgcmVsb2NhdGlvbnMgZGVmaW5lZCBieSB0aGUgQUJJcyAqLworKyNkZWZpbmUgUl9QUEM2NF9OT05FCQlSX1BQQ19OT05FCisrI2RlZmluZSBSX1BQQzY0X0FERFIzMgkJUl9QUENfQUREUjMyIC8qIDMyYml0IGFic29sdXRlIGFkZHJlc3MgKi8KKysjZGVmaW5lIFJfUFBDNjRfQUREUjI0CQlSX1BQQ19BRERSMjQgLyogMjZiaXQgYWRkcmVzcywgd29yZCBhbGlnbmVkICovCisrI2RlZmluZSBSX1BQQzY0X0FERFIxNgkJUl9QUENfQUREUjE2IC8qIDE2Yml0IGFic29sdXRlIGFkZHJlc3MgKi8KKysjZGVmaW5lIFJfUFBDNjRfQUREUjE2X0xPCVJfUFBDX0FERFIxNl9MTwkvKiBsb3dlciAxNmJpdHMgb2YgYWRkcmVzcyAqLworKyNkZWZpbmUgUl9QUEM2NF9BRERSMTZfSEkJUl9QUENfQUREUjE2X0hJCS8qIGhpZ2ggMTZiaXRzIG9mIGFkZHJlc3MuICovCisrI2RlZmluZSBSX1BQQzY0X0FERFIxNl9IQQlSX1BQQ19BRERSMTZfSEEgLyogYWRqdXN0ZWQgaGlnaCAxNmJpdHMuICAqLworKyNkZWZpbmUgUl9QUEM2NF9BRERSMTQJCVJfUFBDX0FERFIxNCAvKiAxNmJpdCBhZGRyZXNzLCB3b3JkIGFsaWduZWQgKi8KKysjZGVmaW5lIFJfUFBDNjRfQUREUjE0X0JSVEFLRU4JUl9QUENfQUREUjE0X0JSVEFLRU4KKysjZGVmaW5lIFJfUFBDNjRfQUREUjE0X0JSTlRBS0VOCVJfUFBDX0FERFIxNF9CUk5UQUtFTgorKyNkZWZpbmUgUl9QUEM2NF9SRUwyNAkJUl9QUENfUkVMMjQgLyogUEMtcmVsLiAyNiBiaXQsIHdvcmQgYWxpZ25lZCAqLworKyNkZWZpbmUgUl9QUEM2NF9SRUwxNAkJUl9QUENfUkVMMTQgLyogUEMgcmVsYXRpdmUgMTYgYml0ICovCisrI2RlZmluZSBSX1BQQzY0X1JFTDE0X0JSVEFLRU4JUl9QUENfUkVMMTRfQlJUQUtFTgorKyNkZWZpbmUgUl9QUEM2NF9SRUwxNF9CUk5UQUtFTglSX1BQQ19SRUwxNF9CUk5UQUtFTgorKyNkZWZpbmUgUl9QUEM2NF9HT1QxNgkJUl9QUENfR09UMTYKKysjZGVmaW5lIFJfUFBDNjRfR09UMTZfTE8JUl9QUENfR09UMTZfTE8KKysjZGVmaW5lIFJfUFBDNjRfR09UMTZfSEkJUl9QUENfR09UMTZfSEkKKysjZGVmaW5lIFJfUFBDNjRfR09UMTZfSEEJUl9QUENfR09UMTZfSEEKKysKKysjZGVmaW5lIFJfUFBDNjRfQ09QWQkJUl9QUENfQ09QWQorKyNkZWZpbmUgUl9QUEM2NF9HTE9CX0RBVAlSX1BQQ19HTE9CX0RBVAorKyNkZWZpbmUgUl9QUEM2NF9KTVBfU0xPVAlSX1BQQ19KTVBfU0xPVAorKyNkZWZpbmUgUl9QUEM2NF9SRUxBVElWRQlSX1BQQ19SRUxBVElWRQorKworKyNkZWZpbmUgUl9QUEM2NF9VQUREUjMyCQlSX1BQQ19VQUREUjMyCisrI2RlZmluZSBSX1BQQzY0X1VBRERSMTYJCVJfUFBDX1VBRERSMTYKKysjZGVmaW5lIFJfUFBDNjRfUkVMMzIJCVJfUFBDX1JFTDMyCisrI2RlZmluZSBSX1BQQzY0X1BMVDMyCQlSX1BQQ19QTFQzMgorKyNkZWZpbmUgUl9QUEM2NF9QTFRSRUwzMglSX1BQQ19QTFRSRUwzMgorKyNkZWZpbmUgUl9QUEM2NF9QTFQxNl9MTwlSX1BQQ19QTFQxNl9MTworKyNkZWZpbmUgUl9QUEM2NF9QTFQxNl9ISQlSX1BQQ19QTFQxNl9ISQorKyNkZWZpbmUgUl9QUEM2NF9QTFQxNl9IQQlSX1BQQ19QTFQxNl9IQQorKworKyNkZWZpbmUgUl9QUEM2NF9TRUNUT0ZGCQlSX1BQQ19TRUNUT0ZGCisrI2RlZmluZSBSX1BQQzY0X1NFQ1RPRkZfTE8JUl9QUENfU0VDVE9GRl9MTworKyNkZWZpbmUgUl9QUEM2NF9TRUNUT0ZGX0hJCVJfUFBDX1NFQ1RPRkZfSEkKKysjZGVmaW5lIFJfUFBDNjRfU0VDVE9GRl9IQQlSX1BQQ19TRUNUT0ZGX0hBCisrI2RlZmluZSBSX1BQQzY0X0FERFIzMAkJMzcgLyogd29yZDMwIChTICsgQSAtIFApID4+IDIgKi8KKysjZGVmaW5lIFJfUFBDNjRfQUREUjY0CQkzOCAvKiBkb3VibGV3b3JkNjQgUyArIEEgKi8KKysjZGVmaW5lIFJfUFBDNjRfQUREUjE2X0hJR0hFUgkzOSAvKiBoYWxmMTYgI2hpZ2hlcihTICsgQSkgKi8KKysjZGVmaW5lIFJfUFBDNjRfQUREUjE2X0hJR0hFUkEJNDAgLyogaGFsZjE2ICNoaWdoZXJhKFMgKyBBKSAqLworKyNkZWZpbmUgUl9QUEM2NF9BRERSMTZfSElHSEVTVAk0MSAvKiBoYWxmMTYgI2hpZ2hlc3QoUyArIEEpICovCisrI2RlZmluZSBSX1BQQzY0X0FERFIxNl9ISUdIRVNUQQk0MiAvKiBoYWxmMTYgI2hpZ2hlc3RhKFMgKyBBKSAqLworKyNkZWZpbmUgUl9QUEM2NF9VQUREUjY0CQk0MyAvKiBkb3VibGV3b3JkNjQgUyArIEEgKi8KKysjZGVmaW5lIFJfUFBDNjRfUkVMNjQJCTQ0IC8qIGRvdWJsZXdvcmQ2NCBTICsgQSAtIFAgKi8KKysjZGVmaW5lIFJfUFBDNjRfUExUNjQJCTQ1IC8qIGRvdWJsZXdvcmQ2NCBMICsgQSAqLworKyNkZWZpbmUgUl9QUEM2NF9QTFRSRUw2NAk0NiAvKiBkb3VibGV3b3JkNjQgTCArIEEgLSBQICovCisrI2RlZmluZSBSX1BQQzY0X1RPQzE2CQk0NyAvKiBoYWxmMTYqIFMgKyBBIC0gLlRPQyAqLworKyNkZWZpbmUgUl9QUEM2NF9UT0MxNl9MTwk0OCAvKiBoYWxmMTYgI2xvKFMgKyBBIC0gLlRPQy4pICovCisrI2RlZmluZSBSX1BQQzY0X1RPQzE2X0hJCTQ5IC8qIGhhbGYxNiAjaGkoUyArIEEgLSAuVE9DLikgKi8KKysjZGVmaW5lIFJfUFBDNjRfVE9DMTZfSEEJNTAgLyogaGFsZjE2ICNoYShTICsgQSAtIC5UT0MuKSAqLworKyNkZWZpbmUgUl9QUEM2NF9UT0MJCTUxIC8qIGRvdWJsZXdvcmQ2NCAuVE9DICovCisrI2RlZmluZSBSX1BQQzY0X1BMVEdPVDE2CTUyIC8qIGhhbGYxNiogTSArIEEgKi8KKysjZGVmaW5lIFJfUFBDNjRfUExUR09UMTZfTE8JNTMgLyogaGFsZjE2ICNsbyhNICsgQSkgKi8KKysjZGVmaW5lIFJfUFBDNjRfUExUR09UMTZfSEkJNTQgLyogaGFsZjE2ICNoaShNICsgQSkgKi8KKysjZGVmaW5lIFJfUFBDNjRfUExUR09UMTZfSEEJNTUgLyogaGFsZjE2ICNoYShNICsgQSkgKi8KKysKKysjZGVmaW5lIFJfUFBDNjRfQUREUjE2X0RTCTU2IC8qIGhhbGYxNmRzKiAoUyArIEEpID4+IDIgKi8KKysjZGVmaW5lIFJfUFBDNjRfQUREUjE2X0xPX0RTCTU3IC8qIGhhbGYxNmRzICAjbG8oUyArIEEpID4+IDIgKi8KKysjZGVmaW5lIFJfUFBDNjRfR09UMTZfRFMJNTggLyogaGFsZjE2ZHMqIChHICsgQSkgPj4gMiAqLworKyNkZWZpbmUgUl9QUEM2NF9HT1QxNl9MT19EUwk1OSAvKiBoYWxmMTZkcyAgI2xvKEcgKyBBKSA+PiAyICovCisrI2RlZmluZSBSX1BQQzY0X1BMVDE2X0xPX0RTCTYwIC8qIGhhbGYxNmRzICAjbG8oTCArIEEpID4+IDIgKi8KKysjZGVmaW5lIFJfUFBDNjRfU0VDVE9GRl9EUwk2MSAvKiBoYWxmMTZkcyogKFIgKyBBKSA+PiAyICovCisrI2RlZmluZSBSX1BQQzY0X1NFQ1RPRkZfTE9fRFMJNjIgLyogaGFsZjE2ZHMgICNsbyhSICsgQSkgPj4gMiAqLworKyNkZWZpbmUgUl9QUEM2NF9UT0MxNl9EUwk2MyAvKiBoYWxmMTZkcyogKFMgKyBBIC0gLlRPQy4pID4+IDIgKi8KKysjZGVmaW5lIFJfUFBDNjRfVE9DMTZfTE9fRFMJNjQgLyogaGFsZjE2ZHMgICNsbyhTICsgQSAtIC5UT0MuKSA+PiAyICovCisrI2RlZmluZSBSX1BQQzY0X1BMVEdPVDE2X0RTCTY1IC8qIGhhbGYxNmRzKiAoTSArIEEpID4+IDIgKi8KKysjZGVmaW5lIFJfUFBDNjRfUExUR09UMTZfTE9fRFMJNjYgLyogaGFsZjE2ZHMgICNsbyhNICsgQSkgPj4gMiAqLworKworKy8qIFBvd2VyUEM2NCByZWxvY2F0aW9ucyBkZWZpbmVkIGZvciB0aGUgVExTIGFjY2VzcyBBQkkuICAqLworKyNkZWZpbmUgUl9QUEM2NF9UTFMJCTY3IC8qIG5vbmUJKHN5bSthZGQpQHRscyAqLworKyNkZWZpbmUgUl9QUEM2NF9EVFBNT0Q2NAk2OCAvKiBkb3VibGV3b3JkNjQgKHN5bSthZGQpQGR0cG1vZCAqLworKyNkZWZpbmUgUl9QUEM2NF9UUFJFTDE2CQk2OSAvKiBoYWxmMTYqCShzeW0rYWRkKUB0cHJlbCAqLworKyNkZWZpbmUgUl9QUEM2NF9UUFJFTDE2X0xPCTcwIC8qIGhhbGYxNgkoc3ltK2FkZClAdHByZWxAbCAqLworKyNkZWZpbmUgUl9QUEM2NF9UUFJFTDE2X0hJCTcxIC8qIGhhbGYxNgkoc3ltK2FkZClAdHByZWxAaCAqLworKyNkZWZpbmUgUl9QUEM2NF9UUFJFTDE2X0hBCTcyIC8qIGhhbGYxNgkoc3ltK2FkZClAdHByZWxAaGEgKi8KKysjZGVmaW5lIFJfUFBDNjRfVFBSRUw2NAkJNzMgLyogZG91Ymxld29yZDY0IChzeW0rYWRkKUB0cHJlbCAqLworKyNkZWZpbmUgUl9QUEM2NF9EVFBSRUwxNgk3NCAvKiBoYWxmMTYqCShzeW0rYWRkKUBkdHByZWwgKi8KKysjZGVmaW5lIFJfUFBDNjRfRFRQUkVMMTZfTE8JNzUgLyogaGFsZjE2CShzeW0rYWRkKUBkdHByZWxAbCAqLworKyNkZWZpbmUgUl9QUEM2NF9EVFBSRUwxNl9ISQk3NiAvKiBoYWxmMTYJKHN5bSthZGQpQGR0cHJlbEBoICovCisrI2RlZmluZSBSX1BQQzY0X0RUUFJFTDE2X0hBCTc3IC8qIGhhbGYxNgkoc3ltK2FkZClAZHRwcmVsQGhhICovCisrI2RlZmluZSBSX1BQQzY0X0RUUFJFTDY0CTc4IC8qIGRvdWJsZXdvcmQ2NCAoc3ltK2FkZClAZHRwcmVsICovCisrI2RlZmluZSBSX1BQQzY0X0dPVF9UTFNHRDE2CTc5IC8qIGhhbGYxNioJKHN5bSthZGQpQGdvdEB0bHNnZCAqLworKyNkZWZpbmUgUl9QUEM2NF9HT1RfVExTR0QxNl9MTwk4MCAvKiBoYWxmMTYJKHN5bSthZGQpQGdvdEB0bHNnZEBsICovCisrI2RlZmluZSBSX1BQQzY0X0dPVF9UTFNHRDE2X0hJCTgxIC8qIGhhbGYxNgkoc3ltK2FkZClAZ290QHRsc2dkQGggKi8KKysjZGVmaW5lIFJfUFBDNjRfR09UX1RMU0dEMTZfSEEJODIgLyogaGFsZjE2CShzeW0rYWRkKUBnb3RAdGxzZ2RAaGEgKi8KKysjZGVmaW5lIFJfUFBDNjRfR09UX1RMU0xEMTYJODMgLyogaGFsZjE2Kgkoc3ltK2FkZClAZ290QHRsc2xkICovCisrI2RlZmluZSBSX1BQQzY0X0dPVF9UTFNMRDE2X0xPCTg0IC8qIGhhbGYxNgkoc3ltK2FkZClAZ290QHRsc2xkQGwgKi8KKysjZGVmaW5lIFJfUFBDNjRfR09UX1RMU0xEMTZfSEkJODUgLyogaGFsZjE2CShzeW0rYWRkKUBnb3RAdGxzbGRAaCAqLworKyNkZWZpbmUgUl9QUEM2NF9HT1RfVExTTEQxNl9IQQk4NiAvKiBoYWxmMTYJKHN5bSthZGQpQGdvdEB0bHNsZEBoYSAqLworKyNkZWZpbmUgUl9QUEM2NF9HT1RfVFBSRUwxNl9EUwk4NyAvKiBoYWxmMTZkcyoJKHN5bSthZGQpQGdvdEB0cHJlbCAqLworKyNkZWZpbmUgUl9QUEM2NF9HT1RfVFBSRUwxNl9MT19EUyA4OCAvKiBoYWxmMTZkcyAoc3ltK2FkZClAZ290QHRwcmVsQGwgKi8KKysjZGVmaW5lIFJfUFBDNjRfR09UX1RQUkVMMTZfSEkJODkgLyogaGFsZjE2CShzeW0rYWRkKUBnb3RAdHByZWxAaCAqLworKyNkZWZpbmUgUl9QUEM2NF9HT1RfVFBSRUwxNl9IQQk5MCAvKiBoYWxmMTYJKHN5bSthZGQpQGdvdEB0cHJlbEBoYSAqLworKyNkZWZpbmUgUl9QUEM2NF9HT1RfRFRQUkVMMTZfRFMJOTEgLyogaGFsZjE2ZHMqCShzeW0rYWRkKUBnb3RAZHRwcmVsICovCisrI2RlZmluZSBSX1BQQzY0X0dPVF9EVFBSRUwxNl9MT19EUyA5MiAvKiBoYWxmMTZkcyAoc3ltK2FkZClAZ290QGR0cHJlbEBsICovCisrI2RlZmluZSBSX1BQQzY0X0dPVF9EVFBSRUwxNl9ISQk5MyAvKiBoYWxmMTYJKHN5bSthZGQpQGdvdEBkdHByZWxAaCAqLworKyNkZWZpbmUgUl9QUEM2NF9HT1RfRFRQUkVMMTZfSEEJOTQgLyogaGFsZjE2CShzeW0rYWRkKUBnb3RAZHRwcmVsQGhhICovCisrI2RlZmluZSBSX1BQQzY0X1RQUkVMMTZfRFMJOTUgLyogaGFsZjE2ZHMqCShzeW0rYWRkKUB0cHJlbCAqLworKyNkZWZpbmUgUl9QUEM2NF9UUFJFTDE2X0xPX0RTCTk2IC8qIGhhbGYxNmRzCShzeW0rYWRkKUB0cHJlbEBsICovCisrI2RlZmluZSBSX1BQQzY0X1RQUkVMMTZfSElHSEVSCTk3IC8qIGhhbGYxNgkoc3ltK2FkZClAdHByZWxAaGlnaGVyICovCisrI2RlZmluZSBSX1BQQzY0X1RQUkVMMTZfSElHSEVSQQk5OCAvKiBoYWxmMTYJKHN5bSthZGQpQHRwcmVsQGhpZ2hlcmEgKi8KKysjZGVmaW5lIFJfUFBDNjRfVFBSRUwxNl9ISUdIRVNUCTk5IC8qIGhhbGYxNgkoc3ltK2FkZClAdHByZWxAaGlnaGVzdCAqLworKyNkZWZpbmUgUl9QUEM2NF9UUFJFTDE2X0hJR0hFU1RBIDEwMCAvKiBoYWxmMTYJKHN5bSthZGQpQHRwcmVsQGhpZ2hlc3RhICovCisrI2RlZmluZSBSX1BQQzY0X0RUUFJFTDE2X0RTCTEwMSAvKiBoYWxmMTZkcyogKHN5bSthZGQpQGR0cHJlbCAqLworKyNkZWZpbmUgUl9QUEM2NF9EVFBSRUwxNl9MT19EUwkxMDIgLyogaGFsZjE2ZHMJKHN5bSthZGQpQGR0cHJlbEBsICovCisrI2RlZmluZSBSX1BQQzY0X0RUUFJFTDE2X0hJR0hFUgkxMDMgLyogaGFsZjE2CShzeW0rYWRkKUBkdHByZWxAaGlnaGVyICovCisrI2RlZmluZSBSX1BQQzY0X0RUUFJFTDE2X0hJR0hFUkEgMTA0IC8qIGhhbGYxNgkoc3ltK2FkZClAZHRwcmVsQGhpZ2hlcmEgKi8KKysjZGVmaW5lIFJfUFBDNjRfRFRQUkVMMTZfSElHSEVTVCAxMDUgLyogaGFsZjE2CShzeW0rYWRkKUBkdHByZWxAaGlnaGVzdCAqLworKyNkZWZpbmUgUl9QUEM2NF9EVFBSRUwxNl9ISUdIRVNUQSAxMDYgLyogaGFsZjE2CShzeW0rYWRkKUBkdHByZWxAaGlnaGVzdGEgKi8KKysKKysvKiBHTlUgZXh0ZW5zaW9uIHRvIHN1cHBvcnQgbG9jYWwgaWZ1bmMuICAqLworKyNkZWZpbmUgUl9QUEM2NF9KTVBfSVJFTAkyNDcKKysjZGVmaW5lIFJfUFBDNjRfSVJFTEFUSVZFCTI0OAorKyNkZWZpbmUgUl9QUEM2NF9SRUwxNgkJMjQ5CS8qIGhhbGYxNiAgIChzeW0rYWRkLS4pICovCisrI2RlZmluZSBSX1BQQzY0X1JFTDE2X0xPCTI1MAkvKiBoYWxmMTYgICAoc3ltK2FkZC0uKUBsICovCisrI2RlZmluZSBSX1BQQzY0X1JFTDE2X0hJCTI1MQkvKiBoYWxmMTYgICAoc3ltK2FkZC0uKUBoICovCisrI2RlZmluZSBSX1BQQzY0X1JFTDE2X0hBCTI1MgkvKiBoYWxmMTYgICAoc3ltK2FkZC0uKUBoYSAqLworKworKy8qIFBvd2VyUEM2NCBzcGVjaWZpYyB2YWx1ZXMgZm9yIHRoZSBEeW4gZF90YWcgZmllbGQuICAqLworKyNkZWZpbmUgRFRfUFBDNjRfR0xJTksgIChEVF9MT1BST0MgKyAwKQorKyNkZWZpbmUgRFRfUFBDNjRfT1BECShEVF9MT1BST0MgKyAxKQorKyNkZWZpbmUgRFRfUFBDNjRfT1BEU1oJKERUX0xPUFJPQyArIDIpCisrI2RlZmluZSBEVF9QUEM2NF9OVU0gICAgMworKworKworKy8qIEFSTSBzcGVjaWZpYyBkZWNsYXJhdGlvbnMgKi8KKysKKysvKiBQcm9jZXNzb3Igc3BlY2lmaWMgZmxhZ3MgZm9yIHRoZSBFTEYgaGVhZGVyIGVfZmxhZ3MgZmllbGQuICAqLworKyNkZWZpbmUgRUZfQVJNX1JFTEVYRUMJCTB4MDEKKysjZGVmaW5lIEVGX0FSTV9IQVNFTlRSWQkJMHgwMgorKyNkZWZpbmUgRUZfQVJNX0lOVEVSV09SSwkweDA0CisrI2RlZmluZSBFRl9BUk1fQVBDU18yNgkJMHgwOAorKyNkZWZpbmUgRUZfQVJNX0FQQ1NfRkxPQVQJMHgxMAorKyNkZWZpbmUgRUZfQVJNX1BJQwkJMHgyMAorKyNkZWZpbmUgRUZfQVJNX0FMSUdOOAkJMHg0MCAvKiA4LWJpdCBzdHJ1Y3R1cmUgYWxpZ25tZW50IGlzIGluIHVzZSAqLworKyNkZWZpbmUgRUZfQVJNX05FV19BQkkJCTB4ODAKKysjZGVmaW5lIEVGX0FSTV9PTERfQUJJCQkweDEwMAorKyNkZWZpbmUgRUZfQVJNX1NPRlRfRkxPQVQJMHgyMDAKKysjZGVmaW5lIEVGX0FSTV9WRlBfRkxPQVQJMHg0MDAKKysjZGVmaW5lIEVGX0FSTV9NQVZFUklDS19GTE9BVAkweDgwMAorKworKworKy8qIE90aGVyIGNvbnN0YW50cyBkZWZpbmVkIGluIHRoZSBBUk0gRUxGIHNwZWMuIHZlcnNpb24gQi0wMS4gICovCisrLyogTkIuIFRoZXNlIGNvbmZsaWN0IHdpdGggdmFsdWVzIGRlZmluZWQgYWJvdmUuICAqLworKyNkZWZpbmUgRUZfQVJNX1NZTVNBUkVTT1JURUQJMHgwNAorKyNkZWZpbmUgRUZfQVJNX0RZTlNZTVNVU0VTRUdJRFgJMHgwOAorKyNkZWZpbmUgRUZfQVJNX01BUFNZTVNGSVJTVAkweDEwCisrI2RlZmluZSBFRl9BUk1fRUFCSU1BU0sJCTBYRkYwMDAwMDAKKysKKysvKiBDb25zdGFudHMgZGVmaW5lZCBpbiBBQUVMRi4gICovCisrI2RlZmluZSBFRl9BUk1fQkU4CSAgICAweDAwODAwMDAwCisrI2RlZmluZSBFRl9BUk1fTEU4CSAgICAweDAwNDAwMDAwCisrCisrI2RlZmluZSBFRl9BUk1fRUFCSV9WRVJTSU9OKGZsYWdzKQkoKGZsYWdzKSAmIEVGX0FSTV9FQUJJTUFTSykKKysjZGVmaW5lIEVGX0FSTV9FQUJJX1VOS05PV04JMHgwMDAwMDAwMAorKyNkZWZpbmUgRUZfQVJNX0VBQklfVkVSMQkweDAxMDAwMDAwCisrI2RlZmluZSBFRl9BUk1fRUFCSV9WRVIyCTB4MDIwMDAwMDAKKysjZGVmaW5lIEVGX0FSTV9FQUJJX1ZFUjMJMHgwMzAwMDAwMAorKyNkZWZpbmUgRUZfQVJNX0VBQklfVkVSNAkweDA0MDAwMDAwCisrI2RlZmluZSBFRl9BUk1fRUFCSV9WRVI1CTB4MDUwMDAwMDAKKysKKysvKiBBZGRpdGlvbmFsIHN5bWJvbCB0eXBlcyBmb3IgVGh1bWIuICAqLworKyNkZWZpbmUgU1RUX0FSTV9URlVOQwkJU1RUX0xPUFJPQyAvKiBBIFRodW1iIGZ1bmN0aW9uLiAgKi8KKysjZGVmaW5lIFNUVF9BUk1fMTZCSVQJCVNUVF9ISVBST0MgLyogQSBUaHVtYiBsYWJlbC4gICovCisrCisrLyogQVJNLXNwZWNpZmljIHZhbHVlcyBmb3Igc2hfZmxhZ3MgKi8KKysjZGVmaW5lIFNIRl9BUk1fRU5UUllTRUNUCTB4MTAwMDAwMDAgLyogU2VjdGlvbiBjb250YWlucyBhbiBlbnRyeSBwb2ludCAqLworKyNkZWZpbmUgU0hGX0FSTV9DT01ERUYJCTB4ODAwMDAwMDAgLyogU2VjdGlvbiBtYXkgYmUgbXVsdGlwbHkgZGVmaW5lZAorKwkJCQkJICAgICAgaW4gdGhlIGlucHV0IHRvIGEgbGluayBzdGVwLiAgKi8KKysKKysvKiBBUk0tc3BlY2lmaWMgcHJvZ3JhbSBoZWFkZXIgZmxhZ3MgKi8KKysjZGVmaW5lIFBGX0FSTV9TQgkJMHgxMDAwMDAwMCAvKiBTZWdtZW50IGNvbnRhaW5zIHRoZSBsb2NhdGlvbgorKwkJCQkJICAgICAgYWRkcmVzc2VkIGJ5IHRoZSBzdGF0aWMgYmFzZS4gKi8KKysjZGVmaW5lIFBGX0FSTV9QSQkJMHgyMDAwMDAwMCAvKiBQb3NpdGlvbi1pbmRlcGVuZGVudCBzZWdtZW50LiAgKi8KKysjZGVmaW5lIFBGX0FSTV9BQlMJCTB4NDAwMDAwMDAgLyogQWJzb2x1dGUgc2VnbWVudC4gICovCisrCisrLyogUHJvY2Vzc29yIHNwZWNpZmljIHZhbHVlcyBmb3IgdGhlIFBoZHIgcF90eXBlIGZpZWxkLiAgKi8KKysjZGVmaW5lIFBUX0FSTV9FWElEWAkJKFBUX0xPUFJPQyArIDEpCS8qIEFSTSB1bndpbmQgc2VnbWVudC4gICovCisrCisrLyogUHJvY2Vzc29yIHNwZWNpZmljIHZhbHVlcyBmb3IgdGhlIFNoZHIgc2hfdHlwZSBmaWVsZC4gICovCisrI2RlZmluZSBTSFRfQVJNX0VYSURYCQkoU0hUX0xPUFJPQyArIDEpIC8qIEFSTSB1bndpbmQgc2VjdGlvbi4gICovCisrI2RlZmluZSBTSFRfQVJNX1BSRUVNUFRNQVAJKFNIVF9MT1BST0MgKyAyKSAvKiBQcmVlbXB0aW9uIGRldGFpbHMuICAqLworKyNkZWZpbmUgU0hUX0FSTV9BVFRSSUJVVEVTCShTSFRfTE9QUk9DICsgMykgLyogQVJNIGF0dHJpYnV0ZXMgc2VjdGlvbi4gICovCisrCisrCisrLyogQVJNIHJlbG9jcy4gICovCisrCisrI2RlZmluZSBSX0FSTV9OT05FCQkwCS8qIE5vIHJlbG9jICovCisrI2RlZmluZSBSX0FSTV9QQzI0CQkxCS8qIFBDIHJlbGF0aXZlIDI2IGJpdCBicmFuY2ggKi8KKysjZGVmaW5lIFJfQVJNX0FCUzMyCQkyCS8qIERpcmVjdCAzMiBiaXQgICovCisrI2RlZmluZSBSX0FSTV9SRUwzMgkJMwkvKiBQQyByZWxhdGl2ZSAzMiBiaXQgKi8KKysjZGVmaW5lIFJfQVJNX1BDMTMJCTQKKysjZGVmaW5lIFJfQVJNX0FCUzE2CQk1CS8qIERpcmVjdCAxNiBiaXQgKi8KKysjZGVmaW5lIFJfQVJNX0FCUzEyCQk2CS8qIERpcmVjdCAxMiBiaXQgKi8KKysjZGVmaW5lIFJfQVJNX1RITV9BQlM1CQk3CisrI2RlZmluZSBSX0FSTV9BQlM4CQk4CS8qIERpcmVjdCA4IGJpdCAqLworKyNkZWZpbmUgUl9BUk1fU0JSRUwzMgkJOQorKyNkZWZpbmUgUl9BUk1fVEhNX1BDMjIJCTEwCisrI2RlZmluZSBSX0FSTV9USE1fUEM4CQkxMQorKyNkZWZpbmUgUl9BUk1fQU1QX1ZDQUxMOQkxMgorKyNkZWZpbmUgUl9BUk1fU1dJMjQJCTEzCS8qIE9ic29sZXRlIHN0YXRpYyByZWxvY2F0aW9uLiAgKi8KKysjZGVmaW5lIFJfQVJNX1RMU19ERVNDCQkxMyAgICAgIC8qIER5bmFtaWMgcmVsb2NhdGlvbi4gICovCisrI2RlZmluZSBSX0FSTV9USE1fU1dJOAkJMTQKKysjZGVmaW5lIFJfQVJNX1hQQzI1CQkxNQorKyNkZWZpbmUgUl9BUk1fVEhNX1hQQzIyCQkxNgorKyNkZWZpbmUgUl9BUk1fVExTX0RUUE1PRDMyCTE3CS8qIElEIG9mIG1vZHVsZSBjb250YWluaW5nIHN5bWJvbCAqLworKyNkZWZpbmUgUl9BUk1fVExTX0RUUE9GRjMyCTE4CS8qIE9mZnNldCBpbiBUTFMgYmxvY2sgKi8KKysjZGVmaW5lIFJfQVJNX1RMU19UUE9GRjMyCTE5CS8qIE9mZnNldCBpbiBzdGF0aWMgVExTIGJsb2NrICovCisrI2RlZmluZSBSX0FSTV9DT1BZCQkyMAkvKiBDb3B5IHN5bWJvbCBhdCBydW50aW1lICovCisrI2RlZmluZSBSX0FSTV9HTE9CX0RBVAkJMjEJLyogQ3JlYXRlIEdPVCBlbnRyeSAqLworKyNkZWZpbmUgUl9BUk1fSlVNUF9TTE9UCQkyMgkvKiBDcmVhdGUgUExUIGVudHJ5ICovCisrI2RlZmluZSBSX0FSTV9SRUxBVElWRQkJMjMJLyogQWRqdXN0IGJ5IHByb2dyYW0gYmFzZSAqLworKyNkZWZpbmUgUl9BUk1fR09UT0ZGCQkyNAkvKiAzMiBiaXQgb2Zmc2V0IHRvIEdPVCAqLworKyNkZWZpbmUgUl9BUk1fR09UUEMJCTI1CS8qIDMyIGJpdCBQQyByZWxhdGl2ZSBvZmZzZXQgdG8gR09UICovCisrI2RlZmluZSBSX0FSTV9HT1QzMgkJMjYJLyogMzIgYml0IEdPVCBlbnRyeSAqLworKyNkZWZpbmUgUl9BUk1fUExUMzIJCTI3CS8qIDMyIGJpdCBQTFQgYWRkcmVzcyAqLworKyNkZWZpbmUgUl9BUk1fQUxVX1BDUkVMXzdfMAkzMgorKyNkZWZpbmUgUl9BUk1fQUxVX1BDUkVMXzE1XzgJMzMKKysjZGVmaW5lIFJfQVJNX0FMVV9QQ1JFTF8yM18xNQkzNAorKyNkZWZpbmUgUl9BUk1fTERSX1NCUkVMXzExXzAJMzUKKysjZGVmaW5lIFJfQVJNX0FMVV9TQlJFTF8xOV8xMgkzNgorKyNkZWZpbmUgUl9BUk1fQUxVX1NCUkVMXzI3XzIwCTM3CisrI2RlZmluZSBSX0FSTV9UTFNfR09UREVTQwk5MAorKyNkZWZpbmUgUl9BUk1fVExTX0NBTEwJCTkxCisrI2RlZmluZSBSX0FSTV9UTFNfREVTQ1NFUQk5MgorKyNkZWZpbmUgUl9BUk1fVEhNX1RMU19DQUxMCTkzCisrI2RlZmluZSBSX0FSTV9HTlVfVlRFTlRSWQkxMDAKKysjZGVmaW5lIFJfQVJNX0dOVV9WVElOSEVSSVQJMTAxCisrI2RlZmluZSBSX0FSTV9USE1fUEMxMQkJMTAyCS8qIHRodW1iIHVuY29uZGl0aW9uYWwgYnJhbmNoICovCisrI2RlZmluZSBSX0FSTV9USE1fUEM5CQkxMDMJLyogdGh1bWIgY29uZGl0aW9uYWwgYnJhbmNoICovCisrI2RlZmluZSBSX0FSTV9UTFNfR0QzMgkJMTA0CS8qIFBDLXJlbCAzMiBiaXQgZm9yIGdsb2JhbCBkeW5hbWljCisrCQkJCQkgICB0aHJlYWQgbG9jYWwgZGF0YSAqLworKyNkZWZpbmUgUl9BUk1fVExTX0xETTMyCQkxMDUJLyogUEMtcmVsIDMyIGJpdCBmb3IgbG9jYWwgZHluYW1pYworKwkJCQkJICAgdGhyZWFkIGxvY2FsIGRhdGEgKi8KKysjZGVmaW5lIFJfQVJNX1RMU19MRE8zMgkJMTA2CS8qIDMyIGJpdCBvZmZzZXQgcmVsYXRpdmUgdG8gVExTCisrCQkJCQkgICBibG9jayAqLworKyNkZWZpbmUgUl9BUk1fVExTX0lFMzIJCTEwNwkvKiBQQy1yZWwgMzIgYml0IGZvciBHT1QgZW50cnkgb2YKKysJCQkJCSAgIHN0YXRpYyBUTFMgYmxvY2sgb2Zmc2V0ICovCisrI2RlZmluZSBSX0FSTV9UTFNfTEUzMgkJMTA4CS8qIDMyIGJpdCBvZmZzZXQgcmVsYXRpdmUgdG8gc3RhdGljCisrCQkJCQkgICBUTFMgYmxvY2sgKi8KKysjZGVmaW5lCVJfQVJNX1RITV9UTFNfREVTQ1NFUQkxMjkKKysjZGVmaW5lIFJfQVJNX0lSRUxBVElWRQkJMTYwCisrI2RlZmluZSBSX0FSTV9SWFBDMjUJCTI0OQorKyNkZWZpbmUgUl9BUk1fUlNCUkVMMzIJCTI1MAorKyNkZWZpbmUgUl9BUk1fVEhNX1JQQzIyCQkyNTEKKysjZGVmaW5lIFJfQVJNX1JSRUwzMgkJMjUyCisrI2RlZmluZSBSX0FSTV9SQUJTMjIJCTI1MworKyNkZWZpbmUgUl9BUk1fUlBDMjQJCTI1NAorKyNkZWZpbmUgUl9BUk1fUkJBU0UJCTI1NQorKy8qIEtlZXAgdGhpcyB0aGUgbGFzdCBlbnRyeS4gICovCisrI2RlZmluZSBSX0FSTV9OVU0JCTI1NgorKworKy8qIElBLTY0IHNwZWNpZmljIGRlY2xhcmF0aW9ucy4gICovCisrCisrLyogUHJvY2Vzc29yIHNwZWNpZmljIGZsYWdzIGZvciB0aGUgRWhkciBlX2ZsYWdzIGZpZWxkLiAgKi8KKysjZGVmaW5lIEVGX0lBXzY0X01BU0tPUwkJMHgwMDAwMDAwZgkvKiBvcy1zcGVjaWZpYyBmbGFncyAqLworKyNkZWZpbmUgRUZfSUFfNjRfQUJJNjQJCTB4MDAwMDAwMTAJLyogNjQtYml0IEFCSSAqLworKyNkZWZpbmUgRUZfSUFfNjRfQVJDSAkJMHhmZjAwMDAwMAkvKiBhcmNoLiB2ZXJzaW9uIG1hc2sgKi8KKysKKysvKiBQcm9jZXNzb3Igc3BlY2lmaWMgdmFsdWVzIGZvciB0aGUgUGhkciBwX3R5cGUgZmllbGQuICAqLworKyNkZWZpbmUgUFRfSUFfNjRfQVJDSEVYVAkoUFRfTE9QUk9DICsgMCkJLyogYXJjaCBleHRlbnNpb24gYml0cyAqLworKyNkZWZpbmUgUFRfSUFfNjRfVU5XSU5ECQkoUFRfTE9QUk9DICsgMSkJLyogaWE2NCB1bndpbmQgYml0cyAqLworKyNkZWZpbmUgUFRfSUFfNjRfSFBfT1BUX0FOT1QJKFBUX0xPT1MgKyAweDEyKQorKyNkZWZpbmUgUFRfSUFfNjRfSFBfSFNMX0FOT1QJKFBUX0xPT1MgKyAweDEzKQorKyNkZWZpbmUgUFRfSUFfNjRfSFBfU1RBQ0sJKFBUX0xPT1MgKyAweDE0KQorKworKy8qIFByb2Nlc3NvciBzcGVjaWZpYyBmbGFncyBmb3IgdGhlIFBoZHIgcF9mbGFncyBmaWVsZC4gICovCisrI2RlZmluZSBQRl9JQV82NF9OT1JFQ09WCTB4ODAwMDAwMDAJLyogc3BlYyBpbnNucyB3L28gcmVjb3ZlcnkgKi8KKysKKysvKiBQcm9jZXNzb3Igc3BlY2lmaWMgdmFsdWVzIGZvciB0aGUgU2hkciBzaF90eXBlIGZpZWxkLiAgKi8KKysjZGVmaW5lIFNIVF9JQV82NF9FWFQJCShTSFRfTE9QUk9DICsgMCkgLyogZXh0ZW5zaW9uIGJpdHMgKi8KKysjZGVmaW5lIFNIVF9JQV82NF9VTldJTkQJKFNIVF9MT1BST0MgKyAxKSAvKiB1bndpbmQgYml0cyAqLworKworKy8qIFByb2Nlc3NvciBzcGVjaWZpYyBmbGFncyBmb3IgdGhlIFNoZHIgc2hfZmxhZ3MgZmllbGQuICAqLworKyNkZWZpbmUgU0hGX0lBXzY0X1NIT1JUCQkweDEwMDAwMDAwCS8qIHNlY3Rpb24gbmVhciBncCAqLworKyNkZWZpbmUgU0hGX0lBXzY0X05PUkVDT1YJMHgyMDAwMDAwMAkvKiBzcGVjIGluc25zIHcvbyByZWNvdmVyeSAqLworKworKy8qIFByb2Nlc3NvciBzcGVjaWZpYyB2YWx1ZXMgZm9yIHRoZSBEeW4gZF90YWcgZmllbGQuICAqLworKyNkZWZpbmUgRFRfSUFfNjRfUExUX1JFU0VSVkUJKERUX0xPUFJPQyArIDApCisrI2RlZmluZSBEVF9JQV82NF9OVU0JCTEKKysKKysvKiBJQS02NCByZWxvY2F0aW9ucy4gICovCisrI2RlZmluZSBSX0lBNjRfTk9ORQkJMHgwMAkvKiBub25lICovCisrI2RlZmluZSBSX0lBNjRfSU1NMTQJCTB4MjEJLyogc3ltYm9sICsgYWRkZW5kLCBhZGQgaW1tMTQgKi8KKysjZGVmaW5lIFJfSUE2NF9JTU0yMgkJMHgyMgkvKiBzeW1ib2wgKyBhZGRlbmQsIGFkZCBpbW0yMiAqLworKyNkZWZpbmUgUl9JQTY0X0lNTTY0CQkweDIzCS8qIHN5bWJvbCArIGFkZGVuZCwgbW92IGltbTY0ICovCisrI2RlZmluZSBSX0lBNjRfRElSMzJNU0IJCTB4MjQJLyogc3ltYm9sICsgYWRkZW5kLCBkYXRhNCBNU0IgKi8KKysjZGVmaW5lIFJfSUE2NF9ESVIzMkxTQgkJMHgyNQkvKiBzeW1ib2wgKyBhZGRlbmQsIGRhdGE0IExTQiAqLworKyNkZWZpbmUgUl9JQTY0X0RJUjY0TVNCCQkweDI2CS8qIHN5bWJvbCArIGFkZGVuZCwgZGF0YTggTVNCICovCisrI2RlZmluZSBSX0lBNjRfRElSNjRMU0IJCTB4MjcJLyogc3ltYm9sICsgYWRkZW5kLCBkYXRhOCBMU0IgKi8KKysjZGVmaW5lIFJfSUE2NF9HUFJFTDIyCQkweDJhCS8qIEBncHJlbChzeW0gKyBhZGQpLCBhZGQgaW1tMjIgKi8KKysjZGVmaW5lIFJfSUE2NF9HUFJFTDY0SQkJMHgyYgkvKiBAZ3ByZWwoc3ltICsgYWRkKSwgbW92IGltbTY0ICovCisrI2RlZmluZSBSX0lBNjRfR1BSRUwzMk1TQgkweDJjCS8qIEBncHJlbChzeW0gKyBhZGQpLCBkYXRhNCBNU0IgKi8KKysjZGVmaW5lIFJfSUE2NF9HUFJFTDMyTFNCCTB4MmQJLyogQGdwcmVsKHN5bSArIGFkZCksIGRhdGE0IExTQiAqLworKyNkZWZpbmUgUl9JQTY0X0dQUkVMNjRNU0IJMHgyZQkvKiBAZ3ByZWwoc3ltICsgYWRkKSwgZGF0YTggTVNCICovCisrI2RlZmluZSBSX0lBNjRfR1BSRUw2NExTQgkweDJmCS8qIEBncHJlbChzeW0gKyBhZGQpLCBkYXRhOCBMU0IgKi8KKysjZGVmaW5lIFJfSUE2NF9MVE9GRjIyCQkweDMyCS8qIEBsdG9mZihzeW0gKyBhZGQpLCBhZGQgaW1tMjIgKi8KKysjZGVmaW5lIFJfSUE2NF9MVE9GRjY0SQkJMHgzMwkvKiBAbHRvZmYoc3ltICsgYWRkKSwgbW92IGltbTY0ICovCisrI2RlZmluZSBSX0lBNjRfUExUT0ZGMjIJCTB4M2EJLyogQHBsdG9mZihzeW0gKyBhZGQpLCBhZGQgaW1tMjIgKi8KKysjZGVmaW5lIFJfSUE2NF9QTFRPRkY2NEkJMHgzYgkvKiBAcGx0b2ZmKHN5bSArIGFkZCksIG1vdiBpbW02NCAqLworKyNkZWZpbmUgUl9JQTY0X1BMVE9GRjY0TVNCCTB4M2UJLyogQHBsdG9mZihzeW0gKyBhZGQpLCBkYXRhOCBNU0IgKi8KKysjZGVmaW5lIFJfSUE2NF9QTFRPRkY2NExTQgkweDNmCS8qIEBwbHRvZmYoc3ltICsgYWRkKSwgZGF0YTggTFNCICovCisrI2RlZmluZSBSX0lBNjRfRlBUUjY0SQkJMHg0MwkvKiBAZnB0cihzeW0gKyBhZGQpLCBtb3YgaW1tNjQgKi8KKysjZGVmaW5lIFJfSUE2NF9GUFRSMzJNU0IJMHg0NAkvKiBAZnB0cihzeW0gKyBhZGQpLCBkYXRhNCBNU0IgKi8KKysjZGVmaW5lIFJfSUE2NF9GUFRSMzJMU0IJMHg0NQkvKiBAZnB0cihzeW0gKyBhZGQpLCBkYXRhNCBMU0IgKi8KKysjZGVmaW5lIFJfSUE2NF9GUFRSNjRNU0IJMHg0NgkvKiBAZnB0cihzeW0gKyBhZGQpLCBkYXRhOCBNU0IgKi8KKysjZGVmaW5lIFJfSUE2NF9GUFRSNjRMU0IJMHg0NwkvKiBAZnB0cihzeW0gKyBhZGQpLCBkYXRhOCBMU0IgKi8KKysjZGVmaW5lIFJfSUE2NF9QQ1JFTDYwQgkJMHg0OAkvKiBAcGNyZWwoc3ltICsgYWRkKSwgYnJsICovCisrI2RlZmluZSBSX0lBNjRfUENSRUwyMUIJCTB4NDkJLyogQHBjcmVsKHN5bSArIGFkZCksIHB0YiwgY2FsbCAqLworKyNkZWZpbmUgUl9JQTY0X1BDUkVMMjFNCQkweDRhCS8qIEBwY3JlbChzeW0gKyBhZGQpLCBjaGsucyAqLworKyNkZWZpbmUgUl9JQTY0X1BDUkVMMjFGCQkweDRiCS8qIEBwY3JlbChzeW0gKyBhZGQpLCBmY2hrZiAqLworKyNkZWZpbmUgUl9JQTY0X1BDUkVMMzJNU0IJMHg0YwkvKiBAcGNyZWwoc3ltICsgYWRkKSwgZGF0YTQgTVNCICovCisrI2RlZmluZSBSX0lBNjRfUENSRUwzMkxTQgkweDRkCS8qIEBwY3JlbChzeW0gKyBhZGQpLCBkYXRhNCBMU0IgKi8KKysjZGVmaW5lIFJfSUE2NF9QQ1JFTDY0TVNCCTB4NGUJLyogQHBjcmVsKHN5bSArIGFkZCksIGRhdGE4IE1TQiAqLworKyNkZWZpbmUgUl9JQTY0X1BDUkVMNjRMU0IJMHg0ZgkvKiBAcGNyZWwoc3ltICsgYWRkKSwgZGF0YTggTFNCICovCisrI2RlZmluZSBSX0lBNjRfTFRPRkZfRlBUUjIyCTB4NTIJLyogQGx0b2ZmKEBmcHRyKHMrYSkpLCBpbW0yMiAqLworKyNkZWZpbmUgUl9JQTY0X0xUT0ZGX0ZQVFI2NEkJMHg1MwkvKiBAbHRvZmYoQGZwdHIocythKSksIGltbTY0ICovCisrI2RlZmluZSBSX0lBNjRfTFRPRkZfRlBUUjMyTVNCCTB4NTQJLyogQGx0b2ZmKEBmcHRyKHMrYSkpLCBkYXRhNCBNU0IgKi8KKysjZGVmaW5lIFJfSUE2NF9MVE9GRl9GUFRSMzJMU0IJMHg1NQkvKiBAbHRvZmYoQGZwdHIocythKSksIGRhdGE0IExTQiAqLworKyNkZWZpbmUgUl9JQTY0X0xUT0ZGX0ZQVFI2NE1TQgkweDU2CS8qIEBsdG9mZihAZnB0cihzK2EpKSwgZGF0YTggTVNCICovCisrI2RlZmluZSBSX0lBNjRfTFRPRkZfRlBUUjY0TFNCCTB4NTcJLyogQGx0b2ZmKEBmcHRyKHMrYSkpLCBkYXRhOCBMU0IgKi8KKysjZGVmaW5lIFJfSUE2NF9TRUdSRUwzMk1TQgkweDVjCS8qIEBzZWdyZWwoc3ltICsgYWRkKSwgZGF0YTQgTVNCICovCisrI2RlZmluZSBSX0lBNjRfU0VHUkVMMzJMU0IJMHg1ZAkvKiBAc2VncmVsKHN5bSArIGFkZCksIGRhdGE0IExTQiAqLworKyNkZWZpbmUgUl9JQTY0X1NFR1JFTDY0TVNCCTB4NWUJLyogQHNlZ3JlbChzeW0gKyBhZGQpLCBkYXRhOCBNU0IgKi8KKysjZGVmaW5lIFJfSUE2NF9TRUdSRUw2NExTQgkweDVmCS8qIEBzZWdyZWwoc3ltICsgYWRkKSwgZGF0YTggTFNCICovCisrI2RlZmluZSBSX0lBNjRfU0VDUkVMMzJNU0IJMHg2NAkvKiBAc2VjcmVsKHN5bSArIGFkZCksIGRhdGE0IE1TQiAqLworKyNkZWZpbmUgUl9JQTY0X1NFQ1JFTDMyTFNCCTB4NjUJLyogQHNlY3JlbChzeW0gKyBhZGQpLCBkYXRhNCBMU0IgKi8KKysjZGVmaW5lIFJfSUE2NF9TRUNSRUw2NE1TQgkweDY2CS8qIEBzZWNyZWwoc3ltICsgYWRkKSwgZGF0YTggTVNCICovCisrI2RlZmluZSBSX0lBNjRfU0VDUkVMNjRMU0IJMHg2NwkvKiBAc2VjcmVsKHN5bSArIGFkZCksIGRhdGE4IExTQiAqLworKyNkZWZpbmUgUl9JQTY0X1JFTDMyTVNCCQkweDZjCS8qIGRhdGEgNCArIFJFTCAqLworKyNkZWZpbmUgUl9JQTY0X1JFTDMyTFNCCQkweDZkCS8qIGRhdGEgNCArIFJFTCAqLworKyNkZWZpbmUgUl9JQTY0X1JFTDY0TVNCCQkweDZlCS8qIGRhdGEgOCArIFJFTCAqLworKyNkZWZpbmUgUl9JQTY0X1JFTDY0TFNCCQkweDZmCS8qIGRhdGEgOCArIFJFTCAqLworKyNkZWZpbmUgUl9JQTY0X0xUVjMyTVNCCQkweDc0CS8qIHN5bWJvbCArIGFkZGVuZCwgZGF0YTQgTVNCICovCisrI2RlZmluZSBSX0lBNjRfTFRWMzJMU0IJCTB4NzUJLyogc3ltYm9sICsgYWRkZW5kLCBkYXRhNCBMU0IgKi8KKysjZGVmaW5lIFJfSUE2NF9MVFY2NE1TQgkJMHg3NgkvKiBzeW1ib2wgKyBhZGRlbmQsIGRhdGE4IE1TQiAqLworKyNkZWZpbmUgUl9JQTY0X0xUVjY0TFNCCQkweDc3CS8qIHN5bWJvbCArIGFkZGVuZCwgZGF0YTggTFNCICovCisrI2RlZmluZSBSX0lBNjRfUENSRUwyMUJJCTB4NzkJLyogQHBjcmVsKHN5bSArIGFkZCksIDIxYml0IGluc3QgKi8KKysjZGVmaW5lIFJfSUE2NF9QQ1JFTDIyCQkweDdhCS8qIEBwY3JlbChzeW0gKyBhZGQpLCAyMmJpdCBpbnN0ICovCisrI2RlZmluZSBSX0lBNjRfUENSRUw2NEkJCTB4N2IJLyogQHBjcmVsKHN5bSArIGFkZCksIDY0Yml0IGluc3QgKi8KKysjZGVmaW5lIFJfSUE2NF9JUExUTVNCCQkweDgwCS8qIGR5bmFtaWMgcmVsb2MsIGltcG9ydGVkIFBMVCwgTVNCICovCisrI2RlZmluZSBSX0lBNjRfSVBMVExTQgkJMHg4MQkvKiBkeW5hbWljIHJlbG9jLCBpbXBvcnRlZCBQTFQsIExTQiAqLworKyNkZWZpbmUgUl9JQTY0X0NPUFkJCTB4ODQJLyogY29weSByZWxvY2F0aW9uICovCisrI2RlZmluZSBSX0lBNjRfU1VCCQkweDg1CS8qIEFkZGVuZCBhbmQgc3ltYm9sIGRpZmZlcmVuY2UgKi8KKysjZGVmaW5lIFJfSUE2NF9MVE9GRjIyWAkJMHg4NgkvKiBMVE9GRjIyLCByZWxheGFibGUuICAqLworKyNkZWZpbmUgUl9JQTY0X0xEWE1PVgkJMHg4NwkvKiBVc2Ugb2YgTFRPRkYyMlguICAqLworKyNkZWZpbmUgUl9JQTY0X1RQUkVMMTQJCTB4OTEJLyogQHRwcmVsKHN5bSArIGFkZCksIGltbTE0ICovCisrI2RlZmluZSBSX0lBNjRfVFBSRUwyMgkJMHg5MgkvKiBAdHByZWwoc3ltICsgYWRkKSwgaW1tMjIgKi8KKysjZGVmaW5lIFJfSUE2NF9UUFJFTDY0SQkJMHg5MwkvKiBAdHByZWwoc3ltICsgYWRkKSwgaW1tNjQgKi8KKysjZGVmaW5lIFJfSUE2NF9UUFJFTDY0TVNCCTB4OTYJLyogQHRwcmVsKHN5bSArIGFkZCksIGRhdGE4IE1TQiAqLworKyNkZWZpbmUgUl9JQTY0X1RQUkVMNjRMU0IJMHg5NwkvKiBAdHByZWwoc3ltICsgYWRkKSwgZGF0YTggTFNCICovCisrI2RlZmluZSBSX0lBNjRfTFRPRkZfVFBSRUwyMgkweDlhCS8qIEBsdG9mZihAdHByZWwocythKSksIGltbTIgKi8KKysjZGVmaW5lIFJfSUE2NF9EVFBNT0Q2NE1TQgkweGE2CS8qIEBkdHBtb2Qoc3ltICsgYWRkKSwgZGF0YTggTVNCICovCisrI2RlZmluZSBSX0lBNjRfRFRQTU9ENjRMU0IJMHhhNwkvKiBAZHRwbW9kKHN5bSArIGFkZCksIGRhdGE4IExTQiAqLworKyNkZWZpbmUgUl9JQTY0X0xUT0ZGX0RUUE1PRDIyCTB4YWEJLyogQGx0b2ZmKEBkdHBtb2Qoc3ltICsgYWRkKSksIGltbTIyICovCisrI2RlZmluZSBSX0lBNjRfRFRQUkVMMTQJCTB4YjEJLyogQGR0cHJlbChzeW0gKyBhZGQpLCBpbW0xNCAqLworKyNkZWZpbmUgUl9JQTY0X0RUUFJFTDIyCQkweGIyCS8qIEBkdHByZWwoc3ltICsgYWRkKSwgaW1tMjIgKi8KKysjZGVmaW5lIFJfSUE2NF9EVFBSRUw2NEkJMHhiMwkvKiBAZHRwcmVsKHN5bSArIGFkZCksIGltbTY0ICovCisrI2RlZmluZSBSX0lBNjRfRFRQUkVMMzJNU0IJMHhiNAkvKiBAZHRwcmVsKHN5bSArIGFkZCksIGRhdGE0IE1TQiAqLworKyNkZWZpbmUgUl9JQTY0X0RUUFJFTDMyTFNCCTB4YjUJLyogQGR0cHJlbChzeW0gKyBhZGQpLCBkYXRhNCBMU0IgKi8KKysjZGVmaW5lIFJfSUE2NF9EVFBSRUw2NE1TQgkweGI2CS8qIEBkdHByZWwoc3ltICsgYWRkKSwgZGF0YTggTVNCICovCisrI2RlZmluZSBSX0lBNjRfRFRQUkVMNjRMU0IJMHhiNwkvKiBAZHRwcmVsKHN5bSArIGFkZCksIGRhdGE4IExTQiAqLworKyNkZWZpbmUgUl9JQTY0X0xUT0ZGX0RUUFJFTDIyCTB4YmEJLyogQGx0b2ZmKEBkdHByZWwocythKSksIGltbTIyICovCisrCisrLyogU0ggc3BlY2lmaWMgZGVjbGFyYXRpb25zICovCisrCisrLyogUHJvY2Vzc29yIHNwZWNpZmljIGZsYWdzIGZvciB0aGUgRUxGIGhlYWRlciBlX2ZsYWdzIGZpZWxkLiAgKi8KKysjZGVmaW5lIEVGX1NIX01BQ0hfTUFTSwkJMHgxZgorKyNkZWZpbmUgRUZfU0hfVU5LTk9XTgkJMHgwCisrI2RlZmluZSBFRl9TSDEJCQkweDEKKysjZGVmaW5lIEVGX1NIMgkJCTB4MgorKyNkZWZpbmUgRUZfU0gzCQkJMHgzCisrI2RlZmluZSBFRl9TSF9EU1AJCTB4NAorKyNkZWZpbmUgRUZfU0gzX0RTUAkJMHg1CisrI2RlZmluZSBFRl9TSDRBTF9EU1AJCTB4NgorKyNkZWZpbmUgRUZfU0gzRQkJCTB4OAorKyNkZWZpbmUgRUZfU0g0CQkJMHg5CisrI2RlZmluZSBFRl9TSDJFCQkJMHhiCisrI2RlZmluZSBFRl9TSDRBCQkJMHhjCisrI2RlZmluZSBFRl9TSDJBCQkJMHhkCisrI2RlZmluZSBFRl9TSDRfTk9GUFUJCTB4MTAKKysjZGVmaW5lIEVGX1NINEFfTk9GUFUJCTB4MTEKKysjZGVmaW5lIEVGX1NINF9OT01NVV9OT0ZQVQkweDEyCisrI2RlZmluZSBFRl9TSDJBX05PRlBVCQkweDEzCisrI2RlZmluZSBFRl9TSDNfTk9NTVUJCTB4MTQKKysjZGVmaW5lIEVGX1NIMkFfU0g0X05PRlBVCTB4MTUKKysjZGVmaW5lIEVGX1NIMkFfU0gzX05PRlBVCTB4MTYKKysjZGVmaW5lIEVGX1NIMkFfU0g0CQkweDE3CisrI2RlZmluZSBFRl9TSDJBX1NIM0UJCTB4MTgKKysKKysvKiBTSCByZWxvY3MuICAqLworKyNkZWZpbmUJUl9TSF9OT05FCQkwCisrI2RlZmluZQlSX1NIX0RJUjMyCQkxCisrI2RlZmluZQlSX1NIX1JFTDMyCQkyCisrI2RlZmluZQlSX1NIX0RJUjhXUE4JCTMKKysjZGVmaW5lCVJfU0hfSU5EMTJXCQk0CisrI2RlZmluZQlSX1NIX0RJUjhXUEwJCTUKKysjZGVmaW5lCVJfU0hfRElSOFdQWgkJNgorKyNkZWZpbmUJUl9TSF9ESVI4QlAJCTcKKysjZGVmaW5lCVJfU0hfRElSOFcJCTgKKysjZGVmaW5lCVJfU0hfRElSOEwJCTkKKysjZGVmaW5lCVJfU0hfU1dJVENIMTYJCTI1CisrI2RlZmluZQlSX1NIX1NXSVRDSDMyCQkyNgorKyNkZWZpbmUJUl9TSF9VU0VTCQkyNworKyNkZWZpbmUJUl9TSF9DT1VOVAkJMjgKKysjZGVmaW5lCVJfU0hfQUxJR04JCTI5CisrI2RlZmluZQlSX1NIX0NPREUJCTMwCisrI2RlZmluZQlSX1NIX0RBVEEJCTMxCisrI2RlZmluZQlSX1NIX0xBQkVMCQkzMgorKyNkZWZpbmUJUl9TSF9TV0lUQ0g4CQkzMworKyNkZWZpbmUJUl9TSF9HTlVfVlRJTkhFUklUCTM0CisrI2RlZmluZQlSX1NIX0dOVV9WVEVOVFJZCTM1CisrI2RlZmluZQlSX1NIX1RMU19HRF8zMgkJMTQ0CisrI2RlZmluZQlSX1NIX1RMU19MRF8zMgkJMTQ1CisrI2RlZmluZQlSX1NIX1RMU19MRE9fMzIJCTE0NgorKyNkZWZpbmUJUl9TSF9UTFNfSUVfMzIJCTE0NworKyNkZWZpbmUJUl9TSF9UTFNfTEVfMzIJCTE0OAorKyNkZWZpbmUJUl9TSF9UTFNfRFRQTU9EMzIJMTQ5CisrI2RlZmluZQlSX1NIX1RMU19EVFBPRkYzMgkxNTAKKysjZGVmaW5lCVJfU0hfVExTX1RQT0ZGMzIJMTUxCisrI2RlZmluZQlSX1NIX0dPVDMyCQkxNjAKKysjZGVmaW5lCVJfU0hfUExUMzIJCTE2MQorKyNkZWZpbmUJUl9TSF9DT1BZCQkxNjIKKysjZGVmaW5lCVJfU0hfR0xPQl9EQVQJCTE2MworKyNkZWZpbmUJUl9TSF9KTVBfU0xPVAkJMTY0CisrI2RlZmluZQlSX1NIX1JFTEFUSVZFCQkxNjUKKysjZGVmaW5lCVJfU0hfR09UT0ZGCQkxNjYKKysjZGVmaW5lCVJfU0hfR09UUEMJCTE2NworKy8qIEtlZXAgdGhpcyB0aGUgbGFzdCBlbnRyeS4gICovCisrI2RlZmluZQlSX1NIX05VTQkJMjU2CisrCisrLyogUy8zOTAgc3BlY2lmaWMgZGVmaW5pdGlvbnMuICAqLworKworKy8qIFZhbGlkIHZhbHVlcyBmb3IgdGhlIGVfZmxhZ3MgZmllbGQuICAqLworKworKyNkZWZpbmUgRUZfUzM5MF9ISUdIX0dQUlMgICAgMHgwMDAwMDAwMSAgLyogSGlnaCBHUFJzIGtlcm5lbCBmYWNpbGl0eSBuZWVkZWQuICAqLworKworKy8qIEFkZGl0aW9uYWwgczM5MCByZWxvY3MgKi8KKysKKysjZGVmaW5lIFJfMzkwX05PTkUJCTAJLyogTm8gcmVsb2MuICAqLworKyNkZWZpbmUgUl8zOTBfOAkJCTEJLyogRGlyZWN0IDggYml0LiAgKi8KKysjZGVmaW5lIFJfMzkwXzEyCQkyCS8qIERpcmVjdCAxMiBiaXQuICAqLworKyNkZWZpbmUgUl8zOTBfMTYJCTMJLyogRGlyZWN0IDE2IGJpdC4gICovCisrI2RlZmluZSBSXzM5MF8zMgkJNAkvKiBEaXJlY3QgMzIgYml0LiAgKi8KKysjZGVmaW5lIFJfMzkwX1BDMzIJCTUJLyogUEMgcmVsYXRpdmUgMzIgYml0LgkqLworKyNkZWZpbmUgUl8zOTBfR09UMTIJCTYJLyogMTIgYml0IEdPVCBvZmZzZXQuICAqLworKyNkZWZpbmUgUl8zOTBfR09UMzIJCTcJLyogMzIgYml0IEdPVCBvZmZzZXQuICAqLworKyNkZWZpbmUgUl8zOTBfUExUMzIJCTgJLyogMzIgYml0IFBDIHJlbGF0aXZlIFBMVCBhZGRyZXNzLiAgKi8KKysjZGVmaW5lIFJfMzkwX0NPUFkJCTkJLyogQ29weSBzeW1ib2wgYXQgcnVudGltZS4gICovCisrI2RlZmluZSBSXzM5MF9HTE9CX0RBVAkJMTAJLyogQ3JlYXRlIEdPVCBlbnRyeS4gICovCisrI2RlZmluZSBSXzM5MF9KTVBfU0xPVAkJMTEJLyogQ3JlYXRlIFBMVCBlbnRyeS4gICovCisrI2RlZmluZSBSXzM5MF9SRUxBVElWRQkJMTIJLyogQWRqdXN0IGJ5IHByb2dyYW0gYmFzZS4gICovCisrI2RlZmluZSBSXzM5MF9HT1RPRkYzMgkJMTMJLyogMzIgYml0IG9mZnNldCB0byBHT1QuCSAqLworKyNkZWZpbmUgUl8zOTBfR09UUEMJCTE0CS8qIDMyIGJpdCBQQyByZWxhdGl2ZSBvZmZzZXQgdG8gR09ULiAgKi8KKysjZGVmaW5lIFJfMzkwX0dPVDE2CQkxNQkvKiAxNiBiaXQgR09UIG9mZnNldC4gICovCisrI2RlZmluZSBSXzM5MF9QQzE2CQkxNgkvKiBQQyByZWxhdGl2ZSAxNiBiaXQuCSovCisrI2RlZmluZSBSXzM5MF9QQzE2REJMCQkxNwkvKiBQQyByZWxhdGl2ZSAxNiBiaXQgc2hpZnRlZCBieSAxLiAgKi8KKysjZGVmaW5lIFJfMzkwX1BMVDE2REJMCQkxOAkvKiAxNiBiaXQgUEMgcmVsLiBQTFQgc2hpZnRlZCBieSAxLiAgKi8KKysjZGVmaW5lIFJfMzkwX1BDMzJEQkwJCTE5CS8qIFBDIHJlbGF0aXZlIDMyIGJpdCBzaGlmdGVkIGJ5IDEuICAqLworKyNkZWZpbmUgUl8zOTBfUExUMzJEQkwJCTIwCS8qIDMyIGJpdCBQQyByZWwuIFBMVCBzaGlmdGVkIGJ5IDEuICAqLworKyNkZWZpbmUgUl8zOTBfR09UUENEQkwJCTIxCS8qIDMyIGJpdCBQQyByZWwuIEdPVCBzaGlmdGVkIGJ5IDEuICAqLworKyNkZWZpbmUgUl8zOTBfNjQJCTIyCS8qIERpcmVjdCA2NCBiaXQuICAqLworKyNkZWZpbmUgUl8zOTBfUEM2NAkJMjMJLyogUEMgcmVsYXRpdmUgNjQgYml0LgkqLworKyNkZWZpbmUgUl8zOTBfR09UNjQJCTI0CS8qIDY0IGJpdCBHT1Qgb2Zmc2V0LiAgKi8KKysjZGVmaW5lIFJfMzkwX1BMVDY0CQkyNQkvKiA2NCBiaXQgUEMgcmVsYXRpdmUgUExUIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl8zOTBfR09URU5UCQkyNgkvKiAzMiBiaXQgUEMgcmVsLiB0byBHT1QgZW50cnkgPj4gMS4gKi8KKysjZGVmaW5lIFJfMzkwX0dPVE9GRjE2CQkyNwkvKiAxNiBiaXQgb2Zmc2V0IHRvIEdPVC4gKi8KKysjZGVmaW5lIFJfMzkwX0dPVE9GRjY0CQkyOAkvKiA2NCBiaXQgb2Zmc2V0IHRvIEdPVC4gKi8KKysjZGVmaW5lIFJfMzkwX0dPVFBMVDEyCQkyOQkvKiAxMiBiaXQgb2Zmc2V0IHRvIGp1bXAgc2xvdC4JKi8KKysjZGVmaW5lIFJfMzkwX0dPVFBMVDE2CQkzMAkvKiAxNiBiaXQgb2Zmc2V0IHRvIGp1bXAgc2xvdC4JKi8KKysjZGVmaW5lIFJfMzkwX0dPVFBMVDMyCQkzMQkvKiAzMiBiaXQgb2Zmc2V0IHRvIGp1bXAgc2xvdC4JKi8KKysjZGVmaW5lIFJfMzkwX0dPVFBMVDY0CQkzMgkvKiA2NCBiaXQgb2Zmc2V0IHRvIGp1bXAgc2xvdC4JKi8KKysjZGVmaW5lIFJfMzkwX0dPVFBMVEVOVAkJMzMJLyogMzIgYml0IHJlbC4gb2Zmc2V0IHRvIGp1bXAgc2xvdC4gICovCisrI2RlZmluZSBSXzM5MF9QTFRPRkYxNgkJMzQJLyogMTYgYml0IG9mZnNldCBmcm9tIEdPVCB0byBQTFQuICovCisrI2RlZmluZSBSXzM5MF9QTFRPRkYzMgkJMzUJLyogMzIgYml0IG9mZnNldCBmcm9tIEdPVCB0byBQTFQuICovCisrI2RlZmluZSBSXzM5MF9QTFRPRkY2NAkJMzYJLyogMTYgYml0IG9mZnNldCBmcm9tIEdPVCB0byBQTFQuICovCisrI2RlZmluZSBSXzM5MF9UTFNfTE9BRAkJMzcJLyogVGFnIGZvciBsb2FkIGluc24gaW4gVExTIGNvZGUuICAqLworKyNkZWZpbmUgUl8zOTBfVExTX0dEQ0FMTAkzOAkvKiBUYWcgZm9yIGZ1bmN0aW9uIGNhbGwgaW4gZ2VuZXJhbAorKwkJCQkJICAgZHluYW1pYyBUTFMgY29kZS4gKi8KKysjZGVmaW5lIFJfMzkwX1RMU19MRENBTEwJMzkJLyogVGFnIGZvciBmdW5jdGlvbiBjYWxsIGluIGxvY2FsCisrCQkJCQkgICBkeW5hbWljIFRMUyBjb2RlLiAqLworKyNkZWZpbmUgUl8zOTBfVExTX0dEMzIJCTQwCS8qIERpcmVjdCAzMiBiaXQgZm9yIGdlbmVyYWwgZHluYW1pYworKwkJCQkJICAgdGhyZWFkIGxvY2FsIGRhdGEuICAqLworKyNkZWZpbmUgUl8zOTBfVExTX0dENjQJCTQxCS8qIERpcmVjdCA2NCBiaXQgZm9yIGdlbmVyYWwgZHluYW1pYworKwkJCQkJICB0aHJlYWQgbG9jYWwgZGF0YS4gICovCisrI2RlZmluZSBSXzM5MF9UTFNfR09USUUxMgk0MgkvKiAxMiBiaXQgR09UIG9mZnNldCBmb3Igc3RhdGljIFRMUworKwkJCQkJICAgYmxvY2sgb2Zmc2V0LiAgKi8KKysjZGVmaW5lIFJfMzkwX1RMU19HT1RJRTMyCTQzCS8qIDMyIGJpdCBHT1Qgb2Zmc2V0IGZvciBzdGF0aWMgVExTCisrCQkJCQkgICBibG9jayBvZmZzZXQuICAqLworKyNkZWZpbmUgUl8zOTBfVExTX0dPVElFNjQJNDQJLyogNjQgYml0IEdPVCBvZmZzZXQgZm9yIHN0YXRpYyBUTFMKKysJCQkJCSAgIGJsb2NrIG9mZnNldC4gKi8KKysjZGVmaW5lIFJfMzkwX1RMU19MRE0zMgkJNDUJLyogRGlyZWN0IDMyIGJpdCBmb3IgbG9jYWwgZHluYW1pYworKwkJCQkJICAgdGhyZWFkIGxvY2FsIGRhdGEgaW4gTEUgY29kZS4gICovCisrI2RlZmluZSBSXzM5MF9UTFNfTERNNjQJCTQ2CS8qIERpcmVjdCA2NCBiaXQgZm9yIGxvY2FsIGR5bmFtaWMKKysJCQkJCSAgIHRocmVhZCBsb2NhbCBkYXRhIGluIExFIGNvZGUuICAqLworKyNkZWZpbmUgUl8zOTBfVExTX0lFMzIJCTQ3CS8qIDMyIGJpdCBhZGRyZXNzIG9mIEdPVCBlbnRyeSBmb3IKKysJCQkJCSAgIG5lZ2F0ZWQgc3RhdGljIFRMUyBibG9jayBvZmZzZXQuICAqLworKyNkZWZpbmUgUl8zOTBfVExTX0lFNjQJCTQ4CS8qIDY0IGJpdCBhZGRyZXNzIG9mIEdPVCBlbnRyeSBmb3IKKysJCQkJCSAgIG5lZ2F0ZWQgc3RhdGljIFRMUyBibG9jayBvZmZzZXQuICAqLworKyNkZWZpbmUgUl8zOTBfVExTX0lFRU5UCQk0OQkvKiAzMiBiaXQgcmVsLiBvZmZzZXQgdG8gR09UIGVudHJ5IGZvcgorKwkJCQkJICAgbmVnYXRlZCBzdGF0aWMgVExTIGJsb2NrIG9mZnNldC4gICovCisrI2RlZmluZSBSXzM5MF9UTFNfTEUzMgkJNTAJLyogMzIgYml0IG5lZ2F0ZWQgb2Zmc2V0IHJlbGF0aXZlIHRvCisrCQkJCQkgICBzdGF0aWMgVExTIGJsb2NrLiAgKi8KKysjZGVmaW5lIFJfMzkwX1RMU19MRTY0CQk1MQkvKiA2NCBiaXQgbmVnYXRlZCBvZmZzZXQgcmVsYXRpdmUgdG8KKysJCQkJCSAgIHN0YXRpYyBUTFMgYmxvY2suICAqLworKyNkZWZpbmUgUl8zOTBfVExTX0xETzMyCQk1MgkvKiAzMiBiaXQgb2Zmc2V0IHJlbGF0aXZlIHRvIFRMUworKwkJCQkJICAgYmxvY2suICAqLworKyNkZWZpbmUgUl8zOTBfVExTX0xETzY0CQk1MwkvKiA2NCBiaXQgb2Zmc2V0IHJlbGF0aXZlIHRvIFRMUworKwkJCQkJICAgYmxvY2suICAqLworKyNkZWZpbmUgUl8zOTBfVExTX0RUUE1PRAk1NAkvKiBJRCBvZiBtb2R1bGUgY29udGFpbmluZyBzeW1ib2wuICAqLworKyNkZWZpbmUgUl8zOTBfVExTX0RUUE9GRgk1NQkvKiBPZmZzZXQgaW4gVExTIGJsb2NrLgkgKi8KKysjZGVmaW5lIFJfMzkwX1RMU19UUE9GRgkJNTYJLyogTmVnYXRlZCBvZmZzZXQgaW4gc3RhdGljIFRMUworKwkJCQkJICAgYmxvY2suICAqLworKyNkZWZpbmUgUl8zOTBfMjAJCTU3CS8qIERpcmVjdCAyMCBiaXQuICAqLworKyNkZWZpbmUgUl8zOTBfR09UMjAJCTU4CS8qIDIwIGJpdCBHT1Qgb2Zmc2V0LiAgKi8KKysjZGVmaW5lIFJfMzkwX0dPVFBMVDIwCQk1OQkvKiAyMCBiaXQgb2Zmc2V0IHRvIGp1bXAgc2xvdC4gICovCisrI2RlZmluZSBSXzM5MF9UTFNfR09USUUyMAk2MAkvKiAyMCBiaXQgR09UIG9mZnNldCBmb3Igc3RhdGljIFRMUworKwkJCQkJICAgYmxvY2sgb2Zmc2V0LiAgKi8KKysjZGVmaW5lIFJfMzkwX0lSRUxBVElWRSAgICAgICAgIDYxICAgICAgLyogU1RUX0dOVV9JRlVOQyByZWxvY2F0aW9uLiAgKi8KKysvKiBLZWVwIHRoaXMgdGhlIGxhc3QgZW50cnkuICAqLworKyNkZWZpbmUgUl8zOTBfTlVNCQk2MgorKworKworKy8qIENSSVMgcmVsb2NhdGlvbnMuICAqLworKyNkZWZpbmUgUl9DUklTX05PTkUJCTAKKysjZGVmaW5lIFJfQ1JJU184CQkxCisrI2RlZmluZSBSX0NSSVNfMTYJCTIKKysjZGVmaW5lIFJfQ1JJU18zMgkJMworKyNkZWZpbmUgUl9DUklTXzhfUENSRUwJCTQKKysjZGVmaW5lIFJfQ1JJU18xNl9QQ1JFTAkJNQorKyNkZWZpbmUgUl9DUklTXzMyX1BDUkVMCQk2CisrI2RlZmluZSBSX0NSSVNfR05VX1ZUSU5IRVJJVAk3CisrI2RlZmluZSBSX0NSSVNfR05VX1ZURU5UUlkJOAorKyNkZWZpbmUgUl9DUklTX0NPUFkJCTkKKysjZGVmaW5lIFJfQ1JJU19HTE9CX0RBVAkJMTAKKysjZGVmaW5lIFJfQ1JJU19KVU1QX1NMT1QJMTEKKysjZGVmaW5lIFJfQ1JJU19SRUxBVElWRQkJMTIKKysjZGVmaW5lIFJfQ1JJU18xNl9HT1QJCTEzCisrI2RlZmluZSBSX0NSSVNfMzJfR09UCQkxNAorKyNkZWZpbmUgUl9DUklTXzE2X0dPVFBMVAkxNQorKyNkZWZpbmUgUl9DUklTXzMyX0dPVFBMVAkxNgorKyNkZWZpbmUgUl9DUklTXzMyX0dPVFJFTAkxNworKyNkZWZpbmUgUl9DUklTXzMyX1BMVF9HT1RSRUwJMTgKKysjZGVmaW5lIFJfQ1JJU18zMl9QTFRfUENSRUwJMTkKKysKKysjZGVmaW5lIFJfQ1JJU19OVU0JCTIwCisrCisrCisrLyogQU1EIHg4Ni02NCByZWxvY2F0aW9ucy4gICovCisrI2RlZmluZSBSX1g4Nl82NF9OT05FCQkwCS8qIE5vIHJlbG9jICovCisrI2RlZmluZSBSX1g4Nl82NF82NAkJMQkvKiBEaXJlY3QgNjQgYml0ICAqLworKyNkZWZpbmUgUl9YODZfNjRfUEMzMgkJMgkvKiBQQyByZWxhdGl2ZSAzMiBiaXQgc2lnbmVkICovCisrI2RlZmluZSBSX1g4Nl82NF9HT1QzMgkJMwkvKiAzMiBiaXQgR09UIGVudHJ5ICovCisrI2RlZmluZSBSX1g4Nl82NF9QTFQzMgkJNAkvKiAzMiBiaXQgUExUIGFkZHJlc3MgKi8KKysjZGVmaW5lIFJfWDg2XzY0X0NPUFkJCTUJLyogQ29weSBzeW1ib2wgYXQgcnVudGltZSAqLworKyNkZWZpbmUgUl9YODZfNjRfR0xPQl9EQVQJNgkvKiBDcmVhdGUgR09UIGVudHJ5ICovCisrI2RlZmluZSBSX1g4Nl82NF9KVU1QX1NMT1QJNwkvKiBDcmVhdGUgUExUIGVudHJ5ICovCisrI2RlZmluZSBSX1g4Nl82NF9SRUxBVElWRQk4CS8qIEFkanVzdCBieSBwcm9ncmFtIGJhc2UgKi8KKysjZGVmaW5lIFJfWDg2XzY0X0dPVFBDUkVMCTkJLyogMzIgYml0IHNpZ25lZCBQQyByZWxhdGl2ZQorKwkJCQkJICAgb2Zmc2V0IHRvIEdPVCAqLworKyNkZWZpbmUgUl9YODZfNjRfMzIJCTEwCS8qIERpcmVjdCAzMiBiaXQgemVybyBleHRlbmRlZCAqLworKyNkZWZpbmUgUl9YODZfNjRfMzJTCQkxMQkvKiBEaXJlY3QgMzIgYml0IHNpZ24gZXh0ZW5kZWQgKi8KKysjZGVmaW5lIFJfWDg2XzY0XzE2CQkxMgkvKiBEaXJlY3QgMTYgYml0IHplcm8gZXh0ZW5kZWQgKi8KKysjZGVmaW5lIFJfWDg2XzY0X1BDMTYJCTEzCS8qIDE2IGJpdCBzaWduIGV4dGVuZGVkIHBjIHJlbGF0aXZlICovCisrI2RlZmluZSBSX1g4Nl82NF84CQkxNAkvKiBEaXJlY3QgOCBiaXQgc2lnbiBleHRlbmRlZCAgKi8KKysjZGVmaW5lIFJfWDg2XzY0X1BDOAkJMTUJLyogOCBiaXQgc2lnbiBleHRlbmRlZCBwYyByZWxhdGl2ZSAqLworKyNkZWZpbmUgUl9YODZfNjRfRFRQTU9ENjQJMTYJLyogSUQgb2YgbW9kdWxlIGNvbnRhaW5pbmcgc3ltYm9sICovCisrI2RlZmluZSBSX1g4Nl82NF9EVFBPRkY2NAkxNwkvKiBPZmZzZXQgaW4gbW9kdWxlJ3MgVExTIGJsb2NrICovCisrI2RlZmluZSBSX1g4Nl82NF9UUE9GRjY0CTE4CS8qIE9mZnNldCBpbiBpbml0aWFsIFRMUyBibG9jayAqLworKyNkZWZpbmUgUl9YODZfNjRfVExTR0QJCTE5CS8qIDMyIGJpdCBzaWduZWQgUEMgcmVsYXRpdmUgb2Zmc2V0CisrCQkJCQkgICB0byB0d28gR09UIGVudHJpZXMgZm9yIEdEIHN5bWJvbCAqLworKyNkZWZpbmUgUl9YODZfNjRfVExTTEQJCTIwCS8qIDMyIGJpdCBzaWduZWQgUEMgcmVsYXRpdmUgb2Zmc2V0CisrCQkJCQkgICB0byB0d28gR09UIGVudHJpZXMgZm9yIExEIHN5bWJvbCAqLworKyNkZWZpbmUgUl9YODZfNjRfRFRQT0ZGMzIJMjEJLyogT2Zmc2V0IGluIFRMUyBibG9jayAqLworKyNkZWZpbmUgUl9YODZfNjRfR09UVFBPRkYJMjIJLyogMzIgYml0IHNpZ25lZCBQQyByZWxhdGl2ZSBvZmZzZXQKKysJCQkJCSAgIHRvIEdPVCBlbnRyeSBmb3IgSUUgc3ltYm9sICovCisrI2RlZmluZSBSX1g4Nl82NF9UUE9GRjMyCTIzCS8qIE9mZnNldCBpbiBpbml0aWFsIFRMUyBibG9jayAqLworKyNkZWZpbmUgUl9YODZfNjRfUEM2NAkJMjQJLyogUEMgcmVsYXRpdmUgNjQgYml0ICovCisrI2RlZmluZSBSX1g4Nl82NF9HT1RPRkY2NAkyNQkvKiA2NCBiaXQgb2Zmc2V0IHRvIEdPVCAqLworKyNkZWZpbmUgUl9YODZfNjRfR09UUEMzMgkyNgkvKiAzMiBiaXQgc2lnbmVkIHBjIHJlbGF0aXZlCisrCQkJCQkgICBvZmZzZXQgdG8gR09UICovCisrI2RlZmluZSBSX1g4Nl82NF9HT1Q2NAkJMjcJLyogNjQtYml0IEdPVCBlbnRyeSBvZmZzZXQgKi8KKysjZGVmaW5lIFJfWDg2XzY0X0dPVFBDUkVMNjQJMjgJLyogNjQtYml0IFBDIHJlbGF0aXZlIG9mZnNldAorKwkJCQkJICAgdG8gR09UIGVudHJ5ICovCisrI2RlZmluZSBSX1g4Nl82NF9HT1RQQzY0CTI5CS8qIDY0LWJpdCBQQyByZWxhdGl2ZSBvZmZzZXQgdG8gR09UICovCisrI2RlZmluZSBSX1g4Nl82NF9HT1RQTFQ2NAkzMCAJLyogbGlrZSBHT1Q2NCwgc2F5cyBQTFQgZW50cnkgbmVlZGVkICovCisrI2RlZmluZSBSX1g4Nl82NF9QTFRPRkY2NAkzMQkvKiA2NC1iaXQgR09UIHJlbGF0aXZlIG9mZnNldAorKwkJCQkJICAgdG8gUExUIGVudHJ5ICovCisrI2RlZmluZSBSX1g4Nl82NF9TSVpFMzIJCTMyCS8qIFNpemUgb2Ygc3ltYm9sIHBsdXMgMzItYml0IGFkZGVuZCAqLworKyNkZWZpbmUgUl9YODZfNjRfU0laRTY0CQkzMwkvKiBTaXplIG9mIHN5bWJvbCBwbHVzIDY0LWJpdCBhZGRlbmQgKi8KKysjZGVmaW5lIFJfWDg2XzY0X0dPVFBDMzJfVExTREVTQyAzNAkvKiBHT1Qgb2Zmc2V0IGZvciBUTFMgZGVzY3JpcHRvci4gICovCisrI2RlZmluZSBSX1g4Nl82NF9UTFNERVNDX0NBTEwgICAzNQkvKiBNYXJrZXIgZm9yIGNhbGwgdGhyb3VnaCBUTFMKKysJCQkJCSAgIGRlc2NyaXB0b3IuICAqLworKyNkZWZpbmUgUl9YODZfNjRfVExTREVTQyAgICAgICAgMzYJLyogVExTIGRlc2NyaXB0b3IuICAqLworKyNkZWZpbmUgUl9YODZfNjRfSVJFTEFUSVZFCTM3CS8qIEFkanVzdCBpbmRpcmVjdGx5IGJ5IHByb2dyYW0gYmFzZSAqLworKyNkZWZpbmUgUl9YODZfNjRfUkVMQVRJVkU2NAkzOAkvKiA2NC1iaXQgYWRqdXN0IGJ5IHByb2dyYW0gYmFzZSAqLworKworKyNkZWZpbmUgUl9YODZfNjRfTlVNCQkzOQorKworKworKy8qIEFNMzMgcmVsb2NhdGlvbnMuICAqLworKyNkZWZpbmUgUl9NTjEwMzAwX05PTkUJCTAJLyogTm8gcmVsb2MuICAqLworKyNkZWZpbmUgUl9NTjEwMzAwXzMyCQkxCS8qIERpcmVjdCAzMiBiaXQuICAqLworKyNkZWZpbmUgUl9NTjEwMzAwXzE2CQkyCS8qIERpcmVjdCAxNiBiaXQuICAqLworKyNkZWZpbmUgUl9NTjEwMzAwXzgJCTMJLyogRGlyZWN0IDggYml0LiAgKi8KKysjZGVmaW5lIFJfTU4xMDMwMF9QQ1JFTDMyCTQJLyogUEMtcmVsYXRpdmUgMzItYml0LiAgKi8KKysjZGVmaW5lIFJfTU4xMDMwMF9QQ1JFTDE2CTUJLyogUEMtcmVsYXRpdmUgMTYtYml0IHNpZ25lZC4gICovCisrI2RlZmluZSBSX01OMTAzMDBfUENSRUw4CTYJLyogUEMtcmVsYXRpdmUgOC1iaXQgc2lnbmVkLiAgKi8KKysjZGVmaW5lIFJfTU4xMDMwMF9HTlVfVlRJTkhFUklUCTcJLyogQW5jaWVudCBDKysgdnRhYmxlIGdhcmJhZ2UuLi4gKi8KKysjZGVmaW5lIFJfTU4xMDMwMF9HTlVfVlRFTlRSWQk4CS8qIC4uLiBjb2xsZWN0aW9uIGFubm90YXRpb24uICAqLworKyNkZWZpbmUgUl9NTjEwMzAwXzI0CQk5CS8qIERpcmVjdCAyNCBiaXQuICAqLworKyNkZWZpbmUgUl9NTjEwMzAwX0dPVFBDMzIJMTAJLyogMzItYml0IFBDcmVsIG9mZnNldCB0byBHT1QuICAqLworKyNkZWZpbmUgUl9NTjEwMzAwX0dPVFBDMTYJMTEJLyogMTYtYml0IFBDcmVsIG9mZnNldCB0byBHT1QuICAqLworKyNkZWZpbmUgUl9NTjEwMzAwX0dPVE9GRjMyCTEyCS8qIDMyLWJpdCBvZmZzZXQgZnJvbSBHT1QuICAqLworKyNkZWZpbmUgUl9NTjEwMzAwX0dPVE9GRjI0CTEzCS8qIDI0LWJpdCBvZmZzZXQgZnJvbSBHT1QuICAqLworKyNkZWZpbmUgUl9NTjEwMzAwX0dPVE9GRjE2CTE0CS8qIDE2LWJpdCBvZmZzZXQgZnJvbSBHT1QuICAqLworKyNkZWZpbmUgUl9NTjEwMzAwX1BMVDMyCQkxNQkvKiAzMi1iaXQgUENyZWwgdG8gUExUIGVudHJ5LiAgKi8KKysjZGVmaW5lIFJfTU4xMDMwMF9QTFQxNgkJMTYJLyogMTYtYml0IFBDcmVsIHRvIFBMVCBlbnRyeS4gICovCisrI2RlZmluZSBSX01OMTAzMDBfR09UMzIJCTE3CS8qIDMyLWJpdCBvZmZzZXQgdG8gR09UIGVudHJ5LiAgKi8KKysjZGVmaW5lIFJfTU4xMDMwMF9HT1QyNAkJMTgJLyogMjQtYml0IG9mZnNldCB0byBHT1QgZW50cnkuICAqLworKyNkZWZpbmUgUl9NTjEwMzAwX0dPVDE2CQkxOQkvKiAxNi1iaXQgb2Zmc2V0IHRvIEdPVCBlbnRyeS4gICovCisrI2RlZmluZSBSX01OMTAzMDBfQ09QWQkJMjAJLyogQ29weSBzeW1ib2wgYXQgcnVudGltZS4gICovCisrI2RlZmluZSBSX01OMTAzMDBfR0xPQl9EQVQJMjEJLyogQ3JlYXRlIEdPVCBlbnRyeS4gICovCisrI2RlZmluZSBSX01OMTAzMDBfSk1QX1NMT1QJMjIJLyogQ3JlYXRlIFBMVCBlbnRyeS4gICovCisrI2RlZmluZSBSX01OMTAzMDBfUkVMQVRJVkUJMjMJLyogQWRqdXN0IGJ5IHByb2dyYW0gYmFzZS4gICovCisrCisrI2RlZmluZSBSX01OMTAzMDBfTlVNCQkyNAorKworKworKy8qIE0zMlIgcmVsb2NzLiAgKi8KKysjZGVmaW5lIFJfTTMyUl9OT05FCQkwCS8qIE5vIHJlbG9jLiAqLworKyNkZWZpbmUgUl9NMzJSXzE2CQkxCS8qIERpcmVjdCAxNiBiaXQuICovCisrI2RlZmluZSBSX00zMlJfMzIJCTIJLyogRGlyZWN0IDMyIGJpdC4gKi8KKysjZGVmaW5lIFJfTTMyUl8yNAkJMwkvKiBEaXJlY3QgMjQgYml0LiAqLworKyNkZWZpbmUgUl9NMzJSXzEwX1BDUkVMCQk0CS8qIFBDIHJlbGF0aXZlIDEwIGJpdCBzaGlmdGVkLiAqLworKyNkZWZpbmUgUl9NMzJSXzE4X1BDUkVMCQk1CS8qIFBDIHJlbGF0aXZlIDE4IGJpdCBzaGlmdGVkLiAqLworKyNkZWZpbmUgUl9NMzJSXzI2X1BDUkVMCQk2CS8qIFBDIHJlbGF0aXZlIDI2IGJpdCBzaGlmdGVkLiAqLworKyNkZWZpbmUgUl9NMzJSX0hJMTZfVUxPCQk3CS8qIEhpZ2ggMTYgYml0IHdpdGggdW5zaWduZWQgbG93LiAqLworKyNkZWZpbmUgUl9NMzJSX0hJMTZfU0xPCQk4CS8qIEhpZ2ggMTYgYml0IHdpdGggc2lnbmVkIGxvdy4gKi8KKysjZGVmaW5lIFJfTTMyUl9MTzE2CQk5CS8qIExvdyAxNiBiaXQuICovCisrI2RlZmluZSBSX00zMlJfU0RBMTYJCTEwCS8qIDE2IGJpdCBvZmZzZXQgaW4gU0RBLiAqLworKyNkZWZpbmUgUl9NMzJSX0dOVV9WVElOSEVSSVQJMTEKKysjZGVmaW5lIFJfTTMyUl9HTlVfVlRFTlRSWQkxMgorKy8qIE0zMlIgcmVsb2NzIHVzZSBTSFRfUkVMQS4gICovCisrI2RlZmluZSBSX00zMlJfMTZfUkVMQQkJMzMJLyogRGlyZWN0IDE2IGJpdC4gKi8KKysjZGVmaW5lIFJfTTMyUl8zMl9SRUxBCQkzNAkvKiBEaXJlY3QgMzIgYml0LiAqLworKyNkZWZpbmUgUl9NMzJSXzI0X1JFTEEJCTM1CS8qIERpcmVjdCAyNCBiaXQuICovCisrI2RlZmluZSBSX00zMlJfMTBfUENSRUxfUkVMQQkzNgkvKiBQQyByZWxhdGl2ZSAxMCBiaXQgc2hpZnRlZC4gKi8KKysjZGVmaW5lIFJfTTMyUl8xOF9QQ1JFTF9SRUxBCTM3CS8qIFBDIHJlbGF0aXZlIDE4IGJpdCBzaGlmdGVkLiAqLworKyNkZWZpbmUgUl9NMzJSXzI2X1BDUkVMX1JFTEEJMzgJLyogUEMgcmVsYXRpdmUgMjYgYml0IHNoaWZ0ZWQuICovCisrI2RlZmluZSBSX00zMlJfSEkxNl9VTE9fUkVMQQkzOQkvKiBIaWdoIDE2IGJpdCB3aXRoIHVuc2lnbmVkIGxvdyAqLworKyNkZWZpbmUgUl9NMzJSX0hJMTZfU0xPX1JFTEEJNDAJLyogSGlnaCAxNiBiaXQgd2l0aCBzaWduZWQgbG93ICovCisrI2RlZmluZSBSX00zMlJfTE8xNl9SRUxBCTQxCS8qIExvdyAxNiBiaXQgKi8KKysjZGVmaW5lIFJfTTMyUl9TREExNl9SRUxBCTQyCS8qIDE2IGJpdCBvZmZzZXQgaW4gU0RBICovCisrI2RlZmluZSBSX00zMlJfUkVMQV9HTlVfVlRJTkhFUklUCTQzCisrI2RlZmluZSBSX00zMlJfUkVMQV9HTlVfVlRFTlRSWQk0NAorKyNkZWZpbmUgUl9NMzJSX1JFTDMyCQk0NQkvKiBQQyByZWxhdGl2ZSAzMiBiaXQuICAqLworKworKyNkZWZpbmUgUl9NMzJSX0dPVDI0CQk0OAkvKiAyNCBiaXQgR09UIGVudHJ5ICovCisrI2RlZmluZSBSX00zMlJfMjZfUExUUkVMCTQ5CS8qIDI2IGJpdCBQQyByZWxhdGl2ZSB0byBQTFQgc2hpZnRlZCAqLworKyNkZWZpbmUgUl9NMzJSX0NPUFkJCTUwCS8qIENvcHkgc3ltYm9sIGF0IHJ1bnRpbWUgKi8KKysjZGVmaW5lIFJfTTMyUl9HTE9CX0RBVAkJNTEJLyogQ3JlYXRlIEdPVCBlbnRyeSAqLworKyNkZWZpbmUgUl9NMzJSX0pNUF9TTE9UCQk1MgkvKiBDcmVhdGUgUExUIGVudHJ5ICovCisrI2RlZmluZSBSX00zMlJfUkVMQVRJVkUJCTUzCS8qIEFkanVzdCBieSBwcm9ncmFtIGJhc2UgKi8KKysjZGVmaW5lIFJfTTMyUl9HT1RPRkYJCTU0CS8qIDI0IGJpdCBvZmZzZXQgdG8gR09UICovCisrI2RlZmluZSBSX00zMlJfR09UUEMyNAkJNTUJLyogMjQgYml0IFBDIHJlbGF0aXZlIG9mZnNldCB0byBHT1QgKi8KKysjZGVmaW5lIFJfTTMyUl9HT1QxNl9ISV9VTE8JNTYJLyogSGlnaCAxNiBiaXQgR09UIGVudHJ5IHdpdGggdW5zaWduZWQKKysJCQkJCSAgIGxvdyAqLworKyNkZWZpbmUgUl9NMzJSX0dPVDE2X0hJX1NMTwk1NwkvKiBIaWdoIDE2IGJpdCBHT1QgZW50cnkgd2l0aCBzaWduZWQKKysJCQkJCSAgIGxvdyAqLworKyNkZWZpbmUgUl9NMzJSX0dPVDE2X0xPCQk1OAkvKiBMb3cgMTYgYml0IEdPVCBlbnRyeSAqLworKyNkZWZpbmUgUl9NMzJSX0dPVFBDX0hJX1VMTwk1OQkvKiBIaWdoIDE2IGJpdCBQQyByZWxhdGl2ZSBvZmZzZXQgdG8KKysJCQkJCSAgIEdPVCB3aXRoIHVuc2lnbmVkIGxvdyAqLworKyNkZWZpbmUgUl9NMzJSX0dPVFBDX0hJX1NMTwk2MAkvKiBIaWdoIDE2IGJpdCBQQyByZWxhdGl2ZSBvZmZzZXQgdG8KKysJCQkJCSAgIEdPVCB3aXRoIHNpZ25lZCBsb3cgKi8KKysjZGVmaW5lIFJfTTMyUl9HT1RQQ19MTwkJNjEJLyogTG93IDE2IGJpdCBQQyByZWxhdGl2ZSBvZmZzZXQgdG8KKysJCQkJCSAgIEdPVCAqLworKyNkZWZpbmUgUl9NMzJSX0dPVE9GRl9ISV9VTE8JNjIJLyogSGlnaCAxNiBiaXQgb2Zmc2V0IHRvIEdPVAorKwkJCQkJICAgd2l0aCB1bnNpZ25lZCBsb3cgKi8KKysjZGVmaW5lIFJfTTMyUl9HT1RPRkZfSElfU0xPCTYzCS8qIEhpZ2ggMTYgYml0IG9mZnNldCB0byBHT1QKKysJCQkJCSAgIHdpdGggc2lnbmVkIGxvdyAqLworKyNkZWZpbmUgUl9NMzJSX0dPVE9GRl9MTwk2NAkvKiBMb3cgMTYgYml0IG9mZnNldCB0byBHT1QgKi8KKysjZGVmaW5lIFJfTTMyUl9OVU0JCTI1NgkvKiBLZWVwIHRoaXMgdGhlIGxhc3QgZW50cnkuICovCisrCisrCisrLyogVElMRVBybyByZWxvY2F0aW9ucy4gICovCisrI2RlZmluZSBSX1RJTEVQUk9fTk9ORQkJMAkvKiBObyByZWxvYyAqLworKyNkZWZpbmUgUl9USUxFUFJPXzMyCQkxCS8qIERpcmVjdCAzMiBiaXQgKi8KKysjZGVmaW5lIFJfVElMRVBST18xNgkJMgkvKiBEaXJlY3QgMTYgYml0ICovCisrI2RlZmluZSBSX1RJTEVQUk9fOAkJMwkvKiBEaXJlY3QgOCBiaXQgKi8KKysjZGVmaW5lIFJfVElMRVBST18zMl9QQ1JFTAk0CS8qIFBDIHJlbGF0aXZlIDMyIGJpdCAqLworKyNkZWZpbmUgUl9USUxFUFJPXzE2X1BDUkVMCTUJLyogUEMgcmVsYXRpdmUgMTYgYml0ICovCisrI2RlZmluZSBSX1RJTEVQUk9fOF9QQ1JFTAk2CS8qIFBDIHJlbGF0aXZlIDggYml0ICovCisrI2RlZmluZSBSX1RJTEVQUk9fTE8xNgkJNwkvKiBMb3cgMTYgYml0ICovCisrI2RlZmluZSBSX1RJTEVQUk9fSEkxNgkJOAkvKiBIaWdoIDE2IGJpdCAqLworKyNkZWZpbmUgUl9USUxFUFJPX0hBMTYJCTkJLyogSGlnaCAxNiBiaXQsIGFkanVzdGVkICovCisrI2RlZmluZSBSX1RJTEVQUk9fQ09QWQkJMTAJLyogQ29weSByZWxvY2F0aW9uICovCisrI2RlZmluZSBSX1RJTEVQUk9fR0xPQl9EQVQJMTEJLyogQ3JlYXRlIEdPVCBlbnRyeSAqLworKyNkZWZpbmUgUl9USUxFUFJPX0pNUF9TTE9UCTEyCS8qIENyZWF0ZSBQTFQgZW50cnkgKi8KKysjZGVmaW5lIFJfVElMRVBST19SRUxBVElWRQkxMwkvKiBBZGp1c3QgYnkgcHJvZ3JhbSBiYXNlICovCisrI2RlZmluZSBSX1RJTEVQUk9fQlJPRkZfWDEJMTQJLyogWDEgcGlwZSBicmFuY2ggb2Zmc2V0ICovCisrI2RlZmluZSBSX1RJTEVQUk9fSk9GRkxPTkdfWDEJMTUJLyogWDEgcGlwZSBqdW1wIG9mZnNldCAqLworKyNkZWZpbmUgUl9USUxFUFJPX0pPRkZMT05HX1gxX1BMVCAxNgkvKiBYMSBwaXBlIGp1bXAgb2Zmc2V0IHRvIFBMVCAqLworKyNkZWZpbmUgUl9USUxFUFJPX0lNTThfWDAJMTcJLyogWDAgcGlwZSA4LWJpdCAqLworKyNkZWZpbmUgUl9USUxFUFJPX0lNTThfWTAJMTgJLyogWTAgcGlwZSA4LWJpdCAqLworKyNkZWZpbmUgUl9USUxFUFJPX0lNTThfWDEJMTkJLyogWDEgcGlwZSA4LWJpdCAqLworKyNkZWZpbmUgUl9USUxFUFJPX0lNTThfWTEJMjAJLyogWTEgcGlwZSA4LWJpdCAqLworKyNkZWZpbmUgUl9USUxFUFJPX01UX0lNTTE1X1gxCTIxCS8qIFgxIHBpcGUgbXRzcHIgKi8KKysjZGVmaW5lIFJfVElMRVBST19NRl9JTU0xNV9YMQkyMgkvKiBYMSBwaXBlIG1mc3ByICovCisrI2RlZmluZSBSX1RJTEVQUk9fSU1NMTZfWDAJMjMJLyogWDAgcGlwZSAxNi1iaXQgKi8KKysjZGVmaW5lIFJfVElMRVBST19JTU0xNl9YMQkyNAkvKiBYMSBwaXBlIDE2LWJpdCAqLworKyNkZWZpbmUgUl9USUxFUFJPX0lNTTE2X1gwX0xPCTI1CS8qIFgwIHBpcGUgbG93IDE2LWJpdCAqLworKyNkZWZpbmUgUl9USUxFUFJPX0lNTTE2X1gxX0xPCTI2CS8qIFgxIHBpcGUgbG93IDE2LWJpdCAqLworKyNkZWZpbmUgUl9USUxFUFJPX0lNTTE2X1gwX0hJCTI3CS8qIFgwIHBpcGUgaGlnaCAxNi1iaXQgKi8KKysjZGVmaW5lIFJfVElMRVBST19JTU0xNl9YMV9ISQkyOAkvKiBYMSBwaXBlIGhpZ2ggMTYtYml0ICovCisrI2RlZmluZSBSX1RJTEVQUk9fSU1NMTZfWDBfSEEJMjkJLyogWDAgcGlwZSBoaWdoIDE2LWJpdCwgYWRqdXN0ZWQgKi8KKysjZGVmaW5lIFJfVElMRVBST19JTU0xNl9YMV9IQQkzMAkvKiBYMSBwaXBlIGhpZ2ggMTYtYml0LCBhZGp1c3RlZCAqLworKyNkZWZpbmUgUl9USUxFUFJPX0lNTTE2X1gwX1BDUkVMIDMxCS8qIFgwIHBpcGUgUEMgcmVsYXRpdmUgMTYgYml0ICovCisrI2RlZmluZSBSX1RJTEVQUk9fSU1NMTZfWDFfUENSRUwgMzIJLyogWDEgcGlwZSBQQyByZWxhdGl2ZSAxNiBiaXQgKi8KKysjZGVmaW5lIFJfVElMRVBST19JTU0xNl9YMF9MT19QQ1JFTCAzMwkvKiBYMCBwaXBlIFBDIHJlbGF0aXZlIGxvdyAxNiBiaXQgKi8KKysjZGVmaW5lIFJfVElMRVBST19JTU0xNl9YMV9MT19QQ1JFTCAzNAkvKiBYMSBwaXBlIFBDIHJlbGF0aXZlIGxvdyAxNiBiaXQgKi8KKysjZGVmaW5lIFJfVElMRVBST19JTU0xNl9YMF9ISV9QQ1JFTCAzNQkvKiBYMCBwaXBlIFBDIHJlbGF0aXZlIGhpZ2ggMTYgYml0ICovCisrI2RlZmluZSBSX1RJTEVQUk9fSU1NMTZfWDFfSElfUENSRUwgMzYJLyogWDEgcGlwZSBQQyByZWxhdGl2ZSBoaWdoIDE2IGJpdCAqLworKyNkZWZpbmUgUl9USUxFUFJPX0lNTTE2X1gwX0hBX1BDUkVMIDM3CS8qIFgwIHBpcGUgUEMgcmVsYXRpdmUgaGEoKSAxNiBiaXQgKi8KKysjZGVmaW5lIFJfVElMRVBST19JTU0xNl9YMV9IQV9QQ1JFTCAzOAkvKiBYMSBwaXBlIFBDIHJlbGF0aXZlIGhhKCkgMTYgYml0ICovCisrI2RlZmluZSBSX1RJTEVQUk9fSU1NMTZfWDBfR09UCTM5CS8qIFgwIHBpcGUgMTYtYml0IEdPVCBvZmZzZXQgKi8KKysjZGVmaW5lIFJfVElMRVBST19JTU0xNl9YMV9HT1QJNDAJLyogWDEgcGlwZSAxNi1iaXQgR09UIG9mZnNldCAqLworKyNkZWZpbmUgUl9USUxFUFJPX0lNTTE2X1gwX0dPVF9MTyA0MQkvKiBYMCBwaXBlIGxvdyAxNi1iaXQgR09UIG9mZnNldCAqLworKyNkZWZpbmUgUl9USUxFUFJPX0lNTTE2X1gxX0dPVF9MTyA0MgkvKiBYMSBwaXBlIGxvdyAxNi1iaXQgR09UIG9mZnNldCAqLworKyNkZWZpbmUgUl9USUxFUFJPX0lNTTE2X1gwX0dPVF9ISSA0MwkvKiBYMCBwaXBlIGhpZ2ggMTYtYml0IEdPVCBvZmZzZXQgKi8KKysjZGVmaW5lIFJfVElMRVBST19JTU0xNl9YMV9HT1RfSEkgNDQJLyogWDEgcGlwZSBoaWdoIDE2LWJpdCBHT1Qgb2Zmc2V0ICovCisrI2RlZmluZSBSX1RJTEVQUk9fSU1NMTZfWDBfR09UX0hBIDQ1CS8qIFgwIHBpcGUgaGEoKSAxNi1iaXQgR09UIG9mZnNldCAqLworKyNkZWZpbmUgUl9USUxFUFJPX0lNTTE2X1gxX0dPVF9IQSA0NgkvKiBYMSBwaXBlIGhhKCkgMTYtYml0IEdPVCBvZmZzZXQgKi8KKysjZGVmaW5lIFJfVElMRVBST19NTVNUQVJUX1gwCTQ3CS8qIFgwIHBpcGUgbW0gInN0YXJ0IiAqLworKyNkZWZpbmUgUl9USUxFUFJPX01NRU5EX1gwCTQ4CS8qIFgwIHBpcGUgbW0gImVuZCIgKi8KKysjZGVmaW5lIFJfVElMRVBST19NTVNUQVJUX1gxCTQ5CS8qIFgxIHBpcGUgbW0gInN0YXJ0IiAqLworKyNkZWZpbmUgUl9USUxFUFJPX01NRU5EX1gxCTUwCS8qIFgxIHBpcGUgbW0gImVuZCIgKi8KKysjZGVmaW5lIFJfVElMRVBST19TSEFNVF9YMAk1MQkvKiBYMCBwaXBlIHNoaWZ0IGFtb3VudCAqLworKyNkZWZpbmUgUl9USUxFUFJPX1NIQU1UX1gxCTUyCS8qIFgxIHBpcGUgc2hpZnQgYW1vdW50ICovCisrI2RlZmluZSBSX1RJTEVQUk9fU0hBTVRfWTAJNTMJLyogWTAgcGlwZSBzaGlmdCBhbW91bnQgKi8KKysjZGVmaW5lIFJfVElMRVBST19TSEFNVF9ZMQk1NAkvKiBZMSBwaXBlIHNoaWZ0IGFtb3VudCAqLworKyNkZWZpbmUgUl9USUxFUFJPX0RFU1RfSU1NOF9YMQk1NQkvKiBYMSBwaXBlIGRlc3RpbmF0aW9uIDgtYml0ICovCisrLyogUmVsb2NzIDU2LTU5IGFyZSBjdXJyZW50bHkgbm90IGRlZmluZWQuICAqLworKyNkZWZpbmUgUl9USUxFUFJPX1RMU19HRF9DQUxMCTYwCS8qICJqYWwiIGZvciBUTFMgR0QgKi8KKysjZGVmaW5lIFJfVElMRVBST19JTU04X1gwX1RMU19HRF9BREQgNjEJLyogWDAgcGlwZSAiYWRkaSIgZm9yIFRMUyBHRCAqLworKyNkZWZpbmUgUl9USUxFUFJPX0lNTThfWDFfVExTX0dEX0FERCA2MgkvKiBYMSBwaXBlICJhZGRpIiBmb3IgVExTIEdEICovCisrI2RlZmluZSBSX1RJTEVQUk9fSU1NOF9ZMF9UTFNfR0RfQUREIDYzCS8qIFkwIHBpcGUgImFkZGkiIGZvciBUTFMgR0QgKi8KKysjZGVmaW5lIFJfVElMRVBST19JTU04X1kxX1RMU19HRF9BREQgNjQJLyogWTEgcGlwZSAiYWRkaSIgZm9yIFRMUyBHRCAqLworKyNkZWZpbmUgUl9USUxFUFJPX1RMU19JRV9MT0FECTY1CS8qICJsd190bHMiIGZvciBUTFMgSUUgKi8KKysjZGVmaW5lIFJfVElMRVBST19JTU0xNl9YMF9UTFNfR0QgNjYJLyogWDAgcGlwZSAxNi1iaXQgVExTIEdEIG9mZnNldCAqLworKyNkZWZpbmUgUl9USUxFUFJPX0lNTTE2X1gxX1RMU19HRCA2NwkvKiBYMSBwaXBlIDE2LWJpdCBUTFMgR0Qgb2Zmc2V0ICovCisrI2RlZmluZSBSX1RJTEVQUk9fSU1NMTZfWDBfVExTX0dEX0xPIDY4CS8qIFgwIHBpcGUgbG93IDE2LWJpdCBUTFMgR0Qgb2Zmc2V0ICovCisrI2RlZmluZSBSX1RJTEVQUk9fSU1NMTZfWDFfVExTX0dEX0xPIDY5CS8qIFgxIHBpcGUgbG93IDE2LWJpdCBUTFMgR0Qgb2Zmc2V0ICovCisrI2RlZmluZSBSX1RJTEVQUk9fSU1NMTZfWDBfVExTX0dEX0hJIDcwCS8qIFgwIHBpcGUgaGlnaCAxNi1iaXQgVExTIEdEIG9mZnNldCAqLworKyNkZWZpbmUgUl9USUxFUFJPX0lNTTE2X1gxX1RMU19HRF9ISSA3MQkvKiBYMSBwaXBlIGhpZ2ggMTYtYml0IFRMUyBHRCBvZmZzZXQgKi8KKysjZGVmaW5lIFJfVElMRVBST19JTU0xNl9YMF9UTFNfR0RfSEEgNzIJLyogWDAgcGlwZSBoYSgpIDE2LWJpdCBUTFMgR0Qgb2Zmc2V0ICovCisrI2RlZmluZSBSX1RJTEVQUk9fSU1NMTZfWDFfVExTX0dEX0hBIDczCS8qIFgxIHBpcGUgaGEoKSAxNi1iaXQgVExTIEdEIG9mZnNldCAqLworKyNkZWZpbmUgUl9USUxFUFJPX0lNTTE2X1gwX1RMU19JRSA3NAkvKiBYMCBwaXBlIDE2LWJpdCBUTFMgSUUgb2Zmc2V0ICovCisrI2RlZmluZSBSX1RJTEVQUk9fSU1NMTZfWDFfVExTX0lFIDc1CS8qIFgxIHBpcGUgMTYtYml0IFRMUyBJRSBvZmZzZXQgKi8KKysjZGVmaW5lIFJfVElMRVBST19JTU0xNl9YMF9UTFNfSUVfTE8gNzYJLyogWDAgcGlwZSBsb3cgMTYtYml0IFRMUyBJRSBvZmZzZXQgKi8KKysjZGVmaW5lIFJfVElMRVBST19JTU0xNl9YMV9UTFNfSUVfTE8gNzcJLyogWDEgcGlwZSBsb3cgMTYtYml0IFRMUyBJRSBvZmZzZXQgKi8KKysjZGVmaW5lIFJfVElMRVBST19JTU0xNl9YMF9UTFNfSUVfSEkgNzgJLyogWDAgcGlwZSBoaWdoIDE2LWJpdCBUTFMgSUUgb2Zmc2V0ICovCisrI2RlZmluZSBSX1RJTEVQUk9fSU1NMTZfWDFfVExTX0lFX0hJIDc5CS8qIFgxIHBpcGUgaGlnaCAxNi1iaXQgVExTIElFIG9mZnNldCAqLworKyNkZWZpbmUgUl9USUxFUFJPX0lNTTE2X1gwX1RMU19JRV9IQSA4MAkvKiBYMCBwaXBlIGhhKCkgMTYtYml0IFRMUyBJRSBvZmZzZXQgKi8KKysjZGVmaW5lIFJfVElMRVBST19JTU0xNl9YMV9UTFNfSUVfSEEgODEJLyogWDEgcGlwZSBoYSgpIDE2LWJpdCBUTFMgSUUgb2Zmc2V0ICovCisrI2RlZmluZSBSX1RJTEVQUk9fVExTX0RUUE1PRDMyCTgyCS8qIElEIG9mIG1vZHVsZSBjb250YWluaW5nIHN5bWJvbCAqLworKyNkZWZpbmUgUl9USUxFUFJPX1RMU19EVFBPRkYzMgk4MwkvKiBPZmZzZXQgaW4gVExTIGJsb2NrICovCisrI2RlZmluZSBSX1RJTEVQUk9fVExTX1RQT0ZGMzIJODQJLyogT2Zmc2V0IGluIHN0YXRpYyBUTFMgYmxvY2sgKi8KKysjZGVmaW5lIFJfVElMRVBST19JTU0xNl9YMF9UTFNfTEUgODUJLyogWDAgcGlwZSAxNi1iaXQgVExTIExFIG9mZnNldCAqLworKyNkZWZpbmUgUl9USUxFUFJPX0lNTTE2X1gxX1RMU19MRSA4NgkvKiBYMSBwaXBlIDE2LWJpdCBUTFMgTEUgb2Zmc2V0ICovCisrI2RlZmluZSBSX1RJTEVQUk9fSU1NMTZfWDBfVExTX0xFX0xPIDg3CS8qIFgwIHBpcGUgbG93IDE2LWJpdCBUTFMgTEUgb2Zmc2V0ICovCisrI2RlZmluZSBSX1RJTEVQUk9fSU1NMTZfWDFfVExTX0xFX0xPIDg4CS8qIFgxIHBpcGUgbG93IDE2LWJpdCBUTFMgTEUgb2Zmc2V0ICovCisrI2RlZmluZSBSX1RJTEVQUk9fSU1NMTZfWDBfVExTX0xFX0hJIDg5CS8qIFgwIHBpcGUgaGlnaCAxNi1iaXQgVExTIExFIG9mZnNldCAqLworKyNkZWZpbmUgUl9USUxFUFJPX0lNTTE2X1gxX1RMU19MRV9ISSA5MAkvKiBYMSBwaXBlIGhpZ2ggMTYtYml0IFRMUyBMRSBvZmZzZXQgKi8KKysjZGVmaW5lIFJfVElMRVBST19JTU0xNl9YMF9UTFNfTEVfSEEgOTEJLyogWDAgcGlwZSBoYSgpIDE2LWJpdCBUTFMgTEUgb2Zmc2V0ICovCisrI2RlZmluZSBSX1RJTEVQUk9fSU1NMTZfWDFfVExTX0xFX0hBIDkyCS8qIFgxIHBpcGUgaGEoKSAxNi1iaXQgVExTIExFIG9mZnNldCAqLworKworKyNkZWZpbmUgUl9USUxFUFJPX0dOVV9WVElOSEVSSVQJMTI4CS8qIEdOVSBDKysgdnRhYmxlIGhpZXJhcmNoeSAqLworKyNkZWZpbmUgUl9USUxFUFJPX0dOVV9WVEVOVFJZCTEyOQkvKiBHTlUgQysrIHZ0YWJsZSBtZW1iZXIgdXNhZ2UgKi8KKysKKysjZGVmaW5lIFJfVElMRVBST19OVU0JCTEzMAorKworKworKy8qIFRJTEUtR3ggcmVsb2NhdGlvbnMuICAqLworKyNkZWZpbmUgUl9USUxFR1hfTk9ORQkJMAkvKiBObyByZWxvYyAqLworKyNkZWZpbmUgUl9USUxFR1hfNjQJCTEJLyogRGlyZWN0IDY0IGJpdCAqLworKyNkZWZpbmUgUl9USUxFR1hfMzIJCTIJLyogRGlyZWN0IDMyIGJpdCAqLworKyNkZWZpbmUgUl9USUxFR1hfMTYJCTMJLyogRGlyZWN0IDE2IGJpdCAqLworKyNkZWZpbmUgUl9USUxFR1hfOAkJNAkvKiBEaXJlY3QgOCBiaXQgKi8KKysjZGVmaW5lIFJfVElMRUdYXzY0X1BDUkVMCTUJLyogUEMgcmVsYXRpdmUgNjQgYml0ICovCisrI2RlZmluZSBSX1RJTEVHWF8zMl9QQ1JFTAk2CS8qIFBDIHJlbGF0aXZlIDMyIGJpdCAqLworKyNkZWZpbmUgUl9USUxFR1hfMTZfUENSRUwJNwkvKiBQQyByZWxhdGl2ZSAxNiBiaXQgKi8KKysjZGVmaW5lIFJfVElMRUdYXzhfUENSRUwJOAkvKiBQQyByZWxhdGl2ZSA4IGJpdCAqLworKyNkZWZpbmUgUl9USUxFR1hfSFcwCQk5CS8qIGh3b3JkIDAgMTYtYml0ICovCisrI2RlZmluZSBSX1RJTEVHWF9IVzEJCTEwCS8qIGh3b3JkIDEgMTYtYml0ICovCisrI2RlZmluZSBSX1RJTEVHWF9IVzIJCTExCS8qIGh3b3JkIDIgMTYtYml0ICovCisrI2RlZmluZSBSX1RJTEVHWF9IVzMJCTEyCS8qIGh3b3JkIDMgMTYtYml0ICovCisrI2RlZmluZSBSX1RJTEVHWF9IVzBfTEFTVAkxMwkvKiBsYXN0IGh3b3JkIDAgMTYtYml0ICovCisrI2RlZmluZSBSX1RJTEVHWF9IVzFfTEFTVAkxNAkvKiBsYXN0IGh3b3JkIDEgMTYtYml0ICovCisrI2RlZmluZSBSX1RJTEVHWF9IVzJfTEFTVAkxNQkvKiBsYXN0IGh3b3JkIDIgMTYtYml0ICovCisrI2RlZmluZSBSX1RJTEVHWF9DT1BZCQkxNgkvKiBDb3B5IHJlbG9jYXRpb24gKi8KKysjZGVmaW5lIFJfVElMRUdYX0dMT0JfREFUCTE3CS8qIENyZWF0ZSBHT1QgZW50cnkgKi8KKysjZGVmaW5lIFJfVElMRUdYX0pNUF9TTE9UCTE4CS8qIENyZWF0ZSBQTFQgZW50cnkgKi8KKysjZGVmaW5lIFJfVElMRUdYX1JFTEFUSVZFCTE5CS8qIEFkanVzdCBieSBwcm9ncmFtIGJhc2UgKi8KKysjZGVmaW5lIFJfVElMRUdYX0JST0ZGX1gxCTIwCS8qIFgxIHBpcGUgYnJhbmNoIG9mZnNldCAqLworKyNkZWZpbmUgUl9USUxFR1hfSlVNUE9GRl9YMQkyMQkvKiBYMSBwaXBlIGp1bXAgb2Zmc2V0ICovCisrI2RlZmluZSBSX1RJTEVHWF9KVU1QT0ZGX1gxX1BMVAkyMgkvKiBYMSBwaXBlIGp1bXAgb2Zmc2V0IHRvIFBMVCAqLworKyNkZWZpbmUgUl9USUxFR1hfSU1NOF9YMAkyMwkvKiBYMCBwaXBlIDgtYml0ICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU04X1kwCTI0CS8qIFkwIHBpcGUgOC1iaXQgKi8KKysjZGVmaW5lIFJfVElMRUdYX0lNTThfWDEJMjUJLyogWDEgcGlwZSA4LWJpdCAqLworKyNkZWZpbmUgUl9USUxFR1hfSU1NOF9ZMQkyNgkvKiBZMSBwaXBlIDgtYml0ICovCisrI2RlZmluZSBSX1RJTEVHWF9ERVNUX0lNTThfWDEJMjcJLyogWDEgcGlwZSBkZXN0aW5hdGlvbiA4LWJpdCAqLworKyNkZWZpbmUgUl9USUxFR1hfTVRfSU1NMTRfWDEJMjgJLyogWDEgcGlwZSBtdHNwciAqLworKyNkZWZpbmUgUl9USUxFR1hfTUZfSU1NMTRfWDEJMjkJLyogWDEgcGlwZSBtZnNwciAqLworKyNkZWZpbmUgUl9USUxFR1hfTU1TVEFSVF9YMAkzMAkvKiBYMCBwaXBlIG1tICJzdGFydCIgKi8KKysjZGVmaW5lIFJfVElMRUdYX01NRU5EX1gwCTMxCS8qIFgwIHBpcGUgbW0gImVuZCIgKi8KKysjZGVmaW5lIFJfVElMRUdYX1NIQU1UX1gwCTMyCS8qIFgwIHBpcGUgc2hpZnQgYW1vdW50ICovCisrI2RlZmluZSBSX1RJTEVHWF9TSEFNVF9YMQkzMwkvKiBYMSBwaXBlIHNoaWZ0IGFtb3VudCAqLworKyNkZWZpbmUgUl9USUxFR1hfU0hBTVRfWTAJMzQJLyogWTAgcGlwZSBzaGlmdCBhbW91bnQgKi8KKysjZGVmaW5lIFJfVElMRUdYX1NIQU1UX1kxCTM1CS8qIFkxIHBpcGUgc2hpZnQgYW1vdW50ICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMF9IVzAJMzYJLyogWDAgcGlwZSBod29yZCAwICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMV9IVzAJMzcJLyogWDEgcGlwZSBod29yZCAwICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMF9IVzEJMzgJLyogWDAgcGlwZSBod29yZCAxICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMV9IVzEJMzkJLyogWDEgcGlwZSBod29yZCAxICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMF9IVzIJNDAJLyogWDAgcGlwZSBod29yZCAyICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMV9IVzIJNDEJLyogWDEgcGlwZSBod29yZCAyICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMF9IVzMJNDIJLyogWDAgcGlwZSBod29yZCAzICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMV9IVzMJNDMJLyogWDEgcGlwZSBod29yZCAzICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMF9IVzBfTEFTVCA0NAkvKiBYMCBwaXBlIGxhc3QgaHdvcmQgMCAqLworKyNkZWZpbmUgUl9USUxFR1hfSU1NMTZfWDFfSFcwX0xBU1QgNDUJLyogWDEgcGlwZSBsYXN0IGh3b3JkIDAgKi8KKysjZGVmaW5lIFJfVElMRUdYX0lNTTE2X1gwX0hXMV9MQVNUIDQ2CS8qIFgwIHBpcGUgbGFzdCBod29yZCAxICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMV9IVzFfTEFTVCA0NwkvKiBYMSBwaXBlIGxhc3QgaHdvcmQgMSAqLworKyNkZWZpbmUgUl9USUxFR1hfSU1NMTZfWDBfSFcyX0xBU1QgNDgJLyogWDAgcGlwZSBsYXN0IGh3b3JkIDIgKi8KKysjZGVmaW5lIFJfVElMRUdYX0lNTTE2X1gxX0hXMl9MQVNUIDQ5CS8qIFgxIHBpcGUgbGFzdCBod29yZCAyICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMF9IVzBfUENSRUwgNTAJLyogWDAgcGlwZSBQQyByZWxhdGl2ZSBod29yZCAwICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMV9IVzBfUENSRUwgNTEJLyogWDEgcGlwZSBQQyByZWxhdGl2ZSBod29yZCAwICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMF9IVzFfUENSRUwgNTIJLyogWDAgcGlwZSBQQyByZWxhdGl2ZSBod29yZCAxICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMV9IVzFfUENSRUwgNTMJLyogWDEgcGlwZSBQQyByZWxhdGl2ZSBod29yZCAxICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMF9IVzJfUENSRUwgNTQJLyogWDAgcGlwZSBQQyByZWxhdGl2ZSBod29yZCAyICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMV9IVzJfUENSRUwgNTUJLyogWDEgcGlwZSBQQyByZWxhdGl2ZSBod29yZCAyICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMF9IVzNfUENSRUwgNTYJLyogWDAgcGlwZSBQQyByZWxhdGl2ZSBod29yZCAzICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMV9IVzNfUENSRUwgNTcJLyogWDEgcGlwZSBQQyByZWxhdGl2ZSBod29yZCAzICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMF9IVzBfTEFTVF9QQ1JFTCA1OCAvKiBYMCBwaXBlIFBDLXJlbCBsYXN0IGh3b3JkIDAgKi8KKysjZGVmaW5lIFJfVElMRUdYX0lNTTE2X1gxX0hXMF9MQVNUX1BDUkVMIDU5IC8qIFgxIHBpcGUgUEMtcmVsIGxhc3QgaHdvcmQgMCAqLworKyNkZWZpbmUgUl9USUxFR1hfSU1NMTZfWDBfSFcxX0xBU1RfUENSRUwgNjAgLyogWDAgcGlwZSBQQy1yZWwgbGFzdCBod29yZCAxICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMV9IVzFfTEFTVF9QQ1JFTCA2MSAvKiBYMSBwaXBlIFBDLXJlbCBsYXN0IGh3b3JkIDEgKi8KKysjZGVmaW5lIFJfVElMRUdYX0lNTTE2X1gwX0hXMl9MQVNUX1BDUkVMIDYyIC8qIFgwIHBpcGUgUEMtcmVsIGxhc3QgaHdvcmQgMiAqLworKyNkZWZpbmUgUl9USUxFR1hfSU1NMTZfWDFfSFcyX0xBU1RfUENSRUwgNjMgLyogWDEgcGlwZSBQQy1yZWwgbGFzdCBod29yZCAyICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMF9IVzBfR09UIDY0CS8qIFgwIHBpcGUgaHdvcmQgMCBHT1Qgb2Zmc2V0ICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMV9IVzBfR09UIDY1CS8qIFgxIHBpcGUgaHdvcmQgMCBHT1Qgb2Zmc2V0ICovCisrLyogUmVsb2NzIDY2LTcxIGFyZSBjdXJyZW50bHkgbm90IGRlZmluZWQuICAqLworKyNkZWZpbmUgUl9USUxFR1hfSU1NMTZfWDBfSFcwX0xBU1RfR09UIDcyIC8qIFgwIHBpcGUgbGFzdCBod29yZCAwIEdPVCBvZmZzZXQgKi8KKysjZGVmaW5lIFJfVElMRUdYX0lNTTE2X1gxX0hXMF9MQVNUX0dPVCA3MyAvKiBYMSBwaXBlIGxhc3QgaHdvcmQgMCBHT1Qgb2Zmc2V0ICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMF9IVzFfTEFTVF9HT1QgNzQgLyogWDAgcGlwZSBsYXN0IGh3b3JkIDEgR09UIG9mZnNldCAqLworKyNkZWZpbmUgUl9USUxFR1hfSU1NMTZfWDFfSFcxX0xBU1RfR09UIDc1IC8qIFgxIHBpcGUgbGFzdCBod29yZCAxIEdPVCBvZmZzZXQgKi8KKysvKiBSZWxvY3MgNzYtNzcgYXJlIGN1cnJlbnRseSBub3QgZGVmaW5lZC4gICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMF9IVzBfVExTX0dEIDc4CS8qIFgwIHBpcGUgaHdvcmQgMCBUTFMgR0Qgb2Zmc2V0ICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMV9IVzBfVExTX0dEIDc5CS8qIFgxIHBpcGUgaHdvcmQgMCBUTFMgR0Qgb2Zmc2V0ICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMF9IVzBfVExTX0xFIDgwCS8qIFgwIHBpcGUgaHdvcmQgMCBUTFMgTEUgb2Zmc2V0ICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMV9IVzBfVExTX0xFIDgxCS8qIFgxIHBpcGUgaHdvcmQgMCBUTFMgTEUgb2Zmc2V0ICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMF9IVzBfTEFTVF9UTFNfTEUgODIgLyogWDAgcGlwZSBsYXN0IGh3b3JkIDAgTEUgb2ZmICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMV9IVzBfTEFTVF9UTFNfTEUgODMgLyogWDEgcGlwZSBsYXN0IGh3b3JkIDAgTEUgb2ZmICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMF9IVzFfTEFTVF9UTFNfTEUgODQgLyogWDAgcGlwZSBsYXN0IGh3b3JkIDEgTEUgb2ZmICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMV9IVzFfTEFTVF9UTFNfTEUgODUgLyogWDEgcGlwZSBsYXN0IGh3b3JkIDEgTEUgb2ZmICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMF9IVzBfTEFTVF9UTFNfR0QgODYgLyogWDAgcGlwZSBsYXN0IGh3b3JkIDAgR0Qgb2ZmICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMV9IVzBfTEFTVF9UTFNfR0QgODcgLyogWDEgcGlwZSBsYXN0IGh3b3JkIDAgR0Qgb2ZmICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMF9IVzFfTEFTVF9UTFNfR0QgODggLyogWDAgcGlwZSBsYXN0IGh3b3JkIDEgR0Qgb2ZmICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMV9IVzFfTEFTVF9UTFNfR0QgODkgLyogWDEgcGlwZSBsYXN0IGh3b3JkIDEgR0Qgb2ZmICovCisrLyogUmVsb2NzIDkwLTkxIGFyZSBjdXJyZW50bHkgbm90IGRlZmluZWQuICAqLworKyNkZWZpbmUgUl9USUxFR1hfSU1NMTZfWDBfSFcwX1RMU19JRSA5MgkvKiBYMCBwaXBlIGh3b3JkIDAgVExTIElFIG9mZnNldCAqLworKyNkZWZpbmUgUl9USUxFR1hfSU1NMTZfWDFfSFcwX1RMU19JRSA5MwkvKiBYMSBwaXBlIGh3b3JkIDAgVExTIElFIG9mZnNldCAqLworKy8qIFJlbG9jcyA5NC05OSBhcmUgY3VycmVudGx5IG5vdCBkZWZpbmVkLiAgKi8KKysjZGVmaW5lIFJfVElMRUdYX0lNTTE2X1gwX0hXMF9MQVNUX1RMU19JRSAxMDAgLyogWDAgcGlwZSBsYXN0IGh3b3JkIDAgSUUgb2ZmICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU0xNl9YMV9IVzBfTEFTVF9UTFNfSUUgMTAxIC8qIFgxIHBpcGUgbGFzdCBod29yZCAwIElFIG9mZiAqLworKyNkZWZpbmUgUl9USUxFR1hfSU1NMTZfWDBfSFcxX0xBU1RfVExTX0lFIDEwMiAvKiBYMCBwaXBlIGxhc3QgaHdvcmQgMSBJRSBvZmYgKi8KKysjZGVmaW5lIFJfVElMRUdYX0lNTTE2X1gxX0hXMV9MQVNUX1RMU19JRSAxMDMgLyogWDEgcGlwZSBsYXN0IGh3b3JkIDEgSUUgb2ZmICovCisrLyogUmVsb2NzIDEwNC0xMDUgYXJlIGN1cnJlbnRseSBub3QgZGVmaW5lZC4gICovCisrI2RlZmluZSBSX1RJTEVHWF9UTFNfRFRQTU9ENjQJMTA2CS8qIDY0LWJpdCBJRCBvZiBzeW1ib2wncyBtb2R1bGUgKi8KKysjZGVmaW5lIFJfVElMRUdYX1RMU19EVFBPRkY2NAkxMDcJLyogNjQtYml0IG9mZnNldCBpbiBUTFMgYmxvY2sgKi8KKysjZGVmaW5lIFJfVElMRUdYX1RMU19UUE9GRjY0CTEwOAkvKiA2NC1iaXQgb2Zmc2V0IGluIHN0YXRpYyBUTFMgYmxvY2sgKi8KKysjZGVmaW5lIFJfVElMRUdYX1RMU19EVFBNT0QzMgkxMDkJLyogMzItYml0IElEIG9mIHN5bWJvbCdzIG1vZHVsZSAqLworKyNkZWZpbmUgUl9USUxFR1hfVExTX0RUUE9GRjMyCTExMAkvKiAzMi1iaXQgb2Zmc2V0IGluIFRMUyBibG9jayAqLworKyNkZWZpbmUgUl9USUxFR1hfVExTX1RQT0ZGMzIJMTExCS8qIDMyLWJpdCBvZmZzZXQgaW4gc3RhdGljIFRMUyBibG9jayAqLworKyNkZWZpbmUgUl9USUxFR1hfVExTX0dEX0NBTEwJMTEyCS8qICJqYWwiIGZvciBUTFMgR0QgKi8KKysjZGVmaW5lIFJfVElMRUdYX0lNTThfWDBfVExTX0dEX0FERCAxMTMJLyogWDAgcGlwZSAiYWRkaSIgZm9yIFRMUyBHRCAqLworKyNkZWZpbmUgUl9USUxFR1hfSU1NOF9YMV9UTFNfR0RfQUREIDExNAkvKiBYMSBwaXBlICJhZGRpIiBmb3IgVExTIEdEICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU04X1kwX1RMU19HRF9BREQgMTE1CS8qIFkwIHBpcGUgImFkZGkiIGZvciBUTFMgR0QgKi8KKysjZGVmaW5lIFJfVElMRUdYX0lNTThfWTFfVExTX0dEX0FERCAxMTYJLyogWTEgcGlwZSAiYWRkaSIgZm9yIFRMUyBHRCAqLworKyNkZWZpbmUgUl9USUxFR1hfVExTX0lFX0xPQUQJMTE3CS8qICJsZF90bHMiIGZvciBUTFMgSUUgKi8KKysjZGVmaW5lIFJfVElMRUdYX0lNTThfWDBfVExTX0FERCAxMTgJLyogWDAgcGlwZSAiYWRkaSIgZm9yIFRMUyBHRC9JRSAqLworKyNkZWZpbmUgUl9USUxFR1hfSU1NOF9YMV9UTFNfQUREIDExOQkvKiBYMSBwaXBlICJhZGRpIiBmb3IgVExTIEdEL0lFICovCisrI2RlZmluZSBSX1RJTEVHWF9JTU04X1kwX1RMU19BREQgMTIwCS8qIFkwIHBpcGUgImFkZGkiIGZvciBUTFMgR0QvSUUgKi8KKysjZGVmaW5lIFJfVElMRUdYX0lNTThfWTFfVExTX0FERCAxMjEJLyogWTEgcGlwZSAiYWRkaSIgZm9yIFRMUyBHRC9JRSAqLworKworKyNkZWZpbmUgUl9USUxFR1hfR05VX1ZUSU5IRVJJVAkxMjgJLyogR05VIEMrKyB2dGFibGUgaGllcmFyY2h5ICovCisrI2RlZmluZSBSX1RJTEVHWF9HTlVfVlRFTlRSWQkxMjkJLyogR05VIEMrKyB2dGFibGUgbWVtYmVyIHVzYWdlICovCisrCisrI2RlZmluZSBSX1RJTEVHWF9OVU0JCTEzMAorKworKyNlbmRpZgkvKiBlbGYuaCAqLworLS0tIGEvc2NyaXB0cy9tb2QvbWtfZWxmY29uZmlnLmMKKysrKyBiL3NjcmlwdHMvbW9kL21rX2VsZmNvbmZpZy5jCitAQCAtMiw3ICsyLDExIEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaWZuZGVmIF9fQVBQTEVfXworICNpbmNsdWRlIDxlbGYuaD4KKysjZWxzZQorKyNpbmNsdWRlICJlbGYuaCIKKysjZW5kaWYKKyAKKyBpbnQKKyBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKy0tLSBhL3NjcmlwdHMvbW9kL21vZHBvc3QuaAorKysrIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5oCitAQCAtOCw3ICs4LDExIEBACisgI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorKyNpZiAhKGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pKQorICNpbmNsdWRlIDxlbGYuaD4KKysjZWxzZQorKyNpbmNsdWRlICJlbGYuaCIKKysjZW5kaWYKKyAKKyAjaW5jbHVkZSAiZWxmY29uZmlnLmgiCisgCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC8yMTEtZGFyd2luLXV1aWQtdHlwZWRlZi1jbGFzaC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzIxMS1kYXJ3aW4tdXVpZC10eXBlZGVmLWNsYXNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYTYyMjcKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC8yMTEtZGFyd2luLXV1aWQtdHlwZWRlZi1jbGFzaC5wYXRjaApAQCAtMCwwICsxLDIyIEBACitGcm9tIGU0NGZjMmFmMWRkYzQ1MmI2NjU5ZDA4YzE2OTczZDY1YzczYjdkMGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLZXZpbiBEYXJieXNoaXJlLUJyeWFudCA8bGRpckBkYXJieXNoaXJlLWJyeWFudC5tZS51az4KK0RhdGU6IFdlZCwgNSBGZWIgMjAyMCAxODozNjo0MyArMDAwMAorU3ViamVjdDogW1BBVENIXSBmaWxlMmFsaWFzOiBidWlsZCBvbiBtYWNvcworCitTaWduZWQtb2ZmLWJ5OiBLZXZpbiBEYXJieXNoaXJlLUJyeWFudCA8bGRpckBkYXJieXNoaXJlLWJyeWFudC5tZS51az4KKy0tLQorIHNjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYyB8IDMgKysrCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCistLS0gYS9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMKKysrKyBiL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYworQEAgLTM4LDYgKzM4LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgeworIAlfX3U4IGJbMTZdOworIH0gZ3VpZF90OworIAorKyNpZmRlZiBfX0FQUExFX18KKysjZGVmaW5lIHV1aWRfdCBjb21wYXRfdXVpZF90CisrI2VuZGlmCisgLyogYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGRvbid0IHVzZSBpbiBuZXcgY29kZSAqLworIHR5cGVkZWYgc3RydWN0IHsKKyAJX191OCBiWzE2XTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzIxMi10b29sc19wb3J0YWJpbGl0eS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzIxMi10b29sc19wb3J0YWJpbGl0eS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDhlYjZmCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvaGFjay01LjQvMjEyLXRvb2xzX3BvcnRhYmlsaXR5LnBhdGNoCkBAIC0wLDAgKzEsMTEwIEBACitGcm9tIDQ4MjMyZDNkOTMxYzk1OTUzY2UyZGRmZTdkYTdiYjE2NGFlZjZhNzMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CitEYXRlOiBGcmksIDcgSnVsIDIwMTcgMTc6MDM6MTYgKzAyMDAKK1N1YmplY3Q6IGZpeCBwb3J0YWJpbGl0eSBvZiBzb21lIGluY2x1ZGVzIGZpbGVzIGluIHRvb2xzLyB1c2VkIG9uIHRoZSBob3N0CisKK1NpZ25lZC1vZmYtYnk6IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KKy0tLQorIHRvb2xzL2luY2x1ZGUvdG9vbHMvYmVfYnl0ZXNoaWZ0LmggfCAgNCArKysrCisgdG9vbHMvaW5jbHVkZS90b29scy9sZV9ieXRlc2hpZnQuaCB8ICA0ICsrKysKKyB0b29scy9pbmNsdWRlL3Rvb2xzL2xpbnV4X3R5cGVzLmggIHwgMjIgKysrKysrKysrKysrKysrKysrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgMzAgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy9pbmNsdWRlL3Rvb2xzL2xpbnV4X3R5cGVzLmgKKworLS0tIGEvdG9vbHMvaW5jbHVkZS90b29scy9iZV9ieXRlc2hpZnQuaAorKysrIGIvdG9vbHMvaW5jbHVkZS90b29scy9iZV9ieXRlc2hpZnQuaAorQEAgLTIsNiArMiwxMCBAQAorICNpZm5kZWYgX1RPT0xTX0JFX0JZVEVTSElGVF9ICisgI2RlZmluZSBfVE9PTFNfQkVfQllURVNISUZUX0gKKyAKKysjaWZuZGVmIF9fbGludXhfXworKyNpbmNsdWRlICJsaW51eF90eXBlcy5oIgorKyNlbmRpZgorKworICNpbmNsdWRlIDxzdGRpbnQuaD4KKyAKKyBzdGF0aWMgaW5saW5lIHVpbnQxNl90IF9fZ2V0X3VuYWxpZ25lZF9iZTE2KGNvbnN0IHVpbnQ4X3QgKnApCistLS0gYS90b29scy9pbmNsdWRlL3Rvb2xzL2xlX2J5dGVzaGlmdC5oCisrKysgYi90b29scy9pbmNsdWRlL3Rvb2xzL2xlX2J5dGVzaGlmdC5oCitAQCAtMiw2ICsyLDEwIEBACisgI2lmbmRlZiBfVE9PTFNfTEVfQllURVNISUZUX0gKKyAjZGVmaW5lIF9UT09MU19MRV9CWVRFU0hJRlRfSAorIAorKyNpZm5kZWYgX19saW51eF9fCisrI2luY2x1ZGUgImxpbnV4X3R5cGVzLmgiCisrI2VuZGlmCisrCisgI2luY2x1ZGUgPHN0ZGludC5oPgorIAorIHN0YXRpYyBpbmxpbmUgdWludDE2X3QgX19nZXRfdW5hbGlnbmVkX2xlMTYoY29uc3QgdWludDhfdCAqcCkKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rvb2xzL2luY2x1ZGUvdG9vbHMvbGludXhfdHlwZXMuaAorQEAgLTAsMCArMSwyNiBAQAorKyNpZm5kZWYgX19MSU5VWF9UWVBFU19ICisrI2RlZmluZSBfX0xJTlVYX1RZUEVTX0gKKysKKysjaW5jbHVkZSA8c3RkaW50Lmg+CisrCisrdHlwZWRlZiBpbnQ4X3QgX19zODsKKyt0eXBlZGVmIHVpbnQ4X3QgX191ODsKKyt0eXBlZGVmIHVpbnQ4X3QgX19iZTg7CisrdHlwZWRlZiB1aW50OF90IF9fbGU4OworKworK3R5cGVkZWYgaW50MTZfdCBfX3MxNjsKKyt0eXBlZGVmIHVpbnQxNl90IF9fdTE2OworK3R5cGVkZWYgdWludDE2X3QgX19iZTE2OworK3R5cGVkZWYgdWludDE2X3QgX19sZTE2OworKworK3R5cGVkZWYgaW50MzJfdCBfX3MzMjsKKyt0eXBlZGVmIHVpbnQzMl90IF9fdTMyOworK3R5cGVkZWYgdWludDMyX3QgX19iZTMyOworK3R5cGVkZWYgdWludDMyX3QgX19sZTMyOworKworK3R5cGVkZWYgaW50NjRfdCBfX3M2NDsKKyt0eXBlZGVmIHVpbnQ2NF90IF9fdTY0OworK3R5cGVkZWYgdWludDY0X3QgX19iZTY0OworK3R5cGVkZWYgdWludDY0X3QgX19sZTY0OworKworKyNlbmRpZgorLS0tIGEvdG9vbHMvaW5jbHVkZS9saW51eC90eXBlcy5oCisrKysgYi90b29scy9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKK0BAIC03LDggKzcsMTIgQEAKKyAjaW5jbHVkZSA8c3RkaW50Lmg+CisgCisgI2RlZmluZSBfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX18JLyogRm9yIFBQQzY0LCB0byBnZXQgTEw2NCB0eXBlcyAqLworKyNpZm5kZWYgX19saW51eF9fCisrI2luY2x1ZGUgPHRvb2xzL2xpbnV4X3R5cGVzLmg+CisrI2Vsc2UKKyAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisgI2luY2x1ZGUgPGFzbS9wb3NpeF90eXBlcy5oPgorKyNlbmRpZgorIAorIHN0cnVjdCBwYWdlOworIHN0cnVjdCBrbWVtX2NhY2hlOworLS0tIGEvdG9vbHMvcGVyZi9wbXUtZXZlbnRzL2pldmVudHMuYworKysrIGIvdG9vbHMvcGVyZi9wbXUtZXZlbnRzL2pldmVudHMuYworQEAgLTEsNCArMSw2IEBACisrI2lmZGVmIF9fbGludXhfXworICNkZWZpbmUgIF9YT1BFTl9TT1VSQ0UgNTAwCS8qIG5lZWRlZCBmb3IgbmZ0dygpICovCisrI2VuZGlmCisgI2RlZmluZSAgX0dOVV9TT1VSQ0UJCS8qIG5lZWRlZCBmb3IgYXNwcmludGYoKSAqLworIAorIC8qIFBhcnNlIGV2ZW50IEpTT04gZmlsZXMgKi8KK0BAIC0zNSw2ICszNyw3IEBACisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8c3RyaW5ncy5oPgorICNpbmNsdWRlIDxjdHlwZS5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAjaW5jbHVkZSA8c3RkYXJnLmg+CistLS0gYS90b29scy9wZXJmL3BtdS1ldmVudHMvanNvbi5jCisrKysgYi90b29scy9wZXJmL3BtdS1ldmVudHMvanNvbi5jCitAQCAtMzgsNyArMzgsNiBAQAorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAjaW5jbHVkZSAianNtbi5oIgorICNpbmNsdWRlICJqc29uLmgiCistI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorIAorIAorIHN0YXRpYyBjaGFyICptYXBmaWxlKGNvbnN0IGNoYXIgKmZuLCBzaXplX3QgKnNpemUpCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC8yMTQtc3BpZGV2X2hfcG9ydGFiaWxpdHkucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC8yMTQtc3BpZGV2X2hfcG9ydGFiaWxpdHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE1ZTlhNAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzIxNC1zcGlkZXZfaF9wb3J0YWJpbGl0eS5wYXRjaApAQCAtMCwwICsxLDI0IEBACitGcm9tIGJlOWJlOTVmZjEwZTE2YTViNGFkMzZmOTAzOTc4ZDBjYzU3NDcwMjQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CitEYXRlOiBGcmksIDcgSnVsIDIwMTcgMTc6MDQ6MDggKzAyMDAKK1N1YmplY3Q6IGtlcm5lbDogZml4IGxpbnV4L3NwaS9zcGlkZXYuaCBwb3J0YWJpbGl0eSBpc3N1ZXMgd2l0aCBtdXNsCisKK0ZlbGl4IHdpbGwgdHJ5IHRvIGdldCB0aGlzIGRlZmluZSBpbmNsdWRlZCBpbnRvIG11c2wKKworbGVkZS1jb21taXQ6IDc5NWU3Y2Y2MGRlMTllN2EwNzZhNDY4NzRmYWI3YmI4OGI0M2JiZmYKK1NpZ25lZC1vZmYtYnk6IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KKy0tLQorIGluY2x1ZGUvdWFwaS9saW51eC9zcGkvc3BpZGV2LmggfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9zcGkvc3BpZGV2LmgKKysrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9zcGkvc3BpZGV2LmgKK0BAIC0xMTcsNyArMTE3LDcgQEAgc3RydWN0IHNwaV9pb2NfdHJhbnNmZXIgeworIAorIC8qIG5vdCBhbGwgcGxhdGZvcm1zIHVzZSA8YXNtLWdlbmVyaWMvaW9jdGwuaD4gb3IgX0lPQ19UWVBFQ0hFQ0soKSAuLi4gKi8KKyAjZGVmaW5lIFNQSV9NU0dTSVpFKE4pIFwKKy0JKCgoKE4pKihzaXplb2YgKHN0cnVjdCBzcGlfaW9jX3RyYW5zZmVyKSkpIDwgKDEgPDwgX0lPQ19TSVpFQklUUykpIFwKKysJKCgoKE4pKihzaXplb2YgKHN0cnVjdCBzcGlfaW9jX3RyYW5zZmVyKSkpIDwgKDEgPDwgMTMpKSBcCisgCQk/ICgoTikqKHNpemVvZiAoc3RydWN0IHNwaV9pb2NfdHJhbnNmZXIpKSkgOiAwKQorICNkZWZpbmUgU1BJX0lPQ19NRVNTQUdFKE4pIF9JT1coU1BJX0lPQ19NQUdJQywgMCwgY2hhcltTUElfTVNHU0laRShOKV0pCisgCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC8yMjAtZ2Nfc2VjdGlvbnMucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC8yMjAtZ2Nfc2VjdGlvbnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRmYWY1MQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzIyMC1nY19zZWN0aW9ucy5wYXRjaApAQCAtMCwwICsxLDEzNiBAQAorRnJvbSBlM2Q4Njc2ZjU3MjJiNzYyMjY4NTU4MWUwNmU4ZjUzZTYxMzhlM2FiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorRGF0ZTogU2F0LCAxNSBKdWwgMjAxNyAyMzo0MjozNiArMDIwMAorU3ViamVjdDogdXNlIC1mZnVuY3Rpb24tc2VjdGlvbnMsIC1mZGF0YS1zZWN0aW9ucyBhbmQgLS1nYy1zZWN0aW9ucworCitJbiBjb21iaW5hdGlvbiB3aXRoIGtlcm5lbCBzeW1ib2wgZXhwb3J0IHN0cmlwcGluZyB0aGlzIHNpZ25pZmljYW50bHkgcmVkdWNlcwordGhlIGtlcm5lbCBpbWFnZSBzaXplLiBVc2VkIG9uIGJvdGggQVJNIGFuZCBNSVBTIGFyY2hpdGVjdHVyZXMuCisKK1NpZ25lZC1vZmYtYnk6IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KK1NpZ25lZC1vZmYtYnk6IEpvbmFzIEdvcnNraSA8am9nb0BvcGVud3J0Lm9yZz4KK1NpZ25lZC1vZmYtYnk6IEdhYm9yIEp1aG9zIDxqdWhvc2dAb3BlbndydC5vcmc+CistLS0KKyBNYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMCArKystLS0tCisgYXJjaC9hcm0vS2NvbmZpZyAgICAgICAgICAgICAgICAgIHwgIDEgKworIGFyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZSB8ICAxICsKKyBhcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUyAgICAgfCAyNiArKysrKysrKy0tLS0tLS0tCisgYXJjaC9taXBzL0tjb25maWcgICAgICAgICAgICAgICAgIHwgIDEgKworIGFyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUyAgICB8ICA0ICstLQorIGluY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaCB8IDYzICsrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLQorIDcgZmlsZXMgY2hhbmdlZCwgNTUgaW5zZXJ0aW9ucygrKSwgNTEgZGVsZXRpb25zKC0pCisKKy0tLSBhL2FyY2gvYXJtL0tjb25maWcKKysrKyBiL2FyY2gvYXJtL0tjb25maWcKK0BAIC0xMTIsNiArMTEyLDcgQEAgY29uZmlnIEFSTQorIAlzZWxlY3QgSEFWRV9VSUQxNgorIAlzZWxlY3QgSEFWRV9WSVJUX0NQVV9BQ0NPVU5USU5HX0dFTgorIAlzZWxlY3QgSVJRX0ZPUkNFRF9USFJFQURJTkcKKysJc2VsZWN0IEhBVkVfTERfREVBRF9DT0RFX0RBVEFfRUxJTUlOQVRJT04KKyAJc2VsZWN0IE1PRFVMRVNfVVNFX0VMRl9SRUwKKyAJc2VsZWN0IE5FRURfRE1BX01BUF9TVEFURQorIAlzZWxlY3QgT0ZfRUFSTFlfRkxBVFRSRUUgaWYgT0YKKy0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCitAQCAtMTA4LDYgKzEwOCw3IEBAIGlmZXEgKCQoQ09ORklHX0ZVTkNUSU9OX1RSQUNFUikseSkKKyBPUklHX0NGTEFHUyA6PSAkKEtCVUlMRF9DRkxBR1MpCisgS0JVSUxEX0NGTEFHUyA9ICQoc3Vic3QgLXBnLCAsICQoT1JJR19DRkxBR1MpKQorIGVuZGlmCisrS0JVSUxEX0NGTEFHU19LRVJORUwgOj0gJChwYXRzdWJzdCAtZiUtc2VjdGlvbnMsLCQoS0JVSUxEX0NGTEFHU19LRVJORUwpKQorIAorICMgLWZzdGFjay1wcm90ZWN0b3Itc3Ryb25nIHRyaWdnZXJzIHByb3RlY3Rpb24gY2hlY2tzIGluIHRoaXMgY29kZSwKKyAjIGJ1dCBpdCBpcyBiZWluZyB1c2VkIHRvbyBlYXJseSB0byBsaW5rIHRvIG1lYW5pbmdmdWwgc3RhY2tfY2hrIGxvZ2ljLgorLS0tIGEvYXJjaC9hcm0va2VybmVsL3ZtbGludXgubGRzLlMKKysrKyBiL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TCitAQCAtMTAwLDI0ICsxMDAsMjQgQEAgU0VDVElPTlMKKyAJfQorIAkuaW5pdC5hcmNoLmluZm8gOiB7CisgCQlfX2FyY2hfaW5mb19iZWdpbiA9IC47CistCQkqKC5hcmNoLmluZm8uaW5pdCkKKysJCUtFRVAoKiguYXJjaC5pbmZvLmluaXQpKQorIAkJX19hcmNoX2luZm9fZW5kID0gLjsKKyAJfQorIAkuaW5pdC50YWd0YWJsZSA6IHsKKyAJCV9fdGFndGFibGVfYmVnaW4gPSAuOworLQkJKigudGFnbGlzdC5pbml0KQorKwkJS0VFUCgqKC50YWdsaXN0LmluaXQpKQorIAkJX190YWd0YWJsZV9lbmQgPSAuOworIAl9CisgI2lmZGVmIENPTkZJR19TTVBfT05fVVAKKyAJLmluaXQuc21wYWx0IDogeworIAkJX19zbXBhbHRfYmVnaW4gPSAuOworLQkJKiguYWx0LnNtcC5pbml0KQorKwkJS0VFUCgqKC5hbHQuc21wLmluaXQpKQorIAkJX19zbXBhbHRfZW5kID0gLjsKKyAJfQorICNlbmRpZgorIAkuaW5pdC5wdl90YWJsZSA6IHsKKyAJCV9fcHZfdGFibGVfYmVnaW4gPSAuOworLQkJKigucHZfdGFibGUpCisrCQlLRUVQKCooLnB2X3RhYmxlKSkKKyAJCV9fcHZfdGFibGVfZW5kID0gLjsKKyAJfQorIAorLS0tIGEvYXJjaC9hcm0va2VybmVsL3ZtbGludXgubGRzLmgKKysrKyBiL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5oCitAQCAtMjIsMTMgKzIyLDEzIEBACisgI2RlZmluZSBBUk1fTU1VX0RJU0NBUkQoeCkKKyAjZWxzZQorICNkZWZpbmUgQVJNX01NVV9LRUVQKHgpCistI2RlZmluZSBBUk1fTU1VX0RJU0NBUkQoeCkJeAorKyNkZWZpbmUgQVJNX01NVV9ESVNDQVJEKHgpCUtFRVAoeCkKKyAjZW5kaWYKKyAKKyAjZGVmaW5lIFBST0NfSU5GTwkJCQkJCQlcCisgCQkuID0gQUxJR04oNCk7CQkJCQkJXAorIAkJX19wcm9jX2luZm9fYmVnaW4gPSAuOwkJCQkJXAorLQkJKigucHJvYy5pbmZvLmluaXQpCQkJCQlcCisrCQlLRUVQKCooLnByb2MuaW5mby5pbml0KSkJCQkJXAorIAkJX19wcm9jX2luZm9fZW5kID0gLjsKKyAKKyAjZGVmaW5lIEhZUEVSVklTT1JfVEVYVAkJCQkJCQlcCitAQCAtMzksMTEgKzM5LDExIEBACisgI2RlZmluZSBJRE1BUF9URVhUCQkJCQkJCVwKKyAJCUFMSUdOX0ZVTkNUSU9OKCk7CQkJCQlcCisgCQlfX2lkbWFwX3RleHRfc3RhcnQgPSAuOwkJCQkJXAorLQkJKiguaWRtYXAudGV4dCkJCQkJCQlcCisrCQlLRUVQKCooLmlkbWFwLnRleHQpKQkJCQkJXAorIAkJX19pZG1hcF90ZXh0X2VuZCA9IC47CQkJCQlcCisgCQkuID0gQUxJR04oUEFHRV9TSVpFKTsJCQkJCVwKKyAJCV9faHlwX2lkbWFwX3RleHRfc3RhcnQgPSAuOwkJCQlcCistCQkqKC5oeXAuaWRtYXAudGV4dCkJCQkJCVwKKysJCUtFRVAoKiguaHlwLmlkbWFwLnRleHQpKQkJCQlcCisgCQlfX2h5cF9pZG1hcF90ZXh0X2VuZCA9IC47CisgCisgI2RlZmluZSBBUk1fRElTQ0FSRAkJCQkJCQlcCitAQCAtODYsMTIgKzg2LDEyIEBACisgCS4gPSBBTElHTig4KTsJCQkJCQkJXAorIAkuQVJNLnVud2luZF9pZHggOiB7CQkJCQkJXAorIAkJX19zdGFydF91bndpbmRfaWR4ID0gLjsJCQkJCVwKKy0JCSooLkFSTS5leGlkeCopCQkJCQkJXAorKwkJS0VFUCgqKC5BUk0uZXhpZHgqKSkJCQkJCVwKKyAJCV9fc3RvcF91bndpbmRfaWR4ID0gLjsJCQkJCVwKKyAJfQkJCQkJCQkJXAorIAkuQVJNLnVud2luZF90YWIgOiB7CQkJCQkJXAorIAkJX19zdGFydF91bndpbmRfdGFiID0gLjsJCQkJCVwKKy0JCSooLkFSTS5leHRhYiopCQkJCQkJXAorKwkJS0VFUCgqKC5BUk0uZXh0YWIqKSkJCQkJCVwKKyAJCV9fc3RvcF91bndpbmRfdGFiID0gLjsJCQkJCVwKKyAJfQorIAorQEAgLTEwMiwxNCArMTAyLDE0IEBACisgI2RlZmluZSBBUk1fVkVDVE9SUwkJCQkJCQlcCisgCV9fdmVjdG9yc19zdGFydCA9IC47CQkJCQkJXAorIAkudmVjdG9ycyAweGZmZmYwMDAwIDogQVQoX192ZWN0b3JzX3N0YXJ0KSB7CQkJXAorLQkJKigudmVjdG9ycykJCQkJCQlcCisrCQlLRUVQKCooLnZlY3RvcnMpKQkJCQkJXAorIAl9CQkJCQkJCQlcCisgCS4gPSBfX3ZlY3RvcnNfc3RhcnQgKyBTSVpFT0YoLnZlY3RvcnMpOwkJCQlcCisgCV9fdmVjdG9yc19lbmQgPSAuOwkJCQkJCVwKKyAJCQkJCQkJCQlcCisgCV9fc3R1YnNfc3RhcnQgPSAuOwkJCQkJCVwKKyAJLnN0dWJzIEFERFIoLnZlY3RvcnMpICsgMHgxMDAwIDogQVQoX19zdHVic19zdGFydCkgewkJXAorLQkJKiguc3R1YnMpCQkJCQkJXAorKwkJS0VFUCgqKC5zdHVicykpCQkJCQkJXAorIAl9CQkJCQkJCQlcCisgCS4gPSBfX3N0dWJzX3N0YXJ0ICsgU0laRU9GKC5zdHVicyk7CQkJCVwKKyAJX19zdHVic19lbmQgPSAuOwkJCQkJCVwKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzIyMS1tb2R1bGVfZXhwb3J0cy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzIyMS1tb2R1bGVfZXhwb3J0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2Y0MGFjCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvaGFjay01LjQvMjIxLW1vZHVsZV9leHBvcnRzLnBhdGNoCkBAIC0wLDAgKzEsMTA5IEBACitGcm9tIGIxNDc4NGU3ODgzMzkwYzIwZWQzZmY5MDQ4OTIyNTU0MDRhNTkxNGIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CitEYXRlOiBGcmksIDcgSnVsIDIwMTcgMTc6MDU6NTMgKzAyMDAKK1N1YmplY3Q6IGFkZCBhbiBvcHRpb25hbCBjb25maWcgb3B0aW9uIGZvciBzdHJpcHBpbmcgYWxsIHVubmVjZXNzYXJ5IHN5bWJvbCBleHBvcnRzIGZyb20gdGhlIGtlcm5lbCBpbWFnZQorCitsZWRlLWNvbW1pdDogYmI1YTQwYzY0YjdjNGY0ODQ4NTA5ZmEwYTY2MjUwNTVmYzllNjZjYworU2lnbmVkLW9mZi1ieTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorLS0tCisgaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oIHwgMTggKysrKysrKysrKysrKysrLS0tCisgaW5jbHVkZS9saW51eC9leHBvcnQuaCAgICAgICAgICAgIHwgIDkgKysrKysrKystCisgc2NyaXB0cy9NYWtlZmlsZS5idWlsZCAgICAgICAgICAgIHwgIDIgKy0KKyAzIGZpbGVzIGNoYW5nZWQsIDI0IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKKy0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaAorKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCitAQCAtNTQsNiArNTQsMTYgQEAKKyAjZGVmaW5lIExPQURfT0ZGU0VUIDAKKyAjZW5kaWYKKyAKKysjaWZuZGVmIFNZTVRBQl9LRUVQCisrI2RlZmluZSBTWU1UQUJfS0VFUCBLRUVQKCooU09SVChfX19rc3ltdGFiKyopKSkKKysjZGVmaW5lIFNZTVRBQl9LRUVQX0dQTCBLRUVQKCooU09SVChfX19rc3ltdGFiX2dwbCsqKSkpCisrI2VuZGlmCisrCisrI2lmbmRlZiBTWU1UQUJfRElTQ0FSRAorKyNkZWZpbmUgU1lNVEFCX0RJU0NBUkQKKysjZGVmaW5lIFNZTVRBQl9ESVNDQVJEX0dQTAorKyNlbmRpZgorKworIC8qIEFsaWduIC4gdG8gYSA4IGJ5dGUgYm91bmRhcnkgZXF1YWxzIHRvIG1heGltdW0gZnVuY3Rpb24gYWxpZ25tZW50LiAqLworICNkZWZpbmUgQUxJR05fRlVOQ1RJT04oKSAgLiA9IEFMSUdOKDgpCisgCitAQCAtNDA3LDE0ICs0MTcsMTQgQEAKKyAJLyogS2VybmVsIHN5bWJvbCB0YWJsZTogTm9ybWFsIHN5bWJvbHMgKi8JCQlcCisgCV9fa3N5bXRhYiAgICAgICAgIDogQVQoQUREUihfX2tzeW10YWIpIC0gTE9BRF9PRkZTRVQpIHsJCVwKKyAJCV9fc3RhcnRfX19rc3ltdGFiID0gLjsJCQkJCVwKKy0JCUtFRVAoKihTT1JUKF9fX2tzeW10YWIrKikpKQkJCQlcCisrCQlTWU1UQUJfS0VFUAkJCQkJCVwKKyAJCV9fc3RvcF9fX2tzeW10YWIgPSAuOwkJCQkJXAorIAl9CQkJCQkJCQlcCisgCQkJCQkJCQkJXAorIAkvKiBLZXJuZWwgc3ltYm9sIHRhYmxlOiBHUEwtb25seSBzeW1ib2xzICovCQkJXAorIAlfX2tzeW10YWJfZ3BsICAgICA6IEFUKEFERFIoX19rc3ltdGFiX2dwbCkgLSBMT0FEX09GRlNFVCkgewlcCisgCQlfX3N0YXJ0X19fa3N5bXRhYl9ncGwgPSAuOwkJCQlcCistCQlLRUVQKCooU09SVChfX19rc3ltdGFiX2dwbCsqKSkpCQkJCVwKKysJCVNZTVRBQl9LRUVQX0dQTAkJCQkJCVwKKyAJCV9fc3RvcF9fX2tzeW10YWJfZ3BsID0gLjsJCQkJXAorIAl9CQkJCQkJCQlcCisgCQkJCQkJCQkJXAorQEAgLTQ3Niw3ICs0ODYsNyBAQAorIAkJCQkJCQkJCVwKKyAJLyogS2VybmVsIHN5bWJvbCB0YWJsZTogc3RyaW5ncyAqLwkJCQlcCisgICAgICAgICBfX2tzeW10YWJfc3RyaW5ncyA6IEFUKEFERFIoX19rc3ltdGFiX3N0cmluZ3MpIC0gTE9BRF9PRkZTRVQpIHsJXAorLQkJKihfX2tzeW10YWJfc3RyaW5ncykJCQkJCVwKKysJCSooX19rc3ltdGFiX3N0cmluZ3MrKikJCQkJCVwKKyAJfQkJCQkJCQkJXAorIAkJCQkJCQkJCVwKKyAJLyogX18qaW5pdCBzZWN0aW9ucyAqLwkJCQkJCVwKK0BAIC05MDUsNiArOTE1LDggQEAKKyAJRVhJVF9URVhUCQkJCQkJCVwKKyAJRVhJVF9EQVRBCQkJCQkJCVwKKyAJRVhJVF9DQUxMCQkJCQkJCVwKKysJU1lNVEFCX0RJU0NBUkQJCQkJCQkJXAorKwlTWU1UQUJfRElTQ0FSRF9HUEwJCQkJCQlcCisgCSooLmRpc2NhcmQpCQkJCQkJCVwKKyAJKiguZGlzY2FyZC4qKQkJCQkJCQlcCisgCSooLm1vZGluZm8pCQkJCQkJCVwKKy0tLSBhL2luY2x1ZGUvbGludXgvZXhwb3J0LmgKKysrKyBiL2luY2x1ZGUvbGludXgvZXhwb3J0LmgKK0BAIC05OCwxOCArOTgsMjYgQEAgc3RydWN0IGtlcm5lbF9zeW1ib2wgeworIAorICNlbHNlCisgCisrI2lmZGVmIE1PRFVMRQorKyNkZWZpbmUgX19FWFBPUlRfU1VGRklYKHN5bSkKKysjZWxzZQorKyNkZWZpbmUgX19FWFBPUlRfU1VGRklYKHN5bSkgIisiICNzeW0KKysjZW5kaWYKKysKKyAjZGVmaW5lIF9fX2V4cG9ydF9zeW1ib2xfY29tbW9uKHN5bSwgc2VjKQkJCQlcCisgCWV4dGVybiB0eXBlb2Yoc3ltKSBzeW07CQkJCQkJXAorIAlfX0NSQ19TWU1CT0woc3ltLCBzZWMpOwkJCQkJCVwKKyAJc3RhdGljIGNvbnN0IGNoYXIgX19rc3RydGFiXyMjc3ltW10JCQkJXAorLQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX2tzeW10YWJfc3RyaW5ncyIpLCB1c2VkLCBhbGlnbmVkKDEpKSkJXAorKwlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX2tzeW10YWJfc3RyaW5ncyIJCQlcCisrCSAgX19FWFBPUlRfU1VGRklYKHN5bSkpLCB1c2VkLCBhbGlnbmVkKDEpKSkJCQlcCisgCT0gI3N5bQkJCQkJCQkJXAorIAorIC8qIEZvciBldmVyeSBleHBvcnRlZCBzeW1ib2wsIHBsYWNlIGEgc3RydWN0IGluIHRoZSBfX2tzeW10YWIgc2VjdGlvbiAqLworICNkZWZpbmUgX19fRVhQT1JUX1NZTUJPTF9OUyhzeW0sIHNlYywgbnMpCQkJCVwKKyAJX19fZXhwb3J0X3N5bWJvbF9jb21tb24oc3ltLCBzZWMpOwkJCQlcCisgCXN0YXRpYyBjb25zdCBjaGFyIF9fa3N0cnRhYm5zXyMjc3ltW10JCQkJXAorLQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX2tzeW10YWJfc3RyaW5ncyIpLCB1c2VkLCBhbGlnbmVkKDEpKSkJXAorKwlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX2tzeW10YWJfc3RyaW5ncyIJCQlcCisrCSAgX19FWFBPUlRfU1VGRklYKHN5bSkpLCB1c2VkLCBhbGlnbmVkKDEpKSkJCQlcCisgCT0gI25zOwkJCQkJCQkJXAorIAlfX0tTWU1UQUJfRU5UUllfTlMoc3ltLCBzZWMpCisgCistLS0gYS9zY3JpcHRzL01ha2VmaWxlLmJ1aWxkCisrKysgYi9zY3JpcHRzL01ha2VmaWxlLmJ1aWxkCitAQCAtMzUwLDcgKzM1MCw3IEBAIHRhcmdldHMgKz0gJChleHRyYS15KSAkKE1BS0VDTURHT0FMUykgJCgKKyAjIExpbmtlciBzY3JpcHRzIHByZXByb2Nlc3NvciAoLmxkcy5TIC0+IC5sZHMpCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBxdWlldF9jbWRfY3BwX2xkc19TID0gTERTICAgICAkQAorLSAgICAgIGNtZF9jcHBfbGRzX1MgPSAkKENQUCkgJChjcHBfZmxhZ3MpIC1QIC1VJChBUkNIKSBcCisrICAgICAgY21kX2NwcF9sZHNfUyA9ICQoQ1BQKSAkKEVYVFJBX0xEU0ZMQUdTKSAkKGNwcF9mbGFncykgLVAgLVUkKEFSQ0gpIFwKKyAJICAgICAgICAgICAgICAgICAgICAgLURfX0FTU0VNQkxZX18gLURMSU5LRVJfU0NSSVBUIC1vICRAICQ8CisgCisgJChvYmopLyUubGRzOiAkKHNyYykvJS5sZHMuUyBGT1JDRQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvaGFjay01LjQvMjMwLW9wZW53cnRfbHptYV9vcHRpb25zLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvaGFjay01LjQvMjMwLW9wZW53cnRfbHptYV9vcHRpb25zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwOWNjYmMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC8yMzAtb3BlbndydF9sem1hX29wdGlvbnMucGF0Y2gKQEAgLTAsMCArMSw3MSBAQAorRnJvbSBiM2QwMGI0NTI0NjdmNjIxMzE3OTUzZDllNGM2ZjlhZThkY2ZkMjcxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSW1yZSBLYWxveiA8a2Fsb3pAb3BlbndydC5vcmc+CitEYXRlOiBGcmksIDcgSnVsIDIwMTcgMTc6MDY6NTUgKzAyMDAKK1N1YmplY3Q6IHVzZSB0aGUgb3BlbndydCBsem1hIG9wdGlvbnMgZm9yIG5vdworCitsZWRlLWNvbW1pdDogNTQ4ZGU5NDlmMzkyMDQ5NDIwYTZhMWZlZWVmMTE4YjMwYWI4ZWE4YworU2lnbmVkLW9mZi1ieTogSW1yZSBLYWxveiA8a2Fsb3pAb3BlbndydC5vcmc+CistLS0KKyBsaWIvZGVjb21wcmVzcy5jICAgICAgICAgICAgICB8ICAxICsKKyBzY3JpcHRzL01ha2VmaWxlLmxpYiAgICAgICAgICB8ICAyICstCisgdXNyL2dlbl9pbml0cmFtZnNfbGlzdC5zaCB8IDEwICsrKysrLS0tLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworLS0tIGEvbGliL2RlY29tcHJlc3MuYworKysrIGIvbGliL2RlY29tcHJlc3MuYworQEAgLTQ5LDYgKzQ5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wcmVzc19mb3JtYXQgY29tcAorIAl7IHsweDFmLCAweDllfSwgImd6aXAiLCBndW56aXAgfSwKKyAJeyB7MHg0MiwgMHg1YX0sICJiemlwMiIsIGJ1bnppcDIgfSwKKyAJeyB7MHg1ZCwgMHgwMH0sICJsem1hIiwgdW5sem1hIH0sCisrCXsgezB4NmQsIDB4MDB9LCAibHptYS1vcGVud3J0IiwgdW5sem1hIH0sCisgCXsgezB4ZmQsIDB4Mzd9LCAieHoiLCB1bnh6IH0sCisgCXsgezB4ODksIDB4NGN9LCAibHpvIiwgdW5sem8gfSwKKyAJeyB7MHgwMiwgMHgyMX0sICJsejQiLCB1bmx6NCB9LAorLS0tIGEvc2NyaXB0cy9NYWtlZmlsZS5saWIKKysrKyBiL3NjcmlwdHMvTWFrZWZpbGUubGliCitAQCAtMzI4LDcgKzMyOCw3IEBAIHF1aWV0X2NtZF9iemlwMiA9IEJaSVAyICAgJEAKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorIHF1aWV0X2NtZF9sem1hID0gTFpNQSAgICAkQAorLSAgICAgIGNtZF9sem1hID0geyBjYXQgJChyZWFsLXByZXJlcXMpIHwgJChMWk1BKSAtOTsgJChzaXplX2FwcGVuZCk7IH0gPiAkQAorKyAgICAgIGNtZF9sem1hID0geyBjYXQgJChyZWFsLXByZXJlcXMpIHwgJChMWk1BKSBlIC1kMjAgLWxjMSAtbHAyIC1wYjIgLWVvcyAtc2kgLXNvOyAkKHNpemVfYXBwZW5kKTsgfSA+ICRACisgCisgcXVpZXRfY21kX2x6byA9IExaTyAgICAgJEAKKyAgICAgICBjbWRfbHpvID0geyBjYXQgJChyZWFsLXByZXJlcXMpIHwgJChLTFpPUCkgLTk7ICQoc2l6ZV9hcHBlbmQpOyB9ID4gJEAKKy0tLSBhL3Vzci9nZW5faW5pdHJhbWZzX2xpc3Quc2gKKysrKyBiL3Vzci9nZW5faW5pdHJhbWZzX2xpc3Quc2gKK0BAIC0yMjksNyArMjI5LDcgQEAgY3Bpb19saXN0PQorIG91dHB1dD0iL2Rldi9zdGRvdXQiCisgb3V0cHV0X2ZpbGU9IiIKKyBpc19jcGlvX2NvbXByZXNzZWQ9CistY29tcHI9Imd6aXAgLW4gLTkgLWYiCisrY29tcHI9Imd6aXAgLW4gLTkgLWYgLSIKKyAKKyBhcmc9IiQxIgorIGNhc2UgIiRhcmciIGluCitAQCAtMjQ1LDEzICsyNDUsMTMgQEAgY2FzZSAiJGFyZyIgaW4KKyAJCW91dHB1dD0ke2NwaW9fbGlzdH0KKyAJCWVjaG8gIiRvdXRwdXRfZmlsZSIgfCBncmVwIC1xICJcLmd6JCIgXAorICAgICAgICAgICAgICAgICAmJiBbIC14ICJgd2hpY2ggZ3ppcCAyPiAvZGV2L251bGxgIiBdIFwKKy0gICAgICAgICAgICAgICAgJiYgY29tcHI9Imd6aXAgLW4gLTkgLWYiCisrICAgICAgICAgICAgICAgICYmIGNvbXByPSJnemlwIC1uIC05IC1mIC0iCisgCQllY2hvICIkb3V0cHV0X2ZpbGUiIHwgZ3JlcCAtcSAiXC5iejIkIiBcCisgICAgICAgICAgICAgICAgICYmIFsgLXggImB3aGljaCBiemlwMiAyPiAvZGV2L251bGxgIiBdIFwKKy0gICAgICAgICAgICAgICAgJiYgY29tcHI9ImJ6aXAyIC05IC1mIgorKyAgICAgICAgICAgICAgICAmJiBjb21wcj0iYnppcDIgLTkgLWYgLSIKKyAJCWVjaG8gIiRvdXRwdXRfZmlsZSIgfCBncmVwIC1xICJcLmx6bWEkIiBcCisgICAgICAgICAgICAgICAgICYmIFsgLXggImB3aGljaCBsem1hIDI+IC9kZXYvbnVsbGAiIF0gXAorLSAgICAgICAgICAgICAgICAmJiBjb21wcj0ibHptYSAtOSAtZiIKKysgICAgICAgICAgICAgICAgJiYgY29tcHI9Imx6bWEgZSAtZDIwIC1sYzEgLWxwMiAtcGIyIC1lb3MgLXNpIC1zbyIKKyAJCWVjaG8gIiRvdXRwdXRfZmlsZSIgfCBncmVwIC1xICJcLnh6JCIgXAorICAgICAgICAgICAgICAgICAmJiBbIC14ICJgd2hpY2ggeHogMj4gL2Rldi9udWxsYCIgXSBcCisgICAgICAgICAgICAgICAgICYmIGNvbXByPSJ4eiAtLWNoZWNrPWNyYzMyIC0tbHptYTI9ZGljdD0xTWlCIgorQEAgLTMyMCw3ICszMjAsNyBAQCBpZiBbICEgLXogJHtvdXRwdXRfZmlsZX0gXTsgdGhlbgorIAlpZiBbICIke2lzX2NwaW9fY29tcHJlc3NlZH0iID0gImNvbXByZXNzZWQiIF07IHRoZW4KKyAJCWNhdCAke2NwaW9fdGZpbGV9ID4gJHtvdXRwdXRfZmlsZX0KKyAJZWxzZQorLQkJKGNhdCAke2NwaW9fdGZpbGV9IHwgJHtjb21wcn0gIC0gPiAke291dHB1dF9maWxlfSkgXAorKwkJKGNhdCAke2NwaW9fdGZpbGV9IHwgJHtjb21wcn0gPiAke291dHB1dF9maWxlfSkgXAorIAkJfHwgKHJtIC1mICR7b3V0cHV0X2ZpbGV9IDsgZmFsc2UpCisgCWZpCisgCVsgLXogJHtjcGlvX2ZpbGV9IF0gJiYgcm0gJHtjcGlvX3RmaWxlfQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvaGFjay01LjQvMjQ5LXVkcC10dW5uZWwtc2VsZWN0aW9uLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvaGFjay01LjQvMjQ5LXVkcC10dW5uZWwtc2VsZWN0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNzQyOTgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC8yNDktdWRwLXR1bm5lbC1zZWxlY3Rpb24ucGF0Y2gKQEAgLTAsMCArMSwxMSBAQAorLS0tIGEvbmV0L2lwdjQvS2NvbmZpZworKysrIGIvbmV0L2lwdjQvS2NvbmZpZworQEAgLTMxNSw3ICszMTUsNyBAQCBjb25maWcgTkVUX0lQVlRJCisgCSAgb24gdG9wLgorIAorIGNvbmZpZyBORVRfVURQX1RVTk5FTAorLQl0cmlzdGF0ZQorKwl0cmlzdGF0ZSAiSVA6IFVEUCB0dW5uZWxpbmcgc3VwcG9ydCIKKyAJc2VsZWN0IE5FVF9JUF9UVU5ORUwKKyAJZGVmYXVsdCBuCisgCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC8yNTAtbmV0ZmlsdGVyX2RlcGVuZHMucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC8yNTAtbmV0ZmlsdGVyX2RlcGVuZHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAzY2I1MwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzI1MC1uZXRmaWx0ZXJfZGVwZW5kcy5wYXRjaApAQCAtMCwwICsxLDI3IEBACitGcm9tOiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CitTdWJqZWN0OiBoYWNrOiBuZXQ6IHJlbW92ZSBib2d1cyBuZXRmaWx0ZXIgZGVwZW5kZW5jaWVzCisKK2xlZGUtY29tbWl0OiA1ODlkMmEzNzdkZWUyN2QyMDZmYzM3MjUzMjUzMDljZjY0OWU0ZGY2CitTaWduZWQtb2ZmLWJ5OiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CistLS0KKyBuZXQvbmV0ZmlsdGVyL0tjb25maWcgfCAyIC0tCisgMSBmaWxlIGNoYW5nZWQsIDIgZGVsZXRpb25zKC0pCisKKy0tLSBhL25ldC9uZXRmaWx0ZXIvS2NvbmZpZworKysrIGIvbmV0L25ldGZpbHRlci9LY29uZmlnCitAQCAtMjI4LDcgKzIyOCw2IEBAIGNvbmZpZyBORl9DT05OVFJBQ0tfRlRQCisgCisgY29uZmlnIE5GX0NPTk5UUkFDS19IMzIzCisgCXRyaXN0YXRlICJILjMyMyBwcm90b2NvbCBzdXBwb3J0IgorLQlkZXBlbmRzIG9uIElQVjYgfHwgSVBWNj1uCisgCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECisgCWhlbHAKKyAJICBILjMyMyBpcyBhIFZvSVAgc2lnbmFsbGluZyBwcm90b2NvbCBmcm9tIElUVS1ULiBBcyBvbmUgb2YgdGhlIG1vc3QKK0BAIC0xMDg4LDcgKzEwODcsNiBAQCBjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9TRUNNQVJLCisgCisgY29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTCisgCXRyaXN0YXRlICciVENQTVNTIiB0YXJnZXQgc3VwcG9ydCcKKy0JZGVwZW5kcyBvbiBJUFY2IHx8IElQVjY9bgorIAlkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW4KKyAJLS0taGVscC0tLQorIAkgIFRoaXMgb3B0aW9uIGFkZHMgYSBgVENQTVNTJyB0YXJnZXQsIHdoaWNoIGFsbG93cyB5b3UgdG8gYWx0ZXIgdGhlCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC8yNTEtc291bmRfa2NvbmZpZy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzI1MS1zb3VuZF9rY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1OTM0MTcKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC8yNTEtc291bmRfa2NvbmZpZy5wYXRjaApAQCAtMCwwICsxLDE5OSBAQAorRnJvbSBkYTNjNTA3MDRmMTQxMzJmNGFkZjgwZDQ4ZTlhNGNkNWQ0NmU1NGM5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm9obiBDcmlzcGluIDxqb2huQHBocm96ZW4ub3JnPgorRGF0ZTogRnJpLCA3IEp1bCAyMDE3IDE3OjA5OjIxICswMjAwCitTdWJqZWN0OiBrY29uZmlnOiBvd3J0IHNwZWNpZmMgZGVwZW5kZW5jaWVzCisKK1NpZ25lZC1vZmYtYnk6IEpvaG4gQ3Jpc3BpbiA8am9obkBwaHJvemVuLm9yZz4KKy0tLQorIGNyeXB0by9LY29uZmlnICAgICAgICB8IDEwICsrKysrLS0tLS0KKyBkcml2ZXJzL2JjbWEvS2NvbmZpZyAgfCAgMSArCisgZHJpdmVycy9zc2IvS2NvbmZpZyAgIHwgIDMgKystCisgbGliL0tjb25maWcgICAgICAgICAgIHwgIDggKysrKy0tLS0KKyBuZXQvbmV0ZmlsdGVyL0tjb25maWcgfCAgMiArLQorIG5ldC93aXJlbGVzcy9LY29uZmlnICB8IDE3ICsrKysrKysrKystLS0tLS0tCisgc291bmQvY29yZS9LY29uZmlnICAgIHwgIDQgKystLQorIDcgZmlsZXMgY2hhbmdlZCwgMjUgaW5zZXJ0aW9ucygrKSwgMjAgZGVsZXRpb25zKC0pCisKKy0tLSBhL2NyeXB0by9LY29uZmlnCisrKysgYi9jcnlwdG8vS2NvbmZpZworQEAgLTMzLDcgKzMzLDcgQEAgY29uZmlnIENSWVBUT19GSVBTCisgCSAgdGhpcyBpcy4KKyAKKyBjb25maWcgQ1JZUFRPX0FMR0FQSQorLQl0cmlzdGF0ZQorKwl0cmlzdGF0ZSAiQUxHQVBJIgorIAlzZWxlY3QgQ1JZUFRPX0FMR0FQSTIKKyAJaGVscAorIAkgIFRoaXMgb3B0aW9uIHByb3ZpZGVzIHRoZSBBUEkgZm9yIGNyeXB0b2dyYXBoaWMgYWxnb3JpdGhtcy4KK0BAIC00Miw3ICs0Miw3IEBAIGNvbmZpZyBDUllQVE9fQUxHQVBJMgorIAl0cmlzdGF0ZQorIAorIGNvbmZpZyBDUllQVE9fQUVBRAorLQl0cmlzdGF0ZQorKwl0cmlzdGF0ZSAiQUVBRCIKKyAJc2VsZWN0IENSWVBUT19BRUFEMgorIAlzZWxlY3QgQ1JZUFRPX0FMR0FQSQorIAorQEAgLTUzLDcgKzUzLDcgQEAgY29uZmlnIENSWVBUT19BRUFEMgorIAlzZWxlY3QgQ1JZUFRPX1JORzIKKyAKKyBjb25maWcgQ1JZUFRPX0JMS0NJUEhFUgorLQl0cmlzdGF0ZQorKwl0cmlzdGF0ZSAiQkxLQ0lQSEVSIgorIAlzZWxlY3QgQ1JZUFRPX0JMS0NJUEhFUjIKKyAJc2VsZWN0IENSWVBUT19BTEdBUEkKKyAKK0BAIC02Myw3ICs2Myw3IEBAIGNvbmZpZyBDUllQVE9fQkxLQ0lQSEVSMgorIAlzZWxlY3QgQ1JZUFRPX1JORzIKKyAKKyBjb25maWcgQ1JZUFRPX0hBU0gKKy0JdHJpc3RhdGUKKysJdHJpc3RhdGUgIkhBU0giCisgCXNlbGVjdCBDUllQVE9fSEFTSDIKKyAJc2VsZWN0IENSWVBUT19BTEdBUEkKKyAKK0BAIC03Miw3ICs3Miw3IEBAIGNvbmZpZyBDUllQVE9fSEFTSDIKKyAJc2VsZWN0IENSWVBUT19BTEdBUEkyCisgCisgY29uZmlnIENSWVBUT19STkcKKy0JdHJpc3RhdGUKKysJdHJpc3RhdGUgIlJORyIKKyAJc2VsZWN0IENSWVBUT19STkcyCisgCXNlbGVjdCBDUllQVE9fQUxHQVBJCisgCistLS0gYS9kcml2ZXJzL2JjbWEvS2NvbmZpZworKysrIGIvZHJpdmVycy9iY21hL0tjb25maWcKK0BAIC0xNiw2ICsxNiw3IEBAIGlmIEJDTUEKKyAjIFN1cHBvcnQgZm9yIEJsb2NrLUkvTy4gU0VMRUNUIHRoaXMgZnJvbSB0aGUgZHJpdmVyIHRoYXQgbmVlZHMgaXQuCisgY29uZmlnIEJDTUFfQkxPQ0tJTworIAlib29sCisrCWRlZmF1bHQgeQorIAorIGNvbmZpZyBCQ01BX0hPU1RfUENJX1BPU1NJQkxFCisgCWJvb2wKKy0tLSBhL2RyaXZlcnMvc3NiL0tjb25maWcKKysrKyBiL2RyaXZlcnMvc3NiL0tjb25maWcKK0BAIC0yOSw2ICsyOSw3IEBAIGNvbmZpZyBTU0JfU1BST00KKyBjb25maWcgU1NCX0JMT0NLSU8KKyAJYm9vbAorIAlkZXBlbmRzIG9uIFNTQgorKwlkZWZhdWx0IHkKKyAKKyBjb25maWcgU1NCX1BDSUhPU1RfUE9TU0lCTEUKKyAJYm9vbAorQEAgLTQ5LDcgKzUwLDcgQEAgY29uZmlnIFNTQl9QQ0lIT1NUCisgY29uZmlnIFNTQl9CNDNfUENJX0JSSURHRQorIAlib29sCisgCWRlcGVuZHMgb24gU1NCX1BDSUhPU1QKKy0JZGVmYXVsdCBuCisrCWRlZmF1bHQgeQorIAorIGNvbmZpZyBTU0JfUENNQ0lBSE9TVF9QT1NTSUJMRQorIAlib29sCistLS0gYS9saWIvS2NvbmZpZworKysrIGIvbGliL0tjb25maWcKK0BAIC00MDIsMTYgKzQwMiwxNiBAQCBjb25maWcgQkNIX0NPTlNUX1QKKyAjIFRleHRzZWFyY2ggc3VwcG9ydCBpcyBzZWxlY3QnZWQgaWYgbmVlZGVkCisgIworIGNvbmZpZyBURVhUU0VBUkNICistCWJvb2wKKysJYm9vbCAiVGV4dHNlYXJjaCBzdXBwb3J0IgorIAorIGNvbmZpZyBURVhUU0VBUkNIX0tNUAorLQl0cmlzdGF0ZQorKwl0cmlzdGF0ZSAiVGV4dHNlYXJjaCBLTVAiCisgCisgY29uZmlnIFRFWFRTRUFSQ0hfQk0KKy0JdHJpc3RhdGUKKysJdHJpc3RhdGUgIlRleHRzZWFyY2ggQk0iCisgCisgY29uZmlnIFRFWFRTRUFSQ0hfRlNNCistCXRyaXN0YXRlCisrCXRyaXN0YXRlICJUZXh0c2VhcmNoIEZTTSIKKyAKKyBjb25maWcgQlRSRUUKKyAJYm9vbAorLS0tIGEvbmV0L25ldGZpbHRlci9LY29uZmlnCisrKysgYi9uZXQvbmV0ZmlsdGVyL0tjb25maWcKK0BAIC0xMSw3ICsxMSw3IEBAIGNvbmZpZyBORVRGSUxURVJfSU5HUkVTUworIAkgIGluZnJhc3RydWN0dXJlLgorIAorIGNvbmZpZyBORVRGSUxURVJfTkVUTElOSworLQl0cmlzdGF0ZQorKwl0cmlzdGF0ZSAiTmV0ZmlsdGVyIE5GTkVUTElOSyBpbnRlcmZhY2UiCisgCisgY29uZmlnIE5FVEZJTFRFUl9GQU1JTFlfQlJJREdFCisgCWJvb2wKKy0tLSBhL25ldC93aXJlbGVzcy9LY29uZmlnCisrKysgYi9uZXQvd2lyZWxlc3MvS2NvbmZpZworQEAgLTEsNiArMSw2IEBACisgIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CisgY29uZmlnIFdJUkVMRVNTX0VYVAorLQlib29sCisrCWJvb2wgIldpcmVsZXNzIGV4dGVuc2lvbnMiCisgCisgY29uZmlnIFdFWFRfQ09SRQorIAlkZWZfYm9vbCB5CitAQCAtMTIsMTAgKzEyLDEwIEBAIGNvbmZpZyBXRVhUX1BST0MKKyAJZGVwZW5kcyBvbiBXRVhUX0NPUkUKKyAKKyBjb25maWcgV0VYVF9TUFkKKy0JYm9vbAorKwlib29sICJXRVhUX1NQWSIKKyAKKyBjb25maWcgV0VYVF9QUklWCistCWJvb2wKKysJYm9vbCAiV0VYVF9QUklWIgorIAorIGNvbmZpZyBDRkc4MDIxMQorIAl0cmlzdGF0ZSAiY2ZnODAyMTEgLSB3aXJlbGVzcyBjb25maWd1cmF0aW9uIEFQSSIKK0BAIC0yMDMsNyArMjAzLDcgQEAgY29uZmlnIENGRzgwMjExX1dFWFRfRVhQT1JUCisgZW5kaWYgIyBDRkc4MDIxMQorIAorIGNvbmZpZyBMSUI4MDIxMQorLQl0cmlzdGF0ZQorKwl0cmlzdGF0ZSAiTElCODAyMTEiCisgCWRlZmF1bHQgbgorIAloZWxwCisgCSAgVGhpcyBvcHRpb25zIGVuYWJsZXMgYSBsaWJyYXJ5IG9mIGNvbW1vbiByb3V0aW5lcyB1c2VkCitAQCAtMjEyLDE3ICsyMTIsMTcgQEAgY29uZmlnIExJQjgwMjExCisgCSAgRHJpdmVycyBzaG91bGQgc2VsZWN0IHRoaXMgdGhlbXNlbHZlcyBpZiBuZWVkZWQuCisgCisgY29uZmlnIExJQjgwMjExX0NSWVBUX1dFUAorLQl0cmlzdGF0ZQorKwl0cmlzdGF0ZSAiTElCODAyMTFfQ1JZUFRfV0VQIgorIAlzZWxlY3QgQ1JZUFRPX0xJQl9BUkM0CisgCisgY29uZmlnIExJQjgwMjExX0NSWVBUX0NDTVAKKy0JdHJpc3RhdGUKKysJdHJpc3RhdGUgIkxJQjgwMjExX0NSWVBUX0NDTVAiCisgCXNlbGVjdCBDUllQVE8KKyAJc2VsZWN0IENSWVBUT19BRVMKKyAJc2VsZWN0IENSWVBUT19DQ00KKyAKKyBjb25maWcgTElCODAyMTFfQ1JZUFRfVEtJUAorLQl0cmlzdGF0ZQorKwl0cmlzdGF0ZSAiTElCODAyMTFfQ1JZUFRfVEtJUCIKKyAJc2VsZWN0IENSWVBUT19MSUJfQVJDNAorIAorIGNvbmZpZyBMSUI4MDIxMV9ERUJVRworLS0tIGEvc291bmQvY29yZS9LY29uZmlnCisrKysgYi9zb3VuZC9jb3JlL0tjb25maWcKK0BAIC0xNyw3ICsxNyw3IEBAIGNvbmZpZyBTTkRfRE1BRU5HSU5FX1BDTQorIAl0cmlzdGF0ZQorIAorIGNvbmZpZyBTTkRfSFdERVAKKy0JdHJpc3RhdGUKKysJdHJpc3RhdGUgIlNvdW5kIGhhcmR3YXJlIHN1cHBvcnQiCisgCisgY29uZmlnIFNORF9TRVFfREVWSUNFCisgCXRyaXN0YXRlCitAQCAtMjcsNyArMjcsNyBAQCBjb25maWcgU05EX1JBV01JREkKKyAJc2VsZWN0IFNORF9TRVFfREVWSUNFIGlmIFNORF9TRVFVRU5DRVIgIT0gbgorIAorIGNvbmZpZyBTTkRfQ09NUFJFU1NfT0ZGTE9BRAorLQl0cmlzdGF0ZQorKwl0cmlzdGF0ZSAiQ29tcHJlc3Npb24gb2ZmbG9hZGluZyBzdXBwb3J0IgorIAorIGNvbmZpZyBTTkRfSkFDSworIAlib29sCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC8yNTktcmVnbWFwX2R5bmFtaWMucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC8yNTktcmVnbWFwX2R5bmFtaWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODEyZTE4MgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzI1OS1yZWdtYXBfZHluYW1pYy5wYXRjaApAQCAtMCwwICsxLDEyNSBAQAorRnJvbSA4MTFkOWUyMjY4YTYyYjgzMGNmZTkzY2Q4YmM5MjlhZmNiOGIxOThiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorRGF0ZTogU2F0LCAxNSBKdWwgMjAxNyAyMToxMjozOCArMDIwMAorU3ViamVjdDoga2VybmVsOiBtb3ZlIHJlZ21hcCBibG9hdCBvdXQgb2YgdGhlIGtlcm5lbCBpbWFnZSBpZiBpdCBpcyBvbmx5IGJlaW5nIHVzZWQgaW4gbW9kdWxlcworCitsZWRlLWNvbW1pdDogOTZmMzkxMTk4MTUwMjgwNzM1ODNlNGZjYTNhOWM1ZmU5MTQxZTk5OAorU2lnbmVkLW9mZi1ieTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorLS0tCisgZHJpdmVycy9iYXNlL3JlZ21hcC9LY29uZmlnICB8IDE1ICsrKysrKysrKystLS0tLQorIGRyaXZlcnMvYmFzZS9yZWdtYXAvTWFrZWZpbGUgfCAxMiArKysrKysrKy0tLS0KKyBkcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ21hcC5jIHwgIDMgKysrCisgaW5jbHVkZS9saW51eC9yZWdtYXAuaCAgICAgICB8ICAyICstCisgNCBmaWxlcyBjaGFuZ2VkLCAyMiBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9iYXNlL3JlZ21hcC9LY29uZmlnCisrKysgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWcKK0BAIC00LDkgKzQsOCBAQAorICMgc3Vic3lzdGVtcyBzaG91bGQgc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBzeW1ib2xzLgorIAorIGNvbmZpZyBSRUdNQVAKKy0JZGVmYXVsdCB5IGlmIChSRUdNQVBfSTJDIHx8IFJFR01BUF9TUEkgfHwgUkVHTUFQX1NQTUkgfHwgUkVHTUFQX1cxIHx8IFJFR01BUF9BQzk3IHx8IFJFR01BUF9NTUlPIHx8IFJFR01BUF9JUlEgfHwgUkVHTUFQX1NDQ0IgfHwgUkVHTUFQX0kzQykKKyAJc2VsZWN0IElSUV9ET01BSU4gaWYgUkVHTUFQX0lSUQorLQlib29sCisrCXRyaXN0YXRlCisgCisgY29uZmlnIFJFR0NBQ0hFX0NPTVBSRVNTRUQKKyAJc2VsZWN0IExaT19DT01QUkVTUworQEAgLTE4LDM4ICsxNyw0OSBAQCBjb25maWcgUkVHTUFQX0FDOTcKKyAKKyBjb25maWcgUkVHTUFQX0kyQworIAl0cmlzdGF0ZQorKwlzZWxlY3QgUkVHTUFQCisgCWRlcGVuZHMgb24gSTJDCisgCisgY29uZmlnIFJFR01BUF9TTElNQlVTCisgCXRyaXN0YXRlCisrCXNlbGVjdCBSRUdNQVAKKyAJZGVwZW5kcyBvbiBTTElNQlVTCisgCisgY29uZmlnIFJFR01BUF9TUEkKKyAJdHJpc3RhdGUKKysJc2VsZWN0IFJFR01BUAorKwlkZXBlbmRzIG9uIFNQSV9NQVNURVIKKyAJZGVwZW5kcyBvbiBTUEkKKyAKKyBjb25maWcgUkVHTUFQX1NQTUkKKyAJdHJpc3RhdGUKKysJc2VsZWN0IFJFR01BUAorIAlkZXBlbmRzIG9uIFNQTUkKKyAKKyBjb25maWcgUkVHTUFQX1cxCisgCXRyaXN0YXRlCisrCXNlbGVjdCBSRUdNQVAKKyAJZGVwZW5kcyBvbiBXMQorIAorIGNvbmZpZyBSRUdNQVBfTU1JTworIAl0cmlzdGF0ZQorKwlzZWxlY3QgUkVHTUFQCisgCisgY29uZmlnIFJFR01BUF9JUlEKKyAJYm9vbAorKwlzZWxlY3QgUkVHTUFQCisgCisgY29uZmlnIFJFR01BUF9TT1VORFdJUkUKKyAJdHJpc3RhdGUKKysJc2VsZWN0IFJFR01BUAorIAlkZXBlbmRzIG9uIFNPVU5EV0lSRQorIAorIGNvbmZpZyBSRUdNQVBfU0NDQgorIAl0cmlzdGF0ZQorKwlzZWxlY3QgUkVHTUFQCisgCWRlcGVuZHMgb24gSTJDCisgCisgY29uZmlnIFJFR01BUF9JM0MKKyAJdHJpc3RhdGUKKysJc2VsZWN0IFJFR01BUAorIAlkZXBlbmRzIG9uIEkzQworLS0tIGEvZHJpdmVycy9iYXNlL3JlZ21hcC9NYWtlZmlsZQorKysrIGIvZHJpdmVycy9iYXNlL3JlZ21hcC9NYWtlZmlsZQorQEAgLTIsMTAgKzIsMTQgQEAKKyAjIEZvciBpbmNsdWRlL3RyYWNlL2RlZmluZV90cmFjZS5oIHRvIGluY2x1ZGUgdHJhY2UuaAorIENGTEFHU19yZWdtYXAubyA6PSAtSSQoc3JjKQorIAorLW9iai0kKENPTkZJR19SRUdNQVApICs9IHJlZ21hcC5vIHJlZ2NhY2hlLm8KKy1vYmotJChDT05GSUdfUkVHTUFQKSArPSByZWdjYWNoZS1yYnRyZWUubyByZWdjYWNoZS1mbGF0Lm8KKy1vYmotJChDT05GSUdfUkVHQ0FDSEVfQ09NUFJFU1NFRCkgKz0gcmVnY2FjaGUtbHpvLm8KKy1vYmotJChDT05GSUdfREVCVUdfRlMpICs9IHJlZ21hcC1kZWJ1Z2ZzLm8KKytyZWdtYXAtY29yZS1vYmpzID0gcmVnbWFwLm8gcmVnY2FjaGUubyByZWdjYWNoZS1yYnRyZWUubyByZWdjYWNoZS1mbGF0Lm8KKytpZmRlZiBDT05GSUdfREVCVUdfRlMKKytyZWdtYXAtY29yZS1vYmpzICs9IHJlZ21hcC1kZWJ1Z2ZzLm8KKytlbmRpZgorK2lmZGVmIENPTkZJR19SRUdDQUNIRV9DT01QUkVTU0VECisrcmVnbWFwLWNvcmUtb2JqcyArPSByZWdjYWNoZS1sem8ubworK2VuZGlmCisrb2JqLSQoQ09ORklHX1JFR01BUCkgKz0gcmVnbWFwLWNvcmUubworIG9iai0kKENPTkZJR19SRUdNQVBfQUM5NykgKz0gcmVnbWFwLWFjOTcubworIG9iai0kKENPTkZJR19SRUdNQVBfSTJDKSArPSByZWdtYXAtaTJjLm8KKyBvYmotJChDT05GSUdfUkVHTUFQX1NMSU1CVVMpICs9IHJlZ21hcC1zbGltYnVzLm8KKy0tLSBhL2RyaXZlcnMvYmFzZS9yZWdtYXAvcmVnbWFwLmMKKysrKyBiL2RyaXZlcnMvYmFzZS9yZWdtYXAvcmVnbWFwLmMKK0BAIC05LDYgKzksNyBAQAorICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorICNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KKysjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisgI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisgI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorICNpbmNsdWRlIDxsaW51eC9vZi5oPgorQEAgLTMxMTgsMyArMzExOSw1IEBAIHN0YXRpYyBpbnQgX19pbml0IHJlZ21hcF9pbml0Y2FsbCh2b2lkKQorIAlyZXR1cm4gMDsKKyB9CisgcG9zdGNvcmVfaW5pdGNhbGwocmVnbWFwX2luaXRjYWxsKTsKKysKKytNT0RVTEVfTElDRU5TRSgiR1BMIik7CistLS0gYS9pbmNsdWRlL2xpbnV4L3JlZ21hcC5oCisrKysgYi9pbmNsdWRlL2xpbnV4L3JlZ21hcC5oCitAQCAtMTg1LDcgKzE4NSw3IEBAIHN0cnVjdCByZWdfc2VxdWVuY2UgeworIAlwb2xscmV0ID86ICgoY29uZCkgPyAwIDogLUVUSU1FRE9VVCk7IFwKKyB9KQorIAorLSNpZmRlZiBDT05GSUdfUkVHTUFQCisrI2lmIElTX1JFQUNIQUJMRShDT05GSUdfUkVHTUFQKQorIAorIGVudW0gcmVnbWFwX2VuZGlhbiB7CisgCS8qIFVuc3BlY2lmaWVkIC0+IDAgLT4gQmFja3dhcmRzIGNvbXBhdGlibGUgZGVmYXVsdCAqLwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvaGFjay01LjQvMjYwLWNyeXB0b190ZXN0X2RlcGVuZGVuY2llcy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzI2MC1jcnlwdG9fdGVzdF9kZXBlbmRlbmNpZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFiMGI4NQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzI2MC1jcnlwdG9fdGVzdF9kZXBlbmRlbmNpZXMucGF0Y2gKQEAgLTAsMCArMSw1MiBAQAorRnJvbSBmZDE3OTliMGJmNWVmYTQ2ZGQzZTZkZmJiZjM5NTU1NjQ4MDdlNTA4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorRGF0ZTogRnJpLCA3IEp1bCAyMDE3IDE3OjEyOjUxICswMjAwCitTdWJqZWN0OiBrZXJuZWw6IHByZXZlbnQgY3J5cHRvbWdyIGZyb20gcHVsbGluZyBpbiB1c2VsZXNzIGV4dHJhIGRlcGVuZGVuY2llcyBmb3IgdGVzdHMgdGhhdCBhcmUgbm90IHJ1bgorCitSZWR1Y2VzIGtlcm5lbCBzaXplIGFmdGVyIExaTUEgYnkgYWJvdXQgNWsgb24gTUlQUworCitsZWRlLWNvbW1pdDogMDQ0YzMxNjE2N2UwNzY0NzlhMzQ0YzU5OTA1ZTViNDM1Yjg0YTc3ZgorU2lnbmVkLW9mZi1ieTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorLS0tCisgY3J5cHRvL0tjb25maWcgICB8IDEzICsrKysrKy0tLS0tLS0KKyBjcnlwdG8vYWxnYm9zcy5jIHwgIDQgKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKKworLS0tIGEvY3J5cHRvL0tjb25maWcKKysrKyBiL2NyeXB0by9LY29uZmlnCitAQCAtMTIwLDEzICsxMjAsMTMgQEAgY29uZmlnIENSWVBUT19NQU5BR0VSCisgCSAgY2JjKGFlcykuCisgCisgY29uZmlnIENSWVBUT19NQU5BR0VSMgorLQlkZWZfdHJpc3RhdGUgQ1JZUFRPX01BTkFHRVIgfHwgKENSWVBUT19NQU5BR0VSIT1uICYmIENSWVBUT19BTEdBUEk9eSkKKy0Jc2VsZWN0IENSWVBUT19BRUFEMgorLQlzZWxlY3QgQ1JZUFRPX0hBU0gyCistCXNlbGVjdCBDUllQVE9fQkxLQ0lQSEVSMgorLQlzZWxlY3QgQ1JZUFRPX0FLQ0lQSEVSMgorLQlzZWxlY3QgQ1JZUFRPX0tQUDIKKy0Jc2VsZWN0IENSWVBUT19BQ09NUDIKKysJZGVmX3RyaXN0YXRlIENSWVBUT19NQU5BR0VSIHx8IChDUllQVE9fTUFOQUdFUiE9biAmJiBDUllQVE9fQUxHQVBJPXkgJiYgIUNSWVBUT19NQU5BR0VSX0RJU0FCTEVfVEVTVFMpCisrCXNlbGVjdCBDUllQVE9fQUVBRDIgaWYgIUNSWVBUT19NQU5BR0VSX0RJU0FCTEVfVEVTVFMKKysJc2VsZWN0IENSWVBUT19IQVNIMiBpZiAhQ1JZUFRPX01BTkFHRVJfRElTQUJMRV9URVNUUworKwlzZWxlY3QgQ1JZUFRPX0JMS0NJUEhFUjIgaWYgIUNSWVBUT19NQU5BR0VSX0RJU0FCTEVfVEVTVFMKKysJc2VsZWN0IENSWVBUT19BS0NJUEhFUjIgaWYgIUNSWVBUT19NQU5BR0VSX0RJU0FCTEVfVEVTVFMKKysJc2VsZWN0IENSWVBUT19LUFAyIGlmICFDUllQVE9fTUFOQUdFUl9ESVNBQkxFX1RFU1RTCisrCXNlbGVjdCBDUllQVE9fQUNPTVAyIGlmICFDUllQVE9fTUFOQUdFUl9ESVNBQkxFX1RFU1RTCisgCisgY29uZmlnIENSWVBUT19VU0VSCisgCXRyaXN0YXRlICJVc2Vyc3BhY2UgY3J5cHRvZ3JhcGhpYyBhbGdvcml0aG0gY29uZmlndXJhdGlvbiIKKy0tLSBhL2NyeXB0by9hbGdib3NzLmMKKysrKyBiL2NyeXB0by9hbGdib3NzLmMKK0BAIC0yNDAsOCArMjQwLDEyIEBAIHN0YXRpYyBpbnQgY3J5cHRvbWdyX3NjaGVkdWxlX3Rlc3Qoc3RydWMKKyAJdHlwZSA9IGFsZy0+Y3JhX2ZsYWdzOworIAorIAkvKiBEbyBub3QgdGVzdCBpbnRlcm5hbCBhbGdvcml0aG1zLiAqLworKyNpZmRlZiBDT05GSUdfQ1JZUFRPX01BTkFHRVJfRElTQUJMRV9URVNUUworKwl0eXBlIHw9IENSWVBUT19BTEdfVEVTVEVEOworKyNlbHNlCisgCWlmICh0eXBlICYgQ1JZUFRPX0FMR19JTlRFUk5BTCkKKyAJCXR5cGUgfD0gQ1JZUFRPX0FMR19URVNURUQ7CisrI2VuZGlmCisgCisgCXBhcmFtLT50eXBlID0gdHlwZTsKKyAKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzI2MC1saWItYXJjNC11bmhpZGUucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC8yNjAtbGliLWFyYzQtdW5oaWRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NjY4YWMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC8yNjAtbGliLWFyYzQtdW5oaWRlLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1RoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gc2VsZWN0IENPTkZJR19DUllQVE9fTElCX0FSQzQgZGlyZWN0bHkuIFdlIAorbmVlZCB0aGlzIHRvIGJlIGFibGUgdG8gY29tcGlsZSB0aGlzIGludG8gdGhlIGtlcm5lbCBhbmQgbWFrZSB1c2Ugb2YgaXQgCitmcm9tIGJhY2twb3J0cy4KKworLS0tIGEvbGliL2NyeXB0by9LY29uZmlnCisrKysgYi9saWIvY3J5cHRvL0tjb25maWcKK0BAIC02LDcgKzYsNyBAQCBjb25maWcgQ1JZUFRPX0xJQl9BRVMKKyAJdHJpc3RhdGUKKyAKKyBjb25maWcgQ1JZUFRPX0xJQl9BUkM0CistCXRyaXN0YXRlCisrCXRyaXN0YXRlICJBUkM0IGNpcGhlciBsaWJyYXJ5IgorIAorIGNvbmZpZyBDUllQVE9fQVJDSF9IQVZFX0xJQl9CTEFLRTJTCisgCXRyaXN0YXRlCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC8yODAtcmZraWxsLXN0dWJzLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvaGFjay01LjQvMjgwLXJma2lsbC1zdHVicy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTQ4YWVhCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvaGFjay01LjQvMjgwLXJma2lsbC1zdHVicy5wYXRjaApAQCAtMCwwICsxLDg0IEBACitGcm9tIDIzNmMxYWNkZmVmNTk1ODAxMGFjOTgxNGE5ODcyZTBhNDZmZDc4ZWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKb2huIENyaXNwaW4gPGpvaG5AcGhyb3plbi5vcmc+CitEYXRlOiBGcmksIDcgSnVsIDIwMTcgMTc6MTM6NDQgKzAyMDAKK1N1YmplY3Q6IHJma2lsbDogYWRkIGZha2UgcmZraWxsIHN1cHBvcnQKKworYWxsb3cgYnVpbGRpbmcgb2YgbW9kdWxlcyBkZXBlbmRpbmcgb24gUkZLSUxMIGV2ZW4gaWYgUkZLSUxMIGlzIG5vdCBlbmFibGVkLgorCitTaWduZWQtb2ZmLWJ5OiBKb2huIENyaXNwaW4gPGpvaG5AcGhyb3plbi5vcmc+CistLS0KKyBpbmNsdWRlL2xpbnV4L3Jma2lsbC5oIHwgIDIgKy0KKyBuZXQvTWFrZWZpbGUgICAgICAgICAgIHwgIDIgKy0KKyBuZXQvcmZraWxsL0tjb25maWcgICAgIHwgMTQgKysrKysrKysrLS0tLS0KKyBuZXQvcmZraWxsL01ha2VmaWxlICAgIHwgIDIgKy0KKyA0IGZpbGVzIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCisKKy0tLSBhL2luY2x1ZGUvbGludXgvcmZraWxsLmgKKysrKyBiL2luY2x1ZGUvbGludXgvcmZraWxsLmgKK0BAIC02NCw3ICs2NCw3IEBAIHN0cnVjdCByZmtpbGxfb3BzIHsKKyAJaW50CSgqc2V0X2Jsb2NrKSh2b2lkICpkYXRhLCBib29sIGJsb2NrZWQpOworIH07CisgCistI2lmIGRlZmluZWQoQ09ORklHX1JGS0lMTCkgfHwgZGVmaW5lZChDT05GSUdfUkZLSUxMX01PRFVMRSkKKysjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMX0ZVTEwpIHx8IGRlZmluZWQoQ09ORklHX1JGS0lMTF9GVUxMX01PRFVMRSkKKyAvKioKKyAgKiByZmtpbGxfYWxsb2MgLSBBbGxvY2F0ZSByZmtpbGwgc3RydWN0dXJlCisgICogQG5hbWU6IG5hbWUgb2YgdGhlIHN0cnVjdCAtLSB0aGUgc3RyaW5nIGlzIG5vdCBjb3BpZWQgaW50ZXJuYWxseQorLS0tIGEvbmV0L01ha2VmaWxlCisrKysgYi9uZXQvTWFrZWZpbGUKK0BAIC01Myw3ICs1Myw3IEBAIG9iai0kKENPTkZJR19USVBDKQkJKz0gdGlwYy8KKyBvYmotJChDT05GSUdfTkVUTEFCRUwpCQkrPSBuZXRsYWJlbC8KKyBvYmotJChDT05GSUdfSVVDVikJCSs9IGl1Y3YvCisgb2JqLSQoQ09ORklHX1NNQykJCSs9IHNtYy8KKy1vYmotJChDT05GSUdfUkZLSUxMKQkJKz0gcmZraWxsLworK29iai0kKENPTkZJR19SRktJTExfRlVMTCkJKz0gcmZraWxsLworIG9iai0kKENPTkZJR19ORVRfOVApCQkrPSA5cC8KKyBvYmotJChDT05GSUdfQ0FJRikJCSs9IGNhaWYvCisgaWZuZXEgKCQoQ09ORklHX0RDQiksKQorLS0tIGEvbmV0L3Jma2lsbC9LY29uZmlnCisrKysgYi9uZXQvcmZraWxsL0tjb25maWcKK0BAIC0yLDcgKzIsMTEgQEAKKyAjCisgIyBSRiBzd2l0Y2ggc3Vic3lzdGVtIGNvbmZpZ3VyYXRpb24KKyAjCistbWVudWNvbmZpZyBSRktJTEwKKytjb25maWcgUkZLSUxMCisrCWJvb2wKKysJZGVmYXVsdCB5CisrCisrbWVudWNvbmZpZyBSRktJTExfRlVMTAorIAl0cmlzdGF0ZSAiUkYgc3dpdGNoIHN1YnN5c3RlbSBzdXBwb3J0IgorIAloZWxwCisgCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBoYXZlIGNvbnRyb2wgb3ZlciBSRiBzd2l0Y2hlcworQEAgLTE0LDE5ICsxOCwxOSBAQCBtZW51Y29uZmlnIFJGS0lMTAorICMgTEVEIHRyaWdnZXIgc3VwcG9ydAorIGNvbmZpZyBSRktJTExfTEVEUworIAlib29sCistCWRlcGVuZHMgb24gUkZLSUxMCisrCWRlcGVuZHMgb24gUkZLSUxMX0ZVTEwKKyAJZGVwZW5kcyBvbiBMRURTX1RSSUdHRVJTID0geSB8fCBSRktJTEwgPSBMRURTX1RSSUdHRVJTCisgCWRlZmF1bHQgeQorIAorIGNvbmZpZyBSRktJTExfSU5QVVQKKyAJYm9vbCAiUkYgc3dpdGNoIGlucHV0IHN1cHBvcnQiIGlmIEVYUEVSVAorLQlkZXBlbmRzIG9uIFJGS0lMTAorKwlkZXBlbmRzIG9uIFJGS0lMTF9GVUxMCisgCWRlcGVuZHMgb24gSU5QVVQgPSB5IHx8IFJGS0lMTCA9IElOUFVUCisgCWRlZmF1bHQgeSBpZiAhRVhQRVJUCisgCisgY29uZmlnIFJGS0lMTF9HUElPCisgCXRyaXN0YXRlICJHUElPIFJGS0lMTCBkcml2ZXIiCistCWRlcGVuZHMgb24gUkZLSUxMCisrCWRlcGVuZHMgb24gUkZLSUxMX0ZVTEwKKyAJZGVwZW5kcyBvbiBHUElPTElCIHx8IENPTVBJTEVfVEVTVAorIAlkZWZhdWx0IG4KKyAJaGVscAorLS0tIGEvbmV0L3Jma2lsbC9NYWtlZmlsZQorKysrIGIvbmV0L3Jma2lsbC9NYWtlZmlsZQorQEAgLTUsNSArNSw1IEBACisgCisgcmZraWxsLXkJCQkrPSBjb3JlLm8KKyByZmtpbGwtJChDT05GSUdfUkZLSUxMX0lOUFVUKQkrPSBpbnB1dC5vCistb2JqLSQoQ09ORklHX1JGS0lMTCkJCSs9IHJma2lsbC5vCisrb2JqLSQoQ09ORklHX1JGS0lMTF9GVUxMKQkrPSByZmtpbGwubworIG9iai0kKENPTkZJR19SRktJTExfR1BJTykJKz0gcmZraWxsLWdwaW8ubwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvaGFjay01LjQvMzAwLU1JUFMtcjRrX2NhY2hlLXVzZS1tb3JlLWVmZmljaWVudC1jYWNoZS1ibGFzdC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzMwMC1NSVBTLXI0a19jYWNoZS11c2UtbW9yZS1lZmZpY2llbnQtY2FjaGUtYmxhc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVkMDhhNQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzMwMC1NSVBTLXI0a19jYWNoZS11c2UtbW9yZS1lZmZpY2llbnQtY2FjaGUtYmxhc3QucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRnJvbTogQmVuIE1lbmNoYWNhIDxiZW4ubWVuY2hhY2FAcWNhLnF1YWxjb21tLmNvbT4KK0RhdGU6IEZyaSwgNyBKdW4gMjAxMyAxODozNToyMiAtMDUwMAorU3ViamVjdDogTUlQUzogcjRrX2NhY2hlOiB1c2UgbW9yZSBlZmZpY2llbnQgY2FjaGUgYmxhc3QKKworT3B0aW1pemUgdGhlIGNvbXBpbGVyIG91dHB1dCBmb3IgbGFyZ2VyIGNhY2hlIGJsYXN0IGNhc2VzIHRoYXQgYXJlCitjb21tb24gZm9yIERNQS1iYXNlZCBuZXR3b3JraW5nLgorCitTaWduZWQtb2ZmLWJ5OiBCZW4gTWVuY2hhY2EgPGJlbi5tZW5jaGFjYUBxY2EucXVhbGNvbW0uY29tPgorU2lnbmVkLW9mZi1ieTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorLS0tCistLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcjRrY2FjaGUuaAorKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3I0a2NhY2hlLmgKK0BAIC02MTcsMTQgKzYxNyw0NiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHJvdCMjZXh0cmEjI2JsYXN0XyMjCisgCQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgZW5kKQlcCisgewkJCQkJCQkJCVwKKyAJdW5zaWduZWQgbG9uZyBsc2l6ZSA9IGNwdV8jI2Rlc2MjI19saW5lX3NpemUoKTsJCQlcCisrCXVuc2lnbmVkIGxvbmcgbHNpemVfMiA9IGxzaXplICogMjsJCQkJXAorKwl1bnNpZ25lZCBsb25nIGxzaXplXzMgPSBsc2l6ZSAqIDM7CQkJCVwKKysJdW5zaWduZWQgbG9uZyBsc2l6ZV80ID0gbHNpemUgKiA0OwkJCQlcCisrCXVuc2lnbmVkIGxvbmcgbHNpemVfNSA9IGxzaXplICogNTsJCQkJXAorKwl1bnNpZ25lZCBsb25nIGxzaXplXzYgPSBsc2l6ZSAqIDY7CQkJCVwKKysJdW5zaWduZWQgbG9uZyBsc2l6ZV83ID0gbHNpemUgKiA3OwkJCQlcCisrCXVuc2lnbmVkIGxvbmcgbHNpemVfOCA9IGxzaXplICogODsJCQkJXAorIAl1bnNpZ25lZCBsb25nIGFkZHIgPSBzdGFydCAmIH4obHNpemUgLSAxKTsJCQlcCistCXVuc2lnbmVkIGxvbmcgYWVuZCA9IChlbmQgLSAxKSAmIH4obHNpemUgLSAxKTsJCQlcCisrCXVuc2lnbmVkIGxvbmcgYWVuZCA9IChlbmQgKyBsc2l6ZSAtIDEpICYgfihsc2l6ZSAtIDEpOwkJXAorKwlpbnQgbGluZXMgPSAoYWVuZCAtIGFkZHIpIC8gbHNpemU7CQkJCVwKKyAJCQkJCQkJCQlcCistCXdoaWxlICgxKSB7CQkJCQkJCVwKKysJd2hpbGUgKGxpbmVzID49IDgpIHsJCQkJCQlcCisrCQlwcm90IyNjYWNoZV9vcChoaXRvcCwgYWRkcik7CQkJCVwKKysJCXByb3QjI2NhY2hlX29wKGhpdG9wLCBhZGRyICsgbHNpemUpOwkJCVwKKysJCXByb3QjI2NhY2hlX29wKGhpdG9wLCBhZGRyICsgbHNpemVfMik7CQkJXAorKwkJcHJvdCMjY2FjaGVfb3AoaGl0b3AsIGFkZHIgKyBsc2l6ZV8zKTsJCQlcCisrCQlwcm90IyNjYWNoZV9vcChoaXRvcCwgYWRkciArIGxzaXplXzQpOwkJCVwKKysJCXByb3QjI2NhY2hlX29wKGhpdG9wLCBhZGRyICsgbHNpemVfNSk7CQkJXAorKwkJcHJvdCMjY2FjaGVfb3AoaGl0b3AsIGFkZHIgKyBsc2l6ZV82KTsJCQlcCisrCQlwcm90IyNjYWNoZV9vcChoaXRvcCwgYWRkciArIGxzaXplXzcpOwkJCVwKKysJCWFkZHIgKz0gbHNpemVfODsJCQkJCVwKKysJCWxpbmVzIC09IDg7CQkJCQkJXAorKwl9CQkJCQkJCQlcCisrCQkJCQkJCQkJXAorKwlpZiAobGluZXMgJiAweDQpIHsJCQkJCQlcCisrCQlwcm90IyNjYWNoZV9vcChoaXRvcCwgYWRkcik7CQkJCVwKKysJCXByb3QjI2NhY2hlX29wKGhpdG9wLCBhZGRyICsgbHNpemUpOwkJCVwKKysJCXByb3QjI2NhY2hlX29wKGhpdG9wLCBhZGRyICsgbHNpemVfMik7CQkJXAorKwkJcHJvdCMjY2FjaGVfb3AoaGl0b3AsIGFkZHIgKyBsc2l6ZV8zKTsJCQlcCisrCQlhZGRyICs9IGxzaXplXzQ7CQkJCQlcCisrCX0JCQkJCQkJCVwKKysJCQkJCQkJCQlcCisrCWlmIChsaW5lcyAmIDB4MikgewkJCQkJCVwKKysJCXByb3QjI2NhY2hlX29wKGhpdG9wLCBhZGRyKTsJCQkJXAorKwkJcHJvdCMjY2FjaGVfb3AoaGl0b3AsIGFkZHIgKyBsc2l6ZSk7CQkJXAorKwkJYWRkciArPSBsc2l6ZV8yOwkJCQkJXAorKwl9CQkJCQkJCQlcCisrCQkJCQkJCQkJXAorKwlpZiAobGluZXMgJiAweDEpIHsJCQkJCQlcCisgCQlwcm90IyNjYWNoZV9vcChoaXRvcCwgYWRkcik7CQkJCVwKKy0JCWlmIChhZGRyID09IGFlbmQpCQkJCQlcCistCQkJYnJlYWs7CQkJCQkJXAorLQkJYWRkciArPSBsc2l6ZTsJCQkJCQlcCisgCX0JCQkJCQkJCVwKKyB9CisgCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC8zMDEtbWlwc19pbWFnZV9jbWRsaW5lX2hhY2sucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC8zMDEtbWlwc19pbWFnZV9jbWRsaW5lX2hhY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFiNjM0OQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzMwMS1taXBzX2ltYWdlX2NtZGxpbmVfaGFjay5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tOiBKb2huIENyaXNwaW4gPGpvaG5AcGhyb3plbi5vcmc+CitTdWJqZWN0OiBoYWNrOiBrZXJuZWw6IGFkZCBnZW5lcmljIGltYWdlX2NtZGxpbmUgaGFjayB0byBNSVBTIHRhcmdldHMKKworbGVkZS1jb21taXQ6IGQ1OWY1YjNhOTg3YTQ4NTA4MjU3YTBkZGJhZWFkYzc5MDlmOWY5NzYKK1NpZ25lZC1vZmYtYnk6IEdhYm9yIEp1aG9zIDxqdWhvc2dAb3BlbndydC5vcmc+CistLS0KKyBhcmNoL21pcHMvS2NvbmZpZyAgICAgICB8IDQgKysrKworIGFyY2gvbWlwcy9rZXJuZWwvaGVhZC5TIHwgNiArKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKykKKworLS0tIGEvYXJjaC9taXBzL0tjb25maWcKKysrKyBiL2FyY2gvbWlwcy9LY29uZmlnCitAQCAtMTE2Miw2ICsxMTYyLDEwIEBAIGNvbmZpZyBTWU5DX1I0SworIGNvbmZpZyBNSVBTX01BQ0hJTkUKKyAJZGVmX2Jvb2wgbgorIAorK2NvbmZpZyBJTUFHRV9DTURMSU5FX0hBQ0sKKysJYm9vbCAiT3BlbldydCBzcGVjaWZpYyBpbWFnZSBjb21tYW5kIGxpbmUgaGFjayIKKysJZGVmYXVsdCBuCisrCisgY29uZmlnIE5PX0lPUE9SVF9NQVAKKyAJZGVmX2Jvb2wgbgorIAorLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9oZWFkLlMKKysrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaGVhZC5TCitAQCAtNzksNiArNzksMTIgQEAgRkVYUE9SVChfX2tlcm5lbF9lbnRyeSkKKyAJaglrZXJuZWxfZW50cnkKKyAjZW5kaWYgLyogQ09ORklHX0JPT1RfUkFXICovCisgCisrI2lmZGVmIENPTkZJR19JTUFHRV9DTURMSU5FX0hBQ0sKKysJLmFzY2lpCSJDTURMSU5FOiIKKytFWFBPUlQoX19pbWFnZV9jbWRsaW5lKQorKwkuZmlsbAkweDQwMAorKyNlbmRpZiAvKiBDT05GSUdfSU1BR0VfQ01ETElORV9IQUNLICovCisrCisgCV9fUkVGCisgCisgTkVTVEVEKGtlcm5lbF9lbnRyeSwgMTYsIHNwKQkJCSMga2VybmVsIGVudHJ5IHBvaW50CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC8zMjEtcG93ZXJwY19jcnRzYXZyZXNfcHJlcmVxLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvaGFjay01LjQvMzIxLXBvd2VycGNfY3J0c2F2cmVzX3ByZXJlcS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTkxNzA1Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvaGFjay01LjQvMzIxLXBvd2VycGNfY3J0c2F2cmVzX3ByZXJlcS5wYXRjaApAQCAtMCwwICsxLDM5IEBACitGcm9tIDEwN2MwOTY0Y2I4ZGI3Y2EyOGFjNTE5OTQyNjQxNGZkYWIzYzI3NGQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiQWxleGFuZHJvcyBDLiBDb3Vsb3VtYmlzIiA8YWxleEBvem8uY29tPgorRGF0ZTogRnJpLCA3IEp1bCAyMDE3IDE3OjE0OjUxICswMjAwCitTdWJqZWN0OiBoYWNrOiBhcmNoOiBwb3dlcnBjOiBkcm9wIHJlZ2lzdGVyIHNhdmUvcmVzdG9yZSBsaWJyYXJ5IGZyb20gbW9kdWxlcworCitVcHN0cmVhbSBHQ0MgdXNlcyBhIGxpYmdjYyBmdW5jdGlvbiBmb3Igc2F2aW5nL3Jlc3RvcmluZyByZWdpc3RlcnMuIFRoaXMKK21ha2VzIHRoZSBjb2RlIGJpZ2dlciwgYW5kIHVwc3RyZWFtIGtlcm5lbHMgbmVlZCB0byBjYXJyeSB0aGF0IGZ1bmN0aW9uCitmb3IgZXZlcnkgc2luZ2xlIGtlcm5lbCBtb2R1bGUuIE91ciBHQ0MgaXMgcGF0Y2hlZCB0byBhdm9pZCB0aG9zZQorcmVmZXJlbmNlcywgc28gd2UgY2FuIGRyb3AgdGhlIGV4dHJhIGJsb2F0IGZvciBtb2R1bGVzLgorCitsZWRlLWNvbW1pdDogZThlMTA4NDY1NGY1MDkwNGU2YmY3N2I3MGIyZGUzZjEzN2Q3YjNlYworU2lnbmVkLW9mZi1ieTogQWxleGFuZHJvcyBDLiBDb3Vsb3VtYmlzIDxhbGV4QG96by5jb20+CistLS0KKyBhcmNoL3Bvd2VycGMvTWFrZWZpbGUgfCAxIC0KKyAxIGZpbGUgY2hhbmdlZCwgMSBkZWxldGlvbigtKQorCistLS0gYS9hcmNoL3Bvd2VycGMvTWFrZWZpbGUKKysrKyBiL2FyY2gvcG93ZXJwYy9NYWtlZmlsZQorQEAgLTYxLDIwICs2MSw2IEBAIG1hY2hpbmUtJChDT05GSUdfUFBDNjQpICs9IDY0CisgbWFjaGluZS0kKENPTkZJR19DUFVfTElUVExFX0VORElBTikgKz0gbGUKKyBVVFNfTUFDSElORSA6PSAkKHN1YnN0ICQoc3BhY2UpLCwkKG1hY2hpbmUteSkpCisgCistIyBYWFggVGhpcyBuZWVkcyB0byBiZSBiZWZvcmUgd2Ugb3ZlcnJpZGUgTEQgYmVsb3cKKy1pZmRlZiBDT05GSUdfUFBDMzIKKy1LQlVJTERfTERGTEFHU19NT0RVTEUgKz0gYXJjaC9wb3dlcnBjL2xpYi9jcnRzYXZyZXMubworLWVsc2UKKy1LQlVJTERfTERTX01PRFVMRSArPSAkKHNyY3RyZWUpL2FyY2gvcG93ZXJwYy9rZXJuZWwvbW9kdWxlLmxkcworLWlmZXEgKCQoY2FsbCBsZC1pZnZlcnNpb24sIC1nZSwgMjI1MDAwMDAwLCB5KSx5KQorLSMgSGF2ZSB0aGUgbGlua2VyIHByb3ZpZGUgc2ZwciBpZiBwb3NzaWJsZS4KKy0jIFRoZXJlIGlzIGEgY29ycmVzcG9uZGluZyB0ZXN0IGluIGFyY2gvcG93ZXJwYy9saWIvTWFrZWZpbGUKKy1LQlVJTERfTERGTEFHU19NT0RVTEUgKz0gLS1zYXZlLXJlc3RvcmUtZnVuY3MKKy1lbHNlCistS0JVSUxEX0xERkxBR1NfTU9EVUxFICs9IGFyY2gvcG93ZXJwYy9saWIvY3J0c2F2cmVzLm8KKy1lbmRpZgorLWVuZGlmCistCisgaWZkZWYgQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOCisgS0JVSUxEX0NGTEFHUwkrPSAtbWxpdHRsZS1lbmRpYW4KKyBLQlVJTERfTERGTEFHUwkrPSAtRUwKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzQwMC11bmxvY2tfbXgyNWw2NDA2ZV93aXRoXzRiaXRfYmxvY2tfcHJvdGVjdC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzQwMC11bmxvY2tfbXgyNWw2NDA2ZV93aXRoXzRiaXRfYmxvY2tfcHJvdGVjdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjBhMTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvaGFjay01LjQvNDAwLXVubG9ja19teDI1bDY0MDZlX3dpdGhfNGJpdF9ibG9ja19wcm90ZWN0LnBhdGNoCkBAIC0wLDAgKzEsNjkgQEAKKy0tLSBhL2RyaXZlcnMvbXRkL3NwaS1ub3Ivc3BpLW5vci5jCisrKysgYi9kcml2ZXJzL210ZC9zcGktbm9yL3NwaS1ub3IuYworQEAgLTE5Niw3ICsxOTYsNyBAQCBzdHJ1Y3QgZmxhc2hfaW5mbyB7CisgCXUxNgkJcGFnZV9zaXplOworIAl1MTYJCWFkZHJfd2lkdGg7CisgCistCXUxNgkJZmxhZ3M7CisrCXUzMgkJZmxhZ3M7CisgI2RlZmluZSBTRUNUXzRLCQkJQklUKDApCS8qIFNQSU5PUl9PUF9CRV80SyB3b3JrcyB1bmlmb3JtbHkgKi8KKyAjZGVmaW5lIFNQSV9OT1JfTk9fRVJBU0UJQklUKDEpCS8qIE5vIGVyYXNlIGNvbW1hbmQgbmVlZGVkICovCisgI2RlZmluZSBTU1RfV1JJVEUJCUJJVCgyKQkvKiB1c2UgU1NUIGJ5dGUgcHJvZ3JhbW1pbmcgKi8KK0BAIC0yMzMsNiArMjMzLDEwIEBAIHN0cnVjdCBmbGFzaF9pbmZvIHsKKyAjZGVmaW5lIFNQSV9OT1JfU0tJUF9TRkRQCUJJVCgxMykJLyogU2tpcCBwYXJzaW5nIG9mIFNGRFAgdGFibGVzICovCisgI2RlZmluZSBVU0VfQ0xTUgkJQklUKDE0KQkvKiB1c2UgQ0xTUiBjb21tYW5kICovCisgI2RlZmluZSBTUElfTk9SX09DVEFMX1JFQUQJQklUKDE1KQkvKiBGbGFzaCBzdXBwb3J0cyBPY3RhbCBSZWFkICovCisrI2RlZmluZSBTUElfTk9SXzRCSVRfQlAJCUJJVCgxNykgLyoKKysJCQkJCSAqIEZsYXNoIFNSIGhhcyA0IGJpdCBmaWVsZHMgKEJQMC0zKQorKwkJCQkJICogZm9yIGJsb2NrIHByb3RlY3Rpb24uCisrCQkJCQkgKi8KKyAKKyAJLyogUGFydCBzcGVjaWZpYyBmaXh1cCBob29rcy4gKi8KKyAJY29uc3Qgc3RydWN0IHNwaV9ub3JfZml4dXBzICpmaXh1cHM7CitAQCAtMTk4NSw2ICsxOTg5LDkgQEAgc3RhdGljIGludCBzcGlfbm9yX2NsZWFyX3NyX2JwKHN0cnVjdCBzcAorIAlpbnQgcmV0OworIAl1OCBtYXNrID0gU1JfQlAyIHwgU1JfQlAxIHwgU1JfQlAwOworIAorKwlpZiAobm9yLT5mbGFncyAmIFNOT1JfRl9IQVNfNEJJVF9CUCkKKysJCW1hc2sgfD0gU1JfQlAzOworKworIAlyZXQgPSByZWFkX3NyKG5vcik7CisgCWlmIChyZXQgPCAwKSB7CisgCQlkZXZfZXJyKG5vci0+ZGV2LCAiZXJyb3Igd2hpbGUgcmVhZGluZyBzdGF0dXMgcmVnaXN0ZXJcbiIpOworQEAgLTIzMzcsNyArMjM0NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmxhc2hfaW5mbyBzcGlfbm9yX2kKKyAJeyAibXgyNWwxNjA2ZSIsICBJTkZPKDB4YzIyMDE1LCAwLCA2NCAqIDEwMjQsICAzMiwgU0VDVF80SykgfSwKKyAJeyAibXgyNWwzMjA1ZCIsICBJTkZPKDB4YzIyMDE2LCAwLCA2NCAqIDEwMjQsICA2NCwgU0VDVF80SykgfSwKKyAJeyAibXgyNWwzMjU1ZSIsICBJTkZPKDB4YzI5ZTE2LCAwLCA2NCAqIDEwMjQsICA2NCwgU0VDVF80SykgfSwKKy0JeyAibXgyNWw2NDA1ZCIsICBJTkZPKDB4YzIyMDE3LCAwLCA2NCAqIDEwMjQsIDEyOCwgU0VDVF80SykgfSwKKysJeyAibXgyNWw2NDA1ZCIsICBJTkZPKDB4YzIyMDE3LCAwLCA2NCAqIDEwMjQsIDEyOCwgU0VDVF80SyB8IFNQSV9OT1JfNEJJVF9CUCkgfSwKKyAJeyAibXgyNXUyMDMzZSIsICBJTkZPKDB4YzIyNTMyLCAwLCA2NCAqIDEwMjQsICAgNCwgU0VDVF80SykgfSwKKyAJeyAibXgyNXUzMjM1ZiIsCSBJTkZPKDB4YzIyNTM2LCAwLCA2NCAqIDEwMjQsICA2NCwKKyAJCQkgU0VDVF80SyB8IFNQSV9OT1JfRFVBTF9SRUFEIHwgU1BJX05PUl9RVUFEX1JFQUQpIH0sCitAQCAtNTAyNSw2ICs1MDMyLDkgQEAgaW50IHNwaV9ub3Jfc2NhbihzdHJ1Y3Qgc3BpX25vciAqbm9yLCBjbworIAlpZiAoaW5mby0+ZmxhZ3MgJiBVU0VfQ0xTUikKKyAJCW5vci0+ZmxhZ3MgfD0gU05PUl9GX1VTRV9DTFNSOworIAorKwlpZiAoaW5mby0+ZmxhZ3MgJiBTUElfTk9SXzRCSVRfQlApCisrCQlub3ItPmZsYWdzIHw9IFNOT1JfRl9IQVNfNEJJVF9CUDsKKysKKyAJaWYgKGluZm8tPmZsYWdzICYgU1BJX05PUl9OT19FUkFTRSkKKyAJCW10ZC0+ZmxhZ3MgfD0gTVREX05PX0VSQVNFOworIAorLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvc3BpLW5vci5oCisrKysgYi9pbmNsdWRlL2xpbnV4L210ZC9zcGktbm9yLmgKK0BAIC0xMjcsNiArMTI3LDcgQEAKKyAjZGVmaW5lIFNSX0JQMAkJCUJJVCgyKQkvKiBCbG9jayBwcm90ZWN0IDAgKi8KKyAjZGVmaW5lIFNSX0JQMQkJCUJJVCgzKQkvKiBCbG9jayBwcm90ZWN0IDEgKi8KKyAjZGVmaW5lIFNSX0JQMgkJCUJJVCg0KQkvKiBCbG9jayBwcm90ZWN0IDIgKi8KKysjZGVmaW5lIFNSX0JQMwkJCUJJVCg1KQkvKiBCbG9jayBwcm90ZWN0IDMgKi8KKyAjZGVmaW5lIFNSX1RCCQkJQklUKDUpCS8qIFRvcC9Cb3R0b20gcHJvdGVjdCAqLworICNkZWZpbmUgU1JfU1JXRAkJCUJJVCg3KQkvKiBTUiB3cml0ZSBwcm90ZWN0ICovCisgLyogU3BhbnNpb24vQ3lwcmVzcyBzcGVjaWZpYyBzdGF0dXMgYml0cyAqLworQEAgLTI0Myw2ICsyNDQsNyBAQCBlbnVtIHNwaV9ub3Jfb3B0aW9uX2ZsYWdzIHsKKyAJU05PUl9GXzRCX09QQ09ERVMJPSBCSVQoNiksCisgCVNOT1JfRl9IQVNfNEJBSVQJPSBCSVQoNyksCisgCVNOT1JfRl9IQVNfTE9DSwkJPSBCSVQoOCksCisrCVNOT1JfRl9IQVNfNEJJVF9CUCAgICAgID0gQklUKDEyKSwKKyB9OworIAorIC8qKgpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvaGFjay01LjQvNTMxLWRlYmxvYXRfbHptYS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzUzMS1kZWJsb2F0X2x6bWEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY3MGVlZQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzUzMS1kZWJsb2F0X2x6bWEucGF0Y2gKQEAgLTAsMCArMSwxMDQwIEBACitGcm9tIDNmZDI5Nzc2MWFjMjQ2YzU0ZDc3MjNjNTdmY2E5NWMxMTJiOTk0NjUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CitEYXRlOiBTYXQsIDE1IEp1bCAyMDE3IDIxOjE1OjQ0ICswMjAwCitTdWJqZWN0OiBsem1hOiBkZS1ibG9hdCB0aGUgbHptYSBsaWJyYXJ5IHVzZWQgYnkgamZmczIKKworbGVkZS1jb21taXQ6IDNmZDFkZDA4ZmJjYmI3OGIzNGVmZWZkMzJjMzAzMmU1Yzk5MTA4ZDYKK1NpZ25lZC1vZmYtYnk6IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KKy0tLQorIGluY2x1ZGUvbGludXgvbHptYS9MekZpbmQuaCAgfCAgMTcgLS0tCisgaW5jbHVkZS9saW51eC9sem1hL0x6bWFEZWMuaCB8IDEwMSAtLS0tLS0tLS0tLS0tLS0KKyBpbmNsdWRlL2xpbnV4L2x6bWEvTHptYUVuYy5oIHwgIDIwIC0tLQorIGxpYi9sem1hL0x6RmluZC5jICAgICAgICAgICAgfCAyODcgKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGxpYi9sem1hL0x6bWFEZWMuYyAgICAgICAgICAgfCAgODYgKy0tLS0tLS0tLS0tLQorIGxpYi9sem1hL0x6bWFFbmMuYyAgICAgICAgICAgfCAxNzIgKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyA2IGZpbGVzIGNoYW5nZWQsIDQyIGluc2VydGlvbnMoKyksIDY0MSBkZWxldGlvbnMoLSkKKworLS0tIGEvaW5jbHVkZS9saW51eC9sem1hL0x6RmluZC5oCisrKysgYi9pbmNsdWRlL2xpbnV4L2x6bWEvTHpGaW5kLmgKK0BAIC01NSwxMSArNTUsNiBAQCB0eXBlZGVmIHN0cnVjdCBfQ01hdGNoRmluZGVyCisgCisgI2RlZmluZSBJbmxpbmVfTWF0Y2hGaW5kZXJfR2V0TnVtQXZhaWxhYmxlQnl0ZXMocCkgKChwKS0+c3RyZWFtUG9zIC0gKHApLT5wb3MpCisgCistaW50IE1hdGNoRmluZGVyX05lZWRNb3ZlKENNYXRjaEZpbmRlciAqcCk7CistQnl0ZSAqTWF0Y2hGaW5kZXJfR2V0UG9pbnRlclRvQ3VycmVudFBvcyhDTWF0Y2hGaW5kZXIgKnApOworLXZvaWQgTWF0Y2hGaW5kZXJfTW92ZUJsb2NrKENNYXRjaEZpbmRlciAqcCk7Cistdm9pZCBNYXRjaEZpbmRlcl9SZWFkSWZSZXF1aXJlZChDTWF0Y2hGaW5kZXIgKnApOworLQorIHZvaWQgTWF0Y2hGaW5kZXJfQ29uc3RydWN0KENNYXRjaEZpbmRlciAqcCk7CisgCisgLyogQ29uZGl0aW9uczoKK0BAIC03MCwxMiArNjUsNiBAQCBpbnQgTWF0Y2hGaW5kZXJfQ3JlYXRlKENNYXRjaEZpbmRlciAqcCwKKyAgICAgVUludDMyIGtlZXBBZGRCdWZmZXJCZWZvcmUsIFVJbnQzMiBtYXRjaE1heExlbiwgVUludDMyIGtlZXBBZGRCdWZmZXJBZnRlciwKKyAgICAgSVN6QWxsb2MgKmFsbG9jKTsKKyB2b2lkIE1hdGNoRmluZGVyX0ZyZWUoQ01hdGNoRmluZGVyICpwLCBJU3pBbGxvYyAqYWxsb2MpOworLXZvaWQgTWF0Y2hGaW5kZXJfTm9ybWFsaXplMyhVSW50MzIgc3ViVmFsdWUsIENMelJlZiAqaXRlbXMsIFVJbnQzMiBudW1JdGVtcyk7Cistdm9pZCBNYXRjaEZpbmRlcl9SZWR1Y2VPZmZzZXRzKENNYXRjaEZpbmRlciAqcCwgVUludDMyIHN1YlZhbHVlKTsKKy0KKy1VSW50MzIgKiBHZXRNYXRjaGVzU3BlYzEoVUludDMyIGxlbkxpbWl0LCBVSW50MzIgY3VyTWF0Y2gsIFVJbnQzMiBwb3MsIGNvbnN0IEJ5dGUgKmJ1ZmZlciwgQ0x6UmVmICpzb24sCistICAgIFVJbnQzMiBfY3ljbGljQnVmZmVyUG9zLCBVSW50MzIgX2N5Y2xpY0J1ZmZlclNpemUsIFVJbnQzMiBfY3V0VmFsdWUsCistICAgIFVJbnQzMiAqZGlzdGFuY2VzLCBVSW50MzIgbWF4TGVuKTsKKyAKKyAvKgorIENvbmRpdGlvbnM6CitAQCAtMTAyLDEyICs5MSw2IEBAIHR5cGVkZWYgc3RydWN0IF9JTWF0Y2hGaW5kZXIKKyAKKyB2b2lkIE1hdGNoRmluZGVyX0NyZWF0ZVZUYWJsZShDTWF0Y2hGaW5kZXIgKnAsIElNYXRjaEZpbmRlciAqdlRhYmxlKTsKKyAKKy12b2lkIE1hdGNoRmluZGVyX0luaXQoQ01hdGNoRmluZGVyICpwKTsKKy1VSW50MzIgQnQzWmlwX01hdGNoRmluZGVyX0dldE1hdGNoZXMoQ01hdGNoRmluZGVyICpwLCBVSW50MzIgKmRpc3RhbmNlcyk7CistVUludDMyIEhjM1ppcF9NYXRjaEZpbmRlcl9HZXRNYXRjaGVzKENNYXRjaEZpbmRlciAqcCwgVUludDMyICpkaXN0YW5jZXMpOworLXZvaWQgQnQzWmlwX01hdGNoRmluZGVyX1NraXAoQ01hdGNoRmluZGVyICpwLCBVSW50MzIgbnVtKTsKKy12b2lkIEhjM1ppcF9NYXRjaEZpbmRlcl9Ta2lwKENNYXRjaEZpbmRlciAqcCwgVUludDMyIG51bSk7CistCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgfQorICNlbmRpZgorLS0tIGEvaW5jbHVkZS9saW51eC9sem1hL0x6bWFEZWMuaAorKysrIGIvaW5jbHVkZS9saW51eC9sem1hL0x6bWFEZWMuaAorQEAgLTMxLDE0ICszMSw2IEBAIHR5cGVkZWYgc3RydWN0IF9DTHptYVByb3BzCisgICBVSW50MzIgZGljU2l6ZTsKKyB9IENMem1hUHJvcHM7CisgCistLyogTHptYVByb3BzX0RlY29kZSAtIGRlY29kZXMgcHJvcGVydGllcworLVJldHVybnM6CistICBTWl9PSworLSAgU1pfRVJST1JfVU5TVVBQT1JURUQgLSBVbnN1cHBvcnRlZCBwcm9wZXJ0aWVzCistKi8KKy0KKy1TUmVzIEx6bWFQcm9wc19EZWNvZGUoQ0x6bWFQcm9wcyAqcCwgY29uc3QgQnl0ZSAqZGF0YSwgdW5zaWduZWQgc2l6ZSk7CistCisgCisgLyogLS0tLS0tLS0tLSBMWk1BIERlY29kZXIgc3RhdGUgLS0tLS0tLS0tLSAqLworIAorQEAgLTcwLDggKzYyLDYgQEAgdHlwZWRlZiBzdHJ1Y3QKKyAKKyAjZGVmaW5lIEx6bWFEZWNfQ29uc3RydWN0KHApIHsgKHApLT5kaWMgPSAwOyAocCktPnByb2JzID0gMDsgfQorIAorLXZvaWQgTHptYURlY19Jbml0KENMem1hRGVjICpwKTsKKy0KKyAvKiBUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIExaTUEgc3RyZWFtczoKKyAgICAgIDApIFN0cmVhbSB3aXRoIGVuZCBtYXJrLiBUaGF0IGVuZCBtYXJrIGFkZHMgYWJvdXQgNiBieXRlcyB0byBjb21wcmVzc2VkIHNpemUuCisgICAgICAxKSBTdHJlYW0gd2l0aG91dCBlbmQgbWFyay4gWW91IG11c3Qga25vdyBleGFjdCB1bmNvbXByZXNzZWQgc2l6ZSB0byBkZWNvbXByZXNzIHN1Y2ggc3RyZWFtLiAqLworQEAgLTEwOCw5NyArOTgsNiBAQCB0eXBlZGVmIGVudW0KKyAKKyAvKiBFTHptYVN0YXR1cyBpcyB1c2VkIG9ubHkgYXMgb3V0cHV0IHZhbHVlIGZvciBmdW5jdGlvbiBjYWxsICovCisgCistCistLyogLS0tLS0tLS0tLSBJbnRlcmZhY2VzIC0tLS0tLS0tLS0gKi8KKy0KKy0vKiBUaGVyZSBhcmUgMyBsZXZlbHMgb2YgaW50ZXJmYWNlczoKKy0gICAgIDEpIERpY3Rpb25hcnkgSW50ZXJmYWNlCistICAgICAyKSBCdWZmZXIgSW50ZXJmYWNlCistICAgICAzKSBPbmUgQ2FsbCBJbnRlcmZhY2UKKy0gICBZb3UgY2FuIHNlbGVjdCBhbnkgb2YgdGhlc2UgaW50ZXJmYWNlcywgYnV0IGRvbid0IG1peCBmdW5jdGlvbnMgZnJvbSBkaWZmZXJlbnQKKy0gICBncm91cHMgZm9yIHNhbWUgb2JqZWN0LiAqLworLQorLQorLS8qIFRoZXJlIGFyZSB0d28gdmFyaWFudHMgdG8gYWxsb2NhdGUgc3RhdGUgZm9yIERpY3Rpb25hcnkgSW50ZXJmYWNlOgorLSAgICAgMSkgTHptYURlY19BbGxvY2F0ZSAvIEx6bWFEZWNfRnJlZQorLSAgICAgMikgTHptYURlY19BbGxvY2F0ZVByb2JzIC8gTHptYURlY19GcmVlUHJvYnMKKy0gICBZb3UgY2FuIHVzZSB2YXJpYW50IDIsIGlmIHlvdSBzZXQgZGljdGlvbmFyeSBidWZmZXIgbWFudWFsbHkuCistICAgRm9yIEJ1ZmZlciBJbnRlcmZhY2UgeW91IG11c3QgYWx3YXlzIHVzZSB2YXJpYW50IDEuCistCistTHptYURlY19BbGxvY2F0ZSogY2FuIHJldHVybjoKKy0gIFNaX09LCistICBTWl9FUlJPUl9NRU0gICAgICAgICAtIE1lbW9yeSBhbGxvY2F0aW9uIGVycm9yCistICBTWl9FUlJPUl9VTlNVUFBPUlRFRCAtIFVuc3VwcG9ydGVkIHByb3BlcnRpZXMKKy0qLworLQorLVNSZXMgTHptYURlY19BbGxvY2F0ZVByb2JzKENMem1hRGVjICpwLCBjb25zdCBCeXRlICpwcm9wcywgdW5zaWduZWQgcHJvcHNTaXplLCBJU3pBbGxvYyAqYWxsb2MpOworLXZvaWQgTHptYURlY19GcmVlUHJvYnMoQ0x6bWFEZWMgKnAsIElTekFsbG9jICphbGxvYyk7CistCistU1JlcyBMem1hRGVjX0FsbG9jYXRlKENMem1hRGVjICpzdGF0ZSwgY29uc3QgQnl0ZSAqcHJvcCwgdW5zaWduZWQgcHJvcHNTaXplLCBJU3pBbGxvYyAqYWxsb2MpOworLXZvaWQgTHptYURlY19GcmVlKENMem1hRGVjICpzdGF0ZSwgSVN6QWxsb2MgKmFsbG9jKTsKKy0KKy0vKiAtLS0tLS0tLS0tIERpY3Rpb25hcnkgSW50ZXJmYWNlIC0tLS0tLS0tLS0gKi8KKy0KKy0vKiBZb3UgY2FuIHVzZSBpdCwgaWYgeW91IHdhbnQgdG8gZWxpbWluYXRlIHRoZSBvdmVyaGVhZCBmb3IgZGF0YSBjb3B5aW5nIGZyb20KKy0gICBkaWN0aW9uYXJ5IHRvIHNvbWUgb3RoZXIgZXh0ZXJuYWwgYnVmZmVyLgorLSAgIFlvdSBtdXN0IHdvcmsgd2l0aCBDTHptYURlYyB2YXJpYWJsZXMgZGlyZWN0bHkgaW4gdGhpcyBpbnRlcmZhY2UuCistCistICAgU1RFUFM6CistICAgICBMem1hRGVjX0NvbnN0cigpCistICAgICBMem1hRGVjX0FsbG9jYXRlKCkKKy0gICAgIGZvciAoZWFjaCBuZXcgc3RyZWFtKQorLSAgICAgeworLSAgICAgICBMem1hRGVjX0luaXQoKQorLSAgICAgICB3aGlsZSAoaXQgbmVlZHMgbW9yZSBkZWNvbXByZXNzaW9uKQorLSAgICAgICB7CistICAgICAgICAgTHptYURlY19EZWNvZGVUb0RpYygpCistICAgICAgICAgdXNlIGRhdGEgZnJvbSBDTHptYURlYzo6ZGljIGFuZCB1cGRhdGUgQ0x6bWFEZWM6OmRpY1BvcworLSAgICAgICB9CistICAgICB9CistICAgICBMem1hRGVjX0ZyZWUoKQorLSovCistCistLyogTHptYURlY19EZWNvZGVUb0RpYworLQorLSAgIFRoZSBkZWNvZGluZyB0byBpbnRlcm5hbCBkaWN0aW9uYXJ5IGJ1ZmZlciAoQ0x6bWFEZWM6OmRpYykuCistICAgWW91IG11c3QgbWFudWFsbHkgdXBkYXRlIENMem1hRGVjOjpkaWNQb3MsIGlmIGl0IHJlYWNoZXMgQ0x6bWFEZWM6OmRpY0J1ZlNpemUgISEhCistCistZmluaXNoTW9kZToKKy0gIEl0IGhhcyBtZWFuaW5nIG9ubHkgaWYgdGhlIGRlY29kaW5nIHJlYWNoZXMgb3V0cHV0IGxpbWl0IChkaWNMaW1pdCkuCistICBMWk1BX0ZJTklTSF9BTlkgLSBEZWNvZGUganVzdCBkaWNMaW1pdCBieXRlcy4KKy0gIExaTUFfRklOSVNIX0VORCAtIFN0cmVhbSBtdXN0IGJlIGZpbmlzaGVkIGFmdGVyIGRpY0xpbWl0LgorLQorLVJldHVybnM6CistICBTWl9PSworLSAgICBzdGF0dXM6CistICAgICAgTFpNQV9TVEFUVVNfRklOSVNIRURfV0lUSF9NQVJLCistICAgICAgTFpNQV9TVEFUVVNfTk9UX0ZJTklTSEVECistICAgICAgTFpNQV9TVEFUVVNfTkVFRFNfTU9SRV9JTlBVVAorLSAgICAgIExaTUFfU1RBVFVTX01BWUJFX0ZJTklTSEVEX1dJVEhPVVRfTUFSSworLSAgU1pfRVJST1JfREFUQSAtIERhdGEgZXJyb3IKKy0qLworLQorLVNSZXMgTHptYURlY19EZWNvZGVUb0RpYyhDTHptYURlYyAqcCwgU2l6ZVQgZGljTGltaXQsCistICAgIGNvbnN0IEJ5dGUgKnNyYywgU2l6ZVQgKnNyY0xlbiwgRUx6bWFGaW5pc2hNb2RlIGZpbmlzaE1vZGUsIEVMem1hU3RhdHVzICpzdGF0dXMpOworLQorLQorLS8qIC0tLS0tLS0tLS0gQnVmZmVyIEludGVyZmFjZSAtLS0tLS0tLS0tICovCistCistLyogSXQncyB6bGliLWxpa2UgaW50ZXJmYWNlLgorLSAgIFNlZSBMem1hRGVjX0RlY29kZVRvRGljIGRlc2NyaXB0aW9uIGZvciBpbmZvcm1hdGlvbiBhYm91dCBTVEVQUyBhbmQgcmV0dXJuIHJlc3VsdHMsCistICAgYnV0IHlvdSBtdXN0IHVzZSBMem1hRGVjX0RlY29kZVRvQnVmIGluc3RlYWQgb2YgTHptYURlY19EZWNvZGVUb0RpYyBhbmQgeW91IGRvbid0IG5lZWQKKy0gICB0byB3b3JrIHdpdGggQ0x6bWFEZWMgdmFyaWFibGVzIG1hbnVhbGx5LgorLQorLWZpbmlzaE1vZGU6CistICBJdCBoYXMgbWVhbmluZyBvbmx5IGlmIHRoZSBkZWNvZGluZyByZWFjaGVzIG91dHB1dCBsaW1pdCAoKmRlc3RMZW4pLgorLSAgTFpNQV9GSU5JU0hfQU5ZIC0gRGVjb2RlIGp1c3QgZGVzdExlbiBieXRlcy4KKy0gIExaTUFfRklOSVNIX0VORCAtIFN0cmVhbSBtdXN0IGJlIGZpbmlzaGVkIGFmdGVyICgqZGVzdExlbikuCistKi8KKy0KKy1TUmVzIEx6bWFEZWNfRGVjb2RlVG9CdWYoQ0x6bWFEZWMgKnAsIEJ5dGUgKmRlc3QsIFNpemVUICpkZXN0TGVuLAorLSAgICBjb25zdCBCeXRlICpzcmMsIFNpemVUICpzcmNMZW4sIEVMem1hRmluaXNoTW9kZSBmaW5pc2hNb2RlLCBFTHptYVN0YXR1cyAqc3RhdHVzKTsKKy0KKy0KKyAvKiAtLS0tLS0tLS0tIE9uZSBDYWxsIEludGVyZmFjZSAtLS0tLS0tLS0tICovCisgCisgLyogTHptYURlY29kZQorLS0tIGEvaW5jbHVkZS9saW51eC9sem1hL0x6bWFFbmMuaAorKysrIGIvaW5jbHVkZS9saW51eC9sem1hL0x6bWFFbmMuaAorQEAgLTMxLDkgKzMxLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgX0NMem1hRW5jUHJvcHMKKyB9IENMem1hRW5jUHJvcHM7CisgCisgdm9pZCBMem1hRW5jUHJvcHNfSW5pdChDTHptYUVuY1Byb3BzICpwKTsKKy12b2lkIEx6bWFFbmNQcm9wc19Ob3JtYWxpemUoQ0x6bWFFbmNQcm9wcyAqcCk7CistVUludDMyIEx6bWFFbmNQcm9wc19HZXREaWN0U2l6ZShjb25zdCBDTHptYUVuY1Byb3BzICpwcm9wczIpOworLQorIAorIC8qIC0tLS0tLS0tLS0gQ0x6bWFFbmNIYW5kbGUgSW50ZXJmYWNlIC0tLS0tLS0tLS0gKi8KKyAKK0BAIC01MywyNiArNTAsOSBAQCBDTHptYUVuY0hhbmRsZSBMem1hRW5jX0NyZWF0ZShJU3pBbGxvYyAqCisgdm9pZCBMem1hRW5jX0Rlc3Ryb3koQ0x6bWFFbmNIYW5kbGUgcCwgSVN6QWxsb2MgKmFsbG9jLCBJU3pBbGxvYyAqYWxsb2NCaWcpOworIFNSZXMgTHptYUVuY19TZXRQcm9wcyhDTHptYUVuY0hhbmRsZSBwLCBjb25zdCBDTHptYUVuY1Byb3BzICpwcm9wcyk7CisgU1JlcyBMem1hRW5jX1dyaXRlUHJvcGVydGllcyhDTHptYUVuY0hhbmRsZSBwLCBCeXRlICpwcm9wZXJ0aWVzLCBTaXplVCAqc2l6ZSk7CistU1JlcyBMem1hRW5jX0VuY29kZShDTHptYUVuY0hhbmRsZSBwLCBJU2VxT3V0U3RyZWFtICpvdXRTdHJlYW0sIElTZXFJblN0cmVhbSAqaW5TdHJlYW0sCistICAgIElDb21wcmVzc1Byb2dyZXNzICpwcm9ncmVzcywgSVN6QWxsb2MgKmFsbG9jLCBJU3pBbGxvYyAqYWxsb2NCaWcpOworIFNSZXMgTHptYUVuY19NZW1FbmNvZGUoQ0x6bWFFbmNIYW5kbGUgcCwgQnl0ZSAqZGVzdCwgU2l6ZVQgKmRlc3RMZW4sIGNvbnN0IEJ5dGUgKnNyYywgU2l6ZVQgc3JjTGVuLAorICAgICBpbnQgd3JpdGVFbmRNYXJrLCBJQ29tcHJlc3NQcm9ncmVzcyAqcHJvZ3Jlc3MsIElTekFsbG9jICphbGxvYywgSVN6QWxsb2MgKmFsbG9jQmlnKTsKKyAKKy0vKiAtLS0tLS0tLS0tIE9uZSBDYWxsIEludGVyZmFjZSAtLS0tLS0tLS0tICovCistCistLyogTHptYUVuY29kZQorLVJldHVybiBjb2RlOgorLSAgU1pfT0sgICAgICAgICAgICAgICAtIE9LCistICBTWl9FUlJPUl9NRU0gICAgICAgIC0gTWVtb3J5IGFsbG9jYXRpb24gZXJyb3IKKy0gIFNaX0VSUk9SX1BBUkFNICAgICAgLSBJbmNvcnJlY3QgcGFyYW1hdGVyCistICBTWl9FUlJPUl9PVVRQVVRfRU9GIC0gb3V0cHV0IGJ1ZmZlciBvdmVyZmxvdworLSAgU1pfRVJST1JfVEhSRUFEICAgICAtIGVycm9ycyBpbiBtdWx0aXRocmVhZGluZyBmdW5jdGlvbnMgKG9ubHkgZm9yIE10IHZlcnNpb24pCistKi8KKy0KKy1TUmVzIEx6bWFFbmNvZGUoQnl0ZSAqZGVzdCwgU2l6ZVQgKmRlc3RMZW4sIGNvbnN0IEJ5dGUgKnNyYywgU2l6ZVQgc3JjTGVuLAorLSAgICBjb25zdCBDTHptYUVuY1Byb3BzICpwcm9wcywgQnl0ZSAqcHJvcHNFbmNvZGVkLCBTaXplVCAqcHJvcHNTaXplLCBpbnQgd3JpdGVFbmRNYXJrLAorLSAgICBJQ29tcHJlc3NQcm9ncmVzcyAqcHJvZ3Jlc3MsIElTekFsbG9jICphbGxvYywgSVN6QWxsb2MgKmFsbG9jQmlnKTsKKy0KKyAjaWZkZWYgX19jcGx1c3BsdXMKKyB9CisgI2VuZGlmCistLS0gYS9saWIvbHptYS9MekZpbmQuYworKysrIGIvbGliL2x6bWEvTHpGaW5kLmMKK0BAIC0xNCw5ICsxNCwxNSBAQAorIAorICNkZWZpbmUga1N0YXJ0TWF4TGVuIDMKKyAKKysjaWYgMAorKyNkZWZpbmUgRElSRUNUX0lOUFVUCXAtPmRpcmVjdElucHV0CisrI2Vsc2UKKysjZGVmaW5lIERJUkVDVF9JTlBVVAkxCisrI2VuZGlmCisrCisgc3RhdGljIHZvaWQgTHpJbldpbmRvd19GcmVlKENNYXRjaEZpbmRlciAqcCwgSVN6QWxsb2MgKmFsbG9jKQorIHsKKy0gIGlmICghcC0+ZGlyZWN0SW5wdXQpCisrICBpZiAoIURJUkVDVF9JTlBVVCkKKyAgIHsKKyAgICAgYWxsb2MtPkZyZWUoYWxsb2MsIHAtPmJ1ZmZlckJhc2UpOworICAgICBwLT5idWZmZXJCYXNlID0gMDsKK0BAIC0yOCw3ICszNCw3IEBAIHN0YXRpYyB2b2lkIEx6SW5XaW5kb3dfRnJlZShDTWF0Y2hGaW5kZXIKKyBzdGF0aWMgaW50IEx6SW5XaW5kb3dfQ3JlYXRlKENNYXRjaEZpbmRlciAqcCwgVUludDMyIGtlZXBTaXplUmVzZXJ2LCBJU3pBbGxvYyAqYWxsb2MpCisgeworICAgVUludDMyIGJsb2NrU2l6ZSA9IHAtPmtlZXBTaXplQmVmb3JlICsgcC0+a2VlcFNpemVBZnRlciArIGtlZXBTaXplUmVzZXJ2OworLSAgaWYgKHAtPmRpcmVjdElucHV0KQorKyAgaWYgKERJUkVDVF9JTlBVVCkKKyAgIHsKKyAgICAgcC0+YmxvY2tTaXplID0gYmxvY2tTaXplOworICAgICByZXR1cm4gMTsKK0BAIC00MiwxMiArNDgsMTIgQEAgc3RhdGljIGludCBMekluV2luZG93X0NyZWF0ZShDTWF0Y2hGaW5kZQorICAgcmV0dXJuIChwLT5idWZmZXJCYXNlICE9IDApOworIH0KKyAKKy1CeXRlICpNYXRjaEZpbmRlcl9HZXRQb2ludGVyVG9DdXJyZW50UG9zKENNYXRjaEZpbmRlciAqcCkgeyByZXR1cm4gcC0+YnVmZmVyOyB9CistQnl0ZSBNYXRjaEZpbmRlcl9HZXRJbmRleEJ5dGUoQ01hdGNoRmluZGVyICpwLCBJbnQzMiBpbmRleCkgeyByZXR1cm4gcC0+YnVmZmVyW2luZGV4XTsgfQorK3N0YXRpYyBCeXRlICpNYXRjaEZpbmRlcl9HZXRQb2ludGVyVG9DdXJyZW50UG9zKENNYXRjaEZpbmRlciAqcCkgeyByZXR1cm4gcC0+YnVmZmVyOyB9Cisrc3RhdGljIEJ5dGUgTWF0Y2hGaW5kZXJfR2V0SW5kZXhCeXRlKENNYXRjaEZpbmRlciAqcCwgSW50MzIgaW5kZXgpIHsgcmV0dXJuIHAtPmJ1ZmZlcltpbmRleF07IH0KKyAKKy1VSW50MzIgTWF0Y2hGaW5kZXJfR2V0TnVtQXZhaWxhYmxlQnl0ZXMoQ01hdGNoRmluZGVyICpwKSB7IHJldHVybiBwLT5zdHJlYW1Qb3MgLSBwLT5wb3M7IH0KKytzdGF0aWMgVUludDMyIE1hdGNoRmluZGVyX0dldE51bUF2YWlsYWJsZUJ5dGVzKENNYXRjaEZpbmRlciAqcCkgeyByZXR1cm4gcC0+c3RyZWFtUG9zIC0gcC0+cG9zOyB9CisgCistdm9pZCBNYXRjaEZpbmRlcl9SZWR1Y2VPZmZzZXRzKENNYXRjaEZpbmRlciAqcCwgVUludDMyIHN1YlZhbHVlKQorK3N0YXRpYyB2b2lkIE1hdGNoRmluZGVyX1JlZHVjZU9mZnNldHMoQ01hdGNoRmluZGVyICpwLCBVSW50MzIgc3ViVmFsdWUpCisgeworICAgcC0+cG9zTGltaXQgLT0gc3ViVmFsdWU7CisgICBwLT5wb3MgLT0gc3ViVmFsdWU7CitAQCAtNTgsNyArNjQsNyBAQCBzdGF0aWMgdm9pZCBNYXRjaEZpbmRlcl9SZWFkQmxvY2soQ01hdGNoCisgeworICAgaWYgKHAtPnN0cmVhbUVuZFdhc1JlYWNoZWQgfHwgcC0+cmVzdWx0ICE9IFNaX09LKQorICAgICByZXR1cm47CistICBpZiAocC0+ZGlyZWN0SW5wdXQpCisrICBpZiAoRElSRUNUX0lOUFVUKQorICAgeworICAgICBVSW50MzIgY3VyU2l6ZSA9IDB4RkZGRkZGRkYgLSBwLT5zdHJlYW1Qb3M7CisgICAgIGlmIChjdXJTaXplID4gcC0+ZGlyZWN0SW5wdXRSZW0pCitAQCAtODksNyArOTUsNyBAQCBzdGF0aWMgdm9pZCBNYXRjaEZpbmRlcl9SZWFkQmxvY2soQ01hdGNoCisgICB9CisgfQorIAorLXZvaWQgTWF0Y2hGaW5kZXJfTW92ZUJsb2NrKENNYXRjaEZpbmRlciAqcCkKKytzdGF0aWMgdm9pZCBNYXRjaEZpbmRlcl9Nb3ZlQmxvY2soQ01hdGNoRmluZGVyICpwKQorIHsKKyAgIG1lbW1vdmUocC0+YnVmZmVyQmFzZSwKKyAgICAgcC0+YnVmZmVyIC0gcC0+a2VlcFNpemVCZWZvcmUsCitAQCAtOTcsMjIgKzEwMywxNCBAQCB2b2lkIE1hdGNoRmluZGVyX01vdmVCbG9jayhDTWF0Y2hGaW5kZXIKKyAgIHAtPmJ1ZmZlciA9IHAtPmJ1ZmZlckJhc2UgKyBwLT5rZWVwU2l6ZUJlZm9yZTsKKyB9CisgCistaW50IE1hdGNoRmluZGVyX05lZWRNb3ZlKENNYXRjaEZpbmRlciAqcCkKKytzdGF0aWMgaW50IE1hdGNoRmluZGVyX05lZWRNb3ZlKENNYXRjaEZpbmRlciAqcCkKKyB7CistICBpZiAocC0+ZGlyZWN0SW5wdXQpCisrICBpZiAoRElSRUNUX0lOUFVUKQorICAgICByZXR1cm4gMDsKKyAgIC8qIGlmIChwLT5zdHJlYW1FbmRXYXNSZWFjaGVkKSByZXR1cm4gMDsgKi8KKyAgIHJldHVybiAoKHNpemVfdCkocC0+YnVmZmVyQmFzZSArIHAtPmJsb2NrU2l6ZSAtIHAtPmJ1ZmZlcikgPD0gcC0+a2VlcFNpemVBZnRlcik7CisgfQorIAorLXZvaWQgTWF0Y2hGaW5kZXJfUmVhZElmUmVxdWlyZWQoQ01hdGNoRmluZGVyICpwKQorLXsKKy0gIGlmIChwLT5zdHJlYW1FbmRXYXNSZWFjaGVkKQorLSAgICByZXR1cm47CistICBpZiAocC0+a2VlcFNpemVBZnRlciA+PSBwLT5zdHJlYW1Qb3MgLSBwLT5wb3MpCistICAgIE1hdGNoRmluZGVyX1JlYWRCbG9jayhwKTsKKy19CistCisgc3RhdGljIHZvaWQgTWF0Y2hGaW5kZXJfQ2hlY2tBbmRNb3ZlQW5kUmVhZChDTWF0Y2hGaW5kZXIgKnApCisgeworICAgaWYgKE1hdGNoRmluZGVyX05lZWRNb3ZlKHApKQorQEAgLTI2OCw3ICsyNjYsNyBAQCBzdGF0aWMgdm9pZCBNYXRjaEZpbmRlcl9TZXRMaW1pdHMoQ01hdGNoCisgICBwLT5wb3NMaW1pdCA9IHAtPnBvcyArIGxpbWl0OworIH0KKyAKKy12b2lkIE1hdGNoRmluZGVyX0luaXQoQ01hdGNoRmluZGVyICpwKQorK3N0YXRpYyB2b2lkIE1hdGNoRmluZGVyX0luaXQoQ01hdGNoRmluZGVyICpwKQorIHsKKyAgIFVJbnQzMiBpOworICAgZm9yIChpID0gMDsgaSA8IHAtPmhhc2hTaXplU3VtOyBpKyspCitAQCAtMjg3LDcgKzI4NSw3IEBAIHN0YXRpYyBVSW50MzIgTWF0Y2hGaW5kZXJfR2V0U3ViVmFsdWUoQ00KKyAgIHJldHVybiAocC0+cG9zIC0gcC0+aGlzdG9yeVNpemUgLSAxKSAmIGtOb3JtYWxpemVNYXNrOworIH0KKyAKKy12b2lkIE1hdGNoRmluZGVyX05vcm1hbGl6ZTMoVUludDMyIHN1YlZhbHVlLCBDTHpSZWYgKml0ZW1zLCBVSW50MzIgbnVtSXRlbXMpCisrc3RhdGljIHZvaWQgTWF0Y2hGaW5kZXJfTm9ybWFsaXplMyhVSW50MzIgc3ViVmFsdWUsIENMelJlZiAqaXRlbXMsIFVJbnQzMiBudW1JdGVtcykKKyB7CisgICBVSW50MzIgaTsKKyAgIGZvciAoaSA9IDA7IGkgPCBudW1JdGVtczsgaSsrKQorQEAgLTMxOSwzOCArMzE3LDcgQEAgc3RhdGljIHZvaWQgTWF0Y2hGaW5kZXJfQ2hlY2tMaW1pdHMoQ01hdAorICAgTWF0Y2hGaW5kZXJfU2V0TGltaXRzKHApOworIH0KKyAKKy1zdGF0aWMgVUludDMyICogSGNfR2V0TWF0Y2hlc1NwZWMoVUludDMyIGxlbkxpbWl0LCBVSW50MzIgY3VyTWF0Y2gsIFVJbnQzMiBwb3MsIGNvbnN0IEJ5dGUgKmN1ciwgQ0x6UmVmICpzb24sCistICAgIFVJbnQzMiBfY3ljbGljQnVmZmVyUG9zLCBVSW50MzIgX2N5Y2xpY0J1ZmZlclNpemUsIFVJbnQzMiBjdXRWYWx1ZSwKKy0gICAgVUludDMyICpkaXN0YW5jZXMsIFVJbnQzMiBtYXhMZW4pCisteworLSAgc29uW19jeWNsaWNCdWZmZXJQb3NdID0gY3VyTWF0Y2g7CistICBmb3IgKDs7KQorLSAgeworLSAgICBVSW50MzIgZGVsdGEgPSBwb3MgLSBjdXJNYXRjaDsKKy0gICAgaWYgKGN1dFZhbHVlLS0gPT0gMCB8fCBkZWx0YSA+PSBfY3ljbGljQnVmZmVyU2l6ZSkKKy0gICAgICByZXR1cm4gZGlzdGFuY2VzOworLSAgICB7CistICAgICAgY29uc3QgQnl0ZSAqcGIgPSBjdXIgLSBkZWx0YTsKKy0gICAgICBjdXJNYXRjaCA9IHNvbltfY3ljbGljQnVmZmVyUG9zIC0gZGVsdGEgKyAoKGRlbHRhID4gX2N5Y2xpY0J1ZmZlclBvcykgPyBfY3ljbGljQnVmZmVyU2l6ZSA6IDApXTsKKy0gICAgICBpZiAocGJbbWF4TGVuXSA9PSBjdXJbbWF4TGVuXSAmJiAqcGIgPT0gKmN1cikKKy0gICAgICB7CistICAgICAgICBVSW50MzIgbGVuID0gMDsKKy0gICAgICAgIHdoaWxlICgrK2xlbiAhPSBsZW5MaW1pdCkKKy0gICAgICAgICAgaWYgKHBiW2xlbl0gIT0gY3VyW2xlbl0pCistICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBpZiAobWF4TGVuIDwgbGVuKQorLSAgICAgICAgeworLSAgICAgICAgICAqZGlzdGFuY2VzKysgPSBtYXhMZW4gPSBsZW47CistICAgICAgICAgICpkaXN0YW5jZXMrKyA9IGRlbHRhIC0gMTsKKy0gICAgICAgICAgaWYgKGxlbiA9PSBsZW5MaW1pdCkKKy0gICAgICAgICAgICByZXR1cm4gZGlzdGFuY2VzOworLSAgICAgICAgfQorLSAgICAgIH0KKy0gICAgfQorLSAgfQorLX0KKy0KKy1VSW50MzIgKiBHZXRNYXRjaGVzU3BlYzEoVUludDMyIGxlbkxpbWl0LCBVSW50MzIgY3VyTWF0Y2gsIFVJbnQzMiBwb3MsIGNvbnN0IEJ5dGUgKmN1ciwgQ0x6UmVmICpzb24sCisrc3RhdGljIFVJbnQzMiAqIEdldE1hdGNoZXNTcGVjMShVSW50MzIgbGVuTGltaXQsIFVJbnQzMiBjdXJNYXRjaCwgVUludDMyIHBvcywgY29uc3QgQnl0ZSAqY3VyLCBDTHpSZWYgKnNvbiwKKyAgICAgVUludDMyIF9jeWNsaWNCdWZmZXJQb3MsIFVJbnQzMiBfY3ljbGljQnVmZmVyU2l6ZSwgVUludDMyIGN1dFZhbHVlLAorICAgICBVSW50MzIgKmRpc3RhbmNlcywgVUludDMyIG1heExlbikKKyB7CitAQCAtNDYwLDEwICs0MjcsMTAgQEAgc3RhdGljIHZvaWQgU2tpcE1hdGNoZXNTcGVjKFVJbnQzMiBsZW5MaQorICAgcC0+YnVmZmVyKys7IFwKKyAgIGlmICgrK3AtPnBvcyA9PSBwLT5wb3NMaW1pdCkgTWF0Y2hGaW5kZXJfQ2hlY2tMaW1pdHMocCk7CisgCistI2RlZmluZSBNT1ZFX1BPU19SRVQgTU9WRV9QT1MgcmV0dXJuIG9mZnNldDsKKy0KKyBzdGF0aWMgdm9pZCBNYXRjaEZpbmRlcl9Nb3ZlUG9zKENNYXRjaEZpbmRlciAqcCkgeyBNT1ZFX1BPUzsgfQorIAorKyNkZWZpbmUgTU9WRV9QT1NfUkVUIE1hdGNoRmluZGVyX01vdmVQb3MocCk7IHJldHVybiBvZmZzZXQ7CisrCisgI2RlZmluZSBHRVRfTUFUQ0hFU19IRUFERVIyKG1pbkxlbiwgcmV0X29wKSBcCisgICBVSW50MzIgbGVuTGltaXQ7IFVJbnQzMiBoYXNoVmFsdWU7IGNvbnN0IEJ5dGUgKmN1cjsgVUludDMyIGN1ck1hdGNoOyBcCisgICBsZW5MaW1pdCA9IHAtPmxlbkxpbWl0OyB7IGlmIChsZW5MaW1pdCA8IG1pbkxlbikgeyBNYXRjaEZpbmRlcl9Nb3ZlUG9zKHApOyByZXRfb3A7IH19IFwKK0BAIC00NzksNjIgKzQ0Niw3IEBAIHN0YXRpYyB2b2lkIE1hdGNoRmluZGVyX01vdmVQb3MoQ01hdGNoRmkKKyAgIGRpc3RhbmNlcyArIG9mZnNldCwgbWF4TGVuKSAtIGRpc3RhbmNlcyk7IE1PVkVfUE9TX1JFVDsKKyAKKyAjZGVmaW5lIFNLSVBfRk9PVEVSIFwKKy0gIFNraXBNYXRjaGVzU3BlYyhsZW5MaW1pdCwgY3VyTWF0Y2gsIE1GX1BBUkFNUyhwKSk7IE1PVkVfUE9TOworLQorLXN0YXRpYyBVSW50MzIgQnQyX01hdGNoRmluZGVyX0dldE1hdGNoZXMoQ01hdGNoRmluZGVyICpwLCBVSW50MzIgKmRpc3RhbmNlcykKKy17CistICBVSW50MzIgb2Zmc2V0OworLSAgR0VUX01BVENIRVNfSEVBREVSKDIpCistICBIQVNIMl9DQUxDOworLSAgY3VyTWF0Y2ggPSBwLT5oYXNoW2hhc2hWYWx1ZV07CistICBwLT5oYXNoW2hhc2hWYWx1ZV0gPSBwLT5wb3M7CistICBvZmZzZXQgPSAwOworLSAgR0VUX01BVENIRVNfRk9PVEVSKG9mZnNldCwgMSkKKy19CistCistVUludDMyIEJ0M1ppcF9NYXRjaEZpbmRlcl9HZXRNYXRjaGVzKENNYXRjaEZpbmRlciAqcCwgVUludDMyICpkaXN0YW5jZXMpCisteworLSAgVUludDMyIG9mZnNldDsKKy0gIEdFVF9NQVRDSEVTX0hFQURFUigzKQorLSAgSEFTSF9aSVBfQ0FMQzsKKy0gIGN1ck1hdGNoID0gcC0+aGFzaFtoYXNoVmFsdWVdOworLSAgcC0+aGFzaFtoYXNoVmFsdWVdID0gcC0+cG9zOworLSAgb2Zmc2V0ID0gMDsKKy0gIEdFVF9NQVRDSEVTX0ZPT1RFUihvZmZzZXQsIDIpCistfQorLQorLXN0YXRpYyBVSW50MzIgQnQzX01hdGNoRmluZGVyX0dldE1hdGNoZXMoQ01hdGNoRmluZGVyICpwLCBVSW50MzIgKmRpc3RhbmNlcykKKy17CistICBVSW50MzIgaGFzaDJWYWx1ZSwgZGVsdGEyLCBtYXhMZW4sIG9mZnNldDsKKy0gIEdFVF9NQVRDSEVTX0hFQURFUigzKQorLQorLSAgSEFTSDNfQ0FMQzsKKy0KKy0gIGRlbHRhMiA9IHAtPnBvcyAtIHAtPmhhc2hbaGFzaDJWYWx1ZV07CistICBjdXJNYXRjaCA9IHAtPmhhc2hba0ZpeDNIYXNoU2l6ZSArIGhhc2hWYWx1ZV07CistCistICBwLT5oYXNoW2hhc2gyVmFsdWVdID0KKy0gIHAtPmhhc2hba0ZpeDNIYXNoU2l6ZSArIGhhc2hWYWx1ZV0gPSBwLT5wb3M7CistCistCistICBtYXhMZW4gPSAyOworLSAgb2Zmc2V0ID0gMDsKKy0gIGlmIChkZWx0YTIgPCBwLT5jeWNsaWNCdWZmZXJTaXplICYmICooY3VyIC0gZGVsdGEyKSA9PSAqY3VyKQorLSAgeworLSAgICBmb3IgKDsgbWF4TGVuICE9IGxlbkxpbWl0OyBtYXhMZW4rKykKKy0gICAgICBpZiAoY3VyWyhwdHJkaWZmX3QpbWF4TGVuIC0gZGVsdGEyXSAhPSBjdXJbbWF4TGVuXSkKKy0gICAgICAgIGJyZWFrOworLSAgICBkaXN0YW5jZXNbMF0gPSBtYXhMZW47CistICAgIGRpc3RhbmNlc1sxXSA9IGRlbHRhMiAtIDE7CistICAgIG9mZnNldCA9IDI7CistICAgIGlmIChtYXhMZW4gPT0gbGVuTGltaXQpCistICAgIHsKKy0gICAgICBTa2lwTWF0Y2hlc1NwZWMobGVuTGltaXQsIGN1ck1hdGNoLCBNRl9QQVJBTVMocCkpOworLSAgICAgIE1PVkVfUE9TX1JFVDsKKy0gICAgfQorLSAgfQorLSAgR0VUX01BVENIRVNfRk9PVEVSKG9mZnNldCwgbWF4TGVuKQorLX0KKysgIFNraXBNYXRjaGVzU3BlYyhsZW5MaW1pdCwgY3VyTWF0Y2gsIE1GX1BBUkFNUyhwKSk7IE1hdGNoRmluZGVyX01vdmVQb3MocCk7CisgCisgc3RhdGljIFVJbnQzMiBCdDRfTWF0Y2hGaW5kZXJfR2V0TWF0Y2hlcyhDTWF0Y2hGaW5kZXIgKnAsIFVJbnQzMiAqZGlzdGFuY2VzKQorIHsKK0BAIC01ODMsMTA4ICs0OTUsNiBAQCBzdGF0aWMgVUludDMyIEJ0NF9NYXRjaEZpbmRlcl9HZXRNYXRjaGVzCisgICBHRVRfTUFUQ0hFU19GT09URVIob2Zmc2V0LCBtYXhMZW4pCisgfQorIAorLXN0YXRpYyBVSW50MzIgSGM0X01hdGNoRmluZGVyX0dldE1hdGNoZXMoQ01hdGNoRmluZGVyICpwLCBVSW50MzIgKmRpc3RhbmNlcykKKy17CistICBVSW50MzIgaGFzaDJWYWx1ZSwgaGFzaDNWYWx1ZSwgZGVsdGEyLCBkZWx0YTMsIG1heExlbiwgb2Zmc2V0OworLSAgR0VUX01BVENIRVNfSEVBREVSKDQpCistCistICBIQVNINF9DQUxDOworLQorLSAgZGVsdGEyID0gcC0+cG9zIC0gcC0+aGFzaFsgICAgICAgICAgICAgICAgaGFzaDJWYWx1ZV07CistICBkZWx0YTMgPSBwLT5wb3MgLSBwLT5oYXNoW2tGaXgzSGFzaFNpemUgKyBoYXNoM1ZhbHVlXTsKKy0gIGN1ck1hdGNoID0gcC0+aGFzaFtrRml4NEhhc2hTaXplICsgaGFzaFZhbHVlXTsKKy0KKy0gIHAtPmhhc2hbICAgICAgICAgICAgICAgIGhhc2gyVmFsdWVdID0KKy0gIHAtPmhhc2hba0ZpeDNIYXNoU2l6ZSArIGhhc2gzVmFsdWVdID0KKy0gIHAtPmhhc2hba0ZpeDRIYXNoU2l6ZSArIGhhc2hWYWx1ZV0gPSBwLT5wb3M7CistCistICBtYXhMZW4gPSAxOworLSAgb2Zmc2V0ID0gMDsKKy0gIGlmIChkZWx0YTIgPCBwLT5jeWNsaWNCdWZmZXJTaXplICYmICooY3VyIC0gZGVsdGEyKSA9PSAqY3VyKQorLSAgeworLSAgICBkaXN0YW5jZXNbMF0gPSBtYXhMZW4gPSAyOworLSAgICBkaXN0YW5jZXNbMV0gPSBkZWx0YTIgLSAxOworLSAgICBvZmZzZXQgPSAyOworLSAgfQorLSAgaWYgKGRlbHRhMiAhPSBkZWx0YTMgJiYgZGVsdGEzIDwgcC0+Y3ljbGljQnVmZmVyU2l6ZSAmJiAqKGN1ciAtIGRlbHRhMykgPT0gKmN1cikKKy0gIHsKKy0gICAgbWF4TGVuID0gMzsKKy0gICAgZGlzdGFuY2VzW29mZnNldCArIDFdID0gZGVsdGEzIC0gMTsKKy0gICAgb2Zmc2V0ICs9IDI7CistICAgIGRlbHRhMiA9IGRlbHRhMzsKKy0gIH0KKy0gIGlmIChvZmZzZXQgIT0gMCkKKy0gIHsKKy0gICAgZm9yICg7IG1heExlbiAhPSBsZW5MaW1pdDsgbWF4TGVuKyspCistICAgICAgaWYgKGN1clsocHRyZGlmZl90KW1heExlbiAtIGRlbHRhMl0gIT0gY3VyW21heExlbl0pCistICAgICAgICBicmVhazsKKy0gICAgZGlzdGFuY2VzW29mZnNldCAtIDJdID0gbWF4TGVuOworLSAgICBpZiAobWF4TGVuID09IGxlbkxpbWl0KQorLSAgICB7CistICAgICAgcC0+c29uW3AtPmN5Y2xpY0J1ZmZlclBvc10gPSBjdXJNYXRjaDsKKy0gICAgICBNT1ZFX1BPU19SRVQ7CistICAgIH0KKy0gIH0KKy0gIGlmIChtYXhMZW4gPCAzKQorLSAgICBtYXhMZW4gPSAzOworLSAgb2Zmc2V0ID0gKFVJbnQzMikoSGNfR2V0TWF0Y2hlc1NwZWMobGVuTGltaXQsIGN1ck1hdGNoLCBNRl9QQVJBTVMocCksCistICAgIGRpc3RhbmNlcyArIG9mZnNldCwgbWF4TGVuKSAtIChkaXN0YW5jZXMpKTsKKy0gIE1PVkVfUE9TX1JFVAorLX0KKy0KKy1VSW50MzIgSGMzWmlwX01hdGNoRmluZGVyX0dldE1hdGNoZXMoQ01hdGNoRmluZGVyICpwLCBVSW50MzIgKmRpc3RhbmNlcykKKy17CistICBVSW50MzIgb2Zmc2V0OworLSAgR0VUX01BVENIRVNfSEVBREVSKDMpCistICBIQVNIX1pJUF9DQUxDOworLSAgY3VyTWF0Y2ggPSBwLT5oYXNoW2hhc2hWYWx1ZV07CistICBwLT5oYXNoW2hhc2hWYWx1ZV0gPSBwLT5wb3M7CistICBvZmZzZXQgPSAoVUludDMyKShIY19HZXRNYXRjaGVzU3BlYyhsZW5MaW1pdCwgY3VyTWF0Y2gsIE1GX1BBUkFNUyhwKSwKKy0gICAgZGlzdGFuY2VzLCAyKSAtIChkaXN0YW5jZXMpKTsKKy0gIE1PVkVfUE9TX1JFVAorLX0KKy0KKy1zdGF0aWMgdm9pZCBCdDJfTWF0Y2hGaW5kZXJfU2tpcChDTWF0Y2hGaW5kZXIgKnAsIFVJbnQzMiBudW0pCisteworLSAgZG8KKy0gIHsKKy0gICAgU0tJUF9IRUFERVIoMikKKy0gICAgSEFTSDJfQ0FMQzsKKy0gICAgY3VyTWF0Y2ggPSBwLT5oYXNoW2hhc2hWYWx1ZV07CistICAgIHAtPmhhc2hbaGFzaFZhbHVlXSA9IHAtPnBvczsKKy0gICAgU0tJUF9GT09URVIKKy0gIH0KKy0gIHdoaWxlICgtLW51bSAhPSAwKTsKKy19CistCistdm9pZCBCdDNaaXBfTWF0Y2hGaW5kZXJfU2tpcChDTWF0Y2hGaW5kZXIgKnAsIFVJbnQzMiBudW0pCisteworLSAgZG8KKy0gIHsKKy0gICAgU0tJUF9IRUFERVIoMykKKy0gICAgSEFTSF9aSVBfQ0FMQzsKKy0gICAgY3VyTWF0Y2ggPSBwLT5oYXNoW2hhc2hWYWx1ZV07CistICAgIHAtPmhhc2hbaGFzaFZhbHVlXSA9IHAtPnBvczsKKy0gICAgU0tJUF9GT09URVIKKy0gIH0KKy0gIHdoaWxlICgtLW51bSAhPSAwKTsKKy19CistCistc3RhdGljIHZvaWQgQnQzX01hdGNoRmluZGVyX1NraXAoQ01hdGNoRmluZGVyICpwLCBVSW50MzIgbnVtKQorLXsKKy0gIGRvCistICB7CistICAgIFVJbnQzMiBoYXNoMlZhbHVlOworLSAgICBTS0lQX0hFQURFUigzKQorLSAgICBIQVNIM19DQUxDOworLSAgICBjdXJNYXRjaCA9IHAtPmhhc2hba0ZpeDNIYXNoU2l6ZSArIGhhc2hWYWx1ZV07CistICAgIHAtPmhhc2hbaGFzaDJWYWx1ZV0gPQorLSAgICBwLT5oYXNoW2tGaXgzSGFzaFNpemUgKyBoYXNoVmFsdWVdID0gcC0+cG9zOworLSAgICBTS0lQX0ZPT1RFUgorLSAgfQorLSAgd2hpbGUgKC0tbnVtICE9IDApOworLX0KKy0KKyBzdGF0aWMgdm9pZCBCdDRfTWF0Y2hGaW5kZXJfU2tpcChDTWF0Y2hGaW5kZXIgKnAsIFVJbnQzMiBudW0pCisgeworICAgZG8KK0BAIC03MDEsNjEgKzUxMSwxMiBAQCBzdGF0aWMgdm9pZCBCdDRfTWF0Y2hGaW5kZXJfU2tpcChDTWF0Y2hGCisgICB3aGlsZSAoLS1udW0gIT0gMCk7CisgfQorIAorLXN0YXRpYyB2b2lkIEhjNF9NYXRjaEZpbmRlcl9Ta2lwKENNYXRjaEZpbmRlciAqcCwgVUludDMyIG51bSkKKy17CistICBkbworLSAgeworLSAgICBVSW50MzIgaGFzaDJWYWx1ZSwgaGFzaDNWYWx1ZTsKKy0gICAgU0tJUF9IRUFERVIoNCkKKy0gICAgSEFTSDRfQ0FMQzsKKy0gICAgY3VyTWF0Y2ggPSBwLT5oYXNoW2tGaXg0SGFzaFNpemUgKyBoYXNoVmFsdWVdOworLSAgICBwLT5oYXNoWyAgICAgICAgICAgICAgICBoYXNoMlZhbHVlXSA9CistICAgIHAtPmhhc2hba0ZpeDNIYXNoU2l6ZSArIGhhc2gzVmFsdWVdID0KKy0gICAgcC0+aGFzaFtrRml4NEhhc2hTaXplICsgaGFzaFZhbHVlXSA9IHAtPnBvczsKKy0gICAgcC0+c29uW3AtPmN5Y2xpY0J1ZmZlclBvc10gPSBjdXJNYXRjaDsKKy0gICAgTU9WRV9QT1MKKy0gIH0KKy0gIHdoaWxlICgtLW51bSAhPSAwKTsKKy19CistCistdm9pZCBIYzNaaXBfTWF0Y2hGaW5kZXJfU2tpcChDTWF0Y2hGaW5kZXIgKnAsIFVJbnQzMiBudW0pCisteworLSAgZG8KKy0gIHsKKy0gICAgU0tJUF9IRUFERVIoMykKKy0gICAgSEFTSF9aSVBfQ0FMQzsKKy0gICAgY3VyTWF0Y2ggPSBwLT5oYXNoW2hhc2hWYWx1ZV07CistICAgIHAtPmhhc2hbaGFzaFZhbHVlXSA9IHAtPnBvczsKKy0gICAgcC0+c29uW3AtPmN5Y2xpY0J1ZmZlclBvc10gPSBjdXJNYXRjaDsKKy0gICAgTU9WRV9QT1MKKy0gIH0KKy0gIHdoaWxlICgtLW51bSAhPSAwKTsKKy19CistCisgdm9pZCBNYXRjaEZpbmRlcl9DcmVhdGVWVGFibGUoQ01hdGNoRmluZGVyICpwLCBJTWF0Y2hGaW5kZXIgKnZUYWJsZSkKKyB7CisgICB2VGFibGUtPkluaXQgPSAoTWZfSW5pdF9GdW5jKU1hdGNoRmluZGVyX0luaXQ7CisgICB2VGFibGUtPkdldEluZGV4Qnl0ZSA9IChNZl9HZXRJbmRleEJ5dGVfRnVuYylNYXRjaEZpbmRlcl9HZXRJbmRleEJ5dGU7CisgICB2VGFibGUtPkdldE51bUF2YWlsYWJsZUJ5dGVzID0gKE1mX0dldE51bUF2YWlsYWJsZUJ5dGVzX0Z1bmMpTWF0Y2hGaW5kZXJfR2V0TnVtQXZhaWxhYmxlQnl0ZXM7CisgICB2VGFibGUtPkdldFBvaW50ZXJUb0N1cnJlbnRQb3MgPSAoTWZfR2V0UG9pbnRlclRvQ3VycmVudFBvc19GdW5jKU1hdGNoRmluZGVyX0dldFBvaW50ZXJUb0N1cnJlbnRQb3M7CistICBpZiAoIXAtPmJ0TW9kZSkKKy0gIHsKKy0gICAgdlRhYmxlLT5HZXRNYXRjaGVzID0gKE1mX0dldE1hdGNoZXNfRnVuYylIYzRfTWF0Y2hGaW5kZXJfR2V0TWF0Y2hlczsKKy0gICAgdlRhYmxlLT5Ta2lwID0gKE1mX1NraXBfRnVuYylIYzRfTWF0Y2hGaW5kZXJfU2tpcDsKKy0gIH0KKy0gIGVsc2UgaWYgKHAtPm51bUhhc2hCeXRlcyA9PSAyKQorLSAgeworLSAgICB2VGFibGUtPkdldE1hdGNoZXMgPSAoTWZfR2V0TWF0Y2hlc19GdW5jKUJ0Ml9NYXRjaEZpbmRlcl9HZXRNYXRjaGVzOworLSAgICB2VGFibGUtPlNraXAgPSAoTWZfU2tpcF9GdW5jKUJ0Ml9NYXRjaEZpbmRlcl9Ta2lwOworLSAgfQorLSAgZWxzZSBpZiAocC0+bnVtSGFzaEJ5dGVzID09IDMpCistICB7CistICAgIHZUYWJsZS0+R2V0TWF0Y2hlcyA9IChNZl9HZXRNYXRjaGVzX0Z1bmMpQnQzX01hdGNoRmluZGVyX0dldE1hdGNoZXM7CistICAgIHZUYWJsZS0+U2tpcCA9IChNZl9Ta2lwX0Z1bmMpQnQzX01hdGNoRmluZGVyX1NraXA7CistICB9CistICBlbHNlCistICB7CistICAgIHZUYWJsZS0+R2V0TWF0Y2hlcyA9IChNZl9HZXRNYXRjaGVzX0Z1bmMpQnQ0X01hdGNoRmluZGVyX0dldE1hdGNoZXM7CistICAgIHZUYWJsZS0+U2tpcCA9IChNZl9Ta2lwX0Z1bmMpQnQ0X01hdGNoRmluZGVyX1NraXA7CistICB9CisrICB2VGFibGUtPkdldE1hdGNoZXMgPSAoTWZfR2V0TWF0Y2hlc19GdW5jKUJ0NF9NYXRjaEZpbmRlcl9HZXRNYXRjaGVzOworKyAgdlRhYmxlLT5Ta2lwID0gKE1mX1NraXBfRnVuYylCdDRfTWF0Y2hGaW5kZXJfU2tpcDsKKyB9CistLS0gYS9saWIvbHptYS9Mem1hRGVjLmMKKysrKyBiL2xpYi9sem1hL0x6bWFEZWMuYworQEAgLTY4Miw3ICs2ODIsNyBAQCBzdGF0aWMgdm9pZCBMem1hRGVjX0luaXRSYyhDTHptYURlYyAqcCwKKyAgIHAtPm5lZWRGbHVzaCA9IDA7CisgfQorIAorLXZvaWQgTHptYURlY19Jbml0RGljQW5kU3RhdGUoQ0x6bWFEZWMgKnAsIEJvb2wgaW5pdERpYywgQm9vbCBpbml0U3RhdGUpCisrc3RhdGljIHZvaWQgTHptYURlY19Jbml0RGljQW5kU3RhdGUoQ0x6bWFEZWMgKnAsIEJvb2wgaW5pdERpYywgQm9vbCBpbml0U3RhdGUpCisgeworICAgcC0+bmVlZEZsdXNoID0gMTsKKyAgIHAtPnJlbWFpbkxlbiA9IDA7CitAQCAtNjk4LDcgKzY5OCw3IEBAIHZvaWQgTHptYURlY19Jbml0RGljQW5kU3RhdGUoQ0x6bWFEZWMgKnAKKyAgICAgcC0+bmVlZEluaXRTdGF0ZSA9IDE7CisgfQorIAorLXZvaWQgTHptYURlY19Jbml0KENMem1hRGVjICpwKQorK3N0YXRpYyB2b2lkIEx6bWFEZWNfSW5pdChDTHptYURlYyAqcCkKKyB7CisgICBwLT5kaWNQb3MgPSAwOworICAgTHptYURlY19Jbml0RGljQW5kU3RhdGUocCwgVHJ1ZSwgVHJ1ZSk7CitAQCAtNzE2LDcgKzcxNiw3IEBAIHN0YXRpYyB2b2lkIEx6bWFEZWNfSW5pdFN0YXRlUmVhbChDTHptYUQKKyAgIHAtPm5lZWRJbml0U3RhdGUgPSAwOworIH0KKyAKKy1TUmVzIEx6bWFEZWNfRGVjb2RlVG9EaWMoQ0x6bWFEZWMgKnAsIFNpemVUIGRpY0xpbWl0LCBjb25zdCBCeXRlICpzcmMsIFNpemVUICpzcmNMZW4sCisrc3RhdGljIFNSZXMgTHptYURlY19EZWNvZGVUb0RpYyhDTHptYURlYyAqcCwgU2l6ZVQgZGljTGltaXQsIGNvbnN0IEJ5dGUgKnNyYywgU2l6ZVQgKnNyY0xlbiwKKyAgICAgRUx6bWFGaW5pc2hNb2RlIGZpbmlzaE1vZGUsIEVMem1hU3RhdHVzICpzdGF0dXMpCisgeworICAgU2l6ZVQgaW5TaXplID0gKnNyY0xlbjsKK0BAIC04MzcsNjUgKzgzNywxMyBAQCBTUmVzIEx6bWFEZWNfRGVjb2RlVG9EaWMoQ0x6bWFEZWMgKnAsIFNpCisgICByZXR1cm4gKHAtPmNvZGUgPT0gMCkgPyBTWl9PSyA6IFNaX0VSUk9SX0RBVEE7CisgfQorIAorLVNSZXMgTHptYURlY19EZWNvZGVUb0J1ZihDTHptYURlYyAqcCwgQnl0ZSAqZGVzdCwgU2l6ZVQgKmRlc3RMZW4sIGNvbnN0IEJ5dGUgKnNyYywgU2l6ZVQgKnNyY0xlbiwgRUx6bWFGaW5pc2hNb2RlIGZpbmlzaE1vZGUsIEVMem1hU3RhdHVzICpzdGF0dXMpCisteworLSAgU2l6ZVQgb3V0U2l6ZSA9ICpkZXN0TGVuOworLSAgU2l6ZVQgaW5TaXplID0gKnNyY0xlbjsKKy0gICpzcmNMZW4gPSAqZGVzdExlbiA9IDA7CistICBmb3IgKDs7KQorLSAgeworLSAgICBTaXplVCBpblNpemVDdXIgPSBpblNpemUsIG91dFNpemVDdXIsIGRpY1BvczsKKy0gICAgRUx6bWFGaW5pc2hNb2RlIGN1ckZpbmlzaE1vZGU7CistICAgIFNSZXMgcmVzOworLSAgICBpZiAocC0+ZGljUG9zID09IHAtPmRpY0J1ZlNpemUpCistICAgICAgcC0+ZGljUG9zID0gMDsKKy0gICAgZGljUG9zID0gcC0+ZGljUG9zOworLSAgICBpZiAob3V0U2l6ZSA+IHAtPmRpY0J1ZlNpemUgLSBkaWNQb3MpCistICAgIHsKKy0gICAgICBvdXRTaXplQ3VyID0gcC0+ZGljQnVmU2l6ZTsKKy0gICAgICBjdXJGaW5pc2hNb2RlID0gTFpNQV9GSU5JU0hfQU5ZOworLSAgICB9CistICAgIGVsc2UKKy0gICAgeworLSAgICAgIG91dFNpemVDdXIgPSBkaWNQb3MgKyBvdXRTaXplOworLSAgICAgIGN1ckZpbmlzaE1vZGUgPSBmaW5pc2hNb2RlOworLSAgICB9CistCistICAgIHJlcyA9IEx6bWFEZWNfRGVjb2RlVG9EaWMocCwgb3V0U2l6ZUN1ciwgc3JjLCAmaW5TaXplQ3VyLCBjdXJGaW5pc2hNb2RlLCBzdGF0dXMpOworLSAgICBzcmMgKz0gaW5TaXplQ3VyOworLSAgICBpblNpemUgLT0gaW5TaXplQ3VyOworLSAgICAqc3JjTGVuICs9IGluU2l6ZUN1cjsKKy0gICAgb3V0U2l6ZUN1ciA9IHAtPmRpY1BvcyAtIGRpY1BvczsKKy0gICAgbWVtY3B5KGRlc3QsIHAtPmRpYyArIGRpY1Bvcywgb3V0U2l6ZUN1cik7CistICAgIGRlc3QgKz0gb3V0U2l6ZUN1cjsKKy0gICAgb3V0U2l6ZSAtPSBvdXRTaXplQ3VyOworLSAgICAqZGVzdExlbiArPSBvdXRTaXplQ3VyOworLSAgICBpZiAocmVzICE9IDApCistICAgICAgcmV0dXJuIHJlczsKKy0gICAgaWYgKG91dFNpemVDdXIgPT0gMCB8fCBvdXRTaXplID09IDApCistICAgICAgcmV0dXJuIFNaX09LOworLSAgfQorLX0KKy0KKy12b2lkIEx6bWFEZWNfRnJlZVByb2JzKENMem1hRGVjICpwLCBJU3pBbGxvYyAqYWxsb2MpCisrc3RhdGljIHZvaWQgTHptYURlY19GcmVlUHJvYnMoQ0x6bWFEZWMgKnAsIElTekFsbG9jICphbGxvYykKKyB7CisgICBhbGxvYy0+RnJlZShhbGxvYywgcC0+cHJvYnMpOworICAgcC0+cHJvYnMgPSAwOworIH0KKyAKKy1zdGF0aWMgdm9pZCBMem1hRGVjX0ZyZWVEaWN0KENMem1hRGVjICpwLCBJU3pBbGxvYyAqYWxsb2MpCisteworLSAgYWxsb2MtPkZyZWUoYWxsb2MsIHAtPmRpYyk7CistICBwLT5kaWMgPSAwOworLX0KKy0KKy12b2lkIEx6bWFEZWNfRnJlZShDTHptYURlYyAqcCwgSVN6QWxsb2MgKmFsbG9jKQorLXsKKy0gIEx6bWFEZWNfRnJlZVByb2JzKHAsIGFsbG9jKTsKKy0gIEx6bWFEZWNfRnJlZURpY3QocCwgYWxsb2MpOworLX0KKy0KKy1TUmVzIEx6bWFQcm9wc19EZWNvZGUoQ0x6bWFQcm9wcyAqcCwgY29uc3QgQnl0ZSAqZGF0YSwgdW5zaWduZWQgc2l6ZSkKKytzdGF0aWMgU1JlcyBMem1hUHJvcHNfRGVjb2RlKENMem1hUHJvcHMgKnAsIGNvbnN0IEJ5dGUgKmRhdGEsIHVuc2lnbmVkIHNpemUpCisgeworICAgVUludDMyIGRpY1NpemU7CisgICBCeXRlIGQ7CitAQCAtOTM1LDcgKzg4Myw3IEBAIHN0YXRpYyBTUmVzIEx6bWFEZWNfQWxsb2NhdGVQcm9iczIoQ0x6bWEKKyAgIHJldHVybiBTWl9PSzsKKyB9CisgCistU1JlcyBMem1hRGVjX0FsbG9jYXRlUHJvYnMoQ0x6bWFEZWMgKnAsIGNvbnN0IEJ5dGUgKnByb3BzLCB1bnNpZ25lZCBwcm9wc1NpemUsIElTekFsbG9jICphbGxvYykKKytzdGF0aWMgU1JlcyBMem1hRGVjX0FsbG9jYXRlUHJvYnMoQ0x6bWFEZWMgKnAsIGNvbnN0IEJ5dGUgKnByb3BzLCB1bnNpZ25lZCBwcm9wc1NpemUsIElTekFsbG9jICphbGxvYykKKyB7CisgICBDTHptYVByb3BzIHByb3BOZXc7CisgICBSSU5PSyhMem1hUHJvcHNfRGVjb2RlKCZwcm9wTmV3LCBwcm9wcywgcHJvcHNTaXplKSk7CitAQCAtOTQzLDI4ICs4OTEsNiBAQCBTUmVzIEx6bWFEZWNfQWxsb2NhdGVQcm9icyhDTHptYURlYyAqcCwKKyAgIHAtPnByb3AgPSBwcm9wTmV3OworICAgcmV0dXJuIFNaX09LOworIH0KKy0KKy1TUmVzIEx6bWFEZWNfQWxsb2NhdGUoQ0x6bWFEZWMgKnAsIGNvbnN0IEJ5dGUgKnByb3BzLCB1bnNpZ25lZCBwcm9wc1NpemUsIElTekFsbG9jICphbGxvYykKKy17CistICBDTHptYVByb3BzIHByb3BOZXc7CistICBTaXplVCBkaWNCdWZTaXplOworLSAgUklOT0soTHptYVByb3BzX0RlY29kZSgmcHJvcE5ldywgcHJvcHMsIHByb3BzU2l6ZSkpOworLSAgUklOT0soTHptYURlY19BbGxvY2F0ZVByb2JzMihwLCAmcHJvcE5ldywgYWxsb2MpKTsKKy0gIGRpY0J1ZlNpemUgPSBwcm9wTmV3LmRpY1NpemU7CistICBpZiAocC0+ZGljID09IDAgfHwgZGljQnVmU2l6ZSAhPSBwLT5kaWNCdWZTaXplKQorLSAgeworLSAgICBMem1hRGVjX0ZyZWVEaWN0KHAsIGFsbG9jKTsKKy0gICAgcC0+ZGljID0gKEJ5dGUgKilhbGxvYy0+QWxsb2MoYWxsb2MsIGRpY0J1ZlNpemUpOworLSAgICBpZiAocC0+ZGljID09IDApCistICAgIHsKKy0gICAgICBMem1hRGVjX0ZyZWVQcm9icyhwLCBhbGxvYyk7CistICAgICAgcmV0dXJuIFNaX0VSUk9SX01FTTsKKy0gICAgfQorLSAgfQorLSAgcC0+ZGljQnVmU2l6ZSA9IGRpY0J1ZlNpemU7CistICBwLT5wcm9wID0gcHJvcE5ldzsKKy0gIHJldHVybiBTWl9PSzsKKy19CisgCisgU1JlcyBMem1hRGVjb2RlKEJ5dGUgKmRlc3QsIFNpemVUICpkZXN0TGVuLCBjb25zdCBCeXRlICpzcmMsIFNpemVUICpzcmNMZW4sCisgICAgIGNvbnN0IEJ5dGUgKnByb3BEYXRhLCB1bnNpZ25lZCBwcm9wU2l6ZSwgRUx6bWFGaW5pc2hNb2RlIGZpbmlzaE1vZGUsCistLS0gYS9saWIvbHptYS9Mem1hRW5jLmMKKysrKyBiL2xpYi9sem1hL0x6bWFFbmMuYworQEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBMem1hRW5jUHJvcHNfSW5pdChDTHptYUVuY1Byb3BzICpwKQorICAgcC0+d3JpdGVFbmRNYXJrID0gMDsKKyB9CisgCistdm9pZCBMem1hRW5jUHJvcHNfTm9ybWFsaXplKENMem1hRW5jUHJvcHMgKnApCisrc3RhdGljIHZvaWQgTHptYUVuY1Byb3BzX05vcm1hbGl6ZShDTHptYUVuY1Byb3BzICpwKQorIHsKKyAgIGludCBsZXZlbCA9IHAtPmxldmVsOworICAgaWYgKGxldmVsIDwgMCkgbGV2ZWwgPSA1OworQEAgLTc2LDcgKzc2LDcgQEAgdm9pZCBMem1hRW5jUHJvcHNfTm9ybWFsaXplKENMem1hRW5jUHJvcAorICAgICAgICNlbmRpZgorIH0KKyAKKy1VSW50MzIgTHptYUVuY1Byb3BzX0dldERpY3RTaXplKGNvbnN0IENMem1hRW5jUHJvcHMgKnByb3BzMikKKytzdGF0aWMgVUludDMyIF9fbWF5YmVfdW51c2VkIEx6bWFFbmNQcm9wc19HZXREaWN0U2l6ZShjb25zdCBDTHptYUVuY1Byb3BzICpwcm9wczIpCisgeworICAgQ0x6bWFFbmNQcm9wcyBwcm9wcyA9ICpwcm9wczI7CisgICBMem1hRW5jUHJvcHNfTm9ybWFsaXplKCZwcm9wcyk7CitAQCAtOTMsNyArOTMsNyBAQCBVSW50MzIgTHptYUVuY1Byb3BzX0dldERpY3RTaXplKGNvbnN0IENMCisgCisgI2RlZmluZSBCU1IyX1JFVChwb3MsIHJlcykgeyB1bnNpZ25lZCBsb25nIGk7IF9CaXRTY2FuUmV2ZXJzZSgmaSwgKHBvcykpOyByZXMgPSAoaSArIGkpICsgKChwb3MgPj4gKGkgLSAxKSkgJiAxKTsgfQorIAorLVVJbnQzMiBHZXRQb3NTbG90MShVSW50MzIgcG9zKQorK3N0YXRpYyBVSW50MzIgR2V0UG9zU2xvdDEoVUludDMyIHBvcykKKyB7CisgICBVSW50MzIgcmVzOworICAgQlNSMl9SRVQocG9zLCByZXMpOworQEAgLTEwNyw3ICsxMDcsNyBAQCBVSW50MzIgR2V0UG9zU2xvdDEoVUludDMyIHBvcykKKyAjZGVmaW5lIGtOdW1Mb2dCaXRzICg5ICsgKGludClzaXplb2Yoc2l6ZV90KSAvIDIpCisgI2RlZmluZSBrRGljTG9nU2l6ZU1heENvbXByZXNzICgoa051bUxvZ0JpdHMgLSAxKSAqIDIgKyA3KQorIAorLXZvaWQgTHptYUVuY19GYXN0UG9zSW5pdChCeXRlICpnX0Zhc3RQb3MpCisrc3RhdGljIHZvaWQgTHptYUVuY19GYXN0UG9zSW5pdChCeXRlICpnX0Zhc3RQb3MpCisgeworICAgaW50IGMgPSAyLCBzbG90RmFzdDsKKyAgIGdfRmFzdFBvc1swXSA9IDA7CitAQCAtMzM5LDU4ICszMzksNiBAQCB0eXBlZGVmIHN0cnVjdAorICAgQ1NhdmVTdGF0ZSBzYXZlU3RhdGU7CisgfSBDTHptYUVuYzsKKyAKKy12b2lkIEx6bWFFbmNfU2F2ZVN0YXRlKENMem1hRW5jSGFuZGxlIHBwKQorLXsKKy0gIENMem1hRW5jICpwID0gKENMem1hRW5jICopcHA7CistICBDU2F2ZVN0YXRlICpkZXN0ID0gJnAtPnNhdmVTdGF0ZTsKKy0gIGludCBpOworLSAgZGVzdC0+bGVuRW5jID0gcC0+bGVuRW5jOworLSAgZGVzdC0+cmVwTGVuRW5jID0gcC0+cmVwTGVuRW5jOworLSAgZGVzdC0+c3RhdGUgPSBwLT5zdGF0ZTsKKy0KKy0gIGZvciAoaSA9IDA7IGkgPCBrTnVtU3RhdGVzOyBpKyspCistICB7CistICAgIG1lbWNweShkZXN0LT5pc01hdGNoW2ldLCBwLT5pc01hdGNoW2ldLCBzaXplb2YocC0+aXNNYXRjaFtpXSkpOworLSAgICBtZW1jcHkoZGVzdC0+aXNSZXAwTG9uZ1tpXSwgcC0+aXNSZXAwTG9uZ1tpXSwgc2l6ZW9mKHAtPmlzUmVwMExvbmdbaV0pKTsKKy0gIH0KKy0gIGZvciAoaSA9IDA7IGkgPCBrTnVtTGVuVG9Qb3NTdGF0ZXM7IGkrKykKKy0gICAgbWVtY3B5KGRlc3QtPnBvc1Nsb3RFbmNvZGVyW2ldLCBwLT5wb3NTbG90RW5jb2RlcltpXSwgc2l6ZW9mKHAtPnBvc1Nsb3RFbmNvZGVyW2ldKSk7CistICBtZW1jcHkoZGVzdC0+aXNSZXAsIHAtPmlzUmVwLCBzaXplb2YocC0+aXNSZXApKTsKKy0gIG1lbWNweShkZXN0LT5pc1JlcEcwLCBwLT5pc1JlcEcwLCBzaXplb2YocC0+aXNSZXBHMCkpOworLSAgbWVtY3B5KGRlc3QtPmlzUmVwRzEsIHAtPmlzUmVwRzEsIHNpemVvZihwLT5pc1JlcEcxKSk7CistICBtZW1jcHkoZGVzdC0+aXNSZXBHMiwgcC0+aXNSZXBHMiwgc2l6ZW9mKHAtPmlzUmVwRzIpKTsKKy0gIG1lbWNweShkZXN0LT5wb3NFbmNvZGVycywgcC0+cG9zRW5jb2RlcnMsIHNpemVvZihwLT5wb3NFbmNvZGVycykpOworLSAgbWVtY3B5KGRlc3QtPnBvc0FsaWduRW5jb2RlciwgcC0+cG9zQWxpZ25FbmNvZGVyLCBzaXplb2YocC0+cG9zQWxpZ25FbmNvZGVyKSk7CistICBtZW1jcHkoZGVzdC0+cmVwcywgcC0+cmVwcywgc2l6ZW9mKHAtPnJlcHMpKTsKKy0gIG1lbWNweShkZXN0LT5saXRQcm9icywgcC0+bGl0UHJvYnMsICgweDMwMCA8PCBwLT5sY2xwKSAqIHNpemVvZihDTHptYVByb2IpKTsKKy19CistCistdm9pZCBMem1hRW5jX1Jlc3RvcmVTdGF0ZShDTHptYUVuY0hhbmRsZSBwcCkKKy17CistICBDTHptYUVuYyAqZGVzdCA9IChDTHptYUVuYyAqKXBwOworLSAgY29uc3QgQ1NhdmVTdGF0ZSAqcCA9ICZkZXN0LT5zYXZlU3RhdGU7CistICBpbnQgaTsKKy0gIGRlc3QtPmxlbkVuYyA9IHAtPmxlbkVuYzsKKy0gIGRlc3QtPnJlcExlbkVuYyA9IHAtPnJlcExlbkVuYzsKKy0gIGRlc3QtPnN0YXRlID0gcC0+c3RhdGU7CistCistICBmb3IgKGkgPSAwOyBpIDwga051bVN0YXRlczsgaSsrKQorLSAgeworLSAgICBtZW1jcHkoZGVzdC0+aXNNYXRjaFtpXSwgcC0+aXNNYXRjaFtpXSwgc2l6ZW9mKHAtPmlzTWF0Y2hbaV0pKTsKKy0gICAgbWVtY3B5KGRlc3QtPmlzUmVwMExvbmdbaV0sIHAtPmlzUmVwMExvbmdbaV0sIHNpemVvZihwLT5pc1JlcDBMb25nW2ldKSk7CistICB9CistICBmb3IgKGkgPSAwOyBpIDwga051bUxlblRvUG9zU3RhdGVzOyBpKyspCistICAgIG1lbWNweShkZXN0LT5wb3NTbG90RW5jb2RlcltpXSwgcC0+cG9zU2xvdEVuY29kZXJbaV0sIHNpemVvZihwLT5wb3NTbG90RW5jb2RlcltpXSkpOworLSAgbWVtY3B5KGRlc3QtPmlzUmVwLCBwLT5pc1JlcCwgc2l6ZW9mKHAtPmlzUmVwKSk7CistICBtZW1jcHkoZGVzdC0+aXNSZXBHMCwgcC0+aXNSZXBHMCwgc2l6ZW9mKHAtPmlzUmVwRzApKTsKKy0gIG1lbWNweShkZXN0LT5pc1JlcEcxLCBwLT5pc1JlcEcxLCBzaXplb2YocC0+aXNSZXBHMSkpOworLSAgbWVtY3B5KGRlc3QtPmlzUmVwRzIsIHAtPmlzUmVwRzIsIHNpemVvZihwLT5pc1JlcEcyKSk7CistICBtZW1jcHkoZGVzdC0+cG9zRW5jb2RlcnMsIHAtPnBvc0VuY29kZXJzLCBzaXplb2YocC0+cG9zRW5jb2RlcnMpKTsKKy0gIG1lbWNweShkZXN0LT5wb3NBbGlnbkVuY29kZXIsIHAtPnBvc0FsaWduRW5jb2Rlciwgc2l6ZW9mKHAtPnBvc0FsaWduRW5jb2RlcikpOworLSAgbWVtY3B5KGRlc3QtPnJlcHMsIHAtPnJlcHMsIHNpemVvZihwLT5yZXBzKSk7CistICBtZW1jcHkoZGVzdC0+bGl0UHJvYnMsIHAtPmxpdFByb2JzLCAoMHgzMDAgPDwgZGVzdC0+bGNscCkgKiBzaXplb2YoQ0x6bWFQcm9iKSk7CistfQorLQorIFNSZXMgTHptYUVuY19TZXRQcm9wcyhDTHptYUVuY0hhbmRsZSBwcCwgY29uc3QgQ0x6bWFFbmNQcm9wcyAqcHJvcHMyKQorIHsKKyAgIENMem1hRW5jICpwID0gKENMem1hRW5jICopcHA7CitAQCAtNjAwLDcgKzU0OCw3IEBAIHN0YXRpYyB2b2lkIExpdEVuY19FbmNvZGVNYXRjaGVkKENSYW5nZUUKKyAgIHdoaWxlIChzeW1ib2wgPCAweDEwMDAwKTsKKyB9CisgCistdm9pZCBMem1hRW5jX0luaXRQcmljZVRhYmxlcyhVSW50MzIgKlByb2JQcmljZXMpCisrc3RhdGljIHZvaWQgTHptYUVuY19Jbml0UHJpY2VUYWJsZXMoVUludDMyICpQcm9iUHJpY2VzKQorIHsKKyAgIFVJbnQzMiBpOworICAgZm9yIChpID0gKDEgPDwga051bU1vdmVSZWR1Y2luZ0JpdHMpIC8gMjsgaSA8IGtCaXRNb2RlbFRvdGFsOyBpICs9ICgxIDw8IGtOdW1Nb3ZlUmVkdWNpbmdCaXRzKSkKK0BAIC0xNjc2LDcgKzE2MjQsNyBAQCBzdGF0aWMgdm9pZCBGaWxsRGlzdGFuY2VzUHJpY2VzKENMem1hRW5jCisgICBwLT5tYXRjaFByaWNlQ291bnQgPSAwOworIH0KKyAKKy12b2lkIEx6bWFFbmNfQ29uc3RydWN0KENMem1hRW5jICpwKQorK3N0YXRpYyB2b2lkIEx6bWFFbmNfQ29uc3RydWN0KENMem1hRW5jICpwKQorIHsKKyAgIFJhbmdlRW5jX0NvbnN0cnVjdCgmcC0+cmMpOworICAgTWF0Y2hGaW5kZXJfQ29uc3RydWN0KCZwLT5tYXRjaEZpbmRlckJhc2UpOworQEAgLTE3MDksNyArMTY1Nyw3IEBAIENMem1hRW5jSGFuZGxlIEx6bWFFbmNfQ3JlYXRlKElTekFsbG9jICoKKyAgIHJldHVybiBwOworIH0KKyAKKy12b2lkIEx6bWFFbmNfRnJlZUxpdHMoQ0x6bWFFbmMgKnAsIElTekFsbG9jICphbGxvYykKKytzdGF0aWMgdm9pZCBMem1hRW5jX0ZyZWVMaXRzKENMem1hRW5jICpwLCBJU3pBbGxvYyAqYWxsb2MpCisgeworICAgYWxsb2MtPkZyZWUoYWxsb2MsIHAtPmxpdFByb2JzKTsKKyAgIGFsbG9jLT5GcmVlKGFsbG9jLCBwLT5zYXZlU3RhdGUubGl0UHJvYnMpOworQEAgLTE3MTcsNyArMTY2NSw3IEBAIHZvaWQgTHptYUVuY19GcmVlTGl0cyhDTHptYUVuYyAqcCwgSVN6QWwKKyAgIHAtPnNhdmVTdGF0ZS5saXRQcm9icyA9IDA7CisgfQorIAorLXZvaWQgTHptYUVuY19EZXN0cnVjdChDTHptYUVuYyAqcCwgSVN6QWxsb2MgKmFsbG9jLCBJU3pBbGxvYyAqYWxsb2NCaWcpCisrc3RhdGljIHZvaWQgTHptYUVuY19EZXN0cnVjdChDTHptYUVuYyAqcCwgSVN6QWxsb2MgKmFsbG9jLCBJU3pBbGxvYyAqYWxsb2NCaWcpCisgeworICAgI2lmbmRlZiBfN1pJUF9TVAorICAgTWF0Y2hGaW5kZXJNdF9EZXN0cnVjdCgmcC0+bWF0Y2hGaW5kZXJNdCwgYWxsb2NCaWcpOworQEAgLTE5NDcsNyArMTg5NSw3IEBAIHN0YXRpYyBTUmVzIEx6bWFFbmNfQWxsb2MoQ0x6bWFFbmMgKnAsIFUKKyAgIHJldHVybiBTWl9PSzsKKyB9CisgCistdm9pZCBMem1hRW5jX0luaXQoQ0x6bWFFbmMgKnApCisrc3RhdGljIHZvaWQgTHptYUVuY19Jbml0KENMem1hRW5jICpwKQorIHsKKyAgIFVJbnQzMiBpOworICAgcC0+c3RhdGUgPSAwOworQEAgLTIwMDUsNyArMTk1Myw3IEBAIHZvaWQgTHptYUVuY19Jbml0KENMem1hRW5jICpwKQorICAgcC0+bHBNYXNrID0gKDEgPDwgcC0+bHApIC0gMTsKKyB9CisgCistdm9pZCBMem1hRW5jX0luaXRQcmljZXMoQ0x6bWFFbmMgKnApCisrc3RhdGljIHZvaWQgTHptYUVuY19Jbml0UHJpY2VzKENMem1hRW5jICpwKQorIHsKKyAgIGlmICghcC0+ZmFzdE1vZGUpCisgICB7CitAQCAtMjAzNywyNiArMTk4NSw2IEBAIHN0YXRpYyBTUmVzIEx6bWFFbmNfQWxsb2NBbmRJbml0KENMem1hRW4KKyAgIHJldHVybiBTWl9PSzsKKyB9CisgCistc3RhdGljIFNSZXMgTHptYUVuY19QcmVwYXJlKENMem1hRW5jSGFuZGxlIHBwLCBJU2VxT3V0U3RyZWFtICpvdXRTdHJlYW0sIElTZXFJblN0cmVhbSAqaW5TdHJlYW0sCistICAgIElTekFsbG9jICphbGxvYywgSVN6QWxsb2MgKmFsbG9jQmlnKQorLXsKKy0gIENMem1hRW5jICpwID0gKENMem1hRW5jICopcHA7CistICBwLT5tYXRjaEZpbmRlckJhc2Uuc3RyZWFtID0gaW5TdHJlYW07CistICBwLT5uZWVkSW5pdCA9IDE7CistICBwLT5yYy5vdXRTdHJlYW0gPSBvdXRTdHJlYW07CistICByZXR1cm4gTHptYUVuY19BbGxvY0FuZEluaXQocCwgMCwgYWxsb2MsIGFsbG9jQmlnKTsKKy19CistCistU1JlcyBMem1hRW5jX1ByZXBhcmVGb3JMem1hMihDTHptYUVuY0hhbmRsZSBwcCwKKy0gICAgSVNlcUluU3RyZWFtICppblN0cmVhbSwgVUludDMyIGtlZXBXaW5kb3dTaXplLAorLSAgICBJU3pBbGxvYyAqYWxsb2MsIElTekFsbG9jICphbGxvY0JpZykKKy17CistICBDTHptYUVuYyAqcCA9IChDTHptYUVuYyAqKXBwOworLSAgcC0+bWF0Y2hGaW5kZXJCYXNlLnN0cmVhbSA9IGluU3RyZWFtOworLSAgcC0+bmVlZEluaXQgPSAxOworLSAgcmV0dXJuIEx6bWFFbmNfQWxsb2NBbmRJbml0KHAsIGtlZXBXaW5kb3dTaXplLCBhbGxvYywgYWxsb2NCaWcpOworLX0KKy0KKyBzdGF0aWMgdm9pZCBMem1hRW5jX1NldElucHV0QnVmKENMem1hRW5jICpwLCBjb25zdCBCeXRlICpzcmMsIFNpemVUIHNyY0xlbikKKyB7CisgICBwLT5tYXRjaEZpbmRlckJhc2UuZGlyZWN0SW5wdXQgPSAxOworQEAgLTIwNjQsNyArMTk5Miw3IEBAIHN0YXRpYyB2b2lkIEx6bWFFbmNfU2V0SW5wdXRCdWYoQ0x6bWFFbmMKKyAgIHAtPm1hdGNoRmluZGVyQmFzZS5kaXJlY3RJbnB1dFJlbSA9IHNyY0xlbjsKKyB9CisgCistU1JlcyBMem1hRW5jX01lbVByZXBhcmUoQ0x6bWFFbmNIYW5kbGUgcHAsIGNvbnN0IEJ5dGUgKnNyYywgU2l6ZVQgc3JjTGVuLAorK3N0YXRpYyBTUmVzIEx6bWFFbmNfTWVtUHJlcGFyZShDTHptYUVuY0hhbmRsZSBwcCwgY29uc3QgQnl0ZSAqc3JjLCBTaXplVCBzcmNMZW4sCisgICAgIFVJbnQzMiBrZWVwV2luZG93U2l6ZSwgSVN6QWxsb2MgKmFsbG9jLCBJU3pBbGxvYyAqYWxsb2NCaWcpCisgeworICAgQ0x6bWFFbmMgKnAgPSAoQ0x6bWFFbmMgKilwcDsKK0BAIC0yMDc0LDcgKzIwMDIsNyBAQCBTUmVzIEx6bWFFbmNfTWVtUHJlcGFyZShDTHptYUVuY0hhbmRsZSBwCisgICByZXR1cm4gTHptYUVuY19BbGxvY0FuZEluaXQocCwga2VlcFdpbmRvd1NpemUsIGFsbG9jLCBhbGxvY0JpZyk7CisgfQorIAorLXZvaWQgTHptYUVuY19GaW5pc2goQ0x6bWFFbmNIYW5kbGUgcHApCisrc3RhdGljIHZvaWQgTHptYUVuY19GaW5pc2goQ0x6bWFFbmNIYW5kbGUgcHApCisgeworICAgI2lmbmRlZiBfN1pJUF9TVAorICAgQ0x6bWFFbmMgKnAgPSAoQ0x6bWFFbmMgKilwcDsKK0BAIC0yMTA3LDUzICsyMDM1LDYgQEAgc3RhdGljIHNpemVfdCBNeVdyaXRlKHZvaWQgKnBwLCBjb25zdCB2bworICAgcmV0dXJuIHNpemU7CisgfQorIAorLQorLVVJbnQzMiBMem1hRW5jX0dldE51bUF2YWlsYWJsZUJ5dGVzKENMem1hRW5jSGFuZGxlIHBwKQorLXsKKy0gIGNvbnN0IENMem1hRW5jICpwID0gKENMem1hRW5jICopcHA7CistICByZXR1cm4gcC0+bWF0Y2hGaW5kZXIuR2V0TnVtQXZhaWxhYmxlQnl0ZXMocC0+bWF0Y2hGaW5kZXJPYmopOworLX0KKy0KKy1jb25zdCBCeXRlICpMem1hRW5jX0dldEN1ckJ1ZihDTHptYUVuY0hhbmRsZSBwcCkKKy17CistICBjb25zdCBDTHptYUVuYyAqcCA9IChDTHptYUVuYyAqKXBwOworLSAgcmV0dXJuIHAtPm1hdGNoRmluZGVyLkdldFBvaW50ZXJUb0N1cnJlbnRQb3MocC0+bWF0Y2hGaW5kZXJPYmopIC0gcC0+YWRkaXRpb25hbE9mZnNldDsKKy19CistCistU1JlcyBMem1hRW5jX0NvZGVPbmVNZW1CbG9jayhDTHptYUVuY0hhbmRsZSBwcCwgQm9vbCByZUluaXQsCistICAgIEJ5dGUgKmRlc3QsIHNpemVfdCAqZGVzdExlbiwgVUludDMyIGRlc2lyZWRQYWNrU2l6ZSwgVUludDMyICp1bnBhY2tTaXplKQorLXsKKy0gIENMem1hRW5jICpwID0gKENMem1hRW5jICopcHA7CistICBVSW50NjQgbm93UG9zNjQ7CistICBTUmVzIHJlczsKKy0gIENTZXFPdXRTdHJlYW1CdWYgb3V0U3RyZWFtOworLQorLSAgb3V0U3RyZWFtLmZ1bmNUYWJsZS5Xcml0ZSA9IE15V3JpdGU7CistICBvdXRTdHJlYW0uZGF0YSA9IGRlc3Q7CistICBvdXRTdHJlYW0ucmVtID0gKmRlc3RMZW47CistICBvdXRTdHJlYW0ub3ZlcmZsb3cgPSBGYWxzZTsKKy0KKy0gIHAtPndyaXRlRW5kTWFyayA9IEZhbHNlOworLSAgcC0+ZmluaXNoZWQgPSBGYWxzZTsKKy0gIHAtPnJlc3VsdCA9IFNaX09LOworLQorLSAgaWYgKHJlSW5pdCkKKy0gICAgTHptYUVuY19Jbml0KHApOworLSAgTHptYUVuY19Jbml0UHJpY2VzKHApOworLSAgbm93UG9zNjQgPSBwLT5ub3dQb3M2NDsKKy0gIFJhbmdlRW5jX0luaXQoJnAtPnJjKTsKKy0gIHAtPnJjLm91dFN0cmVhbSA9ICZvdXRTdHJlYW0uZnVuY1RhYmxlOworLQorLSAgcmVzID0gTHptYUVuY19Db2RlT25lQmxvY2socCwgVHJ1ZSwgZGVzaXJlZFBhY2tTaXplLCAqdW5wYWNrU2l6ZSk7CistCistICAqdW5wYWNrU2l6ZSA9IChVSW50MzIpKHAtPm5vd1BvczY0IC0gbm93UG9zNjQpOworLSAgKmRlc3RMZW4gLT0gb3V0U3RyZWFtLnJlbTsKKy0gIGlmIChvdXRTdHJlYW0ub3ZlcmZsb3cpCistICAgIHJldHVybiBTWl9FUlJPUl9PVVRQVVRfRU9GOworLQorLSAgcmV0dXJuIHJlczsKKy19CistCisgc3RhdGljIFNSZXMgTHptYUVuY19FbmNvZGUyKENMem1hRW5jICpwLCBJQ29tcHJlc3NQcm9ncmVzcyAqcHJvZ3Jlc3MpCisgeworICAgU1JlcyByZXMgPSBTWl9PSzsKK0BAIC0yMTg0LDEzICsyMDY1LDYgQEAgc3RhdGljIFNSZXMgTHptYUVuY19FbmNvZGUyKENMem1hRW5jICpwLAorICAgcmV0dXJuIHJlczsKKyB9CisgCistU1JlcyBMem1hRW5jX0VuY29kZShDTHptYUVuY0hhbmRsZSBwcCwgSVNlcU91dFN0cmVhbSAqb3V0U3RyZWFtLCBJU2VxSW5TdHJlYW0gKmluU3RyZWFtLCBJQ29tcHJlc3NQcm9ncmVzcyAqcHJvZ3Jlc3MsCistICAgIElTekFsbG9jICphbGxvYywgSVN6QWxsb2MgKmFsbG9jQmlnKQorLXsKKy0gIFJJTk9LKEx6bWFFbmNfUHJlcGFyZShwcCwgb3V0U3RyZWFtLCBpblN0cmVhbSwgYWxsb2MsIGFsbG9jQmlnKSk7CistICByZXR1cm4gTHptYUVuY19FbmNvZGUyKChDTHptYUVuYyAqKXBwLCBwcm9ncmVzcyk7CistfQorLQorIFNSZXMgTHptYUVuY19Xcml0ZVByb3BlcnRpZXMoQ0x6bWFFbmNIYW5kbGUgcHAsIEJ5dGUgKnByb3BzLCBTaXplVCAqc2l6ZSkKKyB7CisgICBDTHptYUVuYyAqcCA9IChDTHptYUVuYyAqKXBwOworQEAgLTIyNDcsMjUgKzIxMjEsMyBAQCBTUmVzIEx6bWFFbmNfTWVtRW5jb2RlKENMem1hRW5jSGFuZGxlIHBwCisgICAgIHJldHVybiBTWl9FUlJPUl9PVVRQVVRfRU9GOworICAgcmV0dXJuIHJlczsKKyB9CistCistU1JlcyBMem1hRW5jb2RlKEJ5dGUgKmRlc3QsIFNpemVUICpkZXN0TGVuLCBjb25zdCBCeXRlICpzcmMsIFNpemVUIHNyY0xlbiwKKy0gICAgY29uc3QgQ0x6bWFFbmNQcm9wcyAqcHJvcHMsIEJ5dGUgKnByb3BzRW5jb2RlZCwgU2l6ZVQgKnByb3BzU2l6ZSwgaW50IHdyaXRlRW5kTWFyaywKKy0gICAgSUNvbXByZXNzUHJvZ3Jlc3MgKnByb2dyZXNzLCBJU3pBbGxvYyAqYWxsb2MsIElTekFsbG9jICphbGxvY0JpZykKKy17CistICBDTHptYUVuYyAqcCA9IChDTHptYUVuYyAqKUx6bWFFbmNfQ3JlYXRlKGFsbG9jKTsKKy0gIFNSZXMgcmVzOworLSAgaWYgKHAgPT0gMCkKKy0gICAgcmV0dXJuIFNaX0VSUk9SX01FTTsKKy0KKy0gIHJlcyA9IEx6bWFFbmNfU2V0UHJvcHMocCwgcHJvcHMpOworLSAgaWYgKHJlcyA9PSBTWl9PSykKKy0gIHsKKy0gICAgcmVzID0gTHptYUVuY19Xcml0ZVByb3BlcnRpZXMocCwgcHJvcHNFbmNvZGVkLCBwcm9wc1NpemUpOworLSAgICBpZiAocmVzID09IFNaX09LKQorLSAgICAgIHJlcyA9IEx6bWFFbmNfTWVtRW5jb2RlKHAsIGRlc3QsIGRlc3RMZW4sIHNyYywgc3JjTGVuLAorLSAgICAgICAgICB3cml0ZUVuZE1hcmssIHByb2dyZXNzLCBhbGxvYywgYWxsb2NCaWcpOworLSAgfQorLQorLSAgTHptYUVuY19EZXN0cm95KHAsIGFsbG9jLCBhbGxvY0JpZyk7CistICByZXR1cm4gcmVzOworLX0KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzU1MC1sb29wLVJlcG9ydC1FT1BOT1RTVVBQLXByb3Blcmx5LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvaGFjay01LjQvNTUwLWxvb3AtUmVwb3J0LUVPUE5PVFNVUFAtcHJvcGVybHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU1NDQ3ZAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzU1MC1sb29wLVJlcG9ydC1FT1BOT1RTVVBQLXByb3Blcmx5LnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK0Zyb20gMmU4NjQzODZlNjJlNzAyYTM0M2JlMjUwNzA2MmVlMDhkNWRmYzgxMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEV2YW4gR3JlZW4gPGV2Z3JlZW5AY2hyb21pdW0ub3JnPgorRGF0ZTogVGh1LCAxNCBOb3YgMjAxOSAxNTo1MDowNyAtMDgwMAorU3ViamVjdDogbG9vcDogUmVwb3J0IEVPUE5PVFNVUFAgcHJvcGVybHkKKworUHJvcGVybHkgcGx1bWIgb3V0IEVPUE5PVFNVUFAgZnJvbSBsb29wIGRyaXZlciBvcGVyYXRpb25zLCB3aGljaCBtYXkKK2dldCByZXR1cm5lZCB3aGVuIGZvciBpbnN0YW5jZSBhIGRpc2NhcmQgb3BlcmF0aW9uIGlzIGF0dGVtcHRlZCBidXQgbm90CitzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlLiBCZWZvcmUgdGhpcyBjaGFuZ2UsIGV2ZXJ5dGhpbmcKK3dhcyByZXBvcnRlZCBpbiB0aGUgbG9nIGFzIGFuIEkvTyBlcnJvciwgd2hpY2ggaXMgc2NhcnkgYW5kIG5vdAoraGVscGZ1bCBpbiBkZWJ1Z2dpbmcuCisKK1NpZ25lZC1vZmYtYnk6IEV2YW4gR3JlZW4gPGV2Z3JlZW5AY2hyb21pdW0ub3JnPgorUmV2aWV3ZWQtYnk6IEd3ZW5kYWwgR3JpZ25vdSA8Z3dlbmRhbEBjaHJvbWl1bS5vcmc+CitSZXZpZXdlZC1ieTogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CistLS0KKyBkcml2ZXJzL2Jsb2NrL2xvb3AuYyB8IDcgKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jCisrKysgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYworQEAgLTQ2Miw3ICs0NjIsNyBAQCBzdGF0aWMgdm9pZCBsb19jb21wbGV0ZV9ycShzdHJ1Y3QgcmVxdWVzCisgCWlmICghY21kLT51c2VfYWlvIHx8IGNtZC0+cmV0IDwgMCB8fCBjbWQtPnJldCA9PSBibGtfcnFfYnl0ZXMocnEpIHx8CisgCSAgICByZXFfb3AocnEpICE9IFJFUV9PUF9SRUFEKSB7CisgCQlpZiAoY21kLT5yZXQgPCAwKQorLQkJCXJldCA9IEJMS19TVFNfSU9FUlI7CisrCQkJcmV0ID0gZXJybm9fdG9fYmxrX3N0YXR1cyhjbWQtPnJldCk7CisgCQlnb3RvIGVuZF9pbzsKKyAJfQorIAorQEAgLTE5NzMsNyArMTk3MywxMCBAQCBzdGF0aWMgdm9pZCBsb29wX2hhbmRsZV9jbWQoc3RydWN0IGxvb3BfCisgIGZhaWxlZDoKKyAJLyogY29tcGxldGUgbm9uLWFpbyByZXF1ZXN0ICovCisgCWlmICghY21kLT51c2VfYWlvIHx8IHJldCkgeworLQkJY21kLT5yZXQgPSByZXQgPyAtRUlPIDogMDsKKysJCWlmIChyZXQgPT0gLUVPUE5PVFNVUFApCisrCQkJY21kLT5yZXQgPSByZXQ7CisrCQllbHNlCisrCQkJY21kLT5yZXQgPSByZXQgPyAtRUlPIDogMDsKKyAJCWJsa19tcV9jb21wbGV0ZV9yZXF1ZXN0KHJxKTsKKyAJfQorIH0KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzY0MC1icmlkZ2Utb25seS1hY2NlcHQtRUFQLWxvY2FsbHkucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC82NDAtYnJpZGdlLW9ubHktYWNjZXB0LUVBUC1sb2NhbGx5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MTNhYTMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC82NDAtYnJpZGdlLW9ubHktYWNjZXB0LUVBUC1sb2NhbGx5LnBhdGNoCkBAIC0wLDAgKzEsODIgQEAKK0Zyb206IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KK0RhdGU6IEZyaSwgNyBKdWwgMjAxNyAxNzoxODo1NCArMDIwMAorU3ViamVjdDogYnJpZGdlOiBvbmx5IGFjY2VwdCBFQVAgbG9jYWxseQorCitXaGVuIGJyaWRnaW5nLCBkbyBub3QgZm9yd2FyZCBFQVAgZnJhbWVzIHRvIG90aGVyIHBvcnRzLCBvbmx5IGRlbGl2ZXIKK3RoZW0gbG9jYWxseSwgcmVnYXJkbGVzcyBvZiB0aGUgc3RhdGUuCisKK1NpZ25lZC1vZmYtYnk6IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KK1thZGQgZGlzYWJsZV9lYXBfaGFjayBzeXNmcyBhdHRyaWJ1dGVdCitTaWduZWQtb2ZmLWJ5OiBFdGllbm5lIENoYW1wZXRpZXIgPGNoYW1wZXRpZXIuZXRpZW5uZUBnbWFpbC5jb20+CistLS0KKworLS0tIGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jCisrKysgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmMKK0BAIC0xMDMsMTAgKzEwMywxNCBAQCBpbnQgYnJfaGFuZGxlX2ZyYW1lX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuCisgCQl9CisgCX0KKyAKKysJQlJfSU5QVVRfU0tCX0NCKHNrYiktPmJyZGV2ID0gYnItPmRldjsKKysKKysJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfUEFFKSAmJiAhYnItPmRpc2FibGVfZWFwX2hhY2spCisrCQlyZXR1cm4gYnJfcGFzc19mcmFtZV91cChza2IpOworKworIAlpZiAocC0+c3RhdGUgPT0gQlJfU1RBVEVfTEVBUk5JTkcpCisgCQlnb3RvIGRyb3A7CisgCistCUJSX0lOUFVUX1NLQl9DQihza2IpLT5icmRldiA9IGJyLT5kZXY7CisgCUJSX0lOUFVUX1NLQl9DQihza2IpLT5zcmNfcG9ydF9pc29sYXRlZCA9ICEhKHAtPmZsYWdzICYgQlJfSVNPTEFURUQpOworIAorIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfSU5FVCkgJiYKKy0tLSBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oCisrKysgYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaAorQEAgLTM0NSw2ICszNDUsOCBAQCBzdHJ1Y3QgbmV0X2JyaWRnZSB7CisgCXUxNgkJCQlncm91cF9md2RfbWFzazsKKyAJdTE2CQkJCWdyb3VwX2Z3ZF9tYXNrX3JlcXVpcmVkOworIAorKwlib29sCQkJCWRpc2FibGVfZWFwX2hhY2s7CisrCisgCS8qIFNUUCAqLworIAlicmlkZ2VfaWQJCQlkZXNpZ25hdGVkX3Jvb3Q7CisgCWJyaWRnZV9pZAkJCWJyaWRnZV9pZDsKKy0tLSBhL25ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYworKysrIGIvbmV0L2JyaWRnZS9icl9zeXNmc19ici5jCitAQCAtMTY2LDYgKzE2NiwzMCBAQCBzdGF0aWMgc3NpemVfdCBncm91cF9md2RfbWFza19zdG9yZShzdHJ1CisgfQorIHN0YXRpYyBERVZJQ0VfQVRUUl9SVyhncm91cF9md2RfbWFzayk7CisgCisrc3RhdGljIHNzaXplX3QgZGlzYWJsZV9lYXBfaGFja19zaG93KHN0cnVjdCBkZXZpY2UgKmQsCisrCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorKwkJCQkgICBjaGFyICpidWYpCisreworKwlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSB0b19icmlkZ2UoZCk7CisrCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBici0+ZGlzYWJsZV9lYXBfaGFjayk7CisrfQorKworK3N0YXRpYyBpbnQgc2V0X2Rpc2FibGVfZWFwX2hhY2soc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCkKKyt7CisrCWJyLT5kaXNhYmxlX2VhcF9oYWNrID0gISF2YWw7CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgc3NpemVfdCBkaXNhYmxlX2VhcF9oYWNrX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmQsCisrCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKysJCQkJICAgIGNvbnN0IGNoYXIgKmJ1ZiwKKysJCQkJICAgIHNpemVfdCBsZW4pCisreworKwlyZXR1cm4gc3RvcmVfYnJpZGdlX3Bhcm0oZCwgYnVmLCBsZW4sIHNldF9kaXNhYmxlX2VhcF9oYWNrKTsKKyt9Cisrc3RhdGljIERFVklDRV9BVFRSX1JXKGRpc2FibGVfZWFwX2hhY2spOworKworIHN0YXRpYyBzc2l6ZV90IHByaW9yaXR5X3Nob3coc3RydWN0IGRldmljZSAqZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisgCQkJICAgICBjaGFyICpidWYpCisgeworQEAgLTg1MSw2ICs4NzUsNyBAQCBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYnJpZGdlX2F0dHJzW10KKyAJJmRldl9hdHRyX2FnZWluZ190aW1lLmF0dHIsCisgCSZkZXZfYXR0cl9zdHBfc3RhdGUuYXR0ciwKKyAJJmRldl9hdHRyX2dyb3VwX2Z3ZF9tYXNrLmF0dHIsCisrCSZkZXZfYXR0cl9kaXNhYmxlX2VhcF9oYWNrLmF0dHIsCisgCSZkZXZfYXR0cl9wcmlvcml0eS5hdHRyLAorIAkmZGV2X2F0dHJfYnJpZGdlX2lkLmF0dHIsCisgCSZkZXZfYXR0cl9yb290X2lkLmF0dHIsCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC82NDUtbmV0ZmlsdGVyLWNvbm5tYXJrLWludHJvZHVjZS1zZXQtZHNjcG1hcmsucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC82NDUtbmV0ZmlsdGVyLWNvbm5tYXJrLWludHJvZHVjZS1zZXQtZHNjcG1hcmsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQzZmUwMQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzY0NS1uZXRmaWx0ZXItY29ubm1hcmstaW50cm9kdWNlLXNldC1kc2NwbWFyay5wYXRjaApAQCAtMCwwICsxLDIxMiBAQAorRnJvbSBlZGE0MGI4YzhjODJlMGYyNzg5ZDZiYzhiZjYzODQ2ZGNlMmU4ZjMyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2V2aW4gRGFyYnlzaGlyZS1CcnlhbnQgPGxkaXJAZGFyYnlzaGlyZS1icnlhbnQubWUudWs+CitEYXRlOiBTYXQsIDIzIE1hciAyMDE5IDA5OjI5OjQ5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIG5ldGZpbHRlcjogY29ubm1hcms6IGludHJvZHVjZSBzZXQtZHNjcG1hcmsKKworc2V0LWRzY3BtYXJrIGlzIGEgbWV0aG9kIG9mIHN0b3JpbmcgdGhlIERTQ1Agb2YgYW4gaXAgcGFja2V0IGludG8KK2Nvbm50cmFjayBtYXJrLiAgSW4gY29tYmluYXRpb24gd2l0aCBhIHN1aXRhYmxlIHRjIGZpbHRlciBhY3Rpb24KKyhhY3RfY3RpbmZvKSBEU0NQIHZhbHVlcyBhcmUgYWJsZSB0byBiZSBzdG9yZWQgaW4gdGhlIG1hcmsgb24gZWdyZXNzIGFuZAorcmVzdG9yZWQgb24gaW5ncmVzcyBhY3Jvc3MgbGlua3MgdGhhdCBvdGhlcndpc2UgYWx0ZXIgb3IgYmxlYWNoIERTQ1AuCisKK1RoaXMgaXMgdXNlZnVsIGZvciBxZGlzY3Mgc3VjaCBhcyBDQUtFIHdoaWNoIGFyZSBhYmxlIHRvIHNoYXBlIGFjY29yZGluZwordG8gcG9saWNpZXMgYmFzZWQgb24gRFNDUC4KKworSW5ncmVzcyBjbGFzc2lmaWNhdGlvbiBpcyB0cmFkaXRpb25hbGx5IGEgY2hhbGxlbmdpbmcgdGFzayBzaW5jZQoraXB0YWJsZXMgcnVsZXMgaGF2ZW4ndCB5ZXQgcnVuIGFuZCB0YyBmaWx0ZXIvZUJQRiBwcm9ncmFtcyBhcmUgcHJlLU5BVAorbG9va3VwcywgaGVuY2UgYXJlIHVuYWJsZSB0byBzZWUgaW50ZXJuYWwgSVB2NCBhZGRyZXNzZXMgYXMgdXNlZCBvbiB0aGUKK3R5cGljYWwgaG9tZSBtYXNxdWVyYWRpbmcgZ2F0ZXdheS4KKworeF90YWJsZXMgQ09OTk1BUksgc2V0LWRzY3BtYXJrIHRhcmdldCBzb2x2ZXMgdGhlIHByb2JsZW0gb2Ygc3RvcmluZyB0aGUKK0RTQ1AgdG8gdGhlIGNvbm50cmFjayBtYXJrIGluIGEgd2F5IHN1aXRhYmxlIGZvciB0aGUgbmV3IGFjdF9jdGluZm8gdGMKK2FjdGlvbiB0byByZXN0b3JlLgorCitUaGUgc2V0LWRzY3BtYXJrIG9wdGlvbiBhY2NlcHRzIDIgcGFyYW1ldGVycywgYSAzMmJpdCAnZHNjcG1hc2snIGFuZCBhCiszMmJpdCAnc3RhdGVtYXNrJy4gIFRoZSBkc2NwIG1hc2sgbXVzdCBiZSA2IGNvbnRpZ3VvdXMgYml0cyBhbmQKK3JlcHJlc2VudHMgdGhlIGFyZWEgd2hlcmUgdGhlIERTQ1Agd2lsbCBiZSBzdG9yZWQgaW4gdGhlIGNvbm5tYXJrLiAgVGhlCitzdGF0ZSBtYXNrIGlzIGEgbWluaW11bSAxIGJpdCBsZW5ndGggbWFzayB0aGF0IG11c3Qgbm90IG92ZXJsYXAgd2l0aCB0aGUKK2RzY3BtYXNrLiAgSXQgcmVwcmVzZW50cyBhIGZsYWcgd2hpY2ggaXMgc2V0IHdoZW4gdGhlIERTQ1AgaGFzIGJlZW4KK3N0b3JlZCBpbiB0aGUgY29ubnRyYWNrIG1hcmsuIFRoaXMgaXMgdXNlZnVsIHRvIGltcGxlbWVudCBhICdvbmUgc2hvdCcKK2lwdGFibGVzIGJhc2VkIGNsYXNzaWZpY2F0aW9uIHdoZXJlIHRoZSAnY29tcGxpY2F0ZWQnIGlwdGFibGVzIHJ1bGVzIGFyZQorb25seSBydW4gb25jZSB0byBjbGFzc2lmeSB0aGUgY29ubmVjdGlvbiBvbiBpbml0aWFsIChlZ3Jlc3MpIHBhY2tldCBhbmQKK3N1YnNlcXVlbnQgcGFja2V0cyBhcmUgYWxsIG1hcmtlZC9yZXN0b3JlZCB3aXRoIHRoZSBzYW1lIERTQ1AuICBBIHN0YXRlCittYXNrIG9mIHplcm8gZGlzYWJsZXMgdGhlIHNldHRpbmcgb2YgYSBzdGF0dXMgYml0L3MuCisKK2V4YW1wbGUgc3ludGF4IHdpdGggYSBzdWl0YWJseSBtb2RpZmllZCBpcHRhYmxlcyB1c2VyIHNwYWNlIGFwcGxpY2F0aW9uOgorCitpcHRhYmxlcyAtQSBRT1NfTUFSS19ldGgwIC10IG1hbmdsZSAtaiBDT05OTUFSSyAtLXNldC1kc2NwbWFyayAweGZjMDAwMDAwLzB4MDEwMDAwMDAKKworV291bGQgc3RvcmUgdGhlIERTQ1AgaW4gdGhlIHRvcCA2IGJpdHMgb2YgdGhlIDMyYml0IG1hcmsgZmllbGQsIGFuZCB1c2UKK3RoZSBMU0Igb2YgdGhlIHRvcCBieXRlIGFzIHRoZSAnRFNDUCBoYXMgYmVlbiBzdG9yZWQnIG1hcmtlci4KKworfC0tLS0weEZDLS0tLWNvbm50cmFjayBtYXJrLS0tLTAwMDAwMC0tLXwKK3wgQml0cyAzMS0yNiB8IGJpdCAyNSB8IGJpdDI0IHx+fn4gQml0IDB8Cit8IERTQ1AgICAgICAgfCB1bnVzZWQgfCBmbGFnICB8dW51c2VkICAgfAorfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tMHgwMS0tLTAwMDAwMC0tLXwKKyAgICAgIF4gICAgICAgICAgICAgICAgICAgXgorICAgICAgfCAgICAgICAgICAgICAgICAgICB8CisgICAgICAtLS18ICAgICAgICAgICAgIENvbmRpdGlvbmFsIGZsYWcKKyAgICAgICAgIHwgICAgICAgICAgICAgc2V0IHRoaXMgd2hlbiBkc2NwCit8LWlwIGRpZmZzZXJ2LXwgICAgICAgIHN0b3JlZCBpbiBtYXJrCit8IDYgYml0cyAgICAgIHwKK3wtLS0tLS0tLS0tLS0tfAorCithbiBpZGVudGljYWxseSBjb25maWd1cmVkIHRjIGFjdGlvbiB0byByZXN0b3JlIGxvb2tzIGxpa2U6CisKK3RjIGZpbHRlciBzaG93IGRldiBldGgwIGluZ3Jlc3MKK2ZpbHRlciBwYXJlbnQgZmZmZjogcHJvdG9jb2wgYWxsIHByZWYgMTAgdTMyIGNoYWluIDAKK2ZpbHRlciBwYXJlbnQgZmZmZjogcHJvdG9jb2wgYWxsIHByZWYgMTAgdTMyIGNoYWluIDAgZmggODAwOiBodCBkaXZpc29yIDEKK2ZpbHRlciBwYXJlbnQgZmZmZjogcHJvdG9jb2wgYWxsIHByZWYgMTAgdTMyIGNoYWluIDAgZmggODAwOjo4MDAgb3JkZXIgMjA0OCBrZXkgaHQgODAwIGJrdCAwIGZsb3dpZCAxOiBub3RfaW5faHcKKyAgbWF0Y2ggMDAwMDAwMDAvMDAwMDAwMDAgYXQgMAorCWFjdGlvbiBvcmRlciAxOiBjdGluZm8gem9uZSAwIHBpcGUKKwkgaW5kZXggMiByZWYgMSBiaW5kIDEgZHNjcCAweGZjMDAwMDAwLzB4MTAwMDAwMAorCisJYWN0aW9uIG9yZGVyIDI6IG1pcnJlZCAoRWdyZXNzIFJlZGlyZWN0IHRvIGRldmljZSBpZmI0ZXRoMCkgc3RvbGVuCisJaW5kZXggMSByZWYgMSBiaW5kIDEKKworfC0tLS0weEZDLS0tLWNvbm50cmFjayBtYXJrLS0tLTAwMDAwMC0tLXwKK3wgQml0cyAzMS0yNiB8IGJpdCAyNSB8IGJpdDI0IHx+fn4gQml0IDB8Cit8IERTQ1AgICAgICAgfCB1bnVzZWQgfCBmbGFnICB8dW51c2VkICAgfAorfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tMHgwMS0tLTAwMDAwMC0tLXwKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgfAorICAgICAgfCAgICAgICAgICAgICAgICAgICB8CisgICAgICAtLS18ICAgICAgICAgICAgIENvbmRpdGlvbmFsIGZsYWcKKyAgICAgICAgIHYgICAgICAgICAgICAgb25seSByZXN0b3JlIGlmIHNldAorfC1pcCBkaWZmc2Vydi18Cit8IDYgYml0cyAgICAgIHwKK3wtLS0tLS0tLS0tLS0tfAorCitTaWduZWQtb2ZmLWJ5OiBLZXZpbiBEYXJieXNoaXJlLUJyeWFudCA8bGRpckBkYXJieXNoaXJlLWJyeWFudC5tZS51az4KKy0tLQorIGluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfY29ubm1hcmsuaCB8IDEwICsrKysKKyBuZXQvbmV0ZmlsdGVyL3h0X2Nvbm5tYXJrLmMgICAgICAgICAgICAgICAgfCA1NSArKysrKysrKysrKysrKysrKystLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA1NyBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCistLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5tYXJrLmgKKysrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfY29ubm1hcmsuaAorQEAgLTIwLDYgKzIwLDExIEBAIGVudW0geworIH07CisgCisgZW51bSB7CisrCVhUX0NPTk5NQVJLX1ZBTFVFID0JKDEgPDwgMCksCisrCVhUX0NPTk5NQVJLX0RTQ1AgPSAJKDEgPDwgMSkKKyt9OworKworK2VudW0geworIAlEX1NISUZUX0xFRlQgPSAwLAorIAlEX1NISUZUX1JJR0hULAorIH07CitAQCAtMzQsNiArMzksMTEgQEAgc3RydWN0IHh0X2Nvbm5tYXJrX3RnaW5mbzIgeworIAlfX3U4IHNoaWZ0X2Rpciwgc2hpZnRfYml0cywgbW9kZTsKKyB9OworIAorK3N0cnVjdCB4dF9jb25ubWFya190Z2luZm8zIHsKKysJX191MzIgY3RtYXJrLCBjdG1hc2ssIG5mbWFzazsKKysJX191OCBzaGlmdF9kaXIsIHNoaWZ0X2JpdHMsIG1vZGUsIGZ1bmM7CisrfTsKKysKKyBzdHJ1Y3QgeHRfY29ubm1hcmtfbXRpbmZvMSB7CisgCV9fdTMyIG1hcmssIG1hc2s7CisgCV9fdTggaW52ZXJ0OworLS0tIGEvbmV0L25ldGZpbHRlci94dF9jb25ubWFyay5jCisrKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm5tYXJrLmMKK0BAIC0yNCwxMiArMjQsMTMgQEAgTU9EVUxFX0FMSUFTKCJpcHRfY29ubm1hcmsiKTsKKyBNT0RVTEVfQUxJQVMoImlwNnRfY29ubm1hcmsiKTsKKyAKKyBzdGF0aWMgdW5zaWduZWQgaW50CistY29ubm1hcmtfdGdfc2hpZnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X2Nvbm5tYXJrX3RnaW5mbzIgKmluZm8pCisrY29ubm1hcmtfdGdfc2hpZnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X2Nvbm5tYXJrX3RnaW5mbzMgKmluZm8pCisgeworIAllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKKyAJdV9pbnQzMl90IG5ld190YXJnZXRtYXJrOworIAlzdHJ1Y3QgbmZfY29ubiAqY3Q7CisgCXVfaW50MzJfdCBuZXdtYXJrOworKwl1X2ludDhfdCBkc2NwOworIAorIAljdCA9IG5mX2N0X2dldChza2IsICZjdGluZm8pOworIAlpZiAoY3QgPT0gTlVMTCkKK0BAIC0zNywxMiArMzgsMjQgQEAgY29ubm1hcmtfdGdfc2hpZnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgYworIAorIAlzd2l0Y2ggKGluZm8tPm1vZGUpIHsKKyAJY2FzZSBYVF9DT05OTUFSS19TRVQ6CistCQluZXdtYXJrID0gKGN0LT5tYXJrICYgfmluZm8tPmN0bWFzaykgXiBpbmZvLT5jdG1hcms7CistCQlpZiAoaW5mby0+c2hpZnRfZGlyID09IERfU0hJRlRfUklHSFQpCistCQkJbmV3bWFyayA+Pj0gaW5mby0+c2hpZnRfYml0czsKKy0JCWVsc2UKKy0JCQluZXdtYXJrIDw8PSBpbmZvLT5zaGlmdF9iaXRzOworKwkJbmV3bWFyayA9IGN0LT5tYXJrOworKwkJaWYgKGluZm8tPmZ1bmMgJiBYVF9DT05OTUFSS19WQUxVRSkgeworKwkJCW5ld21hcmsgPSAobmV3bWFyayAmIH5pbmZvLT5jdG1hc2spIF4gaW5mby0+Y3RtYXJrOworKwkJCWlmIChpbmZvLT5zaGlmdF9kaXIgPT0gRF9TSElGVF9SSUdIVCkKKysJCQkJbmV3bWFyayA+Pj0gaW5mby0+c2hpZnRfYml0czsKKysJCQllbHNlCisrCQkJCW5ld21hcmsgPDw9IGluZm8tPnNoaWZ0X2JpdHM7CisrCQl9IGVsc2UgaWYgKGluZm8tPmZ1bmMgJiBYVF9DT05OTUFSS19EU0NQKSB7CisrCQkJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKQorKwkJCQlkc2NwID0gaXB2NF9nZXRfZHNmaWVsZChpcF9oZHIoc2tiKSkgPj4gMjsKKysJCQllbHNlIGlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKQorKwkJCQlkc2NwID0gaXB2Nl9nZXRfZHNmaWVsZChpcHY2X2hkcihza2IpKSA+PiAyOworKwkJCWVsc2UJLyogcHJvdG9jb2wgZG9lc24ndCBoYXZlIGRpZmZzZXJ2ICovCisrCQkJCWJyZWFrOworIAorKwkJCW5ld21hcmsgPSAobmV3bWFyayAmIH5pbmZvLT5jdG1hcmspIHwKKysJCQkJICAoaW5mby0+Y3RtYXNrIHwgKGRzY3AgPDwgaW5mby0+c2hpZnRfYml0cykpOworKwkJfQorIAkJaWYgKGN0LT5tYXJrICE9IG5ld21hcmspIHsKKyAJCQljdC0+bWFyayA9IG5ld21hcms7CisgCQkJbmZfY29ubnRyYWNrX2V2ZW50X2NhY2hlKElQQ1RfTUFSSywgY3QpOworQEAgLTgxLDIwICs5NCwzNiBAQCBzdGF0aWMgdW5zaWduZWQgaW50CisgY29ubm1hcmtfdGcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQorIHsKKyAJY29uc3Qgc3RydWN0IHh0X2Nvbm5tYXJrX3RnaW5mbzEgKmluZm8gPSBwYXItPnRhcmdpbmZvOworLQljb25zdCBzdHJ1Y3QgeHRfY29ubm1hcmtfdGdpbmZvMiBpbmZvMiA9IHsKKysJY29uc3Qgc3RydWN0IHh0X2Nvbm5tYXJrX3RnaW5mbzMgaW5mbzMgPSB7CisgCQkuY3RtYXJrCT0gaW5mby0+Y3RtYXJrLAorIAkJLmN0bWFzawk9IGluZm8tPmN0bWFzaywKKyAJCS5uZm1hc2sJPSBpbmZvLT5uZm1hc2ssCisgCQkubW9kZQk9IGluZm8tPm1vZGUsCisrCQkuZnVuYwk9IFhUX0NPTk5NQVJLX1ZBTFVFCisgCX07CisgCistCXJldHVybiBjb25ubWFya190Z19zaGlmdChza2IsICZpbmZvMik7CisrCXJldHVybiBjb25ubWFya190Z19zaGlmdChza2IsICZpbmZvMyk7CisgfQorIAorIHN0YXRpYyB1bnNpZ25lZCBpbnQKKyBjb25ubWFya190Z192MihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpCisgeworIAljb25zdCBzdHJ1Y3QgeHRfY29ubm1hcmtfdGdpbmZvMiAqaW5mbyA9IHBhci0+dGFyZ2luZm87CisrCWNvbnN0IHN0cnVjdCB4dF9jb25ubWFya190Z2luZm8zIGluZm8zID0geworKwkJLmN0bWFyawk9IGluZm8tPmN0bWFyaywKKysJCS5jdG1hc2sJPSBpbmZvLT5jdG1hc2ssCisrCQkubmZtYXNrCT0gaW5mby0+bmZtYXNrLAorKwkJLm1vZGUJPSBpbmZvLT5tb2RlLAorKwkJLmZ1bmMJPSBYVF9DT05OTUFSS19WQUxVRQorKwl9OworKworKwlyZXR1cm4gY29ubm1hcmtfdGdfc2hpZnQoc2tiLCAmaW5mbzMpOworK30KKysKKytzdGF0aWMgdW5zaWduZWQgaW50CisrY29ubm1hcmtfdGdfdjMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQorK3sKKysJY29uc3Qgc3RydWN0IHh0X2Nvbm5tYXJrX3RnaW5mbzMgKmluZm8gPSBwYXItPnRhcmdpbmZvOworIAorIAlyZXR1cm4gY29ubm1hcmtfdGdfc2hpZnQoc2tiLCBpbmZvKTsKKyB9CitAQCAtMTY1LDYgKzE5NCwxNiBAQCBzdGF0aWMgc3RydWN0IHh0X3RhcmdldCBjb25ubWFya190Z19yZWdbCisgCQkudGFyZ2V0c2l6ZSAgICAgPSBzaXplb2Yoc3RydWN0IHh0X2Nvbm5tYXJrX3RnaW5mbzIpLAorIAkJLmRlc3Ryb3kgICAgICAgID0gY29ubm1hcmtfdGdfZGVzdHJveSwKKyAJCS5tZSAgICAgICAgICAgICA9IFRISVNfTU9EVUxFLAorKwl9LAorKwl7CisrCQkubmFtZSAgICAgICAgICAgPSAiQ09OTk1BUksiLAorKwkJLnJldmlzaW9uICAgICAgID0gMywKKysJCS5mYW1pbHkgICAgICAgICA9IE5GUFJPVE9fVU5TUEVDLAorKwkJLmNoZWNrZW50cnkgICAgID0gY29ubm1hcmtfdGdfY2hlY2ssCisrCQkudGFyZ2V0ICAgICAgICAgPSBjb25ubWFya190Z192MywKKysJCS50YXJnZXRzaXplICAgICA9IHNpemVvZihzdHJ1Y3QgeHRfY29ubm1hcmtfdGdpbmZvMyksCisrCQkuZGVzdHJveSAgICAgICAgPSBjb25ubWFya190Z19kZXN0cm95LAorKwkJLm1lICAgICAgICAgICAgID0gVEhJU19NT0RVTEUsCisgCX0KKyB9OworIApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvaGFjay01LjQvNjQ3LW5ldGZpbHRlci1mbG93LWFjY3QucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC82NDctbmV0ZmlsdGVyLWZsb3ctYWNjdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTQ4MGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvaGFjay01LjQvNjQ3LW5ldGZpbHRlci1mbG93LWFjY3QucGF0Y2gKQEAgLTAsMCArMSw3MCBAQAorLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaAorKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaAorQEAgLTE2MCw2ICsxNjAsOCBAQCBzdHJ1Y3QgbmZfZmxvd190YWJsZV9odyB7CisgaW50IG5mX2Zsb3dfdGFibGVfaHdfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IG5mX2Zsb3dfdGFibGVfaHcgKm9mZmxvYWQpOworIHZvaWQgbmZfZmxvd190YWJsZV9od191bnJlZ2lzdGVyKGNvbnN0IHN0cnVjdCBuZl9mbG93X3RhYmxlX2h3ICpvZmZsb2FkKTsKKyAKKyt2b2lkIG5mX2Zsb3dfdGFibGVfYWNjdChzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZGlyKTsKKysKKyBleHRlcm4gc3RydWN0IHdvcmtfc3RydWN0IG5mX2Zsb3dfb2ZmbG9hZF9od193b3JrOworIAorICNkZWZpbmUgTU9EVUxFX0FMSUFTX05GX0ZMT1dUQUJMRShmYW1pbHkpCVwKKy0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMKKysrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMKK0BAIC0xMyw2ICsxMyw3IEBACisgI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaD4KKyAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oPgorICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oPgorKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hY2N0Lmg+CisgCisgc3RydWN0IGZsb3dfb2ZmbG9hZF9lbnRyeSB7CisgCXN0cnVjdCBmbG93X29mZmxvYWQJZmxvdzsKK0BAIC0xNjQsNiArMTY1LDIyIEBAIHZvaWQgZmxvd19vZmZsb2FkX2ZyZWUoc3RydWN0IGZsb3dfb2ZmbG8KKyB9CisgRVhQT1JUX1NZTUJPTF9HUEwoZmxvd19vZmZsb2FkX2ZyZWUpOworIAorK3ZvaWQgbmZfZmxvd190YWJsZV9hY2N0KHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHN0cnVjdCBza19idWZmICpza2IsIGludCBkaXIpCisreworKwlzdHJ1Y3QgZmxvd19vZmZsb2FkX2VudHJ5ICplbnRyeTsKKysJc3RydWN0IG5mX2Nvbm5fYWNjdCAqYWNjdDsKKysKKysJZW50cnkgPSBjb250YWluZXJfb2YoZmxvdywgc3RydWN0IGZsb3dfb2ZmbG9hZF9lbnRyeSwgZmxvdyk7CisrCWFjY3QgPSBuZl9jb25uX2FjY3RfZmluZChlbnRyeS0+Y3QpOworKwlpZiAoYWNjdCkgeworKwkJc3RydWN0IG5mX2Nvbm5fY291bnRlciAqY291bnRlciA9IGFjY3QtPmNvdW50ZXI7CisrCisrCQlhdG9taWM2NF9pbmMoJmNvdW50ZXJbZGlyXS5wYWNrZXRzKTsKKysJCWF0b21pYzY0X2FkZChza2ItPmxlbiwgJmNvdW50ZXJbZGlyXS5ieXRlcyk7CisrCX0KKyt9CisrRVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd190YWJsZV9hY2N0KTsKKysKKyBzdGF0aWMgdTMyIGZsb3dfb2ZmbG9hZF9oYXNoKGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBsZW4sIHUzMiBzZWVkKQorIHsKKyAJY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUgPSBkYXRhOworLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2lwLmMKKysrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9pcC5jCitAQCAtMTIsNiArMTIsNyBAQAorICNpbmNsdWRlIDxuZXQvaXA2X3JvdXRlLmg+CisgI2luY2x1ZGUgPG5ldC9uZWlnaGJvdXIuaD4KKyAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg+CisrCisgLyogRm9yIGxheWVyIDQgY2hlY2tzdW0gZmllbGQgb2Zmc2V0LiAqLworICNpbmNsdWRlIDxsaW51eC90Y3AuaD4KKyAjaW5jbHVkZSA8bGludXgvdWRwLmg+CitAQCAtMjk2LDYgKzI5Nyw3IEBAIG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKHZvaWQgKnByaXYsIHN0cnUKKyAJc2tiLT5kZXYgPSBvdXRkZXY7CisgCW5leHRob3AgPSBydF9uZXh0aG9wKHJ0LCBmbG93LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjX3Y0LnNfYWRkcik7CisgCXNrYl9kc3Rfc2V0X25vcmVmKHNrYiwgJnJ0LT5kc3QpOworKwluZl9mbG93X3RhYmxlX2FjY3QoZmxvdywgc2tiLCBkaXIpOworIAluZWlnaF94bWl0KE5FSUdIX0FSUF9UQUJMRSwgb3V0ZGV2LCAmbmV4dGhvcCwgc2tiKTsKKyAKKyAJcmV0dXJuIE5GX1NUT0xFTjsKK0BAIC01MjYsNiArNTI4LDcgQEAgbmZfZmxvd19vZmZsb2FkX2lwdjZfaG9vayh2b2lkICpwcml2LCBzdAorIAlza2ItPmRldiA9IG91dGRldjsKKyAJbmV4dGhvcCA9IHJ0Nl9uZXh0aG9wKHJ0LCAmZmxvdy0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyY192Nik7CisgCXNrYl9kc3Rfc2V0X25vcmVmKHNrYiwgJnJ0LT5kc3QpOworKwluZl9mbG93X3RhYmxlX2FjY3QoZmxvdywgc2tiLCBkaXIpOworIAluZWlnaF94bWl0KE5FSUdIX05EX1RBQkxFLCBvdXRkZXYsIG5leHRob3AsIHNrYik7CisgCisgCXJldHVybiBORl9TVE9MRU47CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC82NTAtbmV0ZmlsdGVyLWFkZC14dF9PRkZMT0FELXRhcmdldC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzY1MC1uZXRmaWx0ZXItYWRkLXh0X09GRkxPQUQtdGFyZ2V0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ODRjYjUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC82NTAtbmV0ZmlsdGVyLWFkZC14dF9PRkZMT0FELXRhcmdldC5wYXRjaApAQCAtMCwwICsxLDU4OSBAQAorRnJvbTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorRGF0ZTogVHVlLCAyMCBGZWIgMjAxOCAxNTo1NjowMiArMDEwMAorU3ViamVjdDogW1BBVENIXSBuZXRmaWx0ZXI6IGFkZCB4dF9PRkZMT0FEIHRhcmdldAorCitTaWduZWQtb2ZmLWJ5OiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CistLS0KKyBjcmVhdGUgbW9kZSAxMDA2NDQgbmV0L25ldGZpbHRlci94dF9PRkZMT0FELmMKKworLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcKKysrKyBiL25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnCitAQCAtNTYsOCArNTYsNiBAQCBjb25maWcgTkZfVEFCTEVTX0FSUAorIAloZWxwCisgCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgQVJQIHN1cHBvcnQgZm9yIG5mX3RhYmxlcy4KKyAKKy1lbmRpZiAjIE5GX1RBQkxFUworLQorIGNvbmZpZyBORl9GTE9XX1RBQkxFX0lQVjQKKyAJdHJpc3RhdGUgIk5ldGZpbHRlciBmbG93IHRhYmxlIElQdjQgbW9kdWxlIgorIAlkZXBlbmRzIG9uIE5GX0ZMT1dfVEFCTEUKK0BAIC02Niw2ICs2NCw4IEBAIGNvbmZpZyBORl9GTE9XX1RBQkxFX0lQVjQKKyAKKyAJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLgorIAorK2VuZGlmICMgTkZfVEFCTEVTCisrCisgY29uZmlnIE5GX0RVUF9JUFY0CisgCXRyaXN0YXRlICJOZXRmaWx0ZXIgSVB2NCBwYWNrZXQgZHVwbGljYXRpb24gdG8gYWx0ZXJuYXRlIGRlc3RpbmF0aW9uIgorIAlkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLCistLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZworKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWcKK0BAIC00NSw3ICs0NSw2IEBAIGNvbmZpZyBORlRfRklCX0lQVjYKKyAJICBtdWx0aWNhc3Qgb3IgYmxhY2tob2xlLgorIAorIGVuZGlmICMgTkZfVEFCTEVTX0lQVjYKKy1lbmRpZiAjIE5GX1RBQkxFUworIAorIGNvbmZpZyBORl9GTE9XX1RBQkxFX0lQVjYKKyAJdHJpc3RhdGUgIk5ldGZpbHRlciBmbG93IHRhYmxlIElQdjYgbW9kdWxlIgorQEAgLTU1LDYgKzU0LDggQEAgY29uZmlnIE5GX0ZMT1dfVEFCTEVfSVBWNgorIAorIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuCisgCisrZW5kaWYgIyBORl9UQUJMRVMKKysKKyBjb25maWcgTkZfRFVQX0lQVjYKKyAJdHJpc3RhdGUgIk5ldGZpbHRlciBJUHY2IHBhY2tldCBkdXBsaWNhdGlvbiB0byBhbHRlcm5hdGUgZGVzdGluYXRpb24iCisgCWRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0sKKy0tLSBhL25ldC9uZXRmaWx0ZXIvS2NvbmZpZworKysrIGIvbmV0L25ldGZpbHRlci9LY29uZmlnCitAQCAtNjkwLDggKzY5MCw2IEBAIGNvbmZpZyBORlRfRklCX05FVERFVgorIAorIGVuZGlmICMgTkZfVEFCTEVTX05FVERFVgorIAorLWVuZGlmICMgTkZfVEFCTEVTCistCisgY29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVAorIAl0cmlzdGF0ZSAiTmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZSIKKyAJZGVwZW5kcyBvbiBORl9GTE9XX1RBQkxFCitAQCAtNzAwLDExICs2OTgsMTIgQEAgY29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVAorIAorIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuCisgCisrZW5kaWYgIyBORl9UQUJMRVMKKysKKyBjb25maWcgTkZfRkxPV19UQUJMRQorIAl0cmlzdGF0ZSAiTmV0ZmlsdGVyIGZsb3cgdGFibGUgbW9kdWxlIgorIAlkZXBlbmRzIG9uIE5FVEZJTFRFUl9JTkdSRVNTCisgCWRlcGVuZHMgb24gTkZfQ09OTlRSQUNLCistCWRlcGVuZHMgb24gTkZfVEFCTEVTCisgCWhlbHAKKyAJICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBmbG93IHRhYmxlIGNvcmUgaW5mcmFzdHJ1Y3R1cmUuCisgCitAQCAtOTkzLDYgKzk5MiwxNSBAQCBjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9OT1RSQUNLCisgCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECisgCXNlbGVjdCBORVRGSUxURVJfWFRfVEFSR0VUX0NUCisgCisrY29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfRkxPV09GRkxPQUQKKysJdHJpc3RhdGUgJyJGTE9XT0ZGTE9BRCIgdGFyZ2V0IHN1cHBvcnQnCisrCWRlcGVuZHMgb24gTkZfRkxPV19UQUJMRQorKwlkZXBlbmRzIG9uIE5FVEZJTFRFUl9JTkdSRVNTCisrCWhlbHAKKysJICBUaGlzIG9wdGlvbiBhZGRzIGEgYEZMT1dPRkZMT0FEJyB0YXJnZXQsIHdoaWNoIHVzZXMgdGhlIG5mX2Zsb3dfb2ZmbG9hZAorKwkgIG1vZHVsZSB0byBzcGVlZCB1cCBwcm9jZXNzaW5nIG9mIHBhY2tldHMgYnkgYnlwYXNzaW5nIHRoZSB1c3VhbAorKwkgIG5ldGZpbHRlciBjaGFpbnMKKysKKyBjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9SQVRFRVNUCisgCXRyaXN0YXRlICciUkFURUVTVCIgdGFyZ2V0IHN1cHBvcnQnCisgCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECistLS0gYS9uZXQvbmV0ZmlsdGVyL01ha2VmaWxlCisrKysgYi9uZXQvbmV0ZmlsdGVyL01ha2VmaWxlCitAQCAtMTQxLDYgKzE0MSw3IEBAIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUYKKyBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OU0VDTUFSSykgKz0geHRfQ09OTlNFQ01BUksubworIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NUKSArPSB4dF9DVC5vCisgb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfRFNDUCkgKz0geHRfRFNDUC5vCisrb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfRkxPV09GRkxPQUQpICs9IHh0X0ZMT1dPRkZMT0FELm8KKyBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITCkgKz0geHRfSEwubworIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0hNQVJLKSArPSB4dF9ITUFSSy5vCisgb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTEVEKSArPSB4dF9MRUQubworLS0tIC9kZXYvbnVsbAorKysrIGIvbmV0L25ldGZpbHRlci94dF9GTE9XT0ZGTE9BRC5jCitAQCAtMCwwICsxLDQyNyBAQAorKy8qCisrICogQ29weXJpZ2h0IChDKSAyMDE4IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KKysgKgorKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKysgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKysgKi8KKysjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisrI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKysjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CisrI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9GTE9XT0ZGTE9BRC5oPgorKyNpbmNsdWRlIDxuZXQvaXAuaD4KKysjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaD4KKysjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmg+CisrI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oPgorKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaD4KKysKKytzdGF0aWMgc3RydWN0IG5mX2Zsb3d0YWJsZSBuZl9mbG93dGFibGU7Cisrc3RhdGljIEhMSVNUX0hFQUQoaG9va3MpOworK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soaG9va3NfbG9jayk7Cisrc3RhdGljIHN0cnVjdCBkZWxheWVkX3dvcmsgaG9va193b3JrOworKworK3N0cnVjdCB4dF9mbG93b2ZmbG9hZF9ob29rIHsKKysJc3RydWN0IGhsaXN0X25vZGUgbGlzdDsKKysJc3RydWN0IG5mX2hvb2tfb3BzIG9wczsKKysJc3RydWN0IG5ldCAqbmV0OworKwlib29sIHJlZ2lzdGVyZWQ7CisrCWJvb2wgdXNlZDsKKyt9OworKworK3N0YXRpYyB1bnNpZ25lZCBpbnQKKyt4dF9mbG93b2ZmbG9hZF9uZXRfaG9vayh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorKwkJCSAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKQorK3sKKysJc3dpdGNoIChza2ItPnByb3RvY29sKSB7CisrCWNhc2UgaHRvbnMoRVRIX1BfSVApOgorKwkJcmV0dXJuIG5mX2Zsb3dfb2ZmbG9hZF9pcF9ob29rKHByaXYsIHNrYiwgc3RhdGUpOworKwljYXNlIGh0b25zKEVUSF9QX0lQVjYpOgorKwkJcmV0dXJuIG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2socHJpdiwgc2tiLCBzdGF0ZSk7CisrCX0KKysKKysJcmV0dXJuIE5GX0FDQ0VQVDsKKyt9CisrCisraW50IG5mX2Zsb3dfdGFibGVfaXRlcmF0ZShzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLAorKwkJCSAgIHZvaWQgKCppdGVyKShzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCB2b2lkICpkYXRhKSwKKysJCQkgICB2b2lkICpkYXRhKTsKKysKKytzdGF0aWMgaW50CisreHRfZmxvd29mZmxvYWRfY3JlYXRlX2hvb2soc3RydWN0IG5ldF9kZXZpY2UgKmRldikKKyt7CisrCXN0cnVjdCB4dF9mbG93b2ZmbG9hZF9ob29rICpob29rOworKwlzdHJ1Y3QgbmZfaG9va19vcHMgKm9wczsKKysKKysJaG9vayA9IGt6YWxsb2Moc2l6ZW9mKCpob29rKSwgR0ZQX0FUT01JQyk7CisrCWlmICghaG9vaykKKysJCXJldHVybiAtRU5PTUVNOworKworKwlvcHMgPSAmaG9vay0+b3BzOworKwlvcHMtPnBmID0gTkZQUk9UT19ORVRERVY7CisrCW9wcy0+aG9va251bSA9IE5GX05FVERFVl9JTkdSRVNTOworKwlvcHMtPnByaW9yaXR5ID0gMTA7CisrCW9wcy0+cHJpdiA9ICZuZl9mbG93dGFibGU7CisrCW9wcy0+aG9vayA9IHh0X2Zsb3dvZmZsb2FkX25ldF9ob29rOworKwlvcHMtPmRldiA9IGRldjsKKysKKysJaGxpc3RfYWRkX2hlYWQoJmhvb2stPmxpc3QsICZob29rcyk7CisrCW1vZF9kZWxheWVkX3dvcmsoc3lzdGVtX3Bvd2VyX2VmZmljaWVudF93cSwgJmhvb2tfd29yaywgMCk7CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgc3RydWN0IHh0X2Zsb3dvZmZsb2FkX2hvb2sgKgorK2Zsb3dfb2ZmbG9hZF9sb29rdXBfaG9vayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorK3sKKysJc3RydWN0IHh0X2Zsb3dvZmZsb2FkX2hvb2sgKmhvb2s7CisrCisrCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGhvb2ssICZob29rcywgbGlzdCkgeworKwkJaWYgKGhvb2stPm9wcy5kZXYgPT0gZGV2KQorKwkJCXJldHVybiBob29rOworKwl9CisrCisrCXJldHVybiBOVUxMOworK30KKysKKytzdGF0aWMgdm9pZAorK3h0X2Zsb3dvZmZsb2FkX2NoZWNrX2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorK3sKKysJc3RydWN0IHh0X2Zsb3dvZmZsb2FkX2hvb2sgKmhvb2s7CisrCisrCXNwaW5fbG9ja19iaCgmaG9va3NfbG9jayk7CisrCWhvb2sgPSBmbG93X29mZmxvYWRfbG9va3VwX2hvb2soZGV2KTsKKysJaWYgKGhvb2spCisrCQlob29rLT51c2VkID0gdHJ1ZTsKKysJZWxzZQorKwkJeHRfZmxvd29mZmxvYWRfY3JlYXRlX2hvb2soZGV2KTsKKysJc3Bpbl91bmxvY2tfYmgoJmhvb2tzX2xvY2spOworK30KKysKKytzdGF0aWMgdm9pZAorK3h0X2Zsb3dvZmZsb2FkX3JlZ2lzdGVyX2hvb2tzKHZvaWQpCisreworKwlzdHJ1Y3QgeHRfZmxvd29mZmxvYWRfaG9vayAqaG9vazsKKysKKytyZXN0YXJ0OgorKwlobGlzdF9mb3JfZWFjaF9lbnRyeShob29rLCAmaG9va3MsIGxpc3QpIHsKKysJCWlmIChob29rLT5yZWdpc3RlcmVkKQorKwkJCWNvbnRpbnVlOworKworKwkJaG9vay0+cmVnaXN0ZXJlZCA9IHRydWU7CisrCQlob29rLT5uZXQgPSBkZXZfbmV0KGhvb2stPm9wcy5kZXYpOworKwkJc3Bpbl91bmxvY2tfYmgoJmhvb2tzX2xvY2spOworKwkJbmZfcmVnaXN0ZXJfbmV0X2hvb2soaG9vay0+bmV0LCAmaG9vay0+b3BzKTsKKysJCXNwaW5fbG9ja19iaCgmaG9va3NfbG9jayk7CisrCQlnb3RvIHJlc3RhcnQ7CisrCX0KKysKKyt9CisrCisrc3RhdGljIHZvaWQKKyt4dF9mbG93b2ZmbG9hZF9jbGVhbnVwX2hvb2tzKHZvaWQpCisreworKwlzdHJ1Y3QgeHRfZmxvd29mZmxvYWRfaG9vayAqaG9vazsKKysKKytyZXN0YXJ0OgorKwlobGlzdF9mb3JfZWFjaF9lbnRyeShob29rLCAmaG9va3MsIGxpc3QpIHsKKysJCWlmIChob29rLT51c2VkIHx8ICFob29rLT5yZWdpc3RlcmVkKQorKwkJCWNvbnRpbnVlOworKworKwkJaGxpc3RfZGVsKCZob29rLT5saXN0KTsKKysJCXNwaW5fdW5sb2NrX2JoKCZob29rc19sb2NrKTsKKysJCW5mX3VucmVnaXN0ZXJfbmV0X2hvb2soaG9vay0+bmV0LCAmaG9vay0+b3BzKTsKKysJCWtmcmVlKGhvb2spOworKwkJc3Bpbl9sb2NrX2JoKCZob29rc19sb2NrKTsKKysJCWdvdG8gcmVzdGFydDsKKysJfQorKworK30KKysKKytzdGF0aWMgdm9pZAorK3h0X2Zsb3dvZmZsb2FkX2NoZWNrX2hvb2soc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgdm9pZCAqZGF0YSkKKyt7CisrCXN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlID0gJmZsb3ctPnR1cGxlaGFzaFswXS50dXBsZTsKKysJc3RydWN0IHh0X2Zsb3dvZmZsb2FkX2hvb2sgKmhvb2s7CisrCWJvb2wgKmZvdW5kID0gZGF0YTsKKysJc3RydWN0IHJ0YWJsZSAqcnQgPSAoc3RydWN0IHJ0YWJsZSAqKXR1cGxlLT5kc3RfY2FjaGU7CisrCisrCXNwaW5fbG9ja19iaCgmaG9va3NfbG9jayk7CisrCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGhvb2ssICZob29rcywgbGlzdCkgeworKwkJaWYgKGhvb2stPm9wcy5kZXYtPmlmaW5kZXggIT0gdHVwbGUtPmlpZmlkeCAmJgorKwkJICAgIGhvb2stPm9wcy5kZXYtPmlmaW5kZXggIT0gcnQtPmRzdC5kZXYtPmlmaW5kZXgpCisrCQkJY29udGludWU7CisrCisrCQlob29rLT51c2VkID0gdHJ1ZTsKKysJCSpmb3VuZCA9IHRydWU7CisrCX0KKysJc3Bpbl91bmxvY2tfYmgoJmhvb2tzX2xvY2spOworK30KKysKKytzdGF0aWMgdm9pZAorK3h0X2Zsb3dvZmZsb2FkX2hvb2tfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCisreworKwlzdHJ1Y3QgeHRfZmxvd29mZmxvYWRfaG9vayAqaG9vazsKKysJYm9vbCBmb3VuZCA9IGZhbHNlOworKwlpbnQgZXJyOworKworKwlzcGluX2xvY2tfYmgoJmhvb2tzX2xvY2spOworKwl4dF9mbG93b2ZmbG9hZF9yZWdpc3Rlcl9ob29rcygpOworKwlobGlzdF9mb3JfZWFjaF9lbnRyeShob29rLCAmaG9va3MsIGxpc3QpCisrCQlob29rLT51c2VkID0gZmFsc2U7CisrCXNwaW5fdW5sb2NrX2JoKCZob29rc19sb2NrKTsKKysKKysJZXJyID0gbmZfZmxvd190YWJsZV9pdGVyYXRlKCZuZl9mbG93dGFibGUsIHh0X2Zsb3dvZmZsb2FkX2NoZWNrX2hvb2ssCisrCQkJCSAgICAmZm91bmQpOworKwlpZiAoZXJyICYmIGVyciAhPSAtRUFHQUlOKQorKwkgICAgZ290byBvdXQ7CisrCisrCXNwaW5fbG9ja19iaCgmaG9va3NfbG9jayk7CisrCXh0X2Zsb3dvZmZsb2FkX2NsZWFudXBfaG9va3MoKTsKKysJc3Bpbl91bmxvY2tfYmgoJmhvb2tzX2xvY2spOworKworK291dDoKKysJaWYgKGZvdW5kKQorKwkJcXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9wb3dlcl9lZmZpY2llbnRfd3EsICZob29rX3dvcmssIEhaKTsKKyt9CisrCisrc3RhdGljIGJvb2wKKyt4dF9mbG93b2ZmbG9hZF9za2lwKHN0cnVjdCBza19idWZmICpza2IsIGludCBmYW1pbHkpCisreworKwlpZiAoc2tiX3NlY19wYXRoKHNrYikpCisrCQlyZXR1cm4gdHJ1ZTsKKysKKysJaWYgKGZhbWlseSA9PSBORlBST1RPX0lQVjQpIHsKKysJCWNvbnN0IHN0cnVjdCBpcF9vcHRpb25zICpvcHQgPSAmKElQQ0Ioc2tiKS0+b3B0KTsKKysKKysJCWlmICh1bmxpa2VseShvcHQtPm9wdGxlbikpCisrCQkJcmV0dXJuIHRydWU7CisrCX0KKysKKysJcmV0dXJuIGZhbHNlOworK30KKysKKytzdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqCisreHRfZmxvd29mZmxvYWRfZHN0KGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciwKKysJCSAgIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhciwgaW50IGlmaW5kZXgpCisreworKwlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBOVUxMOworKwlzdHJ1Y3QgZmxvd2kgZmw7CisrCisrCW1lbXNldCgmZmwsIDAsIHNpemVvZihmbCkpOworKwlzd2l0Y2ggKHh0X2ZhbWlseShwYXIpKSB7CisrCWNhc2UgTkZQUk9UT19JUFY0OgorKwkJZmwudS5pcDQuZGFkZHIgPSBjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuc3JjLnUzLmlwOworKwkJZmwudS5pcDQuZmxvd2k0X29pZiA9IGlmaW5kZXg7CisrCQlicmVhazsKKysJY2FzZSBORlBST1RPX0lQVjY6CisrCQlmbC51LmlwNi5zYWRkciA9IGN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5kc3QudTMuaW42OworKwkJZmwudS5pcDYuZGFkZHIgPSBjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuc3JjLnUzLmluNjsKKysJCWZsLnUuaXA2LmZsb3dpNl9vaWYgPSBpZmluZGV4OworKwkJYnJlYWs7CisrCX0KKysKKysJbmZfcm91dGUoeHRfbmV0KHBhciksICZkc3QsICZmbCwgZmFsc2UsIHh0X2ZhbWlseShwYXIpKTsKKysKKysJcmV0dXJuIGRzdDsKKyt9CisrCisrc3RhdGljIGludAorK3h0X2Zsb3dvZmZsb2FkX3JvdXRlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwKKysJCSAgIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhciwKKysJCSAgIHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcikKKyt7CisrCXN0cnVjdCBkc3RfZW50cnkgKnRoaXNfZHN0LCAqb3RoZXJfZHN0OworKworKwl0aGlzX2RzdCA9IHh0X2Zsb3dvZmZsb2FkX2RzdChjdCwgIWRpciwgcGFyLCB4dF9vdXQocGFyKS0+aWZpbmRleCk7CisrCW90aGVyX2RzdCA9IHh0X2Zsb3dvZmZsb2FkX2RzdChjdCwgZGlyLCBwYXIsIHh0X2luKHBhciktPmlmaW5kZXgpOworKworKwlyb3V0ZS0+dHVwbGVbZGlyXS5kc3QJCT0gdGhpc19kc3Q7CisrCXJvdXRlLT50dXBsZVshZGlyXS5kc3QJCT0gb3RoZXJfZHN0OworKworKwlpZiAoIXRoaXNfZHN0IHx8ICFvdGhlcl9kc3QpCisrCQlyZXR1cm4gLUVOT0VOVDsKKysKKysJaWYgKGRzdF94ZnJtKHRoaXNfZHN0KSB8fCBkc3RfeGZybShvdGhlcl9kc3QpKQorKwkJcmV0dXJuIC1FSU5WQUw7CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgdW5zaWduZWQgaW50CisrZmxvd29mZmxvYWRfdGcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQorK3sKKysJY29uc3Qgc3RydWN0IHh0X2Zsb3dvZmZsb2FkX3RhcmdldF9pbmZvICppbmZvID0gcGFyLT50YXJnaW5mbzsKKysJc3RydWN0IHRjcGhkciBfdGNwaCwgKnRjcGggPSBOVUxMOworKwllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKKysJZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcjsKKysJc3RydWN0IG5mX2Zsb3dfcm91dGUgcm91dGU7CisrCXN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cgPSBOVUxMOworKwlzdHJ1Y3QgbmZfY29ubiAqY3Q7CisrCXN0cnVjdCBuZXQgKm5ldDsKKysKKysJaWYgKHh0X2Zsb3dvZmZsb2FkX3NraXAoc2tiLCB4dF9mYW1pbHkocGFyKSkpCisrCQlyZXR1cm4gWFRfQ09OVElOVUU7CisrCisrCWN0ID0gbmZfY3RfZ2V0KHNrYiwgJmN0aW5mbyk7CisrCWlmIChjdCA9PSBOVUxMKQorKwkJcmV0dXJuIFhUX0NPTlRJTlVFOworKworKwlzd2l0Y2ggKGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5kc3QucHJvdG9udW0pIHsKKysJY2FzZSBJUFBST1RPX1RDUDoKKysJCWlmIChjdC0+cHJvdG8udGNwLnN0YXRlICE9IFRDUF9DT05OVFJBQ0tfRVNUQUJMSVNIRUQpCisrCQkJcmV0dXJuIFhUX0NPTlRJTlVFOworKworKwkJdGNwaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHBhci0+dGhvZmYsCisrCQkJCQkgIHNpemVvZihfdGNwaCksICZfdGNwaCk7CisrCQlpZiAodW5saWtlbHkoIXRjcGggfHwgdGNwaC0+ZmluIHx8IHRjcGgtPnJzdCkpCisrCQkJcmV0dXJuIFhUX0NPTlRJTlVFOworKwkJYnJlYWs7CisrCWNhc2UgSVBQUk9UT19VRFA6CisrCQlicmVhazsKKysJZGVmYXVsdDoKKysJCXJldHVybiBYVF9DT05USU5VRTsKKysJfQorKworKwlpZiAobmZfY3RfZXh0X2V4aXN0KGN0LCBORl9DVF9FWFRfSEVMUEVSKSB8fAorKwkgICAgY3QtPnN0YXR1cyAmIElQU19TRVFfQURKVVNUKQorKwkJcmV0dXJuIFhUX0NPTlRJTlVFOworKworKwlpZiAoIW5mX2N0X2lzX2NvbmZpcm1lZChjdCkpCisrCQlyZXR1cm4gWFRfQ09OVElOVUU7CisrCisrCWlmICgheHRfaW4ocGFyKSB8fCAheHRfb3V0KHBhcikpCisrCQlyZXR1cm4gWFRfQ09OVElOVUU7CisrCisrCWlmICh0ZXN0X2FuZF9zZXRfYml0KElQU19PRkZMT0FEX0JJVCwgJmN0LT5zdGF0dXMpKQorKwkJcmV0dXJuIFhUX0NPTlRJTlVFOworKworKwlkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CisrCisrCWlmICh4dF9mbG93b2ZmbG9hZF9yb3V0ZShza2IsIGN0LCBwYXIsICZyb3V0ZSwgZGlyKSA9PSAwKQorKwkJZmxvdyA9IGZsb3dfb2ZmbG9hZF9hbGxvYyhjdCwgJnJvdXRlKTsKKysKKysJZHN0X3JlbGVhc2Uocm91dGUudHVwbGVbZGlyXS5kc3QpOworKwlkc3RfcmVsZWFzZShyb3V0ZS50dXBsZVshZGlyXS5kc3QpOworKworKwlpZiAoIWZsb3cpCisrCQlnb3RvIGVycl9mbG93X3JvdXRlOworKworKwlpZiAodGNwaCkgeworKwkJY3QtPnByb3RvLnRjcC5zZWVuWzBdLmZsYWdzIHw9IElQX0NUX1RDUF9GTEFHX0JFX0xJQkVSQUw7CisrCQljdC0+cHJvdG8udGNwLnNlZW5bMV0uZmxhZ3MgfD0gSVBfQ1RfVENQX0ZMQUdfQkVfTElCRVJBTDsKKysJfQorKworKwlpZiAoZmxvd19vZmZsb2FkX2FkZCgmbmZfZmxvd3RhYmxlLCBmbG93KSA8IDApCisrCQlnb3RvIGVycl9mbG93X2FkZDsKKysKKysJeHRfZmxvd29mZmxvYWRfY2hlY2tfZGV2aWNlKHh0X2luKHBhcikpOworKwl4dF9mbG93b2ZmbG9hZF9jaGVja19kZXZpY2UoeHRfb3V0KHBhcikpOworKworKwluZXQgPSByZWFkX3BuZXQoJm5mX2Zsb3d0YWJsZS5mdF9uZXQpOworKwlpZiAoIW5ldCkKKysJCXdyaXRlX3BuZXQoJm5mX2Zsb3d0YWJsZS5mdF9uZXQsIHh0X25ldChwYXIpKTsKKysKKysJaWYgKGluZm8tPmZsYWdzICYgWFRfRkxPV09GRkxPQURfSFcpCisrCQluZl9mbG93X29mZmxvYWRfaHdfYWRkKHh0X25ldChwYXIpLCBmbG93LCBjdCk7CisrCisrCXJldHVybiBYVF9DT05USU5VRTsKKysKKytlcnJfZmxvd19hZGQ6CisrCWZsb3dfb2ZmbG9hZF9mcmVlKGZsb3cpOworK2Vycl9mbG93X3JvdXRlOgorKwljbGVhcl9iaXQoSVBTX09GRkxPQURfQklULCAmY3QtPnN0YXR1cyk7CisrCXJldHVybiBYVF9DT05USU5VRTsKKyt9CisrCisrCisrc3RhdGljIGludCBmbG93b2ZmbG9hZF9jaGsoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCisreworKwlzdHJ1Y3QgeHRfZmxvd29mZmxvYWRfdGFyZ2V0X2luZm8gKmluZm8gPSBwYXItPnRhcmdpbmZvOworKworKwlpZiAoaW5mby0+ZmxhZ3MgJiB+WFRfRkxPV09GRkxPQURfTUFTSykKKysJCXJldHVybiAtRUlOVkFMOworKworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIHN0cnVjdCB4dF90YXJnZXQgb2ZmbG9hZF90Z19yZWcgX19yZWFkX21vc3RseSA9IHsKKysJLmZhbWlseQkJPSBORlBST1RPX1VOU1BFQywKKysJLm5hbWUJCT0gIkZMT1dPRkZMT0FEIiwKKysJLnJldmlzaW9uCT0gMCwKKysJLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X2Zsb3dvZmZsb2FkX3RhcmdldF9pbmZvKSwKKysJLnVzZXJzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9mbG93b2ZmbG9hZF90YXJnZXRfaW5mbyksCisrCS5jaGVja2VudHJ5CT0gZmxvd29mZmxvYWRfY2hrLAorKwkudGFyZ2V0CQk9IGZsb3dvZmZsb2FkX3RnLAorKwkubWUJCT0gVEhJU19NT0RVTEUsCisrfTsKKysKKytzdGF0aWMgaW50IHh0X2Zsb3dvZmZsb2FkX3RhYmxlX2luaXQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqdGFibGUpCisreworKwl0YWJsZS0+ZmxhZ3MgPSBORl9GTE9XVEFCTEVfRl9IVzsKKysJbmZfZmxvd190YWJsZV9pbml0KHRhYmxlKTsKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyB2b2lkIHh0X2Zsb3dvZmZsb2FkX3RhYmxlX2NsZWFudXAoc3RydWN0IG5mX2Zsb3d0YWJsZSAqdGFibGUpCisreworKwluZl9mbG93X3RhYmxlX2ZyZWUodGFibGUpOworK30KKysKKytzdGF0aWMgaW50IGZsb3dfb2ZmbG9hZF9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLAorKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikKKyt7CisrCXN0cnVjdCB4dF9mbG93b2ZmbG9hZF9ob29rICpob29rID0gTlVMTDsKKysJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpOworKworKwlpZiAoZXZlbnQgIT0gTkVUREVWX1VOUkVHSVNURVIpCisrCQlyZXR1cm4gTk9USUZZX0RPTkU7CisrCisrCXNwaW5fbG9ja19iaCgmaG9va3NfbG9jayk7CisrCWhvb2sgPSBmbG93X29mZmxvYWRfbG9va3VwX2hvb2soZGV2KTsKKysJaWYgKGhvb2spIHsKKysJCWhsaXN0X2RlbCgmaG9vay0+bGlzdCk7CisrCX0KKysJc3Bpbl91bmxvY2tfYmgoJmhvb2tzX2xvY2spOworKwlpZiAoaG9vaykgeworKwkJbmZfdW5yZWdpc3Rlcl9uZXRfaG9vayhob29rLT5uZXQsICZob29rLT5vcHMpOworKwkJa2ZyZWUoaG9vayk7CisrCX0KKysKKysJbmZfZmxvd190YWJsZV9jbGVhbnVwKGRldik7CisrCisrCXJldHVybiBOT1RJRllfRE9ORTsKKyt9CisrCisrc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBmbG93X29mZmxvYWRfbmV0ZGV2X25vdGlmaWVyID0geworKwkubm90aWZpZXJfY2FsbAk9IGZsb3dfb2ZmbG9hZF9uZXRkZXZfZXZlbnQsCisrfTsKKysKKytzdGF0aWMgaW50IF9faW5pdCB4dF9mbG93b2ZmbG9hZF90Z19pbml0KHZvaWQpCisreworKwlpbnQgcmV0OworKworKwlyZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmZsb3dfb2ZmbG9hZF9uZXRkZXZfbm90aWZpZXIpOworKworKwlJTklUX0RFTEFZRURfV09SSygmaG9va193b3JrLCB4dF9mbG93b2ZmbG9hZF9ob29rX3dvcmspOworKworKwlyZXQgPSB4dF9mbG93b2ZmbG9hZF90YWJsZV9pbml0KCZuZl9mbG93dGFibGUpOworKwlpZiAocmV0KQorKwkJcmV0dXJuIHJldDsKKysKKysJcmV0ID0geHRfcmVnaXN0ZXJfdGFyZ2V0KCZvZmZsb2FkX3RnX3JlZyk7CisrCWlmIChyZXQpCisrCQl4dF9mbG93b2ZmbG9hZF90YWJsZV9jbGVhbnVwKCZuZl9mbG93dGFibGUpOworKworKwlyZXR1cm4gcmV0OworK30KKysKKytzdGF0aWMgdm9pZCBfX2V4aXQgeHRfZmxvd29mZmxvYWRfdGdfZXhpdCh2b2lkKQorK3sKKysJeHRfdW5yZWdpc3Rlcl90YXJnZXQoJm9mZmxvYWRfdGdfcmVnKTsKKysJeHRfZmxvd29mZmxvYWRfdGFibGVfY2xlYW51cCgmbmZfZmxvd3RhYmxlKTsKKysJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmZsb3dfb2ZmbG9hZF9uZXRkZXZfbm90aWZpZXIpOworK30KKysKKytNT0RVTEVfTElDRU5TRSgiR1BMIik7CisrbW9kdWxlX2luaXQoeHRfZmxvd29mZmxvYWRfdGdfaW5pdCk7CisrbW9kdWxlX2V4aXQoeHRfZmxvd29mZmxvYWRfdGdfZXhpdCk7CistLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jCisrKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jCitAQCAtNyw3ICs3LDYgQEAKKyAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisgI2luY2x1ZGUgPG5ldC9pcC5oPgorICNpbmNsdWRlIDxuZXQvaXA2X3JvdXRlLmg+CistI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmg+CisgI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPgorICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oPgorICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmg+CitAQCAtMzM4LDggKzMzNyw3IEBAIGZsb3dfb2ZmbG9hZF9sb29rdXAoc3RydWN0IG5mX2Zsb3d0YWJsZQorIH0KKyBFWFBPUlRfU1lNQk9MX0dQTChmbG93X29mZmxvYWRfbG9va3VwKTsKKyAKKy1zdGF0aWMgaW50CistbmZfZmxvd190YWJsZV9pdGVyYXRlKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsCisraW50IG5mX2Zsb3dfdGFibGVfaXRlcmF0ZShzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLAorIAkJICAgICAgdm9pZCAoKml0ZXIpKHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHZvaWQgKmRhdGEpLAorIAkJICAgICAgdm9pZCAqZGF0YSkKKyB7CitAQCAtMzcyLDYgKzM3MCw3IEBAIG5mX2Zsb3dfdGFibGVfaXRlcmF0ZShzdHJ1Y3QgbmZfZmxvd3RhYmwKKyAKKyAJcmV0dXJuIGVycjsKKyB9CisrRVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd190YWJsZV9pdGVyYXRlKTsKKyAKKyBzdGF0aWMgdm9pZCBuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcChzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCB2b2lkICpkYXRhKQorIHsKKy0tLSAvZGV2L251bGwKKysrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIveHRfRkxPV09GRkxPQUQuaAorQEAgLTAsMCArMSwxNyBAQAorKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIFdJVEggTGludXgtc3lzY2FsbC1ub3RlICovCisrI2lmbmRlZiBfWFRfRkxPV09GRkxPQURfSAorKyNkZWZpbmUgX1hUX0ZMT1dPRkZMT0FEX0gKKysKKysjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKysKKytlbnVtIHsKKysJWFRfRkxPV09GRkxPQURfSFcJPSAxIDw8IDAsCisrCisrCVhUX0ZMT1dPRkZMT0FEX01BU0sJPSBYVF9GTE9XT0ZGTE9BRF9IVworK307CisrCisrc3RydWN0IHh0X2Zsb3dvZmZsb2FkX3RhcmdldF9pbmZvIHsKKysJX191MzIgZmxhZ3M7CisrfTsKKysKKysjZW5kaWYgLyogX1hUX0ZMT1dPRkZMT0FEX0ggKi8KKy0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgKKysrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgKK0BAIC0xMzAsNiArMTMwLDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmbG93X29mZmxvYWRfZGVhZChzdHIKKyAJZmxvdy0+ZmxhZ3MgfD0gRkxPV19PRkZMT0FEX0RZSU5HOworIH0KKyAKKytpbnQgbmZfZmxvd190YWJsZV9pdGVyYXRlKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsCisrICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCppdGVyKShzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCB2b2lkICpkYXRhKSwKKysgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSk7CisrCisgaW50IG5mX2Zsb3dfc25hdF9wb3J0KGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csCisgCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgdGhvZmYsCisgCQkgICAgICB1OCBwcm90b2NvbCwgZW51bSBmbG93X29mZmxvYWRfdHVwbGVfZGlyIGRpcik7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC82NTEtd2lyZWxlc3NfbWVzaF9oZWFkZXIucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC82NTEtd2lyZWxlc3NfbWVzaF9oZWFkZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU0NWQ4ZQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzY1MS13aXJlbGVzc19tZXNoX2hlYWRlci5wYXRjaApAQCAtMCwwICsxLDI0IEBACitGcm9tIDZkM2JjNzY5NjU3YjBlZTdjNzUwNmRhZDk5MTExMTFjNDIyNmE3ZWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBJbXJlIEthbG96IDxrYWxvekBvcGVud3J0Lm9yZz4KK0RhdGU6IEZyaSwgNyBKdWwgMjAxNyAxNzoyMTowNSArMDIwMAorU3ViamVjdDogbWFjODAyMTE6IGluY3JlYXNlIHdpcmVsZXNzIG1lc2ggaGVhZGVyIHNpemUKKworbGVkZS1jb21taXQgM2Q0NDY2Y2ZkOGY3NWY3MTdlZmRiMWY5NmZkZGUzYzcwZDg2NWZjMQorU2lnbmVkLW9mZi1ieTogSW1yZSBLYWxveiA8a2Fsb3pAb3BlbndydC5vcmc+CistLS0KKyBpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAorKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAorQEAgLTEzOCw4ICsxMzgsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZGV2X3htaXRfY29tcGxldGUoaW50CisgCisgI2lmIGRlZmluZWQoQ09ORklHX0hZUEVSVl9ORVQpCisgIyBkZWZpbmUgTExfTUFYX0hFQURFUiAxMjgKKy0jZWxpZiBkZWZpbmVkKENPTkZJR19XTEFOKSB8fCBJU19FTkFCTEVEKENPTkZJR19BWDI1KQorLSMgaWYgZGVmaW5lZChDT05GSUdfTUFDODAyMTFfTUVTSCkKKysjZWxpZiBkZWZpbmVkKENPTkZJR19XTEFOKSB8fCBJU19FTkFCTEVEKENPTkZJR19BWDI1KSB8fCAxCisrIyBpZiBkZWZpbmVkKENPTkZJR19NQUM4MDIxMV9NRVNIKSB8fCAxCisgIyAgZGVmaW5lIExMX01BWF9IRUFERVIgMTI4CisgIyBlbHNlCisgIyAgZGVmaW5lIExMX01BWF9IRUFERVIgOTYKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzY2MC1mcV9jb2RlbF9kZWZhdWx0cy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzY2MC1mcV9jb2RlbF9kZWZhdWx0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmJmMGUzCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvaGFjay01LjQvNjYwLWZxX2NvZGVsX2RlZmF1bHRzLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK0Zyb20gYTZjY2IyMzg5MzliMjU4NTE0NzRhMjc5YjIwMzY3ZmQyNGEwZTgxNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KK0RhdGU6IEZyaSwgNyBKdWwgMjAxNyAxNzoyMTo1MyArMDIwMAorU3ViamVjdDogIGhhY2s6IG5ldDogZnFfY29kZWw6IHR1bmUgZGVmYXVsdHMgZm9yIHNtYWxsIGRldmljZXMKKworQXNzdW1lIHRoYXQgeDg2XzY0IGRldmljZXMgYWx3YXlzIGhhdmUgYSBiaWcgbWVtb3J5IGFuZCBkbyBub3QgbmVlZCB0aGlzIAorb3B0aW1pemF0aW9uIGNvbXBhcmVkIHRvIGRldmljZXMgd2l0aCBvbmx5IDMyIE1CIG9yIDY0IE1CIFJBTS4KKworU2lnbmVkLW9mZi1ieTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorLS0tCisgbmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCistLS0gYS9uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMKKysrKyBiL25ldC9zY2hlZC9zY2hfZnFfY29kZWwuYworQEAgLTQ3MCw3ICs0NzAsMTEgQEAgc3RhdGljIGludCBmcV9jb2RlbF9pbml0KHN0cnVjdCBRZGlzYyAqcworIAorIAlzY2gtPmxpbWl0ID0gMTAqMTAyNDsKKyAJcS0+Zmxvd3NfY250ID0gMTAyNDsKKysjaWZkZWYgQ09ORklHX1g4Nl82NAorIAlxLT5tZW1vcnlfbGltaXQgPSAzMiA8PCAyMDsgLyogMzIgTUJ5dGVzICovCisrI2Vsc2UKKysJcS0+bWVtb3J5X2xpbWl0ID0gNCA8PCAyMDsgLyogNCBNQnl0ZXMgKi8KKysjZW5kaWYKKyAJcS0+ZHJvcF9iYXRjaF9zaXplID0gNjQ7CisgCXEtPnF1YW50dW0gPSBwc2NoZWRfbXR1KHFkaXNjX2RldihzY2gpKTsKKyAJSU5JVF9MSVNUX0hFQUQoJnEtPm5ld19mbG93cyk7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC82NjEtdXNlX2ZxX2NvZGVsX2J5X2RlZmF1bHQucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC82NjEtdXNlX2ZxX2NvZGVsX2J5X2RlZmF1bHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFmMWEyNQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzY2MS11c2VfZnFfY29kZWxfYnlfZGVmYXVsdC5wYXRjaApAQCAtMCwwICsxLDEwMCBAQAorRnJvbSAxZDQxOGY3ZTg4MDM1ZWQ3YTk0MDczZjYzNTQyNDZjNjZlOTE5M2U5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorRGF0ZTogRnJpLCA3IEp1bCAyMDE3IDE3OjIyOjU4ICswMjAwCitTdWJqZWN0OiBmcV9jb2RlbDogc3dpdGNoIGRlZmF1bHQgcWRpc2MgZnJvbSBwZmlmb19mYXN0IHRvIGZxX2NvZGVsIGFuZCByZW1vdmUgcGZpZm9fZmFzdAorCitTaWduZWQtb2ZmLWJ5OiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CistLS0KKyBpbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oIHwgMyArKy0KKyBuZXQvc2NoZWQvS2NvbmZpZyAgICAgICAgIHwgMyArKy0KKyBuZXQvc2NoZWQvc2NoX2FwaS5jICAgICAgIHwgMiArLQorIG5ldC9zY2hlZC9zY2hfZnFfY29kZWwuYyAgfCAzICsrLQorIG5ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jICAgfCA0ICsrLS0KKyA1IGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworLS0tIGEvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaAorKysrIGIvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaAorQEAgLTYxNywxMiArNjE3LDEzIEBAIGV4dGVybiBzdHJ1Y3QgUWRpc2Nfb3BzIG5vb3BfcWRpc2Nfb3BzOworIGV4dGVybiBzdHJ1Y3QgUWRpc2Nfb3BzIHBmaWZvX2Zhc3Rfb3BzOworIGV4dGVybiBzdHJ1Y3QgUWRpc2Nfb3BzIG1xX3FkaXNjX29wczsKKyBleHRlcm4gc3RydWN0IFFkaXNjX29wcyBub3F1ZXVlX3FkaXNjX29wczsKKytleHRlcm4gc3RydWN0IFFkaXNjX29wcyBmcV9jb2RlbF9xZGlzY19vcHM7CisgZXh0ZXJuIGNvbnN0IHN0cnVjdCBRZGlzY19vcHMgKmRlZmF1bHRfcWRpc2Nfb3BzOworIHN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IFFkaXNjX29wcyAqCisgZ2V0X2RlZmF1bHRfcWRpc2Nfb3BzKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBudHgpCisgeworIAlyZXR1cm4gbnR4IDwgZGV2LT5yZWFsX251bV90eF9xdWV1ZXMgPworLQkJCWRlZmF1bHRfcWRpc2Nfb3BzIDogJnBmaWZvX2Zhc3Rfb3BzOworKwkJCWRlZmF1bHRfcWRpc2Nfb3BzIDogJmZxX2NvZGVsX3FkaXNjX29wczsKKyB9CisgCisgc3RydWN0IFFkaXNjX2NsYXNzX2NvbW1vbiB7CistLS0gYS9uZXQvc2NoZWQvS2NvbmZpZworKysrIGIvbmV0L3NjaGVkL0tjb25maWcKK0BAIC00LDggKzQsOSBAQAorICMKKyAKKyBtZW51Y29uZmlnIE5FVF9TQ0hFRAorLQlib29sICJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmciCisrCWRlZl9ib29sIHkKKyAJc2VsZWN0IE5FVF9TQ0hfRklGTworKwlzZWxlY3QgTkVUX1NDSF9GUV9DT0RFTAorIAktLS1oZWxwLS0tCisgCSAgV2hlbiB0aGUga2VybmVsIGhhcyBzZXZlcmFsIHBhY2tldHMgdG8gc2VuZCBvdXQgb3ZlciBhIG5ldHdvcmsKKyAJICBkZXZpY2UsIGl0IGhhcyB0byBkZWNpZGUgd2hpY2ggb25lcyB0byBzZW5kIGZpcnN0LCB3aGljaCBvbmVzIHRvCistLS0gYS9uZXQvc2NoZWQvc2NoX2FwaS5jCisrKysgYi9uZXQvc2NoZWQvc2NoX2FwaS5jCitAQCAtMjI3OCw3ICsyMjc4LDcgQEAgc3RhdGljIGludCBfX2luaXQgcGt0c2NoZWRfaW5pdCh2b2lkKQorIAkJcmV0dXJuIGVycjsKKyAJfQorIAorLQlyZWdpc3Rlcl9xZGlzYygmcGZpZm9fZmFzdF9vcHMpOworKwlyZWdpc3Rlcl9xZGlzYygmZnFfY29kZWxfcWRpc2Nfb3BzKTsKKyAJcmVnaXN0ZXJfcWRpc2MoJnBmaWZvX3FkaXNjX29wcyk7CisgCXJlZ2lzdGVyX3FkaXNjKCZiZmlmb19xZGlzY19vcHMpOworIAlyZWdpc3Rlcl9xZGlzYygmcGZpZm9faGVhZF9kcm9wX3FkaXNjX29wcyk7CistLS0gYS9uZXQvc2NoZWQvc2NoX2ZxX2NvZGVsLmMKKysrKyBiL25ldC9zY2hlZC9zY2hfZnFfY29kZWwuYworQEAgLTcxMCw3ICs3MTAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IFFkaXNjX2NsYXNzX29wcyBmcV9jCisgCS53YWxrCQk9CWZxX2NvZGVsX3dhbGssCisgfTsKKyAKKy1zdGF0aWMgc3RydWN0IFFkaXNjX29wcyBmcV9jb2RlbF9xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHsKKytzdHJ1Y3QgUWRpc2Nfb3BzIGZxX2NvZGVsX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0geworIAkuY2xfb3BzCQk9CSZmcV9jb2RlbF9jbGFzc19vcHMsCisgCS5pZAkJPQkiZnFfY29kZWwiLAorIAkucHJpdl9zaXplCT0Jc2l6ZW9mKHN0cnVjdCBmcV9jb2RlbF9zY2hlZF9kYXRhKSwKK0BAIC03MjUsNiArNzI1LDcgQEAgc3RhdGljIHN0cnVjdCBRZGlzY19vcHMgZnFfY29kZWxfcWRpc2NfbworIAkuZHVtcF9zdGF0cyA9CWZxX2NvZGVsX2R1bXBfc3RhdHMsCisgCS5vd25lcgkJPQlUSElTX01PRFVMRSwKKyB9OworK0VYUE9SVF9TWU1CT0woZnFfY29kZWxfcWRpc2Nfb3BzKTsKKyAKKyBzdGF0aWMgaW50IF9faW5pdCBmcV9jb2RlbF9tb2R1bGVfaW5pdCh2b2lkKQorIHsKKy0tLSBhL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jCisrKysgYi9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYworQEAgLTMyLDcgKzMyLDcgQEAKKyAjaW5jbHVkZSA8bmV0L3hmcm0uaD4KKyAKKyAvKiBRZGlzYyB0byB1c2UgYnkgZGVmYXVsdCAqLworLWNvbnN0IHN0cnVjdCBRZGlzY19vcHMgKmRlZmF1bHRfcWRpc2Nfb3BzID0gJnBmaWZvX2Zhc3Rfb3BzOworK2NvbnN0IHN0cnVjdCBRZGlzY19vcHMgKmRlZmF1bHRfcWRpc2Nfb3BzID0gJmZxX2NvZGVsX3FkaXNjX29wczsKKyBFWFBPUlRfU1lNQk9MKGRlZmF1bHRfcWRpc2Nfb3BzKTsKKyAKKyBzdGF0aWMgdm9pZCBxZGlzY19tYXliZV9jbGVhcl9taXNzZWQoc3RydWN0IFFkaXNjICpxLAorQEAgLTEwNzksMTIgKzEwNzksMTIgQEAgc3RhdGljIHZvaWQgYXR0YWNoX29uZV9kZWZhdWx0X3FkaXNjKHN0cgorIAkJCQkgICAgIHZvaWQgKl91bnVzZWQpCisgeworIAlzdHJ1Y3QgUWRpc2MgKnFkaXNjOworLQljb25zdCBzdHJ1Y3QgUWRpc2Nfb3BzICpvcHMgPSBkZWZhdWx0X3FkaXNjX29wczsKKysJY29uc3Qgc3RydWN0IFFkaXNjX29wcyAqb3BzID0gJmZxX2NvZGVsX3FkaXNjX29wczsKKyAKKyAJaWYgKGRldi0+cHJpdl9mbGFncyAmIElGRl9OT19RVUVVRSkKKyAJCW9wcyA9ICZub3F1ZXVlX3FkaXNjX29wczsKKyAJZWxzZSBpZihkZXYtPnR5cGUgPT0gQVJQSFJEX0NBTikKKy0JCW9wcyA9ICZwZmlmb19mYXN0X29wczsKKysJCW9wcyA9ICZmcV9jb2RlbF9xZGlzY19vcHM7CisgCisgCXFkaXNjID0gcWRpc2NfY3JlYXRlX2RmbHQoZGV2X3F1ZXVlLCBvcHMsIFRDX0hfUk9PVCwgTlVMTCk7CisgCWlmICghcWRpc2MpIHsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzY2Mi1yZW1vdmVfcGZpZm9fZmFzdC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzY2Mi1yZW1vdmVfcGZpZm9fZmFzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGYzYTgyCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvaGFjay01LjQvNjYyLXJlbW92ZV9wZmlmb19mYXN0LnBhdGNoCkBAIC0wLDAgKzEsMjQzIEBACitGcm9tIGI1MzFkNDkyZDVlZjFjZjlkYmEwZjQ4ODhlYjVmZDg2MjRhNmQ3NjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CitEYXRlOiBGcmksIDcgSnVsIDIwMTcgMTc6MjM6NDIgKzAyMDAKK1N1YmplY3Q6IG5ldDogc2NoZWQ6IHN3aXRjaCBkZWZhdWx0IHFkaXNjIGZyb20gcGZpZm9fZmFzdCB0byBmcV9jb2RlbCBhbmQgcmVtb3ZlIHBmaWZvX2Zhc3QKKworU2lnbmVkLW9mZi1ieTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorLS0tCisgbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMgfCAxNDAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDE0MCBkZWxldGlvbnMoLSkKKworLS0tIGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKKysrKyBiL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jCitAQCAtNjIwLDIzMCArNjIwLDYgQEAgc3RydWN0IFFkaXNjX29wcyBub3F1ZXVlX3FkaXNjX29wcyBfX3JlYQorIAkub3duZXIJCT0JVEhJU19NT0RVTEUsCisgfTsKKyAKKy1zdGF0aWMgY29uc3QgdTggcHJpbzJiYW5kW1RDX1BSSU9fTUFYICsgMV0gPSB7CistCTEsIDIsIDIsIDIsIDEsIDIsIDAsIDAgLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxCistfTsKKy0KKy0vKiAzLWJhbmQgRklGTyBxdWV1ZTogb2xkIHN0eWxlLCBidXQgc2hvdWxkIGJlIGEgYml0IGZhc3RlciB0aGFuCistICAgZ2VuZXJpYyBwcmlvK2ZpZm8gY29tYmluYXRpb24uCistICovCistCistI2RlZmluZSBQRklGT19GQVNUX0JBTkRTIDMKKy0KKy0vKgorLSAqIFByaXZhdGUgZGF0YSBmb3IgYSBwZmlmb19mYXN0IHNjaGVkdWxlciBjb250YWluaW5nOgorLSAqCS0gcmluZ3MgZm9yIHByaW9yaXR5IGJhbmRzCistICovCistc3RydWN0IHBmaWZvX2Zhc3RfcHJpdiB7CistCXN0cnVjdCBza2JfYXJyYXkgcVtQRklGT19GQVNUX0JBTkRTXTsKKy19OworLQorLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrYl9hcnJheSAqYmFuZDJsaXN0KHN0cnVjdCBwZmlmb19mYXN0X3ByaXYgKnByaXYsCistCQkJCQkgIGludCBiYW5kKQorLXsKKy0JcmV0dXJuICZwcml2LT5xW2JhbmRdOworLX0KKy0KKy1zdGF0aWMgaW50IHBmaWZvX2Zhc3RfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MgKnFkaXNjLAorLQkJCSAgICAgIHN0cnVjdCBza19idWZmICoqdG9fZnJlZSkKKy17CistCWludCBiYW5kID0gcHJpbzJiYW5kW3NrYi0+cHJpb3JpdHkgJiBUQ19QUklPX01BWF07CistCXN0cnVjdCBwZmlmb19mYXN0X3ByaXYgKnByaXYgPSBxZGlzY19wcml2KHFkaXNjKTsKKy0Jc3RydWN0IHNrYl9hcnJheSAqcSA9IGJhbmQybGlzdChwcml2LCBiYW5kKTsKKy0JdW5zaWduZWQgaW50IHBrdF9sZW4gPSBxZGlzY19wa3RfbGVuKHNrYik7CistCWludCBlcnI7CistCistCWVyciA9IHNrYl9hcnJheV9wcm9kdWNlKHEsIHNrYik7CistCistCWlmICh1bmxpa2VseShlcnIpKSB7CistCQlpZiAocWRpc2NfaXNfcGVyY3B1X3N0YXRzKHFkaXNjKSkKKy0JCQlyZXR1cm4gcWRpc2NfZHJvcF9jcHUoc2tiLCBxZGlzYywgdG9fZnJlZSk7CistCQllbHNlCistCQkJcmV0dXJuIHFkaXNjX2Ryb3Aoc2tiLCBxZGlzYywgdG9fZnJlZSk7CistCX0KKy0KKy0JcWRpc2NfdXBkYXRlX3N0YXRzX2F0X2VucXVldWUocWRpc2MsIHBrdF9sZW4pOworLQlyZXR1cm4gTkVUX1hNSVRfU1VDQ0VTUzsKKy19CistCistc3RhdGljIHN0cnVjdCBza19idWZmICpwZmlmb19mYXN0X2RlcXVldWUoc3RydWN0IFFkaXNjICpxZGlzYykKKy17CistCXN0cnVjdCBwZmlmb19mYXN0X3ByaXYgKnByaXYgPSBxZGlzY19wcml2KHFkaXNjKTsKKy0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CistCWJvb2wgbmVlZF9yZXRyeSA9IHRydWU7CistCWludCBiYW5kOworLQorLXJldHJ5OgorLQlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgUEZJRk9fRkFTVF9CQU5EUyAmJiAhc2tiOyBiYW5kKyspIHsKKy0JCXN0cnVjdCBza2JfYXJyYXkgKnEgPSBiYW5kMmxpc3QocHJpdiwgYmFuZCk7CistCistCQlpZiAoX19za2JfYXJyYXlfZW1wdHkocSkpCistCQkJY29udGludWU7CistCistCQlza2IgPSBfX3NrYl9hcnJheV9jb25zdW1lKHEpOworLQl9CistCWlmIChsaWtlbHkoc2tiKSkgeworLQkJcWRpc2NfdXBkYXRlX3N0YXRzX2F0X2RlcXVldWUocWRpc2MsIHNrYik7CistCX0gZWxzZSBpZiAobmVlZF9yZXRyeSAmJgorLQkJICAgdGVzdF9iaXQoX19RRElTQ19TVEFURV9NSVNTRUQsICZxZGlzYy0+c3RhdGUpKSB7CistCQkvKiBEZWxheSBjbGVhcmluZyB0aGUgU1RBVEVfTUlTU0VEIGhlcmUgdG8gcmVkdWNlCistCQkgKiB0aGUgb3ZlcmhlYWQgb2YgdGhlIHNlY29uZCBzcGluX3RyeWxvY2soKSBpbgorLQkJICogcWRpc2NfcnVuX2JlZ2luKCkgYW5kIF9fbmV0aWZfc2NoZWR1bGUoKSBjYWxsaW5nCistCQkgKiBpbiBxZGlzY19ydW5fZW5kKCkuCistCQkgKi8KKy0JCWNsZWFyX2JpdChfX1FESVNDX1NUQVRFX01JU1NFRCwgJnFkaXNjLT5zdGF0ZSk7CistCistCQkvKiBNYWtlIHN1cmUgZGVxdWV1aW5nIGhhcHBlbnMgYWZ0ZXIgY2xlYXJpbmcKKy0JCSAqIFNUQVRFX01JU1NFRC4KKy0JCSAqLworLQkJc21wX21iX19hZnRlcl9hdG9taWMoKTsKKy0KKy0JCW5lZWRfcmV0cnkgPSBmYWxzZTsKKy0KKy0JCWdvdG8gcmV0cnk7CistCX0gZWxzZSB7CistCQlXUklURV9PTkNFKHFkaXNjLT5lbXB0eSwgdHJ1ZSk7CistCX0KKy0KKy0JcmV0dXJuIHNrYjsKKy19CistCistc3RhdGljIHN0cnVjdCBza19idWZmICpwZmlmb19mYXN0X3BlZWsoc3RydWN0IFFkaXNjICpxZGlzYykKKy17CistCXN0cnVjdCBwZmlmb19mYXN0X3ByaXYgKnByaXYgPSBxZGlzY19wcml2KHFkaXNjKTsKKy0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CistCWludCBiYW5kOworLQorLQlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgUEZJRk9fRkFTVF9CQU5EUyAmJiAhc2tiOyBiYW5kKyspIHsKKy0JCXN0cnVjdCBza2JfYXJyYXkgKnEgPSBiYW5kMmxpc3QocHJpdiwgYmFuZCk7CistCistCQlza2IgPSBfX3NrYl9hcnJheV9wZWVrKHEpOworLQl9CistCistCXJldHVybiBza2I7CistfQorLQorLXN0YXRpYyB2b2lkIHBmaWZvX2Zhc3RfcmVzZXQoc3RydWN0IFFkaXNjICpxZGlzYykKKy17CistCWludCBpLCBiYW5kOworLQlzdHJ1Y3QgcGZpZm9fZmFzdF9wcml2ICpwcml2ID0gcWRpc2NfcHJpdihxZGlzYyk7CistCistCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBQRklGT19GQVNUX0JBTkRTOyBiYW5kKyspIHsKKy0JCXN0cnVjdCBza2JfYXJyYXkgKnEgPSBiYW5kMmxpc3QocHJpdiwgYmFuZCk7CistCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworLQorLQkJLyogTlVMTCByaW5nIGlzIHBvc3NpYmxlIGlmIGRlc3Ryb3kgcGF0aCBpcyBkdWUgdG8gYSBmYWlsZWQKKy0JCSAqIHNrYl9hcnJheV9pbml0KCkgaW4gcGZpZm9fZmFzdF9pbml0KCkgY2FzZS4KKy0JCSAqLworLQkJaWYgKCFxLT5yaW5nLnF1ZXVlKQorLQkJCWNvbnRpbnVlOworLQorLQkJd2hpbGUgKChza2IgPSBfX3NrYl9hcnJheV9jb25zdW1lKHEpKSAhPSBOVUxMKQorLQkJCWtmcmVlX3NrYihza2IpOworLQl9CistCistCWlmIChxZGlzY19pc19wZXJjcHVfc3RhdHMocWRpc2MpKSB7CistCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgeworLQkJCXN0cnVjdCBnbmV0X3N0YXRzX3F1ZXVlICpxOworLQorLQkJCXEgPSBwZXJfY3B1X3B0cihxZGlzYy0+Y3B1X3FzdGF0cywgaSk7CistCQkJcS0+YmFja2xvZyA9IDA7CistCQkJcS0+cWxlbiA9IDA7CistCQl9CistCX0KKy19CistCistc3RhdGljIGludCBwZmlmb19mYXN0X2R1bXAoc3RydWN0IFFkaXNjICpxZGlzYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKKy17CistCXN0cnVjdCB0Y19wcmlvX3FvcHQgb3B0ID0geyAuYmFuZHMgPSBQRklGT19GQVNUX0JBTkRTIH07CistCistCW1lbWNweSgmb3B0LnByaW9tYXAsIHByaW8yYmFuZCwgVENfUFJJT19NQVggKyAxKTsKKy0JaWYgKG5sYV9wdXQoc2tiLCBUQ0FfT1BUSU9OUywgc2l6ZW9mKG9wdCksICZvcHQpKQorLQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CistCXJldHVybiBza2ItPmxlbjsKKy0KKy1ubGFfcHV0X2ZhaWx1cmU6CistCXJldHVybiAtMTsKKy19CistCistc3RhdGljIGludCBwZmlmb19mYXN0X2luaXQoc3RydWN0IFFkaXNjICpxZGlzYywgc3RydWN0IG5sYXR0ciAqb3B0LAorLQkJCSAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKKy17CistCXVuc2lnbmVkIGludCBxbGVuID0gcWRpc2NfZGV2KHFkaXNjKS0+dHhfcXVldWVfbGVuOworLQlzdHJ1Y3QgcGZpZm9fZmFzdF9wcml2ICpwcml2ID0gcWRpc2NfcHJpdihxZGlzYyk7CistCWludCBwcmlvOworLQorLQkvKiBndWFyZCBhZ2FpbnN0IHplcm8gbGVuZ3RoIHJpbmdzICovCistCWlmICghcWxlbikKKy0JCXJldHVybiAtRUlOVkFMOworLQorLQlmb3IgKHByaW8gPSAwOyBwcmlvIDwgUEZJRk9fRkFTVF9CQU5EUzsgcHJpbysrKSB7CistCQlzdHJ1Y3Qgc2tiX2FycmF5ICpxID0gYmFuZDJsaXN0KHByaXYsIHByaW8pOworLQkJaW50IGVycjsKKy0KKy0JCWVyciA9IHNrYl9hcnJheV9pbml0KHEsIHFsZW4sIEdGUF9LRVJORUwpOworLQkJaWYgKGVycikKKy0JCQlyZXR1cm4gLUVOT01FTTsKKy0JfQorLQorLQkvKiBDYW4gYnktcGFzcyB0aGUgcXVldWUgZGlzY2lwbGluZSAqLworLQlxZGlzYy0+ZmxhZ3MgfD0gVENRX0ZfQ0FOX0JZUEFTUzsKKy0JcmV0dXJuIDA7CistfQorLQorLXN0YXRpYyB2b2lkIHBmaWZvX2Zhc3RfZGVzdHJveShzdHJ1Y3QgUWRpc2MgKnNjaCkKKy17CistCXN0cnVjdCBwZmlmb19mYXN0X3ByaXYgKnByaXYgPSBxZGlzY19wcml2KHNjaCk7CistCWludCBwcmlvOworLQorLQlmb3IgKHByaW8gPSAwOyBwcmlvIDwgUEZJRk9fRkFTVF9CQU5EUzsgcHJpbysrKSB7CistCQlzdHJ1Y3Qgc2tiX2FycmF5ICpxID0gYmFuZDJsaXN0KHByaXYsIHByaW8pOworLQorLQkJLyogTlVMTCByaW5nIGlzIHBvc3NpYmxlIGlmIGRlc3Ryb3kgcGF0aCBpcyBkdWUgdG8gYSBmYWlsZWQKKy0JCSAqIHNrYl9hcnJheV9pbml0KCkgaW4gcGZpZm9fZmFzdF9pbml0KCkgY2FzZS4KKy0JCSAqLworLQkJaWYgKCFxLT5yaW5nLnF1ZXVlKQorLQkJCWNvbnRpbnVlOworLQkJLyogRGVzdHJveSByaW5nIGJ1dCBubyBuZWVkIHRvIGtmcmVlX3NrYiBiZWNhdXNlIGEgY2FsbCB0bworLQkJICogcGZpZm9fZmFzdF9yZXNldCgpIGhhcyBhbHJlYWR5IGRvbmUgdGhhdCB3b3JrLgorLQkJICovCistCQlwdHJfcmluZ19jbGVhbnVwKCZxLT5yaW5nLCBOVUxMKTsKKy0JfQorLX0KKy0KKy1zdGF0aWMgaW50IHBmaWZvX2Zhc3RfY2hhbmdlX3R4X3F1ZXVlX2xlbihzdHJ1Y3QgUWRpc2MgKnNjaCwKKy0JCQkJCSAgdW5zaWduZWQgaW50IG5ld19sZW4pCisteworLQlzdHJ1Y3QgcGZpZm9fZmFzdF9wcml2ICpwcml2ID0gcWRpc2NfcHJpdihzY2gpOworLQlzdHJ1Y3Qgc2tiX2FycmF5ICpiYW5kc1tQRklGT19GQVNUX0JBTkRTXTsKKy0JaW50IHByaW87CistCistCWZvciAocHJpbyA9IDA7IHByaW8gPCBQRklGT19GQVNUX0JBTkRTOyBwcmlvKyspIHsKKy0JCXN0cnVjdCBza2JfYXJyYXkgKnEgPSBiYW5kMmxpc3QocHJpdiwgcHJpbyk7CistCistCQliYW5kc1twcmlvXSA9IHE7CistCX0KKy0KKy0JcmV0dXJuIHNrYl9hcnJheV9yZXNpemVfbXVsdGlwbGUoYmFuZHMsIFBGSUZPX0ZBU1RfQkFORFMsIG5ld19sZW4sCistCQkJCQkgR0ZQX0tFUk5FTCk7CistfQorLQorLXN0cnVjdCBRZGlzY19vcHMgcGZpZm9fZmFzdF9vcHMgX19yZWFkX21vc3RseSA9IHsKKy0JLmlkCQk9CSJwZmlmb19mYXN0IiwKKy0JLnByaXZfc2l6ZQk9CXNpemVvZihzdHJ1Y3QgcGZpZm9fZmFzdF9wcml2KSwKKy0JLmVucXVldWUJPQlwZmlmb19mYXN0X2VucXVldWUsCistCS5kZXF1ZXVlCT0JcGZpZm9fZmFzdF9kZXF1ZXVlLAorLQkucGVlawkJPQlwZmlmb19mYXN0X3BlZWssCistCS5pbml0CQk9CXBmaWZvX2Zhc3RfaW5pdCwKKy0JLmRlc3Ryb3kJPQlwZmlmb19mYXN0X2Rlc3Ryb3ksCistCS5yZXNldAkJPQlwZmlmb19mYXN0X3Jlc2V0LAorLQkuZHVtcAkJPQlwZmlmb19mYXN0X2R1bXAsCistCS5jaGFuZ2VfdHhfcXVldWVfbGVuID0gIHBmaWZvX2Zhc3RfY2hhbmdlX3R4X3F1ZXVlX2xlbiwKKy0JLm93bmVyCQk9CVRISVNfTU9EVUxFLAorLQkuc3RhdGljX2ZsYWdzCT0JVENRX0ZfTk9MT0NLIHwgVENRX0ZfQ1BVU1RBVFMsCistfTsKKy1FWFBPUlRfU1lNQk9MKHBmaWZvX2Zhc3Rfb3BzKTsKKy0KKyBzdHJ1Y3QgUWRpc2MgKnFkaXNjX2FsbG9jKHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZSwKKyAJCQkgIGNvbnN0IHN0cnVjdCBRZGlzY19vcHMgKm9wcywKKyAJCQkgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzcwMC1zd2NvbmZpZ19zd2l0Y2hfZHJpdmVycy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzcwMC1zd2NvbmZpZ19zd2l0Y2hfZHJpdmVycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzBhZDgxCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvaGFjay01LjQvNzAwLXN3Y29uZmlnX3N3aXRjaF9kcml2ZXJzLnBhdGNoCkBAIC0wLDAgKzEsMTM1IEBACitGcm9tIDM2ZTUxNjI5MDYxMWU2MTNhYTkyOTk2Y2I0MzM5NTYxNDUyNjk1YjQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CitEYXRlOiBGcmksIDcgSnVsIDIwMTcgMTc6MjQ6MjMgKzAyMDAKK1N1YmplY3Q6IG5ldDogc3djb25maWc6IGFkZHMgb3BlbndydCBzd2l0Y2ggbGF5ZXIKKworU2lnbmVkLW9mZi1ieTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorLS0tCisgZHJpdmVycy9uZXQvcGh5L0tjb25maWcgICB8IDgzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlICB8IDE1ICsrKysrKysrKworIGluY2x1ZGUvdWFwaS9saW51eC9LYnVpbGQgfCAgMSArCisgMyBmaWxlcyBjaGFuZ2VkLCA5OSBpbnNlcnRpb25zKCspCisKKy0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCisrKysgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZworQEAgLTI1MCw2ICsyNTAsODUgQEAgY29uZmlnIExFRF9UUklHR0VSX1BIWQorIAkJZm9yIGFueSBzcGVlZCBrbm93biB0byB0aGUgUEhZLgorIAorIAorK2NvbW1lbnQgIlN3aXRjaCBjb25maWd1cmF0aW9uIEFQSSArIGRyaXZlcnMiCisrCisrY29uZmlnIFNXQ09ORklHCisrCXRyaXN0YXRlICJTd2l0Y2ggY29uZmlndXJhdGlvbiBBUEkiCisrCS0tLWhlbHAtLS0KKysJICBTd2l0Y2ggY29uZmlndXJhdGlvbiBBUEkgdXNpbmcgbmV0bGluay4gVGhpcyBhbGxvd3MKKysJICB5b3UgdG8gY29uZmlndXJlIHRoZSBWTEFOIGZlYXR1cmVzIG9mIGNlcnRhaW4gc3dpdGNoZXMuCisrCisrY29uZmlnIFNXQ09ORklHX0xFRFMKKysJYm9vbCAiU3dpdGNoIExFRCB0cmlnZ2VyIHN1cHBvcnQiCisrCWRlcGVuZHMgb24gKFNXQ09ORklHICYmIExFRFNfVFJJR0dFUlMpCisrCisrY29uZmlnIEFETTY5OTZfUEhZCisrCXRyaXN0YXRlICJEcml2ZXIgZm9yIEFETTY5OTYgc3dpdGNoZXMiCisrCXNlbGVjdCBTV0NPTkZJRworKwktLS1oZWxwLS0tCisrCSAgQ3VycmVudGx5IHN1cHBvcnRzIHRoZSBBRE02OTk2RkMgYW5kIEFETTY5OTZNIHN3aXRjaGVzLgorKwkgIFN1cHBvcnQgZm9yIEZDIGlzIHZlcnkgbGltaXRlZC4KKysKKytjb25maWcgQVI4MjE2X1BIWQorKwl0cmlzdGF0ZSAiRHJpdmVyIGZvciBBdGhlcm9zIEFSODIxNiBzd2l0Y2hlcyIKKysJc2VsZWN0IEVUSEVSTkVUX1BBQ0tFVF9NQU5HTEUKKysJc2VsZWN0IFNXQ09ORklHCisrCisrY29uZmlnIEFSODIxNl9QSFlfTEVEUworKwlib29sICJBdGhlcm9zIEFSODIxNiBzd2l0Y2ggTEVEIHN1cHBvcnQiCisrCWRlcGVuZHMgb24gKEFSODIxNl9QSFkgJiYgTEVEU19DTEFTUykKKysKKytzb3VyY2UgImRyaXZlcnMvbmV0L3BoeS9iNTMvS2NvbmZpZyIKKysKKytjb25maWcgSVAxN1hYX1BIWQorKwl0cmlzdGF0ZSAiRHJpdmVyIGZvciBJQysgSVAxN3h4IHN3aXRjaGVzIgorKwlzZWxlY3QgU1dDT05GSUcKKysKKytjb25maWcgTVZTV0lUQ0hfUEhZCisrCXRyaXN0YXRlICJEcml2ZXIgZm9yIE1hcnZlbGwgODhFNjA2MCBzd2l0Y2hlcyIKKysJc2VsZWN0IEVUSEVSTkVUX1BBQ0tFVF9NQU5HTEUKKysKKytjb25maWcgUFNCNjk3MF9QSFkKKysJdHJpc3RhdGUgIkxhbnRpcSBYV0FZIFRhbnRvcyAoUFNCNjk3MCkgRXRoZXJuZXQgc3dpdGNoIgorKwlzZWxlY3QgU1dDT05GSUcKKysJc2VsZWN0IEVUSEVSTkVUX1BBQ0tFVF9NQU5HTEUKKysKKytjb25maWcgUlRMODMwNl9QSFkKKysJdHJpc3RhdGUgIkRyaXZlciBmb3IgUmVhbHRlayBSVEw4MzA2UyBzd2l0Y2hlcyIKKysJc2VsZWN0IFNXQ09ORklHCisrCisrY29uZmlnIFJUTDgzNjZfU01JCisrCXRyaXN0YXRlICJEcml2ZXIgZm9yIHRoZSBSVEw4MzY2IFNNSSBpbnRlcmZhY2UiCisrCWRlcGVuZHMgb24gR1BJT0xJQgorKwktLS1oZWxwLS0tCisrCSAgVGhpcyBtb2R1bGUgaW1wbGVtZW50cyB0aGUgU01JIGludGVyZmFjZSBwcm90b2NvbCB3aGljaCBpcyB1c2VkCisrCSAgYnkgc29tZSBSVEw4MzY2IGV0aGVybmV0IHN3aXRjaCBkZXZpY2VzIHZpYSB0aGUgZ2VuZXJpYyBHUElPIEFQSS4KKysKKytpZiBSVEw4MzY2X1NNSQorKworK2NvbmZpZyBSVEw4MzY2X1NNSV9ERUJVR19GUworKwlib29sICJSVEw4MzY2IFNNSSBpbnRlcmZhY2UgZGVidWdmcyBzdXBwb3J0IgorKyAgICAgICAgZGVwZW5kcyBvbiBERUJVR19GUworKyAgICAgICAgZGVmYXVsdCBuCisrCisrY29uZmlnIFJUTDgzNjZTX1BIWQorKwl0cmlzdGF0ZSAiRHJpdmVyIGZvciB0aGUgUmVhbHRlayBSVEw4MzY2UyBzd2l0Y2giCisrCXNlbGVjdCBTV0NPTkZJRworKworK2NvbmZpZyBSVEw4MzY2UkJfUEhZCisrCXRyaXN0YXRlICJEcml2ZXIgZm9yIHRoZSBSZWFsdGVrIFJUTDgzNjZSQiBzd2l0Y2giCisrCXNlbGVjdCBTV0NPTkZJRworKworK2NvbmZpZyBSVEw4MzY3X1BIWQorKwl0cmlzdGF0ZSAiRHJpdmVyIGZvciB0aGUgUmVhbHRlayBSVEw4MzY3Ui9NIHN3aXRjaGVzIgorKwlzZWxlY3QgU1dDT05GSUcKKysKKytjb25maWcgUlRMODM2N0JfUEhZCisrCXRyaXN0YXRlICJEcml2ZXIgZm90IHRoZSBSZWFsdGVrIFJUTDgzNjdSLVZCIHN3aXRjaCIKKysJc2VsZWN0IFNXQ09ORklHCisrCisrZW5kaWYgIyBSVEw4MzY2X1NNSQorKworIGNvbW1lbnQgIk1JSSBQSFkgZGV2aWNlIGRyaXZlcnMiCisgCisgY29uZmlnIFNGUAorLS0tIGEvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlCisrKysgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUKK0BAIC0yMiw2ICsyMiwyMCBAQCBsaWJwaHktJChDT05GSUdfTEVEX1RSSUdHRVJfUEhZKQkrPSBwaHlfCisgb2JqLSQoQ09ORklHX1BIWUxJTkspCQkrPSBwaHlsaW5rLm8KKyBvYmotJChDT05GSUdfUEhZTElCKQkJKz0gbGlicGh5Lm8KKyAKKytvYmotJChDT05GSUdfU1dDT05GSUcpCQkrPSBzd2NvbmZpZy5vCisrb2JqLSQoQ09ORklHX0FETTY5OTZfUEhZKQkrPSBhZG02OTk2Lm8KKytvYmotJChDT05GSUdfQVI4MjE2X1BIWSkJKz0gYXI4MjE2Lm8gYXI4MzI3Lm8KKytvYmotJChDT05GSUdfU1dDT05GSUdfQjUzKQkrPSBiNTMvCisrb2JqLSQoQ09ORklHX0lQMTdYWF9QSFkpCSs9IGlwMTd4eC5vCisrb2JqLSQoQ09ORklHX01WU1dJVENIX1BIWSkJKz0gbXZzd2l0Y2gubworK29iai0kKENPTkZJR19QU0I2OTcwX1BIWSkJKz0gcHNiNjk3MC5vCisrb2JqLSQoQ09ORklHX1JUTDgzMDZfUEhZKQkrPSBydGw4MzA2Lm8KKytvYmotJChDT05GSUdfUlRMODM2Nl9TTUkpCSs9IHJ0bDgzNjZfc21pLm8KKytvYmotJChDT05GSUdfUlRMODM2NlNfUEhZKQkrPSBydGw4MzY2cy5vCisrb2JqLSQoQ09ORklHX1JUTDgzNjZSQl9QSFkpCSs9IHJ0bDgzNjZyYi5vCisrb2JqLSQoQ09ORklHX1JUTDgzNjdfUEhZKQkrPSBydGw4MzY3Lm8KKytvYmotJChDT05GSUdfUlRMODM2N0JfUEhZKQkrPSBydGw4MzY3Yi5vCisrCisgb2JqLSQoQ09ORklHX01ESU9fQVNQRUVEKQkrPSBtZGlvLWFzcGVlZC5vCisgb2JqLSQoQ09ORklHX01ESU9fQkNNX0lQUk9DKQkrPSBtZGlvLWJjbS1pcHJvYy5vCisgb2JqLSQoQ09ORklHX01ESU9fQkNNX1VOSU1BQykJKz0gbWRpby1iY20tdW5pbWFjLm8KKy0tLSBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9iNTMuaAorKysrIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL2I1My5oCitAQCAtMjksNiArMjksOSBAQCBzdHJ1Y3QgYjUzX3BsYXRmb3JtX2RhdGEgeworIAl1MzIgY2hpcF9pZDsKKyAJdTE2IGVuYWJsZWRfcG9ydHM7CisgCisrCS8qIGFsbG93IHRvIHNwZWNpZnkgYW4gZXRoWCBhbGlhcyAqLworKwljb25zdCBjaGFyICphbGlhczsKKysKKyAJLyogb25seSB1c2VkIGJ5IE1NQVAnZCBkcml2ZXIgKi8KKyAJdW5zaWduZWQgYmlnX2VuZGlhbjoxOworIAl2b2lkIF9faW9tZW0gKnJlZ3M7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC83MDMtYWRkX3ZzYzg1MDRfc3VwcG9ydC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzcwMy1hZGRfdnNjODUwNF9zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYjZjYTYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC83MDMtYWRkX3ZzYzg1MDRfc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDU3IEBACitGcm9tOiBSb21hbiBLdXptaXRza2lpIDxkYW1leC5wcEBpY2xvdWQuY29tPgorRGF0ZTogVGh1LCAwNSBOb3YgMjAyMCAwMjowMDowMCArMDAwMAorU3ViamVjdDogW1BBVENIXSBuZXQ6IHBoeTogdml0ZXNzZTogYWRkIHZzYzg1MDQgc3VwcG9ydAorCitUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdnNjODUwNCBwaHkuCitUaGF0IHBoeSBpcyBjaGFuZ2VkIG93bmVyOgorIHZpdGVzc2UgLT4gbWljcm9zZW1pIC0+IG1pY3JvY2hpcAorU28gaXMgaXRzIGRyaXZlciBpbiBrZXJuZWwgd2FzIGNoYW5nZWQgYW5kIHJld3JpdHRlbi4KKwordGhlcmUgaXMgbm8gbmVlZCB0byB1cHN0cmVhbSB0aGlzIHBhdGNoLgordGhpcyB2c2M4NTA0IGlzIHN1cHBvcnRlZCBieSBuZXdlciBrZXJuZWxzIG91dCBvZiBib3guCitzdXBwb3J0IGNvdWxkIGJlIGVuYWJsZWQgYnkgQ09ORklHX01JQ1JPU0VNSV9QSFkuCisKK1Rlc3RlZC1ieTogSm9oYW5uZXMgS2ltbWVsIDxmZmZAYmFyZW1pbmltdW0uZXU+CitTaWduZWQtb2ZmLWJ5OiBSb21hbiBLdXptaXRza2lpIDxkYW1leC5wcEBpY2xvdWQuY29tPgorLS0tIGEvZHJpdmVycy9uZXQvcGh5L3ZpdGVzc2UuYworKysrIGIvZHJpdmVycy9uZXQvcGh5L3ZpdGVzc2UuYworQEAgLTYxLDYgKzYxLDcgQEAKKyAKKyAjZGVmaW5lIFBIWV9JRF9WU0M4MjM0CQkJMHgwMDBmYzYyMAorICNkZWZpbmUgUEhZX0lEX1ZTQzgyNDQJCQkweDAwMGZjNmMwCisrI2RlZmluZSBQSFlfSURfVlNDODUwNAkJCTB4MDAwNzA0YzIKKyAjZGVmaW5lIFBIWV9JRF9WU0M4NTcyCQkJMHgwMDA3MDRkMAorICNkZWZpbmUgUEhZX0lEX1ZTQzg2MDEJCQkweDAwMDcwNDIwCisgI2RlZmluZSBQSFlfSURfVlNDNzM4NQkJCTB4MDAwNzA0NTAKK0BAIC0yOTIsNiArMjkzLDcgQEAgc3RhdGljIGludCB2c2M4Mnh4X2NvbmZpZ19pbnRyKHN0cnVjdCBwaAorIAkJZXJyID0gcGh5X3dyaXRlKHBoeWRldiwgTUlJX1ZTQzgyNDRfSU1BU0ssCisgCQkJKHBoeWRldi0+ZHJ2LT5waHlfaWQgPT0gUEhZX0lEX1ZTQzgyMzQgfHwKKyAJCQkgcGh5ZGV2LT5kcnYtPnBoeV9pZCA9PSBQSFlfSURfVlNDODI0NCB8fAorKwkJCSBwaHlkZXYtPmRydi0+cGh5X2lkID09IFBIWV9JRF9WU0M4NTA0IHx8CisgCQkJIHBoeWRldi0+ZHJ2LT5waHlfaWQgPT0gUEhZX0lEX1ZTQzg1NzIgfHwKKyAJCQkgcGh5ZGV2LT5kcnYtPnBoeV9pZCA9PSBQSFlfSURfVlNDODYwMSkgPworIAkJCQlNSUlfVlNDODI0NF9JTUFTS19NQVNLIDoKK0BAIC00MDIsNiArNDA0LDE1IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciB2c2M4Mnh4X2RyaXZlclsKKyAJLmFja19pbnRlcnJ1cHQJPSAmdnNjODI0eF9hY2tfaW50ZXJydXB0LAorIAkuY29uZmlnX2ludHIJPSAmdnNjODJ4eF9jb25maWdfaW50ciwKKyB9LCB7CisrCS5waHlfaWQgICAgICAgICA9IFBIWV9JRF9WU0M4NTA0LAorKwkubmFtZSAgICAgICAgICAgPSAiVml0ZXNzZSBWU0M4NTA0IiwKKysJLnBoeV9pZF9tYXNrICAgID0gMHgwMDBmZmZmMCwKKysJLyogUEhZX0dCSVRfRkVBVFVSRVMgKi8KKysJLmNvbmZpZ19pbml0ICAgID0gJnZzYzgyNHhfY29uZmlnX2luaXQsCisrCS5jb25maWdfYW5lZyAgICA9ICZ2c2M4Mng0X2NvbmZpZ19hbmVnLAorKwkuYWNrX2ludGVycnVwdCAgPSAmdnNjODI0eF9hY2tfaW50ZXJydXB0LAorKwkuY29uZmlnX2ludHIgICAgPSAmdnNjODJ4eF9jb25maWdfaW50ciwKKyt9LCB7CisgCS5waHlfaWQgICAgICAgICA9IFBIWV9JRF9WU0M4NTcyLAorIAkubmFtZSAgICAgICAgICAgPSAiVml0ZXNzZSBWU0M4NTcyIiwKKyAJLnBoeV9pZF9tYXNrICAgID0gMHgwMDBmZmZmMCwKK0BAIC00ODgsNiArNDk5LDcgQEAgbW9kdWxlX3BoeV9kcml2ZXIodnNjODJ4eF9kcml2ZXIpOworIHN0YXRpYyBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgdml0ZXNzZV90YmxbXSA9IHsKKyAJeyBQSFlfSURfVlNDODIzNCwgMHgwMDBmZmZmMCB9LAorIAl7IFBIWV9JRF9WU0M4MjQ0LCAweDAwMGZmZmMwIH0sCisrCXsgUEhZX0lEX1ZTQzg1MDQsIDB4MDAwZmZmZjAgfSwKKyAJeyBQSFlfSURfVlNDODU3MiwgMHgwMDBmZmZmMCB9LAorIAl7IFBIWV9JRF9WU0M3Mzg1LCAweDAwMGZmZmYwIH0sCisgCXsgUEhZX0lEX1ZTQzczODgsIDB4MDAwZmZmZjAgfSwKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzcxMC1uZXQtZHNhLW12ODhlNnh4eC1kZWZhdWx0LVZJRC0xLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvaGFjay01LjQvNzEwLW5ldC1kc2EtbXY4OGU2eHh4LWRlZmF1bHQtVklELTEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRjNWFjNgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzcxMC1uZXQtZHNhLW12ODhlNnh4eC1kZWZhdWx0LVZJRC0xLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKKy0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jCisrKysgYi9kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYworQEAgLTE5MzAsNiArMTkzMCw3IEBAIHN0YXRpYyBpbnQgbXY4OGU2eHh4X3BvcnRfZmRiX2FkZChzdHJ1Y3QKKyAJc3RydWN0IG12ODhlNnh4eF9jaGlwICpjaGlwID0gZHMtPnByaXY7CisgCWludCBlcnI7CisgCisrCXZpZCA9IHZpZCA/IDogMTsKKyAJbXY4OGU2eHh4X3JlZ19sb2NrKGNoaXApOworIAllcnIgPSBtdjg4ZTZ4eHhfcG9ydF9kYl9sb2FkX3B1cmdlKGNoaXAsIHBvcnQsIGFkZHIsIHZpZCwKKyAJCQkJCSAgIE1WODhFNlhYWF9HMV9BVFVfREFUQV9TVEFURV9VQ19TVEFUSUMpOworQEAgLTE5NDQsNiArMTk0NSw3IEBAIHN0YXRpYyBpbnQgbXY4OGU2eHh4X3BvcnRfZmRiX2RlbChzdHJ1Y3QKKyAJc3RydWN0IG12ODhlNnh4eF9jaGlwICpjaGlwID0gZHMtPnByaXY7CisgCWludCBlcnI7CisgCisrCXZpZCA9IHZpZCA/IDogMTsKKyAJbXY4OGU2eHh4X3JlZ19sb2NrKGNoaXApOworIAllcnIgPSBtdjg4ZTZ4eHhfcG9ydF9kYl9sb2FkX3B1cmdlKGNoaXAsIHBvcnQsIGFkZHIsIHZpZCwgMCk7CisgCW12ODhlNnh4eF9yZWdfdW5sb2NrKGNoaXApOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvaGFjay01LjQvNzExLW5ldC1kc2EtbXY4OGU2eHh4LWRpc2FibGUtQVRVLXZpb2xhdGlvbi5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzcxMS1uZXQtZHNhLW12ODhlNnh4eC1kaXNhYmxlLUFUVS12aW9sYXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRhMzg4YwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzcxMS1uZXQtZHNhLW12ODhlNnh4eC1kaXNhYmxlLUFUVS12aW9sYXRpb24ucGF0Y2gKQEAgLTAsMCArMSwxMiBAQAorLS0tIGEvZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMKKysrKyBiL2RyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jCitAQCAtMjQ5Miw2ICsyNDkyLDkgQEAgc3RhdGljIGludCBtdjg4ZTZ4eHhfc2V0dXBfcG9ydChzdHJ1Y3QgbQorIAlpZiAoZHNhX2lzX2NwdV9wb3J0KGRzLCBwb3J0KSkKKyAJCXJlZyA9IDA7CisgCisrCS8qIERpc2FibGUgQVRVIG1lbWJlciB2aW9sYXRpb24gaW50ZXJydXB0ICovCisrCXJlZyB8PSBNVjg4RTZYWFhfUE9SVF9BU1NPQ19WRUNUT1JfSUdOT1JFX1dST05HOworKworIAllcnIgPSBtdjg4ZTZ4eHhfcG9ydF93cml0ZShjaGlwLCBwb3J0LCBNVjg4RTZYWFhfUE9SVF9BU1NPQ19WRUNUT1IsCisgCQkJCSAgIHJlZyk7CisgCWlmIChlcnIpCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC83MjEtcGh5X3BhY2tldHMucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC83MjEtcGh5X3BhY2tldHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlmZjhlYQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzcyMS1waHlfcGFja2V0cy5wYXRjaApAQCAtMCwwICsxLDE3NiBAQAorRnJvbSBmZmUzODc3NDBiYmU4OGRkODhiYmUwNGQ2Mzc1OTAyNzA4MDAzZDZlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorRGF0ZTogRnJpLCA3IEp1bCAyMDE3IDE3OjI1OjAwICswMjAwCitTdWJqZWN0OiBuZXQ6IGFkZCBwYWNrZXQgbWFuZ2VsaW5nIHBhdGNoCisKK1NpZ25lZC1vZmYtYnk6IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KKy0tLQorIGluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggfCAxMSArKysrKysrKysrKworIGluY2x1ZGUvbGludXgvc2tidWZmLmggICAgfCAxNCArKysrLS0tLS0tLS0tLQorIG5ldC9LY29uZmlnICAgICAgICAgICAgICAgfCAgNiArKysrKysKKyBuZXQvY29yZS9kZXYuYyAgICAgICAgICAgIHwgMTggKysrKysrKysrKysrKystLS0tCisgbmV0L2NvcmUvc2tidWZmLmMgICAgICAgICB8IDE3ICsrKysrKysrKysrKysrKysrCisgbmV0L2V0aGVybmV0L2V0aC5jICAgICAgICB8ICA2ICsrKysrKworIDYgZmlsZXMgY2hhbmdlZCwgNTggaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCisKKy0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKKysrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKK0BAIC0xNTQwLDYgKzE1NDAsNyBAQCBlbnVtIG5ldGRldl9wcml2X2ZsYWdzIHsKKyAJSUZGX0ZBSUxPVkVSX1NMQVZFCQk9IDE8PDI4LAorIAlJRkZfTDNNREVWX1JYX0hBTkRMRVIJCT0gMTw8MjksCisgCUlGRl9MSVZFX1JFTkFNRV9PSwkJPSAxPDwzMCwKKysJSUZGX05PX0lQX0FMSUdOCQkJPSAxPDwzMSwKKyB9OworIAorICNkZWZpbmUgSUZGXzgwMl8xUV9WTEFOCQkJSUZGXzgwMl8xUV9WTEFOCitAQCAtMTU3Miw2ICsxNTczLDcgQEAgZW51bSBuZXRkZXZfcHJpdl9mbGFncyB7CisgI2RlZmluZSBJRkZfRkFJTE9WRVJfU0xBVkUJCUlGRl9GQUlMT1ZFUl9TTEFWRQorICNkZWZpbmUgSUZGX0wzTURFVl9SWF9IQU5ETEVSCQlJRkZfTDNNREVWX1JYX0hBTkRMRVIKKyAjZGVmaW5lIElGRl9MSVZFX1JFTkFNRV9PSwkJSUZGX0xJVkVfUkVOQU1FX09LCisrI2RlZmluZSBJRkZfTk9fSVBfQUxJR04JCQlJRkZfTk9fSVBfQUxJR04KKyAKKyAvKiBTcGVjaWZpZXMgdGhlIHR5cGUgb2YgdGhlIHN0cnVjdCBuZXRfZGV2aWNlOjptbF9wcml2IHBvaW50ZXIgKi8KKyBlbnVtIG5ldGRldl9tbF9wcml2X3R5cGUgeworQEAgLTE4ODIsNiArMTg4NCwxMSBAQCBzdHJ1Y3QgbmV0X2RldmljZSB7CisgCWNvbnN0IHN0cnVjdCB0bHNkZXZfb3BzICp0bHNkZXZfb3BzOworICNlbmRpZgorIAorKyNpZmRlZiBDT05GSUdfRVRIRVJORVRfUEFDS0VUX01BTkdMRQorKwl2b2lkICgqZXRoX21hbmdsZV9yeCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisrCXN0cnVjdCBza19idWZmICooKmV0aF9tYW5nbGVfdHgpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOworKyNlbmRpZgorKworIAljb25zdCBzdHJ1Y3QgaGVhZGVyX29wcyAqaGVhZGVyX29wczsKKyAKKyAJdW5zaWduZWQgaW50CQlmbGFnczsKK0BAIC0xOTY0LDYgKzE5NzEsMTAgQEAgc3RydWN0IG5ldF9kZXZpY2UgeworIAlzdHJ1Y3QgbXBsc19kZXYgX19yY3UJKm1wbHNfcHRyOworICNlbmRpZgorIAorKyNpZmRlZiBDT05GSUdfRVRIRVJORVRfUEFDS0VUX01BTkdMRQorKwl2b2lkCQkJKnBoeV9wdHI7IC8qIFBIWSBkZXZpY2Ugc3BlY2lmaWMgZGF0YSAqLworKyNlbmRpZgorKworIC8qCisgICogQ2FjaGUgbGluZXMgbW9zdGx5IHVzZWQgb24gcmVjZWl2ZSBwYXRoIChpbmNsdWRpbmcgZXRoX3R5cGVfdHJhbnMoKSkKKyAgKi8KKy0tLSBhL2luY2x1ZGUvbGludXgvc2tidWZmLmgKKysrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKK0BAIC0yNjg0LDYgKzI2ODQsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgcHNrYl90cmltKHN0cnVjdCBza19idQorIAlyZXR1cm4gKGxlbiA8IHNrYi0+bGVuKSA/IF9fcHNrYl90cmltKHNrYiwgbGVuKSA6IDA7CisgfQorIAorK2V4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqX19uZXRkZXZfYWxsb2Nfc2tiX2lwX2FsaWduKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisrCQl1bnNpZ25lZCBpbnQgbGVuZ3RoLCBnZnBfdCBnZnApOworKworKworIC8qKgorICAqCXBza2JfdHJpbV91bmlxdWUgLSByZW1vdmUgZW5kIGZyb20gYSBwYWdlZCB1bmlxdWUgKG5vdCBjbG9uZWQpIGJ1ZmZlcgorICAqCUBza2I6IGJ1ZmZlciB0byBhbHRlcgorQEAgLTI4MTUsMTYgKzI4MTksNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpkZXZfYWxsb2NfCisgfQorIAorIAorLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKl9fbmV0ZGV2X2FsbG9jX3NrYl9pcF9hbGlnbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorLQkJdW5zaWduZWQgaW50IGxlbmd0aCwgZ2ZwX3QgZ2ZwKQorLXsKKy0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IF9fbmV0ZGV2X2FsbG9jX3NrYihkZXYsIGxlbmd0aCArIE5FVF9JUF9BTElHTiwgZ2ZwKTsKKy0KKy0JaWYgKE5FVF9JUF9BTElHTiAmJiBza2IpCistCQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7CistCXJldHVybiBza2I7CistfQorLQorIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKm5ldGRldl9hbGxvY19za2JfaXBfYWxpZ24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAJCXVuc2lnbmVkIGludCBsZW5ndGgpCisgeworLS0tIGEvbmV0L0tjb25maWcKKysrKyBiL25ldC9LY29uZmlnCitAQCAtMjYsNiArMjYsMTIgQEAgbWVudWNvbmZpZyBORVQKKyAKKyBpZiBORVQKKyAKKytjb25maWcgRVRIRVJORVRfUEFDS0VUX01BTkdMRQorKwlib29sCisrCWhlbHAKKysJICBUaGlzIG9wdGlvbiBjYW4gYmUgc2VsZWN0ZWQgYnkgcGh5IGRyaXZlcnMgdGhhdCBuZWVkIHRvIG1hbmdsZQorKwkgIHBhY2tldHMgZ29pbmcgaW4gb3Igb3V0IG9mIGFuIGV0aGVybmV0IGRldmljZS4KKysKKyBjb25maWcgV0FOVF9DT01QQVRfTkVUTElOS19NRVNTQUdFUworIAlib29sCisgCWhlbHAKKy0tLSBhL25ldC9jb3JlL2Rldi5jCisrKysgYi9uZXQvY29yZS9kZXYuYworQEAgLTMyMjEsMTAgKzMyMjEsMjAgQEAgc3RhdGljIGludCB4bWl0X29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorIAlpZiAoZGV2X25pdF9hY3RpdmUoZGV2KSkKKyAJCWRldl9xdWV1ZV94bWl0X25pdChza2IsIGRldik7CisgCistCWxlbiA9IHNrYi0+bGVuOworLQl0cmFjZV9uZXRfZGV2X3N0YXJ0X3htaXQoc2tiLCBkZXYpOworLQlyYyA9IG5ldGRldl9zdGFydF94bWl0KHNrYiwgZGV2LCB0eHEsIG1vcmUpOworLQl0cmFjZV9uZXRfZGV2X3htaXQoc2tiLCByYywgZGV2LCBsZW4pOworKyNpZmRlZiBDT05GSUdfRVRIRVJORVRfUEFDS0VUX01BTkdMRQorKwlpZiAoIWRldi0+ZXRoX21hbmdsZV90eCB8fAorKwkgICAgKHNrYiA9IGRldi0+ZXRoX21hbmdsZV90eChkZXYsIHNrYikpICE9IE5VTEwpCisrI2Vsc2UKKysJaWYgKDEpCisrI2VuZGlmCisrCXsKKysJCWxlbiA9IHNrYi0+bGVuOworKwkJdHJhY2VfbmV0X2Rldl9zdGFydF94bWl0KHNrYiwgZGV2KTsKKysJCXJjID0gbmV0ZGV2X3N0YXJ0X3htaXQoc2tiLCBkZXYsIHR4cSwgbW9yZSk7CisrCQl0cmFjZV9uZXRfZGV2X3htaXQoc2tiLCByYywgZGV2LCBsZW4pOworKwl9IGVsc2UgeworKwkJcmMgPSBORVRERVZfVFhfT0s7CisrCX0KKyAKKyAJcmV0dXJuIHJjOworIH0KKy0tLSBhL25ldC9jb3JlL3NrYnVmZi5jCisrKysgYi9uZXQvY29yZS9za2J1ZmYuYworQEAgLTYwLDYgKzYwLDcgQEAKKyAjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KKyAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgorICNpbmNsdWRlIDxsaW51eC9tcGxzLmg+CisrI2luY2x1ZGUgPGxpbnV4L2lmLmg+CisgCisgI2luY2x1ZGUgPG5ldC9wcm90b2NvbC5oPgorICNpbmNsdWRlIDxuZXQvZHN0Lmg+CitAQCAtNTQ5LDYgKzU1MCwyMiBAQCBza2JfZmFpbDoKKyB9CisgRVhQT1JUX1NZTUJPTChfX25hcGlfYWxsb2Nfc2tiKTsKKyAKKytzdHJ1Y3Qgc2tfYnVmZiAqX19uZXRkZXZfYWxsb2Nfc2tiX2lwX2FsaWduKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisrCQl1bnNpZ25lZCBpbnQgbGVuZ3RoLCBnZnBfdCBnZnApCisreworKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gX19uZXRkZXZfYWxsb2Nfc2tiKGRldiwgbGVuZ3RoICsgTkVUX0lQX0FMSUdOLCBnZnApOworKworKyNpZmRlZiBDT05GSUdfRVRIRVJORVRfUEFDS0VUX01BTkdMRQorKwlpZiAoZGV2ICYmIChkZXYtPnByaXZfZmxhZ3MgJiBJRkZfTk9fSVBfQUxJR04pKQorKwkJcmV0dXJuIHNrYjsKKysjZW5kaWYKKysKKysJaWYgKE5FVF9JUF9BTElHTiAmJiBza2IpCisrCQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7CisrCXJldHVybiBza2I7CisrfQorK0VYUE9SVF9TWU1CT0woX19uZXRkZXZfYWxsb2Nfc2tiX2lwX2FsaWduKTsKKysKKyB2b2lkIHNrYl9hZGRfcnhfZnJhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaSwgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvZmYsCisgCQkgICAgIGludCBzaXplLCB1bnNpZ25lZCBpbnQgdHJ1ZXNpemUpCisgeworLS0tIGEvbmV0L2V0aGVybmV0L2V0aC5jCisrKysgYi9uZXQvZXRoZXJuZXQvZXRoLmMKK0BAIC0xNzEsNiArMTcxLDEyIEBAIF9fYmUxNiBldGhfdHlwZV90cmFucyhzdHJ1Y3Qgc2tfYnVmZiAqc2sKKyAJY29uc3Qgc3RydWN0IGV0aGhkciAqZXRoOworIAorIAlza2ItPmRldiA9IGRldjsKKysKKysjaWZkZWYgQ09ORklHX0VUSEVSTkVUX1BBQ0tFVF9NQU5HTEUKKysJaWYgKGRldi0+ZXRoX21hbmdsZV9yeCkKKysJCWRldi0+ZXRoX21hbmdsZV9yeChkZXYsIHNrYik7CisrI2VuZGlmCisrCisgCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CisgCisgCWV0aCA9IChzdHJ1Y3QgZXRoaGRyICopc2tiLT5kYXRhOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvaGFjay01LjQvNzczLWJnbWFjLWFkZC1zcmFiLXN3aXRjaC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40Lzc3My1iZ21hYy1hZGQtc3JhYi1zd2l0Y2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODllMGRmNAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40Lzc3My1iZ21hYy1hZGQtc3JhYi1zd2l0Y2gucGF0Y2gKQEAgLTAsMCArMSw5OCBAQAorRnJvbSAzY2IyNDA1MzNhYjc4Nzg5OWRjN2YxN2FhN2Q2YzViNDgxMGUyZTU4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSGF1a2UgTWVocnRlbnMgPGhhdWtlQGhhdWtlLW0uZGU+CitEYXRlOiBGcmksIDcgSnVsIDIwMTcgMTc6MjY6MDEgKzAyMDAKK1N1YmplY3Q6IGJjbTUzeHg6IGJnbWFjOiB1c2Ugc3JhYiBzd2l0Y2ggZHJpdmVyCisKK3VzZSB0aGUgc3JhYiBzd2l0Y2ggZHJpdmVyIG9uIHRoZXNlIFNvQ3MuCisKK1NpZ25lZC1vZmYtYnk6IEhhdWtlIE1laHJ0ZW5zIDxoYXVrZUBoYXVrZS1tLmRlPgorLS0tCisgZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMtYmNtYS5jIHwgIDEgKworIGRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmMgICAgICB8IDI0ICsrKysrKysrKysrKysrKysrKysrKysrKworIGRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JnbWFjLmggICAgICB8ICA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDI5IGluc2VydGlvbnMoKykKKworLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYmdtYWMtYmNtYS5jCisrKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy1iY21hLmMKK0BAIC0yNjgsNiArMjY4LDcgQEAgc3RhdGljIGludCBiZ21hY19wcm9iZShzdHJ1Y3QgYmNtYV9kZXZpYworIAkJYmdtYWMtPmZlYXR1cmVfZmxhZ3MgfD0gQkdNQUNfRkVBVF9DTEtDVExTVDsKKyAJCWJnbWFjLT5mZWF0dXJlX2ZsYWdzIHw9IEJHTUFDX0ZFQVRfTk9fUkVTRVQ7CisgCQliZ21hYy0+ZmVhdHVyZV9mbGFncyB8PSBCR01BQ19GRUFUX0ZPUkNFX1NQRUVEXzI1MDA7CisrCQliZ21hYy0+ZmVhdHVyZV9mbGFncyB8PSBCR01BQ19GRUFUX1NSQUI7CisgCQlicmVhazsKKyAJZGVmYXVsdDoKKyAJCWJnbWFjLT5mZWF0dXJlX2ZsYWdzIHw9IEJHTUFDX0ZFQVRfQ0xLQ1RMU1Q7CistLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy5jCisrKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy5jCitAQCAtMTIsNiArMTIsNyBAQAorICNpbmNsdWRlIDxsaW51eC9iY21hL2JjbWEuaD4KKyAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisrI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvYjUzLmg+CisgI2luY2x1ZGUgPGxpbnV4L2JjbTQ3eHhfbnZyYW0uaD4KKyAjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisgI2luY2x1ZGUgPGxpbnV4L3BoeV9maXhlZC5oPgorQEAgLTE0MDcsNiArMTQwOCwxNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGJnbWFjX2V0CisgCS5zZXRfbGlua19rc2V0dGluZ3MgICAgID0gcGh5X2V0aHRvb2xfc2V0X2xpbmtfa3NldHRpbmdzLAorIH07CisgCisrc3RhdGljIHN0cnVjdCBiNTNfcGxhdGZvcm1fZGF0YSBiZ21hY19iNTNfcGRhdGEgPSB7CisrfTsKKysKKytzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZ21hY19iNTNfZGV2ID0geworKwkubmFtZQkJPSAiYjUzLXNyYWItc3dpdGNoIiwKKysJLmlkCQk9IC0xLAorKwkuZGV2CQk9IHsKKysJCS5wbGF0Zm9ybV9kYXRhID0gJmJnbWFjX2I1M19wZGF0YSwKKysJfSwKKyt9OworKworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIE1JSQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK0BAIC0xNTM4LDYgKzE1NTAsMTQgQEAgaW50IGJnbWFjX2VuZXRfcHJvYmUoc3RydWN0IGJnbWFjICpiZ21hYworIAluZXRfZGV2LT5od19mZWF0dXJlcyA9IG5ldF9kZXYtPmZlYXR1cmVzOworIAluZXRfZGV2LT52bGFuX2ZlYXR1cmVzID0gbmV0X2Rldi0+ZmVhdHVyZXM7CisgCisrCWlmICgoYmdtYWMtPmZlYXR1cmVfZmxhZ3MgJiBCR01BQ19GRUFUX1NSQUIpICYmICFiZ21hY19iNTNfcGRhdGEucmVncykgeworKwkJYmdtYWNfYjUzX3BkYXRhLnJlZ3MgPSBpb3JlbWFwX25vY2FjaGUoMHgxODAwNzAwMCwgMHgxMDAwKTsKKysKKysJCWVyciA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYmdtYWNfYjUzX2Rldik7CisrCQlpZiAoIWVycikKKysJCQliZ21hYy0+YjUzX2RldmljZSA9ICZiZ21hY19iNTNfZGV2OworKwl9CisrCisgCWVyciA9IHJlZ2lzdGVyX25ldGRldihiZ21hYy0+bmV0X2Rldik7CisgCWlmIChlcnIpIHsKKyAJCWRldl9lcnIoYmdtYWMtPmRldiwgIkNhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlXG4iKTsKK0BAIC0xNTYwLDYgKzE1ODAsMTAgQEAgRVhQT1JUX1NZTUJPTF9HUEwoYmdtYWNfZW5ldF9wcm9iZSk7CisgCisgdm9pZCBiZ21hY19lbmV0X3JlbW92ZShzdHJ1Y3QgYmdtYWMgKmJnbWFjKQorIHsKKysJaWYgKGJnbWFjLT5iNTNfZGV2aWNlKQorKwkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJmJnbWFjX2I1M19kZXYpOworKwliZ21hYy0+YjUzX2RldmljZSA9IE5VTEw7CisrCisgCXVucmVnaXN0ZXJfbmV0ZGV2KGJnbWFjLT5uZXRfZGV2KTsKKyAJcGh5X2Rpc2Nvbm5lY3QoYmdtYWMtPm5ldF9kZXYtPnBoeWRldik7CisgCW5ldGlmX25hcGlfZGVsKCZiZ21hYy0+bmFwaSk7CistLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy5oCisrKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9iZ21hYy5oCitAQCAtNDI3LDYgKzQyNyw3IEBACisgI2RlZmluZSBCR01BQ19GRUFUX0NDNF9JRl9TV19UWVBFX1JHTUlJCUJJVCgxOCkKKyAjZGVmaW5lIEJHTUFDX0ZFQVRfQ0M3X0lGX1RZUEVfUkdNSUkJQklUKDE5KQorICNkZWZpbmUgQkdNQUNfRkVBVF9JRE1fTUFTSwkJQklUKDIwKQorKyNkZWZpbmUgQkdNQUNfRkVBVF9TUkFCCQkJQklUKDIxKQorIAorIHN0cnVjdCBiZ21hY19zbG90X2luZm8geworIAl1bmlvbiB7CitAQCAtNTMyLDYgKzUzMyw5IEBAIHN0cnVjdCBiZ21hYyB7CisgCXZvaWQgKCpjbW5fbWFza3NldDMyKShzdHJ1Y3QgYmdtYWMgKmJnbWFjLCB1MTYgb2Zmc2V0LCB1MzIgbWFzaywKKyAJCQkgICAgICB1MzIgc2V0KTsKKyAJaW50ICgqcGh5X2Nvbm5lY3QpKHN0cnVjdCBiZ21hYyAqYmdtYWMpOworKworKwkvKiBwbGF0Zm9ybSBkZXZpY2UgZm9yIGFzc29jaWF0ZWQgc3dpdGNoICovCisrCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmI1M19kZXZpY2U7CisgfTsKKyAKKyBzdHJ1Y3QgYmdtYWMgKmJnbWFjX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC85MDEtZGVibG9hdF9zb2NrX2RpYWcucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC85MDEtZGVibG9hdF9zb2NrX2RpYWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFiYjY3MgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzkwMS1kZWJsb2F0X3NvY2tfZGlhZy5wYXRjaApAQCAtMCwwICsxLDE0NSBAQAorRnJvbSAzYjYxMTVkNmI1N2EyNjNiZGM4YzliMWRmMjczYmQ0YTc5NTVlZWFkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorRGF0ZTogU2F0LCA4IEp1bCAyMDE3IDA4OjE2OjMxICswMjAwCitTdWJqZWN0OiBkZWJsb2F0OiBhZGQgc29tZSBkZWJsb2F0IHBhdGNoZXMsIHN0cmlwIGRvd24gcHJvY2ZzIGFuZCBtYWtlIE9fRElSRUNUIHN1cHBvcnQgb3B0aW9uYWwsIHNhdmVzIH4xNUsgYWZ0ZXIgbHptYSBvbiBNSVBTCisKK1NpZ25lZC1vZmYtYnk6IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KKy0tLQorIG5ldC9LY29uZmlnICAgICAgICAgfCAzICsrKworIG5ldC9jb3JlL01ha2VmaWxlICAgfCAzICsrLQorIG5ldC9jb3JlL3NvY2suYyAgICAgfCAyICsrCisgbmV0L2lwdjQvS2NvbmZpZyAgICB8IDEgKworIG5ldC9uZXRsaW5rL0tjb25maWcgfCAxICsKKyBuZXQvcGFja2V0L0tjb25maWcgIHwgMSArCisgbmV0L3VuaXgvS2NvbmZpZyAgICB8IDEgKworIDcgZmlsZXMgY2hhbmdlZCwgMTEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCistLS0gYS9uZXQvS2NvbmZpZworKysrIGIvbmV0L0tjb25maWcKK0BAIC0xMDMsNiArMTAzLDkgQEAgc291cmNlICJuZXQvbmV0bGFiZWwvS2NvbmZpZyIKKyAKKyBlbmRpZiAjIGlmIElORVQKKyAKKytjb25maWcgU09DS19ESUFHCisrCWJvb2wKKysKKyBjb25maWcgTkVUV09SS19TRUNNQVJLCisgCWJvb2wgIlNlY3VyaXR5IE1hcmtpbmciCisgCWhlbHAKKy0tLSBhL25ldC9jb3JlL01ha2VmaWxlCisrKysgYi9uZXQvY29yZS9NYWtlZmlsZQorQEAgLTEwLDkgKzEwLDEwIEBAIG9iai0kKENPTkZJR19TWVNDVEwpICs9IHN5c2N0bF9uZXRfY29yZS4KKyAKKyBvYmoteQkJICAgICArPSBkZXYubyBldGh0b29sLm8gZGV2X2FkZHJfbGlzdHMubyBkc3QubyBuZXRldmVudC5vIFwKKyAJCQluZWlnaGJvdXIubyBydG5ldGxpbmsubyB1dGlscy5vIGxpbmtfd2F0Y2gubyBmaWx0ZXIubyBcCistCQkJc29ja19kaWFnLm8gZGV2X2lvY3RsLm8gdHNvLm8gc29ja19yZXVzZXBvcnQubyBcCisrIAkJCWRldl9pb2N0bC5vIHRzby5vIHNvY2tfcmV1c2Vwb3J0Lm8gXAorIAkJCWZpYl9ub3RpZmllci5vIHhkcC5vIGZsb3dfb2ZmbG9hZC5vCisgCisrb2JqLSQoQ09ORklHX1NPQ0tfRElBRykgKz0gc29ja19kaWFnLm8KKyBvYmoteSArPSBuZXQtc3lzZnMubworIG9iai0kKENPTkZJR19QQUdFX1BPT0wpICs9IHBhZ2VfcG9vbC5vCisgb2JqLSQoQ09ORklHX1BST0NfRlMpICs9IG5ldC1wcm9jZnMubworLS0tIGEvbmV0L2NvcmUvc29jay5jCisrKysgYi9uZXQvY29yZS9zb2NrLmMKK0BAIC0xNDAsNiArMTQwLDcgQEAKKyAKKyBzdGF0aWMgREVGSU5FX01VVEVYKHByb3RvX2xpc3RfbXV0ZXgpOworIHN0YXRpYyBMSVNUX0hFQUQocHJvdG9fbGlzdCk7Cisrc3RhdGljIGF0b21pYzY0X3QgY29va2llX2dlbjsKKyAKKyBzdGF0aWMgdm9pZCBzb2NrX2ludXNlX2FkZChzdHJ1Y3QgbmV0ICpuZXQsIGludCB2YWwpOworIAorQEAgLTUzOSw2ICs1NDAsMTggQEAgZGlzY2FyZF9hbmRfcmVsc2U6CisgfQorIEVYUE9SVF9TWU1CT0woX19za19yZWNlaXZlX3NrYik7CisgCisrdTY0IHNvY2tfZ2VuX2Nvb2tpZShzdHJ1Y3Qgc29jayAqc2spCisreworKwl3aGlsZSAoMSkgeworKwkJdTY0IHJlcyA9IGF0b21pYzY0X3JlYWQoJnNrLT5za19jb29raWUpOworKworKwkJaWYgKHJlcykKKysJCQlyZXR1cm4gcmVzOworKwkJcmVzID0gYXRvbWljNjRfaW5jX3JldHVybigmY29va2llX2dlbik7CisrCQlhdG9taWM2NF9jbXB4Y2hnKCZzay0+c2tfY29va2llLCAwLCByZXMpOworKwl9CisrfQorKworIHN0cnVjdCBkc3RfZW50cnkgKl9fc2tfZHN0X2NoZWNrKHN0cnVjdCBzb2NrICpzaywgdTMyIGNvb2tpZSkKKyB7CisgCXN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IF9fc2tfZHN0X2dldChzayk7CitAQCAtMTc2MCw5ICsxNzczLDExIEBAIHN0YXRpYyB2b2lkIF9fc2tfZnJlZShzdHJ1Y3Qgc29jayAqc2spCisgCWlmIChsaWtlbHkoc2stPnNrX25ldF9yZWZjbnQpKQorIAkJc29ja19pbnVzZV9hZGQoc29ja19uZXQoc2spLCAtMSk7CisgCisrI2lmZGVmIENPTkZJR19TT0NLX0RJQUcKKyAJaWYgKHVubGlrZWx5KHNrLT5za19uZXRfcmVmY250ICYmIHNvY2tfZGlhZ19oYXNfZGVzdHJveV9saXN0ZW5lcnMoc2spKSkKKyAJCXNvY2tfZGlhZ19icm9hZGNhc3RfZGVzdHJveShzayk7CisgCWVsc2UKKysjZW5kaWYKKyAJCXNrX2Rlc3RydWN0KHNrKTsKKyB9CisgCistLS0gYS9uZXQvY29yZS9zb2NrX2RpYWcuYworKysrIGIvbmV0L2NvcmUvc29ja19kaWFnLmMKK0BAIC0xOSwxOSArMTksNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNvY2tfZGlhZ19oYW5kbGVyICpzCisgc3RhdGljIGludCAoKmluZXRfcmN2X2NvbXBhdCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgpOworIHN0YXRpYyBERUZJTkVfTVVURVgoc29ja19kaWFnX3RhYmxlX211dGV4KTsKKyBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmJyb2FkY2FzdF93cTsKKy1zdGF0aWMgYXRvbWljNjRfdCBjb29raWVfZ2VuOworLQorLXU2NCBzb2NrX2dlbl9jb29raWUoc3RydWN0IHNvY2sgKnNrKQorLXsKKy0Jd2hpbGUgKDEpIHsKKy0JCXU2NCByZXMgPSBhdG9taWM2NF9yZWFkKCZzay0+c2tfY29va2llKTsKKy0KKy0JCWlmIChyZXMpCistCQkJcmV0dXJuIHJlczsKKy0JCXJlcyA9IGF0b21pYzY0X2luY19yZXR1cm4oJmNvb2tpZV9nZW4pOworLQkJYXRvbWljNjRfY21weGNoZygmc2stPnNrX2Nvb2tpZSwgMCwgcmVzKTsKKy0JfQorLX0KKyAKKyBpbnQgc29ja19kaWFnX2NoZWNrX2Nvb2tpZShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IF9fdTMyICpjb29raWUpCisgeworLS0tIGEvbmV0L2lwdjQvS2NvbmZpZworKysrIGIvbmV0L2lwdjQvS2NvbmZpZworQEAgLTQwMCw2ICs0MDAsNyBAQCBjb25maWcgSU5FVF9UVU5ORUwKKyAKKyBjb25maWcgSU5FVF9ESUFHCisgCXRyaXN0YXRlICJJTkVUOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2UiCisrCXNlbGVjdCBTT0NLX0RJQUcKKyAJZGVmYXVsdCB5CisgCS0tLWhlbHAtLS0KKyAJICBTdXBwb3J0IGZvciBJTkVUIChUQ1AsIERDQ1AsIGV0Yykgc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkKKy0tLSBhL25ldC9uZXRsaW5rL0tjb25maWcKKysrKyBiL25ldC9uZXRsaW5rL0tjb25maWcKK0BAIC01LDYgKzUsNyBAQAorIAorIGNvbmZpZyBORVRMSU5LX0RJQUcKKyAJdHJpc3RhdGUgIk5FVExJTks6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZSIKKysJc2VsZWN0IFNPQ0tfRElBRworIAlkZWZhdWx0IG4KKyAJLS0taGVscC0tLQorIAkgIFN1cHBvcnQgZm9yIE5FVExJTksgc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdGhlIHNzIHRvb2wuCistLS0gYS9uZXQvcGFja2V0L0tjb25maWcKKysrKyBiL25ldC9wYWNrZXQvS2NvbmZpZworQEAgLTE5LDYgKzE5LDcgQEAgY29uZmlnIFBBQ0tFVAorIGNvbmZpZyBQQUNLRVRfRElBRworIAl0cmlzdGF0ZSAiUGFja2V0OiBzb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlIgorIAlkZXBlbmRzIG9uIFBBQ0tFVAorKwlzZWxlY3QgU09DS19ESUFHCisgCWRlZmF1bHQgbgorIAktLS1oZWxwLS0tCisgCSAgU3VwcG9ydCBmb3IgUEZfUEFDS0VUIHNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2UgdXNlZCBieSB0aGUgc3MgdG9vbC4KKy0tLSBhL25ldC91bml4L0tjb25maWcKKysrKyBiL25ldC91bml4L0tjb25maWcKK0BAIC0yOCw2ICsyOCw3IEBAIGNvbmZpZyBVTklYX1NDTQorIGNvbmZpZyBVTklYX0RJQUcKKyAJdHJpc3RhdGUgIlVOSVg6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZSIKKyAJZGVwZW5kcyBvbiBVTklYCisrCXNlbGVjdCBTT0NLX0RJQUcKKyAJZGVmYXVsdCBuCisgCS0tLWhlbHAtLS0KKyAJICBTdXBwb3J0IGZvciBVTklYIHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5IHRoZSBzcyB0b29sLgpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvaGFjay01LjQvOTAyLWRlYmxvYXRfcHJvYy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzkwMi1kZWJsb2F0X3Byb2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY4MGU3YgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzkwMi1kZWJsb2F0X3Byb2MucGF0Y2gKQEAgLTAsMCArMSw0MDggQEAKK0Zyb20gOWUzZjFkMDgwNWIyZDkxOTkwNGRkOWE0ZmYwZDk1NjMxNGNjM2NiYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KK0RhdGU6IFNhdCwgOCBKdWwgMjAxNyAwODoyMDowOSArMDIwMAorU3ViamVjdDogZGVibG9hdDogcHJvY2ZzCisKK1NpZ25lZC1vZmYtYnk6IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KKy0tLQorIGZzL2xvY2tzLmMgICAgICAgICAgICAgICB8ICAyICsrCisgZnMvcHJvYy9LY29uZmlnICAgICAgICAgIHwgIDUgKysrKysKKyBmcy9wcm9jL2NvbnNvbGVzLmMgICAgICAgfCAgMyArKysKKyBmcy9wcm9jL3Byb2NfdHR5LmMgICAgICAgfCAxMSArKysrKysrKysrLQorIGluY2x1ZGUvbmV0L3NubXAuaCAgICAgICB8IDE4ICsrKysrKysrKysrKysrKysrLQorIGlwYy9tc2cuYyAgICAgICAgICAgICAgICB8ICAzICsrKworIGlwYy9zZW0uYyAgICAgICAgICAgICAgICB8ICAyICsrCisgaXBjL3NobS5jICAgICAgICAgICAgICAgIHwgIDIgKysKKyBpcGMvdXRpbC5jICAgICAgICAgICAgICAgfCAgMyArKysKKyBrZXJuZWwvZXhlY19kb21haW4uYyAgICAgfCAgMiArKworIGtlcm5lbC9pcnEvcHJvYy5jICAgICAgICB8ICA5ICsrKysrKysrKworIGtlcm5lbC90aW1lL3RpbWVyX2xpc3QuYyB8ICAyICsrCisgbW0vdm1hbGxvYy5jICAgICAgICAgICAgIHwgIDIgKysKKyBtbS92bXN0YXQuYyAgICAgICAgICAgICAgfCAgOCArKysrKy0tLQorIG5ldC84MDIxcS92bGFucHJvYy5jICAgICB8ICA2ICsrKysrKworIG5ldC9jb3JlL25ldC1wcm9jZnMuYyAgICB8IDE4ICsrKysrKysrKysrKy0tLS0tLQorIG5ldC9jb3JlL3NvY2suYyAgICAgICAgICB8ICAyICsrCisgbmV0L2lwdjQvZmliX3RyaWUuYyAgICAgIHwgMTggKysrKysrKysrKysrLS0tLS0tCisgbmV0L2lwdjQvcHJvYy5jICAgICAgICAgIHwgIDMgKysrCisgbmV0L2lwdjQvcm91dGUuYyAgICAgICAgIHwgIDMgKysrCisgMjAgZmlsZXMgY2hhbmdlZCwgMTA1IGluc2VydGlvbnMoKyksIDE3IGRlbGV0aW9ucygtKQorCistLS0gYS9mcy9sb2Nrcy5jCisrKysgYi9mcy9sb2Nrcy5jCitAQCAtMjk4OSw2ICsyOTg5LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBsb2NrcworIAorIHN0YXRpYyBpbnQgX19pbml0IHByb2NfbG9ja3NfaW5pdCh2b2lkKQorIHsKKysJaWYgKElTX0VOQUJMRUQoQ09ORklHX1BST0NfU1RSSVBQRUQpKQorKwkJcmV0dXJuIDA7CisgCXByb2NfY3JlYXRlX3NlcV9wcml2YXRlKCJsb2NrcyIsIDAsIE5VTEwsICZsb2Nrc19zZXFfb3BlcmF0aW9ucywKKyAJCQlzaXplb2Yoc3RydWN0IGxvY2tzX2l0ZXJhdG9yKSwgTlVMTCk7CisgCXJldHVybiAwOworLS0tIGEvZnMvcHJvYy9LY29uZmlnCisrKysgYi9mcy9wcm9jL0tjb25maWcKK0BAIC0xMDAsNiArMTAwLDExIEBAIGNvbmZpZyBQUk9DX0NISUxEUkVOCisgCSAgU2F5IFkgaWYgeW91IGFyZSBydW5uaW5nIGFueSB1c2VyLXNwYWNlIHNvZnR3YXJlIHdoaWNoIHRha2VzIGJlbmVmaXQgZnJvbQorIAkgIHRoaXMgaW50ZXJmYWNlLiBGb3IgZXhhbXBsZSwgcmt0IGlzIHN1Y2ggYSBwaWVjZSBvZiBzb2Z0d2FyZS4KKyAKKytjb25maWcgUFJPQ19TVFJJUFBFRAorKwlkZWZhdWx0IG4KKysJZGVwZW5kcyBvbiBFWFBFUlQKKysJYm9vbCAiU3RyaXAgbm9uLWVzc2VudGlhbCAvcHJvYyBmdW5jdGlvbmFsaXR5IHRvIHJlZHVjZSBjb2RlIHNpemUiCisrCisgY29uZmlnIFBST0NfUElEX0FSQ0hfU1RBVFVTCisgCWRlZl9ib29sIG4KKyAJZGVwZW5kcyBvbiBQUk9DX0ZTCistLS0gYS9mcy9wcm9jL2NvbnNvbGVzLmMKKysrKyBiL2ZzL3Byb2MvY29uc29sZXMuYworQEAgLTkyLDYgKzkyLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBjb25zbworIAorIHN0YXRpYyBpbnQgX19pbml0IHByb2NfY29uc29sZXNfaW5pdCh2b2lkKQorIHsKKysJaWYgKElTX0VOQUJMRUQoQ09ORklHX1BST0NfU1RSSVBQRUQpKQorKwkJcmV0dXJuIDA7CisrCisgCXByb2NfY3JlYXRlX3NlcSgiY29uc29sZXMiLCAwLCBOVUxMLCAmY29uc29sZXNfb3ApOworIAlyZXR1cm4gMDsKKyB9CistLS0gYS9mcy9wcm9jL3Byb2NfdHR5LmMKKysrKyBiL2ZzL3Byb2MvcHJvY190dHkuYworQEAgLTEzMyw3ICsxMzMsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyB0dHlfZAorIHZvaWQgcHJvY190dHlfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIpCisgeworIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudDsKKy0JCQorKworKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfUFJPQ19TVFJJUFBFRCkpCisrCQlyZXR1cm47CisrCisgCWlmICghZHJpdmVyLT5kcml2ZXJfbmFtZSB8fCBkcml2ZXItPnByb2NfZW50cnkgfHwKKyAJICAgICFkcml2ZXItPm9wcy0+cHJvY19zaG93KQorIAkJcmV0dXJuOworQEAgLTE1MCw2ICsxNTMsOSBAQCB2b2lkIHByb2NfdHR5X3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB0CisgeworIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudDsKKyAKKysJaWYgKElTX0VOQUJMRUQoQ09ORklHX1BST0NfU1RSSVBQRUQpKQorKwkJcmV0dXJuOworKworIAllbnQgPSBkcml2ZXItPnByb2NfZW50cnk7CisgCWlmICghZW50KQorIAkJcmV0dXJuOworQEAgLTE2NCw2ICsxNzAsOSBAQCB2b2lkIHByb2NfdHR5X3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB0CisgICovCisgdm9pZCBfX2luaXQgcHJvY190dHlfaW5pdCh2b2lkKQorIHsKKysJaWYgKElTX0VOQUJMRUQoQ09ORklHX1BST0NfU1RSSVBQRUQpKQorKwkJcmV0dXJuOworKworIAlpZiAoIXByb2NfbWtkaXIoInR0eSIsIE5VTEwpKQorIAkJcmV0dXJuOworIAlwcm9jX21rZGlyKCJ0dHkvbGRpc2MiLCBOVUxMKTsJLyogUHJlc2VydmVkOiBpdCdzIHVzZXJzcGFjZSB2aXNpYmxlICovCistLS0gYS9pbmNsdWRlL25ldC9zbm1wLmgKKysrKyBiL2luY2x1ZGUvbmV0L3NubXAuaAorQEAgLTExOCw2ICsxMTgsMjEgQEAgc3RydWN0IGxpbnV4X3hmcm1fbWliIHsKKyAjZGVmaW5lIERFQ0xBUkVfU05NUF9TVEFUKHR5cGUsIG5hbWUpCVwKKyAJZXh0ZXJuIF9fdHlwZW9mX18odHlwZSkgX19wZXJjcHUgKm5hbWUKKyAKKysjaWZkZWYgQ09ORklHX1BST0NfU1RSSVBQRUQKKysjZGVmaW5lIF9fU05NUF9TVEFUU19EVU1NWShtaWIpCVwKKysJZG8geyAodm9pZCkgbWliLT5taWJzWzBdOyB9IHdoaWxlKDApCisrCisrI2RlZmluZSBfX1NOTVBfSU5DX1NUQVRTKG1pYiwgZmllbGQpIF9fU05NUF9TVEFUU19EVU1NWShtaWIpCisrI2RlZmluZSBTTk1QX0lOQ19TVEFUU19BVE9NSUNfTE9ORyhtaWIsIGZpZWxkKSBfX1NOTVBfU1RBVFNfRFVNTVkobWliKQorKyNkZWZpbmUgU05NUF9JTkNfU1RBVFMobWliLCBmaWVsZCkgX19TTk1QX1NUQVRTX0RVTU1ZKG1pYikKKysjZGVmaW5lIFNOTVBfREVDX1NUQVRTKG1pYiwgZmllbGQpIF9fU05NUF9TVEFUU19EVU1NWShtaWIpCisrI2RlZmluZSBfX1NOTVBfQUREX1NUQVRTKG1pYiwgZmllbGQsIGFkZGVuZCkgX19TTk1QX1NUQVRTX0RVTU1ZKG1pYikKKysjZGVmaW5lIFNOTVBfQUREX1NUQVRTKG1pYiwgZmllbGQsIGFkZGVuZCkgX19TTk1QX1NUQVRTX0RVTU1ZKG1pYikKKysjZGVmaW5lIFNOTVBfVVBEX1BPX1NUQVRTKG1pYiwgYmFzZWZpZWxkLCBhZGRlbmQpIF9fU05NUF9TVEFUU19EVU1NWShtaWIpCisrI2RlZmluZSBfX1NOTVBfVVBEX1BPX1NUQVRTKG1pYiwgYmFzZWZpZWxkLCBhZGRlbmQpIF9fU05NUF9TVEFUU19EVU1NWShtaWIpCisrCisrI2Vsc2UKKysKKyAjZGVmaW5lIF9fU05NUF9JTkNfU1RBVFMobWliLCBmaWVsZCkJXAorIAkJCV9fdGhpc19jcHVfaW5jKG1pYi0+bWlic1tmaWVsZF0pCisgCitAQCAtMTQ4LDggKzE2Myw5IEBAIHN0cnVjdCBsaW51eF94ZnJtX21pYiB7CisgCQlfX3RoaXNfY3B1X2FkZChwdHJbYmFzZWZpZWxkIyNPQ1RFVFNdLCBhZGRlbmQpOwlcCisgCX0gd2hpbGUgKDApCisgCisrI2VuZGlmCisgCistI2lmIEJJVFNfUEVSX0xPTkc9PTMyCisrI2lmIChCSVRTX1BFUl9MT05HPT0zMikgJiYgIWRlZmluZWQoQ09ORklHX1BST0NfU1RSSVBQRUQpCisgCisgI2RlZmluZSBfX1NOTVBfQUREX1NUQVRTNjQobWliLCBmaWVsZCwgYWRkZW5kKSAJCQkJXAorIAlkbyB7CQkJCQkJCQlcCistLS0gYS9pcGMvbXNnLmMKKysrKyBiL2lwYy9tc2cuYworQEAgLTEzMTcsNiArMTMxNyw5IEBAIHZvaWQgX19pbml0IG1zZ19pbml0KHZvaWQpCisgeworIAltc2dfaW5pdF9ucygmaW5pdF9pcGNfbnMpOworIAorKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfUFJPQ19TVFJJUFBFRCkpCisrCQlyZXR1cm47CisrCisgCWlwY19pbml0X3Byb2NfaW50ZXJmYWNlKCJzeXN2aXBjL21zZyIsCisgCQkJCSIgICAgICAga2V5ICAgICAgbXNxaWQgcGVybXMgICAgICBjYnl0ZXMgICAgICAgcW51bSBsc3BpZCBscnBpZCAgIHVpZCAgIGdpZCAgY3VpZCAgY2dpZCAgICAgIHN0aW1lICAgICAgcnRpbWUgICAgICBjdGltZVxuIiwKKyAJCQkJSVBDX01TR19JRFMsIHN5c3ZpcGNfbXNnX3Byb2Nfc2hvdyk7CistLS0gYS9pcGMvc2VtLmMKKysrKyBiL2lwYy9zZW0uYworQEAgLTI0Myw2ICsyNDMsOCBAQCB2b2lkIHNlbV9leGl0X25zKHN0cnVjdCBpcGNfbmFtZXNwYWNlICpuCisgdm9pZCBfX2luaXQgc2VtX2luaXQodm9pZCkKKyB7CisgCXNlbV9pbml0X25zKCZpbml0X2lwY19ucyk7CisrCWlmIChJU19FTkFCTEVEKENPTkZJR19QUk9DX1NUUklQUEVEKSkKKysJCXJldHVybjsKKyAJaXBjX2luaXRfcHJvY19pbnRlcmZhY2UoInN5c3ZpcGMvc2VtIiwKKyAJCQkJIiAgICAgICBrZXkgICAgICBzZW1pZCBwZXJtcyAgICAgIG5zZW1zICAgdWlkICAgZ2lkICBjdWlkICBjZ2lkICAgICAgb3RpbWUgICAgICBjdGltZVxuIiwKKyAJCQkJSVBDX1NFTV9JRFMsIHN5c3ZpcGNfc2VtX3Byb2Nfc2hvdyk7CistLS0gYS9pcGMvc2htLmMKKysrKyBiL2lwYy9zaG0uYworQEAgLTE1NCw2ICsxNTQsOCBAQCBwdXJlX2luaXRjYWxsKGlwY19uc19pbml0KTsKKyAKKyB2b2lkIF9faW5pdCBzaG1faW5pdCh2b2lkKQorIHsKKysJaWYgKElTX0VOQUJMRUQoQ09ORklHX1BST0NfU1RSSVBQRUQpKQorKwkJcmV0dXJuOworIAlpcGNfaW5pdF9wcm9jX2ludGVyZmFjZSgic3lzdmlwYy9zaG0iLAorICNpZiBCSVRTX1BFUl9MT05HIDw9IDMyCisgCQkJCSIgICAgICAga2V5ICAgICAgc2htaWQgcGVybXMgICAgICAgc2l6ZSAgY3BpZCAgbHBpZCBuYXR0Y2ggICB1aWQgICBnaWQgIGN1aWQgIGNnaWQgICAgICBhdGltZSAgICAgIGR0aW1lICAgICAgY3RpbWUgICAgICAgIHJzcyAgICAgICBzd2FwXG4iLAorLS0tIGEvaXBjL3V0aWwuYworKysrIGIvaXBjL3V0aWwuYworQEAgLTE0MCw2ICsxNDAsOSBAQCB2b2lkIF9faW5pdCBpcGNfaW5pdF9wcm9jX2ludGVyZmFjZShjb25zCisgCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlOworIAlzdHJ1Y3QgaXBjX3Byb2NfaWZhY2UgKmlmYWNlOworIAorKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfUFJPQ19TVFJJUFBFRCkpCisrCQlyZXR1cm47CisrCisgCWlmYWNlID0ga21hbGxvYyhzaXplb2YoKmlmYWNlKSwgR0ZQX0tFUk5FTCk7CisgCWlmICghaWZhY2UpCisgCQlyZXR1cm47CistLS0gYS9rZXJuZWwvZXhlY19kb21haW4uYworKysrIGIva2VybmVsL2V4ZWNfZG9tYWluLmMKK0BAIC0yOSw2ICsyOSw4IEBAIHN0YXRpYyBpbnQgZXhlY2RvbWFpbnNfcHJvY19zaG93KHN0cnVjdAorIAorIHN0YXRpYyBpbnQgX19pbml0IHByb2NfZXhlY2RvbWFpbnNfaW5pdCh2b2lkKQorIHsKKysJaWYgKElTX0VOQUJMRUQoQ09ORklHX1BST0NfU1RSSVBQRUQpKQorKwkJcmV0dXJuIDA7CisgCXByb2NfY3JlYXRlX3NpbmdsZSgiZXhlY2RvbWFpbnMiLCAwLCBOVUxMLCBleGVjZG9tYWluc19wcm9jX3Nob3cpOworIAlyZXR1cm4gMDsKKyB9CistLS0gYS9rZXJuZWwvaXJxL3Byb2MuYworKysrIGIva2VybmVsL2lycS9wcm9jLmMKK0BAIC0zNDEsNiArMzQxLDkgQEAgdm9pZCByZWdpc3Rlcl9pcnFfcHJvYyh1bnNpZ25lZCBpbnQgaXJxLAorIAl2b2lkIF9fbWF5YmVfdW51c2VkICppcnFwID0gKHZvaWQgKikodW5zaWduZWQgbG9uZykgaXJxOworIAljaGFyIG5hbWUgW01BWF9OQU1FTEVOXTsKKyAKKysJaWYgKElTX0VOQUJMRUQoQ09ORklHX1BST0NfU1RSSVBQRUQpICYmICFJU19FTkFCTEVEKENPTkZJR19TTVApKQorKwkJcmV0dXJuOworKworIAlpZiAoIXJvb3RfaXJxX2RpciB8fCAoZGVzYy0+aXJxX2RhdGEuY2hpcCA9PSAmbm9faXJxX2NoaXApKQorIAkJcmV0dXJuOworIAorQEAgLTM5NCw2ICszOTcsOSBAQCB2b2lkIHVucmVnaXN0ZXJfaXJxX3Byb2ModW5zaWduZWQgaW50IGlyCisgeworIAljaGFyIG5hbWUgW01BWF9OQU1FTEVOXTsKKyAKKysJaWYgKElTX0VOQUJMRUQoQ09ORklHX1BST0NfU1RSSVBQRUQpICYmICFJU19FTkFCTEVEKENPTkZJR19TTVApKQorKwkJcmV0dXJuOworKworIAlpZiAoIXJvb3RfaXJxX2RpciB8fCAhZGVzYy0+ZGlyKQorIAkJcmV0dXJuOworICNpZmRlZiBDT05GSUdfU01QCitAQCAtNDMyLDYgKzQzOCw5IEBAIHZvaWQgaW5pdF9pcnFfcHJvYyh2b2lkKQorIAl1bnNpZ25lZCBpbnQgaXJxOworIAlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisgCisrCWlmIChJU19FTkFCTEVEKENPTkZJR19QUk9DX1NUUklQUEVEKSAmJiAhSVNfRU5BQkxFRChDT05GSUdfU01QKSkKKysJCXJldHVybjsKKysKKyAJLyogY3JlYXRlIC9wcm9jL2lycSAqLworIAlyb290X2lycV9kaXIgPSBwcm9jX21rZGlyKCJpcnEiLCBOVUxMKTsKKyAJaWYgKCFyb290X2lycV9kaXIpCistLS0gYS9rZXJuZWwvdGltZS90aW1lcl9saXN0LmMKKysrKyBiL2tlcm5lbC90aW1lL3RpbWVyX2xpc3QuYworQEAgLTM3MCw2ICszNzAsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBpbml0X3RpbWVyX2xpc3RfcHJvY2ZzCisgeworIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBlOworIAorKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfUFJPQ19TVFJJUFBFRCkpCisrCQlyZXR1cm4gMDsKKyAJcGUgPSBwcm9jX2NyZWF0ZV9zZXFfcHJpdmF0ZSgidGltZXJfbGlzdCIsIDA0MDAsIE5VTEwsICZ0aW1lcl9saXN0X3NvcHMsCisgCQkJc2l6ZW9mKHN0cnVjdCB0aW1lcl9saXN0X2l0ZXIpLCBOVUxMKTsKKyAJaWYgKCFwZSkKKy0tLSBhL21tL3ZtYWxsb2MuYworKysrIGIvbW0vdm1hbGxvYy5jCitAQCAtMzU2NCw2ICszNTY0LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyB2bWFsbAorIAorIHN0YXRpYyBpbnQgX19pbml0IHByb2Nfdm1hbGxvY19pbml0KHZvaWQpCisgeworKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfUFJPQ19TVFJJUFBFRCkpCisrCQlyZXR1cm4gMDsKKyAJaWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpKQorIAkJcHJvY19jcmVhdGVfc2VxX3ByaXZhdGUoInZtYWxsb2NpbmZvIiwgMDQwMCwgTlVMTCwKKyAJCQkJJnZtYWxsb2Nfb3AsCistLS0gYS9tbS92bXN0YXQuYworKysrIGIvbW0vdm1zdGF0LmMKK0BAIC0xOTg4LDEwICsxOTg4LDEyIEBAIHZvaWQgX19pbml0IGluaXRfbW1faW50ZXJuYWxzKHZvaWQpCisgCXN0YXJ0X3NoZXBoZXJkX3RpbWVyKCk7CisgI2VuZGlmCisgI2lmZGVmIENPTkZJR19QUk9DX0ZTCistCXByb2NfY3JlYXRlX3NlcSgiYnVkZHlpbmZvIiwgMDQ0NCwgTlVMTCwgJmZyYWdtZW50YXRpb25fb3ApOworLQlwcm9jX2NyZWF0ZV9zZXEoInBhZ2V0eXBlaW5mbyIsIDA0MDAsIE5VTEwsICZwYWdldHlwZWluZm9fb3ApOworKwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BST0NfU1RSSVBQRUQpKSB7CisrCQlwcm9jX2NyZWF0ZV9zZXEoImJ1ZGR5aW5mbyIsIDA0NDQsIE5VTEwsICZmcmFnbWVudGF0aW9uX29wKTsKKysJCXByb2NfY3JlYXRlX3NlcSgicGFnZXR5cGVpbmZvIiwgMDQwMCwgTlVMTCwgJnBhZ2V0eXBlaW5mb19vcCk7CisrCQlwcm9jX2NyZWF0ZV9zZXEoInpvbmVpbmZvIiwgMDQ0NCwgTlVMTCwgJnpvbmVpbmZvX29wKTsKKysJfQorIAlwcm9jX2NyZWF0ZV9zZXEoInZtc3RhdCIsIDA0NDQsIE5VTEwsICZ2bXN0YXRfb3ApOworLQlwcm9jX2NyZWF0ZV9zZXEoInpvbmVpbmZvIiwgMDQ0NCwgTlVMTCwgJnpvbmVpbmZvX29wKTsKKyAjZW5kaWYKKyB9CisgCistLS0gYS9uZXQvODAyMXEvdmxhbnByb2MuYworKysrIGIvbmV0LzgwMjFxL3ZsYW5wcm9jLmMKK0BAIC05Myw2ICs5Myw5IEBAIHZvaWQgdmxhbl9wcm9jX2NsZWFudXAoc3RydWN0IG5ldCAqbmV0KQorIHsKKyAJc3RydWN0IHZsYW5fbmV0ICp2biA9IG5ldF9nZW5lcmljKG5ldCwgdmxhbl9uZXRfaWQpOworIAorKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfUFJPQ19TVFJJUFBFRCkpCisrCQlyZXR1cm47CisrCisgCWlmICh2bi0+cHJvY192bGFuX2NvbmYpCisgCQlyZW1vdmVfcHJvY19lbnRyeShuYW1lX2NvbmYsIHZuLT5wcm9jX3ZsYW5fZGlyKTsKKyAKK0BAIC0xMTIsNiArMTE1LDkgQEAgaW50IF9fbmV0X2luaXQgdmxhbl9wcm9jX2luaXQoc3RydWN0IG5ldAorIHsKKyAJc3RydWN0IHZsYW5fbmV0ICp2biA9IG5ldF9nZW5lcmljKG5ldCwgdmxhbl9uZXRfaWQpOworIAorKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfUFJPQ19TVFJJUFBFRCkpCisrCQlyZXR1cm4gMDsKKysKKyAJdm4tPnByb2Nfdmxhbl9kaXIgPSBwcm9jX25ldF9ta2RpcihuZXQsIG5hbWVfcm9vdCwgbmV0LT5wcm9jX25ldCk7CisgCWlmICghdm4tPnByb2Nfdmxhbl9kaXIpCisgCQlnb3RvIGVycjsKKy0tLSBhL25ldC9jb3JlL25ldC1wcm9jZnMuYworKysrIGIvbmV0L2NvcmUvbmV0LXByb2Nmcy5jCitAQCAtMzA5LDEwICszMDksMTIgQEAgc3RhdGljIGludCBfX25ldF9pbml0IGRldl9wcm9jX25ldF9pbml0KAorIAlpZiAoIXByb2NfY3JlYXRlX25ldCgiZGV2IiwgMDQ0NCwgbmV0LT5wcm9jX25ldCwgJmRldl9zZXFfb3BzLAorIAkJCXNpemVvZihzdHJ1Y3Qgc2VxX25ldF9wcml2YXRlKSkpCisgCQlnb3RvIG91dDsKKy0JaWYgKCFwcm9jX2NyZWF0ZV9zZXEoInNvZnRuZXRfc3RhdCIsIDA0NDQsIG5ldC0+cHJvY19uZXQsCisrCWlmICghSVNfRU5BQkxFRChDT05GSUdfUFJPQ19TVFJJUFBFRCkgJiYKKysJCQkhcHJvY19jcmVhdGVfc2VxKCJzb2Z0bmV0X3N0YXQiLCAwNDQ0LCBuZXQtPnByb2NfbmV0LAorIAkJCSAmc29mdG5ldF9zZXFfb3BzKSkKKyAJCWdvdG8gb3V0X2RldjsKKy0JaWYgKCFwcm9jX2NyZWF0ZV9uZXQoInB0eXBlIiwgMDQ0NCwgbmV0LT5wcm9jX25ldCwgJnB0eXBlX3NlcV9vcHMsCisrCWlmICghSVNfRU5BQkxFRChDT05GSUdfUFJPQ19TVFJJUFBFRCkgJiYKKysJCQkhcHJvY19jcmVhdGVfbmV0KCJwdHlwZSIsIDA0NDQsIG5ldC0+cHJvY19uZXQsICZwdHlwZV9zZXFfb3BzLAorIAkJCXNpemVvZihzdHJ1Y3Qgc2VxX25ldF9wcml2YXRlKSkpCisgCQlnb3RvIG91dF9zb2Z0bmV0OworIAorQEAgLTMyMiw5ICszMjQsMTEgQEAgc3RhdGljIGludCBfX25ldF9pbml0IGRldl9wcm9jX25ldF9pbml0KAorIG91dDoKKyAJcmV0dXJuIHJjOworIG91dF9wdHlwZToKKy0JcmVtb3ZlX3Byb2NfZW50cnkoInB0eXBlIiwgbmV0LT5wcm9jX25ldCk7CisrCWlmICghSVNfRU5BQkxFRChDT05GSUdfUFJPQ19TVFJJUFBFRCkpCisrCQlyZW1vdmVfcHJvY19lbnRyeSgicHR5cGUiLCBuZXQtPnByb2NfbmV0KTsKKyBvdXRfc29mdG5ldDoKKy0JcmVtb3ZlX3Byb2NfZW50cnkoInNvZnRuZXRfc3RhdCIsIG5ldC0+cHJvY19uZXQpOworKwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BST0NfU1RSSVBQRUQpKQorKwkJcmVtb3ZlX3Byb2NfZW50cnkoInNvZnRuZXRfc3RhdCIsIG5ldC0+cHJvY19uZXQpOworIG91dF9kZXY6CisgCXJlbW92ZV9wcm9jX2VudHJ5KCJkZXYiLCBuZXQtPnByb2NfbmV0KTsKKyAJZ290byBvdXQ7CitAQCAtMzM0LDggKzMzOCwxMCBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGRldl9wcm9jX25ldF9leGl0CisgeworIAl3ZXh0X3Byb2NfZXhpdChuZXQpOworIAorLQlyZW1vdmVfcHJvY19lbnRyeSgicHR5cGUiLCBuZXQtPnByb2NfbmV0KTsKKy0JcmVtb3ZlX3Byb2NfZW50cnkoInNvZnRuZXRfc3RhdCIsIG5ldC0+cHJvY19uZXQpOworKwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BST0NfU1RSSVBQRUQpKSB7CisrCQlyZW1vdmVfcHJvY19lbnRyeSgicHR5cGUiLCBuZXQtPnByb2NfbmV0KTsKKysJCXJlbW92ZV9wcm9jX2VudHJ5KCJzb2Z0bmV0X3N0YXQiLCBuZXQtPnByb2NfbmV0KTsKKysJfQorIAlyZW1vdmVfcHJvY19lbnRyeSgiZGV2IiwgbmV0LT5wcm9jX25ldCk7CisgfQorIAorLS0tIGEvbmV0L2NvcmUvc29jay5jCisrKysgYi9uZXQvY29yZS9zb2NrLmMKK0BAIC0zNjQzLDYgKzM2NDMsOCBAQCBzdGF0aWMgX19uZXRfaW5pdGRhdGEgc3RydWN0IHBlcm5ldF9vcGVyCisgCisgc3RhdGljIGludCBfX2luaXQgcHJvdG9faW5pdCh2b2lkKQorIHsKKysJaWYgKElTX0VOQUJMRUQoQ09ORklHX1BST0NfU1RSSVBQRUQpKQorKwkJcmV0dXJuIDA7CisgCXJldHVybiByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZwcm90b19uZXRfb3BzKTsKKyB9CisgCistLS0gYS9uZXQvaXB2NC9maWJfdHJpZS5jCisrKysgYi9uZXQvaXB2NC9maWJfdHJpZS5jCitAQCAtMjg0OCwxMSArMjg0OCwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGZpYl9yCisgCisgaW50IF9fbmV0X2luaXQgZmliX3Byb2NfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCisgeworLQlpZiAoIXByb2NfY3JlYXRlX25ldCgiZmliX3RyaWUiLCAwNDQ0LCBuZXQtPnByb2NfbmV0LCAmZmliX3RyaWVfc2VxX29wcywKKysJaWYgKCFJU19FTkFCTEVEKENPTkZJR19QUk9DX1NUUklQUEVEKSAmJgorKwkJCSFwcm9jX2NyZWF0ZV9uZXQoImZpYl90cmllIiwgMDQ0NCwgbmV0LT5wcm9jX25ldCwgJmZpYl90cmllX3NlcV9vcHMsCisgCQkJc2l6ZW9mKHN0cnVjdCBmaWJfdHJpZV9pdGVyKSkpCisgCQlnb3RvIG91dDE7CisgCistCWlmICghcHJvY19jcmVhdGVfbmV0X3NpbmdsZSgiZmliX3RyaWVzdGF0IiwgMDQ0NCwgbmV0LT5wcm9jX25ldCwKKysJaWYgKCFJU19FTkFCTEVEKENPTkZJR19QUk9DX1NUUklQUEVEKSAmJgorKwkJCSFwcm9jX2NyZWF0ZV9uZXRfc2luZ2xlKCJmaWJfdHJpZXN0YXQiLCAwNDQ0LCBuZXQtPnByb2NfbmV0LAorIAkJCWZpYl90cmllc3RhdF9zZXFfc2hvdywgTlVMTCkpCisgCQlnb3RvIG91dDI7CisgCitAQCAtMjg2MywxNyArMjg2NSwyMSBAQCBpbnQgX19uZXRfaW5pdCBmaWJfcHJvY19pbml0KHN0cnVjdCBuZXQKKyAJcmV0dXJuIDA7CisgCisgb3V0MzoKKy0JcmVtb3ZlX3Byb2NfZW50cnkoImZpYl90cmllc3RhdCIsIG5ldC0+cHJvY19uZXQpOworKwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BST0NfU1RSSVBQRUQpKQorKwkJcmVtb3ZlX3Byb2NfZW50cnkoImZpYl90cmllc3RhdCIsIG5ldC0+cHJvY19uZXQpOworIG91dDI6CistCXJlbW92ZV9wcm9jX2VudHJ5KCJmaWJfdHJpZSIsIG5ldC0+cHJvY19uZXQpOworKwlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BST0NfU1RSSVBQRUQpKQorKwkJcmVtb3ZlX3Byb2NfZW50cnkoImZpYl90cmllIiwgbmV0LT5wcm9jX25ldCk7Cisgb3V0MToKKyAJcmV0dXJuIC1FTk9NRU07CisgfQorIAorIHZvaWQgX19uZXRfZXhpdCBmaWJfcHJvY19leGl0KHN0cnVjdCBuZXQgKm5ldCkKKyB7CistCXJlbW92ZV9wcm9jX2VudHJ5KCJmaWJfdHJpZSIsIG5ldC0+cHJvY19uZXQpOworLQlyZW1vdmVfcHJvY19lbnRyeSgiZmliX3RyaWVzdGF0IiwgbmV0LT5wcm9jX25ldCk7CisrCWlmICghSVNfRU5BQkxFRChDT05GSUdfUFJPQ19TVFJJUFBFRCkpIHsKKysJCXJlbW92ZV9wcm9jX2VudHJ5KCJmaWJfdHJpZSIsIG5ldC0+cHJvY19uZXQpOworKwkJcmVtb3ZlX3Byb2NfZW50cnkoImZpYl90cmllc3RhdCIsIG5ldC0+cHJvY19uZXQpOworKwl9CisgCXJlbW92ZV9wcm9jX2VudHJ5KCJyb3V0ZSIsIG5ldC0+cHJvY19uZXQpOworIH0KKyAKKy0tLSBhL25ldC9pcHY0L3Byb2MuYworKysrIGIvbmV0L2lwdjQvcHJvYy5jCitAQCAtNTIyLDUgKzUyMiw4IEBAIHN0YXRpYyBfX25ldF9pbml0ZGF0YSBzdHJ1Y3QgcGVybmV0X29wZXIKKyAKKyBpbnQgX19pbml0IGlwX21pc2NfcHJvY19pbml0KHZvaWQpCisgeworKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfUFJPQ19TVFJJUFBFRCkpCisrCQlyZXR1cm4gMDsKKysKKyAJcmV0dXJuIHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwX3Byb2Nfb3BzKTsKKyB9CistLS0gYS9uZXQvaXB2NC9yb3V0ZS5jCisrKysgYi9uZXQvaXB2NC9yb3V0ZS5jCitAQCAtNDEwLDYgKzQxMCw5IEBAIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXBfcnRfcHIKKyAKKyBzdGF0aWMgaW50IF9faW5pdCBpcF9ydF9wcm9jX2luaXQodm9pZCkKKyB7CisrCWlmIChJU19FTkFCTEVEKENPTkZJR19QUk9DX1NUUklQUEVEKSkKKysJCXJldHVybiAwOworKworIAlyZXR1cm4gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXBfcnRfcHJvY19vcHMpOworIH0KKyAKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzkwNC1kZWJsb2F0X2RtYV9idWYucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC85MDQtZGVibG9hdF9kbWFfYnVmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MDMyZDkKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC85MDQtZGVibG9hdF9kbWFfYnVmLnBhdGNoCkBAIC0wLDAgKzEsNzQgQEAKK0Zyb20gZTM2OTJjYjJmY2Q1YmExMjQ0NTEyYTBmNDNiODExOGY2NWYxYzM3NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KK0RhdGU6IFNhdCwgOCBKdWwgMjAxNyAwODoyMDo0MyArMDIwMAorU3ViamVjdDogZGVibG9hdDogZG1hYnVmCisKK1NpZ25lZC1vZmYtYnk6IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KKy0tLQorIGRyaXZlcnMvYmFzZS9LY29uZmlnICAgICAgfCAgMiArLQorIGRyaXZlcnMvZG1hLWJ1Zi9NYWtlZmlsZSAgfCAxMCArKysrKysrLS0tCisgZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYyB8ICA0ICsrKy0KKyBrZXJuZWwvc2NoZWQvY29yZS5jICAgICAgIHwgIDEgKworIDQgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9iYXNlL0tjb25maWcKKysrKyBiL2RyaXZlcnMvYmFzZS9LY29uZmlnCitAQCAtMTc5LDcgKzE3OSw3IEBAIGNvbmZpZyBTT0NfQlVTCisgc291cmNlICJkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWciCisgCisgY29uZmlnIERNQV9TSEFSRURfQlVGRkVSCistCWJvb2wKKysJdHJpc3RhdGUKKyAJZGVmYXVsdCBuCisgCXNlbGVjdCBJUlFfV09SSworIAloZWxwCistLS0gYS9kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGUKKysrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9NYWtlZmlsZQorQEAgLTEsOSArMSwxMyBAQAorICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQorLW9iai15IDo9IGRtYS1idWYubyBkbWEtZmVuY2UubyBkbWEtZmVuY2UtYXJyYXkubyBkbWEtZmVuY2UtY2hhaW4ubyBcCistCSBkbWEtcmVzdi5vIHNlcW5vLWZlbmNlLm8KKy1vYmotJChDT05GSUdfU1lOQ19GSUxFKQkJKz0gc3luY19maWxlLm8KKy1vYmotJChDT05GSUdfU1dfU1lOQykJCSs9IHN3X3N5bmMubyBzeW5jX2RlYnVnLm8KKy1vYmotJChDT05GSUdfVURNQUJVRikJCSs9IHVkbWFidWYubworK29iai0kKENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUikgOj0gZG1hLXNoYXJlZC1idWZmZXIubworKworK2RtYS1idWYtb2Jqcy15IDo9IGRtYS1idWYubyBkbWEtZmVuY2UubyBkbWEtZmVuY2UtYXJyYXkubyBkbWEtZmVuY2UtY2hhaW4ubyBcCisrCQkgIGRtYS1yZXN2Lm8gc2Vxbm8tZmVuY2UubworK2RtYS1idWYtb2Jqcy0kKENPTkZJR19TWU5DX0ZJTEUpCSs9IHN5bmNfZmlsZS5vCisrZG1hLWJ1Zi1vYmpzLSQoQ09ORklHX1NXX1NZTkMpCQkrPSBzd19zeW5jLm8gc3luY19kZWJ1Zy5vCisrZG1hLWJ1Zi1vYmpzLSQoQ09ORklHX1VETUFCVUYpCQkrPSB1ZG1hYnVmLm8KKysKKytkbWEtc2hhcmVkLWJ1ZmZlci1vYmpzIDo9ICAkKGRtYS1idWYtb2Jqcy15KQorIAorIGRtYWJ1Zl9zZWxmdGVzdHMteSA6PSBcCisgCXNlbGZ0ZXN0Lm8gXAorLS0tIGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYworKysrIGIvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYworQEAgLTEzMTQsNCArMTMxNCw1IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBkbWFfYnVmX2RlaW5pdCh2b2lkKQorIAlkbWFfYnVmX3VuaW5pdF9kZWJ1Z2ZzKCk7CisgCWtlcm5fdW5tb3VudChkbWFfYnVmX21udCk7CisgfQorLV9fZXhpdGNhbGwoZG1hX2J1Zl9kZWluaXQpOworK21vZHVsZV9leGl0KGRtYV9idWZfZGVpbml0KTsKKytNT0RVTEVfTElDRU5TRSgiR1BMIik7CistLS0gYS9rZXJuZWwvc2NoZWQvY29yZS5jCisrKysgYi9rZXJuZWwvc2NoZWQvY29yZS5jCitAQCAtMjc3MCw2ICsyNzcwLDcgQEAgaW50IHdha2VfdXBfc3RhdGUoc3RydWN0IHRhc2tfc3RydWN0ICpwLAorIHsKKyAJcmV0dXJuIHRyeV90b193YWtlX3VwKHAsIHN0YXRlLCAwKTsKKyB9CisrRVhQT1JUX1NZTUJPTF9HUEwod2FrZV91cF9zdGF0ZSk7CisgCisgLyoKKyAgKiBQZXJmb3JtIHNjaGVkdWxlciByZWxhdGVkIHNldHVwIGZvciBhIG5ld2x5IGZvcmtlZCBwcm9jZXNzIHAuCistLS0gYS9mcy9kX3BhdGguYworKysrIGIvZnMvZF9wYXRoLmMKK0BAIC0zMTEsNiArMzExLDcgQEAgY2hhciAqZHluYW1pY19kbmFtZShzdHJ1Y3QgZGVudHJ5ICpkZW50cgorIAlidWZmZXIgKz0gYnVmbGVuIC0gc3o7CisgCXJldHVybiBtZW1jcHkoYnVmZmVyLCB0ZW1wLCBzeik7CisgfQorK0VYUE9SVF9TWU1CT0xfR1BMKGR5bmFtaWNfZG5hbWUpOworIAorIGNoYXIgKnNpbXBsZV9kbmFtZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmxlbikKKyB7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC85MTAta29iamVjdF91ZXZlbnQucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC85MTAta29iamVjdF91ZXZlbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRjNDFjYQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzkxMC1rb2JqZWN0X3VldmVudC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDBkMzdlNmVkYzA5Yzk5ZTY4M2RkOTFjYTBlODNiYmMwZGY4NDc3YjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CitEYXRlOiBTdW4sIDE2IEp1bCAyMDE3IDE2OjU2OjEwICswMjAwCitTdWJqZWN0OiBsaWI6IGFkZCB1ZXZlbnRfbmV4dF9zZXFudW0oKQorCitTaWduZWQtb2ZmLWJ5OiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CistLS0KKyBpbmNsdWRlL2xpbnV4L2tvYmplY3QuaCB8ICA1ICsrKysrCisgbGliL2tvYmplY3RfdWV2ZW50LmMgICAgfCAzNyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA0MiBpbnNlcnRpb25zKCspCisKKy0tLSBhL2xpYi9rb2JqZWN0X3VldmVudC5jCisrKysgYi9saWIva29iamVjdF91ZXZlbnQuYworQEAgLTE3OSw2ICsxNzksMTggQEAgb3V0OgorIAlyZXR1cm4gcjsKKyB9CisgCisrdTY0IHVldmVudF9uZXh0X3NlcW51bSh2b2lkKQorK3sKKysJdTY0IHNlcTsKKysKKysJbXV0ZXhfbG9jaygmdWV2ZW50X3NvY2tfbXV0ZXgpOworKwlzZXEgPSArK3VldmVudF9zZXFudW07CisrCW11dGV4X3VubG9jaygmdWV2ZW50X3NvY2tfbXV0ZXgpOworKworKwlyZXR1cm4gc2VxOworK30KKytFWFBPUlRfU1lNQk9MX0dQTCh1ZXZlbnRfbmV4dF9zZXFudW0pOworKworIC8qKgorICAqIGtvYmplY3Rfc3ludGhfdWV2ZW50IC0gc2VuZCBzeW50aGV0aWMgdWV2ZW50IHdpdGggYXJndW1lbnRzCisgICoKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzkxMS1rb2JqZWN0X2FkZF9icm9hZGNhc3RfdWV2ZW50LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvaGFjay01LjQvOTExLWtvYmplY3RfYWRkX2Jyb2FkY2FzdF91ZXZlbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY1ZTUwZAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzkxMS1rb2JqZWN0X2FkZF9icm9hZGNhc3RfdWV2ZW50LnBhdGNoCkBAIC0wLDAgKzEsNzYgQEAKK0Zyb20gMGQzN2U2ZWRjMDljOTllNjgzZGQ5MWNhMGU4M2JiYzBkZjg0NzdiMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KK0RhdGU6IFN1biwgMTYgSnVsIDIwMTcgMTY6NTY6MTAgKzAyMDAKK1N1YmplY3Q6IGxpYjogYWRkIHVldmVudF9uZXh0X3NlcW51bSgpCisKK1NpZ25lZC1vZmYtYnk6IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KKy0tLQorIGluY2x1ZGUvbGludXgva29iamVjdC5oIHwgIDUgKysrKysKKyBsaWIva29iamVjdF91ZXZlbnQuYyAgICB8IDM3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDQyIGluc2VydGlvbnMoKykKKworLS0tIGEvaW5jbHVkZS9saW51eC9rb2JqZWN0LmgKKysrKyBiL2luY2x1ZGUvbGludXgva29iamVjdC5oCitAQCAtMzIsNiArMzIsOCBAQAorICNkZWZpbmUgVUVWRU5UX05VTV9FTlZQCQkJMzIJLyogbnVtYmVyIG9mIGVudiBwb2ludGVycyAqLworICNkZWZpbmUgVUVWRU5UX0JVRkZFUl9TSVpFCQkyMDQ4CS8qIGJ1ZmZlciBmb3IgdGhlIHZhcmlhYmxlcyAqLworIAorK3N0cnVjdCBza19idWZmOworKworICNpZmRlZiBDT05GSUdfVUVWRU5UX0hFTFBFUgorIC8qIHBhdGggdG8gdGhlIHVzZXJzcGFjZSBoZWxwZXIgZXhlY3V0ZWQgb24gYW4gZXZlbnQgKi8KKyBleHRlcm4gY2hhciB1ZXZlbnRfaGVscGVyW107CitAQCAtMjQ1LDQgKzI0Nyw3IEBAIGludCBrb2JqZWN0X3N5bnRoX3VldmVudChzdHJ1Y3Qga29iamVjdAorIF9fcHJpbnRmKDIsIDMpCisgaW50IGFkZF91ZXZlbnRfdmFyKHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOworIAorK2ludCBicm9hZGNhc3RfdWV2ZW50KHN0cnVjdCBza19idWZmICpza2IsIF9fdTMyIHBpZCwgX191MzIgZ3JvdXAsCisrCQkgICAgIGdmcF90IGFsbG9jYXRpb24pOworKworICNlbmRpZiAvKiBfS09CSkVDVF9IXyAqLworLS0tIGEvbGliL2tvYmplY3RfdWV2ZW50LmMKKysrKyBiL2xpYi9rb2JqZWN0X3VldmVudC5jCitAQCAtNjkxLDYgKzY5MSw0MyBAQCBpbnQgYWRkX3VldmVudF92YXIoc3RydWN0IGtvYmpfdWV2ZW50X2VuCisgRVhQT1JUX1NZTUJPTF9HUEwoYWRkX3VldmVudF92YXIpOworIAorICNpZiBkZWZpbmVkKENPTkZJR19ORVQpCisraW50IGJyb2FkY2FzdF91ZXZlbnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX191MzIgcGlkLCBfX3UzMiBncm91cCwKKysJCSAgICAgZ2ZwX3QgYWxsb2NhdGlvbikKKyt7CisrCXN0cnVjdCB1ZXZlbnRfc29jayAqdWVfc2s7CisrCWludCBlcnIgPSAwOworKworKwkvKiBzZW5kIG5ldGxpbmsgbWVzc2FnZSAqLworKwltdXRleF9sb2NrKCZ1ZXZlbnRfc29ja19tdXRleCk7CisrCWxpc3RfZm9yX2VhY2hfZW50cnkodWVfc2ssICZ1ZXZlbnRfc29ja19saXN0LCBsaXN0KSB7CisrCQlzdHJ1Y3Qgc29jayAqdWV2ZW50X3NvY2sgPSB1ZV9zay0+c2s7CisrCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjsKKysKKysJCXNrYjIgPSBza2JfY2xvbmUoc2tiLCBhbGxvY2F0aW9uKTsKKysJCWlmICghc2tiMikKKysJCQlicmVhazsKKysKKysJCWVyciA9IG5ldGxpbmtfYnJvYWRjYXN0KHVldmVudF9zb2NrLCBza2IyLCBwaWQsIGdyb3VwLAorKwkJCQkJYWxsb2NhdGlvbik7CisrCQlpZiAoZXJyKQorKwkJCWJyZWFrOworKwl9CisrCW11dGV4X3VubG9jaygmdWV2ZW50X3NvY2tfbXV0ZXgpOworKworKwlrZnJlZV9za2Ioc2tiKTsKKysJcmV0dXJuIGVycjsKKyt9CisrI2Vsc2UKKytpbnQgYnJvYWRjYXN0X3VldmVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX3UzMiBwaWQsIF9fdTMyIGdyb3VwLAorKwkJICAgICBnZnBfdCBhbGxvY2F0aW9uKQorK3sKKysJa2ZyZWVfc2tiKHNrYik7CisrCXJldHVybiAwOworK30KKysjZW5kaWYKKytFWFBPUlRfU1lNQk9MX0dQTChicm9hZGNhc3RfdWV2ZW50KTsKKysKKysjaWYgZGVmaW5lZChDT05GSUdfTkVUKQorIHN0YXRpYyBpbnQgdWV2ZW50X25ldF9icm9hZGNhc3Qoc3RydWN0IHNvY2sgKnVzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKyAJCQkJc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQorIHsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL2hhY2stNS40LzkyMS1hbHdheXMtY3JlYXRlLWNvbnNvbGUtbm9kZS1pbi1pbml0cmFtZnMucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC85MjEtYWx3YXlzLWNyZWF0ZS1jb25zb2xlLW5vZGUtaW4taW5pdHJhbWZzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0Mzc1NzkKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC85MjEtYWx3YXlzLWNyZWF0ZS1jb25zb2xlLW5vZGUtaW4taW5pdHJhbWZzLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gNWQzMDE1OTZmZGM3MmY2Y2I2NzJmNzJlYjNjNjZlN2NkZGVmYjEwMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KK0RhdGU6IFNhdCwgOCBKdWwgMjAxNyAwODoyNjowMiArMDIwMAorU3ViamVjdDogaW5pdHJhbWZzOiBhbHdheXMgY3JlYXRlIGNvbnNvbGUgbm9kZQorCitTaWduZWQtb2ZmLWJ5OiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CistLS0KKyB1c3IvZ2VuX2luaXRyYW1mc19saXN0LnNoIHwgMTQgKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKQorCistLS0gYS91c3IvZ2VuX2luaXRyYW1mc19saXN0LnNoCisrKysgYi91c3IvZ2VuX2luaXRyYW1mc19saXN0LnNoCitAQCAtNTksNiArNTksMTggQEAgZGVmYXVsdF9pbml0cmFtZnMoKSB7CisgCUVPRgorIH0KKyAKKytsaXN0X29wZW53cnRfaW5pdHJhbWZzKCkgeworKwk6CisrfQorKworK29wZW53cnRfaW5pdHJhbWZzKCkgeworKwkjIG1ha2Ugc3VyZSB0aGF0IC9kZXYvY29uc29sZSBleGlzdHMKKysJY2F0IDw8LUVPRiA+PiAke291dHB1dH0KKysJCWRpciAvZGV2IDA3NTUgMCAwCisrCQlub2QgL2Rldi9jb25zb2xlIDA2MDAgMCAwIGMgNSAxCisrCUVPRgorK30KKysKKyBmaWxldHlwZSgpIHsKKyAJbG9jYWwgYXJndjE9IiQxIgorIAorQEAgLTE4MCw2ICsxOTIsOCBAQCBkaXJfZmlsZWxpc3QoKSB7CisgCWlmIFsgICIkKGVjaG8gIiR7ZGlybGlzdH0iIHwgd2MgLWwpIiAtZ3QgMSBdOyB0aGVuCisgCQkke2RlcF9saXN0fXByaW50X210aW1lICIkMSIKKyAKKysJCSR7ZGVwX2xpc3R9b3BlbndydF9pbml0cmFtZnMKKysKKyAJCWVjaG8gIiR7ZGlybGlzdH0iIHwgXAorIAkJd2hpbGUgcmVhZCB4OyBkbworIAkJCSR7ZGVwX2xpc3R9cGFyc2UgJHt4fQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvaGFjay01LjQvaGFjay01LjQuaW5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvaGFjay01LjQvaGFjay01LjQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNzYzMTUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9oYWNrLTUuNC9oYWNrLTUuNC5pbmMKQEAgLTAsMCArMSw0NCBAQAorI3BhdGNoIGhhY2stNS40IChjb21lIGZyb20gb3BlbndydC9sZWRlL3RhcmdldC9saW51eC9tZWRpYXRlaykKK1NSQ19VUklfYXBwZW5kID0gIiBcCisgICAgZmlsZTovLzIwNC1tb2R1bGVfc3RyaXAucGF0Y2ggXAorICAgIGZpbGU6Ly8yMTAtZGFyd2luX3NjcmlwdHNfaW5jbHVkZS5wYXRjaCBcCisgICAgZmlsZTovLzIxMS1kYXJ3aW4tdXVpZC10eXBlZGVmLWNsYXNoLnBhdGNoIFwKKyAgICBmaWxlOi8vMjEyLXRvb2xzX3BvcnRhYmlsaXR5LnBhdGNoIFwKKyAgICBmaWxlOi8vMjE0LXNwaWRldl9oX3BvcnRhYmlsaXR5LnBhdGNoIFwKKyAgICBmaWxlOi8vMjIwLWdjX3NlY3Rpb25zLnBhdGNoIFwKKyAgICBmaWxlOi8vMjIxLW1vZHVsZV9leHBvcnRzLnBhdGNoIFwKKyAgICBmaWxlOi8vMjMwLW9wZW53cnRfbHptYV9vcHRpb25zLnBhdGNoIFwKKyAgICBmaWxlOi8vMjQ5LXVkcC10dW5uZWwtc2VsZWN0aW9uLnBhdGNoIFwKKyAgICBmaWxlOi8vMjUwLW5ldGZpbHRlcl9kZXBlbmRzLnBhdGNoIFwKKyAgICBmaWxlOi8vMjUxLXNvdW5kX2tjb25maWcucGF0Y2ggXAorICAgIGZpbGU6Ly8yNTktcmVnbWFwX2R5bmFtaWMucGF0Y2ggXAorICAgIGZpbGU6Ly8yNjAtY3J5cHRvX3Rlc3RfZGVwZW5kZW5jaWVzLnBhdGNoIFwKKyAgICBmaWxlOi8vMjYwLWxpYi1hcmM0LXVuaGlkZS5wYXRjaCBcCisgICAgZmlsZTovLzI4MC1yZmtpbGwtc3R1YnMucGF0Y2ggXAorICAgIGZpbGU6Ly8zMDAtTUlQUy1yNGtfY2FjaGUtdXNlLW1vcmUtZWZmaWNpZW50LWNhY2hlLWJsYXN0LnBhdGNoIFwKKyAgICBmaWxlOi8vMzAxLW1pcHNfaW1hZ2VfY21kbGluZV9oYWNrLnBhdGNoIFwKKyAgICBmaWxlOi8vMzIxLXBvd2VycGNfY3J0c2F2cmVzX3ByZXJlcS5wYXRjaCBcCisgICAgZmlsZTovLzQwMC11bmxvY2tfbXgyNWw2NDA2ZV93aXRoXzRiaXRfYmxvY2tfcHJvdGVjdC5wYXRjaCBcCisgICAgZmlsZTovLzUzMS1kZWJsb2F0X2x6bWEucGF0Y2ggXAorICAgIGZpbGU6Ly81NTAtbG9vcC1SZXBvcnQtRU9QTk9UU1VQUC1wcm9wZXJseS5wYXRjaCBcCisgICAgZmlsZTovLzY0MC1icmlkZ2Utb25seS1hY2NlcHQtRUFQLWxvY2FsbHkucGF0Y2ggXAorICAgIGZpbGU6Ly82NDUtbmV0ZmlsdGVyLWNvbm5tYXJrLWludHJvZHVjZS1zZXQtZHNjcG1hcmsucGF0Y2ggXAorICAgIGZpbGU6Ly82NDctbmV0ZmlsdGVyLWZsb3ctYWNjdC5wYXRjaCBcCisgICAgZmlsZTovLzY1MC1uZXRmaWx0ZXItYWRkLXh0X09GRkxPQUQtdGFyZ2V0LnBhdGNoIFwKKyAgICBmaWxlOi8vNjUxLXdpcmVsZXNzX21lc2hfaGVhZGVyLnBhdGNoIFwKKyAgICBmaWxlOi8vNjYwLWZxX2NvZGVsX2RlZmF1bHRzLnBhdGNoIFwKKyAgICBmaWxlOi8vNjYxLXVzZV9mcV9jb2RlbF9ieV9kZWZhdWx0LnBhdGNoIFwKKyAgICBmaWxlOi8vNjYyLXJlbW92ZV9wZmlmb19mYXN0LnBhdGNoIFwKKyAgICBmaWxlOi8vNzAwLXN3Y29uZmlnX3N3aXRjaF9kcml2ZXJzLnBhdGNoIFwKKyAgICBmaWxlOi8vNzAzLWFkZF92c2M4NTA0X3N1cHBvcnQucGF0Y2ggXAorICAgIGZpbGU6Ly83MTAtbmV0LWRzYS1tdjg4ZTZ4eHgtZGVmYXVsdC1WSUQtMS5wYXRjaCBcCisgICAgZmlsZTovLzcxMS1uZXQtZHNhLW12ODhlNnh4eC1kaXNhYmxlLUFUVS12aW9sYXRpb24ucGF0Y2ggXAorICAgIGZpbGU6Ly83MjEtcGh5X3BhY2tldHMucGF0Y2ggXAorICAgIGZpbGU6Ly83NzMtYmdtYWMtYWRkLXNyYWItc3dpdGNoLnBhdGNoIFwKKyAgICBmaWxlOi8vOTAxLWRlYmxvYXRfc29ja19kaWFnLnBhdGNoIFwKKyAgICBmaWxlOi8vOTAyLWRlYmxvYXRfcHJvYy5wYXRjaCBcCisgICAgZmlsZTovLzkwNC1kZWJsb2F0X2RtYV9idWYucGF0Y2ggXAorICAgIGZpbGU6Ly85MTAta29iamVjdF91ZXZlbnQucGF0Y2ggXAorICAgIGZpbGU6Ly85MTEta29iamVjdF9hZGRfYnJvYWRjYXN0X3VldmVudC5wYXRjaCBcCisgICAgZmlsZTovLzkyMS1hbHdheXMtY3JlYXRlLWNvbnNvbGUtbm9kZS1pbi1pbml0cmFtZnMucGF0Y2ggXAorICAgICIKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzA5MzEtdzEtZ3Bpby1maXgtcHJvYmxlbS13aXRoLXBsYXRmb20tZGF0YS1pbi13MS1ncGlvLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvMDkzMS13MS1ncGlvLWZpeC1wcm9ibGVtLXdpdGgtcGxhdGZvbS1kYXRhLWluLXcxLWdwaW8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNlYjM0YwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzA5MzEtdzEtZ3Bpby1maXgtcHJvYmxlbS13aXRoLXBsYXRmb20tZGF0YS1pbi13MS1ncGlvLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK0Zyb20gZDljOGJjOGMxNDA4ZjNlODUyOWRiNmU0ZTA0MDE3YjRjNTc5YzM0MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhd2VsIERlbWJpY2tpIDxwYXdlbGRlbWJpY2tpQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgMTggRmViIDIwMTggMTc6MDg6MDQgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gdzE6IGdwaW86IGZpeCBwcm9ibGVtIHdpdGggcGxhdGZvbSBkYXRhIGluIHcxLWdwaW8KKworSW4gZGV2aWNlcywgd2hlcmUgZmR0IGlzIHVzZWQsIGlzIGltcG9zc2libGUgdG8gYXBwbHkgcGxhdGZvcm0gZGF0YQord2l0aG91dCBwcm9wZXIgZmR0IG5vZGUuCisKK1RoaXMgcGF0Y2ggYWxsb3cgdG8gdXNlIHBsYXRmb3JtIGRhdGEgaW4gZGV2aWNlcyB3aXRoIGZkdC4KKworU2lnbmVkLW9mZi1ieTogUGF3ZWwgRGVtYmlja2kgPHBhd2VsZGVtYmlja2lAZ21haWwuY29tPgorLS0tCisgZHJpdmVycy93MS9tYXN0ZXJzL3cxLWdwaW8uYyB8IDcgKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvdzEvbWFzdGVycy93MS1ncGlvLmMKKysrKyBiL2RyaXZlcnMvdzEvbWFzdGVycy93MS1ncGlvLmMKK0BAIC03Niw3ICs3Niw3IEBAIHN0YXRpYyBpbnQgdzFfZ3Bpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm0KKyAJZW51bSBncGlvZF9mbGFncyBnZmxhZ3MgPSBHUElPRF9PVVRfTE9XX09QRU5fRFJBSU47CisgCWludCBlcnI7CisgCistCWlmIChvZl9oYXZlX3BvcHVsYXRlZF9kdCgpKSB7CisrCWlmIChvZl9oYXZlX3BvcHVsYXRlZF9kdCgpICYmICFkZXZfZ2V0X3BsYXRkYXRhKCZwZGV2LT5kZXYpKSB7CisgCQlwZGF0YSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnBkYXRhKSwgR0ZQX0tFUk5FTCk7CisgCQlpZiAoIXBkYXRhKQorIAkJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvMTAyLU1JUFMtb25seS1wcm9jZXNzLW5lZ2F0aXZlLXN0YWNrLW9mZnNldHMtb24tc3RhY2stdHIucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC8xMDItTUlQUy1vbmx5LXByb2Nlc3MtbmVnYXRpdmUtc3RhY2stb2Zmc2V0cy1vbi1zdGFjay10ci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTMxOTQxCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvMTAyLU1JUFMtb25seS1wcm9jZXNzLW5lZ2F0aXZlLXN0YWNrLW9mZnNldHMtb24tc3RhY2stdHIucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorRnJvbTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorRGF0ZTogV2VkLCAxOCBBcHIgMjAxOCAxMDo1MDowNSArMDIwMAorU3ViamVjdDogW1BBVENIXSBNSVBTOiBvbmx5IHByb2Nlc3MgbmVnYXRpdmUgc3RhY2sgb2Zmc2V0cyBvbiBzdGFjayB0cmFjZXMKKworRml4ZXMgZW5kbGVzcyBiYWNrIHRyYWNlcyBpbiBjYXNlcyB3aGVyZSB0aGUgY29tcGlsZXIgZW1pdHMgYSBzdGFjaworcG9pbnRlciBpbmNyZWFzZSBpbiBhIGJyYW5jaCBkZWxheSBzbG90IChwcm9iYWJseSBmb3Igc29tZSBmb3JtIG9mCitmdW5jdGlvbiByZXR1cm4pLgorCitbICAgIDMuNDc1NDQyXSBCVUc6IE1BWF9TVEFDS19UUkFDRV9FTlRSSUVTIHRvbyBsb3chCitbICAgIDMuNDgwMDcwXSB0dXJuaW5nIG9mZiB0aGUgbG9ja2luZyBjb3JyZWN0bmVzcyB2YWxpZGF0b3IuCitbICAgIDMuNDg1NTIxXSBDUFU6IDAgUElEOiAxIENvbW06IHN3YXBwZXIvMCBOb3QgdGFpbnRlZCA0LjE0LjM0ICMwCitbICAgIDMuNDkxNDc1XSBTdGFjayA6IDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDgwZTBmY2UyIDAwMDAwMDM0IDAwMDAwMDAwIDAwMDAwMDAwCitbICAgIDMuNDk5NzY0XSAgICAgICAgIDg3YzM4MzhjIDgwNjk2Mzc3IDgwNjEwNDdjIDAwMDAwMDAwIDAwMDAwMDAxIDAwMDAwMDAxIDg3YzJkODUwIDY1MzQ2ODlmCitbICAgIDMuNTA4MDU5XSAgICAgICAgIDAwMDAwMDAwIDAwMDAwMDAwIDgwZTEwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMGNmIDAwMDAwMDBmIDAwMDAwMDAwCitbICAgIDMuNTE2MzUzXSAgICAgICAgIDAwMDAwMDAwIDgwNmEwMDAwIDAwMDc2ODkxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIDAwMDAwMDAwCitbICAgIDMuNTI0NjQ4XSAgICAgICAgIDgwNmMwMDAwIDAwMDAwMDA0IDgwZTEwMDAwIDgwNmEwMDAwIDAwMDAwMDAzIDgwNjkwMDAwIDAwMDAwMDAwIDgwNzAwMDAwCitbICAgIDMuNTMyOTQyXSAgICAgICAgIC4uLgorWyAgICAzLjUzNTM2Ml0gQ2FsbCBUcmFjZToKK1sgICAgMy41Mzc4MThdIFs8ODAwMTBhNDg+XSBzaG93X3N0YWNrKzB4NTgvMHgxMDAKK1sgICAgMy41NDIyMDddIFs8ODA0YzJmNzg+XSBkdW1wX3N0YWNrKzB4ZTgvMHgxNzAKK1sgICAgMy41NDY2MTNdIFs8ODAwNzlmOTA+XSBzYXZlX3RyYWNlKzB4ZjAvMHgxMTAKK1sgICAgMy41NTEwMTBdIFs8ODAwN2IxZWM+XSBtYXJrX2xvY2srMHgzM2MvMHg3OGMKK1sgICAgMy41NTU0MTNdIFs8ODAwN2JmNDg+XSBfX2xvY2tfYWNxdWlyZSsweDJhYy8weDFhMDgKK1sgICAgMy41NjAzMzddIFs8ODAwN2RlNjA+XSBsb2NrX2FjcXVpcmUrMHg2NC8weDhjCitbICAgIDMuNTY0ODQ2XSBbPDgwNGUxNTcwPl0gX3Jhd19zcGluX2xvY2tfaXJxc2F2ZSsweDU0LzB4NzgKK1sgICAgMy41NzAxODZdIFs8ODAxYjYxOGM+XSBrZXJuZnNfbm90aWZ5KzB4OTQvMHhhYworWyAgICAzLjU3NDc3MF0gWzw4MDFiN2IxMD5dIHN5c2ZzX25vdGlmeSsweDc0LzB4YTAKK1sgICAgMy41NzkyNTddIFs8ODAxYjYxOGM+XSBrZXJuZnNfbm90aWZ5KzB4OTQvMHhhYworWyAgICAzLjU4MzgzOV0gWzw4MDFiN2IxMD5dIHN5c2ZzX25vdGlmeSsweDc0LzB4YTAKK1sgICAgMy41ODgzMjldIFs8ODAxYjYxOGM+XSBrZXJuZnNfbm90aWZ5KzB4OTQvMHhhYworWyAgICAzLjU5MjkxMV0gWzw4MDFiN2IxMD5dIHN5c2ZzX25vdGlmeSsweDc0LzB4YTAKK1sgICAgMy41OTc0MDFdIFs8ODAxYjYxOGM+XSBrZXJuZnNfbm90aWZ5KzB4OTQvMHhhYworWyAgICAzLjYwMTk4M10gWzw4MDFiN2IxMD5dIHN5c2ZzX25vdGlmeSsweDc0LzB4YTAKK1sgICAgMy42MDY0NzNdIFs8ODAxYjYxOGM+XSBrZXJuZnNfbm90aWZ5KzB4OTQvMHhhYworWyAgICAzLjYxMTA1NV0gWzw4MDFiN2IxMD5dIHN5c2ZzX25vdGlmeSsweDc0LzB4YTAKK1sgICAgMy42MTU1NDVdIFs8ODAxYjYxOGM+XSBrZXJuZnNfbm90aWZ5KzB4OTQvMHhhYworWyAgICAzLjYyMDEyNV0gWzw4MDFiN2IxMD5dIHN5c2ZzX25vdGlmeSsweDc0LzB4YTAKK1sgICAgMy42MjQ2MTldIFs8ODAxYjYxOGM+XSBrZXJuZnNfbm90aWZ5KzB4OTQvMHhhYworWyAgICAzLjYyOTE5N10gWzw4MDFiN2IxMD5dIHN5c2ZzX25vdGlmeSsweDc0LzB4YTAKK1sgICAgMy42MzM2OTFdIFs8ODAxYjYxOGM+XSBrZXJuZnNfbm90aWZ5KzB4OTQvMHhhYworWyAgICAzLjYzODI2OV0gWzw4MDFiN2IxMD5dIHN5c2ZzX25vdGlmeSsweDc0LzB4YTAKK1sgICAgMy42NDI3NjNdIFs8ODAxYjYxOGM+XSBrZXJuZnNfbm90aWZ5KzB4OTQvMHhhYworCitTaWduZWQtb2ZmLWJ5OiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CistLS0KKworLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMKKysrKyBiL2FyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jCitAQCAtMzY1LDYgKzM2NSw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IGlzX3NwX21vdmVfaW5zKHVuaW9uIG0KKyAKKyAJaWYgKGlwLT5pX2Zvcm1hdC5vcGNvZGUgPT0gYWRkaXVfb3AgfHwKKyAJICAgIGlwLT5pX2Zvcm1hdC5vcGNvZGUgPT0gZGFkZGl1X29wKSB7CisrCQlpZiAoaXAtPmlfZm9ybWF0LnNpbW1lZGlhdGUgPiAwKQorKwkJCXJldHVybiAwOworIAkJKmZyYW1lX3NpemUgPSAtaXAtPmlfZm9ybWF0LnNpbW1lZGlhdGU7CisgCQlyZXR1cm4gMTsKKyAJfQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvMTAzLU1JUFMtc2VsZWN0LUNQVV9NSVBTNjQtZm9yLXJlbWFpbmluZy1NSVBTNjQtQ1BVcy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzEwMy1NSVBTLXNlbGVjdC1DUFVfTUlQUzY0LWZvci1yZW1haW5pbmctTUlQUzY0LUNQVXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk2MGMyNAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzEwMy1NSVBTLXNlbGVjdC1DUFVfTUlQUzY0LWZvci1yZW1haW5pbmctTUlQUzY0LUNQVXMucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorRnJvbSAzMWNhODc3NzQ0ZDk1NzEzZTQ5MjVkZTU0MmUxYzY4NmFiMDhhNTQyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIkphc29uIEEuIERvbmVuZmVsZCIgPEphc29uQHp4MmM0LmNvbT4KK0RhdGU6IFNhdCwgMjcgRmViIDIwMjEgMTM6MjA6MjQgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gTUlQUzogc2VsZWN0IENQVV9NSVBTNjQgZm9yIHJlbWFpbmluZyBNSVBTNjQgQ1BVcworCitUaGUgQ1BVX01JUFM2NCBhbmQgQ1BVX01JUFMzMiB2YXJpYWJsZXMgYXJlIHN1cHBvc2VkIHRvIGJlIGFibGUgdG8KK2Rpc3Rpbmd1aXNoIGJyb2FkbHkgYmV0d2VlbiA2NC1iaXQgYW5kIDMyLWJpdCBNSVBTIENQVXMuIEhvd2V2ZXIsIHRoZXkKK3dlcmVuJ3Qgc2VsZWN0ZWQgYnkgdGhlIHNwZWNpYWx0eSBDUFVzLCBPY3Rlb24gYW5kIExvb25nc29uLCB3aGljaCBtZWFudAoraXQgd2FzIHBvc3NpYmxlIHRvIGhpdCBhIHdlaXJkIHN0YXRlIG9mOgorCisgICAgTUlQUz15LCBDT05GSUdfNjRCSVQ9eSwgQ1BVX01JUFM2ND1uCisKK1RoaXMgY29tbWl0IHJlY3RpZmllcyB0aGUgaXNzdWUgYnkgaGF2aW5nIENQVV9NSVBTNjQgYmUgc2VsZWN0ZWQgd2hlbgordGhlIG1pc3NpbmcgT2N0ZW9uIG9yIExvb25nc29uIG1vZGVscyBhcmUgc2VsZWN0ZWQuCisKK0NjOiBUaG9tYXMgQm9nZW5kb2VyZmVyIDx0c2JvZ2VuZEBhbHBoYS5mcmFua2VuLmRlPgorQ2M6IFJhbGYgQmFlY2hsZSA8cmFsZkBsaW51eC1taXBzLm9yZz4KK0NjOiBHZW9yZ2UgQ2hlcmlhbiA8Z2NoZXJpYW5AbWFydmVsbC5jb20+CitDYzogSHVhY2FpIENoZW4gPGNoZW5odWFjYWlAa2VybmVsLm9yZz4KK0NjOiBKaWF4dW4gWWFuZyA8amlheHVuLnlhbmdAZmx5Z29hdC5jb20+CitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4KKy0tLQorIGFyY2gvbWlwcy9LY29uZmlnIHwgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSBhL2FyY2gvbWlwcy9LY29uZmlnCisrKysgYi9hcmNoL21pcHMvS2NvbmZpZworQEAgLTIwNDEsNyArMjA0MSw4IEBAIGNvbmZpZyBDUFVfTUlQUzMyCisgCisgY29uZmlnIENQVV9NSVBTNjQKKyAJYm9vbAorLQlkZWZhdWx0IHkgaWYgQ1BVX01JUFM2NF9SMSB8fCBDUFVfTUlQUzY0X1IyIHx8IENQVV9NSVBTNjRfUjYKKysJZGVmYXVsdCB5IGlmIENQVV9NSVBTNjRfUjEgfHwgQ1BVX01JUFM2NF9SMiB8fCBDUFVfTUlQUzY0X1I2IHx8IFwKKysJCSAgICAgQ1BVX0xPT05HU09ONjQgfHwgQ1BVX0NBVklVTV9PQ1RFT04KKyAKKyAjCisgIyBUaGVzZSBpbmRpY2F0ZSB0aGUgcmV2aXNpb24gb2YgdGhlIGFyY2hpdGVjdHVyZQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvMTEwLWVoY2lfaGNkX2lnbm9yZV9vYy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzExMC1laGNpX2hjZF9pZ25vcmVfb2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQxZTlkZAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzExMC1laGNpX2hjZF9pZ25vcmVfb2MucGF0Y2gKQEAgLTAsMCArMSw3OSBAQAorRnJvbTogRmxvcmlhbiBGYWluZWxsaSA8ZmxvcmlhbkBvcGVud3J0Lm9yZz4KK1N1YmplY3Q6IFVTQjogRUhDSTogYWRkIGlnbm9yZV9vYyBmbGFnIHRvIGRpc2FibGUgb3ZlcmN1cnJlbnQgY2hlY2tpbmcKKworVGhpcyBwYXRjaCBhZGRzIGFuIGlnbm9yZV9vYyBmbGFnIHdoaWNoIGNhbiBiZSBzZXQgYnkgRUhDSSBjb250cm9sbGVyCitub3Qgc3VwcG9ydGluZyBvciB3YW50aW5nIHRvIGRpc2FibGUgb3ZlcmN1cnJlbnQgY2hlY2tpbmcuIFRoZSBFSENJCitwbGF0Zm9ybSBkYXRhIGluIGluY2x1ZGUvbGludXgvdXNiL2VoY2lfcGRyaXZlci5oIGlzIGFsc28gYXVnbWVudGVkIHRvCit0YWtlIGFkdmFudGFnZSBvZiB0aGlzIG5ldyBmbGFnLgorCitTaWduZWQtb2ZmLWJ5OiBGbG9yaWFuIEZhaW5lbGxpIDxmbG9yaWFuQG9wZW53cnQub3JnPgorLS0tCisgZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jICAgICAgfCAgICAyICstCisgZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jICAgICAgfCAgICA0ICsrLS0KKyBkcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGxhdGZvcm0uYyB8ICAgIDEgKworIGRyaXZlcnMvdXNiL2hvc3QvZWhjaS5oICAgICAgICAgIHwgICAgMSArCisgaW5jbHVkZS9saW51eC91c2IvZWhjaV9wZHJpdmVyLmggfCAgICAxICsKKyA1IGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCisrKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKK0BAIC02NjAsNyArNjYwLDcgQEAgc3RhdGljIGludCBlaGNpX3J1biAoc3RydWN0IHVzYl9oY2QgKmhjZAorIAkJIlVTQiAleC4leCBzdGFydGVkLCBFSENJICV4LiUwMnglc1xuIiwKKyAJCSgoZWhjaS0+c2JybiAmIDB4ZjApPj40KSwgKGVoY2ktPnNicm4gJiAweDBmKSwKKyAJCXRlbXAgPj4gOCwgdGVtcCAmIDB4ZmYsCistCQlpZ25vcmVfb2MgPyAiLCBvdmVyY3VycmVudCBpZ25vcmVkIiA6ICIiKTsKKysJCShpZ25vcmVfb2MgfHwgZWhjaS0+aWdub3JlX29jKSA/ICIsIG92ZXJjdXJyZW50IGlnbm9yZWQiIDogIiIpOworIAorIAllaGNpX3dyaXRlbChlaGNpLCBJTlRSX01BU0ssCisgCQkgICAgJmVoY2ktPnJlZ3MtPmludHJfZW5hYmxlKTsgLyogVHVybiBPbiBJbnRlcnJ1cHRzICovCistLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMKKysrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYworQEAgLTY0Myw3ICs2NDMsNyBAQCBlaGNpX2h1Yl9zdGF0dXNfZGF0YSAoc3RydWN0IHVzYl9oY2QgKmhjCisgCSAqIGFsd2F5cyBzZXQsIHNlZW0gdG8gY2xlYXIgUE9SVF9PQ0MgYW5kIFBPUlRfQ1NDIHdoZW4gd3JpdGluZyB0bworIAkgKiBQT1JUX1BPV0VSOyB0aGF0J3Mgc3VycHJpc2luZywgYnV0IG1heWJlIHdpdGhpbi1zcGVjLgorIAkgKi8KKy0JaWYgKCFpZ25vcmVfb2MpCisrCWlmICghaWdub3JlX29jICYmICFlaGNpLT5pZ25vcmVfb2MpCisgCQltYXNrID0gUE9SVF9DU0MgfCBQT1JUX1BFQyB8IFBPUlRfT0NDOworIAllbHNlCisgCQltYXNrID0gUE9SVF9DU0MgfCBQT1JUX1BFQzsKK0BAIC0xMDEzLDcgKzEwMTMsNyBAQCBpbnQgZWhjaV9odWJfY29udHJvbCgKKyAJCWlmICh0ZW1wICYgUE9SVF9QRUMpCisgCQkJc3RhdHVzIHw9IFVTQl9QT1JUX1NUQVRfQ19FTkFCTEUgPDwgMTY7CisgCistCQlpZiAoKHRlbXAgJiBQT1JUX09DQykgJiYgIWlnbm9yZV9vYyl7CisrCQlpZiAoKHRlbXAgJiBQT1JUX09DQykgJiYgKCFpZ25vcmVfb2MgJiYgIWVoY2ktPmlnbm9yZV9vYykpeworIAkJCXN0YXR1cyB8PSBVU0JfUE9SVF9TVEFUX0NfT1ZFUkNVUlJFTlQgPDwgMTY7CisgCisgCQkJLyoKKy0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wbGF0Zm9ybS5jCisrKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGxhdGZvcm0uYworQEAgLTMyNSw2ICszMjUsOCBAQCBzdGF0aWMgaW50IGVoY2lfcGxhdGZvcm1fcHJvYmUoc3RydWN0IHBsCisgCQloY2QtPmhhc190dCA9IDE7CisgCWlmIChwZGF0YS0+cmVzZXRfb25fcmVzdW1lKQorIAkJcHJpdi0+cmVzZXRfb25fcmVzdW1lID0gdHJ1ZTsKKysJaWYgKHBkYXRhLT5pZ25vcmVfb2MpCisrCQllaGNpLT5pZ25vcmVfb2MgPSAxOworIAorICNpZm5kZWYgQ09ORklHX1VTQl9FSENJX0JJR19FTkRJQU5fTU1JTworIAlpZiAoZWhjaS0+YmlnX2VuZGlhbl9tbWlvKSB7CistLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2kuaAorKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLmgKK0BAIC0yMTksNiArMjE5LDcgQEAgc3RydWN0IGVoY2lfaGNkIHsJCQkvKiBvbmUgcGVyIGNvbnRyb2xsZQorIAl1bnNpZ25lZAkJbmVlZF9vY19wcF9jeWNsZToxOyAvKiBNUEM4MzRYIHBvcnQgcG93ZXIgKi8KKyAJdW5zaWduZWQJCWlteDI4X3dyaXRlX2ZpeDoxOyAvKiBGb3IgRnJlZXNjYWxlIGkuTVgyOCAqLworIAl1bnNpZ25lZAkJaXNfYXNwZWVkOjE7CisrCXVuc2lnbmVkCQlpZ25vcmVfb2M6MTsKKyAKKyAJLyogcmVxdWlyZWQgZm9yIHVzYjMyIHF1aXJrICovCisgCSNkZWZpbmUgT0hDSV9DVFJMX0hDRlMgICAgICAgICAgKDMgPDwgNikKKy0tLSBhL2luY2x1ZGUvbGludXgvdXNiL2VoY2lfcGRyaXZlci5oCisrKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9laGNpX3Bkcml2ZXIuaAorQEAgLTUwLDYgKzUwLDcgQEAgc3RydWN0IHVzYl9laGNpX3BkYXRhIHsKKyAJdW5zaWduZWQJbm9faW9fd2F0Y2hkb2c6MTsKKyAJdW5zaWduZWQJcmVzZXRfb25fcmVzdW1lOjE7CisgCXVuc2lnbmVkCWRtYV9tYXNrXzY0OjE7CisrCXVuc2lnbmVkCWlnbm9yZV9vYzoxOworIAorIAkvKiBUdXJuIG9uIGFsbCBwb3dlciBhbmQgY2xvY2tzICovCisgCWludCAoKnBvd2VyX29uKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzEyMC1GaXgtYWxsb2Nfbm9kZV9tZW1fbWFwLXdpdGgtQVJDSF9QRk5fT0ZGU0VULWNhbGN1LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvMTIwLUZpeC1hbGxvY19ub2RlX21lbV9tYXAtd2l0aC1BUkNIX1BGTl9PRkZTRVQtY2FsY3UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDllODI2NwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzEyMC1GaXgtYWxsb2Nfbm9kZV9tZW1fbWFwLXdpdGgtQVJDSF9QRk5fT0ZGU0VULWNhbGN1LnBhdGNoCkBAIC0wLDAgKzEsODIgQEAKK0Zyb206IFRvYmlhcyBXb2xmIDxkZXYtTlRFT0B2cGxhY2UuZGU+CitTdWJqZWN0OiBtbTogRml4IGFsbG9jX25vZGVfbWVtX21hcCB3aXRoIEFSQ0hfUEZOX09GRlNFVCBjYWxjdWxhdGlvbgorCitBbiBydDI4OHggKHJhbGluaykgYmFzZWQgcm91dGVyIChCZWxraW4gRjVEODIzNSB2MSkgZG9lcyBub3QgYm9vdCB3aXRoIGFueQora2VybmVsIGJleW9uZCB2ZXJzaW9uIDQuMyByZXN1bHRpbmcgaW46CisKK0JVRzogQmFkIHBhZ2Ugc3RhdGUgaW4gcHJvY2VzcyBzd2FwcGVyICBwZm46MDg2YWMKKworYmlzZWN0IHJlc3VsdGVkIGluOgorCithMWMzNGEzYmYwMGFmMmNlZGU4Mzk4Nzk1MDJlMTJkYzY4NDkxYWQ1IGlzIHRoZSBmaXJzdCBiYWQgY29tbWl0Citjb21taXQgYTFjMzRhM2JmMDBhZjJjZWRlODM5ODc5NTAyZTEyZGM2ODQ5MWFkNQorQXV0aG9yOiBMYXVyYSBBYmJvdHQgPGxhdXJhQGxhYmJvdHQubmFtZT4KK0RhdGU6ICAgVGh1IE5vdiA1IDE4OjQ4OjQ2IDIwMTUgLTA4MDAKKworICAgIG1tOiBEb24ndCBvZmZzZXQgbWVtbWFwIGZvciBmbGF0bWVtCisKKyAgICBTcmluaXZhcyBLYW5kYWdhdGxhIHJlcG9ydGVkIGJhZCBwYWdlIG1lc3NhZ2VzIHdoZW4gdHJ5aW5nIHRvIHJlbW92ZSB0aGUKKyAgICBib3R0b20gMk1CIG9uIGFuIEFSTSBiYXNlZCBJRkM2NDEwIGJvYXJkCisKKyAgICAgIEJVRzogQmFkIHBhZ2Ugc3RhdGUgaW4gcHJvY2VzcyBzd2FwcGVyICBwZm46ZmZmYTgKKyAgICAgIHBhZ2U6ZWY3ZmI1MDAgY291bnQ6MCBtYXBjb3VudDowIG1hcHBpbmc6ICAobnVsbCkgaW5kZXg6MHgwCisgICAgICBmbGFnczogMHg5NjY0MDI1Myhsb2NrZWR8ZXJyb3J8ZGlydHl8YWN0aXZlfGFyY2hfMXxyZWNsYWltfG1sb2NrZWQpCisgICAgICBwYWdlIGR1bXBlZCBiZWNhdXNlOiBQQUdFX0ZMQUdTX0NIRUNLX0FUX0ZSRUUgZmxhZyhzKSBzZXQKKyAgICAgIGJhZCBiZWNhdXNlIG9mIGZsYWdzOgorICAgICAgZmxhZ3M6IDB4MjAwMDQxKGxvY2tlZHxhY3RpdmV8bWxvY2tlZCkKKyAgICAgIE1vZHVsZXMgbGlua2VkIGluOgorICAgICAgQ1BVOiAwIFBJRDogMCBDb21tOiBzd2FwcGVyIE5vdCB0YWludGVkIDMuMTkuMC1yYzMtMDAwMDctZzQxMmY5YmEtZGlydHkKKyM4MTYKKyAgICAgIEhhcmR3YXJlIG5hbWU6IFF1YWxjb21tIChGbGF0dGVuZWQgRGV2aWNlIFRyZWUpCisgICAgICAgIHVud2luZF9iYWNrdHJhY2UKKyAgICAgICAgc2hvd19zdGFjaworICAgICAgICBkdW1wX3N0YWNrCisgICAgICAgIGJhZF9wYWdlCisgICAgICAgIGZyZWVfcGFnZXNfcHJlcGFyZQorICAgICAgICBmcmVlX2hvdF9jb2xkX3BhZ2UKKyAgICAgICAgX19mcmVlX3BhZ2VzCisgICAgICAgIGZyZWVfaGlnaG1lbV9wYWdlCisgICAgICAgIG1lbV9pbml0CisgICAgICAgIHN0YXJ0X2tlcm5lbAorICAgICAgRGlzYWJsaW5nIGxvY2sgZGVidWdnaW5nIGR1ZSB0byBrZXJuZWwgdGFpbnQKKyAgICBbLi4uXQorOjA0MDAwMCAwNDAwMDAgMmRlMDEzYzM3MjM0NWZkNDcxY2Q1OGYwNTUzYzliMzhiMGVmMWNjNAorMGE4MTU2Zjg0ODczM2RmYTIxZTE2YzE5NmRmYjZjMGE3NjI5MDcwOSBNICAgICAgbW0KKworVGhpcyBmaXggZm9yIEFSTSBkb2VzIG5vdCBhY2NvdW50IEFSQ0hfUEZOX09GRlNFVCBmb3IgbWVtX21hcCBhcyBsYXRlciB1c2VkIGJ5CitwYWdlX3RvX3BmbiBhbnltb3JlLgorCitUaGUgZm9sbG93aW5nIG91dHB1dCB3YXMgZ2VuZXJhdGVkIHdpdGggdHdvIGhhY2tlZCBpbiBwcmludGsgc3RhdGVtZW50czoKKworcHJpbnRrKCJiZWZvcmUgJXAgdnMuICVwIG9yICVwXG4iLCBtZW1fbWFwLCBtZW1fbWFwIC0gb2Zmc2V0LCBtZW1fbWFwIC0KKyhwZ2RhdC0+bm9kZV9zdGFydF9wZm4gLSBBUkNIX1BGTl9PRkZTRVQpKTsKKwkJaWYgKHBhZ2VfdG9fcGZuKG1lbV9tYXApICE9IHBnZGF0LT5ub2RlX3N0YXJ0X3BmbikKKwkJCW1lbV9tYXAgLT0gb2Zmc2V0ICsgKHBnZGF0LT5ub2RlX3N0YXJ0X3BmbiAtIEFSQ0hfUEZOX09GRlNFVCk7CitwcmludGsoImFmdGVyICVwXG4iLCBtZW1fbWFwKTsKKworT3V0cHV0OgorCitbICAgIDAuMDAwMDAwXSBiZWZvcmUgODg2MWIyODAgdnMuIDg4NjFiMjgwIG9yIDg4NTFiMjgwCitbICAgIDAuMDAwMDAwXSBhZnRlciA4ODUxYjI4MAorCitBcyBzZWVuIGluIHRoZSBmaXJzdCBsaW5lIG1lbV9tYXAgd2l0aCBzdWJ0cmFjdGlvbiBvZiBvZmZzZXQgZG9lcyBub3QgZXF1YWwgdGhlCittZW1fbWFwIGFmdGVyIHN1YnRyYWN0aW9uIG9mIEFSQ0hfUEZOX09GRlNFVC4KKworQWZ0ZXIgYWRkaW5nIHRoZSBvZmZzZXQgb2YgQVJDSF9QRk5fT0ZGU0VUIGFzIHdlbGwgdG8gbWVtX21hcCBhcyB0aGUKK3ByZXZpb3VzbHkgY2FsY3VsYXRlZCBvZmZzZXQgaXMgemVybyBmb3IgdGhlIG5hbWVkIHBsYXRmb3JtIGl0IGlzIGFibGUgdG8gYm9vdAorNC40IGFuZCA0LjktcmM3IGFnYWluLgorCitTaWduZWQtb2ZmLWJ5OiBUb2JpYXMgV29sZiA8ZGV2LU5URU9AdnBsYWNlLmRlPgorLS0tCisKKy0tLSBhL21tL3BhZ2VfYWxsb2MuYworKysrIGIvbW0vcGFnZV9hbGxvYy5jCitAQCAtNjg4Niw3ICs2ODg2LDcgQEAgc3RhdGljIHZvaWQgX19yZWYgYWxsb2Nfbm9kZV9tZW1fbWFwKHN0cgorIAkJbWVtX21hcCA9IE5PREVfREFUQSgwKS0+bm9kZV9tZW1fbWFwOworICNpZiBkZWZpbmVkKENPTkZJR19IQVZFX01FTUJMT0NLX05PREVfTUFQKSB8fCBkZWZpbmVkKENPTkZJR19GTEFUTUVNKQorIAkJaWYgKHBhZ2VfdG9fcGZuKG1lbV9tYXApICE9IHBnZGF0LT5ub2RlX3N0YXJ0X3BmbikKKy0JCQltZW1fbWFwIC09IG9mZnNldDsKKysJCQltZW1fbWFwIC09IG9mZnNldCArIChwZ2RhdC0+bm9kZV9zdGFydF9wZm4gLSBBUkNIX1BGTl9PRkZTRVQpOworICNlbmRpZiAvKiBDT05GSUdfSEFWRV9NRU1CTE9DS19OT0RFX01BUCAqLworIAl9CisgI2VuZGlmCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC8xMzAtYWRkLWxpbnV4LXNwaWRldi1jb21wYXRpYmxlLXNpMzIxMC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzEzMC1hZGQtbGludXgtc3BpZGV2LWNvbXBhdGlibGUtc2kzMjEwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZGIyYmIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC8xMzAtYWRkLWxpbnV4LXNwaWRldi1jb21wYXRpYmxlLXNpMzIxMC5wYXRjaApAQCAtMCwwICsxLDE4IEBACitGcm9tOiBHaXVzZXBwZSBMaXBwb2xpcyA8Z2l1LmxpcHBvbGlzQGdtYWlsLmNvbT4KK1N1YmplY3Q6IEFkZCB0aGUgbGludXgsc3BpZGV2IGNvbXBhdGlibGUgaW4gc3BpZGV2IFNldmVyYWwgZGV2aWNlIGluIHJhbWlwcyBoYXZlIHRoaXMgYmluZGluZyBpbiB0aGUgZHRzCisKK1NpZ25lZC1vZmYtYnk6IEdpdXNlcHBlIExpcHBvbGlzIDxnaXUubGlwcG9saXNAZ21haWwuY29tPgorLS0tCisgZHJpdmVycy9zcGkvc3BpZGV2LmMgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworLS0tIGEvZHJpdmVycy9zcGkvc3BpZGV2LmMKKysrKyBiL2RyaXZlcnMvc3BpL3NwaWRldi5jCitAQCAtNjc4LDYgKzY3OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHNwaWRldl8KKyAJeyAuY29tcGF0aWJsZSA9ICJsd24sYms0IiB9LAorIAl7IC5jb21wYXRpYmxlID0gImRoLGRoY29tLWJvYXJkIiB9LAorIAl7IC5jb21wYXRpYmxlID0gIm1lbmxvLG01M2NwbGQiIH0sCisrCXsgLmNvbXBhdGlibGUgPSAic2lsaWNvbmxhYnMsc2kzMjEwIiB9LAorIAl7fSwKKyB9OworIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHNwaWRldl9kdF9pZHMpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvMTQwLWpmZnMyLXVzZS0ucmVuYW1lMi1hbmQtYWRkLVJFTkFNRV9XSElURU9VVC1zdXBwb3J0LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvMTQwLWpmZnMyLXVzZS0ucmVuYW1lMi1hbmQtYWRkLVJFTkFNRV9XSElURU9VVC1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5YmIzZjcKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC8xNDAtamZmczItdXNlLS5yZW5hbWUyLWFuZC1hZGQtUkVOQU1FX1dISVRFT1VULXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSw2MiBAQAorRnJvbTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorU3ViamVjdDogamZmczI6IHVzZSAucmVuYW1lMiBhbmQgYWRkIFJFTkFNRV9XSElURU9VVCBzdXBwb3J0CisKK0l0IGlzIHJlcXVpcmVkIGZvciByZW5hbWVzIG9uIG92ZXJsYXlmcworCitTaWduZWQtb2ZmLWJ5OiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CistLS0KKworLS0tIGEvZnMvamZmczIvZGlyLmMKKysrKyBiL2ZzL2pmZnMyL2Rpci5jCitAQCAtNzU2LDYgKzc1NiwyNCBAQCBzdGF0aWMgaW50IGpmZnMyX21rbm9kIChzdHJ1Y3QgaW5vZGUgKmRpCisgCXJldHVybiByZXQ7CisgfQorIAorK3N0YXRpYyBpbnQgamZmczJfd2hpdGVvdXQgKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSkKKyt7CisrCXN0cnVjdCBkZW50cnkgKndoOworKwlpbnQgZXJyOworKworKwl3aCA9IGRfYWxsb2Mob2xkX2RlbnRyeS0+ZF9wYXJlbnQsICZvbGRfZGVudHJ5LT5kX25hbWUpOworKwlpZiAoIXdoKQorKwkJcmV0dXJuIC1FTk9NRU07CisrCisrCWVyciA9IGpmZnMyX21rbm9kKG9sZF9kaXIsIHdoLCBTX0lGQ0hSIHwgV0hJVEVPVVRfTU9ERSwKKysJCQkgIFdISVRFT1VUX0RFVik7CisrCWlmIChlcnIpCisrCQlyZXR1cm4gZXJyOworKworKwlkX3JlaGFzaCh3aCk7CisrCXJldHVybiAwOworK30KKysKKyBzdGF0aWMgaW50IGpmZnMyX3JlbmFtZSAoc3RydWN0IGlub2RlICpvbGRfZGlyX2ksIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCisgCQkJIHN0cnVjdCBpbm9kZSAqbmV3X2Rpcl9pLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5LAorIAkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MpCitAQCAtNzY2LDcgKzc4NCw3IEBAIHN0YXRpYyBpbnQgamZmczJfcmVuYW1lIChzdHJ1Y3QgaW5vZGUgKm8KKyAJdWludDhfdCB0eXBlOworIAl1aW50MzJfdCBub3c7CisgCistCWlmIChmbGFncyAmIH5SRU5BTUVfTk9SRVBMQUNFKQorKwlpZiAoZmxhZ3MgJiB+KFJFTkFNRV9OT1JFUExBQ0V8UkVOQU1FX1dISVRFT1VUKSkKKyAJCXJldHVybiAtRUlOVkFMOworIAorIAkvKiBUaGUgVkZTIHdpbGwgY2hlY2sgZm9yIHVzIGFuZCBwcmV2ZW50IHRyeWluZyB0byByZW5hbWUgYQorQEAgLTgzMiw5ICs4NTAsMTQgQEAgc3RhdGljIGludCBqZmZzMl9yZW5hbWUgKHN0cnVjdCBpbm9kZSAqbworIAlpZiAoZF9pc19kaXIob2xkX2RlbnRyeSkgJiYgIXZpY3RpbV9mKQorIAkJaW5jX25saW5rKG5ld19kaXJfaSk7CisgCistCS8qIFVubGluayB0aGUgb3JpZ2luYWwgKi8KKy0JcmV0ID0gamZmczJfZG9fdW5saW5rKGMsIEpGRlMyX0lOT0RFX0lORk8ob2xkX2Rpcl9pKSwKKy0JCQkgICAgICBvbGRfZGVudHJ5LT5kX25hbWUubmFtZSwgb2xkX2RlbnRyeS0+ZF9uYW1lLmxlbiwgTlVMTCwgbm93KTsKKysJaWYgKGZsYWdzICYgUkVOQU1FX1dISVRFT1VUKQorKwkJLyogUmVwbGFjZSB3aXRoIHdoaXRlb3V0ICovCisrCQlyZXQgPSBqZmZzMl93aGl0ZW91dChvbGRfZGlyX2ksIG9sZF9kZW50cnkpOworKwllbHNlCisrCQkvKiBVbmxpbmsgdGhlIG9yaWdpbmFsICovCisrCQlyZXQgPSBqZmZzMl9kb191bmxpbmsoYywgSkZGUzJfSU5PREVfSU5GTyhvbGRfZGlyX2kpLAorKwkJCQkgICAgICBvbGRfZGVudHJ5LT5kX25hbWUubmFtZSwKKysJCQkJICAgICAgb2xkX2RlbnRyeS0+ZF9uYW1lLmxlbiwgTlVMTCwgbm93KTsKKyAKKyAJLyogV2UgZG9uJ3QgdG91Y2ggaW5vZGUtPmlfbmxpbmsgKi8KKyAKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzE0MS1qZmZzMi1hZGQtUkVOQU1FX0VYQ0hBTkdFLXN1cHBvcnQucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC8xNDEtamZmczItYWRkLVJFTkFNRV9FWENIQU5HRS1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMzBiYzcKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC8xNDEtamZmczItYWRkLVJFTkFNRV9FWENIQU5HRS1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsNzMgQEAKK0Zyb206IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KK1N1YmplY3Q6IGpmZnMyOiBhZGQgUkVOQU1FX0VYQ0hBTkdFIHN1cHBvcnQKKworU2lnbmVkLW9mZi1ieTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorLS0tCisKKy0tLSBhL2ZzL2pmZnMyL2Rpci5jCisrKysgYi9mcy9qZmZzMi9kaXIuYworQEAgLTc4MSwxOCArNzgxLDMxIEBAIHN0YXRpYyBpbnQgamZmczJfcmVuYW1lIChzdHJ1Y3QgaW5vZGUgKm8KKyAJaW50IHJldDsKKyAJc3RydWN0IGpmZnMyX3NiX2luZm8gKmMgPSBKRkZTMl9TQl9JTkZPKG9sZF9kaXJfaS0+aV9zYik7CisgCXN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvICp2aWN0aW1fZiA9IE5VTEw7CisrCXN0cnVjdCBpbm9kZSAqZnN0X2lub2RlID0gZF9pbm9kZShvbGRfZGVudHJ5KTsKKysJc3RydWN0IGlub2RlICpzbmRfaW5vZGUgPSBkX2lub2RlKG5ld19kZW50cnkpOworIAl1aW50OF90IHR5cGU7CisgCXVpbnQzMl90IG5vdzsKKyAKKy0JaWYgKGZsYWdzICYgfihSRU5BTUVfTk9SRVBMQUNFfFJFTkFNRV9XSElURU9VVCkpCisrCWlmIChmbGFncyAmIH4oUkVOQU1FX05PUkVQTEFDRXxSRU5BTUVfV0hJVEVPVVR8UkVOQU1FX0VYQ0hBTkdFKSkKKyAJCXJldHVybiAtRUlOVkFMOworIAorKwlpZiAoKGZsYWdzICYgUkVOQU1FX0VYQ0hBTkdFKSAmJiAob2xkX2Rpcl9pICE9IG5ld19kaXJfaSkpIHsKKysJCWlmIChTX0lTRElSKGZzdF9pbm9kZS0+aV9tb2RlKSAmJiAhU19JU0RJUihzbmRfaW5vZGUtPmlfbW9kZSkpIHsKKysJCQlpbmNfbmxpbmsobmV3X2Rpcl9pKTsKKysJCQlkcm9wX25saW5rKG9sZF9kaXJfaSk7CisrCQl9CisrCQllbHNlIGlmICghU19JU0RJUihmc3RfaW5vZGUtPmlfbW9kZSkgJiYgU19JU0RJUihzbmRfaW5vZGUtPmlfbW9kZSkpIHsKKysJCQlkcm9wX25saW5rKG5ld19kaXJfaSk7CisrCQkJaW5jX25saW5rKG9sZF9kaXJfaSk7CisrCQl9CisrCX0KKysKKyAJLyogVGhlIFZGUyB3aWxsIGNoZWNrIGZvciB1cyBhbmQgcHJldmVudCB0cnlpbmcgdG8gcmVuYW1lIGEKKyAJICogZmlsZSBvdmVyIGEgZGlyZWN0b3J5IGFuZCB2aWNlIHZlcnNhLCBidXQgaWYgaXQncyBhIGRpcmVjdG9yeSwKKyAJICogdGhlIFZGUyBjYW4ndCBjaGVjayB3aGV0aGVyIHRoZSB2aWN0aW0gaXMgZW1wdHkuIFRoZSBmaWxlc3lzdGVtCisgCSAqIG5lZWRzIHRvIGRvIHRoYXQgZm9yIGl0c2VsZi4KKyAJICovCistCWlmIChkX3JlYWxseV9pc19wb3NpdGl2ZShuZXdfZGVudHJ5KSkgeworKwlpZiAoZF9yZWFsbHlfaXNfcG9zaXRpdmUobmV3X2RlbnRyeSkgJiYgIShmbGFncyAmIFJFTkFNRV9FWENIQU5HRSkpIHsKKyAJCXZpY3RpbV9mID0gSkZGUzJfSU5PREVfSU5GTyhkX2lub2RlKG5ld19kZW50cnkpKTsKKyAJCWlmIChkX2lzX2RpcihuZXdfZGVudHJ5KSkgeworIAkJCXN0cnVjdCBqZmZzMl9mdWxsX2RpcmVudCAqZmQ7CitAQCAtODI3LDcgKzg0MCw3IEBAIHN0YXRpYyBpbnQgamZmczJfcmVuYW1lIChzdHJ1Y3QgaW5vZGUgKm8KKyAJaWYgKHJldCkKKyAJCXJldHVybiByZXQ7CisgCistCWlmICh2aWN0aW1fZikgeworKwlpZiAodmljdGltX2YgJiYgIShmbGFncyAmIFJFTkFNRV9FWENIQU5HRSkpIHsKKyAJCS8qIFRoZXJlIHdhcyBhIHZpY3RpbS4gS2lsbCBpdCBvZmYgbmljZWx5ICovCisgCQlpZiAoZF9pc19kaXIobmV3X2RlbnRyeSkpCisgCQkJY2xlYXJfbmxpbmsoZF9pbm9kZShuZXdfZGVudHJ5KSk7CitAQCAtODUzLDYgKzg2NiwxMiBAQCBzdGF0aWMgaW50IGpmZnMyX3JlbmFtZSAoc3RydWN0IGlub2RlICpvCisgCWlmIChmbGFncyAmIFJFTkFNRV9XSElURU9VVCkKKyAJCS8qIFJlcGxhY2Ugd2l0aCB3aGl0ZW91dCAqLworIAkJcmV0ID0gamZmczJfd2hpdGVvdXQob2xkX2Rpcl9pLCBvbGRfZGVudHJ5KTsKKysJZWxzZSBpZiAoZmxhZ3MgJiBSRU5BTUVfRVhDSEFOR0UpCisrCQkvKiBSZXBsYWNlIHRoZSBvcmlnaW5hbCAqLworKwkJcmV0ID0gamZmczJfZG9fbGluayhjLCBKRkZTMl9JTk9ERV9JTkZPKG9sZF9kaXJfaSksCisrCQkJCSAgICBkX2lub2RlKG5ld19kZW50cnkpLT5pX2lubywgdHlwZSwKKysJCQkJICAgIG9sZF9kZW50cnktPmRfbmFtZS5uYW1lLCBvbGRfZGVudHJ5LT5kX25hbWUubGVuLAorKwkJCQkgICAgbm93KTsKKyAJZWxzZQorIAkJLyogVW5saW5rIHRoZSBvcmlnaW5hbCAqLworIAkJcmV0ID0gamZmczJfZG9fdW5saW5rKGMsIEpGRlMyX0lOT0RFX0lORk8ob2xkX2Rpcl9pKSwKK0BAIC04ODQsNyArOTAzLDcgQEAgc3RhdGljIGludCBqZmZzMl9yZW5hbWUgKHN0cnVjdCBpbm9kZSAqbworIAkJcmV0dXJuIHJldDsKKyAJfQorIAorLQlpZiAoZF9pc19kaXIob2xkX2RlbnRyeSkpCisrCWlmIChkX2lzX2RpcihvbGRfZGVudHJ5KSAmJiAhKGZsYWdzICYgUkVOQU1FX0VYQ0hBTkdFKSkKKyAJCWRyb3Bfbmxpbmsob2xkX2Rpcl9pKTsKKyAKKyAJbmV3X2Rpcl9pLT5pX210aW1lID0gbmV3X2Rpcl9pLT5pX2N0aW1lID0gb2xkX2Rpcl9pLT5pX210aW1lID0gb2xkX2Rpcl9pLT5pX2N0aW1lID0gSVRJTUUobm93KTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzE1MC1icmlkZ2VfYWxsb3dfcmVjZWlwdGlvbl9vbl9kaXNhYmxlZF9wb3J0LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvMTUwLWJyaWRnZV9hbGxvd19yZWNlaXB0aW9uX29uX2Rpc2FibGVkX3BvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYzMjY4ZQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzE1MC1icmlkZ2VfYWxsb3dfcmVjZWlwdGlvbl9vbl9kaXNhYmxlZF9wb3J0LnBhdGNoCkBAIC0wLDAgKzEsNDUgQEAKK0Zyb206IFN0ZXBoZW4gSGVtbWluZ2VyIDxzdGVwaGVuQG5ldHdvcmtwbHVtYmVyLm9yZz4KK1N1YmplY3Q6IGJyaWRnZTogYWxsb3cgcmVjZWlwdGlvbiBvbiBkaXNhYmxlZCBwb3J0CisKK1doZW4gYW4gZXRoZXJuZXQgZGV2aWNlIGlzIGVuc2xhdmVkIHRvIGEgYnJpZGdlLCBhbmQgdGhlIGJyaWRnZSBTVFAKK2RldGVjdHMgbG9zcyBvZiBjYXJyaWVyIChvciBvcGVyYXRpb25hbCBzdGF0ZSBkb3duKSwgdGhlbiBub3JtYWxseQorcGFja2V0IHJlY2VpcHRpb24gaXMgYmxvY2tlZC4KKworVGhpcyBicmVha3MgY29udHJvbCBhcHBsaWNhdGlvbnMgbGlrZSBXUEEgd2hpY2ggbWF5YmUgZXhwZWN0aW5nIHRvCityZWNlaXZlIHBhY2tldHMgdG8gbmVnb3RpYXRlIHRvIGJyaW5nIGxpbmsgdXAuIFRoZSBicmlkZ2UgbmVlZHMgdG8KK2Jsb2NrIGZvcndhcmRpbmcgcGFja2V0cyBmcm9tIHRoZXNlIGRpc2FibGVkIHBvcnRzLCBidXQgdGhlcmUgaXMgbm8KK2hhcmQgcmVxdWlyZW1lbnQgdG8gbm90IGFsbG93IGxvY2FsIHBhY2tldCBkZWxpdmVyeS4KKworU2lnbmVkLW9mZi1ieTogU3RlcGhlbiBIZW1taW5nZXIgPHN0ZXBoZW5AbmV0d29ya3BsdW1iZXIub3JnPgorU2lnbmVkLW9mZi1ieTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorCistLS0gYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMKKysrKyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuYworQEAgLTE5MCw2ICsxOTAsOSBAQCBzdGF0aWMgdm9pZCBfX2JyX2hhbmRsZV9sb2NhbF9maW5pc2goc3RyCisgLyogbm90ZTogYWxyZWFkeSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrICovCisgc3RhdGljIGludCBicl9oYW5kbGVfbG9jYWxfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorIHsKKysJc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCA9IGJyX3BvcnRfZ2V0X3JjdShza2ItPmRldik7CisrCisrCWlmIChwLT5zdGF0ZSAhPSBCUl9TVEFURV9ESVNBQkxFRCkKKyAJX19icl9oYW5kbGVfbG9jYWxfZmluaXNoKHNrYik7CisgCisgCS8qIHJldHVybiAxIHRvIHNpZ25hbCB0aGUgb2tmbigpIHdhcyBjYWxsZWQgc28gaXQncyBvayB0byB1c2UgdGhlIHNrYiAqLworQEAgLTM0MCw2ICszNDMsMTcgQEAgcnhfaGFuZGxlcl9yZXN1bHRfdCBicl9oYW5kbGVfZnJhbWUoc3RydQorIAorIGZvcndhcmQ6CisgCXN3aXRjaCAocC0+c3RhdGUpIHsKKysJY2FzZSBCUl9TVEFURV9ESVNBQkxFRDoKKysJCWlmIChldGhlcl9hZGRyX2VxdWFsKHAtPmJyLT5kZXYtPmRldl9hZGRyLCBkZXN0KSkKKysJCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX0hPU1Q7CisrCisrCQlpZiAoTkZfSE9PSyhORlBST1RPX0JSSURHRSwgTkZfQlJfUFJFX1JPVVRJTkcsCisrCQkJZGV2X25ldChza2ItPmRldiksIE5VTEwsIHNrYiwgc2tiLT5kZXYsIE5VTEwsCisrCQkJYnJfaGFuZGxlX2xvY2FsX2ZpbmlzaCkgPT0gMSkgeworKwkJCXJldHVybiBSWF9IQU5ETEVSX1BBU1M7CisrCQl9CisrCQlicmVhazsKKysKKyAJY2FzZSBCUl9TVEFURV9GT1JXQVJESU5HOgorIAljYXNlIEJSX1NUQVRFX0xFQVJOSU5HOgorIAkJaWYgKGV0aGVyX2FkZHJfZXF1YWwocC0+YnItPmRldi0+ZGV2X2FkZHIsIGRlc3QpKQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvMTgwLW5ldC1waHktYXQ4MDN4LWFkZC1zdXBwb3J0LWZvci1BVDgwMzIucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC8xODAtbmV0LXBoeS1hdDgwM3gtYWRkLXN1cHBvcnQtZm9yLUFUODAzMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Yjg4MjgyCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvMTgwLW5ldC1waHktYXQ4MDN4LWFkZC1zdXBwb3J0LWZvci1BVDgwMzIucGF0Y2gKQEAgLTAsMCArMSw2MyBAQAorRnJvbTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorU3ViamVjdDogbmV0OiBwaHk6IGF0ODAzeDogYWRkIHN1cHBvcnQgZm9yIEFUODAzMgorCitMaWtlIEFUODAzMCwgdGhpcyBQSFkgbmVlZHMgdGhlIEdQSU8gcmVzZXQgd29ya2Fyb3VuZAorCitTaWduZWQtb2ZmLWJ5OiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CistLS0KKworLS0tIGEvZHJpdmVycy9uZXQvcGh5L2F0ODAzeC5jCisrKysgYi9kcml2ZXJzL25ldC9waHkvYXQ4MDN4LmMKK0BAIC02NCw4ICs2NCwxMCBAQAorIAorICNkZWZpbmUgQVRIODAzMF9QSFlfSUQgMHgwMDRkZDA3NgorICNkZWZpbmUgQVRIODAzMV9QSFlfSUQgMHgwMDRkZDA3NAorKyNkZWZpbmUgQVRIODAzMl9QSFlfSUQgMHgwMDRkZDAyMworICNkZWZpbmUgQVRIODAzNV9QSFlfSUQgMHgwMDRkZDA3MgorICNkZWZpbmUgQVQ4MDNYX1BIWV9JRF9NQVNLCQkJMHhmZmZmZmZlZgorKyNkZWZpbmUgQVQ4MDMyX1BIWV9JRF9NQVNLCQkJMHhmZmZmZmZmZgorIAorIE1PRFVMRV9ERVNDUklQVElPTigiQXRoZXJvcyA4MDN4IFBIWSBkcml2ZXIiKTsKKyBNT0RVTEVfQVVUSE9SKCJNYXR1cyBVamhlbHlpIik7CitAQCAtMzE0LDcgKzMxNiw3IEBAIHN0YXRpYyBpbnQgYXQ4MDN4X2NvbmZpZ19pbnRyKHN0cnVjdCBwaHkKKyBzdGF0aWMgdm9pZCBhdDgwM3hfbGlua19jaGFuZ2Vfbm90aWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCisgeworIAkvKgorLQkgKiBDb25kdWN0IGEgaGFyZHdhcmUgcmVzZXQgZm9yIEFUODAzMCBldmVyeSB0aW1lIGEgbGluayBsb3NzIGlzCisrCSAqIENvbmR1Y3QgYSBoYXJkd2FyZSByZXNldCBmb3IgQVQ4MDMwLzIgZXZlcnkgdGltZSBhIGxpbmsgbG9zcyBpcworIAkgKiBzaWduYWxsZWQuIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIGNpcmN1bXZlbnQgYSBoYXJkd2FyZSBidWcgdGhhdAorIAkgKiBvY2N1cnMgd2hlbiB0aGUgY2FibGUgaXMgdW5wbHVnZ2VkIHdoaWxlIFRYIHBhY2tldHMgYXJlIHBlbmRpbmcKKyAJICogaW4gdGhlIEZJRk8uIEluIHN1Y2ggY2FzZXMsIHRoZSBGSUZPIGVudGVycyBhbiBlcnJvciBtb2RlIGl0CitAQCAtNDcxLDYgKzQ3MywyNCBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYXQ4MDN4X2RyaXZlcltdCisgCS5hbmVnX2RvbmUJCT0gYXQ4MDN4X2FuZWdfZG9uZSwKKyAJLmFja19pbnRlcnJ1cHQJCT0gJmF0ODAzeF9hY2tfaW50ZXJydXB0LAorIAkuY29uZmlnX2ludHIJCT0gJmF0ODAzeF9jb25maWdfaW50ciwKKyt9LCB7CisrCS8qIEFUSEVST1MgODAzMiAqLworKwkucGh5X2lkCQkJPSBBVEg4MDMyX1BIWV9JRCwKKysJLm5hbWUJCQk9ICJBdGhlcm9zIDgwMzIgZXRoZXJuZXQiLAorKwkucGh5X2lkX21hc2sJCT0gQVQ4MDMyX1BIWV9JRF9NQVNLLAorKwkucHJvYmUJCQk9IGF0ODAzeF9wcm9iZSwKKysJLmNvbmZpZ19pbml0CQk9IGF0ODAzeF9jb25maWdfaW5pdCwKKysJLmxpbmtfY2hhbmdlX25vdGlmeQk9IGF0ODAzeF9saW5rX2NoYW5nZV9ub3RpZnksCisrCS5zZXRfd29sCQk9IGF0ODAzeF9zZXRfd29sLAorKwkuZ2V0X3dvbAkJPSBhdDgwM3hfZ2V0X3dvbCwKKysJLnN1c3BlbmQJCT0gYXQ4MDN4X3N1c3BlbmQsCisrCS5yZXN1bWUJCQk9IGF0ODAzeF9yZXN1bWUsCisrCS8qIFBIWV9CQVNJQ19GRUFUVVJFUyAqLworKwkucmVhZF9zdGF0dXMJCT0gYXQ4MDN4X3JlYWRfc3RhdHVzLAorKwkuY29uZmlnX2FuZWcJCT0gZ2VucGh5X2NvbmZpZ19hbmVnLAorKwkucmVhZF9zdGF0dXMJCT0gZ2VucGh5X3JlYWRfc3RhdHVzLAorKwkuYWNrX2ludGVycnVwdAkJPSBhdDgwM3hfYWNrX2ludGVycnVwdCwKKysJLmNvbmZpZ19pbnRyCQk9IGF0ODAzeF9jb25maWdfaW50ciwKKyB9IH07CisgCisgbW9kdWxlX3BoeV9kcml2ZXIoYXQ4MDN4X2RyaXZlcik7CitAQCAtNDc4LDYgKzQ5OCw3IEBAIG1vZHVsZV9waHlfZHJpdmVyKGF0ODAzeF9kcml2ZXIpOworIHN0YXRpYyBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgYXRoZXJvc190YmxbXSA9IHsKKyAJeyBBVEg4MDMwX1BIWV9JRCwgQVQ4MDNYX1BIWV9JRF9NQVNLIH0sCisgCXsgQVRIODAzMV9QSFlfSUQsIEFUODAzWF9QSFlfSURfTUFTSyB9LAorKwl7IEFUSDgwMzJfUEhZX0lELCBBVDgwMzJfUEhZX0lEX01BU0sgfSwKKyAJeyBBVEg4MDM1X1BIWV9JRCwgQVQ4MDNYX1BIWV9JRF9NQVNLIH0sCisgCXsgfQorIH07CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC8xOTAtcnRjLXJzNWMzNzItc3VwcG9ydF9hbGFybXNfdXBfdG9fMV93ZWVrLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvMTkwLXJ0Yy1yczVjMzcyLXN1cHBvcnRfYWxhcm1zX3VwX3RvXzFfd2Vlay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2I3OWI1Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvMTkwLXJ0Yy1yczVjMzcyLXN1cHBvcnRfYWxhcm1zX3VwX3RvXzFfd2Vlay5wYXRjaApAQCAtMCwwICsxLDk0IEBACitGcm9tOiBEYW5pZWwgR29uesOhbGV6IENhYmFuZWxhcyA8ZGdjYnVldUBnbWFpbC5jb20+CitTdWJqZWN0OiBbUEFUQ0ggMS8yXSBydGM6IHJzNWMzNzI6IHN1cHBvcnQgYWxhcm1zIHVwIHRvIDEgd2VlaworCitUaGUgUmljb2ggUjIyMjF4LCBSMjIyM3gsIFJTNUMzNzIsIFJWNUMzODdBIGNoaXBzIGNhbiBoYW5kbGUgMSB3ZWVrCithbGFybXMuCisKK1JlYWQgdGhlICJ3ZGF5IiBhbGFybSByZWdpc3RlciBhbmQgY29udmVydCBpdCB0byBhIGRhdGUgdG8gc3VwcG9ydCB1cCAxCit3ZWVrIGluIG91ciBkcml2ZXIuCisKK1NpZ25lZC1vZmYtYnk6IERhbmllbCBHb256w6FsZXogQ2FiYW5lbGFzIDxkZ2NidWV1QGdtYWlsLmNvbT4KKy0tLQorIGRyaXZlcnMvcnRjL3J0Yy1yczVjMzcyLmMgfCA0OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNDIgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9ydGMvcnRjLXJzNWMzNzIuYworKysrIGIvZHJpdmVycy9ydGMvcnRjLXJzNWMzNzIuYworQEAgLTM5Myw3ICszOTMsOSBAQCBzdGF0aWMgaW50IHJzNWNfcmVhZF9hbGFybShzdHJ1Y3QgZGV2aWNlCisgeworIAlzdHJ1Y3QgaTJjX2NsaWVudAkqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworIAlzdHJ1Y3QgcnM1YzM3MgkJKnJzNWMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKy0JaW50CQkJc3RhdHVzOworKwlpbnQJCQlzdGF0dXMsIHdkYXlfb2ZmczsKKysJc3RydWN0IHJ0Y190aW1lIAlydGM7CisrCXVuc2lnbmVkIGxvbmcgCQlhbGFybV9zZWNzOworIAorIAlzdGF0dXMgPSByczVjX2dldF9yZWdzKHJzNWMpOworIAlpZiAoc3RhdHVzIDwgMCkKK0BAIC00MDMsNiArNDA1LDMwIEBAIHN0YXRpYyBpbnQgcnM1Y19yZWFkX2FsYXJtKHN0cnVjdCBkZXZpY2UKKyAJdC0+dGltZS50bV9zZWMgPSAwOworIAl0LT50aW1lLnRtX21pbiA9IGJjZDJiaW4ocnM1Yy0+cmVnc1tSUzVDX1JFR19BTEFSTV9BX01JTl0gJiAweDdmKTsKKyAJdC0+dGltZS50bV9ob3VyID0gcnM1Y19yZWcyaHIocnM1YywgcnM1Yy0+cmVnc1tSUzVDX1JFR19BTEFSTV9BX0hPVVJTXSk7CisrCXQtPnRpbWUudG1fd2RheSA9IGZmcyhyczVjLT5yZWdzW1JTNUNfUkVHX0FMQVJNX0FfV0RBWV0gJiAweDdmKSAtIDE7CisrCisrCS8qIGRldGVybWluZSB0aGUgZGF5LCBtb250aCBhbmQgeWVhciBiYXNlZCBvbiBhbGFybSB3ZGF5LCB0YWtpbmcgYXMgYQorKwkgKiByZWZlcmVuY2UgdGhlIGN1cnJlbnQgdGltZSBmcm9tIHRoZSBydGMKKysJICovCisrCXN0YXR1cyA9IHJzNWMzNzJfcnRjX3JlYWRfdGltZShkZXYsICZydGMpOworKwlpZiAoc3RhdHVzIDwgMCkKKysJCXJldHVybiBzdGF0dXM7CisrCisrCXdkYXlfb2ZmcyA9IHQtPnRpbWUudG1fd2RheSAtIHJ0Yy50bV93ZGF5OworKwlhbGFybV9zZWNzID0gbWt0aW1lNjQocnRjLnRtX3llYXIgKyAxOTAwLAorKwkJCSAgICAgIHJ0Yy50bV9tb24gKyAxLAorKwkJCSAgICAgIHJ0Yy50bV9tZGF5ICsgd2RheV9vZmZzLAorKwkJCSAgICAgIHQtPnRpbWUudG1faG91ciwKKysJCQkgICAgICB0LT50aW1lLnRtX21pbiwKKysJCQkgICAgICB0LT50aW1lLnRtX3NlYyk7CisrCisrCWlmICh3ZGF5X29mZnMgPCAwIHx8ICh3ZGF5X29mZnMgPT0gMCAmJgorKwkJCSAgICAgICh0LT50aW1lLnRtX2hvdXIgPCBydGMudG1faG91ciB8fAorKwkJCSAgICAgICAodC0+dGltZS50bV9ob3VyID09IHJ0Yy50bV9ob3VyICYmCisrCQkJCXQtPnRpbWUudG1fbWluIDw9IHJ0Yy50bV9taW4pKSkpCisrCQlhbGFybV9zZWNzICs9IDcgKiA4NjQwMDsKKysKKysJcnRjX3RpbWU2NF90b190bShhbGFybV9zZWNzLCAmdC0+dGltZSk7CisgCisgCS8qIC4uLiBhbmQgc3RhdHVzICovCisgCXQtPmVuYWJsZWQgPSAhIShyczVjLT5yZWdzW1JTNUNfUkVHX0NUUkwxXSAmIFJTNUNfQ1RSTDFfQUFMRSk7CitAQCAtNDE3LDEyICs0NDMsMjAgQEAgc3RhdGljIGludCByczVjX3NldF9hbGFybShzdHJ1Y3QgZGV2aWNlCisgCXN0cnVjdCByczVjMzcyCQkqcnM1YyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworIAlpbnQJCQlzdGF0dXMsIGFkZHIsIGk7CisgCXVuc2lnbmVkIGNoYXIJCWJ1ZlszXTsKKysJc3RydWN0IHJ0Y190aW1lIAlydGNfdG07CisrCXVuc2lnbmVkIGxvbmcgCQlydGNfc2VjcywgYWxhcm1fc2VjczsKKyAKKy0JLyogb25seSBoYW5kbGUgdXAgdG8gMjQgaG91cnMgaW4gdGhlIGZ1dHVyZSwgbGlrZSBSVENfQUxNX1NFVCAqLworLQlpZiAodC0+dGltZS50bV9tZGF5ICE9IC0xCistCQkJfHwgdC0+dGltZS50bV9tb24gIT0gLTEKKy0JCQl8fCB0LT50aW1lLnRtX3llYXIgIT0gLTEpCisrCS8qIGNoaXAgb25seSBjYW4gaGFuZGxlIGFsYXJtcyB1cCB0byBvbmUgd2VlayBpbiB0aGUgZnV0dXJlKi8KKysJc3RhdHVzID0gcnM1YzM3Ml9ydGNfcmVhZF90aW1lKGRldiwgJnJ0Y190bSk7CisrCWlmIChzdGF0dXMpCisrCQlyZXR1cm4gc3RhdHVzOworKwlydGNfc2VjcyA9IHJ0Y190bV90b190aW1lNjQoJnJ0Y190bSk7CisrCWFsYXJtX3NlY3MgPSBydGNfdG1fdG9fdGltZTY0KCZ0LT50aW1lKTsKKysJaWYgKGFsYXJtX3NlY3MgPj0gcnRjX3NlY3MgKyA3ICogODY0MDApIHsKKysJCWRldl9lcnIoZGV2LCAiJXM6IGFsYXJtIG1heGltdW0gaXMgb25lIHdlZWsgaW4gdGhlIGZ1dHVyZSAoJWQpXG4iLAorKwkJCV9fZnVuY19fLCBzdGF0dXMpOworIAkJcmV0dXJuIC1FSU5WQUw7CisrCX0KKyAKKyAJLyogUkVWSVNJVDogcm91bmQgdXAgdG1fc2VjICovCisgCitAQCAtNDQzLDcgKzQ3Nyw5IEBAIHN0YXRpYyBpbnQgcnM1Y19zZXRfYWxhcm0oc3RydWN0IGRldmljZQorIAkvKiBzZXQgYWxhcm0gKi8KKyAJYnVmWzBdID0gYmluMmJjZCh0LT50aW1lLnRtX21pbik7CisgCWJ1ZlsxXSA9IHJzNWNfaHIycmVnKHJzNWMsIHQtPnRpbWUudG1faG91cik7CistCWJ1ZlsyXSA9IDB4N2Y7CS8qIGFueS9hbGwgZGF5cyAqLworKwkvKiBlYWNoIGJpdCBpcyB0aGUgZGF5IG9mIHRoZSB3ZWVrLCAweDdmIG1lYW5zIGFsbCBkYXlzICovCisrCWJ1ZlsyXSA9ICh0LT50aW1lLnRtX3dkYXkgPj0gMCAmJiB0LT50aW1lLnRtX3dkYXkgPCA3KSA/CisrCQkgIEJJVCh0LT50aW1lLnRtX3dkYXkpIDogMHg3ZjsKKyAKKyAJZm9yIChpID0gMDsgaSA8IHNpemVvZihidWYpOyBpKyspIHsKKyAJCWFkZHIgPSBSUzVDX0FERFIoUlM1Q19SRUdfQUxBUk1fQV9NSU4gKyBpKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzE5MS1ydGMtcnM1YzM3Mi1sZXRfdGhlX2FsYXJtX3RvX2JlX3VzZWRfYXNfd2FrZXVwX3NvdXJjZS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzE5MS1ydGMtcnM1YzM3Mi1sZXRfdGhlX2FsYXJtX3RvX2JlX3VzZWRfYXNfd2FrZXVwX3NvdXJjZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTlkMGU2Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvMTkxLXJ0Yy1yczVjMzcyLWxldF90aGVfYWxhcm1fdG9fYmVfdXNlZF9hc193YWtldXBfc291cmNlLnBhdGNoCkBAIC0wLDAgKzEsNzAgQEAKK0Zyb206IERhbmllbCBHb256w6FsZXogQ2FiYW5lbGFzIDxkZ2NidWV1QGdtYWlsLmNvbT4KK1N1YmplY3Q6IFtQQVRDSCAyLzJdIHJ0YzogcnM1YzM3MjogbGV0IHRoZSBhbGFybSB0byBiZSB1c2VkIGFzIHdha2V1cCBzb3VyY2UKKworQ3VycmVudGx5IHRoZXJlIGlzIG5vIHVzZSBmb3IgdGhlIGludGVycnVwdHMgb24gdGhlIHJzNWMzNzIgUlRDIGFuZCB0aGUKK3dha2VhbGFybSBpc24ndCBlbmFibGVkLiBUaGVyZSBhcmUgc29tZSBkZXZpY2VzIGxpa2UgTkFTZXMgd2hpY2ggdXNlIHRoaXMKK1JUQyB0byB3YWtlIHVwIGZyb20gdGhlIHBvd2VyIG9mZiBzdGF0ZSB3aGVuIHRoZSBJTlRSIHBpbiBpcyBhY3RpdmF0ZWQgYnkKK3RoZSBhbGFybSBjbG9jay4KKworRW5hYmxlIHRoZSBhbGFybSBhbmQgbGV0IHRvIGJlIHVzZWQgYXMgYSB3YWtldXAgc291cmNlLgorCitUZXN0ZWQgb24gYSBCdWZmYWxvIExTNDIxREUgTkFTLgorCitTaWduZWQtb2ZmLWJ5OiBEYW5pZWwgR29uesOhbGV6IENhYmFuZWxhcyA8ZGdjYnVldUBnbWFpbC5jb20+CistLS0KKyBkcml2ZXJzL3J0Yy9ydGMtcnM1YzM3Mi5jIHwgMTYgKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxNiBpbnNlcnRpb25zKCspCisKKy0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzcyLmMKKysrKyBiL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzcyLmMKK0BAIC02NTQsNiArNjU0LDcgQEAgc3RhdGljIGludCByczVjMzcyX3Byb2JlKHN0cnVjdCBpMmNfY2xpZQorIAlpbnQgZXJyID0gMDsKKyAJaW50IHNtYnVzX21vZGUgPSAwOworIAlzdHJ1Y3QgcnM1YzM3MiAqcnM1YzM3MjsKKysJYm9vbCByczVjMzcyX2Nhbl93YWtldXBfZGV2aWNlID0gZmFsc2U7CisgCisgCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKyAKK0BAIC02ODksNiArNjkwLDEyIEBAIHN0YXRpYyBpbnQgcnM1YzM3Ml9wcm9iZShzdHJ1Y3QgaTJjX2NsaWUKKyAJZWxzZQorIAkJcnM1YzM3Mi0+dHlwZSA9IGlkLT5kcml2ZXJfZGF0YTsKKyAKKysjaWZkZWYgQ09ORklHX09GCisrCWlmKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChjbGllbnQtPmRldi5vZl9ub2RlLAorKwkJCQkJICAgICAgIndha2V1cC1zb3VyY2UiKSkKKysJCXJzNWMzNzJfY2FuX3dha2V1cF9kZXZpY2UgPSB0cnVlOworKyNlbmRpZgorKworIAkvKiB3ZSByZWFkIHJlZ2lzdGVycyAweDBmIHRoZW4gMHgwMC0weDBmOyBza2lwIHRoZSBmaXJzdCBvbmUgKi8KKyAJcnM1YzM3Mi0+cmVncyA9ICZyczVjMzcyLT5idWZbMV07CisgCXJzNWMzNzItPnNtYnVzID0gc21idXNfbW9kZTsKK0BAIC03MjIsNiArNzI5LDggQEAgc3RhdGljIGludCByczVjMzcyX3Byb2JlKHN0cnVjdCBpMmNfY2xpZQorIAkJZ290byBleGl0OworIAl9CisgCisrCXJzNWMzNzItPmhhc19pcnEgPSAxOworKworIAkvKiBpZiB0aGUgb3NjaWxsYXRvciBsb3N0IHBvd2VyIGFuZCBubyBvdGhlciBzb2Z0d2FyZSAobGlrZQorIAkgKiB0aGUgYm9vdGxvYWRlcikgc2V0IGl0IHVwLCBkbyBpdCBoZXJlLgorIAkgKgorQEAgLTc0OCw2ICs3NTcsMTAgQEAgc3RhdGljIGludCByczVjMzcyX3Byb2JlKHN0cnVjdCBpMmNfY2xpZQorIAkJCSk7CisgCisgCS8qIFJFVklTSVQgdXNlIGNsaWVudC0+aXJxIHRvIHJlZ2lzdGVyIGFsYXJtIGlycSAuLi4gKi8KKysJaWYgKHJzNWMzNzJfY2FuX3dha2V1cF9kZXZpY2UpIHsKKysJCWRldmljZV9pbml0X3dha2V1cCgmY2xpZW50LT5kZXYsIHRydWUpOworKwl9CisrCisgCXJzNWMzNzItPnJ0YyA9IGRldm1fcnRjX2RldmljZV9yZWdpc3RlcigmY2xpZW50LT5kZXYsCisgCQkJCQlyczVjMzcyX2RyaXZlci5kcml2ZXIubmFtZSwKKyAJCQkJCSZyczVjMzcyX3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKK0BAIC03NjEsNiArNzc0LDkgQEAgc3RhdGljIGludCByczVjMzcyX3Byb2JlKHN0cnVjdCBpMmNfY2xpZQorIAlpZiAoZXJyKQorIAkJZ290byBleGl0OworIAorKwkvKiB0aGUgcnM1YzM3MiBhbGFybSBvbmx5IHN1cHBvcnRzIGEgbWludXRlIGFjY3VyYWN5ICovCisrCXJzNWMzNzItPnJ0Yy0+dWllX3Vuc3VwcG9ydGVkID0gMTsKKysKKyAJcmV0dXJuIDA7CisgCisgZXhpdDoKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzIwMS1leHRyYV9vcHRpbWl6YXRpb24ucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC8yMDEtZXh0cmFfb3B0aW1pemF0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MDY0ODcKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC8yMDEtZXh0cmFfb3B0aW1pemF0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb206IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KK1N1YmplY3Q6IFVwZ3JhZGUgdG8gTGludXggMi42LjE5CisKKy0gSW5jbHVkZXMgbGFyZ2UgcGFydHMgb2YgdGhlIHBhdGNoIGZyb20gIzEwMjEgYnkgZHBhbGZmeQorLSBJbmNsdWRlcyBSQjUzMiBOQU5EIGRyaXZlciBjaGFuZ2VzIGJ5IG4wLTEKKworW2pvaG5AcGhyb3plbi5vcmc6IGZlaXggd2lsbCBhZGQgdGhpcyB0byBoaXMgdXBzdHJlYW0gcXVldWVdCisKK2xlZGUtY29tbWl0OiBiZmY0Njg4MTNmNzhmODFlMzZlYmIyYTNmNDM1NGRlNzM2NWU2NDBmCitTaWduZWQtb2ZmLWJ5OiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CistLS0KKyBNYWtlZmlsZSB8IDYgKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtNzE5LDExICs3MTksMTEgQEAgS0JVSUxEX0NGTEFHUwkrPSAkKGNhbGwgY2MtZGlzYWJsZS13YXJuaQorIEtCVUlMRF9DRkxBR1MJKz0gJChjYWxsIGNjLWRpc2FibGUtd2FybmluZywgYWRkcmVzcy1vZi1wYWNrZWQtbWVtYmVyKQorIAorIGlmZGVmIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfUEVSRk9STUFOQ0UKKy1LQlVJTERfQ0ZMQUdTICs9IC1PMgorK0tCVUlMRF9DRkxBR1MgKz0gLU8yICQoRVhUUkFfT1BUSU1JWkFUSU9OKQorIGVsc2UgaWZkZWYgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9QRVJGT1JNQU5DRV9PMworLUtCVUlMRF9DRkxBR1MgKz0gLU8zCisrS0JVSUxEX0NGTEFHUyArPSAtTzMgJChFWFRSQV9PUFRJTUlaQVRJT04pCisgZWxzZSBpZmRlZiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUKKy1LQlVJTERfQ0ZMQUdTICs9IC1PcworK0tCVUlMRF9DRkxBR1MgKz0gLU9zIC1mbm8tcmVvcmRlci1ibG9ja3MgLWZuby10cmVlLWNoICQoRVhUUkFfT1BUSU1JWkFUSU9OKQorIGVuZGlmCisgCisgIyBUZWxsIGdjYyB0byBuZXZlciByZXBsYWNlIGNvbmRpdGlvbmFsIGxvYWQgd2l0aCBhIG5vbi1jb25kaXRpb25hbCBvbmUKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzIwMy1rYWxsc3ltc191bmNvbXByZXNzZWQucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC8yMDMta2FsbHN5bXNfdW5jb21wcmVzc2VkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YTJkNGQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC8yMDMta2FsbHN5bXNfdW5jb21wcmVzc2VkLnBhdGNoCkBAIC0wLDAgKzEsMTE5IEBACitGcm9tOiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CitTdWJqZWN0OiBrZXJuZWw6IGFkZCBhIGNvbmZpZyBvcHRpb24gZm9yIGtlZXBpbmcgdGhlIGthbGxzeW1zIHRhYmxlIHVuY29tcHJlc3NlZCwgc2F2aW5nIH45a2Iga2VybmVsIHNpemUgYWZ0ZXIgbHptYSBvbiBhcjcxeHgKKworW2pvaG5AcGhyb3plbi5vcmc6IGFkZGVkIHRvIG15IHVwc3RyZWFtIHF1ZXVlIDMwLjEyLjIwMTZdCitsZWRlLWNvbW1pdDogZTBlMzUwOWI1Y2UyY2NmOTNkNGQ2N2VhOTA3NjEzZjVmN2VjMmVlZAorU2lnbmVkLW9mZi1ieTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorLS0tCisgaW5pdC9LY29uZmlnICAgICAgICAgICAgfCAxMSArKysrKysrKysrKworIGtlcm5lbC9rYWxsc3ltcy5jICAgICAgIHwgIDggKysrKysrKysKKyBzY3JpcHRzL2thbGxzeW1zLmMgICAgICB8IDEyICsrKysrKysrKysrKworIHNjcmlwdHMvbGluay12bWxpbnV4LnNoIHwgIDQgKysrKworIDQgZmlsZXMgY2hhbmdlZCwgMzUgaW5zZXJ0aW9ucygrKQorCistLS0gYS9pbml0L0tjb25maWcKKysrKyBiL2luaXQvS2NvbmZpZworQEAgLTEyODAsNiArMTI4MCwxNyBAQCBjb25maWcgU1lTQ1RMX0FSQ0hfVU5BTElHTl9BTExPVworIAkgIHRoZSB1bmFsaWduZWQgYWNjZXNzIGVtdWxhdGlvbi4KKyAJICBzZWUgYXJjaC9wYXJpc2Mva2VybmVsL3VuYWxpZ25lZC5jIGZvciByZWZlcmVuY2UKKyAKKytjb25maWcgS0FMTFNZTVNfVU5DT01QUkVTU0VECisrCWJvb2wgIktlZXAga2FsbHN5bXMgdW5jb21wcmVzc2VkIgorKwlkZXBlbmRzIG9uIEtBTExTWU1TCisrCWhlbHAKKysJCU5vcm1hbGx5IGthbGxzeW1zIGNvbnRhaW5zIGNvbXByZXNzZWQgc3ltYm9scyAodXNpbmcgYSB0b2tlbiB0YWJsZSksCisrCQlyZWR1Y2luZyB0aGUgdW5jb21wcmVzc2VkIGtlcm5lbCBpbWFnZSBzaXplLiBLZWVwaW5nIHRoZSBzeW1ib2wgdGFibGUKKysJCXVuY29tcHJlc3NlZCBzaWduaWZpY2FudGx5IGltcHJvdmVzIHRoZSBzaXplIG9mIHRoaXMgcGFydCBpbiBjb21wcmVzc2VkCisrCQlrZXJuZWwgaW1hZ2VzLgorKworKwkJU2F5IE4gdW5sZXNzIHlvdSBuZWVkIGNvbXByZXNzZWQga2VybmVsIGltYWdlcyB0byBiZSBzbWFsbC4KKysKKyBjb25maWcgSEFWRV9QQ1NQS1JfUExBVEZPUk0KKyAJYm9vbAorIAorLS0tIGEva2VybmVsL2thbGxzeW1zLmMKKysrKyBiL2tlcm5lbC9rYWxsc3ltcy5jCitAQCAtNzUsNiArNzUsMTEgQEAgc3RhdGljIHVuc2lnbmVkIGludCBrYWxsc3ltc19leHBhbmRfc3ltYgorIAkgKiBGb3IgZXZlcnkgYnl0ZSBvbiB0aGUgY29tcHJlc3NlZCBzeW1ib2wgZGF0YSwgY29weSB0aGUgdGFibGUKKyAJICogZW50cnkgZm9yIHRoYXQgYnl0ZS4KKyAJICovCisrI2lmZGVmIENPTkZJR19LQUxMU1lNU19VTkNPTVBSRVNTRUQKKysJbWVtY3B5KHJlc3VsdCwgZGF0YSArIDEsIGxlbiAtIDEpOworKwlyZXN1bHQgKz0gbGVuIC0gMTsKKysJbGVuID0gMDsKKysjZW5kaWYKKyAJd2hpbGUgKGxlbikgeworIAkJdHB0ciA9ICZrYWxsc3ltc190b2tlbl90YWJsZVtrYWxsc3ltc190b2tlbl9pbmRleFsqZGF0YV1dOworIAkJZGF0YSsrOworQEAgLTEwNyw2ICsxMTIsOSBAQCB0YWlsOgorICAqLworIHN0YXRpYyBjaGFyIGthbGxzeW1zX2dldF9zeW1ib2xfdHlwZSh1bnNpZ25lZCBpbnQgb2ZmKQorIHsKKysjaWZkZWYgQ09ORklHX0tBTExTWU1TX1VOQ09NUFJFU1NFRAorKwlyZXR1cm4ga2FsbHN5bXNfbmFtZXNbb2ZmICsgMV07CisrI2VuZGlmCisgCS8qCisgCSAqIEdldCBqdXN0IHRoZSBmaXJzdCBjb2RlLCBsb29rIGl0IHVwIGluIHRoZSB0b2tlbiB0YWJsZSwKKyAJICogYW5kIHJldHVybiB0aGUgZmlyc3QgY2hhciBmcm9tIHRoaXMgdG9rZW4uCistLS0gYS9zY3JpcHRzL2thbGxzeW1zLmMKKysrKyBiL3NjcmlwdHMva2FsbHN5bXMuYworQEAgLTU5LDYgKzU5LDcgQEAgc3RhdGljIHN0cnVjdCBhZGRyX3JhbmdlIHBlcmNwdV9yYW5nZSA9Cisgc3RhdGljIHN0cnVjdCBzeW1fZW50cnkgKnRhYmxlOworIHN0YXRpYyB1bnNpZ25lZCBpbnQgdGFibGVfc2l6ZSwgdGFibGVfY250OworIHN0YXRpYyBpbnQgYWxsX3N5bWJvbHMgPSAwOworK3N0YXRpYyBpbnQgdW5jb21wcmVzc2VkID0gMDsKKyBzdGF0aWMgaW50IGFic29sdXRlX3BlcmNwdSA9IDA7Cisgc3RhdGljIGludCBiYXNlX3JlbGF0aXZlID0gMDsKKyAKK0BAIC00NDAsNiArNDQxLDkgQEAgc3RhdGljIHZvaWQgd3JpdGVfc3JjKHZvaWQpCisgCisgCWZyZWUobWFya2Vycyk7CisgCisrCWlmICh1bmNvbXByZXNzZWQpCisrCQlyZXR1cm47CisrCisgCW91dHB1dF9sYWJlbCgia2FsbHN5bXNfdG9rZW5fdGFibGUiKTsKKyAJb2ZmID0gMDsKKyAJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CitAQCAtNTAwLDYgKzUwNCw5IEBAIHN0YXRpYyB2b2lkICpmaW5kX3Rva2VuKHVuc2lnbmVkIGNoYXIgKnMKKyB7CisgCWludCBpOworIAorKwlpZiAodW5jb21wcmVzc2VkKQorKwkJcmV0dXJuIE5VTEw7CisrCisgCWZvciAoaSA9IDA7IGkgPCBsZW4gLSAxOyBpKyspIHsKKyAJCWlmIChzdHJbaV0gPT0gdG9rZW5bMF0gJiYgc3RyW2krMV0gPT0gdG9rZW5bMV0pCisgCQkJcmV0dXJuICZzdHJbaV07CitAQCAtNTcyLDYgKzU3OSw5IEBAIHN0YXRpYyB2b2lkIG9wdGltaXplX3Jlc3VsdCh2b2lkKQorIHsKKyAJaW50IGksIGJlc3Q7CisgCisrCWlmICh1bmNvbXByZXNzZWQpCisrCQlyZXR1cm47CisrCisgCS8qIHVzaW5nIHRoZSAnXDAnIHN5bWJvbCBsYXN0IGFsbG93cyBjb21wcmVzc19zeW1ib2xzIHRvIHVzZSBzdGFuZGFyZAorIAkgKiBmYXN0IHN0cmluZyBmdW5jdGlvbnMgKi8KKyAJZm9yIChpID0gMjU1OyBpID49IDA7IGktLSkgeworQEAgLTc1MSw2ICs3NjEsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQkJCWFic29sdXRlX3BlcmNwdSA9IDE7CisgCQkJZWxzZSBpZiAoc3RyY21wKGFyZ3ZbaV0sICItLWJhc2UtcmVsYXRpdmUiKSA9PSAwKQorIAkJCQliYXNlX3JlbGF0aXZlID0gMTsKKysJCQllbHNlIGlmIChzdHJjbXAoYXJndltpXSwgIi0tdW5jb21wcmVzc2VkIikgPT0gMCkKKysJCQkJdW5jb21wcmVzc2VkID0gMTsKKyAJCQllbHNlCisgCQkJCXVzYWdlKCk7CisgCQl9CistLS0gYS9zY3JpcHRzL2xpbmstdm1saW51eC5zaAorKysrIGIvc2NyaXB0cy9saW5rLXZtbGludXguc2gKK0BAIC0xNjAsNiArMTYwLDEwIEBAIGthbGxzeW1zKCkKKyAJCWthbGxzeW1vcHQ9IiR7a2FsbHN5bW9wdH0gLS1iYXNlLXJlbGF0aXZlIgorIAlmaQorIAorKwlpZiBbIC1uICIke0NPTkZJR19LQUxMU1lNU19VTkNPTVBSRVNTRUR9IiBdOyB0aGVuCisrCQlrYWxsc3ltb3B0PSIke2thbGxzeW1vcHR9IC0tdW5jb21wcmVzc2VkIgorKwlmaQorKworIAlsb2NhbCBhZmxhZ3M9IiR7S0JVSUxEX0FGTEFHU30gJHtLQlVJTERfQUZMQUdTX0tFUk5FTH0gICAgICAgICAgICAgICBcCisgCQkgICAgICAke05PU1RESU5DX0ZMQUdTfSAke0xJTlVYSU5DTFVERX0gJHtLQlVJTERfQ1BQRkxBR1N9IgorIApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvMjA1LWJhY2t0cmFjZV9tb2R1bGVfaW5mby5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzIwNS1iYWNrdHJhY2VfbW9kdWxlX2luZm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA0OGMyNQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzIwNS1iYWNrdHJhY2VfbW9kdWxlX2luZm8ucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorRnJvbTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorU3ViamVjdDoga2VybmVsOiB3aGVuIEtBTExTWU1TIGlzIGRpc2FibGVkLCBwcmludCBtb2R1bGUgYWRkcmVzcyArIHNpemUgZm9yIG1hdGNoaW5nIGJhY2t0cmFjZSBlbnRyaWVzCisKK1tqb2huQHBocm96ZW4ub3JnOiBmZWxpeCB3aWxsIGFkZCB0aGlzIHRvIGhpcyB1cHN0cmVhbSBxdWV1ZV0KKworbGVkZS1jb21taXQgNTM4MjdjZGM4MjQ1NTZjZGE5MTBiMjNjZTUwMzBjMzYzYjhmMTQ2MQorU2lnbmVkLW9mZi1ieTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorLS0tCisgbGliL3ZzcHJpbnRmLmMgfCAxNSArKysrKysrKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTEgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworLS0tIGEvbGliL3ZzcHJpbnRmLmMKKysrKyBiL2xpYi92c3ByaW50Zi5jCitAQCAtOTQwLDggKzk0MCwxMCBAQCBjaGFyICpzeW1ib2xfc3RyaW5nKGNoYXIgKmJ1ZiwgY2hhciAqZW5kCisgCQkgICAgc3RydWN0IHByaW50Zl9zcGVjIHNwZWMsIGNvbnN0IGNoYXIgKmZtdCkKKyB7CisgCXVuc2lnbmVkIGxvbmcgdmFsdWU7CistI2lmZGVmIENPTkZJR19LQUxMU1lNUworIAljaGFyIHN5bVtLU1lNX1NZTUJPTF9MRU5dOworKyNpZm5kZWYgQ09ORklHX0tBTExTWU1TCisrCXN0cnVjdCBtb2R1bGUgKm1vZDsKKysJaW50IGxlbjsKKyAjZW5kaWYKKyAKKyAJaWYgKGZtdFsxXSA9PSAnUicpCitAQCAtOTU4LDggKzk2MCwxNCBAQCBjaGFyICpzeW1ib2xfc3RyaW5nKGNoYXIgKmJ1ZiwgY2hhciAqZW5kCisgCisgCXJldHVybiBzdHJpbmdfbm9jaGVjayhidWYsIGVuZCwgc3ltLCBzcGVjKTsKKyAjZWxzZQorLQlyZXR1cm4gc3BlY2lhbF9oZXhfbnVtYmVyKGJ1ZiwgZW5kLCB2YWx1ZSwgc2l6ZW9mKHZvaWQgKikpOworKwlsZW4gPSBzbnByaW50ZihzeW0sIHNpemVvZihzeW0pLCAiMHglbHgiLCB2YWx1ZSk7CisrCW1vZCA9IF9fbW9kdWxlX2FkZHJlc3ModmFsdWUpOworKwlpZiAobW9kKQorKwkJc25wcmludGYoc3ltICsgbGVuLCBzaXplb2Yoc3ltKSAtIGxlbiwgIiBbJXNAJXArMHgleF0iLAorKwkJCSBtb2QtPm5hbWUsIG1vZC0+Y29yZV9sYXlvdXQuYmFzZSwKKysJCQkgbW9kLT5jb3JlX2xheW91dC5zaXplKTsKKyAjZW5kaWYKKysJcmV0dXJuIHN0cmluZyhidWYsIGVuZCwgc3ltLCBzcGVjKTsKKyB9CisgCisgc3RhdGljIGNvbnN0IHN0cnVjdCBwcmludGZfc3BlYyBkZWZhdWx0X3N0cl9zcGVjID0gewpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvMjQwLXJlbW92ZS11bnNhbmUtZmlsZW5hbWVzLWZyb20tZGVwc19pbml0cmFtZnMtbGlzdC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzI0MC1yZW1vdmUtdW5zYW5lLWZpbGVuYW1lcy1mcm9tLWRlcHNfaW5pdHJhbWZzLWxpc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q4OTBkMwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzI0MC1yZW1vdmUtdW5zYW5lLWZpbGVuYW1lcy1mcm9tLWRlcHNfaW5pdHJhbWZzLWxpc3QucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorRnJvbTogR2Fib3IgSnVob3MgPGp1aG9zZ0BvcGVud3J0Lm9yZz4KK1N1YmplY3Q6IHVzcjogc2FuaXRpemUgZGVwc19pbml0cmFtZnMgbGlzdAorCitJZiBhbnkgZmlsZW5hbWUgaW4gdGhlIGludHJhbWZzIGRlcGVuZGVuY3kKK2xpc3QgY29udGFpbnMgYSBjb2xvbiwgdGhhdCBjYXVzZXMgYSBrZXJuZWwKK2J1aWxkIGVycm9yIGxpa2UgdGhpczoKKworL2RldmVsL29wZW53cnQvYnVpbGRfZGlyL2xpbnV4LWFyNzF4eF9nZW5lcmljL2xpbnV4LTMuNi42L3Vzci9NYWtlZmlsZTo1ODogKioqIG11bHRpcGxlIHRhcmdldCBwYXR0ZXJucy4gIFN0b3AuCittYWtlWzVdOiAqKiogW3Vzcl0gRXJyb3IgMgorCitGaXggaXQgYnkgcmVtb3Zpbmcgc3VjaCBmaWxlbmFtZXMgZnJvbSB0aGUKK2RlcHNfaW5pdHJhbWZzIGxpc3QuCisKK1NpZ25lZC1vZmYtYnk6IEdhYm9yIEp1aG9zIDxqdWhvc2dAb3BlbndydC5vcmc+CistLS0KKyB1c3IvTWFrZWZpbGUgfCA4ICsrKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworLS0tIGEvdXNyL01ha2VmaWxlCisrKysgYi91c3IvTWFrZWZpbGUKK0BAIC00MiwyMSArNDIsMjMgQEAgaWZuZXEgKCQod2lsZGNhcmQgJChvYmopLyQoZGF0YWZpbGVfZF95KQorIAlpbmNsdWRlICQob2JqKS8kKGRhdGFmaWxlX2RfeSkKKyBlbmRpZgorIAorK2RlcHNfaW5pdHJhbWZzX3NhbmUgOj0gJChmb3JlYWNoIHYsJChkZXBzX2luaXRyYW1mcyksJChpZiAkKGZpbmRzdHJpbmcgOiwkKHYpKSwsJCh2KSkpCisrCisgcXVpZXRfY21kX2luaXRmcyA9IEdFTiAgICAgJEAKKyAgICAgICBjbWRfaW5pdGZzID0gJChpbml0cmFtZnMpIC1vICRAICQocmFtZnMtYXJncykgJChyYW1mcy1pbnB1dCkKKyAKKyB0YXJnZXRzIDo9ICQoZGF0YWZpbGVfeSkKKyAKKyAjIGRvIG5vdCB0cnkgdG8gdXBkYXRlIGZpbGVzIGluY2x1ZGVkIGluIGluaXRyYW1mcworLSQoZGVwc19pbml0cmFtZnMpOiA7CisrJChkZXBzX2luaXRyYW1mc19zYW5lKTogOworIAorLSQoZGVwc19pbml0cmFtZnMpOiBrbGliY2RpcnMKKyskKGRlcHNfaW5pdHJhbWZzX3NhbmUpOiBrbGliY2RpcnMKKyAjIFdlIHJlYnVpbGQgaW5pdHJhbWZzX2RhdGEuY3BpbyBpZjoKKyAjIDEpIEFueSBpbmNsdWRlZCBmaWxlIGlzIG5ld2VyIHRoYW4gaW5pdHJhbWZzX2RhdGEuY3BpbworICMgMikgVGhlcmUgYXJlIGNoYW5nZXMgaW4gd2hpY2ggZmlsZXMgYXJlIGluY2x1ZGVkIChhZGRlZCBvciBkZWxldGVkKQorICMgMykgSWYgZ2VuX2luaXRfY3BpbyBhcmUgbmV3ZXIgdGhhbiBpbml0cmFtZnNfZGF0YS5jcGlvCisgIyA0KSBBcmd1bWVudHMgdG8gZ2VuX2luaXRyYW1mcy5zaCBjaGFuZ2VzCistJChvYmopLyQoZGF0YWZpbGVfeSk6ICQob2JqKS9nZW5faW5pdF9jcGlvICQoZGVwc19pbml0cmFtZnMpIGtsaWJjZGlycworKyQob2JqKS8kKGRhdGFmaWxlX3kpOiAkKG9iaikvZ2VuX2luaXRfY3BpbyAkKGRlcHNfaW5pdHJhbWZzX3NhbmUpIGtsaWJjZGlycworIAkkKFEpJChpbml0cmFtZnMpIC1sICQocmFtZnMtaW5wdXQpID4gJChvYmopLyQoZGF0YWZpbGVfZF95KQorIAkkKGNhbGwgaWZfY2hhbmdlZCxpbml0ZnMpCisgCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC8yNjEtZW5hYmxlX3dpbGlua19wbGF0Zm9ybV93aXRob3V0X2RyaXZlcnMucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC8yNjEtZW5hYmxlX3dpbGlua19wbGF0Zm9ybV93aXRob3V0X2RyaXZlcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRjZjJjYwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzI2MS1lbmFibGVfd2lsaW5rX3BsYXRmb3JtX3dpdGhvdXRfZHJpdmVycy5wYXRjaApAQCAtMCwwICsxLDIwIEBACitGcm9tOiBJbXJlIEthbG96IDxrYWxvekBvcGVud3J0Lm9yZz4KK1N1YmplY3Q6IFtQQVRDSF0gaGFjazogbmV0OiB3aXJlbGVzczogbWFrZSB0aGUgd2wxMnh4IGdsdWUgY29kZSBhdmFpbGFibGUgd2l0aAorIGNvbXBhdC13aXJlbGVzcywgdG9vCisKK1NpZ25lZC1vZmYtYnk6IEltcmUgS2Fsb3ogPGthbG96QG9wZW53cnQub3JnPgorLS0tCisgZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvS2NvbmZpZyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvS2NvbmZpZworKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvS2NvbmZpZworQEAgLTIwLDcgKzIwLDcgQEAgc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvSworIAorIGNvbmZpZyBXSUxJTktfUExBVEZPUk1fREFUQQorIAlib29sICJUSSBXaUxpbmsgcGxhdGZvcm0gZGF0YSIKKy0JZGVwZW5kcyBvbiBXTENPUkVfU0RJTyB8fCBXTDEyNTFfU0RJTworKwlkZXBlbmRzIG9uIFdMQ09SRV9TRElPIHx8IFdMMTI1MV9TRElPIHx8IEFSQ0hfT01BUDJQTFVTCisgCWRlZmF1bHQgeQorIAktLS1oZWxwLS0tCisgCVNtYWxsIHBsYXRmb3JtIGRhdGEgYml0IG5lZWRlZCB0byBwYXNzIGRhdGEgdG8gdGhlIHNkaW8gbW9kdWxlcy4KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzI3MC1wbGF0Zm9ybS1taWtyb3Rpay1idWlsZC1iaXRzLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvMjcwLXBsYXRmb3JtLW1pa3JvdGlrLWJ1aWxkLWJpdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY3MzhlZgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzI3MC1wbGF0Zm9ybS1taWtyb3Rpay1idWlsZC1iaXRzLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gYzJkZWI1ZWYwMWEwZWYwOTA4ODgzMjc0NGNiYWNlOWUyMzlhNmVlMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9UaGliYXV0PTIwVkFSPUMzPTg4TkU/PSA8aGFja3NAc2xhc2hkaXJ0Lm9yZz4KK0RhdGU6IFNhdCwgMjggTWFyIDIwMjAgMTI6MTE6NTAgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gZ2VuZXJpYzogcGxhdGZvcm0vbWlrcm90aWsgYnVpbGQgYml0cyAoNS40KQorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitUaGlzIHBhdGNoIGFkZHMgcGxhdGZvcm0vbWlrcm90aWsga2VybmVsIGJ1aWxkIGJpdHMKKworU2lnbmVkLW9mZi1ieTogVGhpYmF1dCBWQVLDiE5FIDxoYWNrc0BzbGFzaGRpcnQub3JnPgorLS0tCisgZHJpdmVycy9wbGF0Zm9ybS9LY29uZmlnICB8IDIgKysKKyBkcml2ZXJzL3BsYXRmb3JtL01ha2VmaWxlIHwgMSArCisgMiBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKworLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS9LY29uZmlnCisrKysgYi9kcml2ZXJzL3BsYXRmb3JtL0tjb25maWcKK0BAIC0xMywzICsxMyw1IEBAIHNvdXJjZSAiZHJpdmVycy9wbGF0Zm9ybS9jaHJvbWUvS2NvbmZpZyIKKyBzb3VyY2UgImRyaXZlcnMvcGxhdGZvcm0vbWVsbGFub3gvS2NvbmZpZyIKKyAKKyBzb3VyY2UgImRyaXZlcnMvcGxhdGZvcm0vb2xwYy9LY29uZmlnIgorKworK3NvdXJjZSAiZHJpdmVycy9wbGF0Zm9ybS9taWtyb3Rpay9LY29uZmlnIgorLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS9NYWtlZmlsZQorKysrIGIvZHJpdmVycy9wbGF0Zm9ybS9NYWtlZmlsZQorQEAgLTksMyArOSw0IEBAIG9iai0kKENPTkZJR19NSVBTKQkJKz0gbWlwcy8KKyBvYmotJChDT05GSUdfT0xQQ19FQykJCSs9IG9scGMvCisgb2JqLSQoQ09ORklHX0dPTERGSVNIKQkJKz0gZ29sZGZpc2gvCisgb2JqLSQoQ09ORklHX0NIUk9NRV9QTEFURk9STVMpCSs9IGNocm9tZS8KKytvYmotJChDT05GSUdfTUlLUk9USUspCQkrPSBtaWtyb3Rpay8KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzMwMC1taXBzX2V4cG9zZV9ib290X3Jhdy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzMwMC1taXBzX2V4cG9zZV9ib290X3Jhdy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGE5MDE4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvMzAwLW1pcHNfZXhwb3NlX2Jvb3RfcmF3LnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb206IE1hcmsgTWlsbGVyIDxtYXJrQG1pcmVsbC5vcmc+CitTdWJqZWN0OiBtaXBzOiBleHBvc2UgQ09ORklHX0JPT1RfUkFXCisKK1RoaXMgZXhwb3NlcyB0aGUgQ09ORklHX0JPT1RfUkFXIHN5bWJvbCBpbiBLY29uZmlnLiBUaGlzIGlzIG5lZWRlZCBvbgorY2VydGFpbiBCcm9hZGNvbSBjaGlwc2V0cyBydW5uaW5nIENGRSBpbiBvcmRlciB0byBsb2FkIHRoZSBrZXJuZWwuCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgTWlsbGVyIDxtYXJrQG1pcmVsbC5vcmc+CitBY2tlZC1ieTogUm9iIExhbmRsZXkgPHJvYkBsYW5kbGV5Lm5ldD4KKy0tLQorLS0tIGEvYXJjaC9taXBzL0tjb25maWcKKysrKyBiL2FyY2gvbWlwcy9LY29uZmlnCitAQCAtMTA3Miw5ICsxMDcyLDYgQEAgY29uZmlnIEZXX0FSQworIGNvbmZpZyBBUkNIX01BWV9IQVZFX1BDX0ZEQworIAlib29sCisgCistY29uZmlnIEJPT1RfUkFXCistCWJvb2wKKy0KKyBjb25maWcgQ0VWVF9CQ00xNDgwCisgCWJvb2wKKyAKK0BAIC0zMDQ4LDYgKzMwNDUsMTggQEAgY2hvaWNlCisgCQlib29sICJFeHRlbmQgYnVpbHRpbiBrZXJuZWwgYXJndW1lbnRzIHdpdGggYm9vdGxvYWRlciBhcmd1bWVudHMiCisgZW5kY2hvaWNlCisgCisrY29uZmlnIEJPT1RfUkFXCisrCWJvb2wgIkVuYWJsZSB0aGUga2VybmVsIHRvIGJlIGV4ZWN1dGVkIGZyb20gdGhlIGxvYWQgYWRkcmVzcyIKKysJZGVmYXVsdCBuCisrCWhlbHAKKysJIEFsbG93IHRoZSBrZXJuZWwgdG8gYmUgZXhlY3V0ZWQgZnJvbSB0aGUgbG9hZCBhZGRyZXNzIGZvcgorKwkgYm9vdGxvYWRlcnMgd2hpY2ggY2Fubm90IHJlYWQgdGhlIEVMRiBmb3JtYXQuIFRoaXMgcGxhY2VzCisrCSBhIGp1bXAgdG8gc3RhcnRfa2VybmVsIGF0IHRoZSBsb2FkIGFkZHJlc3MuCisrCisrCSBJZiB1bnN1cmUsIHNheSBOLgorKworKworKworIGVuZG1lbnUKKyAKKyBjb25maWcgTE9DS0RFUF9TVVBQT1JUCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC8zMDItbWlwc19ub19icmFuY2hfbGlrZWx5LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvMzAyLW1pcHNfbm9fYnJhbmNoX2xpa2VseS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjFiNDg5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvMzAyLW1pcHNfbm9fYnJhbmNoX2xpa2VseS5wYXRjaApAQCAtMCwwICsxLDIyIEBACitGcm9tOiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CitTdWJqZWN0OiBtaXBzOiB1c2UgLW1uby1icmFuY2gtbGlrZWx5IGZvciBrZXJuZWwgYW5kIHVzZXJzcGFjZQorCitzYXZlcyB+MTFrIGtlcm5lbCBzaXplIGFmdGVyIGx6bWEgYW5kIH4xMmsgc3F1YXNoZnMgc2l6ZSBpbiB0aGUKKworbGVkZS1jb21taXQ6IDQxYTAzOWY0NjQ1MGZmYWU5NDgzZDYyMTY0MjIwOTg2NjlkYTI5MDAKK1NpZ25lZC1vZmYtYnk6IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KKy0tLQorIGFyY2gvbWlwcy9NYWtlZmlsZSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworLS0tIGEvYXJjaC9taXBzL01ha2VmaWxlCisrKysgYi9hcmNoL21pcHMvTWFrZWZpbGUKK0BAIC05Miw3ICs5Miw3IEBAIGFsbC0kKENPTkZJR19TWVNfU1VQUE9SVFNfWkJPT1QpKz0gdm1saW4KKyAjIG1hY2hpbmVzIG1heSBhbHNvLiAgU2luY2UgQkZEIGlzIGluY3JlZGlibHkgYnVnZ3kgd2l0aCByZXNwZWN0IHRvCisgIyBjcm9zc2Zvcm1hdCBsaW5raW5nIHdlIHJlbHkgb24gdGhlIGVsZjJlY29mZiB0b29sIGZvciBmb3JtYXQgY29udmVyc2lvbi4KKyAjCistY2ZsYWdzLXkJCQkrPSAtRyAwIC1tbm8tYWJpY2FsbHMgLWZuby1waWMgLXBpcGUKKytjZmxhZ3MteQkJCSs9IC1HIDAgLW1uby1hYmljYWxscyAtZm5vLXBpYyAtcGlwZSAtbW5vLWJyYW5jaC1saWtlbHkKKyBjZmxhZ3MteQkJCSs9IC1tc29mdC1mbG9hdAorIExERkxBR1Nfdm1saW51eAkJCSs9IC1HIDAgLXN0YXRpYyAtbiAtbm9zdGRsaWIKKyBLQlVJTERfQUZMQUdTX01PRFVMRQkJKz0gLW1sb25nLWNhbGxzCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC8zMDUtbWlwc19tb2R1bGVfcmVsb2MucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC8zMDUtbWlwc19tb2R1bGVfcmVsb2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBhMjE5ZgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzMwNS1taXBzX21vZHVsZV9yZWxvYy5wYXRjaApAQCAtMCwwICsxLDM3MSBAQAorRnJvbTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorU3ViamVjdDogbWlwczogcmVwbGFjZSAtbWxvbmctY2FsbHMgd2l0aCAtbW5vLWxvbmctY2FsbHMgdG8gbWFrZSBmdW5jdGlvbiBjYWxscyBmYXN0ZXIgaW4ga2VybmVsIG1vZHVsZXMgdG8gYWNoaWV2ZSB0aGlzLCB0cnkgdG8KKworbGVkZS1jb21taXQ6IDNiM2Q2NDc0M2JhMmE4NzRkZjlkNzBjZDE5ZTI0MjIwNWIwYTc4OGMKK1NpZ25lZC1vZmYtYnk6IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KKy0tLQorIGFyY2gvbWlwcy9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgNSArCisgYXJjaC9taXBzL2luY2x1ZGUvYXNtL21vZHVsZS5oIHwgICA1ICsKKyBhcmNoL21pcHMva2VybmVsL21vZHVsZS5jICAgICAgfCAyNzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KKyAzIGZpbGVzIGNoYW5nZWQsIDI4NCBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCistLS0gYS9hcmNoL21pcHMvTWFrZWZpbGUKKysrKyBiL2FyY2gvbWlwcy9NYWtlZmlsZQorQEAgLTk1LDggKzk1LDE4IEBAIGFsbC0kKENPTkZJR19TWVNfU1VQUE9SVFNfWkJPT1QpKz0gdm1saW4KKyBjZmxhZ3MteQkJCSs9IC1HIDAgLW1uby1hYmljYWxscyAtZm5vLXBpYyAtcGlwZSAtbW5vLWJyYW5jaC1saWtlbHkKKyBjZmxhZ3MteQkJCSs9IC1tc29mdC1mbG9hdAorIExERkxBR1Nfdm1saW51eAkJCSs9IC1HIDAgLXN0YXRpYyAtbiAtbm9zdGRsaWIKKytpZmRlZiBDT05GSUdfNjRCSVQKKyBLQlVJTERfQUZMQUdTX01PRFVMRQkJKz0gLW1sb25nLWNhbGxzCisgS0JVSUxEX0NGTEFHU19NT0RVTEUJCSs9IC1tbG9uZy1jYWxscworK2Vsc2UKKysgIGlmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQorKyAgICBLQlVJTERfQUZMQUdTX01PRFVMRQkrPSAtbWxvbmctY2FsbHMKKysgICAgS0JVSUxEX0NGTEFHU19NT0RVTEUJKz0gLW1sb25nLWNhbGxzCisrICBlbHNlCisrICAgIEtCVUlMRF9BRkxBR1NfTU9EVUxFCSs9IC1tbm8tbG9uZy1jYWxscworKyAgICBLQlVJTERfQ0ZMQUdTX01PRFVMRQkrPSAtbW5vLWxvbmctY2FsbHMKKysgIGVuZGlmCisrZW5kaWYKKyAKKyBpZmVxICgkKENPTkZJR19SRUxPQ0FUQUJMRSkseSkKKyBMREZMQUdTX3ZtbGludXgJCQkrPSAtLWVtaXQtcmVsb2NzCistLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbW9kdWxlLmgKKysrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tb2R1bGUuaAorQEAgLTEyLDYgKzEyLDExIEBAIHN0cnVjdCBtb2RfYXJjaF9zcGVjaWZpYyB7CisgCWNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmRiZV9zdGFydDsKKyAJY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSAqZGJlX2VuZDsKKyAJc3RydWN0IG1pcHNfaGkxNiAqcl9taXBzX2hpMTZfbGlzdDsKKysKKysJdm9pZCAqcGh5c19wbHRfdGJsOworKwl2b2lkICp2aXJ0X3BsdF90Ymw7CisrCXVuc2lnbmVkIGludCBwaHlzX3BsdF9vZmZzZXQ7CisrCXVuc2lnbmVkIGludCB2aXJ0X3BsdF9vZmZzZXQ7CisgfTsKKyAKKyB0eXBlZGVmIHVpbnQ4X3QgRWxmNjRfQnl0ZTsJCS8qIFR5cGUgZm9yIGEgOC1iaXQgcXVhbnRpdHkuICAqLworLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9tb2R1bGUuYworKysrIGIvYXJjaC9taXBzL2tlcm5lbC9tb2R1bGUuYworQEAgLTMyLDE0ICszMiwyMjEgQEAgc3RydWN0IG1pcHNfaGkxNiB7Cisgc3RhdGljIExJU1RfSEVBRChkYmVfbGlzdCk7Cisgc3RhdGljIERFRklORV9TUElOTE9DSyhkYmVfbG9jayk7CisgCistI2lmZGVmIE1PRFVMRV9TVEFSVAorKy8qCisrICogR2V0IHRoZSBwb3RlbnRpYWwgbWF4IHRyYW1wb2xpbmVzIHNpemUgcmVxdWlyZWQgb2YgdGhlIGluaXQgYW5kCisrICogbm9uLWluaXQgc2VjdGlvbnMuIE9ubHkgdXNlZCBpZiB3ZSBjYW5ub3QgZmluZCBlbm91Z2ggY29udGlndW91cworKyAqIHBoeXNpY2FsbHkgbWFwcGVkIG1lbW9yeSB0byBwdXQgdGhlIG1vZHVsZSBpbnRvLgorKyAqLworK3N0YXRpYyB1bnNpZ25lZCBpbnQKKytnZXRfcGx0X3NpemUoY29uc3QgRWxmX0VoZHIgKmhkciwgY29uc3QgRWxmX1NoZHIgKnNlY2hkcnMsCisrICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNlY3N0cmluZ3MsIHVuc2lnbmVkIGludCBzeW1pbmRleCwgYm9vbCBpc19pbml0KQorK3sKKysJdW5zaWduZWQgbG9uZyByZXQgPSAwOworKwl1bnNpZ25lZCBpbnQgaSwgajsKKysJRWxmX1N5bSAqc3ltczsKKysKKysJLyogRXZlcnl0aGluZyBtYXJrZWQgQUxMT0MgKHRoaXMgaW5jbHVkZXMgdGhlIGV4cG9ydGVkIHN5bWJvbHMpICovCisrCWZvciAoaSA9IDE7IGkgPCBoZHItPmVfc2hudW07ICsraSkgeworKwkJdW5zaWduZWQgaW50IGluZm8gPSBzZWNoZHJzW2ldLnNoX2luZm87CisrCisrCQlpZiAoc2VjaGRyc1tpXS5zaF90eXBlICE9IFNIVF9SRUwKKysJCSAgICAmJiBzZWNoZHJzW2ldLnNoX3R5cGUgIT0gU0hUX1JFTEEpCisrCQkJY29udGludWU7CisrCisrCQkvKiBOb3QgYSB2YWxpZCByZWxvY2F0aW9uIHNlY3Rpb24/ICovCisrCQlpZiAoaW5mbyA+PSBoZHItPmVfc2hudW0pCisrCQkJY29udGludWU7CisrCisrCQkvKiBEb24ndCBib3RoZXIgd2l0aCBub24tYWxsb2NhdGVkIHNlY3Rpb25zICovCisrCQlpZiAoIShzZWNoZHJzW2luZm9dLnNoX2ZsYWdzICYgU0hGX0FMTE9DKSkKKysJCQljb250aW51ZTsKKysKKysJCS8qIElmIGl0J3MgY2FsbGVkICouaW5pdCosIGFuZCB3ZSdyZSBub3QgaW5pdCwgd2UncmUKKysgICAgICAgICAgICAgICAgICAgbm90IGludGVyZXN0ZWQgKi8KKysJCWlmICgoc3Ryc3RyKHNlY3N0cmluZ3MgKyBzZWNoZHJzW2ldLnNoX25hbWUsICIuaW5pdCIpICE9IDApCisrCQkgICAgIT0gaXNfaW5pdCkKKysJCQljb250aW51ZTsKKysKKysJCXN5bXMgPSAoRWxmX1N5bSAqKSBzZWNoZHJzW3N5bWluZGV4XS5zaF9hZGRyOworKwkJaWYgKHNlY2hkcnNbaV0uc2hfdHlwZSA9PSBTSFRfUkVMKSB7CisrCQkJRWxmX01pcHNfUmVsICpyZWwgPSAodm9pZCAqKSBzZWNoZHJzW2ldLnNoX2FkZHI7CisrCQkJdW5zaWduZWQgaW50IHNpemUgPSBzZWNoZHJzW2ldLnNoX3NpemUgLyBzaXplb2YoKnJlbCk7CisrCisrCQkJZm9yIChqID0gMDsgaiA8IHNpemU7ICsraikgeworKwkJCQlFbGZfU3ltICpzeW07CisrCisrCQkJCWlmIChFTEZfTUlQU19SX1RZUEUocmVsW2pdKSAhPSBSX01JUFNfMjYpCisrCQkJCQljb250aW51ZTsKKysKKysJCQkJc3ltID0gc3ltcyArIEVMRl9NSVBTX1JfU1lNKHJlbFtqXSk7CisrCQkJCWlmICghaXNfaW5pdCAmJiBzeW0tPnN0X3NobmR4ICE9IFNITl9VTkRFRikKKysJCQkJCWNvbnRpbnVlOworKworKwkJCQlyZXQgKz0gNCAqIHNpemVvZihpbnQpOworKwkJCX0KKysJCX0gZWxzZSB7CisrCQkJRWxmX01pcHNfUmVsYSAqcmVsYSA9ICh2b2lkICopIHNlY2hkcnNbaV0uc2hfYWRkcjsKKysJCQl1bnNpZ25lZCBpbnQgc2l6ZSA9IHNlY2hkcnNbaV0uc2hfc2l6ZSAvIHNpemVvZigqcmVsYSk7CisrCisrCQkJZm9yIChqID0gMDsgaiA8IHNpemU7ICsraikgeworKwkJCQlFbGZfU3ltICpzeW07CisrCisrCQkJCWlmIChFTEZfTUlQU19SX1RZUEUocmVsYVtqXSkgIT0gUl9NSVBTXzI2KQorKwkJCQkJY29udGludWU7CisrCisrCQkJCXN5bSA9IHN5bXMgKyBFTEZfTUlQU19SX1NZTShyZWxhW2pdKTsKKysJCQkJaWYgKCFpc19pbml0ICYmIHN5bS0+c3Rfc2huZHggIT0gU0hOX1VOREVGKQorKwkJCQkJY29udGludWU7CisrCisrCQkJCXJldCArPSA0ICogc2l6ZW9mKGludCk7CisrCQkJfQorKwkJfQorKwl9CisrCisrCXJldHVybiByZXQ7CisrfQorKworKyNpZm5kZWYgTU9EVUxFX1NUQVJUCisrc3RhdGljIHZvaWQgKmFsbG9jX3BoeXModW5zaWduZWQgbG9uZyBzaXplKQorK3sKKysJdW5zaWduZWQgb3JkZXI7CisrCXN0cnVjdCBwYWdlICpwYWdlOworKwlzdHJ1Y3QgcGFnZSAqcDsKKysKKysJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7CisrCW9yZGVyID0gZ2V0X29yZGVyKHNpemUpOworKworKwlwYWdlID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT1dBUk4gfAorKwkJCV9fR0ZQX1RISVNOT0RFLCBvcmRlcik7CisrCWlmICghcGFnZSkKKysJCXJldHVybiBOVUxMOworKworKwlzcGxpdF9wYWdlKHBhZ2UsIG9yZGVyKTsKKysKKysJLyogbWFyayBhbGwgcGFnZXMgZXhjZXB0IGZvciB0aGUgbGFzdCBvbmUgKi8KKysJZm9yIChwID0gcGFnZTsgcCArIDEgPCBwYWdlICsgKHNpemUgPj4gUEFHRV9TSElGVCk7ICsrcCkKKysJCXNldF9iaXQoUEdfb3duZXJfcHJpdl8xLCAmcC0+ZmxhZ3MpOworKworKwlmb3IgKHAgPSBwYWdlICsgKHNpemUgPj4gUEFHRV9TSElGVCk7IHAgPCBwYWdlICsgKDEgPDwgb3JkZXIpOyArK3ApCisrCQlfX2ZyZWVfcGFnZShwKTsKKysKKysJcmV0dXJuIHBhZ2VfYWRkcmVzcyhwYWdlKTsKKyt9CisrI2VuZGlmCisrCisrc3RhdGljIHZvaWQgZnJlZV9waHlzKHZvaWQgKnB0cikKKyt7CisrCXN0cnVjdCBwYWdlICpwYWdlOworKwlib29sIGZyZWU7CisrCisrCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UocHRyKTsKKysJZG8geworKwkJZnJlZSA9IHRlc3RfYW5kX2NsZWFyX2JpdChQR19vd25lcl9wcml2XzEsICZwYWdlLT5mbGFncyk7CisrCQlfX2ZyZWVfcGFnZShwYWdlKTsKKysJCXBhZ2UrKzsKKysJfSB3aGlsZSAoZnJlZSk7CisrfQorKworKworIHZvaWQgKm1vZHVsZV9hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpCisgeworKyNpZmRlZiBNT0RVTEVfU1RBUlQKKyAJcmV0dXJuIF9fdm1hbGxvY19ub2RlX3JhbmdlKHNpemUsIDEsIE1PRFVMRV9TVEFSVCwgTU9EVUxFX0VORCwKKyAJCQkJR0ZQX0tFUk5FTCwgUEFHRV9LRVJORUwsIDAsIE5VTUFfTk9fTk9ERSwKKyAJCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKKysjZWxzZQorKwl2b2lkICpwdHI7CisrCisrCWlmIChzaXplID09IDApCisrCQlyZXR1cm4gTlVMTDsKKysKKysJcHRyID0gYWxsb2NfcGh5cyhzaXplKTsKKysKKysJLyogSWYgd2UgZmFpbGVkIHRvIGFsbG9jYXRlIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnksCisrCSAqIGZhbGwgYmFjayB0byByZWd1bGFyIHZtYWxsb2MuIFRoZSBtb2R1bGUgbG9hZGVyIGNvZGUgd2lsbAorKwkgKiBjcmVhdGUganVtcCB0YWJsZXMgdG8gaGFuZGxlIGxvbmcganVtcHMgKi8KKysJaWYgKCFwdHIpCisrCQlyZXR1cm4gdm1hbGxvYyhzaXplKTsKKysKKysJcmV0dXJuIHB0cjsKKysjZW5kaWYKKyB9CisrCisrc3RhdGljIGlubGluZSBib29sIGlzX3BoeXNfYWRkcih2b2lkICpwdHIpCisreworKyNpZmRlZiBDT05GSUdfNjRCSVQKKysJcmV0dXJuIChLU0VHWCgodW5zaWduZWQgbG9uZylwdHIpID09IENLU0VHMCk7CisrI2Vsc2UKKysJcmV0dXJuIChLU0VHWChwdHIpID09IEtTRUcwKTsKKyAjZW5kaWYKKyt9CisrCisrLyogRnJlZSBtZW1vcnkgcmV0dXJuZWQgZnJvbSBtb2R1bGVfYWxsb2MgKi8KKyt2b2lkIG1vZHVsZV9tZW1mcmVlKHZvaWQgKm1vZHVsZV9yZWdpb24pCisreworKwlpZiAoaXNfcGh5c19hZGRyKG1vZHVsZV9yZWdpb24pKQorKwkJZnJlZV9waHlzKG1vZHVsZV9yZWdpb24pOworKwllbHNlCisrCQl2ZnJlZShtb2R1bGVfcmVnaW9uKTsKKyt9CisrCisrc3RhdGljIHZvaWQgKl9fbW9kdWxlX2FsbG9jKGludCBzaXplLCBib29sIHBoeXMpCisreworKwl2b2lkICpwdHI7CisrCisrCWlmIChwaHlzKQorKwkJcHRyID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKysJZWxzZQorKwkJcHRyID0gdm1hbGxvYyhzaXplKTsKKysJcmV0dXJuIHB0cjsKKyt9CisrCisrc3RhdGljIHZvaWQgX19tb2R1bGVfZnJlZSh2b2lkICpwdHIpCisreworKwlpZiAoaXNfcGh5c19hZGRyKHB0cikpCisrCQlrZnJlZShwdHIpOworKwllbHNlCisrCQl2ZnJlZShwdHIpOworK30KKysKKytpbnQgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGZfRWhkciAqaGRyLCBFbGZfU2hkciAqc2VjaGRycywKKysJCQkgICAgICBjaGFyICpzZWNzdHJpbmdzLCBzdHJ1Y3QgbW9kdWxlICptb2QpCisreworKwl1bnNpZ25lZCBpbnQgc3ltaW5kZXggPSAwOworKwl1bnNpZ25lZCBpbnQgY29yZV9zaXplLCBpbml0X3NpemU7CisrCWludCBpOworKworKwltb2QtPmFyY2gucGh5c19wbHRfb2Zmc2V0ID0gMDsKKysJbW9kLT5hcmNoLnZpcnRfcGx0X29mZnNldCA9IDA7CisrCW1vZC0+YXJjaC5waHlzX3BsdF90YmwgPSBOVUxMOworKwltb2QtPmFyY2gudmlydF9wbHRfdGJsID0gTlVMTDsKKysKKysJaWYgKElTX0VOQUJMRUQoQ09ORklHXzY0QklUKSkKKysJCXJldHVybiAwOworKworKwlmb3IgKGkgPSAxOyBpIDwgaGRyLT5lX3NobnVtOyBpKyspCisrCQlpZiAoc2VjaGRyc1tpXS5zaF90eXBlID09IFNIVF9TWU1UQUIpCisrCQkJc3ltaW5kZXggPSBpOworKworKwljb3JlX3NpemUgPSBnZXRfcGx0X3NpemUoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCBzeW1pbmRleCwgZmFsc2UpOworKwlpbml0X3NpemUgPSBnZXRfcGx0X3NpemUoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCBzeW1pbmRleCwgdHJ1ZSk7CisrCisrCWlmICgoY29yZV9zaXplICsgaW5pdF9zaXplKSA9PSAwKQorKwkJcmV0dXJuIDA7CisrCisrCW1vZC0+YXJjaC5waHlzX3BsdF90YmwgPSBfX21vZHVsZV9hbGxvYyhjb3JlX3NpemUgKyBpbml0X3NpemUsIDEpOworKwlpZiAoIW1vZC0+YXJjaC5waHlzX3BsdF90YmwpCisrCQlyZXR1cm4gLUVOT01FTTsKKysKKysJbW9kLT5hcmNoLnZpcnRfcGx0X3RibCA9IF9fbW9kdWxlX2FsbG9jKGNvcmVfc2l6ZSArIGluaXRfc2l6ZSwgMCk7CisrCWlmICghbW9kLT5hcmNoLnZpcnRfcGx0X3RibCkgeworKwkJX19tb2R1bGVfZnJlZShtb2QtPmFyY2gucGh5c19wbHRfdGJsKTsKKysJCW1vZC0+YXJjaC5waHlzX3BsdF90YmwgPSBOVUxMOworKwkJcmV0dXJuIC1FTk9NRU07CisrCX0KKysKKysJcmV0dXJuIDA7CisrfQorIAorIHN0YXRpYyBpbnQgYXBwbHlfcl9taXBzX25vbmUoc3RydWN0IG1vZHVsZSAqbWUsIHUzMiAqbG9jYXRpb24sCisgCQkJICAgICB1MzIgYmFzZSwgRWxmX0FkZHIgdiwgYm9vbCByZWxhKQorQEAgLTU1LDkgKzI2Miw0MCBAQCBzdGF0aWMgaW50IGFwcGx5X3JfbWlwc18zMihzdHJ1Y3QgbW9kdWxlCisgCXJldHVybiAwOworIH0KKyAKKytzdGF0aWMgRWxmX0FkZHIgYWRkX3BsdF9lbnRyeV90byh1bnNpZ25lZCAqcGx0X29mZnNldCwKKysJCQkJIHZvaWQgKnN0YXJ0LCBFbGZfQWRkciB2KQorK3sKKysJdW5zaWduZWQgKnRyYW1wID0gc3RhcnQgKyAqcGx0X29mZnNldDsKKysJKnBsdF9vZmZzZXQgKz0gNCAqIHNpemVvZihpbnQpOworKworKwkvKiBhZGp1c3QgY2FycnkgZm9yIGFkZGl1ICovCisrCWlmICh2ICYgMHgwMDAwODAwMCkKKysJCXYgKz0gMHgxMDAwMDsKKysKKysJdHJhbXBbMF0gPSAweDNjMTkwMDAwIHwgKHYgPj4gMTYpOyAgICAgIC8qIGx1aSB0OSwgaGkxNiAqLworKwl0cmFtcFsxXSA9IDB4MjczOTAwMDAgfCAodiAmIDB4ZmZmZik7ICAgLyogYWRkaXUgdDksIHQ5LCBsbzE2ICovCisrCXRyYW1wWzJdID0gMHgwMzIwMDAwODsgICAgICAgICAgICAgICAgICAvKiBqciB0OSAqLworKwl0cmFtcFszXSA9IDB4MDAwMDAwMDA7ICAgICAgICAgICAgICAgICAgLyogbm9wICovCisrCisrCXJldHVybiAoRWxmX0FkZHIpIHRyYW1wOworK30KKysKKytzdGF0aWMgRWxmX0FkZHIgYWRkX3BsdF9lbnRyeShzdHJ1Y3QgbW9kdWxlICptZSwgdm9pZCAqbG9jYXRpb24sIEVsZl9BZGRyIHYpCisreworKwlpZiAoaXNfcGh5c19hZGRyKGxvY2F0aW9uKSkKKysJCXJldHVybiBhZGRfcGx0X2VudHJ5X3RvKCZtZS0+YXJjaC5waHlzX3BsdF9vZmZzZXQsCisrCQkJCW1lLT5hcmNoLnBoeXNfcGx0X3RibCwgdik7CisrCWVsc2UKKysJCXJldHVybiBhZGRfcGx0X2VudHJ5X3RvKCZtZS0+YXJjaC52aXJ0X3BsdF9vZmZzZXQsCisrCQkJCW1lLT5hcmNoLnZpcnRfcGx0X3RibCwgdik7CisrCisrfQorKworIHN0YXRpYyBpbnQgYXBwbHlfcl9taXBzXzI2KHN0cnVjdCBtb2R1bGUgKm1lLCB1MzIgKmxvY2F0aW9uLAorIAkJCSAgIHUzMiBiYXNlLCBFbGZfQWRkciB2LCBib29sIHJlbGEpCisgeworKwl1MzIgb2ZzID0gYmFzZSAmIDB4MDNmZmZmZmY7CisrCisgCWlmICh2ICUgNCkgeworIAkJcHJfZXJyKCJtb2R1bGUgJXM6IGRhbmdlcm91cyBSX01JUFNfMjYgcmVsb2NhdGlvblxuIiwKKyAJCSAgICAgICBtZS0+bmFtZSk7CitAQCAtNjUsMTMgKzMwMywxNyBAQCBzdGF0aWMgaW50IGFwcGx5X3JfbWlwc18yNihzdHJ1Y3QgbW9kdWxlCisgCX0KKyAKKyAJaWYgKCh2ICYgMHhmMDAwMDAwMCkgIT0gKCgodW5zaWduZWQgbG9uZylsb2NhdGlvbiArIDQpICYgMHhmMDAwMDAwMCkpIHsKKy0JCXByX2VycigibW9kdWxlICVzOiByZWxvY2F0aW9uIG92ZXJmbG93XG4iLAorLQkJICAgICAgIG1lLT5uYW1lKTsKKy0JCXJldHVybiAtRU5PRVhFQzsKKysJCXYgPSBhZGRfcGx0X2VudHJ5KG1lLCBsb2NhdGlvbiwgdiArIChvZnMgPDwgMikpOworKwkJaWYgKCF2KSB7CisrCQkJcHJfZXJyKCJtb2R1bGUgJXM6IHJlbG9jYXRpb24gb3ZlcmZsb3dcbiIsCisrCQkJICAgICAgIG1lLT5uYW1lKTsKKysJCQlyZXR1cm4gLUVOT0VYRUM7CisrCQl9CisrCQlvZnMgPSAwOworIAl9CisgCisgCSpsb2NhdGlvbiA9ICgqbG9jYXRpb24gJiB+MHgwM2ZmZmZmZikgfAorLQkJICAgICgoYmFzZSArICh2ID4+IDIpKSAmIDB4MDNmZmZmZmYpOworKwkJICAgICgob2ZzICsgKHYgPj4gMikpICYgMHgwM2ZmZmZmZik7CisgCisgCXJldHVybiAwOworIH0KK0BAIC00NDcsOSArNjg5LDM2IEBAIGludCBtb2R1bGVfZmluYWxpemUoY29uc3QgRWxmX0VoZHIgKmhkciwKKyAJCWxpc3RfYWRkKCZtZS0+YXJjaC5kYmVfbGlzdCwgJmRiZV9saXN0KTsKKyAJCXNwaW5fdW5sb2NrX2lycSgmZGJlX2xvY2spOworIAl9CisrCisrCS8qIEdldCByaWQgb2YgdGhlIGZpeHVwIHRyYW1wb2xpbmUgaWYgd2UncmUgcnVubmluZyB0aGUgbW9kdWxlCisrCSAqIGZyb20gcGh5c2ljYWxseSBtYXBwZWQgYWRkcmVzcyBzcGFjZSAqLworKwlpZiAobWUtPmFyY2gucGh5c19wbHRfb2Zmc2V0ID09IDApIHsKKysJCV9fbW9kdWxlX2ZyZWUobWUtPmFyY2gucGh5c19wbHRfdGJsKTsKKysJCW1lLT5hcmNoLnBoeXNfcGx0X3RibCA9IE5VTEw7CisrCX0KKysJaWYgKG1lLT5hcmNoLnZpcnRfcGx0X29mZnNldCA9PSAwKSB7CisrCQlfX21vZHVsZV9mcmVlKG1lLT5hcmNoLnZpcnRfcGx0X3RibCk7CisrCQltZS0+YXJjaC52aXJ0X3BsdF90YmwgPSBOVUxMOworKwl9CisrCisgCXJldHVybiAwOworIH0KKyAKKyt2b2lkIG1vZHVsZV9hcmNoX2ZyZWVpbmdfaW5pdChzdHJ1Y3QgbW9kdWxlICptb2QpCisreworKwlpZiAobW9kLT5zdGF0ZSA9PSBNT0RVTEVfU1RBVEVfTElWRSkKKysJCXJldHVybjsKKysKKysJaWYgKG1vZC0+YXJjaC5waHlzX3BsdF90YmwpIHsKKysJCV9fbW9kdWxlX2ZyZWUobW9kLT5hcmNoLnBoeXNfcGx0X3RibCk7CisrCQltb2QtPmFyY2gucGh5c19wbHRfdGJsID0gTlVMTDsKKysJfQorKwlpZiAobW9kLT5hcmNoLnZpcnRfcGx0X3RibCkgeworKwkJX19tb2R1bGVfZnJlZShtb2QtPmFyY2gudmlydF9wbHRfdGJsKTsKKysJCW1vZC0+YXJjaC52aXJ0X3BsdF90YmwgPSBOVUxMOworKwl9CisrfQorKworIHZvaWQgbW9kdWxlX2FyY2hfY2xlYW51cChzdHJ1Y3QgbW9kdWxlICptb2QpCisgeworIAlzcGluX2xvY2tfaXJxKCZkYmVfbG9jayk7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC8zMDctbWlwc19oaWdobWVtX29mZnNldC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzMwNy1taXBzX2hpZ2htZW1fb2Zmc2V0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZDJmYTkKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC8zMDctbWlwc19oaWdobWVtX29mZnNldC5wYXRjaApAQCAtMCwwICsxLDE5IEBACitGcm9tOiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CitTdWJqZWN0OiBrZXJuZWw6IGFkanVzdCBtaXBzIGhpZ2htZW0gb2Zmc2V0IHRvIGF2b2lkIHRoZSBuZWVkIGZvciAtbWxvbmctY2FsbHMgb24gc3lzdGVtcyB3aXRoID4yNTZNIFJBTQorCitTaWduZWQtb2ZmLWJ5OiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CistLS0KKyBhcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1nZW5lcmljL3NwYWNlcy5oIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCistLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1nZW5lcmljL3NwYWNlcy5oCisrKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1nZW5lcmljL3NwYWNlcy5oCitAQCAtNTAsNyArNTAsNyBAQAorICAqIE1lbW9yeSBhYm92ZSB0aGlzIHBoeXNpY2FsIGFkZHJlc3Mgd2lsbCBiZSBjb25zaWRlcmVkIGhpZ2htZW0uCisgICovCisgI2lmbmRlZiBISUdITUVNX1NUQVJUCistI2RlZmluZSBISUdITUVNX1NUQVJUCQlfQUMoMHgyMDAwMDAwMCwgVUwpCisrI2RlZmluZSBISUdITUVNX1NUQVJUCQlfQUMoMHgxMDAwMDAwMCwgVUwpCisgI2VuZGlmCisgCisgI2VuZGlmIC8qIENPTkZJR18zMkJJVCAqLwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvMzA4LW1pcHMzMnIyX3R1bmUucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC8zMDgtbWlwczMycjJfdHVuZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjM2NTExCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvMzA4LW1pcHMzMnIyX3R1bmUucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorRnJvbTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorU3ViamVjdDoga2VybmVsOiBhZGQgLW10dW5lPTM0a2MgdG8gTUlQUyBDRkxBR1Mgd2hlbiBidWlsZGluZyBmb3IgbWlwczMycjIKKworVGhpcyBwcm92aWRlcyBhIGdvb2QgdHJhZGVvZmYgYWNyb3NzIGF0IGxlYXN0IDI0S2MtNzRLYywgd2hpbGUgYWxzbworcHJvZHVjaW5nIHNtYWxsZXIgY29kZS4KKworU2lnbmVkLW9mZi1ieTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorLS0tCisgYXJjaC9taXBzL01ha2VmaWxlIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCistLS0gYS9hcmNoL21pcHMvTWFrZWZpbGUKKysrKyBiL2FyY2gvbWlwcy9NYWtlZmlsZQorQEAgLTE3Nyw3ICsxNzcsNyBAQCBjZmxhZ3MtJChDT05GSUdfQ1BVX1ZSNDFYWCkJKz0gLW1hcmNoPXI0CisgY2ZsYWdzLSQoQ09ORklHX0NQVV9SNFgwMCkJKz0gLW1hcmNoPXI0NjAwIC1XYSwtLXRyYXAKKyBjZmxhZ3MtJChDT05GSUdfQ1BVX1RYNDlYWCkJKz0gLW1hcmNoPXI0NjAwIC1XYSwtLXRyYXAKKyBjZmxhZ3MtJChDT05GSUdfQ1BVX01JUFMzMl9SMSkJKz0gLW1hcmNoPW1pcHMzMiAtV2EsLS10cmFwCistY2ZsYWdzLSQoQ09ORklHX0NQVV9NSVBTMzJfUjIpCSs9IC1tYXJjaD1taXBzMzJyMiAtV2EsLS10cmFwCisrY2ZsYWdzLSQoQ09ORklHX0NQVV9NSVBTMzJfUjIpCSs9IC1tYXJjaD1taXBzMzJyMiAtbXR1bmU9MzRrYyAtV2EsLS10cmFwCisgY2ZsYWdzLSQoQ09ORklHX0NQVV9NSVBTMzJfUjYpCSs9IC1tYXJjaD1taXBzMzJyNiAtV2EsLS10cmFwIC1tb2RkLXNwcmVnCisgY2ZsYWdzLSQoQ09ORklHX0NQVV9NSVBTNjRfUjEpCSs9IC1tYXJjaD1taXBzNjQgLVdhLC0tdHJhcAorIGNmbGFncy0kKENPTkZJR19DUFVfTUlQUzY0X1IyKQkrPSAtbWFyY2g9bWlwczY0cjIgLVdhLC0tdHJhcApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvMzA5LU1JUFMtQWRkLUNQVS1vcHRpb24tcmVwb3J0aW5nLXRvLXByb2MtY3B1aW5mby5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzMwOS1NSVBTLUFkZC1DUFUtb3B0aW9uLXJlcG9ydGluZy10by1wcm9jLWNwdWluZm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQwNzVhMgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzMwOS1NSVBTLUFkZC1DUFUtb3B0aW9uLXJlcG9ydGluZy10by1wcm9jLWNwdWluZm8ucGF0Y2gKQEAgLTAsMCArMSwxNDIgQEAKK0Zyb20gODdlYzg3YzJhZDYxNWMxYTE3N2NkMDhlZjVmYTI5ZmM3MzlmNmU1MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEhhdWtlIE1laHJ0ZW5zIDxoYXVrZUBoYXVrZS1tLmRlPgorRGF0ZTogU3VuLCAyMyBEZWMgMjAxOCAxODowNjo1MyArMDEwMAorU3ViamVjdDogW1BBVENIXSBNSVBTOiBBZGQgQ1BVIG9wdGlvbiByZXBvcnRpbmcgdG8gL3Byb2MvY3B1aW5mbworCitNYW55IE1JUFMgQ1BVcyBoYXZlIG9wdGlvbmFsIENQVSBmZWF0dXJlcyB3aGljaCBhcmUgbm90IGFjdGl2YXRlcyBmb3IKK2FsbCBDUFUgY29yZXMuIFByaW50IHRoZSBDUFUgb3B0aW9ucyB3aGljaCBhcmUgaW1wbGVtZW50ZWQgaW4gdGhlIGNvcmUKK2luIC9wcm9jL2NwdWluZm8uIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gc2VlIHdoYXQgZmVhdHVyZXMgYXJlCitzdXBwb3J0ZWQgYW5kIHdoaWNoIGFyZSBub3Qgc3VwcG9ydGVkLiBUaGlzIHNob3VsZCBjb3ZlciBhbGwgc3RhbmRhcmQKK01JUFMgZXh0ZW5zaW9ucywgYmVmb3JlIGl0IG9ubHkgcHJpbnRlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWFpbiBNSVBTCitBU0VzLgorCitTaWduZWQtb2ZmLWJ5OiBIYXVrZSBNZWhydGVucyA8aGF1a2VAaGF1a2UtbS5kZT4KKy0tLQorIGFyY2gvbWlwcy9rZXJuZWwvcHJvYy5jIHwgMTE2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTE2IGluc2VydGlvbnMoKykKKworLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9wcm9jLmMKKysrKyBiL2FyY2gvbWlwcy9rZXJuZWwvcHJvYy5jCitAQCAtMTM0LDYgKzEzNCwxMjIgQEAgc3RhdGljIGludCBzaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxlCisgCQlzZXFfcHJpbnRmKG0sICJtaWNyb21pcHMga2VybmVsXHQ6ICVzXG4iLAorIAkJICAgICAgKHJlYWRfYzBfY29uZmlnMygpICYgTUlQU19DT05GM19JU0FfT0UpID8gICJ5ZXMiIDogIm5vIik7CisgCX0KKysKKysJc2VxX3ByaW50ZihtLCAiT3B0aW9ucyBpbXBsZW1lbnRlZFx0OiIpOworKwlpZiAoY3B1X2hhc190bGIpCisrCQlzZXFfcHJpbnRmKG0sICIlcyIsICIgdGxiIik7CisrCWlmIChjcHVfaGFzX2Z0bGIpCisrCQlzZXFfcHJpbnRmKG0sICIlcyIsICIgZnRsYiIpOworKwlpZiAoY3B1X2hhc190bGJpbnYpCisrCQlzZXFfcHJpbnRmKG0sICIlcyIsICIgdGxiaW52Iik7CisrCWlmIChjcHVfaGFzX3NlZ21lbnRzKQorKwkJc2VxX3ByaW50ZihtLCAiJXMiLCAiIHNlZ21lbnRzIik7CisrCWlmIChjcHVfaGFzX3JpeGlleCkKKysJCXNlcV9wcmludGYobSwgIiVzIiwgIiByaXhpZXgiKTsKKysJaWYgKGNwdV9oYXNfbGRwdGUpCisrCQlzZXFfcHJpbnRmKG0sICIlcyIsICIgbGRwdGUiKTsKKysJaWYgKGNwdV9oYXNfbWFhcikKKysJCXNlcV9wcmludGYobSwgIiVzIiwgIiBtYWFyIik7CisrCWlmIChjcHVfaGFzX3J3X2xsYikKKysJCXNlcV9wcmludGYobSwgIiVzIiwgIiByd19sbGIiKTsKKysJaWYgKGNwdV9oYXNfNGtleCkKKysJCXNlcV9wcmludGYobSwgIiVzIiwgIiA0a2V4Iik7CisrCWlmIChjcHVfaGFzXzNrX2NhY2hlKQorKwkJc2VxX3ByaW50ZihtLCAiJXMiLCAiIDNrX2NhY2hlIik7CisrCWlmIChjcHVfaGFzXzRrX2NhY2hlKQorKwkJc2VxX3ByaW50ZihtLCAiJXMiLCAiIDRrX2NhY2hlIik7CisrCWlmIChjcHVfaGFzXzZrX2NhY2hlKQorKwkJc2VxX3ByaW50ZihtLCAiJXMiLCAiIDZrX2NhY2hlIik7CisrCWlmIChjcHVfaGFzXzhrX2NhY2hlKQorKwkJc2VxX3ByaW50ZihtLCAiJXMiLCAiIDhrX2NhY2hlIik7CisrCWlmIChjcHVfaGFzX3R4MzlfY2FjaGUpCisrCQlzZXFfcHJpbnRmKG0sICIlcyIsICIgdHgzOV9jYWNoZSIpOworKwlpZiAoY3B1X2hhc19vY3Rlb25fY2FjaGUpCisrCQlzZXFfcHJpbnRmKG0sICIlcyIsICIgb2N0ZW9uX2NhY2hlIik7CisrCWlmIChjcHVfaGFzX2ZwdSkKKysJCXNlcV9wcmludGYobSwgIiVzIiwgIiBmcHUiKTsKKysJaWYgKGNwdV9oYXNfMzJmcHIpCisrCQlzZXFfcHJpbnRmKG0sICIlcyIsICIgMzJmcHIiKTsKKysJaWYgKGNwdV9oYXNfY2FjaGVfY2RleF9wKQorKwkJc2VxX3ByaW50ZihtLCAiJXMiLCAiIGNhY2hlX2NkZXhfcCIpOworKwlpZiAoY3B1X2hhc19jYWNoZV9jZGV4X3MpCisrCQlzZXFfcHJpbnRmKG0sICIlcyIsICIgY2FjaGVfY2RleF9zIik7CisrCWlmIChjcHVfaGFzX3ByZWZldGNoKQorKwkJc2VxX3ByaW50ZihtLCAiJXMiLCAiIHByZWZldGNoIik7CisrCWlmIChjcHVfaGFzX21jaGVjaykKKysJCXNlcV9wcmludGYobSwgIiVzIiwgIiBtY2hlY2siKTsKKysJaWYgKGNwdV9oYXNfZWp0YWcpCisrCQlzZXFfcHJpbnRmKG0sICIlcyIsICIgZWp0YWciKTsKKysJaWYgKGNwdV9oYXNfbGxzYykKKysJCXNlcV9wcmludGYobSwgIiVzIiwgIiBsbHNjIik7CisrCWlmIChjcHVfaGFzX2JwX2doaXN0KQorKwkJc2VxX3ByaW50ZihtLCAiJXMiLCAiIGJwX2doaXN0Iik7CisrCWlmIChjcHVfaGFzX2d1ZXN0Y3RsMGV4dCkKKysJCXNlcV9wcmludGYobSwgIiVzIiwgIiBndWVzdGN0bDBleHQiKTsKKysJaWYgKGNwdV9oYXNfZ3Vlc3RjdGwxKQorKwkJc2VxX3ByaW50ZihtLCAiJXMiLCAiIGd1ZXN0Y3RsMSIpOworKwlpZiAoY3B1X2hhc19ndWVzdGN0bDIpCisrCQlzZXFfcHJpbnRmKG0sICIlcyIsICIgZ3Vlc3RjdGwyIik7CisrCWlmIChjcHVfaGFzX2d1ZXN0aWQpCisrCQlzZXFfcHJpbnRmKG0sICIlcyIsICIgZ3Vlc3RpZCIpOworKwlpZiAoY3B1X2hhc19kcmcpCisrCQlzZXFfcHJpbnRmKG0sICIlcyIsICIgZHJnIik7CisrCWlmIChjcHVfaGFzX3JpeGkpCisrCQlzZXFfcHJpbnRmKG0sICIlcyIsICIgcml4aSIpOworKwlpZiAoY3B1X2hhc19scGEpCisrCQlzZXFfcHJpbnRmKG0sICIlcyIsICIgbHBhIik7CisrCWlmIChjcHVfaGFzX212aCkKKysJCXNlcV9wcmludGYobSwgIiVzIiwgIiBtdmgiKTsKKysJaWYgKGNwdV9oYXNfdnRhZ19pY2FjaGUpCisrCQlzZXFfcHJpbnRmKG0sICIlcyIsICIgdnRhZ19pY2FjaGUiKTsKKysJaWYgKGNwdV9oYXNfZGNfYWxpYXNlcykKKysJCXNlcV9wcmludGYobSwgIiVzIiwgIiBkY19hbGlhc2VzIik7CisrCWlmIChjcHVfaGFzX2ljX2ZpbGxzX2ZfZGMpCisrCQlzZXFfcHJpbnRmKG0sICIlcyIsICIgaWNfZmlsbHNfZl9kYyIpOworKwlpZiAoY3B1X2hhc19waW5kZXhlZF9kY2FjaGUpCisrCQlzZXFfcHJpbnRmKG0sICIlcyIsICIgcGluZGV4ZWRfZGNhY2hlIik7CisrCWlmIChjcHVfaGFzX3VzZXJsb2NhbCkKKysJCXNlcV9wcmludGYobSwgIiVzIiwgIiB1c2VybG9jYWwiKTsKKysJaWYgKGNwdV9oYXNfbm9mcHVleCkKKysJCXNlcV9wcmludGYobSwgIiVzIiwgIiBub2ZwdWV4Iik7CisrCWlmIChjcHVfaGFzX3ZpbnQpCisrCQlzZXFfcHJpbnRmKG0sICIlcyIsICIgdmludCIpOworKwlpZiAoY3B1X2hhc192ZWljKQorKwkJc2VxX3ByaW50ZihtLCAiJXMiLCAiIHZlaWMiKTsKKysJaWYgKGNwdV9oYXNfaW5jbHVzaXZlX3BjYWNoZXMpCisrCQlzZXFfcHJpbnRmKG0sICIlcyIsICIgaW5jbHVzaXZlX3BjYWNoZXMiKTsKKysJaWYgKGNwdV9oYXNfcGVyZl9jbnRyX2ludHJfYml0KQorKwkJc2VxX3ByaW50ZihtLCAiJXMiLCAiIHBlcmZfY250cl9pbnRyX2JpdCIpOworKwlpZiAoY3B1X2hhc191ZnIpCisrCQlzZXFfcHJpbnRmKG0sICIlcyIsICIgdWZyIik7CisrCWlmIChjcHVfaGFzX2ZyZSkKKysJCXNlcV9wcmludGYobSwgIiVzIiwgIiBmcmUiKTsKKysJaWYgKGNwdV9oYXNfY2RtbSkKKysJCXNlcV9wcmludGYobSwgIiVzIiwgIiBjZG1tIik7CisrCWlmIChjcHVfaGFzX3NtYWxsX3BhZ2VzKQorKwkJc2VxX3ByaW50ZihtLCAiJXMiLCAiIHNtYWxsX3BhZ2VzIik7CisrCWlmIChjcHVfaGFzX25hbl9sZWdhY3kpCisrCQlzZXFfcHJpbnRmKG0sICIlcyIsICIgbmFuX2xlZ2FjeSIpOworKwlpZiAoY3B1X2hhc19uYW5fMjAwOCkKKysJCXNlcV9wcmludGYobSwgIiVzIiwgIiBuYW5fMjAwOCIpOworKwlpZiAoY3B1X2hhc19lYmFzZV93ZykKKysJCXNlcV9wcmludGYobSwgIiVzIiwgIiBlYmFzZV93ZyIpOworKwlpZiAoY3B1X2hhc19iYWRpbnN0cikKKysJCXNlcV9wcmludGYobSwgIiVzIiwgIiBiYWRpbnN0ciIpOworKwlpZiAoY3B1X2hhc19iYWRpbnN0cnApCisrCQlzZXFfcHJpbnRmKG0sICIlcyIsICIgYmFkaW5zdHJwIik7CisrCWlmIChjcHVfaGFzX2NvbnRleHRjb25maWcpCisrCQlzZXFfcHJpbnRmKG0sICIlcyIsICIgY29udGV4dGNvbmZpZyIpOworKwlpZiAoY3B1X2hhc19wZXJmKQorKwkJc2VxX3ByaW50ZihtLCAiJXMiLCAiIHBlcmYiKTsKKysJaWYgKGNwdV9oYXNfc2hhcmVkX2Z0bGJfcmFtKQorKwkJc2VxX3ByaW50ZihtLCAiJXMiLCAiIHNoYXJlZF9mdGxiX3JhbSIpOworKwlpZiAoY3B1X2hhc19zaGFyZWRfZnRsYl9lbnRyaWVzKQorKwkJc2VxX3ByaW50ZihtLCAiJXMiLCAiIHNoYXJlZF9mdGxiX2VudHJpZXMiKTsKKysJaWYgKGNwdV9oYXNfbWlwc210X3BlcnRjY291bnRlcnMpCisrCQlzZXFfcHJpbnRmKG0sICIlcyIsICIgbWlwc210X3BlcnRjY291bnRlcnMiKTsKKysJc2VxX3ByaW50ZihtLCAiXG4iKTsKKysKKyAJc2VxX3ByaW50ZihtLCAic2hhZG93IHJlZ2lzdGVyIHNldHNcdDogJWRcbiIsCisgCQkgICAgICBjcHVfZGF0YVtuXS5zcnNldHMpOworIAlzZXFfcHJpbnRmKG0sICJrc2NyYXRjaCByZWdpc3RlcnNcdDogJWRcbiIsCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC8zMTAtYXJtX21vZHVsZV91bnJlc29sdmVkX3dlYWtfc3ltLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvMzEwLWFybV9tb2R1bGVfdW5yZXNvbHZlZF93ZWFrX3N5bS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDgwN2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvMzEwLWFybV9tb2R1bGVfdW5yZXNvbHZlZF93ZWFrX3N5bS5wYXRjaApAQCAtMCwwICsxLDIyIEBACitGcm9tOiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CitTdWJqZWN0OiBmaXggZXJyb3JzIGluIHVucmVzb2x2ZWQgd2VhayBzeW1ib2xzIG9uIGFybQorCitsZWRlLWNvbW1pdDogNTcwNjk5ZDQ4MzhhOTA3YzNlZjlmMjgxOWJmMTllYjcyOTk3YjMyZgorU2lnbmVkLW9mZi1ieTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorLS0tCisgYXJjaC9hcm0va2VybmVsL21vZHVsZS5jIHwgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCistLS0gYS9hcmNoL2FybS9rZXJuZWwvbW9kdWxlLmMKKysrKyBiL2FyY2gvYXJtL2tlcm5lbC9tb2R1bGUuYworQEAgLTk5LDYgKzk5LDEwIEBAIGFwcGx5X3JlbG9jYXRlKEVsZjMyX1NoZHIgKnNlY2hkcnMsIGNvbnMKKyAJCQlyZXR1cm4gLUVOT0VYRUM7CisgCQl9CisgCisrCQlpZiAoKElTX0VSUl9WQUxVRShzeW0tPnN0X3ZhbHVlKSB8fCAhc3ltLT5zdF92YWx1ZSkgJiYKKysJCSAgICBFTEZfU1RfQklORChzeW0tPnN0X2luZm8pID09IFNUQl9XRUFLKQorKwkJCWNvbnRpbnVlOworKworIAkJbG9jID0gZHN0c2VjLT5zaF9hZGRyICsgcmVsLT5yX29mZnNldDsKKyAKKyAJCXN3aXRjaCAoRUxGMzJfUl9UWVBFKHJlbC0+cl9pbmZvKSkgewpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvMzExLU1JUFMtemJvb3QtcHV0LWFwcGVuZGVkLWR0Yi1pbnRvLWEtc2VjdGlvbi5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzMxMS1NSVBTLXpib290LXB1dC1hcHBlbmRlZC1kdGItaW50by1hLXNlY3Rpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y4ODA4ZgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzMxMS1NSVBTLXpib290LXB1dC1hcHBlbmRlZC1kdGItaW50by1hLXNlY3Rpb24ucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorRnJvbSA3ZDE1MzFjODFjMGZiNGM5M2JlYThkYzMxNjA0M2FkMGU0ZDBjMjcwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2h1YW5ob25nIEd1byA8Z2NoOTgxMjEzQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgMjUgT2N0IDIwMjAgMjM6MTk6NDAgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gTUlQUzogemJvb3Q6IHB1dCBhcHBlbmRlZCBkdGIgaW50byBhIHNlY3Rpb24KKworVGhpcyB3aWxsIG1ha2UgYSBzZXBhcmF0ZWQgc2VjdGlvbiBmb3IgZHRiIGFwcGVhciBpbiBFTEYsIGFuZCB3ZSBjYW4KK3RoZW4gdXNlIG9iamNvcHkgdG8gcGF0Y2ggYSBkdGIgaW50byB2bWxpbnV6IHdoZW4gUkFXX0FQUEVOREVEX0RUQgoraXMgc2V0IGluIGtlcm5lbCBjb25maWcuCisKK2NvbW1hbmQgdG8gcGF0Y2ggYSBkdGI6CitvYmpjb3B5IC0tc2V0LXNlY3Rpb24tZmxhZ3M9LmFwcGVuZGVkX2R0Yj1hbGxvYyxjb250ZW50cyBcCisgICAgICAgIC0tdXBkYXRlLXNlY3Rpb249LmFwcGVuZGVkX2R0Yj08dGFyZ2V0Pi5kdGIgdm1saW51eiB2bWxpbnV6LWR0YgorCitTaWduZWQtb2ZmLWJ5OiBDaHVhbmhvbmcgR3VvIDxnY2g5ODEyMTNAZ21haWwuY29tPgorLS0tCisgYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9sZC5zY3JpcHQgfCA5ICsrKysrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKKy0tLSBhL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvbGQuc2NyaXB0CisrKysgYi9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL2xkLnNjcmlwdAorQEAgLTMxLDkgKzMxLDEyIEBAIFNFQ1RJT05TCisgCQlDT05TVFJVQ1RPUlMKKyAJCS4gPSBBTElHTigxNik7CisgCX0KKy0JX19hcHBlbmRlZF9kdGIgPSAuOworLQkvKiBsZWF2ZSBzcGFjZSBmb3IgYXBwZW5kZWQgRFRCICovCistCS4gKz0gMHgxMDAwMDA7CisrCisrCS5hcHBlbmRlZF9kdGIgOiB7CisrCQlfX2FwcGVuZGVkX2R0YiA9IC47CisrCQkvKiBsZWF2ZSBzcGFjZSBmb3IgYXBwZW5kZWQgRFRCICovCisrCQkuICs9IDB4MTAwMDAwOworKwl9CisgCisgCV9lZGF0YSA9IC47CisgCS8qIEVuZCBvZiBkYXRhIHNlY3Rpb24gKi8KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzMzMC1NSVBTLWtleGVjLUFjY2VwdC1jb21tYW5kLWxpbmUtcGFyYW1ldGVycy1mcm9tLXVzZXJzLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvMzMwLU1JUFMta2V4ZWMtQWNjZXB0LWNvbW1hbmQtbGluZS1wYXJhbWV0ZXJzLWZyb20tdXNlcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgwOGM5NQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzMzMC1NSVBTLWtleGVjLUFjY2VwdC1jb21tYW5kLWxpbmUtcGFyYW1ldGVycy1mcm9tLXVzZXJzLnBhdGNoCkBAIC0wLDAgKzEsMjgxIEBACitGcm9tOiBZb3Vzb25nIFpob3UgPHlzemhvdTR0ZWNoQGdtYWlsLmNvbT4KK1N1YmplY3Q6IE1JUFM6IGtleGVjOiBBY2NlcHQgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMgZnJvbSB1c2Vyc3BhY2UuCisKK1NpZ25lZC1vZmYtYnk6IFlvdXNvbmcgWmhvdSA8eXN6aG91NHRlY2hAZ21haWwuY29tPgorLS0tCisgYXJjaC9taXBzL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMgICB8ICAxNTMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tCisgYXJjaC9taXBzL2tlcm5lbC9tYWNoaW5lX2tleGVjLmggICB8ICAgMjAgKysrKysKKyBhcmNoL21pcHMva2VybmVsL3JlbG9jYXRlX2tlcm5lbC5TIHwgICAyMSArKystLQorIDMgZmlsZXMgY2hhbmdlZCwgMTY3IGluc2VydGlvbnMoKyksIDI3IGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBhcmNoL21pcHMva2VybmVsL21hY2hpbmVfa2V4ZWMuaAorCistLS0gYS9hcmNoL21pcHMva2VybmVsL21hY2hpbmVfa2V4ZWMuYworKysrIGIvYXJjaC9taXBzL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKK0BAIC05LDE0ICs5LDExIEBACisgI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisgI2luY2x1ZGUgPGxpbnV4L2xpYmZkdC5oPgorIAorKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKy0KKy1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciByZWxvY2F0ZV9uZXdfa2VybmVsW107CistZXh0ZXJuIGNvbnN0IHNpemVfdCByZWxvY2F0ZV9uZXdfa2VybmVsX3NpemU7CistCistZXh0ZXJuIHVuc2lnbmVkIGxvbmcga2V4ZWNfc3RhcnRfYWRkcmVzczsKKy1leHRlcm4gdW5zaWduZWQgbG9uZyBrZXhlY19pbmRpcmVjdGlvbl9wYWdlOworKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisrI2luY2x1ZGUgIm1hY2hpbmVfa2V4ZWMuaCIKKyAKKyBzdGF0aWMgdW5zaWduZWQgbG9uZyByZWJvb3RfY29kZV9idWZmZXI7CisgCitAQCAtMzAsNiArMjcsMTAxIEBAIHZvaWQgKCpfY3Jhc2hfc21wX3NlbmRfc3RvcCkodm9pZCkgPSBOVUwKKyB2b2lkICgqX21hY2hpbmVfa2V4ZWNfc2h1dGRvd24pKHZvaWQpID0gTlVMTDsKKyB2b2lkICgqX21hY2hpbmVfY3Jhc2hfc2h1dGRvd24pKHN0cnVjdCBwdF9yZWdzICpyZWdzKSA9IE5VTEw7CisgCisrc3RhdGljIHZvaWQgbWFjaGluZV9rZXhlY19wcmludF9hcmdzKHZvaWQpCisreworKwl1bnNpZ25lZCBsb25nIGFyZ2MgPSAoaW50KWtleGVjX2FyZ3NbMF07CisrCWludCBpOworKworKwlwcl9pbmZvKCJrZXhlY19hcmdzWzBdIChhcmdjKTogJWx1XG4iLCBhcmdjKTsKKysJcHJfaW5mbygia2V4ZWNfYXJnc1sxXSAoYXJndik6ICVwXG4iLCAodm9pZCAqKWtleGVjX2FyZ3NbMV0pOworKwlwcl9pbmZvKCJrZXhlY19hcmdzWzJdIChlbnYgKTogJXBcbiIsICh2b2lkICopa2V4ZWNfYXJnc1syXSk7CisrCXByX2luZm8oImtleGVjX2FyZ3NbM10gKGRlc2MpOiAlcFxuIiwgKHZvaWQgKilrZXhlY19hcmdzWzNdKTsKKysKKysJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgeworKwkJcHJfaW5mbygia2V4ZWNfYXJndlslZF0gPSAlcCwgJXNcbiIsCisrCQkJCWksIGtleGVjX2FyZ3ZbaV0sIGtleGVjX2FyZ3ZbaV0pOworKwl9CisrfQorKworK3N0YXRpYyB2b2lkIG1hY2hpbmVfa2V4ZWNfaW5pdF9hcmd2KHN0cnVjdCBraW1hZ2UgKmltYWdlKQorK3sKKysJdm9pZCBfX3VzZXIgKmJ1ZiA9IE5VTEw7CisrCXNpemVfdCBidWZzejsKKysJc2l6ZV90IHNpemU7CisrCWludCBpOworKworKwlidWZzeiA9IDA7CisrCWZvciAoaSA9IDA7IGkgPCBpbWFnZS0+bnJfc2VnbWVudHM7IGkrKykgeworKwkJc3RydWN0IGtleGVjX3NlZ21lbnQgKnNlZzsKKysKKysJCXNlZyA9ICZpbWFnZS0+c2VnbWVudFtpXTsKKysJCWlmIChzZWctPmJ1ZnN6IDwgNikKKysJCQljb250aW51ZTsKKysKKysJCWlmIChzdHJuY21wKChjaGFyICopIHNlZy0+YnVmLCAia2V4ZWMgIiwgNikpCisrCQkJY29udGludWU7CisrCisrCQlidWYgPSBzZWctPmJ1ZjsKKysJCWJ1ZnN6ID0gc2VnLT5idWZzejsKKysJCWJyZWFrOworKwl9CisrCisrCWlmICghYnVmKQorKwkJcmV0dXJuOworKworKwlzaXplID0gS0VYRUNfQ09NTUFORF9MSU5FX1NJWkU7CisrCXNpemUgPSBtaW4oc2l6ZSwgYnVmc3opOworKwlpZiAoc2l6ZSA8IGJ1ZnN6KQorKwkJcHJfd2Fybigia2V4ZWMgY29tbWFuZCBsaW5lIHRydW5jYXRlZCB0byAlemQgYnl0ZXNcbiIsIHNpemUpOworKworKwkvKiBDb3B5IHRvIGtlcm5lbCBzcGFjZSAqLworKwlpZiAoY29weV9mcm9tX3VzZXIoa2V4ZWNfYXJndl9idWYsIGJ1Ziwgc2l6ZSkpCisrCQlwcl93YXJuKCJrZXhlYyBjb21tYW5kIGxpbmUgY29weSB0byBrZXJuZWwgc3BhY2UgZmFpbGVkXG4iKTsKKysKKysJa2V4ZWNfYXJndl9idWZbc2l6ZSAtIDFdID0gMDsKKyt9CisrCisrc3RhdGljIHZvaWQgbWFjaGluZV9rZXhlY19wYXJzZV9hcmd2KHN0cnVjdCBraW1hZ2UgKmltYWdlKQorK3sKKysJY2hhciAqcmVib290X2NvZGVfYnVmZmVyOworKwlpbnQgcmVsb2NfZGVsdGE7CisrCWNoYXIgKnB0cjsKKysJaW50IGFyZ2M7CisrCWludCBpOworKworKwlwdHIgPSBrZXhlY19hcmd2X2J1ZjsKKysJYXJnYyA9IDA7CisrCisrCS8qCisrCSAqIGNvbnZlcnQgY29tbWFuZCBsaW5lIHN0cmluZyB0byBhcnJheSBvZiBwYXJhbWV0ZXJzCisrCSAqIChhcyBib290bG9hZGVyIGRvZXMpLgorKwkgKi8KKysJd2hpbGUgKHB0ciAmJiAqcHRyICYmIChLRVhFQ19NQVhfQVJHQyA+IGFyZ2MpKSB7CisrCQlpZiAoKnB0ciA9PSAnICcpIHsKKysJCQkqcHRyKysgPSAnXDAnOworKwkJCWNvbnRpbnVlOworKwkJfQorKworKwkJa2V4ZWNfYXJndlthcmdjKytdID0gcHRyOworKwkJcHRyID0gc3RyY2hyKHB0ciwgJyAnKTsKKysJfQorKworKwlpZiAoIWFyZ2MpCisrCQlyZXR1cm47CisrCisrCWtleGVjX2FyZ3NbMF0gPSBhcmdjOworKwlrZXhlY19hcmdzWzFdID0gKHVuc2lnbmVkIGxvbmcpa2V4ZWNfYXJndjsKKysJa2V4ZWNfYXJnc1syXSA9IDA7CisrCWtleGVjX2FyZ3NbM10gPSAwOworKworKwlyZWJvb3RfY29kZV9idWZmZXIgPSBwYWdlX2FkZHJlc3MoaW1hZ2UtPmNvbnRyb2xfY29kZV9wYWdlKTsKKysJcmVsb2NfZGVsdGEgPSByZWJvb3RfY29kZV9idWZmZXIgLSAoY2hhciAqKWtleGVjX3JlbG9jYXRlX25ld19rZXJuZWw7CisrCisrCWtleGVjX2FyZ3NbMV0gKz0gcmVsb2NfZGVsdGE7CisrCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspCisrCQlrZXhlY19hcmd2W2ldICs9IHJlbG9jX2RlbHRhOworK30KKysKKyBzdGF0aWMgdm9pZCBrZXhlY19pbWFnZV9pbmZvKGNvbnN0IHN0cnVjdCBraW1hZ2UgKmtpbWFnZSkKKyB7CisgCXVuc2lnbmVkIGxvbmcgaTsKK0BAIC05OSw2ICsxOTEsMTggQEAgbWFjaGluZV9rZXhlY19wcmVwYXJlKHN0cnVjdCBraW1hZ2UgKmtpbQorICNlbmRpZgorIAorIAlrZXhlY19pbWFnZV9pbmZvKGtpbWFnZSk7CisrCS8qCisrCSAqIFdoZW5ldmVyIGFyZ3VtZW50cyBwYXNzZWQgZnJvbSBrZXhlYy10b29scywgSW5pdCB0aGUgYXJndW1lbnRzIGFzCisrCSAqIHRoZSBvcmlnaW5hbCBvbmVzIHRvIHRyeSBhdm9pZGluZyBib290aW5nIGZhaWx1cmUuCisrCSAqLworKworKwlrZXhlY19hcmdzWzBdID0gZndfYXJnMDsKKysJa2V4ZWNfYXJnc1sxXSA9IGZ3X2FyZzE7CisrCWtleGVjX2FyZ3NbMl0gPSBmd19hcmcyOworKwlrZXhlY19hcmdzWzNdID0gZndfYXJnMzsKKysKKysJbWFjaGluZV9rZXhlY19pbml0X2FyZ3Yoa2ltYWdlKTsKKysJbWFjaGluZV9rZXhlY19wYXJzZV9hcmd2KGtpbWFnZSk7CisgCisgCWlmIChfbWFjaGluZV9rZXhlY19wcmVwYXJlKQorIAkJcmV0dXJuIF9tYWNoaW5lX2tleGVjX3ByZXBhcmUoa2ltYWdlKTsKK0BAIC0xNjEsNyArMjY1LDcgQEAgbWFjaGluZV9jcmFzaF9zaHV0ZG93bihzdHJ1Y3QgcHRfcmVncyAqcgorIHZvaWQga2V4ZWNfbm9uYm9vdF9jcHVfanVtcCh2b2lkKQorIHsKKyAJbG9jYWxfZmx1c2hfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKXJlbG9jYXRlZF9rZXhlY19zbXBfd2FpdCwKKy0JCQkJIHJlYm9vdF9jb2RlX2J1ZmZlciArIHJlbG9jYXRlX25ld19rZXJuZWxfc2l6ZSk7CisrCQkJCSByZWJvb3RfY29kZV9idWZmZXIgKyBLRVhFQ19SRUxPQ0FURV9ORVdfS0VSTkVMX1NJWkUpOworIAorIAlyZWxvY2F0ZWRfa2V4ZWNfc21wX3dhaXQoTlVMTCk7CisgfQorQEAgLTE5OSw3ICszMDMsNyBAQCB2b2lkIGtleGVjX3JlYm9vdCh2b2lkKQorIAkgKiBtYWNoaW5lX2tleGVjKCkgQ1BVLgorIAkgKi8KKyAJbG9jYWxfZmx1c2hfaWNhY2hlX3JhbmdlKHJlYm9vdF9jb2RlX2J1ZmZlciwKKy0JCQkJIHJlYm9vdF9jb2RlX2J1ZmZlciArIHJlbG9jYXRlX25ld19rZXJuZWxfc2l6ZSk7CisrCQkJCSByZWJvb3RfY29kZV9idWZmZXIgKyBLRVhFQ19SRUxPQ0FURV9ORVdfS0VSTkVMX1NJWkUpOworIAorIAlkb19rZXhlYyA9ICh2b2lkICopcmVib290X2NvZGVfYnVmZmVyOworIAlkb19rZXhlYygpOworQEAgLTIxMiwxMCArMzE2LDEyIEBAIG1hY2hpbmVfa2V4ZWMoc3RydWN0IGtpbWFnZSAqaW1hZ2UpCisgCXVuc2lnbmVkIGxvbmcgKnB0cjsKKyAKKyAJcmVib290X2NvZGVfYnVmZmVyID0KKy0JICAodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MoaW1hZ2UtPmNvbnRyb2xfY29kZV9wYWdlKTsKKysJCSh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhpbWFnZS0+Y29udHJvbF9jb2RlX3BhZ2UpOworKwlwcl9pbmZvKCJyZWJvb3RfY29kZV9idWZmZXIgPSAlcFxuIiwgKHZvaWQgKilyZWJvb3RfY29kZV9idWZmZXIpOworIAorIAlrZXhlY19zdGFydF9hZGRyZXNzID0KKyAJCSh1bnNpZ25lZCBsb25nKSBwaHlzX3RvX3ZpcnQoaW1hZ2UtPnN0YXJ0KTsKKysJcHJfaW5mbygia2V4ZWNfc3RhcnRfYWRkcmVzcyA9ICVwXG4iLCAodm9pZCAqKWtleGVjX3N0YXJ0X2FkZHJlc3MpOworIAorIAlpZiAoaW1hZ2UtPnR5cGUgPT0gS0VYRUNfVFlQRV9ERUZBVUxUKSB7CisgCQlrZXhlY19pbmRpcmVjdGlvbl9wYWdlID0KK0BAIC0yMjMsOSArMzI5LDE5IEBAIG1hY2hpbmVfa2V4ZWMoc3RydWN0IGtpbWFnZSAqaW1hZ2UpCisgCX0gZWxzZSB7CisgCQlrZXhlY19pbmRpcmVjdGlvbl9wYWdlID0gKHVuc2lnbmVkIGxvbmcpJmltYWdlLT5oZWFkOworIAl9CisrCXByX2luZm8oImtleGVjX2luZGlyZWN0aW9uX3BhZ2UgPSAlcFxuIiwgKHZvaWQgKilrZXhlY19pbmRpcmVjdGlvbl9wYWdlKTsKKyAKKy0JbWVtY3B5KCh2b2lkKilyZWJvb3RfY29kZV9idWZmZXIsIHJlbG9jYXRlX25ld19rZXJuZWwsCistCSAgICAgICByZWxvY2F0ZV9uZXdfa2VybmVsX3NpemUpOworKwlwcl9pbmZvKCJXaGVyZSBpcyBtZW1jcHk6ICVwXG4iLCBtZW1jcHkpOworKwlwcl9pbmZvKCJrZXhlY19yZWxvY2F0ZV9uZXdfa2VybmVsID0gJXAsIGtleGVjX3JlbG9jYXRlX25ld19rZXJuZWxfZW5kID0gJXBcbiIsCisrCQkodm9pZCAqKWtleGVjX3JlbG9jYXRlX25ld19rZXJuZWwsICZrZXhlY19yZWxvY2F0ZV9uZXdfa2VybmVsX2VuZCk7CisrCXByX2luZm8oIkNvcHkgJWx1IGJ5dGVzIGZyb20gJXAgdG8gJXBcbiIsIEtFWEVDX1JFTE9DQVRFX05FV19LRVJORUxfU0laRSwKKysJCSh2b2lkICopa2V4ZWNfcmVsb2NhdGVfbmV3X2tlcm5lbCwgKHZvaWQgKilyZWJvb3RfY29kZV9idWZmZXIpOworKwltZW1jcHkoKHZvaWQqKXJlYm9vdF9jb2RlX2J1ZmZlciwga2V4ZWNfcmVsb2NhdGVfbmV3X2tlcm5lbCwKKysJICAgICAgIEtFWEVDX1JFTE9DQVRFX05FV19LRVJORUxfU0laRSk7CisrCisrCXByX2luZm8oIkJlZm9yZSBfcHJpbnRfYXJncygpLlxuIik7CisrCW1hY2hpbmVfa2V4ZWNfcHJpbnRfYXJncygpOworKwlwcl9pbmZvKCJCZWZvcmUgZXZhbCBsb29wLlxuIik7CisgCisgCS8qCisgCSAqIFRoZSBnZW5lcmljIGtleGVjIGNvZGUgYnVpbGRzIGEgcGFnZSBsaXN0IHdpdGggcGh5c2ljYWwKK0BAIC0yNTYsNyArMzcyLDcgQEAgbWFjaGluZV9rZXhlYyhzdHJ1Y3Qga2ltYWdlICppbWFnZSkKKyAjaWZkZWYgQ09ORklHX1NNUAorIAkvKiBBbGwgc2Vjb25kYXJ5IGNwdXMgbm93IG1heSBqdW1wIHRvIGtleGVjX3dhaXQgY3ljbGUgKi8KKyAJcmVsb2NhdGVkX2tleGVjX3NtcF93YWl0ID0gcmVib290X2NvZGVfYnVmZmVyICsKKy0JCSh2b2lkICopKGtleGVjX3NtcF93YWl0IC0gcmVsb2NhdGVfbmV3X2tlcm5lbCk7CisrCQkodm9pZCAqKShrZXhlY19zbXBfd2FpdCAtIGtleGVjX3JlbG9jYXRlX25ld19rZXJuZWwpOworIAlzbXBfd21iKCk7CisgCWF0b21pY19zZXQoJmtleGVjX3JlYWR5X3RvX3JlYm9vdCwgMSk7CisgI2VuZGlmCistLS0gL2Rldi9udWxsCisrKysgYi9hcmNoL21pcHMva2VybmVsL21hY2hpbmVfa2V4ZWMuaAorQEAgLTAsMCArMSwyMCBAQAorKyNpZm5kZWYgX01BQ0hJTkVfS0VYRUNfSAorKyNkZWZpbmUgX01BQ0hJTkVfS0VYRUNfSAorKworKyNpZm5kZWYgX19BU1NFTUJMWV9fCisrZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V4ZWNfcmVsb2NhdGVfbmV3X2tlcm5lbFtdOworK2V4dGVybiB1bnNpZ25lZCBsb25nIGtleGVjX3JlbG9jYXRlX25ld19rZXJuZWxfZW5kOworK2V4dGVybiB1bnNpZ25lZCBsb25nIGtleGVjX3N0YXJ0X2FkZHJlc3M7CisrZXh0ZXJuIHVuc2lnbmVkIGxvbmcga2V4ZWNfaW5kaXJlY3Rpb25fcGFnZTsKKysKKytleHRlcm4gY2hhciBrZXhlY19hcmd2X2J1ZltdOworK2V4dGVybiBjaGFyICprZXhlY19hcmd2W107CisrCisrI2RlZmluZSBLRVhFQ19SRUxPQ0FURV9ORVdfS0VSTkVMX1NJWkUJKCh1bnNpZ25lZCBsb25nKSZrZXhlY19yZWxvY2F0ZV9uZXdfa2VybmVsX2VuZCAtICh1bnNpZ25lZCBsb25nKWtleGVjX3JlbG9jYXRlX25ld19rZXJuZWwpCisrI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KKysKKysjZGVmaW5lIEtFWEVDX0NPTU1BTkRfTElORV9TSVpFCQkyNTYKKysjZGVmaW5lIEtFWEVDX0FSR1ZfU0laRQkJCShLRVhFQ19DT01NQU5EX0xJTkVfU0laRSAvIDE2KQorKyNkZWZpbmUgS0VYRUNfTUFYX0FSR0MJCQkoS0VYRUNfQVJHVl9TSVpFIC8gc2l6ZW9mKGxvbmcpKQorKworKyNlbmRpZgorLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWwuUworKysrIGIvYXJjaC9taXBzL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWwuUworQEAgLTEwLDggKzEwLDkgQEAKKyAjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CisgI2luY2x1ZGUgPGFzbS9zdGFja2ZyYW1lLmg+CisgI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKysjaW5jbHVkZSAibWFjaGluZV9rZXhlYy5oIgorIAorLUxFQUYocmVsb2NhdGVfbmV3X2tlcm5lbCkKKytMRUFGKGtleGVjX3JlbG9jYXRlX25ld19rZXJuZWwpCisgCVBUUl9MIGEwLAlhcmcwCisgCVBUUl9MIGExLAlhcmcxCisgCVBUUl9MIGEyLAlhcmcyCitAQCAtOTYsNyArOTcsNyBAQCBkb25lOgorICNlbmRpZgorIAkvKiBqdW1wIHRvIGtleGVjX3N0YXJ0X2FkZHJlc3MgKi8KKyAJagkJczEKKy0JRU5EKHJlbG9jYXRlX25ld19rZXJuZWwpCisrCUVORChrZXhlY19yZWxvY2F0ZV9uZXdfa2VybmVsKQorIAorICNpZmRlZiBDT05GSUdfU01QCisgLyoKK0BAIC0xODIsOSArMTgzLDE1IEBAIGtleGVjX2luZGlyZWN0aW9uX3BhZ2U6CisgCVBUUgkJMAorIAkuc2l6ZQkJa2V4ZWNfaW5kaXJlY3Rpb25fcGFnZSwgUFRSU0laRQorIAorLXJlbG9jYXRlX25ld19rZXJuZWxfZW5kOgorK2tleGVjX2FyZ3ZfYnVmOgorKwlFWFBPUlQoa2V4ZWNfYXJndl9idWYpCisrCS5za2lwCQlLRVhFQ19DT01NQU5EX0xJTkVfU0laRQorKwkuc2l6ZQkJa2V4ZWNfYXJndl9idWYsIEtFWEVDX0NPTU1BTkRfTElORV9TSVpFCisrCisra2V4ZWNfYXJndjoKKysJRVhQT1JUKGtleGVjX2FyZ3YpCisrCS5za2lwCQlLRVhFQ19BUkdWX1NJWkUKKysJLnNpemUJCWtleGVjX2FyZ3YsIEtFWEVDX0FSR1ZfU0laRQorIAorLXJlbG9jYXRlX25ld19rZXJuZWxfc2l6ZToKKy0JRVhQT1JUKHJlbG9jYXRlX25ld19rZXJuZWxfc2l6ZSkKKy0JUFRSCQlyZWxvY2F0ZV9uZXdfa2VybmVsX2VuZCAtIHJlbG9jYXRlX25ld19rZXJuZWwKKy0JLnNpemUJCXJlbG9jYXRlX25ld19rZXJuZWxfc2l6ZSwgUFRSU0laRQorK2tleGVjX3JlbG9jYXRlX25ld19rZXJuZWxfZW5kOgorKwlFWFBPUlQoa2V4ZWNfcmVsb2NhdGVfbmV3X2tlcm5lbF9lbmQpCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC8zMzItYXJjLWFkZC1PV1JURFRCLXNlY3Rpb24ucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC8zMzItYXJjLWFkZC1PV1JURFRCLXNlY3Rpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIwNTM0ZQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzMzMi1hcmMtYWRkLU9XUlREVEItc2VjdGlvbi5wYXRjaApAQCAtMCwwICsxLDg0IEBACitGcm9tIGJiMGMzYjAxNzUyNDBiZjE1MmZkN2M2NDQ4MjFhMGNmOWY3N2MzN2MgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBFdmdlbml5IERpZGluIDxFdmdlbml5LkRpZGluQHN5bm9wc3lzLmNvbT4KK0RhdGU6IEZyaSwgMTUgTWFyIDIwMTkgMTg6NTM6MzggKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gYXJjIGFkZCBPV1JURFRCIHNlY3Rpb24KKworVGhpcyBjaGFuZ2UgYWxsb3dzIE9wZW5XUlQgdG8gcGF0Y2ggcmVzdWx0aW5nIGtlcm5lbCBiaW5hcnkgd2l0aAorZXh0ZXJuYWwgLmR0Yi4KKworVGhhdCBhbGxvd3MgdXMgdG8gcmUtdXNlIGV4YWN0a3kgdGhlIHNhbWUgdm1saW51eCBvbiBkaWZmZXJlbnQgYm9hcmRzCitnaXZlbiBpdHMgQVJDIGNvcmUgY29uZmlndXJhdGlvbnMgbWF0Y2ggKGF0IGxlYXN0IGNhY2hlIGxpbmUgc2l6ZXMgZXRjKS4KKworIiJwYXRjaC1kdGIiIHNlYXJjaGVzIGZvciBBU0NJSSAiT1dSVERUQjoiIHN0cmlnbiBhbmQgY29waWVzIGV4dGVybmFsCisuZHRiIHJpZ2h0IGFmdGVyIGl0LCBrZWVwaW5nIHRoZSBzdHJpbmcgaW4gcGxhY2UuCisKK1NpZ25lZC1vZmYtYnk6IEV1Z2VuaXkgUGFsdHNldiA8RXVnZW5peS5QYWx0c2V2QHN5bm9wc3lzLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEFsZXhleSBCcm9ka2luIDxhYnJvZGtpbkBzeW5vcHN5cy5jb20+CitTaWduZWQtb2ZmLWJ5OiBFdmdlbml5IERpZGluIDxFdmdlbml5LkRpZGluQHN5bm9wc3lzLmNvbT4KKy0tLQorIGFyY2gvYXJjL2tlcm5lbC9oZWFkLlMgICAgICAgIHwgMTAgKysrKysrKysrKworIGFyY2gvYXJjL2tlcm5lbC9zZXR1cC5jICAgICAgIHwgIDQgKysrLQorIGFyY2gvYXJjL2tlcm5lbC92bWxpbnV4Lmxkcy5TIHwgMTMgKysrKysrKysrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgMjYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCistLS0gYS9hcmNoL2FyYy9rZXJuZWwvaGVhZC5TCisrKysgYi9hcmNoL2FyYy9rZXJuZWwvaGVhZC5TCitAQCAtNjEsNiArNjEsMTYgQEAKKyAjZW5kaWYKKyAuZW5kbQorIAorKwk7IEhlcmUgInBhdGNoLWR0YiIgd2lsbCBlbWJlZCBleHRlcm5hbCAuZHRiCisrCTsgTm90ZSAicGF0Y2gtZHRiIiBzZWFyY2hlcyBmb3IgQVNDSUkgIk9XUlREVEI6IiBzdHJpbmcKKysJOyBhbmQgcGFzdGVzIC5kdGIgcmlnaHQgYWZ0ZXIgaXQsIGhlbnNlIHRoZSBzdHJpbmcgcHJlY2VkZXMKKysJOyBfX2ltYWdlX2R0YiBzeW1ib2wuCisrCS5zZWN0aW9uIC5vd3J0LCAiYXciLEBwcm9nYml0cworKwkuYXNjaWkgICJPV1JURFRCOiIKKytFTlRSWShfX2ltYWdlX2R0YikKKysJLmZpbGwgICAweDQwMDAKKytFTkQoX19pbWFnZV9kdGIpCisrCisgCS5zZWN0aW9uIC5pbml0LnRleHQsICJheCIsQHByb2diaXRzCisgCisgOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tLSBhL2FyY2gvYXJjL2tlcm5lbC9zZXR1cC5jCisrKysgYi9hcmNoL2FyYy9rZXJuZWwvc2V0dXAuYworQEAgLTQ5Miw2ICs0OTIsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdWJvb3RfYXJnX2ludmFsaWQodW5zCisgLyogV2UgYWx3YXlzIHBhc3MgMCBhcyBtYWdpYyBmcm9tIFUtYm9vdCAqLworICNkZWZpbmUgVUJPT1RfTUFHSUNfVkFMVUUJMAorIAorK2V4dGVybiBzdHJ1Y3QgYm9vdF9wYXJhbV9oZWFkZXIgX19pbWFnZV9kdGI7CisrCisgdm9pZCBfX2luaXQgaGFuZGxlX3Vib290X2FyZ3Modm9pZCkKKyB7CisgCWJvb2wgdXNlX2VtYmVkZGVkX2R0YiA9IHRydWU7CitAQCAtNTMwLDcgKzUzMiw3IEBAIHZvaWQgX19pbml0IGhhbmRsZV91Ym9vdF9hcmdzKHZvaWQpCisgaWdub3JlX3Vib290X2FyZ3M6CisgCisgCWlmICh1c2VfZW1iZWRkZWRfZHRiKSB7CistCQltYWNoaW5lX2Rlc2MgPSBzZXR1cF9tYWNoaW5lX2ZkdChfX2R0Yl9zdGFydCk7CisrCQltYWNoaW5lX2Rlc2MgPSBzZXR1cF9tYWNoaW5lX2ZkdCgmX19pbWFnZV9kdGIpOworIAkJaWYgKCFtYWNoaW5lX2Rlc2MpCisgCQkJcGFuaWMoIkVtYmVkZGVkIERUIGludmFsaWRcbiIpOworIAl9CistLS0gYS9hcmNoL2FyYy9rZXJuZWwvdm1saW51eC5sZHMuUworKysrIGIvYXJjaC9hcmMva2VybmVsL3ZtbGludXgubGRzLlMKK0BAIC0yNyw2ICsyNywxOSBAQCBTRUNUSU9OUworIAorIAkuID0gQ09ORklHX0xJTlVYX0xJTktfQkFTRTsKKyAKKysJLyoKKysJKiBJbiBPcGVuV1JUIHdlIHdhbnQgdG8gcGF0Y2ggYnVpbHQgYmluYXJ5IGVtYmVkZGluZyAuZHRiIG9mIGNob2ljZS4KKysJKiBUaGlzIGlzIGltcGxlbWVudGVkIHdpdGggInBhdGNoLWR0YiIgdXRpbGl0eSB3aGljaCBzZWFyY2hlcyBmb3IKKysJKiAiT1dSVERUQjoiIHN0cmluZyBpbiBmaXJzdCAxNmsgb2YgaW1hZ2UgYW5kIGlmIGl0IGlzIGZvdW5kCisrCSogY29waWVzIC5kdGIgcmlnaHQgYWZ0ZXIgbWVudGlvbmVkIHN0cmluZy4KKysJKgorKwkqIE5vdGU6ICJPV1JURFRCOiIgd29uJ3QgYmUgb3ZlcndyaXR0ZW4gd2l0aCAuZHRiLCAuZHRiIHdpbGwgZm9sbG93IGl0LgorKwkqLworKyAJLm93cnQgOiB7CisrCQkqKC5vd3J0KQorKwkuID0gQUxJR04oUEFHRV9TSVpFKTsKKysJfQorKworIAlfaW50X3ZlY19iYXNlX2xkcyA9IC47CisgCS52ZWN0b3IgOiB7CisgCQkqKC52ZWN0b3IpCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC8zMzMtYXJjLWVuYWJsZS11bmFsaWduZWQtYWNjZXNzLWluLWtlcm5lbC1tb2RlLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvMzMzLWFyYy1lbmFibGUtdW5hbGlnbmVkLWFjY2Vzcy1pbi1rZXJuZWwtbW9kZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODQ4YTg0Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvMzMzLWFyYy1lbmFibGUtdW5hbGlnbmVkLWFjY2Vzcy1pbi1rZXJuZWwtbW9kZS5wYXRjaApAQCAtMCwwICsxLDI0IEBACitGcm9tOiBBbGV4ZXkgQnJvZGtpbiA8YWJyb2RraW5Ac3lub3BzeXMuY29tPgorU3ViamVjdDogYXJjOiBlbmFibGUgdW5hbGlnbmVkIGFjY2VzcyBpbiBrZXJuZWwgbW9kZQorCitUaGlzIGVuYWJsZXMgbWlzYWxpZ25lZCBhY2Nlc3MgaGFuZGxpbmcgZXZlbiBpbiBrZXJuZWwgbW9kZS4KK1NvbWUgd2lyZWxlc3MgZHJpdmVycyAoYXRoOWstaHRjIGFuZCBtdDc2MDF1KSB1c2UgbWlzYWxpZ25lZCBhY2Nlc3NlcworaGVyZSBhbmQgdGhlcmUgYW5kIHRvIGNvcGUgd2l0aCB0aGF0IHdpdGhvdXQgZml4aW5nIHN0dWZmIGluIHRoZSBkcml2ZXJzCit3ZSdyZSBqdXN0IGdyYWNlZnVsbHkgaGFuZGxpbmcgaXQgb24gQVJDLgorCitTaWduZWQtb2ZmLWJ5OiBBbGV4ZXkgQnJvZGtpbiA8YWJyb2RraW5Ac3lub3BzeXMuY29tPgorLS0tCisgYXJjaC9hcmMva2VybmVsL3VuYWxpZ25lZC5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCistLS0gYS9hcmNoL2FyYy9rZXJuZWwvdW5hbGlnbmVkLmMKKysrKyBiL2FyY2gvYXJjL2tlcm5lbC91bmFsaWduZWQuYworQEAgLTIwMiw3ICsyMDIsNyBAQCBpbnQgbWlzYWxpZ25lZF9maXh1cCh1bnNpZ25lZCBsb25nIGFkZHJlCisgCWNoYXIgYnVmW1RBU0tfQ09NTV9MRU5dOworIAorIAkvKiBoYW5kbGUgdXNlciBtb2RlIG9ubHkgYW5kIG9ubHkgaWYgZW5hYmxlZCBieSBzeXNhZG1pbiAqLworLQlpZiAoIXVzZXJfbW9kZShyZWdzKSB8fCAhdW5hbGlnbmVkX2VuYWJsZWQpCisrCWlmICghdW5hbGlnbmVkX2VuYWJsZWQpCisgCQlyZXR1cm4gMTsKKyAKKyAJaWYgKG5vX3VuYWxpZ25lZF93YXJuaW5nKSB7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC8zNDItcG93ZXJwYy1FbmFibGUta2VybmVsLVhaLWNvbXByZXNzaW9uLW9wdGlvbi1vbi1QUENfOC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzM0Mi1wb3dlcnBjLUVuYWJsZS1rZXJuZWwtWFotY29tcHJlc3Npb24tb3B0aW9uLW9uLVBQQ184LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNGM3NDIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC8zNDItcG93ZXJwYy1FbmFibGUta2VybmVsLVhaLWNvbXByZXNzaW9uLW9wdGlvbi1vbi1QUENfOC5wYXRjaApAQCAtMCwwICsxLDI1IEBACitGcm9tIDY2NzcwYTAwNGFmZTEwZGYxMWQzOTAyZTE2ZWFhMGMyYzM5NDM2YmIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXdlbCBEZW1iaWNraSA8cGF3ZWxkZW1iaWNraUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI0IE1heSAyMDE5IDE3OjU2OjE5ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIHBvd2VycGM6IEVuYWJsZSBrZXJuZWwgWFogY29tcHJlc3Npb24gb3B0aW9uIG9uIFBQQ184NXh4CisKK0VuYWJsZSBrZXJuZWwgWFogY29tcHJlc3Npb24gb3B0aW9uIG9uIFBQQ184NXh4LiBUZXN0ZWQgd2l0aAorc2ltcGxlSW1hZ2Ugb24gVFAtTGluayBUTC1XRFI0OTAwIChGcmVlc2NhbGUgUDEwMTQgcHJvY2Vzc29yKS4KKworU3VnZ2VzdGVkLWJ5OiBDaHJpc3RpYW4gTGFtcGFydGVyIDxjaHVua2VleUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBQYXdlbCBEZW1iaWNraSA8cGF3ZWxkZW1iaWNraUBnbWFpbC5jb20+CistLS0KKyBhcmNoL3Bvd2VycGMvS2NvbmZpZyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWcKKysrKyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCitAQCAtMjA1LDcgKzIwNSw3IEBAIGNvbmZpZyBQUEMKKyAJc2VsZWN0IEhBVkVfS0VSTkVMX0daSVAKKyAJc2VsZWN0IEhBVkVfS0VSTkVMX0xaTUEJCQlpZiBERUZBVUxUX1VJTUFHRQorIAlzZWxlY3QgSEFWRV9LRVJORUxfTFpPCQkJaWYgREVGQVVMVF9VSU1BR0UKKy0Jc2VsZWN0IEhBVkVfS0VSTkVMX1haCQkJaWYgUFBDX0JPT0szUyB8fCA0NHgKKysJc2VsZWN0IEhBVkVfS0VSTkVMX1haCQkJaWYgUFBDX0JPT0szUyB8fCA0NHggfHwgUFBDXzg1eHgKKyAJc2VsZWN0IEhBVkVfS1BST0JFUworIAlzZWxlY3QgSEFWRV9LUFJPQkVTX09OX0ZUUkFDRQorIAlzZWxlY3QgSEFWRV9LUkVUUFJPQkVTCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC80MDAtbXRkLWFkZC1yb290ZnMtc3BsaXQtc3VwcG9ydC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQwMC1tdGQtYWRkLXJvb3Rmcy1zcGxpdC1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYTRlZDMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC80MDAtbXRkLWFkZC1yb290ZnMtc3BsaXQtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDEwNyBAQAorRnJvbTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorU3ViamVjdDogbWFrZSByb290ZnMgc3BsaXQvZGV0ZWN0aW9uIG1vcmUgZ2VuZXJpYyAtIHBhdGNoIGNhbiBiZSBtb3ZlZCB0byBnZW5lcmljLTIuNiBhZnRlciB0ZXN0aW5nIG9uIG90aGVyIHBsYXRmb3JtcworCitsZWRlLWNvbW1pdDogMzI4ZTY2MGIzMWYwOTM3ZDUyYzVhZTNkNmU3MDI5NDA5OTE4YTlkZgorU2lnbmVkLW9mZi1ieTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorLS0tCisgZHJpdmVycy9tdGQvS2NvbmZpZyAgICAgICAgICAgIHwgMTcgKysrKysrKysrKysrKysrKysKKyBkcml2ZXJzL210ZC9tdGRwYXJ0LmMgICAgICAgICAgfCAzNSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIGluY2x1ZGUvbGludXgvbXRkL3BhcnRpdGlvbnMuaCB8ICAyICsrCisgMyBmaWxlcyBjaGFuZ2VkLCA1NCBpbnNlcnRpb25zKCspCisKKy0tLSBhL2RyaXZlcnMvbXRkL0tjb25maWcKKysrKyBiL2RyaXZlcnMvbXRkL0tjb25maWcKK0BAIC0xMiw2ICsxMiwyMyBAQCBtZW51Y29uZmlnIE1URAorIAorIGlmIE1URAorIAorK21lbnUgIk9wZW5XcnQgc3BlY2lmaWMgTVREIG9wdGlvbnMiCisrCisrY29uZmlnIE1URF9ST09URlNfUk9PVF9ERVYKKysJYm9vbCAiQXV0b21hdGljYWxseSBzZXQgJ3Jvb3RmcycgcGFydGl0aW9uIHRvIGJlIHJvb3QgZmlsZXN5c3RlbSIKKysJZGVmYXVsdCB5CisrCisrY29uZmlnIE1URF9TUExJVF9GSVJNV0FSRQorKwlib29sICJBdXRvbWF0aWNhbGx5IHNwbGl0IGZpcm13YXJlIHBhcnRpdGlvbiBmb3Iga2VybmVsK3Jvb3RmcyIKKysJZGVmYXVsdCB5CisrCisrY29uZmlnIE1URF9TUExJVF9GSVJNV0FSRV9OQU1FCisrCXN0cmluZyAiRmlybXdhcmUgcGFydGl0aW9uIG5hbWUiCisrCWRlcGVuZHMgb24gTVREX1NQTElUX0ZJUk1XQVJFCisrCWRlZmF1bHQgImZpcm13YXJlIgorKworK2VuZG1lbnUKKysKKyBjb25maWcgTVREX1RFU1RTCisgCXRyaXN0YXRlICJNVEQgdGVzdHMgc3VwcG9ydCAoREFOR0VST1VTKSIKKyAJZGVwZW5kcyBvbiBtCistLS0gYS9kcml2ZXJzL210ZC9tdGRwYXJ0LmMKKysrKyBiL2RyaXZlcnMvbXRkL210ZHBhcnQuYworQEAgLTE1LDEwICsxNSwxMiBAQAorICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CisgI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKysjaW5jbHVkZSA8bGludXgvbWFnaWMuaD4KKyAjaW5jbHVkZSA8bGludXgvZXJyLmg+CisgI2luY2x1ZGUgPGxpbnV4L29mLmg+CisgCisgI2luY2x1ZGUgIm10ZGNvcmUuaCIKKysjaW5jbHVkZSAibXRkc3BsaXQvbXRkc3BsaXQuaCIKKyAKKyAvKiBPdXIgcGFydGl0aW9uIGxpbmtlZCBsaXN0ICovCisgc3RhdGljIExJU1RfSEVBRChtdGRfcGFydGl0aW9ucyk7CitAQCAtMzgsNiArNDAsOCBAQCBzdHJ1Y3QgbXRkX3BhcnQgeworIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisgfTsKKyAKKytzdGF0aWMgdm9pZCBtdGRfcGFydGl0aW9uX3NwbGl0KHN0cnVjdCBtdGRfaW5mbyAqbWFzdGVyLCBzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQpOworKworIC8qCisgICogR2l2ZW4gYSBwb2ludGVyIHRvIHRoZSBNVEQgb2JqZWN0IGluIHRoZSBtdGRfcGFydCBzdHJ1Y3R1cmUsIHdlIGNhbiByZXRyaWV2ZQorICAqIHRoZSBwb2ludGVyIHRvIHRoYXQgc3RydWN0dXJlLgorQEAgLTYxMiw2ICs2MTYsNyBAQCBpbnQgbXRkX2FkZF9wYXJ0aXRpb24oc3RydWN0IG10ZF9pbmZvICpwCisgCWlmIChyZXQpCisgCQlnb3RvIGVycl9yZW1vdmVfcGFydDsKKyAKKysJbXRkX3BhcnRpdGlvbl9zcGxpdChwYXJlbnQsIG5ldyk7CisgCW10ZF9hZGRfcGFydGl0aW9uX2F0dHJzKG5ldyk7CisgCisgCXJldHVybiAwOworQEAgLTY5OCw2ICs3MDMsMjkgQEAgaW50IG10ZF9kZWxfcGFydGl0aW9uKHN0cnVjdCBtdGRfaW5mbyAqbQorIH0KKyBFWFBPUlRfU1lNQk9MX0dQTChtdGRfZGVsX3BhcnRpdGlvbik7CisgCisrI2lmZGVmIENPTkZJR19NVERfU1BMSVRfRklSTVdBUkVfTkFNRQorKyNkZWZpbmUgU1BMSVRfRklSTVdBUkVfTkFNRQlDT05GSUdfTVREX1NQTElUX0ZJUk1XQVJFX05BTUUKKysjZWxzZQorKyNkZWZpbmUgU1BMSVRfRklSTVdBUkVfTkFNRQkidW51c2VkIgorKyNlbmRpZgorKworK3N0YXRpYyB2b2lkIHNwbGl0X2Zpcm13YXJlKHN0cnVjdCBtdGRfaW5mbyAqbWFzdGVyLCBzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQpCisreworK30KKysKKytzdGF0aWMgdm9pZCBtdGRfcGFydGl0aW9uX3NwbGl0KHN0cnVjdCBtdGRfaW5mbyAqbWFzdGVyLCBzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQpCisreworKwlzdGF0aWMgaW50IHJvb3Rmc19mb3VuZCA9IDA7CisrCisrCWlmIChyb290ZnNfZm91bmQpCisrCQlyZXR1cm47CisrCisrCWlmIChJU19FTkFCTEVEKENPTkZJR19NVERfU1BMSVRfRklSTVdBUkUpICYmCisrCSAgICAhc3RyY21wKHBhcnQtPm10ZC5uYW1lLCBTUExJVF9GSVJNV0FSRV9OQU1FKSAmJgorKwkgICAgIW9mX2ZpbmRfcHJvcGVydHkobXRkX2dldF9vZl9ub2RlKCZwYXJ0LT5tdGQpLCAiY29tcGF0aWJsZSIsIE5VTEwpKQorKwkJc3BsaXRfZmlybXdhcmUobWFzdGVyLCBwYXJ0KTsKKyt9CisrCisgLyoKKyAgKiBUaGlzIGZ1bmN0aW9uLCBnaXZlbiBhIG1hc3RlciBNVEQgb2JqZWN0IGFuZCBhIHBhcnRpdGlvbiB0YWJsZSwgY3JlYXRlcworICAqIGFuZCByZWdpc3RlcnMgc2xhdmUgTVREIG9iamVjdHMgd2hpY2ggYXJlIGJvdW5kIHRvIHRoZSBtYXN0ZXIgYWNjb3JkaW5nIHRvCitAQCAtNzM4LDYgKzc2Niw3IEBAIGludCBhZGRfbXRkX3BhcnRpdGlvbnMoc3RydWN0IG10ZF9pbmZvICoKKyAJCQlnb3RvIGVycl9kZWxfcGFydGl0aW9uczsKKyAJCX0KKyAKKysJCW10ZF9wYXJ0aXRpb25fc3BsaXQobWFzdGVyLCBzbGF2ZSk7CisgCQltdGRfYWRkX3BhcnRpdGlvbl9hdHRycyhzbGF2ZSk7CisgCQkvKiBMb29rIGZvciBzdWJwYXJ0aXRpb25zICovCisgCQlwYXJzZV9tdGRfcGFydGl0aW9ucygmc2xhdmUtPm10ZCwgcGFydHNbaV0udHlwZXMsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDAxLW10ZC1hZGQtc3VwcG9ydC1mb3ItZGlmZmVyZW50LXBhcnRpdGlvbi1wYXJzZXItdHlwZXMucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC80MDEtbXRkLWFkZC1zdXBwb3J0LWZvci1kaWZmZXJlbnQtcGFydGl0aW9uLXBhcnNlci10eXBlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDcxYzYyCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDAxLW10ZC1hZGQtc3VwcG9ydC1mb3ItZGlmZmVyZW50LXBhcnRpdGlvbi1wYXJzZXItdHlwZXMucGF0Y2gKQEAgLTAsMCArMSwxNDIgQEAKK0Zyb206IEdhYm9yIEp1aG9zIDxqdWhvc2dAb3BlbndydC5vcmc+CitTdWJqZWN0OiBtdGQ6IGFkZCBzdXBwb3J0IGZvciBkaWZmZXJlbnQgcGFydGl0aW9uIHBhcnNlciB0eXBlcworCitTaWduZWQtb2ZmLWJ5OiBHYWJvciBKdWhvcyA8anVob3NnQG9wZW53cnQub3JnPgorLS0tCisgZHJpdmVycy9tdGQvbXRkcGFydC5jICAgICAgICAgIHwgICA1NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgaW5jbHVkZS9saW51eC9tdGQvcGFydGl0aW9ucy5oIHwgICAxMSArKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgNjcgaW5zZXJ0aW9ucygrKQorCistLS0gYS9kcml2ZXJzL210ZC9tdGRwYXJ0LmMKKysrKyBiL2RyaXZlcnMvbXRkL210ZHBhcnQuYworQEAgLTQxLDYgKzQxLDEwIEBAIHN0cnVjdCBtdGRfcGFydCB7CisgfTsKKyAKKyBzdGF0aWMgdm9pZCBtdGRfcGFydGl0aW9uX3NwbGl0KHN0cnVjdCBtdGRfaW5mbyAqbWFzdGVyLCBzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQpOworK3N0YXRpYyBpbnQgcGFyc2VfbXRkX3BhcnRpdGlvbnNfYnlfdHlwZShzdHJ1Y3QgbXRkX2luZm8gKm1hc3RlciwKKysJCQkJCWVudW0gbXRkX3BhcnNlcl90eXBlIHR5cGUsCisrCQkJCQljb25zdCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqKnBwYXJ0cywKKysJCQkJCXN0cnVjdCBtdGRfcGFydF9wYXJzZXJfZGF0YSAqZGF0YSk7CisgCisgLyoKKyAgKiBHaXZlbiBhIHBvaW50ZXIgdG8gdGhlIE1URCBvYmplY3QgaW4gdGhlIG10ZF9wYXJ0IHN0cnVjdHVyZSwgd2UgY2FuIHJldHJpZXZlCitAQCAtNzAzLDYgKzcwNywzNiBAQCBpbnQgbXRkX2RlbF9wYXJ0aXRpb24oc3RydWN0IG10ZF9pbmZvICptCisgfQorIEVYUE9SVF9TWU1CT0xfR1BMKG10ZF9kZWxfcGFydGl0aW9uKTsKKyAKKytzdGF0aWMgaW50CisrcnVuX3BhcnNlcnNfYnlfdHlwZShzdHJ1Y3QgbXRkX3BhcnQgKnNsYXZlLCBlbnVtIG10ZF9wYXJzZXJfdHlwZSB0eXBlKQorK3sKKysJc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzOworKwlpbnQgbnJfcGFydHM7CisrCWludCBpOworKworKwlucl9wYXJ0cyA9IHBhcnNlX210ZF9wYXJ0aXRpb25zX2J5X3R5cGUoJnNsYXZlLT5tdGQsIHR5cGUsIChjb25zdCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqKikmcGFydHMsCisrCQkJCQkJTlVMTCk7CisrCWlmIChucl9wYXJ0cyA8PSAwKQorKwkJcmV0dXJuIG5yX3BhcnRzOworKworKwlpZiAoV0FSTl9PTighcGFydHMpKQorKwkJcmV0dXJuIDA7CisrCisrCWZvciAoaSA9IDA7IGkgPCBucl9wYXJ0czsgaSsrKSB7CisrCQkvKiBhZGp1c3QgcGFydGl0aW9uIG9mZnNldHMgKi8KKysJCXBhcnRzW2ldLm9mZnNldCArPSBzbGF2ZS0+b2Zmc2V0OworKworKwkJbXRkX2FkZF9wYXJ0aXRpb24oc2xhdmUtPnBhcmVudCwKKysJCQkJICBwYXJ0c1tpXS5uYW1lLAorKwkJCQkgIHBhcnRzW2ldLm9mZnNldCwKKysJCQkJICBwYXJ0c1tpXS5zaXplKTsKKysJfQorKworKwlrZnJlZShwYXJ0cyk7CisrCisrCXJldHVybiBucl9wYXJ0czsKKyt9CisrCisgI2lmZGVmIENPTkZJR19NVERfU1BMSVRfRklSTVdBUkVfTkFNRQorICNkZWZpbmUgU1BMSVRfRklSTVdBUkVfTkFNRQlDT05GSUdfTVREX1NQTElUX0ZJUk1XQVJFX05BTUUKKyAjZWxzZQorQEAgLTEwNTIsNiArMTA4Niw2MSBAQCB2b2lkIG10ZF9wYXJ0X3BhcnNlcl9jbGVhbnVwKHN0cnVjdCBtdGRfCisgCX0KKyB9CisgCisrc3RhdGljIHN0cnVjdCBtdGRfcGFydF9wYXJzZXIgKgorK2dldF9wYXJ0aXRpb25fcGFyc2VyX2J5X3R5cGUoZW51bSBtdGRfcGFyc2VyX3R5cGUgdHlwZSwKKysJCQkgICAgIHN0cnVjdCBtdGRfcGFydF9wYXJzZXIgKnN0YXJ0KQorK3sKKysJc3RydWN0IG10ZF9wYXJ0X3BhcnNlciAqcCwgKnJldCA9IE5VTEw7CisrCisrCXNwaW5fbG9jaygmcGFydF9wYXJzZXJfbG9jayk7CisrCisrCXAgPSBsaXN0X3ByZXBhcmVfZW50cnkoc3RhcnQsICZwYXJ0X3BhcnNlcnMsIGxpc3QpOworKwlpZiAoc3RhcnQpCisrCQltdGRfcGFydF9wYXJzZXJfcHV0KHN0YXJ0KTsKKysKKysJbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZShwLCAmcGFydF9wYXJzZXJzLCBsaXN0KSB7CisrCQlpZiAocC0+dHlwZSA9PSB0eXBlICYmIHRyeV9tb2R1bGVfZ2V0KHAtPm93bmVyKSkgeworKwkJCXJldCA9IHA7CisrCQkJYnJlYWs7CisrCQl9CisrCX0KKysKKysJc3Bpbl91bmxvY2soJnBhcnRfcGFyc2VyX2xvY2spOworKworKwlyZXR1cm4gcmV0OworK30KKysKKytzdGF0aWMgaW50IHBhcnNlX210ZF9wYXJ0aXRpb25zX2J5X3R5cGUoc3RydWN0IG10ZF9pbmZvICptYXN0ZXIsCisrCQkJCQllbnVtIG10ZF9wYXJzZXJfdHlwZSB0eXBlLAorKwkJCQkJY29uc3Qgc3RydWN0IG10ZF9wYXJ0aXRpb24gKipwcGFydHMsCisrCQkJCQlzdHJ1Y3QgbXRkX3BhcnRfcGFyc2VyX2RhdGEgKmRhdGEpCisreworKwlzdHJ1Y3QgbXRkX3BhcnRfcGFyc2VyICpwcmV2ID0gTlVMTDsKKysJaW50IHJldCA9IDA7CisrCisrCXdoaWxlICgxKSB7CisrCQlzdHJ1Y3QgbXRkX3BhcnRfcGFyc2VyICpwYXJzZXI7CisrCisrCQlwYXJzZXIgPSBnZXRfcGFydGl0aW9uX3BhcnNlcl9ieV90eXBlKHR5cGUsIHByZXYpOworKwkJaWYgKCFwYXJzZXIpCisrCQkJYnJlYWs7CisrCisrCQlyZXQgPSAoKnBhcnNlci0+cGFyc2VfZm4pKG1hc3RlciwgcHBhcnRzLCBkYXRhKTsKKysKKysJCWlmIChyZXQgPiAwKSB7CisrCQkJbXRkX3BhcnRfcGFyc2VyX3B1dChwYXJzZXIpOworKwkJCXByaW50ayhLRVJOX05PVElDRQorKwkJCSAgICAgICAiJWQgJXMgcGFydGl0aW9ucyBmb3VuZCBvbiBNVEQgZGV2aWNlICVzXG4iLAorKwkJCSAgICAgICByZXQsIHBhcnNlci0+bmFtZSwgbWFzdGVyLT5uYW1lKTsKKysJCQlicmVhazsKKysJCX0KKysKKysJCXByZXYgPSBwYXJzZXI7CisrCX0KKysKKysJcmV0dXJuIHJldDsKKyt9CisrCisgaW50IG10ZF9pc19wYXJ0aXRpb24oY29uc3Qgc3RydWN0IG10ZF9pbmZvICptdGQpCisgeworIAlzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQ7CistLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9wYXJ0aXRpb25zLmgKKysrKyBiL2luY2x1ZGUvbGludXgvbXRkL3BhcnRpdGlvbnMuaAorQEAgLTczLDYgKzczLDEwIEBAIHN0cnVjdCBtdGRfcGFydF9wYXJzZXJfZGF0YSB7CisgICogRnVuY3Rpb25zIGRlYWxpbmcgd2l0aCB0aGUgdmFyaW91cyB3YXlzIG9mIHBhcnRpdGlvbmluZyB0aGUgc3BhY2UKKyAgKi8KKyAKKytlbnVtIG10ZF9wYXJzZXJfdHlwZSB7CisrCU1URF9QQVJTRVJfVFlQRV9ERVZJQ0UgPSAwLAorK307CisrCisgc3RydWN0IG10ZF9wYXJ0X3BhcnNlciB7CisgCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKyAJc3RydWN0IG1vZHVsZSAqb3duZXI7CitAQCAtODEsNiArODUsNyBAQCBzdHJ1Y3QgbXRkX3BhcnRfcGFyc2VyIHsKKyAJaW50ICgqcGFyc2VfZm4pKHN0cnVjdCBtdGRfaW5mbyAqLCBjb25zdCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqKiwKKyAJCQlzdHJ1Y3QgbXRkX3BhcnRfcGFyc2VyX2RhdGEgKik7CisgCXZvaWQgKCpjbGVhbnVwKShjb25zdCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcHBhcnRzLCBpbnQgbnJfcGFydHMpOworKwllbnVtIG10ZF9wYXJzZXJfdHlwZSB0eXBlOworIH07CisgCisgLyogQ29udGFpbmVyIGZvciBwYXNzaW5nIGFyb3VuZCBhIHNldCBvZiBwYXJzZWQgcGFydGl0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDAyLW10ZC11c2UtdHlwZWQtbXRkLXBhcnNlcnMtZm9yLXJvb3Rmcy1hbmQtZmlybXdhcmUtc3BsaXQucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC80MDItbXRkLXVzZS10eXBlZC1tdGQtcGFyc2Vycy1mb3Itcm9vdGZzLWFuZC1maXJtd2FyZS1zcGxpdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmUzZWM3Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDAyLW10ZC11c2UtdHlwZWQtbXRkLXBhcnNlcnMtZm9yLXJvb3Rmcy1hbmQtZmlybXdhcmUtc3BsaXQucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorRnJvbTogR2Fib3IgSnVob3MgPGp1aG9zZ0BvcGVud3J0Lm9yZz4KK1N1YmplY3Q6IGtlcm5lbC8zLjEwOiBhbGxvdyB0byB1c2UgcGFydGl0aW9uIHBhcnNlcnMgZm9yIHJvb3RmcyBhbmQgZmlybXdhcmUgc3BsaXQKKworbGVkZS1jb21taXQ6IDNiNzFjZDk0YmM5NTE3YmMyNTI2N2RjY2IzOTNiMDdkNGI1NDU2NGUKK1NpZ25lZC1vZmYtYnk6IEdhYm9yIEp1aG9zIDxqdWhvc2dAb3BlbndydC5vcmc+CistLS0KKyBkcml2ZXJzL210ZC9tdGRwYXJ0LmMgICAgICAgICAgfCAzNyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgaW5jbHVkZS9saW51eC9tdGQvcGFydGl0aW9ucy5oIHwgIDIgKysKKyAyIGZpbGVzIGNoYW5nZWQsIDM5IGluc2VydGlvbnMoKykKKworLS0tIGEvZHJpdmVycy9tdGQvbXRkcGFydC5jCisrKysgYi9kcml2ZXJzL210ZC9tdGRwYXJ0LmMKK0BAIC03NDUsNiArNzQ1LDcgQEAgcnVuX3BhcnNlcnNfYnlfdHlwZShzdHJ1Y3QgbXRkX3BhcnQgKnNsYQorIAorIHN0YXRpYyB2b2lkIHNwbGl0X2Zpcm13YXJlKHN0cnVjdCBtdGRfaW5mbyAqbWFzdGVyLCBzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQpCisgeworKwlydW5fcGFyc2Vyc19ieV90eXBlKHBhcnQsIE1URF9QQVJTRVJfVFlQRV9GSVJNV0FSRSk7CisgfQorIAorIHN0YXRpYyB2b2lkIG10ZF9wYXJ0aXRpb25fc3BsaXQoc3RydWN0IG10ZF9pbmZvICptYXN0ZXIsIHN0cnVjdCBtdGRfcGFydCAqcGFydCkKK0BAIC03NTQsNiArNzU1LDEyIEBAIHN0YXRpYyB2b2lkIG10ZF9wYXJ0aXRpb25fc3BsaXQoc3RydWN0IG0KKyAJaWYgKHJvb3Rmc19mb3VuZCkKKyAJCXJldHVybjsKKyAKKysJaWYgKCFzdHJjbXAocGFydC0+bXRkLm5hbWUsICJyb290ZnMiKSkgeworKwkJcnVuX3BhcnNlcnNfYnlfdHlwZShwYXJ0LCBNVERfUEFSU0VSX1RZUEVfUk9PVEZTKTsKKysKKysJCXJvb3Rmc19mb3VuZCA9IDE7CisrCX0KKysKKyAJaWYgKElTX0VOQUJMRUQoQ09ORklHX01URF9TUExJVF9GSVJNV0FSRSkgJiYKKyAJICAgICFzdHJjbXAocGFydC0+bXRkLm5hbWUsIFNQTElUX0ZJUk1XQVJFX05BTUUpICYmCisgCSAgICAhb2ZfZmluZF9wcm9wZXJ0eShtdGRfZ2V0X29mX25vZGUoJnBhcnQtPm10ZCksICJjb21wYXRpYmxlIiwgTlVMTCkpCistLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9wYXJ0aXRpb25zLmgKKysrKyBiL2luY2x1ZGUvbGludXgvbXRkL3BhcnRpdGlvbnMuaAorQEAgLTc1LDYgKzc1LDggQEAgc3RydWN0IG10ZF9wYXJ0X3BhcnNlcl9kYXRhIHsKKyAKKyBlbnVtIG10ZF9wYXJzZXJfdHlwZSB7CisgCU1URF9QQVJTRVJfVFlQRV9ERVZJQ0UgPSAwLAorKwlNVERfUEFSU0VSX1RZUEVfUk9PVEZTLAorKwlNVERfUEFSU0VSX1RZUEVfRklSTVdBUkUsCisgfTsKKyAKKyBzdHJ1Y3QgbXRkX3BhcnRfcGFyc2VyIHsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQwMy1tdGQtaG9vay1tdGRzcGxpdC10by1LYnVpbGQucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC80MDMtbXRkLWhvb2stbXRkc3BsaXQtdG8tS2J1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkODY4ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC80MDMtbXRkLWhvb2stbXRkc3BsaXQtdG8tS2J1aWxkLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb206IEdhYm9yIEp1aG9zIDxqdWhvc2dAb3BlbndydC5vcmc+CitTdWJqZWN0OiBbUEFUQ0hdIGtlcm5lbC8zLjEwOiBtb3ZlIHNxdWFzaGZzIGNoZWNrIGZyb20gcm9vdGZzIHNwbGl0IGNvZGUgaW50byBhIHNlcGFyYXRlIGZpbGUKKworbGVkZS1jb21taXQ6IGQ4OWJlYTkyYjMxYjRlMTU3YTBmYTQzOGU3NTM3MGYwODlmNzM0MjcKK1NpZ25lZC1vZmYtYnk6IEdhYm9yIEp1aG9zIDxqdWhvc2dAb3BlbndydC5vcmc+CistLS0KKyBkcml2ZXJzL210ZC9LY29uZmlnICB8IDIgKysKKyBkcml2ZXJzL210ZC9NYWtlZmlsZSB8IDIgKysKKyAyIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCistLS0gYS9kcml2ZXJzL210ZC9LY29uZmlnCisrKysgYi9kcml2ZXJzL210ZC9LY29uZmlnCitAQCAtMjcsNiArMjcsOCBAQCBjb25maWcgTVREX1NQTElUX0ZJUk1XQVJFX05BTUUKKyAJZGVwZW5kcyBvbiBNVERfU1BMSVRfRklSTVdBUkUKKyAJZGVmYXVsdCAiZmlybXdhcmUiCisgCisrc291cmNlICJkcml2ZXJzL210ZC9tdGRzcGxpdC9LY29uZmlnIgorKworIGVuZG1lbnUKKyAKKyBjb25maWcgTVREX1RFU1RTCistLS0gYS9kcml2ZXJzL210ZC9NYWtlZmlsZQorKysrIGIvZHJpdmVycy9tdGQvTWFrZWZpbGUKK0BAIC05LDYgKzksOCBAQCBtdGQteQkJCQk6PSBtdGRjb3JlLm8gbXRkc3VwZXIubyBtdGRjb25jCisgCisgb2JqLXkJCQkJKz0gcGFyc2Vycy8KKyAKKytvYmotJChDT05GSUdfTVREX1NQTElUKQkJKz0gbXRkc3BsaXQvCisrCisgIyAnVXNlcnMnIC0gY29kZSB3aGljaCBwcmVzZW50cyBmdW5jdGlvbmFsaXR5IHRvIHVzZXJzcGFjZS4KKyBvYmotJChDT05GSUdfTVREX0JMS0RFVlMpCSs9IG10ZF9ibGtkZXZzLm8KKyBvYmotJChDT05GSUdfTVREX0JMT0NLKQkJKz0gbXRkYmxvY2subwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDA0LW10ZC1hZGQtbW9yZS1oZWxwZXItZnVuY3Rpb25zLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDA0LW10ZC1hZGQtbW9yZS1oZWxwZXItZnVuY3Rpb25zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1OWE0NDAKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC80MDQtbXRkLWFkZC1tb3JlLWhlbHBlci1mdW5jdGlvbnMucGF0Y2gKQEAgLTAsMCArMSw3NiBAQAorRnJvbTogR2Fib3IgSnVob3MgPGp1aG9zZ0BvcGVud3J0Lm9yZz4KK1N1YmplY3Q6IGtlcm5lbC8zLjEwOiBhZGQgc2VwYXJhdGUgcm9vdGZzIHBhcnRpdGlvbiBwYXJzZXIKKworbGVkZS1jb21taXQ6IGRhZWM3YWQ3Njg4NDE1MTU2ZTI3MzBlNDAxNTAzZDA5YmQzYWNmOTEKK1NpZ25lZC1vZmYtYnk6IEdhYm9yIEp1aG9zIDxqdWhvc2dAb3BlbndydC5vcmc+CistLS0KKyBkcml2ZXJzL210ZC9tdGRwYXJ0LmMgICAgICAgICAgfCAyOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIGluY2x1ZGUvbGludXgvbXRkL210ZC5oICAgICAgICB8IDE4ICsrKysrKysrKysrKysrKysrKworIGluY2x1ZGUvbGludXgvbXRkL3BhcnRpdGlvbnMuaCB8ICAyICsrCisgMyBmaWxlcyBjaGFuZ2VkLCA0OSBpbnNlcnRpb25zKCspCisKKy0tLSBhL2RyaXZlcnMvbXRkL210ZHBhcnQuYworKysrIGIvZHJpdmVycy9tdGQvbXRkcGFydC5jCitAQCAtMTE2NSw2ICsxMTY1LDI0IEBAIGludCBtdGRfaXNfcGFydGl0aW9uKGNvbnN0IHN0cnVjdCBtdGRfaW4KKyB9CisgRVhQT1JUX1NZTUJPTF9HUEwobXRkX2lzX3BhcnRpdGlvbik7CisgCisrc3RydWN0IG10ZF9pbmZvICptdGRfZ2V0X21hc3Rlcihjb25zdCBzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKKyt7CisrCWlmICghbXRkX2lzX3BhcnRpdGlvbihtdGQpKQorKwkJcmV0dXJuIChzdHJ1Y3QgbXRkX2luZm8gKiltdGQ7CisrCisrCXJldHVybiBtdGRfdG9fcGFydChtdGQpLT5wYXJlbnQ7CisrfQorK0VYUE9SVF9TWU1CT0xfR1BMKG10ZF9nZXRfbWFzdGVyKTsKKysKKyt1aW50NjRfdCBtdGRwYXJ0X2dldF9vZmZzZXQoY29uc3Qgc3RydWN0IG10ZF9pbmZvICptdGQpCisreworKwlpZiAoIW10ZF9pc19wYXJ0aXRpb24obXRkKSkKKysJCXJldHVybiAwOworKworKwlyZXR1cm4gbXRkX3RvX3BhcnQobXRkKS0+b2Zmc2V0OworK30KKytFWFBPUlRfU1lNQk9MX0dQTChtdGRwYXJ0X2dldF9vZmZzZXQpOworKworIC8qIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGVudGlyZSBmbGFzaCBjaGlwICovCisgdWludDY0X3QgbXRkX2dldF9kZXZpY2Vfc2l6ZShjb25zdCBzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKKyB7CistLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9tdGQuaAorKysrIGIvaW5jbHVkZS9saW51eC9tdGQvbXRkLmgKK0BAIC01MDQsNiArNTA0LDI0IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtdGRfYWxpZ25fZXJhc2VfcmVxKHMKKyAJCXJlcS0+bGVuICs9IG10ZC0+ZXJhc2VzaXplIC0gbW9kOworIH0KKyAKKytzdGF0aWMgaW5saW5lIHVpbnQ2NF90IG10ZF9yb3VuZHVwX3RvX2ViKHVpbnQ2NF90IHN6LCBzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKKyt7CisrCWlmIChtdGRfbW9kX2J5X2ViKHN6LCBtdGQpID09IDApCisrCQlyZXR1cm4gc3o7CisrCisrCS8qIFJvdW5kIHVwIHRvIG5leHQgZXJhc2UgYmxvY2sgKi8KKysJcmV0dXJuIChtdGRfZGl2X2J5X2ViKHN6LCBtdGQpICsgMSkgKiBtdGQtPmVyYXNlc2l6ZTsKKyt9CisrCisrc3RhdGljIGlubGluZSB1aW50NjRfdCBtdGRfcm91bmRkb3duX3RvX2ViKHVpbnQ2NF90IHN6LCBzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKKyt7CisrCWlmIChtdGRfbW9kX2J5X2ViKHN6LCBtdGQpID09IDApCisrCQlyZXR1cm4gc3o7CisrCisrCS8qIFJvdW5kIGRvd24gdG8gdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IGVyYXNlIGJsb2NrICovCisrCXJldHVybiAobXRkX2Rpdl9ieV9lYihzeiwgbXRkKSkgKiBtdGQtPmVyYXNlc2l6ZTsKKyt9CisrCisgc3RhdGljIGlubGluZSB1aW50MzJfdCBtdGRfZGl2X2J5X3dzKHVpbnQ2NF90IHN6LCBzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKKyB7CisgCWlmIChtdGQtPndyaXRlc2l6ZV9zaGlmdCkKKy0tLSBhL2luY2x1ZGUvbGludXgvbXRkL3BhcnRpdGlvbnMuaAorKysrIGIvaW5jbHVkZS9saW51eC9tdGQvcGFydGl0aW9ucy5oCitAQCAtMTE2LDYgKzExNiw4IEBAIGludCBtdGRfaXNfcGFydGl0aW9uKGNvbnN0IHN0cnVjdCBtdGRfaW4KKyBpbnQgbXRkX2FkZF9wYXJ0aXRpb24oc3RydWN0IG10ZF9pbmZvICptYXN0ZXIsIGNvbnN0IGNoYXIgKm5hbWUsCisgCQkgICAgICBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoKTsKKyBpbnQgbXRkX2RlbF9wYXJ0aXRpb24oc3RydWN0IG10ZF9pbmZvICptYXN0ZXIsIGludCBwYXJ0bm8pOworK3N0cnVjdCBtdGRfaW5mbyAqbXRkX2dldF9tYXN0ZXIoY29uc3Qgc3RydWN0IG10ZF9pbmZvICptdGQpOworK3VpbnQ2NF90IG10ZHBhcnRfZ2V0X29mZnNldChjb25zdCBzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CisgdWludDY0X3QgbXRkX2dldF9kZXZpY2Vfc2l6ZShjb25zdCBzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CisgCisgI2VuZGlmCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC80MTAtbXRkLXBhcnNlcnMtb2ZwYXJ0LWZpeC1wYXJzaW5nLXN1YnBhcnRpdGlvbnMucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC80MTAtbXRkLXBhcnNlcnMtb2ZwYXJ0LWZpeC1wYXJzaW5nLXN1YnBhcnRpdGlvbnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBmYzFkNQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQxMC1tdGQtcGFyc2Vycy1vZnBhcnQtZml4LXBhcnNpbmctc3VicGFydGl0aW9ucy5wYXRjaApAQCAtMCwwICsxLDc2IEBACitGcm9tOiA9P1VURi04P3E/UmFmYT1DNT04Mj0yME1pPUM1PTgyZWNraT89IDxyYWZhbEBtaWxlY2tpLnBsPgorRGF0ZTogVGh1LCA2IE1heSAyMDIxIDEyOjMzOjU4ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIG10ZDogcGFyc2Vyczogb2ZwYXJ0OiBmaXggcGFyc2luZyBzdWJwYXJ0aXRpb25zCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK29mcGFydCB3YXMgcmVjZW50bHkgcGF0Y2hlZCB0byBub3Qgc2NhbiByYW5kb20gcGFydGl0aW9uIG5vZGVzIGFzCitzdWJwYXJ0aXRpb25zLiBUaGF0IGNoYW5nZSB1bmZvcnR1bmF0ZWx5IGJyb2tlIHNjYW5uaW5nIHZhbGlkCitzdWJwYXJ0aXRpb25zIGxpa2U6CisKK3BhcnRpdGlvbnMgeworCWNvbXBhdGlibGUgPSAiZml4ZWQtcGFydGl0aW9ucyI7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisKKwlwYXJ0aXRpb25AMCB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtcGFydGl0aW9ucyI7CisJCWxhYmVsID0gImJvb3Rsb2FkZXIiOworCQlyZWcgPSA8MHgwIDB4MTAwMDAwPjsKKworCQlwYXJ0aXRpb25AMCB7CisJCQlsYWJlbCA9ICJjb25maWciOworCQkJcmVnID0gPDB4ODAwMDAgMHg4MDAwMD47CisJCX07CisJfTsKK307CisKK0ZpeCB0aGF0IHJlZ3Jlc3Npb24gYnkgYWRkaW5nIDEgbW9yZSBjb2RlIHBhdGguIFdlIGFjdHVhbGx5IG5lZWQgMworY29uZGl0aW9uYWwgYmxvY2tzIHRvIHN1cHBvcnQgMyBwb3NzaWJsZSBjYXNlcy4gVGhpcyBjaGFuZ2UgYWxzbyBtYWtlcworY29kZSBlYXNpZXIgdG8gdW5kZXJzdGFuZCAmIGZvbGxvdy4KKworUmVwb3J0ZWQtYnk6IERhdmlkIEJhdWVyIDxtYWlsQGRhdmlkLWJhdWVyLm5ldD4KK0ZpeGVzOiAyZDc1MTIwM2FhY2YgKCJtdGQ6IHBhcnNlcnM6IG9mcGFydDogbGltaXQgcGFyc2luZyBvZiBkZXByZWNhdGVkIERUIHN5bnRheAorU2lnbmVkLW9mZi1ieTogUmFmYcWCIE1pxYJlY2tpIDxyYWZhbEBtaWxlY2tpLnBsPgorLS0tCisgZHJpdmVycy9tdGQvcGFyc2Vycy9vZnBhcnRfY29yZS5jIHwgMjYgKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvbXRkL3BhcnNlcnMvb2ZwYXJ0X2NvcmUuYworKysrIGIvZHJpdmVycy9tdGQvcGFyc2Vycy9vZnBhcnRfY29yZS5jCitAQCAtNTcsMjAgKzU3LDIyIEBAIHN0YXRpYyBpbnQgcGFyc2VfZml4ZWRfcGFydGl0aW9ucyhzdHJ1Y3QKKyAJaWYgKCFtdGRfbm9kZSkKKyAJCXJldHVybiAwOworIAorLQlvZnBhcnRfbm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG10ZF9ub2RlLCAicGFydGl0aW9ucyIpOworLQlpZiAoIW9mcGFydF9ub2RlICYmICFtdGRfaXNfcGFydGl0aW9uKG1hc3RlcikpIHsKKy0JCS8qCistCQkgKiBXZSBtaWdodCBnZXQgaGVyZSBldmVuIHdoZW4gb2ZwYXJ0IGlzbid0IHVzZWQgYXQgYWxsIChlLmcuLAorLQkJICogd2hlbiB1c2luZyBhbm90aGVyIHBhcnNlciksIHNvIGRvbid0IGJlIGxvdWRlciB0aGFuCistCQkgKiBLRVJOX0RFQlVHCistCQkgKi8KKy0JCXByX2RlYnVnKCIlczogJ3BhcnRpdGlvbnMnIHN1Ym5vZGUgbm90IGZvdW5kIG9uICVwT0YuIFRyeWluZyB0byBwYXJzZSBkaXJlY3Qgc3Vibm9kZXMgYXMgcGFydGl0aW9ucy5cbiIsCistCQkJIG1hc3Rlci0+bmFtZSwgbXRkX25vZGUpOworKwlpZiAoIW10ZF9pc19wYXJ0aXRpb24obWFzdGVyKSkgeyAvKiBNYXN0ZXIgKi8KKysJCW9mcGFydF9ub2RlID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobXRkX25vZGUsICJwYXJ0aXRpb25zIik7CisrCQlpZiAoIW9mcGFydF9ub2RlKSB7CisrCQkJLyoKKysJCQkgKiBXZSBtaWdodCBnZXQgaGVyZSBldmVuIHdoZW4gb2ZwYXJ0IGlzbid0IHVzZWQgYXQgYWxsIChlLmcuLAorKwkJCSAqIHdoZW4gdXNpbmcgYW5vdGhlciBwYXJzZXIpLCBzbyBkb24ndCBiZSBsb3VkZXIgdGhhbgorKwkJCSAqIEtFUk5fREVCVUcKKysJCQkgKi8KKysJCQlwcl9kZWJ1ZygiJXM6ICdwYXJ0aXRpb25zJyBzdWJub2RlIG5vdCBmb3VuZCBvbiAlcE9GLiBUcnlpbmcgdG8gcGFyc2UgZGlyZWN0IHN1Ym5vZGVzIGFzIHBhcnRpdGlvbnMuXG4iLAorKwkJCQltYXN0ZXItPm5hbWUsIG10ZF9ub2RlKTsKKysJCQlvZnBhcnRfbm9kZSA9IG10ZF9ub2RlOworKwkJCWRlZGljYXRlZCA9IGZhbHNlOworKwkJfQorKwl9IGVsc2UgeyAvKiBQYXJ0aXRpb24gKi8KKyAJCW9mcGFydF9ub2RlID0gbXRkX25vZGU7CistCQlkZWRpY2F0ZWQgPSBmYWxzZTsKKyAJfQorLQlpZiAoIW9mcGFydF9ub2RlKQorLQkJcmV0dXJuIDA7CisgCisgCW9mX2lkID0gb2ZfbWF0Y2hfbm9kZShwYXJzZV9vZnBhcnRfbWF0Y2hfdGFibGUsIG9mcGFydF9ub2RlKTsKKyAJaWYgKGRlZGljYXRlZCAmJiAhb2ZfaWQpIHsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQxMS1tdGQtcGFydGlhbF9lcmFzZWJsb2NrX3dyaXRlLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDExLW10ZC1wYXJ0aWFsX2VyYXNlYmxvY2tfd3JpdGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ4YTE0NAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQxMS1tdGQtcGFydGlhbF9lcmFzZWJsb2NrX3dyaXRlLnBhdGNoCkBAIC0wLDAgKzEsMTMwIEBACitGcm9tOiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CitTdWJqZWN0OiBtdGQ6IGltcGxlbWVudCB3cml0ZSBzdXBwb3J0IGZvciBwYXJ0aXRpb25zIGNvdmVyaW5nIG9ubHkgYSBwYXJ0IG9mIGFuIGVyYXNlYmxvY2sgKGJ1ZmZlciBkYXRhIHRoYXQgd291bGQgb3RoZXJ3aXNlIGJlIGVyYXNlZCkKKworbGVkZS1jb21taXQ6IDg3YThlOGFjMTA2N2Y1OGJhODMxYzRhYWU0NDNmMzY1NWMzMWNkODAKK1NpZ25lZC1vZmYtYnk6IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KKy0tLQorIGRyaXZlcnMvbXRkL210ZHBhcnQuYyAgIHwgOTAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLQorIGluY2x1ZGUvbGludXgvbXRkL210ZC5oIHwgIDQgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA4NSBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQorCistLS0gYS9kcml2ZXJzL210ZC9tdGRwYXJ0LmMKKysrKyBiL2RyaXZlcnMvbXRkL210ZHBhcnQuYworQEAgLTIyLDYgKzIyLDggQEAKKyAjaW5jbHVkZSAibXRkY29yZS5oIgorICNpbmNsdWRlICJtdGRzcGxpdC9tdGRzcGxpdC5oIgorIAorKyNkZWZpbmUgTVREX0VSQVNFX1BBUlRJQUwJMHg4MDAwIC8qIHBhcnRpdGlvbiBvbmx5IGNvdmVycyBwYXJ0cyBvZiBhbiBlcmFzZSBibG9jayAqLworKworIC8qIE91ciBwYXJ0aXRpb24gbGlua2VkIGxpc3QgKi8KKyBzdGF0aWMgTElTVF9IRUFEKG10ZF9wYXJ0aXRpb25zKTsKKyBzdGF0aWMgREVGSU5FX01VVEVYKG10ZF9wYXJ0aXRpb25zX211dGV4KTsKK0BAIC0yMDYsMTEgKzIwOCw3NyBAQCBzdGF0aWMgaW50IHBhcnRfZXJhc2Uoc3RydWN0IG10ZF9pbmZvICptCisgeworIAlzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQgPSBtdGRfdG9fcGFydChtdGQpOworIAlpbnQgcmV0OworKwlzaXplX3Qgd3JsZW4gPSAwOworKwl1OCAqZXJhc2VfYnVmID0gTlVMTDsKKysJdTMyIGVyYXNlX2J1Zl9vZnMgPSAwOworKwlib29sIHBhcnRpYWxfc3RhcnQgPSBmYWxzZTsKKysKKysJaWYgKG10ZC0+ZmxhZ3MgJiBNVERfRVJBU0VfUEFSVElBTCkgeworKwkJc2l6ZV90IHJlYWRsZW4gPSAwOworKwkJdTY0IG10ZF9vZnM7CisrCisrCQllcmFzZV9idWYgPSBrbWFsbG9jKHBhcnQtPnBhcmVudC0+ZXJhc2VzaXplLCBHRlBfQVRPTUlDKTsKKysJCWlmICghZXJhc2VfYnVmKQorKwkJCXJldHVybiAtRU5PTUVNOworKworKwkJbXRkX29mcyA9IHBhcnQtPm9mZnNldCArIGluc3RyLT5hZGRyOworKwkJZXJhc2VfYnVmX29mcyA9IGRvX2RpdihtdGRfb2ZzLCBwYXJ0LT5wYXJlbnQtPmVyYXNlc2l6ZSk7CisrCisrCQlpZiAoZXJhc2VfYnVmX29mcyA+IDApIHsKKysJCQlpbnN0ci0+YWRkciAtPSBlcmFzZV9idWZfb2ZzOworKwkJCXJldCA9IG10ZF9yZWFkKHBhcnQtPnBhcmVudCwKKysJCQkJaW5zdHItPmFkZHIgKyBwYXJ0LT5vZmZzZXQsCisrCQkJCXBhcnQtPnBhcmVudC0+ZXJhc2VzaXplLAorKwkJCQkmcmVhZGxlbiwgZXJhc2VfYnVmKTsKKysKKysJCQlpbnN0ci0+bGVuICs9IGVyYXNlX2J1Zl9vZnM7CisrCQkJcGFydGlhbF9zdGFydCA9IHRydWU7CisrCQl9IGVsc2UgeworKwkJCW10ZF9vZnMgPSBwYXJ0LT5vZmZzZXQgKyBwYXJ0LT5tdGQuc2l6ZTsKKysJCQllcmFzZV9idWZfb2ZzID0gcGFydC0+cGFyZW50LT5lcmFzZXNpemUgLQorKwkJCQlkb19kaXYobXRkX29mcywgcGFydC0+cGFyZW50LT5lcmFzZXNpemUpOworKworKwkJCWlmIChlcmFzZV9idWZfb2ZzID4gMCkgeworKwkJCQlpbnN0ci0+bGVuICs9IGVyYXNlX2J1Zl9vZnM7CisrCQkJCXJldCA9IG10ZF9yZWFkKHBhcnQtPnBhcmVudCwKKysJCQkJCXBhcnQtPm9mZnNldCArIGluc3RyLT5hZGRyICsKKysJCQkJCWluc3RyLT5sZW4gLSBwYXJ0LT5wYXJlbnQtPmVyYXNlc2l6ZSwKKysJCQkJCXBhcnQtPnBhcmVudC0+ZXJhc2VzaXplLCAmcmVhZGxlbiwKKysJCQkJCWVyYXNlX2J1Zik7CisrCQkJfSBlbHNlIHsKKysJCQkJcmV0ID0gMDsKKysJCQl9CisrCQl9CisrCQlpZiAocmV0IDwgMCkgeworKwkJCWtmcmVlKGVyYXNlX2J1Zik7CisrCQkJcmV0dXJuIHJldDsKKysJCX0KKysKKysJfQorIAorIAlpbnN0ci0+YWRkciArPSBwYXJ0LT5vZmZzZXQ7CisgCXJldCA9IHBhcnQtPnBhcmVudC0+X2VyYXNlKHBhcnQtPnBhcmVudCwgaW5zdHIpOworIAlpZiAoaW5zdHItPmZhaWxfYWRkciAhPSBNVERfRkFJTF9BRERSX1VOS05PV04pCisgCQlpbnN0ci0+ZmFpbF9hZGRyIC09IHBhcnQtPm9mZnNldDsKKysKKysJaWYgKG10ZC0+ZmxhZ3MgJiBNVERfRVJBU0VfUEFSVElBTCkgeworKwkJaWYgKHBhcnRpYWxfc3RhcnQpIHsKKysJCQlwYXJ0LT5wYXJlbnQtPl93cml0ZShwYXJ0LT5wYXJlbnQsCisrCQkJCWluc3RyLT5hZGRyLCBlcmFzZV9idWZfb2ZzLAorKwkJCQkmd3JsZW4sIGVyYXNlX2J1Zik7CisrCQkJaW5zdHItPmFkZHIgKz0gZXJhc2VfYnVmX29mczsKKysJCX0gZWxzZSB7CisrCQkJaW5zdHItPmxlbiAtPSBlcmFzZV9idWZfb2ZzOworKwkJCXBhcnQtPnBhcmVudC0+X3dyaXRlKHBhcnQtPnBhcmVudCwKKysJCQkJaW5zdHItPmFkZHIgKyBpbnN0ci0+bGVuLAorKwkJCQllcmFzZV9idWZfb2ZzLCAmd3JsZW4sCisrCQkJCWVyYXNlX2J1ZiArCisrCQkJCXBhcnQtPnBhcmVudC0+ZXJhc2VzaXplIC0KKysJCQkJZXJhc2VfYnVmX29mcyk7CisrCQl9CisrCQlrZnJlZShlcmFzZV9idWYpOworKwl9CisrCisgCWluc3RyLT5hZGRyIC09IHBhcnQtPm9mZnNldDsKKyAKKyAJcmV0dXJuIHJldDsKK0BAIC01MjUsMTkgKzU5MywyMiBAQCBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0ICphbGxvY2F0ZV9wYXJ0aXRpCisgCXJlbWFpbmRlciA9IGRvX2Rpdih0bXAsIHdyX2FsaWdubWVudCk7CisgCWlmICgoc2xhdmUtPm10ZC5mbGFncyAmIE1URF9XUklURUFCTEUpICYmIHJlbWFpbmRlcikgeworIAkJLyogRG9lc24ndCBzdGFydCBvbiBhIGJvdW5kYXJ5IG9mIG1ham9yIGVyYXNlIHNpemUgKi8KKy0JCS8qIEZJWE1FOiBMZXQgaXQgYmUgd3JpdGFibGUgaWYgaXQgaXMgb24gYSBib3VuZGFyeSBvZgorLQkJICogX21pbm9yXyBlcmFzZSBzaXplIHRob3VnaCAqLworLQkJc2xhdmUtPm10ZC5mbGFncyAmPSB+TVREX1dSSVRFQUJMRTsKKy0JCXByaW50ayhLRVJOX1dBUk5JTkcibXRkOiBwYXJ0aXRpb24gXCIlc1wiIGRvZXNuJ3Qgc3RhcnQgb24gYW4gZXJhc2Uvd3JpdGUgYmxvY2sgYm91bmRhcnkgLS0gZm9yY2UgcmVhZC1vbmx5XG4iLAorLQkJCXBhcnQtPm5hbWUpOworKwkJc2xhdmUtPm10ZC5mbGFncyB8PSBNVERfRVJBU0VfUEFSVElBTDsKKysJCWlmICgoKHUzMilzbGF2ZS0+bXRkLnNpemUpID4gcGFyZW50LT5lcmFzZXNpemUpCisrCQkJc2xhdmUtPm10ZC5mbGFncyAmPSB+TVREX1dSSVRFQUJMRTsKKysJCWVsc2UKKysJCQlzbGF2ZS0+bXRkLmVyYXNlc2l6ZSA9IHNsYXZlLT5tdGQuc2l6ZTsKKyAJfQorIAorIAl0bXAgPSBwYXJ0X2Fic29sdXRlX29mZnNldChwYXJlbnQpICsgc2xhdmUtPm9mZnNldCArIHNsYXZlLT5tdGQuc2l6ZTsKKyAJcmVtYWluZGVyID0gZG9fZGl2KHRtcCwgd3JfYWxpZ25tZW50KTsKKyAJaWYgKChzbGF2ZS0+bXRkLmZsYWdzICYgTVREX1dSSVRFQUJMRSkgJiYgcmVtYWluZGVyKSB7CistCQlzbGF2ZS0+bXRkLmZsYWdzICY9IH5NVERfV1JJVEVBQkxFOworLQkJcHJpbnRrKEtFUk5fV0FSTklORyJtdGQ6IHBhcnRpdGlvbiBcIiVzXCIgZG9lc24ndCBlbmQgb24gYW4gZXJhc2Uvd3JpdGUgYmxvY2sgLS0gZm9yY2UgcmVhZC1vbmx5XG4iLAorLQkJCXBhcnQtPm5hbWUpOworKwkJc2xhdmUtPm10ZC5mbGFncyB8PSBNVERfRVJBU0VfUEFSVElBTDsKKysKKysJCWlmICgodTMyKXNsYXZlLT5tdGQuc2l6ZSA+IHBhcmVudC0+ZXJhc2VzaXplKQorKwkJCXNsYXZlLT5tdGQuZmxhZ3MgJj0gfk1URF9XUklURUFCTEU7CisrCQllbHNlCisrCQkJc2xhdmUtPm10ZC5lcmFzZXNpemUgPSBzbGF2ZS0+bXRkLnNpemU7CisgCX0KKyAKKyAJbXRkX3NldF9vb2JsYXlvdXQoJnNsYXZlLT5tdGQsICZwYXJ0X29vYmxheW91dF9vcHMpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDEyLW10ZC1wYXJ0aWFsX2VyYXNlYmxvY2tfdW5sb2NrLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDEyLW10ZC1wYXJ0aWFsX2VyYXNlYmxvY2tfdW5sb2NrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyM2JjMWIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC80MTItbXRkLXBhcnRpYWxfZXJhc2VibG9ja191bmxvY2sucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorRnJvbTogVGltIEhhcnZleSA8dGhhcnZleUBnYXRld29ya3MuY29tPgorU3ViamVjdDogbXRkOiBhbGxvdyBwYXJ0aWFsIGJsb2NrIHVubG9jaworCitUaGlzIGFsbG93cyBzeXN1cGdyYWRlIGZvciBkZXZpY2VzIHN1Y2ggYXMgdGhlIEdhdGV3b3JrcyBBdmlsYS9DYW1icmlhCitwcm9kdWN0IGZhbWlsaWVzIGJhc2VkIG9uIHRoZSBpeHA0eHggdXNpbmcgdGhlIHJlZGJvb3QgYm9vdGxvYWRlciB3aXRoCitjb21iaW5lZCBGSVMgZGlyZWN0b3J5IGFuZCBSZWRCb290IGNvbmZpZyBwYXJ0aXRpb25zIG9uIGxhcmdlciBGTEFTSAorZGV2aWNlcyB3aXRoIGxhcmdlciBlcmFzZWJsb2Nrcy4KKworVGhpcyBzZWNvbmQgaXRlcmF0aW9uIG9mIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIHByZXZpb3VzIGlzc3VlczoKKy0gd2hpdGVzcGFjZSBicmVha2FnZSBmaXhlZAorLSB1bmxvY2sgaW4gYWxsIHNjZW5hcmlvcworLSBzaW1wbGlmaWNhdGlvbiBhbmQgZml4IGxvZ2ljIGJ1ZworCitbam9obkBwaHJvemVuLm9yZzogdGhpcyBzaG91bGQgYmUgbW92ZWQgdG8gdGhlIGl4cDR4eCBmb2xkZXJdCisKK1NpZ25lZC1vZmYtYnk6IFRpbSBIYXJ2ZXkgPHRoYXJ2ZXlAZ2F0ZXdvcmtzLmNvbT4KKy0tLQorIGRyaXZlcnMvbXRkL210ZHBhcnQuYyB8IDExICsrKysrKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworLS0tIGEvZHJpdmVycy9tdGQvbXRkcGFydC5jCisrKysgYi9kcml2ZXJzL210ZC9tdGRwYXJ0LmMKK0BAIC0yOTMsNyArMjkzLDE2IEBAIHN0YXRpYyBpbnQgcGFydF9sb2NrKHN0cnVjdCBtdGRfaW5mbyAqbXQKKyBzdGF0aWMgaW50IHBhcnRfdW5sb2NrKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCB1aW50NjRfdCBsZW4pCisgeworIAlzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQgPSBtdGRfdG9fcGFydChtdGQpOworLQlyZXR1cm4gcGFydC0+cGFyZW50LT5fdW5sb2NrKHBhcnQtPnBhcmVudCwgb2ZzICsgcGFydC0+b2Zmc2V0LCBsZW4pOworKworKwlvZnMgKz0gcGFydC0+b2Zmc2V0OworKworKwlpZiAobXRkLT5mbGFncyAmIE1URF9FUkFTRV9QQVJUSUFMKSB7CisrCQkvKiByb3VuZCB1cCBsZW4gdG8gbmV4dCBlcmFzZXNpemUgYW5kIHJvdW5kIGRvd24gb2Zmc2V0IHRvIHByZXYgYmxvY2sgKi8KKysJCWxlbiA9IChtdGRfZGl2X2J5X2ViKGxlbiwgcGFydC0+cGFyZW50KSArIDEpICogcGFydC0+cGFyZW50LT5lcmFzZXNpemU7CisrCQlvZnMgJj0gfihwYXJ0LT5wYXJlbnQtPmVyYXNlc2l6ZSAtIDEpOworKwl9CisrCisrCXJldHVybiBwYXJ0LT5wYXJlbnQtPl91bmxvY2socGFydC0+cGFyZW50LCBvZnMsIGxlbik7CisgfQorIAorIHN0YXRpYyBpbnQgcGFydF9pc19sb2NrZWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIHVpbnQ2NF90IGxlbikKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQxOS1tdGQtcmVkYm9vdC1hZGQtb2ZfbWF0Y2hfdGFibGUtd2l0aC1EVC1iaW5kaW5nLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDE5LW10ZC1yZWRib290LWFkZC1vZl9tYXRjaF90YWJsZS13aXRoLURULWJpbmRpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY5MmY0OAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQxOS1tdGQtcmVkYm9vdC1hZGQtb2ZfbWF0Y2hfdGFibGUtd2l0aC1EVC1iaW5kaW5nLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK0Zyb206ID0/VVRGLTg/cT9SYWZhPUM1PTgyPTIwTWk9QzU9ODJlY2tpPz0gPHJhZmFsQG1pbGVja2kucGw+CitTdWJqZWN0OiBbUEFUQ0hdIG10ZDogcmVkYm9vdDogYWRkIG9mX21hdGNoX3RhYmxlIHdpdGggRFQgYmluZGluZworTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitUaGlzIGFsbG93cyBwYXJzaW5nIFJlZEJvb3QgY29tcGF0aWJsZSBwYXJ0aXRpb25zIGZvciBwcm9wZXJseSBkZXNjcmliZWQKK2ZsYXNoIGRldmljZSBpbiBEVC4KKworU2lnbmVkLW9mZi1ieTogUmFmYcWCIE1pxYJlY2tpIDxyYWZhbEBtaWxlY2tpLnBsPgorLS0tCisKKy0tLSBhL2RyaXZlcnMvbXRkL3BhcnNlcnMvcmVkYm9vdC5jCisrKysgYi9kcml2ZXJzL210ZC9wYXJzZXJzL3JlZGJvb3QuYworQEAgLTMwNSw2ICszMDUsNyBAQCBzdGF0aWMgaW50IHBhcnNlX3JlZGJvb3RfcGFydGl0aW9ucyhzdHJ1CisgCisgc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRkX3BhcnNlcl9yZWRib290X29mX21hdGNoX3RhYmxlW10gPSB7CisgCXsgLmNvbXBhdGlibGUgPSAicmVkYm9vdC1maXMiIH0sCisrCXsgLmNvbXBhdGlibGUgPSAiZWNvc2NlbnRyaWMscmVkYm9vdC1maXMtcGFydGl0aW9ucyIgfSwKKyAJe30sCisgfTsKKyBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtdGRfcGFyc2VyX3JlZGJvb3Rfb2ZfbWF0Y2hfdGFibGUpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDIwLW10ZC1yZWRib290X3NwYWNlLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDIwLW10ZC1yZWRib290X3NwYWNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzY2Q0ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC80MjAtbXRkLXJlZGJvb3Rfc3BhY2UucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorRnJvbTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorU3ViamVjdDogYWRkIHBhdGNoIGZvciBpbmNsdWRpbmcgdW5wYXJ0aXRpb25lZCBzcGFjZSBpbiB0aGUgcm9vdGZzIHBhcnRpdGlvbiBmb3IgcmVkYm9vdCBkZXZpY2VzIChpZiBhcHBsaWNhYmxlKQorCitbam9obkBwaHJvemVuLm9yZzogdXNlZCBieSBpeHAgYW5kIG90aGVyc10KKworbGVkZS1jb21taXQ6IDM5NDkxODg1MWY4NGU0ZDAwZmExNmViOTAwZTc3MDBlOTUwOTFmMDAKK1NpZ25lZC1vZmYtYnk6IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KKy0tLQorIGRyaXZlcnMvbXRkL3JlZGJvb3QuYyB8IDE5ICsrKysrKysrKysrKystLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9tdGQvcGFyc2Vycy9yZWRib290LmMKKysrKyBiL2RyaXZlcnMvbXRkL3BhcnNlcnMvcmVkYm9vdC5jCitAQCAtMjc5LDE0ICsyNzksMjEgQEAgc3RhdGljIGludCBwYXJzZV9yZWRib290X3BhcnRpdGlvbnMoc3RydQorICNlbmRpZgorIAkJbmFtZXMgKz0gc3RybGVuKG5hbWVzKSsxOworIAorLSNpZmRlZiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQKKyAJCWlmKGZsLT5uZXh0ICYmIGZsLT5pbWctPmZsYXNoX2Jhc2UgKyBmbC0+aW1nLT5zaXplICsgbWFzdGVyLT5lcmFzZXNpemUgPD0gZmwtPm5leHQtPmltZy0+Zmxhc2hfYmFzZSkgeworLQkJCWkrKzsKKy0JCQlwYXJ0c1tpXS5vZmZzZXQgPSBwYXJ0c1tpLTFdLnNpemUgKyBwYXJ0c1tpLTFdLm9mZnNldDsKKy0JCQlwYXJ0c1tpXS5zaXplID0gZmwtPm5leHQtPmltZy0+Zmxhc2hfYmFzZSAtIHBhcnRzW2ldLm9mZnNldDsKKy0JCQlwYXJ0c1tpXS5uYW1lID0gbnVsbG5hbWU7CistCQl9CisrCQkJaWYgKCFzdHJjbXAocGFydHNbaV0ubmFtZSwgInJvb3RmcyIpKSB7CisrCQkJCXBhcnRzW2ldLnNpemUgPSBmbC0+bmV4dC0+aW1nLT5mbGFzaF9iYXNlOworKwkJCQlwYXJ0c1tpXS5zaXplICY9IH4obWFzdGVyLT5lcmFzZXNpemUgLSAxKTsKKysJCQkJcGFydHNbaV0uc2l6ZSAtPSBwYXJ0c1tpXS5vZmZzZXQ7CisrI2lmZGVmIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFMTE9DQVRFRAorKwkJCQlucnBhcnRzLS07CisrCQkJfSBlbHNlIHsKKysJCQkJaSsrOworKwkJCQlwYXJ0c1tpXS5vZmZzZXQgPSBwYXJ0c1tpLTFdLnNpemUgKyBwYXJ0c1tpLTFdLm9mZnNldDsKKysJCQkJcGFydHNbaV0uc2l6ZSA9IGZsLT5uZXh0LT5pbWctPmZsYXNoX2Jhc2UgLSBwYXJ0c1tpXS5vZmZzZXQ7CisrCQkJCXBhcnRzW2ldLm5hbWUgPSBudWxsbmFtZTsKKyAjZW5kaWYKKysJCQl9CisrCQl9CisgCQl0bXBfZmwgPSBmbDsKKyAJCWZsID0gZmwtPm5leHQ7CisgCQlrZnJlZSh0bXBfZmwpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDMwLW10ZC1hZGQtbXlsb2FkZXItcGFydGl0aW9uLXBhcnNlci5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQzMC1tdGQtYWRkLW15bG9hZGVyLXBhcnRpdGlvbi1wYXJzZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMxOWVkOQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQzMC1tdGQtYWRkLW15bG9hZGVyLXBhcnRpdGlvbi1wYXJzZXIucGF0Y2gKQEAgLTAsMCArMSwyMjkgQEAKK0Zyb206IEZsb3JpYW4gRmFpbmVsbGkgPGYuZmFpbmVsbGlAZ21haWwuY29tPgorU3ViamVjdDogQWRkIG15bG9hZGVyIHBhcnRpdGlvbiB0YWJsZSBwYXJzZXIKKworW2pvaG5AcGhvemVuLm9yZzogc2hvdWQgYmUgdXBzdHJlYW1hYmxlXQorCitsZWRlLWNvbW1pdDogZDhiZjIyODU5YjUxZmFhMDlkMjJjMDU2ZmUyMjFhNDVkMmY3YTNiOAorU2lnbmVkLW9mZi1ieTogRmxvcmlhbiBGYWluZWxsaSA8Zi5mYWluZWxsaUBnbWFpbC5jb20+CitbYWRqdXN0IGZvciBrZXJuZWwgNS40LCBhZGQgbXlsb2FkZXIuYyB0byBwYXRjaF0KK1NpZ25lZC1vZmYtYnk6IEFkcmlhbiBTY2htdXR6bGVyIDxmcmVpZnVua0BhZHJpYW5zY2htdXR6bGVyLmRlPgorCistLS0gYS9kcml2ZXJzL210ZC9wYXJzZXJzL0tjb25maWcKKysrKyBiL2RyaXZlcnMvbXRkL3BhcnNlcnMvS2NvbmZpZworQEAgLTU3LDYgKzU3LDIyIEBAIGNvbmZpZyBNVERfQ01ETElORV9QQVJUUworIAorIAkgIElmIHVuc3VyZSwgc2F5ICdOJy4KKyAKKytjb25maWcgTVREX01ZTE9BREVSX1BBUlRTCisrCXRyaXN0YXRlICJNeUxvYWRlciBwYXJ0aXRpb24gcGFyc2luZyIKKysJZGVwZW5kcyBvbiBBRE01MTIwIHx8IEFUSDI1IHx8IEFUSDc5CisrCS0tLWhlbHAtLS0KKysJICBNeUxvYWRlciBpcyBhIGJvb3Rsb2FkZXIgd2hpY2ggYWxsb3dzIHRoZSB1c2VyIHRvIGRlZmluZSBwYXJ0aXRpb25zCisrCSAgaW4gZmxhc2ggZGV2aWNlcywgYnkgcHV0dGluZyBhIHRhYmxlIGluIHRoZSBzZWNvbmQgZXJhc2UgYmxvY2sKKysJICBvbiB0aGUgZGV2aWNlLCBzaW1pbGFyIHRvIGEgcGFydGl0aW9uIHRhYmxlLiBUaGlzIHRhYmxlIGdpdmVzIHRoZSAKKysJICBvZmZzZXRzIGFuZCBsZW5ndGhzIG9mIHRoZSB1c2VyIGRlZmluZWQgcGFydGl0aW9ucy4KKysKKysJICBJZiB5b3UgbmVlZCBjb2RlIHdoaWNoIGNhbiBkZXRlY3QgYW5kIHBhcnNlIHRoZXNlIHRhYmxlcywgYW5kCisrCSAgcmVnaXN0ZXIgTVREICdwYXJ0aXRpb25zJyBjb3JyZXNwb25kaW5nIHRvIGVhY2ggaW1hZ2UgZGV0ZWN0ZWQsCisrCSAgZW5hYmxlIHRoaXMgb3B0aW9uLgorKworKwkgIFlvdSB3aWxsIHN0aWxsIG5lZWQgdGhlIHBhcnNpbmcgZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCBieSB0aGUgZHJpdmVyCisrCSAgZm9yIHlvdXIgcGFydGljdWxhciBkZXZpY2UuIEl0IHdvbid0IGhhcHBlbiBhdXRvbWF0aWNhbGx5LgorKworIGNvbmZpZyBNVERfT0ZfUEFSVFMKKyAJdHJpc3RhdGUgIk9wZW5GaXJtd2FyZSAoZGV2aWNlIHRyZWUpIHBhcnRpdGlvbmluZyBwYXJzZXIiCisgCWRlZmF1bHQgeQorLS0tIGEvZHJpdmVycy9tdGQvcGFyc2Vycy9NYWtlZmlsZQorKysrIGIvZHJpdmVycy9tdGQvcGFyc2Vycy9NYWtlZmlsZQorQEAgLTMsNiArMyw3IEBAIG9iai0kKENPTkZJR19NVERfQVI3X1BBUlRTKQkJKz0gYXI3cGFydC4KKyBvYmotJChDT05GSUdfTVREX0JDTTQ3WFhfUEFSVFMpCQkrPSBiY200N3h4cGFydC5vCisgb2JqLSQoQ09ORklHX01URF9CQ002M1hYX1BBUlRTKQkJKz0gYmNtNjN4eHBhcnQubworIG9iai0kKENPTkZJR19NVERfQ01ETElORV9QQVJUUykJCSs9IGNtZGxpbmVwYXJ0Lm8KKytvYmotJChDT05GSUdfTVREX01ZTE9BREVSX1BBUlRTKQkJKz0gbXlsb2FkZXIubworIG9iai0kKENPTkZJR19NVERfT0ZfUEFSVFMpCQkrPSBvZnBhcnQubworIG9mcGFydC15CQkJCSs9IG9mcGFydF9jb3JlLm8KKyBvZnBhcnQtJChDT05GSUdfTVREX09GX1BBUlRTX0JDTTQ5MDgpCSs9IG9mcGFydF9iY200OTA4Lm8KKy0tLSAvZGV2L251bGwKKysrKyBiL2RyaXZlcnMvbXRkL3BhcnNlcnMvbXlsb2FkZXIuYworQEAgLTAsMCArMSwxODEgQEAKKysvKgorKyAqICBQYXJzZSBNeUxvYWRlci1zdHlsZSBmbGFzaCBwYXJ0aXRpb24gdGFibGVzIGFuZCBwcm9kdWNlIGEgTGludXggcGFydGl0aW9uCisrICogIGFycmF5IHRvIG1hdGNoLgorKyAqCisrICogIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IEdhYm9yIEp1aG9zIDxqdWhvc2dAb3BlbndydC5vcmc+CisrICoKKysgKiAgVGhpcyBmaWxlIHdhcyBiYXNlZCBvbiBkcml2ZXJzL210ZC9yZWRib290LmMKKysgKiAgQXV0aG9yOiBSZWQgSGF0LCBJbmMuIC0gRGF2aWQgV29vZGhvdXNlIDxkd213MkBjYW1icmlkZ2UucmVkaGF0LmNvbT4KKysgKgorKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKysgKiAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKysgKi8KKysKKysjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisrI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisrI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKysjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisrI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKysjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKysjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaD4KKysjaW5jbHVkZSA8bGludXgvbXlsb2FkZXIuaD4KKysKKysjZGVmaW5lIEJMT0NLX0xFTl9NSU4JCTB4MTAwMDAKKysjZGVmaW5lIFBBUlRfTkFNRV9MRU4JCTMyCisrCisrc3RydWN0IHBhcnRfZGF0YSB7CisrCXN0cnVjdCBteWxvX3BhcnRpdGlvbl90YWJsZQl0YWI7CisrCWNoYXIgbmFtZXNbTVlMT19NQVhfUEFSVElUSU9OU11bUEFSVF9OQU1FX0xFTl07CisrfTsKKysKKytzdGF0aWMgaW50IG15bG9hZGVyX3BhcnNlX3BhcnRpdGlvbnMoc3RydWN0IG10ZF9pbmZvICptYXN0ZXIsCisrCQkJCSAgICAgY29uc3Qgc3RydWN0IG10ZF9wYXJ0aXRpb24gKipwcGFydHMsCisrCQkJCSAgICAgc3RydWN0IG10ZF9wYXJ0X3BhcnNlcl9kYXRhICpkYXRhKQorK3sKKysJc3RydWN0IHBhcnRfZGF0YSAqYnVmOworKwlzdHJ1Y3QgbXlsb19wYXJ0aXRpb25fdGFibGUgKnRhYjsKKysJc3RydWN0IG15bG9fcGFydGl0aW9uICpwYXJ0OworKwlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqbXRkX3BhcnRzOworKwlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqbXRkX3BhcnQ7CisrCWludCBudW1fcGFydHM7CisrCWludCByZXQsIGk7CisrCXNpemVfdCByZXRsZW47CisrCWNoYXIgKm5hbWVzOworKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKKysJdW5zaWduZWQgbG9uZyBibG9ja2xlbjsKKysKKysJYnVmID0gdm1hbGxvYyhzaXplb2YoKmJ1ZikpOworKwlpZiAoIWJ1ZikgeworKwkJcmV0dXJuIC1FTk9NRU07CisrCQlnb3RvIG91dDsKKysJfQorKwl0YWIgPSAmYnVmLT50YWI7CisrCisrCWJsb2NrbGVuID0gbWFzdGVyLT5lcmFzZXNpemU7CisrCWlmIChibG9ja2xlbiA8IEJMT0NLX0xFTl9NSU4pCisrCQlibG9ja2xlbiA9IEJMT0NLX0xFTl9NSU47CisrCisrCW9mZnNldCA9IGJsb2NrbGVuOworKworKwkvKiBGaW5kIHRoZSBwYXJ0aXRpb24gdGFibGUgKi8KKysJZm9yIChpID0gMDsgaSA8IDQ7IGkrKywgb2Zmc2V0ICs9IGJsb2NrbGVuKSB7CisrCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHNlYXJjaGluZyBmb3IgTXlMb2FkZXIgcGFydGl0aW9uIHRhYmxlIgorKwkJCQkiIGF0IG9mZnNldCAweCVseFxuIiwgbWFzdGVyLT5uYW1lLCBvZmZzZXQpOworKworKwkJcmV0ID0gbXRkX3JlYWQobWFzdGVyLCBvZmZzZXQsIHNpemVvZigqYnVmKSwgJnJldGxlbiwKKysJCQkgICAgICAgKHZvaWQgKilidWYpOworKwkJaWYgKHJldCkKKysJCQlnb3RvIG91dF9mcmVlX2J1ZjsKKysKKysJCWlmIChyZXRsZW4gIT0gc2l6ZW9mKCpidWYpKSB7CisrCQkJcmV0ID0gLUVJTzsKKysJCQlnb3RvIG91dF9mcmVlX2J1ZjsKKysJCX0KKysKKysJCS8qIENoZWNrIGZvciBQYXJ0aXRpb24gVGFibGUgbWFnaWMgbnVtYmVyICovCisrCQlpZiAodGFiLT5tYWdpYyA9PSBsZTMyX3RvX2NwdShNWUxPX01BR0lDX1BBUlRJVElPTlMpKQorKwkJCWJyZWFrOworKworKwl9CisrCisrCWlmICh0YWItPm1hZ2ljICE9IGxlMzJfdG9fY3B1KE1ZTE9fTUFHSUNfUEFSVElUSU9OUykpIHsKKysJCXByaW50ayhLRVJOX0RFQlVHICIlczogbm8gTXlMb2FkZXIgcGFydGl0aW9uIHRhYmxlIGZvdW5kXG4iLAorKwkJCW1hc3Rlci0+bmFtZSk7CisrCQlyZXQgPSAwOworKwkJZ290byBvdXRfZnJlZV9idWY7CisrCX0KKysKKysJLyogVGhlIE15TG9hZGVyIGFuZCB0aGUgUGFydGl0aW9uIFRhYmxlIGlzIGFsd2F5cyBwcmVzZW50ICovCisrCW51bV9wYXJ0cyA9IDI7CisrCisrCS8qIERldGVjdCBudW1iZXIgb2YgdXNlZCBwYXJ0aXRpb25zICovCisrCWZvciAoaSA9IDA7IGkgPCBNWUxPX01BWF9QQVJUSVRJT05TOyBpKyspIHsKKysJCXBhcnQgPSAmdGFiLT5wYXJ0aXRpb25zW2ldOworKworKwkJaWYgKGxlMTZfdG9fY3B1KHBhcnQtPnR5cGUpID09IFBBUlRJVElPTl9UWVBFX0ZSRUUpCisrCQkJY29udGludWU7CisrCisrCQludW1fcGFydHMrKzsKKysJfQorKworKwltdGRfcGFydHMgPSBremFsbG9jKChudW1fcGFydHMgKiBzaXplb2YoKm10ZF9wYXJ0KSArCisrCQkJCW51bV9wYXJ0cyAqIFBBUlRfTkFNRV9MRU4pLCBHRlBfS0VSTkVMKTsKKysKKysJaWYgKCFtdGRfcGFydHMpIHsKKysJCXJldCA9IC1FTk9NRU07CisrCQlnb3RvIG91dF9mcmVlX2J1ZjsKKysJfQorKworKwltdGRfcGFydCA9IG10ZF9wYXJ0czsKKysJbmFtZXMgPSAoY2hhciAqKSZtdGRfcGFydHNbbnVtX3BhcnRzXTsKKysKKysJc3RybmNweShuYW1lcywgIm15bG9hZGVyIiwgUEFSVF9OQU1FX0xFTik7CisrCW10ZF9wYXJ0LT5uYW1lID0gbmFtZXM7CisrCW10ZF9wYXJ0LT5vZmZzZXQgPSAwOworKwltdGRfcGFydC0+c2l6ZSA9IG9mZnNldDsKKysJbXRkX3BhcnQtPm1hc2tfZmxhZ3MgPSBNVERfV1JJVEVBQkxFOworKwltdGRfcGFydCsrOworKwluYW1lcyArPSBQQVJUX05BTUVfTEVOOworKworKwlzdHJuY3B5KG5hbWVzLCAicGFydGl0aW9uX3RhYmxlIiwgUEFSVF9OQU1FX0xFTik7CisrCW10ZF9wYXJ0LT5uYW1lID0gbmFtZXM7CisrCW10ZF9wYXJ0LT5vZmZzZXQgPSBvZmZzZXQ7CisrCW10ZF9wYXJ0LT5zaXplID0gYmxvY2tsZW47CisrCW10ZF9wYXJ0LT5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRTsKKysJbXRkX3BhcnQrKzsKKysJbmFtZXMgKz0gUEFSVF9OQU1FX0xFTjsKKysKKysJZm9yIChpID0gMDsgaSA8IE1ZTE9fTUFYX1BBUlRJVElPTlM7IGkrKykgeworKwkJcGFydCA9ICZ0YWItPnBhcnRpdGlvbnNbaV07CisrCisrCQlpZiAobGUxNl90b19jcHUocGFydC0+dHlwZSkgPT0gUEFSVElUSU9OX1RZUEVfRlJFRSkKKysJCQljb250aW51ZTsKKysKKysJCWlmICgoYnVmLT5uYW1lc1tpXVswXSkgJiYgKGJ1Zi0+bmFtZXNbaV1bMF0gIT0gJ1x4ZmYnKSkKKysJCQlzdHJuY3B5KG5hbWVzLCBidWYtPm5hbWVzW2ldLCBQQVJUX05BTUVfTEVOKTsKKysJCWVsc2UKKysJCQlzbnByaW50ZihuYW1lcywgUEFSVF9OQU1FX0xFTiwgInBhcnRpdGlvbiVkIiwgaSk7CisrCisrCQltdGRfcGFydC0+b2Zmc2V0ID0gbGUzMl90b19jcHUocGFydC0+YWRkcik7CisrCQltdGRfcGFydC0+c2l6ZSA9IGxlMzJfdG9fY3B1KHBhcnQtPnNpemUpOworKwkJbXRkX3BhcnQtPm5hbWUgPSBuYW1lczsKKysJCW10ZF9wYXJ0Kys7CisrCQluYW1lcyArPSBQQVJUX05BTUVfTEVOOworKwl9CisrCisrCSpwcGFydHMgPSBtdGRfcGFydHM7CisrCXJldCA9IG51bV9wYXJ0czsKKysKKysgb3V0X2ZyZWVfYnVmOgorKwl2ZnJlZShidWYpOworKyBvdXQ6CisrCXJldHVybiByZXQ7CisrfQorKworK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRfcGFyc2VyIG15bG9hZGVyX210ZF9wYXJzZXIgPSB7CisrCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKysJLnBhcnNlX2ZuCT0gbXlsb2FkZXJfcGFyc2VfcGFydGl0aW9ucywKKysJLm5hbWUJCT0gIk15TG9hZGVyIiwKKyt9OworKworK3N0YXRpYyBpbnQgX19pbml0IG15bG9hZGVyX210ZF9wYXJzZXJfaW5pdCh2b2lkKQorK3sKKysJcmVnaXN0ZXJfbXRkX3BhcnNlcigmbXlsb2FkZXJfbXRkX3BhcnNlcik7CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgdm9pZCBfX2V4aXQgbXlsb2FkZXJfbXRkX3BhcnNlcl9leGl0KHZvaWQpCisreworKwlkZXJlZ2lzdGVyX210ZF9wYXJzZXIoJm15bG9hZGVyX210ZF9wYXJzZXIpOworK30KKysKKyttb2R1bGVfaW5pdChteWxvYWRlcl9tdGRfcGFyc2VyX2luaXQpOworK21vZHVsZV9leGl0KG15bG9hZGVyX210ZF9wYXJzZXJfZXhpdCk7CisrCisrTU9EVUxFX0FVVEhPUigiR2Fib3IgSnVob3MgPGp1aG9zZ0BvcGVud3J0Lm9yZz4iKTsKKytNT0RVTEVfREVTQ1JJUFRJT04oIlBhcnNpbmcgY29kZSBmb3IgTXlMb2FkZXIgcGFydGl0aW9uIHRhYmxlcyIpOworK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQzMS1tdGQtYmNtNDd4eHBhcnQtY2hlY2stZm9yLWJhZC1ibG9ja3Mtd2hlbi1jYWxjdWxhdGluLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDMxLW10ZC1iY200N3h4cGFydC1jaGVjay1mb3ItYmFkLWJsb2Nrcy13aGVuLWNhbGN1bGF0aW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVhNTljZAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQzMS1tdGQtYmNtNDd4eHBhcnQtY2hlY2stZm9yLWJhZC1ibG9ja3Mtd2hlbi1jYWxjdWxhdGluLnBhdGNoCkBAIC0wLDAgKzEsNjggQEAKK0Zyb206ID0/VVRGLTg/cT9SYWZhPUM1PTgyPTIwTWk9QzU9ODJlY2tpPz0gPHphamVjNUBnbWFpbC5jb20+CitTdWJqZWN0OiBbUEFUQ0hdIG10ZDogYmNtNDd4eHBhcnQ6IGNoZWNrIGZvciBiYWQgYmxvY2tzIHdoZW4gY2FsY3VsYXRpbmcgb2Zmc2V0cworCitTaWduZWQtb2ZmLWJ5OiBSYWZhxYIgTWnFgmVja2kgPHphamVjNUBnbWFpbC5jb20+CistLS0KKworLS0tIGEvZHJpdmVycy9tdGQvcGFyc2Vycy9wYXJzZXJfdHJ4LmMKKysrKyBiL2RyaXZlcnMvbXRkL3BhcnNlcnMvcGFyc2VyX3RyeC5jCitAQCAtMjUsNiArMjUsMzMgQEAgc3RydWN0IHRyeF9oZWFkZXIgeworIAl1aW50MzJfdCBvZmZzZXRbM107CisgfSBfX3BhY2tlZDsKKyAKKysvKgorKyAqIENhbGN1bGF0ZSByZWFsIGVuZCBvZmZzZXQgKGFkZHJlc3MpIGZvciBhIGdpdmVuIGFtb3VudCBvZiBkYXRhLiBJdCBjaGVja3MKKysgKiBhbGwgYmxvY2tzIHNraXBwaW5nIGJhZCBvbmVzLgorKyAqLworK3N0YXRpYyBzaXplX3QgcGFyc2VyX3RyeF9yZWFsX29mZnNldChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc2l6ZV90IGJ5dGVzKQorK3sKKysJc2l6ZV90IHJlYWxfb2Zmc2V0ID0gMDsKKysKKysJaWYgKG10ZF9ibG9ja19pc2JhZChtdGQsIHJlYWxfb2Zmc2V0KSkKKysJCXByX3dhcm4oIkJhc2Ugb2Zmc2V0IHNob3VsZG4ndCBiZSBhdCBiYWQgYmxvY2siKTsKKysKKysJd2hpbGUgKGJ5dGVzID49IG10ZC0+ZXJhc2VzaXplKSB7CisrCQlieXRlcyAtPSBtdGQtPmVyYXNlc2l6ZTsKKysJCXJlYWxfb2Zmc2V0ICs9IG10ZC0+ZXJhc2VzaXplOworKwkJd2hpbGUgKG10ZF9ibG9ja19pc2JhZChtdGQsIHJlYWxfb2Zmc2V0KSkgeworKwkJCXJlYWxfb2Zmc2V0ICs9IG10ZC0+ZXJhc2VzaXplOworKworKwkJCWlmIChyZWFsX29mZnNldCA+PSBtdGQtPnNpemUpCisrCQkJCXJldHVybiByZWFsX29mZnNldCAtIG10ZC0+ZXJhc2VzaXplOworKwkJfQorKwl9CisrCisrCXJlYWxfb2Zmc2V0ICs9IGJ5dGVzOworKworKwlyZXR1cm4gcmVhbF9vZmZzZXQ7CisrfQorKworIHN0YXRpYyBjb25zdCBjaGFyICpwYXJzZXJfdHJ4X2RhdGFfcGFydF9uYW1lKHN0cnVjdCBtdGRfaW5mbyAqbWFzdGVyLAorIAkJCQkJICAgICBzaXplX3Qgb2Zmc2V0KQorIHsKK0BAIC03OSwyMSArMTA2LDIxIEBAIHN0YXRpYyBpbnQgcGFyc2VyX3RyeF9wYXJzZShzdHJ1Y3QgbXRkX2kKKyAJaWYgKHRyeC5vZmZzZXRbMl0pIHsKKyAJCXBhcnQgPSAmcGFydHNbY3Vycl9wYXJ0KytdOworIAkJcGFydC0+bmFtZSA9ICJsb2FkZXIiOworLQkJcGFydC0+b2Zmc2V0ID0gdHJ4Lm9mZnNldFtpXTsKKysJCXBhcnQtPm9mZnNldCA9IHBhcnNlcl90cnhfcmVhbF9vZmZzZXQobXRkLCB0cngub2Zmc2V0W2ldKTsKKyAJCWkrKzsKKyAJfQorIAorIAlpZiAodHJ4Lm9mZnNldFtpXSkgeworIAkJcGFydCA9ICZwYXJ0c1tjdXJyX3BhcnQrK107CisgCQlwYXJ0LT5uYW1lID0gImxpbnV4IjsKKy0JCXBhcnQtPm9mZnNldCA9IHRyeC5vZmZzZXRbaV07CisrCQlwYXJ0LT5vZmZzZXQgPSBwYXJzZXJfdHJ4X3JlYWxfb2Zmc2V0KG10ZCwgdHJ4Lm9mZnNldFtpXSk7CisgCQlpKys7CisgCX0KKyAKKyAJaWYgKHRyeC5vZmZzZXRbaV0pIHsKKyAJCXBhcnQgPSAmcGFydHNbY3Vycl9wYXJ0KytdOworLQkJcGFydC0+bmFtZSA9IHBhcnNlcl90cnhfZGF0YV9wYXJ0X25hbWUobXRkLCB0cngub2Zmc2V0W2ldKTsKKy0JCXBhcnQtPm9mZnNldCA9IHRyeC5vZmZzZXRbaV07CisrCQlwYXJ0LT5vZmZzZXQgPSBwYXJzZXJfdHJ4X3JlYWxfb2Zmc2V0KG10ZCwgdHJ4Lm9mZnNldFtpXSk7CisrCQlwYXJ0LT5uYW1lID0gcGFyc2VyX3RyeF9kYXRhX3BhcnRfbmFtZShtdGQsIHBhcnQtPm9mZnNldCk7CisgCQlpKys7CisgCX0KKyAKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQzMi1tdGQtYmNtNDd4eHBhcnQtZGV0ZWN0LVRfTWV0ZXItcGFydGl0aW9uLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDMyLW10ZC1iY200N3h4cGFydC1kZXRlY3QtVF9NZXRlci1wYXJ0aXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUyNjU0ZAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQzMi1tdGQtYmNtNDd4eHBhcnQtZGV0ZWN0LVRfTWV0ZXItcGFydGl0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK0Zyb206ID0/VVRGLTg/cT9SYWZhPUM1PTgyPTIwTWk9QzU9ODJlY2tpPz0gPHphamVjNUBnbWFpbC5jb20+CitTdWJqZWN0OiBtdGQ6IGJjbTQ3eHhwYXJ0OiBkZXRlY3QgVF9NZXRlciBwYXJ0aXRpb24KKworSXQgY2FuIGJlIGZvdW5kIG9uIG1hbnkgTmV0Z2VhciBkZXZpY2VzLiBJdCBjb25zaXN0cyBvZiBtYW55IDB4MzAgYmxvY2tzCitzdGFydGluZyB3aXRoIDREIDU0LgorCitTaWduZWQtb2ZmLWJ5OiBSYWZhxYIgTWnFgmVja2kgPHphamVjNUBnbWFpbC5jb20+CistLS0KKyBkcml2ZXJzL210ZC9iY200N3h4cGFydC5jIHwgMTAgKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspCisKKy0tLSBhL2RyaXZlcnMvbXRkL3BhcnNlcnMvYmNtNDd4eHBhcnQuYworKysrIGIvZHJpdmVycy9tdGQvcGFyc2Vycy9iY200N3h4cGFydC5jCitAQCAtMzUsNiArMzUsNyBAQAorICNkZWZpbmUgTlZSQU1fSEVBREVSCQkJMHg0ODUzNEM0NgkvKiBGTFNIICovCisgI2RlZmluZSBQT1RfTUFHSUMxCQkJMHg1NDU0NGY1MAkvKiBQT1RUICovCisgI2RlZmluZSBQT1RfTUFHSUMyCQkJMHg1MDRmCQkvKiBPUCAqLworKyNkZWZpbmUgVF9NRVRFUl9NQUdJQwkJCTB4NEQ1NDAwMDAJLyogTVQgKi8KKyAjZGVmaW5lIE1MX01BR0lDMQkJCTB4Mzk2ODVhNDIKKyAjZGVmaW5lIE1MX01BR0lDMgkJCTB4MjY1OTQxMzEKKyAjZGVmaW5lIFRSWF9NQUdJQwkJCTB4MzA1MjQ0NDgKK0BAIC0xNzgsNiArMTc5LDE1IEBAIHN0YXRpYyBpbnQgYmNtNDd4eHBhcnRfcGFyc2Uoc3RydWN0IG10ZF8KKyAJCQkJCSAgICAgTVREX1dSSVRFQUJMRSk7CisgCQkJY29udGludWU7CisgCQl9CisrCisrCQkvKiBUX01ldGVyICovCisrCQlpZiAoKGxlMzJfdG9fY3B1KGJ1ZlsweDAwMCAvIDRdKSAmIDB4RkZGRjAwMDApID09IFRfTUVURVJfTUFHSUMgJiYKKysJCSAgICAobGUzMl90b19jcHUoYnVmWzB4MDMwIC8gNF0pICYgMHhGRkZGMDAwMCkgPT0gVF9NRVRFUl9NQUdJQyAmJgorKwkJICAgIChsZTMyX3RvX2NwdShidWZbMHgwNjAgLyA0XSkgJiAweEZGRkYwMDAwKSA9PSBUX01FVEVSX01BR0lDKSB7CisrCQkJYmNtNDd4eHBhcnRfYWRkX3BhcnQoJnBhcnRzW2N1cnJfcGFydCsrXSwgIlRfTWV0ZXIiLCBvZmZzZXQsCisrCQkJCQkgICAgIE1URF9XUklURUFCTEUpOworKwkJCWNvbnRpbnVlOworKwkJfQorIAorIAkJLyogVFJYICovCisgCQlpZiAoYnVmWzB4MDAwIC8gNF0gPT0gVFJYX01BR0lDKSB7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC80MzUtbXRkLWFkZC1yb3V0ZXJib290cGFydC1wYXJzZXItY29uZmlnLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDM1LW10ZC1hZGQtcm91dGVyYm9vdHBhcnQtcGFyc2VyLWNvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjFlMDlhCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDM1LW10ZC1hZGQtcm91dGVyYm9vdHBhcnQtcGFyc2VyLWNvbmZpZy5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIDQ0MzdlMDFmYjZiY2E2M2ZjY2RiYTVkNmM0NDg4OGIwOTM1ODg1YzIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/VGhpYmF1dD0yMFZBUj1DMz04OE5FPz0gPGhhY2tzQHNsYXNoZGlydC5vcmc+CitEYXRlOiBUdWUsIDI0IE1hciAyMDIwIDExOjQ1OjA3ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGdlbmVyaWM6IHJvdXRlcmJvb3QgcGFydGl0aW9uIGJ1aWxkIGJpdHMgKDUuNCkKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworVGhpcyBwYXRjaCBhZGRzIHJvdXRlcmJvb3RwYXJ0IGtlcm5lbCBidWlsZCBiaXRzCisKK1NpZ25lZC1vZmYtYnk6IFRoaWJhdXQgVkFSw4hORSA8aGFja3NAc2xhc2hkaXJ0Lm9yZz4KKy0tLQorIGRyaXZlcnMvbXRkL3BhcnNlcnMvS2NvbmZpZyAgfCA5ICsrKysrKysrKworIGRyaXZlcnMvbXRkL3BhcnNlcnMvTWFrZWZpbGUgfCAxICsKKyAyIGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKykKKworLS0tIGEvZHJpdmVycy9tdGQvcGFyc2Vycy9LY29uZmlnCisrKysgYi9kcml2ZXJzL210ZC9wYXJzZXJzL0tjb25maWcKK0BAIC0xOTUsMyArMTk1LDEyIEBAIGNvbmZpZyBNVERfUkVEQk9PVF9QQVJUU19SRUFET05MWQorIAkgICdGSVMgZGlyZWN0b3J5JyBpbWFnZXMsIGVuYWJsZSB0aGlzIG9wdGlvbi4KKyAKKyBlbmRpZiAjIE1URF9SRURCT09UX1BBUlRTCisrCisrY29uZmlnIE1URF9ST1VURVJCT09UX1BBUlRTCisrCXRyaXN0YXRlICJSb3V0ZXJCb290IGZsYXNoIHBhcnRpdGlvbiBwYXJzZXIiCisrCWRlcGVuZHMgb24gTVREICYmIE9GCisrCWhlbHAKKysJIE1pa3JvVGlrIFJvdXRlckJvb3QgaXMgaW1wbGVtZW50ZWQgYXMgYSBtdWx0aSBzZWdtZW50IHN5c3RlbSBvbiB0aGUKKysJIGZsYXNoLCBzb21lIG9mIHdoaWNoIGFyZSBmaXhlZCBhbmQgc29tZSBvZiB3aGljaCBhcmUgbG9jYXRlZCBhdAorKwkgdmFyaWFibGUgb2Zmc2V0cy4gVGhpcyBwYXJzZXIgaGFuZGxlcyBib3RoIGNhc2VzIHZpYSBwcm9wZXJseQorKwkgZm9ybWF0dGVkIERUUy4KKy0tLSBhL2RyaXZlcnMvbXRkL3BhcnNlcnMvTWFrZWZpbGUKKysrKyBiL2RyaXZlcnMvbXRkL3BhcnNlcnMvTWFrZWZpbGUKK0BAIC0xMywzICsxMyw0IEBAIG9iai0kKENPTkZJR19NVERfQUZTX1BBUlRTKQkJKz0gYWZzLm8KKyBvYmotJChDT05GSUdfTVREX1BBUlNFUl9UUlgpCQkrPSBwYXJzZXJfdHJ4Lm8KKyBvYmotJChDT05GSUdfTVREX1NIQVJQU0xfUEFSVFMpCQkrPSBzaGFycHNscGFydC5vCisgb2JqLSQoQ09ORklHX01URF9SRURCT09UX1BBUlRTKQkJKz0gcmVkYm9vdC5vCisrb2JqLSQoQ09ORklHX01URF9ST1VURVJCT09UX1BBUlRTKQkJKz0gcm91dGVyYm9vdHBhcnQubwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDQ3LW10ZC1zcGluYW5kLWdpZ2FkZXZpY2UtQWRkLXN1cHBvcnQtZm9yLUdENUY0R1E0eEMucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC80NDctbXRkLXNwaW5hbmQtZ2lnYWRldmljZS1BZGQtc3VwcG9ydC1mb3ItR0Q1RjRHUTR4Qy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWZjYjE1Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDQ3LW10ZC1zcGluYW5kLWdpZ2FkZXZpY2UtQWRkLXN1cHBvcnQtZm9yLUdENUY0R1E0eEMucGF0Y2gKQEAgLTAsMCArMSw4NyBAQAorRnJvbSAzMDUyMWNjZmI0NTk3ZjkxYjllNWM3OTY3YWNlZjljN2M4NWU1OGE4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSGF1a2UgTWVocnRlbnMgPGhhdWtlQGhhdWtlLW0uZGU+CitEYXRlOiBXZWQsIDEyIEF1ZyAyMDIwIDIyOjUwOjI2ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggdjIgNDQ3LzQ0N10gbXRkOiBzcGluYW5kOiBnaWdhZGV2aWNlOiBBZGQgc3VwcG9ydCBmb3IKKyBHRDVGNEdRNHhDCisKK1RoaXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgZm9sbG93aW5nIDRHaUIgY2hpcHM6CitHRDVGNEdRNFJDWUlHIDEuOFYKK0dENUY0R1E0VUNZSUcgMy4zVgorCitUaGUgZGF0YXNoZWV0IGNhbiBiZSBmb3VuZCBoZXJlOgoraHR0cHM6Ly93d3cubm92aXRyb25pYy5jaC9zaXhjbXMvbWVkaWEucGhwLzIvRFMtMDAxNzMtR0Q1RjRHUTR4Q3hJRy1SZXYxLjU3NDY5NS5wZGYKKworVGhlIEdENUY0R1E0VUNZSUdUICgzLjNWKSB2ZXJzaW9uIGlzIHVzZWQgb24gdGhlIEltYWdpbmF0aW9uCitUZWNobm9sb2dpZXMgQ3JlYXRvciBDaTQwIChNYXJkdWspLCB0aGUgMS44ViB2ZXJzaW9uIHdhcyBub3QgdGVzdGVkLgorCitUaGlzIGRldmljZSBvbmx5IHdvcmtzIGluIHNpbmdsZSBTUEkgbW9kZSBhbmQgbm90IGluIGR1YWwgb3IgcXVhZCBtb2RlCitmb3IgbWUgb24gdGhpcyBib2FyZC4KKworU2lnbmVkLW9mZi1ieTogSGF1a2UgTWVocnRlbnMgPGhhdWtlQGhhdWtlLW0uZGU+CistLS0KKyBkcml2ZXJzL210ZC9uYW5kL3NwaS9naWdhZGV2aWNlLmMgfCA0OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDQ5IGluc2VydGlvbnMoKykKKworLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9zcGkvZ2lnYWRldmljZS5jCisrKysgYi9kcml2ZXJzL210ZC9uYW5kL3NwaS9naWdhZGV2aWNlLmMKK0BAIC0xMzIsNiArMTMyLDM1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbXRkX29vYmxheW91dF9vcHMgZ2QKKyAJLmZyZWUgPSBnZDVmeGdxNF92YXJpYW50Ml9vb2JsYXlvdXRfZnJlZSwKKyB9OworIAorK3N0YXRpYyBpbnQgZ2Q1ZnhncTR4Y19vb2JsYXlvdXRfMjU2X2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHNlY3Rpb24sCisrCQkJCQlzdHJ1Y3QgbXRkX29vYl9yZWdpb24gKm9vYnJlZ2lvbikKKyt7CisrCWlmIChzZWN0aW9uKQorKwkJcmV0dXJuIC1FUkFOR0U7CisrCisrCW9vYnJlZ2lvbi0+b2Zmc2V0ID0gMTI4OworKwlvb2JyZWdpb24tPmxlbmd0aCA9IDEyODsKKysKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQgZ2Q1ZnhncTR4Y19vb2JsYXlvdXRfMjU2X2ZyZWUoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBzZWN0aW9uLAorKwkJCQkJIHN0cnVjdCBtdGRfb29iX3JlZ2lvbiAqb29icmVnaW9uKQorK3sKKysJaWYgKHNlY3Rpb24pCisrCQlyZXR1cm4gLUVSQU5HRTsKKysKKysJb29icmVnaW9uLT5vZmZzZXQgPSAxOworKwlvb2JyZWdpb24tPmxlbmd0aCA9IDEyNzsKKysKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRkX29vYmxheW91dF9vcHMgZ2Q1ZnhncTR4Y19vb2JfMjU2X29wcyA9IHsKKysJLmVjYyA9IGdkNWZ4Z3E0eGNfb29ibGF5b3V0XzI1Nl9lY2MsCisrCS5mcmVlID0gZ2Q1ZnhncTR4Y19vb2JsYXlvdXRfMjU2X2ZyZWUsCisrfTsKKysKKyBzdGF0aWMgaW50IGdkNWZ4Z3E0dWV4eGdfZWNjX2dldF9zdGF0dXMoc3RydWN0IHNwaW5hbmRfZGV2aWNlICpzcGluYW5kLAorIAkJCQkJdTggc3RhdHVzKQorIHsKK0BAIC0yMjIsNiArMjUxLDI0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpbmFuZF9pbmZvIGdpZ2FkZXYKKyAJCSAgICAgU1BJTkFORF9IQVNfUUVfQklULAorIAkJICAgICBTUElOQU5EX0VDQ0lORk8oJmdkNWZ4Z3E0eGFfb29ibGF5b3V0LAorIAkJCQkgICAgIGdkNWZ4Z3E0eGFfZWNjX2dldF9zdGF0dXMpKSwKKysJU1BJTkFORF9JTkZPKCJHRDVGNEdRNFJDIiwgMHhhNDY4LAorKwkJICAgICBOQU5EX01FTU9SRygxLCA0MDk2LCAyNTYsIDY0LCAyMDQ4LCA0MCwgMSwgMSwgMSksCisrCQkgICAgIE5BTkRfRUNDUkVRKDgsIDUxMiksCisrCQkgICAgIFNQSU5BTkRfSU5GT19PUF9WQVJJQU5UUygmcmVhZF9jYWNoZV92YXJpYW50c19mLAorKwkJCQkJICAgICAgJndyaXRlX2NhY2hlX3ZhcmlhbnRzLAorKwkJCQkJICAgICAgJnVwZGF0ZV9jYWNoZV92YXJpYW50cyksCisrCQkgICAgIFNQSU5BTkRfSEFTX1FFX0JJVCwKKysJCSAgICAgU1BJTkFORF9FQ0NJTkZPKCZnZDVmeGdxNHhjX29vYl8yNTZfb3BzLAorKwkJCQkgICAgIGdkNWZ4Z3E0dWZ4eGdfZWNjX2dldF9zdGF0dXMpKSwKKysJU1BJTkFORF9JTkZPKCJHRDVGNEdRNFVDIiwgMHhiNDY4LAorKwkJICAgICBOQU5EX01FTU9SRygxLCA0MDk2LCAyNTYsIDY0LCAyMDQ4LCA0MCwgMSwgMSwgMSksCisrCQkgICAgIE5BTkRfRUNDUkVRKDgsIDUxMiksCisrCQkgICAgIFNQSU5BTkRfSU5GT19PUF9WQVJJQU5UUygmcmVhZF9jYWNoZV92YXJpYW50c19mLAorKwkJCQkJICAgICAgJndyaXRlX2NhY2hlX3ZhcmlhbnRzLAorKwkJCQkJICAgICAgJnVwZGF0ZV9jYWNoZV92YXJpYW50cyksCisrCQkgICAgIFNQSU5BTkRfSEFTX1FFX0JJVCwKKysJCSAgICAgU1BJTkFORF9FQ0NJTkZPKCZnZDVmeGdxNHhjX29vYl8yNTZfb3BzLAorKwkJCQkgICAgIGdkNWZ4Z3E0dWZ4eGdfZWNjX2dldF9zdGF0dXMpKSwKKyAJU1BJTkFORF9JTkZPKCJHRDVGMUdRNFVFeHhHIiwgMHhkMSwKKyAJCSAgICAgTkFORF9NRU1PUkcoMSwgMjA0OCwgMTI4LCA2NCwgMTAyNCwgMjAsIDEsIDEsIDEpLAorIAkJICAgICBOQU5EX0VDQ1JFUSg4LCA1MTIpLApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDUwLW10ZC1zcGktbm9yLWFsbG93LU5PUi1kcml2ZXItdG8td3JpdGUtZmV3ZXItYnl0ZXMtdGgucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC80NTAtbXRkLXNwaS1ub3ItYWxsb3ctTk9SLWRyaXZlci10by13cml0ZS1mZXdlci1ieXRlcy10aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTJkN2E2Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDUwLW10ZC1zcGktbm9yLWFsbG93LU5PUi1kcml2ZXItdG8td3JpdGUtZmV3ZXItYnl0ZXMtdGgucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorRnJvbTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorRGF0ZTogVGh1LCAyMiBGZWIgMjAxOCAxMToxMTo1NyArMDEwMAorU3ViamVjdDogW1BBVENIXSBtdGQ6IHNwaS1ub3I6IGFsbG93IE5PUiBkcml2ZXIgdG8gd3JpdGUgZmV3ZXIgYnl0ZXMgdGhhbgorIHJlcXVlc3RlZAorCitUaGUgd3JpdGUgc2l6ZSBjYW4gYmUgY29uc3RyYWluZWQgYnkgdGhlIG1heGltdW0gbWVzc2FnZS90cmFuc2ZlciBzaXplCitvZiB0aGUgU1BJIGNvbnRyb2xsZXIuIE9ubHkgY2hlY2sgZm9yIHJldCA9IDAgdG8gYXZvaWQgYW4gaW5maW5pdGUgbG9vcC4KKworU2lnbmVkLW9mZi1ieTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorLS0tCisKKy0tLSBhL2RyaXZlcnMvbXRkL3NwaS1ub3Ivc3BpLW5vci5jCisrKysgYi9kcml2ZXJzL210ZC9zcGktbm9yL3NwaS1ub3IuYworQEAgLTI3MDYsNyArMjcwNiw3IEBAIHN0YXRpYyBpbnQgc3BpX25vcl93cml0ZShzdHJ1Y3QgbXRkX2luZm8KKyAKKyAJCXdyaXRlX2VuYWJsZShub3IpOworIAkJcmV0ID0gc3BpX25vcl93cml0ZV9kYXRhKG5vciwgYWRkciwgcGFnZV9yZW1haW4sIGJ1ZiArIGkpOworLQkJaWYgKHJldCA8IDApCisrCQlpZiAocmV0IDw9IDApCisgCQkJZ290byB3cml0ZV9lcnI7CisgCQl3cml0dGVuID0gcmV0OworIApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDYwLW10ZC1jZmlfY21kc2V0XzAwMDItbm8tZXJhc2Vfc3VzcGVuZC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQ2MC1tdGQtY2ZpX2NtZHNldF8wMDAyLW5vLWVyYXNlX3N1c3BlbmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU5YTYzOAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQ2MC1tdGQtY2ZpX2NtZHNldF8wMDAyLW5vLWVyYXNlX3N1c3BlbmQucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorRnJvbTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorU3ViamVjdDoga2VybmVsOiBkaXNhYmxlIGNmaSBjbWRzZXQgMDAwMiBlcmFzZSBzdXNwZW5kCisKK29uIHNvbWUgcGxhdGZvcm1zLCBlcmFzZSBzdXNwZW5kIGxlYWRzIHRvIGRhdGEgY29ycnVwdGlvbiBhbmQgbG9ja3VwcyB3aGVuIHdyaXRlCitvcHMgY29sbGlkZSB3aXRoIGVyYXNlIG9wcy4gdGhpcyBoYXMgYmVlbiBvYnNlcnZlZCBvbiB0aGUgYnVmZmFsbyB3enItaHAtZzMwMG5oLgorcmF0aGVyIHRoYW4gcGxheSB3aGFjay1hLW1vbGUgd2l0aCBhIGhhcmQgdG8gcmVwcm9kdWNlIGlzc3VlIG9uIGEgdmFyaWV0eSBvZiBkZXZpY2VzLAorc2ltcGx5IGRpc2FibGUgZXJhc2Ugc3VzcGVuZCwgYXMgaXQgd2lsbCB1c3VhbGx5IG5vdCBwcm9kdWNlIGFueSB1c2VmdWwgZ2FpbiBvbgordGhlIHNtYWxsIGZpbGVzeXN0ZW1zIHVzZWQgb24gZW1iZWRkZWQgaGFyZHdhcmUuCisKK1NpZ25lZC1vZmYtYnk6IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KKy0tLQorIGRyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCistLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDIuYworKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmMKK0BAIC05MDksNyArOTA5LDcgQEAgc3RhdGljIGludCBnZXRfY2hpcChzdHJ1Y3QgbWFwX2luZm8gKm1hcAorIAkJcmV0dXJuIDA7CisgCisgCWNhc2UgRkxfRVJBU0lORzoKKy0JCWlmICghY2ZpcCB8fCAhKGNmaXAtPkVyYXNlU3VzcGVuZCAmICgweDF8MHgyKSkgfHwKKysJCWlmICgxIC8qIG5vIHN1c3BlbmQgKi8gfHwgIWNmaXAgfHwgIShjZmlwLT5FcmFzZVN1c3BlbmQgJiAoMHgxfDB4MikpIHx8CisgCQkgICAgIShtb2RlID09IEZMX1JFQURZIHx8IG1vZGUgPT0gRkxfUE9JTlQgfHwKKyAJCSAgICAobW9kZSA9PSBGTF9XUklUSU5HICYmIChjZmlwLT5FcmFzZVN1c3BlbmQgJiAweDIpKSkpCisgCQkJZ290byBzbGVlcDsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQ2MS1tdGQtY2ZpX2NtZHNldF8wMDAyLWFkZC1idWZmZXItd3JpdGUtY21kLXRpbWVvdXQucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC80NjEtbXRkLWNmaV9jbWRzZXRfMDAwMi1hZGQtYnVmZmVyLXdyaXRlLWNtZC10aW1lb3V0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMjE5NWUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC80NjEtbXRkLWNmaV9jbWRzZXRfMDAwMi1hZGQtYnVmZmVyLXdyaXRlLWNtZC10aW1lb3V0LnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK0Zyb206IEdlb3JnZSBLYXNocGVya28gPGdlb3JnZUB6bmF1LmVkdS51YT4KK1N1YmplY3Q6IElzc3VlIG1hcCByZWFkIGFmdGVyIFdyaXRlIEJ1ZmZlciBMb2FkIGNvbW1hbmQgdG8gZW5zdXJlIGNoaXAgaXMgcmVhZHkgdG8gcmVjZWl2ZSBkYXRhLgorCitTaWduZWQtb2ZmLWJ5OiBHZW9yZ2UgS2FzaHBlcmtvIDxnZW9yZ2VAem5hdS5lZHUudWE+CistLS0KKyBkcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDIuYyB8ICAgIDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmMKKysrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jCitAQCAtMjA1NCw2ICsyMDU0LDcgQEAgc3RhdGljIGludCBfX3hpcHJhbSBkb193cml0ZV9idWZmZXIoc3RydQorIAorIAkvKiBXcml0ZSBCdWZmZXIgTG9hZCAqLworIAltYXBfd3JpdGUobWFwLCBDTUQoMHgyNSksIGNtZF9hZHIpOworKwkodm9pZCkgbWFwX3JlYWQobWFwLCBjbWRfYWRyKTsKKyAKKyAJY2hpcC0+c3RhdGUgPSBGTF9XUklUSU5HX1RPX0JVRkZFUjsKKyAKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQ2NS1tMjVwODAtbXgtZGlzYWJsZS1zb2Z0d2FyZS1wcm90ZWN0aW9uLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDY1LW0yNXA4MC1teC1kaXNhYmxlLXNvZnR3YXJlLXByb3RlY3Rpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRkMmQ0NQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQ2NS1tMjVwODAtbXgtZGlzYWJsZS1zb2Z0d2FyZS1wcm90ZWN0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK0Zyb206IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KK1N1YmplY3Q6IERpc2FibGUgc29mdHdhcmUgcHJvdGVjdGlvbiBiaXRzIGZvciBNYWNyb25peCBmbGFzaGVzLgorCitTaWduZWQtb2ZmLWJ5OiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CistLS0KKyBkcml2ZXJzL210ZC9zcGktbm9yL3NwaS1ub3IuYyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCistLS0gYS9kcml2ZXJzL210ZC9zcGktbm9yL3NwaS1ub3IuYworKysrIGIvZHJpdmVycy9tdGQvc3BpLW5vci9zcGktbm9yLmMKK0BAIC00ODg0LDYgKzQ4ODQsNyBAQCBpbnQgc3BpX25vcl9zY2FuKHN0cnVjdCBzcGlfbm9yICpub3IsIGNvCisgCSAqLworIAlpZiAoSkVERUNfTUZSKG5vci0+aW5mbykgPT0gU05PUl9NRlJfQVRNRUwgfHwKKyAJICAgIEpFREVDX01GUihub3ItPmluZm8pID09IFNOT1JfTUZSX0lOVEVMIHx8CisrCSAgICBKRURFQ19NRlIobm9yLT5pbmZvKSA9PSBTTk9SX01GUl9NQUNST05JWCB8fAorIAkgICAgSkVERUNfTUZSKG5vci0+aW5mbykgPT0gU05PUl9NRlJfU1NUIHx8CisgCSAgICBub3ItPmluZm8tPmZsYWdzICYgU1BJX05PUl9IQVNfTE9DSykKKyAJCW5vci0+Y2xlYXJfc3JfYnAgPSBzcGlfbm9yX2NsZWFyX3NyX2JwOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDY2LVJldmVydC1tdGQtc3BpLW5vci1maXgtU3BhbnNpb24tcmVncmVzc2lvbnMtYWxpYXNlZC0ucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC80NjYtUmV2ZXJ0LW10ZC1zcGktbm9yLWZpeC1TcGFuc2lvbi1yZWdyZXNzaW9ucy1hbGlhc2VkLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGYxZTlmCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDY2LVJldmVydC1tdGQtc3BpLW5vci1maXgtU3BhbnNpb24tcmVncmVzc2lvbnMtYWxpYXNlZC0ucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbTogTWF0dGhpYXMgU2NoaWZmZXIgPG1zY2hpZmZlckB1bml2ZXJzZS1mYWN0b3J5Lm5ldD4KK0RhdGU6IFR1ZSwgOSBKYW4gMjAxOCAyMDo0MTo0OCArMDEwMAorU3ViamVjdDogW1BBVENIXSBSZXZlcnQgIm10ZDogc3BpLW5vcjogZml4IFNwYW5zaW9uIHJlZ3Jlc3Npb25zIChhbGlhc2VkIHdpdGgKKyBXaW5ib25kKSIKKworVGhpcyByZXZlcnRzIGNvbW1pdCA2N2I5YmNkMzY5MDZlMTJhMTVmZmVjMTk0NjNhZmJiZDZhNDE2NjBlLgorCitUaGUgdW5kZXJseWluZyBpc3N1ZSBicmVha2luZyBTcGFuc2lvbiBmbGFzaCBoYXMgYmVlbiBmaXhlZCB3aXRoICJtdGQ6IHNwaS1ub3I6Cit3YWl0IHVudGlsIGxvY2svdW5sb2NrIG9wZXJhdGlvbnMgYXJlIHJlYWR5IiBhbmQgIm10ZDogc3BpLW5vcjogd2FpdCBmb3IgU1JfV0lQCit0byBjbGVhciBvbiBpbml0aWFsIHVubG9jayIsIHNvIHdlIGNhbiBzdXBwb3J0IHVubG9ja2luZyBmb3IgV2luYm9uZCBmbGFzaAorYWdhaW4uCisKK1NpZ25lZC1vZmYtYnk6IE1hdHRoaWFzIFNjaGlmZmVyIDxtc2NoaWZmZXJAdW5pdmVyc2UtZmFjdG9yeS5uZXQ+CistLS0KKyBkcml2ZXJzL210ZC9zcGktbm9yL3NwaS1ub3IuYyB8IDQgKysrLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworLS0tIGEvZHJpdmVycy9tdGQvc3BpLW5vci9zcGktbm9yLmMKKysrKyBiL2RyaXZlcnMvbXRkL3NwaS1ub3Ivc3BpLW5vci5jCitAQCAtNDM5OCw2ICs0Mzk4LDcgQEAgc3RhdGljIHZvaWQgc3RfbWljcm9uX3NldF9kZWZhdWx0X2luaXQocworIAorIHN0YXRpYyB2b2lkIHdpbmJvbmRfc2V0X2RlZmF1bHRfaW5pdChzdHJ1Y3Qgc3BpX25vciAqbm9yKQorIHsKKysJbm9yLT5mbGFncyB8PSBTTk9SX0ZfSEFTX0xPQ0s7CisgCW5vci0+cGFyYW1zLnNldF80Ynl0ZSA9IHdpbmJvbmRfc2V0XzRieXRlOworIH0KKyAKK0BAIC00ODg2LDYgKzQ4ODcsNyBAQCBpbnQgc3BpX25vcl9zY2FuKHN0cnVjdCBzcGlfbm9yICpub3IsIGNvCisgCSAgICBKRURFQ19NRlIobm9yLT5pbmZvKSA9PSBTTk9SX01GUl9JTlRFTCB8fAorIAkgICAgSkVERUNfTUZSKG5vci0+aW5mbykgPT0gU05PUl9NRlJfTUFDUk9OSVggfHwKKyAJICAgIEpFREVDX01GUihub3ItPmluZm8pID09IFNOT1JfTUZSX1NTVCB8fAorKwkgICAgSkVERUNfTUZSKG5vci0+aW5mbykgPT0gU05PUl9NRlJfV0lOQk9ORCB8fAorIAkgICAgbm9yLT5pbmZvLT5mbGFncyAmIFNQSV9OT1JfSEFTX0xPQ0spCisgCQlub3ItPmNsZWFyX3NyX2JwID0gc3BpX25vcl9jbGVhcl9zcl9icDsKKyAKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQ3MC1tdGQtc3BpLW5vci1zdXBwb3J0LWxpbWl0aW5nLTRLLXNlY3RvcnMtc3VwcG9ydC1iYXNlLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDcwLW10ZC1zcGktbm9yLXN1cHBvcnQtbGltaXRpbmctNEstc2VjdG9ycy1zdXBwb3J0LWJhc2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNlNTg3ZgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQ3MC1tdGQtc3BpLW5vci1zdXBwb3J0LWxpbWl0aW5nLTRLLXNlY3RvcnMtc3VwcG9ydC1iYXNlLnBhdGNoCkBAIC0wLDAgKzEsNzkgQEAKK0Zyb206IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KK0RhdGU6IFNhdCwgNCBOb3YgMjAxNyAwNzo0MDoyMyArMDEwMAorU3ViamVjdDogW1BBVENIXSBtdGQ6IHNwaS1ub3I6IHN1cHBvcnQgbGltaXRpbmcgNEsgc2VjdG9ycyBzdXBwb3J0IGJhc2VkIG9uCisgZmxhc2ggc2l6ZQorCitTb21lIGRldmljZXMgbmVlZCA0SyBzZWN0b3JzIHRvIGJlIGFibGUgdG8gZGVhbCB3aXRoIHNtYWxsIGZsYXNoIGNoaXBzLgorRm9yIGluc3RhbmNlLCB3MjV4MDUgaXMgNjQgS2lCIGluIHNpemUsIGFuZCB3aXRob3V0IDRLIHNlY3RvcnMsIHRoZQorZW50aXJlIGNoaXAgaXMganVzdCBvbmUgZXJhc2UgYmxvY2suCitPbiBiaWdnZXIgZmxhc2ggY2hpcCBzaXplcywgdXNpbmcgNEsgc2VjdG9ycyBjYW4gc2lnbmlmaWNhbnRseSBzbG93IGRvd24KK21hbnkgb3BlcmF0aW9ucywgaW5jbHVkaW5nIHVzaW5nIGEgd3JpdGFibGUgZmlsZXN5c3RlbS4gVGhlcmUgYXJlIHNldmVyYWwKK3BsYXRmb3JtcyB3aGVyZSBpdCBtYWtlcyBzZW5zZSB0byB1c2UgYSBzaW5nbGUga2VybmVsIG9uIGJvdGgga2luZHMgb2YKK2RldmljZXMuCisKK1RvIHN1cHBvcnQgdGhpcyBwcm9wZXJseSwgYWxsb3cgY29uZmlndXJpbmcgYW4gdXBwZXIgZmxhc2ggY2hpcCBzaXplCitsaW1pdCBmb3IgNEsgc2VjdG9ycyBzdXBwb3J0LgorCitTaWduZWQtb2ZmLWJ5OiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CistLS0KKworLS0tIGEvZHJpdmVycy9tdGQvc3BpLW5vci9LY29uZmlnCisrKysgYi9kcml2ZXJzL210ZC9zcGktbm9yL0tjb25maWcKK0BAIC0zNCw2ICszNCwxNyBAQCBjb25maWcgU1BJX0FTUEVFRF9TTUMKKyAJICBhbmQgc3VwcG9ydCBmb3IgdGhlIFNQSSBmbGFzaCBtZW1vcnkgY29udHJvbGxlciAoU1BJKSBmb3IKKyAJICB0aGUgaG9zdCBmaXJtd2FyZS4gVGhlIGltcGxlbWVudGF0aW9uIG9ubHkgc3VwcG9ydHMgU1BJIE5PUi4KKyAKKytjb25maWcgTVREX1NQSV9OT1JfVVNFXzRLX1NFQ1RPUlNfTElNSVQKKysJaW50ICJNYXhpbXVtIGZsYXNoIGNoaXAgc2l6ZSB0byB1c2UgNEsgc2VjdG9ycyBvbiAoaW4gS2lCKSIKKysJZGVwZW5kcyBvbiBNVERfU1BJX05PUl9VU0VfNEtfU0VDVE9SUworKwlkZWZhdWx0ICI0MDk2IgorKwloZWxwCisrCSAgVGhlcmUgYXJlIG1hbnkgZmxhc2ggY2hpcHMgdGhhdCBzdXBwb3J0IDRLIHNlY3RvcnMsIGJ1dCBhcmUgc28gbGFyZ2UKKysJICB0aGF0IHVzaW5nIHRoZW0gc2lnbmlmaWNhbnRseSBzbG93cyBkb3duIHdyaXRpbmcgbGFyZ2UgYW1vdW50cyBvZgorKwkgIGRhdGEgb3IgdXNpbmcgYSB3cml0YWJsZSBmaWxlc3lzdGVtLgorKwkgIEFueSBmbGFzaCBjaGlwIGxhcmdlciB0aGFuIHRoZSBzaXplIHNwZWNpZmllZCBpbiB0aGlzIG9wdGlvbiB3aWxsCisrCSAgbm90IHVzZSA0SyBzZWN0b3JzLgorKworIGNvbmZpZyBTUElfQ0FERU5DRV9RVUFEU1BJCisgCXRyaXN0YXRlICJDYWRlbmNlIFF1YWQgU1BJIGNvbnRyb2xsZXIiCisgCWRlcGVuZHMgb24gT0YgJiYgKEFSTSB8fCBBUk02NCB8fCBDT01QSUxFX1RFU1QpCistLS0gYS9kcml2ZXJzL210ZC9zcGktbm9yL3NwaS1ub3IuYworKysrIGIvZHJpdmVycy9tdGQvc3BpLW5vci9zcGktbm9yLmMKK0BAIC00NDY0LDYgKzQ0NjQsNyBAQCBzdGF0aWMgdm9pZCBzcGlfbm9yX2luZm9faW5pdF9wYXJhbXMoc3RyCisgCXN0cnVjdCBzcGlfbm9yX2VyYXNlX21hcCAqbWFwID0gJnBhcmFtcy0+ZXJhc2VfbWFwOworIAljb25zdCBzdHJ1Y3QgZmxhc2hfaW5mbyAqaW5mbyA9IG5vci0+aW5mbzsKKyAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHNwaV9ub3JfZ2V0X2ZsYXNoX25vZGUobm9yKTsKKysJc3RydWN0IG10ZF9pbmZvICptdGQgPSAmbm9yLT5tdGQ7CisgCXU4IGksIGVyYXNlX21hc2s7CisgCisgCS8qIEluaXRpYWxpemUgbGVnYWN5IGZsYXNoIHBhcmFtZXRlcnMgYW5kIHNldHRpbmdzLiAqLworQEAgLTQ1MjcsNiArNDUyOCwyMSBAQCBzdGF0aWMgdm9pZCBzcGlfbm9yX2luZm9faW5pdF9wYXJhbXMoc3RyCisgCSAqLworIAllcmFzZV9tYXNrID0gMDsKKyAJaSA9IDA7CisrI2lmZGVmIENPTkZJR19NVERfU1BJX05PUl9VU0VfNEtfU0VDVE9SUworKwlpZiAoKGluZm8tPmZsYWdzICYgU0VDVF80S19QTUMpICYmIChtdGQtPnNpemUgPD0KKysJCSAgIENPTkZJR19NVERfU1BJX05PUl9VU0VfNEtfU0VDVE9SU19MSU1JVCAqIDEwMjQpKSB7CisrCQllcmFzZV9tYXNrIHw9IEJJVChpKTsKKysJCXNwaV9ub3Jfc2V0X2VyYXNlX3R5cGUoJm1hcC0+ZXJhc2VfdHlwZVtpXSwgNDA5NnUsCisrCQkJCSAgICAgICBTUElOT1JfT1BfQkVfNEtfUE1DKTsKKysJCWkrKzsKKysJfSBlbHNlIGlmICgoaW5mby0+ZmxhZ3MgJiBTRUNUXzRLKSAmJiAobXRkLT5zaXplIDw9CisrCSAgICBDT05GSUdfTVREX1NQSV9OT1JfVVNFXzRLX1NFQ1RPUlNfTElNSVQgKiAxMDI0KSkgeworKwkJZXJhc2VfbWFzayB8PSBCSVQoaSk7CisrCQlzcGlfbm9yX3NldF9lcmFzZV90eXBlKCZtYXAtPmVyYXNlX3R5cGVbaV0sIDQwOTZ1LAorKwkJCQkgICAgICAgU1BJTk9SX09QX0JFXzRLKTsKKysJCWkrKzsKKysJfQorKyNlbHNlCisgCWlmIChpbmZvLT5mbGFncyAmIFNFQ1RfNEtfUE1DKSB7CisgCQllcmFzZV9tYXNrIHw9IEJJVChpKTsKKyAJCXNwaV9ub3Jfc2V0X2VyYXNlX3R5cGUoJm1hcC0+ZXJhc2VfdHlwZVtpXSwgNDA5NnUsCitAQCAtNDUzOCw2ICs0NTU0LDcgQEAgc3RhdGljIHZvaWQgc3BpX25vcl9pbmZvX2luaXRfcGFyYW1zKHN0cgorIAkJCQkgICAgICAgU1BJTk9SX09QX0JFXzRLKTsKKyAJCWkrKzsKKyAJfQorKyNlbmRpZgorIAllcmFzZV9tYXNrIHw9IEJJVChpKTsKKyAJc3BpX25vcl9zZXRfZXJhc2VfdHlwZSgmbWFwLT5lcmFzZV90eXBlW2ldLCBpbmZvLT5zZWN0b3Jfc2l6ZSwKKyAJCQkgICAgICAgU1BJTk9SX09QX1NFKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQ3Ni1tdGQtc3BpLW5vci1hZGQtZW9uLWVuMjVxMTI4LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDc2LW10ZC1zcGktbm9yLWFkZC1lb24tZW4yNXExMjgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYyZGFlNQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQ3Ni1tdGQtc3BpLW5vci1hZGQtZW9uLWVuMjVxMTI4LnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK0Zyb206IFBpb3RyIER5bWFjeiA8cGVwZTJrQGdtYWlsLmNvbT4KK1N1YmplY3Q6IGtlcm5lbC9tdGQ6IGFkZCBzdXBwb3J0IGZvciBFT04gRU4yNVExMjgKKworU2lnbmVkLW9mZi1ieTogUGlvdHIgRHltYWN6IDxwZXBlMmtAZ21haWwuY29tPgorLS0tCisgZHJpdmVycy9tdGQvc3BpLW5vci9zcGktbm9yLmMgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworLS0tIGEvZHJpdmVycy9tdGQvc3BpLW5vci9zcGktbm9yLmMKKysrKyBiL2RyaXZlcnMvbXRkL3NwaS1ub3Ivc3BpLW5vci5jCitAQCAtMjE3OSw2ICsyMTc5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmbGFzaF9pbmZvIHNwaV9ub3JfaQorIAl7ICJlbjI1cTMyYiIsICAgSU5GTygweDFjMzAxNiwgMCwgNjQgKiAxMDI0LCAgIDY0LCAwKSB9LAorIAl7ICJlbjI1cDY0IiwgICAgSU5GTygweDFjMjAxNywgMCwgNjQgKiAxMDI0LCAgMTI4LCAwKSB9LAorIAl7ICJlbjI1cTY0IiwgICAgSU5GTygweDFjMzAxNywgMCwgNjQgKiAxMDI0LCAgMTI4LCBTRUNUXzRLKSB9LAorKwl7ICJlbjI1cTEyOCIsICAgSU5GTygweDFjMzAxOCwgMCwgNjQgKiAxMDI0LCAgMjU2LCBTRUNUXzRLKSB9LAorIAl7ICJlbjI1cTgwYSIsICAgSU5GTygweDFjMzAxNCwgMCwgNjQgKiAxMDI0LCAgIDE2LAorIAkJCVNFQ1RfNEsgfCBTUElfTk9SX0RVQUxfUkVBRCkgfSwKKyAJeyAiZW4yNXFoMzIiLCAgIElORk8oMHgxYzcwMTYsIDAsIDY0ICogMTAyNCwgICA2NCwgMCkgfSwKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQ3OS1tdGQtc3BpLW5vci1hZGQteHR4LXh0MjVmMTI4Yi5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQ3OS1tdGQtc3BpLW5vci1hZGQteHR4LXh0MjVmMTI4Yi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWUwMjYwCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDc5LW10ZC1zcGktbm9yLWFkZC14dHgteHQyNWYxMjhiLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gcGF0Y2h3b3JrIFRodSBGZWIgIDYgMTc6MTk6NDEgMjAyMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CitYLVBhdGNod29yay1TdWJtaXR0ZXI6IERhbmllbCBHb2xsZSA8ZGFuaWVsQG1ha3JvdG9waWEub3JnPgorWC1QYXRjaHdvcmstSWQ6IDEyMzQ0NjUKK0RhdGU6IFRodSwgNiBGZWIgMjAyMCAxOToxOTo0MSArMDIwMAorRnJvbTogRGFuaWVsIEdvbGxlIDxkYW5pZWxAbWFrcm90b3BpYS5vcmc+CitUbzogbGludXgtbXRkQGxpc3RzLmluZnJhZGVhZC5vcmcKK1N1YmplY3Q6IFtQQVRDSCB2Ml0gbXRkOiBzcGktbm9yOiBBZGQgc3VwcG9ydCBmb3IgeHQyNWYxMjhiIGNoaXAKK01lc3NhZ2UtSUQ6IDwyMDIwMDIwNjE3MTk0MS5HQTIzOThAbWFrcm90b3BpYS5vcmc+CitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lCitMaXN0LVN1YnNjcmliZTogPGh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtbXRkPiwKKyA8bWFpbHRvOmxpbnV4LW10ZC1yZXF1ZXN0QGxpc3RzLmluZnJhZGVhZC5vcmc/c3ViamVjdD1zdWJzY3JpYmU+CitDYzogRWl0YW4gQ29oZW4gPGVpdGFuQG5lb3Qtc2VtYWRhci5jb20+LCBQaW90ciBEeW1hY3ogPHBlcGUya0BnbWFpbC5jb20+LAorIFR1ZG9yIEFtYmFydXMgPHR1ZG9yLmFtYmFydXNAbWljcm9jaGlwLmNvbT4KK1NlbmRlcjogImxpbnV4LW10ZCIgPGxpbnV4LW10ZC1ib3VuY2VzQGxpc3RzLmluZnJhZGVhZC5vcmc+CitFcnJvcnMtVG86IGxpbnV4LW10ZC1ib3VuY2VzK2luY29taW5nPXBhdGNod29yay5vemxhYnMub3JnQGxpc3RzLmluZnJhZGVhZC5vcmcKKworQWRkIFhUMjVGMTI4QiBtYWRlIGJ5IFhUWCBUZWNobm9sb2d5IChTaGVuemhlbikgTGltaXRlZC4KK1RoaXMgY2hpcCBzdXBwb3J0cyBkdWFsIGFuZCBxdWFkIHJlYWQgYW5kIHVuaWZvcm0gNEstYnl0ZSBlcmFzZS4KK1ZlcmlmaWVkIG9uIFRlbHRvbmlrYSBSVVQ5NTUgd2hpY2ggY29tZXMgd2l0aCBYVDI1RjEyOEIgaW4gcmVjZW50Cit2ZXJzaW9ucyBvZiB0aGUgZGV2aWNlLgorCitTaWduZWQtb2ZmLWJ5OiBEYW5pZWwgR29sbGUgPGRhbmllbEBtYWtyb3RvcGlhLm9yZz4KKy0tLQorIGRyaXZlcnMvbXRkL3NwaS1ub3Ivc3BpLW5vci5jIHwgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCistLS0gYS9kcml2ZXJzL210ZC9zcGktbm9yL3NwaS1ub3IuYworKysrIGIvZHJpdmVycy9tdGQvc3BpLW5vci9zcGktbm9yLmMKK0BAIC0yNTA2LDYgKzI1MDYsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZsYXNoX2luZm8gc3BpX25vcl9pCisgCS8qIFhNQyAoV3VoYW4gWGlueGluIFNlbWljb25kdWN0b3IgTWFudWZhY3R1cmluZyBDb3JwLikgKi8KKyAJeyAiWE0yNVFINjRBIiwgSU5GTygweDIwNzAxNywgMCwgNjQgKiAxMDI0LCAxMjgsIFNFQ1RfNEsgfCBTUElfTk9SX0RVQUxfUkVBRCB8IFNQSV9OT1JfUVVBRF9SRUFEKSB9LAorIAl7ICJYTTI1UUgxMjhBIiwgSU5GTygweDIwNzAxOCwgMCwgNjQgKiAxMDI0LCAyNTYsIFNFQ1RfNEsgfCBTUElfTk9SX0RVQUxfUkVBRCB8IFNQSV9OT1JfUVVBRF9SRUFEKSB9LAorKworKwkvKiBYVFggVGVjaG5vbG9neSAoU2hlbnpoZW4pIExpbWl0ZWQgKi8KKysJeyAieHQyNWYxMjhiIiwgSU5GTygweDBCNDAxOCwgMCwgNjQgKiAxMDI0LCAyNTYsIFNFQ1RfNEsgfCBTUElfTk9SX0RVQUxfUkVBRCB8IFNQSV9OT1JfUVVBRF9SRUFEKSB9LAorIAl7IH0sCisgfTsKKyAKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQ4MC1tdGQtc2V0LXJvb3Rmcy10by1iZS1yb290LWRldi5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQ4MC1tdGQtc2V0LXJvb3Rmcy10by1iZS1yb290LWRldi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTg2M2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDgwLW10ZC1zZXQtcm9vdGZzLXRvLWJlLXJvb3QtZGV2LnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Zyb206IEdhYm9yIEp1aG9zIDxqdWhvc2dAb3BlbndydC5vcmc+CitTdWJqZWN0OiBrZXJuZWwvMy4xWzAyXTogbW92ZSBNVEQgcm9vdCBkZXZpY2Ugc2V0dXAgY29kZSB0byBtdGRjb3JlCisKK1RoZSBjdXJyZW50IGNvZGUgb25seSBhbGxvd3MgdG8gYXV0b21hdGljYWxseSBzZXQKK3Jvb3QgZGV2aWNlIG9uIE1URCBwYXJ0aXRpb25zLiBNb3ZlIHRoZSBjb2RlIHRvIE1URAorY29yZSB0byBhbGxvdyB0byB1c2UgaXQgd2l0aCBhbGwgTVREIGRldmljZXMuCisKK1NpZ25lZC1vZmYtYnk6IEdhYm9yIEp1aG9zIDxqdWhvc2dAb3BlbndydC5vcmc+CistLS0KKyBkcml2ZXJzL210ZC9tdGRjb3JlLmMgfCAxMCArKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKykKKworLS0tIGEvZHJpdmVycy9tdGQvbXRkY29yZS5jCisrKysgYi9kcml2ZXJzL210ZC9tdGRjb3JlLmMKK0BAIC0yNyw2ICsyNyw3IEBACisgI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisgI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKysjaW5jbHVkZSA8bGludXgvcm9vdF9kZXYuaD4KKyAjaW5jbHVkZSA8bGludXgvbnZtZW0tcHJvdmlkZXIuaD4KKyAKKyAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorQEAgLTY5OSw2ICs3MDAsMTUgQEAgaW50IGFkZF9tdGRfZGV2aWNlKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQorIAkgICBvZiB0aGlzIHRyeV8gbm9uc2Vuc2UsIGFuZCBubyBiaXRjaGluZyBhYm91dCBpdAorIAkgICBlaXRoZXIuIDopICovCisgCV9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7CisrCisrCWlmICghc3RyY21wKG10ZC0+bmFtZSwgInJvb3RmcyIpICYmCisrCSAgICBJU19FTkFCTEVEKENPTkZJR19NVERfUk9PVEZTX1JPT1RfREVWKSAmJgorKwkgICAgUk9PVF9ERVYgPT0gMCkgeworKwkJcHJfbm90aWNlKCJtdGQ6IGRldmljZSAlZCAoJXMpIHNldCB0byBiZSByb290IGZpbGVzeXN0ZW1cbiIsCisrCQkJICBtdGQtPmluZGV4LCBtdGQtPm5hbWUpOworKwkJUk9PVF9ERVYgPSBNS0RFVihNVERfQkxPQ0tfTUFKT1IsIG10ZC0+aW5kZXgpOworKwl9CisrCisgCXJldHVybiAwOworIAorIGZhaWxfbnZtZW1fYWRkOgpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDgxLW10ZC1zcGktbm9yLXJld29yay1icm9rZW4tZmxhc2gtcmVzZXQtc3VwcG9ydC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQ4MS1tdGQtc3BpLW5vci1yZXdvcmstYnJva2VuLWZsYXNoLXJlc2V0LXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFiNGYxOQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQ4MS1tdGQtc3BpLW5vci1yZXdvcmstYnJva2VuLWZsYXNoLXJlc2V0LXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwxNjcgQEAKK0Zyb20gZWE5MmNiYjUwYTc4NDA0ZTI5ZGUyY2MzOTk5YTI0MDYxNWZmYjFjOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENodWFuaG9uZyBHdW8gPGdjaDk4MTIxM0BnbWFpbC5jb20+CitEYXRlOiBNb24sIDYgQXByIDIwMjAgMTc6NTg6NDggKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gbXRkOiBzcGktbm9yOiByZXdvcmsgYnJva2VuLWZsYXNoLXJlc2V0IHN1cHBvcnQKKworSW5zdGVhZCBvZiByZXNldHRpbmcgZmxhc2ggdG8gM0IgYWRkcmVzcyBvbiByZW1vdmUgaG9vaywgdGhpcworaW1wbGVtZW50YXRpb24gb25seSBlbnRlcnMgNEIgbW9kZSB3aGVuIG5lZWRlZCwgd2hpY2ggcHJldmVudHMKK21vcmUgdW5leHBlY3RlZCByZWJvb3Qgc3R1Y2suIFRoaXMgaW1wbGVtZW50YXRpb24gbWFrZXMgaXQgb25seQorYnJlYWsgd2hlbiBhIGtlcm5lbCBwYW5pYyBoYXBwZW5zIGR1cmluZyBmbGFzaCBvcGVyYXRpb24gb24gMTZNKworYXJlYXMuCisqT3BlbldydCBvbmx5Kjogc2lsZW50IGJyb2tlbi1mbGFzaC1yZXNldCB3YXJuaW5nLiBXZSBhcmUgbm90IGRlYWxpbmcKK3dpdGggdmVuZG9ycyBhbmQgaXQncyB1bnBsZWFzYW50IGZvciB1c2VycyB0byBzZSB0aGF0IHVubmVjZXNzYXJ5CithbmQgbG9uZyBXQVJOX09OIHByaW50LgorCitTaWduZWQtb2ZmLWJ5OiBDaHVhbmhvbmcgR3VvIDxnY2g5ODEyMTNAZ21haWwuY29tPgorLS0tCisgZHJpdmVycy9tdGQvc3BpLW5vci9zcGktbm9yLmMgfCA1MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCA0OSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCistLS0gYS9kcml2ZXJzL210ZC9zcGktbm9yL3NwaS1ub3IuYworKysrIGIvZHJpdmVycy9tdGQvc3BpLW5vci9zcGktbm9yLmMKK0BAIC02MTYsNiArNjE2LDIyIEBAIHN0YXRpYyB2b2lkIHNwaV9ub3Jfc2V0XzRieXRlX29wY29kZXMoc3QKKyAJfQorIH0KKyAKKytzdGF0aWMgaW50IHNwaV9ub3JfY2hlY2tfc2V0X2FkZHJfd2lkdGgoc3RydWN0IHNwaV9ub3IgKm5vciwgbG9mZl90IGFkZHIpCisreworKwl1OCBhZGRyX3dpZHRoOworKworKwlpZiAoKG5vci0+ZmxhZ3MgJiAoU05PUl9GXzRCX09QQ09ERVMgfCBTTk9SX0ZfQlJPS0VOX1JFU0VUKSkgIT0KKysJICAgIFNOT1JfRl9CUk9LRU5fUkVTRVQpCisrCQlyZXR1cm4gMDsKKysKKysJYWRkcl93aWR0aCA9IGFkZHIgJiAweGZmMDAwMDAwID8gNCA6IDM7CisrCWlmIChub3ItPmFkZHJfd2lkdGggPT0gYWRkcl93aWR0aCkKKysJCXJldHVybiAwOworKworKwlub3ItPmFkZHJfd2lkdGggPSBhZGRyX3dpZHRoOworKwlyZXR1cm4gbm9yLT5wYXJhbXMuc2V0XzRieXRlKG5vciwgYWRkcl93aWR0aCA9PSA0KTsKKyt9CisrCisgc3RhdGljIGludCBtYWNyb25peF9zZXRfNGJ5dGUoc3RydWN0IHNwaV9ub3IgKm5vciwgYm9vbCBlbmFibGUpCisgeworIAlpZiAobm9yLT5zcGltZW0pIHsKK0BAIC0xMjYxLDYgKzEyNzcsMTAgQEAgc3RhdGljIGludCBzcGlfbm9yX2VyYXNlKHN0cnVjdCBtdGRfaW5mbworIAlpZiAocmV0KQorIAkJcmV0dXJuIHJldDsKKyAKKysJcmV0ID0gc3BpX25vcl9jaGVja19zZXRfYWRkcl93aWR0aChub3IsIGluc3RyLT5hZGRyICsgaW5zdHItPmxlbik7CisrCWlmIChyZXQgPCAwKQorKwkJcmV0dXJuIHJldDsKKysKKyAJLyogd2hvbGUtY2hpcCBlcmFzZT8gKi8KKyAJaWYgKGxlbiA9PSBtdGQtPnNpemUgJiYgIShub3ItPmZsYWdzICYgU05PUl9GX05PX09QX0NISVBfRVJBU0UpKSB7CisgCQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CitAQCAtMTMxNyw2ICsxMzM3LDcgQEAgc3RhdGljIGludCBzcGlfbm9yX2VyYXNlKHN0cnVjdCBtdGRfaW5mbworIAl3cml0ZV9kaXNhYmxlKG5vcik7CisgCisgZXJhc2VfZXJyOgorKwlzcGlfbm9yX2NoZWNrX3NldF9hZGRyX3dpZHRoKG5vciwgMCk7CisgCXNwaV9ub3JfdW5sb2NrX2FuZF91bnByZXAobm9yLCBTUElfTk9SX09QU19FUkFTRSk7CisgCisgCXJldHVybiByZXQ7CitAQCAtMTYyMyw3ICsxNjQ0LDkgQEAgc3RhdGljIGludCBzcGlfbm9yX2xvY2soc3RydWN0IG10ZF9pbmZvCisgCWlmIChyZXQpCisgCQlyZXR1cm4gcmV0OworIAorKwlzcGlfbm9yX2NoZWNrX3NldF9hZGRyX3dpZHRoKG5vciwgb2ZzICsgbGVuKTsKKyAJcmV0ID0gbm9yLT5wYXJhbXMubG9ja2luZ19vcHMtPmxvY2sobm9yLCBvZnMsIGxlbik7CisrCXNwaV9ub3JfY2hlY2tfc2V0X2FkZHJfd2lkdGgobm9yLCAwKTsKKyAKKyAJc3BpX25vcl91bmxvY2tfYW5kX3VucHJlcChub3IsIFNQSV9OT1JfT1BTX1VOTE9DSyk7CisgCXJldHVybiByZXQ7CitAQCAtMTYzOCw3ICsxNjYxLDkgQEAgc3RhdGljIGludCBzcGlfbm9yX3VubG9jayhzdHJ1Y3QgbXRkX2luZgorIAlpZiAocmV0KQorIAkJcmV0dXJuIHJldDsKKyAKKysJc3BpX25vcl9jaGVja19zZXRfYWRkcl93aWR0aChub3IsIG9mcyArIGxlbik7CisgCXJldCA9IG5vci0+cGFyYW1zLmxvY2tpbmdfb3BzLT51bmxvY2sobm9yLCBvZnMsIGxlbik7CisrCXNwaV9ub3JfY2hlY2tfc2V0X2FkZHJfd2lkdGgobm9yLCAwKTsKKyAKKyAJc3BpX25vcl91bmxvY2tfYW5kX3VucHJlcChub3IsIFNQSV9OT1JfT1BTX0xPQ0spOworIAlyZXR1cm4gcmV0OworQEAgLTE2NTMsNyArMTY3OCw5IEBAIHN0YXRpYyBpbnQgc3BpX25vcl9pc19sb2NrZWQoc3RydWN0IG10ZF8KKyAJaWYgKHJldCkKKyAJCXJldHVybiByZXQ7CisgCisrCXNwaV9ub3JfY2hlY2tfc2V0X2FkZHJfd2lkdGgobm9yLCBvZnMgKyBsZW4pOworIAlyZXQgPSBub3ItPnBhcmFtcy5sb2NraW5nX29wcy0+aXNfbG9ja2VkKG5vciwgb2ZzLCBsZW4pOworKwlzcGlfbm9yX2NoZWNrX3NldF9hZGRyX3dpZHRoKG5vciwgMCk7CisgCisgCXNwaV9ub3JfdW5sb2NrX2FuZF91bnByZXAobm9yLCBTUElfTk9SX09QU19MT0NLKTsKKyAJcmV0dXJuIHJldDsKK0BAIC0yNTU5LDYgKzI1ODYsMTAgQEAgc3RhdGljIGludCBzcGlfbm9yX3JlYWQoc3RydWN0IG10ZF9pbmZvCisgCWlmIChyZXQpCisgCQlyZXR1cm4gcmV0OworIAorKwlyZXQgPSBzcGlfbm9yX2NoZWNrX3NldF9hZGRyX3dpZHRoKG5vciwgZnJvbSArIGxlbik7CisrCWlmIChyZXQgPCAwKQorKwkJcmV0dXJuIHJldDsKKysKKyAJd2hpbGUgKGxlbikgeworIAkJbG9mZl90IGFkZHIgPSBmcm9tOworIAorQEAgLTI1ODIsNiArMjYxMyw3IEBAIHN0YXRpYyBpbnQgc3BpX25vcl9yZWFkKHN0cnVjdCBtdGRfaW5mbworIAlyZXQgPSAwOworIAorIHJlYWRfZXJyOgorKwlzcGlfbm9yX2NoZWNrX3NldF9hZGRyX3dpZHRoKG5vciwgMCk7CisgCXNwaV9ub3JfdW5sb2NrX2FuZF91bnByZXAobm9yLCBTUElfTk9SX09QU19SRUFEKTsKKyAJcmV0dXJuIHJldDsKKyB9CitAQCAtMjU5OSw2ICsyNjMxLDEwIEBAIHN0YXRpYyBpbnQgc3N0X3dyaXRlKHN0cnVjdCBtdGRfaW5mbyAqbXQKKyAJaWYgKHJldCkKKyAJCXJldHVybiByZXQ7CisgCisrCXJldCA9IHNwaV9ub3JfY2hlY2tfc2V0X2FkZHJfd2lkdGgobm9yLCB0byArIGxlbik7CisrCWlmIChyZXQgPCAwKQorKwkJcmV0dXJuIHJldDsKKysKKyAJd3JpdGVfZW5hYmxlKG5vcik7CisgCisgCW5vci0+c3N0X3dyaXRlX3NlY29uZCA9IGZhbHNlOworQEAgLTI2NjEsNiArMjY5Nyw3IEBAIHN0YXRpYyBpbnQgc3N0X3dyaXRlKHN0cnVjdCBtdGRfaW5mbyAqbXQKKyAJfQorIHNzdF93cml0ZV9lcnI6CisgCSpyZXRsZW4gKz0gYWN0dWFsOworKwlzcGlfbm9yX2NoZWNrX3NldF9hZGRyX3dpZHRoKG5vciwgMCk7CisgCXNwaV9ub3JfdW5sb2NrX2FuZF91bnByZXAobm9yLCBTUElfTk9SX09QU19XUklURSk7CisgCXJldHVybiByZXQ7CisgfQorQEAgLTI2ODMsNiArMjcyMCwxMCBAQCBzdGF0aWMgaW50IHNwaV9ub3Jfd3JpdGUoc3RydWN0IG10ZF9pbmZvCisgCWlmIChyZXQpCisgCQlyZXR1cm4gcmV0OworIAorKwlyZXQgPSBzcGlfbm9yX2NoZWNrX3NldF9hZGRyX3dpZHRoKG5vciwgdG8gKyBsZW4pOworKwlpZiAocmV0IDwgMCkKKysJCXJldHVybiByZXQ7CisrCisgCWZvciAoaSA9IDA7IGkgPCBsZW47ICkgeworIAkJc3NpemVfdCB3cml0dGVuOworIAkJbG9mZl90IGFkZHIgPSB0byArIGk7CitAQCAtMjcyMiw2ICsyNzYzLDcgQEAgc3RhdGljIGludCBzcGlfbm9yX3dyaXRlKHN0cnVjdCBtdGRfaW5mbworIAl9CisgCisgd3JpdGVfZXJyOgorKwlzcGlfbm9yX2NoZWNrX3NldF9hZGRyX3dpZHRoKG5vciwgMCk7CisgCXNwaV9ub3JfdW5sb2NrX2FuZF91bnByZXAobm9yLCBTUElfTk9SX09QU19XUklURSk7CisgCXJldHVybiByZXQ7CisgfQorQEAgLTQ3MjYsOSArNDc2OCwxMyBAQCBzdGF0aWMgaW50IHNwaV9ub3JfaW5pdChzdHJ1Y3Qgc3BpX25vciAqCisgCQkgKiByZWJvb3RzIChlLmcuLCBjcmFzaGVzKS4gV2FybiB0aGUgdXNlciAob3IgaG9wZWZ1bGx5LCBzeXN0ZW0KKyAJCSAqIGRlc2lnbmVyKSB0aGF0IHRoaXMgaXMgYmFkLgorIAkJICovCistCQlXQVJOX09OQ0Uobm9yLT5mbGFncyAmIFNOT1JfRl9CUk9LRU5fUkVTRVQsCistCQkJICAiZW5hYmxpbmcgcmVzZXQgaGFjazsgbWF5IG5vdCByZWNvdmVyIGZyb20gdW5leHBlY3RlZCByZWJvb3RzXG4iKTsKKy0JCW5vci0+cGFyYW1zLnNldF80Ynl0ZShub3IsIHRydWUpOworKwkJaWYgKG5vci0+ZmxhZ3MgJiBTTk9SX0ZfQlJPS0VOX1JFU0VUKSB7CisrCQkJZGV2X3dhcm4obm9yLT5kZXYsCisrCQkJCSJlbmFibGluZyByZXNldCBoYWNrOyBtYXkgbm90IHJlY292ZXIgZnJvbSB1bmV4cGVjdGVkIHJlYm9vdHNcbiIpOworKwkJCW5vci0+YWRkcl93aWR0aCA9IDM7CisrCQl9IGVsc2UgeworKwkJCW5vci0+cGFyYW1zLnNldF80Ynl0ZShub3IsIHRydWUpOworKwkJfQorIAl9CisgCisgCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDgyLW10ZC1zcGktbm9yLWFkZC1zdXBwb3J0LWZvci1HaWdhZGV2aWNlLUdEMjVEMDUucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC80ODItbXRkLXNwaS1ub3ItYWRkLXN1cHBvcnQtZm9yLUdpZ2FkZXZpY2UtR0QyNUQwNS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTIyMTMzCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDgyLW10ZC1zcGktbm9yLWFkZC1zdXBwb3J0LWZvci1HaWdhZGV2aWNlLUdEMjVEMDUucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorRnJvbSBkNjhiNGFhMjJlOGM2MjU2ODViZmFkNjQyZGQ3MzM3OTQ4ZGMwYWQxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS29lbiBWYW5kZXB1dHRlIDxrb2VuLnZhbmRlcHV0dGVAbmNlbnRyaWMuY29tPgorRGF0ZTogTW9uLCA2IEphbiAyMDIwIDEzOjA3OjU2ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIG10ZDogc3BpLW5vcjogYWRkIHN1cHBvcnQgZm9yIEdpZ2FkZXZpY2UgR0QyNUQwNQorCitTaWduZWQtb2ZmLWJ5OiBLb2VuIFZhbmRlcHV0dGUgPGtvZW4udmFuZGVwdXR0ZUBuY2VudHJpYy5jb20+CistLS0KKyBkcml2ZXJzL210ZC9zcGktbm9yL3NwaS1ub3IuYyB8IDUgKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisKKy0tLSBhL2RyaXZlcnMvbXRkL3NwaS1ub3Ivc3BpLW5vci5jCisrKysgYi9kcml2ZXJzL210ZC9zcGktbm9yL3NwaS1ub3IuYworQEAgLTIyMzIsNiArMjIzMiwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZsYXNoX2luZm8gc3BpX25vcl9pCisgCisgCS8qIEdpZ2FEZXZpY2UgKi8KKyAJeworKwkJImdkMjVkMDUiLCBJTkZPKDB4Yzg0MDEwLCAwLCA2NCAqIDEwMjQsICAxLAorKwkJCVNFQ1RfNEsgfCBTUElfTk9SX0RVQUxfUkVBRCB8IFNQSV9OT1JfUVVBRF9SRUFEIHwKKysJCQlTUElfTk9SX0hBU19MT0NLIHwgU1BJX05PUl9IQVNfVEIpCisrCX0sCisrCXsKKyAJCSJnZDI1cTE2IiwgSU5GTygweGM4NDAxNSwgMCwgNjQgKiAxMDI0LCAgMzIsCisgCQkJU0VDVF80SyB8IFNQSV9OT1JfRFVBTF9SRUFEIHwgU1BJX05PUl9RVUFEX1JFQUQgfAorIAkJCVNQSV9OT1JfSEFTX0xPQ0sgfCBTUElfTk9SX0hBU19UQikKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQ4Mi1tdGQtc3BpLW5vci1maXgtNC1ieXRlLW9wY29kZS1zdXBwb3J0LWZvci13MjVxMjU2LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDgyLW10ZC1zcGktbm9yLWZpeC00LWJ5dGUtb3Bjb2RlLXN1cHBvcnQtZm9yLXcyNXEyNTYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMzNjZlNgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQ4Mi1tdGQtc3BpLW5vci1maXgtNC1ieXRlLW9wY29kZS1zdXBwb3J0LWZvci13MjVxMjU2LnBhdGNoCkBAIC0wLDAgKzEsNjAgQEAKK0Zyb206IE1hbnRhcyBQdWNrYSA8bWFudGFzQDhkZXZpY2VzLmNvbT4KK1RvOiBsaW51eC1tdGRAbGlzdHMuaW5mcmFkZWFkLm9yZworU3ViamVjdDogW1BBVENIXSBtdGQ6IHNwaS1ub3I6IGZpeCA0LWJ5dGUgb3Bjb2RlIHN1cHBvcnQgZm9yIHcyNXEyNTYKK0RhdGU6IFdlZCwgMTUgQXByIDIwMjAgMTY6NDg6MzAgKzAzMDAKK01lc3NhZ2UtSUQ6IDwxNTg2OTU4NTEwLTI0MDEyLTEtZ2l0LXNlbmQtZW1haWwtbWFudGFzQDhkZXZpY2VzLmNvbT4KKworVGhlcmUgYXJlIDIgZGlmZmVyZW50IGNoaXBzICh3MjVxMjU2ZnYgYW5kIHcyNXEyNTZqdikgdGhhdCBzaGFyZQordGhlIHNhbWUgSkVERUMgSUQuIE9ubHkgdzI1cTI1Nmp2IGZ1bGx5IHN1cHBvcnRzIDQtYnl0ZSBvcGNvZGVzLgorVXNlIFNGRFAgaGVhZGVyIHZlcnNpb24gdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHRoZW0uCisKK2ZvciBPcGVuV1JUIG9ubHk6IHJlYmFzZWQgdG8gbGludXgtdjUuNAorCitTaWduZWQtb2ZmLWJ5OiBNYW50YXMgUHVja2EgPG1hbnRhc0A4ZGV2aWNlcy5jb20+CistLS0KKworLS0tIGEvZHJpdmVycy9tdGQvc3BpLW5vci9zcGktbm9yLmMKKysrKyBiL2RyaXZlcnMvbXRkL3NwaS1ub3Ivc3BpLW5vci5jCitAQCAtMjE3Miw2ICsyMTcyLDMyIEBAIHN0YXRpYyBzdHJ1Y3Qgc3BpX25vcl9maXh1cHMgZ2QyNXEyNTZfZmkKKyAJLmRlZmF1bHRfaW5pdCA9IGdkMjVxMjU2X2RlZmF1bHRfaW5pdCwKKyB9OworIAorK3N0YXRpYyBpbnQKKyt3MjVxMjU2X3Bvc3RfYmZwdF9maXh1cHMoc3RydWN0IHNwaV9ub3IgKm5vciwKKysJCQkgY29uc3Qgc3RydWN0IHNmZHBfcGFyYW1ldGVyX2hlYWRlciAqYmZwdF9oZWFkZXIsCisrCQkJIGNvbnN0IHN0cnVjdCBzZmRwX2JmcHQgKmJmcHQsCisrCQkJIHN0cnVjdCBzcGlfbm9yX2ZsYXNoX3BhcmFtZXRlciAqcGFyYW1zKQorK3sKKysJLyoKKysJICogVzI1UTI1NkpWIHN1cHBvcnRzIDRCIG9wY29kZXMgYnV0IFcyNVEyNTZGViBkb2VzIG5vdC4KKysJICogVW5mb3J0dW5hdGVseSwgV2luYm9uZCBoYXMgcmUtdXNlZCB0aGUgc2FtZSBKRURFQyBJRCBmb3IgYm90aAorKwkgKiB2YXJpYW50cyB3aGljaCBwcmV2ZW50cyB1cyBmcm9tIGRlZmluaW5nIGEgbmV3IGVudHJ5IGluIHRoZSBwYXJ0cworKwkgKiB0YWJsZS4KKysJICogVG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIFcyNVEyNTZKViBhbmQgVzI1UTI1NkZWIGNoZWNrIFNGRFAgaGVhZGVyCisrCSAqIHZlcnNpb246IG9ubHkgSlYgaGFzIEpFU0QyMTZBIGNvbXBsaWFudCBzdHJ1Y3R1cmUgKHZlcnNpb24gNSkKKysJICovCisrCisrCWlmIChiZnB0X2hlYWRlci0+bWFqb3IgPT0gU0ZEUF9KRVNEMjE2X01BSk9SICYmCisrCSAgICBiZnB0X2hlYWRlci0+bWlub3IgPT0gU0ZEUF9KRVNEMjE2QV9NSU5PUikKKysJCW5vci0+ZmxhZ3MgfD0gU05PUl9GXzRCX09QQ09ERVM7CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgc3RydWN0IHNwaV9ub3JfZml4dXBzIHcyNXEyNTZfZml4dXBzID0geworKwkucG9zdF9iZnB0ID0gdzI1cTI1Nl9wb3N0X2JmcHRfZml4dXBzLAorK307CisrCisgLyogTk9URTogZG91YmxlIGNoZWNrIGNvbW1hbmQgc2V0cyBhbmQgbWVtb3J5IG9yZ2FuaXphdGlvbiB3aGVuIHlvdSBhZGQKKyAgKiBtb3JlIG5vciBjaGlwcy4gIFRoaXMgY3VycmVudCBsaXN0IGZvY3Vzc2VzIG9uIG5ld2VyIGNoaXBzLCB3aGljaAorICAqIGhhdmUgYmVlbiBjb252ZXJnaW5nIG9uIGNvbW1hbmQgc2V0cyB3aGljaCBpbmNsdWRpbmcgSkVERUMgSUQuCitAQCAtMjUxNSw3ICsyNTQxLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmbGFzaF9pbmZvIHNwaV9ub3JfaQorIAl7ICJ3MjVxODAiLCBJTkZPKDB4ZWY1MDE0LCAwLCA2NCAqIDEwMjQsICAxNiwgU0VDVF80SykgfSwKKyAJeyAidzI1cTgwYmwiLCBJTkZPKDB4ZWY0MDE0LCAwLCA2NCAqIDEwMjQsICAxNiwgU0VDVF80SykgfSwKKyAJeyAidzI1cTEyOCIsIElORk8oMHhlZjQwMTgsIDAsIDY0ICogMTAyNCwgMjU2LCBTRUNUXzRLKSB9LAorLQl7ICJ3MjVxMjU2IiwgSU5GTygweGVmNDAxOSwgMCwgNjQgKiAxMDI0LCA1MTIsIFNFQ1RfNEsgfCBTUElfTk9SX0RVQUxfUkVBRCB8IFNQSV9OT1JfUVVBRF9SRUFEKSB9LAorKwl7ICJ3MjVxMjU2IiwgSU5GTygweGVmNDAxOSwgMCwgNjQgKiAxMDI0LCA1MTIsIFNFQ1RfNEsgfCBTUElfTk9SX0RVQUxfUkVBRCB8IFNQSV9OT1JfUVVBRF9SRUFEKQorKwkJCSAgLmZpeHVwcyA9ICZ3MjVxMjU2X2ZpeHVwcyB9LAorIAl7ICJ3MjVxMjU2anZtIiwgSU5GTygweGVmNzAxOSwgMCwgNjQgKiAxMDI0LCA1MTIsCisgCQkJICAgICBTRUNUXzRLIHwgU1BJX05PUl9EVUFMX1JFQUQgfCBTUElfTk9SX1FVQURfUkVBRCkgfSwKKyAJeyAidzI1bTUxMmp2IiwgSU5GTygweGVmNzExOSwgMCwgNjQgKiAxMDI0LCAxMDI0LApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDkwLXViaS1hdXRvLWF0dGFjaC1tdGQtZGV2aWNlLW5hbWVkLXViaS1vci1kYXRhLW9uLWJvb3QucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC80OTAtdWJpLWF1dG8tYXR0YWNoLW10ZC1kZXZpY2UtbmFtZWQtdWJpLW9yLWRhdGEtb24tYm9vdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjFkYWVhCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDkwLXViaS1hdXRvLWF0dGFjaC1tdGQtZGV2aWNlLW5hbWVkLXViaS1vci1kYXRhLW9uLWJvb3QucGF0Y2gKQEAgLTAsMCArMSw5NyBAQAorRnJvbTogRGFuaWVsIEdvbGxlIDxkYW5pZWxAbWFrcm90b3BpYS5vcmc+CitTdWJqZWN0OiB1Ymk6IGF1dG8tYXR0YWNoIG10ZCBkZXZpY2UgbmFtZWQgInViaSIgb3IgImRhdGEiIG9uIGJvb3QKKworU2lnbmVkLW9mZi1ieTogRGFuaWVsIEdvbGxlIDxkYW5pZWxAbWFrcm90b3BpYS5vcmc+CistLS0KKyBkcml2ZXJzL210ZC91YmkvYnVpbGQuYyB8IDM2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAzNiBpbnNlcnRpb25zKCspCisKKy0tLSBhL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jCisrKysgYi9kcml2ZXJzL210ZC91YmkvYnVpbGQuYworQEAgLTExNjgsNiArMTE2OCw3MyBAQCBzdGF0aWMgc3RydWN0IG10ZF9pbmZvICogX19pbml0IG9wZW5fbXRkCisgCXJldHVybiBtdGQ7CisgfQorIAorKy8qCisrICogVGhpcyBmdW5jdGlvbiB0cmllcyBhdHRhY2hpbmcgbXRkIHBhcnRpdGlvbnMgbmFtZWQgZWl0aGVyICJ1YmkiIG9yICJkYXRhIgorKyAqIGR1cmluZyBib290LgorKyAqLworK3N0YXRpYyB2b2lkIF9faW5pdCB1YmlfYXV0b19hdHRhY2godm9pZCkKKyt7CisrCWludCBlcnI7CisrCXN0cnVjdCBtdGRfaW5mbyAqbXRkOworKwlsb2ZmX3Qgb2Zmc2V0ID0gMDsKKysJc2l6ZV90IGxlbjsKKysJY2hhciBtYWdpY1s0XTsKKysKKysJLyogdHJ5IGF0dGFjaGluZyBtdGQgZGV2aWNlIG5hbWVkICJ1YmkiIG9yICJkYXRhIiAqLworKwltdGQgPSBvcGVuX210ZF9kZXZpY2UoInViaSIpOworKwlpZiAoSVNfRVJSKG10ZCkpCisrCQltdGQgPSBvcGVuX210ZF9kZXZpY2UoImRhdGEiKTsKKysKKysJaWYgKElTX0VSUihtdGQpKQorKwkJcmV0dXJuOworKworKwkvKiBnZXQgdGhlIGZpcnN0IG5vdCBiYWQgYmxvY2sgKi8KKysJaWYgKG10ZF9jYW5faGF2ZV9iYihtdGQpKQorKwkJd2hpbGUgKG10ZF9ibG9ja19pc2JhZChtdGQsIG9mZnNldCkpIHsKKysJCQlvZmZzZXQgKz0gbXRkLT5lcmFzZXNpemU7CisrCisrCQkJaWYgKG9mZnNldCA+IG10ZC0+c2l6ZSkgeworKwkJCQlwcl9lcnIoIlVCSSBlcnJvcjogRmFpbGVkIHRvIGZpbmQgYSBub24tYmFkICIKKysJCQkJICAgICAgICJibG9jayBvbiBtdGQlZFxuIiwgbXRkLT5pbmRleCk7CisrCQkJCWdvdG8gY2xlYW51cDsKKysJCQl9CisrCQl9CisrCisrCS8qIGNoZWNrIGlmIHRoZSByZWFkIGZyb20gZmxhc2ggd2FzIHN1Y2Nlc3NmdWwgKi8KKysJZXJyID0gbXRkX3JlYWQobXRkLCBvZmZzZXQsIDQsICZsZW4sICh2b2lkICopIG1hZ2ljKTsKKysJaWYgKChlcnIgJiYgIW10ZF9pc19iaXRmbGlwKGVycikpIHx8IGxlbiAhPSA0KSB7CisrCQlwcl9lcnIoIlVCSSBlcnJvcjogdW5hYmxlIHRvIHJlYWQgZnJvbSBtdGQlZFxuIiwgbXRkLT5pbmRleCk7CisrCQlnb3RvIGNsZWFudXA7CisrCX0KKysKKysJLyogY2hlY2sgZm9yIGEgdmFsaWQgdWJpIG1hZ2ljICovCisrCWlmIChzdHJuY21wKG1hZ2ljLCAiVUJJIyIsIDQpKSB7CisrCQlwcl9lcnIoIlVCSSBlcnJvcjogbm8gdmFsaWQgVUJJIG1hZ2ljIGZvdW5kIGluc2lkZSBtdGQlZFxuIiwgbXRkLT5pbmRleCk7CisrCQlnb3RvIGNsZWFudXA7CisrCX0KKysKKysJLyogZG9uJ3QgYXV0by1hZGQgbWVkaWEgdHlwZXMgd2hlcmUgVUJJIGRvZXNuJ3QgbWFrZXMgc2Vuc2UgKi8KKysJaWYgKG10ZC0+dHlwZSAhPSBNVERfTkFOREZMQVNIICYmCisrCSAgICBtdGQtPnR5cGUgIT0gTVREX05PUkZMQVNIICYmCisrCSAgICBtdGQtPnR5cGUgIT0gTVREX0RBVEFGTEFTSCAmJgorKwkgICAgbXRkLT50eXBlICE9IE1URF9NTENOQU5ERkxBU0gpCisrCQlnb3RvIGNsZWFudXA7CisrCisrCW11dGV4X2xvY2soJnViaV9kZXZpY2VzX211dGV4KTsKKysJcHJfbm90aWNlKCJVQkk6IGF1dG8tYXR0YWNoIG10ZCVkXG4iLCBtdGQtPmluZGV4KTsKKysJZXJyID0gdWJpX2F0dGFjaF9tdGRfZGV2KG10ZCwgVUJJX0RFVl9OVU1fQVVUTywgMCwgMCk7CisrCW11dGV4X3VubG9jaygmdWJpX2RldmljZXNfbXV0ZXgpOworKwlpZiAoZXJyIDwgMCkgeworKwkJcHJfZXJyKCJVQkkgZXJyb3I6IGNhbm5vdCBhdHRhY2ggbXRkJWRcbiIsIG10ZC0+aW5kZXgpOworKwkJZ290byBjbGVhbnVwOworKwl9CisrCisrCXJldHVybjsKKysKKytjbGVhbnVwOgorKwlwdXRfbXRkX2RldmljZShtdGQpOworK30KKysKKyBzdGF0aWMgaW50IF9faW5pdCB1YmlfaW5pdCh2b2lkKQorIHsKKyAJaW50IGVyciwgaSwgazsKK0BAIC0xMjUxLDYgKzEzMTgsMTIgQEAgc3RhdGljIGludCBfX2luaXQgdWJpX2luaXQodm9pZCkKKyAJCX0KKyAJfQorIAorKwkvKiBhdXRvLWF0dGFjaCBtdGQgZGV2aWNlcyBvbmx5IGlmIGJ1aWx0LWluIHRvIHRoZSBrZXJuZWwgYW5kIG5vIHViaS5tdGQKKysJICogcGFyYW1ldGVyIHdhcyBnaXZlbiAqLworKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfTVREX1JPT1RGU19ST09UX0RFVikgJiYKKysJICAgICF1YmlfaXNfbW9kdWxlKCkgJiYgIW10ZF9kZXZzKQorKwkJdWJpX2F1dG9fYXR0YWNoKCk7CisrCisgCWVyciA9IHViaWJsb2NrX2luaXQoKTsKKyAJaWYgKGVycikgeworIAkJcHJfZXJyKCJVQkkgZXJyb3I6IGJsb2NrOiBjYW5ub3QgaW5pdGlhbGl6ZSwgZXJyb3IgJWRcbiIsIGVycik7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC80OTEtdWJpLWF1dG8tY3JlYXRlLXViaWJsb2NrLWRldmljZS1mb3Itcm9vdGZzLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDkxLXViaS1hdXRvLWNyZWF0ZS11YmlibG9jay1kZXZpY2UtZm9yLXJvb3Rmcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWZjYmFjCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDkxLXViaS1hdXRvLWNyZWF0ZS11YmlibG9jay1kZXZpY2UtZm9yLXJvb3Rmcy5wYXRjaApAQCAtMCwwICsxLDY2IEBACitGcm9tOiBEYW5pZWwgR29sbGUgPGRhbmllbEBtYWtyb3RvcGlhLm9yZz4KK1N1YmplY3Q6IHViaTogYXV0by1jcmVhdGUgdWJpYmxvY2sgZGV2aWNlIGZvciByb290ZnMKKworU2lnbmVkLW9mZi1ieTogRGFuaWVsIEdvbGxlIDxkYW5pZWxAbWFrcm90b3BpYS5vcmc+CistLS0KKyBkcml2ZXJzL210ZC91YmkvYmxvY2suYyB8IDQyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0MiBpbnNlcnRpb25zKCspCisKKy0tLSBhL2RyaXZlcnMvbXRkL3ViaS9ibG9jay5jCisrKysgYi9kcml2ZXJzL210ZC91YmkvYmxvY2suYworQEAgLTY1Miw2ICs2NTIsNDQgQEAgc3RhdGljIHZvaWQgX19pbml0IHViaWJsb2NrX2NyZWF0ZV9mcm9tXworIAl9CisgfQorIAorKyNkZWZpbmUgVUJJRlNfTk9ERV9NQUdJQyAgMHgwNjEwMTgzMQorK3N0YXRpYyBpbmxpbmUgaW50IHViaV92b2xfaXNfdWJpZnMoc3RydWN0IHViaV92b2x1bWVfZGVzYyAqZGVzYykKKyt7CisrCWludCByZXQ7CisrCXVpbnQzMl90IG1hZ2ljX29mLCBtYWdpYzsKKysJcmV0ID0gdWJpX3JlYWQoZGVzYywgMCwgKGNoYXIgKikmbWFnaWNfb2YsIDAsIDQpOworKwlpZiAocmV0KQorKwkJcmV0dXJuIDA7CisrCW1hZ2ljID0gbGUzMl90b19jcHUobWFnaWNfb2YpOworKwlyZXR1cm4gbWFnaWMgPT0gVUJJRlNfTk9ERV9NQUdJQzsKKyt9CisrCisrc3RhdGljIHZvaWQgX19pbml0IHViaWJsb2NrX2NyZWF0ZV9hdXRvX3Jvb3Rmcyh2b2lkKQorK3sKKysJaW50IHViaV9udW0sIHJldCwgaXNfdWJpZnM7CisrCXN0cnVjdCB1Ymlfdm9sdW1lX2Rlc2MgKmRlc2M7CisrCXN0cnVjdCB1Ymlfdm9sdW1lX2luZm8gdmk7CisrCisrCWZvciAodWJpX251bSA9IDA7IHViaV9udW0gPCBVQklfTUFYX0RFVklDRVM7IHViaV9udW0rKykgeworKwkJZGVzYyA9IHViaV9vcGVuX3ZvbHVtZV9ubSh1YmlfbnVtLCAicm9vdGZzIiwgVUJJX1JFQURPTkxZKTsKKysJCWlmIChJU19FUlIoZGVzYykpCisrCQkJY29udGludWU7CisrCisrCQl1YmlfZ2V0X3ZvbHVtZV9pbmZvKGRlc2MsICZ2aSk7CisrCQlpc191YmlmcyA9IHViaV92b2xfaXNfdWJpZnMoZGVzYyk7CisrCQl1YmlfY2xvc2Vfdm9sdW1lKGRlc2MpOworKwkJaWYgKGlzX3ViaWZzKQorKwkJCWJyZWFrOworKworKwkJcmV0ID0gdWJpYmxvY2tfY3JlYXRlKCZ2aSk7CisrCQlpZiAocmV0KQorKwkJCXByX2VycigiVUJJIGVycm9yOiBibG9jazogY2FuJ3QgYWRkICclcycgdm9sdW1lLCBlcnI9JWRcbiIsCisrCQkJCXZpLm5hbWUsIHJldCk7CisrCQkvKiBhbHdheXMgYnJlYWsgaWYgd2UgZ2V0IGhlcmUgKi8KKysJCWJyZWFrOworKwl9CisrfQorKworIHN0YXRpYyB2b2lkIHViaWJsb2NrX3JlbW92ZV9hbGwodm9pZCkKKyB7CisgCXN0cnVjdCB1YmlibG9jayAqbmV4dDsKK0BAIC02ODQsNiArNzIyLDEwIEBAIGludCBfX2luaXQgdWJpYmxvY2tfaW5pdCh2b2lkKQorIAkgKi8KKyAJdWJpYmxvY2tfY3JlYXRlX2Zyb21fcGFyYW0oKTsKKyAKKysJLyogYXV0by1hdHRhY2ggInJvb3RmcyIgdm9sdW1lIGlmIGV4aXN0aW5nIGFuZCBub24tdWJpZnMgKi8KKysJaWYgKElTX0VOQUJMRUQoQ09ORklHX01URF9ST09URlNfUk9PVF9ERVYpKQorKwkJdWJpYmxvY2tfY3JlYXRlX2F1dG9fcm9vdGZzKCk7CisrCisgCS8qCisgCSAqIEJsb2NrIGRldmljZXMgYXJlIG9ubHkgY3JlYXRlZCB1cG9uIHVzZXIgcmVxdWVzdHMsIHNvIHdlIGlnbm9yZQorIAkgKiBleGlzdGluZyB2b2x1bWVzLgpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDkyLXRyeS1hdXRvLW1vdW50aW5nLXViaTAtcm9vdGZzLWluLWluaXQtZG9fbW91bnRzLmMucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC80OTItdHJ5LWF1dG8tbW91bnRpbmctdWJpMC1yb290ZnMtaW4taW5pdC1kb19tb3VudHMuYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTYxZjRhCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDkyLXRyeS1hdXRvLW1vdW50aW5nLXViaTAtcm9vdGZzLWluLWluaXQtZG9fbW91bnRzLmMucGF0Y2gKQEAgLTAsMCArMSw1MSBAQAorRnJvbTogRGFuaWVsIEdvbGxlIDxkYW5pZWxAbWFrcm90b3BpYS5vcmc+CitTdWJqZWN0OiB0cnkgYXV0by1tb3VudGluZyB1YmkwOnJvb3RmcyBpbiBpbml0L2RvX21vdW50cy5jCisKK1NpZ25lZC1vZmYtYnk6IERhbmllbCBHb2xsZSA8ZGFuaWVsQG1ha3JvdG9waWEub3JnPgorLS0tCisgaW5pdC9kb19tb3VudHMuYyB8IDI2ICsrKysrKysrKysrKysrKysrKysrKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDI1IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworLS0tIGEvaW5pdC9kb19tb3VudHMuYworKysrIGIvaW5pdC9kb19tb3VudHMuYworQEAgLTQ2MCw3ICs0NjAsMjggQEAgcmV0cnk6Cisgb3V0OgorIAlwdXRfcGFnZShwYWdlKTsKKyB9CistIAorKworK3N0YXRpYyBpbnQgX19pbml0IG1vdW50X3ViaV9yb290ZnModm9pZCkKKyt7CisrCWludCBmbGFncyA9IE1TX1NJTEVOVDsKKysJaW50IGVyciwgdHJpZWQgPSAwOworKworKwl3aGlsZSAodHJpZWQgPCAyKSB7CisrCQllcnIgPSBkb19tb3VudF9yb290KCJ1YmkwOnJvb3RmcyIsICJ1YmlmcyIsIGZsYWdzLCBcCisrCQkJCQlyb290X21vdW50X2RhdGEpOworKwkJc3dpdGNoIChlcnIpIHsKKysJCQljYXNlIC1FQUNDRVM6CisrCQkJCWZsYWdzIHw9IE1TX1JET05MWTsKKysJCQkJdHJpZWQrKzsKKysJCQkJYnJlYWs7CisrCQkJZGVmYXVsdDoKKysJCQkJcmV0dXJuIGVycjsKKysJCX0KKysJfQorKworKwlyZXR1cm4gLUVJTlZBTDsKKyt9CisrCisgI2lmZGVmIENPTkZJR19ST09UX05GUworIAorICNkZWZpbmUgTkZTUk9PVF9USU1FT1VUX01JTgk1CitAQCAtNTU0LDYgKzU3NSwxMCBAQCB2b2lkIF9faW5pdCBtb3VudF9yb290KHZvaWQpCisgCQkJY2hhbmdlX2Zsb3BweSgicm9vdCBmbG9wcHkiKTsKKyAJfQorICNlbmRpZgorKyNpZmRlZiBDT05GSUdfTVREX1JPT1RGU19ST09UX0RFVgorKwlpZiAoIW1vdW50X3ViaV9yb290ZnMoKSkKKysJCXJldHVybjsKKysjZW5kaWYKKyAjaWZkZWYgQ09ORklHX0JMT0NLCisgCXsKKyAJCWludCBlcnIgPSBjcmVhdGVfZGV2KCIvZGV2L3Jvb3QiLCBST09UX0RFVik7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC80OTMtdWJpLXNldC1ST09UX0RFVi10by11YmlibG9jay1yb290ZnMtaWYtdW5zZXQucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC80OTMtdWJpLXNldC1ST09UX0RFVi10by11YmlibG9jay1yb290ZnMtaWYtdW5zZXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRmZjQ2OAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQ5My11Ymktc2V0LVJPT1RfREVWLXRvLXViaWJsb2NrLXJvb3Rmcy1pZi11bnNldC5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGcm9tOiBEYW5pZWwgR29sbGUgPGRhbmllbEBtYWtyb3RvcGlhLm9yZz4KK1N1YmplY3Q6IHViaTogc2V0IFJPT1RfREVWIHRvIHViaWJsb2NrICJyb290ZnMiIGlmIHVuc2V0CisKK1NpZ25lZC1vZmYtYnk6IERhbmllbCBHb2xsZSA8ZGFuaWVsQG1ha3JvdG9waWEub3JnPgorLS0tCisgZHJpdmVycy9tdGQvdWJpL2Jsb2NrLmMgfCAxMCArKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKykKKworLS0tIGEvZHJpdmVycy9tdGQvdWJpL2Jsb2NrLmMKKysrKyBiL2RyaXZlcnMvbXRkL3ViaS9ibG9jay5jCitAQCAtNDIsNiArNDIsNyBAQAorICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorICNpbmNsdWRlIDxsaW51eC9pZHIuaD4KKyAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisrI2luY2x1ZGUgPGxpbnV4L3Jvb3RfZGV2Lmg+CisgCisgI2luY2x1ZGUgInViaS1tZWRpYS5oIgorICNpbmNsdWRlICJ1YmkuaCIKK0BAIC00NTgsNiArNDU5LDE1IEBAIGludCB1YmlibG9ja19jcmVhdGUoc3RydWN0IHViaV92b2x1bWVfaW4KKyAJZGV2X2luZm8oZGlza190b19kZXYoZGV2LT5nZCksICJjcmVhdGVkIGZyb20gdWJpJWQ6JWQoJXMpIiwKKyAJCSBkZXYtPnViaV9udW0sIGRldi0+dm9sX2lkLCB2aS0+bmFtZSk7CisgCW11dGV4X3VubG9jaygmZGV2aWNlc19tdXRleCk7CisrCisrCWlmICghc3RyY21wKHZpLT5uYW1lLCAicm9vdGZzIikgJiYKKysJICAgIElTX0VOQUJMRUQoQ09ORklHX01URF9ST09URlNfUk9PVF9ERVYpICYmCisrCSAgICBST09UX0RFViA9PSAwKSB7CisrCQlwcl9ub3RpY2UoInViaWJsb2NrOiBkZXZpY2UgdWJpYmxvY2slZF8lZCAoJXMpIHNldCB0byBiZSByb290IGZpbGVzeXN0ZW1cbiIsCisrCQkJICBkZXYtPnViaV9udW0sIGRldi0+dm9sX2lkLCB2aS0+bmFtZSk7CisrCQlST09UX0RFViA9IE1LREVWKGdkLT5tYWpvciwgZ2QtPmZpcnN0X21pbm9yKTsKKysJfQorKworIAlyZXR1cm4gMDsKKyAKKyBvdXRfZnJlZV9xdWV1ZToKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQ5NC1tdGQtdWJpLWFkZC1FT0YtbWFya2VyLXN1cHBvcnQucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC80OTQtbXRkLXViaS1hZGQtRU9GLW1hcmtlci1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNDgxNDYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC80OTQtbXRkLXViaS1hZGQtRU9GLW1hcmtlci1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsNjAgQEAKK0Zyb206IEdhYm9yIEp1aG9zIDxqdWhvc2dAb3BlbndydC5vcmc+CitTdWJqZWN0OiBtdGQ6IGFkZCBFT0YgbWFya2VyIHN1cHBvcnQgdG8gdGhlIFVCSSBsYXllcgorCitTaWduZWQtb2ZmLWJ5OiBHYWJvciBKdWhvcyA8anVob3NnQG9wZW53cnQub3JnPgorLS0tCisgZHJpdmVycy9tdGQvdWJpL2F0dGFjaC5jIHwgMjUgKysrKysrKysrKysrKysrKysrKysrKy0tLQorIGRyaXZlcnMvbXRkL3ViaS91YmkuaCAgICB8ICAxICsKKyAyIGZpbGVzIGNoYW5nZWQsIDIzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvbXRkL3ViaS9hdHRhY2guYworKysrIGIvZHJpdmVycy9tdGQvdWJpL2F0dGFjaC5jCitAQCAtOTI2LDYgKzkyNiwxMyBAQCBzdGF0aWMgYm9vbCB2b2xfaWdub3JlZChpbnQgdm9sX2lkKQorICNlbmRpZgorIH0KKyAKKytzdGF0aWMgYm9vbCBlY19oZHJfaGFzX2VvZihzdHJ1Y3QgdWJpX2VjX2hkciAqZWNoKQorK3sKKysJcmV0dXJuIGVjaC0+cGFkZGluZzFbMF0gPT0gJ0UnICYmCisrCSAgICAgICBlY2gtPnBhZGRpbmcxWzFdID09ICdPJyAmJgorKwkgICAgICAgZWNoLT5wYWRkaW5nMVsyXSA9PSAnRic7CisrfQorKworIC8qKgorICAqIHNjYW5fcGViIC0gc2NhbiBhbmQgcHJvY2VzcyBVQkkgaGVhZGVycyBvZiBhIFBFQi4KKyAgKiBAdWJpOiBVQkkgZGV2aWNlIGRlc2NyaXB0aW9uIG9iamVjdAorQEAgLTk1OCw5ICs5NjUsMjEgQEAgc3RhdGljIGludCBzY2FuX3BlYihzdHJ1Y3QgdWJpX2RldmljZSAqdQorIAkJcmV0dXJuIDA7CisgCX0KKyAKKy0JZXJyID0gdWJpX2lvX3JlYWRfZWNfaGRyKHViaSwgcG51bSwgZWNoLCAwKTsKKy0JaWYgKGVyciA8IDApCistCQlyZXR1cm4gZXJyOworKwlpZiAoIWFpLT5lb2ZfZm91bmQpIHsKKysJCWVyciA9IHViaV9pb19yZWFkX2VjX2hkcih1YmksIHBudW0sIGVjaCwgMCk7CisrCQlpZiAoZXJyIDwgMCkKKysJCQlyZXR1cm4gZXJyOworKworKwkJaWYgKGVjX2hkcl9oYXNfZW9mKGVjaCkpIHsKKysJCQlwcl9ub3RpY2UoIlVCSTogRU9GIG1hcmtlciBmb3VuZCwgUEVCcyBmcm9tICVkIHdpbGwgYmUgZXJhc2VkXG4iLAorKwkJCQlwbnVtKTsKKysJCQlhaS0+ZW9mX2ZvdW5kID0gdHJ1ZTsKKysJCX0KKysJfQorKworKwlpZiAoYWktPmVvZl9mb3VuZCkKKysJCWVyciA9IFVCSV9JT19GRl9CSVRGTElQUzsKKysKKyAJc3dpdGNoIChlcnIpIHsKKyAJY2FzZSAwOgorIAkJYnJlYWs7CistLS0gYS9kcml2ZXJzL210ZC91YmkvdWJpLmgKKysrKyBiL2RyaXZlcnMvbXRkL3ViaS91YmkuaAorQEAgLTc4MCw2ICs3ODAsNyBAQCBzdHJ1Y3QgdWJpX2F0dGFjaF9pbmZvIHsKKyAJaW50IG1lYW5fZWM7CisgCXVpbnQ2NF90IGVjX3N1bTsKKyAJaW50IGVjX2NvdW50OworKwlib29sIGVvZl9mb3VuZDsKKyAJc3RydWN0IGttZW1fY2FjaGUgKmFlYl9zbGFiX2NhY2hlOworIAlzdHJ1Y3QgdWJpX2VjX2hkciAqZWNoOworIAlzdHJ1Y3QgdWJpX3ZpZF9pb19idWYgKnZpZGI7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC80OTUtbXRkLWNvcmUtYWRkLWdldF9tdGRfZGV2aWNlX2J5X25vZGUucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC80OTUtbXRkLWNvcmUtYWRkLWdldF9tdGRfZGV2aWNlX2J5X25vZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE3MzM4MQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQ5NS1tdGQtY29yZS1hZGQtZ2V0X210ZF9kZXZpY2VfYnlfbm9kZS5wYXRjaApAQCAtMCwwICsxLDc1IEBACitGcm9tIDFiZDFiNzQwZjIwOGQxY2Y0MDcxOTMyY2M1MTg2MGQzNzI2NmM0MDIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCZXJuaGFyZCBGcmF1ZW5kaWVuc3QgPGtlcm5lbEBub3NwYW0ub2JlbGlrcy5kZT4KK0RhdGU6IFNhdCwgMSBTZXAgMjAxOCAwMDozMDoxMSArMDIwMAorU3ViamVjdDogW1BBVENIIDQ5NS80OTddIG10ZDogY29yZTogYWRkIGdldF9tdGRfZGV2aWNlX2J5X25vZGUKKworQWRkIGZ1bmN0aW9uIHRvIHJldHJpZXZlIGEgbXRkIGRldmljZSBieSBpdHMgT0Ygbm9kZS4gU2luY2UgZHJpdmVycyBjYW4KK2Fzc2lnbiBhcmJpdHJhcnkgbmFtZXMgdG8gbXRkIGRldmljZXMgaW4gdGhlIGFic2VuY2Ugb2YgYSBsYWJlbAorcHJvcGVydHksIHRoZXJlIGlzIG5vIG90aGVyIHJlbGlhYmxlIHdheSB0byByZXRyaWV2ZSBhIG10ZCBkZXZpY2UgZm9yIGEKK2dpdmVuIE9GIG5vZGUuCisKK1NpZ25lZC1vZmYtYnk6IEJlcm5oYXJkIEZyYXVlbmRpZW5zdCA8a2VybmVsQG5vc3BhbS5vYmVsaWtzLmRlPgorUmV2aWV3ZWQtYnk6IE1pcXVlbCBSYXluYWwgPG1pcXVlbC5yYXluYWxAYm9vdGxpbi5jb20+CistLS0KKyBkcml2ZXJzL210ZC9tdGRjb3JlLmMgICB8IDM4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgaW5jbHVkZS9saW51eC9tdGQvbXRkLmggfCAgMiArKworIDIgZmlsZXMgY2hhbmdlZCwgNDAgaW5zZXJ0aW9ucygrKQorCistLS0gYS9kcml2ZXJzL210ZC9tdGRjb3JlLmMKKysrKyBiL2RyaXZlcnMvbXRkL210ZGNvcmUuYworQEAgLTEwNTMsNiArMTA1Myw0NCBAQCBvdXRfdW5sb2NrOgorIH0KKyBFWFBPUlRfU1lNQk9MX0dQTChnZXRfbXRkX2RldmljZV9ubSk7CisgCisrLyoqCisrICoJZ2V0X210ZF9kZXZpY2VfYnlfbm9kZSAtIG9idGFpbiBhIHZhbGlkYXRlZCBoYW5kbGUgZm9yIGFuIE1URCBkZXZpY2UKKysgKglieSBvZl9ub2RlCisrICoJQG9mX25vZGU6IE9GIG5vZGUgb2YgTVREIGRldmljZSB0byBvcGVuCisrICoKKysgKglUaGlzIGZ1bmN0aW9uIHJldHVybnMgTVREIGRldmljZSBkZXNjcmlwdGlvbiBzdHJ1Y3R1cmUgaW4gY2FzZSBvZgorKyAqCXN1Y2Nlc3MgYW5kIGFuIGVycm9yIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlLgorKyAqLworK3N0cnVjdCBtdGRfaW5mbyAqZ2V0X210ZF9kZXZpY2VfYnlfbm9kZShjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUpCisreworKwlpbnQgZXJyID0gLUVOT0RFVjsKKysJc3RydWN0IG10ZF9pbmZvICptdGQgPSBOVUxMLCAqb3RoZXI7CisrCisrCW11dGV4X2xvY2soJm10ZF90YWJsZV9tdXRleCk7CisrCisrCW10ZF9mb3JfZWFjaF9kZXZpY2Uob3RoZXIpIHsKKysJCWlmIChvZl9ub2RlID09IG90aGVyLT5kZXYub2Zfbm9kZSkgeworKwkJCW10ZCA9IG90aGVyOworKwkJCWJyZWFrOworKwkJfQorKwl9CisrCisrCWlmICghbXRkKQorKwkJZ290byBvdXRfdW5sb2NrOworKworKwllcnIgPSBfX2dldF9tdGRfZGV2aWNlKG10ZCk7CisrCWlmIChlcnIpCisrCQlnb3RvIG91dF91bmxvY2s7CisrCisrCW11dGV4X3VubG9jaygmbXRkX3RhYmxlX211dGV4KTsKKysJcmV0dXJuIG10ZDsKKysKKytvdXRfdW5sb2NrOgorKwltdXRleF91bmxvY2soJm10ZF90YWJsZV9tdXRleCk7CisrCXJldHVybiBFUlJfUFRSKGVycik7CisrfQorK0VYUE9SVF9TWU1CT0xfR1BMKGdldF9tdGRfZGV2aWNlX2J5X25vZGUpOworKworIHZvaWQgcHV0X210ZF9kZXZpY2Uoc3RydWN0IG10ZF9pbmZvICptdGQpCisgeworIAltdXRleF9sb2NrKCZtdGRfdGFibGVfbXV0ZXgpOworLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvbXRkLmgKKysrKyBiL2luY2x1ZGUvbGludXgvbXRkL210ZC5oCitAQCAtNTg2LDYgKzU4Niw4IEBAIGV4dGVybiBzdHJ1Y3QgbXRkX2luZm8gKmdldF9tdGRfZGV2aWNlKHMKKyBleHRlcm4gaW50IF9fZ2V0X210ZF9kZXZpY2Uoc3RydWN0IG10ZF9pbmZvICptdGQpOworIGV4dGVybiB2b2lkIF9fcHV0X210ZF9kZXZpY2Uoc3RydWN0IG10ZF9pbmZvICptdGQpOworIGV4dGVybiBzdHJ1Y3QgbXRkX2luZm8gKmdldF9tdGRfZGV2aWNlX25tKGNvbnN0IGNoYXIgKm5hbWUpOworK2V4dGVybiBzdHJ1Y3QgbXRkX2luZm8gKmdldF9tdGRfZGV2aWNlX2J5X25vZGUoCisrCQljb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUpOworIGV4dGVybiB2b2lkIHB1dF9tdGRfZGV2aWNlKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKKyAKKyAKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQ5Ni1kdC1iaW5kaW5ncy1hZGQtYmluZGluZ3MtZm9yLW10ZC1jb25jYXQtZGV2aWNlcy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQ5Ni1kdC1iaW5kaW5ncy1hZGQtYmluZGluZ3MtZm9yLW10ZC1jb25jYXQtZGV2aWNlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWYzYjllCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDk2LWR0LWJpbmRpbmdzLWFkZC1iaW5kaW5ncy1mb3ItbXRkLWNvbmNhdC1kZXZpY2VzLnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK0Zyb20gNTczNGM2NjY5ZmJhN2RkYjVlZjQ5MWNjZmY3MTU5ZDE1ZGJhMGI1OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJlcm5oYXJkIEZyYXVlbmRpZW5zdCA8a2VybmVsQG5vc3BhbS5vYmVsaWtzLmRlPgorRGF0ZTogV2VkLCA1IFNlcCAyMDE4IDAxOjMyOjUxICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggNDk2LzQ5N10gZHQtYmluZGluZ3M6IGFkZCBiaW5kaW5ncyBmb3IgbXRkLWNvbmNhdCBkZXZpY2VzCisKK0RvY3VtZW50IHZpcnR1YWwgbXRkLWNvbmNhdCBkZXZpY2UgYmluZGluZ3MuCisKK1NpZ25lZC1vZmYtYnk6IEJlcm5oYXJkIEZyYXVlbmRpZW5zdCA8a2VybmVsQG5vc3BhbS5vYmVsaWtzLmRlPgorLS0tCisgLi4uL2RldmljZXRyZWUvYmluZGluZ3MvbXRkL210ZC1jb25jYXQudHh0ICAgIHwgMzYgKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAzNiBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tdGQvbXRkLWNvbmNhdC50eHQKKworLS0tIC9kZXYvbnVsbAorKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL210ZC9tdGQtY29uY2F0LnR4dAorQEAgLTAsMCArMSwzNiBAQAorK1ZpcnR1YWwgTVREIGNvbmNhdCBkZXZpY2UKKysKKytSZXF1aXJlcyBwcm9wZXJ0aWVzOgorKy0gZGV2aWNlczogbGlzdCBvZiBwaGFuZGxlcyB0byBtdGQgbm9kZXMgdGhhdCBzaG91bGQgYmUgY29uY2F0ZW5hdGVkCisrCisrRXhhbXBsZToKKysKKysmc3BpIHsKKysJZmxhc2gwOiBmbGFzaEAwIHsKKysJCS4uLgorKwl9OworKwlmbGFzaDE6IGZsYXNoQDEgeworKwkJLi4uCisrCX07CisrfTsKKysKKytmbGFzaCB7CisrCWNvbXBhdGlibGUgPSAibXRkLWNvbmNhdCI7CisrCisrCWRldmljZXMgPSA8JmZsYXNoMCAmZmxhc2gxPjsKKysKKysJcGFydGl0aW9ucyB7CisrCQljb21wYXRpYmxlID0gImZpeGVkLXBhcnRpdGlvbnMiOworKworKwkJcGFydGl0aW9uQDAgeworKwkJCWxhYmVsID0gImJvb3QiOworKwkJCXJlZyA9IDwweDAwMDAwMDAgMHgwMDQwMDAwPjsKKysJCQlyZWFkLW9ubHk7CisrCQl9OworKworKwkJcGFydGl0aW9uQDQwMDAwIHsKKysJCQlsYWJlbCA9ICJmaXJtd2FyZSI7CisrCQkJcmVnID0gPDB4MDA0MDAwMCAweDFmYzAwMDA+OworKwkJfTsKKysJfQorK30KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQ5Ny1tdGQtbXRkY29uY2F0LWFkZC1kdC1kcml2ZXItZm9yLWNvbmNhdC1kZXZpY2VzLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDk3LW10ZC1tdGRjb25jYXQtYWRkLWR0LWRyaXZlci1mb3ItY29uY2F0LWRldmljZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM0MmVkNwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQ5Ny1tdGQtbXRkY29uY2F0LWFkZC1kdC1kcml2ZXItZm9yLWNvbmNhdC1kZXZpY2VzLnBhdGNoCkBAIC0wLDAgKzEsMjE2IEBACitGcm9tIGU1M2Y3MTJkOGVhYzcxZjU0Mzk5YjYxMDM4Y2NmODdkMmNlZTk5ZDcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCZXJuaGFyZCBGcmF1ZW5kaWVuc3QgPGtlcm5lbEBub3NwYW0ub2JlbGlrcy5kZT4KK0RhdGU6IFNhdCwgMjUgQXVnIDIwMTggMTI6MzU6MjIgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCA0OTcvNDk3XSBtdGQ6IG10ZGNvbmNhdDogYWRkIGR0IGRyaXZlciBmb3IgY29uY2F0IGRldmljZXMKKworU29tZSBtdGQgZHJpdmVycyBsaWtlIHBoeXNtYXAgdmFyaWFudHMgaGF2ZSBzdXBwb3J0IGZvciBjb25jYXRlbmF0aW5nCittdWx0aXBsZSBtdGQgZGV2aWNlcywgYnV0IHRoZXJlIGlzIG5vIGdlbmVyaWMgd2F5IHRvIGRlZmluZSBzdWNoIGEKK2NvbmNhdCBkZXZpY2UgZnJvbSB3aXRoaW4gdGhlIGRldmljZSB0cmVlLgorCitUaGlzIGlzIHVzZWZ1bCBmb3Igc29tZSBTb0MgYm9hcmRzIHRoYXQgdXNlIG11bHRpcGxlIGZsYXNoIGNoaXBzIGFzCittZW1vcnkgYmFua3Mgb2YgYSBzaW5nbGUgbXRkIGRldmljZSwgd2l0aCBwYXJ0aXRpb25zIHNwYW5uaW5nIGNoaXAKK2JvcmRlcnMuCisKK1RoaXMgY29tbWl0IGFkZHMgYSBkcml2ZXIgZm9yIGNyZWF0aW5nIHZpcnR1YWwgbXRkLWNvbmNhdCBkZXZpY2VzLiBUaGV5CittdXN0IGhhdmUgYSBjb21wYXRpYmxlID0gIm10ZC1jb25jYXQiIGxpbmUsIGFuZCBkZWZpbmUgYSBsaXN0IG9mIGRldmljZXMKK3RvIGNvbmNhdCBpbiB0aGUgJ2RldmljZXMnIHByb3BlcnR5LCBmb3IgZXhhbXBsZToKKworZmxhc2ggeworICBjb21wYXRpYmxlID0gIm10ZC1jb25jYXQiOworCisgIGRldmljZXMgPSA8JmZsYXNoMCAmZmxhc2gxPjsKKworICBwYXJ0aXRpb25zIHsKKyAgICAuLi4KKyAgfTsKK307CisKK1RoZSBkcml2ZXIgaXMgYWRkZWQgdG8gdGhlIHZlcnkgZW5kIG9mIHRoZSBtdGQgTWFrZWZpbGUgdG8gaW5jcmVhc2UgdGhlCitsaWtlbHlob29kIG9mIGFsbCBjaGlsZCBkZXZpY2VzIGFscmVhZHkgYmVpbmcgbG9hZGVkIGF0IHRoZSB0aW1lIG9mCitwcm9iaW5nLCBwcmV2ZW50aW5nIHVubmVjZXNzYXJ5IGRlZmVycmVkIHByb2Jlcy4KKworU2lnbmVkLW9mZi1ieTogQmVybmhhcmQgRnJhdWVuZGllbnN0IDxrZXJuZWxAbm9zcGFtLm9iZWxpa3MuZGU+CistLS0KKyBkcml2ZXJzL210ZC9LY29uZmlnICAgICAgICAgICAgICAgICB8ICAgMiArCisgZHJpdmVycy9tdGQvTWFrZWZpbGUgICAgICAgICAgICAgICAgfCAgIDMgKworIGRyaXZlcnMvbXRkL2NvbXBvc2l0ZS9LY29uZmlnICAgICAgIHwgIDEyICsrKworIGRyaXZlcnMvbXRkL2NvbXBvc2l0ZS9NYWtlZmlsZSAgICAgIHwgICA2ICsrCisgZHJpdmVycy9tdGQvY29tcG9zaXRlL3ZpcnRfY29uY2F0LmMgfCAxMjggKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDUgZmlsZXMgY2hhbmdlZCwgMTUxIGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tdGQvY29tcG9zaXRlL0tjb25maWcKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tdGQvY29tcG9zaXRlL01ha2VmaWxlCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbXRkL2NvbXBvc2l0ZS92aXJ0X2NvbmNhdC5jCisKKy0tLSBhL2RyaXZlcnMvbXRkL0tjb25maWcKKysrKyBiL2RyaXZlcnMvbXRkL0tjb25maWcKK0BAIC0yMjgsNCArMjI4LDYgQEAgc291cmNlICJkcml2ZXJzL210ZC91YmkvS2NvbmZpZyIKKyAKKyBzb3VyY2UgImRyaXZlcnMvbXRkL2h5cGVyYnVzL0tjb25maWciCisgCisrc291cmNlICJkcml2ZXJzL210ZC9jb21wb3NpdGUvS2NvbmZpZyIKKysKKyBlbmRpZiAjIE1URAorLS0tIGEvZHJpdmVycy9tdGQvTWFrZWZpbGUKKysrKyBiL2RyaXZlcnMvbXRkL01ha2VmaWxlCitAQCAtMzIsMyArMzIsNiBAQCBvYmoteQkJKz0gY2hpcHMvIGxwZGRyLyBtYXBzLyBkZXZpY2VzLyBuCisgb2JqLSQoQ09ORklHX01URF9TUElfTk9SKQkrPSBzcGktbm9yLworIG9iai0kKENPTkZJR19NVERfVUJJKQkJKz0gdWJpLworIG9iai0kKENPTkZJR19NVERfSFlQRVJCVVMpCSs9IGh5cGVyYnVzLworKworKyMgQ29tcG9zaXRlIGRyaXZlcnMgbXVzdCBiZSBsb2FkZWQgbGFzdAorK29iai15CQkJCSs9IGNvbXBvc2l0ZS8KKy0tLSAvZGV2L251bGwKKysrKyBiL2RyaXZlcnMvbXRkL2NvbXBvc2l0ZS9LY29uZmlnCitAQCAtMCwwICsxLDEyIEBACisrbWVudSAiQ29tcG9zaXRlIE1URCBkZXZpY2UgZHJpdmVycyIKKysJZGVwZW5kcyBvbiBNVEQhPW4KKysKKytjb25maWcgTVREX1ZJUlRfQ09OQ0FUCisrCXRyaXN0YXRlICJWaXJ0dWFsIGNvbmNhdCBNVEQgZGV2aWNlIgorKwloZWxwCisrCSAgVGhpcyBkcml2ZXIgYWxsb3dzIGNyZWF0aW9uIG9mIGEgdmlydHVhbCBNVEQgY29uY2F0IGRldmljZSwgd2hpY2gKKysJICBjb25jYXRlbmF0ZXMgbXVsdGlwbGUgdW5kZXJseWluZyBNVEQgZGV2aWNlcyB0byBhIHNpbmdsZSBkZXZpY2UuCisrCSAgVGhpcyBpcyByZXF1aXJlZCBieSBzb21lIFNvQyBib2FyZHMgd2hlcmUgbXVsdGlwbGUgbWVtb3J5IGJhbmtzIGFyZQorKwkgIHVzZWQgYXMgb25lIGRldmljZSB3aXRoIHBhcnRpdGlvbnMgc3Bhbm5pbmcgYWNyb3NzIGRldmljZSBib3VuZGFyaWVzLgorKworK2VuZG1lbnUKKy0tLSAvZGV2L251bGwKKysrKyBiL2RyaXZlcnMvbXRkL2NvbXBvc2l0ZS9NYWtlZmlsZQorQEAgLTAsMCArMSw2IEBACisrIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorKyMKKysjIGxpbnV4L2RyaXZlcnMvbXRkL2NvbXBvc2l0ZS9NYWtlZmlsZQorKyMKKysKKytvYmotJChDT05GSUdfTVREX1ZJUlRfQ09OQ0FUKSAgICs9IHZpcnRfY29uY2F0Lm8KKy0tLSAvZGV2L251bGwKKysrKyBiL2RyaXZlcnMvbXRkL2NvbXBvc2l0ZS92aXJ0X2NvbmNhdC5jCitAQCAtMCwwICsxLDEyOCBAQAorKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKworKy8qCisrICogVmlydHVhbCBjb25jYXQgTVREIGRldmljZSBkcml2ZXIKKysgKgorKyAqIENvcHlyaWdodCAoQykgMjAxOCBCZXJuaGFyZCBGcmF1ZW5kaWVuc3QKKysgKiBBdXRob3I6IEJlcm5oYXJkIEZyYXVlbmRpZW5zdCwga2VybmVsQG5vc3BhbS5vYmVsaWtzLmRlCisrICovCisrCisrI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKysjaW5jbHVkZSA8bGludXgvbXRkL2NvbmNhdC5oPgorKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisrI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisrI2luY2x1ZGUgPGxpbnV4L29mLmg+CisrI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisrI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKysKKysvKgorKyAqIHN0cnVjdCBvZl92aXJ0X2NvbmNhdCAtIHBsYXRmb3JtIGRldmljZSBkcml2ZXIgZGF0YS4KKysgKiBAY210ZCB0aGUgZmluYWwgbXRkX2NvbmNhdCBkZXZpY2UKKysgKiBAbnVtX2RldmljZXMgdGhlIG51bWJlciBvZiBkZXZpY2VzIGluIEBkZXZpY2VzCisrICogQGRldmljZXMgcG9pbnRzIHRvIGFuIGFycmF5IG9mIGRldmljZXMgYWxyZWFkeSBsb2FkZWQKKysgKi8KKytzdHJ1Y3Qgb2ZfdmlydF9jb25jYXQgeworKwlzdHJ1Y3QgbXRkX2luZm8JKmNtdGQ7CisrCWludCBudW1fZGV2aWNlczsKKysJc3RydWN0IG10ZF9pbmZvCSoqZGV2aWNlczsKKyt9OworKworK3N0YXRpYyBpbnQgdmlydF9jb25jYXRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCisreworKwlzdHJ1Y3Qgb2ZfdmlydF9jb25jYXQgKmluZm87CisrCWludCBpOworKworKwlpbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisrCWlmICghaW5mbykKKysJCXJldHVybiAwOworKworKwkvLyB1bnNldCBkYXRhIGZvciB3aGVuIHRoaXMgaXMgY2FsbGVkIGFmdGVyIGEgcHJvYmUgZXJyb3IKKysJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisrCisrCWlmIChpbmZvLT5jbXRkKSB7CisrCQltdGRfZGV2aWNlX3VucmVnaXN0ZXIoaW5mby0+Y210ZCk7CisrCQltdGRfY29uY2F0X2Rlc3Ryb3koaW5mby0+Y210ZCk7CisrCX0KKysKKysJaWYgKGluZm8tPmRldmljZXMpIHsKKysJCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5udW1fZGV2aWNlczsgaSsrKQorKwkJCXB1dF9tdGRfZGV2aWNlKGluZm8tPmRldmljZXNbaV0pOworKwl9CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IHZpcnRfY29uY2F0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCisreworKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBwZGV2LT5kZXYub2Zfbm9kZTsKKysJc3RydWN0IG9mX3BoYW5kbGVfaXRlcmF0b3IgaXQ7CisrCXN0cnVjdCBvZl92aXJ0X2NvbmNhdCAqaW5mbzsKKysJc3RydWN0IG10ZF9pbmZvICptdGQ7CisrCWludCBlcnIgPSAwLCBjb3VudDsKKysKKysJY291bnQgPSBvZl9jb3VudF9waGFuZGxlX3dpdGhfYXJncyhub2RlLCAiZGV2aWNlcyIsIE5VTEwpOworKwlpZiAoY291bnQgPD0gMCkKKysJCXJldHVybiAtRUlOVkFMOworKworKwlpbmZvID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpOworKwlpZiAoIWluZm8pCisrCQlyZXR1cm4gLUVOT01FTTsKKysJaW5mby0+ZGV2aWNlcyA9IGRldm1fa2NhbGxvYygmcGRldi0+ZGV2LCBjb3VudCwKKysJCQkJICAgICBzaXplb2YoKihpbmZvLT5kZXZpY2VzKSksIEdGUF9LRVJORUwpOworKwlpZiAoIWluZm8tPmRldmljZXMpIHsKKysJCWVyciA9IC1FTk9NRU07CisrCQlnb3RvIGVycl9yZW1vdmU7CisrCX0KKysKKysJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaW5mbyk7CisrCisrCW9mX2Zvcl9lYWNoX3BoYW5kbGUoJml0LCBlcnIsIG5vZGUsICJkZXZpY2VzIiwgTlVMTCwgMCkgeworKwkJbXRkID0gZ2V0X210ZF9kZXZpY2VfYnlfbm9kZShpdC5ub2RlKTsKKysJCWlmIChJU19FUlIobXRkKSkgeworKwkJCW9mX25vZGVfcHV0KGl0Lm5vZGUpOworKwkJCWVyciA9IC1FUFJPQkVfREVGRVI7CisrCQkJZ290byBlcnJfcmVtb3ZlOworKwkJfQorKworKwkJaW5mby0+ZGV2aWNlc1tpbmZvLT5udW1fZGV2aWNlcysrXSA9IG10ZDsKKysJfQorKworKwlpbmZvLT5jbXRkID0gbXRkX2NvbmNhdF9jcmVhdGUoaW5mby0+ZGV2aWNlcywgaW5mby0+bnVtX2RldmljZXMsCisrCQkJCSAgICAgICBkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CisrCWlmICghaW5mby0+Y210ZCkgeworKwkJZXJyID0gLUVOWElPOworKwkJZ290byBlcnJfcmVtb3ZlOworKwl9CisrCisrCWluZm8tPmNtdGQtPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworKwltdGRfc2V0X29mX25vZGUoaW5mby0+Y210ZCwgbm9kZSk7CisrCW10ZF9kZXZpY2VfcmVnaXN0ZXIoaW5mby0+Y210ZCwgTlVMTCwgMCk7CisrCisrCXJldHVybiAwOworKworK2Vycl9yZW1vdmU6CisrCXZpcnRfY29uY2F0X3JlbW92ZShwZGV2KTsKKysKKysJcmV0dXJuIGVycjsKKyt9CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdmlydF9jb25jYXRfb2ZfbWF0Y2hbXSA9IHsKKysJeyAuY29tcGF0aWJsZSA9ICJtdGQtY29uY2F0IiwgfSwKKysJeyAvKiBzZW50aW5lbCAqLyB9CisrfTsKKytNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB2aXJ0X2NvbmNhdF9vZl9tYXRjaCk7CisrCisrc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdmlydF9jb25jYXRfZHJpdmVyID0geworKwkucHJvYmUgPSB2aXJ0X2NvbmNhdF9wcm9iZSwKKysJLnJlbW92ZSA9IHZpcnRfY29uY2F0X3JlbW92ZSwKKysJLmRyaXZlcgkgPSB7CisrCQkubmFtZSAgID0gInZpcnQtbXRkY29uY2F0IiwKKysJCS5vZl9tYXRjaF90YWJsZSA9IHZpcnRfY29uY2F0X29mX21hdGNoLAorKwl9LAorK307CisrCisrbW9kdWxlX3BsYXRmb3JtX2RyaXZlcih2aXJ0X2NvbmNhdF9kcml2ZXIpOworKworK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKKytNT0RVTEVfQVVUSE9SKCJCZXJuaGFyZCBGcmF1ZW5kaWVuc3QgPGtlcm5lbEBub3NwYW0ub2JlbGlrcy5kZT4iKTsKKytNT0RVTEVfREVTQ1JJUFRJT04oIlZpcnR1YWwgY29uY2F0IE1URCBkZXZpY2UgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC80OTgtbXRkLW10ZGNvbmNhdC1zZWxlY3QtcmVhZHdyaXRlLWZ1bmN0aW9uLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDk4LW10ZC1tdGRjb25jYXQtc2VsZWN0LXJlYWR3cml0ZS1mdW5jdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjliYmZmCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNDk4LW10ZC1tdGRjb25jYXQtc2VsZWN0LXJlYWR3cml0ZS1mdW5jdGlvbi5wYXRjaApAQCAtMCwwICsxLDI0IEBACistLS0gYS9kcml2ZXJzL210ZC9tdGRjb25jYXQuYworKysrIGIvZHJpdmVycy9tdGQvbXRkY29uY2F0LmMKK0BAIC02NDIsOCArNjQyLDEyIEBAIHN0cnVjdCBtdGRfaW5mbyAqbXRkX2NvbmNhdF9jcmVhdGUoc3RydWMKKyAJCWNvbmNhdC0+bXRkLl93cml0ZXYgPSBjb25jYXRfd3JpdGV2OworIAlpZiAoc3ViZGV2WzBdLT5fcmVhZF9vb2IpCisgCQljb25jYXQtPm10ZC5fcmVhZF9vb2IgPSBjb25jYXRfcmVhZF9vb2I7CisrCWVsc2UKKysJCWNvbmNhdC0+bXRkLl9yZWFkID0gY29uY2F0X3JlYWQ7CisgCWlmIChzdWJkZXZbMF0tPl93cml0ZV9vb2IpCisgCQljb25jYXQtPm10ZC5fd3JpdGVfb29iID0gY29uY2F0X3dyaXRlX29vYjsKKysJZWxzZQorKwkJY29uY2F0LT5tdGQuX3dyaXRlID0gY29uY2F0X3dyaXRlOworIAlpZiAoc3ViZGV2WzBdLT5fYmxvY2tfaXNiYWQpCisgCQljb25jYXQtPm10ZC5fYmxvY2tfaXNiYWQgPSBjb25jYXRfYmxvY2tfaXNiYWQ7CisgCWlmIChzdWJkZXZbMF0tPl9ibG9ja19tYXJrYmFkKQorQEAgLTcwMSw4ICs3MDUsNiBAQCBzdHJ1Y3QgbXRkX2luZm8gKm10ZF9jb25jYXRfY3JlYXRlKHN0cnVjCisgCWNvbmNhdC0+bXRkLm5hbWUgPSBuYW1lOworIAorIAljb25jYXQtPm10ZC5fZXJhc2UgPSBjb25jYXRfZXJhc2U7CistCWNvbmNhdC0+bXRkLl9yZWFkID0gY29uY2F0X3JlYWQ7CistCWNvbmNhdC0+bXRkLl93cml0ZSA9IGNvbmNhdF93cml0ZTsKKyAJY29uY2F0LT5tdGQuX3N5bmMgPSBjb25jYXRfc3luYzsKKyAJY29uY2F0LT5tdGQuX2xvY2sgPSBjb25jYXRfbG9jazsKKyAJY29uY2F0LT5tdGQuX3VubG9jayA9IGNvbmNhdF91bmxvY2s7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC80OTktbXRkLWFkZC1ubWJtLXN1cHBvcnQucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC80OTktbXRkLWFkZC1ubWJtLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNiYWFlMgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzQ5OS1tdGQtYWRkLW5tYm0tc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDIxIEBACistLS0gYS9kcml2ZXJzL210ZC9LY29uZmlnCisrKysgYi9kcml2ZXJzL210ZC9LY29uZmlnCitAQCAtMjI4LDYgKzIyOCw4IEBAIHNvdXJjZSAiZHJpdmVycy9tdGQvdWJpL0tjb25maWciCisgCisgc291cmNlICJkcml2ZXJzL210ZC9oeXBlcmJ1cy9LY29uZmlnIgorIAorK3NvdXJjZSAiZHJpdmVycy9tdGQvbm1ibS9LY29uZmlnIgorKworIHNvdXJjZSAiZHJpdmVycy9tdGQvY29tcG9zaXRlL0tjb25maWciCisgCisgZW5kaWYgIyBNVEQKKy0tLSBhL2RyaXZlcnMvbXRkL01ha2VmaWxlCisrKysgYi9kcml2ZXJzL210ZC9NYWtlZmlsZQorQEAgLTMzLDUgKzMzLDcgQEAgb2JqLSQoQ09ORklHX01URF9TUElfTk9SKQkrPSBzcGktbm9yLworIG9iai0kKENPTkZJR19NVERfVUJJKQkJKz0gdWJpLworIG9iai0kKENPTkZJR19NVERfSFlQRVJCVVMpCSs9IGh5cGVyYnVzLworIAorK29iai15CQkJCSs9IG5tYm0vCisrCisgIyBDb21wb3NpdGUgZHJpdmVycyBtdXN0IGJlIGxvYWRlZCBsYXN0Cisgb2JqLXkJCQkJKz0gY29tcG9zaXRlLwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNTMwLWpmZnMyX21ha2VfbHptYV9hdmFpbGFibGUucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC81MzAtamZmczJfbWFrZV9sem1hX2F2YWlsYWJsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTJkYjdlCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNTMwLWpmZnMyX21ha2VfbHptYV9hdmFpbGFibGUucGF0Y2gKQEAgLTAsMCArMSw1MTgwIEBACitGcm9tOiBBbGV4YW5kcm9zIEMuIENvdWxvdW1iaXMgPGFsZXhAb3pvLmNvbT4KK1N1YmplY3Q6IGZzOiBhZGQgamZmczIvbHptYSBzdXBwb3J0IChub3QgYWN0aXZhdGVkIGJ5IGRlZmF1bHQgeWV0KQorCitsZWRlLWNvbW1pdDogYzJjODhkMzE1ZmEwZTg4MWY4YjE5ZGEwN2I2Mjg1OWI5MTViMTFiMgorU2lnbmVkLW9mZi1ieTogQWxleGFuZHJvcyBDLiBDb3Vsb3VtYmlzIDxhbGV4QG96by5jb20+CistLS0KKyBmcy9qZmZzMi9LY29uZmlnICAgICAgICAgICAgIHwgICAgOSArCisgZnMvamZmczIvTWFrZWZpbGUgICAgICAgICAgICB8ICAgIDMgKworIGZzL2pmZnMyL2NvbXByLmMgICAgICAgICAgICAgfCAgICA2ICsKKyBmcy9qZmZzMi9jb21wci5oICAgICAgICAgICAgIHwgICAxMCArLQorIGZzL2pmZnMyL2NvbXByX2x6bWEuYyAgICAgICAgfCAgMTI4ICsrKworIGZzL2pmZnMyL3N1cGVyLmMgICAgICAgICAgICAgfCAgIDMzICstCisgaW5jbHVkZS9saW51eC9sem1hLmggICAgICAgICB8ICAgNjIgKysKKyBpbmNsdWRlL2xpbnV4L2x6bWEvTHpGaW5kLmggIHwgIDExNSArKysKKyBpbmNsdWRlL2xpbnV4L2x6bWEvTHpIYXNoLmggIHwgICA1NCArCisgaW5jbHVkZS9saW51eC9sem1hL0x6bWFEZWMuaCB8ICAyMzEgKysrKysKKyBpbmNsdWRlL2xpbnV4L2x6bWEvTHptYUVuYy5oIHwgICA4MCArKworIGluY2x1ZGUvbGludXgvbHptYS9UeXBlcy5oICAgfCAgMjI2ICsrKysrCisgaW5jbHVkZS91YXBpL2xpbnV4L2pmZnMyLmggICB8ICAgIDEgKworIGxpYi9LY29uZmlnICAgICAgICAgICAgICAgICAgfCAgICA2ICsKKyBsaWIvTWFrZWZpbGUgICAgICAgICAgICAgICAgIHwgICAxMiArCisgbGliL2x6bWEvTHpGaW5kLmMgICAgICAgICAgICB8ICA3NjEgKysrKysrKysrKysrKysKKyBsaWIvbHptYS9Mem1hRGVjLmMgICAgICAgICAgIHwgIDk5OSArKysrKysrKysrKysrKysrKysrCisgbGliL2x6bWEvTHptYUVuYy5jICAgICAgICAgICB8IDIyNzEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgbGliL2x6bWEvTWFrZWZpbGUgICAgICAgICAgICB8ICAgIDcgKworIDE5IGZpbGVzIGNoYW5nZWQsIDUwMDggaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZnMvamZmczIvY29tcHJfbHptYS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgvbHptYS5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgvbHptYS9MekZpbmQuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2xpbnV4L2x6bWEvTHpIYXNoLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC9sem1hL0x6bWFEZWMuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2xpbnV4L2x6bWEvTHptYUVuYy5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgvbHptYS9UeXBlcy5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9sem1hL0x6RmluZC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9sem1hL0x6bWFEZWMuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvbHptYS9Mem1hRW5jLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2x6bWEvTWFrZWZpbGUKKworLS0tIGEvZnMvamZmczIvS2NvbmZpZworKysrIGIvZnMvamZmczIvS2NvbmZpZworQEAgLTEzNiw2ICsxMzYsMTUgQEAgY29uZmlnIEpGRlMyX0xaTworIAkgIFRoaXMgZmVhdHVyZSB3YXMgYWRkZWQgaW4gSnVseSwgMjAwNy4gU2F5ICdOJyBpZiB5b3UgbmVlZAorIAkgIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBib290bG9hZGVycyBvciBrZXJuZWxzLgorIAorK2NvbmZpZyBKRkZTMl9MWk1BCisrCWJvb2wgIkpGRlMyIExaTUEgY29tcHJlc3Npb24gc3VwcG9ydCIgaWYgSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUworKwlzZWxlY3QgTFpNQV9DT01QUkVTUworKwlzZWxlY3QgTFpNQV9ERUNPTVBSRVNTCisrCWRlcGVuZHMgb24gSkZGUzJfRlMKKysJZGVmYXVsdCBuCisrCWhlbHAKKysJICBKRkZTMiB3cmFwcGVyIHRvIHRoZSBMWk1BIEMgU0RLCisrCisgY29uZmlnIEpGRlMyX1JUSU1FCisgCWJvb2wgIkpGRlMyIFJUSU1FIGNvbXByZXNzaW9uIHN1cHBvcnQiIGlmIEpGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMKKyAJZGVwZW5kcyBvbiBKRkZTMl9GUworLS0tIGEvZnMvamZmczIvTWFrZWZpbGUKKysrKyBiL2ZzL2pmZnMyL01ha2VmaWxlCitAQCAtMTksNCArMTksNyBAQCBqZmZzMi0kKENPTkZJR19KRkZTMl9SVUJJTikJKz0gY29tcHJfcnViCisgamZmczItJChDT05GSUdfSkZGUzJfUlRJTUUpCSs9IGNvbXByX3J0aW1lLm8KKyBqZmZzMi0kKENPTkZJR19KRkZTMl9aTElCKQkrPSBjb21wcl96bGliLm8KKyBqZmZzMi0kKENPTkZJR19KRkZTMl9MWk8pCSs9IGNvbXByX2x6by5vCisramZmczItJChDT05GSUdfSkZGUzJfTFpNQSkJKz0gY29tcHJfbHptYS5vCisgamZmczItJChDT05GSUdfSkZGUzJfU1VNTUFSWSkgICArPSBzdW1tYXJ5Lm8KKysKKytDRkxBR1NfY29tcHJfbHptYS5vICs9IC1JaW5jbHVkZS9saW51eCAtSWxpYi9sem1hCistLS0gYS9mcy9qZmZzMi9jb21wci5jCisrKysgYi9mcy9qZmZzMi9jb21wci5jCitAQCAtMzc4LDYgKzM3OCw5IEBAIGludCBfX2luaXQgamZmczJfY29tcHJlc3NvcnNfaW5pdCh2b2lkKQorICNpZmRlZiBDT05GSUdfSkZGUzJfTFpPCisgCWpmZnMyX2x6b19pbml0KCk7CisgI2VuZGlmCisrI2lmZGVmIENPTkZJR19KRkZTMl9MWk1BCisrCWpmZnMyX2x6bWFfaW5pdCgpOworKyNlbmRpZgorIC8qIFNldHRpbmcgZGVmYXVsdCBjb21wcmVzc2lvbiBtb2RlICovCisgI2lmZGVmIENPTkZJR19KRkZTMl9DTU9ERV9OT05FCisgCWpmZnMyX2NvbXByZXNzaW9uX21vZGUgPSBKRkZTMl9DT01QUl9NT0RFX05PTkU7CitAQCAtNDAxLDYgKzQwNCw5IEBAIGludCBfX2luaXQgamZmczJfY29tcHJlc3NvcnNfaW5pdCh2b2lkKQorIGludCBqZmZzMl9jb21wcmVzc29yc19leGl0KHZvaWQpCisgeworIC8qIFVucmVnaXN0ZXJpbmcgY29tcHJlc3NvcnMgKi8KKysjaWZkZWYgQ09ORklHX0pGRlMyX0xaTUEKKysJamZmczJfbHptYV9leGl0KCk7CisrI2VuZGlmCisgI2lmZGVmIENPTkZJR19KRkZTMl9MWk8KKyAJamZmczJfbHpvX2V4aXQoKTsKKyAjZW5kaWYKKy0tLSBhL2ZzL2pmZnMyL2NvbXByLmgKKysrKyBiL2ZzL2pmZnMyL2NvbXByLmgKK0BAIC0yOSw5ICsyOSw5IEBACisgI2RlZmluZSBKRkZTMl9EWU5SVUJJTl9QUklPUklUWSAgMjAKKyAjZGVmaW5lIEpGRlMyX0xaQVJJX1BSSU9SSVRZICAgICAzMAorICNkZWZpbmUgSkZGUzJfUlRJTUVfUFJJT1JJVFkgICAgIDUwCistI2RlZmluZSBKRkZTMl9aTElCX1BSSU9SSVRZICAgICAgNjAKKy0jZGVmaW5lIEpGRlMyX0xaT19QUklPUklUWSAgICAgICA4MAorLQorKyNkZWZpbmUgSkZGUzJfTFpNQV9QUklPUklUWSAgICAgIDcwCisrI2RlZmluZSBKRkZTMl9aTElCX1BSSU9SSVRZICAgICAgODAKKysjZGVmaW5lIEpGRlMyX0xaT19QUklPUklUWSAgICAgICA5MAorIAorICNkZWZpbmUgSkZGUzJfUlVCSU5NSVBTX0RJU0FCTEVEIC8qIFJVQklOcyB3aWxsIGJlIHVzZWQgb25seSAqLworICNkZWZpbmUgSkZGUzJfRFlOUlVCSU5fRElTQUJMRUQgIC8qCSAgIGZvciBkZWNvbXByZXNzaW9uICovCitAQCAtMTAxLDUgKzEwMSw5IEBAIHZvaWQgamZmczJfemxpYl9leGl0KHZvaWQpOworIGludCBqZmZzMl9sem9faW5pdCh2b2lkKTsKKyB2b2lkIGpmZnMyX2x6b19leGl0KHZvaWQpOworICNlbmRpZgorKyNpZmRlZiBDT05GSUdfSkZGUzJfTFpNQQorK2ludCBqZmZzMl9sem1hX2luaXQodm9pZCk7Cisrdm9pZCBqZmZzMl9sem1hX2V4aXQodm9pZCk7CisrI2VuZGlmCisgCisgI2VuZGlmIC8qIF9fSkZGUzJfQ09NUFJfSF9fICovCistLS0gL2Rldi9udWxsCisrKysgYi9mcy9qZmZzMi9jb21wcl9sem1hLmMKK0BAIC0wLDAgKzEsMTI4IEBACisrLyoKKysgKiBKRkZTMiAtLSBKb3VybmFsbGluZyBGbGFzaCBGaWxlIFN5c3RlbSwgVmVyc2lvbiAyLgorKyAqCisrICogRm9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiwgc2VlIHRoZSBmaWxlICdMSUNFTkNFJyBpbiB0aGlzIGRpcmVjdG9yeS4KKysgKgorKyAqIEpGRlMyIHdyYXBwZXIgdG8gdGhlIExaTUEgQyBTREsKKysgKgorKyAqLworKworKyNpbmNsdWRlIDxsaW51eC9sem1hLmg+CisrI2luY2x1ZGUgImNvbXByLmgiCisrCisrI2lmZGVmIF9fS0VSTkVMX18KKysJc3RhdGljIERFRklORV9NVVRFWChkZWZsYXRlX211dGV4KTsKKysjZW5kaWYKKysKKytDTHptYUVuY0hhbmRsZSAqcDsKKytCeXRlIHByb3BzRW5jb2RlZFtMWk1BX1BST1BTX1NJWkVdOworK1NpemVUIHByb3BzU2l6ZSA9IHNpemVvZihwcm9wc0VuY29kZWQpOworKworK1NUQVRJQyB2b2lkIGx6bWFfZnJlZV93b3Jrc3BhY2Uodm9pZCkKKyt7CisrCUx6bWFFbmNfRGVzdHJveShwLCAmbHptYV9hbGxvYywgJmx6bWFfYWxsb2MpOworK30KKysKKytTVEFUSUMgaW50IElOSVQgbHptYV9hbGxvY193b3Jrc3BhY2UoQ0x6bWFFbmNQcm9wcyAqcHJvcHMpCisreworKwlpZiAoKHAgPSAoQ0x6bWFFbmNIYW5kbGUgKilMem1hRW5jX0NyZWF0ZSgmbHptYV9hbGxvYykpID09IE5VTEwpCisrCXsKKysJCVBSSU5UX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgbHptYSBkZWZsYXRlIHdvcmtzcGFjZVxuIik7CisrCQlyZXR1cm4gLUVOT01FTTsKKysJfQorKworKwlpZiAoTHptYUVuY19TZXRQcm9wcyhwLCBwcm9wcykgIT0gU1pfT0spCisrCXsKKysJCWx6bWFfZnJlZV93b3Jrc3BhY2UoKTsKKysJCXJldHVybiAtMTsKKysJfQorKworKwlpZiAoTHptYUVuY19Xcml0ZVByb3BlcnRpZXMocCwgcHJvcHNFbmNvZGVkLCAmcHJvcHNTaXplKSAhPSBTWl9PSykKKysJeworKwkJbHptYV9mcmVlX3dvcmtzcGFjZSgpOworKwkJcmV0dXJuIC0xOworKwl9CisrCisrCXJldHVybiAwOworK30KKysKKytTVEFUSUMgaW50IGpmZnMyX2x6bWFfY29tcHJlc3ModW5zaWduZWQgY2hhciAqZGF0YV9pbiwgdW5zaWduZWQgY2hhciAqY3BhZ2Vfb3V0LAorKwkJCSAgICAgIHVpbnQzMl90ICpzb3VyY2VsZW4sIHVpbnQzMl90ICpkc3RsZW4pCisreworKwlTaXplVCBjb21wcmVzc19zaXplID0gKFNpemVUKSgqZHN0bGVuKTsKKysJaW50IHJldDsKKysKKysJI2lmZGVmIF9fS0VSTkVMX18KKysJCW11dGV4X2xvY2soJmRlZmxhdGVfbXV0ZXgpOworKwkjZW5kaWYKKysKKysJcmV0ID0gTHptYUVuY19NZW1FbmNvZGUocCwgY3BhZ2Vfb3V0LCAmY29tcHJlc3Nfc2l6ZSwgZGF0YV9pbiwgKnNvdXJjZWxlbiwKKysJCTAsIE5VTEwsICZsem1hX2FsbG9jLCAmbHptYV9hbGxvYyk7CisrCisrCSNpZmRlZiBfX0tFUk5FTF9fCisrCQltdXRleF91bmxvY2soJmRlZmxhdGVfbXV0ZXgpOworKwkjZW5kaWYKKysKKysJaWYgKHJldCAhPSBTWl9PSykKKysJCXJldHVybiAtMTsKKysKKysJKmRzdGxlbiA9ICh1aW50MzJfdCljb21wcmVzc19zaXplOworKworKwlyZXR1cm4gMDsKKyt9CisrCisrU1RBVElDIGludCBqZmZzMl9sem1hX2RlY29tcHJlc3ModW5zaWduZWQgY2hhciAqZGF0YV9pbiwgdW5zaWduZWQgY2hhciAqY3BhZ2Vfb3V0LAorKwkJCQkgdWludDMyX3Qgc3JjbGVuLCB1aW50MzJfdCBkZXN0bGVuKQorK3sKKysJaW50IHJldDsKKysJU2l6ZVQgZGwgPSAoU2l6ZVQpZGVzdGxlbjsKKysJU2l6ZVQgc2wgPSAoU2l6ZVQpc3JjbGVuOworKwlFTHptYVN0YXR1cyBzdGF0dXM7CisrCisrCXJldCA9IEx6bWFEZWNvZGUoY3BhZ2Vfb3V0LCAmZGwsIGRhdGFfaW4sICZzbCwgcHJvcHNFbmNvZGVkLAorKwkJcHJvcHNTaXplLCBMWk1BX0ZJTklTSF9BTlksICZzdGF0dXMsICZsem1hX2FsbG9jKTsKKysKKysJaWYgKHJldCAhPSBTWl9PSyB8fCBzdGF0dXMgPT0gTFpNQV9TVEFUVVNfTk9UX0ZJTklTSEVEIHx8IGRsICE9IChTaXplVClkZXN0bGVuKQorKwkJcmV0dXJuIC0xOworKworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIHN0cnVjdCBqZmZzMl9jb21wcmVzc29yIGpmZnMyX2x6bWFfY29tcCA9IHsKKysJLnByaW9yaXR5ID0gSkZGUzJfTFpNQV9QUklPUklUWSwKKysJLm5hbWUgPSAibHptYSIsCisrCS5jb21wciA9IEpGRlMyX0NPTVBSX0xaTUEsCisrCS5jb21wcmVzcyA9ICZqZmZzMl9sem1hX2NvbXByZXNzLAorKwkuZGVjb21wcmVzcyA9ICZqZmZzMl9sem1hX2RlY29tcHJlc3MsCisrCS5kaXNhYmxlZCA9IDAsCisrfTsKKysKKytpbnQgSU5JVCBqZmZzMl9sem1hX2luaXQodm9pZCkKKyt7CisrCWludCByZXQ7CisrCUNMem1hRW5jUHJvcHMgcHJvcHM7CisrCUx6bWFFbmNQcm9wc19Jbml0KCZwcm9wcyk7CisrCisrCXByb3BzLmRpY3RTaXplID0gTFpNQV9CRVNUX0RJQ1QoMHgyMDAwKTsKKysJcHJvcHMubGV2ZWwgPSBMWk1BX0JFU1RfTEVWRUw7CisrCXByb3BzLmxjID0gTFpNQV9CRVNUX0xDOworKwlwcm9wcy5scCA9IExaTUFfQkVTVF9MUDsKKysJcHJvcHMucGIgPSBMWk1BX0JFU1RfUEI7CisrCXByb3BzLmZiID0gTFpNQV9CRVNUX0ZCOworKworKwlyZXQgPSBsem1hX2FsbG9jX3dvcmtzcGFjZSgmcHJvcHMpOworKwlpZiAocmV0IDwgMCkKKysJCXJldHVybiByZXQ7CisrCisrCXJldCA9IGpmZnMyX3JlZ2lzdGVyX2NvbXByZXNzb3IoJmpmZnMyX2x6bWFfY29tcCk7CisrCWlmIChyZXQpCisrCQlsem1hX2ZyZWVfd29ya3NwYWNlKCk7CisrCisrCXJldHVybiByZXQ7CisrfQorKworK3ZvaWQgamZmczJfbHptYV9leGl0KHZvaWQpCisreworKwlqZmZzMl91bnJlZ2lzdGVyX2NvbXByZXNzb3IoJmpmZnMyX2x6bWFfY29tcCk7CisrCWx6bWFfZnJlZV93b3Jrc3BhY2UoKTsKKyt9CistLS0gYS9mcy9qZmZzMi9zdXBlci5jCisrKysgYi9mcy9qZmZzMi9zdXBlci5jCitAQCAtMzgwLDE0ICszODAsNDEgQEAgc3RhdGljIGludCBfX2luaXQgaW5pdF9qZmZzMl9mcyh2b2lkKQorIAlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBqZmZzMl9yYXdfaW5vZGUpICE9IDY4KTsKKyAJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgamZmczJfcmF3X3N1bW1hcnkpICE9IDMyKTsKKyAKKy0JcHJfaW5mbygidmVyc2lvbiAyLjIuIgorKwlwcl9pbmZvKCJ2ZXJzaW9uIDIuMiIKKyAjaWZkZWYgQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSCisgCSAgICAgICAiIChOQU5EKSIKKyAjZW5kaWYKKyAjaWZkZWYgQ09ORklHX0pGRlMyX1NVTU1BUlkKKy0JICAgICAgICIgKFNVTU1BUlkpICIKKysJICAgICAgICIgKFNVTU1BUlkpIgorICNlbmRpZgorLQkgICAgICAgIiDCqSAyMDAxLTIwMDYgUmVkIEhhdCwgSW5jLlxuIik7CisrI2lmZGVmIENPTkZJR19KRkZTMl9aTElCCisrCSAgICAgICAiIChaTElCKSIKKysjZW5kaWYKKysjaWZkZWYgQ09ORklHX0pGRlMyX0xaTworKwkgICAgICAgIiAoTFpPKSIKKysjZW5kaWYKKysjaWZkZWYgQ09ORklHX0pGRlMyX0xaTUEKKysJICAgICAgICIgKExaTUEpIgorKyNlbmRpZgorKyNpZmRlZiBDT05GSUdfSkZGUzJfUlRJTUUKKysJICAgICAgICIgKFJUSU1FKSIKKysjZW5kaWYKKysjaWZkZWYgQ09ORklHX0pGRlMyX1JVQklOCisrCSAgICAgICAiIChSVUJJTikiCisrI2VuZGlmCisrI2lmZGVmICBDT05GSUdfSkZGUzJfQ01PREVfTk9ORQorKwkgICAgICAgIiAoQ01PREVfTk9ORSkiCisrI2VuZGlmCisrI2lmZGVmIENPTkZJR19KRkZTMl9DTU9ERV9QUklPUklUWQorKwkgICAgICAgIiAoQ01PREVfUFJJT1JJVFkpIgorKyNlbmRpZgorKyNpZmRlZiBDT05GSUdfSkZGUzJfQ01PREVfU0laRQorKwkgICAgICAgIiAoQ01PREVfU0laRSkiCisrI2VuZGlmCisrI2lmZGVmIENPTkZJR19KRkZTMl9DTU9ERV9GQVZPVVJMWk8KKysJICAgICAgICIgKENNT0RFX0ZBVk9VUkxaTykiCisrI2VuZGlmCisrCSAgICAgICAiIChjKSAyMDAxLTIwMDYgUmVkIEhhdCwgSW5jLlxuIik7CisgCisgCWpmZnMyX2lub2RlX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJqZmZzMl9pIiwKKyAJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvKSwKKy0tLSAvZGV2L251bGwKKysrKyBiL2luY2x1ZGUvbGludXgvbHptYS5oCitAQCAtMCwwICsxLDYyIEBACisrI2lmbmRlZiBfX0xaTUFfSF9fCisrI2RlZmluZSBfX0xaTUFfSF9fCisrCisrI2lmZGVmIF9fS0VSTkVMX18KKysJI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorKwkjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKysJI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKysJI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKysJI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKysJI2RlZmluZSBMWk1BX01BTExPQyB2bWFsbG9jCisrCSNkZWZpbmUgTFpNQV9GUkVFIHZmcmVlCisrCSNkZWZpbmUgUFJJTlRfRVJST1IobXNnKSBwcmludGsoS0VSTl9XQVJOSU5HICNtc2cpCisrCSNkZWZpbmUgSU5JVCBfX2luaXQKKysJI2RlZmluZSBTVEFUSUMgc3RhdGljCisrI2Vsc2UKKysJI2luY2x1ZGUgPHN0ZGludC5oPgorKwkjaW5jbHVkZSA8c3RkbGliLmg+CisrCSNpbmNsdWRlIDxzdGRpby5oPgorKwkjaW5jbHVkZSA8dW5pc3RkLmg+CisrCSNpbmNsdWRlIDxzdHJpbmcuaD4KKysJI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorKwkjaW5jbHVkZSA8ZXJybm8uaD4KKysJI2luY2x1ZGUgPGxpbnV4L2pmZnMyLmg+CisrCSNpZm5kZWYgUEFHRV9TSVpFCisrCQlleHRlcm4gaW50IHBhZ2Vfc2l6ZTsKKysJCSNkZWZpbmUgUEFHRV9TSVpFIHBhZ2Vfc2l6ZQorKwkjZW5kaWYKKysJI2RlZmluZSBMWk1BX01BTExPQyBtYWxsb2MKKysJI2RlZmluZSBMWk1BX0ZSRUUgZnJlZQorKwkjZGVmaW5lIFBSSU5UX0VSUk9SKG1zZykgZnByaW50ZihzdGRlcnIsIG1zZykKKysJI2RlZmluZSBJTklUCisrCSNkZWZpbmUgU1RBVElDCisrI2VuZGlmCisrCisrI2luY2x1ZGUgImx6bWEvTHptYURlYy5oIgorKyNpbmNsdWRlICJsem1hL0x6bWFFbmMuaCIKKysKKysjZGVmaW5lIExaTUFfQkVTVF9MRVZFTCAoOSkKKysjZGVmaW5lIExaTUFfQkVTVF9MQyAgICAoMCkKKysjZGVmaW5lIExaTUFfQkVTVF9MUCAgICAoMCkKKysjZGVmaW5lIExaTUFfQkVTVF9QQiAgICAoMCkKKysjZGVmaW5lIExaTUFfQkVTVF9GQiAgKDI3MykKKysKKysjZGVmaW5lIExaTUFfQkVTVF9ESUNUKG4pICgoKGludCkoKG4pIC8gMikpICogMikKKysKKytzdGF0aWMgdm9pZCAqcF9sem1hX21hbGxvYyh2b2lkICpwLCBzaXplX3Qgc2l6ZSkKKyt7CisrCWlmIChzaXplID09IDApCisrCQlyZXR1cm4gTlVMTDsKKysKKysJcmV0dXJuIExaTUFfTUFMTE9DKHNpemUpOworK30KKysKKytzdGF0aWMgdm9pZCBwX2x6bWFfZnJlZSh2b2lkICpwLCB2b2lkICphZGRyZXNzKQorK3sKKysJaWYgKGFkZHJlc3MgIT0gTlVMTCkKKysJCUxaTUFfRlJFRShhZGRyZXNzKTsKKyt9CisrCisrc3RhdGljIElTekFsbG9jIGx6bWFfYWxsb2MgPSB7cF9sem1hX21hbGxvYywgcF9sem1hX2ZyZWV9OworKworKyNlbmRpZgorLS0tIC9kZXYvbnVsbAorKysrIGIvaW5jbHVkZS9saW51eC9sem1hL0x6RmluZC5oCitAQCAtMCwwICsxLDExNSBAQAorKy8qIEx6RmluZC5oIC0tIE1hdGNoIGZpbmRlciBmb3IgTFogYWxnb3JpdGhtcworKzIwMDktMDQtMjIgOiBJZ29yIFBhdmxvdiA6IFB1YmxpYyBkb21haW4gKi8KKysKKysjaWZuZGVmIF9fTFpfRklORF9ICisrI2RlZmluZSBfX0xaX0ZJTkRfSAorKworKyNpbmNsdWRlICJUeXBlcy5oIgorKworKyNpZmRlZiBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIgeworKyNlbmRpZgorKworK3R5cGVkZWYgVUludDMyIENMelJlZjsKKysKKyt0eXBlZGVmIHN0cnVjdCBfQ01hdGNoRmluZGVyCisreworKyAgQnl0ZSAqYnVmZmVyOworKyAgVUludDMyIHBvczsKKysgIFVJbnQzMiBwb3NMaW1pdDsKKysgIFVJbnQzMiBzdHJlYW1Qb3M7CisrICBVSW50MzIgbGVuTGltaXQ7CisrCisrICBVSW50MzIgY3ljbGljQnVmZmVyUG9zOworKyAgVUludDMyIGN5Y2xpY0J1ZmZlclNpemU7IC8qIGl0IG11c3QgYmUgPSAoaGlzdG9yeVNpemUgKyAxKSAqLworKworKyAgVUludDMyIG1hdGNoTWF4TGVuOworKyAgQ0x6UmVmICpoYXNoOworKyAgQ0x6UmVmICpzb247CisrICBVSW50MzIgaGFzaE1hc2s7CisrICBVSW50MzIgY3V0VmFsdWU7CisrCisrICBCeXRlICpidWZmZXJCYXNlOworKyAgSVNlcUluU3RyZWFtICpzdHJlYW07CisrICBpbnQgc3RyZWFtRW5kV2FzUmVhY2hlZDsKKysKKysgIFVJbnQzMiBibG9ja1NpemU7CisrICBVSW50MzIga2VlcFNpemVCZWZvcmU7CisrICBVSW50MzIga2VlcFNpemVBZnRlcjsKKysKKysgIFVJbnQzMiBudW1IYXNoQnl0ZXM7CisrICBpbnQgZGlyZWN0SW5wdXQ7CisrICBzaXplX3QgZGlyZWN0SW5wdXRSZW07CisrICBpbnQgYnRNb2RlOworKyAgaW50IGJpZ0hhc2g7CisrICBVSW50MzIgaGlzdG9yeVNpemU7CisrICBVSW50MzIgZml4ZWRIYXNoU2l6ZTsKKysgIFVJbnQzMiBoYXNoU2l6ZVN1bTsKKysgIFVJbnQzMiBudW1Tb25zOworKyAgU1JlcyByZXN1bHQ7CisrICBVSW50MzIgY3JjWzI1Nl07CisrfSBDTWF0Y2hGaW5kZXI7CisrCisrI2RlZmluZSBJbmxpbmVfTWF0Y2hGaW5kZXJfR2V0UG9pbnRlclRvQ3VycmVudFBvcyhwKSAoKHApLT5idWZmZXIpCisrI2RlZmluZSBJbmxpbmVfTWF0Y2hGaW5kZXJfR2V0SW5kZXhCeXRlKHAsIGluZGV4KSAoKHApLT5idWZmZXJbKEludDMyKShpbmRleCldKQorKworKyNkZWZpbmUgSW5saW5lX01hdGNoRmluZGVyX0dldE51bUF2YWlsYWJsZUJ5dGVzKHApICgocCktPnN0cmVhbVBvcyAtIChwKS0+cG9zKQorKworK2ludCBNYXRjaEZpbmRlcl9OZWVkTW92ZShDTWF0Y2hGaW5kZXIgKnApOworK0J5dGUgKk1hdGNoRmluZGVyX0dldFBvaW50ZXJUb0N1cnJlbnRQb3MoQ01hdGNoRmluZGVyICpwKTsKKyt2b2lkIE1hdGNoRmluZGVyX01vdmVCbG9jayhDTWF0Y2hGaW5kZXIgKnApOworK3ZvaWQgTWF0Y2hGaW5kZXJfUmVhZElmUmVxdWlyZWQoQ01hdGNoRmluZGVyICpwKTsKKysKKyt2b2lkIE1hdGNoRmluZGVyX0NvbnN0cnVjdChDTWF0Y2hGaW5kZXIgKnApOworKworKy8qIENvbmRpdGlvbnM6CisrICAgICBoaXN0b3J5U2l6ZSA8PSAzIEdCCisrICAgICBrZWVwQWRkQnVmZmVyQmVmb3JlICsgbWF0Y2hNYXhMZW4gKyBrZWVwQWRkQnVmZmVyQWZ0ZXIgPCA1MTFNQgorKyovCisraW50IE1hdGNoRmluZGVyX0NyZWF0ZShDTWF0Y2hGaW5kZXIgKnAsIFVJbnQzMiBoaXN0b3J5U2l6ZSwKKysgICAgVUludDMyIGtlZXBBZGRCdWZmZXJCZWZvcmUsIFVJbnQzMiBtYXRjaE1heExlbiwgVUludDMyIGtlZXBBZGRCdWZmZXJBZnRlciwKKysgICAgSVN6QWxsb2MgKmFsbG9jKTsKKyt2b2lkIE1hdGNoRmluZGVyX0ZyZWUoQ01hdGNoRmluZGVyICpwLCBJU3pBbGxvYyAqYWxsb2MpOworK3ZvaWQgTWF0Y2hGaW5kZXJfTm9ybWFsaXplMyhVSW50MzIgc3ViVmFsdWUsIENMelJlZiAqaXRlbXMsIFVJbnQzMiBudW1JdGVtcyk7Cisrdm9pZCBNYXRjaEZpbmRlcl9SZWR1Y2VPZmZzZXRzKENNYXRjaEZpbmRlciAqcCwgVUludDMyIHN1YlZhbHVlKTsKKysKKytVSW50MzIgKiBHZXRNYXRjaGVzU3BlYzEoVUludDMyIGxlbkxpbWl0LCBVSW50MzIgY3VyTWF0Y2gsIFVJbnQzMiBwb3MsIGNvbnN0IEJ5dGUgKmJ1ZmZlciwgQ0x6UmVmICpzb24sCisrICAgIFVJbnQzMiBfY3ljbGljQnVmZmVyUG9zLCBVSW50MzIgX2N5Y2xpY0J1ZmZlclNpemUsIFVJbnQzMiBfY3V0VmFsdWUsCisrICAgIFVJbnQzMiAqZGlzdGFuY2VzLCBVSW50MzIgbWF4TGVuKTsKKysKKysvKgorK0NvbmRpdGlvbnM6CisrICBNZl9HZXROdW1BdmFpbGFibGVCeXRlc19GdW5jIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBlYWNoIE1mX0dldE1hdGNoTGVuX0Z1bmMuCisrICBNZl9HZXRQb2ludGVyVG9DdXJyZW50UG9zX0Z1bmMncyByZXN1bHQgbXVzdCBiZSB1c2VkIG9ubHkgYmVmb3JlIGFueSBvdGhlciBmdW5jdGlvbgorKyovCisrCisrdHlwZWRlZiB2b2lkICgqTWZfSW5pdF9GdW5jKSh2b2lkICpvYmplY3QpOworK3R5cGVkZWYgQnl0ZSAoKk1mX0dldEluZGV4Qnl0ZV9GdW5jKSh2b2lkICpvYmplY3QsIEludDMyIGluZGV4KTsKKyt0eXBlZGVmIFVJbnQzMiAoKk1mX0dldE51bUF2YWlsYWJsZUJ5dGVzX0Z1bmMpKHZvaWQgKm9iamVjdCk7CisrdHlwZWRlZiBjb25zdCBCeXRlICogKCpNZl9HZXRQb2ludGVyVG9DdXJyZW50UG9zX0Z1bmMpKHZvaWQgKm9iamVjdCk7CisrdHlwZWRlZiBVSW50MzIgKCpNZl9HZXRNYXRjaGVzX0Z1bmMpKHZvaWQgKm9iamVjdCwgVUludDMyICpkaXN0YW5jZXMpOworK3R5cGVkZWYgdm9pZCAoKk1mX1NraXBfRnVuYykodm9pZCAqb2JqZWN0LCBVSW50MzIpOworKworK3R5cGVkZWYgc3RydWN0IF9JTWF0Y2hGaW5kZXIKKyt7CisrICBNZl9Jbml0X0Z1bmMgSW5pdDsKKysgIE1mX0dldEluZGV4Qnl0ZV9GdW5jIEdldEluZGV4Qnl0ZTsKKysgIE1mX0dldE51bUF2YWlsYWJsZUJ5dGVzX0Z1bmMgR2V0TnVtQXZhaWxhYmxlQnl0ZXM7CisrICBNZl9HZXRQb2ludGVyVG9DdXJyZW50UG9zX0Z1bmMgR2V0UG9pbnRlclRvQ3VycmVudFBvczsKKysgIE1mX0dldE1hdGNoZXNfRnVuYyBHZXRNYXRjaGVzOworKyAgTWZfU2tpcF9GdW5jIFNraXA7CisrfSBJTWF0Y2hGaW5kZXI7CisrCisrdm9pZCBNYXRjaEZpbmRlcl9DcmVhdGVWVGFibGUoQ01hdGNoRmluZGVyICpwLCBJTWF0Y2hGaW5kZXIgKnZUYWJsZSk7CisrCisrdm9pZCBNYXRjaEZpbmRlcl9Jbml0KENNYXRjaEZpbmRlciAqcCk7CisrVUludDMyIEJ0M1ppcF9NYXRjaEZpbmRlcl9HZXRNYXRjaGVzKENNYXRjaEZpbmRlciAqcCwgVUludDMyICpkaXN0YW5jZXMpOworK1VJbnQzMiBIYzNaaXBfTWF0Y2hGaW5kZXJfR2V0TWF0Y2hlcyhDTWF0Y2hGaW5kZXIgKnAsIFVJbnQzMiAqZGlzdGFuY2VzKTsKKyt2b2lkIEJ0M1ppcF9NYXRjaEZpbmRlcl9Ta2lwKENNYXRjaEZpbmRlciAqcCwgVUludDMyIG51bSk7Cisrdm9pZCBIYzNaaXBfTWF0Y2hGaW5kZXJfU2tpcChDTWF0Y2hGaW5kZXIgKnAsIFVJbnQzMiBudW0pOworKworKyNpZmRlZiBfX2NwbHVzcGx1cworK30KKysjZW5kaWYKKysKKysjZW5kaWYKKy0tLSAvZGV2L251bGwKKysrKyBiL2luY2x1ZGUvbGludXgvbHptYS9Mekhhc2guaAorQEAgLTAsMCArMSw1NCBAQAorKy8qIEx6SGFzaC5oIC0tIEhBU0ggZnVuY3Rpb25zIGZvciBMWiBhbGdvcml0aG1zCisrMjAwOS0wMi0wNyA6IElnb3IgUGF2bG92IDogUHVibGljIGRvbWFpbiAqLworKworKyNpZm5kZWYgX19MWl9IQVNIX0gKKysjZGVmaW5lIF9fTFpfSEFTSF9ICisrCisrI2RlZmluZSBrSGFzaDJTaXplICgxIDw8IDEwKQorKyNkZWZpbmUga0hhc2gzU2l6ZSAoMSA8PCAxNikKKysjZGVmaW5lIGtIYXNoNFNpemUgKDEgPDwgMjApCisrCisrI2RlZmluZSBrRml4M0hhc2hTaXplIChrSGFzaDJTaXplKQorKyNkZWZpbmUga0ZpeDRIYXNoU2l6ZSAoa0hhc2gyU2l6ZSArIGtIYXNoM1NpemUpCisrI2RlZmluZSBrRml4NUhhc2hTaXplIChrSGFzaDJTaXplICsga0hhc2gzU2l6ZSArIGtIYXNoNFNpemUpCisrCisrI2RlZmluZSBIQVNIMl9DQUxDIGhhc2hWYWx1ZSA9IGN1clswXSB8ICgoVUludDMyKWN1clsxXSA8PCA4KTsKKysKKysjZGVmaW5lIEhBU0gzX0NBTEMgeyBcCisrICBVSW50MzIgdGVtcCA9IHAtPmNyY1tjdXJbMF1dIF4gY3VyWzFdOyBcCisrICBoYXNoMlZhbHVlID0gdGVtcCAmIChrSGFzaDJTaXplIC0gMSk7IFwKKysgIGhhc2hWYWx1ZSA9ICh0ZW1wIF4gKChVSW50MzIpY3VyWzJdIDw8IDgpKSAmIHAtPmhhc2hNYXNrOyB9CisrCisrI2RlZmluZSBIQVNINF9DQUxDIHsgXAorKyAgVUludDMyIHRlbXAgPSBwLT5jcmNbY3VyWzBdXSBeIGN1clsxXTsgXAorKyAgaGFzaDJWYWx1ZSA9IHRlbXAgJiAoa0hhc2gyU2l6ZSAtIDEpOyBcCisrICBoYXNoM1ZhbHVlID0gKHRlbXAgXiAoKFVJbnQzMiljdXJbMl0gPDwgOCkpICYgKGtIYXNoM1NpemUgLSAxKTsgXAorKyAgaGFzaFZhbHVlID0gKHRlbXAgXiAoKFVJbnQzMiljdXJbMl0gPDwgOCkgXiAocC0+Y3JjW2N1clszXV0gPDwgNSkpICYgcC0+aGFzaE1hc2s7IH0KKysKKysjZGVmaW5lIEhBU0g1X0NBTEMgeyBcCisrICBVSW50MzIgdGVtcCA9IHAtPmNyY1tjdXJbMF1dIF4gY3VyWzFdOyBcCisrICBoYXNoMlZhbHVlID0gdGVtcCAmIChrSGFzaDJTaXplIC0gMSk7IFwKKysgIGhhc2gzVmFsdWUgPSAodGVtcCBeICgoVUludDMyKWN1clsyXSA8PCA4KSkgJiAoa0hhc2gzU2l6ZSAtIDEpOyBcCisrICBoYXNoNFZhbHVlID0gKHRlbXAgXiAoKFVJbnQzMiljdXJbMl0gPDwgOCkgXiAocC0+Y3JjW2N1clszXV0gPDwgNSkpOyBcCisrICBoYXNoVmFsdWUgPSAoaGFzaDRWYWx1ZSBeIChwLT5jcmNbY3VyWzRdXSA8PCAzKSkgJiBwLT5oYXNoTWFzazsgXAorKyAgaGFzaDRWYWx1ZSAmPSAoa0hhc2g0U2l6ZSAtIDEpOyB9CisrCisrLyogI2RlZmluZSBIQVNIX1pJUF9DQUxDIGhhc2hWYWx1ZSA9ICgoY3VyWzBdIHwgKChVSW50MzIpY3VyWzFdIDw8IDgpKSBeIHAtPmNyY1tjdXJbMl1dKSAmIDB4RkZGRjsgKi8KKysjZGVmaW5lIEhBU0hfWklQX0NBTEMgaGFzaFZhbHVlID0gKChjdXJbMl0gfCAoKFVJbnQzMiljdXJbMF0gPDwgOCkpIF4gcC0+Y3JjW2N1clsxXV0pICYgMHhGRkZGOworKworKworKyNkZWZpbmUgTVRfSEFTSDJfQ0FMQyBcCisrICBoYXNoMlZhbHVlID0gKHAtPmNyY1tjdXJbMF1dIF4gY3VyWzFdKSAmIChrSGFzaDJTaXplIC0gMSk7CisrCisrI2RlZmluZSBNVF9IQVNIM19DQUxDIHsgXAorKyAgVUludDMyIHRlbXAgPSBwLT5jcmNbY3VyWzBdXSBeIGN1clsxXTsgXAorKyAgaGFzaDJWYWx1ZSA9IHRlbXAgJiAoa0hhc2gyU2l6ZSAtIDEpOyBcCisrICBoYXNoM1ZhbHVlID0gKHRlbXAgXiAoKFVJbnQzMiljdXJbMl0gPDwgOCkpICYgKGtIYXNoM1NpemUgLSAxKTsgfQorKworKyNkZWZpbmUgTVRfSEFTSDRfQ0FMQyB7IFwKKysgIFVJbnQzMiB0ZW1wID0gcC0+Y3JjW2N1clswXV0gXiBjdXJbMV07IFwKKysgIGhhc2gyVmFsdWUgPSB0ZW1wICYgKGtIYXNoMlNpemUgLSAxKTsgXAorKyAgaGFzaDNWYWx1ZSA9ICh0ZW1wIF4gKChVSW50MzIpY3VyWzJdIDw8IDgpKSAmIChrSGFzaDNTaXplIC0gMSk7IFwKKysgIGhhc2g0VmFsdWUgPSAodGVtcCBeICgoVUludDMyKWN1clsyXSA8PCA4KSBeIChwLT5jcmNbY3VyWzNdXSA8PCA1KSkgJiAoa0hhc2g0U2l6ZSAtIDEpOyB9CisrCisrI2VuZGlmCistLS0gL2Rldi9udWxsCisrKysgYi9pbmNsdWRlL2xpbnV4L2x6bWEvTHptYURlYy5oCitAQCAtMCwwICsxLDIzMSBAQAorKy8qIEx6bWFEZWMuaCAtLSBMWk1BIERlY29kZXIKKysyMDA5LTAyLTA3IDogSWdvciBQYXZsb3YgOiBQdWJsaWMgZG9tYWluICovCisrCisrI2lmbmRlZiBfX0xaTUFfREVDX0gKKysjZGVmaW5lIF9fTFpNQV9ERUNfSAorKworKyNpbmNsdWRlICJUeXBlcy5oIgorKworKyNpZmRlZiBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIgeworKyNlbmRpZgorKworKy8qICNkZWZpbmUgX0xaTUFfUFJPQjMyICovCisrLyogX0xaTUFfUFJPQjMyIGNhbiBpbmNyZWFzZSB0aGUgc3BlZWQgb24gc29tZSBDUFVzLAorKyAgIGJ1dCBtZW1vcnkgdXNhZ2UgZm9yIENMem1hRGVjOjpwcm9icyB3aWxsIGJlIGRvdWJsZWQgaW4gdGhhdCBjYXNlICovCisrCisrI2lmZGVmIF9MWk1BX1BST0IzMgorKyNkZWZpbmUgQ0x6bWFQcm9iIFVJbnQzMgorKyNlbHNlCisrI2RlZmluZSBDTHptYVByb2IgVUludDE2CisrI2VuZGlmCisrCisrCisrLyogLS0tLS0tLS0tLSBMWk1BIFByb3BlcnRpZXMgLS0tLS0tLS0tLSAqLworKworKyNkZWZpbmUgTFpNQV9QUk9QU19TSVpFIDUKKysKKyt0eXBlZGVmIHN0cnVjdCBfQ0x6bWFQcm9wcworK3sKKysgIHVuc2lnbmVkIGxjLCBscCwgcGI7CisrICBVSW50MzIgZGljU2l6ZTsKKyt9IENMem1hUHJvcHM7CisrCisrLyogTHptYVByb3BzX0RlY29kZSAtIGRlY29kZXMgcHJvcGVydGllcworK1JldHVybnM6CisrICBTWl9PSworKyAgU1pfRVJST1JfVU5TVVBQT1JURUQgLSBVbnN1cHBvcnRlZCBwcm9wZXJ0aWVzCisrKi8KKysKKytTUmVzIEx6bWFQcm9wc19EZWNvZGUoQ0x6bWFQcm9wcyAqcCwgY29uc3QgQnl0ZSAqZGF0YSwgdW5zaWduZWQgc2l6ZSk7CisrCisrCisrLyogLS0tLS0tLS0tLSBMWk1BIERlY29kZXIgc3RhdGUgLS0tLS0tLS0tLSAqLworKworKy8qIExaTUFfUkVRVUlSRURfSU5QVVRfTUFYID0gbnVtYmVyIG9mIHJlcXVpcmVkIGlucHV0IGJ5dGVzIGZvciB3b3JzdCBjYXNlLgorKyAgIE51bSBiaXRzID0gbG9nMigoMl4xMSAvIDMxKSBeIDIyKSArIDI2IDwgMTM0ICsgMjYgPSAxNjA7ICovCisrCisrI2RlZmluZSBMWk1BX1JFUVVJUkVEX0lOUFVUX01BWCAyMAorKworK3R5cGVkZWYgc3RydWN0CisreworKyAgQ0x6bWFQcm9wcyBwcm9wOworKyAgQ0x6bWFQcm9iICpwcm9iczsKKysgIEJ5dGUgKmRpYzsKKysgIGNvbnN0IEJ5dGUgKmJ1ZjsKKysgIFVJbnQzMiByYW5nZSwgY29kZTsKKysgIFNpemVUIGRpY1BvczsKKysgIFNpemVUIGRpY0J1ZlNpemU7CisrICBVSW50MzIgcHJvY2Vzc2VkUG9zOworKyAgVUludDMyIGNoZWNrRGljU2l6ZTsKKysgIHVuc2lnbmVkIHN0YXRlOworKyAgVUludDMyIHJlcHNbNF07CisrICB1bnNpZ25lZCByZW1haW5MZW47CisrICBpbnQgbmVlZEZsdXNoOworKyAgaW50IG5lZWRJbml0U3RhdGU7CisrICBVSW50MzIgbnVtUHJvYnM7CisrICB1bnNpZ25lZCB0ZW1wQnVmU2l6ZTsKKysgIEJ5dGUgdGVtcEJ1ZltMWk1BX1JFUVVJUkVEX0lOUFVUX01BWF07CisrfSBDTHptYURlYzsKKysKKysjZGVmaW5lIEx6bWFEZWNfQ29uc3RydWN0KHApIHsgKHApLT5kaWMgPSAwOyAocCktPnByb2JzID0gMDsgfQorKworK3ZvaWQgTHptYURlY19Jbml0KENMem1hRGVjICpwKTsKKysKKysvKiBUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIExaTUEgc3RyZWFtczoKKysgICAgIDApIFN0cmVhbSB3aXRoIGVuZCBtYXJrLiBUaGF0IGVuZCBtYXJrIGFkZHMgYWJvdXQgNiBieXRlcyB0byBjb21wcmVzc2VkIHNpemUuCisrICAgICAxKSBTdHJlYW0gd2l0aG91dCBlbmQgbWFyay4gWW91IG11c3Qga25vdyBleGFjdCB1bmNvbXByZXNzZWQgc2l6ZSB0byBkZWNvbXByZXNzIHN1Y2ggc3RyZWFtLiAqLworKworK3R5cGVkZWYgZW51bQorK3sKKysgIExaTUFfRklOSVNIX0FOWSwgICAvKiBmaW5pc2ggYXQgYW55IHBvaW50ICovCisrICBMWk1BX0ZJTklTSF9FTkQgICAgLyogYmxvY2sgbXVzdCBiZSBmaW5pc2hlZCBhdCB0aGUgZW5kICovCisrfSBFTHptYUZpbmlzaE1vZGU7CisrCisrLyogRUx6bWFGaW5pc2hNb2RlIGhhcyBtZWFuaW5nIG9ubHkgaWYgdGhlIGRlY29kaW5nIHJlYWNoZXMgb3V0cHV0IGxpbWl0ICEhIQorKworKyAgIFlvdSBtdXN0IHVzZSBMWk1BX0ZJTklTSF9FTkQsIHdoZW4geW91IGtub3cgdGhhdCBjdXJyZW50IG91dHB1dCBidWZmZXIKKysgICBjb3ZlcnMgbGFzdCBieXRlcyBvZiBibG9jay4gSW4gb3RoZXIgY2FzZXMgeW91IG11c3QgdXNlIExaTUFfRklOSVNIX0FOWS4KKysKKysgICBJZiBMWk1BIGRlY29kZXIgc2VlcyBlbmQgbWFya2VyIGJlZm9yZSByZWFjaGluZyBvdXRwdXQgbGltaXQsIGl0IHJldHVybnMgU1pfT0ssCisrICAgYW5kIG91dHB1dCB2YWx1ZSBvZiBkZXN0TGVuIHdpbGwgYmUgbGVzcyB0aGFuIG91dHB1dCBidWZmZXIgc2l6ZSBsaW1pdC4KKysgICBZb3UgY2FuIGNoZWNrIHN0YXR1cyByZXN1bHQgYWxzby4KKysKKysgICBZb3UgY2FuIHVzZSBtdWx0aXBsZSBjaGVja3MgdG8gdGVzdCBkYXRhIGludGVncml0eSBhZnRlciBmdWxsIGRlY29tcHJlc3Npb246CisrICAgICAxKSBDaGVjayBSZXN1bHQgYW5kICJzdGF0dXMiIHZhcmlhYmxlLgorKyAgICAgMikgQ2hlY2sgdGhhdCBvdXRwdXQoZGVzdExlbikgPSB1bmNvbXByZXNzZWRTaXplLCBpZiB5b3Uga25vdyByZWFsIHVuY29tcHJlc3NlZFNpemUuCisrICAgICAzKSBDaGVjayB0aGF0IG91dHB1dChzcmNMZW4pID0gY29tcHJlc3NlZFNpemUsIGlmIHlvdSBrbm93IHJlYWwgY29tcHJlc3NlZFNpemUuCisrICAgICAgICBZb3UgbXVzdCB1c2UgY29ycmVjdCBmaW5pc2ggbW9kZSBpbiB0aGF0IGNhc2UuICovCisrCisrdHlwZWRlZiBlbnVtCisreworKyAgTFpNQV9TVEFUVVNfTk9UX1NQRUNJRklFRCwgICAgICAgICAgICAgICAvKiB1c2UgbWFpbiBlcnJvciBjb2RlIGluc3RlYWQgKi8KKysgIExaTUFfU1RBVFVTX0ZJTklTSEVEX1dJVEhfTUFSSywgICAgICAgICAgLyogc3RyZWFtIHdhcyBmaW5pc2hlZCB3aXRoIGVuZCBtYXJrLiAqLworKyAgTFpNQV9TVEFUVVNfTk9UX0ZJTklTSEVELCAgICAgICAgICAgICAgICAvKiBzdHJlYW0gd2FzIG5vdCBmaW5pc2hlZCAqLworKyAgTFpNQV9TVEFUVVNfTkVFRFNfTU9SRV9JTlBVVCwgICAgICAgICAgICAvKiB5b3UgbXVzdCBwcm92aWRlIG1vcmUgaW5wdXQgYnl0ZXMgKi8KKysgIExaTUFfU1RBVFVTX01BWUJFX0ZJTklTSEVEX1dJVEhPVVRfTUFSSyAgLyogdGhlcmUgaXMgcHJvYmFiaWxpdHkgdGhhdCBzdHJlYW0gd2FzIGZpbmlzaGVkIHdpdGhvdXQgZW5kIG1hcmsgKi8KKyt9IEVMem1hU3RhdHVzOworKworKy8qIEVMem1hU3RhdHVzIGlzIHVzZWQgb25seSBhcyBvdXRwdXQgdmFsdWUgZm9yIGZ1bmN0aW9uIGNhbGwgKi8KKysKKysKKysvKiAtLS0tLS0tLS0tIEludGVyZmFjZXMgLS0tLS0tLS0tLSAqLworKworKy8qIFRoZXJlIGFyZSAzIGxldmVscyBvZiBpbnRlcmZhY2VzOgorKyAgICAgMSkgRGljdGlvbmFyeSBJbnRlcmZhY2UKKysgICAgIDIpIEJ1ZmZlciBJbnRlcmZhY2UKKysgICAgIDMpIE9uZSBDYWxsIEludGVyZmFjZQorKyAgIFlvdSBjYW4gc2VsZWN0IGFueSBvZiB0aGVzZSBpbnRlcmZhY2VzLCBidXQgZG9uJ3QgbWl4IGZ1bmN0aW9ucyBmcm9tIGRpZmZlcmVudAorKyAgIGdyb3VwcyBmb3Igc2FtZSBvYmplY3QuICovCisrCisrCisrLyogVGhlcmUgYXJlIHR3byB2YXJpYW50cyB0byBhbGxvY2F0ZSBzdGF0ZSBmb3IgRGljdGlvbmFyeSBJbnRlcmZhY2U6CisrICAgICAxKSBMem1hRGVjX0FsbG9jYXRlIC8gTHptYURlY19GcmVlCisrICAgICAyKSBMem1hRGVjX0FsbG9jYXRlUHJvYnMgLyBMem1hRGVjX0ZyZWVQcm9icworKyAgIFlvdSBjYW4gdXNlIHZhcmlhbnQgMiwgaWYgeW91IHNldCBkaWN0aW9uYXJ5IGJ1ZmZlciBtYW51YWxseS4KKysgICBGb3IgQnVmZmVyIEludGVyZmFjZSB5b3UgbXVzdCBhbHdheXMgdXNlIHZhcmlhbnQgMS4KKysKKytMem1hRGVjX0FsbG9jYXRlKiBjYW4gcmV0dXJuOgorKyAgU1pfT0sKKysgIFNaX0VSUk9SX01FTSAgICAgICAgIC0gTWVtb3J5IGFsbG9jYXRpb24gZXJyb3IKKysgIFNaX0VSUk9SX1VOU1VQUE9SVEVEIC0gVW5zdXBwb3J0ZWQgcHJvcGVydGllcworKyovCisrCisrU1JlcyBMem1hRGVjX0FsbG9jYXRlUHJvYnMoQ0x6bWFEZWMgKnAsIGNvbnN0IEJ5dGUgKnByb3BzLCB1bnNpZ25lZCBwcm9wc1NpemUsIElTekFsbG9jICphbGxvYyk7Cisrdm9pZCBMem1hRGVjX0ZyZWVQcm9icyhDTHptYURlYyAqcCwgSVN6QWxsb2MgKmFsbG9jKTsKKysKKytTUmVzIEx6bWFEZWNfQWxsb2NhdGUoQ0x6bWFEZWMgKnN0YXRlLCBjb25zdCBCeXRlICpwcm9wLCB1bnNpZ25lZCBwcm9wc1NpemUsIElTekFsbG9jICphbGxvYyk7Cisrdm9pZCBMem1hRGVjX0ZyZWUoQ0x6bWFEZWMgKnN0YXRlLCBJU3pBbGxvYyAqYWxsb2MpOworKworKy8qIC0tLS0tLS0tLS0gRGljdGlvbmFyeSBJbnRlcmZhY2UgLS0tLS0tLS0tLSAqLworKworKy8qIFlvdSBjYW4gdXNlIGl0LCBpZiB5b3Ugd2FudCB0byBlbGltaW5hdGUgdGhlIG92ZXJoZWFkIGZvciBkYXRhIGNvcHlpbmcgZnJvbQorKyAgIGRpY3Rpb25hcnkgdG8gc29tZSBvdGhlciBleHRlcm5hbCBidWZmZXIuCisrICAgWW91IG11c3Qgd29yayB3aXRoIENMem1hRGVjIHZhcmlhYmxlcyBkaXJlY3RseSBpbiB0aGlzIGludGVyZmFjZS4KKysKKysgICBTVEVQUzoKKysgICAgIEx6bWFEZWNfQ29uc3RyKCkKKysgICAgIEx6bWFEZWNfQWxsb2NhdGUoKQorKyAgICAgZm9yIChlYWNoIG5ldyBzdHJlYW0pCisrICAgICB7CisrICAgICAgIEx6bWFEZWNfSW5pdCgpCisrICAgICAgIHdoaWxlIChpdCBuZWVkcyBtb3JlIGRlY29tcHJlc3Npb24pCisrICAgICAgIHsKKysgICAgICAgICBMem1hRGVjX0RlY29kZVRvRGljKCkKKysgICAgICAgICB1c2UgZGF0YSBmcm9tIENMem1hRGVjOjpkaWMgYW5kIHVwZGF0ZSBDTHptYURlYzo6ZGljUG9zCisrICAgICAgIH0KKysgICAgIH0KKysgICAgIEx6bWFEZWNfRnJlZSgpCisrKi8KKysKKysvKiBMem1hRGVjX0RlY29kZVRvRGljCisrCisrICAgVGhlIGRlY29kaW5nIHRvIGludGVybmFsIGRpY3Rpb25hcnkgYnVmZmVyIChDTHptYURlYzo6ZGljKS4KKysgICBZb3UgbXVzdCBtYW51YWxseSB1cGRhdGUgQ0x6bWFEZWM6OmRpY1BvcywgaWYgaXQgcmVhY2hlcyBDTHptYURlYzo6ZGljQnVmU2l6ZSAhISEKKysKKytmaW5pc2hNb2RlOgorKyAgSXQgaGFzIG1lYW5pbmcgb25seSBpZiB0aGUgZGVjb2RpbmcgcmVhY2hlcyBvdXRwdXQgbGltaXQgKGRpY0xpbWl0KS4KKysgIExaTUFfRklOSVNIX0FOWSAtIERlY29kZSBqdXN0IGRpY0xpbWl0IGJ5dGVzLgorKyAgTFpNQV9GSU5JU0hfRU5EIC0gU3RyZWFtIG11c3QgYmUgZmluaXNoZWQgYWZ0ZXIgZGljTGltaXQuCisrCisrUmV0dXJuczoKKysgIFNaX09LCisrICAgIHN0YXR1czoKKysgICAgICBMWk1BX1NUQVRVU19GSU5JU0hFRF9XSVRIX01BUksKKysgICAgICBMWk1BX1NUQVRVU19OT1RfRklOSVNIRUQKKysgICAgICBMWk1BX1NUQVRVU19ORUVEU19NT1JFX0lOUFVUCisrICAgICAgTFpNQV9TVEFUVVNfTUFZQkVfRklOSVNIRURfV0lUSE9VVF9NQVJLCisrICBTWl9FUlJPUl9EQVRBIC0gRGF0YSBlcnJvcgorKyovCisrCisrU1JlcyBMem1hRGVjX0RlY29kZVRvRGljKENMem1hRGVjICpwLCBTaXplVCBkaWNMaW1pdCwKKysgICAgY29uc3QgQnl0ZSAqc3JjLCBTaXplVCAqc3JjTGVuLCBFTHptYUZpbmlzaE1vZGUgZmluaXNoTW9kZSwgRUx6bWFTdGF0dXMgKnN0YXR1cyk7CisrCisrCisrLyogLS0tLS0tLS0tLSBCdWZmZXIgSW50ZXJmYWNlIC0tLS0tLS0tLS0gKi8KKysKKysvKiBJdCdzIHpsaWItbGlrZSBpbnRlcmZhY2UuCisrICAgU2VlIEx6bWFEZWNfRGVjb2RlVG9EaWMgZGVzY3JpcHRpb24gZm9yIGluZm9ybWF0aW9uIGFib3V0IFNURVBTIGFuZCByZXR1cm4gcmVzdWx0cywKKysgICBidXQgeW91IG11c3QgdXNlIEx6bWFEZWNfRGVjb2RlVG9CdWYgaW5zdGVhZCBvZiBMem1hRGVjX0RlY29kZVRvRGljIGFuZCB5b3UgZG9uJ3QgbmVlZAorKyAgIHRvIHdvcmsgd2l0aCBDTHptYURlYyB2YXJpYWJsZXMgbWFudWFsbHkuCisrCisrZmluaXNoTW9kZToKKysgIEl0IGhhcyBtZWFuaW5nIG9ubHkgaWYgdGhlIGRlY29kaW5nIHJlYWNoZXMgb3V0cHV0IGxpbWl0ICgqZGVzdExlbikuCisrICBMWk1BX0ZJTklTSF9BTlkgLSBEZWNvZGUganVzdCBkZXN0TGVuIGJ5dGVzLgorKyAgTFpNQV9GSU5JU0hfRU5EIC0gU3RyZWFtIG11c3QgYmUgZmluaXNoZWQgYWZ0ZXIgKCpkZXN0TGVuKS4KKysqLworKworK1NSZXMgTHptYURlY19EZWNvZGVUb0J1ZihDTHptYURlYyAqcCwgQnl0ZSAqZGVzdCwgU2l6ZVQgKmRlc3RMZW4sCisrICAgIGNvbnN0IEJ5dGUgKnNyYywgU2l6ZVQgKnNyY0xlbiwgRUx6bWFGaW5pc2hNb2RlIGZpbmlzaE1vZGUsIEVMem1hU3RhdHVzICpzdGF0dXMpOworKworKworKy8qIC0tLS0tLS0tLS0gT25lIENhbGwgSW50ZXJmYWNlIC0tLS0tLS0tLS0gKi8KKysKKysvKiBMem1hRGVjb2RlCisrCisrZmluaXNoTW9kZToKKysgIEl0IGhhcyBtZWFuaW5nIG9ubHkgaWYgdGhlIGRlY29kaW5nIHJlYWNoZXMgb3V0cHV0IGxpbWl0ICgqZGVzdExlbikuCisrICBMWk1BX0ZJTklTSF9BTlkgLSBEZWNvZGUganVzdCBkZXN0TGVuIGJ5dGVzLgorKyAgTFpNQV9GSU5JU0hfRU5EIC0gU3RyZWFtIG11c3QgYmUgZmluaXNoZWQgYWZ0ZXIgKCpkZXN0TGVuKS4KKysKKytSZXR1cm5zOgorKyAgU1pfT0sKKysgICAgc3RhdHVzOgorKyAgICAgIExaTUFfU1RBVFVTX0ZJTklTSEVEX1dJVEhfTUFSSworKyAgICAgIExaTUFfU1RBVFVTX05PVF9GSU5JU0hFRAorKyAgICAgIExaTUFfU1RBVFVTX01BWUJFX0ZJTklTSEVEX1dJVEhPVVRfTUFSSworKyAgU1pfRVJST1JfREFUQSAtIERhdGEgZXJyb3IKKysgIFNaX0VSUk9SX01FTSAgLSBNZW1vcnkgYWxsb2NhdGlvbiBlcnJvcgorKyAgU1pfRVJST1JfVU5TVVBQT1JURUQgLSBVbnN1cHBvcnRlZCBwcm9wZXJ0aWVzCisrICBTWl9FUlJPUl9JTlBVVF9FT0YgLSBJdCBuZWVkcyBtb3JlIGJ5dGVzIGluIGlucHV0IGJ1ZmZlciAoc3JjKS4KKysqLworKworK1NSZXMgTHptYURlY29kZShCeXRlICpkZXN0LCBTaXplVCAqZGVzdExlbiwgY29uc3QgQnl0ZSAqc3JjLCBTaXplVCAqc3JjTGVuLAorKyAgICBjb25zdCBCeXRlICpwcm9wRGF0YSwgdW5zaWduZWQgcHJvcFNpemUsIEVMem1hRmluaXNoTW9kZSBmaW5pc2hNb2RlLAorKyAgICBFTHptYVN0YXR1cyAqc3RhdHVzLCBJU3pBbGxvYyAqYWxsb2MpOworKworKyNpZmRlZiBfX2NwbHVzcGx1cworK30KKysjZW5kaWYKKysKKysjZW5kaWYKKy0tLSAvZGV2L251bGwKKysrKyBiL2luY2x1ZGUvbGludXgvbHptYS9Mem1hRW5jLmgKK0BAIC0wLDAgKzEsODAgQEAKKysvKiAgTHptYUVuYy5oIC0tIExaTUEgRW5jb2RlcgorKzIwMDktMDItMDcgOiBJZ29yIFBhdmxvdiA6IFB1YmxpYyBkb21haW4gKi8KKysKKysjaWZuZGVmIF9fTFpNQV9FTkNfSAorKyNkZWZpbmUgX19MWk1BX0VOQ19ICisrCisrI2luY2x1ZGUgIlR5cGVzLmgiCisrCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIiB7CisrI2VuZGlmCisrCisrI2RlZmluZSBMWk1BX1BST1BTX1NJWkUgNQorKworK3R5cGVkZWYgc3RydWN0IF9DTHptYUVuY1Byb3BzCisreworKyAgaW50IGxldmVsOyAgICAgICAvKiAgMCA8PSBsZXZlbCA8PSA5ICovCisrICBVSW50MzIgZGljdFNpemU7IC8qICgxIDw8IDEyKSA8PSBkaWN0U2l6ZSA8PSAoMSA8PCAyNykgZm9yIDMyLWJpdCB2ZXJzaW9uCisrICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEyKSA8PSBkaWN0U2l6ZSA8PSAoMSA8PCAzMCkgZm9yIDY0LWJpdCB2ZXJzaW9uCisrICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ID0gKDEgPDwgMjQpICovCisrICBpbnQgbGM7ICAgICAgICAgIC8qIDAgPD0gbGMgPD0gOCwgZGVmYXVsdCA9IDMgKi8KKysgIGludCBscDsgICAgICAgICAgLyogMCA8PSBscCA8PSA0LCBkZWZhdWx0ID0gMCAqLworKyAgaW50IHBiOyAgICAgICAgICAvKiAwIDw9IHBiIDw9IDQsIGRlZmF1bHQgPSAyICovCisrICBpbnQgYWxnbzsgICAgICAgIC8qIDAgLSBmYXN0LCAxIC0gbm9ybWFsLCBkZWZhdWx0ID0gMSAqLworKyAgaW50IGZiOyAgICAgICAgICAvKiA1IDw9IGZiIDw9IDI3MywgZGVmYXVsdCA9IDMyICovCisrICBpbnQgYnRNb2RlOyAgICAgIC8qIDAgLSBoYXNoQ2hhaW4gTW9kZSwgMSAtIGJpblRyZWUgbW9kZSAtIG5vcm1hbCwgZGVmYXVsdCA9IDEgKi8KKysgIGludCBudW1IYXNoQnl0ZXM7IC8qIDIsIDMgb3IgNCwgZGVmYXVsdCA9IDQgKi8KKysgIFVJbnQzMiBtYzsgICAgICAgIC8qIDEgPD0gbWMgPD0gKDEgPDwgMzApLCBkZWZhdWx0ID0gMzIgKi8KKysgIHVuc2lnbmVkIHdyaXRlRW5kTWFyazsgIC8qIDAgLSBkbyBub3Qgd3JpdGUgRU9QTSwgMSAtIHdyaXRlIEVPUE0sIGRlZmF1bHQgPSAwICovCisrICBpbnQgbnVtVGhyZWFkczsgIC8qIDEgb3IgMiwgZGVmYXVsdCA9IDIgKi8KKyt9IENMem1hRW5jUHJvcHM7CisrCisrdm9pZCBMem1hRW5jUHJvcHNfSW5pdChDTHptYUVuY1Byb3BzICpwKTsKKyt2b2lkIEx6bWFFbmNQcm9wc19Ob3JtYWxpemUoQ0x6bWFFbmNQcm9wcyAqcCk7CisrVUludDMyIEx6bWFFbmNQcm9wc19HZXREaWN0U2l6ZShjb25zdCBDTHptYUVuY1Byb3BzICpwcm9wczIpOworKworKworKy8qIC0tLS0tLS0tLS0gQ0x6bWFFbmNIYW5kbGUgSW50ZXJmYWNlIC0tLS0tLS0tLS0gKi8KKysKKysvKiBMem1hRW5jXyogZnVuY3Rpb25zIGNhbiByZXR1cm4gdGhlIGZvbGxvd2luZyBleGl0IGNvZGVzOgorK1JldHVybnM6CisrICBTWl9PSyAgICAgICAgICAgLSBPSworKyAgU1pfRVJST1JfTUVNICAgIC0gTWVtb3J5IGFsbG9jYXRpb24gZXJyb3IKKysgIFNaX0VSUk9SX1BBUkFNICAtIEluY29ycmVjdCBwYXJhbWF0ZXIgaW4gcHJvcHMKKysgIFNaX0VSUk9SX1dSSVRFICAtIFdyaXRlIGNhbGxiYWNrIGVycm9yLgorKyAgU1pfRVJST1JfUFJPR1JFU1MgLSBzb21lIGJyZWFrIGZyb20gcHJvZ3Jlc3MgY2FsbGJhY2sKKysgIFNaX0VSUk9SX1RIUkVBRCAtIGVycm9ycyBpbiBtdWx0aXRocmVhZGluZyBmdW5jdGlvbnMgKG9ubHkgZm9yIE10IHZlcnNpb24pCisrKi8KKysKKyt0eXBlZGVmIHZvaWQgKiBDTHptYUVuY0hhbmRsZTsKKysKKytDTHptYUVuY0hhbmRsZSBMem1hRW5jX0NyZWF0ZShJU3pBbGxvYyAqYWxsb2MpOworK3ZvaWQgTHptYUVuY19EZXN0cm95KENMem1hRW5jSGFuZGxlIHAsIElTekFsbG9jICphbGxvYywgSVN6QWxsb2MgKmFsbG9jQmlnKTsKKytTUmVzIEx6bWFFbmNfU2V0UHJvcHMoQ0x6bWFFbmNIYW5kbGUgcCwgY29uc3QgQ0x6bWFFbmNQcm9wcyAqcHJvcHMpOworK1NSZXMgTHptYUVuY19Xcml0ZVByb3BlcnRpZXMoQ0x6bWFFbmNIYW5kbGUgcCwgQnl0ZSAqcHJvcGVydGllcywgU2l6ZVQgKnNpemUpOworK1NSZXMgTHptYUVuY19FbmNvZGUoQ0x6bWFFbmNIYW5kbGUgcCwgSVNlcU91dFN0cmVhbSAqb3V0U3RyZWFtLCBJU2VxSW5TdHJlYW0gKmluU3RyZWFtLAorKyAgICBJQ29tcHJlc3NQcm9ncmVzcyAqcHJvZ3Jlc3MsIElTekFsbG9jICphbGxvYywgSVN6QWxsb2MgKmFsbG9jQmlnKTsKKytTUmVzIEx6bWFFbmNfTWVtRW5jb2RlKENMem1hRW5jSGFuZGxlIHAsIEJ5dGUgKmRlc3QsIFNpemVUICpkZXN0TGVuLCBjb25zdCBCeXRlICpzcmMsIFNpemVUIHNyY0xlbiwKKysgICAgaW50IHdyaXRlRW5kTWFyaywgSUNvbXByZXNzUHJvZ3Jlc3MgKnByb2dyZXNzLCBJU3pBbGxvYyAqYWxsb2MsIElTekFsbG9jICphbGxvY0JpZyk7CisrCisrLyogLS0tLS0tLS0tLSBPbmUgQ2FsbCBJbnRlcmZhY2UgLS0tLS0tLS0tLSAqLworKworKy8qIEx6bWFFbmNvZGUKKytSZXR1cm4gY29kZToKKysgIFNaX09LICAgICAgICAgICAgICAgLSBPSworKyAgU1pfRVJST1JfTUVNICAgICAgICAtIE1lbW9yeSBhbGxvY2F0aW9uIGVycm9yCisrICBTWl9FUlJPUl9QQVJBTSAgICAgIC0gSW5jb3JyZWN0IHBhcmFtYXRlcgorKyAgU1pfRVJST1JfT1VUUFVUX0VPRiAtIG91dHB1dCBidWZmZXIgb3ZlcmZsb3cKKysgIFNaX0VSUk9SX1RIUkVBRCAgICAgLSBlcnJvcnMgaW4gbXVsdGl0aHJlYWRpbmcgZnVuY3Rpb25zIChvbmx5IGZvciBNdCB2ZXJzaW9uKQorKyovCisrCisrU1JlcyBMem1hRW5jb2RlKEJ5dGUgKmRlc3QsIFNpemVUICpkZXN0TGVuLCBjb25zdCBCeXRlICpzcmMsIFNpemVUIHNyY0xlbiwKKysgICAgY29uc3QgQ0x6bWFFbmNQcm9wcyAqcHJvcHMsIEJ5dGUgKnByb3BzRW5jb2RlZCwgU2l6ZVQgKnByb3BzU2l6ZSwgaW50IHdyaXRlRW5kTWFyaywKKysgICAgSUNvbXByZXNzUHJvZ3Jlc3MgKnByb2dyZXNzLCBJU3pBbGxvYyAqYWxsb2MsIElTekFsbG9jICphbGxvY0JpZyk7CisrCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrfQorKyNlbmRpZgorKworKyNlbmRpZgorLS0tIC9kZXYvbnVsbAorKysrIGIvaW5jbHVkZS9saW51eC9sem1hL1R5cGVzLmgKK0BAIC0wLDAgKzEsMjI2IEBACisrLyogVHlwZXMuaCAtLSBCYXNpYyB0eXBlcworKzIwMDktMTEtMjMgOiBJZ29yIFBhdmxvdiA6IFB1YmxpYyBkb21haW4gKi8KKysKKysjaWZuZGVmIF9fN1pfVFlQRVNfSAorKyNkZWZpbmUgX183Wl9UWVBFU19ICisrCisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKworKyNpZmRlZiBfV0lOMzIKKysjaW5jbHVkZSA8d2luZG93cy5oPgorKyNlbmRpZgorKworKyNpZm5kZWYgRVhURVJOX0NfQkVHSU4KKysjaWZkZWYgX19jcGx1c3BsdXMKKysjZGVmaW5lIEVYVEVSTl9DX0JFR0lOIGV4dGVybiAiQyIgeworKyNkZWZpbmUgRVhURVJOX0NfRU5EIH0KKysjZWxzZQorKyNkZWZpbmUgRVhURVJOX0NfQkVHSU4KKysjZGVmaW5lIEVYVEVSTl9DX0VORAorKyNlbmRpZgorKyNlbmRpZgorKworK0VYVEVSTl9DX0JFR0lOCisrCisrI2RlZmluZSBTWl9PSyAwCisrCisrI2RlZmluZSBTWl9FUlJPUl9EQVRBIDEKKysjZGVmaW5lIFNaX0VSUk9SX01FTSAyCisrI2RlZmluZSBTWl9FUlJPUl9DUkMgMworKyNkZWZpbmUgU1pfRVJST1JfVU5TVVBQT1JURUQgNAorKyNkZWZpbmUgU1pfRVJST1JfUEFSQU0gNQorKyNkZWZpbmUgU1pfRVJST1JfSU5QVVRfRU9GIDYKKysjZGVmaW5lIFNaX0VSUk9SX09VVFBVVF9FT0YgNworKyNkZWZpbmUgU1pfRVJST1JfUkVBRCA4CisrI2RlZmluZSBTWl9FUlJPUl9XUklURSA5CisrI2RlZmluZSBTWl9FUlJPUl9QUk9HUkVTUyAxMAorKyNkZWZpbmUgU1pfRVJST1JfRkFJTCAxMQorKyNkZWZpbmUgU1pfRVJST1JfVEhSRUFEIDEyCisrCisrI2RlZmluZSBTWl9FUlJPUl9BUkNISVZFIDE2CisrI2RlZmluZSBTWl9FUlJPUl9OT19BUkNISVZFIDE3CisrCisrdHlwZWRlZiBpbnQgU1JlczsKKysKKysjaWZkZWYgX1dJTjMyCisrdHlwZWRlZiBEV09SRCBXUmVzOworKyNlbHNlCisrdHlwZWRlZiBpbnQgV1JlczsKKysjZW5kaWYKKysKKysjaWZuZGVmIFJJTk9LCisrI2RlZmluZSBSSU5PSyh4KSB7IGludCBfX3Jlc3VsdF9fID0gKHgpOyBpZiAoX19yZXN1bHRfXyAhPSAwKSByZXR1cm4gX19yZXN1bHRfXzsgfQorKyNlbmRpZgorKworK3R5cGVkZWYgdW5zaWduZWQgY2hhciBCeXRlOworK3R5cGVkZWYgc2hvcnQgSW50MTY7CisrdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBVSW50MTY7CisrCisrI2lmZGVmIF9MWk1BX1VJTlQzMl9JU19VTE9ORworK3R5cGVkZWYgbG9uZyBJbnQzMjsKKyt0eXBlZGVmIHVuc2lnbmVkIGxvbmcgVUludDMyOworKyNlbHNlCisrdHlwZWRlZiBpbnQgSW50MzI7CisrdHlwZWRlZiB1bnNpZ25lZCBpbnQgVUludDMyOworKyNlbmRpZgorKworKyNpZmRlZiBfU1pfTk9fSU5UXzY0CisrCisrLyogZGVmaW5lIF9TWl9OT19JTlRfNjQsIGlmIHlvdXIgY29tcGlsZXIgZG9lc24ndCBzdXBwb3J0IDY0LWJpdCBpbnRlZ2Vycy4KKysgICBOT1RFUzogU29tZSBjb2RlIHdpbGwgd29yayBpbmNvcnJlY3RseSBpbiB0aGF0IGNhc2UhICovCisrCisrdHlwZWRlZiBsb25nIEludDY0OworK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBVSW50NjQ7CisrCisrI2Vsc2UKKysKKysjaWYgZGVmaW5lZChfTVNDX1ZFUikgfHwgZGVmaW5lZChfX0JPUkxBTkRDX18pCisrdHlwZWRlZiBfX2ludDY0IEludDY0OworK3R5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCBVSW50NjQ7CisrI2Vsc2UKKyt0eXBlZGVmIGxvbmcgbG9uZyBpbnQgSW50NjQ7CisrdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IFVJbnQ2NDsKKysjZW5kaWYKKysKKysjZW5kaWYKKysKKysjaWZkZWYgX0xaTUFfTk9fU1lTVEVNX1NJWkVfVAorK3R5cGVkZWYgVUludDMyIFNpemVUOworKyNlbHNlCisrdHlwZWRlZiBzaXplX3QgU2l6ZVQ7CisrI2VuZGlmCisrCisrdHlwZWRlZiBpbnQgQm9vbDsKKysjZGVmaW5lIFRydWUgMQorKyNkZWZpbmUgRmFsc2UgMAorKworKworKyNpZmRlZiBfV0lOMzIKKysjZGVmaW5lIE1ZX1NURF9DQUxMIF9fc3RkY2FsbAorKyNlbHNlCisrI2RlZmluZSBNWV9TVERfQ0FMTAorKyNlbmRpZgorKworKyNpZmRlZiBfTVNDX1ZFUgorKworKyNpZiBfTVNDX1ZFUiA+PSAxMzAwCisrI2RlZmluZSBNWV9OT19JTkxJTkUgX19kZWNsc3BlYyhub2lubGluZSkKKysjZWxzZQorKyNkZWZpbmUgTVlfTk9fSU5MSU5FCisrI2VuZGlmCisrCisrI2RlZmluZSBNWV9DREVDTCBfX2NkZWNsCisrI2RlZmluZSBNWV9GQVNUX0NBTEwgX19mYXN0Y2FsbAorKworKyNlbHNlCisrCisrI2RlZmluZSBNWV9DREVDTAorKyNkZWZpbmUgTVlfRkFTVF9DQUxMCisrCisrI2VuZGlmCisrCisrCisrLyogVGhlIGZvbGxvd2luZyBpbnRlcmZhY2VzIHVzZSBmaXJzdCBwYXJhbWV0ZXIgYXMgcG9pbnRlciB0byBzdHJ1Y3R1cmUgKi8KKysKKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIFNSZXMgKCpSZWFkKSh2b2lkICpwLCB2b2lkICpidWYsIHNpemVfdCAqc2l6ZSk7CisrICAgIC8qIGlmIChpbnB1dCgqc2l6ZSkgIT0gMCAmJiBvdXRwdXQoKnNpemUpID09IDApIG1lYW5zIGVuZF9vZl9zdHJlYW0uCisrICAgICAgIChvdXRwdXQoKnNpemUpIDwgaW5wdXQoKnNpemUpKSBpcyBhbGxvd2VkICovCisrfSBJU2VxSW5TdHJlYW07CisrCisrLyogaXQgY2FuIHJldHVybiBTWl9FUlJPUl9JTlBVVF9FT0YgKi8KKytTUmVzIFNlcUluU3RyZWFtX1JlYWQoSVNlcUluU3RyZWFtICpzdHJlYW0sIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpOworK1NSZXMgU2VxSW5TdHJlYW1fUmVhZDIoSVNlcUluU3RyZWFtICpzdHJlYW0sIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUsIFNSZXMgZXJyb3JUeXBlKTsKKytTUmVzIFNlcUluU3RyZWFtX1JlYWRCeXRlKElTZXFJblN0cmVhbSAqc3RyZWFtLCBCeXRlICpidWYpOworKworK3R5cGVkZWYgc3RydWN0CisreworKyAgc2l6ZV90ICgqV3JpdGUpKHZvaWQgKnAsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpOworKyAgICAvKiBSZXR1cm5zOiByZXN1bHQgLSB0aGUgbnVtYmVyIG9mIGFjdHVhbGx5IHdyaXR0ZW4gYnl0ZXMuCisrICAgICAgIChyZXN1bHQgPCBzaXplKSBtZWFucyBlcnJvciAqLworK30gSVNlcU91dFN0cmVhbTsKKysKKyt0eXBlZGVmIGVudW0KKyt7CisrICBTWl9TRUVLX1NFVCA9IDAsCisrICBTWl9TRUVLX0NVUiA9IDEsCisrICBTWl9TRUVLX0VORCA9IDIKKyt9IEVTelNlZWs7CisrCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBTUmVzICgqUmVhZCkodm9pZCAqcCwgdm9pZCAqYnVmLCBzaXplX3QgKnNpemUpOyAgLyogc2FtZSBhcyBJU2VxSW5TdHJlYW06OlJlYWQgKi8KKysgIFNSZXMgKCpTZWVrKSh2b2lkICpwLCBJbnQ2NCAqcG9zLCBFU3pTZWVrIG9yaWdpbik7CisrfSBJU2Vla0luU3RyZWFtOworKworK3R5cGVkZWYgc3RydWN0CisreworKyAgU1JlcyAoKkxvb2spKHZvaWQgKnAsIHZvaWQgKipidWYsIHNpemVfdCAqc2l6ZSk7CisrICAgIC8qIGlmIChpbnB1dCgqc2l6ZSkgIT0gMCAmJiBvdXRwdXQoKnNpemUpID09IDApIG1lYW5zIGVuZF9vZl9zdHJlYW0uCisrICAgICAgIChvdXRwdXQoKnNpemUpID4gaW5wdXQoKnNpemUpKSBpcyBub3QgYWxsb3dlZAorKyAgICAgICAob3V0cHV0KCpzaXplKSA8IGlucHV0KCpzaXplKSkgaXMgYWxsb3dlZCAqLworKyAgU1JlcyAoKlNraXApKHZvaWQgKnAsIHNpemVfdCBvZmZzZXQpOworKyAgICAvKiBvZmZzZXQgbXVzdCBiZSA8PSBvdXRwdXQoKnNpemUpIG9mIExvb2sgKi8KKysKKysgIFNSZXMgKCpSZWFkKSh2b2lkICpwLCB2b2lkICpidWYsIHNpemVfdCAqc2l6ZSk7CisrICAgIC8qIHJlYWRzIGRpcmVjdGx5ICh3aXRob3V0IGJ1ZmZlcikuIEl0J3Mgc2FtZSBhcyBJU2VxSW5TdHJlYW06OlJlYWQgKi8KKysgIFNSZXMgKCpTZWVrKSh2b2lkICpwLCBJbnQ2NCAqcG9zLCBFU3pTZWVrIG9yaWdpbik7CisrfSBJTG9va0luU3RyZWFtOworKworK1NSZXMgTG9va0luU3RyZWFtX0xvb2tSZWFkKElMb29rSW5TdHJlYW0gKnN0cmVhbSwgdm9pZCAqYnVmLCBzaXplX3QgKnNpemUpOworK1NSZXMgTG9va0luU3RyZWFtX1NlZWtUbyhJTG9va0luU3RyZWFtICpzdHJlYW0sIFVJbnQ2NCBvZmZzZXQpOworKworKy8qIHJlYWRzIHZpYSBJTG9va0luU3RyZWFtOjpSZWFkICovCisrU1JlcyBMb29rSW5TdHJlYW1fUmVhZDIoSUxvb2tJblN0cmVhbSAqc3RyZWFtLCB2b2lkICpidWYsIHNpemVfdCBzaXplLCBTUmVzIGVycm9yVHlwZSk7CisrU1JlcyBMb29rSW5TdHJlYW1fUmVhZChJTG9va0luU3RyZWFtICpzdHJlYW0sIHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpOworKworKyNkZWZpbmUgTG9va1RvUmVhZF9CVUZfU0laRSAoMSA8PCAxNCkKKysKKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIElMb29rSW5TdHJlYW0gczsKKysgIElTZWVrSW5TdHJlYW0gKnJlYWxTdHJlYW07CisrICBzaXplX3QgcG9zOworKyAgc2l6ZV90IHNpemU7CisrICBCeXRlIGJ1ZltMb29rVG9SZWFkX0JVRl9TSVpFXTsKKyt9IENMb29rVG9SZWFkOworKworK3ZvaWQgTG9va1RvUmVhZF9DcmVhdGVWVGFibGUoQ0xvb2tUb1JlYWQgKnAsIGludCBsb29rYWhlYWQpOworK3ZvaWQgTG9va1RvUmVhZF9Jbml0KENMb29rVG9SZWFkICpwKTsKKysKKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIElTZXFJblN0cmVhbSBzOworKyAgSUxvb2tJblN0cmVhbSAqcmVhbFN0cmVhbTsKKyt9IENTZWNUb0xvb2s7CisrCisrdm9pZCBTZWNUb0xvb2tfQ3JlYXRlVlRhYmxlKENTZWNUb0xvb2sgKnApOworKworK3R5cGVkZWYgc3RydWN0CisreworKyAgSVNlcUluU3RyZWFtIHM7CisrICBJTG9va0luU3RyZWFtICpyZWFsU3RyZWFtOworK30gQ1NlY1RvUmVhZDsKKysKKyt2b2lkIFNlY1RvUmVhZF9DcmVhdGVWVGFibGUoQ1NlY1RvUmVhZCAqcCk7CisrCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBTUmVzICgqUHJvZ3Jlc3MpKHZvaWQgKnAsIFVJbnQ2NCBpblNpemUsIFVJbnQ2NCBvdXRTaXplKTsKKysgICAgLyogUmV0dXJuczogcmVzdWx0LiAocmVzdWx0ICE9IFNaX09LKSBtZWFucyBicmVhay4KKysgICAgICAgVmFsdWUgKFVJbnQ2NCkoSW50NjQpLTEgZm9yIHNpemUgbWVhbnMgdW5rbm93biB2YWx1ZS4gKi8KKyt9IElDb21wcmVzc1Byb2dyZXNzOworKworK3R5cGVkZWYgc3RydWN0CisreworKyAgdm9pZCAqKCpBbGxvYykodm9pZCAqcCwgc2l6ZV90IHNpemUpOworKyAgdm9pZCAoKkZyZWUpKHZvaWQgKnAsIHZvaWQgKmFkZHJlc3MpOyAvKiBhZGRyZXNzIGNhbiBiZSAwICovCisrfSBJU3pBbGxvYzsKKysKKysjZGVmaW5lIElBbGxvY19BbGxvYyhwLCBzaXplKSAocCktPkFsbG9jKChwKSwgc2l6ZSkKKysjZGVmaW5lIElBbGxvY19GcmVlKHAsIGEpIChwKS0+RnJlZSgocCksIGEpCisrCisrRVhURVJOX0NfRU5ECisrCisrI2VuZGlmCistLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvamZmczIuaAorKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2pmZnMyLmgKK0BAIC00Niw2ICs0Niw3IEBACisgI2RlZmluZSBKRkZTMl9DT01QUl9EWU5SVUJJTgkweDA1CisgI2RlZmluZSBKRkZTMl9DT01QUl9aTElCCTB4MDYKKyAjZGVmaW5lIEpGRlMyX0NPTVBSX0xaTwkJMHgwNworKyNkZWZpbmUgSkZGUzJfQ09NUFJfTFpNQQkweDA4CisgLyogQ29tcGF0aWJpbGl0eSBmbGFncy4gKi8KKyAjZGVmaW5lIEpGRlMyX0NPTVBBVF9NQVNLIDB4YzAwMCAgICAgIC8qIFdoYXQgZG8gdG8gaWYgYW4gdW5rbm93biBub2RldHlwZSBpcyBmb3VuZCAqLworICNkZWZpbmUgSkZGUzJfTk9ERV9BQ0NVUkFURSAweDIwMDAKKy0tLSBhL2xpYi9LY29uZmlnCisrKysgYi9saWIvS2NvbmZpZworQEAgLTMwMyw2ICszMDMsMTIgQEAgY29uZmlnIFpTVERfREVDT01QUkVTUworIAorIHNvdXJjZSAibGliL3h6L0tjb25maWciCisgCisrY29uZmlnIExaTUFfQ09NUFJFU1MKKysgICAgdHJpc3RhdGUKKysKKytjb25maWcgTFpNQV9ERUNPTVBSRVNTCisrICAgIHRyaXN0YXRlCisrCisgIworICMgVGhlc2UgYWxsIHByb3ZpZGUgYSBjb21tb24gaW50ZXJmYWNlIChoZW5jZSB0aGUgYXBwYXJlbnQgZHVwbGljYXRpb24gd2l0aAorICMgWkxJQl9JTkZMQVRFOyBERUNPTVBSRVNTX0daSVAgaXMganVzdCBhIHdyYXBwZXIuKQorLS0tIGEvbGliL01ha2VmaWxlCisrKysgYi9saWIvTWFrZWZpbGUKK0BAIC0zLDYgKzMsMTYgQEAKKyAjIE1ha2VmaWxlIGZvciBzb21lIGxpYnMgbmVlZGVkIGluIHRoZSBrZXJuZWwuCisgIworIAorK2lmZGVmIENPTkZJR19KRkZTMl9aTElCCisrCUNPTkZJR19aTElCX0lORkxBVEU6PXkKKysJQ09ORklHX1pMSUJfREVGTEFURTo9eQorK2VuZGlmCisrCisraWZkZWYgQ09ORklHX0pGRlMyX0xaTUEKKysJQ09ORklHX0xaTUFfREVDT01QUkVTUzo9eQorKwlDT05GSUdfTFpNQV9DT01QUkVTUzo9eQorK2VuZGlmCisrCisgaWZkZWYgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUgorIE9SSUdfQ0ZMQUdTIDo9ICQoS0JVSUxEX0NGTEFHUykKKyBLQlVJTERfQ0ZMQUdTID0gJChzdWJzdCAkKENDX0ZMQUdTX0ZUUkFDRSksLCQoT1JJR19DRkxBR1MpKQorQEAgLTE0OSw2ICsxNTksOCBAQCBvYmotJChDT05GSUdfWlNURF9DT01QUkVTUykgKz0genN0ZC8KKyBvYmotJChDT05GSUdfWlNURF9ERUNPTVBSRVNTKSArPSB6c3RkLworIG9iai0kKENPTkZJR19YWl9ERUMpICs9IHh6LworIG9iai0kKENPTkZJR19SQUlENl9QUSkgKz0gcmFpZDYvCisrb2JqLSQoQ09ORklHX0xaTUFfQ09NUFJFU1MpICs9IGx6bWEvCisrb2JqLSQoQ09ORklHX0xaTUFfREVDT01QUkVTUykgKz0gbHptYS8KKyAKKyBsaWItJChDT05GSUdfREVDT01QUkVTU19HWklQKSArPSBkZWNvbXByZXNzX2luZmxhdGUubworIGxpYi0kKENPTkZJR19ERUNPTVBSRVNTX0JaSVAyKSArPSBkZWNvbXByZXNzX2J1bnppcDIubworLS0tIC9kZXYvbnVsbAorKysrIGIvbGliL2x6bWEvTHpGaW5kLmMKK0BAIC0wLDAgKzEsNzYxIEBACisrLyogTHpGaW5kLmMgLS0gTWF0Y2ggZmluZGVyIGZvciBMWiBhbGdvcml0aG1zCisrMjAwOS0wNC0yMiA6IElnb3IgUGF2bG92IDogUHVibGljIGRvbWFpbiAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysKKysjaW5jbHVkZSAiTHpGaW5kLmgiCisrI2luY2x1ZGUgIkx6SGFzaC5oIgorKworKyNkZWZpbmUga0VtcHR5SGFzaFZhbHVlIDAKKysjZGVmaW5lIGtNYXhWYWxGb3JOb3JtYWxpemUgKChVSW50MzIpMHhGRkZGRkZGRikKKysjZGVmaW5lIGtOb3JtYWxpemVTdGVwTWluICgxIDw8IDEwKSAvKiBpdCBtdXN0IGJlIHBvd2VyIG9mIDIgKi8KKysjZGVmaW5lIGtOb3JtYWxpemVNYXNrICh+KGtOb3JtYWxpemVTdGVwTWluIC0gMSkpCisrI2RlZmluZSBrTWF4SGlzdG9yeVNpemUgKChVSW50MzIpMyA8PCAzMCkKKysKKysjZGVmaW5lIGtTdGFydE1heExlbiAzCisrCisrc3RhdGljIHZvaWQgTHpJbldpbmRvd19GcmVlKENNYXRjaEZpbmRlciAqcCwgSVN6QWxsb2MgKmFsbG9jKQorK3sKKysgIGlmICghcC0+ZGlyZWN0SW5wdXQpCisrICB7CisrICAgIGFsbG9jLT5GcmVlKGFsbG9jLCBwLT5idWZmZXJCYXNlKTsKKysgICAgcC0+YnVmZmVyQmFzZSA9IDA7CisrICB9CisrfQorKworKy8qIGtlZXBTaXplQmVmb3JlICsga2VlcFNpemVBZnRlciArIGtlZXBTaXplUmVzZXJ2IG11c3QgYmUgPCA0RykgKi8KKysKKytzdGF0aWMgaW50IEx6SW5XaW5kb3dfQ3JlYXRlKENNYXRjaEZpbmRlciAqcCwgVUludDMyIGtlZXBTaXplUmVzZXJ2LCBJU3pBbGxvYyAqYWxsb2MpCisreworKyAgVUludDMyIGJsb2NrU2l6ZSA9IHAtPmtlZXBTaXplQmVmb3JlICsgcC0+a2VlcFNpemVBZnRlciArIGtlZXBTaXplUmVzZXJ2OworKyAgaWYgKHAtPmRpcmVjdElucHV0KQorKyAgeworKyAgICBwLT5ibG9ja1NpemUgPSBibG9ja1NpemU7CisrICAgIHJldHVybiAxOworKyAgfQorKyAgaWYgKHAtPmJ1ZmZlckJhc2UgPT0gMCB8fCBwLT5ibG9ja1NpemUgIT0gYmxvY2tTaXplKQorKyAgeworKyAgICBMekluV2luZG93X0ZyZWUocCwgYWxsb2MpOworKyAgICBwLT5ibG9ja1NpemUgPSBibG9ja1NpemU7CisrICAgIHAtPmJ1ZmZlckJhc2UgPSAoQnl0ZSAqKWFsbG9jLT5BbGxvYyhhbGxvYywgKHNpemVfdClibG9ja1NpemUpOworKyAgfQorKyAgcmV0dXJuIChwLT5idWZmZXJCYXNlICE9IDApOworK30KKysKKytCeXRlICpNYXRjaEZpbmRlcl9HZXRQb2ludGVyVG9DdXJyZW50UG9zKENNYXRjaEZpbmRlciAqcCkgeyByZXR1cm4gcC0+YnVmZmVyOyB9CisrQnl0ZSBNYXRjaEZpbmRlcl9HZXRJbmRleEJ5dGUoQ01hdGNoRmluZGVyICpwLCBJbnQzMiBpbmRleCkgeyByZXR1cm4gcC0+YnVmZmVyW2luZGV4XTsgfQorKworK1VJbnQzMiBNYXRjaEZpbmRlcl9HZXROdW1BdmFpbGFibGVCeXRlcyhDTWF0Y2hGaW5kZXIgKnApIHsgcmV0dXJuIHAtPnN0cmVhbVBvcyAtIHAtPnBvczsgfQorKworK3ZvaWQgTWF0Y2hGaW5kZXJfUmVkdWNlT2Zmc2V0cyhDTWF0Y2hGaW5kZXIgKnAsIFVJbnQzMiBzdWJWYWx1ZSkKKyt7CisrICBwLT5wb3NMaW1pdCAtPSBzdWJWYWx1ZTsKKysgIHAtPnBvcyAtPSBzdWJWYWx1ZTsKKysgIHAtPnN0cmVhbVBvcyAtPSBzdWJWYWx1ZTsKKyt9CisrCisrc3RhdGljIHZvaWQgTWF0Y2hGaW5kZXJfUmVhZEJsb2NrKENNYXRjaEZpbmRlciAqcCkKKyt7CisrICBpZiAocC0+c3RyZWFtRW5kV2FzUmVhY2hlZCB8fCBwLT5yZXN1bHQgIT0gU1pfT0spCisrICAgIHJldHVybjsKKysgIGlmIChwLT5kaXJlY3RJbnB1dCkKKysgIHsKKysgICAgVUludDMyIGN1clNpemUgPSAweEZGRkZGRkZGIC0gcC0+c3RyZWFtUG9zOworKyAgICBpZiAoY3VyU2l6ZSA+IHAtPmRpcmVjdElucHV0UmVtKQorKyAgICAgIGN1clNpemUgPSAoVUludDMyKXAtPmRpcmVjdElucHV0UmVtOworKyAgICBwLT5kaXJlY3RJbnB1dFJlbSAtPSBjdXJTaXplOworKyAgICBwLT5zdHJlYW1Qb3MgKz0gY3VyU2l6ZTsKKysgICAgaWYgKHAtPmRpcmVjdElucHV0UmVtID09IDApCisrICAgICAgcC0+c3RyZWFtRW5kV2FzUmVhY2hlZCA9IDE7CisrICAgIHJldHVybjsKKysgIH0KKysgIGZvciAoOzspCisrICB7CisrICAgIEJ5dGUgKmRlc3QgPSBwLT5idWZmZXIgKyAocC0+c3RyZWFtUG9zIC0gcC0+cG9zKTsKKysgICAgc2l6ZV90IHNpemUgPSAocC0+YnVmZmVyQmFzZSArIHAtPmJsb2NrU2l6ZSAtIGRlc3QpOworKyAgICBpZiAoc2l6ZSA9PSAwKQorKyAgICAgIHJldHVybjsKKysgICAgcC0+cmVzdWx0ID0gcC0+c3RyZWFtLT5SZWFkKHAtPnN0cmVhbSwgZGVzdCwgJnNpemUpOworKyAgICBpZiAocC0+cmVzdWx0ICE9IFNaX09LKQorKyAgICAgIHJldHVybjsKKysgICAgaWYgKHNpemUgPT0gMCkKKysgICAgeworKyAgICAgIHAtPnN0cmVhbUVuZFdhc1JlYWNoZWQgPSAxOworKyAgICAgIHJldHVybjsKKysgICAgfQorKyAgICBwLT5zdHJlYW1Qb3MgKz0gKFVJbnQzMilzaXplOworKyAgICBpZiAocC0+c3RyZWFtUG9zIC0gcC0+cG9zID4gcC0+a2VlcFNpemVBZnRlcikKKysgICAgICByZXR1cm47CisrICB9CisrfQorKworK3ZvaWQgTWF0Y2hGaW5kZXJfTW92ZUJsb2NrKENNYXRjaEZpbmRlciAqcCkKKyt7CisrICBtZW1tb3ZlKHAtPmJ1ZmZlckJhc2UsCisrICAgIHAtPmJ1ZmZlciAtIHAtPmtlZXBTaXplQmVmb3JlLAorKyAgICAoc2l6ZV90KShwLT5zdHJlYW1Qb3MgLSBwLT5wb3MgKyBwLT5rZWVwU2l6ZUJlZm9yZSkpOworKyAgcC0+YnVmZmVyID0gcC0+YnVmZmVyQmFzZSArIHAtPmtlZXBTaXplQmVmb3JlOworK30KKysKKytpbnQgTWF0Y2hGaW5kZXJfTmVlZE1vdmUoQ01hdGNoRmluZGVyICpwKQorK3sKKysgIGlmIChwLT5kaXJlY3RJbnB1dCkKKysgICAgcmV0dXJuIDA7CisrICAvKiBpZiAocC0+c3RyZWFtRW5kV2FzUmVhY2hlZCkgcmV0dXJuIDA7ICovCisrICByZXR1cm4gKChzaXplX3QpKHAtPmJ1ZmZlckJhc2UgKyBwLT5ibG9ja1NpemUgLSBwLT5idWZmZXIpIDw9IHAtPmtlZXBTaXplQWZ0ZXIpOworK30KKysKKyt2b2lkIE1hdGNoRmluZGVyX1JlYWRJZlJlcXVpcmVkKENNYXRjaEZpbmRlciAqcCkKKyt7CisrICBpZiAocC0+c3RyZWFtRW5kV2FzUmVhY2hlZCkKKysgICAgcmV0dXJuOworKyAgaWYgKHAtPmtlZXBTaXplQWZ0ZXIgPj0gcC0+c3RyZWFtUG9zIC0gcC0+cG9zKQorKyAgICBNYXRjaEZpbmRlcl9SZWFkQmxvY2socCk7CisrfQorKworK3N0YXRpYyB2b2lkIE1hdGNoRmluZGVyX0NoZWNrQW5kTW92ZUFuZFJlYWQoQ01hdGNoRmluZGVyICpwKQorK3sKKysgIGlmIChNYXRjaEZpbmRlcl9OZWVkTW92ZShwKSkKKysgICAgTWF0Y2hGaW5kZXJfTW92ZUJsb2NrKHApOworKyAgTWF0Y2hGaW5kZXJfUmVhZEJsb2NrKHApOworK30KKysKKytzdGF0aWMgdm9pZCBNYXRjaEZpbmRlcl9TZXREZWZhdWx0U2V0dGluZ3MoQ01hdGNoRmluZGVyICpwKQorK3sKKysgIHAtPmN1dFZhbHVlID0gMzI7CisrICBwLT5idE1vZGUgPSAxOworKyAgcC0+bnVtSGFzaEJ5dGVzID0gNDsKKysgIHAtPmJpZ0hhc2ggPSAwOworK30KKysKKysjZGVmaW5lIGtDcmNQb2x5IDB4RURCODgzMjAKKysKKyt2b2lkIE1hdGNoRmluZGVyX0NvbnN0cnVjdChDTWF0Y2hGaW5kZXIgKnApCisreworKyAgVUludDMyIGk7CisrICBwLT5idWZmZXJCYXNlID0gMDsKKysgIHAtPmRpcmVjdElucHV0ID0gMDsKKysgIHAtPmhhc2ggPSAwOworKyAgTWF0Y2hGaW5kZXJfU2V0RGVmYXVsdFNldHRpbmdzKHApOworKworKyAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorKyAgeworKyAgICBVSW50MzIgciA9IGk7CisrICAgIGludCBqOworKyAgICBmb3IgKGogPSAwOyBqIDwgODsgaisrKQorKyAgICAgIHIgPSAociA+PiAxKSBeIChrQ3JjUG9seSAmIH4oKHIgJiAxKSAtIDEpKTsKKysgICAgcC0+Y3JjW2ldID0gcjsKKysgIH0KKyt9CisrCisrc3RhdGljIHZvaWQgTWF0Y2hGaW5kZXJfRnJlZVRoaXNDbGFzc01lbW9yeShDTWF0Y2hGaW5kZXIgKnAsIElTekFsbG9jICphbGxvYykKKyt7CisrICBhbGxvYy0+RnJlZShhbGxvYywgcC0+aGFzaCk7CisrICBwLT5oYXNoID0gMDsKKyt9CisrCisrdm9pZCBNYXRjaEZpbmRlcl9GcmVlKENNYXRjaEZpbmRlciAqcCwgSVN6QWxsb2MgKmFsbG9jKQorK3sKKysgIE1hdGNoRmluZGVyX0ZyZWVUaGlzQ2xhc3NNZW1vcnkocCwgYWxsb2MpOworKyAgTHpJbldpbmRvd19GcmVlKHAsIGFsbG9jKTsKKyt9CisrCisrc3RhdGljIENMelJlZiogQWxsb2NSZWZzKFVJbnQzMiBudW0sIElTekFsbG9jICphbGxvYykKKyt7CisrICBzaXplX3Qgc2l6ZUluQnl0ZXMgPSAoc2l6ZV90KW51bSAqIHNpemVvZihDTHpSZWYpOworKyAgaWYgKHNpemVJbkJ5dGVzIC8gc2l6ZW9mKENMelJlZikgIT0gbnVtKQorKyAgICByZXR1cm4gMDsKKysgIHJldHVybiAoQ0x6UmVmICopYWxsb2MtPkFsbG9jKGFsbG9jLCBzaXplSW5CeXRlcyk7CisrfQorKworK2ludCBNYXRjaEZpbmRlcl9DcmVhdGUoQ01hdGNoRmluZGVyICpwLCBVSW50MzIgaGlzdG9yeVNpemUsCisrICAgIFVJbnQzMiBrZWVwQWRkQnVmZmVyQmVmb3JlLCBVSW50MzIgbWF0Y2hNYXhMZW4sIFVJbnQzMiBrZWVwQWRkQnVmZmVyQWZ0ZXIsCisrICAgIElTekFsbG9jICphbGxvYykKKyt7CisrICBVSW50MzIgc2l6ZVJlc2VydjsKKysgIGlmIChoaXN0b3J5U2l6ZSA+IGtNYXhIaXN0b3J5U2l6ZSkKKysgIHsKKysgICAgTWF0Y2hGaW5kZXJfRnJlZShwLCBhbGxvYyk7CisrICAgIHJldHVybiAwOworKyAgfQorKyAgc2l6ZVJlc2VydiA9IGhpc3RvcnlTaXplID4+IDE7CisrICBpZiAoaGlzdG9yeVNpemUgPiAoKFVJbnQzMikyIDw8IDMwKSkKKysgICAgc2l6ZVJlc2VydiA9IGhpc3RvcnlTaXplID4+IDI7CisrICBzaXplUmVzZXJ2ICs9IChrZWVwQWRkQnVmZmVyQmVmb3JlICsgbWF0Y2hNYXhMZW4gKyBrZWVwQWRkQnVmZmVyQWZ0ZXIpIC8gMiArICgxIDw8IDE5KTsKKysKKysgIHAtPmtlZXBTaXplQmVmb3JlID0gaGlzdG9yeVNpemUgKyBrZWVwQWRkQnVmZmVyQmVmb3JlICsgMTsKKysgIHAtPmtlZXBTaXplQWZ0ZXIgPSBtYXRjaE1heExlbiArIGtlZXBBZGRCdWZmZXJBZnRlcjsKKysgIC8qIHdlIG5lZWQgb25lIGFkZGl0aW9uYWwgYnl0ZSwgc2luY2Ugd2UgdXNlIE1vdmVCbG9jayBhZnRlciBwb3MrKyBhbmQgYmVmb3JlIGRpY3Rpb25hcnkgdXNpbmcgKi8KKysgIGlmIChMekluV2luZG93X0NyZWF0ZShwLCBzaXplUmVzZXJ2LCBhbGxvYykpCisrICB7CisrICAgIFVJbnQzMiBuZXdDeWNsaWNCdWZmZXJTaXplID0gaGlzdG9yeVNpemUgKyAxOworKyAgICBVSW50MzIgaHM7CisrICAgIHAtPm1hdGNoTWF4TGVuID0gbWF0Y2hNYXhMZW47CisrICAgIHsKKysgICAgICBwLT5maXhlZEhhc2hTaXplID0gMDsKKysgICAgICBpZiAocC0+bnVtSGFzaEJ5dGVzID09IDIpCisrICAgICAgICBocyA9ICgxIDw8IDE2KSAtIDE7CisrICAgICAgZWxzZQorKyAgICAgIHsKKysgICAgICAgIGhzID0gaGlzdG9yeVNpemUgLSAxOworKyAgICAgICAgaHMgfD0gKGhzID4+IDEpOworKyAgICAgICAgaHMgfD0gKGhzID4+IDIpOworKyAgICAgICAgaHMgfD0gKGhzID4+IDQpOworKyAgICAgICAgaHMgfD0gKGhzID4+IDgpOworKyAgICAgICAgaHMgPj49IDE7CisrICAgICAgICBocyB8PSAweEZGRkY7IC8qIGRvbid0IGNoYW5nZSBpdCEgSXQncyByZXF1aXJlZCBmb3IgRGVmbGF0ZSAqLworKyAgICAgICAgaWYgKGhzID4gKDEgPDwgMjQpKQorKyAgICAgICAgeworKyAgICAgICAgICBpZiAocC0+bnVtSGFzaEJ5dGVzID09IDMpCisrICAgICAgICAgICAgaHMgPSAoMSA8PCAyNCkgLSAxOworKyAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgaHMgPj49IDE7CisrICAgICAgICB9CisrICAgICAgfQorKyAgICAgIHAtPmhhc2hNYXNrID0gaHM7CisrICAgICAgaHMrKzsKKysgICAgICBpZiAocC0+bnVtSGFzaEJ5dGVzID4gMikgcC0+Zml4ZWRIYXNoU2l6ZSArPSBrSGFzaDJTaXplOworKyAgICAgIGlmIChwLT5udW1IYXNoQnl0ZXMgPiAzKSBwLT5maXhlZEhhc2hTaXplICs9IGtIYXNoM1NpemU7CisrICAgICAgaWYgKHAtPm51bUhhc2hCeXRlcyA+IDQpIHAtPmZpeGVkSGFzaFNpemUgKz0ga0hhc2g0U2l6ZTsKKysgICAgICBocyArPSBwLT5maXhlZEhhc2hTaXplOworKyAgICB9CisrCisrICAgIHsKKysgICAgICBVSW50MzIgcHJldlNpemUgPSBwLT5oYXNoU2l6ZVN1bSArIHAtPm51bVNvbnM7CisrICAgICAgVUludDMyIG5ld1NpemU7CisrICAgICAgcC0+aGlzdG9yeVNpemUgPSBoaXN0b3J5U2l6ZTsKKysgICAgICBwLT5oYXNoU2l6ZVN1bSA9IGhzOworKyAgICAgIHAtPmN5Y2xpY0J1ZmZlclNpemUgPSBuZXdDeWNsaWNCdWZmZXJTaXplOworKyAgICAgIHAtPm51bVNvbnMgPSAocC0+YnRNb2RlID8gbmV3Q3ljbGljQnVmZmVyU2l6ZSAqIDIgOiBuZXdDeWNsaWNCdWZmZXJTaXplKTsKKysgICAgICBuZXdTaXplID0gcC0+aGFzaFNpemVTdW0gKyBwLT5udW1Tb25zOworKyAgICAgIGlmIChwLT5oYXNoICE9IDAgJiYgcHJldlNpemUgPT0gbmV3U2l6ZSkKKysgICAgICAgIHJldHVybiAxOworKyAgICAgIE1hdGNoRmluZGVyX0ZyZWVUaGlzQ2xhc3NNZW1vcnkocCwgYWxsb2MpOworKyAgICAgIHAtPmhhc2ggPSBBbGxvY1JlZnMobmV3U2l6ZSwgYWxsb2MpOworKyAgICAgIGlmIChwLT5oYXNoICE9IDApCisrICAgICAgeworKyAgICAgICAgcC0+c29uID0gcC0+aGFzaCArIHAtPmhhc2hTaXplU3VtOworKyAgICAgICAgcmV0dXJuIDE7CisrICAgICAgfQorKyAgICB9CisrICB9CisrICBNYXRjaEZpbmRlcl9GcmVlKHAsIGFsbG9jKTsKKysgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgdm9pZCBNYXRjaEZpbmRlcl9TZXRMaW1pdHMoQ01hdGNoRmluZGVyICpwKQorK3sKKysgIFVJbnQzMiBsaW1pdCA9IGtNYXhWYWxGb3JOb3JtYWxpemUgLSBwLT5wb3M7CisrICBVSW50MzIgbGltaXQyID0gcC0+Y3ljbGljQnVmZmVyU2l6ZSAtIHAtPmN5Y2xpY0J1ZmZlclBvczsKKysgIGlmIChsaW1pdDIgPCBsaW1pdCkKKysgICAgbGltaXQgPSBsaW1pdDI7CisrICBsaW1pdDIgPSBwLT5zdHJlYW1Qb3MgLSBwLT5wb3M7CisrICBpZiAobGltaXQyIDw9IHAtPmtlZXBTaXplQWZ0ZXIpCisrICB7CisrICAgIGlmIChsaW1pdDIgPiAwKQorKyAgICAgIGxpbWl0MiA9IDE7CisrICB9CisrICBlbHNlCisrICAgIGxpbWl0MiAtPSBwLT5rZWVwU2l6ZUFmdGVyOworKyAgaWYgKGxpbWl0MiA8IGxpbWl0KQorKyAgICBsaW1pdCA9IGxpbWl0MjsKKysgIHsKKysgICAgVUludDMyIGxlbkxpbWl0ID0gcC0+c3RyZWFtUG9zIC0gcC0+cG9zOworKyAgICBpZiAobGVuTGltaXQgPiBwLT5tYXRjaE1heExlbikKKysgICAgICBsZW5MaW1pdCA9IHAtPm1hdGNoTWF4TGVuOworKyAgICBwLT5sZW5MaW1pdCA9IGxlbkxpbWl0OworKyAgfQorKyAgcC0+cG9zTGltaXQgPSBwLT5wb3MgKyBsaW1pdDsKKyt9CisrCisrdm9pZCBNYXRjaEZpbmRlcl9Jbml0KENNYXRjaEZpbmRlciAqcCkKKyt7CisrICBVSW50MzIgaTsKKysgIGZvciAoaSA9IDA7IGkgPCBwLT5oYXNoU2l6ZVN1bTsgaSsrKQorKyAgICBwLT5oYXNoW2ldID0ga0VtcHR5SGFzaFZhbHVlOworKyAgcC0+Y3ljbGljQnVmZmVyUG9zID0gMDsKKysgIHAtPmJ1ZmZlciA9IHAtPmJ1ZmZlckJhc2U7CisrICBwLT5wb3MgPSBwLT5zdHJlYW1Qb3MgPSBwLT5jeWNsaWNCdWZmZXJTaXplOworKyAgcC0+cmVzdWx0ID0gU1pfT0s7CisrICBwLT5zdHJlYW1FbmRXYXNSZWFjaGVkID0gMDsKKysgIE1hdGNoRmluZGVyX1JlYWRCbG9jayhwKTsKKysgIE1hdGNoRmluZGVyX1NldExpbWl0cyhwKTsKKyt9CisrCisrc3RhdGljIFVJbnQzMiBNYXRjaEZpbmRlcl9HZXRTdWJWYWx1ZShDTWF0Y2hGaW5kZXIgKnApCisreworKyAgcmV0dXJuIChwLT5wb3MgLSBwLT5oaXN0b3J5U2l6ZSAtIDEpICYga05vcm1hbGl6ZU1hc2s7CisrfQorKworK3ZvaWQgTWF0Y2hGaW5kZXJfTm9ybWFsaXplMyhVSW50MzIgc3ViVmFsdWUsIENMelJlZiAqaXRlbXMsIFVJbnQzMiBudW1JdGVtcykKKyt7CisrICBVSW50MzIgaTsKKysgIGZvciAoaSA9IDA7IGkgPCBudW1JdGVtczsgaSsrKQorKyAgeworKyAgICBVSW50MzIgdmFsdWUgPSBpdGVtc1tpXTsKKysgICAgaWYgKHZhbHVlIDw9IHN1YlZhbHVlKQorKyAgICAgIHZhbHVlID0ga0VtcHR5SGFzaFZhbHVlOworKyAgICBlbHNlCisrICAgICAgdmFsdWUgLT0gc3ViVmFsdWU7CisrICAgIGl0ZW1zW2ldID0gdmFsdWU7CisrICB9CisrfQorKworK3N0YXRpYyB2b2lkIE1hdGNoRmluZGVyX05vcm1hbGl6ZShDTWF0Y2hGaW5kZXIgKnApCisreworKyAgVUludDMyIHN1YlZhbHVlID0gTWF0Y2hGaW5kZXJfR2V0U3ViVmFsdWUocCk7CisrICBNYXRjaEZpbmRlcl9Ob3JtYWxpemUzKHN1YlZhbHVlLCBwLT5oYXNoLCBwLT5oYXNoU2l6ZVN1bSArIHAtPm51bVNvbnMpOworKyAgTWF0Y2hGaW5kZXJfUmVkdWNlT2Zmc2V0cyhwLCBzdWJWYWx1ZSk7CisrfQorKworK3N0YXRpYyB2b2lkIE1hdGNoRmluZGVyX0NoZWNrTGltaXRzKENNYXRjaEZpbmRlciAqcCkKKyt7CisrICBpZiAocC0+cG9zID09IGtNYXhWYWxGb3JOb3JtYWxpemUpCisrICAgIE1hdGNoRmluZGVyX05vcm1hbGl6ZShwKTsKKysgIGlmICghcC0+c3RyZWFtRW5kV2FzUmVhY2hlZCAmJiBwLT5rZWVwU2l6ZUFmdGVyID09IHAtPnN0cmVhbVBvcyAtIHAtPnBvcykKKysgICAgTWF0Y2hGaW5kZXJfQ2hlY2tBbmRNb3ZlQW5kUmVhZChwKTsKKysgIGlmIChwLT5jeWNsaWNCdWZmZXJQb3MgPT0gcC0+Y3ljbGljQnVmZmVyU2l6ZSkKKysgICAgcC0+Y3ljbGljQnVmZmVyUG9zID0gMDsKKysgIE1hdGNoRmluZGVyX1NldExpbWl0cyhwKTsKKyt9CisrCisrc3RhdGljIFVJbnQzMiAqIEhjX0dldE1hdGNoZXNTcGVjKFVJbnQzMiBsZW5MaW1pdCwgVUludDMyIGN1ck1hdGNoLCBVSW50MzIgcG9zLCBjb25zdCBCeXRlICpjdXIsIENMelJlZiAqc29uLAorKyAgICBVSW50MzIgX2N5Y2xpY0J1ZmZlclBvcywgVUludDMyIF9jeWNsaWNCdWZmZXJTaXplLCBVSW50MzIgY3V0VmFsdWUsCisrICAgIFVJbnQzMiAqZGlzdGFuY2VzLCBVSW50MzIgbWF4TGVuKQorK3sKKysgIHNvbltfY3ljbGljQnVmZmVyUG9zXSA9IGN1ck1hdGNoOworKyAgZm9yICg7OykKKysgIHsKKysgICAgVUludDMyIGRlbHRhID0gcG9zIC0gY3VyTWF0Y2g7CisrICAgIGlmIChjdXRWYWx1ZS0tID09IDAgfHwgZGVsdGEgPj0gX2N5Y2xpY0J1ZmZlclNpemUpCisrICAgICAgcmV0dXJuIGRpc3RhbmNlczsKKysgICAgeworKyAgICAgIGNvbnN0IEJ5dGUgKnBiID0gY3VyIC0gZGVsdGE7CisrICAgICAgY3VyTWF0Y2ggPSBzb25bX2N5Y2xpY0J1ZmZlclBvcyAtIGRlbHRhICsgKChkZWx0YSA+IF9jeWNsaWNCdWZmZXJQb3MpID8gX2N5Y2xpY0J1ZmZlclNpemUgOiAwKV07CisrICAgICAgaWYgKHBiW21heExlbl0gPT0gY3VyW21heExlbl0gJiYgKnBiID09ICpjdXIpCisrICAgICAgeworKyAgICAgICAgVUludDMyIGxlbiA9IDA7CisrICAgICAgICB3aGlsZSAoKytsZW4gIT0gbGVuTGltaXQpCisrICAgICAgICAgIGlmIChwYltsZW5dICE9IGN1cltsZW5dKQorKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgaWYgKG1heExlbiA8IGxlbikKKysgICAgICAgIHsKKysgICAgICAgICAgKmRpc3RhbmNlcysrID0gbWF4TGVuID0gbGVuOworKyAgICAgICAgICAqZGlzdGFuY2VzKysgPSBkZWx0YSAtIDE7CisrICAgICAgICAgIGlmIChsZW4gPT0gbGVuTGltaXQpCisrICAgICAgICAgICAgcmV0dXJuIGRpc3RhbmNlczsKKysgICAgICAgIH0KKysgICAgICB9CisrICAgIH0KKysgIH0KKyt9CisrCisrVUludDMyICogR2V0TWF0Y2hlc1NwZWMxKFVJbnQzMiBsZW5MaW1pdCwgVUludDMyIGN1ck1hdGNoLCBVSW50MzIgcG9zLCBjb25zdCBCeXRlICpjdXIsIENMelJlZiAqc29uLAorKyAgICBVSW50MzIgX2N5Y2xpY0J1ZmZlclBvcywgVUludDMyIF9jeWNsaWNCdWZmZXJTaXplLCBVSW50MzIgY3V0VmFsdWUsCisrICAgIFVJbnQzMiAqZGlzdGFuY2VzLCBVSW50MzIgbWF4TGVuKQorK3sKKysgIENMelJlZiAqcHRyMCA9IHNvbiArIChfY3ljbGljQnVmZmVyUG9zIDw8IDEpICsgMTsKKysgIENMelJlZiAqcHRyMSA9IHNvbiArIChfY3ljbGljQnVmZmVyUG9zIDw8IDEpOworKyAgVUludDMyIGxlbjAgPSAwLCBsZW4xID0gMDsKKysgIGZvciAoOzspCisrICB7CisrICAgIFVJbnQzMiBkZWx0YSA9IHBvcyAtIGN1ck1hdGNoOworKyAgICBpZiAoY3V0VmFsdWUtLSA9PSAwIHx8IGRlbHRhID49IF9jeWNsaWNCdWZmZXJTaXplKQorKyAgICB7CisrICAgICAgKnB0cjAgPSAqcHRyMSA9IGtFbXB0eUhhc2hWYWx1ZTsKKysgICAgICByZXR1cm4gZGlzdGFuY2VzOworKyAgICB9CisrICAgIHsKKysgICAgICBDTHpSZWYgKnBhaXIgPSBzb24gKyAoKF9jeWNsaWNCdWZmZXJQb3MgLSBkZWx0YSArICgoZGVsdGEgPiBfY3ljbGljQnVmZmVyUG9zKSA/IF9jeWNsaWNCdWZmZXJTaXplIDogMCkpIDw8IDEpOworKyAgICAgIGNvbnN0IEJ5dGUgKnBiID0gY3VyIC0gZGVsdGE7CisrICAgICAgVUludDMyIGxlbiA9IChsZW4wIDwgbGVuMSA/IGxlbjAgOiBsZW4xKTsKKysgICAgICBpZiAocGJbbGVuXSA9PSBjdXJbbGVuXSkKKysgICAgICB7CisrICAgICAgICBpZiAoKytsZW4gIT0gbGVuTGltaXQgJiYgcGJbbGVuXSA9PSBjdXJbbGVuXSkKKysgICAgICAgICAgd2hpbGUgKCsrbGVuICE9IGxlbkxpbWl0KQorKyAgICAgICAgICAgIGlmIChwYltsZW5dICE9IGN1cltsZW5dKQorKyAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBpZiAobWF4TGVuIDwgbGVuKQorKyAgICAgICAgeworKyAgICAgICAgICAqZGlzdGFuY2VzKysgPSBtYXhMZW4gPSBsZW47CisrICAgICAgICAgICpkaXN0YW5jZXMrKyA9IGRlbHRhIC0gMTsKKysgICAgICAgICAgaWYgKGxlbiA9PSBsZW5MaW1pdCkKKysgICAgICAgICAgeworKyAgICAgICAgICAgICpwdHIxID0gcGFpclswXTsKKysgICAgICAgICAgICAqcHRyMCA9IHBhaXJbMV07CisrICAgICAgICAgICAgcmV0dXJuIGRpc3RhbmNlczsKKysgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgIH0KKysgICAgICBpZiAocGJbbGVuXSA8IGN1cltsZW5dKQorKyAgICAgIHsKKysgICAgICAgICpwdHIxID0gY3VyTWF0Y2g7CisrICAgICAgICBwdHIxID0gcGFpciArIDE7CisrICAgICAgICBjdXJNYXRjaCA9ICpwdHIxOworKyAgICAgICAgbGVuMSA9IGxlbjsKKysgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgIHsKKysgICAgICAgICpwdHIwID0gY3VyTWF0Y2g7CisrICAgICAgICBwdHIwID0gcGFpcjsKKysgICAgICAgIGN1ck1hdGNoID0gKnB0cjA7CisrICAgICAgICBsZW4wID0gbGVuOworKyAgICAgIH0KKysgICAgfQorKyAgfQorK30KKysKKytzdGF0aWMgdm9pZCBTa2lwTWF0Y2hlc1NwZWMoVUludDMyIGxlbkxpbWl0LCBVSW50MzIgY3VyTWF0Y2gsIFVJbnQzMiBwb3MsIGNvbnN0IEJ5dGUgKmN1ciwgQ0x6UmVmICpzb24sCisrICAgIFVJbnQzMiBfY3ljbGljQnVmZmVyUG9zLCBVSW50MzIgX2N5Y2xpY0J1ZmZlclNpemUsIFVJbnQzMiBjdXRWYWx1ZSkKKyt7CisrICBDTHpSZWYgKnB0cjAgPSBzb24gKyAoX2N5Y2xpY0J1ZmZlclBvcyA8PCAxKSArIDE7CisrICBDTHpSZWYgKnB0cjEgPSBzb24gKyAoX2N5Y2xpY0J1ZmZlclBvcyA8PCAxKTsKKysgIFVJbnQzMiBsZW4wID0gMCwgbGVuMSA9IDA7CisrICBmb3IgKDs7KQorKyAgeworKyAgICBVSW50MzIgZGVsdGEgPSBwb3MgLSBjdXJNYXRjaDsKKysgICAgaWYgKGN1dFZhbHVlLS0gPT0gMCB8fCBkZWx0YSA+PSBfY3ljbGljQnVmZmVyU2l6ZSkKKysgICAgeworKyAgICAgICpwdHIwID0gKnB0cjEgPSBrRW1wdHlIYXNoVmFsdWU7CisrICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIHsKKysgICAgICBDTHpSZWYgKnBhaXIgPSBzb24gKyAoKF9jeWNsaWNCdWZmZXJQb3MgLSBkZWx0YSArICgoZGVsdGEgPiBfY3ljbGljQnVmZmVyUG9zKSA/IF9jeWNsaWNCdWZmZXJTaXplIDogMCkpIDw8IDEpOworKyAgICAgIGNvbnN0IEJ5dGUgKnBiID0gY3VyIC0gZGVsdGE7CisrICAgICAgVUludDMyIGxlbiA9IChsZW4wIDwgbGVuMSA/IGxlbjAgOiBsZW4xKTsKKysgICAgICBpZiAocGJbbGVuXSA9PSBjdXJbbGVuXSkKKysgICAgICB7CisrICAgICAgICB3aGlsZSAoKytsZW4gIT0gbGVuTGltaXQpCisrICAgICAgICAgIGlmIChwYltsZW5dICE9IGN1cltsZW5dKQorKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgeworKyAgICAgICAgICBpZiAobGVuID09IGxlbkxpbWl0KQorKyAgICAgICAgICB7CisrICAgICAgICAgICAgKnB0cjEgPSBwYWlyWzBdOworKyAgICAgICAgICAgICpwdHIwID0gcGFpclsxXTsKKysgICAgICAgICAgICByZXR1cm47CisrICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICB9CisrICAgICAgaWYgKHBiW2xlbl0gPCBjdXJbbGVuXSkKKysgICAgICB7CisrICAgICAgICAqcHRyMSA9IGN1ck1hdGNoOworKyAgICAgICAgcHRyMSA9IHBhaXIgKyAxOworKyAgICAgICAgY3VyTWF0Y2ggPSAqcHRyMTsKKysgICAgICAgIGxlbjEgPSBsZW47CisrICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICB7CisrICAgICAgICAqcHRyMCA9IGN1ck1hdGNoOworKyAgICAgICAgcHRyMCA9IHBhaXI7CisrICAgICAgICBjdXJNYXRjaCA9ICpwdHIwOworKyAgICAgICAgbGVuMCA9IGxlbjsKKysgICAgICB9CisrICAgIH0KKysgIH0KKyt9CisrCisrI2RlZmluZSBNT1ZFX1BPUyBcCisrICArK3AtPmN5Y2xpY0J1ZmZlclBvczsgXAorKyAgcC0+YnVmZmVyKys7IFwKKysgIGlmICgrK3AtPnBvcyA9PSBwLT5wb3NMaW1pdCkgTWF0Y2hGaW5kZXJfQ2hlY2tMaW1pdHMocCk7CisrCisrI2RlZmluZSBNT1ZFX1BPU19SRVQgTU9WRV9QT1MgcmV0dXJuIG9mZnNldDsKKysKKytzdGF0aWMgdm9pZCBNYXRjaEZpbmRlcl9Nb3ZlUG9zKENNYXRjaEZpbmRlciAqcCkgeyBNT1ZFX1BPUzsgfQorKworKyNkZWZpbmUgR0VUX01BVENIRVNfSEVBREVSMihtaW5MZW4sIHJldF9vcCkgXAorKyAgVUludDMyIGxlbkxpbWl0OyBVSW50MzIgaGFzaFZhbHVlOyBjb25zdCBCeXRlICpjdXI7IFVJbnQzMiBjdXJNYXRjaDsgXAorKyAgbGVuTGltaXQgPSBwLT5sZW5MaW1pdDsgeyBpZiAobGVuTGltaXQgPCBtaW5MZW4pIHsgTWF0Y2hGaW5kZXJfTW92ZVBvcyhwKTsgcmV0X29wOyB9fSBcCisrICBjdXIgPSBwLT5idWZmZXI7CisrCisrI2RlZmluZSBHRVRfTUFUQ0hFU19IRUFERVIobWluTGVuKSBHRVRfTUFUQ0hFU19IRUFERVIyKG1pbkxlbiwgcmV0dXJuIDApCisrI2RlZmluZSBTS0lQX0hFQURFUihtaW5MZW4pICAgICAgICBHRVRfTUFUQ0hFU19IRUFERVIyKG1pbkxlbiwgY29udGludWUpCisrCisrI2RlZmluZSBNRl9QQVJBTVMocCkgcC0+cG9zLCBwLT5idWZmZXIsIHAtPnNvbiwgcC0+Y3ljbGljQnVmZmVyUG9zLCBwLT5jeWNsaWNCdWZmZXJTaXplLCBwLT5jdXRWYWx1ZQorKworKyNkZWZpbmUgR0VUX01BVENIRVNfRk9PVEVSKG9mZnNldCwgbWF4TGVuKSBcCisrICBvZmZzZXQgPSAoVUludDMyKShHZXRNYXRjaGVzU3BlYzEobGVuTGltaXQsIGN1ck1hdGNoLCBNRl9QQVJBTVMocCksIFwKKysgIGRpc3RhbmNlcyArIG9mZnNldCwgbWF4TGVuKSAtIGRpc3RhbmNlcyk7IE1PVkVfUE9TX1JFVDsKKysKKysjZGVmaW5lIFNLSVBfRk9PVEVSIFwKKysgIFNraXBNYXRjaGVzU3BlYyhsZW5MaW1pdCwgY3VyTWF0Y2gsIE1GX1BBUkFNUyhwKSk7IE1PVkVfUE9TOworKworK3N0YXRpYyBVSW50MzIgQnQyX01hdGNoRmluZGVyX0dldE1hdGNoZXMoQ01hdGNoRmluZGVyICpwLCBVSW50MzIgKmRpc3RhbmNlcykKKyt7CisrICBVSW50MzIgb2Zmc2V0OworKyAgR0VUX01BVENIRVNfSEVBREVSKDIpCisrICBIQVNIMl9DQUxDOworKyAgY3VyTWF0Y2ggPSBwLT5oYXNoW2hhc2hWYWx1ZV07CisrICBwLT5oYXNoW2hhc2hWYWx1ZV0gPSBwLT5wb3M7CisrICBvZmZzZXQgPSAwOworKyAgR0VUX01BVENIRVNfRk9PVEVSKG9mZnNldCwgMSkKKyt9CisrCisrVUludDMyIEJ0M1ppcF9NYXRjaEZpbmRlcl9HZXRNYXRjaGVzKENNYXRjaEZpbmRlciAqcCwgVUludDMyICpkaXN0YW5jZXMpCisreworKyAgVUludDMyIG9mZnNldDsKKysgIEdFVF9NQVRDSEVTX0hFQURFUigzKQorKyAgSEFTSF9aSVBfQ0FMQzsKKysgIGN1ck1hdGNoID0gcC0+aGFzaFtoYXNoVmFsdWVdOworKyAgcC0+aGFzaFtoYXNoVmFsdWVdID0gcC0+cG9zOworKyAgb2Zmc2V0ID0gMDsKKysgIEdFVF9NQVRDSEVTX0ZPT1RFUihvZmZzZXQsIDIpCisrfQorKworK3N0YXRpYyBVSW50MzIgQnQzX01hdGNoRmluZGVyX0dldE1hdGNoZXMoQ01hdGNoRmluZGVyICpwLCBVSW50MzIgKmRpc3RhbmNlcykKKyt7CisrICBVSW50MzIgaGFzaDJWYWx1ZSwgZGVsdGEyLCBtYXhMZW4sIG9mZnNldDsKKysgIEdFVF9NQVRDSEVTX0hFQURFUigzKQorKworKyAgSEFTSDNfQ0FMQzsKKysKKysgIGRlbHRhMiA9IHAtPnBvcyAtIHAtPmhhc2hbaGFzaDJWYWx1ZV07CisrICBjdXJNYXRjaCA9IHAtPmhhc2hba0ZpeDNIYXNoU2l6ZSArIGhhc2hWYWx1ZV07CisrCisrICBwLT5oYXNoW2hhc2gyVmFsdWVdID0KKysgIHAtPmhhc2hba0ZpeDNIYXNoU2l6ZSArIGhhc2hWYWx1ZV0gPSBwLT5wb3M7CisrCisrCisrICBtYXhMZW4gPSAyOworKyAgb2Zmc2V0ID0gMDsKKysgIGlmIChkZWx0YTIgPCBwLT5jeWNsaWNCdWZmZXJTaXplICYmICooY3VyIC0gZGVsdGEyKSA9PSAqY3VyKQorKyAgeworKyAgICBmb3IgKDsgbWF4TGVuICE9IGxlbkxpbWl0OyBtYXhMZW4rKykKKysgICAgICBpZiAoY3VyWyhwdHJkaWZmX3QpbWF4TGVuIC0gZGVsdGEyXSAhPSBjdXJbbWF4TGVuXSkKKysgICAgICAgIGJyZWFrOworKyAgICBkaXN0YW5jZXNbMF0gPSBtYXhMZW47CisrICAgIGRpc3RhbmNlc1sxXSA9IGRlbHRhMiAtIDE7CisrICAgIG9mZnNldCA9IDI7CisrICAgIGlmIChtYXhMZW4gPT0gbGVuTGltaXQpCisrICAgIHsKKysgICAgICBTa2lwTWF0Y2hlc1NwZWMobGVuTGltaXQsIGN1ck1hdGNoLCBNRl9QQVJBTVMocCkpOworKyAgICAgIE1PVkVfUE9TX1JFVDsKKysgICAgfQorKyAgfQorKyAgR0VUX01BVENIRVNfRk9PVEVSKG9mZnNldCwgbWF4TGVuKQorK30KKysKKytzdGF0aWMgVUludDMyIEJ0NF9NYXRjaEZpbmRlcl9HZXRNYXRjaGVzKENNYXRjaEZpbmRlciAqcCwgVUludDMyICpkaXN0YW5jZXMpCisreworKyAgVUludDMyIGhhc2gyVmFsdWUsIGhhc2gzVmFsdWUsIGRlbHRhMiwgZGVsdGEzLCBtYXhMZW4sIG9mZnNldDsKKysgIEdFVF9NQVRDSEVTX0hFQURFUig0KQorKworKyAgSEFTSDRfQ0FMQzsKKysKKysgIGRlbHRhMiA9IHAtPnBvcyAtIHAtPmhhc2hbICAgICAgICAgICAgICAgIGhhc2gyVmFsdWVdOworKyAgZGVsdGEzID0gcC0+cG9zIC0gcC0+aGFzaFtrRml4M0hhc2hTaXplICsgaGFzaDNWYWx1ZV07CisrICBjdXJNYXRjaCA9IHAtPmhhc2hba0ZpeDRIYXNoU2l6ZSArIGhhc2hWYWx1ZV07CisrCisrICBwLT5oYXNoWyAgICAgICAgICAgICAgICBoYXNoMlZhbHVlXSA9CisrICBwLT5oYXNoW2tGaXgzSGFzaFNpemUgKyBoYXNoM1ZhbHVlXSA9CisrICBwLT5oYXNoW2tGaXg0SGFzaFNpemUgKyBoYXNoVmFsdWVdID0gcC0+cG9zOworKworKyAgbWF4TGVuID0gMTsKKysgIG9mZnNldCA9IDA7CisrICBpZiAoZGVsdGEyIDwgcC0+Y3ljbGljQnVmZmVyU2l6ZSAmJiAqKGN1ciAtIGRlbHRhMikgPT0gKmN1cikKKysgIHsKKysgICAgZGlzdGFuY2VzWzBdID0gbWF4TGVuID0gMjsKKysgICAgZGlzdGFuY2VzWzFdID0gZGVsdGEyIC0gMTsKKysgICAgb2Zmc2V0ID0gMjsKKysgIH0KKysgIGlmIChkZWx0YTIgIT0gZGVsdGEzICYmIGRlbHRhMyA8IHAtPmN5Y2xpY0J1ZmZlclNpemUgJiYgKihjdXIgLSBkZWx0YTMpID09ICpjdXIpCisrICB7CisrICAgIG1heExlbiA9IDM7CisrICAgIGRpc3RhbmNlc1tvZmZzZXQgKyAxXSA9IGRlbHRhMyAtIDE7CisrICAgIG9mZnNldCArPSAyOworKyAgICBkZWx0YTIgPSBkZWx0YTM7CisrICB9CisrICBpZiAob2Zmc2V0ICE9IDApCisrICB7CisrICAgIGZvciAoOyBtYXhMZW4gIT0gbGVuTGltaXQ7IG1heExlbisrKQorKyAgICAgIGlmIChjdXJbKHB0cmRpZmZfdCltYXhMZW4gLSBkZWx0YTJdICE9IGN1clttYXhMZW5dKQorKyAgICAgICAgYnJlYWs7CisrICAgIGRpc3RhbmNlc1tvZmZzZXQgLSAyXSA9IG1heExlbjsKKysgICAgaWYgKG1heExlbiA9PSBsZW5MaW1pdCkKKysgICAgeworKyAgICAgIFNraXBNYXRjaGVzU3BlYyhsZW5MaW1pdCwgY3VyTWF0Y2gsIE1GX1BBUkFNUyhwKSk7CisrICAgICAgTU9WRV9QT1NfUkVUOworKyAgICB9CisrICB9CisrICBpZiAobWF4TGVuIDwgMykKKysgICAgbWF4TGVuID0gMzsKKysgIEdFVF9NQVRDSEVTX0ZPT1RFUihvZmZzZXQsIG1heExlbikKKyt9CisrCisrc3RhdGljIFVJbnQzMiBIYzRfTWF0Y2hGaW5kZXJfR2V0TWF0Y2hlcyhDTWF0Y2hGaW5kZXIgKnAsIFVJbnQzMiAqZGlzdGFuY2VzKQorK3sKKysgIFVJbnQzMiBoYXNoMlZhbHVlLCBoYXNoM1ZhbHVlLCBkZWx0YTIsIGRlbHRhMywgbWF4TGVuLCBvZmZzZXQ7CisrICBHRVRfTUFUQ0hFU19IRUFERVIoNCkKKysKKysgIEhBU0g0X0NBTEM7CisrCisrICBkZWx0YTIgPSBwLT5wb3MgLSBwLT5oYXNoWyAgICAgICAgICAgICAgICBoYXNoMlZhbHVlXTsKKysgIGRlbHRhMyA9IHAtPnBvcyAtIHAtPmhhc2hba0ZpeDNIYXNoU2l6ZSArIGhhc2gzVmFsdWVdOworKyAgY3VyTWF0Y2ggPSBwLT5oYXNoW2tGaXg0SGFzaFNpemUgKyBoYXNoVmFsdWVdOworKworKyAgcC0+aGFzaFsgICAgICAgICAgICAgICAgaGFzaDJWYWx1ZV0gPQorKyAgcC0+aGFzaFtrRml4M0hhc2hTaXplICsgaGFzaDNWYWx1ZV0gPQorKyAgcC0+aGFzaFtrRml4NEhhc2hTaXplICsgaGFzaFZhbHVlXSA9IHAtPnBvczsKKysKKysgIG1heExlbiA9IDE7CisrICBvZmZzZXQgPSAwOworKyAgaWYgKGRlbHRhMiA8IHAtPmN5Y2xpY0J1ZmZlclNpemUgJiYgKihjdXIgLSBkZWx0YTIpID09ICpjdXIpCisrICB7CisrICAgIGRpc3RhbmNlc1swXSA9IG1heExlbiA9IDI7CisrICAgIGRpc3RhbmNlc1sxXSA9IGRlbHRhMiAtIDE7CisrICAgIG9mZnNldCA9IDI7CisrICB9CisrICBpZiAoZGVsdGEyICE9IGRlbHRhMyAmJiBkZWx0YTMgPCBwLT5jeWNsaWNCdWZmZXJTaXplICYmICooY3VyIC0gZGVsdGEzKSA9PSAqY3VyKQorKyAgeworKyAgICBtYXhMZW4gPSAzOworKyAgICBkaXN0YW5jZXNbb2Zmc2V0ICsgMV0gPSBkZWx0YTMgLSAxOworKyAgICBvZmZzZXQgKz0gMjsKKysgICAgZGVsdGEyID0gZGVsdGEzOworKyAgfQorKyAgaWYgKG9mZnNldCAhPSAwKQorKyAgeworKyAgICBmb3IgKDsgbWF4TGVuICE9IGxlbkxpbWl0OyBtYXhMZW4rKykKKysgICAgICBpZiAoY3VyWyhwdHJkaWZmX3QpbWF4TGVuIC0gZGVsdGEyXSAhPSBjdXJbbWF4TGVuXSkKKysgICAgICAgIGJyZWFrOworKyAgICBkaXN0YW5jZXNbb2Zmc2V0IC0gMl0gPSBtYXhMZW47CisrICAgIGlmIChtYXhMZW4gPT0gbGVuTGltaXQpCisrICAgIHsKKysgICAgICBwLT5zb25bcC0+Y3ljbGljQnVmZmVyUG9zXSA9IGN1ck1hdGNoOworKyAgICAgIE1PVkVfUE9TX1JFVDsKKysgICAgfQorKyAgfQorKyAgaWYgKG1heExlbiA8IDMpCisrICAgIG1heExlbiA9IDM7CisrICBvZmZzZXQgPSAoVUludDMyKShIY19HZXRNYXRjaGVzU3BlYyhsZW5MaW1pdCwgY3VyTWF0Y2gsIE1GX1BBUkFNUyhwKSwKKysgICAgZGlzdGFuY2VzICsgb2Zmc2V0LCBtYXhMZW4pIC0gKGRpc3RhbmNlcykpOworKyAgTU9WRV9QT1NfUkVUCisrfQorKworK1VJbnQzMiBIYzNaaXBfTWF0Y2hGaW5kZXJfR2V0TWF0Y2hlcyhDTWF0Y2hGaW5kZXIgKnAsIFVJbnQzMiAqZGlzdGFuY2VzKQorK3sKKysgIFVJbnQzMiBvZmZzZXQ7CisrICBHRVRfTUFUQ0hFU19IRUFERVIoMykKKysgIEhBU0hfWklQX0NBTEM7CisrICBjdXJNYXRjaCA9IHAtPmhhc2hbaGFzaFZhbHVlXTsKKysgIHAtPmhhc2hbaGFzaFZhbHVlXSA9IHAtPnBvczsKKysgIG9mZnNldCA9IChVSW50MzIpKEhjX0dldE1hdGNoZXNTcGVjKGxlbkxpbWl0LCBjdXJNYXRjaCwgTUZfUEFSQU1TKHApLAorKyAgICBkaXN0YW5jZXMsIDIpIC0gKGRpc3RhbmNlcykpOworKyAgTU9WRV9QT1NfUkVUCisrfQorKworK3N0YXRpYyB2b2lkIEJ0Ml9NYXRjaEZpbmRlcl9Ta2lwKENNYXRjaEZpbmRlciAqcCwgVUludDMyIG51bSkKKyt7CisrICBkbworKyAgeworKyAgICBTS0lQX0hFQURFUigyKQorKyAgICBIQVNIMl9DQUxDOworKyAgICBjdXJNYXRjaCA9IHAtPmhhc2hbaGFzaFZhbHVlXTsKKysgICAgcC0+aGFzaFtoYXNoVmFsdWVdID0gcC0+cG9zOworKyAgICBTS0lQX0ZPT1RFUgorKyAgfQorKyAgd2hpbGUgKC0tbnVtICE9IDApOworK30KKysKKyt2b2lkIEJ0M1ppcF9NYXRjaEZpbmRlcl9Ta2lwKENNYXRjaEZpbmRlciAqcCwgVUludDMyIG51bSkKKyt7CisrICBkbworKyAgeworKyAgICBTS0lQX0hFQURFUigzKQorKyAgICBIQVNIX1pJUF9DQUxDOworKyAgICBjdXJNYXRjaCA9IHAtPmhhc2hbaGFzaFZhbHVlXTsKKysgICAgcC0+aGFzaFtoYXNoVmFsdWVdID0gcC0+cG9zOworKyAgICBTS0lQX0ZPT1RFUgorKyAgfQorKyAgd2hpbGUgKC0tbnVtICE9IDApOworK30KKysKKytzdGF0aWMgdm9pZCBCdDNfTWF0Y2hGaW5kZXJfU2tpcChDTWF0Y2hGaW5kZXIgKnAsIFVJbnQzMiBudW0pCisreworKyAgZG8KKysgIHsKKysgICAgVUludDMyIGhhc2gyVmFsdWU7CisrICAgIFNLSVBfSEVBREVSKDMpCisrICAgIEhBU0gzX0NBTEM7CisrICAgIGN1ck1hdGNoID0gcC0+aGFzaFtrRml4M0hhc2hTaXplICsgaGFzaFZhbHVlXTsKKysgICAgcC0+aGFzaFtoYXNoMlZhbHVlXSA9CisrICAgIHAtPmhhc2hba0ZpeDNIYXNoU2l6ZSArIGhhc2hWYWx1ZV0gPSBwLT5wb3M7CisrICAgIFNLSVBfRk9PVEVSCisrICB9CisrICB3aGlsZSAoLS1udW0gIT0gMCk7CisrfQorKworK3N0YXRpYyB2b2lkIEJ0NF9NYXRjaEZpbmRlcl9Ta2lwKENNYXRjaEZpbmRlciAqcCwgVUludDMyIG51bSkKKyt7CisrICBkbworKyAgeworKyAgICBVSW50MzIgaGFzaDJWYWx1ZSwgaGFzaDNWYWx1ZTsKKysgICAgU0tJUF9IRUFERVIoNCkKKysgICAgSEFTSDRfQ0FMQzsKKysgICAgY3VyTWF0Y2ggPSBwLT5oYXNoW2tGaXg0SGFzaFNpemUgKyBoYXNoVmFsdWVdOworKyAgICBwLT5oYXNoWyAgICAgICAgICAgICAgICBoYXNoMlZhbHVlXSA9CisrICAgIHAtPmhhc2hba0ZpeDNIYXNoU2l6ZSArIGhhc2gzVmFsdWVdID0gcC0+cG9zOworKyAgICBwLT5oYXNoW2tGaXg0SGFzaFNpemUgKyBoYXNoVmFsdWVdID0gcC0+cG9zOworKyAgICBTS0lQX0ZPT1RFUgorKyAgfQorKyAgd2hpbGUgKC0tbnVtICE9IDApOworK30KKysKKytzdGF0aWMgdm9pZCBIYzRfTWF0Y2hGaW5kZXJfU2tpcChDTWF0Y2hGaW5kZXIgKnAsIFVJbnQzMiBudW0pCisreworKyAgZG8KKysgIHsKKysgICAgVUludDMyIGhhc2gyVmFsdWUsIGhhc2gzVmFsdWU7CisrICAgIFNLSVBfSEVBREVSKDQpCisrICAgIEhBU0g0X0NBTEM7CisrICAgIGN1ck1hdGNoID0gcC0+aGFzaFtrRml4NEhhc2hTaXplICsgaGFzaFZhbHVlXTsKKysgICAgcC0+aGFzaFsgICAgICAgICAgICAgICAgaGFzaDJWYWx1ZV0gPQorKyAgICBwLT5oYXNoW2tGaXgzSGFzaFNpemUgKyBoYXNoM1ZhbHVlXSA9CisrICAgIHAtPmhhc2hba0ZpeDRIYXNoU2l6ZSArIGhhc2hWYWx1ZV0gPSBwLT5wb3M7CisrICAgIHAtPnNvbltwLT5jeWNsaWNCdWZmZXJQb3NdID0gY3VyTWF0Y2g7CisrICAgIE1PVkVfUE9TCisrICB9CisrICB3aGlsZSAoLS1udW0gIT0gMCk7CisrfQorKworK3ZvaWQgSGMzWmlwX01hdGNoRmluZGVyX1NraXAoQ01hdGNoRmluZGVyICpwLCBVSW50MzIgbnVtKQorK3sKKysgIGRvCisrICB7CisrICAgIFNLSVBfSEVBREVSKDMpCisrICAgIEhBU0hfWklQX0NBTEM7CisrICAgIGN1ck1hdGNoID0gcC0+aGFzaFtoYXNoVmFsdWVdOworKyAgICBwLT5oYXNoW2hhc2hWYWx1ZV0gPSBwLT5wb3M7CisrICAgIHAtPnNvbltwLT5jeWNsaWNCdWZmZXJQb3NdID0gY3VyTWF0Y2g7CisrICAgIE1PVkVfUE9TCisrICB9CisrICB3aGlsZSAoLS1udW0gIT0gMCk7CisrfQorKworK3ZvaWQgTWF0Y2hGaW5kZXJfQ3JlYXRlVlRhYmxlKENNYXRjaEZpbmRlciAqcCwgSU1hdGNoRmluZGVyICp2VGFibGUpCisreworKyAgdlRhYmxlLT5Jbml0ID0gKE1mX0luaXRfRnVuYylNYXRjaEZpbmRlcl9Jbml0OworKyAgdlRhYmxlLT5HZXRJbmRleEJ5dGUgPSAoTWZfR2V0SW5kZXhCeXRlX0Z1bmMpTWF0Y2hGaW5kZXJfR2V0SW5kZXhCeXRlOworKyAgdlRhYmxlLT5HZXROdW1BdmFpbGFibGVCeXRlcyA9IChNZl9HZXROdW1BdmFpbGFibGVCeXRlc19GdW5jKU1hdGNoRmluZGVyX0dldE51bUF2YWlsYWJsZUJ5dGVzOworKyAgdlRhYmxlLT5HZXRQb2ludGVyVG9DdXJyZW50UG9zID0gKE1mX0dldFBvaW50ZXJUb0N1cnJlbnRQb3NfRnVuYylNYXRjaEZpbmRlcl9HZXRQb2ludGVyVG9DdXJyZW50UG9zOworKyAgaWYgKCFwLT5idE1vZGUpCisrICB7CisrICAgIHZUYWJsZS0+R2V0TWF0Y2hlcyA9IChNZl9HZXRNYXRjaGVzX0Z1bmMpSGM0X01hdGNoRmluZGVyX0dldE1hdGNoZXM7CisrICAgIHZUYWJsZS0+U2tpcCA9IChNZl9Ta2lwX0Z1bmMpSGM0X01hdGNoRmluZGVyX1NraXA7CisrICB9CisrICBlbHNlIGlmIChwLT5udW1IYXNoQnl0ZXMgPT0gMikKKysgIHsKKysgICAgdlRhYmxlLT5HZXRNYXRjaGVzID0gKE1mX0dldE1hdGNoZXNfRnVuYylCdDJfTWF0Y2hGaW5kZXJfR2V0TWF0Y2hlczsKKysgICAgdlRhYmxlLT5Ta2lwID0gKE1mX1NraXBfRnVuYylCdDJfTWF0Y2hGaW5kZXJfU2tpcDsKKysgIH0KKysgIGVsc2UgaWYgKHAtPm51bUhhc2hCeXRlcyA9PSAzKQorKyAgeworKyAgICB2VGFibGUtPkdldE1hdGNoZXMgPSAoTWZfR2V0TWF0Y2hlc19GdW5jKUJ0M19NYXRjaEZpbmRlcl9HZXRNYXRjaGVzOworKyAgICB2VGFibGUtPlNraXAgPSAoTWZfU2tpcF9GdW5jKUJ0M19NYXRjaEZpbmRlcl9Ta2lwOworKyAgfQorKyAgZWxzZQorKyAgeworKyAgICB2VGFibGUtPkdldE1hdGNoZXMgPSAoTWZfR2V0TWF0Y2hlc19GdW5jKUJ0NF9NYXRjaEZpbmRlcl9HZXRNYXRjaGVzOworKyAgICB2VGFibGUtPlNraXAgPSAoTWZfU2tpcF9GdW5jKUJ0NF9NYXRjaEZpbmRlcl9Ta2lwOworKyAgfQorK30KKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYi9sem1hL0x6bWFEZWMuYworQEAgLTAsMCArMSw5OTkgQEAKKysvKiBMem1hRGVjLmMgLS0gTFpNQSBEZWNvZGVyCisrMjAwOS0wOS0yMCA6IElnb3IgUGF2bG92IDogUHVibGljIGRvbWFpbiAqLworKworKyNpbmNsdWRlICJMem1hRGVjLmgiCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKworKyNkZWZpbmUga051bVRvcEJpdHMgMjQKKysjZGVmaW5lIGtUb3BWYWx1ZSAoKFVJbnQzMikxIDw8IGtOdW1Ub3BCaXRzKQorKworKyNkZWZpbmUga051bUJpdE1vZGVsVG90YWxCaXRzIDExCisrI2RlZmluZSBrQml0TW9kZWxUb3RhbCAoMSA8PCBrTnVtQml0TW9kZWxUb3RhbEJpdHMpCisrI2RlZmluZSBrTnVtTW92ZUJpdHMgNQorKworKyNkZWZpbmUgUkNfSU5JVF9TSVpFIDUKKysKKysjZGVmaW5lIE5PUk1BTElaRSBpZiAocmFuZ2UgPCBrVG9wVmFsdWUpIHsgcmFuZ2UgPDw9IDg7IGNvZGUgPSAoY29kZSA8PCA4KSB8ICgqYnVmKyspOyB9CisrCisrI2RlZmluZSBJRl9CSVRfMChwKSB0dHQgPSAqKHApOyBOT1JNQUxJWkU7IGJvdW5kID0gKHJhbmdlID4+IGtOdW1CaXRNb2RlbFRvdGFsQml0cykgKiB0dHQ7IGlmIChjb2RlIDwgYm91bmQpCisrI2RlZmluZSBVUERBVEVfMChwKSByYW5nZSA9IGJvdW5kOyAqKHApID0gKENMem1hUHJvYikodHR0ICsgKChrQml0TW9kZWxUb3RhbCAtIHR0dCkgPj4ga051bU1vdmVCaXRzKSk7CisrI2RlZmluZSBVUERBVEVfMShwKSByYW5nZSAtPSBib3VuZDsgY29kZSAtPSBib3VuZDsgKihwKSA9IChDTHptYVByb2IpKHR0dCAtICh0dHQgPj4ga051bU1vdmVCaXRzKSk7CisrI2RlZmluZSBHRVRfQklUMihwLCBpLCBBMCwgQTEpIElGX0JJVF8wKHApIFwKKysgIHsgVVBEQVRFXzAocCk7IGkgPSAoaSArIGkpOyBBMDsgfSBlbHNlIFwKKysgIHsgVVBEQVRFXzEocCk7IGkgPSAoaSArIGkpICsgMTsgQTE7IH0KKysjZGVmaW5lIEdFVF9CSVQocCwgaSkgR0VUX0JJVDIocCwgaSwgOyAsIDspCisrCisrI2RlZmluZSBUUkVFX0dFVF9CSVQocHJvYnMsIGkpIHsgR0VUX0JJVCgocHJvYnMgKyBpKSwgaSk7IH0KKysjZGVmaW5lIFRSRUVfREVDT0RFKHByb2JzLCBsaW1pdCwgaSkgXAorKyAgeyBpID0gMTsgZG8geyBUUkVFX0dFVF9CSVQocHJvYnMsIGkpOyB9IHdoaWxlIChpIDwgbGltaXQpOyBpIC09IGxpbWl0OyB9CisrCisrLyogI2RlZmluZSBfTFpNQV9TSVpFX09QVCAqLworKworKyNpZmRlZiBfTFpNQV9TSVpFX09QVAorKyNkZWZpbmUgVFJFRV82X0RFQ09ERShwcm9icywgaSkgVFJFRV9ERUNPREUocHJvYnMsICgxIDw8IDYpLCBpKQorKyNlbHNlCisrI2RlZmluZSBUUkVFXzZfREVDT0RFKHByb2JzLCBpKSBcCisrICB7IGkgPSAxOyBcCisrICBUUkVFX0dFVF9CSVQocHJvYnMsIGkpOyBcCisrICBUUkVFX0dFVF9CSVQocHJvYnMsIGkpOyBcCisrICBUUkVFX0dFVF9CSVQocHJvYnMsIGkpOyBcCisrICBUUkVFX0dFVF9CSVQocHJvYnMsIGkpOyBcCisrICBUUkVFX0dFVF9CSVQocHJvYnMsIGkpOyBcCisrICBUUkVFX0dFVF9CSVQocHJvYnMsIGkpOyBcCisrICBpIC09IDB4NDA7IH0KKysjZW5kaWYKKysKKysjZGVmaW5lIE5PUk1BTElaRV9DSEVDSyBpZiAocmFuZ2UgPCBrVG9wVmFsdWUpIHsgaWYgKGJ1ZiA+PSBidWZMaW1pdCkgcmV0dXJuIERVTU1ZX0VSUk9SOyByYW5nZSA8PD0gODsgY29kZSA9IChjb2RlIDw8IDgpIHwgKCpidWYrKyk7IH0KKysKKysjZGVmaW5lIElGX0JJVF8wX0NIRUNLKHApIHR0dCA9ICoocCk7IE5PUk1BTElaRV9DSEVDSzsgYm91bmQgPSAocmFuZ2UgPj4ga051bUJpdE1vZGVsVG90YWxCaXRzKSAqIHR0dDsgaWYgKGNvZGUgPCBib3VuZCkKKysjZGVmaW5lIFVQREFURV8wX0NIRUNLIHJhbmdlID0gYm91bmQ7CisrI2RlZmluZSBVUERBVEVfMV9DSEVDSyByYW5nZSAtPSBib3VuZDsgY29kZSAtPSBib3VuZDsKKysjZGVmaW5lIEdFVF9CSVQyX0NIRUNLKHAsIGksIEEwLCBBMSkgSUZfQklUXzBfQ0hFQ0socCkgXAorKyAgeyBVUERBVEVfMF9DSEVDSzsgaSA9IChpICsgaSk7IEEwOyB9IGVsc2UgXAorKyAgeyBVUERBVEVfMV9DSEVDSzsgaSA9IChpICsgaSkgKyAxOyBBMTsgfQorKyNkZWZpbmUgR0VUX0JJVF9DSEVDSyhwLCBpKSBHRVRfQklUMl9DSEVDSyhwLCBpLCA7ICwgOykKKysjZGVmaW5lIFRSRUVfREVDT0RFX0NIRUNLKHByb2JzLCBsaW1pdCwgaSkgXAorKyAgeyBpID0gMTsgZG8geyBHRVRfQklUX0NIRUNLKHByb2JzICsgaSwgaSkgfSB3aGlsZSAoaSA8IGxpbWl0KTsgaSAtPSBsaW1pdDsgfQorKworKworKyNkZWZpbmUga051bVBvc0JpdHNNYXggNAorKyNkZWZpbmUga051bVBvc1N0YXRlc01heCAoMSA8PCBrTnVtUG9zQml0c01heCkKKysKKysjZGVmaW5lIGtMZW5OdW1Mb3dCaXRzIDMKKysjZGVmaW5lIGtMZW5OdW1Mb3dTeW1ib2xzICgxIDw8IGtMZW5OdW1Mb3dCaXRzKQorKyNkZWZpbmUga0xlbk51bU1pZEJpdHMgMworKyNkZWZpbmUga0xlbk51bU1pZFN5bWJvbHMgKDEgPDwga0xlbk51bU1pZEJpdHMpCisrI2RlZmluZSBrTGVuTnVtSGlnaEJpdHMgOAorKyNkZWZpbmUga0xlbk51bUhpZ2hTeW1ib2xzICgxIDw8IGtMZW5OdW1IaWdoQml0cykKKysKKysjZGVmaW5lIExlbkNob2ljZSAwCisrI2RlZmluZSBMZW5DaG9pY2UyIChMZW5DaG9pY2UgKyAxKQorKyNkZWZpbmUgTGVuTG93IChMZW5DaG9pY2UyICsgMSkKKysjZGVmaW5lIExlbk1pZCAoTGVuTG93ICsgKGtOdW1Qb3NTdGF0ZXNNYXggPDwga0xlbk51bUxvd0JpdHMpKQorKyNkZWZpbmUgTGVuSGlnaCAoTGVuTWlkICsgKGtOdW1Qb3NTdGF0ZXNNYXggPDwga0xlbk51bU1pZEJpdHMpKQorKyNkZWZpbmUga051bUxlblByb2JzIChMZW5IaWdoICsga0xlbk51bUhpZ2hTeW1ib2xzKQorKworKworKyNkZWZpbmUga051bVN0YXRlcyAxMgorKyNkZWZpbmUga051bUxpdFN0YXRlcyA3CisrCisrI2RlZmluZSBrU3RhcnRQb3NNb2RlbEluZGV4IDQKKysjZGVmaW5lIGtFbmRQb3NNb2RlbEluZGV4IDE0CisrI2RlZmluZSBrTnVtRnVsbERpc3RhbmNlcyAoMSA8PCAoa0VuZFBvc01vZGVsSW5kZXggPj4gMSkpCisrCisrI2RlZmluZSBrTnVtUG9zU2xvdEJpdHMgNgorKyNkZWZpbmUga051bUxlblRvUG9zU3RhdGVzIDQKKysKKysjZGVmaW5lIGtOdW1BbGlnbkJpdHMgNAorKyNkZWZpbmUga0FsaWduVGFibGVTaXplICgxIDw8IGtOdW1BbGlnbkJpdHMpCisrCisrI2RlZmluZSBrTWF0Y2hNaW5MZW4gMgorKyNkZWZpbmUga01hdGNoU3BlY0xlblN0YXJ0IChrTWF0Y2hNaW5MZW4gKyBrTGVuTnVtTG93U3ltYm9scyArIGtMZW5OdW1NaWRTeW1ib2xzICsga0xlbk51bUhpZ2hTeW1ib2xzKQorKworKyNkZWZpbmUgSXNNYXRjaCAwCisrI2RlZmluZSBJc1JlcCAoSXNNYXRjaCArIChrTnVtU3RhdGVzIDw8IGtOdW1Qb3NCaXRzTWF4KSkKKysjZGVmaW5lIElzUmVwRzAgKElzUmVwICsga051bVN0YXRlcykKKysjZGVmaW5lIElzUmVwRzEgKElzUmVwRzAgKyBrTnVtU3RhdGVzKQorKyNkZWZpbmUgSXNSZXBHMiAoSXNSZXBHMSArIGtOdW1TdGF0ZXMpCisrI2RlZmluZSBJc1JlcDBMb25nIChJc1JlcEcyICsga051bVN0YXRlcykKKysjZGVmaW5lIFBvc1Nsb3QgKElzUmVwMExvbmcgKyAoa051bVN0YXRlcyA8PCBrTnVtUG9zQml0c01heCkpCisrI2RlZmluZSBTcGVjUG9zIChQb3NTbG90ICsgKGtOdW1MZW5Ub1Bvc1N0YXRlcyA8PCBrTnVtUG9zU2xvdEJpdHMpKQorKyNkZWZpbmUgQWxpZ24gKFNwZWNQb3MgKyBrTnVtRnVsbERpc3RhbmNlcyAtIGtFbmRQb3NNb2RlbEluZGV4KQorKyNkZWZpbmUgTGVuQ29kZXIgKEFsaWduICsga0FsaWduVGFibGVTaXplKQorKyNkZWZpbmUgUmVwTGVuQ29kZXIgKExlbkNvZGVyICsga051bUxlblByb2JzKQorKyNkZWZpbmUgTGl0ZXJhbCAoUmVwTGVuQ29kZXIgKyBrTnVtTGVuUHJvYnMpCisrCisrI2RlZmluZSBMWk1BX0JBU0VfU0laRSAxODQ2CisrI2RlZmluZSBMWk1BX0xJVF9TSVpFIDc2OAorKworKyNkZWZpbmUgTHptYVByb3BzX0dldE51bVByb2JzKHApICgoVUludDMyKUxaTUFfQkFTRV9TSVpFICsgKExaTUFfTElUX1NJWkUgPDwgKChwKS0+bGMgKyAocCktPmxwKSkpCisrCisrI2lmIExpdGVyYWwgIT0gTFpNQV9CQVNFX1NJWkUKKytTdG9wQ29tcGlsaW5nRHVlQlVHCisrI2VuZGlmCisrCisrI2RlZmluZSBMWk1BX0RJQ19NSU4gKDEgPDwgMTIpCisrCisrLyogRmlyc3QgTFpNQS1zeW1ib2wgaXMgYWx3YXlzIGRlY29kZWQuCisrQW5kIGl0IGRlY29kZXMgbmV3IExaTUEtc3ltYm9scyB3aGlsZSAoYnVmIDwgYnVmTGltaXQpLCBidXQgImJ1ZiIgaXMgd2l0aG91dCBsYXN0IG5vcm1hbGl6YXRpb24KKytPdXQ6CisrICBSZXN1bHQ6CisrICAgIFNaX09LIC0gT0sKKysgICAgU1pfRVJST1JfREFUQSAtIEVycm9yCisrICBwLT5yZW1haW5MZW46CisrICAgIDwga01hdGNoU3BlY0xlblN0YXJ0IDogbm9ybWFsIHJlbWFpbgorKyAgICA9IGtNYXRjaFNwZWNMZW5TdGFydCA6IGZpbmlzaGVkCisrICAgID0ga01hdGNoU3BlY0xlblN0YXJ0ICsgMSA6IEZsdXNoIG1hcmtlcgorKyAgICA9IGtNYXRjaFNwZWNMZW5TdGFydCArIDIgOiBTdGF0ZSBJbml0IE1hcmtlcgorKyovCisrCisrc3RhdGljIGludCBNWV9GQVNUX0NBTEwgTHptYURlY19EZWNvZGVSZWFsKENMem1hRGVjICpwLCBTaXplVCBsaW1pdCwgY29uc3QgQnl0ZSAqYnVmTGltaXQpCisreworKyAgQ0x6bWFQcm9iICpwcm9icyA9IHAtPnByb2JzOworKworKyAgdW5zaWduZWQgc3RhdGUgPSBwLT5zdGF0ZTsKKysgIFVJbnQzMiByZXAwID0gcC0+cmVwc1swXSwgcmVwMSA9IHAtPnJlcHNbMV0sIHJlcDIgPSBwLT5yZXBzWzJdLCByZXAzID0gcC0+cmVwc1szXTsKKysgIHVuc2lnbmVkIHBiTWFzayA9ICgodW5zaWduZWQpMSA8PCAocC0+cHJvcC5wYikpIC0gMTsKKysgIHVuc2lnbmVkIGxwTWFzayA9ICgodW5zaWduZWQpMSA8PCAocC0+cHJvcC5scCkpIC0gMTsKKysgIHVuc2lnbmVkIGxjID0gcC0+cHJvcC5sYzsKKysKKysgIEJ5dGUgKmRpYyA9IHAtPmRpYzsKKysgIFNpemVUIGRpY0J1ZlNpemUgPSBwLT5kaWNCdWZTaXplOworKyAgU2l6ZVQgZGljUG9zID0gcC0+ZGljUG9zOworKworKyAgVUludDMyIHByb2Nlc3NlZFBvcyA9IHAtPnByb2Nlc3NlZFBvczsKKysgIFVJbnQzMiBjaGVja0RpY1NpemUgPSBwLT5jaGVja0RpY1NpemU7CisrICB1bnNpZ25lZCBsZW4gPSAwOworKworKyAgY29uc3QgQnl0ZSAqYnVmID0gcC0+YnVmOworKyAgVUludDMyIHJhbmdlID0gcC0+cmFuZ2U7CisrICBVSW50MzIgY29kZSA9IHAtPmNvZGU7CisrCisrICBkbworKyAgeworKyAgICBDTHptYVByb2IgKnByb2I7CisrICAgIFVJbnQzMiBib3VuZDsKKysgICAgdW5zaWduZWQgdHR0OworKyAgICB1bnNpZ25lZCBwb3NTdGF0ZSA9IHByb2Nlc3NlZFBvcyAmIHBiTWFzazsKKysKKysgICAgcHJvYiA9IHByb2JzICsgSXNNYXRjaCArIChzdGF0ZSA8PCBrTnVtUG9zQml0c01heCkgKyBwb3NTdGF0ZTsKKysgICAgSUZfQklUXzAocHJvYikKKysgICAgeworKyAgICAgIHVuc2lnbmVkIHN5bWJvbDsKKysgICAgICBVUERBVEVfMChwcm9iKTsKKysgICAgICBwcm9iID0gcHJvYnMgKyBMaXRlcmFsOworKyAgICAgIGlmIChjaGVja0RpY1NpemUgIT0gMCB8fCBwcm9jZXNzZWRQb3MgIT0gMCkKKysgICAgICAgIHByb2IgKz0gKExaTUFfTElUX1NJWkUgKiAoKChwcm9jZXNzZWRQb3MgJiBscE1hc2spIDw8IGxjKSArCisrICAgICAgICAoZGljWyhkaWNQb3MgPT0gMCA/IGRpY0J1ZlNpemUgOiBkaWNQb3MpIC0gMV0gPj4gKDggLSBsYykpKSk7CisrCisrICAgICAgaWYgKHN0YXRlIDwga051bUxpdFN0YXRlcykKKysgICAgICB7CisrICAgICAgICBzdGF0ZSAtPSAoc3RhdGUgPCA0KSA/IHN0YXRlIDogMzsKKysgICAgICAgIHN5bWJvbCA9IDE7CisrICAgICAgICBkbyB7IEdFVF9CSVQocHJvYiArIHN5bWJvbCwgc3ltYm9sKSB9IHdoaWxlIChzeW1ib2wgPCAweDEwMCk7CisrICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICB7CisrICAgICAgICB1bnNpZ25lZCBtYXRjaEJ5dGUgPSBwLT5kaWNbKGRpY1BvcyAtIHJlcDApICsgKChkaWNQb3MgPCByZXAwKSA/IGRpY0J1ZlNpemUgOiAwKV07CisrICAgICAgICB1bnNpZ25lZCBvZmZzID0gMHgxMDA7CisrICAgICAgICBzdGF0ZSAtPSAoc3RhdGUgPCAxMCkgPyAzIDogNjsKKysgICAgICAgIHN5bWJvbCA9IDE7CisrICAgICAgICBkbworKyAgICAgICAgeworKyAgICAgICAgICB1bnNpZ25lZCBiaXQ7CisrICAgICAgICAgIENMem1hUHJvYiAqcHJvYkxpdDsKKysgICAgICAgICAgbWF0Y2hCeXRlIDw8PSAxOworKyAgICAgICAgICBiaXQgPSAobWF0Y2hCeXRlICYgb2Zmcyk7CisrICAgICAgICAgIHByb2JMaXQgPSBwcm9iICsgb2ZmcyArIGJpdCArIHN5bWJvbDsKKysgICAgICAgICAgR0VUX0JJVDIocHJvYkxpdCwgc3ltYm9sLCBvZmZzICY9IH5iaXQsIG9mZnMgJj0gYml0KQorKyAgICAgICAgfQorKyAgICAgICAgd2hpbGUgKHN5bWJvbCA8IDB4MTAwKTsKKysgICAgICB9CisrICAgICAgZGljW2RpY1BvcysrXSA9IChCeXRlKXN5bWJvbDsKKysgICAgICBwcm9jZXNzZWRQb3MrKzsKKysgICAgICBjb250aW51ZTsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICBVUERBVEVfMShwcm9iKTsKKysgICAgICBwcm9iID0gcHJvYnMgKyBJc1JlcCArIHN0YXRlOworKyAgICAgIElGX0JJVF8wKHByb2IpCisrICAgICAgeworKyAgICAgICAgVVBEQVRFXzAocHJvYik7CisrICAgICAgICBzdGF0ZSArPSBrTnVtU3RhdGVzOworKyAgICAgICAgcHJvYiA9IHByb2JzICsgTGVuQ29kZXI7CisrICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICB7CisrICAgICAgICBVUERBVEVfMShwcm9iKTsKKysgICAgICAgIGlmIChjaGVja0RpY1NpemUgPT0gMCAmJiBwcm9jZXNzZWRQb3MgPT0gMCkKKysgICAgICAgICAgcmV0dXJuIFNaX0VSUk9SX0RBVEE7CisrICAgICAgICBwcm9iID0gcHJvYnMgKyBJc1JlcEcwICsgc3RhdGU7CisrICAgICAgICBJRl9CSVRfMChwcm9iKQorKyAgICAgICAgeworKyAgICAgICAgICBVUERBVEVfMChwcm9iKTsKKysgICAgICAgICAgcHJvYiA9IHByb2JzICsgSXNSZXAwTG9uZyArIChzdGF0ZSA8PCBrTnVtUG9zQml0c01heCkgKyBwb3NTdGF0ZTsKKysgICAgICAgICAgSUZfQklUXzAocHJvYikKKysgICAgICAgICAgeworKyAgICAgICAgICAgIFVQREFURV8wKHByb2IpOworKyAgICAgICAgICAgIGRpY1tkaWNQb3NdID0gZGljWyhkaWNQb3MgLSByZXAwKSArICgoZGljUG9zIDwgcmVwMCkgPyBkaWNCdWZTaXplIDogMCldOworKyAgICAgICAgICAgIGRpY1BvcysrOworKyAgICAgICAgICAgIHByb2Nlc3NlZFBvcysrOworKyAgICAgICAgICAgIHN0YXRlID0gc3RhdGUgPCBrTnVtTGl0U3RhdGVzID8gOSA6IDExOworKyAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgICB9CisrICAgICAgICAgIFVQREFURV8xKHByb2IpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICBVSW50MzIgZGlzdGFuY2U7CisrICAgICAgICAgIFVQREFURV8xKHByb2IpOworKyAgICAgICAgICBwcm9iID0gcHJvYnMgKyBJc1JlcEcxICsgc3RhdGU7CisrICAgICAgICAgIElGX0JJVF8wKHByb2IpCisrICAgICAgICAgIHsKKysgICAgICAgICAgICBVUERBVEVfMChwcm9iKTsKKysgICAgICAgICAgICBkaXN0YW5jZSA9IHJlcDE7CisrICAgICAgICAgIH0KKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICB7CisrICAgICAgICAgICAgVVBEQVRFXzEocHJvYik7CisrICAgICAgICAgICAgcHJvYiA9IHByb2JzICsgSXNSZXBHMiArIHN0YXRlOworKyAgICAgICAgICAgIElGX0JJVF8wKHByb2IpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgVVBEQVRFXzAocHJvYik7CisrICAgICAgICAgICAgICBkaXN0YW5jZSA9IHJlcDI7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBVUERBVEVfMShwcm9iKTsKKysgICAgICAgICAgICAgIGRpc3RhbmNlID0gcmVwMzsKKysgICAgICAgICAgICAgIHJlcDMgPSByZXAyOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICByZXAyID0gcmVwMTsKKysgICAgICAgICAgfQorKyAgICAgICAgICByZXAxID0gcmVwMDsKKysgICAgICAgICAgcmVwMCA9IGRpc3RhbmNlOworKyAgICAgICAgfQorKyAgICAgICAgc3RhdGUgPSBzdGF0ZSA8IGtOdW1MaXRTdGF0ZXMgPyA4IDogMTE7CisrICAgICAgICBwcm9iID0gcHJvYnMgKyBSZXBMZW5Db2RlcjsKKysgICAgICB9CisrICAgICAgeworKyAgICAgICAgdW5zaWduZWQgbGltaXQsIG9mZnNldDsKKysgICAgICAgIENMem1hUHJvYiAqcHJvYkxlbiA9IHByb2IgKyBMZW5DaG9pY2U7CisrICAgICAgICBJRl9CSVRfMChwcm9iTGVuKQorKyAgICAgICAgeworKyAgICAgICAgICBVUERBVEVfMChwcm9iTGVuKTsKKysgICAgICAgICAgcHJvYkxlbiA9IHByb2IgKyBMZW5Mb3cgKyAocG9zU3RhdGUgPDwga0xlbk51bUxvd0JpdHMpOworKyAgICAgICAgICBvZmZzZXQgPSAwOworKyAgICAgICAgICBsaW1pdCA9ICgxIDw8IGtMZW5OdW1Mb3dCaXRzKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgVVBEQVRFXzEocHJvYkxlbik7CisrICAgICAgICAgIHByb2JMZW4gPSBwcm9iICsgTGVuQ2hvaWNlMjsKKysgICAgICAgICAgSUZfQklUXzAocHJvYkxlbikKKysgICAgICAgICAgeworKyAgICAgICAgICAgIFVQREFURV8wKHByb2JMZW4pOworKyAgICAgICAgICAgIHByb2JMZW4gPSBwcm9iICsgTGVuTWlkICsgKHBvc1N0YXRlIDw8IGtMZW5OdW1NaWRCaXRzKTsKKysgICAgICAgICAgICBvZmZzZXQgPSBrTGVuTnVtTG93U3ltYm9sczsKKysgICAgICAgICAgICBsaW1pdCA9ICgxIDw8IGtMZW5OdW1NaWRCaXRzKTsKKysgICAgICAgICAgfQorKyAgICAgICAgICBlbHNlCisrICAgICAgICAgIHsKKysgICAgICAgICAgICBVUERBVEVfMShwcm9iTGVuKTsKKysgICAgICAgICAgICBwcm9iTGVuID0gcHJvYiArIExlbkhpZ2g7CisrICAgICAgICAgICAgb2Zmc2V0ID0ga0xlbk51bUxvd1N5bWJvbHMgKyBrTGVuTnVtTWlkU3ltYm9sczsKKysgICAgICAgICAgICBsaW1pdCA9ICgxIDw8IGtMZW5OdW1IaWdoQml0cyk7CisrICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIFRSRUVfREVDT0RFKHByb2JMZW4sIGxpbWl0LCBsZW4pOworKyAgICAgICAgbGVuICs9IG9mZnNldDsKKysgICAgICB9CisrCisrICAgICAgaWYgKHN0YXRlID49IGtOdW1TdGF0ZXMpCisrICAgICAgeworKyAgICAgICAgVUludDMyIGRpc3RhbmNlOworKyAgICAgICAgcHJvYiA9IHByb2JzICsgUG9zU2xvdCArCisrICAgICAgICAgICAgKChsZW4gPCBrTnVtTGVuVG9Qb3NTdGF0ZXMgPyBsZW4gOiBrTnVtTGVuVG9Qb3NTdGF0ZXMgLSAxKSA8PCBrTnVtUG9zU2xvdEJpdHMpOworKyAgICAgICAgVFJFRV82X0RFQ09ERShwcm9iLCBkaXN0YW5jZSk7CisrICAgICAgICBpZiAoZGlzdGFuY2UgPj0ga1N0YXJ0UG9zTW9kZWxJbmRleCkKKysgICAgICAgIHsKKysgICAgICAgICAgdW5zaWduZWQgcG9zU2xvdCA9ICh1bnNpZ25lZClkaXN0YW5jZTsKKysgICAgICAgICAgaW50IG51bURpcmVjdEJpdHMgPSAoaW50KSgoKGRpc3RhbmNlID4+IDEpIC0gMSkpOworKyAgICAgICAgICBkaXN0YW5jZSA9ICgyIHwgKGRpc3RhbmNlICYgMSkpOworKyAgICAgICAgICBpZiAocG9zU2xvdCA8IGtFbmRQb3NNb2RlbEluZGV4KQorKyAgICAgICAgICB7CisrICAgICAgICAgICAgZGlzdGFuY2UgPDw9IG51bURpcmVjdEJpdHM7CisrICAgICAgICAgICAgcHJvYiA9IHByb2JzICsgU3BlY1BvcyArIGRpc3RhbmNlIC0gcG9zU2xvdCAtIDE7CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgVUludDMyIG1hc2sgPSAxOworKyAgICAgICAgICAgICAgdW5zaWduZWQgaSA9IDE7CisrICAgICAgICAgICAgICBkbworKyAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBHRVRfQklUMihwcm9iICsgaSwgaSwgOyAsIGRpc3RhbmNlIHw9IG1hc2spOworKyAgICAgICAgICAgICAgICBtYXNrIDw8PSAxOworKyAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgd2hpbGUgKC0tbnVtRGlyZWN0Qml0cyAhPSAwKTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgIH0KKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICB7CisrICAgICAgICAgICAgbnVtRGlyZWN0Qml0cyAtPSBrTnVtQWxpZ25CaXRzOworKyAgICAgICAgICAgIGRvCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgTk9STUFMSVpFCisrICAgICAgICAgICAgICByYW5nZSA+Pj0gMTsKKysKKysgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgVUludDMyIHQ7CisrICAgICAgICAgICAgICAgIGNvZGUgLT0gcmFuZ2U7CisrICAgICAgICAgICAgICAgIHQgPSAoMCAtICgoVUludDMyKWNvZGUgPj4gMzEpKTsgLyogKFVJbnQzMikoKEludDMyKWNvZGUgPj4gMzEpICovCisrICAgICAgICAgICAgICAgIGRpc3RhbmNlID0gKGRpc3RhbmNlIDw8IDEpICsgKHQgKyAxKTsKKysgICAgICAgICAgICAgICAgY29kZSArPSByYW5nZSAmIHQ7CisrICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAvKgorKyAgICAgICAgICAgICAgZGlzdGFuY2UgPDw9IDE7CisrICAgICAgICAgICAgICBpZiAoY29kZSA+PSByYW5nZSkKKysgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgY29kZSAtPSByYW5nZTsKKysgICAgICAgICAgICAgICAgZGlzdGFuY2UgfD0gMTsKKysgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICovCisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIHdoaWxlICgtLW51bURpcmVjdEJpdHMgIT0gMCk7CisrICAgICAgICAgICAgcHJvYiA9IHByb2JzICsgQWxpZ247CisrICAgICAgICAgICAgZGlzdGFuY2UgPDw9IGtOdW1BbGlnbkJpdHM7CisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgdW5zaWduZWQgaSA9IDE7CisrICAgICAgICAgICAgICBHRVRfQklUMihwcm9iICsgaSwgaSwgOyAsIGRpc3RhbmNlIHw9IDEpOworKyAgICAgICAgICAgICAgR0VUX0JJVDIocHJvYiArIGksIGksIDsgLCBkaXN0YW5jZSB8PSAyKTsKKysgICAgICAgICAgICAgIEdFVF9CSVQyKHByb2IgKyBpLCBpLCA7ICwgZGlzdGFuY2UgfD0gNCk7CisrICAgICAgICAgICAgICBHRVRfQklUMihwcm9iICsgaSwgaSwgOyAsIGRpc3RhbmNlIHw9IDgpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPT0gKFVJbnQzMikweEZGRkZGRkZGKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIGxlbiArPSBrTWF0Y2hTcGVjTGVuU3RhcnQ7CisrICAgICAgICAgICAgICBzdGF0ZSAtPSBrTnVtU3RhdGVzOworKyAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICByZXAzID0gcmVwMjsKKysgICAgICAgIHJlcDIgPSByZXAxOworKyAgICAgICAgcmVwMSA9IHJlcDA7CisrICAgICAgICByZXAwID0gZGlzdGFuY2UgKyAxOworKyAgICAgICAgaWYgKGNoZWNrRGljU2l6ZSA9PSAwKQorKyAgICAgICAgeworKyAgICAgICAgICBpZiAoZGlzdGFuY2UgPj0gcHJvY2Vzc2VkUG9zKQorKyAgICAgICAgICAgIHJldHVybiBTWl9FUlJPUl9EQVRBOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSBpZiAoZGlzdGFuY2UgPj0gY2hlY2tEaWNTaXplKQorKyAgICAgICAgICByZXR1cm4gU1pfRVJST1JfREFUQTsKKysgICAgICAgIHN0YXRlID0gKHN0YXRlIDwga051bVN0YXRlcyArIGtOdW1MaXRTdGF0ZXMpID8ga051bUxpdFN0YXRlcyA6IGtOdW1MaXRTdGF0ZXMgKyAzOworKyAgICAgIH0KKysKKysgICAgICBsZW4gKz0ga01hdGNoTWluTGVuOworKworKyAgICAgIGlmIChsaW1pdCA9PSBkaWNQb3MpCisrICAgICAgICByZXR1cm4gU1pfRVJST1JfREFUQTsKKysgICAgICB7CisrICAgICAgICBTaXplVCByZW0gPSBsaW1pdCAtIGRpY1BvczsKKysgICAgICAgIHVuc2lnbmVkIGN1ckxlbiA9ICgocmVtIDwgbGVuKSA/ICh1bnNpZ25lZClyZW0gOiBsZW4pOworKyAgICAgICAgU2l6ZVQgcG9zID0gKGRpY1BvcyAtIHJlcDApICsgKChkaWNQb3MgPCByZXAwKSA/IGRpY0J1ZlNpemUgOiAwKTsKKysKKysgICAgICAgIHByb2Nlc3NlZFBvcyArPSBjdXJMZW47CisrCisrICAgICAgICBsZW4gLT0gY3VyTGVuOworKyAgICAgICAgaWYgKHBvcyArIGN1ckxlbiA8PSBkaWNCdWZTaXplKQorKyAgICAgICAgeworKyAgICAgICAgICBCeXRlICpkZXN0ID0gZGljICsgZGljUG9zOworKyAgICAgICAgICBwdHJkaWZmX3Qgc3JjID0gKHB0cmRpZmZfdClwb3MgLSAocHRyZGlmZl90KWRpY1BvczsKKysgICAgICAgICAgY29uc3QgQnl0ZSAqbGltID0gZGVzdCArIGN1ckxlbjsKKysgICAgICAgICAgZGljUG9zICs9IGN1ckxlbjsKKysgICAgICAgICAgZG8KKysgICAgICAgICAgICAqKGRlc3QpID0gKEJ5dGUpKihkZXN0ICsgc3JjKTsKKysgICAgICAgICAgd2hpbGUgKCsrZGVzdCAhPSBsaW0pOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICBkbworKyAgICAgICAgICB7CisrICAgICAgICAgICAgZGljW2RpY1BvcysrXSA9IGRpY1twb3NdOworKyAgICAgICAgICAgIGlmICgrK3BvcyA9PSBkaWNCdWZTaXplKQorKyAgICAgICAgICAgICAgcG9zID0gMDsKKysgICAgICAgICAgfQorKyAgICAgICAgICB3aGlsZSAoLS1jdXJMZW4gIT0gMCk7CisrICAgICAgICB9CisrICAgICAgfQorKyAgICB9CisrICB9CisrICB3aGlsZSAoZGljUG9zIDwgbGltaXQgJiYgYnVmIDwgYnVmTGltaXQpOworKyAgTk9STUFMSVpFOworKyAgcC0+YnVmID0gYnVmOworKyAgcC0+cmFuZ2UgPSByYW5nZTsKKysgIHAtPmNvZGUgPSBjb2RlOworKyAgcC0+cmVtYWluTGVuID0gbGVuOworKyAgcC0+ZGljUG9zID0gZGljUG9zOworKyAgcC0+cHJvY2Vzc2VkUG9zID0gcHJvY2Vzc2VkUG9zOworKyAgcC0+cmVwc1swXSA9IHJlcDA7CisrICBwLT5yZXBzWzFdID0gcmVwMTsKKysgIHAtPnJlcHNbMl0gPSByZXAyOworKyAgcC0+cmVwc1szXSA9IHJlcDM7CisrICBwLT5zdGF0ZSA9IHN0YXRlOworKworKyAgcmV0dXJuIFNaX09LOworK30KKysKKytzdGF0aWMgdm9pZCBNWV9GQVNUX0NBTEwgTHptYURlY19Xcml0ZVJlbShDTHptYURlYyAqcCwgU2l6ZVQgbGltaXQpCisreworKyAgaWYgKHAtPnJlbWFpbkxlbiAhPSAwICYmIHAtPnJlbWFpbkxlbiA8IGtNYXRjaFNwZWNMZW5TdGFydCkKKysgIHsKKysgICAgQnl0ZSAqZGljID0gcC0+ZGljOworKyAgICBTaXplVCBkaWNQb3MgPSBwLT5kaWNQb3M7CisrICAgIFNpemVUIGRpY0J1ZlNpemUgPSBwLT5kaWNCdWZTaXplOworKyAgICB1bnNpZ25lZCBsZW4gPSBwLT5yZW1haW5MZW47CisrICAgIFVJbnQzMiByZXAwID0gcC0+cmVwc1swXTsKKysgICAgaWYgKGxpbWl0IC0gZGljUG9zIDwgbGVuKQorKyAgICAgIGxlbiA9ICh1bnNpZ25lZCkobGltaXQgLSBkaWNQb3MpOworKworKyAgICBpZiAocC0+Y2hlY2tEaWNTaXplID09IDAgJiYgcC0+cHJvcC5kaWNTaXplIC0gcC0+cHJvY2Vzc2VkUG9zIDw9IGxlbikKKysgICAgICBwLT5jaGVja0RpY1NpemUgPSBwLT5wcm9wLmRpY1NpemU7CisrCisrICAgIHAtPnByb2Nlc3NlZFBvcyArPSBsZW47CisrICAgIHAtPnJlbWFpbkxlbiAtPSBsZW47CisrICAgIHdoaWxlIChsZW4tLSAhPSAwKQorKyAgICB7CisrICAgICAgZGljW2RpY1Bvc10gPSBkaWNbKGRpY1BvcyAtIHJlcDApICsgKChkaWNQb3MgPCByZXAwKSA/IGRpY0J1ZlNpemUgOiAwKV07CisrICAgICAgZGljUG9zKys7CisrICAgIH0KKysgICAgcC0+ZGljUG9zID0gZGljUG9zOworKyAgfQorK30KKysKKytzdGF0aWMgaW50IE1ZX0ZBU1RfQ0FMTCBMem1hRGVjX0RlY29kZVJlYWwyKENMem1hRGVjICpwLCBTaXplVCBsaW1pdCwgY29uc3QgQnl0ZSAqYnVmTGltaXQpCisreworKyAgZG8KKysgIHsKKysgICAgU2l6ZVQgbGltaXQyID0gbGltaXQ7CisrICAgIGlmIChwLT5jaGVja0RpY1NpemUgPT0gMCkKKysgICAgeworKyAgICAgIFVJbnQzMiByZW0gPSBwLT5wcm9wLmRpY1NpemUgLSBwLT5wcm9jZXNzZWRQb3M7CisrICAgICAgaWYgKGxpbWl0IC0gcC0+ZGljUG9zID4gcmVtKQorKyAgICAgICAgbGltaXQyID0gcC0+ZGljUG9zICsgcmVtOworKyAgICB9CisrICAgIFJJTk9LKEx6bWFEZWNfRGVjb2RlUmVhbChwLCBsaW1pdDIsIGJ1ZkxpbWl0KSk7CisrICAgIGlmIChwLT5wcm9jZXNzZWRQb3MgPj0gcC0+cHJvcC5kaWNTaXplKQorKyAgICAgIHAtPmNoZWNrRGljU2l6ZSA9IHAtPnByb3AuZGljU2l6ZTsKKysgICAgTHptYURlY19Xcml0ZVJlbShwLCBsaW1pdCk7CisrICB9CisrICB3aGlsZSAocC0+ZGljUG9zIDwgbGltaXQgJiYgcC0+YnVmIDwgYnVmTGltaXQgJiYgcC0+cmVtYWluTGVuIDwga01hdGNoU3BlY0xlblN0YXJ0KTsKKysKKysgIGlmIChwLT5yZW1haW5MZW4gPiBrTWF0Y2hTcGVjTGVuU3RhcnQpCisrICB7CisrICAgIHAtPnJlbWFpbkxlbiA9IGtNYXRjaFNwZWNMZW5TdGFydDsKKysgIH0KKysgIHJldHVybiAwOworK30KKysKKyt0eXBlZGVmIGVudW0KKyt7CisrICBEVU1NWV9FUlJPUiwgLyogdW5leHBlY3RlZCBlbmQgb2YgaW5wdXQgc3RyZWFtICovCisrICBEVU1NWV9MSVQsCisrICBEVU1NWV9NQVRDSCwKKysgIERVTU1ZX1JFUAorK30gRUx6bWFEdW1teTsKKysKKytzdGF0aWMgRUx6bWFEdW1teSBMem1hRGVjX1RyeUR1bW15KGNvbnN0IENMem1hRGVjICpwLCBjb25zdCBCeXRlICpidWYsIFNpemVUIGluU2l6ZSkKKyt7CisrICBVSW50MzIgcmFuZ2UgPSBwLT5yYW5nZTsKKysgIFVJbnQzMiBjb2RlID0gcC0+Y29kZTsKKysgIGNvbnN0IEJ5dGUgKmJ1ZkxpbWl0ID0gYnVmICsgaW5TaXplOworKyAgQ0x6bWFQcm9iICpwcm9icyA9IHAtPnByb2JzOworKyAgdW5zaWduZWQgc3RhdGUgPSBwLT5zdGF0ZTsKKysgIEVMem1hRHVtbXkgcmVzOworKworKyAgeworKyAgICBDTHptYVByb2IgKnByb2I7CisrICAgIFVJbnQzMiBib3VuZDsKKysgICAgdW5zaWduZWQgdHR0OworKyAgICB1bnNpZ25lZCBwb3NTdGF0ZSA9IChwLT5wcm9jZXNzZWRQb3MpICYgKCgxIDw8IHAtPnByb3AucGIpIC0gMSk7CisrCisrICAgIHByb2IgPSBwcm9icyArIElzTWF0Y2ggKyAoc3RhdGUgPDwga051bVBvc0JpdHNNYXgpICsgcG9zU3RhdGU7CisrICAgIElGX0JJVF8wX0NIRUNLKHByb2IpCisrICAgIHsKKysgICAgICBVUERBVEVfMF9DSEVDSworKworKyAgICAgIC8qIGlmIChidWZMaW1pdCAtIGJ1ZiA+PSA3KSByZXR1cm4gRFVNTVlfTElUOyAqLworKworKyAgICAgIHByb2IgPSBwcm9icyArIExpdGVyYWw7CisrICAgICAgaWYgKHAtPmNoZWNrRGljU2l6ZSAhPSAwIHx8IHAtPnByb2Nlc3NlZFBvcyAhPSAwKQorKyAgICAgICAgcHJvYiArPSAoTFpNQV9MSVRfU0laRSAqCisrICAgICAgICAgICgoKChwLT5wcm9jZXNzZWRQb3MpICYgKCgxIDw8IChwLT5wcm9wLmxwKSkgLSAxKSkgPDwgcC0+cHJvcC5sYykgKworKyAgICAgICAgICAocC0+ZGljWyhwLT5kaWNQb3MgPT0gMCA/IHAtPmRpY0J1ZlNpemUgOiBwLT5kaWNQb3MpIC0gMV0gPj4gKDggLSBwLT5wcm9wLmxjKSkpKTsKKysKKysgICAgICBpZiAoc3RhdGUgPCBrTnVtTGl0U3RhdGVzKQorKyAgICAgIHsKKysgICAgICAgIHVuc2lnbmVkIHN5bWJvbCA9IDE7CisrICAgICAgICBkbyB7IEdFVF9CSVRfQ0hFQ0socHJvYiArIHN5bWJvbCwgc3ltYm9sKSB9IHdoaWxlIChzeW1ib2wgPCAweDEwMCk7CisrICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICB7CisrICAgICAgICB1bnNpZ25lZCBtYXRjaEJ5dGUgPSBwLT5kaWNbcC0+ZGljUG9zIC0gcC0+cmVwc1swXSArCisrICAgICAgICAgICAgKChwLT5kaWNQb3MgPCBwLT5yZXBzWzBdKSA/IHAtPmRpY0J1ZlNpemUgOiAwKV07CisrICAgICAgICB1bnNpZ25lZCBvZmZzID0gMHgxMDA7CisrICAgICAgICB1bnNpZ25lZCBzeW1ib2wgPSAxOworKyAgICAgICAgZG8KKysgICAgICAgIHsKKysgICAgICAgICAgdW5zaWduZWQgYml0OworKyAgICAgICAgICBDTHptYVByb2IgKnByb2JMaXQ7CisrICAgICAgICAgIG1hdGNoQnl0ZSA8PD0gMTsKKysgICAgICAgICAgYml0ID0gKG1hdGNoQnl0ZSAmIG9mZnMpOworKyAgICAgICAgICBwcm9iTGl0ID0gcHJvYiArIG9mZnMgKyBiaXQgKyBzeW1ib2w7CisrICAgICAgICAgIEdFVF9CSVQyX0NIRUNLKHByb2JMaXQsIHN5bWJvbCwgb2ZmcyAmPSB+Yml0LCBvZmZzICY9IGJpdCkKKysgICAgICAgIH0KKysgICAgICAgIHdoaWxlIChzeW1ib2wgPCAweDEwMCk7CisrICAgICAgfQorKyAgICAgIHJlcyA9IERVTU1ZX0xJVDsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICB1bnNpZ25lZCBsZW47CisrICAgICAgVVBEQVRFXzFfQ0hFQ0s7CisrCisrICAgICAgcHJvYiA9IHByb2JzICsgSXNSZXAgKyBzdGF0ZTsKKysgICAgICBJRl9CSVRfMF9DSEVDSyhwcm9iKQorKyAgICAgIHsKKysgICAgICAgIFVQREFURV8wX0NIRUNLOworKyAgICAgICAgc3RhdGUgPSAwOworKyAgICAgICAgcHJvYiA9IHByb2JzICsgTGVuQ29kZXI7CisrICAgICAgICByZXMgPSBEVU1NWV9NQVRDSDsKKysgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgIHsKKysgICAgICAgIFVQREFURV8xX0NIRUNLOworKyAgICAgICAgcmVzID0gRFVNTVlfUkVQOworKyAgICAgICAgcHJvYiA9IHByb2JzICsgSXNSZXBHMCArIHN0YXRlOworKyAgICAgICAgSUZfQklUXzBfQ0hFQ0socHJvYikKKysgICAgICAgIHsKKysgICAgICAgICAgVVBEQVRFXzBfQ0hFQ0s7CisrICAgICAgICAgIHByb2IgPSBwcm9icyArIElzUmVwMExvbmcgKyAoc3RhdGUgPDwga051bVBvc0JpdHNNYXgpICsgcG9zU3RhdGU7CisrICAgICAgICAgIElGX0JJVF8wX0NIRUNLKHByb2IpCisrICAgICAgICAgIHsKKysgICAgICAgICAgICBVUERBVEVfMF9DSEVDSzsKKysgICAgICAgICAgICBOT1JNQUxJWkVfQ0hFQ0s7CisrICAgICAgICAgICAgcmV0dXJuIERVTU1ZX1JFUDsKKysgICAgICAgICAgfQorKyAgICAgICAgICBlbHNlCisrICAgICAgICAgIHsKKysgICAgICAgICAgICBVUERBVEVfMV9DSEVDSzsKKysgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICBVUERBVEVfMV9DSEVDSzsKKysgICAgICAgICAgcHJvYiA9IHByb2JzICsgSXNSZXBHMSArIHN0YXRlOworKyAgICAgICAgICBJRl9CSVRfMF9DSEVDSyhwcm9iKQorKyAgICAgICAgICB7CisrICAgICAgICAgICAgVVBEQVRFXzBfQ0hFQ0s7CisrICAgICAgICAgIH0KKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICB7CisrICAgICAgICAgICAgVVBEQVRFXzFfQ0hFQ0s7CisrICAgICAgICAgICAgcHJvYiA9IHByb2JzICsgSXNSZXBHMiArIHN0YXRlOworKyAgICAgICAgICAgIElGX0JJVF8wX0NIRUNLKHByb2IpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgVVBEQVRFXzBfQ0hFQ0s7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBVUERBVEVfMV9DSEVDSzsKKysgICAgICAgICAgICB9CisrICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIHN0YXRlID0ga051bVN0YXRlczsKKysgICAgICAgIHByb2IgPSBwcm9icyArIFJlcExlbkNvZGVyOworKyAgICAgIH0KKysgICAgICB7CisrICAgICAgICB1bnNpZ25lZCBsaW1pdCwgb2Zmc2V0OworKyAgICAgICAgQ0x6bWFQcm9iICpwcm9iTGVuID0gcHJvYiArIExlbkNob2ljZTsKKysgICAgICAgIElGX0JJVF8wX0NIRUNLKHByb2JMZW4pCisrICAgICAgICB7CisrICAgICAgICAgIFVQREFURV8wX0NIRUNLOworKyAgICAgICAgICBwcm9iTGVuID0gcHJvYiArIExlbkxvdyArIChwb3NTdGF0ZSA8PCBrTGVuTnVtTG93Qml0cyk7CisrICAgICAgICAgIG9mZnNldCA9IDA7CisrICAgICAgICAgIGxpbWl0ID0gMSA8PCBrTGVuTnVtTG93Qml0czsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgVVBEQVRFXzFfQ0hFQ0s7CisrICAgICAgICAgIHByb2JMZW4gPSBwcm9iICsgTGVuQ2hvaWNlMjsKKysgICAgICAgICAgSUZfQklUXzBfQ0hFQ0socHJvYkxlbikKKysgICAgICAgICAgeworKyAgICAgICAgICAgIFVQREFURV8wX0NIRUNLOworKyAgICAgICAgICAgIHByb2JMZW4gPSBwcm9iICsgTGVuTWlkICsgKHBvc1N0YXRlIDw8IGtMZW5OdW1NaWRCaXRzKTsKKysgICAgICAgICAgICBvZmZzZXQgPSBrTGVuTnVtTG93U3ltYm9sczsKKysgICAgICAgICAgICBsaW1pdCA9IDEgPDwga0xlbk51bU1pZEJpdHM7CisrICAgICAgICAgIH0KKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICB7CisrICAgICAgICAgICAgVVBEQVRFXzFfQ0hFQ0s7CisrICAgICAgICAgICAgcHJvYkxlbiA9IHByb2IgKyBMZW5IaWdoOworKyAgICAgICAgICAgIG9mZnNldCA9IGtMZW5OdW1Mb3dTeW1ib2xzICsga0xlbk51bU1pZFN5bWJvbHM7CisrICAgICAgICAgICAgbGltaXQgPSAxIDw8IGtMZW5OdW1IaWdoQml0czsKKysgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgVFJFRV9ERUNPREVfQ0hFQ0socHJvYkxlbiwgbGltaXQsIGxlbik7CisrICAgICAgICBsZW4gKz0gb2Zmc2V0OworKyAgICAgIH0KKysKKysgICAgICBpZiAoc3RhdGUgPCA0KQorKyAgICAgIHsKKysgICAgICAgIHVuc2lnbmVkIHBvc1Nsb3Q7CisrICAgICAgICBwcm9iID0gcHJvYnMgKyBQb3NTbG90ICsKKysgICAgICAgICAgICAoKGxlbiA8IGtOdW1MZW5Ub1Bvc1N0YXRlcyA/IGxlbiA6IGtOdW1MZW5Ub1Bvc1N0YXRlcyAtIDEpIDw8CisrICAgICAgICAgICAga051bVBvc1Nsb3RCaXRzKTsKKysgICAgICAgIFRSRUVfREVDT0RFX0NIRUNLKHByb2IsIDEgPDwga051bVBvc1Nsb3RCaXRzLCBwb3NTbG90KTsKKysgICAgICAgIGlmIChwb3NTbG90ID49IGtTdGFydFBvc01vZGVsSW5kZXgpCisrICAgICAgICB7CisrICAgICAgICAgIGludCBudW1EaXJlY3RCaXRzID0gKChwb3NTbG90ID4+IDEpIC0gMSk7CisrCisrICAgICAgICAgIC8qIGlmIChidWZMaW1pdCAtIGJ1ZiA+PSA4KSByZXR1cm4gRFVNTVlfTUFUQ0g7ICovCisrCisrICAgICAgICAgIGlmIChwb3NTbG90IDwga0VuZFBvc01vZGVsSW5kZXgpCisrICAgICAgICAgIHsKKysgICAgICAgICAgICBwcm9iID0gcHJvYnMgKyBTcGVjUG9zICsgKCgyIHwgKHBvc1Nsb3QgJiAxKSkgPDwgbnVtRGlyZWN0Qml0cykgLSBwb3NTbG90IC0gMTsKKysgICAgICAgICAgfQorKyAgICAgICAgICBlbHNlCisrICAgICAgICAgIHsKKysgICAgICAgICAgICBudW1EaXJlY3RCaXRzIC09IGtOdW1BbGlnbkJpdHM7CisrICAgICAgICAgICAgZG8KKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBOT1JNQUxJWkVfQ0hFQ0sKKysgICAgICAgICAgICAgIHJhbmdlID4+PSAxOworKyAgICAgICAgICAgICAgY29kZSAtPSByYW5nZSAmICgoKGNvZGUgLSByYW5nZSkgPj4gMzEpIC0gMSk7CisrICAgICAgICAgICAgICAvKiBpZiAoY29kZSA+PSByYW5nZSkgY29kZSAtPSByYW5nZTsgKi8KKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgd2hpbGUgKC0tbnVtRGlyZWN0Qml0cyAhPSAwKTsKKysgICAgICAgICAgICBwcm9iID0gcHJvYnMgKyBBbGlnbjsKKysgICAgICAgICAgICBudW1EaXJlY3RCaXRzID0ga051bUFsaWduQml0czsKKysgICAgICAgICAgfQorKyAgICAgICAgICB7CisrICAgICAgICAgICAgdW5zaWduZWQgaSA9IDE7CisrICAgICAgICAgICAgZG8KKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBHRVRfQklUX0NIRUNLKHByb2IgKyBpLCBpKTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgd2hpbGUgKC0tbnVtRGlyZWN0Qml0cyAhPSAwKTsKKysgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgIH0KKysgICAgfQorKyAgfQorKyAgTk9STUFMSVpFX0NIRUNLOworKyAgcmV0dXJuIHJlczsKKyt9CisrCisrCisrc3RhdGljIHZvaWQgTHptYURlY19Jbml0UmMoQ0x6bWFEZWMgKnAsIGNvbnN0IEJ5dGUgKmRhdGEpCisreworKyAgcC0+Y29kZSA9ICgoVUludDMyKWRhdGFbMV0gPDwgMjQpIHwgKChVSW50MzIpZGF0YVsyXSA8PCAxNikgfCAoKFVJbnQzMilkYXRhWzNdIDw8IDgpIHwgKChVSW50MzIpZGF0YVs0XSk7CisrICBwLT5yYW5nZSA9IDB4RkZGRkZGRkY7CisrICBwLT5uZWVkRmx1c2ggPSAwOworK30KKysKKyt2b2lkIEx6bWFEZWNfSW5pdERpY0FuZFN0YXRlKENMem1hRGVjICpwLCBCb29sIGluaXREaWMsIEJvb2wgaW5pdFN0YXRlKQorK3sKKysgIHAtPm5lZWRGbHVzaCA9IDE7CisrICBwLT5yZW1haW5MZW4gPSAwOworKyAgcC0+dGVtcEJ1ZlNpemUgPSAwOworKworKyAgaWYgKGluaXREaWMpCisrICB7CisrICAgIHAtPnByb2Nlc3NlZFBvcyA9IDA7CisrICAgIHAtPmNoZWNrRGljU2l6ZSA9IDA7CisrICAgIHAtPm5lZWRJbml0U3RhdGUgPSAxOworKyAgfQorKyAgaWYgKGluaXRTdGF0ZSkKKysgICAgcC0+bmVlZEluaXRTdGF0ZSA9IDE7CisrfQorKworK3ZvaWQgTHptYURlY19Jbml0KENMem1hRGVjICpwKQorK3sKKysgIHAtPmRpY1BvcyA9IDA7CisrICBMem1hRGVjX0luaXREaWNBbmRTdGF0ZShwLCBUcnVlLCBUcnVlKTsKKyt9CisrCisrc3RhdGljIHZvaWQgTHptYURlY19Jbml0U3RhdGVSZWFsKENMem1hRGVjICpwKQorK3sKKysgIFVJbnQzMiBudW1Qcm9icyA9IExpdGVyYWwgKyAoKFVJbnQzMilMWk1BX0xJVF9TSVpFIDw8IChwLT5wcm9wLmxjICsgcC0+cHJvcC5scCkpOworKyAgVUludDMyIGk7CisrICBDTHptYVByb2IgKnByb2JzID0gcC0+cHJvYnM7CisrICBmb3IgKGkgPSAwOyBpIDwgbnVtUHJvYnM7IGkrKykKKysgICAgcHJvYnNbaV0gPSBrQml0TW9kZWxUb3RhbCA+PiAxOworKyAgcC0+cmVwc1swXSA9IHAtPnJlcHNbMV0gPSBwLT5yZXBzWzJdID0gcC0+cmVwc1szXSA9IDE7CisrICBwLT5zdGF0ZSA9IDA7CisrICBwLT5uZWVkSW5pdFN0YXRlID0gMDsKKyt9CisrCisrU1JlcyBMem1hRGVjX0RlY29kZVRvRGljKENMem1hRGVjICpwLCBTaXplVCBkaWNMaW1pdCwgY29uc3QgQnl0ZSAqc3JjLCBTaXplVCAqc3JjTGVuLAorKyAgICBFTHptYUZpbmlzaE1vZGUgZmluaXNoTW9kZSwgRUx6bWFTdGF0dXMgKnN0YXR1cykKKyt7CisrICBTaXplVCBpblNpemUgPSAqc3JjTGVuOworKyAgKCpzcmNMZW4pID0gMDsKKysgIEx6bWFEZWNfV3JpdGVSZW0ocCwgZGljTGltaXQpOworKworKyAgKnN0YXR1cyA9IExaTUFfU1RBVFVTX05PVF9TUEVDSUZJRUQ7CisrCisrICB3aGlsZSAocC0+cmVtYWluTGVuICE9IGtNYXRjaFNwZWNMZW5TdGFydCkKKysgIHsKKysgICAgICBpbnQgY2hlY2tFbmRNYXJrTm93OworKworKyAgICAgIGlmIChwLT5uZWVkRmx1c2ggIT0gMCkKKysgICAgICB7CisrICAgICAgICBmb3IgKDsgaW5TaXplID4gMCAmJiBwLT50ZW1wQnVmU2l6ZSA8IFJDX0lOSVRfU0laRTsgKCpzcmNMZW4pKyssIGluU2l6ZS0tKQorKyAgICAgICAgICBwLT50ZW1wQnVmW3AtPnRlbXBCdWZTaXplKytdID0gKnNyYysrOworKyAgICAgICAgaWYgKHAtPnRlbXBCdWZTaXplIDwgUkNfSU5JVF9TSVpFKQorKyAgICAgICAgeworKyAgICAgICAgICAqc3RhdHVzID0gTFpNQV9TVEFUVVNfTkVFRFNfTU9SRV9JTlBVVDsKKysgICAgICAgICAgcmV0dXJuIFNaX09LOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKHAtPnRlbXBCdWZbMF0gIT0gMCkKKysgICAgICAgICAgcmV0dXJuIFNaX0VSUk9SX0RBVEE7CisrCisrICAgICAgICBMem1hRGVjX0luaXRSYyhwLCBwLT50ZW1wQnVmKTsKKysgICAgICAgIHAtPnRlbXBCdWZTaXplID0gMDsKKysgICAgICB9CisrCisrICAgICAgY2hlY2tFbmRNYXJrTm93ID0gMDsKKysgICAgICBpZiAocC0+ZGljUG9zID49IGRpY0xpbWl0KQorKyAgICAgIHsKKysgICAgICAgIGlmIChwLT5yZW1haW5MZW4gPT0gMCAmJiBwLT5jb2RlID09IDApCisrICAgICAgICB7CisrICAgICAgICAgICpzdGF0dXMgPSBMWk1BX1NUQVRVU19NQVlCRV9GSU5JU0hFRF9XSVRIT1VUX01BUks7CisrICAgICAgICAgIHJldHVybiBTWl9PSzsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChmaW5pc2hNb2RlID09IExaTUFfRklOSVNIX0FOWSkKKysgICAgICAgIHsKKysgICAgICAgICAgKnN0YXR1cyA9IExaTUFfU1RBVFVTX05PVF9GSU5JU0hFRDsKKysgICAgICAgICAgcmV0dXJuIFNaX09LOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKHAtPnJlbWFpbkxlbiAhPSAwKQorKyAgICAgICAgeworKyAgICAgICAgICAqc3RhdHVzID0gTFpNQV9TVEFUVVNfTk9UX0ZJTklTSEVEOworKyAgICAgICAgICByZXR1cm4gU1pfRVJST1JfREFUQTsKKysgICAgICAgIH0KKysgICAgICAgIGNoZWNrRW5kTWFya05vdyA9IDE7CisrICAgICAgfQorKworKyAgICAgIGlmIChwLT5uZWVkSW5pdFN0YXRlKQorKyAgICAgICAgTHptYURlY19Jbml0U3RhdGVSZWFsKHApOworKworKyAgICAgIGlmIChwLT50ZW1wQnVmU2l6ZSA9PSAwKQorKyAgICAgIHsKKysgICAgICAgIFNpemVUIHByb2Nlc3NlZDsKKysgICAgICAgIGNvbnN0IEJ5dGUgKmJ1ZkxpbWl0OworKyAgICAgICAgaWYgKGluU2l6ZSA8IExaTUFfUkVRVUlSRURfSU5QVVRfTUFYIHx8IGNoZWNrRW5kTWFya05vdykKKysgICAgICAgIHsKKysgICAgICAgICAgaW50IGR1bW15UmVzID0gTHptYURlY19UcnlEdW1teShwLCBzcmMsIGluU2l6ZSk7CisrICAgICAgICAgIGlmIChkdW1teVJlcyA9PSBEVU1NWV9FUlJPUikKKysgICAgICAgICAgeworKyAgICAgICAgICAgIG1lbWNweShwLT50ZW1wQnVmLCBzcmMsIGluU2l6ZSk7CisrICAgICAgICAgICAgcC0+dGVtcEJ1ZlNpemUgPSAodW5zaWduZWQpaW5TaXplOworKyAgICAgICAgICAgICgqc3JjTGVuKSArPSBpblNpemU7CisrICAgICAgICAgICAgKnN0YXR1cyA9IExaTUFfU1RBVFVTX05FRURTX01PUkVfSU5QVVQ7CisrICAgICAgICAgICAgcmV0dXJuIFNaX09LOworKyAgICAgICAgICB9CisrICAgICAgICAgIGlmIChjaGVja0VuZE1hcmtOb3cgJiYgZHVtbXlSZXMgIT0gRFVNTVlfTUFUQ0gpCisrICAgICAgICAgIHsKKysgICAgICAgICAgICAqc3RhdHVzID0gTFpNQV9TVEFUVVNfTk9UX0ZJTklTSEVEOworKyAgICAgICAgICAgIHJldHVybiBTWl9FUlJPUl9EQVRBOworKyAgICAgICAgICB9CisrICAgICAgICAgIGJ1ZkxpbWl0ID0gc3JjOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZQorKyAgICAgICAgICBidWZMaW1pdCA9IHNyYyArIGluU2l6ZSAtIExaTUFfUkVRVUlSRURfSU5QVVRfTUFYOworKyAgICAgICAgcC0+YnVmID0gc3JjOworKyAgICAgICAgaWYgKEx6bWFEZWNfRGVjb2RlUmVhbDIocCwgZGljTGltaXQsIGJ1ZkxpbWl0KSAhPSAwKQorKyAgICAgICAgICByZXR1cm4gU1pfRVJST1JfREFUQTsKKysgICAgICAgIHByb2Nlc3NlZCA9IChTaXplVCkocC0+YnVmIC0gc3JjKTsKKysgICAgICAgICgqc3JjTGVuKSArPSBwcm9jZXNzZWQ7CisrICAgICAgICBzcmMgKz0gcHJvY2Vzc2VkOworKyAgICAgICAgaW5TaXplIC09IHByb2Nlc3NlZDsKKysgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgIHsKKysgICAgICAgIHVuc2lnbmVkIHJlbSA9IHAtPnRlbXBCdWZTaXplLCBsb29rQWhlYWQgPSAwOworKyAgICAgICAgd2hpbGUgKHJlbSA8IExaTUFfUkVRVUlSRURfSU5QVVRfTUFYICYmIGxvb2tBaGVhZCA8IGluU2l6ZSkKKysgICAgICAgICAgcC0+dGVtcEJ1ZltyZW0rK10gPSBzcmNbbG9va0FoZWFkKytdOworKyAgICAgICAgcC0+dGVtcEJ1ZlNpemUgPSByZW07CisrICAgICAgICBpZiAocmVtIDwgTFpNQV9SRVFVSVJFRF9JTlBVVF9NQVggfHwgY2hlY2tFbmRNYXJrTm93KQorKyAgICAgICAgeworKyAgICAgICAgICBpbnQgZHVtbXlSZXMgPSBMem1hRGVjX1RyeUR1bW15KHAsIHAtPnRlbXBCdWYsIHJlbSk7CisrICAgICAgICAgIGlmIChkdW1teVJlcyA9PSBEVU1NWV9FUlJPUikKKysgICAgICAgICAgeworKyAgICAgICAgICAgICgqc3JjTGVuKSArPSBsb29rQWhlYWQ7CisrICAgICAgICAgICAgKnN0YXR1cyA9IExaTUFfU1RBVFVTX05FRURTX01PUkVfSU5QVVQ7CisrICAgICAgICAgICAgcmV0dXJuIFNaX09LOworKyAgICAgICAgICB9CisrICAgICAgICAgIGlmIChjaGVja0VuZE1hcmtOb3cgJiYgZHVtbXlSZXMgIT0gRFVNTVlfTUFUQ0gpCisrICAgICAgICAgIHsKKysgICAgICAgICAgICAqc3RhdHVzID0gTFpNQV9TVEFUVVNfTk9UX0ZJTklTSEVEOworKyAgICAgICAgICAgIHJldHVybiBTWl9FUlJPUl9EQVRBOworKyAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBwLT5idWYgPSBwLT50ZW1wQnVmOworKyAgICAgICAgaWYgKEx6bWFEZWNfRGVjb2RlUmVhbDIocCwgZGljTGltaXQsIHAtPmJ1ZikgIT0gMCkKKysgICAgICAgICAgcmV0dXJuIFNaX0VSUk9SX0RBVEE7CisrICAgICAgICBsb29rQWhlYWQgLT0gKHJlbSAtICh1bnNpZ25lZCkocC0+YnVmIC0gcC0+dGVtcEJ1ZikpOworKyAgICAgICAgKCpzcmNMZW4pICs9IGxvb2tBaGVhZDsKKysgICAgICAgIHNyYyArPSBsb29rQWhlYWQ7CisrICAgICAgICBpblNpemUgLT0gbG9va0FoZWFkOworKyAgICAgICAgcC0+dGVtcEJ1ZlNpemUgPSAwOworKyAgICAgIH0KKysgIH0KKysgIGlmIChwLT5jb2RlID09IDApCisrICAgICpzdGF0dXMgPSBMWk1BX1NUQVRVU19GSU5JU0hFRF9XSVRIX01BUks7CisrICByZXR1cm4gKHAtPmNvZGUgPT0gMCkgPyBTWl9PSyA6IFNaX0VSUk9SX0RBVEE7CisrfQorKworK1NSZXMgTHptYURlY19EZWNvZGVUb0J1ZihDTHptYURlYyAqcCwgQnl0ZSAqZGVzdCwgU2l6ZVQgKmRlc3RMZW4sIGNvbnN0IEJ5dGUgKnNyYywgU2l6ZVQgKnNyY0xlbiwgRUx6bWFGaW5pc2hNb2RlIGZpbmlzaE1vZGUsIEVMem1hU3RhdHVzICpzdGF0dXMpCisreworKyAgU2l6ZVQgb3V0U2l6ZSA9ICpkZXN0TGVuOworKyAgU2l6ZVQgaW5TaXplID0gKnNyY0xlbjsKKysgICpzcmNMZW4gPSAqZGVzdExlbiA9IDA7CisrICBmb3IgKDs7KQorKyAgeworKyAgICBTaXplVCBpblNpemVDdXIgPSBpblNpemUsIG91dFNpemVDdXIsIGRpY1BvczsKKysgICAgRUx6bWFGaW5pc2hNb2RlIGN1ckZpbmlzaE1vZGU7CisrICAgIFNSZXMgcmVzOworKyAgICBpZiAocC0+ZGljUG9zID09IHAtPmRpY0J1ZlNpemUpCisrICAgICAgcC0+ZGljUG9zID0gMDsKKysgICAgZGljUG9zID0gcC0+ZGljUG9zOworKyAgICBpZiAob3V0U2l6ZSA+IHAtPmRpY0J1ZlNpemUgLSBkaWNQb3MpCisrICAgIHsKKysgICAgICBvdXRTaXplQ3VyID0gcC0+ZGljQnVmU2l6ZTsKKysgICAgICBjdXJGaW5pc2hNb2RlID0gTFpNQV9GSU5JU0hfQU5ZOworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAgIG91dFNpemVDdXIgPSBkaWNQb3MgKyBvdXRTaXplOworKyAgICAgIGN1ckZpbmlzaE1vZGUgPSBmaW5pc2hNb2RlOworKyAgICB9CisrCisrICAgIHJlcyA9IEx6bWFEZWNfRGVjb2RlVG9EaWMocCwgb3V0U2l6ZUN1ciwgc3JjLCAmaW5TaXplQ3VyLCBjdXJGaW5pc2hNb2RlLCBzdGF0dXMpOworKyAgICBzcmMgKz0gaW5TaXplQ3VyOworKyAgICBpblNpemUgLT0gaW5TaXplQ3VyOworKyAgICAqc3JjTGVuICs9IGluU2l6ZUN1cjsKKysgICAgb3V0U2l6ZUN1ciA9IHAtPmRpY1BvcyAtIGRpY1BvczsKKysgICAgbWVtY3B5KGRlc3QsIHAtPmRpYyArIGRpY1Bvcywgb3V0U2l6ZUN1cik7CisrICAgIGRlc3QgKz0gb3V0U2l6ZUN1cjsKKysgICAgb3V0U2l6ZSAtPSBvdXRTaXplQ3VyOworKyAgICAqZGVzdExlbiArPSBvdXRTaXplQ3VyOworKyAgICBpZiAocmVzICE9IDApCisrICAgICAgcmV0dXJuIHJlczsKKysgICAgaWYgKG91dFNpemVDdXIgPT0gMCB8fCBvdXRTaXplID09IDApCisrICAgICAgcmV0dXJuIFNaX09LOworKyAgfQorK30KKysKKyt2b2lkIEx6bWFEZWNfRnJlZVByb2JzKENMem1hRGVjICpwLCBJU3pBbGxvYyAqYWxsb2MpCisreworKyAgYWxsb2MtPkZyZWUoYWxsb2MsIHAtPnByb2JzKTsKKysgIHAtPnByb2JzID0gMDsKKyt9CisrCisrc3RhdGljIHZvaWQgTHptYURlY19GcmVlRGljdChDTHptYURlYyAqcCwgSVN6QWxsb2MgKmFsbG9jKQorK3sKKysgIGFsbG9jLT5GcmVlKGFsbG9jLCBwLT5kaWMpOworKyAgcC0+ZGljID0gMDsKKyt9CisrCisrdm9pZCBMem1hRGVjX0ZyZWUoQ0x6bWFEZWMgKnAsIElTekFsbG9jICphbGxvYykKKyt7CisrICBMem1hRGVjX0ZyZWVQcm9icyhwLCBhbGxvYyk7CisrICBMem1hRGVjX0ZyZWVEaWN0KHAsIGFsbG9jKTsKKyt9CisrCisrU1JlcyBMem1hUHJvcHNfRGVjb2RlKENMem1hUHJvcHMgKnAsIGNvbnN0IEJ5dGUgKmRhdGEsIHVuc2lnbmVkIHNpemUpCisreworKyAgVUludDMyIGRpY1NpemU7CisrICBCeXRlIGQ7CisrCisrICBpZiAoc2l6ZSA8IExaTUFfUFJPUFNfU0laRSkKKysgICAgcmV0dXJuIFNaX0VSUk9SX1VOU1VQUE9SVEVEOworKyAgZWxzZQorKyAgICBkaWNTaXplID0gZGF0YVsxXSB8ICgoVUludDMyKWRhdGFbMl0gPDwgOCkgfCAoKFVJbnQzMilkYXRhWzNdIDw8IDE2KSB8ICgoVUludDMyKWRhdGFbNF0gPDwgMjQpOworKworKyAgaWYgKGRpY1NpemUgPCBMWk1BX0RJQ19NSU4pCisrICAgIGRpY1NpemUgPSBMWk1BX0RJQ19NSU47CisrICBwLT5kaWNTaXplID0gZGljU2l6ZTsKKysKKysgIGQgPSBkYXRhWzBdOworKyAgaWYgKGQgPj0gKDkgKiA1ICogNSkpCisrICAgIHJldHVybiBTWl9FUlJPUl9VTlNVUFBPUlRFRDsKKysKKysgIHAtPmxjID0gZCAlIDk7CisrICBkIC89IDk7CisrICBwLT5wYiA9IGQgLyA1OworKyAgcC0+bHAgPSBkICUgNTsKKysKKysgIHJldHVybiBTWl9PSzsKKyt9CisrCisrc3RhdGljIFNSZXMgTHptYURlY19BbGxvY2F0ZVByb2JzMihDTHptYURlYyAqcCwgY29uc3QgQ0x6bWFQcm9wcyAqcHJvcE5ldywgSVN6QWxsb2MgKmFsbG9jKQorK3sKKysgIFVJbnQzMiBudW1Qcm9icyA9IEx6bWFQcm9wc19HZXROdW1Qcm9icyhwcm9wTmV3KTsKKysgIGlmIChwLT5wcm9icyA9PSAwIHx8IG51bVByb2JzICE9IHAtPm51bVByb2JzKQorKyAgeworKyAgICBMem1hRGVjX0ZyZWVQcm9icyhwLCBhbGxvYyk7CisrICAgIHAtPnByb2JzID0gKENMem1hUHJvYiAqKWFsbG9jLT5BbGxvYyhhbGxvYywgbnVtUHJvYnMgKiBzaXplb2YoQ0x6bWFQcm9iKSk7CisrICAgIHAtPm51bVByb2JzID0gbnVtUHJvYnM7CisrICAgIGlmIChwLT5wcm9icyA9PSAwKQorKyAgICAgIHJldHVybiBTWl9FUlJPUl9NRU07CisrICB9CisrICByZXR1cm4gU1pfT0s7CisrfQorKworK1NSZXMgTHptYURlY19BbGxvY2F0ZVByb2JzKENMem1hRGVjICpwLCBjb25zdCBCeXRlICpwcm9wcywgdW5zaWduZWQgcHJvcHNTaXplLCBJU3pBbGxvYyAqYWxsb2MpCisreworKyAgQ0x6bWFQcm9wcyBwcm9wTmV3OworKyAgUklOT0soTHptYVByb3BzX0RlY29kZSgmcHJvcE5ldywgcHJvcHMsIHByb3BzU2l6ZSkpOworKyAgUklOT0soTHptYURlY19BbGxvY2F0ZVByb2JzMihwLCAmcHJvcE5ldywgYWxsb2MpKTsKKysgIHAtPnByb3AgPSBwcm9wTmV3OworKyAgcmV0dXJuIFNaX09LOworK30KKysKKytTUmVzIEx6bWFEZWNfQWxsb2NhdGUoQ0x6bWFEZWMgKnAsIGNvbnN0IEJ5dGUgKnByb3BzLCB1bnNpZ25lZCBwcm9wc1NpemUsIElTekFsbG9jICphbGxvYykKKyt7CisrICBDTHptYVByb3BzIHByb3BOZXc7CisrICBTaXplVCBkaWNCdWZTaXplOworKyAgUklOT0soTHptYVByb3BzX0RlY29kZSgmcHJvcE5ldywgcHJvcHMsIHByb3BzU2l6ZSkpOworKyAgUklOT0soTHptYURlY19BbGxvY2F0ZVByb2JzMihwLCAmcHJvcE5ldywgYWxsb2MpKTsKKysgIGRpY0J1ZlNpemUgPSBwcm9wTmV3LmRpY1NpemU7CisrICBpZiAocC0+ZGljID09IDAgfHwgZGljQnVmU2l6ZSAhPSBwLT5kaWNCdWZTaXplKQorKyAgeworKyAgICBMem1hRGVjX0ZyZWVEaWN0KHAsIGFsbG9jKTsKKysgICAgcC0+ZGljID0gKEJ5dGUgKilhbGxvYy0+QWxsb2MoYWxsb2MsIGRpY0J1ZlNpemUpOworKyAgICBpZiAocC0+ZGljID09IDApCisrICAgIHsKKysgICAgICBMem1hRGVjX0ZyZWVQcm9icyhwLCBhbGxvYyk7CisrICAgICAgcmV0dXJuIFNaX0VSUk9SX01FTTsKKysgICAgfQorKyAgfQorKyAgcC0+ZGljQnVmU2l6ZSA9IGRpY0J1ZlNpemU7CisrICBwLT5wcm9wID0gcHJvcE5ldzsKKysgIHJldHVybiBTWl9PSzsKKyt9CisrCisrU1JlcyBMem1hRGVjb2RlKEJ5dGUgKmRlc3QsIFNpemVUICpkZXN0TGVuLCBjb25zdCBCeXRlICpzcmMsIFNpemVUICpzcmNMZW4sCisrICAgIGNvbnN0IEJ5dGUgKnByb3BEYXRhLCB1bnNpZ25lZCBwcm9wU2l6ZSwgRUx6bWFGaW5pc2hNb2RlIGZpbmlzaE1vZGUsCisrICAgIEVMem1hU3RhdHVzICpzdGF0dXMsIElTekFsbG9jICphbGxvYykKKyt7CisrICBDTHptYURlYyBwOworKyAgU1JlcyByZXM7CisrICBTaXplVCBpblNpemUgPSAqc3JjTGVuOworKyAgU2l6ZVQgb3V0U2l6ZSA9ICpkZXN0TGVuOworKyAgKnNyY0xlbiA9ICpkZXN0TGVuID0gMDsKKysgIGlmIChpblNpemUgPCBSQ19JTklUX1NJWkUpCisrICAgIHJldHVybiBTWl9FUlJPUl9JTlBVVF9FT0Y7CisrCisrICBMem1hRGVjX0NvbnN0cnVjdCgmcCk7CisrICByZXMgPSBMem1hRGVjX0FsbG9jYXRlUHJvYnMoJnAsIHByb3BEYXRhLCBwcm9wU2l6ZSwgYWxsb2MpOworKyAgaWYgKHJlcyAhPSAwKQorKyAgICByZXR1cm4gcmVzOworKyAgcC5kaWMgPSBkZXN0OworKyAgcC5kaWNCdWZTaXplID0gb3V0U2l6ZTsKKysKKysgIEx6bWFEZWNfSW5pdCgmcCk7CisrCisrICAqc3JjTGVuID0gaW5TaXplOworKyAgcmVzID0gTHptYURlY19EZWNvZGVUb0RpYygmcCwgb3V0U2l6ZSwgc3JjLCBzcmNMZW4sIGZpbmlzaE1vZGUsIHN0YXR1cyk7CisrCisrICBpZiAocmVzID09IFNaX09LICYmICpzdGF0dXMgPT0gTFpNQV9TVEFUVVNfTkVFRFNfTU9SRV9JTlBVVCkKKysgICAgcmVzID0gU1pfRVJST1JfSU5QVVRfRU9GOworKworKyAgKCpkZXN0TGVuKSA9IHAuZGljUG9zOworKyAgTHptYURlY19GcmVlUHJvYnMoJnAsIGFsbG9jKTsKKysgIHJldHVybiByZXM7CisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGliL2x6bWEvTHptYUVuYy5jCitAQCAtMCwwICsxLDIyNzEgQEAKKysvKiBMem1hRW5jLmMgLS0gTFpNQSBFbmNvZGVyCisrMjAwOS0xMS0yNCA6IElnb3IgUGF2bG92IDogUHVibGljIGRvbWFpbiAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysKKysvKiAjZGVmaW5lIFNIT1dfU1RBVCAqLworKy8qICNkZWZpbmUgU0hPV19TVEFUMiAqLworKworKyNpZiBkZWZpbmVkKFNIT1dfU1RBVCkgfHwgZGVmaW5lZChTSE9XX1NUQVQyKQorKyNpbmNsdWRlIDxzdGRpby5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlICJMem1hRW5jLmgiCisrCisrLyogZGlzYWJsZSBNVCAqLworKyNkZWZpbmUgXzdaSVBfU1QKKysKKysjaW5jbHVkZSAiTHpGaW5kLmgiCisrI2lmbmRlZiBfN1pJUF9TVAorKyNpbmNsdWRlICJMekZpbmRNdC5oIgorKyNlbmRpZgorKworKyNpZmRlZiBTSE9XX1NUQVQKKytzdGF0aWMgaW50IHR0dCA9IDA7CisrI2VuZGlmCisrCisrI2RlZmluZSBrQmxvY2tTaXplTWF4ICgoMSA8PCBMWk1BX05VTV9CTE9DS19TSVpFX0JJVFMpIC0gMSkKKysKKysjZGVmaW5lIGtCbG9ja1NpemUgKDkgPDwgMTApCisrI2RlZmluZSBrVW5wYWNrQmxvY2tTaXplICgxIDw8IDE4KQorKyNkZWZpbmUga01hdGNoQXJyYXlTaXplICgxIDw8IDIxKQorKyNkZWZpbmUga01hdGNoUmVjb3JkTWF4U2l6ZSAoKExaTUFfTUFUQ0hfTEVOX01BWCAqIDIgKyAzKSAqIExaTUFfTUFUQ0hfTEVOX01BWCkKKysKKysjZGVmaW5lIGtOdW1NYXhEaXJlY3RCaXRzICgzMSkKKysKKysjZGVmaW5lIGtOdW1Ub3BCaXRzIDI0CisrI2RlZmluZSBrVG9wVmFsdWUgKChVSW50MzIpMSA8PCBrTnVtVG9wQml0cykKKysKKysjZGVmaW5lIGtOdW1CaXRNb2RlbFRvdGFsQml0cyAxMQorKyNkZWZpbmUga0JpdE1vZGVsVG90YWwgKDEgPDwga051bUJpdE1vZGVsVG90YWxCaXRzKQorKyNkZWZpbmUga051bU1vdmVCaXRzIDUKKysjZGVmaW5lIGtQcm9iSW5pdFZhbHVlIChrQml0TW9kZWxUb3RhbCA+PiAxKQorKworKyNkZWZpbmUga051bU1vdmVSZWR1Y2luZ0JpdHMgNAorKyNkZWZpbmUga051bUJpdFByaWNlU2hpZnRCaXRzIDQKKysjZGVmaW5lIGtCaXRQcmljZSAoMSA8PCBrTnVtQml0UHJpY2VTaGlmdEJpdHMpCisrCisrdm9pZCBMem1hRW5jUHJvcHNfSW5pdChDTHptYUVuY1Byb3BzICpwKQorK3sKKysgIHAtPmxldmVsID0gNTsKKysgIHAtPmRpY3RTaXplID0gcC0+bWMgPSAwOworKyAgcC0+bGMgPSBwLT5scCA9IHAtPnBiID0gcC0+YWxnbyA9IHAtPmZiID0gcC0+YnRNb2RlID0gcC0+bnVtSGFzaEJ5dGVzID0gcC0+bnVtVGhyZWFkcyA9IC0xOworKyAgcC0+d3JpdGVFbmRNYXJrID0gMDsKKyt9CisrCisrdm9pZCBMem1hRW5jUHJvcHNfTm9ybWFsaXplKENMem1hRW5jUHJvcHMgKnApCisreworKyAgaW50IGxldmVsID0gcC0+bGV2ZWw7CisrICBpZiAobGV2ZWwgPCAwKSBsZXZlbCA9IDU7CisrICBwLT5sZXZlbCA9IGxldmVsOworKyAgaWYgKHAtPmRpY3RTaXplID09IDApIHAtPmRpY3RTaXplID0gKGxldmVsIDw9IDUgPyAoMSA8PCAobGV2ZWwgKiAyICsgMTQpKSA6IChsZXZlbCA9PSA2ID8gKDEgPDwgMjUpIDogKDEgPDwgMjYpKSk7CisrICBpZiAocC0+bGMgPCAwKSBwLT5sYyA9IDM7CisrICBpZiAocC0+bHAgPCAwKSBwLT5scCA9IDA7CisrICBpZiAocC0+cGIgPCAwKSBwLT5wYiA9IDI7CisrICBpZiAocC0+YWxnbyA8IDApIHAtPmFsZ28gPSAobGV2ZWwgPCA1ID8gMCA6IDEpOworKyAgaWYgKHAtPmZiIDwgMCkgcC0+ZmIgPSAobGV2ZWwgPCA3ID8gMzIgOiA2NCk7CisrICBpZiAocC0+YnRNb2RlIDwgMCkgcC0+YnRNb2RlID0gKHAtPmFsZ28gPT0gMCA/IDAgOiAxKTsKKysgIGlmIChwLT5udW1IYXNoQnl0ZXMgPCAwKSBwLT5udW1IYXNoQnl0ZXMgPSA0OworKyAgaWYgKHAtPm1jID09IDApICBwLT5tYyA9ICgxNiArIChwLT5mYiA+PiAxKSkgPj4gKHAtPmJ0TW9kZSA/IDAgOiAxKTsKKysgIGlmIChwLT5udW1UaHJlYWRzIDwgMCkKKysgICAgcC0+bnVtVGhyZWFkcyA9CisrICAgICAgI2lmbmRlZiBfN1pJUF9TVAorKyAgICAgICgocC0+YnRNb2RlICYmIHAtPmFsZ28pID8gMiA6IDEpOworKyAgICAgICNlbHNlCisrICAgICAgMTsKKysgICAgICAjZW5kaWYKKyt9CisrCisrVUludDMyIEx6bWFFbmNQcm9wc19HZXREaWN0U2l6ZShjb25zdCBDTHptYUVuY1Byb3BzICpwcm9wczIpCisreworKyAgQ0x6bWFFbmNQcm9wcyBwcm9wcyA9ICpwcm9wczI7CisrICBMem1hRW5jUHJvcHNfTm9ybWFsaXplKCZwcm9wcyk7CisrICByZXR1cm4gcHJvcHMuZGljdFNpemU7CisrfQorKworKy8qICNkZWZpbmUgTFpNQV9MT0dfQlNSICovCisrLyogRGVmaW5lIGl0IGZvciBJbnRlbCdzIENQVSAqLworKworKworKyNpZmRlZiBMWk1BX0xPR19CU1IKKysKKysjZGVmaW5lIGtEaWNMb2dTaXplTWF4Q29tcHJlc3MgMzAKKysKKysjZGVmaW5lIEJTUjJfUkVUKHBvcywgcmVzKSB7IHVuc2lnbmVkIGxvbmcgaTsgX0JpdFNjYW5SZXZlcnNlKCZpLCAocG9zKSk7IHJlcyA9IChpICsgaSkgKyAoKHBvcyA+PiAoaSAtIDEpKSAmIDEpOyB9CisrCisrVUludDMyIEdldFBvc1Nsb3QxKFVJbnQzMiBwb3MpCisreworKyAgVUludDMyIHJlczsKKysgIEJTUjJfUkVUKHBvcywgcmVzKTsKKysgIHJldHVybiByZXM7CisrfQorKyNkZWZpbmUgR2V0UG9zU2xvdDIocG9zLCByZXMpIHsgQlNSMl9SRVQocG9zLCByZXMpOyB9CisrI2RlZmluZSBHZXRQb3NTbG90KHBvcywgcmVzKSB7IGlmIChwb3MgPCAyKSByZXMgPSBwb3M7IGVsc2UgQlNSMl9SRVQocG9zLCByZXMpOyB9CisrCisrI2Vsc2UKKysKKysjZGVmaW5lIGtOdW1Mb2dCaXRzICg5ICsgKGludClzaXplb2Yoc2l6ZV90KSAvIDIpCisrI2RlZmluZSBrRGljTG9nU2l6ZU1heENvbXByZXNzICgoa051bUxvZ0JpdHMgLSAxKSAqIDIgKyA3KQorKworK3ZvaWQgTHptYUVuY19GYXN0UG9zSW5pdChCeXRlICpnX0Zhc3RQb3MpCisreworKyAgaW50IGMgPSAyLCBzbG90RmFzdDsKKysgIGdfRmFzdFBvc1swXSA9IDA7CisrICBnX0Zhc3RQb3NbMV0gPSAxOworKworKyAgZm9yIChzbG90RmFzdCA9IDI7IHNsb3RGYXN0IDwga051bUxvZ0JpdHMgKiAyOyBzbG90RmFzdCsrKQorKyAgeworKyAgICBVSW50MzIgayA9ICgxIDw8ICgoc2xvdEZhc3QgPj4gMSkgLSAxKSk7CisrICAgIFVJbnQzMiBqOworKyAgICBmb3IgKGogPSAwOyBqIDwgazsgaisrLCBjKyspCisrICAgICAgZ19GYXN0UG9zW2NdID0gKEJ5dGUpc2xvdEZhc3Q7CisrICB9CisrfQorKworKyNkZWZpbmUgQlNSMl9SRVQocG9zLCByZXMpIHsgVUludDMyIGkgPSA2ICsgKChrTnVtTG9nQml0cyAtIDEpICYgXAorKyAgKDAgLSAoKCgoKFVJbnQzMikxIDw8IChrTnVtTG9nQml0cyArIDYpKSAtIDEpIC0gcG9zKSA+PiAzMSkpKTsgXAorKyAgcmVzID0gcC0+Z19GYXN0UG9zW3BvcyA+PiBpXSArIChpICogMik7IH0KKysvKgorKyNkZWZpbmUgQlNSMl9SRVQocG9zLCByZXMpIHsgcmVzID0gKHBvcyA8ICgxIDw8IChrTnVtTG9nQml0cyArIDYpKSkgPyBcCisrICBwLT5nX0Zhc3RQb3NbcG9zID4+IDZdICsgMTIgOiBcCisrICBwLT5nX0Zhc3RQb3NbcG9zID4+ICg2ICsga051bUxvZ0JpdHMgLSAxKV0gKyAoNiArIChrTnVtTG9nQml0cyAtIDEpKSAqIDI7IH0KKysqLworKworKyNkZWZpbmUgR2V0UG9zU2xvdDEocG9zKSBwLT5nX0Zhc3RQb3NbcG9zXQorKyNkZWZpbmUgR2V0UG9zU2xvdDIocG9zLCByZXMpIHsgQlNSMl9SRVQocG9zLCByZXMpOyB9CisrI2RlZmluZSBHZXRQb3NTbG90KHBvcywgcmVzKSB7IGlmIChwb3MgPCBrTnVtRnVsbERpc3RhbmNlcykgcmVzID0gcC0+Z19GYXN0UG9zW3Bvc107IGVsc2UgQlNSMl9SRVQocG9zLCByZXMpOyB9CisrCisrI2VuZGlmCisrCisrCisrI2RlZmluZSBMWk1BX05VTV9SRVBTIDQKKysKKyt0eXBlZGVmIHVuc2lnbmVkIENTdGF0ZTsKKysKKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIFVJbnQzMiBwcmljZTsKKysKKysgIENTdGF0ZSBzdGF0ZTsKKysgIGludCBwcmV2MUlzQ2hhcjsKKysgIGludCBwcmV2MjsKKysKKysgIFVJbnQzMiBwb3NQcmV2MjsKKysgIFVJbnQzMiBiYWNrUHJldjI7CisrCisrICBVSW50MzIgcG9zUHJldjsKKysgIFVJbnQzMiBiYWNrUHJldjsKKysgIFVJbnQzMiBiYWNrc1tMWk1BX05VTV9SRVBTXTsKKyt9IENPcHRpbWFsOworKworKyNkZWZpbmUga051bU9wdHMgKDEgPDwgMTIpCisrCisrI2RlZmluZSBrTnVtTGVuVG9Qb3NTdGF0ZXMgNAorKyNkZWZpbmUga051bVBvc1Nsb3RCaXRzIDYKKysjZGVmaW5lIGtEaWNMb2dTaXplTWluIDAKKysjZGVmaW5lIGtEaWNMb2dTaXplTWF4IDMyCisrI2RlZmluZSBrRGlzdFRhYmxlU2l6ZU1heCAoa0RpY0xvZ1NpemVNYXggKiAyKQorKworKworKyNkZWZpbmUga051bUFsaWduQml0cyA0CisrI2RlZmluZSBrQWxpZ25UYWJsZVNpemUgKDEgPDwga051bUFsaWduQml0cykKKysjZGVmaW5lIGtBbGlnbk1hc2sgKGtBbGlnblRhYmxlU2l6ZSAtIDEpCisrCisrI2RlZmluZSBrU3RhcnRQb3NNb2RlbEluZGV4IDQKKysjZGVmaW5lIGtFbmRQb3NNb2RlbEluZGV4IDE0CisrI2RlZmluZSBrTnVtUG9zTW9kZWxzIChrRW5kUG9zTW9kZWxJbmRleCAtIGtTdGFydFBvc01vZGVsSW5kZXgpCisrCisrI2RlZmluZSBrTnVtRnVsbERpc3RhbmNlcyAoMSA8PCAoa0VuZFBvc01vZGVsSW5kZXggPj4gMSkpCisrCisrI2lmZGVmIF9MWk1BX1BST0IzMgorKyNkZWZpbmUgQ0x6bWFQcm9iIFVJbnQzMgorKyNlbHNlCisrI2RlZmluZSBDTHptYVByb2IgVUludDE2CisrI2VuZGlmCisrCisrI2RlZmluZSBMWk1BX1BCX01BWCA0CisrI2RlZmluZSBMWk1BX0xDX01BWCA4CisrI2RlZmluZSBMWk1BX0xQX01BWCA0CisrCisrI2RlZmluZSBMWk1BX05VTV9QQl9TVEFURVNfTUFYICgxIDw8IExaTUFfUEJfTUFYKQorKworKworKyNkZWZpbmUga0xlbk51bUxvd0JpdHMgMworKyNkZWZpbmUga0xlbk51bUxvd1N5bWJvbHMgKDEgPDwga0xlbk51bUxvd0JpdHMpCisrI2RlZmluZSBrTGVuTnVtTWlkQml0cyAzCisrI2RlZmluZSBrTGVuTnVtTWlkU3ltYm9scyAoMSA8PCBrTGVuTnVtTWlkQml0cykKKysjZGVmaW5lIGtMZW5OdW1IaWdoQml0cyA4CisrI2RlZmluZSBrTGVuTnVtSGlnaFN5bWJvbHMgKDEgPDwga0xlbk51bUhpZ2hCaXRzKQorKworKyNkZWZpbmUga0xlbk51bVN5bWJvbHNUb3RhbCAoa0xlbk51bUxvd1N5bWJvbHMgKyBrTGVuTnVtTWlkU3ltYm9scyArIGtMZW5OdW1IaWdoU3ltYm9scykKKysKKysjZGVmaW5lIExaTUFfTUFUQ0hfTEVOX01JTiAyCisrI2RlZmluZSBMWk1BX01BVENIX0xFTl9NQVggKExaTUFfTUFUQ0hfTEVOX01JTiArIGtMZW5OdW1TeW1ib2xzVG90YWwgLSAxKQorKworKyNkZWZpbmUga051bVN0YXRlcyAxMgorKworK3R5cGVkZWYgc3RydWN0CisreworKyAgQ0x6bWFQcm9iIGNob2ljZTsKKysgIENMem1hUHJvYiBjaG9pY2UyOworKyAgQ0x6bWFQcm9iIGxvd1tMWk1BX05VTV9QQl9TVEFURVNfTUFYIDw8IGtMZW5OdW1Mb3dCaXRzXTsKKysgIENMem1hUHJvYiBtaWRbTFpNQV9OVU1fUEJfU1RBVEVTX01BWCA8PCBrTGVuTnVtTWlkQml0c107CisrICBDTHptYVByb2IgaGlnaFtrTGVuTnVtSGlnaFN5bWJvbHNdOworK30gQ0xlbkVuYzsKKysKKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIENMZW5FbmMgcDsKKysgIFVJbnQzMiBwcmljZXNbTFpNQV9OVU1fUEJfU1RBVEVTX01BWF1ba0xlbk51bVN5bWJvbHNUb3RhbF07CisrICBVSW50MzIgdGFibGVTaXplOworKyAgVUludDMyIGNvdW50ZXJzW0xaTUFfTlVNX1BCX1NUQVRFU19NQVhdOworK30gQ0xlblByaWNlRW5jOworKworK3R5cGVkZWYgc3RydWN0CisreworKyAgVUludDMyIHJhbmdlOworKyAgQnl0ZSBjYWNoZTsKKysgIFVJbnQ2NCBsb3c7CisrICBVSW50NjQgY2FjaGVTaXplOworKyAgQnl0ZSAqYnVmOworKyAgQnl0ZSAqYnVmTGltOworKyAgQnl0ZSAqYnVmQmFzZTsKKysgIElTZXFPdXRTdHJlYW0gKm91dFN0cmVhbTsKKysgIFVJbnQ2NCBwcm9jZXNzZWQ7CisrICBTUmVzIHJlczsKKyt9IENSYW5nZUVuYzsKKysKKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIENMem1hUHJvYiAqbGl0UHJvYnM7CisrCisrICBDTHptYVByb2IgaXNNYXRjaFtrTnVtU3RhdGVzXVtMWk1BX05VTV9QQl9TVEFURVNfTUFYXTsKKysgIENMem1hUHJvYiBpc1JlcFtrTnVtU3RhdGVzXTsKKysgIENMem1hUHJvYiBpc1JlcEcwW2tOdW1TdGF0ZXNdOworKyAgQ0x6bWFQcm9iIGlzUmVwRzFba051bVN0YXRlc107CisrICBDTHptYVByb2IgaXNSZXBHMltrTnVtU3RhdGVzXTsKKysgIENMem1hUHJvYiBpc1JlcDBMb25nW2tOdW1TdGF0ZXNdW0xaTUFfTlVNX1BCX1NUQVRFU19NQVhdOworKworKyAgQ0x6bWFQcm9iIHBvc1Nsb3RFbmNvZGVyW2tOdW1MZW5Ub1Bvc1N0YXRlc11bMSA8PCBrTnVtUG9zU2xvdEJpdHNdOworKyAgQ0x6bWFQcm9iIHBvc0VuY29kZXJzW2tOdW1GdWxsRGlzdGFuY2VzIC0ga0VuZFBvc01vZGVsSW5kZXhdOworKyAgQ0x6bWFQcm9iIHBvc0FsaWduRW5jb2RlclsxIDw8IGtOdW1BbGlnbkJpdHNdOworKworKyAgQ0xlblByaWNlRW5jIGxlbkVuYzsKKysgIENMZW5QcmljZUVuYyByZXBMZW5FbmM7CisrCisrICBVSW50MzIgcmVwc1tMWk1BX05VTV9SRVBTXTsKKysgIFVJbnQzMiBzdGF0ZTsKKyt9IENTYXZlU3RhdGU7CisrCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBJTWF0Y2hGaW5kZXIgbWF0Y2hGaW5kZXI7CisrICB2b2lkICptYXRjaEZpbmRlck9iajsKKysKKysgICNpZm5kZWYgXzdaSVBfU1QKKysgIEJvb2wgbXRNb2RlOworKyAgQ01hdGNoRmluZGVyTXQgbWF0Y2hGaW5kZXJNdDsKKysgICNlbmRpZgorKworKyAgQ01hdGNoRmluZGVyIG1hdGNoRmluZGVyQmFzZTsKKysKKysgICNpZm5kZWYgXzdaSVBfU1QKKysgIEJ5dGUgcGFkWzEyOF07CisrICAjZW5kaWYKKysKKysgIFVJbnQzMiBvcHRpbXVtRW5kSW5kZXg7CisrICBVSW50MzIgb3B0aW11bUN1cnJlbnRJbmRleDsKKysKKysgIFVJbnQzMiBsb25nZXN0TWF0Y2hMZW5ndGg7CisrICBVSW50MzIgbnVtUGFpcnM7CisrICBVSW50MzIgbnVtQXZhaWw7CisrICBDT3B0aW1hbCBvcHRba051bU9wdHNdOworKworKyAgI2lmbmRlZiBMWk1BX0xPR19CU1IKKysgIEJ5dGUgZ19GYXN0UG9zWzEgPDwga051bUxvZ0JpdHNdOworKyAgI2VuZGlmCisrCisrICBVSW50MzIgUHJvYlByaWNlc1trQml0TW9kZWxUb3RhbCA+PiBrTnVtTW92ZVJlZHVjaW5nQml0c107CisrICBVSW50MzIgbWF0Y2hlc1tMWk1BX01BVENIX0xFTl9NQVggKiAyICsgMiArIDFdOworKyAgVUludDMyIG51bUZhc3RCeXRlczsKKysgIFVJbnQzMiBhZGRpdGlvbmFsT2Zmc2V0OworKyAgVUludDMyIHJlcHNbTFpNQV9OVU1fUkVQU107CisrICBVSW50MzIgc3RhdGU7CisrCisrICBVSW50MzIgcG9zU2xvdFByaWNlc1trTnVtTGVuVG9Qb3NTdGF0ZXNdW2tEaXN0VGFibGVTaXplTWF4XTsKKysgIFVJbnQzMiBkaXN0YW5jZXNQcmljZXNba051bUxlblRvUG9zU3RhdGVzXVtrTnVtRnVsbERpc3RhbmNlc107CisrICBVSW50MzIgYWxpZ25QcmljZXNba0FsaWduVGFibGVTaXplXTsKKysgIFVJbnQzMiBhbGlnblByaWNlQ291bnQ7CisrCisrICBVSW50MzIgZGlzdFRhYmxlU2l6ZTsKKysKKysgIHVuc2lnbmVkIGxjLCBscCwgcGI7CisrICB1bnNpZ25lZCBscE1hc2ssIHBiTWFzazsKKysKKysgIENMem1hUHJvYiAqbGl0UHJvYnM7CisrCisrICBDTHptYVByb2IgaXNNYXRjaFtrTnVtU3RhdGVzXVtMWk1BX05VTV9QQl9TVEFURVNfTUFYXTsKKysgIENMem1hUHJvYiBpc1JlcFtrTnVtU3RhdGVzXTsKKysgIENMem1hUHJvYiBpc1JlcEcwW2tOdW1TdGF0ZXNdOworKyAgQ0x6bWFQcm9iIGlzUmVwRzFba051bVN0YXRlc107CisrICBDTHptYVByb2IgaXNSZXBHMltrTnVtU3RhdGVzXTsKKysgIENMem1hUHJvYiBpc1JlcDBMb25nW2tOdW1TdGF0ZXNdW0xaTUFfTlVNX1BCX1NUQVRFU19NQVhdOworKworKyAgQ0x6bWFQcm9iIHBvc1Nsb3RFbmNvZGVyW2tOdW1MZW5Ub1Bvc1N0YXRlc11bMSA8PCBrTnVtUG9zU2xvdEJpdHNdOworKyAgQ0x6bWFQcm9iIHBvc0VuY29kZXJzW2tOdW1GdWxsRGlzdGFuY2VzIC0ga0VuZFBvc01vZGVsSW5kZXhdOworKyAgQ0x6bWFQcm9iIHBvc0FsaWduRW5jb2RlclsxIDw8IGtOdW1BbGlnbkJpdHNdOworKworKyAgQ0xlblByaWNlRW5jIGxlbkVuYzsKKysgIENMZW5QcmljZUVuYyByZXBMZW5FbmM7CisrCisrICB1bnNpZ25lZCBsY2xwOworKworKyAgQm9vbCBmYXN0TW9kZTsKKysKKysgIENSYW5nZUVuYyByYzsKKysKKysgIEJvb2wgd3JpdGVFbmRNYXJrOworKyAgVUludDY0IG5vd1BvczY0OworKyAgVUludDMyIG1hdGNoUHJpY2VDb3VudDsKKysgIEJvb2wgZmluaXNoZWQ7CisrICBCb29sIG11bHRpVGhyZWFkOworKworKyAgU1JlcyByZXN1bHQ7CisrICBVSW50MzIgZGljdFNpemU7CisrICBVSW50MzIgbWF0Y2hGaW5kZXJDeWNsZXM7CisrCisrICBpbnQgbmVlZEluaXQ7CisrCisrICBDU2F2ZVN0YXRlIHNhdmVTdGF0ZTsKKyt9IENMem1hRW5jOworKworK3ZvaWQgTHptYUVuY19TYXZlU3RhdGUoQ0x6bWFFbmNIYW5kbGUgcHApCisreworKyAgQ0x6bWFFbmMgKnAgPSAoQ0x6bWFFbmMgKilwcDsKKysgIENTYXZlU3RhdGUgKmRlc3QgPSAmcC0+c2F2ZVN0YXRlOworKyAgaW50IGk7CisrICBkZXN0LT5sZW5FbmMgPSBwLT5sZW5FbmM7CisrICBkZXN0LT5yZXBMZW5FbmMgPSBwLT5yZXBMZW5FbmM7CisrICBkZXN0LT5zdGF0ZSA9IHAtPnN0YXRlOworKworKyAgZm9yIChpID0gMDsgaSA8IGtOdW1TdGF0ZXM7IGkrKykKKysgIHsKKysgICAgbWVtY3B5KGRlc3QtPmlzTWF0Y2hbaV0sIHAtPmlzTWF0Y2hbaV0sIHNpemVvZihwLT5pc01hdGNoW2ldKSk7CisrICAgIG1lbWNweShkZXN0LT5pc1JlcDBMb25nW2ldLCBwLT5pc1JlcDBMb25nW2ldLCBzaXplb2YocC0+aXNSZXAwTG9uZ1tpXSkpOworKyAgfQorKyAgZm9yIChpID0gMDsgaSA8IGtOdW1MZW5Ub1Bvc1N0YXRlczsgaSsrKQorKyAgICBtZW1jcHkoZGVzdC0+cG9zU2xvdEVuY29kZXJbaV0sIHAtPnBvc1Nsb3RFbmNvZGVyW2ldLCBzaXplb2YocC0+cG9zU2xvdEVuY29kZXJbaV0pKTsKKysgIG1lbWNweShkZXN0LT5pc1JlcCwgcC0+aXNSZXAsIHNpemVvZihwLT5pc1JlcCkpOworKyAgbWVtY3B5KGRlc3QtPmlzUmVwRzAsIHAtPmlzUmVwRzAsIHNpemVvZihwLT5pc1JlcEcwKSk7CisrICBtZW1jcHkoZGVzdC0+aXNSZXBHMSwgcC0+aXNSZXBHMSwgc2l6ZW9mKHAtPmlzUmVwRzEpKTsKKysgIG1lbWNweShkZXN0LT5pc1JlcEcyLCBwLT5pc1JlcEcyLCBzaXplb2YocC0+aXNSZXBHMikpOworKyAgbWVtY3B5KGRlc3QtPnBvc0VuY29kZXJzLCBwLT5wb3NFbmNvZGVycywgc2l6ZW9mKHAtPnBvc0VuY29kZXJzKSk7CisrICBtZW1jcHkoZGVzdC0+cG9zQWxpZ25FbmNvZGVyLCBwLT5wb3NBbGlnbkVuY29kZXIsIHNpemVvZihwLT5wb3NBbGlnbkVuY29kZXIpKTsKKysgIG1lbWNweShkZXN0LT5yZXBzLCBwLT5yZXBzLCBzaXplb2YocC0+cmVwcykpOworKyAgbWVtY3B5KGRlc3QtPmxpdFByb2JzLCBwLT5saXRQcm9icywgKDB4MzAwIDw8IHAtPmxjbHApICogc2l6ZW9mKENMem1hUHJvYikpOworK30KKysKKyt2b2lkIEx6bWFFbmNfUmVzdG9yZVN0YXRlKENMem1hRW5jSGFuZGxlIHBwKQorK3sKKysgIENMem1hRW5jICpkZXN0ID0gKENMem1hRW5jICopcHA7CisrICBjb25zdCBDU2F2ZVN0YXRlICpwID0gJmRlc3QtPnNhdmVTdGF0ZTsKKysgIGludCBpOworKyAgZGVzdC0+bGVuRW5jID0gcC0+bGVuRW5jOworKyAgZGVzdC0+cmVwTGVuRW5jID0gcC0+cmVwTGVuRW5jOworKyAgZGVzdC0+c3RhdGUgPSBwLT5zdGF0ZTsKKysKKysgIGZvciAoaSA9IDA7IGkgPCBrTnVtU3RhdGVzOyBpKyspCisrICB7CisrICAgIG1lbWNweShkZXN0LT5pc01hdGNoW2ldLCBwLT5pc01hdGNoW2ldLCBzaXplb2YocC0+aXNNYXRjaFtpXSkpOworKyAgICBtZW1jcHkoZGVzdC0+aXNSZXAwTG9uZ1tpXSwgcC0+aXNSZXAwTG9uZ1tpXSwgc2l6ZW9mKHAtPmlzUmVwMExvbmdbaV0pKTsKKysgIH0KKysgIGZvciAoaSA9IDA7IGkgPCBrTnVtTGVuVG9Qb3NTdGF0ZXM7IGkrKykKKysgICAgbWVtY3B5KGRlc3QtPnBvc1Nsb3RFbmNvZGVyW2ldLCBwLT5wb3NTbG90RW5jb2RlcltpXSwgc2l6ZW9mKHAtPnBvc1Nsb3RFbmNvZGVyW2ldKSk7CisrICBtZW1jcHkoZGVzdC0+aXNSZXAsIHAtPmlzUmVwLCBzaXplb2YocC0+aXNSZXApKTsKKysgIG1lbWNweShkZXN0LT5pc1JlcEcwLCBwLT5pc1JlcEcwLCBzaXplb2YocC0+aXNSZXBHMCkpOworKyAgbWVtY3B5KGRlc3QtPmlzUmVwRzEsIHAtPmlzUmVwRzEsIHNpemVvZihwLT5pc1JlcEcxKSk7CisrICBtZW1jcHkoZGVzdC0+aXNSZXBHMiwgcC0+aXNSZXBHMiwgc2l6ZW9mKHAtPmlzUmVwRzIpKTsKKysgIG1lbWNweShkZXN0LT5wb3NFbmNvZGVycywgcC0+cG9zRW5jb2RlcnMsIHNpemVvZihwLT5wb3NFbmNvZGVycykpOworKyAgbWVtY3B5KGRlc3QtPnBvc0FsaWduRW5jb2RlciwgcC0+cG9zQWxpZ25FbmNvZGVyLCBzaXplb2YocC0+cG9zQWxpZ25FbmNvZGVyKSk7CisrICBtZW1jcHkoZGVzdC0+cmVwcywgcC0+cmVwcywgc2l6ZW9mKHAtPnJlcHMpKTsKKysgIG1lbWNweShkZXN0LT5saXRQcm9icywgcC0+bGl0UHJvYnMsICgweDMwMCA8PCBkZXN0LT5sY2xwKSAqIHNpemVvZihDTHptYVByb2IpKTsKKyt9CisrCisrU1JlcyBMem1hRW5jX1NldFByb3BzKENMem1hRW5jSGFuZGxlIHBwLCBjb25zdCBDTHptYUVuY1Byb3BzICpwcm9wczIpCisreworKyAgQ0x6bWFFbmMgKnAgPSAoQ0x6bWFFbmMgKilwcDsKKysgIENMem1hRW5jUHJvcHMgcHJvcHMgPSAqcHJvcHMyOworKyAgTHptYUVuY1Byb3BzX05vcm1hbGl6ZSgmcHJvcHMpOworKworKyAgaWYgKHByb3BzLmxjID4gTFpNQV9MQ19NQVggfHwgcHJvcHMubHAgPiBMWk1BX0xQX01BWCB8fCBwcm9wcy5wYiA+IExaTUFfUEJfTUFYIHx8CisrICAgICAgcHJvcHMuZGljdFNpemUgPiAoMSA8PCBrRGljTG9nU2l6ZU1heENvbXByZXNzKSB8fCBwcm9wcy5kaWN0U2l6ZSA+ICgxIDw8IDMwKSkKKysgICAgcmV0dXJuIFNaX0VSUk9SX1BBUkFNOworKyAgcC0+ZGljdFNpemUgPSBwcm9wcy5kaWN0U2l6ZTsKKysgIHAtPm1hdGNoRmluZGVyQ3ljbGVzID0gcHJvcHMubWM7CisrICB7CisrICAgIHVuc2lnbmVkIGZiID0gcHJvcHMuZmI7CisrICAgIGlmIChmYiA8IDUpCisrICAgICAgZmIgPSA1OworKyAgICBpZiAoZmIgPiBMWk1BX01BVENIX0xFTl9NQVgpCisrICAgICAgZmIgPSBMWk1BX01BVENIX0xFTl9NQVg7CisrICAgIHAtPm51bUZhc3RCeXRlcyA9IGZiOworKyAgfQorKyAgcC0+bGMgPSBwcm9wcy5sYzsKKysgIHAtPmxwID0gcHJvcHMubHA7CisrICBwLT5wYiA9IHByb3BzLnBiOworKyAgcC0+ZmFzdE1vZGUgPSAocHJvcHMuYWxnbyA9PSAwKTsKKysgIHAtPm1hdGNoRmluZGVyQmFzZS5idE1vZGUgPSBwcm9wcy5idE1vZGU7CisrICB7CisrICAgIFVJbnQzMiBudW1IYXNoQnl0ZXMgPSA0OworKyAgICBpZiAocHJvcHMuYnRNb2RlKQorKyAgICB7CisrICAgICAgaWYgKHByb3BzLm51bUhhc2hCeXRlcyA8IDIpCisrICAgICAgICBudW1IYXNoQnl0ZXMgPSAyOworKyAgICAgIGVsc2UgaWYgKHByb3BzLm51bUhhc2hCeXRlcyA8IDQpCisrICAgICAgICBudW1IYXNoQnl0ZXMgPSBwcm9wcy5udW1IYXNoQnl0ZXM7CisrICAgIH0KKysgICAgcC0+bWF0Y2hGaW5kZXJCYXNlLm51bUhhc2hCeXRlcyA9IG51bUhhc2hCeXRlczsKKysgIH0KKysKKysgIHAtPm1hdGNoRmluZGVyQmFzZS5jdXRWYWx1ZSA9IHByb3BzLm1jOworKworKyAgcC0+d3JpdGVFbmRNYXJrID0gcHJvcHMud3JpdGVFbmRNYXJrOworKworKyAgI2lmbmRlZiBfN1pJUF9TVAorKyAgLyoKKysgIGlmIChuZXdNdWx0aVRocmVhZCAhPSBfbXVsdGlUaHJlYWQpCisrICB7CisrICAgIFJlbGVhc2VNYXRjaEZpbmRlcigpOworKyAgICBfbXVsdGlUaHJlYWQgPSBuZXdNdWx0aVRocmVhZDsKKysgIH0KKysgICovCisrICBwLT5tdWx0aVRocmVhZCA9IChwcm9wcy5udW1UaHJlYWRzID4gMSk7CisrICAjZW5kaWYKKysKKysgIHJldHVybiBTWl9PSzsKKyt9CisrCisrc3RhdGljIGNvbnN0IGludCBrTGl0ZXJhbE5leHRTdGF0ZXNba051bVN0YXRlc10gPSB7MCwgMCwgMCwgMCwgMSwgMiwgMywgNCwgIDUsICA2LCAgIDQsIDV9OworK3N0YXRpYyBjb25zdCBpbnQga01hdGNoTmV4dFN0YXRlc1trTnVtU3RhdGVzXSAgID0gezcsIDcsIDcsIDcsIDcsIDcsIDcsIDEwLCAxMCwgMTAsIDEwLCAxMH07Cisrc3RhdGljIGNvbnN0IGludCBrUmVwTmV4dFN0YXRlc1trTnVtU3RhdGVzXSAgICAgPSB7OCwgOCwgOCwgOCwgOCwgOCwgOCwgMTEsIDExLCAxMSwgMTEsIDExfTsKKytzdGF0aWMgY29uc3QgaW50IGtTaG9ydFJlcE5leHRTdGF0ZXNba051bVN0YXRlc109IHs5LCA5LCA5LCA5LCA5LCA5LCA5LCAxMSwgMTEsIDExLCAxMSwgMTF9OworKworKyNkZWZpbmUgSXNDaGFyU3RhdGUocykgKChzKSA8IDcpCisrCisrI2RlZmluZSBHZXRMZW5Ub1Bvc1N0YXRlKGxlbikgKCgobGVuKSA8IGtOdW1MZW5Ub1Bvc1N0YXRlcyArIDEpID8gKGxlbikgLSAyIDoga051bUxlblRvUG9zU3RhdGVzIC0gMSkKKysKKysjZGVmaW5lIGtJbmZpbml0eVByaWNlICgxIDw8IDMwKQorKworK3N0YXRpYyB2b2lkIFJhbmdlRW5jX0NvbnN0cnVjdChDUmFuZ2VFbmMgKnApCisreworKyAgcC0+b3V0U3RyZWFtID0gMDsKKysgIHAtPmJ1ZkJhc2UgPSAwOworK30KKysKKysjZGVmaW5lIFJhbmdlRW5jX0dldFByb2Nlc3NlZChwKSAoKHApLT5wcm9jZXNzZWQgKyAoKHApLT5idWYgLSAocCktPmJ1ZkJhc2UpICsgKHApLT5jYWNoZVNpemUpCisrCisrI2RlZmluZSBSQ19CVUZfU0laRSAoMSA8PCAxNikKKytzdGF0aWMgaW50IFJhbmdlRW5jX0FsbG9jKENSYW5nZUVuYyAqcCwgSVN6QWxsb2MgKmFsbG9jKQorK3sKKysgIGlmIChwLT5idWZCYXNlID09IDApCisrICB7CisrICAgIHAtPmJ1ZkJhc2UgPSAoQnl0ZSAqKWFsbG9jLT5BbGxvYyhhbGxvYywgUkNfQlVGX1NJWkUpOworKyAgICBpZiAocC0+YnVmQmFzZSA9PSAwKQorKyAgICAgIHJldHVybiAwOworKyAgICBwLT5idWZMaW0gPSBwLT5idWZCYXNlICsgUkNfQlVGX1NJWkU7CisrICB9CisrICByZXR1cm4gMTsKKyt9CisrCisrc3RhdGljIHZvaWQgUmFuZ2VFbmNfRnJlZShDUmFuZ2VFbmMgKnAsIElTekFsbG9jICphbGxvYykKKyt7CisrICBhbGxvYy0+RnJlZShhbGxvYywgcC0+YnVmQmFzZSk7CisrICBwLT5idWZCYXNlID0gMDsKKyt9CisrCisrc3RhdGljIHZvaWQgUmFuZ2VFbmNfSW5pdChDUmFuZ2VFbmMgKnApCisreworKyAgLyogU3RyZWFtLkluaXQoKTsgKi8KKysgIHAtPmxvdyA9IDA7CisrICBwLT5yYW5nZSA9IDB4RkZGRkZGRkY7CisrICBwLT5jYWNoZVNpemUgPSAxOworKyAgcC0+Y2FjaGUgPSAwOworKworKyAgcC0+YnVmID0gcC0+YnVmQmFzZTsKKysKKysgIHAtPnByb2Nlc3NlZCA9IDA7CisrICBwLT5yZXMgPSBTWl9PSzsKKyt9CisrCisrc3RhdGljIHZvaWQgUmFuZ2VFbmNfRmx1c2hTdHJlYW0oQ1JhbmdlRW5jICpwKQorK3sKKysgIHNpemVfdCBudW07CisrICBpZiAocC0+cmVzICE9IFNaX09LKQorKyAgICByZXR1cm47CisrICBudW0gPSBwLT5idWYgLSBwLT5idWZCYXNlOworKyAgaWYgKG51bSAhPSBwLT5vdXRTdHJlYW0tPldyaXRlKHAtPm91dFN0cmVhbSwgcC0+YnVmQmFzZSwgbnVtKSkKKysgICAgcC0+cmVzID0gU1pfRVJST1JfV1JJVEU7CisrICBwLT5wcm9jZXNzZWQgKz0gbnVtOworKyAgcC0+YnVmID0gcC0+YnVmQmFzZTsKKyt9CisrCisrc3RhdGljIHZvaWQgTVlfRkFTVF9DQUxMIFJhbmdlRW5jX1NoaWZ0TG93KENSYW5nZUVuYyAqcCkKKyt7CisrICBpZiAoKFVJbnQzMilwLT5sb3cgPCAoVUludDMyKTB4RkYwMDAwMDAgfHwgKGludCkocC0+bG93ID4+IDMyKSAhPSAwKQorKyAgeworKyAgICBCeXRlIHRlbXAgPSBwLT5jYWNoZTsKKysgICAgZG8KKysgICAgeworKyAgICAgIEJ5dGUgKmJ1ZiA9IHAtPmJ1ZjsKKysgICAgICAqYnVmKysgPSAoQnl0ZSkodGVtcCArIChCeXRlKShwLT5sb3cgPj4gMzIpKTsKKysgICAgICBwLT5idWYgPSBidWY7CisrICAgICAgaWYgKGJ1ZiA9PSBwLT5idWZMaW0pCisrICAgICAgICBSYW5nZUVuY19GbHVzaFN0cmVhbShwKTsKKysgICAgICB0ZW1wID0gMHhGRjsKKysgICAgfQorKyAgICB3aGlsZSAoLS1wLT5jYWNoZVNpemUgIT0gMCk7CisrICAgIHAtPmNhY2hlID0gKEJ5dGUpKChVSW50MzIpcC0+bG93ID4+IDI0KTsKKysgIH0KKysgIHAtPmNhY2hlU2l6ZSsrOworKyAgcC0+bG93ID0gKFVJbnQzMilwLT5sb3cgPDwgODsKKyt9CisrCisrc3RhdGljIHZvaWQgUmFuZ2VFbmNfRmx1c2hEYXRhKENSYW5nZUVuYyAqcCkKKyt7CisrICBpbnQgaTsKKysgIGZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisrICAgIFJhbmdlRW5jX1NoaWZ0TG93KHApOworK30KKysKKytzdGF0aWMgdm9pZCBSYW5nZUVuY19FbmNvZGVEaXJlY3RCaXRzKENSYW5nZUVuYyAqcCwgVUludDMyIHZhbHVlLCBpbnQgbnVtQml0cykKKyt7CisrICBkbworKyAgeworKyAgICBwLT5yYW5nZSA+Pj0gMTsKKysgICAgcC0+bG93ICs9IHAtPnJhbmdlICYgKDAgLSAoKHZhbHVlID4+IC0tbnVtQml0cykgJiAxKSk7CisrICAgIGlmIChwLT5yYW5nZSA8IGtUb3BWYWx1ZSkKKysgICAgeworKyAgICAgIHAtPnJhbmdlIDw8PSA4OworKyAgICAgIFJhbmdlRW5jX1NoaWZ0TG93KHApOworKyAgICB9CisrICB9CisrICB3aGlsZSAobnVtQml0cyAhPSAwKTsKKyt9CisrCisrc3RhdGljIHZvaWQgUmFuZ2VFbmNfRW5jb2RlQml0KENSYW5nZUVuYyAqcCwgQ0x6bWFQcm9iICpwcm9iLCBVSW50MzIgc3ltYm9sKQorK3sKKysgIFVJbnQzMiB0dHQgPSAqcHJvYjsKKysgIFVJbnQzMiBuZXdCb3VuZCA9IChwLT5yYW5nZSA+PiBrTnVtQml0TW9kZWxUb3RhbEJpdHMpICogdHR0OworKyAgaWYgKHN5bWJvbCA9PSAwKQorKyAgeworKyAgICBwLT5yYW5nZSA9IG5ld0JvdW5kOworKyAgICB0dHQgKz0gKGtCaXRNb2RlbFRvdGFsIC0gdHR0KSA+PiBrTnVtTW92ZUJpdHM7CisrICB9CisrICBlbHNlCisrICB7CisrICAgIHAtPmxvdyArPSBuZXdCb3VuZDsKKysgICAgcC0+cmFuZ2UgLT0gbmV3Qm91bmQ7CisrICAgIHR0dCAtPSB0dHQgPj4ga051bU1vdmVCaXRzOworKyAgfQorKyAgKnByb2IgPSAoQ0x6bWFQcm9iKXR0dDsKKysgIGlmIChwLT5yYW5nZSA8IGtUb3BWYWx1ZSkKKysgIHsKKysgICAgcC0+cmFuZ2UgPDw9IDg7CisrICAgIFJhbmdlRW5jX1NoaWZ0TG93KHApOworKyAgfQorK30KKysKKytzdGF0aWMgdm9pZCBMaXRFbmNfRW5jb2RlKENSYW5nZUVuYyAqcCwgQ0x6bWFQcm9iICpwcm9icywgVUludDMyIHN5bWJvbCkKKyt7CisrICBzeW1ib2wgfD0gMHgxMDA7CisrICBkbworKyAgeworKyAgICBSYW5nZUVuY19FbmNvZGVCaXQocCwgcHJvYnMgKyAoc3ltYm9sID4+IDgpLCAoc3ltYm9sID4+IDcpICYgMSk7CisrICAgIHN5bWJvbCA8PD0gMTsKKysgIH0KKysgIHdoaWxlIChzeW1ib2wgPCAweDEwMDAwKTsKKyt9CisrCisrc3RhdGljIHZvaWQgTGl0RW5jX0VuY29kZU1hdGNoZWQoQ1JhbmdlRW5jICpwLCBDTHptYVByb2IgKnByb2JzLCBVSW50MzIgc3ltYm9sLCBVSW50MzIgbWF0Y2hCeXRlKQorK3sKKysgIFVJbnQzMiBvZmZzID0gMHgxMDA7CisrICBzeW1ib2wgfD0gMHgxMDA7CisrICBkbworKyAgeworKyAgICBtYXRjaEJ5dGUgPDw9IDE7CisrICAgIFJhbmdlRW5jX0VuY29kZUJpdChwLCBwcm9icyArIChvZmZzICsgKG1hdGNoQnl0ZSAmIG9mZnMpICsgKHN5bWJvbCA+PiA4KSksIChzeW1ib2wgPj4gNykgJiAxKTsKKysgICAgc3ltYm9sIDw8PSAxOworKyAgICBvZmZzICY9IH4obWF0Y2hCeXRlIF4gc3ltYm9sKTsKKysgIH0KKysgIHdoaWxlIChzeW1ib2wgPCAweDEwMDAwKTsKKyt9CisrCisrdm9pZCBMem1hRW5jX0luaXRQcmljZVRhYmxlcyhVSW50MzIgKlByb2JQcmljZXMpCisreworKyAgVUludDMyIGk7CisrICBmb3IgKGkgPSAoMSA8PCBrTnVtTW92ZVJlZHVjaW5nQml0cykgLyAyOyBpIDwga0JpdE1vZGVsVG90YWw7IGkgKz0gKDEgPDwga051bU1vdmVSZWR1Y2luZ0JpdHMpKQorKyAgeworKyAgICBjb25zdCBpbnQga0N5Y2xlc0JpdHMgPSBrTnVtQml0UHJpY2VTaGlmdEJpdHM7CisrICAgIFVJbnQzMiB3ID0gaTsKKysgICAgVUludDMyIGJpdENvdW50ID0gMDsKKysgICAgaW50IGo7CisrICAgIGZvciAoaiA9IDA7IGogPCBrQ3ljbGVzQml0czsgaisrKQorKyAgICB7CisrICAgICAgdyA9IHcgKiB3OworKyAgICAgIGJpdENvdW50IDw8PSAxOworKyAgICAgIHdoaWxlICh3ID49ICgoVUludDMyKTEgPDwgMTYpKQorKyAgICAgIHsKKysgICAgICAgIHcgPj49IDE7CisrICAgICAgICBiaXRDb3VudCsrOworKyAgICAgIH0KKysgICAgfQorKyAgICBQcm9iUHJpY2VzW2kgPj4ga051bU1vdmVSZWR1Y2luZ0JpdHNdID0gKChrTnVtQml0TW9kZWxUb3RhbEJpdHMgPDwga0N5Y2xlc0JpdHMpIC0gMTUgLSBiaXRDb3VudCk7CisrICB9CisrfQorKworKworKyNkZWZpbmUgR0VUX1BSSUNFKHByb2IsIHN5bWJvbCkgXAorKyAgcC0+UHJvYlByaWNlc1soKHByb2IpIF4gKCgoLShpbnQpKHN5bWJvbCkpKSAmIChrQml0TW9kZWxUb3RhbCAtIDEpKSkgPj4ga051bU1vdmVSZWR1Y2luZ0JpdHNdOworKworKyNkZWZpbmUgR0VUX1BSSUNFYShwcm9iLCBzeW1ib2wpIFwKKysgIFByb2JQcmljZXNbKChwcm9iKSBeICgoLSgoaW50KShzeW1ib2wpKSkgJiAoa0JpdE1vZGVsVG90YWwgLSAxKSkpID4+IGtOdW1Nb3ZlUmVkdWNpbmdCaXRzXTsKKysKKysjZGVmaW5lIEdFVF9QUklDRV8wKHByb2IpIHAtPlByb2JQcmljZXNbKHByb2IpID4+IGtOdW1Nb3ZlUmVkdWNpbmdCaXRzXQorKyNkZWZpbmUgR0VUX1BSSUNFXzEocHJvYikgcC0+UHJvYlByaWNlc1soKHByb2IpIF4gKGtCaXRNb2RlbFRvdGFsIC0gMSkpID4+IGtOdW1Nb3ZlUmVkdWNpbmdCaXRzXQorKworKyNkZWZpbmUgR0VUX1BSSUNFXzBhKHByb2IpIFByb2JQcmljZXNbKHByb2IpID4+IGtOdW1Nb3ZlUmVkdWNpbmdCaXRzXQorKyNkZWZpbmUgR0VUX1BSSUNFXzFhKHByb2IpIFByb2JQcmljZXNbKChwcm9iKSBeIChrQml0TW9kZWxUb3RhbCAtIDEpKSA+PiBrTnVtTW92ZVJlZHVjaW5nQml0c10KKysKKytzdGF0aWMgVUludDMyIExpdEVuY19HZXRQcmljZShjb25zdCBDTHptYVByb2IgKnByb2JzLCBVSW50MzIgc3ltYm9sLCBVSW50MzIgKlByb2JQcmljZXMpCisreworKyAgVUludDMyIHByaWNlID0gMDsKKysgIHN5bWJvbCB8PSAweDEwMDsKKysgIGRvCisrICB7CisrICAgIHByaWNlICs9IEdFVF9QUklDRWEocHJvYnNbc3ltYm9sID4+IDhdLCAoc3ltYm9sID4+IDcpICYgMSk7CisrICAgIHN5bWJvbCA8PD0gMTsKKysgIH0KKysgIHdoaWxlIChzeW1ib2wgPCAweDEwMDAwKTsKKysgIHJldHVybiBwcmljZTsKKyt9CisrCisrc3RhdGljIFVJbnQzMiBMaXRFbmNfR2V0UHJpY2VNYXRjaGVkKGNvbnN0IENMem1hUHJvYiAqcHJvYnMsIFVJbnQzMiBzeW1ib2wsIFVJbnQzMiBtYXRjaEJ5dGUsIFVJbnQzMiAqUHJvYlByaWNlcykKKyt7CisrICBVSW50MzIgcHJpY2UgPSAwOworKyAgVUludDMyIG9mZnMgPSAweDEwMDsKKysgIHN5bWJvbCB8PSAweDEwMDsKKysgIGRvCisrICB7CisrICAgIG1hdGNoQnl0ZSA8PD0gMTsKKysgICAgcHJpY2UgKz0gR0VUX1BSSUNFYShwcm9ic1tvZmZzICsgKG1hdGNoQnl0ZSAmIG9mZnMpICsgKHN5bWJvbCA+PiA4KV0sIChzeW1ib2wgPj4gNykgJiAxKTsKKysgICAgc3ltYm9sIDw8PSAxOworKyAgICBvZmZzICY9IH4obWF0Y2hCeXRlIF4gc3ltYm9sKTsKKysgIH0KKysgIHdoaWxlIChzeW1ib2wgPCAweDEwMDAwKTsKKysgIHJldHVybiBwcmljZTsKKyt9CisrCisrCisrc3RhdGljIHZvaWQgUmNUcmVlX0VuY29kZShDUmFuZ2VFbmMgKnJjLCBDTHptYVByb2IgKnByb2JzLCBpbnQgbnVtQml0TGV2ZWxzLCBVSW50MzIgc3ltYm9sKQorK3sKKysgIFVJbnQzMiBtID0gMTsKKysgIGludCBpOworKyAgZm9yIChpID0gbnVtQml0TGV2ZWxzOyBpICE9IDA7KQorKyAgeworKyAgICBVSW50MzIgYml0OworKyAgICBpLS07CisrICAgIGJpdCA9IChzeW1ib2wgPj4gaSkgJiAxOworKyAgICBSYW5nZUVuY19FbmNvZGVCaXQocmMsIHByb2JzICsgbSwgYml0KTsKKysgICAgbSA9IChtIDw8IDEpIHwgYml0OworKyAgfQorK30KKysKKytzdGF0aWMgdm9pZCBSY1RyZWVfUmV2ZXJzZUVuY29kZShDUmFuZ2VFbmMgKnJjLCBDTHptYVByb2IgKnByb2JzLCBpbnQgbnVtQml0TGV2ZWxzLCBVSW50MzIgc3ltYm9sKQorK3sKKysgIFVJbnQzMiBtID0gMTsKKysgIGludCBpOworKyAgZm9yIChpID0gMDsgaSA8IG51bUJpdExldmVsczsgaSsrKQorKyAgeworKyAgICBVSW50MzIgYml0ID0gc3ltYm9sICYgMTsKKysgICAgUmFuZ2VFbmNfRW5jb2RlQml0KHJjLCBwcm9icyArIG0sIGJpdCk7CisrICAgIG0gPSAobSA8PCAxKSB8IGJpdDsKKysgICAgc3ltYm9sID4+PSAxOworKyAgfQorK30KKysKKytzdGF0aWMgVUludDMyIFJjVHJlZV9HZXRQcmljZShjb25zdCBDTHptYVByb2IgKnByb2JzLCBpbnQgbnVtQml0TGV2ZWxzLCBVSW50MzIgc3ltYm9sLCBVSW50MzIgKlByb2JQcmljZXMpCisreworKyAgVUludDMyIHByaWNlID0gMDsKKysgIHN5bWJvbCB8PSAoMSA8PCBudW1CaXRMZXZlbHMpOworKyAgd2hpbGUgKHN5bWJvbCAhPSAxKQorKyAgeworKyAgICBwcmljZSArPSBHRVRfUFJJQ0VhKHByb2JzW3N5bWJvbCA+PiAxXSwgc3ltYm9sICYgMSk7CisrICAgIHN5bWJvbCA+Pj0gMTsKKysgIH0KKysgIHJldHVybiBwcmljZTsKKyt9CisrCisrc3RhdGljIFVJbnQzMiBSY1RyZWVfUmV2ZXJzZUdldFByaWNlKGNvbnN0IENMem1hUHJvYiAqcHJvYnMsIGludCBudW1CaXRMZXZlbHMsIFVJbnQzMiBzeW1ib2wsIFVJbnQzMiAqUHJvYlByaWNlcykKKyt7CisrICBVSW50MzIgcHJpY2UgPSAwOworKyAgVUludDMyIG0gPSAxOworKyAgaW50IGk7CisrICBmb3IgKGkgPSBudW1CaXRMZXZlbHM7IGkgIT0gMDsgaS0tKQorKyAgeworKyAgICBVSW50MzIgYml0ID0gc3ltYm9sICYgMTsKKysgICAgc3ltYm9sID4+PSAxOworKyAgICBwcmljZSArPSBHRVRfUFJJQ0VhKHByb2JzW21dLCBiaXQpOworKyAgICBtID0gKG0gPDwgMSkgfCBiaXQ7CisrICB9CisrICByZXR1cm4gcHJpY2U7CisrfQorKworKworK3N0YXRpYyB2b2lkIExlbkVuY19Jbml0KENMZW5FbmMgKnApCisreworKyAgdW5zaWduZWQgaTsKKysgIHAtPmNob2ljZSA9IHAtPmNob2ljZTIgPSBrUHJvYkluaXRWYWx1ZTsKKysgIGZvciAoaSA9IDA7IGkgPCAoTFpNQV9OVU1fUEJfU1RBVEVTX01BWCA8PCBrTGVuTnVtTG93Qml0cyk7IGkrKykKKysgICAgcC0+bG93W2ldID0ga1Byb2JJbml0VmFsdWU7CisrICBmb3IgKGkgPSAwOyBpIDwgKExaTUFfTlVNX1BCX1NUQVRFU19NQVggPDwga0xlbk51bU1pZEJpdHMpOyBpKyspCisrICAgIHAtPm1pZFtpXSA9IGtQcm9iSW5pdFZhbHVlOworKyAgZm9yIChpID0gMDsgaSA8IGtMZW5OdW1IaWdoU3ltYm9sczsgaSsrKQorKyAgICBwLT5oaWdoW2ldID0ga1Byb2JJbml0VmFsdWU7CisrfQorKworK3N0YXRpYyB2b2lkIExlbkVuY19FbmNvZGUoQ0xlbkVuYyAqcCwgQ1JhbmdlRW5jICpyYywgVUludDMyIHN5bWJvbCwgVUludDMyIHBvc1N0YXRlKQorK3sKKysgIGlmIChzeW1ib2wgPCBrTGVuTnVtTG93U3ltYm9scykKKysgIHsKKysgICAgUmFuZ2VFbmNfRW5jb2RlQml0KHJjLCAmcC0+Y2hvaWNlLCAwKTsKKysgICAgUmNUcmVlX0VuY29kZShyYywgcC0+bG93ICsgKHBvc1N0YXRlIDw8IGtMZW5OdW1Mb3dCaXRzKSwga0xlbk51bUxvd0JpdHMsIHN5bWJvbCk7CisrICB9CisrICBlbHNlCisrICB7CisrICAgIFJhbmdlRW5jX0VuY29kZUJpdChyYywgJnAtPmNob2ljZSwgMSk7CisrICAgIGlmIChzeW1ib2wgPCBrTGVuTnVtTG93U3ltYm9scyArIGtMZW5OdW1NaWRTeW1ib2xzKQorKyAgICB7CisrICAgICAgUmFuZ2VFbmNfRW5jb2RlQml0KHJjLCAmcC0+Y2hvaWNlMiwgMCk7CisrICAgICAgUmNUcmVlX0VuY29kZShyYywgcC0+bWlkICsgKHBvc1N0YXRlIDw8IGtMZW5OdW1NaWRCaXRzKSwga0xlbk51bU1pZEJpdHMsIHN5bWJvbCAtIGtMZW5OdW1Mb3dTeW1ib2xzKTsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICBSYW5nZUVuY19FbmNvZGVCaXQocmMsICZwLT5jaG9pY2UyLCAxKTsKKysgICAgICBSY1RyZWVfRW5jb2RlKHJjLCBwLT5oaWdoLCBrTGVuTnVtSGlnaEJpdHMsIHN5bWJvbCAtIGtMZW5OdW1Mb3dTeW1ib2xzIC0ga0xlbk51bU1pZFN5bWJvbHMpOworKyAgICB9CisrICB9CisrfQorKworK3N0YXRpYyB2b2lkIExlbkVuY19TZXRQcmljZXMoQ0xlbkVuYyAqcCwgVUludDMyIHBvc1N0YXRlLCBVSW50MzIgbnVtU3ltYm9scywgVUludDMyICpwcmljZXMsIFVJbnQzMiAqUHJvYlByaWNlcykKKyt7CisrICBVSW50MzIgYTAgPSBHRVRfUFJJQ0VfMGEocC0+Y2hvaWNlKTsKKysgIFVJbnQzMiBhMSA9IEdFVF9QUklDRV8xYShwLT5jaG9pY2UpOworKyAgVUludDMyIGIwID0gYTEgKyBHRVRfUFJJQ0VfMGEocC0+Y2hvaWNlMik7CisrICBVSW50MzIgYjEgPSBhMSArIEdFVF9QUklDRV8xYShwLT5jaG9pY2UyKTsKKysgIFVJbnQzMiBpID0gMDsKKysgIGZvciAoaSA9IDA7IGkgPCBrTGVuTnVtTG93U3ltYm9sczsgaSsrKQorKyAgeworKyAgICBpZiAoaSA+PSBudW1TeW1ib2xzKQorKyAgICAgIHJldHVybjsKKysgICAgcHJpY2VzW2ldID0gYTAgKyBSY1RyZWVfR2V0UHJpY2UocC0+bG93ICsgKHBvc1N0YXRlIDw8IGtMZW5OdW1Mb3dCaXRzKSwga0xlbk51bUxvd0JpdHMsIGksIFByb2JQcmljZXMpOworKyAgfQorKyAgZm9yICg7IGkgPCBrTGVuTnVtTG93U3ltYm9scyArIGtMZW5OdW1NaWRTeW1ib2xzOyBpKyspCisrICB7CisrICAgIGlmIChpID49IG51bVN5bWJvbHMpCisrICAgICAgcmV0dXJuOworKyAgICBwcmljZXNbaV0gPSBiMCArIFJjVHJlZV9HZXRQcmljZShwLT5taWQgKyAocG9zU3RhdGUgPDwga0xlbk51bU1pZEJpdHMpLCBrTGVuTnVtTWlkQml0cywgaSAtIGtMZW5OdW1Mb3dTeW1ib2xzLCBQcm9iUHJpY2VzKTsKKysgIH0KKysgIGZvciAoOyBpIDwgbnVtU3ltYm9sczsgaSsrKQorKyAgICBwcmljZXNbaV0gPSBiMSArIFJjVHJlZV9HZXRQcmljZShwLT5oaWdoLCBrTGVuTnVtSGlnaEJpdHMsIGkgLSBrTGVuTnVtTG93U3ltYm9scyAtIGtMZW5OdW1NaWRTeW1ib2xzLCBQcm9iUHJpY2VzKTsKKyt9CisrCisrc3RhdGljIHZvaWQgTVlfRkFTVF9DQUxMIExlblByaWNlRW5jX1VwZGF0ZVRhYmxlKENMZW5QcmljZUVuYyAqcCwgVUludDMyIHBvc1N0YXRlLCBVSW50MzIgKlByb2JQcmljZXMpCisreworKyAgTGVuRW5jX1NldFByaWNlcygmcC0+cCwgcG9zU3RhdGUsIHAtPnRhYmxlU2l6ZSwgcC0+cHJpY2VzW3Bvc1N0YXRlXSwgUHJvYlByaWNlcyk7CisrICBwLT5jb3VudGVyc1twb3NTdGF0ZV0gPSBwLT50YWJsZVNpemU7CisrfQorKworK3N0YXRpYyB2b2lkIExlblByaWNlRW5jX1VwZGF0ZVRhYmxlcyhDTGVuUHJpY2VFbmMgKnAsIFVJbnQzMiBudW1Qb3NTdGF0ZXMsIFVJbnQzMiAqUHJvYlByaWNlcykKKyt7CisrICBVSW50MzIgcG9zU3RhdGU7CisrICBmb3IgKHBvc1N0YXRlID0gMDsgcG9zU3RhdGUgPCBudW1Qb3NTdGF0ZXM7IHBvc1N0YXRlKyspCisrICAgIExlblByaWNlRW5jX1VwZGF0ZVRhYmxlKHAsIHBvc1N0YXRlLCBQcm9iUHJpY2VzKTsKKyt9CisrCisrc3RhdGljIHZvaWQgTGVuRW5jX0VuY29kZTIoQ0xlblByaWNlRW5jICpwLCBDUmFuZ2VFbmMgKnJjLCBVSW50MzIgc3ltYm9sLCBVSW50MzIgcG9zU3RhdGUsIEJvb2wgdXBkYXRlUHJpY2UsIFVJbnQzMiAqUHJvYlByaWNlcykKKyt7CisrICBMZW5FbmNfRW5jb2RlKCZwLT5wLCByYywgc3ltYm9sLCBwb3NTdGF0ZSk7CisrICBpZiAodXBkYXRlUHJpY2UpCisrICAgIGlmICgtLXAtPmNvdW50ZXJzW3Bvc1N0YXRlXSA9PSAwKQorKyAgICAgIExlblByaWNlRW5jX1VwZGF0ZVRhYmxlKHAsIHBvc1N0YXRlLCBQcm9iUHJpY2VzKTsKKyt9CisrCisrCisrCisrCisrc3RhdGljIHZvaWQgTW92ZVBvcyhDTHptYUVuYyAqcCwgVUludDMyIG51bSkKKyt7CisrICAjaWZkZWYgU0hPV19TVEFUCisrICB0dHQgKz0gbnVtOworKyAgcHJpbnRmKCJcbiBNb3ZlUG9zICVkIiwgbnVtKTsKKysgICNlbmRpZgorKyAgaWYgKG51bSAhPSAwKQorKyAgeworKyAgICBwLT5hZGRpdGlvbmFsT2Zmc2V0ICs9IG51bTsKKysgICAgcC0+bWF0Y2hGaW5kZXIuU2tpcChwLT5tYXRjaEZpbmRlck9iaiwgbnVtKTsKKysgIH0KKyt9CisrCisrc3RhdGljIFVJbnQzMiBSZWFkTWF0Y2hEaXN0YW5jZXMoQ0x6bWFFbmMgKnAsIFVJbnQzMiAqbnVtRGlzdGFuY2VQYWlyc1JlcykKKyt7CisrICBVSW50MzIgbGVuUmVzID0gMCwgbnVtUGFpcnM7CisrICBwLT5udW1BdmFpbCA9IHAtPm1hdGNoRmluZGVyLkdldE51bUF2YWlsYWJsZUJ5dGVzKHAtPm1hdGNoRmluZGVyT2JqKTsKKysgIG51bVBhaXJzID0gcC0+bWF0Y2hGaW5kZXIuR2V0TWF0Y2hlcyhwLT5tYXRjaEZpbmRlck9iaiwgcC0+bWF0Y2hlcyk7CisrICAjaWZkZWYgU0hPV19TVEFUCisrICBwcmludGYoIlxuIGkgPSAlZCBudW1QYWlycyA9ICVkICAgICIsIHR0dCwgbnVtUGFpcnMgLyAyKTsKKysgIHR0dCsrOworKyAgeworKyAgICBVSW50MzIgaTsKKysgICAgZm9yIChpID0gMDsgaSA8IG51bVBhaXJzOyBpICs9IDIpCisrICAgICAgcHJpbnRmKCIlMmQgJTZkICAgfCAiLCBwLT5tYXRjaGVzW2ldLCBwLT5tYXRjaGVzW2kgKyAxXSk7CisrICB9CisrICAjZW5kaWYKKysgIGlmIChudW1QYWlycyA+IDApCisrICB7CisrICAgIGxlblJlcyA9IHAtPm1hdGNoZXNbbnVtUGFpcnMgLSAyXTsKKysgICAgaWYgKGxlblJlcyA9PSBwLT5udW1GYXN0Qnl0ZXMpCisrICAgIHsKKysgICAgICBjb25zdCBCeXRlICpwYnkgPSBwLT5tYXRjaEZpbmRlci5HZXRQb2ludGVyVG9DdXJyZW50UG9zKHAtPm1hdGNoRmluZGVyT2JqKSAtIDE7CisrICAgICAgVUludDMyIGRpc3RhbmNlID0gcC0+bWF0Y2hlc1tudW1QYWlycyAtIDFdICsgMTsKKysgICAgICBVSW50MzIgbnVtQXZhaWwgPSBwLT5udW1BdmFpbDsKKysgICAgICBpZiAobnVtQXZhaWwgPiBMWk1BX01BVENIX0xFTl9NQVgpCisrICAgICAgICBudW1BdmFpbCA9IExaTUFfTUFUQ0hfTEVOX01BWDsKKysgICAgICB7CisrICAgICAgICBjb25zdCBCeXRlICpwYnkyID0gcGJ5IC0gZGlzdGFuY2U7CisrICAgICAgICBmb3IgKDsgbGVuUmVzIDwgbnVtQXZhaWwgJiYgcGJ5W2xlblJlc10gPT0gcGJ5MltsZW5SZXNdOyBsZW5SZXMrKyk7CisrICAgICAgfQorKyAgICB9CisrICB9CisrICBwLT5hZGRpdGlvbmFsT2Zmc2V0Kys7CisrICAqbnVtRGlzdGFuY2VQYWlyc1JlcyA9IG51bVBhaXJzOworKyAgcmV0dXJuIGxlblJlczsKKyt9CisrCisrCisrI2RlZmluZSBNYWtlQXNDaGFyKHApIChwKS0+YmFja1ByZXYgPSAoVUludDMyKSgtMSk7IChwKS0+cHJldjFJc0NoYXIgPSBGYWxzZTsKKysjZGVmaW5lIE1ha2VBc1Nob3J0UmVwKHApIChwKS0+YmFja1ByZXYgPSAwOyAocCktPnByZXYxSXNDaGFyID0gRmFsc2U7CisrI2RlZmluZSBJc1Nob3J0UmVwKHApICgocCktPmJhY2tQcmV2ID09IDApCisrCisrc3RhdGljIFVJbnQzMiBHZXRSZXBMZW4xUHJpY2UoQ0x6bWFFbmMgKnAsIFVJbnQzMiBzdGF0ZSwgVUludDMyIHBvc1N0YXRlKQorK3sKKysgIHJldHVybgorKyAgICBHRVRfUFJJQ0VfMChwLT5pc1JlcEcwW3N0YXRlXSkgKworKyAgICBHRVRfUFJJQ0VfMChwLT5pc1JlcDBMb25nW3N0YXRlXVtwb3NTdGF0ZV0pOworK30KKysKKytzdGF0aWMgVUludDMyIEdldFB1cmVSZXBQcmljZShDTHptYUVuYyAqcCwgVUludDMyIHJlcEluZGV4LCBVSW50MzIgc3RhdGUsIFVJbnQzMiBwb3NTdGF0ZSkKKyt7CisrICBVSW50MzIgcHJpY2U7CisrICBpZiAocmVwSW5kZXggPT0gMCkKKysgIHsKKysgICAgcHJpY2UgPSBHRVRfUFJJQ0VfMChwLT5pc1JlcEcwW3N0YXRlXSk7CisrICAgIHByaWNlICs9IEdFVF9QUklDRV8xKHAtPmlzUmVwMExvbmdbc3RhdGVdW3Bvc1N0YXRlXSk7CisrICB9CisrICBlbHNlCisrICB7CisrICAgIHByaWNlID0gR0VUX1BSSUNFXzEocC0+aXNSZXBHMFtzdGF0ZV0pOworKyAgICBpZiAocmVwSW5kZXggPT0gMSkKKysgICAgICBwcmljZSArPSBHRVRfUFJJQ0VfMChwLT5pc1JlcEcxW3N0YXRlXSk7CisrICAgIGVsc2UKKysgICAgeworKyAgICAgIHByaWNlICs9IEdFVF9QUklDRV8xKHAtPmlzUmVwRzFbc3RhdGVdKTsKKysgICAgICBwcmljZSArPSBHRVRfUFJJQ0UocC0+aXNSZXBHMltzdGF0ZV0sIHJlcEluZGV4IC0gMik7CisrICAgIH0KKysgIH0KKysgIHJldHVybiBwcmljZTsKKyt9CisrCisrc3RhdGljIFVJbnQzMiBHZXRSZXBQcmljZShDTHptYUVuYyAqcCwgVUludDMyIHJlcEluZGV4LCBVSW50MzIgbGVuLCBVSW50MzIgc3RhdGUsIFVJbnQzMiBwb3NTdGF0ZSkKKyt7CisrICByZXR1cm4gcC0+cmVwTGVuRW5jLnByaWNlc1twb3NTdGF0ZV1bbGVuIC0gTFpNQV9NQVRDSF9MRU5fTUlOXSArCisrICAgIEdldFB1cmVSZXBQcmljZShwLCByZXBJbmRleCwgc3RhdGUsIHBvc1N0YXRlKTsKKyt9CisrCisrc3RhdGljIFVJbnQzMiBCYWNrd2FyZChDTHptYUVuYyAqcCwgVUludDMyICpiYWNrUmVzLCBVSW50MzIgY3VyKQorK3sKKysgIFVJbnQzMiBwb3NNZW0gPSBwLT5vcHRbY3VyXS5wb3NQcmV2OworKyAgVUludDMyIGJhY2tNZW0gPSBwLT5vcHRbY3VyXS5iYWNrUHJldjsKKysgIHAtPm9wdGltdW1FbmRJbmRleCA9IGN1cjsKKysgIGRvCisrICB7CisrICAgIGlmIChwLT5vcHRbY3VyXS5wcmV2MUlzQ2hhcikKKysgICAgeworKyAgICAgIE1ha2VBc0NoYXIoJnAtPm9wdFtwb3NNZW1dKQorKyAgICAgIHAtPm9wdFtwb3NNZW1dLnBvc1ByZXYgPSBwb3NNZW0gLSAxOworKyAgICAgIGlmIChwLT5vcHRbY3VyXS5wcmV2MikKKysgICAgICB7CisrICAgICAgICBwLT5vcHRbcG9zTWVtIC0gMV0ucHJldjFJc0NoYXIgPSBGYWxzZTsKKysgICAgICAgIHAtPm9wdFtwb3NNZW0gLSAxXS5wb3NQcmV2ID0gcC0+b3B0W2N1cl0ucG9zUHJldjI7CisrICAgICAgICBwLT5vcHRbcG9zTWVtIC0gMV0uYmFja1ByZXYgPSBwLT5vcHRbY3VyXS5iYWNrUHJldjI7CisrICAgICAgfQorKyAgICB9CisrICAgIHsKKysgICAgICBVSW50MzIgcG9zUHJldiA9IHBvc01lbTsKKysgICAgICBVSW50MzIgYmFja0N1ciA9IGJhY2tNZW07CisrCisrICAgICAgYmFja01lbSA9IHAtPm9wdFtwb3NQcmV2XS5iYWNrUHJldjsKKysgICAgICBwb3NNZW0gPSBwLT5vcHRbcG9zUHJldl0ucG9zUHJldjsKKysKKysgICAgICBwLT5vcHRbcG9zUHJldl0uYmFja1ByZXYgPSBiYWNrQ3VyOworKyAgICAgIHAtPm9wdFtwb3NQcmV2XS5wb3NQcmV2ID0gY3VyOworKyAgICAgIGN1ciA9IHBvc1ByZXY7CisrICAgIH0KKysgIH0KKysgIHdoaWxlIChjdXIgIT0gMCk7CisrICAqYmFja1JlcyA9IHAtPm9wdFswXS5iYWNrUHJldjsKKysgIHAtPm9wdGltdW1DdXJyZW50SW5kZXggID0gcC0+b3B0WzBdLnBvc1ByZXY7CisrICByZXR1cm4gcC0+b3B0aW11bUN1cnJlbnRJbmRleDsKKyt9CisrCisrI2RlZmluZSBMSVRfUFJPQlMocG9zLCBwcmV2Qnl0ZSkgKHAtPmxpdFByb2JzICsgKCgoKHBvcykgJiBwLT5scE1hc2spIDw8IHAtPmxjKSArICgocHJldkJ5dGUpID4+ICg4IC0gcC0+bGMpKSkgKiAweDMwMCkKKysKKytzdGF0aWMgVUludDMyIEdldE9wdGltdW0oQ0x6bWFFbmMgKnAsIFVJbnQzMiBwb3NpdGlvbiwgVUludDMyICpiYWNrUmVzKQorK3sKKysgIFVJbnQzMiBudW1BdmFpbCwgbWFpbkxlbiwgbnVtUGFpcnMsIHJlcE1heEluZGV4LCBpLCBwb3NTdGF0ZSwgbGVuRW5kLCBsZW4sIGN1cjsKKysgIFVJbnQzMiBtYXRjaFByaWNlLCByZXBNYXRjaFByaWNlLCBub3JtYWxNYXRjaFByaWNlOworKyAgVUludDMyIHJlcHNbTFpNQV9OVU1fUkVQU10sIHJlcExlbnNbTFpNQV9OVU1fUkVQU107CisrICBVSW50MzIgKm1hdGNoZXM7CisrICBjb25zdCBCeXRlICpkYXRhOworKyAgQnl0ZSBjdXJCeXRlLCBtYXRjaEJ5dGU7CisrICBpZiAocC0+b3B0aW11bUVuZEluZGV4ICE9IHAtPm9wdGltdW1DdXJyZW50SW5kZXgpCisrICB7CisrICAgIGNvbnN0IENPcHRpbWFsICpvcHQgPSAmcC0+b3B0W3AtPm9wdGltdW1DdXJyZW50SW5kZXhdOworKyAgICBVSW50MzIgbGVuUmVzID0gb3B0LT5wb3NQcmV2IC0gcC0+b3B0aW11bUN1cnJlbnRJbmRleDsKKysgICAgKmJhY2tSZXMgPSBvcHQtPmJhY2tQcmV2OworKyAgICBwLT5vcHRpbXVtQ3VycmVudEluZGV4ID0gb3B0LT5wb3NQcmV2OworKyAgICByZXR1cm4gbGVuUmVzOworKyAgfQorKyAgcC0+b3B0aW11bUN1cnJlbnRJbmRleCA9IHAtPm9wdGltdW1FbmRJbmRleCA9IDA7CisrCisrICBpZiAocC0+YWRkaXRpb25hbE9mZnNldCA9PSAwKQorKyAgICBtYWluTGVuID0gUmVhZE1hdGNoRGlzdGFuY2VzKHAsICZudW1QYWlycyk7CisrICBlbHNlCisrICB7CisrICAgIG1haW5MZW4gPSBwLT5sb25nZXN0TWF0Y2hMZW5ndGg7CisrICAgIG51bVBhaXJzID0gcC0+bnVtUGFpcnM7CisrICB9CisrCisrICBudW1BdmFpbCA9IHAtPm51bUF2YWlsOworKyAgaWYgKG51bUF2YWlsIDwgMikKKysgIHsKKysgICAgKmJhY2tSZXMgPSAoVUludDMyKSgtMSk7CisrICAgIHJldHVybiAxOworKyAgfQorKyAgaWYgKG51bUF2YWlsID4gTFpNQV9NQVRDSF9MRU5fTUFYKQorKyAgICBudW1BdmFpbCA9IExaTUFfTUFUQ0hfTEVOX01BWDsKKysKKysgIGRhdGEgPSBwLT5tYXRjaEZpbmRlci5HZXRQb2ludGVyVG9DdXJyZW50UG9zKHAtPm1hdGNoRmluZGVyT2JqKSAtIDE7CisrICByZXBNYXhJbmRleCA9IDA7CisrICBmb3IgKGkgPSAwOyBpIDwgTFpNQV9OVU1fUkVQUzsgaSsrKQorKyAgeworKyAgICBVSW50MzIgbGVuVGVzdDsKKysgICAgY29uc3QgQnl0ZSAqZGF0YTI7CisrICAgIHJlcHNbaV0gPSBwLT5yZXBzW2ldOworKyAgICBkYXRhMiA9IGRhdGEgLSAocmVwc1tpXSArIDEpOworKyAgICBpZiAoZGF0YVswXSAhPSBkYXRhMlswXSB8fCBkYXRhWzFdICE9IGRhdGEyWzFdKQorKyAgICB7CisrICAgICAgcmVwTGVuc1tpXSA9IDA7CisrICAgICAgY29udGludWU7CisrICAgIH0KKysgICAgZm9yIChsZW5UZXN0ID0gMjsgbGVuVGVzdCA8IG51bUF2YWlsICYmIGRhdGFbbGVuVGVzdF0gPT0gZGF0YTJbbGVuVGVzdF07IGxlblRlc3QrKyk7CisrICAgIHJlcExlbnNbaV0gPSBsZW5UZXN0OworKyAgICBpZiAobGVuVGVzdCA+IHJlcExlbnNbcmVwTWF4SW5kZXhdKQorKyAgICAgIHJlcE1heEluZGV4ID0gaTsKKysgIH0KKysgIGlmIChyZXBMZW5zW3JlcE1heEluZGV4XSA+PSBwLT5udW1GYXN0Qnl0ZXMpCisrICB7CisrICAgIFVJbnQzMiBsZW5SZXM7CisrICAgICpiYWNrUmVzID0gcmVwTWF4SW5kZXg7CisrICAgIGxlblJlcyA9IHJlcExlbnNbcmVwTWF4SW5kZXhdOworKyAgICBNb3ZlUG9zKHAsIGxlblJlcyAtIDEpOworKyAgICByZXR1cm4gbGVuUmVzOworKyAgfQorKworKyAgbWF0Y2hlcyA9IHAtPm1hdGNoZXM7CisrICBpZiAobWFpbkxlbiA+PSBwLT5udW1GYXN0Qnl0ZXMpCisrICB7CisrICAgICpiYWNrUmVzID0gbWF0Y2hlc1tudW1QYWlycyAtIDFdICsgTFpNQV9OVU1fUkVQUzsKKysgICAgTW92ZVBvcyhwLCBtYWluTGVuIC0gMSk7CisrICAgIHJldHVybiBtYWluTGVuOworKyAgfQorKyAgY3VyQnl0ZSA9ICpkYXRhOworKyAgbWF0Y2hCeXRlID0gKihkYXRhIC0gKHJlcHNbMF0gKyAxKSk7CisrCisrICBpZiAobWFpbkxlbiA8IDIgJiYgY3VyQnl0ZSAhPSBtYXRjaEJ5dGUgJiYgcmVwTGVuc1tyZXBNYXhJbmRleF0gPCAyKQorKyAgeworKyAgICAqYmFja1JlcyA9IChVSW50MzIpLTE7CisrICAgIHJldHVybiAxOworKyAgfQorKworKyAgcC0+b3B0WzBdLnN0YXRlID0gKENTdGF0ZSlwLT5zdGF0ZTsKKysKKysgIHBvc1N0YXRlID0gKHBvc2l0aW9uICYgcC0+cGJNYXNrKTsKKysKKysgIHsKKysgICAgY29uc3QgQ0x6bWFQcm9iICpwcm9icyA9IExJVF9QUk9CUyhwb3NpdGlvbiwgKihkYXRhIC0gMSkpOworKyAgICBwLT5vcHRbMV0ucHJpY2UgPSBHRVRfUFJJQ0VfMChwLT5pc01hdGNoW3AtPnN0YXRlXVtwb3NTdGF0ZV0pICsKKysgICAgICAgICghSXNDaGFyU3RhdGUocC0+c3RhdGUpID8KKysgICAgICAgICAgTGl0RW5jX0dldFByaWNlTWF0Y2hlZChwcm9icywgY3VyQnl0ZSwgbWF0Y2hCeXRlLCBwLT5Qcm9iUHJpY2VzKSA6CisrICAgICAgICAgIExpdEVuY19HZXRQcmljZShwcm9icywgY3VyQnl0ZSwgcC0+UHJvYlByaWNlcykpOworKyAgfQorKworKyAgTWFrZUFzQ2hhcigmcC0+b3B0WzFdKTsKKysKKysgIG1hdGNoUHJpY2UgPSBHRVRfUFJJQ0VfMShwLT5pc01hdGNoW3AtPnN0YXRlXVtwb3NTdGF0ZV0pOworKyAgcmVwTWF0Y2hQcmljZSA9IG1hdGNoUHJpY2UgKyBHRVRfUFJJQ0VfMShwLT5pc1JlcFtwLT5zdGF0ZV0pOworKworKyAgaWYgKG1hdGNoQnl0ZSA9PSBjdXJCeXRlKQorKyAgeworKyAgICBVSW50MzIgc2hvcnRSZXBQcmljZSA9IHJlcE1hdGNoUHJpY2UgKyBHZXRSZXBMZW4xUHJpY2UocCwgcC0+c3RhdGUsIHBvc1N0YXRlKTsKKysgICAgaWYgKHNob3J0UmVwUHJpY2UgPCBwLT5vcHRbMV0ucHJpY2UpCisrICAgIHsKKysgICAgICBwLT5vcHRbMV0ucHJpY2UgPSBzaG9ydFJlcFByaWNlOworKyAgICAgIE1ha2VBc1Nob3J0UmVwKCZwLT5vcHRbMV0pOworKyAgICB9CisrICB9CisrICBsZW5FbmQgPSAoKG1haW5MZW4gPj0gcmVwTGVuc1tyZXBNYXhJbmRleF0pID8gbWFpbkxlbiA6IHJlcExlbnNbcmVwTWF4SW5kZXhdKTsKKysKKysgIGlmIChsZW5FbmQgPCAyKQorKyAgeworKyAgICAqYmFja1JlcyA9IHAtPm9wdFsxXS5iYWNrUHJldjsKKysgICAgcmV0dXJuIDE7CisrICB9CisrCisrICBwLT5vcHRbMV0ucG9zUHJldiA9IDA7CisrICBmb3IgKGkgPSAwOyBpIDwgTFpNQV9OVU1fUkVQUzsgaSsrKQorKyAgICBwLT5vcHRbMF0uYmFja3NbaV0gPSByZXBzW2ldOworKworKyAgbGVuID0gbGVuRW5kOworKyAgZG8KKysgICAgcC0+b3B0W2xlbi0tXS5wcmljZSA9IGtJbmZpbml0eVByaWNlOworKyAgd2hpbGUgKGxlbiA+PSAyKTsKKysKKysgIGZvciAoaSA9IDA7IGkgPCBMWk1BX05VTV9SRVBTOyBpKyspCisrICB7CisrICAgIFVJbnQzMiByZXBMZW4gPSByZXBMZW5zW2ldOworKyAgICBVSW50MzIgcHJpY2U7CisrICAgIGlmIChyZXBMZW4gPCAyKQorKyAgICAgIGNvbnRpbnVlOworKyAgICBwcmljZSA9IHJlcE1hdGNoUHJpY2UgKyBHZXRQdXJlUmVwUHJpY2UocCwgaSwgcC0+c3RhdGUsIHBvc1N0YXRlKTsKKysgICAgZG8KKysgICAgeworKyAgICAgIFVJbnQzMiBjdXJBbmRMZW5QcmljZSA9IHByaWNlICsgcC0+cmVwTGVuRW5jLnByaWNlc1twb3NTdGF0ZV1bcmVwTGVuIC0gMl07CisrICAgICAgQ09wdGltYWwgKm9wdCA9ICZwLT5vcHRbcmVwTGVuXTsKKysgICAgICBpZiAoY3VyQW5kTGVuUHJpY2UgPCBvcHQtPnByaWNlKQorKyAgICAgIHsKKysgICAgICAgIG9wdC0+cHJpY2UgPSBjdXJBbmRMZW5QcmljZTsKKysgICAgICAgIG9wdC0+cG9zUHJldiA9IDA7CisrICAgICAgICBvcHQtPmJhY2tQcmV2ID0gaTsKKysgICAgICAgIG9wdC0+cHJldjFJc0NoYXIgPSBGYWxzZTsKKysgICAgICB9CisrICAgIH0KKysgICAgd2hpbGUgKC0tcmVwTGVuID49IDIpOworKyAgfQorKworKyAgbm9ybWFsTWF0Y2hQcmljZSA9IG1hdGNoUHJpY2UgKyBHRVRfUFJJQ0VfMChwLT5pc1JlcFtwLT5zdGF0ZV0pOworKworKyAgbGVuID0gKChyZXBMZW5zWzBdID49IDIpID8gcmVwTGVuc1swXSArIDEgOiAyKTsKKysgIGlmIChsZW4gPD0gbWFpbkxlbikKKysgIHsKKysgICAgVUludDMyIG9mZnMgPSAwOworKyAgICB3aGlsZSAobGVuID4gbWF0Y2hlc1tvZmZzXSkKKysgICAgICBvZmZzICs9IDI7CisrICAgIGZvciAoOyA7IGxlbisrKQorKyAgICB7CisrICAgICAgQ09wdGltYWwgKm9wdDsKKysgICAgICBVSW50MzIgZGlzdGFuY2UgPSBtYXRjaGVzW29mZnMgKyAxXTsKKysKKysgICAgICBVSW50MzIgY3VyQW5kTGVuUHJpY2UgPSBub3JtYWxNYXRjaFByaWNlICsgcC0+bGVuRW5jLnByaWNlc1twb3NTdGF0ZV1bbGVuIC0gTFpNQV9NQVRDSF9MRU5fTUlOXTsKKysgICAgICBVSW50MzIgbGVuVG9Qb3NTdGF0ZSA9IEdldExlblRvUG9zU3RhdGUobGVuKTsKKysgICAgICBpZiAoZGlzdGFuY2UgPCBrTnVtRnVsbERpc3RhbmNlcykKKysgICAgICAgIGN1ckFuZExlblByaWNlICs9IHAtPmRpc3RhbmNlc1ByaWNlc1tsZW5Ub1Bvc1N0YXRlXVtkaXN0YW5jZV07CisrICAgICAgZWxzZQorKyAgICAgIHsKKysgICAgICAgIFVJbnQzMiBzbG90OworKyAgICAgICAgR2V0UG9zU2xvdDIoZGlzdGFuY2UsIHNsb3QpOworKyAgICAgICAgY3VyQW5kTGVuUHJpY2UgKz0gcC0+YWxpZ25QcmljZXNbZGlzdGFuY2UgJiBrQWxpZ25NYXNrXSArIHAtPnBvc1Nsb3RQcmljZXNbbGVuVG9Qb3NTdGF0ZV1bc2xvdF07CisrICAgICAgfQorKyAgICAgIG9wdCA9ICZwLT5vcHRbbGVuXTsKKysgICAgICBpZiAoY3VyQW5kTGVuUHJpY2UgPCBvcHQtPnByaWNlKQorKyAgICAgIHsKKysgICAgICAgIG9wdC0+cHJpY2UgPSBjdXJBbmRMZW5QcmljZTsKKysgICAgICAgIG9wdC0+cG9zUHJldiA9IDA7CisrICAgICAgICBvcHQtPmJhY2tQcmV2ID0gZGlzdGFuY2UgKyBMWk1BX05VTV9SRVBTOworKyAgICAgICAgb3B0LT5wcmV2MUlzQ2hhciA9IEZhbHNlOworKyAgICAgIH0KKysgICAgICBpZiAobGVuID09IG1hdGNoZXNbb2Zmc10pCisrICAgICAgeworKyAgICAgICAgb2ZmcyArPSAyOworKyAgICAgICAgaWYgKG9mZnMgPT0gbnVtUGFpcnMpCisrICAgICAgICAgIGJyZWFrOworKyAgICAgIH0KKysgICAgfQorKyAgfQorKworKyAgY3VyID0gMDsKKysKKysgICAgI2lmZGVmIFNIT1dfU1RBVDIKKysgICAgaWYgKHBvc2l0aW9uID49IDApCisrICAgIHsKKysgICAgICB1bnNpZ25lZCBpOworKyAgICAgIHByaW50ZigiXG4gcG9zID0gJTRYIiwgcG9zaXRpb24pOworKyAgICAgIGZvciAoaSA9IGN1cjsgaSA8PSBsZW5FbmQ7IGkrKykKKysgICAgICBwcmludGYoIlxucHJpY2VbJTRYXSA9ICVkIiwgcG9zaXRpb24gLSBjdXIgKyBpLCBwLT5vcHRbaV0ucHJpY2UpOworKyAgICB9CisrICAgICNlbmRpZgorKworKyAgZm9yICg7OykKKysgIHsKKysgICAgVUludDMyIG51bUF2YWlsRnVsbCwgbmV3TGVuLCBudW1QYWlycywgcG9zUHJldiwgc3RhdGUsIHBvc1N0YXRlLCBzdGFydExlbjsKKysgICAgVUludDMyIGN1clByaWNlLCBjdXJBbmQxUHJpY2UsIG1hdGNoUHJpY2UsIHJlcE1hdGNoUHJpY2U7CisrICAgIEJvb2wgbmV4dElzQ2hhcjsKKysgICAgQnl0ZSBjdXJCeXRlLCBtYXRjaEJ5dGU7CisrICAgIGNvbnN0IEJ5dGUgKmRhdGE7CisrICAgIENPcHRpbWFsICpjdXJPcHQ7CisrICAgIENPcHRpbWFsICpuZXh0T3B0OworKworKyAgICBjdXIrKzsKKysgICAgaWYgKGN1ciA9PSBsZW5FbmQpCisrICAgICAgcmV0dXJuIEJhY2t3YXJkKHAsIGJhY2tSZXMsIGN1cik7CisrCisrICAgIG5ld0xlbiA9IFJlYWRNYXRjaERpc3RhbmNlcyhwLCAmbnVtUGFpcnMpOworKyAgICBpZiAobmV3TGVuID49IHAtPm51bUZhc3RCeXRlcykKKysgICAgeworKyAgICAgIHAtPm51bVBhaXJzID0gbnVtUGFpcnM7CisrICAgICAgcC0+bG9uZ2VzdE1hdGNoTGVuZ3RoID0gbmV3TGVuOworKyAgICAgIHJldHVybiBCYWNrd2FyZChwLCBiYWNrUmVzLCBjdXIpOworKyAgICB9CisrICAgIHBvc2l0aW9uKys7CisrICAgIGN1ck9wdCA9ICZwLT5vcHRbY3VyXTsKKysgICAgcG9zUHJldiA9IGN1ck9wdC0+cG9zUHJldjsKKysgICAgaWYgKGN1ck9wdC0+cHJldjFJc0NoYXIpCisrICAgIHsKKysgICAgICBwb3NQcmV2LS07CisrICAgICAgaWYgKGN1ck9wdC0+cHJldjIpCisrICAgICAgeworKyAgICAgICAgc3RhdGUgPSBwLT5vcHRbY3VyT3B0LT5wb3NQcmV2Ml0uc3RhdGU7CisrICAgICAgICBpZiAoY3VyT3B0LT5iYWNrUHJldjIgPCBMWk1BX05VTV9SRVBTKQorKyAgICAgICAgICBzdGF0ZSA9IGtSZXBOZXh0U3RhdGVzW3N0YXRlXTsKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgc3RhdGUgPSBrTWF0Y2hOZXh0U3RhdGVzW3N0YXRlXTsKKysgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICAgc3RhdGUgPSBwLT5vcHRbcG9zUHJldl0uc3RhdGU7CisrICAgICAgc3RhdGUgPSBrTGl0ZXJhbE5leHRTdGF0ZXNbc3RhdGVdOworKyAgICB9CisrICAgIGVsc2UKKysgICAgICBzdGF0ZSA9IHAtPm9wdFtwb3NQcmV2XS5zdGF0ZTsKKysgICAgaWYgKHBvc1ByZXYgPT0gY3VyIC0gMSkKKysgICAgeworKyAgICAgIGlmIChJc1Nob3J0UmVwKGN1ck9wdCkpCisrICAgICAgICBzdGF0ZSA9IGtTaG9ydFJlcE5leHRTdGF0ZXNbc3RhdGVdOworKyAgICAgIGVsc2UKKysgICAgICAgIHN0YXRlID0ga0xpdGVyYWxOZXh0U3RhdGVzW3N0YXRlXTsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICBVSW50MzIgcG9zOworKyAgICAgIGNvbnN0IENPcHRpbWFsICpwcmV2T3B0OworKyAgICAgIGlmIChjdXJPcHQtPnByZXYxSXNDaGFyICYmIGN1ck9wdC0+cHJldjIpCisrICAgICAgeworKyAgICAgICAgcG9zUHJldiA9IGN1ck9wdC0+cG9zUHJldjI7CisrICAgICAgICBwb3MgPSBjdXJPcHQtPmJhY2tQcmV2MjsKKysgICAgICAgIHN0YXRlID0ga1JlcE5leHRTdGF0ZXNbc3RhdGVdOworKyAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgeworKyAgICAgICAgcG9zID0gY3VyT3B0LT5iYWNrUHJldjsKKysgICAgICAgIGlmIChwb3MgPCBMWk1BX05VTV9SRVBTKQorKyAgICAgICAgICBzdGF0ZSA9IGtSZXBOZXh0U3RhdGVzW3N0YXRlXTsKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgc3RhdGUgPSBrTWF0Y2hOZXh0U3RhdGVzW3N0YXRlXTsKKysgICAgICB9CisrICAgICAgcHJldk9wdCA9ICZwLT5vcHRbcG9zUHJldl07CisrICAgICAgaWYgKHBvcyA8IExaTUFfTlVNX1JFUFMpCisrICAgICAgeworKyAgICAgICAgVUludDMyIGk7CisrICAgICAgICByZXBzWzBdID0gcHJldk9wdC0+YmFja3NbcG9zXTsKKysgICAgICAgIGZvciAoaSA9IDE7IGkgPD0gcG9zOyBpKyspCisrICAgICAgICAgIHJlcHNbaV0gPSBwcmV2T3B0LT5iYWNrc1tpIC0gMV07CisrICAgICAgICBmb3IgKDsgaSA8IExaTUFfTlVNX1JFUFM7IGkrKykKKysgICAgICAgICAgcmVwc1tpXSA9IHByZXZPcHQtPmJhY2tzW2ldOworKyAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgeworKyAgICAgICAgVUludDMyIGk7CisrICAgICAgICByZXBzWzBdID0gKHBvcyAtIExaTUFfTlVNX1JFUFMpOworKyAgICAgICAgZm9yIChpID0gMTsgaSA8IExaTUFfTlVNX1JFUFM7IGkrKykKKysgICAgICAgICAgcmVwc1tpXSA9IHByZXZPcHQtPmJhY2tzW2kgLSAxXTsKKysgICAgICB9CisrICAgIH0KKysgICAgY3VyT3B0LT5zdGF0ZSA9IChDU3RhdGUpc3RhdGU7CisrCisrICAgIGN1ck9wdC0+YmFja3NbMF0gPSByZXBzWzBdOworKyAgICBjdXJPcHQtPmJhY2tzWzFdID0gcmVwc1sxXTsKKysgICAgY3VyT3B0LT5iYWNrc1syXSA9IHJlcHNbMl07CisrICAgIGN1ck9wdC0+YmFja3NbM10gPSByZXBzWzNdOworKworKyAgICBjdXJQcmljZSA9IGN1ck9wdC0+cHJpY2U7CisrICAgIG5leHRJc0NoYXIgPSBGYWxzZTsKKysgICAgZGF0YSA9IHAtPm1hdGNoRmluZGVyLkdldFBvaW50ZXJUb0N1cnJlbnRQb3MocC0+bWF0Y2hGaW5kZXJPYmopIC0gMTsKKysgICAgY3VyQnl0ZSA9ICpkYXRhOworKyAgICBtYXRjaEJ5dGUgPSAqKGRhdGEgLSAocmVwc1swXSArIDEpKTsKKysKKysgICAgcG9zU3RhdGUgPSAocG9zaXRpb24gJiBwLT5wYk1hc2spOworKworKyAgICBjdXJBbmQxUHJpY2UgPSBjdXJQcmljZSArIEdFVF9QUklDRV8wKHAtPmlzTWF0Y2hbc3RhdGVdW3Bvc1N0YXRlXSk7CisrICAgIHsKKysgICAgICBjb25zdCBDTHptYVByb2IgKnByb2JzID0gTElUX1BST0JTKHBvc2l0aW9uLCAqKGRhdGEgLSAxKSk7CisrICAgICAgY3VyQW5kMVByaWNlICs9CisrICAgICAgICAoIUlzQ2hhclN0YXRlKHN0YXRlKSA/CisrICAgICAgICAgIExpdEVuY19HZXRQcmljZU1hdGNoZWQocHJvYnMsIGN1ckJ5dGUsIG1hdGNoQnl0ZSwgcC0+UHJvYlByaWNlcykgOgorKyAgICAgICAgICBMaXRFbmNfR2V0UHJpY2UocHJvYnMsIGN1ckJ5dGUsIHAtPlByb2JQcmljZXMpKTsKKysgICAgfQorKworKyAgICBuZXh0T3B0ID0gJnAtPm9wdFtjdXIgKyAxXTsKKysKKysgICAgaWYgKGN1ckFuZDFQcmljZSA8IG5leHRPcHQtPnByaWNlKQorKyAgICB7CisrICAgICAgbmV4dE9wdC0+cHJpY2UgPSBjdXJBbmQxUHJpY2U7CisrICAgICAgbmV4dE9wdC0+cG9zUHJldiA9IGN1cjsKKysgICAgICBNYWtlQXNDaGFyKG5leHRPcHQpOworKyAgICAgIG5leHRJc0NoYXIgPSBUcnVlOworKyAgICB9CisrCisrICAgIG1hdGNoUHJpY2UgPSBjdXJQcmljZSArIEdFVF9QUklDRV8xKHAtPmlzTWF0Y2hbc3RhdGVdW3Bvc1N0YXRlXSk7CisrICAgIHJlcE1hdGNoUHJpY2UgPSBtYXRjaFByaWNlICsgR0VUX1BSSUNFXzEocC0+aXNSZXBbc3RhdGVdKTsKKysKKysgICAgaWYgKG1hdGNoQnl0ZSA9PSBjdXJCeXRlICYmICEobmV4dE9wdC0+cG9zUHJldiA8IGN1ciAmJiBuZXh0T3B0LT5iYWNrUHJldiA9PSAwKSkKKysgICAgeworKyAgICAgIFVJbnQzMiBzaG9ydFJlcFByaWNlID0gcmVwTWF0Y2hQcmljZSArIEdldFJlcExlbjFQcmljZShwLCBzdGF0ZSwgcG9zU3RhdGUpOworKyAgICAgIGlmIChzaG9ydFJlcFByaWNlIDw9IG5leHRPcHQtPnByaWNlKQorKyAgICAgIHsKKysgICAgICAgIG5leHRPcHQtPnByaWNlID0gc2hvcnRSZXBQcmljZTsKKysgICAgICAgIG5leHRPcHQtPnBvc1ByZXYgPSBjdXI7CisrICAgICAgICBNYWtlQXNTaG9ydFJlcChuZXh0T3B0KTsKKysgICAgICAgIG5leHRJc0NoYXIgPSBUcnVlOworKyAgICAgIH0KKysgICAgfQorKyAgICBudW1BdmFpbEZ1bGwgPSBwLT5udW1BdmFpbDsKKysgICAgeworKyAgICAgIFVJbnQzMiB0ZW1wID0ga051bU9wdHMgLSAxIC0gY3VyOworKyAgICAgIGlmICh0ZW1wIDwgbnVtQXZhaWxGdWxsKQorKyAgICAgICAgbnVtQXZhaWxGdWxsID0gdGVtcDsKKysgICAgfQorKworKyAgICBpZiAobnVtQXZhaWxGdWxsIDwgMikKKysgICAgICBjb250aW51ZTsKKysgICAgbnVtQXZhaWwgPSAobnVtQXZhaWxGdWxsIDw9IHAtPm51bUZhc3RCeXRlcyA/IG51bUF2YWlsRnVsbCA6IHAtPm51bUZhc3RCeXRlcyk7CisrCisrICAgIGlmICghbmV4dElzQ2hhciAmJiBtYXRjaEJ5dGUgIT0gY3VyQnl0ZSkgLyogc3BlZWQgb3B0aW1pemF0aW9uICovCisrICAgIHsKKysgICAgICAvKiB0cnkgTGl0ZXJhbCArIHJlcDAgKi8KKysgICAgICBVSW50MzIgdGVtcDsKKysgICAgICBVSW50MzIgbGVuVGVzdDI7CisrICAgICAgY29uc3QgQnl0ZSAqZGF0YTIgPSBkYXRhIC0gKHJlcHNbMF0gKyAxKTsKKysgICAgICBVSW50MzIgbGltaXQgPSBwLT5udW1GYXN0Qnl0ZXMgKyAxOworKyAgICAgIGlmIChsaW1pdCA+IG51bUF2YWlsRnVsbCkKKysgICAgICAgIGxpbWl0ID0gbnVtQXZhaWxGdWxsOworKworKyAgICAgIGZvciAodGVtcCA9IDE7IHRlbXAgPCBsaW1pdCAmJiBkYXRhW3RlbXBdID09IGRhdGEyW3RlbXBdOyB0ZW1wKyspOworKyAgICAgIGxlblRlc3QyID0gdGVtcCAtIDE7CisrICAgICAgaWYgKGxlblRlc3QyID49IDIpCisrICAgICAgeworKyAgICAgICAgVUludDMyIHN0YXRlMiA9IGtMaXRlcmFsTmV4dFN0YXRlc1tzdGF0ZV07CisrICAgICAgICBVSW50MzIgcG9zU3RhdGVOZXh0ID0gKHBvc2l0aW9uICsgMSkgJiBwLT5wYk1hc2s7CisrICAgICAgICBVSW50MzIgbmV4dFJlcE1hdGNoUHJpY2UgPSBjdXJBbmQxUHJpY2UgKworKyAgICAgICAgICAgIEdFVF9QUklDRV8xKHAtPmlzTWF0Y2hbc3RhdGUyXVtwb3NTdGF0ZU5leHRdKSArCisrICAgICAgICAgICAgR0VUX1BSSUNFXzEocC0+aXNSZXBbc3RhdGUyXSk7CisrICAgICAgICAvKiBmb3IgKDsgbGVuVGVzdDIgPj0gMjsgbGVuVGVzdDItLSkgKi8KKysgICAgICAgIHsKKysgICAgICAgICAgVUludDMyIGN1ckFuZExlblByaWNlOworKyAgICAgICAgICBDT3B0aW1hbCAqb3B0OworKyAgICAgICAgICBVSW50MzIgb2Zmc2V0ID0gY3VyICsgMSArIGxlblRlc3QyOworKyAgICAgICAgICB3aGlsZSAobGVuRW5kIDwgb2Zmc2V0KQorKyAgICAgICAgICAgIHAtPm9wdFsrK2xlbkVuZF0ucHJpY2UgPSBrSW5maW5pdHlQcmljZTsKKysgICAgICAgICAgY3VyQW5kTGVuUHJpY2UgPSBuZXh0UmVwTWF0Y2hQcmljZSArIEdldFJlcFByaWNlKHAsIDAsIGxlblRlc3QyLCBzdGF0ZTIsIHBvc1N0YXRlTmV4dCk7CisrICAgICAgICAgIG9wdCA9ICZwLT5vcHRbb2Zmc2V0XTsKKysgICAgICAgICAgaWYgKGN1ckFuZExlblByaWNlIDwgb3B0LT5wcmljZSkKKysgICAgICAgICAgeworKyAgICAgICAgICAgIG9wdC0+cHJpY2UgPSBjdXJBbmRMZW5QcmljZTsKKysgICAgICAgICAgICBvcHQtPnBvc1ByZXYgPSBjdXIgKyAxOworKyAgICAgICAgICAgIG9wdC0+YmFja1ByZXYgPSAwOworKyAgICAgICAgICAgIG9wdC0+cHJldjFJc0NoYXIgPSBUcnVlOworKyAgICAgICAgICAgIG9wdC0+cHJldjIgPSBGYWxzZTsKKysgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgIH0KKysgICAgfQorKworKyAgICBzdGFydExlbiA9IDI7IC8qIHNwZWVkIG9wdGltaXphdGlvbiAqLworKyAgICB7CisrICAgIFVJbnQzMiByZXBJbmRleDsKKysgICAgZm9yIChyZXBJbmRleCA9IDA7IHJlcEluZGV4IDwgTFpNQV9OVU1fUkVQUzsgcmVwSW5kZXgrKykKKysgICAgeworKyAgICAgIFVJbnQzMiBsZW5UZXN0OworKyAgICAgIFVJbnQzMiBsZW5UZXN0VGVtcDsKKysgICAgICBVSW50MzIgcHJpY2U7CisrICAgICAgY29uc3QgQnl0ZSAqZGF0YTIgPSBkYXRhIC0gKHJlcHNbcmVwSW5kZXhdICsgMSk7CisrICAgICAgaWYgKGRhdGFbMF0gIT0gZGF0YTJbMF0gfHwgZGF0YVsxXSAhPSBkYXRhMlsxXSkKKysgICAgICAgIGNvbnRpbnVlOworKyAgICAgIGZvciAobGVuVGVzdCA9IDI7IGxlblRlc3QgPCBudW1BdmFpbCAmJiBkYXRhW2xlblRlc3RdID09IGRhdGEyW2xlblRlc3RdOyBsZW5UZXN0KyspOworKyAgICAgIHdoaWxlIChsZW5FbmQgPCBjdXIgKyBsZW5UZXN0KQorKyAgICAgICAgcC0+b3B0WysrbGVuRW5kXS5wcmljZSA9IGtJbmZpbml0eVByaWNlOworKyAgICAgIGxlblRlc3RUZW1wID0gbGVuVGVzdDsKKysgICAgICBwcmljZSA9IHJlcE1hdGNoUHJpY2UgKyBHZXRQdXJlUmVwUHJpY2UocCwgcmVwSW5kZXgsIHN0YXRlLCBwb3NTdGF0ZSk7CisrICAgICAgZG8KKysgICAgICB7CisrICAgICAgICBVSW50MzIgY3VyQW5kTGVuUHJpY2UgPSBwcmljZSArIHAtPnJlcExlbkVuYy5wcmljZXNbcG9zU3RhdGVdW2xlblRlc3QgLSAyXTsKKysgICAgICAgIENPcHRpbWFsICpvcHQgPSAmcC0+b3B0W2N1ciArIGxlblRlc3RdOworKyAgICAgICAgaWYgKGN1ckFuZExlblByaWNlIDwgb3B0LT5wcmljZSkKKysgICAgICAgIHsKKysgICAgICAgICAgb3B0LT5wcmljZSA9IGN1ckFuZExlblByaWNlOworKyAgICAgICAgICBvcHQtPnBvc1ByZXYgPSBjdXI7CisrICAgICAgICAgIG9wdC0+YmFja1ByZXYgPSByZXBJbmRleDsKKysgICAgICAgICAgb3B0LT5wcmV2MUlzQ2hhciA9IEZhbHNlOworKyAgICAgICAgfQorKyAgICAgIH0KKysgICAgICB3aGlsZSAoLS1sZW5UZXN0ID49IDIpOworKyAgICAgIGxlblRlc3QgPSBsZW5UZXN0VGVtcDsKKysKKysgICAgICBpZiAocmVwSW5kZXggPT0gMCkKKysgICAgICAgIHN0YXJ0TGVuID0gbGVuVGVzdCArIDE7CisrCisrICAgICAgLyogaWYgKF9tYXhNb2RlKSAqLworKyAgICAgICAgeworKyAgICAgICAgICBVSW50MzIgbGVuVGVzdDIgPSBsZW5UZXN0ICsgMTsKKysgICAgICAgICAgVUludDMyIGxpbWl0ID0gbGVuVGVzdDIgKyBwLT5udW1GYXN0Qnl0ZXM7CisrICAgICAgICAgIFVJbnQzMiBuZXh0UmVwTWF0Y2hQcmljZTsKKysgICAgICAgICAgaWYgKGxpbWl0ID4gbnVtQXZhaWxGdWxsKQorKyAgICAgICAgICAgIGxpbWl0ID0gbnVtQXZhaWxGdWxsOworKyAgICAgICAgICBmb3IgKDsgbGVuVGVzdDIgPCBsaW1pdCAmJiBkYXRhW2xlblRlc3QyXSA9PSBkYXRhMltsZW5UZXN0Ml07IGxlblRlc3QyKyspOworKyAgICAgICAgICBsZW5UZXN0MiAtPSBsZW5UZXN0ICsgMTsKKysgICAgICAgICAgaWYgKGxlblRlc3QyID49IDIpCisrICAgICAgICAgIHsKKysgICAgICAgICAgICBVSW50MzIgc3RhdGUyID0ga1JlcE5leHRTdGF0ZXNbc3RhdGVdOworKyAgICAgICAgICAgIFVJbnQzMiBwb3NTdGF0ZU5leHQgPSAocG9zaXRpb24gKyBsZW5UZXN0KSAmIHAtPnBiTWFzazsKKysgICAgICAgICAgICBVSW50MzIgY3VyQW5kTGVuQ2hhclByaWNlID0KKysgICAgICAgICAgICAgICAgcHJpY2UgKyBwLT5yZXBMZW5FbmMucHJpY2VzW3Bvc1N0YXRlXVtsZW5UZXN0IC0gMl0gKworKyAgICAgICAgICAgICAgICBHRVRfUFJJQ0VfMChwLT5pc01hdGNoW3N0YXRlMl1bcG9zU3RhdGVOZXh0XSkgKworKyAgICAgICAgICAgICAgICBMaXRFbmNfR2V0UHJpY2VNYXRjaGVkKExJVF9QUk9CUyhwb3NpdGlvbiArIGxlblRlc3QsIGRhdGFbbGVuVGVzdCAtIDFdKSwKKysgICAgICAgICAgICAgICAgICAgIGRhdGFbbGVuVGVzdF0sIGRhdGEyW2xlblRlc3RdLCBwLT5Qcm9iUHJpY2VzKTsKKysgICAgICAgICAgICBzdGF0ZTIgPSBrTGl0ZXJhbE5leHRTdGF0ZXNbc3RhdGUyXTsKKysgICAgICAgICAgICBwb3NTdGF0ZU5leHQgPSAocG9zaXRpb24gKyBsZW5UZXN0ICsgMSkgJiBwLT5wYk1hc2s7CisrICAgICAgICAgICAgbmV4dFJlcE1hdGNoUHJpY2UgPSBjdXJBbmRMZW5DaGFyUHJpY2UgKworKyAgICAgICAgICAgICAgICBHRVRfUFJJQ0VfMShwLT5pc01hdGNoW3N0YXRlMl1bcG9zU3RhdGVOZXh0XSkgKworKyAgICAgICAgICAgICAgICBHRVRfUFJJQ0VfMShwLT5pc1JlcFtzdGF0ZTJdKTsKKysKKysgICAgICAgICAgICAvKiBmb3IgKDsgbGVuVGVzdDIgPj0gMjsgbGVuVGVzdDItLSkgKi8KKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBVSW50MzIgY3VyQW5kTGVuUHJpY2U7CisrICAgICAgICAgICAgICBDT3B0aW1hbCAqb3B0OworKyAgICAgICAgICAgICAgVUludDMyIG9mZnNldCA9IGN1ciArIGxlblRlc3QgKyAxICsgbGVuVGVzdDI7CisrICAgICAgICAgICAgICB3aGlsZSAobGVuRW5kIDwgb2Zmc2V0KQorKyAgICAgICAgICAgICAgICBwLT5vcHRbKytsZW5FbmRdLnByaWNlID0ga0luZmluaXR5UHJpY2U7CisrICAgICAgICAgICAgICBjdXJBbmRMZW5QcmljZSA9IG5leHRSZXBNYXRjaFByaWNlICsgR2V0UmVwUHJpY2UocCwgMCwgbGVuVGVzdDIsIHN0YXRlMiwgcG9zU3RhdGVOZXh0KTsKKysgICAgICAgICAgICAgIG9wdCA9ICZwLT5vcHRbb2Zmc2V0XTsKKysgICAgICAgICAgICAgIGlmIChjdXJBbmRMZW5QcmljZSA8IG9wdC0+cHJpY2UpCisrICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIG9wdC0+cHJpY2UgPSBjdXJBbmRMZW5QcmljZTsKKysgICAgICAgICAgICAgICAgb3B0LT5wb3NQcmV2ID0gY3VyICsgbGVuVGVzdCArIDE7CisrICAgICAgICAgICAgICAgIG9wdC0+YmFja1ByZXYgPSAwOworKyAgICAgICAgICAgICAgICBvcHQtPnByZXYxSXNDaGFyID0gVHJ1ZTsKKysgICAgICAgICAgICAgICAgb3B0LT5wcmV2MiA9IFRydWU7CisrICAgICAgICAgICAgICAgIG9wdC0+cG9zUHJldjIgPSBjdXI7CisrICAgICAgICAgICAgICAgIG9wdC0+YmFja1ByZXYyID0gcmVwSW5kZXg7CisrICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKyAgICAgICAgICB9CisrICAgICAgICB9CisrICAgIH0KKysgICAgfQorKyAgICAvKiBmb3IgKFVJbnQzMiBsZW5UZXN0ID0gMjsgbGVuVGVzdCA8PSBuZXdMZW47IGxlblRlc3QrKykgKi8KKysgICAgaWYgKG5ld0xlbiA+IG51bUF2YWlsKQorKyAgICB7CisrICAgICAgbmV3TGVuID0gbnVtQXZhaWw7CisrICAgICAgZm9yIChudW1QYWlycyA9IDA7IG5ld0xlbiA+IG1hdGNoZXNbbnVtUGFpcnNdOyBudW1QYWlycyArPSAyKTsKKysgICAgICBtYXRjaGVzW251bVBhaXJzXSA9IG5ld0xlbjsKKysgICAgICBudW1QYWlycyArPSAyOworKyAgICB9CisrICAgIGlmIChuZXdMZW4gPj0gc3RhcnRMZW4pCisrICAgIHsKKysgICAgICBVSW50MzIgbm9ybWFsTWF0Y2hQcmljZSA9IG1hdGNoUHJpY2UgKyBHRVRfUFJJQ0VfMChwLT5pc1JlcFtzdGF0ZV0pOworKyAgICAgIFVJbnQzMiBvZmZzLCBjdXJCYWNrLCBwb3NTbG90OworKyAgICAgIFVJbnQzMiBsZW5UZXN0OworKyAgICAgIHdoaWxlIChsZW5FbmQgPCBjdXIgKyBuZXdMZW4pCisrICAgICAgICBwLT5vcHRbKytsZW5FbmRdLnByaWNlID0ga0luZmluaXR5UHJpY2U7CisrCisrICAgICAgb2ZmcyA9IDA7CisrICAgICAgd2hpbGUgKHN0YXJ0TGVuID4gbWF0Y2hlc1tvZmZzXSkKKysgICAgICAgIG9mZnMgKz0gMjsKKysgICAgICBjdXJCYWNrID0gbWF0Y2hlc1tvZmZzICsgMV07CisrICAgICAgR2V0UG9zU2xvdDIoY3VyQmFjaywgcG9zU2xvdCk7CisrICAgICAgZm9yIChsZW5UZXN0ID0gLyoyKi8gc3RhcnRMZW47IDsgbGVuVGVzdCsrKQorKyAgICAgIHsKKysgICAgICAgIFVJbnQzMiBjdXJBbmRMZW5QcmljZSA9IG5vcm1hbE1hdGNoUHJpY2UgKyBwLT5sZW5FbmMucHJpY2VzW3Bvc1N0YXRlXVtsZW5UZXN0IC0gTFpNQV9NQVRDSF9MRU5fTUlOXTsKKysgICAgICAgIFVJbnQzMiBsZW5Ub1Bvc1N0YXRlID0gR2V0TGVuVG9Qb3NTdGF0ZShsZW5UZXN0KTsKKysgICAgICAgIENPcHRpbWFsICpvcHQ7CisrICAgICAgICBpZiAoY3VyQmFjayA8IGtOdW1GdWxsRGlzdGFuY2VzKQorKyAgICAgICAgICBjdXJBbmRMZW5QcmljZSArPSBwLT5kaXN0YW5jZXNQcmljZXNbbGVuVG9Qb3NTdGF0ZV1bY3VyQmFja107CisrICAgICAgICBlbHNlCisrICAgICAgICAgIGN1ckFuZExlblByaWNlICs9IHAtPnBvc1Nsb3RQcmljZXNbbGVuVG9Qb3NTdGF0ZV1bcG9zU2xvdF0gKyBwLT5hbGlnblByaWNlc1tjdXJCYWNrICYga0FsaWduTWFza107CisrCisrICAgICAgICBvcHQgPSAmcC0+b3B0W2N1ciArIGxlblRlc3RdOworKyAgICAgICAgaWYgKGN1ckFuZExlblByaWNlIDwgb3B0LT5wcmljZSkKKysgICAgICAgIHsKKysgICAgICAgICAgb3B0LT5wcmljZSA9IGN1ckFuZExlblByaWNlOworKyAgICAgICAgICBvcHQtPnBvc1ByZXYgPSBjdXI7CisrICAgICAgICAgIG9wdC0+YmFja1ByZXYgPSBjdXJCYWNrICsgTFpNQV9OVU1fUkVQUzsKKysgICAgICAgICAgb3B0LT5wcmV2MUlzQ2hhciA9IEZhbHNlOworKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKC8qX21heE1vZGUgJiYgKi9sZW5UZXN0ID09IG1hdGNoZXNbb2Zmc10pCisrICAgICAgICB7CisrICAgICAgICAgIC8qIFRyeSBNYXRjaCArIExpdGVyYWwgKyBSZXAwICovCisrICAgICAgICAgIGNvbnN0IEJ5dGUgKmRhdGEyID0gZGF0YSAtIChjdXJCYWNrICsgMSk7CisrICAgICAgICAgIFVJbnQzMiBsZW5UZXN0MiA9IGxlblRlc3QgKyAxOworKyAgICAgICAgICBVSW50MzIgbGltaXQgPSBsZW5UZXN0MiArIHAtPm51bUZhc3RCeXRlczsKKysgICAgICAgICAgVUludDMyIG5leHRSZXBNYXRjaFByaWNlOworKyAgICAgICAgICBpZiAobGltaXQgPiBudW1BdmFpbEZ1bGwpCisrICAgICAgICAgICAgbGltaXQgPSBudW1BdmFpbEZ1bGw7CisrICAgICAgICAgIGZvciAoOyBsZW5UZXN0MiA8IGxpbWl0ICYmIGRhdGFbbGVuVGVzdDJdID09IGRhdGEyW2xlblRlc3QyXTsgbGVuVGVzdDIrKyk7CisrICAgICAgICAgIGxlblRlc3QyIC09IGxlblRlc3QgKyAxOworKyAgICAgICAgICBpZiAobGVuVGVzdDIgPj0gMikKKysgICAgICAgICAgeworKyAgICAgICAgICAgIFVJbnQzMiBzdGF0ZTIgPSBrTWF0Y2hOZXh0U3RhdGVzW3N0YXRlXTsKKysgICAgICAgICAgICBVSW50MzIgcG9zU3RhdGVOZXh0ID0gKHBvc2l0aW9uICsgbGVuVGVzdCkgJiBwLT5wYk1hc2s7CisrICAgICAgICAgICAgVUludDMyIGN1ckFuZExlbkNoYXJQcmljZSA9IGN1ckFuZExlblByaWNlICsKKysgICAgICAgICAgICAgICAgR0VUX1BSSUNFXzAocC0+aXNNYXRjaFtzdGF0ZTJdW3Bvc1N0YXRlTmV4dF0pICsKKysgICAgICAgICAgICAgICAgTGl0RW5jX0dldFByaWNlTWF0Y2hlZChMSVRfUFJPQlMocG9zaXRpb24gKyBsZW5UZXN0LCBkYXRhW2xlblRlc3QgLSAxXSksCisrICAgICAgICAgICAgICAgICAgICBkYXRhW2xlblRlc3RdLCBkYXRhMltsZW5UZXN0XSwgcC0+UHJvYlByaWNlcyk7CisrICAgICAgICAgICAgc3RhdGUyID0ga0xpdGVyYWxOZXh0U3RhdGVzW3N0YXRlMl07CisrICAgICAgICAgICAgcG9zU3RhdGVOZXh0ID0gKHBvc1N0YXRlTmV4dCArIDEpICYgcC0+cGJNYXNrOworKyAgICAgICAgICAgIG5leHRSZXBNYXRjaFByaWNlID0gY3VyQW5kTGVuQ2hhclByaWNlICsKKysgICAgICAgICAgICAgICAgR0VUX1BSSUNFXzEocC0+aXNNYXRjaFtzdGF0ZTJdW3Bvc1N0YXRlTmV4dF0pICsKKysgICAgICAgICAgICAgICAgR0VUX1BSSUNFXzEocC0+aXNSZXBbc3RhdGUyXSk7CisrCisrICAgICAgICAgICAgLyogZm9yICg7IGxlblRlc3QyID49IDI7IGxlblRlc3QyLS0pICovCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgVUludDMyIG9mZnNldCA9IGN1ciArIGxlblRlc3QgKyAxICsgbGVuVGVzdDI7CisrICAgICAgICAgICAgICBVSW50MzIgY3VyQW5kTGVuUHJpY2U7CisrICAgICAgICAgICAgICBDT3B0aW1hbCAqb3B0OworKyAgICAgICAgICAgICAgd2hpbGUgKGxlbkVuZCA8IG9mZnNldCkKKysgICAgICAgICAgICAgICAgcC0+b3B0WysrbGVuRW5kXS5wcmljZSA9IGtJbmZpbml0eVByaWNlOworKyAgICAgICAgICAgICAgY3VyQW5kTGVuUHJpY2UgPSBuZXh0UmVwTWF0Y2hQcmljZSArIEdldFJlcFByaWNlKHAsIDAsIGxlblRlc3QyLCBzdGF0ZTIsIHBvc1N0YXRlTmV4dCk7CisrICAgICAgICAgICAgICBvcHQgPSAmcC0+b3B0W29mZnNldF07CisrICAgICAgICAgICAgICBpZiAoY3VyQW5kTGVuUHJpY2UgPCBvcHQtPnByaWNlKQorKyAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBvcHQtPnByaWNlID0gY3VyQW5kTGVuUHJpY2U7CisrICAgICAgICAgICAgICAgIG9wdC0+cG9zUHJldiA9IGN1ciArIGxlblRlc3QgKyAxOworKyAgICAgICAgICAgICAgICBvcHQtPmJhY2tQcmV2ID0gMDsKKysgICAgICAgICAgICAgICAgb3B0LT5wcmV2MUlzQ2hhciA9IFRydWU7CisrICAgICAgICAgICAgICAgIG9wdC0+cHJldjIgPSBUcnVlOworKyAgICAgICAgICAgICAgICBvcHQtPnBvc1ByZXYyID0gY3VyOworKyAgICAgICAgICAgICAgICBvcHQtPmJhY2tQcmV2MiA9IGN1ckJhY2sgKyBMWk1BX05VTV9SRVBTOworKyAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0KKysgICAgICAgICAgfQorKyAgICAgICAgICBvZmZzICs9IDI7CisrICAgICAgICAgIGlmIChvZmZzID09IG51bVBhaXJzKQorKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICBjdXJCYWNrID0gbWF0Y2hlc1tvZmZzICsgMV07CisrICAgICAgICAgIGlmIChjdXJCYWNrID49IGtOdW1GdWxsRGlzdGFuY2VzKQorKyAgICAgICAgICAgIEdldFBvc1Nsb3QyKGN1ckJhY2ssIHBvc1Nsb3QpOworKyAgICAgICAgfQorKyAgICAgIH0KKysgICAgfQorKyAgfQorK30KKysKKysjZGVmaW5lIENoYW5nZVBhaXIoc21hbGxEaXN0LCBiaWdEaXN0KSAoKChiaWdEaXN0KSA+PiA3KSA+IChzbWFsbERpc3QpKQorKworK3N0YXRpYyBVSW50MzIgR2V0T3B0aW11bUZhc3QoQ0x6bWFFbmMgKnAsIFVJbnQzMiAqYmFja1JlcykKKyt7CisrICBVSW50MzIgbnVtQXZhaWwsIG1haW5MZW4sIG1haW5EaXN0LCBudW1QYWlycywgcmVwSW5kZXgsIHJlcExlbiwgaTsKKysgIGNvbnN0IEJ5dGUgKmRhdGE7CisrICBjb25zdCBVSW50MzIgKm1hdGNoZXM7CisrCisrICBpZiAocC0+YWRkaXRpb25hbE9mZnNldCA9PSAwKQorKyAgICBtYWluTGVuID0gUmVhZE1hdGNoRGlzdGFuY2VzKHAsICZudW1QYWlycyk7CisrICBlbHNlCisrICB7CisrICAgIG1haW5MZW4gPSBwLT5sb25nZXN0TWF0Y2hMZW5ndGg7CisrICAgIG51bVBhaXJzID0gcC0+bnVtUGFpcnM7CisrICB9CisrCisrICBudW1BdmFpbCA9IHAtPm51bUF2YWlsOworKyAgKmJhY2tSZXMgPSAoVUludDMyKS0xOworKyAgaWYgKG51bUF2YWlsIDwgMikKKysgICAgcmV0dXJuIDE7CisrICBpZiAobnVtQXZhaWwgPiBMWk1BX01BVENIX0xFTl9NQVgpCisrICAgIG51bUF2YWlsID0gTFpNQV9NQVRDSF9MRU5fTUFYOworKyAgZGF0YSA9IHAtPm1hdGNoRmluZGVyLkdldFBvaW50ZXJUb0N1cnJlbnRQb3MocC0+bWF0Y2hGaW5kZXJPYmopIC0gMTsKKysKKysgIHJlcExlbiA9IHJlcEluZGV4ID0gMDsKKysgIGZvciAoaSA9IDA7IGkgPCBMWk1BX05VTV9SRVBTOyBpKyspCisrICB7CisrICAgIFVJbnQzMiBsZW47CisrICAgIGNvbnN0IEJ5dGUgKmRhdGEyID0gZGF0YSAtIChwLT5yZXBzW2ldICsgMSk7CisrICAgIGlmIChkYXRhWzBdICE9IGRhdGEyWzBdIHx8IGRhdGFbMV0gIT0gZGF0YTJbMV0pCisrICAgICAgY29udGludWU7CisrICAgIGZvciAobGVuID0gMjsgbGVuIDwgbnVtQXZhaWwgJiYgZGF0YVtsZW5dID09IGRhdGEyW2xlbl07IGxlbisrKTsKKysgICAgaWYgKGxlbiA+PSBwLT5udW1GYXN0Qnl0ZXMpCisrICAgIHsKKysgICAgICAqYmFja1JlcyA9IGk7CisrICAgICAgTW92ZVBvcyhwLCBsZW4gLSAxKTsKKysgICAgICByZXR1cm4gbGVuOworKyAgICB9CisrICAgIGlmIChsZW4gPiByZXBMZW4pCisrICAgIHsKKysgICAgICByZXBJbmRleCA9IGk7CisrICAgICAgcmVwTGVuID0gbGVuOworKyAgICB9CisrICB9CisrCisrICBtYXRjaGVzID0gcC0+bWF0Y2hlczsKKysgIGlmIChtYWluTGVuID49IHAtPm51bUZhc3RCeXRlcykKKysgIHsKKysgICAgKmJhY2tSZXMgPSBtYXRjaGVzW251bVBhaXJzIC0gMV0gKyBMWk1BX05VTV9SRVBTOworKyAgICBNb3ZlUG9zKHAsIG1haW5MZW4gLSAxKTsKKysgICAgcmV0dXJuIG1haW5MZW47CisrICB9CisrCisrICBtYWluRGlzdCA9IDA7IC8qIGZvciBHQ0MgKi8KKysgIGlmIChtYWluTGVuID49IDIpCisrICB7CisrICAgIG1haW5EaXN0ID0gbWF0Y2hlc1tudW1QYWlycyAtIDFdOworKyAgICB3aGlsZSAobnVtUGFpcnMgPiAyICYmIG1haW5MZW4gPT0gbWF0Y2hlc1tudW1QYWlycyAtIDRdICsgMSkKKysgICAgeworKyAgICAgIGlmICghQ2hhbmdlUGFpcihtYXRjaGVzW251bVBhaXJzIC0gM10sIG1haW5EaXN0KSkKKysgICAgICAgIGJyZWFrOworKyAgICAgIG51bVBhaXJzIC09IDI7CisrICAgICAgbWFpbkxlbiA9IG1hdGNoZXNbbnVtUGFpcnMgLSAyXTsKKysgICAgICBtYWluRGlzdCA9IG1hdGNoZXNbbnVtUGFpcnMgLSAxXTsKKysgICAgfQorKyAgICBpZiAobWFpbkxlbiA9PSAyICYmIG1haW5EaXN0ID49IDB4ODApCisrICAgICAgbWFpbkxlbiA9IDE7CisrICB9CisrCisrICBpZiAocmVwTGVuID49IDIgJiYgKAorKyAgICAgICAgKHJlcExlbiArIDEgPj0gbWFpbkxlbikgfHwKKysgICAgICAgIChyZXBMZW4gKyAyID49IG1haW5MZW4gJiYgbWFpbkRpc3QgPj0gKDEgPDwgOSkpIHx8CisrICAgICAgICAocmVwTGVuICsgMyA+PSBtYWluTGVuICYmIG1haW5EaXN0ID49ICgxIDw8IDE1KSkpKQorKyAgeworKyAgICAqYmFja1JlcyA9IHJlcEluZGV4OworKyAgICBNb3ZlUG9zKHAsIHJlcExlbiAtIDEpOworKyAgICByZXR1cm4gcmVwTGVuOworKyAgfQorKworKyAgaWYgKG1haW5MZW4gPCAyIHx8IG51bUF2YWlsIDw9IDIpCisrICAgIHJldHVybiAxOworKworKyAgcC0+bG9uZ2VzdE1hdGNoTGVuZ3RoID0gUmVhZE1hdGNoRGlzdGFuY2VzKHAsICZwLT5udW1QYWlycyk7CisrICBpZiAocC0+bG9uZ2VzdE1hdGNoTGVuZ3RoID49IDIpCisrICB7CisrICAgIFVJbnQzMiBuZXdEaXN0YW5jZSA9IG1hdGNoZXNbcC0+bnVtUGFpcnMgLSAxXTsKKysgICAgaWYgKChwLT5sb25nZXN0TWF0Y2hMZW5ndGggPj0gbWFpbkxlbiAmJiBuZXdEaXN0YW5jZSA8IG1haW5EaXN0KSB8fAorKyAgICAgICAgKHAtPmxvbmdlc3RNYXRjaExlbmd0aCA9PSBtYWluTGVuICsgMSAmJiAhQ2hhbmdlUGFpcihtYWluRGlzdCwgbmV3RGlzdGFuY2UpKSB8fAorKyAgICAgICAgKHAtPmxvbmdlc3RNYXRjaExlbmd0aCA+IG1haW5MZW4gKyAxKSB8fAorKyAgICAgICAgKHAtPmxvbmdlc3RNYXRjaExlbmd0aCArIDEgPj0gbWFpbkxlbiAmJiBtYWluTGVuID49IDMgJiYgQ2hhbmdlUGFpcihuZXdEaXN0YW5jZSwgbWFpbkRpc3QpKSkKKysgICAgICByZXR1cm4gMTsKKysgIH0KKysKKysgIGRhdGEgPSBwLT5tYXRjaEZpbmRlci5HZXRQb2ludGVyVG9DdXJyZW50UG9zKHAtPm1hdGNoRmluZGVyT2JqKSAtIDE7CisrICBmb3IgKGkgPSAwOyBpIDwgTFpNQV9OVU1fUkVQUzsgaSsrKQorKyAgeworKyAgICBVSW50MzIgbGVuLCBsaW1pdDsKKysgICAgY29uc3QgQnl0ZSAqZGF0YTIgPSBkYXRhIC0gKHAtPnJlcHNbaV0gKyAxKTsKKysgICAgaWYgKGRhdGFbMF0gIT0gZGF0YTJbMF0gfHwgZGF0YVsxXSAhPSBkYXRhMlsxXSkKKysgICAgICBjb250aW51ZTsKKysgICAgbGltaXQgPSBtYWluTGVuIC0gMTsKKysgICAgZm9yIChsZW4gPSAyOyBsZW4gPCBsaW1pdCAmJiBkYXRhW2xlbl0gPT0gZGF0YTJbbGVuXTsgbGVuKyspOworKyAgICBpZiAobGVuID49IGxpbWl0KQorKyAgICAgIHJldHVybiAxOworKyAgfQorKyAgKmJhY2tSZXMgPSBtYWluRGlzdCArIExaTUFfTlVNX1JFUFM7CisrICBNb3ZlUG9zKHAsIG1haW5MZW4gLSAyKTsKKysgIHJldHVybiBtYWluTGVuOworK30KKysKKytzdGF0aWMgdm9pZCBXcml0ZUVuZE1hcmtlcihDTHptYUVuYyAqcCwgVUludDMyIHBvc1N0YXRlKQorK3sKKysgIFVJbnQzMiBsZW47CisrICBSYW5nZUVuY19FbmNvZGVCaXQoJnAtPnJjLCAmcC0+aXNNYXRjaFtwLT5zdGF0ZV1bcG9zU3RhdGVdLCAxKTsKKysgIFJhbmdlRW5jX0VuY29kZUJpdCgmcC0+cmMsICZwLT5pc1JlcFtwLT5zdGF0ZV0sIDApOworKyAgcC0+c3RhdGUgPSBrTWF0Y2hOZXh0U3RhdGVzW3AtPnN0YXRlXTsKKysgIGxlbiA9IExaTUFfTUFUQ0hfTEVOX01JTjsKKysgIExlbkVuY19FbmNvZGUyKCZwLT5sZW5FbmMsICZwLT5yYywgbGVuIC0gTFpNQV9NQVRDSF9MRU5fTUlOLCBwb3NTdGF0ZSwgIXAtPmZhc3RNb2RlLCBwLT5Qcm9iUHJpY2VzKTsKKysgIFJjVHJlZV9FbmNvZGUoJnAtPnJjLCBwLT5wb3NTbG90RW5jb2RlcltHZXRMZW5Ub1Bvc1N0YXRlKGxlbildLCBrTnVtUG9zU2xvdEJpdHMsICgxIDw8IGtOdW1Qb3NTbG90Qml0cykgLSAxKTsKKysgIFJhbmdlRW5jX0VuY29kZURpcmVjdEJpdHMoJnAtPnJjLCAoKChVSW50MzIpMSA8PCAzMCkgLSAxKSA+PiBrTnVtQWxpZ25CaXRzLCAzMCAtIGtOdW1BbGlnbkJpdHMpOworKyAgUmNUcmVlX1JldmVyc2VFbmNvZGUoJnAtPnJjLCBwLT5wb3NBbGlnbkVuY29kZXIsIGtOdW1BbGlnbkJpdHMsIGtBbGlnbk1hc2spOworK30KKysKKytzdGF0aWMgU1JlcyBDaGVja0Vycm9ycyhDTHptYUVuYyAqcCkKKyt7CisrICBpZiAocC0+cmVzdWx0ICE9IFNaX09LKQorKyAgICByZXR1cm4gcC0+cmVzdWx0OworKyAgaWYgKHAtPnJjLnJlcyAhPSBTWl9PSykKKysgICAgcC0+cmVzdWx0ID0gU1pfRVJST1JfV1JJVEU7CisrICBpZiAocC0+bWF0Y2hGaW5kZXJCYXNlLnJlc3VsdCAhPSBTWl9PSykKKysgICAgcC0+cmVzdWx0ID0gU1pfRVJST1JfUkVBRDsKKysgIGlmIChwLT5yZXN1bHQgIT0gU1pfT0spCisrICAgIHAtPmZpbmlzaGVkID0gVHJ1ZTsKKysgIHJldHVybiBwLT5yZXN1bHQ7CisrfQorKworK3N0YXRpYyBTUmVzIEZsdXNoKENMem1hRW5jICpwLCBVSW50MzIgbm93UG9zKQorK3sKKysgIC8qIFJlbGVhc2VNRlN0cmVhbSgpOyAqLworKyAgcC0+ZmluaXNoZWQgPSBUcnVlOworKyAgaWYgKHAtPndyaXRlRW5kTWFyaykKKysgICAgV3JpdGVFbmRNYXJrZXIocCwgbm93UG9zICYgcC0+cGJNYXNrKTsKKysgIFJhbmdlRW5jX0ZsdXNoRGF0YSgmcC0+cmMpOworKyAgUmFuZ2VFbmNfRmx1c2hTdHJlYW0oJnAtPnJjKTsKKysgIHJldHVybiBDaGVja0Vycm9ycyhwKTsKKyt9CisrCisrc3RhdGljIHZvaWQgRmlsbEFsaWduUHJpY2VzKENMem1hRW5jICpwKQorK3sKKysgIFVJbnQzMiBpOworKyAgZm9yIChpID0gMDsgaSA8IGtBbGlnblRhYmxlU2l6ZTsgaSsrKQorKyAgICBwLT5hbGlnblByaWNlc1tpXSA9IFJjVHJlZV9SZXZlcnNlR2V0UHJpY2UocC0+cG9zQWxpZ25FbmNvZGVyLCBrTnVtQWxpZ25CaXRzLCBpLCBwLT5Qcm9iUHJpY2VzKTsKKysgIHAtPmFsaWduUHJpY2VDb3VudCA9IDA7CisrfQorKworK3N0YXRpYyB2b2lkIEZpbGxEaXN0YW5jZXNQcmljZXMoQ0x6bWFFbmMgKnApCisreworKyAgVUludDMyIHRlbXBQcmljZXNba051bUZ1bGxEaXN0YW5jZXNdOworKyAgVUludDMyIGksIGxlblRvUG9zU3RhdGU7CisrICBmb3IgKGkgPSBrU3RhcnRQb3NNb2RlbEluZGV4OyBpIDwga051bUZ1bGxEaXN0YW5jZXM7IGkrKykKKysgIHsKKysgICAgVUludDMyIHBvc1Nsb3QgPSBHZXRQb3NTbG90MShpKTsKKysgICAgVUludDMyIGZvb3RlckJpdHMgPSAoKHBvc1Nsb3QgPj4gMSkgLSAxKTsKKysgICAgVUludDMyIGJhc2UgPSAoKDIgfCAocG9zU2xvdCAmIDEpKSA8PCBmb290ZXJCaXRzKTsKKysgICAgdGVtcFByaWNlc1tpXSA9IFJjVHJlZV9SZXZlcnNlR2V0UHJpY2UocC0+cG9zRW5jb2RlcnMgKyBiYXNlIC0gcG9zU2xvdCAtIDEsIGZvb3RlckJpdHMsIGkgLSBiYXNlLCBwLT5Qcm9iUHJpY2VzKTsKKysgIH0KKysKKysgIGZvciAobGVuVG9Qb3NTdGF0ZSA9IDA7IGxlblRvUG9zU3RhdGUgPCBrTnVtTGVuVG9Qb3NTdGF0ZXM7IGxlblRvUG9zU3RhdGUrKykKKysgIHsKKysgICAgVUludDMyIHBvc1Nsb3Q7CisrICAgIGNvbnN0IENMem1hUHJvYiAqZW5jb2RlciA9IHAtPnBvc1Nsb3RFbmNvZGVyW2xlblRvUG9zU3RhdGVdOworKyAgICBVSW50MzIgKnBvc1Nsb3RQcmljZXMgPSBwLT5wb3NTbG90UHJpY2VzW2xlblRvUG9zU3RhdGVdOworKyAgICBmb3IgKHBvc1Nsb3QgPSAwOyBwb3NTbG90IDwgcC0+ZGlzdFRhYmxlU2l6ZTsgcG9zU2xvdCsrKQorKyAgICAgIHBvc1Nsb3RQcmljZXNbcG9zU2xvdF0gPSBSY1RyZWVfR2V0UHJpY2UoZW5jb2Rlciwga051bVBvc1Nsb3RCaXRzLCBwb3NTbG90LCBwLT5Qcm9iUHJpY2VzKTsKKysgICAgZm9yIChwb3NTbG90ID0ga0VuZFBvc01vZGVsSW5kZXg7IHBvc1Nsb3QgPCBwLT5kaXN0VGFibGVTaXplOyBwb3NTbG90KyspCisrICAgICAgcG9zU2xvdFByaWNlc1twb3NTbG90XSArPSAoKCgocG9zU2xvdCA+PiAxKSAtIDEpIC0ga051bUFsaWduQml0cykgPDwga051bUJpdFByaWNlU2hpZnRCaXRzKTsKKysKKysgICAgeworKyAgICAgIFVJbnQzMiAqZGlzdGFuY2VzUHJpY2VzID0gcC0+ZGlzdGFuY2VzUHJpY2VzW2xlblRvUG9zU3RhdGVdOworKyAgICAgIFVJbnQzMiBpOworKyAgICAgIGZvciAoaSA9IDA7IGkgPCBrU3RhcnRQb3NNb2RlbEluZGV4OyBpKyspCisrICAgICAgICBkaXN0YW5jZXNQcmljZXNbaV0gPSBwb3NTbG90UHJpY2VzW2ldOworKyAgICAgIGZvciAoOyBpIDwga051bUZ1bGxEaXN0YW5jZXM7IGkrKykKKysgICAgICAgIGRpc3RhbmNlc1ByaWNlc1tpXSA9IHBvc1Nsb3RQcmljZXNbR2V0UG9zU2xvdDEoaSldICsgdGVtcFByaWNlc1tpXTsKKysgICAgfQorKyAgfQorKyAgcC0+bWF0Y2hQcmljZUNvdW50ID0gMDsKKyt9CisrCisrdm9pZCBMem1hRW5jX0NvbnN0cnVjdChDTHptYUVuYyAqcCkKKyt7CisrICBSYW5nZUVuY19Db25zdHJ1Y3QoJnAtPnJjKTsKKysgIE1hdGNoRmluZGVyX0NvbnN0cnVjdCgmcC0+bWF0Y2hGaW5kZXJCYXNlKTsKKysgICNpZm5kZWYgXzdaSVBfU1QKKysgIE1hdGNoRmluZGVyTXRfQ29uc3RydWN0KCZwLT5tYXRjaEZpbmRlck10KTsKKysgIHAtPm1hdGNoRmluZGVyTXQuTWF0Y2hGaW5kZXIgPSAmcC0+bWF0Y2hGaW5kZXJCYXNlOworKyAgI2VuZGlmCisrCisrICB7CisrICAgIENMem1hRW5jUHJvcHMgcHJvcHM7CisrICAgIEx6bWFFbmNQcm9wc19Jbml0KCZwcm9wcyk7CisrICAgIEx6bWFFbmNfU2V0UHJvcHMocCwgJnByb3BzKTsKKysgIH0KKysKKysgICNpZm5kZWYgTFpNQV9MT0dfQlNSCisrICBMem1hRW5jX0Zhc3RQb3NJbml0KHAtPmdfRmFzdFBvcyk7CisrICAjZW5kaWYKKysKKysgIEx6bWFFbmNfSW5pdFByaWNlVGFibGVzKHAtPlByb2JQcmljZXMpOworKyAgcC0+bGl0UHJvYnMgPSAwOworKyAgcC0+c2F2ZVN0YXRlLmxpdFByb2JzID0gMDsKKyt9CisrCisrQ0x6bWFFbmNIYW5kbGUgTHptYUVuY19DcmVhdGUoSVN6QWxsb2MgKmFsbG9jKQorK3sKKysgIHZvaWQgKnA7CisrICBwID0gYWxsb2MtPkFsbG9jKGFsbG9jLCBzaXplb2YoQ0x6bWFFbmMpKTsKKysgIGlmIChwICE9IDApCisrICAgIEx6bWFFbmNfQ29uc3RydWN0KChDTHptYUVuYyAqKXApOworKyAgcmV0dXJuIHA7CisrfQorKworK3ZvaWQgTHptYUVuY19GcmVlTGl0cyhDTHptYUVuYyAqcCwgSVN6QWxsb2MgKmFsbG9jKQorK3sKKysgIGFsbG9jLT5GcmVlKGFsbG9jLCBwLT5saXRQcm9icyk7CisrICBhbGxvYy0+RnJlZShhbGxvYywgcC0+c2F2ZVN0YXRlLmxpdFByb2JzKTsKKysgIHAtPmxpdFByb2JzID0gMDsKKysgIHAtPnNhdmVTdGF0ZS5saXRQcm9icyA9IDA7CisrfQorKworK3ZvaWQgTHptYUVuY19EZXN0cnVjdChDTHptYUVuYyAqcCwgSVN6QWxsb2MgKmFsbG9jLCBJU3pBbGxvYyAqYWxsb2NCaWcpCisreworKyAgI2lmbmRlZiBfN1pJUF9TVAorKyAgTWF0Y2hGaW5kZXJNdF9EZXN0cnVjdCgmcC0+bWF0Y2hGaW5kZXJNdCwgYWxsb2NCaWcpOworKyAgI2VuZGlmCisrICBNYXRjaEZpbmRlcl9GcmVlKCZwLT5tYXRjaEZpbmRlckJhc2UsIGFsbG9jQmlnKTsKKysgIEx6bWFFbmNfRnJlZUxpdHMocCwgYWxsb2MpOworKyAgUmFuZ2VFbmNfRnJlZSgmcC0+cmMsIGFsbG9jKTsKKyt9CisrCisrdm9pZCBMem1hRW5jX0Rlc3Ryb3koQ0x6bWFFbmNIYW5kbGUgcCwgSVN6QWxsb2MgKmFsbG9jLCBJU3pBbGxvYyAqYWxsb2NCaWcpCisreworKyAgTHptYUVuY19EZXN0cnVjdCgoQ0x6bWFFbmMgKilwLCBhbGxvYywgYWxsb2NCaWcpOworKyAgYWxsb2MtPkZyZWUoYWxsb2MsIHApOworK30KKysKKytzdGF0aWMgU1JlcyBMem1hRW5jX0NvZGVPbmVCbG9jayhDTHptYUVuYyAqcCwgQm9vbCB1c2VMaW1pdHMsIFVJbnQzMiBtYXhQYWNrU2l6ZSwgVUludDMyIG1heFVucGFja1NpemUpCisreworKyAgVUludDMyIG5vd1BvczMyLCBzdGFydFBvczMyOworKyAgaWYgKHAtPm5lZWRJbml0KQorKyAgeworKyAgICBwLT5tYXRjaEZpbmRlci5Jbml0KHAtPm1hdGNoRmluZGVyT2JqKTsKKysgICAgcC0+bmVlZEluaXQgPSAwOworKyAgfQorKworKyAgaWYgKHAtPmZpbmlzaGVkKQorKyAgICByZXR1cm4gcC0+cmVzdWx0OworKyAgUklOT0soQ2hlY2tFcnJvcnMocCkpOworKworKyAgbm93UG9zMzIgPSAoVUludDMyKXAtPm5vd1BvczY0OworKyAgc3RhcnRQb3MzMiA9IG5vd1BvczMyOworKworKyAgaWYgKHAtPm5vd1BvczY0ID09IDApCisrICB7CisrICAgIFVJbnQzMiBudW1QYWlyczsKKysgICAgQnl0ZSBjdXJCeXRlOworKyAgICBpZiAocC0+bWF0Y2hGaW5kZXIuR2V0TnVtQXZhaWxhYmxlQnl0ZXMocC0+bWF0Y2hGaW5kZXJPYmopID09IDApCisrICAgICAgcmV0dXJuIEZsdXNoKHAsIG5vd1BvczMyKTsKKysgICAgUmVhZE1hdGNoRGlzdGFuY2VzKHAsICZudW1QYWlycyk7CisrICAgIFJhbmdlRW5jX0VuY29kZUJpdCgmcC0+cmMsICZwLT5pc01hdGNoW3AtPnN0YXRlXVswXSwgMCk7CisrICAgIHAtPnN0YXRlID0ga0xpdGVyYWxOZXh0U3RhdGVzW3AtPnN0YXRlXTsKKysgICAgY3VyQnl0ZSA9IHAtPm1hdGNoRmluZGVyLkdldEluZGV4Qnl0ZShwLT5tYXRjaEZpbmRlck9iaiwgMCAtIHAtPmFkZGl0aW9uYWxPZmZzZXQpOworKyAgICBMaXRFbmNfRW5jb2RlKCZwLT5yYywgcC0+bGl0UHJvYnMsIGN1ckJ5dGUpOworKyAgICBwLT5hZGRpdGlvbmFsT2Zmc2V0LS07CisrICAgIG5vd1BvczMyKys7CisrICB9CisrCisrICBpZiAocC0+bWF0Y2hGaW5kZXIuR2V0TnVtQXZhaWxhYmxlQnl0ZXMocC0+bWF0Y2hGaW5kZXJPYmopICE9IDApCisrICBmb3IgKDs7KQorKyAgeworKyAgICBVSW50MzIgcG9zLCBsZW4sIHBvc1N0YXRlOworKworKyAgICBpZiAocC0+ZmFzdE1vZGUpCisrICAgICAgbGVuID0gR2V0T3B0aW11bUZhc3QocCwgJnBvcyk7CisrICAgIGVsc2UKKysgICAgICBsZW4gPSBHZXRPcHRpbXVtKHAsIG5vd1BvczMyLCAmcG9zKTsKKysKKysgICAgI2lmZGVmIFNIT1dfU1RBVDIKKysgICAgcHJpbnRmKCJcbiBwb3MgPSAlNFgsICAgbGVuID0gJWQgICBwb3MgPSAlZCIsIG5vd1BvczMyLCBsZW4sIHBvcyk7CisrICAgICNlbmRpZgorKworKyAgICBwb3NTdGF0ZSA9IG5vd1BvczMyICYgcC0+cGJNYXNrOworKyAgICBpZiAobGVuID09IDEgJiYgcG9zID09IChVSW50MzIpLTEpCisrICAgIHsKKysgICAgICBCeXRlIGN1ckJ5dGU7CisrICAgICAgQ0x6bWFQcm9iICpwcm9iczsKKysgICAgICBjb25zdCBCeXRlICpkYXRhOworKworKyAgICAgIFJhbmdlRW5jX0VuY29kZUJpdCgmcC0+cmMsICZwLT5pc01hdGNoW3AtPnN0YXRlXVtwb3NTdGF0ZV0sIDApOworKyAgICAgIGRhdGEgPSBwLT5tYXRjaEZpbmRlci5HZXRQb2ludGVyVG9DdXJyZW50UG9zKHAtPm1hdGNoRmluZGVyT2JqKSAtIHAtPmFkZGl0aW9uYWxPZmZzZXQ7CisrICAgICAgY3VyQnl0ZSA9ICpkYXRhOworKyAgICAgIHByb2JzID0gTElUX1BST0JTKG5vd1BvczMyLCAqKGRhdGEgLSAxKSk7CisrICAgICAgaWYgKElzQ2hhclN0YXRlKHAtPnN0YXRlKSkKKysgICAgICAgIExpdEVuY19FbmNvZGUoJnAtPnJjLCBwcm9icywgY3VyQnl0ZSk7CisrICAgICAgZWxzZQorKyAgICAgICAgTGl0RW5jX0VuY29kZU1hdGNoZWQoJnAtPnJjLCBwcm9icywgY3VyQnl0ZSwgKihkYXRhIC0gcC0+cmVwc1swXSAtIDEpKTsKKysgICAgICBwLT5zdGF0ZSA9IGtMaXRlcmFsTmV4dFN0YXRlc1twLT5zdGF0ZV07CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgICAgUmFuZ2VFbmNfRW5jb2RlQml0KCZwLT5yYywgJnAtPmlzTWF0Y2hbcC0+c3RhdGVdW3Bvc1N0YXRlXSwgMSk7CisrICAgICAgaWYgKHBvcyA8IExaTUFfTlVNX1JFUFMpCisrICAgICAgeworKyAgICAgICAgUmFuZ2VFbmNfRW5jb2RlQml0KCZwLT5yYywgJnAtPmlzUmVwW3AtPnN0YXRlXSwgMSk7CisrICAgICAgICBpZiAocG9zID09IDApCisrICAgICAgICB7CisrICAgICAgICAgIFJhbmdlRW5jX0VuY29kZUJpdCgmcC0+cmMsICZwLT5pc1JlcEcwW3AtPnN0YXRlXSwgMCk7CisrICAgICAgICAgIFJhbmdlRW5jX0VuY29kZUJpdCgmcC0+cmMsICZwLT5pc1JlcDBMb25nW3AtPnN0YXRlXVtwb3NTdGF0ZV0sICgobGVuID09IDEpID8gMCA6IDEpKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgVUludDMyIGRpc3RhbmNlID0gcC0+cmVwc1twb3NdOworKyAgICAgICAgICBSYW5nZUVuY19FbmNvZGVCaXQoJnAtPnJjLCAmcC0+aXNSZXBHMFtwLT5zdGF0ZV0sIDEpOworKyAgICAgICAgICBpZiAocG9zID09IDEpCisrICAgICAgICAgICAgUmFuZ2VFbmNfRW5jb2RlQml0KCZwLT5yYywgJnAtPmlzUmVwRzFbcC0+c3RhdGVdLCAwKTsKKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICB7CisrICAgICAgICAgICAgUmFuZ2VFbmNfRW5jb2RlQml0KCZwLT5yYywgJnAtPmlzUmVwRzFbcC0+c3RhdGVdLCAxKTsKKysgICAgICAgICAgICBSYW5nZUVuY19FbmNvZGVCaXQoJnAtPnJjLCAmcC0+aXNSZXBHMltwLT5zdGF0ZV0sIHBvcyAtIDIpOworKyAgICAgICAgICAgIGlmIChwb3MgPT0gMykKKysgICAgICAgICAgICAgIHAtPnJlcHNbM10gPSBwLT5yZXBzWzJdOworKyAgICAgICAgICAgIHAtPnJlcHNbMl0gPSBwLT5yZXBzWzFdOworKyAgICAgICAgICB9CisrICAgICAgICAgIHAtPnJlcHNbMV0gPSBwLT5yZXBzWzBdOworKyAgICAgICAgICBwLT5yZXBzWzBdID0gZGlzdGFuY2U7CisrICAgICAgICB9CisrICAgICAgICBpZiAobGVuID09IDEpCisrICAgICAgICAgIHAtPnN0YXRlID0ga1Nob3J0UmVwTmV4dFN0YXRlc1twLT5zdGF0ZV07CisrICAgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgIExlbkVuY19FbmNvZGUyKCZwLT5yZXBMZW5FbmMsICZwLT5yYywgbGVuIC0gTFpNQV9NQVRDSF9MRU5fTUlOLCBwb3NTdGF0ZSwgIXAtPmZhc3RNb2RlLCBwLT5Qcm9iUHJpY2VzKTsKKysgICAgICAgICAgcC0+c3RhdGUgPSBrUmVwTmV4dFN0YXRlc1twLT5zdGF0ZV07CisrICAgICAgICB9CisrICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICB7CisrICAgICAgICBVSW50MzIgcG9zU2xvdDsKKysgICAgICAgIFJhbmdlRW5jX0VuY29kZUJpdCgmcC0+cmMsICZwLT5pc1JlcFtwLT5zdGF0ZV0sIDApOworKyAgICAgICAgcC0+c3RhdGUgPSBrTWF0Y2hOZXh0U3RhdGVzW3AtPnN0YXRlXTsKKysgICAgICAgIExlbkVuY19FbmNvZGUyKCZwLT5sZW5FbmMsICZwLT5yYywgbGVuIC0gTFpNQV9NQVRDSF9MRU5fTUlOLCBwb3NTdGF0ZSwgIXAtPmZhc3RNb2RlLCBwLT5Qcm9iUHJpY2VzKTsKKysgICAgICAgIHBvcyAtPSBMWk1BX05VTV9SRVBTOworKyAgICAgICAgR2V0UG9zU2xvdChwb3MsIHBvc1Nsb3QpOworKyAgICAgICAgUmNUcmVlX0VuY29kZSgmcC0+cmMsIHAtPnBvc1Nsb3RFbmNvZGVyW0dldExlblRvUG9zU3RhdGUobGVuKV0sIGtOdW1Qb3NTbG90Qml0cywgcG9zU2xvdCk7CisrCisrICAgICAgICBpZiAocG9zU2xvdCA+PSBrU3RhcnRQb3NNb2RlbEluZGV4KQorKyAgICAgICAgeworKyAgICAgICAgICBVSW50MzIgZm9vdGVyQml0cyA9ICgocG9zU2xvdCA+PiAxKSAtIDEpOworKyAgICAgICAgICBVSW50MzIgYmFzZSA9ICgoMiB8IChwb3NTbG90ICYgMSkpIDw8IGZvb3RlckJpdHMpOworKyAgICAgICAgICBVSW50MzIgcG9zUmVkdWNlZCA9IHBvcyAtIGJhc2U7CisrCisrICAgICAgICAgIGlmIChwb3NTbG90IDwga0VuZFBvc01vZGVsSW5kZXgpCisrICAgICAgICAgICAgUmNUcmVlX1JldmVyc2VFbmNvZGUoJnAtPnJjLCBwLT5wb3NFbmNvZGVycyArIGJhc2UgLSBwb3NTbG90IC0gMSwgZm9vdGVyQml0cywgcG9zUmVkdWNlZCk7CisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgeworKyAgICAgICAgICAgIFJhbmdlRW5jX0VuY29kZURpcmVjdEJpdHMoJnAtPnJjLCBwb3NSZWR1Y2VkID4+IGtOdW1BbGlnbkJpdHMsIGZvb3RlckJpdHMgLSBrTnVtQWxpZ25CaXRzKTsKKysgICAgICAgICAgICBSY1RyZWVfUmV2ZXJzZUVuY29kZSgmcC0+cmMsIHAtPnBvc0FsaWduRW5jb2Rlciwga051bUFsaWduQml0cywgcG9zUmVkdWNlZCAmIGtBbGlnbk1hc2spOworKyAgICAgICAgICAgIHAtPmFsaWduUHJpY2VDb3VudCsrOworKyAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBwLT5yZXBzWzNdID0gcC0+cmVwc1syXTsKKysgICAgICAgIHAtPnJlcHNbMl0gPSBwLT5yZXBzWzFdOworKyAgICAgICAgcC0+cmVwc1sxXSA9IHAtPnJlcHNbMF07CisrICAgICAgICBwLT5yZXBzWzBdID0gcG9zOworKyAgICAgICAgcC0+bWF0Y2hQcmljZUNvdW50Kys7CisrICAgICAgfQorKyAgICB9CisrICAgIHAtPmFkZGl0aW9uYWxPZmZzZXQgLT0gbGVuOworKyAgICBub3dQb3MzMiArPSBsZW47CisrICAgIGlmIChwLT5hZGRpdGlvbmFsT2Zmc2V0ID09IDApCisrICAgIHsKKysgICAgICBVSW50MzIgcHJvY2Vzc2VkOworKyAgICAgIGlmICghcC0+ZmFzdE1vZGUpCisrICAgICAgeworKyAgICAgICAgaWYgKHAtPm1hdGNoUHJpY2VDb3VudCA+PSAoMSA8PCA3KSkKKysgICAgICAgICAgRmlsbERpc3RhbmNlc1ByaWNlcyhwKTsKKysgICAgICAgIGlmIChwLT5hbGlnblByaWNlQ291bnQgPj0ga0FsaWduVGFibGVTaXplKQorKyAgICAgICAgICBGaWxsQWxpZ25QcmljZXMocCk7CisrICAgICAgfQorKyAgICAgIGlmIChwLT5tYXRjaEZpbmRlci5HZXROdW1BdmFpbGFibGVCeXRlcyhwLT5tYXRjaEZpbmRlck9iaikgPT0gMCkKKysgICAgICAgIGJyZWFrOworKyAgICAgIHByb2Nlc3NlZCA9IG5vd1BvczMyIC0gc3RhcnRQb3MzMjsKKysgICAgICBpZiAodXNlTGltaXRzKQorKyAgICAgIHsKKysgICAgICAgIGlmIChwcm9jZXNzZWQgKyBrTnVtT3B0cyArIDMwMCA+PSBtYXhVbnBhY2tTaXplIHx8CisrICAgICAgICAgICAgUmFuZ2VFbmNfR2V0UHJvY2Vzc2VkKCZwLT5yYykgKyBrTnVtT3B0cyAqIDIgPj0gbWF4UGFja1NpemUpCisrICAgICAgICAgIGJyZWFrOworKyAgICAgIH0KKysgICAgICBlbHNlIGlmIChwcm9jZXNzZWQgPj0gKDEgPDwgMTUpKQorKyAgICAgIHsKKysgICAgICAgIHAtPm5vd1BvczY0ICs9IG5vd1BvczMyIC0gc3RhcnRQb3MzMjsKKysgICAgICAgIHJldHVybiBDaGVja0Vycm9ycyhwKTsKKysgICAgICB9CisrICAgIH0KKysgIH0KKysgIHAtPm5vd1BvczY0ICs9IG5vd1BvczMyIC0gc3RhcnRQb3MzMjsKKysgIHJldHVybiBGbHVzaChwLCBub3dQb3MzMik7CisrfQorKworKyNkZWZpbmUga0JpZ0hhc2hEaWNMaW1pdCAoKFVJbnQzMikxIDw8IDI0KQorKworK3N0YXRpYyBTUmVzIEx6bWFFbmNfQWxsb2MoQ0x6bWFFbmMgKnAsIFVJbnQzMiBrZWVwV2luZG93U2l6ZSwgSVN6QWxsb2MgKmFsbG9jLCBJU3pBbGxvYyAqYWxsb2NCaWcpCisreworKyAgVUludDMyIGJlZm9yZVNpemUgPSBrTnVtT3B0czsKKysgIEJvb2wgYnRNb2RlOworKyAgaWYgKCFSYW5nZUVuY19BbGxvYygmcC0+cmMsIGFsbG9jKSkKKysgICAgcmV0dXJuIFNaX0VSUk9SX01FTTsKKysgIGJ0TW9kZSA9IChwLT5tYXRjaEZpbmRlckJhc2UuYnRNb2RlICE9IDApOworKyAgI2lmbmRlZiBfN1pJUF9TVAorKyAgcC0+bXRNb2RlID0gKHAtPm11bHRpVGhyZWFkICYmICFwLT5mYXN0TW9kZSAmJiBidE1vZGUpOworKyAgI2VuZGlmCisrCisrICB7CisrICAgIHVuc2lnbmVkIGxjbHAgPSBwLT5sYyArIHAtPmxwOworKyAgICBpZiAocC0+bGl0UHJvYnMgPT0gMCB8fCBwLT5zYXZlU3RhdGUubGl0UHJvYnMgPT0gMCB8fCBwLT5sY2xwICE9IGxjbHApCisrICAgIHsKKysgICAgICBMem1hRW5jX0ZyZWVMaXRzKHAsIGFsbG9jKTsKKysgICAgICBwLT5saXRQcm9icyA9IChDTHptYVByb2IgKilhbGxvYy0+QWxsb2MoYWxsb2MsICgweDMwMCA8PCBsY2xwKSAqIHNpemVvZihDTHptYVByb2IpKTsKKysgICAgICBwLT5zYXZlU3RhdGUubGl0UHJvYnMgPSAoQ0x6bWFQcm9iICopYWxsb2MtPkFsbG9jKGFsbG9jLCAoMHgzMDAgPDwgbGNscCkgKiBzaXplb2YoQ0x6bWFQcm9iKSk7CisrICAgICAgaWYgKHAtPmxpdFByb2JzID09IDAgfHwgcC0+c2F2ZVN0YXRlLmxpdFByb2JzID09IDApCisrICAgICAgeworKyAgICAgICAgTHptYUVuY19GcmVlTGl0cyhwLCBhbGxvYyk7CisrICAgICAgICByZXR1cm4gU1pfRVJST1JfTUVNOworKyAgICAgIH0KKysgICAgICBwLT5sY2xwID0gbGNscDsKKysgICAgfQorKyAgfQorKworKyAgcC0+bWF0Y2hGaW5kZXJCYXNlLmJpZ0hhc2ggPSAocC0+ZGljdFNpemUgPiBrQmlnSGFzaERpY0xpbWl0KTsKKysKKysgIGlmIChiZWZvcmVTaXplICsgcC0+ZGljdFNpemUgPCBrZWVwV2luZG93U2l6ZSkKKysgICAgYmVmb3JlU2l6ZSA9IGtlZXBXaW5kb3dTaXplIC0gcC0+ZGljdFNpemU7CisrCisrICAjaWZuZGVmIF83WklQX1NUCisrICBpZiAocC0+bXRNb2RlKQorKyAgeworKyAgICBSSU5PSyhNYXRjaEZpbmRlck10X0NyZWF0ZSgmcC0+bWF0Y2hGaW5kZXJNdCwgcC0+ZGljdFNpemUsIGJlZm9yZVNpemUsIHAtPm51bUZhc3RCeXRlcywgTFpNQV9NQVRDSF9MRU5fTUFYLCBhbGxvY0JpZykpOworKyAgICBwLT5tYXRjaEZpbmRlck9iaiA9ICZwLT5tYXRjaEZpbmRlck10OworKyAgICBNYXRjaEZpbmRlck10X0NyZWF0ZVZUYWJsZSgmcC0+bWF0Y2hGaW5kZXJNdCwgJnAtPm1hdGNoRmluZGVyKTsKKysgIH0KKysgIGVsc2UKKysgICNlbmRpZgorKyAgeworKyAgICBpZiAoIU1hdGNoRmluZGVyX0NyZWF0ZSgmcC0+bWF0Y2hGaW5kZXJCYXNlLCBwLT5kaWN0U2l6ZSwgYmVmb3JlU2l6ZSwgcC0+bnVtRmFzdEJ5dGVzLCBMWk1BX01BVENIX0xFTl9NQVgsIGFsbG9jQmlnKSkKKysgICAgICByZXR1cm4gU1pfRVJST1JfTUVNOworKyAgICBwLT5tYXRjaEZpbmRlck9iaiA9ICZwLT5tYXRjaEZpbmRlckJhc2U7CisrICAgIE1hdGNoRmluZGVyX0NyZWF0ZVZUYWJsZSgmcC0+bWF0Y2hGaW5kZXJCYXNlLCAmcC0+bWF0Y2hGaW5kZXIpOworKyAgfQorKyAgcmV0dXJuIFNaX09LOworK30KKysKKyt2b2lkIEx6bWFFbmNfSW5pdChDTHptYUVuYyAqcCkKKyt7CisrICBVSW50MzIgaTsKKysgIHAtPnN0YXRlID0gMDsKKysgIGZvciAoaSA9IDAgOyBpIDwgTFpNQV9OVU1fUkVQUzsgaSsrKQorKyAgICBwLT5yZXBzW2ldID0gMDsKKysKKysgIFJhbmdlRW5jX0luaXQoJnAtPnJjKTsKKysKKysKKysgIGZvciAoaSA9IDA7IGkgPCBrTnVtU3RhdGVzOyBpKyspCisrICB7CisrICAgIFVJbnQzMiBqOworKyAgICBmb3IgKGogPSAwOyBqIDwgTFpNQV9OVU1fUEJfU1RBVEVTX01BWDsgaisrKQorKyAgICB7CisrICAgICAgcC0+aXNNYXRjaFtpXVtqXSA9IGtQcm9iSW5pdFZhbHVlOworKyAgICAgIHAtPmlzUmVwMExvbmdbaV1bal0gPSBrUHJvYkluaXRWYWx1ZTsKKysgICAgfQorKyAgICBwLT5pc1JlcFtpXSA9IGtQcm9iSW5pdFZhbHVlOworKyAgICBwLT5pc1JlcEcwW2ldID0ga1Byb2JJbml0VmFsdWU7CisrICAgIHAtPmlzUmVwRzFbaV0gPSBrUHJvYkluaXRWYWx1ZTsKKysgICAgcC0+aXNSZXBHMltpXSA9IGtQcm9iSW5pdFZhbHVlOworKyAgfQorKworKyAgeworKyAgICBVSW50MzIgbnVtID0gMHgzMDAgPDwgKHAtPmxwICsgcC0+bGMpOworKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCisrICAgICAgcC0+bGl0UHJvYnNbaV0gPSBrUHJvYkluaXRWYWx1ZTsKKysgIH0KKysKKysgIHsKKysgICAgZm9yIChpID0gMDsgaSA8IGtOdW1MZW5Ub1Bvc1N0YXRlczsgaSsrKQorKyAgICB7CisrICAgICAgQ0x6bWFQcm9iICpwcm9icyA9IHAtPnBvc1Nsb3RFbmNvZGVyW2ldOworKyAgICAgIFVJbnQzMiBqOworKyAgICAgIGZvciAoaiA9IDA7IGogPCAoMSA8PCBrTnVtUG9zU2xvdEJpdHMpOyBqKyspCisrICAgICAgICBwcm9ic1tqXSA9IGtQcm9iSW5pdFZhbHVlOworKyAgICB9CisrICB9CisrICB7CisrICAgIGZvciAoaSA9IDA7IGkgPCBrTnVtRnVsbERpc3RhbmNlcyAtIGtFbmRQb3NNb2RlbEluZGV4OyBpKyspCisrICAgICAgcC0+cG9zRW5jb2RlcnNbaV0gPSBrUHJvYkluaXRWYWx1ZTsKKysgIH0KKysKKysgIExlbkVuY19Jbml0KCZwLT5sZW5FbmMucCk7CisrICBMZW5FbmNfSW5pdCgmcC0+cmVwTGVuRW5jLnApOworKworKyAgZm9yIChpID0gMDsgaSA8ICgxIDw8IGtOdW1BbGlnbkJpdHMpOyBpKyspCisrICAgIHAtPnBvc0FsaWduRW5jb2RlcltpXSA9IGtQcm9iSW5pdFZhbHVlOworKworKyAgcC0+b3B0aW11bUVuZEluZGV4ID0gMDsKKysgIHAtPm9wdGltdW1DdXJyZW50SW5kZXggPSAwOworKyAgcC0+YWRkaXRpb25hbE9mZnNldCA9IDA7CisrCisrICBwLT5wYk1hc2sgPSAoMSA8PCBwLT5wYikgLSAxOworKyAgcC0+bHBNYXNrID0gKDEgPDwgcC0+bHApIC0gMTsKKyt9CisrCisrdm9pZCBMem1hRW5jX0luaXRQcmljZXMoQ0x6bWFFbmMgKnApCisreworKyAgaWYgKCFwLT5mYXN0TW9kZSkKKysgIHsKKysgICAgRmlsbERpc3RhbmNlc1ByaWNlcyhwKTsKKysgICAgRmlsbEFsaWduUHJpY2VzKHApOworKyAgfQorKworKyAgcC0+bGVuRW5jLnRhYmxlU2l6ZSA9CisrICBwLT5yZXBMZW5FbmMudGFibGVTaXplID0KKysgICAgICBwLT5udW1GYXN0Qnl0ZXMgKyAxIC0gTFpNQV9NQVRDSF9MRU5fTUlOOworKyAgTGVuUHJpY2VFbmNfVXBkYXRlVGFibGVzKCZwLT5sZW5FbmMsIDEgPDwgcC0+cGIsIHAtPlByb2JQcmljZXMpOworKyAgTGVuUHJpY2VFbmNfVXBkYXRlVGFibGVzKCZwLT5yZXBMZW5FbmMsIDEgPDwgcC0+cGIsIHAtPlByb2JQcmljZXMpOworK30KKysKKytzdGF0aWMgU1JlcyBMem1hRW5jX0FsbG9jQW5kSW5pdChDTHptYUVuYyAqcCwgVUludDMyIGtlZXBXaW5kb3dTaXplLCBJU3pBbGxvYyAqYWxsb2MsIElTekFsbG9jICphbGxvY0JpZykKKyt7CisrICBVSW50MzIgaTsKKysgIGZvciAoaSA9IDA7IGkgPCAoVUludDMyKWtEaWNMb2dTaXplTWF4Q29tcHJlc3M7IGkrKykKKysgICAgaWYgKHAtPmRpY3RTaXplIDw9ICgoVUludDMyKTEgPDwgaSkpCisrICAgICAgYnJlYWs7CisrICBwLT5kaXN0VGFibGVTaXplID0gaSAqIDI7CisrCisrICBwLT5maW5pc2hlZCA9IEZhbHNlOworKyAgcC0+cmVzdWx0ID0gU1pfT0s7CisrICBSSU5PSyhMem1hRW5jX0FsbG9jKHAsIGtlZXBXaW5kb3dTaXplLCBhbGxvYywgYWxsb2NCaWcpKTsKKysgIEx6bWFFbmNfSW5pdChwKTsKKysgIEx6bWFFbmNfSW5pdFByaWNlcyhwKTsKKysgIHAtPm5vd1BvczY0ID0gMDsKKysgIHJldHVybiBTWl9PSzsKKyt9CisrCisrc3RhdGljIFNSZXMgTHptYUVuY19QcmVwYXJlKENMem1hRW5jSGFuZGxlIHBwLCBJU2VxT3V0U3RyZWFtICpvdXRTdHJlYW0sIElTZXFJblN0cmVhbSAqaW5TdHJlYW0sCisrICAgIElTekFsbG9jICphbGxvYywgSVN6QWxsb2MgKmFsbG9jQmlnKQorK3sKKysgIENMem1hRW5jICpwID0gKENMem1hRW5jICopcHA7CisrICBwLT5tYXRjaEZpbmRlckJhc2Uuc3RyZWFtID0gaW5TdHJlYW07CisrICBwLT5uZWVkSW5pdCA9IDE7CisrICBwLT5yYy5vdXRTdHJlYW0gPSBvdXRTdHJlYW07CisrICByZXR1cm4gTHptYUVuY19BbGxvY0FuZEluaXQocCwgMCwgYWxsb2MsIGFsbG9jQmlnKTsKKyt9CisrCisrU1JlcyBMem1hRW5jX1ByZXBhcmVGb3JMem1hMihDTHptYUVuY0hhbmRsZSBwcCwKKysgICAgSVNlcUluU3RyZWFtICppblN0cmVhbSwgVUludDMyIGtlZXBXaW5kb3dTaXplLAorKyAgICBJU3pBbGxvYyAqYWxsb2MsIElTekFsbG9jICphbGxvY0JpZykKKyt7CisrICBDTHptYUVuYyAqcCA9IChDTHptYUVuYyAqKXBwOworKyAgcC0+bWF0Y2hGaW5kZXJCYXNlLnN0cmVhbSA9IGluU3RyZWFtOworKyAgcC0+bmVlZEluaXQgPSAxOworKyAgcmV0dXJuIEx6bWFFbmNfQWxsb2NBbmRJbml0KHAsIGtlZXBXaW5kb3dTaXplLCBhbGxvYywgYWxsb2NCaWcpOworK30KKysKKytzdGF0aWMgdm9pZCBMem1hRW5jX1NldElucHV0QnVmKENMem1hRW5jICpwLCBjb25zdCBCeXRlICpzcmMsIFNpemVUIHNyY0xlbikKKyt7CisrICBwLT5tYXRjaEZpbmRlckJhc2UuZGlyZWN0SW5wdXQgPSAxOworKyAgcC0+bWF0Y2hGaW5kZXJCYXNlLmJ1ZmZlckJhc2UgPSAoQnl0ZSAqKXNyYzsKKysgIHAtPm1hdGNoRmluZGVyQmFzZS5kaXJlY3RJbnB1dFJlbSA9IHNyY0xlbjsKKyt9CisrCisrU1JlcyBMem1hRW5jX01lbVByZXBhcmUoQ0x6bWFFbmNIYW5kbGUgcHAsIGNvbnN0IEJ5dGUgKnNyYywgU2l6ZVQgc3JjTGVuLAorKyAgICBVSW50MzIga2VlcFdpbmRvd1NpemUsIElTekFsbG9jICphbGxvYywgSVN6QWxsb2MgKmFsbG9jQmlnKQorK3sKKysgIENMem1hRW5jICpwID0gKENMem1hRW5jICopcHA7CisrICBMem1hRW5jX1NldElucHV0QnVmKHAsIHNyYywgc3JjTGVuKTsKKysgIHAtPm5lZWRJbml0ID0gMTsKKysKKysgIHJldHVybiBMem1hRW5jX0FsbG9jQW5kSW5pdChwLCBrZWVwV2luZG93U2l6ZSwgYWxsb2MsIGFsbG9jQmlnKTsKKyt9CisrCisrdm9pZCBMem1hRW5jX0ZpbmlzaChDTHptYUVuY0hhbmRsZSBwcCkKKyt7CisrICAjaWZuZGVmIF83WklQX1NUCisrICBDTHptYUVuYyAqcCA9IChDTHptYUVuYyAqKXBwOworKyAgaWYgKHAtPm10TW9kZSkKKysgICAgTWF0Y2hGaW5kZXJNdF9SZWxlYXNlU3RyZWFtKCZwLT5tYXRjaEZpbmRlck10KTsKKysgICNlbHNlCisrICBwcCA9IHBwOworKyAgI2VuZGlmCisrfQorKworK3R5cGVkZWYgc3RydWN0CisreworKyAgSVNlcU91dFN0cmVhbSBmdW5jVGFibGU7CisrICBCeXRlICpkYXRhOworKyAgU2l6ZVQgcmVtOworKyAgQm9vbCBvdmVyZmxvdzsKKyt9IENTZXFPdXRTdHJlYW1CdWY7CisrCisrc3RhdGljIHNpemVfdCBNeVdyaXRlKHZvaWQgKnBwLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkKKyt7CisrICBDU2VxT3V0U3RyZWFtQnVmICpwID0gKENTZXFPdXRTdHJlYW1CdWYgKilwcDsKKysgIGlmIChwLT5yZW0gPCBzaXplKQorKyAgeworKyAgICBzaXplID0gcC0+cmVtOworKyAgICBwLT5vdmVyZmxvdyA9IFRydWU7CisrICB9CisrICBtZW1jcHkocC0+ZGF0YSwgZGF0YSwgc2l6ZSk7CisrICBwLT5yZW0gLT0gc2l6ZTsKKysgIHAtPmRhdGEgKz0gc2l6ZTsKKysgIHJldHVybiBzaXplOworK30KKysKKysKKytVSW50MzIgTHptYUVuY19HZXROdW1BdmFpbGFibGVCeXRlcyhDTHptYUVuY0hhbmRsZSBwcCkKKyt7CisrICBjb25zdCBDTHptYUVuYyAqcCA9IChDTHptYUVuYyAqKXBwOworKyAgcmV0dXJuIHAtPm1hdGNoRmluZGVyLkdldE51bUF2YWlsYWJsZUJ5dGVzKHAtPm1hdGNoRmluZGVyT2JqKTsKKyt9CisrCisrY29uc3QgQnl0ZSAqTHptYUVuY19HZXRDdXJCdWYoQ0x6bWFFbmNIYW5kbGUgcHApCisreworKyAgY29uc3QgQ0x6bWFFbmMgKnAgPSAoQ0x6bWFFbmMgKilwcDsKKysgIHJldHVybiBwLT5tYXRjaEZpbmRlci5HZXRQb2ludGVyVG9DdXJyZW50UG9zKHAtPm1hdGNoRmluZGVyT2JqKSAtIHAtPmFkZGl0aW9uYWxPZmZzZXQ7CisrfQorKworK1NSZXMgTHptYUVuY19Db2RlT25lTWVtQmxvY2soQ0x6bWFFbmNIYW5kbGUgcHAsIEJvb2wgcmVJbml0LAorKyAgICBCeXRlICpkZXN0LCBzaXplX3QgKmRlc3RMZW4sIFVJbnQzMiBkZXNpcmVkUGFja1NpemUsIFVJbnQzMiAqdW5wYWNrU2l6ZSkKKyt7CisrICBDTHptYUVuYyAqcCA9IChDTHptYUVuYyAqKXBwOworKyAgVUludDY0IG5vd1BvczY0OworKyAgU1JlcyByZXM7CisrICBDU2VxT3V0U3RyZWFtQnVmIG91dFN0cmVhbTsKKysKKysgIG91dFN0cmVhbS5mdW5jVGFibGUuV3JpdGUgPSBNeVdyaXRlOworKyAgb3V0U3RyZWFtLmRhdGEgPSBkZXN0OworKyAgb3V0U3RyZWFtLnJlbSA9ICpkZXN0TGVuOworKyAgb3V0U3RyZWFtLm92ZXJmbG93ID0gRmFsc2U7CisrCisrICBwLT53cml0ZUVuZE1hcmsgPSBGYWxzZTsKKysgIHAtPmZpbmlzaGVkID0gRmFsc2U7CisrICBwLT5yZXN1bHQgPSBTWl9PSzsKKysKKysgIGlmIChyZUluaXQpCisrICAgIEx6bWFFbmNfSW5pdChwKTsKKysgIEx6bWFFbmNfSW5pdFByaWNlcyhwKTsKKysgIG5vd1BvczY0ID0gcC0+bm93UG9zNjQ7CisrICBSYW5nZUVuY19Jbml0KCZwLT5yYyk7CisrICBwLT5yYy5vdXRTdHJlYW0gPSAmb3V0U3RyZWFtLmZ1bmNUYWJsZTsKKysKKysgIHJlcyA9IEx6bWFFbmNfQ29kZU9uZUJsb2NrKHAsIFRydWUsIGRlc2lyZWRQYWNrU2l6ZSwgKnVucGFja1NpemUpOworKworKyAgKnVucGFja1NpemUgPSAoVUludDMyKShwLT5ub3dQb3M2NCAtIG5vd1BvczY0KTsKKysgICpkZXN0TGVuIC09IG91dFN0cmVhbS5yZW07CisrICBpZiAob3V0U3RyZWFtLm92ZXJmbG93KQorKyAgICByZXR1cm4gU1pfRVJST1JfT1VUUFVUX0VPRjsKKysKKysgIHJldHVybiByZXM7CisrfQorKworK3N0YXRpYyBTUmVzIEx6bWFFbmNfRW5jb2RlMihDTHptYUVuYyAqcCwgSUNvbXByZXNzUHJvZ3Jlc3MgKnByb2dyZXNzKQorK3sKKysgIFNSZXMgcmVzID0gU1pfT0s7CisrCisrICAjaWZuZGVmIF83WklQX1NUCisrICBCeXRlIGFsbG9jYUR1bW15WzB4MzAwXTsKKysgIGludCBpID0gMDsKKysgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorKyAgICBhbGxvY2FEdW1teVtpXSA9IChCeXRlKWk7CisrICAjZW5kaWYKKysKKysgIGZvciAoOzspCisrICB7CisrICAgIHJlcyA9IEx6bWFFbmNfQ29kZU9uZUJsb2NrKHAsIEZhbHNlLCAwLCAwKTsKKysgICAgaWYgKHJlcyAhPSBTWl9PSyB8fCBwLT5maW5pc2hlZCAhPSAwKQorKyAgICAgIGJyZWFrOworKyAgICBpZiAocHJvZ3Jlc3MgIT0gMCkKKysgICAgeworKyAgICAgIHJlcyA9IHByb2dyZXNzLT5Qcm9ncmVzcyhwcm9ncmVzcywgcC0+bm93UG9zNjQsIFJhbmdlRW5jX0dldFByb2Nlc3NlZCgmcC0+cmMpKTsKKysgICAgICBpZiAocmVzICE9IFNaX09LKQorKyAgICAgIHsKKysgICAgICAgIHJlcyA9IFNaX0VSUk9SX1BST0dSRVNTOworKyAgICAgICAgYnJlYWs7CisrICAgICAgfQorKyAgICB9CisrICB9CisrICBMem1hRW5jX0ZpbmlzaChwKTsKKysgIHJldHVybiByZXM7CisrfQorKworK1NSZXMgTHptYUVuY19FbmNvZGUoQ0x6bWFFbmNIYW5kbGUgcHAsIElTZXFPdXRTdHJlYW0gKm91dFN0cmVhbSwgSVNlcUluU3RyZWFtICppblN0cmVhbSwgSUNvbXByZXNzUHJvZ3Jlc3MgKnByb2dyZXNzLAorKyAgICBJU3pBbGxvYyAqYWxsb2MsIElTekFsbG9jICphbGxvY0JpZykKKyt7CisrICBSSU5PSyhMem1hRW5jX1ByZXBhcmUocHAsIG91dFN0cmVhbSwgaW5TdHJlYW0sIGFsbG9jLCBhbGxvY0JpZykpOworKyAgcmV0dXJuIEx6bWFFbmNfRW5jb2RlMigoQ0x6bWFFbmMgKilwcCwgcHJvZ3Jlc3MpOworK30KKysKKytTUmVzIEx6bWFFbmNfV3JpdGVQcm9wZXJ0aWVzKENMem1hRW5jSGFuZGxlIHBwLCBCeXRlICpwcm9wcywgU2l6ZVQgKnNpemUpCisreworKyAgQ0x6bWFFbmMgKnAgPSAoQ0x6bWFFbmMgKilwcDsKKysgIGludCBpOworKyAgVUludDMyIGRpY3RTaXplID0gcC0+ZGljdFNpemU7CisrICBpZiAoKnNpemUgPCBMWk1BX1BST1BTX1NJWkUpCisrICAgIHJldHVybiBTWl9FUlJPUl9QQVJBTTsKKysgICpzaXplID0gTFpNQV9QUk9QU19TSVpFOworKyAgcHJvcHNbMF0gPSAoQnl0ZSkoKHAtPnBiICogNSArIHAtPmxwKSAqIDkgKyBwLT5sYyk7CisrCisrICBmb3IgKGkgPSAxMTsgaSA8PSAzMDsgaSsrKQorKyAgeworKyAgICBpZiAoZGljdFNpemUgPD0gKChVSW50MzIpMiA8PCBpKSkKKysgICAgeworKyAgICAgIGRpY3RTaXplID0gKDIgPDwgaSk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgaWYgKGRpY3RTaXplIDw9ICgoVUludDMyKTMgPDwgaSkpCisrICAgIHsKKysgICAgICBkaWN0U2l6ZSA9ICgzIDw8IGkpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICB9CisrCisrICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorKyAgICBwcm9wc1sxICsgaV0gPSAoQnl0ZSkoZGljdFNpemUgPj4gKDggKiBpKSk7CisrICByZXR1cm4gU1pfT0s7CisrfQorKworK1NSZXMgTHptYUVuY19NZW1FbmNvZGUoQ0x6bWFFbmNIYW5kbGUgcHAsIEJ5dGUgKmRlc3QsIFNpemVUICpkZXN0TGVuLCBjb25zdCBCeXRlICpzcmMsIFNpemVUIHNyY0xlbiwKKysgICAgaW50IHdyaXRlRW5kTWFyaywgSUNvbXByZXNzUHJvZ3Jlc3MgKnByb2dyZXNzLCBJU3pBbGxvYyAqYWxsb2MsIElTekFsbG9jICphbGxvY0JpZykKKyt7CisrICBTUmVzIHJlczsKKysgIENMem1hRW5jICpwID0gKENMem1hRW5jICopcHA7CisrCisrICBDU2VxT3V0U3RyZWFtQnVmIG91dFN0cmVhbTsKKysKKysgIEx6bWFFbmNfU2V0SW5wdXRCdWYocCwgc3JjLCBzcmNMZW4pOworKworKyAgb3V0U3RyZWFtLmZ1bmNUYWJsZS5Xcml0ZSA9IE15V3JpdGU7CisrICBvdXRTdHJlYW0uZGF0YSA9IGRlc3Q7CisrICBvdXRTdHJlYW0ucmVtID0gKmRlc3RMZW47CisrICBvdXRTdHJlYW0ub3ZlcmZsb3cgPSBGYWxzZTsKKysKKysgIHAtPndyaXRlRW5kTWFyayA9IHdyaXRlRW5kTWFyazsKKysKKysgIHAtPnJjLm91dFN0cmVhbSA9ICZvdXRTdHJlYW0uZnVuY1RhYmxlOworKyAgcmVzID0gTHptYUVuY19NZW1QcmVwYXJlKHBwLCBzcmMsIHNyY0xlbiwgMCwgYWxsb2MsIGFsbG9jQmlnKTsKKysgIGlmIChyZXMgPT0gU1pfT0spCisrICAgIHJlcyA9IEx6bWFFbmNfRW5jb2RlMihwLCBwcm9ncmVzcyk7CisrCisrICAqZGVzdExlbiAtPSBvdXRTdHJlYW0ucmVtOworKyAgaWYgKG91dFN0cmVhbS5vdmVyZmxvdykKKysgICAgcmV0dXJuIFNaX0VSUk9SX09VVFBVVF9FT0Y7CisrICByZXR1cm4gcmVzOworK30KKysKKytTUmVzIEx6bWFFbmNvZGUoQnl0ZSAqZGVzdCwgU2l6ZVQgKmRlc3RMZW4sIGNvbnN0IEJ5dGUgKnNyYywgU2l6ZVQgc3JjTGVuLAorKyAgICBjb25zdCBDTHptYUVuY1Byb3BzICpwcm9wcywgQnl0ZSAqcHJvcHNFbmNvZGVkLCBTaXplVCAqcHJvcHNTaXplLCBpbnQgd3JpdGVFbmRNYXJrLAorKyAgICBJQ29tcHJlc3NQcm9ncmVzcyAqcHJvZ3Jlc3MsIElTekFsbG9jICphbGxvYywgSVN6QWxsb2MgKmFsbG9jQmlnKQorK3sKKysgIENMem1hRW5jICpwID0gKENMem1hRW5jICopTHptYUVuY19DcmVhdGUoYWxsb2MpOworKyAgU1JlcyByZXM7CisrICBpZiAocCA9PSAwKQorKyAgICByZXR1cm4gU1pfRVJST1JfTUVNOworKworKyAgcmVzID0gTHptYUVuY19TZXRQcm9wcyhwLCBwcm9wcyk7CisrICBpZiAocmVzID09IFNaX09LKQorKyAgeworKyAgICByZXMgPSBMem1hRW5jX1dyaXRlUHJvcGVydGllcyhwLCBwcm9wc0VuY29kZWQsIHByb3BzU2l6ZSk7CisrICAgIGlmIChyZXMgPT0gU1pfT0spCisrICAgICAgcmVzID0gTHptYUVuY19NZW1FbmNvZGUocCwgZGVzdCwgZGVzdExlbiwgc3JjLCBzcmNMZW4sCisrICAgICAgICAgIHdyaXRlRW5kTWFyaywgcHJvZ3Jlc3MsIGFsbG9jLCBhbGxvY0JpZyk7CisrICB9CisrCisrICBMem1hRW5jX0Rlc3Ryb3kocCwgYWxsb2MsIGFsbG9jQmlnKTsKKysgIHJldHVybiByZXM7CisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGliL2x6bWEvTWFrZWZpbGUKK0BAIC0wLDAgKzEsNyBAQAorK2x6bWFfY29tcHJlc3Mtb2JqcyA6PSBMekZpbmQubyBMem1hRW5jLm8KKytsem1hX2RlY29tcHJlc3Mtb2JqcyA6PSBMem1hRGVjLm8KKysKKytvYmotJChDT05GSUdfTFpNQV9DT01QUkVTUykgKz0gbHptYV9jb21wcmVzcy5vCisrb2JqLSQoQ09ORklHX0xaTUFfREVDT01QUkVTUykgKz0gbHptYV9kZWNvbXByZXNzLm8KKysKKytFWFRSQV9DRkxBR1MgKz0gLUlpbmNsdWRlL2xpbnV4IC1JaW5jbHVkZS9saW51eC9sem1hIC1pbmNsdWRlIHR5cGVzLmgKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzUzMi1qZmZzMl9lb2ZkZXRlY3QucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC81MzItamZmczJfZW9mZGV0ZWN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNGFiOWIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC81MzItamZmczJfZW9mZGV0ZWN0LnBhdGNoCkBAIC0wLDAgKzEsNjUgQEAKK0Zyb206IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KK1N1YmplY3Q6IGZzOiBqZmZzMjogRU9GIG1hcmtlcgorCitTaWduZWQtb2ZmLWJ5OiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CistLS0KKyBmcy9qZmZzMi9idWlsZC5jIHwgMTAgKysrKysrKysrKworIGZzL2pmZnMyL3NjYW4uYyAgfCAyMSArKysrKysrKysrKysrKysrKysrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDI5IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKKy0tLSBhL2ZzL2pmZnMyL2J1aWxkLmMKKysrKyBiL2ZzL2pmZnMyL2J1aWxkLmMKK0BAIC0xMTcsNiArMTE3LDE2IEBAIHN0YXRpYyBpbnQgamZmczJfYnVpbGRfZmlsZXN5c3RlbShzdHJ1Y3QKKyAJZGJnX2ZzYnVpbGQoInNjYW5uZWQgZmxhc2ggY29tcGxldGVseVxuIik7CisgCWpmZnMyX2RiZ19kdW1wX2Jsb2NrX2xpc3RzX25vbG9jayhjKTsKKyAKKysJaWYgKGMtPmZsYWdzICYgKDEgPDwgNykpIHsKKysJCXByaW50aygiJXMoKTogdW5sb2NraW5nIHRoZSBtdGQgZGV2aWNlLi4uICIsIF9fZnVuY19fKTsKKysJCW10ZF91bmxvY2soYy0+bXRkLCAwLCBjLT5tdGQtPnNpemUpOworKwkJcHJpbnRrKCJkb25lLlxuIik7CisrCisrCQlwcmludGsoIiVzKCk6IGVyYXNpbmcgYWxsIGJsb2NrcyBhZnRlciB0aGUgZW5kIG1hcmtlci4uLiAiLCBfX2Z1bmNfXyk7CisrCQlqZmZzMl9lcmFzZV9wZW5kaW5nX2Jsb2NrcyhjLCAtMSk7CisrCQlwcmludGsoImRvbmUuXG4iKTsKKysJfQorKworIAlkYmdfZnNidWlsZCgicGFzcyAxIHN0YXJ0aW5nXG4iKTsKKyAJYy0+ZmxhZ3MgfD0gSkZGUzJfU0JfRkxBR19CVUlMRElORzsKKyAJLyogTm93IHNjYW4gdGhlIGRpcmVjdG9yeSB0cmVlLCBpbmNyZWFzaW5nIG5saW5rIGFjY29yZGluZyB0byBldmVyeSBkaXJlbnQgZm91bmQuICovCistLS0gYS9mcy9qZmZzMi9zY2FuLmMKKysrKyBiL2ZzL2pmZnMyL3NjYW4uYworQEAgLTE0OCw4ICsxNDgsMTQgQEAgaW50IGpmZnMyX3NjYW5fbWVkaXVtKHN0cnVjdCBqZmZzMl9zYl9pbgorIAkJLyogcmVzZXQgc3VtbWFyeSBpbmZvIGZvciBuZXh0IGVyYXNlYmxvY2sgc2NhbiAqLworIAkJamZmczJfc3VtX3Jlc2V0X2NvbGxlY3RlZChzKTsKKyAKKy0JCXJldCA9IGpmZnMyX3NjYW5fZXJhc2VibG9jayhjLCBqZWIsIGJ1Zl9zaXplP2ZsYXNoYnVmOihmbGFzaGJ1ZitqZWItPm9mZnNldCksCistCQkJCQkJYnVmX3NpemUsIHMpOworKwkJaWYgKGMtPmZsYWdzICYgKDEgPDwgNykpIHsKKysJCQlpZiAobXRkX2Jsb2NrX2lzYmFkKGMtPm10ZCwgamViLT5vZmZzZXQpKQorKwkJCQlyZXQgPSBCTEtfU1RBVEVfQkFEQkxPQ0s7CisrCQkJZWxzZQorKwkJCQlyZXQgPSBCTEtfU1RBVEVfQUxMRkY7CisrCQl9IGVsc2UKKysJCQlyZXQgPSBqZmZzMl9zY2FuX2VyYXNlYmxvY2soYywgamViLCBidWZfc2l6ZT9mbGFzaGJ1ZjooZmxhc2hidWYramViLT5vZmZzZXQpLAorKwkJCQkJCQlidWZfc2l6ZSwgcyk7CisgCisgCQlpZiAocmV0IDwgMCkKKyAJCQlnb3RvIG91dDsKK0BAIC01NjQsNiArNTcwLDE3IEBAIGZ1bGxfc2NhbjoKKyAJCQlyZXR1cm4gZXJyOworIAl9CisgCisrCWlmICgoYnVmWzBdID09IDB4ZGUpICYmCisrCQkoYnVmWzFdID09IDB4YWQpICYmCisrCQkoYnVmWzJdID09IDB4YzApICYmCisrCQkoYnVmWzNdID09IDB4ZGUpKSB7CisrCQkvKiBlbmQgb2YgZmlsZXN5c3RlbS4gZXJhc2UgZXZlcnl0aGluZyBhZnRlciB0aGlzIHBvaW50ICovCisrCQlwcmludGsoIiVzKCk6IEVuZCBvZiBmaWxlc3lzdGVtIG1hcmtlciBmb3VuZCBhdCAweCV4XG4iLCBfX2Z1bmNfXywgamViLT5vZmZzZXQpOworKwkJYy0+ZmxhZ3MgfD0gKDEgPDwgNyk7CisrCisrCQlyZXR1cm4gQkxLX1NUQVRFX0FMTEZGOworKwl9CisrCisgCS8qIFdlIHRlbXBvcmFyaWx5IHVzZSAnb2ZzJyBhcyBhIHBvaW50ZXIgaW50byB0aGUgYnVmZmVyL2plYiAqLworIAlvZnMgPSAwOworIAltYXhfb2ZzID0gRU1QVFlfU0NBTl9TSVpFKGMtPnNlY3Rvcl9zaXplKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzYwMC1uZXRmaWx0ZXJfY29ubnRyYWNrX2ZsdXNoLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNjAwLW5ldGZpbHRlcl9jb25udHJhY2tfZmx1c2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFmOGM3OAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzYwMC1uZXRmaWx0ZXJfY29ubnRyYWNrX2ZsdXNoLnBhdGNoCkBAIC0wLDAgKzEsODggQEAKK0Zyb206IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KK1N1YmplY3Q6IG5ldGZpbHRlcjogYWRkIHN1cHBvcnQgZm9yIGZsdXNoaW5nIGNvbm50cmFjayB2aWEgL3Byb2MKKworbGVkZS1jb21taXQgODE5M2JiZTU5YTc0ZDM0ZDZhMjZkNGE4Y2I4NTdiMTk1MjkwNTMxNAorU2lnbmVkLW9mZi1ieTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorLS0tCisgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jIHwgNTkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDU4IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCisrKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKK0BAIC05LDYgKzksNyBAQAorICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisgI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisrI2luY2x1ZGUgPGxpbnV4L2luZXQuaD4KKyAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KKyAjaWZkZWYgQ09ORklHX1NZU0NUTAorICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KK0BAIC00NTUsNiArNDU2LDU2IEBAIHN0YXRpYyBpbnQgY3RfY3B1X3NlcV9zaG93KHN0cnVjdCBzZXFfZmkKKyAJcmV0dXJuIDA7CisgfQorIAorK3N0cnVjdCBraWxsX3JlcXVlc3QgeworKwl1MTYgZmFtaWx5OworKwl1bmlvbiBuZl9pbmV0X2FkZHIgYWRkcjsKKyt9OworKworK3N0YXRpYyBpbnQga2lsbF9tYXRjaGluZyhzdHJ1Y3QgbmZfY29ubiAqaSwgdm9pZCAqZGF0YSkKKyt7CisrCXN0cnVjdCBraWxsX3JlcXVlc3QgKmtyID0gZGF0YTsKKysJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdDEgPSAmaS0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGU7CisrCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnQyID0gJmktPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlOworKworKwlpZiAoIWtyLT5mYW1pbHkpCisrCQlyZXR1cm4gMTsKKysKKysJaWYgKHQxLT5zcmMubDNudW0gIT0ga3ItPmZhbWlseSkKKysJCXJldHVybiAwOworKworKwlyZXR1cm4gKG5mX2luZXRfYWRkcl9jbXAoJmtyLT5hZGRyLCAmdDEtPnNyYy51MykgfHwKKysJICAgICAgICBuZl9pbmV0X2FkZHJfY21wKCZrci0+YWRkciwgJnQxLT5kc3QudTMpIHx8CisrCSAgICAgICAgbmZfaW5ldF9hZGRyX2NtcCgma3ItPmFkZHIsICZ0Mi0+c3JjLnUzKSB8fAorKwkgICAgICAgIG5mX2luZXRfYWRkcl9jbXAoJmtyLT5hZGRyLCAmdDItPmRzdC51MykpOworK30KKysKKytzdGF0aWMgaW50IGN0X2ZpbGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorK3sKKysJc3RydWN0IHNlcV9maWxlICpzZXEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisrCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOworKwlzdHJ1Y3Qga2lsbF9yZXF1ZXN0IGtyID0geyB9OworKworKwlpZiAoY291bnQgPT0gMCkKKysJCXJldHVybiAwOworKworKwlpZiAoY291bnQgPj0gSU5FVDZfQUREUlNUUkxFTikKKysJCWNvdW50ID0gSU5FVDZfQUREUlNUUkxFTiAtIDE7CisrCisrCWlmIChzdHJuY2hyKGJ1ZiwgY291bnQsICc6JykpIHsKKysJCWtyLmZhbWlseSA9IEFGX0lORVQ2OworKwkJaWYgKCFpbjZfcHRvbihidWYsIGNvdW50LCAodm9pZCAqKSZrci5hZGRyLCAnXG4nLCBOVUxMKSkKKysJCQlyZXR1cm4gLUVJTlZBTDsKKysJfSBlbHNlIGlmIChzdHJuY2hyKGJ1ZiwgY291bnQsICcuJykpIHsKKysJCWtyLmZhbWlseSA9IEFGX0lORVQ7CisrCQlpZiAoIWluNF9wdG9uKGJ1ZiwgY291bnQsICh2b2lkICopJmtyLmFkZHIsICdcbicsIE5VTEwpKQorKwkJCXJldHVybiAtRUlOVkFMOworKwl9CisrCisrCW5mX2N0X2l0ZXJhdGVfY2xlYW51cF9uZXQobmV0LCBraWxsX21hdGNoaW5nLCAma3IsIDAsIDApOworKworKwlyZXR1cm4gMDsKKyt9CisrCisgc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBjdF9jcHVfc2VxX29wcyA9IHsKKyAJLnN0YXJ0CT0gY3RfY3B1X3NlcV9zdGFydCwKKyAJLm5leHQJPSBjdF9jcHVfc2VxX25leHQsCitAQCAtNDY4LDggKzUxOSw5IEBAIHN0YXRpYyBpbnQgbmZfY29ubnRyYWNrX3N0YW5kYWxvbmVfaW5pdF8KKyAJa3VpZF90IHJvb3RfdWlkOworIAlrZ2lkX3Qgcm9vdF9naWQ7CisgCistCXBkZSA9IHByb2NfY3JlYXRlX25ldCgibmZfY29ubnRyYWNrIiwgMDQ0MCwgbmV0LT5wcm9jX25ldCwgJmN0X3NlcV9vcHMsCistCQkJc2l6ZW9mKHN0cnVjdCBjdF9pdGVyX3N0YXRlKSk7CisrCXBkZSA9IHByb2NfY3JlYXRlX25ldF9kYXRhX3dyaXRlKCJuZl9jb25udHJhY2siLCAwNDQwLCBuZXQtPnByb2NfbmV0LAorKwkJCQkJICZjdF9zZXFfb3BzLCAmY3RfZmlsZV93cml0ZSwKKysJCQkJCSBzaXplb2Yoc3RydWN0IGN0X2l0ZXJfc3RhdGUpLCBOVUxMKTsKKyAJaWYgKCFwZGUpCisgCQlnb3RvIG91dF9uZl9jb25udHJhY2s7CisgCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC82MTAtbmV0ZmlsdGVyX21hdGNoX2J5cGFzc19kZWZhdWx0X2NoZWNrcy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzYxMC1uZXRmaWx0ZXJfbWF0Y2hfYnlwYXNzX2RlZmF1bHRfY2hlY2tzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwM2FjODIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC82MTAtbmV0ZmlsdGVyX21hdGNoX2J5cGFzc19kZWZhdWx0X2NoZWNrcy5wYXRjaApAQCAtMCwwICsxLDExMCBAQAorRnJvbTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorU3ViamVjdDoga2VybmVsOiBhZGQgYSBuZXcgdmVyc2lvbiBvZiBteSBuZXRmaWx0ZXIgc3BlZWR1cCBwYXRjaGVzIGZvciBsaW51eCAyLjYuMzkgYW5kIDMuMAorCitTaWduZWQtb2ZmLWJ5OiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CistLS0KKyBpbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmggfCAgMSArCisgbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jICAgICAgICAgICAgICAgIHwgMzcgKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAzOCBpbnNlcnRpb25zKCspCisKKy0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaAorKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oCitAQCAtODksNiArODksNyBAQCBzdHJ1Y3QgaXB0X2lwIHsKKyAjZGVmaW5lIElQVF9GX0ZSQUcJCTB4MDEJLyogU2V0IGlmIHJ1bGUgaXMgYSBmcmFnbWVudCBydWxlICovCisgI2RlZmluZSBJUFRfRl9HT1RPCQkweDAyCS8qIFNldCBpZiBqdW1wIGlzIGEgZ290byAqLworICNkZWZpbmUgSVBUX0ZfTUFTSwkJMHgwMwkvKiBBbGwgcG9zc2libGUgZmxhZyBiaXRzIG1hc2suICovCisrI2RlZmluZSBJUFRfRl9OT19ERUZfTUFUQ0gJMHg4MAkvKiBJbnRlcm5hbDogbm8gZGVmYXVsdCBtYXRjaCBydWxlcyBwcmVzZW50ICovCisgCisgLyogVmFsdWVzIGZvciAiaW52IiBmaWVsZCBpbiBzdHJ1Y3QgaXB0X2lwLiAqLworICNkZWZpbmUgSVBUX0lOVl9WSUFfSU4JCTB4MDEJLyogSW52ZXJ0IHRoZSBzZW5zZSBvZiBJTiBJRkFDRS4gKi8KKy0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYworKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCitAQCAtNTAsNiArNTAsOSBAQCBpcF9wYWNrZXRfbWF0Y2goY29uc3Qgc3RydWN0IGlwaGRyICppcCwKKyB7CisgCXVuc2lnbmVkIGxvbmcgcmV0OworIAorKwlpZiAoaXBpbmZvLT5mbGFncyAmIElQVF9GX05PX0RFRl9NQVRDSCkKKysJCXJldHVybiB0cnVlOworKworIAlpZiAoTkZfSU5WRihpcGluZm8sIElQVF9JTlZfU1JDSVAsCisgCQkgICAgKGlwLT5zYWRkciAmIGlwaW5mby0+c21zay5zX2FkZHIpICE9IGlwaW5mby0+c3JjLnNfYWRkcikgfHwKKyAJICAgIE5GX0lOVkYoaXBpbmZvLCBJUFRfSU5WX0RTVElQLAorQEAgLTgwLDYgKzgzLDI5IEBAIGlwX3BhY2tldF9tYXRjaChjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwLAorIAlyZXR1cm4gdHJ1ZTsKKyB9CisgCisrc3RhdGljIHZvaWQKKytpcF9jaGVja2RlZmF1bHQoc3RydWN0IGlwdF9pcCAqaXApCisreworKwlzdGF0aWMgY29uc3QgY2hhciBpZmFjZV9tYXNrW0lGTkFNU0laXSA9IHt9OworKworKwlpZiAoaXAtPmludmZsYWdzIHx8IGlwLT5mbGFncyAmIElQVF9GX0ZSQUcpCisrCQlyZXR1cm47CisrCisrCWlmIChtZW1jbXAoaXAtPmluaWZhY2VfbWFzaywgaWZhY2VfbWFzaywgSUZOQU1TSVopICE9IDApCisrCQlyZXR1cm47CisrCisrCWlmIChtZW1jbXAoaXAtPm91dGlmYWNlX21hc2ssIGlmYWNlX21hc2ssIElGTkFNU0laKSAhPSAwKQorKwkJcmV0dXJuOworKworKwlpZiAoaXAtPnNtc2suc19hZGRyIHx8IGlwLT5kbXNrLnNfYWRkcikKKysJCXJldHVybjsKKysKKysJaWYgKGlwLT5wcm90bykKKysJCXJldHVybjsKKysKKysJaXAtPmZsYWdzIHw9IElQVF9GX05PX0RFRl9NQVRDSDsKKyt9CisrCisgc3RhdGljIGJvb2wKKyBpcF9jaGVja2VudHJ5KGNvbnN0IHN0cnVjdCBpcHRfaXAgKmlwKQorIHsKK0BAIC01MjQsNiArNTUwLDggQEAgZmluZF9jaGVja19lbnRyeShzdHJ1Y3QgaXB0X2VudHJ5ICplLCBzdAorIAlzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gbXRwYXI7CisgCXN0cnVjdCB4dF9lbnRyeV9tYXRjaCAqZW1hdGNoOworIAorKwlpcF9jaGVja2RlZmF1bHQoJmUtPmlwKTsKKysKKyAJaWYgKCF4dF9wZXJjcHVfY291bnRlcl9hbGxvYyhhbGxvY19zdGF0ZSwgJmUtPmNvdW50ZXJzKSkKKyAJCXJldHVybiAtRU5PTUVNOworIAorQEAgLTgxOCw2ICs4NDYsNyBAQCBjb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfCisgCWNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdGFibGUtPnByaXZhdGU7CisgCWludCByZXQgPSAwOworIAljb25zdCB2b2lkICpsb2NfY3B1X2VudHJ5OworKwl1OCBmbGFnczsKKyAKKyAJY291bnRlcnMgPSBhbGxvY19jb3VudGVycyh0YWJsZSk7CisgCWlmIChJU19FUlIoY291bnRlcnMpKQorQEAgLTg0NSw2ICs4NzQsMTQgQEAgY29weV9lbnRyaWVzX3RvX3VzZXIodW5zaWduZWQgaW50IHRvdGFsXworIAkJCWdvdG8gZnJlZV9jb3VudGVyczsKKyAJCX0KKyAKKysJCWZsYWdzID0gZS0+aXAuZmxhZ3MgJiBJUFRfRl9NQVNLOworKwkJaWYgKGNvcHlfdG9fdXNlcih1c2VycHRyICsgb2ZmCisrCQkJCSArIG9mZnNldG9mKHN0cnVjdCBpcHRfZW50cnksIGlwLmZsYWdzKSwKKysJCQkJICZmbGFncywgc2l6ZW9mKGZsYWdzKSkgIT0gMCkgeworKwkJCXJldCA9IC1FRkFVTFQ7CisrCQkJZ290byBmcmVlX2NvdW50ZXJzOworKwkJfQorKworIAkJZm9yIChpID0gc2l6ZW9mKHN0cnVjdCBpcHRfZW50cnkpOworIAkJICAgICBpIDwgZS0+dGFyZ2V0X29mZnNldDsKKyAJCSAgICAgaSArPSBtLT51Lm1hdGNoX3NpemUpIHsKK0BAIC0xMjI1LDEyICsxMjYyLDE1IEBAIGNvbXBhdF9jb3B5X2VudHJ5X3RvX3VzZXIoc3RydWN0IGlwdF9lbnQKKyAJY29tcGF0X3VpbnRfdCBvcmlnc2l6ZTsKKyAJY29uc3Qgc3RydWN0IHh0X2VudHJ5X21hdGNoICplbWF0Y2g7CisgCWludCByZXQgPSAwOworKwl1OCBmbGFncyA9IGUtPmlwLmZsYWdzICYgSVBUX0ZfTUFTSzsKKyAKKyAJb3JpZ3NpemUgPSAqc2l6ZTsKKyAJY2UgPSAqZHN0cHRyOworIAlpZiAoY29weV90b191c2VyKGNlLCBlLCBzaXplb2Yoc3RydWN0IGlwdF9lbnRyeSkpICE9IDAgfHwKKyAJICAgIGNvcHlfdG9fdXNlcigmY2UtPmNvdW50ZXJzLCAmY291bnRlcnNbaV0sCistCSAgICBzaXplb2YoY291bnRlcnNbaV0pKSAhPSAwKQorKwkgICAgc2l6ZW9mKGNvdW50ZXJzW2ldKSkgIT0gMCB8fAorKwkgICAgY29weV90b191c2VyKCZjZS0+aXAuZmxhZ3MsICZmbGFncywKKysJICAgIHNpemVvZihmbGFncykpICE9IDApCisgCQlyZXR1cm4gLUVGQVVMVDsKKyAKKyAJKmRzdHB0ciArPSBzaXplb2Yoc3RydWN0IGNvbXBhdF9pcHRfZW50cnkpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNjExLW5ldGZpbHRlcl9tYXRjaF9ieXBhc3NfZGVmYXVsdF90YWJsZS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzYxMS1uZXRmaWx0ZXJfbWF0Y2hfYnlwYXNzX2RlZmF1bHRfdGFibGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFmNzM4YQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzYxMS1uZXRmaWx0ZXJfbWF0Y2hfYnlwYXNzX2RlZmF1bHRfdGFibGUucGF0Y2gKQEAgLTAsMCArMSwxMDYgQEAKK0Zyb206IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KK1N1YmplY3Q6IG5ldGZpbHRlcjogbWF0Y2ggYnlwYXNzIGRlZmF1bHQgdGFibGUKKworU2lnbmVkLW9mZi1ieTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorLS0tCisgbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jIHwgNzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDU4IGluc2VydGlvbnMoKyksIDIxIGRlbGV0aW9ucygtKQorCistLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKKysrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYworQEAgLTI0Niw2ICsyNDYsMzMgQEAgc3RydWN0IGlwdF9lbnRyeSAqaXB0X25leHRfZW50cnkoY29uc3QgcworIAlyZXR1cm4gKHZvaWQgKillbnRyeSArIGVudHJ5LT5uZXh0X29mZnNldDsKKyB9CisgCisrc3RhdGljIGJvb2wKKytpcHRfaGFuZGxlX2RlZmF1bHRfcnVsZShzdHJ1Y3QgaXB0X2VudHJ5ICplLCB1bnNpZ25lZCBpbnQgKnZlcmRpY3QpCisreworKwlzdHJ1Y3QgeHRfZW50cnlfdGFyZ2V0ICp0OworKwlzdHJ1Y3QgeHRfc3RhbmRhcmRfdGFyZ2V0ICpzdDsKKysKKysJaWYgKGUtPnRhcmdldF9vZmZzZXQgIT0gc2l6ZW9mKHN0cnVjdCBpcHRfZW50cnkpKQorKwkJcmV0dXJuIGZhbHNlOworKworKwlpZiAoIShlLT5pcC5mbGFncyAmIElQVF9GX05PX0RFRl9NQVRDSCkpCisrCQlyZXR1cm4gZmFsc2U7CisrCisrCXQgPSBpcHRfZ2V0X3RhcmdldChlKTsKKysJaWYgKHQtPnUua2VybmVsLnRhcmdldC0+dGFyZ2V0KQorKwkJcmV0dXJuIGZhbHNlOworKworKwlzdCA9IChzdHJ1Y3QgeHRfc3RhbmRhcmRfdGFyZ2V0ICopIHQ7CisrCWlmIChzdC0+dmVyZGljdCA9PSBYVF9SRVRVUk4pCisrCQlyZXR1cm4gZmFsc2U7CisrCisrCWlmIChzdC0+dmVyZGljdCA+PSAwKQorKwkJcmV0dXJuIGZhbHNlOworKworKwkqdmVyZGljdCA9ICh1bnNpZ25lZCkoLXN0LT52ZXJkaWN0KSAtIDE7CisrCXJldHVybiB0cnVlOworK30KKysKKyAvKiBSZXR1cm5zIG9uZSBvZiB0aGUgZ2VuZXJpYyBmaXJld2FsbCBwb2xpY2llcywgbGlrZSBORl9BQ0NFUFQuICovCisgdW5zaWduZWQgaW50CisgaXB0X2RvX3RhYmxlKHN0cnVjdCBza19idWZmICpza2IsCitAQCAtMjY2LDI3ICsyOTMsMjggQEAgaXB0X2RvX3RhYmxlKHN0cnVjdCBza19idWZmICpza2IsCisgCXVuc2lnbmVkIGludCBhZGRlbmQ7CisgCisgCS8qIEluaXRpYWxpemF0aW9uICovCisrCVdBUk5fT04oISh0YWJsZS0+dmFsaWRfaG9va3MgJiAoMSA8PCBob29rKSkpOworKwlsb2NhbF9iaF9kaXNhYmxlKCk7CisrCXByaXZhdGUgPSBSRUFEX09OQ0UodGFibGUtPnByaXZhdGUpOyAvKiBBZGRyZXNzIGRlcGVuZGVuY3kuICovCisrCWNwdSAgICAgICAgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisrCXRhYmxlX2Jhc2UgPSBwcml2YXRlLT5lbnRyaWVzOworKworKwllID0gZ2V0X2VudHJ5KHRhYmxlX2Jhc2UsIHByaXZhdGUtPmhvb2tfZW50cnlbaG9va10pOworKwlpZiAoaXB0X2hhbmRsZV9kZWZhdWx0X3J1bGUoZSwgJnZlcmRpY3QpKSB7CisrCQlzdHJ1Y3QgeHRfY291bnRlcnMgKmNvdW50ZXI7CisrCisrCQljb3VudGVyID0geHRfZ2V0X3RoaXNfY3B1X2NvdW50ZXIoJmUtPmNvdW50ZXJzKTsKKysJCUFERF9DT1VOVEVSKCpjb3VudGVyLCBza2ItPmxlbiwgMSk7CisrCQlsb2NhbF9iaF9lbmFibGUoKTsKKysJCXJldHVybiB2ZXJkaWN0OworKwl9CisrCisgCXN0YWNraWR4ID0gMDsKKyAJaXAgPSBpcF9oZHIoc2tiKTsKKyAJaW5kZXYgPSBzdGF0ZS0+aW4gPyBzdGF0ZS0+aW4tPm5hbWUgOiBudWxsZGV2bmFtZTsKKyAJb3V0ZGV2ID0gc3RhdGUtPm91dCA/IHN0YXRlLT5vdXQtPm5hbWUgOiBudWxsZGV2bmFtZTsKKy0JLyogV2UgaGFuZGxlIGZyYWdtZW50cyBieSBkZWFsaW5nIHdpdGggdGhlIGZpcnN0IGZyYWdtZW50IGFzCistCSAqIGlmIGl0IHdhcyBhIG5vcm1hbCBwYWNrZXQuICBBbGwgb3RoZXIgZnJhZ21lbnRzIGFyZSB0cmVhdGVkCistCSAqIG5vcm1hbGx5LCBleGNlcHQgdGhhdCB0aGV5IHdpbGwgTkVWRVIgbWF0Y2ggcnVsZXMgdGhhdCBhc2sKKy0JICogdGhpbmdzIHdlIGRvbid0IGtub3csIGllLiB0Y3Agc3luIGZsYWcgb3IgcG9ydHMpLiAgSWYgdGhlCistCSAqIHJ1bGUgaXMgYWxzbyBhIGZyYWdtZW50LXNwZWNpZmljIHJ1bGUsIG5vbi1mcmFnbWVudHMgd29uJ3QKKy0JICogbWF0Y2ggaXQuICovCistCWFjcGFyLmZyYWdvZmYgPSBudG9ocyhpcC0+ZnJhZ19vZmYpICYgSVBfT0ZGU0VUOworLQlhY3Bhci50aG9mZiAgID0gaXBfaGRybGVuKHNrYik7CistCWFjcGFyLmhvdGRyb3AgPSBmYWxzZTsKKy0JYWNwYXIuc3RhdGUgICA9IHN0YXRlOworIAorLQlXQVJOX09OKCEodGFibGUtPnZhbGlkX2hvb2tzICYgKDEgPDwgaG9vaykpKTsKKy0JbG9jYWxfYmhfZGlzYWJsZSgpOworIAlhZGRlbmQgPSB4dF93cml0ZV9yZWNzZXFfYmVnaW4oKTsKKy0JcHJpdmF0ZSA9IFJFQURfT05DRSh0YWJsZS0+cHJpdmF0ZSk7IC8qIEFkZHJlc3MgZGVwZW5kZW5jeS4gKi8KKy0JY3B1ICAgICAgICA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKy0JdGFibGVfYmFzZSA9IHByaXZhdGUtPmVudHJpZXM7CisgCWp1bXBzdGFjayAgPSAoc3RydWN0IGlwdF9lbnRyeSAqKilwcml2YXRlLT5qdW1wc3RhY2tbY3B1XTsKKyAKKyAJLyogU3dpdGNoIHRvIGFsdGVybmF0ZSBqdW1wc3RhY2sgaWYgd2UncmUgYmVpbmcgaW52b2tlZCB2aWEgVEVFLgorQEAgLTI5OSw3ICszMjcsMTYgQEAgaXB0X2RvX3RhYmxlKHN0cnVjdCBza19idWZmICpza2IsCisgCWlmIChzdGF0aWNfa2V5X2ZhbHNlKCZ4dF90ZWVfZW5hYmxlZCkpCisgCQlqdW1wc3RhY2sgKz0gcHJpdmF0ZS0+c3RhY2tzaXplICogX190aGlzX2NwdV9yZWFkKG5mX3NrYl9kdXBsaWNhdGVkKTsKKyAKKy0JZSA9IGdldF9lbnRyeSh0YWJsZV9iYXNlLCBwcml2YXRlLT5ob29rX2VudHJ5W2hvb2tdKTsKKysJLyogV2UgaGFuZGxlIGZyYWdtZW50cyBieSBkZWFsaW5nIHdpdGggdGhlIGZpcnN0IGZyYWdtZW50IGFzCisrCSAqIGlmIGl0IHdhcyBhIG5vcm1hbCBwYWNrZXQuICBBbGwgb3RoZXIgZnJhZ21lbnRzIGFyZSB0cmVhdGVkCisrCSAqIG5vcm1hbGx5LCBleGNlcHQgdGhhdCB0aGV5IHdpbGwgTkVWRVIgbWF0Y2ggcnVsZXMgdGhhdCBhc2sKKysJICogdGhpbmdzIHdlIGRvbid0IGtub3csIGllLiB0Y3Agc3luIGZsYWcgb3IgcG9ydHMpLiAgSWYgdGhlCisrCSAqIHJ1bGUgaXMgYWxzbyBhIGZyYWdtZW50LXNwZWNpZmljIHJ1bGUsIG5vbi1mcmFnbWVudHMgd29uJ3QKKysJICogbWF0Y2ggaXQuICovCisrCWFjcGFyLmZyYWdvZmYgPSBudG9ocyhpcC0+ZnJhZ19vZmYpICYgSVBfT0ZGU0VUOworKwlhY3Bhci50aG9mZiAgID0gaXBfaGRybGVuKHNrYik7CisrCWFjcGFyLmhvdGRyb3AgPSBmYWxzZTsKKysJYWNwYXIuc3RhdGUgICA9IHN0YXRlOworIAorIAlkbyB7CisgCQljb25zdCBzdHJ1Y3QgeHRfZW50cnlfdGFyZ2V0ICp0OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNjEyLW5ldGZpbHRlcl9tYXRjaF9yZWR1Y2VfbWVtb3J5X2FjY2Vzcy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzYxMi1uZXRmaWx0ZXJfbWF0Y2hfcmVkdWNlX21lbW9yeV9hY2Nlc3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlkYTY3NwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzYxMi1uZXRmaWx0ZXJfbWF0Y2hfcmVkdWNlX21lbW9yeV9hY2Nlc3MucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorRnJvbTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorU3ViamVjdDogbmV0ZmlsdGVyOiByZWR1Y2UgbWF0Y2ggbWVtb3J5IGFjY2VzcworCitTaWduZWQtb2ZmLWJ5OiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CistLS0KKyBuZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCistLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKKysrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYworQEAgLTUzLDkgKzUzLDkgQEAgaXBfcGFja2V0X21hdGNoKGNvbnN0IHN0cnVjdCBpcGhkciAqaXAsCisgCWlmIChpcGluZm8tPmZsYWdzICYgSVBUX0ZfTk9fREVGX01BVENIKQorIAkJcmV0dXJuIHRydWU7CisgCistCWlmIChORl9JTlZGKGlwaW5mbywgSVBUX0lOVl9TUkNJUCwKKysJaWYgKE5GX0lOVkYoaXBpbmZvLCBJUFRfSU5WX1NSQ0lQLCBpcGluZm8tPnNtc2suc19hZGRyICYmCisgCQkgICAgKGlwLT5zYWRkciAmIGlwaW5mby0+c21zay5zX2FkZHIpICE9IGlwaW5mby0+c3JjLnNfYWRkcikgfHwKKy0JICAgIE5GX0lOVkYoaXBpbmZvLCBJUFRfSU5WX0RTVElQLAorKwkgICAgTkZfSU5WRihpcGluZm8sIElQVF9JTlZfRFNUSVAsIGlwaW5mby0+ZG1zay5zX2FkZHIgJiYKKyAJCSAgICAoaXAtPmRhZGRyICYgaXBpbmZvLT5kbXNrLnNfYWRkcikgIT0gaXBpbmZvLT5kc3Quc19hZGRyKSkKKyAJCXJldHVybiBmYWxzZTsKKyAKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzYxMy1uZXRmaWx0ZXJfb3B0aW9uYWxfdGNwX3dpbmRvd19jaGVjay5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzYxMy1uZXRmaWx0ZXJfb3B0aW9uYWxfdGNwX3dpbmRvd19jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzM1ZjhkCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNjEzLW5ldGZpbHRlcl9vcHRpb25hbF90Y3Bfd2luZG93X2NoZWNrLnBhdGNoCkBAIC0wLDAgKzEsNzMgQEAKK0Zyb206IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KK1N1YmplY3Q6IG5ldGZpbHRlcjogb3B0aW9uYWwgdGNwIHdpbmRvdyBjaGVjaworCitTaWduZWQtb2ZmLWJ5OiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CistLS0KKyBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYyB8IDEzICsrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKQorCistLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYworKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKK0BAIC0zMSw2ICszMSw5IEBACisgI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2NC9uZl9jb25udHJhY2tfaXB2NC5oPgorICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL2lwdjYvbmZfY29ubnRyYWNrX2lwdjYuaD4KKyAKKysvKiBEbyBub3QgY2hlY2sgdGhlIFRDUCB3aW5kb3cgZm9yIGluY29taW5nIHBhY2tldHMgICovCisrc3RhdGljIGludCBuZl9jdF90Y3Bfbm9fd2luZG93X2NoZWNrIF9fcmVhZF9tb3N0bHkgPSAxOworKworIC8qICJCZSBjb25zZXJ2YXRpdmUgaW4gd2hhdCB5b3UgZG8sCisgICAgIGJlIGxpYmVyYWwgaW4gd2hhdCB5b3UgYWNjZXB0IGZyb20gb3RoZXJzLiIKKyAgICAgSWYgaXQncyBub24temVybywgd2UgbWFyayBvbmx5IG91dCBvZiB3aW5kb3cgUlNUIHNlZ21lbnRzIGFzIElOVkFMSUQuICovCitAQCAtNDc2LDYgKzQ3OSw5IEBAIHN0YXRpYyBib29sIHRjcF9pbl93aW5kb3coY29uc3Qgc3RydWN0IG4KKyAJczMyIHJlY2VpdmVyX29mZnNldDsKKyAJYm9vbCByZXMsIGluX3JlY3Zfd2luOworIAorKwlpZiAobmZfY3RfdGNwX25vX3dpbmRvd19jaGVjaykKKysJCXJldHVybiB0cnVlOworKworIAkvKgorIAkgKiBHZXQgdGhlIHJlcXVpcmVkIGRhdGEgZnJvbSB0aGUgcGFja2V0LgorIAkgKi8KK0BAIC0xMTMwLDcgKzExMzYsNyBAQCBpbnQgbmZfY29ubnRyYWNrX3RjcF9wYWNrZXQoc3RydWN0IG5mX2NvCisgCQkgSVBfQ1RfVENQX0ZMQUdfREFUQV9VTkFDS05PV0xFREdFRCAmJgorIAkJIHRpbWVvdXRzW25ld19zdGF0ZV0gPiB0aW1lb3V0c1tUQ1BfQ09OTlRSQUNLX1VOQUNLXSkKKyAJCXRpbWVvdXQgPSB0aW1lb3V0c1tUQ1BfQ09OTlRSQUNLX1VOQUNLXTsKKy0JZWxzZSBpZiAoY3QtPnByb3RvLnRjcC5sYXN0X3dpbiA9PSAwICYmCisrCWVsc2UgaWYgKCFuZl9jdF90Y3Bfbm9fd2luZG93X2NoZWNrICYmIGN0LT5wcm90by50Y3AubGFzdF93aW4gPT0gMCAmJgorIAkJIHRpbWVvdXRzW25ld19zdGF0ZV0gPiB0aW1lb3V0c1tUQ1BfQ09OTlRSQUNLX1JFVFJBTlNdKQorIAkJdGltZW91dCA9IHRpbWVvdXRzW1RDUF9DT05OVFJBQ0tfUkVUUkFOU107CisgCWVsc2UKKy0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYworKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCitAQCAtMjUsNiArMjUsOSBAQAorICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190aW1lc3RhbXAuaD4KKyAjaW5jbHVkZSA8bGludXgvcmN1bGlzdF9udWxscy5oPgorIAorKy8qIERvIG5vdCBjaGVjayB0aGUgVENQIHdpbmRvdyBmb3IgaW5jb21pbmcgcGFja2V0cyAgKi8KKytzdGF0aWMgaW50IG5mX2N0X3RjcF9ub193aW5kb3dfY2hlY2sgX19yZWFkX21vc3RseSA9IDE7CisrCisgc3RhdGljIGJvb2wgZW5hYmxlX2hvb2tzIF9fcmVhZF9tb3N0bHk7CisgTU9EVUxFX1BBUk1fREVTQyhlbmFibGVfaG9va3MsICJBbHdheXMgZW5hYmxlIGNvbm50cmFjayBob29rcyIpOworIG1vZHVsZV9wYXJhbShlbmFibGVfaG9va3MsIGJvb2wsIDAwMDApOworQEAgLTY1MCw2ICs2NTMsNyBAQCBlbnVtIG5mX2N0X3N5c2N0bF9pbmRleCB7CisgCU5GX1NZU0NUTF9DVF9QUk9UT19USU1FT1VUX0dSRV9TVFJFQU0sCisgI2VuZGlmCisgCisrCU5GX1NZU0NUTF9DVF9QUk9UT19UQ1BfTk9fV0lORE9XX0NIRUNLLAorIAlfX05GX1NZU0NUTF9DVF9MQVNUX1NZU0NUTCwKKyB9OworIAorQEAgLTk3Niw2ICs5ODAsMTMgQEAgc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmZfY3Rfc3lzY3RsX3RhYgorIAkJLnByb2NfaGFuZGxlciAgID0gcHJvY19kb2ludHZlY19qaWZmaWVzLAorIAl9LAorICNlbmRpZgorKwlbTkZfU1lTQ1RMX0NUX1BST1RPX1RDUF9OT19XSU5ET1dfQ0hFQ0tdID0geworKwkJLnByb2NuYW1lICAgICAgID0gIm5mX2Nvbm50cmFja190Y3Bfbm9fd2luZG93X2NoZWNrIiwKKysJCS5kYXRhICAgICAgICAgICA9ICZuZl9jdF90Y3Bfbm9fd2luZG93X2NoZWNrLAorKwkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGludCksCisrCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorKwkJLnByb2NfaGFuZGxlciAgID0gcHJvY19kb2ludHZlYywKKysJfSwKKyAJe30KKyB9OworIApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNjIwLW5ldF9zY2hlZC1jb2RlbC1kby1ub3QtZGVmZXItcXVldWUtbGVuZ3RoLXVwZGF0ZS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzYyMC1uZXRfc2NoZWQtY29kZWwtZG8tbm90LWRlZmVyLXF1ZXVlLWxlbmd0aC11cGRhdGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E4NWI4YQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzYyMC1uZXRfc2NoZWQtY29kZWwtZG8tbm90LWRlZmVyLXF1ZXVlLWxlbmd0aC11cGRhdGUucGF0Y2gKQEAgLTAsMCArMSw4NiBAQAorRnJvbTogS29uc3RhbnRpbiBLaGxlYm5pa292IDxraGxlYm5pa292QHlhbmRleC10ZWFtLnJ1PgorRGF0ZTogTW9uLCAyMSBBdWcgMjAxNyAxMToxNDoxNCArMDMwMAorU3ViamVjdDogW1BBVENIXSBuZXRfc2NoZWQvY29kZWw6IGRvIG5vdCBkZWZlciBxdWV1ZSBsZW5ndGggdXBkYXRlCisKK1doZW4gY29kZWwgd2FudHMgdG8gZHJvcCBsYXN0IHBhY2tldCBpbiAtPmRlcXVldWUoKSBpdCBjYW5ub3QgY2FsbAorcWRpc2NfdHJlZV9yZWR1Y2VfYmFja2xvZygpIHJpZ2h0IGF3YXkgLSBpdCB3aWxsIG5vdGlmeSBwYXJlbnQgcWRpc2MKK2Fib3V0IHplcm8gcWxlbiBhbmQgSFRCL0hGU0Mgd2lsbCBkZWFjdGl2YXRlIGNsYXNzLiBUaGUgc2FtZSBjbGFzcyB3aWxsCitiZSBkZWFjdGl2YXRlZCBzZWNvbmQgdGltZSBieSBjYWxsZXIgb2YgLT5kZXF1ZXVlKCkuIEN1cnJlbnRseSBjb2RlbCBhbmQKK2ZxX2NvZGVsIGRlZmVyIHVwZGF0ZS4gVGhpcyB0cmlnZ2VycyB3YXJuaW5nIGluIEhGU0Mgd2hlbiBpdCdzIHFsZW4gIT0gMAorYnV0IHRoZXJlIGlzIG5vIGFjdGl2ZSBjbGFzc2VzLgorCitUaGlzIHBhdGNoIHVwZGF0ZSBwYXJlbnQgcXVldWUgbGVuZ3RoIGltbWVkaWF0ZWx5OiBqdXN0IHRlbXBvcmFyeSBpbmNyZWFzZQorcWxlbiBhcm91bmQgcWRpc2NfdHJlZV9yZWR1Y2VfYmFja2xvZygpIHRvIHByZXZlbnQgZmlyc3QgY2xhc3MgZGVhY3RpdmF0aW9uCitpZiB3ZSBoYXZlIHNrYiB0byByZXR1cm4uCisKK1RoaXMgbWlnaHQgb3BlbiBhbm90aGVyIHByb2JsZW0gaW4gSEZTQyAtIG5vdyBvcGVyYXRpb24gcGVlayBjb3VsZCBmYWlsIGFuZAorZGVhY3RpdmF0ZSBwYXJlbnQgY2xhc3MuCisKK1NpZ25lZC1vZmYtYnk6IEtvbnN0YW50aW4gS2hsZWJuaWtvdiA8a2hsZWJuaWtvdkB5YW5kZXgtdGVhbS5ydT4KK0xpbms6IGh0dHBzOi8vYnVnemlsbGEua2VybmVsLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5NTgxCistLS0KKworLS0tIGEvbmV0L3NjaGVkL3NjaF9jb2RlbC5jCisrKysgYi9uZXQvc2NoZWQvc2NoX2NvZGVsLmMKK0BAIC05NSwxMSArOTUsMTcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpjb2RlbF9xZGlzY19kZXF1ZQorIAkJCSAgICAmcS0+c3RhdHMsIHFkaXNjX3BrdF9sZW4sIGNvZGVsX2dldF9lbnF1ZXVlX3RpbWUsCisgCQkJICAgIGRyb3BfZnVuYywgZGVxdWV1ZV9mdW5jKTsKKyAKKy0JLyogV2UgY2FudCBjYWxsIHFkaXNjX3RyZWVfcmVkdWNlX2JhY2tsb2coKSBpZiBvdXIgcWxlbiBpcyAwLAorLQkgKiBvciBIVEIgY3Jhc2hlcy4gRGVmZXIgaXQgZm9yIG5leHQgcm91bmQuCisrCS8qIElmIG91ciBxbGVuIGlzIDAgcWRpc2NfdHJlZV9yZWR1Y2VfYmFja2xvZygpIHdpbGwgZGVhY3RpdmF0ZQorKwkgKiBwYXJlbnQgY2xhc3MsIGRlcXVldWUgaW4gcGFyZW50IHFkaXNjIHdpbGwgZG8gdGhlIHNhbWUgaWYgd2UKKysJICogcmV0dXJuIHNrYi4gVGVtcG9yYXJ5IGluY3JlbWVudCBxbGVuIGlmIHdlIGhhdmUgc2tiLgorIAkgKi8KKy0JaWYgKHEtPnN0YXRzLmRyb3BfY291bnQgJiYgc2NoLT5xLnFsZW4pIHsKKy0JCXFkaXNjX3RyZWVfcmVkdWNlX2JhY2tsb2coc2NoLCBxLT5zdGF0cy5kcm9wX2NvdW50LCBxLT5zdGF0cy5kcm9wX2xlbik7CisrCWlmIChxLT5zdGF0cy5kcm9wX2NvdW50KSB7CisrCQlpZiAoc2tiKQorKwkJCXNjaC0+cS5xbGVuKys7CisrCQlxZGlzY190cmVlX3JlZHVjZV9iYWNrbG9nKHNjaCwgcS0+c3RhdHMuZHJvcF9jb3VudCwKKysJCQkJCSAgcS0+c3RhdHMuZHJvcF9sZW4pOworKwkJaWYgKHNrYikKKysJCQlzY2gtPnEucWxlbi0tOworIAkJcS0+c3RhdHMuZHJvcF9jb3VudCA9IDA7CisgCQlxLT5zdGF0cy5kcm9wX2xlbiA9IDA7CisgCX0KKy0tLSBhL25ldC9zY2hlZC9zY2hfZnFfY29kZWwuYworKysrIGIvbmV0L3NjaGVkL3NjaF9mcV9jb2RlbC5jCitAQCAtMzA1LDYgKzMwNSwyMSBAQCBiZWdpbjoKKyAJCQkgICAgJmZsb3ctPmN2YXJzLCAmcS0+Y3N0YXRzLCBxZGlzY19wa3RfbGVuLAorIAkJCSAgICBjb2RlbF9nZXRfZW5xdWV1ZV90aW1lLCBkcm9wX2Z1bmMsIGRlcXVldWVfZnVuYyk7CisgCisrCS8qIElmIG91ciBxbGVuIGlzIDAgcWRpc2NfdHJlZV9yZWR1Y2VfYmFja2xvZygpIHdpbGwgZGVhY3RpdmF0ZQorKwkgKiBwYXJlbnQgY2xhc3MsIGRlcXVldWUgaW4gcGFyZW50IHFkaXNjIHdpbGwgZG8gdGhlIHNhbWUgaWYgd2UKKysJICogcmV0dXJuIHNrYi4gVGVtcG9yYXJ5IGluY3JlbWVudCBxbGVuIGlmIHdlIGhhdmUgc2tiLgorKwkgKi8KKysJaWYgKHEtPmNzdGF0cy5kcm9wX2NvdW50KSB7CisrCQlpZiAoc2tiKQorKwkJCXNjaC0+cS5xbGVuKys7CisrCQlxZGlzY190cmVlX3JlZHVjZV9iYWNrbG9nKHNjaCwgcS0+Y3N0YXRzLmRyb3BfY291bnQsCisrCQkJCQkgIHEtPmNzdGF0cy5kcm9wX2xlbik7CisrCQlpZiAoc2tiKQorKwkJCXNjaC0+cS5xbGVuLS07CisrCQlxLT5jc3RhdHMuZHJvcF9jb3VudCA9IDA7CisrCQlxLT5jc3RhdHMuZHJvcF9sZW4gPSAwOworKwl9CisrCisgCWlmICghc2tiKSB7CisgCQkvKiBmb3JjZSBhIHBhc3MgdGhyb3VnaCBvbGRfZmxvd3MgdG8gcHJldmVudCBzdGFydmF0aW9uICovCisgCQlpZiAoKGhlYWQgPT0gJnEtPm5ld19mbG93cykgJiYgIWxpc3RfZW1wdHkoJnEtPm9sZF9mbG93cykpCitAQCAtMzE1LDE1ICszMzAsNiBAQCBiZWdpbjoKKyAJfQorIAlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKKyAJZmxvdy0+ZGVmaWNpdCAtPSBxZGlzY19wa3RfbGVuKHNrYik7CistCS8qIFdlIGNhbnQgY2FsbCBxZGlzY190cmVlX3JlZHVjZV9iYWNrbG9nKCkgaWYgb3VyIHFsZW4gaXMgMCwKKy0JICogb3IgSFRCIGNyYXNoZXMuIERlZmVyIGl0IGZvciBuZXh0IHJvdW5kLgorLQkgKi8KKy0JaWYgKHEtPmNzdGF0cy5kcm9wX2NvdW50ICYmIHNjaC0+cS5xbGVuKSB7CistCQlxZGlzY190cmVlX3JlZHVjZV9iYWNrbG9nKHNjaCwgcS0+Y3N0YXRzLmRyb3BfY291bnQsCistCQkJCQkgIHEtPmNzdGF0cy5kcm9wX2xlbik7CistCQlxLT5jc3RhdHMuZHJvcF9jb3VudCA9IDA7CistCQlxLT5jc3RhdHMuZHJvcF9sZW4gPSAwOworLQl9CisgCXJldHVybiBza2I7CisgfQorIApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNjMwLXBhY2tldF9zb2NrZXRfdHlwZS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzYzMC1wYWNrZXRfc29ja2V0X3R5cGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYxZGU1YQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzYzMC1wYWNrZXRfc29ja2V0X3R5cGUucGF0Y2gKQEAgLTAsMCArMSwxMzggQEAKK0Zyb206IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KK1N1YmplY3Q6IG5ldDogYWRkIGFuIG9wdGltaXphdGlvbiBmb3IgZGVhbGluZyB3aXRoIHJhdyBzb2NrZXRzCisKK2xlZGUtY29tbWl0OiA0ODk4MDM5NzAzZDczMTVmMGYzNDMxYzg2MDEyMzMzOGVjM2JlMGY2CitTaWduZWQtb2ZmLWJ5OiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CistLS0KKyBpbmNsdWRlL3VhcGkvbGludXgvaWZfcGFja2V0LmggfCAgMyArKysKKyBuZXQvcGFja2V0L2FmX3BhY2tldC5jICAgICAgICAgfCAzNCArKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tCisgbmV0L3BhY2tldC9pbnRlcm5hbC5oICAgICAgICAgIHwgIDEgKworIDMgZmlsZXMgY2hhbmdlZCwgMzEgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKKworLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3BhY2tldC5oCisrKysgYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfcGFja2V0LmgKK0BAIC0zMiw2ICszMiw4IEBAIHN0cnVjdCBzb2NrYWRkcl9sbCB7CisgI2RlZmluZSBQQUNLRVRfS0VSTkVMCQk3CQkvKiBUbyBrZXJuZWwgc3BhY2UJKi8KKyAvKiBVbnVzZWQsIFBBQ0tFVF9GQVNUUk9VVEUgYW5kIFBBQ0tFVF9MT09QQkFDSyBhcmUgaW52aXNpYmxlIHRvIHVzZXIgc3BhY2UgKi8KKyAjZGVmaW5lIFBBQ0tFVF9GQVNUUk9VVEUJNgkJLyogRmFzdHJvdXRlZCBmcmFtZQkqLworKyNkZWZpbmUgUEFDS0VUX01BU0tfQU5ZCQkweGZmZmZmZmZmCS8qIG1hc2sgZm9yIHBhY2tldCB0eXBlIGJpdHMgKi8KKysKKyAKKyAvKiBQYWNrZXQgc29ja2V0IG9wdGlvbnMgKi8KKyAKK0BAIC01OCw2ICs2MCw3IEBAIHN0cnVjdCBzb2NrYWRkcl9sbCB7CisgI2RlZmluZSBQQUNLRVRfUk9MTE9WRVJfU1RBVFMJCTIxCisgI2RlZmluZSBQQUNLRVRfRkFOT1VUX0RBVEEJCTIyCisgI2RlZmluZSBQQUNLRVRfSUdOT1JFX09VVEdPSU5HCQkyMworKyNkZWZpbmUgUEFDS0VUX1JFQ1ZfVFlQRQkJMjQKKyAKKyAjZGVmaW5lIFBBQ0tFVF9GQU5PVVRfSEFTSAkJMAorICNkZWZpbmUgUEFDS0VUX0ZBTk9VVF9MQgkJMQorLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYworKysrIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYworQEAgLTE4MDEsNiArMTgwMSw3IEBAIHN0YXRpYyBpbnQgcGFja2V0X3Jjdl9zcGt0KHN0cnVjdCBza19idWYKKyB7CisgCXN0cnVjdCBzb2NrICpzazsKKyAJc3RydWN0IHNvY2thZGRyX3BrdCAqc3BrdDsKKysJc3RydWN0IHBhY2tldF9zb2NrICpwbzsKKyAKKyAJLyoKKyAJICoJV2hlbiB3ZSByZWdpc3RlcmVkIHRoZSBwcm90b2NvbCB3ZSBzYXZlZCB0aGUgc29ja2V0IGluIHRoZSBkYXRhCitAQCAtMTgwOCw2ICsxODA5LDcgQEAgc3RhdGljIGludCBwYWNrZXRfcmN2X3Nwa3Qoc3RydWN0IHNrX2J1ZgorIAkgKi8KKyAKKyAJc2sgPSBwdC0+YWZfcGFja2V0X3ByaXY7CisrCXBvID0gcGt0X3NrKHNrKTsKKyAKKyAJLyoKKyAJICoJWWFuayBiYWNrIHRoZSBoZWFkZXJzIFtob3BlIHRoZSBkZXZpY2Ugc2V0IHRoaXMKK0BAIC0xODIwLDcgKzE4MjIsNyBAQCBzdGF0aWMgaW50IHBhY2tldF9yY3Zfc3BrdChzdHJ1Y3Qgc2tfYnVmCisgCSAqCXNvIHRoYXQgdGhpcyBwcm9jZWR1cmUgaXMgbm9vcC4KKyAJICovCisgCistCWlmIChza2ItPnBrdF90eXBlID09IFBBQ0tFVF9MT09QQkFDSykKKysJaWYgKCEocG8tPnBrdF90eXBlICYgKDEgPDwgc2tiLT5wa3RfdHlwZSkpKQorIAkJZ290byBvdXQ7CisgCisgCWlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgc29ja19uZXQoc2spKSkKK0BAIC0yMDU4LDEyICsyMDYwLDEyIEBAIHN0YXRpYyBpbnQgcGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2sKKyAJdW5zaWduZWQgaW50IHNuYXBsZW4sIHJlczsKKyAJYm9vbCBpc19kcm9wX25fYWNjb3VudCA9IGZhbHNlOworIAorLQlpZiAoc2tiLT5wa3RfdHlwZSA9PSBQQUNLRVRfTE9PUEJBQ0spCistCQlnb3RvIGRyb3A7CistCisgCXNrID0gcHQtPmFmX3BhY2tldF9wcml2OworIAlwbyA9IHBrdF9zayhzayk7CisgCisrCWlmICghKHBvLT5wa3RfdHlwZSAmICgxIDw8IHNrYi0+cGt0X3R5cGUpKSkKKysJCWdvdG8gZHJvcDsKKysKKyAJaWYgKCFuZXRfZXEoZGV2X25ldChkZXYpLCBzb2NrX25ldChzaykpKQorIAkJZ290byBkcm9wOworIAorQEAgLTIxODksMTIgKzIxOTEsMTIgQEAgc3RhdGljIGludCB0cGFja2V0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqcworIAlCVUlMRF9CVUdfT04oVFBBQ0tFVF9BTElHTihzaXplb2YoKmguaDIpKSAhPSAzMik7CisgCUJVSUxEX0JVR19PTihUUEFDS0VUX0FMSUdOKHNpemVvZigqaC5oMykpICE9IDQ4KTsKKyAKKy0JaWYgKHNrYi0+cGt0X3R5cGUgPT0gUEFDS0VUX0xPT1BCQUNLKQorLQkJZ290byBkcm9wOworLQorIAlzayA9IHB0LT5hZl9wYWNrZXRfcHJpdjsKKyAJcG8gPSBwa3Rfc2soc2spOworIAorKwlpZiAoIShwby0+cGt0X3R5cGUgJiAoMSA8PCBza2ItPnBrdF90eXBlKSkpCisrCQlnb3RvIGRyb3A7CisrCisgCWlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgc29ja19uZXQoc2spKSkKKyAJCWdvdG8gZHJvcDsKKyAKK0BAIC0zMjkzLDYgKzMyOTUsNyBAQCBzdGF0aWMgaW50IHBhY2tldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0CisgCW11dGV4X2luaXQoJnBvLT5wZ192ZWNfbG9jayk7CisgCXBvLT5yb2xsb3ZlciA9IE5VTEw7CisgCXBvLT5wcm90X2hvb2suZnVuYyA9IHBhY2tldF9yY3Y7CisrCXBvLT5wa3RfdHlwZSA9IFBBQ0tFVF9NQVNLX0FOWSAmIH4oMSA8PCBQQUNLRVRfTE9PUEJBQ0spOworIAorIAlpZiAoc29jay0+dHlwZSA9PSBTT0NLX1BBQ0tFVCkKKyAJCXBvLT5wcm90X2hvb2suZnVuYyA9IHBhY2tldF9yY3Zfc3BrdDsKK0BAIC0zOTMwLDYgKzM5MzMsMTYgQEAgcGFja2V0X3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaQorIAkJcG8tPnhtaXQgPSB2YWwgPyBwYWNrZXRfZGlyZWN0X3htaXQgOiBkZXZfcXVldWVfeG1pdDsKKyAJCXJldHVybiAwOworIAl9CisrICAgICAgICBjYXNlIFBBQ0tFVF9SRUNWX1RZUEU6CisrICAgICAgICB7CisrICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB2YWw7CisrICAgICAgICAgICAgICAgIGlmIChvcHRsZW4gIT0gc2l6ZW9mKHZhbCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisrICAgICAgICAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmdmFsLCBvcHR2YWwsIHNpemVvZih2YWwpKSkKKysgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKKysgICAgICAgICAgICAgICAgcG8tPnBrdF90eXBlID0gdmFsICYgfkJJVChQQUNLRVRfTE9PUEJBQ0spOworKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIH0KKyAJZGVmYXVsdDoKKyAJCXJldHVybiAtRU5PUFJPVE9PUFQ7CisgCX0KK0BAIC0zOTg2LDYgKzM5OTksMTMgQEAgc3RhdGljIGludCBwYWNrZXRfZ2V0c29ja29wdChzdHJ1Y3Qgc29jaworIAljYXNlIFBBQ0tFVF9WTkVUX0hEUjoKKyAJCXZhbCA9IHBvLT5oYXNfdm5ldF9oZHI7CisgCQlicmVhazsKKysJY2FzZSBQQUNLRVRfUkVDVl9UWVBFOgorKwkJaWYgKGxlbiA+IHNpemVvZih1bnNpZ25lZCBpbnQpKQorKwkJCWxlbiA9IHNpemVvZih1bnNpZ25lZCBpbnQpOworKwkJdmFsID0gcG8tPnBrdF90eXBlOworKworKwkJZGF0YSA9ICZ2YWw7CisrCQlicmVhazsKKyAJY2FzZSBQQUNLRVRfVkVSU0lPTjoKKyAJCXZhbCA9IHBvLT50cF92ZXJzaW9uOworIAkJYnJlYWs7CistLS0gYS9uZXQvcGFja2V0L2ludGVybmFsLmgKKysrKyBiL25ldC9wYWNrZXQvaW50ZXJuYWwuaAorQEAgLTEzNiw2ICsxMzYsNyBAQCBzdHJ1Y3QgcGFja2V0X3NvY2sgeworIAlpbnQJCQkoKnhtaXQpKHN0cnVjdCBza19idWZmICpza2IpOworIAlzdHJ1Y3QgcGFja2V0X3R5cGUJcHJvdF9ob29rIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CisgCWF0b21pY190CQl0cF9kcm9wcyBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworKwl1bnNpZ25lZCBpbnQJCXBrdF90eXBlOworIH07CisgCisgc3RhdGljIHN0cnVjdCBwYWNrZXRfc29jayAqcGt0X3NrKHN0cnVjdCBzb2NrICpzaykKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzY0MC1uZXRmaWx0ZXItbmZfZmxvd190YWJsZS1hZGQtaGFyZHdhcmUtb2ZmbG9hZC1zdXBwb3J0LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNjQwLW5ldGZpbHRlci1uZl9mbG93X3RhYmxlLWFkZC1oYXJkd2FyZS1vZmZsb2FkLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ0ODA4YwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzY0MC1uZXRmaWx0ZXItbmZfZmxvd190YWJsZS1hZGQtaGFyZHdhcmUtb2ZmbG9hZC1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsNTY0IEBACitGcm9tOiBQYWJsbyBOZWlyYSBBeXVzbyA8cGFibG9AbmV0ZmlsdGVyLm9yZz4KK0RhdGU6IFRodSwgMTEgSmFuIDIwMTggMTY6MzI6MDAgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gbmV0ZmlsdGVyOiBuZl9mbG93X3RhYmxlOiBhZGQgaGFyZHdhcmUgb2ZmbG9hZCBzdXBwb3J0CisKK1RoaXMgcGF0Y2ggYWRkcyB0aGUgaW5mcmFzdHJ1Y3R1cmUgdG8gb2ZmbG9hZCBmbG93cyB0byBoYXJkd2FyZSwgaW4gY2FzZQordGhlIG5pYy9zd2l0Y2ggY29tZXMgd2l0aCBidWlsdC1pbiBmbG93IHRhYmxlcyBjYXBhYmlsaXRpZXMuCisKK0lmIHRoZSBoYXJkd2FyZSBjb21lcyB3aXRoIG5vIGhhcmR3YXJlIGZsb3cgdGFibGVzIG9yIHRoZXkgaGF2ZQorbGltaXRhdGlvbnMgaW4gdGVybXMgb2YgZmVhdHVyZXMsIHRoZSBleGlzdGluZyBpbmZyYXN0cnVjdHVyZSBmYWxscyBiYWNrCit0byB0aGUgc29mdHdhcmUgZmxvdyB0YWJsZSBpbXBsZW1lbnRhdGlvbi4KKworVGhlIHNvZnR3YXJlIGZsb3cgdGFibGUgZ2FyYmFnZSBjb2xsZWN0b3Igc2tpcHMgZW50cmllcyB0aGF0IHJlc2lkZXMgaW4KK3RoZSBoYXJkd2FyZSwgc28gdGhlIGhhcmR3YXJlIHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIHJlbGVhc2luZyB0aGlzCitmbG93IHRhYmxlIGVudHJ5IHRvbyB2aWEgZmxvd19vZmZsb2FkX2RlYWQoKS4KKworSGFyZHdhcmUgY29uZmlndXJhdGlvbiwgZWl0aGVyIHRvIGFkZCBvciB0byBkZWxldGUgZW50cmllcywgaXMgZG9uZSBmcm9tCit0aGUgaGFyZHdhcmUgb2ZmbG9hZCB3b3JrcXVldWUsIHRvIGVuc3VyZSB0aGlzIGlzIGRvbmUgZnJvbSB1c2VyIGNvbnRleHQKK2dpdmVuIHRoYXQgd2UgbWF5IHNsZWVwIHdoZW4gZ3JhYmJpbmcgdGhlIG1kaW8gbXV0ZXguCisKK1NpZ25lZC1vZmYtYnk6IFBhYmxvIE5laXJhIEF5dXNvIDxwYWJsb0BuZXRmaWx0ZXIub3JnPgorLS0tCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9ody5jCisKKy0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKKysrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKK0BAIC05MjIsNiArOTIyLDEzIEBAIHN0cnVjdCBkZXZsaW5rOworIHN0cnVjdCB0bHNkZXZfb3BzOworIAorIAorK3N0cnVjdCBmbG93X29mZmxvYWQ7CisrCisrZW51bSBmbG93X29mZmxvYWRfdHlwZSB7CisrCUZMT1dfT0ZGTE9BRF9BREQJPSAwLAorKwlGTE9XX09GRkxPQURfREVMLAorK307CisrCisgLyoKKyAgKiBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIHRoZSBtYW5hZ2VtZW50IGhvb2tzIGZvciBuZXR3b3JrIGRldmljZXMuCisgICogVGhlIGZvbGxvd2luZyBob29rcyBjYW4gYmUgZGVmaW5lZDsgdW5sZXNzIG5vdGVkIG90aGVyd2lzZSwgdGhleSBhcmUKK0BAIC0xMTU0LDYgKzExNjEsMTAgQEAgc3RydWN0IHRsc2Rldl9vcHM7CisgICogaW50ICgqbmRvX2JyaWRnZV9kZWxsaW5rKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKKyAgKgkJCSAgICAgdTE2IGZsYWdzKTsKKyAgKgorKyAqIGludCAoKm5kb19mbG93X29mZmxvYWQpKGVudW0gZmxvd19vZmZsb2FkX3R5cGUgdHlwZSwKKysgKgkJCSAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpOworKyAqCUFkZHMvZGVsZXRlcyBmbG93IGVudHJ5IHRvL2Zyb20gbmV0IGRldmljZSBmbG93dGFibGUuCisrICoKKyAgKiBpbnQgKCpuZG9fY2hhbmdlX2NhcnJpZXIpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgbmV3X2NhcnJpZXIpOworICAqCUNhbGxlZCB0byBjaGFuZ2UgZGV2aWNlIGNhcnJpZXIuIFNvZnQtZGV2aWNlcyAobGlrZSBkdW1teSwgdGVhbSwgZXRjKQorICAqCXdoaWNoIGRvIG5vdCByZXByZXNlbnQgcmVhbCBoYXJkd2FyZSBtYXkgZGVmaW5lIHRoaXMgdG8gYWxsb3cgdGhlaXIKK0BAIC0xNDAxLDYgKzE0MTIsOCBAQCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgeworIAlpbnQJCQkoKm5kb19icmlkZ2VfZGVsbGluaykoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAJCQkJCQkgICAgICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKKyAJCQkJCQkgICAgICB1MTYgZmxhZ3MpOworKwlpbnQJCQkoKm5kb19mbG93X29mZmxvYWQpKGVudW0gZmxvd19vZmZsb2FkX3R5cGUgdHlwZSwKKysJCQkJCQkgICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdyk7CisgCWludAkJCSgqbmRvX2NoYW5nZV9jYXJyaWVyKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorIAkJCQkJCSAgICAgIGJvb2wgbmV3X2NhcnJpZXIpOworIAlpbnQJCQkoKm5kb19nZXRfcGh5c19wb3J0X2lkKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaAorKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaAorQEAgLTIxLDExICsyMSwxNyBAQCBzdHJ1Y3QgbmZfZmxvd3RhYmxlX3R5cGUgeworIAlzdHJ1Y3QgbW9kdWxlCQkJKm93bmVyOworIH07CisgCisrZW51bSBuZl9mbG93dGFibGVfZmxhZ3MgeworKwlORl9GTE9XVEFCTEVfRl9IVwkJPSAweDEsCisrfTsKKysKKyBzdHJ1Y3QgbmZfZmxvd3RhYmxlIHsKKyAJc3RydWN0IGxpc3RfaGVhZAkJbGlzdDsKKyAJc3RydWN0IHJoYXNodGFibGUJCXJoYXNodGFibGU7CisgCWNvbnN0IHN0cnVjdCBuZl9mbG93dGFibGVfdHlwZQkqdHlwZTsKKysJdTMyCQkJCWZsYWdzOworIAlzdHJ1Y3QgZGVsYXllZF93b3JrCQlnY193b3JrOworKwlwb3NzaWJsZV9uZXRfdAkJCWZ0X25ldDsKKyB9OworIAorIGVudW0gZmxvd19vZmZsb2FkX3R1cGxlX2RpciB7CitAQCAtNjgsNiArNzQsNyBAQCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlX3JoYXNoIHsKKyAjZGVmaW5lIEZMT1dfT0ZGTE9BRF9ETkFUCTB4MgorICNkZWZpbmUgRkxPV19PRkZMT0FEX0RZSU5HCTB4NAorICNkZWZpbmUgRkxPV19PRkZMT0FEX1RFQVJET1dOCTB4OAorKyNkZWZpbmUgRkxPV19PRkZMT0FEX0hXCQkweDEwCisgCisgc3RydWN0IGZsb3dfb2ZmbG9hZCB7CisgCXN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2gJCXR1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX01BWF07CitAQCAtMTIwLDYgKzEyNywyMiBAQCB1bnNpZ25lZCBpbnQgbmZfZmxvd19vZmZsb2FkX2lwX2hvb2sodm9pCisgdW5zaWduZWQgaW50IG5mX2Zsb3dfb2ZmbG9hZF9pcHY2X2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKyAJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSk7CisgCisrdm9pZCBuZl9mbG93X29mZmxvYWRfaHdfYWRkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywKKysJCQkgICAgc3RydWN0IG5mX2Nvbm4gKmN0KTsKKyt2b2lkIG5mX2Zsb3dfb2ZmbG9hZF9od19kZWwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KTsKKysKKytzdHJ1Y3QgbmZfZmxvd190YWJsZV9odyB7CisrCXN0cnVjdCBtb2R1bGUJKm93bmVyOworKwl2b2lkCQkoKmFkZCkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LAorKwkJCSAgICAgICBzdHJ1Y3QgbmZfY29ubiAqY3QpOworKwl2b2lkCQkoKmRlbCkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KTsKKyt9OworKworK2ludCBuZl9mbG93X3RhYmxlX2h3X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBuZl9mbG93X3RhYmxlX2h3ICpvZmZsb2FkKTsKKyt2b2lkIG5mX2Zsb3dfdGFibGVfaHdfdW5yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgbmZfZmxvd190YWJsZV9odyAqb2ZmbG9hZCk7CisrCisrZXh0ZXJuIHN0cnVjdCB3b3JrX3N0cnVjdCBuZl9mbG93X29mZmxvYWRfaHdfd29yazsKKysKKyAjZGVmaW5lIE1PRFVMRV9BTElBU19ORl9GTE9XVEFCTEUoZmFtaWx5KQlcCisgCU1PRFVMRV9BTElBUygibmYtZmxvd3RhYmxlLSIgX19zdHJpbmdpZnkoZmFtaWx5KSkKKyAKKy0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgKKysrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgKK0BAIC0xNTE2LDYgKzE1MTYsNyBAQCBlbnVtIG5mdF9vYmplY3RfYXR0cmlidXRlcyB7CisgICogQE5GVEFfRkxPV1RBQkxFX0hPT0s6IG5ldGZpbHRlciBob29rIGNvbmZpZ3VyYXRpb24oTkxBX1UzMikKKyAgKiBATkZUQV9GTE9XVEFCTEVfVVNFOiBudW1iZXIgb2YgcmVmZXJlbmNlcyB0byB0aGlzIGZsb3cgdGFibGUgKE5MQV9VMzIpCisgICogQE5GVEFfRkxPV1RBQkxFX0hBTkRMRTogb2JqZWN0IGhhbmRsZSAoTkxBX1U2NCkKKysgKiBATkZUQV9GTE9XVEFCTEVfRkxBR1M6IGZsYWdzIChOTEFfVTMyKQorICAqLworIGVudW0gbmZ0X2Zsb3d0YWJsZV9hdHRyaWJ1dGVzIHsKKyAJTkZUQV9GTE9XVEFCTEVfVU5TUEVDLAorQEAgLTE1MjUsNiArMTUyNiw3IEBAIGVudW0gbmZ0X2Zsb3d0YWJsZV9hdHRyaWJ1dGVzIHsKKyAJTkZUQV9GTE9XVEFCTEVfVVNFLAorIAlORlRBX0ZMT1dUQUJMRV9IQU5ETEUsCisgCU5GVEFfRkxPV1RBQkxFX1BBRCwKKysJTkZUQV9GTE9XVEFCTEVfRkxBR1MsCisgCV9fTkZUQV9GTE9XVEFCTEVfTUFYCisgfTsKKyAjZGVmaW5lIE5GVEFfRkxPV1RBQkxFX01BWAkoX19ORlRBX0ZMT1dUQUJMRV9NQVggLSAxKQorLS0tIGEvbmV0L25ldGZpbHRlci9LY29uZmlnCisrKysgYi9uZXQvbmV0ZmlsdGVyL0tjb25maWcKK0BAIC03MTEsNiArNzExLDE1IEBAIGNvbmZpZyBORl9GTE9XX1RBQkxFCisgCisgCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4KKyAKKytjb25maWcgTkZfRkxPV19UQUJMRV9IVworKwl0cmlzdGF0ZSAiTmV0ZmlsdGVyIGZsb3cgdGFibGUgaGFyZHdhcmUgb2ZmbG9hZCBtb2R1bGUiCisrCWRlcGVuZHMgb24gTkZfRkxPV19UQUJMRQorKwloZWxwCisrCSAgVGhpcyBvcHRpb24gYWRkcyBoYXJkd2FyZSBvZmZsb2FkIHN1cHBvcnQgZm9yIHRoZSBmbG93IHRhYmxlIGNvcmUKKysJICBpbmZyYXN0cnVjdHVyZS4KKysKKysJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLgorKworIGNvbmZpZyBORVRGSUxURVJfWFRBQkxFUworIAl0cmlzdGF0ZSAiTmV0ZmlsdGVyIFh0YWJsZXMgc3VwcG9ydCAocmVxdWlyZWQgZm9yIGlwX3RhYmxlcykiCisgCWRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9bgorLS0tIGEvbmV0L25ldGZpbHRlci9NYWtlZmlsZQorKysrIGIvbmV0L25ldGZpbHRlci9NYWtlZmlsZQorQEAgLTEyMyw2ICsxMjMsNyBAQCBvYmotJChDT05GSUdfTkZfRkxPV19UQUJMRSkJKz0gbmZfZmxvd190CisgbmZfZmxvd190YWJsZS1vYmpzIDo9IG5mX2Zsb3dfdGFibGVfY29yZS5vIG5mX2Zsb3dfdGFibGVfaXAubworIAorIG9iai0kKENPTkZJR19ORl9GTE9XX1RBQkxFX0lORVQpICs9IG5mX2Zsb3dfdGFibGVfaW5ldC5vCisrb2JqLSQoQ09ORklHX05GX0ZMT1dfVEFCTEVfSFcpCSs9IG5mX2Zsb3dfdGFibGVfaHcubworIAorICMgZ2VuZXJpYyBYIHRhYmxlcworIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRBQkxFUykgKz0geF90YWJsZXMubyB4dF90Y3B1ZHAubworLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYworKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYworQEAgLTI0OCwxMCArMjQ4LDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBuZl9mbG93X2hhc19leHBpcmVkKGMKKyAJcmV0dXJuIG5mX2Zsb3dfdGltZW91dF9kZWx0YShmbG93LT50aW1lb3V0KSA8PSAwOworIH0KKyAKKytzdGF0aWMgaW5saW5lIGJvb2wgbmZfZmxvd19pbl9odyhjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KQorK3sKKysJcmV0dXJuIGZsb3ctPmZsYWdzICYgRkxPV19PRkZMT0FEX0hXOworK30KKysKKyBzdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfZGVsKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsCisgCQkJICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KQorIHsKKyAJc3RydWN0IGZsb3dfb2ZmbG9hZF9lbnRyeSAqZTsKKysJc3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KCZmbG93X3RhYmxlLT5mdF9uZXQpOworIAorIAlyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KCZmbG93X3RhYmxlLT5yaGFzaHRhYmxlLAorIAkJCSAgICAgICAmZmxvdy0+dHVwbGVoYXNoW0ZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUxdLm5vZGUsCitAQCAtMjcxLDYgKzI3Nyw5IEBAIHN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF9kZWwoc3RydWN0IG5mX2YKKyAJaWYgKCEoZmxvdy0+ZmxhZ3MgJiBGTE9XX09GRkxPQURfVEVBUkRPV04pKQorIAkJZmxvd19vZmZsb2FkX2ZpeHVwX2N0X3N0YXRlKGUtPmN0KTsKKyAKKysJaWYgKG5mX2Zsb3dfaW5faHcoZmxvdykpCisrCQluZl9mbG93X29mZmxvYWRfaHdfZGVsKG5ldCwgZmxvdyk7CisrCisgCWZsb3dfb2ZmbG9hZF9mcmVlKGZsb3cpOworIH0KKyAKK0BAIC0zNjEsNiArMzcwLDkgQEAgc3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAoc3RydQorIAlpZiAoIXRlYXJkb3duKQorIAkJbmZfY3Rfb2ZmbG9hZF90aW1lb3V0KGZsb3cpOworIAorKwlpZiAobmZfZmxvd19pbl9odyhmbG93KSAmJiAhdGVhcmRvd24pCisrCQlyZXR1cm47CisrCisgCWlmIChuZl9mbG93X2hhc19leHBpcmVkKGZsb3cpIHx8IHRlYXJkb3duKQorIAkJZmxvd19vZmZsb2FkX2RlbChmbG93X3RhYmxlLCBmbG93KTsKKyB9CitAQCAtNDkwLDEwICs1MDIsNDMgQEAgaW50IG5mX2Zsb3dfZG5hdF9wb3J0KGNvbnN0IHN0cnVjdCBmbG93XworIH0KKyBFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X2RuYXRfcG9ydCk7CisgCisrc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9mbG93X3RhYmxlX2h3IF9fcmN1ICpuZl9mbG93X3RhYmxlX2h3X2hvb2sgX19yZWFkX21vc3RseTsKKysKKytzdGF0aWMgaW50IG5mX2Zsb3dfb2ZmbG9hZF9od19pbml0KHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUpCisreworKwljb25zdCBzdHJ1Y3QgbmZfZmxvd190YWJsZV9odyAqb2ZmbG9hZDsKKysKKysJaWYgKCFyY3VfYWNjZXNzX3BvaW50ZXIobmZfZmxvd190YWJsZV9od19ob29rKSkKKysJCXJlcXVlc3RfbW9kdWxlKCJuZi1mbG93LXRhYmxlLWh3Iik7CisrCisrCXJjdV9yZWFkX2xvY2soKTsKKysJb2ZmbG9hZCA9IHJjdV9kZXJlZmVyZW5jZShuZl9mbG93X3RhYmxlX2h3X2hvb2spOworKwlpZiAoIW9mZmxvYWQpCisrCQlnb3RvIGVycl9ub19od19vZmZsb2FkOworKworKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KG9mZmxvYWQtPm93bmVyKSkKKysJCWdvdG8gZXJyX25vX2h3X29mZmxvYWQ7CisrCisrCXJjdV9yZWFkX3VubG9jaygpOworKworKwlyZXR1cm4gMDsKKysKKytlcnJfbm9faHdfb2ZmbG9hZDoKKysJcmN1X3JlYWRfdW5sb2NrKCk7CisrCisrCXJldHVybiAtRU9QTk9UU1VQUDsKKyt9CisrCisgaW50IG5mX2Zsb3dfdGFibGVfaW5pdChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpCisgeworIAlpbnQgZXJyOworIAorKwlpZiAoZmxvd3RhYmxlLT5mbGFncyAmIE5GX0ZMT1dUQUJMRV9GX0hXKSB7CisrCQllcnIgPSBuZl9mbG93X29mZmxvYWRfaHdfaW5pdChmbG93dGFibGUpOworKwkJaWYgKGVycikKKysJCQlyZXR1cm4gZXJyOworKwl9CisrCisgCUlOSVRfREVGRVJSQUJMRV9XT1JLKCZmbG93dGFibGUtPmdjX3dvcmssIG5mX2Zsb3dfb2ZmbG9hZF93b3JrX2djKTsKKyAKKyAJZXJyID0gcmhhc2h0YWJsZV9pbml0KCZmbG93dGFibGUtPnJoYXNodGFibGUsCitAQCAtNTM0LDYgKzU3OSw4IEBAIHN0YXRpYyB2b2lkIG5mX2Zsb3dfdGFibGVfaXRlcmF0ZV9jbGVhbnUKKyB7CisgCW5mX2Zsb3dfdGFibGVfaXRlcmF0ZShmbG93dGFibGUsIG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cCwgZGV2KTsKKyAJZmx1c2hfZGVsYXllZF93b3JrKCZmbG93dGFibGUtPmdjX3dvcmspOworKwlpZiAoZmxvd3RhYmxlLT5mbGFncyAmIE5GX0ZMT1dUQUJMRV9GX0hXKQorKwkJZmx1c2hfd29yaygmbmZfZmxvd19vZmZsb2FkX2h3X3dvcmspOworIH0KKyAKKyB2b2lkIG5mX2Zsb3dfdGFibGVfY2xlYW51cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorQEAgLTU0Nyw2ICs1OTQsMjYgQEAgdm9pZCBuZl9mbG93X3RhYmxlX2NsZWFudXAoc3RydWN0IG5ldF9kZQorIH0KKyBFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X3RhYmxlX2NsZWFudXApOworIAorK3N0cnVjdCB3b3JrX3N0cnVjdCBuZl9mbG93X29mZmxvYWRfaHdfd29yazsKKytFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X29mZmxvYWRfaHdfd29yayk7CisrCisrLyogR2l2ZSB0aGUgaGFyZHdhcmUgd29ya3F1ZXVlIHRoZSBjaGFuY2UgdG8gcmVtb3ZlIGVudHJpZXMgZnJvbSBoYXJkd2FyZS4qLworK3N0YXRpYyB2b2lkIG5mX2Zsb3dfb2ZmbG9hZF9od19mcmVlKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSkKKyt7CisrCWNvbnN0IHN0cnVjdCBuZl9mbG93X3RhYmxlX2h3ICpvZmZsb2FkOworKworKwlmbHVzaF93b3JrKCZuZl9mbG93X29mZmxvYWRfaHdfd29yayk7CisrCisrCXJjdV9yZWFkX2xvY2soKTsKKysJb2ZmbG9hZCA9IHJjdV9kZXJlZmVyZW5jZShuZl9mbG93X3RhYmxlX2h3X2hvb2spOworKwlpZiAoIW9mZmxvYWQpIHsKKysJCXJjdV9yZWFkX3VubG9jaygpOworKwkJcmV0dXJuOworKwl9CisrCW1vZHVsZV9wdXQob2ZmbG9hZC0+b3duZXIpOworKwlyY3VfcmVhZF91bmxvY2soKTsKKyt9CisrCisgdm9pZCBuZl9mbG93X3RhYmxlX2ZyZWUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSkKKyB7CisgCW11dGV4X2xvY2soJmZsb3d0YWJsZV9sb2NrKTsKK0BAIC01NTYsOSArNjIzLDU4IEBAIHZvaWQgbmZfZmxvd190YWJsZV9mcmVlKHN0cnVjdCBuZl9mbG93dGEKKyAJbmZfZmxvd190YWJsZV9pdGVyYXRlKGZsb3dfdGFibGUsIG5mX2Zsb3dfdGFibGVfZG9fY2xlYW51cCwgTlVMTCk7CisgCW5mX2Zsb3dfdGFibGVfaXRlcmF0ZShmbG93X3RhYmxlLCBuZl9mbG93X29mZmxvYWRfZ2Nfc3RlcCwgZmxvd190YWJsZSk7CisgCXJoYXNodGFibGVfZGVzdHJveSgmZmxvd190YWJsZS0+cmhhc2h0YWJsZSk7CisrCWlmIChmbG93X3RhYmxlLT5mbGFncyAmIE5GX0ZMT1dUQUJMRV9GX0hXKQorKwkJbmZfZmxvd19vZmZsb2FkX2h3X2ZyZWUoZmxvd190YWJsZSk7CisgfQorIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfZnJlZSk7CisgCisrLyogTXVzdCBiZSBjYWxsZWQgZnJvbSB1c2VyIGNvbnRleHQuICovCisrdm9pZCBuZl9mbG93X29mZmxvYWRfaHdfYWRkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywKKysJCQkgICAgc3RydWN0IG5mX2Nvbm4gKmN0KQorK3sKKysJY29uc3Qgc3RydWN0IG5mX2Zsb3dfdGFibGVfaHcgKm9mZmxvYWQ7CisrCisrCXJjdV9yZWFkX2xvY2soKTsKKysJb2ZmbG9hZCA9IHJjdV9kZXJlZmVyZW5jZShuZl9mbG93X3RhYmxlX2h3X2hvb2spOworKwlpZiAob2ZmbG9hZCkKKysJCW9mZmxvYWQtPmFkZChuZXQsIGZsb3csIGN0KTsKKysJcmN1X3JlYWRfdW5sb2NrKCk7CisrfQorK0VYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfb2ZmbG9hZF9od19hZGQpOworKworKy8qIE11c3QgYmUgY2FsbGVkIGZyb20gdXNlciBjb250ZXh0LiAqLworK3ZvaWQgbmZfZmxvd19vZmZsb2FkX2h3X2RlbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpCisreworKwljb25zdCBzdHJ1Y3QgbmZfZmxvd190YWJsZV9odyAqb2ZmbG9hZDsKKysKKysJcmN1X3JlYWRfbG9jaygpOworKwlvZmZsb2FkID0gcmN1X2RlcmVmZXJlbmNlKG5mX2Zsb3dfdGFibGVfaHdfaG9vayk7CisrCWlmIChvZmZsb2FkKQorKwkJb2ZmbG9hZC0+ZGVsKG5ldCwgZmxvdyk7CisrCXJjdV9yZWFkX3VubG9jaygpOworK30KKytFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X29mZmxvYWRfaHdfZGVsKTsKKysKKytpbnQgbmZfZmxvd190YWJsZV9od19yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgbmZfZmxvd190YWJsZV9odyAqb2ZmbG9hZCkKKyt7CisrCWlmIChyY3VfYWNjZXNzX3BvaW50ZXIobmZfZmxvd190YWJsZV9od19ob29rKSkKKysJCXJldHVybiAtRUJVU1k7CisrCisrCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9mbG93X3RhYmxlX2h3X2hvb2ssIG9mZmxvYWQpOworKworKwlyZXR1cm4gMDsKKyt9CisrRVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd190YWJsZV9od19yZWdpc3Rlcik7CisrCisrdm9pZCBuZl9mbG93X3RhYmxlX2h3X3VucmVnaXN0ZXIoY29uc3Qgc3RydWN0IG5mX2Zsb3dfdGFibGVfaHcgKm9mZmxvYWQpCisreworKwlXQVJOX09OKHJjdV9hY2Nlc3NfcG9pbnRlcihuZl9mbG93X3RhYmxlX2h3X2hvb2spICE9IG9mZmxvYWQpOworKwlyY3VfYXNzaWduX3BvaW50ZXIobmZfZmxvd190YWJsZV9od19ob29rLCBOVUxMKTsKKysKKysJc3luY2hyb25pemVfcmN1KCk7CisrfQorK0VYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfaHdfdW5yZWdpc3Rlcik7CisrCisgc3RhdGljIGludCBuZl9mbG93X3RhYmxlX25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCisgCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikKKyB7CistLS0gL2Rldi9udWxsCisrKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaHcuYworQEAgLTAsMCArMSwxNjkgQEAKKysjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisrI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKysjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisrI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgorKyNpbmNsdWRlIDxsaW51eC9yaGFzaHRhYmxlLmg+CisrI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaD4KKysjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaD4KKysjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oPgorKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oPgorKworK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZmxvd19vZmZsb2FkX2h3X3BlbmRpbmdfbGlzdF9sb2NrKTsKKytzdGF0aWMgTElTVF9IRUFEKGZsb3dfb2ZmbG9hZF9od19wZW5kaW5nX2xpc3QpOworKworK3N0YXRpYyBERUZJTkVfTVVURVgobmZfZmxvd19vZmZsb2FkX2h3X211dGV4KTsKKysKKytzdHJ1Y3QgZmxvd19vZmZsb2FkX2h3IHsKKysJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworKwllbnVtIGZsb3dfb2ZmbG9hZF90eXBlCXR5cGU7CisrCXN0cnVjdCBmbG93X29mZmxvYWQJKmZsb3c7CisrCXN0cnVjdCBuZl9jb25uCQkqY3Q7CisrCXBvc3NpYmxlX25ldF90CQlmbG93X2h3X25ldDsKKyt9OworKworK3N0YXRpYyBpbnQgZG9fZmxvd19vZmZsb2FkX2h3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywKKysJCQkgICAgICBpbnQgdHlwZSkKKyt7CisrCXN0cnVjdCBuZXRfZGV2aWNlICppbmRldjsKKysJaW50IHJldCwgaWZpbmRleDsKKysKKysJaWZpbmRleCA9IGZsb3ctPnR1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX09SSUdJTkFMXS50dXBsZS5paWZpZHg7CisrCWluZGV2ID0gZGV2X2dldF9ieV9pbmRleChuZXQsIGlmaW5kZXgpOworKwlpZiAoV0FSTl9PTighaW5kZXYpKQorKwkJcmV0dXJuIDA7CisrCisrCW11dGV4X2xvY2soJm5mX2Zsb3dfb2ZmbG9hZF9od19tdXRleCk7CisrCXJldCA9IGluZGV2LT5uZXRkZXZfb3BzLT5uZG9fZmxvd19vZmZsb2FkKHR5cGUsIGZsb3cpOworKwltdXRleF91bmxvY2soJm5mX2Zsb3dfb2ZmbG9hZF9od19tdXRleCk7CisrCisrCWRldl9wdXQoaW5kZXYpOworKworKwlyZXR1cm4gcmV0OworK30KKysKKytzdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfaHdfd29ya19hZGQoc3RydWN0IGZsb3dfb2ZmbG9hZF9odyAqb2ZmbG9hZCkKKyt7CisrCXN0cnVjdCBuZXQgKm5ldDsKKysJaW50IHJldDsKKysKKysJaWYgKG5mX2N0X2lzX2R5aW5nKG9mZmxvYWQtPmN0KSkKKysJCXJldHVybjsKKysKKysJbmV0ID0gcmVhZF9wbmV0KCZvZmZsb2FkLT5mbG93X2h3X25ldCk7CisrCXJldCA9IGRvX2Zsb3dfb2ZmbG9hZF9odyhuZXQsIG9mZmxvYWQtPmZsb3csIEZMT1dfT0ZGTE9BRF9BREQpOworKwlpZiAocmV0ID49IDApCisrCQlvZmZsb2FkLT5mbG93LT5mbGFncyB8PSBGTE9XX09GRkxPQURfSFc7CisrfQorKworK3N0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF9od193b3JrX2RlbChzdHJ1Y3QgZmxvd19vZmZsb2FkX2h3ICpvZmZsb2FkKQorK3sKKysJc3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KCZvZmZsb2FkLT5mbG93X2h3X25ldCk7CisrCisrCWRvX2Zsb3dfb2ZmbG9hZF9odyhuZXQsIG9mZmxvYWQtPmZsb3csIEZMT1dfT0ZGTE9BRF9ERUwpOworK30KKysKKytzdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfaHdfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCisreworKwlzdHJ1Y3QgZmxvd19vZmZsb2FkX2h3ICpvZmZsb2FkLCAqbmV4dDsKKysJTElTVF9IRUFEKGh3X29mZmxvYWRfcGVuZGluZyk7CisrCisrCXNwaW5fbG9ja19iaCgmZmxvd19vZmZsb2FkX2h3X3BlbmRpbmdfbGlzdF9sb2NrKTsKKysJbGlzdF9yZXBsYWNlX2luaXQoJmZsb3dfb2ZmbG9hZF9od19wZW5kaW5nX2xpc3QsICZod19vZmZsb2FkX3BlbmRpbmcpOworKwlzcGluX3VubG9ja19iaCgmZmxvd19vZmZsb2FkX2h3X3BlbmRpbmdfbGlzdF9sb2NrKTsKKysKKysJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG9mZmxvYWQsIG5leHQsICZod19vZmZsb2FkX3BlbmRpbmcsIGxpc3QpIHsKKysJCXN3aXRjaCAob2ZmbG9hZC0+dHlwZSkgeworKwkJY2FzZSBGTE9XX09GRkxPQURfQUREOgorKwkJCWZsb3dfb2ZmbG9hZF9od193b3JrX2FkZChvZmZsb2FkKTsKKysJCQlicmVhazsKKysJCWNhc2UgRkxPV19PRkZMT0FEX0RFTDoKKysJCQlmbG93X29mZmxvYWRfaHdfd29ya19kZWwob2ZmbG9hZCk7CisrCQkJYnJlYWs7CisrCQl9CisrCQlpZiAob2ZmbG9hZC0+Y3QpCisrCQkJbmZfY29ubnRyYWNrX3B1dCgmb2ZmbG9hZC0+Y3QtPmN0X2dlbmVyYWwpOworKwkJbGlzdF9kZWwoJm9mZmxvYWQtPmxpc3QpOworKwkJa2ZyZWUob2ZmbG9hZCk7CisrCX0KKyt9CisrCisrc3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3F1ZXVlX3dvcmsoc3RydWN0IGZsb3dfb2ZmbG9hZF9odyAqb2ZmbG9hZCkKKyt7CisrCXNwaW5fbG9ja19iaCgmZmxvd19vZmZsb2FkX2h3X3BlbmRpbmdfbGlzdF9sb2NrKTsKKysJbGlzdF9hZGRfdGFpbCgmb2ZmbG9hZC0+bGlzdCwgJmZsb3dfb2ZmbG9hZF9od19wZW5kaW5nX2xpc3QpOworKwlzcGluX3VubG9ja19iaCgmZmxvd19vZmZsb2FkX2h3X3BlbmRpbmdfbGlzdF9sb2NrKTsKKysKKysJc2NoZWR1bGVfd29yaygmbmZfZmxvd19vZmZsb2FkX2h3X3dvcmspOworK30KKysKKytzdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfaHdfYWRkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywKKysJCQkJc3RydWN0IG5mX2Nvbm4gKmN0KQorK3sKKysJc3RydWN0IGZsb3dfb2ZmbG9hZF9odyAqb2ZmbG9hZDsKKysKKysJb2ZmbG9hZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBmbG93X29mZmxvYWRfaHcpLCBHRlBfQVRPTUlDKTsKKysJaWYgKCFvZmZsb2FkKQorKwkJcmV0dXJuOworKworKwluZl9jb25udHJhY2tfZ2V0KCZjdC0+Y3RfZ2VuZXJhbCk7CisrCW9mZmxvYWQtPnR5cGUgPSBGTE9XX09GRkxPQURfQUREOworKwlvZmZsb2FkLT5jdCA9IGN0OworKwlvZmZsb2FkLT5mbG93ID0gZmxvdzsKKysJd3JpdGVfcG5ldCgmb2ZmbG9hZC0+Zmxvd19od19uZXQsIG5ldCk7CisrCisrCWZsb3dfb2ZmbG9hZF9xdWV1ZV93b3JrKG9mZmxvYWQpOworK30KKysKKytzdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfaHdfZGVsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdykKKyt7CisrCXN0cnVjdCBmbG93X29mZmxvYWRfaHcgKm9mZmxvYWQ7CisrCisrCW9mZmxvYWQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZmxvd19vZmZsb2FkX2h3KSwgR0ZQX0FUT01JQyk7CisrCWlmICghb2ZmbG9hZCkKKysJCXJldHVybjsKKysKKysJb2ZmbG9hZC0+dHlwZSA9IEZMT1dfT0ZGTE9BRF9ERUw7CisrCW9mZmxvYWQtPmN0ID0gTlVMTDsKKysJb2ZmbG9hZC0+ZmxvdyA9IGZsb3c7CisrCXdyaXRlX3BuZXQoJm9mZmxvYWQtPmZsb3dfaHdfbmV0LCBuZXQpOworKworKwlmbG93X29mZmxvYWRfcXVldWVfd29yayhvZmZsb2FkKTsKKyt9CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9mbG93X3RhYmxlX2h3IGZsb3dfb2ZmbG9hZF9odyA9IHsKKysJLmFkZAk9IGZsb3dfb2ZmbG9hZF9od19hZGQsCisrCS5kZWwJPSBmbG93X29mZmxvYWRfaHdfZGVsLAorKwkub3duZXIJPSBUSElTX01PRFVMRSwKKyt9OworKworK3N0YXRpYyBpbnQgX19pbml0IG5mX2Zsb3dfdGFibGVfaHdfbW9kdWxlX2luaXQodm9pZCkKKyt7CisrCUlOSVRfV09SSygmbmZfZmxvd19vZmZsb2FkX2h3X3dvcmssIGZsb3dfb2ZmbG9hZF9od193b3JrKTsKKysJbmZfZmxvd190YWJsZV9od19yZWdpc3RlcigmZmxvd19vZmZsb2FkX2h3KTsKKysKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyB2b2lkIF9fZXhpdCBuZl9mbG93X3RhYmxlX2h3X21vZHVsZV9leGl0KHZvaWQpCisreworKwlzdHJ1Y3QgZmxvd19vZmZsb2FkX2h3ICpvZmZsb2FkLCAqbmV4dDsKKysJTElTVF9IRUFEKGh3X29mZmxvYWRfcGVuZGluZyk7CisrCisrCW5mX2Zsb3dfdGFibGVfaHdfdW5yZWdpc3RlcigmZmxvd19vZmZsb2FkX2h3KTsKKysJY2FuY2VsX3dvcmtfc3luYygmbmZfZmxvd19vZmZsb2FkX2h3X3dvcmspOworKworKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUob2ZmbG9hZCwgbmV4dCwgJmh3X29mZmxvYWRfcGVuZGluZywgbGlzdCkgeworKwkJaWYgKG9mZmxvYWQtPmN0KQorKwkJCW5mX2Nvbm50cmFja19wdXQoJm9mZmxvYWQtPmN0LT5jdF9nZW5lcmFsKTsKKysJCWxpc3RfZGVsKCZvZmZsb2FkLT5saXN0KTsKKysJCWtmcmVlKG9mZmxvYWQpOworKwl9CisrfQorKworK21vZHVsZV9pbml0KG5mX2Zsb3dfdGFibGVfaHdfbW9kdWxlX2luaXQpOworK21vZHVsZV9leGl0KG5mX2Zsb3dfdGFibGVfaHdfbW9kdWxlX2V4aXQpOworKworK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKytNT0RVTEVfQVVUSE9SKCJQYWJsbyBOZWlyYSBBeXVzbyA8cGFibG9AbmV0ZmlsdGVyLm9yZz4iKTsKKytNT0RVTEVfQUxJQVMoIm5mLWZsb3ctdGFibGUtaHciKTsKKy0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jCisrKysgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYworQEAgLTU3NDgsNiArNTc0OCwxMyBAQCBzdGF0aWMgaW50IG5mX3RhYmxlc19mbG93dGFibGVfcGFyc2VfaG9vCisgCWlmIChlcnIgPCAwKQorIAkJcmV0dXJuIGVycjsKKyAKKysJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworKwkJaWYgKGZsb3d0YWJsZS0+ZGF0YS5mbGFncyAmIE5GX0ZMT1dUQUJMRV9GX0hXICYmCisrCQkgICAgIWRldl9hcnJheVtpXS0+bmV0ZGV2X29wcy0+bmRvX2Zsb3dfb2ZmbG9hZCkgeworKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKysJCX0KKysJfQorKworIAlvcHMgPSBrY2FsbG9jKG4sIHNpemVvZihzdHJ1Y3QgbmZfaG9va19vcHMpLCBHRlBfS0VSTkVMKTsKKyAJaWYgKCFvcHMpCisgCQlyZXR1cm4gLUVOT01FTTsKK0BAIC01ODc4LDEwICs1ODg1LDE5IEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX25ld2Zsb3d0YWJsZShzdHJ1Y3QKKyAJfQorIAorIAlmbG93dGFibGUtPmRhdGEudHlwZSA9IHR5cGU7CisrCXdyaXRlX3BuZXQoJmZsb3d0YWJsZS0+ZGF0YS5mdF9uZXQsIG5ldCk7CisrCisgCWVyciA9IHR5cGUtPmluaXQoJmZsb3d0YWJsZS0+ZGF0YSk7CisgCWlmIChlcnIgPCAwKQorIAkJZ290byBlcnIzOworIAorKwlpZiAobmxhW05GVEFfRkxPV1RBQkxFX0ZMQUdTXSkgeworKwkJZmxvd3RhYmxlLT5kYXRhLmZsYWdzID0KKysJCQludG9obChubGFfZ2V0X2JlMzIobmxhW05GVEFfRkxPV1RBQkxFX0ZMQUdTXSkpOworKwkJaWYgKGZsb3d0YWJsZS0+ZGF0YS5mbGFncyAmIH5ORl9GTE9XVEFCTEVfRl9IVykKKysJCQlnb3RvIGVycjQ7CisrCX0KKysKKyAJZXJyID0gbmZfdGFibGVzX2Zsb3d0YWJsZV9wYXJzZV9ob29rKCZjdHgsIG5sYVtORlRBX0ZMT1dUQUJMRV9IT09LXSwKKyAJCQkJCSAgICAgZmxvd3RhYmxlKTsKKyAJaWYgKGVyciA8IDApCitAQCAtNjAwNyw3ICs2MDIzLDggQEAgc3RhdGljIGludCBuZl90YWJsZXNfZmlsbF9mbG93dGFibGVfaW5mbworIAkgICAgbmxhX3B1dF9zdHJpbmcoc2tiLCBORlRBX0ZMT1dUQUJMRV9OQU1FLCBmbG93dGFibGUtPm5hbWUpIHx8CisgCSAgICBubGFfcHV0X2JlMzIoc2tiLCBORlRBX0ZMT1dUQUJMRV9VU0UsIGh0b25sKGZsb3d0YWJsZS0+dXNlKSkgfHwKKyAJICAgIG5sYV9wdXRfYmU2NChza2IsIE5GVEFfRkxPV1RBQkxFX0hBTkRMRSwgY3B1X3RvX2JlNjQoZmxvd3RhYmxlLT5oYW5kbGUpLAorLQkJCSBORlRBX0ZMT1dUQUJMRV9QQUQpKQorKwkJCSBORlRBX0ZMT1dUQUJMRV9QQUQpIHx8CisrCSAgICBubGFfcHV0X2JlMzIoc2tiLCBORlRBX0ZMT1dUQUJMRV9GTEFHUywgaHRvbmwoZmxvd3RhYmxlLT5kYXRhLmZsYWdzKSkpCisgCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKyAKKyAJbmVzdCA9IG5sYV9uZXN0X3N0YXJ0X25vZmxhZyhza2IsIE5GVEFfRkxPV1RBQkxFX0hPT0spOworLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMKKysrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jCitAQCAtMTI4LDYgKzEyOCw5IEBAIHN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdAorIAlpZiAocmV0IDwgMCkKKyAJCWdvdG8gZXJyX2Zsb3dfYWRkOworIAorKwlpZiAoZmxvd3RhYmxlLT5mbGFncyAmIE5GX0ZMT1dUQUJMRV9GX0hXKQorKwkJbmZfZmxvd19vZmZsb2FkX2h3X2FkZChuZnRfbmV0KHBrdCksIGZsb3csIGN0KTsKKysKKyAJZHN0X3JlbGVhc2Uocm91dGUudHVwbGVbIWRpcl0uZHN0KTsKKyAJcmV0dXJuOworIApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNjQxLW5ldGZpbHRlci1uZl9mbG93X3RhYmxlLXN1cHBvcnQtaHctb2ZmbG9hZC10aHJvdWdoLXYucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC82NDEtbmV0ZmlsdGVyLW5mX2Zsb3dfdGFibGUtc3VwcG9ydC1ody1vZmZsb2FkLXRocm91Z2gtdi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODA4YzAyCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNjQxLW5ldGZpbHRlci1uZl9mbG93X3RhYmxlLXN1cHBvcnQtaHctb2ZmbG9hZC10aHJvdWdoLXYucGF0Y2gKQEAgLTAsMCArMSwzMDYgQEAKK0Zyb206IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KK0RhdGU6IFRodSwgMTUgTWFyIDIwMTggMjA6NDY6MzEgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gbmV0ZmlsdGVyOiBuZl9mbG93X3RhYmxlOiBzdXBwb3J0IGh3IG9mZmxvYWQgdGhyb3VnaAorIHZpcnR1YWwgaW50ZXJmYWNlcworCitUaGVyZSBhcmUgaGFyZHdhcmUgb2ZmbG9hZCBkZXZpY2VzIHRoYXQgc3VwcG9ydCBvZmZsb2FkaW5nIFZMQU5zIGFuZAorUFBQb0UgZGV2aWNlcy4gQWRkaXRpb25hbGx5LCBpdCBpcyB1c2VmdWwgdG8gYmUgYWJsZSB0byBvZmZsb2FkIHBhY2tldHMKK3JvdXRlZCB0aHJvdWdoIGJyaWRnZSBpbnRlcmZhY2VzIGFzIHdlbGwuCitBZGQgc3VwcG9ydCBmb3IgZmluZGluZyB0aGUgcGF0aCB0byB0aGUgb2ZmbG9hZCBkZXZpY2UgdGhyb3VnaCB0aGVzZQordmlydHVhbCBpbnRlcmZhY2VzLCB3aGlsZSBjb2xsZWN0aW5nIHVzZWZ1bCBwYXJhbWV0ZXJzIGZvciB0aGUgb2ZmbG9hZAorZGV2aWNlLCBsaWtlIFZMQU4gSUQvcHJvdG9jb2wsIFBQUG9FIHNlc3Npb24gYW5kIEV0aGVybmV0IE1BQyBhZGRyZXNzLgorCitTaWduZWQtb2ZmLWJ5OiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CistLS0KKworLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAorKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAorQEAgLTkyMyw2ICs5MjMsNyBAQCBzdHJ1Y3QgdGxzZGV2X29wczsKKyAKKyAKKyBzdHJ1Y3QgZmxvd19vZmZsb2FkOworK3N0cnVjdCBmbG93X29mZmxvYWRfaHdfcGF0aDsKKyAKKyBlbnVtIGZsb3dfb2ZmbG9hZF90eXBlIHsKKyAJRkxPV19PRkZMT0FEX0FERAk9IDAsCitAQCAtMTE2MSw4ICsxMTYyLDE1IEBAIGVudW0gZmxvd19vZmZsb2FkX3R5cGUgeworICAqIGludCAoKm5kb19icmlkZ2VfZGVsbGluaykoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubGgsCisgICoJCQkgICAgIHUxNiBmbGFncyk7CisgICoKKysgKiBpbnQgKCpuZG9fZmxvd19vZmZsb2FkX2NoZWNrKShzdHJ1Y3QgZmxvd19vZmZsb2FkX2h3X3BhdGggKnBhdGgpOworKyAqCUZvciB2aXJ0dWFsIGRldmljZXMgbGlrZSBicmlkZ2VzLCB2bGFuLCBhbmQgcHBwb2UsIGZpbGwgaW4gdGhlCisrICoJdW5kZXJseWluZyBuZXR3b3JrIGRldmljZSB0aGF0IGNhbiBiZSB1c2VkIGZvciBvZmZsb2FkaW5nIGNvbm5lY3Rpb25zLgorKyAqCVJldHVybiBhbiBlcnJvciBpZiBvZmZsb2FkaW5nIGlzIG5vdCBzdXBwb3J0ZWQuCisrICoKKyAgKiBpbnQgKCpuZG9fZmxvd19vZmZsb2FkKShlbnVtIGZsb3dfb2ZmbG9hZF90eXBlIHR5cGUsCistICoJCQkgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KTsKKysgKgkJCSAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csCisrICoJCQkgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX2h3X3BhdGggKnNyYywKKysgKgkJCSAgIHN0cnVjdCBmbG93X29mZmxvYWRfaHdfcGF0aCAqZGVzdCk7CisgICoJQWRkcy9kZWxldGVzIGZsb3cgZW50cnkgdG8vZnJvbSBuZXQgZGV2aWNlIGZsb3d0YWJsZS4KKyAgKgorICAqIGludCAoKm5kb19jaGFuZ2VfY2Fycmllcikoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBuZXdfY2Fycmllcik7CitAQCAtMTQxMiw4ICsxNDIwLDExIEBAIHN0cnVjdCBuZXRfZGV2aWNlX29wcyB7CisgCWludAkJCSgqbmRvX2JyaWRnZV9kZWxsaW5rKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorIAkJCQkJCSAgICAgIHN0cnVjdCBubG1zZ2hkciAqbmxoLAorIAkJCQkJCSAgICAgIHUxNiBmbGFncyk7CisrCWludAkJCSgqbmRvX2Zsb3dfb2ZmbG9hZF9jaGVjaykoc3RydWN0IGZsb3dfb2ZmbG9hZF9od19wYXRoICpwYXRoKTsKKyAJaW50CQkJKCpuZG9fZmxvd19vZmZsb2FkKShlbnVtIGZsb3dfb2ZmbG9hZF90eXBlIHR5cGUsCistCQkJCQkJICAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3cpOworKwkJCQkJCSAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LAorKwkJCQkJCSAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX2h3X3BhdGggKnNyYywKKysJCQkJCQkgICAgc3RydWN0IGZsb3dfb2ZmbG9hZF9od19wYXRoICpkZXN0KTsKKyAJaW50CQkJKCpuZG9fY2hhbmdlX2NhcnJpZXIpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgCQkJCQkJICAgICAgYm9vbCBuZXdfY2Fycmllcik7CisgCWludAkJCSgqbmRvX2dldF9waHlzX3BvcnRfaWQpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCistLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oCisrKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oCitAQCAtODUsNiArODUsMjEgQEAgc3RydWN0IGZsb3dfb2ZmbG9hZCB7CisgCX07CisgfTsKKyAKKysjZGVmaW5lIEZMT1dfT0ZGTE9BRF9QQVRIX0VUSEVSTkVUCUJJVCgwKQorKyNkZWZpbmUgRkxPV19PRkZMT0FEX1BBVEhfVkxBTgkJQklUKDEpCisrI2RlZmluZSBGTE9XX09GRkxPQURfUEFUSF9QUFBPRQkJQklUKDIpCisrCisrc3RydWN0IGZsb3dfb2ZmbG9hZF9od19wYXRoIHsKKysJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKysJdTMyIGZsYWdzOworKworKwl1OCBldGhfc3JjW0VUSF9BTEVOXTsKKysJdTggZXRoX2Rlc3RbRVRIX0FMRU5dOworKwl1MTYgdmxhbl9wcm90bzsKKysJdTE2IHZsYW5faWQ7CisrCXUxNiBwcHBvZV9zaWQ7CisrfTsKKysKKyAjZGVmaW5lIE5GX0ZMT1dfVElNRU9VVCAoMzAgKiBIWikKKyAKKyBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSB7CistLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfaHcuYworKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2h3LmMKK0BAIC0xOSw0OCArMTksNzcgQEAgc3RydWN0IGZsb3dfb2ZmbG9hZF9odyB7CisgCWVudW0gZmxvd19vZmZsb2FkX3R5cGUJdHlwZTsKKyAJc3RydWN0IGZsb3dfb2ZmbG9hZAkqZmxvdzsKKyAJc3RydWN0IG5mX2Nvbm4JCSpjdDsKKy0JcG9zc2libGVfbmV0X3QJCWZsb3dfaHdfbmV0OworKworKwlzdHJ1Y3QgZmxvd19vZmZsb2FkX2h3X3BhdGggc3JjOworKwlzdHJ1Y3QgZmxvd19vZmZsb2FkX2h3X3BhdGggZGVzdDsKKyB9OworIAorLXN0YXRpYyBpbnQgZG9fZmxvd19vZmZsb2FkX2h3KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywKKy0JCQkgICAgICBpbnQgdHlwZSkKKytzdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfY2hlY2tfZXRoZXJuZXQoc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsCisrCQkJCQlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsCisrCQkJCQlzdHJ1Y3QgZmxvd19vZmZsb2FkX2h3X3BhdGggKnBhdGgpCisgeworLQlzdHJ1Y3QgbmV0X2RldmljZSAqaW5kZXY7CistCWludCByZXQsIGlmaW5kZXg7CisrCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwYXRoLT5kZXY7CisrCXN0cnVjdCBuZWlnaGJvdXIgKm47CisgCistCWlmaW5kZXggPSBmbG93LT50dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTF0udHVwbGUuaWlmaWR4OworLQlpbmRldiA9IGRldl9nZXRfYnlfaW5kZXgobmV0LCBpZmluZGV4KTsKKy0JaWYgKFdBUk5fT04oIWluZGV2KSkKKy0JCXJldHVybiAwOworLQorLQltdXRleF9sb2NrKCZuZl9mbG93X29mZmxvYWRfaHdfbXV0ZXgpOworLQlyZXQgPSBpbmRldi0+bmV0ZGV2X29wcy0+bmRvX2Zsb3dfb2ZmbG9hZCh0eXBlLCBmbG93KTsKKy0JbXV0ZXhfdW5sb2NrKCZuZl9mbG93X29mZmxvYWRfaHdfbXV0ZXgpOworKwlpZiAoZGV2LT50eXBlICE9IEFSUEhSRF9FVEhFUikKKysJCXJldHVybjsKKyAKKy0JZGV2X3B1dChpbmRldik7CisrCW1lbWNweShwYXRoLT5ldGhfc3JjLCBwYXRoLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisrCW4gPSBkc3RfbmVpZ2hfbG9va3VwKGRzdCwgJnR1cGxlLT5zcmNfdjQpOworKwlpZiAoIW4pCisrCQlyZXR1cm47CisgCistCXJldHVybiByZXQ7CisrCW1lbWNweShwYXRoLT5ldGhfZGVzdCwgbi0+aGEsIEVUSF9BTEVOKTsKKysJcGF0aC0+ZmxhZ3MgfD0gRkxPV19PRkZMT0FEX1BBVEhfRVRIRVJORVQ7CisrCW5laWdoX3JlbGVhc2Uobik7CisgfQorIAorLXN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF9od193b3JrX2FkZChzdHJ1Y3QgZmxvd19vZmZsb2FkX2h3ICpvZmZsb2FkKQorK3N0YXRpYyBpbnQgZmxvd19vZmZsb2FkX2NoZWNrX3BhdGgoc3RydWN0IG5ldCAqbmV0LAorKwkJCQkgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSwKKysJCQkJICAgc3RydWN0IGRzdF9lbnRyeSAqZHN0LAorKwkJCQkgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX2h3X3BhdGggKnBhdGgpCisgeworLQlzdHJ1Y3QgbmV0ICpuZXQ7CistCWludCByZXQ7CisrCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisgCistCWlmIChuZl9jdF9pc19keWluZyhvZmZsb2FkLT5jdCkpCistCQlyZXR1cm47CisrCWRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KG5ldCwgdHVwbGUtPmlpZmlkeCk7CisrCWlmICghZGV2KQorKwkJcmV0dXJuIC1FTk9FTlQ7CisrCisrCXBhdGgtPmRldiA9IGRldjsKKysJZmxvd19vZmZsb2FkX2NoZWNrX2V0aGVybmV0KHR1cGxlLCBkc3QsIHBhdGgpOworIAorLQluZXQgPSByZWFkX3BuZXQoJm9mZmxvYWQtPmZsb3dfaHdfbmV0KTsKKy0JcmV0ID0gZG9fZmxvd19vZmZsb2FkX2h3KG5ldCwgb2ZmbG9hZC0+ZmxvdywgRkxPV19PRkZMT0FEX0FERCk7CistCWlmIChyZXQgPj0gMCkKKy0JCW9mZmxvYWQtPmZsb3ctPmZsYWdzIHw9IEZMT1dfT0ZGTE9BRF9IVzsKKysJaWYgKGRldi0+bmV0ZGV2X29wcy0+bmRvX2Zsb3dfb2ZmbG9hZF9jaGVjaykKKysJCXJldHVybiBkZXYtPm5ldGRldl9vcHMtPm5kb19mbG93X29mZmxvYWRfY2hlY2socGF0aCk7CisrCisrCXJldHVybiAwOworIH0KKyAKKy1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfaHdfd29ya19kZWwoc3RydWN0IGZsb3dfb2ZmbG9hZF9odyAqb2ZmbG9hZCkKKytzdGF0aWMgaW50IGRvX2Zsb3dfb2ZmbG9hZF9odyhzdHJ1Y3QgZmxvd19vZmZsb2FkX2h3ICpvZmZsb2FkKQorIHsKKy0Jc3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KCZvZmZsb2FkLT5mbG93X2h3X25ldCk7CisrCXN0cnVjdCBuZXRfZGV2aWNlICpzcmNfZGV2ID0gb2ZmbG9hZC0+c3JjLmRldjsKKysJc3RydWN0IG5ldF9kZXZpY2UgKmRlc3RfZGV2ID0gb2ZmbG9hZC0+ZGVzdC5kZXY7CisrCWludCByZXQ7CisrCisrCXJldCA9IHNyY19kZXYtPm5ldGRldl9vcHMtPm5kb19mbG93X29mZmxvYWQob2ZmbG9hZC0+dHlwZSwKKysJCQkJCQkgICAgb2ZmbG9hZC0+ZmxvdywKKysJCQkJCQkgICAgJm9mZmxvYWQtPnNyYywKKysJCQkJCQkgICAgJm9mZmxvYWQtPmRlc3QpOworKworKwkvKiByZXN0b3JlIGRldmljZXMgaW4gY2FzZSB0aGUgZHJpdmVyIG1hbmdsZWQgdGhlbSAqLworKwlvZmZsb2FkLT5zcmMuZGV2ID0gc3JjX2RldjsKKysJb2ZmbG9hZC0+ZGVzdC5kZXYgPSBkZXN0X2RldjsKKyAKKy0JZG9fZmxvd19vZmZsb2FkX2h3KG5ldCwgb2ZmbG9hZC0+ZmxvdywgRkxPV19PRkZMT0FEX0RFTCk7CisrCXJldHVybiByZXQ7CisrfQorKworK3N0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF9od19mcmVlKHN0cnVjdCBmbG93X29mZmxvYWRfaHcgKm9mZmxvYWQpCisreworKwlkZXZfcHV0KG9mZmxvYWQtPnNyYy5kZXYpOworKwlkZXZfcHV0KG9mZmxvYWQtPmRlc3QuZGV2KTsKKysJaWYgKG9mZmxvYWQtPmN0KQorKwkJbmZfY29ubnRyYWNrX3B1dCgmb2ZmbG9hZC0+Y3QtPmN0X2dlbmVyYWwpOworKwlsaXN0X2RlbCgmb2ZmbG9hZC0+bGlzdCk7CisrCWtmcmVlKG9mZmxvYWQpOworIH0KKyAKKyBzdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfaHdfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCitAQCAtNzMsMTggKzEwMiwyMiBAQCBzdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfaHdfd29yayhzdHJ1Y3QKKyAJc3Bpbl91bmxvY2tfYmgoJmZsb3dfb2ZmbG9hZF9od19wZW5kaW5nX2xpc3RfbG9jayk7CisgCisgCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShvZmZsb2FkLCBuZXh0LCAmaHdfb2ZmbG9hZF9wZW5kaW5nLCBsaXN0KSB7CisrCQltdXRleF9sb2NrKCZuZl9mbG93X29mZmxvYWRfaHdfbXV0ZXgpOworIAkJc3dpdGNoIChvZmZsb2FkLT50eXBlKSB7CisgCQljYXNlIEZMT1dfT0ZGTE9BRF9BREQ6CistCQkJZmxvd19vZmZsb2FkX2h3X3dvcmtfYWRkKG9mZmxvYWQpOworKwkJCWlmIChuZl9jdF9pc19keWluZyhvZmZsb2FkLT5jdCkpCisrCQkJCWJyZWFrOworKworKwkJCWlmIChkb19mbG93X29mZmxvYWRfaHcob2ZmbG9hZCkgPj0gMCkKKysJCQkJb2ZmbG9hZC0+Zmxvdy0+ZmxhZ3MgfD0gRkxPV19PRkZMT0FEX0hXOworIAkJCWJyZWFrOworIAkJY2FzZSBGTE9XX09GRkxPQURfREVMOgorLQkJCWZsb3dfb2ZmbG9hZF9od193b3JrX2RlbChvZmZsb2FkKTsKKysJCQlkb19mbG93X29mZmxvYWRfaHcob2ZmbG9hZCk7CisgCQkJYnJlYWs7CisgCQl9CistCQlpZiAob2ZmbG9hZC0+Y3QpCistCQkJbmZfY29ubnRyYWNrX3B1dCgmb2ZmbG9hZC0+Y3QtPmN0X2dlbmVyYWwpOworLQkJbGlzdF9kZWwoJm9mZmxvYWQtPmxpc3QpOworLQkJa2ZyZWUob2ZmbG9hZCk7CisrCQltdXRleF91bmxvY2soJm5mX2Zsb3dfb2ZmbG9hZF9od19tdXRleCk7CisrCisrCQlmbG93X29mZmxvYWRfaHdfZnJlZShvZmZsb2FkKTsKKyAJfQorIH0KKyAKK0BAIC05NywyMCArMTMwLDU2IEBAIHN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF9xdWV1ZV93b3JrKHN0cnUKKyAJc2NoZWR1bGVfd29yaygmbmZfZmxvd19vZmZsb2FkX2h3X3dvcmspOworIH0KKyAKKytzdGF0aWMgc3RydWN0IGZsb3dfb2ZmbG9hZF9odyAqCisrZmxvd19vZmZsb2FkX2h3X3ByZXBhcmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93KQorK3sKKysJc3RydWN0IGZsb3dfb2ZmbG9hZF9od19wYXRoIHNyYyA9IHt9OworKwlzdHJ1Y3QgZmxvd19vZmZsb2FkX2h3X3BhdGggZGVzdCA9IHt9OworKwlzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZV9zLCAqdHVwbGVfZDsKKysJc3RydWN0IGZsb3dfb2ZmbG9hZF9odyAqb2ZmbG9hZCA9IE5VTEw7CisrCisrCXJjdV9yZWFkX2xvY2tfYmgoKTsKKysKKysJdHVwbGVfcyA9ICZmbG93LT50dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTF0udHVwbGU7CisrCXR1cGxlX2QgPSAmZmxvdy0+dHVwbGVoYXNoW0ZMT1dfT0ZGTE9BRF9ESVJfUkVQTFldLnR1cGxlOworKworKwlpZiAoZmxvd19vZmZsb2FkX2NoZWNrX3BhdGgobmV0LCB0dXBsZV9zLCB0dXBsZV9kLT5kc3RfY2FjaGUsICZzcmMpKQorKwkJZ290byBvdXQ7CisrCisrCWlmIChmbG93X29mZmxvYWRfY2hlY2tfcGF0aChuZXQsIHR1cGxlX2QsIHR1cGxlX3MtPmRzdF9jYWNoZSwgJmRlc3QpKQorKwkJZ290byBvdXQ7CisrCisrCWlmICghc3JjLmRldi0+bmV0ZGV2X29wcy0+bmRvX2Zsb3dfb2ZmbG9hZCkKKysJCWdvdG8gb3V0OworKworKwlvZmZsb2FkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZsb3dfb2ZmbG9hZF9odyksIEdGUF9BVE9NSUMpOworKwlpZiAoIW9mZmxvYWQpCisrCQlnb3RvIG91dDsKKysKKysJZGV2X2hvbGQoc3JjLmRldik7CisrCWRldl9ob2xkKGRlc3QuZGV2KTsKKysJb2ZmbG9hZC0+c3JjID0gc3JjOworKwlvZmZsb2FkLT5kZXN0ID0gZGVzdDsKKysJb2ZmbG9hZC0+ZmxvdyA9IGZsb3c7CisrCisrb3V0OgorKwlyY3VfcmVhZF91bmxvY2tfYmgoKTsKKysKKysJcmV0dXJuIG9mZmxvYWQ7CisrfQorKworIHN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF9od19hZGQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LAorIAkJCQlzdHJ1Y3QgbmZfY29ubiAqY3QpCisgeworIAlzdHJ1Y3QgZmxvd19vZmZsb2FkX2h3ICpvZmZsb2FkOworIAorLQlvZmZsb2FkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGZsb3dfb2ZmbG9hZF9odyksIEdGUF9BVE9NSUMpOworKwlvZmZsb2FkID0gZmxvd19vZmZsb2FkX2h3X3ByZXBhcmUobmV0LCBmbG93KTsKKyAJaWYgKCFvZmZsb2FkKQorIAkJcmV0dXJuOworIAorIAluZl9jb25udHJhY2tfZ2V0KCZjdC0+Y3RfZ2VuZXJhbCk7CisgCW9mZmxvYWQtPnR5cGUgPSBGTE9XX09GRkxPQURfQUREOworIAlvZmZsb2FkLT5jdCA9IGN0OworLQlvZmZsb2FkLT5mbG93ID0gZmxvdzsKKy0Jd3JpdGVfcG5ldCgmb2ZmbG9hZC0+Zmxvd19od19uZXQsIG5ldCk7CisgCisgCWZsb3dfb2ZmbG9hZF9xdWV1ZV93b3JrKG9mZmxvYWQpOworIH0KK0BAIC0xMTksMTQgKzE4OCwxMSBAQCBzdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfaHdfZGVsKHN0cnVjdCBuCisgeworIAlzdHJ1Y3QgZmxvd19vZmZsb2FkX2h3ICpvZmZsb2FkOworIAorLQlvZmZsb2FkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGZsb3dfb2ZmbG9hZF9odyksIEdGUF9BVE9NSUMpOworKwlvZmZsb2FkID0gZmxvd19vZmZsb2FkX2h3X3ByZXBhcmUobmV0LCBmbG93KTsKKyAJaWYgKCFvZmZsb2FkKQorIAkJcmV0dXJuOworIAorIAlvZmZsb2FkLT50eXBlID0gRkxPV19PRkZMT0FEX0RFTDsKKy0Jb2ZmbG9hZC0+Y3QgPSBOVUxMOworLQlvZmZsb2FkLT5mbG93ID0gZmxvdzsKKy0Jd3JpdGVfcG5ldCgmb2ZmbG9hZC0+Zmxvd19od19uZXQsIG5ldCk7CisgCisgCWZsb3dfb2ZmbG9hZF9xdWV1ZV93b3JrKG9mZmxvYWQpOworIH0KK0BAIC0xNTMsMTIgKzIxOSw4IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9mbG93X3RhYmxlX2h3X21vZHUKKyAJbmZfZmxvd190YWJsZV9od191bnJlZ2lzdGVyKCZmbG93X29mZmxvYWRfaHcpOworIAljYW5jZWxfd29ya19zeW5jKCZuZl9mbG93X29mZmxvYWRfaHdfd29yayk7CisgCistCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShvZmZsb2FkLCBuZXh0LCAmaHdfb2ZmbG9hZF9wZW5kaW5nLCBsaXN0KSB7CistCQlpZiAob2ZmbG9hZC0+Y3QpCistCQkJbmZfY29ubnRyYWNrX3B1dCgmb2ZmbG9hZC0+Y3QtPmN0X2dlbmVyYWwpOworLQkJbGlzdF9kZWwoJm9mZmxvYWQtPmxpc3QpOworLQkJa2ZyZWUob2ZmbG9hZCk7CistCX0KKysJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG9mZmxvYWQsIG5leHQsICZod19vZmZsb2FkX3BlbmRpbmcsIGxpc3QpCisrCQlmbG93X29mZmxvYWRfaHdfZnJlZShvZmZsb2FkKTsKKyB9CisgCisgbW9kdWxlX2luaXQobmZfZmxvd190YWJsZV9od19tb2R1bGVfaW5pdCk7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC82NDItbmV0LTgwMjFxLXN1cHBvcnQtaGFyZHdhcmUtZmxvdy10YWJsZS1vZmZsb2FkLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNjQyLW5ldC04MDIxcS1zdXBwb3J0LWhhcmR3YXJlLWZsb3ctdGFibGUtb2ZmbG9hZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmNjMjhhCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNjQyLW5ldC04MDIxcS1zdXBwb3J0LWhhcmR3YXJlLWZsb3ctdGFibGUtb2ZmbG9hZC5wYXRjaApAQCAtMCwwICsxLDYxIEBACitGcm9tOiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CitEYXRlOiBUaHUsIDE1IE1hciAyMDE4IDIwOjQ5OjU4ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIG5ldDogODAyMXE6IHN1cHBvcnQgaGFyZHdhcmUgZmxvdyB0YWJsZSBvZmZsb2FkCisKK0FkZCB0aGUgVkxBTiBJRCBhbmQgcHJvdG9jb2wgaW5mb3JtYXRpb24KKworU2lnbmVkLW9mZi1ieTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorLS0tCisKKy0tLSBhL25ldC84MDIxcS92bGFuX2Rldi5jCisrKysgYi9uZXQvODAyMXEvdmxhbl9kZXYuYworQEAgLTI3LDYgKzI3LDExIEBACisgI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorICNpbmNsdWRlIDxuZXQvYXJwLmg+CisgCisrI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0ZMT1dfVEFCTEUpCisrI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgorKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaD4KKysjZW5kaWYKKysKKyAjaW5jbHVkZSAidmxhbi5oIgorICNpbmNsdWRlICJ2bGFucHJvYy5oIgorICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CitAQCAtNzQ3LDYgKzc1MiwyNyBAQCBzdGF0aWMgaW50IHZsYW5fZGV2X2dldF9pZmxpbmsoY29uc3Qgc3RyCisgCXJldHVybiByZWFsX2Rldi0+aWZpbmRleDsKKyB9CisgCisrI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0ZMT1dfVEFCTEUpCisrc3RhdGljIGludCB2bGFuX2Rldl9mbG93X29mZmxvYWRfY2hlY2soc3RydWN0IGZsb3dfb2ZmbG9hZF9od19wYXRoICpwYXRoKQorK3sKKysJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBhdGgtPmRldjsKKysJc3RydWN0IHZsYW5fZGV2X3ByaXYgKnZsYW4gPSB2bGFuX2Rldl9wcml2KGRldik7CisrCisrCWlmIChwYXRoLT5mbGFncyAmIEZMT1dfT0ZGTE9BRF9QQVRIX1ZMQU4pCisrCQlyZXR1cm4gLUVFWElTVDsKKysKKysJcGF0aC0+ZmxhZ3MgfD0gRkxPV19PRkZMT0FEX1BBVEhfVkxBTjsKKysJcGF0aC0+dmxhbl9wcm90byA9IHZsYW4tPnZsYW5fcHJvdG87CisrCXBhdGgtPnZsYW5faWQgPSB2bGFuLT52bGFuX2lkOworKwlwYXRoLT5kZXYgPSB2bGFuLT5yZWFsX2RldjsKKysKKysJaWYgKHZsYW4tPnJlYWxfZGV2LT5uZXRkZXZfb3BzLT5uZG9fZmxvd19vZmZsb2FkX2NoZWNrKQorKwkJcmV0dXJuIHZsYW4tPnJlYWxfZGV2LT5uZXRkZXZfb3BzLT5uZG9fZmxvd19vZmZsb2FkX2NoZWNrKHBhdGgpOworKworKwlyZXR1cm4gMDsKKyt9CisrI2VuZGlmIC8qIENPTkZJR19ORl9GTE9XX1RBQkxFICovCisrCisgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB2bGFuX2V0aHRvb2xfb3BzID0geworIAkuZ2V0X2xpbmtfa3NldHRpbmdzCT0gdmxhbl9ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncywKKyAJLmdldF9kcnZpbmZvCSAgICAgICAgPSB2bGFuX2V0aHRvb2xfZ2V0X2RydmluZm8sCitAQCAtNzg1LDYgKzgxMSw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdmxhbl8KKyAjZW5kaWYKKyAJLm5kb19maXhfZmVhdHVyZXMJPSB2bGFuX2Rldl9maXhfZmVhdHVyZXMsCisgCS5uZG9fZ2V0X2lmbGluawkJPSB2bGFuX2Rldl9nZXRfaWZsaW5rLAorKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKQorKwkubmRvX2Zsb3dfb2ZmbG9hZF9jaGVjayA9IHZsYW5fZGV2X2Zsb3dfb2ZmbG9hZF9jaGVjaywKKysjZW5kaWYKKyB9OworIAorIHN0YXRpYyB2b2lkIHZsYW5fZGV2X2ZyZWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzY0My1uZXQtYnJpZGdlLXN1cHBvcnQtaGFyZHdhcmUtZmxvdy10YWJsZS1vZmZsb2FkLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNjQzLW5ldC1icmlkZ2Utc3VwcG9ydC1oYXJkd2FyZS1mbG93LXRhYmxlLW9mZmxvYWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ3NDgyZAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzY0My1uZXQtYnJpZGdlLXN1cHBvcnQtaGFyZHdhcmUtZmxvdy10YWJsZS1vZmZsb2FkLnBhdGNoCkBAIC0wLDAgKzEsNjEgQEAKK0Zyb206IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KK0RhdGU6IFRodSwgMTUgTWFyIDIwMTggMjA6NTA6MzcgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gbmV0OiBicmlkZ2U6IHN1cHBvcnQgaGFyZHdhcmUgZmxvdyB0YWJsZSBvZmZsb2FkCisKK0xvb2sgdXAgdGhlIHJlYWwgZGV2aWNlIGFuZCBwYXNzIGl0IG9uCisKK1NpZ25lZC1vZmYtYnk6IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KKy0tLQorCistLS0gYS9uZXQvYnJpZGdlL2JyX2RldmljZS5jCisrKysgYi9uZXQvYnJpZGdlL2JyX2RldmljZS5jCitAQCAtMTQsNiArMTQsMTAgQEAKKyAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisgI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9icmlkZ2UuaD4KKysjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRkxPV19UQUJMRSkKKysjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CisrI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPgorKyNlbmRpZgorIAorICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisgI2luY2x1ZGUgImJyX3ByaXZhdGUuaCIKK0BAIC0zODIsNiArMzg2LDI4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYnJfZXRodG8KKyAJLmdldF9saW5rCT0gZXRodG9vbF9vcF9nZXRfbGluaywKKyB9OworIAorKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKQorK3N0YXRpYyBpbnQgYnJfZmxvd19vZmZsb2FkX2NoZWNrKHN0cnVjdCBmbG93X29mZmxvYWRfaHdfcGF0aCAqcGF0aCkKKyt7CisrCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwYXRoLT5kZXY7CisrCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IG5ldGRldl9wcml2KGRldik7CisrCXN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqZHN0OworKworKwlpZiAoIShwYXRoLT5mbGFncyAmIEZMT1dfT0ZGTE9BRF9QQVRIX0VUSEVSTkVUKSkKKysJCXJldHVybiAtRUlOVkFMOworKworKwlkc3QgPSBicl9mZGJfZmluZF9yY3UoYnIsIHBhdGgtPmV0aF9kZXN0LCBwYXRoLT52bGFuX2lkKTsKKysJaWYgKCFkc3QgfHwgIWRzdC0+ZHN0KQorKwkJcmV0dXJuIC1FTk9FTlQ7CisrCisrCXBhdGgtPmRldiA9IGRzdC0+ZHN0LT5kZXY7CisrCWlmIChwYXRoLT5kZXYtPm5ldGRldl9vcHMtPm5kb19mbG93X29mZmxvYWRfY2hlY2spCisrCQlyZXR1cm4gcGF0aC0+ZGV2LT5uZXRkZXZfb3BzLT5uZG9fZmxvd19vZmZsb2FkX2NoZWNrKHBhdGgpOworKworKwlyZXR1cm4gMDsKKyt9CisrI2VuZGlmIC8qIENPTkZJR19ORl9GTE9XX1RBQkxFICovCisrCisgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBicl9uZXRkZXZfb3BzID0geworIAkubmRvX29wZW4JCSA9IGJyX2Rldl9vcGVuLAorIAkubmRvX3N0b3AJCSA9IGJyX2Rldl9zdG9wLAorQEAgLTQxMCw2ICs0MzYsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJyX25lCisgCS5uZG9fYnJpZGdlX3NldGxpbmsJID0gYnJfc2V0bGluaywKKyAJLm5kb19icmlkZ2VfZGVsbGluawkgPSBicl9kZWxsaW5rLAorIAkubmRvX2ZlYXR1cmVzX2NoZWNrCSA9IHBhc3N0aHJ1X2ZlYXR1cmVzX2NoZWNrLAorKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKQorKwkubmRvX2Zsb3dfb2ZmbG9hZF9jaGVjawkgPSBicl9mbG93X29mZmxvYWRfY2hlY2ssCisrI2VuZGlmCisgfTsKKyAKKyBzdGF0aWMgc3RydWN0IGRldmljZV90eXBlIGJyX3R5cGUgPSB7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC82NDQtbmV0LXBwcG9lLXN1cHBvcnQtaGFyZHdhcmUtZmxvdy10YWJsZS1vZmZsb2FkLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNjQ0LW5ldC1wcHBvZS1zdXBwb3J0LWhhcmR3YXJlLWZsb3ctdGFibGUtb2ZmbG9hZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDliM2JjCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNjQ0LW5ldC1wcHBvZS1zdXBwb3J0LWhhcmR3YXJlLWZsb3ctdGFibGUtb2ZmbG9hZC5wYXRjaApAQCAtMCwwICsxLDEyNSBAQAorRnJvbTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorRGF0ZTogVGh1LCAxNSBNYXIgMjAxOCAyMToxNTowMCArMDEwMAorU3ViamVjdDogW1BBVENIXSBuZXQ6IHBwcG9lOiBzdXBwb3J0IGhhcmR3YXJlIGZsb3cgdGFibGUgb2ZmbG9hZAorCitQYXNzIG9uIHRoZSBQUFBvRSBzZXNzaW9uIElEIGFuZCB0aGUgcmVtb3RlIE1BQyBhZGRyZXNzCisKK1NpZ25lZC1vZmYtYnk6IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KKy0tLQorCistLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYworKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMKK0BAIC01Myw2ICs1MywxMSBAQAorICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgorICNpbmNsdWRlIDxuZXQvbmV0bnMvZ2VuZXJpYy5oPgorIAorKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKQorKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KKysjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg+CisrI2VuZGlmCisrCisgI2RlZmluZSBQUFBfVkVSU0lPTgkiMi40LjIiCisgCisgLyoKK0BAIC0xMzc4LDEyICsxMzgzLDM3IEBAIHN0YXRpYyB2b2lkIHBwcF9kZXZfcHJpdl9kZXN0cnVjdG9yKHN0cnUKKyAJCXBwcF9kZXN0cm95X2ludGVyZmFjZShwcHApOworIH0KKyAKKysjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRkxPV19UQUJMRSkKKytzdGF0aWMgaW50IHBwcF9mbG93X29mZmxvYWRfY2hlY2soc3RydWN0IGZsb3dfb2ZmbG9hZF9od19wYXRoICpwYXRoKQorK3sKKysJc3RydWN0IHBwcCAqcHBwID0gbmV0ZGV2X3ByaXYocGF0aC0+ZGV2KTsKKysJc3RydWN0IHBwcF9jaGFubmVsICpjaGFuOworKwlzdHJ1Y3QgY2hhbm5lbCAqcGNoOworKworKwlpZiAocHBwLT5mbGFncyAmIFNDX01VTFRJTElOSykKKysJCXJldHVybiAtRU9QTk9UU1VQUDsKKysKKysJaWYgKGxpc3RfZW1wdHkoJnBwcC0+Y2hhbm5lbHMpKQorKwkJcmV0dXJuIC1FTk9ERVY7CisrCisrCXBjaCA9IGxpc3RfZmlyc3RfZW50cnkoJnBwcC0+Y2hhbm5lbHMsIHN0cnVjdCBjaGFubmVsLCBjbGlzdCk7CisrCWNoYW4gPSBwY2gtPmNoYW47CisrCWlmICghY2hhbi0+b3BzLT5mbG93X29mZmxvYWRfY2hlY2spCisrCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisrCisrCXJldHVybiBjaGFuLT5vcHMtPmZsb3dfb2ZmbG9hZF9jaGVjayhjaGFuLCBwYXRoKTsKKyt9CisrI2VuZGlmIC8qIENPTkZJR19ORl9GTE9XX1RBQkxFICovCisrCisgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBwcHBfbmV0ZGV2X29wcyA9IHsKKyAJLm5kb19pbml0CSA9IHBwcF9kZXZfaW5pdCwKKyAJLm5kb191bmluaXQgICAgICA9IHBwcF9kZXZfdW5pbml0LAorIAkubmRvX3N0YXJ0X3htaXQgID0gcHBwX3N0YXJ0X3htaXQsCisgCS5uZG9fZG9faW9jdGwgICAgPSBwcHBfbmV0X2lvY3RsLAorIAkubmRvX2dldF9zdGF0czY0ID0gcHBwX2dldF9zdGF0czY0LAorKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKQorKwkubmRvX2Zsb3dfb2ZmbG9hZF9jaGVjayA9IHBwcF9mbG93X29mZmxvYWRfY2hlY2ssCisrI2VuZGlmCisgfTsKKyAKKyBzdGF0aWMgc3RydWN0IGRldmljZV90eXBlIHBwcF90eXBlID0geworLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcG9lLmMKKysrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBvZS5jCitAQCAtNzMsNiArNzMsMTEgQEAKKyAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorIAorKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKQorKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KKysjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg+CisrI2VuZGlmCisrCisgI2luY2x1ZGUgPGxpbnV4L25zcHJveHkuaD4KKyAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KKyAjaW5jbHVkZSA8bmV0L25ldG5zL2dlbmVyaWMuaD4KK0BAIC05NzQsOCArOTc5LDM2IEBAIHN0YXRpYyBpbnQgcHBwb2VfeG1pdChzdHJ1Y3QgcHBwX2NoYW5uZWwKKyAJcmV0dXJuIF9fcHBwb2VfeG1pdChzaywgc2tiKTsKKyB9CisgCisrI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0ZMT1dfVEFCTEUpCisrc3RhdGljIGludCBwcHBvZV9mbG93X29mZmxvYWRfY2hlY2soc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLAorKwkJCQkgICAgc3RydWN0IGZsb3dfb2ZmbG9hZF9od19wYXRoICpwYXRoKQorK3sKKysJc3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopY2hhbi0+cHJpdmF0ZTsKKysJc3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spOworKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcG8tPnBwcG9lX2RldjsKKysKKysJaWYgKHNvY2tfZmxhZyhzaywgU09DS19ERUFEKSB8fAorKwkgICAgIShzay0+c2tfc3RhdGUgJiBQUFBPWF9DT05ORUNURUQpIHx8ICFkZXYpCisrCQlyZXR1cm4gLUVOT0RFVjsKKysKKysJcGF0aC0+ZGV2ID0gcG8tPnBwcG9lX2RldjsKKysJcGF0aC0+ZmxhZ3MgfD0gRkxPV19PRkZMT0FEX1BBVEhfUFBQT0U7CisrCW1lbWNweShwYXRoLT5ldGhfc3JjLCBwby0+cHBwb2VfZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworKwltZW1jcHkocGF0aC0+ZXRoX2Rlc3QsIHBvLT5wcHBvZV9wYS5yZW1vdGUsIEVUSF9BTEVOKTsKKysJcGF0aC0+cHBwb2Vfc2lkID0gYmUxNl90b19jcHUocG8tPm51bSk7CisrCisrCWlmIChwYXRoLT5kZXYtPm5ldGRldl9vcHMtPm5kb19mbG93X29mZmxvYWRfY2hlY2spCisrCQlyZXR1cm4gcGF0aC0+ZGV2LT5uZXRkZXZfb3BzLT5uZG9fZmxvd19vZmZsb2FkX2NoZWNrKHBhdGgpOworKworKwlyZXR1cm4gMDsKKyt9CisrI2VuZGlmIC8qIENPTkZJR19ORl9GTE9XX1RBQkxFICovCisrCisgc3RhdGljIGNvbnN0IHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2VfY2hhbl9vcHMgPSB7CisgCS5zdGFydF94bWl0ID0gcHBwb2VfeG1pdCwKKysjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRkxPV19UQUJMRSkKKysJLmZsb3dfb2ZmbG9hZF9jaGVjayA9IHBwcG9lX2Zsb3dfb2ZmbG9hZF9jaGVjaywKKysjZW5kaWYKKyB9OworIAorIHN0YXRpYyBpbnQgcHBwb2VfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLAorLS0tIGEvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oCisrKysgYi9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgKK0BAIC0yOCw2ICsyOCwxMCBAQCBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHsKKyAJaW50CSgqc3RhcnRfeG1pdCkoc3RydWN0IHBwcF9jaGFubmVsICosIHN0cnVjdCBza19idWZmICopOworIAkvKiBIYW5kbGUgYW4gaW9jdGwgY2FsbCB0aGF0IGhhcyBjb21lIGluIHZpYSAvZGV2L3BwcC4gKi8KKyAJaW50CSgqaW9jdGwpKHN0cnVjdCBwcHBfY2hhbm5lbCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOworKworKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKQorKwlpbnQJKCpmbG93X29mZmxvYWRfY2hlY2spKHN0cnVjdCBwcHBfY2hhbm5lbCAqLCBzdHJ1Y3QgZmxvd19vZmZsb2FkX2h3X3BhdGggKik7CisrI2VuZGlmCisgfTsKKyAKKyBzdHJ1Y3QgcHBwX2NoYW5uZWwgewpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNjQ1LW5ldGZpbHRlci1uZl9mbG93X3RhYmxlLXJld29yay1oYXJkd2FyZS1vZmZsb2FkLXRpbWUucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC82NDUtbmV0ZmlsdGVyLW5mX2Zsb3dfdGFibGUtcmV3b3JrLWhhcmR3YXJlLW9mZmxvYWQtdGltZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzQ0YzI5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNjQ1LW5ldGZpbHRlci1uZl9mbG93X3RhYmxlLXJld29yay1oYXJkd2FyZS1vZmZsb2FkLXRpbWUucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorRnJvbTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorRGF0ZTogU3VuLCAyNSBNYXIgMjAxOCAyMToxMDo1NSArMDIwMAorU3ViamVjdDogW1BBVENIXSBuZXRmaWx0ZXI6IG5mX2Zsb3dfdGFibGU6IHJld29yayBoYXJkd2FyZSBvZmZsb2FkIHRpbWVvdXQKKyBoYW5kbGluZworCitTb21lIG9mZmxvYWQgaW1wbGVtZW50YXRpb25zIHNlbmQga2VlcGFsaXZlIHBhY2tldHMgKyBleHBsaWNpdAorbm90aWZpY2F0aW9ucyBvZiBUQ1AgRklOL1JTVCBwYWNrZXRzLiBJbiB0aGlzIGNhc2UgaXQgaXMgbW9yZSBjb252ZW5pZW50Cit0byBzaW1wbHkgbGV0IHRoZSBkcml2ZXIgdXBkYXRlIGZsb3ctPnRpbWVvdXQgaGFuZGxpbmcgYW5kIHVzZSB0aGUKK3JlZ3VsYXIgZmxvdyBvZmZsb2FkIGdjIHN0ZXAuCisKK0ZvciBkcml2ZXJzIHRoYXQgbWFuYWdlIHRoZWlyIG93biBsaWZldGltZSwgYSBzZXBhcmF0ZSBmbGFnIGNhbiBiZSBzZXQKK3RvIGF2b2lkIGdjIHRpbWVvdXRzLgorCitTaWduZWQtb2ZmLWJ5OiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CistLS0KKworLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaAorKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaAorQEAgLTc1LDYgKzc1LDcgQEAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCB7CisgI2RlZmluZSBGTE9XX09GRkxPQURfRFlJTkcJMHg0CisgI2RlZmluZSBGTE9XX09GRkxPQURfVEVBUkRPV04JMHg4CisgI2RlZmluZSBGTE9XX09GRkxPQURfSFcJCTB4MTAKKysjZGVmaW5lIEZMT1dfT0ZGTE9BRF9LRUVQCTB4MjAKKyAKKyBzdHJ1Y3QgZmxvd19vZmZsb2FkIHsKKyAJc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaAkJdHVwbGVoYXNoW0ZMT1dfT0ZGTE9BRF9ESVJfTUFYXTsKKy0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMKKysrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMKK0BAIC0zNzAsNyArMzcwLDcgQEAgc3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2djX3N0ZXAoc3RydQorIAlpZiAoIXRlYXJkb3duKQorIAkJbmZfY3Rfb2ZmbG9hZF90aW1lb3V0KGZsb3cpOworIAorLQlpZiAobmZfZmxvd19pbl9odyhmbG93KSAmJiAhdGVhcmRvd24pCisrCWlmICgoZmxvdy0+ZmxhZ3MgJiBGTE9XX09GRkxPQURfS0VFUCkgJiYgIXRlYXJkb3duKQorIAkJcmV0dXJuOworIAorIAlpZiAobmZfZmxvd19oYXNfZXhwaXJlZChmbG93KSB8fCB0ZWFyZG93bikKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzY0Ni1uZXRmaWx0ZXItbmZfZmxvd190YWJsZS1yZXdvcmstcHJpdmF0ZS1kcml2ZXItZGF0YS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzY0Ni1uZXRmaWx0ZXItbmZfZmxvd190YWJsZS1yZXdvcmstcHJpdmF0ZS1kcml2ZXItZGF0YS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTlhZDhhCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNjQ2LW5ldGZpbHRlci1uZl9mbG93X3RhYmxlLXJld29yay1wcml2YXRlLWRyaXZlci1kYXRhLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK0Zyb206IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KK0RhdGU6IEZyaSwgMjcgQXByIDIwMTggMTQ6NDI6MTQgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gbmV0ZmlsdGVyOiBuZl9mbG93X3RhYmxlOiByZXdvcmsgcHJpdmF0ZSBkcml2ZXIgZGF0YQorCitNb3ZlIHRoZSB0aW1lb3V0IG91dCBvZiB0aGUgdW5pb24sIHNpbmNlIGl0IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiB0aGUKK2RyaXZlciBhbmQgdGhlIHN0YWNrLiBBZGQgYSBwcml2YXRlIHBvaW50ZXIgdGhhdCB0aGUgZHJpdmVyIGNhbiB1c2UgdG8KK3BvaW50IHRvIGl0cyBvd24gZGF0YSBzdHJ1Y3R1cmVzCisKK1NpZ25lZC1vZmYtYnk6IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KKy0tLQorCistLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oCisrKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oCitAQCAtODAsOSArODAsMTAgQEAgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZV9yaGFzaCB7Cisgc3RydWN0IGZsb3dfb2ZmbG9hZCB7CisgCXN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGVfcmhhc2gJCXR1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX01BWF07CisgCXUzMgkJCQkJZmxhZ3M7CisrCXUzMgkJCQkJdGltZW91dDsKKyAJdW5pb24geworIAkJLyogWW91ciBwcml2YXRlIGRyaXZlciBkYXRhIGhlcmUuICovCistCQl1MzIJCXRpbWVvdXQ7CisrCQl2b2lkICpwcml2OworIAl9OworIH07CisgCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC82NDctbmV0LWRzYS1zdXBwb3J0LWhhcmR3YXJlLWZsb3ctdGFibGUtb2ZmbG9hZC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzY0Ny1uZXQtZHNhLXN1cHBvcnQtaGFyZHdhcmUtZmxvdy10YWJsZS1vZmZsb2FkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYWFlNWIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC82NDctbmV0LWRzYS1zdXBwb3J0LWhhcmR3YXJlLWZsb3ctdGFibGUtb2ZmbG9hZC5wYXRjaApAQCAtMCwwICsxLDc4IEBACitGcm9tOiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CitEYXRlOiBUaHUsIDE3IFNlcCAyMDIwIDE4OjQxOjIzICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIG5ldDogZHNhOiBzdXBwb3J0IGhhcmR3YXJlIGZsb3cgdGFibGUgb2ZmbG9hZAorCitMb29rIHVwIHRoZSBtYXN0ZXIgZGV2aWNlIGFuZCB0aGUgcG9ydCBpZAorCitTaWduZWQtb2ZmLWJ5OiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CistLS0KKworLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaAorKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaAorQEAgLTkwLDYgKzkwLDcgQEAgc3RydWN0IGZsb3dfb2ZmbG9hZCB7CisgI2RlZmluZSBGTE9XX09GRkxPQURfUEFUSF9FVEhFUk5FVAlCSVQoMCkKKyAjZGVmaW5lIEZMT1dfT0ZGTE9BRF9QQVRIX1ZMQU4JCUJJVCgxKQorICNkZWZpbmUgRkxPV19PRkZMT0FEX1BBVEhfUFBQT0UJCUJJVCgyKQorKyNkZWZpbmUgRkxPV19PRkZMT0FEX1BBVEhfRFNBCQlCSVQoMykKKyAKKyBzdHJ1Y3QgZmxvd19vZmZsb2FkX2h3X3BhdGggeworIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworQEAgLTEwMCw2ICsxMDEsNyBAQCBzdHJ1Y3QgZmxvd19vZmZsb2FkX2h3X3BhdGggeworIAl1MTYgdmxhbl9wcm90bzsKKyAJdTE2IHZsYW5faWQ7CisgCXUxNiBwcHBvZV9zaWQ7CisrCXUxNiBkc2FfcG9ydDsKKyB9OworIAorICNkZWZpbmUgTkZfRkxPV19USU1FT1VUICgzMCAqIEhaKQorLS0tIGEvbmV0L2RzYS9zbGF2ZS5jCisrKysgYi9uZXQvZHNhL3NsYXZlLmMKK0BAIC0xOSw2ICsxOSwxMCBAQAorICNpbmNsdWRlIDxsaW51eC9pZl9icmlkZ2UuaD4KKyAjaW5jbHVkZSA8bGludXgvbmV0cG9sbC5oPgorICNpbmNsdWRlIDxsaW51eC9wdHBfY2xhc3NpZnkuaD4KKysjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRkxPV19UQUJMRSkKKysjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CisrI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPgorKyNlbmRpZgorIAorICNpbmNsdWRlICJkc2FfcHJpdi5oIgorIAorQEAgLTEyMjYsNiArMTIzMCwyNyBAQCBzdGF0aWMgc3RydWN0IGRldmxpbmtfcG9ydCAqZHNhX3NsYXZlX2dlCisgCXJldHVybiBkcC0+ZHMtPmRldmxpbmsgPyAmZHAtPmRldmxpbmtfcG9ydCA6IE5VTEw7CisgfQorIAorKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKQorK3N0YXRpYyBpbnQgZHNhX2Zsb3dfb2ZmbG9hZF9jaGVjayhzdHJ1Y3QgZmxvd19vZmZsb2FkX2h3X3BhdGggKnBhdGgpCisreworKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGF0aC0+ZGV2OworKwlzdHJ1Y3QgZHNhX3BvcnQgKmRwOworKworKwlpZiAoIShwYXRoLT5mbGFncyAmIEZMT1dfT0ZGTE9BRF9QQVRIX0VUSEVSTkVUKSkKKysJCXJldHVybiAtRUlOVkFMOworKworKwlkcCA9IGRzYV9zbGF2ZV90b19wb3J0KGRldik7CisrCXBhdGgtPmRzYV9wb3J0ID0gZHAtPmluZGV4OworKwlwYXRoLT5kZXYgPSBkc2Ffc2xhdmVfdG9fbWFzdGVyKGRldik7CisrCXBhdGgtPmZsYWdzIHw9IEZMT1dfT0ZGTE9BRF9QQVRIX0RTQTsKKysKKysJaWYgKHBhdGgtPmRldi0+bmV0ZGV2X29wcy0+bmRvX2Zsb3dfb2ZmbG9hZF9jaGVjaykKKysJCXJldHVybiBwYXRoLT5kZXYtPm5ldGRldl9vcHMtPm5kb19mbG93X29mZmxvYWRfY2hlY2socGF0aCk7CisrCisrCXJldHVybiAwOworK30KKysjZW5kaWYgLyogQ09ORklHX05GX0ZMT1dfVEFCTEUgKi8KKysKKyBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGRzYV9zbGF2ZV9uZXRkZXZfb3BzID0geworIAkubmRvX29wZW4JIAk9IGRzYV9zbGF2ZV9vcGVuLAorIAkubmRvX3N0b3AJCT0gZHNhX3NsYXZlX2Nsb3NlLAorQEAgLTEyNTAsNiArMTI3NSw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZHNhX3MKKyAJLm5kb192bGFuX3J4X2FkZF92aWQJPSBkc2Ffc2xhdmVfdmxhbl9yeF9hZGRfdmlkLAorIAkubmRvX3ZsYW5fcnhfa2lsbF92aWQJPSBkc2Ffc2xhdmVfdmxhbl9yeF9raWxsX3ZpZCwKKyAJLm5kb19nZXRfZGV2bGlua19wb3J0CT0gZHNhX3NsYXZlX2dldF9kZXZsaW5rX3BvcnQsCisrI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0ZMT1dfVEFCTEUpCisrCS5uZG9fZmxvd19vZmZsb2FkX2NoZWNrCSA9IGRzYV9mbG93X29mZmxvYWRfY2hlY2ssCisrI2VuZGlmCisgfTsKKyAKKyBzdGF0aWMgc3RydWN0IGRldmljZV90eXBlIGRzYV90eXBlID0gewpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNjU1LWluY3JlYXNlX3NrYl9wYWQucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC82NTUtaW5jcmVhc2Vfc2tiX3BhZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzI1MzAxCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNjU1LWluY3JlYXNlX3NrYl9wYWQucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorRnJvbTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorU3ViamVjdDoga2VybmVsOiBhZGQgYSBmZXcgcGF0Y2hlcyBmb3IgYXZvaWRpbmcgdW5uZWNlc3Nhcnkgc2tiIHJlYWxsb2NhdGlvbnMgLSBzaWduaWZpY2FudGx5IGltcHJvdmVzIGV0aGVybmV0PC0+d2lyZWxlc3MgcGVyZm9ybWFuY2UKKworbGVkZS1jb21taXQ6IDZmODljZmZjOWFkZDY5MzlkNDRhNmI1NGNmOWE1ZTc3ODQ5YWE3ZmQKK1NpZ25lZC1vZmYtYnk6IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KKy0tLQorIGluY2x1ZGUvbGludXgvc2tidWZmLmggfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSBhL2luY2x1ZGUvbGludXgvc2tidWZmLmgKKysrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKK0BAIC0yNjUwLDcgKzI2NTAsNyBAQCBzdGF0aWMgaW5saW5lIGludCBwc2tiX25ldHdvcmtfbWF5X3B1bGwoCisgICogTkVUX0lQX0FMSUdOKDIpICsgZXRoZXJuZXRfaGVhZGVyKDE0KSArIElQX2hlYWRlcigyMC80MCkgKyBwb3J0cyg4KQorICAqLworICNpZm5kZWYgTkVUX1NLQl9QQUQKKy0jZGVmaW5lIE5FVF9TS0JfUEFECW1heCgzMiwgTDFfQ0FDSEVfQllURVMpCisrI2RlZmluZSBORVRfU0tCX1BBRAltYXgoNjQsIEwxX0NBQ0hFX0JZVEVTKQorICNlbmRpZgorIAorIGludCBfX19wc2tiX3RyaW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbik7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC82NjYtQWRkLXN1cHBvcnQtZm9yLU1BUC1FLUZNUnMtbWVzaC1tb2RlLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNjY2LUFkZC1zdXBwb3J0LWZvci1NQVAtRS1GTVJzLW1lc2gtbW9kZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWY3YWYyCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNjY2LUFkZC1zdXBwb3J0LWZvci1NQVAtRS1GTVJzLW1lc2gtbW9kZS5wYXRjaApAQCAtMCwwICsxLDUwMSBAQAorRnJvbTogU3RldmVuIEJhcnRoIDxzdGV2ZW5AbWlkbGluay5vcmc+CitTdWJqZWN0OiBBZGQgc3VwcG9ydCBmb3IgTUFQLUUgRk1ScyAobWVzaCBtb2RlKQorCitNQVAtRSBGTVJzIChkcmFmdC1pZXRmLXNvZnR3aXJlLW1hcC0xMCkgYXJlIHJ1bGVzIGZvciBJUHY0LWNvbW11bmljYXRpb24KK2JldHdlZW4gTUFQIENFcyAobWVzaCBtb2RlKSB3aXRob3V0IHRoZSBuZWVkIHRvIGZvcndhcmQgc3VjaCBkYXRhIHRvIGEKK2JvcmRlciByZWxheS4gVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyA2cmQgd29ya3MgYnV0IGZvciBJUHY0IG92ZXIgSVB2Ni4KKworU2lnbmVkLW9mZi1ieTogU3RldmVuIEJhcnRoIDxjeXJ1c0BvcGVud3J0Lm9yZz4KKy0tLQorIGluY2x1ZGUvbmV0L2lwNl90dW5uZWwuaCAgICAgICB8ICAxMyArKworIGluY2x1ZGUvdWFwaS9saW51eC9pZl90dW5uZWwuaCB8ICAxMyArKworIG5ldC9pcHY2L2lwNl90dW5uZWwuYyAgICAgICAgICB8IDI3NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQorIDMgZmlsZXMgY2hhbmdlZCwgMjkxIGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQorCistLS0gYS9pbmNsdWRlL25ldC9pcDZfdHVubmVsLmgKKysrKyBiL2luY2x1ZGUvbmV0L2lwNl90dW5uZWwuaAorQEAgLTE4LDYgKzE4LDE4IEBACisgLyogZGV0ZXJtaW5lIGNhcGFiaWxpdHkgb24gYSBwZXItcGFja2V0IGJhc2lzICovCisgI2RlZmluZSBJUDZfVE5MX0ZfQ0FQX1BFUl9QQUNLRVQgMHg0MDAwMAorIAorKy8qIElQdjYgdHVubmVsIEZNUiAqLworK3N0cnVjdCBfX2lwNl90bmxfZm1yIHsKKysJc3RydWN0IF9faXA2X3RubF9mbXIgKm5leHQ7IC8qIG5leHQgZm1yIGluIGxpc3QgKi8KKysJc3RydWN0IGluNl9hZGRyIGlwNl9wcmVmaXg7CisrCXN0cnVjdCBpbl9hZGRyIGlwNF9wcmVmaXg7CisrCisrCV9fdTggaXA2X3ByZWZpeF9sZW47CisrCV9fdTggaXA0X3ByZWZpeF9sZW47CisrCV9fdTggZWFfbGVuOworKwlfX3U4IG9mZnNldDsKKyt9OworKworIHN0cnVjdCBfX2lwNl90bmxfcGFybSB7CisgCWNoYXIgbmFtZVtJRk5BTVNJWl07CS8qIG5hbWUgb2YgdHVubmVsIGRldmljZSAqLworIAlpbnQgbGluazsJCS8qIGlmaW5kZXggb2YgdW5kZXJseWluZyBMMiBpbnRlcmZhY2UgKi8KK0BAIC0yOSw2ICs0MSw3IEBAIHN0cnVjdCBfX2lwNl90bmxfcGFybSB7CisgCV9fdTMyIGZsYWdzOwkJLyogdHVubmVsIGZsYWdzICovCisgCXN0cnVjdCBpbjZfYWRkciBsYWRkcjsJLyogbG9jYWwgdHVubmVsIGVuZC1wb2ludCBhZGRyZXNzICovCisgCXN0cnVjdCBpbjZfYWRkciByYWRkcjsJLyogcmVtb3RlIHR1bm5lbCBlbmQtcG9pbnQgYWRkcmVzcyAqLworKwlzdHJ1Y3QgX19pcDZfdG5sX2ZtciAqZm1yczsJLyogRk1ScyAqLworIAorIAlfX2JlMTYJCQlpX2ZsYWdzOworIAlfX2JlMTYJCQlvX2ZsYWdzOworLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX3R1bm5lbC5oCisrKysgYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfdHVubmVsLmgKK0BAIC03NywxMCArNzcsMjMgQEAgZW51bSB7CisgCUlGTEFfSVBUVU5fRU5DQVBfRFBPUlQsCisgCUlGTEFfSVBUVU5fQ09MTEVDVF9NRVRBREFUQSwKKyAJSUZMQV9JUFRVTl9GV01BUkssCisrCUlGTEFfSVBUVU5fRk1SUywKKyAJX19JRkxBX0lQVFVOX01BWCwKKyB9OworICNkZWZpbmUgSUZMQV9JUFRVTl9NQVgJKF9fSUZMQV9JUFRVTl9NQVggLSAxKQorIAorK2VudW0geworKwlJRkxBX0lQVFVOX0ZNUl9VTlNQRUMsCisrCUlGTEFfSVBUVU5fRk1SX0lQNl9QUkVGSVgsCisrCUlGTEFfSVBUVU5fRk1SX0lQNF9QUkVGSVgsCisrCUlGTEFfSVBUVU5fRk1SX0lQNl9QUkVGSVhfTEVOLAorKwlJRkxBX0lQVFVOX0ZNUl9JUDRfUFJFRklYX0xFTiwKKysJSUZMQV9JUFRVTl9GTVJfRUFfTEVOLAorKwlJRkxBX0lQVFVOX0ZNUl9PRkZTRVQsCisrCV9fSUZMQV9JUFRVTl9GTVJfTUFYLAorK307CisrI2RlZmluZSBJRkxBX0lQVFVOX0ZNUl9NQVggKF9fSUZMQV9JUFRVTl9GTVJfTUFYIC0gMSkKKysKKyBlbnVtIHR1bm5lbF9lbmNhcF90eXBlcyB7CisgCVRVTk5FTF9FTkNBUF9OT05FLAorIAlUVU5ORUxfRU5DQVBfRk9VLAorLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCisrKysgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKK0BAIC0xMSw2ICsxMSw5IEBACisgICogICAgICBsaW51eC9uZXQvaXB2Ni9zaXQuYyBhbmQgbGludXgvbmV0L2lwdjQvaXBpcC5jCisgICoKKyAgKiAgICAgIFJGQyAyNDczCisrICoKKysgKiAgICAgIENoYW5nZXM6CisrICogICAgICBTdGV2ZW4gQmFydGggPGN5cnVzQG9wZW53cnQub3JnPjogICAgICAgICAgIE1BUC1FIEZNUiBzdXBwb3J0CisgICovCisgCisgI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorQEAgLTY3LDkgKzcwLDkgQEAgc3RhdGljIGJvb2wgbG9nX2Vjbl9lcnJvciA9IHRydWU7CisgbW9kdWxlX3BhcmFtKGxvZ19lY25fZXJyb3IsIGJvb2wsIDA2NDQpOworIE1PRFVMRV9QQVJNX0RFU0MobG9nX2Vjbl9lcnJvciwgIkxvZyBwYWNrZXRzIHJlY2VpdmVkIHdpdGggY29ycnVwdGVkIEVDTiIpOworIAorLXN0YXRpYyB1MzIgSEFTSChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIxLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIyKQorK3N0YXRpYyB1MzIgSEFTSChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCisgeworLQl1MzIgaGFzaCA9IGlwdjZfYWRkcl9oYXNoKGFkZHIxKSBeIGlwdjZfYWRkcl9oYXNoKGFkZHIyKTsKKysJdTMyIGhhc2ggPSBpcHY2X2FkZHJfaGFzaChhZGRyKTsKKyAKKyAJcmV0dXJuIGhhc2hfMzIoaGFzaCwgSVA2X1RVTk5FTF9IQVNIX1NJWkVfU0hJRlQpOworIH0KK0BAIC0xMzYsMjAgKzEzOSwyOSBAQCBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmlwNl9nZXRfCisgc3RhdGljIHN0cnVjdCBpcDZfdG5sICoKKyBpcDZfdG5sX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqcmVtb3RlLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmxvY2FsKQorIHsKKy0JdW5zaWduZWQgaW50IGhhc2ggPSBIQVNIKHJlbW90ZSwgbG9jYWwpOworKwl1bnNpZ25lZCBpbnQgaGFzaCA9IEhBU0gobG9jYWwpOworIAlzdHJ1Y3QgaXA2X3RubCAqdDsKKyAJc3RydWN0IGlwNl90bmxfbmV0ICppcDZuID0gbmV0X2dlbmVyaWMobmV0LCBpcDZfdG5sX25ldF9pZCk7CisgCXN0cnVjdCBpbjZfYWRkciBhbnk7CisrCXN0cnVjdCBfX2lwNl90bmxfZm1yICpmbXI7CisgCisgCWZvcl9lYWNoX2lwNl90dW5uZWxfcmN1KGlwNm4tPnRubHNfcl9sW2hhc2hdKSB7CistCQlpZiAoaXB2Nl9hZGRyX2VxdWFsKGxvY2FsLCAmdC0+cGFybXMubGFkZHIpICYmCistCQkgICAgaXB2Nl9hZGRyX2VxdWFsKHJlbW90ZSwgJnQtPnBhcm1zLnJhZGRyKSAmJgorLQkJICAgICh0LT5kZXYtPmZsYWdzICYgSUZGX1VQKSkKKysJCWlmICghaXB2Nl9hZGRyX2VxdWFsKGxvY2FsLCAmdC0+cGFybXMubGFkZHIpIHx8CisrCQkJCSEodC0+ZGV2LT5mbGFncyAmIElGRl9VUCkpCisrCQkJY29udGludWU7CisrCisrCQlpZiAoaXB2Nl9hZGRyX2VxdWFsKHJlbW90ZSwgJnQtPnBhcm1zLnJhZGRyKSkKKyAJCQlyZXR1cm4gdDsKKysKKysJCWZvciAoZm1yID0gdC0+cGFybXMuZm1yczsgZm1yOyBmbXIgPSBmbXItPm5leHQpIHsKKysJCQlpZiAoaXB2Nl9wcmVmaXhfZXF1YWwocmVtb3RlLCAmZm1yLT5pcDZfcHJlZml4LAorKwkJCQkJZm1yLT5pcDZfcHJlZml4X2xlbikpCisrCQkJCXJldHVybiB0OworKwkJfQorIAl9CisgCisgCW1lbXNldCgmYW55LCAwLCBzaXplb2YoYW55KSk7CistCWhhc2ggPSBIQVNIKCZhbnksIGxvY2FsKTsKKysJaGFzaCA9IEhBU0gobG9jYWwpOworIAlmb3JfZWFjaF9pcDZfdHVubmVsX3JjdShpcDZuLT50bmxzX3JfbFtoYXNoXSkgeworIAkJaWYgKGlwdjZfYWRkcl9lcXVhbChsb2NhbCwgJnQtPnBhcm1zLmxhZGRyKSAmJgorIAkJICAgIGlwdjZfYWRkcl9hbnkoJnQtPnBhcm1zLnJhZGRyKSAmJgorQEAgLTE1Nyw3ICsxNjksNyBAQCBpcDZfdG5sX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0CisgCQkJcmV0dXJuIHQ7CisgCX0KKyAKKy0JaGFzaCA9IEhBU0gocmVtb3RlLCAmYW55KTsKKysJaGFzaCA9IEhBU0goJmFueSk7CisgCWZvcl9lYWNoX2lwNl90dW5uZWxfcmN1KGlwNm4tPnRubHNfcl9sW2hhc2hdKSB7CisgCQlpZiAoaXB2Nl9hZGRyX2VxdWFsKHJlbW90ZSwgJnQtPnBhcm1zLnJhZGRyKSAmJgorIAkJICAgIGlwdjZfYWRkcl9hbnkoJnQtPnBhcm1zLmxhZGRyKSAmJgorQEAgLTE5Nyw3ICsyMDksNyBAQCBpcDZfdG5sX2J1Y2tldChzdHJ1Y3QgaXA2X3RubF9uZXQgKmlwNm4sCisgCisgCWlmICghaXB2Nl9hZGRyX2FueShyZW1vdGUpIHx8ICFpcHY2X2FkZHJfYW55KGxvY2FsKSkgeworIAkJcHJpbyA9IDE7CistCQloID0gSEFTSChyZW1vdGUsIGxvY2FsKTsKKysJCWggPSBIQVNIKGxvY2FsKTsKKyAJfQorIAlyZXR1cm4gJmlwNm4tPnRubHNbcHJpb11baF07CisgfQorQEAgLTM3Nyw2ICszODksMTIgQEAgaXA2X3RubF9kZXZfdW5pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZQorIAlzdHJ1Y3QgbmV0ICpuZXQgPSB0LT5uZXQ7CisgCXN0cnVjdCBpcDZfdG5sX25ldCAqaXA2biA9IG5ldF9nZW5lcmljKG5ldCwgaXA2X3RubF9uZXRfaWQpOworIAorKwl3aGlsZSAodC0+cGFybXMuZm1ycykgeworKwkJc3RydWN0IF9faXA2X3RubF9mbXIgKm5leHQgPSB0LT5wYXJtcy5mbXJzLT5uZXh0OworKwkJa2ZyZWUodC0+cGFybXMuZm1ycyk7CisrCQl0LT5wYXJtcy5mbXJzID0gbmV4dDsKKysJfQorKworIAlpZiAoZGV2ID09IGlwNm4tPmZiX3RubF9kZXYpCisgCQlSQ1VfSU5JVF9QT0lOVEVSKGlwNm4tPnRubHNfd2NbMF0sIE5VTEwpOworIAllbHNlCitAQCAtNzY2LDYgKzc4NCwxMDcgQEAgaW50IGlwNl90bmxfcmN2X2N0bChzdHJ1Y3QgaXA2X3RubCAqdCwKKyB9CisgRVhQT1JUX1NZTUJPTF9HUEwoaXA2X3RubF9yY3ZfY3RsKTsKKyAKKysvKioKKysgKiBpcDRpcDZfZm1yX2NhbGMgLSBjYWxjdWxhdGUgdGFyZ2V0IC8gc291cmNlIElQdjYtYWRkcmVzcyBiYXNlZCBvbiBGTVIKKysgKiAgIEBkZXN0OiBkZXN0aW5hdGlvbiBJUHY2IGFkZHJlc3MgYnVmZmVyCisrICogICBAc2tiOiByZWNlaXZlZCBzb2NrZXQgYnVmZmVyCisrICogICBAZm1yOiBNQVAgRk1SCisrICogICBAeG1pdDogQ2FsY3VsYXRlIGZvciB4bWl0IG9yIHJjdgorKyAqKi8KKytzdGF0aWMgdm9pZCBpcDRpcDZfZm1yX2NhbGMoc3RydWN0IGluNl9hZGRyICpkZXN0LAorKwkJY29uc3Qgc3RydWN0IGlwaGRyICppcGgsIGNvbnN0IHVpbnQ4X3QgKmVuZCwKKysJCWNvbnN0IHN0cnVjdCBfX2lwNl90bmxfZm1yICpmbXIsIGJvb2wgeG1pdCkKKyt7CisrCWludCBwc2lkbGVuID0gZm1yLT5lYV9sZW4gLSAoMzIgLSBmbXItPmlwNF9wcmVmaXhfbGVuKTsKKysJdTggKnBvcnRwID0gTlVMTDsKKysJYm9vbCB1c2VfZGVzdF9hZGRyOworKwljb25zdCBzdHJ1Y3QgaXBoZHIgKmRzdGggPSBpcGg7CisrCisrCWlmICgodTgqKWRzdGggPj0gZW5kKQorKwkJcmV0dXJuOworKworKwkvKiBmaW5kIHNpZ25pZmljYW50IElQIGhlYWRlciAqLworKwlpZiAoaXBoLT5wcm90b2NvbCA9PSBJUFBST1RPX0lDTVApIHsKKysJCXN0cnVjdCBpY21waGRyICppaCA9IChzdHJ1Y3QgaWNtcGhkciopKCgodTgqKWRzdGgpICsgZHN0aC0+aWhsICogNCk7CisrCQlpZiAoaWggJiYgKCh1OCopJmloWzFdKSA8PSBlbmQgJiYgKAorKwkJCWloLT50eXBlID09IElDTVBfREVTVF9VTlJFQUNIIHx8CisrCQkJaWgtPnR5cGUgPT0gSUNNUF9TT1VSQ0VfUVVFTkNIIHx8CisrCQkJaWgtPnR5cGUgPT0gSUNNUF9USU1FX0VYQ0VFREVEIHx8CisrCQkJaWgtPnR5cGUgPT0gSUNNUF9QQVJBTUVURVJQUk9CIHx8CisrCQkJaWgtPnR5cGUgPT0gSUNNUF9SRURJUkVDVCkpCisrCQkJCWRzdGggPSAoY29uc3Qgc3RydWN0IGlwaGRyKikmaWhbMV07CisrCX0KKysKKysJLyogaW4geG1pdC1wYXRoIHVzZSBkZXN0IHBvcnQgYnkgZGVmYXVsdCBhbmQgc291cmNlIHBvcnQgb25seSBpZgorKwkJdGhpcyBpcyBhbiBJQ01QIHJlcGx5IHRvIHNvbWV0aGluZyBlbHNlOyB2aWNlIHZlcnNhIGluIHJjdi1wYXRoICovCisrCXVzZV9kZXN0X2FkZHIgPSAoeG1pdCAmJiBkc3RoID09IGlwaCkgfHwgKCF4bWl0ICYmIGRzdGggIT0gaXBoKTsKKysKKysJLyogZ2V0IGRzdCBwb3J0ICovCisrCWlmICgoKHU4KikmZHN0aFsxXSkgPD0gZW5kICYmICgKKysJCWRzdGgtPnByb3RvY29sID09IElQUFJPVE9fVURQIHx8CisrCQlkc3RoLT5wcm90b2NvbCA9PSBJUFBST1RPX1RDUCB8fAorKwkJZHN0aC0+cHJvdG9jb2wgPT0gSVBQUk9UT19TQ1RQIHx8CisrCQlkc3RoLT5wcm90b2NvbCA9PSBJUFBST1RPX0RDQ1ApKSB7CisrCQkJLyogZm9yIFVEUCwgVENQLCBTQ1RQIGFuZCBEQ0NQIHNvdXJjZSBhbmQgZGVzdCBwb3J0CisrCQkJZm9sbG93IElQdjQgaGVhZGVyIGRpcmVjdGx5ICovCisrCQkJcG9ydHAgPSAoKHU4Kilkc3RoKSArIGRzdGgtPmlobCAqIDQ7CisrCisrCQkJaWYgKHVzZV9kZXN0X2FkZHIpCisrCQkJCXBvcnRwICs9IHNpemVvZih1MTYpOworKwl9IGVsc2UgaWYgKGlwaC0+cHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QKSB7CisrCQlzdHJ1Y3QgaWNtcGhkciAqaWggPSAoc3RydWN0IGljbXBoZHIqKSgoKHU4Kilkc3RoKSArIGRzdGgtPmlobCAqIDQpOworKworKwkJLyogdXNlIGljbXAgaWRlbnRpZmllciBhcyBwb3J0ICovCisrCQlpZiAoKCh1OCopJmloKSA8PSBlbmQgJiYgKAorKwkJICAgICh1c2VfZGVzdF9hZGRyICYmICgKKysJCSAgICBpaC0+dHlwZSA9PSBJQ01QX0VDSE9SRVBMWSB8fAorKwkJCWloLT50eXBlID09IElDTVBfVElNRVNUQU1QUkVQTFkgfHwKKysJCQlpaC0+dHlwZSA9PSBJQ01QX0lORk9fUkVQTFkgfHwKKysJCQlpaC0+dHlwZSA9PSBJQ01QX0FERFJFU1NSRVBMWSkpIHx8CisrCQkJKCF1c2VfZGVzdF9hZGRyICYmICgKKysJCQlpaC0+dHlwZSA9PSBJQ01QX0VDSE8gfHwKKysJCQlpaC0+dHlwZSA9PSBJQ01QX1RJTUVTVEFNUCB8fAorKwkJCWloLT50eXBlID09IElDTVBfSU5GT19SRVFVRVNUIHx8CisrCQkJaWgtPnR5cGUgPT0gSUNNUF9BRERSRVNTKQorKwkJCSkpKQorKwkJCQlwb3J0cCA9ICh1OCopJmloLT51bi5lY2hvLmlkOworKwl9CisrCisrCWlmICgocG9ydHAgJiYgJnBvcnRwWzJdIDw9IGVuZCkgfHwgcHNpZGxlbiA9PSAwKSB7CisrCQlpbnQgZnJvbWJ5dGUgPSBmbXItPmlwNl9wcmVmaXhfbGVuIC8gODsKKysJCWludCBmcm9tcmVtID0gZm1yLT5pcDZfcHJlZml4X2xlbiAlIDg7CisrCQlpbnQgYnl0ZXMgPSBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSAtIGZyb21ieXRlOworKwkJY29uc3QgdTMyICphZGRyID0gKHVzZV9kZXN0X2FkZHIpID8gJmlwaC0+ZGFkZHIgOiAmaXBoLT5zYWRkcjsKKysJCXU2NCBlYWJpdHMgPSAoKHU2NCludG9obCgqYWRkcikpIDw8ICgzMiArIGZtci0+aXA0X3ByZWZpeF9sZW4pOworKwkJdTY0IHQgPSAwOworKworKwkJLyogZXh0cmFjdCBQU0lEIGZyb20gcG9ydCBhbmQgYWRkIGl0IHRvIGVhYml0cyAqLworKwkJdTE2IHBzaWRiaXRzID0gMDsKKysJCWlmIChwc2lkbGVuID4gMCkgeworKwkJCXBzaWRiaXRzID0gKCh1MTYpcG9ydHBbMF0pIDw8IDggfCAoKHUxNilwb3J0cFsxXSk7CisrCQkJcHNpZGJpdHMgPj49IDE2IC0gcHNpZGxlbiAtIGZtci0+b2Zmc2V0OworKwkJCXBzaWRiaXRzID0gKHUxNikocHNpZGJpdHMgPDwgKDE2IC0gcHNpZGxlbikpOworKwkJCWVhYml0cyB8PSAoKHU2NClwc2lkYml0cykgPDwgKDQ4IC0gKGZtci0+ZWFfbGVuIC0gcHNpZGxlbikpOworKwkJfQorKworKwkJLyogcmV3cml0ZSBkZXN0aW5hdGlvbiBhZGRyZXNzICovCisrCQkqZGVzdCA9IGZtci0+aXA2X3ByZWZpeDsKKysJCW1lbWNweSgmZGVzdC0+czZfYWRkclsxMF0sIGFkZHIsIHNpemVvZigqYWRkcikpOworKwkJZGVzdC0+czZfYWRkcjE2WzddID0gaHRvbnMocHNpZGJpdHMgPj4gKDE2IC0gcHNpZGxlbikpOworKworKwkJaWYgKGJ5dGVzID4gc2l6ZW9mKHU2NCkpCisrCQkJYnl0ZXMgPSBzaXplb2YodTY0KTsKKysKKysJCS8qIGluc2VydCBlYWJpdHMgKi8KKysJCW1lbWNweSgmdCwgJmRlc3QtPnM2X2FkZHJbZnJvbWJ5dGVdLCBieXRlcyk7CisrCQl0ID0gYmU2NF90b19jcHUodCkgJiB+KCgoKCh1NjQpMSkgPDwgZm1yLT5lYV9sZW4pIC0gMSkKKysJCQk8PCAoNjQgLSBmbXItPmVhX2xlbiAtIGZyb21yZW0pKTsKKysJCXQgPSBjcHVfdG9fYmU2NCh0IHwgKGVhYml0cyA+PiBmcm9tcmVtKSk7CisrCQltZW1jcHkoJmRlc3QtPnM2X2FkZHJbZnJvbWJ5dGVdLCAmdCwgYnl0ZXMpOworKwl9CisrfQorKworKworIHN0YXRpYyBpbnQgX19pcDZfdG5sX3JjdihzdHJ1Y3QgaXA2X3RubCAqdHVubmVsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorIAkJCSBjb25zdCBzdHJ1Y3QgdG5sX3B0a19pbmZvICp0cGksCisgCQkJIHN0cnVjdCBtZXRhZGF0YV9kc3QgKnR1bl9kc3QsCitAQCAtODE4LDYgKzkzNywyNyBAQCBzdGF0aWMgaW50IF9faXA2X3RubF9yY3Yoc3RydWN0IGlwNl90bmwKKyAJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CisgCW1lbXNldChza2ItPmNiLCAwLCBzaXplb2Yoc3RydWN0IGluZXQ2X3NrYl9wYXJtKSk7CisgCisrCWlmICh0cGktPnByb3RvID09IGh0b25zKEVUSF9QX0lQKSAmJiB0dW5uZWwtPnBhcm1zLmZtcnMgJiYKKysJCSFpcHY2X2FkZHJfZXF1YWwoJmlwdjZoLT5zYWRkciwgJnR1bm5lbC0+cGFybXMucmFkZHIpKSB7CisrCQkJLyogUGFja2V0IGRpZG4ndCBjb21lIGZyb20gQlIsIHNvIGxvb2t1cCBGTVIgKi8KKysJCQlzdHJ1Y3QgX19pcDZfdG5sX2ZtciAqZm1yOworKwkJCXN0cnVjdCBpbjZfYWRkciBleHBlY3RlZCA9IHR1bm5lbC0+cGFybXMucmFkZHI7CisrCQkJZm9yIChmbXIgPSB0dW5uZWwtPnBhcm1zLmZtcnM7IGZtcjsgZm1yID0gZm1yLT5uZXh0KQorKwkJCQlpZiAoaXB2Nl9wcmVmaXhfZXF1YWwoJmlwdjZoLT5zYWRkciwKKysJCQkJCSZmbXItPmlwNl9wcmVmaXgsIGZtci0+aXA2X3ByZWZpeF9sZW4pKQorKwkJCQkJCWJyZWFrOworKworKwkJCS8qIENoZWNrIHRoYXQgSVB2NiBtYXRjaGVzIElQdjQgc291cmNlIHRvIHByZXZlbnQgc3Bvb2ZpbmcgKi8KKysJCQlpZiAoZm1yKQorKwkJCQlpcDRpcDZfZm1yX2NhbGMoJmV4cGVjdGVkLCBpcF9oZHIoc2tiKSwKKysJCQkJCQlza2JfdGFpbF9wb2ludGVyKHNrYiksIGZtciwgZmFsc2UpOworKworKwkJCWlmICghaXB2Nl9hZGRyX2VxdWFsKCZpcHY2aC0+c2FkZHIsICZleHBlY3RlZCkpIHsKKysJCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisrCQkJCWdvdG8gZHJvcDsKKysJCQl9CisrCX0KKysKKyAJX19za2JfdHVubmVsX3J4KHNrYiwgdHVubmVsLT5kZXYsIHR1bm5lbC0+bmV0KTsKKyAKKyAJZXJyID0gZHNjcF9lY25fZGVjYXBzdWxhdGUodHVubmVsLCBpcHY2aCwgc2tiKTsKK0BAIC05NTgsNiArMTA5OCw3IEBAIHN0YXRpYyB2b2lkIGluaXRfdGVsX3R4b3B0KHN0cnVjdCBpcHY2X3QKKyAJb3B0LT5vcHMub3B0X25mbGVuID0gODsKKyB9CisgCisrCisgLyoqCisgICogaXA2X3RubF9hZGRyX2NvbmZsaWN0IC0gY29tcGFyZSBwYWNrZXQgYWRkcmVzc2VzIHRvIHR1bm5lbCdzIG93bgorICAqICAgQHQ6IHRoZSBvdXRnb2luZyB0dW5uZWwgZGV2aWNlCitAQCAtMTMxMCw2ICsxNDUxLDcgQEAgaXA2aXA2X3RubF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cgorIHsKKyAJc3RydWN0IGlwNl90bmwgKnQgPSBuZXRkZXZfcHJpdihkZXYpOworIAlzdHJ1Y3QgaXB2NmhkciAqaXB2Nmg7CisrCXN0cnVjdCBfX2lwNl90bmxfZm1yICpmbXI7CisgCWludCBlbmNhcF9saW1pdCA9IC0xOworIAlfX3UxNiBvZmZzZXQ7CisgCXN0cnVjdCBmbG93aTYgZmw2OworQEAgLTEzNzUsNiArMTUxNywxOCBAQCBpcDZpcDZfdG5sX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RyCisgCWZsNi5mbG93aTZfdWlkID0gc29ja19uZXRfdWlkKGRldl9uZXQoZGV2KSwgTlVMTCk7CisgCWRzZmllbGQgPSBJTkVUX0VDTl9lbmNhcHN1bGF0ZShkc2ZpZWxkLCBpcHY2X2dldF9kc2ZpZWxkKGlwdjZoKSk7CisgCisrCS8qIHRyeSB0byBmaW5kIG1hdGNoaW5nIEZNUiAqLworKwlmb3IgKGZtciA9IHQtPnBhcm1zLmZtcnM7IGZtcjsgZm1yID0gZm1yLT5uZXh0KSB7CisrCQl1bnNpZ25lZCBtc2hpZnQgPSAzMiAtIGZtci0+aXA0X3ByZWZpeF9sZW47CisrCQlpZiAobnRvaGwoZm1yLT5pcDRfcHJlZml4LnNfYWRkcikgPj4gbXNoaWZ0ID09CisrCQkJCW50b2hsKGlwX2hkcihza2IpLT5kYWRkcikgPj4gbXNoaWZ0KQorKwkJCWJyZWFrOworKwl9CisrCisrCS8qIGNoYW5nZSBkc3RhZGRyIGFjY29yZGluZyB0byBGTVIgKi8KKysJaWYgKGZtcikKKysJCWlwNGlwNl9mbXJfY2FsYygmZmw2LmRhZGRyLCBpcF9oZHIoc2tiKSwgc2tiX3RhaWxfcG9pbnRlcihza2IpLCBmbXIsIHRydWUpOworKworIAlpZiAoaXB0dW5uZWxfaGFuZGxlX29mZmxvYWRzKHNrYiwgU0tCX0dTT19JUFhJUDYpKQorIAkJcmV0dXJuIC0xOworIAorQEAgLTE1MDQsNiArMTY1OCwxNCBAQCBpcDZfdG5sX2NoYW5nZShzdHJ1Y3QgaXA2X3RubCAqdCwgY29uc3QKKyAJdC0+cGFybXMubGluayA9IHAtPmxpbms7CisgCXQtPnBhcm1zLnByb3RvID0gcC0+cHJvdG87CisgCXQtPnBhcm1zLmZ3bWFyayA9IHAtPmZ3bWFyazsKKysKKysJd2hpbGUgKHQtPnBhcm1zLmZtcnMpIHsKKysJCXN0cnVjdCBfX2lwNl90bmxfZm1yICpuZXh0ID0gdC0+cGFybXMuZm1ycy0+bmV4dDsKKysJCWtmcmVlKHQtPnBhcm1zLmZtcnMpOworKwkJdC0+cGFybXMuZm1ycyA9IG5leHQ7CisrCX0KKysJdC0+cGFybXMuZm1ycyA9IHAtPmZtcnM7CisrCisgCWRzdF9jYWNoZV9yZXNldCgmdC0+ZHN0X2NhY2hlKTsKKyAJaXA2X3RubF9saW5rX2NvbmZpZyh0KTsKKyAJcmV0dXJuIDA7CitAQCAtMTU0Miw2ICsxNzA0LDcgQEAgaXA2X3RubF9wYXJtX2Zyb21fdXNlcihzdHJ1Y3QgX19pcDZfdG5sXworIAlwLT5mbG93aW5mbyA9IHUtPmZsb3dpbmZvOworIAlwLT5saW5rID0gdS0+bGluazsKKyAJcC0+cHJvdG8gPSB1LT5wcm90bzsKKysJcC0+Zm1ycyA9IE5VTEw7CisgCW1lbWNweShwLT5uYW1lLCB1LT5uYW1lLCBzaXplb2YodS0+bmFtZSkpOworIH0KKyAKK0BAIC0xOTI2LDYgKzIwODksMTUgQEAgc3RhdGljIGludCBpcDZfdG5sX3ZhbGlkYXRlKHN0cnVjdCBubGF0dAorIAlyZXR1cm4gMDsKKyB9CisgCisrc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGlwNl90bmxfZm1yX3BvbGljeVtJRkxBX0lQVFVOX0ZNUl9NQVggKyAxXSA9IHsKKysJW0lGTEFfSVBUVU5fRk1SX0lQNl9QUkVGSVhdID0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikgfSwKKysJW0lGTEFfSVBUVU5fRk1SX0lQNF9QUkVGSVhdID0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSB9LAorKwlbSUZMQV9JUFRVTl9GTVJfSVA2X1BSRUZJWF9MRU5dID0geyAudHlwZSA9IE5MQV9VOCB9LAorKwlbSUZMQV9JUFRVTl9GTVJfSVA0X1BSRUZJWF9MRU5dID0geyAudHlwZSA9IE5MQV9VOCB9LAorKwlbSUZMQV9JUFRVTl9GTVJfRUFfTEVOXSA9IHsgLnR5cGUgPSBOTEFfVTggfSwKKysJW0lGTEFfSVBUVU5fRk1SX09GRlNFVF0gPSB7IC50eXBlID0gTkxBX1U4IH0KKyt9OworKworIHN0YXRpYyB2b2lkIGlwNl90bmxfbmV0bGlua19wYXJtcyhzdHJ1Y3QgbmxhdHRyICpkYXRhW10sCisgCQkJCSAgc3RydWN0IF9faXA2X3RubF9wYXJtICpwYXJtcykKKyB7CitAQCAtMTk2Myw2ICsyMTM1LDQ2IEBAIHN0YXRpYyB2b2lkIGlwNl90bmxfbmV0bGlua19wYXJtcyhzdHJ1Y3QKKyAKKyAJaWYgKGRhdGFbSUZMQV9JUFRVTl9GV01BUktdKQorIAkJcGFybXMtPmZ3bWFyayA9IG5sYV9nZXRfdTMyKGRhdGFbSUZMQV9JUFRVTl9GV01BUktdKTsKKysKKysJaWYgKGRhdGFbSUZMQV9JUFRVTl9GTVJTXSkgeworKwkJdW5zaWduZWQgcmVtOworKwkJc3RydWN0IG5sYXR0ciAqZm1yOworKwkJbmxhX2Zvcl9lYWNoX25lc3RlZChmbXIsIGRhdGFbSUZMQV9JUFRVTl9GTVJTXSwgcmVtKSB7CisrCQkJc3RydWN0IG5sYXR0ciAqZm1yZFtJRkxBX0lQVFVOX0ZNUl9NQVggKyAxXSwgKmM7CisrCQkJc3RydWN0IF9faXA2X3RubF9mbXIgKm5mbXI7CisrCisrCQkJbmxhX3BhcnNlX25lc3RlZChmbXJkLCBJRkxBX0lQVFVOX0ZNUl9NQVgsCisrCQkJCWZtciwgaXA2X3RubF9mbXJfcG9saWN5LCBOVUxMKTsKKysKKysJCQlpZiAoIShuZm1yID0ga3phbGxvYyhzaXplb2YoKm5mbXIpLCBHRlBfS0VSTkVMKSkpCisrCQkJCWNvbnRpbnVlOworKworKwkJCW5mbXItPm9mZnNldCA9IDY7CisrCisrCQkJaWYgKChjID0gZm1yZFtJRkxBX0lQVFVOX0ZNUl9JUDZfUFJFRklYXSkpCisrCQkJCW5sYV9tZW1jcHkoJm5mbXItPmlwNl9wcmVmaXgsIGZtcmRbSUZMQV9JUFRVTl9GTVJfSVA2X1BSRUZJWF0sCisrCQkJCQlzaXplb2YobmZtci0+aXA2X3ByZWZpeCkpOworKworKwkJCWlmICgoYyA9IGZtcmRbSUZMQV9JUFRVTl9GTVJfSVA0X1BSRUZJWF0pKQorKwkJCQlubGFfbWVtY3B5KCZuZm1yLT5pcDRfcHJlZml4LCBmbXJkW0lGTEFfSVBUVU5fRk1SX0lQNF9QUkVGSVhdLAorKwkJCQkJc2l6ZW9mKG5mbXItPmlwNF9wcmVmaXgpKTsKKysKKysJCQlpZiAoKGMgPSBmbXJkW0lGTEFfSVBUVU5fRk1SX0lQNl9QUkVGSVhfTEVOXSkpCisrCQkJCW5mbXItPmlwNl9wcmVmaXhfbGVuID0gbmxhX2dldF91OChjKTsKKysKKysJCQlpZiAoKGMgPSBmbXJkW0lGTEFfSVBUVU5fRk1SX0lQNF9QUkVGSVhfTEVOXSkpCisrCQkJCW5mbXItPmlwNF9wcmVmaXhfbGVuID0gbmxhX2dldF91OChjKTsKKysKKysJCQlpZiAoKGMgPSBmbXJkW0lGTEFfSVBUVU5fRk1SX0VBX0xFTl0pKQorKwkJCQluZm1yLT5lYV9sZW4gPSBubGFfZ2V0X3U4KGMpOworKworKwkJCWlmICgoYyA9IGZtcmRbSUZMQV9JUFRVTl9GTVJfT0ZGU0VUXSkpCisrCQkJCW5mbXItPm9mZnNldCA9IG5sYV9nZXRfdTgoYyk7CisrCisrCQkJbmZtci0+bmV4dCA9IHBhcm1zLT5mbXJzOworKwkJCXBhcm1zLT5mbXJzID0gbmZtcjsKKysJCX0KKysJfQorIH0KKyAKKyBzdGF0aWMgYm9vbCBpcDZfdG5sX25ldGxpbmtfZW5jYXBfcGFybXMoc3RydWN0IG5sYXR0ciAqZGF0YVtdLAorQEAgLTIwNzgsNiArMjI5MCwxMiBAQCBzdGF0aWMgdm9pZCBpcDZfdG5sX2RlbGxpbmsoc3RydWN0IG5ldF9kCisgCisgc3RhdGljIHNpemVfdCBpcDZfdG5sX2dldF9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCisgeworKwljb25zdCBzdHJ1Y3QgaXA2X3RubCAqdCA9IG5ldGRldl9wcml2KGRldik7CisrCXN0cnVjdCBfX2lwNl90bmxfZm1yICpjOworKwlpbnQgZm1ycyA9IDA7CisrCWZvciAoYyA9IHQtPnBhcm1zLmZtcnM7IGM7IGMgPSBjLT5uZXh0KQorKwkJKytmbXJzOworKworIAlyZXR1cm4KKyAJCS8qIElGTEFfSVBUVU5fTElOSyAqLworIAkJbmxhX3RvdGFsX3NpemUoNCkgKworQEAgLTIxMDcsNiArMjMyNSwyNCBAQCBzdGF0aWMgc2l6ZV90IGlwNl90bmxfZ2V0X3NpemUoY29uc3Qgc3RyCisgCQlubGFfdG90YWxfc2l6ZSgwKSArCisgCQkvKiBJRkxBX0lQVFVOX0ZXTUFSSyAqLworIAkJbmxhX3RvdGFsX3NpemUoNCkgKworKwkJLyogSUZMQV9JUFRVTl9GTVJTICovCisrCQlubGFfdG90YWxfc2l6ZSgwKSArCisrCQkoCisrCQkJLyogbmVzdCAqLworKwkJCW5sYV90b3RhbF9zaXplKDApICsKKysJCQkvKiBJRkxBX0lQVFVOX0ZNUl9JUDZfUFJFRklYICovCisrCQkJbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpICsKKysJCQkvKiBJRkxBX0lQVFVOX0ZNUl9JUDRfUFJFRklYICovCisrCQkJbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkgKworKwkJCS8qIElGTEFfSVBUVU5fRk1SX0VBX0xFTiAqLworKwkJCW5sYV90b3RhbF9zaXplKDEpICsKKysJCQkvKiBJRkxBX0lQVFVOX0ZNUl9JUDZfUFJFRklYX0xFTiAqLworKwkJCW5sYV90b3RhbF9zaXplKDEpICsKKysJCQkvKiBJRkxBX0lQVFVOX0ZNUl9JUDRfUFJFRklYX0xFTiAqLworKwkJCW5sYV90b3RhbF9zaXplKDEpICsKKysJCQkvKiBJRkxBX0lQVFVOX0ZNUl9PRkZTRVQgKi8KKysJCQlubGFfdG90YWxfc2l6ZSgxKQorKwkJKSAqIGZtcnMgKworIAkJMDsKKyB9CisgCitAQCAtMjExNCw2ICsyMzUwLDkgQEAgc3RhdGljIGludCBpcDZfdG5sX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYgorIHsKKyAJc3RydWN0IGlwNl90bmwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7CisgCXN0cnVjdCBfX2lwNl90bmxfcGFybSAqcGFybSA9ICZ0dW5uZWwtPnBhcm1zOworKwlzdHJ1Y3QgX19pcDZfdG5sX2ZtciAqYzsKKysJaW50IGZtcmNudCA9IDA7CisrCXN0cnVjdCBubGF0dHIgKmZtcnM7CisgCisgCWlmIChubGFfcHV0X3UzMihza2IsIElGTEFfSVBUVU5fTElOSywgcGFybS0+bGluaykgfHwKKyAJICAgIG5sYV9wdXRfaW42X2FkZHIoc2tiLCBJRkxBX0lQVFVOX0xPQ0FMLCAmcGFybS0+bGFkZHIpIHx8CitAQCAtMjEyMyw5ICsyMzYyLDI3IEBAIHN0YXRpYyBpbnQgaXA2X3RubF9maWxsX2luZm8oc3RydWN0IHNrX2IKKyAJICAgIG5sYV9wdXRfYmUzMihza2IsIElGTEFfSVBUVU5fRkxPV0lORk8sIHBhcm0tPmZsb3dpbmZvKSB8fAorIAkgICAgbmxhX3B1dF91MzIoc2tiLCBJRkxBX0lQVFVOX0ZMQUdTLCBwYXJtLT5mbGFncykgfHwKKyAJICAgIG5sYV9wdXRfdTgoc2tiLCBJRkxBX0lQVFVOX1BST1RPLCBwYXJtLT5wcm90bykgfHwKKy0JICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9JUFRVTl9GV01BUkssIHBhcm0tPmZ3bWFyaykpCisrCSAgICBubGFfcHV0X3UzMihza2IsIElGTEFfSVBUVU5fRldNQVJLLCBwYXJtLT5md21hcmspIHx8CisrCSAgICAhKGZtcnMgPSBubGFfbmVzdF9zdGFydChza2IsIElGTEFfSVBUVU5fRk1SUykpKQorIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisgCisrCWZvciAoYyA9IHBhcm0tPmZtcnM7IGM7IGMgPSBjLT5uZXh0KSB7CisrCQlzdHJ1Y3QgbmxhdHRyICpmbXIgPSBubGFfbmVzdF9zdGFydChza2IsICsrZm1yY250KTsKKysJCWlmICghZm1yIHx8CisrCQkJbmxhX3B1dChza2IsIElGTEFfSVBUVU5fRk1SX0lQNl9QUkVGSVgsCisrCQkJCXNpemVvZihjLT5pcDZfcHJlZml4KSwgJmMtPmlwNl9wcmVmaXgpIHx8CisrCQkJbmxhX3B1dChza2IsIElGTEFfSVBUVU5fRk1SX0lQNF9QUkVGSVgsCisrCQkJCXNpemVvZihjLT5pcDRfcHJlZml4KSwgJmMtPmlwNF9wcmVmaXgpIHx8CisrCQkJbmxhX3B1dF91OChza2IsIElGTEFfSVBUVU5fRk1SX0lQNl9QUkVGSVhfTEVOLCBjLT5pcDZfcHJlZml4X2xlbikgfHwKKysJCQlubGFfcHV0X3U4KHNrYiwgSUZMQV9JUFRVTl9GTVJfSVA0X1BSRUZJWF9MRU4sIGMtPmlwNF9wcmVmaXhfbGVuKSB8fAorKwkJCW5sYV9wdXRfdTgoc2tiLCBJRkxBX0lQVFVOX0ZNUl9FQV9MRU4sIGMtPmVhX2xlbikgfHwKKysJCQlubGFfcHV0X3U4KHNrYiwgSUZMQV9JUFRVTl9GTVJfT0ZGU0VULCBjLT5vZmZzZXQpKQorKwkJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKysKKysJCW5sYV9uZXN0X2VuZChza2IsIGZtcik7CisrCX0KKysJbmxhX25lc3RfZW5kKHNrYiwgZm1ycyk7CisrCisgCWlmIChubGFfcHV0X3UxNihza2IsIElGTEFfSVBUVU5fRU5DQVBfVFlQRSwgdHVubmVsLT5lbmNhcC50eXBlKSB8fAorIAkgICAgbmxhX3B1dF9iZTE2KHNrYiwgSUZMQV9JUFRVTl9FTkNBUF9TUE9SVCwgdHVubmVsLT5lbmNhcC5zcG9ydCkgfHwKKyAJICAgIG5sYV9wdXRfYmUxNihza2IsIElGTEFfSVBUVU5fRU5DQVBfRFBPUlQsIHR1bm5lbC0+ZW5jYXAuZHBvcnQpIHx8CitAQCAtMjE2NSw2ICsyNDIyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGlwNl90bmxfcAorIAlbSUZMQV9JUFRVTl9FTkNBUF9EUE9SVF0JPSB7IC50eXBlID0gTkxBX1UxNiB9LAorIAlbSUZMQV9JUFRVTl9DT0xMRUNUX01FVEFEQVRBXQk9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAorIAlbSUZMQV9JUFRVTl9GV01BUktdCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCisrCVtJRkxBX0lQVFVOX0ZNUlNdCQk9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sCisgfTsKKyAKKyBzdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXA2X2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC82NzAtaXB2Ni1hbGxvdy1yZWplY3Rpbmctd2l0aC1zb3VyY2UtYWRkcmVzcy1mYWlsZWQtcG9saWN5LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNjcwLWlwdjYtYWxsb3ctcmVqZWN0aW5nLXdpdGgtc291cmNlLWFkZHJlc3MtZmFpbGVkLXBvbGljeS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmMxZTI2Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNjcwLWlwdjYtYWxsb3ctcmVqZWN0aW5nLXdpdGgtc291cmNlLWFkZHJlc3MtZmFpbGVkLXBvbGljeS5wYXRjaApAQCAtMCwwICsxLDI2MyBAQAorRnJvbTogSm9uYXMgR29yc2tpIDxqb2dvQG9wZW53cnQub3JnPgorU3ViamVjdDogaXB2NjogYWxsb3cgcmVqZWN0aW5nIHdpdGggInNvdXJjZSBhZGRyZXNzIGZhaWxlZCBwb2xpY3kiCisKK1JGQzYyMDQgTC0xNCByZXF1aXJlcyByZWplY3RpbmcgdHJhZmZpYyBmcm9tIGludmFsaWQgYWRkcmVzc2VzIHdpdGgKK0lDTVB2NiBEZXN0aW5hdGlvbiBVbnJlYWNoYWJsZSwgQ29kZSA1IChTb3VyY2UgYWRkcmVzcyBmYWlsZWQgaW5ncmVzcy8KK2VncmVzcyBwb2xpY3kpIG9uIHRoZSBMQU4gc2lkZSwgc28gYWRkIGFuIGFwcHJvcHJpYXRlIHJ1bGUgZm9yIHRoYXQuCisKK1NpZ25lZC1vZmYtYnk6IEpvbmFzIEdvcnNraSA8am9nb0BvcGVud3J0Lm9yZz4KKy0tLQorIGluY2x1ZGUvbmV0L25ldG5zL2lwdjYuaCAgICAgICB8ICAxICsKKyBpbmNsdWRlL3VhcGkvbGludXgvZmliX3J1bGVzLmggfCAgNCArKysKKyBpbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmggfCAgMSArCisgbmV0L2lwdjQvZmliX3NlbWFudGljcy5jICAgICAgIHwgIDQgKysrCisgbmV0L2lwdjQvZmliX3RyaWUuYyAgICAgICAgICAgIHwgIDEgKworIG5ldC9pcHY0L2lwbXIuYyAgICAgICAgICAgICAgICB8ICAxICsKKyBuZXQvaXB2Ni9maWI2X3J1bGVzLmMgICAgICAgICAgfCAgNCArKysKKyBuZXQvaXB2Ni9pcDZtci5jICAgICAgICAgICAgICAgfCAgMiArKworIG5ldC9pcHY2L3JvdXRlLmMgICAgICAgICAgICAgICB8IDU4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQorIDkgZmlsZXMgY2hhbmdlZCwgNzUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCistLS0gYS9pbmNsdWRlL25ldC9uZXRucy9pcHY2LmgKKysrKyBiL2luY2x1ZGUvbmV0L25ldG5zL2lwdjYuaAorQEAgLTg0LDYgKzg0LDcgQEAgc3RydWN0IG5ldG5zX2lwdjYgeworIAl1bnNpZ25lZCBpbnQJCWZpYjZfcnVsZXNfcmVxdWlyZV9mbGRpc3NlY3Q7CisgCWJvb2wJCQlmaWI2X2hhc19jdXN0b21fcnVsZXM7CisgCXN0cnVjdCBydDZfaW5mbyAgICAgICAgICppcDZfcHJvaGliaXRfZW50cnk7CisrCXN0cnVjdCBydDZfaW5mbwkJKmlwNl9wb2xpY3lfZmFpbGVkX2VudHJ5OworIAlzdHJ1Y3QgcnQ2X2luZm8gICAgICAgICAqaXA2X2Jsa19ob2xlX2VudHJ5OworIAlzdHJ1Y3QgZmliNl90YWJsZSAgICAgICAqZmliNl9sb2NhbF90Ymw7CisgCXN0cnVjdCBmaWJfcnVsZXNfb3BzICAgICpmaWI2X3J1bGVzX29wczsKKy0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9maWJfcnVsZXMuaAorKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2ZpYl9ydWxlcy5oCitAQCAtODIsNiArODIsMTAgQEAgZW51bSB7CisgCUZSX0FDVF9CTEFDS0hPTEUsCS8qIERyb3Agd2l0aG91dCBub3RpZmljYXRpb24gKi8KKyAJRlJfQUNUX1VOUkVBQ0hBQkxFLAkvKiBEcm9wIHdpdGggRU5FVFVOUkVBQ0ggKi8KKyAJRlJfQUNUX1BST0hJQklULAkvKiBEcm9wIHdpdGggRUFDQ0VTICovCisrCUZSX0FDVF9SRVM5LAorKwlGUl9BQ1RfUkVTMTAsCisrCUZSX0FDVF9SRVMxMSwKKysJRlJfQUNUX1BPTElDWV9GQUlMRUQsCS8qIERyb3Agd2l0aCBFQUNDRVMgKi8KKyAJX19GUl9BQ1RfTUFYLAorIH07CisgCistLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgKKysrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaAorQEAgLTIzNSw2ICsyMzUsNyBAQCBlbnVtIHsKKyAJUlROX1RIUk9XLAkJLyogTm90IGluIHRoaXMgdGFibGUJCSovCisgCVJUTl9OQVQsCQkvKiBUcmFuc2xhdGUgdGhpcyBhZGRyZXNzCSovCisgCVJUTl9YUkVTT0xWRSwJCS8qIFVzZSBleHRlcm5hbCByZXNvbHZlcgkqLworKwlSVE5fUE9MSUNZX0ZBSUxFRCwJLyogRmFpbGVkIGluZ3Jlc3MvZWdyZXNzIHBvbGljeSAqLworIAlfX1JUTl9NQVgKKyB9OworIAorLS0tIGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jCisrKysgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMKK0BAIC0xNDIsNiArMTQyLDEwIEBAIGNvbnN0IHN0cnVjdCBmaWJfcHJvcCBmaWJfcHJvcHNbUlROX01BWAorIAkJLmVycm9yCT0gLUVJTlZBTCwKKyAJCS5zY29wZQk9IFJUX1NDT1BFX05PV0hFUkUsCisgCX0sCisrCVtSVE5fUE9MSUNZX0ZBSUxFRF0gPSB7CisrCQkuZXJyb3IJPSAtRUFDQ0VTLAorKwkJLnNjb3BlCT0gUlRfU0NPUEVfVU5JVkVSU0UsCisrCX0sCisgfTsKKyAKKyBzdGF0aWMgdm9pZCBydF9maWJpbmZvX2ZyZWUoc3RydWN0IHJ0YWJsZSBfX3JjdSAqKnJ0cCkKKy0tLSBhL25ldC9pcHY0L2ZpYl90cmllLmMKKysrKyBiL25ldC9pcHY0L2ZpYl90cmllLmMKK0BAIC0yNTk2LDYgKzI1OTYsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgcnRuX3R5cGVfbmFtZXNbCisgCVtSVE5fVEhST1ddID0gIlRIUk9XIiwKKyAJW1JUTl9OQVRdID0gIk5BVCIsCisgCVtSVE5fWFJFU09MVkVdID0gIlhSRVNPTFZFIiwKKysJW1JUTl9QT0xJQ1lfRkFJTEVEXSA9ICJQT0xJQ1lfRkFJTEVEIiwKKyB9OworIAorIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqcnRuX3R5cGUoY2hhciAqYnVmLCBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgdCkKKy0tLSBhL25ldC9pcHY0L2lwbXIuYworKysrIGIvbmV0L2lwdjQvaXBtci5jCitAQCAtMTczLDYgKzE3Myw3IEBAIHN0YXRpYyBpbnQgaXBtcl9ydWxlX2FjdGlvbihzdHJ1Y3QgZmliX3IKKyAJY2FzZSBGUl9BQ1RfVU5SRUFDSEFCTEU6CisgCQlyZXR1cm4gLUVORVRVTlJFQUNIOworIAljYXNlIEZSX0FDVF9QUk9ISUJJVDoKKysJY2FzZSBGUl9BQ1RfUE9MSUNZX0ZBSUxFRDoKKyAJCXJldHVybiAtRUFDQ0VTOworIAljYXNlIEZSX0FDVF9CTEFDS0hPTEU6CisgCWRlZmF1bHQ6CistLS0gYS9uZXQvaXB2Ni9maWI2X3J1bGVzLmMKKysrKyBiL25ldC9pcHY2L2ZpYjZfcnVsZXMuYworQEAgLTIxNiw2ICsyMTYsMTAgQEAgc3RhdGljIGludCBfX2ZpYjZfcnVsZV9hY3Rpb24oc3RydWN0IGZpYgorIAkJZXJyID0gLUVBQ0NFUzsKKyAJCXJ0ID0gbmV0LT5pcHY2LmlwNl9wcm9oaWJpdF9lbnRyeTsKKyAJCWdvdG8gZGlzY2FyZF9wa3Q7CisrCWNhc2UgRlJfQUNUX1BPTElDWV9GQUlMRUQ6CisrCQllcnIgPSAtRUFDQ0VTOworKwkJcnQgPSBuZXQtPmlwdjYuaXA2X3BvbGljeV9mYWlsZWRfZW50cnk7CisrCQlnb3RvIGRpc2NhcmRfcGt0OworIAl9CisgCisgCXRiX2lkID0gZmliX3J1bGVfZ2V0X3RhYmxlKHJ1bGUsIGFyZyk7CistLS0gYS9uZXQvaXB2Ni9pcDZtci5jCisrKysgYi9uZXQvaXB2Ni9pcDZtci5jCitAQCAtMTYxLDYgKzE2MSw4IEBAIHN0YXRpYyBpbnQgaXA2bXJfcnVsZV9hY3Rpb24oc3RydWN0IGZpYl8KKyAJCXJldHVybiAtRU5FVFVOUkVBQ0g7CisgCWNhc2UgRlJfQUNUX1BST0hJQklUOgorIAkJcmV0dXJuIC1FQUNDRVM7CisrCWNhc2UgRlJfQUNUX1BPTElDWV9GQUlMRUQ6CisrCQlyZXR1cm4gLUVBQ0NFUzsKKyAJY2FzZSBGUl9BQ1RfQkxBQ0tIT0xFOgorIAlkZWZhdWx0OgorIAkJcmV0dXJuIC1FSU5WQUw7CistLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jCisrKysgYi9uZXQvaXB2Ni9yb3V0ZS5jCitAQCAtOTQsNiArOTQsOCBAQCBzdGF0aWMgaW50CQlpcDZfcGt0X2Rpc2NhcmQoc3RydWN0IHNrX2J1Cisgc3RhdGljIGludAkJaXA2X3BrdF9kaXNjYXJkX291dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cisgc3RhdGljIGludAkJaXA2X3BrdF9wcm9oaWJpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKyBzdGF0aWMgaW50CQlpcDZfcGt0X3Byb2hpYml0X291dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cisrc3RhdGljIGludAkJaXA2X3BrdF9wb2xpY3lfZmFpbGVkKHN0cnVjdCBza19idWZmICpza2IpOworK3N0YXRpYyBpbnQJCWlwNl9wa3RfcG9saWN5X2ZhaWxlZF9vdXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOworIHN0YXRpYyB2b2lkCQlpcDZfbGlua19mYWlsdXJlKHN0cnVjdCBza19idWZmICpza2IpOworIHN0YXRpYyB2b2lkCQlpcDZfcnRfdXBkYXRlX3BtdHUoc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBzdHJ1Y3Qgc29jayAqc2ssCisgCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbXR1LAorQEAgLTMyNyw2ICszMjksMTggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBydDZfaW5mbyBpcDZfcHJvaGliaQorIAkucnQ2aV9mbGFncwk9IChSVEZfUkVKRUNUIHwgUlRGX05PTkVYVEhPUCksCisgfTsKKyAKKytzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Nl9pbmZvIGlwNl9wb2xpY3lfZmFpbGVkX2VudHJ5X3RlbXBsYXRlID0geworKwkuZHN0ID0geworKwkJLl9fcmVmY250CT0gQVRPTUlDX0lOSVQoMSksCisrCQkuX191c2UJCT0gMSwKKysJCS5vYnNvbGV0ZQk9IERTVF9PQlNPTEVURV9GT1JDRV9DSEssCisrCQkuZXJyb3IJCT0gLUVBQ0NFUywKKysJCS5pbnB1dAkJPSBpcDZfcGt0X3BvbGljeV9mYWlsZWQsCisrCQkub3V0cHV0CQk9IGlwNl9wa3RfcG9saWN5X2ZhaWxlZF9vdXQsCisrCX0sCisrCS5ydDZpX2ZsYWdzCT0gKFJURl9SRUpFQ1QgfCBSVEZfTk9ORVhUSE9QKSwKKyt9OworKworIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnQ2X2luZm8gaXA2X2Jsa19ob2xlX2VudHJ5X3RlbXBsYXRlID0geworIAkuZHN0ID0geworIAkJLl9fcmVmY250CT0gQVRPTUlDX0lOSVQoMSksCitAQCAtMTA0OCw2ICsxMDYyLDcgQEAgc3RhdGljIGNvbnN0IGludCBmaWI2X3Byb3BbUlROX01BWCArIDFdCisgCVtSVE5fQkxBQ0tIT0xFXQk9IC1FSU5WQUwsCisgCVtSVE5fVU5SRUFDSEFCTEVdID0gLUVIT1NUVU5SRUFDSCwKKyAJW1JUTl9QUk9ISUJJVF0JPSAtRUFDQ0VTLAorKwlbUlROX1BPTElDWV9GQUlMRURdID0gLUVBQ0NFUywKKyAJW1JUTl9USFJPV10JPSAtRUFHQUlOLAorIAlbUlROX05BVF0JPSAtRUlOVkFMLAorIAlbUlROX1hSRVNPTFZFXQk9IC1FSU5WQUwsCitAQCAtMTA4NSw2ICsxMTAwLDEwIEBAIHN0YXRpYyB2b2lkIGlwNl9ydF9pbml0X2RzdF9yZWplY3Qoc3RydWMKKyAJCXJ0LT5kc3Qub3V0cHV0ID0gaXA2X3BrdF9wcm9oaWJpdF9vdXQ7CisgCQlydC0+ZHN0LmlucHV0ID0gaXA2X3BrdF9wcm9oaWJpdDsKKyAJCWJyZWFrOworKwljYXNlIFJUTl9QT0xJQ1lfRkFJTEVEOgorKwkJcnQtPmRzdC5vdXRwdXQgPSBpcDZfcGt0X3BvbGljeV9mYWlsZWRfb3V0OworKwkJcnQtPmRzdC5pbnB1dCA9IGlwNl9wa3RfcG9saWN5X2ZhaWxlZDsKKysJCWJyZWFrOworIAljYXNlIFJUTl9USFJPVzoKKyAJY2FzZSBSVE5fVU5SRUFDSEFCTEU6CisgCWRlZmF1bHQ6CitAQCAtNDQ1Myw2ICs0NDcyLDE3IEBAIHN0YXRpYyBpbnQgaXA2X3BrdF9wcm9oaWJpdF9vdXQoc3RydWN0IG4KKyAJcmV0dXJuIGlwNl9wa3RfZHJvcChza2IsIElDTVBWNl9BRE1fUFJPSElCSVRFRCwgSVBTVEFUU19NSUJfT1VUTk9ST1VURVMpOworIH0KKyAKKytzdGF0aWMgaW50IGlwNl9wa3RfcG9saWN5X2ZhaWxlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorK3sKKysJcmV0dXJuIGlwNl9wa3RfZHJvcChza2IsIElDTVBWNl9QT0xJQ1lfRkFJTCwgSVBTVEFUU19NSUJfSU5OT1JPVVRFUyk7CisrfQorKworK3N0YXRpYyBpbnQgaXA2X3BrdF9wb2xpY3lfZmFpbGVkX291dChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKKyt7CisrCXNrYi0+ZGV2ID0gc2tiX2RzdChza2IpLT5kZXY7CisrCXJldHVybiBpcDZfcGt0X2Ryb3Aoc2tiLCBJQ01QVjZfUE9MSUNZX0ZBSUwsIElQU1RBVFNfTUlCX09VVE5PUk9VVEVTKTsKKyt9CisrCisgLyoKKyAgKglBbGxvY2F0ZSBhIGRzdCBmb3IgbG9jYWwgKHVuaWNhc3QgLyBhbnljYXN0KSBhZGRyZXNzLgorICAqLworQEAgLTQ5MzMsNyArNDk2Myw4IEBAIHN0YXRpYyBpbnQgcnRtX3RvX2ZpYjZfY29uZmlnKHN0cnVjdCBza18KKyAJaWYgKHJ0bS0+cnRtX3R5cGUgPT0gUlROX1VOUkVBQ0hBQkxFIHx8CisgCSAgICBydG0tPnJ0bV90eXBlID09IFJUTl9CTEFDS0hPTEUgfHwKKyAJICAgIHJ0bS0+cnRtX3R5cGUgPT0gUlROX1BST0hJQklUIHx8CistCSAgICBydG0tPnJ0bV90eXBlID09IFJUTl9USFJPVykKKysJICAgIHJ0bS0+cnRtX3R5cGUgPT0gUlROX1RIUk9XIHx8CisrCSAgICBydG0tPnJ0bV90eXBlID09IFJUTl9QT0xJQ1lfRkFJTEVEKQorIAkJY2ZnLT5mY19mbGFncyB8PSBSVEZfUkVKRUNUOworIAorIAlpZiAocnRtLT5ydG1fdHlwZSA9PSBSVE5fTE9DQUwpCitAQCAtNjA4NCw2ICs2MTE1LDggQEAgc3RhdGljIGludCBpcDZfcm91dGVfZGV2X25vdGlmeShzdHJ1Y3QgbgorICNpZmRlZiBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMKKyAJCW5ldC0+aXB2Ni5pcDZfcHJvaGliaXRfZW50cnktPmRzdC5kZXYgPSBkZXY7CisgCQluZXQtPmlwdjYuaXA2X3Byb2hpYml0X2VudHJ5LT5ydDZpX2lkZXYgPSBpbjZfZGV2X2dldChkZXYpOworKwkJbmV0LT5pcHY2LmlwNl9wb2xpY3lfZmFpbGVkX2VudHJ5LT5kc3QuZGV2ID0gZGV2OworKwkJbmV0LT5pcHY2LmlwNl9wb2xpY3lfZmFpbGVkX2VudHJ5LT5ydDZpX2lkZXYgPSBpbjZfZGV2X2dldChkZXYpOworIAkJbmV0LT5pcHY2LmlwNl9ibGtfaG9sZV9lbnRyeS0+ZHN0LmRldiA9IGRldjsKKyAJCW5ldC0+aXB2Ni5pcDZfYmxrX2hvbGVfZW50cnktPnJ0NmlfaWRldiA9IGluNl9kZXZfZ2V0KGRldik7CisgI2VuZGlmCitAQCAtNjA5NSw2ICs2MTI4LDcgQEAgc3RhdGljIGludCBpcDZfcm91dGVfZGV2X25vdGlmeShzdHJ1Y3QgbgorIAkJaW42X2Rldl9wdXRfY2xlYXIoJm5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeS0+cnQ2aV9pZGV2KTsKKyAjaWZkZWYgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTCisgCQlpbjZfZGV2X3B1dF9jbGVhcigmbmV0LT5pcHY2LmlwNl9wcm9oaWJpdF9lbnRyeS0+cnQ2aV9pZGV2KTsKKysJCWluNl9kZXZfcHV0X2NsZWFyKCZuZXQtPmlwdjYuaXA2X3BvbGljeV9mYWlsZWRfZW50cnktPnJ0NmlfaWRldik7CisgCQlpbjZfZGV2X3B1dF9jbGVhcigmbmV0LT5pcHY2LmlwNl9ibGtfaG9sZV9lbnRyeS0+cnQ2aV9pZGV2KTsKKyAjZW5kaWYKKyAJfQorQEAgLTYyODcsNiArNjMyMSw4IEBAIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBpcDZfcm91dGVfbmV0X2luaXQKKyAKKyAjaWZkZWYgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTCisgCW5ldC0+aXB2Ni5maWI2X2hhc19jdXN0b21fcnVsZXMgPSBmYWxzZTsKKysKKysKKyAJbmV0LT5pcHY2LmlwNl9wcm9oaWJpdF9lbnRyeSA9IGttZW1kdXAoJmlwNl9wcm9oaWJpdF9lbnRyeV90ZW1wbGF0ZSwKKyAJCQkJCSAgICAgICBzaXplb2YoKm5ldC0+aXB2Ni5pcDZfcHJvaGliaXRfZW50cnkpLAorIAkJCQkJICAgICAgIEdGUF9LRVJORUwpOworQEAgLTYyOTcsMTEgKzYzMzMsMjEgQEAgc3RhdGljIGludCBfX25ldF9pbml0IGlwNl9yb3V0ZV9uZXRfaW5pdAorIAkJCSBpcDZfdGVtcGxhdGVfbWV0cmljcywgdHJ1ZSk7CisgCUlOSVRfTElTVF9IRUFEKCZuZXQtPmlwdjYuaXA2X3Byb2hpYml0X2VudHJ5LT5ydDZpX3VuY2FjaGVkKTsKKyAKKysJbmV0LT5pcHY2LmlwNl9wb2xpY3lfZmFpbGVkX2VudHJ5ID0KKysJCQkJa21lbWR1cCgmaXA2X3BvbGljeV9mYWlsZWRfZW50cnlfdGVtcGxhdGUsCisrCQkJCXNpemVvZigqbmV0LT5pcHY2LmlwNl9wb2xpY3lfZmFpbGVkX2VudHJ5KSwgR0ZQX0tFUk5FTCk7CisrCWlmICghbmV0LT5pcHY2LmlwNl9wb2xpY3lfZmFpbGVkX2VudHJ5KQorKwkJZ290byBvdXRfaXA2X3Byb2hpYml0X2VudHJ5OworKwluZXQtPmlwdjYuaXA2X3BvbGljeV9mYWlsZWRfZW50cnktPmRzdC5vcHMgPSAmbmV0LT5pcHY2LmlwNl9kc3Rfb3BzOworKwlkc3RfaW5pdF9tZXRyaWNzKCZuZXQtPmlwdjYuaXA2X3BvbGljeV9mYWlsZWRfZW50cnktPmRzdCwKKysJCQkgaXA2X3RlbXBsYXRlX21ldHJpY3MsIHRydWUpOworKwlJTklUX0xJU1RfSEVBRCgmbmV0LT5pcHY2LmlwNl9wb2xpY3lfZmFpbGVkX2VudHJ5LT5ydDZpX3VuY2FjaGVkKTsKKysKKyAJbmV0LT5pcHY2LmlwNl9ibGtfaG9sZV9lbnRyeSA9IGttZW1kdXAoJmlwNl9ibGtfaG9sZV9lbnRyeV90ZW1wbGF0ZSwKKyAJCQkJCSAgICAgICBzaXplb2YoKm5ldC0+aXB2Ni5pcDZfYmxrX2hvbGVfZW50cnkpLAorIAkJCQkJICAgICAgIEdGUF9LRVJORUwpOworIAlpZiAoIW5ldC0+aXB2Ni5pcDZfYmxrX2hvbGVfZW50cnkpCistCQlnb3RvIG91dF9pcDZfcHJvaGliaXRfZW50cnk7CisrCQlnb3RvIG91dF9pcDZfcG9saWN5X2ZhaWxlZF9lbnRyeTsKKyAJbmV0LT5pcHY2LmlwNl9ibGtfaG9sZV9lbnRyeS0+ZHN0Lm9wcyA9ICZuZXQtPmlwdjYuaXA2X2RzdF9vcHM7CisgCWRzdF9pbml0X21ldHJpY3MoJm5ldC0+aXB2Ni5pcDZfYmxrX2hvbGVfZW50cnktPmRzdCwKKyAJCQkgaXA2X3RlbXBsYXRlX21ldHJpY3MsIHRydWUpOworQEAgLTYzMjUsNiArNjM3MSw4IEBAIG91dDoKKyAJcmV0dXJuIHJldDsKKyAKKyAjaWZkZWYgQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTCisrb3V0X2lwNl9wb2xpY3lfZmFpbGVkX2VudHJ5OgorKwlrZnJlZShuZXQtPmlwdjYuaXA2X3BvbGljeV9mYWlsZWRfZW50cnkpOworIG91dF9pcDZfcHJvaGliaXRfZW50cnk6CisgCWtmcmVlKG5ldC0+aXB2Ni5pcDZfcHJvaGliaXRfZW50cnkpOworIG91dF9pcDZfbnVsbF9lbnRyeToKK0BAIC02MzQ0LDYgKzYzOTIsNyBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwNl9yb3V0ZV9uZXRfZXhpCisgCWtmcmVlKG5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeSk7CisgI2lmZGVmIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUworIAlrZnJlZShuZXQtPmlwdjYuaXA2X3Byb2hpYml0X2VudHJ5KTsKKysJa2ZyZWUobmV0LT5pcHY2LmlwNl9wb2xpY3lfZmFpbGVkX2VudHJ5KTsKKyAJa2ZyZWUobmV0LT5pcHY2LmlwNl9ibGtfaG9sZV9lbnRyeSk7CisgI2VuZGlmCisgCWRzdF9lbnRyaWVzX2Rlc3Ryb3koJm5ldC0+aXB2Ni5pcDZfZHN0X29wcyk7CitAQCAtNjQyMSw2ICs2NDcwLDkgQEAgdm9pZCBfX2luaXQgaXA2X3JvdXRlX2luaXRfc3BlY2lhbF9lbnRyaQorIAlpbml0X25ldC5pcHY2LmlwNl9wcm9oaWJpdF9lbnRyeS0+cnQ2aV9pZGV2ID0gaW42X2Rldl9nZXQoaW5pdF9uZXQubG9vcGJhY2tfZGV2KTsKKyAJaW5pdF9uZXQuaXB2Ni5pcDZfYmxrX2hvbGVfZW50cnktPmRzdC5kZXYgPSBpbml0X25ldC5sb29wYmFja19kZXY7CisgCWluaXRfbmV0LmlwdjYuaXA2X2Jsa19ob2xlX2VudHJ5LT5ydDZpX2lkZXYgPSBpbjZfZGV2X2dldChpbml0X25ldC5sb29wYmFja19kZXYpOworKwlpbml0X25ldC5pcHY2LmlwNl9wb2xpY3lfZmFpbGVkX2VudHJ5LT5kc3QuZGV2ID0gaW5pdF9uZXQubG9vcGJhY2tfZGV2OworKwlpbml0X25ldC5pcHY2LmlwNl9wb2xpY3lfZmFpbGVkX2VudHJ5LT5ydDZpX2lkZXYgPQorKwkJaW42X2Rldl9nZXQoaW5pdF9uZXQubG9vcGJhY2tfZGV2KTsKKyAgICNlbmRpZgorIH0KKyAKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzY3MS1uZXQtcHJvdmlkZS1kZWZpbmVzLWZvci1fUE9MSUNZX0ZBSUxFRC11bnRpbC1hbGwtY29kLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNjcxLW5ldC1wcm92aWRlLWRlZmluZXMtZm9yLV9QT0xJQ1lfRkFJTEVELXVudGlsLWFsbC1jb2QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkyZDhlYwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzY3MS1uZXQtcHJvdmlkZS1kZWZpbmVzLWZvci1fUE9MSUNZX0ZBSUxFRC11bnRpbC1hbGwtY29kLnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK0Zyb206IEpvbmFzIEdvcnNraSA8am9nb0BvcGVud3J0Lm9yZz4KK1N1YmplY3Q6IG5ldDogcHJvdmlkZSBkZWZpbmVzIGZvciBfUE9MSUNZX0ZBSUxFRCB1bnRpbCBhbGwgY29kZSBpcyB1cGRhdGVkCisKK1Vwc3RyZWFtIGludHJvZHVjZWQgSUNNUFY2X1BPTElDWV9GQUlMIGZvciBjb2RlIDUgb2YgZGVzdGluYXRpb24KK3VucmVhY2hhYmxlLCBjb25mbGljdGluZyB3aXRoIG91ciBuYW1lLgorCitBZGQgYXBwcm9wcmlhdGUgZGVmaW5lcyB0byBhbGxvdyBvdXIgY29kZSB0byBidWlsZCB3aXRoIHRoZSBuZXcKK25hbWUgdW50aWwgd2UgaGF2ZSB1cGRhdGVkIG91ciBsb2NhbCBwYXRjaGVzIGZvciBvbGRlciBrZXJuZWxzCithbmQgdXNlcnNwYWNlIHBhY2thZ2VzLgorCitTaWduZWQtb2ZmLWJ5OiBKb25hcyBHb3Jza2kgPGpvZ29Ab3BlbndydC5vcmc+CistLS0KKyBpbmNsdWRlL3VhcGkvbGludXgvZmliX3J1bGVzLmggfCAyICsrCisgaW5jbHVkZS91YXBpL2xpbnV4L2ljbXB2Ni5oICAgIHwgMiArKworIGluY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaCB8IDIgKysKKyAzIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKQorCistLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvZmliX3J1bGVzLmgKKysrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9maWJfcnVsZXMuaAorQEAgLTg5LDYgKzg5LDggQEAgZW51bSB7CisgCV9fRlJfQUNUX01BWCwKKyB9OworIAorKyNkZWZpbmUgRlJfQUNUX0ZBSUxFRF9QT0xJQ1kgRlJfQUNUX1BPTElDWV9GQUlMRUQKKysKKyAjZGVmaW5lIEZSX0FDVF9NQVggKF9fRlJfQUNUX01BWCAtIDEpCisgCisgI2VuZGlmCistLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvaWNtcHY2LmgKKysrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9pY21wdjYuaAorQEAgLTEyNSw2ICsxMjUsOCBAQCBzdHJ1Y3QgaWNtcDZoZHIgeworICNkZWZpbmUgSUNNUFY2X1BPTElDWV9GQUlMCQk1CisgI2RlZmluZSBJQ01QVjZfUkVKRUNUX1JPVVRFCQk2CisgCisrI2RlZmluZSBJQ01QVjZfRkFJTEVEX1BPTElDWQkJSUNNUFY2X1BPTElDWV9GQUlMCisrCisgLyoKKyAgKglDb2RlcyBmb3IgVGltZSBFeGNlZWRlZAorICAqLworLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oCisrKysgYi9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgKK0BAIC0yMzksNiArMjM5LDggQEAgZW51bSB7CisgCV9fUlROX01BWAorIH07CisgCisrI2RlZmluZSBSVE5fRkFJTEVEX1BPTElDWSBSVE5fUE9MSUNZX0ZBSUxFRAorKworICNkZWZpbmUgUlROX01BWCAoX19SVE5fTUFYIC0gMSkKKyAKKyAKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzY4MC1ORVQtc2tpcC1HUk8tZm9yLWZvcmVpZ24tTUFDLWFkZHJlc3Nlcy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzY4MC1ORVQtc2tpcC1HUk8tZm9yLWZvcmVpZ24tTUFDLWFkZHJlc3Nlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Nzk1YTk5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNjgwLU5FVC1za2lwLUdSTy1mb3ItZm9yZWlnbi1NQUMtYWRkcmVzc2VzLnBhdGNoCkBAIC0wLDAgKzEsMTQ5IEBACitGcm9tOiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CitTdWJqZWN0OiBuZXQ6IHJlcGxhY2UgR1JPIG9wdGltaXphdGlvbiBwYXRjaCB3aXRoIGEgbmV3IG9uZSB0aGF0IHN1cHBvcnRzIFZMQU5zL2JyaWRnZXMgd2l0aCBkaWZmZXJlbnQgTUFDIGFkZHJlc3NlcworCitTaWduZWQtb2ZmLWJ5OiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CistLS0KKyBpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIHwgIDIgKysKKyBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oICAgIHwgIDMgKystCisgbmV0L2NvcmUvZGV2LmMgICAgICAgICAgICB8IDQ4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgbmV0L2V0aGVybmV0L2V0aC5jICAgICAgICB8IDE4ICsrKysrKysrKysrKysrKysrLQorIDQgZmlsZXMgY2hhbmdlZCwgNjkgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAorKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAorQEAgLTE5MjcsNiArMTkyNyw4IEBAIHN0cnVjdCBuZXRfZGV2aWNlIHsKKyAJc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QJbWM7CisgCXN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0CWRldl9hZGRyczsKKyAKKysJdW5zaWduZWQgY2hhcgkJbG9jYWxfYWRkcl9tYXNrW01BWF9BRERSX0xFTl07CisrCisgI2lmZGVmIENPTkZJR19TWVNGUworIAlzdHJ1Y3Qga3NldAkJKnF1ZXVlc19rc2V0OworICNlbmRpZgorLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaAorKysrIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaAorQEAgLTgyNCw2ICs4MjQsNyBAQCBzdHJ1Y3Qgc2tfYnVmZiB7CisgI2lmZGVmIENPTkZJR19UTFNfREVWSUNFCisgCV9fdTgJCQlkZWNyeXB0ZWQ6MTsKKyAjZW5kaWYKKysJX191OAkJCWdyb19za2lwOjE7CisgCisgI2lmZGVmIENPTkZJR19ORVRfU0NIRUQKKyAJX191MTYJCQl0Y19pbmRleDsJLyogdHJhZmZpYyBjb250cm9sIGluZGV4ICovCistLS0gYS9uZXQvY29yZS9kZXYuYworKysrIGIvbmV0L2NvcmUvZGV2LmMKK0BAIC01NTQxLDYgKzU1NDEsOSBAQCBzdGF0aWMgZW51bSBncm9fcmVzdWx0IGRldl9ncm9fcmVjZWl2ZShzCisgCWludCBzYW1lX2Zsb3c7CisgCWludCBncm93OworIAorKwlpZiAoc2tiLT5ncm9fc2tpcCkKKysJCWdvdG8gbm9ybWFsOworKworIAlpZiAobmV0aWZfZWxpZGVfZ3JvKHNrYi0+ZGV2KSkKKyAJCWdvdG8gbm9ybWFsOworIAorQEAgLTc0ODQsNiArNzQ4Nyw0OCBAQCBzdGF0aWMgdm9pZCBfX25ldGRldl9hZGphY2VudF9kZXZfdW5saW5rCisgCQkJCQkgICAmdXBwZXJfZGV2LT5hZGpfbGlzdC5sb3dlcik7CisgfQorIAorK3N0YXRpYyB2b2lkIF9fbmV0ZGV2X2FkZHJfbWFzayh1bnNpZ25lZCBjaGFyICptYXNrLCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLAorKwkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorK3sKKysJaW50IGk7CisrCisrCWZvciAoaSA9IDA7IGkgPCBkZXYtPmFkZHJfbGVuOyBpKyspCisrCQltYXNrW2ldIHw9IGFkZHJbaV0gXiBkZXYtPmRldl9hZGRyW2ldOworK30KKysKKytzdGF0aWMgdm9pZCBfX25ldGRldl91cHBlcl9tYXNrKHVuc2lnbmVkIGNoYXIgKm1hc2ssIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisrCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpsb3dlcikKKyt7CisrCXN0cnVjdCBuZXRfZGV2aWNlICpjdXI7CisrCXN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7CisrCisrCW5ldGRldl9mb3JfZWFjaF91cHBlcl9kZXZfcmN1KGRldiwgY3VyLCBpdGVyKSB7CisrCQlfX25ldGRldl9hZGRyX21hc2sobWFzaywgY3VyLT5kZXZfYWRkciwgbG93ZXIpOworKwkJX19uZXRkZXZfdXBwZXJfbWFzayhtYXNrLCBjdXIsIGxvd2VyKTsKKysJfQorK30KKysKKytzdGF0aWMgdm9pZCBfX25ldGRldl91cGRhdGVfYWRkcl9tYXNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCisreworKwl1bnNpZ25lZCBjaGFyIG1hc2tbTUFYX0FERFJfTEVOXTsKKysJc3RydWN0IG5ldF9kZXZpY2UgKmN1cjsKKysJc3RydWN0IGxpc3RfaGVhZCAqaXRlcjsKKysKKysJbWVtc2V0KG1hc2ssIDAsIHNpemVvZihtYXNrKSk7CisrCV9fbmV0ZGV2X3VwcGVyX21hc2sobWFzaywgZGV2LCBkZXYpOworKwltZW1jcHkoZGV2LT5sb2NhbF9hZGRyX21hc2ssIG1hc2ssIGRldi0+YWRkcl9sZW4pOworKworKwluZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KGRldiwgY3VyLCBpdGVyKQorKwkJX19uZXRkZXZfdXBkYXRlX2FkZHJfbWFzayhjdXIpOworK30KKysKKytzdGF0aWMgdm9pZCBuZXRkZXZfdXBkYXRlX2FkZHJfbWFzayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorK3sKKysJcmN1X3JlYWRfbG9jaygpOworKwlfX25ldGRldl91cGRhdGVfYWRkcl9tYXNrKGRldik7CisrCXJjdV9yZWFkX3VubG9jaygpOworK30KKysKKyBzdGF0aWMgaW50IF9fbmV0ZGV2X3VwcGVyX2Rldl9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICp1cHBlcl9kZXYsIGJvb2wgbWFzdGVyLAorIAkJCQkgICB2b2lkICp1cHBlcl9wcml2LCB2b2lkICp1cHBlcl9pbmZvLAorQEAgLTc1MzQsNiArNzU3OSw3IEBAIHN0YXRpYyBpbnQgX19uZXRkZXZfdXBwZXJfZGV2X2xpbmsoc3RydWMKKyAJaWYgKHJldCkKKyAJCXJldHVybiByZXQ7CisgCisrCW5ldGRldl91cGRhdGVfYWRkcl9tYXNrKGRldik7CisgCXJldCA9IGNhbGxfbmV0ZGV2aWNlX25vdGlmaWVyc19pbmZvKE5FVERFVl9DSEFOR0VVUFBFUiwKKyAJCQkJCSAgICAmY2hhbmdldXBwZXJfaW5mby5pbmZvKTsKKyAJcmV0ID0gbm90aWZpZXJfdG9fZXJybm8ocmV0KTsKK0BAIC03NjI3LDYgKzc2NzMsNyBAQCB2b2lkIG5ldGRldl91cHBlcl9kZXZfdW5saW5rKHN0cnVjdCBuZXRfCisgCisgCV9fbmV0ZGV2X2FkamFjZW50X2Rldl91bmxpbmtfbmVpZ2hib3VyKGRldiwgdXBwZXJfZGV2KTsKKyAKKysJbmV0ZGV2X3VwZGF0ZV9hZGRyX21hc2soZGV2KTsKKyAJY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzX2luZm8oTkVUREVWX0NIQU5HRVVQUEVSLAorIAkJCQkgICAgICAmY2hhbmdldXBwZXJfaW5mby5pbmZvKTsKKyAKK0BAIC04MzU3LDYgKzg0MDQsNyBAQCBpbnQgZGV2X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljCisgCWlmIChlcnIpCisgCQlyZXR1cm4gZXJyOworIAlkZXYtPmFkZHJfYXNzaWduX3R5cGUgPSBORVRfQUREUl9TRVQ7CisrCW5ldGRldl91cGRhdGVfYWRkcl9tYXNrKGRldik7CisgCWNhbGxfbmV0ZGV2aWNlX25vdGlmaWVycyhORVRERVZfQ0hBTkdFQUREUiwgZGV2KTsKKyAJYWRkX2RldmljZV9yYW5kb21uZXNzKGRldi0+ZGV2X2FkZHIsIGRldi0+YWRkcl9sZW4pOworIAlyZXR1cm4gMDsKKy0tLSBhL25ldC9ldGhlcm5ldC9ldGguYworKysrIGIvbmV0L2V0aGVybmV0L2V0aC5jCitAQCAtMTQzLDYgKzE0MywxOCBAQCB1MzIgZXRoX2dldF9oZWFkbGVuKGNvbnN0IHN0cnVjdCBuZXRfZGV2CisgfQorIEVYUE9SVF9TWU1CT0woZXRoX2dldF9oZWFkbGVuKTsKKyAKKytzdGF0aWMgaW5saW5lIGJvb2wKKytldGhfY2hlY2tfbG9jYWxfbWFzayhjb25zdCB2b2lkICphZGRyMSwgY29uc3Qgdm9pZCAqYWRkcjIsIGNvbnN0IHZvaWQgKm1hc2spCisreworKwljb25zdCB1MTYgKmExID0gYWRkcjE7CisrCWNvbnN0IHUxNiAqYTIgPSBhZGRyMjsKKysJY29uc3QgdTE2ICptID0gbWFzazsKKysKKysJcmV0dXJuICgoKGExWzBdIF4gYTJbMF0pICYgfm1bMF0pIHwKKysJCSgoYTFbMV0gXiBhMlsxXSkgJiB+bVsxXSkgfAorKwkJKChhMVsyXSBeIGEyWzJdKSAmIH5tWzJdKSk7CisrfQorKworIC8qKgorICAqIGV0aF90eXBlX3RyYW5zIC0gZGV0ZXJtaW5lIHRoZSBwYWNrZXQncyBwcm90b2NvbCBJRC4KKyAgKiBAc2tiOiByZWNlaXZlZCBzb2NrZXQgZGF0YQorQEAgLTE3NCw2ICsxODYsMTAgQEAgX19iZTE2IGV0aF90eXBlX3RyYW5zKHN0cnVjdCBza19idWZmICpzaworIAkJfSBlbHNlIHsKKyAJCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX09USEVSSE9TVDsKKyAJCX0KKysKKysJCWlmIChldGhfY2hlY2tfbG9jYWxfbWFzayhldGgtPmhfZGVzdCwgZGV2LT5kZXZfYWRkciwKKysJCQkJCSBkZXYtPmxvY2FsX2FkZHJfbWFzaykpCisrCQkJc2tiLT5ncm9fc2tpcCA9IDE7CisgCX0KKyAKKyAJLyoKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzY4MS1ORVQtYWRkLW9mX2dldF9tYWNfYWRkcmVzc19tdGQucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC82ODEtTkVULWFkZC1vZl9nZXRfbWFjX2FkZHJlc3NfbXRkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMmZlYmUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC82ODEtTkVULWFkZC1vZl9nZXRfbWFjX2FkZHJlc3NfbXRkLnBhdGNoCkBAIC0wLDAgKzEsMTM1IEBACitGcm9tOiBKb2huIENyaXNwaW4gPGJsb2dpY0BvcGVud3J0Lm9yZz4KK1N1YmplY3Q6IE5FVDogYWRkIG10ZC1tYWMtYWRkcmVzcyBzdXBwb3J0IHRvIG9mX2dldF9tYWNfYWRkcmVzcygpCisKK01hbnkgZW1iZWRkZWQgZGV2aWNlcyBoYXZlIGluZm9ybWF0aW9uIHN1Y2ggYXMgbWFjIGFkZHJlc3NlcyBzdG9yZWQgaW5zaWRlIG10ZAorZGV2aWNlcy4gVGhpcyBwYXRjaCBhbGxvd3MgdXMgdG8gYWRkIGEgcHJvcGVydHkgaW5zaWRlIGEgbm9kZSBkZXNjcmliaW5nIGEKK25ldHdvcmsgaW50ZXJmYWNlLiBUaGUgbmV3IHByb3BlcnR5IHBvaW50cyBhdCBhIG10ZCBwYXJ0aXRpb24gd2l0aCBhbiBvZmZzZXQKK3doZXJlIHRoZSBtYWMgYWRkcmVzcyBjYW4gYmUgZm91bmQuCisKK1NpZ25lZC1vZmYtYnk6IEpvaG4gQ3Jpc3BpbiA8YmxvZ2ljQG9wZW53cnQub3JnPgorU2lnbmVkLW9mZi1ieTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorLS0tCisgZHJpdmVycy9vZi9vZl9uZXQuYyAgICB8ICAgMzcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIGluY2x1ZGUvbGludXgvb2ZfbmV0LmggfCAgICAxICsKKyAyIGZpbGVzIGNoYW5nZWQsIDM4IGluc2VydGlvbnMoKykKKworLS0tIGEvZHJpdmVycy9vZi9vZl9uZXQuYworKysrIGIvZHJpdmVycy9vZi9vZl9uZXQuYworQEAgLTExLDYgKzExLDcgQEAKKyAjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisgI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgorICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKysjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorIAorIC8qKgorICAqIG9mX2dldF9waHlfbW9kZSAtIEdldCBwaHkgbW9kZSBmb3IgZ2l2ZW4gZGV2aWNlX25vZGUKK0BAIC0zOSw3ICs0MCw3IEBAIGludCBvZl9nZXRfcGh5X21vZGUoc3RydWN0IGRldmljZV9ub2RlICoKKyB9CisgRVhQT1JUX1NZTUJPTF9HUEwob2ZfZ2V0X3BoeV9tb2RlKTsKKyAKKy1zdGF0aWMgY29uc3Qgdm9pZCAqb2ZfZ2V0X21hY19hZGRyKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGNvbnN0IGNoYXIgKm5hbWUpCisrc3RhdGljIHZvaWQgKm9mX2dldF9tYWNfYWRkcihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBjb25zdCBjaGFyICpuYW1lKQorIHsKKyAJc3RydWN0IHByb3BlcnR5ICpwcCA9IG9mX2ZpbmRfcHJvcGVydHkobnAsIG5hbWUsIE5VTEwpOworIAorQEAgLTcyLDYgKzczLDc5IEBAIHN0YXRpYyBjb25zdCB2b2lkICpvZl9nZXRfbWFjX2FkZHJfbnZtZW0KKyAJcmV0dXJuIG1hYzsKKyB9CisgCisrc3RhdGljIGNvbnN0IHZvaWQgKm9mX2dldF9tYWNfYWRkcmVzc19tdGQoc3RydWN0IGRldmljZV9ub2RlICpucCkKKyt7CisrI2lmZGVmIENPTkZJR19NVEQKKysJc3RydWN0IGRldmljZV9ub2RlICptdGRfbnAgPSBOVUxMOworKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisrCXNpemVfdCByZXRsZW47CisrCWludCBzaXplLCByZXQ7CisrCXN0cnVjdCBtdGRfaW5mbyAqbXRkOworKwljb25zdCBjaGFyICpwYXJ0OworKwljb25zdCBfX2JlMzIgKmxpc3Q7CisrCXBoYW5kbGUgcGhhbmRsZTsKKysJdTMyIG1hY19pbmMgPSAwOworKwl1OCBtYWNbRVRIX0FMRU5dOworKwl2b2lkICphZGRyOworKwl1MzIgaW5jX2lkeDsKKysKKysJbGlzdCA9IG9mX2dldF9wcm9wZXJ0eShucCwgIm10ZC1tYWMtYWRkcmVzcyIsICZzaXplKTsKKysJaWYgKCFsaXN0IHx8IChzaXplICE9ICgyICogc2l6ZW9mKCpsaXN0KSkpKQorKwkJcmV0dXJuIE5VTEw7CisrCisrCXBoYW5kbGUgPSBiZTMyX3RvX2NwdXAobGlzdCsrKTsKKysJaWYgKHBoYW5kbGUpCisrCQltdGRfbnAgPSBvZl9maW5kX25vZGVfYnlfcGhhbmRsZShwaGFuZGxlKTsKKysKKysJaWYgKCFtdGRfbnApCisrCQlyZXR1cm4gTlVMTDsKKysKKysJcGFydCA9IG9mX2dldF9wcm9wZXJ0eShtdGRfbnAsICJsYWJlbCIsIE5VTEwpOworKwlpZiAoIXBhcnQpCisrCQlwYXJ0ID0gbXRkX25wLT5uYW1lOworKworKwltdGQgPSBnZXRfbXRkX2RldmljZV9ubShwYXJ0KTsKKysJaWYgKElTX0VSUihtdGQpKQorKwkJcmV0dXJuIE5VTEw7CisrCisrCXJldCA9IG10ZF9yZWFkKG10ZCwgYmUzMl90b19jcHVwKGxpc3QpLCA2LCAmcmV0bGVuLCBtYWMpOworKwlwdXRfbXRkX2RldmljZShtdGQpOworKworKwlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJtdGQtbWFjLWFkZHJlc3MtaW5jcmVtZW50LWJ5dGUiLCAmaW5jX2lkeCkpCisrCQlpbmNfaWR4ID0gNTsKKysJaWYgKGluY19pZHggPiA1KQorKwkJcmV0dXJuIE5VTEw7CisrCisrCWlmICghb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJtdGQtbWFjLWFkZHJlc3MtaW5jcmVtZW50IiwgJm1hY19pbmMpKQorKwkJbWFjW2luY19pZHhdICs9IG1hY19pbmM7CisrCisrCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihtYWMpKQorKwkJcmV0dXJuIE5VTEw7CisrCisrCWFkZHIgPSBvZl9nZXRfbWFjX2FkZHIobnAsICJtYWMtYWRkcmVzcyIpOworKwlpZiAoYWRkcikgeworKwkJbWVtY3B5KGFkZHIsIG1hYywgRVRIX0FMRU4pOworKwkJcmV0dXJuIGFkZHI7CisrCX0KKysKKysJcHJvcCA9IGt6YWxsb2Moc2l6ZW9mKCpwcm9wKSwgR0ZQX0tFUk5FTCk7CisrCWlmICghcHJvcCkKKysJCXJldHVybiBOVUxMOworKworKwlwcm9wLT5uYW1lID0gIm1hYy1hZGRyZXNzIjsKKysJcHJvcC0+bGVuZ3RoID0gRVRIX0FMRU47CisrCXByb3AtPnZhbHVlID0ga21lbWR1cChtYWMsIEVUSF9BTEVOLCBHRlBfS0VSTkVMKTsKKysJaWYgKCFwcm9wLT52YWx1ZSB8fCBvZl9hZGRfcHJvcGVydHkobnAsIHByb3ApKQorKwkJZ290byBmcmVlOworKworKwlyZXR1cm4gcHJvcC0+dmFsdWU7CisrZnJlZToKKysJa2ZyZWUocHJvcC0+dmFsdWUpOworKwlrZnJlZShwcm9wKTsKKysjZW5kaWYKKysJcmV0dXJuIE5VTEw7CisrfQorKworIC8qKgorICAqIFNlYXJjaCB0aGUgZGV2aWNlIHRyZWUgZm9yIHRoZSBiZXN0IE1BQyBhZGRyZXNzIHRvIHVzZS4gICdtYWMtYWRkcmVzcycgaXMKKyAgKiBjaGVja2VkIGZpcnN0LCBiZWNhdXNlIHRoYXQgaXMgc3VwcG9zZWQgdG8gY29udGFpbiB0byAibW9zdCByZWNlbnQiIE1BQworQEAgLTkyLDEyICsxNjYsMjAgQEAgc3RhdGljIGNvbnN0IHZvaWQgKm9mX2dldF9tYWNfYWRkcl9udm1lbQorICAqIHRoaXMgY2FzZSwgdGhlIHJlYWwgTUFDIGlzIGluICdsb2NhbC1tYWMtYWRkcmVzcycsIGFuZCAnbWFjLWFkZHJlc3MnIGV4aXN0cworICAqIGJ1dCBpcyBhbGwgemVyb3MuCisgICoKKysgKgorKyAqIElmIGEgbXRkLW1hYy1hZGRyZXNzIHByb3BlcnR5IGV4aXN0cywgdHJ5IHRvIGZldGNoIHRoZSBNQUMgYWRkcmVzcyBmcm9tIHRoZQorKyAqIHNwZWNpZmllZCBtdGQgZGV2aWNlLCBhbmQgc3RvcmUgaXQgYXMgYSAnbWFjLWFkZHJlc3MnIHByb3BlcnR5CisrICoKKyAgKiBSZXR1cm46IFdpbGwgYmUgYSB2YWxpZCBwb2ludGVyIG9uIHN1Y2Nlc3MgYW5kIEVSUl9QVFIgaW4gY2FzZSBvZiBlcnJvci4KKyAqLworIGNvbnN0IHZvaWQgKm9mX2dldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQorIHsKKyAJY29uc3Qgdm9pZCAqYWRkcjsKKyAKKysJYWRkciA9IG9mX2dldF9tYWNfYWRkcmVzc19tdGQobnApOworKwlpZiAoYWRkcikKKysJCXJldHVybiBhZGRyOworKworIAlhZGRyID0gb2ZfZ2V0X21hY19hZGRyKG5wLCAibWFjLWFkZHJlc3MiKTsKKyAJaWYgKGFkZHIpCisgCQlyZXR1cm4gYWRkcjsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzcwMy1waHktYWRkLWRldGFjaC1jYWxsYmFjay10by1zdHJ1Y3QtcGh5X2RyaXZlci5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzcwMy1waHktYWRkLWRldGFjaC1jYWxsYmFjay10by1zdHJ1Y3QtcGh5X2RyaXZlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzRiMDRjCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzAzLXBoeS1hZGQtZGV0YWNoLWNhbGxiYWNrLXRvLXN0cnVjdC1waHlfZHJpdmVyLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Zyb206IEdhYm9yIEp1aG9zIDxqdWhvc2dAb3BlbndydC5vcmc+CitTdWJqZWN0OiBnZW5lcmljOiBhZGQgZGV0YWNoIGNhbGxiYWNrIHRvIHN0cnVjdCBwaHlfZHJpdmVyCisKK2xlZGUtY29tbWl0OiBmZTYxZmMyZDdkMGIzZmIzNDhiNTAyZjY4Zjk4MjQzYjNkZGY1ODY3CisKK1NpZ25lZC1vZmYtYnk6IEdhYm9yIEp1aG9zIDxqdWhvc2dAb3BlbndydC5vcmc+CistLS0KKyBkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIHwgMyArKysKKyBpbmNsdWRlL2xpbnV4L3BoeS5oICAgICAgICAgIHwgNiArKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorCistLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCisrKysgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCitAQCAtMTQ2NSw2ICsxNDY1LDkgQEAgdm9pZCBwaHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZQorIAlzdHJ1Y3QgbW9kdWxlICpuZGV2X293bmVyID0gTlVMTDsKKyAJc3RydWN0IG1paV9idXMgKmJ1czsKKyAKKysJaWYgKHBoeWRldi0+ZHJ2ICYmIHBoeWRldi0+ZHJ2LT5kZXRhY2gpCisrCQlwaHlkZXYtPmRydi0+ZGV0YWNoKHBoeWRldik7CisrCisgCWlmIChwaHlkZXYtPnN5c2ZzX2xpbmtzKSB7CisgCQlpZiAoZGV2KQorIAkJCXN5c2ZzX3JlbW92ZV9saW5rKCZkZXYtPmRldi5rb2JqLCAicGh5ZGV2Iik7CistLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oCisrKysgYi9pbmNsdWRlL2xpbnV4L3BoeS5oCitAQCAtNTQwLDYgKzU0MCwxMiBAQCBzdHJ1Y3QgcGh5X2RyaXZlciB7CisgCS8qIE92ZXJyaWRlIGRlZmF1bHQgaW50ZXJydXB0IGhhbmRsaW5nICovCisgCWludCAoKmhhbmRsZV9pbnRlcnJ1cHQpKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOworIAorKwkvKgorKwkgKiBDYWxsZWQgYmVmb3JlIGFuIGV0aGVybmV0IGRldmljZSBpcyBkZXRhY2hlZAorKwkgKiBmcm9tIHRoZSBQSFkuCisrCSAqLworKwl2b2lkICgqZGV0YWNoKShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKKysKKyAJLyogQ2xlYXJzIHVwIGFueSBtZW1vcnkgaWYgbmVlZGVkICovCisgCXZvaWQgKCpyZW1vdmUpKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOworIApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzM1LW5ldC1waHktYXQ4MDN4LWZpeC1hdDgwMzMtc2dtaWktbW9kZS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzczNS1uZXQtcGh5LWF0ODAzeC1maXgtYXQ4MDMzLXNnbWlpLW1vZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk1NzQzMAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzczNS1uZXQtcGh5LWF0ODAzeC1maXgtYXQ4MDMzLXNnbWlpLW1vZGUucGF0Y2gKQEAgLTAsMCArMSw1MSBAQAorRnJvbTogUm9tYW4gWWVyeW9taW4gPHJvbWFuQGFkdmVtLmx2PgorU3ViamVjdDoga2VybmVsOiBhZGQgYXQ4MDN4IGZpeCBmb3Igc2dtaWkgbW9kZQorCitTb21lIChwb3NzaWJseSBicm9rZW4pIGJvb3Rsb2FkZXJzIGluY29ycmVjbHR5IGluaXRpYWxpemUgYXQ4MDMzCitwaHkuIFRoaXMgcGF0Y2ggZW5hYmxlcyBzZ21paSBhdXRvbmVnb3RpYXRpb24gbW9kZS4KKworW2pvaG5AcGhyb3plbi5vcmc6IGZlbGl4IGFkZGVkIHRoaXMgdG8gaGlzIHVwc3RyZWFtIHF1ZXVlXQorCitTaWduZWQtb2ZmLWJ5OiBSb21hbiBZZXJ5b21pbiA8cm9tYW5AYWR2ZW0ubHY+CistLS0KKyBkcml2ZXJzL25ldC9waHkvYXQ4MDN4LmMgfCAyNSArKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDI1IGluc2VydGlvbnMoKykKKworLS0tIGEvZHJpdmVycy9uZXQvcGh5L2F0ODAzeC5jCisrKysgYi9kcml2ZXJzL25ldC9waHkvYXQ4MDN4LmMKK0BAIC00Niw2ICs0Niw3IEBACisgI2RlZmluZSBBVDgwM1hfTE9DX01BQ19BRERSXzMyXzQ3X09GRlNFVAkweDgwNEEKKyAjZGVmaW5lIEFUODAzWF9SRUdfQ0hJUF9DT05GSUcJCQkweDFmCisgI2RlZmluZSBBVDgwM1hfQlRfQlhfUkVHX1NFTAkJCTB4ODAwMAorKyNkZWZpbmUgQVQ4MDNYX1NHTUlJX0FORUdfRU4JCQkweDEwMDAKKyAKKyAjZGVmaW5lIEFUODAzWF9ERUJVR19BRERSCQkJMHgxRAorICNkZWZpbmUgQVQ4MDNYX0RFQlVHX0RBVEEJCQkweDFFCitAQCAtMjU5LDYgKzI2MCwyNyBAQCBzdGF0aWMgaW50IGF0ODAzeF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljCisgc3RhdGljIGludCBhdDgwM3hfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKKyB7CisgCWludCByZXQ7CisrCXUzMiB2OworKworKwlpZiAocGh5ZGV2LT5kcnYtPnBoeV9pZCA9PSBBVEg4MDMxX1BIWV9JRCAmJgorKwkJcGh5ZGV2LT5pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKQorKwl7CisrCQl2ID0gcGh5X3JlYWQocGh5ZGV2LCBBVDgwM1hfUkVHX0NISVBfQ09ORklHKTsKKysJCS8qIHNlbGVjdCBTR01JSS9maWJlciBwYWdlICovCisrCQlyZXQgPSBwaHlfd3JpdGUocGh5ZGV2LCBBVDgwM1hfUkVHX0NISVBfQ09ORklHLAorKwkJCQkJCXYgJiB+QVQ4MDNYX0JUX0JYX1JFR19TRUwpOworKwkJaWYgKHJldCkKKysJCQlyZXR1cm4gcmV0OworKwkJLyogZW5hYmxlIFNHTUlJIGF1dG9uZWdvdGlhdGlvbiAqLworKwkJcmV0ID0gcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIEFUODAzWF9TR01JSV9BTkVHX0VOKTsKKysJCWlmIChyZXQpCisrCQkJcmV0dXJuIHJldDsKKysJCS8qIHNlbGVjdCBjb3BwZXIgcGFnZSAqLworKwkJcmV0ID0gcGh5X3dyaXRlKHBoeWRldiwgQVQ4MDNYX1JFR19DSElQX0NPTkZJRywKKysJCQkJCQl2IHwgQVQ4MDNYX0JUX0JYX1JFR19TRUwpOworKwkJaWYgKHJldCkKKysJCQlyZXR1cm4gcmV0OworKwl9CisgCisgCS8qIFRoZSBSWCBhbmQgVFggZGVsYXkgZGVmYXVsdCBpczoKKyAJICogICBhZnRlciBIVyByZXNldDogUlggZGVsYXkgZW5hYmxlZCBhbmQgVFggZGVsYXkgZGlzYWJsZWQKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzczOS1uZXQtYXZvaWQtdHgtZmF1bHQtd2l0aC1Ob2tpYS1HUE9OLW1vZHVsZS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzczOS1uZXQtYXZvaWQtdHgtZmF1bHQtd2l0aC1Ob2tpYS1HUE9OLW1vZHVsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjQ4ZDEwCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzM5LW5ldC1hdm9pZC10eC1mYXVsdC13aXRoLU5va2lhLUdQT04tbW9kdWxlLnBhdGNoCkBAIC0wLDAgKzEsMTA4IEBACitGcm9tIDI4M2IyMTFhYTAxYmRhZTk0ZGZmYjMxMjE2NTVkYmIyMGJmMjM3ZjQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorRGF0ZTogVHVlLCAzIERlYyAyMDE5IDE1OjIyOjA1ICswMDAwCitTdWJqZWN0OiBuZXQ6IHNmcDogYXZvaWQgdHgtZmF1bHQgd2l0aCBOb2tpYSBHUE9OIG1vZHVsZQorCitUaGUgTm9raWEgR1BPTiBtb2R1bGUgY2FuIGhvbGQgdHgtZmF1bHQgYWN0aXZlIHdoaWxlIGl0IGlzIGluaXRpYWxpc2luZword2hpY2ggY2FuIHRha2UgdXAgdG8gNjBzLiBBdm9pZCB0aGlzIGNhdXNpbmcgdGhlIG1vZHVsZSB0byBiZSBkZWNsYXJlZAorZmF1bHR5IGFmdGVyIHRoZSBTRlAgTVNBIGRlZmluZWQgbm9uLWNvb2xlZCBtb2R1bGUgdGltZW91dC4KKworU2lnbmVkLW9mZi1ieTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KKy0tLQorIGRyaXZlcnMvbmV0L3BoeS9zZnAuYyB8IDQyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzMCBpbnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9uZXQvcGh5L3NmcC5jCisrKysgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmMKK0BAIC0xNTUsMTAgKzE1NSwyMCBAQCBzdGF0aWMgY29uc3QgZW51bSBncGlvZF9mbGFncyBncGlvX2ZsYWdzCisgCUdQSU9EX0FTSVMsCisgfTsKKyAKKy0jZGVmaW5lIFRfV0FJVAkJbXNlY3NfdG9famlmZmllcyg1MCkKKy0jZGVmaW5lIFRfSU5JVF9KSUZGSUVTCW1zZWNzX3RvX2ppZmZpZXMoMzAwKQorLSNkZWZpbmUgVF9SRVNFVF9VUwkxMAorLSNkZWZpbmUgVF9GQVVMVF9SRUNPVkVSCW1zZWNzX3RvX2ppZmZpZXMoMTAwMCkKKysvKiB0X3N0YXJ0X3VwIChTRkYtODQzMSkgb3IgdF9pbml0IChTRkYtODQ3MikgaXMgdGhlIHRpbWUgcmVxdWlyZWQgZm9yIGEKKysgKiBub24tY29vbGVkIG1vZHVsZSB0byBpbml0aWFsaXNlIGl0cyBsYXNlciBzYWZldHkgY2lyY3VpdHJ5LiBXZSB3YWl0CisrICogYW4gaW5pdGlhbCBUX1dBSVQgcGVyaW9kIGJlZm9yZSB3ZSBjaGVjayB0aGUgdHggZmF1bHQgdG8gZ2l2ZSBhbnkgUEhZCisrICogb24gYm9hcmQgKGZvciBhIGNvcHBlciBTRlApIHRpbWUgdG8gaW5pdGlhbGlzZS4KKysgKi8KKysjZGVmaW5lIFRfV0FJVAkJCW1zZWNzX3RvX2ppZmZpZXMoNTApCisrI2RlZmluZSBUX1NUQVJUX1VQCQltc2Vjc190b19qaWZmaWVzKDMwMCkKKysjZGVmaW5lIFRfU1RBUlRfVVBfQkFEX0dQT04JbXNlY3NfdG9famlmZmllcyg2MDAwMCkKKysKKysvKiB0X3Jlc2V0IGlzIHRoZSB0aW1lIHJlcXVpcmVkIHRvIGFzc2VydCB0aGUgVFhfRElTQUJMRSBzaWduYWwgdG8gcmVzZXQKKysgKiBhbiBpbmRpY2F0ZWQgVFhfRkFVTFQuCisrICovCisrI2RlZmluZSBUX1JFU0VUX1VTCQkxMAorKyNkZWZpbmUgVF9GQVVMVF9SRUNPVkVSCQltc2Vjc190b19qaWZmaWVzKDEwMDApCisgCisgLyogU0ZQIG1vZHVsZSBwcmVzZW5jZSBkZXRlY3Rpb24gaXMgcG9vcjogdGhlIHRocmVlIE1PRCBERUYgc2lnbmFscyBhcmUKKyAgKiB0aGUgc2FtZSBsZW5ndGggb24gdGhlIFBDQiwgd2hpY2ggbWVhbnMgaXQncyBwb3NzaWJsZSBmb3IgTU9EIERFRiAwIHRvCitAQCAtMjE5LDYgKzIyOSw3IEBAIHN0cnVjdCBzZnAgeworIAorIAlzdHJ1Y3Qgc2ZwX2VlcHJvbV9pZCBpZDsKKyAJdW5zaWduZWQgaW50IG1vZHVsZV9wb3dlcl9tVzsKKysJdW5zaWduZWQgaW50IG1vZHVsZV90X3N0YXJ0X3VwOworIAorICNpZiBJU19FTkFCTEVEKENPTkZJR19IV01PTikKKyAJc3RydWN0IHNmcF9kaWFnIGRpYWc7CitAQCAtMTc0Miw2ICsxNzUzLDEyIEBAIHN0YXRpYyBpbnQgc2ZwX3NtX21vZF9wcm9iZShzdHJ1Y3Qgc2ZwICoKKyAJaWYgKHJldCA8IDApCisgCQlyZXR1cm4gcmV0OworIAorKwlpZiAoIW1lbWNtcChpZC5iYXNlLnZlbmRvcl9uYW1lLCAiQUxDQVRFTExVQ0VOVCAgICIsIDE2KSAmJgorKwkgICAgIW1lbWNtcChpZC5iYXNlLnZlbmRvcl9wbiwgIjNGRTQ2NTQxQUEgICAgICAiLCAxNikpCisrCQlzZnAtPm1vZHVsZV90X3N0YXJ0X3VwID0gVF9TVEFSVF9VUF9CQURfR1BPTjsKKysJZWxzZQorKwkJc2ZwLT5tb2R1bGVfdF9zdGFydF91cCA9IFRfU1RBUlRfVVA7CisrCisgCXJldHVybiAwOworIH0KKyAKK0BAIC0xOTQ3LDExICsxOTY0LDEyIEBAIHN0YXRpYyB2b2lkIHNmcF9zbV9tYWluKHN0cnVjdCBzZnAgKnNmcCwKKyAJCQlicmVhazsKKyAKKyAJCWlmIChzZnAtPnN0YXRlICYgU0ZQX0ZfVFhfRkFVTFQpIHsKKy0JCQkvKiBXYWl0IHRfaW5pdCBiZWZvcmUgaW5kaWNhdGluZyB0aGF0IHRoZSBsaW5rIGlzIHVwLAorLQkJCSAqIHByb3ZpZGVkIHRoZSBjdXJyZW50IHN0YXRlIGluZGljYXRlcyBubyBUWF9GQVVMVC4gSWYKKy0JCQkgKiBUWF9GQVVMVCBjbGVhcnMgYmVmb3JlIHRoaXMgdGltZSwgdGhhdCdzIGZpbmUgdG9vLgorKwkJCS8qIFdhaXQgdXAgdG8gdF9pbml0IChTRkYtODQ3Mikgb3IgdF9zdGFydF91cCAoU0ZGLTg0MzEpCisrCQkJICogZnJvbSB0aGUgVFhfRElTQUJMRSBkZWFzc2VydGlvbiBmb3IgdGhlIG1vZHVsZSB0bworKwkJCSAqIGluaXRpYWxpc2UsIHdoaWNoIGlzIGluZGljYXRlZCBieSBUWF9GQVVMVAorKwkJCSAqIGRlYXNzZXJ0aW5nLgorIAkJCSAqLworLQkJCXRpbWVvdXQgPSBUX0lOSVRfSklGRklFUzsKKysJCQl0aW1lb3V0ID0gc2ZwLT5tb2R1bGVfdF9zdGFydF91cDsKKyAJCQlpZiAodGltZW91dCA+IFRfV0FJVCkKKyAJCQkJdGltZW91dCAtPSBUX1dBSVQ7CisgCQkJZWxzZQorQEAgLTE5NjgsOCArMTk4Niw4IEBAIHN0YXRpYyB2b2lkIHNmcF9zbV9tYWluKHN0cnVjdCBzZnAgKnNmcCwKKyAKKyAJY2FzZSBTRlBfU19JTklUOgorIAkJaWYgKGV2ZW50ID09IFNGUF9FX1RJTUVPVVQgJiYgc2ZwLT5zdGF0ZSAmIFNGUF9GX1RYX0ZBVUxUKSB7CistCQkJLyogVFhfRkFVTFQgaXMgc3RpbGwgYXNzZXJ0ZWQgYWZ0ZXIgdF9pbml0LCBzbyBhc3N1bWUKKy0JCQkgKiB0aGVyZSBpcyBhIGZhdWx0LgorKwkJCS8qIFRYX0ZBVUxUIGlzIHN0aWxsIGFzc2VydGVkIGFmdGVyIHRfaW5pdCBvcgorKwkJCSAqIG9yIHRfc3RhcnRfdXAsIHNvIGFzc3VtZSB0aGVyZSBpcyBhIGZhdWx0LgorIAkJCSAqLworIAkJCXNmcF9zbV9mYXVsdChzZnAsIFNGUF9TX0lOSVRfVFhfRkFVTFQsCisgCQkJCSAgICAgc2ZwLT5zbV9yZXRyaWVzID09IDUpOworQEAgLTE5ODgsNyArMjAwNiw3IEBAIHN0YXRpYyB2b2lkIHNmcF9zbV9tYWluKHN0cnVjdCBzZnAgKnNmcCwKKyAJY2FzZSBTRlBfU19JTklUX1RYX0ZBVUxUOgorIAkJaWYgKGV2ZW50ID09IFNGUF9FX1RJTUVPVVQpIHsKKyAJCQlzZnBfbW9kdWxlX3R4X2ZhdWx0X3Jlc2V0KHNmcCk7CistCQkJc2ZwX3NtX25leHQoc2ZwLCBTRlBfU19JTklULCBUX0lOSVRfSklGRklFUyk7CisrCQkJc2ZwX3NtX25leHQoc2ZwLCBTRlBfU19JTklULCBzZnAtPm1vZHVsZV90X3N0YXJ0X3VwKTsKKyAJCX0KKyAJCWJyZWFrOworIAorQEAgLTIwMTIsNyArMjAzMCw3IEBAIHN0YXRpYyB2b2lkIHNmcF9zbV9tYWluKHN0cnVjdCBzZnAgKnNmcCwKKyAJY2FzZSBTRlBfU19UWF9GQVVMVDoKKyAJCWlmIChldmVudCA9PSBTRlBfRV9USU1FT1VUKSB7CisgCQkJc2ZwX21vZHVsZV90eF9mYXVsdF9yZXNldChzZnApOworLQkJCXNmcF9zbV9uZXh0KHNmcCwgU0ZQX1NfUkVJTklULCBUX0lOSVRfSklGRklFUyk7CisrCQkJc2ZwX3NtX25leHQoc2ZwLCBTRlBfU19SRUlOSVQsIHNmcC0+bW9kdWxlX3Rfc3RhcnRfdXApOworIAkJfQorIAkJYnJlYWs7CisgCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC83NDAtbmV0LXNmcC1yZW1vdmUtaW5jb21wbGV0ZS0xMDBCQVNFLUZYLWFuZC0xMDBCQVNFLUxYLS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40Lzc0MC1uZXQtc2ZwLXJlbW92ZS1pbmNvbXBsZXRlLTEwMEJBU0UtRlgtYW5kLTEwMEJBU0UtTFgtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhYmMzNGUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC83NDAtbmV0LXNmcC1yZW1vdmUtaW5jb21wbGV0ZS0xMDBCQVNFLUZYLWFuZC0xMDBCQVNFLUxYLS5wYXRjaApAQCAtMCwwICsxLDUyIEBACitGcm9tIDI5Y2QyMTVhYWY2YzIwNTBjNDNlNGRlMDNhZWU0MzZjMTZmOTBiOTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorRGF0ZTogVGh1LCAyMSBOb3YgMjAxOSAxNzoyNzoxNCArMDAwMAorU3ViamVjdDogW1BBVENIIDY0My82NjBdIG5ldDogc2ZwOiByZW1vdmUgaW5jb21wbGV0ZSAxMDBCQVNFLUZYIGFuZCAxMDBCQVNFLUxYCisgc3VwcG9ydAorCitUaGUgMTAwQkFTRS1GWCBhbmQgMTAwQkFTRS1MWCBzdXBwb3J0IGFzc3VtZXMgYSBQSFkgaXMgcHJlc2VudDsgdGhpcworaXMgcHJvYmFibHkgYW4gaW5jb3JyZWN0IGFzc3VtcHRpb24uIEluIGFueSBjYXNlLCBzZnBfcGFyc2Vfc3VwcG9ydCgpCit3aWxsIGZhaWwgc3VjaCBhIG1vZHVsZS4gTGV0J3Mgc3RvcCBwcmV0ZW5kaW5nIHdlIHN1cHBvcnQgdGhlc2UKK21vZHVsZXMuCisKK1NpZ25lZC1vZmYtYnk6IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CistLS0KKyBkcml2ZXJzL25ldC9waHkvc2ZwLWJ1cy5jIHwgIDQgKy0tLQorIGRyaXZlcnMvbmV0L3BoeS9zZnAuYyAgICAgfCAxMyArLS0tLS0tLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDE1IGRlbGV0aW9ucygtKQorCistLS0gYS9kcml2ZXJzL25ldC9waHkvc2ZwLWJ1cy5jCisrKysgYi9kcml2ZXJzL25ldC9waHkvc2ZwLWJ1cy5jCitAQCAtMzQyLDkgKzM0Miw3IEBAIHBoeV9pbnRlcmZhY2VfdCBzZnBfc2VsZWN0X2ludGVyZmFjZShzdHIKKyAJaWYgKHBoeWxpbmtfdGVzdChsaW5rX21vZGVzLCAyNTAwYmFzZVhfRnVsbCkpCisgCQlyZXR1cm4gUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWDsKKyAKKy0JaWYgKGlkLT5iYXNlLmUxMDAwX2Jhc2VfdCB8fAorLQkgICAgaWQtPmJhc2UuZTEwMF9iYXNlX2x4IHx8CistCSAgICBpZC0+YmFzZS5lMTAwX2Jhc2VfZngpCisrCWlmIChpZC0+YmFzZS5lMTAwMF9iYXNlX3QpCisgCQlyZXR1cm4gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOworIAorIAlpZiAocGh5bGlua190ZXN0KGxpbmtfbW9kZXMsIDEwMDBiYXNlWF9GdWxsKSkKKy0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYworKysrIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jCitAQCAtMTUwNSwxOCArMTUwNSw3IEBAIHN0YXRpYyB2b2lkIHNmcF9zbV9mYXVsdChzdHJ1Y3Qgc2ZwICpzZnAKKyAKKyBzdGF0aWMgdm9pZCBzZnBfc21fcHJvYmVfZm9yX3BoeShzdHJ1Y3Qgc2ZwICpzZnApCisgeworLQkvKiBTZXR0aW5nIHRoZSBzZXJkZXMgbGluayBtb2RlIGlzIGd1ZXNzd29yazogdGhlcmUncyBubworLQkgKiBmaWVsZCBpbiB0aGUgRUVQUk9NIHdoaWNoIGluZGljYXRlcyB3aGF0IG1vZGUgc2hvdWxkCistCSAqIGJlIHVzZWQuCistCSAqCistCSAqIElmIGl0J3MgYSBnaWdhYml0LW9ubHkgZmliZXIgbW9kdWxlLCBpdCBwcm9iYWJseSBkb2VzCistCSAqIG5vdCBoYXZlIGEgUEhZLCBzbyBzd2l0Y2ggdG8gODAyLjN6IG5lZ290aWF0aW9uIG1vZGUuCistCSAqIE90aGVyd2lzZSwgc3dpdGNoIHRvIFNHTUlJIG1vZGUgKHdoaWNoIGlzIHJlcXVpcmVkIHRvCistCSAqIHN1cHBvcnQgbm9uLWdpZ2FiaXQgc3BlZWRzKSBhbmQgcHJvYmUgZm9yIGEgUEhZLgorLQkgKi8KKy0JaWYgKHNmcC0+aWQuYmFzZS5lMTAwMF9iYXNlX3QgfHwKKy0JICAgIHNmcC0+aWQuYmFzZS5lMTAwX2Jhc2VfbHggfHwKKy0JICAgIHNmcC0+aWQuYmFzZS5lMTAwX2Jhc2VfZngpCisrCWlmIChzZnAtPmlkLmJhc2UuZTEwMDBfYmFzZV90KQorIAkJc2ZwX3NtX3Byb2JlX3BoeShzZnApOworIH0KKyAKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40Lzc0MS1uZXQtc2ZwLWRlcml2ZS1pbnRlcmZhY2UtbW9kZS1mcm9tLWV0aHRvb2wtbGluay1tb2RlLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzQxLW5ldC1zZnAtZGVyaXZlLWludGVyZmFjZS1tb2RlLWZyb20tZXRodG9vbC1saW5rLW1vZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE1OGM3OAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40Lzc0MS1uZXQtc2ZwLWRlcml2ZS1pbnRlcmZhY2UtbW9kZS1mcm9tLWV0aHRvb2wtbGluay1tb2RlLnBhdGNoCkBAIC0wLDAgKzEsODkgQEAKK0Zyb20gZGM0NWQ5ZTA0NTcyYjVjZDZkMzJmNTFjZGY5ZjYyYjE4MDIyZTZkZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CitEYXRlOiBUaHUsIDIxIE5vdiAyMDE5IDE3OjMyOjU5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggNjQ0LzY2MF0gbmV0OiBzZnA6IGRlcml2ZSBpbnRlcmZhY2UgbW9kZSBmcm9tIGV0aHRvb2wgbGluaworIG1vZGVzCisKK1dlIGRvbid0IG5lZWQgdGhlIEVFUFJPTSBJRCB0byBkZXJpdmUgdGhlIHBoeSBpbnRlcmZhY2UgbW9kZSBhcyB3ZSBjYW4KK2Rlcml2ZSBpdCBtZXJlbHkgZnJvbSB0aGUgZXRodG9vbCBsaW5rIG1vZGVzLiAgUmVtb3ZlIHRoZSBFRVBST00gSUQKK2FyZ3VtZW50IHRvIHNmcF9zZWxlY3RfaW50ZXJmYWNlKCkuCisKK1NpZ25lZC1vZmYtYnk6IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CistLS0KKyBkcml2ZXJzL25ldC9waHkvbWFydmVsbDEwZy5jIHwgIDIgKy0KKyBkcml2ZXJzL25ldC9waHkvcGh5bGluay5jICAgIHwgIDIgKy0KKyBkcml2ZXJzL25ldC9waHkvc2ZwLWJ1cy5jICAgIHwgMTEgKysrKy0tLS0tLS0KKyBpbmNsdWRlL2xpbnV4L3NmcC5oICAgICAgICAgIHwgIDIgLS0KKyA0IGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsMTBnLmMKKysrKyBiL2RyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsMTBnLmMKK0BAIC0yMTQsNyArMjE0LDcgQEAgc3RhdGljIGludCBtdjMzMTBfc2ZwX2luc2VydCh2b2lkICp1cHN0cgorIAlwaHlfaW50ZXJmYWNlX3QgaWZhY2U7CisgCisgCXNmcF9wYXJzZV9zdXBwb3J0KHBoeWRldi0+c2ZwX2J1cywgaWQsIHN1cHBvcnQpOworLQlpZmFjZSA9IHNmcF9zZWxlY3RfaW50ZXJmYWNlKHBoeWRldi0+c2ZwX2J1cywgaWQsIHN1cHBvcnQpOworKwlpZmFjZSA9IHNmcF9zZWxlY3RfaW50ZXJmYWNlKHBoeWRldi0+c2ZwX2J1cywgc3VwcG9ydCk7CisgCisgCWlmIChpZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfMTBHS1IpIHsKKyAJCWRldl9lcnIoJnBoeWRldi0+bWRpby5kZXYsICJpbmNvbXBhdGlibGUgU0ZQIG1vZHVsZSBpbnNlcnRlZFxuIik7CistLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jCisrKysgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jCitAQCAtMTcxOCw3ICsxNzE4LDcgQEAgc3RhdGljIGludCBwaHlsaW5rX3NmcF9tb2R1bGVfaW5zZXJ0KHZvaQorIAorIAlsaW5rbW9kZV9jb3B5KHN1cHBvcnQxLCBzdXBwb3J0KTsKKyAKKy0JaWZhY2UgPSBzZnBfc2VsZWN0X2ludGVyZmFjZShwbC0+c2ZwX2J1cywgaWQsIGNvbmZpZy5hZHZlcnRpc2luZyk7CisrCWlmYWNlID0gc2ZwX3NlbGVjdF9pbnRlcmZhY2UocGwtPnNmcF9idXMsIGNvbmZpZy5hZHZlcnRpc2luZyk7CisgCWlmIChpZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfTkEpIHsKKyAJCXBoeWxpbmtfZXJyKHBsLAorIAkJCSAgICAic2VsZWN0aW9uIG9mIGludGVyZmFjZSBmYWlsZWQsIGFkdmVydGlzZW1lbnQgJSpwYlxuIiwKKy0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAtYnVzLmMKKysrKyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAtYnVzLmMKK0BAIC0zMjAsMTYgKzMyMCwxMiBAQCBFWFBPUlRfU1lNQk9MX0dQTChzZnBfcGFyc2Vfc3VwcG9ydCk7CisgLyoqCisgICogc2ZwX3NlbGVjdF9pbnRlcmZhY2UoKSAtIFNlbGVjdCBhcHByb3ByaWF0ZSBwaHlfaW50ZXJmYWNlX3QgbW9kZQorICAqIEBidXM6IGEgcG9pbnRlciB0byB0aGUgJnN0cnVjdCBzZnBfYnVzIHN0cnVjdHVyZSBmb3IgdGhlIHNmcCBtb2R1bGUKKy0gKiBAaWQ6IGEgcG9pbnRlciB0byB0aGUgbW9kdWxlJ3MgJnN0cnVjdCBzZnBfZWVwcm9tX2lkCisgICogQGxpbmtfbW9kZXM6IGV0aHRvb2wgbGluayBtb2RlcyBtYXNrCisgICoKKy0gKiBEZXJpdmUgdGhlIHBoeV9pbnRlcmZhY2VfdCBtb2RlIGZvciB0aGUgaW5mb3JtYXRpb24gZm91bmQgaW4gdGhlCistICogbW9kdWxlJ3MgaWRlbnRpZnlpbmcgRUVQUk9NIGFuZCB0aGUgbGluayBtb2RlcyBtYXNrLiBUaGVyZSBpcyBubworLSAqIHN0YW5kYXJkIG9yIGRlZmluZWQgd2F5IHRvIGRlcml2ZSB0aGlzIGluZm9ybWF0aW9uLCBzbyB3ZSBkZWNpZGUKKy0gKiBiYXNlZCB1cG9uIHRoZSBsaW5rIG1vZGUgbWFzay4KKysgKiBEZXJpdmUgdGhlIHBoeV9pbnRlcmZhY2VfdCBtb2RlIGZvciB0aGUgU0ZQIG1vZHVsZSBmcm9tIHRoZSBsaW5rCisrICogbW9kZXMgbWFzay4KKyAgKi8KKyBwaHlfaW50ZXJmYWNlX3Qgc2ZwX3NlbGVjdF9pbnRlcmZhY2Uoc3RydWN0IHNmcF9idXMgKmJ1cywKKy0JCQkJICAgICBjb25zdCBzdHJ1Y3Qgc2ZwX2VlcHJvbV9pZCAqaWQsCisgCQkJCSAgICAgdW5zaWduZWQgbG9uZyAqbGlua19tb2RlcykKKyB7CisgCWlmIChwaHlsaW5rX3Rlc3QobGlua19tb2RlcywgMTAwMDBiYXNlQ1JfRnVsbCkgfHwKK0BAIC0zNDIsNyArMzM4LDggQEAgcGh5X2ludGVyZmFjZV90IHNmcF9zZWxlY3RfaW50ZXJmYWNlKHN0cgorIAlpZiAocGh5bGlua190ZXN0KGxpbmtfbW9kZXMsIDI1MDBiYXNlWF9GdWxsKSkKKyAJCXJldHVybiBQSFlfSU5URVJGQUNFX01PREVfMjUwMEJBU0VYOworIAorLQlpZiAoaWQtPmJhc2UuZTEwMDBfYmFzZV90KQorKwlpZiAocGh5bGlua190ZXN0KGxpbmtfbW9kZXMsIDEwMDBiYXNlVF9IYWxmKSB8fAorKwkgICAgcGh5bGlua190ZXN0KGxpbmtfbW9kZXMsIDEwMDBiYXNlVF9GdWxsKSkKKyAJCXJldHVybiBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk7CisgCisgCWlmIChwaHlsaW5rX3Rlc3QobGlua19tb2RlcywgMTAwMGJhc2VYX0Z1bGwpKQorLS0tIGEvaW5jbHVkZS9saW51eC9zZnAuaAorKysrIGIvaW5jbHVkZS9saW51eC9zZnAuaAorQEAgLTUwNCw3ICs1MDQsNiBAQCBpbnQgc2ZwX3BhcnNlX3BvcnQoc3RydWN0IHNmcF9idXMgKmJ1cywKKyB2b2lkIHNmcF9wYXJzZV9zdXBwb3J0KHN0cnVjdCBzZnBfYnVzICpidXMsIGNvbnN0IHN0cnVjdCBzZnBfZWVwcm9tX2lkICppZCwKKyAJCSAgICAgICB1bnNpZ25lZCBsb25nICpzdXBwb3J0KTsKKyBwaHlfaW50ZXJmYWNlX3Qgc2ZwX3NlbGVjdF9pbnRlcmZhY2Uoc3RydWN0IHNmcF9idXMgKmJ1cywKKy0JCQkJICAgICBjb25zdCBzdHJ1Y3Qgc2ZwX2VlcHJvbV9pZCAqaWQsCisgCQkJCSAgICAgdW5zaWduZWQgbG9uZyAqbGlua19tb2Rlcyk7CisgCisgaW50IHNmcF9nZXRfbW9kdWxlX2luZm8oc3RydWN0IHNmcF9idXMgKmJ1cywgc3RydWN0IGV0aHRvb2xfbW9kaW5mbyAqbW9kaW5mbyk7CitAQCAtNTMyLDcgKzUzMSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZnBfcGFyc2Vfc3VwcG9ydChzdHIKKyB9CisgCisgc3RhdGljIGlubGluZSBwaHlfaW50ZXJmYWNlX3Qgc2ZwX3NlbGVjdF9pbnRlcmZhY2Uoc3RydWN0IHNmcF9idXMgKmJ1cywKKy0JCQkJCQkgICBjb25zdCBzdHJ1Y3Qgc2ZwX2VlcHJvbV9pZCAqaWQsCisgCQkJCQkJICAgdW5zaWduZWQgbG9uZyAqbGlua19tb2RlcykKKyB7CisgCXJldHVybiBQSFlfSU5URVJGQUNFX01PREVfTkE7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC83NDItbmV0LXNmcC1hZGQtbW9yZS1leHRlbmRlZC1jb21wbGlhbmNlLWNvZGVzLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzQyLW5ldC1zZnAtYWRkLW1vcmUtZXh0ZW5kZWQtY29tcGxpYW5jZS1jb2Rlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjhlMTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzQyLW5ldC1zZnAtYWRkLW1vcmUtZXh0ZW5kZWQtY29tcGxpYW5jZS1jb2Rlcy5wYXRjaApAQCAtMCwwICsxLDI1MSBAQAorRnJvbSBjNjZhNGU3NmM4NTU0Yzg0ZTY0YjkzMTUzMTQ1NzZhYzQwM2M2NjQxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KK0RhdGU6IFRodSwgMjYgU2VwIDIwMTkgMTU6MTQ6MTggKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCA2NDUvNjYwXSBuZXQ6IHNmcDogYWRkIG1vcmUgZXh0ZW5kZWQgY29tcGxpYW5jZSBjb2RlcworCitTRkYtODAyNCBpcyB1c2VkIHRvIGRlZmluZSB2YXJpb3VzIGNvbnN0YW50cyByZS11c2VkIGluIHNldmVyYWwgU0ZGCitTRlAtcmVsYXRlZCBzcGVjaWZpY2F0aW9ucy4gIFNwbGl0IHRoZXNlIGNvbnN0YW50cyBmcm9tIHRoZSBlbnVtLCBhbmQKK3JlbmFtZSB0aGVtIHRvIGluZGljYXRlIHRoYXQgdGhleSdyZSBkZWZpbmVkIGJ5IFNGRi04MDI0LgorCitBZGQgYW5kIHVzZSB1cGRhdGVkIFNGRi04MDI0IGV4dGVuZGVkIGNvbXBsaWFuY2UgY29kZSBkZWZpbml0aW9ucyBmb3IKKzEwR0JBU0UtVCwgNUdCQVNFLVQgYW5kIDIuNUdCQVNFLVQgbW9kdWxlcy4KKworU2lnbmVkLW9mZi1ieTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KKy0tLQorIGRyaXZlcnMvbmV0L3BoeS9zZnAtYnVzLmMgfCA2MCArKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tCisgZHJpdmVycy9uZXQvcGh5L3NmcC5jICAgICB8ICA0ICstCisgaW5jbHVkZS9saW51eC9zZnAuaCAgICAgICB8IDgyICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQorIDMgZmlsZXMgY2hhbmdlZCwgOTMgaW5zZXJ0aW9ucygrKSwgNTMgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAtYnVzLmMKKysrKyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAtYnVzLmMKK0BAIC0xMjQsMzUgKzEyNCwzNSBAQCBpbnQgc2ZwX3BhcnNlX3BvcnQoc3RydWN0IHNmcF9idXMgKmJ1cywKKyAKKyAJLyogcG9ydCBpcyB0aGUgcGh5c2ljYWwgY29ubmVjdG9yLCBzZXQgdGhpcyBmcm9tIHRoZSBjb25uZWN0b3IgZmllbGQuICovCisgCXN3aXRjaCAoaWQtPmJhc2UuY29ubmVjdG9yKSB7CistCWNhc2UgU0ZQX0NPTk5FQ1RPUl9TQzoKKy0JY2FzZSBTRlBfQ09OTkVDVE9SX0ZJQkVSSkFDSzoKKy0JY2FzZSBTRlBfQ09OTkVDVE9SX0xDOgorLQljYXNlIFNGUF9DT05ORUNUT1JfTVRfUko6CistCWNhc2UgU0ZQX0NPTk5FQ1RPUl9NVToKKy0JY2FzZSBTRlBfQ09OTkVDVE9SX09QVElDQUxfUElHVEFJTDoKKysJY2FzZSBTRkY4MDI0X0NPTk5FQ1RPUl9TQzoKKysJY2FzZSBTRkY4MDI0X0NPTk5FQ1RPUl9GSUJFUkpBQ0s6CisrCWNhc2UgU0ZGODAyNF9DT05ORUNUT1JfTEM6CisrCWNhc2UgU0ZGODAyNF9DT05ORUNUT1JfTVRfUko6CisrCWNhc2UgU0ZGODAyNF9DT05ORUNUT1JfTVU6CisrCWNhc2UgU0ZGODAyNF9DT05ORUNUT1JfT1BUSUNBTF9QSUdUQUlMOgorKwljYXNlIFNGRjgwMjRfQ09OTkVDVE9SX01QT18xWDEyOgorKwljYXNlIFNGRjgwMjRfQ09OTkVDVE9SX01QT18yWDE2OgorIAkJcG9ydCA9IFBPUlRfRklCUkU7CisgCQlicmVhazsKKyAKKy0JY2FzZSBTRlBfQ09OTkVDVE9SX1JKNDU6CisrCWNhc2UgU0ZGODAyNF9DT05ORUNUT1JfUko0NToKKyAJCXBvcnQgPSBQT1JUX1RQOworIAkJYnJlYWs7CisgCistCWNhc2UgU0ZQX0NPTk5FQ1RPUl9DT1BQRVJfUElHVEFJTDoKKysJY2FzZSBTRkY4MDI0X0NPTk5FQ1RPUl9DT1BQRVJfUElHVEFJTDoKKyAJCXBvcnQgPSBQT1JUX0RBOworIAkJYnJlYWs7CisgCistCWNhc2UgU0ZQX0NPTk5FQ1RPUl9VTlNQRUM6CisrCWNhc2UgU0ZGODAyNF9DT05ORUNUT1JfVU5TUEVDOgorIAkJaWYgKGlkLT5iYXNlLmUxMDAwX2Jhc2VfdCkgeworIAkJCXBvcnQgPSBQT1JUX1RQOworIAkJCWJyZWFrOworIAkJfQorIAkJLyogZmFsbHRocm91Z2ggKi8KKy0JY2FzZSBTRlBfQ09OTkVDVE9SX1NHOiAvKiBndWVzcyAqLworLQljYXNlIFNGUF9DT05ORUNUT1JfTVBPXzFYMTI6CistCWNhc2UgU0ZQX0NPTk5FQ1RPUl9NUE9fMlgxNjoKKy0JY2FzZSBTRlBfQ09OTkVDVE9SX0hTU0RDX0lJOgorLQljYXNlIFNGUF9DT05ORUNUT1JfTk9TRVBBUkFURToKKy0JY2FzZSBTRlBfQ09OTkVDVE9SX01YQ18yWDE2OgorKwljYXNlIFNGRjgwMjRfQ09OTkVDVE9SX1NHOiAvKiBndWVzcyAqLworKwljYXNlIFNGRjgwMjRfQ09OTkVDVE9SX0hTU0RDX0lJOgorKwljYXNlIFNGRjgwMjRfQ09OTkVDVE9SX05PU0VQQVJBVEU6CisrCWNhc2UgU0ZGODAyNF9DT05ORUNUT1JfTVhDXzJYMTY6CisgCQlwb3J0ID0gUE9SVF9PVEhFUjsKKyAJCWJyZWFrOworIAlkZWZhdWx0OgorQEAgLTI2MSwyMiArMjYxLDMzIEBAIHZvaWQgc2ZwX3BhcnNlX3N1cHBvcnQoc3RydWN0IHNmcF9idXMgKmIKKyAJfQorIAorIAlzd2l0Y2ggKGlkLT5iYXNlLmV4dGVuZGVkX2NjKSB7CistCWNhc2UgMHgwMDogLyogVW5zcGVjaWZpZWQgKi8KKysJY2FzZSBTRkY4MDI0X0VDQ19VTlNQRUM6CisgCQlicmVhazsKKy0JY2FzZSAweDAyOiAvKiAxMDBHYmFzZS1TUjQgb3IgMjVHYmFzZS1TUiAqLworKwljYXNlIFNGRjgwMjRfRUNDXzEwMEdCQVNFX1NSNF8yNUdCQVNFX1NSOgorIAkJcGh5bGlua19zZXQobW9kZXMsIDEwMDAwMGJhc2VTUjRfRnVsbCk7CisgCQlwaHlsaW5rX3NldChtb2RlcywgMjUwMDBiYXNlU1JfRnVsbCk7CisgCQlicmVhazsKKy0JY2FzZSAweDAzOiAvKiAxMDBHYmFzZS1MUjQgb3IgMjVHYmFzZS1MUiAqLworLQljYXNlIDB4MDQ6IC8qIDEwMEdiYXNlLUVSNCBvciAyNUdiYXNlLUVSICovCisrCWNhc2UgU0ZGODAyNF9FQ0NfMTAwR0JBU0VfTFI0XzI1R0JBU0VfTFI6CisrCWNhc2UgU0ZGODAyNF9FQ0NfMTAwR0JBU0VfRVI0XzI1R0JBU0VfRVI6CisgCQlwaHlsaW5rX3NldChtb2RlcywgMTAwMDAwYmFzZUxSNF9FUjRfRnVsbCk7CisgCQlicmVhazsKKy0JY2FzZSAweDBiOiAvKiAxMDBHYmFzZS1DUjQgb3IgMjVHYmFzZS1DUiBDQS1MICovCistCWNhc2UgMHgwYzogLyogMjVHYmFzZS1DUiBDQS1TICovCistCWNhc2UgMHgwZDogLyogMjVHYmFzZS1DUiBDQS1OICovCisrCWNhc2UgU0ZGODAyNF9FQ0NfMTAwR0JBU0VfQ1I0OgorIAkJcGh5bGlua19zZXQobW9kZXMsIDEwMDAwMGJhc2VDUjRfRnVsbCk7CisrCQkvKiBmYWxsdGhyb3VnaCAqLworKwljYXNlIFNGRjgwMjRfRUNDXzI1R0JBU0VfQ1JfUzoKKysJY2FzZSBTRkY4MDI0X0VDQ18yNUdCQVNFX0NSX046CisgCQlwaHlsaW5rX3NldChtb2RlcywgMjUwMDBiYXNlQ1JfRnVsbCk7CisgCQlicmVhazsKKysJY2FzZSBTRkY4MDI0X0VDQ18xMEdCQVNFX1RfU0ZJOgorKwljYXNlIFNGRjgwMjRfRUNDXzEwR0JBU0VfVF9TUjoKKysJCXBoeWxpbmtfc2V0KG1vZGVzLCAxMDAwMGJhc2VUX0Z1bGwpOworKwkJYnJlYWs7CisrCWNhc2UgU0ZGODAyNF9FQ0NfNUdCQVNFX1Q6CisrCQlwaHlsaW5rX3NldChtb2RlcywgNTAwMGJhc2VUX0Z1bGwpOworKwkJYnJlYWs7CisrCWNhc2UgU0ZGODAyNF9FQ0NfMl81R0JBU0VfVDoKKysJCXBoeWxpbmtfc2V0KG1vZGVzLCAyNTAwYmFzZVRfRnVsbCk7CisrCQlicmVhazsKKyAJZGVmYXVsdDoKKyAJCWRldl93YXJuKGJ1cy0+c2ZwX2RldiwKKyAJCQkgIlVua25vd24vdW5zdXBwb3J0ZWQgZXh0ZW5kZWQgY29tcGxpYW5jZSBjb2RlOiAweCUwMnhcbiIsCitAQCAtMzAxLDcgKzMxMiw3IEBAIHZvaWQgc2ZwX3BhcnNlX3N1cHBvcnQoc3RydWN0IHNmcF9idXMgKmIKKyAJICovCisgCWlmIChiaXRtYXBfZW1wdHkobW9kZXMsIF9fRVRIVE9PTF9MSU5LX01PREVfTUFTS19OQklUUykpIHsKKyAJCS8qIElmIHRoZSBlbmNvZGluZyBhbmQgYml0IHJhdGUgYWxsb3dzIDEwMDBiYXNlWCAqLworLQkJaWYgKGlkLT5iYXNlLmVuY29kaW5nID09IFNGUF9FTkNPRElOR184QjEwQiAmJiBicl9ub20gJiYKKysJCWlmIChpZC0+YmFzZS5lbmNvZGluZyA9PSBTRkY4MDI0X0VOQ09ESU5HXzhCMTBCICYmIGJyX25vbSAmJgorIAkJICAgIGJyX21pbiA8PSAxMzAwICYmIGJyX21heCA+PSAxMjAwKQorIAkJCXBoeWxpbmtfc2V0KG1vZGVzLCAxMDAwYmFzZVhfRnVsbCk7CisgCX0KK0BAIC0zMzIsNyArMzQzLDggQEAgcGh5X2ludGVyZmFjZV90IHNmcF9zZWxlY3RfaW50ZXJmYWNlKHN0cgorIAkgICAgcGh5bGlua190ZXN0KGxpbmtfbW9kZXMsIDEwMDAwYmFzZVNSX0Z1bGwpIHx8CisgCSAgICBwaHlsaW5rX3Rlc3QobGlua19tb2RlcywgMTAwMDBiYXNlTFJfRnVsbCkgfHwKKyAJICAgIHBoeWxpbmtfdGVzdChsaW5rX21vZGVzLCAxMDAwMGJhc2VMUk1fRnVsbCkgfHwKKy0JICAgIHBoeWxpbmtfdGVzdChsaW5rX21vZGVzLCAxMDAwMGJhc2VFUl9GdWxsKSkKKysJICAgIHBoeWxpbmtfdGVzdChsaW5rX21vZGVzLCAxMDAwMGJhc2VFUl9GdWxsKSB8fAorKwkgICAgcGh5bGlua190ZXN0KGxpbmtfbW9kZXMsIDEwMDAwYmFzZVRfRnVsbCkpCisgCQlyZXR1cm4gUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0tSOworIAorIAlpZiAocGh5bGlua190ZXN0KGxpbmtfbW9kZXMsIDI1MDBiYXNlWF9GdWxsKSkKKy0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYworKysrIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jCitAQCAtMjQzLDcgKzI0Myw3IEBAIHN0cnVjdCBzZnAgeworIAorIHN0YXRpYyBib29sIHNmZl9tb2R1bGVfc3VwcG9ydGVkKGNvbnN0IHN0cnVjdCBzZnBfZWVwcm9tX2lkICppZCkKKyB7CistCXJldHVybiBpZC0+YmFzZS5waHlzX2lkID09IFNGUF9QSFlTX0lEX1NGRiAmJgorKwlyZXR1cm4gaWQtPmJhc2UucGh5c19pZCA9PSBTRkY4MDI0X0lEX1NGRl84NDcyICYmCisgCSAgICAgICBpZC0+YmFzZS5waHlzX2V4dF9pZCA9PSBTRlBfUEhZU19FWFRfSURfU0ZQOworIH0KKyAKK0BAIC0yNTQsNyArMjU0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzZmZfZGF0YSBzZmZfZGF0YSA9CisgCisgc3RhdGljIGJvb2wgc2ZwX21vZHVsZV9zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IHNmcF9lZXByb21faWQgKmlkKQorIHsKKy0JcmV0dXJuIGlkLT5iYXNlLnBoeXNfaWQgPT0gU0ZQX1BIWVNfSURfU0ZQICYmCisrCXJldHVybiBpZC0+YmFzZS5waHlzX2lkID09IFNGRjgwMjRfSURfU0ZQICYmCisgCSAgICAgICBpZC0+YmFzZS5waHlzX2V4dF9pZCA9PSBTRlBfUEhZU19FWFRfSURfU0ZQOworIH0KKyAKKy0tLSBhL2luY2x1ZGUvbGludXgvc2ZwLmgKKysrKyBiL2luY2x1ZGUvbGludXgvc2ZwLmgKK0BAIC0yNzUsNiArMjc1LDYxIEBAIHN0cnVjdCBzZnBfZGlhZyB7CisgCV9fYmUxNiBjYWxfdl9vZmZzZXQ7CisgfSBfX3BhY2tlZDsKKyAKKysvKiBTRkY4MDI0IGRlZmluZWQgY29uc3RhbnRzICovCisrZW51bSB7CisrCVNGRjgwMjRfSURfVU5LCQkJPSAweDAwLAorKwlTRkY4MDI0X0lEX1NGRl84NDcyCQk9IDB4MDIsCisrCVNGRjgwMjRfSURfU0ZQCQkJPSAweDAzLAorKwlTRkY4MDI0X0lEX0RXRE1fU0ZQCQk9IDB4MGIsCisrCVNGRjgwMjRfSURfUVNGUF84NDM4CQk9IDB4MGMsCisrCVNGRjgwMjRfSURfUVNGUF84NDM2Xzg2MzYJPSAweDBkLAorKwlTRkY4MDI0X0lEX1FTRlAyOF84NjM2CQk9IDB4MTEsCisrCisrCVNGRjgwMjRfRU5DT0RJTkdfVU5TUEVDCQk9IDB4MDAsCisrCVNGRjgwMjRfRU5DT0RJTkdfOEIxMEIJCT0gMHgwMSwKKysJU0ZGODAyNF9FTkNPRElOR180QjVCCQk9IDB4MDIsCisrCVNGRjgwMjRfRU5DT0RJTkdfTlJaCQk9IDB4MDMsCisrCVNGRjgwMjRfRU5DT0RJTkdfODQ3Ml9NQU5DSEVTVEVSPSAweDA0LAorKwlTRkY4MDI0X0VOQ09ESU5HXzg0NzJfU09ORVQJPSAweDA1LAorKwlTRkY4MDI0X0VOQ09ESU5HXzg0NzJfNjRCNjZCCT0gMHgwNiwKKysJU0ZGODAyNF9FTkNPRElOR184NDM2X01BTkNIRVNURVI9IDB4MDYsCisrCVNGRjgwMjRfRU5DT0RJTkdfODQzNl9TT05FVAk9IDB4MDQsCisrCVNGRjgwMjRfRU5DT0RJTkdfODQzNl82NEI2NkIJPSAweDA1LAorKwlTRkY4MDI0X0VOQ09ESU5HXzI1NkIyNTdCCT0gMHgwNywKKysJU0ZGODAyNF9FTkNPRElOR19QQU00CQk9IDB4MDgsCisrCisrCVNGRjgwMjRfQ09OTkVDVE9SX1VOU1BFQwk9IDB4MDAsCisrCS8qIGNvZGVzIDAxLTA1IG5vdCBzdXBwb3J0YWJsZSBvbiBTRlAsIGJ1dCBzb21lIG1vZHVsZXMgaGF2ZSBzaW5nbGUgU0MgKi8KKysJU0ZGODAyNF9DT05ORUNUT1JfU0MJCT0gMHgwMSwKKysJU0ZGODAyNF9DT05ORUNUT1JfRklCRVJKQUNLCT0gMHgwNiwKKysJU0ZGODAyNF9DT05ORUNUT1JfTEMJCT0gMHgwNywKKysJU0ZGODAyNF9DT05ORUNUT1JfTVRfUkoJCT0gMHgwOCwKKysJU0ZGODAyNF9DT05ORUNUT1JfTVUJCT0gMHgwOSwKKysJU0ZGODAyNF9DT05ORUNUT1JfU0cJCT0gMHgwYSwKKysJU0ZGODAyNF9DT05ORUNUT1JfT1BUSUNBTF9QSUdUQUlMPSAweDBiLAorKwlTRkY4MDI0X0NPTk5FQ1RPUl9NUE9fMVgxMgk9IDB4MGMsCisrCVNGRjgwMjRfQ09OTkVDVE9SX01QT18yWDE2CT0gMHgwZCwKKysJU0ZGODAyNF9DT05ORUNUT1JfSFNTRENfSUkJPSAweDIwLAorKwlTRkY4MDI0X0NPTk5FQ1RPUl9DT1BQRVJfUElHVEFJTD0gMHgyMSwKKysJU0ZGODAyNF9DT05ORUNUT1JfUko0NQkJPSAweDIyLAorKwlTRkY4MDI0X0NPTk5FQ1RPUl9OT1NFUEFSQVRFCT0gMHgyMywKKysJU0ZGODAyNF9DT05ORUNUT1JfTVhDXzJYMTYJPSAweDI0LAorKworKwlTRkY4MDI0X0VDQ19VTlNQRUMJCT0gMHgwMCwKKysJU0ZGODAyNF9FQ0NfMTAwR18yNUdBVUlfQzJNX0FPQwk9IDB4MDEsCisrCVNGRjgwMjRfRUNDXzEwMEdCQVNFX1NSNF8yNUdCQVNFX1NSID0gMHgwMiwKKysJU0ZGODAyNF9FQ0NfMTAwR0JBU0VfTFI0XzI1R0JBU0VfTFIgPSAweDAzLAorKwlTRkY4MDI0X0VDQ18xMDBHQkFTRV9FUjRfMjVHQkFTRV9FUiA9IDB4MDQsCisrCVNGRjgwMjRfRUNDXzEwMEdCQVNFX1NSMTAJPSAweDA1LAorKwlTRkY4MDI0X0VDQ18xMDBHQkFTRV9DUjQJPSAweDBiLAorKwlTRkY4MDI0X0VDQ18yNUdCQVNFX0NSX1MJPSAweDBjLAorKwlTRkY4MDI0X0VDQ18yNUdCQVNFX0NSX04JPSAweDBkLAorKwlTRkY4MDI0X0VDQ18xMEdCQVNFX1RfU0ZJCT0gMHgxNiwKKysJU0ZGODAyNF9FQ0NfMTBHQkFTRV9UX1NSCT0gMHgxYywKKysJU0ZGODAyNF9FQ0NfNUdCQVNFX1QJCT0gMHgxZCwKKysJU0ZGODAyNF9FQ0NfMl81R0JBU0VfVAkJPSAweDFlLAorK307CisrCisgLyogU0ZQIEVFUFJPTSByZWdpc3RlcnMgKi8KKyBlbnVtIHsKKyAJU0ZQX1BIWVNfSUQJCQk9IDB4MDAsCitAQCAtMzA5LDM0ICszNjQsNyBAQCBlbnVtIHsKKyAJU0ZQX1NGRjg0NzJfQ09NUExJQU5DRQkJPSAweDVlLAorIAlTRlBfQ0NfRVhUCQkJPSAweDVmLAorIAorLQlTRlBfUEhZU19JRF9TRkYJCQk9IDB4MDIsCistCVNGUF9QSFlTX0lEX1NGUAkJCT0gMHgwMywKKyAJU0ZQX1BIWVNfRVhUX0lEX1NGUAkJPSAweDA0LAorLQlTRlBfQ09OTkVDVE9SX1VOU1BFQwkJPSAweDAwLAorLQkvKiBjb2RlcyAwMS0wNSBub3Qgc3VwcG9ydGFibGUgb24gU0ZQLCBidXQgc29tZSBtb2R1bGVzIGhhdmUgc2luZ2xlIFNDICovCistCVNGUF9DT05ORUNUT1JfU0MJCT0gMHgwMSwKKy0JU0ZQX0NPTk5FQ1RPUl9GSUJFUkpBQ0sJCT0gMHgwNiwKKy0JU0ZQX0NPTk5FQ1RPUl9MQwkJPSAweDA3LAorLQlTRlBfQ09OTkVDVE9SX01UX1JKCQk9IDB4MDgsCistCVNGUF9DT05ORUNUT1JfTVUJCT0gMHgwOSwKKy0JU0ZQX0NPTk5FQ1RPUl9TRwkJPSAweDBhLAorLQlTRlBfQ09OTkVDVE9SX09QVElDQUxfUElHVEFJTAk9IDB4MGIsCistCVNGUF9DT05ORUNUT1JfTVBPXzFYMTIJCT0gMHgwYywKKy0JU0ZQX0NPTk5FQ1RPUl9NUE9fMlgxNgkJPSAweDBkLAorLQlTRlBfQ09OTkVDVE9SX0hTU0RDX0lJCQk9IDB4MjAsCistCVNGUF9DT05ORUNUT1JfQ09QUEVSX1BJR1RBSUwJPSAweDIxLAorLQlTRlBfQ09OTkVDVE9SX1JKNDUJCT0gMHgyMiwKKy0JU0ZQX0NPTk5FQ1RPUl9OT1NFUEFSQVRFCT0gMHgyMywKKy0JU0ZQX0NPTk5FQ1RPUl9NWENfMlgxNgkJPSAweDI0LAorLQlTRlBfRU5DT0RJTkdfVU5TUEVDCQk9IDB4MDAsCistCVNGUF9FTkNPRElOR184QjEwQgkJPSAweDAxLAorLQlTRlBfRU5DT0RJTkdfNEI1QgkJPSAweDAyLAorLQlTRlBfRU5DT0RJTkdfTlJaCQk9IDB4MDMsCistCVNGUF9FTkNPRElOR184NDcyX01BTkNIRVNURVIJPSAweDA0LAorLQlTRlBfRU5DT0RJTkdfODQ3Ml9TT05FVAkJPSAweDA1LAorLQlTRlBfRU5DT0RJTkdfODQ3Ml82NEI2NkIJPSAweDA2LAorLQlTRlBfRU5DT0RJTkdfMjU2QjI1N0IJCT0gMHgwNywKKy0JU0ZQX0VOQ09ESU5HX1BBTTQJCT0gMHgwOCwKKyAJU0ZQX09QVElPTlNfSElHSF9QT1dFUl9MRVZFTAk9IEJJVCgxMyksCisgCVNGUF9PUFRJT05TX1BBR0lOR19BMgkJPSBCSVQoMTIpLAorIAlTRlBfT1BUSU9OU19SRVRJTUVSCQk9IEJJVCgxMSksCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC83NDMtbmV0LXNmcC1hZGQtbW9kdWxlLXN0YXJ0LXN0b3AtdXBzdHJlYW0tbm90aWZpY2F0aW9ucy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40Lzc0My1uZXQtc2ZwLWFkZC1tb2R1bGUtc3RhcnQtc3RvcC11cHN0cmVhbS1ub3RpZmljYXRpb25zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMWI1YjUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC83NDMtbmV0LXNmcC1hZGQtbW9kdWxlLXN0YXJ0LXN0b3AtdXBzdHJlYW0tbm90aWZpY2F0aW9ucy5wYXRjaApAQCAtMCwwICsxLDEzMSBAQAorRnJvbSBmOWE1YTU0YjU5Y2I5MDRiMzdiZjc0MDlhNDM2MzVhYjE5NWQwMjE0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KK0RhdGU6IFR1ZSwgMTkgTm92IDIwMTkgMTA6MTM6MjUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCA2NDYvNjYwXSBuZXQ6IHNmcDogYWRkIG1vZHVsZSBzdGFydC9zdG9wIHVwc3RyZWFtCisgbm90aWZpY2F0aW9ucworCitXaGVuIGRlYWxpbmcgd2l0aCBzb21lIGNvcHBlciBtb2R1bGVzLCB3ZSBjYW4ndCBwb3NpdGl2ZWx5IGtub3cgdGhlCittb2R1bGUgY2FwYWJpbGl0aWVzIGFyZSB1bnRpbCB3ZSBoYXZlIHByb2JlZCB0aGUgUEhZLiBXaXRob3V0IHRoZSBmdWxsCitjYXBhYmlsaXRpZXMsIHdlIG1heSBlbmQgdXAgZmFpbGluZyBhIG1vZHVsZSB0aGF0IHdlIGNvdWxkIG90aGVyd2lzZQorZHJpdmUgd2l0aCBhIHJlc3RyaWN0ZWQgc2V0IG9mIGNhcGFiaWxpdGllcy4KKworQW4gZXhhbXBsZSBvZiB0aGlzIHdvdWxkIGJlIGEgbW9kdWxlIHdpdGggYSBOQkFTRS1UIFBIWSBwbHVnZ2VkIGludG8KK2EgaG9zdCB0aGF0IHN1cHBvcnRzIHBoeSBpbnRlcmZhY2UgbW9kZXMgMjUwMEJBU0UtWCBhbmQgU0dNSUkuIFRoZQorUEhZIHN1cHBvcnRzIDEwR0JBU0UtUiwgNTAwMEJBU0UtWCwgMjUwMEJBU0UtWCwgU0dNSUkgaW50ZXJmYWNlIG1vZGVzLAord2hpY2ggbWVhbnMgYSBzdWJzZXQgb2YgdGhlIGNhcGFiaWxpdGllcyBhcmUgY29tcGF0aWJsZSB3aXRoIHRoZSBob3N0LgorCitIb3dldmVyLCByZWFkaW5nIHRoZSBtb2R1bGUgRUVQUk9NIGxlYWRzIHVzIHRvIGJlbGlldmUgdGhhdCB0aGUgbW9kdWxlCitvbmx5IHN1cHBvcnRzIGV0aHRvb2wgbGluayBtb2RlIDEwR0JBU0UtVCwgd2hpY2ggaXMgaW5jb21wYXRpYmxlIHdpdGgKK3RoZSBob3N0IC0gYW5kIHRodXMgcmVzdWx0cyBpbiB0aGUgbW9kdWxlIGJlaW5nIHJlamVjdGVkLgorCitUaGlzIHBhdGNoIGFkZHMgYW4gZXh0cmEgbm90aWZpY2F0aW9uIHdoaWNoIGFyZSB0cmlnZ2VyZWQgYWZ0ZXIgdGhlCitTRlAgbW9kdWxlJ3MgUEhZIHByb2JlLCBhbmQgYSBjb3JyZXNwb25kaW5nIG5vdGlmaWNhdGlvbiBqdXN0IGJlZm9yZQordGhlIFBIWSBpcyByZW1vdmVkLgorCitTaWduZWQtb2ZmLWJ5OiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorLS0tCisgZHJpdmVycy9uZXQvcGh5L3NmcC1idXMuYyB8IDIxICsrKysrKysrKysrKysrKysrKysrKworIGRyaXZlcnMvbmV0L3BoeS9zZnAuYyAgICAgfCAgOCArKysrKysrKworIGRyaXZlcnMvbmV0L3BoeS9zZnAuaCAgICAgfCAgMiArKworIGluY2x1ZGUvbGludXgvc2ZwLmggICAgICAgfCAgNCArKysrCisgNCBmaWxlcyBjaGFuZ2VkLCAzNSBpbnNlcnRpb25zKCspCisKKy0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAtYnVzLmMKKysrKyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAtYnVzLmMKK0BAIC03MTcsNiArNzE3LDI3IEBAIHZvaWQgc2ZwX21vZHVsZV9yZW1vdmUoc3RydWN0IHNmcF9idXMgKmIKKyB9CisgRVhQT1JUX1NZTUJPTF9HUEwoc2ZwX21vZHVsZV9yZW1vdmUpOworIAorK2ludCBzZnBfbW9kdWxlX3N0YXJ0KHN0cnVjdCBzZnBfYnVzICpidXMpCisreworKwljb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyAqb3BzID0gc2ZwX2dldF91cHN0cmVhbV9vcHMoYnVzKTsKKysJaW50IHJldCA9IDA7CisrCisrCWlmIChvcHMgJiYgb3BzLT5tb2R1bGVfc3RhcnQpCisrCQlyZXQgPSBvcHMtPm1vZHVsZV9zdGFydChidXMtPnVwc3RyZWFtKTsKKysKKysJcmV0dXJuIHJldDsKKyt9CisrRVhQT1JUX1NZTUJPTF9HUEwoc2ZwX21vZHVsZV9zdGFydCk7CisrCisrdm9pZCBzZnBfbW9kdWxlX3N0b3Aoc3RydWN0IHNmcF9idXMgKmJ1cykKKyt7CisrCWNvbnN0IHN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzICpvcHMgPSBzZnBfZ2V0X3Vwc3RyZWFtX29wcyhidXMpOworKworKwlpZiAob3BzICYmIG9wcy0+bW9kdWxlX3N0b3ApCisrCQlvcHMtPm1vZHVsZV9zdG9wKGJ1cy0+dXBzdHJlYW0pOworK30KKytFWFBPUlRfU1lNQk9MX0dQTChzZnBfbW9kdWxlX3N0b3ApOworKworIHN0YXRpYyB2b2lkIHNmcF9zb2NrZXRfY2xlYXIoc3RydWN0IHNmcF9idXMgKmJ1cykKKyB7CisgCWJ1cy0+c2ZwX2RldiA9IE5VTEw7CistLS0gYS9kcml2ZXJzL25ldC9waHkvc2ZwLmMKKysrKyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuYworQEAgLTU5LDYgKzU5LDcgQEAgZW51bSB7CisgCVNGUF9ERVZfVVAsCisgCisgCVNGUF9TX0RPV04gPSAwLAorKwlTRlBfU19GQUlMLAorIAlTRlBfU19XQUlULAorIAlTRlBfU19JTklULAorIAlTRlBfU19JTklUX1RYX0ZBVUxULAorQEAgLTEyMiw2ICsxMjMsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqZXZlbnRfdG9fc3RyKHVuc2lnbmVkCisgCisgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzbV9zdGF0ZV9zdHJpbmdzW10gPSB7CisgCVtTRlBfU19ET1dOXSA9ICJkb3duIiwKKysJW1NGUF9TX0ZBSUxdID0gImZhaWwiLAorIAlbU0ZQX1NfV0FJVF0gPSAid2FpdCIsCisgCVtTRlBfU19JTklUXSA9ICJpbml0IiwKKyAJW1NGUF9TX0lOSVRfVFhfRkFVTFRdID0gImluaXRfdHhfZmF1bHQiLAorQEAgLTE5MTgsNiArMTkyMCw4IEBAIHN0YXRpYyB2b2lkIHNmcF9zbV9tYWluKHN0cnVjdCBzZnAgKnNmcCwKKyAJCWlmIChzZnAtPnNtX3N0YXRlID09IFNGUF9TX0xJTktfVVAgJiYKKyAJCSAgICBzZnAtPnNtX2Rldl9zdGF0ZSA9PSBTRlBfREVWX1VQKQorIAkJCXNmcF9zbV9saW5rX2Rvd24oc2ZwKTsKKysJCWlmIChzZnAtPnNtX3N0YXRlID4gU0ZQX1NfSU5JVCkKKysJCQlzZnBfbW9kdWxlX3N0b3Aoc2ZwLT5zZnBfYnVzKTsKKyAJCWlmIChzZnAtPm1vZF9waHkpCisgCQkJc2ZwX3NtX3BoeV9kZXRhY2goc2ZwKTsKKyAJCXNmcF9tb2R1bGVfdHhfZGlzYWJsZShzZnApOworQEAgLTE5ODUsNiArMTk4OSwxMCBAQCBzdGF0aWMgdm9pZCBzZnBfc21fbWFpbihzdHJ1Y3Qgc2ZwICpzZnAsCisgCQkJICogY2xlYXIuICBQcm9iZSBmb3IgdGhlIFBIWSBhbmQgY2hlY2sgdGhlIExPUyBzdGF0ZS4KKyAJCQkgKi8KKyAJCQlzZnBfc21fcHJvYmVfZm9yX3BoeShzZnApOworKwkJCWlmIChzZnBfbW9kdWxlX3N0YXJ0KHNmcC0+c2ZwX2J1cykpIHsKKysJCQkJc2ZwX3NtX25leHQoc2ZwLCBTRlBfU19GQUlMLCAwKTsKKysJCQkJYnJlYWs7CisrCQkJfQorIAkJCXNmcF9zbV9saW5rX2NoZWNrX2xvcyhzZnApOworIAorIAkJCS8qIFJlc2V0IHRoZSBmYXVsdCByZXRyeSBjb3VudCAqLworLS0tIGEvZHJpdmVycy9uZXQvcGh5L3NmcC5oCisrKysgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmgKK0BAIC0yMiw2ICsyMiw4IEBAIHZvaWQgc2ZwX2xpbmtfdXAoc3RydWN0IHNmcF9idXMgKmJ1cyk7Cisgdm9pZCBzZnBfbGlua19kb3duKHN0cnVjdCBzZnBfYnVzICpidXMpOworIGludCBzZnBfbW9kdWxlX2luc2VydChzdHJ1Y3Qgc2ZwX2J1cyAqYnVzLCBjb25zdCBzdHJ1Y3Qgc2ZwX2VlcHJvbV9pZCAqaWQpOworIHZvaWQgc2ZwX21vZHVsZV9yZW1vdmUoc3RydWN0IHNmcF9idXMgKmJ1cyk7CisraW50IHNmcF9tb2R1bGVfc3RhcnQoc3RydWN0IHNmcF9idXMgKmJ1cyk7Cisrdm9pZCBzZnBfbW9kdWxlX3N0b3Aoc3RydWN0IHNmcF9idXMgKmJ1cyk7CisgaW50IHNmcF9saW5rX2NvbmZpZ3VyZShzdHJ1Y3Qgc2ZwX2J1cyAqYnVzLCBjb25zdCBzdHJ1Y3Qgc2ZwX2VlcHJvbV9pZCAqaWQpOworIHN0cnVjdCBzZnBfYnVzICpzZnBfcmVnaXN0ZXJfc29ja2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNmcCAqc2ZwLAorIAkJCQkgICAgY29uc3Qgc3RydWN0IHNmcF9zb2NrZXRfb3BzICpvcHMpOworLS0tIGEvaW5jbHVkZS9saW51eC9zZnAuaAorKysrIGIvaW5jbHVkZS9saW51eC9zZnAuaAorQEAgLTUwNyw2ICs1MDcsOCBAQCBzdHJ1Y3Qgc2ZwX2J1czsKKyAgKiBAbW9kdWxlX2luc2VydDogY2FsbGVkIGFmdGVyIGEgbW9kdWxlIGhhcyBiZWVuIGRldGVjdGVkIHRvIGRldGVybWluZQorICAqICAgd2hldGhlciB0aGUgbW9kdWxlIGlzIHN1cHBvcnRlZCBmb3IgdGhlIHVwc3RyZWFtIGRldmljZS4KKyAgKiBAbW9kdWxlX3JlbW92ZTogY2FsbGVkIGFmdGVyIHRoZSBtb2R1bGUgaGFzIGJlZW4gcmVtb3ZlZC4KKysgKiBAbW9kdWxlX3N0YXJ0OiBjYWxsZWQgYWZ0ZXIgdGhlIFBIWSBwcm9iZSBzdGVwCisrICogQG1vZHVsZV9zdG9wOiBjYWxsZWQgYmVmb3JlIHRoZSBQSFkgaXMgcmVtb3ZlZAorICAqIEBsaW5rX2Rvd246IGNhbGxlZCB3aGVuIHRoZSBsaW5rIGlzIG5vbi1vcGVyYXRpb25hbCBmb3Igd2hhdGV2ZXIKKyAgKiAgIHJlYXNvbi4KKyAgKiBAbGlua191cDogY2FsbGVkIHdoZW4gdGhlIGxpbmsgaXMgb3BlcmF0aW9uYWwuCitAQCAtNTIwLDYgKzUyMiw4IEBAIHN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzIHsKKyAJdm9pZCAoKmRldGFjaCkodm9pZCAqcHJpdiwgc3RydWN0IHNmcF9idXMgKmJ1cyk7CisgCWludCAoKm1vZHVsZV9pbnNlcnQpKHZvaWQgKnByaXYsIGNvbnN0IHN0cnVjdCBzZnBfZWVwcm9tX2lkICppZCk7CisgCXZvaWQgKCptb2R1bGVfcmVtb3ZlKSh2b2lkICpwcml2KTsKKysJaW50ICgqbW9kdWxlX3N0YXJ0KSh2b2lkICpwcml2KTsKKysJdm9pZCAoKm1vZHVsZV9zdG9wKSh2b2lkICpwcml2KTsKKyAJdm9pZCAoKmxpbmtfZG93bikodm9pZCAqcHJpdik7CisgCXZvaWQgKCpsaW5rX3VwKSh2b2lkICpwcml2KTsKKyAJaW50ICgqY29ubmVjdF9waHkpKHZvaWQgKnByaXYsIHN0cnVjdCBwaHlfZGV2aWNlICopOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzQ0LW5ldC1zZnAtbW92ZS1waHlfc3RhcnQtcGh5X3N0b3AtdG8tcGh5bGluay5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40Lzc0NC1uZXQtc2ZwLW1vdmUtcGh5X3N0YXJ0LXBoeV9zdG9wLXRvLXBoeWxpbmsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg5ODdkNQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40Lzc0NC1uZXQtc2ZwLW1vdmUtcGh5X3N0YXJ0LXBoeV9zdG9wLXRvLXBoeWxpbmsucGF0Y2gKQEAgLTAsMCArMSw3MiBAQAorRnJvbSBlMmRjMjYxYjg3MmE5MmEwNTVlYjJlODZhYzEzNmJhZjliMjBmMmYyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KK0RhdGU6IFRodSwgMjEgTm92IDIwMTkgMTc6MjE6MzMgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCA2NDcvNjYwXSBuZXQ6IHNmcDogbW92ZSBwaHlfc3RhcnQoKS9waHlfc3RvcCgpIHRvIHBoeWxpbmsKKworTW92ZSBwaHlfc3RhcnQoKSBhbmQgcGh5X3N0b3AoKSBpbnRvIHRoZSBtb2R1bGVfc3RhcnQgYW5kIG1vZHVsZV9zdG9wCitub3RpZmljYXRpb25zIGluIHBoeWxpbmssIHJhdGhlciB0aGFuIGhhdmluZyB0aGVtIGluIHRoZSBTRlAgY29kZS4KK1RoaXMgZ2l2ZXMgcGh5bGluayByZXNwb25zaWJpbGl0eSBmb3IgY29udHJvbGxpbmcgdGhlIFBIWSwgcmF0aGVyCit0aGFuIGhhdmluZyBTRlAgc3RhcnQgYW5kIHN0b3AgdGhlIFBIWSBzdGF0ZSBtYWNoaW5lLgorCitTaWduZWQtb2ZmLWJ5OiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorLS0tCisgZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyB8IDIyICsrKysrKysrKysrKysrKysrKysrKysKKyBkcml2ZXJzL25ldC9waHkvc2ZwLmMgICAgIHwgIDIgLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDIyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMKKysrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMKK0BAIC0xNzcyLDYgKzE3NzIsMjYgQEAgc3RhdGljIGludCBwaHlsaW5rX3NmcF9tb2R1bGVfaW5zZXJ0KHZvaQorIAlyZXR1cm4gcmV0OworIH0KKyAKKytzdGF0aWMgaW50IHBoeWxpbmtfc2ZwX21vZHVsZV9zdGFydCh2b2lkICp1cHN0cmVhbSkKKyt7CisrCXN0cnVjdCBwaHlsaW5rICpwbCA9IHVwc3RyZWFtOworKworKwkvKiBJZiB0aGlzIFNGUCBtb2R1bGUgaGFzIGEgUEhZLCBzdGFydCB0aGUgUEhZIG5vdy4gKi8KKysJaWYgKHBsLT5waHlkZXYpCisrCQlwaHlfc3RhcnQocGwtPnBoeWRldik7CisrCQkKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyB2b2lkIHBoeWxpbmtfc2ZwX21vZHVsZV9zdG9wKHZvaWQgKnVwc3RyZWFtKQorK3sKKysJc3RydWN0IHBoeWxpbmsgKnBsID0gdXBzdHJlYW07CisrCisrCS8qIElmIHRoaXMgU0ZQIG1vZHVsZSBoYXMgYSBQSFksIHN0b3AgaXQuICovCisrCWlmIChwbC0+cGh5ZGV2KQorKwkJcGh5X3N0b3AocGwtPnBoeWRldik7CisrfQorKworIHN0YXRpYyB2b2lkIHBoeWxpbmtfc2ZwX2xpbmtfZG93bih2b2lkICp1cHN0cmVhbSkKKyB7CisgCXN0cnVjdCBwaHlsaW5rICpwbCA9IHVwc3RyZWFtOworQEAgLTE4MDcsNiArMTgyNyw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyBzZnAKKyAJLmF0dGFjaCA9IHBoeWxpbmtfc2ZwX2F0dGFjaCwKKyAJLmRldGFjaCA9IHBoeWxpbmtfc2ZwX2RldGFjaCwKKyAJLm1vZHVsZV9pbnNlcnQgPSBwaHlsaW5rX3NmcF9tb2R1bGVfaW5zZXJ0LAorKwkubW9kdWxlX3N0YXJ0ID0gcGh5bGlua19zZnBfbW9kdWxlX3N0YXJ0LAorKwkubW9kdWxlX3N0b3AgPSBwaHlsaW5rX3NmcF9tb2R1bGVfc3RvcCwKKyAJLmxpbmtfdXAgPSBwaHlsaW5rX3NmcF9saW5rX3VwLAorIAkubGlua19kb3duID0gcGh5bGlua19zZnBfbGlua19kb3duLAorIAkuY29ubmVjdF9waHkgPSBwaHlsaW5rX3NmcF9jb25uZWN0X3BoeSwKKy0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYworKysrIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jCitAQCAtMTQxMiw3ICsxNDEyLDYgQEAgc3RhdGljIHZvaWQgc2ZwX3NtX21vZF9uZXh0KHN0cnVjdCBzZnAgKgorIAorIHN0YXRpYyB2b2lkIHNmcF9zbV9waHlfZGV0YWNoKHN0cnVjdCBzZnAgKnNmcCkKKyB7CistCXBoeV9zdG9wKHNmcC0+bW9kX3BoeSk7CisgCXNmcF9yZW1vdmVfcGh5KHNmcC0+c2ZwX2J1cyk7CisgCXBoeV9kZXZpY2VfcmVtb3ZlKHNmcC0+bW9kX3BoeSk7CisgCXBoeV9kZXZpY2VfZnJlZShzZnAtPm1vZF9waHkpOworQEAgLTE0NDMsNyArMTQ0Miw2IEBAIHN0YXRpYyB2b2lkIHNmcF9zbV9wcm9iZV9waHkoc3RydWN0IHNmcAorIAl9CisgCisgCXNmcC0+bW9kX3BoeSA9IHBoeTsKKy0JcGh5X3N0YXJ0KHBoeSk7CisgfQorIAorIHN0YXRpYyB2b2lkIHNmcF9zbV9saW5rX3VwKHN0cnVjdCBzZnAgKnNmcCkKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40Lzc0NS1uZXQtbWRpby1pMmMtYWRkLXN1cHBvcnQtZm9yLUNsYXVzZS00NS1hY2Nlc3Nlcy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40Lzc0NS1uZXQtbWRpby1pMmMtYWRkLXN1cHBvcnQtZm9yLUNsYXVzZS00NS1hY2Nlc3Nlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjFhOTRiCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzQ1LW5ldC1tZGlvLWkyYy1hZGQtc3VwcG9ydC1mb3ItQ2xhdXNlLTQ1LWFjY2Vzc2VzLnBhdGNoCkBAIC0wLDAgKzEsNzQgQEAKK0Zyb20gYzlkZTczOTg4YTM1YzZjODU4MTBhOTkyOTU0YWM1NjhjY2E1MDNlNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CitEYXRlOiBXZWQsIDIgT2N0IDIwMTkgMTA6MzE6MTAgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCA2NDgvNjYwXSBuZXQ6IG1kaW8taTJjOiBhZGQgc3VwcG9ydCBmb3IgQ2xhdXNlIDQ1IGFjY2Vzc2VzCisKK1NvbWUgU0ZQKyBtb2R1bGVzIGhhdmUgUEhZcyBvbiB0aGVtIGp1c3QgbGlrZSBTRlAgbW9kdWxlcyBkbywgZXhjZXB0Cit0aGV5IGFyZSBDbGF1c2UgNDUgUEhZcy4gIFRoZSBJMkMgcHJvdG9jb2wgdXNlZCB0byBhY2Nlc3MgdGhlbSBpcworbW9kaWZpZWQgc2xpZ2h0bHkgaW4gb3JkZXIgdG8gc2VuZCB0aGUgZGV2aWNlIGFkZHJlc3MgYW5kIDE2LWJpdAorcmVnaXN0ZXIgaW5kZXguCisKK1NpZ25lZC1vZmYtYnk6IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CistLS0KKyBkcml2ZXJzL25ldC9waHkvbWRpby1pMmMuYyB8IDI4ICsrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9uZXQvcGh5L21kaW8taTJjLmMKKysrKyBiL2RyaXZlcnMvbmV0L3BoeS9tZGlvLWkyYy5jCitAQCAtMzMsMTcgKzMzLDI0IEBAIHN0YXRpYyBpbnQgaTJjX21paV9yZWFkKHN0cnVjdCBtaWlfYnVzICoKKyB7CisgCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjID0gYnVzLT5wcml2OworIAlzdHJ1Y3QgaTJjX21zZyBtc2dzWzJdOworLQl1OCBkYXRhWzJdLCBkZXZfYWRkciA9IHJlZzsKKysJdTggYWRkclszXSwgZGF0YVsyXSwgKnA7CisgCWludCBidXNfYWRkciwgcmV0OworIAorIAlpZiAoIWkyY19taWlfdmFsaWRfcGh5X2lkKHBoeV9pZCkpCisgCQlyZXR1cm4gMHhmZmZmOworIAorKwlwID0gYWRkcjsKKysJaWYgKHJlZyAmIE1JSV9BRERSX0M0NSkgeworKwkJKnArKyA9IDB4MjAgfCAoKHJlZyA+PiAxNikgJiAzMSk7CisrCQkqcCsrID0gcmVnID4+IDg7CisrCX0KKysJKnArKyA9IHJlZzsKKysKKyAJYnVzX2FkZHIgPSBpMmNfbWlpX3BoeV9hZGRyKHBoeV9pZCk7CisgCW1zZ3NbMF0uYWRkciA9IGJ1c19hZGRyOworIAltc2dzWzBdLmZsYWdzID0gMDsKKy0JbXNnc1swXS5sZW4gPSAxOworLQltc2dzWzBdLmJ1ZiA9ICZkZXZfYWRkcjsKKysJbXNnc1swXS5sZW4gPSBwIC0gYWRkcjsKKysJbXNnc1swXS5idWYgPSBhZGRyOworIAltc2dzWzFdLmFkZHIgPSBidXNfYWRkcjsKKyAJbXNnc1sxXS5mbGFncyA9IEkyQ19NX1JEOworIAltc2dzWzFdLmxlbiA9IHNpemVvZihkYXRhKTsKK0BAIC02MSwxOCArNjgsMjMgQEAgc3RhdGljIGludCBpMmNfbWlpX3dyaXRlKHN0cnVjdCBtaWlfYnVzCisgCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjID0gYnVzLT5wcml2OworIAlzdHJ1Y3QgaTJjX21zZyBtc2c7CisgCWludCByZXQ7CistCXU4IGRhdGFbM107CisrCXU4IGRhdGFbNV0sICpwOworIAorIAlpZiAoIWkyY19taWlfdmFsaWRfcGh5X2lkKHBoeV9pZCkpCisgCQlyZXR1cm4gMDsKKyAKKy0JZGF0YVswXSA9IHJlZzsKKy0JZGF0YVsxXSA9IHZhbCA+PiA4OworLQlkYXRhWzJdID0gdmFsOworKwlwID0gZGF0YTsKKysJaWYgKHJlZyAmIE1JSV9BRERSX0M0NSkgeworKwkJKnArKyA9IChyZWcgPj4gMTYpICYgMzE7CisrCQkqcCsrID0gcmVnID4+IDg7CisrCX0KKysJKnArKyA9IHJlZzsKKysJKnArKyA9IHZhbCA+PiA4OworKwkqcCsrID0gdmFsOworIAorIAltc2cuYWRkciA9IGkyY19taWlfcGh5X2FkZHIocGh5X2lkKTsKKyAJbXNnLmZsYWdzID0gMDsKKy0JbXNnLmxlbiA9IDM7CisrCW1zZy5sZW4gPSBwIC0gZGF0YTsKKyAJbXNnLmJ1ZiA9IGRhdGE7CisgCisgCXJldCA9IGkyY190cmFuc2ZlcihpMmMsICZtc2csIDEpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzQ2LW5ldC1waHlsaW5rLXJlLXNwbGl0LV9fcGh5bGlua19jb25uZWN0X3BoeS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40Lzc0Ni1uZXQtcGh5bGluay1yZS1zcGxpdC1fX3BoeWxpbmtfY29ubmVjdF9waHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU0N2ExOAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40Lzc0Ni1uZXQtcGh5bGluay1yZS1zcGxpdC1fX3BoeWxpbmtfY29ubmVjdF9waHkucGF0Y2gKQEAgLTAsMCArMSw5MyBAQAorRnJvbSAwZGI3ZmJhNzQ2YjU2MDhjMzBkNGUyYmExYzk5YTJhMzA5ZTJkMjg4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KK0RhdGU6IEZyaSwgOCBOb3YgMjAxOSAxNToyMjo0OCArMDAwMAorU3ViamVjdDogW1BBVENIIDY0OS82NjBdIG5ldDogcGh5bGluazogcmUtc3BsaXQgX19waHlsaW5rX2Nvbm5lY3RfcGh5KCkKKworSW4gb3JkZXIgdG8gc3VwcG9ydCBDbGF1c2UgNDUgUEhZcyBvbiBTRlArIG1vZHVsZXMsIHdoaWNoIGhhdmUgYW4KK2luZGV0ZXJtaW5hbnQgcGh5IGludGVyZmFjZSBtb2RlLCB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gY2FsbAorcGh5bGlua19icmluZ3VwX3BoeSgpIHdpdGggYSBkaWZmZXJlbnQgaW50ZXJmYWNlIG1vZGUgdG8gdGhhdCB1c2VkIHdoZW4KK2JpbmRpbmcgdGhlIFBIWS4gUmVkdWNlIF9fcGh5bGlua19jb25uZWN0X3BoeSgpIHRvIGFuIGF0dGFjaCBvcGVyYXRpb24sCithbmQgbW92ZSB0aGUgY2FsbCB0byBwaHlsaW5rX2JyaW5ndXBfcGh5KCkgdG8gaXRzIGNhbGwgc2l0ZXMuCisKK1NpZ25lZC1vZmYtYnk6IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CistLS0KKyBkcml2ZXJzL25ldC9waHkvcGh5bGluay5jIHwgMzkgKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDI0IGluc2VydGlvbnMoKyksIDE1IGRlbGV0aW9ucygtKQorCistLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jCisrKysgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jCitAQCAtNzY1LDExICs3NjUsOSBAQCBzdGF0aWMgaW50IHBoeWxpbmtfYnJpbmd1cF9waHkoc3RydWN0IHBoCisgCXJldHVybiAwOworIH0KKyAKKy1zdGF0aWMgaW50IF9fcGh5bGlua19jb25uZWN0X3BoeShzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksCistCQlwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKQorK3N0YXRpYyBpbnQgcGh5bGlua19hdHRhY2hfcGh5KHN0cnVjdCBwaHlsaW5rICpwbCwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSwKKysJCQkgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKQorIHsKKy0JaW50IHJldDsKKy0KKyAJaWYgKFdBUk5fT04ocGwtPmxpbmtfYW5fbW9kZSA9PSBNTE9fQU5fRklYRUQgfHwKKyAJCSAgICAocGwtPmxpbmtfYW5fbW9kZSA9PSBNTE9fQU5fSU5CQU5EICYmCisgCQkgICAgIHBoeV9pbnRlcmZhY2VfbW9kZV9pc184MDIzeihpbnRlcmZhY2UpKSkpCitAQCAtNzc4LDE1ICs3NzYsNyBAQCBzdGF0aWMgaW50IF9fcGh5bGlua19jb25uZWN0X3BoeShzdHJ1Y3QKKyAJaWYgKHBsLT5waHlkZXYpCisgCQlyZXR1cm4gLUVCVVNZOworIAorLQlyZXQgPSBwaHlfYXR0YWNoX2RpcmVjdChwbC0+bmV0ZGV2LCBwaHksIDAsIGludGVyZmFjZSk7CistCWlmIChyZXQpCistCQlyZXR1cm4gcmV0OworLQorLQlyZXQgPSBwaHlsaW5rX2JyaW5ndXBfcGh5KHBsLCBwaHkpOworLQlpZiAocmV0KQorLQkJcGh5X2RldGFjaChwaHkpOworLQorLQlyZXR1cm4gcmV0OworKwlyZXR1cm4gcGh5X2F0dGFjaF9kaXJlY3QocGwtPm5ldGRldiwgcGh5LCAwLCBpbnRlcmZhY2UpOworIH0KKyAKKyAvKioKK0BAIC04MDYsMTMgKzc5NiwyMyBAQCBzdGF0aWMgaW50IF9fcGh5bGlua19jb25uZWN0X3BoeShzdHJ1Y3QKKyAgKi8KKyBpbnQgcGh5bGlua19jb25uZWN0X3BoeShzdHJ1Y3QgcGh5bGluayAqcGwsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpCisgeworKwlpbnQgcmV0OworKworIAkvKiBVc2UgUEhZIGRldmljZS9kcml2ZXIgaW50ZXJmYWNlICovCisgCWlmIChwbC0+bGlua19pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX05BKSB7CisgCQlwbC0+bGlua19pbnRlcmZhY2UgPSBwaHktPmludGVyZmFjZTsKKyAJCXBsLT5saW5rX2NvbmZpZy5pbnRlcmZhY2UgPSBwbC0+bGlua19pbnRlcmZhY2U7CisgCX0KKyAKKy0JcmV0dXJuIF9fcGh5bGlua19jb25uZWN0X3BoeShwbCwgcGh5LCBwbC0+bGlua19pbnRlcmZhY2UpOworKwlyZXQgPSBwaHlsaW5rX2F0dGFjaF9waHkocGwsIHBoeSwgcGwtPmxpbmtfaW50ZXJmYWNlKTsKKysJaWYgKHJldCA8IDApCisrCQlyZXR1cm4gcmV0OworKworKwlyZXQgPSBwaHlsaW5rX2JyaW5ndXBfcGh5KHBsLCBwaHkpOworKwlpZiAocmV0KQorKwkJcGh5X2RldGFjaChwaHkpOworKworKwlyZXR1cm4gcmV0OworIH0KKyBFWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2Nvbm5lY3RfcGh5KTsKKyAKK0BAIC0xODE0LDggKzE4MTQsMTcgQEAgc3RhdGljIHZvaWQgcGh5bGlua19zZnBfbGlua191cCh2b2lkICp1cAorIHN0YXRpYyBpbnQgcGh5bGlua19zZnBfY29ubmVjdF9waHkodm9pZCAqdXBzdHJlYW0sIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpCisgeworIAlzdHJ1Y3QgcGh5bGluayAqcGwgPSB1cHN0cmVhbTsKKysJaW50IHJldDsKKyAKKy0JcmV0dXJuIF9fcGh5bGlua19jb25uZWN0X3BoeSh1cHN0cmVhbSwgcGh5LCBwbC0+bGlua19jb25maWcuaW50ZXJmYWNlKTsKKysJcmV0ID0gcGh5bGlua19hdHRhY2hfcGh5KHBsLCBwaHksIHBsLT5saW5rX2NvbmZpZy5pbnRlcmZhY2UpOworKwlpZiAocmV0IDwgMCkKKysJCXJldHVybiByZXQ7CisrCisrCXJldCA9IHBoeWxpbmtfYnJpbmd1cF9waHkocGwsIHBoeSk7CisrCWlmIChyZXQpCisrCQlwaHlfZGV0YWNoKHBoeSk7CisrCisrCXJldHVybiByZXQ7CisgfQorIAorIHN0YXRpYyB2b2lkIHBoeWxpbmtfc2ZwX2Rpc2Nvbm5lY3RfcGh5KHZvaWQgKnVwc3RyZWFtKQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzQ3LW5ldC1waHlsaW5rLXN1cHBvcnQtQ2xhdXNlLTQ1LVBIWXMtb24tU0ZQLW1vZHVsZXMucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC83NDctbmV0LXBoeWxpbmstc3VwcG9ydC1DbGF1c2UtNDUtUEhZcy1vbi1TRlAtbW9kdWxlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzNkZTEwCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzQ3LW5ldC1waHlsaW5rLXN1cHBvcnQtQ2xhdXNlLTQ1LVBIWXMtb24tU0ZQLW1vZHVsZXMucGF0Y2gKQEAgLTAsMCArMSw4OSBAQAorRnJvbSBjYWYzMmY5NmYxM2RmN2QzYWU2Y2I4YmY4MDAxYzg4YWUyMjAyNWNhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KK0RhdGU6IEZyaSwgOCBOb3YgMjAxOSAxNToyODoyMiArMDAwMAorU3ViamVjdDogW1BBVENIIDY1MC82NjBdIG5ldDogcGh5bGluazogc3VwcG9ydCBDbGF1c2UgNDUgUEhZcyBvbiBTRlArIG1vZHVsZXMKKworU29tZSBTRlArIG1vZHVsZXMgaGF2ZSBDbGF1c2UgNDUgUEhZcyBlbWJlZGRlZCBvbiB0aGVtLCB3aGljaCBuZWVkIGEKK2xpdHRsZSBtb3JlIGhhbmRsaW5nIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IHRoZXkgYXJlIGNvcnJlY3RseSBzZXR1cCwKK2FzIHRoZXkgc3dpdGNoIHRoZSBQSFkgbGluayBtb2RlIGFjY29yZGluZyB0byB0aGUgbmVnb3RpYXRlZCBzcGVlZC4KKworV2l0aCBDbGF1c2UgMjIgUEhZcywgd2UgYXNzdW1lZCB0aGF0IHRoZXkgd291bGQgb3BlcmF0ZSBpbiBTR01JSSBtb2RlLAorYnV0IHRoaXMgYXNzdW1wdGlvbiBpcyBub3cgZmFsc2UuICBBZGFwdCBwaHlsaW5rIHRvIHN1cHBvcnQgQ2xhdXNlIDQ1CitQSFlzIG9uIFNGUCsgbW9kdWxlcy4KKworU2lnbmVkLW9mZi1ieTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KKy0tLQorIGRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMgfCAyMSArKysrKysrKysrKysrKysrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYworKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYworQEAgLTcxMiw3ICs3MTIsOCBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX3BoeV9jaGFuZ2Uoc3RydWN0IHBoCisgCQkgICAgcGh5X2R1cGxleF90b19zdHIocGh5ZGV2LT5kdXBsZXgpKTsKKyB9CisgCistc3RhdGljIGludCBwaHlsaW5rX2JyaW5ndXBfcGh5KHN0cnVjdCBwaHlsaW5rICpwbCwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSkKKytzdGF0aWMgaW50IHBoeWxpbmtfYnJpbmd1cF9waHkoc3RydWN0IHBoeWxpbmsgKnBsLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LAorKwkJCSAgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKQorIHsKKyAJc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSBjb25maWc7CisgCV9fRVRIVE9PTF9ERUNMQVJFX0xJTktfTU9ERV9NQVNLKHN1cHBvcnRlZCk7CitAQCAtNzMwLDcgKzczMSw3IEBAIHN0YXRpYyBpbnQgcGh5bGlua19icmluZ3VwX3BoeShzdHJ1Y3QgcGgKKyAJbWVtc2V0KCZjb25maWcsIDAsIHNpemVvZihjb25maWcpKTsKKyAJbGlua21vZGVfY29weShzdXBwb3J0ZWQsIHBoeS0+c3VwcG9ydGVkKTsKKyAJbGlua21vZGVfY29weShjb25maWcuYWR2ZXJ0aXNpbmcsIHBoeS0+YWR2ZXJ0aXNpbmcpOworLQljb25maWcuaW50ZXJmYWNlID0gcGwtPmxpbmtfY29uZmlnLmludGVyZmFjZTsKKysJY29uZmlnLmludGVyZmFjZSA9IGludGVyZmFjZTsKKyAKKyAJcmV0ID0gcGh5bGlua192YWxpZGF0ZShwbCwgc3VwcG9ydGVkLCAmY29uZmlnKTsKKyAJaWYgKHJldCkKK0BAIC03NDYsNiArNzQ3LDcgQEAgc3RhdGljIGludCBwaHlsaW5rX2JyaW5ndXBfcGh5KHN0cnVjdCBwaAorIAltdXRleF9sb2NrKCZwaHktPmxvY2spOworIAltdXRleF9sb2NrKCZwbC0+c3RhdGVfbXV0ZXgpOworIAlwbC0+cGh5ZGV2ID0gcGh5OworKwlwbC0+cGh5X3N0YXRlLmludGVyZmFjZSA9IGludGVyZmFjZTsKKyAJbGlua21vZGVfY29weShwbC0+c3VwcG9ydGVkLCBzdXBwb3J0ZWQpOworIAlsaW5rbW9kZV9jb3B5KHBsLT5saW5rX2NvbmZpZy5hZHZlcnRpc2luZywgY29uZmlnLmFkdmVydGlzaW5nKTsKKyAKK0BAIC04MDgsNyArODEwLDcgQEAgaW50IHBoeWxpbmtfY29ubmVjdF9waHkoc3RydWN0IHBoeWxpbmsgKgorIAlpZiAocmV0IDwgMCkKKyAJCXJldHVybiByZXQ7CisgCistCXJldCA9IHBoeWxpbmtfYnJpbmd1cF9waHkocGwsIHBoeSk7CisrCXJldCA9IHBoeWxpbmtfYnJpbmd1cF9waHkocGwsIHBoeSwgcGwtPmxpbmtfY29uZmlnLmludGVyZmFjZSk7CisgCWlmIChyZXQpCisgCQlwaHlfZGV0YWNoKHBoeSk7CisgCitAQCAtODYxLDcgKzg2Myw3IEBAIGludCBwaHlsaW5rX29mX3BoeV9jb25uZWN0KHN0cnVjdCBwaHlsaW4KKyAJaWYgKCFwaHlfZGV2KQorIAkJcmV0dXJuIC1FTk9ERVY7CisgCistCXJldCA9IHBoeWxpbmtfYnJpbmd1cF9waHkocGwsIHBoeV9kZXYpOworKwlyZXQgPSBwaHlsaW5rX2JyaW5ndXBfcGh5KHBsLCBwaHlfZGV2LCBwbC0+bGlua19jb25maWcuaW50ZXJmYWNlKTsKKyAJaWYgKHJldCkKKyAJCXBoeV9kZXRhY2gocGh5X2Rldik7CisgCitAQCAtMTgxNCwxMyArMTgxNiwyMiBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX3NmcF9saW5rX3VwKHZvaWQgKnVwCisgc3RhdGljIGludCBwaHlsaW5rX3NmcF9jb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSkKKyB7CisgCXN0cnVjdCBwaHlsaW5rICpwbCA9IHVwc3RyZWFtOworKwlwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlID0gcGwtPmxpbmtfY29uZmlnLmludGVyZmFjZTsKKyAJaW50IHJldDsKKyAKKyAJcmV0ID0gcGh5bGlua19hdHRhY2hfcGh5KHBsLCBwaHksIHBsLT5saW5rX2NvbmZpZy5pbnRlcmZhY2UpOworIAlpZiAocmV0IDwgMCkKKyAJCXJldHVybiByZXQ7CisgCistCXJldCA9IHBoeWxpbmtfYnJpbmd1cF9waHkocGwsIHBoeSk7CisrCS8qIENsYXVzZSA0NSBQSFlzIHN3aXRjaCB0aGVpciBTZXJkZXMgbGFuZSBiZXR3ZWVuIHNldmVyYWwgZGlmZmVyZW50CisrCSAqIG1vZGVzLCBub3JtYWxseSAxMEdCQVNFLVIsIFNHTUlJLiBTb21lIHVzZSAyNTAwQkFTRS1YIGZvciAyLjVHCisrCSAqIHNwZWVkcy4gIFdlIHJlYWxseSBuZWVkIHRvIGtub3cgd2hpY2ggaW50ZXJmYWNlIG1vZGVzIHRoZSBQSFkgYW5kCisrCSAqIE1BQyBzdXBwb3J0cyB0byBwcm9wZXJseSB3b3JrIG91dCB3aGljaCBsaW5rbW9kZXMgY2FuIGJlIHN1cHBvcnRlZC4KKysJICovCisrCWlmIChwaHktPmlzX2M0NSkKKysJCWludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQTsKKysKKysJcmV0ID0gcGh5bGlua19icmluZ3VwX3BoeShwbCwgcGh5LCBpbnRlcmZhY2UpOworIAlpZiAocmV0KQorIAkJcGh5X2RldGFjaChwaHkpOworIApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzQ4LW5ldC1waHlsaW5rLXNwbGl0LWxpbmtfYW5fbW9kZS1jb25maWd1cmVkLWFuZC1jdXJyZW4ucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC83NDgtbmV0LXBoeWxpbmstc3BsaXQtbGlua19hbl9tb2RlLWNvbmZpZ3VyZWQtYW5kLWN1cnJlbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWYyMWRiCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzQ4LW5ldC1waHlsaW5rLXNwbGl0LWxpbmtfYW5fbW9kZS1jb25maWd1cmVkLWFuZC1jdXJyZW4ucGF0Y2gKQEAgLTAsMCArMSwyNTcgQEAKK0Zyb20gZDEzMzlkNjk1NmYwMjU1YjZjZTI0MTIzMjhhOTg5NDViZThjYzNjYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CitEYXRlOiBTYXQsIDE2IE5vdiAyMDE5IDExOjMwOjE4ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggNjUxLzY2MF0gbmV0OiBwaHlsaW5rOiBzcGxpdCBsaW5rX2FuX21vZGUgY29uZmlndXJlZCBhbmQKKyBjdXJyZW50IHNldHRpbmdzCisKK1NwbGl0IGxpbmtfYW5fbW9kZSBiZXR3ZWVuIHRoZSBjb25maWd1cmVkIHNldHRpbmcgYW5kIHRoZSBjdXJyZW50CitvcGVyYXRpbmcgc2V0dGluZy4gIFRoaXMgaXMgYW4gaW1wb3J0YW50IGRpc3RpbmN0aW9uIHRvIG1ha2Ugd2hlbiB3ZQorbmVlZCB0byBjb25maWd1cmUgUEhZIG1vZGUgZm9yIGEgcGx1Z2dlZCBTRlArIG1vZHVsZSB0aGF0IGRvZXMgbm90Cit1c2UgaW4tYmFuZCBzaWduYWxsaW5nLgorCitTaWduZWQtb2ZmLWJ5OiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorLS0tCisgZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyB8IDU5ICsrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzMSBpbnNlcnRpb25zKCspLCAyOCBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYworKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYworQEAgLTQ4LDcgKzQ4LDggQEAgc3RydWN0IHBoeWxpbmsgeworIAl1bnNpZ25lZCBsb25nIHBoeWxpbmtfZGlzYWJsZV9zdGF0ZTsgLyogYml0bWFzayBvZiBkaXNhYmxlcyAqLworIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OworIAlwaHlfaW50ZXJmYWNlX3QgbGlua19pbnRlcmZhY2U7CS8qIFBIWV9JTlRFUkZBQ0VfeHh4ICovCistCXU4IGxpbmtfYW5fbW9kZTsJCS8qIE1MT19BTl94eHggKi8KKysJdTggY2ZnX2xpbmtfYW5fbW9kZTsJCS8qIE1MT19BTl94eHggKi8KKysJdTggY3VyX2xpbmtfYW5fbW9kZTsKKyAJdTggbGlua19wb3J0OwkJCS8qIFRoZSBjdXJyZW50IG5vbi1waHkgZXRodG9vbCBwb3J0ICovCisgCV9fRVRIVE9PTF9ERUNMQVJFX0xJTktfTU9ERV9NQVNLKHN1cHBvcnRlZCk7CisgCitAQCAtMjU4LDEyICsyNTksMTIgQEAgc3RhdGljIGludCBwaHlsaW5rX3BhcnNlX21vZGUoc3RydWN0IHBoeQorIAorIAlkbiA9IGZ3bm9kZV9nZXRfbmFtZWRfY2hpbGRfbm9kZShmd25vZGUsICJmaXhlZC1saW5rIik7CisgCWlmIChkbiB8fCBmd25vZGVfcHJvcGVydHlfcHJlc2VudChmd25vZGUsICJmaXhlZC1saW5rIikpCistCQlwbC0+bGlua19hbl9tb2RlID0gTUxPX0FOX0ZJWEVEOworKwkJcGwtPmNmZ19saW5rX2FuX21vZGUgPSBNTE9fQU5fRklYRUQ7CisgCWZ3bm9kZV9oYW5kbGVfcHV0KGRuKTsKKyAKKyAJaWYgKGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3N0cmluZyhmd25vZGUsICJtYW5hZ2VkIiwgJm1hbmFnZWQpID09IDAgJiYKKyAJICAgIHN0cmNtcChtYW5hZ2VkLCAiaW4tYmFuZC1zdGF0dXMiKSA9PSAwKSB7CistCQlpZiAocGwtPmxpbmtfYW5fbW9kZSA9PSBNTE9fQU5fRklYRUQpIHsKKysJCWlmIChwbC0+Y2ZnX2xpbmtfYW5fbW9kZSA9PSBNTE9fQU5fRklYRUQpIHsKKyAJCQlwaHlsaW5rX2VycihwbCwKKyAJCQkJICAgICJjYW4ndCB1c2UgYm90aCBmaXhlZC1saW5rIGFuZCBpbi1iYW5kLXN0YXR1c1xuIik7CisgCQkJcmV0dXJuIC1FSU5WQUw7CitAQCAtMjc1LDcgKzI3Niw3IEBAIHN0YXRpYyBpbnQgcGh5bGlua19wYXJzZV9tb2RlKHN0cnVjdCBwaHkKKyAJCXBoeWxpbmtfc2V0KHBsLT5zdXBwb3J0ZWQsIEFzeW1fUGF1c2UpOworIAkJcGh5bGlua19zZXQocGwtPnN1cHBvcnRlZCwgUGF1c2UpOworIAkJcGwtPmxpbmtfY29uZmlnLmFuX2VuYWJsZWQgPSB0cnVlOworLQkJcGwtPmxpbmtfYW5fbW9kZSA9IE1MT19BTl9JTkJBTkQ7CisrCQlwbC0+Y2ZnX2xpbmtfYW5fbW9kZSA9IE1MT19BTl9JTkJBTkQ7CisgCisgCQlzd2l0Y2ggKHBsLT5saW5rX2NvbmZpZy5pbnRlcmZhY2UpIHsKKyAJCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOgorQEAgLTMzNSwxNCArMzM2LDE0IEBAIHN0YXRpYyB2b2lkIHBoeWxpbmtfbWFjX2NvbmZpZyhzdHJ1Y3QgcGgKKyB7CisgCXBoeWxpbmtfZGJnKHBsLAorIAkJICAgICIlczogbW9kZT0lcy8lcy8lcy8lcyBhZHY9JSpwYiBwYXVzZT0lMDJ4IGxpbms9JXUgYW49JXVcbiIsCistCQkgICAgX19mdW5jX18sIHBoeWxpbmtfYW5fbW9kZV9zdHIocGwtPmxpbmtfYW5fbW9kZSksCisrCQkgICAgX19mdW5jX18sIHBoeWxpbmtfYW5fbW9kZV9zdHIocGwtPmN1cl9saW5rX2FuX21vZGUpLAorIAkJICAgIHBoeV9tb2RlcyhzdGF0ZS0+aW50ZXJmYWNlKSwKKyAJCSAgICBwaHlfc3BlZWRfdG9fc3RyKHN0YXRlLT5zcGVlZCksCisgCQkgICAgcGh5X2R1cGxleF90b19zdHIoc3RhdGUtPmR1cGxleCksCisgCQkgICAgX19FVEhUT09MX0xJTktfTU9ERV9NQVNLX05CSVRTLCBzdGF0ZS0+YWR2ZXJ0aXNpbmcsCisgCQkgICAgc3RhdGUtPnBhdXNlLCBzdGF0ZS0+bGluaywgc3RhdGUtPmFuX2VuYWJsZWQpOworIAorLQlwbC0+b3BzLT5tYWNfY29uZmlnKHBsLT5jb25maWcsIHBsLT5saW5rX2FuX21vZGUsIHN0YXRlKTsKKysJcGwtPm9wcy0+bWFjX2NvbmZpZyhwbC0+Y29uZmlnLCBwbC0+Y3VyX2xpbmtfYW5fbW9kZSwgc3RhdGUpOworIH0KKyAKKyBzdGF0aWMgdm9pZCBwaHlsaW5rX21hY19jb25maWdfdXAoc3RydWN0IHBoeWxpbmsgKnBsLAorQEAgLTQ0Myw3ICs0NDQsNyBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX21hY19saW5rX3VwKHN0cnVjdCBwCisgCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGwtPm5ldGRldjsKKyAKKyAJcGwtPmN1cl9pbnRlcmZhY2UgPSBsaW5rX3N0YXRlLmludGVyZmFjZTsKKy0JcGwtPm9wcy0+bWFjX2xpbmtfdXAocGwtPmNvbmZpZywgcGwtPmxpbmtfYW5fbW9kZSwKKysJcGwtPm9wcy0+bWFjX2xpbmtfdXAocGwtPmNvbmZpZywgcGwtPmN1cl9saW5rX2FuX21vZGUsCisgCQkJICAgICBwbC0+Y3VyX2ludGVyZmFjZSwgcGwtPnBoeWRldik7CisgCisgCWlmIChuZGV2KQorQEAgLTQ2Miw3ICs0NjMsNyBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX21hY19saW5rX2Rvd24oc3RydWN0CisgCisgCWlmIChuZGV2KQorIAkJbmV0aWZfY2Fycmllcl9vZmYobmRldik7CistCXBsLT5vcHMtPm1hY19saW5rX2Rvd24ocGwtPmNvbmZpZywgcGwtPmxpbmtfYW5fbW9kZSwKKysJcGwtPm9wcy0+bWFjX2xpbmtfZG93bihwbC0+Y29uZmlnLCBwbC0+Y3VyX2xpbmtfYW5fbW9kZSwKKyAJCQkgICAgICAgcGwtPmN1cl9pbnRlcmZhY2UpOworIAlwaHlsaW5rX2luZm8ocGwsICJMaW5rIGlzIERvd25cbiIpOworIH0KK0BAIC00ODEsNyArNDgyLDcgQEAgc3RhdGljIHZvaWQgcGh5bGlua19yZXNvbHZlKHN0cnVjdCB3b3JrXworIAl9IGVsc2UgaWYgKHBsLT5tYWNfbGlua19kcm9wcGVkKSB7CisgCQlsaW5rX3N0YXRlLmxpbmsgPSBmYWxzZTsKKyAJfSBlbHNlIHsKKy0JCXN3aXRjaCAocGwtPmxpbmtfYW5fbW9kZSkgeworKwkJc3dpdGNoIChwbC0+Y3VyX2xpbmtfYW5fbW9kZSkgeworIAkJY2FzZSBNTE9fQU5fUEhZOgorIAkJCWxpbmtfc3RhdGUgPSBwbC0+cGh5X3N0YXRlOworIAkJCXBoeWxpbmtfcmVzb2x2ZV9mbG93KHBsLCAmbGlua19zdGF0ZSk7CitAQCAtNjQ5LDcgKzY1MCw3IEBAIHN0cnVjdCBwaHlsaW5rICpwaHlsaW5rX2NyZWF0ZShzdHJ1Y3QgcGgKKyAJCXJldHVybiBFUlJfUFRSKHJldCk7CisgCX0KKyAKKy0JaWYgKHBsLT5saW5rX2FuX21vZGUgPT0gTUxPX0FOX0ZJWEVEKSB7CisrCWlmIChwbC0+Y2ZnX2xpbmtfYW5fbW9kZSA9PSBNTE9fQU5fRklYRUQpIHsKKyAJCXJldCA9IHBoeWxpbmtfcGFyc2VfZml4ZWRsaW5rKHBsLCBmd25vZGUpOworIAkJaWYgKHJldCA8IDApIHsKKyAJCQlrZnJlZShwbCk7CitAQCAtNjU3LDYgKzY1OCw4IEBAIHN0cnVjdCBwaHlsaW5rICpwaHlsaW5rX2NyZWF0ZShzdHJ1Y3QgcGgKKyAJCX0KKyAJfQorIAorKwlwbC0+Y3VyX2xpbmtfYW5fbW9kZSA9IHBsLT5jZmdfbGlua19hbl9tb2RlOworKworIAlyZXQgPSBwaHlsaW5rX3JlZ2lzdGVyX3NmcChwbCwgZndub2RlKTsKKyAJaWYgKHJldCA8IDApIHsKKyAJCWtmcmVlKHBsKTsKK0BAIC03NzAsOCArNzczLDggQEAgc3RhdGljIGludCBwaHlsaW5rX2JyaW5ndXBfcGh5KHN0cnVjdCBwaAorIHN0YXRpYyBpbnQgcGh5bGlua19hdHRhY2hfcGh5KHN0cnVjdCBwaHlsaW5rICpwbCwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSwKKyAJCQkgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKQorIHsKKy0JaWYgKFdBUk5fT04ocGwtPmxpbmtfYW5fbW9kZSA9PSBNTE9fQU5fRklYRUQgfHwKKy0JCSAgICAocGwtPmxpbmtfYW5fbW9kZSA9PSBNTE9fQU5fSU5CQU5EICYmCisrCWlmIChXQVJOX09OKHBsLT5jZmdfbGlua19hbl9tb2RlID09IE1MT19BTl9GSVhFRCB8fAorKwkJICAgIChwbC0+Y2ZnX2xpbmtfYW5fbW9kZSA9PSBNTE9fQU5fSU5CQU5EICYmCisgCQkgICAgIHBoeV9pbnRlcmZhY2VfbW9kZV9pc184MDIzeihpbnRlcmZhY2UpKSkpCisgCQlyZXR1cm4gLUVJTlZBTDsKKyAKK0BAIC04MzgsOCArODQxLDggQEAgaW50IHBoeWxpbmtfb2ZfcGh5X2Nvbm5lY3Qoc3RydWN0IHBoeWxpbgorIAlpbnQgcmV0OworIAorIAkvKiBGaXhlZCBsaW5rcyBhbmQgODAyLjN6IGFyZSBoYW5kbGVkIHdpdGhvdXQgbmVlZGluZyBhIFBIWSAqLworLQlpZiAocGwtPmxpbmtfYW5fbW9kZSA9PSBNTE9fQU5fRklYRUQgfHwKKy0JICAgIChwbC0+bGlua19hbl9tb2RlID09IE1MT19BTl9JTkJBTkQgJiYKKysJaWYgKHBsLT5jZmdfbGlua19hbl9tb2RlID09IE1MT19BTl9GSVhFRCB8fAorKwkgICAgKHBsLT5jZmdfbGlua19hbl9tb2RlID09IE1MT19BTl9JTkJBTkQgJiYKKyAJICAgICBwaHlfaW50ZXJmYWNlX21vZGVfaXNfODAyM3oocGwtPmxpbmtfaW50ZXJmYWNlKSkpCisgCQlyZXR1cm4gMDsKKyAKK0BAIC04NTAsNyArODUzLDcgQEAgaW50IHBoeWxpbmtfb2ZfcGh5X2Nvbm5lY3Qoc3RydWN0IHBoeWxpbgorIAkJcGh5X25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKGRuLCAicGh5LWRldmljZSIsIDApOworIAorIAlpZiAoIXBoeV9ub2RlKSB7CistCQlpZiAocGwtPmxpbmtfYW5fbW9kZSA9PSBNTE9fQU5fUEhZKQorKwkJaWYgKHBsLT5jZmdfbGlua19hbl9tb2RlID09IE1MT19BTl9QSFkpCisgCQkJcmV0dXJuIC1FTk9ERVY7CisgCQlyZXR1cm4gMDsKKyAJfQorQEAgLTkxMyw3ICs5MTYsNyBAQCBpbnQgcGh5bGlua19maXhlZF9zdGF0ZV9jYihzdHJ1Y3QgcGh5bGluCisgCS8qIEl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgdG8gbGV0IHRoZSBsaW5rIGJlIG92ZXJyaWRlbiB1bmxlc3Mgd2UgdXNlCisgCSAqIE1MT19BTl9GSVhFRAorIAkgKi8KKy0JaWYgKHBsLT5saW5rX2FuX21vZGUgIT0gTUxPX0FOX0ZJWEVEKQorKwlpZiAocGwtPmNmZ19saW5rX2FuX21vZGUgIT0gTUxPX0FOX0ZJWEVEKQorIAkJcmV0dXJuIC1FSU5WQUw7CisgCisgCW11dGV4X2xvY2soJnBsLT5zdGF0ZV9tdXRleCk7CitAQCAtOTYzLDcgKzk2Niw3IEBAIHZvaWQgcGh5bGlua19zdGFydChzdHJ1Y3QgcGh5bGluayAqcGwpCisgCUFTU0VSVF9SVE5MKCk7CisgCisgCXBoeWxpbmtfaW5mbyhwbCwgImNvbmZpZ3VyaW5nIGZvciAlcy8lcyBsaW5rIG1vZGVcbiIsCistCQkgICAgIHBoeWxpbmtfYW5fbW9kZV9zdHIocGwtPmxpbmtfYW5fbW9kZSksCisrCQkgICAgIHBoeWxpbmtfYW5fbW9kZV9zdHIocGwtPmN1cl9saW5rX2FuX21vZGUpLAorIAkJICAgICBwaHlfbW9kZXMocGwtPmxpbmtfY29uZmlnLmludGVyZmFjZSkpOworIAorIAkvKiBBbHdheXMgc2V0IHRoZSBjYXJyaWVyIG9mZiAqLworQEAgLTk4Niw3ICs5ODksNyBAQCB2b2lkIHBoeWxpbmtfc3RhcnQoc3RydWN0IHBoeWxpbmsgKnBsKQorIAljbGVhcl9iaXQoUEhZTElOS19ESVNBQkxFX1NUT1BQRUQsICZwbC0+cGh5bGlua19kaXNhYmxlX3N0YXRlKTsKKyAJcGh5bGlua19ydW5fcmVzb2x2ZShwbCk7CisgCistCWlmIChwbC0+bGlua19hbl9tb2RlID09IE1MT19BTl9GSVhFRCAmJiBwbC0+bGlua19ncGlvKSB7CisrCWlmIChwbC0+Y2ZnX2xpbmtfYW5fbW9kZSA9PSBNTE9fQU5fRklYRUQgJiYgcGwtPmxpbmtfZ3BpbykgeworIAkJaW50IGlycSA9IGdwaW9kX3RvX2lycShwbC0+bGlua19ncGlvKTsKKyAKKyAJCWlmIChpcnEgPiAwKSB7CitAQCAtMTAwMSw3ICsxMDA0LDcgQEAgdm9pZCBwaHlsaW5rX3N0YXJ0KHN0cnVjdCBwaHlsaW5rICpwbCkKKyAJCWlmIChpcnEgPD0gMCkKKyAJCQltb2RfdGltZXIoJnBsLT5saW5rX3BvbGwsIGppZmZpZXMgKyBIWik7CisgCX0KKy0JaWYgKHBsLT5saW5rX2FuX21vZGUgPT0gTUxPX0FOX0ZJWEVEICYmIHBsLT5nZXRfZml4ZWRfc3RhdGUpCisrCWlmIChwbC0+Y2ZnX2xpbmtfYW5fbW9kZSA9PSBNTE9fQU5fRklYRUQgJiYgcGwtPmdldF9maXhlZF9zdGF0ZSkKKyAJCW1vZF90aW1lcigmcGwtPmxpbmtfcG9sbCwgamlmZmllcyArIEhaKTsKKyAJaWYgKHBsLT5waHlkZXYpCisgCQlwaHlfc3RhcnQocGwtPnBoeWRldik7CitAQCAtMTEyOCw3ICsxMTMxLDcgQEAgaW50IHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3NfZ2V0KHN0cnVjdAorIAorIAlsaW5rbW9kZV9jb3B5KGtzZXQtPmxpbmtfbW9kZXMuc3VwcG9ydGVkLCBwbC0+c3VwcG9ydGVkKTsKKyAKKy0Jc3dpdGNoIChwbC0+bGlua19hbl9tb2RlKSB7CisrCXN3aXRjaCAocGwtPmN1cl9saW5rX2FuX21vZGUpIHsKKyAJY2FzZSBNTE9fQU5fRklYRUQ6CisgCQkvKiBXZSBhcmUgdXNpbmcgZml4ZWQgc2V0dGluZ3MuIFJlcG9ydCB0aGVzZSBhcyB0aGUKKyAJCSAqIGN1cnJlbnQgbGluayBzZXR0aW5ncyAtIGFuZCBub3RlIHRoYXQgdGhlc2UgYWxzbworQEAgLTEyMDAsNyArMTIwMyw3IEBAIGludCBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldChzdHJ1Y3QKKyAJCS8qIElmIHdlIGhhdmUgYSBmaXhlZCBsaW5rIChhcyBzcGVjaWZpZWQgYnkgZmlybXdhcmUpLCByZWZ1c2UKKyAJCSAqIHRvIGNoYW5nZSBsaW5rIHBhcmFtZXRlcnMuCisgCQkgKi8KKy0JCWlmIChwbC0+bGlua19hbl9tb2RlID09IE1MT19BTl9GSVhFRCAmJgorKwkJaWYgKHBsLT5jdXJfbGlua19hbl9tb2RlID09IE1MT19BTl9GSVhFRCAmJgorIAkJICAgIChzLT5zcGVlZCAhPSBwbC0+bGlua19jb25maWcuc3BlZWQgfHwKKyAJCSAgICAgcy0+ZHVwbGV4ICE9IHBsLT5saW5rX2NvbmZpZy5kdXBsZXgpKQorIAkJCXJldHVybiAtRUlOVkFMOworQEAgLTEyMTIsNyArMTIxNSw3IEBAIGludCBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldChzdHJ1Y3QKKyAJCV9fY2xlYXJfYml0KEVUSFRPT0xfTElOS19NT0RFX0F1dG9uZWdfQklULCBjb25maWcuYWR2ZXJ0aXNpbmcpOworIAl9IGVsc2UgeworIAkJLyogSWYgd2UgaGF2ZSBhIGZpeGVkIGxpbmssIHJlZnVzZSB0byBlbmFibGUgYXV0b25lZ290aWF0aW9uICovCistCQlpZiAocGwtPmxpbmtfYW5fbW9kZSA9PSBNTE9fQU5fRklYRUQpCisrCQlpZiAocGwtPmN1cl9saW5rX2FuX21vZGUgPT0gTUxPX0FOX0ZJWEVEKQorIAkJCXJldHVybiAtRUlOVkFMOworIAorIAkJY29uZmlnLnNwZWVkID0gU1BFRURfVU5LTk9XTjsKK0BAIC0xMjU0LDcgKzEyNTcsNyBAQCBpbnQgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQoc3RydWN0CisgCSAqIGNvbmZpZ3VyYXRpb24uIEZvciBhIGZpeGVkIGxpbmssIHRoaXMgaXNuJ3QgYWJsZSB0byBjaGFuZ2UgYW55CisgCSAqIHBhcmFtZXRlcnMsIHdoaWNoIGp1c3QgbGVhdmVzIGluYmFuZCBtb2RlLgorIAkgKi8KKy0JaWYgKHBsLT5saW5rX2FuX21vZGUgPT0gTUxPX0FOX0lOQkFORCAmJgorKwlpZiAocGwtPmN1cl9saW5rX2FuX21vZGUgPT0gTUxPX0FOX0lOQkFORCAmJgorIAkgICAgIXRlc3RfYml0KFBIWUxJTktfRElTQUJMRV9TVE9QUEVELCAmcGwtPnBoeWxpbmtfZGlzYWJsZV9zdGF0ZSkpIHsKKyAJCXBoeWxpbmtfbWFjX2NvbmZpZyhwbCwgJnBsLT5saW5rX2NvbmZpZyk7CisgCQlwaHlsaW5rX21hY19hbl9yZXN0YXJ0KHBsKTsKK0BAIC0xMzQ0LDcgKzEzNDcsNyBAQCBpbnQgcGh5bGlua19ldGh0b29sX3NldF9wYXVzZXBhcmFtKHN0cnVjCisgCQkJCSAgIHBhdXNlLT50eF9wYXVzZSk7CisgCX0gZWxzZSBpZiAoIXRlc3RfYml0KFBIWUxJTktfRElTQUJMRV9TVE9QUEVELAorIAkJCSAgICAgJnBsLT5waHlsaW5rX2Rpc2FibGVfc3RhdGUpKSB7CistCQlzd2l0Y2ggKHBsLT5saW5rX2FuX21vZGUpIHsKKysJCXN3aXRjaCAocGwtPmN1cl9saW5rX2FuX21vZGUpIHsKKyAJCWNhc2UgTUxPX0FOX0ZJWEVEOgorIAkJCS8qIFNob3VsZCB3ZSBhbGxvdyBmaXhlZCBsaW5rcyB0byBjaGFuZ2UgYWdhaW5zdCB0aGUgY29uZmlnPyAqLworIAkJCXBoeWxpbmtfcmVzb2x2ZV9mbG93KHBsLCBjb25maWcpOworQEAgLTE1NTEsNyArMTU1NCw3IEBAIHN0YXRpYyBpbnQgcGh5bGlua19taWlfcmVhZChzdHJ1Y3QgcGh5bGkKKyAJc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSBzdGF0ZTsKKyAJaW50IHZhbCA9IDB4ZmZmZjsKKyAKKy0Jc3dpdGNoIChwbC0+bGlua19hbl9tb2RlKSB7CisrCXN3aXRjaCAocGwtPmN1cl9saW5rX2FuX21vZGUpIHsKKyAJY2FzZSBNTE9fQU5fRklYRUQ6CisgCQlpZiAocGh5X2lkID09IDApIHsKKyAJCQlwaHlsaW5rX2dldF9maXhlZF9zdGF0ZShwbCwgJnN0YXRlKTsKK0BAIC0xNTc5LDcgKzE1ODIsNyBAQCBzdGF0aWMgaW50IHBoeWxpbmtfbWlpX3JlYWQoc3RydWN0IHBoeWxpCisgc3RhdGljIGludCBwaHlsaW5rX21paV93cml0ZShzdHJ1Y3QgcGh5bGluayAqcGwsIHVuc2lnbmVkIGludCBwaHlfaWQsCisgCQkJICAgICB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsKQorIHsKKy0Jc3dpdGNoIChwbC0+bGlua19hbl9tb2RlKSB7CisrCXN3aXRjaCAocGwtPmN1cl9saW5rX2FuX21vZGUpIHsKKyAJY2FzZSBNTE9fQU5fRklYRUQ6CisgCQlicmVhazsKKyAKK0BAIC0xNzUzLDEwICsxNzU2LDEwIEBAIHN0YXRpYyBpbnQgcGh5bGlua19zZnBfbW9kdWxlX2luc2VydCh2b2kKKyAJCWxpbmttb2RlX2NvcHkocGwtPmxpbmtfY29uZmlnLmFkdmVydGlzaW5nLCBjb25maWcuYWR2ZXJ0aXNpbmcpOworIAl9CisgCistCWlmIChwbC0+bGlua19hbl9tb2RlICE9IE1MT19BTl9JTkJBTkQgfHwKKysJaWYgKHBsLT5jdXJfbGlua19hbl9tb2RlICE9IE1MT19BTl9JTkJBTkQgfHwKKyAJICAgIHBsLT5saW5rX2NvbmZpZy5pbnRlcmZhY2UgIT0gY29uZmlnLmludGVyZmFjZSkgeworIAkJcGwtPmxpbmtfY29uZmlnLmludGVyZmFjZSA9IGNvbmZpZy5pbnRlcmZhY2U7CistCQlwbC0+bGlua19hbl9tb2RlID0gTUxPX0FOX0lOQkFORDsKKysJCXBsLT5jdXJfbGlua19hbl9tb2RlID0gTUxPX0FOX0lOQkFORDsKKyAKKyAJCWNoYW5nZWQgPSB0cnVlOworIApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzQ5LW5ldC1waHlsaW5rLXNwbGl0LXBoeWxpbmtfc2ZwX21vZHVsZV9pbnNlcnQucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC83NDktbmV0LXBoeWxpbmstc3BsaXQtcGh5bGlua19zZnBfbW9kdWxlX2luc2VydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODQwZDcxCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzQ5LW5ldC1waHlsaW5rLXNwbGl0LXBoeWxpbmtfc2ZwX21vZHVsZV9pbnNlcnQucGF0Y2gKQEAgLTAsMCArMSwxMjAgQEAKK0Zyb20gMzY1Njk5NzEyNDFhZTZiODEzNzZkYTQ5MzdkMmM4NzYwMTIyZDEwYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CitEYXRlOiBUaHUsIDIxIE5vdiAyMDE5IDE3OjU4OjU4ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggNjUyLzY2MF0gbmV0OiBwaHlsaW5rOiBzcGxpdCBwaHlsaW5rX3NmcF9tb2R1bGVfaW5zZXJ0KCkKKworU3BsaXQgb3V0IHRoZSBjb25maWd1cmF0aW9uIHN0ZXAgZnJvbSBwaHlsaW5rX3NmcF9tb2R1bGVfaW5zZXJ0KCkgc28KK3dlIGNhbiByZS11c2UgdGhpcyBsYXRlci4KKworU2lnbmVkLW9mZi1ieTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KKy0tLQorIGRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMgfCA0NyArKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjggaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMKKysrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMKK0BAIC0xNjg4LDI1ICsxNjg4LDIxIEBAIHN0YXRpYyB2b2lkIHBoeWxpbmtfc2ZwX2RldGFjaCh2b2lkICp1cHMKKyAJcGwtPm5ldGRldi0+c2ZwX2J1cyA9IE5VTEw7CisgfQorIAorLXN0YXRpYyBpbnQgcGh5bGlua19zZnBfbW9kdWxlX2luc2VydCh2b2lkICp1cHN0cmVhbSwKKy0JCQkJICAgICBjb25zdCBzdHJ1Y3Qgc2ZwX2VlcHJvbV9pZCAqaWQpCisrc3RhdGljIGludCBwaHlsaW5rX3NmcF9jb25maWcoc3RydWN0IHBoeWxpbmsgKnBsLCB1OCBtb2RlLCB1OCBwb3J0LAorKwkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKnN1cHBvcnRlZCwKKysJCQkgICAgICBjb25zdCB1bnNpZ25lZCBsb25nICphZHZlcnRpc2luZykKKyB7CistCXN0cnVjdCBwaHlsaW5rICpwbCA9IHVwc3RyZWFtOworLQlfX0VUSFRPT0xfREVDTEFSRV9MSU5LX01PREVfTUFTSyhzdXBwb3J0KSA9IHsgMCwgfTsKKyAJX19FVEhUT09MX0RFQ0xBUkVfTElOS19NT0RFX01BU0soc3VwcG9ydDEpOworKwlfX0VUSFRPT0xfREVDTEFSRV9MSU5LX01PREVfTUFTSyhzdXBwb3J0KTsKKyAJc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSBjb25maWc7CisgCXBoeV9pbnRlcmZhY2VfdCBpZmFjZTsKKy0JaW50IHJldCA9IDA7CisgCWJvb2wgY2hhbmdlZDsKKy0JdTggcG9ydDsKKysJaW50IHJldDsKKyAKKy0JQVNTRVJUX1JUTkwoKTsKKy0KKy0Jc2ZwX3BhcnNlX3N1cHBvcnQocGwtPnNmcF9idXMsIGlkLCBzdXBwb3J0KTsKKy0JcG9ydCA9IHNmcF9wYXJzZV9wb3J0KHBsLT5zZnBfYnVzLCBpZCwgc3VwcG9ydCk7CisrCWxpbmttb2RlX2NvcHkoc3VwcG9ydCwgc3VwcG9ydGVkKTsKKyAKKyAJbWVtc2V0KCZjb25maWcsIDAsIHNpemVvZihjb25maWcpKTsKKy0JbGlua21vZGVfY29weShjb25maWcuYWR2ZXJ0aXNpbmcsIHN1cHBvcnQpOworKwlsaW5rbW9kZV9jb3B5KGNvbmZpZy5hZHZlcnRpc2luZywgYWR2ZXJ0aXNpbmcpOworIAljb25maWcuaW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX05BOworIAljb25maWcuc3BlZWQgPSBTUEVFRF9VTktOT1dOOworIAljb25maWcuZHVwbGV4ID0gRFVQTEVYX1VOS05PV047CitAQCAtMTcyMSw4ICsxNzE3LDYgQEAgc3RhdGljIGludCBwaHlsaW5rX3NmcF9tb2R1bGVfaW5zZXJ0KHZvaQorIAkJcmV0dXJuIHJldDsKKyAJfQorIAorLQlsaW5rbW9kZV9jb3B5KHN1cHBvcnQxLCBzdXBwb3J0KTsKKy0KKyAJaWZhY2UgPSBzZnBfc2VsZWN0X2ludGVyZmFjZShwbC0+c2ZwX2J1cywgY29uZmlnLmFkdmVydGlzaW5nKTsKKyAJaWYgKGlmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQSkgeworIAkJcGh5bGlua19lcnIocGwsCitAQCAtMTczMiwxOCArMTcyNiwxOCBAQCBzdGF0aWMgaW50IHBoeWxpbmtfc2ZwX21vZHVsZV9pbnNlcnQodm9pCisgCX0KKyAKKyAJY29uZmlnLmludGVyZmFjZSA9IGlmYWNlOworKwlsaW5rbW9kZV9jb3B5KHN1cHBvcnQxLCBzdXBwb3J0KTsKKyAJcmV0ID0gcGh5bGlua192YWxpZGF0ZShwbCwgc3VwcG9ydDEsICZjb25maWcpOworIAlpZiAocmV0KSB7CisgCQlwaHlsaW5rX2VycihwbCwgInZhbGlkYXRpb24gb2YgJXMvJXMgd2l0aCBzdXBwb3J0ICUqcGIgZmFpbGVkOiAlZFxuIiwKKy0JCQkgICAgcGh5bGlua19hbl9tb2RlX3N0cihNTE9fQU5fSU5CQU5EKSwKKysJCQkgICAgcGh5bGlua19hbl9tb2RlX3N0cihtb2RlKSwKKyAJCQkgICAgcGh5X21vZGVzKGNvbmZpZy5pbnRlcmZhY2UpLAorIAkJCSAgICBfX0VUSFRPT0xfTElOS19NT0RFX01BU0tfTkJJVFMsIHN1cHBvcnQsIHJldCk7CisgCQlyZXR1cm4gcmV0OworIAl9CisgCisgCXBoeWxpbmtfZGJnKHBsLCAicmVxdWVzdGluZyBsaW5rIG1vZGUgJXMvJXMgd2l0aCBzdXBwb3J0ICUqcGJcbiIsCistCQkgICAgcGh5bGlua19hbl9tb2RlX3N0cihNTE9fQU5fSU5CQU5EKSwKKy0JCSAgICBwaHlfbW9kZXMoY29uZmlnLmludGVyZmFjZSksCisrCQkgICAgcGh5bGlua19hbl9tb2RlX3N0cihtb2RlKSwgcGh5X21vZGVzKGNvbmZpZy5pbnRlcmZhY2UpLAorIAkJICAgIF9fRVRIVE9PTF9MSU5LX01PREVfTUFTS19OQklUUywgc3VwcG9ydCk7CisgCisgCWlmIChwaHlfaW50ZXJmYWNlX21vZGVfaXNfODAyM3ooaWZhY2UpICYmIHBsLT5waHlkZXYpCitAQCAtMTc1NiwxNSArMTc1MCwxNSBAQCBzdGF0aWMgaW50IHBoeWxpbmtfc2ZwX21vZHVsZV9pbnNlcnQodm9pCisgCQlsaW5rbW9kZV9jb3B5KHBsLT5saW5rX2NvbmZpZy5hZHZlcnRpc2luZywgY29uZmlnLmFkdmVydGlzaW5nKTsKKyAJfQorIAorLQlpZiAocGwtPmN1cl9saW5rX2FuX21vZGUgIT0gTUxPX0FOX0lOQkFORCB8fAorKwlpZiAocGwtPmN1cl9saW5rX2FuX21vZGUgIT0gbW9kZSB8fAorIAkgICAgcGwtPmxpbmtfY29uZmlnLmludGVyZmFjZSAhPSBjb25maWcuaW50ZXJmYWNlKSB7CisgCQlwbC0+bGlua19jb25maWcuaW50ZXJmYWNlID0gY29uZmlnLmludGVyZmFjZTsKKy0JCXBsLT5jdXJfbGlua19hbl9tb2RlID0gTUxPX0FOX0lOQkFORDsKKysJCXBsLT5jdXJfbGlua19hbl9tb2RlID0gbW9kZTsKKyAKKyAJCWNoYW5nZWQgPSB0cnVlOworIAorIAkJcGh5bGlua19pbmZvKHBsLCAic3dpdGNoZWQgdG8gJXMvJXMgbGluayBtb2RlXG4iLAorLQkJCSAgICAgcGh5bGlua19hbl9tb2RlX3N0cihNTE9fQU5fSU5CQU5EKSwKKysJCQkgICAgIHBoeWxpbmtfYW5fbW9kZV9zdHIobW9kZSksCisgCQkJICAgICBwaHlfbW9kZXMoY29uZmlnLmludGVyZmFjZSkpOworIAl9CisgCitAQCAtMTc3Nyw2ICsxNzcxLDIxIEBAIHN0YXRpYyBpbnQgcGh5bGlua19zZnBfbW9kdWxlX2luc2VydCh2b2kKKyAJcmV0dXJuIHJldDsKKyB9CisgCisrc3RhdGljIGludCBwaHlsaW5rX3NmcF9tb2R1bGVfaW5zZXJ0KHZvaWQgKnVwc3RyZWFtLAorKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBzZnBfZWVwcm9tX2lkICppZCkKKyt7CisrCXN0cnVjdCBwaHlsaW5rICpwbCA9IHVwc3RyZWFtOworKwlfX0VUSFRPT0xfREVDTEFSRV9MSU5LX01PREVfTUFTSyhzdXBwb3J0KSA9IHsgMCwgfTsKKysJdTggcG9ydDsKKysKKysJQVNTRVJUX1JUTkwoKTsKKysKKysJc2ZwX3BhcnNlX3N1cHBvcnQocGwtPnNmcF9idXMsIGlkLCBzdXBwb3J0KTsKKysJcG9ydCA9IHNmcF9wYXJzZV9wb3J0KHBsLT5zZnBfYnVzLCBpZCwgc3VwcG9ydCk7CisrCisrCXJldHVybiBwaHlsaW5rX3NmcF9jb25maWcocGwsIE1MT19BTl9JTkJBTkQsIHBvcnQsIHN1cHBvcnQsIHN1cHBvcnQpOworK30KKysKKyBzdGF0aWMgaW50IHBoeWxpbmtfc2ZwX21vZHVsZV9zdGFydCh2b2lkICp1cHN0cmVhbSkKKyB7CisgCXN0cnVjdCBwaHlsaW5rICpwbCA9IHVwc3RyZWFtOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzUwLW5ldC1waHlsaW5rLWRlbGF5LU1BQy1jb25maWd1cmF0aW9uLWZvci1jb3BwZXItU0ZQLW0ucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC83NTAtbmV0LXBoeWxpbmstZGVsYXktTUFDLWNvbmZpZ3VyYXRpb24tZm9yLWNvcHBlci1TRlAtbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjcxNzBhCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzUwLW5ldC1waHlsaW5rLWRlbGF5LU1BQy1jb25maWd1cmF0aW9uLWZvci1jb3BwZXItU0ZQLW0ucGF0Y2gKQEAgLTAsMCArMSwyMDEgQEAKK0Zyb20gNTJjOTU2MDAzYTlkNWJjYWUxZjQ0NWY5ZGZkNDJiNjI0YWRiNmU4NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CitEYXRlOiBXZWQsIDExIERlYyAyMDE5IDEwOjU2OjQ1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIG5ldDogcGh5bGluazogZGVsYXkgTUFDIGNvbmZpZ3VyYXRpb24gZm9yIGNvcHBlciBTRlAgbW9kdWxlcworCitLbm93aW5nIHdoZXRoZXIgd2UgbmVlZCB0byBkZWxheSB0aGUgTUFDIGNvbmZpZ3VyYXRpb24gYmVjYXVzZSBhIG1vZHVsZQorbWF5IGhhdmUgYSBQSFkgaXMgdXNlZnVsIHRvIHBoeWxpbmsgdG8gYWxsb3cgTkJBU0UtVCBtb2R1bGVzIHRvIHdvcmsgb24KK3N5c3RlbXMgc3VwcG9ydGluZyBubyBtb3JlIHRoYW4gMi41RyBzcGVlZHMuCisKK1RoaXMgY29tbWl0IGFsbG93cyB1cyB0byBkZWxheSBzdWNoIGNvbmZpZ3VyYXRpb24gdW50aWwgYWZ0ZXIgdGhlIFBIWQoraGFzIGJlZW4gcHJvYmVkIGJ5IHJlY29yZGluZyB0aGUgcGFyc2VkIGNhcGFiaWxpdGllcywgYW5kIGlmIHRoZSBtb2R1bGUKK21heSBoYXZlIGEgUEhZLCBkb2luZyBubyBtb3JlIHVudGlsIHRoZSBtb2R1bGVfc3RhcnQoKSBub3RpZmljYXRpb24gaXMKK2NhbGxlZC4gIEF0IHRoYXQgcG9pbnQsIHdlIGVpdGhlciBoYXZlIGEgUEhZLCBvciB3ZSBkb24ndC4KKworV2UgbW92ZSB0aGUgUEhZLWJhc2VkIHNldHVwIGEgbGl0dGxlIGxhdGVyLCBhbmQgdXNlIHRoZSBQSFlzIHN1cHBvcnQKK2NhcGFiaWxpdGllcyByYXRoZXIgdGhhbiB0aGUgRUVQUk9NIHBhcnNlZCBjYXBhYmlsaXRpZXMgdG8gZGV0ZXJtaW5lCit3aGV0aGVyIHdlIGNhbiBzdXBwb3J0IHRoZSBQSFkuCisKK1Jldmlld2VkLWJ5OiBBbmRyZXcgTHVubiA8YW5kcmV3QGx1bm4uY2g+CitTaWduZWQtb2ZmLWJ5OiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorU2lnbmVkLW9mZi1ieTogRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorLS0tCisgZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyB8IDUzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLQorIGRyaXZlcnMvbmV0L3BoeS9zZnAtYnVzLmMgfCAyOCArKysrKysrKysrKysrKysrKysrKysKKyBpbmNsdWRlL2xpbnV4L3NmcC5oICAgICAgIHwgIDcgKysrKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA3OCBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYworKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYworQEAgLTcyLDYgKzcyLDkgQEAgc3RydWN0IHBoeWxpbmsgeworIAlib29sIG1hY19saW5rX2Ryb3BwZWQ7CisgCisgCXN0cnVjdCBzZnBfYnVzICpzZnBfYnVzOworKwlib29sIHNmcF9tYXlfaGF2ZV9waHk7CisrCV9fRVRIVE9PTF9ERUNMQVJFX0xJTktfTU9ERV9NQVNLKHNmcF9zdXBwb3J0KTsKKysJdTggc2ZwX3BvcnQ7CisgfTsKKyAKKyAjZGVmaW5lIHBoeWxpbmtfcHJpbnRrKGxldmVsLCBwbCwgZm10LCAuLi4pIFwKK0BAIC0xNjg4LDcgKzE2OTEsNyBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX3NmcF9kZXRhY2godm9pZCAqdXBzCisgCXBsLT5uZXRkZXYtPnNmcF9idXMgPSBOVUxMOworIH0KKyAKKy1zdGF0aWMgaW50IHBoeWxpbmtfc2ZwX2NvbmZpZyhzdHJ1Y3QgcGh5bGluayAqcGwsIHU4IG1vZGUsIHU4IHBvcnQsCisrc3RhdGljIGludCBwaHlsaW5rX3NmcF9jb25maWcoc3RydWN0IHBoeWxpbmsgKnBsLCB1OCBtb2RlLAorIAkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKnN1cHBvcnRlZCwKKyAJCQkgICAgICBjb25zdCB1bnNpZ25lZCBsb25nICphZHZlcnRpc2luZykKKyB7CitAQCAtMTc2Miw3ICsxNzY1LDcgQEAgc3RhdGljIGludCBwaHlsaW5rX3NmcF9jb25maWcoc3RydWN0IHBoeQorIAkJCSAgICAgcGh5X21vZGVzKGNvbmZpZy5pbnRlcmZhY2UpKTsKKyAJfQorIAorLQlwbC0+bGlua19wb3J0ID0gcG9ydDsKKysJcGwtPmxpbmtfcG9ydCA9IHBsLT5zZnBfcG9ydDsKKyAKKyAJaWYgKGNoYW5nZWQgJiYgIXRlc3RfYml0KFBIWUxJTktfRElTQUJMRV9TVE9QUEVELAorIAkJCQkgJnBsLT5waHlsaW5rX2Rpc2FibGVfc3RhdGUpKQorQEAgLTE3NzUsMTUgKzE3NzgsMjAgQEAgc3RhdGljIGludCBwaHlsaW5rX3NmcF9tb2R1bGVfaW5zZXJ0KHZvaQorIAkJCQkgICAgIGNvbnN0IHN0cnVjdCBzZnBfZWVwcm9tX2lkICppZCkKKyB7CisgCXN0cnVjdCBwaHlsaW5rICpwbCA9IHVwc3RyZWFtOworLQlfX0VUSFRPT0xfREVDTEFSRV9MSU5LX01PREVfTUFTSyhzdXBwb3J0KSA9IHsgMCwgfTsKKy0JdTggcG9ydDsKKysJdW5zaWduZWQgbG9uZyAqc3VwcG9ydCA9IHBsLT5zZnBfc3VwcG9ydDsKKyAKKyAJQVNTRVJUX1JUTkwoKTsKKyAKKysJbGlua21vZGVfemVybyhzdXBwb3J0KTsKKyAJc2ZwX3BhcnNlX3N1cHBvcnQocGwtPnNmcF9idXMsIGlkLCBzdXBwb3J0KTsKKy0JcG9ydCA9IHNmcF9wYXJzZV9wb3J0KHBsLT5zZnBfYnVzLCBpZCwgc3VwcG9ydCk7CisrCXBsLT5zZnBfcG9ydCA9IHNmcF9wYXJzZV9wb3J0KHBsLT5zZnBfYnVzLCBpZCwgc3VwcG9ydCk7CisgCistCXJldHVybiBwaHlsaW5rX3NmcF9jb25maWcocGwsIE1MT19BTl9JTkJBTkQsIHBvcnQsIHN1cHBvcnQsIHN1cHBvcnQpOworKwkvKiBJZiB0aGlzIG1vZHVsZSBtYXkgaGF2ZSBhIFBIWSBjb25uZWN0aW5nIGxhdGVyLCBkZWZlciB1bnRpbCBsYXRlciAqLworKwlwbC0+c2ZwX21heV9oYXZlX3BoeSA9IHNmcF9tYXlfaGF2ZV9waHkocGwtPnNmcF9idXMsIGlkKTsKKysJaWYgKHBsLT5zZnBfbWF5X2hhdmVfcGh5KQorKwkJcmV0dXJuIDA7CisrCisrCXJldHVybiBwaHlsaW5rX3NmcF9jb25maWcocGwsIE1MT19BTl9JTkJBTkQsIHN1cHBvcnQsIHN1cHBvcnQpOworIH0KKyAKKyBzdGF0aWMgaW50IHBoeWxpbmtfc2ZwX21vZHVsZV9zdGFydCh2b2lkICp1cHN0cmVhbSkKK0BAIC0xNzkxLDEwICsxNzk5LDE5IEBAIHN0YXRpYyBpbnQgcGh5bGlua19zZnBfbW9kdWxlX3N0YXJ0KHZvaWQKKyAJc3RydWN0IHBoeWxpbmsgKnBsID0gdXBzdHJlYW07CisgCisgCS8qIElmIHRoaXMgU0ZQIG1vZHVsZSBoYXMgYSBQSFksIHN0YXJ0IHRoZSBQSFkgbm93LiAqLworLQlpZiAocGwtPnBoeWRldikKKysJaWYgKHBsLT5waHlkZXYpIHsKKyAJCXBoeV9zdGFydChwbC0+cGh5ZGV2KTsKKy0JCQorLQlyZXR1cm4gMDsKKysJCXJldHVybiAwOworKwl9CisrCisrCS8qIElmIHRoZSBtb2R1bGUgbWF5IGhhdmUgYSBQSFkgYnV0IHdlIGRpZG4ndCBkZXRlY3Qgb25lIHdlCisrCSAqIG5lZWQgdG8gY29uZmlndXJlIHRoZSBNQUMgaGVyZS4KKysJICovCisrCWlmICghcGwtPnNmcF9tYXlfaGF2ZV9waHkpCisrCQlyZXR1cm4gMDsKKysKKysJcmV0dXJuIHBoeWxpbmtfc2ZwX2NvbmZpZyhwbCwgTUxPX0FOX0lOQkFORCwKKysJCQkJICBwbC0+c2ZwX3N1cHBvcnQsIHBsLT5zZnBfc3VwcG9ydCk7CisgfQorIAorIHN0YXRpYyB2b2lkIHBoeWxpbmtfc2ZwX21vZHVsZV9zdG9wKHZvaWQgKnVwc3RyZWFtKQorQEAgLTE4MjgsMTAgKzE4NDUsMjYgQEAgc3RhdGljIHZvaWQgcGh5bGlua19zZnBfbGlua191cCh2b2lkICp1cAorIHN0YXRpYyBpbnQgcGh5bGlua19zZnBfY29ubmVjdF9waHkodm9pZCAqdXBzdHJlYW0sIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpCisgeworIAlzdHJ1Y3QgcGh5bGluayAqcGwgPSB1cHN0cmVhbTsKKy0JcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSA9IHBsLT5saW5rX2NvbmZpZy5pbnRlcmZhY2U7CisrCXBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7CisgCWludCByZXQ7CisgCistCXJldCA9IHBoeWxpbmtfYXR0YWNoX3BoeShwbCwgcGh5LCBwbC0+bGlua19jb25maWcuaW50ZXJmYWNlKTsKKysJLyoKKysJICogVGhpcyBpcyB0aGUgbmV3IHdheSBvZiBkZWFsaW5nIHdpdGggZmxvdyBjb250cm9sIGZvciBQSFlzLAorKwkgKiBhcyBkZXNjcmliZWQgYnkgVGltdXIgVGFiaSBpbiBjb21taXQgNTI5ZWQxMjc1MjYzICgibmV0OiBwaHk6CisrCSAqIHBoeSBkcml2ZXJzIHNob3VsZCBub3Qgc2V0IFNVUFBPUlRFRF9bQXN5bV9dUGF1c2UiKSBleGNlcHQKKysJICogdXNpbmcgb3VyIHZhbGlkYXRlIGNhbGwgdG8gdGhlIE1BQywgd2UgcmVseSB1cG9uIHRoZSBNQUMKKysJICogY2xlYXJpbmcgdGhlIGJpdHMgZnJvbSBib3RoIHN1cHBvcnRlZCBhbmQgYWR2ZXJ0aXNpbmcgZmllbGRzLgorKwkgKi8KKysJcGh5X3N1cHBvcnRfYXN5bV9wYXVzZShwaHkpOworKworKwkvKiBEbyB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uICovCisrCXJldCA9IHBoeWxpbmtfc2ZwX2NvbmZpZyhwbCwgTUxPX0FOX0lOQkFORCwgcGh5LT5zdXBwb3J0ZWQsCisrCQkJCSBwaHktPmFkdmVydGlzaW5nKTsKKysJaWYgKHJldCA8IDApCisrCQlyZXR1cm4gcmV0OworKworKwlpbnRlcmZhY2UgPSBwbC0+bGlua19jb25maWcuaW50ZXJmYWNlOworKwlyZXQgPSBwaHlsaW5rX2F0dGFjaF9waHkocGwsIHBoeSwgaW50ZXJmYWNlKTsKKyAJaWYgKHJldCA8IDApCisgCQlyZXR1cm4gcmV0OworIAorLS0tIGEvZHJpdmVycy9uZXQvcGh5L3NmcC1idXMuYworKysrIGIvZHJpdmVycy9uZXQvcGh5L3NmcC1idXMuYworQEAgLTEwMyw2ICsxMDMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF9xdWlyayAqc2ZwX2xvb2t1CisgCisgCXJldHVybiBOVUxMOworIH0KKysKKyAvKioKKyAgKiBzZnBfcGFyc2VfcG9ydCgpIC0gUGFyc2UgdGhlIEVFUFJPTSBiYXNlIElELCBzZXR0aW5nIHRoZSBwb3J0IHR5cGUKKyAgKiBAYnVzOiBhIHBvaW50ZXIgdG8gdGhlICZzdHJ1Y3Qgc2ZwX2J1cyBzdHJ1Y3R1cmUgZm9yIHRoZSBzZnAgbW9kdWxlCitAQCAtMTc5LDYgKzE4MCwzMyBAQCBpbnQgc2ZwX3BhcnNlX3BvcnQoc3RydWN0IHNmcF9idXMgKmJ1cywKKyBFWFBPUlRfU1lNQk9MX0dQTChzZnBfcGFyc2VfcG9ydCk7CisgCisgLyoqCisrICogc2ZwX21heV9oYXZlX3BoeSgpIC0gaW5kaWNhdGUgd2hldGhlciB0aGUgbW9kdWxlIG1heSBoYXZlIGEgUEhZCisrICogQGJ1czogYSBwb2ludGVyIHRvIHRoZSAmc3RydWN0IHNmcF9idXMgc3RydWN0dXJlIGZvciB0aGUgc2ZwIG1vZHVsZQorKyAqIEBpZDogYSBwb2ludGVyIHRvIHRoZSBtb2R1bGUncyAmc3RydWN0IHNmcF9lZXByb21faWQKKysgKgorKyAqIFBhcnNlIHRoZSBFRVBST00gaWRlbnRpZmljYXRpb24gZ2l2ZW4gaW4gQGlkLCBhbmQgcmV0dXJuIHdoZXRoZXIKKysgKiB0aGlzIG1vZHVsZSBtYXkgaGF2ZSBhIFBIWS4KKysgKi8KKytib29sIHNmcF9tYXlfaGF2ZV9waHkoc3RydWN0IHNmcF9idXMgKmJ1cywgY29uc3Qgc3RydWN0IHNmcF9lZXByb21faWQgKmlkKQorK3sKKysJaWYgKGlkLT5iYXNlLmUxMDAwX2Jhc2VfdCkKKysJCXJldHVybiB0cnVlOworKworKwlpZiAoaWQtPmJhc2UucGh5c19pZCAhPSBTRkY4MDI0X0lEX0RXRE1fU0ZQKSB7CisrCQlzd2l0Y2ggKGlkLT5iYXNlLmV4dGVuZGVkX2NjKSB7CisrCQljYXNlIFNGRjgwMjRfRUNDXzEwR0JBU0VfVF9TRkk6CisrCQljYXNlIFNGRjgwMjRfRUNDXzEwR0JBU0VfVF9TUjoKKysJCWNhc2UgU0ZGODAyNF9FQ0NfNUdCQVNFX1Q6CisrCQljYXNlIFNGRjgwMjRfRUNDXzJfNUdCQVNFX1Q6CisrCQkJcmV0dXJuIHRydWU7CisrCQl9CisrCX0KKysKKysJcmV0dXJuIGZhbHNlOworK30KKytFWFBPUlRfU1lNQk9MX0dQTChzZnBfbWF5X2hhdmVfcGh5KTsKKysKKysvKioKKyAgKiBzZnBfcGFyc2Vfc3VwcG9ydCgpIC0gUGFyc2UgdGhlIGVlcHJvbSBpZCBmb3Igc3VwcG9ydGVkIGxpbmsgbW9kZXMKKyAgKiBAYnVzOiBhIHBvaW50ZXIgdG8gdGhlICZzdHJ1Y3Qgc2ZwX2J1cyBzdHJ1Y3R1cmUgZm9yIHRoZSBzZnAgbW9kdWxlCisgICogQGlkOiBhIHBvaW50ZXIgdG8gdGhlIG1vZHVsZSdzICZzdHJ1Y3Qgc2ZwX2VlcHJvbV9pZAorLS0tIGEvaW5jbHVkZS9saW51eC9zZnAuaAorKysrIGIvaW5jbHVkZS9saW51eC9zZnAuaAorQEAgLTUzMyw2ICs1MzMsNyBAQCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyB7CisgI2lmIElTX0VOQUJMRUQoQ09ORklHX1NGUCkKKyBpbnQgc2ZwX3BhcnNlX3BvcnQoc3RydWN0IHNmcF9idXMgKmJ1cywgY29uc3Qgc3RydWN0IHNmcF9lZXByb21faWQgKmlkLAorIAkJICAgdW5zaWduZWQgbG9uZyAqc3VwcG9ydCk7CisrYm9vbCBzZnBfbWF5X2hhdmVfcGh5KHN0cnVjdCBzZnBfYnVzICpidXMsIGNvbnN0IHN0cnVjdCBzZnBfZWVwcm9tX2lkICppZCk7Cisgdm9pZCBzZnBfcGFyc2Vfc3VwcG9ydChzdHJ1Y3Qgc2ZwX2J1cyAqYnVzLCBjb25zdCBzdHJ1Y3Qgc2ZwX2VlcHJvbV9pZCAqaWQsCisgCQkgICAgICAgdW5zaWduZWQgbG9uZyAqc3VwcG9ydCk7CisgcGh5X2ludGVyZmFjZV90IHNmcF9zZWxlY3RfaW50ZXJmYWNlKHN0cnVjdCBzZnBfYnVzICpidXMsCitAQCAtNTU2LDYgKzU1NywxMiBAQCBzdGF0aWMgaW5saW5lIGludCBzZnBfcGFyc2VfcG9ydChzdHJ1Y3QKKyAJcmV0dXJuIFBPUlRfT1RIRVI7CisgfQorIAorK3N0YXRpYyBpbmxpbmUgYm9vbCBzZnBfbWF5X2hhdmVfcGh5KHN0cnVjdCBzZnBfYnVzICpidXMsCisrCQkJCSAgICBjb25zdCBzdHJ1Y3Qgc2ZwX2VlcHJvbV9pZCAqaWQpCisreworKwlyZXR1cm4gZmFsc2U7CisrfQorKworIHN0YXRpYyBpbmxpbmUgdm9pZCBzZnBfcGFyc2Vfc3VwcG9ydChzdHJ1Y3Qgc2ZwX2J1cyAqYnVzLAorIAkJCQkgICAgIGNvbnN0IHN0cnVjdCBzZnBfZWVwcm9tX2lkICppZCwKKyAJCQkJICAgICB1bnNpZ25lZCBsb25nICpzdXBwb3J0KQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzUxLW5ldC1waHlsaW5rLW1ha2UtQnJvYWRjb20tQkNNODQ4ODEtYmFzZWQtU0ZQcy13b3JrLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzUxLW5ldC1waHlsaW5rLW1ha2UtQnJvYWRjb20tQkNNODQ4ODEtYmFzZWQtU0ZQcy13b3JrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ODMwNDQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC83NTEtbmV0LXBoeWxpbmstbWFrZS1Ccm9hZGNvbS1CQ004NDg4MS1iYXNlZC1TRlBzLXdvcmsucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorRnJvbSA3YWRiNWIyMTI2YmMwMTNmMDk2NGRkYWVmYWQ2YWQxYjEzMmU4NmMzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KK0RhdGU6IFdlZCwgMTEgRGVjIDIwMTkgMTA6NTY6NTAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gbmV0OiBwaHlsaW5rOiBtYWtlIEJyb2FkY29tIEJDTTg0ODgxIGJhc2VkIFNGUHMgd29yaworCitUaGUgQnJvYWRjb20gQkNNODQ4ODEgZG9lcyBub3QgYXBwZWFyIHRvIHNlbmQgdGhlIFNHTUlJIGNvbnRyb2wgd29yZAord2hlbiBvcGVyYXRpbmcgaW4gU0dNSUkgbW9kZSwgd2hpY2ggY2F1c2VzIG5ldHdvcmsgYWRhcHRlcnMgdG8gZmFpbAordG8gbGluayB3aXRoIHRoZSBQSFksIG9yIGRlY2lkZSB0byBvcGVyYXRlIGF0IGZpeGVkIDFHIHNwZWVkLCBldmVuIGlmCit0aGUgUEhZIG5lZ290aWF0ZWQgMTAwTS4KKworV29yayBhcm91bmQgdGhpcyBieSBkZXRlY3RpbmcgdGhlIEJyb2FkY29tIEJDTTg0ODgxIGFuZCBzd2l0Y2ggdG8gcGh5Cittb2RlIHJhdGhlciB0aGFuIGluYmFuZCBtb2RlLgorCitSZXZpZXdlZC1ieTogRmxvcmlhbiBGYWluZWxsaSA8Zi5mYWluZWxsaUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorU2lnbmVkLW9mZi1ieTogRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorLS0tCisgZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyB8IDE4ICsrKysrKysrKysrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCAxNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCistLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jCisrKysgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jCitAQCAtMTg0MiwxMCArMTg0MiwyMCBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX3NmcF9saW5rX3VwKHZvaWQgKnVwCisgCXBoeWxpbmtfcnVuX3Jlc29sdmUocGwpOworIH0KKyAKKysvKiBUaGUgQnJvYWRjb20gQkNNODQ4ODEgaW4gdGhlIE1ldGhvZGUgRE03MDUyIGlzIHVuYWJsZSB0byBwcm92aWRlIGEgU0dNSUkKKysgKiBvciA4MDIuM3ogY29udHJvbCB3b3JkLCBzbyBpbmJhbmQgd2lsbCBub3Qgd29yay4KKysgKi8KKytzdGF0aWMgYm9vbCBwaHlsaW5rX3BoeV9ub19pbmJhbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeSkKKyt7CisrCXJldHVybiBwaHktPmlzX2M0NSAmJgorKwkJKHBoeS0+YzQ1X2lkcy5kZXZpY2VfaWRzWzFdICYgMHhmZmZmZmZmMCkgPT0gMHhhZTAyNTE1MDsKKyt9CisrCisgc3RhdGljIGludCBwaHlsaW5rX3NmcF9jb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSkKKyB7CisgCXN0cnVjdCBwaHlsaW5rICpwbCA9IHVwc3RyZWFtOworIAlwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlOworKwl1OCBtb2RlOworIAlpbnQgcmV0OworIAorIAkvKgorQEAgLTE4NTcsOSArMTg2NywxMyBAQCBzdGF0aWMgaW50IHBoeWxpbmtfc2ZwX2Nvbm5lY3RfcGh5KHZvaWQKKyAJICovCisgCXBoeV9zdXBwb3J0X2FzeW1fcGF1c2UocGh5KTsKKyAKKysJaWYgKHBoeWxpbmtfcGh5X25vX2luYmFuZChwaHkpKQorKwkJbW9kZSA9IE1MT19BTl9QSFk7CisrCWVsc2UKKysJCW1vZGUgPSBNTE9fQU5fSU5CQU5EOworKworIAkvKiBEbyB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uICovCistCXJldCA9IHBoeWxpbmtfc2ZwX2NvbmZpZyhwbCwgTUxPX0FOX0lOQkFORCwgcGh5LT5zdXBwb3J0ZWQsCistCQkJCSBwaHktPmFkdmVydGlzaW5nKTsKKysJcmV0ID0gcGh5bGlua19zZnBfY29uZmlnKHBsLCBtb2RlLCBwaHktPnN1cHBvcnRlZCwgcGh5LT5hZHZlcnRpc2luZyk7CisgCWlmIChyZXQgPCAwKQorIAkJcmV0dXJuIHJldDsKKyAKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40Lzc1Mi1uZXQtcGh5LWFkZC1Ccm9hZGNvbS1CQ004NDg4MS1QSFktZHJpdmVyLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzUyLW5ldC1waHktYWRkLUJyb2FkY29tLUJDTTg0ODgxLVBIWS1kcml2ZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgzZGVjMAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40Lzc1Mi1uZXQtcGh5LWFkZC1Ccm9hZGNvbS1CQ004NDg4MS1QSFktZHJpdmVyLnBhdGNoCkBAIC0wLDAgKzEsMzE1IEBACitGcm9tIDc1ZjRkOGQxMGUwMTZmNzQyOGMyNjg0MjQ0ODNhOTI3ZWU3YTc4YmIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorRGF0ZTogV2VkLCAxMSBEZWMgMjAxOSAxMDo1Njo1NiArMDAwMAorU3ViamVjdDogW1BBVENIXSBuZXQ6IHBoeTogYWRkIEJyb2FkY29tIEJDTTg0ODgxIFBIWSBkcml2ZXIKKworQWRkIGEgcnVkaW1lbnRhcnkgQ2xhdXNlIDQ1IGRyaXZlciBmb3IgdGhlIEJDTTg0ODgxIFBIWSwgZm91bmQgb24KK01ldGhvZGUgRE03MDUyIFNGUHMuCisKK1Jldmlld2VkLWJ5OiBGbG9yaWFuIEZhaW5lbGxpIDxmLmZhaW5lbGxpQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CitTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+CistLS0KKyBkcml2ZXJzL25ldC9waHkvS2NvbmZpZyAgICB8ICAgNiArCisgZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlICAgfCAgIDEgKworIGRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jIHwgMjY5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDI3NiBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jCisKKy0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCisrKysgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZworQEAgLTMzMCw2ICszMzAsMTIgQEAgY29uZmlnIEJST0FEQ09NX1BIWQorIAkgIEN1cnJlbnRseSBzdXBwb3J0cyB0aGUgQkNNNTQxMSwgQkNNNTQyMSwgQkNNNTQ2MSwgQkNNNTQ2MTZTLCBCQ001NDY0LAorIAkgIEJDTTU0ODEsIEJDTTU0ODEwIGFuZCBCQ001NDgyIFBIWXMuCisgCisrY29uZmlnIEJDTTg0ODgxX1BIWQorKwl0cmlzdGF0ZSAiQnJvYWRjb20gQkNNODQ4ODEgUEhZIgorKwlkZXBlbmRzIG9uIFBIWUxJQgorKwktLS1oZWxwLS0tCisrCSAgU3VwcG9ydCB0aGUgQnJvYWRjb20gQkNNODQ4ODEgUEhZLgorKworIGNvbmZpZyBDSUNBREFfUEhZCisgCXRyaXN0YXRlICJDaWNhZGEgUEhZcyIKKyAJLS0taGVscC0tLQorLS0tIGEvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlCisrKysgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUKK0BAIC02Miw2ICs2Miw3IEBAIG9iai0kKENPTkZJR19CQ004N1hYX1BIWSkJKz0gYmNtODd4eC5vCisgb2JqLSQoQ09ORklHX0JDTV9DWUdOVVNfUEhZKQkrPSBiY20tY3lnbnVzLm8KKyBvYmotJChDT05GSUdfQkNNX05FVF9QSFlMSUIpCSs9IGJjbS1waHktbGliLm8KKyBvYmotJChDT05GSUdfQlJPQURDT01fUEhZKQkrPSBicm9hZGNvbS5vCisrb2JqLSQoQ09ORklHX0JDTTg0ODgxX1BIWSkJKz0gYmNtODQ4ODEubworIG9iai0kKENPTkZJR19DSUNBREFfUEhZKQkrPSBjaWNhZGEubworIG9iai0kKENPTkZJR19DT1JUSU5BX1BIWSkJKz0gY29ydGluYS5vCisgb2JqLSQoQ09ORklHX0RBVklDT01fUEhZKQkrPSBkYXZpY29tLm8KKy0tLSAvZGV2L251bGwKKysrKyBiL2RyaXZlcnMvbmV0L3BoeS9iY204NDg4MS5jCitAQCAtMCwwICsxLDI2OSBAQAorKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisrLy8gQnJvYWRjb20gQkNNODQ4ODEgTkJBU0UtVCBQSFkgZHJpdmVyLCBhcyBmb3VuZCBvbiBhIFNGUCsgbW9kdWxlLgorKy8vIENvcHlyaWdodCAoQykgMjAxOSBSdXNzZWxsIEtpbmcsIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkLgorKy8vCisrLy8gTGlrZSB0aGUgTWFydmVsbCA4OHgzMzEwLCB0aGUgQnJvYWRjb20gODQ4ODEgY2hhbmdlcyBpdHMgaG9zdC1zaWRlCisrLy8gaW50ZXJmYWNlIGFjY29yZGluZyB0byB0aGUgb3BlcmF0aW5nIHNwZWVkIGJldHdlZW4gMTBHQkFTRS1SLAorKy8vIDI1MDBCQVNFLVggYW5kIFNHTUlJIChidXQgdW5saWtlIHRoZSA4OHgzMzEwLCB3aXRob3V0IHRoZSBjb250cm9sCisrLy8gd29yZCkuCisrLy8KKysvLyBUaGlzIGRyaXZlciBvbmx5IHN1cHBvcnRzIHRob3NlIGFzcGVjdHMgb2YgdGhlIFBIWSB0aGF0IEknbSBhYmxlIHRvCisrLy8gb2JzZXJ2ZSBhbmQgdGVzdCB3aXRoIHRoZSBTRlArIG1vZHVsZSwgd2hpY2ggaXMgYW4gaW5jb21wbGV0ZSBzdWJzZXQKKysvLyBvZiB3aGF0IHRoaXMgUEhZIGlzIGFibGUgdG8gc3VwcG9ydC4gRm9yIGV4YW1wbGUsIEkgb25seSBhc3N1bWUgaXQKKysvLyBzdXBwb3J0cyBhIHNpbmdsZSBsYW5lIFNlcmRlcyBjb25uZWN0aW9uLCBidXQgaXQgbWF5IGJlIHRoYXQgdGhlIFBIWQorKy8vIGlzIGFibGUgdG8gc3VwcG9ydCBtb3JlIHRoYW4gdGhhdC4KKysjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKysjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisrI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorKworK2VudW0geworKwlNRElPX0FOX0MyMiA9IDB4ZmZlMCwKKyt9OworKworK3N0YXRpYyBpbnQgYmNtODQ4ODFfd2FpdF9pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCisreworKwl1bnNpZ25lZCBpbnQgdHJpZXMgPSAyMDsKKysJaW50IHJldCwgdmFsOworKworKwlkbyB7CisrCQl2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsIE1ESU9fQ1RSTDEpOworKwkJaWYgKHZhbCA8IDApIHsKKysJCQlyZXQgPSB2YWw7CisrCQkJYnJlYWs7CisrCQl9CisrCQlpZiAoISh2YWwgJiBNRElPX0NUUkwxX1JFU0VUKSkgeworKwkJCXJldCA9IDA7CisrCQkJYnJlYWs7CisrCQl9CisrCQlpZiAoIS0tdHJpZXMpIHsKKysJCQlyZXQgPSAtRVRJTUVET1VUOworKwkJCWJyZWFrOworKwkJfQorKwkJbXNsZWVwKDEwMCk7CisrCX0gd2hpbGUgKDEpOworKworKwlpZiAocmV0KQorKwkJcGh5ZGV2X2VycihwaHlkZXYsICIlcyBmYWlsZWQ6ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKysKKysJcmV0dXJuIHJldDsKKyt9CisrCisrc3RhdGljIGludCBiY204NDg4MV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQorK3sKKysJc3dpdGNoIChwaHlkZXYtPmludGVyZmFjZSkgeworKwljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSToKKysJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfMjUwMEJBU0VYOgorKwljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdLUjoKKysJCWJyZWFrOworKwlkZWZhdWx0OgorKwkJcmV0dXJuIC1FTk9ERVY7CisrCX0KKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQgYmNtODQ4ODFfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKKyt7CisrCS8qIFRoaXMgZHJpdmVyIHJlcXVpcmVzIFBNQVBNRCBhbmQgQU4gYmxvY2tzICovCisrCWNvbnN0IHUzMiBtbWRfbWFzayA9IE1ESU9fREVWU19QTUFQTUQgfCBNRElPX0RFVlNfQU47CisrCisrCWlmICghcGh5ZGV2LT5pc19jNDUgfHwKKysJICAgIChwaHlkZXYtPmM0NV9pZHMuZGV2aWNlc19pbl9wYWNrYWdlICYgbW1kX21hc2spICE9IG1tZF9tYXNrKQorKwkJcmV0dXJuIC1FTk9ERVY7CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IGJjbTg0ODgxX2dldF9mZWF0dXJlcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQorK3sKKysJaW50IHJldDsKKysKKysJcmV0ID0gZ2VucGh5X2M0NV9wbWFfcmVhZF9hYmlsaXRpZXMocGh5ZGV2KTsKKysJaWYgKHJldCkKKysJCXJldHVybiByZXQ7CisrCisrCS8qIEFsdGhvdWdoIHRoZSBQSFkgc2V0cyBiaXQgMS4xMS44LCBpdCBkb2VzIG5vdCBzdXBwb3J0IDEwTSBtb2RlcyAqLworKwlsaW5rbW9kZV9jbGVhcl9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTBiYXNlVF9IYWxmX0JJVCwKKysJCQkgICBwaHlkZXYtPnN1cHBvcnRlZCk7CisrCWxpbmttb2RlX2NsZWFyX2JpdChFVEhUT09MX0xJTktfTU9ERV8xMGJhc2VUX0Z1bGxfQklULAorKwkJCSAgIHBoeWRldi0+c3VwcG9ydGVkKTsKKysKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQgYmNtODQ4ODFfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKKyt7CisrCWJvb2wgY2hhbmdlZCA9IGZhbHNlOworKwl1MzIgYWR2OworKwlpbnQgcmV0OworKworKwkvKiBXYWl0IGZvciB0aGUgUEhZIHRvIGZpbmlzaCBpbml0aWFsaXNpbmcsIG90aGVyd2lzZSBvdXIKKysJICogYWR2ZXJ0aXNlbWVudCBtYXkgYmUgb3ZlcndyaXR0ZW4uCisrCSAqLworKwlyZXQgPSBiY204NDg4MV93YWl0X2luaXQocGh5ZGV2KTsKKysJaWYgKHJldCkKKysJCXJldHVybiByZXQ7CisrCisrCS8qIFdlIGRvbid0IHN1cHBvcnQgbWFudWFsIE1ESSBjb250cm9sICovCisrCXBoeWRldi0+bWRpeF9jdHJsID0gRVRIX1RQX01ESV9BVVRPOworKworKwkvKiBkaXNhYmxlZCBhdXRvbmVnIGRvZXNuJ3Qgc2VlbSB0byB3b3JrIHdpdGggdGhpcyBQSFkgKi8KKysJaWYgKHBoeWRldi0+YXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUpCisrCQlyZXR1cm4gLUVJTlZBTDsKKysKKysJcmV0ID0gZ2VucGh5X2M0NV9hbl9jb25maWdfYW5lZyhwaHlkZXYpOworKwlpZiAocmV0IDwgMCkKKysJCXJldHVybiByZXQ7CisrCWlmIChyZXQgPiAwKQorKwkJY2hhbmdlZCA9IHRydWU7CisrCisrCWFkdiA9IGxpbmttb2RlX2Fkdl90b19taWlfY3RybDEwMDBfdChwaHlkZXYtPmFkdmVydGlzaW5nKTsKKysJcmV0ID0gcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX0FOLAorKwkJCQkgICAgIE1ESU9fQU5fQzIyICsgTUlJX0NUUkwxMDAwLAorKwkJCQkgICAgIEFEVkVSVElTRV8xMDAwRlVMTCB8IEFEVkVSVElTRV8xMDAwSEFMRiwKKysJCQkJICAgICBhZHYpOworKwlpZiAocmV0IDwgMCkKKysJCXJldHVybiByZXQ7CisrCWlmIChyZXQgPiAwKQorKwkJY2hhbmdlZCA9IHRydWU7CisrCisrCXJldHVybiBnZW5waHlfYzQ1X2NoZWNrX2FuZF9yZXN0YXJ0X2FuZWcocGh5ZGV2LCBjaGFuZ2VkKTsKKyt9CisrCisrc3RhdGljIGludCBiY204NDg4MV9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKKyt7CisrCWludCBibXNyLCB2YWw7CisrCisrCXZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX1NUQVQxKTsKKysJaWYgKHZhbCA8IDApCisrCQlyZXR1cm4gdmFsOworKworKwlibXNyID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fQzIyICsgTUlJX0JNU1IpOworKwlpZiAoYm1zciA8IDApCisrCQlyZXR1cm4gdmFsOworKworKwlyZXR1cm4gISEodmFsICYgTURJT19BTl9TVEFUMV9DT01QTEVURSkgJiYKKysJICAgICAgICEhKGJtc3IgJiBCTVNSX0FORUdDT01QTEVURSk7CisrfQorKworK3N0YXRpYyBpbnQgYmNtODQ4ODFfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKKyt7CisrCXVuc2lnbmVkIGludCBtb2RlOworKwlpbnQgYm1zciwgdmFsOworKworKwl2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19DVFJMMSk7CisrCWlmICh2YWwgPCAwKQorKwkJcmV0dXJuIHZhbDsKKysKKysJaWYgKHZhbCAmIE1ESU9fQU5fQ1RSTDFfUkVTVEFSVCkgeworKwkJcGh5ZGV2LT5saW5rID0gMDsKKysJCXJldHVybiAwOworKwl9CisrCisrCXZhbCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX1NUQVQxKTsKKysJaWYgKHZhbCA8IDApCisrCQlyZXR1cm4gdmFsOworKworKwlibXNyID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fQzIyICsgTUlJX0JNU1IpOworKwlpZiAoYm1zciA8IDApCisrCQlyZXR1cm4gdmFsOworKworKwlwaHlkZXYtPmF1dG9uZWdfY29tcGxldGUgPSAhISh2YWwgJiBNRElPX0FOX1NUQVQxX0NPTVBMRVRFKSAmJgorKwkJCQkgICAhIShibXNyICYgQk1TUl9BTkVHQ09NUExFVEUpOworKwlwaHlkZXYtPmxpbmsgPSAhISh2YWwgJiBNRElPX1NUQVQxX0xTVEFUVVMpICYmCisrCQkgICAgICAgISEoYm1zciAmIEJNU1JfTFNUQVRVUyk7CisrCWlmIChwaHlkZXYtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUgJiYgIXBoeWRldi0+YXV0b25lZ19jb21wbGV0ZSkKKysJCXBoeWRldi0+bGluayA9IGZhbHNlOworKworKwlpZiAoIXBoeWRldi0+bGluaykKKysJCXJldHVybiAwOworKworKwlsaW5rbW9kZV96ZXJvKHBoeWRldi0+bHBfYWR2ZXJ0aXNpbmcpOworKwlwaHlkZXYtPnNwZWVkID0gU1BFRURfVU5LTk9XTjsKKysJcGh5ZGV2LT5kdXBsZXggPSBEVVBMRVhfVU5LTk9XTjsKKysJcGh5ZGV2LT5wYXVzZSA9IDA7CisrCXBoeWRldi0+YXN5bV9wYXVzZSA9IDA7CisrCXBoeWRldi0+bWRpeCA9IDA7CisrCisrCWlmIChwaHlkZXYtPmF1dG9uZWdfY29tcGxldGUpIHsKKysJCXZhbCA9IGdlbnBoeV9jNDVfcmVhZF9scGEocGh5ZGV2KTsKKysJCWlmICh2YWwgPCAwKQorKwkJCXJldHVybiB2YWw7CisrCisrCQl2YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwKKysJCQkJICAgTURJT19BTl9DMjIgKyBNSUlfU1RBVDEwMDApOworKwkJaWYgKHZhbCA8IDApCisrCQkJcmV0dXJuIHZhbDsKKysKKysJCW1paV9zdGF0MTAwMF9tb2RfbGlua21vZGVfbHBhX3QocGh5ZGV2LT5scF9hZHZlcnRpc2luZywgdmFsKTsKKysKKysJCWlmIChwaHlkZXYtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpCisrCQkJcGh5X3Jlc29sdmVfYW5lZ19saW5rbW9kZShwaHlkZXYpOworKwl9CisrCisrCWlmIChwaHlkZXYtPmF1dG9uZWcgPT0gQVVUT05FR19ESVNBQkxFKSB7CisrCQkvKiBkaXNhYmxlZCBhdXRvbmVnIGRvZXNuJ3Qgc2VlbSB0byB3b3JrLCBzbyBmb3JjZSB0aGUgbGluaworKwkJICogZG93bi4KKysJCSAqLworKwkJcGh5ZGV2LT5saW5rID0gMDsKKysJCXJldHVybiAwOworKwl9CisrCisrCS8qIFNldCB0aGUgaG9zdCBsaW5rIG1vZGUgLSB3ZSBzZXQgdGhlIHBoeSBpbnRlcmZhY2UgbW9kZSBhbmQKKysJICogdGhlIHNwZWVkIGFjY29yZGluZyB0byB0aGlzIHJlZ2lzdGVyIHNvIHRoYXQgZG93bnNoaWZ0IHdvcmtzLgorKwkgKiBXZSBsZWF2ZSB0aGUgZHVwbGV4IHNldHRpbmcgYXMgcGVyIHRoZSByZXNvbHV0aW9uIGZyb20gdGhlCisrCSAqIGFib3ZlLgorKwkgKi8KKysJdmFsID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4NDAxMSk7CisrCW1vZGUgPSAodmFsICYgMHgxZSkgPj4gMTsKKysJaWYgKG1vZGUgPT0gMSB8fCBtb2RlID09IDIpCisrCQlwaHlkZXYtPmludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSTsKKysJZWxzZSBpZiAobW9kZSA9PSAzKQorKwkJcGh5ZGV2LT5pbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfMTBHS1I7CisrCWVsc2UgaWYgKG1vZGUgPT0gNCkKKysJCXBoeWRldi0+aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWDsKKysJc3dpdGNoIChtb2RlICYgNykgeworKwljYXNlIDE6CisrCQlwaHlkZXYtPnNwZWVkID0gU1BFRURfMTAwOworKwkJYnJlYWs7CisrCWNhc2UgMjoKKysJCXBoeWRldi0+c3BlZWQgPSBTUEVFRF8xMDAwOworKwkJYnJlYWs7CisrCWNhc2UgMzoKKysJCXBoeWRldi0+c3BlZWQgPSBTUEVFRF8xMDAwMDsKKysJCWJyZWFrOworKwljYXNlIDQ6CisrCQlwaHlkZXYtPnNwZWVkID0gU1BFRURfMjUwMDsKKysJCWJyZWFrOworKwljYXNlIDU6CisrCQlwaHlkZXYtPnNwZWVkID0gU1BFRURfNTAwMDsKKysJCWJyZWFrOworKwl9CisrCisrCXJldHVybiBnZW5waHlfYzQ1X3JlYWRfbWRpeChwaHlkZXYpOworK30KKysKKytzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYmNtODQ4ODFfZHJpdmVyc1tdID0geworKwl7CisrCQkucGh5X2lkCQk9IDB4YWUwMjUxNTAsCisrCQkucGh5X2lkX21hc2sJPSAweGZmZmZmZmYwLAorKwkJLm5hbWUJCT0gIkJyb2FkY29tIEJDTTg0ODgxIiwKKysJCS5jb25maWdfaW5pdAk9IGJjbTg0ODgxX2NvbmZpZ19pbml0LAorKwkJLnByb2JlCQk9IGJjbTg0ODgxX3Byb2JlLAorKwkJLmdldF9mZWF0dXJlcwk9IGJjbTg0ODgxX2dldF9mZWF0dXJlcywKKysJCS5jb25maWdfYW5lZwk9IGJjbTg0ODgxX2NvbmZpZ19hbmVnLAorKwkJLmFuZWdfZG9uZQk9IGJjbTg0ODgxX2FuZWdfZG9uZSwKKysJCS5yZWFkX3N0YXR1cwk9IGJjbTg0ODgxX3JlYWRfc3RhdHVzLAorKwl9LAorK307CisrCisrbW9kdWxlX3BoeV9kcml2ZXIoYmNtODQ4ODFfZHJpdmVycyk7CisrCisrLyogRklYTUU6IG1vZHVsZSBhdXRvLWxvYWRpbmcgZm9yIENsYXVzZSA0NSBQSFlzIHNlZW1zIG5vbi1mdW5jdGlvbmFsICovCisrc3RhdGljIHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBiY204NDg4MV90YmxbXSA9IHsKKysJeyAweGFlMDI1MTUwLCAweGZmZmZmZmYwIH0sCisrCXsgfSwKKyt9OworK01PRFVMRV9BVVRIT1IoIlJ1c3NlbGwgS2luZyIpOworK01PRFVMRV9ERVNDUklQVElPTigiQnJvYWRjb20gQkNNODQ4ODEgUEhZIGRyaXZlciIpOworK01PRFVMRV9ERVZJQ0VfVEFCTEUobWRpbywgYmNtODQ4ODFfdGJsKTsKKytNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC83NTMtbmV0LXNmcC1hZGQtc3VwcG9ydC1mb3ItQ2xhdXNlLTQ1LVBIWXMucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC83NTMtbmV0LXNmcC1hZGQtc3VwcG9ydC1mb3ItQ2xhdXNlLTQ1LVBIWXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNkMWJhNwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40Lzc1My1uZXQtc2ZwLWFkZC1zdXBwb3J0LWZvci1DbGF1c2UtNDUtUEhZcy5wYXRjaApAQCAtMCwwICsxLDk0IEBACitGcm9tIDZkZjY3MDlkYzNkMDBlMGJjOTQ4ZDQ1ZGZhOGQ4ZjE4YmEzNzljNDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorRGF0ZTogVHVlLCA1IE5vdiAyMDE5IDExOjU2OjE4ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggNjU2LzY2MF0gbmV0OiBzZnA6IGFkZCBzdXBwb3J0IGZvciBDbGF1c2UgNDUgUEhZcworCitTb21lIFNGUCsgbW9kdWxlcyBoYXZlIGEgQ2xhdXNlIDQ1IFBIWSBvbmJvYXJkLCB3aGljaCBpcyBhY2Nlc3NpYmxlIHZpYQordGhlIG5vcm1hbCBJMkMgYWRkcmVzcy4gIERldGVjdCAxMEcgQkFTRS1UIFBIWXMgd2hpY2ggbWF5IGhhdmUgYW4KK2FjY2Vzc2libGUgUEhZIGFuZCBwcm9iZSBmb3IgaXQuCisKK1NpZ25lZC1vZmYtYnk6IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CistLS0KKyBkcml2ZXJzL25ldC9waHkvc2ZwLmMgfCA0NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQwIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYworKysrIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jCitAQCAtMTQxOCwxMiArMTQxOCwxMiBAQCBzdGF0aWMgdm9pZCBzZnBfc21fcGh5X2RldGFjaChzdHJ1Y3Qgc2ZwCisgCXNmcC0+bW9kX3BoeSA9IE5VTEw7CisgfQorIAorLXN0YXRpYyB2b2lkIHNmcF9zbV9wcm9iZV9waHkoc3RydWN0IHNmcCAqc2ZwKQorK3N0YXRpYyB2b2lkIHNmcF9zbV9wcm9iZV9waHkoc3RydWN0IHNmcCAqc2ZwLCBib29sIGlzX2M0NSkKKyB7CisgCXN0cnVjdCBwaHlfZGV2aWNlICpwaHk7CisgCWludCBlcnI7CisgCistCXBoeSA9IG1kaW9idXNfc2NhbihzZnAtPmkyY19taWksIFNGUF9QSFlfQUREUik7CisrCXBoeSA9IGdldF9waHlfZGV2aWNlKHNmcC0+aTJjX21paSwgU0ZQX1BIWV9BRERSLCBpc19jNDUpOworIAlpZiAocGh5ID09IEVSUl9QVFIoLUVOT0RFVikpIHsKKyAJCWRldl9pbmZvKHNmcC0+ZGV2LCAibm8gUEhZIGRldGVjdGVkXG4iKTsKKyAJCXJldHVybjsKK0BAIC0xNDMzLDYgKzE0MzMsMTMgQEAgc3RhdGljIHZvaWQgc2ZwX3NtX3Byb2JlX3BoeShzdHJ1Y3Qgc2ZwCisgCQlyZXR1cm47CisgCX0KKyAKKysJZXJyID0gcGh5X2RldmljZV9yZWdpc3RlcihwaHkpOworKwlpZiAoZXJyKSB7CisrCQlwaHlfZGV2aWNlX2ZyZWUocGh5KTsKKysJCWRldl9lcnIoc2ZwLT5kZXYsICJwaHlfZGV2aWNlX3JlZ2lzdGVyIGZhaWxlZDogJWRcbiIsIGVycik7CisrCQlyZXR1cm47CisrCX0KKysKKyAJZXJyID0gc2ZwX2FkZF9waHkoc2ZwLT5zZnBfYnVzLCBwaHkpOworIAlpZiAoZXJyKSB7CisgCQlwaHlfZGV2aWNlX3JlbW92ZShwaHkpOworQEAgLTE1MDMsMTAgKzE1MTAsMzIgQEAgc3RhdGljIHZvaWQgc2ZwX3NtX2ZhdWx0KHN0cnVjdCBzZnAgKnNmcAorIAl9CisgfQorIAorKy8qIFByb2JlIGEgU0ZQIGZvciBhIFBIWSBkZXZpY2UgaWYgdGhlIG1vZHVsZSBzdXBwb3J0cyBjb3BwZXIgLSB0aGUgUEhZCisrICogbm9ybWFsbHkgc2l0cyBhdCBJMkMgYnVzIGFkZHJlc3MgMHg1NiwgYW5kIG1heSBlaXRoZXIgYmUgYSBjbGF1c2UgMjIKKysgKiBvciBjbGF1c2UgNDUgUEhZLgorKyAqCisrICogQ2xhdXNlIDIyIGNvcHBlciBTRlAgbW9kdWxlcyBub3JtYWxseSBvcGVyYXRlIGluIENpc2NvIFNHTUlJIG1vZGUgd2l0aAorKyAqIG5lZ290aWF0aW9uIGVuYWJsZWQsIGJ1dCBzb21lIG1heSBiZSBpbiAxMDAwYmFzZS1YIC0gd2hpY2ggaXMgZm9yIHRoZQorKyAqIFBIWSBkcml2ZXIgdG8gZGV0ZXJtaW5lLgorKyAqCisrICogQ2xhdXNlIDQ1IGNvcHBlciBTRlArIG1vZHVsZXMgKDEwRykgYXBwZWFyIHRvIHN3aXRjaCB0aGVpciBpbnRlcmZhY2UKKysgKiBtb2RlIGFjY29yZGluZyB0byB0aGUgbmVnb3RpYXRlZCBsaW5lIHNwZWVkLgorKyAqLworIHN0YXRpYyB2b2lkIHNmcF9zbV9wcm9iZV9mb3JfcGh5KHN0cnVjdCBzZnAgKnNmcCkKKyB7CistCWlmIChzZnAtPmlkLmJhc2UuZTEwMDBfYmFzZV90KQorLQkJc2ZwX3NtX3Byb2JlX3BoeShzZnApOworKwlzd2l0Y2ggKHNmcC0+aWQuYmFzZS5leHRlbmRlZF9jYykgeworKwljYXNlIFNGRjgwMjRfRUNDXzEwR0JBU0VfVF9TRkk6CisrCWNhc2UgU0ZGODAyNF9FQ0NfMTBHQkFTRV9UX1NSOgorKwljYXNlIFNGRjgwMjRfRUNDXzVHQkFTRV9UOgorKwljYXNlIFNGRjgwMjRfRUNDXzJfNUdCQVNFX1Q6CisrCQlzZnBfc21fcHJvYmVfcGh5KHNmcCwgdHJ1ZSk7CisrCQlicmVhazsKKysKKysJZGVmYXVsdDoKKysJCWlmIChzZnAtPmlkLmJhc2UuZTEwMDBfYmFzZV90KQorKwkJCXNmcF9zbV9wcm9iZV9waHkoc2ZwLCBmYWxzZSk7CisrCQlicmVhazsKKysJfQorIH0KKyAKKyBzdGF0aWMgaW50IHNmcF9tb2R1bGVfcGFyc2VfcG93ZXIoc3RydWN0IHNmcCAqc2ZwKQorQEAgLTE1NjYsNiArMTU5NSwxMyBAQCBzdGF0aWMgaW50IHNmcF9zbV9tb2RfaHBvd2VyKHN0cnVjdCBzZnAKKyAJCXJldHVybiAtRUFHQUlOOworIAl9CisgCisrCS8qIERNNzA1MiByZXBvcnRzIGFzIGEgaGlnaCBwb3dlciBtb2R1bGUsIHJlc3BvbmRzIHRvIHJlYWRzICh3aXRoCisrCSAqIGFsbCBieXRlcyAweGZmKSBhdCAweDUxIGJ1dCBkb2VzIG5vdCBhY2NlcHQgd3JpdGVzLiAgSW4gYW55IGNhc2UsCisrCSAqIGlmIHRoZSBiaXQgaXMgYWxyZWFkeSBzZXQsIHdlJ3JlIGFscmVhZHkgaW4gaGlnaCBwb3dlciBtb2RlLgorKwkgKi8KKysJaWYgKCEhKHZhbCAmIEJJVCgwKSkgPT0gZW5hYmxlKQorKwkJcmV0dXJuIDA7CisrCisgCWlmIChlbmFibGUpCisgCQl2YWwgfD0gQklUKDApOworIAllbHNlCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC83NTQtbmV0LXNmcC1maXgtdW5iaW5kLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzU0LW5ldC1zZnAtZml4LXVuYmluZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzE5MjJlCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzU0LW5ldC1zZnAtZml4LXVuYmluZC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIDcyOWZkMDVhYWMyMmNkZjFlNTAyZmJmMWJmODBlNWViYmEwZDlmYmMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorRGF0ZTogVHVlLCAzIERlYyAyMDE5IDE3OjQ4OjI4ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIG5ldDogc2ZwOiBmaXggdW5iaW5kCisKK1doZW4gdW5iaW5kaW5nLCB3ZSBkb24ndCBjb3JyZWN0bHkgdGVhciBkb3duIHRoZSBtb2R1bGUgc3RhdGUsIGxlYXZpbmcKKyhmb3IgZXhhbXBsZSkgdGhlIGh3bW9uIHJlZ2lzdHJhdGlvbiBiZWhpbmQuIEVuc3VyZSBldmVyeXRoaW5nIGlzCitwcm9wZXJseSByZW1vdmVkIGJ5IHNlbmRpbmcgYSByZW1vdmUgZXZlbnQgYXQgdW5iaW5kLgorCitGaXhlczogNmIwZGE1YzljMWEzICgibmV0OiBzZnA6IHRyYWNrIHVwc3RyZWFtJ3MgYXR0YWNobWVudCBzdGF0ZSBpbiBzdGF0ZSBtYWNoaW5lIikKK1NpZ25lZC1vZmYtYnk6IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CistLS0KKyBkcml2ZXJzL25ldC9waHkvc2ZwLmMgfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKKy0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYworKysrIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jCitAQCAtMjQzMSw2ICsyNDMxLDEwIEBAIHN0YXRpYyBpbnQgc2ZwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGUKKyAKKyAJc2ZwX3VucmVnaXN0ZXJfc29ja2V0KHNmcC0+c2ZwX2J1cyk7CisgCisrCXJ0bmxfbG9jaygpOworKwlzZnBfc21fZXZlbnQoc2ZwLCBTRlBfRV9SRU1PVkUpOworKwlydG5sX3VubG9jaygpOworKworIAlyZXR1cm4gMDsKKyB9CisgCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC83NTUtbmV0LXNmcC1maXgtaHdtb24ucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC83NTUtbmV0LXNmcC1maXgtaHdtb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE4ZTQ4MAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40Lzc1NS1uZXQtc2ZwLWZpeC1od21vbi5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitGcm9tIDVlYjBkZjUwMjNjNmFlOGE3MWE3ODQ4ZmQ1ZTFmNzg4ZDg2ZTUxYWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorRGF0ZTogVHVlLCAzIERlYyAyMDE5IDE4OjQ2OjA0ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIG5ldDogc2ZwOiBmaXggaHdtb24KKworVGhlIHJlZmVyZW5jZWQgY29tbWl0IGJlbG93IGFsbG93ZWQgbW9yZSB0aGFuIG9uZSBod21vbiBkZXZpY2UgdG8gYmUKK2NyZWF0ZWQgcGVyIFNGUCwgd2hpY2ggaXMgZGVmaW5pdGVseSBub3Qgd2hhdCB3ZSB3YW50LiBBdm9pZCB0aGlzIGJ5Citvbmx5IGNyZWF0aW5nIHRoZSBod21vbiBkZXZpY2UganVzdCBhcyB3ZSB0cmFuc2l0aW9uIHRvIFdBSVRERVYgc3RhdGUuCisKK0ZpeGVzOiAxMzlkM2EyMTJhMWYgKCJuZXQ6IHNmcDogYWxsb3cgbW9kdWxlcyB3aXRoIHNsb3cgZGlhZ25vc3RpY3MgdG8gcHJvYmUiKQorU2lnbmVkLW9mZi1ieTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KKy0tLQorIGRyaXZlcnMvbmV0L3BoeS9zZnAuYyB8IDEzICsrKystLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQorCistLS0gYS9kcml2ZXJzL25ldC9waHkvc2ZwLmMKKysrKyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuYworQEAgLTE4ODMsNiArMTg4MywxMCBAQCBzdGF0aWMgdm9pZCBzZnBfc21fbW9kdWxlKHN0cnVjdCBzZnAgKnNmCisgCQkJYnJlYWs7CisgCQl9CisgCisrCQllcnIgPSBzZnBfaHdtb25faW5zZXJ0KHNmcCk7CisrCQlpZiAoZXJyKQorKwkJCWRldl93YXJuKHNmcC0+ZGV2LCAiaHdtb24gcHJvYmUgZmFpbGVkOiAlZFxuIiwgZXJyKTsKKysKKyAJCXNmcF9zbV9tb2RfbmV4dChzZnAsIFNGUF9NT0RfV0FJVERFViwgMCk7CisgCQkvKiBmYWxsIHRocm91Z2ggKi8KKyAJY2FzZSBTRlBfTU9EX1dBSVRERVY6CitAQCAtMTkzMiwxNSArMTkzNiw2IEBAIHN0YXRpYyB2b2lkIHNmcF9zbV9tb2R1bGUoc3RydWN0IHNmcCAqc2YKKyAJY2FzZSBTRlBfTU9EX0VSUk9SOgorIAkJYnJlYWs7CisgCX0KKy0KKy0jaWYgSVNfRU5BQkxFRChDT05GSUdfSFdNT04pCistCWlmIChzZnAtPnNtX21vZF9zdGF0ZSA+PSBTRlBfTU9EX1dBSVRERVYgJiYKKy0JICAgIElTX0VSUl9PUl9OVUxMKHNmcC0+aHdtb25fZGV2KSkgeworLQkJZXJyID0gc2ZwX2h3bW9uX2luc2VydChzZnApOworLQkJaWYgKGVycikKKy0JCQlkZXZfd2FybihzZnAtPmRldiwgImh3bW9uIHByb2JlIGZhaWxlZDogJWRcbiIsIGVycik7CistCX0KKy0jZW5kaWYKKyB9CisgCisgc3RhdGljIHZvaWQgc2ZwX3NtX21haW4oc3RydWN0IHNmcCAqc2ZwLCB1bnNpZ25lZCBpbnQgZXZlbnQpCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC83NTYtbmV0LXNmcC11c2UtYS1kZWZpbml0aW9uLWZvci10aGUtZmF1bHQtcmVjb3ZlcnktYXR0ZS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40Lzc1Ni1uZXQtc2ZwLXVzZS1hLWRlZmluaXRpb24tZm9yLXRoZS1mYXVsdC1yZWNvdmVyeS1hdHRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNGY4YzQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC83NTYtbmV0LXNmcC11c2UtYS1kZWZpbml0aW9uLWZvci10aGUtZmF1bHQtcmVjb3ZlcnktYXR0ZS5wYXRjaApAQCAtMCwwICsxLDU1IEBACitGcm9tIDRkNmJmYjZmYmIwMGFmMzg0MDJkYjRkMWNlNDY0ZTIyZGVmOWZkOWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorRGF0ZTogVGh1LCAyOCBOb3YgMjAxOSAxNDoyNDo0MCArMDAwMAorU3ViamVjdDogW1BBVENIIDEvNF0gbmV0OiBzZnA6IHVzZSBhIGRlZmluaXRpb24gZm9yIHRoZSBmYXVsdCByZWNvdmVyeQorIGF0dGVtcHRzCisKK1NpZ25lZC1vZmYtYnk6IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CistLS0KKyBkcml2ZXJzL25ldC9waHkvc2ZwLmMgfCAxNCArKysrKysrKysrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCistLS0gYS9kcml2ZXJzL25ldC9waHkvc2ZwLmMKKysrKyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuYworQEAgLTE3Miw2ICsxNzIsMTQgQEAgc3RhdGljIGNvbnN0IGVudW0gZ3Bpb2RfZmxhZ3MgZ3Bpb19mbGFncworICNkZWZpbmUgVF9SRVNFVF9VUwkJMTAKKyAjZGVmaW5lIFRfRkFVTFRfUkVDT1ZFUgkJbXNlY3NfdG9famlmZmllcygxMDAwKQorIAorKy8qIE5fRkFVTFRfSU5JVCBpcyB0aGUgbnVtYmVyIG9mIHJlY292ZXJ5IGF0dGVtcHRzIGF0IG1vZHVsZSBpbml0aWFsaXNhdGlvbgorKyAqIHRpbWUuIElmIHRoZSBUWF9GQVVMVCBzaWduYWwgaXMgbm90IGRlYXNzZXJ0ZWQgYWZ0ZXIgdGhpcyBudW1iZXIgb2YKKysgKiBhdHRlbXB0cyBhdCBjbGVhcmluZyBpdCwgd2UgZGVjaWRlIHRoYXQgdGhlIG1vZHVsZSBpcyBmYXVsdHkuCisrICogTl9GQVVMVCBpcyB0aGUgc2FtZSBidXQgYWZ0ZXIgdGhlIG1vZHVsZSBoYXMgaW5pdGlhbGlzZWQuCisrICovCisrI2RlZmluZSBOX0ZBVUxUX0lOSVQJCTUKKysjZGVmaW5lIE5fRkFVTFQJCQk1CisrCisgLyogU0ZQIG1vZHVsZSBwcmVzZW5jZSBkZXRlY3Rpb24gaXMgcG9vcjogdGhlIHRocmVlIE1PRCBERUYgc2lnbmFscyBhcmUKKyAgKiB0aGUgc2FtZSBsZW5ndGggb24gdGhlIFBDQiwgd2hpY2ggbWVhbnMgaXQncyBwb3NzaWJsZSBmb3IgTU9EIERFRiAwIHRvCisgICogY29ubmVjdCBiZWZvcmUgdGhlIEkyQyBidXMgb24gTU9EIERFRiAxLzIuCitAQCAtMTk3Miw3ICsxOTgwLDcgQEAgc3RhdGljIHZvaWQgc2ZwX3NtX21haW4oc3RydWN0IHNmcCAqc2ZwLAorIAkJc2ZwX21vZHVsZV90eF9lbmFibGUoc2ZwKTsKKyAKKyAJCS8qIEluaXRpYWxpc2UgdGhlIGZhdWx0IGNsZWFyYW5jZSByZXRyaWVzICovCistCQlzZnAtPnNtX3JldHJpZXMgPSA1OworKwkJc2ZwLT5zbV9yZXRyaWVzID0gTl9GQVVMVF9JTklUOworIAorIAkJLyogV2UgbmVlZCB0byBjaGVjayB0aGUgVFhfRkFVTFQgc3RhdGUsIHdoaWNoIGlzIG5vdCBkZWZpbmVkCisgCQkgKiB3aGlsZSBUWF9ESVNBQkxFIGlzIGFzc2VydGVkLiBUaGUgZWFybGllc3Qgd2Ugd2FudCB0byBkbworQEAgLTIwMTIsNyArMjAyMCw3IEBAIHN0YXRpYyB2b2lkIHNmcF9zbV9tYWluKHN0cnVjdCBzZnAgKnNmcCwKKyAJCQkgKiBvciB0X3N0YXJ0X3VwLCBzbyBhc3N1bWUgdGhlcmUgaXMgYSBmYXVsdC4KKyAJCQkgKi8KKyAJCQlzZnBfc21fZmF1bHQoc2ZwLCBTRlBfU19JTklUX1RYX0ZBVUxULAorLQkJCQkgICAgIHNmcC0+c21fcmV0cmllcyA9PSA1KTsKKysJCQkJICAgICBzZnAtPnNtX3JldHJpZXMgPT0gTl9GQVVMVF9JTklUKTsKKyAJCX0gZWxzZSBpZiAoZXZlbnQgPT0gU0ZQX0VfVElNRU9VVCB8fCBldmVudCA9PSBTRlBfRV9UWF9DTEVBUikgeworIAlpbml0X2RvbmU6CS8qIFRYX0ZBVUxUIGRlYXNzZXJ0ZWQgb3Igd2UgdGltZWQgb3V0IHdpdGggVFhfRkFVTFQKKyAJCQkgKiBjbGVhci4gIFByb2JlIGZvciB0aGUgUEhZIGFuZCBjaGVjayB0aGUgTE9TIHN0YXRlLgorQEAgLTIwMjUsNyArMjAzMyw3IEBAIHN0YXRpYyB2b2lkIHNmcF9zbV9tYWluKHN0cnVjdCBzZnAgKnNmcCwKKyAJCQlzZnBfc21fbGlua19jaGVja19sb3Moc2ZwKTsKKyAKKyAJCQkvKiBSZXNldCB0aGUgZmF1bHQgcmV0cnkgY291bnQgKi8KKy0JCQlzZnAtPnNtX3JldHJpZXMgPSA1OworKwkJCXNmcC0+c21fcmV0cmllcyA9IE5fRkFVTFQ7CisgCQl9CisgCQlicmVhazsKKyAKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40Lzc1Ny1uZXQtc2ZwLXJlbmFtZS1zbV9yZXRyaWVzLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzU3LW5ldC1zZnAtcmVuYW1lLXNtX3JldHJpZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNmM2I2YwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40Lzc1Ny1uZXQtc2ZwLXJlbmFtZS1zbV9yZXRyaWVzLnBhdGNoCkBAIC0wLDAgKzEsNjAgQEAKK0Zyb20gYmZhM2NiYjAxYzdlYTM0ZDczNjljOWJkMmVjMWIyZGM2NzA4MmIwNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CitEYXRlOiBNb24sIDIgRGVjIDIwMTkgMTg6MDY6NDQgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzRdIG5ldDogc2ZwOiByZW5hbWUgc21fcmV0cmllcworCitSZW5hbWUgc21fcmV0cmllcyBhcyBzbV9mYXVsdF9yZXRyaWVzLCBhcyB0aGlzIGlzIHdoYXQgdGhpcyBtZW1iZXIgaXMKK3RyYWNraW5nLgorCitTaWduZWQtb2ZmLWJ5OiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorLS0tCisgZHJpdmVycy9uZXQvcGh5L3NmcC5jIHwgMTAgKysrKystLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYworKysrIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jCitAQCAtMjM1LDcgKzIzNSw3IEBAIHN0cnVjdCBzZnAgeworIAl1bnNpZ25lZCBjaGFyIHNtX21vZF90cmllczsKKyAJdW5zaWduZWQgY2hhciBzbV9kZXZfc3RhdGU7CisgCXVuc2lnbmVkIHNob3J0IHNtX3N0YXRlOworLQl1bnNpZ25lZCBpbnQgc21fcmV0cmllczsKKysJdW5zaWduZWQgY2hhciBzbV9mYXVsdF9yZXRyaWVzOworIAorIAlzdHJ1Y3Qgc2ZwX2VlcHJvbV9pZCBpZDsKKyAJdW5zaWduZWQgaW50IG1vZHVsZV9wb3dlcl9tVzsKK0BAIC0xNTA2LDcgKzE1MDYsNyBAQCBzdGF0aWMgYm9vbCBzZnBfbG9zX2V2ZW50X2luYWN0aXZlKHN0cnVjCisgCisgc3RhdGljIHZvaWQgc2ZwX3NtX2ZhdWx0KHN0cnVjdCBzZnAgKnNmcCwgdW5zaWduZWQgaW50IG5leHRfc3RhdGUsIGJvb2wgd2FybikKKyB7CistCWlmIChzZnAtPnNtX3JldHJpZXMgJiYgIS0tc2ZwLT5zbV9yZXRyaWVzKSB7CisrCWlmIChzZnAtPnNtX2ZhdWx0X3JldHJpZXMgJiYgIS0tc2ZwLT5zbV9mYXVsdF9yZXRyaWVzKSB7CisgCQlkZXZfZXJyKHNmcC0+ZGV2LAorIAkJCSJtb2R1bGUgcGVyc2lzdGVudGx5IGluZGljYXRlcyBmYXVsdCwgZGlzYWJsaW5nXG4iKTsKKyAJCXNmcF9zbV9uZXh0KHNmcCwgU0ZQX1NfVFhfRElTQUJMRSwgMCk7CitAQCAtMTk4MCw3ICsxOTgwLDcgQEAgc3RhdGljIHZvaWQgc2ZwX3NtX21haW4oc3RydWN0IHNmcCAqc2ZwLAorIAkJc2ZwX21vZHVsZV90eF9lbmFibGUoc2ZwKTsKKyAKKyAJCS8qIEluaXRpYWxpc2UgdGhlIGZhdWx0IGNsZWFyYW5jZSByZXRyaWVzICovCistCQlzZnAtPnNtX3JldHJpZXMgPSBOX0ZBVUxUX0lOSVQ7CisrCQlzZnAtPnNtX2ZhdWx0X3JldHJpZXMgPSBOX0ZBVUxUX0lOSVQ7CisgCisgCQkvKiBXZSBuZWVkIHRvIGNoZWNrIHRoZSBUWF9GQVVMVCBzdGF0ZSwgd2hpY2ggaXMgbm90IGRlZmluZWQKKyAJCSAqIHdoaWxlIFRYX0RJU0FCTEUgaXMgYXNzZXJ0ZWQuIFRoZSBlYXJsaWVzdCB3ZSB3YW50IHRvIGRvCitAQCAtMjAyMCw3ICsyMDIwLDcgQEAgc3RhdGljIHZvaWQgc2ZwX3NtX21haW4oc3RydWN0IHNmcCAqc2ZwLAorIAkJCSAqIG9yIHRfc3RhcnRfdXAsIHNvIGFzc3VtZSB0aGVyZSBpcyBhIGZhdWx0LgorIAkJCSAqLworIAkJCXNmcF9zbV9mYXVsdChzZnAsIFNGUF9TX0lOSVRfVFhfRkFVTFQsCistCQkJCSAgICAgc2ZwLT5zbV9yZXRyaWVzID09IE5fRkFVTFRfSU5JVCk7CisrCQkJCSAgICAgc2ZwLT5zbV9mYXVsdF9yZXRyaWVzID09IE5fRkFVTFRfSU5JVCk7CisgCQl9IGVsc2UgaWYgKGV2ZW50ID09IFNGUF9FX1RJTUVPVVQgfHwgZXZlbnQgPT0gU0ZQX0VfVFhfQ0xFQVIpIHsKKyAJaW5pdF9kb25lOgkvKiBUWF9GQVVMVCBkZWFzc2VydGVkIG9yIHdlIHRpbWVkIG91dCB3aXRoIFRYX0ZBVUxUCisgCQkJICogY2xlYXIuICBQcm9iZSBmb3IgdGhlIFBIWSBhbmQgY2hlY2sgdGhlIExPUyBzdGF0ZS4KK0BAIC0yMDMzLDcgKzIwMzMsNyBAQCBzdGF0aWMgdm9pZCBzZnBfc21fbWFpbihzdHJ1Y3Qgc2ZwICpzZnAsCisgCQkJc2ZwX3NtX2xpbmtfY2hlY2tfbG9zKHNmcCk7CisgCisgCQkJLyogUmVzZXQgdGhlIGZhdWx0IHJldHJ5IGNvdW50ICovCistCQkJc2ZwLT5zbV9yZXRyaWVzID0gTl9GQVVMVDsKKysJCQlzZnAtPnNtX2ZhdWx0X3JldHJpZXMgPSBOX0ZBVUxUOworIAkJfQorIAkJYnJlYWs7CisgCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC83NTgtbmV0LXNmcC1lcnJvci1oYW5kbGluZy1mb3ItcGh5LXByb2JlLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzU4LW5ldC1zZnAtZXJyb3ItaGFuZGxpbmctZm9yLXBoeS1wcm9iZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmE3NzJkCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzU4LW5ldC1zZnAtZXJyb3ItaGFuZGxpbmctZm9yLXBoeS1wcm9iZS5wYXRjaApAQCAtMCwwICsxLDk3IEBACitGcm9tIDFmYmE1NDNkYzhlZGY0YTQzYmZmMzI3NjMwNjY0OGJiMjdjMWUyMDcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorRGF0ZTogRnJpLCAyOSBOb3YgMjAxOSAwMDozMDowOCArMDAwMAorU3ViamVjdDogW1BBVENIIDMvNF0gbmV0OiBzZnA6IGVycm9yIGhhbmRsaW5nIGZvciBwaHkgcHJvYmUKKworU2lnbmVkLW9mZi1ieTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KKy0tLQorIGRyaXZlcnMvbmV0L3BoeS9zZnAuYyB8IDI2ICsrKysrKysrKysrKysrKysrLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDE3IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuYworKysrIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5jCitAQCAtMTQyNiw3ICsxNDI2LDcgQEAgc3RhdGljIHZvaWQgc2ZwX3NtX3BoeV9kZXRhY2goc3RydWN0IHNmcAorIAlzZnAtPm1vZF9waHkgPSBOVUxMOworIH0KKyAKKy1zdGF0aWMgdm9pZCBzZnBfc21fcHJvYmVfcGh5KHN0cnVjdCBzZnAgKnNmcCwgYm9vbCBpc19jNDUpCisrc3RhdGljIGludCBzZnBfc21fcHJvYmVfcGh5KHN0cnVjdCBzZnAgKnNmcCwgYm9vbCBpc19jNDUpCisgeworIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5OworIAlpbnQgZXJyOworQEAgLTE0MzQsMTggKzE0MzQsMTggQEAgc3RhdGljIHZvaWQgc2ZwX3NtX3Byb2JlX3BoeShzdHJ1Y3Qgc2ZwCisgCXBoeSA9IGdldF9waHlfZGV2aWNlKHNmcC0+aTJjX21paSwgU0ZQX1BIWV9BRERSLCBpc19jNDUpOworIAlpZiAocGh5ID09IEVSUl9QVFIoLUVOT0RFVikpIHsKKyAJCWRldl9pbmZvKHNmcC0+ZGV2LCAibm8gUEhZIGRldGVjdGVkXG4iKTsKKy0JCXJldHVybjsKKysJCXJldHVybiAwOworIAl9CisgCWlmIChJU19FUlIocGh5KSkgeworIAkJZGV2X2VycihzZnAtPmRldiwgIm1kaW9idXMgc2NhbiByZXR1cm5lZCAlbGRcbiIsIFBUUl9FUlIocGh5KSk7CistCQlyZXR1cm47CisrCQlyZXR1cm4gUFRSX0VSUihwaHkpOworIAl9CisgCisgCWVyciA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTsKKyAJaWYgKGVycikgeworIAkJcGh5X2RldmljZV9mcmVlKHBoeSk7CisgCQlkZXZfZXJyKHNmcC0+ZGV2LCAicGh5X2RldmljZV9yZWdpc3RlciBmYWlsZWQ6ICVkXG4iLCBlcnIpOworLQkJcmV0dXJuOworKwkJcmV0dXJuIGVycjsKKyAJfQorIAorIAllcnIgPSBzZnBfYWRkX3BoeShzZnAtPnNmcF9idXMsIHBoeSk7CitAQCAtMTQ1MywxMCArMTQ1MywxMiBAQCBzdGF0aWMgdm9pZCBzZnBfc21fcHJvYmVfcGh5KHN0cnVjdCBzZnAKKyAJCXBoeV9kZXZpY2VfcmVtb3ZlKHBoeSk7CisgCQlwaHlfZGV2aWNlX2ZyZWUocGh5KTsKKyAJCWRldl9lcnIoc2ZwLT5kZXYsICJzZnBfYWRkX3BoeSBmYWlsZWQ6ICVkXG4iLCBlcnIpOworLQkJcmV0dXJuOworKwkJcmV0dXJuIGVycjsKKyAJfQorIAorIAlzZnAtPm1vZF9waHkgPSBwaHk7CisrCisrCXJldHVybiAwOworIH0KKyAKKyBzdGF0aWMgdm9pZCBzZnBfc21fbGlua191cChzdHJ1Y3Qgc2ZwICpzZnApCitAQCAtMTUyOSwyMSArMTUzMSwyNCBAQCBzdGF0aWMgdm9pZCBzZnBfc21fZmF1bHQoc3RydWN0IHNmcCAqc2ZwCisgICogQ2xhdXNlIDQ1IGNvcHBlciBTRlArIG1vZHVsZXMgKDEwRykgYXBwZWFyIHRvIHN3aXRjaCB0aGVpciBpbnRlcmZhY2UKKyAgKiBtb2RlIGFjY29yZGluZyB0byB0aGUgbmVnb3RpYXRlZCBsaW5lIHNwZWVkLgorICAqLworLXN0YXRpYyB2b2lkIHNmcF9zbV9wcm9iZV9mb3JfcGh5KHN0cnVjdCBzZnAgKnNmcCkKKytzdGF0aWMgaW50IHNmcF9zbV9wcm9iZV9mb3JfcGh5KHN0cnVjdCBzZnAgKnNmcCkKKyB7CisrCWludCBlcnIgPSAwOworKworIAlzd2l0Y2ggKHNmcC0+aWQuYmFzZS5leHRlbmRlZF9jYykgeworIAljYXNlIFNGRjgwMjRfRUNDXzEwR0JBU0VfVF9TRkk6CisgCWNhc2UgU0ZGODAyNF9FQ0NfMTBHQkFTRV9UX1NSOgorIAljYXNlIFNGRjgwMjRfRUNDXzVHQkFTRV9UOgorIAljYXNlIFNGRjgwMjRfRUNDXzJfNUdCQVNFX1Q6CistCQlzZnBfc21fcHJvYmVfcGh5KHNmcCwgdHJ1ZSk7CisrCQllcnIgPSBzZnBfc21fcHJvYmVfcGh5KHNmcCwgdHJ1ZSk7CisgCQlicmVhazsKKyAKKyAJZGVmYXVsdDoKKyAJCWlmIChzZnAtPmlkLmJhc2UuZTEwMDBfYmFzZV90KQorLQkJCXNmcF9zbV9wcm9iZV9waHkoc2ZwLCBmYWxzZSk7CisrCQkJZXJyID0gc2ZwX3NtX3Byb2JlX3BoeShzZnAsIGZhbHNlKTsKKyAJCWJyZWFrOworIAl9CisrCXJldHVybiBlcnI7CisgfQorIAorIHN0YXRpYyBpbnQgc2ZwX21vZHVsZV9wYXJzZV9wb3dlcihzdHJ1Y3Qgc2ZwICpzZnApCitAQCAtMjAyNSw3ICsyMDMwLDEwIEBAIHN0YXRpYyB2b2lkIHNmcF9zbV9tYWluKHN0cnVjdCBzZnAgKnNmcCwKKyAJaW5pdF9kb25lOgkvKiBUWF9GQVVMVCBkZWFzc2VydGVkIG9yIHdlIHRpbWVkIG91dCB3aXRoIFRYX0ZBVUxUCisgCQkJICogY2xlYXIuICBQcm9iZSBmb3IgdGhlIFBIWSBhbmQgY2hlY2sgdGhlIExPUyBzdGF0ZS4KKyAJCQkgKi8KKy0JCQlzZnBfc21fcHJvYmVfZm9yX3BoeShzZnApOworKwkJCWlmIChzZnBfc21fcHJvYmVfZm9yX3BoeShzZnApKSB7CisrCQkJCXNmcF9zbV9uZXh0KHNmcCwgU0ZQX1NfRkFJTCwgMCk7CisrCQkJCWJyZWFrOworKwkJCX0KKyAJCQlpZiAoc2ZwX21vZHVsZV9zdGFydChzZnAtPnNmcF9idXMpKSB7CisgCQkJCXNmcF9zbV9uZXh0KHNmcCwgU0ZQX1NfRkFJTCwgMCk7CisgCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzU5LW5ldC1zZnAtcmUtYXR0ZW1wdC1wcm9iaW5nLWZvci1waHkucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC83NTktbmV0LXNmcC1yZS1hdHRlbXB0LXByb2JpbmctZm9yLXBoeS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWJiNmIwCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzU5LW5ldC1zZnAtcmUtYXR0ZW1wdC1wcm9iaW5nLWZvci1waHkucGF0Y2gKQEAgLTAsMCArMSwxMzIgQEAKK0Zyb20gNmM0ZWZlODNhMGFjZjZmMDZjODlhZTE3Yjg4NWZhNTczOWViNWJlNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CitEYXRlOiBNb24sIDIgRGVjIDIwMTkgMTg6MjA6MjIgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCA0LzRdIG5ldDogc2ZwOiByZS1hdHRlbXB0IHByb2JpbmcgZm9yIHBoeQorCitTb21lIDEwMDBCQVNFLVQgUEhZIG1vZHVsZXMgdGFrZSBhIHdoaWxlIGZvciB0aGUgUEhZIHRvIHdha2UgdXAuCitSZXRyeSB0aGUgcHJvYmUgYSBudW1iZXIgb2YgdGltZXMgYmVmb3JlIGRlY2lkaW5nIHRoYXQgdGhlIG1vZHVsZSBoYXMKK25vIFBIWS4KKworVGVzdGVkIHdpdGg6CisgU291cmNlcGhvdG9uaWNzIFNQR0JUWENORkMgLSBQSFkgdGFrZXMgbGVzcyB0aGFuIDUwbXMgdG8gcmVzcG9uZC4KKyBDaGFtcGlvbiBPbmUgMTAwMFNGUFQgLSBQSFkgdGFrZXMgYWJvdXQgMjAwbXMgdG8gcmVzcG9uZC4KKyBNaWtyb3RpayBTLVJKMDEgLSBubyBQSFkKKworU2lnbmVkLW9mZi1ieTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KKy0tLQorIGRyaXZlcnMvbmV0L3BoeS9zZnAuYyB8IDU5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0MiBpbnNlcnRpb25zKCspLCAxNyBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9uZXQvcGh5L3NmcC5jCisrKysgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmMKK0BAIC02Miw2ICs2Miw3IEBAIGVudW0geworIAlTRlBfU19GQUlMLAorIAlTRlBfU19XQUlULAorIAlTRlBfU19JTklULAorKwlTRlBfU19JTklUX1BIWSwKKyAJU0ZQX1NfSU5JVF9UWF9GQVVMVCwKKyAJU0ZQX1NfV0FJVF9MT1MsCisgCVNGUF9TX0xJTktfVVAsCitAQCAtMTI2LDYgKzEyNyw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc21fc3RhdGVfc3RyaW4KKyAJW1NGUF9TX0ZBSUxdID0gImZhaWwiLAorIAlbU0ZQX1NfV0FJVF0gPSAid2FpdCIsCisgCVtTRlBfU19JTklUXSA9ICJpbml0IiwKKysJW1NGUF9TX0lOSVRfUEhZXSA9ICJpbml0X3BoeSIsCisgCVtTRlBfU19JTklUX1RYX0ZBVUxUXSA9ICJpbml0X3R4X2ZhdWx0IiwKKyAJW1NGUF9TX1dBSVRfTE9TXSA9ICJ3YWl0X2xvcyIsCisgCVtTRlBfU19MSU5LX1VQXSA9ICJsaW5rX3VwIiwKK0BAIC0xODAsNiArMTgyLDEyIEBAIHN0YXRpYyBjb25zdCBlbnVtIGdwaW9kX2ZsYWdzIGdwaW9fZmxhZ3MKKyAjZGVmaW5lIE5fRkFVTFRfSU5JVAkJNQorICNkZWZpbmUgTl9GQVVMVAkJCTUKKyAKKysvKiBUX1BIWV9SRVRSWSBpcyB0aGUgdGltZSBpbnRlcnZhbCBiZXR3ZWVuIGF0dGVtcHRzIHRvIHByb2JlIHRoZSBQSFkuCisrICogUl9QSFlfUkVUUlkgaXMgdGhlIG51bWJlciBvZiBhdHRlbXB0cy4KKysgKi8KKysjZGVmaW5lIFRfUEhZX1JFVFJZCQltc2Vjc190b19qaWZmaWVzKDUwKQorKyNkZWZpbmUgUl9QSFlfUkVUUlkJCTEyCisrCisgLyogU0ZQIG1vZHVsZSBwcmVzZW5jZSBkZXRlY3Rpb24gaXMgcG9vcjogdGhlIHRocmVlIE1PRCBERUYgc2lnbmFscyBhcmUKKyAgKiB0aGUgc2FtZSBsZW5ndGggb24gdGhlIFBDQiwgd2hpY2ggbWVhbnMgaXQncyBwb3NzaWJsZSBmb3IgTU9EIERFRiAwIHRvCisgICogY29ubmVjdCBiZWZvcmUgdGhlIEkyQyBidXMgb24gTU9EIERFRiAxLzIuCitAQCAtMjM2LDYgKzI0NCw3IEBAIHN0cnVjdCBzZnAgeworIAl1bnNpZ25lZCBjaGFyIHNtX2Rldl9zdGF0ZTsKKyAJdW5zaWduZWQgc2hvcnQgc21fc3RhdGU7CisgCXVuc2lnbmVkIGNoYXIgc21fZmF1bHRfcmV0cmllczsKKysJdW5zaWduZWQgY2hhciBzbV9waHlfcmV0cmllczsKKyAKKyAJc3RydWN0IHNmcF9lZXByb21faWQgaWQ7CisgCXVuc2lnbmVkIGludCBtb2R1bGVfcG93ZXJfbVc7CitAQCAtMTQzMiwxMCArMTQ0MSw4IEBAIHN0YXRpYyBpbnQgc2ZwX3NtX3Byb2JlX3BoeShzdHJ1Y3Qgc2ZwICoKKyAJaW50IGVycjsKKyAKKyAJcGh5ID0gZ2V0X3BoeV9kZXZpY2Uoc2ZwLT5pMmNfbWlpLCBTRlBfUEhZX0FERFIsIGlzX2M0NSk7CistCWlmIChwaHkgPT0gRVJSX1BUUigtRU5PREVWKSkgeworLQkJZGV2X2luZm8oc2ZwLT5kZXYsICJubyBQSFkgZGV0ZWN0ZWRcbiIpOworLQkJcmV0dXJuIDA7CistCX0KKysJaWYgKHBoeSA9PSBFUlJfUFRSKC1FTk9ERVYpKQorKwkJcmV0dXJuIFBUUl9FUlIocGh5KTsKKyAJaWYgKElTX0VSUihwaHkpKSB7CisgCQlkZXZfZXJyKHNmcC0+ZGV2LCAibWRpb2J1cyBzY2FuIHJldHVybmVkICVsZFxuIiwgUFRSX0VSUihwaHkpKTsKKyAJCXJldHVybiBQVFJfRVJSKHBoeSk7CitAQCAtMTk1NCw2ICsxOTYxLDcgQEAgc3RhdGljIHZvaWQgc2ZwX3NtX21vZHVsZShzdHJ1Y3Qgc2ZwICpzZgorIHN0YXRpYyB2b2lkIHNmcF9zbV9tYWluKHN0cnVjdCBzZnAgKnNmcCwgdW5zaWduZWQgaW50IGV2ZW50KQorIHsKKyAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworKwlpbnQgcmV0OworIAorIAkvKiBTb21lIGV2ZW50cyBhcmUgZ2xvYmFsICovCisgCWlmIChzZnAtPnNtX3N0YXRlICE9IFNGUF9TX0RPV04gJiYKK0BAIC0yMDI3LDIyICsyMDM1LDM5IEBAIHN0YXRpYyB2b2lkIHNmcF9zbV9tYWluKHN0cnVjdCBzZnAgKnNmcCwKKyAJCQlzZnBfc21fZmF1bHQoc2ZwLCBTRlBfU19JTklUX1RYX0ZBVUxULAorIAkJCQkgICAgIHNmcC0+c21fZmF1bHRfcmV0cmllcyA9PSBOX0ZBVUxUX0lOSVQpOworIAkJfSBlbHNlIGlmIChldmVudCA9PSBTRlBfRV9USU1FT1VUIHx8IGV2ZW50ID09IFNGUF9FX1RYX0NMRUFSKSB7CistCWluaXRfZG9uZToJLyogVFhfRkFVTFQgZGVhc3NlcnRlZCBvciB3ZSB0aW1lZCBvdXQgd2l0aCBUWF9GQVVMVAorLQkJCSAqIGNsZWFyLiAgUHJvYmUgZm9yIHRoZSBQSFkgYW5kIGNoZWNrIHRoZSBMT1Mgc3RhdGUuCistCQkJICovCistCQkJaWYgKHNmcF9zbV9wcm9iZV9mb3JfcGh5KHNmcCkpIHsKKy0JCQkJc2ZwX3NtX25leHQoc2ZwLCBTRlBfU19GQUlMLCAwKTsKKy0JCQkJYnJlYWs7CistCQkJfQorLQkJCWlmIChzZnBfbW9kdWxlX3N0YXJ0KHNmcC0+c2ZwX2J1cykpIHsKKy0JCQkJc2ZwX3NtX25leHQoc2ZwLCBTRlBfU19GQUlMLCAwKTsKKysJaW5pdF9kb25lOgorKwkJCXNmcC0+c21fcGh5X3JldHJpZXMgPSBSX1BIWV9SRVRSWTsKKysJCQlnb3RvIHBoeV9wcm9iZTsKKysJCX0KKysJCWJyZWFrOworKworKwljYXNlIFNGUF9TX0lOSVRfUEhZOgorKwkJaWYgKGV2ZW50ICE9IFNGUF9FX1RJTUVPVVQpCisrCQkJYnJlYWs7CisrCXBoeV9wcm9iZToKKysJCS8qIFRYX0ZBVUxUIGRlYXNzZXJ0ZWQgb3Igd2UgdGltZWQgb3V0IHdpdGggVFhfRkFVTFQKKysJCSAqIGNsZWFyLiAgUHJvYmUgZm9yIHRoZSBQSFkgYW5kIGNoZWNrIHRoZSBMT1Mgc3RhdGUuCisrCQkgKi8KKysJCXJldCA9IHNmcF9zbV9wcm9iZV9mb3JfcGh5KHNmcCk7CisrCQlpZiAocmV0ID09IC1FTk9ERVYpIHsKKysJCQlpZiAoLS1zZnAtPnNtX3BoeV9yZXRyaWVzKSB7CisrCQkJCXNmcF9zbV9uZXh0KHNmcCwgU0ZQX1NfSU5JVF9QSFksIFRfUEhZX1JFVFJZKTsKKyAJCQkJYnJlYWs7CisrCQkJfSBlbHNlIHsKKysJCQkJZGV2X2luZm8oc2ZwLT5kZXYsICJubyBQSFkgZGV0ZWN0ZWRcbiIpOworIAkJCX0KKy0JCQlzZnBfc21fbGlua19jaGVja19sb3Moc2ZwKTsKKy0KKy0JCQkvKiBSZXNldCB0aGUgZmF1bHQgcmV0cnkgY291bnQgKi8KKy0JCQlzZnAtPnNtX2ZhdWx0X3JldHJpZXMgPSBOX0ZBVUxUOworKwkJfSBlbHNlIGlmIChyZXQpIHsKKysJCQlzZnBfc21fbmV4dChzZnAsIFNGUF9TX0ZBSUwsIDApOworKwkJCWJyZWFrOworIAkJfQorKwkJaWYgKHNmcF9tb2R1bGVfc3RhcnQoc2ZwLT5zZnBfYnVzKSkgeworKwkJCXNmcF9zbV9uZXh0KHNmcCwgU0ZQX1NfRkFJTCwgMCk7CisrCQkJYnJlYWs7CisrCQl9CisrCQlzZnBfc21fbGlua19jaGVja19sb3Moc2ZwKTsKKysKKysJCS8qIFJlc2V0IHRoZSBmYXVsdCByZXRyeSBjb3VudCAqLworKwkJc2ZwLT5zbV9mYXVsdF9yZXRyaWVzID0gTl9GQVVMVDsKKyAJCWJyZWFrOworIAorIAljYXNlIFNGUF9TX0lOSVRfVFhfRkFVTFQ6CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC83NjAtbmV0LWRzYS1tdjg4ZTZ4eHgtZml4LXZsYW4tc2V0dXAucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC83NjAtbmV0LWRzYS1tdjg4ZTZ4eHgtZml4LXZsYW4tc2V0dXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ5YjQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40Lzc2MC1uZXQtZHNhLW12ODhlNnh4eC1maXgtdmxhbi1zZXR1cC5wYXRjaApAQCAtMCwwICsxLDI3IEBACitGcm9tIGExYjI5MWYzZjZjODBhNmM1Y2NhZDcyODNmYzQ3MmQ3N2EyYTQ3NjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorRGF0ZTogU3VuLCAyMiBEZWMgMjAxOSAxMjo0MDoxMSArMDAwMAorU3ViamVjdDogW1BBVENIXSBuZXQ6IGRzYTogbXY4OGU2eHh4OiBmaXggdmxhbiBzZXR1cAorCitQcm92aWRlIGFuIG9wdGlvbiB0aGF0IGRyaXZlcnMgY2FuIHNldCB0byBpbmRpY2F0ZSB0aGV5IHdhbnQgdG8gcmVjZWl2ZQordmxhbiBjb25maWd1cmF0aW9uIGV2ZW4gd2hlbiB2bGFuIGZpbHRlcmluZyBpcyBkaXNhYmxlZC4gVGhpcyBpcyBzYWZlCitmb3IgTWFydmVsbCBEU0EgYnJpZGdlcywgd2hpY2ggZG8gbm90IGxvb2sgdXAgaW5ncmVzcyB0cmFmZmljIGluIHRoZQorVlRVIGlmIHRoZSBwb3J0IGlzIGluIDgwMjFRIGRpc2FibGVkIHN0YXRlLiBXaGV0aGVyIHRoaXMgY2hhbmdlIGlzCitzdWl0YWJsZSBmb3IgYWxsIERTQSBicmlkZ2VzIGlzIG5vdCBrbm93bi4KKworU2lnbmVkLW9mZi1ieTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KK1NpZ25lZC1vZmYtYnk6IERFTkcgUWluZ2ZhbmcgPGRxZmV4dEBnbWFpbC5jb20+CistLS0KKyBkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYyB8ICAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworLS0tIGEvZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMKKysrKyBiL2RyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jCitAQCAtMjY2Myw2ICsyNjYzLDcgQEAgc3RhdGljIGludCBtdjg4ZTZ4eHhfc2V0dXAoc3RydWN0IGRzYV9zdworIAorIAljaGlwLT5kcyA9IGRzOworIAlkcy0+c2xhdmVfbWlpX2J1cyA9IG12ODhlNnh4eF9kZWZhdWx0X21kaW9fYnVzKGNoaXApOworKwlkcy0+Y29uZmlndXJlX3ZsYW5fd2hpbGVfbm90X2ZpbHRlcmluZyA9IHRydWU7CisgCisgCW12ODhlNnh4eF9yZWdfbG9jayhjaGlwKTsKKyAKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40Lzc2MS1uZXQtZHNhLW10NzUzMC1TdXBwb3J0LUVFRS1mZWF0dXJlcy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40Lzc2MS1uZXQtZHNhLW10NzUzMC1TdXBwb3J0LUVFRS1mZWF0dXJlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmRjMzVkCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzYxLW5ldC1kc2EtbXQ3NTMwLVN1cHBvcnQtRUVFLWZlYXR1cmVzLnBhdGNoCkBAIC0wLDAgKzEsMTIxIEBACitGcm9tIDljZmIyZDQyNmMzODI3MmYyNDVlOWU2ZjYyYjM1NTJkMWVkNTg1MmIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/UmVuPUMzPUE5PTIwdmFuPTIwRG9yc3Q/PSA8b3BlbnNvdXJjZUB2ZG9yc3QuY29tPgorRGF0ZTogVHVlLCAyMSBBcHIgMjAyMCAwMDoxODowOCArMDIwMAorU3ViamVjdDogW1BBVENIXSBuZXQ6IGRzYTogbXQ3NTMwOiBTdXBwb3J0IEVFRSBmZWF0dXJlcworTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitTaWduZWQtb2ZmLWJ5OiBSZW7DqSB2YW4gRG9yc3QgPG9wZW5zb3VyY2VAdmRvcnN0LmNvbT4KKy0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYworKysrIGIvZHJpdmVycy9uZXQvZHNhL210NzUzMC5jCitAQCAtMTQwNyw5ICsxNDA3LDEzIEBAIHN0YXRpYyB2b2lkIG10NzUzMF9waHlsaW5rX21hY19jb25maWcoc3QKKyAJc3dpdGNoIChzdGF0ZS0+c3BlZWQpIHsKKyAJY2FzZSBTUEVFRF8xMDAwOgorIAkJbWNyX25ldyB8PSBQTUNSX0ZPUkNFX1NQRUVEXzEwMDA7CisrCQlpZiAocHJpdi0+ZWVlX2VuYWJsZSAmIEJJVChwb3J0KSkKKysJCQltY3JfbmV3IHw9IFBNQ1JfRk9SQ0VfRUVFMUc7CisgCQlicmVhazsKKyAJY2FzZSBTUEVFRF8xMDA6CisgCQltY3JfbmV3IHw9IFBNQ1JfRk9SQ0VfU1BFRURfMTAwOworKwkJaWYgKHByaXYtPmVlZV9lbmFibGUgJiBCSVQocG9ydCkpCisrCQkJbWNyX25ldyB8PSBQTUNSX0ZPUkNFX0VFRTEwMDsKKyAJCWJyZWFrOworIAl9CisgCWlmIChzdGF0ZS0+ZHVwbGV4ID09IERVUExFWF9GVUxMKSB7CitAQCAtMTU0NSw2ICsxNTQ5LDU0IEBAIG10NzUzMF9waHlsaW5rX21hY19saW5rX3N0YXRlKHN0cnVjdCBkc2EKKyAJcmV0dXJuIDE7CisgfQorIAorK3N0YXRpYyBpbnQgbXQ3NTMwX2dldF9tYWNfZWVlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCisrCQkJICAgICAgc3RydWN0IGV0aHRvb2xfZWVlICplKQorK3sKKysJc3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtPnByaXY7CisrCXUzMiBlZWVjciwgcG1zcjsKKysKKysJZS0+ZWVlX2VuYWJsZWQgPSAhIShwcml2LT5lZWVfZW5hYmxlICYgQklUKHBvcnQpKTsKKysKKysJaWYgKGUtPmVlZV9lbmFibGVkKSB7CisrCQllZWVjciA9IG10NzUzMF9yZWFkKHByaXYsIE1UNzUzMF9QTUVFRUNSX1AocG9ydCkpOworKwkJZS0+dHhfbHBpX2VuYWJsZWQgPSAhKGVlZWNyICYgTFBJX01PREVfRU4pOworKwkJZS0+dHhfbHBpX3RpbWVyICAgPSAoZWVlY3IgPj4gNCkgJiAweEZGRjsKKysJCXBtc3IgPSBtdDc1MzBfcmVhZChwcml2LCBNVDc1MzBfUE1TUl9QKHBvcnQpKTsKKysJCWUtPmVlZV9hY3RpdmUgID0gZS0+ZWVlX2VuYWJsZWQgJiYgISEocG1zciAmIFBNU1JfRUVFMUcpOworKwl9IGVsc2UgeworKwkJZS0+dHhfbHBpX2VuYWJsZWQgPSAwOworKwkJZS0+dHhfbHBpX3RpbWVyID0gMDsKKysJCWUtPmVlZV9hY3RpdmUgPSAwOworKwl9CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IG10NzUzMF9zZXRfbWFjX2VlZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAorKwkJCSAgICAgIHN0cnVjdCBldGh0b29sX2VlZSAqZSkKKyt7CisrCXN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLT5wcml2OworKwl1MzIgZWVlY3I7CisrCisrCWlmIChlLT50eF9scGlfZW5hYmxlZCAmJiBlLT50eF9scGlfdGltZXIgPiAweEZGRikKKysJCXJldHVybiAtRUlOVkFMOworKworKwlpZiAoZS0+ZWVlX2VuYWJsZWQpIHsKKysJCXByaXYtPmVlZV9lbmFibGUgfD0gQklUKHBvcnQpOworKwkJLy9NVDc1MzBfUE1FRUVDUl9QCisrCQllZWVjciA9IG10NzUzMF9yZWFkKHByaXYsIE1UNzUzMF9QTUVFRUNSX1AocG9ydCkpOworKwkJZWVlY3IgJj0gMHhGRkZGMDAwMDsKKysJCWlmICghZS0+dHhfbHBpX2VuYWJsZWQpCisrCQkJZWVlY3IgfD0gTFBJX01PREVfRU47CisrCQllZWVjciB8PSBMUElfVEhSRVNIKGUtPnR4X2xwaV90aW1lcik7CisrCQltdDc1MzBfd3JpdGUocHJpdiwgTVQ3NTMwX1BNRUVFQ1JfUChwb3J0KSwgZWVlY3IpOworKwl9IGVsc2UgeworKwkJcHJpdi0+ZWVlX2VuYWJsZSAmPSB+KEJJVChwb3J0KSk7CisrCX0KKysKKysJcmV0dXJuIDA7CisrfQorKworIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbXQ3NTMwX3N3aXRjaF9vcHMgPSB7CisgCS5nZXRfdGFnX3Byb3RvY29sCT0gbXRrX2dldF90YWdfcHJvdG9jb2wsCisgCS5zZXR1cAkJCT0gbXQ3NTMwX3NldHVwLAorQEAgLTE1NzIsNiArMTYyNCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbXQ3NTMKKyAJLnBoeWxpbmtfbWFjX2NvbmZpZwk9IG10NzUzMF9waHlsaW5rX21hY19jb25maWcsCisgCS5waHlsaW5rX21hY19saW5rX2Rvd24JPSBtdDc1MzBfcGh5bGlua19tYWNfbGlua19kb3duLAorIAkucGh5bGlua19tYWNfbGlua191cAk9IG10NzUzMF9waHlsaW5rX21hY19saW5rX3VwLAorKwkuZ2V0X21hY19lZWUJCT0gbXQ3NTMwX2dldF9tYWNfZWVlLAorKwkuc2V0X21hY19lZWUJCT0gbXQ3NTMwX3NldF9tYWNfZWVlLAorIH07CisgCisgc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXQ3NTMwX29mX21hdGNoW10gPSB7CistLS0gYS9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmgKKysrKyBiL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuaAorQEAgLTIxMiw2ICsyMTIsOCBAQCBlbnVtIG10NzUzMF92bGFuX3BvcnRfYXR0ciB7CisgI2RlZmluZSAgUE1DUl9SWF9FTgkJCUJJVCgxMykKKyAjZGVmaW5lICBQTUNSX0JBQ0tPRkZfRU4JCUJJVCg5KQorICNkZWZpbmUgIFBNQ1JfQkFDS1BSX0VOCQkJQklUKDgpCisrI2RlZmluZSAgUE1DUl9GT1JDRV9FRUUxRwkJQklUKDcpCisrI2RlZmluZSAgUE1DUl9GT1JDRV9FRUUxMDAJCUJJVCg2KQorICNkZWZpbmUgIFBNQ1JfVFhfRkNfRU4JCQlCSVQoNSkKKyAjZGVmaW5lICBQTUNSX1JYX0ZDX0VOCQkJQklUKDQpCisgI2RlZmluZSAgUE1DUl9GT1JDRV9TUEVFRF8xMDAwCQlCSVQoMykKK0BAIC0yMzMsNiArMjM1LDEyIEBAIGVudW0gbXQ3NTMwX3ZsYW5fcG9ydF9hdHRyIHsKKyAjZGVmaW5lICBQTVNSX0RQWAkJCUJJVCgxKQorICNkZWZpbmUgIFBNU1JfTElOSwkJCUJJVCgwKQorIAorKyNkZWZpbmUgTVQ3NTMwX1BNRUVFQ1JfUCh4KQkJKDB4MzAwNCArICh4KSAqIDB4MTAwKQorKyNkZWZpbmUgIFdBS0VVUF9USU1FXzEwMDAoeCkJCSgoeCAmIDB4RkYpIDw8IDI0KQorKyNkZWZpbmUgIFdBS0VVUF9USU1FXzEwMCh4KQkJKCh4ICYgMHhGRikgPDwgMTYpCisrI2RlZmluZSAgTFBJX1RIUkVTSCh4KQkJCSgoeCAmIDB4RkZGKSA8PCA0KQorKyNkZWZpbmUgIExQSV9NT0RFX0VOCQkJQklUKDApCisrCisgLyogUmVnaXN0ZXIgZm9yIE1JQiAqLworICNkZWZpbmUgTVQ3NTMwX1BPUlRfTUlCX0NPVU5URVIoeCkJKDB4NDAwMCArICh4KSAqIDB4MTAwKQorICNkZWZpbmUgTVQ3NTMwX01JQl9DQ1IJCQkweDRmZTAKK0BAIC00NzEsNiArNDc5LDcgQEAgc3RydWN0IG10NzUzMF9wcml2IHsKKyAJdW5zaWduZWQgaW50CQlwNV9pbnRmX3NlbDsKKyAJdTgJCQltaXJyb3Jfcng7CisgCXU4CQkJbWlycm9yX3R4OworKwl1OAkJCWVlZV9lbmFibGU7CisgCisgCXN0cnVjdCBtdDc1MzBfcG9ydAlwb3J0c1tNVDc1MzBfTlVNX1BPUlRTXTsKKyAJLyogcHJvdGVjdCBhbW9uZyBwcm9jZXNzZXMgZm9yIHJlZ2lzdGVycyBhY2Nlc3MqLwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzYyLW5ldC1icmlkZ2Utc3dpdGNoZGV2LVJlZmFjdG9yLWJyX3N3aXRjaGRldl9mZGJfbm90aWYucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC83NjItbmV0LWJyaWRnZS1zd2l0Y2hkZXYtUmVmYWN0b3ItYnJfc3dpdGNoZGV2X2ZkYl9ub3RpZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmEyZDM3Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzYyLW5ldC1icmlkZ2Utc3dpdGNoZGV2LVJlZmFjdG9yLWJyX3N3aXRjaGRldl9mZGJfbm90aWYucGF0Y2gKQEAgLTAsMCArMSw3MSBAQAorRnJvbSA0NmZlNmNlY2IyOTZkODUwYzFlZTJiMzMzZTU3MDkzYWM0YjczM2YzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVG9iaWFzIFdhbGRla3JhbnogPHRvYmlhc0B3YWxkZWtyYW56LmNvbT4KK0RhdGU6IFNhdCwgMTYgSmFuIDIwMjEgMDI6MjU6MDkgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gbmV0OiBicmlkZ2U6IHN3aXRjaGRldjogUmVmYWN0b3IgYnJfc3dpdGNoZGV2X2ZkYl9ub3RpZnkKKworSW5zdGVhZCBvZiBoYXZpbmcgdG8gYWRkIG1vcmUgYW5kIG1vcmUgYXJndW1lbnRzIHRvCiticl9zd2l0Y2hkZXZfZmRiX2NhbGxfbm90aWZpZXJzLCBnZXQgcmlkIG9mIGl0IGFuZCBidWlsZCB0aGUgaW5mbworc3RydWN0IGRpcmVjdGx5IGluIGJyX3N3aXRjaGRldl9mZGJfbm90aWZ5LgorCitTaWduZWQtb2ZmLWJ5OiBUb2JpYXMgV2FsZGVrcmFueiA8dG9iaWFzQHdhbGRla3JhbnouY29tPgorUmV2aWV3ZWQtYnk6IFZsYWRpbWlyIE9sdGVhbiA8b2x0ZWFudkBnbWFpbC5jb20+CistLS0KKyBuZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jIHwgMzcgKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMSBpbnNlcnRpb25zKCspLCAyNiBkZWxldGlvbnMoLSkKKworLS0tIGEvbmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYworKysrIGIvbmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYworQEAgLTEwMiw0MiArMTAyLDI3IEBAIGludCBicl9zd2l0Y2hkZXZfc2V0X3BvcnRfZmxhZyhzdHJ1Y3QgbmUKKyAJcmV0dXJuIDA7CisgfQorIAorLXN0YXRpYyB2b2lkCistYnJfc3dpdGNoZGV2X2ZkYl9jYWxsX25vdGlmaWVycyhib29sIGFkZGluZywgY29uc3QgdW5zaWduZWQgY2hhciAqbWFjLAorLQkJCQl1MTYgdmlkLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorLQkJCQlib29sIGFkZGVkX2J5X3VzZXIsIGJvb2wgb2ZmbG9hZGVkKQorLXsKKy0Jc3RydWN0IHN3aXRjaGRldl9ub3RpZmllcl9mZGJfaW5mbyBpbmZvOworLQl1bnNpZ25lZCBsb25nIG5vdGlmaWVyX3R5cGU7CistCistCWluZm8uYWRkciA9IG1hYzsKKy0JaW5mby52aWQgPSB2aWQ7CistCWluZm8uYWRkZWRfYnlfdXNlciA9IGFkZGVkX2J5X3VzZXI7CistCWluZm8ub2ZmbG9hZGVkID0gb2ZmbG9hZGVkOworLQlub3RpZmllcl90eXBlID0gYWRkaW5nID8gU1dJVENIREVWX0ZEQl9BRERfVE9fREVWSUNFIDogU1dJVENIREVWX0ZEQl9ERUxfVE9fREVWSUNFOworLQljYWxsX3N3aXRjaGRldl9ub3RpZmllcnMobm90aWZpZXJfdHlwZSwgZGV2LCAmaW5mby5pbmZvLCBOVUxMKTsKKy19CistCisgdm9pZAorIGJyX3N3aXRjaGRldl9mZGJfbm90aWZ5KGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqZmRiLCBpbnQgdHlwZSkKKyB7CisrCXN0cnVjdCBzd2l0Y2hkZXZfbm90aWZpZXJfZmRiX2luZm8gaW5mbyA9IHsKKysJCS5hZGRyID0gZmRiLT5rZXkuYWRkci5hZGRyLAorKwkJLnZpZCA9IGZkYi0+a2V5LnZsYW5faWQsCisrCQkuYWRkZWRfYnlfdXNlciA9IGZkYi0+YWRkZWRfYnlfdXNlciwKKysJCS5vZmZsb2FkZWQgPSBmZGItPm9mZmxvYWRlZCwKKysJfTsKKysKKyAJaWYgKCFmZGItPmRzdCkKKyAJCXJldHVybjsKKyAKKyAJc3dpdGNoICh0eXBlKSB7CisgCWNhc2UgUlRNX0RFTE5FSUdIOgorLQkJYnJfc3dpdGNoZGV2X2ZkYl9jYWxsX25vdGlmaWVycyhmYWxzZSwgZmRiLT5rZXkuYWRkci5hZGRyLAorLQkJCQkJCWZkYi0+a2V5LnZsYW5faWQsCistCQkJCQkJZmRiLT5kc3QtPmRldiwKKy0JCQkJCQlmZGItPmFkZGVkX2J5X3VzZXIsCistCQkJCQkJZmRiLT5vZmZsb2FkZWQpOworKwkJY2FsbF9zd2l0Y2hkZXZfbm90aWZpZXJzKFNXSVRDSERFVl9GREJfREVMX1RPX0RFVklDRSwKKysJCQkJCSBmZGItPmRzdC0+ZGV2LCAmaW5mby5pbmZvLCBOVUxMKTsKKyAJCWJyZWFrOworIAljYXNlIFJUTV9ORVdORUlHSDoKKy0JCWJyX3N3aXRjaGRldl9mZGJfY2FsbF9ub3RpZmllcnModHJ1ZSwgZmRiLT5rZXkuYWRkci5hZGRyLAorLQkJCQkJCWZkYi0+a2V5LnZsYW5faWQsCistCQkJCQkJZmRiLT5kc3QtPmRldiwKKy0JCQkJCQlmZGItPmFkZGVkX2J5X3VzZXIsCistCQkJCQkJZmRiLT5vZmZsb2FkZWQpOworKwkJY2FsbF9zd2l0Y2hkZXZfbm90aWZpZXJzKFNXSVRDSERFVl9GREJfQUREX1RPX0RFVklDRSwKKysJCQkJCSBmZGItPmRzdC0+ZGV2LCAmaW5mby5pbmZvLCBOVUxMKTsKKyAJCWJyZWFrOworIAl9CisgfQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzYzLW5ldC1icmlkZ2Utc3dpdGNoZGV2LUluY2x1ZGUtbG9jYWwtZmxhZy1pbi1GREItbm90aWYucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC83NjMtbmV0LWJyaWRnZS1zd2l0Y2hkZXYtSW5jbHVkZS1sb2NhbC1mbGFnLWluLUZEQi1ub3RpZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWQ2ZjA3Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzYzLW5ldC1icmlkZ2Utc3dpdGNoZGV2LUluY2x1ZGUtbG9jYWwtZmxhZy1pbi1GREItbm90aWYucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSBlYzViZTRmNzkwMjYyODI5MjVhZTM4M2NhYTQzMWE4ZDQxZTM0NTZhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVG9iaWFzIFdhbGRla3JhbnogPHRvYmlhc0B3YWxkZWtyYW56LmNvbT4KK0RhdGU6IFNhdCwgMTYgSmFuIDIwMjEgMDI6MjU6MTAgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gbmV0OiBicmlkZ2U6IHN3aXRjaGRldjogSW5jbHVkZSBsb2NhbCBmbGFnIGluIEZEQgorIG5vdGlmaWNhdGlvbnMKKworU29tZSBzd2l0Y2hkZXYgZHJpdmVycywgbm90YWJseSBEU0EsIGlnbm9yZSBhbGwgZHluYW1pY2FsbHkgbGVhcm5lZAorYWRkcmVzcyBub3RpZmljYXRpb25zICghYWRkZWRfYnlfdXNlcikgYXMgdGhlc2UgYXJlIGF1dG9ub21vdXNseSBhZGRlZAorYnkgdGhlIHN3aXRjaC4gUHJldmlvdXNseSwgc3VjaCBhIG5vdGlmaWNhdGlvbiB3YXMgaW5kaXN0aW5ndWlzaGFibGUKK2Zyb20gYSBsb2NhbCBhZGRyZXNzIG5vdGlmaWNhdGlvbi4gSW5jbHVkZSBhIGxvY2FsIGJpdCBpbiB0aGUKK25vdGlmaWNhdGlvbiBzbyB0aGF0IHRoZSB0d28gY2xhc3NlcyBjYW4gYmUgZGlzY3JpbWluYXRlZC4KKworVGhpcyBhbGxvd3MgRFNBLWxpa2UgZGV2aWNlcyB0byBhZGQgbG9jYWwgYWRkcmVzc2VzIHRvIHRoZSBoYXJkd2FyZQorRkRCICh3aXRoIHRoZSBDUFUgYXMgdGhlIGRlc3RpbmF0aW9uKSwgdGhlcmVieSBhdm9pZGluZyBmbG93cyB0b3dhcmRzCit0aGUgQ1BVIGJlaW5nIGZsb29kZWQgYnkgdGhlIHN3aXRjaCBhcyB1bmtub3duIHVuaWNhc3QuCisKK1NpZ25lZC1vZmYtYnk6IFRvYmlhcyBXYWxkZWtyYW56IDx0b2JpYXNAd2FsZGVrcmFuei5jb20+CistLS0KKyBpbmNsdWRlL25ldC9zd2l0Y2hkZXYuaCAgIHwgMSArCisgbmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYyB8IDEgKworIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKKy0tLSBhL2luY2x1ZGUvbmV0L3N3aXRjaGRldi5oCisrKysgYi9pbmNsdWRlL25ldC9zd2l0Y2hkZXYuaAorQEAgLTEyNCw2ICsxMjQsNyBAQCBzdHJ1Y3Qgc3dpdGNoZGV2X25vdGlmaWVyX2ZkYl9pbmZvIHsKKyAJY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcjsKKyAJdTE2IHZpZDsKKyAJdTggYWRkZWRfYnlfdXNlcjoxLAorKwkgICBsb2NhbDoxLAorIAkgICBvZmZsb2FkZWQ6MTsKKyB9OworIAorLS0tIGEvbmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYworKysrIGIvbmV0L2JyaWRnZS9icl9zd2l0Y2hkZXYuYworQEAgLTEwOSw2ICsxMDksNyBAQCBicl9zd2l0Y2hkZXZfZmRiX25vdGlmeShjb25zdCBzdHJ1Y3QgbmV0CisgCQkuYWRkciA9IGZkYi0+a2V5LmFkZHIuYWRkciwKKyAJCS52aWQgPSBmZGItPmtleS52bGFuX2lkLAorIAkJLmFkZGVkX2J5X3VzZXIgPSBmZGItPmFkZGVkX2J5X3VzZXIsCisrCQkubG9jYWwgPSBmZGItPmlzX2xvY2FsLAorIAkJLm9mZmxvYWRlZCA9IGZkYi0+b2ZmbG9hZGVkLAorIAl9OworIApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzY0LW5ldC1icmlkZ2Utc3dpdGNoZGV2LVNlbmQtRkRCLW5vdGlmaWNhdGlvbnMtZm9yLWhvc3QucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC83NjQtbmV0LWJyaWRnZS1zd2l0Y2hkZXYtU2VuZC1GREItbm90aWZpY2F0aW9ucy1mb3ItaG9zdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Yjg2OWRkCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzY0LW5ldC1icmlkZ2Utc3dpdGNoZGV2LVNlbmQtRkRCLW5vdGlmaWNhdGlvbnMtZm9yLWhvc3QucGF0Y2gKQEAgLTAsMCArMSw5NCBAQAorRnJvbSAyZTUwZmQ5MzIyMDQ3MjUzYzMyNzU1MGI0NDg1Y2Y4NzYxMDM1YThjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVG9iaWFzIFdhbGRla3JhbnogPHRvYmlhc0B3YWxkZWtyYW56LmNvbT4KK0RhdGU6IFNhdCwgMTYgSmFuIDIwMjEgMDI6MjU6MTEgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gbmV0OiBicmlkZ2U6IHN3aXRjaGRldjogU2VuZCBGREIgbm90aWZpY2F0aW9ucyBmb3IgaG9zdAorIGFkZHJlc3NlcworCitUcmVhdCBhZGRyZXNzZXMgYWRkZWQgdG8gdGhlIGJyaWRnZSBpdHNlbGYgaW4gdGhlIHNhbWUgd2F5IGFzIHJlZ3VsYXIKK3BvcnRzIGFuZCBzZW5kIG91dCBhIG5vdGlmaWNhdGlvbiBzbyB0aGF0IGRyaXZlcnMgbWF5IHN5bmMgaXQgZG93biB0bwordGhlIGhhcmR3YXJlIEZEQi4KKworU2lnbmVkLW9mZi1ieTogVG9iaWFzIFdhbGRla3JhbnogPHRvYmlhc0B3YWxkZWtyYW56LmNvbT4KKy0tLQorIG5ldC9icmlkZ2UvYnJfZmRiLmMgICAgICAgfCAgNCArKy0tCisgbmV0L2JyaWRnZS9icl9wcml2YXRlLmggICB8ICA3ICsrKystLS0KKyBuZXQvYnJpZGdlL2JyX3N3aXRjaGRldi5jIHwgMTEgKysrKystLS0tLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDExIGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQorCistLS0gYS9uZXQvYnJpZGdlL2JyX2ZkYi5jCisrKysgYi9uZXQvYnJpZGdlL2JyX2ZkYi5jCitAQCAtNTgxLDcgKzU4MSw3IEBAIHZvaWQgYnJfZmRiX3VwZGF0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIKKyAKKyAJCQkvKiBmYXN0cGF0aDogdXBkYXRlIG9mIGV4aXN0aW5nIGVudHJ5ICovCisgCQkJaWYgKHVubGlrZWx5KHNvdXJjZSAhPSBmZGItPmRzdCAmJiAhZmRiLT5pc19zdGlja3kpKSB7CistCQkJCWJyX3N3aXRjaGRldl9mZGJfbm90aWZ5KGZkYiwgUlRNX0RFTE5FSUdIKTsKKysJCQkJYnJfc3dpdGNoZGV2X2ZkYl9ub3RpZnkoYnIsIGZkYiwgUlRNX0RFTE5FSUdIKTsKKyAJCQkJZmRiLT5kc3QgPSBzb3VyY2U7CisgCQkJCWZkYl9tb2RpZmllZCA9IHRydWU7CisgCQkJCS8qIFRha2Ugb3ZlciBIVyBsZWFybmVkIGVudHJ5ICovCitAQCAtNjk3LDcgKzY5Nyw3IEBAIHN0YXRpYyB2b2lkIGZkYl9ub3RpZnkoc3RydWN0IG5ldF9icmlkZ2UKKyAJaW50IGVyciA9IC1FTk9CVUZTOworIAorIAlpZiAoc3dkZXZfbm90aWZ5KQorLQkJYnJfc3dpdGNoZGV2X2ZkYl9ub3RpZnkoZmRiLCB0eXBlKTsKKysJCWJyX3N3aXRjaGRldl9mZGJfbm90aWZ5KGJyLCBmZGIsIHR5cGUpOworIAorIAlza2IgPSBubG1zZ19uZXcoZmRiX25sbXNnX3NpemUoKSwgR0ZQX0FUT01JQyk7CisgCWlmIChza2IgPT0gTlVMTCkKKy0tLSBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oCisrKysgYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaAorQEAgLTEyMDMsOCArMTIwMyw4IEBAIGJvb2wgbmJwX3N3aXRjaGRldl9hbGxvd2VkX2VncmVzcyhjb25zdAorIGludCBicl9zd2l0Y2hkZXZfc2V0X3BvcnRfZmxhZyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLAorIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLAorIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIG1hc2spOworLXZvaWQgYnJfc3dpdGNoZGV2X2ZkYl9ub3RpZnkoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfZmRiX2VudHJ5ICpmZGIsCistCQkJICAgICBpbnQgdHlwZSk7Cisrdm9pZCBicl9zd2l0Y2hkZXZfZmRiX25vdGlmeShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsCisrCQkJICAgICBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9mZGJfZW50cnkgKmZkYiwgaW50IHR5cGUpOworIGludCBicl9zd2l0Y2hkZXZfcG9ydF92bGFuX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgdmlkLCB1MTYgZmxhZ3MsCisgCQkJICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7CisgaW50IGJyX3N3aXRjaGRldl9wb3J0X3ZsYW5fZGVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiB2aWQpOworQEAgLTEyNTAsNyArMTI1MCw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IGJyX3N3aXRjaGRldl9wb3J0X3ZsYW4KKyB9CisgCisgc3RhdGljIGlubGluZSB2b2lkCistYnJfc3dpdGNoZGV2X2ZkYl9ub3RpZnkoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfZmRiX2VudHJ5ICpmZGIsIGludCB0eXBlKQorK2JyX3N3aXRjaGRldl9mZGJfbm90aWZ5KHN0cnVjdCBuZXRfYnJpZGdlICpiciwKKysJCQljb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9mZGJfZW50cnkgKmZkYiwgaW50IHR5cGUpCisgeworIH0KKyAKKy0tLSBhL25ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMKKysrKyBiL25ldC9icmlkZ2UvYnJfc3dpdGNoZGV2LmMKK0BAIC0xMDMsNyArMTAzLDggQEAgaW50IGJyX3N3aXRjaGRldl9zZXRfcG9ydF9mbGFnKHN0cnVjdCBuZQorIH0KKyAKKyB2b2lkCistYnJfc3dpdGNoZGV2X2ZkYl9ub3RpZnkoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfZmRiX2VudHJ5ICpmZGIsIGludCB0eXBlKQorK2JyX3N3aXRjaGRldl9mZGJfbm90aWZ5KHN0cnVjdCBuZXRfYnJpZGdlICpiciwKKysJCQljb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9mZGJfZW50cnkgKmZkYiwgaW50IHR5cGUpCisgeworIAlzdHJ1Y3Qgc3dpdGNoZGV2X25vdGlmaWVyX2ZkYl9pbmZvIGluZm8gPSB7CisgCQkuYWRkciA9IGZkYi0+a2V5LmFkZHIuYWRkciwKK0BAIC0xMTIsMTggKzExMywxNiBAQCBicl9zd2l0Y2hkZXZfZmRiX25vdGlmeShjb25zdCBzdHJ1Y3QgbmV0CisgCQkubG9jYWwgPSBmZGItPmlzX2xvY2FsLAorIAkJLm9mZmxvYWRlZCA9IGZkYi0+b2ZmbG9hZGVkLAorIAl9OworLQorLQlpZiAoIWZkYi0+ZHN0KQorLQkJcmV0dXJuOworKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZmRiLT5kc3QgPyBmZGItPmRzdC0+ZGV2IDogYnItPmRldjsKKyAKKyAJc3dpdGNoICh0eXBlKSB7CisgCWNhc2UgUlRNX0RFTE5FSUdIOgorIAkJY2FsbF9zd2l0Y2hkZXZfbm90aWZpZXJzKFNXSVRDSERFVl9GREJfREVMX1RPX0RFVklDRSwKKy0JCQkJCSBmZGItPmRzdC0+ZGV2LCAmaW5mby5pbmZvLCBOVUxMKTsKKysJCQkJCSBkZXYsICZpbmZvLmluZm8sIE5VTEwpOworIAkJYnJlYWs7CisgCWNhc2UgUlRNX05FV05FSUdIOgorIAkJY2FsbF9zd2l0Y2hkZXZfbm90aWZpZXJzKFNXSVRDSERFVl9GREJfQUREX1RPX0RFVklDRSwKKy0JCQkJCSBmZGItPmRzdC0+ZGV2LCAmaW5mby5pbmZvLCBOVUxMKTsKKysJCQkJCSBkZXYsICZpbmZvLmluZm8sIE5VTEwpOworIAkJYnJlYWs7CisgCX0KKyB9CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC83NjUtbmV0LWRzYS1JbmNsdWRlLWxvY2FsLWFkZHJlc3Nlcy1pbi1hc3Npc3RlZC1DUFUtcG9ydC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40Lzc2NS1uZXQtZHNhLUluY2x1ZGUtbG9jYWwtYWRkcmVzc2VzLWluLWFzc2lzdGVkLUNQVS1wb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NTEyNDYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC83NjUtbmV0LWRzYS1JbmNsdWRlLWxvY2FsLWFkZHJlc3Nlcy1pbi1hc3Npc3RlZC1DUFUtcG9ydC5wYXRjaApAQCAtMCwwICsxLDM2IEBACitGcm9tIGRkMDgyNzE2YjQzYTM2ODRiMmY0NzNhZTVkMWU3NmQxYzA3NmQ4NmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBUb2JpYXMgV2FsZGVrcmFueiA8dG9iaWFzQHdhbGRla3JhbnouY29tPgorRGF0ZTogU2F0LCAxNiBKYW4gMjAyMSAwMjoyNToxMiArMDEwMAorU3ViamVjdDogW1BBVENIXSBuZXQ6IGRzYTogSW5jbHVkZSBsb2NhbCBhZGRyZXNzZXMgaW4gYXNzaXN0ZWQgQ1BVIHBvcnQKKyBsZWFybmluZworCitBZGQgbG9jYWwgYWRkcmVzc2VzIChpLmUuIHRoZSBwb3J0cycgTUFDIGFkZHJlc3NlcykgdG8gdGhlIGhhcmR3YXJlCitGREIgd2hlbiBhc3Npc3RlZCBDUFUgcG9ydCBsZWFybmluZyBpcyBlbmFibGVkLgorCitOT1RFOiBUaGUgYnJpZGdlJ3Mgb3duIE1BQyBhZGRyZXNzIGlzIGFsc28gImxvY2FsIi4gSWYgdGhhdCBhZGRyZXNzIGlzCitub3Qgc2hhcmVkIHdpdGggYW55IHBvcnQsIHRoZSBicmlkZ2UncyBNQUMgaXMgbm90IGJlIGFkZGVkIGJ5IHRoaXMKK2Z1bmN0aW9uYWxpdHkgLSBidXQgdGhlIGZvbGxvd2luZyBjb21taXQgdGFrZXMgY2FyZSBvZiB0aGF0IGNhc2UuCisKK1NpZ25lZC1vZmYtYnk6IFRvYmlhcyBXYWxkZWtyYW56IDx0b2JpYXNAd2FsZGVrcmFuei5jb20+CistLS0KKyBuZXQvZHNhL3NsYXZlLmMgfCA4ICsrKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworLS0tIGEvbmV0L2RzYS9zbGF2ZS5jCisrKysgYi9uZXQvZHNhL3NsYXZlLmMKK0BAIC0xNjk4LDEwICsxNjk4LDEyIEBAIHN0YXRpYyBpbnQgZHNhX3NsYXZlX3N3aXRjaGRldl9ldmVudChzdHIKKyAJCWZkYl9pbmZvID0gcHRyOworIAorIAkJaWYgKGRzYV9zbGF2ZV9kZXZfY2hlY2soZGV2KSkgeworLQkJCWlmICghZmRiX2luZm8tPmFkZGVkX2J5X3VzZXIpCistCQkJCXJldHVybiBOT1RJRllfT0s7CistCisgCQkJZHAgPSBkc2Ffc2xhdmVfdG9fcG9ydChkZXYpOworKworKwkJCWlmIChmZGJfaW5mby0+bG9jYWwgJiYgZHAtPmRzLT5hc3Npc3RlZF9sZWFybmluZ19vbl9jcHVfcG9ydCkKKysJCQkJZHAgPSBkcC0+Y3B1X2RwOworKwkJCWVsc2UgaWYgKCFmZGJfaW5mby0+YWRkZWRfYnlfdXNlcikKKysJCQkJcmV0dXJuIE5PVElGWV9PSzsKKyAJCX0gZWxzZSB7CisgCQkJLyogU25vb3AgYWRkcmVzc2VzIGxlYXJudCBvbiBmb3JlaWduIGludGVyZmFjZXMKKyAJCQkgKiBicmlkZ2VkIHdpdGggdXMsIGZvciBzd2l0Y2hlcyB0aGF0IGRvbid0CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC83NjYtbmV0LWRzYS1JbmNsdWRlLWJyaWRnZS1hZGRyZXNzZXMtaW4tYXNzaXN0ZWQtQ1BVLXBvci5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40Lzc2Ni1uZXQtZHNhLUluY2x1ZGUtYnJpZGdlLWFkZHJlc3Nlcy1pbi1hc3Npc3RlZC1DUFUtcG9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NTA0YWUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC83NjYtbmV0LWRzYS1JbmNsdWRlLWJyaWRnZS1hZGRyZXNzZXMtaW4tYXNzaXN0ZWQtQ1BVLXBvci5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIDA2NjNlYmRlMTE0YTZmYjJjMjhjNjIyYmE1MjEyYjMwMmQ0ZDI1ODEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBUb2JpYXMgV2FsZGVrcmFueiA8dG9iaWFzQHdhbGRla3JhbnouY29tPgorRGF0ZTogU2F0LCAxNiBKYW4gMjAyMSAwMjoyNToxMyArMDEwMAorU3ViamVjdDogW1BBVENIXSBuZXQ6IGRzYTogSW5jbHVkZSBicmlkZ2UgYWRkcmVzc2VzIGluIGFzc2lzdGVkIENQVSBwb3J0CisgbGVhcm5pbmcKKworTm93IHRoYXQgbm90aWZpY2F0aW9ucyBhcmUgc2VudCBvdXQgZm9yIGFkZHJlc3NlcyBhZGRlZCB0byB0aGUgYnJpZGdlCitpdHNlbGYsIGV4dGVuZCBEU0EgdG8gaW5jbHVkZSB0aG9zZSBhZGRyZXNzZXMgaW4gdGhlIGhhcmR3YXJlIEZEQiB3aGVuCithc3Npc3RlZCBDUFUgcG9ydCBsZWFybmluZyBpcyBlbmFibGVkLgorCitTaWduZWQtb2ZmLWJ5OiBUb2JpYXMgV2FsZGVrcmFueiA8dG9iaWFzQHdhbGRla3JhbnouY29tPgorLS0tCisgbmV0L2RzYS9zbGF2ZS5jIHwgNiArKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSBhL25ldC9kc2Evc2xhdmUuYworKysrIGIvbmV0L2RzYS9zbGF2ZS5jCitAQCAtMTcxMiw3ICsxNzEyLDExIEBAIHN0YXRpYyBpbnQgZHNhX3NsYXZlX3N3aXRjaGRldl9ldmVudChzdHIKKyAJCQlzdHJ1Y3QgbmV0X2RldmljZSAqYnJfZGV2OworIAkJCXN0cnVjdCBkc2Ffc2xhdmVfcHJpdiAqcDsKKyAKKy0JCQlicl9kZXYgPSBuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9nZXRfcmN1KGRldik7CisrCQkJaWYgKG5ldGlmX2lzX2JyaWRnZV9tYXN0ZXIoZGV2KSkKKysJCQkJYnJfZGV2ID0gZGV2OworKwkJCWVsc2UKKysJCQkJYnJfZGV2ID0gbmV0ZGV2X21hc3Rlcl91cHBlcl9kZXZfZ2V0X3JjdShkZXYpOworKworIAkJCWlmICghYnJfZGV2KQorIAkJCQlyZXR1cm4gTk9USUZZX0RPTkU7CisgCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC83NjctbmV0LWRzYS1TeW5jLXN0YXRpYy1GREItZW50cmllcy1vbi1mb3JlaWduLWludGVyZmFjZS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40Lzc2Ny1uZXQtZHNhLVN5bmMtc3RhdGljLUZEQi1lbnRyaWVzLW9uLWZvcmVpZ24taW50ZXJmYWNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MjYwODYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC83NjctbmV0LWRzYS1TeW5jLXN0YXRpYy1GREItZW50cmllcy1vbi1mb3JlaWduLWludGVyZmFjZS5wYXRjaApAQCAtMCwwICsxLDU2IEBACitGcm9tIDgxZTM5ZmQ3OGRiODJmYjUxYjA1ZmZmMzA5YjljNTIxZjFhMGJjNWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBUb2JpYXMgV2FsZGVrcmFueiA8dG9iaWFzQHdhbGRla3JhbnouY29tPgorRGF0ZTogU2F0LCAxNiBKYW4gMjAyMSAwMjoyNToxNCArMDEwMAorU3ViamVjdDogW1BBVENIXSBuZXQ6IGRzYTogU3luYyBzdGF0aWMgRkRCIGVudHJpZXMgb24gZm9yZWlnbiBpbnRlcmZhY2VzIHRvCisgaGFyZHdhcmUKKworUmV1c2UgdGhlICJhc3Npc3RlZF9sZWFybmluZ19vbl9jcHVfcG9ydCIgZnVuY3Rpb25hbGl0eSB0byBhbHdheXMgYWRkCitlbnRyaWVzIGZvciB1c2VyLWNvbmZpZ3VyZWQgZW50cmllcyBvbiBmb3JlaWduIGludGVyZmFjZXMsIGV2ZW4gaWYKK2Fzc2lzdGVkX2xlYXJuaW5nX29uX2NwdV9wb3J0IGlzIG5vdCBlbmFibGVkLiBFLmcuIGluIHRoaXMgc2l0dWF0aW9uOgorCisgICBicjAKKyAgIC8gXAorc3dwMCBkdW1teTAKKworJCBicmlkZ2UgZmRiIGFkZCAwMjowMDpkZTphZDowMDowMSBkZXYgZHVtbXkwIHZsYW4gMSBtYXN0ZXIKKworUmVzdWx0cyBpbiBEU0EgYWRkaW5nIGFuIGVudHJ5IGluIHRoZSBoYXJkd2FyZSBGREIsIHBvaW50aW5nIHRoaXMKK2FkZHJlc3MgdG93YXJkcyB0aGUgQ1BVIHBvcnQuCisKK1RoZSBzYW1lIGlzIHRydWUgZm9yIGVudHJpZXMgYWRkZWQgdG8gdGhlIGJyaWRnZSBpdHNlbGYsIGUuZzoKKworJCBicmlkZ2UgZmRiIGFkZCAwMjowMDpkZTphZDowMDowMSBkZXYgYnIwIHZsYW4gMSBzZWxmCisKK1NpZ25lZC1vZmYtYnk6IFRvYmlhcyBXYWxkZWtyYW56IDx0b2JpYXNAd2FsZGVrcmFuei5jb20+CistLS0KKyBuZXQvZHNhL3NsYXZlLmMgfCAxMiArKysrKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCistLS0gYS9uZXQvZHNhL3NsYXZlLmMKKysrKyBiL25ldC9kc2Evc2xhdmUuYworQEAgLTE3MDUsOSArMTcwNSwxMiBAQCBzdGF0aWMgaW50IGRzYV9zbGF2ZV9zd2l0Y2hkZXZfZXZlbnQoc3RyCisgCQkJZWxzZSBpZiAoIWZkYl9pbmZvLT5hZGRlZF9ieV91c2VyKQorIAkJCQlyZXR1cm4gTk9USUZZX09LOworIAkJfSBlbHNlIHsKKy0JCQkvKiBTbm9vcCBhZGRyZXNzZXMgbGVhcm50IG9uIGZvcmVpZ24gaW50ZXJmYWNlcworLQkJCSAqIGJyaWRnZWQgd2l0aCB1cywgZm9yIHN3aXRjaGVzIHRoYXQgZG9uJ3QKKy0JCQkgKiBhdXRvbWF0aWNhbGx5IGxlYXJuIFNBIGZyb20gQ1BVLWluamVjdGVkIHRyYWZmaWMKKysJCQkvKiBTbm9vcCBhZGRyZXNzZXMgYWRkZWQgdG8gZm9yZWlnbiBpbnRlcmZhY2VzCisrCQkJICogYnJpZGdlZCB3aXRoIHVzLCBvciB0aGUgYnJpZGdlCisrCQkJICogaXRzZWxmLiBEeW5hbWljYWxseSBsZWFybmVkIGFkZHJlc3NlcyBjYW4KKysJCQkgKiBhbHNvIGJlIGFkZGVkIGZvciBzd2l0Y2hlcyB0aGF0IGRvbid0CisrCQkJICogYXV0b21hdGljYWxseSBsZWFybiBTQSBmcm9tIENQVS1pbmplY3RlZAorKwkJCSAqIHRyYWZmaWMuCisgCQkJICovCisgCQkJc3RydWN0IG5ldF9kZXZpY2UgKmJyX2RldjsKKyAJCQlzdHJ1Y3QgZHNhX3NsYXZlX3ByaXYgKnA7CitAQCAtMTcyOSw3ICsxNzMyLDggQEAgc3RhdGljIGludCBkc2Ffc2xhdmVfc3dpdGNoZGV2X2V2ZW50KHN0cgorIAorIAkJCWRwID0gcC0+ZHAtPmNwdV9kcDsKKyAKKy0JCQlpZiAoIWRwLT5kcy0+YXNzaXN0ZWRfbGVhcm5pbmdfb25fY3B1X3BvcnQpCisrCQkJaWYgKCFmZGJfaW5mby0+YWRkZWRfYnlfdXNlciAmJgorKwkJCSAgICAhZHAtPmRzLT5hc3Npc3RlZF9sZWFybmluZ19vbl9jcHVfcG9ydCkKKyAJCQkJcmV0dXJuIE5PVElGWV9ET05FOworIAkJfQorIApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzY4LW5ldC1kc2EtbXY4OGU2eHh4LVJlcXVlc3QtYXNzaXN0ZWQtbGVhcm5pbmctb24tQ1BVLXBvcnQucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC83NjgtbmV0LWRzYS1tdjg4ZTZ4eHgtUmVxdWVzdC1hc3Npc3RlZC1sZWFybmluZy1vbi1DUFUtcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjQyMWYxCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvNzY4LW5ldC1kc2EtbXY4OGU2eHh4LVJlcXVlc3QtYXNzaXN0ZWQtbGVhcm5pbmctb24tQ1BVLXBvcnQucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorRnJvbTogICBUb2JpYXMgV2FsZGVrcmFueiA8dG9iaWFzQHdhbGRla3JhbnouY29tPgorU3ViamVjdDogW1JGQyBuZXQtbmV4dCA3LzddIG5ldDogZHNhOiBtdjg4ZTZ4eHg6IFJlcXVlc3QgYXNzaXN0ZWQgbGVhcm5pbmcgb24gQ1BVIHBvcnQKK0RhdGU6ICAgU2F0LCAxNiBKYW4gMjAyMSAwMjoyNToxNSArMDEwMAorQXJjaGl2ZWQtQXQ6IDxodHRwczovL2xvcmUua2VybmVsLm9yZy9uZXRkZXYvMjAyMTAxMTYwMTI1MTUuMzE1Mi04LXRvYmlhc0B3YWxkZWtyYW56LmNvbS8+CisKK1doaWxlIHRoZSBoYXJkd2FyZSBpcyBjYXBhYmxlIG9mIHBlcmZvcm1pbmcgbGVhcm5pbmcgb24gdGhlIENQVSBwb3J0LAoraXQgcmVxdWlyZXMgYWxvdCBvZiBhZGRpdGlvbnMgdG8gdGhlIGJyaWRnZSdzIGZvcndhcmRpbmcgcGF0aCBpbiBvcmRlcgordG8gaGFuZGxlIG11bHRpLWRlc3RpbmF0aW9uIHRyYWZmaWMgY29ycmVjdGx5LgorCitVbnRpbCB0aGF0IGlzIGluIHBsYWNlLCBvcHQgZm9yIHRoZSBuZXh0IGJlc3QgdGhpbmcgYW5kIGxldCBEU0Egc3luYwordGhlIHJlbGV2YW50IGFkZHJlc3NlcyBkb3duIHRvIHRoZSBoYXJkd2FyZSBGREIuCisKK1NpZ25lZC1vZmYtYnk6IFRvYmlhcyBXYWxkZWtyYW56IDx0b2JpYXNAd2FsZGVrcmFuei5jb20+CistLS0KKyBkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCistLS0gYS9kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYworKysrIGIvZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMKK0BAIC01MDgwLDYgKzUwODAsNyBAQCBzdGF0aWMgaW50IG12ODhlNnh4eF9yZWdpc3Rlcl9zd2l0Y2goc3RyCisgCWRzLT5vcHMgPSAmbXY4OGU2eHh4X3N3aXRjaF9vcHM7CisgCWRzLT5hZ2VpbmdfdGltZV9taW4gPSBjaGlwLT5pbmZvLT5hZ2VfdGltZV9jb2VmZjsKKyAJZHMtPmFnZWluZ190aW1lX21heCA9IGNoaXAtPmluZm8tPmFnZV90aW1lX2NvZWZmICogVThfTUFYOworKwlkcy0+YXNzaXN0ZWRfbGVhcm5pbmdfb25fY3B1X3BvcnQgPSB0cnVlOworIAorIAlkZXZfc2V0X2RydmRhdGEoZGV2LCBkcyk7CisgCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC84MDAtYmNtYS1nZXQtU29DLWRldmljZS1zdHJ1Y3QtY29weS1pdHMtRE1BLXBhcmFtcy10by10aC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzgwMC1iY21hLWdldC1Tb0MtZGV2aWNlLXN0cnVjdC1jb3B5LWl0cy1ETUEtcGFyYW1zLXRvLXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMWE5ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC84MDAtYmNtYS1nZXQtU29DLWRldmljZS1zdHJ1Y3QtY29weS1pdHMtRE1BLXBhcmFtcy10by10aC5wYXRjaApAQCAtMCwwICsxLDY0IEBACitGcm9tOiA9P1VURi04P3E/UmFmYT1DNT04Mj0yME1pPUM1PTgyZWNraT89IDxyYWZhbEBtaWxlY2tpLnBsPgorU3ViamVjdDogW1BBVENIXSBiY21hOiBnZXQgU29DIGRldmljZSBzdHJ1Y3QgJiBjb3B5IGl0cyBETUEgcGFyYW1zIHRvIHRoZQorIHN1YmRldmljZXMKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworRm9yIGJ1cyBkZXZpY2VzIHRvIGJlIGZ1bGx5IHVzYWJsZSBpdCdzIHJlcXVpcmVkIHRvIHNldCB0aGVpciBETUEKK3BhcmFtZXRlcnMuCisKK0ZvciB5ZWFycyBpdCBoYXMgYmVlbiBtaXNzaW5nIGFuZCByZW1haW5lZCB1bm5vdGljZWQgYmVjYXVzZSBvZgorbWlwc19kbWFfYWxsb2NfY29oZXJlbnQoKSBzaWxlbnRseSBoYW5kbGluZyB0aGUgZW1wdHkgY29oZXJlbnRfZG1hX21hc2suCitLZXJuZWwgNC4xOSBjYW1lIHdpdGggYSBsb3Qgb2YgRE1BIGNoYW5nZXMgYW5kIGNhdXNlZCBhIHJlZ3Jlc3Npb24gb24KK3RoZSBiY200N3h4LiBTdGFydGluZyB3aXRoIHRoZSBjb21taXQgZjhjNTVkYzZlODI4ICgiTUlQUzogdXNlIGdlbmVyaWMKK2RtYSBub25jb2hlcmVudCBvcHMgZm9yIHNpbXBsZSBub25jb2hlcmVudCBwbGF0Zm9ybXMiKSBETUEgY29oZXJlbnQKK2FsbG9jYXRpb25zIGp1c3QgZmFpbC4gRXhhbXBsZToKK1sgICAgMS4xMTQ5MTRdIGJnbWFjX2JjbWEgYmNtYTA6MjogQWxsb2NhdGlvbiBvZiBUWCByaW5nIDB4MjAwIGZhaWxlZAorWyAgICAxLjEyMTIxNV0gYmdtYWNfYmNtYSBiY21hMDoyOiBVbmFibGUgdG8gYWxsb2MgbWVtb3J5IGZvciBETUEKK1sgICAgMS4xMjc2MjZdIGJnbWFjX2JjbWE6IHByb2JlIG9mIGJjbWEwOjIgZmFpbGVkIHdpdGggZXJyb3IgLTEyCitbICAgIDEuMTMzODM4XSBiZ21hY19iY21hOiBCcm9hZGNvbSA0N3h4IEdCaXQgTUFDIGRyaXZlciBsb2FkZWQKKworVGhpcyBjaGFuZ2UgZml4ZXMgYWJvdmUgcmVncmVzc2lvbiBpbiBhZGRpdGlvbiB0byB0aGUgTUlQUyBiY200N3h4Citjb21taXQgMzIxYzQ2YjkxNTUwICgiTUlQUzogQkNNNDdYWDogU2V0dXAgc3RydWN0IGRldmljZSBmb3IgdGhlIFNvQyIpLgorCitJdCBhbHNvIGZpeGVzIGFub3RoZXIgKm9sZCogR1BJTyByZWdyZXNzaW9uIGNhdXNlZCBieSBhIHBhcmVudCBwb2ludGluZwordG8gdGhlIE5VTEw6CitbICAgIDAuMTU3MDU0XSBtaXNzaW5nIGdwaW9jaGlwIC5kZXYgcGFyZW50IHBvaW50ZXIKK1sgICAgMC4xNTcyODddIGJjbWE6IGJ1czA6IEVycm9yIHJlZ2lzdGVyaW5nIEdQSU8gZHJpdmVyOiAtMjIKK2ludHJvZHVjZWQgYnkgdGhlIGNvbW1pdCA3NGY0ZTBjYzYxMDggKCJiY21hOiBzd2l0Y2ggR1BJTyBwb3J0aW9ucyB0bwordXNlIEdQSU9MSUJfSVJRQ0hJUCIpLgorCitGaXhlczogZjhjNTVkYzZlODI4ICgiTUlQUzogdXNlIGdlbmVyaWMgZG1hIG5vbmNvaGVyZW50IG9wcyBmb3Igc2ltcGxlIG5vbmNvaGVyZW50IHBsYXRmb3JtcyIpCitGaXhlczogNzRmNGUwY2M2MTA4ICgiYmNtYTogc3dpdGNoIEdQSU8gcG9ydGlvbnMgdG8gdXNlIEdQSU9MSUJfSVJRQ0hJUCIpCitDYzogbGludXgtbWlwc0BsaW51eC1taXBzLm9yZworQ2M6IENocmlzdG9waCBIZWxsd2lnIDxoY2hAbHN0LmRlPgorQ2M6IExpbnVzIFdhbGxlaWogPGxpbnVzLndhbGxlaWpAbGluYXJvLm9yZz4KK1NpZ25lZC1vZmYtYnk6IFJhZmHFgiBNacWCZWNraSA8cmFmYWxAbWlsZWNraS5wbD4KKy0tLQorCistLS0gYS9kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYworKysrIGIvZHJpdmVycy9iY21hL2hvc3Rfc29jLmMKK0BAIC0xOTEsNiArMTkxLDggQEAgaW50IF9faW5pdCBiY21hX2hvc3Rfc29jX2luaXQoc3RydWN0IGJjbQorIAlzdHJ1Y3QgYmNtYV9idXMgKmJ1cyA9ICZzb2MtPmJ1czsKKyAJaW50IGVycjsKKyAKKysJYnVzLT5kZXYgPSBzb2MtPmRldjsKKysKKyAJLyogU2NhbiBidXMgYW5kIGluaXRpYWxpemUgaXQgKi8KKyAJZXJyID0gYmNtYV9idXNfZWFybHlfcmVnaXN0ZXIoYnVzKTsKKyAJaWYgKGVycikKKy0tLSBhL2RyaXZlcnMvYmNtYS9tYWluLmMKKysrKyBiL2RyaXZlcnMvYmNtYS9tYWluLmMKK0BAIC0yNDEsOCArMjQxLDEwIEBAIHZvaWQgYmNtYV9wcmVwYXJlX2NvcmUoc3RydWN0IGJjbWFfYnVzICoKKyAJY29yZS0+ZGV2LmJ1cyA9ICZiY21hX2J1c190eXBlOworIAlkZXZfc2V0X25hbWUoJmNvcmUtPmRldiwgImJjbWElZDolZCIsIGJ1cy0+bnVtLCBjb3JlLT5jb3JlX2luZGV4KTsKKyAJY29yZS0+ZGV2LnBhcmVudCA9IGJ1cy0+ZGV2OworLQlpZiAoYnVzLT5kZXYpCisrCWlmIChidXMtPmRldikgeworIAkJYmNtYV9vZl9maWxsX2RldmljZShidXMtPmRldiwgY29yZSk7CisrCQlkbWFfY29lcmNlX21hc2tfYW5kX2NvaGVyZW50KCZjb3JlLT5kZXYsIGJ1cy0+ZGV2LT5jb2hlcmVudF9kbWFfbWFzayk7CisrCX0KKyAKKyAJc3dpdGNoIChidXMtPmhvc3R0eXBlKSB7CisgCWNhc2UgQkNNQV9IT1NUVFlQRV9QQ0k6CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC84MTAtcGNpX2Rpc2FibGVfY29tbW9uX3F1aXJrcy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzgxMC1wY2lfZGlzYWJsZV9jb21tb25fcXVpcmtzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZWEwNTUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC84MTAtcGNpX2Rpc2FibGVfY29tbW9uX3F1aXJrcy5wYXRjaApAQCAtMCwwICsxLDYyIEBACitGcm9tOiBHYWJvciBKdWhvcyA8anVob3NnQG9wZW53cnQub3JnPgorU3ViamVjdDogZGVibG9hdDogYWRkIGtlcm5lbCBjb25maWcgb3B0aW9uIHRvIGRpc2FibGluZyBjb21tb24gUENJIHF1aXJrcworCitTaWduZWQtb2ZmLWJ5OiBHYWJvciBKdWhvcyA8anVob3NnQG9wZW53cnQub3JnPgorLS0tCisgZHJpdmVycy9wY2kvS2NvbmZpZyAgfCA2ICsrKysrKworIGRyaXZlcnMvcGNpL3F1aXJrcy5jIHwgNiArKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKykKKworLS0tIGEvZHJpdmVycy9wY2kvS2NvbmZpZworKysrIGIvZHJpdmVycy9wY2kvS2NvbmZpZworQEAgLTExNSw2ICsxMTUsMTMgQEAgY29uZmlnIFhFTl9QQ0lERVZfRlJPTlRFTkQKKyAgICAgICAgICAgVGhlIFBDSSBkZXZpY2UgZnJvbnRlbmQgZHJpdmVyIGFsbG93cyB0aGUga2VybmVsIHRvIGltcG9ydCBhcmJpdHJhcnkKKyAgICAgICAgICAgUENJIGRldmljZXMgZnJvbSBhIFBDSSBiYWNrZW5kIHRvIHN1cHBvcnQgUENJIGRyaXZlciBkb21haW5zLgorIAorK2NvbmZpZyBQQ0lfRElTQUJMRV9DT01NT05fUVVJUktTCisrCWJvb2wgIlBDSSBkaXNhYmxlIGNvbW1vbiBxdWlya3MiCisrCWRlcGVuZHMgb24gUENJCisrCWhlbHAKKysJICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSBOLgorKworKworIGNvbmZpZyBQQ0lfQVRTCisgCWJvb2wKKyAKKy0tLSBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jCisrKysgYi9kcml2ZXJzL3BjaS9xdWlya3MuYworQEAgLTIwNiw2ICsyMDYsNyBAQCBzdGF0aWMgdm9pZCBxdWlya19tbWlvX2Fsd2F5c19vbihzdHJ1Y3QKKyBERUNMQVJFX1BDSV9GSVhVUF9DTEFTU19FQVJMWShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAorIAkJCQlQQ0lfQ0xBU1NfQlJJREdFX0hPU1QsIDgsIHF1aXJrX21taW9fYWx3YXlzX29uKTsKKyAKKysjaWZuZGVmIENPTkZJR19QQ0lfRElTQUJMRV9DT01NT05fUVVJUktTCisgLyoKKyAgKiBUaGUgTWVsbGFub3ggVGF2b3IgZGV2aWNlIGdpdmVzIGZhbHNlIHBvc2l0aXZlIHBhcml0eSBlcnJvcnMuICBNYXJrIHRoaXMKKyAgKiBkZXZpY2Ugd2l0aCBhIGJyb2tlbl9wYXJpdHlfc3RhdHVzIHRvIGFsbG93IFBDSSBzY2FubmluZyBjb2RlIHRvICJza2lwIgorQEAgLTMzMjMsNiArMzMyNCw4IEBAIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0kKKyBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHg2NWY5LCBxdWlya19pbnRlbF9tY19lcnJhdGEpOworIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDY1ZmEsIHF1aXJrX2ludGVsX21jX2VycmF0YSk7CisgCisrI2VuZGlmIC8qICFDT05GSUdfUENJX0RJU0FCTEVfQ09NTU9OX1FVSVJLUyAqLworKworIC8qCisgICogSXZ5dG93biBOVEIgQkFSIHNpemVzIGFyZSBtaXNyZXBvcnRlZCBieSB0aGUgaGFyZHdhcmUgZHVlIHRvIGFuIGVycmF0dW0uCisgICogVG8gd29yayBhcm91bmQgdGhpcywgcXVlcnkgdGhlIHNpemUgaXQgc2hvdWxkIGJlIGNvbmZpZ3VyZWQgdG8gYnkgdGhlCitAQCAtMzM0OCw2ICszMzUxLDggQEAgc3RhdGljIHZvaWQgcXVpcmtfaW50ZWxfbnRiKHN0cnVjdCBwY2lfZAorIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDBlMDgsIHF1aXJrX2ludGVsX250Yik7CisgREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MGUwZCwgcXVpcmtfaW50ZWxfbnRiKTsKKyAKKysjaWZuZGVmIENPTkZJR19QQ0lfRElTQUJMRV9DT01NT05fUVVJUktTCisrCisgLyoKKyAgKiBTb21lIEJJT1MgaW1wbGVtZW50YXRpb25zIGxlYXZlIHRoZSBJbnRlbCBHUFUgaW50ZXJydXB0cyBlbmFibGVkLCBldmVuCisgICogdGhvdWdoIG5vIG9uZSBpcyBoYW5kbGluZyB0aGVtIChlLmcuLCBpZiB0aGUgaTkxNSBkcml2ZXIgaXMgbmV2ZXIKK0BAIC0zMzg2LDYgKzMzOTEsOCBAQCBERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX0lOCisgREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgwMTBhLCBkaXNhYmxlX2lnZnhfaXJxKTsKKyBERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDAxNTIsIGRpc2FibGVfaWdmeF9pcnEpOworIAorKyNlbmRpZiAvKiAhQ09ORklHX1BDSV9ESVNBQkxFX0NPTU1PTl9RVUlSS1MgKi8KKysKKyAvKgorICAqIFBDSSBkZXZpY2VzIHdoaWNoIGFyZSBvbiBJbnRlbCBjaGlwcyBjYW4gc2tpcCB0aGUgMTBtcyBkZWxheQorICAqIGJlZm9yZSBlbnRlcmluZyBEMyBtb2RlLgpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvODExLXBjaV9kaXNhYmxlX3VzYl9jb21tb25fcXVpcmtzLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvODExLXBjaV9kaXNhYmxlX3VzYl9jb21tb25fcXVpcmtzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNDU4NGMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC84MTEtcGNpX2Rpc2FibGVfdXNiX2NvbW1vbl9xdWlya3MucGF0Y2gKQEAgLTAsMCArMSwxMTUgQEAKK0Zyb206IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KK1N1YmplY3Q6IGRlYmxvYXQ6IGRpc2FibGUgY29tbW9uIFVTQiBxdWlya3MKKworU2lnbmVkLW9mZi1ieTogRmVsaXggRmlldGthdSA8bmJkQG5iZC5uYW1lPgorLS0tCisgZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMgfCAxNiArKysrKysrKysrKysrKysrCisgZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmggfCAxOCArKysrKysrKysrKysrKysrKy0KKyBpbmNsdWRlL2xpbnV4L3VzYi9oY2QuaCAgICAgICB8ICA3ICsrKysrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDQwIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworLS0tIGEvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMKKysrKyBiL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5jCitAQCAtMTI1LDYgKzEyNSw4IEBAIHN0cnVjdCBhbWRfY2hpcHNldF90eXBlIHsKKyAJdTggcmV2OworIH07CisgCisrI2lmbmRlZiBDT05GSUdfUENJX0RJU0FCTEVfQ09NTU9OX1FVSVJLUworKworIHN0YXRpYyBzdHJ1Y3QgYW1kX2NoaXBzZXRfaW5mbyB7CisgCXN0cnVjdCBwY2lfZGV2CSpuYl9kZXY7CisgCXN0cnVjdCBwY2lfZGV2CSpzbWJ1c19kZXY7CitAQCAtNjMwLDYgKzYzMiwxMCBAQCBib29sIHVzYl9hbWRfcHRfY2hlY2tfcG9ydChzdHJ1Y3QgZGV2aWNlCisgfQorIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9hbWRfcHRfY2hlY2tfcG9ydCk7CisgCisrI2VuZGlmIC8qIENPTkZJR19QQ0lfRElTQUJMRV9DT01NT05fUVVJUktTICovCisrCisrI2lmIElTX0VOQUJMRUQoQ09ORklHX1VTQl9VSENJX0hDRCkKKysKKyAvKgorICAqIE1ha2Ugc3VyZSB0aGUgY29udHJvbGxlciBpcyBjb21wbGV0ZWx5IGluYWN0aXZlLCB1bmFibGUgdG8KKyAgKiBnZW5lcmF0ZSBpbnRlcnJ1cHRzIG9yIGRvIERNQS4KK0BAIC03MDksOCArNzE1LDE3IEBAIHJlc2V0X25lZWRlZDoKKyAJdWhjaV9yZXNldF9oYyhwZGV2LCBiYXNlKTsKKyAJcmV0dXJuIDE7CisgfQorKyNlbHNlCisraW50IHVoY2lfY2hlY2tfYW5kX3Jlc2V0X2hjKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBsb25nIGJhc2UpCisreworKwlyZXR1cm4gMDsKKyt9CisrCisrI2VuZGlmCisgRVhQT1JUX1NZTUJPTF9HUEwodWhjaV9jaGVja19hbmRfcmVzZXRfaGMpOworIAorKyNpZm5kZWYgQ09ORklHX1BDSV9ESVNBQkxFX0NPTU1PTl9RVUlSS1MKKysKKyBzdGF0aWMgaW5saW5lIGludCBpb190eXBlX2VuYWJsZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBtYXNrKQorIHsKKyAJdTE2IGNtZDsKK0BAIC0xMjcxLDMgKzEyODYsNCBAQCBzdGF0aWMgdm9pZCBxdWlya191c2JfZWFybHlfaGFuZG9mZihzdHJ1CisgfQorIERFQ0xBUkVfUENJX0ZJWFVQX0NMQVNTX0ZJTkFMKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCisgCQkJUENJX0NMQVNTX1NFUklBTF9VU0IsIDgsIHF1aXJrX3VzYl9lYXJseV9oYW5kb2ZmKTsKKysjZW5kaWYKKy0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5oCisrKysgYi9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuaAorQEAgLTUsNiArNSw5IEBACisgI2lmZGVmIENPTkZJR19VU0JfUENJCisgdm9pZCB1aGNpX3Jlc2V0X2hjKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBsb25nIGJhc2UpOworIGludCB1aGNpX2NoZWNrX2FuZF9yZXNldF9oYyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgbG9uZyBiYXNlKTsKKysjZW5kaWYgIC8qIENPTkZJR19VU0JfUENJICovCisrCisrI2lmIGRlZmluZWQoQ09ORklHX1VTQl9QQ0kpICYmICFkZWZpbmVkKENPTkZJR19QQ0lfRElTQUJMRV9DT01NT05fUVVJUktTKQorIGludCB1c2JfaGNkX2FtZF9yZW1vdGVfd2FrZXVwX3F1aXJrKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKKyBib29sIHVzYl9hbWRfaGFuZ19zeW1wdG9tX3F1aXJrKHZvaWQpOworIGJvb2wgdXNiX2FtZF9wcmVmZXRjaF9xdWlyayh2b2lkKTsKK0BAIC0xOSw2ICsyMiwxOCBAQCB2b2lkIHNiODAwX3ByZWZldGNoKHN0cnVjdCBkZXZpY2UgKmRldiwKKyBib29sIHVzYl9hbWRfcHRfY2hlY2tfcG9ydChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsIGludCBwb3J0KTsKKyAjZWxzZQorIHN0cnVjdCBwY2lfZGV2OworK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9hbWRfcXVpcmtfcGxsX2NoZWNrKHZvaWQpCisreworKwlyZXR1cm4gMDsKKyt9Cisrc3RhdGljIGlubGluZSBib29sIHVzYl9hbWRfaGFuZ19zeW1wdG9tX3F1aXJrKHZvaWQpCisreworKwlyZXR1cm4gZmFsc2U7CisrfQorK3N0YXRpYyBpbmxpbmUgYm9vbCB1c2JfYW1kX3ByZWZldGNoX3F1aXJrKHZvaWQpCisreworKwlyZXR1cm4gZmFsc2U7CisrfQorIHN0YXRpYyBpbmxpbmUgdm9pZCB1c2JfYW1kX3F1aXJrX3BsbF9kaXNhYmxlKHZvaWQpIHt9Cisgc3RhdGljIGlubGluZSB2b2lkIHVzYl9hbWRfcXVpcmtfcGxsX2VuYWJsZSh2b2lkKSB7fQorIHN0YXRpYyBpbmxpbmUgdm9pZCB1c2JfYXNtZWRpYV9tb2RpZnlmbG93Y29udHJvbChzdHJ1Y3QgcGNpX2RldiAqcGRldikge30KK0BAIC0yOSw2ICs0NCwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdXNiX2FtZF9wdF9jaGVja19wb3J0CisgeworIAlyZXR1cm4gZmFsc2U7CisgfQorK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2JfZW5hYmxlX2ludGVsX3hoY2lfcG9ydHMoc3RydWN0IHBjaV9kZXYgKnhoY2lfcGRldikge30KKytzdGF0aWMgaW5saW5lIGJvb2wgdXNiX3hoY2lfbmVlZHNfcGNpX3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQorK3sKKysJcmV0dXJuIGZhbHNlOworK30KKyAjZW5kaWYgIC8qIENPTkZJR19VU0JfUENJICovCisgCisgI2VuZGlmICAvKiAgX19MSU5VWF9VU0JfUENJX1FVSVJLU19IICAqLworLS0tIGEvaW5jbHVkZS9saW51eC91c2IvaGNkLmgKKysrKyBiL2luY2x1ZGUvbGludXgvdXNiL2hjZC5oCitAQCAtNDgzLDcgKzQ4MywxNCBAQCBleHRlcm4gaW50IHVzYl9oY2RfcGNpX3Byb2JlKHN0cnVjdCBwY2lfCisgZXh0ZXJuIHZvaWQgdXNiX2hjZF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworIGV4dGVybiB2b2lkIHVzYl9oY2RfcGNpX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworIAorKyNpZm5kZWYgQ09ORklHX1BDSV9ESVNBQkxFX0NPTU1PTl9RVUlSS1MKKyBleHRlcm4gaW50IHVzYl9oY2RfYW1kX3JlbW90ZV93YWtldXBfcXVpcmsoc3RydWN0IHBjaV9kZXYgKmRldik7CisrI2Vsc2UKKytzdGF0aWMgaW5saW5lIGludCB1c2JfaGNkX2FtZF9yZW1vdGVfd2FrZXVwX3F1aXJrKHN0cnVjdCBwY2lfZGV2ICpkZXYpCisreworKwlyZXR1cm4gMDsKKyt9CisrI2VuZGlmCisgCisgI2lmZGVmIENPTkZJR19QTQorIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyB1c2JfaGNkX3BjaV9wbV9vcHM7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC84MjAtbGliYXRhLUFzc2lnbi1PRi1ub2RlLXRvLXRoZS1TQ1NJLWRldmljZS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzgyMC1saWJhdGEtQXNzaWduLU9GLW5vZGUtdG8tdGhlLVNDU0ktZGV2aWNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0Y2JhYWEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC84MjAtbGliYXRhLUFzc2lnbi1PRi1ub2RlLXRvLXRoZS1TQ1NJLWRldmljZS5wYXRjaApAQCAtMCwwICsxLDg2IEBACitGcm9tIDQzYTkzODkzZWIzM2U5OTY4MzZiOTlmYjNlMWY3MzAwYzAxMzJhNTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQGxpbmFyby5vcmc+CitEYXRlOiBUdWUsIDMxIERlYyAyMDE5IDE4OjE1OjMzICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggNS83XSBsaWJhdGE6IEFzc2lnbiBPRiBub2RlIHRvIHRoZSBTQ1NJIGRldmljZQorCitXaGVuIHdlIHNwYXduIGEgU0NTSSBkZXZpY2UgZnJvbSBhbiBBVEEgZGV2aWNlIGluIGxpYmF0YS1zY3NpCit0aGUgU0NTSSBkZXZpY2UgaGFkIG5vIHJlbGF0aW9uIHRvIHRoZSBkZXZpY2UgdHJlZS4KKworVGhlIERUIGJpbmRpbmcgYWxsb3dzIHVzIHRvIGRlZmluZSBwb3J0IG5vZGVzIHVuZGVyIGEKK1BBVEEgKElERSkgb3IgU0FUQSBob3N0IGNvbnRyb2xsZXIsIHNvIHdlIGNhbiBoYXZlIHByb3BlciBkZXZpY2UKK25vZGVzIGZvciB0aGVzZSBkZXZpY2VzLgorCitJZiBPRiBpcyBlbmFibGVkLCB3YWxrIHRoZSBjaGlsZHJlbiBvZiB0aGUgaG9zdCBjb250cm9sbGVyIG5vZGUKK3RvIHNlZSBpZiB0aGVyZSBpcyBhIHZhbGlkIGRldmljZSB0cmVlIG5vZGUgdG8gYXNzaWduLiBUaGUgcmVnCitpcyB1c2VkIHRvIG1hdGNoIHRvIElEIDAgZm9yIHRoZSBtYXN0ZXIgZGV2aWNlIGFuZCBJRCAxIGZvciB0aGUKK3NsYXZlIGRldmljZS4KKworVGhlIGNvcnJlc3BvbmRpbmcgZGV2aWNlIHRyZWUgYmluZGluZ3MgaGF2ZSBiZWVuIGFjY2VwdGVkIGJ5Cit0aGUgZGV2aWNlIHRyZWUgbWFpbnRhaW5lcnMuCisKK0NjOiBDaHJpcyBIZWFseSA8Y3BoZWFseUBnbWFpbC5jb20+CitDYzogTWFydGluIEsuIFBldGVyc2VuIDxtYXJ0aW4ucGV0ZXJzZW5Ab3JhY2xlLmNvbT4KK0NjOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0NjOiBHdWVudGVyIFJvZWNrIDxsaW51eEByb2Vjay11cy5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQGxpbmFyby5vcmc+CistLS0KK0NoYW5nZUxvZyB2MS0+djI6CistIFVzZSBkZXZfZGJnKCkgZm9yIHRoZSBkZWJ1ZyBwcmludAorLSByZXR1cm4gaW1tZWRpYXRlbHkgYWZ0ZXIgZmluZGluZyBhIG1hdGNoaW5nIE9GIG5vZGUKKy0tLQorIGRyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMgfCAzMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMzAgaW5zZXJ0aW9ucygrKQorCistLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jCisrKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jCitAQCAtMzUsNiArMzUsNyBAQAorICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisgI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKyAjaW5jbHVkZSA8bGludXgvaW9wcmlvLmg+CisrI2luY2x1ZGUgPGxpbnV4L29mLmg+CisgCisgI2luY2x1ZGUgImxpYmF0YS5oIgorICNpbmNsdWRlICJsaWJhdGEtdHJhbnNwb3J0LmgiCitAQCAtNDU5MCw2ICs0NTkxLDM0IEBAIGludCBhdGFfc2NzaV9hZGRfaG9zdHMoc3RydWN0IGF0YV9ob3N0ICoKKyAJcmV0dXJuIHJjOworIH0KKyAKKysjaWZkZWYgQ09ORklHX09GCisrc3RhdGljIHZvaWQgYXRhX3Njc2lfYXNzaWduX29mbm9kZShzdHJ1Y3QgYXRhX2RldmljZSAqZGV2LCBzdHJ1Y3QgYXRhX3BvcnQgKmFwKQorK3sKKysJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gZGV2LT5zZGV2OworKwlzdHJ1Y3QgZGV2aWNlICpkID0gYXAtPmhvc3QtPmRldjsKKysJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGQtPm9mX25vZGU7CisrCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7CisrCisrCWZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKG5wLCBjaGlsZCkgeworKwkJaW50IHJldDsKKysJCXUzMiB2YWw7CisrCisrCQlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihjaGlsZCwgInJlZyIsICZ2YWwpOworKwkJaWYgKHJldCkKKysJCQljb250aW51ZTsKKysJCWlmICh2YWwgPT0gZGV2LT5kZXZubykgeworKwkJCWRldl9kYmcoZCwgImZvdW5kIG1hdGNoaW5nIGRldmljZSBub2RlXG4iKTsKKysJCQlzZGV2LT5zZGV2X2dlbmRldi5vZl9ub2RlID0gY2hpbGQ7CisrCQkJcmV0dXJuOworKwkJfQorKwl9CisrfQorKyNlbHNlCisrc3RhdGljIHZvaWQgYXRhX3Njc2lfYXNzaWduX29mbm9kZShzdHJ1Y3QgYXRhX2RldmljZSAqZGV2LCBzdHJ1Y3QgYXRhX3BvcnQgKmFwKQorK3sKKyt9CisrI2VuZGlmCisrCisgdm9pZCBhdGFfc2NzaV9zY2FuX2hvc3Qoc3RydWN0IGF0YV9wb3J0ICphcCwgaW50IHN5bmMpCisgeworIAlpbnQgdHJpZXMgPSA1OworQEAgLTQ2MTUsNiArNDY0NCw3IEBAIHZvaWQgYXRhX3Njc2lfc2Nhbl9ob3N0KHN0cnVjdCBhdGFfcG9ydAorIAkJCQkJCSBOVUxMKTsKKyAJCQlpZiAoIUlTX0VSUihzZGV2KSkgeworIAkJCQlkZXYtPnNkZXYgPSBzZGV2OworKwkJCQlhdGFfc2NzaV9hc3NpZ25fb2Zub2RlKGRldiwgYXApOworIAkJCQlzY3NpX2RldmljZV9wdXQoc2Rldik7CisgCQkJfSBlbHNlIHsKKyAJCQkJZGV2LT5zZGV2ID0gTlVMTDsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzgzNC1sZWR0cmlnLWxpYmF0YS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40LzgzNC1sZWR0cmlnLWxpYmF0YS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmJiYjU0Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvODM0LWxlZHRyaWctbGliYXRhLnBhdGNoCkBAIC0wLDAgKzEsMTQ5IEBACitGcm9tOiBEYW5pZWwgR29sbGUgPGRhbmllbEBtYWtyb3RvcGlhLm9yZz4KK1N1YmplY3Q6IGxpYmF0YTogYWRkIGxlZHRyaWcgc3VwcG9ydAorCitUaGlzIGFkZHMgYSBMRUQgdHJpZ2dlciBmb3IgZWFjaCBBVEEgcG9ydCBpbmRpY2F0aW5nIGRpc2sgYWN0aXZpdHkuCisKK0FzIHRoaXMgaXMgbmVlZGVkIG9ubHkgb24gc3BlY2lmaWMgcGxhdGZvcm1zIChOQVMgU29DcyBhbmQgc3VjaCksCit0aGVzZSBwbGF0Zm9ybXMgc2hvdWxkIGRlZmluZSBBUkNIX1dBTlRTX0xJQkFUQV9MRURTIGlmIHRoZXJlCithcmUgYm9hcmRzIHdpdGggTEVEKHMpIGludGVuZGVkIHRvIGluZGljYXRlIEFUQSBkaXNrIGFjdGl2aXR5IGFuZAorbmVlZCB0aGUgT1MgdG8gdGFrZSBjYXJlIG9mIHRoYXQuCitJbiB0aGF0IHdheSwgaWYgbm90IHNlbGVjdGVkLCBMRUQgdHJpZ2dlciBzdXBwb3J0IG5vdCB3aWxsIGJlCitpbmNsdWRlZCBpbiBsaWJhdGEtY29yZSBhbmQgYm90aCwgY29kZXBhdGhzIGFuZCBzdHJ1Y3R1cmVzIHJlbWFpbgordW50b3VjaGVkLgorCitTaWduZWQtb2ZmLWJ5OiBEYW5pZWwgR29sbGUgPGRhbmllbEBtYWtyb3RvcGlhLm9yZz4KKy0tLQorIGRyaXZlcnMvYXRhL0tjb25maWcgICAgICAgfCAxNiArKysrKysrKysrKysrKysrCisgZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYyB8IDQxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgaW5jbHVkZS9saW51eC9saWJhdGEuaCAgICB8ICA5ICsrKysrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgNjYgaW5zZXJ0aW9ucygrKQorCistLS0gYS9kcml2ZXJzL2F0YS9LY29uZmlnCisrKysgYi9kcml2ZXJzL2F0YS9LY29uZmlnCitAQCAtNDUsNiArNDUsMjIgQEAgY29uZmlnIEFUQV9WRVJCT1NFX0VSUk9SCisgCisgCSAgSWYgdW5zdXJlLCBzYXkgWS4KKyAKKytjb25maWcgQVJDSF9XQU5UX0xJQkFUQV9MRURTCisrCWJvb2wKKysKKytjb25maWcgQVRBX0xFRFMKKysJYm9vbCAic3VwcG9ydCBBVEEgcG9ydCBMRUQgdHJpZ2dlcnMiCisrCWRlcGVuZHMgb24gQVJDSF9XQU5UX0xJQkFUQV9MRURTCisrCXNlbGVjdCBORVdfTEVEUworKwlzZWxlY3QgTEVEU19DTEFTUworKwlzZWxlY3QgTEVEU19UUklHR0VSUworKwlkZWZhdWx0IHkKKysJaGVscAorKwkgIFRoaXMgb3B0aW9uIGFkZHMgYSBMRUQgdHJpZ2dlciBmb3IgZWFjaCByZWdpc3RlcmVkIEFUQSBwb3J0LgorKwkgIEl0IGlzIHVzZWQgdG8gZHJpdmUgZGlzayBhY3Rpdml0eSBsZWRzIGNvbm5lY3RlZCB2aWEgR1BJTy4KKysKKysJICBJZiB1bnN1cmUsIHNheSBOLgorKworIGNvbmZpZyBBVEFfQUNQSQorIAlib29sICJBVEEgQUNQSSBTdXBwb3J0IgorIAlkZXBlbmRzIG9uIEFDUEkKKy0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKKysrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKK0BAIC03MTQsNiArNzE0LDE5IEBAIHU2NCBhdGFfdGZfcmVhZF9ibG9jayhjb25zdCBzdHJ1Y3QgYXRhX3QKKyAJcmV0dXJuIGJsb2NrOworIH0KKyAKKysjaWZkZWYgQ09ORklHX0FUQV9MRURTCisrI2RlZmluZSBMSUJBVEFfQkxJTktfREVMQVkgMjAgLyogbXMgKi8KKytzdGF0aWMgaW5saW5lIHZvaWQgYXRhX2xlZF9hY3Qoc3RydWN0IGF0YV9wb3J0ICphcCkKKyt7CisrCXVuc2lnbmVkIGxvbmcgbGVkX2RlbGF5ID0gTElCQVRBX0JMSU5LX0RFTEFZOworKworKwlpZiAodW5saWtlbHkoIWFwLT5sZWR0cmlnKSkKKysJCXJldHVybjsKKysKKysJbGVkX3RyaWdnZXJfYmxpbmtfb25lc2hvdChhcC0+bGVkdHJpZywgJmxlZF9kZWxheSwgJmxlZF9kZWxheSwgMCk7CisrfQorKyNlbmRpZgorKworIC8qKgorICAqCWF0YV9idWlsZF9yd190ZiAtIEJ1aWxkIEFUQSB0YXNrZmlsZSBmb3IgZ2l2ZW4gcmVhZC93cml0ZSByZXF1ZXN0CisgICoJQHRmOiBUYXJnZXQgQVRBIHRhc2tmaWxlCitAQCAtNTE1Miw2ICs1MTY1LDkgQEAgc3RydWN0IGF0YV9xdWV1ZWRfY21kICphdGFfcWNfbmV3X2luaXQocworIAkJaWYgKHRhZyA8IDApCisgCQkJcmV0dXJuIE5VTEw7CisgCX0KKysjaWZkZWYgQ09ORklHX0FUQV9MRURTCisrCWF0YV9sZWRfYWN0KGFwKTsKKysjZW5kaWYKKyAKKyAJcWMgPSBfX2F0YV9xY19mcm9tX3RhZyhhcCwgdGFnKTsKKyAJcWMtPnRhZyA9IHFjLT5od190YWcgPSB0YWc7CitAQCAtNjA4OCw2ICs2MTA0LDkgQEAgc3RydWN0IGF0YV9wb3J0ICphdGFfcG9ydF9hbGxvYyhzdHJ1Y3QgYQorIAlhcC0+c3RhdHMudW5oYW5kbGVkX2lycSA9IDE7CisgCWFwLT5zdGF0cy5pZGxlX2lycSA9IDE7CisgI2VuZGlmCisrI2lmZGVmIENPTkZJR19BVEFfTEVEUworKwlhcC0+bGVkdHJpZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsZWRfdHJpZ2dlciksIEdGUF9LRVJORUwpOworKyNlbmRpZgorIAlhdGFfc2ZmX3BvcnRfaW5pdChhcCk7CisgCisgCXJldHVybiBhcDsKK0BAIC02MTIzLDYgKzYxNDIsMTIgQEAgc3RhdGljIHZvaWQgYXRhX2hvc3RfcmVsZWFzZShzdHJ1Y3Qga3JlZgorIAorIAkJa2ZyZWUoYXAtPnBtcF9saW5rKTsKKyAJCWtmcmVlKGFwLT5zbGF2ZV9saW5rKTsKKysjaWZkZWYgQ09ORklHX0FUQV9MRURTCisrCQlpZiAoYXAtPmxlZHRyaWcpIHsKKysJCQlsZWRfdHJpZ2dlcl91bnJlZ2lzdGVyKGFwLT5sZWR0cmlnKTsKKysJCQlrZnJlZShhcC0+bGVkdHJpZyk7CisrCQl9OworKyNlbmRpZgorIAkJa2ZyZWUoYXApOworIAkJaG9zdC0+cG9ydHNbaV0gPSBOVUxMOworIAl9CitAQCAtNjU4Niw3ICs2NjExLDIzIEBAIGludCBhdGFfaG9zdF9yZWdpc3RlcihzdHJ1Y3QgYXRhX2hvc3QgKmgKKyAJCWhvc3QtPnBvcnRzW2ldLT5wcmludF9pZCA9IGF0b21pY19pbmNfcmV0dXJuKCZhdGFfcHJpbnRfaWQpOworIAkJaG9zdC0+cG9ydHNbaV0tPmxvY2FsX3BvcnRfbm8gPSBpICsgMTsKKyAJfQorKyNpZmRlZiBDT05GSUdfQVRBX0xFRFMKKysJZm9yIChpID0gMDsgaSA8IGhvc3QtPm5fcG9ydHM7IGkrKykgeworKwkJaWYgKHVubGlrZWx5KCFob3N0LT5wb3J0c1tpXS0+bGVkdHJpZykpCisrCQkJY29udGludWU7CisgCisrCQlzbnByaW50Zihob3N0LT5wb3J0c1tpXS0+bGVkdHJpZ19uYW1lLAorKwkJCXNpemVvZihob3N0LT5wb3J0c1tpXS0+bGVkdHJpZ19uYW1lKSwgImF0YSV1IiwKKysJCQlob3N0LT5wb3J0c1tpXS0+cHJpbnRfaWQpOworKworKwkJaG9zdC0+cG9ydHNbaV0tPmxlZHRyaWctPm5hbWUgPSBob3N0LT5wb3J0c1tpXS0+bGVkdHJpZ19uYW1lOworKworKwkJaWYgKGxlZF90cmlnZ2VyX3JlZ2lzdGVyKGhvc3QtPnBvcnRzW2ldLT5sZWR0cmlnKSkgeworKwkJCWtmcmVlKGhvc3QtPnBvcnRzW2ldLT5sZWR0cmlnKTsKKysJCQlob3N0LT5wb3J0c1tpXS0+bGVkdHJpZyA9IE5VTEw7CisrCQl9CisrCX0KKysjZW5kaWYKKyAJLyogQ3JlYXRlIGFzc29jaWF0ZWQgc3lzZnMgdHJhbnNwb3J0IG9iamVjdHMgICovCisgCWZvciAoaSA9IDA7IGkgPCBob3N0LT5uX3BvcnRzOyBpKyspIHsKKyAJCXJjID0gYXRhX3Rwb3J0X2FkZChob3N0LT5kZXYsaG9zdC0+cG9ydHNbaV0pOworLS0tIGEvaW5jbHVkZS9saW51eC9saWJhdGEuaAorKysrIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaAorQEAgLTIzLDYgKzIzLDkgQEAKKyAjaW5jbHVkZSA8bGludXgvY2Ryb20uaD4KKyAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyAjaW5jbHVkZSA8bGludXgvYXN5bmMuaD4KKysjaWZkZWYgQ09ORklHX0FUQV9MRURTCisrI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKysjZW5kaWYKKyAKKyAvKgorICAqIERlZmluZSBpZiBhcmNoIGhhcyBub24tc3RhbmRhcmQgc2V0dXAuICBUaGlzIGlzIGEgX1BDSV8gc3RhbmRhcmQKK0BAIC04ODIsNiArODg1LDEyIEBAIHN0cnVjdCBhdGFfcG9ydCB7CisgI2lmZGVmIENPTkZJR19BVEFfQUNQSQorIAlzdHJ1Y3QgYXRhX2FjcGlfZ3RtCV9fYWNwaV9pbml0X2d0bTsgLyogdXNlIGF0YV9hY3BpX2luaXRfZ3RtKCkgKi8KKyAjZW5kaWYKKysKKysjaWZkZWYgQ09ORklHX0FUQV9MRURTCisrCXN0cnVjdCBsZWRfdHJpZ2dlcgkqbGVkdHJpZzsKKysJY2hhcgkJCWxlZHRyaWdfbmFtZVs4XTsKKysjZW5kaWYKKysKKyAJLyogb3duZWQgYnkgRUggKi8KKyAJdTgJCQlzZWN0b3JfYnVmW0FUQV9TRUNUX1NJWkVdIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKyB9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvODQwLWh3cm5nLWJjbTI4MzUtc2V0LXF1YWxpdHktdG8tMTAwMC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40Lzg0MC1od3JuZy1iY20yODM1LXNldC1xdWFsaXR5LXRvLTEwMDAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ3YzZkOAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40Lzg0MC1od3JuZy1iY20yODM1LXNldC1xdWFsaXR5LXRvLTEwMDAucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorRnJvbSBkNjk4OGNmMWQxNmZhYWM1Njg5OTkxOGJiMmIxYmU4ZDg1MTU1ZTNmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xPz1DMz04MWx2YXJvPTIwRmVybj1DMz1BMW5kZXo9MjBSb2phcz89IDxub2x0YXJpQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMjAgRmViIDIwMjEgMTg6MzY6MzggKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gaHdybmc6IGJjbTI4MzU6IHNldCBxdWFsaXR5IHRvIDEwMDAKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworVGhpcyBhbGxvd3MgZGV2aWNlcyB3aXRob3V0IGEgaGlnaCBwcmVjaXNzaW9uIHRpbWVyIHRvIHJlZHVjZSBib290IGZyb20gPjEwMHMKK3RvIDwzMHMuCisKK1NpZ25lZC1vZmYtYnk6IMOBbHZhcm8gRmVybsOhbmRleiBSb2phcyA8bm9sdGFyaUBnbWFpbC5jb20+CistLS0KKyBkcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2JjbTI4MzUtcm5nLmMgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworLS0tIGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9iY20yODM1LXJuZy5jCisrKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2JjbTI4MzUtcm5nLmMKK0BAIC0xNjcsNiArMTY3LDcgQEAgc3RhdGljIGludCBiY20yODM1X3JuZ19wcm9iZShzdHJ1Y3QgcGxhdAorIAlwcml2LT5ybmcuaW5pdCA9IGJjbTI4MzVfcm5nX2luaXQ7CisgCXByaXYtPnJuZy5yZWFkID0gYmNtMjgzNV9ybmdfcmVhZDsKKyAJcHJpdi0+cm5nLmNsZWFudXAgPSBiY20yODM1X3JuZ19jbGVhbnVwOworKwlwcml2LT5ybmcucXVhbGl0eSA9IDEwMDA7CisgCisgCWlmIChkZXZfb2Zfbm9kZShkZXYpKSB7CisgCQlybmdfaWQgPSBvZl9tYXRjaF9ub2RlKGJjbTI4MzVfcm5nX29mX21hdGNoLCBucCk7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvZ2VuZXJpYy9wZW5kaW5nLTUuNC85MjAtbWFuZ2xlX2Jvb3RhcmdzLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvOTIwLW1hbmdsZV9ib290YXJncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTc4MmU5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvOTIwLW1hbmdsZV9ib290YXJncy5wYXRjaApAQCAtMCwwICsxLDcxIEBACitGcm9tOiBJbXJlIEthbG96IDxrYWxvekBvcGVud3J0Lm9yZz4KK1N1YmplY3Q6IGluaXQ6IGFkZCBDT05GSUdfTUFOR0xFX0JPT1RBUkdTIGFuZCBkaXNhYmxlIGl0IGJ5IGRlZmF1bHQKKworRW5hYmxpbmcgdGhpcyBvcHRpb24gcmVuYW1lcyB0aGUgYm9vdGxvYWRlciBzdXBwbGllZCByb290PQorYW5kIHJvb3Rmc3R5cGU9IHZhcmlhYmxlcywgd2hpY2ggbWlnaHQgaGF2ZSB0byBiZSBrbm93IGJ1dAord291bGQgYnJlYWsgdGhlIGF1dG9tYXRpc21zIE9wZW5XcnQgdXNlcy4KKworU2lnbmVkLW9mZi1ieTogSW1yZSBLYWxveiA8a2Fsb3pAb3BlbndydC5vcmc+CistLS0KKyBpbml0L0tjb25maWcgfCAgOSArKysrKysrKysKKyBpbml0L21haW4uYyAgfCAyNCArKysrKysrKysrKysrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDMzIGluc2VydGlvbnMoKykKKworLS0tIGEvaW5pdC9LY29uZmlnCisrKysgYi9pbml0L0tjb25maWcKK0BAIC0xNjc1LDYgKzE2NzUsMTUgQEAgY29uZmlnIEVNQkVEREVECisgCSAgYW4gZW1iZWRkZWQgc3lzdGVtIHNvIGNlcnRhaW4gZXhwZXJ0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZQorIAkgIGZvciBjb25maWd1cmF0aW9uLgorIAorK2NvbmZpZyBNQU5HTEVfQk9PVEFSR1MKKysJYm9vbCAiUmVuYW1lIG9mZmVuZGluZyBib290YXJncyIKKysJZGVwZW5kcyBvbiBFWFBFUlQKKysJaGVscAorKwkgIFNvbWV0aW1lcyB0aGUgYm9vdGxvYWRlciBwYXNzZWQgYm9ndXMgcm9vdD0gYW5kIHJvb3Rmc3R5cGU9CisrCSAgcGFyYW1ldGVycyB0byB0aGUga2VybmVsLCBhbmQgd2hpbGUgeW91IHdhbnQgdG8gaWdub3JlIHRoZW0sCisrCSAgeW91IG5lZWQgdG8ga25vdyB0aGUgdmFsdWVzIGYuZS4gdG8gc3VwcG9ydCBkdWFsIGZpcm13YXJlCisrCSAgbGF5b3V0cyBvbiB0aGUgZmxhc2guCisrCisgY29uZmlnIEhBVkVfUEVSRl9FVkVOVFMKKyAJYm9vbAorIAloZWxwCistLS0gYS9pbml0L21haW4uYworKysrIGIvaW5pdC9tYWluLmMKK0BAIC0zNjcsNiArMzY3LDI5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9ucl9jcHVfaWRzKHZvaWQKKyBzdGF0aWMgaW5saW5lIHZvaWQgc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4Y3B1cykgeyB9CisgI2VuZGlmCisgCisrI2lmZGVmIENPTkZJR19NQU5HTEVfQk9PVEFSR1MKKytzdGF0aWMgdm9pZCBfX2luaXQgbWFuZ2xlX2Jvb3RhcmdzKGNoYXIgKmNvbW1hbmRfbGluZSkKKyt7CisrCWNoYXIgKnJvb3RkZXY7CisrCWNoYXIgKnJvb3RmczsKKysKKysJcm9vdGRldiA9IHN0cnN0cihjb21tYW5kX2xpbmUsICJyb290PS9kZXYvbXRkYmxvY2siKTsKKysKKysJaWYgKHJvb3RkZXYpCisrCQlzdHJuY3B5KHJvb3RkZXYsICJtYW5nbGVkX3Jvb3RibG9jaz0iLCAxOCk7CisrCisrCXJvb3RmcyA9IHN0cnN0cihjb21tYW5kX2xpbmUsICJyb290ZnN0eXBlIik7CisrCisrCWlmIChyb290ZnMpCisrCQlzdHJuY3B5KHJvb3RmcywgIm1hbmdsZWRfZnMiLCAxMCk7CisrCisrfQorKyNlbHNlCisrc3RhdGljIHZvaWQgX19pbml0IG1hbmdsZV9ib290YXJncyhjaGFyICpjb21tYW5kX2xpbmUpCisreworK30KKysjZW5kaWYKKysKKyAvKgorICAqIFdlIG5lZWQgdG8gc3RvcmUgdGhlIHVudG91Y2hlZCBjb21tYW5kIGxpbmUgZm9yIGZ1dHVyZSByZWZlcmVuY2UuCisgICogV2UgYWxzbyBuZWVkIHRvIHN0b3JlIHRoZSB0b3VjaGVkIGNvbW1hbmQgbGluZSBzaW5jZSB0aGUgcGFyYW1ldGVyCitAQCAtNTk3LDYgKzYyMCw3IEBAIGFzbWxpbmthZ2UgX192aXNpYmxlIHZvaWQgX19pbml0IHN0YXJ0X2sKKyAJcHJfbm90aWNlKCIlcyIsIGxpbnV4X2Jhbm5lcik7CisgCWVhcmx5X3NlY3VyaXR5X2luaXQoKTsKKyAJc2V0dXBfYXJjaCgmY29tbWFuZF9saW5lKTsKKysJbWFuZ2xlX2Jvb3RhcmdzKGNvbW1hbmRfbGluZSk7CisgCXNldHVwX2NvbW1hbmRfbGluZShjb21tYW5kX2xpbmUpOworIAlzZXR1cF9ucl9jcHVfaWRzKCk7CisgCXNldHVwX3Blcl9jcHVfYXJlYXMoKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40L3BlbmRpbmctNS40LmluYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9nZW5lcmljL3BlbmRpbmctNS40L3BlbmRpbmctNS40LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjBkY2E2Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L2dlbmVyaWMvcGVuZGluZy01LjQvcGVuZGluZy01LjQuaW5jCkBAIC0wLDAgKzEsMTMyIEBACisjcGF0Y2ggcGVuZGluZy01LjQgKGNvbWUgZnJvbSBvcGVud3J0L2xlZGUvdGFyZ2V0L2xpbnV4L21lZGlhdGVrKQorU1JDX1VSSV9hcHBlbmQgPSAiIFwKKyAgICBmaWxlOi8vMDkzMS13MS1ncGlvLWZpeC1wcm9ibGVtLXdpdGgtcGxhdGZvbS1kYXRhLWluLXcxLWdwaW8ucGF0Y2ggXAorICAgIGZpbGU6Ly8xMDItTUlQUy1vbmx5LXByb2Nlc3MtbmVnYXRpdmUtc3RhY2stb2Zmc2V0cy1vbi1zdGFjay10ci5wYXRjaCBcCisgICAgZmlsZTovLzEwMy1NSVBTLXNlbGVjdC1DUFVfTUlQUzY0LWZvci1yZW1haW5pbmctTUlQUzY0LUNQVXMucGF0Y2ggXAorICAgIGZpbGU6Ly8xMTAtZWhjaV9oY2RfaWdub3JlX29jLnBhdGNoIFwKKyAgICBmaWxlOi8vMTIwLUZpeC1hbGxvY19ub2RlX21lbV9tYXAtd2l0aC1BUkNIX1BGTl9PRkZTRVQtY2FsY3UucGF0Y2ggXAorICAgIGZpbGU6Ly8xMzAtYWRkLWxpbnV4LXNwaWRldi1jb21wYXRpYmxlLXNpMzIxMC5wYXRjaCBcCisgICAgZmlsZTovLzE0MC1qZmZzMi11c2UtLnJlbmFtZTItYW5kLWFkZC1SRU5BTUVfV0hJVEVPVVQtc3VwcG9ydC5wYXRjaCBcCisgICAgZmlsZTovLzE0MS1qZmZzMi1hZGQtUkVOQU1FX0VYQ0hBTkdFLXN1cHBvcnQucGF0Y2ggXAorICAgIGZpbGU6Ly8xNTAtYnJpZGdlX2FsbG93X3JlY2VpcHRpb25fb25fZGlzYWJsZWRfcG9ydC5wYXRjaCBcCisgICAgZmlsZTovLzE4MC1uZXQtcGh5LWF0ODAzeC1hZGQtc3VwcG9ydC1mb3ItQVQ4MDMyLnBhdGNoIFwKKyAgICBmaWxlOi8vMTkwLXJ0Yy1yczVjMzcyLXN1cHBvcnRfYWxhcm1zX3VwX3RvXzFfd2Vlay5wYXRjaCBcCisgICAgZmlsZTovLzE5MS1ydGMtcnM1YzM3Mi1sZXRfdGhlX2FsYXJtX3RvX2JlX3VzZWRfYXNfd2FrZXVwX3NvdXJjZS5wYXRjaCBcCisgICAgZmlsZTovLzIwMS1leHRyYV9vcHRpbWl6YXRpb24ucGF0Y2ggXAorICAgIGZpbGU6Ly8yMDMta2FsbHN5bXNfdW5jb21wcmVzc2VkLnBhdGNoIFwKKyAgICBmaWxlOi8vMjA1LWJhY2t0cmFjZV9tb2R1bGVfaW5mby5wYXRjaCBcCisgICAgZmlsZTovLzI0MC1yZW1vdmUtdW5zYW5lLWZpbGVuYW1lcy1mcm9tLWRlcHNfaW5pdHJhbWZzLWxpc3QucGF0Y2ggXAorICAgIGZpbGU6Ly8yNjEtZW5hYmxlX3dpbGlua19wbGF0Zm9ybV93aXRob3V0X2RyaXZlcnMucGF0Y2ggXAorICAgIGZpbGU6Ly8yNzAtcGxhdGZvcm0tbWlrcm90aWstYnVpbGQtYml0cy5wYXRjaCBcCisgICAgZmlsZTovLzMwMC1taXBzX2V4cG9zZV9ib290X3Jhdy5wYXRjaCBcCisgICAgZmlsZTovLzMwMi1taXBzX25vX2JyYW5jaF9saWtlbHkucGF0Y2ggXAorICAgIGZpbGU6Ly8zMDUtbWlwc19tb2R1bGVfcmVsb2MucGF0Y2ggXAorICAgIGZpbGU6Ly8zMDctbWlwc19oaWdobWVtX29mZnNldC5wYXRjaCBcCisgICAgZmlsZTovLzMwOC1taXBzMzJyMl90dW5lLnBhdGNoIFwKKyAgICBmaWxlOi8vMzA5LU1JUFMtQWRkLUNQVS1vcHRpb24tcmVwb3J0aW5nLXRvLXByb2MtY3B1aW5mby5wYXRjaCBcCisgICAgZmlsZTovLzMxMC1hcm1fbW9kdWxlX3VucmVzb2x2ZWRfd2Vha19zeW0ucGF0Y2ggXAorICAgIGZpbGU6Ly8zMTEtTUlQUy16Ym9vdC1wdXQtYXBwZW5kZWQtZHRiLWludG8tYS1zZWN0aW9uLnBhdGNoIFwKKyAgICBmaWxlOi8vMzMwLU1JUFMta2V4ZWMtQWNjZXB0LWNvbW1hbmQtbGluZS1wYXJhbWV0ZXJzLWZyb20tdXNlcnMucGF0Y2ggXAorICAgIGZpbGU6Ly8zMzItYXJjLWFkZC1PV1JURFRCLXNlY3Rpb24ucGF0Y2ggXAorICAgIGZpbGU6Ly8zMzMtYXJjLWVuYWJsZS11bmFsaWduZWQtYWNjZXNzLWluLWtlcm5lbC1tb2RlLnBhdGNoIFwKKyAgICBmaWxlOi8vMzQyLXBvd2VycGMtRW5hYmxlLWtlcm5lbC1YWi1jb21wcmVzc2lvbi1vcHRpb24tb24tUFBDXzgucGF0Y2ggXAorICAgIGZpbGU6Ly80MDAtbXRkLWFkZC1yb290ZnMtc3BsaXQtc3VwcG9ydC5wYXRjaCBcCisgICAgZmlsZTovLzQwMS1tdGQtYWRkLXN1cHBvcnQtZm9yLWRpZmZlcmVudC1wYXJ0aXRpb24tcGFyc2VyLXR5cGVzLnBhdGNoIFwKKyAgICBmaWxlOi8vNDAyLW10ZC11c2UtdHlwZWQtbXRkLXBhcnNlcnMtZm9yLXJvb3Rmcy1hbmQtZmlybXdhcmUtc3BsaXQucGF0Y2ggXAorICAgIGZpbGU6Ly80MDMtbXRkLWhvb2stbXRkc3BsaXQtdG8tS2J1aWxkLnBhdGNoIFwKKyAgICBmaWxlOi8vNDA0LW10ZC1hZGQtbW9yZS1oZWxwZXItZnVuY3Rpb25zLnBhdGNoIFwKKyAgICBmaWxlOi8vNDEwLW10ZC1wYXJzZXJzLW9mcGFydC1maXgtcGFyc2luZy1zdWJwYXJ0aXRpb25zLnBhdGNoIFwKKyAgICBmaWxlOi8vNDExLW10ZC1wYXJ0aWFsX2VyYXNlYmxvY2tfd3JpdGUucGF0Y2ggXAorICAgIGZpbGU6Ly80MTItbXRkLXBhcnRpYWxfZXJhc2VibG9ja191bmxvY2sucGF0Y2ggXAorICAgIGZpbGU6Ly80MTktbXRkLXJlZGJvb3QtYWRkLW9mX21hdGNoX3RhYmxlLXdpdGgtRFQtYmluZGluZy5wYXRjaCBcCisgICAgZmlsZTovLzQyMC1tdGQtcmVkYm9vdF9zcGFjZS5wYXRjaCBcCisgICAgZmlsZTovLzQzMC1tdGQtYWRkLW15bG9hZGVyLXBhcnRpdGlvbi1wYXJzZXIucGF0Y2ggXAorICAgIGZpbGU6Ly80MzEtbXRkLWJjbTQ3eHhwYXJ0LWNoZWNrLWZvci1iYWQtYmxvY2tzLXdoZW4tY2FsY3VsYXRpbi5wYXRjaCBcCisgICAgZmlsZTovLzQzMi1tdGQtYmNtNDd4eHBhcnQtZGV0ZWN0LVRfTWV0ZXItcGFydGl0aW9uLnBhdGNoIFwKKyAgICBmaWxlOi8vNDM1LW10ZC1hZGQtcm91dGVyYm9vdHBhcnQtcGFyc2VyLWNvbmZpZy5wYXRjaCBcCisgICAgZmlsZTovLzQ0Ny1tdGQtc3BpbmFuZC1naWdhZGV2aWNlLUFkZC1zdXBwb3J0LWZvci1HRDVGNEdRNHhDLnBhdGNoIFwKKyAgICBmaWxlOi8vNDUwLW10ZC1zcGktbm9yLWFsbG93LU5PUi1kcml2ZXItdG8td3JpdGUtZmV3ZXItYnl0ZXMtdGgucGF0Y2ggXAorICAgIGZpbGU6Ly80NjAtbXRkLWNmaV9jbWRzZXRfMDAwMi1uby1lcmFzZV9zdXNwZW5kLnBhdGNoIFwKKyAgICBmaWxlOi8vNDYxLW10ZC1jZmlfY21kc2V0XzAwMDItYWRkLWJ1ZmZlci13cml0ZS1jbWQtdGltZW91dC5wYXRjaCBcCisgICAgZmlsZTovLzQ2NS1tMjVwODAtbXgtZGlzYWJsZS1zb2Z0d2FyZS1wcm90ZWN0aW9uLnBhdGNoIFwKKyAgICBmaWxlOi8vNDY2LVJldmVydC1tdGQtc3BpLW5vci1maXgtU3BhbnNpb24tcmVncmVzc2lvbnMtYWxpYXNlZC0ucGF0Y2ggXAorICAgIGZpbGU6Ly80NzAtbXRkLXNwaS1ub3Itc3VwcG9ydC1saW1pdGluZy00Sy1zZWN0b3JzLXN1cHBvcnQtYmFzZS5wYXRjaCBcCisgICAgZmlsZTovLzQ3Ni1tdGQtc3BpLW5vci1hZGQtZW9uLWVuMjVxMTI4LnBhdGNoIFwKKyAgICBmaWxlOi8vNDc5LW10ZC1zcGktbm9yLWFkZC14dHgteHQyNWYxMjhiLnBhdGNoIFwKKyAgICBmaWxlOi8vNDgwLW10ZC1zZXQtcm9vdGZzLXRvLWJlLXJvb3QtZGV2LnBhdGNoIFwKKyAgICBmaWxlOi8vNDgxLW10ZC1zcGktbm9yLXJld29yay1icm9rZW4tZmxhc2gtcmVzZXQtc3VwcG9ydC5wYXRjaCBcCisgICAgZmlsZTovLzQ4Mi1tdGQtc3BpLW5vci1hZGQtc3VwcG9ydC1mb3ItR2lnYWRldmljZS1HRDI1RDA1LnBhdGNoIFwKKyAgICBmaWxlOi8vNDgyLW10ZC1zcGktbm9yLWZpeC00LWJ5dGUtb3Bjb2RlLXN1cHBvcnQtZm9yLXcyNXEyNTYucGF0Y2ggXAorICAgIGZpbGU6Ly80OTAtdWJpLWF1dG8tYXR0YWNoLW10ZC1kZXZpY2UtbmFtZWQtdWJpLW9yLWRhdGEtb24tYm9vdC5wYXRjaCBcCisgICAgZmlsZTovLzQ5MS11YmktYXV0by1jcmVhdGUtdWJpYmxvY2stZGV2aWNlLWZvci1yb290ZnMucGF0Y2ggXAorICAgIGZpbGU6Ly80OTItdHJ5LWF1dG8tbW91bnRpbmctdWJpMC1yb290ZnMtaW4taW5pdC1kb19tb3VudHMuYy5wYXRjaCBcCisgICAgZmlsZTovLzQ5My11Ymktc2V0LVJPT1RfREVWLXRvLXViaWJsb2NrLXJvb3Rmcy1pZi11bnNldC5wYXRjaCBcCisgICAgZmlsZTovLzQ5NC1tdGQtdWJpLWFkZC1FT0YtbWFya2VyLXN1cHBvcnQucGF0Y2ggXAorICAgIGZpbGU6Ly80OTUtbXRkLWNvcmUtYWRkLWdldF9tdGRfZGV2aWNlX2J5X25vZGUucGF0Y2ggXAorICAgIGZpbGU6Ly80OTYtZHQtYmluZGluZ3MtYWRkLWJpbmRpbmdzLWZvci1tdGQtY29uY2F0LWRldmljZXMucGF0Y2ggXAorICAgIGZpbGU6Ly80OTctbXRkLW10ZGNvbmNhdC1hZGQtZHQtZHJpdmVyLWZvci1jb25jYXQtZGV2aWNlcy5wYXRjaCBcCisgICAgZmlsZTovLzQ5OC1tdGQtbXRkY29uY2F0LXNlbGVjdC1yZWFkd3JpdGUtZnVuY3Rpb24ucGF0Y2ggXAorICAgIGZpbGU6Ly80OTktbXRkLWFkZC1ubWJtLXN1cHBvcnQucGF0Y2ggXAorICAgIGZpbGU6Ly81MzAtamZmczJfbWFrZV9sem1hX2F2YWlsYWJsZS5wYXRjaCBcCisgICAgZmlsZTovLzUzMi1qZmZzMl9lb2ZkZXRlY3QucGF0Y2ggXAorICAgIGZpbGU6Ly82MDAtbmV0ZmlsdGVyX2Nvbm50cmFja19mbHVzaC5wYXRjaCBcCisgICAgZmlsZTovLzYxMC1uZXRmaWx0ZXJfbWF0Y2hfYnlwYXNzX2RlZmF1bHRfY2hlY2tzLnBhdGNoIFwKKyAgICBmaWxlOi8vNjExLW5ldGZpbHRlcl9tYXRjaF9ieXBhc3NfZGVmYXVsdF90YWJsZS5wYXRjaCBcCisgICAgZmlsZTovLzYxMi1uZXRmaWx0ZXJfbWF0Y2hfcmVkdWNlX21lbW9yeV9hY2Nlc3MucGF0Y2ggXAorICAgIGZpbGU6Ly82MTMtbmV0ZmlsdGVyX29wdGlvbmFsX3RjcF93aW5kb3dfY2hlY2sucGF0Y2ggXAorICAgIGZpbGU6Ly82MjAtbmV0X3NjaGVkLWNvZGVsLWRvLW5vdC1kZWZlci1xdWV1ZS1sZW5ndGgtdXBkYXRlLnBhdGNoIFwKKyAgICBmaWxlOi8vNjMwLXBhY2tldF9zb2NrZXRfdHlwZS5wYXRjaCBcCisgICAgZmlsZTovLzY0MC1uZXRmaWx0ZXItbmZfZmxvd190YWJsZS1hZGQtaGFyZHdhcmUtb2ZmbG9hZC1zdXBwb3J0LnBhdGNoIFwKKyAgICBmaWxlOi8vNjQxLW5ldGZpbHRlci1uZl9mbG93X3RhYmxlLXN1cHBvcnQtaHctb2ZmbG9hZC10aHJvdWdoLXYucGF0Y2ggXAorICAgIGZpbGU6Ly82NDItbmV0LTgwMjFxLXN1cHBvcnQtaGFyZHdhcmUtZmxvdy10YWJsZS1vZmZsb2FkLnBhdGNoIFwKKyAgICBmaWxlOi8vNjQzLW5ldC1icmlkZ2Utc3VwcG9ydC1oYXJkd2FyZS1mbG93LXRhYmxlLW9mZmxvYWQucGF0Y2ggXAorICAgIGZpbGU6Ly82NDQtbmV0LXBwcG9lLXN1cHBvcnQtaGFyZHdhcmUtZmxvdy10YWJsZS1vZmZsb2FkLnBhdGNoIFwKKyAgICBmaWxlOi8vNjQ1LW5ldGZpbHRlci1uZl9mbG93X3RhYmxlLXJld29yay1oYXJkd2FyZS1vZmZsb2FkLXRpbWUucGF0Y2ggXAorICAgIGZpbGU6Ly82NDYtbmV0ZmlsdGVyLW5mX2Zsb3dfdGFibGUtcmV3b3JrLXByaXZhdGUtZHJpdmVyLWRhdGEucGF0Y2ggXAorICAgIGZpbGU6Ly82NDctbmV0LWRzYS1zdXBwb3J0LWhhcmR3YXJlLWZsb3ctdGFibGUtb2ZmbG9hZC5wYXRjaCBcCisgICAgZmlsZTovLzY1NS1pbmNyZWFzZV9za2JfcGFkLnBhdGNoIFwKKyAgICBmaWxlOi8vNjY2LUFkZC1zdXBwb3J0LWZvci1NQVAtRS1GTVJzLW1lc2gtbW9kZS5wYXRjaCBcCisgICAgZmlsZTovLzY3MC1pcHY2LWFsbG93LXJlamVjdGluZy13aXRoLXNvdXJjZS1hZGRyZXNzLWZhaWxlZC1wb2xpY3kucGF0Y2ggXAorICAgIGZpbGU6Ly82NzEtbmV0LXByb3ZpZGUtZGVmaW5lcy1mb3ItX1BPTElDWV9GQUlMRUQtdW50aWwtYWxsLWNvZC5wYXRjaCBcCisgICAgZmlsZTovLzY4MC1ORVQtc2tpcC1HUk8tZm9yLWZvcmVpZ24tTUFDLWFkZHJlc3Nlcy5wYXRjaCBcCisgICAgZmlsZTovLzY4MS1ORVQtYWRkLW9mX2dldF9tYWNfYWRkcmVzc19tdGQucGF0Y2ggXAorICAgIGZpbGU6Ly83MDMtcGh5LWFkZC1kZXRhY2gtY2FsbGJhY2stdG8tc3RydWN0LXBoeV9kcml2ZXIucGF0Y2ggXAorICAgIGZpbGU6Ly83MzUtbmV0LXBoeS1hdDgwM3gtZml4LWF0ODAzMy1zZ21paS1tb2RlLnBhdGNoIFwKKyAgICBmaWxlOi8vNzM5LW5ldC1hdm9pZC10eC1mYXVsdC13aXRoLU5va2lhLUdQT04tbW9kdWxlLnBhdGNoIFwKKyAgICBmaWxlOi8vNzQwLW5ldC1zZnAtcmVtb3ZlLWluY29tcGxldGUtMTAwQkFTRS1GWC1hbmQtMTAwQkFTRS1MWC0ucGF0Y2ggXAorICAgIGZpbGU6Ly83NDEtbmV0LXNmcC1kZXJpdmUtaW50ZXJmYWNlLW1vZGUtZnJvbS1ldGh0b29sLWxpbmstbW9kZS5wYXRjaCBcCisgICAgZmlsZTovLzc0Mi1uZXQtc2ZwLWFkZC1tb3JlLWV4dGVuZGVkLWNvbXBsaWFuY2UtY29kZXMucGF0Y2ggXAorICAgIGZpbGU6Ly83NDMtbmV0LXNmcC1hZGQtbW9kdWxlLXN0YXJ0LXN0b3AtdXBzdHJlYW0tbm90aWZpY2F0aW9ucy5wYXRjaCBcCisgICAgZmlsZTovLzc0NC1uZXQtc2ZwLW1vdmUtcGh5X3N0YXJ0LXBoeV9zdG9wLXRvLXBoeWxpbmsucGF0Y2ggXAorICAgIGZpbGU6Ly83NDUtbmV0LW1kaW8taTJjLWFkZC1zdXBwb3J0LWZvci1DbGF1c2UtNDUtYWNjZXNzZXMucGF0Y2ggXAorICAgIGZpbGU6Ly83NDYtbmV0LXBoeWxpbmstcmUtc3BsaXQtX19waHlsaW5rX2Nvbm5lY3RfcGh5LnBhdGNoIFwKKyAgICBmaWxlOi8vNzQ3LW5ldC1waHlsaW5rLXN1cHBvcnQtQ2xhdXNlLTQ1LVBIWXMtb24tU0ZQLW1vZHVsZXMucGF0Y2ggXAorICAgIGZpbGU6Ly83NDgtbmV0LXBoeWxpbmstc3BsaXQtbGlua19hbl9tb2RlLWNvbmZpZ3VyZWQtYW5kLWN1cnJlbi5wYXRjaCBcCisgICAgZmlsZTovLzc0OS1uZXQtcGh5bGluay1zcGxpdC1waHlsaW5rX3NmcF9tb2R1bGVfaW5zZXJ0LnBhdGNoIFwKKyAgICBmaWxlOi8vNzUwLW5ldC1waHlsaW5rLWRlbGF5LU1BQy1jb25maWd1cmF0aW9uLWZvci1jb3BwZXItU0ZQLW0ucGF0Y2ggXAorICAgIGZpbGU6Ly83NTEtbmV0LXBoeWxpbmstbWFrZS1Ccm9hZGNvbS1CQ004NDg4MS1iYXNlZC1TRlBzLXdvcmsucGF0Y2ggXAorICAgIGZpbGU6Ly83NTItbmV0LXBoeS1hZGQtQnJvYWRjb20tQkNNODQ4ODEtUEhZLWRyaXZlci5wYXRjaCBcCisgICAgZmlsZTovLzc1My1uZXQtc2ZwLWFkZC1zdXBwb3J0LWZvci1DbGF1c2UtNDUtUEhZcy5wYXRjaCBcCisgICAgZmlsZTovLzc1NC1uZXQtc2ZwLWZpeC11bmJpbmQucGF0Y2ggXAorICAgIGZpbGU6Ly83NTUtbmV0LXNmcC1maXgtaHdtb24ucGF0Y2ggXAorICAgIGZpbGU6Ly83NTYtbmV0LXNmcC11c2UtYS1kZWZpbml0aW9uLWZvci10aGUtZmF1bHQtcmVjb3ZlcnktYXR0ZS5wYXRjaCBcCisgICAgZmlsZTovLzc1Ny1uZXQtc2ZwLXJlbmFtZS1zbV9yZXRyaWVzLnBhdGNoIFwKKyAgICBmaWxlOi8vNzU4LW5ldC1zZnAtZXJyb3ItaGFuZGxpbmctZm9yLXBoeS1wcm9iZS5wYXRjaCBcCisgICAgZmlsZTovLzc1OS1uZXQtc2ZwLXJlLWF0dGVtcHQtcHJvYmluZy1mb3ItcGh5LnBhdGNoIFwKKyAgICBmaWxlOi8vNzYwLW5ldC1kc2EtbXY4OGU2eHh4LWZpeC12bGFuLXNldHVwLnBhdGNoIFwKKyAgICBmaWxlOi8vNzYxLW5ldC1kc2EtbXQ3NTMwLVN1cHBvcnQtRUVFLWZlYXR1cmVzLnBhdGNoIFwKKyAgICBmaWxlOi8vNzYyLW5ldC1icmlkZ2Utc3dpdGNoZGV2LVJlZmFjdG9yLWJyX3N3aXRjaGRldl9mZGJfbm90aWYucGF0Y2ggXAorICAgIGZpbGU6Ly83NjMtbmV0LWJyaWRnZS1zd2l0Y2hkZXYtSW5jbHVkZS1sb2NhbC1mbGFnLWluLUZEQi1ub3RpZi5wYXRjaCBcCisgICAgZmlsZTovLzc2NC1uZXQtYnJpZGdlLXN3aXRjaGRldi1TZW5kLUZEQi1ub3RpZmljYXRpb25zLWZvci1ob3N0LnBhdGNoIFwKKyAgICBmaWxlOi8vNzY1LW5ldC1kc2EtSW5jbHVkZS1sb2NhbC1hZGRyZXNzZXMtaW4tYXNzaXN0ZWQtQ1BVLXBvcnQucGF0Y2ggXAorICAgIGZpbGU6Ly83NjYtbmV0LWRzYS1JbmNsdWRlLWJyaWRnZS1hZGRyZXNzZXMtaW4tYXNzaXN0ZWQtQ1BVLXBvci5wYXRjaCBcCisgICAgZmlsZTovLzc2Ny1uZXQtZHNhLVN5bmMtc3RhdGljLUZEQi1lbnRyaWVzLW9uLWZvcmVpZ24taW50ZXJmYWNlLnBhdGNoIFwKKyAgICBmaWxlOi8vNzY4LW5ldC1kc2EtbXY4OGU2eHh4LVJlcXVlc3QtYXNzaXN0ZWQtbGVhcm5pbmctb24tQ1BVLXBvcnQucGF0Y2ggXAorICAgIGZpbGU6Ly84MDAtYmNtYS1nZXQtU29DLWRldmljZS1zdHJ1Y3QtY29weS1pdHMtRE1BLXBhcmFtcy10by10aC5wYXRjaCBcCisgICAgZmlsZTovLzgxMC1wY2lfZGlzYWJsZV9jb21tb25fcXVpcmtzLnBhdGNoIFwKKyAgICBmaWxlOi8vODExLXBjaV9kaXNhYmxlX3VzYl9jb21tb25fcXVpcmtzLnBhdGNoIFwKKyAgICBmaWxlOi8vODIwLWxpYmF0YS1Bc3NpZ24tT0Ytbm9kZS10by10aGUtU0NTSS1kZXZpY2UucGF0Y2ggXAorICAgIGZpbGU6Ly84MzQtbGVkdHJpZy1saWJhdGEucGF0Y2ggXAorICAgIGZpbGU6Ly84NDAtaHdybmctYmNtMjgzNS1zZXQtcXVhbGl0eS10by0xMDAwLnBhdGNoIFwKKyAgICBmaWxlOi8vOTIwLW1hbmdsZV9ib290YXJncy5wYXRjaCBcCisgICAgIgpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybS9ib290L2R0cy9tdDc5ODYtY2xraXRnLmR0c2kgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtL2Jvb3QvZHRzL210Nzk4Ni1jbGtpdGcuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGI1NmYyCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybS9ib290L2R0cy9tdDc5ODYtY2xraXRnLmR0c2kKQEAgLTAsMCArMSwyNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTggTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBXZW56aGVuLll1IDxXZW56aGVuLll1QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworJmNsa2l0ZyB7CisJYnJpbmctdXAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGNsay1icmluZy11cCI7CisJCWNsb2NrcyA9CisJCQk8JmFwbWl4ZWRzeXMgQ0tfQVBNSVhFRF9BUk1QTEw+LAorCQkJPCZhcG1peGVkc3lzICBDS19BUE1JWEVEX05FVDJQTEw+LAorCQkJPCZhcG1peGVkc3lzICBDS19BUE1JWEVEX01NUExMPiwKKwkJCTwmYXBtaXhlZHN5cyAgQ0tfQVBNSVhFRF9TR01QTEw+LAorCQkJPCZhcG1peGVkc3lzICBDS19BUE1JWEVEX1dFRE1DVVBMTD4sCisJCQk8JmFwbWl4ZWRzeXMgIENLX0FQTUlYRURfTkVUMVBMTD4sCisJCQk8JmFwbWl4ZWRzeXMgIENLX0FQTUlYRURfTVBMTD4sCisJCQk8JmFwbWl4ZWRzeXMgIENLX0FQTUlYRURfQVBMTDI+LAorCQkJPCZpbmZyYWNmZyBDS19JTkZSQV9DS19GMjZNPiwKKwkJCTwmaW5mcmFjZmcgQ0tfSU5GUkFfVUFSVD4sCisJCQk8JmNsazQwbT4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX0kyQz4sCisJCQk8JmNsazQwbT4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX1BXTT4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBXzY2TV9NQ0s+LAorCQkJPCZpbmZyYWNmZyBDS19JTkZSQV9DS19GMzJLPiwKKwkJCTwmY2xrNDBtPiwKKwkJCTwmaW5mcmFjZmcgQ0tfSU5GUkFfUFdNX0JDSz4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX1BXTV9DSzE+LAorCQkJPCZpbmZyYWNmZyBDS19JTkZSQV9QV01fQ0syPiwKKwkJCTwmaW5mcmFjZmcgQ0tfSU5GUkFfMTMzTV9IQ0s+LAorCQkJPCZpbmZyYWNmZyBDS19JTkZSQV9FSVBfQ0s+LAorCQkJPCZpbmZyYWNmZyBDS19JTkZSQV82Nk1fUEhDSz4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX0ZBVURfTF9DSwk+LAorCQkJPCZpbmZyYWNmZyBDS19JTkZSQV9GQVVEX0FVRF9DSz4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX0ZBVURfRUcyX0NLPiwKKwkJCTwmaW5mcmFjZmcgQ0tfSU5GUkFfSTJDU19DSz4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX01VWF9VQVJUMD4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX01VWF9VQVJUMT4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX01VWF9VQVJUMj4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX05GSV9DSz4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX1NQSU5GSV9DSz4sCisJCQk8JmNsazQwbT4sCisJCQk8JmNsazQwbT4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX1JUQ18zMks+LAorCQkJPCZpbmZyYWNmZyBDS19JTkZSQV9GTVNEQ19DSz4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX0ZNU0RDX0hDS19DSz4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX1BFUklfMTMzTT4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBXzEzM01fUEhDSz4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX1VTQl9TWVNfQ0s+LAorCQkJPCZpbmZyYWNmZyBDS19JTkZSQV9VU0JfQ0s+LAorCQkJPCZpbmZyYWNmZyBDS19JTkZSQV9VU0JfWEhDSV9DSz4sCisJCQk8JmNsazQwbT4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX0YyNk1fQ0swPiwKKwkJCTwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfVUFSVDBfU0VMPiwKKwkJCTwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfVUFSVDFfU0VMPiwJCisJCQk8JmluZnJhY2ZnX2FvIENLX0lORlJBX1VBUlQyX1NFTD4sCisJCQk8JmNsazQwbT4sCisJCQk8JmNsazQwbT4sCisJCQk8JmluZnJhY2ZnX2FvIENLX0lORlJBX1BXTTFfU0VMPiwKKwkJCTwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfUFdNMl9TRUw+LAorCQkJPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9QV01fQlNFTD4sCisJCQk8JmNsazQwbT4sCisJCQk8JmNsazQwbT4sCisJCQk8JmluZnJhY2ZnX2FvIENLX0lORlJBX1BXTV9IQ0s+LAorCQkJPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9QV01fU1RBPiwKKwkJCTwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfUFdNMV9DSz4sCisJCQk8JmluZnJhY2ZnX2FvIENLX0lORlJBX1BXTTJfQ0s+LAorCQkJPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9DUV9ETUFfQ0s+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9EUkFNQ18yNk1fQ0s+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9BUF9ETUFfQ0s+LAorCQkJPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9TRUpfQ0s+LAorCQkJPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9TRUpfMTNNX0NLPiwKKwkJCTwmY2xrNDBtPiwKKwkJCTwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfSTJDT19DSz4sCisJCQk8JmluZnJhY2ZnX2FvIENLX0lORlJBX1VBUlQwX0NLPiwKKwkJCTwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfVUFSVDFfQ0s+LAorCQkJPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9VQVJUMl9DSz4sCisJCQk8JmNsazQwbT4sCisJCQk8JmNsazQwbT4sCisJCQk8JmNsazQwbT4sCisJCQk8JmNsazQwbT4sCisJCQk8JmNsazQwbT4sCisJCQk8JmNsazQwbT4sCisJCQk8JmNsazQwbT4sCisJCQk8JmluZnJhY2ZnX2FvIENLX0lORlJBX0ZSVENfQ0s+LAorCQkJPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9NU0RDX0NLPiwKKwkJCTwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfTVNEQ19IQ0tfQ0s+LAorCQkJPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9NU0RDXzEzM01fQ0s+LAorCQkJPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9NU0RDXzY2TV9DSz4sCisJCQk8JmNsazQwbT4sCisJCQk8JmNsazQwbT4sCisJCQk8JmluZnJhY2ZnX2FvIENLX0lORlJBX0ZCSVNUMkZQQ19DSz4sCisJCQk8JmluZnJhY2ZnX2FvIENLX0lORlJBX0lVU0JfMTMzX0NLPiwKKwkJCTwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfSVVTQl82Nk1fQ0s+LAorCQkJPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9JVVNCX1NZU19DSz4sCisJCQk8JmluZnJhY2ZnX2FvIENLX0lORlJBX0lVU0JfQ0s+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfQ0JfTV80MTZNPiwKKwkJCTwmY2xrNDBtPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0NCX01fRDQ+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfQ0JfTV9EOD4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9NX0Q4X0QyPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX01fRDNfRDI+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfQ0JfTU1fRDI+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfQ0JfTU1fRDQ+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfQ0JfTU1fRDg+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfTU1fRDhfRDI+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfTU1fRDNfRDg+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfQ0JfVTJfUEhZRF9DSz4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9DQl9BUExMMl8xOTZNPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0FQTEwyX0Q0PiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0NCX05FVDFfRDQ+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfQ0JfTkVUMV9ENT4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9ORVQxX0Q1X0QyPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX05FVDFfRDVfRDQ+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfTkVUMV9EOF9EMj4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9ORVQxX0Q4X0Q0PiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0NCX05FVDJfODAwTT4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9DQl9ORVQyX0Q0PiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX05FVDJfRDRfRDI+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfTkVUMl9EM19EMj4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9DQl9XRURNQ1VfNzYwTT4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9XRURNQ1VfRDVfRDIJPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0NCX1NHTV8zMjVNPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0NCX0NLU1FfNDBNX0QyPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0NCX1JUQ18zMks+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfQ0JfUlRDXzMyUDdLPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX05GSTFYPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX1VTQl9FUV9SWDI1ME0+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfVVNCX1RYMjUwTT4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9VU0JfTE4wX0NLPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX1VTQl9DRFJfQ0s+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfU1BJTkZJX0JDSz4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9JMkNfQkNLPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX1BFWFRQX1RMPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0VNTUNfMjUwTT4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9FTU1DXzQxNk0+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfRl8yNk1fQURDX0NLPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX1NZU0FYST4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9ORVRTWVNfV0VEX01DVT4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9ORVRTWVNfMlg+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfU0dNXzMyNU0+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfQTFTWVM+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfRUlQX0I+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfRjI2TT4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9BVURfTD4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9BX1RVTkVSPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX1UyVTNfUkVGPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX1UyVTNfU1lTPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX1UyVTNfWEhDST4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9BUDJDTk5fSE9TVD4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9ORkkxWF9TRUw+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfU1BJTkZJX1NFTD4sCisJCQk8JmNsazQwbT4sCisJCQk8JmNsazQwbT4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9VQVJUX1NFTD4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9QV01fU0VMPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0kyQ19TRUw+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfUEVYVFBfVExfU0VMPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0VNTUNfMjUwTV9TRUwJPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0VNTUNfNDE2TV9TRUwJPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0ZfMjZNX0FEQ19TRUw+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfRFJBTUNfU0VMPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0RSQU1DX01EMzJfU0VMPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX1NZU0FYSV9TRUw+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfU1lTQVBCX1NFTD4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9BUk1fREJfTUFJTl9TRUw+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfTkVUU1lTX1NFTD4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9ORVRTWVNfNTAwTV9TRUw+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfTkVUU1lTX01DVV9TRUw+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfTkVUU1lTXzJYX1NFTD4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9TR01fMzI1TV9TRUw+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfU0dNX1JFR19TRUw+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfQ09OTl9NQ1VTWVNfU0VMPiwKKwkJCTwmY2xrNDBtPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX1BDSUVfUEhZX1NFTD4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9VU0IzX1BIWV9TRUw+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfRjI2TV9TRUw+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfVTJVM19TRUw+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfVTJVM19TWVNfU0VMPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX1UyVTNfWEhDSV9TRUw+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfREFfVTJfUkVGU0VMPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0RBX1UyX0NLXzFQX1NFTD4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9BUDJDTk5fSE9TVF9TRUw+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+OworCisKKwkJY2xvY2stbmFtZXMgPSAiMCIsICIxIiwgIjIiLCAiMyIsICI0IiwgIjUiLCAiNiIsICI3IiwgIjgiLCAiOSIsICIxMCIsICIxMSIsCisJCSIxMiIsICIxMyIsICIxNCIsICIxNSIsICIxNiIsICIxNyIsICIxOCIsICIxOSIsICIyMCIsICIyMSIsICIyMiIsICIyMyIsCisJCSIyNCIsICIyNSIsICIyNiIsICIyNyIsICIyOCIsICIyOSIsICIzMCIsICIzMSIsICIzMiIsICIzMyIsICIzNCIsICIzNSIsCisJCSIzNiIsICIzNyIsICIzOCIsICIzOSIsICI0MCIsICI0MSIsICI0MiIsICI0MyIsICI0NCIsICI0NSIsICI0NiIsICI0NyIsCisJCSI0OCIsICI0OSIsICI1MCIsICI1MSIsICI1MiIsICI1MyIsICI1NCIsICI1NSIsICI1NiIsICI1NyIsICI1OCIsICI1OSIsCisJCSI2MCIsICI2MSIsICI2MiIsICI2MyIsICI2NCIsICI2NSIsICI2NiIsICI2NyIsICI2OCIsICI2OSIsICI3MCIsICI3MSIsCisJCSI3MiIsICI3MyIsICI3NCIsICI3NSIsICI3NiIsICI3NyIsICI3OCIsICI3OSIsICI4MCIsICI4MSIsICI4MiIsICI4MyIsCisJCSI4NCIsICI4NSIsICI4NiIsICI4NyIsICI4OCIsICI4OSIsICI5MCIsICI5MSIsICI5MiIsICI5MyIsICI5NCIsICI5NSIsCisJCSI5NiIsICI5NyIsICI5OCIsICI5OSIsICIxMDAiLCAiMTAxIiwgIjEwMiIsICIxMDMiLCAiMTA0IiwgIjEwNSIsICIxMDYiLCAiMTA3IiwKKwkJIjEwOCIsICIxMDkiLCAiMTEwIiwgIjExMSIsICIxMTIiLCAiMTEzIiwgIjExNCIsICIxMTUiLCAiMTE2IiwgIjExNyIsCisJCSIxMTgiLCAiMTE5IiwgIjEyMCIsICIxMjEiLCAiMTIyIiwgIjEyMyIsCisJCSIxMjQiLCAiMTI1IiwgIjEyNiIsICIxMjciLCAiMTI4IiwgIjEyOSIsICIxMzAiLCAiMTMxIiwgIjEzMiIsICIxMzMiLCAiMTM0IiwgIjEzNSIsCisJCSIxMzYiLCAiMTM3IiwgIjEzOCIsICIxMzkiLCAiMTQwIiwgIjE0MSIsICIxNDIiLCAiMTQzIiwgIjE0NCIsICIxNDUiLCAiMTQ2IiwgIjE0NyIsCisJCSIxNDgiLCAiMTQ5IiwgIjE1MCIsICIxNTEiLCAiMTUyIiwgIjE1MyIsICIxNTQiLCAiMTU1IiwgIjE1NiIsICIxNTciLCAiMTU4IiwgIjE1OSIsCisJCSIxNjAiLCAiMTYxIiwgIjE2MiIsICIxNjMiLCAiMTY0IiwgIjE2NSIsICIxNjYiLCAiMTY3IiwgIjE2OCIsICIxNjkiLCAiMTcwIiwgIjE3MSIsCisJCSIxNzIiLCAiMTczIiwgIjE3NCIsICIxNzUiLCAiMTc2IiwgIjE3NyIsICIxNzgiLCAiMTc5IiwgIjE4MCIsICIxODEiLCAiMTgyIiwgIjE4MyIsCisJCSIxODQiLCAiMTg1IiwgIjE4NiIsICIxODciLCAiMTg4IiwgIjE4OSIsICIxOTAiLCAiMTkxIiwgIjE5MiIsICIxOTMiLCAiMTk0IiwgIjE5NSIsCisJCSIxOTYiLCAiMTk3IiwgIjE5OCIsICIxOTkiLCAiMjAwIiwgIjIwMSIsICIyMDIiLCAiMjAzIiwgIjIwNCIsICIyMDUiLCAiMjA2IiwgIjIwNyIsCisJCSIyMDgiLCAiMjA5IiwgIjIxMCIsICIyMTEiLCAiMjEyIiwgIjIxMyIsICIyMTQiLCAiMjE1IiwgIjIxNiIsICIyMTciLCAiMjE4IiwgIjIxOSIsICIyMjAiLCAiMjIxIjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3OTg2LWZwZ2EtdWJpLmR0cyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3OTg2LWZwZ2EtdWJpLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjA0OTE4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybS9ib290L2R0cy9tdDc5ODYtZnBnYS11YmkuZHRzCkBAIC0wLDAgKzEsMTYzIEBACisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDc5ODYtZnBnYS5kdHNpIgorLyB7CisJbW9kZWwgPSAiTWVkaWFUZWsgTVQ3OTg2IEZQR0EgKFVCSSkiOworCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LWZwZ2EsdWJpIjsKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG4xIGxvZ2xldmVsPTggIFwKKwkJCQllYXJseWNvbj11YXJ0ODI1MCxtbWlvMzIsMHgxMTAwMjAwMCI7CisJfTsKKworCW1lbW9yeSB7CisJCS8vIGZwZ2EgZGRyMjogMTI4TUIqMgorCQlyZWcgPSA8MCAweDQwMDAwMDAwIDAgMHgxMDAwMDAwMD47CisJfTsKK307CisKKyZ1YXJ0MCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnNwaTAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzcGlfZmxhc2hfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworCXNwaV9ub3JAMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJqZWRlYyxzcGktbm9yIjsKKwkJcmVnID0gPDA+OworCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDw1MDAwMDA+OworCisJCXBhcnRpdGlvbkAwMDAwMCB7CisJCQlsYWJlbCA9ICJCTDIiOworCQkJcmVnID0gPDB4MDAwMDAgMHgwMDYwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDYwMDAwIHsKKwkJCWxhYmVsID0gInUtYm9vdC1lbnYiOworCQkJcmVnID0gPDB4NjAwMDAgMHgwMDEwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDcwMDAwIHsKKwkJCWxhYmVsID0gIkZhY3RvcnkiOworCQkJcmVnID0gPDB4NzAwMDAgMHgwMEIwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDEyMDAwMCB7CisJCQlsYWJlbCA9ICJCTDMxIjsKKwkJCXJlZyA9IDwweDEyMDAwMCAweDAwMTAwMDA+OworCQl9OworCQlwYXJ0aXRpb25AMTMwMDAwIHsKKwkJCWxhYmVsID0gInUtYm9vdCI7CisJCQlyZWcgPSA8MHgxMzAwMDAgMHgwMEQwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDIwMDAwMCB7CisJCQlsYWJlbCA9ICJmaXJtd2FyZSI7CisJCQlyZWcgPSA8MHgyMDAwMDAgMHhFMDAwMDA+OworCQl9OworCX07CisJc3BpX25hbmRAMSB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJzcGktbmFuZCI7CisJCXJlZyA9IDwxPjsKKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8NTAwMDAwPjsKKworCQlwYXJ0aXRpb25AMDAwMDAgeworCQkJbGFiZWwgPSAiQkwyIjsKKwkJCXJlZyA9IDwweDAwMDAwIDB4MDEwMDAwMD47CisJCX07CisJCXBhcnRpdGlvbkAxMDAwMDAgeworCQkJbGFiZWwgPSAidS1ib290LWVudiI7CisJCQlyZWcgPSA8MHgxMDAwMDAgMHgwMDgwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDE4MDAwMCB7CisJCQlsYWJlbCA9ICJGYWN0b3J5IjsKKwkJCXJlZyA9IDwweDE4MDAwMCAweDAwMjAwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDM4MDAwMCB7CisJCQlsYWJlbCA9ICJCTDMxIjsKKwkJCXJlZyA9IDwweDM4MDAwMCAweDAwODAwMDA+OworCQl9OworCQlwYXJ0aXRpb25ANDAwMDAwIHsKKwkJCWxhYmVsID0gInUtYm9vdCI7CisJCQlyZWcgPSA8MHg0MDAwMDAgMHgwMTgwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDU4MDAwMCB7CisJCQlsYWJlbCA9ICJmaXJtd2FyZSI7CisJCQlyZWcgPSA8MHg1ODAwMDAgMHg3YTgwMDAwPjsKKwkJfTsKKwl9OworfTsKKworJnNwaTEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJLyogcGluIHNoYXJlZCB3aXRoIHNuZmkgKi8KKwlwaW5jdHJsLTAgPSA8JnNwaWNfcGlucz47CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKKyZwaW8geworCXNwaV9mbGFzaF9waW5zOiBzcGkwLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiZmxhc2giOworCQkJZ3JvdXBzID0gInNwaTAiLCAic3BpMF93cF9ob2xkIjsKKwkJfTsKKwl9OworCisJc25maV9waW5zOiBzbmZpLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiZmxhc2giOworCQkJZ3JvdXBzID0gInNuZmkiOworCQl9OworCX07CisKKwlzcGljX3BpbnM6IHNwaTEtcGlucyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJzcGkiOworCQkJZ3JvdXBzID0gInNwaTFfMSI7CisJCX07CisJfTsKK307CisKKyZ3YXRjaGRvZyB7CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKKyZzbmFuZCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkvKiBwaW4gc2hhcmVkIHdpdGggc3BpYyAqLworCXBpbmN0cmwtMCA9IDwmc25maV9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7CisJbWVkaWF0ZWsscXVhZC1zcGk7CisKKwlwYXJ0aXRpb25zIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1wYXJ0aXRpb25zIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCisJCXBhcnRpdGlvbkAwIHsKKwkJCWxhYmVsID0gIkJMMiI7CisJCQlyZWcgPSA8MHgwMDAwMCAweDAxMDAwMDA+OworCQkJcmVhZC1vbmx5OworCQl9OworCisJCXBhcnRpdGlvbkAxMDAwMDAgeworCQkJbGFiZWwgPSAidS1ib290LWVudiI7CisJCQlyZWcgPSA8MHgwMTAwMDAwIDB4MDA4MDAwMD47CisJCX07CisKKwkJcGFydGl0aW9uQDE4MDAwMCB7CisJCQlsYWJlbCA9ICJGYWN0b3J5IjsKKwkJCXJlZyA9IDwweDE4MDAwMCAweDAyMDAwMDA+OworCQl9OworCisJCXBhcnRpdGlvbkAzODAwMDAgeworCQkJbGFiZWwgPSAiRklQIjsKKwkJCXJlZyA9IDwweDM4MDAwMCAweDAyMDAwMDA+OworCQl9OworCisJCXBhcnRpdGlvbkA1ODAwMDAgeworCQkJbGFiZWwgPSAidWJpIjsKKwkJCXJlZyA9IDwweDU4MDAwMCAweDQwMDAwMDA+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybS9ib290L2R0cy9tdDc5ODYtZnBnYS5kdHMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtL2Jvb3QvZHRzL210Nzk4Ni1mcGdhLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2Y5M2MwCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybS9ib290L2R0cy9tdDc5ODYtZnBnYS5kdHMKQEAgLTAsMCArMSwxNjMgQEAKKy9kdHMtdjEvOworI2luY2x1ZGUgIm10Nzk4Ni1mcGdhLmR0c2kiCisvIHsKKwltb2RlbCA9ICJNZWRpYVRlayBNVDc5ODYgRlBHQSI7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtZnBnYSI7CisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDBuMSBsb2dsZXZlbD04ICBcCisJCQkJZWFybHljb249dWFydDgyNTAsbW1pbzMyLDB4MTEwMDIwMDAiOworCX07CisKKwltZW1vcnkgeworCQkvLyBmcGdhIGRkcjI6IDEyOE1CKjIKKwkJcmVnID0gPDAgMHg0MDAwMDAwMCAwIDB4MTAwMDAwMDA+OworCX07Cit9OworCismdWFydDAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZzcGkwIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc3BpX2ZsYXNoX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKKwlzcGlfbm9yQDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiamVkZWMsc3BpLW5vciI7CisJCXJlZyA9IDwwPjsKKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8NTAwMDAwPjsKKworCQlwYXJ0aXRpb25AMDAwMDAgeworCQkJbGFiZWwgPSAiQkwyIjsKKwkJCXJlZyA9IDwweDAwMDAwIDB4MDA2MDAwMD47CisJCX07CisJCXBhcnRpdGlvbkA2MDAwMCB7CisJCQlsYWJlbCA9ICJ1LWJvb3QtZW52IjsKKwkJCXJlZyA9IDwweDYwMDAwIDB4MDAxMDAwMD47CisJCX07CisJCXBhcnRpdGlvbkA3MDAwMCB7CisJCQlsYWJlbCA9ICJGYWN0b3J5IjsKKwkJCXJlZyA9IDwweDcwMDAwIDB4MDBCMDAwMD47CisJCX07CisJCXBhcnRpdGlvbkAxMjAwMDAgeworCQkJbGFiZWwgPSAiQkwzMSI7CisJCQlyZWcgPSA8MHgxMjAwMDAgMHgwMDEwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDEzMDAwMCB7CisJCQlsYWJlbCA9ICJ1LWJvb3QiOworCQkJcmVnID0gPDB4MTMwMDAwIDB4MDBEMDAwMD47CisJCX07CisJCXBhcnRpdGlvbkAyMDAwMDAgeworCQkJbGFiZWwgPSAiZmlybXdhcmUiOworCQkJcmVnID0gPDB4MjAwMDAwIDB4RTAwMDAwPjsKKwkJfTsKKwl9OworCXNwaV9uYW5kQDEgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAic3BpLW5hbmQiOworCQlyZWcgPSA8MT47CisJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDUwMDAwMD47CisKKwkJcGFydGl0aW9uQDAwMDAwIHsKKwkJCWxhYmVsID0gIkJMMiI7CisJCQlyZWcgPSA8MHgwMDAwMCAweDAxMDAwMDA+OworCQl9OworCQlwYXJ0aXRpb25AMTAwMDAwIHsKKwkJCWxhYmVsID0gInUtYm9vdC1lbnYiOworCQkJcmVnID0gPDB4MTAwMDAwIDB4MDA4MDAwMD47CisJCX07CisJCXBhcnRpdGlvbkAxODAwMDAgeworCQkJbGFiZWwgPSAiRmFjdG9yeSI7CisJCQlyZWcgPSA8MHgxODAwMDAgMHgwMDIwMDAwMD47CisJCX07CisJCXBhcnRpdGlvbkAzODAwMDAgeworCQkJbGFiZWwgPSAiQkwzMSI7CisJCQlyZWcgPSA8MHgzODAwMDAgMHgwMDgwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDQwMDAwMCB7CisJCQlsYWJlbCA9ICJ1LWJvb3QiOworCQkJcmVnID0gPDB4NDAwMDAwIDB4MDE4MDAwMD47CisJCX07CisJCXBhcnRpdGlvbkA1ODAwMDAgeworCQkJbGFiZWwgPSAiZmlybXdhcmUiOworCQkJcmVnID0gPDB4NTgwMDAwIDB4N2E4MDAwMD47CisJCX07CisJfTsKK307CisKKyZzcGkxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCS8qIHBpbiBzaGFyZWQgd2l0aCBzbmZpICovCisJcGluY3RybC0wID0gPCZzcGljX3BpbnM+OworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCismcGlvIHsKKwlzcGlfZmxhc2hfcGluczogc3BpMC1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJzcGkwIiwgInNwaTBfd3BfaG9sZCI7CisJCX07CisJfTsKKworCXNuZmlfcGluczogc25maS1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJzbmZpIjsKKwkJfTsKKwl9OworCisJc3BpY19waW5zOiBzcGkxLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAic3BpIjsKKwkJCWdyb3VwcyA9ICJzcGkxXzEiOworCQl9OworCX07Cit9OworCismd2F0Y2hkb2cgeworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCismc25hbmQgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJLyogcGluIHNoYXJlZCB3aXRoIHNwaWMgKi8KKwlwaW5jdHJsLTAgPSA8JnNuZmlfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworCW1lZGlhdGVrLHF1YWQtc3BpOworCisJcGFydGl0aW9ucyB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtcGFydGl0aW9ucyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQlwYXJ0aXRpb25AMCB7CisJCQlsYWJlbCA9ICJCTDIiOworCQkJcmVnID0gPDB4MDAwMDAgMHgwMDgwMDAwPjsKKwkJCXJlYWQtb25seTsKKwkJfTsKKworCQlwYXJ0aXRpb25AODAwMDAgeworCQkJbGFiZWwgPSAiRklQIjsKKwkJCXJlZyA9IDwweDgwMDAwIDB4MDIwMDAwMD47CisJCX07CisKKwkJcGFydGl0aW9uQDI4MDAwMCB7CisJCQlsYWJlbCA9ICJ1LWJvb3QtZW52IjsKKwkJCXJlZyA9IDwweDI4MDAwMCAweDAwODAwMDA+OworCQl9OworCisJCXBhcnRpdGlvbkAzMDAwMDAgeworCQkJbGFiZWwgPSAiRmFjdG9yeSI7CisJCQlyZWcgPSA8MHgzMDAwMDAgMHgwMDgwMDAwPjsKKwkJfTsKKworCQlwYXJ0aXRpb25AMzgwMDAwIHsKKwkJCWxhYmVsID0gImZpcm13YXJlIjsKKwkJCXJlZyA9IDwweDM4MDAwMCAweDdjMDAwMDA+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybS9ib290L2R0cy9tdDc5ODYtZnBnYS5kdHNpIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybS9ib290L2R0cy9tdDc5ODYtZnBnYS5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYTAyMzQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtL2Jvb3QvZHRzL210Nzk4Ni1mcGdhLmR0c2kKQEAgLTAsMCArMSw0MjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMjAgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBTYW0uU2hpaCA8c2FtLnNoaWhAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvYXJtLWdpYy5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3BoeS9waHkuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9yZXNldC90aS1zeXNjb24uaD4KKy8geworCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LWZwZ2EiOworCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJI3NpemUtY2VsbHMgPSA8Mj47CisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJY3B1QDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNTMiOworCQkJZW5hYmxlLW1ldGhvZCA9ICJwc2NpIjsKKwkJCXJlZyA9IDwweDA+OworCQl9OworCisJCWNwdUAxIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTUzIjsKKwkJCWVuYWJsZS1tZXRob2QgPSAicHNjaSI7CisJCQlyZWcgPSA8MHgxPjsKKwkJfTsKKwl9OworCisJd2VkOiB3ZWRAMTUwMTAwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLHdlZCI7CisJCXdlZF9udW0gPSA8Mj47CisJCS8qIGFkZCB0aGlzIHByb3BlcnR5IGZvciB3ZWQgZ2V0IHRoZSBwY2kgc2xvdCBudW1iZXIuICovCisJCXBjaV9zbG90X21hcCA9IDwwPiwgPDE+OworCQlyZWcgPSA8MCAweDE1MDEwMDAwIDAgMHgxMDAwPiwKKwkJICAgICAgPDAgMHgxNTAxMTAwMCAwIDB4MTAwMD47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyMDUgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDxHSUNfU1BJIDIwNiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwl9OworCisJd2VkMjogd2VkMkAxNTAxMTAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssd2VkMiI7CisJCXdlZF9udW0gPSA8Mj47CisJCXJlZyA9IDwwIDB4MTUwMTAwMDAgMCAweDEwMDA+LAorCQkgICAgICA8MCAweDE1MDExMDAwIDAgMHgxMDAwPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDIwNSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPEdJQ19TUEkgMjA2IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCX07CisKKwl3ZG1hOiB3ZG1hQDE1MTA0ODAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayx3ZWQtd2RtYSI7CisJCXJlZyA9IDwwIDB4MTUxMDQ4MDAgMCAweDQwMD4sCisJCSAgICAgIDwwIDB4MTUxMDRjMDAgMCAweDQwMD47CisJfTsKKworCWFwMndvY2NpZjogYXAyd29jY2lmQDE1MUE1MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxhcDJ3b2NjaWYiOworCQlyZWcgPSA8MCAweDE1MUE1MDAwIDAgMHgxMDAwPiwKKwkJICAgICAgPDAgMHgxNTFBRDAwMCAwIDB4MTAwMD47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyMTEgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDxHSUNfU1BJIDIxMiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKyAgICAgICAgfTsKKworCXdvY3B1MF9pbG06IHdvY3B1MF9pbG1AMTUxRTAwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLHdvY3B1MF9pbG0iOworCQlyZWcgPSA8MCAweDE1MUUwMDAwIDAgMHg4MDAwPjsKKwl9OworCisgICAgICAgIHdvY3B1MV9pbG06IHdvY3B1MV9pbG1AMTUxRjAwMDAgeworICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAibWVkaWF0ZWssd29jcHUxX2lsbSI7CisgICAgICAgICAgICAgICAgcmVnID0gPDAgMHgxNTFGMDAwMCAwIDB4ODAwMD47CisgICAgICAgIH07CisKKwl3b2NwdV9kbG06IHdvY3B1X2RsbUAxNTFFODAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssd29jcHVfZGxtIjsKKwkJcmVnID0gPDAgMHgxNTFFODAwMCAwIDB4MjAwMD4sCisJCSAgICAgIDwwIDB4MTUxRjgwMDAgMCAweDIwMDA+OworCisJCXJlc2V0cyA9IDwmZXRoc3lzcnN0IDA+OworCQlyZXNldC1uYW1lcyA9ICJ3b2NwdV9yc3QiOworCX07CisKKwljcHVfYm9vdDogd29jcHVfYm9vdEAxNTE5NDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssd29jcHVfYm9vdCI7CisJCXJlZyA9IDwwIDB4MTUxOTQwMDAgMCAweDEwMDA+OworCX07CisKKwlyZXNlcnZlZC1tZW1vcnkgeworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCXJhbmdlczsKKworCQkvKiAxOTIgS2lCIHJlc2VydmVkIGZvciBBUk0gVHJ1c3RlZCBGaXJtd2FyZSAoQkwzMSkgKi8KKwkJc2VjbW9uX3Jlc2VydmVkOiBzZWNtb25ANDMwMDAwMDAgeworCQkJcmVnID0gPDAgMHg0MzAwMDAwMCAwIDB4MzAwMDA+OworCQkJbm8tbWFwOworCQl9OworCisJCXdtY3B1X2VtaTogd21jcHUtcmVzZXJ2ZWRANEZDMDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayx3bWNwdS1yZXNlcnZlZCI7CisJCQluby1tYXA7CisJCQlyZWcgPSA8MCAweDRGQzAwMDAwIDAgMHgwMDEwMDAwMD47CisJCX07CisKKwkJd29jcHUwX2VtaTogd29jcHUwX2VtaUA0RkQwMDAwMCB7CisJCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLHdvY3B1MF9lbWkiOworCQkJbm8tbWFwOworCQkJcmVnID0gPDAgMHg0RkQwMDAwMCAwIDB4NDAwMDA+OworCQkJc2hhcmVkID0gPDA+OworCQl9OworCisJCXdvY3B1MV9lbWk6IHdvY3B1MV9lbWlANEZEODAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayx3b2NwdTFfZW1pIjsKKwkJCW5vLW1hcDsKKwkJCXJlZyA9IDwwIDB4NEZENDAwMDAgMCAweDQwMDAwPjsKKwkJCXNoYXJlZCA9IDwwPjsKKwkJfTsKKworCQl3b2NwdV9kYXRhOiB3b2NwdV9kYXRhQDRGRTAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssd29jcHVfZGF0YSI7CisJCQluby1tYXA7CisJCQlyZWcgPSA8MCAweDRGRDgwMDAwIDAgMHgyMDAwMDA+OworCQkJc2hhcmVkID0gPDE+OworCQl9OworCX07CisKKwlwc2NpIHsKKwkJY29tcGF0aWJsZSAgPSAiYXJtLHBzY2ktMC4yIjsKKwkJbWV0aG9kICAgICAgPSAic21jIjsKKwl9OworCisJc3lzdGVtX2NsazogZHVtbXkxM20geworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEzMDAwMDAwPjsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCX07CisKKwlydGNfY2xrOiBkdW1teTMyayB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQljbG9jay1mcmVxdWVuY3kgPSA8MzIwMDA+OworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJfTsKKworCXVhcnRfY2xrOiBkdW1teTEybSB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQljbG9jay1mcmVxdWVuY3kgPSA8MTIwMDAwMDA+OworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJfTsKKworCWdwdF9jbGs6IGR1bW15Nm0geworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDYwMDAwMDA+OworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJfTsKKworCXRpbWVyIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0sYXJtdjgtdGltZXIiOworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MTIwMDAwMDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19QUEkgMTMgSVJRX1RZUEVfTEVWRUxfTE9XPiwKKwkJCSAgICAgPEdJQ19QUEkgMTQgSVJRX1RZUEVfTEVWRUxfTE9XPiwKKwkJCSAgICAgPEdJQ19QUEkgMTEgSVJRX1RZUEVfTEVWRUxfTE9XPiwKKwkJCSAgICAgPEdJQ19QUEkgMTAgSVJRX1RZUEVfTEVWRUxfTE9XPjsKKworCX07CisKKwl3YXRjaGRvZzogd2F0Y2hkb2dAMTAwMWMwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzYyMi13ZHQiLAorCQkJICAgICAibWVkaWF0ZWssbXQ2NTg5LXdkdCI7CisJCXJlZyA9IDwwIDB4MTAwMWMwMDAgMCAweDEwMDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTEwIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkjcmVzZXQtY2VsbHMgPSA8MT47CisJfTsKKworCWdpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJAYzAwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAiYXJtLGdpYy12MyI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisJCWludGVycnVwdC1jb250cm9sbGVyOworCQlyZWcgPSA8MCAweDBjMDAwMDAwIDAgMHg0MDAwMD4sICAvKiBHSUNEICovCisJCSAgICAgIDwwIDB4MGMwODAwMDAgMCAweDIwMDAwMD47IC8qIEdJQ1IgKi8KKworCQlpbnRlcnJ1cHRzID0gPEdJQ19QUEkgOSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwl9OworCisJdWFydDA6IHNlcmlhbEAxMTAwMjAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXVhcnQiLAorCQkJICAgICAibWVkaWF0ZWssbXQ2NTc3LXVhcnQiOworCQlyZWcgPSA8MCAweDExMDAyMDAwIDAgMHg0MDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTIzIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8JnVhcnRfY2xrPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJdWFydDE6IHNlcmlhbEAxMTAwMzAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXVhcnQiLAorCQkJICAgICAibWVkaWF0ZWssbXQ2NTc3LXVhcnQiOworCQlyZWcgPSA8MCAweDExMDAzMDAwIDAgMHg0MDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTI0IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8JnVhcnRfY2xrPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJdWFydDI6IHNlcmlhbEAxMTAwNDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXVhcnQiLAorCQkJICAgICAibWVkaWF0ZWssbXQ2NTc3LXVhcnQiOworCQlyZWcgPSA8MCAweDExMDA0MDAwIDAgMHg0MDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTI1IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8JnVhcnRfY2xrPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJcGNpZTogcGNpZUAxMTI4MDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXBjaWUiOworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQlyZWcgPSA8MCAweDExMjgwMDAwIDAgMHg1MDAwPjsKKwkJcmVnLW5hbWVzID0gInBvcnQwIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTY4IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQlidXMtcmFuZ2UgPSA8MHgwMCAweGZmPjsKKwkJcmFuZ2VzID0gPDB4ODIwMDAwMDAgMCAweDIwMDAwMDAwCisJCQkgIDB4MCAweDIwMDAwMDAwIDAgMHgxMDAwMDAwMD47CisKKwkJcGNpZTA6IHBjaWVAMCwwIHsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlyZWcgPSA8MHgwMDAwIDAgMCAwIDA+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCXJhbmdlczsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MCAwIDAgNz47CisJCQlpbnRlcnJ1cHQtbWFwID0gPDAgMCAwIDEgJnBjaWVfaW50YzAgMD4sCisJCQkJCTwwIDAgMCAyICZwY2llX2ludGMwIDE+LAorCQkJCQk8MCAwIDAgMyAmcGNpZV9pbnRjMCAyPiwKKwkJCQkJPDAgMCAwIDQgJnBjaWVfaW50YzAgMz47CisJCQlwY2llX2ludGMwOiBpbnRlcnJ1cHQtY29udHJvbGxlciB7CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCX07CisJCX07CisJfTsKKworCXBpbzogcGluY3RybEAxMDAxZjAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXBpbmN0cmwiOworCQlyZWcgPSA8MCAweDEwMDFmMDAwIDAgMHgxMDAwPiwKKwkJICAgICAgPDAgMHgxMWMzMDAwMCAwIDB4MTAwMD4sCisgICAgICAgICAgICAgICAgICAgICAgPDAgMHgxMWM0MDAwMCAwIDB4MTAwMD4sCisgICAgICAgICAgICAgICAgICAgICAgPDAgMHgxMWUyMDAwMCAwIDB4MTAwMD4sCisgICAgICAgICAgICAgICAgICAgICAgPDAgMHgxMWUzMDAwMCAwIDB4MTAwMD4sCisgICAgICAgICAgICAgICAgICAgICAgPDAgMHgxMWYwMDAwMCAwIDB4MTAwMD4sCisgICAgICAgICAgICAgICAgICAgICAgPDAgMHgxMWYxMDAwMCAwIDB4MTAwMD4sCisJCSAgICAgIDwwIDB4MTAwMGIwMDAgMCAweDEwMDA+OworCQlyZWctbmFtZXMgPSAiZ3Bpb19iYXNlIiwgImlvY2ZnX3J0X2Jhc2UiLCAiaW9jZmdfcmJfYmFzZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlvY2ZnX2x0X2Jhc2UiLCAiaW9jZmdfbGJfYmFzZSIsICJpb2NmZ190cl9iYXNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW9jZmdfdGxfYmFzZSIsICJlaW50IjsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJZ3Bpby1yYW5nZXMgPSA8JnBpbyAwIDAgMTAwPjsKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyMjUgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworICAgICAgICBldGhzeXM6IHN5c2NvbkAxNTAwMDAwMCB7CisgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSA8MT47CisgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSA8MT47CisgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtZXRoc3lzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN5c2NvbiI7CisgICAgICAgICAgICAgICAgcmVnID0gPDAgMHgxNTAwMDAwMCAwIDB4MTAwMD47CisgICAgICAgICAgICAgICAgI2Nsb2NrLWNlbGxzID0gPDE+OworICAgICAgICAgICAgICAgICNyZXNldC1jZWxscyA9IDwxPjsKKworCQlldGhzeXNyc3Q6IHJlc2V0LWNvbnRyb2xsZXIgeworCQkJY29tcGF0aWJsZSA9ICJ0aSxzeXNjb24tcmVzZXQiOworCQkJI3Jlc2V0LWNlbGxzID0gPDE+OworCQkJdGkscmVzZXQtYml0cyA9IDwweDM0IDQgMHgzNCA0IDB4MzQgNCAoQVNTRVJUX1NFVCB8IERFQVNTRVJUX0NMRUFSIHwgU1RBVFVTX1NFVCk+OworCQl9OworICAgICAgICB9OworCisgICAgICAgIGV0aDogZXRoZXJuZXRAMTUxMDAwMDAgeworICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LWV0aCI7CisgICAgICAgICAgICAgICAgcmVnID0gPDAgMHgxNTEwMDAwMCAwIDB4ODAwMDA+OworICAgICAgICAgICAgICAgIGludGVycnVwdHMgPSA8R0lDX1NQSSAxOTYgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxHSUNfU1BJIDE5NyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEdJQ19TUEkgMTk4IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8R0lDX1NQSSAxOTkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisgICAgICAgICAgICAgICAgbWVkaWF0ZWssZXRoc3lzID0gPCZldGhzeXM+OworICAgICAgICAgICAgICAgICNyZXNldC1jZWxscyA9IDwxPjsKKyAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IDwxPjsKKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IDwwPjsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSAiZGlzYWJsZWQiOworICAgICAgICB9OworCisJc25hbmQ6IHNuZmlAMTEwMDUwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni1zbmFuZCI7CisJCXJlZyA9IDwwIDB4MTEwMDUwMDAgMCAweDEwMDA+LCA8MCAweDExMDA2MDAwIDAgMHgxMDAwPjsKKwkJcmVnLW5hbWVzID0gIm5maSIsICJlY2MiOworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTIxIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8JnN5c3RlbV9jbGs+LAorCQkJIDwmc3lzdGVtX2Nsaz4sCisJCQkgPCZzeXN0ZW1fY2xrPjsKKwkJY2xvY2stbmFtZXMgPSAibmZpX2NsayIsICJwYWRfY2xrIiwgImVjY19jbGsiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXdlZF9wY2llOiB3ZWRfcGNpZUAxMDAwMzAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssd2VkX3BjaWUiOworCQlyZWcgPSA8MCAweDEwMDAzMDAwIDAgMHgxMD47CisJfTsKKworCXdic3lzOiB3YnN5c0AxODAwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssd2JzeXMiOworCQlyZWcgPSA8MCAweDE4MDAwMDAwIDAgIDB4MTAwMDAwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyMTMgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJCSA8R0lDX1NQSSAyMTQgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJCSA8R0lDX1NQSSAyMTUgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJCSA8R0lDX1NQSSAyMTYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNoaXBfaWQgPSA8MHg3OTg2PjsKKwl9OworCisJc3BpMDogc3BpQDExMDBhMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxpcG0tc3BpIjsKKwkJcmVnID0gPDAgMHgxMTAwYTAwMCAwIDB4MTAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE0MCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJc3BpMTogc3BpQDExMDBiMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxpcG0tc3BpIjsKKwkJcmVnID0gPDAgMHgxMTAwYjAwMCAwIDB4MTAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE0MSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJYXV4YWRjOiBhZGNAMTEwMGQwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni1hdXhhZGMiLAorCQkJICAgICAibWVkaWF0ZWssbXQ3NjIyLWF1eGFkYyI7CisJCXJlZyA9IDwwIDB4MTEwMGQwMDAgMCAweDEwMDA+OworCQljbG9ja3MgPSA8JnN5c3RlbV9jbGs+OworCQljbG9jay1uYW1lcyA9ICJtYWluIjsKKwkJI2lvLWNoYW5uZWwtY2VsbHMgPSA8MT47CisgICAgICAgIH07CisKKwljb25zeXM6IGNvbnN5c0AxMDAwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LWNvbnN5cyI7CisJCXJlZyA9IDwwIDB4MTAwMDAwMDAgMCAweDg2MDAwMDA+OworCQltZW1vcnktcmVnaW9uID0gPCZ3bWNwdV9lbWk+OworCX07CisKKwl4aGNpOiB4aGNpQDExMjAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYteGhjaSIsCisJCQkgICAgICJtZWRpYXRlayxtdGsteGhjaSI7CisJCXJlZyA9IDwwIDB4MTEyMDAwMDAgMCAweDJlMDA+LAorCQkgICAgICA8MCAweDExMjAzZTAwIDAgMHgwMTAwPjsKKwkJcmVnLW5hbWVzID0gIm1hYyIsICJpcHBjIjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE3MyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJcGh5cyA9IDwmdTJwb3J0MCBQSFlfVFlQRV9VU0IyPjsKKwkJY2xvY2tzID0gPCZzeXN0ZW1fY2xrPiwKKwkJICAgICAgICAgPCZzeXN0ZW1fY2xrPiwKKwkJCSA8JnN5c3RlbV9jbGs+LAorCQkJIDwmc3lzdGVtX2Nsaz4sCisJCQkgPCZzeXN0ZW1fY2xrPjsKKwkJY2xvY2stbmFtZXMgPSAic3lzX2NrIiwKKwkJCSAgICAgICJ4aGNpX2NrIiwKKwkJCSAgICAgICJyZWZfY2siLAorCQkJICAgICAgIm1jdV9jayIsCisJCQkgICAgICAiZG1hX2NrIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQltZWRpYXRlayx1M3AtZGlzLW1zaz08MHgwMT47CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworCisJdXNidHBoeTogdXNiLXBoeUAxMTIwM2UwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssYTYwODEwLXUycGh5IiwKKwkJCSAgICAgIm1lZGlhdGVrLGE2MDkzMS11M3BoeSIsCisJCQkgICAgICJtZWRpYXRlayxhNjB4eHgtdXNicGh5IjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQlyYW5nZXM7CisJCXN0YXR1cyA9ICJva2F5IjsKKworCQl1MnBvcnQwOiB1c2ItcGh5QDExMjAzZWQwIHsKKwkJCXJlZyA9IDwwIDB4MTEyMDNlZDAgMCAweDAwOD47CisJCQljbG9ja3MgPSA8JnN5c3RlbV9jbGs+OworCQkJY2xvY2stbmFtZXMgPSAicmVmIjsKKwkJCSNwaHktY2VsbHMgPSA8MT47CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJdTNwb3J0MDogdXNiLXBoeUAxMTIwM2VkOCB7CisJCQlyZWcgPSA8MCAweDExMjAzZWQ4IDAgMHgwMDg+OworCQkJY2xvY2tzID0gPCZzeXN0ZW1fY2xrPjsKKwkJCWNsb2NrLW5hbWVzID0gInJlZiI7CisJCQkjcGh5LWNlbGxzID0gPDE+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQl1MnBvcnQxOiB1c2ItcGh5QDExMjAzZWUwIHsKKwkJCXJlZyA9IDwwIDB4MTEyMDNlZTAgMCAweDAwOD47CisJCQljbG9ja3MgPSA8JnN5c3RlbV9jbGs+OworCQkJY2xvY2stbmFtZXMgPSAicmVmIjsKKwkJCSNwaHktY2VsbHMgPSA8MT47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybS9ib290L2R0cy9tdDc5ODYtc25maS1uYW5kLXBhcnRpdGlvbi5kdHNpIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybS9ib290L2R0cy9tdDc5ODYtc25maS1uYW5kLXBhcnRpdGlvbi5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OGUxYzEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtL2Jvb3QvZHRzL210Nzk4Ni1zbmZpLW5hbmQtcGFydGl0aW9uLmR0c2kKQEAgLTAsMCArMSw0NCBAQAorLyB7CisJbm1ibV9zbmZpIHsKKwkJY29tcGF0aWJsZSA9ICJnZW5lcmljLG5tYm0iOworCisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQlsb3dlci1tdGQtZGV2aWNlID0gPCZzbmFuZD47CisJCWZvcmNlZC1jcmVhdGU7CisJCWVtcHR5LXBhZ2UtZWNjLXByb3RlY3RlZDsKKworCQlwYXJ0aXRpb25zIHsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtcGFydGl0aW9ucyI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCisJCQlwYXJ0aXRpb25AMCB7CisJCQkJbGFiZWwgPSAiQkwyIjsKKwkJCQlyZWcgPSA8MHgwMDAwMCAweDAxMDAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisKKwkJCXBhcnRpdGlvbkAxMDAwMDAgeworCQkJCWxhYmVsID0gInUtYm9vdC1lbnYiOworCQkJCXJlZyA9IDwweDAxMDAwMDAgMHgwMDgwMDAwPjsKKwkJCX07CisKKwkJCWZhY3Rvcnk6IHBhcnRpdGlvbkAxODAwMDAgeworCQkJCWxhYmVsID0gIkZhY3RvcnkiOworCQkJCXJlZyA9IDwweDE4MDAwMCAweDAyMDAwMDA+OworCQkJfTsKKworCQkJcGFydGl0aW9uQDM4MDAwMCB7CisJCQkJbGFiZWwgPSAiRklQIjsKKwkJCQlyZWcgPSA8MHgzODAwMDAgMHgwMjAwMDAwPjsKKwkJCX07CisKKwkJCXBhcnRpdGlvbkA1ODAwMDAgeworCQkJCWxhYmVsID0gInViaSI7CisJCQkJcmVnID0gPDB4NTgwMDAwIDB4NDAwMDAwMD47CisJCQl9OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybS9ib290L2R0cy9tdDc5ODYtc3BpbS1uYW5kLXBhcnRpdGlvbi5kdHNpIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybS9ib290L2R0cy9tdDc5ODYtc3BpbS1uYW5kLXBhcnRpdGlvbi5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYzc5NjEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtL2Jvb3QvZHRzL210Nzk4Ni1zcGltLW5hbmQtcGFydGl0aW9uLmR0c2kKQEAgLTAsMCArMSw0MyBAQAorLyB7CisJbm1ibV9zcGltX25hbmQgeworCQljb21wYXRpYmxlID0gImdlbmVyaWMsbm1ibSI7CisKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCisJCWxvd2VyLW10ZC1kZXZpY2UgPSA8JnNwaV9uYW5kPjsKKwkJZm9yY2VkLWNyZWF0ZTsKKworCQlwYXJ0aXRpb25zIHsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtcGFydGl0aW9ucyI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCisJCQlwYXJ0aXRpb25AMCB7CisJCQkJbGFiZWwgPSAiQkwyIjsKKwkJCQlyZWcgPSA8MHgwMDAwMCAweDAxMDAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisKKwkJCXBhcnRpdGlvbkAxMDAwMDAgeworCQkJCWxhYmVsID0gInUtYm9vdC1lbnYiOworCQkJCXJlZyA9IDwweDAxMDAwMDAgMHgwMDgwMDAwPjsKKwkJCX07CisKKwkJCWZhY3Rvcnk6IHBhcnRpdGlvbkAxODAwMDAgeworCQkJCWxhYmVsID0gIkZhY3RvcnkiOworCQkJCXJlZyA9IDwweDE4MDAwMCAweDAyMDAwMDA+OworCQkJfTsKKworCQkJcGFydGl0aW9uQDM4MDAwMCB7CisJCQkJbGFiZWwgPSAiRklQIjsKKwkJCQlyZWcgPSA8MHgzODAwMDAgMHgwMjAwMDAwPjsKKwkJCX07CisKKwkJCXBhcnRpdGlvbkA1ODAwMDAgeworCQkJCWxhYmVsID0gInViaSI7CisJCQkJcmVnID0gPDB4NTgwMDAwIDB4NDAwMDAwMD47CisJCQl9OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybS9ib290L2R0cy9tdDc5ODYtc3BpbS1ub3ItcGFydGl0aW9uLmR0c2kgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtL2Jvb3QvZHRzL210Nzk4Ni1zcGltLW5vci1wYXJ0aXRpb24uZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2RkZTVhCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybS9ib290L2R0cy9tdDc5ODYtc3BpbS1ub3ItcGFydGl0aW9uLmR0c2kKQEAgLTAsMCArMSwzMCBAQAorJnNwaTAgeworCXNwaV9ub3JAMCB7CisJCXBhcnRpdGlvbnMgeworCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1wYXJ0aXRpb25zIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisKKwkJCXBhcnRpdGlvbkAwMDAwMCB7CisJCQkJbGFiZWwgPSAiQkwyIjsKKwkJCQlyZWcgPSA8MHgwMDAwMCAweDAwNDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA0MDAwMCB7CisJCQkJbGFiZWwgPSAidS1ib290LWVudiI7CisJCQkJcmVnID0gPDB4NDAwMDAgMHgwMDEwMDAwPjsKKwkJCX07CisJCQlmYWN0b3J5OiBwYXJ0aXRpb25ANTAwMDAgeworCQkJCWxhYmVsID0gIkZhY3RvcnkiOworCQkJCXJlZyA9IDwweDUwMDAwIDB4MDBCMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDEwMDAwMCB7CisJCQkJbGFiZWwgPSAiRklQIjsKKwkJCQlyZWcgPSA8MHgxMDAwMDAgMHgwMDgwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25AMTgwMDAwIHsKKwkJCQlsYWJlbCA9ICJmaXJtd2FyZSI7CisJCQkJcmVnID0gPDB4MTgwMDAwIDB4RTAwMDAwPjsKKwkJCX07CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtL2Jvb3QvZHRzL210Nzk4NmEtMjUwMHdhbi1lbW1jLXJmYi5kdHMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtL2Jvb3QvZHRzL210Nzk4NmEtMjUwMHdhbi1lbW1jLXJmYi5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA5NGFiZQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3OTg2YS0yNTAwd2FuLWVtbWMtcmZiLmR0cwpAQCAtMCwwICsxLDI5NiBAQAorL2R0cy12MS87CisjaW5jbHVkZSAibXQ3OTg2YS5kdHNpIgorI2luY2x1ZGUgIm10Nzk4NmEtcGluY3RybC5kdHNpIgorLyB7CisJbW9kZWwgPSAiTWVkaWFUZWsgTVQ3OTg2YSBSRkIiOworCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2YS1lbW1jLXJmYiI7CisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDBuMSBsb2dsZXZlbD04ICBcCisJCQkJZWFybHljb249dWFydDgyNTAsbW1pbzMyLDB4MTEwMDIwMDAgXAorCQkJCXJvb3Q9UEFSVExBQkVMPXJvb3RmcyByb290d2FpdCByb290ZnN0eXBlPXNxdWFzaGZzLGYyZnMiOworCX07CisKKwltZW1vcnkgeworCQlyZWcgPSA8MCAweDQwMDAwMDAwIDAgMHgxMDAwMDAwMD47CisJfTsKKworCXJlZ18xcDh2OiByZWd1bGF0b3ItMXA4diB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAiZml4ZWQtMS44ViI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJcmVndWxhdG9yLWJvb3Qtb247CisJCXJlZ3VsYXRvci1hbHdheXMtb247CisJfTsKKworCXJlZ18zcDN2OiByZWd1bGF0b3ItM3AzdiB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAiZml4ZWQtMy4zViI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLWJvb3Qtb247CisJCXJlZ3VsYXRvci1hbHdheXMtb247CisJfTsKKworCXNvdW5kIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtd204OTYwLW1hY2hpbmUiOworCQltZWRpYXRlayxwbGF0Zm9ybSA9IDwmYWZlPjsKKwkJYXVkaW8tcm91dGluZyA9ICJIZWFkcGhvbmUiLCAiSFBfTCIsCisJCQkJIkhlYWRwaG9uZSIsICJIUF9SIiwKKwkJCQkiTElOUFVUMSIsICJBTUlDIiwKKwkJCQkiUklOUFVUMSIsICJBTUlDIjsKKwkJbWVkaWF0ZWssYXVkaW8tY29kZWMgPSA8JndtODk2MD47CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworfTsKKworJnB3bSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnB3bTBfcGluICZwd20xX3Bpbl9nMT47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0MV9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0Ml9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismaTJjMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmkyY19waW5zPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwl3bTg5NjA6IHdtODk2MEAxYSB7CisJCWNvbXBhdGlibGUgPSAid2xmLHdtODk2MCI7CisJCXJlZyA9IDwweDFhPjsKKwl9OworfTsKKworJmF1eGFkYyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJndhdGNoZG9nIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZXRoIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlnbWFjMDogbWFjQDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MD47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwlnbWFjMTogbWFjQDEgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MT47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwltZGlvOiBtZGlvLWJ1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlwaHk1OiBwaHlANSB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8NT47CisJCQlyZXNldC1ncGlvcyA9IDwmcGlvIDYgMT47CisJCQlyZXNldC1kZWFzc2VydC11cyA9IDwyMDAwMD47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCQlwaHk2OiBwaHlANiB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8Nj47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCQlzd2l0Y2hAMCB7CisJCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzUzMSI7CisJCQlyZWcgPSA8MzE+OworCQkJcmVzZXQtZ3Bpb3MgPSA8JnBpbyA1IDA+OworCisJCQlwb3J0cyB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCQlwb3J0QDAgeworCQkJCQlyZWcgPSA8MD47CisJCQkJCWxhYmVsID0gImxhbjAiOworCQkJCX07CisKKwkJCQlwb3J0QDEgeworCQkJCQlyZWcgPSA8MT47CisJCQkJCWxhYmVsID0gImxhbjEiOworCQkJCX07CisKKwkJCQlwb3J0QDIgeworCQkJCQlyZWcgPSA8Mj47CisJCQkJCWxhYmVsID0gImxhbjIiOworCQkJCX07CisKKwkJCQlwb3J0QDMgeworCQkJCQlyZWcgPSA8Mz47CisJCQkJCWxhYmVsID0gImxhbjMiOworCQkJCX07CisKKwkJCQlwb3J0QDQgeworCQkJCQlyZWcgPSA8ND47CisJCQkJCWxhYmVsID0gImxhbjQiOworCQkJCX07CisKKwkJCQlwb3J0QDUgeworCQkJCQlyZWcgPSA8NT47CisJCQkJCWxhYmVsID0gImxhbjUiOworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCisJCQkJcG9ydEA2IHsKKwkJCQkJcmVnID0gPDY+OworCQkJCQlsYWJlbCA9ICJjcHUiOworCQkJCQlldGhlcm5ldCA9IDwmZ21hYzA+OworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmhuYXQgeworCW10a2V0aC13YW4gPSAiZXRoMSI7CisJbXRrZXRoLWxhbiA9ICJsYW4iOworCW10a2V0aC1tYXgtZ21hYyA9IDwyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc3BpMSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNwaWNfcGluc19nMj47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJm1tYzAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCIsICJzdGF0ZV91aHMiOworCXBpbmN0cmwtMCA9IDwmbW1jMF9waW5zX2RlZmF1bHQ+OworCXBpbmN0cmwtMSA9IDwmbW1jMF9waW5zX3Vocz47CisJYnVzLXdpZHRoID0gPDg+OworCW1heC1mcmVxdWVuY3kgPSA8MjAwMDAwMDAwPjsKKwljYXAtbW1jLWhpZ2hzcGVlZDsKKwltbWMtaHMyMDAtMV84djsKKwltbWMtaHM0MDAtMV84djsKKwloczQwMC1kcy1kZWxheSA9IDwweDE0MDE0PjsKKwl2bW1jLXN1cHBseSA9IDwmcmVnXzNwM3Y+OworCXZxbW1jLXN1cHBseSA9IDwmcmVnXzFwOHY+OworCW5vbi1yZW1vdmFibGU7CisJbm8tc2Q7CisJbm8tc2RpbzsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismcGNpZTAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwY2llMF9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismd2JzeXMgeworCW1lZGlhdGVrLG10ZC1lZXByb20gPSA8JmZhY3RvcnkgMHgwMDAwPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismcGlvIHsKKwltbWMwX3BpbnNfZGVmYXVsdDogbW1jMC1waW5zLTUwLXRvLTYxLWRlZmF1bHQgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiZmxhc2giOworCQkJZ3JvdXBzID0gImVtbWNfNTEiOworCQl9OworCQljb25mLWNtZC1kYXQgeworCQkJcGlucyA9ICJFTU1DX0RBVEFfMCIsICJFTU1DX0RBVEFfMSIsICJFTU1DX0RBVEFfMiIsCisJCQkgICAgICAgIkVNTUNfREFUQV8zIiwgIkVNTUNfREFUQV80IiwgIkVNTUNfREFUQV81IiwKKwkJCSAgICAgICAiRU1NQ19EQVRBXzYiLCAiRU1NQ19EQVRBXzciLCAiRU1NQ19DTUQiOworCQkJaW5wdXQtZW5hYmxlOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzRtQT47CisJCQltZWRpYXRlayxwdWxsLXVwLWFkdiA9IDwxPjsJLyogcHVsbC11cCAxMEsgKi8KKwkJfTsKKwkJY29uZi1jbGsgeworCQkJcGlucyA9ICJFTU1DX0NLIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV82bUE+OworCQkJbWVkaWF0ZWsscHVsbC1kb3duLWFkdiA9IDwyPjsJLyogcHVsbC1kb3duIDUwSyAqLworCQl9OworCQljb25mLWRzIHsKKwkJCXBpbnMgPSAiRU1NQ19EU0wiOworCQkJbWVkaWF0ZWsscHVsbC1kb3duLWFkdiA9IDwyPjsJLyogcHVsbC1kb3duIDUwSyAqLworCQl9OworCQljb25mLXJzdCB7CisJCQlwaW5zID0gIkVNTUNfUlNUQiI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtdXAtYWR2ID0gPDE+OwkvKiBwdWxsLXVwIDEwSyAqLworCQl9OworCX07CisKKwltbWMwX3BpbnNfdWhzOiBtbWMwLXBpbnMtNTAtdG8tNjEtdWhzIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJlbW1jXzUxIjsKKwkJfTsKKwkJY29uZi1jbWQtZGF0IHsKKwkJCXBpbnMgPSAiRU1NQ19EQVRBXzAiLCAiRU1NQ19EQVRBXzEiLCAiRU1NQ19EQVRBXzIiLAorCQkJICAgICAgICJFTU1DX0RBVEFfMyIsICJFTU1DX0RBVEFfNCIsICJFTU1DX0RBVEFfNSIsCisJCQkgICAgICAgIkVNTUNfREFUQV82IiwgIkVNTUNfREFUQV83IiwgIkVNTUNfQ01EIjsKKwkJCWlucHV0LWVuYWJsZTsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV80bUE+OworCQkJbWVkaWF0ZWsscHVsbC11cC1hZHYgPSA8MT47CS8qIHB1bGwtdXAgMTBLICovCisJCX07CisJCWNvbmYtY2xrIHsKKwkJCXBpbnMgPSAiRU1NQ19DSyI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNm1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtZG93bi1hZHYgPSA8Mj47CS8qIHB1bGwtZG93biA1MEsgKi8KKwkJfTsKKwkJY29uZi1kcyB7CisJCQlwaW5zID0gIkVNTUNfRFNMIjsKKwkJCW1lZGlhdGVrLHB1bGwtZG93bi1hZHYgPSA8Mj47CS8qIHB1bGwtZG93biA1MEsgKi8KKwkJfTsKKwkJY29uZi1yc3QgeworCQkJcGlucyA9ICJFTU1DX1JTVEIiOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzRtQT47CisJCQltZWRpYXRlayxwdWxsLXVwLWFkdiA9IDwxPjsJLyogcHVsbC11cCAxMEsgKi8KKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3OTg2YS0yNTAwd2FuLWdzdy1zcGltLW5hbmQtcmZiLmR0cyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3OTg2YS0yNTAwd2FuLWdzdy1zcGltLW5hbmQtcmZiLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjgwZTk5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybS9ib290L2R0cy9tdDc5ODZhLTI1MDB3YW4tZ3N3LXNwaW0tbmFuZC1yZmIuZHRzCkBAIC0wLDAgKzEsMjY0IEBACisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDc5ODZhLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2YS1waW5jdHJsLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2LXNwaW0tbmFuZC1wYXJ0aXRpb24uZHRzaSIKKy8geworCW1vZGVsID0gIk1lZGlhVGVrIE1UNzk4NmIgZ3N3IFJGQiI7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODZhLTI1MDB3YW4tZ3N3LXNwaW0tc25hbmQtcmZiIjsKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG4xIGxvZ2xldmVsPTggIFwKKwkJCQllYXJseWNvbj11YXJ0ODI1MCxtbWlvMzIsMHgxMTAwMjAwMCI7CisJfTsKKworCWdzdzogZ3N3QDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzUzeCI7CisJCW1lZGlhdGVrLGV0aHN5cyA9IDwmZXRoc3lzPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCX07CisKKwltZW1vcnkgeworCQlyZWcgPSA8MCAweDQwMDAwMDAwIDAgMHgxMDAwMDAwMD47CisJfTsKKworCXNvdW5kIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtd204OTYwLW1hY2hpbmUiOworCQltZWRpYXRlayxwbGF0Zm9ybSA9IDwmYWZlPjsKKwkJYXVkaW8tcm91dGluZyA9ICJIZWFkcGhvbmUiLCAiSFBfTCIsCisJCQkJIkhlYWRwaG9uZSIsICJIUF9SIiwKKwkJCQkiTElOUFVUMSIsICJBTUlDIiwKKwkJCQkiUklOUFVUMSIsICJBTUlDIjsKKwkJbWVkaWF0ZWssYXVkaW8tY29kZWMgPSA8JndtODk2MD47CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworfTsKKworJnB3bSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnB3bTBfcGluICZwd20xX3Bpbl9nMT47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0MV9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0Ml9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismaTJjMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmkyY19waW5zPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwl3bTg5NjA6IHdtODk2MEAxYSB7CisJCWNvbXBhdGlibGUgPSAid2xmLHdtODk2MCI7CisJCXJlZyA9IDwweDFhPjsKKwl9OworfTsKKworJmF1eGFkYyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJndhdGNoZG9nIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZXRoIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlnbWFjMDogbWFjQDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MD47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwlnbWFjMTogbWFjQDEgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MT47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwltZGlvOiBtZGlvLWJ1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlwaHk1OiBwaHlANSB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8NT47CisJCQlyZXNldC1ncGlvcyA9IDwmcGlvIDYgMT47CisJCQlyZXNldC1kZWFzc2VydC11cyA9IDwyMDAwMD47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCQlwaHk2OiBwaHlANiB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8Nj47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCX07Cit9OworCismZ3N3IHsKKwltZWRpYXRlayxtZGlvID0gPCZtZGlvPjsKKwltZWRpYXRlayxwb3J0bWFwID0gImxsbGxsIjsKKwltZWRpYXRlayxtZGlvX21hc3Rlcl9waW5tdXggPSA8MT47CisJcmVzZXQtZ3Bpb3MgPSA8JnBpbyA1IDA+OworCWludGVycnVwdC1wYXJlbnQgPSA8JnBpbz47CisJaW50ZXJydXB0cyA9IDw2NiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwlwb3J0NTogcG9ydEA1IHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc1M3gtcG9ydCI7CisJCXJlZyA9IDw1PjsKKwkJcGh5LW1vZGUgPSAic2dtaWkiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJfTsKKworCX07CisKKwlwb3J0NjogcG9ydEA2IHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc1M3gtcG9ydCI7CisJCW1lZGlhdGVrLHNzYy1vbjsKKwkJcmVnID0gPDY+OworCQlwaHktbW9kZSA9ICJzZ21paSI7CisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJfTsKKwl9OworfTsKKworJmhuYXQgeworCW10a2V0aC13YW4gPSAiZXRoMSI7CisJbXRrZXRoLWxhbiA9ICJsYW4iOworCW10a2V0aC1tYXgtZ21hYyA9IDwyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc3BpMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNwaV9mbGFzaF9waW5zPjsKKwljcy1ncGlvcyA9IDwwPiwgPDA+OworCXN0YXR1cyA9ICJva2F5IjsKKworCXNwaV9ub3JAMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJqZWRlYyxzcGktbm9yIjsKKwkJcmVnID0gPDA+OworCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDwyMDAwMDAwMD47CisJCXNwaS10eC1idXN3aWR0aCA9IDw0PjsKKwkJc3BpLXJ4LWJ1c3dpZHRoID0gPDQ+OworCX07CisKKwlzcGlfbmFuZDogc3BpX25hbmRAMSB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJzcGktbmFuZCI7CisJCXJlZyA9IDwxPjsKKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8MjAwMDAwMDA+OworCQlzcGktdHgtYnVzd2lkdGggPSA8ND47CisJCXNwaS1yeC1idXN3aWR0aCA9IDw0PjsKKwl9OworfTsKKworJnNwaTEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzcGljX3BpbnNfZzI+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwY2llMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBjaWUwX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ3YnN5cyB7CisJbWVkaWF0ZWssbXRkLWVlcHJvbSA9IDwmZmFjdG9yeSAweDAwMDA+OworCXN0YXR1cyA9ICJva2F5IjsKKyAgICAgICAgcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgImRiZGMiOworICAgICAgICBwaW5jdHJsLTAgPSA8JndmXzJnXzVnX3BpbnM+OworICAgICAgICBwaW5jdHJsLTEgPSA8JndmX2RiZGNfcGlucz47Cit9OworCismcGlvIHsKKwlzcGlfZmxhc2hfcGluczogc3BpLWZsYXNoLXBpbnMtMzMtdG8tMzggeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiZmxhc2giOworCQkJZ3JvdXBzID0gInNwaTAiLCAic3BpMF93cF9ob2xkIjsKKwkJfTsKKwkJY29uZi1wdSB7CisJCQlwaW5zID0gIlNQSTJfQ1MiLCAiU1BJMl9IT0xEIiwgIlNQSTJfV1AiOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzhtQT47CisJCQltZWRpYXRlayxwdWxsLXVwLWFkdiA9IDwwPjsJLyogYmlhcy1kaXNhYmxlICovCisJCX07CisJCWNvbmYtcGQgeworCQkJcGlucyA9ICJTUEkyX0NMSyIsICJTUEkyX01PU0kiLCAiU1BJMl9NSVNPIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV84bUE+OworCQkJbWVkaWF0ZWsscHVsbC1kb3duLWFkdiA9IDwwPjsJLyogYmlhcy1kaXNhYmxlICovCisJCX07CisJfTsKKworICAgICAgICB3Zl8yZ181Z19waW5zOiB3Zl8yZ181Zy1waW5zIHsKKyAgICAgICAgICAgICAgICBtdXggeworICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSAid2lmaSI7CisgICAgICAgICAgICAgICAgICAgICAgICBncm91cHMgPSAid2ZfMmciLCAid2ZfNWciOworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgY29uZiB7CisgICAgICAgICAgICAgICAgICAgICAgICBwaW5zID0gIldGMF9IQjEiLCAiV0YwX0hCMiIsICJXRjBfSEIzIiwgIldGMF9IQjQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXRjBfSEIwIiwgIldGMF9IQjBfQiIsICJXRjBfSEI1IiwgIldGMF9IQjYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXRjBfSEI3IiwgIldGMF9IQjgiLCAiV0YwX0hCOSIsICJXRjBfSEIxMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldGMF9UT1BfQ0xLIiwgIldGMF9UT1BfREFUQSIsICJXRjFfSEIxIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV0YxX0hCMiIsICJXRjFfSEIzIiwgIldGMV9IQjQiLCAiV0YxX0hCMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldGMV9IQjUiLCAiV0YxX0hCNiIsICJXRjFfSEI3IiwgIldGMV9IQjgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXRjFfVE9QX0NMSyIsICJXRjFfVE9QX0RBVEEiOworICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzRtQT47CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgfTsKKworICAgICAgICB3Zl9kYmRjX3BpbnM6IHdmX2RiZGMtcGlucyB7CisgICAgICAgICAgICAgICAgbXV4IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uID0gIndpZmkiOworICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzID0gIndmX2RiZGMiOworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgY29uZiB7CisgICAgICAgICAgICAgICAgICAgICAgICBwaW5zID0gIldGMF9IQjEiLCAiV0YwX0hCMiIsICJXRjBfSEIzIiwgIldGMF9IQjQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXRjBfSEIwIiwgIldGMF9IQjBfQiIsICJXRjBfSEI1IiwgIldGMF9IQjYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXRjBfSEI3IiwgIldGMF9IQjgiLCAiV0YwX0hCOSIsICJXRjBfSEIxMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldGMF9UT1BfQ0xLIiwgIldGMF9UT1BfREFUQSIsICJXRjFfSEIxIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV0YxX0hCMiIsICJXRjFfSEIzIiwgIldGMV9IQjQiLCAiV0YxX0hCMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldGMV9IQjUiLCAiV0YxX0hCNiIsICJXRjFfSEI3IiwgIldGMV9IQjgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXRjFfVE9QX0NMSyIsICJXRjFfVE9QX0RBVEEiOworICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzRtQT47CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgfTsKKworfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3OTg2YS0yNTAwd2FuLXNkLXJmYi5kdHMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtL2Jvb3QvZHRzL210Nzk4NmEtMjUwMHdhbi1zZC1yZmIuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMWQwZGMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtL2Jvb3QvZHRzL210Nzk4NmEtMjUwMHdhbi1zZC1yZmIuZHRzCkBAIC0wLDAgKzEsMzA0IEBACisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDc5ODZhLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2YS1waW5jdHJsLmR0c2kiCisvIHsKKwltb2RlbCA9ICJNZWRpYVRlayBNVDc5ODZhIFJGQiI7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODZhLTI1MDB3YW4tc2QtcmZiIjsKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG4xIGxvZ2xldmVsPTggIFwKKwkJCWVhcmx5Y29uPXVhcnQ4MjUwLG1taW8zMiwweDExMDAyMDAwIFwKKwkJCXJvb3Q9UEFSVExBQkVMPXJvb3RmcyByb290d2FpdCByb290ZnN0eXBlPXNxdWFzaGZzLGYyZnMiOworCX07CisKKwltZW1vcnkgeworCQlyZWcgPSA8MCAweDQwMDAwMDAwIDAgMHgxMDAwMDAwMD47CisJfTsKKworCXNvdW5kIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtd204OTYwLW1hY2hpbmUiOworCQltZWRpYXRlayxwbGF0Zm9ybSA9IDwmYWZlPjsKKwkJYXVkaW8tcm91dGluZyA9ICJIZWFkcGhvbmUiLCAiSFBfTCIsCisJCQkJIkhlYWRwaG9uZSIsICJIUF9SIiwKKwkJCQkiTElOUFVUMSIsICJBTUlDIiwKKwkJCQkiUklOUFVUMSIsICJBTUlDIjsKKwkJbWVkaWF0ZWssYXVkaW8tY29kZWMgPSA8JndtODk2MD47CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworCisJcmVnXzNwM3Y6IHJlZ3VsYXRvci0zcDN2IHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJmaXhlZC0zLjNWIjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwl9OworfTsKKworJnB3bSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnB3bTBfcGluICZwd20xX3Bpbl9nMT47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0MV9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0Ml9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismaTJjMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmkyY19waW5zPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwl3bTg5NjA6IHdtODk2MEAxYSB7CisJCWNvbXBhdGlibGUgPSAid2xmLHdtODk2MCI7CisJCXJlZyA9IDwweDFhPjsKKwl9OworfTsKKworJmF1eGFkYyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJndhdGNoZG9nIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZXRoIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlnbWFjMDogbWFjQDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MD47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwlnbWFjMTogbWFjQDEgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MT47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwltZGlvOiBtZGlvLWJ1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlwaHk1OiBwaHlANSB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8NT47CisJCQlyZXNldC1ncGlvcyA9IDwmcGlvIDYgMT47CisJCQlyZXNldC1kZWFzc2VydC11cyA9IDwyMDAwMD47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCQlwaHk2OiBwaHlANiB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8Nj47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCQlzd2l0Y2hAMCB7CisJCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzUzMSI7CisJCQlyZWcgPSA8MzE+OworCQkJcmVzZXQtZ3Bpb3MgPSA8JnBpbyA1IDA+OworCisJCQlwb3J0cyB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCQlwb3J0QDAgeworCQkJCQlyZWcgPSA8MD47CisJCQkJCWxhYmVsID0gImxhbjAiOworCQkJCX07CisKKwkJCQlwb3J0QDEgeworCQkJCQlyZWcgPSA8MT47CisJCQkJCWxhYmVsID0gImxhbjEiOworCQkJCX07CisKKwkJCQlwb3J0QDIgeworCQkJCQlyZWcgPSA8Mj47CisJCQkJCWxhYmVsID0gImxhbjIiOworCQkJCX07CisKKwkJCQlwb3J0QDMgeworCQkJCQlyZWcgPSA8Mz47CisJCQkJCWxhYmVsID0gImxhbjMiOworCQkJCX07CisKKwkJCQlwb3J0QDQgeworCQkJCQlyZWcgPSA8ND47CisJCQkJCWxhYmVsID0gImxhbjQiOworCQkJCX07CisKKwkJCQlwb3J0QDUgeworCQkJCQlyZWcgPSA8NT47CisJCQkJCWxhYmVsID0gImxhbjUiOworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCisJCQkJcG9ydEA2IHsKKwkJCQkJcmVnID0gPDY+OworCQkJCQlsYWJlbCA9ICJjcHUiOworCQkJCQlldGhlcm5ldCA9IDwmZ21hYzA+OworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmhuYXQgeworCW10a2V0aC13YW4gPSAiZXRoMSI7CisJbXRrZXRoLWxhbiA9ICJsYW4iOworCW10a2V0aC1tYXgtZ21hYyA9IDwyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismbW1jMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgInN0YXRlX3VocyI7CisJcGluY3RybC0wID0gPCZtbWMwX3BpbnNfZGVmYXVsdD47CisJcGluY3RybC0xID0gPCZtbWMwX3BpbnNfdWhzPjsKKwlidXMtd2lkdGggPSA8ND47CisJbWF4LWZyZXF1ZW5jeSA9IDw1MjAwMDAwMD47CisJY2FwLXNkLWhpZ2hzcGVlZDsKKwl2bW1jLXN1cHBseSA9IDwmcmVnXzNwM3Y+OworCXZxbW1jLXN1cHBseSA9IDwmcmVnXzNwM3Y+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwY2llMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBjaWUwX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwaW8geworCW1tYzBfcGluc19kZWZhdWx0OiBtbWMwLXBpbnMtNTAtdG8tNjEtZGVmYXVsdCB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJmbGFzaCI7CisJCQlncm91cHMgPSAiZW1tY181MSI7CisJCX07CisJCWNvbmYtY21kLWRhdCB7CisJCQlwaW5zID0gIkVNTUNfREFUQV8wIiwgIkVNTUNfREFUQV8xIiwgIkVNTUNfREFUQV8yIiwKKwkJCSAgICAgICAiRU1NQ19EQVRBXzMiLCAiRU1NQ19EQVRBXzQiLCAiRU1NQ19EQVRBXzUiLAorCQkJICAgICAgICJFTU1DX0RBVEFfNiIsICJFTU1DX0RBVEFfNyIsICJFTU1DX0NNRCI7CisJCQlpbnB1dC1lbmFibGU7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtdXAtYWR2ID0gPDE+OwkvKiBwdWxsLXVwIDEwSyAqLworCQl9OworCQljb25mLWNsayB7CisJCQlwaW5zID0gIkVNTUNfQ0siOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzZtQT47CisJCQltZWRpYXRlayxwdWxsLWRvd24tYWR2ID0gPDI+OwkvKiBwdWxsLWRvd24gNTBLICovCisJCX07CisJCWNvbmYtZHMgeworCQkJcGlucyA9ICJFTU1DX0RTTCI7CisJCQltZWRpYXRlayxwdWxsLWRvd24tYWR2ID0gPDI+OwkvKiBwdWxsLWRvd24gNTBLICovCisJCX07CisJCWNvbmYtcnN0IHsKKwkJCXBpbnMgPSAiRU1NQ19SU1RCIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV80bUE+OworCQkJbWVkaWF0ZWsscHVsbC11cC1hZHYgPSA8MT47CS8qIHB1bGwtdXAgMTBLICovCisJCX07CisJfTsKKworCW1tYzBfcGluc191aHM6IG1tYzAtcGlucy01MC10by02MS11aHMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiZmxhc2giOworCQkJZ3JvdXBzID0gImVtbWNfNTEiOworCQl9OworCQljb25mLWNtZC1kYXQgeworCQkJcGlucyA9ICJFTU1DX0RBVEFfMCIsICJFTU1DX0RBVEFfMSIsICJFTU1DX0RBVEFfMiIsCisJCQkgICAgICAgIkVNTUNfREFUQV8zIiwgIkVNTUNfREFUQV80IiwgIkVNTUNfREFUQV81IiwKKwkJCSAgICAgICAiRU1NQ19EQVRBXzYiLCAiRU1NQ19EQVRBXzciLCAiRU1NQ19DTUQiOworCQkJaW5wdXQtZW5hYmxlOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzRtQT47CisJCQltZWRpYXRlayxwdWxsLXVwLWFkdiA9IDwxPjsJLyogcHVsbC11cCAxMEsgKi8KKwkJfTsKKwkJY29uZi1jbGsgeworCQkJcGlucyA9ICJFTU1DX0NLIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV82bUE+OworCQkJbWVkaWF0ZWsscHVsbC1kb3duLWFkdiA9IDwyPjsJLyogcHVsbC1kb3duIDUwSyAqLworCQl9OworCQljb25mLWRzIHsKKwkJCXBpbnMgPSAiRU1NQ19EU0wiOworCQkJbWVkaWF0ZWsscHVsbC1kb3duLWFkdiA9IDwyPjsJLyogcHVsbC1kb3duIDUwSyAqLworCQl9OworCQljb25mLXJzdCB7CisJCQlwaW5zID0gIkVNTUNfUlNUQiI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtdXAtYWR2ID0gPDE+OwkvKiBwdWxsLXVwIDEwSyAqLworCQl9OworCX07CisKKwl3Zl8yZ181Z19waW5zOiB3Zl8yZ181Zy1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gIndpZmkiOworCQkJZ3JvdXBzID0gIndmXzJnIiwgIndmXzVnIjsKKwkJfTsKKwkJY29uZiB7CisJCQlwaW5zID0gIldGMF9IQjEiLCAiV0YwX0hCMiIsICJXRjBfSEIzIiwgIldGMF9IQjQiLAorCQkJICAgICAgICJXRjBfSEIwIiwgIldGMF9IQjBfQiIsICJXRjBfSEI1IiwgIldGMF9IQjYiLAorCQkJICAgICAgICJXRjBfSEI3IiwgIldGMF9IQjgiLCAiV0YwX0hCOSIsICJXRjBfSEIxMCIsCisJCQkgICAgICAgIldGMF9UT1BfQ0xLIiwgIldGMF9UT1BfREFUQSIsICJXRjFfSEIxIiwKKwkJCSAgICAgICAiV0YxX0hCMiIsICJXRjFfSEIzIiwgIldGMV9IQjQiLCAiV0YxX0hCMCIsCisJCQkgICAgICAgIldGMV9IQjUiLCAiV0YxX0hCNiIsICJXRjFfSEI3IiwgIldGMV9IQjgiLAorCQkJICAgICAgICJXRjFfVE9QX0NMSyIsICJXRjFfVE9QX0RBVEEiOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzRtQT47CisJCX07CisJfTsKKworCXdmX2RiZGNfcGluczogd2ZfZGJkYy1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gIndpZmkiOworCQkJZ3JvdXBzID0gIndmX2RiZGMiOworCQl9OworCQljb25mIHsKKwkJCXBpbnMgPSAiV0YwX0hCMSIsICJXRjBfSEIyIiwgIldGMF9IQjMiLCAiV0YwX0hCNCIsCisJCQkgICAgICAgIldGMF9IQjAiLCAiV0YwX0hCMF9CIiwgIldGMF9IQjUiLCAiV0YwX0hCNiIsCisJCQkgICAgICAgIldGMF9IQjciLCAiV0YwX0hCOCIsICJXRjBfSEI5IiwgIldGMF9IQjEwIiwKKwkJCSAgICAgICAiV0YwX1RPUF9DTEsiLCAiV0YwX1RPUF9EQVRBIiwgIldGMV9IQjEiLAorCQkJICAgICAgICJXRjFfSEIyIiwgIldGMV9IQjMiLCAiV0YxX0hCNCIsICJXRjFfSEIwIiwKKwkJCSAgICAgICAiV0YxX0hCNSIsICJXRjFfSEI2IiwgIldGMV9IQjciLCAiV0YxX0hCOCIsCisJCQkgICAgICAgIldGMV9UT1BfQ0xLIiwgIldGMV9UT1BfREFUQSI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNG1BPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3OTg2YS0yNTAwd2FuLXNwaW0tbmFuZC1yZmIuZHRzIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybS9ib290L2R0cy9tdDc5ODZhLTI1MDB3YW4tc3BpbS1uYW5kLXJmYi5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUwNDM2OQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3OTg2YS0yNTAwd2FuLXNwaW0tbmFuZC1yZmIuZHRzCkBAIC0wLDAgKzEsMjgzIEBACisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDc5ODZhLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2YS1waW5jdHJsLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2LXNwaW0tbmFuZC1wYXJ0aXRpb24uZHRzaSIKKy8geworCW1vZGVsID0gIk1lZGlhVGVrIE1UNzk4NmEgUkZCIjsKKwljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4NmEtMjUwMHdhbi1zcGltLXNuYW5kLXJmYiI7CisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDBuMSBsb2dsZXZlbD04ICBcCisJCQkJZWFybHljb249dWFydDgyNTAsbW1pbzMyLDB4MTEwMDIwMDAiOworCX07CisKKwltZW1vcnkgeworCQlyZWcgPSA8MCAweDQwMDAwMDAwIDAgMHgxMDAwMDAwMD47CisJfTsKKworCXNvdW5kIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtd204OTYwLW1hY2hpbmUiOworCQltZWRpYXRlayxwbGF0Zm9ybSA9IDwmYWZlPjsKKwkJYXVkaW8tcm91dGluZyA9ICJIZWFkcGhvbmUiLCAiSFBfTCIsCisJCQkJIkhlYWRwaG9uZSIsICJIUF9SIiwKKwkJCQkiTElOUFVUMSIsICJBTUlDIiwKKwkJCQkiUklOUFVUMSIsICJBTUlDIjsKKwkJbWVkaWF0ZWssYXVkaW8tY29kZWMgPSA8JndtODk2MD47CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworfTsKKworJnB3bSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnB3bTBfcGluICZwd20xX3Bpbl9nMT47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0MV9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0Ml9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismaTJjMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmkyY19waW5zPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwl3bTg5NjA6IHdtODk2MEAxYSB7CisJCWNvbXBhdGlibGUgPSAid2xmLHdtODk2MCI7CisJCXJlZyA9IDwweDFhPjsKKwl9OworfTsKKworJmF1eGFkYyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJndhdGNoZG9nIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZXRoIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlnbWFjMDogbWFjQDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MD47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwlnbWFjMTogbWFjQDEgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MT47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwltZGlvOiBtZGlvLWJ1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlwaHk1OiBwaHlANSB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8NT47CisJCQlyZXNldC1ncGlvcyA9IDwmcGlvIDYgMT47CisJCQlyZXNldC1kZWFzc2VydC11cyA9IDwyMDAwMD47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCQlwaHk2OiBwaHlANiB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8Nj47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCQlzd2l0Y2hAMCB7CisJCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzUzMSI7CisJCQlyZWcgPSA8MzE+OworCQkJcmVzZXQtZ3Bpb3MgPSA8JnBpbyA1IDA+OworCisJCQlwb3J0cyB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCQlwb3J0QDAgeworCQkJCQlyZWcgPSA8MD47CisJCQkJCWxhYmVsID0gImxhbjAiOworCQkJCX07CisKKwkJCQlwb3J0QDEgeworCQkJCQlyZWcgPSA8MT47CisJCQkJCWxhYmVsID0gImxhbjEiOworCQkJCX07CisKKwkJCQlwb3J0QDIgeworCQkJCQlyZWcgPSA8Mj47CisJCQkJCWxhYmVsID0gImxhbjIiOworCQkJCX07CisKKwkJCQlwb3J0QDMgeworCQkJCQlyZWcgPSA8Mz47CisJCQkJCWxhYmVsID0gImxhbjMiOworCQkJCX07CisKKwkJCQlwb3J0QDQgeworCQkJCQlyZWcgPSA8ND47CisJCQkJCWxhYmVsID0gImxhbjQiOworCQkJCX07CisKKwkJCQlwb3J0QDUgeworCQkJCQlyZWcgPSA8NT47CisJCQkJCWxhYmVsID0gImxhbjUiOworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCisJCQkJcG9ydEA2IHsKKwkJCQkJcmVnID0gPDY+OworCQkJCQlsYWJlbCA9ICJjcHUiOworCQkJCQlldGhlcm5ldCA9IDwmZ21hYzA+OworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmhuYXQgeworCW10a2V0aC13YW4gPSAiZXRoMSI7CisJbXRrZXRoLWxhbiA9ICJsYW4iOworCW10a2V0aC1tYXgtZ21hYyA9IDwyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc3BpMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNwaV9mbGFzaF9waW5zPjsKKwljcy1ncGlvcyA9IDwwPiwgPDA+OworCXN0YXR1cyA9ICJva2F5IjsKKworCXNwaV9ub3JAMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJqZWRlYyxzcGktbm9yIjsKKwkJcmVnID0gPDA+OworCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDwyMDAwMDAwMD47CisJCXNwaS10eC1idXN3aWR0aCA9IDw0PjsKKwkJc3BpLXJ4LWJ1c3dpZHRoID0gPDQ+OworCX07CisKKwlzcGlfbmFuZDogc3BpX25hbmRAMSB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJzcGktbmFuZCI7CisJCXJlZyA9IDwxPjsKKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8MjAwMDAwMDA+OworCQlzcGktdHgtYnVzd2lkdGggPSA8ND47CisJCXNwaS1yeC1idXN3aWR0aCA9IDw0PjsKKwl9OworfTsKKworJnNwaTEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzcGljX3BpbnNfZzI+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwY2llMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBjaWUwX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ3YnN5cyB7CisJbWVkaWF0ZWssbXRkLWVlcHJvbSA9IDwmZmFjdG9yeSAweDAwMDA+OworCXN0YXR1cyA9ICJva2F5IjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiLCAiZGJkYyI7CisJcGluY3RybC0wID0gPCZ3Zl8yZ181Z19waW5zPjsKKwlwaW5jdHJsLTEgPSA8JndmX2RiZGNfcGlucz47Cit9OworCismcGlvIHsKKwlzcGlfZmxhc2hfcGluczogc3BpLWZsYXNoLXBpbnMtMzMtdG8tMzggeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiZmxhc2giOworCQkJZ3JvdXBzID0gInNwaTAiLCAic3BpMF93cF9ob2xkIjsKKwkJfTsKKwkJY29uZi1wdSB7CisJCQlwaW5zID0gIlNQSTJfQ1MiLCAiU1BJMl9IT0xEIiwgIlNQSTJfV1AiOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzhtQT47CisJCQltZWRpYXRlayxwdWxsLXVwLWFkdiA9IDwwPjsJLyogYmlhcy1kaXNhYmxlICovCisJCX07CisJCWNvbmYtcGQgeworCQkJcGlucyA9ICJTUEkyX0NMSyIsICJTUEkyX01PU0kiLCAiU1BJMl9NSVNPIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV84bUE+OworCQkJbWVkaWF0ZWsscHVsbC1kb3duLWFkdiA9IDwwPjsJLyogYmlhcy1kaXNhYmxlICovCisJCX07CisJfTsKKworCXdmXzJnXzVnX3BpbnM6IHdmXzJnXzVnLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAid2lmaSI7CisJCQlncm91cHMgPSAid2ZfMmciLCAid2ZfNWciOworCQl9OworCQljb25mIHsKKwkJCXBpbnMgPSAiV0YwX0hCMSIsICJXRjBfSEIyIiwgIldGMF9IQjMiLCAiV0YwX0hCNCIsCisJCQkgICAgICAgIldGMF9IQjAiLCAiV0YwX0hCMF9CIiwgIldGMF9IQjUiLCAiV0YwX0hCNiIsCisJCQkgICAgICAgIldGMF9IQjciLCAiV0YwX0hCOCIsICJXRjBfSEI5IiwgIldGMF9IQjEwIiwKKwkJCSAgICAgICAiV0YwX1RPUF9DTEsiLCAiV0YwX1RPUF9EQVRBIiwgIldGMV9IQjEiLAorCQkJICAgICAgICJXRjFfSEIyIiwgIldGMV9IQjMiLCAiV0YxX0hCNCIsICJXRjFfSEIwIiwKKwkJCSAgICAgICAiV0YxX0hCNSIsICJXRjFfSEI2IiwgIldGMV9IQjciLCAiV0YxX0hCOCIsCisJCQkgICAgICAgIldGMV9UT1BfQ0xLIiwgIldGMV9UT1BfREFUQSI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNG1BPjsKKwkJfTsKKwl9OworCisJd2ZfZGJkY19waW5zOiB3Zl9kYmRjLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAid2lmaSI7CisJCQlncm91cHMgPSAid2ZfZGJkYyI7CisJCX07CisJCWNvbmYgeworCQkJcGlucyA9ICJXRjBfSEIxIiwgIldGMF9IQjIiLCAiV0YwX0hCMyIsICJXRjBfSEI0IiwKKwkJCSAgICAgICAiV0YwX0hCMCIsICJXRjBfSEIwX0IiLCAiV0YwX0hCNSIsICJXRjBfSEI2IiwKKwkJCSAgICAgICAiV0YwX0hCNyIsICJXRjBfSEI4IiwgIldGMF9IQjkiLCAiV0YwX0hCMTAiLAorCQkJICAgICAgICJXRjBfVE9QX0NMSyIsICJXRjBfVE9QX0RBVEEiLCAiV0YxX0hCMSIsCisJCQkgICAgICAgIldGMV9IQjIiLCAiV0YxX0hCMyIsICJXRjFfSEI0IiwgIldGMV9IQjAiLAorCQkJICAgICAgICJXRjFfSEI1IiwgIldGMV9IQjYiLCAiV0YxX0hCNyIsICJXRjFfSEI4IiwKKwkJCSAgICAgICAiV0YxX1RPUF9DTEsiLCAiV0YxX1RPUF9EQVRBIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV80bUE+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybS9ib290L2R0cy9tdDc5ODZhLTI1MDB3YW4tc3BpbS1ub3ItcmZiLmR0cyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3OTg2YS0yNTAwd2FuLXNwaW0tbm9yLXJmYi5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFmMjJkMQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3OTg2YS0yNTAwd2FuLXNwaW0tbm9yLXJmYi5kdHMKQEAgLTAsMCArMSwyMzUgQEAKKy9kdHMtdjEvOworI2luY2x1ZGUgIm10Nzk4NmEuZHRzaSIKKyNpbmNsdWRlICJtdDc5ODZhLXBpbmN0cmwuZHRzaSIKKyNpbmNsdWRlICJtdDc5ODYtc3BpbS1ub3ItcGFydGl0aW9uLmR0c2kiCisvIHsKKwltb2RlbCA9ICJNZWRpYVRlayBNVDc5ODZhIFJGQiI7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODZhLTI1MDB3YW4tbm9yLXJmYiI7CisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDBuMSBsb2dsZXZlbD04ICBcCisJCQkJZWFybHljb249dWFydDgyNTAsbW1pbzMyLDB4MTEwMDIwMDAiOworCX07CisKKwltZW1vcnkgeworCQlyZWcgPSA8MCAweDQwMDAwMDAwIDAgMHgxMDAwMDAwMD47CisJfTsKKworCXNvdW5kIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtd204OTYwLW1hY2hpbmUiOworCQltZWRpYXRlayxwbGF0Zm9ybSA9IDwmYWZlPjsKKwkJYXVkaW8tcm91dGluZyA9ICJIZWFkcGhvbmUiLCAiSFBfTCIsCisJCQkJIkhlYWRwaG9uZSIsICJIUF9SIiwKKwkJCQkiTElOUFVUMSIsICJBTUlDIiwKKwkJCQkiUklOUFVUMSIsICJBTUlDIjsKKwkJbWVkaWF0ZWssYXVkaW8tY29kZWMgPSA8JndtODk2MD47CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworfTsKKworJnB3bSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnB3bTBfcGluICZwd20xX3Bpbl9nMT47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0MV9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0Ml9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismaTJjMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmkyY19waW5zPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwl3bTg5NjA6IHdtODk2MEAxYSB7CisJCWNvbXBhdGlibGUgPSAid2xmLHdtODk2MCI7CisJCXJlZyA9IDwweDFhPjsKKwl9OworfTsKKworJmF1eGFkYyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJndhdGNoZG9nIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZXRoIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlnbWFjMDogbWFjQDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MD47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwlnbWFjMTogbWFjQDEgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MT47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwltZGlvOiBtZGlvLWJ1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlwaHk1OiBwaHlANSB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8NT47CisJCQlyZXNldC1ncGlvcyA9IDwmcGlvIDYgMT47CisJCQlyZXNldC1kZWFzc2VydC11cyA9IDwyMDAwMD47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCQlwaHk2OiBwaHlANiB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8Nj47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCQlzd2l0Y2hAMCB7CisJCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzUzMSI7CisJCQlyZWcgPSA8MzE+OworCQkJcmVzZXQtZ3Bpb3MgPSA8JnBpbyA1IDA+OworCisJCQlwb3J0cyB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCQlwb3J0QDAgeworCQkJCQlyZWcgPSA8MD47CisJCQkJCWxhYmVsID0gImxhbjAiOworCQkJCX07CisKKwkJCQlwb3J0QDEgeworCQkJCQlyZWcgPSA8MT47CisJCQkJCWxhYmVsID0gImxhbjEiOworCQkJCX07CisKKwkJCQlwb3J0QDIgeworCQkJCQlyZWcgPSA8Mj47CisJCQkJCWxhYmVsID0gImxhbjIiOworCQkJCX07CisKKwkJCQlwb3J0QDMgeworCQkJCQlyZWcgPSA8Mz47CisJCQkJCWxhYmVsID0gImxhbjMiOworCQkJCX07CisKKwkJCQlwb3J0QDQgeworCQkJCQlyZWcgPSA8ND47CisJCQkJCWxhYmVsID0gImxhbjQiOworCQkJCX07CisKKwkJCQlwb3J0QDUgeworCQkJCQlyZWcgPSA8NT47CisJCQkJCWxhYmVsID0gImxhbjUiOworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCisJCQkJcG9ydEA2IHsKKwkJCQkJcmVnID0gPDY+OworCQkJCQlsYWJlbCA9ICJjcHUiOworCQkJCQlldGhlcm5ldCA9IDwmZ21hYzA+OworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmhuYXQgeworCW10a2V0aC13YW4gPSAiZXRoMSI7CisJbXRrZXRoLWxhbiA9ICJsYW4iOworCW10a2V0aC1tYXgtZ21hYyA9IDwyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc3BpMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNwaV9mbGFzaF9waW5zPjsKKwljcy1ncGlvcyA9IDwwPiwgPDA+OworCXN0YXR1cyA9ICJva2F5IjsKKwlzcGlfbm9yQDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiamVkZWMsc3BpLW5vciI7CisJCXJlZyA9IDwwPjsKKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8NTIwMDAwMDA+OworCQlzcGktdHgtYnVzd2lkdGggPSA8ND47CisJCXNwaS1yeC1idXN3aWR0aCA9IDw0PjsKKwl9OworfTsKKworJnNwaTEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzcGljX3BpbnNfZzI+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwY2llMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBjaWUwX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ3YnN5cyB7CisJbWVkaWF0ZWssbXRkLWVlcHJvbSA9IDwmZmFjdG9yeSAweDAwMDA+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwaW8geworCXNwaV9mbGFzaF9waW5zOiBzcGktZmxhc2gtcGlucy0zMy10by0zOCB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJmbGFzaCI7CisJCQlncm91cHMgPSAic3BpMCIsICJzcGkwX3dwX2hvbGQiOworCQl9OworCQljb25mLXB1IHsKKwkJCXBpbnMgPSAiU1BJMl9DUyIsICJTUEkyX0hPTEQiLCAiU1BJMl9XUCI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfOG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtdXAtYWR2ID0gPDA+OwkvKiBiaWFzLWRpc2FibGUgKi8KKwkJfTsKKwkJY29uZi1wZCB7CisJCQlwaW5zID0gIlNQSTJfQ0xLIiwgIlNQSTJfTU9TSSIsICJTUEkyX01JU08iOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzhtQT47CisJCQltZWRpYXRlayxwdWxsLWRvd24tYWR2ID0gPDA+OwkvKiBiaWFzLWRpc2FibGUgKi8KKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3OTg2YS1lbW1jLXJmYi5kdHMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtL2Jvb3QvZHRzL210Nzk4NmEtZW1tYy1yZmIuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0YWUwYjAKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtL2Jvb3QvZHRzL210Nzk4NmEtZW1tYy1yZmIuZHRzCkBAIC0wLDAgKzEsMjk3IEBACisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDc5ODZhLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2YS1waW5jdHJsLmR0c2kiCisvIHsKKwltb2RlbCA9ICJNZWRpYVRlayBNVDc5ODZhIFJGQiI7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODZhLWVtbWMtcmZiIjsKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG4xIGxvZ2xldmVsPTggIFwKKwkJCQllYXJseWNvbj11YXJ0ODI1MCxtbWlvMzIsMHgxMTAwMjAwMCBcCisJCQkJcm9vdD1QQVJUTEFCRUw9cm9vdGZzIHJvb3R3YWl0IHJvb3Rmc3R5cGU9c3F1YXNoZnMsZjJmcyI7CisJfTsKKworCW1lbW9yeSB7CisJCXJlZyA9IDwwIDB4NDAwMDAwMDAgMCAweDEwMDAwMDAwPjsKKwl9OworCisJcmVnXzFwOHY6IHJlZ3VsYXRvci0xcDh2IHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJmaXhlZC0xLjhWIjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwl9OworCisJcmVnXzNwM3Y6IHJlZ3VsYXRvci0zcDN2IHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJmaXhlZC0zLjNWIjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwl9OworCisJc291bmRfd204OTYwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5eHgtd204OTYwLW1hY2hpbmUiOworCQltZWRpYXRlayxwbGF0Zm9ybSA9IDwmYWZlPjsKKwkJYXVkaW8tcm91dGluZyA9ICJIZWFkcGhvbmUiLCAiSFBfTCIsCisJCQkJIkhlYWRwaG9uZSIsICJIUF9SIiwKKwkJCQkiTElOUFVUMSIsICJBTUlDIiwKKwkJCQkiUklOUFVUMSIsICJBTUlDIjsKKwkJbWVkaWF0ZWssYXVkaW8tY29kZWMgPSA8JndtODk2MD47CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworCisJc291bmRfc2kzMjE4eCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OXh4LXNpMzIxOHgtbWFjaGluZSI7CisJCW1lZGlhdGVrLHBsYXRmb3JtID0gPCZhZmU+OworCQltZWRpYXRlayxleHQtY29kZWMgPSA8JnByb3NsaWNfc3BpPjsKKwkJc3RhdHVzID0gIm9rYXkiOworCX07Cit9OworCismcHdtIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcHdtMF9waW4gJnB3bTFfcGluX2cxPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1YXJ0MSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnVhcnQxX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1YXJ0MiB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnVhcnQyX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZpMmMwIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmaTJjX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKKworCXdtODk2MDogd204OTYwQDFhIHsKKwkJY29tcGF0aWJsZSA9ICJ3bGYsd204OTYwIjsKKwkJcmVnID0gPDB4MWE+OworCX07Cit9OworCismYXV4YWRjIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismd2F0Y2hkb2cgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZldGggeworCXN0YXR1cyA9ICJva2F5IjsKKworCWdtYWMwOiBtYWNAMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssZXRoLW1hYyI7CisJCXJlZyA9IDwwPjsKKwkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKwkJZml4ZWQtbGluayB7CisJCQlzcGVlZCA9IDwyNTAwPjsKKwkJCWZ1bGwtZHVwbGV4OworCQkJcGF1c2U7CisJCX07CisJfTsKKworCWdtYWMxOiBtYWNAMSB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssZXRoLW1hYyI7CisJCXJlZyA9IDwxPjsKKwkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKwkJZml4ZWQtbGluayB7CisJCQlzcGVlZCA9IDwyNTAwPjsKKwkJCWZ1bGwtZHVwbGV4OworCQkJcGF1c2U7CisJCX07CisJfTsKKworCW1kaW86IG1kaW8tYnVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCXBoeTU6IHBoeUA1IHsKKwkJCWNvbXBhdGlibGUgPSAiZXRoZXJuZXQtcGh5LWlkNjdjOS5kZTBhIjsKKwkJCXJlZyA9IDw1PjsKKwkJCXJlc2V0LWdwaW9zID0gPCZwaW8gNiAxPjsKKwkJCXJlc2V0LWRlYXNzZXJ0LXVzID0gPDIwMDAwPjsKKwkJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCQl9OworCisJCXBoeTY6IHBoeUA2IHsKKwkJCWNvbXBhdGlibGUgPSAiZXRoZXJuZXQtcGh5LWlkNjdjOS5kZTBhIjsKKwkJCXJlZyA9IDw2PjsKKwkJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCQl9OworCisJCXN3aXRjaEAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NTMxIjsKKwkJCXJlZyA9IDwzMT47CisJCQlyZXNldC1ncGlvcyA9IDwmcGlvIDUgMD47CisKKwkJCXBvcnRzIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJCXBvcnRAMCB7CisJCQkJCXJlZyA9IDwwPjsKKwkJCQkJbGFiZWwgPSAibGFuMCI7CisJCQkJfTsKKworCQkJCXBvcnRAMSB7CisJCQkJCXJlZyA9IDwxPjsKKwkJCQkJbGFiZWwgPSAibGFuMSI7CisJCQkJfTsKKworCQkJCXBvcnRAMiB7CisJCQkJCXJlZyA9IDwyPjsKKwkJCQkJbGFiZWwgPSAibGFuMiI7CisJCQkJfTsKKworCQkJCXBvcnRAMyB7CisJCQkJCXJlZyA9IDwzPjsKKwkJCQkJbGFiZWwgPSAibGFuMyI7CisJCQkJfTsKKworCQkJCXBvcnRANiB7CisJCQkJCXJlZyA9IDw2PjsKKwkJCQkJbGFiZWwgPSAiY3B1IjsKKwkJCQkJZXRoZXJuZXQgPSA8JmdtYWMwPjsKKwkJCQkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKwkJCQkJZml4ZWQtbGluayB7CisJCQkJCQlzcGVlZCA9IDwyNTAwPjsKKwkJCQkJCWZ1bGwtZHVwbGV4OworCQkJCQkJcGF1c2U7CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZobmF0IHsKKwltdGtldGgtd2FuID0gImV0aDEiOworCW10a2V0aC1sYW4gPSAibGFuIjsKKwltdGtldGgtbWF4LWdtYWMgPSA8Mj47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnNwaTEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzcGljX3BpbnNfZzI+OworCXN0YXR1cyA9ICJva2F5IjsKKworCXByb3NsaWNfc3BpOiBwcm9zbGljX3NwaUAwIHsKKwkJY29tcGF0aWJsZSA9ICJzaWxhYnMscHJvc2xpY19zcGkiOworCQlyZWcgPSA8MD47CisJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDEwMDAwMDAwPjsKKwkJc3BpLWNwaGEgPSA8MT47CisJCXNwaS1jcG9sID0gPDE+OworCQljaGFubmVsX2NvdW50ID0gPDE+OworCQlkZWJ1Z19sZXZlbCA9IDw0PjsgICAgICAgLyogMSA9IFRSQywgMiA9IERCRywgNCA9IEVSUiAqLworCQlyZXNldF9ncGlvID0gPCZwaW8gNyAwPjsKKwkJaWcsZW5hYmxlLXNwaSA9IDwxPjsgICAgIC8qIDE6IEVuYWJsZSwgMDogRGlzYWJsZSAqLworCX07Cit9OworCismbW1jMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgInN0YXRlX3VocyI7CisJcGluY3RybC0wID0gPCZtbWMwX3BpbnNfZGVmYXVsdD47CisJcGluY3RybC0xID0gPCZtbWMwX3BpbnNfdWhzPjsKKwlidXMtd2lkdGggPSA8OD47CisJbWF4LWZyZXF1ZW5jeSA9IDwyMDAwMDAwMDA+OworCWNhcC1tbWMtaGlnaHNwZWVkOworCW1tYy1oczIwMC0xXzh2OworCW1tYy1oczQwMC0xXzh2OworCWhzNDAwLWRzLWRlbGF5ID0gPDB4MTQwMTQ+OworCXZtbWMtc3VwcGx5ID0gPCZyZWdfM3Azdj47CisJdnFtbWMtc3VwcGx5ID0gPCZyZWdfMXA4dj47CisJbm9uLXJlbW92YWJsZTsKKwluby1zZDsKKwluby1zZGlvOworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwY2llMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBjaWUwX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ3YnN5cyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnBpbyB7CisJbW1jMF9waW5zX2RlZmF1bHQ6IG1tYzAtcGlucy01MC10by02MS1kZWZhdWx0IHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJlbW1jXzUxIjsKKwkJfTsKKwkJY29uZi1jbWQtZGF0IHsKKwkJCXBpbnMgPSAiRU1NQ19EQVRBXzAiLCAiRU1NQ19EQVRBXzEiLCAiRU1NQ19EQVRBXzIiLAorCQkJICAgICAgICJFTU1DX0RBVEFfMyIsICJFTU1DX0RBVEFfNCIsICJFTU1DX0RBVEFfNSIsCisJCQkgICAgICAgIkVNTUNfREFUQV82IiwgIkVNTUNfREFUQV83IiwgIkVNTUNfQ01EIjsKKwkJCWlucHV0LWVuYWJsZTsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV80bUE+OworCQkJbWVkaWF0ZWsscHVsbC11cC1hZHYgPSA8MT47CS8qIHB1bGwtdXAgMTBLICovCisJCX07CisJCWNvbmYtY2xrIHsKKwkJCXBpbnMgPSAiRU1NQ19DSyI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNm1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtZG93bi1hZHYgPSA8Mj47CS8qIHB1bGwtZG93biA1MEsgKi8KKwkJfTsKKwkJY29uZi1kcyB7CisJCQlwaW5zID0gIkVNTUNfRFNMIjsKKwkJCW1lZGlhdGVrLHB1bGwtZG93bi1hZHYgPSA8Mj47CS8qIHB1bGwtZG93biA1MEsgKi8KKwkJfTsKKwkJY29uZi1yc3QgeworCQkJcGlucyA9ICJFTU1DX1JTVEIiOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzRtQT47CisJCQltZWRpYXRlayxwdWxsLXVwLWFkdiA9IDwxPjsJLyogcHVsbC11cCAxMEsgKi8KKwkJfTsKKwl9OworCisJbW1jMF9waW5zX3VoczogbW1jMC1waW5zLTUwLXRvLTYxLXVocyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJmbGFzaCI7CisJCQlncm91cHMgPSAiZW1tY181MSI7CisJCX07CisJCWNvbmYtY21kLWRhdCB7CisJCQlwaW5zID0gIkVNTUNfREFUQV8wIiwgIkVNTUNfREFUQV8xIiwgIkVNTUNfREFUQV8yIiwKKwkJCSAgICAgICAiRU1NQ19EQVRBXzMiLCAiRU1NQ19EQVRBXzQiLCAiRU1NQ19EQVRBXzUiLAorCQkJICAgICAgICJFTU1DX0RBVEFfNiIsICJFTU1DX0RBVEFfNyIsICJFTU1DX0NNRCI7CisJCQlpbnB1dC1lbmFibGU7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtdXAtYWR2ID0gPDE+OwkvKiBwdWxsLXVwIDEwSyAqLworCQl9OworCQljb25mLWNsayB7CisJCQlwaW5zID0gIkVNTUNfQ0siOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzZtQT47CisJCQltZWRpYXRlayxwdWxsLWRvd24tYWR2ID0gPDI+OwkvKiBwdWxsLWRvd24gNTBLICovCisJCX07CisJCWNvbmYtZHMgeworCQkJcGlucyA9ICJFTU1DX0RTTCI7CisJCQltZWRpYXRlayxwdWxsLWRvd24tYWR2ID0gPDI+OwkvKiBwdWxsLWRvd24gNTBLICovCisJCX07CisJCWNvbmYtcnN0IHsKKwkJCXBpbnMgPSAiRU1NQ19SU1RCIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV80bUE+OworCQkJbWVkaWF0ZWsscHVsbC11cC1hZHYgPSA8MT47CS8qIHB1bGwtdXAgMTBLICovCisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtL2Jvb3QvZHRzL210Nzk4NmEtcGluY3RybC5kdHNpIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybS9ib290L2R0cy9tdDc5ODZhLXBpbmN0cmwuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjYxOWExCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybS9ib290L2R0cy9tdDc5ODZhLXBpbmN0cmwuZHRzaQpAQCAtMCwwICsxLDE0MSBAQAorJnBpbyB7CisJd2lmaV9sZWRfcGluczogd2lmaV9sZWQtcGlucy0xLTIgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAibGVkIjsKKwkJCWdyb3VwcyA9ICJ3aWZpX2xlZCI7CisJCX07CisJfTsKKworCWkyY19waW5zOiBpMmMtcGlucy0zLTQgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiaTJjIjsKKwkJCWdyb3VwcyA9ICJpMmMiOworCQl9OworCX07CisKKwl1YXJ0MV9waW5zX2cwOiB1YXJ0MS1waW5zLTctdG8tMTAgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAidWFydCI7CisJCQlncm91cHMgPSAidWFydDFfMCI7CisJCX07CisJfTsKKworCXBjaWUwX3BpbnM6IHBjaWUwLXBpbnMtOS0xMC00MSB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJwY2llIjsKKwkJCWdyb3VwcyA9ICJwY2llX2NsayIsICJwY2llX3dha2UiLCAicGNpZV9wZXJlc2V0IjsKKwkJfTsKKwl9OworCisJanRhZ19waW5zOiBqdGFnLXBpbnMtMTEtdG8tMTQgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAianRhZyI7CisJCQlncm91cHMgPSAianRhZyI7CisJCX07CisJfTsKKworCXNwaWNfcGluc19nMDogc3BpYy1waW5zLTExLXRvLTE0IHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInNwaSI7CisJCQlncm91cHMgPSAic3BpMV8wIjsKKwkJfTsKKwl9OworCisJcHdtMV9waW5fZzA6IHB3bTEtcGluLTIwIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInB3bSI7CisJCQlncm91cHMgPSAicHdtMV8xIjsKKwkJfTsKKwl9OworCisJcHdtMF9waW46IHB3bTAtcGluLTIxIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInB3bSI7CisJCQlncm91cHMgPSAicHdtMCI7CisJCX07CisJfTsKKworCXB3bTFfcGluX2cxOiBwd20xLXBpbi0yMiB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJwd20iOworCQkJZ3JvdXBzID0gInB3bTFfMCI7CisJCX07CisJfTsKKworCXNwaWNfcGluc19nMTogc3BpYy1waW5zLTIzLXRvLTI2IHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInNwaSI7CisJCQlncm91cHMgPSAic3BpMV8xIjsKKwkJfTsKKwl9OworCisJdWFydDFfcGluc19nMTogdWFydDEtcGlucy0yMy10by0yNiB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJ1YXJ0IjsKKwkJCWdyb3VwcyA9ICJ1YXJ0MV8xIjsKKwkJfTsKKwl9OworCisJc3BpY19waW5zX2cyOiBzcGljLXBpbnMtMjktdG8tMzIgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAic3BpIjsKKwkJCWdyb3VwcyA9ICJzcGkxXzIiOworCQl9OworCX07CisKKwl1YXJ0MV9waW5zX2cyOiB1YXJ0MS1waW5zLTI5LXRvLTMyIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInVhcnQiOworCQkJZ3JvdXBzID0gInVhcnQxXzIiOworCQl9OworCX07CisKKwl1YXJ0Ml9waW5zX2cwOiB1YXJ0MS1waW5zLTI5LXRvLTMyIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInVhcnQiOworCQkJZ3JvdXBzID0gInVhcnQxXzIiOworCQl9OworCX07CisKKwl1YXJ0Ml9waW5zX2cxOiB1YXJ0MS1waW5zLTIzLXRvLTM2IHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInVhcnQiOworCQkJZ3JvdXBzID0gInVhcnQyXzEiOworCQl9OworCX07CisKKwlzcGljX3BpbnNfZzM6IHNwaWMtcGlucy0zMy10by0zNiB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJzcGkiOworCQkJZ3JvdXBzID0gInNwaTFfMyI7CisJCX07CisJfTsKKworCXVhcnQxX3BpbnNfZzM6IHVhcnQxLXBpbnMtMzUtdG8tMzggeworCQltdXggeworCQkJZnVuY3Rpb24gPSAidWFydCI7CisJCQlncm91cHMgPSAidWFydDFfM19yeF90eCIsICJ1YXJ0MV8zX2N0c19ydHMiOworCQl9OworCX07CisKKwl1YXJ0MV9waW5zOiB1YXJ0MS1waW5zLTQyLXRvLTQ1IHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInVhcnQiOworCQkJZ3JvdXBzID0gInVhcnQxIjsKKwkJfTsKKwl9OworCisJdWFydDJfcGluczogdWFydDEtcGlucy00Ni10by00OSB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJ1YXJ0IjsKKwkJCWdyb3VwcyA9ICJ1YXJ0MiI7CisJCX07CisJfTsKKworCXBjbV9waW5zOiBwY20tcGlucy02Mi10by02NSB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJwY20iOworCQkJZ3JvdXBzID0gInBjbSI7CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtL2Jvb3QvZHRzL210Nzk4NmEtc25maS1uYW5kLXJmYi5kdHMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtL2Jvb3QvZHRzL210Nzk4NmEtc25maS1uYW5kLXJmYi5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE2NDAzOAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3OTg2YS1zbmZpLW5hbmQtcmZiLmR0cwpAQCAtMCwwICsxLDIzOSBAQAorL2R0cy12MS87CisjaW5jbHVkZSAibXQ3OTg2YS5kdHNpIgorI2luY2x1ZGUgIm10Nzk4NmEtcGluY3RybC5kdHNpIgorI2luY2x1ZGUgIm10Nzk4Ni1zbmZpLW5hbmQtcGFydGl0aW9uLmR0c2kiCisvIHsKKwltb2RlbCA9ICJNZWRpYVRlayBNVDc5ODZhIFJGQiI7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODZhLXNuZmktc25hbmQtcmZiIjsKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG4xIGxvZ2xldmVsPTggIFwKKwkJCQllYXJseWNvbj11YXJ0ODI1MCxtbWlvMzIsMHgxMTAwMjAwMCI7CisJfTsKKworCW1lbW9yeSB7CisJCXJlZyA9IDwwIDB4NDAwMDAwMDAgMCAweDEwMDAwMDAwPjsKKwl9OworCisJc291bmRfd204OTYwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5eHgtd204OTYwLW1hY2hpbmUiOworCQltZWRpYXRlayxwbGF0Zm9ybSA9IDwmYWZlPjsKKwkJYXVkaW8tcm91dGluZyA9ICJIZWFkcGhvbmUiLCAiSFBfTCIsCisJCQkJIkhlYWRwaG9uZSIsICJIUF9SIiwKKwkJCQkiTElOUFVUMSIsICJBTUlDIiwKKwkJCQkiUklOUFVUMSIsICJBTUlDIjsKKwkJbWVkaWF0ZWssYXVkaW8tY29kZWMgPSA8JndtODk2MD47CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworCisJc291bmRfc2kzMjE4eCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OXh4LXNpMzIxOHgtbWFjaGluZSI7CisJCW1lZGlhdGVrLHBsYXRmb3JtID0gPCZhZmU+OworCQltZWRpYXRlayxleHQtY29kZWMgPSA8JnByb3NsaWNfc3BpPjsKKwkJc3RhdHVzID0gIm9rYXkiOworCX07Cit9OworCismcHdtIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcHdtMF9waW4gJnB3bTFfcGluX2cxPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1YXJ0MSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnVhcnQxX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1YXJ0MiB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnVhcnQyX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZpMmMwIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmaTJjX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKKworCXdtODk2MDogd204OTYwQDFhIHsKKwkJY29tcGF0aWJsZSA9ICJ3bGYsd204OTYwIjsKKwkJcmVnID0gPDB4MWE+OworCX07Cit9OworCismYXV4YWRjIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismd2F0Y2hkb2cgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZldGggeworCXN0YXR1cyA9ICJva2F5IjsKKworCWdtYWMwOiBtYWNAMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssZXRoLW1hYyI7CisJCXJlZyA9IDwwPjsKKwkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKwkJZml4ZWQtbGluayB7CisJCQlzcGVlZCA9IDwyNTAwPjsKKwkJCWZ1bGwtZHVwbGV4OworCQkJcGF1c2U7CisJCX07CisJfTsKKworCWdtYWMxOiBtYWNAMSB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssZXRoLW1hYyI7CisJCXJlZyA9IDwxPjsKKwkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKwkJZml4ZWQtbGluayB7CisJCQlzcGVlZCA9IDwyNTAwPjsKKwkJCWZ1bGwtZHVwbGV4OworCQkJcGF1c2U7CisJCX07CisJfTsKKworCW1kaW86IG1kaW8tYnVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCXBoeTU6IHBoeUA1IHsKKwkJCWNvbXBhdGlibGUgPSAiZXRoZXJuZXQtcGh5LWlkNjdjOS5kZTBhIjsKKwkJCXJlZyA9IDw1PjsKKwkJCXJlc2V0LWdwaW9zID0gPCZwaW8gNiAxPjsKKwkJCXJlc2V0LWRlYXNzZXJ0LXVzID0gPDIwMDAwPjsKKwkJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCQl9OworCisJCXBoeTY6IHBoeUA2IHsKKwkJCWNvbXBhdGlibGUgPSAiZXRoZXJuZXQtcGh5LWlkNjdjOS5kZTBhIjsKKwkJCXJlZyA9IDw2PjsKKwkJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCQl9OworCisJCXN3aXRjaEAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NTMxIjsKKwkJCXJlZyA9IDwzMT47CisJCQlyZXNldC1ncGlvcyA9IDwmcGlvIDUgMD47CisKKwkJCXBvcnRzIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJCXBvcnRAMCB7CisJCQkJCXJlZyA9IDwwPjsKKwkJCQkJbGFiZWwgPSAibGFuMCI7CisJCQkJfTsKKworCQkJCXBvcnRAMSB7CisJCQkJCXJlZyA9IDwxPjsKKwkJCQkJbGFiZWwgPSAibGFuMSI7CisJCQkJfTsKKworCQkJCXBvcnRAMiB7CisJCQkJCXJlZyA9IDwyPjsKKwkJCQkJbGFiZWwgPSAibGFuMiI7CisJCQkJfTsKKworCQkJCXBvcnRAMyB7CisJCQkJCXJlZyA9IDwzPjsKKwkJCQkJbGFiZWwgPSAibGFuMyI7CisJCQkJfTsKKworCQkJCXBvcnRANiB7CisJCQkJCXJlZyA9IDw2PjsKKwkJCQkJbGFiZWwgPSAiY3B1IjsKKwkJCQkJZXRoZXJuZXQgPSA8JmdtYWMwPjsKKwkJCQkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKwkJCQkJZml4ZWQtbGluayB7CisJCQkJCQlzcGVlZCA9IDwyNTAwPjsKKwkJCQkJCWZ1bGwtZHVwbGV4OworCQkJCQkJcGF1c2U7CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZobmF0IHsKKwltdGtldGgtd2FuID0gImV0aDEiOworCW10a2V0aC1sYW4gPSAibGFuIjsKKwltdGtldGgtbWF4LWdtYWMgPSA8Mj47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnNuYW5kIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc25maV9waW5zPjsKKwltZWRpYXRlayxxdWFkLXNwaTsKKwlzdGF0dXMgPSAib2theSI7CisKKwlwYXJ0aXRpb25zIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1wYXJ0aXRpb25zIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCX07Cit9OworCismc3BpMSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNwaWNfcGluc19nMj47CisJc3RhdHVzID0gIm9rYXkiOworCisJcHJvc2xpY19zcGk6IHByb3NsaWNfc3BpQDAgeworCQljb21wYXRpYmxlID0gInNpbGFicyxwcm9zbGljX3NwaSI7CisJCXJlZyA9IDwwPjsKKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8MTAwMDAwMDA+OworCQlzcGktY3BoYSA9IDwxPjsKKwkJc3BpLWNwb2wgPSA8MT47CisJCWNoYW5uZWxfY291bnQgPSA8MT47CisJCWRlYnVnX2xldmVsID0gPDQ+OyAgICAgICAvKiAxID0gVFJDLCAyID0gREJHLCA0ID0gRVJSICovCisJCXJlc2V0X2dwaW8gPSA8JnBpbyA3IDA+OworCQlpZyxlbmFibGUtc3BpID0gPDE+OyAgICAgLyogMTogRW5hYmxlLCAwOiBEaXNhYmxlICovCisJfTsKK307CisKKyZwY2llMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBjaWUwX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ3YnN5cyB7CisJbWVkaWF0ZWssbXRkLWVlcHJvbSA9IDwmZmFjdG9yeSAweDAwMDA+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwaW8geworCXNuZmlfcGluczogc25maS1waW5zLTIzLXRvLTI4IHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJzbmZpIjsKKwkJfTsKKwkJY29uZi1jbGsgeworCQkJcGlucyA9ICJTUEkwX0NMSyI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfOG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtZG93bi1hZHYgPSA8MD47CS8qIGJpYXMtZGlzYWJsZSAqLworCQl9OworCQljb25mLXB1IHsKKwkJCXBpbnMgPSAiU1BJMF9DUyIsICJTUEkwX0hPTEQiLCAiU1BJMF9XUCI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNm1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtdXAtYWR2ID0gPDA+OwkvKiBiaWFzLWRpc2FibGUgKi8KKwkJfTsKKwkJY29uZi1wZCB7CisJCQlwaW5zID0gIlNQSTBfTU9TSSIsICJTUEkwX01JU08iOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzZtQT47CisJCQltZWRpYXRlayxwdWxsLWRvd24tYWR2ID0gPDA+OwkvKiBiaWFzLWRpc2FibGUgKi8KKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3OTg2YS1zcGltLW5hbmQtcmZiLmR0cyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3OTg2YS1zcGltLW5hbmQtcmZiLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDNiYzRhCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybS9ib290L2R0cy9tdDc5ODZhLXNwaW0tbmFuZC1yZmIuZHRzCkBAIC0wLDAgKzEsMjg1IEBACisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDc5ODZhLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2YS1waW5jdHJsLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2LXNwaW0tbmFuZC1wYXJ0aXRpb24uZHRzaSIKKy8geworCW1vZGVsID0gIk1lZGlhVGVrIE1UNzk4NmEgUkZCIjsKKwljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4NmEtc3BpbS1zbmFuZC1yZmIiOworCWNob3NlbiB7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwbjEgbG9nbGV2ZWw9OCAgXAorCQkJCWVhcmx5Y29uPXVhcnQ4MjUwLG1taW8zMiwweDExMDAyMDAwIjsKKwl9OworCisJbWVtb3J5IHsKKwkJcmVnID0gPDAgMHg0MDAwMDAwMCAwIDB4MTAwMDAwMDA+OworCX07CisKKwlzb3VuZF93bTg5NjAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzl4eC13bTg5NjAtbWFjaGluZSI7CisJCW1lZGlhdGVrLHBsYXRmb3JtID0gPCZhZmU+OworCQlhdWRpby1yb3V0aW5nID0gIkhlYWRwaG9uZSIsICJIUF9MIiwKKwkJCQkiSGVhZHBob25lIiwgIkhQX1IiLAorCQkJCSJMSU5QVVQxIiwgIkFNSUMiLAorCQkJCSJSSU5QVVQxIiwgIkFNSUMiOworCQltZWRpYXRlayxhdWRpby1jb2RlYyA9IDwmd204OTYwPjsKKwkJc3RhdHVzID0gIm9rYXkiOworCX07CisKKwlzb3VuZF9zaTMyMTh4IHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5eHgtc2kzMjE4eC1tYWNoaW5lIjsKKwkJbWVkaWF0ZWsscGxhdGZvcm0gPSA8JmFmZT47CisJCW1lZGlhdGVrLGV4dC1jb2RlYyA9IDwmcHJvc2xpY19zcGk+OworCQlzdGF0dXMgPSAib2theSI7CisJfTsKK307CisKKyZwd20geworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwd20wX3BpbiAmcHdtMV9waW5fZzE+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1YXJ0MCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmdWFydDFfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQyIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmdWFydDJfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmkyYzAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZpMmNfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworCisJd204OTYwOiB3bTg5NjBAMWEgeworCQljb21wYXRpYmxlID0gIndsZix3bTg5NjAiOworCQlyZWcgPSA8MHgxYT47CisJfTsKK307CisKKyZhdXhhZGMgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ3YXRjaGRvZyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmV0aCB7CisJc3RhdHVzID0gIm9rYXkiOworCisJZ21hYzA6IG1hY0AwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKwkJcmVnID0gPDA+OworCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQlmaXhlZC1saW5rIHsKKwkJCXNwZWVkID0gPDI1MDA+OworCQkJZnVsbC1kdXBsZXg7CisJCQlwYXVzZTsKKwkJfTsKKwl9OworCisJZ21hYzE6IG1hY0AxIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKwkJcmVnID0gPDE+OworCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQlmaXhlZC1saW5rIHsKKwkJCXNwZWVkID0gPDI1MDA+OworCQkJZnVsbC1kdXBsZXg7CisJCQlwYXVzZTsKKwkJfTsKKwl9OworCisJbWRpbzogbWRpby1idXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJcGh5NTogcGh5QDUgeworCQkJY29tcGF0aWJsZSA9ICJldGhlcm5ldC1waHktaWQ2N2M5LmRlMGEiOworCQkJcmVnID0gPDU+OworCQkJcmVzZXQtZ3Bpb3MgPSA8JnBpbyA2IDE+OworCQkJcmVzZXQtZGVhc3NlcnQtdXMgPSA8MjAwMDA+OworCQkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisJCX07CisKKwkJcGh5NjogcGh5QDYgeworCQkJY29tcGF0aWJsZSA9ICJldGhlcm5ldC1waHktaWQ2N2M5LmRlMGEiOworCQkJcmVnID0gPDY+OworCQkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisJCX07CisKKwkJc3dpdGNoQDAgeworCQkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc1MzEiOworCQkJcmVnID0gPDMxPjsKKwkJCXJlc2V0LWdwaW9zID0gPCZwaW8gNSAwPjsKKworCQkJcG9ydHMgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQkJcG9ydEAwIHsKKwkJCQkJcmVnID0gPDA+OworCQkJCQlsYWJlbCA9ICJsYW4wIjsKKwkJCQl9OworCisJCQkJcG9ydEAxIHsKKwkJCQkJcmVnID0gPDE+OworCQkJCQlsYWJlbCA9ICJsYW4xIjsKKwkJCQl9OworCisJCQkJcG9ydEAyIHsKKwkJCQkJcmVnID0gPDI+OworCQkJCQlsYWJlbCA9ICJsYW4yIjsKKwkJCQl9OworCisJCQkJcG9ydEAzIHsKKwkJCQkJcmVnID0gPDM+OworCQkJCQlsYWJlbCA9ICJsYW4zIjsKKwkJCQl9OworCisJCQkJcG9ydEA2IHsKKwkJCQkJcmVnID0gPDY+OworCQkJCQlsYWJlbCA9ICJjcHUiOworCQkJCQlldGhlcm5ldCA9IDwmZ21hYzA+OworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmhuYXQgeworCW10a2V0aC13YW4gPSAiZXRoMSI7CisJbXRrZXRoLWxhbiA9ICJsYW4iOworCW10a2V0aC1tYXgtZ21hYyA9IDwyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc3BpMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNwaV9mbGFzaF9waW5zPjsKKwljcy1ncGlvcyA9IDwwPiwgPDA+OworCXN0YXR1cyA9ICJva2F5IjsKKworCXNwaV9ub3JAMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJqZWRlYyxzcGktbm9yIjsKKwkJcmVnID0gPDA+OworCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDw1MjAwMDAwMD47CisJCXNwaS10eC1idXN3aWR0aCA9IDw0PjsKKwkJc3BpLXJ4LWJ1c3dpZHRoID0gPDQ+OworCX07CisKKwlzcGlfbmFuZDogc3BpX25hbmRAMSB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJzcGktbmFuZCI7CisJCXJlZyA9IDwxPjsKKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8NTIwMDAwMDA+OworCQlzcGktdHgtYnVzd2lkdGggPSA8ND47CisJCXNwaS1yeC1idXN3aWR0aCA9IDw0PjsKKwl9OworfTsKKworJnNwaTEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzcGljX3BpbnNfZzI+OworCXN0YXR1cyA9ICJva2F5IjsKKworCXByb3NsaWNfc3BpOiBwcm9zbGljX3NwaUAwIHsKKwkJY29tcGF0aWJsZSA9ICJzaWxhYnMscHJvc2xpY19zcGkiOworCQlyZWcgPSA8MD47CisJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDEwMDAwMDAwPjsKKwkJc3BpLWNwaGEgPSA8MT47CisJCXNwaS1jcG9sID0gPDE+OworCQljaGFubmVsX2NvdW50ID0gPDE+OworCQlkZWJ1Z19sZXZlbCA9IDw0PjsgICAgICAgLyogMSA9IFRSQywgMiA9IERCRywgNCA9IEVSUiAqLworCQlyZXNldF9ncGlvID0gPCZwaW8gNyAwPjsKKwkJaWcsZW5hYmxlLXNwaSA9IDwxPjsgICAgIC8qIDE6IEVuYWJsZSwgMDogRGlzYWJsZSAqLworCX07Cit9OworCismcGNpZTAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwY2llMF9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismd2JzeXMgeworCW1lZGlhdGVrLG10ZC1lZXByb20gPSA8JmZhY3RvcnkgMHgwMDAwPjsKKwlzdGF0dXMgPSAib2theSI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgImRiZGMiOworCXBpbmN0cmwtMCA9IDwmd2ZfMmdfNWdfcGlucz47CisJcGluY3RybC0xID0gPCZ3Zl9kYmRjX3BpbnM+OworfTsKKworJnBpbyB7CisJc3BpX2ZsYXNoX3BpbnM6IHNwaS1mbGFzaC1waW5zLTMzLXRvLTM4IHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJzcGkwIiwgInNwaTBfd3BfaG9sZCI7CisJCX07CisJCWNvbmYtcHUgeworCQkJcGlucyA9ICJTUEkyX0NTIiwgIlNQSTJfSE9MRCIsICJTUEkyX1dQIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV84bUE+OworCQkJbWVkaWF0ZWsscHVsbC11cC1hZHYgPSA8MD47CS8qIGJpYXMtZGlzYWJsZSAqLworCQl9OworCQljb25mLXBkIHsKKwkJCXBpbnMgPSAiU1BJMl9DTEsiLCAiU1BJMl9NT1NJIiwgIlNQSTJfTUlTTyI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfOG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtZG93bi1hZHYgPSA8MD47CS8qIGJpYXMtZGlzYWJsZSAqLworCQl9OworCX07CisKKwl3Zl8yZ181Z19waW5zOiB3Zl8yZ181Zy1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gIndpZmkiOworCQkJZ3JvdXBzID0gIndmXzJnIiwgIndmXzVnIjsKKwkJfTsKKwkJY29uZiB7CisJCQlwaW5zID0gIldGMF9IQjEiLCAiV0YwX0hCMiIsICJXRjBfSEIzIiwgIldGMF9IQjQiLAorCQkJICAgICAgICJXRjBfSEIwIiwgIldGMF9IQjBfQiIsICJXRjBfSEI1IiwgIldGMF9IQjYiLAorCQkJICAgICAgICJXRjBfSEI3IiwgIldGMF9IQjgiLCAiV0YwX0hCOSIsICJXRjBfSEIxMCIsCisJCQkgICAgICAgIldGMF9UT1BfQ0xLIiwgIldGMF9UT1BfREFUQSIsICJXRjFfSEIxIiwKKwkJCSAgICAgICAiV0YxX0hCMiIsICJXRjFfSEIzIiwgIldGMV9IQjQiLCAiV0YxX0hCMCIsCisJCQkgICAgICAgIldGMV9IQjUiLCAiV0YxX0hCNiIsICJXRjFfSEI3IiwgIldGMV9IQjgiLAorCQkJICAgICAgICJXRjFfVE9QX0NMSyIsICJXRjFfVE9QX0RBVEEiOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzRtQT47CisJCX07CisJfTsKKworCXdmX2RiZGNfcGluczogd2ZfZGJkYy1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gIndpZmkiOworCQkJZ3JvdXBzID0gIndmX2RiZGMiOworCQl9OworCQljb25mIHsKKwkJCXBpbnMgPSAiV0YwX0hCMSIsICJXRjBfSEIyIiwgIldGMF9IQjMiLCAiV0YwX0hCNCIsCisJCQkgICAgICAgIldGMF9IQjAiLCAiV0YwX0hCMF9CIiwgIldGMF9IQjUiLCAiV0YwX0hCNiIsCisJCQkgICAgICAgIldGMF9IQjciLCAiV0YwX0hCOCIsICJXRjBfSEI5IiwgIldGMF9IQjEwIiwKKwkJCSAgICAgICAiV0YwX1RPUF9DTEsiLCAiV0YwX1RPUF9EQVRBIiwgIldGMV9IQjEiLAorCQkJICAgICAgICJXRjFfSEIyIiwgIldGMV9IQjMiLCAiV0YxX0hCNCIsICJXRjFfSEIwIiwKKwkJCSAgICAgICAiV0YxX0hCNSIsICJXRjFfSEI2IiwgIldGMV9IQjciLCAiV0YxX0hCOCIsCisJCQkgICAgICAgIldGMV9UT1BfQ0xLIiwgIldGMV9UT1BfREFUQSI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNG1BPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3OTg2YS1zcGltLW5vci1yZmIuZHRzIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybS9ib290L2R0cy9tdDc5ODZhLXNwaW0tbm9yLXJmYi5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc1ZDQ4ZAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3OTg2YS1zcGltLW5vci1yZmIuZHRzCkBAIC0wLDAgKzEsMjM4IEBACisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDc5ODZhLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2YS1waW5jdHJsLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2LXNwaW0tbm9yLXBhcnRpdGlvbi5kdHNpIgorLyB7CisJbW9kZWwgPSAiTWVkaWFUZWsgTVQ3OTg2YSBSRkIiOworCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2YS1ub3ItcmZiIjsKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG4xIGxvZ2xldmVsPTggIFwKKwkJCQllYXJseWNvbj11YXJ0ODI1MCxtbWlvMzIsMHgxMTAwMjAwMCI7CisJfTsKKworCW1lbW9yeSB7CisJCXJlZyA9IDwwIDB4NDAwMDAwMDAgMCAweDEwMDAwMDAwPjsKKwl9OworCisJc291bmRfd204OTYwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5eHgtd204OTYwLW1hY2hpbmUiOworCQltZWRpYXRlayxwbGF0Zm9ybSA9IDwmYWZlPjsKKwkJYXVkaW8tcm91dGluZyA9ICJIZWFkcGhvbmUiLCAiSFBfTCIsCisJCQkJIkhlYWRwaG9uZSIsICJIUF9SIiwKKwkJCQkiTElOUFVUMSIsICJBTUlDIiwKKwkJCQkiUklOUFVUMSIsICJBTUlDIjsKKwkJbWVkaWF0ZWssYXVkaW8tY29kZWMgPSA8JndtODk2MD47CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworCisJc291bmRfc2kzMjE4eCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OXh4LXNpMzIxOHgtbWFjaGluZSI7CisJCW1lZGlhdGVrLHBsYXRmb3JtID0gPCZhZmU+OworCQltZWRpYXRlayxleHQtY29kZWMgPSA8JnByb3NsaWNfc3BpPjsKKwkJc3RhdHVzID0gIm9rYXkiOworCX07Cit9OworCismcHdtIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcHdtMF9waW4gJnB3bTFfcGluX2cxPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1YXJ0MSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnVhcnQxX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1YXJ0MiB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnVhcnQyX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZpMmMwIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmaTJjX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKKworCXdtODk2MDogd204OTYwQDFhIHsKKwkJY29tcGF0aWJsZSA9ICJ3bGYsd204OTYwIjsKKwkJcmVnID0gPDB4MWE+OworCX07Cit9OworCismYXV4YWRjIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismd2F0Y2hkb2cgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZldGggeworCXN0YXR1cyA9ICJva2F5IjsKKworCWdtYWMwOiBtYWNAMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssZXRoLW1hYyI7CisJCXJlZyA9IDwwPjsKKwkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKwkJZml4ZWQtbGluayB7CisJCQlzcGVlZCA9IDwyNTAwPjsKKwkJCWZ1bGwtZHVwbGV4OworCQkJcGF1c2U7CisJCX07CisJfTsKKworCWdtYWMxOiBtYWNAMSB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssZXRoLW1hYyI7CisJCXJlZyA9IDwxPjsKKwkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKwkJZml4ZWQtbGluayB7CisJCQlzcGVlZCA9IDwyNTAwPjsKKwkJCWZ1bGwtZHVwbGV4OworCQkJcGF1c2U7CisJCX07CisJfTsKKworCW1kaW86IG1kaW8tYnVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCXBoeTU6IHBoeUA1IHsKKwkJCWNvbXBhdGlibGUgPSAiZXRoZXJuZXQtcGh5LWlkNjdjOS5kZTBhIjsKKwkJCXJlZyA9IDw1PjsKKwkJCXJlc2V0LWdwaW9zID0gPCZwaW8gNiAxPjsKKwkJCXJlc2V0LWRlYXNzZXJ0LXVzID0gPDIwMDAwPjsKKwkJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCQl9OworCisJCXBoeTY6IHBoeUA2IHsKKwkJCWNvbXBhdGlibGUgPSAiZXRoZXJuZXQtcGh5LWlkNjdjOS5kZTBhIjsKKwkJCXJlZyA9IDw2PjsKKwkJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCQl9OworCisJCXN3aXRjaEAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NTMxIjsKKwkJCXJlZyA9IDwzMT47CisJCQlyZXNldC1ncGlvcyA9IDwmcGlvIDUgMD47CisKKwkJCXBvcnRzIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJCXBvcnRAMCB7CisJCQkJCXJlZyA9IDwwPjsKKwkJCQkJbGFiZWwgPSAibGFuMCI7CisJCQkJfTsKKworCQkJCXBvcnRAMSB7CisJCQkJCXJlZyA9IDwxPjsKKwkJCQkJbGFiZWwgPSAibGFuMSI7CisJCQkJfTsKKworCQkJCXBvcnRAMiB7CisJCQkJCXJlZyA9IDwyPjsKKwkJCQkJbGFiZWwgPSAibGFuMiI7CisJCQkJfTsKKworCQkJCXBvcnRAMyB7CisJCQkJCXJlZyA9IDwzPjsKKwkJCQkJbGFiZWwgPSAibGFuMyI7CisJCQkJfTsKKworCQkJCXBvcnRANiB7CisJCQkJCXJlZyA9IDw2PjsKKwkJCQkJbGFiZWwgPSAiY3B1IjsKKwkJCQkJZXRoZXJuZXQgPSA8JmdtYWMwPjsKKwkJCQkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKwkJCQkJZml4ZWQtbGluayB7CisJCQkJCQlzcGVlZCA9IDwyNTAwPjsKKwkJCQkJCWZ1bGwtZHVwbGV4OworCQkJCQkJcGF1c2U7CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZobmF0IHsKKwltdGtldGgtd2FuID0gImV0aDEiOworCW10a2V0aC1sYW4gPSAibGFuIjsKKwltdGtldGgtbWF4LWdtYWMgPSA8Mj47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnNwaTAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzcGlfZmxhc2hfcGlucz47CisJY3MtZ3Bpb3MgPSA8MD4sIDwwPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwlzcGlfbm9yQDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiamVkZWMsc3BpLW5vciI7CisJCXJlZyA9IDwwPjsKKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8NTIwMDAwMDA+OworCQlzcGktdHgtYnVzd2lkdGggPSA8ND47CisJCXNwaS1yeC1idXN3aWR0aCA9IDw0PjsKKwl9OworfTsKKworJnNwaTEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzcGljX3BpbnNfZzI+OworCXN0YXR1cyA9ICJva2F5IjsKKworCXByb3NsaWNfc3BpOiBwcm9zbGljX3NwaUAwIHsKKwkJY29tcGF0aWJsZSA9ICJzaWxhYnMscHJvc2xpY19zcGkiOworCQlyZWcgPSA8MD47CisJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDEwMDAwMDAwPjsKKwkJc3BpLWNwaGEgPSA8MT47CisJCXNwaS1jcG9sID0gPDE+OworCQljaGFubmVsX2NvdW50ID0gPDE+OworCQlkZWJ1Z19sZXZlbCA9IDw0PjsgICAgICAgLyogMSA9IFRSQywgMiA9IERCRywgNCA9IEVSUiAqLworCQlyZXNldF9ncGlvID0gPCZwaW8gNyAwPjsKKwkJaWcsZW5hYmxlLXNwaSA9IDwxPjsgICAgIC8qIDE6IEVuYWJsZSwgMDogRGlzYWJsZSAqLworCX07Cit9OworCismcGNpZTAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwY2llMF9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismd2JzeXMgeworCW1lZGlhdGVrLG10ZC1lZXByb20gPSA8JmZhY3RvcnkgMHgwMDAwPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismcGlvIHsKKwlzcGlfZmxhc2hfcGluczogc3BpLWZsYXNoLXBpbnMtMzMtdG8tMzggeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiZmxhc2giOworCQkJZ3JvdXBzID0gInNwaTAiLCAic3BpMF93cF9ob2xkIjsKKwkJfTsKKwkJY29uZi1wdSB7CisJCQlwaW5zID0gIlNQSTJfQ1MiLCAiU1BJMl9IT0xEIiwgIlNQSTJfV1AiOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzhtQT47CisJCQltZWRpYXRlayxwdWxsLXVwLWFkdiA9IDwwPjsJLyogYmlhcy1kaXNhYmxlICovCisJCX07CisJCWNvbmYtcGQgeworCQkJcGlucyA9ICJTUEkyX0NMSyIsICJTUEkyX01PU0kiLCAiU1BJMl9NSVNPIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV84bUE+OworCQkJbWVkaWF0ZWsscHVsbC1kb3duLWFkdiA9IDwwPjsJLyogYmlhcy1kaXNhYmxlICovCisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtL2Jvb3QvZHRzL210Nzk4NmEuZHRzaSBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3OTg2YS5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNzI5OTEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtL2Jvb3QvZHRzL210Nzk4NmEuZHRzaQpAQCAtMCwwICsxLDgwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAyMCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IFNhbS5TaGloIDxzYW0uc2hpaEBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9hcm0tZ2ljLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvcGh5L3BoeS5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3Jlc2V0L3RpLXN5c2Nvbi5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2Nsb2NrL210Nzk4Ni1jbGsuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy90aGVybWFsL3RoZXJtYWwuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9waW5jdHJsL210NjV4eC5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3Jlc2V0L210Nzk4Ni1yZXNldHMuaD4KKworLyB7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODZhLXJmYiI7CisJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKwkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkjc2l6ZS1jZWxscyA9IDwyPjsKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQljcHUwOiBjcHVAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE1MyI7CisJCQllbmFibGUtbWV0aG9kID0gInBzY2kiOworCQkJcmVnID0gPDB4MD47CisJCX07CisKKwkJY3B1MTogY3B1QDEgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNTMiOworCQkJZW5hYmxlLW1ldGhvZCA9ICJwc2NpIjsKKwkJCXJlZyA9IDwweDE+OworCQl9OworCisJCWNwdTI6IGNwdUAyIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTUzIjsKKwkJCWVuYWJsZS1tZXRob2QgPSAicHNjaSI7CisJCQlyZWcgPSA8MHgyPjsKKwkJfTsKKworCQljcHUzOiBjcHVAMyB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJZW5hYmxlLW1ldGhvZCA9ICJwc2NpIjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNTMiOworCQkJcmVnID0gPDB4Mz47CisJCX07CisJfTsKKworCXdlZDogd2VkQDE1MDEwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayx3ZWQiOworCQl3ZWRfbnVtID0gPDI+OworCQkvKiBhZGQgdGhpcyBwcm9wZXJ0eSBmb3Igd2VkIGdldCB0aGUgcGNpIHNsb3QgbnVtYmVyLiAqLworCQlwY2lfc2xvdF9tYXAgPSA8MD4sIDwxPjsKKwkJcmVnID0gPDAgMHgxNTAxMDAwMCAwIDB4MTAwMD4sCisJCSAgICAgIDwwIDB4MTUwMTEwMDAgMCAweDEwMDA+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjA1IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8R0lDX1NQSSAyMDYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJfTsKKworCXdlZDI6IHdlZDJAMTUwMTEwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLHdlZDIiOworCQl3ZWRfbnVtID0gPDI+OworCQlyZWcgPSA8MCAweDE1MDEwMDAwIDAgMHgxMDAwPiwKKwkJICAgICAgPDAgMHgxNTAxMTAwMCAwIDB4MTAwMD47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyMDUgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDxHSUNfU1BJIDIwNiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwl9OworCisJd2RtYTogd2RtYUAxNTEwNDgwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssd2VkLXdkbWEiOworCQlyZWcgPSA8MCAweDE1MTA0ODAwIDAgMHg0MDA+LAorCQkgICAgICA8MCAweDE1MTA0YzAwIDAgMHg0MDA+OworCX07CisKKwlhcDJ3b2NjaWY6IGFwMndvY2NpZkAxNTFBNTAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssYXAyd29jY2lmIjsKKwkJcmVnID0gPDAgMHgxNTFBNTAwMCAwIDB4MTAwMD4sCisJCSAgICAgIDwwIDB4MTUxQUQwMDAgMCAweDEwMDA+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjExIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8R0lDX1NQSSAyMTIgSVJRX1RZUEVfTEVWRUxfSElHSD47CisgICAgICAgIH07CisKKwl3b2NwdTBfaWxtOiB3b2NwdTBfaWxtQDE1MUUwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayx3b2NwdTBfaWxtIjsKKwkJcmVnID0gPDAgMHgxNTFFMDAwMCAwIDB4ODAwMD47CisJfTsKKworICAgICAgICB3b2NwdTFfaWxtOiB3b2NwdTFfaWxtQDE1MUYwMDAwIHsKKyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gIm1lZGlhdGVrLHdvY3B1MV9pbG0iOworICAgICAgICAgICAgICAgIHJlZyA9IDwwIDB4MTUxRjAwMDAgMCAweDgwMDA+OworICAgICAgICB9OworCisJd29jcHVfZGxtOiB3b2NwdV9kbG1AMTUxRTgwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLHdvY3B1X2RsbSI7CisJCXJlZyA9IDwwIDB4MTUxRTgwMDAgMCAweDIwMDA+LAorCQkgICAgICA8MCAweDE1MUY4MDAwIDAgMHgyMDAwPjsKKworCQlyZXNldHMgPSA8JmV0aHN5c3JzdCAwPjsKKwkJcmVzZXQtbmFtZXMgPSAid29jcHVfcnN0IjsKKwl9OworCisJY3B1X2Jvb3Q6IHdvY3B1X2Jvb3RAMTUxOTQwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLHdvY3B1X2Jvb3QiOworCQlyZWcgPSA8MCAweDE1MTk0MDAwIDAgMHgxMDAwPjsKKwl9OworCisJcmVzZXJ2ZWQtbWVtb3J5IHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQlyYW5nZXM7CisKKwkJLyogMTkyIEtpQiByZXNlcnZlZCBmb3IgQVJNIFRydXN0ZWQgRmlybXdhcmUgKEJMMzEpICovCisJCXNlY21vbl9yZXNlcnZlZDogc2VjbW9uQDQzMDAwMDAwIHsKKwkJCXJlZyA9IDwwIDB4NDMwMDAwMDAgMCAweDMwMDAwPjsKKwkJCW5vLW1hcDsKKwkJfTsKKworCQl3bWNwdV9lbWk6IHdtY3B1LXJlc2VydmVkQDRGQzAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssd21jcHUtcmVzZXJ2ZWQiOworCQkJbm8tbWFwOworCQkJcmVnID0gPDAgMHg0RkMwMDAwMCAwIDB4MDAxMDAwMDA+OworCQl9OworCisJCXdvY3B1MF9lbWk6IHdvY3B1MF9lbWlANEZEMDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayx3b2NwdTBfZW1pIjsKKwkJCW5vLW1hcDsKKwkJCXJlZyA9IDwwIDB4NEZEMDAwMDAgMCAweDQwMDAwPjsKKwkJCXNoYXJlZCA9IDwwPjsKKwkJfTsKKworCQl3b2NwdTFfZW1pOiB3b2NwdTFfZW1pQDRGRDQwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssd29jcHUxX2VtaSI7CisJCQluby1tYXA7CisJCQlyZWcgPSA8MCAweDRGRDQwMDAwIDAgMHg0MDAwMD47CisJCQlzaGFyZWQgPSA8MD47CisJCX07CisKKwkJd29jcHVfZGF0YTogd29jcHVfZGF0YUA0RkQ4MDAwMCB7CisJCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLHdvY3B1X2RhdGEiOworCQkJbm8tbWFwOworCQkJcmVnID0gPDAgMHg0RkQ4MDAwMCAwIDB4MjQwMDAwPjsKKwkJCXNoYXJlZCA9IDwxPjsKKwkJfTsKKwl9OworCisJcHNjaSB7CisJCWNvbXBhdGlibGUgID0gImFybSxwc2NpLTAuMiI7CisJCW1ldGhvZCAgICAgID0gInNtYyI7CisJfTsKKworCWNsazQwbTogb3NjaWxsYXRvckAwIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMDAwPjsKKwkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsa3h0YWwiOworCX07CisKKwlzeXN0ZW1fY2xrOiBkdW1teV9zeXN0ZW1fY2xrIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDAwMD47CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwl9OworCisJdGltZXIgeworCQljb21wYXRpYmxlID0gImFybSxhcm12OC10aW1lciI7CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMzAwMDAwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1BQSSAxMyBJUlFfVFlQRV9MRVZFTF9MT1c+LAorCQkJICAgICA8R0lDX1BQSSAxNCBJUlFfVFlQRV9MRVZFTF9MT1c+LAorCQkJICAgICA8R0lDX1BQSSAxMSBJUlFfVFlQRV9MRVZFTF9MT1c+LAorCQkJICAgICA8R0lDX1BQSSAxMCBJUlFfVFlQRV9MRVZFTF9MT1c+OworCX07CisKKwlpbmZyYWNmZ19hbzogaW5mcmFjZmdfYW9AMTAwMDEwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni1pbmZyYWNmZ19hbyIsICJzeXNjb24iOworCQlyZWcgPSA8MCAweDEwMDAxMDAwIDAgMHg2OD47CisJCSNjbG9jay1jZWxscyA9IDwxPjsKKwl9OworCisJaW5mcmFjZmc6IGluZnJhY2ZnQDEwMDAxMDQwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtaW5mcmFjZmciLCAic3lzY29uIjsKKwkJcmVnID0gPDAgMHgxMDAwMTA2YyAwIDB4MTAwMD47CisJCSNjbG9jay1jZWxscyA9IDwxPjsKKwl9OworCisJdG9wY2tnZW46IHRvcGNrZ2VuQDEwMDFCMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtdG9wY2tnZW4iLCAic3lzY29uIjsKKwkJcmVnID0gPDAgMHgxMDAxQjAwMCAwIDB4MTAwMD47CisJCSNjbG9jay1jZWxscyA9IDwxPjsKKwl9OworCisJYXBtaXhlZHN5czogYXBtaXhlZHN5c0AxMDAxRTAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LWFwbWl4ZWRzeXMiLCAic3lzY29uIjsKKwkJcmVnID0gPDAgMHgxMDAxRTAwMCAwIDB4MTAwMD47CisJCSNjbG9jay1jZWxscyA9IDwxPjsKKwl9OworCisJd2F0Y2hkb2c6IHdhdGNoZG9nQDEwMDFjMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtd2R0IjsKKwkJcmVnID0gPDAgMHgxMDAxYzAwMCAwIDB4MTAwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMTAgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCSNyZXNldC1jZWxscyA9IDwxPjsKKwl9OworCisJZ2ljOiBpbnRlcnJ1cHQtY29udHJvbGxlckBjMDAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0sZ2ljLXYzIjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCXJlZyA9IDwwIDB4MGMwMDAwMDAgMCAweDQwMDAwPiwgIC8qIEdJQ0QgKi8KKwkJICAgICAgPDAgMHgwYzA4MDAwMCAwIDB4MjAwMDAwPjsgLyogR0lDUiAqLworCisJCWludGVycnVwdHMgPSA8R0lDX1BQSSA5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCX07CisKKwlwd206IHB3bUAxMDA0ODAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXB3bSI7CisJCXJlZyA9IDwwIDB4MTAwNDgwMDAgMCAweDEwMDA+OworCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCSNwd20tY2VsbHMgPSA8Mj47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMzcgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmaW5mcmFjZmcgQ0tfSU5GUkFfUFdNPiwKKwkJCSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX1BXTV9CU0VMPiwKKwkJCSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX1BXTTFfQ0s+LAorCQkJIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfUFdNMl9DSz47CisJCWFzc2lnbmVkLWNsb2NrcyA9IDwmdG9wY2tnZW4gQ0tfVE9QX1BXTV9TRUw+LAorCQkJCSAgPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9QV01fQlNFTD4sCisJCQkJICA8JmluZnJhY2ZnX2FvIENLX0lORlJBX1BXTTFfU0VMPiwKKwkJCQkgIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfUFdNMl9TRUw+OworCQlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZ0b3Bja2dlbiBDS19UT1BfQ0JfTV9END4sCisJCQkJCSA8JmluZnJhY2ZnIENLX0lORlJBX1BXTT4sCisJCQkJCSA8JmluZnJhY2ZnIENLX0lORlJBX1BXTT4sCisJCQkJCSA8JmluZnJhY2ZnIENLX0lORlJBX1BXTT47CisJCWNsb2NrLW5hbWVzID0gInRvcCIsICJtYWluIiwgInB3bTEiLCAicHdtMiI7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXVhcnQwOiBzZXJpYWxAMTEwMDIwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni11YXJ0IiwKKwkJCSAgICAgIm1lZGlhdGVrLG10NjU3Ny11YXJ0IjsKKwkJcmVnID0gPDAgMHgxMTAwMjAwMCAwIDB4NDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEyMyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9VQVJUMF9DSz47CisJCWFzc2lnbmVkLWNsb2NrcyA9IDwmdG9wY2tnZW4gQ0tfVE9QX1VBUlRfU0VMPiwKKwkJCQkgIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfVUFSVDBfU0VMPjsKKwkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmdG9wY2tnZW4gQ0tfVE9QX0NCX0NLU1FfNDBNPiwKKwkJCQkJIDwmaW5mcmFjZmcgQ0tfSU5GUkFfVUFSVD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXVhcnQxOiBzZXJpYWxAMTEwMDMwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni11YXJ0IiwKKwkJCSAgICAgIm1lZGlhdGVrLG10NjU3Ny11YXJ0IjsKKwkJcmVnID0gPDAgMHgxMTAwMzAwMCAwIDB4NDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEyNCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9VQVJUMV9DSz47CisJCWFzc2lnbmVkLWNsb2NrcyA9IDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfVUFSVDFfU0VMPjsKKwkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmaW5mcmFjZmcgQ0tfSU5GUkFfQ0tfRjI2TT47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXVhcnQyOiBzZXJpYWxAMTEwMDQwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni11YXJ0IiwKKwkJCSAgICAgIm1lZGlhdGVrLG10NjU3Ny11YXJ0IjsKKwkJcmVnID0gPDAgMHgxMTAwNDAwMCAwIDB4NDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEyNSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9VQVJUMl9DSz47CisJCWFzc2lnbmVkLWNsb2NrcyA9IDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfVUFSVDJfU0VMPjsKKwkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmaW5mcmFjZmcgQ0tfSU5GUkFfQ0tfRjI2TT47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworICAgICAgICBpMmMwOiBpMmNAMTEwMDgwMDAgeworICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LWkyYyI7CisgICAgICAgICAgICAgICAgcmVnID0gPDAgMHgxMTAwODAwMCAwIDB4OTA+LAorICAgICAgICAgICAgICAgICAgICAgIDwwIDB4MTAyMTcwODAgMCAweDgwPjsKKyAgICAgICAgICAgICAgICBpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTM2IElSUV9UWVBFX0xFVkVMX0hJR0g+OworICAgICAgICAgICAgICAgIGNsb2NrLWRpdiA9IDw1PjsKKyAgICAgICAgICAgICAgICBjbG9ja3MgPSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX0kyQ09fQ0s+LAorICAgICAgICAgICAgICAgICAgICAgICAgIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfQVBfRE1BX0NLPjsKKyAgICAgICAgICAgICAgICBjbG9jay1uYW1lcyA9ICJtYWluIiwgImRtYSI7CisgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSA8MT47CisgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSA8MD47CisgICAgICAgICAgICAgICAgc3RhdHVzID0gImRpc2FibGVkIjsKKyAgICAgICAgfTsKKworCXRoZXJtYWwtem9uZXMgeworCQljcHVfdGhlcm1hbDogY3B1LXRoZXJtYWwgeworCQkJcG9sbGluZy1kZWxheS1wYXNzaXZlID0gPDEwMDA+OworCQkJcG9sbGluZy1kZWxheSA9IDwxMDAwPjsKKwkJCXRoZXJtYWwtc2Vuc29ycyA9IDwmdGhlcm1hbCAwPjsKKwkJfTsKKwl9OworCisJdGhlcm1hbDogdGhlcm1hbEAxMTAwYzgwMCB7CisJCSN0aGVybWFsLXNlbnNvci1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtdGhlcm1hbCI7CisJCXJlZyA9IDwwIDB4MTEwMGM4MDAgMCAweDgwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMzggSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfVEhFUk1fQ0s+LAorCQkJIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfQURDXzI2TV9DSz4sCisJCQkgPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9BRENfRlJDX0NLPjsKKwkJY2xvY2stbmFtZXMgPSAidGhlcm0iLCAiYXV4YWRjIiwgImFkY18zMmsiOworCQltZWRpYXRlayxhdXhhZGMgPSA8JmF1eGFkYz47CisJCW1lZGlhdGVrLGFwbWl4ZWRzeXMgPSA8JmFwbWl4ZWRzeXM+OworCQludm1lbS1jZWxscyA9IDwmdGhlcm1hbF9jYWxpYnJhdGlvbj47CisJCW52bWVtLWNlbGwtbmFtZXMgPSAiY2FsaWJyYXRpb24tZGF0YSI7CisJfTsKKworCXBjaWUwOiBwY2llQDExMjgwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtcGNpZSI7CisJCXJlZyA9IDwwIDB4MTEyODAwMDAgMCAweDUwMDA+OworCQlyZWctbmFtZXMgPSAicGNpZS1tYWMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNjggSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWJ1cy1yYW5nZSA9IDwweDAwIDB4ZmY+OworCQlyYW5nZXMgPSA8MHg4MjAwMDAwMCAwIDB4MjAwMDAwMDAKKwkJCSAgMHgwIDB4MjAwMDAwMDAgMCAweDEwMDAwMDAwPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKworCQljbG9ja3MgPSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX1BDSUVfU0VMPiwKKwkJCSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX0lQQ0lFX0NLPiwKKwkJCSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX0lQQ0lFX1BJUEVfQ0s+LAorCQkJIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfSVBDSUVSX0NLPiwKKwkJCSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX0lQQ0lFQl9DSz47CisKKwkJcGh5cyA9IDwmcGNpZXBvcnQgUEhZX1RZUEVfUENJRT47CisJCXBoeS1uYW1lcyA9ICJwY2llLXBoeSI7CisKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDAgMCAwIDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPDAgMCAwIDEgJnBjaWVfaW50YzAgMD4sCisJCQkJPDAgMCAwIDIgJnBjaWVfaW50YzAgMT4sCisJCQkJPDAgMCAwIDMgJnBjaWVfaW50YzAgMj4sCisJCQkJPDAgMCAwIDQgJnBjaWVfaW50YzAgMz47CisJCXBjaWVfaW50YzA6IGludGVycnVwdC1jb250cm9sbGVyIHsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQl9OworCX07CisKKwljcnlwdG86IGNyeXB0b0AxMDMyMDAwMCB7CisJCWNvbXBhdGlibGUgPSAiaW5zaWRlLXNlY3VyZSxzYWZleGNlbC1laXA5NyI7CisJCXJlZyA9IDwwIDB4MTAzMjAwMDAgMCAweDQwMDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDExNiBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPEdJQ19TUEkgMTE3IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8R0lDX1NQSSAxMTggSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDxHSUNfU1BJIDExOSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJaW50ZXJydXB0LW5hbWVzID0gInJpbmcwIiwgInJpbmcxIiwgInJpbmcyIiwgInJpbmczIjsKKwkJY2xvY2tzID0gPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9FSVA5N19DSz47CisJCWNsb2NrLW5hbWVzID0gImluZnJhX2VpcDk3X2NrIjsKKwkJYXNzaWduZWQtY2xvY2tzID0gPCZ0b3Bja2dlbiBDS19UT1BfRUlQX0JfU0VMPjsKKwkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmdG9wY2tnZW4gQ0tfVE9QX0NCX05FVDJfODAwTT47CisJfTsKKworCXBpbzogcGluY3RybEAxMDAxZjAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXBpbmN0cmwiOworCQlyZWcgPSA8MCAweDEwMDFmMDAwIDAgMHgxMDAwPiwKKwkJICAgICAgPDAgMHgxMWMzMDAwMCAwIDB4MTAwMD4sCisJCSAgICAgIDwwIDB4MTFjNDAwMDAgMCAweDEwMDA+LAorCQkgICAgICA8MCAweDExZTIwMDAwIDAgMHgxMDAwPiwKKwkJICAgICAgPDAgMHgxMWUzMDAwMCAwIDB4MTAwMD4sCisJCSAgICAgIDwwIDB4MTFmMDAwMDAgMCAweDEwMDA+LAorCQkgICAgICA8MCAweDExZjEwMDAwIDAgMHgxMDAwPiwKKwkJICAgICAgPDAgMHgxMDAwYjAwMCAwIDB4MTAwMD47CisJCXJlZy1uYW1lcyA9ICJncGlvX2Jhc2UiLCAiaW9jZmdfcnRfYmFzZSIsICJpb2NmZ19yYl9iYXNlIiwKKwkJCSAgICAiaW9jZmdfbHRfYmFzZSIsICJpb2NmZ19sYl9iYXNlIiwgImlvY2ZnX3RyX2Jhc2UiLAorCQkJICAgICJpb2NmZ190bF9iYXNlIiwgImVpbnQiOworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCQlncGlvLXJhbmdlcyA9IDwmcGlvIDAgMCAxMDA+OworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDIyNSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZXRoc3lzOiBzeXNjb25AMTUwMDAwMDAgeworICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gPDE+OworICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gPDE+OworICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LWV0aHN5c19jayIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzeXNjb24iOworICAgICAgICAgICAgICAgIHJlZyA9IDwwIDB4MTUwMDAwMDAgMCAweDEwMDA+OworICAgICAgICAgICAgICAgICNjbG9jay1jZWxscyA9IDwxPjsKKyAgICAgICAgICAgICAgICAjcmVzZXQtY2VsbHMgPSA8MT47CisKKwkJZXRoc3lzcnN0OiByZXNldC1jb250cm9sbGVyIHsKKwkJCWNvbXBhdGlibGUgPSAidGksc3lzY29uLXJlc2V0IjsKKwkJCSNyZXNldC1jZWxscyA9IDwxPjsKKwkJCXRpLHJlc2V0LWJpdHMgPSA8MHgzNCA0IDB4MzQgNCAweDM0IDQgKEFTU0VSVF9TRVQgfCBERUFTU0VSVF9DTEVBUiB8IFNUQVRVU19TRVQpPjsKKwkJfTsKKyAgICAgICAgfTsKKworICAgICAgICBldGg6IGV0aGVybmV0QDE1MTAwMDAwIHsKKyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni1ldGgiOworICAgICAgICAgICAgICAgIHJlZyA9IDwwIDB4MTUxMDAwMDAgMCAweDgwMDAwPjsKKyAgICAgICAgICAgICAgICBpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTk2IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8R0lDX1NQSSAxOTcgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxHSUNfU1BJIDE5OCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEdJQ19TUEkgMTk5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworICAgICAgICAgICAgICAgIGNsb2NrcyA9IDwmZXRoc3lzIENLX0VUSF9GRV9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZldGhzeXMgQ0tfRVRIX0dQMl9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZldGhzeXMgQ0tfRVRIX0dQMV9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZldGhzeXMgQ0tfRVRIX1dPQ1BVMV9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZldGhzeXMgQ0tfRVRIX1dPQ1BVMF9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZzZ21paXN5czAgQ0tfU0dNMF9UWF9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZzZ21paXN5czAgQ0tfU0dNMF9SWF9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZzZ21paXN5czAgQ0tfU0dNMF9DSzBfRU4+LAorICAgICAgICAgICAgICAgICAgICAgICAgIDwmc2dtaWlzeXMwIENLX1NHTTBfQ0RSX0NLMF9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZzZ21paXN5czEgQ0tfU0dNMV9UWF9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZzZ21paXN5czEgQ0tfU0dNMV9SWF9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZzZ21paXN5czEgQ0tfU0dNMV9DSzFfRU4+LAorICAgICAgICAgICAgICAgICAgICAgICAgIDwmc2dtaWlzeXMxIENLX1NHTTFfQ0RSX0NLMV9FTj47CisgICAgICAgICAgICAgICAgY2xvY2stbmFtZXMgPSAiZmUiLCAiZ3AyIiwgImdwMSIsICJ3b2NwdTEiLCAid29jcHUwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2dtaWlfdHgyNTBtIiwgInNnbWlpX3J4MjUwbSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgInNnbWlpX2Nkcl9yZWYiLCAic2dtaWlfY2RyX2ZiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2dtaWkyX3R4MjUwbSIsICJzZ21paTJfcngyNTBtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2dtaWkyX2Nkcl9yZWYiLCAic2dtaWkyX2Nkcl9mYiI7CisJCWFzc2lnbmVkLWNsb2NrcyA9IDwmdG9wY2tnZW4gQ0tfVE9QX05FVFNZU18yWF9TRUw+LAorCQkJCSAgPCZ0b3Bja2dlbiBDS19UT1BfU0dNXzMyNU1fU0VMPjsKKwkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmdG9wY2tnZW4gQ0tfVE9QX0NCX05FVDJfODAwTT4sCisJCQkJCSA8JnRvcGNrZ2VuIENLX1RPUF9DQl9TR01fMzI1TT47CisgICAgICAgICAgICAgICAgbWVkaWF0ZWssZXRoc3lzID0gPCZldGhzeXM+OworCQltZWRpYXRlayxzZ21paXN5cyA9IDwmc2dtaWlzeXMwPiwgPCZzZ21paXN5czE+OworICAgICAgICAgICAgICAgICNyZXNldC1jZWxscyA9IDwxPjsKKyAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IDwxPjsKKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IDwwPjsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSAiZGlzYWJsZWQiOworICAgICAgICB9OworCisJaG5hdDogaG5hdEAxNTAwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXRrLWhuYXRfdjQiOworCQlyZWcgPSA8MCAweDE1MTAwMDAwIDAgMHg4MDAwMD47CisJCXJlc2V0cyA9IDwmZXRoc3lzIDA+OworCQlyZXNldC1uYW1lcyA9ICJtdGtldGgiOworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwlzZ21paXN5czA6IHN5c2NvbkAxMDA2MDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXNnbWlpc3lzIiwKKwkJCQkibWVkaWF0ZWssbXQ3OTg2LXNnbWlpc3lzXzAiLAorCQkJCSJzeXNjb24iOworCQlyZWcgPSA8MCAweDEwMDYwMDAwIDAgMHgxMDAwPjsKKwkJI2Nsb2NrLWNlbGxzID0gPDE+OworCX07CisKKwlzZ21paXN5czE6IHN5c2NvbkAxMDA3MDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXNnbWlpc3lzIiwKKwkJCQkgIm1lZGlhdGVrLG10Nzk4Ni1zZ21paXN5c18xIiwKKwkJCQkgInN5c2NvbiI7CisJCXJlZyA9IDwwIDB4MTAwNzAwMDAgMCAweDEwMDA+OworCQkjY2xvY2stY2VsbHMgPSA8MT47CisJfTsKKworCXNuYW5kOiBzbmZpQDExMDA1MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtc25hbmQiOworCQlyZWcgPSA8MCAweDExMDA1MDAwIDAgMHgxMDAwPiwgPDAgMHgxMTAwNjAwMCAwIDB4MTAwMD47CisJCXJlZy1uYW1lcyA9ICJuZmkiLCAiZWNjIjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEyMSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9TUElORkkxX0NLPiwKKwkJCSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX05GSTFfQ0s+LAorCQkJIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfTkZJX0hDS19DSz47CisJCWNsb2NrLW5hbWVzID0gInBhZF9jbGsiLCAibmZpX2NsayIsICJuZmlfaGNsayI7CisJCWFzc2lnbmVkLWNsb2NrcyA9IDwmdG9wY2tnZW4gQ0tfVE9QX1NQSU5GSV9TRUw+LAorCQkJIAkgIDwmdG9wY2tnZW4gQ0tfVE9QX05GSTFYX1NFTD47CisJCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JnRvcGNrZ2VuIENLX1RPUF9DQl9NX0Q4PiwKKwkJCQkJIDwmdG9wY2tnZW4gQ0tfVE9QX0NCX01fRDg+OworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXdic3lzOiB3YnN5c0AxODAwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssd2JzeXMiLAorCQkJICAgICAibWVkaWF0ZWssbXQ3OTg2LXdtYWMiOworCQlyZXNldHMgPSA8JndhdGNoZG9nIE1UNzk4Nl9UT1BSR1VfQ09OU1lTX1JTVD47CisJCXJlc2V0LW5hbWVzID0gImNvbnN5cyI7CisJCXJlZyA9IDwwIDB4MTgwMDAwMDAgMCAweDEwMDAwMDA+LAorCQkgICAgICA8MCAweDEwMDAzMDAwIDAgMHgxMDAwPiwKKwkJICAgICAgPDAgMHgxMWQxMDAwMCAwIDB4MTAwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyMTMgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJCSA8R0lDX1NQSSAyMTQgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJCSA8R0lDX1NQSSAyMTUgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJCSA8R0lDX1NQSSAyMTYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNoaXBfaWQgPSA8MHg3OTg2PjsKKwkJbWVtb3J5LXJlZ2lvbiA9IDwmd21jcHVfZW1pPjsKKwl9OworCisJd2VkX3BjaWU6IHdlZF9wY2llQDEwMDAzMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayx3ZWRfcGNpZSI7CisJCXJlZyA9IDwwIDB4MTAwMDMwMDAgMCAweDEwPjsKKwl9OworCisJc3BpMDogc3BpQDExMDBhMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxpcG0tc3BpLXF1YWQiOworCQlyZWcgPSA8MCAweDExMDBhMDAwIDAgMHgxMDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTQwIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8JnRvcGNrZ2VuIENLX1RPUF9DQl9NX0QyPiwKKwkJCSA8JnRvcGNrZ2VuIENLX1RPUF9TUElfU0VMPiwKKwkJCSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX1NQSTBfQ0s+LAorCQkJIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfU1BJMF9IQ0tfQ0s+OworCQljbG9jay1uYW1lcyA9ICJwYXJlbnQtY2xrIiwgInNlbC1jbGsiLCAic3BpLWNsayIsICJzcGktaGNsayI7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXNwaTE6IHNwaUAxMTAwYjAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssaXBtLXNwaS1zaW5nbGUiOworCQlyZWcgPSA8MCAweDExMDBiMDAwIDAgMHgxMDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTQxIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8JnRvcGNrZ2VuIENLX1RPUF9DQl9NX0QyPiwKKwkJCSA8JnRvcGNrZ2VuIENLX1RPUF9TUElNX01TVF9TRUw+LAorCQkJIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfU1BJMV9DSz4sCisJCQkgPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9TUEkxX0hDS19DSz47CisJCWNsb2NrLW5hbWVzID0gInBhcmVudC1jbGsiLCAic2VsLWNsayIsICJzcGktY2xrIiwgInNwaS1oY2xrIjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJbW1jMDogbW1jQDExMjMwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtbW1jIjsKKwkJcmVnID0gPDAgMHgxMTIzMDAwMCAwIDB4MTAwMD4sCisJCQk8MCAweDExYzIwMDAwIDAgMHgxMDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE0MyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZ0b3Bja2dlbiBDS19UT1BfRU1NQ180MTZNPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0VNTUNfMjUwTT4sCisJCQk8JmluZnJhY2ZnX2FvIENLX0lORlJBX01TRENfQ0s+OworCQljbG9jay1uYW1lcyA9ICJzb3VyY2UiLCAiaGNsayIsICJzb3VyY2VfY2ciOworCQlhc3NpZ25lZC1jbG9ja3MgPSA8JnRvcGNrZ2VuIENLX1RPUF9FTU1DXzQxNk1fU0VMPiwKKwkJCQkgIDwmdG9wY2tnZW4gQ0tfVE9QX0VNTUNfMjUwTV9TRUw+OworCQlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZ0b3Bja2dlbiBDS19UT1BfQ0JfTV80MTZNPiwKKwkJCQkJIDwmdG9wY2tnZW4gQ0tfVE9QX05FVDFfRDVfRDI+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwlhdXhhZGM6IGFkY0AxMTAwZDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LWF1eGFkYyIsCisJCQkgICAgICJtZWRpYXRlayxtdDc2MjItYXV4YWRjIjsKKwkJcmVnID0gPDAgMHgxMTAwZDAwMCAwIDB4MTAwMD47CisJCWNsb2NrcyA9IDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfQURDXzI2TV9DSz4sCisJCQkgPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9BRENfRlJDX0NLPjsKKwkJY2xvY2stbmFtZXMgPSAibWFpbiIsICIzMmsiOworCQkjaW8tY2hhbm5lbC1jZWxscyA9IDwxPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJY29uc3lzOiBjb25zeXNAMTAwMDAwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni1jb25zeXMiOworCQlyZWcgPSA8MCAweDEwMDAwMDAwIDAgMHg4NjAwMDAwPjsKKwkJbWVtb3J5LXJlZ2lvbiA9IDwmd21jcHVfZW1pPjsKKwl9OworCisJeGhjaTogeGhjaUAxMTIwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXhoY2kiLAorCQkJICAgICAibWVkaWF0ZWssbXRrLXhoY2kiOworCQlyZWcgPSA8MCAweDExMjAwMDAwIDAgMHgyZTAwPiwKKwkJICAgICAgPDAgMHgxMTIwM2UwMCAwIDB4MDEwMD47CisJCXJlZy1uYW1lcyA9ICJtYWMiLCAiaXBwYyI7CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNzMgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCXBoeXMgPSA8JnUycG9ydDAgUEhZX1RZUEVfVVNCMj4sCisJCSAgICAgICA8JnUzcG9ydDAgUEhZX1RZUEVfVVNCMz4sCisJCSAgICAgICA8JnUycG9ydDEgUEhZX1RZUEVfVVNCMj47CisJCWNsb2NrcyA9IDwmc3lzdGVtX2Nsaz4sCisJCQkgPCZzeXN0ZW1fY2xrPiwKKwkJCSA8JnN5c3RlbV9jbGs+LAorCQkJIDwmc3lzdGVtX2Nsaz4sCisJCQkgPCZzeXN0ZW1fY2xrPjsKKwkJY2xvY2stbmFtZXMgPSAic3lzX2NrIiwKKwkJCSAgICAgICJ4aGNpX2NrIiwKKwkJCSAgICAgICJyZWZfY2siLAorCQkJICAgICAgIm1jdV9jayIsCisJCQkgICAgICAiZG1hX2NrIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQlzdGF0dXMgPSAib2theSI7CisJfTsKKworCXBjaWV0cGh5OiBwY2llLXBoeUAxMWMwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2IiwKKwkJCSAgICAgIm1lZGlhdGVrLGdlbmVyaWMtdHBoeS12NCI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJcmFuZ2VzOworCQlzdGF0dXMgPSAib2theSI7CisKKwkJcGNpZXBvcnQ6IHBjaWUtcGh5QDExYzAwMDAwIHsKKwkJCXJlZyA9IDwwIDB4MTFjMDAwMDAgMCAweDIwMDAwPjsKKwkJCWNsb2NrcyA9IDwmc3lzdGVtX2Nsaz47CisJCQljbG9jay1uYW1lcyA9ICJyZWYiOworCQkJI3BoeS1jZWxscyA9IDwxPjsKKwkJCWF1dG9fbG9hZF92YWxpZDsKKwkJCWF1dG9fbG9hZF92YWxpZF9sbjE7CisJCQludm1lbS1jZWxscyA9IDwmcGNpZV9pbnRyX2xuMD4sCisJCQkJICAgICAgPCZwY2llX3J4X2ltcF9sbjA+LAorCQkJCSAgICAgIDwmcGNpZV90eF9pbXBfbG4wPiwKKwkJCQkgICAgICA8JnBjaWVfYXV0b19sb2FkX3ZhbGlkX2xuMD4sCisJCQkJICAgICAgPCZwY2llX2ludHJfbG4xPiwKKwkJCQkgICAgICA8JnBjaWVfcnhfaW1wX2xuMT4sCisJCQkJICAgICAgPCZwY2llX3R4X2ltcF9sbjE+LAorCQkJCSAgICAgIDwmcGNpZV9hdXRvX2xvYWRfdmFsaWRfbG4xPjsKKwkJCW52bWVtLWNlbGwtbmFtZXMgPSAiaW50ciIsCisJCQkJCSAgICJyeF9pbXAiLAorCQkJCQkgICAidHhfaW1wIiwKKwkJCQkJICAgImF1dG9fbG9hZF92YWxpZCIsCisJCQkJCSAgICJpbnRyX2xuMSIsCisJCQkJCSAgICJyeF9pbXBfbG4xIiwKKwkJCQkJICAgInR4X2ltcF9sbjEiLAorCQkJCQkgICAiYXV0b19sb2FkX3ZhbGlkX2xuMSI7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisJfTsKKworCXVzYnRwaHk6IHVzYi1waHlAMTFlMTAwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4NiIsCisJCQkgICAgICJtZWRpYXRlayxnZW5lcmljLXRwaHktdjIiOworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCXJhbmdlczsKKwkJc3RhdHVzID0gIm9rYXkiOworCisJCXUycG9ydDA6IHVzYi1waHlAMTFlMTAwMDAgeworCQkJcmVnID0gPDAgMHgxMWUxMDAwMCAwIDB4NzAwPjsKKwkJCWNsb2NrcyA9IDwmc3lzdGVtX2Nsaz47CisJCQljbG9jay1uYW1lcyA9ICJyZWYiOworCQkJI3BoeS1jZWxscyA9IDwxPjsKKwkJCWF1dG9fbG9hZF92YWxpZDsKKwkJCW52bWVtLWNlbGxzID0gPCZ1Ml9pbnRyX3AwPiwgPCZ1Ml9hdXRvX2xvYWRfdmFsaWRfcDA+OworCQkJbnZtZW0tY2VsbC1uYW1lcyA9ICJpbnRyIiwgImF1dG9fbG9hZF92YWxpZCI7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJdTNwb3J0MDogdXNiLXBoeUAxMWUxMDcwMCB7CisJCQlyZWcgPSA8MCAweDExZTEwNzAwIDAgMHg5MDA+OworCQkJY2xvY2tzID0gPCZzeXN0ZW1fY2xrPjsKKwkJCWNsb2NrLW5hbWVzID0gInJlZiI7CisJCQkjcGh5LWNlbGxzID0gPDE+OworCQkJYXV0b19sb2FkX3ZhbGlkOworCQkJbnZtZW0tY2VsbHMgPSA8JmNvbWJfaW50cl9wMD4sCisJCQkgICAgICA8JmNvbWJfcnhfaW1wX3AwPiwKKwkJCSAgICAgIDwmY29tYl90eF9pbXBfcDA+LAorCQkJICAgICAgPCZjb21iX2F1dG9fbG9hZF92YWxpZD47CisJCQludm1lbS1jZWxsLW5hbWVzID0gImludHIiLCAicnhfaW1wIiwgInR4X2ltcCIsICJhdXRvX2xvYWRfdmFsaWQiOworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCXUycG9ydDE6IHVzYi1waHlAMTFlMTEwMDAgeworCQkJcmVnID0gPDAgMHgxMWUxMTAwMCAwIDB4NzAwPjsKKwkJCWNsb2NrcyA9IDwmc3lzdGVtX2Nsaz47CisJCQljbG9jay1uYW1lcyA9ICJyZWYiOworCQkJI3BoeS1jZWxscyA9IDwxPjsKKwkJCWF1dG9fbG9hZF92YWxpZDsKKwkJCW52bWVtLWNlbGxzID0gPCZ1Ml9pbnRyX3AxPiwgPCZ1Ml9hdXRvX2xvYWRfdmFsaWRfcDE+OworCQkJbnZtZW0tY2VsbC1uYW1lcyA9ICJpbnRyIiwgImF1dG9fbG9hZF92YWxpZCI7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisJfTsKKworCWNsa2l0ZzogY2xraXRnIHsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwl9OworCisJYWZlOiBhdWRpby1jb250cm9sbGVyQDExMjEwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5eHgtYXVkaW8iOworCQlyZWcgPSA8MCAweDExMjEwMDAwIDAgMHg5MDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEwNiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9BVURfQlVTX0NLPiwKKwkJCSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX0FVRF8yNk1fQ0s+LAorCQkJIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfQVVEX0xfQ0s+LAorCQkJIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfQVVEX0FVRF9DSz4sCisJCQkgPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9BVURfRUcyX0NLPjsKKwkJY2xvY2stbmFtZXMgPSAiYXVkX2J1c19jayIsCisJCQkgICAgICAiYXVkXzI2bV9jayIsCisJCQkgICAgICAiYXVkX2xfY2siLAorCQkJICAgICAgImF1ZF9hdWRfY2siLAorCQkJICAgICAgImF1ZF9lZzJfY2siOworCQlhc3NpZ25lZC1jbG9ja3MgPSA8JnRvcGNrZ2VuIENLX1RPUF9BMVNZU19TRUw+LAorCQkJCSAgPCZ0b3Bja2dlbiBDS19UT1BfQVVEX0xfU0VMPiwKKwkJCQkgIDwmdG9wY2tnZW4gQ0tfVE9QX0FfVFVORVJfU0VMPjsKKwkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmdG9wY2tnZW4gQ0tfVE9QX0FQTEwyX0Q0PiwKKwkJCQkJIDwmdG9wY2tnZW4gQ0tfVE9QX0NCX0FQTEwyXzE5Nk0+LAorCQkJCQkgPCZ0b3Bja2dlbiBDS19UT1BfQVBMTDJfRDQ+OworCX07CisKKwl0cm5nOiB0cm5nQDEwMjBmMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtcm5nIiwKKwkJCSAgICAgIm1lZGlhdGVrLG10NzYyMy1ybmciOworCQlyZWcgPSA8MCAweDEwMjBmMDAwIDAgMHgxMDA+OworCQljbG9ja3MgPSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX1RSTkdfQ0s+OworCQljbG9jay1uYW1lcyA9ICJybmciOworCX07CisKKwlpY2U6IGljZV9kZWJ1ZyB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LWljZV9kZWJ1ZyIsCisJCQkibWVkaWF0ZWssbXQyNzAxLWljZV9kZWJ1ZyI7CisJCWNsb2NrcyA9IDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfREJHX0NLPiwKKwkJCSA8JnRvcGNrZ2VuIENLX1RPUF9BUk1fREJfSlRTRUw+OworCQljbG9jay1uYW1lcyA9ICJpY2VfZGJnIiwgImRiZ19qdHNlbCI7CisJfTsKKworCWVmdXNlOiBlZnVzZUAxMWQwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LWVmdXNlIiwKKwkJCSAgICAgIm1lZGlhdGVrLGVmdXNlIjsKKwkJcmVnID0gPDAgMHgxMWQwMDAwMCAwIDB4MTAwMD47CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQl0aGVybWFsX2NhbGlicmF0aW9uOiBjYWxpYkAyNzQgeworCQkJcmVnID0gPDB4Mjc0IDB4Yz47CisJCX07CisKKwkJY29tYl9hdXRvX2xvYWRfdmFsaWQ6IHVzYjMtYWx2LWltcEA4ZGEgeworCQkJcmVnID0gPDB4OGRhIDE+OworCQkJYml0cyA9IDwwIDE+OworCQl9OworCisJCWNvbWJfcnhfaW1wX3AwOiB1c2IzLXJ4LWltcEA4ZDggeworCQkJcmVnID0gPDB4OGQ4IDE+OworCQkJYml0cyA9IDwwIDU+OworCQl9OworCisJCWNvbWJfdHhfaW1wX3AwOiB1c2IzLXR4LWltcEA4ZDggeworCQkJcmVnID0gPDB4OGQ4IDI+OworCQkJYml0cyA9IDw1IDU+OworCQl9OworCisJCWNvbWJfaW50cl9wMDogdXNiMy1pbnRyQDhkOSB7CisJCQlyZWcgPSA8MHg4ZDkgMT47CisJCQliaXRzID0gPDIgNj47CisJCX07CisKKwkJdTJfYXV0b19sb2FkX3ZhbGlkX3AwOiB1c2IyLWFsdi1wMEA4ZTAgeworCQkJcmVnICA9IDwweDhlMCAxPjsKKwkJCWJpdHMgPSA8MCAxPjsKKwkJfTsKKworCQl1Ml9pbnRyX3AwOiB1c2IyLWludHItcDBAOGUwIHsKKwkJCXJlZyAgPSA8MHg4ZTAgMT47CisJCQliaXRzID0gPDEgNT47CisJCX07CisKKwkJdTJfYXV0b19sb2FkX3ZhbGlkX3AxOiB1c2IyLWFsdi1wMUA4ZTAgeworCQkJcmVnICA9IDwweDhlMCAyPjsKKwkJCWJpdHMgPSA8NiAxPjsKKwkJfTsKKworCQl1Ml9pbnRyX3AxOiB1c2IyLWludHItcDFAOGUwIHsKKwkJCXJlZyAgPSA8MHg4ZTAgMj47CisJCQliaXRzID0gPDcgNT47CisJCX07CisKKwkJcGNpZV9yeF9pbXBfbG4wOiBwY2llLXJ4LWltcEA4ZDAgeworCQkJcmVnID0gPDB4OGQwIDE+OworCQkJYml0cyA9IDwwIDU+OworCQl9OworCisJCXBjaWVfdHhfaW1wX2xuMDogcGNpZS10eC1pbXBAOGQwIHsKKwkJCXJlZyA9IDwweDhkMCAyPjsKKwkJCWJpdHMgPSA8NSA1PjsKKwkJfTsKKworCQlwY2llX2ludHJfbG4wOiBwY2llLWludHJAOGQxIHsKKwkJCXJlZyA9IDwweDhkMSAxPjsKKwkJCWJpdHMgPSA8MiA2PjsKKwkJfTsKKworCQlwY2llX2F1dG9fbG9hZF92YWxpZF9sbjA6IHBjaWUtbG4wLWFsdkA4ZDQgeworCQkJcmVnID0gPDB4OGQ0IDE+OworCQkJYml0cyA9IDwwIDE+OworCQl9OworCisJCXBjaWVfcnhfaW1wX2xuMTogcGNpZS1yeC1pbXBAOGQyIHsKKwkJCXJlZyA9IDwweDhkMiAxPjsKKwkJCWJpdHMgPSA8MCA1PjsKKwkJfTsKKworCQlwY2llX3R4X2ltcF9sbjE6IHBjaWUtdHgtaW1wQDhkMiB7CisJCQlyZWcgPSA8MHg4ZDIgMj47CisJCQliaXRzID0gPDUgNT47CisJCX07CisKKwkJcGNpZV9pbnRyX2xuMTogcGNpZS1pbnRyQDhkMyB7CisJCQlyZWcgPSA8MHg4ZDMgMT47CisJCQliaXRzID0gPDIgNj47CisJCX07CisKKwkJcGNpZV9hdXRvX2xvYWRfdmFsaWRfbG4xOiBwY2llLWxuMS1hbHZAOGQ0IHsKKwkJCXJlZyA9IDwweDhkNCAxPjsKKwkJCWJpdHMgPSA8MSAxPjsKKwkJfTsKKwl9OworfTsKKworI2luY2x1ZGUgIm10Nzk4Ni1jbGtpdGcuZHRzaSIKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3OTg2Yi0yNTAwd2FuLWVtbWMtcmZiLmR0cyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3OTg2Yi0yNTAwd2FuLWVtbWMtcmZiLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzY4ZTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybS9ib290L2R0cy9tdDc5ODZiLTI1MDB3YW4tZW1tYy1yZmIuZHRzCkBAIC0wLDAgKzEsMjQ1IEBACisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDc5ODZiLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2Yi1waW5jdHJsLmR0c2kiCisvIHsKKwltb2RlbCA9ICJNZWRpYVRlayBNVDc5ODZiIFJGQiI7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODZiLWVtbWMtcmZiIjsKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG4xIGxvZ2xldmVsPTggIFwKKwkJCQllYXJseWNvbj11YXJ0ODI1MCxtbWlvMzIsMHgxMTAwMjAwMCBcCisJCQkJcm9vdD1QQVJUTEFCRUw9cm9vdGZzIHJvb3R3YWl0IHJvb3Rmc3R5cGU9c3F1YXNoZnMsZjJmcyI7CisJfTsKKworCW1lbW9yeSB7CisJCXJlZyA9IDwwIDB4NDAwMDAwMDAgMCAweDEwMDAwMDAwPjsKKwl9OworCisJcmVnXzNwM3Y6IHJlZ3VsYXRvci0zcDN2IHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJmaXhlZC0zLjNWIjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwl9OworfTsKKworJnVhcnQwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCisvKiBXYXJuaW5nOiBwaW5zIHNoYXJlZCB3aXRoICZzbmFuZCAqLworJnVhcnQxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmdWFydDFfcGlucz47CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKKy8qIFdhcm5pbmc6IHBpbnMgc2hhcmVkIHdpdGggJnNwaTEgKi8KKyZ1YXJ0MiB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnVhcnQyX3BpbnM+OworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCismaTJjMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmkyY19waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismd2F0Y2hkb2cgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZldGggeworCXN0YXR1cyA9ICJva2F5IjsKKworCWdtYWMwOiBtYWNAMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssZXRoLW1hYyI7CisJCXJlZyA9IDwwPjsKKwkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKwkJZml4ZWQtbGluayB7CisJCQlzcGVlZCA9IDwyNTAwPjsKKwkJCWZ1bGwtZHVwbGV4OworCQkJcGF1c2U7CisJCX07CisJfTsKKworCWdtYWMxOiBtYWNAMSB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssZXRoLW1hYyI7CisJCXJlZyA9IDwxPjsKKwkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKwkJZml4ZWQtbGluayB7CisJCQlzcGVlZCA9IDwyNTAwPjsKKwkJCWZ1bGwtZHVwbGV4OworCQkJcGF1c2U7CisJCX07CisJfTsKKworCW1kaW86IG1kaW8tYnVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCXBoeTU6IHBoeUA1IHsKKwkJCWNvbXBhdGlibGUgPSAiZXRoZXJuZXQtcGh5LWlkNjdjOS5kZTBhIjsKKwkJCXJlZyA9IDw1PjsKKwkJCXJlc2V0LWdwaW9zID0gPCZwaW8gNiAxPjsKKwkJCXJlc2V0LWRlYXNzZXJ0LXVzID0gPDIwMDAwPjsKKwkJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCQl9OworCisJCXBoeTY6IHBoeUA2IHsKKwkJCWNvbXBhdGlibGUgPSAiZXRoZXJuZXQtcGh5LWlkNjdjOS5kZTBhIjsKKwkJCXJlZyA9IDw2PjsKKwkJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCQl9OworCisJCXN3aXRjaEAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NTMxIjsKKwkJCXJlZyA9IDwzMT47CisJCQlyZXNldC1ncGlvcyA9IDwmcGlvIDUgMD47CisKKwkJCXBvcnRzIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJCXBvcnRAMCB7CisJCQkJCXJlZyA9IDwwPjsKKwkJCQkJbGFiZWwgPSAibGFuMCI7CisJCQkJfTsKKworCQkJCXBvcnRAMSB7CisJCQkJCXJlZyA9IDwxPjsKKwkJCQkJbGFiZWwgPSAibGFuMSI7CisJCQkJfTsKKworCQkJCXBvcnRAMiB7CisJCQkJCXJlZyA9IDwyPjsKKwkJCQkJbGFiZWwgPSAibGFuMiI7CisJCQkJfTsKKworCQkJCXBvcnRAMyB7CisJCQkJCXJlZyA9IDwzPjsKKwkJCQkJbGFiZWwgPSAibGFuMyI7CisJCQkJfTsKKworCQkJCXBvcnRANCB7CisJCQkJCXJlZyA9IDw0PjsKKwkJCQkJbGFiZWwgPSAibGFuNCI7CisJCQkJfTsKKworCQkJCXBvcnRANSB7CisJCQkJCXJlZyA9IDw1PjsKKwkJCQkJbGFiZWwgPSAibGFuNSI7CisJCQkJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCQkJCWZpeGVkLWxpbmsgeworCQkJCQkJc3BlZWQgPSA8MjUwMD47CisJCQkJCQlmdWxsLWR1cGxleDsKKwkJCQkJCXBhdXNlOworCQkJCQl9OworCQkJCX07CisKKwkJCQlwb3J0QDYgeworCQkJCQlyZWcgPSA8Nj47CisJCQkJCWxhYmVsID0gImNwdSI7CisJCQkJCWV0aGVybmV0ID0gPCZnbWFjMD47CisJCQkJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCQkJCWZpeGVkLWxpbmsgeworCQkJCQkJc3BlZWQgPSA8MjUwMD47CisJCQkJCQlmdWxsLWR1cGxleDsKKwkJCQkJCXBhdXNlOworCQkJCQl9OworCQkJCX07CisJCQl9OworCQl9OworCX07Cit9OworCismaG5hdCB7CisJbXRrZXRoLXdhbiA9ICJldGgxIjsKKwltdGtldGgtbGFuID0gImxhbiI7CisJbXRrZXRoLW1heC1nbWFjID0gPDI+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKy8qIFdhcm5pbmc6IHBpbnMgc2hhcmVkIHdpdGggJnVhcnQyICovCismc3BpMSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNwaWNfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJm1tYzAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCIsICJzdGF0ZV91aHMiOworCXBpbmN0cmwtMCA9IDwmbW1jMF9waW5zX2RlZmF1bHQ+OworCXBpbmN0cmwtMSA9IDwmbW1jMF9waW5zX3Vocz47CisJYnVzLXdpZHRoID0gPDg+OworCW1heC1mcmVxdWVuY3kgPSA8NTAwMDAwMDA+OworCWNhcC1tbWMtaGlnaHNwZWVkOworCXZtbWMtc3VwcGx5ID0gPCZyZWdfM3Azdj47CisJdnFtbWMtc3VwcGx5ID0gPCZyZWdfM3Azdj47CisJbm9uLXJlbW92YWJsZTsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismd2JzeXMgeworCW1lZGlhdGVrLG10ZC1lZXByb20gPSA8JmZhY3RvcnkgMHgwMDAwPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismcGlvIHsKKwltbWMwX3BpbnNfZGVmYXVsdDogbW1jMC1waW5zLTIyLXRvLTMyLWRlZmF1bHQgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiZmxhc2giOworCQkJZ3JvdXBzID0gImVtbWNfNDUiOworCQl9OworCQljb25mLWNtZC1kYXQgeworCQkJcGlucyA9ICJTUEkwX0NMSyIsICJTUEkwX01PU0kiLCAiU1BJMF9NSVNPIiwKKwkJCSAgICAgICAiU1BJMF9DUyIsICJTUEkwX0hPTEQiLCAiU1BJMF9XUCIsCisJCQkgICAgICAgIlNQSTFfQ0xLIiwgIlNQSTFfTU9TSSIsICJTUEkxX01JU08iOworCQkJaW5wdXQtZW5hYmxlOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzRtQT47CisJCQltZWRpYXRlayxwdWxsLXVwLWFkdiA9IDwxPjsJLyogcHVsbC11cCAxMEsgKi8KKwkJfTsKKwkJY29uZi1jbGsgeworCQkJcGlucyA9ICJTUEkxX0NTIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV82bUE+OworCQkJbWVkaWF0ZWsscHVsbC1kb3duLWFkdiA9IDwyPjsJLyogcHVsbC1kb3duIDUwSyAqLworCQl9OworCQljb25mLXJzdCB7CisJCQlwaW5zID0gIlBXTTEiOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzRtQT47CisJCQltZWRpYXRlayxwdWxsLXVwLWFkdiA9IDwxPjsJLyogcHVsbC11cCAxMEsgKi8KKwkJfTsKKwl9OworCisJbW1jMF9waW5zX3VoczogbW1jMC1waW5zLTIyLXRvLTMyLXVocyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJmbGFzaCI7CisJCQlncm91cHMgPSAiZW1tY180NSI7CisJCX07CisJCWNvbmYtY21kLWRhdCB7CisJCQlwaW5zID0gIlNQSTBfQ0xLIiwgIlNQSTBfTU9TSSIsICJTUEkwX01JU08iLAorCQkJICAgICAgICJTUEkwX0NTIiwgIlNQSTBfSE9MRCIsICJTUEkwX1dQIiwKKwkJCSAgICAgICAiU1BJMV9DTEsiLCAiU1BJMV9NT1NJIiwgIlNQSTFfTUlTTyI7CisJCQlpbnB1dC1lbmFibGU7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtdXAtYWR2ID0gPDE+OwkvKiBwdWxsLXVwIDEwSyAqLworCQl9OworCQljb25mLWNsayB7CisJCQlwaW5zID0gIlNQSTFfQ1MiOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzZtQT47CisJCQltZWRpYXRlayxwdWxsLWRvd24tYWR2ID0gPDI+OwkvKiBwdWxsLWRvd24gNTBLICovCisJCX07CisJCWNvbmYtcnN0IHsKKwkJCXBpbnMgPSAiUFdNMSI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtdXAtYWR2ID0gPDE+OwkvKiBwdWxsLXVwIDEwSyAqLworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybS9ib290L2R0cy9tdDc5ODZiLTI1MDB3YW4tZ3N3LXNwaW0tbmFuZC1yZmIuZHRzIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybS9ib290L2R0cy9tdDc5ODZiLTI1MDB3YW4tZ3N3LXNwaW0tbmFuZC1yZmIuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MGI1MmYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtL2Jvb3QvZHRzL210Nzk4NmItMjUwMHdhbi1nc3ctc3BpbS1uYW5kLXJmYi5kdHMKQEAgLTAsMCArMSwxOTggQEAKKy9kdHMtdjEvOworI2luY2x1ZGUgIm10Nzk4NmIuZHRzaSIKKyNpbmNsdWRlICJtdDc5ODZiLXBpbmN0cmwuZHRzaSIKKyNpbmNsdWRlICJtdDc5ODYtc3BpbS1uYW5kLXBhcnRpdGlvbi5kdHNpIgorLyB7CisJbW9kZWwgPSAiTWVkaWFUZWsgTVQ3OTg2YiBnc3cgUkZCIjsKKwljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4NmItZ3N3LXNwaW0tc25hbmQtcmZiIjsKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG4xIGxvZ2xldmVsPTggIFwKKwkJCQllYXJseWNvbj11YXJ0ODI1MCxtbWlvMzIsMHgxMTAwMjAwMCI7CisJfTsKKworCWdzdzogZ3N3QDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzUzeCI7CisJCW1lZGlhdGVrLGV0aHN5cyA9IDwmZXRoc3lzPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCX07CisKKwltZW1vcnkgeworCQlyZWcgPSA8MCAweDQwMDAwMDAwIDAgMHgxMDAwMDAwMD47CisJfTsKK307CisKKyZ1YXJ0MCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworLyogV2FybmluZzogcGlucyBzaGFyZWQgd2l0aCAmc25hbmQgKi8KKyZ1YXJ0MSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnVhcnQxX3BpbnM+OworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCisvKiBXYXJuaW5nOiBwaW5zIHNoYXJlZCB3aXRoICZzcGkxICovCismdWFydDIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0Ml9waW5zPjsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworJmkyYzAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZpMmNfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJndhdGNoZG9nIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZXRoIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlnbWFjMDogbWFjQDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MD47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwlnbWFjMTogbWFjQDEgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MT47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwltZGlvOiBtZGlvLWJ1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlwaHk1OiBwaHlANSB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8NT47CisJCQlyZXNldC1ncGlvcyA9IDwmcGlvIDYgMT47CisJCQlyZXNldC1kZWFzc2VydC11cyA9IDwyMDAwMD47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCQlwaHk2OiBwaHlANiB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8Nj47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCX07Cit9OworCismZ3N3IHsKKwltZWRpYXRlayxtZGlvID0gPCZtZGlvPjsKKwltZWRpYXRlayxwb3J0bWFwID0gImxsbGxsIjsKKwltZWRpYXRlayxtZGlvX21hc3Rlcl9waW5tdXggPSA8MT47CisJcmVzZXQtZ3Bpb3MgPSA8JnBpbyA1IDA+OworCWludGVycnVwdC1wYXJlbnQgPSA8JnBpbz47CisJaW50ZXJydXB0cyA9IDw2NiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwlwb3J0NTogcG9ydEA1IHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc1M3gtcG9ydCI7CisJCXJlZyA9IDw1PjsKKwkJcGh5LW1vZGUgPSAic2dtaWkiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJfTsKKworCX07CisKKwlwb3J0NjogcG9ydEA2IHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc1M3gtcG9ydCI7CisJCW1lZGlhdGVrLHNzYy1vbjsKKwkJcmVnID0gPDY+OworCQlwaHktbW9kZSA9ICJzZ21paSI7CisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJfTsKKwl9OworfTsKKworJmhuYXQgeworCW10a2V0aC13YW4gPSAiZXRoMSI7CisJbXRrZXRoLWxhbiA9ICJsYW4iOworCW10a2V0aC1tYXgtZ21hYyA9IDwyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc3BpMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNwaV9mbGFzaF9waW5zPjsKKwljcy1ncGlvcyA9IDwwPiwgPDA+OworCXN0YXR1cyA9ICJva2F5IjsKKworCXNwaV9ub3JAMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJqZWRlYyxzcGktbm9yIjsKKwkJcmVnID0gPDA+OworCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDwyMDAwMDAwMD47CisJCXNwaS10eC1idXN3aWR0aCA9IDw0PjsKKwkJc3BpLXJ4LWJ1c3dpZHRoID0gPDQ+OworCX07CisKKwlzcGlfbmFuZDogc3BpX25hbmRAMSB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJzcGktbmFuZCI7CisJCXJlZyA9IDwxPjsKKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8MjAwMDAwMDA+OworCQlzcGktdHgtYnVzd2lkdGggPSA8ND47CisJCXNwaS1yeC1idXN3aWR0aCA9IDw0PjsKKwl9OworfTsKKworLyogV2FybmluZzogcGlucyBzaGFyZWQgd2l0aCAmdWFydDIgKi8KKyZzcGkxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc3BpY19waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismd2JzeXMgeworCW1lZGlhdGVrLG10ZC1lZXByb20gPSA8JmZhY3RvcnkgMHgwMDAwPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismcGlvIHsKKwlzcGlfZmxhc2hfcGluczogc3BpLWZsYXNoLXBpbnMtMzMtdG8tMzggeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiZmxhc2giOworCQkJZ3JvdXBzID0gInNwaTAiLCAic3BpMF93cF9ob2xkIjsKKwkJfTsKKwkJY29uZi1wdSB7CisJCQlwaW5zID0gIlNQSTJfQ1MiLCAiU1BJMl9IT0xEIiwgIlNQSTJfV1AiOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzhtQT47CisJCQltZWRpYXRlayxwdWxsLXVwLWFkdiA9IDwwPjsJLyogYmlhcy1kaXNhYmxlICovCisJCX07CisJCWNvbmYtcGQgeworCQkJcGlucyA9ICJTUEkyX0NMSyIsICJTUEkyX01PU0kiLCAiU1BJMl9NSVNPIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV84bUE+OworCQkJbWVkaWF0ZWsscHVsbC1kb3duLWFkdiA9IDwwPjsJLyogYmlhcy1kaXNhYmxlICovCisJCX07CisKKwl9OworfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3OTg2Yi0yNTAwd2FuLXNkLXJmYi5kdHMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtL2Jvb3QvZHRzL210Nzk4NmItMjUwMHdhbi1zZC1yZmIuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1M2NjYTEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtL2Jvb3QvZHRzL210Nzk4NmItMjUwMHdhbi1zZC1yZmIuZHRzCkBAIC0wLDAgKzEsMjcyIEBACisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDc5ODZiLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2Yi1waW5jdHJsLmR0c2kiCisvIHsKKwltb2RlbCA9ICJNZWRpYVRlayBNVDc5ODZiIFJGQiI7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODZiLTI1MDB3YW4tc2QtcmZiIjsKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG4xIGxvZ2xldmVsPTggIFwKKwkJCWVhcmx5Y29uPXVhcnQ4MjUwLG1taW8zMiwweDExMDAyMDAwIFwKKwkJCXJvb3Q9UEFSVExBQkVMPXJvb3RmcyByb290d2FpdCByb290ZnN0eXBlPXNxdWFzaGZzLGYyZnMiOworCX07CisKKwltZW1vcnkgeworCQlyZWcgPSA8MCAweDQwMDAwMDAwIDAgMHgxMDAwMDAwMD47CisJfTsKKworCXJlZ18zcDN2OiByZWd1bGF0b3ItM3AzdiB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAiZml4ZWQtMy4zViI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLWJvb3Qtb247CisJCXJlZ3VsYXRvci1hbHdheXMtb247CisJfTsKK307CisKKyZ1YXJ0MCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworLyogV2FybmluZzogcGlucyBzaGFyZWQgd2l0aCAmc25hbmQgKi8KKyZ1YXJ0MSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnVhcnQxX3BpbnM+OworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCisvKiBXYXJuaW5nOiBwaW5zIHNoYXJlZCB3aXRoICZzcGkxICovCismdWFydDIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0Ml9waW5zPjsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworJmkyYzAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZpMmNfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJndhdGNoZG9nIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZXRoIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlnbWFjMDogbWFjQDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MD47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwlnbWFjMTogbWFjQDEgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MT47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwltZGlvOiBtZGlvLWJ1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlwaHk1OiBwaHlANSB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8NT47CisJCQlyZXNldC1ncGlvcyA9IDwmcGlvIDYgMT47CisJCQlyZXNldC1kZWFzc2VydC11cyA9IDwyMDAwMD47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCQlwaHk2OiBwaHlANiB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8Nj47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCQlzd2l0Y2hAMCB7CisJCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzUzMSI7CisJCQlyZWcgPSA8MzE+OworCQkJcmVzZXQtZ3Bpb3MgPSA8JnBpbyA1IDA+OworCisJCQlwb3J0cyB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCQlwb3J0QDAgeworCQkJCQlyZWcgPSA8MD47CisJCQkJCWxhYmVsID0gImxhbjAiOworCQkJCX07CisKKwkJCQlwb3J0QDEgeworCQkJCQlyZWcgPSA8MT47CisJCQkJCWxhYmVsID0gImxhbjEiOworCQkJCX07CisKKwkJCQlwb3J0QDIgeworCQkJCQlyZWcgPSA8Mj47CisJCQkJCWxhYmVsID0gImxhbjIiOworCQkJCX07CisKKwkJCQlwb3J0QDMgeworCQkJCQlyZWcgPSA8Mz47CisJCQkJCWxhYmVsID0gImxhbjMiOworCQkJCX07CisKKwkJCQlwb3J0QDQgeworCQkJCQlyZWcgPSA8ND47CisJCQkJCWxhYmVsID0gImxhbjQiOworCQkJCX07CisKKwkJCQlwb3J0QDUgeworCQkJCQlyZWcgPSA8NT47CisJCQkJCWxhYmVsID0gImxhbjUiOworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCisJCQkJcG9ydEA2IHsKKwkJCQkJcmVnID0gPDY+OworCQkJCQlsYWJlbCA9ICJjcHUiOworCQkJCQlldGhlcm5ldCA9IDwmZ21hYzA+OworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmhuYXQgeworCW10a2V0aC13YW4gPSAiZXRoMSI7CisJbXRrZXRoLWxhbiA9ICJsYW4iOworCW10a2V0aC1tYXgtZ21hYyA9IDwyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismbW1jMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgInN0YXRlX3VocyI7CisJcGluY3RybC0wID0gPCZtbWMwX3BpbnNfZGVmYXVsdD47CisJcGluY3RybC0xID0gPCZtbWMwX3BpbnNfdWhzPjsKKwlidXMtd2lkdGggPSA8ND47CisJbWF4LWZyZXF1ZW5jeSA9IDw1MjAwMDAwMD47CisJY2FwLXNkLWhpZ2hzcGVlZDsKKwl2bW1jLXN1cHBseSA9IDwmcmVnXzNwM3Y+OworCXZxbW1jLXN1cHBseSA9IDwmcmVnXzNwM3Y+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwaW8geworCW1tYzBfcGluc19kZWZhdWx0OiBtbWMwLXBpbnMtMjItdG8tMzItZGVmYXVsdCB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJmbGFzaCI7CisJCQlncm91cHMgPSAiZW1tY180NSI7CisJCX07CisKKwkJY29uZi1jbWQtZGF0IHsKKwkJCXBpbnMgPSAiU1BJMF9DTEsiLCAiU1BJMF9NT1NJIiwgIlNQSTBfTUlTTyIsCisJCQkgICAgICAgIlNQSTBfQ1MiLCAiU1BJMF9IT0xEIiwgIlNQSTBfV1AiLAorCQkJICAgICAgICJTUEkxX0NMSyIsICJTUEkxX01PU0kiLCAiU1BJMV9NSVNPIjsKKwkJCWlucHV0LWVuYWJsZTsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV80bUE+OworCQkJbWVkaWF0ZWsscHVsbC11cC1hZHYgPSA8MT47CS8qIHB1bGwtdXAgMTBLICovCisJCX07CisKKwkJY29uZi1jbGsgeworCQkJcGlucyA9ICJTUEkxX0NTIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV82bUE+OworCQkJbWVkaWF0ZWsscHVsbC1kb3duLWFkdiA9IDwyPjsJLyogcHVsbC1kb3duIDUwSyAqLworCQl9OworCisJCWNvbmYtcnN0IHsKKwkJCXBpbnMgPSAiUFdNMSI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtdXAtYWR2ID0gPDE+OwkvKiBwdWxsLXVwIDEwSyAqLworCQl9OworCX07CisKKwltbWMwX3BpbnNfdWhzOiBtbWMwLXBpbnMtMjItdG8tMzItdWhzIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJlbW1jXzQ1IjsKKwkJfTsKKworCQljb25mLWNtZC1kYXQgeworCQkJcGlucyA9ICJTUEkwX0NMSyIsICJTUEkwX01PU0kiLCAiU1BJMF9NSVNPIiwKKwkJCSAgICAgICAiU1BJMF9DUyIsICJTUEkwX0hPTEQiLCAiU1BJMF9XUCIsCisJCQkgICAgICAgIlNQSTFfQ0xLIiwgIlNQSTFfTU9TSSIsICJTUEkxX01JU08iOworCQkJaW5wdXQtZW5hYmxlOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzRtQT47CisJCQltZWRpYXRlayxwdWxsLXVwLWFkdiA9IDwxPjsJLyogcHVsbC11cCAxMEsgKi8KKwkJfTsKKworCQljb25mLWNsayB7CisJCQlwaW5zID0gIlNQSTFfQ1MiOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzZtQT47CisJCQltZWRpYXRlayxwdWxsLWRvd24tYWR2ID0gPDI+OwkvKiBwdWxsLWRvd24gNTBLICovCisJCX07CisKKwkJY29uZi1yc3QgeworCQkJcGlucyA9ICJQV00xIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV80bUE+OworCQkJbWVkaWF0ZWsscHVsbC11cC1hZHYgPSA8MT47CS8qIHB1bGwtdXAgMTBLICovCisJCX07CisJfTsKKworCXdmXzJnXzVnX3BpbnM6IHdmXzJnXzVnLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAid2lmaSI7CisJCQlncm91cHMgPSAid2ZfMmciLCAid2ZfNWciOworCQl9OworCQljb25mIHsKKwkJCXBpbnMgPSAiV0YwX0hCMSIsICJXRjBfSEIyIiwgIldGMF9IQjMiLCAiV0YwX0hCNCIsCisJCQkgICAgICAgIldGMF9IQjAiLCAiV0YwX0hCMF9CIiwgIldGMF9IQjUiLCAiV0YwX0hCNiIsCisJCQkgICAgICAgIldGMF9IQjciLCAiV0YwX0hCOCIsICJXRjBfSEI5IiwgIldGMF9IQjEwIiwKKwkJCSAgICAgICAiV0YwX1RPUF9DTEsiLCAiV0YwX1RPUF9EQVRBIiwgIldGMV9IQjEiLAorCQkJICAgICAgICJXRjFfSEIyIiwgIldGMV9IQjMiLCAiV0YxX0hCNCIsICJXRjFfSEIwIiwKKwkJCSAgICAgICAiV0YxX0hCNSIsICJXRjFfSEI2IiwgIldGMV9IQjciLCAiV0YxX0hCOCIsCisJCQkgICAgICAgIldGMV9UT1BfQ0xLIiwgIldGMV9UT1BfREFUQSI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNG1BPjsKKwkJfTsKKwl9OworCisJd2ZfZGJkY19waW5zOiB3Zl9kYmRjLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAid2lmaSI7CisJCQlncm91cHMgPSAid2ZfZGJkYyI7CisJCX07CisJCWNvbmYgeworCQkJcGlucyA9ICJXRjBfSEIxIiwgIldGMF9IQjIiLCAiV0YwX0hCMyIsICJXRjBfSEI0IiwKKwkJCSAgICAgICAiV0YwX0hCMCIsICJXRjBfSEIwX0IiLCAiV0YwX0hCNSIsICJXRjBfSEI2IiwKKwkJCSAgICAgICAiV0YwX0hCNyIsICJXRjBfSEI4IiwgIldGMF9IQjkiLCAiV0YwX0hCMTAiLAorCQkJICAgICAgICJXRjBfVE9QX0NMSyIsICJXRjBfVE9QX0RBVEEiLCAiV0YxX0hCMSIsCisJCQkgICAgICAgIldGMV9IQjIiLCAiV0YxX0hCMyIsICJXRjFfSEI0IiwgIldGMV9IQjAiLAorCQkJICAgICAgICJXRjFfSEI1IiwgIldGMV9IQjYiLCAiV0YxX0hCNyIsICJXRjFfSEI4IiwKKwkJCSAgICAgICAiV0YxX1RPUF9DTEsiLCAiV0YxX1RPUF9EQVRBIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV80bUE+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybS9ib290L2R0cy9tdDc5ODZiLTI1MDB3YW4tc25maS1uYW5kLXJmYi5kdHMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtL2Jvb3QvZHRzL210Nzk4NmItMjUwMHdhbi1zbmZpLW5hbmQtcmZiLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjcyZjZjCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybS9ib290L2R0cy9tdDc5ODZiLTI1MDB3YW4tc25maS1uYW5kLXJmYi5kdHMKQEAgLTAsMCArMSwyMDkgQEAKKy9kdHMtdjEvOworI2luY2x1ZGUgIm10Nzk4NmIuZHRzaSIKKyNpbmNsdWRlICJtdDc5ODZiLXBpbmN0cmwuZHRzaSIKKyNpbmNsdWRlICJtdDc5ODYtc25maS1uYW5kLXBhcnRpdGlvbi5kdHNpIgorLyB7CisJbW9kZWwgPSAiTWVkaWFUZWsgTVQ3OTg2YiBSRkIiOworCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2Yi1zbmZpLXNuYW5kLXJmYiI7CisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDBuMSBsb2dsZXZlbD04ICBcCisJCQkJZWFybHljb249dWFydDgyNTAsbW1pbzMyLDB4MTEwMDIwMDAiOworCX07CisKKwltZW1vcnkgeworCQlyZWcgPSA8MCAweDQwMDAwMDAwIDAgMHgxMDAwMDAwMD47CisJfTsKK307CisKKyZ1YXJ0MCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworLyogV2FybmluZzogcGlucyBzaGFyZWQgd2l0aCAmc25hbmQgKi8KKyZ1YXJ0MSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnVhcnQxX3BpbnM+OworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCisvKiBXYXJuaW5nOiBwaW5zIHNoYXJlZCB3aXRoICZzcGkxICovCismdWFydDIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0Ml9waW5zPjsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworJmkyYzAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZpMmNfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJndhdGNoZG9nIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZXRoIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlnbWFjMDogbWFjQDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MD47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwlnbWFjMTogbWFjQDEgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MT47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwltZGlvOiBtZGlvLWJ1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlwaHk1OiBwaHlANSB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8NT47CisJCQlyZXNldC1ncGlvcyA9IDwmcGlvIDYgMT47CisJCQlyZXNldC1kZWFzc2VydC11cyA9IDwyMDAwMD47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCQlwaHk2OiBwaHlANiB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8Nj47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCQlzd2l0Y2hAMCB7CisJCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzUzMSI7CisJCQlyZWcgPSA8MzE+OworCQkJcmVzZXQtZ3Bpb3MgPSA8JnBpbyA1IDA+OworCisJCQlwb3J0cyB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCQlwb3J0QDAgeworCQkJCQlyZWcgPSA8MD47CisJCQkJCWxhYmVsID0gImxhbjAiOworCQkJCX07CisKKwkJCQlwb3J0QDEgeworCQkJCQlyZWcgPSA8MT47CisJCQkJCWxhYmVsID0gImxhbjEiOworCQkJCX07CisKKwkJCQlwb3J0QDIgeworCQkJCQlyZWcgPSA8Mj47CisJCQkJCWxhYmVsID0gImxhbjIiOworCQkJCX07CisKKwkJCQlwb3J0QDMgeworCQkJCQlyZWcgPSA8Mz47CisJCQkJCWxhYmVsID0gImxhbjMiOworCQkJCX07CisKKwkJCQlwb3J0QDQgeworCQkJCQlyZWcgPSA8ND47CisJCQkJCWxhYmVsID0gImxhbjQiOworCQkJCX07CisKKwkJCQlwb3J0QDUgeworCQkJCQlyZWcgPSA8NT47CisJCQkJCWxhYmVsID0gImxhbjUiOworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCisJCQkJcG9ydEA2IHsKKwkJCQkJcmVnID0gPDY+OworCQkJCQlsYWJlbCA9ICJjcHUiOworCQkJCQlldGhlcm5ldCA9IDwmZ21hYzA+OworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmhuYXQgeworCW10a2V0aC13YW4gPSAiZXRoMSI7CisJbXRrZXRoLWxhbiA9ICJsYW4iOworCW10a2V0aC1tYXgtZ21hYyA9IDwyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCisvKiBXYXJuaW5nOiBwaW5zIHNoYXJlZCB3aXRoICZ1YXJ0MSAqLworJnNuYW5kIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc25maV9waW5zPjsKKwltZWRpYXRlayxxdWFkLXNwaTsKKwlzdGF0dXMgPSAib2theSI7CisKKwlwYXJ0aXRpb25zIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1wYXJ0aXRpb25zIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCX07Cit9OworCisvKiBXYXJuaW5nOiBwaW5zIHNoYXJlZCB3aXRoICZ1YXJ0MiAqLworJnNwaTEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzcGljX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ3YnN5cyB7CisJbWVkaWF0ZWssbXRkLWVlcHJvbSA9IDwmZmFjdG9yeSAweDAwMDA+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwaW8geworCXNuZmlfcGluczogc25maS1waW5zLTIzLXRvLTI4IHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJzbmZpIjsKKwkJfTsKKwkJY29uZi1jbGsgeworCQkJcGlucyA9ICJTUEkwX0NMSyI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfOG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtZG93bi1hZHYgPSA8MD47CS8qIGJpYXMtZGlzYWJsZSAqLworCQl9OworCQljb25mLXB1IHsKKwkJCXBpbnMgPSAiU1BJMF9DUyIsICJTUEkwX0hPTEQiLCAiU1BJMF9XUCI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNm1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtdXAtYWR2ID0gPDA+OwkvKiBiaWFzLWRpc2FibGUgKi8KKwkJfTsKKwkJY29uZi1wZCB7CisJCQlwaW5zID0gIlNQSTBfTU9TSSIsICJTUEkwX01JU08iOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzZtQT47CisJCQltZWRpYXRlayxwdWxsLWRvd24tYWR2ID0gPDA+OwkvKiBiaWFzLWRpc2FibGUgKi8KKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3OTg2Yi0yNTAwd2FuLXNwaW0tbmFuZC1yZmIuZHRzIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybS9ib290L2R0cy9tdDc5ODZiLTI1MDB3YW4tc3BpbS1uYW5kLXJmYi5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJiM2JhMwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3OTg2Yi0yNTAwd2FuLXNwaW0tbmFuZC1yZmIuZHRzCkBAIC0wLDAgKzEsMjU1IEBACisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDc5ODZiLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2Yi1waW5jdHJsLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2LXNwaW0tbmFuZC1wYXJ0aXRpb24uZHRzaSIKKy8geworCW1vZGVsID0gIk1lZGlhVGVrIE1UNzk4NmIgUkZCIjsKKwljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4NmItMjUwMHdhbi1zcGltLXNuYW5kLXJmYiI7CisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDBuMSBsb2dsZXZlbD04ICBcCisJCQkJZWFybHljb249dWFydDgyNTAsbW1pbzMyLDB4MTEwMDIwMDAiOworCX07CisKKwltZW1vcnkgeworCQlyZWcgPSA8MCAweDQwMDAwMDAwIDAgMHgxMDAwMDAwMD47CisJfTsKK307CisKKyZ1YXJ0MCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworLyogV2FybmluZzogcGlucyBzaGFyZWQgd2l0aCAmc25hbmQgKi8KKyZ1YXJ0MSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnVhcnQxX3BpbnM+OworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCisvKiBXYXJuaW5nOiBwaW5zIHNoYXJlZCB3aXRoICZzcGkxICovCismdWFydDIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0Ml9waW5zPjsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworJmkyYzAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZpMmNfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJndhdGNoZG9nIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZXRoIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlnbWFjMDogbWFjQDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MD47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwlnbWFjMTogbWFjQDEgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MT47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwltZGlvOiBtZGlvLWJ1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlwaHk1OiBwaHlANSB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8NT47CisJCQlyZXNldC1ncGlvcyA9IDwmcGlvIDYgMT47CisJCQlyZXNldC1kZWFzc2VydC11cyA9IDwyMDAwMD47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCQlwaHk2OiBwaHlANiB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8Nj47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCQlzd2l0Y2hAMCB7CisJCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzUzMSI7CisJCQlyZWcgPSA8MzE+OworCQkJcmVzZXQtZ3Bpb3MgPSA8JnBpbyA1IDA+OworCisJCQlwb3J0cyB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCQlwb3J0QDAgeworCQkJCQlyZWcgPSA8MD47CisJCQkJCWxhYmVsID0gImxhbjAiOworCQkJCX07CisKKwkJCQlwb3J0QDEgeworCQkJCQlyZWcgPSA8MT47CisJCQkJCWxhYmVsID0gImxhbjEiOworCQkJCX07CisKKwkJCQlwb3J0QDIgeworCQkJCQlyZWcgPSA8Mj47CisJCQkJCWxhYmVsID0gImxhbjIiOworCQkJCX07CisKKwkJCQlwb3J0QDMgeworCQkJCQlyZWcgPSA8Mz47CisJCQkJCWxhYmVsID0gImxhbjMiOworCQkJCX07CisKKwkJCQlwb3J0QDQgeworCQkJCQlyZWcgPSA8ND47CisJCQkJCWxhYmVsID0gImxhbjQiOworCQkJCX07CisKKwkJCQlwb3J0QDUgeworCQkJCQlyZWcgPSA8NT47CisJCQkJCWxhYmVsID0gImxhbjUiOworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCisJCQkJcG9ydEA2IHsKKwkJCQkJcmVnID0gPDY+OworCQkJCQlsYWJlbCA9ICJjcHUiOworCQkJCQlldGhlcm5ldCA9IDwmZ21hYzA+OworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmhuYXQgeworCW10a2V0aC13YW4gPSAiZXRoMSI7CisJbXRrZXRoLWxhbiA9ICJsYW4iOworCW10a2V0aC1tYXgtZ21hYyA9IDwyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc3BpMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNwaV9mbGFzaF9waW5zPjsKKwljcy1ncGlvcyA9IDwwPiwgPDA+OworCXN0YXR1cyA9ICJva2F5IjsKKworCXNwaV9ub3JAMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJqZWRlYyxzcGktbm9yIjsKKwkJcmVnID0gPDA+OworCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDwyMDAwMDAwMD47CisJCXNwaS10eC1idXN3aWR0aCA9IDw0PjsKKwkJc3BpLXJ4LWJ1c3dpZHRoID0gPDQ+OworCX07CisKKwlzcGlfbmFuZDogc3BpX25hbmRAMSB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJzcGktbmFuZCI7CisJCXJlZyA9IDwxPjsKKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8MjAwMDAwMDA+OworCQlzcGktdHgtYnVzd2lkdGggPSA8ND47CisJCXNwaS1yeC1idXN3aWR0aCA9IDw0PjsKKwl9OworfTsKKworLyogV2FybmluZzogcGlucyBzaGFyZWQgd2l0aCAmdWFydDIgKi8KKyZzcGkxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc3BpY19waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismd2JzeXMgeworCW1lZGlhdGVrLG10ZC1lZXByb20gPSA8JmZhY3RvcnkgMHgwMDAwPjsKKwlzdGF0dXMgPSAib2theSI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgImRiZGMiOworCXBpbmN0cmwtMCA9IDwmd2ZfMmdfNWdfcGlucz47CisJcGluY3RybC0xID0gPCZ3Zl9kYmRjX3BpbnM+OworfTsKKworJnBpbyB7CisJc3BpX2ZsYXNoX3BpbnM6IHNwaS1mbGFzaC1waW5zLTMzLXRvLTM4IHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJzcGkwIiwgInNwaTBfd3BfaG9sZCI7CisJCX07CisJCWNvbmYtcHUgeworCQkJcGlucyA9ICJTUEkyX0NTIiwgIlNQSTJfSE9MRCIsICJTUEkyX1dQIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV84bUE+OworCQkJbWVkaWF0ZWsscHVsbC11cC1hZHYgPSA8MD47CS8qIGJpYXMtZGlzYWJsZSAqLworCQl9OworCQljb25mLXBkIHsKKwkJCXBpbnMgPSAiU1BJMl9DTEsiLCAiU1BJMl9NT1NJIiwgIlNQSTJfTUlTTyI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfOG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtZG93bi1hZHYgPSA8MD47CS8qIGJpYXMtZGlzYWJsZSAqLworCQl9OworCisJfTsKKworCXdmXzJnXzVnX3BpbnM6IHdmXzJnXzVnLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAid2lmaSI7CisJCQlncm91cHMgPSAid2ZfMmciLCAid2ZfNWciOworCQl9OworCQljb25mIHsKKwkJCXBpbnMgPSAiV0YwX0hCMSIsICJXRjBfSEIyIiwgIldGMF9IQjMiLCAiV0YwX0hCNCIsCisJCQkgICAgICAgIldGMF9IQjAiLCAiV0YwX0hCMF9CIiwgIldGMF9IQjUiLCAiV0YwX0hCNiIsCisJCQkgICAgICAgIldGMF9IQjciLCAiV0YwX0hCOCIsICJXRjBfSEI5IiwgIldGMF9IQjEwIiwKKwkJCSAgICAgICAiV0YwX1RPUF9DTEsiLCAiV0YwX1RPUF9EQVRBIiwgIldGMV9IQjEiLAorCQkJICAgICAgICJXRjFfSEIyIiwgIldGMV9IQjMiLCAiV0YxX0hCNCIsICJXRjFfSEIwIiwKKwkJCSAgICAgICAiV0YxX0hCNSIsICJXRjFfSEI2IiwgIldGMV9IQjciLCAiV0YxX0hCOCIsCisJCQkgICAgICAgIldGMV9UT1BfQ0xLIiwgIldGMV9UT1BfREFUQSI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNG1BPjsKKwkJfTsKKwl9OworCisJd2ZfZGJkY19waW5zOiB3Zl9kYmRjLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAid2lmaSI7CisJCQlncm91cHMgPSAid2ZfZGJkYyI7CisJCX07CisJCWNvbmYgeworCQkJcGlucyA9ICJXRjBfSEIxIiwgIldGMF9IQjIiLCAiV0YwX0hCMyIsICJXRjBfSEI0IiwKKwkJCSAgICAgICAiV0YwX0hCMCIsICJXRjBfSEIwX0IiLCAiV0YwX0hCNSIsICJXRjBfSEI2IiwKKwkJCSAgICAgICAiV0YwX0hCNyIsICJXRjBfSEI4IiwgIldGMF9IQjkiLCAiV0YwX0hCMTAiLAorCQkJICAgICAgICJXRjBfVE9QX0NMSyIsICJXRjBfVE9QX0RBVEEiLCAiV0YxX0hCMSIsCisJCQkgICAgICAgIldGMV9IQjIiLCAiV0YxX0hCMyIsICJXRjFfSEI0IiwgIldGMV9IQjAiLAorCQkJICAgICAgICJXRjFfSEI1IiwgIldGMV9IQjYiLCAiV0YxX0hCNyIsICJXRjFfSEI4IiwKKwkJCSAgICAgICAiV0YxX1RPUF9DTEsiLCAiV0YxX1RPUF9EQVRBIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV80bUE+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybS9ib290L2R0cy9tdDc5ODZiLTI1MDB3YW4tc3BpbS1ub3ItcmZiLmR0cyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3OTg2Yi0yNTAwd2FuLXNwaW0tbm9yLXJmYi5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc3ZWVjMgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3OTg2Yi0yNTAwd2FuLXNwaW0tbm9yLXJmYi5kdHMKQEAgLTAsMCArMSwyMDggQEAKKy9kdHMtdjEvOworI2luY2x1ZGUgIm10Nzk4NmIuZHRzaSIKKyNpbmNsdWRlICJtdDc5ODZiLXBpbmN0cmwuZHRzaSIKKyNpbmNsdWRlICJtdDc5ODYtc3BpbS1ub3ItcGFydGl0aW9uLmR0c2kiCisvIHsKKwltb2RlbCA9ICJNZWRpYVRlayBNVDc5ODZiIFJGQiI7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODZiLW5vci1yZmIiOworCWNob3NlbiB7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwbjEgbG9nbGV2ZWw9OCAgXAorCQkJCWVhcmx5Y29uPXVhcnQ4MjUwLG1taW8zMiwweDExMDAyMDAwIjsKKwl9OworCisJbWVtb3J5IHsKKwkJcmVnID0gPDAgMHg0MDAwMDAwMCAwIDB4MTAwMDAwMDA+OworCX07Cit9OworCismdWFydDAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKy8qIFdhcm5pbmc6IHBpbnMgc2hhcmVkIHdpdGggJnNuYW5kICovCismdWFydDEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0MV9waW5zPjsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworLyogV2FybmluZzogcGlucyBzaGFyZWQgd2l0aCAmc3BpMSAqLworJnVhcnQyIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmdWFydDJfcGlucz47CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKKyZpMmMwIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmaTJjX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ3YXRjaGRvZyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmV0aCB7CisJc3RhdHVzID0gIm9rYXkiOworCisJZ21hYzA6IG1hY0AwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKwkJcmVnID0gPDA+OworCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQlmaXhlZC1saW5rIHsKKwkJCXNwZWVkID0gPDI1MDA+OworCQkJZnVsbC1kdXBsZXg7CisJCQlwYXVzZTsKKwkJfTsKKwl9OworCisJZ21hYzE6IG1hY0AxIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKwkJcmVnID0gPDE+OworCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQlmaXhlZC1saW5rIHsKKwkJCXNwZWVkID0gPDI1MDA+OworCQkJZnVsbC1kdXBsZXg7CisJCQlwYXVzZTsKKwkJfTsKKwl9OworCisJbWRpbzogbWRpby1idXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJcGh5NTogcGh5QDUgeworCQkJY29tcGF0aWJsZSA9ICJldGhlcm5ldC1waHktaWQ2N2M5LmRlMGEiOworCQkJcmVnID0gPDU+OworCQkJcmVzZXQtZ3Bpb3MgPSA8JnBpbyA2IDE+OworCQkJcmVzZXQtZGVhc3NlcnQtdXMgPSA8MjAwMDA+OworCQkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisJCX07CisKKwkJcGh5NjogcGh5QDYgeworCQkJY29tcGF0aWJsZSA9ICJldGhlcm5ldC1waHktaWQ2N2M5LmRlMGEiOworCQkJcmVnID0gPDY+OworCQkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisJCX07CisKKwkJc3dpdGNoQDAgeworCQkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc1MzEiOworCQkJcmVnID0gPDMxPjsKKwkJCXJlc2V0LWdwaW9zID0gPCZwaW8gNSAwPjsKKworCQkJcG9ydHMgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQkJcG9ydEAwIHsKKwkJCQkJcmVnID0gPDA+OworCQkJCQlsYWJlbCA9ICJsYW4wIjsKKwkJCQl9OworCisJCQkJcG9ydEAxIHsKKwkJCQkJcmVnID0gPDE+OworCQkJCQlsYWJlbCA9ICJsYW4xIjsKKwkJCQl9OworCisJCQkJcG9ydEAyIHsKKwkJCQkJcmVnID0gPDI+OworCQkJCQlsYWJlbCA9ICJsYW4yIjsKKwkJCQl9OworCisJCQkJcG9ydEAzIHsKKwkJCQkJcmVnID0gPDM+OworCQkJCQlsYWJlbCA9ICJsYW4zIjsKKwkJCQl9OworCisJCQkJcG9ydEA0IHsKKwkJCQkJcmVnID0gPDQ+OworCQkJCQlsYWJlbCA9ICJsYW40IjsKKwkJCQl9OworCisJCQkJcG9ydEA1IHsKKwkJCQkJcmVnID0gPDU+OworCQkJCQlsYWJlbCA9ICJsYW41IjsKKwkJCQkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKwkJCQkJZml4ZWQtbGluayB7CisJCQkJCQlzcGVlZCA9IDwyNTAwPjsKKwkJCQkJCWZ1bGwtZHVwbGV4OworCQkJCQkJcGF1c2U7CisJCQkJCX07CisJCQkJfTsKKworCQkJCXBvcnRANiB7CisJCQkJCXJlZyA9IDw2PjsKKwkJCQkJbGFiZWwgPSAiY3B1IjsKKwkJCQkJZXRoZXJuZXQgPSA8JmdtYWMwPjsKKwkJCQkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKwkJCQkJZml4ZWQtbGluayB7CisJCQkJCQlzcGVlZCA9IDwyNTAwPjsKKwkJCQkJCWZ1bGwtZHVwbGV4OworCQkJCQkJcGF1c2U7CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZobmF0IHsKKwltdGtldGgtd2FuID0gImV0aDEiOworCW10a2V0aC1sYW4gPSAibGFuIjsKKwltdGtldGgtbWF4LWdtYWMgPSA8Mj47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnNwaTAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzcGlfZmxhc2hfcGlucz47CisJY3MtZ3Bpb3MgPSA8MD4sIDwwPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwlzcGlfbm9yQDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiamVkZWMsc3BpLW5vciI7CisJCXJlZyA9IDwwPjsKKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8NTIwMDAwMDA+OworCQlzcGktdHgtYnVzd2lkdGggPSA8ND47CisJCXNwaS1yeC1idXN3aWR0aCA9IDw0PjsKKwl9OworfTsKKworLyogV2FybmluZzogcGlucyBzaGFyZWQgd2l0aCAmdWFydDIgKi8KKyZzcGkxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc3BpY19waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismd2JzeXMgeworCW1lZGlhdGVrLG10ZC1lZXByb20gPSA8JmZhY3RvcnkgMHgwMDAwPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismcGlvIHsKKwlzcGlfZmxhc2hfcGluczogc3BpLWZsYXNoLXBpbnMtMzMtdG8tMzggeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiZmxhc2giOworCQkJZ3JvdXBzID0gInNwaTAiLCAic3BpMF93cF9ob2xkIjsKKwkJfTsKKwkJY29uZi1wdSB7CisJCQlwaW5zID0gIlNQSTJfQ1MiLCAiU1BJMl9IT0xEIiwgIlNQSTJfV1AiOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzhtQT47CisJCQltZWRpYXRlayxwdWxsLXVwLWFkdiA9IDwwPjsJLyogYmlhcy1kaXNhYmxlICovCisJCX07CisJCWNvbmYtcGQgeworCQkJcGlucyA9ICJTUEkyX0NMSyIsICJTUEkyX01PU0kiLCAiU1BJMl9NSVNPIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV84bUE+OworCQkJbWVkaWF0ZWsscHVsbC1kb3duLWFkdiA9IDwwPjsJLyogYmlhcy1kaXNhYmxlICovCisJCX07CisKKwl9OworfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3OTg2Yi1lbW1jLXJmYi5kdHMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtL2Jvb3QvZHRzL210Nzk4NmItZW1tYy1yZmIuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4M2MwOTgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtL2Jvb3QvZHRzL210Nzk4NmItZW1tYy1yZmIuZHRzCkBAIC0wLDAgKzEsMjI5IEBACisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDc5ODZiLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2Yi1waW5jdHJsLmR0c2kiCisvIHsKKwltb2RlbCA9ICJNZWRpYVRlayBNVDc5ODZiIFJGQiI7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODZiLWVtbWMtcmZiIjsKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG4xIGxvZ2xldmVsPTggIFwKKwkJCQllYXJseWNvbj11YXJ0ODI1MCxtbWlvMzIsMHgxMTAwMjAwMCBcCisJCQkJcm9vdD1QQVJUTEFCRUw9cm9vdGZzIHJvb3R3YWl0IHJvb3Rmc3R5cGU9c3F1YXNoZnMsZjJmcyI7CisJfTsKKworCW1lbW9yeSB7CisJCXJlZyA9IDwwIDB4NDAwMDAwMDAgMCAweDEwMDAwMDAwPjsKKwl9OworCisJcmVnXzNwM3Y6IHJlZ3VsYXRvci0zcDN2IHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJmaXhlZC0zLjNWIjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwl9OworfTsKKworJnVhcnQwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCisvKiBXYXJuaW5nOiBwaW5zIHNoYXJlZCB3aXRoICZzbmFuZCAqLworJnVhcnQxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmdWFydDFfcGlucz47CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKKy8qIFdhcm5pbmc6IHBpbnMgc2hhcmVkIHdpdGggJnNwaTEgKi8KKyZ1YXJ0MiB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnVhcnQyX3BpbnM+OworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCismaTJjMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmkyY19waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismd2F0Y2hkb2cgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZldGggeworCXN0YXR1cyA9ICJva2F5IjsKKworCWdtYWMwOiBtYWNAMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssZXRoLW1hYyI7CisJCXJlZyA9IDwwPjsKKwkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKwkJZml4ZWQtbGluayB7CisJCQlzcGVlZCA9IDwyNTAwPjsKKwkJCWZ1bGwtZHVwbGV4OworCQkJcGF1c2U7CisJCX07CisJfTsKKworCWdtYWMxOiBtYWNAMSB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssZXRoLW1hYyI7CisJCXJlZyA9IDwxPjsKKwkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKwkJZml4ZWQtbGluayB7CisJCQlzcGVlZCA9IDwyNTAwPjsKKwkJCWZ1bGwtZHVwbGV4OworCQkJcGF1c2U7CisJCX07CisJfTsKKworCW1kaW86IG1kaW8tYnVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCXBoeTU6IHBoeUA1IHsKKwkJCWNvbXBhdGlibGUgPSAiZXRoZXJuZXQtcGh5LWlkNjdjOS5kZTBhIjsKKwkJCXJlZyA9IDw1PjsKKwkJCXJlc2V0LWdwaW9zID0gPCZwaW8gNiAxPjsKKwkJCXJlc2V0LWRlYXNzZXJ0LXVzID0gPDIwMDAwPjsKKwkJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCQl9OworCisJCXBoeTY6IHBoeUA2IHsKKwkJCWNvbXBhdGlibGUgPSAiZXRoZXJuZXQtcGh5LWlkNjdjOS5kZTBhIjsKKwkJCXJlZyA9IDw2PjsKKwkJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCQl9OworCisJCXN3aXRjaEAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NTMxIjsKKwkJCXJlZyA9IDwzMT47CisJCQlyZXNldC1ncGlvcyA9IDwmcGlvIDUgMD47CisKKwkJCXBvcnRzIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJCXBvcnRAMCB7CisJCQkJCXJlZyA9IDwwPjsKKwkJCQkJbGFiZWwgPSAibGFuMCI7CisJCQkJfTsKKworCQkJCXBvcnRAMSB7CisJCQkJCXJlZyA9IDwxPjsKKwkJCQkJbGFiZWwgPSAibGFuMSI7CisJCQkJfTsKKworCQkJCXBvcnRAMiB7CisJCQkJCXJlZyA9IDwyPjsKKwkJCQkJbGFiZWwgPSAibGFuMiI7CisJCQkJfTsKKworCQkJCXBvcnRAMyB7CisJCQkJCXJlZyA9IDwzPjsKKwkJCQkJbGFiZWwgPSAibGFuMyI7CisJCQkJfTsKKworCQkJCXBvcnRANiB7CisJCQkJCXJlZyA9IDw2PjsKKwkJCQkJbGFiZWwgPSAiY3B1IjsKKwkJCQkJZXRoZXJuZXQgPSA8JmdtYWMwPjsKKwkJCQkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKwkJCQkJZml4ZWQtbGluayB7CisJCQkJCQlzcGVlZCA9IDwyNTAwPjsKKwkJCQkJCWZ1bGwtZHVwbGV4OworCQkJCQkJcGF1c2U7CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZobmF0IHsKKwltdGtldGgtd2FuID0gImV0aDEiOworCW10a2V0aC1sYW4gPSAibGFuIjsKKwltdGtldGgtbWF4LWdtYWMgPSA8Mj47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworLyogV2FybmluZzogcGlucyBzaGFyZWQgd2l0aCAmdWFydDIgKi8KKyZzcGkxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc3BpY19waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismbW1jMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgInN0YXRlX3VocyI7CisJcGluY3RybC0wID0gPCZtbWMwX3BpbnNfZGVmYXVsdD47CisJcGluY3RybC0xID0gPCZtbWMwX3BpbnNfdWhzPjsKKwlidXMtd2lkdGggPSA8OD47CisJbWF4LWZyZXF1ZW5jeSA9IDw1MjAwMDAwMD47CisJY2FwLW1tYy1oaWdoc3BlZWQ7CisJdm1tYy1zdXBwbHkgPSA8JnJlZ18zcDN2PjsKKwl2cW1tYy1zdXBwbHkgPSA8JnJlZ18zcDN2PjsKKwlub24tcmVtb3ZhYmxlOworCW5vLXNkOworCW5vLXNkaW87CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJndic3lzIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismcGlvIHsKKwltbWMwX3BpbnNfZGVmYXVsdDogbW1jMC1waW5zLTIyLXRvLTMyLWRlZmF1bHQgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiZmxhc2giOworCQkJZ3JvdXBzID0gImVtbWNfNDUiOworCQl9OworCQljb25mLWNtZC1kYXQgeworCQkJcGlucyA9ICJTUEkwX0NMSyIsICJTUEkwX01PU0kiLCAiU1BJMF9NSVNPIiwKKwkJCSAgICAgICAiU1BJMF9DUyIsICJTUEkwX0hPTEQiLCAiU1BJMF9XUCIsCisJCQkgICAgICAgIlNQSTFfQ0xLIiwgIlNQSTFfTU9TSSIsICJTUEkxX01JU08iOworCQkJaW5wdXQtZW5hYmxlOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzRtQT47CisJCQltZWRpYXRlayxwdWxsLXVwLWFkdiA9IDwxPjsJLyogcHVsbC11cCAxMEsgKi8KKwkJfTsKKwkJY29uZi1jbGsgeworCQkJcGlucyA9ICJTUEkxX0NTIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV82bUE+OworCQkJbWVkaWF0ZWsscHVsbC1kb3duLWFkdiA9IDwyPjsJLyogcHVsbC1kb3duIDUwSyAqLworCQl9OworCQljb25mLXJzdCB7CisJCQlwaW5zID0gIlBXTTEiOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzRtQT47CisJCQltZWRpYXRlayxwdWxsLXVwLWFkdiA9IDwxPjsJLyogcHVsbC11cCAxMEsgKi8KKwkJfTsKKwl9OworCisJbW1jMF9waW5zX3VoczogbW1jMC1waW5zLTIyLXRvLTMyLXVocyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJmbGFzaCI7CisJCQlncm91cHMgPSAiZW1tY180NSI7CisJCX07CisJCWNvbmYtY21kLWRhdCB7CisJCQlwaW5zID0gIlNQSTBfQ0xLIiwgIlNQSTBfTU9TSSIsICJTUEkwX01JU08iLAorCQkJICAgICAgICJTUEkwX0NTIiwgIlNQSTBfSE9MRCIsICJTUEkwX1dQIiwKKwkJCSAgICAgICAiU1BJMV9DTEsiLCAiU1BJMV9NT1NJIiwgIlNQSTFfTUlTTyI7CisJCQlpbnB1dC1lbmFibGU7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtdXAtYWR2ID0gPDE+OwkvKiBwdWxsLXVwIDEwSyAqLworCQl9OworCQljb25mLWNsayB7CisJCQlwaW5zID0gIlNQSTFfQ1MiOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzZtQT47CisJCQltZWRpYXRlayxwdWxsLWRvd24tYWR2ID0gPDI+OwkvKiBwdWxsLWRvd24gNTBLICovCisJCX07CisJCWNvbmYtcnN0IHsKKwkJCXBpbnMgPSAiUFdNMSI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtdXAtYWR2ID0gPDE+OwkvKiBwdWxsLXVwIDEwSyAqLworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybS9ib290L2R0cy9tdDc5ODZiLXBpbmN0cmwuZHRzaSBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3OTg2Yi1waW5jdHJsLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU4ZTMyNQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3OTg2Yi1waW5jdHJsLmR0c2kKQEAgLTAsMCArMSwyOSBAQAorJnBpbyB7CisJaTJjX3BpbnM6IGkyYy1waW5zLTMtNCB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJpMmMiOworCQkJZ3JvdXBzID0gImkyYyI7CisJCX07CisJfTsKKworCXVhcnQxX3BpbnM6IHVhcnQxLXBpbnMtMjMtdG8tMjYgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAidWFydCI7CisJCQlncm91cHMgPSAidWFydDFfMSI7CisJCX07CisJfTsKKworCXVhcnQyX3BpbnM6IHVhcnQxLXBpbnMtMjktdG8tMzIgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAidWFydCI7CisJCQlncm91cHMgPSAidWFydDJfMCI7CisJCX07CisJfTsKKworCXNwaWNfcGluczogc3BpMS1waW5zLTI5LXRvLTMyIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInNwaSI7CisJCQlncm91cHMgPSAic3BpMV8yIjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3OTg2Yi1zbmZpLW5hbmQtcmZiLmR0cyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3OTg2Yi1zbmZpLW5hbmQtcmZiLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjYwODA4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybS9ib290L2R0cy9tdDc5ODZiLXNuZmktbmFuZC1yZmIuZHRzCkBAIC0wLDAgKzEsMTkyIEBACisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDc5ODZiLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2Yi1waW5jdHJsLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2LXNuZmktbmFuZC1wYXJ0aXRpb24uZHRzaSIKKy8geworCW1vZGVsID0gIk1lZGlhVGVrIE1UNzk4NmIgUkZCIjsKKwljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4NmItc25maS1zbmFuZC1yZmIiOworCWNob3NlbiB7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwbjEgbG9nbGV2ZWw9OCAgXAorCQkJCWVhcmx5Y29uPXVhcnQ4MjUwLG1taW8zMiwweDExMDAyMDAwIjsKKwl9OworCisJbWVtb3J5IHsKKwkJcmVnID0gPDAgMHg0MDAwMDAwMCAwIDB4MTAwMDAwMDA+OworCX07Cit9OworCismdWFydDAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKy8qIFdhcm5pbmc6IHBpbnMgc2hhcmVkIHdpdGggJnNuYW5kICovCismdWFydDEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0MV9waW5zPjsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworLyogV2FybmluZzogcGlucyBzaGFyZWQgd2l0aCAmc3BpMSAqLworJnVhcnQyIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmdWFydDJfcGlucz47CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKKyZpMmMwIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmaTJjX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ3YXRjaGRvZyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmV0aCB7CisJc3RhdHVzID0gIm9rYXkiOworCisJZ21hYzA6IG1hY0AwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKwkJcmVnID0gPDA+OworCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQlmaXhlZC1saW5rIHsKKwkJCXNwZWVkID0gPDI1MDA+OworCQkJZnVsbC1kdXBsZXg7CisJCQlwYXVzZTsKKwkJfTsKKwl9OworCisJZ21hYzE6IG1hY0AxIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKwkJcmVnID0gPDE+OworCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQlmaXhlZC1saW5rIHsKKwkJCXNwZWVkID0gPDI1MDA+OworCQkJZnVsbC1kdXBsZXg7CisJCQlwYXVzZTsKKwkJfTsKKwl9OworCisJbWRpbzogbWRpby1idXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJcGh5NTogcGh5QDUgeworCQkJY29tcGF0aWJsZSA9ICJldGhlcm5ldC1waHktaWQ2N2M5LmRlMGEiOworCQkJcmVnID0gPDU+OworCQkJcmVzZXQtZ3Bpb3MgPSA8JnBpbyA2IDE+OworCQkJcmVzZXQtZGVhc3NlcnQtdXMgPSA8MjAwMDA+OworCQkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisJCX07CisKKwkJcGh5NjogcGh5QDYgeworCQkJY29tcGF0aWJsZSA9ICJldGhlcm5ldC1waHktaWQ2N2M5LmRlMGEiOworCQkJcmVnID0gPDY+OworCQkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisJCX07CisKKwkJc3dpdGNoQDAgeworCQkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc1MzEiOworCQkJcmVnID0gPDMxPjsKKwkJCXJlc2V0LWdwaW9zID0gPCZwaW8gNSAwPjsKKworCQkJcG9ydHMgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQkJcG9ydEAwIHsKKwkJCQkJcmVnID0gPDA+OworCQkJCQlsYWJlbCA9ICJsYW4wIjsKKwkJCQl9OworCisJCQkJcG9ydEAxIHsKKwkJCQkJcmVnID0gPDE+OworCQkJCQlsYWJlbCA9ICJsYW4xIjsKKwkJCQl9OworCisJCQkJcG9ydEAyIHsKKwkJCQkJcmVnID0gPDI+OworCQkJCQlsYWJlbCA9ICJsYW4yIjsKKwkJCQl9OworCisJCQkJcG9ydEAzIHsKKwkJCQkJcmVnID0gPDM+OworCQkJCQlsYWJlbCA9ICJsYW4zIjsKKwkJCQl9OworCisJCQkJcG9ydEA2IHsKKwkJCQkJcmVnID0gPDY+OworCQkJCQlsYWJlbCA9ICJjcHUiOworCQkJCQlldGhlcm5ldCA9IDwmZ21hYzA+OworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmhuYXQgeworCW10a2V0aC13YW4gPSAiZXRoMSI7CisJbXRrZXRoLWxhbiA9ICJsYW4iOworCW10a2V0aC1tYXgtZ21hYyA9IDwyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCisvKiBXYXJuaW5nOiBwaW5zIHNoYXJlZCB3aXRoICZ1YXJ0MSAqLworJnNuYW5kIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc25maV9waW5zPjsKKwltZWRpYXRlayxxdWFkLXNwaTsKKwlzdGF0dXMgPSAib2theSI7CisKKwlwYXJ0aXRpb25zIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1wYXJ0aXRpb25zIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCX07Cit9OworCisvKiBXYXJuaW5nOiBwaW5zIHNoYXJlZCB3aXRoICZ1YXJ0MiAqLworJnNwaTEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzcGljX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ3YnN5cyB7CisJbWVkaWF0ZWssbXRkLWVlcHJvbSA9IDwmZmFjdG9yeSAweDAwMDA+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwaW8geworCXNuZmlfcGluczogc25maS1waW5zLTIzLXRvLTI4IHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJzbmZpIjsKKwkJfTsKKwkJY29uZi1jbGsgeworCQkJcGlucyA9ICJTUEkwX0NMSyI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfOG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtZG93bi1hZHYgPSA8MD47CS8qIGJpYXMtZGlzYWJsZSAqLworCQl9OworCQljb25mLXB1IHsKKwkJCXBpbnMgPSAiU1BJMF9DUyIsICJTUEkwX0hPTEQiLCAiU1BJMF9XUCI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNm1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtdXAtYWR2ID0gPDA+OwkvKiBiaWFzLWRpc2FibGUgKi8KKwkJfTsKKwkJY29uZi1wZCB7CisJCQlwaW5zID0gIlNQSTBfTU9TSSIsICJTUEkwX01JU08iOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzZtQT47CisJCQltZWRpYXRlayxwdWxsLWRvd24tYWR2ID0gPDA+OwkvKiBiaWFzLWRpc2FibGUgKi8KKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3OTg2Yi1zcGltLW5hbmQtcmZiLmR0cyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3OTg2Yi1zcGltLW5hbmQtcmZiLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2VjZWM5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybS9ib290L2R0cy9tdDc5ODZiLXNwaW0tbmFuZC1yZmIuZHRzCkBAIC0wLDAgKzEsMjM4IEBACisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDc5ODZiLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2Yi1waW5jdHJsLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2LXNwaW0tbmFuZC1wYXJ0aXRpb24uZHRzaSIKKy8geworCW1vZGVsID0gIk1lZGlhVGVrIE1UNzk4NmIgUkZCIjsKKwljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4NmItc3BpbS1zbmFuZC1yZmIiOworCWNob3NlbiB7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwbjEgbG9nbGV2ZWw9OCAgXAorCQkJCWVhcmx5Y29uPXVhcnQ4MjUwLG1taW8zMiwweDExMDAyMDAwIjsKKwl9OworCisJbWVtb3J5IHsKKwkJcmVnID0gPDAgMHg0MDAwMDAwMCAwIDB4MTAwMDAwMDA+OworCX07Cit9OworCismdWFydDAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKy8qIFdhcm5pbmc6IHBpbnMgc2hhcmVkIHdpdGggJnNuYW5kICovCismdWFydDEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0MV9waW5zPjsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworLyogV2FybmluZzogcGlucyBzaGFyZWQgd2l0aCAmc3BpMSAqLworJnVhcnQyIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmdWFydDJfcGlucz47CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKKyZpMmMwIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmaTJjX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ3YXRjaGRvZyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmV0aCB7CisJc3RhdHVzID0gIm9rYXkiOworCisJZ21hYzA6IG1hY0AwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKwkJcmVnID0gPDA+OworCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQlmaXhlZC1saW5rIHsKKwkJCXNwZWVkID0gPDI1MDA+OworCQkJZnVsbC1kdXBsZXg7CisJCQlwYXVzZTsKKwkJfTsKKwl9OworCisJZ21hYzE6IG1hY0AxIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKwkJcmVnID0gPDE+OworCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQlmaXhlZC1saW5rIHsKKwkJCXNwZWVkID0gPDI1MDA+OworCQkJZnVsbC1kdXBsZXg7CisJCQlwYXVzZTsKKwkJfTsKKwl9OworCisJbWRpbzogbWRpby1idXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJcGh5NTogcGh5QDUgeworCQkJY29tcGF0aWJsZSA9ICJldGhlcm5ldC1waHktaWQ2N2M5LmRlMGEiOworCQkJcmVnID0gPDU+OworCQkJcmVzZXQtZ3Bpb3MgPSA8JnBpbyA2IDE+OworCQkJcmVzZXQtZGVhc3NlcnQtdXMgPSA8MjAwMDA+OworCQkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisJCX07CisKKwkJcGh5NjogcGh5QDYgeworCQkJY29tcGF0aWJsZSA9ICJldGhlcm5ldC1waHktaWQ2N2M5LmRlMGEiOworCQkJcmVnID0gPDY+OworCQkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisJCX07CisKKwkJc3dpdGNoQDAgeworCQkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc1MzEiOworCQkJcmVnID0gPDMxPjsKKwkJCXJlc2V0LWdwaW9zID0gPCZwaW8gNSAwPjsKKworCQkJcG9ydHMgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQkJcG9ydEAwIHsKKwkJCQkJcmVnID0gPDA+OworCQkJCQlsYWJlbCA9ICJsYW4wIjsKKwkJCQl9OworCisJCQkJcG9ydEAxIHsKKwkJCQkJcmVnID0gPDE+OworCQkJCQlsYWJlbCA9ICJsYW4xIjsKKwkJCQl9OworCisJCQkJcG9ydEAyIHsKKwkJCQkJcmVnID0gPDI+OworCQkJCQlsYWJlbCA9ICJsYW4yIjsKKwkJCQl9OworCisJCQkJcG9ydEAzIHsKKwkJCQkJcmVnID0gPDM+OworCQkJCQlsYWJlbCA9ICJsYW4zIjsKKwkJCQl9OworCisJCQkJcG9ydEA2IHsKKwkJCQkJcmVnID0gPDY+OworCQkJCQlsYWJlbCA9ICJjcHUiOworCQkJCQlldGhlcm5ldCA9IDwmZ21hYzA+OworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmhuYXQgeworCW10a2V0aC13YW4gPSAiZXRoMSI7CisJbXRrZXRoLWxhbiA9ICJsYW4iOworCW10a2V0aC1tYXgtZ21hYyA9IDwyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc3BpMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNwaV9mbGFzaF9waW5zPjsKKwljcy1ncGlvcyA9IDwwPiwgPDA+OworCXN0YXR1cyA9ICJva2F5IjsKKworCXNwaV9ub3JAMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJqZWRlYyxzcGktbm9yIjsKKwkJcmVnID0gPDA+OworCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDw1MjAwMDAwMD47CisJCXNwaS10eC1idXN3aWR0aCA9IDw0PjsKKwkJc3BpLXJ4LWJ1c3dpZHRoID0gPDQ+OworCX07CisKKwlzcGlfbmFuZDogc3BpX25hbmRAMSB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJzcGktbmFuZCI7CisJCXJlZyA9IDwxPjsKKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8NTIwMDAwMDA+OworCQlzcGktdHgtYnVzd2lkdGggPSA8ND47CisJCXNwaS1yeC1idXN3aWR0aCA9IDw0PjsKKwl9OworfTsKKworLyogV2FybmluZzogcGlucyBzaGFyZWQgd2l0aCAmdWFydDIgKi8KKyZzcGkxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc3BpY19waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismd2JzeXMgeworCW1lZGlhdGVrLG10ZC1lZXByb20gPSA8JmZhY3RvcnkgMHgwMDAwPjsKKwlzdGF0dXMgPSAib2theSI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgImRiZGMiOworCXBpbmN0cmwtMCA9IDwmd2ZfMmdfNWdfcGlucz47CisJcGluY3RybC0xID0gPCZ3Zl9kYmRjX3BpbnM+OworfTsKKworJnBpbyB7CisJc3BpX2ZsYXNoX3BpbnM6IHNwaS1mbGFzaC1waW5zLTMzLXRvLTM4IHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJzcGkwIiwgInNwaTBfd3BfaG9sZCI7CisJCX07CisJCWNvbmYtcHUgeworCQkJcGlucyA9ICJTUEkyX0NTIiwgIlNQSTJfSE9MRCIsICJTUEkyX1dQIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV84bUE+OworCQkJbWVkaWF0ZWsscHVsbC11cC1hZHYgPSA8MD47CS8qIGJpYXMtZGlzYWJsZSAqLworCQl9OworCQljb25mLXBkIHsKKwkJCXBpbnMgPSAiU1BJMl9DTEsiLCAiU1BJMl9NT1NJIiwgIlNQSTJfTUlTTyI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfOG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtZG93bi1hZHYgPSA8MD47CS8qIGJpYXMtZGlzYWJsZSAqLworCQl9OworCisJfTsKKworCXdmXzJnXzVnX3BpbnM6IHdmXzJnXzVnLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAid2lmaSI7CisJCQlncm91cHMgPSAid2ZfMmciLCAid2ZfNWciOworCQl9OworCQljb25mIHsKKwkJCXBpbnMgPSAiV0YwX0hCMSIsICJXRjBfSEIyIiwgIldGMF9IQjMiLCAiV0YwX0hCNCIsCisJCQkgICAgICAgIldGMF9IQjAiLCAiV0YwX0hCMF9CIiwgIldGMF9IQjUiLCAiV0YwX0hCNiIsCisJCQkgICAgICAgIldGMF9IQjciLCAiV0YwX0hCOCIsICJXRjBfSEI5IiwgIldGMF9IQjEwIiwKKwkJCSAgICAgICAiV0YwX1RPUF9DTEsiLCAiV0YwX1RPUF9EQVRBIiwgIldGMV9IQjEiLAorCQkJICAgICAgICJXRjFfSEIyIiwgIldGMV9IQjMiLCAiV0YxX0hCNCIsICJXRjFfSEIwIiwKKwkJCSAgICAgICAiV0YxX0hCNSIsICJXRjFfSEI2IiwgIldGMV9IQjciLCAiV0YxX0hCOCIsCisJCQkgICAgICAgIldGMV9UT1BfQ0xLIiwgIldGMV9UT1BfREFUQSI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNG1BPjsKKwkJfTsKKwl9OworCisJd2ZfZGJkY19waW5zOiB3Zl9kYmRjLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAid2lmaSI7CisJCQlncm91cHMgPSAid2ZfZGJkYyI7CisJCX07CisJCWNvbmYgeworCQkJcGlucyA9ICJXRjBfSEIxIiwgIldGMF9IQjIiLCAiV0YwX0hCMyIsICJXRjBfSEI0IiwKKwkJCSAgICAgICAiV0YwX0hCMCIsICJXRjBfSEIwX0IiLCAiV0YwX0hCNSIsICJXRjBfSEI2IiwKKwkJCSAgICAgICAiV0YwX0hCNyIsICJXRjBfSEI4IiwgIldGMF9IQjkiLCAiV0YwX0hCMTAiLAorCQkJICAgICAgICJXRjBfVE9QX0NMSyIsICJXRjBfVE9QX0RBVEEiLCAiV0YxX0hCMSIsCisJCQkgICAgICAgIldGMV9IQjIiLCAiV0YxX0hCMyIsICJXRjFfSEI0IiwgIldGMV9IQjAiLAorCQkJICAgICAgICJXRjFfSEI1IiwgIldGMV9IQjYiLCAiV0YxX0hCNyIsICJXRjFfSEI4IiwKKwkJCSAgICAgICAiV0YxX1RPUF9DTEsiLCAiV0YxX1RPUF9EQVRBIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV80bUE+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybS9ib290L2R0cy9tdDc5ODZiLXNwaW0tbm9yLXJmYi5kdHMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtL2Jvb3QvZHRzL210Nzk4NmItc3BpbS1ub3ItcmZiLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDNkYmI1Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybS9ib290L2R0cy9tdDc5ODZiLXNwaW0tbm9yLXJmYi5kdHMKQEAgLTAsMCArMSwxOTEgQEAKKy9kdHMtdjEvOworI2luY2x1ZGUgIm10Nzk4NmIuZHRzaSIKKyNpbmNsdWRlICJtdDc5ODZiLXBpbmN0cmwuZHRzaSIKKyNpbmNsdWRlICJtdDc5ODYtc3BpbS1ub3ItcGFydGl0aW9uLmR0c2kiCisvIHsKKwltb2RlbCA9ICJNZWRpYVRlayBNVDc5ODZiIFJGQiI7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODZiLW5vci1yZmIiOworCWNob3NlbiB7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwbjEgbG9nbGV2ZWw9OCAgXAorCQkJCWVhcmx5Y29uPXVhcnQ4MjUwLG1taW8zMiwweDExMDAyMDAwIjsKKwl9OworCisJbWVtb3J5IHsKKwkJcmVnID0gPDAgMHg0MDAwMDAwMCAwIDB4MTAwMDAwMDA+OworCX07Cit9OworCismdWFydDAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKy8qIFdhcm5pbmc6IHBpbnMgc2hhcmVkIHdpdGggJnNuYW5kICovCismdWFydDEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0MV9waW5zPjsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworLyogV2FybmluZzogcGlucyBzaGFyZWQgd2l0aCAmc3BpMSAqLworJnVhcnQyIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmdWFydDJfcGlucz47CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKKyZpMmMwIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmaTJjX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ3YXRjaGRvZyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmV0aCB7CisJc3RhdHVzID0gIm9rYXkiOworCisJZ21hYzA6IG1hY0AwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKwkJcmVnID0gPDA+OworCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQlmaXhlZC1saW5rIHsKKwkJCXNwZWVkID0gPDI1MDA+OworCQkJZnVsbC1kdXBsZXg7CisJCQlwYXVzZTsKKwkJfTsKKwl9OworCisJZ21hYzE6IG1hY0AxIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKwkJcmVnID0gPDE+OworCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQlmaXhlZC1saW5rIHsKKwkJCXNwZWVkID0gPDI1MDA+OworCQkJZnVsbC1kdXBsZXg7CisJCQlwYXVzZTsKKwkJfTsKKwl9OworCisJbWRpbzogbWRpby1idXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJcGh5NTogcGh5QDUgeworCQkJY29tcGF0aWJsZSA9ICJldGhlcm5ldC1waHktaWQ2N2M5LmRlMGEiOworCQkJcmVnID0gPDU+OworCQkJcmVzZXQtZ3Bpb3MgPSA8JnBpbyA2IDE+OworCQkJcmVzZXQtZGVhc3NlcnQtdXMgPSA8MjAwMDA+OworCQkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisJCX07CisKKwkJcGh5NjogcGh5QDYgeworCQkJY29tcGF0aWJsZSA9ICJldGhlcm5ldC1waHktaWQ2N2M5LmRlMGEiOworCQkJcmVnID0gPDY+OworCQkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisJCX07CisKKwkJc3dpdGNoQDAgeworCQkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc1MzEiOworCQkJcmVnID0gPDMxPjsKKwkJCXJlc2V0LWdwaW9zID0gPCZwaW8gNSAwPjsKKworCQkJcG9ydHMgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQkJcG9ydEAwIHsKKwkJCQkJcmVnID0gPDA+OworCQkJCQlsYWJlbCA9ICJsYW4wIjsKKwkJCQl9OworCisJCQkJcG9ydEAxIHsKKwkJCQkJcmVnID0gPDE+OworCQkJCQlsYWJlbCA9ICJsYW4xIjsKKwkJCQl9OworCisJCQkJcG9ydEAyIHsKKwkJCQkJcmVnID0gPDI+OworCQkJCQlsYWJlbCA9ICJsYW4yIjsKKwkJCQl9OworCisJCQkJcG9ydEAzIHsKKwkJCQkJcmVnID0gPDM+OworCQkJCQlsYWJlbCA9ICJsYW4zIjsKKwkJCQl9OworCisJCQkJcG9ydEA2IHsKKwkJCQkJcmVnID0gPDY+OworCQkJCQlsYWJlbCA9ICJjcHUiOworCQkJCQlldGhlcm5ldCA9IDwmZ21hYzA+OworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmhuYXQgeworCW10a2V0aC13YW4gPSAiZXRoMSI7CisJbXRrZXRoLWxhbiA9ICJsYW4iOworCW10a2V0aC1tYXgtZ21hYyA9IDwyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc3BpMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNwaV9mbGFzaF9waW5zPjsKKwljcy1ncGlvcyA9IDwwPiwgPDA+OworCXN0YXR1cyA9ICJva2F5IjsKKworCXNwaV9ub3JAMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJqZWRlYyxzcGktbm9yIjsKKwkJcmVnID0gPDA+OworCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDw1MjAwMDAwMD47CisJCXNwaS10eC1idXN3aWR0aCA9IDw0PjsKKwkJc3BpLXJ4LWJ1c3dpZHRoID0gPDQ+OworCX07Cit9OworCisvKiBXYXJuaW5nOiBwaW5zIHNoYXJlZCB3aXRoICZ1YXJ0MiAqLworJnNwaTEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzcGljX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ3YnN5cyB7CisJbWVkaWF0ZWssbXRkLWVlcHJvbSA9IDwmZmFjdG9yeSAweDAwMDA+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwaW8geworCXNwaV9mbGFzaF9waW5zOiBzcGktZmxhc2gtcGlucy0zMy10by0zOCB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJmbGFzaCI7CisJCQlncm91cHMgPSAic3BpMCIsICJzcGkwX3dwX2hvbGQiOworCQl9OworCQljb25mLXB1IHsKKwkJCXBpbnMgPSAiU1BJMl9DUyIsICJTUEkyX0hPTEQiLCAiU1BJMl9XUCI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfOG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtdXAtYWR2ID0gPDA+OwkvKiBiaWFzLWRpc2FibGUgKi8KKwkJfTsKKwkJY29uZi1wZCB7CisJCQlwaW5zID0gIlNQSTJfQ0xLIiwgIlNQSTJfTU9TSSIsICJTUEkyX01JU08iOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzhtQT47CisJCQltZWRpYXRlayxwdWxsLWRvd24tYWR2ID0gPDA+OwkvKiBiaWFzLWRpc2FibGUgKi8KKwkJfTsKKworCX07Cit9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybS9ib290L2R0cy9tdDc5ODZiLmR0c2kgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtL2Jvb3QvZHRzL210Nzk4NmIuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGUzNjQwCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybS9ib290L2R0cy9tdDc5ODZiLmR0c2kKQEAgLTAsMCArMSw2NzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMjAgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBTYW0uU2hpaCA8c2FtLnNoaWhAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvYXJtLWdpYy5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3BoeS9waHkuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9yZXNldC90aS1zeXNjb24uaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9jbG9jay9tdDc5ODYtY2xrLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvdGhlcm1hbC90aGVybWFsLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvcGluY3RybC9tdDY1eHguaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9yZXNldC9tdDc5ODYtcmVzZXRzLmg+CisKKy8geworCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2Yi1yZmIiOworCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJI3NpemUtY2VsbHMgPSA8Mj47CisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJY3B1MDogY3B1QDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNTMiOworCQkJZW5hYmxlLW1ldGhvZCA9ICJwc2NpIjsKKwkJCXJlZyA9IDwweDA+OworCQl9OworCisJCWNwdTE6IGNwdUAxIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTUzIjsKKwkJCWVuYWJsZS1tZXRob2QgPSAicHNjaSI7CisJCQlyZWcgPSA8MHgxPjsKKwkJfTsKKworCQljcHUyOiBjcHVAMiB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE1MyI7CisJCQllbmFibGUtbWV0aG9kID0gInBzY2kiOworCQkJcmVnID0gPDB4Mj47CisJCX07CisKKwkJY3B1MzogY3B1QDMgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWVuYWJsZS1tZXRob2QgPSAicHNjaSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTUzIjsKKwkJCXJlZyA9IDwweDM+OworCQl9OworCX07CisKKwl3ZWQ6IHdlZEAxNTAxMDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssd2VkIjsKKwkJd2VkX251bSA9IDwyPjsKKwkJLyogYWRkIHRoaXMgcHJvcGVydHkgZm9yIHdlZCBnZXQgdGhlIHBjaSBzbG90IG51bWJlci4gKi8KKwkJcGNpX3Nsb3RfbWFwID0gPDA+LCA8MT47CisJCXJlZyA9IDwwIDB4MTUwMTAwMDAgMCAweDEwMDA+LAorCQkgICAgICA8MCAweDE1MDExMDAwIDAgMHgxMDAwPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDIwNSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPEdJQ19TUEkgMjA2IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCX07CisKKwl3ZWQyOiB3ZWQyQDE1MDExMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayx3ZWQyIjsKKwkJd2VkX251bSA9IDwyPjsKKwkJcmVnID0gPDAgMHgxNTAxMDAwMCAwIDB4MTAwMD4sCisJCSAgICAgIDwwIDB4MTUwMTEwMDAgMCAweDEwMDA+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjA1IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8R0lDX1NQSSAyMDYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJfTsKKworCXdkbWE6IHdkbWFAMTUxMDQ4MDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLHdlZC13ZG1hIjsKKwkJcmVnID0gPDAgMHgxNTEwNDgwMCAwIDB4NDAwPiwKKwkJICAgICAgPDAgMHgxNTEwNGMwMCAwIDB4NDAwPjsKKwl9OworCisJYXAyd29jY2lmOiBhcDJ3b2NjaWZAMTUxQTUwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGFwMndvY2NpZiI7CisJCXJlZyA9IDwwIDB4MTUxQTUwMDAgMCAweDEwMDA+LAorCQkgICAgICA8MCAweDE1MUFEMDAwIDAgMHgxMDAwPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDIxMSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPEdJQ19TUEkgMjEyIElSUV9UWVBFX0xFVkVMX0hJR0g+OworICAgICAgICB9OworCisJd29jcHUwX2lsbTogd29jcHUwX2lsbUAxNTFFMDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssd29jcHUwX2lsbSI7CisJCXJlZyA9IDwwIDB4MTUxRTAwMDAgMCAweDgwMDA+OworCX07CisKKyAgICAgICAgd29jcHUxX2lsbTogd29jcHUxX2lsbUAxNTFGMDAwMCB7CisgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJtZWRpYXRlayx3b2NwdTFfaWxtIjsKKyAgICAgICAgICAgICAgICByZWcgPSA8MCAweDE1MUYwMDAwIDAgMHg4MDAwPjsKKyAgICAgICAgfTsKKworCXdvY3B1X2RsbTogd29jcHVfZGxtQDE1MUU4MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayx3b2NwdV9kbG0iOworCQlyZWcgPSA8MCAweDE1MUU4MDAwIDAgMHgyMDAwPiwKKwkJICAgICAgPDAgMHgxNTFGODAwMCAwIDB4MjAwMD47CisKKwkJcmVzZXRzID0gPCZldGhzeXNyc3QgMD47CisJCXJlc2V0LW5hbWVzID0gIndvY3B1X3JzdCI7CisJfTsKKworCWNwdV9ib290OiB3b2NwdV9ib290QDE1MTk0MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayx3b2NwdV9ib290IjsKKwkJcmVnID0gPDAgMHgxNTE5NDAwMCAwIDB4MTAwMD47CisJfTsKKworCXJlc2VydmVkLW1lbW9yeSB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJcmFuZ2VzOworCisJCS8qIDE5MiBLaUIgcmVzZXJ2ZWQgZm9yIEFSTSBUcnVzdGVkIEZpcm13YXJlIChCTDMxKSAqLworCQlzZWNtb25fcmVzZXJ2ZWQ6IHNlY21vbkA0MzAwMDAwMCB7CisJCQlyZWcgPSA8MCAweDQzMDAwMDAwIDAgMHgzMDAwMD47CisJCQluby1tYXA7CisJCX07CisKKwkJd21jcHVfZW1pOiB3bWNwdS1yZXNlcnZlZEA0RkMwMDAwMCB7CisJCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLHdtY3B1LXJlc2VydmVkIjsKKwkJCW5vLW1hcDsKKwkJCXJlZyA9IDwwIDB4NEZDMDAwMDAgMCAweDAwMTAwMDAwPjsKKwkJfTsKKworCQl3b2NwdTBfZW1pOiB3b2NwdTBfZW1pQDRGRDAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssd29jcHUwX2VtaSI7CisJCQluby1tYXA7CisJCQlyZWcgPSA8MCAweDRGRDAwMDAwIDAgMHg0MDAwMD47CisJCQlzaGFyZWQgPSA8MD47CisJCX07CisKKwkJd29jcHUxX2VtaTogd29jcHUxX2VtaUA0RkQ0MDAwMCB7CisJCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLHdvY3B1MV9lbWkiOworCQkJbm8tbWFwOworCQkJcmVnID0gPDAgMHg0RkQ0MDAwMCAwIDB4NDAwMDA+OworCQkJc2hhcmVkID0gPDA+OworCQl9OworCisJCXdvY3B1X2RhdGE6IHdvY3B1X2RhdGFANEZEODAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayx3b2NwdV9kYXRhIjsKKwkJCW5vLW1hcDsKKwkJCXJlZyA9IDwwIDB4NEZEODAwMDAgMCAweDI0MDAwMD47CisJCQlzaGFyZWQgPSA8MT47CisJCX07CisJfTsKKworCXBzY2kgeworCQljb21wYXRpYmxlICA9ICJhcm0scHNjaS0wLjIiOworCQltZXRob2QgICAgICA9ICJzbWMiOworCX07CisKKwljbGs0MG06IG9zY2lsbGF0b3JAMCB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDAwMD47CisJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGt4dGFsIjsKKwl9OworCisJc3lzdGVtX2NsazogZHVtbXlfc3lzdGVtX2NsayB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwMDA+OworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJfTsKKworCXRpbWVyIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0sYXJtdjgtdGltZXIiOworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MTMwMDAwMDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19QUEkgMTMgSVJRX1RZUEVfTEVWRUxfTE9XPiwKKwkJCSAgICAgPEdJQ19QUEkgMTQgSVJRX1RZUEVfTEVWRUxfTE9XPiwKKwkJCSAgICAgPEdJQ19QUEkgMTEgSVJRX1RZUEVfTEVWRUxfTE9XPiwKKwkJCSAgICAgPEdJQ19QUEkgMTAgSVJRX1RZUEVfTEVWRUxfTE9XPjsKKwl9OworCisJaW5mcmFjZmdfYW86IGluZnJhY2ZnX2FvQDEwMDAxMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtaW5mcmFjZmdfYW8iLCAic3lzY29uIjsKKwkJcmVnID0gPDAgMHgxMDAwMTAwMCAwIDB4Njg+OworCQkjY2xvY2stY2VsbHMgPSA8MT47CisJfTsKKworCWluZnJhY2ZnOiBpbmZyYWNmZ0AxMDAwMTA0MCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LWluZnJhY2ZnIiwgInN5c2NvbiI7CisJCXJlZyA9IDwwIDB4MTAwMDEwNmMgMCAweDEwMDA+OworCQkjY2xvY2stY2VsbHMgPSA8MT47CisJfTsKKworCXRvcGNrZ2VuOiB0b3Bja2dlbkAxMDAxQjAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXRvcGNrZ2VuIiwgInN5c2NvbiI7CisJCXJlZyA9IDwwIDB4MTAwMUIwMDAgMCAweDEwMDA+OworCQkjY2xvY2stY2VsbHMgPSA8MT47CisJfTsKKworCWFwbWl4ZWRzeXM6IGFwbWl4ZWRzeXNAMTAwMUUwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni1hcG1peGVkc3lzIiwgInN5c2NvbiI7CisJCXJlZyA9IDwwIDB4MTAwMUUwMDAgMCAweDEwMDA+OworCQkjY2xvY2stY2VsbHMgPSA8MT47CisJfTsKKworCXdhdGNoZG9nOiB3YXRjaGRvZ0AxMDAxYzAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXdkdCI7CisJCXJlZyA9IDwwIDB4MTAwMWMwMDAgMCAweDEwMDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTEwIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkjcmVzZXQtY2VsbHMgPSA8MT47CisJfTsKKworCWdpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJAYzAwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAiYXJtLGdpYy12MyI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisJCWludGVycnVwdC1jb250cm9sbGVyOworCQlyZWcgPSA8MCAweDBjMDAwMDAwIDAgMHg0MDAwMD4sICAvKiBHSUNEICovCisJCSAgICAgIDwwIDB4MGMwODAwMDAgMCAweDIwMDAwMD47IC8qIEdJQ1IgKi8KKworCQlpbnRlcnJ1cHRzID0gPEdJQ19QUEkgOSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwl9OworCisJcHdtOiBwd21AMTAwNDgwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni1wd20iOworCQlyZWcgPSA8MCAweDEwMDQ4MDAwIDAgMHgxMDAwPjsKKwkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkjcHdtLWNlbGxzID0gPDI+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTM3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8JmluZnJhY2ZnIENLX0lORlJBX1BXTT4sCisJCQkgPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9QV01fQlNFTD4sCisJCQkgPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9QV00xX0NLPiwKKwkJCSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX1BXTTJfQ0s+OworCQlhc3NpZ25lZC1jbG9ja3MgPSA8JnRvcGNrZ2VuIENLX1RPUF9QV01fU0VMPiwKKwkJCQkgIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfUFdNX0JTRUw+LAorCQkJCSAgPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9QV00xX1NFTD4sCisJCQkJICA8JmluZnJhY2ZnX2FvIENLX0lORlJBX1BXTTJfU0VMPjsKKwkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmdG9wY2tnZW4gQ0tfVE9QX0NCX01fRDQ+LAorCQkJCQkgPCZpbmZyYWNmZyBDS19JTkZSQV9QV00+LAorCQkJCQkgPCZpbmZyYWNmZyBDS19JTkZSQV9QV00+LAorCQkJCQkgPCZpbmZyYWNmZyBDS19JTkZSQV9QV00+OworCQljbG9jay1uYW1lcyA9ICJ0b3AiLCAibWFpbiIsICJwd20xIiwgInB3bTIiOworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwl1YXJ0MDogc2VyaWFsQDExMDAyMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtdWFydCIsCisJCQkgICAgICJtZWRpYXRlayxtdDY1NzctdWFydCI7CisJCXJlZyA9IDwwIDB4MTEwMDIwMDAgMCAweDQwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMjMgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfVUFSVDBfQ0s+OworCQlhc3NpZ25lZC1jbG9ja3MgPSA8JnRvcGNrZ2VuIENLX1RPUF9VQVJUX1NFTD4sCisJCQkJICA8JmluZnJhY2ZnX2FvIENLX0lORlJBX1VBUlQwX1NFTD47CisJCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JnRvcGNrZ2VuIENLX1RPUF9DQl9DS1NRXzQwTT4sCisJCQkJCSA8JmluZnJhY2ZnIENLX0lORlJBX1VBUlQ+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwl1YXJ0MTogc2VyaWFsQDExMDAzMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtdWFydCIsCisJCQkgICAgICJtZWRpYXRlayxtdDY1NzctdWFydCI7CisJCXJlZyA9IDwwIDB4MTEwMDMwMDAgMCAweDQwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMjQgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfVUFSVDFfQ0s+OworCQlhc3NpZ25lZC1jbG9ja3MgPSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX1VBUlQxX1NFTD47CisJCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JmluZnJhY2ZnIENLX0lORlJBX0NLX0YyNk0+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwl1YXJ0Mjogc2VyaWFsQDExMDA0MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtdWFydCIsCisJCQkgICAgICJtZWRpYXRlayxtdDY1NzctdWFydCI7CisJCXJlZyA9IDwwIDB4MTEwMDQwMDAgMCAweDQwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMjUgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfVUFSVDJfQ0s+OworCQlhc3NpZ25lZC1jbG9ja3MgPSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX1VBUlQyX1NFTD47CisJCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JmluZnJhY2ZnIENLX0lORlJBX0NLX0YyNk0+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKyAgICAgICAgaTJjMDogaTJjQDExMDA4MDAwIHsKKyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni1pMmMiOworICAgICAgICAgICAgICAgIHJlZyA9IDwwIDB4MTEwMDgwMDAgMCAweDkwPiwKKyAgICAgICAgICAgICAgICAgICAgICA8MCAweDEwMjE3MDgwIDAgMHg4MD47CisgICAgICAgICAgICAgICAgaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEzNiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKyAgICAgICAgICAgICAgICBjbG9jay1kaXYgPSA8NT47CisgICAgICAgICAgICAgICAgY2xvY2tzID0gPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9JMkNPX0NLPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICA8JmluZnJhY2ZnX2FvIENLX0lORlJBX0FQX0RNQV9DSz47CisgICAgICAgICAgICAgICAgY2xvY2stbmFtZXMgPSAibWFpbiIsICJkbWEiOworICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gPDE+OworICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gPDA+OworICAgICAgICAgICAgICAgIHN0YXR1cyA9ICJkaXNhYmxlZCI7CisgICAgICAgIH07CisKKwl0aGVybWFsLXpvbmVzIHsKKwkJY3B1X3RoZXJtYWw6IGNwdS10aGVybWFsIHsKKwkJCXBvbGxpbmctZGVsYXktcGFzc2l2ZSA9IDwxMDAwPjsKKwkJCXBvbGxpbmctZGVsYXkgPSA8MTAwMD47CisJCQl0aGVybWFsLXNlbnNvcnMgPSA8JnRoZXJtYWwgMD47CisJCX07CisJfTsKKworCXRoZXJtYWw6IHRoZXJtYWxAMTEwMGM4MDAgeworCQkjdGhlcm1hbC1zZW5zb3ItY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXRoZXJtYWwiOworCQlyZWcgPSA8MCAweDExMDBjODAwIDAgMHg4MDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTM4IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX1RIRVJNX0NLPiwKKwkJCSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX0FEQ18yNk1fQ0s+LAorCQkJIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfQURDX0ZSQ19DSz47CisJCWNsb2NrLW5hbWVzID0gInRoZXJtIiwgImF1eGFkYyIsICJhZGNfMzJrIjsKKwkJbWVkaWF0ZWssYXV4YWRjID0gPCZhdXhhZGM+OworCQltZWRpYXRlayxhcG1peGVkc3lzID0gPCZhcG1peGVkc3lzPjsKKwkJbnZtZW0tY2VsbHMgPSA8JnRoZXJtYWxfY2FsaWJyYXRpb24+OworCQludm1lbS1jZWxsLW5hbWVzID0gImNhbGlicmF0aW9uLWRhdGEiOworCX07CisKKwljcnlwdG86IGNyeXB0b0AxMDMyMDAwMCB7CisJCWNvbXBhdGlibGUgPSAiaW5zaWRlLXNlY3VyZSxzYWZleGNlbC1laXA5NyI7CisJCXJlZyA9IDwwIDB4MTAzMjAwMDAgMCAweDQwMDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDExNiBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPEdJQ19TUEkgMTE3IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8R0lDX1NQSSAxMTggSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDxHSUNfU1BJIDExOSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJaW50ZXJydXB0LW5hbWVzID0gInJpbmcwIiwgInJpbmcxIiwgInJpbmcyIiwgInJpbmczIjsKKwkJY2xvY2tzID0gPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9FSVA5N19DSz47CisJCWNsb2NrLW5hbWVzID0gImluZnJhX2VpcDk3X2NrIjsKKwkJYXNzaWduZWQtY2xvY2tzID0gPCZ0b3Bja2dlbiBDS19UT1BfRUlQX0JfU0VMPjsKKwkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmdG9wY2tnZW4gQ0tfVE9QX0NCX05FVDJfODAwTT47CisJfTsKKworCXBpbzogcGluY3RybEAxMDAxZjAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXBpbmN0cmwiOworCQlyZWcgPSA8MCAweDEwMDFmMDAwIDAgMHgxMDAwPiwKKwkJICAgICAgPDAgMHgxMWMzMDAwMCAwIDB4MTAwMD4sCisJCSAgICAgIDwwIDB4MTFjNDAwMDAgMCAweDEwMDA+LAorCQkgICAgICA8MCAweDExZTIwMDAwIDAgMHgxMDAwPiwKKwkJICAgICAgPDAgMHgxMWUzMDAwMCAwIDB4MTAwMD4sCisJCSAgICAgIDwwIDB4MTFmMDAwMDAgMCAweDEwMDA+LAorCQkgICAgICA8MCAweDExZjEwMDAwIDAgMHgxMDAwPiwKKwkJICAgICAgPDAgMHgxMDAwYjAwMCAwIDB4MTAwMD47CisJCXJlZy1uYW1lcyA9ICJncGlvX2Jhc2UiLCAiaW9jZmdfcnRfYmFzZSIsICJpb2NmZ19yYl9iYXNlIiwKKwkJCSAgICAiaW9jZmdfbHRfYmFzZSIsICJpb2NmZ19sYl9iYXNlIiwgImlvY2ZnX3RyX2Jhc2UiLAorCQkJICAgICJpb2NmZ190bF9iYXNlIiwgImVpbnQiOworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCQlncGlvLXJhbmdlcyA9IDwmcGlvIDAgMCAxMDA+OworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDIyNSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZXRoc3lzOiBzeXNjb25AMTUwMDAwMDAgeworICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gPDE+OworICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gPDE+OworICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LWV0aHN5c19jayIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzeXNjb24iOworICAgICAgICAgICAgICAgIHJlZyA9IDwwIDB4MTUwMDAwMDAgMCAweDEwMDA+OworICAgICAgICAgICAgICAgICNjbG9jay1jZWxscyA9IDwxPjsKKyAgICAgICAgICAgICAgICAjcmVzZXQtY2VsbHMgPSA8MT47CisKKwkJZXRoc3lzcnN0OiByZXNldC1jb250cm9sbGVyIHsKKwkJCWNvbXBhdGlibGUgPSAidGksc3lzY29uLXJlc2V0IjsKKwkJCSNyZXNldC1jZWxscyA9IDwxPjsKKwkJCXRpLHJlc2V0LWJpdHMgPSA8MHgzNCA0IDB4MzQgNCAweDM0IDQgKEFTU0VSVF9TRVQgfCBERUFTU0VSVF9DTEVBUiB8IFNUQVRVU19TRVQpPjsKKwkJfTsKKyAgICAgICAgfTsKKworICAgICAgICBldGg6IGV0aGVybmV0QDE1MTAwMDAwIHsKKyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni1ldGgiOworICAgICAgICAgICAgICAgIHJlZyA9IDwwIDB4MTUxMDAwMDAgMCAweDgwMDAwPjsKKyAgICAgICAgICAgICAgICBpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTk2IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8R0lDX1NQSSAxOTcgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxHSUNfU1BJIDE5OCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEdJQ19TUEkgMTk5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworICAgICAgICAgICAgICAgIGNsb2NrcyA9IDwmZXRoc3lzIENLX0VUSF9GRV9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZldGhzeXMgQ0tfRVRIX0dQMl9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZldGhzeXMgQ0tfRVRIX0dQMV9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZldGhzeXMgQ0tfRVRIX1dPQ1BVMV9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZldGhzeXMgQ0tfRVRIX1dPQ1BVMF9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZzZ21paXN5czAgQ0tfU0dNMF9UWF9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZzZ21paXN5czAgQ0tfU0dNMF9SWF9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZzZ21paXN5czAgQ0tfU0dNMF9DSzBfRU4+LAorICAgICAgICAgICAgICAgICAgICAgICAgIDwmc2dtaWlzeXMwIENLX1NHTTBfQ0RSX0NLMF9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZzZ21paXN5czEgQ0tfU0dNMV9UWF9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZzZ21paXN5czEgQ0tfU0dNMV9SWF9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZzZ21paXN5czEgQ0tfU0dNMV9DSzFfRU4+LAorICAgICAgICAgICAgICAgICAgICAgICAgIDwmc2dtaWlzeXMxIENLX1NHTTFfQ0RSX0NLMV9FTj47CisgICAgICAgICAgICAgICAgY2xvY2stbmFtZXMgPSAiZmUiLCAiZ3AyIiwgImdwMSIsICJ3b2NwdTEiLCAid29jcHUwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2dtaWlfdHgyNTBtIiwgInNnbWlpX3J4MjUwbSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgInNnbWlpX2Nkcl9yZWYiLCAic2dtaWlfY2RyX2ZiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2dtaWkyX3R4MjUwbSIsICJzZ21paTJfcngyNTBtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2dtaWkyX2Nkcl9yZWYiLCAic2dtaWkyX2Nkcl9mYiI7CisJCWFzc2lnbmVkLWNsb2NrcyA9IDwmdG9wY2tnZW4gQ0tfVE9QX05FVFNZU18yWF9TRUw+LAorCQkJCSAgPCZ0b3Bja2dlbiBDS19UT1BfU0dNXzMyNU1fU0VMPjsKKwkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmdG9wY2tnZW4gQ0tfVE9QX0NCX05FVDJfODAwTT4sCisJCQkJCSA8JnRvcGNrZ2VuIENLX1RPUF9DQl9TR01fMzI1TT47CisgICAgICAgICAgICAgICAgbWVkaWF0ZWssZXRoc3lzID0gPCZldGhzeXM+OworCQltZWRpYXRlayxzZ21paXN5cyA9IDwmc2dtaWlzeXMwPiwgPCZzZ21paXN5czE+OworICAgICAgICAgICAgICAgICNyZXNldC1jZWxscyA9IDwxPjsKKyAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IDwxPjsKKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IDwwPjsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSAiZGlzYWJsZWQiOworICAgICAgICB9OworCisJaG5hdDogaG5hdEAxNTAwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXRrLWhuYXRfdjQiOworCQlyZWcgPSA8MCAweDE1MTAwMDAwIDAgMHg4MDAwMD47CisJCXJlc2V0cyA9IDwmZXRoc3lzIDA+OworCQlyZXNldC1uYW1lcyA9ICJtdGtldGgiOworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwlzZ21paXN5czA6IHN5c2NvbkAxMDA2MDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXNnbWlpc3lzIiwKKwkJCQkibWVkaWF0ZWssbXQ3OTg2LXNnbWlpc3lzXzAiLAorCQkJCSJzeXNjb24iOworCQlyZWcgPSA8MCAweDEwMDYwMDAwIDAgMHgxMDAwPjsKKwkJI2Nsb2NrLWNlbGxzID0gPDE+OworCX07CisKKwlzZ21paXN5czE6IHN5c2NvbkAxMDA3MDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXNnbWlpc3lzIiwKKwkJCQkgIm1lZGlhdGVrLG10Nzk4Ni1zZ21paXN5c18xIiwKKwkJCQkgInN5c2NvbiI7CisJCXJlZyA9IDwwIDB4MTAwNzAwMDAgMCAweDEwMDA+OworCQkjY2xvY2stY2VsbHMgPSA8MT47CisJfTsKKworCXNuYW5kOiBzbmZpQDExMDA1MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtc25hbmQiOworCQlyZWcgPSA8MCAweDExMDA1MDAwIDAgMHgxMDAwPiwgPDAgMHgxMTAwNjAwMCAwIDB4MTAwMD47CisJCXJlZy1uYW1lcyA9ICJuZmkiLCAiZWNjIjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEyMSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9TUElORkkxX0NLPiwKKwkJCSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX05GSTFfQ0s+LAorCQkJIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfTkZJX0hDS19DSz47CisJCWNsb2NrLW5hbWVzID0gInBhZF9jbGsiLCAibmZpX2NsayIsICJuZmlfaGNsayI7CisJCWFzc2lnbmVkLWNsb2NrcyA9IDwmdG9wY2tnZW4gQ0tfVE9QX1NQSU5GSV9TRUw+LAorCQkJIAkgIDwmdG9wY2tnZW4gQ0tfVE9QX05GSTFYX1NFTD47CisJCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JnRvcGNrZ2VuIENLX1RPUF9DQl9NX0Q4PiwKKwkJCQkJIDwmdG9wY2tnZW4gQ0tfVE9QX0NCX01fRDg+OworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXdic3lzOiB3YnN5c0AxODAwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssd2JzeXMiLAorCQkJICAgICAibWVkaWF0ZWssbXQ3OTg2LXdtYWMiOworCQlyZXNldHMgPSA8JndhdGNoZG9nIE1UNzk4Nl9UT1BSR1VfQ09OU1lTX1JTVD47CisJCXJlc2V0LW5hbWVzID0gImNvbnN5cyI7CisJCXJlZyA9IDwwIDB4MTgwMDAwMDAgMCAweDEwMDAwMDA+LAorCQkgICAgICA8MCAweDEwMDAzMDAwIDAgMHgxMDAwPiwKKwkJICAgICAgPDAgMHgxMWQxMDAwMCAwIDB4MTAwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyMTMgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJCSA8R0lDX1NQSSAyMTQgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJCSA8R0lDX1NQSSAyMTUgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJCSA8R0lDX1NQSSAyMTYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNoaXBfaWQgPSA8MHg3OTg2PjsKKwkJbWVtb3J5LXJlZ2lvbiA9IDwmd21jcHVfZW1pPjsKKwl9OworCisJd2VkX3BjaWU6IHdlZF9wY2llQDEwMDAzMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayx3ZWRfcGNpZSI7CisJCXJlZyA9IDwwIDB4MTAwMDMwMDAgMCAweDEwPjsKKwl9OworCisJc3BpMDogc3BpQDExMDBhMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxpcG0tc3BpLXF1YWQiOworCQlyZWcgPSA8MCAweDExMDBhMDAwIDAgMHgxMDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTQwIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8JnRvcGNrZ2VuIENLX1RPUF9DQl9NX0QyPiwKKwkJCSA8JnRvcGNrZ2VuIENLX1RPUF9TUElfU0VMPiwKKwkJCSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX1NQSTBfQ0s+LAorCQkJIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfU1BJMF9IQ0tfQ0s+OworCQljbG9jay1uYW1lcyA9ICJwYXJlbnQtY2xrIiwgInNlbC1jbGsiLCAic3BpLWNsayIsICJzcGktaGNsayI7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXNwaTE6IHNwaUAxMTAwYjAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssaXBtLXNwaS1zaW5nbGUiOworCQlyZWcgPSA8MCAweDExMDBiMDAwIDAgMHgxMDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTQxIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8JnRvcGNrZ2VuIENLX1RPUF9DQl9NX0QyPiwKKwkJCSA8JnRvcGNrZ2VuIENLX1RPUF9TUElNX01TVF9TRUw+LAorCQkJIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfU1BJMV9DSz4sCisJCQkgPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9TUEkxX0hDS19DSz47CisJCWNsb2NrLW5hbWVzID0gInBhcmVudC1jbGsiLCAic2VsLWNsayIsICJzcGktY2xrIiwgInNwaS1oY2xrIjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJbW1jMDogbW1jQDExMjMwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtbW1jIjsKKwkJcmVnID0gPDAgMHgxMTIzMDAwMCAwIDB4MTAwMD4sCisJCQk8MCAweDExYzIwMDAwIDAgMHgxMDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE0MyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZ0b3Bja2dlbiBDS19UT1BfRU1NQ180MTZNPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0VNTUNfMjUwTT4sCisJCQk8JmluZnJhY2ZnX2FvIENLX0lORlJBX01TRENfQ0s+OworCQljbG9jay1uYW1lcyA9ICJzb3VyY2UiLCAiaGNsayIsICJzb3VyY2VfY2ciOworCQlhc3NpZ25lZC1jbG9ja3MgPSA8JnRvcGNrZ2VuIENLX1RPUF9FTU1DXzQxNk1fU0VMPiwKKwkJCQkgIDwmdG9wY2tnZW4gQ0tfVE9QX0VNTUNfMjUwTV9TRUw+OworCQlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZ0b3Bja2dlbiBDS19UT1BfQ0JfTV80MTZNPiwKKwkJCQkJIDwmdG9wY2tnZW4gQ0tfVE9QX05FVDFfRDVfRDI+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwlhdXhhZGM6IGFkY0AxMTAwZDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LWF1eGFkYyIsCisJCQkgICAgICJtZWRpYXRlayxtdDc2MjItYXV4YWRjIjsKKwkJcmVnID0gPDAgMHgxMTAwZDAwMCAwIDB4MTAwMD47CisJCWNsb2NrcyA9IDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfQURDXzI2TV9DSz4sCisJCQkgPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9BRENfRlJDX0NLPjsKKwkJY2xvY2stbmFtZXMgPSAibWFpbiIsICIzMmsiOworCQkjaW8tY2hhbm5lbC1jZWxscyA9IDwxPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJY29uc3lzOiBjb25zeXNAMTAwMDAwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni1jb25zeXMiOworCQlyZWcgPSA8MCAweDEwMDAwMDAwIDAgMHg4NjAwMDAwPjsKKwkJbWVtb3J5LXJlZ2lvbiA9IDwmd21jcHVfZW1pPjsKKwl9OworCisJeGhjaTogeGhjaUAxMTIwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXhoY2kiLAorCQkJICAgICAibWVkaWF0ZWssbXRrLXhoY2kiOworCQlyZWcgPSA8MCAweDExMjAwMDAwIDAgMHgyZTAwPiwKKwkJICAgICAgPDAgMHgxMTIwM2UwMCAwIDB4MDEwMD47CisJCXJlZy1uYW1lcyA9ICJtYWMiLCAiaXBwYyI7CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNzMgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCXBoeXMgPSA8JnUzcG9ydDAgUEhZX1RZUEVfVVNCMz4sCisJCSAgICAgICA8JnUycG9ydDEgUEhZX1RZUEVfVVNCMj47CisJCWNsb2NrcyA9IDwmc3lzdGVtX2Nsaz4sCisJCQkgPCZzeXN0ZW1fY2xrPiwKKwkJCSA8JnN5c3RlbV9jbGs+LAorCQkJIDwmc3lzdGVtX2Nsaz4sCisJCQkgPCZzeXN0ZW1fY2xrPjsKKwkJY2xvY2stbmFtZXMgPSAic3lzX2NrIiwKKwkJCSAgICAgICJ4aGNpX2NrIiwKKwkJCSAgICAgICJyZWZfY2siLAorCQkJICAgICAgIm1jdV9jayIsCisJCQkgICAgICAiZG1hX2NrIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQlzdGF0dXMgPSAib2theSI7CisJfTsKKworCXVzYnRwaHk6IHVzYi1waHlAMTFlMTAwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4NiIsCisJCQkgICAgICJtZWRpYXRlayxnZW5lcmljLXRwaHktdjIiOworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCXJhbmdlczsKKwkJc3RhdHVzID0gIm9rYXkiOworCisJCXUycG9ydDA6IHVzYi1waHlAMTFlMTAwMDAgeworCQkJcmVnID0gPDAgMHgxMWUxMDAwMCAwIDB4NzAwPjsKKwkJCWNsb2NrcyA9IDwmc3lzdGVtX2Nsaz47CisJCQljbG9jay1uYW1lcyA9ICJyZWYiOworCQkJI3BoeS1jZWxscyA9IDwxPjsKKwkJCWF1dG9fbG9hZF92YWxpZDsKKwkJCW52bWVtLWNlbGxzID0gPCZ1Ml9pbnRyX3AwPiwgPCZ1Ml9hdXRvX2xvYWRfdmFsaWRfcDA+OworCQkJbnZtZW0tY2VsbC1uYW1lcyA9ICJpbnRyIiwgImF1dG9fbG9hZF92YWxpZCI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXUzcG9ydDA6IHVzYi1waHlAMTFlMTA3MDAgeworCQkJcmVnID0gPDAgMHgxMWUxMDcwMCAwIDB4OTAwPjsKKwkJCWNsb2NrcyA9IDwmc3lzdGVtX2Nsaz47CisJCQljbG9jay1uYW1lcyA9ICJyZWYiOworCQkJI3BoeS1jZWxscyA9IDwxPjsKKwkJCWF1dG9fbG9hZF92YWxpZDsKKwkJCW52bWVtLWNlbGxzID0gPCZjb21iX2ludHJfcDA+LAorCQkJICAgICAgPCZjb21iX3J4X2ltcF9wMD4sCisJCQkgICAgICA8JmNvbWJfdHhfaW1wX3AwPiwKKwkJCSAgICAgIDwmY29tYl9hdXRvX2xvYWRfdmFsaWQ+OworCQkJbnZtZW0tY2VsbC1uYW1lcyA9ICJpbnRyIiwgInJ4X2ltcCIsICJ0eF9pbXAiLCAiYXV0b19sb2FkX3ZhbGlkIjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQl1MnBvcnQxOiB1c2ItcGh5QDExZTExMDAwIHsKKwkJCXJlZyA9IDwwIDB4MTFlMTEwMDAgMCAweDcwMD47CisJCQljbG9ja3MgPSA8JnN5c3RlbV9jbGs+OworCQkJY2xvY2stbmFtZXMgPSAicmVmIjsKKwkJCSNwaHktY2VsbHMgPSA8MT47CisJCQlhdXRvX2xvYWRfdmFsaWQ7CisJCQludm1lbS1jZWxscyA9IDwmdTJfaW50cl9wMT4sIDwmdTJfYXV0b19sb2FkX3ZhbGlkX3AxPjsKKwkJCW52bWVtLWNlbGwtbmFtZXMgPSAiaW50ciIsICJhdXRvX2xvYWRfdmFsaWQiOworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCX07CisKKwljbGtpdGc6IGNsa2l0ZyB7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJfTsKKworCXRybmc6IHRybmdAMTAyMGYwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni1ybmciLAorCQkJICAgICAibWVkaWF0ZWssbXQ3NjIzLXJuZyI7CisJCXJlZyA9IDwwIDB4MTAyMGYwMDAgMCAweDEwMD47CisJCWNsb2NrcyA9IDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfVFJOR19DSz47CisJCWNsb2NrLW5hbWVzID0gInJuZyI7CisJfTsKKworCWljZTogaWNlX2RlYnVnIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtaWNlX2RlYnVnIiwKKwkJCSJtZWRpYXRlayxtdDI3MDEtaWNlX2RlYnVnIjsKKwkJY2xvY2tzID0gPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9EQkdfQ0s+LAorCQkJIDwmdG9wY2tnZW4gQ0tfVE9QX0FSTV9EQl9KVFNFTD47CisJCWNsb2NrLW5hbWVzID0gImljZV9kYmciLCAiZGJnX2p0c2VsIjsKKwl9OworCisJZWZ1c2U6IGVmdXNlQDExZDAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtZWZ1c2UiLAorCQkJICAgICAibWVkaWF0ZWssZWZ1c2UiOworCQlyZWcgPSA8MCAweDExZDAwMDAwIDAgMHgxMDAwPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCisJCXRoZXJtYWxfY2FsaWJyYXRpb246IGNhbGliQDI3NCB7CisJCQlyZWcgPSA8MHgyNzQgMHhjPjsKKwkJfTsKKworCQljb21iX2F1dG9fbG9hZF92YWxpZDogdXNiMy1hbHYtaW1wQDhkYSB7CisJCQlyZWcgPSA8MHg4ZGEgMT47CisJCQliaXRzID0gPDAgMT47CisJCX07CisKKwkJY29tYl9yeF9pbXBfcDA6IHVzYjMtcngtaW1wQDhkOCB7CisJCQlyZWcgPSA8MHg4ZDggMT47CisJCQliaXRzID0gPDAgNT47CisJCX07CisKKwkJY29tYl90eF9pbXBfcDA6IHVzYjMtdHgtaW1wQDhkOCB7CisJCQlyZWcgPSA8MHg4ZDggMj47CisJCQliaXRzID0gPDUgNT47CisJCX07CisKKwkJY29tYl9pbnRyX3AwOiB1c2IzLWludHJAOGQ5IHsKKwkJCXJlZyA9IDwweDhkOSAxPjsKKwkJCWJpdHMgPSA8MiA2PjsKKwkJfTsKKworCQl1Ml9hdXRvX2xvYWRfdmFsaWRfcDA6IHVzYjItYWx2LXAwQDhlMCB7CisJCQlyZWcgID0gPDB4OGUwIDE+OworCQkJYml0cyA9IDwwIDE+OworCQl9OworCisJCXUyX2ludHJfcDA6IHVzYjItaW50ci1wMEA4ZTAgeworCQkJcmVnICA9IDwweDhlMCAxPjsKKwkJCWJpdHMgPSA8MSA1PjsKKwkJfTsKKworCQl1Ml9hdXRvX2xvYWRfdmFsaWRfcDE6IHVzYjItYWx2LXAxQDhlMCB7CisJCQlyZWcgID0gPDB4OGUwIDI+OworCQkJYml0cyA9IDw2IDE+OworCQl9OworCisJCXUyX2ludHJfcDE6IHVzYjItaW50ci1wMUA4ZTAgeworCQkJcmVnICA9IDwweDhlMCAyPjsKKwkJCWJpdHMgPSA8NyA1PjsKKwkJfTsKKwl9OwkKK307CisKKyNpbmNsdWRlICJtdDc5ODYtY2xraXRnLmR0c2kiCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3NjIyLWJhbmFuYXBpLWJwaS1yNjQtcm9vdGRpc2suZHRzIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210NzYyMi1iYW5hbmFwaS1icGktcjY0LXJvb3RkaXNrLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmQ5MDg2Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210NzYyMi1iYW5hbmFwaS1icGktcjY0LXJvb3RkaXNrLmR0cwpAQCAtMCwwICsxLDU5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxOCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IFJ5ZGVyIExlZSA8cnlkZXIubGVlQG1lZGlhdGVrLmNvbT4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBNSVQpCisgKi8KKworL2R0cy12MS87CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW5wdXQvaW5wdXQuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaD4KKworI2luY2x1ZGUgIm10NzYyMi5kdHNpIgorI2luY2x1ZGUgIm10NjM4MC5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJCYW5hbmFwaSBCUEktUjY0IjsKKwljb21wYXRpYmxlID0gImJhbmFuYXBpLGJwaS1yNjQtcm9vdGRpc2siLCAibWVkaWF0ZWssbXQ3NjIyIjsKKworCWFsaWFzZXMgeworCQlzZXJpYWwwID0gJnVhcnQwOworCX07CisKKwljaG9zZW4geworCQlzdGRvdXQtcGF0aCA9ICJzZXJpYWwwOjExNTIwMG44IjsKKwkJYm9vdGFyZ3MgPSAiZWFybHljb249dWFydDgyNTAsbW1pbzMyLDB4MTEwMDIwMDAgY29uc29sZT10dHlTMCwxMTUyMDBuMSBzd2lvdGxiPTUxMiByb290PS9kZXYvbW1jYmxrMHA3IHJvb3Rmc3R5cGU9c3F1YXNoZnMsZjJmcyI7CisJfTsKKworCWNwdXMgeworCQljcHVAMCB7CisJCQlwcm9jLXN1cHBseSA9IDwmbXQ2MzgwX3ZjcHVfcmVnPjsKKwkJCXNyYW0tc3VwcGx5ID0gPCZtdDYzODBfdm1fcmVnPjsKKwkJfTsKKworCQljcHVAMSB7CisJCQlwcm9jLXN1cHBseSA9IDwmbXQ2MzgwX3ZjcHVfcmVnPjsKKwkJCXNyYW0tc3VwcGx5ID0gPCZtdDYzODBfdm1fcmVnPjsKKwkJfTsKKwl9OworCisJZ3Bpby1rZXlzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWtleXMiOworCisJCWZhY3RvcnkgeworCQkJbGFiZWwgPSAiZmFjdG9yeSI7CisJCQlsaW51eCxjb2RlID0gPEJUTl8wPjsKKwkJCWdwaW9zID0gPCZwaW8gMCBHUElPX0FDVElWRV9ISUdIPjsKKwkJfTsKKworCQl3cHMgeworCQkJbGFiZWwgPSAid3BzIjsKKwkJCWxpbnV4LGNvZGUgPSA8S0VZX1dQU19CVVRUT04+OworCQkJZ3Bpb3MgPSA8JnBpbyAxMDIgR1BJT19BQ1RJVkVfSElHSD47CisJCX07CisJfTsKKworCWxlZHMgeworCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisKKwkJZ3JlZW4geworCQkJbGFiZWwgPSAiYnBpLXI2NDpwaW86Z3JlZW4iOworCQkJZ3Bpb3MgPSA8JnBpbyA4OSBHUElPX0FDVElWRV9ISUdIPjsKKwkJfTsKKworCQlyZWQgeworCQkJbGFiZWwgPSAiYnBpLXI2NDpwaW86cmVkIjsKKwkJCWdwaW9zID0gPCZwaW8gODggR1BJT19BQ1RJVkVfSElHSD47CisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCXJlZyA9IDwwIDB4NDAwMDAwMDAgMCAweDQwMDAwMDAwPjsKKwl9OworCisJcmVnXzFwOHY6IHJlZ3VsYXRvci0xcDh2IHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJmaXhlZC0xLjhWIjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCX07CisKKwlyZWdfM3AzdjogcmVndWxhdG9yLTNwM3YgeworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCXJlZ3VsYXRvci1uYW1lID0gImZpeGVkLTMuM1YiOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXJlZ3VsYXRvci1ib290LW9uOworCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCX07CisKKwlyZWdfNXY6IHJlZ3VsYXRvci01diB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAiZml4ZWQtNVYiOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCXJlZ3VsYXRvci1ib290LW9uOworCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCX07Cit9OworCismYmNoIHsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworJmJ0aWYgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZjaXIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZpcnJ4X3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZldGggeworCXN0YXR1cyA9ICJva2F5IjsKKwlnbWFjMDogbWFjQDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MD47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwlnbWFjMTogbWFjQDEgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MT47CisJCXBoeS1tb2RlID0gInJnbWlpIjsKKworCQlmaXhlZC1saW5rIHsKKwkJCXNwZWVkID0gPDEwMDA+OworCQkJZnVsbC1kdXBsZXg7CisJCQlwYXVzZTsKKwkJfTsKKwl9OworCisJbWRpbzogbWRpby1idXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJc3dpdGNoQDFmIHsKKwkJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NTMxIjsKKwkJCXJlZyA9IDwweDFmPjsKKwkJCXJlc2V0LWdwaW9zID0gPCZwaW8gNTQgMD47CisKKwkJCXBvcnRzIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJCXdhbjogcG9ydEAwIHsKKwkJCQkJcmVnID0gPDA+OworCQkJCQlsYWJlbCA9ICJ3YW4iOworCQkJCX07CisKKwkJCQlwb3J0QDEgeworCQkJCQlyZWcgPSA8MT47CisJCQkJCWxhYmVsID0gImxhbjAiOworCQkJCX07CisKKwkJCQlwb3J0QDIgeworCQkJCQlyZWcgPSA8Mj47CisJCQkJCWxhYmVsID0gImxhbjEiOworCQkJCX07CisKKwkJCQlwb3J0QDMgeworCQkJCQlyZWcgPSA8Mz47CisJCQkJCWxhYmVsID0gImxhbjIiOworCQkJCX07CisKKwkJCQlwb3J0QDQgeworCQkJCQlyZWcgPSA8ND47CisJCQkJCWxhYmVsID0gImxhbjMiOworCQkJCX07CisKKwkJCQlwb3J0QDYgeworCQkJCQlyZWcgPSA8Nj47CisJCQkJCWxhYmVsID0gImNwdSI7CisJCQkJCWV0aGVybmV0ID0gPCZnbWFjMD47CisJCQkJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCQkJCWZpeGVkLWxpbmsgeworCQkJCQkJc3BlZWQgPSA8MjUwMD47CisJCQkJCQlmdWxsLWR1cGxleDsKKwkJCQkJCXBhdXNlOworCQkJCQl9OworCQkJCX07CisJCQl9OworCQl9OworCisJfTsKK307CisKKyZpMmMxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmaTJjMV9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismaTJjMiB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmkyYzJfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJm1tYzAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCIsICJzdGF0ZV91aHMiOworCXBpbmN0cmwtMCA9IDwmZW1tY19waW5zX2RlZmF1bHQ+OworCXBpbmN0cmwtMSA9IDwmZW1tY19waW5zX3Vocz47CisJc3RhdHVzID0gIm9rYXkiOworCWJ1cy13aWR0aCA9IDw4PjsKKwltYXgtZnJlcXVlbmN5ID0gPDUwMDAwMDAwPjsKKwljYXAtbW1jLWhpZ2hzcGVlZDsKKwltbWMtaHMyMDAtMV84djsKKwl2bW1jLXN1cHBseSA9IDwmcmVnXzNwM3Y+OworCXZxbW1jLXN1cHBseSA9IDwmcmVnXzFwOHY+OworCWFzc2lnbmVkLWNsb2NrcyA9IDwmdG9wY2tnZW4gQ0xLX1RPUF9NU0RDMzBfMF9TRUw+OworCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JnRvcGNrZ2VuIENMS19UT1BfVU5JVjQ4TT47CisJbm9uLXJlbW92YWJsZTsKK307CisKKyZtbWMxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiLCAic3RhdGVfdWhzIjsKKwlwaW5jdHJsLTAgPSA8JnNkMF9waW5zX2RlZmF1bHQ+OworCXBpbmN0cmwtMSA9IDwmc2QwX3BpbnNfdWhzPjsKKwlzdGF0dXMgPSAib2theSI7CisJYnVzLXdpZHRoID0gPDQ+OworCW1heC1mcmVxdWVuY3kgPSA8NTAwMDAwMDA+OworCWNhcC1zZC1oaWdoc3BlZWQ7CisJcl9zbXBsID0gPDE+OworCWNkLWdwaW9zID0gPCZwaW8gODEgR1BJT19BQ1RJVkVfTE9XPjsKKwl2bW1jLXN1cHBseSA9IDwmcmVnXzNwM3Y+OworCXZxbW1jLXN1cHBseSA9IDwmcmVnXzNwM3Y+OworCWFzc2lnbmVkLWNsb2NrcyA9IDwmdG9wY2tnZW4gQ0xLX1RPUF9NU0RDMzBfMV9TRUw+OworCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JnRvcGNrZ2VuIENMS19UT1BfVU5JVjQ4TT47Cit9OworCismbmFuZGMgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwYXJhbGxlbF9uYW5kX3BpbnM+OworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCismbm9yX2ZsYXNoIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc3BpX25vcl9waW5zPjsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworCisJZmxhc2hAMCB7CisJCWNvbXBhdGlibGUgPSAiamVkZWMsc3BpLW5vciI7CisJCXJlZyA9IDwwPjsKKwl9OworfTsKKworJnBjaWUwIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGNpZTBfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnBjaWUxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGNpZTFfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnBpbyB7CisJLyogQXR0ZW50aW9uOiBHUElPIDkwIGlzIHVzZWQgdG8gc3dpdGNoIGJldHdlZW4gUENJZUAxLDAgYW5kCisJICogU0FUQSBmdW5jdGlvbnMuIGkuZS4gb3V0cHV0LWhpZ2g6IFBDSWUsIG91dHB1dC1sb3c6IFNBVEEKKwkgKi8KKwlhc21fc2VsIHsKKwkJZ3Bpby1ob2c7CisJCWdwaW9zID0gPDkwIEdQSU9fQUNUSVZFX0hJR0g+OworCQlvdXRwdXQtaGlnaDsKKwl9OworCisJLyogZU1NQyBpcyBzaGFyZWQgcGluIHdpdGggcGFyYWxsZWwgTkFORCAqLworCWVtbWNfcGluc19kZWZhdWx0OiBlbW1jLXBpbnMtZGVmYXVsdCB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJlbW1jIiwgImVtbWNfcnN0IjsKKwkJCWdyb3VwcyA9ICJlbW1jIjsKKwkJfTsKKworCQkvKiAiTkRMMCIsIk5ETDEiLCJOREwyIiwiTkRMMyIsIk5ETDQiLCJOREw1IiwiTkRMNiIsIk5ETDciLAorCQkgKiAiTlJCIiwiTkNMRSIgcGlucyBhcmUgdXNlZCBhcyBEQVQwLERBVDEsREFUMixEQVQzLERBVDQsCisJCSAqIERBVDUsREFUNixEQVQ3LENNRCxDTEsgZm9yIGVNTUMgcmVzcGVjdGl2ZWx5CisJCSAqLworCQljb25mLWNtZC1kYXQgeworCQkJcGlucyA9ICJOREwwIiwgIk5ETDEiLCAiTkRMMiIsCisJCQkgICAgICAgIk5ETDMiLCAiTkRMNCIsICJOREw1IiwKKwkJCSAgICAgICAiTkRMNiIsICJOREw3IiwgIk5SQiI7CisJCQlpbnB1dC1lbmFibGU7CisJCQliaWFzLXB1bGwtdXA7CisJCX07CisKKwkJY29uZi1jbGsgeworCQkJcGlucyA9ICJOQ0xFIjsKKwkJCWJpYXMtcHVsbC1kb3duOworCQl9OworCX07CisKKwllbW1jX3BpbnNfdWhzOiBlbW1jLXBpbnMtdWhzIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImVtbWMiOworCQkJZ3JvdXBzID0gImVtbWMiOworCQl9OworCisJCWNvbmYtY21kLWRhdCB7CisJCQlwaW5zID0gIk5ETDAiLCAiTkRMMSIsICJOREwyIiwKKwkJCSAgICAgICAiTkRMMyIsICJOREw0IiwgIk5ETDUiLAorCQkJICAgICAgICJOREw2IiwgIk5ETDciLCAiTlJCIjsKKwkJCWlucHV0LWVuYWJsZTsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPDQ+OworCQkJYmlhcy1wdWxsLXVwOworCQl9OworCisJCWNvbmYtY2xrIHsKKwkJCXBpbnMgPSAiTkNMRSI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDw0PjsKKwkJCWJpYXMtcHVsbC1kb3duOworCQl9OworCX07CisKKwlldGhfcGluczogZXRoLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiZXRoIjsKKwkJCWdyb3VwcyA9ICJtZGNfbWRpbyIsICJyZ21paV92aWFfZ21hYzIiOworCQl9OworCX07CisKKwlpMmMxX3BpbnM6IGkyYzEtcGlucyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJpMmMiOworCQkJZ3JvdXBzID0gICJpMmMxXzAiOworCQl9OworCX07CisKKwlpMmMyX3BpbnM6IGkyYzItcGlucyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJpMmMiOworCQkJZ3JvdXBzID0gICJpMmMyXzAiOworCQl9OworCX07CisKKwlpMnMxX3BpbnM6IGkyczEtcGlucyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJpMnMiOworCQkJZ3JvdXBzID0gICJpMnNfb3V0X21jbGtfYmNsa193cyIsCisJCQkJICAiaTJzMV9pbl9kYXRhIiwKKwkJCQkgICJpMnMxX291dF9kYXRhIjsKKwkJfTsKKworCQljb25mIHsKKwkJCXBpbnMgPSAiSTJTMV9JTiIsICJJMlMxX09VVCIsICJJMlNfQkNMSyIsCisJCQkgICAgICAgIkkyU19XUyIsICJJMlNfTUNMSyI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDwxMj47CisJCQliaWFzLXB1bGwtZG93bjsKKwkJfTsKKwl9OworCisJaXJyeF9waW5zOiBpcnJ4LXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiaXIiOworCQkJZ3JvdXBzID0gICJpcl8xX3J4IjsKKwkJfTsKKwl9OworCisJaXJ0eF9waW5zOiBpcnR4LXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiaXIiOworCQkJZ3JvdXBzID0gICJpcl8xX3R4IjsKKwkJfTsKKwl9OworCisJLyogUGFyYWxsZWwgbmFuZCBpcyBzaGFyZWQgcGluIHdpdGggZU1NQyAqLworCXBhcmFsbGVsX25hbmRfcGluczogcGFyYWxsZWwtbmFuZC1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJwYXJfbmFuZCI7CisJCX07CisJfTsKKworCXBjaWUwX3BpbnM6IHBjaWUwLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAicGNpZSI7CisJCQlncm91cHMgPSAicGNpZTBfcGFkX3BlcnN0IiwKKwkJCQkgInBjaWUwXzFfd2FrZW4iLAorCQkJCSAicGNpZTBfMV9jbGtyZXEiOworCQl9OworCX07CisKKwlwY2llMV9waW5zOiBwY2llMS1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInBjaWUiOworCQkJZ3JvdXBzID0gInBjaWUxX3BhZF9wZXJzdCIsCisJCQkJICJwY2llMV8wX3dha2VuIiwKKwkJCQkgInBjaWUxXzBfY2xrcmVxIjsKKwkJfTsKKwl9OworCisJcG1pY19idXNfcGluczogcG1pYy1idXMtcGlucyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJwbWljIjsKKwkJCWdyb3VwcyA9ICJwbWljX2J1cyI7CisJCX07CisJfTsKKworCXB3bTdfcGluczogcHdtMS0yLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAicHdtIjsKKwkJCWdyb3VwcyA9ICJwd21fY2g3XzIiOworCQl9OworCX07CisKKwl3bGVkX3BpbnM6IHdsZWQtcGlucyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJsZWQiOworCQkJZ3JvdXBzID0gIndsZWQiOworCQl9OworCX07CisKKwlzZDBfcGluc19kZWZhdWx0OiBzZDAtcGlucy1kZWZhdWx0IHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInNkIjsKKwkJCWdyb3VwcyA9ICJzZF8wIjsKKwkJfTsKKworCQkvKiAiSTJTMl9PVVQsICJJMlM0X0lOIiIsICJJMlMzX0lOIiwgIkkyUzJfSU4iLAorCQkgKiAgIkkyUzRfT1VUIiwgIkkyUzNfT1VUIiBhcmUgdXNlZCBhcyBEQVQwLCBEQVQxLAorCQkgKiAgREFUMiwgREFUMywgQ01ELCBDTEsgZm9yIFNEIHJlc3BlY3RpdmVseS4KKwkJICovCisJCWNvbmYtY21kLWRhdGEgeworCQkJcGlucyA9ICJJMlMyX09VVCIsICJJMlM0X0lOIiwgIkkyUzNfSU4iLAorCQkJICAgICAgICJJMlMyX0lOIiwiSTJTNF9PVVQiOworCQkJaW5wdXQtZW5hYmxlOworCQkJZHJpdmUtc3RyZW5ndGggPSA8OD47CisJCQliaWFzLXB1bGwtdXA7CisJCX07CisJCWNvbmYtY2xrIHsKKwkJCXBpbnMgPSAiSTJTM19PVVQiOworCQkJZHJpdmUtc3RyZW5ndGggPSA8MTI+OworCQkJYmlhcy1wdWxsLWRvd247CisJCX07CisJCWNvbmYtY2QgeworCQkJcGlucyA9ICJUWEQzIjsKKwkJCWJpYXMtcHVsbC11cDsKKwkJfTsKKwl9OworCisJc2QwX3BpbnNfdWhzOiBzZDAtcGlucy11aHMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAic2QiOworCQkJZ3JvdXBzID0gInNkXzAiOworCQl9OworCisJCWNvbmYtY21kLWRhdGEgeworCQkJcGlucyA9ICJJMlMyX09VVCIsICJJMlM0X0lOIiwgIkkyUzNfSU4iLAorCQkJICAgICAgICJJMlMyX0lOIiwiSTJTNF9PVVQiOworCQkJaW5wdXQtZW5hYmxlOworCQkJYmlhcy1wdWxsLXVwOworCQl9OworCisJCWNvbmYtY2xrIHsKKwkJCXBpbnMgPSAiSTJTM19PVVQiOworCQkJYmlhcy1wdWxsLWRvd247CisJCX07CisJfTsKKworCS8qIFNlcmlhbCBOQU5EIGlzIHNoYXJlZCBwaW4gd2l0aCBTUEktTk9SICovCisJc2VyaWFsX25hbmRfcGluczogc2VyaWFsLW5hbmQtcGlucyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJmbGFzaCI7CisJCQlncm91cHMgPSAic25maSI7CisJCX07CisJfTsKKworCXNwaWMwX3BpbnM6IHNwaWMwLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAic3BpIjsKKwkJCWdyb3VwcyA9ICJzcGljMF8wIjsKKwkJfTsKKwl9OworCisJc3BpYzFfcGluczogc3BpYzEtcGlucyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJzcGkiOworCQkJZ3JvdXBzID0gInNwaWMxXzAiOworCQl9OworCX07CisKKwkvKiBTUEktTk9SIGlzIHNoYXJlZCBwaW4gd2l0aCBzZXJpYWwgTkFORCAqLworCXNwaV9ub3JfcGluczogc3BpLW5vci1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJzcGlfbm9yIjsKKwkJfTsKKwl9OworCisJLyogc2VyaWFsIE5BTkQgaXMgc2hhcmVkIHBpbiB3aXRoIFNQSS1OT1IgKi8KKwlzZXJpYWxfbmFuZF9waW5zOiBzZXJpYWwtbmFuZC1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJzbmZpIjsKKwkJfTsKKwl9OworCisJdWFydDBfcGluczogdWFydDAtcGlucyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJ1YXJ0IjsKKwkJCWdyb3VwcyA9ICJ1YXJ0MF8wX3R4X3J4IiA7CisJCX07CisJfTsKKworCXVhcnQyX3BpbnM6IHVhcnQyLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAidWFydCI7CisJCQlncm91cHMgPSAidWFydDJfMV90eF9yeCIgOworCQl9OworCX07CisKKwl3YXRjaGRvZ19waW5zOiB3YXRjaGRvZy1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gIndhdGNoZG9nIjsKKwkJCWdyb3VwcyA9ICJ3YXRjaGRvZyI7CisJCX07CisJfTsKK307CisKKyZwd20geworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwd203X3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwd3JhcCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBtaWNfYnVzX3BpbnM+OworCisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnNhdGEgeworCXN0YXR1cyA9ICJkaXNhYmxlIjsKK307CisKKyZzYXRhX3BoeSB7CisJc3RhdHVzID0gImRpc2FibGUiOworfTsKKworJnNwaTAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzcGljMF9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc3BpMSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNwaWMxX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZzc3VzYiB7CisJdnVzYjMzLXN1cHBseSA9IDwmcmVnXzNwM3Y+OworCXZidXMtc3VwcGx5ID0gPCZyZWdfNXY+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1M3BoeSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQwIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmdWFydDBfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQyIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmdWFydDJfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJndhdGNoZG9nIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmd2F0Y2hkb2dfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc2MjItZWxlY29tLXdyYy0yNTMzZ2VudC5kdHMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3NjIyLWVsZWNvbS13cmMtMjUzM2dlbnQuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYzFjNmEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3NjIyLWVsZWNvbS13cmMtMjUzM2dlbnQuZHRzCkBAIC0wLDAgKzEsNjA4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE3IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogTWluZyBIdWFuZyA8bWluZy5odWFuZ0BtZWRpYXRlay5jb20+CisgKgkgICBTZWFuIFdhbmcgPHNlYW4ud2FuZ0BtZWRpYXRlay5jb20+CisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgTUlUKQorICovCisKKy9kdHMtdjEvOworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2lucHV0L2lucHV0Lmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+CisKKyNpbmNsdWRlICJtdDc2MjIuZHRzaSIKKyNpbmNsdWRlICJtdDYzODAuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiRWxlY29tIFdSQy0yNTMzIjsKKwljb21wYXRpYmxlID0gImVsZWNvbSx3cmMtMjUzM2dlbnQiLCAibWVkaWF0ZWssbXQ3NjIyIjsKKworCWFsaWFzZXMgeworCQlsZWQtYm9vdCA9ICZsZWRfcG93ZXI7CisJCWxlZC1mYWlsc2FmZSA9ICZsZWRfcG93ZXI7CisJCWxlZC1ydW5uaW5nID0gJmxlZF9wb3dlcjsKKwkJbGVkLXVwZ3JhZGUgPSAmbGVkX3Bvd2VyOworCQlzZXJpYWwwID0gJnVhcnQwOworCX07CisKKwljaG9zZW4geworCQlzdGRvdXQtcGF0aCA9ICJzZXJpYWwwOjExNTIwMG44IjsKKwkJYm9vdGFyZ3MgPSAiZWFybHljb249dWFydDgyNTAsbW1pbzMyLDB4MTEwMDIwMDAgc3dpb3RsYj01MTIgY29uc29sZT10dHlTMCwxMTUyMDBuOCI7CisJfTsKKworCWNwdXMgeworCQljcHVAMCB7CisJCQlwcm9jLXN1cHBseSA9IDwmbXQ2MzgwX3ZjcHVfcmVnPjsKKwkJCXNyYW0tc3VwcGx5ID0gPCZtdDYzODBfdm1fcmVnPjsKKwkJfTsKKworCQljcHVAMSB7CisJCQlwcm9jLXN1cHBseSA9IDwmbXQ2MzgwX3ZjcHVfcmVnPjsKKwkJCXNyYW0tc3VwcGx5ID0gPCZtdDYzODBfdm1fcmVnPjsKKwkJfTsKKwl9OworCisJZ3Bpby1rZXlzIHsKKwkJY29tcGF0aWJsZSA9ICJncGlvLWtleXMiOworCQlwb2xsLWludGVydmFsID0gPDEwMD47CisKKwkJd3BzIHsKKwkJCWxhYmVsID0gIndwcyI7CisJCQlsaW51eCxjb2RlID0gPEtFWV9XUFNfQlVUVE9OPjsKKwkJCWdwaW9zID0gPCZwaW8gMCBHUElPX0FDVElWRV9ISUdIPjsKKwkJfTsKKworCQlmYWN0b3J5IHsKKwkJCWxhYmVsID0gImZhY3RvcnkiOworCQkJbGludXgsY29kZSA9IDxLRVlfV1BTX0JVVFRPTj47CisJCQlncGlvcyA9IDwmcGlvIDEwMiBHUElPX0FDVElWRV9MT1c+OworCQl9OworCisJCXN3aXRjaDAgeworCQkJbGFiZWwgPSAic3dpdGNoMCI7CisJCQlncGlvcyA9IDwmcGlvIDEgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCWxpbnV4LGNvZGUgPSA8QlROXzA+OworCQkJbGludXgsaW5wdXQtdHlwZSA9IDxFVl9TVz47CisJCX07CisKKwkJc3dpdGNoMSB7CisJCQlsYWJlbCA9ICJzd2l0Y2gxIjsKKwkJCWdwaW9zID0gPCZwaW8gMTYgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCWxpbnV4LGNvZGUgPSA8QlROXzE+OworCQkJbGludXgsaW5wdXQtdHlwZSA9IDxFVl9TVz47CisJCX07CisKKwkJc3dpdGNoMiB7CisJCQlsYWJlbCA9ICJzd2l0Y2gyIjsKKwkJCWdwaW9zID0gPCZwaW8gMTcgR1BJT19BQ1RJVkVfTE9XPjsKKwkJCWxpbnV4LGNvZGUgPSA8QlROXzI+OworCQkJbGludXgsaW5wdXQtdHlwZSA9IDxFVl9TVz47CisJCX07CisKKwkJc3dpdGNoMyB7CisJCQlsYWJlbCA9ICJzd2l0Y2gzIjsKKwkJCWdwaW9zID0gPCZwaW8gMTggR1BJT19BQ1RJVkVfTE9XPjsKKwkJCWxpbnV4LGNvZGUgPSA8QlROXzM+OworCQkJbGludXgsaW5wdXQtdHlwZSA9IDxFVl9TVz47CisJCX07CisJfTsKKworCWxlZHMgeworCQljb21wYXRpYmxlID0gImdwaW8tbGVkcyI7CisKKwkJbGVkX3Bvd2VyOiBwb3dlcl9nIHsKKwkJCWxhYmVsID0gIndyYy0yNTMzOmdyZWVuOnBvd2VyIjsKKwkJCWdwaW9zID0gPCZwaW8gMiBHUElPX0FDVElWRV9ISUdIPjsKKwkJfTsKKworCQlwb3dlcl9iIHsKKwkJCWxhYmVsID0gIndyYy0yNTMzOmJsdWU6cG93ZXIiOworCQkJZ3Bpb3MgPSA8JnBpbyAxOSBHUElPX0FDVElWRV9ISUdIPjsKKwkJfTsKKworCQlwb3dlcl9yIHsKKwkJCWxhYmVsID0gIndyYy0yNTMzOnJlZDpwb3dlciI7CisJCQlncGlvcyA9IDwmcGlvIDczIEdQSU9fQUNUSVZFX0hJR0g+OworCQl9OworCisJCXVzYiB7CisJCQlsYWJlbCA9ICJ3cmMtMjUzMzpibHVlOnVzYiI7CisJCQlncGlvcyA9IDwmcGlvIDc0IEdQSU9fQUNUSVZFX0hJR0g+OworCQl9OworCisJCXdwcyB7CisJCQlsYWJlbCA9ICJ3cmMtMjUzMzpyZWQ6d3BzIjsKKwkJCWdwaW9zID0gPCZwaW8gNzYgR1BJT19BQ1RJVkVfTE9XPjsKKwkJfTsKKworCQl3aWZpMiB7CisJCQlsYWJlbCA9ICJ3cmMtMjUzMzpibHVlOndpZmkyZyI7CisJCQlncGlvcyA9IDwmcGlvIDg1IEdQSU9fQUNUSVZFX0xPVz47CisJCX07CisKKwkJd2lmaTUgeworCQkJbGFiZWwgPSAid3JjLTI1MzM6Ymx1ZTp3aWZpNWciOworCQkJZ3Bpb3MgPSA8JnBpbyA5MSBHUElPX0FDVElWRV9MT1c+OworCQl9OworCX07CisKKwlyZWdfdXNiX3ZidXM6IHJlZ3VsYXRvciB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAidXNiX3ZidXMiOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisJCWdwaW8gPSA8JnBpbyAyMiBHUElPX0FDVElWRV9MT1c+OworCQllbmFibGUtYWN0aXZlLWhpZ2g7CisJfTsKKworCW1lbW9yeSB7CisJCXJlZyA9IDwwIDB4NDAwMDAwMDAgMCAweDNGMDAwMDAwPjsKKwl9OworCisJcmVnXzFwOHY6IHJlZ3VsYXRvci0xcDh2IHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJmaXhlZC0xLjhWIjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCX07CisKKwlyZWdfM3AzdjogcmVndWxhdG9yLTNwM3YgeworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCXJlZ3VsYXRvci1uYW1lID0gImZpeGVkLTMuM1YiOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXJlZ3VsYXRvci1ib290LW9uOworCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCX07CisKKwlydGtnc3c6IHJ0a2dzd0AwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxydGstZ3N3IjsKKwkJbWVkaWF0ZWssZXRoc3lzID0gPCZldGhzeXM+OworCQltZWRpYXRlayxtZGlvID0gPCZtZGlvPjsKKwkJbWVkaWF0ZWsscmVzZXQtcGluID0gPCZwaW8gNTQgMD47CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworfTsKKworJnBjaWUwIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGNpZTBfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnNsb3QwIHsKKwltdDc2MTVAMCwwIHsKKwkJcmVnID0gPDB4MDAwMCAwIDAgMCAwPjsKKwkJbWVkaWF0ZWssbXRkLWVlcHJvbSA9IDwmZmFjdG9yeSAweDA1MDAwPjsKKwl9OworfTsKKworJnBpbyB7CisJLyogZU1NQyBpcyBzaGFyZWQgcGluIHdpdGggcGFyYWxsZWwgTkFORCAqLworCWVtbWNfcGluc19kZWZhdWx0OiBlbW1jLXBpbnMtZGVmYXVsdCB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJlbW1jIiwgImVtbWNfcnN0IjsKKwkJCWdyb3VwcyA9ICJlbW1jIjsKKwkJfTsKKworCQkvKiAiTkRMMCIsIk5ETDEiLCJOREwyIiwiTkRMMyIsIk5ETDQiLCJOREw1IiwiTkRMNiIsIk5ETDciLAorCQkgKiAiTlJCIiwiTkNMRSIgcGlucyBhcmUgdXNlZCBhcyBEQVQwLERBVDEsREFUMixEQVQzLERBVDQsCisJCSAqIERBVDUsREFUNixEQVQ3LENNRCxDTEsgZm9yIGVNTUMgcmVzcGVjdGl2ZWx5CisJCSAqLworCQljb25mLWNtZC1kYXQgeworCQkJcGlucyA9ICJOREwwIiwgIk5ETDEiLCAiTkRMMiIsCisJCQkgICAgICAgIk5ETDMiLCAiTkRMNCIsICJOREw1IiwKKwkJCSAgICAgICAiTkRMNiIsICJOREw3IiwgIk5SQiI7CisJCQlpbnB1dC1lbmFibGU7CisJCQliaWFzLXB1bGwtdXA7CisJCX07CisKKwkJY29uZi1jbGsgeworCQkJcGlucyA9ICJOQ0xFIjsKKwkJCWJpYXMtcHVsbC1kb3duOworCQl9OworCX07CisKKwllbW1jX3BpbnNfdWhzOiBlbW1jLXBpbnMtdWhzIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImVtbWMiOworCQkJZ3JvdXBzID0gImVtbWMiOworCQl9OworCisJCWNvbmYtY21kLWRhdCB7CisJCQlwaW5zID0gIk5ETDAiLCAiTkRMMSIsICJOREwyIiwKKwkJCSAgICAgICAiTkRMMyIsICJOREw0IiwgIk5ETDUiLAorCQkJICAgICAgICJOREw2IiwgIk5ETDciLCAiTlJCIjsKKwkJCWlucHV0LWVuYWJsZTsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPDQ+OworCQkJYmlhcy1wdWxsLXVwOworCQl9OworCisJCWNvbmYtY2xrIHsKKwkJCXBpbnMgPSAiTkNMRSI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDw0PjsKKwkJCWJpYXMtcHVsbC1kb3duOworCQl9OworCX07CisKKwlldGhfcGluczogZXRoLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiZXRoIjsKKwkJCWdyb3VwcyA9ICJtZGNfbWRpbyIsICJyZ21paV92aWFfZ21hYzIiOworCQl9OworCX07CisKKwlpMmMxX3BpbnM6IGkyYzEtcGlucyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJpMmMiOworCQkJZ3JvdXBzID0gICJpMmMxXzAiOworCQl9OworCX07CisKKwlpMmMyX3BpbnM6IGkyYzItcGlucyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJpMmMiOworCQkJZ3JvdXBzID0gICJpMmMyXzAiOworCQl9OworCX07CisKKwlpMnMxX3BpbnM6IGkyczEtcGlucyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJpMnMiOworCQkJZ3JvdXBzID0gICJpMnNfb3V0X21jbGtfYmNsa193cyIsCisJCQkJICAiaTJzMV9pbl9kYXRhIiwKKwkJCQkgICJpMnMxX291dF9kYXRhIjsKKwkJfTsKKworCQljb25mIHsKKwkJCXBpbnMgPSAiSTJTMV9JTiIsICJJMlMxX09VVCIsICJJMlNfQkNMSyIsCisJCQkgICAgICAgIkkyU19XUyIsICJJMlNfTUNMSyI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDwxMj47CisJCQliaWFzLXB1bGwtZG93bjsKKwkJfTsKKwl9OworCisJaXJyeF9waW5zOiBpcnJ4LXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiaXIiOworCQkJZ3JvdXBzID0gICJpcl8xX3J4IjsKKwkJfTsKKwl9OworCisJaXJ0eF9waW5zOiBpcnR4LXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiaXIiOworCQkJZ3JvdXBzID0gICJpcl8xX3R4IjsKKwkJfTsKKwl9OworCisJLyogUGFyYWxsZWwgbmFuZCBpcyBzaGFyZWQgcGluIHdpdGggZU1NQyAqLworCXBhcmFsbGVsX25hbmRfcGluczogcGFyYWxsZWwtbmFuZC1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJwYXJfbmFuZCI7CisJCX07CisJfTsKKworCXBjaWUwX3BpbnM6IHBjaWUwLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAicGNpZSI7CisJCQlncm91cHMgPSAicGNpZTBfcGFkX3BlcnN0IiwKKwkJCQkgInBjaWUwXzFfd2FrZW4iLAorCQkJCSAicGNpZTBfMV9jbGtyZXEiOworCQl9OworCX07CisKKwlwY2llMV9waW5zOiBwY2llMS1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInBjaWUiOworCQkJZ3JvdXBzID0gInBjaWUxX3BhZF9wZXJzdCIsCisJCQkJICJwY2llMV8wX3dha2VuIiwKKwkJCQkgInBjaWUxXzBfY2xrcmVxIjsKKwkJfTsKKwl9OworCisJcG1pY19idXNfcGluczogcG1pYy1idXMtcGlucyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJwbWljIjsKKwkJCWdyb3VwcyA9ICJwbWljX2J1cyI7CisJCX07CisJfTsKKworCXB3bTdfcGluczogcHdtMS0yLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAicHdtIjsKKwkJCWdyb3VwcyA9ICJwd21fY2g3XzIiOworCQl9OworCX07CisKKwl3bGVkX3BpbnM6IHdsZWQtcGlucyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJsZWQiOworCQkJZ3JvdXBzID0gIndsZWQiOworCQl9OworCX07CisKKwlzZDBfcGluc19kZWZhdWx0OiBzZDAtcGlucy1kZWZhdWx0IHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInNkIjsKKwkJCWdyb3VwcyA9ICJzZF8wIjsKKwkJfTsKKworCQkvKiAiSTJTMl9PVVQsICJJMlM0X0lOIiIsICJJMlMzX0lOIiwgIkkyUzJfSU4iLAorCQkgKiAgIkkyUzRfT1VUIiwgIkkyUzNfT1VUIiBhcmUgdXNlZCBhcyBEQVQwLCBEQVQxLAorCQkgKiAgREFUMiwgREFUMywgQ01ELCBDTEsgZm9yIFNEIHJlc3BlY3RpdmVseS4KKwkJICovCisJCWNvbmYtY21kLWRhdGEgeworCQkJcGlucyA9ICJJMlMyX09VVCIsICJJMlM0X0lOIiwgIkkyUzNfSU4iLAorCQkJICAgICAgICJJMlMyX0lOIiwiSTJTNF9PVVQiOworCQkJaW5wdXQtZW5hYmxlOworCQkJZHJpdmUtc3RyZW5ndGggPSA8OD47CisJCQliaWFzLXB1bGwtdXA7CisJCX07CisJCWNvbmYtY2xrIHsKKwkJCXBpbnMgPSAiSTJTM19PVVQiOworCQkJZHJpdmUtc3RyZW5ndGggPSA8MTI+OworCQkJYmlhcy1wdWxsLWRvd247CisJCX07CisJCWNvbmYtY2QgeworCQkJcGlucyA9ICJUWEQzIjsKKwkJCWJpYXMtcHVsbC11cDsKKwkJfTsKKwl9OworCisJc2QwX3BpbnNfdWhzOiBzZDAtcGlucy11aHMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAic2QiOworCQkJZ3JvdXBzID0gInNkXzAiOworCQl9OworCisJCWNvbmYtY21kLWRhdGEgeworCQkJcGlucyA9ICJJMlMyX09VVCIsICJJMlM0X0lOIiwgIkkyUzNfSU4iLAorCQkJICAgICAgICJJMlMyX0lOIiwiSTJTNF9PVVQiOworCQkJaW5wdXQtZW5hYmxlOworCQkJYmlhcy1wdWxsLXVwOworCQl9OworCisJCWNvbmYtY2xrIHsKKwkJCXBpbnMgPSAiSTJTM19PVVQiOworCQkJYmlhcy1wdWxsLWRvd247CisJCX07CisJfTsKKworCS8qIFNlcmlhbCBOQU5EIGlzIHNoYXJlZCBwaW4gd2l0aCBTUEktTk9SICovCisJc2VyaWFsX25hbmRfcGluczogc2VyaWFsLW5hbmQtcGlucyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJmbGFzaCI7CisJCQlncm91cHMgPSAic25maSI7CisJCX07CisJfTsKKworCXNwaWMwX3BpbnM6IHNwaWMwLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAic3BpIjsKKwkJCWdyb3VwcyA9ICJzcGljMF8wIjsKKwkJfTsKKwl9OworCisJc3BpYzFfcGluczogc3BpYzEtcGlucyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJzcGkiOworCQkJZ3JvdXBzID0gInNwaWMxXzAiOworCQl9OworCX07CisKKwkvKiBTUEktTk9SIGlzIHNoYXJlZCBwaW4gd2l0aCBzZXJpYWwgTkFORCAqLworCXNwaV9ub3JfcGluczogc3BpLW5vci1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJzcGlfbm9yIjsKKwkJfTsKKwl9OworCisJLyogc2VyaWFsIE5BTkQgaXMgc2hhcmVkIHBpbiB3aXRoIFNQSS1OT1IgKi8KKwlzZXJpYWxfbmFuZF9waW5zOiBzZXJpYWwtbmFuZC1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJzbmZpIjsKKwkJfTsKKwl9OworCisJdWFydDBfcGluczogdWFydDAtcGlucyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJ1YXJ0IjsKKwkJCWdyb3VwcyA9ICJ1YXJ0MF8wX3R4X3J4IiA7CisJCX07CisJfTsKKworCXVhcnQyX3BpbnM6IHVhcnQyLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAidWFydCI7CisJCQlncm91cHMgPSAidWFydDJfMV90eF9yeCIgOworCQl9OworCX07CisKKwl3YXRjaGRvZ19waW5zOiB3YXRjaGRvZy1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gIndhdGNoZG9nIjsKKwkJCWdyb3VwcyA9ICJ3YXRjaGRvZyI7CisJCX07CisJfTsKK307CisKKyZiY2ggeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZidGlmIHsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworJmNpciB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmlycnhfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmV0aCB7CisJc3RhdHVzID0gIm9rYXkiOworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZldGhfcGlucz47CisJZ21hYzA6IG1hY0AwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKwkJcmVnID0gPDA+OworCQlwaHktbW9kZSA9ICJzZ21paSI7CisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MTAwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwlnbWFjMTogbWFjQDEgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MT47CisJCXBoeS1tb2RlID0gInJnbWlpIjsKKwkJZml4ZWQtbGluayB7CisJCQlzcGVlZCA9IDwxMDAwPjsKKwkJCWZ1bGwtZHVwbGV4OworCQkJcGF1c2U7CisJCX07CisJfTsKKworCW1kaW86IG1kaW8tYnVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCX07Cit9OworCismaTJjMSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmkyYzFfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmkyYzIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZpMmMyX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwd20geworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwd203X3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwd3JhcCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBtaWNfYnVzX3BpbnM+OworCisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnNuZmkgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzZXJpYWxfbmFuZF9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwlzcGlfbmFuZEAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gInNwaS1uYW5kIjsKKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8MTA0MDAwMDAwPjsKKwkJcmVnID0gPDA+OworCisJCXBhcnRpdGlvbnMgeworCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1wYXJ0aXRpb25zIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisKKwkJCXBhcnRpdGlvbkAwIHsKKwkJCQlsYWJlbCA9ICJQcmVsb2FkZXIiOworCQkJCXJlZyA9IDwweDAwMDAwIDB4MDA4MDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKworCQkJcGFydGl0aW9uQDgwMDAwIHsKKwkJCQlsYWJlbCA9ICJBVEYiOworCQkJCXJlZyA9IDwweDgwMDAwIDB4MDA0MDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKworCQkJcGFydGl0aW9uQGMwMDAwIHsKKwkJCQlsYWJlbCA9ICJ1Ym9vdCI7CisJCQkJcmVnID0gPDB4YzAwMDAgMHgwMDgwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCisJCQlwYXJ0aXRpb25AMTQwMDAwIHsKKwkJCQlsYWJlbCA9ICJ1Ym9vdC1lbnYiOworCQkJCXJlZyA9IDwweDE0MDAwMCAweDAwODAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisKKwkJCWZhY3Rvcnk6IHBhcnRpdGlvbkAxYzAwMDAgeworCQkJCWxhYmVsID0gImZhY3RvcnkiOworCQkJCXJlZyA9IDwweDFjMDAwMCAweDAwNDAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisKKwkJCXBhcnRpdGlvbkAyMDAwMDAgeworCQkJCWxhYmVsID0gImZpcm13YXJlIjsKKwkJCQlyZWcgPSA8MHgyMDAwMDAgMHgyMDAwMDAwPjsKKwkJCX07CisKKwkJCXBhcnRpdGlvbkAyMjAwMDAwIHsKKwkJCQlsYWJlbCA9ICJyZXNlcnZlZCI7CisJCQkJcmVnID0gPDB4MjIwMDAwMCAweDQwMDAwMDA+OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJnNwaTAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzcGljMF9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc3BpMSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNwaWMxX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZzc3VzYiB7CisJdnVzYjMzLXN1cHBseSA9IDwmcmVnXzNwM3Y+OworCXZidXMtc3VwcGx5ID0gPCZyZWdfdXNiX3ZidXM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1M3BoeSB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQwIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmdWFydDBfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQyIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmdWFydDJfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJndhdGNoZG9nIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmd2F0Y2hkb2dfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJndtYWMgeworCW1lZGlhdGVrLG10ZC1lZXByb20gPSA8JmZhY3RvcnkgMHgwMDAwPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210NzYyMi1yZmIxLXViaS5kdHMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3NjIyLXJmYjEtdWJpLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjU5YjgzCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210NzYyMi1yZmIxLXViaS5kdHMKQEAgLTAsMCArMSw2MTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTggTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBSeWRlciBMZWUgPHJ5ZGVyLmxlZUBtZWRpYXRlay5jb20+CisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgTUlUKQorICovCisKKy9kdHMtdjEvOworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2lucHV0L2lucHV0Lmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+CisKKyNpbmNsdWRlICJtdDc2MjIuZHRzaSIKKyNpbmNsdWRlICJtdDYzODAuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiTVQ3NjIyX01UNzUzMSBSRkIiOworCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NjIyLHViaSI7CisKKwlhbGlhc2VzIHsKKwkJc2VyaWFsMCA9ICZ1YXJ0MDsKKwl9OworCisJY2hvc2VuIHsKKwkJc3Rkb3V0LXBhdGggPSAic2VyaWFsMDoxMTUyMDBuOCI7CisJCWJvb3RhcmdzID0gImVhcmx5Y29uPXVhcnQ4MjUwLG1taW8zMiwweDExMDAyMDAwIGNvbnNvbGU9dHR5UzAsMTE1MjAwbjEgc3dpb3RsYj01MTIiOworCX07CisKKwljcHVzIHsKKwkJY3B1QDAgeworCQkJcHJvYy1zdXBwbHkgPSA8Jm10NjM4MF92Y3B1X3JlZz47CisJCQlzcmFtLXN1cHBseSA9IDwmbXQ2MzgwX3ZtX3JlZz47CisJCX07CisKKwkJY3B1QDEgeworCQkJcHJvYy1zdXBwbHkgPSA8Jm10NjM4MF92Y3B1X3JlZz47CisJCQlzcmFtLXN1cHBseSA9IDwmbXQ2MzgwX3ZtX3JlZz47CisJCX07CisJfTsKKworCWdwaW8ta2V5cyB7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1rZXlzIjsKKworCQlmYWN0b3J5IHsKKwkJCWxhYmVsID0gImZhY3RvcnkiOworCQkJbGludXgsY29kZSA9IDxCVE5fMD47CisJCQlncGlvcyA9IDwmcGlvIDAgR1BJT19BQ1RJVkVfSElHSD47CisJCX07CisKKwkJd3BzIHsKKwkJCWxhYmVsID0gIndwcyI7CisJCQlsaW51eCxjb2RlID0gPEtFWV9XUFNfQlVUVE9OPjsKKwkJCWdwaW9zID0gPCZwaW8gMTAyIEdQSU9fQUNUSVZFX0hJR0g+OworCQl9OworCX07CisKKwlnc3c6IGdzd0AwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc1M3giOworCQltZWRpYXRlayxldGhzeXMgPSA8JmV0aHN5cz47CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwl9OworCisJbGVkcyB7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKKworCQlncmVlbiB7CisJCQlsYWJlbCA9ICJicGktcjY0OnBpbzpncmVlbiI7CisJCQlncGlvcyA9IDwmcGlvIDg5IEdQSU9fQUNUSVZFX0hJR0g+OworCQl9OworCisJCXJlZCB7CisJCQlsYWJlbCA9ICJicGktcjY0OnBpbzpyZWQiOworCQkJZ3Bpb3MgPSA8JnBpbyA4OCBHUElPX0FDVElWRV9ISUdIPjsKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJcmVnID0gPDAgMHg0MDAwMDAwMCAwIDB4NDAwMDAwMDA+OworCX07CisKKwlyZWdfMXA4djogcmVndWxhdG9yLTFwOHYgeworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCXJlZ3VsYXRvci1uYW1lID0gImZpeGVkLTEuOFYiOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCXJlZ3VsYXRvci1hbHdheXMtb247CisJfTsKKworCXJlZ18zcDN2OiByZWd1bGF0b3ItM3AzdiB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAiZml4ZWQtMy4zViI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLWJvb3Qtb247CisJCXJlZ3VsYXRvci1hbHdheXMtb247CisJfTsKKworCXJlZ181djogcmVndWxhdG9yLTV2IHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJmaXhlZC01ViI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKwkJcmVndWxhdG9yLWJvb3Qtb247CisJCXJlZ3VsYXRvci1hbHdheXMtb247CisJfTsKK307CisKKyZidGlmIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismY2lyIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmaXJyeF9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZXRoIHsKKwlzdGF0dXMgPSAib2theSI7CisJZ21hYzA6IG1hY0AwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKwkJcmVnID0gPDA+OworCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQlmaXhlZC1saW5rIHsKKwkJCXNwZWVkID0gPDI1MDA+OworCQkJZnVsbC1kdXBsZXg7CisJCQlwYXVzZTsKKwkJfTsKKwl9OworCisJZ21hYzE6IG1hY0AxIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKwkJcmVnID0gPDE+OworCQlwaHktbW9kZSA9ICJyZ21paSI7CisKKwkJZml4ZWQtbGluayB7CisJCQlzcGVlZCA9IDwxMDAwPjsKKwkJCWZ1bGwtZHVwbGV4OworCQkJcGF1c2U7CisJCX07CisJfTsKKworCW1kaW86IG1kaW8tYnVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCX07Cit9OworCismZ3N3IHsKKwltZWRpYXRlayxtZGlvID0gPCZtZGlvPjsKKwltZWRpYXRlayxwb3J0bWFwID0gImxsbGx3IjsKKwltZWRpYXRlayxtZGlvX21hc3Rlcl9waW5tdXggPSA8MD47CisJcmVzZXQtZ3Bpb3MgPSA8JnBpbyA1NCAwPjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZwaW8+OworCWludGVycnVwdHMgPSA8NTMgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJc3RhdHVzID0gIm9rYXkiOworCisJcG9ydDU6IHBvcnRANSB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NTN4LXBvcnQiOworCQlyZWcgPSA8NT47CisJCXBoeS1tb2RlID0gInJnbWlpIjsKKwkJZml4ZWQtbGluayB7CisJCQlzcGVlZCA9IDwxMDAwPjsKKwkJCWZ1bGwtZHVwbGV4OworCQl9OworCX07CisKKwlwb3J0NjogcG9ydEA2IHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc1M3gtcG9ydCI7CisJCXJlZyA9IDw2PjsKKwkJcGh5LW1vZGUgPSAic2dtaWkiOworCQlmaXhlZC1saW5rIHsKKwkJCXNwZWVkID0gPDI1MDA+OworCQkJZnVsbC1kdXBsZXg7CisJCX07CisJfTsKK307CisKKyZpMmMxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmaTJjMV9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismaTJjMiB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmkyYzJfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJm1tYzAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCIsICJzdGF0ZV91aHMiOworCXBpbmN0cmwtMCA9IDwmZW1tY19waW5zX2RlZmF1bHQ+OworCXBpbmN0cmwtMSA9IDwmZW1tY19waW5zX3Vocz47CisJc3RhdHVzID0gIm9rYXkiOworCWJ1cy13aWR0aCA9IDw4PjsKKwltYXgtZnJlcXVlbmN5ID0gPDUwMDAwMDAwPjsKKwljYXAtbW1jLWhpZ2hzcGVlZDsKKwltbWMtaHMyMDAtMV84djsKKwl2bW1jLXN1cHBseSA9IDwmcmVnXzNwM3Y+OworCXZxbW1jLXN1cHBseSA9IDwmcmVnXzFwOHY+OworCWFzc2lnbmVkLWNsb2NrcyA9IDwmdG9wY2tnZW4gQ0xLX1RPUF9NU0RDMzBfMF9TRUw+OworCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JnRvcGNrZ2VuIENMS19UT1BfVU5JVjQ4TT47CisJbm9uLXJlbW92YWJsZTsKK307CisKKyZtbWMxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiLCAic3RhdGVfdWhzIjsKKwlwaW5jdHJsLTAgPSA8JnNkMF9waW5zX2RlZmF1bHQ+OworCXBpbmN0cmwtMSA9IDwmc2QwX3BpbnNfdWhzPjsKKwlzdGF0dXMgPSAib2theSI7CisJYnVzLXdpZHRoID0gPDQ+OworCW1heC1mcmVxdWVuY3kgPSA8NTAwMDAwMDA+OworCWNhcC1zZC1oaWdoc3BlZWQ7CisJcl9zbXBsID0gPDE+OworCWNkLWdwaW9zID0gPCZwaW8gODEgR1BJT19BQ1RJVkVfTE9XPjsKKwl2bW1jLXN1cHBseSA9IDwmcmVnXzNwM3Y+OworCXZxbW1jLXN1cHBseSA9IDwmcmVnXzNwM3Y+OworCWFzc2lnbmVkLWNsb2NrcyA9IDwmdG9wY2tnZW4gQ0xLX1RPUF9NU0RDMzBfMV9TRUw+OworCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JnRvcGNrZ2VuIENMS19UT1BfVU5JVjQ4TT47Cit9OworCismbmFuZGMgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwYXJhbGxlbF9uYW5kX3BpbnM+OworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCismbm9yX2ZsYXNoIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc3BpX25vcl9waW5zPjsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworCisJZmxhc2hAMCB7CisJCWNvbXBhdGlibGUgPSAiamVkZWMsc3BpLW5vciI7CisJCXJlZyA9IDwwPjsKKwl9OworfTsKKworJnBjaWUwIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGNpZTBfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnBjaWUxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGNpZTFfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnBpbyB7CisJLyogQXR0ZW50aW9uOiBHUElPIDkwIGlzIHVzZWQgdG8gc3dpdGNoIGJldHdlZW4gUENJZUAxLDAgYW5kCisJICogU0FUQSBmdW5jdGlvbnMuIGkuZS4gb3V0cHV0LWhpZ2g6IFBDSWUsIG91dHB1dC1sb3c6IFNBVEEKKwkgKi8KKwlhc21fc2VsIHsKKwkJZ3Bpby1ob2c7CisJCWdwaW9zID0gPDkwIEdQSU9fQUNUSVZFX0hJR0g+OworCQlvdXRwdXQtaGlnaDsKKwl9OworCisJLyogZU1NQyBpcyBzaGFyZWQgcGluIHdpdGggcGFyYWxsZWwgTkFORCAqLworCWVtbWNfcGluc19kZWZhdWx0OiBlbW1jLXBpbnMtZGVmYXVsdCB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJlbW1jIiwgImVtbWNfcnN0IjsKKwkJCWdyb3VwcyA9ICJlbW1jIjsKKwkJfTsKKworCQkvKiAiTkRMMCIsIk5ETDEiLCJOREwyIiwiTkRMMyIsIk5ETDQiLCJOREw1IiwiTkRMNiIsIk5ETDciLAorCQkgKiAiTlJCIiwiTkNMRSIgcGlucyBhcmUgdXNlZCBhcyBEQVQwLERBVDEsREFUMixEQVQzLERBVDQsCisJCSAqIERBVDUsREFUNixEQVQ3LENNRCxDTEsgZm9yIGVNTUMgcmVzcGVjdGl2ZWx5CisJCSAqLworCQljb25mLWNtZC1kYXQgeworCQkJcGlucyA9ICJOREwwIiwgIk5ETDEiLCAiTkRMMiIsCisJCQkgICAgICAgIk5ETDMiLCAiTkRMNCIsICJOREw1IiwKKwkJCSAgICAgICAiTkRMNiIsICJOREw3IiwgIk5SQiI7CisJCQlpbnB1dC1lbmFibGU7CisJCQliaWFzLXB1bGwtdXA7CisJCX07CisKKwkJY29uZi1jbGsgeworCQkJcGlucyA9ICJOQ0xFIjsKKwkJCWJpYXMtcHVsbC1kb3duOworCQl9OworCX07CisKKwllbW1jX3BpbnNfdWhzOiBlbW1jLXBpbnMtdWhzIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImVtbWMiOworCQkJZ3JvdXBzID0gImVtbWMiOworCQl9OworCisJCWNvbmYtY21kLWRhdCB7CisJCQlwaW5zID0gIk5ETDAiLCAiTkRMMSIsICJOREwyIiwKKwkJCSAgICAgICAiTkRMMyIsICJOREw0IiwgIk5ETDUiLAorCQkJICAgICAgICJOREw2IiwgIk5ETDciLCAiTlJCIjsKKwkJCWlucHV0LWVuYWJsZTsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPDQ+OworCQkJYmlhcy1wdWxsLXVwOworCQl9OworCisJCWNvbmYtY2xrIHsKKwkJCXBpbnMgPSAiTkNMRSI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDw0PjsKKwkJCWJpYXMtcHVsbC1kb3duOworCQl9OworCX07CisKKwlldGhfcGluczogZXRoLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiZXRoIjsKKwkJCWdyb3VwcyA9ICJtZGNfbWRpbyIsICJyZ21paV92aWFfZ21hYzIiOworCQl9OworCX07CisKKwlpMmMxX3BpbnM6IGkyYzEtcGlucyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJpMmMiOworCQkJZ3JvdXBzID0gICJpMmMxXzAiOworCQl9OworCX07CisKKwlpMmMyX3BpbnM6IGkyYzItcGlucyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJpMmMiOworCQkJZ3JvdXBzID0gICJpMmMyXzAiOworCQl9OworCX07CisKKwlpMnMxX3BpbnM6IGkyczEtcGlucyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJpMnMiOworCQkJZ3JvdXBzID0gICJpMnNfb3V0X21jbGtfYmNsa193cyIsCisJCQkJICAiaTJzMV9pbl9kYXRhIiwKKwkJCQkgICJpMnMxX291dF9kYXRhIjsKKwkJfTsKKworCQljb25mIHsKKwkJCXBpbnMgPSAiSTJTMV9JTiIsICJJMlMxX09VVCIsICJJMlNfQkNMSyIsCisJCQkgICAgICAgIkkyU19XUyIsICJJMlNfTUNMSyI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDwxMj47CisJCQliaWFzLXB1bGwtZG93bjsKKwkJfTsKKwl9OworCisJaXJyeF9waW5zOiBpcnJ4LXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiaXIiOworCQkJZ3JvdXBzID0gICJpcl8xX3J4IjsKKwkJfTsKKwl9OworCisJaXJ0eF9waW5zOiBpcnR4LXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiaXIiOworCQkJZ3JvdXBzID0gICJpcl8xX3R4IjsKKwkJfTsKKwl9OworCisJLyogUGFyYWxsZWwgbmFuZCBpcyBzaGFyZWQgcGluIHdpdGggZU1NQyAqLworCXBhcmFsbGVsX25hbmRfcGluczogcGFyYWxsZWwtbmFuZC1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJwYXJfbmFuZCI7CisJCX07CisJfTsKKworCXBjaWUwX3BpbnM6IHBjaWUwLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAicGNpZSI7CisJCQlncm91cHMgPSAicGNpZTBfcGFkX3BlcnN0IiwKKwkJCQkgInBjaWUwXzFfd2FrZW4iLAorCQkJCSAicGNpZTBfMV9jbGtyZXEiOworCQl9OworCX07CisKKwlwY2llMV9waW5zOiBwY2llMS1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInBjaWUiOworCQkJZ3JvdXBzID0gInBjaWUxX3BhZF9wZXJzdCIsCisJCQkJICJwY2llMV8wX3dha2VuIiwKKwkJCQkgInBjaWUxXzBfY2xrcmVxIjsKKwkJfTsKKwl9OworCisJcG1pY19idXNfcGluczogcG1pYy1idXMtcGlucyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJwbWljIjsKKwkJCWdyb3VwcyA9ICJwbWljX2J1cyI7CisJCX07CisJfTsKKworCXB3bTdfcGluczogcHdtMS0yLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAicHdtIjsKKwkJCWdyb3VwcyA9ICJwd21fY2g3XzIiOworCQl9OworCX07CisKKwl3bGVkX3BpbnM6IHdsZWQtcGlucyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJsZWQiOworCQkJZ3JvdXBzID0gIndsZWQiOworCQl9OworCX07CisKKwlzZDBfcGluc19kZWZhdWx0OiBzZDAtcGlucy1kZWZhdWx0IHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInNkIjsKKwkJCWdyb3VwcyA9ICJzZF8wIjsKKwkJfTsKKworCQkvKiAiSTJTMl9PVVQsICJJMlM0X0lOIiIsICJJMlMzX0lOIiwgIkkyUzJfSU4iLAorCQkgKiAgIkkyUzRfT1VUIiwgIkkyUzNfT1VUIiBhcmUgdXNlZCBhcyBEQVQwLCBEQVQxLAorCQkgKiAgREFUMiwgREFUMywgQ01ELCBDTEsgZm9yIFNEIHJlc3BlY3RpdmVseS4KKwkJICovCisJCWNvbmYtY21kLWRhdGEgeworCQkJcGlucyA9ICJJMlMyX09VVCIsICJJMlM0X0lOIiwgIkkyUzNfSU4iLAorCQkJICAgICAgICJJMlMyX0lOIiwiSTJTNF9PVVQiOworCQkJaW5wdXQtZW5hYmxlOworCQkJZHJpdmUtc3RyZW5ndGggPSA8OD47CisJCQliaWFzLXB1bGwtdXA7CisJCX07CisJCWNvbmYtY2xrIHsKKwkJCXBpbnMgPSAiSTJTM19PVVQiOworCQkJZHJpdmUtc3RyZW5ndGggPSA8MTI+OworCQkJYmlhcy1wdWxsLWRvd247CisJCX07CisJCWNvbmYtY2QgeworCQkJcGlucyA9ICJUWEQzIjsKKwkJCWJpYXMtcHVsbC11cDsKKwkJfTsKKwl9OworCisJc2QwX3BpbnNfdWhzOiBzZDAtcGlucy11aHMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAic2QiOworCQkJZ3JvdXBzID0gInNkXzAiOworCQl9OworCisJCWNvbmYtY21kLWRhdGEgeworCQkJcGlucyA9ICJJMlMyX09VVCIsICJJMlM0X0lOIiwgIkkyUzNfSU4iLAorCQkJICAgICAgICJJMlMyX0lOIiwiSTJTNF9PVVQiOworCQkJaW5wdXQtZW5hYmxlOworCQkJYmlhcy1wdWxsLXVwOworCQl9OworCisJCWNvbmYtY2xrIHsKKwkJCXBpbnMgPSAiSTJTM19PVVQiOworCQkJYmlhcy1wdWxsLWRvd247CisJCX07CisJfTsKKworCS8qIFNlcmlhbCBOQU5EIGlzIHNoYXJlZCBwaW4gd2l0aCBTUEktTk9SICovCisJc2VyaWFsX25hbmRfcGluczogc2VyaWFsLW5hbmQtcGlucyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJmbGFzaCI7CisJCQlncm91cHMgPSAic25maSI7CisJCX07CisJfTsKKworCXNwaWMwX3BpbnM6IHNwaWMwLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAic3BpIjsKKwkJCWdyb3VwcyA9ICJzcGljMF8wIjsKKwkJfTsKKwl9OworCisJc3BpYzFfcGluczogc3BpYzEtcGlucyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJzcGkiOworCQkJZ3JvdXBzID0gInNwaWMxXzAiOworCQl9OworCX07CisKKwkvKiBTUEktTk9SIGlzIHNoYXJlZCBwaW4gd2l0aCBzZXJpYWwgTkFORCAqLworCXNwaV9ub3JfcGluczogc3BpLW5vci1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJzcGlfbm9yIjsKKwkJfTsKKwl9OworCisJLyogc2VyaWFsIE5BTkQgaXMgc2hhcmVkIHBpbiB3aXRoIFNQSS1OT1IgKi8KKwlzZXJpYWxfbmFuZF9waW5zOiBzZXJpYWwtbmFuZC1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJzbmZpIjsKKwkJfTsKKwl9OworCisJdWFydDBfcGluczogdWFydDAtcGlucyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJ1YXJ0IjsKKwkJCWdyb3VwcyA9ICJ1YXJ0MF8wX3R4X3J4IiA7CisJCX07CisJfTsKKworCXVhcnQyX3BpbnM6IHVhcnQyLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAidWFydCI7CisJCQlncm91cHMgPSAidWFydDJfMV90eF9yeCIgOworCQl9OworCX07CisKKwl3YXRjaGRvZ19waW5zOiB3YXRjaGRvZy1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gIndhdGNoZG9nIjsKKwkJCWdyb3VwcyA9ICJ3YXRjaGRvZyI7CisJCX07CisJfTsKK307CisKKyZwd20geworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwd203X3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwd3JhcCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBtaWNfYnVzX3BpbnM+OworCisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnNhdGEgeworCXN0YXR1cyA9ICJkaXNhYmxlIjsKK307CisKKyZzYXRhX3BoeSB7CisJc3RhdHVzID0gImRpc2FibGUiOworfTsKKworJnNuYW5kIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc2VyaWFsX25hbmRfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworCW1lZGlhdGVrLHF1YWQtc3BpOworCisJcGFydGl0aW9ucyB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtcGFydGl0aW9ucyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQlwYXJ0aXRpb25AMCB7CisJCQlsYWJlbCA9ICJCTDIiOworCQkJcmVnID0gPDB4MDAwMDAgMHgwMDgwMDAwPjsKKwkJCXJlYWQtb25seTsKKwkJfTsKKworCQlwYXJ0aXRpb25AODAwMDAgeworCQkJbGFiZWwgPSAiRklQIjsKKwkJCXJlZyA9IDwweDgwMDAwIDB4MDIwMDAwMD47CisJCX07CisKKwkJcGFydGl0aW9uQDI4MDAwMCB7CisJCQlsYWJlbCA9ICJDb25maWciOworCQkJcmVnID0gPDB4MjgwMDAwIDB4MDA4MDAwMD47CisJCX07CisKKwkJZmFjdG9yeTogcGFydGl0aW9uQDMwMDAwMCB7CisJCQlsYWJlbCA9ICJGYWN0b3J5IjsKKwkJCXJlZyA9IDwweDMwMDAwMCAweDAxMDAwMDA+OworCQl9OworCisJCXBhcnRpdGlvbkA0MDAwMDAgeworCQkJbGFiZWwgPSAidWJpIjsKKwkJCXJlZyA9IDwweDQwMDAwMCAweDI0MDAwMDA+OworCQl9OworCX07Cit9OworCismc3BpMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNwaWMwX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZzcGkxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc3BpYzFfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnNzdXNiIHsKKwl2dXNiMzMtc3VwcGx5ID0gPCZyZWdfM3Azdj47CisJdmJ1cy1zdXBwbHkgPSA8JnJlZ181dj47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnUzcGh5IHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0MF9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0Ml9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismd2F0Y2hkb2cgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ3YXRjaGRvZ19waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismd21hYyB7CisJbWVkaWF0ZWssbXRkLWVlcHJvbSA9IDwmZmFjdG9yeSAweDAwMDA+OworCXN0YXR1cyA9ICJva2F5IjsKK307CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3NjIyLXVibnQtdW5pZmktNi1sci5kdHMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3NjIyLXVibnQtdW5pZmktNi1sci5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY0MTBiMQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc2MjItdWJudC11bmlmaS02LWxyLmR0cwpAQCAtMCwwICsxLDMyNyBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgT1IgTUlUCisKKy9kdHMtdjEvOworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2lucHV0L2lucHV0Lmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvZ3Bpby9ncGlvLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvbGVkcy9jb21tb24uaD4KKworI2luY2x1ZGUgIm10NzYyMi5kdHNpIgorI2luY2x1ZGUgIm10NjM4MC5kdHNpIgorCisvIHsKKwltb2RlbCA9ICJVYmlxdWl0aSBVbmlGaSA2IExSIjsKKwljb21wYXRpYmxlID0gInVibnQsdW5pZmktNi1sciIsICJtZWRpYXRlayxtdDc2MjIiOworCisJYWxpYXNlcyB7CisJCWxlZC1ib290ID0gJmxlZF9ibHVlOworCQlsZWQtZmFpbHNhZmUgPSAmbGVkX2JsdWU7CisJCWxlZC1ydW5uaW5nID0gJmxlZF9ibHVlOworCQlsZWQtdXBncmFkZSA9ICZsZWRfYmx1ZTsKKwkJbGFiZWwtbWFjLWRldmljZSA9ICZnbWFjMDsKKwkJc2VyaWFsMCA9ICZ1YXJ0MDsKKwl9OworCisJY2hvc2VuIHsKKwkJc3Rkb3V0LXBhdGggPSAic2VyaWFsMDoxMTUyMDBuOCI7CisJCWJvb3RhcmdzID0gImVhcmx5Y29uPXVhcnQ4MjUwLG1taW8zMiwweDExMDAyMDAwIHN3aW90bGI9NTEyIGNvbnNvbGU9dHR5UzAsMTE1MjAwbjgiOworCX07CisKKwljcHVzIHsKKwkJY3B1QDAgeworCQkJcHJvYy1zdXBwbHkgPSA8Jm10NjM4MF92Y3B1X3JlZz47CisJCQlzcmFtLXN1cHBseSA9IDwmbXQ2MzgwX3ZtX3JlZz47CisJCX07CisKKwkJY3B1QDEgeworCQkJcHJvYy1zdXBwbHkgPSA8Jm10NjM4MF92Y3B1X3JlZz47CisJCQlzcmFtLXN1cHBseSA9IDwmbXQ2MzgwX3ZtX3JlZz47CisJCX07CisJfTsKKworCWdwaW8ta2V5cyB7CisJCWNvbXBhdGlibGUgPSAiZ3Bpby1rZXlzIjsKKworCQlyZXNldCB7CisJCQlsYWJlbCA9ICJyZXNldCI7CisJCQlsaW51eCxjb2RlID0gPEtFWV9SRVNUQVJUPjsKKwkJCWdwaW9zID0gPCZwaW8gNjIgR1BJT19BQ1RJVkVfTE9XPjsKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJcmVnID0gPDAgMHg0MDAwMDAwMCAwIDB4M2YwMDAwMDA+OworCX07CisKKwlyZWdfMXA4djogcmVndWxhdG9yLTFwOHYgeworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCXJlZ3VsYXRvci1uYW1lID0gImZpeGVkLTEuOFYiOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCXJlZ3VsYXRvci1hbHdheXMtb247CisJfTsKKworCXJlZ18zcDN2OiByZWd1bGF0b3ItM3AzdiB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAiZml4ZWQtMy4zViI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLWJvb3Qtb247CisJCXJlZ3VsYXRvci1hbHdheXMtb247CisJfTsKK307CisKKyZwY2llMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBjaWUwX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZzbG90MCB7CisJd2lmaUAwLDAgeworCQlyZWcgPSA8MHgwIDAgMCAwIDA+OworCQltZWRpYXRlayxtdGQtZWVwcm9tID0gPCZmYWN0b3J5IDB4MjAwMDA+OworCQltdGQtbWFjLWFkZHJlc3MgPSA8JmVlcHJvbSAweDY+OworCQlpZWVlODAyMTEtZnJlcS1saW1pdCA9IDw1MDAwMDAwIDYwMDAwMDA+OworCX07Cit9OworCismcGlvIHsKKwlldGhfcGluczogZXRoLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiZXRoIjsKKwkJCWdyb3VwcyA9ICJtZGNfbWRpbyIsICJyZ21paV92aWFfZ21hYzIiOworCQl9OworCX07CisKKwlwY2llMF9waW5zOiBwY2llMC1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInBjaWUiOworCQkJZ3JvdXBzID0gInBjaWUwX3BhZF9wZXJzdCIsCisJCQkJICJwY2llMF8xX3dha2VuIiwKKwkJCQkgInBjaWUwXzFfY2xrcmVxIjsKKwkJfTsKKwl9OworCisJcGNpZTFfcGluczogcGNpZTEtcGlucyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJwY2llIjsKKwkJCWdyb3VwcyA9ICJwY2llMV9wYWRfcGVyc3QiLAorCQkJCSAicGNpZTFfMF93YWtlbiIsCisJCQkJICJwY2llMV8wX2Nsa3JlcSI7CisJCX07CisJfTsKKworCXBtaWNfYnVzX3BpbnM6IHBtaWMtYnVzLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAicG1pYyI7CisJCQlncm91cHMgPSAicG1pY19idXMiOworCQl9OworCX07CisKKwlzcGlfbm9yX3BpbnM6IHNwaS1ub3ItcGlucyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJmbGFzaCI7CisJCQlncm91cHMgPSAic3BpX25vciI7CisJCX07CisJfTsKKworCXVhcnQwX3BpbnM6IHVhcnQwLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAidWFydCI7CisJCQlncm91cHMgPSAidWFydDBfMF90eF9yeCIgOworCQl9OworCX07CisKKwl1YXJ0M19waW5zOiB1YXJ0My1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInVhcnQiOworCQkJZ3JvdXBzID0gInVhcnQzXzFfdHhfcngiIDsKKwkJfTsKKwl9OworCisJaTJjMF9waW5zOiBpMmMwLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiaTJjIjsKKwkJCWdyb3VwcyA9ICAiaTJjMCI7CisJCX07CisJfTsKKworCXdhdGNoZG9nX3BpbnM6IHdhdGNoZG9nLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAid2F0Y2hkb2ciOworCQkJZ3JvdXBzID0gIndhdGNoZG9nIjsKKwkJfTsKKwl9OworfTsKKworJmJjaCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmJ0aWYgeworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCismZXRoIHsKKwlzdGF0dXMgPSAib2theSI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmV0aF9waW5zPjsKKworCWdtYWMwOiBtYWNAMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssZXRoLW1hYyI7CisJCXJlZyA9IDwwPjsKKworCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJbXRkLW1hYy1hZGRyZXNzID0gPCZlZXByb20gMHgwPjsKKworCQlmaXhlZC1saW5rIHsKKwkJCXNwZWVkID0gPDI1MDA+OworCQkJZnVsbC1kdXBsZXg7CisJCX07CisJfTsKKworCW1kaW86IG1kaW8tYnVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCWV0aGVybmV0LXBoeUA4IHsKKwkJCS8qIE1hcnZlbGwgQVFSYXRlIEFRUjExMlcgLSBubyBkcml2ZXIgKi8KKwkJCWNvbXBhdGlibGUgPSAiZXRoZXJuZXQtcGh5LWllZWU4MDIuMy1jNDUiOworCQkJcmVnID0gPDB4OD47CisJCX07CisJfTsKK307CisKKyZwd3JhcCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBtaWNfYnVzX3BpbnM+OworCisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJm5vcl9mbGFzaCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNwaV9ub3JfcGlucz47CisKKwlzdGF0dXMgPSAib2theSI7CisKKwlmbGFzaEAwIHsKKwkJY29tcGF0aWJsZSA9ICJqZWRlYyxzcGktbm9yIjsKKwkJcmVnID0gPDA+OworCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDw1MDAwMDAwMD47CisKKwkJcGFydGl0aW9ucyB7CisJCQljb21wYXRpYmxlID0gImZpeGVkLXBhcnRpdGlvbnMiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQkJcGFydGl0aW9uQDAgeworCQkJCWxhYmVsID0gInByZWxvYWRlciI7CisJCQkJcmVnID0gPDB4MCAweDQwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCisJCQlwYXJ0aXRpb25ANDAwMDAgeworCQkJCWxhYmVsID0gImF0ZiI7CisJCQkJcmVnID0gPDB4NDAwMDAgMHgyMDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKworCQkJcGFydGl0aW9uQDYwMDAwIHsKKwkJCQlsYWJlbCA9ICJ1LWJvb3QiOworCQkJCXJlZyA9IDwweDYwMDAwIDB4NjAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisKKwkJCXBhcnRpdGlvbkBjMDAwMCB7CisJCQkJbGFiZWwgPSAidS1ib290LWVudiI7CisJCQkJcmVnID0gPDB4YzAwMDAgMHgxMDAwMD47CisJCQl9OworCisJCQlmYWN0b3J5OiBwYXJ0aXRpb25AZDAwMDAgeworCQkJCWxhYmVsID0gImZhY3RvcnkiOworCQkJCXJlZyA9IDwweGQwMDAwIDB4NDAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisKKwkJCWVlcHJvbTogcGFydGl0aW9uQDExMDAwMCB7CisJCQkJbGFiZWwgPSAiZWVwcm9tIjsKKwkJCQlyZWcgPSA8MHgxMTAwMDAgMHgxMDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKworCQkJcGFydGl0aW9uQDEyMDAwMCB7CisJCQkJbGFiZWwgPSAiYnMiOworCQkJCXJlZyA9IDwweDEyMDAwMCAweDEwMDAwPjsKKwkJCX07CisKKwkJCXBhcnRpdGlvbkAxMzAwMDAgeworCQkJCWxhYmVsID0gImNmZyI7CisJCQkJcmVnID0gPDB4MTMwMDAwIDB4MTAwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCisJCQlwYXJ0aXRpb25AMjMwMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImRlbngsZml0IjsKKwkJCQlsYWJlbCA9ICJmaXJtd2FyZSI7CisJCQkJcmVnID0gPDB4MjMwMDAwIDB4MWVlMDAwMD47CisJCQl9OworCisJCQlwYXJ0aXRpb25AMjExMDAwMCB7CisJCQkJbGFiZWwgPSAia2VybmVsMSI7CisJCQkJcmVnID0gPDB4MjExMDAwMCAweDFlZTAwMDA+OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJnVhcnQwIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmdWFydDBfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQzIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmdWFydDNfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworCisJLyogTVQ3OTE1IEJsdWV0b290aCAqLworfTsKKworJmkyYzAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZpMmMwX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKKworCWxlZC1jb250cm9sbGVyQDMwIHsKKwkJY29tcGF0aWJsZSA9ICJ1Ym50LGxlZGJhciI7CisJCXJlZyA9IDwweDMwPjsKKworCQllbmFibGUtZ3BpbyA9IDwmcGlvIDU5IDA+OworCisJCXJlZCB7CisJCQlsYWJlbCA9ICJyZWQiOworCQl9OworCisJCWdyZWVuIHsKKwkJCWxhYmVsID0gImdyZWVuIjsKKwkJfTsKKworCQlsZWRfYmx1ZTogYmx1ZSB7CisJCQlsYWJlbCA9ICJibHVlIjsKKwkJfTsKKwl9OworfTsKKworJndhdGNoZG9nIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmd2F0Y2hkb2dfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJndtYWMgeworCW1lZGlhdGVrLG10ZC1lZXByb20gPSA8JmZhY3RvcnkgMHgwPjsKKwltdGQtbWFjLWFkZHJlc3MgPSA8JmVlcHJvbSAweDA+OworCXN0YXR1cyA9ICJva2F5IjsKK307CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTgxLWNsa2l0Zy5kdHNpIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4MS1jbGtpdGcuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDZkOTFkCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4MS1jbGtpdGcuZHRzaQpAQCAtMCwwICsxLDIxMyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxOCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IFdlbnpoZW4uWXUgPFdlbnpoZW4uWXVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCismY2xraXRnIHsKKwlicmluZy11cCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssY2xrLWJyaW5nLXVwIjsKKwkJY2xvY2tzID0KKwkJCTwmYXBtaXhlZHN5cyBDS19BUE1JWEVEX0FSTVBMTD4sCisJCQk8JmFwbWl4ZWRzeXMgIENLX0FQTUlYRURfTkVUMlBMTD4sCisJCQk8JmFwbWl4ZWRzeXMgIENLX0FQTUlYRURfTU1QTEw+LAorCQkJPCZhcG1peGVkc3lzICBDS19BUE1JWEVEX1NHTVBMTD4sCisJCQk8JmFwbWl4ZWRzeXMgIENLX0FQTUlYRURfV0VETUNVUExMPiwKKwkJCTwmYXBtaXhlZHN5cyAgQ0tfQVBNSVhFRF9ORVQxUExMPiwKKwkJCTwmYXBtaXhlZHN5cyAgQ0tfQVBNSVhFRF9NUExMPiwKKwkJCTwmYXBtaXhlZHN5cyAgQ0tfQVBNSVhFRF9BUExMMj4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX0NLX0YyNk0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZpbmZyYWNmZyBDS19JTkZSQV9JU1BJMD4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX0kyQz4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX0lTUEkxPiwKKwkJCTwmY2xrNDBtPiwKKwkJCTwmaW5mcmFjZmcgQ0tfSU5GUkFfNjZNX01DSz4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX0NLX0YzMks+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZpbmZyYWNmZyBDS19JTkZSQV8xMzNNX0hDSz4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBXzY2TV9QSENLPiwKKwkJCTwmaW5mcmFjZmcgQ0tfSU5GUkFfRkFVRF9MX0NLCT4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX0ZBVURfQVVEX0NLPiwKKwkJCTwmaW5mcmFjZmcgQ0tfSU5GUkFfRkFVRF9FRzJfQ0s+LAorCQkJPCZpbmZyYWNmZyBDS19JTkZSQV9JMkNTX0NLPiwKKwkJCTwmY2xrNDBtPiwKKwkJCTwmY2xrNDBtPiwKKwkJCTwmY2xrNDBtPiwKKwkJCTwmY2xrNDBtPiwKKwkJCTwmY2xrNDBtPiwKKwkJCTwmaW5mcmFjZmcgQ0tfSU5GUkFfTVVYX1NQSTA+LAorCQkJPCZpbmZyYWNmZyBDS19JTkZSQV9NVVhfU1BJMT4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX1JUQ18zMks+LAorCQkJPCZpbmZyYWNmZyBDS19JTkZSQV9GTVNEQ19DSz4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX0ZNU0RDX0hDS19DSz4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX1BFUklfMTMzTT4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBXzEzM01fUEhDSz4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX1VTQl9TWVNfQ0s+LAorCQkJPCZpbmZyYWNmZyBDS19JTkZSQV9VU0JfQ0s+LAorCQkJPCZpbmZyYWNmZyBDS19JTkZSQV9VU0JfWEhDSV9DSz4sCisJCQk8JmNsazQwbT4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX0YyNk1fQ0swPiwKKwkJCTwmY2xrNDBtPiwKKwkJCTwmY2xrNDBtPiwKKwkJCTwmY2xrNDBtPiwKKwkJCTwmY2xrNDBtPiwKKwkJCTwmY2xrNDBtPiwKKwkJCTwmY2xrNDBtPiwKKwkJCTwmY2xrNDBtPiwKKwkJCTwmY2xrNDBtPiwKKwkJCTwmY2xrNDBtPiwKKwkJCTwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfR1BUX1NUQT4sCisJCQk8JmNsazQwbT4sCisJCQk8JmNsazQwbT4sCisJCQk8JmNsazQwbT4sCisJCQk8JmNsazQwbT4sCisJCQk8JmluZnJhY2ZnX2FvIENLX0lORlJBX0NRX0RNQV9DSz4sCisJCQk8JmNsazQwbT4sCisJCQk8JmNsazQwbT4sCisJCQk8JmNsazQwbT4sCisJCQk8JmNsazQwbT4sCisJCQk8JmNsazQwbT4sCisJCQk8JmluZnJhY2ZnX2FvIENLX0lORlJBX0RSQU1DXzI2TV9DSz4sCisJCQk8JmNsazQwbT4sCisJCQk8JmluZnJhY2ZnX2FvIENLX0lORlJBX0FQX0RNQV9DSz4sCisJCQk8JmluZnJhY2ZnX2FvIENLX0lORlJBX1NFSl9DSz4sCisJCQk8JmluZnJhY2ZnX2FvIENLX0lORlJBX1NFSl8xM01fQ0s+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9GUlRDX0NLPiwKKwkJCTwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfTVNEQ19DSz4sCisJCQk8JmluZnJhY2ZnX2FvIENLX0lORlJBX01TRENfSENLX0NLPiwKKwkJCTwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfTVNEQ18xMzNNX0NLPiwKKwkJCTwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfTVNEQ182Nk1fQ0s+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9GQklTVDJGUENfQ0s+LAorCQkJPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9JMkNfTUNLX0NLPiwKKwkJCTwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfSTJDX1BDS19DSz4sCisJCQk8JmluZnJhY2ZnX2FvIENLX0lORlJBX0lVU0JfMTMzX0NLPiwKKwkJCTwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfSVVTQl82Nk1fQ0s+LAorCQkJPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9JVVNCX1NZU19DSz4sCisJCQk8JmluZnJhY2ZnX2FvIENLX0lORlJBX0lVU0JfQ0s+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfQ0JfTV80MTZNPiwKKwkJCTwmY2xrNDBtPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0NCX01fRDQ+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfQ0JfTV9EOD4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9NX0Q4X0QyPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX01fRDNfRDI+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfQ0JfTU1fRDI+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfQ0JfTU1fRDQ+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfQ0JfTU1fRDg+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfQ0JfQVBMTDJfMTk2TT4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9BUExMMl9END4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9DQl9ORVQxX0Q0PiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0NCX05FVDFfRDU+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfTkVUMV9ENV9EMj4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9ORVQxX0Q1X0Q0PiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX05FVDFfRDhfRDI+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfTkVUMV9EOF9END4sCisJCQk8JmNsazQwbT4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9DQl9ORVQyX0Q0PiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX05FVDJfRDRfRDI+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfQ0JfV0VETUNVXzIwOE0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfQ0JfUlRDXzMySz4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9DQl9SVENfMzJQN0s+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfVVNCX0VRX1JYMjUwTT4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9VU0JfVFgyNTBNPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX1VTQl9MTjBfQ0s+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfVVNCX0NEUl9DSz4sCisJCQk8JmNsazQwbT4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9JMkNfQkNLPiwKKwkJCTwmY2xrNDBtPiwKKwkJCTwmY2xrNDBtPiwKKwkJCTwmY2xrNDBtPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0YyNk1fU0VMPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX1NZU0FYST4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9ORVRTWVNfV0VEX01DVT4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9ORVRTWVNfMlg+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfU0dNXzMyNU0+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfQTFTWVM+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfRjI2TT4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9BVURfTD4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9BX1RVTkVSPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX1UyVTNfUkVGPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX1UyVTNfU1lTPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX1UyVTNfWEhDST4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9BUDJDTk5fSE9TVD4sCisJCQk8JmNsazQwbT4sCisJCQk8JmNsazQwbT4sCisJCQk8JmNsazQwbT4sCisJCQk8JmNsazQwbT4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9JMkNfU0VMPiwKKwkJCTwmY2xrNDBtPiwKKwkJCTwmY2xrNDBtPiwKKwkJCTwmY2xrNDBtPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0YyNk1fU0VMPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0RSQU1DX1NFTD4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9EUkFNQ19NRDMyX1NFTD4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9TWVNBWElfU0VMPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX1NZU0FQQl9TRUw+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfQVJNX0RCX01BSU5fU0VMPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0FQMkNOTl9IT1NUX1NFTD4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9ORVRTWVNfU0VMPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX05FVFNZU181MDBNX1NFTD4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9ORVRTWVNfTUNVX1NFTD4sCisJCQk8JmNsazQwbT4sCisJCQk8JmNsazQwbT4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9TR01fUkVHX1NFTD4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9ORVRTWVNfNTAwTV9TRUw+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfVVNCM19QSFlfU0VMPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0YyNk1fU0VMPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX1UyVTNfU0VMPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX1UyVTNfU1lTX1NFTD4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9VMlUzX1hIQ0lfU0VMPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX1VTQl9GUk1DTlRfU0VMPjsKKworCisJCWNsb2NrLW5hbWVzID0gIjAiLCAiMSIsICIyIiwgIjMiLCAiNCIsICI1IiwgIjYiLCAiNyIsICI4IiwgIjkiLCAiMTAiLCAiMTEiLAorCQkiMTIiLCAiMTMiLCAiMTQiLCAiMTUiLCAiMTYiLCAiMTciLCAiMTgiLCAiMTkiLCAiMjAiLCAiMjEiLCAiMjIiLCAiMjMiLAorCQkiMjQiLCAiMjUiLCAiMjYiLCAiMjciLCAiMjgiLCAiMjkiLCAiMzAiLCAiMzEiLCAiMzIiLCAiMzMiLCAiMzQiLCAiMzUiLAorCQkiMzYiLCAiMzciLCAiMzgiLCAiMzkiLCAiNDAiLCAiNDEiLCAiNDIiLCAiNDMiLCAiNDQiLCAiNDUiLCAiNDYiLCAiNDciLAorCQkiNDgiLCAiNDkiLCAiNTAiLCAiNTEiLCAiNTIiLCAiNTMiLCAiNTQiLCAiNTUiLCAiNTYiLCAiNTciLCAiNTgiLCAiNTkiLAorCQkiNjAiLCAiNjEiLCAiNjIiLCAiNjMiLCAiNjQiLCAiNjUiLCAiNjYiLCAiNjciLCAiNjgiLCAiNjkiLCAiNzAiLCAiNzEiLAorCQkiNzIiLCAiNzMiLCAiNzQiLCAiNzUiLCAiNzYiLCAiNzciLCAiNzgiLCAiNzkiLCAiODAiLCAiODEiLCAiODIiLCAiODMiLAorCQkiODQiLCAiODUiLCAiODYiLCAiODciLCAiODgiLCAiODkiLCAiOTAiLCAiOTEiLCAiOTIiLCAiOTMiLCAiOTQiLCAiOTUiLAorCQkiOTYiLCAiOTciLCAiOTgiLCAiOTkiLCAiMTAwIiwgIjEwMSIsICIxMDIiLCAiMTAzIiwgIjEwNCIsICIxMDUiLCAiMTA2IiwgIjEwNyIsCisJCSIxMDgiLCAiMTA5IiwgIjExMCIsICIxMTEiLCAiMTEyIiwgIjExMyIsICIxMTQiLCAiMTE1IiwgIjExNiIsICIxMTciLAorCQkiMTE4IiwgIjExOSIsICIxMjAiLCAiMTIxIiwgIjEyMiIsICIxMjMiLAorCQkiMTI0IiwgIjEyNSIsICIxMjYiLCAiMTI3IiwgIjEyOCIsICIxMjkiLCAiMTMwIiwgIjEzMSIsICIxMzIiLCAiMTMzIiwgIjEzNCIsICIxMzUiLAorCQkiMTM2IiwgIjEzNyIsICIxMzgiLCAiMTM5IiwgIjE0MCIsICIxNDEiLCAiMTQyIiwgIjE0MyIsICIxNDQiLCAiMTQ1IiwgIjE0NiIsICIxNDciLAorCQkiMTQ4IiwgIjE0OSIsICIxNTAiLCAiMTUxIiwgIjE1MiIsICIxNTMiLCAiMTU0IiwgIjE1NSIsICIxNTYiLCAiMTU3IiwgIjE1OCIsICIxNTkiLAorCQkiMTYwIiwgIjE2MSIsICIxNjIiLCAiMTYzIiwgIjE2NCIsICIxNjUiLCAiMTY2IiwgIjE2NyIsICIxNjgiLCAiMTY5IiwgIjE3MCIsICIxNzEiLAorCQkiMTcyIiwgIjE3MyIsICIxNzQiLCAiMTc1IiwgIjE3NiIsICIxNzciLCAiMTc4IiwgIjE3OSIsICIxODAiLCAiMTgxIiwgIjE4MiIsICIxODMiOworCX07Cit9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4MS1lbW1jLXJmYi5kdHMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTgxLWVtbWMtcmZiLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjI2MjhlCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4MS1lbW1jLXJmYi5kdHMKQEAgLTAsMCArMSwxNjkgQEAKKy9kdHMtdjEvOworI2luY2x1ZGUgIm10Nzk4MS5kdHNpIgorLyB7CisJbW9kZWwgPSAiTWVkaWFUZWsgTVQ3OTgxIFJGQiI7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODEtZW1tYy1yZmIiOworCWNob3NlbiB7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwbjEgbG9nbGV2ZWw9OCAgXAorCQkJCWVhcmx5Y29uPXVhcnQ4MjUwLG1taW8zMiwweDExMDAyMDAwIFwKKwkJCQlyb290PVBBUlRMQUJFTD1yb290ZnMgcm9vdGZzdHlwZT1zcXVhc2hmcyxmMmZzIjsKKwl9OworCisJbWVtb3J5IHsKKwkJLy8gZnBnYSBkZHIyOiAxMjhNQioyCisJCXJlZyA9IDwwIDB4NDAwMDAwMDAgMCAweDEwMDAwMDAwPjsKKwl9OworCisJcmVnXzNwM3Y6IHJlZ3VsYXRvci0zcDN2IHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJmaXhlZC0zLjNWIjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwl9OworfTsKKworJnVhcnQwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismd2F0Y2hkb2cgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZtbWMwIHsKKyAgICAgICAgIHBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCIsICJzdGF0ZV91aHMiOworICAgICAgICAgcGluY3RybC0wID0gPCZtbWMwX3BpbnNfZGVmYXVsdD47CisgICAgICAgICBwaW5jdHJsLTEgPSA8Jm1tYzBfcGluc191aHM+OworICAgICAgICAgYnVzLXdpZHRoID0gPDg+OworICAgICAgICAgbWF4LWZyZXF1ZW5jeSA9IDw1MjAwMDAwMD47CisgICAgICAgICBjYXAtbW1jLWhpZ2hzcGVlZDsKKyAgICAgICAgIHZtbWMtc3VwcGx5ID0gPCZyZWdfM3Azdj47CisgICAgICAgICBub24tcmVtb3ZhYmxlOworICAgICAgICAgc3RhdHVzID0gIm9rYXkiOworfTsKKworJmV0aCB7CisJc3RhdHVzID0gIm9rYXkiOworCisJZ21hYzA6IG1hY0AwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKwkJcmVnID0gPDA+OworCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQlmaXhlZC1saW5rIHsKKwkJCXNwZWVkID0gPDI1MDA+OworCQkJZnVsbC1kdXBsZXg7CisJCQlwYXVzZTsKKwkJfTsKKwl9OworCisJZ21hYzE6IG1hY0AxIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKwkJcmVnID0gPDE+OworCQlwaHktbW9kZSA9ICJnbWlpIjsKKwkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CisJfTsKKworCW1kaW86IG1kaW8tYnVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZXRoZXJuZXQtcGh5LWlkMDNhMi45NDYxIjsKKwkJCXJlZyA9IDwwPjsKKwkJCXBoeS1tb2RlID0gImdtaWkiOworCQkJbnZtZW0tY2VsbHMgPSA8JnBoeV9jYWxpYnJhdGlvbj47CisJCQludm1lbS1jZWxsLW5hbWVzID0gInBoeS1jYWwtZGF0YSI7CisJCX07CisKKwkJc3dpdGNoQDAgeworCQkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc1MzEiOworCQkJcmVnID0gPDMxPjsKKwkJCXJlc2V0LWdwaW9zID0gPCZwaW8gMzkgMD47CisKKwkJCXBvcnRzIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJCXBvcnRAMCB7CisJCQkJCXJlZyA9IDwwPjsKKwkJCQkJbGFiZWwgPSAibGFuMSI7CisJCQkJfTsKKworCQkJCXBvcnRAMSB7CisJCQkJCXJlZyA9IDwxPjsKKwkJCQkJbGFiZWwgPSAibGFuMiI7CisJCQkJfTsKKworCQkJCXBvcnRAMiB7CisJCQkJCXJlZyA9IDwyPjsKKwkJCQkJbGFiZWwgPSAibGFuMyI7CisJCQkJfTsKKworCQkJCXBvcnRAMyB7CisJCQkJCXJlZyA9IDwzPjsKKwkJCQkJbGFiZWwgPSAibGFuNCI7CisJCQkJfTsKKworCQkJCXBvcnRANiB7CisJCQkJCXJlZyA9IDw2PjsKKwkJCQkJbGFiZWwgPSAiY3B1IjsKKwkJCQkJZXRoZXJuZXQgPSA8JmdtYWMwPjsKKwkJCQkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKwkJCQkJZml4ZWQtbGluayB7CisJCQkJCQlzcGVlZCA9IDwyNTAwPjsKKwkJCQkJCWZ1bGwtZHVwbGV4OworCQkJCQkJcGF1c2U7CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZobmF0IHsKKwltdGtldGgtd2FuID0gImV0aDEiOworCW10a2V0aC1sYW4gPSAibGFuIjsKKwltdGtldGgtbWF4LWdtYWMgPSA8Mj47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnNwaTEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzcGljX3BpbnM+OworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCismcGlvIHsKKworCXNwaWNfcGluczogc3BpMS1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInNwaSI7CisJCQlncm91cHMgPSAic3BpMV8xIjsKKwkJfTsKKwl9OworCisJbW1jMF9waW5zX2RlZmF1bHQ6IG1tYzAtcGlucy1kZWZhdWx0IHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJlbW1jXzQ1IjsKKwkJfTsKKwl9OworCisJbW1jMF9waW5zX3VoczogbW1jMC1waW5zLXVocyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJmbGFzaCI7CisJCQlncm91cHMgPSAiZW1tY180NSI7CisJCX07CisJfTsKK307CisKKyZ4aGNpIHsKKwltZWRpYXRlayx1M3AtZGlzLW1zayA9IDwweDA+OworCXBoeXMgPSA8JnUycG9ydDAgUEhZX1RZUEVfVVNCMj4sCisJICAgICAgIDwmdTNwb3J0MCBQSFlfVFlQRV9VU0IzPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4MS1mcGdhLWVtbWMuZHRzIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4MS1mcGdhLWVtbWMuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjM2ExOTcKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTgxLWZwZ2EtZW1tYy5kdHMKQEAgLTAsMCArMSwxMzUgQEAKKy9kdHMtdjEvOworI2luY2x1ZGUgIm10Nzk4MS1mcGdhLmR0c2kiCisvIHsKKwltb2RlbCA9ICJNZWRpYVRlayBNVDc5ODEgRlBHQSI7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODEtZnBnYS1lbW1jIjsKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG4xIGxvZ2xldmVsPTggIFwKKwkJCQllYXJseWNvbj11YXJ0ODI1MCxtbWlvMzIsMHgxMTAwMjAwMCBcCisJCQkJcm9vdD1QQVJUTEFCRUw9cm9vdGZzIHJvb3Rmc3R5cGU9c3F1YXNoZnMsZjJmcyI7CisJfTsKKworCW1lbW9yeSB7CisJCS8vIGZwZ2EgZGRyMjogMTI4TUIqMgorCQlyZWcgPSA8MCAweDQwMDAwMDAwIDAgMHgxMDAwMDAwMD47CisJfTsKKworCXdzeXNfYWRpZTogd3N5c19hZGllQDAgeworCS8vIGZwZ2EgY2FzZXMgbmVlZCB0byBtYW51YWwgY2hhbmdlIGFkaWVfaWQgLyBza3VfdHlwZSBmb3IgZHZ0IG9ubHkKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxyZWJiLW10Nzk4MS1hZGllIjsKKwkJYWRpZV9pZCA9IDw3OTc2PjsKKwkJc2t1X3R5cGUgPSA8MzAwMD47CisJfTsKKworCXJlZ18zcDN2OiByZWd1bGF0b3ItM3AzdiB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAiZml4ZWQtMy4zViI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLWJvb3Qtb247CisJCXJlZ3VsYXRvci1hbHdheXMtb247CisJfTsKK307CisKKyZ1YXJ0MCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnNwaTEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJLyogcGluIHNoYXJlZCB3aXRoIHNuZmkgKi8KKwlwaW5jdHJsLTAgPSA8JnNwaWNfcGlucz47CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKKyZwY2llIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcGNpZV9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismcGlvIHsKKwlwY2llX3BpbnM6IHBjaWUtcGlucyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJwY2llIjsKKwkJCWdyb3VwcyA9ICJwY2llX3BlcmVzZXQiLCAicGNpZV9jbGsiLCAicGNpZV93YWtlIjsKKwkJfTsKKwl9OworCisJc3BpY19waW5zOiBzcGkxLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAic3BpIjsKKwkJCWdyb3VwcyA9ICJzcGkxXzEiOworCQl9OworCX07CisKKwltbWMwX3BpbnNfZGVmYXVsdDogbW1jMC1waW5zLWRlZmF1bHQgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiZmxhc2giOworCQkJZ3JvdXBzID0gImVtbWNfNDUiOworCQl9OworCX07CisKKwltbWMwX3BpbnNfdWhzOiBtbWMwLXBpbnMtdWhzIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJlbW1jXzQ1IjsKKwkJfTsKKwl9OworfTsKKworJndhdGNoZG9nIHsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworJm1tYzAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCIsICJzdGF0ZV91aHMiOworCXBpbmN0cmwtMCA9IDwmbW1jMF9waW5zX2RlZmF1bHQ+OworCXBpbmN0cmwtMSA9IDwmbW1jMF9waW5zX3Vocz47CisJYnVzLXdpZHRoID0gPDg+OworCW1heC1mcmVxdWVuY3kgPSA8MzAwMDAwMD47CisJY2FwLW1tYy1oaWdoc3BlZWQ7CisJdm1tYy1zdXBwbHkgPSA8JnJlZ18zcDN2PjsKKwlub24tcmVtb3ZhYmxlOworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZldGggeworCXN0YXR1cyA9ICJva2F5IjsKKworCWdtYWMwOiBtYWNAMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssZXRoLW1hYyI7CisJCXJlZyA9IDwwPjsKKwkJcGh5LW1vZGUgPSAicmdtaWkiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MTAwPjsKKwkJCWZ1bGwtZHVwbGV4OworCQkJcGF1c2U7CisJCX07CisJfTsKKworCWdtYWMxOiBtYWNAMSB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssZXRoLW1hYyI7CisJCXJlZyA9IDwxPjsKKwkJcGh5LW1vZGUgPSAicmdtaWkiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MTAwPjsKKwkJCWZ1bGwtZHVwbGV4OworCQkJcGF1c2U7CisJCX07CisJfTsKKworCW1kaW86IG1kaW8tYnVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCX07Cit9OworCismaG5hdCB7CisJbXRrZXRoLXdhbiA9ICJldGgxIjsKKwltdGtldGgtbGFuID0gImV0aDAiOworCW10a2V0aC1tYXgtZ21hYyA9IDwyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4MS1mcGdhLXNkLmR0cyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODEtZnBnYS1zZC5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVjYTYwYgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODEtZnBnYS1zZC5kdHMKQEAgLTAsMCArMSwxMzUgQEAKKy9kdHMtdjEvOworI2luY2x1ZGUgIm10Nzk4MS1mcGdhLmR0c2kiCisvIHsKKwltb2RlbCA9ICJNZWRpYVRlayBNVDc5ODEgRlBHQSI7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODEtZnBnYS1zZCI7CisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDBuMSBsb2dsZXZlbD04ICBcCisJCQkJZWFybHljb249dWFydDgyNTAsbW1pbzMyLDB4MTEwMDIwMDAgXAorCQkJCXJvb3Q9UEFSVExBQkVMPXJvb3RmcyByb290ZnN0eXBlPXNxdWFzaGZzLGYyZnMiOworCX07CisKKwltZW1vcnkgeworCQkvLyBmcGdhIGRkcjI6IDEyOE1CKjIKKwkJcmVnID0gPDAgMHg0MDAwMDAwMCAwIDB4MTAwMDAwMDA+OworCX07CisKKwl3c3lzX2FkaWU6IHdzeXNfYWRpZUAwIHsKKwkvLyBmcGdhIGNhc2VzIG5lZWQgdG8gbWFudWFsIGNoYW5nZSBhZGllX2lkIC8gc2t1X3R5cGUgZm9yIGR2dCBvbmx5CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWsscmViYi1tdDc5ODEtYWRpZSI7CisJCWFkaWVfaWQgPSA8Nzk3Nj47CisJCXNrdV90eXBlID0gPDMwMDA+OworCX07CisKKwlyZWdfM3AzdjogcmVndWxhdG9yLTNwM3YgeworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCXJlZ3VsYXRvci1uYW1lID0gImZpeGVkLTMuM1YiOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXJlZ3VsYXRvci1ib290LW9uOworCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCX07Cit9OworCismdWFydDAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZzcGkxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCS8qIHBpbiBzaGFyZWQgd2l0aCBzbmZpICovCisJcGluY3RybC0wID0gPCZzcGljX3BpbnM+OworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCismcGNpZSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBjaWVfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnBpbyB7CisJcGNpZV9waW5zOiBwY2llLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAicGNpZSI7CisJCQlncm91cHMgPSAicGNpZV9wZXJlc2V0IiwgInBjaWVfY2xrIiwgInBjaWVfd2FrZSI7CisJCX07CisJfTsKKworCXNwaWNfcGluczogc3BpMS1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInNwaSI7CisJCQlncm91cHMgPSAic3BpMV8xIjsKKwkJfTsKKwl9OworCisJbW1jMF9waW5zX2RlZmF1bHQ6IG1tYzAtcGlucy1kZWZhdWx0IHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJlbW1jXzQ1IjsKKwkJfTsKKwl9OworCisJbW1jMF9waW5zX3VoczogbW1jMC1waW5zLXVocyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJmbGFzaCI7CisJCQlncm91cHMgPSAiZW1tY180NSI7CisJCX07CisJfTsKK307CisKKyZ3YXRjaGRvZyB7CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKKyZtbWMwIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiLCAic3RhdGVfdWhzIjsKKwlwaW5jdHJsLTAgPSA8Jm1tYzBfcGluc19kZWZhdWx0PjsKKwlwaW5jdHJsLTEgPSA8Jm1tYzBfcGluc191aHM+OworCWJ1cy13aWR0aCA9IDw0PjsKKwltYXgtZnJlcXVlbmN5ID0gPDMwMDAwMDA+OworCWNhcC1zZC1oaWdoc3BlZWQ7CisJdm1tYy1zdXBwbHkgPSA8JnJlZ18zcDN2PjsKKwl2cW1tYy1zdXBwbHkgPSA8JnJlZ18zcDN2PjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZXRoIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlnbWFjMDogbWFjQDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MD47CisJCXBoeS1tb2RlID0gInJnbWlpIjsKKworCQlmaXhlZC1saW5rIHsKKwkJCXNwZWVkID0gPDEwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwlnbWFjMTogbWFjQDEgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MT47CisJCXBoeS1tb2RlID0gInJnbWlpIjsKKworCQlmaXhlZC1saW5rIHsKKwkJCXNwZWVkID0gPDEwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwltZGlvOiBtZGlvLWJ1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwl9OworfTsKKworJmhuYXQgeworCW10a2V0aC13YW4gPSAiZXRoMSI7CisJbXRrZXRoLWxhbiA9ICJldGgwIjsKKwltdGtldGgtbWF4LWdtYWMgPSA8Mj47CisJc3RhdHVzID0gIm9rYXkiOworfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODEtZnBnYS1zbmZpLW5hbmQuZHRzIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4MS1mcGdhLXNuZmktbmFuZC5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY0OWExMgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODEtZnBnYS1zbmZpLW5hbmQuZHRzCkBAIC0wLDAgKzEsMTU3IEBACisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDc5ODEtZnBnYS5kdHNpIgorLyB7CisJbW9kZWwgPSAiTWVkaWFUZWsgTVQ3OTgxIEZQR0EiOworCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTgxLWZwZ2Etc25maS1uYW5kIjsKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG4xIGxvZ2xldmVsPTggIFwKKwkJCQllYXJseWNvbj11YXJ0ODI1MCxtbWlvMzIsMHgxMTAwMjAwMCI7CisJfTsKKworCW1lbW9yeSB7CisJCS8vIGZwZ2EgZGRyMjogMTI4TUIqMgorCQlyZWcgPSA8MCAweDQwMDAwMDAwIDAgMHgxMDAwMDAwMD47CisJfTsKKworCW5tYm1fc25maSB7CisJCWNvbXBhdGlibGUgPSAiZ2VuZXJpYyxubWJtIjsKKworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisKKwkJbG93ZXItbXRkLWRldmljZSA9IDwmc25hbmQ+OworCQlmb3JjZWQtY3JlYXRlOworCQllbXB0eS1wYWdlLWVjYy1wcm90ZWN0ZWQ7CisKKwkJcGFydGl0aW9ucyB7CisJCQljb21wYXRpYmxlID0gImZpeGVkLXBhcnRpdGlvbnMiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQkJcGFydGl0aW9uQDAgeworCQkJCWxhYmVsID0gIkJMMiI7CisJCQkJcmVnID0gPDB4MDAwMDAgMHgwMTAwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCisJCQlwYXJ0aXRpb25AMTAwMDAwIHsKKwkJCQlsYWJlbCA9ICJ1LWJvb3QtZW52IjsKKwkJCQlyZWcgPSA8MHgwMTAwMDAwIDB4MDA4MDAwMD47CisJCQl9OworCisJCQlmYWN0b3J5OiBwYXJ0aXRpb25AMTgwMDAwIHsKKwkJCQlsYWJlbCA9ICJGYWN0b3J5IjsKKwkJCQlyZWcgPSA8MHgxODAwMDAgMHgwMjAwMDAwPjsKKwkJCX07CisKKwkJCXBhcnRpdGlvbkAzODAwMDAgeworCQkJCWxhYmVsID0gIkZJUCI7CisJCQkJcmVnID0gPDB4MzgwMDAwIDB4MDIwMDAwMD47CisJCQl9OworCisJCQlwYXJ0aXRpb25ANTgwMDAwIHsKKwkJCQlsYWJlbCA9ICJ1YmkiOworCQkJCXJlZyA9IDwweDU4MDAwMCAweDQwMDAwMDA+OworCQkJfTsKKwkJfTsKKwl9OworCisJd3N5c19hZGllOiB3c3lzX2FkaWVAMCB7CisJLy8gZnBnYSBjYXNlcyBuZWVkIHRvIG1hbnVhbCBjaGFuZ2UgYWRpZV9pZCAvIHNrdV90eXBlIGZvciBkdnQgb25seQorCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLHJlYmItbXQ3OTgxLWFkaWUiOworCQlhZGllX2lkID0gPDc5NzY+OworCQlza3VfdHlwZSA9IDwzMDAwPjsKKwl9OworfTsKKworJnVhcnQwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc3BpMSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkvKiBwaW4gc2hhcmVkIHdpdGggc25maSAqLworCXBpbmN0cmwtMCA9IDwmc3BpY19waW5zPjsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworJnBjaWUgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwY2llX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwaW8geworCXBjaWVfcGluczogcGNpZS1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInBjaWUiOworCQkJZ3JvdXBzID0gInBjaWVfcGVyZXNldCIsICJwY2llX2NsayIsICJwY2llX3dha2UiOworCQl9OworCX07CisKKwlzbmZpX3BpbnM6IHNuZmktcGlucyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJmbGFzaCI7CisJCQlncm91cHMgPSAic25maSI7CisJCX07CisJfTsKKworCXNwaWNfcGluczogc3BpMS1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInNwaSI7CisJCQlncm91cHMgPSAic3BpMV8xIjsKKwkJfTsKKwl9OworfTsKKworJndhdGNoZG9nIHsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworJnNuYW5kIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCS8qIHBpbiBzaGFyZWQgd2l0aCBzcGljICovCisJcGluY3RybC0wID0gPCZzbmZpX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKKwltZWRpYXRlayxxdWFkLXNwaTsKK307CisKKyZldGggeworICAgICAgICBzdGF0dXMgPSAib2theSI7CisKKyAgICAgICAgZ21hYzA6IG1hY0AwIHsKKyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworICAgICAgICAgICAgICAgIHJlZyA9IDwwPjsKKyAgICAgICAgICAgICAgICBwaHktbW9kZSA9ICJyZ21paSI7CisKKyAgICAgICAgICAgICAgICBmaXhlZC1saW5rIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWVkID0gPDEwMD47CisgICAgICAgICAgICAgICAgICAgICAgICBmdWxsLWR1cGxleDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdXNlOworICAgICAgICAgICAgICAgIH07CisgICAgICAgIH07CisJZ21hYzE6IG1hY0AxIHsKKyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworICAgICAgICAgICAgICAgIHJlZyA9IDwxPjsKKyAgICAgICAgICAgICAgICBwaHktbW9kZSA9ICJyZ21paSI7CisKKyAgICAgICAgICAgICAgICBmaXhlZC1saW5rIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWVkID0gPDEwMD47CisgICAgICAgICAgICAgICAgICAgICAgICBmdWxsLWR1cGxleDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdXNlOworICAgICAgICAgICAgICAgIH07CisgICAgICAgIH07CisKKyAgICAgICAgbWRpbzogbWRpby1idXMgeworICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gPDE+OworICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gPDA+OworICAgICAgICB9OworCit9OworCismaG5hdCB7CisJbXRrZXRoLXdhbiA9ICJldGgxIjsKKwltdGtldGgtbGFuID0gImV0aDAiOworCW10a2V0aC1tYXgtZ21hYyA9IDwyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4MS1mcGdhLXNwaW0tbmFuZC5kdHMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTgxLWZwZ2Etc3BpbS1uYW5kLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTZlNzc4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4MS1mcGdhLXNwaW0tbmFuZC5kdHMKQEAgLTAsMCArMSwxNjEgQEAKKy9kdHMtdjEvOworI2luY2x1ZGUgIm10Nzk4MS1mcGdhLmR0c2kiCisvIHsKKwltb2RlbCA9ICJNZWRpYVRlayBNVDc5ODEgRlBHQSI7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODEtZnBnYS1zcGltLW5hbmQiOworCWNob3NlbiB7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwbjEgbG9nbGV2ZWw9OCAgXAorCQkJCWVhcmx5Y29uPXVhcnQ4MjUwLG1taW8zMiwweDExMDAyMDAwIjsKKwl9OworCisJbWVtb3J5IHsKKwkJLy8gZnBnYSBkZHIyOiAxMjhNQioyCisJCXJlZyA9IDwwIDB4NDAwMDAwMDAgMCAweDEwMDAwMDAwPjsKKwl9OworCisJbm1ibV9zcGltX25hbmQgeworCQljb21wYXRpYmxlID0gImdlbmVyaWMsbm1ibSI7CisKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCisJCWxvd2VyLW10ZC1kZXZpY2UgPSA8JnNwaV9uYW5kPjsKKwkJZm9yY2VkLWNyZWF0ZTsKKworCQlwYXJ0aXRpb25zIHsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtcGFydGl0aW9ucyI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCisJCQlwYXJ0aXRpb25AMCB7CisJCQkJbGFiZWwgPSAiQkwyIjsKKwkJCQlyZWcgPSA8MHgwMDAwMCAweDAxMDAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisKKwkJCXBhcnRpdGlvbkAxMDAwMDAgeworCQkJCWxhYmVsID0gInUtYm9vdC1lbnYiOworCQkJCXJlZyA9IDwweDAxMDAwMDAgMHgwMDgwMDAwPjsKKwkJCX07CisKKwkJCXBhcnRpdGlvbkAxODAwMDAgeworCQkJCWxhYmVsID0gIkZhY3RvcnkiOworCQkJCXJlZyA9IDwweDE4MDAwMCAweDAyMDAwMDA+OworCQkJfTsKKworCQkJcGFydGl0aW9uQDM4MDAwMCB7CisJCQkJbGFiZWwgPSAiRklQIjsKKwkJCQlyZWcgPSA8MHgzODAwMDAgMHgwMjAwMDAwPjsKKwkJCX07CisKKwkJCXBhcnRpdGlvbkA1ODAwMDAgeworCQkJCWxhYmVsID0gInViaSI7CisJCQkJcmVnID0gPDB4NTgwMDAwIDB4NDAwMDAwMD47CisJCQl9OworCQl9OworCX07CisKKwl3c3lzX2FkaWU6IHdzeXNfYWRpZUAwIHsKKwkvLyBmcGdhIGNhc2VzIG5lZWQgdG8gbWFudWFsIGNoYW5nZSBhZGllX2lkIC8gc2t1X3R5cGUgZm9yIGR2dCBvbmx5CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWsscmViYi1tdDc5ODEtYWRpZSI7CisJCWFkaWVfaWQgPSA8Nzk3Nj47CisJCXNrdV90eXBlID0gPDMwMDA+OworCX07Cit9OworCismdWFydDAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZzcGkwIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc3BpMF9mbGFzaF9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7CisJc3BpX25hbmQ6IHNwaV9uYW5kQDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAic3BpLW5hbmQiOworCQlyZWcgPSA8MD47CisJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDMwMDAwMDA+OworCX07Cit9OworCismc3BpMSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkvKiBwaW4gc2hhcmVkIHdpdGggc25maSAqLworCXBpbmN0cmwtMCA9IDwmc3BpY19waW5zPjsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworJnBjaWUgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwY2llX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwaW8geworCXBjaWVfcGluczogcGNpZS1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInBjaWUiOworCQkJZ3JvdXBzID0gInBjaWVfcGVyZXNldCIsICJwY2llX2NsayIsICJwY2llX3dha2UiOworCQl9OworCX07CisKKwlzcGkwX2ZsYXNoX3BpbnM6IHNwaTAtcGlucyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJzcGkiOworCQkJZ3JvdXBzID0gInNwaTAiLCAic3BpMF93cF9ob2xkIjsKKwkJfTsKKwl9OworCisJc3BpY19waW5zOiBzcGkxLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAic3BpIjsKKwkJCWdyb3VwcyA9ICJzcGkxXzEiOworCQl9OworCX07Cit9OworCismd2F0Y2hkb2cgeworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCismZXRoIHsKKyAgICAgICAgc3RhdHVzID0gIm9rYXkiOworCisgICAgICAgIGdtYWMwOiBtYWNAMCB7CisgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKyAgICAgICAgICAgICAgICByZWcgPSA8MD47CisgICAgICAgICAgICAgICAgcGh5LW1vZGUgPSAicmdtaWkiOworCisgICAgICAgICAgICAgICAgZml4ZWQtbGluayB7CisgICAgICAgICAgICAgICAgICAgICAgICBzcGVlZCA9IDwxMDA+OworICAgICAgICAgICAgICAgICAgICAgICAgZnVsbC1kdXBsZXg7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXVzZTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICB9OworCWdtYWMxOiBtYWNAMSB7CisgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKyAgICAgICAgICAgICAgICByZWcgPSA8MT47CisgICAgICAgICAgICAgICAgcGh5LW1vZGUgPSAicmdtaWkiOworCisgICAgICAgICAgICAgICAgZml4ZWQtbGluayB7CisgICAgICAgICAgICAgICAgICAgICAgICBzcGVlZCA9IDwxMDA+OworICAgICAgICAgICAgICAgICAgICAgICAgZnVsbC1kdXBsZXg7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXVzZTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICB9OworCisgICAgICAgIG1kaW86IG1kaW8tYnVzIHsKKyAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IDwxPjsKKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IDwwPjsKKyAgICAgICAgfTsKKworfTsKKworJmhuYXQgeworCW10a2V0aC13YW4gPSAiZXRoMSI7CisJbXRrZXRoLWxhbiA9ICJldGgwIjsKKwltdGtldGgtbWF4LWdtYWMgPSA8Mj47CisJc3RhdHVzID0gIm9rYXkiOworfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODEtZnBnYS1zcGltLW5vci5kdHMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTgxLWZwZ2Etc3BpbS1ub3IuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMGI0YzkKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTgxLWZwZ2Etc3BpbS1ub3IuZHRzCkBAIC0wLDAgKzEsMTQ4IEBACisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDc5ODEtZnBnYS5kdHNpIgorLyB7CisJbW9kZWwgPSAiTWVkaWFUZWsgTVQ3OTgxIEZQR0EiOworCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTgxLWZwZ2Etbm9yIjsKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG4xIGxvZ2xldmVsPTggIFwKKwkJCQllYXJseWNvbj11YXJ0ODI1MCxtbWlvMzIsMHgxMTAwMjAwMCI7CisJfTsKKworCW1lbW9yeSB7CisJCS8vIGZwZ2EgZGRyMjogMTI4TUIqMgorCQlyZWcgPSA8MCAweDQwMDAwMDAwIDAgMHgxMDAwMDAwMD47CisJfTsKKworICAgICAgICB3c3lzX2FkaWU6IHdzeXNfYWRpZUAwIHsKKwkJLy8gZnBnYSBjYXNlcyBuZWVkIHRvIG1hbnVhbCBjaGFuZ2UgYWRpZV9pZCAvIHNrdV90eXBlIGZvciBkdnQgb25seQorICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAibWVkaWF0ZWsscmViYi1tdDc5ODEtYWRpZSI7CisgICAgICAgICAgICAgICAgYWRpZV9pZCA9IDw3OTc2PjsKKyAgICAgICAgICAgICAgICBza3VfdHlwZSA9IDwzMDAwPjsKKyAgICAgICAgfTsKK307CisKKyZ1YXJ0MCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnNwaTEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJLyogcGluIHNoYXJlZCB3aXRoIHNuZmkgKi8KKwlwaW5jdHJsLTAgPSA8JnNwaWNfcGlucz47CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKKyZzcGkyIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc3BpMl9mbGFzaF9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7CisJc3BpX25vckAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQljb21wYXRpYmxlID0gImplZGVjLHNwaS1ub3IiOworCQlyZWcgPSA8MD47CisJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDUwMDAwMD47CisKKwkJcGFydGl0aW9uQDAwMDAwIHsKKwkJCWxhYmVsID0gIkJMMiI7CisJCQlyZWcgPSA8MHgwMDAwMCAweDAwNDAwMDA+OworCQl9OworCQlwYXJ0aXRpb25ANDAwMDAgeworCQkJbGFiZWwgPSAidS1ib290LWVudiI7CisJCQlyZWcgPSA8MHg0MDAwMCAweDAwMTAwMDA+OworCQl9OworCQlmYWN0b3J5OiBwYXJ0aXRpb25ANTAwMDAgeworCQkJbGFiZWwgPSAiRmFjdG9yeSI7CisJCQlyZWcgPSA8MHg1MDAwMCAweDAwQjAwMDA+OworCQl9OworCQlwYXJ0aXRpb25AMTAwMDAwIHsKKwkJCWxhYmVsID0gIkZJUCI7CisJCQlyZWcgPSA8MHgxMDAwMDAgMHgwMDgwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDE4MDAwMCB7CisJCQlsYWJlbCA9ICJmaXJtd2FyZSI7CisJCQlyZWcgPSA8MHgxODAwMDAgMHhFMDAwMDA+OworCQl9OworCX07Cit9OworCismcGNpZSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBjaWVfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnBpbyB7CisJcGNpZV9waW5zOiBwY2llLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAicGNpZSI7CisJCQlncm91cHMgPSAicGNpZV9wZXJlc2V0IiwgInBjaWVfY2xrIiwgInBjaWVfd2FrZSI7CisJCX07CisJfTsKKworCXNwaWNfcGluczogc3BpMS1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInNwaSI7CisJCQlncm91cHMgPSAic3BpMV8xIjsKKwkJfTsKKwl9OworCisJc3BpMl9mbGFzaF9waW5zOiBzcGkyLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAic3BpIjsKKwkJCWdyb3VwcyA9ICJzcGkyIiwgInNwaTJfd3BfaG9sZCI7CisJCX07CisJfTsKK307CisKKyZ3YXRjaGRvZyB7CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKKyZldGggeworICAgICAgICBzdGF0dXMgPSAib2theSI7CisKKyAgICAgICAgZ21hYzA6IG1hY0AwIHsKKyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworICAgICAgICAgICAgICAgIHJlZyA9IDwwPjsKKyAgICAgICAgICAgICAgICBwaHktbW9kZSA9ICJyZ21paSI7CisKKyAgICAgICAgICAgICAgICBmaXhlZC1saW5rIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWVkID0gPDEwMD47CisgICAgICAgICAgICAgICAgICAgICAgICBmdWxsLWR1cGxleDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdXNlOworICAgICAgICAgICAgICAgIH07CisgICAgICAgIH07IAorCWdtYWMxOiBtYWNAMSB7CisgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKyAgICAgICAgICAgICAgICByZWcgPSA8MT47CisgICAgICAgICAgICAgICAgcGh5LW1vZGUgPSAicmdtaWkiOworCisgICAgICAgICAgICAgICAgZml4ZWQtbGluayB7CisgICAgICAgICAgICAgICAgICAgICAgICBzcGVlZCA9IDwxMDA+OworICAgICAgICAgICAgICAgICAgICAgICAgZnVsbC1kdXBsZXg7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXVzZTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICB9OworCisgICAgICAgIG1kaW86IG1kaW8tYnVzIHsKKyAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IDwxPjsKKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IDwwPjsKKyAgICAgICAgfTsKKworfTsgCisKKyZobmF0IHsKKwltdGtldGgtd2FuID0gImV0aDEiOworCW10a2V0aC1sYW4gPSAiZXRoMCI7CisJbXRrZXRoLW1heC1nbWFjID0gPDI+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ3ZWQgeworCWR5X3R4Ym1fZW5hYmxlID0gInRydWUiOworCWR5X3R4Ym1fYnVkZ2UgPSA8OD47CisJdHhibV9pbml0X3N6ID0gPDEwPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTgxLWZwZ2EuZHRzaSBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODEtZnBnYS5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MDM5OTIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTgxLWZwZ2EuZHRzaQpAQCAtMCwwICsxLDQ0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAyMCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IFNhbS5TaGloIDxzYW0uc2hpaEBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9hcm0tZ2ljLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvcGh5L3BoeS5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3Jlc2V0L3RpLXN5c2Nvbi5oPgorLyB7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODEtZnBnYSI7CisJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKwkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkjc2l6ZS1jZWxscyA9IDwyPjsKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQljcHVAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE1MyI7CisJCQllbmFibGUtbWV0aG9kID0gInBzY2kiOworCQkJcmVnID0gPDB4MD47CisJCX07CisKKwkJY3B1QDEgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNTMiOworCQkJZW5hYmxlLW1ldGhvZCA9ICJwc2NpIjsKKwkJCXJlZyA9IDwweDE+OworCQl9OworCX07CisKKwlhdXhhZGM6IGFkY0AxMTAwZDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTgxLWF1eGFkYyIsCisJCQkgICAgICJtZWRpYXRlayxtdDc2MjItYXV4YWRjIjsKKwkJcmVnID0gPDAgMHgxMTAwZDAwMCAwIDB4MTAwMD47CisJCWNsb2NrcyA9IDwmc3lzdGVtX2Nsaz47CisJCWNsb2NrLW5hbWVzID0gIm1haW4iOworCQkjaW8tY2hhbm5lbC1jZWxscyA9IDwxPjsKKwl9OworCisJd2VkOiB3ZWRAMTUwMTAwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLHdlZCI7CisJCXdlZF9udW0gPSA8Mj47CisJCS8qIGFkZCB0aGlzIHByb3BlcnR5IGZvciB3ZWQgZ2V0IHRoZSBwY2kgc2xvdCBudW1iZXIuICovCisJCXBjaV9zbG90X21hcCA9IDwwPiwgPDE+OworCQlyZWcgPSA8MCAweDE1MDEwMDAwIDAgMHgxMDAwPiwKKwkJICAgICAgPDAgMHgxNTAxMTAwMCAwIDB4MTAwMD47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyMDUgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDxHSUNfU1BJIDIwNiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwl9OworCisJd2RtYTogd2RtYUAxNTEwNDgwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssd2VkLXdkbWEiOworCQlyZWcgPSA8MCAweDE1MTA0ODAwIDAgMHg0MDA+LAorCQkgICAgICA8MCAweDE1MTA0YzAwIDAgMHg0MDA+OworCX07CisKKwlhcDJ3b2NjaWY6IGFwMndvY2NpZkAxNTFBNTAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssYXAyd29jY2lmIjsKKwkJcmVnID0gPDAgMHgxNTFBNTAwMCAwIDB4MTAwMD4sCisJCSAgICAgIDwwIDB4MTUxQUQwMDAgMCAweDEwMDA+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjExIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8R0lDX1NQSSAyMTIgSVJRX1RZUEVfTEVWRUxfSElHSD47CisgICAgICAgIH07CisKKwl3b2NwdTBfaWxtOiB3b2NwdTBfaWxtQDE1MUUwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayx3b2NwdTBfaWxtIjsKKwkJcmVnID0gPDAgMHgxNTFFMDAwMCAwIDB4ODAwMD47CisJfTsKKworCXdvY3B1X2RsbTogd29jcHVfZGxtQDE1MUU4MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayx3b2NwdV9kbG0iOworCQlyZWcgPSA8MCAweDE1MUU4MDAwIDAgMHgyMDAwPiwKKwkJICAgICAgPDAgMHgxNTFGODAwMCAwIDB4MjAwMD47CisKKwkJcmVzZXRzID0gPCZldGhzeXNyc3QgMD47CisJCXJlc2V0LW5hbWVzID0gIndvY3B1X3JzdCI7CisJfTsKKworCWNwdV9ib290OiB3b2NwdV9ib290QDE1MTk0MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayx3b2NwdV9ib290IjsKKwkJcmVnID0gPDAgMHgxNTE5NDAwMCAwIDB4MTAwMD47CisJfTsKKworCXJlc2VydmVkLW1lbW9yeSB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJcmFuZ2VzOworCisJCS8qIDE5MiBLaUIgcmVzZXJ2ZWQgZm9yIEFSTSBUcnVzdGVkIEZpcm13YXJlIChCTDMxKSAqLworCQlzZWNtb25fcmVzZXJ2ZWQ6IHNlY21vbkA0MzAwMDAwMCB7CisJCQlyZWcgPSA8MCAweDQzMDAwMDAwIDAgMHgzMDAwMD47CisJCQluby1tYXA7CisJCX07CisKKwkJd21jcHVfZW1pOiB3bWNwdS1yZXNlcnZlZEA0N0M4MDAwMCB7CisJCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLHdtY3B1LXJlc2VydmVkIjsKKwkJCW5vLW1hcDsKKwkJCXJlZyA9IDwwIDB4NDdDODAwMDAgMCAweDAwMTAwMDAwPjsKKwkJfTsKKworCQl3b2NwdTBfZW1pOiB3b2NwdTBfZW1pQDQ3RDgwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssd29jcHUwX2VtaSI7CisJCQluby1tYXA7CisJCQlyZWcgPSA8MCAweDQ3RDgwMDAwIDAgMHg0MDAwMD47CisJCQlzaGFyZWQgPSA8MD47CisJCX07CisKKwkJd29jcHVfZGF0YTogd29jcHVfZGF0YUA0N0RDMDAwMCB7CisJCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLHdvY3B1X2RhdGEiOworCQkJbm8tbWFwOworCQkJcmVnID0gPDAgMHg0N0RDMDAwMCAwIDB4MjQwMDAwPjsKKwkJCXNoYXJlZCA9IDwxPjsKKwkJfTsKKwl9OworCisJcHNjaSB7CisJCWNvbXBhdGlibGUgID0gImFybSxwc2NpLTAuMiI7CisJCW1ldGhvZCAgICAgID0gInNtYyI7CisJfTsKKworCXN5c3RlbV9jbGs6IGR1bW15MTNtIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMzAwMDAwMD47CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwl9OworCisJcnRjX2NsazogZHVtbXkzMmsgeworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDMyMDAwPjsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCX07CisKKwl1YXJ0X2NsazogZHVtbXkxMm0geworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEyMDAwMDAwPjsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCX07CisKKwlncHRfY2xrOiBkdW1teTZtIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDw2MDAwMDAwPjsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCX07CisKKwl0aW1lciB7CisJCWNvbXBhdGlibGUgPSAiYXJtLGFybXY4LXRpbWVyIjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEyMDAwMDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfUFBJIDEzIElSUV9UWVBFX0xFVkVMX0xPVz4sCisJCQkgICAgIDxHSUNfUFBJIDE0IElSUV9UWVBFX0xFVkVMX0xPVz4sCisJCQkgICAgIDxHSUNfUFBJIDExIElSUV9UWVBFX0xFVkVMX0xPVz4sCisJCQkgICAgIDxHSUNfUFBJIDEwIElSUV9UWVBFX0xFVkVMX0xPVz47CisKKwl9OworCisJd2F0Y2hkb2c6IHdhdGNoZG9nQDEwMDFjMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc2MjItd2R0IiwKKwkJCSAgICAgIm1lZGlhdGVrLG10NjU4OS13ZHQiOworCQlyZWcgPSA8MCAweDEwMDFjMDAwIDAgMHgxMDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDExMCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJI3Jlc2V0LWNlbGxzID0gPDE+OworCX07CisKKwlnaWM6IGludGVycnVwdC1jb250cm9sbGVyQGMwMDAwMDAgeworCQljb21wYXRpYmxlID0gImFybSxnaWMtdjMiOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJcmVnID0gPDAgMHgwYzAwMDAwMCAwIDB4NDAwMDA+LCAgLyogR0lDRCAqLworCQkgICAgICA8MCAweDBjMDgwMDAwIDAgMHgyMDAwMDA+OyAvKiBHSUNSICovCisKKwkJaW50ZXJydXB0cyA9IDxHSUNfUFBJIDkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJfTsKKworCXVhcnQwOiBzZXJpYWxAMTEwMDIwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni11YXJ0IiwKKwkJCSAgICAgIm1lZGlhdGVrLG10NjU3Ny11YXJ0IjsKKwkJcmVnID0gPDAgMHgxMTAwMjAwMCAwIDB4NDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEyMyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZ1YXJ0X2Nsaz47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXVhcnQxOiBzZXJpYWxAMTEwMDMwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni11YXJ0IiwKKwkJCSAgICAgIm1lZGlhdGVrLG10NjU3Ny11YXJ0IjsKKwkJcmVnID0gPDAgMHgxMTAwMzAwMCAwIDB4NDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEyNCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZ1YXJ0X2Nsaz47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXVhcnQyOiBzZXJpYWxAMTEwMDQwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni11YXJ0IiwKKwkJCSAgICAgIm1lZGlhdGVrLG10NjU3Ny11YXJ0IjsKKwkJcmVnID0gPDAgMHgxMTAwNDAwMCAwIDB4NDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEyNSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZ1YXJ0X2Nsaz47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXBjaWU6IHBjaWVAMTEyODAwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4MS1wY2llIiwKKwkJCSAgICAgIm1lZGlhdGVrLG10Nzk4Ni1wY2llIjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJcmVnID0gPDAgMHgxMTI4MDAwMCAwIDB4NDAwMD47CisJCXJlZy1uYW1lcyA9ICJwY2llLW1hYyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE2OCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJYnVzLXJhbmdlID0gPDB4MDAgMHhmZj47CisJCXJhbmdlcyA9IDwweDgyMDAwMDAwIDAgMHgyMDAwMDAwMAorCQkJICAweDAgMHgyMDAwMDAwMCAwIDB4MTAwMDAwMDA+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwwIDAgMCA3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwwIDAgMCAxICZwY2llX2ludGMgMD4sCisJCQkJPDAgMCAwIDIgJnBjaWVfaW50YyAxPiwKKwkJCQk8MCAwIDAgMyAmcGNpZV9pbnRjIDI+LAorCQkJCTwwIDAgMCA0ICZwY2llX2ludGMgMz47CisJCXBjaWVfaW50YzogaW50ZXJydXB0LWNvbnRyb2xsZXIgeworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCX07CisJfTsKKworCXBpbzogcGluY3RybEAxMWQwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTgxLXBpbmN0cmwiOworCQlyZWcgPSA8MCAweDExZDAwMDAwIDAgMHgxMDAwPiwKKwkJICAgICAgPDAgMHgxMWMwMDAwMCAwIDB4MTAwMD4sCisJCSAgICAgIDwwIDB4MTFjMTAwMDAgMCAweDEwMDA+LAorCQkgICAgICA8MCAweDExZDIwMDAwIDAgMHgxMDAwPiwKKwkJICAgICAgPDAgMHgxMWUwMDAwMCAwIDB4MTAwMD4sCisJCSAgICAgIDwwIDB4MTFlMjAwMDAgMCAweDEwMDA+LAorCQkgICAgICA8MCAweDExZjAwMDAwIDAgMHgxMDAwPiwKKwkJICAgICAgPDAgMHgxMWYxMDAwMCAwIDB4MTAwMD4sCisJCSAgICAgIDwwIDB4MTAwMGIwMDAgMCAweDEwMDA+OworCQlyZWctbmFtZXMgPSAiZ3Bpb19iYXNlIiwgImlvY2ZnX3J0X2Jhc2UiLCAiaW9jZmdfcm1fYmFzZSIsCisJCQkgICAgImlvY2ZnX3JiX2Jhc2UiLCAiaW9jZmdfbGJfYmFzZSIsICJpb2NmZ19ibF9iYXNlIiwKKwkJCSAgICAiaW9jZmdfdG1fYmFzZSIsICJpb2NmZ190bF9iYXNlIiwgImVpbnQiOworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCQlncGlvLXJhbmdlcyA9IDwmcGlvIDAgMCA1Nj47CisJCWludGVycnVwdC1jb250cm9sbGVyOworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTUzIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKyAgICAgICAgZXRoc3lzOiBzeXNjb25AMTUwMDAwMDAgeworICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gPDE+OworICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gPDE+OworICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LWV0aHN5cyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzeXNjb24iOworICAgICAgICAgICAgICAgIHJlZyA9IDwwIDB4MTUwMDAwMDAgMCAweDEwMDA+OworICAgICAgICAgICAgICAgICNjbG9jay1jZWxscyA9IDwxPjsKKyAgICAgICAgICAgICAgICAjcmVzZXQtY2VsbHMgPSA8MT47CisKKwkJZXRoc3lzcnN0OiByZXNldC1jb250cm9sbGVyIHsKKwkJCWNvbXBhdGlibGUgPSAidGksc3lzY29uLXJlc2V0IjsKKwkJCSNyZXNldC1jZWxscyA9IDwxPjsKKwkJCXRpLHJlc2V0LWJpdHMgPSA8MHgzNCA0IDB4MzQgNCAweDM0IDQgKEFTU0VSVF9TRVQgfCBERUFTU0VSVF9DTEVBUiB8IFNUQVRVU19TRVQpPjsKKwkJfTsKKyAgICAgICAgfTsKKworICAgICAgICBldGg6IGV0aGVybmV0QDE1MTAwMDAwIHsKKyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4MS1ldGgiOworICAgICAgICAgICAgICAgIHJlZyA9IDwwIDB4MTUxMDAwMDAgMCAweDgwMDAwPjsKKyAgICAgICAgICAgICAgICBpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTk2IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8R0lDX1NQSSAxOTcgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxHSUNfU1BJIDE5OCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEdJQ19TUEkgMTk5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworICAgICAgICAgICAgICAgIG1lZGlhdGVrLGV0aHN5cyA9IDwmZXRoc3lzPjsKKwkJbWVkaWF0ZWssaW5mcmFjZmcgPSA8JmV0aHN5cz47CisgICAgICAgICAgICAgICAgI3Jlc2V0LWNlbGxzID0gPDE+OworICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gPDE+OworICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gPDA+OworICAgICAgICAgICAgICAgIHN0YXR1cyA9ICJkaXNhYmxlZCI7CisgICAgICAgIH07CisKKwlobmF0OiBobmF0QDE1MDAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdGstaG5hdF92NCI7CisJCXJlZyA9IDwwIDB4MTUxMDAwMDAgMCAweDgwMDAwPjsKKwkJcmVzZXRzID0gPCZldGhzeXMgMD47CisJCXJlc2V0LW5hbWVzID0gIm10a2V0aCI7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXNuYW5kOiBzbmZpQDExMDA1MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtc25hbmQiOworCQlyZWcgPSA8MCAweDExMDA1MDAwIDAgMHgxMDAwPiwgPDAgMHgxMTAwNjAwMCAwIDB4MTAwMD47CisJCXJlZy1uYW1lcyA9ICJuZmkiLCAiZWNjIjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEyMSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZzeXN0ZW1fY2xrPiwKKwkJCSA8JnN5c3RlbV9jbGs+LAorCQkJIDwmc3lzdGVtX2Nsaz47CisJCWNsb2NrLW5hbWVzID0gInBhZF9jbGsiLCAibmZpX2NsayIsICJuZmlfaGNsayI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJbW1jMDogbW1jQDExMjMwMDAwIHsKKyAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LW1tYyI7CisgICAgICAgICAgICAgICAgICByZWcgPSA8MCAweDExMjMwMDAwIDAgMHgxMDAwPiwgPDAgMHgxMWMyMDAwMCAwIDB4MTAwMD47CisgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTQzIElSUV9UWVBFX0xFVkVMX0hJR0g+OworICAgICAgICAgICAgICAgICAgY2xvY2tzID0gPCZzeXN0ZW1fY2xrPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDwmc3lzdGVtX2Nsaz4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICA8JnN5c3RlbV9jbGs+OworICAgICAgICAgICAgICAgICAgY2xvY2stbmFtZXMgPSAic291cmNlIiwgImhjbGsiLCAic291cmNlX2NnIjsKKyAgICAgICAgICAgICAgICAgIHN0YXR1cyA9ICJkaXNhYmxlZCI7CisgICAgICAgIH07CisKKwl3ZWRfcGNpZTogd2VkX3BjaWVAMTAwMDMwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLHdlZF9wY2llIjsKKwkJcmVnID0gPDAgMHgxMDAwMzAwMCAwIDB4MTA+OworCX07CisKKwl3YnN5czogd2JzeXNAMTgwMDAwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLHdic3lzIjsKKwkJcmVnID0gPDAgMHgxODAwMDAwMCAwICAweDEwMDAwMDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjEzIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCQkgPEdJQ19TUEkgMjE0IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCQkgPEdJQ19TUEkgMjE1IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJCQkgPEdJQ19TUEkgMjE2IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljaGlwX2lkID0gPDB4Nzk4MT47CisJfTsKKworCXNwaTA6IHNwaUAxMTAwYTAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssaXBtLXNwaS1xdWFkIjsKKwkJcmVnID0gPDAgMHgxMTAwYTAwMCAwIDB4MTAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE0MCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZ1YXJ0X2Nsaz4sCisJCQkgPCZ1YXJ0X2Nsaz4sCisJCQkgPCZ1YXJ0X2Nsaz4sCisJCQkgPCZ1YXJ0X2Nsaz47CisJCWNsb2NrLW5hbWVzID0gInBhcmVudC1jbGsiLCAic2VsLWNsayIsICJzcGktY2xrIiwgInNwaS1oY2xrIjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJc3BpMTogc3BpQDExMDBiMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxpcG0tc3BpLXNpbmdsZSI7CisJCXJlZyA9IDwwIDB4MTEwMGIwMDAgMCAweDEwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNDEgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmdWFydF9jbGs+LAorCQkJIDwmdWFydF9jbGs+LAorCQkJIDwmdWFydF9jbGs+LAorCQkJIDwmdWFydF9jbGs+OworCQljbG9jay1uYW1lcyA9ICJwYXJlbnQtY2xrIiwgInNlbC1jbGsiLCAic3BpLWNsayIsICJzcGktaGNsayI7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXNwaTI6IHNwaUAxMTAwOTAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssaXBtLXNwaS1xdWFkIjsKKwkJcmVnID0gPDAgMHgxMTAwOTAwMCAwIDB4MTAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE0MiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZ1YXJ0X2Nsaz4sCisJCQkgPCZ1YXJ0X2Nsaz4sCisJCQkgPCZ1YXJ0X2Nsaz4sCisJCQkgPCZ1YXJ0X2Nsaz47CisJCWNsb2NrLW5hbWVzID0gInBhcmVudC1jbGsiLCAic2VsLWNsayIsICJzcGktY2xrIiwgInNwaS1oY2xrIjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJY29uc3lzOiBjb25zeXNAMTAwMDAwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4MS1jb25zeXMiOworCQlyZWcgPSA8MCAweDEwMDAwMDAwIDAgMHg4NjAwMDAwPjsKKwkJbWVtb3J5LXJlZ2lvbiA9IDwmd21jcHVfZW1pPjsKKwl9OworCisJeGhjaTogeGhjaUAxMTIwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTgxLXhoY2kiLAorCQkJICAgICAibWVkaWF0ZWssbXRrLXhoY2kiOworCQlyZWcgPSA8MCAweDExMjAwMDAwIDAgMHgyZTAwPiwKKwkJICAgICAgPDAgMHgxMTIwM2UwMCAwIDB4MDEwMD47CisJCXJlZy1uYW1lcyA9ICJtYWMiLCAiaXBwYyI7CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNzMgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCXBoeXMgPSA8JnUycG9ydDAgUEhZX1RZUEVfVVNCMj47CisJCWNsb2NrcyA9IDwmc3lzdGVtX2Nsaz4sCisJCSAgICAgICAgIDwmc3lzdGVtX2Nsaz4sCisJCQkgPCZzeXN0ZW1fY2xrPiwKKwkJCSA8JnN5c3RlbV9jbGs+LAorCQkJIDwmc3lzdGVtX2Nsaz47CisJCWNsb2NrLW5hbWVzID0gInN5c19jayIsCisJCQkgICAgICAieGhjaV9jayIsCisJCQkgICAgICAicmVmX2NrIiwKKwkJCSAgICAgICJtY3VfY2siLAorCQkJICAgICAgImRtYV9jayI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJbWVkaWF0ZWssdTNwLWRpcy1tc2s9PDB4MDE+OworCQlzdGF0dXMgPSAib2theSI7CisJfTsKKworCXVzYnRwaHk6IHVzYi1waHlAMTEyMDNlMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGE2MDgxMC11MnBoeSIsCisJCQkgICAgICJtZWRpYXRlayxhNjA5MzEtdTNwaHkiLAorCQkJICAgICAibWVkaWF0ZWssYTYweHh4LXVzYnBoeSI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJcmFuZ2VzOworCQlzdGF0dXMgPSAib2theSI7CisKKwkJdTJwb3J0MDogdXNiLXBoeUAxMTIwM2VkMCB7CisJCQlyZWcgPSA8MCAweDExMjAzZWQwIDAgMHgwMDg+OworCQkJY2xvY2tzID0gPCZzeXN0ZW1fY2xrPjsKKwkJCWNsb2NrLW5hbWVzID0gInJlZiI7CisJCQkjcGh5LWNlbGxzID0gPDE+OworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCXUzcG9ydDA6IHVzYi1waHlAMTEyMDNlZDggeworCQkJcmVnID0gPDAgMHgxMTIwM2VkOCAwIDB4MDA4PjsKKwkJCWNsb2NrcyA9IDwmc3lzdGVtX2Nsaz47CisJCQljbG9jay1uYW1lcyA9ICJyZWYiOworCQkJI3BoeS1jZWxscyA9IDwxPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJdTJwb3J0MTogdXNiLXBoeUAxMTIwM2VlMCB7CisJCQlyZWcgPSA8MCAweDExMjAzZWUwIDAgMHgwMDg+OworCQkJY2xvY2tzID0gPCZzeXN0ZW1fY2xrPjsKKwkJCWNsb2NrLW5hbWVzID0gInJlZiI7CisJCQkjcGh5LWNlbGxzID0gPDE+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODEtc2QtcmZiLmR0cyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODEtc2QtcmZiLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDBjMDk3Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4MS1zZC1yZmIuZHRzCkBAIC0wLDAgKzEsMTY5IEBACisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDc5ODEuZHRzaSIKKy8geworCW1vZGVsID0gIk1lZGlhVGVrIE1UNzk4MSBSRkIiOworCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTgxLXNkLXJmYiI7CisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDBuMSBsb2dsZXZlbD04ICBcCisJCQkJZWFybHljb249dWFydDgyNTAsbW1pbzMyLDB4MTEwMDIwMDAgXAorCQkJCXJvb3Q9UEFSVExBQkVMPXJvb3RmcyByb290ZnN0eXBlPXNxdWFzaGZzLGYyZnMiOworCX07CisKKwltZW1vcnkgeworCQkvLyBmcGdhIGRkcjI6IDEyOE1CKjIKKwkJcmVnID0gPDAgMHg0MDAwMDAwMCAwIDB4MTAwMDAwMDA+OworCX07CisKKwlyZWdfM3AzdjogcmVndWxhdG9yLTNwM3YgeworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCXJlZ3VsYXRvci1uYW1lID0gImZpeGVkLTMuM1YiOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXJlZ3VsYXRvci1ib290LW9uOworCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCX07Cit9OworCismdWFydDAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ3YXRjaGRvZyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJm1tYzAgeworICAgICAgICAgcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgInN0YXRlX3VocyI7CisgICAgICAgICBwaW5jdHJsLTAgPSA8Jm1tYzBfcGluc19kZWZhdWx0PjsKKyAgICAgICAgIHBpbmN0cmwtMSA9IDwmbW1jMF9waW5zX3Vocz47CisgICAgICAgICBidXMtd2lkdGggPSA8ND47CisgICAgICAgICBtYXgtZnJlcXVlbmN5ID0gPDUyMDAwMDAwPjsKKyAgICAgICAgIGNhcC1zZC1oaWdoc3BlZWQ7CisgICAgICAgICB2bW1jLXN1cHBseSA9IDwmcmVnXzNwM3Y+OworICAgICAgICAgdnFtbWMtc3VwcGx5ID0gPCZyZWdfM3Azdj47CisgICAgICAgICBzdGF0dXMgPSAib2theSI7Cit9OworCismZXRoIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlnbWFjMDogbWFjQDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MD47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwlnbWFjMTogbWFjQDEgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MT47CisJCXBoeS1tb2RlID0gImdtaWkiOworCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKKwl9OworCisJbWRpbzogbWRpby1idXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJY29tcGF0aWJsZSA9ICJldGhlcm5ldC1waHktaWQwM2EyLjk0NjEiOworCQkJcmVnID0gPDA+OworCQkJcGh5LW1vZGUgPSAiZ21paSI7CisJCQludm1lbS1jZWxscyA9IDwmcGh5X2NhbGlicmF0aW9uPjsKKwkJCW52bWVtLWNlbGwtbmFtZXMgPSAicGh5LWNhbC1kYXRhIjsKKwkJfTsKKworCQlzd2l0Y2hAMCB7CisJCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzUzMSI7CisJCQlyZWcgPSA8MzE+OworCQkJcmVzZXQtZ3Bpb3MgPSA8JnBpbyAzOSAwPjsKKworCQkJcG9ydHMgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQkJcG9ydEAwIHsKKwkJCQkJcmVnID0gPDA+OworCQkJCQlsYWJlbCA9ICJsYW4xIjsKKwkJCQl9OworCisJCQkJcG9ydEAxIHsKKwkJCQkJcmVnID0gPDE+OworCQkJCQlsYWJlbCA9ICJsYW4yIjsKKwkJCQl9OworCisJCQkJcG9ydEAyIHsKKwkJCQkJcmVnID0gPDI+OworCQkJCQlsYWJlbCA9ICJsYW4zIjsKKwkJCQl9OworCisJCQkJcG9ydEAzIHsKKwkJCQkJcmVnID0gPDM+OworCQkJCQlsYWJlbCA9ICJsYW40IjsKKwkJCQl9OworCisJCQkJcG9ydEA2IHsKKwkJCQkJcmVnID0gPDY+OworCQkJCQlsYWJlbCA9ICJjcHUiOworCQkJCQlldGhlcm5ldCA9IDwmZ21hYzA+OworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmhuYXQgeworCW10a2V0aC13YW4gPSAiZXRoMSI7CisJbXRrZXRoLWxhbiA9ICJsYW4iOworCW10a2V0aC1tYXgtZ21hYyA9IDwyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc3BpMSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNwaWNfcGlucz47CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKKyZwaW8geworCisJc3BpY19waW5zOiBzcGkxLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAic3BpIjsKKwkJCWdyb3VwcyA9ICJzcGkxXzEiOworCQl9OworCX07CisKKwltbWMwX3BpbnNfZGVmYXVsdDogbW1jMC1waW5zLWRlZmF1bHQgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiZmxhc2giOworCQkJZ3JvdXBzID0gImVtbWNfNDUiOworCQl9OworCX07CisKKwltbWMwX3BpbnNfdWhzOiBtbWMwLXBpbnMtdWhzIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJlbW1jXzQ1IjsKKwkJfTsKKwl9OworfTsKKworJnhoY2kgeworCW1lZGlhdGVrLHUzcC1kaXMtbXNrID0gPDB4MD47CisJcGh5cyA9IDwmdTJwb3J0MCBQSFlfVFlQRV9VU0IyPiwKKwkgICAgICAgPCZ1M3BvcnQwIFBIWV9UWVBFX1VTQjM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTgxLXNuZmktbmFuZC0yNTAwd2FuLXA1LmR0cyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODEtc25maS1uYW5kLTI1MDB3YW4tcDUuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMWRiZmEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTgxLXNuZmktbmFuZC0yNTAwd2FuLXA1LmR0cwpAQCAtMCwwICsxLDIwNSBAQAorL2R0cy12MS87CisjaW5jbHVkZSAibXQ3OTgxLmR0c2kiCisvIHsKKwltb2RlbCA9ICJNZWRpYVRlayBNVDc5ODEgUkZCIjsKKwljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4MS1zbmFuZC1wY2llLTI1MDB3YW4tcDUtcmZiIjsKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG4xIGxvZ2xldmVsPTggIFwKKwkJCQllYXJseWNvbj11YXJ0ODI1MCxtbWlvMzIsMHgxMTAwMjAwMCI7CisJfTsKKworCW1lbW9yeSB7CisJCS8vIGZwZ2EgZGRyMjogMTI4TUIqMgorCQlyZWcgPSA8MCAweDQwMDAwMDAwIDAgMHgxMDAwMDAwMD47CisJfTsKKworCW5tYm1fc25maSB7CisJCWNvbXBhdGlibGUgPSAiZ2VuZXJpYyxubWJtIjsKKworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisKKwkJbG93ZXItbXRkLWRldmljZSA9IDwmc25hbmQ+OworCQlmb3JjZWQtY3JlYXRlOworCQllbXB0eS1wYWdlLWVjYy1wcm90ZWN0ZWQ7CisKKwkJcGFydGl0aW9ucyB7CisJCQljb21wYXRpYmxlID0gImZpeGVkLXBhcnRpdGlvbnMiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQkJcGFydGl0aW9uQDAgeworCQkJCWxhYmVsID0gIkJMMiI7CisJCQkJcmVnID0gPDB4MDAwMDAgMHgwMTAwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCisJCQlwYXJ0aXRpb25AMTAwMDAwIHsKKwkJCQlsYWJlbCA9ICJ1LWJvb3QtZW52IjsKKwkJCQlyZWcgPSA8MHgwMTAwMDAwIDB4MDA4MDAwMD47CisJCQl9OworCisJCQlmYWN0b3J5OiBwYXJ0aXRpb25AMTgwMDAwIHsKKwkJCQlsYWJlbCA9ICJGYWN0b3J5IjsKKwkJCQlyZWcgPSA8MHgxODAwMDAgMHgwMjAwMDAwPjsKKwkJCX07CisKKwkJCXBhcnRpdGlvbkAzODAwMDAgeworCQkJCWxhYmVsID0gIkZJUCI7CisJCQkJcmVnID0gPDB4MzgwMDAwIDB4MDIwMDAwMD47CisJCQl9OworCisJCQlwYXJ0aXRpb25ANTgwMDAwIHsKKwkJCQlsYWJlbCA9ICJ1YmkiOworCQkJCXJlZyA9IDwweDU4MDAwMCAweDQwMDAwMDA+OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJnVhcnQwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismd2F0Y2hkb2cgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZldGggeworICAgICAgICBzdGF0dXMgPSAib2theSI7CisKKyAgICAgICAgZ21hYzA6IG1hY0AwIHsKKyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworICAgICAgICAgICAgICAgIHJlZyA9IDwwPjsKKyAgICAgICAgICAgICAgICBwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworICAgICAgICAgICAgICAgIGZpeGVkLWxpbmsgeworICAgICAgICAgICAgICAgICAgICAgICAgc3BlZWQgPSA8MjUwMD47CisgICAgICAgICAgICAgICAgICAgICAgICBmdWxsLWR1cGxleDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdXNlOworICAgICAgICAgICAgICAgIH07CisgICAgICAgIH07CisKKyAgICAgICAgbWRpbzogbWRpby1idXMgeworICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gPDE+OworICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gPDA+OworCisJCXBoeTU6IHBoeUA1IHsKKwkJCWNvbXBhdGlibGUgPSAiZXRoZXJuZXQtcGh5LWlkNjdjOS5kZTBhIjsKKwkJCXJlZyA9IDw1PjsKKwkJCXJlc2V0LWdwaW9zID0gPCZwaW8gMTQgMT47CisJCQlyZXNldC1kZWFzc2VydC11cyA9IDwyMDAwMD47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworICAgICAgICAgICAgICAgIHN3aXRjaEAwIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NTMxIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IDwzMT47CisgICAgICAgICAgICAgICAgICAgICAgICByZXNldC1ncGlvcyA9IDwmcGlvIDM5IDA+OworCisgICAgICAgICAgICAgICAgICAgICAgICBwb3J0cyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gPDE+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IDwwPjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0QDAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IDwwPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCA9ICJsYW4xIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0QDEgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IDwxPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCA9ICJsYW4yIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0QDIgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IDwyPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCA9ICJsYW4zIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0QDMgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IDwzPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCA9ICJsYW40IjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICAgICAgCXBvcnRANSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlyZWcgPSA8NT47CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCA9ICJ3YW4iOworICAgICAgICAJICAgICAgICAgICAgICAgICAgICAgICAgcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKyAgICAgICAgICAgICAgICAJICAgICAgICAgICAgICAgIGZpeGVkLWxpbmsgeworICAgICAgICAgICAgICAgICAgICAgICAgCSAgICAgICAgICAgICAgICBzcGVlZCA9IDwyNTAwPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCSAgICAgICAgZnVsbC1kdXBsZXg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCXBhdXNlOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgCSAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRANiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDY+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gImNwdSI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJuZXQgPSA8JmdtYWMwPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkLWxpbmsgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlZWQgPSA8MjUwMD47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsLWR1cGxleDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdXNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH07CisgICAgICAgIH07Cit9OworCismaG5hdCB7CisJbXRrZXRoLXdhbiA9ICJ3YW4iOworCW10a2V0aC1sYW4gPSAibGFuIjsKKwltdGtldGgtbWF4LWdtYWMgPSA8MT47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnNuYW5kIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc25maV9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7CisJbWVkaWF0ZWsscXVhZC1zcGk7Cit9OworCismc3BpMSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNwaWNfcGlucz47CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKKyZwY2llIHsKKyAgICAgICAgcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKyAgICAgICAgcGluY3RybC0wID0gPCZwY2llX3BpbnM+OworICAgICAgICBzdGF0dXMgPSAib2theSI7Cit9OworCismcGlvIHsKKworICAgICAgICBwY2llX3BpbnM6IHBjaWUtcGlucyB7CisgICAgICAgICAgICAgICAgbXV4IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uID0gInBjaWUiOworICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzID0gInBjaWVfcGVyZXNldCIsICJwY2llX2NsayIsICJwY2llX3dha2UiOworICAgICAgICAgICAgICAgIH07CisgICAgICAgIH07CisKKwlzbmZpX3BpbnM6IHNuZmktcGlucyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJmbGFzaCI7CisJCQlncm91cHMgPSAic25maSI7CisJCX07CisJfTsKKworCXNwaWNfcGluczogc3BpMS1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInNwaSI7CisJCQlncm91cHMgPSAic3BpMV8xIjsKKwkJfTsKKwl9OworfTsKKworJnhoY2kgeworCXN0YXR1cyA9ICJva2F5IjsKK307CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTgxLXNwaW0tbmFuZC0yNTAwd2FuLWdtYWMyLmR0cyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODEtc3BpbS1uYW5kLTI1MDB3YW4tZ21hYzIuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNGQ1MjkKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTgxLXNwaW0tbmFuZC0yNTAwd2FuLWdtYWMyLmR0cwpAQCAtMCwwICsxLDI1OSBAQAorL2R0cy12MS87CisjaW5jbHVkZSAibXQ3OTgxLmR0c2kiCisvIHsKKwltb2RlbCA9ICJNZWRpYVRlayBNVDc5ODEgUkZCIjsKKwljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4MS1zcGltLXNuYW5kLXJmYiI7CisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDBuMSBsb2dsZXZlbD04ICBcCisJCQkJZWFybHljb249dWFydDgyNTAsbW1pbzMyLDB4MTEwMDIwMDAiOworCX07CisKKwltZW1vcnkgeworCQkvLyBmcGdhIGRkcjI6IDEyOE1CKjIKKwkJcmVnID0gPDAgMHg0MDAwMDAwMCAwIDB4MTAwMDAwMDA+OworCX07CisKKwlubWJtX3NwaW1fbmFuZCB7CisJCWNvbXBhdGlibGUgPSAiZ2VuZXJpYyxubWJtIjsKKworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisKKwkJbG93ZXItbXRkLWRldmljZSA9IDwmc3BpX25hbmQ+OworCQlmb3JjZWQtY3JlYXRlOworCisJCXBhcnRpdGlvbnMgeworCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1wYXJ0aXRpb25zIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisKKwkJCXBhcnRpdGlvbkAwIHsKKwkJCQlsYWJlbCA9ICJCTDIiOworCQkJCXJlZyA9IDwweDAwMDAwIDB4MDEwMDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKworCQkJcGFydGl0aW9uQDEwMDAwMCB7CisJCQkJbGFiZWwgPSAidS1ib290LWVudiI7CisJCQkJcmVnID0gPDB4MDEwMDAwMCAweDAwODAwMDA+OworCQkJfTsKKworCQkJcGFydGl0aW9uQDE4MDAwMCB7CisJCQkJbGFiZWwgPSAiRmFjdG9yeSI7CisJCQkJcmVnID0gPDB4MTgwMDAwIDB4MDIwMDAwMD47CisJCQl9OworCisJCQlwYXJ0aXRpb25AMzgwMDAwIHsKKwkJCQlsYWJlbCA9ICJGSVAiOworCQkJCXJlZyA9IDwweDM4MDAwMCAweDAyMDAwMDA+OworCQkJfTsKKworCQkJcGFydGl0aW9uQDU4MDAwMCB7CisJCQkJbGFiZWwgPSAidWJpIjsKKwkJCQlyZWcgPSA8MHg1ODAwMDAgMHg0MDAwMDAwPjsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZ1YXJ0MCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJndhdGNoZG9nIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZXRoIHsKKyAgICAgICAgc3RhdHVzID0gIm9rYXkiOworCisgICAgICAgIGdtYWMwOiBtYWNAMCB7CisgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKyAgICAgICAgICAgICAgICByZWcgPSA8MD47CisgICAgICAgICAgICAgICAgcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKyAgICAgICAgICAgICAgICBmaXhlZC1saW5rIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWVkID0gPDI1MDA+OworICAgICAgICAgICAgICAgICAgICAgICAgZnVsbC1kdXBsZXg7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXVzZTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICB9OworCisgICAgICAgIGdtYWMxOiBtYWNAMSB7CisgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKyAgICAgICAgICAgICAgICByZWcgPSA8MT47CisgICAgICAgICAgICAgICAgcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKyAgICAgICAgICAgICAgICBmaXhlZC1saW5rIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWVkID0gPDI1MDA+OworICAgICAgICAgICAgICAgICAgICAgICAgZnVsbC1kdXBsZXg7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXVzZTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICB9OworCisgICAgICAgIG1kaW86IG1kaW8tYnVzIHsKKyAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IDwxPjsKKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlwaHk1OiBwaHlANSB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8NT47CisJCQlyZXNldC1ncGlvcyA9IDwmcGlvIDE0IDE+OworCQkJcmVzZXQtZGVhc3NlcnQtdXMgPSA8MjAwMDA+OworCQkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisJCX07CisKKyAgICAgICAgICAgICAgICBzd2l0Y2hAMCB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzUzMSI7CisgICAgICAgICAgICAgICAgICAgICAgICByZWcgPSA8MzE+OworICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXQtZ3Bpb3MgPSA8JnBpbyAzOSAwPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRzIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSA8MT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gPDA+OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRAMCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDA+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gImxhbjEiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRAMSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDE+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gImxhbjIiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRAMiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDI+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gImxhbjMiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRAMyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDM+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gImxhbjQiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRANiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDY+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gImNwdSI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJuZXQgPSA8JmdtYWMwPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkLWxpbmsgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlZWQgPSA8MjUwMD47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsLWR1cGxleDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdXNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH07CisgICAgICAgIH07Cit9OworCismaG5hdCB7CisJbXRrZXRoLXdhbiA9ICJldGgxIjsKKwltdGtldGgtbGFuID0gImxhbiI7CisJbXRrZXRoLW1heC1nbWFjID0gPDI+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZzcGkwIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc3BpMF9mbGFzaF9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7CisJc3BpX25hbmQ6IHNwaV9uYW5kQDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAic3BpLW5hbmQiOworCQlyZWcgPSA8MD47CisJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDUyMDAwMDAwPjsKKwkJc3BpLXR4LWJ1c3dpZHRoID0gPDQ+OworCQlzcGktcngtYnVzd2lkdGggPSA8ND47CisJfTsKK307CisKKyZzcGkxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc3BpY19waW5zPjsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworJnBpbyB7CisKKwlpMmNfcGluczogaTJjLXBpbnMtZzAgeworICAgICAgICAgICAgICAgIG11eCB7CisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiA9ICJpMmMiOworICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzID0gImkyYzBfMCI7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgfTsKKworICAgICAgICBwY21fcGluczogcGNtLXBpbnMtZzAgeworICAgICAgICAgICAgICAgIG11eCB7CisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiA9ICJwY20iOworICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzID0gInBjbSI7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgfTsKKworICAgICAgICBwd20wX3BpbjogcHdtMC1waW4tZzAgeworICAgICAgICAgICAgICAgIG11eCB7CisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiA9ICJwd20iOworICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzID0gInB3bTBfMCI7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgfTsKKworICAgICAgICBwd20xX3BpbjogcHdtMS1waW4tZzAgeworICAgICAgICAgICAgICAgIG11eCB7CisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiA9ICJwd20iOworICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzID0gInB3bTFfMCI7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgfTsKKworICAgICAgICBwd20yX3BpbjogcHdtMi1waW4geworICAgICAgICAgICAgICAgIG11eCB7CisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiA9ICJwd20iOworICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzID0gInB3bTIiOworICAgICAgICAgICAgICAgIH07CisgICAgICAgIH07CisKKwlzcGkwX2ZsYXNoX3BpbnM6IHNwaTAtcGlucyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJzcGkiOworCQkJZ3JvdXBzID0gInNwaTAiLCAic3BpMF93cF9ob2xkIjsKKwkJfTsKKworCQljb25mLXB1IHsKKwkJCXBpbnMgPSAiU1BJMF9DUyIsICJTUEkwX0hPTEQiLCAiU1BJMF9XUCI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfOG1BPjsKKwkJCWJpYXMtcHVsbC1kb3duID0gPE1US19QVVBEX1NFVF9SMVIwXzAwPjsKKwkJfTsKKworCQljb25mLXBkIHsKKwkJCXBpbnMgPSAiU1BJMF9DTEsiLCAiU1BJMF9NT1NJIiwgIlNQSTBfTUlTTyI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfOG1BPjsKKwkJCWJpYXMtcHVsbC1kb3duID0gPE1US19QVVBEX1NFVF9SMVIwXzAwPjsKKwkJfTsKKwl9OworCisJc3BpY19waW5zOiBzcGkxLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAic3BpIjsKKwkJCWdyb3VwcyA9ICJzcGkxXzEiOworCQl9OworCX07CisKKwl1YXJ0MV9waW5zOiB1YXJ0MS1waW5zLWcxIHsKKyAgICAgICAgICAgICAgICBtdXggeworICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSAidWFydCI7CisgICAgICAgICAgICAgICAgICAgICAgICBncm91cHMgPSAidWFydDFfMSI7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgfTsKKworCXVhcnQyX3BpbnM6IHVhcnQyLXBpbnMtZzEgeworCQltdXggeworICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSAidWFydCI7CisgICAgICAgICAgICAgICAgICAgICAgICBncm91cHMgPSAidWFydDJfMSI7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgfTsKK307CisKKyZ4aGNpIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4MS1zcGltLW5hbmQtZ3N3LmR0cyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODEtc3BpbS1uYW5kLWdzdy5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q1OWY2ZAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODEtc3BpbS1uYW5kLWdzdy5kdHMKQEAgLTAsMCArMSwyODkgQEAKKy9kdHMtdjEvOworI2luY2x1ZGUgIm10Nzk4MS5kdHNpIgorLyB7CisJbW9kZWwgPSAiTWVkaWFUZWsgTVQ3OTgxIFJGQiI7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODEtc3BpbS1zbmFuZC1nc3ctcmZiIjsKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG4xIGxvZ2xldmVsPTggIFwKKwkJCQllYXJseWNvbj11YXJ0ODI1MCxtbWlvMzIsMHgxMTAwMjAwMCI7CisJfTsKKworCW1lbW9yeSB7CisJCS8vIGZwZ2EgZGRyMjogMTI4TUIqMgorCQlyZWcgPSA8MCAweDQwMDAwMDAwIDAgMHgxMDAwMDAwMD47CisJfTsKKworCW5tYm1fc3BpbV9uYW5kIHsKKwkJY29tcGF0aWJsZSA9ICJnZW5lcmljLG5tYm0iOworCisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQlsb3dlci1tdGQtZGV2aWNlID0gPCZzcGlfbmFuZD47CisJCWZvcmNlZC1jcmVhdGU7CisKKwkJcGFydGl0aW9ucyB7CisJCQljb21wYXRpYmxlID0gImZpeGVkLXBhcnRpdGlvbnMiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQkJcGFydGl0aW9uQDAgeworCQkJCWxhYmVsID0gIkJMMiI7CisJCQkJcmVnID0gPDB4MDAwMDAgMHgwMTAwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCisJCQlwYXJ0aXRpb25AMTAwMDAwIHsKKwkJCQlsYWJlbCA9ICJ1LWJvb3QtZW52IjsKKwkJCQlyZWcgPSA8MHgwMTAwMDAwIDB4MDA4MDAwMD47CisJCQl9OworCisJCQlwYXJ0aXRpb25AMTgwMDAwIHsKKwkJCQlsYWJlbCA9ICJGYWN0b3J5IjsKKwkJCQlyZWcgPSA8MHgxODAwMDAgMHgwMjAwMDAwPjsKKwkJCX07CisKKwkJCXBhcnRpdGlvbkAzODAwMDAgeworCQkJCWxhYmVsID0gIkZJUCI7CisJCQkJcmVnID0gPDB4MzgwMDAwIDB4MDIwMDAwMD47CisJCQl9OworCisJCQlwYXJ0aXRpb25ANTgwMDAwIHsKKwkJCQlsYWJlbCA9ICJ1YmkiOworCQkJCXJlZyA9IDwweDU4MDAwMCAweDQwMDAwMDA+OworCQkJfTsKKwkJfTsKKwl9OworCisJc291bmRfd204OTYwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5eHgtd204OTYwLW1hY2hpbmUiOworCQltZWRpYXRlayxwbGF0Zm9ybSA9IDwmYWZlPjsKKwkJYXVkaW8tcm91dGluZyA9ICJIZWFkcGhvbmUiLCAiSFBfTCIsCisJCQkJIkhlYWRwaG9uZSIsICJIUF9SIiwKKwkJCQkiTElOUFVUMSIsICJBTUlDIiwKKwkJCQkiUklOUFVUMSIsICJBTUlDIjsKKwkJbWVkaWF0ZWssYXVkaW8tY29kZWMgPSA8JndtODk2MD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXNvdW5kX3NpMzIxOHggeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzl4eC1zaTMyMTh4LW1hY2hpbmUiOworCQltZWRpYXRlayxwbGF0Zm9ybSA9IDwmYWZlPjsKKwkJbWVkaWF0ZWssZXh0LWNvZGVjID0gPCZwcm9zbGljX3NwaT47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworICAgICAgICBnc3c6IGdzd0AwIHsKKyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzUzeCI7CisgICAgICAgICAgICAgICAgbWVkaWF0ZWssZXRoc3lzID0gPCZldGhzeXM+OworICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gPDE+OworICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gPDA+OworICAgICAgICB9OworfTsKKworJmFmZSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBjbV9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismaTJjMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmkyY19waW5zPjsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworCisJd204OTYwOiB3bTg5NjBAMWEgeworCQljb21wYXRpYmxlID0gIndsZix3bTg5NjAiOworCQlyZWcgPSA8MHgxYT47CisJfTsKK307CisKKyZ1YXJ0MCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJndhdGNoZG9nIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZXRoIHsKKyAgICAgICAgc3RhdHVzID0gIm9rYXkiOworCisgICAgICAgIGdtYWMwOiBtYWNAMCB7CisgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKyAgICAgICAgICAgICAgICByZWcgPSA8MD47CisgICAgICAgICAgICAgICAgcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKyAgICAgICAgICAgICAgICBmaXhlZC1saW5rIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWVkID0gPDI1MDA+OworICAgICAgICAgICAgICAgICAgICAgICAgZnVsbC1kdXBsZXg7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXVzZTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICB9OworCisgICAgICAgIGdtYWMxOiBtYWNAMSB7CisgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKyAgICAgICAgICAgICAgICByZWcgPSA8MT47CisgICAgICAgICAgICAgICAgcGh5LW1vZGUgPSAiZ21paSI7CisgICAgICAgICAgICAgICAgcGh5LWhhbmRsZSA9IDwmcGh5MD47CisgICAgICAgIH07CisKKyAgICAgICAgbWRpbzogbWRpby1idXMgeworICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gPDE+OworICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gPDA+OworCisgICAgICAgICAgICAgICAgcGh5MDogZXRoZXJuZXQtcGh5QDAgeworICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJldGhlcm5ldC1waHktaWQwM2EyLjk0NjEiOworICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDA+OworICAgICAgICAgICAgICAgICAgICAgICAgcGh5LW1vZGUgPSAiZ21paSI7CisgICAgICAgICAgICAgICAgICAgICAgICBudm1lbS1jZWxscyA9IDwmcGh5X2NhbGlicmF0aW9uPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG52bWVtLWNlbGwtbmFtZXMgPSAicGh5LWNhbC1kYXRhIjsKKyAgICAgICAgICAgICAgICB9OworCisgICAgICAgIH07Cit9OworCismZ3N3IHsKKyAgICAgICAgbWVkaWF0ZWssbWRpbyA9IDwmbWRpbz47CisgICAgICAgIG1lZGlhdGVrLHBvcnRtYXAgPSAibGxsbHciOworICAgICAgICBtZWRpYXRlayxtZGlvX21hc3Rlcl9waW5tdXggPSA8MT47CisgICAgICAgIHJlc2V0LWdwaW9zID0gPCZwaW8gMzkgMD47CisgICAgICAgIGludGVycnVwdC1wYXJlbnQgPSA8JnBpbz47CisgICAgICAgIGludGVycnVwdHMgPSA8MzggSVJRX1RZUEVfTEVWRUxfSElHSD47CisgICAgICAgIHN0YXR1cyA9ICJva2F5IjsKKworICAgICAgICBwb3J0NjogcG9ydEA2IHsKKyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzUzeC1wb3J0IjsKKyAgICAgICAgICAgICAgICByZWcgPSA8Nj47CisgICAgICAgICAgICAgICAgcGh5LW1vZGUgPSAic2dtaWkiOworICAgICAgICAgICAgICAgIGZpeGVkLWxpbmsgeworICAgICAgICAgICAgICAgICAgICAgICAgc3BlZWQgPSA8MjUwMD47CisgICAgICAgICAgICAgICAgICAgICAgICBmdWxsLWR1cGxleDsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICB9OworfTsKKworJmhuYXQgeworICAgICAgICBtdGtldGgtd2FuID0gImV0aDEiOworICAgICAgICBtdGtldGgtbGFuID0gImV0aDAiOworICAgICAgICBtdGtldGgtbWF4LWdtYWMgPSA8Mj47CisgICAgICAgIHN0YXR1cyA9ICJva2F5IjsKK307CisKKyZzcGkwIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc3BpMF9mbGFzaF9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7CisJc3BpX25hbmQ6IHNwaV9uYW5kQDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAic3BpLW5hbmQiOworCQlyZWcgPSA8MD47CisJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDUyMDAwMDAwPjsKKwkJc3BpLXR4LWJ1c3dpZHRoID0gPDQ+OworCQlzcGktcngtYnVzd2lkdGggPSA8ND47CisJfTsKK307CisKKyZzcGkxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc3BpY19waW5zPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwlwcm9zbGljX3NwaTogcHJvc2xpY19zcGlAMCB7CisJCWNvbXBhdGlibGUgPSAic2lsYWJzLHByb3NsaWNfc3BpIjsKKwkJcmVnID0gPDA+OworCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDwxMDAwMDAwMD47CisJCXNwaS1jcGhhID0gPDE+OworCQlzcGktY3BvbCA9IDwxPjsKKwkJY2hhbm5lbF9jb3VudCA9IDwxPjsKKwkJZGVidWdfbGV2ZWwgPSA8ND47ICAgICAgIC8qIDEgPSBUUkMsIDIgPSBEQkcsIDQgPSBFUlIgKi8KKwkJcmVzZXRfZ3BpbyA9IDwmcGlvIDE1IDA+OworCQlpZyxlbmFibGUtc3BpID0gPDE+OyAgICAgLyogMTogRW5hYmxlLCAwOiBEaXNhYmxlICovCisJfTsKK307CisKKyZwaW8geworCisJaTJjX3BpbnM6IGkyYy1waW5zLWcwIHsKKyAgICAgICAgICAgICAgICBtdXggeworICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSAiaTJjIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwcyA9ICJpMmMwXzAiOworICAgICAgICAgICAgICAgIH07CisgICAgICAgIH07CisKKyAgICAgICAgcGNtX3BpbnM6IHBjbS1waW5zLWcwIHsKKyAgICAgICAgICAgICAgICBtdXggeworICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSAicGNtIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwcyA9ICJwY20iOworICAgICAgICAgICAgICAgIH07CisgICAgICAgIH07CisKKyAgICAgICAgcHdtMF9waW46IHB3bTAtcGluLWcwIHsKKyAgICAgICAgICAgICAgICBtdXggeworICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSAicHdtIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwcyA9ICJwd20wXzAiOworICAgICAgICAgICAgICAgIH07CisgICAgICAgIH07CisKKyAgICAgICAgcHdtMV9waW46IHB3bTEtcGluLWcwIHsKKyAgICAgICAgICAgICAgICBtdXggeworICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSAicHdtIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwcyA9ICJwd20xXzAiOworICAgICAgICAgICAgICAgIH07CisgICAgICAgIH07CisKKyAgICAgICAgcHdtMl9waW46IHB3bTItcGluIHsKKyAgICAgICAgICAgICAgICBtdXggeworICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSAicHdtIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwcyA9ICJwd20yIjsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICB9OworCisJc3BpMF9mbGFzaF9waW5zOiBzcGkwLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAic3BpIjsKKwkJCWdyb3VwcyA9ICJzcGkwIiwgInNwaTBfd3BfaG9sZCI7CisJCX07CisKKwkJY29uZi1wdSB7CisJCQlwaW5zID0gIlNQSTBfQ1MiLCAiU1BJMF9IT0xEIiwgIlNQSTBfV1AiOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzhtQT47CisJCQliaWFzLXB1bGwtZG93biA9IDxNVEtfUFVQRF9TRVRfUjFSMF8wMD47CisJCX07CisKKwkJY29uZi1wZCB7CisJCQlwaW5zID0gIlNQSTBfQ0xLIiwgIlNQSTBfTU9TSSIsICJTUEkwX01JU08iOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzhtQT47CisJCQliaWFzLXB1bGwtZG93biA9IDxNVEtfUFVQRF9TRVRfUjFSMF8wMD47CisJCX07CisJfTsKKworCXNwaWNfcGluczogc3BpMS1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInNwaSI7CisJCQlncm91cHMgPSAic3BpMV8xIjsKKwkJfTsKKwl9OworCisJdWFydDFfcGluczogdWFydDEtcGlucy1nMSB7CisgICAgICAgICAgICAgICAgbXV4IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uID0gInVhcnQiOworICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzID0gInVhcnQxXzEiOworICAgICAgICAgICAgICAgIH07CisgICAgICAgIH07CisKKwl1YXJ0Ml9waW5zOiB1YXJ0Mi1waW5zLWcxIHsKKwkJbXV4IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uID0gInVhcnQiOworICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzID0gInVhcnQyXzEiOworICAgICAgICAgICAgICAgIH07CisgICAgICAgIH07Cit9OworCismeGhjaSB7CisJbWVkaWF0ZWssdTNwLWRpcy1tc2sgPSA8MHgwPjsKKwlwaHlzID0gPCZ1MnBvcnQwIFBIWV9UWVBFX1VTQjI+LAorCSAgICAgICA8JnUzcG9ydDAgUEhZX1RZUEVfVVNCMz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODEtc3BpbS1uYW5kLXJmYi5kdHMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTgxLXNwaW0tbmFuZC1yZmIuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU4YTNkMmYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTgxLXNwaW0tbmFuZC1yZmIuZHRzCkBAIC0wLDAgKzEsMzA1IEBACisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDc5ODEuZHRzaSIKKy8geworCW1vZGVsID0gIk1lZGlhVGVrIE1UNzk4MSBSRkIiOworCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTgxLXNwaW0tc25hbmQtcmZiIjsKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG4xIGxvZ2xldmVsPTggIFwKKwkJCQllYXJseWNvbj11YXJ0ODI1MCxtbWlvMzIsMHgxMTAwMjAwMCI7CisJfTsKKworCW1lbW9yeSB7CisJCS8vIGZwZ2EgZGRyMjogMTI4TUIqMgorCQlyZWcgPSA8MCAweDQwMDAwMDAwIDAgMHgxMDAwMDAwMD47CisJfTsKKworCW5tYm1fc3BpbV9uYW5kIHsKKwkJY29tcGF0aWJsZSA9ICJnZW5lcmljLG5tYm0iOworCisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQlsb3dlci1tdGQtZGV2aWNlID0gPCZzcGlfbmFuZD47CisJCWZvcmNlZC1jcmVhdGU7CisKKwkJcGFydGl0aW9ucyB7CisJCQljb21wYXRpYmxlID0gImZpeGVkLXBhcnRpdGlvbnMiOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQkJcGFydGl0aW9uQDAgeworCQkJCWxhYmVsID0gIkJMMiI7CisJCQkJcmVnID0gPDB4MDAwMDAgMHgwMTAwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCisJCQlwYXJ0aXRpb25AMTAwMDAwIHsKKwkJCQlsYWJlbCA9ICJ1LWJvb3QtZW52IjsKKwkJCQlyZWcgPSA8MHgwMTAwMDAwIDB4MDA4MDAwMD47CisJCQl9OworCisJCQlwYXJ0aXRpb25AMTgwMDAwIHsKKwkJCQlsYWJlbCA9ICJGYWN0b3J5IjsKKwkJCQlyZWcgPSA8MHgxODAwMDAgMHgwMjAwMDAwPjsKKwkJCX07CisKKwkJCXBhcnRpdGlvbkAzODAwMDAgeworCQkJCWxhYmVsID0gIkZJUCI7CisJCQkJcmVnID0gPDB4MzgwMDAwIDB4MDIwMDAwMD47CisJCQl9OworCisJCQlwYXJ0aXRpb25ANTgwMDAwIHsKKwkJCQlsYWJlbCA9ICJ1YmkiOworCQkJCXJlZyA9IDwweDU4MDAwMCAweDQwMDAwMDA+OworCQkJfTsKKwkJfTsKKwl9OworCisJc291bmRfd204OTYwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5eHgtd204OTYwLW1hY2hpbmUiOworCQltZWRpYXRlayxwbGF0Zm9ybSA9IDwmYWZlPjsKKwkJYXVkaW8tcm91dGluZyA9ICJIZWFkcGhvbmUiLCAiSFBfTCIsCisJCQkJIkhlYWRwaG9uZSIsICJIUF9SIiwKKwkJCQkiTElOUFVUMSIsICJBTUlDIiwKKwkJCQkiUklOUFVUMSIsICJBTUlDIjsKKwkJbWVkaWF0ZWssYXVkaW8tY29kZWMgPSA8JndtODk2MD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXNvdW5kX3NpMzIxOHggeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzl4eC1zaTMyMTh4LW1hY2hpbmUiOworCQltZWRpYXRlayxwbGF0Zm9ybSA9IDwmYWZlPjsKKwkJbWVkaWF0ZWssZXh0LWNvZGVjID0gPCZwcm9zbGljX3NwaT47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKK307CisKKyZhZmUgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwY21fcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmkyYzAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZpMmNfcGlucz47CisJc3RhdHVzID0gImRpc2FibGVkIjsKKworCXdtODk2MDogd204OTYwQDFhIHsKKwkJY29tcGF0aWJsZSA9ICJ3bGYsd204OTYwIjsKKwkJcmVnID0gPDB4MWE+OworCX07Cit9OworCismdWFydDAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ3YXRjaGRvZyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmV0aCB7CisgICAgICAgIHN0YXR1cyA9ICJva2F5IjsKKworICAgICAgICBnbWFjMDogbWFjQDAgeworICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAibWVkaWF0ZWssZXRoLW1hYyI7CisgICAgICAgICAgICAgICAgcmVnID0gPDA+OworICAgICAgICAgICAgICAgIHBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisgICAgICAgICAgICAgICAgZml4ZWQtbGluayB7CisgICAgICAgICAgICAgICAgICAgICAgICBzcGVlZCA9IDwyNTAwPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGwtZHVwbGV4OworICAgICAgICAgICAgICAgICAgICAgICAgcGF1c2U7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgfTsKKworCWdtYWMxOiBtYWNAMSB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssZXRoLW1hYyI7CisJCXJlZyA9IDwxPjsKKwkJcGh5LW1vZGUgPSAiZ21paSI7CisJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCX07CisKKyAgICAgICAgbWRpbzogbWRpby1idXMgeworICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gPDE+OworICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gPDA+OworCisJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZXRoZXJuZXQtcGh5LWlkMDNhMi45NDYxIjsKKwkJCXJlZyA9IDwwPjsKKwkJCXBoeS1tb2RlID0gImdtaWkiOworCQkJbnZtZW0tY2VsbHMgPSA8JnBoeV9jYWxpYnJhdGlvbj47CisJCQludm1lbS1jZWxsLW5hbWVzID0gInBoeS1jYWwtZGF0YSI7CisJCX07CisKKwkJc3dpdGNoQDAgeworICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc1MzEiOworICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDMxPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0LWdwaW9zID0gPCZwaW8gMzkgMD47CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRzIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSA8MT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gPDA+OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRAMCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDA+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gImxhbjEiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRAMSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDE+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gImxhbjIiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRAMiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDI+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gImxhbjMiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRAMyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDM+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gImxhbjQiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRANiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDY+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gImNwdSI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJuZXQgPSA8JmdtYWMwPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkLWxpbmsgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlZWQgPSA8MjUwMD47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsLWR1cGxleDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdXNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH07CisgICAgICAgIH07Cit9OworCismaG5hdCB7CisJbXRrZXRoLXdhbiA9ICJldGgxIjsKKwltdGtldGgtbGFuID0gImxhbiI7CisJbXRrZXRoLW1heC1nbWFjID0gPDI+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZzcGkwIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc3BpMF9mbGFzaF9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7CisJc3BpX25hbmQ6IHNwaV9uYW5kQDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAic3BpLW5hbmQiOworCQlyZWcgPSA8MD47CisJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDUyMDAwMDAwPjsKKwkJc3BpLXR4LWJ1c3dpZHRoID0gPDQ+OworCQlzcGktcngtYnVzd2lkdGggPSA8ND47CisJfTsKK307CisKKyZzcGkxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc3BpY19waW5zPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwlwcm9zbGljX3NwaTogcHJvc2xpY19zcGlAMCB7CisJCWNvbXBhdGlibGUgPSAic2lsYWJzLHByb3NsaWNfc3BpIjsKKwkJcmVnID0gPDA+OworCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDwxMDAwMDAwMD47CisJCXNwaS1jcGhhID0gPDE+OworCQlzcGktY3BvbCA9IDwxPjsKKwkJY2hhbm5lbF9jb3VudCA9IDwxPjsKKwkJZGVidWdfbGV2ZWwgPSA8ND47ICAgICAgIC8qIDEgPSBUUkMsIDIgPSBEQkcsIDQgPSBFUlIgKi8KKwkJcmVzZXRfZ3BpbyA9IDwmcGlvIDE1IDA+OworCQlpZyxlbmFibGUtc3BpID0gPDE+OyAgICAgLyogMTogRW5hYmxlLCAwOiBEaXNhYmxlICovCisJfTsKK307CisKKyZwaW8geworCisJaTJjX3BpbnM6IGkyYy1waW5zLWcwIHsKKyAgICAgICAgICAgICAgICBtdXggeworICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSAiaTJjIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwcyA9ICJpMmMwXzAiOworICAgICAgICAgICAgICAgIH07CisgICAgICAgIH07CisKKyAgICAgICAgcGNtX3BpbnM6IHBjbS1waW5zLWcwIHsKKyAgICAgICAgICAgICAgICBtdXggeworICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSAicGNtIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwcyA9ICJwY20iOworICAgICAgICAgICAgICAgIH07CisgICAgICAgIH07CisKKyAgICAgICAgcHdtMF9waW46IHB3bTAtcGluLWcwIHsKKyAgICAgICAgICAgICAgICBtdXggeworICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSAicHdtIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwcyA9ICJwd20wXzAiOworICAgICAgICAgICAgICAgIH07CisgICAgICAgIH07CisKKyAgICAgICAgcHdtMV9waW46IHB3bTEtcGluLWcwIHsKKyAgICAgICAgICAgICAgICBtdXggeworICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSAicHdtIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwcyA9ICJwd20xXzAiOworICAgICAgICAgICAgICAgIH07CisgICAgICAgIH07CisKKyAgICAgICAgcHdtMl9waW46IHB3bTItcGluIHsKKyAgICAgICAgICAgICAgICBtdXggeworICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSAicHdtIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwcyA9ICJwd20yIjsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICB9OworCisJc3BpMF9mbGFzaF9waW5zOiBzcGkwLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAic3BpIjsKKwkJCWdyb3VwcyA9ICJzcGkwIiwgInNwaTBfd3BfaG9sZCI7CisJCX07CisKKwkJY29uZi1wdSB7CisJCQlwaW5zID0gIlNQSTBfQ1MiLCAiU1BJMF9IT0xEIiwgIlNQSTBfV1AiOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzhtQT47CisJCQliaWFzLXB1bGwtZG93biA9IDxNVEtfUFVQRF9TRVRfUjFSMF8wMD47CisJCX07CisKKwkJY29uZi1wZCB7CisJCQlwaW5zID0gIlNQSTBfQ0xLIiwgIlNQSTBfTU9TSSIsICJTUEkwX01JU08iOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzhtQT47CisJCQliaWFzLXB1bGwtZG93biA9IDxNVEtfUFVQRF9TRVRfUjFSMF8wMD47CisJCX07CisJfTsKKworCXNwaWNfcGluczogc3BpMS1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInNwaSI7CisJCQlncm91cHMgPSAic3BpMV8xIjsKKwkJfTsKKwl9OworCisJdWFydDFfcGluczogdWFydDEtcGlucy1nMSB7CisgICAgICAgICAgICAgICAgbXV4IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uID0gInVhcnQiOworICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzID0gInVhcnQxXzEiOworICAgICAgICAgICAgICAgIH07CisgICAgICAgIH07CisKKwl1YXJ0Ml9waW5zOiB1YXJ0Mi1waW5zLWcxIHsKKwkJbXV4IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uID0gInVhcnQiOworICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzID0gInVhcnQyXzEiOworICAgICAgICAgICAgICAgIH07CisgICAgICAgIH07Cit9OworCismeGhjaSB7CisJbWVkaWF0ZWssdTNwLWRpcy1tc2sgPSA8MHgwPjsKKwlwaHlzID0gPCZ1MnBvcnQwIFBIWV9UWVBFX1VTQjI+LAorCSAgICAgICA8JnUzcG9ydDAgUEhZX1RZUEVfVVNCMz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODEtc3BpbS1ub3ItcmZiLmR0cyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODEtc3BpbS1ub3ItcmZiLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZTAzODJkCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4MS1zcGltLW5vci1yZmIuZHRzCkBAIC0wLDAgKzEsMTkyIEBACisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDc5ODEuZHRzaSIKKy8geworCW1vZGVsID0gIk1lZGlhVGVrIE1UNzk4MSBSRkIiOworCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTgxLXNwaW0tbm9yLXJmYiI7CisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDBuMSBsb2dsZXZlbD04ICBcCisJCQkJZWFybHljb249dWFydDgyNTAsbW1pbzMyLDB4MTEwMDIwMDAiOworCX07CisKKwltZW1vcnkgeworCQkvLyBmcGdhIGRkcjI6IDEyOE1CKjIKKwkJcmVnID0gPDAgMHg0MDAwMDAwMCAwIDB4MTAwMDAwMDA+OworCX07Cit9OworCismdWFydDAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ3YXRjaGRvZyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmV0aCB7CisgICAgICAgIHN0YXR1cyA9ICJva2F5IjsKKworICAgICAgICBnbWFjMDogbWFjQDAgeworICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAibWVkaWF0ZWssZXRoLW1hYyI7CisgICAgICAgICAgICAgICAgcmVnID0gPDA+OworICAgICAgICAgICAgICAgIHBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisgICAgICAgICAgICAgICAgZml4ZWQtbGluayB7CisgICAgICAgICAgICAgICAgICAgICAgICBzcGVlZCA9IDwyNTAwPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGwtZHVwbGV4OworICAgICAgICAgICAgICAgICAgICAgICAgcGF1c2U7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgfTsKKworCWdtYWMxOiBtYWNAMSB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssZXRoLW1hYyI7CisJCXJlZyA9IDwxPjsKKwkJcGh5LW1vZGUgPSAiZ21paSI7CisJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCX07CisKKyAgICAgICAgbWRpbzogbWRpby1idXMgeworICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gPDE+OworICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gPDA+OworCisJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZXRoZXJuZXQtcGh5LWlkMDNhMi45NDYxIjsKKwkJCXJlZyA9IDwwPjsKKwkJCXBoeS1tb2RlID0gImdtaWkiOworCQkJbnZtZW0tY2VsbHMgPSA8JnBoeV9jYWxpYnJhdGlvbj47CisJCQludm1lbS1jZWxsLW5hbWVzID0gInBoeS1jYWwtZGF0YSI7CisJCX07CisKKwkJc3dpdGNoQDAgeworICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc1MzEiOworICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDMxPjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0LWdwaW9zID0gPCZwaW8gMzkgMD47CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRzIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSA8MT47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gPDA+OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRAMCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDA+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gImxhbjEiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRAMSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDE+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gImxhbjIiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRAMiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDI+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gImxhbjMiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRAMyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDM+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gImxhbjQiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRANiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDY+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gImNwdSI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJuZXQgPSA8JmdtYWMwPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkLWxpbmsgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlZWQgPSA8MjUwMD47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsLWR1cGxleDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdXNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH07CisgICAgICAgIH07Cit9OworCismaG5hdCB7CisJbXRrZXRoLXdhbiA9ICJldGgxIjsKKwltdGtldGgtbGFuID0gImxhbiI7CisJbXRrZXRoLW1heC1nbWFjID0gPDI+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZzcGkxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc3BpY19waW5zPjsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworJnNwaTIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzcGkyX2ZsYXNoX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKKwlzcGlfbm9yQDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiamVkZWMsc3BpLW5vciI7CisJCXJlZyA9IDwwPjsKKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8NTIwMDAwMDA+OworCQlzcGktdHgtYnVzd2lkdGggPSA8ND47CisJCXNwaS1yeC1idXN3aWR0aCA9IDw0PjsKKworCQlwYXJ0aXRpb25AMDAwMDAgeworCQkJbGFiZWwgPSAiQkwyIjsKKwkJCXJlZyA9IDwweDAwMDAwIDB4MDA0MDAwMD47CisJCX07CisJCXBhcnRpdGlvbkA0MDAwMCB7CisJCQlsYWJlbCA9ICJ1LWJvb3QtZW52IjsKKwkJCXJlZyA9IDwweDQwMDAwIDB4MDAxMDAwMD47CisJCX07CisJCXBhcnRpdGlvbkA1MDAwMCB7CisJCQlsYWJlbCA9ICJGYWN0b3J5IjsKKwkJCXJlZyA9IDwweDUwMDAwIDB4MDBCMDAwMD47CisJCX07CisJCXBhcnRpdGlvbkAxMDAwMDAgeworCQkJbGFiZWwgPSAiRklQIjsKKwkJCXJlZyA9IDwweDEwMDAwMCAweDAwODAwMDA+OworCQl9OworCQlwYXJ0aXRpb25AMTgwMDAwIHsKKwkJCWxhYmVsID0gImZpcm13YXJlIjsKKwkJCXJlZyA9IDwweDE4MDAwMCAweEUwMDAwMD47CisJCX07CisJfTsKK307CisKKyZwaW8geworCXNwaWNfcGluczogc3BpMS1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInNwaSI7CisJCQlncm91cHMgPSAic3BpMV8xIjsKKwkJfTsKKwl9OworCisJc3BpMl9mbGFzaF9waW5zOiBzcGkyLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAic3BpIjsKKwkJCWdyb3VwcyA9ICJzcGkyIiwgInNwaTJfd3BfaG9sZCI7CisJCX07CisKKwkJY29uZi1wdSB7CisJCQlwaW5zID0gIlNQSTJfQ1MiLCAiU1BJMl9IT0xEIiwgIlNQSTJfV1AiOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzhtQT47CisJCQliaWFzLXB1bGwtZG93biA9IDxNVEtfUFVQRF9TRVRfUjFSMF8wMD47CisJCX07CisKKwkJY29uZi1wZCB7CisJCQlwaW5zID0gIlNQSTJfQ0xLIiwgIlNQSTJfTU9TSSIsICJTUEkyX01JU08iOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzhtQT47CisJCQliaWFzLXB1bGwtZG93biA9IDxNVEtfUFVQRF9TRVRfUjFSMF8wMD47CisJCX07CisJfTsKK307CisKKyZ4aGNpIHsgIAorICAgICAgICBzdGF0dXMgPSAib2theSI7Cit9OworCismd2VkIHsKKwlkeV90eGJtX2VuYWJsZSA9ICJ0cnVlIjsKKwlkeV90eGJtX2J1ZGdldCA9IDw4PjsKKwl0eGJtX2luaXRfc3ogPSA8OD47CisJdHhibV9tYXhfc3ogPSA8MzI+OworCXN0YXR1cyA9ICJva2F5IjsKK307CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTgxLmR0c2kgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTgxLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM3NGYyZQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODEuZHRzaQpAQCAtMCwwICsxLDY3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAyMCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IFNhbS5TaGloIDxzYW0uc2hpaEBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9hcm0tZ2ljLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvcGh5L3BoeS5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3Jlc2V0L3RpLXN5c2Nvbi5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2Nsb2NrL210Nzk4MS1jbGsuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9waW5jdHJsL210NjV4eC5oPgorLyB7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODEtcmZiIjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCSNzaXplLWNlbGxzID0gPDI+OworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCWNwdUAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTUzIjsKKwkJCWVuYWJsZS1tZXRob2QgPSAicHNjaSI7CisJCQlyZWcgPSA8MHgwPjsKKwkJfTsKKworCQljcHVAMSB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE1MyI7CisJCQllbmFibGUtbWV0aG9kID0gInBzY2kiOworCQkJcmVnID0gPDB4MT47CisJCX07CisJfTsKKworCXB3bTogcHdtQDEwMDQ4MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODEtcHdtIjsKKwkJcmVnID0gPDAgMHgxMDA0ODAwMCAwIDB4MTAwMD47CisJCSNwd20tY2VsbHMgPSA8Mj47CisJCWNsb2NrcyA9IDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfUFdNX1NUQT4sCisJCQkgPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9QV01fSENLPiwKKwkJCSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX1BXTTFfQ0s+LAorCQkJIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfUFdNMl9DSz4sCisJCQkgPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9QV00zX0NLPjsKKwkJY2xvY2stbmFtZXMgPSAidG9wIiwgIm1haW4iLCAicHdtMSIsICJwd20yIiwgInB3bTMiOworCX07CisKKwl0aGVybWFsLXpvbmVzIHsKKwkJY3B1X3RoZXJtYWw6IGNwdS10aGVybWFsIHsKKwkJCXBvbGxpbmctZGVsYXktcGFzc2l2ZSA9IDwxMDAwPjsKKwkJCXBvbGxpbmctZGVsYXkgPSA8MTAwMD47CisJCQl0aGVybWFsLXNlbnNvcnMgPSA8JnRoZXJtYWwgMD47CisJCX07CisJfTsKKworCXRoZXJtYWw6IHRoZXJtYWxAMTEwMGM4MDAgeworCQkjdGhlcm1hbC1zZW5zb3ItY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTgxLXRoZXJtYWwiOworCQlyZWcgPSA8MCAweDExMDBjODAwIDAgMHg4MDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTM4IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX1RIRVJNX0NLPiwKKwkJCSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX0FEQ18yNk1fQ0s+LAorCQkJIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfQURDX0ZSQ19DSz47CisJCWNsb2NrLW5hbWVzID0gInRoZXJtIiwgImF1eGFkYyIsICJhZGNfMzJrIjsKKwkJbWVkaWF0ZWssYXV4YWRjID0gPCZhdXhhZGM+OworCQltZWRpYXRlayxhcG1peGVkc3lzID0gPCZhcG1peGVkc3lzPjsKKwkJbnZtZW0tY2VsbHMgPSA8JnRoZXJtYWxfY2FsaWJyYXRpb24+OworCQludm1lbS1jZWxsLW5hbWVzID0gImNhbGlicmF0aW9uLWRhdGEiOworCX07CisKKwlhdXhhZGM6IGFkY0AxMTAwZDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTgxLWF1eGFkYyIsCisJCQkgICAgICJtZWRpYXRlayxtdDc2MjItYXV4YWRjIjsKKwkJcmVnID0gPDAgMHgxMTAwZDAwMCAwIDB4MTAwMD47CisJCWNsb2NrcyA9IDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfQURDXzI2TV9DSz4sCisJCQkgPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9BRENfRlJDX0NLPjsKKwkJY2xvY2stbmFtZXMgPSAibWFpbiIsICIzMmsiOworCQkjaW8tY2hhbm5lbC1jZWxscyA9IDwxPjsKKwl9OworCisJd2VkOiB3ZWRAMTUwMTAwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLHdlZCI7CisJCXdlZF9udW0gPSA8Mj47CisJCS8qIGFkZCB0aGlzIHByb3BlcnR5IGZvciB3ZWQgZ2V0IHRoZSBwY2kgc2xvdCBudW1iZXIuICovCisJCXBjaV9zbG90X21hcCA9IDwwPiwgPDE+OworCQlyZWcgPSA8MCAweDE1MDEwMDAwIDAgMHgxMDAwPiwKKwkJICAgICAgPDAgMHgxNTAxMTAwMCAwIDB4MTAwMD47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyMDUgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDxHSUNfU1BJIDIwNiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwl9OworCisJd2RtYTogd2RtYUAxNTEwNDgwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssd2VkLXdkbWEiOworCQlyZWcgPSA8MCAweDE1MTA0ODAwIDAgMHg0MDA+LAorCQkgICAgICA8MCAweDE1MTA0YzAwIDAgMHg0MDA+OworCX07CisKKwlhcDJ3b2NjaWY6IGFwMndvY2NpZkAxNTFBNTAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssYXAyd29jY2lmIjsKKwkJcmVnID0gPDAgMHgxNTFBNTAwMCAwIDB4MTAwMD4sCisJCSAgICAgIDwwIDB4MTUxQUQwMDAgMCAweDEwMDA+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjExIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8R0lDX1NQSSAyMTIgSVJRX1RZUEVfTEVWRUxfSElHSD47CisgICAgICAgIH07CisKKwl3b2NwdTBfaWxtOiB3b2NwdTBfaWxtQDE1MUUwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayx3b2NwdTBfaWxtIjsKKwkJcmVnID0gPDAgMHgxNTFFMDAwMCAwIDB4ODAwMD47CisJfTsKKworCXdvY3B1X2RsbTogd29jcHVfZGxtQDE1MUU4MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayx3b2NwdV9kbG0iOworCQlyZWcgPSA8MCAweDE1MUU4MDAwIDAgMHgyMDAwPiwKKwkJICAgICAgPDAgMHgxNTFGODAwMCAwIDB4MjAwMD47CisKKwkJcmVzZXRzID0gPCZldGhzeXNyc3QgMD47CisJCXJlc2V0LW5hbWVzID0gIndvY3B1X3JzdCI7CisJfTsKKworCWNwdV9ib290OiB3b2NwdV9ib290QDE1MTk0MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayx3b2NwdV9ib290IjsKKwkJcmVnID0gPDAgMHgxNTE5NDAwMCAwIDB4MTAwMD47CisJfTsKKworCXJlc2VydmVkLW1lbW9yeSB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJcmFuZ2VzOworCisJCS8qIDE5MiBLaUIgcmVzZXJ2ZWQgZm9yIEFSTSBUcnVzdGVkIEZpcm13YXJlIChCTDMxKSAqLworCQlzZWNtb25fcmVzZXJ2ZWQ6IHNlY21vbkA0MzAwMDAwMCB7CisJCQlyZWcgPSA8MCAweDQzMDAwMDAwIDAgMHgzMDAwMD47CisJCQluby1tYXA7CisJCX07CisKKwkJd21jcHVfZW1pOiB3bWNwdS1yZXNlcnZlZEA0N0M4MDAwMCB7CisJCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLHdtY3B1LXJlc2VydmVkIjsKKwkJCW5vLW1hcDsKKwkJCXJlZyA9IDwwIDB4NDdDODAwMDAgMCAweDAwMTAwMDAwPjsKKwkJfTsKKworCQl3b2NwdTBfZW1pOiB3b2NwdTBfZW1pQDQ3RDgwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssd29jcHUwX2VtaSI7CisJCQluby1tYXA7CisJCQlyZWcgPSA8MCAweDQ3RDgwMDAwIDAgMHg0MDAwMD47CisJCQlzaGFyZWQgPSA8MD47CisJCX07CisKKwkJd29jcHVfZGF0YTogd29jcHVfZGF0YUA0N0RDMDAwMCB7CisJCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLHdvY3B1X2RhdGEiOworCQkJbm8tbWFwOworCQkJcmVnID0gPDAgMHg0N0RDMDAwMCAwIDB4MjQwMDAwPjsKKwkJCXNoYXJlZCA9IDwxPjsKKwkJfTsKKwl9OworCisJcHNjaSB7CisJCWNvbXBhdGlibGUgID0gImFybSxwc2NpLTAuMiI7CisJCW1ldGhvZCAgICAgID0gInNtYyI7CisJfTsKKworCWNsazQwbTogb3NjaWxsYXRvckAwIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMDAwPjsKKwkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsa3h0YWwiOworCX07CisKKwlpbmZyYWNmZ19hbzogaW5mcmFjZmdfYW9AMTAwMDEwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4MS1pbmZyYWNmZ19hbyIsICJzeXNjb24iOworCQlyZWcgPSA8MCAweDEwMDAxMDAwIDAgMHg2OD47CisJCSNjbG9jay1jZWxscyA9IDwxPjsKKwl9OworCisJaW5mcmFjZmc6IGluZnJhY2ZnQDEwMDAxMDQwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODEtaW5mcmFjZmciLCAic3lzY29uIjsKKwkJcmVnID0gPDAgMHgxMDAwMTA2OCAwIDB4MTAwMD47CisJCSNjbG9jay1jZWxscyA9IDwxPjsKKwl9OworCisJdG9wY2tnZW46IHRvcGNrZ2VuQDEwMDFCMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODEtdG9wY2tnZW4iLCAic3lzY29uIjsKKwkJcmVnID0gPDAgMHgxMDAxQjAwMCAwIDB4MTAwMD47CisJCSNjbG9jay1jZWxscyA9IDwxPjsKKwl9OworCisJYXBtaXhlZHN5czogYXBtaXhlZHN5c0AxMDAxRTAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTgxLWFwbWl4ZWRzeXMiLCAic3lzY29uIjsKKwkJcmVnID0gPDAgMHgxMDAxRTAwMCAwIDB4MTAwMD47CisJCSNjbG9jay1jZWxscyA9IDwxPjsKKwl9OworCisJc3lzdGVtX2NsazogZHVtbXlfc3lzdGVtX2NsayB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwMDA+OworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJfTsKKworCWdwdF9jbGs6IGR1bW15X2dwdF9jbGsgeworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDIwMDAwMDAwPjsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCX07CisKKwl0aW1lciB7CisJCWNvbXBhdGlibGUgPSAiYXJtLGFybXY4LXRpbWVyIjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEzMDAwMDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfUFBJIDEzIElSUV9UWVBFX0xFVkVMX0xPVz4sCisJCQkgICAgIDxHSUNfUFBJIDE0IElSUV9UWVBFX0xFVkVMX0xPVz4sCisJCQkgICAgIDxHSUNfUFBJIDExIElSUV9UWVBFX0xFVkVMX0xPVz4sCisJCQkgICAgIDxHSUNfUFBJIDEwIElSUV9UWVBFX0xFVkVMX0xPVz47CisKKwl9OworCisJd2F0Y2hkb2c6IHdhdGNoZG9nQDEwMDFjMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc2MjItd2R0IiwKKwkJCSAgICAgIm1lZGlhdGVrLG10NjU4OS13ZHQiOworCQlyZWcgPSA8MCAweDEwMDFjMDAwIDAgMHgxMDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDExMCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJI3Jlc2V0LWNlbGxzID0gPDE+OworCX07CisKKwlnaWM6IGludGVycnVwdC1jb250cm9sbGVyQGMwMDAwMDAgeworCQljb21wYXRpYmxlID0gImFybSxnaWMtdjMiOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJcmVnID0gPDAgMHgwYzAwMDAwMCAwIDB4NDAwMDA+LCAgLyogR0lDRCAqLworCQkgICAgICA8MCAweDBjMDgwMDAwIDAgMHgyMDAwMDA+OyAvKiBHSUNSICovCisKKwkJaW50ZXJydXB0cyA9IDxHSUNfUFBJIDkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJfTsKKworCXRybmc6IHRybmdAMTAyMGYwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4MS1ybmciOworCX07CisKKwl1YXJ0MDogc2VyaWFsQDExMDAyMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDY1NzctdWFydCI7CisJCXJlZyA9IDwwIDB4MTEwMDIwMDAgMCAweDQwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMjMgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfVUFSVDBfQ0s+OworCQlhc3NpZ25lZC1jbG9ja3MgPSA8JnRvcGNrZ2VuIENLX1RPUF9VQVJUX1NFTD4sCisJCQkJICA8JmluZnJhY2ZnX2FvIENLX0lORlJBX1VBUlQwX1NFTD47CisJCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JnRvcGNrZ2VuIENLX1RPUF9DQl9DS1NRXzQwTT4sCisJCQkJCSA8JmluZnJhY2ZnIENLX0lORlJBX1VBUlQ+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwl1YXJ0MTogc2VyaWFsQDExMDAzMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDY1NzctdWFydCI7CisJCXJlZyA9IDwwIDB4MTEwMDMwMDAgMCAweDQwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMjQgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfVUFSVDFfQ0s+OworCQlhc3NpZ25lZC1jbG9ja3MgPSA8JnRvcGNrZ2VuIENLX1RPUF9VQVJUX1NFTD4sCisJCQkJICA8JmluZnJhY2ZnX2FvIENLX0lORlJBX1VBUlQxX1NFTD47CisJCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JnRvcGNrZ2VuIENLX1RPUF9DQl9DS1NRXzQwTT4sCisJCQkJCSA8JmluZnJhY2ZnIENLX0lORlJBX1VBUlQ+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwl1YXJ0Mjogc2VyaWFsQDExMDA0MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDY1NzctdWFydCI7CisJCXJlZyA9IDwwIDB4MTEwMDQwMDAgMCAweDQwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMjUgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfVUFSVDJfQ0s+OworCQlhc3NpZ25lZC1jbG9ja3MgPSA8JnRvcGNrZ2VuIENLX1RPUF9VQVJUX1NFTD4sCisJCQkJICA8JmluZnJhY2ZnX2FvIENLX0lORlJBX1VBUlQyX1NFTD47CisJCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JnRvcGNrZ2VuIENLX1RPUF9DQl9DS1NRXzQwTT4sCisJCQkJCSA8JmluZnJhY2ZnIENLX0lORlJBX1VBUlQ+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwlpMmMwOiBpMmNAMTEwMDcwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4MS1pMmMiOworCQlyZWcgPSA8MCAweDExMDA3MDAwIDAgMHgxMDAwPiwKKwkJICAgICAgPDAgMHgxMDIxNzA4MCAwIDB4ODA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTM2IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9jay1kaXYgPSA8MT47CisJCWNsb2NrcyA9IDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfSTJDT19DSz4sCisJCQkgPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9BUF9ETUFfQ0s+OworCQljbG9jay1uYW1lcyA9ICJtYWluIiwgImRtYSI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJcGNpZTogcGNpZUAxMTI4MDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTgxLXBjaWUiLAorCQkJICAgICAibWVkaWF0ZWssbXQ3OTg2LXBjaWUiOworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQlyZWcgPSA8MCAweDExMjgwMDAwIDAgMHg0MDAwPjsKKwkJcmVnLW5hbWVzID0gInBjaWUtbWFjIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTY4IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQlidXMtcmFuZ2UgPSA8MHgwMCAweGZmPjsKKwkJcmFuZ2VzID0gPDB4ODIwMDAwMDAgMCAweDIwMDAwMDAwCisJCQkgIDB4MCAweDIwMDAwMDAwIDAgMHgxMDAwMDAwMD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisKKwkJY2xvY2tzID0gPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9JUENJRV9DSz4sCisJCQkgPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9JUENJRV9QSVBFX0NLPiwKKwkJCSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX0lQQ0lFUl9DSz4sCisJCQkgPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9JUENJRUJfQ0s+OworCisJCXBoeXMgPSA8JnUzcG9ydDAgUEhZX1RZUEVfUENJRT47CisJCXBoeS1uYW1lcyA9ICJwY2llLXBoeSI7CisKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDAgMCAwIDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPDAgMCAwIDEgJnBjaWVfaW50YyAwPiwKKwkJCQk8MCAwIDAgMiAmcGNpZV9pbnRjIDE+LAorCQkJCTwwIDAgMCAzICZwY2llX2ludGMgMj4sCisJCQkJPDAgMCAwIDQgJnBjaWVfaW50YyAzPjsKKwkJcGNpZV9pbnRjOiBpbnRlcnJ1cHQtY29udHJvbGxlciB7CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJfTsKKwl9OworCisJY3J5cHRvOiBjcnlwdG9AMTAzMjAwMDAgeworCQljb21wYXRpYmxlID0gImluc2lkZS1zZWN1cmUsc2FmZXhjZWwtZWlwOTciOworCQlyZWcgPSA8MCAweDEwMzIwMDAwIDAgMHg0MDAwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMTYgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDxHSUNfU1BJIDExNyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPEdJQ19TUEkgMTE4IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8R0lDX1NQSSAxMTkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWludGVycnVwdC1uYW1lcyA9ICJyaW5nMCIsICJyaW5nMSIsICJyaW5nMiIsICJyaW5nMyI7CisJCWNsb2NrcyA9IDwmdG9wY2tnZW4gQ0tfVE9QX0VJUDk3Qj47CisJCWNsb2NrLW5hbWVzID0gInRvcF9laXA5N19jayI7CisJCWFzc2lnbmVkLWNsb2NrcyA9IDwmdG9wY2tnZW4gQ0tfVE9QX0VJUDk3Ql9TRUw+OworCQlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZ0b3Bja2dlbiBDS19UT1BfQ0JfTkVUMV9ENT47CisJfTsKKworCXBpbzogcGluY3RybEAxMWQwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTgxLXBpbmN0cmwiOworCQlyZWcgPSA8MCAweDExZDAwMDAwIDAgMHgxMDAwPiwKKwkJICAgICAgPDAgMHgxMWMwMDAwMCAwIDB4MTAwMD4sCisJCSAgICAgIDwwIDB4MTFjMTAwMDAgMCAweDEwMDA+LAorCQkgICAgICA8MCAweDExZDIwMDAwIDAgMHgxMDAwPiwKKwkJICAgICAgPDAgMHgxMWUwMDAwMCAwIDB4MTAwMD4sCisJCSAgICAgIDwwIDB4MTFlMjAwMDAgMCAweDEwMDA+LAorCQkgICAgICA8MCAweDExZjAwMDAwIDAgMHgxMDAwPiwKKwkJICAgICAgPDAgMHgxMWYxMDAwMCAwIDB4MTAwMD4sCisJCSAgICAgIDwwIDB4MTAwMGIwMDAgMCAweDEwMDA+OworCQlyZWctbmFtZXMgPSAiZ3Bpb19iYXNlIiwgImlvY2ZnX3J0X2Jhc2UiLCAiaW9jZmdfcm1fYmFzZSIsCisJCQkgICAgImlvY2ZnX3JiX2Jhc2UiLCAiaW9jZmdfbGJfYmFzZSIsICJpb2NmZ19ibF9iYXNlIiwKKwkJCSAgICAiaW9jZmdfdG1fYmFzZSIsICJpb2NmZ190bF9iYXNlIiwgImVpbnQiOworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCQlncGlvLXJhbmdlcyA9IDwmcGlvIDAgMCA1Nj47CisJCWludGVycnVwdC1jb250cm9sbGVyOworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjI1IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCX07CisKKwlldGhzeXM6IHN5c2NvbkAxNTAwMDAwMCB7CisgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSA8MT47CisgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSA8MT47CisgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODEtZXRoc3lzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN5c2NvbiI7CisgICAgICAgICAgICAgICAgcmVnID0gPDAgMHgxNTAwMDAwMCAwIDB4MTAwMD47CisgICAgICAgICAgICAgICAgI2Nsb2NrLWNlbGxzID0gPDE+OworICAgICAgICAgICAgICAgICNyZXNldC1jZWxscyA9IDwxPjsKKworCQlldGhzeXNyc3Q6IHJlc2V0LWNvbnRyb2xsZXIgeworCQkJY29tcGF0aWJsZSA9ICJ0aSxzeXNjb24tcmVzZXQiOworCQkJI3Jlc2V0LWNlbGxzID0gPDE+OworCQkJdGkscmVzZXQtYml0cyA9IDwweDM0IDQgMHgzNCA0IDB4MzQgNCAoQVNTRVJUX1NFVCB8IERFQVNTRVJUX0NMRUFSIHwgU1RBVFVTX1NFVCk+OworCQl9OworICAgICAgICB9OworCisgICAgICAgIGV0aDogZXRoZXJuZXRAMTUxMDAwMDAgeworICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTgxLWV0aCI7CisgICAgICAgICAgICAgICAgcmVnID0gPDAgMHgxNTEwMDAwMCAwIDB4ODAwMDA+OworICAgICAgICAgICAgICAgIGludGVycnVwdHMgPSA8R0lDX1NQSSAxOTYgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxHSUNfU1BJIDE5NyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEdJQ19TUEkgMTk4IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8R0lDX1NQSSAxOTkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisgICAgICAgICAgICAgICAgY2xvY2tzID0gPCZldGhzeXMgQ0tfRVRIX0ZFX0VOPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICA8JmV0aHN5cyBDS19FVEhfR1AyX0VOPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICA8JmV0aHN5cyBDS19FVEhfR1AxX0VOPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICA8JmV0aHN5cyBDS19FVEhfV09DUFUwX0VOPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICA8JnNnbWlpc3lzMCBDS19TR00wX1RYX0VOPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICA8JnNnbWlpc3lzMCBDS19TR00wX1JYX0VOPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICA8JnNnbWlpc3lzMCBDS19TR00wX0NLMF9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZzZ21paXN5czAgQ0tfU0dNMF9DRFJfQ0swX0VOPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICA8JnNnbWlpc3lzMSBDS19TR00xX1RYX0VOPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICA8JnNnbWlpc3lzMSBDS19TR00xX1JYX0VOPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICA8JnNnbWlpc3lzMSBDS19TR00xX0NLMV9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZzZ21paXN5czEgQ0tfU0dNMV9DRFJfQ0sxX0VOPjsKKwkJY2xvY2stbmFtZXMgPSAiZmUiLCAiZ3AyIiwgImdwMSIsICJ3b2NwdTAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJzZ21paV90eDI1MG0iLCAic2dtaWlfcngyNTBtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2dtaWlfY2RyX3JlZiIsICJzZ21paV9jZHJfZmIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJzZ21paTJfdHgyNTBtIiwgInNnbWlpMl9yeDI1MG0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICJzZ21paTJfY2RyX3JlZiIsICJzZ21paTJfY2RyX2ZiIjsKKyAgICAgICAgICAgICAgICBhc3NpZ25lZC1jbG9ja3MgPSA8JnRvcGNrZ2VuIENLX1RPUF9ORVRTWVNfMlhfU0VMPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8JnRvcGNrZ2VuIENLX1RPUF9TR01fMzI1TV9TRUw+OworICAgICAgICAgICAgICAgIGFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JnRvcGNrZ2VuIENLX1RPUF9DQl9ORVQyXzgwME0+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8JnRvcGNrZ2VuIENLX1RPUF9DQl9TR01fMzI1TT47CisgICAgICAgICAgICAgICAgbWVkaWF0ZWssZXRoc3lzID0gPCZldGhzeXM+OworCQltZWRpYXRlayxzZ21paXN5cyA9IDwmc2dtaWlzeXMwPiwgPCZzZ21paXN5czE+OworCQltZWRpYXRlayxpbmZyYWNmZyA9IDwmdG9wbWlzYz47CisgICAgICAgICAgICAgICAgI3Jlc2V0LWNlbGxzID0gPDE+OworICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gPDE+OworICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gPDA+OworICAgICAgICAgICAgICAgIHN0YXR1cyA9ICJkaXNhYmxlZCI7CisgICAgICAgIH07CisKKwlobmF0OiBobmF0QDE1MDAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdGstaG5hdF92NCI7CisJCXJlZyA9IDwwIDB4MTUxMDAwMDAgMCAweDgwMDAwPjsKKwkJcmVzZXRzID0gPCZldGhzeXMgMD47CisJCXJlc2V0LW5hbWVzID0gIm10a2V0aCI7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXNnbWlpc3lzMDogc3lzY29uQDEwMDYwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODEtc2dtaWlzeXNfMCIsICJzeXNjb24iOworCQlyZWcgPSA8MCAweDEwMDYwMDAwIDAgMHgxMDAwPjsKKwkJcG5fc3dhcDsKKwkJI2Nsb2NrLWNlbGxzID0gPDE+OworCX07CisKKwlzZ21paXN5czE6IHN5c2NvbkAxMDA3MDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTgxLXNnbWlpc3lzXzEiLCAic3lzY29uIjsKKwkJcmVnID0gPDAgMHgxMDA3MDAwMCAwIDB4MTAwMD47CisJCSNjbG9jay1jZWxscyA9IDwxPjsKKwl9OworCisJdG9wbWlzYzogdG9wbWlzY0AxMWQxMDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTgxLXRvcG1pc2MiLCAic3lzY29uIjsKKwkJcmVnID0gPDAgMHgxMWQxMDAwMCAwIDB4MTAwMDA+OworCQkjY2xvY2stY2VsbHMgPSA8MT47CisJfTsKKworCXNuYW5kOiBzbmZpQDExMDA1MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtc25hbmQiOworCQlyZWcgPSA8MCAweDExMDA1MDAwIDAgMHgxMDAwPiwgPDAgMHgxMTAwNjAwMCAwIDB4MTAwMD47CisJCXJlZy1uYW1lcyA9ICJuZmkiLCAiZWNjIjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEyMSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9TUElORkkxX0NLPiwKKwkJCSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX05GSTFfQ0s+LAorCQkJIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfTkZJX0hDS19DSz47CisJCWNsb2NrLW5hbWVzID0gInBhZF9jbGsiLCAibmZpX2NsayIsICJuZmlfaGNsayI7CisJCWFzc2lnbmVkLWNsb2NrcyA9IDwmdG9wY2tnZW4gQ0tfVE9QX1NQSU5GSV9TRUw+LAorCQkJCSAgPCZ0b3Bja2dlbiBDS19UT1BfTkZJMVhfU0VMPjsKKwkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmdG9wY2tnZW4gQ0tfVE9QX0NCX01fRDg+LAorCQkJCQkgPCZ0b3Bja2dlbiBDS19UT1BfQ0JfTV9EOD47CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJbW1jMDogbW1jQDExMjMwMDAwIHsKKyAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni1tbWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVkaWF0ZWssbXQ3OTgxLW1tYyI7CisgICAgICAgICAgICAgICAgICAgcmVnID0gPDAgMHgxMTIzMDAwMCAwIDB4MTAwMD4sIDwwIDB4MTFjMjAwMDAgMCAweDEwMDA+OworICAgICAgICAgICAgICAgICAgIGludGVycnVwdHMgPSA8R0lDX1NQSSAxNDMgSVJRX1RZUEVfTEVWRUxfSElHSD47CisgICAgICAgICAgICAgICAgICAgY2xvY2tzID0gPCZ0b3Bja2dlbiBDS19UT1BfRU1NQ18yMDhNPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCZ0b3Bja2dlbiBDS19UT1BfRU1NQ180MDBNPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9NU0RDX0NLPjsKKyAgICAgICAgICAgICAgICAgICBhc3NpZ25lZC1jbG9ja3MgPSA8JnRvcGNrZ2VuIENLX1RPUF9FTU1DXzIwOE1fU0VMPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCZ0b3Bja2dlbiBDS19UT1BfRU1NQ180MDBNX1NFTD47CisgICAgICAgICAgICAgICAgICAgYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmdG9wY2tnZW4gQ0tfVE9QX0NCX01fRDI+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCZ0b3Bja2dlbiBDS19UT1BfQ0JfTkVUMl9EMj47CisgICAgICAgICAgICAgICAgICAgY2xvY2stbmFtZXMgPSAic291cmNlIiwgImhjbGsiLCAic291cmNlX2NnIjsKKyAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAiZGlzYWJsZWQiOworICAgICAgICB9OworCisJd2JzeXM6IHdic3lzQDE4MDAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayx3YnN5cyI7CisJCXJlZyA9IDwwIDB4MTgwMDAwMDAgMCAgMHgxMDAwMDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDIxMyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkJIDxHSUNfU1BJIDIxNCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkJIDxHSUNfU1BJIDIxNSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCQkJIDxHSUNfU1BJIDIxNiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2hpcF9pZCA9IDwweDc5ODE+OworCX07CisKKwl3ZWRfcGNpZTogd2VkX3BjaWVAMTAwMDMwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLHdlZF9wY2llIjsKKwkJcmVnID0gPDAgMHgxMDAwMzAwMCAwIDB4MTA+OworCX07CisKKwlzcGkwOiBzcGlAMTEwMGEwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGlwbS1zcGktcXVhZCI7CisJCXJlZyA9IDwwIDB4MTEwMGEwMDAgMCAweDEwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNDAgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmdG9wY2tnZW4gQ0tfVE9QX0NCX01fRDI+LAorCQkJIDwmdG9wY2tnZW4gQ0tfVE9QX1NQSV9TRUw+LAorCQkJIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfU1BJMF9DSz4sCisJCQkgPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9TUEkwX0hDS19DSz47CisJCWNsb2NrLW5hbWVzID0gInBhcmVudC1jbGsiLCAic2VsLWNsayIsICJzcGktY2xrIiwgInNwaS1oY2xrIjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJc3BpMTogc3BpQDExMDBiMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxpcG0tc3BpLXNpbmdsZSI7CisJCXJlZyA9IDwwIDB4MTEwMGIwMDAgMCAweDEwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNDEgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmdG9wY2tnZW4gQ0tfVE9QX0NCX01fRDI+LAorCQkJIDwmdG9wY2tnZW4gQ0tfVE9QX1NQSU1fTVNUX1NFTD4sCisJCQkgPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9TUEkxX0NLPiwKKwkJCSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX1NQSTFfSENLX0NLPjsKKwkJY2xvY2stbmFtZXMgPSAicGFyZW50LWNsayIsICJzZWwtY2xrIiwgInNwaS1jbGsiLCAic3BpLWhjbGsiOworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwlzcGkyOiBzcGlAMTEwMDkwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGlwbS1zcGktcXVhZCI7CisJCXJlZyA9IDwwIDB4MTEwMDkwMDAgMCAweDEwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNDIgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmdG9wY2tnZW4gQ0tfVE9QX0NCX01fRDI+LAorCQkJIDwmdG9wY2tnZW4gQ0tfVE9QX1NQSV9TRUw+LAorCQkJIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfU1BJMl9DSz4sCisJCQkgPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9TUEkyX0hDS19DSz47CisJCWNsb2NrLW5hbWVzID0gInBhcmVudC1jbGsiLCAic2VsLWNsayIsICJzcGktY2xrIiwgInNwaS1oY2xrIjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisKKwljb25zeXM6IGNvbnN5c0AxMDAwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTgxLWNvbnN5cyI7CisJCXJlZyA9IDwwIDB4MTAwMDAwMDAgMCAweDg2MDAwMDA+OworCQltZW1vcnktcmVnaW9uID0gPCZ3bWNwdV9lbWk+OworCX07CisKKwl4aGNpOiB4aGNpQDExMjAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYteGhjaSIsCisJCQkgICAgICJtZWRpYXRlayxtdGsteGhjaSI7CisJCXJlZyA9IDwwIDB4MTEyMDAwMDAgMCAweDJlMDA+LAorCQkgICAgICA8MCAweDExMjAzZTAwIDAgMHgwMTAwPjsKKwkJcmVnLW5hbWVzID0gIm1hYyIsICJpcHBjIjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE3MyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJcGh5cyA9IDwmdTJwb3J0MCBQSFlfVFlQRV9VU0IyPjsKKwkJY2xvY2tzID0gPCZzeXN0ZW1fY2xrPiwKKwkJCSA8JnN5c3RlbV9jbGs+LAorCQkJIDwmc3lzdGVtX2Nsaz4sCisJCQkgPCZzeXN0ZW1fY2xrPiwKKwkJCSA8JnN5c3RlbV9jbGs+OworCQljbG9jay1uYW1lcyA9ICJzeXNfY2siLAorCQkJICAgICAgInhoY2lfY2siLAorCQkJICAgICAgInJlZl9jayIsCisJCQkgICAgICAibWN1X2NrIiwKKwkJCSAgICAgICJkbWFfY2siOworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCW1lZGlhdGVrLHUzcC1kaXMtbXNrID0gPDB4MDE+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwl1c2J0cGh5OiB1c2ItcGh5QDExZTEwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYiLAorCQkJICAgICAibWVkaWF0ZWssZ2VuZXJpYy10cGh5LXYyIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQlyYW5nZXM7CisJCXN0YXR1cyA9ICJva2F5IjsKKworCQl1MnBvcnQwOiB1c2ItcGh5QDExZTEwMDAwIHsKKwkJCXJlZyA9IDwwIDB4MTFlMTAwMDAgMCAweDcwMD47CisJCQljbG9ja3MgPSA8JnN5c3RlbV9jbGs+OworCQkJY2xvY2stbmFtZXMgPSAicmVmIjsKKwkJCSNwaHktY2VsbHMgPSA8MT47CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJdTNwb3J0MDogdXNiLXBoeUAxMWUxMDcwMCB7CisJCQlyZWcgPSA8MCAweDExZTEwNzAwIDAgMHg5MDA+OworCQkJY2xvY2tzID0gPCZzeXN0ZW1fY2xrPjsKKwkJCWNsb2NrLW5hbWVzID0gInJlZiI7CisJCQkjcGh5LWNlbGxzID0gPDE+OworCQkJbWVkaWF0ZWssc3lzY29uLXR5cGUgPSA8JnRvcG1pc2MgMHgyMTggMD47CisJCQludm1lbS1jZWxscyA9IDwmY29tYl9pbnRyX3AwPiwKKwkJCSAgICAgIDwmY29tYl9yeF9pbXBfcDA+LAorCQkJICAgICAgPCZjb21iX3R4X2ltcF9wMD47CisJCQludm1lbS1jZWxsLW5hbWVzID0gImludHIiLCAicnhfaW1wIiwgInR4X2ltcCI7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisJfTsKKworICAgICAgICByZWdfM3AzdjogcmVndWxhdG9yLTNwM3YgeworICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworICAgICAgICAgICAgICAgICAgcmVndWxhdG9yLW5hbWUgPSAiZml4ZWQtMy4zViI7CisgICAgICAgICAgICAgICAgICByZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKyAgICAgICAgICAgICAgICAgIHJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworICAgICAgICAgICAgICAgICAgcmVndWxhdG9yLWJvb3Qtb247CisgICAgICAgICAgICAgICAgICByZWd1bGF0b3ItYWx3YXlzLW9uOworICAgICAgICB9OworCisgICAgICAgIGNsa2l0ZzogY2xraXRnIHsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwl9OworCisJZWZ1c2U6IGVmdXNlQDExZjIwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxlZnVzZSI7CisJCXJlZyA9IDwwIDB4MTFmMjAwMDAgMCAweDEwMDA+OworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisKKwkJdGhlcm1hbF9jYWxpYnJhdGlvbjogY2FsaWJAMjc0IHsKKwkJCXJlZyA9IDwweDI3NCAweGM+OworCQl9OworCisJCXBoeV9jYWxpYnJhdGlvbjogY2FsaWJAOGRjIHsKKwkJCXJlZyA9IDwweDhkYyAweDEwPjsKKwkJfTsKKworCQljb21iX3J4X2ltcF9wMDogdXNiMy1yeC1pbXBAOGM4IHsKKwkJCXJlZyA9IDwweDhjOCAxPjsKKwkJCWJpdHMgPSA8MCA1PjsKKwkJfTsKKworCQljb21iX3R4X2ltcF9wMDogdXNiMy10eC1pbXBAOGM4IHsKKwkJCXJlZyA9IDwweDhjOCAyPjsKKwkJCWJpdHMgPSA8NSA1PjsKKwkJfTsKKworCQljb21iX2ludHJfcDA6IHVzYjMtaW50ckA4YzkgeworCQkJcmVnID0gPDB4OGM5IDE+OworCQkJYml0cyA9IDwyIDY+OworCQl9OworCX07CisKKwlhZmU6IGF1ZGlvLWNvbnRyb2xsZXJAMTEyMTAwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzl4eC1hdWRpbyI7CisJCXJlZyA9IDwwIDB4MTEyMTAwMDAgMCAweDkwMDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTA2IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX0FVRF9CVVNfQ0s+LAorCQkJIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfQVVEXzI2TV9DSz4sCisJCQkgPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9BVURfTF9DSz4sCisJCQkgPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9BVURfQVVEX0NLPiwKKwkJCSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX0FVRF9FRzJfQ0s+LAorCQkJIDwmdG9wY2tnZW4gQ0tfVE9QX0FVRF9TRUw+OworCQljbG9jay1uYW1lcyA9ICJhdWRfYnVzX2NrIiwKKwkJCSAgICAgICJhdWRfMjZtX2NrIiwKKwkJCSAgICAgICJhdWRfbF9jayIsCisJCQkgICAgICAiYXVkX2F1ZF9jayIsCisJCQkgICAgICAiYXVkX2VnMl9jayIsCisJCQkgICAgICAiYXVkX3NlbCI7CisJCWFzc2lnbmVkLWNsb2NrcyA9IDwmdG9wY2tnZW4gQ0tfVE9QX0FVRF9TRUw+LAorCQkJCSAgPCZ0b3Bja2dlbiBDS19UT1BfQTFTWVNfU0VMPiwKKwkJCQkgIDwmdG9wY2tnZW4gQ0tfVE9QX0FVRF9MX1NFTD4sCisJCQkJICA8JnRvcGNrZ2VuIENLX1RPUF9BX1RVTkVSX1NFTD47CisJCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JnRvcGNrZ2VuIENLX1RPUF9DQl9BUExMMl8xOTZNPiwKKwkJCQkJIDwmdG9wY2tnZW4gQ0tfVE9QX0FQTEwyX0Q0PiwKKwkJCQkJIDwmdG9wY2tnZW4gQ0tfVE9QX0NCX0FQTEwyXzE5Nk0+LAorCQkJCQkgPCZ0b3Bja2dlbiBDS19UT1BfQVBMTDJfRDQ+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwlpY2U6IGljZV9kZWJ1ZyB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTgxLWljZV9kZWJ1ZyIsCisJCQkgICAibWVkaWF0ZWssbXQyNzAxLWljZV9kZWJ1ZyI7CisJCWNsb2NrcyA9IDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfREJHX0NLPjsKKwkJY2xvY2stbmFtZXMgPSAiaWNlX2RiZyI7CisJfTsKK307CisjaW5jbHVkZSAibXQ3OTgxLWNsa2l0Zy5kdHNpIgpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4Ni1jbGtpdGcuZHRzaSBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODYtY2xraXRnLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBiNTZmMgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODYtY2xraXRnLmR0c2kKQEAgLTAsMCArMSwyNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTggTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBXZW56aGVuLll1IDxXZW56aGVuLll1QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworJmNsa2l0ZyB7CisJYnJpbmctdXAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGNsay1icmluZy11cCI7CisJCWNsb2NrcyA9CisJCQk8JmFwbWl4ZWRzeXMgQ0tfQVBNSVhFRF9BUk1QTEw+LAorCQkJPCZhcG1peGVkc3lzICBDS19BUE1JWEVEX05FVDJQTEw+LAorCQkJPCZhcG1peGVkc3lzICBDS19BUE1JWEVEX01NUExMPiwKKwkJCTwmYXBtaXhlZHN5cyAgQ0tfQVBNSVhFRF9TR01QTEw+LAorCQkJPCZhcG1peGVkc3lzICBDS19BUE1JWEVEX1dFRE1DVVBMTD4sCisJCQk8JmFwbWl4ZWRzeXMgIENLX0FQTUlYRURfTkVUMVBMTD4sCisJCQk8JmFwbWl4ZWRzeXMgIENLX0FQTUlYRURfTVBMTD4sCisJCQk8JmFwbWl4ZWRzeXMgIENLX0FQTUlYRURfQVBMTDI+LAorCQkJPCZpbmZyYWNmZyBDS19JTkZSQV9DS19GMjZNPiwKKwkJCTwmaW5mcmFjZmcgQ0tfSU5GUkFfVUFSVD4sCisJCQk8JmNsazQwbT4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX0kyQz4sCisJCQk8JmNsazQwbT4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX1BXTT4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBXzY2TV9NQ0s+LAorCQkJPCZpbmZyYWNmZyBDS19JTkZSQV9DS19GMzJLPiwKKwkJCTwmY2xrNDBtPiwKKwkJCTwmaW5mcmFjZmcgQ0tfSU5GUkFfUFdNX0JDSz4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX1BXTV9DSzE+LAorCQkJPCZpbmZyYWNmZyBDS19JTkZSQV9QV01fQ0syPiwKKwkJCTwmaW5mcmFjZmcgQ0tfSU5GUkFfMTMzTV9IQ0s+LAorCQkJPCZpbmZyYWNmZyBDS19JTkZSQV9FSVBfQ0s+LAorCQkJPCZpbmZyYWNmZyBDS19JTkZSQV82Nk1fUEhDSz4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX0ZBVURfTF9DSwk+LAorCQkJPCZpbmZyYWNmZyBDS19JTkZSQV9GQVVEX0FVRF9DSz4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX0ZBVURfRUcyX0NLPiwKKwkJCTwmaW5mcmFjZmcgQ0tfSU5GUkFfSTJDU19DSz4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX01VWF9VQVJUMD4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX01VWF9VQVJUMT4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX01VWF9VQVJUMj4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX05GSV9DSz4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX1NQSU5GSV9DSz4sCisJCQk8JmNsazQwbT4sCisJCQk8JmNsazQwbT4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX1JUQ18zMks+LAorCQkJPCZpbmZyYWNmZyBDS19JTkZSQV9GTVNEQ19DSz4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX0ZNU0RDX0hDS19DSz4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX1BFUklfMTMzTT4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBXzEzM01fUEhDSz4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX1VTQl9TWVNfQ0s+LAorCQkJPCZpbmZyYWNmZyBDS19JTkZSQV9VU0JfQ0s+LAorCQkJPCZpbmZyYWNmZyBDS19JTkZSQV9VU0JfWEhDSV9DSz4sCisJCQk8JmNsazQwbT4sCisJCQk8JmluZnJhY2ZnIENLX0lORlJBX0YyNk1fQ0swPiwKKwkJCTwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfVUFSVDBfU0VMPiwKKwkJCTwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfVUFSVDFfU0VMPiwJCisJCQk8JmluZnJhY2ZnX2FvIENLX0lORlJBX1VBUlQyX1NFTD4sCisJCQk8JmNsazQwbT4sCisJCQk8JmNsazQwbT4sCisJCQk8JmluZnJhY2ZnX2FvIENLX0lORlJBX1BXTTFfU0VMPiwKKwkJCTwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfUFdNMl9TRUw+LAorCQkJPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9QV01fQlNFTD4sCisJCQk8JmNsazQwbT4sCisJCQk8JmNsazQwbT4sCisJCQk8JmluZnJhY2ZnX2FvIENLX0lORlJBX1BXTV9IQ0s+LAorCQkJPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9QV01fU1RBPiwKKwkJCTwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfUFdNMV9DSz4sCisJCQk8JmluZnJhY2ZnX2FvIENLX0lORlJBX1BXTTJfQ0s+LAorCQkJPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9DUV9ETUFfQ0s+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9EUkFNQ18yNk1fQ0s+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9BUF9ETUFfQ0s+LAorCQkJPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9TRUpfQ0s+LAorCQkJPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9TRUpfMTNNX0NLPiwKKwkJCTwmY2xrNDBtPiwKKwkJCTwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfSTJDT19DSz4sCisJCQk8JmluZnJhY2ZnX2FvIENLX0lORlJBX1VBUlQwX0NLPiwKKwkJCTwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfVUFSVDFfQ0s+LAorCQkJPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9VQVJUMl9DSz4sCisJCQk8JmNsazQwbT4sCisJCQk8JmNsazQwbT4sCisJCQk8JmNsazQwbT4sCisJCQk8JmNsazQwbT4sCisJCQk8JmNsazQwbT4sCisJCQk8JmNsazQwbT4sCisJCQk8JmNsazQwbT4sCisJCQk8JmluZnJhY2ZnX2FvIENLX0lORlJBX0ZSVENfQ0s+LAorCQkJPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9NU0RDX0NLPiwKKwkJCTwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfTVNEQ19IQ0tfQ0s+LAorCQkJPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9NU0RDXzEzM01fQ0s+LAorCQkJPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9NU0RDXzY2TV9DSz4sCisJCQk8JmNsazQwbT4sCisJCQk8JmNsazQwbT4sCisJCQk8JmluZnJhY2ZnX2FvIENLX0lORlJBX0ZCSVNUMkZQQ19DSz4sCisJCQk8JmluZnJhY2ZnX2FvIENLX0lORlJBX0lVU0JfMTMzX0NLPiwKKwkJCTwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfSVVTQl82Nk1fQ0s+LAorCQkJPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9JVVNCX1NZU19DSz4sCisJCQk8JmluZnJhY2ZnX2FvIENLX0lORlJBX0lVU0JfQ0s+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfQ0JfTV80MTZNPiwKKwkJCTwmY2xrNDBtPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0NCX01fRDQ+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfQ0JfTV9EOD4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9NX0Q4X0QyPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX01fRDNfRDI+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfQ0JfTU1fRDI+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfQ0JfTU1fRDQ+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfQ0JfTU1fRDg+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfTU1fRDhfRDI+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfTU1fRDNfRDg+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfQ0JfVTJfUEhZRF9DSz4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9DQl9BUExMMl8xOTZNPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0FQTEwyX0Q0PiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0NCX05FVDFfRDQ+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfQ0JfTkVUMV9ENT4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9ORVQxX0Q1X0QyPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX05FVDFfRDVfRDQ+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfTkVUMV9EOF9EMj4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9ORVQxX0Q4X0Q0PiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0NCX05FVDJfODAwTT4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9DQl9ORVQyX0Q0PiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX05FVDJfRDRfRDI+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfTkVUMl9EM19EMj4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9DQl9XRURNQ1VfNzYwTT4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9XRURNQ1VfRDVfRDIJPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0NCX1NHTV8zMjVNPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0NCX0NLU1FfNDBNX0QyPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0NCX1JUQ18zMks+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfQ0JfUlRDXzMyUDdLPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX05GSTFYPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX1VTQl9FUV9SWDI1ME0+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfVVNCX1RYMjUwTT4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9VU0JfTE4wX0NLPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX1VTQl9DRFJfQ0s+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfU1BJTkZJX0JDSz4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9JMkNfQkNLPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX1BFWFRQX1RMPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0VNTUNfMjUwTT4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9FTU1DXzQxNk0+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfRl8yNk1fQURDX0NLPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX1NZU0FYST4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9ORVRTWVNfV0VEX01DVT4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9ORVRTWVNfMlg+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfU0dNXzMyNU0+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfQTFTWVM+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfRUlQX0I+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfRjI2TT4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9BVURfTD4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9BX1RVTkVSPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX1UyVTNfUkVGPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX1UyVTNfU1lTPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX1UyVTNfWEhDST4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9BUDJDTk5fSE9TVD4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9ORkkxWF9TRUw+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfU1BJTkZJX1NFTD4sCisJCQk8JmNsazQwbT4sCisJCQk8JmNsazQwbT4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9VQVJUX1NFTD4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9QV01fU0VMPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0kyQ19TRUw+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfUEVYVFBfVExfU0VMPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0VNTUNfMjUwTV9TRUwJPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0VNTUNfNDE2TV9TRUwJPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0ZfMjZNX0FEQ19TRUw+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfRFJBTUNfU0VMPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0RSQU1DX01EMzJfU0VMPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX1NZU0FYSV9TRUw+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfU1lTQVBCX1NFTD4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9BUk1fREJfTUFJTl9TRUw+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfTkVUU1lTX1NFTD4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9ORVRTWVNfNTAwTV9TRUw+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfTkVUU1lTX01DVV9TRUw+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfTkVUU1lTXzJYX1NFTD4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9TR01fMzI1TV9TRUw+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfU0dNX1JFR19TRUw+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfQ09OTl9NQ1VTWVNfU0VMPiwKKwkJCTwmY2xrNDBtPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX1BDSUVfUEhZX1NFTD4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9VU0IzX1BIWV9TRUw+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfRjI2TV9TRUw+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfVTJVM19TRUw+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfVTJVM19TWVNfU0VMPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX1UyVTNfWEhDSV9TRUw+LAorCQkJPCZ0b3Bja2dlbiBDS19UT1BfREFfVTJfUkVGU0VMPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0RBX1UyX0NLXzFQX1NFTD4sCisJCQk8JnRvcGNrZ2VuIENLX1RPUF9BUDJDTk5fSE9TVF9TRUw+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+LAorCQkJPCZjbGs0MG0+OworCisKKwkJY2xvY2stbmFtZXMgPSAiMCIsICIxIiwgIjIiLCAiMyIsICI0IiwgIjUiLCAiNiIsICI3IiwgIjgiLCAiOSIsICIxMCIsICIxMSIsCisJCSIxMiIsICIxMyIsICIxNCIsICIxNSIsICIxNiIsICIxNyIsICIxOCIsICIxOSIsICIyMCIsICIyMSIsICIyMiIsICIyMyIsCisJCSIyNCIsICIyNSIsICIyNiIsICIyNyIsICIyOCIsICIyOSIsICIzMCIsICIzMSIsICIzMiIsICIzMyIsICIzNCIsICIzNSIsCisJCSIzNiIsICIzNyIsICIzOCIsICIzOSIsICI0MCIsICI0MSIsICI0MiIsICI0MyIsICI0NCIsICI0NSIsICI0NiIsICI0NyIsCisJCSI0OCIsICI0OSIsICI1MCIsICI1MSIsICI1MiIsICI1MyIsICI1NCIsICI1NSIsICI1NiIsICI1NyIsICI1OCIsICI1OSIsCisJCSI2MCIsICI2MSIsICI2MiIsICI2MyIsICI2NCIsICI2NSIsICI2NiIsICI2NyIsICI2OCIsICI2OSIsICI3MCIsICI3MSIsCisJCSI3MiIsICI3MyIsICI3NCIsICI3NSIsICI3NiIsICI3NyIsICI3OCIsICI3OSIsICI4MCIsICI4MSIsICI4MiIsICI4MyIsCisJCSI4NCIsICI4NSIsICI4NiIsICI4NyIsICI4OCIsICI4OSIsICI5MCIsICI5MSIsICI5MiIsICI5MyIsICI5NCIsICI5NSIsCisJCSI5NiIsICI5NyIsICI5OCIsICI5OSIsICIxMDAiLCAiMTAxIiwgIjEwMiIsICIxMDMiLCAiMTA0IiwgIjEwNSIsICIxMDYiLCAiMTA3IiwKKwkJIjEwOCIsICIxMDkiLCAiMTEwIiwgIjExMSIsICIxMTIiLCAiMTEzIiwgIjExNCIsICIxMTUiLCAiMTE2IiwgIjExNyIsCisJCSIxMTgiLCAiMTE5IiwgIjEyMCIsICIxMjEiLCAiMTIyIiwgIjEyMyIsCisJCSIxMjQiLCAiMTI1IiwgIjEyNiIsICIxMjciLCAiMTI4IiwgIjEyOSIsICIxMzAiLCAiMTMxIiwgIjEzMiIsICIxMzMiLCAiMTM0IiwgIjEzNSIsCisJCSIxMzYiLCAiMTM3IiwgIjEzOCIsICIxMzkiLCAiMTQwIiwgIjE0MSIsICIxNDIiLCAiMTQzIiwgIjE0NCIsICIxNDUiLCAiMTQ2IiwgIjE0NyIsCisJCSIxNDgiLCAiMTQ5IiwgIjE1MCIsICIxNTEiLCAiMTUyIiwgIjE1MyIsICIxNTQiLCAiMTU1IiwgIjE1NiIsICIxNTciLCAiMTU4IiwgIjE1OSIsCisJCSIxNjAiLCAiMTYxIiwgIjE2MiIsICIxNjMiLCAiMTY0IiwgIjE2NSIsICIxNjYiLCAiMTY3IiwgIjE2OCIsICIxNjkiLCAiMTcwIiwgIjE3MSIsCisJCSIxNzIiLCAiMTczIiwgIjE3NCIsICIxNzUiLCAiMTc2IiwgIjE3NyIsICIxNzgiLCAiMTc5IiwgIjE4MCIsICIxODEiLCAiMTgyIiwgIjE4MyIsCisJCSIxODQiLCAiMTg1IiwgIjE4NiIsICIxODciLCAiMTg4IiwgIjE4OSIsICIxOTAiLCAiMTkxIiwgIjE5MiIsICIxOTMiLCAiMTk0IiwgIjE5NSIsCisJCSIxOTYiLCAiMTk3IiwgIjE5OCIsICIxOTkiLCAiMjAwIiwgIjIwMSIsICIyMDIiLCAiMjAzIiwgIjIwNCIsICIyMDUiLCAiMjA2IiwgIjIwNyIsCisJCSIyMDgiLCAiMjA5IiwgIjIxMCIsICIyMTEiLCAiMjEyIiwgIjIxMyIsICIyMTQiLCAiMjE1IiwgIjIxNiIsICIyMTciLCAiMjE4IiwgIjIxOSIsICIyMjAiLCAiMjIxIjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODYtZnBnYS11YmkuZHRzIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4Ni1mcGdhLXViaS5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYwNDkxOAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODYtZnBnYS11YmkuZHRzCkBAIC0wLDAgKzEsMTYzIEBACisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDc5ODYtZnBnYS5kdHNpIgorLyB7CisJbW9kZWwgPSAiTWVkaWFUZWsgTVQ3OTg2IEZQR0EgKFVCSSkiOworCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LWZwZ2EsdWJpIjsKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG4xIGxvZ2xldmVsPTggIFwKKwkJCQllYXJseWNvbj11YXJ0ODI1MCxtbWlvMzIsMHgxMTAwMjAwMCI7CisJfTsKKworCW1lbW9yeSB7CisJCS8vIGZwZ2EgZGRyMjogMTI4TUIqMgorCQlyZWcgPSA8MCAweDQwMDAwMDAwIDAgMHgxMDAwMDAwMD47CisJfTsKK307CisKKyZ1YXJ0MCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnNwaTAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzcGlfZmxhc2hfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworCXNwaV9ub3JAMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJqZWRlYyxzcGktbm9yIjsKKwkJcmVnID0gPDA+OworCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDw1MDAwMDA+OworCisJCXBhcnRpdGlvbkAwMDAwMCB7CisJCQlsYWJlbCA9ICJCTDIiOworCQkJcmVnID0gPDB4MDAwMDAgMHgwMDYwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDYwMDAwIHsKKwkJCWxhYmVsID0gInUtYm9vdC1lbnYiOworCQkJcmVnID0gPDB4NjAwMDAgMHgwMDEwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDcwMDAwIHsKKwkJCWxhYmVsID0gIkZhY3RvcnkiOworCQkJcmVnID0gPDB4NzAwMDAgMHgwMEIwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDEyMDAwMCB7CisJCQlsYWJlbCA9ICJCTDMxIjsKKwkJCXJlZyA9IDwweDEyMDAwMCAweDAwMTAwMDA+OworCQl9OworCQlwYXJ0aXRpb25AMTMwMDAwIHsKKwkJCWxhYmVsID0gInUtYm9vdCI7CisJCQlyZWcgPSA8MHgxMzAwMDAgMHgwMEQwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDIwMDAwMCB7CisJCQlsYWJlbCA9ICJmaXJtd2FyZSI7CisJCQlyZWcgPSA8MHgyMDAwMDAgMHhFMDAwMDA+OworCQl9OworCX07CisJc3BpX25hbmRAMSB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJzcGktbmFuZCI7CisJCXJlZyA9IDwxPjsKKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8NTAwMDAwPjsKKworCQlwYXJ0aXRpb25AMDAwMDAgeworCQkJbGFiZWwgPSAiQkwyIjsKKwkJCXJlZyA9IDwweDAwMDAwIDB4MDEwMDAwMD47CisJCX07CisJCXBhcnRpdGlvbkAxMDAwMDAgeworCQkJbGFiZWwgPSAidS1ib290LWVudiI7CisJCQlyZWcgPSA8MHgxMDAwMDAgMHgwMDgwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDE4MDAwMCB7CisJCQlsYWJlbCA9ICJGYWN0b3J5IjsKKwkJCXJlZyA9IDwweDE4MDAwMCAweDAwMjAwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDM4MDAwMCB7CisJCQlsYWJlbCA9ICJCTDMxIjsKKwkJCXJlZyA9IDwweDM4MDAwMCAweDAwODAwMDA+OworCQl9OworCQlwYXJ0aXRpb25ANDAwMDAwIHsKKwkJCWxhYmVsID0gInUtYm9vdCI7CisJCQlyZWcgPSA8MHg0MDAwMDAgMHgwMTgwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDU4MDAwMCB7CisJCQlsYWJlbCA9ICJmaXJtd2FyZSI7CisJCQlyZWcgPSA8MHg1ODAwMDAgMHg3YTgwMDAwPjsKKwkJfTsKKwl9OworfTsKKworJnNwaTEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJLyogcGluIHNoYXJlZCB3aXRoIHNuZmkgKi8KKwlwaW5jdHJsLTAgPSA8JnNwaWNfcGlucz47CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKKyZwaW8geworCXNwaV9mbGFzaF9waW5zOiBzcGkwLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiZmxhc2giOworCQkJZ3JvdXBzID0gInNwaTAiLCAic3BpMF93cF9ob2xkIjsKKwkJfTsKKwl9OworCisJc25maV9waW5zOiBzbmZpLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiZmxhc2giOworCQkJZ3JvdXBzID0gInNuZmkiOworCQl9OworCX07CisKKwlzcGljX3BpbnM6IHNwaTEtcGlucyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJzcGkiOworCQkJZ3JvdXBzID0gInNwaTFfMSI7CisJCX07CisJfTsKK307CisKKyZ3YXRjaGRvZyB7CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKKyZzbmFuZCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkvKiBwaW4gc2hhcmVkIHdpdGggc3BpYyAqLworCXBpbmN0cmwtMCA9IDwmc25maV9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7CisJbWVkaWF0ZWsscXVhZC1zcGk7CisKKwlwYXJ0aXRpb25zIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1wYXJ0aXRpb25zIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCisJCXBhcnRpdGlvbkAwIHsKKwkJCWxhYmVsID0gIkJMMiI7CisJCQlyZWcgPSA8MHgwMDAwMCAweDAxMDAwMDA+OworCQkJcmVhZC1vbmx5OworCQl9OworCisJCXBhcnRpdGlvbkAxMDAwMDAgeworCQkJbGFiZWwgPSAidS1ib290LWVudiI7CisJCQlyZWcgPSA8MHgwMTAwMDAwIDB4MDA4MDAwMD47CisJCX07CisKKwkJcGFydGl0aW9uQDE4MDAwMCB7CisJCQlsYWJlbCA9ICJGYWN0b3J5IjsKKwkJCXJlZyA9IDwweDE4MDAwMCAweDAyMDAwMDA+OworCQl9OworCisJCXBhcnRpdGlvbkAzODAwMDAgeworCQkJbGFiZWwgPSAiRklQIjsKKwkJCXJlZyA9IDwweDM4MDAwMCAweDAyMDAwMDA+OworCQl9OworCisJCXBhcnRpdGlvbkA1ODAwMDAgeworCQkJbGFiZWwgPSAidWJpIjsKKwkJCXJlZyA9IDwweDU4MDAwMCAweDQwMDAwMDA+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4Ni1mcGdhLmR0cyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODYtZnBnYS5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdmOTNjMAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODYtZnBnYS5kdHMKQEAgLTAsMCArMSwxNjMgQEAKKy9kdHMtdjEvOworI2luY2x1ZGUgIm10Nzk4Ni1mcGdhLmR0c2kiCisvIHsKKwltb2RlbCA9ICJNZWRpYVRlayBNVDc5ODYgRlBHQSI7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtZnBnYSI7CisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDBuMSBsb2dsZXZlbD04ICBcCisJCQkJZWFybHljb249dWFydDgyNTAsbW1pbzMyLDB4MTEwMDIwMDAiOworCX07CisKKwltZW1vcnkgeworCQkvLyBmcGdhIGRkcjI6IDEyOE1CKjIKKwkJcmVnID0gPDAgMHg0MDAwMDAwMCAwIDB4MTAwMDAwMDA+OworCX07Cit9OworCismdWFydDAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZzcGkwIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc3BpX2ZsYXNoX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKKwlzcGlfbm9yQDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiamVkZWMsc3BpLW5vciI7CisJCXJlZyA9IDwwPjsKKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8NTAwMDAwPjsKKworCQlwYXJ0aXRpb25AMDAwMDAgeworCQkJbGFiZWwgPSAiQkwyIjsKKwkJCXJlZyA9IDwweDAwMDAwIDB4MDA2MDAwMD47CisJCX07CisJCXBhcnRpdGlvbkA2MDAwMCB7CisJCQlsYWJlbCA9ICJ1LWJvb3QtZW52IjsKKwkJCXJlZyA9IDwweDYwMDAwIDB4MDAxMDAwMD47CisJCX07CisJCXBhcnRpdGlvbkA3MDAwMCB7CisJCQlsYWJlbCA9ICJGYWN0b3J5IjsKKwkJCXJlZyA9IDwweDcwMDAwIDB4MDBCMDAwMD47CisJCX07CisJCXBhcnRpdGlvbkAxMjAwMDAgeworCQkJbGFiZWwgPSAiQkwzMSI7CisJCQlyZWcgPSA8MHgxMjAwMDAgMHgwMDEwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDEzMDAwMCB7CisJCQlsYWJlbCA9ICJ1LWJvb3QiOworCQkJcmVnID0gPDB4MTMwMDAwIDB4MDBEMDAwMD47CisJCX07CisJCXBhcnRpdGlvbkAyMDAwMDAgeworCQkJbGFiZWwgPSAiZmlybXdhcmUiOworCQkJcmVnID0gPDB4MjAwMDAwIDB4RTAwMDAwPjsKKwkJfTsKKwl9OworCXNwaV9uYW5kQDEgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAic3BpLW5hbmQiOworCQlyZWcgPSA8MT47CisJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDUwMDAwMD47CisKKwkJcGFydGl0aW9uQDAwMDAwIHsKKwkJCWxhYmVsID0gIkJMMiI7CisJCQlyZWcgPSA8MHgwMDAwMCAweDAxMDAwMDA+OworCQl9OworCQlwYXJ0aXRpb25AMTAwMDAwIHsKKwkJCWxhYmVsID0gInUtYm9vdC1lbnYiOworCQkJcmVnID0gPDB4MTAwMDAwIDB4MDA4MDAwMD47CisJCX07CisJCXBhcnRpdGlvbkAxODAwMDAgeworCQkJbGFiZWwgPSAiRmFjdG9yeSI7CisJCQlyZWcgPSA8MHgxODAwMDAgMHgwMDIwMDAwMD47CisJCX07CisJCXBhcnRpdGlvbkAzODAwMDAgeworCQkJbGFiZWwgPSAiQkwzMSI7CisJCQlyZWcgPSA8MHgzODAwMDAgMHgwMDgwMDAwPjsKKwkJfTsKKwkJcGFydGl0aW9uQDQwMDAwMCB7CisJCQlsYWJlbCA9ICJ1LWJvb3QiOworCQkJcmVnID0gPDB4NDAwMDAwIDB4MDE4MDAwMD47CisJCX07CisJCXBhcnRpdGlvbkA1ODAwMDAgeworCQkJbGFiZWwgPSAiZmlybXdhcmUiOworCQkJcmVnID0gPDB4NTgwMDAwIDB4N2E4MDAwMD47CisJCX07CisJfTsKK307CisKKyZzcGkxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCS8qIHBpbiBzaGFyZWQgd2l0aCBzbmZpICovCisJcGluY3RybC0wID0gPCZzcGljX3BpbnM+OworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCismcGlvIHsKKwlzcGlfZmxhc2hfcGluczogc3BpMC1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJzcGkwIiwgInNwaTBfd3BfaG9sZCI7CisJCX07CisJfTsKKworCXNuZmlfcGluczogc25maS1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJzbmZpIjsKKwkJfTsKKwl9OworCisJc3BpY19waW5zOiBzcGkxLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAic3BpIjsKKwkJCWdyb3VwcyA9ICJzcGkxXzEiOworCQl9OworCX07Cit9OworCismd2F0Y2hkb2cgeworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCismc25hbmQgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJLyogcGluIHNoYXJlZCB3aXRoIHNwaWMgKi8KKwlwaW5jdHJsLTAgPSA8JnNuZmlfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworCW1lZGlhdGVrLHF1YWQtc3BpOworCisJcGFydGl0aW9ucyB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtcGFydGl0aW9ucyI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQlwYXJ0aXRpb25AMCB7CisJCQlsYWJlbCA9ICJCTDIiOworCQkJcmVnID0gPDB4MDAwMDAgMHgwMDgwMDAwPjsKKwkJCXJlYWQtb25seTsKKwkJfTsKKworCQlwYXJ0aXRpb25AODAwMDAgeworCQkJbGFiZWwgPSAiRklQIjsKKwkJCXJlZyA9IDwweDgwMDAwIDB4MDIwMDAwMD47CisJCX07CisKKwkJcGFydGl0aW9uQDI4MDAwMCB7CisJCQlsYWJlbCA9ICJ1LWJvb3QtZW52IjsKKwkJCXJlZyA9IDwweDI4MDAwMCAweDAwODAwMDA+OworCQl9OworCisJCXBhcnRpdGlvbkAzMDAwMDAgeworCQkJbGFiZWwgPSAiRmFjdG9yeSI7CisJCQlyZWcgPSA8MHgzMDAwMDAgMHgwMDgwMDAwPjsKKwkJfTsKKworCQlwYXJ0aXRpb25AMzgwMDAwIHsKKwkJCWxhYmVsID0gImZpcm13YXJlIjsKKwkJCXJlZyA9IDwweDM4MDAwMCAweDdjMDAwMDA+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4Ni1mcGdhLmR0c2kgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTg2LWZwZ2EuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmEwMjM0Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4Ni1mcGdhLmR0c2kKQEAgLTAsMCArMSw0MjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMjAgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBTYW0uU2hpaCA8c2FtLnNoaWhAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvYXJtLWdpYy5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3BoeS9waHkuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9yZXNldC90aS1zeXNjb24uaD4KKy8geworCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LWZwZ2EiOworCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJI3NpemUtY2VsbHMgPSA8Mj47CisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJY3B1QDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNTMiOworCQkJZW5hYmxlLW1ldGhvZCA9ICJwc2NpIjsKKwkJCXJlZyA9IDwweDA+OworCQl9OworCisJCWNwdUAxIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTUzIjsKKwkJCWVuYWJsZS1tZXRob2QgPSAicHNjaSI7CisJCQlyZWcgPSA8MHgxPjsKKwkJfTsKKwl9OworCisJd2VkOiB3ZWRAMTUwMTAwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLHdlZCI7CisJCXdlZF9udW0gPSA8Mj47CisJCS8qIGFkZCB0aGlzIHByb3BlcnR5IGZvciB3ZWQgZ2V0IHRoZSBwY2kgc2xvdCBudW1iZXIuICovCisJCXBjaV9zbG90X21hcCA9IDwwPiwgPDE+OworCQlyZWcgPSA8MCAweDE1MDEwMDAwIDAgMHgxMDAwPiwKKwkJICAgICAgPDAgMHgxNTAxMTAwMCAwIDB4MTAwMD47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyMDUgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDxHSUNfU1BJIDIwNiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwl9OworCisJd2VkMjogd2VkMkAxNTAxMTAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssd2VkMiI7CisJCXdlZF9udW0gPSA8Mj47CisJCXJlZyA9IDwwIDB4MTUwMTAwMDAgMCAweDEwMDA+LAorCQkgICAgICA8MCAweDE1MDExMDAwIDAgMHgxMDAwPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDIwNSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPEdJQ19TUEkgMjA2IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCX07CisKKwl3ZG1hOiB3ZG1hQDE1MTA0ODAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayx3ZWQtd2RtYSI7CisJCXJlZyA9IDwwIDB4MTUxMDQ4MDAgMCAweDQwMD4sCisJCSAgICAgIDwwIDB4MTUxMDRjMDAgMCAweDQwMD47CisJfTsKKworCWFwMndvY2NpZjogYXAyd29jY2lmQDE1MUE1MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxhcDJ3b2NjaWYiOworCQlyZWcgPSA8MCAweDE1MUE1MDAwIDAgMHgxMDAwPiwKKwkJICAgICAgPDAgMHgxNTFBRDAwMCAwIDB4MTAwMD47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyMTEgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDxHSUNfU1BJIDIxMiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKyAgICAgICAgfTsKKworCXdvY3B1MF9pbG06IHdvY3B1MF9pbG1AMTUxRTAwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLHdvY3B1MF9pbG0iOworCQlyZWcgPSA8MCAweDE1MUUwMDAwIDAgMHg4MDAwPjsKKwl9OworCisgICAgICAgIHdvY3B1MV9pbG06IHdvY3B1MV9pbG1AMTUxRjAwMDAgeworICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAibWVkaWF0ZWssd29jcHUxX2lsbSI7CisgICAgICAgICAgICAgICAgcmVnID0gPDAgMHgxNTFGMDAwMCAwIDB4ODAwMD47CisgICAgICAgIH07CisKKwl3b2NwdV9kbG06IHdvY3B1X2RsbUAxNTFFODAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssd29jcHVfZGxtIjsKKwkJcmVnID0gPDAgMHgxNTFFODAwMCAwIDB4MjAwMD4sCisJCSAgICAgIDwwIDB4MTUxRjgwMDAgMCAweDIwMDA+OworCisJCXJlc2V0cyA9IDwmZXRoc3lzcnN0IDA+OworCQlyZXNldC1uYW1lcyA9ICJ3b2NwdV9yc3QiOworCX07CisKKwljcHVfYm9vdDogd29jcHVfYm9vdEAxNTE5NDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssd29jcHVfYm9vdCI7CisJCXJlZyA9IDwwIDB4MTUxOTQwMDAgMCAweDEwMDA+OworCX07CisKKwlyZXNlcnZlZC1tZW1vcnkgeworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCXJhbmdlczsKKworCQkvKiAxOTIgS2lCIHJlc2VydmVkIGZvciBBUk0gVHJ1c3RlZCBGaXJtd2FyZSAoQkwzMSkgKi8KKwkJc2VjbW9uX3Jlc2VydmVkOiBzZWNtb25ANDMwMDAwMDAgeworCQkJcmVnID0gPDAgMHg0MzAwMDAwMCAwIDB4MzAwMDA+OworCQkJbm8tbWFwOworCQl9OworCisJCXdtY3B1X2VtaTogd21jcHUtcmVzZXJ2ZWRANEZDMDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayx3bWNwdS1yZXNlcnZlZCI7CisJCQluby1tYXA7CisJCQlyZWcgPSA8MCAweDRGQzAwMDAwIDAgMHgwMDEwMDAwMD47CisJCX07CisKKwkJd29jcHUwX2VtaTogd29jcHUwX2VtaUA0RkQwMDAwMCB7CisJCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLHdvY3B1MF9lbWkiOworCQkJbm8tbWFwOworCQkJcmVnID0gPDAgMHg0RkQwMDAwMCAwIDB4NDAwMDA+OworCQkJc2hhcmVkID0gPDA+OworCQl9OworCisJCXdvY3B1MV9lbWk6IHdvY3B1MV9lbWlANEZEODAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayx3b2NwdTFfZW1pIjsKKwkJCW5vLW1hcDsKKwkJCXJlZyA9IDwwIDB4NEZENDAwMDAgMCAweDQwMDAwPjsKKwkJCXNoYXJlZCA9IDwwPjsKKwkJfTsKKworCQl3b2NwdV9kYXRhOiB3b2NwdV9kYXRhQDRGRTAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssd29jcHVfZGF0YSI7CisJCQluby1tYXA7CisJCQlyZWcgPSA8MCAweDRGRDgwMDAwIDAgMHgyMDAwMDA+OworCQkJc2hhcmVkID0gPDE+OworCQl9OworCX07CisKKwlwc2NpIHsKKwkJY29tcGF0aWJsZSAgPSAiYXJtLHBzY2ktMC4yIjsKKwkJbWV0aG9kICAgICAgPSAic21jIjsKKwl9OworCisJc3lzdGVtX2NsazogZHVtbXkxM20geworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEzMDAwMDAwPjsKKwkJI2Nsb2NrLWNlbGxzID0gPDA+OworCX07CisKKwlydGNfY2xrOiBkdW1teTMyayB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQljbG9jay1mcmVxdWVuY3kgPSA8MzIwMDA+OworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJfTsKKworCXVhcnRfY2xrOiBkdW1teTEybSB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQljbG9jay1mcmVxdWVuY3kgPSA8MTIwMDAwMDA+OworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJfTsKKworCWdwdF9jbGs6IGR1bW15Nm0geworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDYwMDAwMDA+OworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJfTsKKworCXRpbWVyIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0sYXJtdjgtdGltZXIiOworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MTIwMDAwMDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19QUEkgMTMgSVJRX1RZUEVfTEVWRUxfTE9XPiwKKwkJCSAgICAgPEdJQ19QUEkgMTQgSVJRX1RZUEVfTEVWRUxfTE9XPiwKKwkJCSAgICAgPEdJQ19QUEkgMTEgSVJRX1RZUEVfTEVWRUxfTE9XPiwKKwkJCSAgICAgPEdJQ19QUEkgMTAgSVJRX1RZUEVfTEVWRUxfTE9XPjsKKworCX07CisKKwl3YXRjaGRvZzogd2F0Y2hkb2dAMTAwMWMwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzYyMi13ZHQiLAorCQkJICAgICAibWVkaWF0ZWssbXQ2NTg5LXdkdCI7CisJCXJlZyA9IDwwIDB4MTAwMWMwMDAgMCAweDEwMDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTEwIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkjcmVzZXQtY2VsbHMgPSA8MT47CisJfTsKKworCWdpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJAYzAwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAiYXJtLGdpYy12MyI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisJCWludGVycnVwdC1jb250cm9sbGVyOworCQlyZWcgPSA8MCAweDBjMDAwMDAwIDAgMHg0MDAwMD4sICAvKiBHSUNEICovCisJCSAgICAgIDwwIDB4MGMwODAwMDAgMCAweDIwMDAwMD47IC8qIEdJQ1IgKi8KKworCQlpbnRlcnJ1cHRzID0gPEdJQ19QUEkgOSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwl9OworCisJdWFydDA6IHNlcmlhbEAxMTAwMjAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXVhcnQiLAorCQkJICAgICAibWVkaWF0ZWssbXQ2NTc3LXVhcnQiOworCQlyZWcgPSA8MCAweDExMDAyMDAwIDAgMHg0MDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTIzIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8JnVhcnRfY2xrPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJdWFydDE6IHNlcmlhbEAxMTAwMzAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXVhcnQiLAorCQkJICAgICAibWVkaWF0ZWssbXQ2NTc3LXVhcnQiOworCQlyZWcgPSA8MCAweDExMDAzMDAwIDAgMHg0MDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTI0IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8JnVhcnRfY2xrPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJdWFydDI6IHNlcmlhbEAxMTAwNDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXVhcnQiLAorCQkJICAgICAibWVkaWF0ZWssbXQ2NTc3LXVhcnQiOworCQlyZWcgPSA8MCAweDExMDA0MDAwIDAgMHg0MDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTI1IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8JnVhcnRfY2xrPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJcGNpZTogcGNpZUAxMTI4MDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXBjaWUiOworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQlyZWcgPSA8MCAweDExMjgwMDAwIDAgMHg1MDAwPjsKKwkJcmVnLW5hbWVzID0gInBvcnQwIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTY4IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQlidXMtcmFuZ2UgPSA8MHgwMCAweGZmPjsKKwkJcmFuZ2VzID0gPDB4ODIwMDAwMDAgMCAweDIwMDAwMDAwCisJCQkgIDB4MCAweDIwMDAwMDAwIDAgMHgxMDAwMDAwMD47CisKKwkJcGNpZTA6IHBjaWVAMCwwIHsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlyZWcgPSA8MHgwMDAwIDAgMCAwIDA+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCXJhbmdlczsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MCAwIDAgNz47CisJCQlpbnRlcnJ1cHQtbWFwID0gPDAgMCAwIDEgJnBjaWVfaW50YzAgMD4sCisJCQkJCTwwIDAgMCAyICZwY2llX2ludGMwIDE+LAorCQkJCQk8MCAwIDAgMyAmcGNpZV9pbnRjMCAyPiwKKwkJCQkJPDAgMCAwIDQgJnBjaWVfaW50YzAgMz47CisJCQlwY2llX2ludGMwOiBpbnRlcnJ1cHQtY29udHJvbGxlciB7CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCX07CisJCX07CisJfTsKKworCXBpbzogcGluY3RybEAxMDAxZjAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXBpbmN0cmwiOworCQlyZWcgPSA8MCAweDEwMDFmMDAwIDAgMHgxMDAwPiwKKwkJICAgICAgPDAgMHgxMWMzMDAwMCAwIDB4MTAwMD4sCisgICAgICAgICAgICAgICAgICAgICAgPDAgMHgxMWM0MDAwMCAwIDB4MTAwMD4sCisgICAgICAgICAgICAgICAgICAgICAgPDAgMHgxMWUyMDAwMCAwIDB4MTAwMD4sCisgICAgICAgICAgICAgICAgICAgICAgPDAgMHgxMWUzMDAwMCAwIDB4MTAwMD4sCisgICAgICAgICAgICAgICAgICAgICAgPDAgMHgxMWYwMDAwMCAwIDB4MTAwMD4sCisgICAgICAgICAgICAgICAgICAgICAgPDAgMHgxMWYxMDAwMCAwIDB4MTAwMD4sCisJCSAgICAgIDwwIDB4MTAwMGIwMDAgMCAweDEwMDA+OworCQlyZWctbmFtZXMgPSAiZ3Bpb19iYXNlIiwgImlvY2ZnX3J0X2Jhc2UiLCAiaW9jZmdfcmJfYmFzZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlvY2ZnX2x0X2Jhc2UiLCAiaW9jZmdfbGJfYmFzZSIsICJpb2NmZ190cl9iYXNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW9jZmdfdGxfYmFzZSIsICJlaW50IjsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJZ3Bpby1yYW5nZXMgPSA8JnBpbyAwIDAgMTAwPjsKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyMjUgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworICAgICAgICBldGhzeXM6IHN5c2NvbkAxNTAwMDAwMCB7CisgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSA8MT47CisgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSA8MT47CisgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtZXRoc3lzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN5c2NvbiI7CisgICAgICAgICAgICAgICAgcmVnID0gPDAgMHgxNTAwMDAwMCAwIDB4MTAwMD47CisgICAgICAgICAgICAgICAgI2Nsb2NrLWNlbGxzID0gPDE+OworICAgICAgICAgICAgICAgICNyZXNldC1jZWxscyA9IDwxPjsKKworCQlldGhzeXNyc3Q6IHJlc2V0LWNvbnRyb2xsZXIgeworCQkJY29tcGF0aWJsZSA9ICJ0aSxzeXNjb24tcmVzZXQiOworCQkJI3Jlc2V0LWNlbGxzID0gPDE+OworCQkJdGkscmVzZXQtYml0cyA9IDwweDM0IDQgMHgzNCA0IDB4MzQgNCAoQVNTRVJUX1NFVCB8IERFQVNTRVJUX0NMRUFSIHwgU1RBVFVTX1NFVCk+OworCQl9OworICAgICAgICB9OworCisgICAgICAgIGV0aDogZXRoZXJuZXRAMTUxMDAwMDAgeworICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LWV0aCI7CisgICAgICAgICAgICAgICAgcmVnID0gPDAgMHgxNTEwMDAwMCAwIDB4ODAwMDA+OworICAgICAgICAgICAgICAgIGludGVycnVwdHMgPSA8R0lDX1NQSSAxOTYgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxHSUNfU1BJIDE5NyBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEdJQ19TUEkgMTk4IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8R0lDX1NQSSAxOTkgSVJRX1RZUEVfTEVWRUxfSElHSD47CisgICAgICAgICAgICAgICAgbWVkaWF0ZWssZXRoc3lzID0gPCZldGhzeXM+OworICAgICAgICAgICAgICAgICNyZXNldC1jZWxscyA9IDwxPjsKKyAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IDwxPjsKKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IDwwPjsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSAiZGlzYWJsZWQiOworICAgICAgICB9OworCisJc25hbmQ6IHNuZmlAMTEwMDUwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni1zbmFuZCI7CisJCXJlZyA9IDwwIDB4MTEwMDUwMDAgMCAweDEwMDA+LCA8MCAweDExMDA2MDAwIDAgMHgxMDAwPjsKKwkJcmVnLW5hbWVzID0gIm5maSIsICJlY2MiOworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTIxIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8JnN5c3RlbV9jbGs+LAorCQkJIDwmc3lzdGVtX2Nsaz4sCisJCQkgPCZzeXN0ZW1fY2xrPjsKKwkJY2xvY2stbmFtZXMgPSAibmZpX2NsayIsICJwYWRfY2xrIiwgImVjY19jbGsiOworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXdlZF9wY2llOiB3ZWRfcGNpZUAxMDAwMzAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssd2VkX3BjaWUiOworCQlyZWcgPSA8MCAweDEwMDAzMDAwIDAgMHgxMD47CisJfTsKKworCXdic3lzOiB3YnN5c0AxODAwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssd2JzeXMiOworCQlyZWcgPSA8MCAweDE4MDAwMDAwIDAgIDB4MTAwMDAwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyMTMgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJCSA8R0lDX1NQSSAyMTQgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJCSA8R0lDX1NQSSAyMTUgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJCSA8R0lDX1NQSSAyMTYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNoaXBfaWQgPSA8MHg3OTg2PjsKKwl9OworCisJc3BpMDogc3BpQDExMDBhMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxpcG0tc3BpIjsKKwkJcmVnID0gPDAgMHgxMTAwYTAwMCAwIDB4MTAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE0MCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJc3BpMTogc3BpQDExMDBiMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxpcG0tc3BpIjsKKwkJcmVnID0gPDAgMHgxMTAwYjAwMCAwIDB4MTAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE0MSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJYXV4YWRjOiBhZGNAMTEwMGQwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni1hdXhhZGMiLAorCQkJICAgICAibWVkaWF0ZWssbXQ3NjIyLWF1eGFkYyI7CisJCXJlZyA9IDwwIDB4MTEwMGQwMDAgMCAweDEwMDA+OworCQljbG9ja3MgPSA8JnN5c3RlbV9jbGs+OworCQljbG9jay1uYW1lcyA9ICJtYWluIjsKKwkJI2lvLWNoYW5uZWwtY2VsbHMgPSA8MT47CisgICAgICAgIH07CisKKwljb25zeXM6IGNvbnN5c0AxMDAwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LWNvbnN5cyI7CisJCXJlZyA9IDwwIDB4MTAwMDAwMDAgMCAweDg2MDAwMDA+OworCQltZW1vcnktcmVnaW9uID0gPCZ3bWNwdV9lbWk+OworCX07CisKKwl4aGNpOiB4aGNpQDExMjAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYteGhjaSIsCisJCQkgICAgICJtZWRpYXRlayxtdGsteGhjaSI7CisJCXJlZyA9IDwwIDB4MTEyMDAwMDAgMCAweDJlMDA+LAorCQkgICAgICA8MCAweDExMjAzZTAwIDAgMHgwMTAwPjsKKwkJcmVnLW5hbWVzID0gIm1hYyIsICJpcHBjIjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE3MyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJcGh5cyA9IDwmdTJwb3J0MCBQSFlfVFlQRV9VU0IyPjsKKwkJY2xvY2tzID0gPCZzeXN0ZW1fY2xrPiwKKwkJICAgICAgICAgPCZzeXN0ZW1fY2xrPiwKKwkJCSA8JnN5c3RlbV9jbGs+LAorCQkJIDwmc3lzdGVtX2Nsaz4sCisJCQkgPCZzeXN0ZW1fY2xrPjsKKwkJY2xvY2stbmFtZXMgPSAic3lzX2NrIiwKKwkJCSAgICAgICJ4aGNpX2NrIiwKKwkJCSAgICAgICJyZWZfY2siLAorCQkJICAgICAgIm1jdV9jayIsCisJCQkgICAgICAiZG1hX2NrIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQltZWRpYXRlayx1M3AtZGlzLW1zaz08MHgwMT47CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworCisJdXNidHBoeTogdXNiLXBoeUAxMTIwM2UwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssYTYwODEwLXUycGh5IiwKKwkJCSAgICAgIm1lZGlhdGVrLGE2MDkzMS11M3BoeSIsCisJCQkgICAgICJtZWRpYXRlayxhNjB4eHgtdXNicGh5IjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQlyYW5nZXM7CisJCXN0YXR1cyA9ICJva2F5IjsKKworCQl1MnBvcnQwOiB1c2ItcGh5QDExMjAzZWQwIHsKKwkJCXJlZyA9IDwwIDB4MTEyMDNlZDAgMCAweDAwOD47CisJCQljbG9ja3MgPSA8JnN5c3RlbV9jbGs+OworCQkJY2xvY2stbmFtZXMgPSAicmVmIjsKKwkJCSNwaHktY2VsbHMgPSA8MT47CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJdTNwb3J0MDogdXNiLXBoeUAxMTIwM2VkOCB7CisJCQlyZWcgPSA8MCAweDExMjAzZWQ4IDAgMHgwMDg+OworCQkJY2xvY2tzID0gPCZzeXN0ZW1fY2xrPjsKKwkJCWNsb2NrLW5hbWVzID0gInJlZiI7CisJCQkjcGh5LWNlbGxzID0gPDE+OworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQl1MnBvcnQxOiB1c2ItcGh5QDExMjAzZWUwIHsKKwkJCXJlZyA9IDwwIDB4MTEyMDNlZTAgMCAweDAwOD47CisJCQljbG9ja3MgPSA8JnN5c3RlbV9jbGs+OworCQkJY2xvY2stbmFtZXMgPSAicmVmIjsKKwkJCSNwaHktY2VsbHMgPSA8MT47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4Ni1zbmZpLW5hbmQtcGFydGl0aW9uLmR0c2kgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTg2LXNuZmktbmFuZC1wYXJ0aXRpb24uZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODhlMWMxCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4Ni1zbmZpLW5hbmQtcGFydGl0aW9uLmR0c2kKQEAgLTAsMCArMSw0NCBAQAorLyB7CisJbm1ibV9zbmZpIHsKKwkJY29tcGF0aWJsZSA9ICJnZW5lcmljLG5tYm0iOworCisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQlsb3dlci1tdGQtZGV2aWNlID0gPCZzbmFuZD47CisJCWZvcmNlZC1jcmVhdGU7CisJCWVtcHR5LXBhZ2UtZWNjLXByb3RlY3RlZDsKKworCQlwYXJ0aXRpb25zIHsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtcGFydGl0aW9ucyI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCisJCQlwYXJ0aXRpb25AMCB7CisJCQkJbGFiZWwgPSAiQkwyIjsKKwkJCQlyZWcgPSA8MHgwMDAwMCAweDAxMDAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisKKwkJCXBhcnRpdGlvbkAxMDAwMDAgeworCQkJCWxhYmVsID0gInUtYm9vdC1lbnYiOworCQkJCXJlZyA9IDwweDAxMDAwMDAgMHgwMDgwMDAwPjsKKwkJCX07CisKKwkJCWZhY3Rvcnk6IHBhcnRpdGlvbkAxODAwMDAgeworCQkJCWxhYmVsID0gIkZhY3RvcnkiOworCQkJCXJlZyA9IDwweDE4MDAwMCAweDAyMDAwMDA+OworCQkJfTsKKworCQkJcGFydGl0aW9uQDM4MDAwMCB7CisJCQkJbGFiZWwgPSAiRklQIjsKKwkJCQlyZWcgPSA8MHgzODAwMDAgMHgwMjAwMDAwPjsKKwkJCX07CisKKwkJCXBhcnRpdGlvbkA1ODAwMDAgeworCQkJCWxhYmVsID0gInViaSI7CisJCQkJcmVnID0gPDB4NTgwMDAwIDB4NDAwMDAwMD47CisJCQl9OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4Ni1zcGltLW5hbmQtcGFydGl0aW9uLmR0c2kgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTg2LXNwaW0tbmFuZC1wYXJ0aXRpb24uZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2M3OTYxCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4Ni1zcGltLW5hbmQtcGFydGl0aW9uLmR0c2kKQEAgLTAsMCArMSw0MyBAQAorLyB7CisJbm1ibV9zcGltX25hbmQgeworCQljb21wYXRpYmxlID0gImdlbmVyaWMsbm1ibSI7CisKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCisJCWxvd2VyLW10ZC1kZXZpY2UgPSA8JnNwaV9uYW5kPjsKKwkJZm9yY2VkLWNyZWF0ZTsKKworCQlwYXJ0aXRpb25zIHsKKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtcGFydGl0aW9ucyI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCisJCQlwYXJ0aXRpb25AMCB7CisJCQkJbGFiZWwgPSAiQkwyIjsKKwkJCQlyZWcgPSA8MHgwMDAwMCAweDAxMDAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisKKwkJCXBhcnRpdGlvbkAxMDAwMDAgeworCQkJCWxhYmVsID0gInUtYm9vdC1lbnYiOworCQkJCXJlZyA9IDwweDAxMDAwMDAgMHgwMDgwMDAwPjsKKwkJCX07CisKKwkJCWZhY3Rvcnk6IHBhcnRpdGlvbkAxODAwMDAgeworCQkJCWxhYmVsID0gIkZhY3RvcnkiOworCQkJCXJlZyA9IDwweDE4MDAwMCAweDAyMDAwMDA+OworCQkJfTsKKworCQkJcGFydGl0aW9uQDM4MDAwMCB7CisJCQkJbGFiZWwgPSAiRklQIjsKKwkJCQlyZWcgPSA8MHgzODAwMDAgMHgwMjAwMDAwPjsKKwkJCX07CisKKwkJCXBhcnRpdGlvbkA1ODAwMDAgeworCQkJCWxhYmVsID0gInViaSI7CisJCQkJcmVnID0gPDB4NTgwMDAwIDB4NDAwMDAwMD47CisJCQl9OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4Ni1zcGltLW5vci1wYXJ0aXRpb24uZHRzaSBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODYtc3BpbS1ub3ItcGFydGl0aW9uLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNkZGU1YQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODYtc3BpbS1ub3ItcGFydGl0aW9uLmR0c2kKQEAgLTAsMCArMSwzMCBAQAorJnNwaTAgeworCXNwaV9ub3JAMCB7CisJCXBhcnRpdGlvbnMgeworCQkJY29tcGF0aWJsZSA9ICJmaXhlZC1wYXJ0aXRpb25zIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisKKwkJCXBhcnRpdGlvbkAwMDAwMCB7CisJCQkJbGFiZWwgPSAiQkwyIjsKKwkJCQlyZWcgPSA8MHgwMDAwMCAweDAwNDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA0MDAwMCB7CisJCQkJbGFiZWwgPSAidS1ib290LWVudiI7CisJCQkJcmVnID0gPDB4NDAwMDAgMHgwMDEwMDAwPjsKKwkJCX07CisJCQlmYWN0b3J5OiBwYXJ0aXRpb25ANTAwMDAgeworCQkJCWxhYmVsID0gIkZhY3RvcnkiOworCQkJCXJlZyA9IDwweDUwMDAwIDB4MDBCMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDEwMDAwMCB7CisJCQkJbGFiZWwgPSAiRklQIjsKKwkJCQlyZWcgPSA8MHgxMDAwMDAgMHgwMDgwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25AMTgwMDAwIHsKKwkJCQlsYWJlbCA9ICJmaXJtd2FyZSI7CisJCQkJcmVnID0gPDB4MTgwMDAwIDB4RTAwMDAwPjsKKwkJCX07CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTg2YS0yNTAwd2FuLWVtbWMtcmZiLmR0cyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODZhLTI1MDB3YW4tZW1tYy1yZmIuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwOTRhYmUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTg2YS0yNTAwd2FuLWVtbWMtcmZiLmR0cwpAQCAtMCwwICsxLDI5NiBAQAorL2R0cy12MS87CisjaW5jbHVkZSAibXQ3OTg2YS5kdHNpIgorI2luY2x1ZGUgIm10Nzk4NmEtcGluY3RybC5kdHNpIgorLyB7CisJbW9kZWwgPSAiTWVkaWFUZWsgTVQ3OTg2YSBSRkIiOworCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2YS1lbW1jLXJmYiI7CisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDBuMSBsb2dsZXZlbD04ICBcCisJCQkJZWFybHljb249dWFydDgyNTAsbW1pbzMyLDB4MTEwMDIwMDAgXAorCQkJCXJvb3Q9UEFSVExBQkVMPXJvb3RmcyByb290d2FpdCByb290ZnN0eXBlPXNxdWFzaGZzLGYyZnMiOworCX07CisKKwltZW1vcnkgeworCQlyZWcgPSA8MCAweDQwMDAwMDAwIDAgMHgxMDAwMDAwMD47CisJfTsKKworCXJlZ18xcDh2OiByZWd1bGF0b3ItMXA4diB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAiZml4ZWQtMS44ViI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJcmVndWxhdG9yLWJvb3Qtb247CisJCXJlZ3VsYXRvci1hbHdheXMtb247CisJfTsKKworCXJlZ18zcDN2OiByZWd1bGF0b3ItM3AzdiB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAiZml4ZWQtMy4zViI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLWJvb3Qtb247CisJCXJlZ3VsYXRvci1hbHdheXMtb247CisJfTsKKworCXNvdW5kIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtd204OTYwLW1hY2hpbmUiOworCQltZWRpYXRlayxwbGF0Zm9ybSA9IDwmYWZlPjsKKwkJYXVkaW8tcm91dGluZyA9ICJIZWFkcGhvbmUiLCAiSFBfTCIsCisJCQkJIkhlYWRwaG9uZSIsICJIUF9SIiwKKwkJCQkiTElOUFVUMSIsICJBTUlDIiwKKwkJCQkiUklOUFVUMSIsICJBTUlDIjsKKwkJbWVkaWF0ZWssYXVkaW8tY29kZWMgPSA8JndtODk2MD47CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworfTsKKworJnB3bSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnB3bTBfcGluICZwd20xX3Bpbl9nMT47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0MV9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0Ml9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismaTJjMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmkyY19waW5zPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwl3bTg5NjA6IHdtODk2MEAxYSB7CisJCWNvbXBhdGlibGUgPSAid2xmLHdtODk2MCI7CisJCXJlZyA9IDwweDFhPjsKKwl9OworfTsKKworJmF1eGFkYyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJndhdGNoZG9nIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZXRoIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlnbWFjMDogbWFjQDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MD47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwlnbWFjMTogbWFjQDEgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MT47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwltZGlvOiBtZGlvLWJ1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlwaHk1OiBwaHlANSB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8NT47CisJCQlyZXNldC1ncGlvcyA9IDwmcGlvIDYgMT47CisJCQlyZXNldC1kZWFzc2VydC11cyA9IDwyMDAwMD47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCQlwaHk2OiBwaHlANiB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8Nj47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCQlzd2l0Y2hAMCB7CisJCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzUzMSI7CisJCQlyZWcgPSA8MzE+OworCQkJcmVzZXQtZ3Bpb3MgPSA8JnBpbyA1IDA+OworCisJCQlwb3J0cyB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCQlwb3J0QDAgeworCQkJCQlyZWcgPSA8MD47CisJCQkJCWxhYmVsID0gImxhbjAiOworCQkJCX07CisKKwkJCQlwb3J0QDEgeworCQkJCQlyZWcgPSA8MT47CisJCQkJCWxhYmVsID0gImxhbjEiOworCQkJCX07CisKKwkJCQlwb3J0QDIgeworCQkJCQlyZWcgPSA8Mj47CisJCQkJCWxhYmVsID0gImxhbjIiOworCQkJCX07CisKKwkJCQlwb3J0QDMgeworCQkJCQlyZWcgPSA8Mz47CisJCQkJCWxhYmVsID0gImxhbjMiOworCQkJCX07CisKKwkJCQlwb3J0QDQgeworCQkJCQlyZWcgPSA8ND47CisJCQkJCWxhYmVsID0gImxhbjQiOworCQkJCX07CisKKwkJCQlwb3J0QDUgeworCQkJCQlyZWcgPSA8NT47CisJCQkJCWxhYmVsID0gImxhbjUiOworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCisJCQkJcG9ydEA2IHsKKwkJCQkJcmVnID0gPDY+OworCQkJCQlsYWJlbCA9ICJjcHUiOworCQkJCQlldGhlcm5ldCA9IDwmZ21hYzA+OworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmhuYXQgeworCW10a2V0aC13YW4gPSAiZXRoMSI7CisJbXRrZXRoLWxhbiA9ICJsYW4iOworCW10a2V0aC1tYXgtZ21hYyA9IDwyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc3BpMSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNwaWNfcGluc19nMj47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJm1tYzAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCIsICJzdGF0ZV91aHMiOworCXBpbmN0cmwtMCA9IDwmbW1jMF9waW5zX2RlZmF1bHQ+OworCXBpbmN0cmwtMSA9IDwmbW1jMF9waW5zX3Vocz47CisJYnVzLXdpZHRoID0gPDg+OworCW1heC1mcmVxdWVuY3kgPSA8MjAwMDAwMDAwPjsKKwljYXAtbW1jLWhpZ2hzcGVlZDsKKwltbWMtaHMyMDAtMV84djsKKwltbWMtaHM0MDAtMV84djsKKwloczQwMC1kcy1kZWxheSA9IDwweDE0MDE0PjsKKwl2bW1jLXN1cHBseSA9IDwmcmVnXzNwM3Y+OworCXZxbW1jLXN1cHBseSA9IDwmcmVnXzFwOHY+OworCW5vbi1yZW1vdmFibGU7CisJbm8tc2Q7CisJbm8tc2RpbzsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismcGNpZTAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwY2llMF9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismd2JzeXMgeworCW1lZGlhdGVrLG10ZC1lZXByb20gPSA8JmZhY3RvcnkgMHgwMDAwPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismcGlvIHsKKwltbWMwX3BpbnNfZGVmYXVsdDogbW1jMC1waW5zLTUwLXRvLTYxLWRlZmF1bHQgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiZmxhc2giOworCQkJZ3JvdXBzID0gImVtbWNfNTEiOworCQl9OworCQljb25mLWNtZC1kYXQgeworCQkJcGlucyA9ICJFTU1DX0RBVEFfMCIsICJFTU1DX0RBVEFfMSIsICJFTU1DX0RBVEFfMiIsCisJCQkgICAgICAgIkVNTUNfREFUQV8zIiwgIkVNTUNfREFUQV80IiwgIkVNTUNfREFUQV81IiwKKwkJCSAgICAgICAiRU1NQ19EQVRBXzYiLCAiRU1NQ19EQVRBXzciLCAiRU1NQ19DTUQiOworCQkJaW5wdXQtZW5hYmxlOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzRtQT47CisJCQltZWRpYXRlayxwdWxsLXVwLWFkdiA9IDwxPjsJLyogcHVsbC11cCAxMEsgKi8KKwkJfTsKKwkJY29uZi1jbGsgeworCQkJcGlucyA9ICJFTU1DX0NLIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV82bUE+OworCQkJbWVkaWF0ZWsscHVsbC1kb3duLWFkdiA9IDwyPjsJLyogcHVsbC1kb3duIDUwSyAqLworCQl9OworCQljb25mLWRzIHsKKwkJCXBpbnMgPSAiRU1NQ19EU0wiOworCQkJbWVkaWF0ZWsscHVsbC1kb3duLWFkdiA9IDwyPjsJLyogcHVsbC1kb3duIDUwSyAqLworCQl9OworCQljb25mLXJzdCB7CisJCQlwaW5zID0gIkVNTUNfUlNUQiI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtdXAtYWR2ID0gPDE+OwkvKiBwdWxsLXVwIDEwSyAqLworCQl9OworCX07CisKKwltbWMwX3BpbnNfdWhzOiBtbWMwLXBpbnMtNTAtdG8tNjEtdWhzIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJlbW1jXzUxIjsKKwkJfTsKKwkJY29uZi1jbWQtZGF0IHsKKwkJCXBpbnMgPSAiRU1NQ19EQVRBXzAiLCAiRU1NQ19EQVRBXzEiLCAiRU1NQ19EQVRBXzIiLAorCQkJICAgICAgICJFTU1DX0RBVEFfMyIsICJFTU1DX0RBVEFfNCIsICJFTU1DX0RBVEFfNSIsCisJCQkgICAgICAgIkVNTUNfREFUQV82IiwgIkVNTUNfREFUQV83IiwgIkVNTUNfQ01EIjsKKwkJCWlucHV0LWVuYWJsZTsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV80bUE+OworCQkJbWVkaWF0ZWsscHVsbC11cC1hZHYgPSA8MT47CS8qIHB1bGwtdXAgMTBLICovCisJCX07CisJCWNvbmYtY2xrIHsKKwkJCXBpbnMgPSAiRU1NQ19DSyI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNm1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtZG93bi1hZHYgPSA8Mj47CS8qIHB1bGwtZG93biA1MEsgKi8KKwkJfTsKKwkJY29uZi1kcyB7CisJCQlwaW5zID0gIkVNTUNfRFNMIjsKKwkJCW1lZGlhdGVrLHB1bGwtZG93bi1hZHYgPSA8Mj47CS8qIHB1bGwtZG93biA1MEsgKi8KKwkJfTsKKwkJY29uZi1yc3QgeworCQkJcGlucyA9ICJFTU1DX1JTVEIiOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzRtQT47CisJCQltZWRpYXRlayxwdWxsLXVwLWFkdiA9IDwxPjsJLyogcHVsbC11cCAxMEsgKi8KKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODZhLTI1MDB3YW4tZ3N3LXNwaW0tbmFuZC1yZmIuZHRzIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4NmEtMjUwMHdhbi1nc3ctc3BpbS1uYW5kLXJmYi5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFkNWRjOAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODZhLTI1MDB3YW4tZ3N3LXNwaW0tbmFuZC1yZmIuZHRzCkBAIC0wLDAgKzEsMjI2IEBACisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDc5ODZhLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2YS1waW5jdHJsLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2LXNwaW0tbmFuZC1wYXJ0aXRpb24uZHRzaSIKKy8geworCW1vZGVsID0gIk1lZGlhVGVrIE1UNzk4NmIgZ3N3IFJGQiI7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODZhLTI1MDB3YW4tZ3N3LXNwaW0tc25hbmQtcmZiIjsKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG4xIGxvZ2xldmVsPTggIFwKKwkJCQllYXJseWNvbj11YXJ0ODI1MCxtbWlvMzIsMHgxMTAwMjAwMCI7CisJfTsKKworCWdzdzogZ3N3QDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzUzeCI7CisJCW1lZGlhdGVrLGV0aHN5cyA9IDwmZXRoc3lzPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCX07CisKKwltZW1vcnkgeworCQlyZWcgPSA8MCAweDQwMDAwMDAwIDAgMHgxMDAwMDAwMD47CisJfTsKKworCXNvdW5kIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtd204OTYwLW1hY2hpbmUiOworCQltZWRpYXRlayxwbGF0Zm9ybSA9IDwmYWZlPjsKKwkJYXVkaW8tcm91dGluZyA9ICJIZWFkcGhvbmUiLCAiSFBfTCIsCisJCQkJIkhlYWRwaG9uZSIsICJIUF9SIiwKKwkJCQkiTElOUFVUMSIsICJBTUlDIiwKKwkJCQkiUklOUFVUMSIsICJBTUlDIjsKKwkJbWVkaWF0ZWssYXVkaW8tY29kZWMgPSA8JndtODk2MD47CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworfTsKKworJnB3bSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnB3bTBfcGluICZwd20xX3Bpbl9nMT47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0MV9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0Ml9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismaTJjMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmkyY19waW5zPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwl3bTg5NjA6IHdtODk2MEAxYSB7CisJCWNvbXBhdGlibGUgPSAid2xmLHdtODk2MCI7CisJCXJlZyA9IDwweDFhPjsKKwl9OworfTsKKworJmF1eGFkYyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJndhdGNoZG9nIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZXRoIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlnbWFjMDogbWFjQDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MD47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwlnbWFjMTogbWFjQDEgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MT47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwltZGlvOiBtZGlvLWJ1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlwaHk1OiBwaHlANSB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8NT47CisJCQlyZXNldC1ncGlvcyA9IDwmcGlvIDYgMT47CisJCQlyZXNldC1kZWFzc2VydC11cyA9IDwyMDAwMD47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCQlwaHk2OiBwaHlANiB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8Nj47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCX07Cit9OworCismZ3N3IHsKKwltZWRpYXRlayxtZGlvID0gPCZtZGlvPjsKKwltZWRpYXRlayxwb3J0bWFwID0gImxsbGxsIjsKKwltZWRpYXRlayxtZGlvX21hc3Rlcl9waW5tdXggPSA8MT47CisJcmVzZXQtZ3Bpb3MgPSA8JnBpbyA1IDA+OworCWludGVycnVwdC1wYXJlbnQgPSA8JnBpbz47CisJaW50ZXJydXB0cyA9IDw2NiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwlwb3J0NTogcG9ydEA1IHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc1M3gtcG9ydCI7CisJCXJlZyA9IDw1PjsKKwkJcGh5LW1vZGUgPSAic2dtaWkiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJfTsKKworCX07CisKKwlwb3J0NjogcG9ydEA2IHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc1M3gtcG9ydCI7CisJCW1lZGlhdGVrLHNzYy1vbjsKKwkJcmVnID0gPDY+OworCQlwaHktbW9kZSA9ICJzZ21paSI7CisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJfTsKKwl9OworfTsKKworJmhuYXQgeworCW10a2V0aC13YW4gPSAiZXRoMSI7CisJbXRrZXRoLWxhbiA9ICJsYW4iOworCW10a2V0aC1tYXgtZ21hYyA9IDwyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc3BpMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNwaV9mbGFzaF9waW5zPjsKKwljcy1ncGlvcyA9IDwwPiwgPDA+OworCXN0YXR1cyA9ICJva2F5IjsKKworCXNwaV9ub3JAMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJqZWRlYyxzcGktbm9yIjsKKwkJcmVnID0gPDA+OworCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDwyMDAwMDAwMD47CisJCXNwaS10eC1idXN3aWR0aCA9IDw0PjsKKwkJc3BpLXJ4LWJ1c3dpZHRoID0gPDQ+OworCX07CisKKwlzcGlfbmFuZDogc3BpX25hbmRAMSB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJzcGktbmFuZCI7CisJCXJlZyA9IDwxPjsKKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8MjAwMDAwMDA+OworCQlzcGktdHgtYnVzd2lkdGggPSA8ND47CisJCXNwaS1yeC1idXN3aWR0aCA9IDw0PjsKKwl9OworfTsKKworJnNwaTEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzcGljX3BpbnNfZzI+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwY2llMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBjaWUwX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ3YnN5cyB7CisJbWVkaWF0ZWssbXRkLWVlcHJvbSA9IDwmZmFjdG9yeSAweDAwMDA+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwaW8geworCXNwaV9mbGFzaF9waW5zOiBzcGktZmxhc2gtcGlucy0zMy10by0zOCB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJmbGFzaCI7CisJCQlncm91cHMgPSAic3BpMCIsICJzcGkwX3dwX2hvbGQiOworCQl9OworCQljb25mLXB1IHsKKwkJCXBpbnMgPSAiU1BJMl9DUyIsICJTUEkyX0hPTEQiLCAiU1BJMl9XUCI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfOG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtdXAtYWR2ID0gPDA+OwkvKiBiaWFzLWRpc2FibGUgKi8KKwkJfTsKKwkJY29uZi1wZCB7CisJCQlwaW5zID0gIlNQSTJfQ0xLIiwgIlNQSTJfTU9TSSIsICJTUEkyX01JU08iOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzhtQT47CisJCQltZWRpYXRlayxwdWxsLWRvd24tYWR2ID0gPDA+OwkvKiBiaWFzLWRpc2FibGUgKi8KKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODZhLTI1MDB3YW4tc2QtcmZiLmR0cyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODZhLTI1MDB3YW4tc2QtcmZiLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTFkMGRjCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4NmEtMjUwMHdhbi1zZC1yZmIuZHRzCkBAIC0wLDAgKzEsMzA0IEBACisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDc5ODZhLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2YS1waW5jdHJsLmR0c2kiCisvIHsKKwltb2RlbCA9ICJNZWRpYVRlayBNVDc5ODZhIFJGQiI7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODZhLTI1MDB3YW4tc2QtcmZiIjsKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG4xIGxvZ2xldmVsPTggIFwKKwkJCWVhcmx5Y29uPXVhcnQ4MjUwLG1taW8zMiwweDExMDAyMDAwIFwKKwkJCXJvb3Q9UEFSVExBQkVMPXJvb3RmcyByb290d2FpdCByb290ZnN0eXBlPXNxdWFzaGZzLGYyZnMiOworCX07CisKKwltZW1vcnkgeworCQlyZWcgPSA8MCAweDQwMDAwMDAwIDAgMHgxMDAwMDAwMD47CisJfTsKKworCXNvdW5kIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtd204OTYwLW1hY2hpbmUiOworCQltZWRpYXRlayxwbGF0Zm9ybSA9IDwmYWZlPjsKKwkJYXVkaW8tcm91dGluZyA9ICJIZWFkcGhvbmUiLCAiSFBfTCIsCisJCQkJIkhlYWRwaG9uZSIsICJIUF9SIiwKKwkJCQkiTElOUFVUMSIsICJBTUlDIiwKKwkJCQkiUklOUFVUMSIsICJBTUlDIjsKKwkJbWVkaWF0ZWssYXVkaW8tY29kZWMgPSA8JndtODk2MD47CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworCisJcmVnXzNwM3Y6IHJlZ3VsYXRvci0zcDN2IHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJmaXhlZC0zLjNWIjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwl9OworfTsKKworJnB3bSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnB3bTBfcGluICZwd20xX3Bpbl9nMT47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0MV9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0Ml9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismaTJjMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmkyY19waW5zPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwl3bTg5NjA6IHdtODk2MEAxYSB7CisJCWNvbXBhdGlibGUgPSAid2xmLHdtODk2MCI7CisJCXJlZyA9IDwweDFhPjsKKwl9OworfTsKKworJmF1eGFkYyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJndhdGNoZG9nIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZXRoIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlnbWFjMDogbWFjQDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MD47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwlnbWFjMTogbWFjQDEgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MT47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwltZGlvOiBtZGlvLWJ1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlwaHk1OiBwaHlANSB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8NT47CisJCQlyZXNldC1ncGlvcyA9IDwmcGlvIDYgMT47CisJCQlyZXNldC1kZWFzc2VydC11cyA9IDwyMDAwMD47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCQlwaHk2OiBwaHlANiB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8Nj47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCQlzd2l0Y2hAMCB7CisJCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzUzMSI7CisJCQlyZWcgPSA8MzE+OworCQkJcmVzZXQtZ3Bpb3MgPSA8JnBpbyA1IDA+OworCisJCQlwb3J0cyB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCQlwb3J0QDAgeworCQkJCQlyZWcgPSA8MD47CisJCQkJCWxhYmVsID0gImxhbjAiOworCQkJCX07CisKKwkJCQlwb3J0QDEgeworCQkJCQlyZWcgPSA8MT47CisJCQkJCWxhYmVsID0gImxhbjEiOworCQkJCX07CisKKwkJCQlwb3J0QDIgeworCQkJCQlyZWcgPSA8Mj47CisJCQkJCWxhYmVsID0gImxhbjIiOworCQkJCX07CisKKwkJCQlwb3J0QDMgeworCQkJCQlyZWcgPSA8Mz47CisJCQkJCWxhYmVsID0gImxhbjMiOworCQkJCX07CisKKwkJCQlwb3J0QDQgeworCQkJCQlyZWcgPSA8ND47CisJCQkJCWxhYmVsID0gImxhbjQiOworCQkJCX07CisKKwkJCQlwb3J0QDUgeworCQkJCQlyZWcgPSA8NT47CisJCQkJCWxhYmVsID0gImxhbjUiOworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCisJCQkJcG9ydEA2IHsKKwkJCQkJcmVnID0gPDY+OworCQkJCQlsYWJlbCA9ICJjcHUiOworCQkJCQlldGhlcm5ldCA9IDwmZ21hYzA+OworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmhuYXQgeworCW10a2V0aC13YW4gPSAiZXRoMSI7CisJbXRrZXRoLWxhbiA9ICJsYW4iOworCW10a2V0aC1tYXgtZ21hYyA9IDwyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismbW1jMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgInN0YXRlX3VocyI7CisJcGluY3RybC0wID0gPCZtbWMwX3BpbnNfZGVmYXVsdD47CisJcGluY3RybC0xID0gPCZtbWMwX3BpbnNfdWhzPjsKKwlidXMtd2lkdGggPSA8ND47CisJbWF4LWZyZXF1ZW5jeSA9IDw1MjAwMDAwMD47CisJY2FwLXNkLWhpZ2hzcGVlZDsKKwl2bW1jLXN1cHBseSA9IDwmcmVnXzNwM3Y+OworCXZxbW1jLXN1cHBseSA9IDwmcmVnXzNwM3Y+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwY2llMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBjaWUwX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwaW8geworCW1tYzBfcGluc19kZWZhdWx0OiBtbWMwLXBpbnMtNTAtdG8tNjEtZGVmYXVsdCB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJmbGFzaCI7CisJCQlncm91cHMgPSAiZW1tY181MSI7CisJCX07CisJCWNvbmYtY21kLWRhdCB7CisJCQlwaW5zID0gIkVNTUNfREFUQV8wIiwgIkVNTUNfREFUQV8xIiwgIkVNTUNfREFUQV8yIiwKKwkJCSAgICAgICAiRU1NQ19EQVRBXzMiLCAiRU1NQ19EQVRBXzQiLCAiRU1NQ19EQVRBXzUiLAorCQkJICAgICAgICJFTU1DX0RBVEFfNiIsICJFTU1DX0RBVEFfNyIsICJFTU1DX0NNRCI7CisJCQlpbnB1dC1lbmFibGU7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtdXAtYWR2ID0gPDE+OwkvKiBwdWxsLXVwIDEwSyAqLworCQl9OworCQljb25mLWNsayB7CisJCQlwaW5zID0gIkVNTUNfQ0siOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzZtQT47CisJCQltZWRpYXRlayxwdWxsLWRvd24tYWR2ID0gPDI+OwkvKiBwdWxsLWRvd24gNTBLICovCisJCX07CisJCWNvbmYtZHMgeworCQkJcGlucyA9ICJFTU1DX0RTTCI7CisJCQltZWRpYXRlayxwdWxsLWRvd24tYWR2ID0gPDI+OwkvKiBwdWxsLWRvd24gNTBLICovCisJCX07CisJCWNvbmYtcnN0IHsKKwkJCXBpbnMgPSAiRU1NQ19SU1RCIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV80bUE+OworCQkJbWVkaWF0ZWsscHVsbC11cC1hZHYgPSA8MT47CS8qIHB1bGwtdXAgMTBLICovCisJCX07CisJfTsKKworCW1tYzBfcGluc191aHM6IG1tYzAtcGlucy01MC10by02MS11aHMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiZmxhc2giOworCQkJZ3JvdXBzID0gImVtbWNfNTEiOworCQl9OworCQljb25mLWNtZC1kYXQgeworCQkJcGlucyA9ICJFTU1DX0RBVEFfMCIsICJFTU1DX0RBVEFfMSIsICJFTU1DX0RBVEFfMiIsCisJCQkgICAgICAgIkVNTUNfREFUQV8zIiwgIkVNTUNfREFUQV80IiwgIkVNTUNfREFUQV81IiwKKwkJCSAgICAgICAiRU1NQ19EQVRBXzYiLCAiRU1NQ19EQVRBXzciLCAiRU1NQ19DTUQiOworCQkJaW5wdXQtZW5hYmxlOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzRtQT47CisJCQltZWRpYXRlayxwdWxsLXVwLWFkdiA9IDwxPjsJLyogcHVsbC11cCAxMEsgKi8KKwkJfTsKKwkJY29uZi1jbGsgeworCQkJcGlucyA9ICJFTU1DX0NLIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV82bUE+OworCQkJbWVkaWF0ZWsscHVsbC1kb3duLWFkdiA9IDwyPjsJLyogcHVsbC1kb3duIDUwSyAqLworCQl9OworCQljb25mLWRzIHsKKwkJCXBpbnMgPSAiRU1NQ19EU0wiOworCQkJbWVkaWF0ZWsscHVsbC1kb3duLWFkdiA9IDwyPjsJLyogcHVsbC1kb3duIDUwSyAqLworCQl9OworCQljb25mLXJzdCB7CisJCQlwaW5zID0gIkVNTUNfUlNUQiI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtdXAtYWR2ID0gPDE+OwkvKiBwdWxsLXVwIDEwSyAqLworCQl9OworCX07CisKKwl3Zl8yZ181Z19waW5zOiB3Zl8yZ181Zy1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gIndpZmkiOworCQkJZ3JvdXBzID0gIndmXzJnIiwgIndmXzVnIjsKKwkJfTsKKwkJY29uZiB7CisJCQlwaW5zID0gIldGMF9IQjEiLCAiV0YwX0hCMiIsICJXRjBfSEIzIiwgIldGMF9IQjQiLAorCQkJICAgICAgICJXRjBfSEIwIiwgIldGMF9IQjBfQiIsICJXRjBfSEI1IiwgIldGMF9IQjYiLAorCQkJICAgICAgICJXRjBfSEI3IiwgIldGMF9IQjgiLCAiV0YwX0hCOSIsICJXRjBfSEIxMCIsCisJCQkgICAgICAgIldGMF9UT1BfQ0xLIiwgIldGMF9UT1BfREFUQSIsICJXRjFfSEIxIiwKKwkJCSAgICAgICAiV0YxX0hCMiIsICJXRjFfSEIzIiwgIldGMV9IQjQiLCAiV0YxX0hCMCIsCisJCQkgICAgICAgIldGMV9IQjUiLCAiV0YxX0hCNiIsICJXRjFfSEI3IiwgIldGMV9IQjgiLAorCQkJICAgICAgICJXRjFfVE9QX0NMSyIsICJXRjFfVE9QX0RBVEEiOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzRtQT47CisJCX07CisJfTsKKworCXdmX2RiZGNfcGluczogd2ZfZGJkYy1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gIndpZmkiOworCQkJZ3JvdXBzID0gIndmX2RiZGMiOworCQl9OworCQljb25mIHsKKwkJCXBpbnMgPSAiV0YwX0hCMSIsICJXRjBfSEIyIiwgIldGMF9IQjMiLCAiV0YwX0hCNCIsCisJCQkgICAgICAgIldGMF9IQjAiLCAiV0YwX0hCMF9CIiwgIldGMF9IQjUiLCAiV0YwX0hCNiIsCisJCQkgICAgICAgIldGMF9IQjciLCAiV0YwX0hCOCIsICJXRjBfSEI5IiwgIldGMF9IQjEwIiwKKwkJCSAgICAgICAiV0YwX1RPUF9DTEsiLCAiV0YwX1RPUF9EQVRBIiwgIldGMV9IQjEiLAorCQkJICAgICAgICJXRjFfSEIyIiwgIldGMV9IQjMiLCAiV0YxX0hCNCIsICJXRjFfSEIwIiwKKwkJCSAgICAgICAiV0YxX0hCNSIsICJXRjFfSEI2IiwgIldGMV9IQjciLCAiV0YxX0hCOCIsCisJCQkgICAgICAgIldGMV9UT1BfQ0xLIiwgIldGMV9UT1BfREFUQSI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNG1BPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODZhLTI1MDB3YW4tc3BpbS1uYW5kLXJmYi5kdHMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTg2YS0yNTAwd2FuLXNwaW0tbmFuZC1yZmIuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MDQzNjkKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTg2YS0yNTAwd2FuLXNwaW0tbmFuZC1yZmIuZHRzCkBAIC0wLDAgKzEsMjgzIEBACisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDc5ODZhLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2YS1waW5jdHJsLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2LXNwaW0tbmFuZC1wYXJ0aXRpb24uZHRzaSIKKy8geworCW1vZGVsID0gIk1lZGlhVGVrIE1UNzk4NmEgUkZCIjsKKwljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4NmEtMjUwMHdhbi1zcGltLXNuYW5kLXJmYiI7CisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDBuMSBsb2dsZXZlbD04ICBcCisJCQkJZWFybHljb249dWFydDgyNTAsbW1pbzMyLDB4MTEwMDIwMDAiOworCX07CisKKwltZW1vcnkgeworCQlyZWcgPSA8MCAweDQwMDAwMDAwIDAgMHgxMDAwMDAwMD47CisJfTsKKworCXNvdW5kIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtd204OTYwLW1hY2hpbmUiOworCQltZWRpYXRlayxwbGF0Zm9ybSA9IDwmYWZlPjsKKwkJYXVkaW8tcm91dGluZyA9ICJIZWFkcGhvbmUiLCAiSFBfTCIsCisJCQkJIkhlYWRwaG9uZSIsICJIUF9SIiwKKwkJCQkiTElOUFVUMSIsICJBTUlDIiwKKwkJCQkiUklOUFVUMSIsICJBTUlDIjsKKwkJbWVkaWF0ZWssYXVkaW8tY29kZWMgPSA8JndtODk2MD47CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworfTsKKworJnB3bSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnB3bTBfcGluICZwd20xX3Bpbl9nMT47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0MV9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0Ml9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismaTJjMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmkyY19waW5zPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwl3bTg5NjA6IHdtODk2MEAxYSB7CisJCWNvbXBhdGlibGUgPSAid2xmLHdtODk2MCI7CisJCXJlZyA9IDwweDFhPjsKKwl9OworfTsKKworJmF1eGFkYyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJndhdGNoZG9nIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZXRoIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlnbWFjMDogbWFjQDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MD47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwlnbWFjMTogbWFjQDEgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MT47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwltZGlvOiBtZGlvLWJ1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlwaHk1OiBwaHlANSB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8NT47CisJCQlyZXNldC1ncGlvcyA9IDwmcGlvIDYgMT47CisJCQlyZXNldC1kZWFzc2VydC11cyA9IDwyMDAwMD47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCQlwaHk2OiBwaHlANiB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8Nj47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCQlzd2l0Y2hAMCB7CisJCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzUzMSI7CisJCQlyZWcgPSA8MzE+OworCQkJcmVzZXQtZ3Bpb3MgPSA8JnBpbyA1IDA+OworCisJCQlwb3J0cyB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCQlwb3J0QDAgeworCQkJCQlyZWcgPSA8MD47CisJCQkJCWxhYmVsID0gImxhbjAiOworCQkJCX07CisKKwkJCQlwb3J0QDEgeworCQkJCQlyZWcgPSA8MT47CisJCQkJCWxhYmVsID0gImxhbjEiOworCQkJCX07CisKKwkJCQlwb3J0QDIgeworCQkJCQlyZWcgPSA8Mj47CisJCQkJCWxhYmVsID0gImxhbjIiOworCQkJCX07CisKKwkJCQlwb3J0QDMgeworCQkJCQlyZWcgPSA8Mz47CisJCQkJCWxhYmVsID0gImxhbjMiOworCQkJCX07CisKKwkJCQlwb3J0QDQgeworCQkJCQlyZWcgPSA8ND47CisJCQkJCWxhYmVsID0gImxhbjQiOworCQkJCX07CisKKwkJCQlwb3J0QDUgeworCQkJCQlyZWcgPSA8NT47CisJCQkJCWxhYmVsID0gImxhbjUiOworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCisJCQkJcG9ydEA2IHsKKwkJCQkJcmVnID0gPDY+OworCQkJCQlsYWJlbCA9ICJjcHUiOworCQkJCQlldGhlcm5ldCA9IDwmZ21hYzA+OworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmhuYXQgeworCW10a2V0aC13YW4gPSAiZXRoMSI7CisJbXRrZXRoLWxhbiA9ICJsYW4iOworCW10a2V0aC1tYXgtZ21hYyA9IDwyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc3BpMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNwaV9mbGFzaF9waW5zPjsKKwljcy1ncGlvcyA9IDwwPiwgPDA+OworCXN0YXR1cyA9ICJva2F5IjsKKworCXNwaV9ub3JAMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJqZWRlYyxzcGktbm9yIjsKKwkJcmVnID0gPDA+OworCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDwyMDAwMDAwMD47CisJCXNwaS10eC1idXN3aWR0aCA9IDw0PjsKKwkJc3BpLXJ4LWJ1c3dpZHRoID0gPDQ+OworCX07CisKKwlzcGlfbmFuZDogc3BpX25hbmRAMSB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJzcGktbmFuZCI7CisJCXJlZyA9IDwxPjsKKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8MjAwMDAwMDA+OworCQlzcGktdHgtYnVzd2lkdGggPSA8ND47CisJCXNwaS1yeC1idXN3aWR0aCA9IDw0PjsKKwl9OworfTsKKworJnNwaTEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzcGljX3BpbnNfZzI+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwY2llMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBjaWUwX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ3YnN5cyB7CisJbWVkaWF0ZWssbXRkLWVlcHJvbSA9IDwmZmFjdG9yeSAweDAwMDA+OworCXN0YXR1cyA9ICJva2F5IjsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiLCAiZGJkYyI7CisJcGluY3RybC0wID0gPCZ3Zl8yZ181Z19waW5zPjsKKwlwaW5jdHJsLTEgPSA8JndmX2RiZGNfcGlucz47Cit9OworCismcGlvIHsKKwlzcGlfZmxhc2hfcGluczogc3BpLWZsYXNoLXBpbnMtMzMtdG8tMzggeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiZmxhc2giOworCQkJZ3JvdXBzID0gInNwaTAiLCAic3BpMF93cF9ob2xkIjsKKwkJfTsKKwkJY29uZi1wdSB7CisJCQlwaW5zID0gIlNQSTJfQ1MiLCAiU1BJMl9IT0xEIiwgIlNQSTJfV1AiOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzhtQT47CisJCQltZWRpYXRlayxwdWxsLXVwLWFkdiA9IDwwPjsJLyogYmlhcy1kaXNhYmxlICovCisJCX07CisJCWNvbmYtcGQgeworCQkJcGlucyA9ICJTUEkyX0NMSyIsICJTUEkyX01PU0kiLCAiU1BJMl9NSVNPIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV84bUE+OworCQkJbWVkaWF0ZWsscHVsbC1kb3duLWFkdiA9IDwwPjsJLyogYmlhcy1kaXNhYmxlICovCisJCX07CisJfTsKKworCXdmXzJnXzVnX3BpbnM6IHdmXzJnXzVnLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAid2lmaSI7CisJCQlncm91cHMgPSAid2ZfMmciLCAid2ZfNWciOworCQl9OworCQljb25mIHsKKwkJCXBpbnMgPSAiV0YwX0hCMSIsICJXRjBfSEIyIiwgIldGMF9IQjMiLCAiV0YwX0hCNCIsCisJCQkgICAgICAgIldGMF9IQjAiLCAiV0YwX0hCMF9CIiwgIldGMF9IQjUiLCAiV0YwX0hCNiIsCisJCQkgICAgICAgIldGMF9IQjciLCAiV0YwX0hCOCIsICJXRjBfSEI5IiwgIldGMF9IQjEwIiwKKwkJCSAgICAgICAiV0YwX1RPUF9DTEsiLCAiV0YwX1RPUF9EQVRBIiwgIldGMV9IQjEiLAorCQkJICAgICAgICJXRjFfSEIyIiwgIldGMV9IQjMiLCAiV0YxX0hCNCIsICJXRjFfSEIwIiwKKwkJCSAgICAgICAiV0YxX0hCNSIsICJXRjFfSEI2IiwgIldGMV9IQjciLCAiV0YxX0hCOCIsCisJCQkgICAgICAgIldGMV9UT1BfQ0xLIiwgIldGMV9UT1BfREFUQSI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNG1BPjsKKwkJfTsKKwl9OworCisJd2ZfZGJkY19waW5zOiB3Zl9kYmRjLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAid2lmaSI7CisJCQlncm91cHMgPSAid2ZfZGJkYyI7CisJCX07CisJCWNvbmYgeworCQkJcGlucyA9ICJXRjBfSEIxIiwgIldGMF9IQjIiLCAiV0YwX0hCMyIsICJXRjBfSEI0IiwKKwkJCSAgICAgICAiV0YwX0hCMCIsICJXRjBfSEIwX0IiLCAiV0YwX0hCNSIsICJXRjBfSEI2IiwKKwkJCSAgICAgICAiV0YwX0hCNyIsICJXRjBfSEI4IiwgIldGMF9IQjkiLCAiV0YwX0hCMTAiLAorCQkJICAgICAgICJXRjBfVE9QX0NMSyIsICJXRjBfVE9QX0RBVEEiLCAiV0YxX0hCMSIsCisJCQkgICAgICAgIldGMV9IQjIiLCAiV0YxX0hCMyIsICJXRjFfSEI0IiwgIldGMV9IQjAiLAorCQkJICAgICAgICJXRjFfSEI1IiwgIldGMV9IQjYiLCAiV0YxX0hCNyIsICJXRjFfSEI4IiwKKwkJCSAgICAgICAiV0YxX1RPUF9DTEsiLCAiV0YxX1RPUF9EQVRBIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV80bUE+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4NmEtMjUwMHdhbi1zcGltLW5vci1yZmIuZHRzIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4NmEtMjUwMHdhbi1zcGltLW5vci1yZmIuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZjIyZDEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTg2YS0yNTAwd2FuLXNwaW0tbm9yLXJmYi5kdHMKQEAgLTAsMCArMSwyMzUgQEAKKy9kdHMtdjEvOworI2luY2x1ZGUgIm10Nzk4NmEuZHRzaSIKKyNpbmNsdWRlICJtdDc5ODZhLXBpbmN0cmwuZHRzaSIKKyNpbmNsdWRlICJtdDc5ODYtc3BpbS1ub3ItcGFydGl0aW9uLmR0c2kiCisvIHsKKwltb2RlbCA9ICJNZWRpYVRlayBNVDc5ODZhIFJGQiI7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODZhLTI1MDB3YW4tbm9yLXJmYiI7CisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDBuMSBsb2dsZXZlbD04ICBcCisJCQkJZWFybHljb249dWFydDgyNTAsbW1pbzMyLDB4MTEwMDIwMDAiOworCX07CisKKwltZW1vcnkgeworCQlyZWcgPSA8MCAweDQwMDAwMDAwIDAgMHgxMDAwMDAwMD47CisJfTsKKworCXNvdW5kIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtd204OTYwLW1hY2hpbmUiOworCQltZWRpYXRlayxwbGF0Zm9ybSA9IDwmYWZlPjsKKwkJYXVkaW8tcm91dGluZyA9ICJIZWFkcGhvbmUiLCAiSFBfTCIsCisJCQkJIkhlYWRwaG9uZSIsICJIUF9SIiwKKwkJCQkiTElOUFVUMSIsICJBTUlDIiwKKwkJCQkiUklOUFVUMSIsICJBTUlDIjsKKwkJbWVkaWF0ZWssYXVkaW8tY29kZWMgPSA8JndtODk2MD47CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworfTsKKworJnB3bSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnB3bTBfcGluICZwd20xX3Bpbl9nMT47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0MV9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0Ml9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismaTJjMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmkyY19waW5zPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwl3bTg5NjA6IHdtODk2MEAxYSB7CisJCWNvbXBhdGlibGUgPSAid2xmLHdtODk2MCI7CisJCXJlZyA9IDwweDFhPjsKKwl9OworfTsKKworJmF1eGFkYyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJndhdGNoZG9nIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZXRoIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlnbWFjMDogbWFjQDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MD47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwlnbWFjMTogbWFjQDEgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MT47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwltZGlvOiBtZGlvLWJ1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlwaHk1OiBwaHlANSB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8NT47CisJCQlyZXNldC1ncGlvcyA9IDwmcGlvIDYgMT47CisJCQlyZXNldC1kZWFzc2VydC11cyA9IDwyMDAwMD47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCQlwaHk2OiBwaHlANiB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8Nj47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCQlzd2l0Y2hAMCB7CisJCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzUzMSI7CisJCQlyZWcgPSA8MzE+OworCQkJcmVzZXQtZ3Bpb3MgPSA8JnBpbyA1IDA+OworCisJCQlwb3J0cyB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCQlwb3J0QDAgeworCQkJCQlyZWcgPSA8MD47CisJCQkJCWxhYmVsID0gImxhbjAiOworCQkJCX07CisKKwkJCQlwb3J0QDEgeworCQkJCQlyZWcgPSA8MT47CisJCQkJCWxhYmVsID0gImxhbjEiOworCQkJCX07CisKKwkJCQlwb3J0QDIgeworCQkJCQlyZWcgPSA8Mj47CisJCQkJCWxhYmVsID0gImxhbjIiOworCQkJCX07CisKKwkJCQlwb3J0QDMgeworCQkJCQlyZWcgPSA8Mz47CisJCQkJCWxhYmVsID0gImxhbjMiOworCQkJCX07CisKKwkJCQlwb3J0QDQgeworCQkJCQlyZWcgPSA8ND47CisJCQkJCWxhYmVsID0gImxhbjQiOworCQkJCX07CisKKwkJCQlwb3J0QDUgeworCQkJCQlyZWcgPSA8NT47CisJCQkJCWxhYmVsID0gImxhbjUiOworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCisJCQkJcG9ydEA2IHsKKwkJCQkJcmVnID0gPDY+OworCQkJCQlsYWJlbCA9ICJjcHUiOworCQkJCQlldGhlcm5ldCA9IDwmZ21hYzA+OworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmhuYXQgeworCW10a2V0aC13YW4gPSAiZXRoMSI7CisJbXRrZXRoLWxhbiA9ICJsYW4iOworCW10a2V0aC1tYXgtZ21hYyA9IDwyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc3BpMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNwaV9mbGFzaF9waW5zPjsKKwljcy1ncGlvcyA9IDwwPiwgPDA+OworCXN0YXR1cyA9ICJva2F5IjsKKwlzcGlfbm9yQDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiamVkZWMsc3BpLW5vciI7CisJCXJlZyA9IDwwPjsKKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8NTIwMDAwMDA+OworCQlzcGktdHgtYnVzd2lkdGggPSA8ND47CisJCXNwaS1yeC1idXN3aWR0aCA9IDw0PjsKKwl9OworfTsKKworJnNwaTEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzcGljX3BpbnNfZzI+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwY2llMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBjaWUwX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ3YnN5cyB7CisJbWVkaWF0ZWssbXRkLWVlcHJvbSA9IDwmZmFjdG9yeSAweDAwMDA+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwaW8geworCXNwaV9mbGFzaF9waW5zOiBzcGktZmxhc2gtcGlucy0zMy10by0zOCB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJmbGFzaCI7CisJCQlncm91cHMgPSAic3BpMCIsICJzcGkwX3dwX2hvbGQiOworCQl9OworCQljb25mLXB1IHsKKwkJCXBpbnMgPSAiU1BJMl9DUyIsICJTUEkyX0hPTEQiLCAiU1BJMl9XUCI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfOG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtdXAtYWR2ID0gPDA+OwkvKiBiaWFzLWRpc2FibGUgKi8KKwkJfTsKKwkJY29uZi1wZCB7CisJCQlwaW5zID0gIlNQSTJfQ0xLIiwgIlNQSTJfTU9TSSIsICJTUEkyX01JU08iOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzhtQT47CisJCQltZWRpYXRlayxwdWxsLWRvd24tYWR2ID0gPDA+OwkvKiBiaWFzLWRpc2FibGUgKi8KKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODZhLWVtbWMtcmZiLmR0cyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODZhLWVtbWMtcmZiLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGFlMGIwCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4NmEtZW1tYy1yZmIuZHRzCkBAIC0wLDAgKzEsMjk3IEBACisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDc5ODZhLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2YS1waW5jdHJsLmR0c2kiCisvIHsKKwltb2RlbCA9ICJNZWRpYVRlayBNVDc5ODZhIFJGQiI7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODZhLWVtbWMtcmZiIjsKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG4xIGxvZ2xldmVsPTggIFwKKwkJCQllYXJseWNvbj11YXJ0ODI1MCxtbWlvMzIsMHgxMTAwMjAwMCBcCisJCQkJcm9vdD1QQVJUTEFCRUw9cm9vdGZzIHJvb3R3YWl0IHJvb3Rmc3R5cGU9c3F1YXNoZnMsZjJmcyI7CisJfTsKKworCW1lbW9yeSB7CisJCXJlZyA9IDwwIDB4NDAwMDAwMDAgMCAweDEwMDAwMDAwPjsKKwl9OworCisJcmVnXzFwOHY6IHJlZ3VsYXRvci0xcDh2IHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJmaXhlZC0xLjhWIjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE4MDAwMDA+OworCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwl9OworCisJcmVnXzNwM3Y6IHJlZ3VsYXRvci0zcDN2IHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJmaXhlZC0zLjNWIjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwl9OworCisJc291bmRfd204OTYwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5eHgtd204OTYwLW1hY2hpbmUiOworCQltZWRpYXRlayxwbGF0Zm9ybSA9IDwmYWZlPjsKKwkJYXVkaW8tcm91dGluZyA9ICJIZWFkcGhvbmUiLCAiSFBfTCIsCisJCQkJIkhlYWRwaG9uZSIsICJIUF9SIiwKKwkJCQkiTElOUFVUMSIsICJBTUlDIiwKKwkJCQkiUklOUFVUMSIsICJBTUlDIjsKKwkJbWVkaWF0ZWssYXVkaW8tY29kZWMgPSA8JndtODk2MD47CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworCisJc291bmRfc2kzMjE4eCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OXh4LXNpMzIxOHgtbWFjaGluZSI7CisJCW1lZGlhdGVrLHBsYXRmb3JtID0gPCZhZmU+OworCQltZWRpYXRlayxleHQtY29kZWMgPSA8JnByb3NsaWNfc3BpPjsKKwkJc3RhdHVzID0gIm9rYXkiOworCX07Cit9OworCismcHdtIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcHdtMF9waW4gJnB3bTFfcGluX2cxPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1YXJ0MSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnVhcnQxX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1YXJ0MiB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnVhcnQyX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZpMmMwIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmaTJjX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKKworCXdtODk2MDogd204OTYwQDFhIHsKKwkJY29tcGF0aWJsZSA9ICJ3bGYsd204OTYwIjsKKwkJcmVnID0gPDB4MWE+OworCX07Cit9OworCismYXV4YWRjIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismd2F0Y2hkb2cgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZldGggeworCXN0YXR1cyA9ICJva2F5IjsKKworCWdtYWMwOiBtYWNAMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssZXRoLW1hYyI7CisJCXJlZyA9IDwwPjsKKwkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKwkJZml4ZWQtbGluayB7CisJCQlzcGVlZCA9IDwyNTAwPjsKKwkJCWZ1bGwtZHVwbGV4OworCQkJcGF1c2U7CisJCX07CisJfTsKKworCWdtYWMxOiBtYWNAMSB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssZXRoLW1hYyI7CisJCXJlZyA9IDwxPjsKKwkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKwkJZml4ZWQtbGluayB7CisJCQlzcGVlZCA9IDwyNTAwPjsKKwkJCWZ1bGwtZHVwbGV4OworCQkJcGF1c2U7CisJCX07CisJfTsKKworCW1kaW86IG1kaW8tYnVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCXBoeTU6IHBoeUA1IHsKKwkJCWNvbXBhdGlibGUgPSAiZXRoZXJuZXQtcGh5LWlkNjdjOS5kZTBhIjsKKwkJCXJlZyA9IDw1PjsKKwkJCXJlc2V0LWdwaW9zID0gPCZwaW8gNiAxPjsKKwkJCXJlc2V0LWRlYXNzZXJ0LXVzID0gPDIwMDAwPjsKKwkJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCQl9OworCisJCXBoeTY6IHBoeUA2IHsKKwkJCWNvbXBhdGlibGUgPSAiZXRoZXJuZXQtcGh5LWlkNjdjOS5kZTBhIjsKKwkJCXJlZyA9IDw2PjsKKwkJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCQl9OworCisJCXN3aXRjaEAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NTMxIjsKKwkJCXJlZyA9IDwzMT47CisJCQlyZXNldC1ncGlvcyA9IDwmcGlvIDUgMD47CisKKwkJCXBvcnRzIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJCXBvcnRAMCB7CisJCQkJCXJlZyA9IDwwPjsKKwkJCQkJbGFiZWwgPSAibGFuMCI7CisJCQkJfTsKKworCQkJCXBvcnRAMSB7CisJCQkJCXJlZyA9IDwxPjsKKwkJCQkJbGFiZWwgPSAibGFuMSI7CisJCQkJfTsKKworCQkJCXBvcnRAMiB7CisJCQkJCXJlZyA9IDwyPjsKKwkJCQkJbGFiZWwgPSAibGFuMiI7CisJCQkJfTsKKworCQkJCXBvcnRAMyB7CisJCQkJCXJlZyA9IDwzPjsKKwkJCQkJbGFiZWwgPSAibGFuMyI7CisJCQkJfTsKKworCQkJCXBvcnRANiB7CisJCQkJCXJlZyA9IDw2PjsKKwkJCQkJbGFiZWwgPSAiY3B1IjsKKwkJCQkJZXRoZXJuZXQgPSA8JmdtYWMwPjsKKwkJCQkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKwkJCQkJZml4ZWQtbGluayB7CisJCQkJCQlzcGVlZCA9IDwyNTAwPjsKKwkJCQkJCWZ1bGwtZHVwbGV4OworCQkJCQkJcGF1c2U7CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZobmF0IHsKKwltdGtldGgtd2FuID0gImV0aDEiOworCW10a2V0aC1sYW4gPSAibGFuIjsKKwltdGtldGgtbWF4LWdtYWMgPSA8Mj47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnNwaTEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzcGljX3BpbnNfZzI+OworCXN0YXR1cyA9ICJva2F5IjsKKworCXByb3NsaWNfc3BpOiBwcm9zbGljX3NwaUAwIHsKKwkJY29tcGF0aWJsZSA9ICJzaWxhYnMscHJvc2xpY19zcGkiOworCQlyZWcgPSA8MD47CisJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDEwMDAwMDAwPjsKKwkJc3BpLWNwaGEgPSA8MT47CisJCXNwaS1jcG9sID0gPDE+OworCQljaGFubmVsX2NvdW50ID0gPDE+OworCQlkZWJ1Z19sZXZlbCA9IDw0PjsgICAgICAgLyogMSA9IFRSQywgMiA9IERCRywgNCA9IEVSUiAqLworCQlyZXNldF9ncGlvID0gPCZwaW8gNyAwPjsKKwkJaWcsZW5hYmxlLXNwaSA9IDwxPjsgICAgIC8qIDE6IEVuYWJsZSwgMDogRGlzYWJsZSAqLworCX07Cit9OworCismbW1jMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgInN0YXRlX3VocyI7CisJcGluY3RybC0wID0gPCZtbWMwX3BpbnNfZGVmYXVsdD47CisJcGluY3RybC0xID0gPCZtbWMwX3BpbnNfdWhzPjsKKwlidXMtd2lkdGggPSA8OD47CisJbWF4LWZyZXF1ZW5jeSA9IDwyMDAwMDAwMDA+OworCWNhcC1tbWMtaGlnaHNwZWVkOworCW1tYy1oczIwMC0xXzh2OworCW1tYy1oczQwMC0xXzh2OworCWhzNDAwLWRzLWRlbGF5ID0gPDB4MTQwMTQ+OworCXZtbWMtc3VwcGx5ID0gPCZyZWdfM3Azdj47CisJdnFtbWMtc3VwcGx5ID0gPCZyZWdfMXA4dj47CisJbm9uLXJlbW92YWJsZTsKKwluby1zZDsKKwluby1zZGlvOworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwY2llMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBjaWUwX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ3YnN5cyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnBpbyB7CisJbW1jMF9waW5zX2RlZmF1bHQ6IG1tYzAtcGlucy01MC10by02MS1kZWZhdWx0IHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJlbW1jXzUxIjsKKwkJfTsKKwkJY29uZi1jbWQtZGF0IHsKKwkJCXBpbnMgPSAiRU1NQ19EQVRBXzAiLCAiRU1NQ19EQVRBXzEiLCAiRU1NQ19EQVRBXzIiLAorCQkJICAgICAgICJFTU1DX0RBVEFfMyIsICJFTU1DX0RBVEFfNCIsICJFTU1DX0RBVEFfNSIsCisJCQkgICAgICAgIkVNTUNfREFUQV82IiwgIkVNTUNfREFUQV83IiwgIkVNTUNfQ01EIjsKKwkJCWlucHV0LWVuYWJsZTsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV80bUE+OworCQkJbWVkaWF0ZWsscHVsbC11cC1hZHYgPSA8MT47CS8qIHB1bGwtdXAgMTBLICovCisJCX07CisJCWNvbmYtY2xrIHsKKwkJCXBpbnMgPSAiRU1NQ19DSyI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNm1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtZG93bi1hZHYgPSA8Mj47CS8qIHB1bGwtZG93biA1MEsgKi8KKwkJfTsKKwkJY29uZi1kcyB7CisJCQlwaW5zID0gIkVNTUNfRFNMIjsKKwkJCW1lZGlhdGVrLHB1bGwtZG93bi1hZHYgPSA8Mj47CS8qIHB1bGwtZG93biA1MEsgKi8KKwkJfTsKKwkJY29uZi1yc3QgeworCQkJcGlucyA9ICJFTU1DX1JTVEIiOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzRtQT47CisJCQltZWRpYXRlayxwdWxsLXVwLWFkdiA9IDwxPjsJLyogcHVsbC11cCAxMEsgKi8KKwkJfTsKKwl9OworCisJbW1jMF9waW5zX3VoczogbW1jMC1waW5zLTUwLXRvLTYxLXVocyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJmbGFzaCI7CisJCQlncm91cHMgPSAiZW1tY181MSI7CisJCX07CisJCWNvbmYtY21kLWRhdCB7CisJCQlwaW5zID0gIkVNTUNfREFUQV8wIiwgIkVNTUNfREFUQV8xIiwgIkVNTUNfREFUQV8yIiwKKwkJCSAgICAgICAiRU1NQ19EQVRBXzMiLCAiRU1NQ19EQVRBXzQiLCAiRU1NQ19EQVRBXzUiLAorCQkJICAgICAgICJFTU1DX0RBVEFfNiIsICJFTU1DX0RBVEFfNyIsICJFTU1DX0NNRCI7CisJCQlpbnB1dC1lbmFibGU7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtdXAtYWR2ID0gPDE+OwkvKiBwdWxsLXVwIDEwSyAqLworCQl9OworCQljb25mLWNsayB7CisJCQlwaW5zID0gIkVNTUNfQ0siOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzZtQT47CisJCQltZWRpYXRlayxwdWxsLWRvd24tYWR2ID0gPDI+OwkvKiBwdWxsLWRvd24gNTBLICovCisJCX07CisJCWNvbmYtZHMgeworCQkJcGlucyA9ICJFTU1DX0RTTCI7CisJCQltZWRpYXRlayxwdWxsLWRvd24tYWR2ID0gPDI+OwkvKiBwdWxsLWRvd24gNTBLICovCisJCX07CisJCWNvbmYtcnN0IHsKKwkJCXBpbnMgPSAiRU1NQ19SU1RCIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV80bUE+OworCQkJbWVkaWF0ZWsscHVsbC11cC1hZHYgPSA8MT47CS8qIHB1bGwtdXAgMTBLICovCisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTg2YS1waW5jdHJsLmR0c2kgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTg2YS1waW5jdHJsLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI2MTlhMQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODZhLXBpbmN0cmwuZHRzaQpAQCAtMCwwICsxLDE0MSBAQAorJnBpbyB7CisJd2lmaV9sZWRfcGluczogd2lmaV9sZWQtcGlucy0xLTIgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAibGVkIjsKKwkJCWdyb3VwcyA9ICJ3aWZpX2xlZCI7CisJCX07CisJfTsKKworCWkyY19waW5zOiBpMmMtcGlucy0zLTQgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiaTJjIjsKKwkJCWdyb3VwcyA9ICJpMmMiOworCQl9OworCX07CisKKwl1YXJ0MV9waW5zX2cwOiB1YXJ0MS1waW5zLTctdG8tMTAgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAidWFydCI7CisJCQlncm91cHMgPSAidWFydDFfMCI7CisJCX07CisJfTsKKworCXBjaWUwX3BpbnM6IHBjaWUwLXBpbnMtOS0xMC00MSB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJwY2llIjsKKwkJCWdyb3VwcyA9ICJwY2llX2NsayIsICJwY2llX3dha2UiLCAicGNpZV9wZXJlc2V0IjsKKwkJfTsKKwl9OworCisJanRhZ19waW5zOiBqdGFnLXBpbnMtMTEtdG8tMTQgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAianRhZyI7CisJCQlncm91cHMgPSAianRhZyI7CisJCX07CisJfTsKKworCXNwaWNfcGluc19nMDogc3BpYy1waW5zLTExLXRvLTE0IHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInNwaSI7CisJCQlncm91cHMgPSAic3BpMV8wIjsKKwkJfTsKKwl9OworCisJcHdtMV9waW5fZzA6IHB3bTEtcGluLTIwIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInB3bSI7CisJCQlncm91cHMgPSAicHdtMV8xIjsKKwkJfTsKKwl9OworCisJcHdtMF9waW46IHB3bTAtcGluLTIxIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInB3bSI7CisJCQlncm91cHMgPSAicHdtMCI7CisJCX07CisJfTsKKworCXB3bTFfcGluX2cxOiBwd20xLXBpbi0yMiB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJwd20iOworCQkJZ3JvdXBzID0gInB3bTFfMCI7CisJCX07CisJfTsKKworCXNwaWNfcGluc19nMTogc3BpYy1waW5zLTIzLXRvLTI2IHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInNwaSI7CisJCQlncm91cHMgPSAic3BpMV8xIjsKKwkJfTsKKwl9OworCisJdWFydDFfcGluc19nMTogdWFydDEtcGlucy0yMy10by0yNiB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJ1YXJ0IjsKKwkJCWdyb3VwcyA9ICJ1YXJ0MV8xIjsKKwkJfTsKKwl9OworCisJc3BpY19waW5zX2cyOiBzcGljLXBpbnMtMjktdG8tMzIgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAic3BpIjsKKwkJCWdyb3VwcyA9ICJzcGkxXzIiOworCQl9OworCX07CisKKwl1YXJ0MV9waW5zX2cyOiB1YXJ0MS1waW5zLTI5LXRvLTMyIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInVhcnQiOworCQkJZ3JvdXBzID0gInVhcnQxXzIiOworCQl9OworCX07CisKKwl1YXJ0Ml9waW5zX2cwOiB1YXJ0MS1waW5zLTI5LXRvLTMyIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInVhcnQiOworCQkJZ3JvdXBzID0gInVhcnQxXzIiOworCQl9OworCX07CisKKwl1YXJ0Ml9waW5zX2cxOiB1YXJ0MS1waW5zLTIzLXRvLTM2IHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInVhcnQiOworCQkJZ3JvdXBzID0gInVhcnQyXzEiOworCQl9OworCX07CisKKwlzcGljX3BpbnNfZzM6IHNwaWMtcGlucy0zMy10by0zNiB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJzcGkiOworCQkJZ3JvdXBzID0gInNwaTFfMyI7CisJCX07CisJfTsKKworCXVhcnQxX3BpbnNfZzM6IHVhcnQxLXBpbnMtMzUtdG8tMzggeworCQltdXggeworCQkJZnVuY3Rpb24gPSAidWFydCI7CisJCQlncm91cHMgPSAidWFydDFfM19yeF90eCIsICJ1YXJ0MV8zX2N0c19ydHMiOworCQl9OworCX07CisKKwl1YXJ0MV9waW5zOiB1YXJ0MS1waW5zLTQyLXRvLTQ1IHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInVhcnQiOworCQkJZ3JvdXBzID0gInVhcnQxIjsKKwkJfTsKKwl9OworCisJdWFydDJfcGluczogdWFydDEtcGlucy00Ni10by00OSB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJ1YXJ0IjsKKwkJCWdyb3VwcyA9ICJ1YXJ0MiI7CisJCX07CisJfTsKKworCXBjbV9waW5zOiBwY20tcGlucy02Mi10by02NSB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJwY20iOworCQkJZ3JvdXBzID0gInBjbSI7CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTg2YS1zbmZpLW5hbmQtcmZiLmR0cyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODZhLXNuZmktbmFuZC1yZmIuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNjQwMzgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTg2YS1zbmZpLW5hbmQtcmZiLmR0cwpAQCAtMCwwICsxLDIzOSBAQAorL2R0cy12MS87CisjaW5jbHVkZSAibXQ3OTg2YS5kdHNpIgorI2luY2x1ZGUgIm10Nzk4NmEtcGluY3RybC5kdHNpIgorI2luY2x1ZGUgIm10Nzk4Ni1zbmZpLW5hbmQtcGFydGl0aW9uLmR0c2kiCisvIHsKKwltb2RlbCA9ICJNZWRpYVRlayBNVDc5ODZhIFJGQiI7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODZhLXNuZmktc25hbmQtcmZiIjsKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG4xIGxvZ2xldmVsPTggIFwKKwkJCQllYXJseWNvbj11YXJ0ODI1MCxtbWlvMzIsMHgxMTAwMjAwMCI7CisJfTsKKworCW1lbW9yeSB7CisJCXJlZyA9IDwwIDB4NDAwMDAwMDAgMCAweDEwMDAwMDAwPjsKKwl9OworCisJc291bmRfd204OTYwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5eHgtd204OTYwLW1hY2hpbmUiOworCQltZWRpYXRlayxwbGF0Zm9ybSA9IDwmYWZlPjsKKwkJYXVkaW8tcm91dGluZyA9ICJIZWFkcGhvbmUiLCAiSFBfTCIsCisJCQkJIkhlYWRwaG9uZSIsICJIUF9SIiwKKwkJCQkiTElOUFVUMSIsICJBTUlDIiwKKwkJCQkiUklOUFVUMSIsICJBTUlDIjsKKwkJbWVkaWF0ZWssYXVkaW8tY29kZWMgPSA8JndtODk2MD47CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworCisJc291bmRfc2kzMjE4eCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OXh4LXNpMzIxOHgtbWFjaGluZSI7CisJCW1lZGlhdGVrLHBsYXRmb3JtID0gPCZhZmU+OworCQltZWRpYXRlayxleHQtY29kZWMgPSA8JnByb3NsaWNfc3BpPjsKKwkJc3RhdHVzID0gIm9rYXkiOworCX07Cit9OworCismcHdtIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcHdtMF9waW4gJnB3bTFfcGluX2cxPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1YXJ0MSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnVhcnQxX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1YXJ0MiB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnVhcnQyX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZpMmMwIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmaTJjX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKKworCXdtODk2MDogd204OTYwQDFhIHsKKwkJY29tcGF0aWJsZSA9ICJ3bGYsd204OTYwIjsKKwkJcmVnID0gPDB4MWE+OworCX07Cit9OworCismYXV4YWRjIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismd2F0Y2hkb2cgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZldGggeworCXN0YXR1cyA9ICJva2F5IjsKKworCWdtYWMwOiBtYWNAMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssZXRoLW1hYyI7CisJCXJlZyA9IDwwPjsKKwkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKwkJZml4ZWQtbGluayB7CisJCQlzcGVlZCA9IDwyNTAwPjsKKwkJCWZ1bGwtZHVwbGV4OworCQkJcGF1c2U7CisJCX07CisJfTsKKworCWdtYWMxOiBtYWNAMSB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssZXRoLW1hYyI7CisJCXJlZyA9IDwxPjsKKwkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKwkJZml4ZWQtbGluayB7CisJCQlzcGVlZCA9IDwyNTAwPjsKKwkJCWZ1bGwtZHVwbGV4OworCQkJcGF1c2U7CisJCX07CisJfTsKKworCW1kaW86IG1kaW8tYnVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCXBoeTU6IHBoeUA1IHsKKwkJCWNvbXBhdGlibGUgPSAiZXRoZXJuZXQtcGh5LWlkNjdjOS5kZTBhIjsKKwkJCXJlZyA9IDw1PjsKKwkJCXJlc2V0LWdwaW9zID0gPCZwaW8gNiAxPjsKKwkJCXJlc2V0LWRlYXNzZXJ0LXVzID0gPDIwMDAwPjsKKwkJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCQl9OworCisJCXBoeTY6IHBoeUA2IHsKKwkJCWNvbXBhdGlibGUgPSAiZXRoZXJuZXQtcGh5LWlkNjdjOS5kZTBhIjsKKwkJCXJlZyA9IDw2PjsKKwkJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCQl9OworCisJCXN3aXRjaEAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NTMxIjsKKwkJCXJlZyA9IDwzMT47CisJCQlyZXNldC1ncGlvcyA9IDwmcGlvIDUgMD47CisKKwkJCXBvcnRzIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJCXBvcnRAMCB7CisJCQkJCXJlZyA9IDwwPjsKKwkJCQkJbGFiZWwgPSAibGFuMCI7CisJCQkJfTsKKworCQkJCXBvcnRAMSB7CisJCQkJCXJlZyA9IDwxPjsKKwkJCQkJbGFiZWwgPSAibGFuMSI7CisJCQkJfTsKKworCQkJCXBvcnRAMiB7CisJCQkJCXJlZyA9IDwyPjsKKwkJCQkJbGFiZWwgPSAibGFuMiI7CisJCQkJfTsKKworCQkJCXBvcnRAMyB7CisJCQkJCXJlZyA9IDwzPjsKKwkJCQkJbGFiZWwgPSAibGFuMyI7CisJCQkJfTsKKworCQkJCXBvcnRANiB7CisJCQkJCXJlZyA9IDw2PjsKKwkJCQkJbGFiZWwgPSAiY3B1IjsKKwkJCQkJZXRoZXJuZXQgPSA8JmdtYWMwPjsKKwkJCQkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKwkJCQkJZml4ZWQtbGluayB7CisJCQkJCQlzcGVlZCA9IDwyNTAwPjsKKwkJCQkJCWZ1bGwtZHVwbGV4OworCQkJCQkJcGF1c2U7CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZobmF0IHsKKwltdGtldGgtd2FuID0gImV0aDEiOworCW10a2V0aC1sYW4gPSAibGFuIjsKKwltdGtldGgtbWF4LWdtYWMgPSA8Mj47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnNuYW5kIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc25maV9waW5zPjsKKwltZWRpYXRlayxxdWFkLXNwaTsKKwlzdGF0dXMgPSAib2theSI7CisKKwlwYXJ0aXRpb25zIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1wYXJ0aXRpb25zIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCX07Cit9OworCismc3BpMSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNwaWNfcGluc19nMj47CisJc3RhdHVzID0gIm9rYXkiOworCisJcHJvc2xpY19zcGk6IHByb3NsaWNfc3BpQDAgeworCQljb21wYXRpYmxlID0gInNpbGFicyxwcm9zbGljX3NwaSI7CisJCXJlZyA9IDwwPjsKKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8MTAwMDAwMDA+OworCQlzcGktY3BoYSA9IDwxPjsKKwkJc3BpLWNwb2wgPSA8MT47CisJCWNoYW5uZWxfY291bnQgPSA8MT47CisJCWRlYnVnX2xldmVsID0gPDQ+OyAgICAgICAvKiAxID0gVFJDLCAyID0gREJHLCA0ID0gRVJSICovCisJCXJlc2V0X2dwaW8gPSA8JnBpbyA3IDA+OworCQlpZyxlbmFibGUtc3BpID0gPDE+OyAgICAgLyogMTogRW5hYmxlLCAwOiBEaXNhYmxlICovCisJfTsKK307CisKKyZwY2llMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnBjaWUwX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ3YnN5cyB7CisJbWVkaWF0ZWssbXRkLWVlcHJvbSA9IDwmZmFjdG9yeSAweDAwMDA+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwaW8geworCXNuZmlfcGluczogc25maS1waW5zLTIzLXRvLTI4IHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJzbmZpIjsKKwkJfTsKKwkJY29uZi1jbGsgeworCQkJcGlucyA9ICJTUEkwX0NMSyI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfOG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtZG93bi1hZHYgPSA8MD47CS8qIGJpYXMtZGlzYWJsZSAqLworCQl9OworCQljb25mLXB1IHsKKwkJCXBpbnMgPSAiU1BJMF9DUyIsICJTUEkwX0hPTEQiLCAiU1BJMF9XUCI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNm1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtdXAtYWR2ID0gPDA+OwkvKiBiaWFzLWRpc2FibGUgKi8KKwkJfTsKKwkJY29uZi1wZCB7CisJCQlwaW5zID0gIlNQSTBfTU9TSSIsICJTUEkwX01JU08iOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzZtQT47CisJCQltZWRpYXRlayxwdWxsLWRvd24tYWR2ID0gPDA+OwkvKiBiaWFzLWRpc2FibGUgKi8KKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODZhLXNwaW0tbmFuZC1yZmIuZHRzIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4NmEtc3BpbS1uYW5kLXJmYi5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAzYmM0YQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODZhLXNwaW0tbmFuZC1yZmIuZHRzCkBAIC0wLDAgKzEsMjg1IEBACisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDc5ODZhLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2YS1waW5jdHJsLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2LXNwaW0tbmFuZC1wYXJ0aXRpb24uZHRzaSIKKy8geworCW1vZGVsID0gIk1lZGlhVGVrIE1UNzk4NmEgUkZCIjsKKwljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4NmEtc3BpbS1zbmFuZC1yZmIiOworCWNob3NlbiB7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwbjEgbG9nbGV2ZWw9OCAgXAorCQkJCWVhcmx5Y29uPXVhcnQ4MjUwLG1taW8zMiwweDExMDAyMDAwIjsKKwl9OworCisJbWVtb3J5IHsKKwkJcmVnID0gPDAgMHg0MDAwMDAwMCAwIDB4MTAwMDAwMDA+OworCX07CisKKwlzb3VuZF93bTg5NjAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzl4eC13bTg5NjAtbWFjaGluZSI7CisJCW1lZGlhdGVrLHBsYXRmb3JtID0gPCZhZmU+OworCQlhdWRpby1yb3V0aW5nID0gIkhlYWRwaG9uZSIsICJIUF9MIiwKKwkJCQkiSGVhZHBob25lIiwgIkhQX1IiLAorCQkJCSJMSU5QVVQxIiwgIkFNSUMiLAorCQkJCSJSSU5QVVQxIiwgIkFNSUMiOworCQltZWRpYXRlayxhdWRpby1jb2RlYyA9IDwmd204OTYwPjsKKwkJc3RhdHVzID0gIm9rYXkiOworCX07CisKKwlzb3VuZF9zaTMyMTh4IHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5eHgtc2kzMjE4eC1tYWNoaW5lIjsKKwkJbWVkaWF0ZWsscGxhdGZvcm0gPSA8JmFmZT47CisJCW1lZGlhdGVrLGV4dC1jb2RlYyA9IDwmcHJvc2xpY19zcGk+OworCQlzdGF0dXMgPSAib2theSI7CisJfTsKK307CisKKyZwd20geworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwd20wX3BpbiAmcHdtMV9waW5fZzE+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1YXJ0MCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmdWFydDFfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnVhcnQyIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmdWFydDJfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmkyYzAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZpMmNfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworCisJd204OTYwOiB3bTg5NjBAMWEgeworCQljb21wYXRpYmxlID0gIndsZix3bTg5NjAiOworCQlyZWcgPSA8MHgxYT47CisJfTsKK307CisKKyZhdXhhZGMgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ3YXRjaGRvZyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmV0aCB7CisJc3RhdHVzID0gIm9rYXkiOworCisJZ21hYzA6IG1hY0AwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKwkJcmVnID0gPDA+OworCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQlmaXhlZC1saW5rIHsKKwkJCXNwZWVkID0gPDI1MDA+OworCQkJZnVsbC1kdXBsZXg7CisJCQlwYXVzZTsKKwkJfTsKKwl9OworCisJZ21hYzE6IG1hY0AxIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKwkJcmVnID0gPDE+OworCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQlmaXhlZC1saW5rIHsKKwkJCXNwZWVkID0gPDI1MDA+OworCQkJZnVsbC1kdXBsZXg7CisJCQlwYXVzZTsKKwkJfTsKKwl9OworCisJbWRpbzogbWRpby1idXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJcGh5NTogcGh5QDUgeworCQkJY29tcGF0aWJsZSA9ICJldGhlcm5ldC1waHktaWQ2N2M5LmRlMGEiOworCQkJcmVnID0gPDU+OworCQkJcmVzZXQtZ3Bpb3MgPSA8JnBpbyA2IDE+OworCQkJcmVzZXQtZGVhc3NlcnQtdXMgPSA8MjAwMDA+OworCQkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisJCX07CisKKwkJcGh5NjogcGh5QDYgeworCQkJY29tcGF0aWJsZSA9ICJldGhlcm5ldC1waHktaWQ2N2M5LmRlMGEiOworCQkJcmVnID0gPDY+OworCQkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisJCX07CisKKwkJc3dpdGNoQDAgeworCQkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc1MzEiOworCQkJcmVnID0gPDMxPjsKKwkJCXJlc2V0LWdwaW9zID0gPCZwaW8gNSAwPjsKKworCQkJcG9ydHMgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQkJcG9ydEAwIHsKKwkJCQkJcmVnID0gPDA+OworCQkJCQlsYWJlbCA9ICJsYW4wIjsKKwkJCQl9OworCisJCQkJcG9ydEAxIHsKKwkJCQkJcmVnID0gPDE+OworCQkJCQlsYWJlbCA9ICJsYW4xIjsKKwkJCQl9OworCisJCQkJcG9ydEAyIHsKKwkJCQkJcmVnID0gPDI+OworCQkJCQlsYWJlbCA9ICJsYW4yIjsKKwkJCQl9OworCisJCQkJcG9ydEAzIHsKKwkJCQkJcmVnID0gPDM+OworCQkJCQlsYWJlbCA9ICJsYW4zIjsKKwkJCQl9OworCisJCQkJcG9ydEA2IHsKKwkJCQkJcmVnID0gPDY+OworCQkJCQlsYWJlbCA9ICJjcHUiOworCQkJCQlldGhlcm5ldCA9IDwmZ21hYzA+OworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmhuYXQgeworCW10a2V0aC13YW4gPSAiZXRoMSI7CisJbXRrZXRoLWxhbiA9ICJsYW4iOworCW10a2V0aC1tYXgtZ21hYyA9IDwyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc3BpMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNwaV9mbGFzaF9waW5zPjsKKwljcy1ncGlvcyA9IDwwPiwgPDA+OworCXN0YXR1cyA9ICJva2F5IjsKKworCXNwaV9ub3JAMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJqZWRlYyxzcGktbm9yIjsKKwkJcmVnID0gPDA+OworCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDw1MjAwMDAwMD47CisJCXNwaS10eC1idXN3aWR0aCA9IDw0PjsKKwkJc3BpLXJ4LWJ1c3dpZHRoID0gPDQ+OworCX07CisKKwlzcGlfbmFuZDogc3BpX25hbmRAMSB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJzcGktbmFuZCI7CisJCXJlZyA9IDwxPjsKKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8NTIwMDAwMDA+OworCQlzcGktdHgtYnVzd2lkdGggPSA8ND47CisJCXNwaS1yeC1idXN3aWR0aCA9IDw0PjsKKwl9OworfTsKKworJnNwaTEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzcGljX3BpbnNfZzI+OworCXN0YXR1cyA9ICJva2F5IjsKKworCXByb3NsaWNfc3BpOiBwcm9zbGljX3NwaUAwIHsKKwkJY29tcGF0aWJsZSA9ICJzaWxhYnMscHJvc2xpY19zcGkiOworCQlyZWcgPSA8MD47CisJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDEwMDAwMDAwPjsKKwkJc3BpLWNwaGEgPSA8MT47CisJCXNwaS1jcG9sID0gPDE+OworCQljaGFubmVsX2NvdW50ID0gPDE+OworCQlkZWJ1Z19sZXZlbCA9IDw0PjsgICAgICAgLyogMSA9IFRSQywgMiA9IERCRywgNCA9IEVSUiAqLworCQlyZXNldF9ncGlvID0gPCZwaW8gNyAwPjsKKwkJaWcsZW5hYmxlLXNwaSA9IDwxPjsgICAgIC8qIDE6IEVuYWJsZSwgMDogRGlzYWJsZSAqLworCX07Cit9OworCismcGNpZTAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwY2llMF9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismd2JzeXMgeworCW1lZGlhdGVrLG10ZC1lZXByb20gPSA8JmZhY3RvcnkgMHgwMDAwPjsKKwlzdGF0dXMgPSAib2theSI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgImRiZGMiOworCXBpbmN0cmwtMCA9IDwmd2ZfMmdfNWdfcGlucz47CisJcGluY3RybC0xID0gPCZ3Zl9kYmRjX3BpbnM+OworfTsKKworJnBpbyB7CisJc3BpX2ZsYXNoX3BpbnM6IHNwaS1mbGFzaC1waW5zLTMzLXRvLTM4IHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJzcGkwIiwgInNwaTBfd3BfaG9sZCI7CisJCX07CisJCWNvbmYtcHUgeworCQkJcGlucyA9ICJTUEkyX0NTIiwgIlNQSTJfSE9MRCIsICJTUEkyX1dQIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV84bUE+OworCQkJbWVkaWF0ZWsscHVsbC11cC1hZHYgPSA8MD47CS8qIGJpYXMtZGlzYWJsZSAqLworCQl9OworCQljb25mLXBkIHsKKwkJCXBpbnMgPSAiU1BJMl9DTEsiLCAiU1BJMl9NT1NJIiwgIlNQSTJfTUlTTyI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfOG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtZG93bi1hZHYgPSA8MD47CS8qIGJpYXMtZGlzYWJsZSAqLworCQl9OworCX07CisKKwl3Zl8yZ181Z19waW5zOiB3Zl8yZ181Zy1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gIndpZmkiOworCQkJZ3JvdXBzID0gIndmXzJnIiwgIndmXzVnIjsKKwkJfTsKKwkJY29uZiB7CisJCQlwaW5zID0gIldGMF9IQjEiLCAiV0YwX0hCMiIsICJXRjBfSEIzIiwgIldGMF9IQjQiLAorCQkJICAgICAgICJXRjBfSEIwIiwgIldGMF9IQjBfQiIsICJXRjBfSEI1IiwgIldGMF9IQjYiLAorCQkJICAgICAgICJXRjBfSEI3IiwgIldGMF9IQjgiLCAiV0YwX0hCOSIsICJXRjBfSEIxMCIsCisJCQkgICAgICAgIldGMF9UT1BfQ0xLIiwgIldGMF9UT1BfREFUQSIsICJXRjFfSEIxIiwKKwkJCSAgICAgICAiV0YxX0hCMiIsICJXRjFfSEIzIiwgIldGMV9IQjQiLCAiV0YxX0hCMCIsCisJCQkgICAgICAgIldGMV9IQjUiLCAiV0YxX0hCNiIsICJXRjFfSEI3IiwgIldGMV9IQjgiLAorCQkJICAgICAgICJXRjFfVE9QX0NMSyIsICJXRjFfVE9QX0RBVEEiOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzRtQT47CisJCX07CisJfTsKKworCXdmX2RiZGNfcGluczogd2ZfZGJkYy1waW5zIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gIndpZmkiOworCQkJZ3JvdXBzID0gIndmX2RiZGMiOworCQl9OworCQljb25mIHsKKwkJCXBpbnMgPSAiV0YwX0hCMSIsICJXRjBfSEIyIiwgIldGMF9IQjMiLCAiV0YwX0hCNCIsCisJCQkgICAgICAgIldGMF9IQjAiLCAiV0YwX0hCMF9CIiwgIldGMF9IQjUiLCAiV0YwX0hCNiIsCisJCQkgICAgICAgIldGMF9IQjciLCAiV0YwX0hCOCIsICJXRjBfSEI5IiwgIldGMF9IQjEwIiwKKwkJCSAgICAgICAiV0YwX1RPUF9DTEsiLCAiV0YwX1RPUF9EQVRBIiwgIldGMV9IQjEiLAorCQkJICAgICAgICJXRjFfSEIyIiwgIldGMV9IQjMiLCAiV0YxX0hCNCIsICJXRjFfSEIwIiwKKwkJCSAgICAgICAiV0YxX0hCNSIsICJXRjFfSEI2IiwgIldGMV9IQjciLCAiV0YxX0hCOCIsCisJCQkgICAgICAgIldGMV9UT1BfQ0xLIiwgIldGMV9UT1BfREFUQSI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNG1BPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODZhLXNwaW0tbm9yLXJmYi5kdHMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTg2YS1zcGltLW5vci1yZmIuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NWQ0OGQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTg2YS1zcGltLW5vci1yZmIuZHRzCkBAIC0wLDAgKzEsMjM4IEBACisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDc5ODZhLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2YS1waW5jdHJsLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2LXNwaW0tbm9yLXBhcnRpdGlvbi5kdHNpIgorLyB7CisJbW9kZWwgPSAiTWVkaWFUZWsgTVQ3OTg2YSBSRkIiOworCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2YS1ub3ItcmZiIjsKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG4xIGxvZ2xldmVsPTggIFwKKwkJCQllYXJseWNvbj11YXJ0ODI1MCxtbWlvMzIsMHgxMTAwMjAwMCI7CisJfTsKKworCW1lbW9yeSB7CisJCXJlZyA9IDwwIDB4NDAwMDAwMDAgMCAweDEwMDAwMDAwPjsKKwl9OworCisJc291bmRfd204OTYwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5eHgtd204OTYwLW1hY2hpbmUiOworCQltZWRpYXRlayxwbGF0Zm9ybSA9IDwmYWZlPjsKKwkJYXVkaW8tcm91dGluZyA9ICJIZWFkcGhvbmUiLCAiSFBfTCIsCisJCQkJIkhlYWRwaG9uZSIsICJIUF9SIiwKKwkJCQkiTElOUFVUMSIsICJBTUlDIiwKKwkJCQkiUklOUFVUMSIsICJBTUlDIjsKKwkJbWVkaWF0ZWssYXVkaW8tY29kZWMgPSA8JndtODk2MD47CisJCXN0YXR1cyA9ICJva2F5IjsKKwl9OworCisJc291bmRfc2kzMjE4eCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OXh4LXNpMzIxOHgtbWFjaGluZSI7CisJCW1lZGlhdGVrLHBsYXRmb3JtID0gPCZhZmU+OworCQltZWRpYXRlayxleHQtY29kZWMgPSA8JnByb3NsaWNfc3BpPjsKKwkJc3RhdHVzID0gIm9rYXkiOworCX07Cit9OworCismcHdtIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmcHdtMF9waW4gJnB3bTFfcGluX2cxPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismdWFydDAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1YXJ0MSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnVhcnQxX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ1YXJ0MiB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnVhcnQyX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZpMmMwIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmaTJjX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKKworCXdtODk2MDogd204OTYwQDFhIHsKKwkJY29tcGF0aWJsZSA9ICJ3bGYsd204OTYwIjsKKwkJcmVnID0gPDB4MWE+OworCX07Cit9OworCismYXV4YWRjIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismd2F0Y2hkb2cgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZldGggeworCXN0YXR1cyA9ICJva2F5IjsKKworCWdtYWMwOiBtYWNAMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssZXRoLW1hYyI7CisJCXJlZyA9IDwwPjsKKwkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKwkJZml4ZWQtbGluayB7CisJCQlzcGVlZCA9IDwyNTAwPjsKKwkJCWZ1bGwtZHVwbGV4OworCQkJcGF1c2U7CisJCX07CisJfTsKKworCWdtYWMxOiBtYWNAMSB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssZXRoLW1hYyI7CisJCXJlZyA9IDwxPjsKKwkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKwkJZml4ZWQtbGluayB7CisJCQlzcGVlZCA9IDwyNTAwPjsKKwkJCWZ1bGwtZHVwbGV4OworCQkJcGF1c2U7CisJCX07CisJfTsKKworCW1kaW86IG1kaW8tYnVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCXBoeTU6IHBoeUA1IHsKKwkJCWNvbXBhdGlibGUgPSAiZXRoZXJuZXQtcGh5LWlkNjdjOS5kZTBhIjsKKwkJCXJlZyA9IDw1PjsKKwkJCXJlc2V0LWdwaW9zID0gPCZwaW8gNiAxPjsKKwkJCXJlc2V0LWRlYXNzZXJ0LXVzID0gPDIwMDAwPjsKKwkJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCQl9OworCisJCXBoeTY6IHBoeUA2IHsKKwkJCWNvbXBhdGlibGUgPSAiZXRoZXJuZXQtcGh5LWlkNjdjOS5kZTBhIjsKKwkJCXJlZyA9IDw2PjsKKwkJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCQl9OworCisJCXN3aXRjaEAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NTMxIjsKKwkJCXJlZyA9IDwzMT47CisJCQlyZXNldC1ncGlvcyA9IDwmcGlvIDUgMD47CisKKwkJCXBvcnRzIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJCXBvcnRAMCB7CisJCQkJCXJlZyA9IDwwPjsKKwkJCQkJbGFiZWwgPSAibGFuMCI7CisJCQkJfTsKKworCQkJCXBvcnRAMSB7CisJCQkJCXJlZyA9IDwxPjsKKwkJCQkJbGFiZWwgPSAibGFuMSI7CisJCQkJfTsKKworCQkJCXBvcnRAMiB7CisJCQkJCXJlZyA9IDwyPjsKKwkJCQkJbGFiZWwgPSAibGFuMiI7CisJCQkJfTsKKworCQkJCXBvcnRAMyB7CisJCQkJCXJlZyA9IDwzPjsKKwkJCQkJbGFiZWwgPSAibGFuMyI7CisJCQkJfTsKKworCQkJCXBvcnRANiB7CisJCQkJCXJlZyA9IDw2PjsKKwkJCQkJbGFiZWwgPSAiY3B1IjsKKwkJCQkJZXRoZXJuZXQgPSA8JmdtYWMwPjsKKwkJCQkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKwkJCQkJZml4ZWQtbGluayB7CisJCQkJCQlzcGVlZCA9IDwyNTAwPjsKKwkJCQkJCWZ1bGwtZHVwbGV4OworCQkJCQkJcGF1c2U7CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZobmF0IHsKKwltdGtldGgtd2FuID0gImV0aDEiOworCW10a2V0aC1sYW4gPSAibGFuIjsKKwltdGtldGgtbWF4LWdtYWMgPSA8Mj47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnNwaTAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzcGlfZmxhc2hfcGlucz47CisJY3MtZ3Bpb3MgPSA8MD4sIDwwPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwlzcGlfbm9yQDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiamVkZWMsc3BpLW5vciI7CisJCXJlZyA9IDwwPjsKKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8NTIwMDAwMDA+OworCQlzcGktdHgtYnVzd2lkdGggPSA8ND47CisJCXNwaS1yeC1idXN3aWR0aCA9IDw0PjsKKwl9OworfTsKKworJnNwaTEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzcGljX3BpbnNfZzI+OworCXN0YXR1cyA9ICJva2F5IjsKKworCXByb3NsaWNfc3BpOiBwcm9zbGljX3NwaUAwIHsKKwkJY29tcGF0aWJsZSA9ICJzaWxhYnMscHJvc2xpY19zcGkiOworCQlyZWcgPSA8MD47CisJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDEwMDAwMDAwPjsKKwkJc3BpLWNwaGEgPSA8MT47CisJCXNwaS1jcG9sID0gPDE+OworCQljaGFubmVsX2NvdW50ID0gPDE+OworCQlkZWJ1Z19sZXZlbCA9IDw0PjsgICAgICAgLyogMSA9IFRSQywgMiA9IERCRywgNCA9IEVSUiAqLworCQlyZXNldF9ncGlvID0gPCZwaW8gNyAwPjsKKwkJaWcsZW5hYmxlLXNwaSA9IDwxPjsgICAgIC8qIDE6IEVuYWJsZSwgMDogRGlzYWJsZSAqLworCX07Cit9OworCismcGNpZTAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZwY2llMF9waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismd2JzeXMgeworCW1lZGlhdGVrLG10ZC1lZXByb20gPSA8JmZhY3RvcnkgMHgwMDAwPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismcGlvIHsKKwlzcGlfZmxhc2hfcGluczogc3BpLWZsYXNoLXBpbnMtMzMtdG8tMzggeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiZmxhc2giOworCQkJZ3JvdXBzID0gInNwaTAiLCAic3BpMF93cF9ob2xkIjsKKwkJfTsKKwkJY29uZi1wdSB7CisJCQlwaW5zID0gIlNQSTJfQ1MiLCAiU1BJMl9IT0xEIiwgIlNQSTJfV1AiOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzhtQT47CisJCQltZWRpYXRlayxwdWxsLXVwLWFkdiA9IDwwPjsJLyogYmlhcy1kaXNhYmxlICovCisJCX07CisJCWNvbmYtcGQgeworCQkJcGlucyA9ICJTUEkyX0NMSyIsICJTUEkyX01PU0kiLCAiU1BJMl9NSVNPIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV84bUE+OworCQkJbWVkaWF0ZWsscHVsbC1kb3duLWFkdiA9IDwwPjsJLyogYmlhcy1kaXNhYmxlICovCisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTg2YS5kdHNpIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4NmEuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjcyOTkxCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4NmEuZHRzaQpAQCAtMCwwICsxLDgwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAyMCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IFNhbS5TaGloIDxzYW0uc2hpaEBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9hcm0tZ2ljLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvcGh5L3BoeS5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3Jlc2V0L3RpLXN5c2Nvbi5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2Nsb2NrL210Nzk4Ni1jbGsuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy90aGVybWFsL3RoZXJtYWwuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9waW5jdHJsL210NjV4eC5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3Jlc2V0L210Nzk4Ni1yZXNldHMuaD4KKworLyB7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODZhLXJmYiI7CisJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKwkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkjc2l6ZS1jZWxscyA9IDwyPjsKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCQljcHUwOiBjcHVAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE1MyI7CisJCQllbmFibGUtbWV0aG9kID0gInBzY2kiOworCQkJcmVnID0gPDB4MD47CisJCX07CisKKwkJY3B1MTogY3B1QDEgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNTMiOworCQkJZW5hYmxlLW1ldGhvZCA9ICJwc2NpIjsKKwkJCXJlZyA9IDwweDE+OworCQl9OworCisJCWNwdTI6IGNwdUAyIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTUzIjsKKwkJCWVuYWJsZS1tZXRob2QgPSAicHNjaSI7CisJCQlyZWcgPSA8MHgyPjsKKwkJfTsKKworCQljcHUzOiBjcHVAMyB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJZW5hYmxlLW1ldGhvZCA9ICJwc2NpIjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNTMiOworCQkJcmVnID0gPDB4Mz47CisJCX07CisJfTsKKworCXdlZDogd2VkQDE1MDEwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayx3ZWQiOworCQl3ZWRfbnVtID0gPDI+OworCQkvKiBhZGQgdGhpcyBwcm9wZXJ0eSBmb3Igd2VkIGdldCB0aGUgcGNpIHNsb3QgbnVtYmVyLiAqLworCQlwY2lfc2xvdF9tYXAgPSA8MD4sIDwxPjsKKwkJcmVnID0gPDAgMHgxNTAxMDAwMCAwIDB4MTAwMD4sCisJCSAgICAgIDwwIDB4MTUwMTEwMDAgMCAweDEwMDA+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjA1IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8R0lDX1NQSSAyMDYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJfTsKKworCXdlZDI6IHdlZDJAMTUwMTEwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLHdlZDIiOworCQl3ZWRfbnVtID0gPDI+OworCQlyZWcgPSA8MCAweDE1MDEwMDAwIDAgMHgxMDAwPiwKKwkJICAgICAgPDAgMHgxNTAxMTAwMCAwIDB4MTAwMD47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyMDUgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDxHSUNfU1BJIDIwNiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwl9OworCisJd2RtYTogd2RtYUAxNTEwNDgwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssd2VkLXdkbWEiOworCQlyZWcgPSA8MCAweDE1MTA0ODAwIDAgMHg0MDA+LAorCQkgICAgICA8MCAweDE1MTA0YzAwIDAgMHg0MDA+OworCX07CisKKwlhcDJ3b2NjaWY6IGFwMndvY2NpZkAxNTFBNTAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssYXAyd29jY2lmIjsKKwkJcmVnID0gPDAgMHgxNTFBNTAwMCAwIDB4MTAwMD4sCisJCSAgICAgIDwwIDB4MTUxQUQwMDAgMCAweDEwMDA+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjExIElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8R0lDX1NQSSAyMTIgSVJRX1RZUEVfTEVWRUxfSElHSD47CisgICAgICAgIH07CisKKwl3b2NwdTBfaWxtOiB3b2NwdTBfaWxtQDE1MUUwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayx3b2NwdTBfaWxtIjsKKwkJcmVnID0gPDAgMHgxNTFFMDAwMCAwIDB4ODAwMD47CisJfTsKKworICAgICAgICB3b2NwdTFfaWxtOiB3b2NwdTFfaWxtQDE1MUYwMDAwIHsKKyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gIm1lZGlhdGVrLHdvY3B1MV9pbG0iOworICAgICAgICAgICAgICAgIHJlZyA9IDwwIDB4MTUxRjAwMDAgMCAweDgwMDA+OworICAgICAgICB9OworCisJd29jcHVfZGxtOiB3b2NwdV9kbG1AMTUxRTgwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLHdvY3B1X2RsbSI7CisJCXJlZyA9IDwwIDB4MTUxRTgwMDAgMCAweDIwMDA+LAorCQkgICAgICA8MCAweDE1MUY4MDAwIDAgMHgyMDAwPjsKKworCQlyZXNldHMgPSA8JmV0aHN5c3JzdCAwPjsKKwkJcmVzZXQtbmFtZXMgPSAid29jcHVfcnN0IjsKKwl9OworCisJY3B1X2Jvb3Q6IHdvY3B1X2Jvb3RAMTUxOTQwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLHdvY3B1X2Jvb3QiOworCQlyZWcgPSA8MCAweDE1MTk0MDAwIDAgMHgxMDAwPjsKKwl9OworCisJcmVzZXJ2ZWQtbWVtb3J5IHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQlyYW5nZXM7CisKKwkJLyogMTkyIEtpQiByZXNlcnZlZCBmb3IgQVJNIFRydXN0ZWQgRmlybXdhcmUgKEJMMzEpICovCisJCXNlY21vbl9yZXNlcnZlZDogc2VjbW9uQDQzMDAwMDAwIHsKKwkJCXJlZyA9IDwwIDB4NDMwMDAwMDAgMCAweDMwMDAwPjsKKwkJCW5vLW1hcDsKKwkJfTsKKworCQl3bWNwdV9lbWk6IHdtY3B1LXJlc2VydmVkQDRGQzAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssd21jcHUtcmVzZXJ2ZWQiOworCQkJbm8tbWFwOworCQkJcmVnID0gPDAgMHg0RkMwMDAwMCAwIDB4MDAxMDAwMDA+OworCQl9OworCisJCXdvY3B1MF9lbWk6IHdvY3B1MF9lbWlANEZEMDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayx3b2NwdTBfZW1pIjsKKwkJCW5vLW1hcDsKKwkJCXJlZyA9IDwwIDB4NEZEMDAwMDAgMCAweDQwMDAwPjsKKwkJCXNoYXJlZCA9IDwwPjsKKwkJfTsKKworCQl3b2NwdTFfZW1pOiB3b2NwdTFfZW1pQDRGRDQwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssd29jcHUxX2VtaSI7CisJCQluby1tYXA7CisJCQlyZWcgPSA8MCAweDRGRDQwMDAwIDAgMHg0MDAwMD47CisJCQlzaGFyZWQgPSA8MD47CisJCX07CisKKwkJd29jcHVfZGF0YTogd29jcHVfZGF0YUA0RkQ4MDAwMCB7CisJCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLHdvY3B1X2RhdGEiOworCQkJbm8tbWFwOworCQkJcmVnID0gPDAgMHg0RkQ4MDAwMCAwIDB4MjQwMDAwPjsKKwkJCXNoYXJlZCA9IDwxPjsKKwkJfTsKKwl9OworCisJcHNjaSB7CisJCWNvbXBhdGlibGUgID0gImFybSxwc2NpLTAuMiI7CisJCW1ldGhvZCAgICAgID0gInNtYyI7CisJfTsKKworCWNsazQwbTogb3NjaWxsYXRvckAwIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMDAwPjsKKwkJY2xvY2stb3V0cHV0LW5hbWVzID0gImNsa3h0YWwiOworCX07CisKKwlzeXN0ZW1fY2xrOiBkdW1teV9zeXN0ZW1fY2xrIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDAwMD47CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwl9OworCisJdGltZXIgeworCQljb21wYXRpYmxlID0gImFybSxhcm12OC10aW1lciI7CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMzAwMDAwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1BQSSAxMyBJUlFfVFlQRV9MRVZFTF9MT1c+LAorCQkJICAgICA8R0lDX1BQSSAxNCBJUlFfVFlQRV9MRVZFTF9MT1c+LAorCQkJICAgICA8R0lDX1BQSSAxMSBJUlFfVFlQRV9MRVZFTF9MT1c+LAorCQkJICAgICA8R0lDX1BQSSAxMCBJUlFfVFlQRV9MRVZFTF9MT1c+OworCX07CisKKwlpbmZyYWNmZ19hbzogaW5mcmFjZmdfYW9AMTAwMDEwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni1pbmZyYWNmZ19hbyIsICJzeXNjb24iOworCQlyZWcgPSA8MCAweDEwMDAxMDAwIDAgMHg2OD47CisJCSNjbG9jay1jZWxscyA9IDwxPjsKKwl9OworCisJaW5mcmFjZmc6IGluZnJhY2ZnQDEwMDAxMDQwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtaW5mcmFjZmciLCAic3lzY29uIjsKKwkJcmVnID0gPDAgMHgxMDAwMTA2YyAwIDB4MTAwMD47CisJCSNjbG9jay1jZWxscyA9IDwxPjsKKwl9OworCisJdG9wY2tnZW46IHRvcGNrZ2VuQDEwMDFCMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtdG9wY2tnZW4iLCAic3lzY29uIjsKKwkJcmVnID0gPDAgMHgxMDAxQjAwMCAwIDB4MTAwMD47CisJCSNjbG9jay1jZWxscyA9IDwxPjsKKwl9OworCisJYXBtaXhlZHN5czogYXBtaXhlZHN5c0AxMDAxRTAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LWFwbWl4ZWRzeXMiLCAic3lzY29uIjsKKwkJcmVnID0gPDAgMHgxMDAxRTAwMCAwIDB4MTAwMD47CisJCSNjbG9jay1jZWxscyA9IDwxPjsKKwl9OworCisJd2F0Y2hkb2c6IHdhdGNoZG9nQDEwMDFjMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtd2R0IjsKKwkJcmVnID0gPDAgMHgxMDAxYzAwMCAwIDB4MTAwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMTAgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCSNyZXNldC1jZWxscyA9IDwxPjsKKwl9OworCisJZ2ljOiBpbnRlcnJ1cHQtY29udHJvbGxlckBjMDAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0sZ2ljLXYzIjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCXJlZyA9IDwwIDB4MGMwMDAwMDAgMCAweDQwMDAwPiwgIC8qIEdJQ0QgKi8KKwkJICAgICAgPDAgMHgwYzA4MDAwMCAwIDB4MjAwMDAwPjsgLyogR0lDUiAqLworCisJCWludGVycnVwdHMgPSA8R0lDX1BQSSA5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCX07CisKKwlwd206IHB3bUAxMDA0ODAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXB3bSI7CisJCXJlZyA9IDwwIDB4MTAwNDgwMDAgMCAweDEwMDA+OworCQkjY2xvY2stY2VsbHMgPSA8MT47CisJCSNwd20tY2VsbHMgPSA8Mj47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMzcgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmaW5mcmFjZmcgQ0tfSU5GUkFfUFdNPiwKKwkJCSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX1BXTV9CU0VMPiwKKwkJCSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX1BXTTFfQ0s+LAorCQkJIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfUFdNMl9DSz47CisJCWFzc2lnbmVkLWNsb2NrcyA9IDwmdG9wY2tnZW4gQ0tfVE9QX1BXTV9TRUw+LAorCQkJCSAgPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9QV01fQlNFTD4sCisJCQkJICA8JmluZnJhY2ZnX2FvIENLX0lORlJBX1BXTTFfU0VMPiwKKwkJCQkgIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfUFdNMl9TRUw+OworCQlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZ0b3Bja2dlbiBDS19UT1BfQ0JfTV9END4sCisJCQkJCSA8JmluZnJhY2ZnIENLX0lORlJBX1BXTT4sCisJCQkJCSA8JmluZnJhY2ZnIENLX0lORlJBX1BXTT4sCisJCQkJCSA8JmluZnJhY2ZnIENLX0lORlJBX1BXTT47CisJCWNsb2NrLW5hbWVzID0gInRvcCIsICJtYWluIiwgInB3bTEiLCAicHdtMiI7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXVhcnQwOiBzZXJpYWxAMTEwMDIwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni11YXJ0IiwKKwkJCSAgICAgIm1lZGlhdGVrLG10NjU3Ny11YXJ0IjsKKwkJcmVnID0gPDAgMHgxMTAwMjAwMCAwIDB4NDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEyMyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9VQVJUMF9DSz47CisJCWFzc2lnbmVkLWNsb2NrcyA9IDwmdG9wY2tnZW4gQ0tfVE9QX1VBUlRfU0VMPiwKKwkJCQkgIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfVUFSVDBfU0VMPjsKKwkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmdG9wY2tnZW4gQ0tfVE9QX0NCX0NLU1FfNDBNPiwKKwkJCQkJIDwmaW5mcmFjZmcgQ0tfSU5GUkFfVUFSVD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXVhcnQxOiBzZXJpYWxAMTEwMDMwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni11YXJ0IiwKKwkJCSAgICAgIm1lZGlhdGVrLG10NjU3Ny11YXJ0IjsKKwkJcmVnID0gPDAgMHgxMTAwMzAwMCAwIDB4NDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEyNCBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9VQVJUMV9DSz47CisJCWFzc2lnbmVkLWNsb2NrcyA9IDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfVUFSVDFfU0VMPjsKKwkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmaW5mcmFjZmcgQ0tfSU5GUkFfQ0tfRjI2TT47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXVhcnQyOiBzZXJpYWxAMTEwMDQwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni11YXJ0IiwKKwkJCSAgICAgIm1lZGlhdGVrLG10NjU3Ny11YXJ0IjsKKwkJcmVnID0gPDAgMHgxMTAwNDAwMCAwIDB4NDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEyNSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9VQVJUMl9DSz47CisJCWFzc2lnbmVkLWNsb2NrcyA9IDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfVUFSVDJfU0VMPjsKKwkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmaW5mcmFjZmcgQ0tfSU5GUkFfQ0tfRjI2TT47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworICAgICAgICBpMmMwOiBpMmNAMTEwMDgwMDAgeworICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LWkyYyI7CisgICAgICAgICAgICAgICAgcmVnID0gPDAgMHgxMTAwODAwMCAwIDB4OTA+LAorICAgICAgICAgICAgICAgICAgICAgIDwwIDB4MTAyMTcwODAgMCAweDgwPjsKKyAgICAgICAgICAgICAgICBpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTM2IElSUV9UWVBFX0xFVkVMX0hJR0g+OworICAgICAgICAgICAgICAgIGNsb2NrLWRpdiA9IDw1PjsKKyAgICAgICAgICAgICAgICBjbG9ja3MgPSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX0kyQ09fQ0s+LAorICAgICAgICAgICAgICAgICAgICAgICAgIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfQVBfRE1BX0NLPjsKKyAgICAgICAgICAgICAgICBjbG9jay1uYW1lcyA9ICJtYWluIiwgImRtYSI7CisgICAgICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSA8MT47CisgICAgICAgICAgICAgICAgI3NpemUtY2VsbHMgPSA8MD47CisgICAgICAgICAgICAgICAgc3RhdHVzID0gImRpc2FibGVkIjsKKyAgICAgICAgfTsKKworCXRoZXJtYWwtem9uZXMgeworCQljcHVfdGhlcm1hbDogY3B1LXRoZXJtYWwgeworCQkJcG9sbGluZy1kZWxheS1wYXNzaXZlID0gPDEwMDA+OworCQkJcG9sbGluZy1kZWxheSA9IDwxMDAwPjsKKwkJCXRoZXJtYWwtc2Vuc29ycyA9IDwmdGhlcm1hbCAwPjsKKwkJfTsKKwl9OworCisJdGhlcm1hbDogdGhlcm1hbEAxMTAwYzgwMCB7CisJCSN0aGVybWFsLXNlbnNvci1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtdGhlcm1hbCI7CisJCXJlZyA9IDwwIDB4MTEwMGM4MDAgMCAweDgwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMzggSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfVEhFUk1fQ0s+LAorCQkJIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfQURDXzI2TV9DSz4sCisJCQkgPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9BRENfRlJDX0NLPjsKKwkJY2xvY2stbmFtZXMgPSAidGhlcm0iLCAiYXV4YWRjIiwgImFkY18zMmsiOworCQltZWRpYXRlayxhdXhhZGMgPSA8JmF1eGFkYz47CisJCW1lZGlhdGVrLGFwbWl4ZWRzeXMgPSA8JmFwbWl4ZWRzeXM+OworCQludm1lbS1jZWxscyA9IDwmdGhlcm1hbF9jYWxpYnJhdGlvbj47CisJCW52bWVtLWNlbGwtbmFtZXMgPSAiY2FsaWJyYXRpb24tZGF0YSI7CisJfTsKKworCXBjaWUwOiBwY2llQDExMjgwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtcGNpZSI7CisJCXJlZyA9IDwwIDB4MTEyODAwMDAgMCAweDUwMDA+OworCQlyZWctbmFtZXMgPSAicGNpZS1tYWMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNjggSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWJ1cy1yYW5nZSA9IDwweDAwIDB4ZmY+OworCQlyYW5nZXMgPSA8MHg4MjAwMDAwMCAwIDB4MjAwMDAwMDAKKwkJCSAgMHgwIDB4MjAwMDAwMDAgMCAweDEwMDAwMDAwPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKworCQljbG9ja3MgPSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX1BDSUVfU0VMPiwKKwkJCSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX0lQQ0lFX0NLPiwKKwkJCSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX0lQQ0lFX1BJUEVfQ0s+LAorCQkJIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfSVBDSUVSX0NLPiwKKwkJCSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX0lQQ0lFQl9DSz47CisKKwkJcGh5cyA9IDwmcGNpZXBvcnQgUEhZX1RZUEVfUENJRT47CisJCXBoeS1uYW1lcyA9ICJwY2llLXBoeSI7CisKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDAgMCAwIDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPDAgMCAwIDEgJnBjaWVfaW50YzAgMD4sCisJCQkJPDAgMCAwIDIgJnBjaWVfaW50YzAgMT4sCisJCQkJPDAgMCAwIDMgJnBjaWVfaW50YzAgMj4sCisJCQkJPDAgMCAwIDQgJnBjaWVfaW50YzAgMz47CisJCXBjaWVfaW50YzA6IGludGVycnVwdC1jb250cm9sbGVyIHsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQl9OworCX07CisKKwljcnlwdG86IGNyeXB0b0AxMDMyMDAwMCB7CisJCWNvbXBhdGlibGUgPSAiaW5zaWRlLXNlY3VyZSxzYWZleGNlbC1laXA5NyI7CisJCXJlZyA9IDwwIDB4MTAzMjAwMDAgMCAweDQwMDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDExNiBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPEdJQ19TUEkgMTE3IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8R0lDX1NQSSAxMTggSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDxHSUNfU1BJIDExOSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJaW50ZXJydXB0LW5hbWVzID0gInJpbmcwIiwgInJpbmcxIiwgInJpbmcyIiwgInJpbmczIjsKKwkJY2xvY2tzID0gPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9FSVA5N19DSz47CisJCWNsb2NrLW5hbWVzID0gImluZnJhX2VpcDk3X2NrIjsKKwkJYXNzaWduZWQtY2xvY2tzID0gPCZ0b3Bja2dlbiBDS19UT1BfRUlQX0JfU0VMPjsKKwkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmdG9wY2tnZW4gQ0tfVE9QX0NCX05FVDJfODAwTT47CisJfTsKKworCXBpbzogcGluY3RybEAxMDAxZjAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXBpbmN0cmwiOworCQlyZWcgPSA8MCAweDEwMDFmMDAwIDAgMHgxMDAwPiwKKwkJICAgICAgPDAgMHgxMWMzMDAwMCAwIDB4MTAwMD4sCisJCSAgICAgIDwwIDB4MTFjNDAwMDAgMCAweDEwMDA+LAorCQkgICAgICA8MCAweDExZTIwMDAwIDAgMHgxMDAwPiwKKwkJICAgICAgPDAgMHgxMWUzMDAwMCAwIDB4MTAwMD4sCisJCSAgICAgIDwwIDB4MTFmMDAwMDAgMCAweDEwMDA+LAorCQkgICAgICA8MCAweDExZjEwMDAwIDAgMHgxMDAwPiwKKwkJICAgICAgPDAgMHgxMDAwYjAwMCAwIDB4MTAwMD47CisJCXJlZy1uYW1lcyA9ICJncGlvX2Jhc2UiLCAiaW9jZmdfcnRfYmFzZSIsICJpb2NmZ19yYl9iYXNlIiwKKwkJCSAgICAiaW9jZmdfbHRfYmFzZSIsICJpb2NmZ19sYl9iYXNlIiwgImlvY2ZnX3RyX2Jhc2UiLAorCQkJICAgICJpb2NmZ190bF9iYXNlIiwgImVpbnQiOworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCQlncGlvLXJhbmdlcyA9IDwmcGlvIDAgMCAxMDA+OworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDIyNSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZXRoc3lzOiBzeXNjb25AMTUwMDAwMDAgeworICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gPDE+OworICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gPDE+OworICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LWV0aHN5c19jayIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzeXNjb24iOworICAgICAgICAgICAgICAgIHJlZyA9IDwwIDB4MTUwMDAwMDAgMCAweDEwMDA+OworICAgICAgICAgICAgICAgICNjbG9jay1jZWxscyA9IDwxPjsKKyAgICAgICAgICAgICAgICAjcmVzZXQtY2VsbHMgPSA8MT47CisKKwkJZXRoc3lzcnN0OiByZXNldC1jb250cm9sbGVyIHsKKwkJCWNvbXBhdGlibGUgPSAidGksc3lzY29uLXJlc2V0IjsKKwkJCSNyZXNldC1jZWxscyA9IDwxPjsKKwkJCXRpLHJlc2V0LWJpdHMgPSA8MHgzNCA0IDB4MzQgNCAweDM0IDQgKEFTU0VSVF9TRVQgfCBERUFTU0VSVF9DTEVBUiB8IFNUQVRVU19TRVQpPjsKKwkJfTsKKyAgICAgICAgfTsKKworICAgICAgICBldGg6IGV0aGVybmV0QDE1MTAwMDAwIHsKKyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni1ldGgiOworICAgICAgICAgICAgICAgIHJlZyA9IDwwIDB4MTUxMDAwMDAgMCAweDgwMDAwPjsKKyAgICAgICAgICAgICAgICBpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTk2IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8R0lDX1NQSSAxOTcgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxHSUNfU1BJIDE5OCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEdJQ19TUEkgMTk5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworICAgICAgICAgICAgICAgIGNsb2NrcyA9IDwmZXRoc3lzIENLX0VUSF9GRV9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZldGhzeXMgQ0tfRVRIX0dQMl9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZldGhzeXMgQ0tfRVRIX0dQMV9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZldGhzeXMgQ0tfRVRIX1dPQ1BVMV9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZldGhzeXMgQ0tfRVRIX1dPQ1BVMF9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZzZ21paXN5czAgQ0tfU0dNMF9UWF9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZzZ21paXN5czAgQ0tfU0dNMF9SWF9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZzZ21paXN5czAgQ0tfU0dNMF9DSzBfRU4+LAorICAgICAgICAgICAgICAgICAgICAgICAgIDwmc2dtaWlzeXMwIENLX1NHTTBfQ0RSX0NLMF9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZzZ21paXN5czEgQ0tfU0dNMV9UWF9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZzZ21paXN5czEgQ0tfU0dNMV9SWF9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZzZ21paXN5czEgQ0tfU0dNMV9DSzFfRU4+LAorICAgICAgICAgICAgICAgICAgICAgICAgIDwmc2dtaWlzeXMxIENLX1NHTTFfQ0RSX0NLMV9FTj47CisgICAgICAgICAgICAgICAgY2xvY2stbmFtZXMgPSAiZmUiLCAiZ3AyIiwgImdwMSIsICJ3b2NwdTEiLCAid29jcHUwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2dtaWlfdHgyNTBtIiwgInNnbWlpX3J4MjUwbSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgInNnbWlpX2Nkcl9yZWYiLCAic2dtaWlfY2RyX2ZiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2dtaWkyX3R4MjUwbSIsICJzZ21paTJfcngyNTBtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2dtaWkyX2Nkcl9yZWYiLCAic2dtaWkyX2Nkcl9mYiI7CisJCWFzc2lnbmVkLWNsb2NrcyA9IDwmdG9wY2tnZW4gQ0tfVE9QX05FVFNZU18yWF9TRUw+LAorCQkJCSAgPCZ0b3Bja2dlbiBDS19UT1BfU0dNXzMyNU1fU0VMPjsKKwkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmdG9wY2tnZW4gQ0tfVE9QX0NCX05FVDJfODAwTT4sCisJCQkJCSA8JnRvcGNrZ2VuIENLX1RPUF9DQl9TR01fMzI1TT47CisgICAgICAgICAgICAgICAgbWVkaWF0ZWssZXRoc3lzID0gPCZldGhzeXM+OworCQltZWRpYXRlayxzZ21paXN5cyA9IDwmc2dtaWlzeXMwPiwgPCZzZ21paXN5czE+OworICAgICAgICAgICAgICAgICNyZXNldC1jZWxscyA9IDwxPjsKKyAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IDwxPjsKKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IDwwPjsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSAiZGlzYWJsZWQiOworICAgICAgICB9OworCisJaG5hdDogaG5hdEAxNTAwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXRrLWhuYXRfdjQiOworCQlyZWcgPSA8MCAweDE1MTAwMDAwIDAgMHg4MDAwMD47CisJCXJlc2V0cyA9IDwmZXRoc3lzIDA+OworCQlyZXNldC1uYW1lcyA9ICJtdGtldGgiOworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwlzZ21paXN5czA6IHN5c2NvbkAxMDA2MDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXNnbWlpc3lzIiwKKwkJCQkibWVkaWF0ZWssbXQ3OTg2LXNnbWlpc3lzXzAiLAorCQkJCSJzeXNjb24iOworCQlyZWcgPSA8MCAweDEwMDYwMDAwIDAgMHgxMDAwPjsKKwkJI2Nsb2NrLWNlbGxzID0gPDE+OworCX07CisKKwlzZ21paXN5czE6IHN5c2NvbkAxMDA3MDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXNnbWlpc3lzIiwKKwkJCQkgIm1lZGlhdGVrLG10Nzk4Ni1zZ21paXN5c18xIiwKKwkJCQkgInN5c2NvbiI7CisJCXJlZyA9IDwwIDB4MTAwNzAwMDAgMCAweDEwMDA+OworCQkjY2xvY2stY2VsbHMgPSA8MT47CisJfTsKKworCXNuYW5kOiBzbmZpQDExMDA1MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtc25hbmQiOworCQlyZWcgPSA8MCAweDExMDA1MDAwIDAgMHgxMDAwPiwgPDAgMHgxMTAwNjAwMCAwIDB4MTAwMD47CisJCXJlZy1uYW1lcyA9ICJuZmkiLCAiZWNjIjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEyMSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9TUElORkkxX0NLPiwKKwkJCSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX05GSTFfQ0s+LAorCQkJIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfTkZJX0hDS19DSz47CisJCWNsb2NrLW5hbWVzID0gInBhZF9jbGsiLCAibmZpX2NsayIsICJuZmlfaGNsayI7CisJCWFzc2lnbmVkLWNsb2NrcyA9IDwmdG9wY2tnZW4gQ0tfVE9QX1NQSU5GSV9TRUw+LAorCQkJIAkgIDwmdG9wY2tnZW4gQ0tfVE9QX05GSTFYX1NFTD47CisJCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JnRvcGNrZ2VuIENLX1RPUF9DQl9NX0Q4PiwKKwkJCQkJIDwmdG9wY2tnZW4gQ0tfVE9QX0NCX01fRDg+OworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXdic3lzOiB3YnN5c0AxODAwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssd2JzeXMiLAorCQkJICAgICAibWVkaWF0ZWssbXQ3OTg2LXdtYWMiOworCQlyZXNldHMgPSA8JndhdGNoZG9nIE1UNzk4Nl9UT1BSR1VfQ09OU1lTX1JTVD47CisJCXJlc2V0LW5hbWVzID0gImNvbnN5cyI7CisJCXJlZyA9IDwwIDB4MTgwMDAwMDAgMCAweDEwMDAwMDA+LAorCQkgICAgICA8MCAweDEwMDAzMDAwIDAgMHgxMDAwPiwKKwkJICAgICAgPDAgMHgxMWQxMDAwMCAwIDB4MTAwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyMTMgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJCSA8R0lDX1NQSSAyMTQgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJCSA8R0lDX1NQSSAyMTUgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJCSA8R0lDX1NQSSAyMTYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNoaXBfaWQgPSA8MHg3OTg2PjsKKwkJbWVtb3J5LXJlZ2lvbiA9IDwmd21jcHVfZW1pPjsKKwl9OworCisJd2VkX3BjaWU6IHdlZF9wY2llQDEwMDAzMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayx3ZWRfcGNpZSI7CisJCXJlZyA9IDwwIDB4MTAwMDMwMDAgMCAweDEwPjsKKwl9OworCisJc3BpMDogc3BpQDExMDBhMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxpcG0tc3BpLXF1YWQiOworCQlyZWcgPSA8MCAweDExMDBhMDAwIDAgMHgxMDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTQwIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8JnRvcGNrZ2VuIENLX1RPUF9DQl9NX0QyPiwKKwkJCSA8JnRvcGNrZ2VuIENLX1RPUF9TUElfU0VMPiwKKwkJCSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX1NQSTBfQ0s+LAorCQkJIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfU1BJMF9IQ0tfQ0s+OworCQljbG9jay1uYW1lcyA9ICJwYXJlbnQtY2xrIiwgInNlbC1jbGsiLCAic3BpLWNsayIsICJzcGktaGNsayI7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXNwaTE6IHNwaUAxMTAwYjAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssaXBtLXNwaS1zaW5nbGUiOworCQlyZWcgPSA8MCAweDExMDBiMDAwIDAgMHgxMDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTQxIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8JnRvcGNrZ2VuIENLX1RPUF9DQl9NX0QyPiwKKwkJCSA8JnRvcGNrZ2VuIENLX1RPUF9TUElNX01TVF9TRUw+LAorCQkJIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfU1BJMV9DSz4sCisJCQkgPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9TUEkxX0hDS19DSz47CisJCWNsb2NrLW5hbWVzID0gInBhcmVudC1jbGsiLCAic2VsLWNsayIsICJzcGktY2xrIiwgInNwaS1oY2xrIjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJbW1jMDogbW1jQDExMjMwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtbW1jIjsKKwkJcmVnID0gPDAgMHgxMTIzMDAwMCAwIDB4MTAwMD4sCisJCQk8MCAweDExYzIwMDAwIDAgMHgxMDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE0MyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZ0b3Bja2dlbiBDS19UT1BfRU1NQ180MTZNPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0VNTUNfMjUwTT4sCisJCQk8JmluZnJhY2ZnX2FvIENLX0lORlJBX01TRENfQ0s+OworCQljbG9jay1uYW1lcyA9ICJzb3VyY2UiLCAiaGNsayIsICJzb3VyY2VfY2ciOworCQlhc3NpZ25lZC1jbG9ja3MgPSA8JnRvcGNrZ2VuIENLX1RPUF9FTU1DXzQxNk1fU0VMPiwKKwkJCQkgIDwmdG9wY2tnZW4gQ0tfVE9QX0VNTUNfMjUwTV9TRUw+OworCQlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZ0b3Bja2dlbiBDS19UT1BfQ0JfTV80MTZNPiwKKwkJCQkJIDwmdG9wY2tnZW4gQ0tfVE9QX05FVDFfRDVfRDI+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwlhdXhhZGM6IGFkY0AxMTAwZDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LWF1eGFkYyIsCisJCQkgICAgICJtZWRpYXRlayxtdDc2MjItYXV4YWRjIjsKKwkJcmVnID0gPDAgMHgxMTAwZDAwMCAwIDB4MTAwMD47CisJCWNsb2NrcyA9IDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfQURDXzI2TV9DSz4sCisJCQkgPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9BRENfRlJDX0NLPjsKKwkJY2xvY2stbmFtZXMgPSAibWFpbiIsICIzMmsiOworCQkjaW8tY2hhbm5lbC1jZWxscyA9IDwxPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJY29uc3lzOiBjb25zeXNAMTAwMDAwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni1jb25zeXMiOworCQlyZWcgPSA8MCAweDEwMDAwMDAwIDAgMHg4NjAwMDAwPjsKKwkJbWVtb3J5LXJlZ2lvbiA9IDwmd21jcHVfZW1pPjsKKwl9OworCisJeGhjaTogeGhjaUAxMTIwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXhoY2kiLAorCQkJICAgICAibWVkaWF0ZWssbXRrLXhoY2kiOworCQlyZWcgPSA8MCAweDExMjAwMDAwIDAgMHgyZTAwPiwKKwkJICAgICAgPDAgMHgxMTIwM2UwMCAwIDB4MDEwMD47CisJCXJlZy1uYW1lcyA9ICJtYWMiLCAiaXBwYyI7CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNzMgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCXBoeXMgPSA8JnUycG9ydDAgUEhZX1RZUEVfVVNCMj4sCisJCSAgICAgICA8JnUzcG9ydDAgUEhZX1RZUEVfVVNCMz4sCisJCSAgICAgICA8JnUycG9ydDEgUEhZX1RZUEVfVVNCMj47CisJCWNsb2NrcyA9IDwmc3lzdGVtX2Nsaz4sCisJCQkgPCZzeXN0ZW1fY2xrPiwKKwkJCSA8JnN5c3RlbV9jbGs+LAorCQkJIDwmc3lzdGVtX2Nsaz4sCisJCQkgPCZzeXN0ZW1fY2xrPjsKKwkJY2xvY2stbmFtZXMgPSAic3lzX2NrIiwKKwkJCSAgICAgICJ4aGNpX2NrIiwKKwkJCSAgICAgICJyZWZfY2siLAorCQkJICAgICAgIm1jdV9jayIsCisJCQkgICAgICAiZG1hX2NrIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQlzdGF0dXMgPSAib2theSI7CisJfTsKKworCXBjaWV0cGh5OiBwY2llLXBoeUAxMWMwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2IiwKKwkJCSAgICAgIm1lZGlhdGVrLGdlbmVyaWMtdHBoeS12NCI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJcmFuZ2VzOworCQlzdGF0dXMgPSAib2theSI7CisKKwkJcGNpZXBvcnQ6IHBjaWUtcGh5QDExYzAwMDAwIHsKKwkJCXJlZyA9IDwwIDB4MTFjMDAwMDAgMCAweDIwMDAwPjsKKwkJCWNsb2NrcyA9IDwmc3lzdGVtX2Nsaz47CisJCQljbG9jay1uYW1lcyA9ICJyZWYiOworCQkJI3BoeS1jZWxscyA9IDwxPjsKKwkJCWF1dG9fbG9hZF92YWxpZDsKKwkJCWF1dG9fbG9hZF92YWxpZF9sbjE7CisJCQludm1lbS1jZWxscyA9IDwmcGNpZV9pbnRyX2xuMD4sCisJCQkJICAgICAgPCZwY2llX3J4X2ltcF9sbjA+LAorCQkJCSAgICAgIDwmcGNpZV90eF9pbXBfbG4wPiwKKwkJCQkgICAgICA8JnBjaWVfYXV0b19sb2FkX3ZhbGlkX2xuMD4sCisJCQkJICAgICAgPCZwY2llX2ludHJfbG4xPiwKKwkJCQkgICAgICA8JnBjaWVfcnhfaW1wX2xuMT4sCisJCQkJICAgICAgPCZwY2llX3R4X2ltcF9sbjE+LAorCQkJCSAgICAgIDwmcGNpZV9hdXRvX2xvYWRfdmFsaWRfbG4xPjsKKwkJCW52bWVtLWNlbGwtbmFtZXMgPSAiaW50ciIsCisJCQkJCSAgICJyeF9pbXAiLAorCQkJCQkgICAidHhfaW1wIiwKKwkJCQkJICAgImF1dG9fbG9hZF92YWxpZCIsCisJCQkJCSAgICJpbnRyX2xuMSIsCisJCQkJCSAgICJyeF9pbXBfbG4xIiwKKwkJCQkJICAgInR4X2ltcF9sbjEiLAorCQkJCQkgICAiYXV0b19sb2FkX3ZhbGlkX2xuMSI7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisJfTsKKworCXVzYnRwaHk6IHVzYi1waHlAMTFlMTAwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4NiIsCisJCQkgICAgICJtZWRpYXRlayxnZW5lcmljLXRwaHktdjIiOworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCXJhbmdlczsKKwkJc3RhdHVzID0gIm9rYXkiOworCisJCXUycG9ydDA6IHVzYi1waHlAMTFlMTAwMDAgeworCQkJcmVnID0gPDAgMHgxMWUxMDAwMCAwIDB4NzAwPjsKKwkJCWNsb2NrcyA9IDwmc3lzdGVtX2Nsaz47CisJCQljbG9jay1uYW1lcyA9ICJyZWYiOworCQkJI3BoeS1jZWxscyA9IDwxPjsKKwkJCWF1dG9fbG9hZF92YWxpZDsKKwkJCW52bWVtLWNlbGxzID0gPCZ1Ml9pbnRyX3AwPiwgPCZ1Ml9hdXRvX2xvYWRfdmFsaWRfcDA+OworCQkJbnZtZW0tY2VsbC1uYW1lcyA9ICJpbnRyIiwgImF1dG9fbG9hZF92YWxpZCI7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisKKwkJdTNwb3J0MDogdXNiLXBoeUAxMWUxMDcwMCB7CisJCQlyZWcgPSA8MCAweDExZTEwNzAwIDAgMHg5MDA+OworCQkJY2xvY2tzID0gPCZzeXN0ZW1fY2xrPjsKKwkJCWNsb2NrLW5hbWVzID0gInJlZiI7CisJCQkjcGh5LWNlbGxzID0gPDE+OworCQkJYXV0b19sb2FkX3ZhbGlkOworCQkJbnZtZW0tY2VsbHMgPSA8JmNvbWJfaW50cl9wMD4sCisJCQkgICAgICA8JmNvbWJfcnhfaW1wX3AwPiwKKwkJCSAgICAgIDwmY29tYl90eF9pbXBfcDA+LAorCQkJICAgICAgPCZjb21iX2F1dG9fbG9hZF92YWxpZD47CisJCQludm1lbS1jZWxsLW5hbWVzID0gImludHIiLCAicnhfaW1wIiwgInR4X2ltcCIsICJhdXRvX2xvYWRfdmFsaWQiOworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCisJCXUycG9ydDE6IHVzYi1waHlAMTFlMTEwMDAgeworCQkJcmVnID0gPDAgMHgxMWUxMTAwMCAwIDB4NzAwPjsKKwkJCWNsb2NrcyA9IDwmc3lzdGVtX2Nsaz47CisJCQljbG9jay1uYW1lcyA9ICJyZWYiOworCQkJI3BoeS1jZWxscyA9IDwxPjsKKwkJCWF1dG9fbG9hZF92YWxpZDsKKwkJCW52bWVtLWNlbGxzID0gPCZ1Ml9pbnRyX3AxPiwgPCZ1Ml9hdXRvX2xvYWRfdmFsaWRfcDE+OworCQkJbnZtZW0tY2VsbC1uYW1lcyA9ICJpbnRyIiwgImF1dG9fbG9hZF92YWxpZCI7CisJCQlzdGF0dXMgPSAib2theSI7CisJCX07CisJfTsKKworCWNsa2l0ZzogY2xraXRnIHsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwl9OworCisJYWZlOiBhdWRpby1jb250cm9sbGVyQDExMjEwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5eHgtYXVkaW8iOworCQlyZWcgPSA8MCAweDExMjEwMDAwIDAgMHg5MDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEwNiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9BVURfQlVTX0NLPiwKKwkJCSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX0FVRF8yNk1fQ0s+LAorCQkJIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfQVVEX0xfQ0s+LAorCQkJIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfQVVEX0FVRF9DSz4sCisJCQkgPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9BVURfRUcyX0NLPjsKKwkJY2xvY2stbmFtZXMgPSAiYXVkX2J1c19jayIsCisJCQkgICAgICAiYXVkXzI2bV9jayIsCisJCQkgICAgICAiYXVkX2xfY2siLAorCQkJICAgICAgImF1ZF9hdWRfY2siLAorCQkJICAgICAgImF1ZF9lZzJfY2siOworCQlhc3NpZ25lZC1jbG9ja3MgPSA8JnRvcGNrZ2VuIENLX1RPUF9BMVNZU19TRUw+LAorCQkJCSAgPCZ0b3Bja2dlbiBDS19UT1BfQVVEX0xfU0VMPiwKKwkJCQkgIDwmdG9wY2tnZW4gQ0tfVE9QX0FfVFVORVJfU0VMPjsKKwkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmdG9wY2tnZW4gQ0tfVE9QX0FQTEwyX0Q0PiwKKwkJCQkJIDwmdG9wY2tnZW4gQ0tfVE9QX0NCX0FQTEwyXzE5Nk0+LAorCQkJCQkgPCZ0b3Bja2dlbiBDS19UT1BfQVBMTDJfRDQ+OworCX07CisKKwl0cm5nOiB0cm5nQDEwMjBmMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtcm5nIiwKKwkJCSAgICAgIm1lZGlhdGVrLG10NzYyMy1ybmciOworCQlyZWcgPSA8MCAweDEwMjBmMDAwIDAgMHgxMDA+OworCQljbG9ja3MgPSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX1RSTkdfQ0s+OworCQljbG9jay1uYW1lcyA9ICJybmciOworCX07CisKKwlpY2U6IGljZV9kZWJ1ZyB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LWljZV9kZWJ1ZyIsCisJCQkibWVkaWF0ZWssbXQyNzAxLWljZV9kZWJ1ZyI7CisJCWNsb2NrcyA9IDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfREJHX0NLPiwKKwkJCSA8JnRvcGNrZ2VuIENLX1RPUF9BUk1fREJfSlRTRUw+OworCQljbG9jay1uYW1lcyA9ICJpY2VfZGJnIiwgImRiZ19qdHNlbCI7CisJfTsKKworCWVmdXNlOiBlZnVzZUAxMWQwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LWVmdXNlIiwKKwkJCSAgICAgIm1lZGlhdGVrLGVmdXNlIjsKKwkJcmVnID0gPDAgMHgxMWQwMDAwMCAwIDB4MTAwMD47CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQl0aGVybWFsX2NhbGlicmF0aW9uOiBjYWxpYkAyNzQgeworCQkJcmVnID0gPDB4Mjc0IDB4Yz47CisJCX07CisKKwkJY29tYl9hdXRvX2xvYWRfdmFsaWQ6IHVzYjMtYWx2LWltcEA4ZGEgeworCQkJcmVnID0gPDB4OGRhIDE+OworCQkJYml0cyA9IDwwIDE+OworCQl9OworCisJCWNvbWJfcnhfaW1wX3AwOiB1c2IzLXJ4LWltcEA4ZDggeworCQkJcmVnID0gPDB4OGQ4IDE+OworCQkJYml0cyA9IDwwIDU+OworCQl9OworCisJCWNvbWJfdHhfaW1wX3AwOiB1c2IzLXR4LWltcEA4ZDggeworCQkJcmVnID0gPDB4OGQ4IDI+OworCQkJYml0cyA9IDw1IDU+OworCQl9OworCisJCWNvbWJfaW50cl9wMDogdXNiMy1pbnRyQDhkOSB7CisJCQlyZWcgPSA8MHg4ZDkgMT47CisJCQliaXRzID0gPDIgNj47CisJCX07CisKKwkJdTJfYXV0b19sb2FkX3ZhbGlkX3AwOiB1c2IyLWFsdi1wMEA4ZTAgeworCQkJcmVnICA9IDwweDhlMCAxPjsKKwkJCWJpdHMgPSA8MCAxPjsKKwkJfTsKKworCQl1Ml9pbnRyX3AwOiB1c2IyLWludHItcDBAOGUwIHsKKwkJCXJlZyAgPSA8MHg4ZTAgMT47CisJCQliaXRzID0gPDEgNT47CisJCX07CisKKwkJdTJfYXV0b19sb2FkX3ZhbGlkX3AxOiB1c2IyLWFsdi1wMUA4ZTAgeworCQkJcmVnICA9IDwweDhlMCAyPjsKKwkJCWJpdHMgPSA8NiAxPjsKKwkJfTsKKworCQl1Ml9pbnRyX3AxOiB1c2IyLWludHItcDFAOGUwIHsKKwkJCXJlZyAgPSA8MHg4ZTAgMj47CisJCQliaXRzID0gPDcgNT47CisJCX07CisKKwkJcGNpZV9yeF9pbXBfbG4wOiBwY2llLXJ4LWltcEA4ZDAgeworCQkJcmVnID0gPDB4OGQwIDE+OworCQkJYml0cyA9IDwwIDU+OworCQl9OworCisJCXBjaWVfdHhfaW1wX2xuMDogcGNpZS10eC1pbXBAOGQwIHsKKwkJCXJlZyA9IDwweDhkMCAyPjsKKwkJCWJpdHMgPSA8NSA1PjsKKwkJfTsKKworCQlwY2llX2ludHJfbG4wOiBwY2llLWludHJAOGQxIHsKKwkJCXJlZyA9IDwweDhkMSAxPjsKKwkJCWJpdHMgPSA8MiA2PjsKKwkJfTsKKworCQlwY2llX2F1dG9fbG9hZF92YWxpZF9sbjA6IHBjaWUtbG4wLWFsdkA4ZDQgeworCQkJcmVnID0gPDB4OGQ0IDE+OworCQkJYml0cyA9IDwwIDE+OworCQl9OworCisJCXBjaWVfcnhfaW1wX2xuMTogcGNpZS1yeC1pbXBAOGQyIHsKKwkJCXJlZyA9IDwweDhkMiAxPjsKKwkJCWJpdHMgPSA8MCA1PjsKKwkJfTsKKworCQlwY2llX3R4X2ltcF9sbjE6IHBjaWUtdHgtaW1wQDhkMiB7CisJCQlyZWcgPSA8MHg4ZDIgMj47CisJCQliaXRzID0gPDUgNT47CisJCX07CisKKwkJcGNpZV9pbnRyX2xuMTogcGNpZS1pbnRyQDhkMyB7CisJCQlyZWcgPSA8MHg4ZDMgMT47CisJCQliaXRzID0gPDIgNj47CisJCX07CisKKwkJcGNpZV9hdXRvX2xvYWRfdmFsaWRfbG4xOiBwY2llLWxuMS1hbHZAOGQ0IHsKKwkJCXJlZyA9IDwweDhkNCAxPjsKKwkJCWJpdHMgPSA8MSAxPjsKKwkJfTsKKwl9OworfTsKKworI2luY2x1ZGUgIm10Nzk4Ni1jbGtpdGcuZHRzaSIKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODZiLTI1MDB3YW4tZW1tYy1yZmIuZHRzIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4NmItMjUwMHdhbi1lbW1jLXJmYi5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc2OGU0NQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODZiLTI1MDB3YW4tZW1tYy1yZmIuZHRzCkBAIC0wLDAgKzEsMjQ1IEBACisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDc5ODZiLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2Yi1waW5jdHJsLmR0c2kiCisvIHsKKwltb2RlbCA9ICJNZWRpYVRlayBNVDc5ODZiIFJGQiI7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODZiLWVtbWMtcmZiIjsKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG4xIGxvZ2xldmVsPTggIFwKKwkJCQllYXJseWNvbj11YXJ0ODI1MCxtbWlvMzIsMHgxMTAwMjAwMCBcCisJCQkJcm9vdD1QQVJUTEFCRUw9cm9vdGZzIHJvb3R3YWl0IHJvb3Rmc3R5cGU9c3F1YXNoZnMsZjJmcyI7CisJfTsKKworCW1lbW9yeSB7CisJCXJlZyA9IDwwIDB4NDAwMDAwMDAgMCAweDEwMDAwMDAwPjsKKwl9OworCisJcmVnXzNwM3Y6IHJlZ3VsYXRvci0zcDN2IHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJmaXhlZC0zLjNWIjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwl9OworfTsKKworJnVhcnQwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCisvKiBXYXJuaW5nOiBwaW5zIHNoYXJlZCB3aXRoICZzbmFuZCAqLworJnVhcnQxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmdWFydDFfcGlucz47CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKKy8qIFdhcm5pbmc6IHBpbnMgc2hhcmVkIHdpdGggJnNwaTEgKi8KKyZ1YXJ0MiB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnVhcnQyX3BpbnM+OworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCismaTJjMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmkyY19waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismd2F0Y2hkb2cgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZldGggeworCXN0YXR1cyA9ICJva2F5IjsKKworCWdtYWMwOiBtYWNAMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssZXRoLW1hYyI7CisJCXJlZyA9IDwwPjsKKwkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKwkJZml4ZWQtbGluayB7CisJCQlzcGVlZCA9IDwyNTAwPjsKKwkJCWZ1bGwtZHVwbGV4OworCQkJcGF1c2U7CisJCX07CisJfTsKKworCWdtYWMxOiBtYWNAMSB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssZXRoLW1hYyI7CisJCXJlZyA9IDwxPjsKKwkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKwkJZml4ZWQtbGluayB7CisJCQlzcGVlZCA9IDwyNTAwPjsKKwkJCWZ1bGwtZHVwbGV4OworCQkJcGF1c2U7CisJCX07CisJfTsKKworCW1kaW86IG1kaW8tYnVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCXBoeTU6IHBoeUA1IHsKKwkJCWNvbXBhdGlibGUgPSAiZXRoZXJuZXQtcGh5LWlkNjdjOS5kZTBhIjsKKwkJCXJlZyA9IDw1PjsKKwkJCXJlc2V0LWdwaW9zID0gPCZwaW8gNiAxPjsKKwkJCXJlc2V0LWRlYXNzZXJ0LXVzID0gPDIwMDAwPjsKKwkJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCQl9OworCisJCXBoeTY6IHBoeUA2IHsKKwkJCWNvbXBhdGlibGUgPSAiZXRoZXJuZXQtcGh5LWlkNjdjOS5kZTBhIjsKKwkJCXJlZyA9IDw2PjsKKwkJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCQl9OworCisJCXN3aXRjaEAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NTMxIjsKKwkJCXJlZyA9IDwzMT47CisJCQlyZXNldC1ncGlvcyA9IDwmcGlvIDUgMD47CisKKwkJCXBvcnRzIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJCXBvcnRAMCB7CisJCQkJCXJlZyA9IDwwPjsKKwkJCQkJbGFiZWwgPSAibGFuMCI7CisJCQkJfTsKKworCQkJCXBvcnRAMSB7CisJCQkJCXJlZyA9IDwxPjsKKwkJCQkJbGFiZWwgPSAibGFuMSI7CisJCQkJfTsKKworCQkJCXBvcnRAMiB7CisJCQkJCXJlZyA9IDwyPjsKKwkJCQkJbGFiZWwgPSAibGFuMiI7CisJCQkJfTsKKworCQkJCXBvcnRAMyB7CisJCQkJCXJlZyA9IDwzPjsKKwkJCQkJbGFiZWwgPSAibGFuMyI7CisJCQkJfTsKKworCQkJCXBvcnRANCB7CisJCQkJCXJlZyA9IDw0PjsKKwkJCQkJbGFiZWwgPSAibGFuNCI7CisJCQkJfTsKKworCQkJCXBvcnRANSB7CisJCQkJCXJlZyA9IDw1PjsKKwkJCQkJbGFiZWwgPSAibGFuNSI7CisJCQkJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCQkJCWZpeGVkLWxpbmsgeworCQkJCQkJc3BlZWQgPSA8MjUwMD47CisJCQkJCQlmdWxsLWR1cGxleDsKKwkJCQkJCXBhdXNlOworCQkJCQl9OworCQkJCX07CisKKwkJCQlwb3J0QDYgeworCQkJCQlyZWcgPSA8Nj47CisJCQkJCWxhYmVsID0gImNwdSI7CisJCQkJCWV0aGVybmV0ID0gPCZnbWFjMD47CisJCQkJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCQkJCWZpeGVkLWxpbmsgeworCQkJCQkJc3BlZWQgPSA8MjUwMD47CisJCQkJCQlmdWxsLWR1cGxleDsKKwkJCQkJCXBhdXNlOworCQkJCQl9OworCQkJCX07CisJCQl9OworCQl9OworCX07Cit9OworCismaG5hdCB7CisJbXRrZXRoLXdhbiA9ICJldGgxIjsKKwltdGtldGgtbGFuID0gImxhbiI7CisJbXRrZXRoLW1heC1nbWFjID0gPDI+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKy8qIFdhcm5pbmc6IHBpbnMgc2hhcmVkIHdpdGggJnVhcnQyICovCismc3BpMSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNwaWNfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJm1tYzAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCIsICJzdGF0ZV91aHMiOworCXBpbmN0cmwtMCA9IDwmbW1jMF9waW5zX2RlZmF1bHQ+OworCXBpbmN0cmwtMSA9IDwmbW1jMF9waW5zX3Vocz47CisJYnVzLXdpZHRoID0gPDg+OworCW1heC1mcmVxdWVuY3kgPSA8NTAwMDAwMDA+OworCWNhcC1tbWMtaGlnaHNwZWVkOworCXZtbWMtc3VwcGx5ID0gPCZyZWdfM3Azdj47CisJdnFtbWMtc3VwcGx5ID0gPCZyZWdfM3Azdj47CisJbm9uLXJlbW92YWJsZTsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismd2JzeXMgeworCW1lZGlhdGVrLG10ZC1lZXByb20gPSA8JmZhY3RvcnkgMHgwMDAwPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismcGlvIHsKKwltbWMwX3BpbnNfZGVmYXVsdDogbW1jMC1waW5zLTIyLXRvLTMyLWRlZmF1bHQgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiZmxhc2giOworCQkJZ3JvdXBzID0gImVtbWNfNDUiOworCQl9OworCQljb25mLWNtZC1kYXQgeworCQkJcGlucyA9ICJTUEkwX0NMSyIsICJTUEkwX01PU0kiLCAiU1BJMF9NSVNPIiwKKwkJCSAgICAgICAiU1BJMF9DUyIsICJTUEkwX0hPTEQiLCAiU1BJMF9XUCIsCisJCQkgICAgICAgIlNQSTFfQ0xLIiwgIlNQSTFfTU9TSSIsICJTUEkxX01JU08iOworCQkJaW5wdXQtZW5hYmxlOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzRtQT47CisJCQltZWRpYXRlayxwdWxsLXVwLWFkdiA9IDwxPjsJLyogcHVsbC11cCAxMEsgKi8KKwkJfTsKKwkJY29uZi1jbGsgeworCQkJcGlucyA9ICJTUEkxX0NTIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV82bUE+OworCQkJbWVkaWF0ZWsscHVsbC1kb3duLWFkdiA9IDwyPjsJLyogcHVsbC1kb3duIDUwSyAqLworCQl9OworCQljb25mLXJzdCB7CisJCQlwaW5zID0gIlBXTTEiOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzRtQT47CisJCQltZWRpYXRlayxwdWxsLXVwLWFkdiA9IDwxPjsJLyogcHVsbC11cCAxMEsgKi8KKwkJfTsKKwl9OworCisJbW1jMF9waW5zX3VoczogbW1jMC1waW5zLTIyLXRvLTMyLXVocyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJmbGFzaCI7CisJCQlncm91cHMgPSAiZW1tY180NSI7CisJCX07CisJCWNvbmYtY21kLWRhdCB7CisJCQlwaW5zID0gIlNQSTBfQ0xLIiwgIlNQSTBfTU9TSSIsICJTUEkwX01JU08iLAorCQkJICAgICAgICJTUEkwX0NTIiwgIlNQSTBfSE9MRCIsICJTUEkwX1dQIiwKKwkJCSAgICAgICAiU1BJMV9DTEsiLCAiU1BJMV9NT1NJIiwgIlNQSTFfTUlTTyI7CisJCQlpbnB1dC1lbmFibGU7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtdXAtYWR2ID0gPDE+OwkvKiBwdWxsLXVwIDEwSyAqLworCQl9OworCQljb25mLWNsayB7CisJCQlwaW5zID0gIlNQSTFfQ1MiOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzZtQT47CisJCQltZWRpYXRlayxwdWxsLWRvd24tYWR2ID0gPDI+OwkvKiBwdWxsLWRvd24gNTBLICovCisJCX07CisJCWNvbmYtcnN0IHsKKwkJCXBpbnMgPSAiUFdNMSI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtdXAtYWR2ID0gPDE+OwkvKiBwdWxsLXVwIDEwSyAqLworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4NmItMjUwMHdhbi1nc3ctc3BpbS1uYW5kLXJmYi5kdHMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTg2Yi0yNTAwd2FuLWdzdy1zcGltLW5hbmQtcmZiLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDBiNTJmCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4NmItMjUwMHdhbi1nc3ctc3BpbS1uYW5kLXJmYi5kdHMKQEAgLTAsMCArMSwxOTggQEAKKy9kdHMtdjEvOworI2luY2x1ZGUgIm10Nzk4NmIuZHRzaSIKKyNpbmNsdWRlICJtdDc5ODZiLXBpbmN0cmwuZHRzaSIKKyNpbmNsdWRlICJtdDc5ODYtc3BpbS1uYW5kLXBhcnRpdGlvbi5kdHNpIgorLyB7CisJbW9kZWwgPSAiTWVkaWFUZWsgTVQ3OTg2YiBnc3cgUkZCIjsKKwljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4NmItZ3N3LXNwaW0tc25hbmQtcmZiIjsKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG4xIGxvZ2xldmVsPTggIFwKKwkJCQllYXJseWNvbj11YXJ0ODI1MCxtbWlvMzIsMHgxMTAwMjAwMCI7CisJfTsKKworCWdzdzogZ3N3QDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzUzeCI7CisJCW1lZGlhdGVrLGV0aHN5cyA9IDwmZXRoc3lzPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCX07CisKKwltZW1vcnkgeworCQlyZWcgPSA8MCAweDQwMDAwMDAwIDAgMHgxMDAwMDAwMD47CisJfTsKK307CisKKyZ1YXJ0MCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworLyogV2FybmluZzogcGlucyBzaGFyZWQgd2l0aCAmc25hbmQgKi8KKyZ1YXJ0MSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnVhcnQxX3BpbnM+OworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCisvKiBXYXJuaW5nOiBwaW5zIHNoYXJlZCB3aXRoICZzcGkxICovCismdWFydDIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0Ml9waW5zPjsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworJmkyYzAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZpMmNfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJndhdGNoZG9nIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZXRoIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlnbWFjMDogbWFjQDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MD47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwlnbWFjMTogbWFjQDEgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MT47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwltZGlvOiBtZGlvLWJ1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlwaHk1OiBwaHlANSB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8NT47CisJCQlyZXNldC1ncGlvcyA9IDwmcGlvIDYgMT47CisJCQlyZXNldC1kZWFzc2VydC11cyA9IDwyMDAwMD47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCQlwaHk2OiBwaHlANiB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8Nj47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCX07Cit9OworCismZ3N3IHsKKwltZWRpYXRlayxtZGlvID0gPCZtZGlvPjsKKwltZWRpYXRlayxwb3J0bWFwID0gImxsbGxsIjsKKwltZWRpYXRlayxtZGlvX21hc3Rlcl9waW5tdXggPSA8MT47CisJcmVzZXQtZ3Bpb3MgPSA8JnBpbyA1IDA+OworCWludGVycnVwdC1wYXJlbnQgPSA8JnBpbz47CisJaW50ZXJydXB0cyA9IDw2NiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwlwb3J0NTogcG9ydEA1IHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc1M3gtcG9ydCI7CisJCXJlZyA9IDw1PjsKKwkJcGh5LW1vZGUgPSAic2dtaWkiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJfTsKKworCX07CisKKwlwb3J0NjogcG9ydEA2IHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc1M3gtcG9ydCI7CisJCW1lZGlhdGVrLHNzYy1vbjsKKwkJcmVnID0gPDY+OworCQlwaHktbW9kZSA9ICJzZ21paSI7CisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJfTsKKwl9OworfTsKKworJmhuYXQgeworCW10a2V0aC13YW4gPSAiZXRoMSI7CisJbXRrZXRoLWxhbiA9ICJsYW4iOworCW10a2V0aC1tYXgtZ21hYyA9IDwyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc3BpMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNwaV9mbGFzaF9waW5zPjsKKwljcy1ncGlvcyA9IDwwPiwgPDA+OworCXN0YXR1cyA9ICJva2F5IjsKKworCXNwaV9ub3JAMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJqZWRlYyxzcGktbm9yIjsKKwkJcmVnID0gPDA+OworCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDwyMDAwMDAwMD47CisJCXNwaS10eC1idXN3aWR0aCA9IDw0PjsKKwkJc3BpLXJ4LWJ1c3dpZHRoID0gPDQ+OworCX07CisKKwlzcGlfbmFuZDogc3BpX25hbmRAMSB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJzcGktbmFuZCI7CisJCXJlZyA9IDwxPjsKKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8MjAwMDAwMDA+OworCQlzcGktdHgtYnVzd2lkdGggPSA8ND47CisJCXNwaS1yeC1idXN3aWR0aCA9IDw0PjsKKwl9OworfTsKKworLyogV2FybmluZzogcGlucyBzaGFyZWQgd2l0aCAmdWFydDIgKi8KKyZzcGkxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc3BpY19waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismd2JzeXMgeworCW1lZGlhdGVrLG10ZC1lZXByb20gPSA8JmZhY3RvcnkgMHgwMDAwPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismcGlvIHsKKwlzcGlfZmxhc2hfcGluczogc3BpLWZsYXNoLXBpbnMtMzMtdG8tMzggeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiZmxhc2giOworCQkJZ3JvdXBzID0gInNwaTAiLCAic3BpMF93cF9ob2xkIjsKKwkJfTsKKwkJY29uZi1wdSB7CisJCQlwaW5zID0gIlNQSTJfQ1MiLCAiU1BJMl9IT0xEIiwgIlNQSTJfV1AiOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzhtQT47CisJCQltZWRpYXRlayxwdWxsLXVwLWFkdiA9IDwwPjsJLyogYmlhcy1kaXNhYmxlICovCisJCX07CisJCWNvbmYtcGQgeworCQkJcGlucyA9ICJTUEkyX0NMSyIsICJTUEkyX01PU0kiLCAiU1BJMl9NSVNPIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV84bUE+OworCQkJbWVkaWF0ZWsscHVsbC1kb3duLWFkdiA9IDwwPjsJLyogYmlhcy1kaXNhYmxlICovCisJCX07CisKKwl9OworfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODZiLTI1MDB3YW4tc2QtcmZiLmR0cyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODZiLTI1MDB3YW4tc2QtcmZiLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTNjY2ExCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4NmItMjUwMHdhbi1zZC1yZmIuZHRzCkBAIC0wLDAgKzEsMjcyIEBACisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDc5ODZiLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2Yi1waW5jdHJsLmR0c2kiCisvIHsKKwltb2RlbCA9ICJNZWRpYVRlayBNVDc5ODZiIFJGQiI7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODZiLTI1MDB3YW4tc2QtcmZiIjsKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG4xIGxvZ2xldmVsPTggIFwKKwkJCWVhcmx5Y29uPXVhcnQ4MjUwLG1taW8zMiwweDExMDAyMDAwIFwKKwkJCXJvb3Q9UEFSVExBQkVMPXJvb3RmcyByb290d2FpdCByb290ZnN0eXBlPXNxdWFzaGZzLGYyZnMiOworCX07CisKKwltZW1vcnkgeworCQlyZWcgPSA8MCAweDQwMDAwMDAwIDAgMHgxMDAwMDAwMD47CisJfTsKKworCXJlZ18zcDN2OiByZWd1bGF0b3ItM3AzdiB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKwkJcmVndWxhdG9yLW5hbWUgPSAiZml4ZWQtMy4zViI7CisJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLWJvb3Qtb247CisJCXJlZ3VsYXRvci1hbHdheXMtb247CisJfTsKK307CisKKyZ1YXJ0MCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworLyogV2FybmluZzogcGlucyBzaGFyZWQgd2l0aCAmc25hbmQgKi8KKyZ1YXJ0MSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnVhcnQxX3BpbnM+OworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCisvKiBXYXJuaW5nOiBwaW5zIHNoYXJlZCB3aXRoICZzcGkxICovCismdWFydDIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0Ml9waW5zPjsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworJmkyYzAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZpMmNfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJndhdGNoZG9nIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZXRoIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlnbWFjMDogbWFjQDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MD47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwlnbWFjMTogbWFjQDEgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MT47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwltZGlvOiBtZGlvLWJ1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlwaHk1OiBwaHlANSB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8NT47CisJCQlyZXNldC1ncGlvcyA9IDwmcGlvIDYgMT47CisJCQlyZXNldC1kZWFzc2VydC11cyA9IDwyMDAwMD47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCQlwaHk2OiBwaHlANiB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8Nj47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCQlzd2l0Y2hAMCB7CisJCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzUzMSI7CisJCQlyZWcgPSA8MzE+OworCQkJcmVzZXQtZ3Bpb3MgPSA8JnBpbyA1IDA+OworCisJCQlwb3J0cyB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCQlwb3J0QDAgeworCQkJCQlyZWcgPSA8MD47CisJCQkJCWxhYmVsID0gImxhbjAiOworCQkJCX07CisKKwkJCQlwb3J0QDEgeworCQkJCQlyZWcgPSA8MT47CisJCQkJCWxhYmVsID0gImxhbjEiOworCQkJCX07CisKKwkJCQlwb3J0QDIgeworCQkJCQlyZWcgPSA8Mj47CisJCQkJCWxhYmVsID0gImxhbjIiOworCQkJCX07CisKKwkJCQlwb3J0QDMgeworCQkJCQlyZWcgPSA8Mz47CisJCQkJCWxhYmVsID0gImxhbjMiOworCQkJCX07CisKKwkJCQlwb3J0QDQgeworCQkJCQlyZWcgPSA8ND47CisJCQkJCWxhYmVsID0gImxhbjQiOworCQkJCX07CisKKwkJCQlwb3J0QDUgeworCQkJCQlyZWcgPSA8NT47CisJCQkJCWxhYmVsID0gImxhbjUiOworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCisJCQkJcG9ydEA2IHsKKwkJCQkJcmVnID0gPDY+OworCQkJCQlsYWJlbCA9ICJjcHUiOworCQkJCQlldGhlcm5ldCA9IDwmZ21hYzA+OworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmhuYXQgeworCW10a2V0aC13YW4gPSAiZXRoMSI7CisJbXRrZXRoLWxhbiA9ICJsYW4iOworCW10a2V0aC1tYXgtZ21hYyA9IDwyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismbW1jMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgInN0YXRlX3VocyI7CisJcGluY3RybC0wID0gPCZtbWMwX3BpbnNfZGVmYXVsdD47CisJcGluY3RybC0xID0gPCZtbWMwX3BpbnNfdWhzPjsKKwlidXMtd2lkdGggPSA8ND47CisJbWF4LWZyZXF1ZW5jeSA9IDw1MjAwMDAwMD47CisJY2FwLXNkLWhpZ2hzcGVlZDsKKwl2bW1jLXN1cHBseSA9IDwmcmVnXzNwM3Y+OworCXZxbW1jLXN1cHBseSA9IDwmcmVnXzNwM3Y+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwaW8geworCW1tYzBfcGluc19kZWZhdWx0OiBtbWMwLXBpbnMtMjItdG8tMzItZGVmYXVsdCB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJmbGFzaCI7CisJCQlncm91cHMgPSAiZW1tY180NSI7CisJCX07CisKKwkJY29uZi1jbWQtZGF0IHsKKwkJCXBpbnMgPSAiU1BJMF9DTEsiLCAiU1BJMF9NT1NJIiwgIlNQSTBfTUlTTyIsCisJCQkgICAgICAgIlNQSTBfQ1MiLCAiU1BJMF9IT0xEIiwgIlNQSTBfV1AiLAorCQkJICAgICAgICJTUEkxX0NMSyIsICJTUEkxX01PU0kiLCAiU1BJMV9NSVNPIjsKKwkJCWlucHV0LWVuYWJsZTsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV80bUE+OworCQkJbWVkaWF0ZWsscHVsbC11cC1hZHYgPSA8MT47CS8qIHB1bGwtdXAgMTBLICovCisJCX07CisKKwkJY29uZi1jbGsgeworCQkJcGlucyA9ICJTUEkxX0NTIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV82bUE+OworCQkJbWVkaWF0ZWsscHVsbC1kb3duLWFkdiA9IDwyPjsJLyogcHVsbC1kb3duIDUwSyAqLworCQl9OworCisJCWNvbmYtcnN0IHsKKwkJCXBpbnMgPSAiUFdNMSI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtdXAtYWR2ID0gPDE+OwkvKiBwdWxsLXVwIDEwSyAqLworCQl9OworCX07CisKKwltbWMwX3BpbnNfdWhzOiBtbWMwLXBpbnMtMjItdG8tMzItdWhzIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJlbW1jXzQ1IjsKKwkJfTsKKworCQljb25mLWNtZC1kYXQgeworCQkJcGlucyA9ICJTUEkwX0NMSyIsICJTUEkwX01PU0kiLCAiU1BJMF9NSVNPIiwKKwkJCSAgICAgICAiU1BJMF9DUyIsICJTUEkwX0hPTEQiLCAiU1BJMF9XUCIsCisJCQkgICAgICAgIlNQSTFfQ0xLIiwgIlNQSTFfTU9TSSIsICJTUEkxX01JU08iOworCQkJaW5wdXQtZW5hYmxlOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzRtQT47CisJCQltZWRpYXRlayxwdWxsLXVwLWFkdiA9IDwxPjsJLyogcHVsbC11cCAxMEsgKi8KKwkJfTsKKworCQljb25mLWNsayB7CisJCQlwaW5zID0gIlNQSTFfQ1MiOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzZtQT47CisJCQltZWRpYXRlayxwdWxsLWRvd24tYWR2ID0gPDI+OwkvKiBwdWxsLWRvd24gNTBLICovCisJCX07CisKKwkJY29uZi1yc3QgeworCQkJcGlucyA9ICJQV00xIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV80bUE+OworCQkJbWVkaWF0ZWsscHVsbC11cC1hZHYgPSA8MT47CS8qIHB1bGwtdXAgMTBLICovCisJCX07CisJfTsKKworCXdmXzJnXzVnX3BpbnM6IHdmXzJnXzVnLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAid2lmaSI7CisJCQlncm91cHMgPSAid2ZfMmciLCAid2ZfNWciOworCQl9OworCQljb25mIHsKKwkJCXBpbnMgPSAiV0YwX0hCMSIsICJXRjBfSEIyIiwgIldGMF9IQjMiLCAiV0YwX0hCNCIsCisJCQkgICAgICAgIldGMF9IQjAiLCAiV0YwX0hCMF9CIiwgIldGMF9IQjUiLCAiV0YwX0hCNiIsCisJCQkgICAgICAgIldGMF9IQjciLCAiV0YwX0hCOCIsICJXRjBfSEI5IiwgIldGMF9IQjEwIiwKKwkJCSAgICAgICAiV0YwX1RPUF9DTEsiLCAiV0YwX1RPUF9EQVRBIiwgIldGMV9IQjEiLAorCQkJICAgICAgICJXRjFfSEIyIiwgIldGMV9IQjMiLCAiV0YxX0hCNCIsICJXRjFfSEIwIiwKKwkJCSAgICAgICAiV0YxX0hCNSIsICJXRjFfSEI2IiwgIldGMV9IQjciLCAiV0YxX0hCOCIsCisJCQkgICAgICAgIldGMV9UT1BfQ0xLIiwgIldGMV9UT1BfREFUQSI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNG1BPjsKKwkJfTsKKwl9OworCisJd2ZfZGJkY19waW5zOiB3Zl9kYmRjLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAid2lmaSI7CisJCQlncm91cHMgPSAid2ZfZGJkYyI7CisJCX07CisJCWNvbmYgeworCQkJcGlucyA9ICJXRjBfSEIxIiwgIldGMF9IQjIiLCAiV0YwX0hCMyIsICJXRjBfSEI0IiwKKwkJCSAgICAgICAiV0YwX0hCMCIsICJXRjBfSEIwX0IiLCAiV0YwX0hCNSIsICJXRjBfSEI2IiwKKwkJCSAgICAgICAiV0YwX0hCNyIsICJXRjBfSEI4IiwgIldGMF9IQjkiLCAiV0YwX0hCMTAiLAorCQkJICAgICAgICJXRjBfVE9QX0NMSyIsICJXRjBfVE9QX0RBVEEiLCAiV0YxX0hCMSIsCisJCQkgICAgICAgIldGMV9IQjIiLCAiV0YxX0hCMyIsICJXRjFfSEI0IiwgIldGMV9IQjAiLAorCQkJICAgICAgICJXRjFfSEI1IiwgIldGMV9IQjYiLCAiV0YxX0hCNyIsICJXRjFfSEI4IiwKKwkJCSAgICAgICAiV0YxX1RPUF9DTEsiLCAiV0YxX1RPUF9EQVRBIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV80bUE+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4NmItMjUwMHdhbi1zbmZpLW5hbmQtcmZiLmR0cyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODZiLTI1MDB3YW4tc25maS1uYW5kLXJmYi5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI3MmY2YwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODZiLTI1MDB3YW4tc25maS1uYW5kLXJmYi5kdHMKQEAgLTAsMCArMSwyMDkgQEAKKy9kdHMtdjEvOworI2luY2x1ZGUgIm10Nzk4NmIuZHRzaSIKKyNpbmNsdWRlICJtdDc5ODZiLXBpbmN0cmwuZHRzaSIKKyNpbmNsdWRlICJtdDc5ODYtc25maS1uYW5kLXBhcnRpdGlvbi5kdHNpIgorLyB7CisJbW9kZWwgPSAiTWVkaWFUZWsgTVQ3OTg2YiBSRkIiOworCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2Yi1zbmZpLXNuYW5kLXJmYiI7CisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDBuMSBsb2dsZXZlbD04ICBcCisJCQkJZWFybHljb249dWFydDgyNTAsbW1pbzMyLDB4MTEwMDIwMDAiOworCX07CisKKwltZW1vcnkgeworCQlyZWcgPSA8MCAweDQwMDAwMDAwIDAgMHgxMDAwMDAwMD47CisJfTsKK307CisKKyZ1YXJ0MCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworLyogV2FybmluZzogcGlucyBzaGFyZWQgd2l0aCAmc25hbmQgKi8KKyZ1YXJ0MSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnVhcnQxX3BpbnM+OworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCisvKiBXYXJuaW5nOiBwaW5zIHNoYXJlZCB3aXRoICZzcGkxICovCismdWFydDIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0Ml9waW5zPjsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworJmkyYzAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZpMmNfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJndhdGNoZG9nIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZXRoIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlnbWFjMDogbWFjQDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MD47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwlnbWFjMTogbWFjQDEgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MT47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwltZGlvOiBtZGlvLWJ1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlwaHk1OiBwaHlANSB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8NT47CisJCQlyZXNldC1ncGlvcyA9IDwmcGlvIDYgMT47CisJCQlyZXNldC1kZWFzc2VydC11cyA9IDwyMDAwMD47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCQlwaHk2OiBwaHlANiB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8Nj47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCQlzd2l0Y2hAMCB7CisJCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzUzMSI7CisJCQlyZWcgPSA8MzE+OworCQkJcmVzZXQtZ3Bpb3MgPSA8JnBpbyA1IDA+OworCisJCQlwb3J0cyB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCQlwb3J0QDAgeworCQkJCQlyZWcgPSA8MD47CisJCQkJCWxhYmVsID0gImxhbjAiOworCQkJCX07CisKKwkJCQlwb3J0QDEgeworCQkJCQlyZWcgPSA8MT47CisJCQkJCWxhYmVsID0gImxhbjEiOworCQkJCX07CisKKwkJCQlwb3J0QDIgeworCQkJCQlyZWcgPSA8Mj47CisJCQkJCWxhYmVsID0gImxhbjIiOworCQkJCX07CisKKwkJCQlwb3J0QDMgeworCQkJCQlyZWcgPSA8Mz47CisJCQkJCWxhYmVsID0gImxhbjMiOworCQkJCX07CisKKwkJCQlwb3J0QDQgeworCQkJCQlyZWcgPSA8ND47CisJCQkJCWxhYmVsID0gImxhbjQiOworCQkJCX07CisKKwkJCQlwb3J0QDUgeworCQkJCQlyZWcgPSA8NT47CisJCQkJCWxhYmVsID0gImxhbjUiOworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCisJCQkJcG9ydEA2IHsKKwkJCQkJcmVnID0gPDY+OworCQkJCQlsYWJlbCA9ICJjcHUiOworCQkJCQlldGhlcm5ldCA9IDwmZ21hYzA+OworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmhuYXQgeworCW10a2V0aC13YW4gPSAiZXRoMSI7CisJbXRrZXRoLWxhbiA9ICJsYW4iOworCW10a2V0aC1tYXgtZ21hYyA9IDwyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCisvKiBXYXJuaW5nOiBwaW5zIHNoYXJlZCB3aXRoICZ1YXJ0MSAqLworJnNuYW5kIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc25maV9waW5zPjsKKwltZWRpYXRlayxxdWFkLXNwaTsKKwlzdGF0dXMgPSAib2theSI7CisKKwlwYXJ0aXRpb25zIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1wYXJ0aXRpb25zIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCX07Cit9OworCisvKiBXYXJuaW5nOiBwaW5zIHNoYXJlZCB3aXRoICZ1YXJ0MiAqLworJnNwaTEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzcGljX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ3YnN5cyB7CisJbWVkaWF0ZWssbXRkLWVlcHJvbSA9IDwmZmFjdG9yeSAweDAwMDA+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwaW8geworCXNuZmlfcGluczogc25maS1waW5zLTIzLXRvLTI4IHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJzbmZpIjsKKwkJfTsKKwkJY29uZi1jbGsgeworCQkJcGlucyA9ICJTUEkwX0NMSyI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfOG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtZG93bi1hZHYgPSA8MD47CS8qIGJpYXMtZGlzYWJsZSAqLworCQl9OworCQljb25mLXB1IHsKKwkJCXBpbnMgPSAiU1BJMF9DUyIsICJTUEkwX0hPTEQiLCAiU1BJMF9XUCI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNm1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtdXAtYWR2ID0gPDA+OwkvKiBiaWFzLWRpc2FibGUgKi8KKwkJfTsKKwkJY29uZi1wZCB7CisJCQlwaW5zID0gIlNQSTBfTU9TSSIsICJTUEkwX01JU08iOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzZtQT47CisJCQltZWRpYXRlayxwdWxsLWRvd24tYWR2ID0gPDA+OwkvKiBiaWFzLWRpc2FibGUgKi8KKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODZiLTI1MDB3YW4tc3BpbS1uYW5kLXJmYi5kdHMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTg2Yi0yNTAwd2FuLXNwaW0tbmFuZC1yZmIuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYjNiYTMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTg2Yi0yNTAwd2FuLXNwaW0tbmFuZC1yZmIuZHRzCkBAIC0wLDAgKzEsMjU1IEBACisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDc5ODZiLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2Yi1waW5jdHJsLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2LXNwaW0tbmFuZC1wYXJ0aXRpb24uZHRzaSIKKy8geworCW1vZGVsID0gIk1lZGlhVGVrIE1UNzk4NmIgUkZCIjsKKwljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4NmItMjUwMHdhbi1zcGltLXNuYW5kLXJmYiI7CisJY2hvc2VuIHsKKwkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCwxMTUyMDBuMSBsb2dsZXZlbD04ICBcCisJCQkJZWFybHljb249dWFydDgyNTAsbW1pbzMyLDB4MTEwMDIwMDAiOworCX07CisKKwltZW1vcnkgeworCQlyZWcgPSA8MCAweDQwMDAwMDAwIDAgMHgxMDAwMDAwMD47CisJfTsKK307CisKKyZ1YXJ0MCB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworLyogV2FybmluZzogcGlucyBzaGFyZWQgd2l0aCAmc25hbmQgKi8KKyZ1YXJ0MSB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnVhcnQxX3BpbnM+OworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCisvKiBXYXJuaW5nOiBwaW5zIHNoYXJlZCB3aXRoICZzcGkxICovCismdWFydDIgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0Ml9waW5zPjsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworJmkyYzAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZpMmNfcGlucz47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJndhdGNoZG9nIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismZXRoIHsKKwlzdGF0dXMgPSAib2theSI7CisKKwlnbWFjMDogbWFjQDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MD47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwlnbWFjMTogbWFjQDEgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGV0aC1tYWMiOworCQlyZWcgPSA8MT47CisJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCisJCWZpeGVkLWxpbmsgeworCQkJc3BlZWQgPSA8MjUwMD47CisJCQlmdWxsLWR1cGxleDsKKwkJCXBhdXNlOworCQl9OworCX07CisKKwltZGlvOiBtZGlvLWJ1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlwaHk1OiBwaHlANSB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8NT47CisJCQlyZXNldC1ncGlvcyA9IDwmcGlvIDYgMT47CisJCQlyZXNldC1kZWFzc2VydC11cyA9IDwyMDAwMD47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCQlwaHk2OiBwaHlANiB7CisJCQljb21wYXRpYmxlID0gImV0aGVybmV0LXBoeS1pZDY3YzkuZGUwYSI7CisJCQlyZWcgPSA8Nj47CisJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKwkJfTsKKworCQlzd2l0Y2hAMCB7CisJCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzUzMSI7CisJCQlyZWcgPSA8MzE+OworCQkJcmVzZXQtZ3Bpb3MgPSA8JnBpbyA1IDA+OworCisJCQlwb3J0cyB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCQlwb3J0QDAgeworCQkJCQlyZWcgPSA8MD47CisJCQkJCWxhYmVsID0gImxhbjAiOworCQkJCX07CisKKwkJCQlwb3J0QDEgeworCQkJCQlyZWcgPSA8MT47CisJCQkJCWxhYmVsID0gImxhbjEiOworCQkJCX07CisKKwkJCQlwb3J0QDIgeworCQkJCQlyZWcgPSA8Mj47CisJCQkJCWxhYmVsID0gImxhbjIiOworCQkJCX07CisKKwkJCQlwb3J0QDMgeworCQkJCQlyZWcgPSA8Mz47CisJCQkJCWxhYmVsID0gImxhbjMiOworCQkJCX07CisKKwkJCQlwb3J0QDQgeworCQkJCQlyZWcgPSA8ND47CisJCQkJCWxhYmVsID0gImxhbjQiOworCQkJCX07CisKKwkJCQlwb3J0QDUgeworCQkJCQlyZWcgPSA8NT47CisJCQkJCWxhYmVsID0gImxhbjUiOworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCisJCQkJcG9ydEA2IHsKKwkJCQkJcmVnID0gPDY+OworCQkJCQlsYWJlbCA9ICJjcHUiOworCQkJCQlldGhlcm5ldCA9IDwmZ21hYzA+OworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmhuYXQgeworCW10a2V0aC13YW4gPSAiZXRoMSI7CisJbXRrZXRoLWxhbiA9ICJsYW4iOworCW10a2V0aC1tYXgtZ21hYyA9IDwyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc3BpMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNwaV9mbGFzaF9waW5zPjsKKwljcy1ncGlvcyA9IDwwPiwgPDA+OworCXN0YXR1cyA9ICJva2F5IjsKKworCXNwaV9ub3JAMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJqZWRlYyxzcGktbm9yIjsKKwkJcmVnID0gPDA+OworCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDwyMDAwMDAwMD47CisJCXNwaS10eC1idXN3aWR0aCA9IDw0PjsKKwkJc3BpLXJ4LWJ1c3dpZHRoID0gPDQ+OworCX07CisKKwlzcGlfbmFuZDogc3BpX25hbmRAMSB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJzcGktbmFuZCI7CisJCXJlZyA9IDwxPjsKKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8MjAwMDAwMDA+OworCQlzcGktdHgtYnVzd2lkdGggPSA8ND47CisJCXNwaS1yeC1idXN3aWR0aCA9IDw0PjsKKwl9OworfTsKKworLyogV2FybmluZzogcGlucyBzaGFyZWQgd2l0aCAmdWFydDIgKi8KKyZzcGkxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc3BpY19waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismd2JzeXMgeworCW1lZGlhdGVrLG10ZC1lZXByb20gPSA8JmZhY3RvcnkgMHgwMDAwPjsKKwlzdGF0dXMgPSAib2theSI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgImRiZGMiOworCXBpbmN0cmwtMCA9IDwmd2ZfMmdfNWdfcGlucz47CisJcGluY3RybC0xID0gPCZ3Zl9kYmRjX3BpbnM+OworfTsKKworJnBpbyB7CisJc3BpX2ZsYXNoX3BpbnM6IHNwaS1mbGFzaC1waW5zLTMzLXRvLTM4IHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJzcGkwIiwgInNwaTBfd3BfaG9sZCI7CisJCX07CisJCWNvbmYtcHUgeworCQkJcGlucyA9ICJTUEkyX0NTIiwgIlNQSTJfSE9MRCIsICJTUEkyX1dQIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV84bUE+OworCQkJbWVkaWF0ZWsscHVsbC11cC1hZHYgPSA8MD47CS8qIGJpYXMtZGlzYWJsZSAqLworCQl9OworCQljb25mLXBkIHsKKwkJCXBpbnMgPSAiU1BJMl9DTEsiLCAiU1BJMl9NT1NJIiwgIlNQSTJfTUlTTyI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfOG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtZG93bi1hZHYgPSA8MD47CS8qIGJpYXMtZGlzYWJsZSAqLworCQl9OworCisJfTsKKworCXdmXzJnXzVnX3BpbnM6IHdmXzJnXzVnLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAid2lmaSI7CisJCQlncm91cHMgPSAid2ZfMmciLCAid2ZfNWciOworCQl9OworCQljb25mIHsKKwkJCXBpbnMgPSAiV0YwX0hCMSIsICJXRjBfSEIyIiwgIldGMF9IQjMiLCAiV0YwX0hCNCIsCisJCQkgICAgICAgIldGMF9IQjAiLCAiV0YwX0hCMF9CIiwgIldGMF9IQjUiLCAiV0YwX0hCNiIsCisJCQkgICAgICAgIldGMF9IQjciLCAiV0YwX0hCOCIsICJXRjBfSEI5IiwgIldGMF9IQjEwIiwKKwkJCSAgICAgICAiV0YwX1RPUF9DTEsiLCAiV0YwX1RPUF9EQVRBIiwgIldGMV9IQjEiLAorCQkJICAgICAgICJXRjFfSEIyIiwgIldGMV9IQjMiLCAiV0YxX0hCNCIsICJXRjFfSEIwIiwKKwkJCSAgICAgICAiV0YxX0hCNSIsICJXRjFfSEI2IiwgIldGMV9IQjciLCAiV0YxX0hCOCIsCisJCQkgICAgICAgIldGMV9UT1BfQ0xLIiwgIldGMV9UT1BfREFUQSI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNG1BPjsKKwkJfTsKKwl9OworCisJd2ZfZGJkY19waW5zOiB3Zl9kYmRjLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAid2lmaSI7CisJCQlncm91cHMgPSAid2ZfZGJkYyI7CisJCX07CisJCWNvbmYgeworCQkJcGlucyA9ICJXRjBfSEIxIiwgIldGMF9IQjIiLCAiV0YwX0hCMyIsICJXRjBfSEI0IiwKKwkJCSAgICAgICAiV0YwX0hCMCIsICJXRjBfSEIwX0IiLCAiV0YwX0hCNSIsICJXRjBfSEI2IiwKKwkJCSAgICAgICAiV0YwX0hCNyIsICJXRjBfSEI4IiwgIldGMF9IQjkiLCAiV0YwX0hCMTAiLAorCQkJICAgICAgICJXRjBfVE9QX0NMSyIsICJXRjBfVE9QX0RBVEEiLCAiV0YxX0hCMSIsCisJCQkgICAgICAgIldGMV9IQjIiLCAiV0YxX0hCMyIsICJXRjFfSEI0IiwgIldGMV9IQjAiLAorCQkJICAgICAgICJXRjFfSEI1IiwgIldGMV9IQjYiLCAiV0YxX0hCNyIsICJXRjFfSEI4IiwKKwkJCSAgICAgICAiV0YxX1RPUF9DTEsiLCAiV0YxX1RPUF9EQVRBIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV80bUE+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4NmItMjUwMHdhbi1zcGltLW5vci1yZmIuZHRzIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4NmItMjUwMHdhbi1zcGltLW5vci1yZmIuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3N2VlYzIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTg2Yi0yNTAwd2FuLXNwaW0tbm9yLXJmYi5kdHMKQEAgLTAsMCArMSwyMDggQEAKKy9kdHMtdjEvOworI2luY2x1ZGUgIm10Nzk4NmIuZHRzaSIKKyNpbmNsdWRlICJtdDc5ODZiLXBpbmN0cmwuZHRzaSIKKyNpbmNsdWRlICJtdDc5ODYtc3BpbS1ub3ItcGFydGl0aW9uLmR0c2kiCisvIHsKKwltb2RlbCA9ICJNZWRpYVRlayBNVDc5ODZiIFJGQiI7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODZiLW5vci1yZmIiOworCWNob3NlbiB7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwbjEgbG9nbGV2ZWw9OCAgXAorCQkJCWVhcmx5Y29uPXVhcnQ4MjUwLG1taW8zMiwweDExMDAyMDAwIjsKKwl9OworCisJbWVtb3J5IHsKKwkJcmVnID0gPDAgMHg0MDAwMDAwMCAwIDB4MTAwMDAwMDA+OworCX07Cit9OworCismdWFydDAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKy8qIFdhcm5pbmc6IHBpbnMgc2hhcmVkIHdpdGggJnNuYW5kICovCismdWFydDEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0MV9waW5zPjsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworLyogV2FybmluZzogcGlucyBzaGFyZWQgd2l0aCAmc3BpMSAqLworJnVhcnQyIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmdWFydDJfcGlucz47CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKKyZpMmMwIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmaTJjX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ3YXRjaGRvZyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmV0aCB7CisJc3RhdHVzID0gIm9rYXkiOworCisJZ21hYzA6IG1hY0AwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKwkJcmVnID0gPDA+OworCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQlmaXhlZC1saW5rIHsKKwkJCXNwZWVkID0gPDI1MDA+OworCQkJZnVsbC1kdXBsZXg7CisJCQlwYXVzZTsKKwkJfTsKKwl9OworCisJZ21hYzE6IG1hY0AxIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKwkJcmVnID0gPDE+OworCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQlmaXhlZC1saW5rIHsKKwkJCXNwZWVkID0gPDI1MDA+OworCQkJZnVsbC1kdXBsZXg7CisJCQlwYXVzZTsKKwkJfTsKKwl9OworCisJbWRpbzogbWRpby1idXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJcGh5NTogcGh5QDUgeworCQkJY29tcGF0aWJsZSA9ICJldGhlcm5ldC1waHktaWQ2N2M5LmRlMGEiOworCQkJcmVnID0gPDU+OworCQkJcmVzZXQtZ3Bpb3MgPSA8JnBpbyA2IDE+OworCQkJcmVzZXQtZGVhc3NlcnQtdXMgPSA8MjAwMDA+OworCQkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisJCX07CisKKwkJcGh5NjogcGh5QDYgeworCQkJY29tcGF0aWJsZSA9ICJldGhlcm5ldC1waHktaWQ2N2M5LmRlMGEiOworCQkJcmVnID0gPDY+OworCQkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisJCX07CisKKwkJc3dpdGNoQDAgeworCQkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc1MzEiOworCQkJcmVnID0gPDMxPjsKKwkJCXJlc2V0LWdwaW9zID0gPCZwaW8gNSAwPjsKKworCQkJcG9ydHMgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQkJcG9ydEAwIHsKKwkJCQkJcmVnID0gPDA+OworCQkJCQlsYWJlbCA9ICJsYW4wIjsKKwkJCQl9OworCisJCQkJcG9ydEAxIHsKKwkJCQkJcmVnID0gPDE+OworCQkJCQlsYWJlbCA9ICJsYW4xIjsKKwkJCQl9OworCisJCQkJcG9ydEAyIHsKKwkJCQkJcmVnID0gPDI+OworCQkJCQlsYWJlbCA9ICJsYW4yIjsKKwkJCQl9OworCisJCQkJcG9ydEAzIHsKKwkJCQkJcmVnID0gPDM+OworCQkJCQlsYWJlbCA9ICJsYW4zIjsKKwkJCQl9OworCisJCQkJcG9ydEA0IHsKKwkJCQkJcmVnID0gPDQ+OworCQkJCQlsYWJlbCA9ICJsYW40IjsKKwkJCQl9OworCisJCQkJcG9ydEA1IHsKKwkJCQkJcmVnID0gPDU+OworCQkJCQlsYWJlbCA9ICJsYW41IjsKKwkJCQkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKwkJCQkJZml4ZWQtbGluayB7CisJCQkJCQlzcGVlZCA9IDwyNTAwPjsKKwkJCQkJCWZ1bGwtZHVwbGV4OworCQkJCQkJcGF1c2U7CisJCQkJCX07CisJCQkJfTsKKworCQkJCXBvcnRANiB7CisJCQkJCXJlZyA9IDw2PjsKKwkJCQkJbGFiZWwgPSAiY3B1IjsKKwkJCQkJZXRoZXJuZXQgPSA8JmdtYWMwPjsKKwkJCQkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKwkJCQkJZml4ZWQtbGluayB7CisJCQkJCQlzcGVlZCA9IDwyNTAwPjsKKwkJCQkJCWZ1bGwtZHVwbGV4OworCQkJCQkJcGF1c2U7CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZobmF0IHsKKwltdGtldGgtd2FuID0gImV0aDEiOworCW10a2V0aC1sYW4gPSAibGFuIjsKKwltdGtldGgtbWF4LWdtYWMgPSA8Mj47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJnNwaTAgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzcGlfZmxhc2hfcGlucz47CisJY3MtZ3Bpb3MgPSA8MD4sIDwwPjsKKwlzdGF0dXMgPSAib2theSI7CisKKwlzcGlfbm9yQDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiamVkZWMsc3BpLW5vciI7CisJCXJlZyA9IDwwPjsKKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8NTIwMDAwMDA+OworCQlzcGktdHgtYnVzd2lkdGggPSA8ND47CisJCXNwaS1yeC1idXN3aWR0aCA9IDw0PjsKKwl9OworfTsKKworLyogV2FybmluZzogcGlucyBzaGFyZWQgd2l0aCAmdWFydDIgKi8KKyZzcGkxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc3BpY19waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismd2JzeXMgeworCW1lZGlhdGVrLG10ZC1lZXByb20gPSA8JmZhY3RvcnkgMHgwMDAwPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismcGlvIHsKKwlzcGlfZmxhc2hfcGluczogc3BpLWZsYXNoLXBpbnMtMzMtdG8tMzggeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiZmxhc2giOworCQkJZ3JvdXBzID0gInNwaTAiLCAic3BpMF93cF9ob2xkIjsKKwkJfTsKKwkJY29uZi1wdSB7CisJCQlwaW5zID0gIlNQSTJfQ1MiLCAiU1BJMl9IT0xEIiwgIlNQSTJfV1AiOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzhtQT47CisJCQltZWRpYXRlayxwdWxsLXVwLWFkdiA9IDwwPjsJLyogYmlhcy1kaXNhYmxlICovCisJCX07CisJCWNvbmYtcGQgeworCQkJcGlucyA9ICJTUEkyX0NMSyIsICJTUEkyX01PU0kiLCAiU1BJMl9NSVNPIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV84bUE+OworCQkJbWVkaWF0ZWsscHVsbC1kb3duLWFkdiA9IDwwPjsJLyogYmlhcy1kaXNhYmxlICovCisJCX07CisKKwl9OworfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODZiLWVtbWMtcmZiLmR0cyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODZiLWVtbWMtcmZiLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODNjMDk4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4NmItZW1tYy1yZmIuZHRzCkBAIC0wLDAgKzEsMjI5IEBACisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDc5ODZiLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2Yi1waW5jdHJsLmR0c2kiCisvIHsKKwltb2RlbCA9ICJNZWRpYVRlayBNVDc5ODZiIFJGQiI7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODZiLWVtbWMtcmZiIjsKKwljaG9zZW4geworCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMwLDExNTIwMG4xIGxvZ2xldmVsPTggIFwKKwkJCQllYXJseWNvbj11YXJ0ODI1MCxtbWlvMzIsMHgxMTAwMjAwMCBcCisJCQkJcm9vdD1QQVJUTEFCRUw9cm9vdGZzIHJvb3R3YWl0IHJvb3Rmc3R5cGU9c3F1YXNoZnMsZjJmcyI7CisJfTsKKworCW1lbW9yeSB7CisJCXJlZyA9IDwwIDB4NDAwMDAwMDAgMCAweDEwMDAwMDAwPjsKKwl9OworCisJcmVnXzNwM3Y6IHJlZ3VsYXRvci0zcDN2IHsKKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworCQlyZWd1bGF0b3ItbmFtZSA9ICJmaXhlZC0zLjNWIjsKKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwl9OworfTsKKworJnVhcnQwIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCisvKiBXYXJuaW5nOiBwaW5zIHNoYXJlZCB3aXRoICZzbmFuZCAqLworJnVhcnQxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmdWFydDFfcGlucz47CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKKy8qIFdhcm5pbmc6IHBpbnMgc2hhcmVkIHdpdGggJnNwaTEgKi8KKyZ1YXJ0MiB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnVhcnQyX3BpbnM+OworCXN0YXR1cyA9ICJkaXNhYmxlZCI7Cit9OworCismaTJjMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JmkyY19waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismd2F0Y2hkb2cgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZldGggeworCXN0YXR1cyA9ICJva2F5IjsKKworCWdtYWMwOiBtYWNAMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssZXRoLW1hYyI7CisJCXJlZyA9IDwwPjsKKwkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKwkJZml4ZWQtbGluayB7CisJCQlzcGVlZCA9IDwyNTAwPjsKKwkJCWZ1bGwtZHVwbGV4OworCQkJcGF1c2U7CisJCX07CisJfTsKKworCWdtYWMxOiBtYWNAMSB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssZXRoLW1hYyI7CisJCXJlZyA9IDwxPjsKKwkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKwkJZml4ZWQtbGluayB7CisJCQlzcGVlZCA9IDwyNTAwPjsKKwkJCWZ1bGwtZHVwbGV4OworCQkJcGF1c2U7CisJCX07CisJfTsKKworCW1kaW86IG1kaW8tYnVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCXBoeTU6IHBoeUA1IHsKKwkJCWNvbXBhdGlibGUgPSAiZXRoZXJuZXQtcGh5LWlkNjdjOS5kZTBhIjsKKwkJCXJlZyA9IDw1PjsKKwkJCXJlc2V0LWdwaW9zID0gPCZwaW8gNiAxPjsKKwkJCXJlc2V0LWRlYXNzZXJ0LXVzID0gPDIwMDAwPjsKKwkJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCQl9OworCisJCXBoeTY6IHBoeUA2IHsKKwkJCWNvbXBhdGlibGUgPSAiZXRoZXJuZXQtcGh5LWlkNjdjOS5kZTBhIjsKKwkJCXJlZyA9IDw2PjsKKwkJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworCQl9OworCisJCXN3aXRjaEAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NTMxIjsKKwkJCXJlZyA9IDwzMT47CisJCQlyZXNldC1ncGlvcyA9IDwmcGlvIDUgMD47CisKKwkJCXBvcnRzIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQkJCXBvcnRAMCB7CisJCQkJCXJlZyA9IDwwPjsKKwkJCQkJbGFiZWwgPSAibGFuMCI7CisJCQkJfTsKKworCQkJCXBvcnRAMSB7CisJCQkJCXJlZyA9IDwxPjsKKwkJCQkJbGFiZWwgPSAibGFuMSI7CisJCQkJfTsKKworCQkJCXBvcnRAMiB7CisJCQkJCXJlZyA9IDwyPjsKKwkJCQkJbGFiZWwgPSAibGFuMiI7CisJCQkJfTsKKworCQkJCXBvcnRAMyB7CisJCQkJCXJlZyA9IDwzPjsKKwkJCQkJbGFiZWwgPSAibGFuMyI7CisJCQkJfTsKKworCQkJCXBvcnRANiB7CisJCQkJCXJlZyA9IDw2PjsKKwkJCQkJbGFiZWwgPSAiY3B1IjsKKwkJCQkJZXRoZXJuZXQgPSA8JmdtYWMwPjsKKwkJCQkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisKKwkJCQkJZml4ZWQtbGluayB7CisJCQkJCQlzcGVlZCA9IDwyNTAwPjsKKwkJCQkJCWZ1bGwtZHVwbGV4OworCQkJCQkJcGF1c2U7CisJCQkJCX07CisJCQkJfTsKKwkJCX07CisJCX07CisJfTsKK307CisKKyZobmF0IHsKKwltdGtldGgtd2FuID0gImV0aDEiOworCW10a2V0aC1sYW4gPSAibGFuIjsKKwltdGtldGgtbWF4LWdtYWMgPSA8Mj47CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworLyogV2FybmluZzogcGlucyBzaGFyZWQgd2l0aCAmdWFydDIgKi8KKyZzcGkxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc3BpY19waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismbW1jMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgInN0YXRlX3VocyI7CisJcGluY3RybC0wID0gPCZtbWMwX3BpbnNfZGVmYXVsdD47CisJcGluY3RybC0xID0gPCZtbWMwX3BpbnNfdWhzPjsKKwlidXMtd2lkdGggPSA8OD47CisJbWF4LWZyZXF1ZW5jeSA9IDw1MjAwMDAwMD47CisJY2FwLW1tYy1oaWdoc3BlZWQ7CisJdm1tYy1zdXBwbHkgPSA8JnJlZ18zcDN2PjsKKwl2cW1tYy1zdXBwbHkgPSA8JnJlZ18zcDN2PjsKKwlub24tcmVtb3ZhYmxlOworCW5vLXNkOworCW5vLXNkaW87CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJndic3lzIHsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismcGlvIHsKKwltbWMwX3BpbnNfZGVmYXVsdDogbW1jMC1waW5zLTIyLXRvLTMyLWRlZmF1bHQgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAiZmxhc2giOworCQkJZ3JvdXBzID0gImVtbWNfNDUiOworCQl9OworCQljb25mLWNtZC1kYXQgeworCQkJcGlucyA9ICJTUEkwX0NMSyIsICJTUEkwX01PU0kiLCAiU1BJMF9NSVNPIiwKKwkJCSAgICAgICAiU1BJMF9DUyIsICJTUEkwX0hPTEQiLCAiU1BJMF9XUCIsCisJCQkgICAgICAgIlNQSTFfQ0xLIiwgIlNQSTFfTU9TSSIsICJTUEkxX01JU08iOworCQkJaW5wdXQtZW5hYmxlOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzRtQT47CisJCQltZWRpYXRlayxwdWxsLXVwLWFkdiA9IDwxPjsJLyogcHVsbC11cCAxMEsgKi8KKwkJfTsKKwkJY29uZi1jbGsgeworCQkJcGlucyA9ICJTUEkxX0NTIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV82bUE+OworCQkJbWVkaWF0ZWsscHVsbC1kb3duLWFkdiA9IDwyPjsJLyogcHVsbC1kb3duIDUwSyAqLworCQl9OworCQljb25mLXJzdCB7CisJCQlwaW5zID0gIlBXTTEiOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzRtQT47CisJCQltZWRpYXRlayxwdWxsLXVwLWFkdiA9IDwxPjsJLyogcHVsbC11cCAxMEsgKi8KKwkJfTsKKwl9OworCisJbW1jMF9waW5zX3VoczogbW1jMC1waW5zLTIyLXRvLTMyLXVocyB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJmbGFzaCI7CisJCQlncm91cHMgPSAiZW1tY180NSI7CisJCX07CisJCWNvbmYtY21kLWRhdCB7CisJCQlwaW5zID0gIlNQSTBfQ0xLIiwgIlNQSTBfTU9TSSIsICJTUEkwX01JU08iLAorCQkJICAgICAgICJTUEkwX0NTIiwgIlNQSTBfSE9MRCIsICJTUEkwX1dQIiwKKwkJCSAgICAgICAiU1BJMV9DTEsiLCAiU1BJMV9NT1NJIiwgIlNQSTFfTUlTTyI7CisJCQlpbnB1dC1lbmFibGU7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtdXAtYWR2ID0gPDE+OwkvKiBwdWxsLXVwIDEwSyAqLworCQl9OworCQljb25mLWNsayB7CisJCQlwaW5zID0gIlNQSTFfQ1MiOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzZtQT47CisJCQltZWRpYXRlayxwdWxsLWRvd24tYWR2ID0gPDI+OwkvKiBwdWxsLWRvd24gNTBLICovCisJCX07CisJCWNvbmYtcnN0IHsKKwkJCXBpbnMgPSAiUFdNMSI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtdXAtYWR2ID0gPDE+OwkvKiBwdWxsLXVwIDEwSyAqLworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4NmItcGluY3RybC5kdHNpIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4NmItcGluY3RybC5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlOGUzMjUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3OTg2Yi1waW5jdHJsLmR0c2kKQEAgLTAsMCArMSwyOSBAQAorJnBpbyB7CisJaTJjX3BpbnM6IGkyYy1waW5zLTMtNCB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJpMmMiOworCQkJZ3JvdXBzID0gImkyYyI7CisJCX07CisJfTsKKworCXVhcnQxX3BpbnM6IHVhcnQxLXBpbnMtMjMtdG8tMjYgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAidWFydCI7CisJCQlncm91cHMgPSAidWFydDFfMSI7CisJCX07CisJfTsKKworCXVhcnQyX3BpbnM6IHVhcnQxLXBpbnMtMjktdG8tMzIgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAidWFydCI7CisJCQlncm91cHMgPSAidWFydDJfMCI7CisJCX07CisJfTsKKworCXNwaWNfcGluczogc3BpMS1waW5zLTI5LXRvLTMyIHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gInNwaSI7CisJCQlncm91cHMgPSAic3BpMV8yIjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODZiLXNuZmktbmFuZC1yZmIuZHRzIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4NmItc25maS1uYW5kLXJmYi5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI2MDgwOAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODZiLXNuZmktbmFuZC1yZmIuZHRzCkBAIC0wLDAgKzEsMTkyIEBACisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDc5ODZiLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2Yi1waW5jdHJsLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2LXNuZmktbmFuZC1wYXJ0aXRpb24uZHRzaSIKKy8geworCW1vZGVsID0gIk1lZGlhVGVrIE1UNzk4NmIgUkZCIjsKKwljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4NmItc25maS1zbmFuZC1yZmIiOworCWNob3NlbiB7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwbjEgbG9nbGV2ZWw9OCAgXAorCQkJCWVhcmx5Y29uPXVhcnQ4MjUwLG1taW8zMiwweDExMDAyMDAwIjsKKwl9OworCisJbWVtb3J5IHsKKwkJcmVnID0gPDAgMHg0MDAwMDAwMCAwIDB4MTAwMDAwMDA+OworCX07Cit9OworCismdWFydDAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKy8qIFdhcm5pbmc6IHBpbnMgc2hhcmVkIHdpdGggJnNuYW5kICovCismdWFydDEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0MV9waW5zPjsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworLyogV2FybmluZzogcGlucyBzaGFyZWQgd2l0aCAmc3BpMSAqLworJnVhcnQyIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmdWFydDJfcGlucz47CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKKyZpMmMwIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmaTJjX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ3YXRjaGRvZyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmV0aCB7CisJc3RhdHVzID0gIm9rYXkiOworCisJZ21hYzA6IG1hY0AwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKwkJcmVnID0gPDA+OworCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQlmaXhlZC1saW5rIHsKKwkJCXNwZWVkID0gPDI1MDA+OworCQkJZnVsbC1kdXBsZXg7CisJCQlwYXVzZTsKKwkJfTsKKwl9OworCisJZ21hYzE6IG1hY0AxIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKwkJcmVnID0gPDE+OworCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQlmaXhlZC1saW5rIHsKKwkJCXNwZWVkID0gPDI1MDA+OworCQkJZnVsbC1kdXBsZXg7CisJCQlwYXVzZTsKKwkJfTsKKwl9OworCisJbWRpbzogbWRpby1idXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJcGh5NTogcGh5QDUgeworCQkJY29tcGF0aWJsZSA9ICJldGhlcm5ldC1waHktaWQ2N2M5LmRlMGEiOworCQkJcmVnID0gPDU+OworCQkJcmVzZXQtZ3Bpb3MgPSA8JnBpbyA2IDE+OworCQkJcmVzZXQtZGVhc3NlcnQtdXMgPSA8MjAwMDA+OworCQkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisJCX07CisKKwkJcGh5NjogcGh5QDYgeworCQkJY29tcGF0aWJsZSA9ICJldGhlcm5ldC1waHktaWQ2N2M5LmRlMGEiOworCQkJcmVnID0gPDY+OworCQkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisJCX07CisKKwkJc3dpdGNoQDAgeworCQkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc1MzEiOworCQkJcmVnID0gPDMxPjsKKwkJCXJlc2V0LWdwaW9zID0gPCZwaW8gNSAwPjsKKworCQkJcG9ydHMgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQkJcG9ydEAwIHsKKwkJCQkJcmVnID0gPDA+OworCQkJCQlsYWJlbCA9ICJsYW4wIjsKKwkJCQl9OworCisJCQkJcG9ydEAxIHsKKwkJCQkJcmVnID0gPDE+OworCQkJCQlsYWJlbCA9ICJsYW4xIjsKKwkJCQl9OworCisJCQkJcG9ydEAyIHsKKwkJCQkJcmVnID0gPDI+OworCQkJCQlsYWJlbCA9ICJsYW4yIjsKKwkJCQl9OworCisJCQkJcG9ydEAzIHsKKwkJCQkJcmVnID0gPDM+OworCQkJCQlsYWJlbCA9ICJsYW4zIjsKKwkJCQl9OworCisJCQkJcG9ydEA2IHsKKwkJCQkJcmVnID0gPDY+OworCQkJCQlsYWJlbCA9ICJjcHUiOworCQkJCQlldGhlcm5ldCA9IDwmZ21hYzA+OworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmhuYXQgeworCW10a2V0aC13YW4gPSAiZXRoMSI7CisJbXRrZXRoLWxhbiA9ICJsYW4iOworCW10a2V0aC1tYXgtZ21hYyA9IDwyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCisvKiBXYXJuaW5nOiBwaW5zIHNoYXJlZCB3aXRoICZ1YXJ0MSAqLworJnNuYW5kIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc25maV9waW5zPjsKKwltZWRpYXRlayxxdWFkLXNwaTsKKwlzdGF0dXMgPSAib2theSI7CisKKwlwYXJ0aXRpb25zIHsKKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1wYXJ0aXRpb25zIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCX07Cit9OworCisvKiBXYXJuaW5nOiBwaW5zIHNoYXJlZCB3aXRoICZ1YXJ0MiAqLworJnNwaTEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzcGljX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ3YnN5cyB7CisJbWVkaWF0ZWssbXRkLWVlcHJvbSA9IDwmZmFjdG9yeSAweDAwMDA+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwaW8geworCXNuZmlfcGluczogc25maS1waW5zLTIzLXRvLTI4IHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJzbmZpIjsKKwkJfTsKKwkJY29uZi1jbGsgeworCQkJcGlucyA9ICJTUEkwX0NMSyI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfOG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtZG93bi1hZHYgPSA8MD47CS8qIGJpYXMtZGlzYWJsZSAqLworCQl9OworCQljb25mLXB1IHsKKwkJCXBpbnMgPSAiU1BJMF9DUyIsICJTUEkwX0hPTEQiLCAiU1BJMF9XUCI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNm1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtdXAtYWR2ID0gPDA+OwkvKiBiaWFzLWRpc2FibGUgKi8KKwkJfTsKKwkJY29uZi1wZCB7CisJCQlwaW5zID0gIlNQSTBfTU9TSSIsICJTUEkwX01JU08iOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzZtQT47CisJCQltZWRpYXRlayxwdWxsLWRvd24tYWR2ID0gPDA+OwkvKiBiaWFzLWRpc2FibGUgKi8KKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODZiLXNwaW0tbmFuZC1yZmIuZHRzIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4NmItc3BpbS1uYW5kLXJmYi5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNlY2VjOQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODZiLXNwaW0tbmFuZC1yZmIuZHRzCkBAIC0wLDAgKzEsMjM4IEBACisvZHRzLXYxLzsKKyNpbmNsdWRlICJtdDc5ODZiLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2Yi1waW5jdHJsLmR0c2kiCisjaW5jbHVkZSAibXQ3OTg2LXNwaW0tbmFuZC1wYXJ0aXRpb24uZHRzaSIKKy8geworCW1vZGVsID0gIk1lZGlhVGVrIE1UNzk4NmIgUkZCIjsKKwljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4NmItc3BpbS1zbmFuZC1yZmIiOworCWNob3NlbiB7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwbjEgbG9nbGV2ZWw9OCAgXAorCQkJCWVhcmx5Y29uPXVhcnQ4MjUwLG1taW8zMiwweDExMDAyMDAwIjsKKwl9OworCisJbWVtb3J5IHsKKwkJcmVnID0gPDAgMHg0MDAwMDAwMCAwIDB4MTAwMDAwMDA+OworCX07Cit9OworCismdWFydDAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKy8qIFdhcm5pbmc6IHBpbnMgc2hhcmVkIHdpdGggJnNuYW5kICovCismdWFydDEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0MV9waW5zPjsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworLyogV2FybmluZzogcGlucyBzaGFyZWQgd2l0aCAmc3BpMSAqLworJnVhcnQyIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmdWFydDJfcGlucz47CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKKyZpMmMwIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmaTJjX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ3YXRjaGRvZyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmV0aCB7CisJc3RhdHVzID0gIm9rYXkiOworCisJZ21hYzA6IG1hY0AwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKwkJcmVnID0gPDA+OworCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQlmaXhlZC1saW5rIHsKKwkJCXNwZWVkID0gPDI1MDA+OworCQkJZnVsbC1kdXBsZXg7CisJCQlwYXVzZTsKKwkJfTsKKwl9OworCisJZ21hYzE6IG1hY0AxIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKwkJcmVnID0gPDE+OworCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQlmaXhlZC1saW5rIHsKKwkJCXNwZWVkID0gPDI1MDA+OworCQkJZnVsbC1kdXBsZXg7CisJCQlwYXVzZTsKKwkJfTsKKwl9OworCisJbWRpbzogbWRpby1idXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJcGh5NTogcGh5QDUgeworCQkJY29tcGF0aWJsZSA9ICJldGhlcm5ldC1waHktaWQ2N2M5LmRlMGEiOworCQkJcmVnID0gPDU+OworCQkJcmVzZXQtZ3Bpb3MgPSA8JnBpbyA2IDE+OworCQkJcmVzZXQtZGVhc3NlcnQtdXMgPSA8MjAwMDA+OworCQkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisJCX07CisKKwkJcGh5NjogcGh5QDYgeworCQkJY29tcGF0aWJsZSA9ICJldGhlcm5ldC1waHktaWQ2N2M5LmRlMGEiOworCQkJcmVnID0gPDY+OworCQkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisJCX07CisKKwkJc3dpdGNoQDAgeworCQkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc1MzEiOworCQkJcmVnID0gPDMxPjsKKwkJCXJlc2V0LWdwaW9zID0gPCZwaW8gNSAwPjsKKworCQkJcG9ydHMgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQkJcG9ydEAwIHsKKwkJCQkJcmVnID0gPDA+OworCQkJCQlsYWJlbCA9ICJsYW4wIjsKKwkJCQl9OworCisJCQkJcG9ydEAxIHsKKwkJCQkJcmVnID0gPDE+OworCQkJCQlsYWJlbCA9ICJsYW4xIjsKKwkJCQl9OworCisJCQkJcG9ydEAyIHsKKwkJCQkJcmVnID0gPDI+OworCQkJCQlsYWJlbCA9ICJsYW4yIjsKKwkJCQl9OworCisJCQkJcG9ydEAzIHsKKwkJCQkJcmVnID0gPDM+OworCQkJCQlsYWJlbCA9ICJsYW4zIjsKKwkJCQl9OworCisJCQkJcG9ydEA2IHsKKwkJCQkJcmVnID0gPDY+OworCQkJCQlsYWJlbCA9ICJjcHUiOworCQkJCQlldGhlcm5ldCA9IDwmZ21hYzA+OworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmhuYXQgeworCW10a2V0aC13YW4gPSAiZXRoMSI7CisJbXRrZXRoLWxhbiA9ICJsYW4iOworCW10a2V0aC1tYXgtZ21hYyA9IDwyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc3BpMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNwaV9mbGFzaF9waW5zPjsKKwljcy1ncGlvcyA9IDwwPiwgPDA+OworCXN0YXR1cyA9ICJva2F5IjsKKworCXNwaV9ub3JAMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJqZWRlYyxzcGktbm9yIjsKKwkJcmVnID0gPDA+OworCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDw1MjAwMDAwMD47CisJCXNwaS10eC1idXN3aWR0aCA9IDw0PjsKKwkJc3BpLXJ4LWJ1c3dpZHRoID0gPDQ+OworCX07CisKKwlzcGlfbmFuZDogc3BpX25hbmRAMSB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJzcGktbmFuZCI7CisJCXJlZyA9IDwxPjsKKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8NTIwMDAwMDA+OworCQlzcGktdHgtYnVzd2lkdGggPSA8ND47CisJCXNwaS1yeC1idXN3aWR0aCA9IDw0PjsKKwl9OworfTsKKworLyogV2FybmluZzogcGlucyBzaGFyZWQgd2l0aCAmdWFydDIgKi8KKyZzcGkxIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmc3BpY19waW5zPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismd2JzeXMgeworCW1lZGlhdGVrLG10ZC1lZXByb20gPSA8JmZhY3RvcnkgMHgwMDAwPjsKKwlzdGF0dXMgPSAib2theSI7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgImRiZGMiOworCXBpbmN0cmwtMCA9IDwmd2ZfMmdfNWdfcGlucz47CisJcGluY3RybC0xID0gPCZ3Zl9kYmRjX3BpbnM+OworfTsKKworJnBpbyB7CisJc3BpX2ZsYXNoX3BpbnM6IHNwaS1mbGFzaC1waW5zLTMzLXRvLTM4IHsKKwkJbXV4IHsKKwkJCWZ1bmN0aW9uID0gImZsYXNoIjsKKwkJCWdyb3VwcyA9ICJzcGkwIiwgInNwaTBfd3BfaG9sZCI7CisJCX07CisJCWNvbmYtcHUgeworCQkJcGlucyA9ICJTUEkyX0NTIiwgIlNQSTJfSE9MRCIsICJTUEkyX1dQIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV84bUE+OworCQkJbWVkaWF0ZWsscHVsbC11cC1hZHYgPSA8MD47CS8qIGJpYXMtZGlzYWJsZSAqLworCQl9OworCQljb25mLXBkIHsKKwkJCXBpbnMgPSAiU1BJMl9DTEsiLCAiU1BJMl9NT1NJIiwgIlNQSTJfTUlTTyI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfOG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtZG93bi1hZHYgPSA8MD47CS8qIGJpYXMtZGlzYWJsZSAqLworCQl9OworCisJfTsKKworCXdmXzJnXzVnX3BpbnM6IHdmXzJnXzVnLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAid2lmaSI7CisJCQlncm91cHMgPSAid2ZfMmciLCAid2ZfNWciOworCQl9OworCQljb25mIHsKKwkJCXBpbnMgPSAiV0YwX0hCMSIsICJXRjBfSEIyIiwgIldGMF9IQjMiLCAiV0YwX0hCNCIsCisJCQkgICAgICAgIldGMF9IQjAiLCAiV0YwX0hCMF9CIiwgIldGMF9IQjUiLCAiV0YwX0hCNiIsCisJCQkgICAgICAgIldGMF9IQjciLCAiV0YwX0hCOCIsICJXRjBfSEI5IiwgIldGMF9IQjEwIiwKKwkJCSAgICAgICAiV0YwX1RPUF9DTEsiLCAiV0YwX1RPUF9EQVRBIiwgIldGMV9IQjEiLAorCQkJICAgICAgICJXRjFfSEIyIiwgIldGMV9IQjMiLCAiV0YxX0hCNCIsICJXRjFfSEIwIiwKKwkJCSAgICAgICAiV0YxX0hCNSIsICJXRjFfSEI2IiwgIldGMV9IQjciLCAiV0YxX0hCOCIsCisJCQkgICAgICAgIldGMV9UT1BfQ0xLIiwgIldGMV9UT1BfREFUQSI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfNG1BPjsKKwkJfTsKKwl9OworCisJd2ZfZGJkY19waW5zOiB3Zl9kYmRjLXBpbnMgeworCQltdXggeworCQkJZnVuY3Rpb24gPSAid2lmaSI7CisJCQlncm91cHMgPSAid2ZfZGJkYyI7CisJCX07CisJCWNvbmYgeworCQkJcGlucyA9ICJXRjBfSEIxIiwgIldGMF9IQjIiLCAiV0YwX0hCMyIsICJXRjBfSEI0IiwKKwkJCSAgICAgICAiV0YwX0hCMCIsICJXRjBfSEIwX0IiLCAiV0YwX0hCNSIsICJXRjBfSEI2IiwKKwkJCSAgICAgICAiV0YwX0hCNyIsICJXRjBfSEI4IiwgIldGMF9IQjkiLCAiV0YwX0hCMTAiLAorCQkJICAgICAgICJXRjBfVE9QX0NMSyIsICJXRjBfVE9QX0RBVEEiLCAiV0YxX0hCMSIsCisJCQkgICAgICAgIldGMV9IQjIiLCAiV0YxX0hCMyIsICJXRjFfSEI0IiwgIldGMV9IQjAiLAorCQkJICAgICAgICJXRjFfSEI1IiwgIldGMV9IQjYiLCAiV0YxX0hCNyIsICJXRjFfSEI4IiwKKwkJCSAgICAgICAiV0YxX1RPUF9DTEsiLCAiV0YxX1RPUF9EQVRBIjsKKwkJCWRyaXZlLXN0cmVuZ3RoID0gPE1US19EUklWRV80bUE+OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4NmItc3BpbS1ub3ItcmZiLmR0cyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODZiLXNwaW0tbm9yLXJmYi5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQzZGJiNQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODZiLXNwaW0tbm9yLXJmYi5kdHMKQEAgLTAsMCArMSwxOTEgQEAKKy9kdHMtdjEvOworI2luY2x1ZGUgIm10Nzk4NmIuZHRzaSIKKyNpbmNsdWRlICJtdDc5ODZiLXBpbmN0cmwuZHRzaSIKKyNpbmNsdWRlICJtdDc5ODYtc3BpbS1ub3ItcGFydGl0aW9uLmR0c2kiCisvIHsKKwltb2RlbCA9ICJNZWRpYVRlayBNVDc5ODZiIFJGQiI7CisJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODZiLW5vci1yZmIiOworCWNob3NlbiB7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAsMTE1MjAwbjEgbG9nbGV2ZWw9OCAgXAorCQkJCWVhcmx5Y29uPXVhcnQ4MjUwLG1taW8zMiwweDExMDAyMDAwIjsKKwl9OworCisJbWVtb3J5IHsKKwkJcmVnID0gPDAgMHg0MDAwMDAwMCAwIDB4MTAwMDAwMDA+OworCX07Cit9OworCismdWFydDAgeworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKy8qIFdhcm5pbmc6IHBpbnMgc2hhcmVkIHdpdGggJnNuYW5kICovCismdWFydDEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZ1YXJ0MV9waW5zPjsKKwlzdGF0dXMgPSAiZGlzYWJsZWQiOworfTsKKworLyogV2FybmluZzogcGlucyBzaGFyZWQgd2l0aCAmc3BpMSAqLworJnVhcnQyIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmdWFydDJfcGlucz47CisJc3RhdHVzID0gImRpc2FibGVkIjsKK307CisKKyZpMmMwIHsKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmaTJjX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ3YXRjaGRvZyB7CisJc3RhdHVzID0gIm9rYXkiOworfTsKKworJmV0aCB7CisJc3RhdHVzID0gIm9rYXkiOworCisJZ21hYzA6IG1hY0AwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKwkJcmVnID0gPDA+OworCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQlmaXhlZC1saW5rIHsKKwkJCXNwZWVkID0gPDI1MDA+OworCQkJZnVsbC1kdXBsZXg7CisJCQlwYXVzZTsKKwkJfTsKKwl9OworCisJZ21hYzE6IG1hY0AxIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKwkJcmVnID0gPDE+OworCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQlmaXhlZC1saW5rIHsKKwkJCXNwZWVkID0gPDI1MDA+OworCQkJZnVsbC1kdXBsZXg7CisJCQlwYXVzZTsKKwkJfTsKKwl9OworCisJbWRpbzogbWRpby1idXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJcGh5NTogcGh5QDUgeworCQkJY29tcGF0aWJsZSA9ICJldGhlcm5ldC1waHktaWQ2N2M5LmRlMGEiOworCQkJcmVnID0gPDU+OworCQkJcmVzZXQtZ3Bpb3MgPSA8JnBpbyA2IDE+OworCQkJcmVzZXQtZGVhc3NlcnQtdXMgPSA8MjAwMDA+OworCQkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisJCX07CisKKwkJcGh5NjogcGh5QDYgeworCQkJY29tcGF0aWJsZSA9ICJldGhlcm5ldC1waHktaWQ2N2M5LmRlMGEiOworCQkJcmVnID0gPDY+OworCQkJcGh5LW1vZGUgPSAiMjUwMGJhc2UteCI7CisJCX07CisKKwkJc3dpdGNoQDAgeworCQkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc1MzEiOworCQkJcmVnID0gPDMxPjsKKwkJCXJlc2V0LWdwaW9zID0gPCZwaW8gNSAwPjsKKworCQkJcG9ydHMgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQkJcG9ydEAwIHsKKwkJCQkJcmVnID0gPDA+OworCQkJCQlsYWJlbCA9ICJsYW4wIjsKKwkJCQl9OworCisJCQkJcG9ydEAxIHsKKwkJCQkJcmVnID0gPDE+OworCQkJCQlsYWJlbCA9ICJsYW4xIjsKKwkJCQl9OworCisJCQkJcG9ydEAyIHsKKwkJCQkJcmVnID0gPDI+OworCQkJCQlsYWJlbCA9ICJsYW4yIjsKKwkJCQl9OworCisJCQkJcG9ydEAzIHsKKwkJCQkJcmVnID0gPDM+OworCQkJCQlsYWJlbCA9ICJsYW4zIjsKKwkJCQl9OworCisJCQkJcG9ydEA2IHsKKwkJCQkJcmVnID0gPDY+OworCQkJCQlsYWJlbCA9ICJjcHUiOworCQkJCQlldGhlcm5ldCA9IDwmZ21hYzA+OworCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKworCQkJCQlmaXhlZC1saW5rIHsKKwkJCQkJCXNwZWVkID0gPDI1MDA+OworCQkJCQkJZnVsbC1kdXBsZXg7CisJCQkJCQlwYXVzZTsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKwkJfTsKKwl9OworfTsKKworJmhuYXQgeworCW10a2V0aC13YW4gPSAiZXRoMSI7CisJbXRrZXRoLWxhbiA9ICJsYW4iOworCW10a2V0aC1tYXgtZ21hYyA9IDwyPjsKKwlzdGF0dXMgPSAib2theSI7Cit9OworCismc3BpMCB7CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnNwaV9mbGFzaF9waW5zPjsKKwljcy1ncGlvcyA9IDwwPiwgPDA+OworCXN0YXR1cyA9ICJva2F5IjsKKworCXNwaV9ub3JAMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJqZWRlYyxzcGktbm9yIjsKKwkJcmVnID0gPDA+OworCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDw1MjAwMDAwMD47CisJCXNwaS10eC1idXN3aWR0aCA9IDw0PjsKKwkJc3BpLXJ4LWJ1c3dpZHRoID0gPDQ+OworCX07Cit9OworCisvKiBXYXJuaW5nOiBwaW5zIHNoYXJlZCB3aXRoICZ1YXJ0MiAqLworJnNwaTEgeworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZzcGljX3BpbnM+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZ3YnN5cyB7CisJbWVkaWF0ZWssbXRkLWVlcHJvbSA9IDwmZmFjdG9yeSAweDAwMDA+OworCXN0YXR1cyA9ICJva2F5IjsKK307CisKKyZwaW8geworCXNwaV9mbGFzaF9waW5zOiBzcGktZmxhc2gtcGlucy0zMy10by0zOCB7CisJCW11eCB7CisJCQlmdW5jdGlvbiA9ICJmbGFzaCI7CisJCQlncm91cHMgPSAic3BpMCIsICJzcGkwX3dwX2hvbGQiOworCQl9OworCQljb25mLXB1IHsKKwkJCXBpbnMgPSAiU1BJMl9DUyIsICJTUEkyX0hPTEQiLCAiU1BJMl9XUCI7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDxNVEtfRFJJVkVfOG1BPjsKKwkJCW1lZGlhdGVrLHB1bGwtdXAtYWR2ID0gPDA+OwkvKiBiaWFzLWRpc2FibGUgKi8KKwkJfTsKKwkJY29uZi1wZCB7CisJCQlwaW5zID0gIlNQSTJfQ0xLIiwgIlNQSTJfTU9TSSIsICJTUEkyX01JU08iOworCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzhtQT47CisJCQltZWRpYXRlayxwdWxsLWRvd24tYWR2ID0gPDA+OwkvKiBiaWFzLWRpc2FibGUgKi8KKwkJfTsKKworCX07Cit9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210Nzk4NmIuZHRzaSBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODZiLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRlMzY0MAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc5ODZiLmR0c2kKQEAgLTAsMCArMSw2NzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMjAgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBTYW0uU2hpaCA8c2FtLnNoaWhAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvYXJtLWdpYy5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3BoeS9waHkuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9yZXNldC90aS1zeXNjb24uaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9jbG9jay9tdDc5ODYtY2xrLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvdGhlcm1hbC90aGVybWFsLmg+CisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvcGluY3RybC9tdDY1eHguaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9yZXNldC9tdDc5ODYtcmVzZXRzLmg+CisKKy8geworCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2Yi1yZmIiOworCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJI3NpemUtY2VsbHMgPSA8Mj47CisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJY3B1MDogY3B1QDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWNvbXBhdGlibGUgPSAiYXJtLGNvcnRleC1hNTMiOworCQkJZW5hYmxlLW1ldGhvZCA9ICJwc2NpIjsKKwkJCXJlZyA9IDwweDA+OworCQl9OworCisJCWNwdTE6IGNwdUAxIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTUzIjsKKwkJCWVuYWJsZS1tZXRob2QgPSAicHNjaSI7CisJCQlyZWcgPSA8MHgxPjsKKwkJfTsKKworCQljcHUyOiBjcHVAMiB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJY29tcGF0aWJsZSA9ICJhcm0sY29ydGV4LWE1MyI7CisJCQllbmFibGUtbWV0aG9kID0gInBzY2kiOworCQkJcmVnID0gPDB4Mj47CisJCX07CisKKwkJY3B1MzogY3B1QDMgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCWVuYWJsZS1tZXRob2QgPSAicHNjaSI7CisJCQljb21wYXRpYmxlID0gImFybSxjb3J0ZXgtYTUzIjsKKwkJCXJlZyA9IDwweDM+OworCQl9OworCX07CisKKwl3ZWQ6IHdlZEAxNTAxMDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssd2VkIjsKKwkJd2VkX251bSA9IDwyPjsKKwkJLyogYWRkIHRoaXMgcHJvcGVydHkgZm9yIHdlZCBnZXQgdGhlIHBjaSBzbG90IG51bWJlci4gKi8KKwkJcGNpX3Nsb3RfbWFwID0gPDA+LCA8MT47CisJCXJlZyA9IDwwIDB4MTUwMTAwMDAgMCAweDEwMDA+LAorCQkgICAgICA8MCAweDE1MDExMDAwIDAgMHgxMDAwPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDIwNSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPEdJQ19TUEkgMjA2IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCX07CisKKwl3ZWQyOiB3ZWQyQDE1MDExMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayx3ZWQyIjsKKwkJd2VkX251bSA9IDwyPjsKKwkJcmVnID0gPDAgMHgxNTAxMDAwMCAwIDB4MTAwMD4sCisJCSAgICAgIDwwIDB4MTUwMTEwMDAgMCAweDEwMDA+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjA1IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8R0lDX1NQSSAyMDYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJfTsKKworCXdkbWE6IHdkbWFAMTUxMDQ4MDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLHdlZC13ZG1hIjsKKwkJcmVnID0gPDAgMHgxNTEwNDgwMCAwIDB4NDAwPiwKKwkJICAgICAgPDAgMHgxNTEwNGMwMCAwIDB4NDAwPjsKKwl9OworCisJYXAyd29jY2lmOiBhcDJ3b2NjaWZAMTUxQTUwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLGFwMndvY2NpZiI7CisJCXJlZyA9IDwwIDB4MTUxQTUwMDAgMCAweDEwMDA+LAorCQkgICAgICA8MCAweDE1MUFEMDAwIDAgMHgxMDAwPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDIxMSBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPEdJQ19TUEkgMjEyIElSUV9UWVBFX0xFVkVMX0hJR0g+OworICAgICAgICB9OworCisJd29jcHUwX2lsbTogd29jcHUwX2lsbUAxNTFFMDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssd29jcHUwX2lsbSI7CisJCXJlZyA9IDwwIDB4MTUxRTAwMDAgMCAweDgwMDA+OworCX07CisKKyAgICAgICAgd29jcHUxX2lsbTogd29jcHUxX2lsbUAxNTFGMDAwMCB7CisgICAgICAgICAgICAgICAgY29tcGF0aWJsZSA9ICJtZWRpYXRlayx3b2NwdTFfaWxtIjsKKyAgICAgICAgICAgICAgICByZWcgPSA8MCAweDE1MUYwMDAwIDAgMHg4MDAwPjsKKyAgICAgICAgfTsKKworCXdvY3B1X2RsbTogd29jcHVfZGxtQDE1MUU4MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayx3b2NwdV9kbG0iOworCQlyZWcgPSA8MCAweDE1MUU4MDAwIDAgMHgyMDAwPiwKKwkJICAgICAgPDAgMHgxNTFGODAwMCAwIDB4MjAwMD47CisKKwkJcmVzZXRzID0gPCZldGhzeXNyc3QgMD47CisJCXJlc2V0LW5hbWVzID0gIndvY3B1X3JzdCI7CisJfTsKKworCWNwdV9ib290OiB3b2NwdV9ib290QDE1MTk0MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayx3b2NwdV9ib290IjsKKwkJcmVnID0gPDAgMHgxNTE5NDAwMCAwIDB4MTAwMD47CisJfTsKKworCXJlc2VydmVkLW1lbW9yeSB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJcmFuZ2VzOworCisJCS8qIDE5MiBLaUIgcmVzZXJ2ZWQgZm9yIEFSTSBUcnVzdGVkIEZpcm13YXJlIChCTDMxKSAqLworCQlzZWNtb25fcmVzZXJ2ZWQ6IHNlY21vbkA0MzAwMDAwMCB7CisJCQlyZWcgPSA8MCAweDQzMDAwMDAwIDAgMHgzMDAwMD47CisJCQluby1tYXA7CisJCX07CisKKwkJd21jcHVfZW1pOiB3bWNwdS1yZXNlcnZlZEA0RkMwMDAwMCB7CisJCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLHdtY3B1LXJlc2VydmVkIjsKKwkJCW5vLW1hcDsKKwkJCXJlZyA9IDwwIDB4NEZDMDAwMDAgMCAweDAwMTAwMDAwPjsKKwkJfTsKKworCQl3b2NwdTBfZW1pOiB3b2NwdTBfZW1pQDRGRDAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssd29jcHUwX2VtaSI7CisJCQluby1tYXA7CisJCQlyZWcgPSA8MCAweDRGRDAwMDAwIDAgMHg0MDAwMD47CisJCQlzaGFyZWQgPSA8MD47CisJCX07CisKKwkJd29jcHUxX2VtaTogd29jcHUxX2VtaUA0RkQ0MDAwMCB7CisJCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLHdvY3B1MV9lbWkiOworCQkJbm8tbWFwOworCQkJcmVnID0gPDAgMHg0RkQ0MDAwMCAwIDB4NDAwMDA+OworCQkJc2hhcmVkID0gPDA+OworCQl9OworCisJCXdvY3B1X2RhdGE6IHdvY3B1X2RhdGFANEZEODAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayx3b2NwdV9kYXRhIjsKKwkJCW5vLW1hcDsKKwkJCXJlZyA9IDwwIDB4NEZEODAwMDAgMCAweDI0MDAwMD47CisJCQlzaGFyZWQgPSA8MT47CisJCX07CisJfTsKKworCXBzY2kgeworCQljb21wYXRpYmxlICA9ICJhcm0scHNjaS0wLjIiOworCQltZXRob2QgICAgICA9ICJzbWMiOworCX07CisKKwljbGs0MG06IG9zY2lsbGF0b3JAMCB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDAwMD47CisJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJjbGt4dGFsIjsKKwl9OworCisJc3lzdGVtX2NsazogZHVtbXlfc3lzdGVtX2NsayB7CisJCWNvbXBhdGlibGUgPSAiZml4ZWQtY2xvY2siOworCQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwMDA+OworCQkjY2xvY2stY2VsbHMgPSA8MD47CisJfTsKKworCXRpbWVyIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0sYXJtdjgtdGltZXIiOworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnaWM+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MTMwMDAwMDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19QUEkgMTMgSVJRX1RZUEVfTEVWRUxfTE9XPiwKKwkJCSAgICAgPEdJQ19QUEkgMTQgSVJRX1RZUEVfTEVWRUxfTE9XPiwKKwkJCSAgICAgPEdJQ19QUEkgMTEgSVJRX1RZUEVfTEVWRUxfTE9XPiwKKwkJCSAgICAgPEdJQ19QUEkgMTAgSVJRX1RZUEVfTEVWRUxfTE9XPjsKKwl9OworCisJaW5mcmFjZmdfYW86IGluZnJhY2ZnX2FvQDEwMDAxMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtaW5mcmFjZmdfYW8iLCAic3lzY29uIjsKKwkJcmVnID0gPDAgMHgxMDAwMTAwMCAwIDB4Njg+OworCQkjY2xvY2stY2VsbHMgPSA8MT47CisJfTsKKworCWluZnJhY2ZnOiBpbmZyYWNmZ0AxMDAwMTA0MCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LWluZnJhY2ZnIiwgInN5c2NvbiI7CisJCXJlZyA9IDwwIDB4MTAwMDEwNmMgMCAweDEwMDA+OworCQkjY2xvY2stY2VsbHMgPSA8MT47CisJfTsKKworCXRvcGNrZ2VuOiB0b3Bja2dlbkAxMDAxQjAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXRvcGNrZ2VuIiwgInN5c2NvbiI7CisJCXJlZyA9IDwwIDB4MTAwMUIwMDAgMCAweDEwMDA+OworCQkjY2xvY2stY2VsbHMgPSA8MT47CisJfTsKKworCWFwbWl4ZWRzeXM6IGFwbWl4ZWRzeXNAMTAwMUUwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni1hcG1peGVkc3lzIiwgInN5c2NvbiI7CisJCXJlZyA9IDwwIDB4MTAwMUUwMDAgMCAweDEwMDA+OworCQkjY2xvY2stY2VsbHMgPSA8MT47CisJfTsKKworCXdhdGNoZG9nOiB3YXRjaGRvZ0AxMDAxYzAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXdkdCI7CisJCXJlZyA9IDwwIDB4MTAwMWMwMDAgMCAweDEwMDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTEwIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQkjcmVzZXQtY2VsbHMgPSA8MT47CisJfTsKKworCWdpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJAYzAwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAiYXJtLGdpYy12MyI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CisJCWludGVycnVwdC1jb250cm9sbGVyOworCQlyZWcgPSA8MCAweDBjMDAwMDAwIDAgMHg0MDAwMD4sICAvKiBHSUNEICovCisJCSAgICAgIDwwIDB4MGMwODAwMDAgMCAweDIwMDAwMD47IC8qIEdJQ1IgKi8KKworCQlpbnRlcnJ1cHRzID0gPEdJQ19QUEkgOSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwl9OworCisJcHdtOiBwd21AMTAwNDgwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni1wd20iOworCQlyZWcgPSA8MCAweDEwMDQ4MDAwIDAgMHgxMDAwPjsKKwkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQkjcHdtLWNlbGxzID0gPDI+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTM3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8JmluZnJhY2ZnIENLX0lORlJBX1BXTT4sCisJCQkgPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9QV01fQlNFTD4sCisJCQkgPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9QV00xX0NLPiwKKwkJCSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX1BXTTJfQ0s+OworCQlhc3NpZ25lZC1jbG9ja3MgPSA8JnRvcGNrZ2VuIENLX1RPUF9QV01fU0VMPiwKKwkJCQkgIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfUFdNX0JTRUw+LAorCQkJCSAgPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9QV00xX1NFTD4sCisJCQkJICA8JmluZnJhY2ZnX2FvIENLX0lORlJBX1BXTTJfU0VMPjsKKwkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmdG9wY2tnZW4gQ0tfVE9QX0NCX01fRDQ+LAorCQkJCQkgPCZpbmZyYWNmZyBDS19JTkZSQV9QV00+LAorCQkJCQkgPCZpbmZyYWNmZyBDS19JTkZSQV9QV00+LAorCQkJCQkgPCZpbmZyYWNmZyBDS19JTkZSQV9QV00+OworCQljbG9jay1uYW1lcyA9ICJ0b3AiLCAibWFpbiIsICJwd20xIiwgInB3bTIiOworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwl1YXJ0MDogc2VyaWFsQDExMDAyMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtdWFydCIsCisJCQkgICAgICJtZWRpYXRlayxtdDY1NzctdWFydCI7CisJCXJlZyA9IDwwIDB4MTEwMDIwMDAgMCAweDQwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMjMgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfVUFSVDBfQ0s+OworCQlhc3NpZ25lZC1jbG9ja3MgPSA8JnRvcGNrZ2VuIENLX1RPUF9VQVJUX1NFTD4sCisJCQkJICA8JmluZnJhY2ZnX2FvIENLX0lORlJBX1VBUlQwX1NFTD47CisJCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JnRvcGNrZ2VuIENLX1RPUF9DQl9DS1NRXzQwTT4sCisJCQkJCSA8JmluZnJhY2ZnIENLX0lORlJBX1VBUlQ+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwl1YXJ0MTogc2VyaWFsQDExMDAzMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtdWFydCIsCisJCQkgICAgICJtZWRpYXRlayxtdDY1NzctdWFydCI7CisJCXJlZyA9IDwwIDB4MTEwMDMwMDAgMCAweDQwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMjQgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfVUFSVDFfQ0s+OworCQlhc3NpZ25lZC1jbG9ja3MgPSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX1VBUlQxX1NFTD47CisJCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JmluZnJhY2ZnIENLX0lORlJBX0NLX0YyNk0+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwl1YXJ0Mjogc2VyaWFsQDExMDA0MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtdWFydCIsCisJCQkgICAgICJtZWRpYXRlayxtdDY1NzctdWFydCI7CisJCXJlZyA9IDwwIDB4MTEwMDQwMDAgMCAweDQwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMjUgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNsb2NrcyA9IDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfVUFSVDJfQ0s+OworCQlhc3NpZ25lZC1jbG9ja3MgPSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX1VBUlQyX1NFTD47CisJCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JmluZnJhY2ZnIENLX0lORlJBX0NLX0YyNk0+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKyAgICAgICAgaTJjMDogaTJjQDExMDA4MDAwIHsKKyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni1pMmMiOworICAgICAgICAgICAgICAgIHJlZyA9IDwwIDB4MTEwMDgwMDAgMCAweDkwPiwKKyAgICAgICAgICAgICAgICAgICAgICA8MCAweDEwMjE3MDgwIDAgMHg4MD47CisgICAgICAgICAgICAgICAgaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEzNiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKyAgICAgICAgICAgICAgICBjbG9jay1kaXYgPSA8NT47CisgICAgICAgICAgICAgICAgY2xvY2tzID0gPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9JMkNPX0NLPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICA8JmluZnJhY2ZnX2FvIENLX0lORlJBX0FQX0RNQV9DSz47CisgICAgICAgICAgICAgICAgY2xvY2stbmFtZXMgPSAibWFpbiIsICJkbWEiOworICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gPDE+OworICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gPDA+OworICAgICAgICAgICAgICAgIHN0YXR1cyA9ICJkaXNhYmxlZCI7CisgICAgICAgIH07CisKKwl0aGVybWFsLXpvbmVzIHsKKwkJY3B1X3RoZXJtYWw6IGNwdS10aGVybWFsIHsKKwkJCXBvbGxpbmctZGVsYXktcGFzc2l2ZSA9IDwxMDAwPjsKKwkJCXBvbGxpbmctZGVsYXkgPSA8MTAwMD47CisJCQl0aGVybWFsLXNlbnNvcnMgPSA8JnRoZXJtYWwgMD47CisJCX07CisJfTsKKworCXRoZXJtYWw6IHRoZXJtYWxAMTEwMGM4MDAgeworCQkjdGhlcm1hbC1zZW5zb3ItY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXRoZXJtYWwiOworCQlyZWcgPSA8MCAweDExMDBjODAwIDAgMHg4MDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTM4IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX1RIRVJNX0NLPiwKKwkJCSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX0FEQ18yNk1fQ0s+LAorCQkJIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfQURDX0ZSQ19DSz47CisJCWNsb2NrLW5hbWVzID0gInRoZXJtIiwgImF1eGFkYyIsICJhZGNfMzJrIjsKKwkJbWVkaWF0ZWssYXV4YWRjID0gPCZhdXhhZGM+OworCQltZWRpYXRlayxhcG1peGVkc3lzID0gPCZhcG1peGVkc3lzPjsKKwkJbnZtZW0tY2VsbHMgPSA8JnRoZXJtYWxfY2FsaWJyYXRpb24+OworCQludm1lbS1jZWxsLW5hbWVzID0gImNhbGlicmF0aW9uLWRhdGEiOworCX07CisKKwljcnlwdG86IGNyeXB0b0AxMDMyMDAwMCB7CisJCWNvbXBhdGlibGUgPSAiaW5zaWRlLXNlY3VyZSxzYWZleGNlbC1laXA5NyI7CisJCXJlZyA9IDwwIDB4MTAzMjAwMDAgMCAweDQwMDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDExNiBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKwkJCSAgICAgPEdJQ19TUEkgMTE3IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorCQkJICAgICA8R0lDX1NQSSAxMTggSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkgICAgIDxHSUNfU1BJIDExOSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJaW50ZXJydXB0LW5hbWVzID0gInJpbmcwIiwgInJpbmcxIiwgInJpbmcyIiwgInJpbmczIjsKKwkJY2xvY2tzID0gPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9FSVA5N19DSz47CisJCWNsb2NrLW5hbWVzID0gImluZnJhX2VpcDk3X2NrIjsKKwkJYXNzaWduZWQtY2xvY2tzID0gPCZ0b3Bja2dlbiBDS19UT1BfRUlQX0JfU0VMPjsKKwkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmdG9wY2tnZW4gQ0tfVE9QX0NCX05FVDJfODAwTT47CisJfTsKKworCXBpbzogcGluY3RybEAxMDAxZjAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXBpbmN0cmwiOworCQlyZWcgPSA8MCAweDEwMDFmMDAwIDAgMHgxMDAwPiwKKwkJICAgICAgPDAgMHgxMWMzMDAwMCAwIDB4MTAwMD4sCisJCSAgICAgIDwwIDB4MTFjNDAwMDAgMCAweDEwMDA+LAorCQkgICAgICA8MCAweDExZTIwMDAwIDAgMHgxMDAwPiwKKwkJICAgICAgPDAgMHgxMWUzMDAwMCAwIDB4MTAwMD4sCisJCSAgICAgIDwwIDB4MTFmMDAwMDAgMCAweDEwMDA+LAorCQkgICAgICA8MCAweDExZjEwMDAwIDAgMHgxMDAwPiwKKwkJICAgICAgPDAgMHgxMDAwYjAwMCAwIDB4MTAwMD47CisJCXJlZy1uYW1lcyA9ICJncGlvX2Jhc2UiLCAiaW9jZmdfcnRfYmFzZSIsICJpb2NmZ19yYl9iYXNlIiwKKwkJCSAgICAiaW9jZmdfbHRfYmFzZSIsICJpb2NmZ19sYl9iYXNlIiwgImlvY2ZnX3RyX2Jhc2UiLAorCQkJICAgICJpb2NmZ190bF9iYXNlIiwgImVpbnQiOworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCQlncGlvLXJhbmdlcyA9IDwmcGlvIDAgMCAxMDA+OworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDIyNSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwl9OworCisJZXRoc3lzOiBzeXNjb25AMTUwMDAwMDAgeworICAgICAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gPDE+OworICAgICAgICAgICAgICAgICNzaXplLWNlbGxzID0gPDE+OworICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LWV0aHN5c19jayIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzeXNjb24iOworICAgICAgICAgICAgICAgIHJlZyA9IDwwIDB4MTUwMDAwMDAgMCAweDEwMDA+OworICAgICAgICAgICAgICAgICNjbG9jay1jZWxscyA9IDwxPjsKKyAgICAgICAgICAgICAgICAjcmVzZXQtY2VsbHMgPSA8MT47CisKKwkJZXRoc3lzcnN0OiByZXNldC1jb250cm9sbGVyIHsKKwkJCWNvbXBhdGlibGUgPSAidGksc3lzY29uLXJlc2V0IjsKKwkJCSNyZXNldC1jZWxscyA9IDwxPjsKKwkJCXRpLHJlc2V0LWJpdHMgPSA8MHgzNCA0IDB4MzQgNCAweDM0IDQgKEFTU0VSVF9TRVQgfCBERUFTU0VSVF9DTEVBUiB8IFNUQVRVU19TRVQpPjsKKwkJfTsKKyAgICAgICAgfTsKKworICAgICAgICBldGg6IGV0aGVybmV0QDE1MTAwMDAwIHsKKyAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni1ldGgiOworICAgICAgICAgICAgICAgIHJlZyA9IDwwIDB4MTUxMDAwMDAgMCAweDgwMDAwPjsKKyAgICAgICAgICAgICAgICBpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTk2IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8R0lDX1NQSSAxOTcgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxHSUNfU1BJIDE5OCBJUlFfVFlQRV9MRVZFTF9ISUdIPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEdJQ19TUEkgMTk5IElSUV9UWVBFX0xFVkVMX0hJR0g+OworICAgICAgICAgICAgICAgIGNsb2NrcyA9IDwmZXRoc3lzIENLX0VUSF9GRV9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZldGhzeXMgQ0tfRVRIX0dQMl9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZldGhzeXMgQ0tfRVRIX0dQMV9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZldGhzeXMgQ0tfRVRIX1dPQ1BVMV9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZldGhzeXMgQ0tfRVRIX1dPQ1BVMF9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZzZ21paXN5czAgQ0tfU0dNMF9UWF9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZzZ21paXN5czAgQ0tfU0dNMF9SWF9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZzZ21paXN5czAgQ0tfU0dNMF9DSzBfRU4+LAorICAgICAgICAgICAgICAgICAgICAgICAgIDwmc2dtaWlzeXMwIENLX1NHTTBfQ0RSX0NLMF9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZzZ21paXN5czEgQ0tfU0dNMV9UWF9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZzZ21paXN5czEgQ0tfU0dNMV9SWF9FTj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgPCZzZ21paXN5czEgQ0tfU0dNMV9DSzFfRU4+LAorICAgICAgICAgICAgICAgICAgICAgICAgIDwmc2dtaWlzeXMxIENLX1NHTTFfQ0RSX0NLMV9FTj47CisgICAgICAgICAgICAgICAgY2xvY2stbmFtZXMgPSAiZmUiLCAiZ3AyIiwgImdwMSIsICJ3b2NwdTEiLCAid29jcHUwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2dtaWlfdHgyNTBtIiwgInNnbWlpX3J4MjUwbSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgInNnbWlpX2Nkcl9yZWYiLCAic2dtaWlfY2RyX2ZiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2dtaWkyX3R4MjUwbSIsICJzZ21paTJfcngyNTBtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2dtaWkyX2Nkcl9yZWYiLCAic2dtaWkyX2Nkcl9mYiI7CisJCWFzc2lnbmVkLWNsb2NrcyA9IDwmdG9wY2tnZW4gQ0tfVE9QX05FVFNZU18yWF9TRUw+LAorCQkJCSAgPCZ0b3Bja2dlbiBDS19UT1BfU0dNXzMyNU1fU0VMPjsKKwkJYXNzaWduZWQtY2xvY2stcGFyZW50cyA9IDwmdG9wY2tnZW4gQ0tfVE9QX0NCX05FVDJfODAwTT4sCisJCQkJCSA8JnRvcGNrZ2VuIENLX1RPUF9DQl9TR01fMzI1TT47CisgICAgICAgICAgICAgICAgbWVkaWF0ZWssZXRoc3lzID0gPCZldGhzeXM+OworCQltZWRpYXRlayxzZ21paXN5cyA9IDwmc2dtaWlzeXMwPiwgPCZzZ21paXN5czE+OworICAgICAgICAgICAgICAgICNyZXNldC1jZWxscyA9IDwxPjsKKyAgICAgICAgICAgICAgICAjYWRkcmVzcy1jZWxscyA9IDwxPjsKKyAgICAgICAgICAgICAgICAjc2l6ZS1jZWxscyA9IDwwPjsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSAiZGlzYWJsZWQiOworICAgICAgICB9OworCisJaG5hdDogaG5hdEAxNTAwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXRrLWhuYXRfdjQiOworCQlyZWcgPSA8MCAweDE1MTAwMDAwIDAgMHg4MDAwMD47CisJCXJlc2V0cyA9IDwmZXRoc3lzIDA+OworCQlyZXNldC1uYW1lcyA9ICJtdGtldGgiOworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwlzZ21paXN5czA6IHN5c2NvbkAxMDA2MDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXNnbWlpc3lzIiwKKwkJCQkibWVkaWF0ZWssbXQ3OTg2LXNnbWlpc3lzXzAiLAorCQkJCSJzeXNjb24iOworCQlyZWcgPSA8MCAweDEwMDYwMDAwIDAgMHgxMDAwPjsKKwkJI2Nsb2NrLWNlbGxzID0gPDE+OworCX07CisKKwlzZ21paXN5czE6IHN5c2NvbkAxMDA3MDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXNnbWlpc3lzIiwKKwkJCQkgIm1lZGlhdGVrLG10Nzk4Ni1zZ21paXN5c18xIiwKKwkJCQkgInN5c2NvbiI7CisJCXJlZyA9IDwwIDB4MTAwNzAwMDAgMCAweDEwMDA+OworCQkjY2xvY2stY2VsbHMgPSA8MT47CisJfTsKKworCXNuYW5kOiBzbmZpQDExMDA1MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtc25hbmQiOworCQlyZWcgPSA8MCAweDExMDA1MDAwIDAgMHgxMDAwPiwgPDAgMHgxMTAwNjAwMCAwIDB4MTAwMD47CisJCXJlZy1uYW1lcyA9ICJuZmkiLCAiZWNjIjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDEyMSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9TUElORkkxX0NLPiwKKwkJCSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX05GSTFfQ0s+LAorCQkJIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfTkZJX0hDS19DSz47CisJCWNsb2NrLW5hbWVzID0gInBhZF9jbGsiLCAibmZpX2NsayIsICJuZmlfaGNsayI7CisJCWFzc2lnbmVkLWNsb2NrcyA9IDwmdG9wY2tnZW4gQ0tfVE9QX1NQSU5GSV9TRUw+LAorCQkJIAkgIDwmdG9wY2tnZW4gQ0tfVE9QX05GSTFYX1NFTD47CisJCWFzc2lnbmVkLWNsb2NrLXBhcmVudHMgPSA8JnRvcGNrZ2VuIENLX1RPUF9DQl9NX0Q4PiwKKwkJCQkJIDwmdG9wY2tnZW4gQ0tfVE9QX0NCX01fRDg+OworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXdic3lzOiB3YnN5c0AxODAwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssd2JzeXMiLAorCQkJICAgICAibWVkaWF0ZWssbXQ3OTg2LXdtYWMiOworCQlyZXNldHMgPSA8JndhdGNoZG9nIE1UNzk4Nl9UT1BSR1VfQ09OU1lTX1JTVD47CisJCXJlc2V0LW5hbWVzID0gImNvbnN5cyI7CisJCXJlZyA9IDwwIDB4MTgwMDAwMDAgMCAweDEwMDAwMDA+LAorCQkgICAgICA8MCAweDEwMDAzMDAwIDAgMHgxMDAwPiwKKwkJICAgICAgPDAgMHgxMWQxMDAwMCAwIDB4MTAwMD47CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyMTMgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJCSA8R0lDX1NQSSAyMTQgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJCSA8R0lDX1NQSSAyMTUgSVJRX1RZUEVfTEVWRUxfSElHSD4sCisJCQkJCSA8R0lDX1NQSSAyMTYgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCWNoaXBfaWQgPSA8MHg3OTg2PjsKKwkJbWVtb3J5LXJlZ2lvbiA9IDwmd21jcHVfZW1pPjsKKwl9OworCisJd2VkX3BjaWU6IHdlZF9wY2llQDEwMDAzMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayx3ZWRfcGNpZSI7CisJCXJlZyA9IDwwIDB4MTAwMDMwMDAgMCAweDEwPjsKKwl9OworCisJc3BpMDogc3BpQDExMDBhMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxpcG0tc3BpLXF1YWQiOworCQlyZWcgPSA8MCAweDExMDBhMDAwIDAgMHgxMDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTQwIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8JnRvcGNrZ2VuIENLX1RPUF9DQl9NX0QyPiwKKwkJCSA8JnRvcGNrZ2VuIENLX1RPUF9TUElfU0VMPiwKKwkJCSA8JmluZnJhY2ZnX2FvIENLX0lORlJBX1NQSTBfQ0s+LAorCQkJIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfU1BJMF9IQ0tfQ0s+OworCQljbG9jay1uYW1lcyA9ICJwYXJlbnQtY2xrIiwgInNlbC1jbGsiLCAic3BpLWNsayIsICJzcGktaGNsayI7CisJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJfTsKKworCXNwaTE6IHNwaUAxMTAwYjAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssaXBtLXNwaS1zaW5nbGUiOworCQlyZWcgPSA8MCAweDExMDBiMDAwIDAgMHgxMDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTQxIElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQljbG9ja3MgPSA8JnRvcGNrZ2VuIENLX1RPUF9DQl9NX0QyPiwKKwkJCSA8JnRvcGNrZ2VuIENLX1RPUF9TUElNX01TVF9TRUw+LAorCQkJIDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfU1BJMV9DSz4sCisJCQkgPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9TUEkxX0hDS19DSz47CisJCWNsb2NrLW5hbWVzID0gInBhcmVudC1jbGsiLCAic2VsLWNsayIsICJzcGktY2xrIiwgInNwaS1oY2xrIjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJbW1jMDogbW1jQDExMjMwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtbW1jIjsKKwkJcmVnID0gPDAgMHgxMTIzMDAwMCAwIDB4MTAwMD4sCisJCQk8MCAweDExYzIwMDAwIDAgMHgxMDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE0MyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzID0gPCZ0b3Bja2dlbiBDS19UT1BfRU1NQ180MTZNPiwKKwkJCTwmdG9wY2tnZW4gQ0tfVE9QX0VNTUNfMjUwTT4sCisJCQk8JmluZnJhY2ZnX2FvIENLX0lORlJBX01TRENfQ0s+OworCQljbG9jay1uYW1lcyA9ICJzb3VyY2UiLCAiaGNsayIsICJzb3VyY2VfY2ciOworCQlhc3NpZ25lZC1jbG9ja3MgPSA8JnRvcGNrZ2VuIENLX1RPUF9FTU1DXzQxNk1fU0VMPiwKKwkJCQkgIDwmdG9wY2tnZW4gQ0tfVE9QX0VNTUNfMjUwTV9TRUw+OworCQlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZ0b3Bja2dlbiBDS19UT1BfQ0JfTV80MTZNPiwKKwkJCQkJIDwmdG9wY2tnZW4gQ0tfVE9QX05FVDFfRDVfRDI+OworCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCX07CisKKwlhdXhhZGM6IGFkY0AxMTAwZDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LWF1eGFkYyIsCisJCQkgICAgICJtZWRpYXRlayxtdDc2MjItYXV4YWRjIjsKKwkJcmVnID0gPDAgMHgxMTAwZDAwMCAwIDB4MTAwMD47CisJCWNsb2NrcyA9IDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfQURDXzI2TV9DSz4sCisJCQkgPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9BRENfRlJDX0NLPjsKKwkJY2xvY2stbmFtZXMgPSAibWFpbiIsICIzMmsiOworCQkjaW8tY2hhbm5lbC1jZWxscyA9IDwxPjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OworCisJY29uc3lzOiBjb25zeXNAMTAwMDAwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni1jb25zeXMiOworCQlyZWcgPSA8MCAweDEwMDAwMDAwIDAgMHg4NjAwMDAwPjsKKwkJbWVtb3J5LXJlZ2lvbiA9IDwmd21jcHVfZW1pPjsKKwl9OworCisJeGhjaTogeGhjaUAxMTIwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXhoY2kiLAorCQkJICAgICAibWVkaWF0ZWssbXRrLXhoY2kiOworCQlyZWcgPSA8MCAweDExMjAwMDAwIDAgMHgyZTAwPiwKKwkJICAgICAgPDAgMHgxMTIwM2UwMCAwIDB4MDEwMD47CisJCXJlZy1uYW1lcyA9ICJtYWMiLCAiaXBwYyI7CisJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNzMgSVJRX1RZUEVfTEVWRUxfSElHSD47CisJCXBoeXMgPSA8JnUzcG9ydDAgUEhZX1RZUEVfVVNCMz4sCisJCSAgICAgICA8JnUycG9ydDEgUEhZX1RZUEVfVVNCMj47CisJCWNsb2NrcyA9IDwmc3lzdGVtX2Nsaz4sCisJCQkgPCZzeXN0ZW1fY2xrPiwKKwkJCSA8JnN5c3RlbV9jbGs+LAorCQkJIDwmc3lzdGVtX2Nsaz4sCisJCQkgPCZzeXN0ZW1fY2xrPjsKKwkJY2xvY2stbmFtZXMgPSAic3lzX2NrIiwKKwkJCSAgICAgICJ4aGNpX2NrIiwKKwkJCSAgICAgICJyZWZfY2siLAorCQkJICAgICAgIm1jdV9jayIsCisJCQkgICAgICAiZG1hX2NrIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQlzdGF0dXMgPSAib2theSI7CisJfTsKKworCXVzYnRwaHk6IHVzYi1waHlAMTFlMTAwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4NiIsCisJCQkgICAgICJtZWRpYXRlayxnZW5lcmljLXRwaHktdjIiOworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCXJhbmdlczsKKwkJc3RhdHVzID0gIm9rYXkiOworCisJCXUycG9ydDA6IHVzYi1waHlAMTFlMTAwMDAgeworCQkJcmVnID0gPDAgMHgxMWUxMDAwMCAwIDB4NzAwPjsKKwkJCWNsb2NrcyA9IDwmc3lzdGVtX2Nsaz47CisJCQljbG9jay1uYW1lcyA9ICJyZWYiOworCQkJI3BoeS1jZWxscyA9IDwxPjsKKwkJCWF1dG9fbG9hZF92YWxpZDsKKwkJCW52bWVtLWNlbGxzID0gPCZ1Ml9pbnRyX3AwPiwgPCZ1Ml9hdXRvX2xvYWRfdmFsaWRfcDA+OworCQkJbnZtZW0tY2VsbC1uYW1lcyA9ICJpbnRyIiwgImF1dG9fbG9hZF92YWxpZCI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXUzcG9ydDA6IHVzYi1waHlAMTFlMTA3MDAgeworCQkJcmVnID0gPDAgMHgxMWUxMDcwMCAwIDB4OTAwPjsKKwkJCWNsb2NrcyA9IDwmc3lzdGVtX2Nsaz47CisJCQljbG9jay1uYW1lcyA9ICJyZWYiOworCQkJI3BoeS1jZWxscyA9IDwxPjsKKwkJCWF1dG9fbG9hZF92YWxpZDsKKwkJCW52bWVtLWNlbGxzID0gPCZjb21iX2ludHJfcDA+LAorCQkJICAgICAgPCZjb21iX3J4X2ltcF9wMD4sCisJCQkgICAgICA8JmNvbWJfdHhfaW1wX3AwPiwKKwkJCSAgICAgIDwmY29tYl9hdXRvX2xvYWRfdmFsaWQ+OworCQkJbnZtZW0tY2VsbC1uYW1lcyA9ICJpbnRyIiwgInJ4X2ltcCIsICJ0eF9pbXAiLCAiYXV0b19sb2FkX3ZhbGlkIjsKKwkJCXN0YXR1cyA9ICJva2F5IjsKKwkJfTsKKworCQl1MnBvcnQxOiB1c2ItcGh5QDExZTExMDAwIHsKKwkJCXJlZyA9IDwwIDB4MTFlMTEwMDAgMCAweDcwMD47CisJCQljbG9ja3MgPSA8JnN5c3RlbV9jbGs+OworCQkJY2xvY2stbmFtZXMgPSAicmVmIjsKKwkJCSNwaHktY2VsbHMgPSA8MT47CisJCQlhdXRvX2xvYWRfdmFsaWQ7CisJCQludm1lbS1jZWxscyA9IDwmdTJfaW50cl9wMT4sIDwmdTJfYXV0b19sb2FkX3ZhbGlkX3AxPjsKKwkJCW52bWVtLWNlbGwtbmFtZXMgPSAiaW50ciIsICJhdXRvX2xvYWRfdmFsaWQiOworCQkJc3RhdHVzID0gIm9rYXkiOworCQl9OworCX07CisKKwljbGtpdGc6IGNsa2l0ZyB7CisJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJfTsKKworCXRybmc6IHRybmdAMTAyMGYwMDAgeworCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni1ybmciLAorCQkJICAgICAibWVkaWF0ZWssbXQ3NjIzLXJuZyI7CisJCXJlZyA9IDwwIDB4MTAyMGYwMDAgMCAweDEwMD47CisJCWNsb2NrcyA9IDwmaW5mcmFjZmdfYW8gQ0tfSU5GUkFfVFJOR19DSz47CisJCWNsb2NrLW5hbWVzID0gInJuZyI7CisJfTsKKworCWljZTogaWNlX2RlYnVnIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtaWNlX2RlYnVnIiwKKwkJCSJtZWRpYXRlayxtdDI3MDEtaWNlX2RlYnVnIjsKKwkJY2xvY2tzID0gPCZpbmZyYWNmZ19hbyBDS19JTkZSQV9EQkdfQ0s+LAorCQkJIDwmdG9wY2tnZW4gQ0tfVE9QX0FSTV9EQl9KVFNFTD47CisJCWNsb2NrLW5hbWVzID0gImljZV9kYmciLCAiZGJnX2p0c2VsIjsKKwl9OworCisJZWZ1c2U6IGVmdXNlQDExZDAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtZWZ1c2UiLAorCQkJICAgICAibWVkaWF0ZWssZWZ1c2UiOworCQlyZWcgPSA8MCAweDExZDAwMDAwIDAgMHgxMDAwPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCisJCXRoZXJtYWxfY2FsaWJyYXRpb246IGNhbGliQDI3NCB7CisJCQlyZWcgPSA8MHgyNzQgMHhjPjsKKwkJfTsKKworCQljb21iX2F1dG9fbG9hZF92YWxpZDogdXNiMy1hbHYtaW1wQDhkYSB7CisJCQlyZWcgPSA8MHg4ZGEgMT47CisJCQliaXRzID0gPDAgMT47CisJCX07CisKKwkJY29tYl9yeF9pbXBfcDA6IHVzYjMtcngtaW1wQDhkOCB7CisJCQlyZWcgPSA8MHg4ZDggMT47CisJCQliaXRzID0gPDAgNT47CisJCX07CisKKwkJY29tYl90eF9pbXBfcDA6IHVzYjMtdHgtaW1wQDhkOCB7CisJCQlyZWcgPSA8MHg4ZDggMj47CisJCQliaXRzID0gPDUgNT47CisJCX07CisKKwkJY29tYl9pbnRyX3AwOiB1c2IzLWludHJAOGQ5IHsKKwkJCXJlZyA9IDwweDhkOSAxPjsKKwkJCWJpdHMgPSA8MiA2PjsKKwkJfTsKKworCQl1Ml9hdXRvX2xvYWRfdmFsaWRfcDA6IHVzYjItYWx2LXAwQDhlMCB7CisJCQlyZWcgID0gPDB4OGUwIDE+OworCQkJYml0cyA9IDwwIDE+OworCQl9OworCisJCXUyX2ludHJfcDA6IHVzYjItaW50ci1wMEA4ZTAgeworCQkJcmVnICA9IDwweDhlMCAxPjsKKwkJCWJpdHMgPSA8MSA1PjsKKwkJfTsKKworCQl1Ml9hdXRvX2xvYWRfdmFsaWRfcDE6IHVzYjItYWx2LXAxQDhlMCB7CisJCQlyZWcgID0gPDB4OGUwIDI+OworCQkJYml0cyA9IDw2IDE+OworCQl9OworCisJCXUyX2ludHJfcDE6IHVzYjItaW50ci1wMUA4ZTAgeworCQkJcmVnICA9IDwweDhlMCAyPjsKKwkJCWJpdHMgPSA8NyA1PjsKKwkJfTsKKwl9OwkKK307CisKKyNpbmNsdWRlICJtdDc5ODYtY2xraXRnLmR0c2kiCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvY2xrL21lZGlhdGVrL2Nsay1icmluZ3VwLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvY2xrL21lZGlhdGVrL2Nsay1icmluZ3VwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQxZjA5MgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9jbGsvbWVkaWF0ZWsvY2xrLWJyaW5ndXAuYwpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogSmFtZXMgTGlhbyA8amFtZXNqai5saWFvQG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2RlZmluZSBwcl9mbXQoZm10KSAiW2Nsay1icmluZ3VwXSAiIGZtdAorCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBicmluZ191cF9pZF90YWJsZVtdID0geworCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssY2xrLWJyaW5nLXVwIix9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTYzLWJyaW5nLXVwIix9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWJyaW5nLXVwIix9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBicmluZ191cF9pZF90YWJsZSk7CisKK3N0YXRpYyBpbnQgYnJpbmdfdXBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwljb25zdCBpbnQgTlJfQ0xLUyA9IDMwMDsKKwljaGFyIGNsa19uYW1lX2J1ZlsxNl07CisJc3RydWN0IGNsayAqY2xrOworCWludCBpLCByOworCisJZm9yIChpID0gMDsgaSA8IE5SX0NMS1M7IGkrKykgeworCQlzcHJpbnRmKGNsa19uYW1lX2J1ZiwgIiVkIiwgaSk7CisKKwkJY2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsIGNsa19uYW1lX2J1Zik7CisJCWlmICghSVNfRVJSKGNsaykpIHsKKwkJCXIgPSBjbGtfcHJlcGFyZV9lbmFibGUoY2xrKTsKKwkJCWlmIChyKQorCQkJCXByX2RlYnVnKCJjbGtfcHJlcGFyZV9lbmFibGUoJXMpOiAlZFxuIiwKKwkJCQkJX19jbGtfZ2V0X25hbWUoY2xrKSwgcik7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBicmluZ191cF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYnJpbmdfdXAgPSB7CisJLnByb2JlCQk9IGJyaW5nX3VwX3Byb2JlLAorCS5yZW1vdmUJCT0gYnJpbmdfdXBfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJicmluZ191cCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBicmluZ191cF9pZF90YWJsZSwKKwl9LAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihicmluZ191cCk7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvY2xrL21lZGlhdGVrL2Nsay1tdDc5ODEuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9jbGsvbWVkaWF0ZWsvY2xrLW10Nzk4MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MWZlZjMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvY2xrL21lZGlhdGVrL2Nsay1tdDc5ODEuYwpAQCAtMCwwICsxLDg1NCBAQAorLyoNCisgKiBDb3B5cmlnaHQgKGMpIDIwMjEgTWVkaWFUZWsgSW5jLg0KKyAqIEF1dGhvcjogV2VuemhlbiBZdTxZZW56aGVuLll1QG1lZGlhdGVrLmNvbT4NCisgKg0KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMNCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4NCisgKg0KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQorICovDQorDQorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KKyNpbmNsdWRlIDxsaW51eC9vZi5oPg0KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+DQorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4NCisjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPg0KKw0KKyNpbmNsdWRlICJjbGstbXRrLmgiDQorI2luY2x1ZGUgImNsay1nYXRlLmgiDQorI2luY2x1ZGUgImNsay1tdXguaCINCisNCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvY2xvY2svbXQ3OTgxLWNsay5oPg0KKw0KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sobXQ3OTgxX2Nsa19sb2NrKTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19maXhlZF9mYWN0b3IgaW5mcmFfZGl2c1tdIF9faW5pdGNvbnN0ID0gew0KKwlGQUNUT1IoQ0tfSU5GUkFfQ0tfRjI2TSwgImluZnJhX2NrX2YyNm0iLCAiY3N3X2YyNm1fc2VsIiwgMSwgMSksDQorCUZBQ1RPUihDS19JTkZSQV9VQVJULCAiaW5mcmFfdWFydCIsICJ1YXJ0X3NlbCIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfSU5GUkFfSVNQSTAsICJpbmZyYV9pc3BpMCIsICJzcGlfc2VsIiwgMSwgMSksDQorCUZBQ1RPUihDS19JTkZSQV9JMkMsICJpbmZyYV9pMmMiLCAiaTJjX3NlbCIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfSU5GUkFfSVNQSTEsICJpbmZyYV9pc3BpMSIsICJzcGltX21zdF9zZWwiLCAxLCAxKSwNCisJRkFDVE9SKENLX0lORlJBX1BXTSwgImluZnJhX3B3bSIsICJwd21fc2VsIiwgMSwgMSksDQorCUZBQ1RPUihDS19JTkZSQV82Nk1fTUNLLCAiaW5mcmFfNjZtX21jayIsICJzeXNheGlfc2VsIiwgMSwgMiksDQorCUZBQ1RPUihDS19JTkZSQV9DS19GMzJLLCAiaW5mcmFfY2tfZjMyayIsICJjYl9ydGNfMzJwN2siLCAxLCAxKSwNCisJRkFDVE9SKENLX0lORlJBX1BDSUVfQ0ssICJpbmZyYV9wY2llIiwgInBleHRwX3RsX2NrX3NlbCIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfSU5GUkFfUFdNX0JDSywgImluZnJhX3B3bV9iY2siLCAiaW5mcmFfcHdtX2JzZWwiLCAxLCAxKSwNCisJRkFDVE9SKENLX0lORlJBX1BXTV9DSzEsICJpbmZyYV9wd21fY2sxIiwgImluZnJhX3B3bTFfc2VsIiwgMSwgMSksDQorCUZBQ1RPUihDS19JTkZSQV9QV01fQ0syLCAiaW5mcmFfcHdtX2NrMiIsICJpbmZyYV9wd20yX3NlbCIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfSU5GUkFfMTMzTV9IQ0ssICJpbmZyYV8xMzNtX2hjayIsICJzeXNheGkiLCAxLCAxKSwNCisJRkFDVE9SKENLX0lORlJBXzY2TV9QSENLLCAiaW5mcmFfNjZtX3BoY2siLCAiaW5mcmFfMTMzbV9oY2siLCAxLCAxKSwNCisJRkFDVE9SKENLX0lORlJBX0ZBVURfTF9DSywgImluZnJhX2ZhdWRfbCIsICJhdWRfbCIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfSU5GUkFfRkFVRF9BVURfQ0ssICJpbmZyYV9mYXVkX2F1ZCIsICJhMXN5cyIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfSU5GUkFfRkFVRF9FRzJfQ0ssICJpbmZyYV9mYXVkX2VnMiIsICJhX3R1bmVyIiwgMSwgMSksDQorCUZBQ1RPUihDS19JTkZSQV9JMkNTX0NLLCAiaW5mcmFfaTJjcyIsICJpMmNfYmNrIiwgMSwgMSksDQorCUZBQ1RPUihDS19JTkZSQV9NVVhfVUFSVDAsICJpbmZyYV9tdXhfdWFydDAiLCAiaW5mcmFfdWFydDBfc2VsIiwgMSwgMSksDQorCUZBQ1RPUihDS19JTkZSQV9NVVhfVUFSVDEsICJpbmZyYV9tdXhfdWFydDEiLCAiaW5mcmFfdWFydDFfc2VsIiwgMSwgMSksDQorCUZBQ1RPUihDS19JTkZSQV9NVVhfVUFSVDIsICJpbmZyYV9tdXhfdWFydDIiLCAiaW5mcmFfdWFydDJfc2VsIiwgMSwgMSksDQorCUZBQ1RPUihDS19JTkZSQV9ORklfQ0ssICJpbmZyYV9uZmkiLCAibmZpMXgiLCAxLCAxKSwNCisJRkFDVE9SKENLX0lORlJBX1NQSU5GSV9DSywgImluZnJhX3NwaW5maSIsICJzcGluZmlfYmNrIiwgMSwgMSksDQorCUZBQ1RPUihDS19JTkZSQV9NVVhfU1BJMCwgImluZnJhX211eF9zcGkwIiwgImluZnJhX3NwaTBfc2VsIiwgMSwgMSksDQorCUZBQ1RPUihDS19JTkZSQV9NVVhfU1BJMSwgImluZnJhX211eF9zcGkxIiwgImluZnJhX3NwaTFfc2VsIiwgMSwgMSksDQorCUZBQ1RPUihDS19JTkZSQV9NVVhfU1BJMiwgImluZnJhX211eF9zcGkyIiwgImluZnJhX3NwaTJfc2VsIiwgMSwgMSksDQorCUZBQ1RPUihDS19JTkZSQV9SVENfMzJLLCAiaW5mcmFfcnRjXzMyayIsICJjYl9ydGNfMzJrIiwgMSwgMSksDQorCUZBQ1RPUihDS19JTkZSQV9GTVNEQ19DSywgImluZnJhX2Ztc2RjIiwgImVtbWNfNDAwbSIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfSU5GUkFfRk1TRENfSENLX0NLLCAiaW5mcmFfZm1zZGNfaGNrIiwgImVtbWNfMjA4bSIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfSU5GUkFfUEVSSV8xMzNNLCAiaW5mcmFfcGVyaV8xMzNtIiwgInN5c2F4aSIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfSU5GUkFfMTMzTV9QSENLLCAiaW5mcmFfMTMzbV9waGNrIiwgInN5c2F4aSIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfSU5GUkFfVVNCX1NZU19DSywgImluZnJhX3VzYl9zeXMiLCAidTJ1M19zeXMiLCAxLCAxKSwNCisJRkFDVE9SKENLX0lORlJBX1VTQl9DSywgImluZnJhX3VzYiIsICJ1MnUzX3JlZiIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfSU5GUkFfVVNCX1hIQ0lfQ0ssICJpbmZyYV91c2JfeGhjaSIsICJ1MnUzX3hoY2kiLCAxLCAxKSwNCisJRkFDVE9SKENLX0lORlJBX1BDSUVfR0ZNVVhfVExfT19QUkUsICJpbmZyYV9wY2llX211eCIsICJwZXh0cF90bCIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfSU5GUkFfRjI2TV9DSzAsICJpbmZyYV9mMjZtX2NrMCIsICJjc3dfZjI2bSIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfSU5GUkFfMTMzTV9NQ0ssICJpbmZyYV8xMzNtX21jayIsICJzeXNheGkiLCAxLCAxKSwNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2ZpeGVkX2ZhY3RvciB0b3BfZGl2c1tdIF9faW5pdGNvbnN0ID0gew0KKwlGQUNUT1IoQ0tfVE9QX0NCX0NLU1FfNDBNLCAiY2JfY2tzcV80MG0iLCAiY2xreHRhbCIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfVE9QX0NCX01fNDE2TSwgImNiX21fNDE2bSIsICJtcGxsIiwgMSwgMSksDQorCUZBQ1RPUihDS19UT1BfQ0JfTV9EMiwgImNiX21fZDIiLCAibXBsbCIsIDEsIDIpLA0KKwlGQUNUT1IoQ0tfVE9QX0NCX01fRDMsICJjYl9tX2QzIiwgIm1wbGwiLCAxLCAzKSwNCisJRkFDVE9SKENLX1RPUF9NX0QzX0QyLCAibV9kM19kMiIsICJtcGxsIiwgMSwgMiksDQorCUZBQ1RPUihDS19UT1BfQ0JfTV9ENCwgImNiX21fZDQiLCAibXBsbCIsIDEsIDQpLA0KKwlGQUNUT1IoQ0tfVE9QX0NCX01fRDgsICJjYl9tX2Q4IiwgIm1wbGwiLCAxLCA4KSwNCisJRkFDVE9SKENLX1RPUF9NX0Q4X0QyLCAibV9kOF9kMiIsICJtcGxsIiwgMSwgMTYpLA0KKwlGQUNUT1IoQ0tfVE9QX0NCX01NXzcyME0sICJjYl9tbV83MjBtIiwgIm1tcGxsIiwgMSwgMSksDQorCUZBQ1RPUihDS19UT1BfQ0JfTU1fRDIsICJjYl9tbV9kMiIsICJtbXBsbCIsIDEsIDIpLA0KKwlGQUNUT1IoQ0tfVE9QX0NCX01NX0QzLCAiY2JfbW1fZDMiLCAibW1wbGwiLCAxLCAzKSwNCisJRkFDVE9SKENLX1RPUF9DQl9NTV9EM19ENSwgImNiX21tX2QzX2Q1IiwgIm1tcGxsIiwgMSwgMTUpLA0KKwlGQUNUT1IoQ0tfVE9QX0NCX01NX0Q0LCAiY2JfbW1fZDQiLCAibW1wbGwiLCAxLCA0KSwNCisJRkFDVE9SKENLX1RPUF9DQl9NTV9ENiwgImNiX21tX2Q2IiwgIm1tcGxsIiwgMSwgNiksDQorCUZBQ1RPUihDS19UT1BfTU1fRDZfRDIsICJtbV9kNl9kMiIsICJtbXBsbCIsIDEsIDEyKSwNCisJRkFDVE9SKENLX1RPUF9DQl9NTV9EOCwgImNiX21tX2Q4IiwgIm1tcGxsIiwgMSwgOCksDQorCUZBQ1RPUihDS19UT1BfQ0JfQVBMTDJfMTk2TSwgImNiX2FwbGwyXzE5Nm0iLCAiYXBsbDIiLCAxLCAxKSwNCisJRkFDVE9SKENLX1RPUF9BUExMMl9EMiwgImFwbGwyX2QyIiwgImFwbGwyIiwgMSwgMiksDQorCUZBQ1RPUihDS19UT1BfQVBMTDJfRDQsICJhcGxsMl9kNCIsICJhcGxsMiIsIDEsIDQpLA0KKwlGQUNUT1IoQ0tfVE9QX05FVDFfMjUwME0sICJuZXQxXzI1MDBtIiwgIm5ldDFwbGwiLCAxLCAxKSwNCisJRkFDVE9SKENLX1RPUF9DQl9ORVQxX0Q0LCAiY2JfbmV0MV9kNCIsICJuZXQxcGxsIiwgMSwgNCksDQorCUZBQ1RPUihDS19UT1BfQ0JfTkVUMV9ENSwgImNiX25ldDFfZDUiLCAibmV0MXBsbCIsIDEsIDUpLA0KKwlGQUNUT1IoQ0tfVE9QX05FVDFfRDVfRDIsICJuZXQxX2Q1X2QyIiwgIm5ldDFwbGwiLCAxLCAxMCksDQorCUZBQ1RPUihDS19UT1BfTkVUMV9ENV9ENCwgIm5ldDFfZDVfZDQiLCAibmV0MXBsbCIsIDEsIDIwKSwNCisJRkFDVE9SKENLX1RPUF9DQl9ORVQxX0Q4LCAiY2JfbmV0MV9kOCIsICJuZXQxcGxsIiwgMSwgOCksDQorCUZBQ1RPUihDS19UT1BfTkVUMV9EOF9EMiwgIm5ldDFfZDhfZDIiLCAibmV0MXBsbCIsIDEsIDE2KSwNCisJRkFDVE9SKENLX1RPUF9ORVQxX0Q4X0Q0LCAibmV0MV9kOF9kNCIsICJuZXQxcGxsIiwgMSwgMzIpLA0KKwlGQUNUT1IoQ0tfVE9QX0NCX05FVDJfODAwTSwgImNiX25ldDJfODAwbSIsICJuZXQycGxsIiwgMSwgMSksDQorCUZBQ1RPUihDS19UT1BfQ0JfTkVUMl9EMiwgImNiX25ldDJfZDIiLCAibmV0MnBsbCIsIDEsIDIpLA0KKwlGQUNUT1IoQ0tfVE9QX0NCX05FVDJfRDQsICJjYl9uZXQyX2Q0IiwgIm5ldDJwbGwiLCAxLCA0KSwNCisJRkFDVE9SKENLX1RPUF9ORVQyX0Q0X0QyLCAibmV0Ml9kNF9kMiIsICJuZXQycGxsIiwgMSwgOCksDQorCUZBQ1RPUihDS19UT1BfTkVUMl9ENF9ENCwgIm5ldDJfZDRfZDQiLCAibmV0MnBsbCIsIDEsIDE2KSwNCisJRkFDVE9SKENLX1RPUF9DQl9ORVQyX0Q2LCAiY2JfbmV0Ml9kNiIsICJuZXQycGxsIiwgMSwgNiksDQorCUZBQ1RPUihDS19UT1BfQ0JfV0VETUNVXzIwOE0sICJjYl93ZWRtY3VfMjA4bSIsICJ3ZWRtY3VwbGwiLCAxLCAxKSwNCisJRkFDVE9SKENLX1RPUF9DQl9TR01fMzI1TSwgImNiX3NnbV8zMjVtIiwgInNnbXBsbCIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfVE9QX0NLU1FfNDBNX0QyLCAiY2tzcV80MG1fZDIiLCAiY2JfY2tzcV80MG0iLCAxLCAyKSwNCisJRkFDVE9SKENLX1RPUF9DQl9SVENfMzJLLCAiY2JfcnRjXzMyayIsICJjYl9ja3NxXzQwbSIsIDEsIDEyNTApLA0KKwlGQUNUT1IoQ0tfVE9QX0NCX1JUQ18zMlA3SywgImNiX3J0Y18zMnA3ayIsICJjYl9ja3NxXzQwbSIsIDEsIDEyMjApLA0KKwlGQUNUT1IoQ0tfVE9QX1VTQl9UWDI1ME0sICJ1c2JfdHgyNTBtIiwgImNiX2Nrc3FfNDBtIiwgMSwgMSksDQorCUZBQ1RPUihDS19UT1BfRkFVRCwgImZhdWQiLCAiYXVkX3NlbCIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfVE9QX05GSTFYLCAibmZpMXgiLCAibmZpMXhfc2VsIiwgMSwgMSksDQorCUZBQ1RPUihDS19UT1BfVVNCX0VRX1JYMjUwTSwgInVzYl9lcV9yeDI1MG0iLCAiY2JfY2tzcV80MG0iLCAxLCAxKSwNCisJRkFDVE9SKENLX1RPUF9VU0JfQ0RSX0NLLCAidXNiX2NkciIsICJjYl9ja3NxXzQwbSIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfVE9QX1VTQl9MTjBfQ0ssICJ1c2JfbG4wIiwgImNiX2Nrc3FfNDBtIiwgMSwgMSksDQorCUZBQ1RPUihDS19UT1BfU1BJTkZJX0JDSywgInNwaW5maV9iY2siLCAic3BpbmZpX3NlbCIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfVE9QX1NQSSwgInNwaSIsICJzcGlfc2VsIiwgMSwgMSksDQorCUZBQ1RPUihDS19UT1BfU1BJTV9NU1QsICJzcGltX21zdCIsICJzcGltX21zdF9zZWwiLCAxLCAxKSwNCisJRkFDVE9SKENLX1RPUF9VQVJUX0JDSywgInVhcnRfYmNrIiwgInVhcnRfc2VsIiwgMSwgMSksDQorCUZBQ1RPUihDS19UT1BfUFdNX0JDSywgInB3bV9iY2siLCAicHdtX3NlbCIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfVE9QX0kyQ19CQ0ssICJpMmNfYmNrIiwgImkyY19zZWwiLCAxLCAxKSwNCisJRkFDVE9SKENLX1RPUF9QRVhUUF9UTCwgInBleHRwX3RsIiwgInBleHRwX3RsX2NrX3NlbCIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfVE9QX0VNTUNfMjA4TSwgImVtbWNfMjA4bSIsICJlbW1jXzIwOG1fc2VsIiwgMSwgMSksDQorCUZBQ1RPUihDS19UT1BfRU1NQ180MDBNLCAiZW1tY180MDBtIiwgImVtbWNfNDAwbV9zZWwiLCAxLCAxKSwNCisJRkFDVE9SKENLX1RPUF9EUkFNQ19SRUYsICJkcmFtY19yZWYiLCAiZHJhbWNfc2VsIiwgMSwgMSksDQorCUZBQ1RPUihDS19UT1BfRFJBTUNfTUQzMiwgImRyYW1jX21kMzIiLCAiZHJhbWNfbWQzMl9zZWwiLCAxLCAxKSwNCisJRkFDVE9SKENLX1RPUF9TWVNBWEksICJzeXNheGkiLCAic3lzYXhpX3NlbCIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfVE9QX1NZU0FQQiwgInN5c2FwYiIsICJzeXNhcGJfc2VsIiwgMSwgMSksDQorCUZBQ1RPUihDS19UT1BfQVJNX0RCX01BSU4sICJhcm1fZGJfbWFpbiIsICJhcm1fZGJfbWFpbl9zZWwiLCAxLCAxKSwNCisJRkFDVE9SKENLX1RPUF9BUDJDTk5fSE9TVCwgImFwMmNubl9ob3N0IiwgImFwMmNubl9ob3N0X3NlbCIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfVE9QX05FVFNZUywgIm5ldHN5cyIsICJuZXRzeXNfc2VsIiwgMSwgMSksDQorCUZBQ1RPUihDS19UT1BfTkVUU1lTXzUwME0sICJuZXRzeXNfNTAwbSIsICJuZXRzeXNfNTAwbV9zZWwiLCAxLCAxKSwNCisJRkFDVE9SKENLX1RPUF9ORVRTWVNfV0VEX01DVSwgIm5ldHN5c193ZWRfbWN1IiwgIm5ldHN5c19tY3Vfc2VsIiwgMSwgMSksDQorCUZBQ1RPUihDS19UT1BfTkVUU1lTXzJYLCAibmV0c3lzXzJ4IiwgIm5ldHN5c18yeF9zZWwiLCAxLCAxKSwNCisJRkFDVE9SKENLX1RPUF9TR01fMzI1TSwgInNnbV8zMjVtIiwgInNnbV8zMjVtX3NlbCIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfVE9QX1NHTV9SRUcsICJzZ21fcmVnIiwgInNnbV9yZWdfc2VsIiwgMSwgMSksDQorCUZBQ1RPUihDS19UT1BfRjI2TSwgImNzd19mMjZtIiwgImNzd19mMjZtX3NlbCIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfVE9QX0VJUDk3QiwgImVpcDk3YiIsICJlaXA5N2Jfc2VsIiwgMSwgMSksDQorCUZBQ1RPUihDS19UT1BfVVNCM19QSFksICJ1c2IzX3BoeSIsICJ1c2IzX3BoeV9zZWwiLCAxLCAxKSwNCisJRkFDVE9SKENLX1RPUF9BVUQsICJhdWQiLCAiZmF1ZCIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfVE9QX0ExU1lTLCAiYTFzeXMiLCAiYTFzeXNfc2VsIiwgMSwgMSksDQorCUZBQ1RPUihDS19UT1BfQVVEX0wsICJhdWRfbCIsICJhdWRfbF9zZWwiLCAxLCAxKSwNCisJRkFDVE9SKENLX1RPUF9BX1RVTkVSLCAiYV90dW5lciIsICJhX3R1bmVyX3NlbCIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfVE9QX1UyVTNfUkVGLCAidTJ1M19yZWYiLCAidTJ1M19zZWwiLCAxLCAxKSwNCisJRkFDVE9SKENLX1RPUF9VMlUzX1NZUywgInUydTNfc3lzIiwgInUydTNfc3lzX3NlbCIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfVE9QX1UyVTNfWEhDSSwgInUydTNfeGhjaSIsICJ1MnUzX3hoY2lfc2VsIiwgMSwgMSksDQorCUZBQ1RPUihDS19UT1BfVVNCX0ZSTUNOVCwgInVzYl9mcm1jbnQiLCAidXNiX2ZybWNudF9zZWwiLCAxLCAxKSwNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbmZpMXhfcGFyZW50c1tdIF9faW5pdGNvbnN0ID0gew0KKwkiY2JfY2tzcV80MG0iLA0KKwkiY2JfbW1fZDQiLA0KKwkibmV0MV9kOF9kMiIsDQorCSJjYl9uZXQyX2Q2IiwNCisJImNiX21fZDQiLA0KKwkiY2JfbW1fZDgiLA0KKwkibmV0MV9kOF9kNCIsDQorCSJjYl9tX2Q4Ig0KK307DQorDQorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzcGluZmlfcGFyZW50c1tdIF9faW5pdGNvbnN0ID0gew0KKwkiY2tzcV80MG1fZDIiLA0KKwkiY2JfY2tzcV80MG0iLA0KKwkibmV0MV9kNV9kNCIsDQorCSJjYl9tX2Q0IiwNCisJImNiX21tX2Q4IiwNCisJIm5ldDFfZDhfZDQiLA0KKwkibW1fZDZfZDIiLA0KKwkiY2JfbV9kOCINCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc3BpX3BhcmVudHNbXSBfX2luaXRjb25zdCA9IHsNCisJImNiX2Nrc3FfNDBtIiwNCisJImNiX21fZDIiLA0KKwkiY2JfbW1fZDQiLA0KKwkibmV0MV9kOF9kMiIsDQorCSJjYl9uZXQyX2Q2IiwNCisJIm5ldDFfZDVfZDQiLA0KKwkiY2JfbV9kNCIsDQorCSJuZXQxX2Q4X2Q0Ig0KK307DQorDQorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB1YXJ0X3BhcmVudHNbXSBfX2luaXRjb25zdCA9IHsNCisJImNiX2Nrc3FfNDBtIiwNCisJImNiX21fZDgiLA0KKwkibV9kOF9kMiINCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcHdtX3BhcmVudHNbXSBfX2luaXRjb25zdCA9IHsNCisJImNiX2Nrc3FfNDBtIiwNCisJIm5ldDFfZDhfZDIiLA0KKwkibmV0MV9kNV9kNCIsDQorCSJjYl9tX2Q0IiwNCisJIm1fZDhfZDIiLA0KKwkiY2JfcnRjXzMyayINCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaTJjX3BhcmVudHNbXSBfX2luaXRjb25zdCA9IHsNCisJImNiX2Nrc3FfNDBtIiwNCisJIm5ldDFfZDVfZDQiLA0KKwkiY2JfbV9kNCIsDQorCSJuZXQxX2Q4X2Q0Ig0KK307DQorDQorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwZXh0cF90bF9ja19wYXJlbnRzW10gX19pbml0Y29uc3QgPSB7DQorCSJjYl9ja3NxXzQwbSIsDQorCSJuZXQxX2Q1X2Q0IiwNCisJImNiX21fZDQiLA0KKwkiY2JfcnRjXzMyayINCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZW1tY18yMDhtX3BhcmVudHNbXSBfX2luaXRjb25zdCA9IHsNCisJImNiX2Nrc3FfNDBtIiwNCisJImNiX21fZDIiLA0KKwkiY2JfbmV0Ml9kNCIsDQorCSJjYl9hcGxsMl8xOTZtIiwNCisJImNiX21tX2Q0IiwNCisJIm5ldDFfZDhfZDIiLA0KKwkiY2JfbW1fZDYiDQorfTsNCisNCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGVtbWNfNDAwbV9wYXJlbnRzW10gX19pbml0Y29uc3QgPSB7DQorCSJjYl9ja3NxXzQwbSIsDQorCSJjYl9uZXQyX2QyIiwNCisJImNiX21tX2QyIiwNCisJImNiX25ldDJfZDIiDQorfTsNCisNCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNzd19mMjZtX3BhcmVudHNbXSBfX2luaXRjb25zdCA9IHsNCisJImNrc3FfNDBtX2QyIiwNCisJIm1fZDhfZDIiDQorfTsNCisNCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRyYW1jX21kMzJfcGFyZW50c1tdIF9faW5pdGNvbnN0ID0gew0KKwkiY2JfY2tzcV80MG0iLA0KKwkiY2JfbV9kMiIsDQorCSJjYl93ZWRtY3VfMjA4bSINCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc3lzYXhpX3BhcmVudHNbXSBfX2luaXRjb25zdCA9IHsNCisJImNiX2Nrc3FfNDBtIiwNCisJIm5ldDFfZDhfZDIiDQorfTsNCisNCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHN5c2FwYl9wYXJlbnRzW10gX19pbml0Y29uc3QgPSB7DQorCSJjYl9ja3NxXzQwbSIsDQorCSJtX2QzX2QyIg0KK307DQorDQorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhcm1fZGJfbWFpbl9wYXJlbnRzW10gX19pbml0Y29uc3QgPSB7DQorCSJjYl9ja3NxXzQwbSIsDQorCSJjYl9uZXQyX2Q2Ig0KK307DQorDQorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhcDJjbm5faG9zdF9wYXJlbnRzW10gX19pbml0Y29uc3QgPSB7DQorCSJjYl9ja3NxXzQwbSIsDQorCSJuZXQxX2Q4X2Q0Ig0KK307DQorDQorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBuZXRzeXNfcGFyZW50c1tdIF9faW5pdGNvbnN0ID0gew0KKwkiY2JfY2tzcV80MG0iLA0KKwkiY2JfbW1fZDIiDQorfTsNCisNCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG5ldHN5c181MDBtX3BhcmVudHNbXSBfX2luaXRjb25zdCA9IHsNCisJImNiX2Nrc3FfNDBtIiwNCisJImNiX25ldDFfZDUiDQorfTsNCisNCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG5ldHN5c19tY3VfcGFyZW50c1tdIF9faW5pdGNvbnN0ID0gew0KKwkiY2JfY2tzcV80MG0iLA0KKwkiY2JfbW1fNzIwbSIsDQorCSJjYl9uZXQxX2Q0IiwNCisJImNiX25ldDFfZDUiLA0KKwkiY2JfbV80MTZtIg0KK307DQorDQorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBuZXRzeXNfMnhfcGFyZW50c1tdIF9faW5pdGNvbnN0ID0gew0KKwkiY2JfY2tzcV80MG0iLA0KKwkiY2JfbmV0Ml84MDBtIiwNCisJImNiX21tXzcyMG0iDQorfTsNCisNCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNnbV8zMjVtX3BhcmVudHNbXSBfX2luaXRjb25zdCA9IHsNCisJImNiX2Nrc3FfNDBtIiwNCisJImNiX3NnbV8zMjVtIg0KK307DQorDQorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzZ21fcmVnX3BhcmVudHNbXSBfX2luaXRjb25zdCA9IHsNCisJImNiX2Nrc3FfNDBtIiwNCisJImNiX25ldDJfZDQiDQorfTsNCisNCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGVpcDk3Yl9wYXJlbnRzW10gX19pbml0Y29uc3QgPSB7DQorCSJjYl9ja3NxXzQwbSIsDQorCSJjYl9uZXQxX2Q1IiwNCisJImNiX21fNDE2bSIsDQorCSJjYl9tbV9kMiIsDQorCSJuZXQxX2Q1X2QyIg0KK307DQorDQorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhdWRfcGFyZW50c1tdIF9faW5pdGNvbnN0ID0gew0KKwkiY2JfY2tzcV80MG0iLA0KKwkiY2JfYXBsbDJfMTk2bSINCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYTFzeXNfcGFyZW50c1tdIF9faW5pdGNvbnN0ID0gew0KKwkiY2JfY2tzcV80MG0iLA0KKwkiYXBsbDJfZDQiDQorfTsNCisNCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGF1ZF9sX3BhcmVudHNbXSBfX2luaXRjb25zdCA9IHsNCisJImNiX2Nrc3FfNDBtIiwNCisJImNiX2FwbGwyXzE5Nm0iLA0KKwkibV9kOF9kMiINCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYV90dW5lcl9wYXJlbnRzW10gX19pbml0Y29uc3QgPSB7DQorCSJjYl9ja3NxXzQwbSIsDQorCSJhcGxsMl9kNCIsDQorCSJtX2Q4X2QyIg0KK307DQorDQorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB1MnUzX3BhcmVudHNbXSBfX2luaXRjb25zdCA9IHsNCisJImNiX2Nrc3FfNDBtIiwNCisJIm1fZDhfZDIiDQorfTsNCisNCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHUydTNfc3lzX3BhcmVudHNbXSBfX2luaXRjb25zdCA9IHsNCisJImNiX2Nrc3FfNDBtIiwNCisJIm5ldDFfZDVfZDQiDQorfTsNCisNCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHVzYl9mcm1jbnRfcGFyZW50c1tdIF9faW5pdGNvbnN0ID0gew0KKwkiY2JfY2tzcV80MG0iLA0KKwkiY2JfbW1fZDNfZDUiDQorfTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19tdXggdG9wX211eGVzW10gPSB7DQorCS8qIENMS19DRkdfMCAqLw0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19UT1BfTkZJMVhfU0VMLCAibmZpMXhfc2VsIiwNCisJICAgIG5maTF4X3BhcmVudHMsIDB4MDAwLCAweDAwNCwgMHgwMDgsIDAsIDMsIDcsIDB4MUMwLCAwKSwNCisJTVVYX0dBVEVfQ0xSX1NFVF9VUEQoQ0tfVE9QX1NQSU5GSV9TRUwsICJzcGluZmlfc2VsIiwNCisJICAgIHNwaW5maV9wYXJlbnRzLCAweDAwMCwgMHgwMDQsIDB4MDA4LCA4LCAzLCAxNSwgMHgxQzAsIDEpLA0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19UT1BfU1BJX1NFTCwgInNwaV9zZWwiLA0KKwkgICAgc3BpX3BhcmVudHMsIDB4MDAwLCAweDAwNCwgMHgwMDgsIDE2LCAzLCAyMywgMHgxQzAsIDIpLA0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19UT1BfU1BJTV9NU1RfU0VMLCAic3BpbV9tc3Rfc2VsIiwNCisJICAgIHNwaV9wYXJlbnRzLCAweDAwMCwgMHgwMDQsIDB4MDA4LCAyNCwgMywgMzEsIDB4MUMwLCAzKSwNCisJLyogQ0xLX0NGR18xICovDQorCU1VWF9HQVRFX0NMUl9TRVRfVVBEKENLX1RPUF9VQVJUX1NFTCwgInVhcnRfc2VsIiwNCisJICAgIHVhcnRfcGFyZW50cywgMHgwMTAsIDB4MDE0LCAweDAxOCwgMCwgMiwgNywgMHgxQzAsIDQpLA0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19UT1BfUFdNX1NFTCwgInB3bV9zZWwiLA0KKwkgICAgcHdtX3BhcmVudHMsIDB4MDEwLCAweDAxNCwgMHgwMTgsIDgsIDMsIDE1LCAweDFDMCwgNSksDQorCU1VWF9HQVRFX0NMUl9TRVRfVVBEKENLX1RPUF9JMkNfU0VMLCAiaTJjX3NlbCIsDQorCSAgICBpMmNfcGFyZW50cywgMHgwMTAsIDB4MDE0LCAweDAxOCwgMTYsIDIsIDIzLCAweDFDMCwgNiksDQorCU1VWF9HQVRFX0NMUl9TRVRfVVBEKENLX1RPUF9QRVhUUF9UTF9TRUwsICJwZXh0cF90bF9ja19zZWwiLA0KKwkgICAgcGV4dHBfdGxfY2tfcGFyZW50cywgMHgwMTAsIDB4MDE0LCAweDAxOCwgMjQsIDIsIDMxLCAweDFDMCwgNyksDQorCS8qIENMS19DRkdfMiAqLw0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19UT1BfRU1NQ18yMDhNX1NFTCwgImVtbWNfMjA4bV9zZWwiLA0KKwkgICAgZW1tY18yMDhtX3BhcmVudHMsIDB4MDIwLCAweDAyNCwgMHgwMjgsIDAsIDMsIDcsIDB4MUMwLCA4KSwNCisJTVVYX0dBVEVfQ0xSX1NFVF9VUEQoQ0tfVE9QX0VNTUNfNDAwTV9TRUwsICJlbW1jXzQwMG1fc2VsIiwNCisJICAgIGVtbWNfNDAwbV9wYXJlbnRzLCAweDAyMCwgMHgwMjQsIDB4MDI4LCA4LCAyLCAxNSwgMHgxQzAsIDkpLA0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19UT1BfRjI2TV9TRUwsICJjc3dfZjI2bV9zZWwiLA0KKwkgICAgY3N3X2YyNm1fcGFyZW50cywgMHgwMjAsIDB4MDI0LCAweDAyOCwgMTYsIDEsIDIzLCAweDFDMCwgMTApLA0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19UT1BfRFJBTUNfU0VMLCAiZHJhbWNfc2VsIiwNCisJICAgIGNzd19mMjZtX3BhcmVudHMsIDB4MDIwLCAweDAyNCwgMHgwMjgsIDI0LCAxLCAzMSwgMHgxQzAsIDExKSwNCisJLyogQ0xLX0NGR18zICovDQorCU1VWF9HQVRFX0NMUl9TRVRfVVBEKENLX1RPUF9EUkFNQ19NRDMyX1NFTCwgImRyYW1jX21kMzJfc2VsIiwNCisJICAgIGRyYW1jX21kMzJfcGFyZW50cywgMHgwMzAsIDB4MDM0LCAweDAzOCwgMCwgMiwgNywgMHgxQzAsIDEyKSwNCisJTVVYX0dBVEVfQ0xSX1NFVF9VUEQoQ0tfVE9QX1NZU0FYSV9TRUwsICJzeXNheGlfc2VsIiwNCisJICAgIHN5c2F4aV9wYXJlbnRzLCAweDAzMCwgMHgwMzQsIDB4MDM4LCA4LCAxLCAxNSwgMHgxQzAsIDEzKSwNCisJTVVYX0dBVEVfQ0xSX1NFVF9VUEQoQ0tfVE9QX1NZU0FQQl9TRUwsICJzeXNhcGJfc2VsIiwNCisJICAgIHN5c2FwYl9wYXJlbnRzLCAweDAzMCwgMHgwMzQsIDB4MDM4LCAxNiwgMSwgMjMsIDB4MUMwLCAxNCksDQorCU1VWF9HQVRFX0NMUl9TRVRfVVBEKENLX1RPUF9BUk1fREJfTUFJTl9TRUwsICJhcm1fZGJfbWFpbl9zZWwiLA0KKwkgICAgYXJtX2RiX21haW5fcGFyZW50cywgMHgwMzAsIDB4MDM0LCAweDAzOCwgMjQsIDEsIDMxLCAweDFDMCwgMTUpLA0KKwkvKiBDTEtfQ0ZHXzQgKi8NCisJTVVYX0dBVEVfQ0xSX1NFVF9VUEQoQ0tfVE9QX0FQMkNOTl9IT1NUX1NFTCwgImFwMmNubl9ob3N0X3NlbCIsDQorCSAgICBhcDJjbm5faG9zdF9wYXJlbnRzLCAweDA0MCwgMHgwNDQsIDB4MDQ4LCAwLCAxLCA3LCAweDFDMCwgMTYpLA0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19UT1BfTkVUU1lTX1NFTCwgIm5ldHN5c19zZWwiLA0KKwkgICAgbmV0c3lzX3BhcmVudHMsIDB4MDQwLCAweDA0NCwgMHgwNDgsIDgsIDEsIDE1LCAweDFDMCwgMTcpLA0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19UT1BfTkVUU1lTXzUwME1fU0VMLCAibmV0c3lzXzUwMG1fc2VsIiwNCisJICAgIG5ldHN5c181MDBtX3BhcmVudHMsIDB4MDQwLCAweDA0NCwgMHgwNDgsIDE2LCAxLCAyMywgMHgxQzAsIDE4KSwNCisJTVVYX0dBVEVfQ0xSX1NFVF9VUEQoQ0tfVE9QX05FVFNZU19NQ1VfU0VMLCAibmV0c3lzX21jdV9zZWwiLA0KKwkgICAgbmV0c3lzX21jdV9wYXJlbnRzLCAweDA0MCwgMHgwNDQsIDB4MDQ4LCAyNCwgMywgMzEsIDB4MUMwLCAxOSksDQorCS8qIENMS19DRkdfNSAqLw0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19UT1BfTkVUU1lTXzJYX1NFTCwgIm5ldHN5c18yeF9zZWwiLA0KKwkgICAgbmV0c3lzXzJ4X3BhcmVudHMsIDB4MDUwLCAweDA1NCwgMHgwNTgsIDAsIDIsIDcsIDB4MUMwLCAyMCksDQorCU1VWF9HQVRFX0NMUl9TRVRfVVBEKENLX1RPUF9TR01fMzI1TV9TRUwsICJzZ21fMzI1bV9zZWwiLA0KKwkgICAgc2dtXzMyNW1fcGFyZW50cywgMHgwNTAsIDB4MDU0LCAweDA1OCwgOCwgMSwgMTUsIDB4MUMwLCAyMSksDQorCU1VWF9HQVRFX0NMUl9TRVRfVVBEKENLX1RPUF9TR01fUkVHX1NFTCwgInNnbV9yZWdfc2VsIiwNCisJICAgIHNnbV9yZWdfcGFyZW50cywgMHgwNTAsIDB4MDU0LCAweDA1OCwgMTYsIDEsIDIzLCAweDFDMCwgMjIpLA0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19UT1BfRUlQOTdCX1NFTCwgImVpcDk3Yl9zZWwiLA0KKwkgICAgZWlwOTdiX3BhcmVudHMsIDB4MDUwLCAweDA1NCwgMHgwNTgsIDI0LCAzLCAzMSwgMHgxQzAsIDIzKSwNCisJLyogQ0xLX0NGR182ICovDQorCU1VWF9HQVRFX0NMUl9TRVRfVVBEKENLX1RPUF9VU0IzX1BIWV9TRUwsICJ1c2IzX3BoeV9zZWwiLA0KKwkgICAgY3N3X2YyNm1fcGFyZW50cywgMHgwNjAsIDB4MDY0LCAweDA2OCwgMCwgMSwgNywgMHgxQzAsIDI0KSwNCisJTVVYX0dBVEVfQ0xSX1NFVF9VUEQoQ0tfVE9QX0FVRF9TRUwsICJhdWRfc2VsIiwNCisJICAgIGF1ZF9wYXJlbnRzLCAweDA2MCwgMHgwNjQsIDB4MDY4LCA4LCAxLCAxNSwgMHgxQzAsIDI1KSwNCisJTVVYX0dBVEVfQ0xSX1NFVF9VUEQoQ0tfVE9QX0ExU1lTX1NFTCwgImExc3lzX3NlbCIsDQorCSAgICBhMXN5c19wYXJlbnRzLCAweDA2MCwgMHgwNjQsIDB4MDY4LCAxNiwgMSwgMjMsIDB4MUMwLCAyNiksDQorCU1VWF9HQVRFX0NMUl9TRVRfVVBEKENLX1RPUF9BVURfTF9TRUwsICJhdWRfbF9zZWwiLA0KKwkgICAgYXVkX2xfcGFyZW50cywgMHgwNjAsIDB4MDY0LCAweDA2OCwgMjQsIDIsIDMxLCAweDFDMCwgMjcpLA0KKwkvKiBDTEtfQ0ZHXzcgKi8NCisJTVVYX0dBVEVfQ0xSX1NFVF9VUEQoQ0tfVE9QX0FfVFVORVJfU0VMLCAiYV90dW5lcl9zZWwiLA0KKwkgICAgYV90dW5lcl9wYXJlbnRzLCAweDA3MCwgMHgwNzQsIDB4MDc4LCAwLCAyLCA3LCAweDFDMCwgMjgpLA0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19UT1BfVTJVM19TRUwsICJ1MnUzX3NlbCIsDQorCSAgICB1MnUzX3BhcmVudHMsIDB4MDcwLCAweDA3NCwgMHgwNzgsIDgsIDEsIDE1LCAweDFDMCwgMjkpLA0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19UT1BfVTJVM19TWVNfU0VMLCAidTJ1M19zeXNfc2VsIiwNCisJICAgIHUydTNfc3lzX3BhcmVudHMsIDB4MDcwLCAweDA3NCwgMHgwNzgsIDE2LCAxLCAyMywgMHgxQzAsIDMwKSwNCisJTVVYX0dBVEVfQ0xSX1NFVF9VUEQoQ0tfVE9QX1UyVTNfWEhDSV9TRUwsICJ1MnUzX3hoY2lfc2VsIiwNCisJICAgIHUydTNfc3lzX3BhcmVudHMsIDB4MDcwLCAweDA3NCwgMHgwNzgsIDI0LCAxLCAzMSwgMHgxQzQsIDApLA0KKwkvKiBDTEtfQ0ZHXzggKi8NCisJTVVYX0dBVEVfQ0xSX1NFVF9VUEQoQ0tfVE9QX1VTQl9GUk1DTlRfU0VMLCAidXNiX2ZybWNudF9zZWwiLA0KKwkgICAgdXNiX2ZybWNudF9wYXJlbnRzLCAweDA4MCwgMHgwODQsIDB4MDg4LCAwLCAxLCA3LCAweDFDNCwgMSksDQorfTsNCisNCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGluZnJhX3VhcnQwX3BhcmVudHNbXSBfX2luaXRjb25zdCA9IHsNCisJImluZnJhX2NrX2YyNm0iLA0KKwkiaW5mcmFfdWFydCINCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaW5mcmFfc3BpMF9wYXJlbnRzW10gX19pbml0Y29uc3QgPSB7DQorCSJpbmZyYV9pMmMiLA0KKwkiaW5mcmFfaXNwaTAiDQorfTsNCisNCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGluZnJhX3NwaTFfcGFyZW50c1tdIF9faW5pdGNvbnN0ID0gew0KKwkiaW5mcmFfaTJjIiwNCisJImluZnJhX2lzcGkxIg0KK307DQorDQorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBpbmZyYV9wd20xX3BhcmVudHNbXSBfX2luaXRjb25zdCA9IHsNCisJImluZnJhX3B3bSINCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaW5mcmFfcHdtX2JzZWxfcGFyZW50c1tdIF9faW5pdGNvbnN0ID0gew0KKwkiaW5mcmFfY2tfZjMyayIsDQorCSJpbmZyYV9ja19mMjZtIiwNCisJImluZnJhXzY2bV9tY2siLA0KKwkiaW5mcmFfcHdtIg0KK307DQorDQorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBpbmZyYV9wY2llX3BhcmVudHNbXSBfX2luaXRjb25zdCA9IHsNCisJImluZnJhX2NrX2YzMmsiLA0KKwkiaW5mcmFfY2tfZjI2bSIsDQorCSJjYl9ja3NxXzQwbSIsDQorCSJpbmZyYV9wY2llIg0KK307DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfbXV4IGluZnJhX211eGVzW10gPSB7DQorCS8qIE1PRFVMRV9DTEtfU0VMXzAgKi8NCisJTVVYX0dBVEVfQ0xSX1NFVF9VUEQoQ0tfSU5GUkFfVUFSVDBfU0VMLCAiaW5mcmFfdWFydDBfc2VsIiwNCisJICAgIGluZnJhX3VhcnQwX3BhcmVudHMsIDB4MDAxOCwgMHgwMDEwLCAweDAwMTQsIDAsIDEsIC0xLCAtMSwgLTEpLA0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19JTkZSQV9VQVJUMV9TRUwsICJpbmZyYV91YXJ0MV9zZWwiLA0KKwkgICAgaW5mcmFfdWFydDBfcGFyZW50cywgMHgwMDE4LCAweDAwMTAsIDB4MDAxNCwgMSwgMSwgLTEsIC0xLCAtMSksDQorCU1VWF9HQVRFX0NMUl9TRVRfVVBEKENLX0lORlJBX1VBUlQyX1NFTCwgImluZnJhX3VhcnQyX3NlbCIsDQorCSAgICBpbmZyYV91YXJ0MF9wYXJlbnRzLCAweDAwMTgsIDB4MDAxMCwgMHgwMDE0LCAyLCAxLCAtMSwgLTEsIC0xKSwNCisJTVVYX0dBVEVfQ0xSX1NFVF9VUEQoQ0tfSU5GUkFfU1BJMF9TRUwsICJpbmZyYV9zcGkwX3NlbCIsDQorCSAgICBpbmZyYV9zcGkwX3BhcmVudHMsIDB4MDAxOCwgMHgwMDEwLCAweDAwMTQsIDQsIDEsIC0xLCAtMSwgLTEpLA0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19JTkZSQV9TUEkxX1NFTCwgImluZnJhX3NwaTFfc2VsIiwNCisJICAgIGluZnJhX3NwaTFfcGFyZW50cywgMHgwMDE4LCAweDAwMTAsIDB4MDAxNCwgNSwgMSwgLTEsIC0xLCAtMSksDQorCU1VWF9HQVRFX0NMUl9TRVRfVVBEKENLX0lORlJBX1NQSTJfU0VMLCAiaW5mcmFfc3BpMl9zZWwiLA0KKwkgICAgaW5mcmFfc3BpMF9wYXJlbnRzLCAweDAwMTgsIDB4MDAxMCwgMHgwMDE0LCA2LCAxLCAtMSwgLTEsIC0xKSwNCisJTVVYX0dBVEVfQ0xSX1NFVF9VUEQoQ0tfSU5GUkFfUFdNMV9TRUwsICJpbmZyYV9wd20xX3NlbCIsDQorCSAgICBpbmZyYV9wd20xX3BhcmVudHMsIDB4MDAxOCwgMHgwMDEwLCAweDAwMTQsIDksIDEsIC0xLCAtMSwgLTEpLA0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19JTkZSQV9QV00yX1NFTCwgImluZnJhX3B3bTJfc2VsIiwNCisJICAgIGluZnJhX3B3bTFfcGFyZW50cywgMHgwMDE4LCAweDAwMTAsIDB4MDAxNCwgMTEsIDEsIC0xLCAtMSwgLTEpLA0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19JTkZSQV9QV00zX1NFTCwgImluZnJhX3B3bTNfc2VsIiwNCisJICAgIGluZnJhX3B3bTFfcGFyZW50cywgMHgwMDE4LCAweDAwMTAsIDB4MDAxNCwgMTUsIDEsIC0xLCAtMSwgLTEpLA0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19JTkZSQV9QV01fQlNFTCwgImluZnJhX3B3bV9ic2VsIiwNCisJICAgIGluZnJhX3B3bV9ic2VsX3BhcmVudHMsIDB4MDAxOCwgMHgwMDEwLCAweDAwMTQsIDEzLCAyLCAtMSwgLTEsIC0xKSwNCisJLyogTU9EVUxFX0NMS19TRUxfMSAqLw0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19JTkZSQV9QQ0lFX1NFTCwgImluZnJhX3BjaWVfc2VsIiwNCisJICAgIGluZnJhX3BjaWVfcGFyZW50cywgMHgwMDI4LCAweDAwMjAsIDB4MDAyNCwgMCwgMiwgLTEsIC0xLCAtMSksDQorfTsNCisNCitzdGF0aWMgc3RydWN0IG10a19jb21wb3NpdGUgdG9wX2F1ZF9kaXZzW10gPSB7DQorCURJVl9HQVRFKENLX1RPUF9BVURfSTJTX00sICJhdWRfaTJzX20iLCAiYXVkIiwNCisJCTB4MDQyMCwgMCwgMHgwNDIwLCA4LCA4KSwNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2dhdGVfcmVncyBpbmZyYTBfY2dfcmVncyA9IHsNCisJLnNldF9vZnMgPSAweDQwLA0KKwkuY2xyX29mcyA9IDB4NDQsDQorCS5zdGFfb2ZzID0gMHg0OCwNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2dhdGVfcmVncyBpbmZyYTFfY2dfcmVncyA9IHsNCisJLnNldF9vZnMgPSAweDUwLA0KKwkuY2xyX29mcyA9IDB4NTQsDQorCS5zdGFfb2ZzID0gMHg1OCwNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2dhdGVfcmVncyBpbmZyYTJfY2dfcmVncyA9IHsNCisJLnNldF9vZnMgPSAweDYwLA0KKwkuY2xyX29mcyA9IDB4NjQsDQorCS5zdGFfb2ZzID0gMHg2OCwNCit9Ow0KKw0KKyNkZWZpbmUgR0FURV9JTkZSQTAoX2lkLCBfbmFtZSwgX3BhcmVudCwgX3NoaWZ0KSB7CVwNCisJCS5pZCA9IF9pZCwJCQkJXA0KKwkJLm5hbWUgPSBfbmFtZSwJCQkJXA0KKwkJLnBhcmVudF9uYW1lID0gX3BhcmVudCwJCQlcDQorCQkucmVncyA9ICZpbmZyYTBfY2dfcmVncywJCQlcDQorCQkuc2hpZnQgPSBfc2hpZnQsCQkJXA0KKwkJLm9wcyA9ICZtdGtfY2xrX2dhdGVfb3BzX3NldGNsciwJXA0KKwl9DQorDQorI2RlZmluZSBHQVRFX0lORlJBMShfaWQsIF9uYW1lLCBfcGFyZW50LCBfc2hpZnQpIHsJXA0KKwkJLmlkID0gX2lkLAkJCQlcDQorCQkubmFtZSA9IF9uYW1lLAkJCQlcDQorCQkucGFyZW50X25hbWUgPSBfcGFyZW50LAkJCVwNCisJCS5yZWdzID0gJmluZnJhMV9jZ19yZWdzLAkJCVwNCisJCS5zaGlmdCA9IF9zaGlmdCwJCQlcDQorCQkub3BzID0gJm10a19jbGtfZ2F0ZV9vcHNfc2V0Y2xyLAlcDQorCX0NCisNCisjZGVmaW5lIEdBVEVfSU5GUkEyKF9pZCwgX25hbWUsIF9wYXJlbnQsIF9zaGlmdCkgewlcDQorCQkuaWQgPSBfaWQsCQkJCVwNCisJCS5uYW1lID0gX25hbWUsCQkJCVwNCisJCS5wYXJlbnRfbmFtZSA9IF9wYXJlbnQsCQkJXA0KKwkJLnJlZ3MgPSAmaW5mcmEyX2NnX3JlZ3MsCQkJXA0KKwkJLnNoaWZ0ID0gX3NoaWZ0LAkJCVwNCisJCS5vcHMgPSAmbXRrX2Nsa19nYXRlX29wc19zZXRjbHIsCVwNCisJfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2dhdGUgaW5mcmFfY2xrc1tdIF9faW5pdGNvbnN0ID0gew0KKwkvKiBJTkZSQTAgKi8NCisJR0FURV9JTkZSQTAoQ0tfSU5GUkFfR1BUX1NUQSwgImluZnJhX2dwdF9zdGEiLCAiaW5mcmFfNjZtX21jayIsIDApLA0KKwlHQVRFX0lORlJBMChDS19JTkZSQV9QV01fSENLLCAiaW5mcmFfcHdtX2hjayIsICJpbmZyYV82Nm1fbWNrIiwgMSksDQorCUdBVEVfSU5GUkEwKENLX0lORlJBX1BXTV9TVEEsICJpbmZyYV9wd21fc3RhIiwgImluZnJhX3B3bV9iY2siLCAyKSwNCisJR0FURV9JTkZSQTAoQ0tfSU5GUkFfUFdNMV9DSywgImluZnJhX3B3bTEiLCAiaW5mcmFfcHdtX2NrMSIsIDMpLA0KKwlHQVRFX0lORlJBMChDS19JTkZSQV9QV00yX0NLLCAiaW5mcmFfcHdtMiIsICJpbmZyYV9wd21fY2syIiwgNCksDQorCUdBVEVfSU5GUkEwKENLX0lORlJBX0NRX0RNQV9DSywgImluZnJhX2NxX2RtYSIsICJpbmZyYV8xMzNtX2hjayIsIDYpLA0KKwlHQVRFX0lORlJBMChDS19JTkZSQV9BVURfQlVTX0NLLCAiaW5mcmFfYXVkX2J1cyIsICJpbmZyYV82Nm1fcGhjayIsIDgpLA0KKwlHQVRFX0lORlJBMChDS19JTkZSQV9BVURfMjZNX0NLLCAiaW5mcmFfYXVkXzI2bSIsICJpbmZyYV9ja19mMjZtIiwgOSksDQorCUdBVEVfSU5GUkEwKENLX0lORlJBX0FVRF9MX0NLLCAiaW5mcmFfYXVkX2wiLCAiaW5mcmFfZmF1ZF9sIiwgMTApLA0KKwlHQVRFX0lORlJBMChDS19JTkZSQV9BVURfQVVEX0NLLCAiaW5mcmFfYXVkX2F1ZCIsICJpbmZyYV9mYXVkX2F1ZCIsIDExKSwNCisJR0FURV9JTkZSQTAoQ0tfSU5GUkFfQVVEX0VHMl9DSywgImluZnJhX2F1ZF9lZzIiLCAiaW5mcmFfZmF1ZF9lZzIiLCAxMyksDQorCUdBVEVfSU5GUkEwKENLX0lORlJBX0RSQU1DXzI2TV9DSywgImluZnJhX2RyYW1jXzI2bSIsICJpbmZyYV9ja19mMjZtIiwgMTQpLA0KKwlHQVRFX0lORlJBMChDS19JTkZSQV9EQkdfQ0ssICJpbmZyYV9kYmciLCAiaW5mcmFfNjZtX21jayIsIDE1KSwNCisJR0FURV9JTkZSQTAoQ0tfSU5GUkFfQVBfRE1BX0NLLCAiaW5mcmFfYXBfZG1hIiwgImluZnJhXzY2bV9tY2siLCAxNiksDQorCUdBVEVfSU5GUkEwKENLX0lORlJBX1NFSl9DSywgImluZnJhX3NlaiIsICJpbmZyYV82Nm1fbWNrIiwgMjQpLA0KKwlHQVRFX0lORlJBMChDS19JTkZSQV9TRUpfMTNNX0NLLCAiaW5mcmFfc2VqXzEzbSIsICJpbmZyYV9ja19mMjZtIiwgMjUpLA0KKwlHQVRFX0lORlJBMChDS19JTkZSQV9QV00zX0NLLCAiaW5mcmFfcHdtMyIsICJpbmZyYV9wd20zX3NlbCIsIDI3KSwNCisJLyogSU5GUkExICovDQorCUdBVEVfSU5GUkExKENLX0lORlJBX1RIRVJNX0NLLCAiaW5mcmFfdGhlcm0iLCAiaW5mcmFfY2tfZjI2bSIsIDApLA0KKwlHQVRFX0lORlJBMShDS19JTkZSQV9JMkNPX0NLLCAiaW5mcmFfaTJjbyIsICJpbmZyYV9pMmNzIiwgMSksDQorCUdBVEVfSU5GUkExKENLX0lORlJBX1VBUlQwX0NLLCAiaW5mcmFfdWFydDAiLCAiaW5mcmFfbXV4X3VhcnQwIiwgMiksDQorCUdBVEVfSU5GUkExKENLX0lORlJBX1VBUlQxX0NLLCAiaW5mcmFfdWFydDEiLCAiaW5mcmFfbXV4X3VhcnQxIiwgMyksDQorCUdBVEVfSU5GUkExKENLX0lORlJBX1VBUlQyX0NLLCAiaW5mcmFfdWFydDIiLCAiaW5mcmFfbXV4X3VhcnQyIiwgNCksDQorCUdBVEVfSU5GUkExKENLX0lORlJBX1NQSTJfQ0ssICJpbmZyYV9zcGkyIiwgImluZnJhX211eF9zcGkyIiwgNiksDQorCUdBVEVfSU5GUkExKENLX0lORlJBX1NQSTJfSENLX0NLLCAiaW5mcmFfc3BpMl9oY2siLCAiaW5mcmFfNjZtX21jayIsIDcpLA0KKwlHQVRFX0lORlJBMShDS19JTkZSQV9ORkkxX0NLLCAiaW5mcmFfbmZpMSIsICJpbmZyYV9uZmkiLCA4KSwNCisJR0FURV9JTkZSQTEoQ0tfSU5GUkFfU1BJTkZJMV9DSywgImluZnJhX3NwaW5maTEiLCAiaW5mcmFfc3BpbmZpIiwgOSksDQorCUdBVEVfSU5GUkExKENLX0lORlJBX05GSV9IQ0tfQ0ssICJpbmZyYV9uZmlfaGNrIiwgImluZnJhXzY2bV9tY2siLCAxMCksDQorCUdBVEVfSU5GUkExKENLX0lORlJBX1NQSTBfQ0ssICJpbmZyYV9zcGkwIiwgImluZnJhX211eF9zcGkwIiwgMTEpLA0KKwlHQVRFX0lORlJBMShDS19JTkZSQV9TUEkxX0NLLCAiaW5mcmFfc3BpMSIsICJpbmZyYV9tdXhfc3BpMSIsIDEyKSwNCisJR0FURV9JTkZSQTEoQ0tfSU5GUkFfU1BJMF9IQ0tfQ0ssICJpbmZyYV9zcGkwX2hjayIsICJpbmZyYV82Nm1fbWNrIiwgMTMpLA0KKwlHQVRFX0lORlJBMShDS19JTkZSQV9TUEkxX0hDS19DSywgImluZnJhX3NwaTFfaGNrIiwgImluZnJhXzY2bV9tY2siLCAxNCksDQorCUdBVEVfSU5GUkExKENLX0lORlJBX0ZSVENfQ0ssICJpbmZyYV9mcnRjIiwgImluZnJhX3J0Y18zMmsiLCAxNSksDQorCUdBVEVfSU5GUkExKENLX0lORlJBX01TRENfQ0ssICJpbmZyYV9tc2RjIiwgImluZnJhX2Ztc2RjIiwgMTYpLA0KKwlHQVRFX0lORlJBMShDS19JTkZSQV9NU0RDX0hDS19DSywgImluZnJhX21zZGNfaGNrIiwgImluZnJhX2Ztc2RjX2hjayIsIDE3KSwNCisJR0FURV9JTkZSQTEoQ0tfSU5GUkFfTVNEQ18xMzNNX0NLLCAiaW5mcmFfbXNkY18xMzNtIiwgImluZnJhX3BlcmlfMTMzbSIsIDE4KSwNCisJR0FURV9JTkZSQTEoQ0tfSU5GUkFfTVNEQ182Nk1fQ0ssICJpbmZyYV9tc2RjXzY2bSIsICJpbmZyYV82Nm1fcGhjayIsIDE5KSwNCisJR0FURV9JTkZSQTEoQ0tfSU5GUkFfQURDXzI2TV9DSywgImluZnJhX2FkY18yNm0iLCAiY3N3X2YyNm0iLCAyMCksDQorCUdBVEVfSU5GUkExKENLX0lORlJBX0FEQ19GUkNfQ0ssICJpbmZyYV9hZGNfZnJjIiwgImNzd19mMjZtIiwgMjEpLA0KKwlHQVRFX0lORlJBMShDS19JTkZSQV9GQklTVDJGUENfQ0ssICJpbmZyYV9mYmlzdDJmcGMiLCAiaW5mcmFfbmZpIiwgMjMpLA0KKwlHQVRFX0lORlJBMShDS19JTkZSQV9JMkNfTUNLX0NLLCAiaW5mcmFfaTJjX21jayIsICJpbmZyYV8xMzNtX21jayIsIDI1KSwNCisJR0FURV9JTkZSQTEoQ0tfSU5GUkFfSTJDX1BDS19DSywgImluZnJhX2kyY19wY2siLCAiaW5mcmFfNjZtX21jayIsIDI2KSwNCisJLyogSU5GUkEyICovDQorCUdBVEVfSU5GUkEyKENLX0lORlJBX0lVU0JfMTMzX0NLLCAiaW5mcmFfaXVzYl8xMzMiLCAiaW5mcmFfMTMzbV9waGNrIiwgMCksDQorCUdBVEVfSU5GUkEyKENLX0lORlJBX0lVU0JfNjZNX0NLLCAiaW5mcmFfaXVzYl82Nm0iLCAiaW5mcmFfNjZtX3BoY2siLCAxKSwNCisJR0FURV9JTkZSQTIoQ0tfSU5GUkFfSVVTQl9TWVNfQ0ssICJpbmZyYV9pdXNiX3N5cyIsICJpbmZyYV91c2Jfc3lzIiwgMiksDQorCUdBVEVfSU5GUkEyKENLX0lORlJBX0lVU0JfQ0ssICJpbmZyYV9pdXNiIiwgImluZnJhX3VzYiIsIDMpLA0KKwlHQVRFX0lORlJBMihDS19JTkZSQV9JUENJRV9DSywgImluZnJhX2lwY2llIiwgImluZnJhX3BjaWVfbXV4IiwgMTIpLA0KKwlHQVRFX0lORlJBMihDS19JTkZSQV9JUENJRV9QSVBFX0NLLCAiaW5mcmFfaXBjaWVfcGlwZSIsICJjYl9ja3NxXzQwbSIsIDEzKSwNCisJR0FURV9JTkZSQTIoQ0tfSU5GUkFfSVBDSUVSX0NLLCAiaW5mcmFfaXBjaWVyIiwgImluZnJhX2YyNm1fY2swIiwgMTQpLA0KKwlHQVRFX0lORlJBMihDS19JTkZSQV9JUENJRUJfQ0ssICJpbmZyYV9pcGNpZWIiLCAiaW5mcmFfMTMzbV9waGNrIiwgMTUpLA0KK307DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZ2F0ZV9yZWdzIHNnbWlpMF9jZ19yZWdzID0gew0KKwkuc2V0X29mcyA9IDB4RTQsDQorCS5jbHJfb2ZzID0gMHhFNCwNCisJLnN0YV9vZnMgPSAweEU0LA0KK307DQorDQorI2RlZmluZSBHQVRFX1NHTUlJMChfaWQsIF9uYW1lLCBfcGFyZW50LCBfc2hpZnQpIHsJXA0KKwkJLmlkID0gX2lkLAkJCQlcDQorCQkubmFtZSA9IF9uYW1lLAkJCQlcDQorCQkucGFyZW50X25hbWUgPSBfcGFyZW50LAkJCVwNCisJCS5yZWdzID0gJnNnbWlpMF9jZ19yZWdzLAkJCVwNCisJCS5zaGlmdCA9IF9zaGlmdCwJCQlcDQorCQkub3BzID0gJm10a19jbGtfZ2F0ZV9vcHNfbm9fc2V0Y2xyX2ludiwJXA0KKwl9DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZ2F0ZSBzZ21paTBfY2xrc1tdIF9faW5pdGNvbnN0ID0gew0KKwlHQVRFX1NHTUlJMChDS19TR00wX1RYX0VOLCAic2dtMF90eF9lbiIsICJ1c2JfdHgyNTBtIiwgMiksDQorCUdBVEVfU0dNSUkwKENLX1NHTTBfUlhfRU4sICJzZ20wX3J4X2VuIiwgInVzYl9lcV9yeDI1MG0iLCAzKSwNCisJR0FURV9TR01JSTAoQ0tfU0dNMF9DSzBfRU4sICJzZ20wX2NrMF9lbiIsICJ1c2JfbG4wIiwgNCksDQorCUdBVEVfU0dNSUkwKENLX1NHTTBfQ0RSX0NLMF9FTiwgInNnbTBfY2RyX2NrMF9lbiIsICJ1c2JfY2RyIiwgNSksDQorfTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19nYXRlX3JlZ3Mgc2dtaWkxX2NnX3JlZ3MgPSB7DQorCS5zZXRfb2ZzID0gMHhFNCwNCisJLmNscl9vZnMgPSAweEU0LA0KKwkuc3RhX29mcyA9IDB4RTQsDQorfTsNCisNCisjZGVmaW5lIEdBVEVfU0dNSUkxKF9pZCwgX25hbWUsIF9wYXJlbnQsIF9zaGlmdCkgewlcDQorCQkuaWQgPSBfaWQsCQkJCVwNCisJCS5uYW1lID0gX25hbWUsCQkJCVwNCisJCS5wYXJlbnRfbmFtZSA9IF9wYXJlbnQsCQkJXA0KKwkJLnJlZ3MgPSAmc2dtaWkxX2NnX3JlZ3MsCQkJXA0KKwkJLnNoaWZ0ID0gX3NoaWZ0LAkJCVwNCisJCS5vcHMgPSAmbXRrX2Nsa19nYXRlX29wc19ub19zZXRjbHJfaW52LAlcDQorCX0NCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19nYXRlIHNnbWlpMV9jbGtzW10gX19pbml0Y29uc3QgPSB7DQorCUdBVEVfU0dNSUkxKENLX1NHTTFfVFhfRU4sICJzZ20xX3R4X2VuIiwgInVzYl90eDI1MG0iLCAyKSwNCisJR0FURV9TR01JSTEoQ0tfU0dNMV9SWF9FTiwgInNnbTFfcnhfZW4iLCAidXNiX2VxX3J4MjUwbSIsIDMpLA0KKwlHQVRFX1NHTUlJMShDS19TR00xX0NLMV9FTiwgInNnbTFfY2sxX2VuIiwgInVzYl9sbjAiLCA0KSwNCisJR0FURV9TR01JSTEoQ0tfU0dNMV9DRFJfQ0sxX0VOLCAic2dtMV9jZHJfY2sxX2VuIiwgInVzYl9jZHIiLCA1KSwNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2dhdGVfcmVncyBldGhfY2dfcmVncyA9IHsNCisJLnNldF9vZnMgPSAweDMwLA0KKwkuY2xyX29mcyA9IDB4MzAsDQorCS5zdGFfb2ZzID0gMHgzMCwNCit9Ow0KKw0KKyNkZWZpbmUgR0FURV9FVEgoX2lkLCBfbmFtZSwgX3BhcmVudCwgX3NoaWZ0KSB7CVwNCisJCS5pZCA9IF9pZCwJCQkJXA0KKwkJLm5hbWUgPSBfbmFtZSwJCQkJXA0KKwkJLnBhcmVudF9uYW1lID0gX3BhcmVudCwJCQlcDQorCQkucmVncyA9ICZldGhfY2dfcmVncywJCQlcDQorCQkuc2hpZnQgPSBfc2hpZnQsCQkJXA0KKwkJLm9wcyA9ICZtdGtfY2xrX2dhdGVfb3BzX25vX3NldGNscl9pbnYsCVwNCisJfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2dhdGUgZXRoX2Nsa3NbXSBfX2luaXRjb25zdCA9IHsNCisJR0FURV9FVEgoQ0tfRVRIX0ZFX0VOLCAiZXRoX2ZlX2VuIiwgIm5ldHN5c18yeCIsIDYpLA0KKwlHQVRFX0VUSChDS19FVEhfR1AyX0VOLCAiZXRoX2dwMl9lbiIsICJzZ21fMzI1bSIsIDcpLA0KKwlHQVRFX0VUSChDS19FVEhfR1AxX0VOLCAiZXRoX2dwMV9lbiIsICJzZ21fMzI1bSIsIDgpLA0KKwlHQVRFX0VUSChDS19FVEhfV09DUFUwX0VOLCAiZXRoX3dvY3B1MF9lbiIsICJuZXRzeXNfd2VkX21jdSIsIDE1KSwNCit9Ow0KKw0KKyNkZWZpbmUgTVQ3OTgxX1BMTF9GTUFYCQkoMjUwMFVMICogTUhaKQ0KKw0KKyNkZWZpbmUgQ09OMF9NVDc5ODFfUlNUX0JBUglCSVQoMjcpDQorDQorI2RlZmluZSBQTExfQihfaWQsIF9uYW1lLCBfcmVnLCBfcHdyX3JlZywgX2VuX21hc2ssIF9mbGFncywgX3Bjd2JpdHMsCVwNCisJCQlfcGRfcmVnLCBfcGRfc2hpZnQsIF90dW5lcl9yZWcsIF9wY3dfcmVnLAlcDQorCQkJX3Bjd19zaGlmdCwgX2Rpdl90YWJsZSwgX3BhcmVudF9uYW1lKSB7CQlcDQorCQkuaWQgPSBfaWQsCQkJCQkJXA0KKwkJLm5hbWUgPSBfbmFtZSwJCQkJCQlcDQorCQkucmVnID0gX3JlZywJCQkJCQlcDQorCQkucHdyX3JlZyA9IF9wd3JfcmVnLAkJCQkJXA0KKwkJLmVuX21hc2sgPSBfZW5fbWFzaywJCQkJCVwNCisJCS5mbGFncyA9IF9mbGFncywJCQkJCVwNCisJCS5yc3RfYmFyX21hc2sgPSBDT04wX01UNzk4MV9SU1RfQkFSLAkJCVwNCisJCS5mbWF4ID0gTVQ3OTgxX1BMTF9GTUFYLAkJCQlcDQorCQkucGN3Yml0cyA9IF9wY3diaXRzLAkJCQkJXA0KKwkJLnBkX3JlZyA9IF9wZF9yZWcsCQkJCQlcDQorCQkucGRfc2hpZnQgPSBfcGRfc2hpZnQsCQkJCQlcDQorCQkudHVuZXJfcmVnID0gX3R1bmVyX3JlZywJCQkJXA0KKwkJLnBjd19yZWcgPSBfcGN3X3JlZywJCQkJCVwNCisJCS5wY3dfc2hpZnQgPSBfcGN3X3NoaWZ0LAkJCQlcDQorCQkuZGl2X3RhYmxlID0gX2Rpdl90YWJsZSwJCQkJXA0KKwkJLnBhcmVudF9uYW1lID0gX3BhcmVudF9uYW1lLAkJCQlcDQorCX0NCisNCisjZGVmaW5lIFBMTChfaWQsIF9uYW1lLCBfcmVnLCBfcHdyX3JlZywgX2VuX21hc2ssIF9mbGFncywgX3Bjd2JpdHMsCVwNCisJCQlfcGRfcmVnLCBfcGRfc2hpZnQsIF90dW5lcl9yZWcsIF9wY3dfcmVnLAlcDQorCQkJX3Bjd19zaGlmdCwgX3BhcmVudF9uYW1lKQkJCQlcDQorCQlQTExfQihfaWQsIF9uYW1lLCBfcmVnLCBfcHdyX3JlZywgX2VuX21hc2ssIF9mbGFncywgX3Bjd2JpdHMsIFwNCisJCQlfcGRfcmVnLCBfcGRfc2hpZnQsIF90dW5lcl9yZWcsIF9wY3dfcmVnLCBfcGN3X3NoaWZ0LCBcDQorCQkJTlVMTCwgX3BhcmVudF9uYW1lKQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX3BsbF9kYXRhIHBsbHNbXSA9IHsNCisJUExMKENLX0FQTUlYRURfQVJNUExMLCAiYXJtcGxsIiwgMHgwMjAwLCAweDAyMEMsIDB4MDAwMDAwMDEsDQorCSAgICAwLCAzMiwgMHgwMjAwLCA0LCAwLCAweDAyMDQsIDAsICJjbGt4dGFsIiksDQorCVBMTChDS19BUE1JWEVEX05FVDJQTEwsICJuZXQycGxsIiwgMHgwMjEwLCAweDAyMUMsIDB4MDAwMDAwMDEsDQorCSAgICAwLCAzMiwgMHgwMjEwLCA0LCAwLCAweDAyMTQsIDAsICJjbGt4dGFsIiksDQorCVBMTChDS19BUE1JWEVEX01NUExMLCAibW1wbGwiLCAweDAyMjAsIDB4MDIyQywgMHgwMDAwMDAwMSwNCisJICAgIDAsIDMyLCAweDAyMjAsIDQsIDAsIDB4MDIyNCwgMCwgImNsa3h0YWwiKSwNCisJUExMKENLX0FQTUlYRURfU0dNUExMLCAic2dtcGxsIiwgMHgwMjMwLCAweDAyM0MsIDB4MDAwMDAwMDEsDQorCSAgICAwLCAzMiwgMHgwMjMwLCA0LCAwLCAweDAyMzQsIDAsICJjbGt4dGFsIiksDQorCVBMTChDS19BUE1JWEVEX1dFRE1DVVBMTCwgIndlZG1jdXBsbCIsIDB4MDI0MCwgMHgwMjRDLCAweDAwMDAwMDAxLA0KKwkgICAgMCwgMzIsIDB4MDI0MCwgNCwgMCwgMHgwMjQ0LCAwLCAiY2xreHRhbCIpLA0KKwlQTEwoQ0tfQVBNSVhFRF9ORVQxUExMLCAibmV0MXBsbCIsIDB4MDI1MCwgMHgwMjVDLCAweDAwMDAwMDAxLA0KKwkgICAgMCwgMzIsIDB4MDI1MCwgNCwgMCwgMHgwMjU0LCAwLCAiY2xreHRhbCIpLA0KKwlQTEwoQ0tfQVBNSVhFRF9NUExMLCAibXBsbCIsIDB4MDI2MCwgMHgwMjcwLCAweDAwMDAwMDAxLA0KKwkgICAgMCwgMzIsIDB4MDI2MCwgNCwgMCwgMHgwMjY0LCAwLCAiY2xreHRhbCIpLA0KKwlQTEwoQ0tfQVBNSVhFRF9BUExMMiwgImFwbGwyIiwgMHgwMjc4LCAweDAyODgsIDB4MDAwMDAwMDEsDQorCSAgICAwLCAzMiwgMHgwMjc4LCA0LCAwLCAweDAyN0MsIDAsICJjbGt4dGFsIiksDQorfTsNCisNCitzdGF0aWMgc3RydWN0IGNsa19vbmVjZWxsX2RhdGEgKm10Nzk4MV90b3BfY2xrX2RhdGEgX19pbml0ZGF0YTsNCitzdGF0aWMgc3RydWN0IGNsa19vbmVjZWxsX2RhdGEgKm10Nzk4MV9wbGxfY2xrX2RhdGEgX19pbml0ZGF0YTsNCisNCitzdGF0aWMgdm9pZCBfX2luaXQgbXRrX2Nsa19lbmFibGVfY3JpdGljYWwodm9pZCkNCit7DQorCWlmICghbXQ3OTgxX3RvcF9jbGtfZGF0YSB8fCAhbXQ3OTgxX3BsbF9jbGtfZGF0YSkNCisJCXJldHVybjsNCisNCisJY2xrX3ByZXBhcmVfZW5hYmxlKG10Nzk4MV9wbGxfY2xrX2RhdGEtPmNsa3NbQ0tfQVBNSVhFRF9BUk1QTExdKTsNCisJY2xrX3ByZXBhcmVfZW5hYmxlKG10Nzk4MV90b3BfY2xrX2RhdGEtPmNsa3NbQ0tfVE9QX1NZU0FYSV9TRUxdKTsNCisJY2xrX3ByZXBhcmVfZW5hYmxlKG10Nzk4MV90b3BfY2xrX2RhdGEtPmNsa3NbQ0tfVE9QX1NZU0FQQl9TRUxdKTsNCisJY2xrX3ByZXBhcmVfZW5hYmxlKG10Nzk4MV90b3BfY2xrX2RhdGEtPmNsa3NbQ0tfVE9QX0RSQU1DX1NFTF0pOw0KKwljbGtfcHJlcGFyZV9lbmFibGUobXQ3OTgxX3RvcF9jbGtfZGF0YS0+Y2xrc1tDS19UT1BfRFJBTUNfTUQzMl9TRUxdKTsNCisJY2xrX3ByZXBhcmVfZW5hYmxlKG10Nzk4MV90b3BfY2xrX2RhdGEtPmNsa3NbQ0tfVE9QX0YyNk1fU0VMXSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIF9faW5pdCBtdGtfaW5mcmFjZmdfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpDQorew0KKwlpbnQgcjsNCisNCisNCisJbXQ3OTgxX3RvcF9jbGtfZGF0YSA9IG10a19hbGxvY19jbGtfZGF0YShDTEtfSU5GUkFfTlJfQ0xLKTsNCisNCisJbXRrX2Nsa19yZWdpc3Rlcl9mYWN0b3JzKGluZnJhX2RpdnMsIEFSUkFZX1NJWkUoaW5mcmFfZGl2cyksIG10Nzk4MV90b3BfY2xrX2RhdGEpOw0KKw0KKwlyID0gb2ZfY2xrX2FkZF9wcm92aWRlcihub2RlLCBvZl9jbGtfc3JjX29uZWNlbGxfZ2V0LCBtdDc5ODFfdG9wX2Nsa19kYXRhKTsNCisNCisJaWYgKHIpDQorCQlwcl9lcnIoIiVzKCk6IGNvdWxkIG5vdCByZWdpc3RlciBjbG9jayBwcm92aWRlcjogJWRcbiIsDQorCQkJX19mdW5jX18sIHIpOw0KKw0KKwltdGtfY2xrX2VuYWJsZV9jcml0aWNhbCgpOw0KK30NCitDTEtfT0ZfREVDTEFSRShtdGtfaW5mcmFjZmcsICJtZWRpYXRlayxtdDc5ODEtaW5mcmFjZmciLCBtdGtfaW5mcmFjZmdfaW5pdCk7DQorDQorc3RhdGljIHZvaWQgX19pbml0IG10a190b3Bja2dlbl9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkNCit7DQorCWludCByOw0KKwl2b2lkIF9faW9tZW0gKmJhc2U7DQorDQorCWJhc2UgPSBvZl9pb21hcChub2RlLCAwKTsNCisJaWYgKCFiYXNlKSB7DQorCQlwcl9lcnIoIiVzKCk6IGlvcmVtYXAgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7DQorCQlyZXR1cm47DQorCX0NCisNCisJbXQ3OTgxX3RvcF9jbGtfZGF0YSA9IG10a19hbGxvY19jbGtfZGF0YShDTEtfVE9QX05SX0NMSyk7DQorDQorCW10a19jbGtfcmVnaXN0ZXJfZmFjdG9ycyh0b3BfZGl2cywgQVJSQVlfU0laRSh0b3BfZGl2cyksIG10Nzk4MV90b3BfY2xrX2RhdGEpOw0KKwltdGtfY2xrX3JlZ2lzdGVyX211eGVzKHRvcF9tdXhlcywgQVJSQVlfU0laRSh0b3BfbXV4ZXMpLCBub2RlLCAmbXQ3OTgxX2Nsa19sb2NrLCBtdDc5ODFfdG9wX2Nsa19kYXRhKTsNCisJbXRrX2Nsa19yZWdpc3Rlcl9jb21wb3NpdGVzKHRvcF9hdWRfZGl2cywgQVJSQVlfU0laRSh0b3BfYXVkX2RpdnMpLA0KKwkJYmFzZSwgJm10Nzk4MV9jbGtfbG9jaywgbXQ3OTgxX3RvcF9jbGtfZGF0YSk7DQorDQorCXIgPSBvZl9jbGtfYWRkX3Byb3ZpZGVyKG5vZGUsIG9mX2Nsa19zcmNfb25lY2VsbF9nZXQsIG10Nzk4MV90b3BfY2xrX2RhdGEpOw0KKw0KKwlpZiAocikNCisJCXByX2VycigiJXMoKTogY291bGQgbm90IHJlZ2lzdGVyIGNsb2NrIHByb3ZpZGVyOiAlZFxuIiwNCisJCQlfX2Z1bmNfXywgcik7DQorDQorCW10a19jbGtfZW5hYmxlX2NyaXRpY2FsKCk7DQorfQ0KK0NMS19PRl9ERUNMQVJFKG10a190b3Bja2dlbiwgIm1lZGlhdGVrLG10Nzk4MS10b3Bja2dlbiIsIG10a190b3Bja2dlbl9pbml0KTsNCisNCitzdGF0aWMgdm9pZCBfX2luaXQgbXRrX2luZnJhY2ZnX2FvX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQ0KK3sNCisJc3RydWN0IGNsa19vbmVjZWxsX2RhdGEgKmNsa19kYXRhOw0KKwlpbnQgcjsNCisJdm9pZCBfX2lvbWVtICpiYXNlOw0KKw0KKwliYXNlID0gb2ZfaW9tYXAobm9kZSwgMCk7DQorCWlmICghYmFzZSkgew0KKwkJcHJfZXJyKCIlcygpOiBpb3JlbWFwIGZhaWxlZFxuIiwgX19mdW5jX18pOw0KKwkJcmV0dXJuOw0KKwl9DQorDQorCWNsa19kYXRhID0gbXRrX2FsbG9jX2Nsa19kYXRhKENMS19JTkZSQV9BT19OUl9DTEspOw0KKw0KKwltdGtfY2xrX3JlZ2lzdGVyX211eGVzKGluZnJhX211eGVzLCBBUlJBWV9TSVpFKGluZnJhX211eGVzKSwgbm9kZSwgJm10Nzk4MV9jbGtfbG9jaywgY2xrX2RhdGEpOw0KKwltdGtfY2xrX3JlZ2lzdGVyX2dhdGVzKG5vZGUsIGluZnJhX2Nsa3MsIEFSUkFZX1NJWkUoaW5mcmFfY2xrcyksIGNsa19kYXRhKTsNCisNCisJciA9IG9mX2Nsa19hZGRfcHJvdmlkZXIobm9kZSwgb2ZfY2xrX3NyY19vbmVjZWxsX2dldCwgY2xrX2RhdGEpOw0KKw0KKwlpZiAocikNCisJCXByX2VycigiJXMoKTogY291bGQgbm90IHJlZ2lzdGVyIGNsb2NrIHByb3ZpZGVyOiAlZFxuIiwNCisJCQlfX2Z1bmNfXywgcik7DQorfQ0KK0NMS19PRl9ERUNMQVJFKG10a19pbmZyYWNmZ19hbywgIm1lZGlhdGVrLG10Nzk4MS1pbmZyYWNmZ19hbyIsIG10a19pbmZyYWNmZ19hb19pbml0KTsNCisNCitzdGF0aWMgdm9pZCBfX2luaXQgbXRrX2FwbWl4ZWRzeXNfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpDQorew0KKwlpbnQgcjsNCisNCisJbXQ3OTgxX3BsbF9jbGtfZGF0YSA9IG10a19hbGxvY19jbGtfZGF0YShDTEtfQVBNSVhFRF9OUl9DTEspOw0KKw0KKwltdGtfY2xrX3JlZ2lzdGVyX3BsbHMobm9kZSwgcGxscywgQVJSQVlfU0laRShwbGxzKSwgbXQ3OTgxX3BsbF9jbGtfZGF0YSk7DQorDQorCXIgPSBvZl9jbGtfYWRkX3Byb3ZpZGVyKG5vZGUsIG9mX2Nsa19zcmNfb25lY2VsbF9nZXQsIG10Nzk4MV9wbGxfY2xrX2RhdGEpOw0KKw0KKwlpZiAocikNCisJCXByX2VycigiJXMoKTogY291bGQgbm90IHJlZ2lzdGVyIGNsb2NrIHByb3ZpZGVyOiAlZFxuIiwNCisJCQlfX2Z1bmNfXywgcik7DQorDQorCW10a19jbGtfZW5hYmxlX2NyaXRpY2FsKCk7DQorfQ0KK0NMS19PRl9ERUNMQVJFKG10a19hcG1peGVkc3lzLCAibWVkaWF0ZWssbXQ3OTgxLWFwbWl4ZWRzeXMiLCBtdGtfYXBtaXhlZHN5c19pbml0KTsNCisNCitzdGF0aWMgdm9pZCBfX2luaXQgbXRrX3NnbWlpc3lzXzBfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpDQorew0KKwlzdHJ1Y3QgY2xrX29uZWNlbGxfZGF0YSAqY2xrX2RhdGE7DQorCWludCByOw0KKw0KKwljbGtfZGF0YSA9IG10a19hbGxvY19jbGtfZGF0YShDTEtfU0dNSUkwX05SX0NMSyk7DQorDQorCW10a19jbGtfcmVnaXN0ZXJfZ2F0ZXMobm9kZSwgc2dtaWkwX2Nsa3MsIEFSUkFZX1NJWkUoc2dtaWkwX2Nsa3MpLCBjbGtfZGF0YSk7DQorDQorCXIgPSBvZl9jbGtfYWRkX3Byb3ZpZGVyKG5vZGUsIG9mX2Nsa19zcmNfb25lY2VsbF9nZXQsIGNsa19kYXRhKTsNCisNCisJaWYgKHIpDQorCQlwcl9lcnIoIiVzKCk6IGNvdWxkIG5vdCByZWdpc3RlciBjbG9jayBwcm92aWRlcjogJWRcbiIsDQorCQkJX19mdW5jX18sIHIpOw0KK30NCitDTEtfT0ZfREVDTEFSRShtdGtfc2dtaWlzeXNfMCwgIm1lZGlhdGVrLG10Nzk4MS1zZ21paXN5c18wIiwgbXRrX3NnbWlpc3lzXzBfaW5pdCk7DQorDQorc3RhdGljIHZvaWQgX19pbml0IG10a19zZ21paXN5c18xX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQ0KK3sNCisJc3RydWN0IGNsa19vbmVjZWxsX2RhdGEgKmNsa19kYXRhOw0KKwlpbnQgcjsNCisNCisJY2xrX2RhdGEgPSBtdGtfYWxsb2NfY2xrX2RhdGEoQ0xLX1NHTUlJMV9OUl9DTEspOw0KKw0KKwltdGtfY2xrX3JlZ2lzdGVyX2dhdGVzKG5vZGUsIHNnbWlpMV9jbGtzLCBBUlJBWV9TSVpFKHNnbWlpMV9jbGtzKSwgY2xrX2RhdGEpOw0KKw0KKwlyID0gb2ZfY2xrX2FkZF9wcm92aWRlcihub2RlLCBvZl9jbGtfc3JjX29uZWNlbGxfZ2V0LCBjbGtfZGF0YSk7DQorDQorCWlmIChyKQ0KKwkJcHJfZXJyKCIlcygpOiBjb3VsZCBub3QgcmVnaXN0ZXIgY2xvY2sgcHJvdmlkZXI6ICVkXG4iLA0KKwkJCV9fZnVuY19fLCByKTsNCit9DQorQ0xLX09GX0RFQ0xBUkUobXRrX3NnbWlpc3lzXzEsICJtZWRpYXRlayxtdDc5ODEtc2dtaWlzeXNfMSIsIG10a19zZ21paXN5c18xX2luaXQpOw0KKw0KK3N0YXRpYyB2b2lkIF9faW5pdCBtdGtfZXRoc3lzX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQ0KK3sNCisJc3RydWN0IGNsa19vbmVjZWxsX2RhdGEgKmNsa19kYXRhOw0KKwlpbnQgcjsNCisNCisJY2xrX2RhdGEgPSBtdGtfYWxsb2NfY2xrX2RhdGEoQ0xLX0VUSF9OUl9DTEspOw0KKw0KKwltdGtfY2xrX3JlZ2lzdGVyX2dhdGVzKG5vZGUsIGV0aF9jbGtzLCBBUlJBWV9TSVpFKGV0aF9jbGtzKSwgY2xrX2RhdGEpOw0KKw0KKwlyID0gb2ZfY2xrX2FkZF9wcm92aWRlcihub2RlLCBvZl9jbGtfc3JjX29uZWNlbGxfZ2V0LCBjbGtfZGF0YSk7DQorDQorCWlmIChyKQ0KKwkJcHJfZXJyKCIlcygpOiBjb3VsZCBub3QgcmVnaXN0ZXIgY2xvY2sgcHJvdmlkZXI6ICVkXG4iLA0KKwkJCV9fZnVuY19fLCByKTsNCit9DQorQ0xLX09GX0RFQ0xBUkUobXRrX2V0aHN5cywgIm1lZGlhdGVrLG10Nzk4MS1ldGhzeXMiLCBtdGtfZXRoc3lzX2luaXQpOw0KKw0KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9jbGsvbWVkaWF0ZWsvY2xrLW10Nzk4Ni5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL2Nsay9tZWRpYXRlay9jbGstbXQ3OTg2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIzODQxNAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9jbGsvbWVkaWF0ZWsvY2xrLW10Nzk4Ni5jCkBAIC0wLDAgKzEsODE0IEBACisvKg0KKyAqIENvcHlyaWdodCAoYykgMjAyMSBNZWRpYVRlayBJbmMuDQorICogQXV0aG9yOiBXZW56aGVuIFl1PFllbnpoZW4uWXVAbWVkaWF0ZWsuY29tPg0KKyAqDQorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcw0KKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLg0KKyAqDQorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisgKi8NCisNCisjaW5jbHVkZSA8bGludXgvY2xrLmg+DQorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQorI2luY2x1ZGUgPGxpbnV4L29mLmg+DQorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4NCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPg0KKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+DQorDQorI2luY2x1ZGUgImNsay1tdGsuaCINCisjaW5jbHVkZSAiY2xrLWdhdGUuaCINCisjaW5jbHVkZSAiY2xrLW11eC5oIg0KKw0KKw0KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9jbG9jay9tdDc5ODYtY2xrLmg+DQorDQorc3RhdGljIERFRklORV9TUElOTE9DSyhtdDc5ODZfY2xrX2xvY2spOw0KKw0KKw0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2ZpeGVkX2ZhY3RvciBpbmZyYV9kaXZzW10gX19pbml0Y29uc3QgPSB7DQorCUZBQ1RPUihDS19JTkZSQV9DS19GMjZNLCAiaW5mcmFfY2tfZjI2bSIsICJjc3dfZjI2bV9zZWwiLCAxLCAxKSwNCisJRkFDVE9SKENLX0lORlJBX1VBUlQsICJpbmZyYV91YXJ0IiwgInVhcnRfc2VsIiwgMSwgMSksDQorCUZBQ1RPUihDS19JTkZSQV9JU1BJMCwgImluZnJhX2lzcGkwIiwgInNwaV9zZWwiLCAxLCAxKSwNCisJRkFDVE9SKENLX0lORlJBX0kyQywgImluZnJhX2kyYyIsICJpMmNfc2VsIiwgMSwgMSksDQorCUZBQ1RPUihDS19JTkZSQV9JU1BJMSwgImluZnJhX2lzcGkxIiwgInNwaW1fbXN0X3NlbCIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfSU5GUkFfUFdNLCAiaW5mcmFfcHdtIiwgInB3bV9zZWwiLCAxLCAxKSwNCisJRkFDVE9SKENLX0lORlJBXzY2TV9NQ0ssICJpbmZyYV82Nm1fbWNrIiwgInN5c2F4aV9zZWwiLCAxLCAyKSwNCisJRkFDVE9SKENLX0lORlJBX0NLX0YzMkssICJpbmZyYV9ja19mMzJrIiwgImNiX3J0Y18zMnA3ayIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfSU5GUkFfUENJRV9DSywgImluZnJhX3BjaWUiLCAicGV4dHBfdGxfY2tfc2VsIiwgMSwgMSksDQorCUZBQ1RPUihDS19JTkZSQV9QV01fQkNLLCAiaW5mcmFfcHdtX2JjayIsICJpbmZyYV9wd21fYnNlbCIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfSU5GUkFfUFdNX0NLMSwgImluZnJhX3B3bV9jazEiLCAiaW5mcmFfcHdtMV9zZWwiLCAxLCAxKSwNCisJRkFDVE9SKENLX0lORlJBX1BXTV9DSzIsICJpbmZyYV9wd21fY2syIiwgImluZnJhX3B3bTJfc2VsIiwgMSwgMSksDQorCUZBQ1RPUihDS19JTkZSQV8xMzNNX0hDSywgImluZnJhXzEzM21faGNrIiwgInN5c2F4aSIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfSU5GUkFfRUlQX0NLLCAiaW5mcmFfZWlwIiwgImVpcF9iIiwgMSwgMSksDQorCUZBQ1RPUihDS19JTkZSQV82Nk1fUEhDSywgImluZnJhXzY2bV9waGNrIiwgImluZnJhXzEzM21faGNrIiwgMSwgMiksDQorCUZBQ1RPUihDS19JTkZSQV9GQVVEX0xfQ0ssICJpbmZyYV9mYXVkX2wiLCAiYXVkX2wiLCAxLCAxKSwNCisJRkFDVE9SKENLX0lORlJBX0ZBVURfQVVEX0NLLCAiaW5mcmFfZmF1ZF9hdWQiLCAiYTFzeXMiLCAxLCAxKSwNCisJRkFDVE9SKENLX0lORlJBX0ZBVURfRUcyX0NLLCAiaW5mcmFfZmF1ZF9lZzIiLCAiYV90dW5lciIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfSU5GUkFfSTJDU19DSywgImluZnJhX2kyY3MiLCAiaTJjX2JjayIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfSU5GUkFfTVVYX1VBUlQwLCAiaW5mcmFfbXV4X3VhcnQwIiwgImluZnJhX3VhcnQwX3NlbCIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfSU5GUkFfTVVYX1VBUlQxLCAiaW5mcmFfbXV4X3VhcnQxIiwgImluZnJhX3VhcnQxX3NlbCIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfSU5GUkFfTVVYX1VBUlQyLCAiaW5mcmFfbXV4X3VhcnQyIiwgImluZnJhX3VhcnQyX3NlbCIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfSU5GUkFfTkZJX0NLLCAiaW5mcmFfbmZpIiwgIm5maTF4IiwgMSwgMSksDQorCUZBQ1RPUihDS19JTkZSQV9TUElORklfQ0ssICJpbmZyYV9zcGluZmkiLCAic3BpbmZpX2JjayIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfSU5GUkFfTVVYX1NQSTAsICJpbmZyYV9tdXhfc3BpMCIsICJpbmZyYV9zcGkwX3NlbCIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfSU5GUkFfTVVYX1NQSTEsICJpbmZyYV9tdXhfc3BpMSIsICJpbmZyYV9zcGkxX3NlbCIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfSU5GUkFfUlRDXzMySywgImluZnJhX3J0Y18zMmsiLCAiY2JfcnRjXzMyayIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfSU5GUkFfRk1TRENfQ0ssICJpbmZyYV9mbXNkYyIsICJlbW1jXzQxNm0iLCAxLCAxKSwNCisJRkFDVE9SKENLX0lORlJBX0ZNU0RDX0hDS19DSywgImluZnJhX2Ztc2RjX2hjayIsICJlbW1jXzI1MG0iLCAxLCAxKSwNCisJRkFDVE9SKENLX0lORlJBX1BFUklfMTMzTSwgImluZnJhX3BlcmlfMTMzbSIsICJzeXNheGkiLCAxLCAxKSwNCisJRkFDVE9SKENLX0lORlJBXzEzM01fUEhDSywgImluZnJhXzEzM21fcGhjayIsICJzeXNheGkiLCAxLCAxKSwNCisJRkFDVE9SKENLX0lORlJBX1VTQl9TWVNfQ0ssICJpbmZyYV91c2Jfc3lzIiwgInUydTNfc3lzIiwgMSwgMSksDQorCUZBQ1RPUihDS19JTkZSQV9VU0JfQ0ssICJpbmZyYV91c2IiLCAidTJ1M19yZWYiLCAxLCAxKSwNCisJRkFDVE9SKENLX0lORlJBX1VTQl9YSENJX0NLLCAiaW5mcmFfdXNiX3hoY2kiLCAidTJ1M194aGNpIiwgMSwgMSksDQorCUZBQ1RPUihDS19JTkZSQV9QQ0lFX0dGTVVYX1RMX09fUFJFLCAiaW5mcmFfcGNpZV9tdXgiLCAicGV4dHBfdGwiLCAxLCAxKSwNCisJRkFDVE9SKENLX0lORlJBX0YyNk1fQ0swLCAiaW5mcmFfZjI2bV9jazAiLCAiY3N3X2YyNm0iLCAxLCAxKSwNCisJRkFDVE9SKENLX0lORlJBX0hEXzEzM00sICJpbmZyYV9oZF8xMzNtIiwgInN5c2F4aSIsIDEsIDEpLA0KK307DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZml4ZWRfZmFjdG9yIHRvcF9kaXZzW10gX19pbml0Y29uc3QgPSB7DQorCUZBQ1RPUihDS19UT1BfQ0JfQ0tTUV80ME0sICJjYl9ja3NxXzQwbSIsICJjbGt4dGFsIiwgMSwgMSksDQorCUZBQ1RPUihDS19UT1BfQ0JfTV80MTZNLCAiY2JfbV80MTZtIiwgIm1wbGwiLCAxLCAxKSwNCisJRkFDVE9SKENLX1RPUF9DQl9NX0QyLCAiY2JfbV9kMiIsICJtcGxsIiwgMSwgMiksDQorCUZBQ1RPUihDS19UT1BfQ0JfTV9ENCwgImNiX21fZDQiLCAibXBsbCIsIDEsIDQpLA0KKwlGQUNUT1IoQ0tfVE9QX0NCX01fRDgsICJjYl9tX2Q4IiwgIm1wbGwiLCAxLCA4KSwNCisJRkFDVE9SKENLX1RPUF9NX0Q4X0QyLCAibV9kOF9kMiIsICJtcGxsIiwgMSwgMTYpLA0KKwlGQUNUT1IoQ0tfVE9QX01fRDNfRDIsICJtX2QzX2QyIiwgIm1wbGwiLCAxLCA2KSwNCisJRkFDVE9SKENLX1RPUF9DQl9NTV9EMiwgImNiX21tX2QyIiwgIm1tcGxsIiwgMSwgMiksDQorCUZBQ1RPUihDS19UT1BfQ0JfTU1fRDQsICJjYl9tbV9kNCIsICJtbXBsbCIsIDEsIDQpLA0KKwlGQUNUT1IoQ0tfVE9QX0NCX01NX0Q4LCAiY2JfbW1fZDgiLCAibW1wbGwiLCAxLCA4KSwNCisJRkFDVE9SKENLX1RPUF9NTV9EOF9EMiwgIm1tX2Q4X2QyIiwgIm1tcGxsIiwgMSwgMTYpLA0KKwlGQUNUT1IoQ0tfVE9QX01NX0QzX0Q4LCAibW1fZDNfZDgiLCAibW1wbGwiLCAxLCAyNCksDQorCUZBQ1RPUihDS19UT1BfQ0JfVTJfUEhZRF9DSywgImNiX3UyX3BoeWQiLCAibW1wbGwiLCAxLCAzMCksDQorCUZBQ1RPUihDS19UT1BfQ0JfQVBMTDJfMTk2TSwgImNiX2FwbGwyXzE5Nm0iLCAiYXBsbDIiLCAxLCAxKSwNCisJRkFDVE9SKENLX1RPUF9BUExMMl9ENCwgImFwbGwyX2Q0IiwgImFwbGwyIiwgMSwgNCksDQorCUZBQ1RPUihDS19UT1BfQ0JfTkVUMV9ENCwgImNiX25ldDFfZDQiLCAibmV0MXBsbCIsIDEsIDQpLA0KKwlGQUNUT1IoQ0tfVE9QX0NCX05FVDFfRDUsICJjYl9uZXQxX2Q1IiwgIm5ldDFwbGwiLCAxLCA1KSwNCisJRkFDVE9SKENLX1RPUF9ORVQxX0Q1X0QyLCAibmV0MV9kNV9kMiIsICJuZXQxcGxsIiwgMSwgMTApLA0KKwlGQUNUT1IoQ0tfVE9QX05FVDFfRDVfRDQsICJuZXQxX2Q1X2Q0IiwgIm5ldDFwbGwiLCAxLCAyMCksDQorCUZBQ1RPUihDS19UT1BfTkVUMV9EOF9EMiwgIm5ldDFfZDhfZDIiLCAibmV0MXBsbCIsIDEsIDE2KSwNCisJRkFDVE9SKENLX1RPUF9ORVQxX0Q4X0Q0LCAibmV0MV9kOF9kNCIsICJuZXQxcGxsIiwgMSwgMzIpLA0KKwlGQUNUT1IoQ0tfVE9QX0NCX05FVDJfODAwTSwgImNiX25ldDJfODAwbSIsICJuZXQycGxsIiwgMSwgMSksDQorCUZBQ1RPUihDS19UT1BfQ0JfTkVUMl9ENCwgImNiX25ldDJfZDQiLCAibmV0MnBsbCIsIDEsIDQpLA0KKwlGQUNUT1IoQ0tfVE9QX05FVDJfRDRfRDIsICJuZXQyX2Q0X2QyIiwgIm5ldDJwbGwiLCAxLCA4KSwNCisJRkFDVE9SKENLX1RPUF9ORVQyX0QzX0QyLCAibmV0Ml9kM19kMiIsICJuZXQycGxsIiwgMSwgNiksDQorCUZBQ1RPUihDS19UT1BfQ0JfV0VETUNVXzc2ME0sICJjYl93ZWRtY3VfNzYwbSIsICJ3ZWRtY3VwbGwiLCAxLCAxKSwNCisJRkFDVE9SKENLX1RPUF9XRURNQ1VfRDVfRDIsICJ3ZWRtY3VfZDVfZDIiLCAid2VkbWN1cGxsIiwgMSwgMTApLA0KKwlGQUNUT1IoQ0tfVE9QX0NCX1NHTV8zMjVNLCAiY2Jfc2dtXzMyNW0iLCAic2dtcGxsIiwgMSwgMSksDQorCUZBQ1RPUihDS19UT1BfQ0JfQ0tTUV80ME1fRDIsICJjYl9ja3NxXzQwbV9kMiIsICJjYl9ja3NxXzQwbSIsIDEsIDIpLA0KKwlGQUNUT1IoQ0tfVE9QX0NCX1JUQ18zMkssICJjYl9ydGNfMzJrIiwgImNiX2Nrc3FfNDBtIiwgMSwgMTI1MCksDQorCUZBQ1RPUihDS19UT1BfQ0JfUlRDXzMyUDdLLCAiY2JfcnRjXzMycDdrIiwgImNiX2Nrc3FfNDBtIiwgMSwgMTIyMCksDQorCUZBQ1RPUihDS19UT1BfTkZJMVgsICJuZmkxeCIsICJuZmkxeF9zZWwiLCAxLCAxKSwNCisJRkFDVE9SKENLX1RPUF9VU0JfRVFfUlgyNTBNLCAidXNiX2VxX3J4MjUwbSIsICJjYl9ja3NxXzQwbSIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfVE9QX1VTQl9UWDI1ME0sICJ1c2JfdHgyNTBtIiwgImNiX2Nrc3FfNDBtIiwgMSwgMSksDQorCUZBQ1RPUihDS19UT1BfVVNCX0xOMF9DSywgInVzYl9sbjAiLCAiY2JfY2tzcV80MG0iLCAxLCAxKSwNCisJRkFDVE9SKENLX1RPUF9VU0JfQ0RSX0NLLCAidXNiX2NkciIsICJjYl9ja3NxXzQwbSIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfVE9QX1NQSU5GSV9CQ0ssICJzcGluZmlfYmNrIiwgInNwaW5maV9zZWwiLCAxLCAxKSwNCisJRkFDVE9SKENLX1RPUF9JMkNfQkNLLCAiaTJjX2JjayIsICJpMmNfc2VsIiwgMSwgMSksDQorCUZBQ1RPUihDS19UT1BfUEVYVFBfVEwsICJwZXh0cF90bCIsICJwZXh0cF90bF9ja19zZWwiLCAxLCAxKSwNCisJRkFDVE9SKENLX1RPUF9FTU1DXzI1ME0sICJlbW1jXzI1MG0iLCAiZW1tY18yNTBtX3NlbCIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfVE9QX0VNTUNfNDE2TSwgImVtbWNfNDE2bSIsICJlbW1jXzQxNm1fc2VsIiwgMSwgMSksDQorCUZBQ1RPUihDS19UT1BfRl8yNk1fQURDX0NLLCAiZl8yNm1fYWRjIiwgImZfMjZtX2FkY19zZWwiLCAxLCAxKSwNCisJRkFDVE9SKENLX1RPUF9TWVNBWEksICJzeXNheGkiLCAic3lzYXhpX3NlbCIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfVE9QX05FVFNZU19XRURfTUNVLCAibmV0c3lzX3dlZF9tY3UiLCAibmV0c3lzX21jdV9zZWwiLCAxLCAxKSwNCisJRkFDVE9SKENLX1RPUF9ORVRTWVNfMlgsICJuZXRzeXNfMngiLCAibmV0c3lzXzJ4X3NlbCIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfVE9QX1NHTV8zMjVNLCAic2dtXzMyNW0iLCAic2dtXzMyNW1fc2VsIiwgMSwgMSksDQorCUZBQ1RPUihDS19UT1BfQTFTWVMsICJhMXN5cyIsICJhMXN5c19zZWwiLCAxLCAxKSwNCisJRkFDVE9SKENLX1RPUF9FSVBfQiwgImVpcF9iIiwgImVpcF9iX3NlbCIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfVE9QX0YyNk0sICJjc3dfZjI2bSIsICJjc3dfZjI2bV9zZWwiLCAxLCAxKSwNCisJRkFDVE9SKENLX1RPUF9BVURfTCwgImF1ZF9sIiwgImF1ZF9sX3NlbCIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfVE9QX0FfVFVORVIsICJhX3R1bmVyIiwgImFfdHVuZXJfc2VsIiwgMSwgMSksDQorCUZBQ1RPUihDS19UT1BfVTJVM19SRUYsICJ1MnUzX3JlZiIsICJ1MnUzX3NlbCIsIDEsIDEpLA0KKwlGQUNUT1IoQ0tfVE9QX1UyVTNfU1lTLCAidTJ1M19zeXMiLCAidTJ1M19zeXNfc2VsIiwgMSwgMSksDQorCUZBQ1RPUihDS19UT1BfVTJVM19YSENJLCAidTJ1M194aGNpIiwgInUydTNfeGhjaV9zZWwiLCAxLCAxKSwNCisJRkFDVE9SKENLX1RPUF9BUDJDTk5fSE9TVCwgImFwMmNubl9ob3N0IiwgImFwMmNubl9ob3N0X3NlbCIsIDEsIDEpLA0KK307DQorDQorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBuZmkxeF9wYXJlbnRzW10gX19pbml0Y29uc3QgPSB7DQorCSJjYl9ja3NxXzQwbSIsDQorCSJjYl9tbV9kOCIsDQorCSJuZXQxX2Q4X2QyIiwNCisJIm5ldDJfZDNfZDIiLA0KKwkiY2JfbV9kNCIsDQorCSJtbV9kOF9kMiIsDQorCSJ3ZWRtY3VfZDVfZDIiLA0KKwkiY2JfbV9kOCINCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc3BpbmZpX3BhcmVudHNbXSBfX2luaXRjb25zdCA9IHsNCisJImNiX2Nrc3FfNDBtX2QyIiwNCisJImNiX2Nrc3FfNDBtIiwNCisJIm5ldDFfZDVfZDQiLA0KKwkiY2JfbV9kNCIsDQorCSJtbV9kOF9kMiIsDQorCSJ3ZWRtY3VfZDVfZDIiLA0KKwkibW1fZDNfZDgiLA0KKwkiY2JfbV9kOCINCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc3BpX3BhcmVudHNbXSBfX2luaXRjb25zdCA9IHsNCisJImNiX2Nrc3FfNDBtIiwNCisJImNiX21fZDIiLA0KKwkiY2JfbW1fZDgiLA0KKwkibmV0MV9kOF9kMiIsDQorCSJuZXQyX2QzX2QyIiwNCisJIm5ldDFfZDVfZDQiLA0KKwkiY2JfbV9kNCIsDQorCSJ3ZWRtY3VfZDVfZDIiDQorfTsNCisNCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHVhcnRfcGFyZW50c1tdIF9faW5pdGNvbnN0ID0gew0KKwkiY2JfY2tzcV80MG0iLA0KKwkiY2JfbV9kOCIsDQorCSJtX2Q4X2QyIg0KK307DQorDQorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwd21fcGFyZW50c1tdIF9faW5pdGNvbnN0ID0gew0KKwkiY2JfY2tzcV80MG0iLA0KKwkibmV0MV9kOF9kMiIsDQorCSJuZXQxX2Q1X2Q0IiwNCisJImNiX21fZDQiDQorfTsNCisNCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGkyY19wYXJlbnRzW10gX19pbml0Y29uc3QgPSB7DQorCSJjYl9ja3NxXzQwbSIsDQorCSJuZXQxX2Q1X2Q0IiwNCisJImNiX21fZDQiLA0KKwkibmV0MV9kOF9kNCINCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcGV4dHBfdGxfY2tfcGFyZW50c1tdIF9faW5pdGNvbnN0ID0gew0KKwkiY2JfY2tzcV80MG0iLA0KKwkibmV0MV9kNV9kNCIsDQorCSJuZXQyX2Q0X2QyIiwNCisJImNiX3J0Y18zMmsiDQorfTsNCisNCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGVtbWNfMjUwbV9wYXJlbnRzW10gX19pbml0Y29uc3QgPSB7DQorCSJjYl9ja3NxXzQwbSIsDQorCSJuZXQxX2Q1X2QyIg0KK307DQorDQorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBlbW1jXzQxNm1fcGFyZW50c1tdIF9faW5pdGNvbnN0ID0gew0KKwkiY2JfY2tzcV80MG0iLA0KKwkiY2JfbV80MTZtIg0KK307DQorDQorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmXzI2bV9hZGNfcGFyZW50c1tdIF9faW5pdGNvbnN0ID0gew0KKwkiY2JfY2tzcV80MG0iLA0KKwkibV9kOF9kMiINCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZHJhbWNfbWQzMl9wYXJlbnRzW10gX19pbml0Y29uc3QgPSB7DQorCSJjYl9ja3NxXzQwbSIsDQorCSJjYl9tX2QyIg0KK307DQorDQorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzeXNheGlfcGFyZW50c1tdIF9faW5pdGNvbnN0ID0gew0KKwkiY2JfY2tzcV80MG0iLA0KKwkibmV0MV9kOF9kMiIsDQorCSJjYl9uZXQyX2Q0Ig0KK307DQorDQorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzeXNhcGJfcGFyZW50c1tdIF9faW5pdGNvbnN0ID0gew0KKwkiY2JfY2tzcV80MG0iLA0KKwkibV9kM19kMiIsDQorCSJuZXQyX2Q0X2QyIg0KK307DQorDQorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhcm1fZGJfbWFpbl9wYXJlbnRzW10gX19pbml0Y29uc3QgPSB7DQorCSJjYl9ja3NxXzQwbSIsDQorCSJuZXQyX2QzX2QyIg0KK307DQorDQorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhcm1fZGJfanRzZWxfcGFyZW50c1tdIF9faW5pdGNvbnN0ID0gew0KKwkiY2JfanRja181MG0iLA0KKwkiY2JfY2tzcV80MG0iDQorfTsNCisNCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG5ldHN5c19wYXJlbnRzW10gX19pbml0Y29uc3QgPSB7DQorCSJjYl9ja3NxXzQwbSIsDQorCSJjYl9tbV9kNCINCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbmV0c3lzXzUwMG1fcGFyZW50c1tdIF9faW5pdGNvbnN0ID0gew0KKwkiY2JfY2tzcV80MG0iLA0KKwkiY2JfbmV0MV9kNSINCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbmV0c3lzX21jdV9wYXJlbnRzW10gX19pbml0Y29uc3QgPSB7DQorCSJjYl9ja3NxXzQwbSIsDQorCSJjYl93ZWRtY3VfNzYwbSIsDQorCSJjYl9tbV9kMiIsDQorCSJjYl9uZXQxX2Q0IiwNCisJImNiX25ldDFfZDUiDQorfTsNCisNCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG5ldHN5c18yeF9wYXJlbnRzW10gX19pbml0Y29uc3QgPSB7DQorCSJjYl9ja3NxXzQwbSIsDQorCSJjYl9uZXQyXzgwMG0iLA0KKwkiY2Jfd2VkbWN1Xzc2MG0iLA0KKwkiY2JfbW1fZDIiDQorfTsNCisNCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNnbV8zMjVtX3BhcmVudHNbXSBfX2luaXRjb25zdCA9IHsNCisJImNiX2Nrc3FfNDBtIiwNCisJImNiX3NnbV8zMjVtIg0KK307DQorDQorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzZ21fcmVnX3BhcmVudHNbXSBfX2luaXRjb25zdCA9IHsNCisJImNiX2Nrc3FfNDBtIiwNCisJIm5ldDFfZDhfZDQiDQorfTsNCisNCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGExc3lzX3BhcmVudHNbXSBfX2luaXRjb25zdCA9IHsNCisJImNiX2Nrc3FfNDBtIiwNCisJImFwbGwyX2Q0Ig0KK307DQorDQorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjb25uX21jdXN5c19wYXJlbnRzW10gX19pbml0Y29uc3QgPSB7DQorCSJjYl9ja3NxXzQwbSIsDQorCSJjYl9tbV9kMiINCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZWlwX2JfcGFyZW50c1tdIF9faW5pdGNvbnN0ID0gew0KKwkiY2JfY2tzcV80MG0iLA0KKwkiY2JfbmV0Ml84MDBtIg0KK307DQorDQorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhdWRfbF9wYXJlbnRzW10gX19pbml0Y29uc3QgPSB7DQorCSJjYl9ja3NxXzQwbSIsDQorCSJjYl9hcGxsMl8xOTZtIiwNCisJIm1fZDhfZDIiDQorfTsNCisNCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFfdHVuZXJfcGFyZW50c1tdIF9faW5pdGNvbnN0ID0gew0KKwkiY2JfY2tzcV80MG0iLA0KKwkiYXBsbDJfZDQiLA0KKwkibV9kOF9kMiINCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdTJ1M19zeXNfcGFyZW50c1tdIF9faW5pdGNvbnN0ID0gew0KKwkiY2JfY2tzcV80MG0iLA0KKwkibmV0MV9kNV9kNCINCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZGFfdTJfcmVmc2VsX3BhcmVudHNbXSBfX2luaXRjb25zdCA9IHsNCisJImNiX2Nrc3FfNDBtIiwNCisJImNiX3UyX3BoeWQiDQorfTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19tdXggdG9wX211eGVzW10gPSB7DQorCS8qIENMS19DRkdfMCAqLw0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19UT1BfTkZJMVhfU0VMLCAibmZpMXhfc2VsIiwNCisJICAgIG5maTF4X3BhcmVudHMsIDB4MDAwLCAweDAwNCwgMHgwMDgsIDAsIDMsIDcsIDB4MUMwLCAwKSwNCisJTVVYX0dBVEVfQ0xSX1NFVF9VUEQoQ0tfVE9QX1NQSU5GSV9TRUwsICJzcGluZmlfc2VsIiwNCisJICAgIHNwaW5maV9wYXJlbnRzLCAweDAwMCwgMHgwMDQsIDB4MDA4LCA4LCAzLCAxNSwgMHgxQzAsIDEpLA0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19UT1BfU1BJX1NFTCwgInNwaV9zZWwiLA0KKwkgICAgc3BpX3BhcmVudHMsIDB4MDAwLCAweDAwNCwgMHgwMDgsIDE2LCAzLCAyMywgMHgxQzAsIDIpLA0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19UT1BfU1BJTV9NU1RfU0VMLCAic3BpbV9tc3Rfc2VsIiwNCisJICAgIHNwaV9wYXJlbnRzLCAweDAwMCwgMHgwMDQsIDB4MDA4LCAyNCwgMywgMzEsIDB4MUMwLCAzKSwNCisJLyogQ0xLX0NGR18xICovDQorCU1VWF9HQVRFX0NMUl9TRVRfVVBEKENLX1RPUF9VQVJUX1NFTCwgInVhcnRfc2VsIiwNCisJICAgIHVhcnRfcGFyZW50cywgMHgwMTAsIDB4MDE0LCAweDAxOCwgMCwgMiwgNywgMHgxQzAsIDQpLA0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19UT1BfUFdNX1NFTCwgInB3bV9zZWwiLA0KKwkgICAgcHdtX3BhcmVudHMsIDB4MDEwLCAweDAxNCwgMHgwMTgsIDgsIDIsIDE1LCAweDFDMCwgNSksDQorCU1VWF9HQVRFX0NMUl9TRVRfVVBEKENLX1RPUF9JMkNfU0VMLCAiaTJjX3NlbCIsDQorCSAgICBpMmNfcGFyZW50cywgMHgwMTAsIDB4MDE0LCAweDAxOCwgMTYsIDIsIDIzLCAweDFDMCwgNiksDQorCU1VWF9HQVRFX0NMUl9TRVRfVVBEKENLX1RPUF9QRVhUUF9UTF9TRUwsICJwZXh0cF90bF9ja19zZWwiLA0KKwkgICAgcGV4dHBfdGxfY2tfcGFyZW50cywgMHgwMTAsIDB4MDE0LCAweDAxOCwgMjQsIDIsIDMxLCAweDFDMCwgNyksDQorCS8qIENMS19DRkdfMiAqLw0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19UT1BfRU1NQ18yNTBNX1NFTCwgImVtbWNfMjUwbV9zZWwiLA0KKwkgICAgZW1tY18yNTBtX3BhcmVudHMsIDB4MDIwLCAweDAyNCwgMHgwMjgsIDAsIDEsIDcsIDB4MUMwLCA4KSwNCisJTVVYX0dBVEVfQ0xSX1NFVF9VUEQoQ0tfVE9QX0VNTUNfNDE2TV9TRUwsICJlbW1jXzQxNm1fc2VsIiwNCisJICAgIGVtbWNfNDE2bV9wYXJlbnRzLCAweDAyMCwgMHgwMjQsIDB4MDI4LCA4LCAxLCAxNSwgMHgxQzAsIDkpLA0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19UT1BfRl8yNk1fQURDX1NFTCwgImZfMjZtX2FkY19zZWwiLA0KKwkgICAgZl8yNm1fYWRjX3BhcmVudHMsIDB4MDIwLCAweDAyNCwgMHgwMjgsIDE2LCAxLCAyMywgMHgxQzAsIDEwKSwNCisJTVVYX0dBVEVfQ0xSX1NFVF9VUEQoQ0tfVE9QX0RSQU1DX1NFTCwgImRyYW1jX3NlbCIsDQorCSAgICBmXzI2bV9hZGNfcGFyZW50cywgMHgwMjAsIDB4MDI0LCAweDAyOCwgMjQsIDEsIDMxLCAweDFDMCwgMTEpLA0KKwkvKiBDTEtfQ0ZHXzMgKi8NCisJTVVYX0dBVEVfQ0xSX1NFVF9VUEQoQ0tfVE9QX0RSQU1DX01EMzJfU0VMLCAiZHJhbWNfbWQzMl9zZWwiLA0KKwkgICAgZHJhbWNfbWQzMl9wYXJlbnRzLCAweDAzMCwgMHgwMzQsIDB4MDM4LCAwLCAxLCA3LCAweDFDMCwgMTIpLA0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19UT1BfU1lTQVhJX1NFTCwgInN5c2F4aV9zZWwiLA0KKwkgICAgc3lzYXhpX3BhcmVudHMsIDB4MDMwLCAweDAzNCwgMHgwMzgsIDgsIDIsIDE1LCAweDFDMCwgMTMpLA0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19UT1BfU1lTQVBCX1NFTCwgInN5c2FwYl9zZWwiLA0KKwkgICAgc3lzYXBiX3BhcmVudHMsIDB4MDMwLCAweDAzNCwgMHgwMzgsIDE2LCAyLCAyMywgMHgxQzAsIDE0KSwNCisJTVVYX0dBVEVfQ0xSX1NFVF9VUEQoQ0tfVE9QX0FSTV9EQl9NQUlOX1NFTCwgImFybV9kYl9tYWluX3NlbCIsDQorCSAgICBhcm1fZGJfbWFpbl9wYXJlbnRzLCAweDAzMCwgMHgwMzQsIDB4MDM4LCAyNCwgMSwgMzEsIDB4MUMwLCAxNSksDQorCS8qIENMS19DRkdfNCAqLw0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19UT1BfQVJNX0RCX0pUU0VMLCAiYXJtX2RiX2p0c2VsIiwNCisJICAgIGFybV9kYl9qdHNlbF9wYXJlbnRzLCAweDA0MCwgMHgwNDQsIDB4MDQ4LCAwLCAxLCA3LCAweDFDMCwgMTYpLA0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19UT1BfTkVUU1lTX1NFTCwgIm5ldHN5c19zZWwiLA0KKwkgICAgbmV0c3lzX3BhcmVudHMsIDB4MDQwLCAweDA0NCwgMHgwNDgsIDgsIDEsIDE1LCAweDFDMCwgMTcpLA0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19UT1BfTkVUU1lTXzUwME1fU0VMLCAibmV0c3lzXzUwMG1fc2VsIiwNCisJICAgIG5ldHN5c181MDBtX3BhcmVudHMsIDB4MDQwLCAweDA0NCwgMHgwNDgsIDE2LCAxLCAyMywgMHgxQzAsIDE4KSwNCisJTVVYX0dBVEVfQ0xSX1NFVF9VUEQoQ0tfVE9QX05FVFNZU19NQ1VfU0VMLCAibmV0c3lzX21jdV9zZWwiLA0KKwkgICAgbmV0c3lzX21jdV9wYXJlbnRzLCAweDA0MCwgMHgwNDQsIDB4MDQ4LCAyNCwgMywgMzEsIDB4MUMwLCAxOSksDQorCS8qIENMS19DRkdfNSAqLw0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19UT1BfTkVUU1lTXzJYX1NFTCwgIm5ldHN5c18yeF9zZWwiLA0KKwkgICAgbmV0c3lzXzJ4X3BhcmVudHMsIDB4MDUwLCAweDA1NCwgMHgwNTgsIDAsIDIsIDcsIDB4MUMwLCAyMCksDQorCU1VWF9HQVRFX0NMUl9TRVRfVVBEKENLX1RPUF9TR01fMzI1TV9TRUwsICJzZ21fMzI1bV9zZWwiLA0KKwkgICAgc2dtXzMyNW1fcGFyZW50cywgMHgwNTAsIDB4MDU0LCAweDA1OCwgOCwgMSwgMTUsIDB4MUMwLCAyMSksDQorCU1VWF9HQVRFX0NMUl9TRVRfVVBEKENLX1RPUF9TR01fUkVHX1NFTCwgInNnbV9yZWdfc2VsIiwNCisJICAgIHNnbV9yZWdfcGFyZW50cywgMHgwNTAsIDB4MDU0LCAweDA1OCwgMTYsIDEsIDIzLCAweDFDMCwgMjIpLA0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19UT1BfQTFTWVNfU0VMLCAiYTFzeXNfc2VsIiwNCisJICAgIGExc3lzX3BhcmVudHMsIDB4MDUwLCAweDA1NCwgMHgwNTgsIDI0LCAxLCAzMSwgMHgxQzAsIDIzKSwNCisJLyogQ0xLX0NGR182ICovDQorCU1VWF9HQVRFX0NMUl9TRVRfVVBEKENLX1RPUF9DT05OX01DVVNZU19TRUwsICJjb25uX21jdXN5c19zZWwiLA0KKwkgICAgY29ubl9tY3VzeXNfcGFyZW50cywgMHgwNjAsIDB4MDY0LCAweDA2OCwgMCwgMSwgNywgMHgxQzAsIDI0KSwNCisJTVVYX0dBVEVfQ0xSX1NFVF9VUEQoQ0tfVE9QX0VJUF9CX1NFTCwgImVpcF9iX3NlbCIsDQorCSAgICBlaXBfYl9wYXJlbnRzLCAweDA2MCwgMHgwNjQsIDB4MDY4LCA4LCAxLCAxNSwgMHgxQzAsIDI1KSwNCisJTVVYX0dBVEVfQ0xSX1NFVF9VUEQoQ0tfVE9QX1BDSUVfUEhZX1NFTCwgInBjaWVfcGh5X3NlbCIsDQorCSAgICBmXzI2bV9hZGNfcGFyZW50cywgMHgwNjAsIDB4MDY0LCAweDA2OCwgMTYsIDEsIDIzLCAweDFDMCwgMjYpLA0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19UT1BfVVNCM19QSFlfU0VMLCAidXNiM19waHlfc2VsIiwNCisJICAgIGZfMjZtX2FkY19wYXJlbnRzLCAweDA2MCwgMHgwNjQsIDB4MDY4LCAyNCwgMSwgMzEsIDB4MUMwLCAyNyksDQorCS8qIENMS19DRkdfNyAqLw0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19UT1BfRjI2TV9TRUwsICJjc3dfZjI2bV9zZWwiLA0KKwkgICAgZl8yNm1fYWRjX3BhcmVudHMsIDB4MDcwLCAweDA3NCwgMHgwNzgsIDAsIDEsIDcsIDB4MUMwLCAyOCksDQorCU1VWF9HQVRFX0NMUl9TRVRfVVBEKENLX1RPUF9BVURfTF9TRUwsICJhdWRfbF9zZWwiLA0KKwkgICAgYXVkX2xfcGFyZW50cywgMHgwNzAsIDB4MDc0LCAweDA3OCwgOCwgMiwgMTUsIDB4MUMwLCAyOSksDQorCU1VWF9HQVRFX0NMUl9TRVRfVVBEKENLX1RPUF9BX1RVTkVSX1NFTCwgImFfdHVuZXJfc2VsIiwNCisJICAgIGFfdHVuZXJfcGFyZW50cywgMHgwNzAsIDB4MDc0LCAweDA3OCwgMTYsIDIsIDIzLCAweDFDMCwgMzApLA0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19UT1BfVTJVM19TRUwsICJ1MnUzX3NlbCIsDQorCSAgICBmXzI2bV9hZGNfcGFyZW50cywgMHgwNzAsIDB4MDc0LCAweDA3OCwgMjQsIDEsIDMxLCAweDFDNCwgMCksDQorCS8qIENMS19DRkdfOCAqLw0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19UT1BfVTJVM19TWVNfU0VMLCAidTJ1M19zeXNfc2VsIiwNCisJICAgIHUydTNfc3lzX3BhcmVudHMsIDB4MDgwLCAweDA4NCwgMHgwODgsIDAsIDEsIDcsIDB4MUM0LCAxKSwNCisJTVVYX0dBVEVfQ0xSX1NFVF9VUEQoQ0tfVE9QX1UyVTNfWEhDSV9TRUwsICJ1MnUzX3hoY2lfc2VsIiwNCisJICAgIHUydTNfc3lzX3BhcmVudHMsIDB4MDgwLCAweDA4NCwgMHgwODgsIDgsIDEsIDE1LCAweDFDNCwgMiksDQorCU1VWF9HQVRFX0NMUl9TRVRfVVBEKENLX1RPUF9EQV9VMl9SRUZTRUwsICJkYV91Ml9yZWZzZWwiLA0KKwkgICAgZGFfdTJfcmVmc2VsX3BhcmVudHMsIDB4MDgwLCAweDA4NCwgMHgwODgsIDE2LCAxLCAyMywgMHgxQzQsIDMpLA0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19UT1BfREFfVTJfQ0tfMVBfU0VMLCAiZGFfdTJfY2tfMXBfc2VsIiwNCisJICAgIGRhX3UyX3JlZnNlbF9wYXJlbnRzLCAweDA4MCwgMHgwODQsIDB4MDg4LCAyNCwgMSwgMzEsIDB4MUM0LCA0KSwNCisJLyogQ0xLX0NGR185ICovDQorCU1VWF9HQVRFX0NMUl9TRVRfVVBEKENLX1RPUF9BUDJDTk5fSE9TVF9TRUwsICJhcDJjbm5faG9zdF9zZWwiLA0KKwkgICAgc2dtX3JlZ19wYXJlbnRzLCAweDA5MCwgMHgwOTQsIDB4MDk4LCAwLCAxLCA3LCAweDFDNCwgNSksDQorfTsNCisNCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGluZnJhX3VhcnQwX3BhcmVudHNbXSBfX2luaXRjb25zdCA9IHsNCisJImluZnJhX2NrX2YyNm0iLA0KKwkiaW5mcmFfdWFydCINCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaW5mcmFfc3BpMF9wYXJlbnRzW10gX19pbml0Y29uc3QgPSB7DQorCSJpbmZyYV9pMmMiLA0KKwkiaW5mcmFfaXNwaTAiDQorfTsNCisNCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGluZnJhX3NwaTFfcGFyZW50c1tdIF9faW5pdGNvbnN0ID0gew0KKwkiaW5mcmFfaTJjIiwNCisJImluZnJhX2lzcGkxIg0KK307DQorDQorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBpbmZyYV9wd21fYnNlbF9wYXJlbnRzW10gX19pbml0Y29uc3QgPSB7DQorCSJpbmZyYV9ja19mMzJrIiwNCisJImluZnJhX2NrX2YyNm0iLA0KKwkiaW5mcmFfNjZtX21jayIsDQorCSJpbmZyYV9wd20iDQorfTsNCisNCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGluZnJhX3BjaWVfcGFyZW50c1tdIF9faW5pdGNvbnN0ID0gew0KKwkiaW5mcmFfY2tfZjMyayIsDQorCSJpbmZyYV9ja19mMjZtIiwNCisJImNiX2Nrc3FfNDBtIiwNCisJImluZnJhX3BjaWUiDQorfTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19tdXggaW5mcmFfbXV4ZXNbXSA9IHsNCisJLyogTU9EVUxFX0NMS19TRUxfMCAqLw0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19JTkZSQV9VQVJUMF9TRUwsICJpbmZyYV91YXJ0MF9zZWwiLA0KKwkgICAgaW5mcmFfdWFydDBfcGFyZW50cywgMHgwMDE4LCAweDAwMTAsIDB4MDAxNCwgMCwgMSwgLTEsIC0xLCAtMSksDQorCU1VWF9HQVRFX0NMUl9TRVRfVVBEKENLX0lORlJBX1VBUlQxX1NFTCwgImluZnJhX3VhcnQxX3NlbCIsDQorCSAgICBpbmZyYV91YXJ0MF9wYXJlbnRzLCAweDAwMTgsIDB4MDAxMCwgMHgwMDE0LCAxLCAxLCAtMSwgLTEsIC0xKSwNCisJTVVYX0dBVEVfQ0xSX1NFVF9VUEQoQ0tfSU5GUkFfVUFSVDJfU0VMLCAiaW5mcmFfdWFydDJfc2VsIiwNCisJICAgIGluZnJhX3VhcnQwX3BhcmVudHMsIDB4MDAxOCwgMHgwMDEwLCAweDAwMTQsIDIsIDEsIC0xLCAtMSwgLTEpLA0KKwlNVVhfR0FURV9DTFJfU0VUX1VQRChDS19JTkZSQV9TUEkwX1NFTCwgImluZnJhX3NwaTBfc2VsIiwNCisJICAgIGluZnJhX3NwaTBfcGFyZW50cywgMHgwMDE4LCAweDAwMTAsIDB4MDAxNCwgNCwgMSwgLTEsIC0xLCAtMSksDQorCU1VWF9HQVRFX0NMUl9TRVRfVVBEKENLX0lORlJBX1NQSTFfU0VMLCAiaW5mcmFfc3BpMV9zZWwiLA0KKwkgICAgaW5mcmFfc3BpMV9wYXJlbnRzLCAweDAwMTgsIDB4MDAxMCwgMHgwMDE0LCA1LCAxLCAtMSwgLTEsIC0xKSwNCisJTVVYX0dBVEVfQ0xSX1NFVF9VUEQoQ0tfSU5GUkFfUFdNMV9TRUwsICJpbmZyYV9wd20xX3NlbCIsDQorCSAgICBpbmZyYV9wd21fYnNlbF9wYXJlbnRzLCAweDAwMTgsIDB4MDAxMCwgMHgwMDE0LCA5LCAyLCAtMSwgLTEsIC0xKSwNCisJTVVYX0dBVEVfQ0xSX1NFVF9VUEQoQ0tfSU5GUkFfUFdNMl9TRUwsICJpbmZyYV9wd20yX3NlbCIsDQorCSAgICBpbmZyYV9wd21fYnNlbF9wYXJlbnRzLCAweDAwMTgsIDB4MDAxMCwgMHgwMDE0LCAxMSwgMiwgLTEsIC0xLCAtMSksDQorCU1VWF9HQVRFX0NMUl9TRVRfVVBEKENLX0lORlJBX1BXTV9CU0VMLCAiaW5mcmFfcHdtX2JzZWwiLA0KKwkgICAgaW5mcmFfcHdtX2JzZWxfcGFyZW50cywgMHgwMDE4LCAweDAwMTAsIDB4MDAxNCwgMTMsIDIsIC0xLCAtMSwgLTEpLA0KKwkvKiBNT0RVTEVfQ0xLX1NFTF8xICovDQorCU1VWF9HQVRFX0NMUl9TRVRfVVBEKENLX0lORlJBX1BDSUVfU0VMLCAiaW5mcmFfcGNpZV9zZWwiLA0KKwkgICAgaW5mcmFfcGNpZV9wYXJlbnRzLCAweDAwMjgsIDB4MDAyMCwgMHgwMDI0LCAwLCAyLCAtMSwgLTEsIC0xKSwNCit9Ow0KKw0KKw0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2dhdGVfcmVncyBpbmZyYTBfY2dfcmVncyA9IHsNCisJLnNldF9vZnMgPSAweDQwLA0KKwkuY2xyX29mcyA9IDB4NDQsDQorCS5zdGFfb2ZzID0gMHg0OCwNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2dhdGVfcmVncyBpbmZyYTFfY2dfcmVncyA9IHsNCisJLnNldF9vZnMgPSAweDUwLA0KKwkuY2xyX29mcyA9IDB4NTQsDQorCS5zdGFfb2ZzID0gMHg1OCwNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2dhdGVfcmVncyBpbmZyYTJfY2dfcmVncyA9IHsNCisJLnNldF9vZnMgPSAweDYwLA0KKwkuY2xyX29mcyA9IDB4NjQsDQorCS5zdGFfb2ZzID0gMHg2OCwNCit9Ow0KKw0KKyNkZWZpbmUgR0FURV9JTkZSQTAoX2lkLCBfbmFtZSwgX3BhcmVudCwgX3NoaWZ0KSB7CVwNCisJCS5pZCA9IF9pZCwJCQkJXA0KKwkJLm5hbWUgPSBfbmFtZSwJCQkJXA0KKwkJLnBhcmVudF9uYW1lID0gX3BhcmVudCwJCQlcDQorCQkucmVncyA9ICZpbmZyYTBfY2dfcmVncywJCQlcDQorCQkuc2hpZnQgPSBfc2hpZnQsCQkJXA0KKwkJLm9wcyA9ICZtdGtfY2xrX2dhdGVfb3BzX3NldGNsciwJXA0KKwl9DQorDQorI2RlZmluZSBHQVRFX0lORlJBMShfaWQsIF9uYW1lLCBfcGFyZW50LCBfc2hpZnQpIHsJXA0KKwkJLmlkID0gX2lkLAkJCQlcDQorCQkubmFtZSA9IF9uYW1lLAkJCQlcDQorCQkucGFyZW50X25hbWUgPSBfcGFyZW50LAkJCVwNCisJCS5yZWdzID0gJmluZnJhMV9jZ19yZWdzLAkJCVwNCisJCS5zaGlmdCA9IF9zaGlmdCwJCQlcDQorCQkub3BzID0gJm10a19jbGtfZ2F0ZV9vcHNfc2V0Y2xyLAlcDQorCX0NCisNCisjZGVmaW5lIEdBVEVfSU5GUkEyKF9pZCwgX25hbWUsIF9wYXJlbnQsIF9zaGlmdCkgewlcDQorCQkuaWQgPSBfaWQsCQkJCVwNCisJCS5uYW1lID0gX25hbWUsCQkJCVwNCisJCS5wYXJlbnRfbmFtZSA9IF9wYXJlbnQsCQkJXA0KKwkJLnJlZ3MgPSAmaW5mcmEyX2NnX3JlZ3MsCQkJXA0KKwkJLnNoaWZ0ID0gX3NoaWZ0LAkJCVwNCisJCS5vcHMgPSAmbXRrX2Nsa19nYXRlX29wc19zZXRjbHIsCVwNCisJfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2dhdGUgaW5mcmFfY2xrc1tdIF9faW5pdGNvbnN0ID0gew0KKwkvKiBJTkZSQTAgKi8NCisJR0FURV9JTkZSQTAoQ0tfSU5GUkFfUFdNX0hDSywgImluZnJhX3B3bV9oY2siLCAiaW5mcmFfNjZtX21jayIsIDEpLA0KKwlHQVRFX0lORlJBMChDS19JTkZSQV9QV01fU1RBLCAiaW5mcmFfcHdtX3N0YSIsICJpbmZyYV9wd21fYmNrIiwgMiksDQorCUdBVEVfSU5GUkEwKENLX0lORlJBX1BXTTFfQ0ssICJpbmZyYV9wd20xIiwgImluZnJhX3B3bV9jazEiLCAzKSwNCisJR0FURV9JTkZSQTAoQ0tfSU5GUkFfUFdNMl9DSywgImluZnJhX3B3bTIiLCAiaW5mcmFfcHdtX2NrMiIsIDQpLA0KKwlHQVRFX0lORlJBMChDS19JTkZSQV9DUV9ETUFfQ0ssICJpbmZyYV9jcV9kbWEiLCAiaW5mcmFfMTMzbV9oY2siLCA2KSwNCisJR0FURV9JTkZSQTAoQ0tfSU5GUkFfRUlQOTdfQ0ssICJpbmZyYV9laXA5NyIsICJpbmZyYV9laXAiLCA3KSwNCisJR0FURV9JTkZSQTAoQ0tfSU5GUkFfQVVEX0JVU19DSywgImluZnJhX2F1ZF9idXMiLCAiaW5mcmFfNjZtX3BoY2siLCA4KSwNCisJR0FURV9JTkZSQTAoQ0tfSU5GUkFfQVVEXzI2TV9DSywgImluZnJhX2F1ZF8yNm0iLCAiaW5mcmFfY2tfZjI2bSIsIDkpLA0KKwlHQVRFX0lORlJBMChDS19JTkZSQV9BVURfTF9DSywgImluZnJhX2F1ZF9sIiwgImluZnJhX2ZhdWRfbCIsIDEwKSwNCisJR0FURV9JTkZSQTAoQ0tfSU5GUkFfQVVEX0FVRF9DSywgImluZnJhX2F1ZF9hdWQiLCAiaW5mcmFfZmF1ZF9hdWQiLCAxMSksDQorCUdBVEVfSU5GUkEwKENLX0lORlJBX0FVRF9FRzJfQ0ssICJpbmZyYV9hdWRfZWcyIiwgImluZnJhX2ZhdWRfZWcyIiwgMTMpLA0KKwlHQVRFX0lORlJBMChDS19JTkZSQV9EUkFNQ18yNk1fQ0ssICJpbmZyYV9kcmFtY18yNm0iLCAiaW5mcmFfY2tfZjI2bSIsIDE0KSwNCisJR0FURV9JTkZSQTAoQ0tfSU5GUkFfREJHX0NLLCAiaW5mcmFfZGJnIiwgImluZnJhXzY2bV9tY2siLCAxNSksDQorCUdBVEVfSU5GUkEwKENLX0lORlJBX0FQX0RNQV9DSywgImluZnJhX2FwX2RtYSIsICJpbmZyYV82Nm1fbWNrIiwgMTYpLA0KKwlHQVRFX0lORlJBMChDS19JTkZSQV9TRUpfQ0ssICJpbmZyYV9zZWoiLCAiaW5mcmFfNjZtX21jayIsIDI0KSwNCisJR0FURV9JTkZSQTAoQ0tfSU5GUkFfU0VKXzEzTV9DSywgImluZnJhX3Nlal8xM20iLCAiaW5mcmFfY2tfZjI2bSIsIDI1KSwNCisJR0FURV9JTkZSQTAoQ0tfSU5GUkFfVFJOR19DSywgImluZnJhX3RybmciLCAiaW5mcmFfaGRfMTMzbSIsIDI2KSwNCisJLyogSU5GUkExICovDQorCUdBVEVfSU5GUkExKENLX0lORlJBX1RIRVJNX0NLLCAiaW5mcmFfdGhlcm0iLCAiaW5mcmFfY2tfZjI2bSIsIDApLA0KKwlHQVRFX0lORlJBMShDS19JTkZSQV9JMkNPX0NLLCAiaW5mcmFfaTJjbyIsICJpbmZyYV9pMmNzIiwgMSksDQorCUdBVEVfSU5GUkExKENLX0lORlJBX1VBUlQwX0NLLCAiaW5mcmFfdWFydDAiLCAiaW5mcmFfbXV4X3VhcnQwIiwgMiksDQorCUdBVEVfSU5GUkExKENLX0lORlJBX1VBUlQxX0NLLCAiaW5mcmFfdWFydDEiLCAiaW5mcmFfbXV4X3VhcnQxIiwgMyksDQorCUdBVEVfSU5GUkExKENLX0lORlJBX1VBUlQyX0NLLCAiaW5mcmFfdWFydDIiLCAiaW5mcmFfbXV4X3VhcnQyIiwgNCksDQorCUdBVEVfSU5GUkExKENLX0lORlJBX05GSTFfQ0ssICJpbmZyYV9uZmkxIiwgImluZnJhX25maSIsIDgpLA0KKwlHQVRFX0lORlJBMShDS19JTkZSQV9TUElORkkxX0NLLCAiaW5mcmFfc3BpbmZpMSIsICJpbmZyYV9zcGluZmkiLCA5KSwNCisJR0FURV9JTkZSQTEoQ0tfSU5GUkFfTkZJX0hDS19DSywgImluZnJhX25maV9oY2siLCAiaW5mcmFfNjZtX21jayIsIDEwKSwNCisJR0FURV9JTkZSQTEoQ0tfSU5GUkFfU1BJMF9DSywgImluZnJhX3NwaTAiLCAiaW5mcmFfbXV4X3NwaTAiLCAxMSksDQorCUdBVEVfSU5GUkExKENLX0lORlJBX1NQSTFfQ0ssICJpbmZyYV9zcGkxIiwgImluZnJhX211eF9zcGkxIiwgMTIpLA0KKwlHQVRFX0lORlJBMShDS19JTkZSQV9TUEkwX0hDS19DSywgImluZnJhX3NwaTBfaGNrIiwgImluZnJhXzY2bV9tY2siLCAxMyksDQorCUdBVEVfSU5GUkExKENLX0lORlJBX1NQSTFfSENLX0NLLCAiaW5mcmFfc3BpMV9oY2siLCAiaW5mcmFfNjZtX21jayIsIDE0KSwNCisJR0FURV9JTkZSQTEoQ0tfSU5GUkFfRlJUQ19DSywgImluZnJhX2ZydGMiLCAiaW5mcmFfcnRjXzMyayIsIDE1KSwNCisJR0FURV9JTkZSQTEoQ0tfSU5GUkFfTVNEQ19DSywgImluZnJhX21zZGMiLCAiaW5mcmFfZm1zZGMiLCAxNiksDQorCUdBVEVfSU5GUkExKENLX0lORlJBX01TRENfSENLX0NLLCAiaW5mcmFfbXNkY19oY2siLCAiaW5mcmFfZm1zZGNfaGNrIiwgMTcpLA0KKwlHQVRFX0lORlJBMShDS19JTkZSQV9NU0RDXzEzM01fQ0ssICJpbmZyYV9tc2RjXzEzM20iLCAiaW5mcmFfcGVyaV8xMzNtIiwgMTgpLA0KKwlHQVRFX0lORlJBMShDS19JTkZSQV9NU0RDXzY2TV9DSywgImluZnJhX21zZGNfNjZtIiwgImluZnJhXzY2bV9waGNrIiwgMTkpLA0KKwlHQVRFX0lORlJBMShDS19JTkZSQV9BRENfMjZNX0NLLCAiaW5mcmFfYWRjXzI2bSIsICJjc3dfZjI2bSIsIDIwKSwNCisJR0FURV9JTkZSQTEoQ0tfSU5GUkFfQURDX0ZSQ19DSywgImluZnJhX2FkY19mcmMiLCAiY3N3X2YyNm0iLCAyMSksDQorCUdBVEVfSU5GUkExKENLX0lORlJBX0ZCSVNUMkZQQ19DSywgImluZnJhX2ZiaXN0MmZwYyIsICJpbmZyYV9uZmkiLCAyMyksDQorCS8qIElORlJBMiAqLw0KKwlHQVRFX0lORlJBMihDS19JTkZSQV9JVVNCXzEzM19DSywgImluZnJhX2l1c2JfMTMzIiwgImluZnJhXzEzM21fcGhjayIsIDApLA0KKwlHQVRFX0lORlJBMihDS19JTkZSQV9JVVNCXzY2TV9DSywgImluZnJhX2l1c2JfNjZtIiwgImluZnJhXzY2bV9waGNrIiwgMSksDQorCUdBVEVfSU5GUkEyKENLX0lORlJBX0lVU0JfU1lTX0NLLCAiaW5mcmFfaXVzYl9zeXMiLCAiaW5mcmFfdXNiX3N5cyIsIDIpLA0KKwlHQVRFX0lORlJBMihDS19JTkZSQV9JVVNCX0NLLCAiaW5mcmFfaXVzYiIsICJpbmZyYV91c2IiLCAzKSwNCisJR0FURV9JTkZSQTIoQ0tfSU5GUkFfSVBDSUVfQ0ssICJpbmZyYV9pcGNpZSIsICJpbmZyYV9wY2llX211eCIsIDEyKSwNCisJR0FURV9JTkZSQTIoQ0tfSU5GUkFfSVBDSUVfUElQRV9DSywgImluZnJhX2lwY2llX3BpcGUiLCAiY2JfY2tzcV80MG0iLCAxMyksDQorCUdBVEVfSU5GUkEyKENLX0lORlJBX0lQQ0lFUl9DSywgImluZnJhX2lwY2llciIsICJpbmZyYV9mMjZtX2NrMCIsIDE0KSwNCisJR0FURV9JTkZSQTIoQ0tfSU5GUkFfSVBDSUVCX0NLLCAiaW5mcmFfaXBjaWViIiwgImluZnJhXzEzM21fcGhjayIsIDE1KSwNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2dhdGVfcmVncyBzZ21paTBfY2dfcmVncyA9IHsNCisJLnNldF9vZnMgPSAweEU0LA0KKwkuY2xyX29mcyA9IDB4RTQsDQorCS5zdGFfb2ZzID0gMHhFNCwNCit9Ow0KKw0KKyNkZWZpbmUgR0FURV9TR01JSTAoX2lkLCBfbmFtZSwgX3BhcmVudCwgX3NoaWZ0KSB7CVwNCisJCS5pZCA9IF9pZCwJCQkJXA0KKwkJLm5hbWUgPSBfbmFtZSwJCQkJXA0KKwkJLnBhcmVudF9uYW1lID0gX3BhcmVudCwJCQlcDQorCQkucmVncyA9ICZzZ21paTBfY2dfcmVncywJCQlcDQorCQkuc2hpZnQgPSBfc2hpZnQsCQkJXA0KKwkJLm9wcyA9ICZtdGtfY2xrX2dhdGVfb3BzX25vX3NldGNscl9pbnYsCVwNCisJfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2dhdGUgc2dtaWkwX2Nsa3NbXSBfX2luaXRjb25zdCA9IHsNCisJR0FURV9TR01JSTAoQ0tfU0dNMF9UWF9FTiwgInNnbTBfdHhfZW4iLCAidXNiX3R4MjUwbSIsIDIpLA0KKwlHQVRFX1NHTUlJMChDS19TR00wX1JYX0VOLCAic2dtMF9yeF9lbiIsICJ1c2JfZXFfcngyNTBtIiwgMyksDQorCUdBVEVfU0dNSUkwKENLX1NHTTBfQ0swX0VOLCAic2dtMF9jazBfZW4iLCAidXNiX2xuMCIsIDQpLA0KKwlHQVRFX1NHTUlJMChDS19TR00wX0NEUl9DSzBfRU4sICJzZ20wX2Nkcl9jazBfZW4iLCAidXNiX2NkciIsIDUpLA0KK307DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZ2F0ZV9yZWdzIHNnbWlpMV9jZ19yZWdzID0gew0KKwkuc2V0X29mcyA9IDB4RTQsDQorCS5jbHJfb2ZzID0gMHhFNCwNCisJLnN0YV9vZnMgPSAweEU0LA0KK307DQorDQorI2RlZmluZSBHQVRFX1NHTUlJMShfaWQsIF9uYW1lLCBfcGFyZW50LCBfc2hpZnQpIHsJXA0KKwkJLmlkID0gX2lkLAkJCQlcDQorCQkubmFtZSA9IF9uYW1lLAkJCQlcDQorCQkucGFyZW50X25hbWUgPSBfcGFyZW50LAkJCVwNCisJCS5yZWdzID0gJnNnbWlpMV9jZ19yZWdzLAkJCVwNCisJCS5zaGlmdCA9IF9zaGlmdCwJCQlcDQorCQkub3BzID0gJm10a19jbGtfZ2F0ZV9vcHNfbm9fc2V0Y2xyX2ludiwJXA0KKwl9DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZ2F0ZSBzZ21paTFfY2xrc1tdIF9faW5pdGNvbnN0ID0gew0KKwlHQVRFX1NHTUlJMShDS19TR00xX1RYX0VOLCAic2dtMV90eF9lbiIsICJ1c2JfdHgyNTBtIiwgMiksDQorCUdBVEVfU0dNSUkxKENLX1NHTTFfUlhfRU4sICJzZ20xX3J4X2VuIiwgInVzYl9lcV9yeDI1MG0iLCAzKSwNCisJR0FURV9TR01JSTEoQ0tfU0dNMV9DSzFfRU4sICJzZ20xX2NrMV9lbiIsICJ1c2JfbG4wIiwgNCksDQorCUdBVEVfU0dNSUkxKENLX1NHTTFfQ0RSX0NLMV9FTiwgInNnbTFfY2RyX2NrMV9lbiIsICJ1c2JfY2RyIiwgNSksDQorfTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19nYXRlX3JlZ3MgZXRoX2NnX3JlZ3MgPSB7DQorCS5zZXRfb2ZzID0gMHgzMCwNCisJLmNscl9vZnMgPSAweDMwLA0KKwkuc3RhX29mcyA9IDB4MzAsDQorfTsNCisNCisjZGVmaW5lIEdBVEVfRVRIKF9pZCwgX25hbWUsIF9wYXJlbnQsIF9zaGlmdCkgewlcDQorCQkuaWQgPSBfaWQsCQkJCVwNCisJCS5uYW1lID0gX25hbWUsCQkJCVwNCisJCS5wYXJlbnRfbmFtZSA9IF9wYXJlbnQsCQkJXA0KKwkJLnJlZ3MgPSAmZXRoX2NnX3JlZ3MsCQkJXA0KKwkJLnNoaWZ0ID0gX3NoaWZ0LAkJCVwNCisJCS5vcHMgPSAmbXRrX2Nsa19nYXRlX29wc19ub19zZXRjbHJfaW52LAlcDQorCX0NCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19nYXRlIGV0aF9jbGtzW10gX19pbml0Y29uc3QgPSB7DQorCUdBVEVfRVRIKENLX0VUSF9GRV9FTiwgImV0aF9mZV9lbiIsICJuZXRzeXNfMngiLCA2KSwNCisJR0FURV9FVEgoQ0tfRVRIX0dQMl9FTiwgImV0aF9ncDJfZW4iLCAic2dtXzMyNW0iLCA3KSwNCisJR0FURV9FVEgoQ0tfRVRIX0dQMV9FTiwgImV0aF9ncDFfZW4iLCAic2dtXzMyNW0iLCA4KSwNCisJR0FURV9FVEgoQ0tfRVRIX1dPQ1BVMV9FTiwgImV0aF93b2NwdTFfZW4iLCAibmV0c3lzX3dlZF9tY3UiLCAxNCksDQorCUdBVEVfRVRIKENLX0VUSF9XT0NQVTBfRU4sICJldGhfd29jcHUwX2VuIiwgIm5ldHN5c193ZWRfbWN1IiwgMTUpLA0KK307DQorDQorI2RlZmluZSBNVDc5ODZfUExMX0ZNQVgJCSgyNTAwVUwgKiBNSFopDQorDQorI2RlZmluZSBDT04wX01UNzk4Nl9SU1RfQkFSCUJJVCgyNykNCisNCisjZGVmaW5lIFBMTF9CKF9pZCwgX25hbWUsIF9yZWcsIF9wd3JfcmVnLCBfZW5fbWFzaywgX2ZsYWdzLCBfcGN3Yml0cywJXA0KKwkJCV9wZF9yZWcsIF9wZF9zaGlmdCwgX3R1bmVyX3JlZywgX3Bjd19yZWcsCVwNCisJCQlfcGN3X3NoaWZ0LCBfZGl2X3RhYmxlLCBfcGFyZW50X25hbWUpIHsJCVwNCisJCS5pZCA9IF9pZCwJCQkJCQlcDQorCQkubmFtZSA9IF9uYW1lLAkJCQkJCVwNCisJCS5yZWcgPSBfcmVnLAkJCQkJCVwNCisJCS5wd3JfcmVnID0gX3B3cl9yZWcsCQkJCQlcDQorCQkuZW5fbWFzayA9IF9lbl9tYXNrLAkJCQkJXA0KKwkJLmZsYWdzID0gX2ZsYWdzLAkJCQkJXA0KKwkJLnJzdF9iYXJfbWFzayA9IENPTjBfTVQ3OTg2X1JTVF9CQVIsCQkJXA0KKwkJLmZtYXggPSBNVDc5ODZfUExMX0ZNQVgsCQkJCVwNCisJCS5wY3diaXRzID0gX3Bjd2JpdHMsCQkJCQlcDQorCQkucGRfcmVnID0gX3BkX3JlZywJCQkJCVwNCisJCS5wZF9zaGlmdCA9IF9wZF9zaGlmdCwJCQkJCVwNCisJCS50dW5lcl9yZWcgPSBfdHVuZXJfcmVnLAkJCQlcDQorCQkucGN3X3JlZyA9IF9wY3dfcmVnLAkJCQkJXA0KKwkJLnBjd19zaGlmdCA9IF9wY3dfc2hpZnQsCQkJCVwNCisJCS5kaXZfdGFibGUgPSBfZGl2X3RhYmxlLAkJCQlcDQorCQkucGFyZW50X25hbWUgPSBfcGFyZW50X25hbWUsCQkJCVwNCisJfQ0KKw0KKyNkZWZpbmUgUExMKF9pZCwgX25hbWUsIF9yZWcsIF9wd3JfcmVnLCBfZW5fbWFzaywgX2ZsYWdzLCBfcGN3Yml0cywJXA0KKwkJCV9wZF9yZWcsIF9wZF9zaGlmdCwgX3R1bmVyX3JlZywgX3Bjd19yZWcsCVwNCisJCQlfcGN3X3NoaWZ0LCBfcGFyZW50X25hbWUpCQkJCVwNCisJCVBMTF9CKF9pZCwgX25hbWUsIF9yZWcsIF9wd3JfcmVnLCBfZW5fbWFzaywgX2ZsYWdzLCBfcGN3Yml0cywgXA0KKwkJCV9wZF9yZWcsIF9wZF9zaGlmdCwgX3R1bmVyX3JlZywgX3Bjd19yZWcsIF9wY3dfc2hpZnQsIFwNCisJCQlOVUxMLCBfcGFyZW50X25hbWUpDQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfcGxsX2RhdGEgcGxsc1tdID0gew0KKwlQTEwoQ0tfQVBNSVhFRF9BUk1QTEwsICJhcm1wbGwiLCAweDAyMDAsIDB4MDIwQywgMHgwMDAwMDAwMSwNCisJICAgIDAsIDMyLCAweDAyMDAsIDQsIDAsIDB4MDIwNCwgMCwgImNsa3h0YWwiKSwNCisJUExMKENLX0FQTUlYRURfTkVUMlBMTCwgIm5ldDJwbGwiLCAweDAyMTAsIDB4MDIxQywgMHgwMDAwMDAwMSwNCisJICAgIDAsIDMyLCAweDAyMTAsIDQsIDAsIDB4MDIxNCwgMCwgImNsa3h0YWwiKSwNCisJUExMKENLX0FQTUlYRURfTU1QTEwsICJtbXBsbCIsIDB4MDIyMCwgMHgwMjJDLCAweDAwMDAwMDAxLA0KKwkgICAgMCwgMzIsIDB4MDIyMCwgNCwgMCwgMHgwMjI0LCAwLCAiY2xreHRhbCIpLA0KKwlQTEwoQ0tfQVBNSVhFRF9TR01QTEwsICJzZ21wbGwiLCAweDAyMzAsIDB4MDIzYywgMHgwMDAwMDAwMSwNCisJICAgIDAsIDMyLCAweDAyMzAsIDQsIDAsIDB4MDIzNCwgMCwgImNsa3h0YWwiKSwNCisJUExMKENLX0FQTUlYRURfV0VETUNVUExMLCAid2VkbWN1cGxsIiwgMHgwMjQwLCAweDAyNGMsIDB4MDAwMDAwMDEsDQorCSAgICAwLCAzMiwgMHgwMjQwLCA0LCAwLCAweDAyNDQsIDAsICJjbGt4dGFsIiksDQorCVBMTChDS19BUE1JWEVEX05FVDFQTEwsICJuZXQxcGxsIiwgMHgwMjUwLCAweDAyNWMsIDB4MDAwMDAwMDEsDQorCSAgICAwLCAzMiwgMHgwMjUwLCA0LCAwLCAweDAyNTQsIDAsICJjbGt4dGFsIiksDQorCVBMTChDS19BUE1JWEVEX01QTEwsICJtcGxsIiwgMHgwMjYwLCAweDAyNzAsIDB4MDAwMDAwMDEsDQorCSAgICAwLCAzMiwgMHgwMjYwLCA0LCAwLCAweDAyNjQsIDAsICJjbGt4dGFsIiksDQorCVBMTChDS19BUE1JWEVEX0FQTEwyLCAiYXBsbDIiLCAweDAyNzgsIDB4MDI4OCwgMHgwMDAwMDAwMSwNCisJICAgIDAsIDMyLCAweDAyNzgsIDQsIDAsIDB4MDI3YywgMCwgImNsa3h0YWwiKSwNCit9Ow0KKw0KK3N0YXRpYyBzdHJ1Y3QgY2xrX29uZWNlbGxfZGF0YSAqbXQ3OTg2X3RvcF9jbGtfZGF0YSBfX2luaXRkYXRhOw0KK3N0YXRpYyBzdHJ1Y3QgY2xrX29uZWNlbGxfZGF0YSAqbXQ3OTg2X3BsbF9jbGtfZGF0YSBfX2luaXRkYXRhOw0KKw0KK3N0YXRpYyB2b2lkIF9faW5pdCBtdGtfY2xrX2VuYWJsZV9jcml0aWNhbCh2b2lkKQ0KK3sNCisJaWYgKCFtdDc5ODZfdG9wX2Nsa19kYXRhIHx8ICFtdDc5ODZfcGxsX2Nsa19kYXRhKQ0KKwkJcmV0dXJuOw0KKw0KKwljbGtfcHJlcGFyZV9lbmFibGUobXQ3OTg2X3BsbF9jbGtfZGF0YS0+Y2xrc1tDS19BUE1JWEVEX0FSTVBMTF0pOw0KKwljbGtfcHJlcGFyZV9lbmFibGUobXQ3OTg2X3RvcF9jbGtfZGF0YS0+Y2xrc1tDS19UT1BfU1lTQVhJX1NFTF0pOw0KKwljbGtfcHJlcGFyZV9lbmFibGUobXQ3OTg2X3RvcF9jbGtfZGF0YS0+Y2xrc1tDS19UT1BfU1lTQVBCX1NFTF0pOw0KKwljbGtfcHJlcGFyZV9lbmFibGUobXQ3OTg2X3RvcF9jbGtfZGF0YS0+Y2xrc1tDS19UT1BfRFJBTUNfU0VMXSk7DQorCWNsa19wcmVwYXJlX2VuYWJsZShtdDc5ODZfdG9wX2Nsa19kYXRhLT5jbGtzW0NLX1RPUF9EUkFNQ19NRDMyX1NFTF0pOw0KKwljbGtfcHJlcGFyZV9lbmFibGUobXQ3OTg2X3RvcF9jbGtfZGF0YS0+Y2xrc1tDS19UT1BfRjI2TV9TRUxdKTsNCit9DQorDQorc3RhdGljIHZvaWQgX19pbml0IG10a19pbmZyYWNmZ19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkNCit7DQorCWludCByOw0KKw0KKw0KKwltdDc5ODZfdG9wX2Nsa19kYXRhID0gbXRrX2FsbG9jX2Nsa19kYXRhKENMS19JTkZSQV9OUl9DTEspOw0KKw0KKwltdGtfY2xrX3JlZ2lzdGVyX2ZhY3RvcnMoaW5mcmFfZGl2cywgQVJSQVlfU0laRShpbmZyYV9kaXZzKSwgbXQ3OTg2X3RvcF9jbGtfZGF0YSk7DQorDQorCXIgPSBvZl9jbGtfYWRkX3Byb3ZpZGVyKG5vZGUsIG9mX2Nsa19zcmNfb25lY2VsbF9nZXQsIG10Nzk4Nl90b3BfY2xrX2RhdGEpOw0KKw0KKwlpZiAocikNCisJCXByX2VycigiJXMoKTogY291bGQgbm90IHJlZ2lzdGVyIGNsb2NrIHByb3ZpZGVyOiAlZFxuIiwNCisJCQlfX2Z1bmNfXywgcik7DQorDQorCW10a19jbGtfZW5hYmxlX2NyaXRpY2FsKCk7DQorfQ0KK0NMS19PRl9ERUNMQVJFKG10a19pbmZyYWNmZywgIm1lZGlhdGVrLG10Nzk4Ni1pbmZyYWNmZyIsIG10a19pbmZyYWNmZ19pbml0KTsNCisNCitzdGF0aWMgdm9pZCBfX2luaXQgbXRrX3RvcGNrZ2VuX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQ0KK3sNCisJaW50IHI7DQorCXZvaWQgX19pb21lbSAqYmFzZTsNCisNCisJYmFzZSA9IG9mX2lvbWFwKG5vZGUsIDApOw0KKwlpZiAoIWJhc2UpIHsNCisJCXByX2VycigiJXMoKTogaW9yZW1hcCBmYWlsZWRcbiIsIF9fZnVuY19fKTsNCisJCXJldHVybjsNCisJfQ0KKw0KKwltdDc5ODZfdG9wX2Nsa19kYXRhID0gbXRrX2FsbG9jX2Nsa19kYXRhKENMS19UT1BfTlJfQ0xLKTsNCisNCisJbXRrX2Nsa19yZWdpc3Rlcl9mYWN0b3JzKHRvcF9kaXZzLCBBUlJBWV9TSVpFKHRvcF9kaXZzKSwgbXQ3OTg2X3RvcF9jbGtfZGF0YSk7DQorCW10a19jbGtfcmVnaXN0ZXJfbXV4ZXModG9wX211eGVzLCBBUlJBWV9TSVpFKHRvcF9tdXhlcyksIG5vZGUsICZtdDc5ODZfY2xrX2xvY2ssIG10Nzk4Nl90b3BfY2xrX2RhdGEpOw0KKw0KKwlyID0gb2ZfY2xrX2FkZF9wcm92aWRlcihub2RlLCBvZl9jbGtfc3JjX29uZWNlbGxfZ2V0LCBtdDc5ODZfdG9wX2Nsa19kYXRhKTsNCisNCisJaWYgKHIpDQorCQlwcl9lcnIoIiVzKCk6IGNvdWxkIG5vdCByZWdpc3RlciBjbG9jayBwcm92aWRlcjogJWRcbiIsDQorCQkJX19mdW5jX18sIHIpOw0KKw0KKwltdGtfY2xrX2VuYWJsZV9jcml0aWNhbCgpOw0KK30NCitDTEtfT0ZfREVDTEFSRShtdGtfdG9wY2tnZW4sICJtZWRpYXRlayxtdDc5ODYtdG9wY2tnZW4iLCBtdGtfdG9wY2tnZW5faW5pdCk7DQorDQorc3RhdGljIHZvaWQgX19pbml0IG10a19pbmZyYWNmZ19hb19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkNCit7DQorCXN0cnVjdCBjbGtfb25lY2VsbF9kYXRhICpjbGtfZGF0YTsNCisJaW50IHI7DQorCXZvaWQgX19pb21lbSAqYmFzZTsNCisNCisJYmFzZSA9IG9mX2lvbWFwKG5vZGUsIDApOw0KKwlpZiAoIWJhc2UpIHsNCisJCXByX2VycigiJXMoKTogaW9yZW1hcCBmYWlsZWRcbiIsIF9fZnVuY19fKTsNCisJCXJldHVybjsNCisJfQ0KKw0KKwljbGtfZGF0YSA9IG10a19hbGxvY19jbGtfZGF0YShDTEtfSU5GUkFfQU9fTlJfQ0xLKTsNCisNCisJbXRrX2Nsa19yZWdpc3Rlcl9tdXhlcyhpbmZyYV9tdXhlcywgQVJSQVlfU0laRShpbmZyYV9tdXhlcyksIG5vZGUsICZtdDc5ODZfY2xrX2xvY2ssIGNsa19kYXRhKTsNCisJbXRrX2Nsa19yZWdpc3Rlcl9nYXRlcyhub2RlLCBpbmZyYV9jbGtzLCBBUlJBWV9TSVpFKGluZnJhX2Nsa3MpLCBjbGtfZGF0YSk7DQorDQorCXIgPSBvZl9jbGtfYWRkX3Byb3ZpZGVyKG5vZGUsIG9mX2Nsa19zcmNfb25lY2VsbF9nZXQsIGNsa19kYXRhKTsNCisNCisJaWYgKHIpDQorCQlwcl9lcnIoIiVzKCk6IGNvdWxkIG5vdCByZWdpc3RlciBjbG9jayBwcm92aWRlcjogJWRcbiIsDQorCQkJX19mdW5jX18sIHIpOw0KK30NCitDTEtfT0ZfREVDTEFSRShtdGtfaW5mcmFjZmdfYW8sICJtZWRpYXRlayxtdDc5ODYtaW5mcmFjZmdfYW8iLCBtdGtfaW5mcmFjZmdfYW9faW5pdCk7DQorDQorc3RhdGljIHZvaWQgX19pbml0IG10a19hcG1peGVkc3lzX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQ0KK3sNCisJaW50IHI7DQorDQorCW10Nzk4Nl9wbGxfY2xrX2RhdGEgPSBtdGtfYWxsb2NfY2xrX2RhdGEoQ0xLX0FQTUlYRURfTlJfQ0xLKTsNCisNCisJbXRrX2Nsa19yZWdpc3Rlcl9wbGxzKG5vZGUsIHBsbHMsIEFSUkFZX1NJWkUocGxscyksIG10Nzk4Nl9wbGxfY2xrX2RhdGEpOw0KKw0KKwlyID0gb2ZfY2xrX2FkZF9wcm92aWRlcihub2RlLCBvZl9jbGtfc3JjX29uZWNlbGxfZ2V0LCBtdDc5ODZfcGxsX2Nsa19kYXRhKTsNCisNCisJaWYgKHIpDQorCQlwcl9lcnIoIiVzKCk6IGNvdWxkIG5vdCByZWdpc3RlciBjbG9jayBwcm92aWRlcjogJWRcbiIsDQorCQkJX19mdW5jX18sIHIpOw0KKw0KKwltdGtfY2xrX2VuYWJsZV9jcml0aWNhbCgpOw0KK30NCitDTEtfT0ZfREVDTEFSRShtdGtfYXBtaXhlZHN5cywgIm1lZGlhdGVrLG10Nzk4Ni1hcG1peGVkc3lzIiwgbXRrX2FwbWl4ZWRzeXNfaW5pdCk7DQorDQorc3RhdGljIHZvaWQgX19pbml0IG10a19zZ21paXN5c18wX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQ0KK3sNCisJc3RydWN0IGNsa19vbmVjZWxsX2RhdGEgKmNsa19kYXRhOw0KKwlpbnQgcjsNCisNCisJY2xrX2RhdGEgPSBtdGtfYWxsb2NfY2xrX2RhdGEoQ0xLX1NHTUlJMF9OUl9DTEspOw0KKw0KKwltdGtfY2xrX3JlZ2lzdGVyX2dhdGVzKG5vZGUsIHNnbWlpMF9jbGtzLCBBUlJBWV9TSVpFKHNnbWlpMF9jbGtzKSwgY2xrX2RhdGEpOw0KKw0KKwlyID0gb2ZfY2xrX2FkZF9wcm92aWRlcihub2RlLCBvZl9jbGtfc3JjX29uZWNlbGxfZ2V0LCBjbGtfZGF0YSk7DQorDQorCWlmIChyKQ0KKwkJcHJfZXJyKCIlcygpOiBjb3VsZCBub3QgcmVnaXN0ZXIgY2xvY2sgcHJvdmlkZXI6ICVkXG4iLA0KKwkJCV9fZnVuY19fLCByKTsNCit9DQorQ0xLX09GX0RFQ0xBUkUobXRrX3NnbWlpc3lzXzAsICJtZWRpYXRlayxtdDc5ODYtc2dtaWlzeXNfMCIsIG10a19zZ21paXN5c18wX2luaXQpOw0KKw0KK3N0YXRpYyB2b2lkIF9faW5pdCBtdGtfc2dtaWlzeXNfMV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkNCit7DQorCXN0cnVjdCBjbGtfb25lY2VsbF9kYXRhICpjbGtfZGF0YTsNCisJaW50IHI7DQorDQorCWNsa19kYXRhID0gbXRrX2FsbG9jX2Nsa19kYXRhKENMS19TR01JSTFfTlJfQ0xLKTsNCisNCisJbXRrX2Nsa19yZWdpc3Rlcl9nYXRlcyhub2RlLCBzZ21paTFfY2xrcywgQVJSQVlfU0laRShzZ21paTFfY2xrcyksIGNsa19kYXRhKTsNCisNCisJciA9IG9mX2Nsa19hZGRfcHJvdmlkZXIobm9kZSwgb2ZfY2xrX3NyY19vbmVjZWxsX2dldCwgY2xrX2RhdGEpOw0KKw0KKwlpZiAocikNCisJCXByX2VycigiJXMoKTogY291bGQgbm90IHJlZ2lzdGVyIGNsb2NrIHByb3ZpZGVyOiAlZFxuIiwNCisJCQlfX2Z1bmNfXywgcik7DQorfQ0KK0NMS19PRl9ERUNMQVJFKG10a19zZ21paXN5c18xLCAibWVkaWF0ZWssbXQ3OTg2LXNnbWlpc3lzXzEiLCBtdGtfc2dtaWlzeXNfMV9pbml0KTsNCisNCitzdGF0aWMgdm9pZCBfX2luaXQgbXRrX2V0aHN5c19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkNCit7DQorCXN0cnVjdCBjbGtfb25lY2VsbF9kYXRhICpjbGtfZGF0YTsNCisJaW50IHI7DQorDQorCWNsa19kYXRhID0gbXRrX2FsbG9jX2Nsa19kYXRhKENMS19FVEhfTlJfQ0xLKTsNCisNCisJbXRrX2Nsa19yZWdpc3Rlcl9nYXRlcyhub2RlLCBldGhfY2xrcywgQVJSQVlfU0laRShldGhfY2xrcyksIGNsa19kYXRhKTsNCisNCisJciA9IG9mX2Nsa19hZGRfcHJvdmlkZXIobm9kZSwgb2ZfY2xrX3NyY19vbmVjZWxsX2dldCwgY2xrX2RhdGEpOw0KKw0KKwlpZiAocikNCisJCXByX2VycigiJXMoKTogY291bGQgbm90IHJlZ2lzdGVyIGNsb2NrIHByb3ZpZGVyOiAlZFxuIiwNCisJCQlfX2Z1bmNfXywgcik7DQorfQ0KK0NMS19PRl9ERUNMQVJFKG10a19ldGhzeXMsICJtZWRpYXRlayxtdDc5ODYtZXRoc3lzX2NrIiwgbXRrX2V0aHN5c19pbml0KTsNCisNCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbGVkcy9sZWRzLXVibnQtbGVkYmFyLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbGVkcy9sZWRzLXVibnQtbGVkYmFyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY1MDAzOAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9sZWRzL2xlZHMtdWJudC1sZWRiYXIuYwpAQCAtMCwwICsxLDIxMCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQorCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPgorCisvKioKKyAqIERyaXZlciBmb3IgdGhlIFViaXF1aXRpIFJHQiBMRUQgY29udHJvbGxlciAoTEVEQkFSKS4KKyAqIFRoaXMgQ29udHJvbGxlciBpcyBiYXNlZCBvbiBhIEhvbHRlayBIVDMyRjUyMjQxIGFuZCBjb25uZWN0ZWQKKyAqIHZpYSBJMkMuCisgKgorICogIC0gVGhlIENvbnRyb2xsZXIgbmVlZHMgYW4gZW5hYmxlIHNpZ25hbCBzZXQgdG8gaGlnaCB3aGVuCisgKiAgICBwZXJmb3JtaW5nIGEgdHJhbnNhY3Rpb24uIE9uIHRoZSBVNi1MUiwgdGhpcyBpcyBsb2NhdGVkCisgKiAgICBhdCBQaW4gMTggKFI2OTAyKQorICoKKyAqICAtIFRoZSBQaW4gaXMgYWxzbyBwcmludGVkIHdoZW4gY2FsbGluZyB0aGUgInVzZXRsZWQiIGZ1bmN0aW9uCisgKiAgICBjb250YWluZWQgaW4gdGhlIHVibnRhcHAgYm9vdGxvYWRlciBhcHBsaWNhdGlvbi4KKyAqLworCisjZGVmaW5lIFVCTlRfTEVEQkFSX01BWF9CUklHSFRORVNTCQkweGZmCisKKyNkZWZpbmUgVUJOVF9MRURCQVJfVFJBTlNBQ1RJT05fTEVOR1RICTgKKyNkZWZpbmUgVUJOVF9MRURCQVJfVFJBTlNBQ1RJT05fU1VDQ0VTUwkweGFhCisKKyNkZWZpbmUgVUJOVF9MRURCQVJfVFJBTlNBQ1RJT05fQkxVRV9JRFgJMgorI2RlZmluZSBVQk5UX0xFREJBUl9UUkFOU0FDVElPTl9HUkVFTl9JRFgJMworI2RlZmluZSBVQk5UX0xFREJBUl9UUkFOU0FDVElPTl9SRURfSURYCQk0CisKK3N0cnVjdCB1Ym50X2xlZGJhciB7CisJc3RydWN0IG11dGV4IGxvY2s7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2IGxlZF9yZWQ7CisJc3RydWN0IGxlZF9jbGFzc2RldiBsZWRfZ3JlZW47CisJc3RydWN0IGxlZF9jbGFzc2RldiBsZWRfYmx1ZTsKKwlzdHJ1Y3QgZ3Bpb19kZXNjICplbmFibGVfZ3BpbzsKK307CisKK3N0YXRpYyBpbnQgdWJudF9sZWRiYXJfcGVyZm9ybV90cmFuc2FjdGlvbihzdHJ1Y3QgdWJudF9sZWRiYXIgKmxlZGJhciwKKwkJCQkJICAgY2hhciAqdHJhbnNhY3Rpb24pCit7CisJaW50IHJldDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBVQk5UX0xFREJBUl9UUkFOU0FDVElPTl9MRU5HVEg7IGkrKykKKwkJaTJjX3NtYnVzX3dyaXRlX2J5dGUobGVkYmFyLT5jbGllbnQsIHRyYW5zYWN0aW9uW2ldKTsKKworCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlKGxlZGJhci0+Y2xpZW50KTsKK30KKworc3RhdGljIGludCB1Ym50X2xlZGJhcl9hcHBseV9zdGF0ZShzdHJ1Y3QgdWJudF9sZWRiYXIgKmxlZGJhcikKK3sKKwljaGFyIHNldHVwX21zZ1tVQk5UX0xFREJBUl9UUkFOU0FDVElPTl9MRU5HVEhdID0gezB4NDAsIDB4MTAsIDB4MDAsIDB4MDAsCisJCQkJCQkJICAweDAwLCAweDAwLCAweDAwLCAweDExfTsKKwljaGFyIGxlZF9tc2dbVUJOVF9MRURCQVJfVFJBTlNBQ1RJT05fTEVOR1RIXSA9IHsweDQwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCQkJCTB4MDAsIDB4MDAsIDB4MDEsIDB4MDB9OworCWNoYXIgaTJjX3Jlc3BvbnNlOworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmbGVkYmFyLT5sb2NrKTsKKworCWxlZF9tc2dbVUJOVF9MRURCQVJfVFJBTlNBQ1RJT05fQkxVRV9JRFhdID0gbGVkYmFyLT5sZWRfYmx1ZS5icmlnaHRuZXNzOworCWxlZF9tc2dbVUJOVF9MRURCQVJfVFJBTlNBQ1RJT05fR1JFRU5fSURYXSA9IGxlZGJhci0+bGVkX2dyZWVuLmJyaWdodG5lc3M7CisJbGVkX21zZ1tVQk5UX0xFREJBUl9UUkFOU0FDVElPTl9SRURfSURYXSA9IGxlZGJhci0+bGVkX3JlZC5icmlnaHRuZXNzOworCisJZ3Bpb2Rfc2V0X3Jhd192YWx1ZShsZWRiYXItPmVuYWJsZV9ncGlvLCAxKTsKKworCW1zbGVlcCgxMCk7CisKKwlpMmNfcmVzcG9uc2UgPSB1Ym50X2xlZGJhcl9wZXJmb3JtX3RyYW5zYWN0aW9uKGxlZGJhciwgc2V0dXBfbXNnKTsKKwlpZiAoaTJjX3Jlc3BvbnNlICE9IFVCTlRfTEVEQkFSX1RSQU5TQUNUSU9OX1NVQ0NFU1MpIHsKKwkJZGV2X2VycigmbGVkYmFyLT5jbGllbnQtPmRldiwgIkVycm9yIGluaXRpYWxpemluZyBMRUQgdHJhbnNhY3Rpb246ICUwMnhcbiIsIHJldCk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X2dwaW87CisJfQorCisJaTJjX3Jlc3BvbnNlID0gdWJudF9sZWRiYXJfcGVyZm9ybV90cmFuc2FjdGlvbihsZWRiYXIsIGxlZF9tc2cpOworCWlmIChpMmNfcmVzcG9uc2UgIT0gVUJOVF9MRURCQVJfVFJBTlNBQ1RJT05fU1VDQ0VTUykgeworCQlkZXZfZXJyKCZsZWRiYXItPmNsaWVudC0+ZGV2LCAiRmFpbGVkIExFRCB0cmFuc2FjdGlvbjogJTAyeFxuIiwgcmV0KTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXRfZ3BpbzsKKwl9CisKKwltc2xlZXAoMTApOworb3V0X2dwaW86CisJZ3Bpb2Rfc2V0X3Jhd192YWx1ZShsZWRiYXItPmVuYWJsZV9ncGlvLCAwKTsKKworCW11dGV4X3VubG9jaygmbGVkYmFyLT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgVUJOVF9MRURCQVJfQ09OVFJPTF9SR0JTKG5hbWUpCQkJCVwKK3N0YXRpYyBpbnQgdWJudF9sZWRiYXJfc2V0XyMjbmFtZSMjX2JyaWdodG5lc3Moc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXAorCQkJCQllbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlKQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCB1Ym50X2xlZGJhciAqbGVkYmFyID0gXAorCQkJY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgdWJudF9sZWRiYXIsIGxlZF8jI25hbWUpOyBcCisJaW50IHJldDsgXAorCWxlZF9jZGV2LT5icmlnaHRuZXNzID0gdmFsdWU7IFwKKwlyZXQgPSB1Ym50X2xlZGJhcl9hcHBseV9zdGF0ZShsZWRiYXIpOyBcCisJcmV0dXJuIHJldDsgXAorfQorCitVQk5UX0xFREJBUl9DT05UUk9MX1JHQlMocmVkKTsKK1VCTlRfTEVEQkFSX0NPTlRST0xfUkdCUyhncmVlbik7CitVQk5UX0xFREJBUl9DT05UUk9MX1JHQlMoYmx1ZSk7CisKKworc3RhdGljIGludCB1Ym50X2xlZGJhcl9pbml0X2xlZChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBzdHJ1Y3QgdWJudF9sZWRiYXIgKmxlZGJhciwKKwkJCQlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKK3sKKwlzdHJ1Y3QgbGVkX2luaXRfZGF0YSBpbml0X2RhdGEgPSB7fTsKKwlpbnQgcmV0OworCisJaWYgKCFucCkKKwkJcmV0dXJuIDA7CisKKwlpbml0X2RhdGEuZndub2RlID0gb2ZfZndub2RlX2hhbmRsZShucCk7CisKKwlsZWRfY2Rldi0+bWF4X2JyaWdodG5lc3MgPSBVQk5UX0xFREJBUl9NQVhfQlJJR0hUTkVTUzsKKworCXJldCA9IGRldm1fbGVkX2NsYXNzZGV2X3JlZ2lzdGVyX2V4dCgmbGVkYmFyLT5jbGllbnQtPmRldiwgbGVkX2NkZXYsCisJCQkJCSAgICAgJmluaXRfZGF0YSk7CisJaWYgKHJldCkKKwkJZGV2X2VycigmbGVkYmFyLT5jbGllbnQtPmRldiwgImxlZCByZWdpc3RlciBlcnI6ICVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworCitzdGF0aWMgaW50IHVibnRfbGVkYmFyX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gY2xpZW50LT5kZXYub2Zfbm9kZTsKKwlzdHJ1Y3QgdWJudF9sZWRiYXIgKmxlZGJhcjsKKwlpbnQgcmV0OworCisJbGVkYmFyID0gZGV2bV9remFsbG9jKCZjbGllbnQtPmRldiwgc2l6ZW9mKCpsZWRiYXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxlZGJhcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlsZWRiYXItPmVuYWJsZV9ncGlvID0gZGV2bV9ncGlvZF9nZXQoJmNsaWVudC0+ZGV2LCAiZW5hYmxlIiwgR1BJT0RfT1VUX0xPVyk7CisKKwlpZiAoSVNfRVJSKGxlZGJhci0+ZW5hYmxlX2dwaW8pKSB7CisJCXJldCA9IFBUUl9FUlIobGVkYmFyLT5lbmFibGVfZ3Bpbyk7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiRmFpbGVkIHRvIGdldCBlbmFibGUgZ3BpbzogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZ3Bpb2RfZGlyZWN0aW9uX291dHB1dChsZWRiYXItPmVuYWJsZV9ncGlvLCAwKTsKKworCWxlZGJhci0+Y2xpZW50ID0gY2xpZW50OworCisJbXV0ZXhfaW5pdCgmbGVkYmFyLT5sb2NrKTsKKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGxlZGJhcik7CisKKwlsZWRiYXItPmxlZF9yZWQuYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcgPSB1Ym50X2xlZGJhcl9zZXRfcmVkX2JyaWdodG5lc3M7CisJdWJudF9sZWRiYXJfaW5pdF9sZWQob2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsICJyZWQiKSwgbGVkYmFyLCAmbGVkYmFyLT5sZWRfcmVkKTsKKworCWxlZGJhci0+bGVkX2dyZWVuLmJyaWdodG5lc3Nfc2V0X2Jsb2NraW5nID0gdWJudF9sZWRiYXJfc2V0X2dyZWVuX2JyaWdodG5lc3M7CisJdWJudF9sZWRiYXJfaW5pdF9sZWQob2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsICJncmVlbiIpLCBsZWRiYXIsICZsZWRiYXItPmxlZF9ncmVlbik7CisKKwlsZWRiYXItPmxlZF9ibHVlLmJyaWdodG5lc3Nfc2V0X2Jsb2NraW5nID0gdWJudF9sZWRiYXJfc2V0X2JsdWVfYnJpZ2h0bmVzczsKKwl1Ym50X2xlZGJhcl9pbml0X2xlZChvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwgImJsdWUiKSwgbGVkYmFyLCAmbGVkYmFyLT5sZWRfYmx1ZSk7CisKKwlyZXR1cm4gdWJudF9sZWRiYXJfYXBwbHlfc3RhdGUobGVkYmFyKTsKK30KKworc3RhdGljIGludCB1Ym50X2xlZGJhcl9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgdWJudF9sZWRiYXIgKmxlZGJhciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJbXV0ZXhfZGVzdHJveSgmbGVkYmFyLT5sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgdWJudF9sZWRiYXJfaWRbXSA9IHsKKwl7ICJ1Ym50LWxlZGJhciIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgdWJudF9sZWRiYXJfaWQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl91Ym50X2xlZGJhcl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAidWJudCxsZWRiYXIiLCB9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9mX3VibnRfbGVkYmFyX21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHVibnRfbGVkYmFyX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJ1Ym50LWxlZGJhciIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG9mX3VibnRfbGVkYmFyX21hdGNoLAorCX0sCisJLnByb2JlCQk9IHVibnRfbGVkYmFyX3Byb2JlLAorCS5yZW1vdmUJCT0gdWJudF9sZWRiYXJfcmVtb3ZlLAorCS5pZF90YWJsZQk9IHVibnRfbGVkYmFyX2lkLAorfTsKK21vZHVsZV9pMmNfZHJpdmVyKHVibnRfbGVkYmFyX2RyaXZlcik7CisKK01PRFVMRV9ERVNDUklQVElPTigiVWJpcXVpdGkgTEVEQkFSIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiRGF2aWQgQmF1ZXIgPG1haWxAZGF2aWQtYmF1ZXIubmV0PiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL21pc2MvbWVkaWF0ZWsvS2NvbmZpZyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9taXNjL21lZGlhdGVrL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE1ZDJiMAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9taXNjL21lZGlhdGVrL0tjb25maWcKQEAgLTAsMCArMSwzIEBACittZW51ICJNZWRpYXRlayBNaXNjIgorc291cmNlICJkcml2ZXJzL21pc2MvbWVkaWF0ZWsvaWNlX2RlYnVnL0tjb25maWciCitlbmRtZW51CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbWlzYy9tZWRpYXRlay9NYWtlZmlsZSBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9taXNjL21lZGlhdGVrL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZTc0NjUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbWlzYy9tZWRpYXRlay9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmotJChDT05GSUdfTVRLX0lDRV9ERUJVRykgKz1pY2VfZGVidWcvCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbWlzYy9tZWRpYXRlay9pY2VfZGVidWcvS2NvbmZpZyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9taXNjL21lZGlhdGVrL2ljZV9kZWJ1Zy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzOGYzZDMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbWlzYy9tZWRpYXRlay9pY2VfZGVidWcvS2NvbmZpZwpAQCAtMCwwICsxLDMgQEAKK2NvbmZpZyBNVEtfSUNFX0RFQlVHCisJYm9vbCAiSUNFX0RFQlVHIgorCWRlZmF1bHQgeSBpZiBBUkNIX01FRElBVEVLCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbWlzYy9tZWRpYXRlay9pY2VfZGVidWcvTWFrZWZpbGUgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbWlzYy9tZWRpYXRlay9pY2VfZGVidWcvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ1NDE1OQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9taXNjL21lZGlhdGVrL2ljZV9kZWJ1Zy9NYWtlZmlsZQpAQCAtMCwwICsxLDE0IEBACisjCisjIENvcHlyaWdodCAoQykgMjAxNSBNZWRpYVRlayBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisKK29iai0kKENPTkZJR19NVEtfSUNFX0RFQlVHKSArPSBpY2VfZGVidWcubwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL21pc2MvbWVkaWF0ZWsvaWNlX2RlYnVnL2ljZV9kZWJ1Zy5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL21pc2MvbWVkaWF0ZWsvaWNlX2RlYnVnL2ljZV9kZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NzdhNDUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbWlzYy9tZWRpYXRlay9pY2VfZGVidWcvaWNlX2RlYnVnLmMKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbCBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdDI3MDFfaWNlZGJnX21hdGNoW10gPSB7CisJey5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10MjcwMS1pY2VfZGVidWciLCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG10MjcwMV9pY2VkYmdfbWF0Y2gpOworCitzdGF0aWMgaW50IG10a19pY2VfZGVidWdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgY2xrICpjbGtfaWNlZGJnOworCisJY2xrX2ljZWRiZyA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAiaWNlX2RiZyIpOworCWlmIChJU19FUlIoY2xrX2ljZWRiZykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZ2V0IGljZV9kYmcgY2xvY2sgZmFpbDogJWxkXG4iLAorCQkJCVBUUl9FUlIoY2xrX2ljZWRiZykpOworCQlyZXR1cm4gUFRSX0VSUihjbGtfaWNlZGJnKTsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoY2xrX2ljZWRiZyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qZW5hYmxlIENLX1RPUF9BUk1fREJfSlRTRUwgY2xrKi8KKwljbGtfaWNlZGJnID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJkYmdfanRzZWwiKTsKKwlpZiAoSVNfRVJSKGNsa19pY2VkYmcpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImdldCBkYmdfc2VsIGNsb2NrIGZhaWw6ICVsZFxuIiwKKwkJCQlQVFJfRVJSKGNsa19pY2VkYmcpKTsKKwkJcmV0dXJuIFBUUl9FUlIoY2xrX2ljZWRiZyk7CisJfQorCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGNsa19pY2VkYmcpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2ljZWRiZ19kcml2ZXIgPSB7CisJLnByb2JlID0gbXRrX2ljZV9kZWJ1Z19wcm9iZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJtZWRpYXRlayxtdDI3MDEtaWNlX2RlYnVnIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5vZl9tYXRjaF90YWJsZSA9IG10MjcwMV9pY2VkYmdfbWF0Y2gsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG10a19pY2VfZGVidWdfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm10a19pY2VkYmdfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KG10a19pY2VfZGVidWdfaW5pdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWVkaWFUZWsgTVQyNzAxIElDRV9ERUJVRyBEcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIk1hb2d1YW5nIE1lbmcgPG1hb2d1YW5nLm1lbmdAbWVkaWF0ZWsuY29tPiIpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL210ZC9tdGstc25hbmQvS2NvbmZpZyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9tdGQvbXRrLXNuYW5kL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM4YjkzOQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9tdGQvbXRrLXNuYW5kL0tjb25maWcKQEAgLTAsMCArMSwxNCBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMjAgTWVkaWFUZWsgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBBdXRob3I6IFdlaWppZSBHYW8gPHdlaWppZS5nYW9AbWVkaWF0ZWsuY29tPgorIworIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorIworCitjb25maWcgTVRLX1NQSV9OQU5ECisJdHJpc3RhdGUgIk1lZGlhVGVrIFNQSSBOQU5EIGZsYXNoIGNvbnRyb2xsZXIgZHJpdmVyIgorCWRlcGVuZHMgb24gTVRECisJZGVmYXVsdCBuCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBhY2Nlc3MgdG8gU1BJLU5BTkQgZmxhc2hlcyB0aHJvdWdoIHRoZQorCSAgTVREIGludGVyZmFjZSBvZiBNZWRpYVRlayBTUEkgTkFORCBGbGFzaCBDb250cm9sbGVyCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbXRkL210ay1zbmFuZC9NYWtlZmlsZSBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9tdGQvbXRrLXNuYW5kL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzOWYxY2EKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbXRkL210ay1zbmFuZC9NYWtlZmlsZQpAQCAtMCwwICsxLDExIEBACisjCisjIENvcHlyaWdodCAoQykgMjAyMCBNZWRpYVRlayBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIEF1dGhvcjogV2VpamllIEdhbyA8d2VpamllLmdhb0BtZWRpYXRlay5jb20+CisjCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisjCisKK29iai15ICs9IG10ay1zbmFuZC5vIG10ay1zbmFuZC1lY2MubyBtdGstc25hbmQtaWRzLm8gbXRrLXNuYW5kLW9zLm8gXAorCSBtdGstc25hbmQtbXRkLm8KKworY2NmbGFncy15ICs9IC1EUFJJVkFURV9NVEtfU05BTkRfSEVBREVSCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbXRkL210ay1zbmFuZC9tdGstc25hbmQtZGVmLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbXRkL210ay1zbmFuZC9tdGstc25hbmQtZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA1OGY3YgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9tdGQvbXRrLXNuYW5kL210ay1zbmFuZC1kZWYuaApAQCAtMCwwICsxLDI3MSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTMtQ2xhdXNlICovCisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIE1lZGlhVGVrIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBBdXRob3I6IFdlaWppZSBHYW8gPHdlaWppZS5nYW9AbWVkaWF0ZWsuY29tPgorICovCisKKyNpZm5kZWYgX01US19TTkFORF9ERUZfSF8KKyNkZWZpbmUgX01US19TTkFORF9ERUZfSF8KKworI2luY2x1ZGUgIm10ay1zbmFuZC1vcy5oIgorCisjaWZkZWYgUFJJVkFURV9NVEtfU05BTkRfSEVBREVSCisjaW5jbHVkZSAibXRrLXNuYW5kLmgiCisjZWxzZQorI2luY2x1ZGUgPG10ay1zbmFuZC5oPgorI2VuZGlmCisKK3N0cnVjdCBtdGtfc25hbmRfcGxhdF9kZXY7CisKK2VudW0gc25hbmRfZmxhc2hfaW8geworCVNOQU5EX0lPXzFfMV8xLAorCVNOQU5EX0lPXzFfMV8yLAorCVNOQU5EX0lPXzFfMl8yLAorCVNOQU5EX0lPXzFfMV80LAorCVNOQU5EX0lPXzFfNF80LAorCisJX19TTkFORF9JT19NQVgKK307CisKKyNkZWZpbmUgU1BJX0lPXzFfMV8xCQkJQklUKFNOQU5EX0lPXzFfMV8xKQorI2RlZmluZSBTUElfSU9fMV8xXzIJCQlCSVQoU05BTkRfSU9fMV8xXzIpCisjZGVmaW5lIFNQSV9JT18xXzJfMgkJCUJJVChTTkFORF9JT18xXzJfMikKKyNkZWZpbmUgU1BJX0lPXzFfMV80CQkJQklUKFNOQU5EX0lPXzFfMV80KQorI2RlZmluZSBTUElfSU9fMV80XzQJCQlCSVQoU05BTkRfSU9fMV80XzQpCisKK3N0cnVjdCBzbmFuZF9vcGNvZGUgeworCXVpbnQ4X3Qgb3Bjb2RlOworCXVpbnQ4X3QgZHVtbXk7Cit9OworCitzdHJ1Y3Qgc25hbmRfaW9fY2FwIHsKKwl1aW50OF90IGNhcHM7CisJc3RydWN0IHNuYW5kX29wY29kZSBvcGNvZGVzW19fU05BTkRfSU9fTUFYXTsKK307CisKKyNkZWZpbmUgU05BTkRfT1AoX2lvLCBfb3Bjb2RlLCBfZHVtbXkpIFtfaW9dID0geyAub3Bjb2RlID0gKF9vcGNvZGUpLCBcCisJCQkJCQkgLmR1bW15ID0gKF9kdW1teSkgfQorCisjZGVmaW5lIFNOQU5EX0lPX0NBUChfbmFtZSwgX2NhcHMsIC4uLikgXAorCXN0cnVjdCBzbmFuZF9pb19jYXAgX25hbWUgPSB7IC5jYXBzID0gKF9jYXBzKSwgXAorCQkJCSAgICAgIC5vcGNvZGVzID0geyBfX1ZBX0FSR1NfXyB9IH0KKworI2RlZmluZSBTTkFORF9NQVhfSURfTEVOCQk0CisKK2VudW0gc25hbmRfaWRfdHlwZSB7CisJU05BTkRfSURfRFlNTVksCisJU05BTkRfSURfQUREUiA9IFNOQU5EX0lEX0RZTU1ZLAorCVNOQU5EX0lEX0RJUkVDVCwKKworCV9fU05BTkRfSURfVFlQRV9NQVgKK307CisKK3N0cnVjdCBzbmFuZF9pZCB7CisJdWludDhfdCB0eXBlOwkvKiBlbnVtIHNuYW5kX2lkX3R5cGUgKi8KKwl1aW50OF90IGxlbjsKKwl1aW50OF90IGlkW1NOQU5EX01BWF9JRF9MRU5dOworfTsKKworI2RlZmluZSBTTkFORF9JRChfdHlwZSwgLi4uKSBcCisJeyAudHlwZSA9IChfdHlwZSksIC5pZCA9IHsgX19WQV9BUkdTX18gfSwgXAorCSAgLmxlbiA9IHNpemVvZigodWludDhfdFtdKSB7IF9fVkFfQVJHU19fIH0pIH0KKworc3RydWN0IHNuYW5kX21lbV9vcmcgeworCXVpbnQxNl90IHBhZ2VzaXplOworCXVpbnQxNl90IHNwYXJlc2l6ZTsKKwl1aW50MTZfdCBwYWdlc19wZXJfYmxvY2s7CisJdWludDE2X3QgYmxvY2tzX3Blcl9kaWU7CisJdWludDE2X3QgcGxhbmVzX3Blcl9kaWU7CisJdWludDE2X3QgbmRpZXM7Cit9OworCisjZGVmaW5lIFNOQU5EX01FTU9SRyhfcHMsIF9zcywgX3BwYiwgX2JwZCwgX3BwZCwgX25kKSBcCisJeyAucGFnZXNpemUgPSAoX3BzKSwgLnNwYXJlc2l6ZSA9IChfc3MpLCAucGFnZXNfcGVyX2Jsb2NrID0gKF9wcGIpLCBcCisJICAuYmxvY2tzX3Blcl9kaWUgPSAoX2JwZCksIC5wbGFuZXNfcGVyX2RpZSA9IChfcHBkKSwgLm5kaWVzID0gKF9uZCkgfQorCit0eXBlZGVmIGludCAoKnNuYW5kX3NlbGVjdF9kaWVfdCkoc3RydWN0IG10a19zbmFuZCAqc25mLCB1aW50MzJfdCBkaWVpZHgpOworCitzdHJ1Y3Qgc25hbmRfZmxhc2hfaW5mbyB7CisJY29uc3QgY2hhciAqbW9kZWw7CisJc3RydWN0IHNuYW5kX2lkIGlkOworCWNvbnN0IHN0cnVjdCBzbmFuZF9tZW1fb3JnIG1lbW9yZzsKKwljb25zdCBzdHJ1Y3Qgc25hbmRfaW9fY2FwICpjYXBfcmQ7CisJY29uc3Qgc3RydWN0IHNuYW5kX2lvX2NhcCAqY2FwX3BsOworCXNuYW5kX3NlbGVjdF9kaWVfdCBzZWxlY3RfZGllOworfTsKKworI2RlZmluZSBTTkFORF9JTkZPKF9tb2RlbCwgX2lkLCBfbWVtb3JnLCBfY2FwX3JkLCBfY2FwX3BsLCAuLi4pIFwKKwl7IC5tb2RlbCA9IChfbW9kZWwpLCAuaWQgPSBfaWQsIC5tZW1vcmcgPSBfbWVtb3JnLCBcCisJICAuY2FwX3JkID0gKF9jYXBfcmQpLCAuY2FwX3BsID0gKF9jYXBfcGwpLCBfX1ZBX0FSR1NfXyB9CisKK2NvbnN0IHN0cnVjdCBzbmFuZF9mbGFzaF9pbmZvICpzbmFuZF9mbGFzaF9pZF9sb29rdXAoZW51bSBzbmFuZF9pZF90eXBlIHR5cGUsCisJCQkJCQkgICAgIGNvbnN0IHVpbnQ4X3QgKmlkKTsKKworc3RydWN0IG10a19zbmFuZF9zb2NfZGF0YSB7CisJdWludDE2X3Qgc2VjdG9yX3NpemU7CisJdWludDE2X3QgbWF4X3NlY3RvcnM7CisJdWludDE2X3QgZmRtX3NpemU7CisJdWludDE2X3QgZmRtX2VjY19zaXplOworCXVpbnQxNl90IGZpZm9fc2l6ZTsKKworCWJvb2wgYmJtX3N3YXA7CisJYm9vbCBlbXB0eV9wYWdlX2NoZWNrOworCXVpbnQzMl90IG1hc3RlcnN0YV9tYXNrOworCisJY29uc3QgdWludDhfdCAqc3BhcmVfc2l6ZXM7CisJdWludDMyX3QgbnVtX3NwYXJlX3NpemU7CisKKwl1aW50MTZfdCBsYXRjaF9sYXQ7CisJdWludDE2X3Qgc2FtcGxlX2RlbGF5OworfTsKKworZW51bSBtdGtfZWNjX3JlZ3MgeworCUVDQ19ERUNET05FLAorfTsKKworc3RydWN0IG10a19lY2Nfc29jX2RhdGEgeworCWNvbnN0IHVpbnQ4X3QgKmVjY19jYXBzOworCXVpbnQzMl90IG51bV9lY2NfY2FwOworCWNvbnN0IHVpbnQzMl90ICpyZWdzOworCXVpbnQxNl90IG1vZGVfc2hpZnQ7CisJdWludDhfdCBlcnJudW1fYml0czsKKwl1aW50OF90IGVycm51bV9zaGlmdDsKK307CisKK3N0cnVjdCBtdGtfc25hbmQgeworCXN0cnVjdCBtdGtfc25hbmRfcGxhdF9kZXYgKnBkZXY7CisKKwl2b2lkIF9faW9tZW0gKm5maV9iYXNlOworCXZvaWQgX19pb21lbSAqZWNjX2Jhc2U7CisKKwllbnVtIG10a19zbmFuZF9zb2Mgc29jOworCWNvbnN0IHN0cnVjdCBtdGtfc25hbmRfc29jX2RhdGEgKm5maV9zb2M7CisJY29uc3Qgc3RydWN0IG10a19lY2Nfc29jX2RhdGEgKmVjY19zb2M7CisJYm9vbCBzbmZpX3F1YWRfc3BpOworCWJvb2wgcXVhZF9zcGlfb3A7CisKKwljb25zdCBjaGFyICptb2RlbDsKKwl1aW50NjRfdCBzaXplOworCXVpbnQ2NF90IGRpZV9zaXplOworCXVpbnQzMl90IGVyYXNlc2l6ZTsKKwl1aW50MzJfdCB3cml0ZXNpemU7CisJdWludDMyX3Qgb29ic2l6ZTsKKworCXVpbnQzMl90IG51bV9kaWVzOworCXNuYW5kX3NlbGVjdF9kaWVfdCBzZWxlY3RfZGllOworCisJdWludDhfdCBvcGNvZGVfcmZjOworCXVpbnQ4X3Qgb3Bjb2RlX3BsOworCXVpbnQ4X3QgZHVtbXlfcmZjOworCXVpbnQ4X3QgbW9kZV9yZmM7CisJdWludDhfdCBtb2RlX3BsOworCisJdWludDMyX3Qgd3JpdGVzaXplX21hc2s7CisJdWludDMyX3Qgd3JpdGVzaXplX3NoaWZ0OworCXVpbnQzMl90IGVyYXNlc2l6ZV9tYXNrOworCXVpbnQzMl90IGVyYXNlc2l6ZV9zaGlmdDsKKwl1aW50NjRfdCBkaWVfbWFzazsKKwl1aW50MzJfdCBkaWVfc2hpZnQ7CisKKwl1aW50MzJfdCBzcGFyZV9wZXJfc2VjdG9yOworCXVpbnQzMl90IHJhd19zZWN0b3Jfc2l6ZTsKKwl1aW50MzJfdCBlY2Nfc3RyZW5ndGg7CisJdWludDMyX3QgZWNjX3N0ZXBzOworCXVpbnQzMl90IGVjY19ieXRlczsKKwl1aW50MzJfdCBlY2NfcGFyaXR5X2JpdHM7CisKKwl1aW50OF90ICpwYWdlX2NhY2hlOwkvKiBVc2VkIGJ5IHJlYWQvd3JpdGUgcGFnZSAqLworCXVpbnQ4X3QgKmJ1Zl9jYWNoZTsJLyogVXNlZCBieSBibG9jayBiYWQvbWFya2JhZCAmIGF1dG9fb29iICovCisJaW50ICpzZWN0X2JmOwkJLyogVXNlZCBieSBFQ0MgY29ycmVjdGlvbiAqLworfTsKKworZW51bSBtdGtfc25hbmRfbG9nX2NhdGVnb3J5IHsKKwlTTkFORF9MT0dfTkZJLAorCVNOQU5EX0xPR19TTkZJLAorCVNOQU5EX0xPR19FQ0MsCisJU05BTkRfTE9HX0NISVAsCisKKwlfX1NOQU5EX0xPR19DQVRfTUFYCit9OworCitpbnQgbXRrX2VjY19zZXR1cChzdHJ1Y3QgbXRrX3NuYW5kICpzbmYsIHZvaWQgKmZtZGFkZHIsIHVpbnQzMl90IG1heF9lY2NfYnl0ZXMsCisJCSAgdWludDMyX3QgbXNnX3NpemUpOworaW50IG10a19zbmFuZF9lY2NfZW5jb2Rlcl9zdGFydChzdHJ1Y3QgbXRrX3NuYW5kICpzbmYpOwordm9pZCBtdGtfc25hbmRfZWNjX2VuY29kZXJfc3RvcChzdHJ1Y3QgbXRrX3NuYW5kICpzbmYpOworaW50IG10a19zbmFuZF9lY2NfZGVjb2Rlcl9zdGFydChzdHJ1Y3QgbXRrX3NuYW5kICpzbmYpOwordm9pZCBtdGtfc25hbmRfZWNjX2RlY29kZXJfc3RvcChzdHJ1Y3QgbXRrX3NuYW5kICpzbmYpOworaW50IG10a19lY2Nfd2FpdF9kZWNvZGVyX2RvbmUoc3RydWN0IG10a19zbmFuZCAqc25mKTsKK2ludCBtdGtfZWNjX2NoZWNrX2RlY29kZV9lcnJvcihzdHJ1Y3QgbXRrX3NuYW5kICpzbmYpOworaW50IG10a19lY2NfZml4dXBfZW1wdHlfc2VjdG9yKHN0cnVjdCBtdGtfc25hbmQgKnNuZiwgdWludDMyX3Qgc2VjdCk7CisKK2ludCBtdGtfc25hbmRfbWFjX2lvKHN0cnVjdCBtdGtfc25hbmQgKnNuZiwgY29uc3QgdWludDhfdCAqb3V0LCB1aW50MzJfdCBvdXRsZW4sCisJCSAgICAgdWludDhfdCAqaW4sIHVpbnQzMl90IGlubGVuKTsKK2ludCBtdGtfc25hbmRfc2V0X2ZlYXR1cmUoc3RydWN0IG10a19zbmFuZCAqc25mLCB1aW50MzJfdCBhZGRyLCB1aW50MzJfdCB2YWwpOworCitpbnQgbXRrX3NuYW5kX2xvZyhzdHJ1Y3QgbXRrX3NuYW5kX3BsYXRfZGV2ICpwZGV2LAorCQkgIGVudW0gbXRrX3NuYW5kX2xvZ19jYXRlZ29yeSBjYXQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworI2RlZmluZSBzbmFuZF9sb2dfbmZpKHBkZXYsIGZtdCwgLi4uKSBcCisJbXRrX3NuYW5kX2xvZyhwZGV2LCBTTkFORF9MT0dfTkZJLCBmbXQsICMjX19WQV9BUkdTX18pCisKKyNkZWZpbmUgc25hbmRfbG9nX3NuZmkocGRldiwgZm10LCAuLi4pIFwKKwltdGtfc25hbmRfbG9nKHBkZXYsIFNOQU5EX0xPR19TTkZJLCBmbXQsICMjX19WQV9BUkdTX18pCisKKyNkZWZpbmUgc25hbmRfbG9nX2VjYyhwZGV2LCBmbXQsIC4uLikgXAorCW10a19zbmFuZF9sb2cocGRldiwgU05BTkRfTE9HX0VDQywgZm10LCAjI19fVkFfQVJHU19fKQorCisjZGVmaW5lIHNuYW5kX2xvZ19jaGlwKHBkZXYsIGZtdCwgLi4uKSBcCisJbXRrX3NuYW5kX2xvZyhwZGV2LCBTTkFORF9MT0dfQ0hJUCwgZm10LCAjI19fVkFfQVJHU19fKQorCisvKiBmZnM2NCAqLworc3RhdGljIGlubGluZSBpbnQgbXRrX3NuYW5kX2ZmczY0KHVpbnQ2NF90IHgpCit7CisJaWYgKCF4KQorCQlyZXR1cm4gMDsKKworCWlmICghKHggJiAweGZmZmZmZmZmKSkKKwkJcmV0dXJuIGZmcygodWludDMyX3QpKHggPj4gMzIpKSArIDMyOworCisJcmV0dXJuIGZmcygodWludDMyX3QpKHggJiAweGZmZmZmZmZmKSk7Cit9CisKKy8qIE5GSSBkdW1teSBjb21tYW5kcyAqLworI2RlZmluZSBORklfQ01EX0RVTU1ZX1JFQUQJCTB4MDAKKyNkZWZpbmUgTkZJX0NNRF9EVU1NWV9XUklURQkJMHg4MAorCisvKiBTUEktTkFORCBvcGNvZGVzICovCisjZGVmaW5lIFNOQU5EX0NNRF9SRVNFVAkJCTB4ZmYKKyNkZWZpbmUgU05BTkRfQ01EX0JMT0NLX0VSQVNFCQkweGQ4CisjZGVmaW5lIFNOQU5EX0NNRF9SRUFEX0ZST01fQ0FDSEVfUVVBRAkweGViCisjZGVmaW5lIFNOQU5EX0NNRF9XSU5CT05EX1NFTEVDVF9ESUUJMHhjMgorI2RlZmluZSBTTkFORF9DTURfUkVBRF9GUk9NX0NBQ0hFX0RVQUwJMHhiYgorI2RlZmluZSBTTkFORF9DTURfUkVBRElECQkweDlmCisjZGVmaW5lIFNOQU5EX0NNRF9SRUFEX0ZST01fQ0FDSEVfWDQJMHg2YgorI2RlZmluZSBTTkFORF9DTURfUkVBRF9GUk9NX0NBQ0hFX1gyCTB4M2IKKyNkZWZpbmUgU05BTkRfQ01EX1BST0dSQU1fTE9BRF9YNAkweDMyCisjZGVmaW5lIFNOQU5EX0NNRF9TRVRfRkVBVFVSRQkJMHgxZgorI2RlZmluZSBTTkFORF9DTURfUkVBRF9UT19DQUNIRQkJMHgxMworI2RlZmluZSBTTkFORF9DTURfUFJPR1JBTV9FWEVDVVRFCTB4MTAKKyNkZWZpbmUgU05BTkRfQ01EX0dFVF9GRUFUVVJFCQkweDBmCisjZGVmaW5lIFNOQU5EX0NNRF9SRUFEX0ZST01fQ0FDSEUJMHgwYgorI2RlZmluZSBTTkFORF9DTURfV1JJVEVfRU5BQkxFCQkweDA2CisjZGVmaW5lIFNOQU5EX0NNRF9QUk9HUkFNX0xPQUQJCTB4MDIKKworLyogU1BJLU5BTkQgZmVhdHVyZSBhZGRyZXNzZXMgKi8KKyNkZWZpbmUgU05BTkRfRkVBVFVSRV9NSUNST05fRElFX0FERFIJMHhkMAorI2RlZmluZSBTTkFORF9NSUNST05fRElFX1NFTF8xCQlCSVQoNikKKworI2RlZmluZSBTTkFORF9GRUFUVVJFX1NUQVRVU19BRERSCTB4YzAKKyNkZWZpbmUgU05BTkRfU1RBVFVTX09JUAkJQklUKDApCisjZGVmaW5lIFNOQU5EX1NUQVRVU19XRUwJCUJJVCgxKQorI2RlZmluZSBTTkFORF9TVEFUVVNfRVJBU0VfRkFJTAkJQklUKDIpCisjZGVmaW5lIFNOQU5EX1NUQVRVU19QUk9HUkFNX0ZBSUwJQklUKDMpCisKKyNkZWZpbmUgU05BTkRfRkVBVFVSRV9DT05GSUdfQUREUgkweGIwCisjZGVmaW5lIFNOQU5EX0ZFQVRVUkVfUVVBRF9FTkFCTEUJQklUKDApCisjZGVmaW5lIFNOQU5EX0ZFQVRVUkVfRUNDX0VOCQlCSVQoNCkKKworI2RlZmluZSBTTkFORF9GRUFUVVJFX1BST1RFQ1RfQUREUgkweGEwCisKKyNlbmRpZiAvKiBfTVRLX1NOQU5EX0RFRl9IXyAqLwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL210ZC9tdGstc25hbmQvbXRrLXNuYW5kLWVjYy5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL210ZC9tdGstc25hbmQvbXRrLXNuYW5kLWVjYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwOTQzMzkKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbXRkL210ay1zbmFuZC9tdGstc25hbmQtZWNjLmMKQEAgLTAsMCArMSwzOTUgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0zLUNsYXVzZQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBNZWRpYVRlayBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQXV0aG9yOiBXZWlqaWUgR2FvIDx3ZWlqaWUuZ2FvQG1lZGlhdGVrLmNvbT4KKyAqLworCisjaW5jbHVkZSAibXRrLXNuYW5kLWRlZi5oIgorCisvKiBFQ0MgcmVnaXN0ZXJzICovCisjZGVmaW5lIEVDQ19FTkNDT04JCQkweDAwMAorI2RlZmluZSBFTkNfRU4JCQkJQklUKDApCisKKyNkZWZpbmUgRUNDX0VOQ0NORkcJCQkweDAwNAorI2RlZmluZSBFTkNfTVNfUwkJCTE2CisjZGVmaW5lIEVOQ19CVVJTVF9FTgkJCUJJVCg4KQorI2RlZmluZSBFTkNfVE5VTV9TCQkJMAorCisjZGVmaW5lIEVDQ19FTkNJRExFCQkJMHgwMGMKKyNkZWZpbmUgRU5DX0lETEUJCQlCSVQoMCkKKworI2RlZmluZSBFQ0NfREVDQ09OCQkJMHgxMDAKKyNkZWZpbmUgREVDX0VOCQkJCUJJVCgwKQorCisjZGVmaW5lIEVDQ19ERUNDTkZHCQkJMHgxMDQKKyNkZWZpbmUgREVDX0VNUFRZX0VOCQkJQklUKDMxKQorI2RlZmluZSBERUNfQ1NfUwkJCTE2CisjZGVmaW5lIERFQ19DT05fUwkJCTEyCisjZGVmaW5lICAgREVDX0NPTl9DT1JSRUNUCQkzCisjZGVmaW5lIERFQ19CVVJTVF9FTgkJCUJJVCg4KQorI2RlZmluZSBERUNfVE5VTV9TCQkJMAorCisjZGVmaW5lIEVDQ19ERUNJRExFCQkJMHgxMGMKKyNkZWZpbmUgREVDX0lETEUJCQlCSVQoMCkKKworI2RlZmluZSBFQ0NfREVDRU5VTTAJCQkweDExNAorI2RlZmluZSBFQ0NfREVDRU5VTShuKQkJCShFQ0NfREVDRU5VTTAgKyAobikgKiA0KQorCisvKiBFQ0NfRU5DSURMRSAmIEVDQ19ERUNJRExFICovCisjZGVmaW5lIEVDQ19JRExFCQkJQklUKDApCisKKy8qIEVOQ19NT0RFICYgREVDX01PREUgKi8KKyNkZWZpbmUgRUNDX01PREVfTkZJCQkJMQorCisjZGVmaW5lIEVDQ19USU1FT1VUCQkJNTAwMDAwCisKK3N0YXRpYyBjb25zdCB1aW50OF90IG10NzYyMl9lY2NfY2Fwc1tdID0geyA0LCA2LCA4LCAxMCwgMTIgfTsKKworc3RhdGljIGNvbnN0IHVpbnQ4X3QgbXQ3OTg2X2VjY19jYXBzW10gPSB7CisJNCwgNiwgOCwgMTAsIDEyLCAxNCwgMTYsIDE4LCAyMCwgMjIsIDI0Cit9OworCitzdGF0aWMgY29uc3QgdWludDMyX3QgbXQ3NjIyX2VjY19yZWdzW10gPSB7CisJW0VDQ19ERUNET05FXSA9IDB4MTFjLAorfTsKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IG10Nzk4Nl9lY2NfcmVnc1tdID0geworCVtFQ0NfREVDRE9ORV0gPSAweDEyNCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2VjY19zb2NfZGF0YSBtdGtfZWNjX3NvY3NbX19TTkFORF9TT0NfTUFYXSA9IHsKKwlbU05BTkRfU09DX01UNzYyMl0gPSB7CisJCS5lY2NfY2FwcyA9IG10NzYyMl9lY2NfY2FwcywKKwkJLm51bV9lY2NfY2FwID0gQVJSQVlfU0laRShtdDc2MjJfZWNjX2NhcHMpLAorCQkucmVncyA9IG10NzYyMl9lY2NfcmVncywKKwkJLm1vZGVfc2hpZnQgPSA0LAorCQkuZXJybnVtX2JpdHMgPSA1LAorCQkuZXJybnVtX3NoaWZ0ID0gNSwKKwl9LAorCVtTTkFORF9TT0NfTVQ3NjI5XSA9IHsKKwkJLmVjY19jYXBzID0gbXQ3NjIyX2VjY19jYXBzLAorCQkubnVtX2VjY19jYXAgPSBBUlJBWV9TSVpFKG10NzYyMl9lY2NfY2FwcyksCisJCS5yZWdzID0gbXQ3NjIyX2VjY19yZWdzLAorCQkubW9kZV9zaGlmdCA9IDQsCisJCS5lcnJudW1fYml0cyA9IDUsCisJCS5lcnJudW1fc2hpZnQgPSA1LAorCX0sCisJW1NOQU5EX1NPQ19NVDc5ODZdID0geworCQkuZWNjX2NhcHMgPSBtdDc5ODZfZWNjX2NhcHMsCisJCS5udW1fZWNjX2NhcCA9IEFSUkFZX1NJWkUobXQ3OTg2X2VjY19jYXBzKSwKKwkJLnJlZ3MgPSBtdDc5ODZfZWNjX3JlZ3MsCisJCS5tb2RlX3NoaWZ0ID0gNSwKKwkJLmVycm51bV9iaXRzID0gNSwKKwkJLmVycm51bV9zaGlmdCA9IDgsCisJfSwKK307CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgZWNjX3JlYWQzMihzdHJ1Y3QgbXRrX3NuYW5kICpzbmYsIHVpbnQzMl90IHJlZykKK3sKKwlyZXR1cm4gcmVhZGwoc25mLT5lY2NfYmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlY2Nfd3JpdGUzMihzdHJ1Y3QgbXRrX3NuYW5kICpzbmYsIHVpbnQzMl90IHJlZywKKwkJCSAgICAgICB1aW50MzJfdCB2YWwpCit7CisJd3JpdGVsKHZhbCwgc25mLT5lY2NfYmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlY2Nfd3JpdGUxNihzdHJ1Y3QgbXRrX3NuYW5kICpzbmYsIHVpbnQzMl90IHJlZywKKwkJCSAgICAgICB1aW50MTZfdCB2YWwpCit7CisJd3JpdGV3KHZhbCwgc25mLT5lY2NfYmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2VjY19wb2xsKHN0cnVjdCBtdGtfc25hbmQgKnNuZiwgdWludDMyX3QgcmVnLCB1aW50MzJfdCBiaXRzKQoreworCXVpbnQzMl90IHZhbDsKKworCXJldHVybiByZWFkMTZfcG9sbF90aW1lb3V0KHNuZi0+ZWNjX2Jhc2UgKyByZWcsIHZhbCwgKHZhbCAmIGJpdHMpLCAwLAorCQkJCSAgIEVDQ19USU1FT1VUKTsKK30KKworc3RhdGljIGludCBtdGtfZWNjX3dhaXRfaWRsZShzdHJ1Y3QgbXRrX3NuYW5kICpzbmYsIHVpbnQzMl90IHJlZykKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gbXRrX2VjY19wb2xsKHNuZiwgcmVnLCBFQ0NfSURMRSk7CisJaWYgKHJldCkgeworCQlzbmFuZF9sb2dfZWNjKHNuZi0+cGRldiwgIkVDQyBlbmdpbmUgaXMgYnVzeVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBtdGtfZWNjX3NldHVwKHN0cnVjdCBtdGtfc25hbmQgKnNuZiwgdm9pZCAqZm1kYWRkciwgdWludDMyX3QgbWF4X2VjY19ieXRlcywKKwkJICB1aW50MzJfdCBtc2dfc2l6ZSkKK3sKKwl1aW50MzJfdCBpLCB2YWwsIGVjY19tc2dfYml0cywgZWNjX3N0cmVuZ3RoOworCWludCByZXQ7CisKKwlzbmYtPmVjY19zb2MgPSAmbXRrX2VjY19zb2NzW3NuZi0+c29jXTsKKworCXNuZi0+ZWNjX3Bhcml0eV9iaXRzID0gZmxzKDEgKyA4ICogbXNnX3NpemUpOworCWVjY19zdHJlbmd0aCA9IG1heF9lY2NfYnl0ZXMgKiA4IC8gc25mLT5lY2NfcGFyaXR5X2JpdHM7CisKKwlmb3IgKGkgPSBzbmYtPmVjY19zb2MtPm51bV9lY2NfY2FwIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJaWYgKHNuZi0+ZWNjX3NvYy0+ZWNjX2NhcHNbaV0gPD0gZWNjX3N0cmVuZ3RoKQorCQkJYnJlYWs7CisJfQorCisJaWYgKHVubGlrZWx5KGkgPCAwKSkgeworCQlzbmFuZF9sb2dfZWNjKHNuZi0+cGRldiwgIlBhZ2Ugc2l6ZSAldSsldSBpcyBub3Qgc3VwcG9ydGVkXG4iLAorCQkJICAgICAgc25mLT53cml0ZXNpemUsIHNuZi0+b29ic2l6ZSk7CisJCXJldHVybiAtRU5PVFNVUFA7CisJfQorCisJc25mLT5lY2Nfc3RyZW5ndGggPSBzbmYtPmVjY19zb2MtPmVjY19jYXBzW2ldOworCXNuZi0+ZWNjX2J5dGVzID0gRElWX1JPVU5EX1VQKHNuZi0+ZWNjX3N0cmVuZ3RoICogc25mLT5lY2NfcGFyaXR5X2JpdHMsCisJCQkJICAgICAgOCk7CisKKwkvKiBFbmNvZGVyIGNvbmZpZyAqLworCWVjY193cml0ZTE2KHNuZiwgRUNDX0VOQ0NPTiwgMCk7CisJcmV0ID0gbXRrX2VjY193YWl0X2lkbGUoc25mLCBFQ0NfRU5DSURMRSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWVjY19tc2dfYml0cyA9IG1zZ19zaXplICogODsKKwl2YWwgPSAoZWNjX21zZ19iaXRzIDw8IEVOQ19NU19TKSB8CisJICAgICAgKEVDQ19NT0RFX05GSSA8PCBzbmYtPmVjY19zb2MtPm1vZGVfc2hpZnQpIHwgaTsKKwllY2Nfd3JpdGUzMihzbmYsIEVDQ19FTkNDTkZHLCB2YWwpOworCisJLyogRGVjb2RlciBjb25maWcgKi8KKwllY2Nfd3JpdGUxNihzbmYsIEVDQ19ERUNDT04sIDApOworCXJldCA9IG10a19lY2Nfd2FpdF9pZGxlKHNuZiwgRUNDX0RFQ0lETEUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwllY2NfbXNnX2JpdHMgKz0gc25mLT5lY2Nfc3RyZW5ndGggKiBzbmYtPmVjY19wYXJpdHlfYml0czsKKwl2YWwgPSBERUNfRU1QVFlfRU4gfCAoZWNjX21zZ19iaXRzIDw8IERFQ19DU19TKSB8CisJICAgICAgKERFQ19DT05fQ09SUkVDVCA8PCBERUNfQ09OX1MpIHwKKwkgICAgICAoRUNDX01PREVfTkZJIDw8IHNuZi0+ZWNjX3NvYy0+bW9kZV9zaGlmdCkgfCBpOworCWVjY193cml0ZTMyKHNuZiwgRUNDX0RFQ0NORkcsIHZhbCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG10a19zbmFuZF9lY2NfZW5jb2Rlcl9zdGFydChzdHJ1Y3QgbXRrX3NuYW5kICpzbmYpCit7CisJaW50IHJldDsKKworCXJldCA9IG10a19lY2Nfd2FpdF9pZGxlKHNuZiwgRUNDX0VOQ0lETEUpOworCWlmIChyZXQpIHsKKwkJZWNjX3dyaXRlMTYoc25mLCBFQ0NfRU5DQ09OLCAwKTsKKwkJbXRrX2VjY193YWl0X2lkbGUoc25mLCBFQ0NfRU5DSURMRSk7CisJfQorCisJZWNjX3dyaXRlMTYoc25mLCBFQ0NfRU5DQ09OLCBFTkNfRU4pOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbXRrX3NuYW5kX2VjY19lbmNvZGVyX3N0b3Aoc3RydWN0IG10a19zbmFuZCAqc25mKQoreworCW10a19lY2Nfd2FpdF9pZGxlKHNuZiwgRUNDX0VOQ0lETEUpOworCWVjY193cml0ZTE2KHNuZiwgRUNDX0VOQ0NPTiwgMCk7Cit9CisKK2ludCBtdGtfc25hbmRfZWNjX2RlY29kZXJfc3RhcnQoc3RydWN0IG10a19zbmFuZCAqc25mKQoreworCWludCByZXQ7CisKKwlyZXQgPSBtdGtfZWNjX3dhaXRfaWRsZShzbmYsIEVDQ19ERUNJRExFKTsKKwlpZiAocmV0KSB7CisJCWVjY193cml0ZTE2KHNuZiwgRUNDX0RFQ0NPTiwgMCk7CisJCW10a19lY2Nfd2FpdF9pZGxlKHNuZiwgRUNDX0RFQ0lETEUpOworCX0KKworCWVjY193cml0ZTE2KHNuZiwgRUNDX0RFQ0NPTiwgREVDX0VOKTsKKworCXJldHVybiAwOworfQorCit2b2lkIG10a19zbmFuZF9lY2NfZGVjb2Rlcl9zdG9wKHN0cnVjdCBtdGtfc25hbmQgKnNuZikKK3sKKwltdGtfZWNjX3dhaXRfaWRsZShzbmYsIEVDQ19ERUNJRExFKTsKKwllY2Nfd3JpdGUxNihzbmYsIEVDQ19ERUNDT04sIDApOworfQorCitpbnQgbXRrX2VjY193YWl0X2RlY29kZXJfZG9uZShzdHJ1Y3QgbXRrX3NuYW5kICpzbmYpCit7CisJdWludDE2X3QgdmFsLCBzdGVwX21hc2sgPSAoMSA8PCBzbmYtPmVjY19zdGVwcykgLSAxOworCXVpbnQzMl90IHJlZyA9IHNuZi0+ZWNjX3NvYy0+cmVnc1tFQ0NfREVDRE9ORV07CisJaW50IHJldDsKKworCXJldCA9IHJlYWQxNl9wb2xsX3RpbWVvdXQoc25mLT5lY2NfYmFzZSArIHJlZywgdmFsLAorCQkJCSAgKHZhbCAmIHN0ZXBfbWFzaykgPT0gc3RlcF9tYXNrLCAwLAorCQkJCSAgRUNDX1RJTUVPVVQpOworCWlmIChyZXQpCisJCXNuYW5kX2xvZ19lY2Moc25mLT5wZGV2LCAiRUNDIGRlY29kZXIgaXMgYnVzeVxuIik7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgbXRrX2VjY19jaGVja19kZWNvZGVfZXJyb3Ioc3RydWN0IG10a19zbmFuZCAqc25mKQoreworCXVpbnQzMl90IGksIHJlZ2ksIGZpLCBlcnJudW07CisJdWludDMyX3QgZXJybnVtX3NoaWZ0ID0gc25mLT5lY2Nfc29jLT5lcnJudW1fc2hpZnQ7CisJdWludDMyX3QgZXJybnVtX21hc2sgPSAoMSA8PCBzbmYtPmVjY19zb2MtPmVycm51bV9iaXRzKSAtIDE7CisJaW50IHJldCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgc25mLT5lY2Nfc3RlcHM7IGkrKykgeworCQlyZWdpID0gaSAvIDQ7CisJCWZpID0gaSAlIDQ7CisKKwkJZXJybnVtID0gZWNjX3JlYWQzMihzbmYsIEVDQ19ERUNFTlVNKHJlZ2kpKTsKKwkJZXJybnVtID0gKGVycm51bSA+PiAoZmkgKiBlcnJudW1fc2hpZnQpKSAmIGVycm51bV9tYXNrOworCisJCWlmIChlcnJudW0gPD0gc25mLT5lY2Nfc3RyZW5ndGgpIHsKKwkJCXNuZi0+c2VjdF9iZltpXSA9IGVycm51bTsKKwkJfSBlbHNlIHsKKwkJCXNuZi0+c2VjdF9iZltpXSA9IC0xOworCQkJcmV0ID0gLUVCQURNU0c7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10a19lY2NfY2hlY2tfYnVmX2JpdGZsaXBzKHN0cnVjdCBtdGtfc25hbmQgKnNuZiwgY29uc3Qgdm9pZCAqYnVmLAorCQkJCSAgICAgIHNpemVfdCBsZW4sIHVpbnQzMl90IGJpdGZsaXBzKQoreworCWNvbnN0IHVpbnQ4X3QgKmJ1ZjggPSBidWY7CisJY29uc3QgdWludDMyX3QgKmJ1ZjMyOworCXVpbnQzMl90IGQsIHdlaWdodDsKKworCXdoaWxlIChsZW4gJiYgKCh1aW50cHRyX3QpYnVmOCkgJSBzaXplb2YodWludDMyX3QpKSB7CisJCXdlaWdodCA9IGh3ZWlnaHQ4KCpidWY4KTsKKwkJYml0ZmxpcHMgKz0gQklUU19QRVJfQllURSAtIHdlaWdodDsKKwkJYnVmOCsrOworCQlsZW4tLTsKKworCQlpZiAoYml0ZmxpcHMgPiBzbmYtPmVjY19zdHJlbmd0aCkKKwkJCXJldHVybiAtRUJBRE1TRzsKKwl9CisKKwlidWYzMiA9IChjb25zdCB1aW50MzJfdCAqKWJ1Zjg7CisJd2hpbGUgKGxlbiA+PSBzaXplb2YodWludDMyX3QpKSB7CisJCWQgPSAqYnVmMzI7CisKKwkJaWYgKGQgIT0gfjApIHsKKwkJCXdlaWdodCA9IGh3ZWlnaHQzMihkKTsKKwkJCWJpdGZsaXBzICs9IHNpemVvZih1aW50MzJfdCkgKiBCSVRTX1BFUl9CWVRFIC0gd2VpZ2h0OworCQl9CisKKwkJYnVmMzIrKzsKKwkJbGVuIC09IHNpemVvZih1aW50MzJfdCk7CisKKwkJaWYgKGJpdGZsaXBzID4gc25mLT5lY2Nfc3RyZW5ndGgpCisJCQlyZXR1cm4gLUVCQURNU0c7CisJfQorCisJYnVmOCA9IChjb25zdCB1aW50OF90ICopYnVmMzI7CisJd2hpbGUgKGxlbikgeworCQl3ZWlnaHQgPSBod2VpZ2h0OCgqYnVmOCk7CisJCWJpdGZsaXBzICs9IEJJVFNfUEVSX0JZVEUgLSB3ZWlnaHQ7CisJCWJ1ZjgrKzsKKwkJbGVuLS07CisKKwkJaWYgKGJpdGZsaXBzID4gc25mLT5lY2Nfc3RyZW5ndGgpCisJCQlyZXR1cm4gLUVCQURNU0c7CisJfQorCisJcmV0dXJuIGJpdGZsaXBzOworfQorCitzdGF0aWMgaW50IG10a19lY2NfY2hlY2tfcGFyaXR5X2JpdGZsaXBzKHN0cnVjdCBtdGtfc25hbmQgKnNuZiwgY29uc3Qgdm9pZCAqYnVmLAorCQkJCQkgdWludDMyX3QgYml0cywgdWludDMyX3QgYml0ZmxpcHMpCit7CisJdWludDMyX3QgbGVuLCBpOworCXVpbnQ4X3QgYjsKKwlpbnQgcmM7CisKKwlsZW4gPSBiaXRzID4+IDM7CisJYml0cyAmPSA3OworCisJcmMgPSBtdGtfZWNjX2NoZWNrX2J1Zl9iaXRmbGlwcyhzbmYsIGJ1ZiwgbGVuLCBiaXRmbGlwcyk7CisJaWYgKCFiaXRzIHx8IHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJYml0ZmxpcHMgPSByYzsKKworCS8qIFdlIHdhbnQgYSBwcmVjaXNlIGNvdW50IG9mIGJpdHMgKi8KKwliID0gKChjb25zdCB1aW50OF90ICopYnVmKVtsZW5dOworCWZvciAoaSA9IDA7IGkgPCBiaXRzOyBpKyspIHsKKwkJaWYgKCEoYiAmIEJJVChpKSkpCisJCQliaXRmbGlwcysrOworCX0KKworCWlmIChiaXRmbGlwcyA+IHNuZi0+ZWNjX3N0cmVuZ3RoKQorCQlyZXR1cm4gLUVCQURNU0c7CisKKwlyZXR1cm4gYml0ZmxpcHM7Cit9CisKK3N0YXRpYyB2b2lkIG10a19lY2NfcmVzZXRfcGFyaXR5KHZvaWQgKmJ1ZiwgdWludDMyX3QgYml0cykKK3sKKwl1aW50MzJfdCBsZW47CisKKwlsZW4gPSBiaXRzID4+IDM7CisJYml0cyAmPSA3OworCisJbWVtc2V0KGJ1ZiwgMHhmZiwgbGVuKTsKKworCS8qIE9ubHkgcmVzZXQgYml0cyBwcm90ZWN0ZWQgYnkgRUNDIHRvIDEgKi8KKwlpZiAoYml0cykKKwkJKCh1aW50OF90ICopYnVmKVtsZW5dIHw9IEdFTk1BU0soYml0cyAtIDEsIDApOworfQorCitpbnQgbXRrX2VjY19maXh1cF9lbXB0eV9zZWN0b3Ioc3RydWN0IG10a19zbmFuZCAqc25mLCB1aW50MzJfdCBzZWN0KQoreworCXVpbnQzMl90IGVjY19ieXRlcyA9IHNuZi0+c3BhcmVfcGVyX3NlY3RvciAtIHNuZi0+bmZpX3NvYy0+ZmRtX3NpemU7CisJdWludDhfdCAqb29iID0gc25mLT5wYWdlX2NhY2hlICsgc25mLT53cml0ZXNpemU7CisJdWludDhfdCAqZGF0YV9wdHIsICpmZG1fcHRyLCAqZWNjX3B0cjsKKwlpbnQgYml0ZmxpcHMgPSAwLCBlY2NfYml0cywgcGFyaXR5X2JpdHM7CisKKwlwYXJpdHlfYml0cyA9IGZscyhzbmYtPm5maV9zb2MtPnNlY3Rvcl9zaXplICogOCk7CisJZWNjX2JpdHMgPSBzbmYtPmVjY19zdHJlbmd0aCAqIHBhcml0eV9iaXRzOworCisJZGF0YV9wdHIgPSBzbmYtPnBhZ2VfY2FjaGUgKyBzZWN0ICogc25mLT5uZmlfc29jLT5zZWN0b3Jfc2l6ZTsKKwlmZG1fcHRyID0gb29iICsgc2VjdCAqIHNuZi0+bmZpX3NvYy0+ZmRtX3NpemU7CisJZWNjX3B0ciA9IG9vYiArIHNuZi0+ZWNjX3N0ZXBzICogc25mLT5uZmlfc29jLT5mZG1fc2l6ZSArCisJCSAgc2VjdCAqIGVjY19ieXRlczsKKworCS8qCisJICogQ2hlY2sgd2hldGhlciBEQVRBICsgRkRNICsgRUNDIG9mIGEgc2VjdG9yIGNvbnRhaW5zIGNvcnJlY3RhYmxlCisJICogYml0ZmxpcHMKKwkgKi8KKwliaXRmbGlwcyA9IG10a19lY2NfY2hlY2tfYnVmX2JpdGZsaXBzKHNuZiwgZGF0YV9wdHIsCisJCQkJCSAgICAgIHNuZi0+bmZpX3NvYy0+c2VjdG9yX3NpemUsCisJCQkJCSAgICAgIGJpdGZsaXBzKTsKKwlpZiAoYml0ZmxpcHMgPCAwKQorCQlyZXR1cm4gLUVCQURNU0c7CisKKwliaXRmbGlwcyA9IG10a19lY2NfY2hlY2tfYnVmX2JpdGZsaXBzKHNuZiwgZmRtX3B0ciwKKwkJCQkJICAgICAgc25mLT5uZmlfc29jLT5mZG1fZWNjX3NpemUsCisJCQkJCSAgICAgIGJpdGZsaXBzKTsKKwlpZiAoYml0ZmxpcHMgPCAwKQorCQlyZXR1cm4gLUVCQURNU0c7CisKKwliaXRmbGlwcyA9IG10a19lY2NfY2hlY2tfcGFyaXR5X2JpdGZsaXBzKHNuZiwgZWNjX3B0ciwgZWNjX2JpdHMsCisJCQkJCQkgYml0ZmxpcHMpOworCWlmIChiaXRmbGlwcyA8IDApCisJCXJldHVybiAtRUJBRE1TRzsKKworCWlmICghYml0ZmxpcHMpCisJCXJldHVybiAwOworCisJLyogUmVzZXQgdGhlIGRhdGEgb2YgdGhpcyBzZWN0b3IgdG8gMHhmZiAqLworCW1lbXNldChkYXRhX3B0ciwgMHhmZiwgc25mLT5uZmlfc29jLT5zZWN0b3Jfc2l6ZSk7CisJbWVtc2V0KGZkbV9wdHIsIDB4ZmYsIHNuZi0+bmZpX3NvYy0+ZmRtX2VjY19zaXplKTsKKwltdGtfZWNjX3Jlc2V0X3Bhcml0eShlY2NfcHRyLCBlY2NfYml0cyk7CisKKwlyZXR1cm4gYml0ZmxpcHM7Cit9CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbXRkL210ay1zbmFuZC9tdGstc25hbmQtaWRzLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbXRkL210ay1zbmFuZC9tdGstc25hbmQtaWRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc1NmZmNwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9tdGQvbXRrLXNuYW5kL210ay1zbmFuZC1pZHMuYwpAQCAtMCwwICsxLDUxMSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTMtQ2xhdXNlCisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIE1lZGlhVGVrIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBBdXRob3I6IFdlaWppZSBHYW8gPHdlaWppZS5nYW9AbWVkaWF0ZWsuY29tPgorICovCisKKyNpbmNsdWRlICJtdGstc25hbmQtZGVmLmgiCisKK3N0YXRpYyBpbnQgbXRrX3NuYW5kX3dpbmJvbmRfc2VsZWN0X2RpZShzdHJ1Y3QgbXRrX3NuYW5kICpzbmYsIHVpbnQzMl90IGRpZWlkeCk7CitzdGF0aWMgaW50IG10a19zbmFuZF9taWNyb25fc2VsZWN0X2RpZShzdHJ1Y3QgbXRrX3NuYW5kICpzbmYsIHVpbnQzMl90IGRpZWlkeCk7CisKKyNkZWZpbmUgU05BTkRfTUVNT1JHXzUxMk1fMktfNjQJCVNOQU5EX01FTU9SRygyMDQ4LCA2NCwgNjQsIDUxMiwgMSwgMSkKKyNkZWZpbmUgU05BTkRfTUVNT1JHXzFHXzJLXzY0CQlTTkFORF9NRU1PUkcoMjA0OCwgNjQsIDY0LCAxMDI0LCAxLCAxKQorI2RlZmluZSBTTkFORF9NRU1PUkdfMkdfMktfNjQJCVNOQU5EX01FTU9SRygyMDQ4LCA2NCwgNjQsIDIwNDgsIDEsIDEpCisjZGVmaW5lIFNOQU5EX01FTU9SR18yR18yS18xMjAJCVNOQU5EX01FTU9SRygyMDQ4LCAxMjAsIDY0LCAyMDQ4LCAxLCAxKQorI2RlZmluZSBTTkFORF9NRU1PUkdfNEdfMktfNjQJCVNOQU5EX01FTU9SRygyMDQ4LCA2NCwgNjQsIDQwOTYsIDEsIDEpCisjZGVmaW5lIFNOQU5EX01FTU9SR18xR18yS18xMjAJCVNOQU5EX01FTU9SRygyMDQ4LCAxMjAsIDY0LCAxMDI0LCAxLCAxKQorI2RlZmluZSBTTkFORF9NRU1PUkdfMUdfMktfMTI4CQlTTkFORF9NRU1PUkcoMjA0OCwgMTI4LCA2NCwgMTAyNCwgMSwgMSkKKyNkZWZpbmUgU05BTkRfTUVNT1JHXzJHXzJLXzEyOAkJU05BTkRfTUVNT1JHKDIwNDgsIDEyOCwgNjQsIDIwNDgsIDEsIDEpCisjZGVmaW5lIFNOQU5EX01FTU9SR180R18yS18xMjgJCVNOQU5EX01FTU9SRygyMDQ4LCAxMjgsIDY0LCA0MDk2LCAxLCAxKQorI2RlZmluZSBTTkFORF9NRU1PUkdfNEdfNEtfMjQwCQlTTkFORF9NRU1PUkcoNDA5NiwgMjQwLCA2NCwgMjA0OCwgMSwgMSkKKyNkZWZpbmUgU05BTkRfTUVNT1JHXzRHXzRLXzI1NgkJU05BTkRfTUVNT1JHKDQwOTYsIDI1NiwgNjQsIDIwNDgsIDEsIDEpCisjZGVmaW5lIFNOQU5EX01FTU9SR184R180S18yNTYJCVNOQU5EX01FTU9SRyg0MDk2LCAyNTYsIDY0LCA0MDk2LCAxLCAxKQorI2RlZmluZSBTTkFORF9NRU1PUkdfMkdfMktfNjRfMlAJU05BTkRfTUVNT1JHKDIwNDgsIDY0LCA2NCwgMjA0OCwgMiwgMSkKKyNkZWZpbmUgU05BTkRfTUVNT1JHXzJHXzJLXzY0XzJECVNOQU5EX01FTU9SRygyMDQ4LCA2NCwgNjQsIDEwMjQsIDEsIDIpCisjZGVmaW5lIFNOQU5EX01FTU9SR18yR18yS18xMjhfMlAJU05BTkRfTUVNT1JHKDIwNDgsIDEyOCwgNjQsIDIwNDgsIDIsIDEpCisjZGVmaW5lIFNOQU5EX01FTU9SR180R18yS182NF8yUAlTTkFORF9NRU1PUkcoMjA0OCwgNjQsIDY0LCA0MDk2LCAyLCAxKQorI2RlZmluZSBTTkFORF9NRU1PUkdfNEdfMktfMTI4XzJQXzJECVNOQU5EX01FTU9SRygyMDQ4LCAxMjgsIDY0LCAyMDQ4LCAyLCAyKQorI2RlZmluZSBTTkFORF9NRU1PUkdfOEdfNEtfMjU2XzJECVNOQU5EX01FTU9SRyg0MDk2LCAyNTYsIDY0LCAyMDQ4LCAxLCAyKQorCitzdGF0aWMgY29uc3QgU05BTkRfSU9fQ0FQKHNuYW5kX2NhcF9yZWFkX2Zyb21fY2FjaGVfcXVhZCwKKwlTUElfSU9fMV8xXzEgfCBTUElfSU9fMV8xXzIgfCBTUElfSU9fMV8yXzIgfCBTUElfSU9fMV8xXzQgfAorCVNQSV9JT18xXzRfNCwKKwlTTkFORF9PUChTTkFORF9JT18xXzFfMSwgU05BTkRfQ01EX1JFQURfRlJPTV9DQUNIRSwgOCksCisJU05BTkRfT1AoU05BTkRfSU9fMV8xXzIsIFNOQU5EX0NNRF9SRUFEX0ZST01fQ0FDSEVfWDIsIDgpLAorCVNOQU5EX09QKFNOQU5EX0lPXzFfMl8yLCBTTkFORF9DTURfUkVBRF9GUk9NX0NBQ0hFX0RVQUwsIDQpLAorCVNOQU5EX09QKFNOQU5EX0lPXzFfMV80LCBTTkFORF9DTURfUkVBRF9GUk9NX0NBQ0hFX1g0LCA4KSwKKwlTTkFORF9PUChTTkFORF9JT18xXzRfNCwgU05BTkRfQ01EX1JFQURfRlJPTV9DQUNIRV9RVUFELCA0KSk7CisKK3N0YXRpYyBjb25zdCBTTkFORF9JT19DQVAoc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV9xdWFkX3EyZCwKKwlTUElfSU9fMV8xXzEgfCBTUElfSU9fMV8xXzIgfCBTUElfSU9fMV8yXzIgfCBTUElfSU9fMV8xXzQgfAorCVNQSV9JT18xXzRfNCwKKwlTTkFORF9PUChTTkFORF9JT18xXzFfMSwgU05BTkRfQ01EX1JFQURfRlJPTV9DQUNIRSwgOCksCisJU05BTkRfT1AoU05BTkRfSU9fMV8xXzIsIFNOQU5EX0NNRF9SRUFEX0ZST01fQ0FDSEVfWDIsIDgpLAorCVNOQU5EX09QKFNOQU5EX0lPXzFfMl8yLCBTTkFORF9DTURfUkVBRF9GUk9NX0NBQ0hFX0RVQUwsIDQpLAorCVNOQU5EX09QKFNOQU5EX0lPXzFfMV80LCBTTkFORF9DTURfUkVBRF9GUk9NX0NBQ0hFX1g0LCA4KSwKKwlTTkFORF9PUChTTkFORF9JT18xXzRfNCwgU05BTkRfQ01EX1JFQURfRlJPTV9DQUNIRV9RVUFELCAyKSk7CisKK3N0YXRpYyBjb25zdCBTTkFORF9JT19DQVAoc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV9xdWFkX2E4ZCwKKwlTUElfSU9fMV8xXzEgfCBTUElfSU9fMV8xXzIgfCBTUElfSU9fMV8yXzIgfCBTUElfSU9fMV8xXzQgfAorCVNQSV9JT18xXzRfNCwKKwlTTkFORF9PUChTTkFORF9JT18xXzFfMSwgU05BTkRfQ01EX1JFQURfRlJPTV9DQUNIRSwgOCksCisJU05BTkRfT1AoU05BTkRfSU9fMV8xXzIsIFNOQU5EX0NNRF9SRUFEX0ZST01fQ0FDSEVfWDIsIDgpLAorCVNOQU5EX09QKFNOQU5EX0lPXzFfMl8yLCBTTkFORF9DTURfUkVBRF9GUk9NX0NBQ0hFX0RVQUwsIDgpLAorCVNOQU5EX09QKFNOQU5EX0lPXzFfMV80LCBTTkFORF9DTURfUkVBRF9GUk9NX0NBQ0hFX1g0LCA4KSwKKwlTTkFORF9PUChTTkFORF9JT18xXzRfNCwgU05BTkRfQ01EX1JFQURfRlJPTV9DQUNIRV9RVUFELCA4KSk7CisKK3N0YXRpYyBjb25zdCBTTkFORF9JT19DQVAoc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV94NCwKKwlTUElfSU9fMV8xXzEgfCBTUElfSU9fMV8xXzIgfCBTUElfSU9fMV8xXzQsCisJU05BTkRfT1AoU05BTkRfSU9fMV8xXzEsIFNOQU5EX0NNRF9SRUFEX0ZST01fQ0FDSEUsIDgpLAorCVNOQU5EX09QKFNOQU5EX0lPXzFfMV8yLCBTTkFORF9DTURfUkVBRF9GUk9NX0NBQ0hFX1gyLCA4KSwKKwlTTkFORF9PUChTTkFORF9JT18xXzFfNCwgU05BTkRfQ01EX1JFQURfRlJPTV9DQUNIRV9YNCwgOCkpOworCitzdGF0aWMgY29uc3QgU05BTkRfSU9fQ0FQKHNuYW5kX2NhcF9yZWFkX2Zyb21fY2FjaGVfeDRfb25seSwKKwlTUElfSU9fMV8xXzEgfCBTUElfSU9fMV8xXzQsCisJU05BTkRfT1AoU05BTkRfSU9fMV8xXzEsIFNOQU5EX0NNRF9SRUFEX0ZST01fQ0FDSEUsIDgpLAorCVNOQU5EX09QKFNOQU5EX0lPXzFfMV80LCBTTkFORF9DTURfUkVBRF9GUk9NX0NBQ0hFX1g0LCA4KSk7CisKK3N0YXRpYyBjb25zdCBTTkFORF9JT19DQVAoc25hbmRfY2FwX3Byb2dyYW1fbG9hZF94MSwKKwlTUElfSU9fMV8xXzEsCisJU05BTkRfT1AoU05BTkRfSU9fMV8xXzEsIFNOQU5EX0NNRF9QUk9HUkFNX0xPQUQsIDApKTsKKworc3RhdGljIGNvbnN0IFNOQU5EX0lPX0NBUChzbmFuZF9jYXBfcHJvZ3JhbV9sb2FkX3g0LAorCVNQSV9JT18xXzFfMSB8IFNQSV9JT18xXzFfNCwKKwlTTkFORF9PUChTTkFORF9JT18xXzFfMSwgU05BTkRfQ01EX1BST0dSQU1fTE9BRCwgMCksCisJU05BTkRfT1AoU05BTkRfSU9fMV8xXzQsIFNOQU5EX0NNRF9QUk9HUkFNX0xPQURfWDQsIDApKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmFuZF9mbGFzaF9pbmZvIHNuYW5kX2ZsYXNoX2lkc1tdID0geworCVNOQU5EX0lORk8oIlcyNU41MTJHViIsIFNOQU5EX0lEKFNOQU5EX0lEX0RZTU1ZLCAweGVmLCAweGFhLCAweDIwKSwKKwkJICAgU05BTkRfTUVNT1JHXzUxMk1fMktfNjQsCisJCSAgICZzbmFuZF9jYXBfcmVhZF9mcm9tX2NhY2hlX3F1YWQsCisJCSAgICZzbmFuZF9jYXBfcHJvZ3JhbV9sb2FkX3g0KSwKKwlTTkFORF9JTkZPKCJXMjVOMDFHViIsIFNOQU5EX0lEKFNOQU5EX0lEX0RZTU1ZLCAweGVmLCAweGFhLCAweDIxKSwKKwkJICAgU05BTkRfTUVNT1JHXzFHXzJLXzY0LAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV9xdWFkLAorCQkgICAmc25hbmRfY2FwX3Byb2dyYW1fbG9hZF94NCksCisJU05BTkRfSU5GTygiVzI1TTAyR1YiLCBTTkFORF9JRChTTkFORF9JRF9EWU1NWSwgMHhlZiwgMHhhYiwgMHgyMSksCisJCSAgIFNOQU5EX01FTU9SR18yR18yS182NF8yRCwKKwkJICAgJnNuYW5kX2NhcF9yZWFkX2Zyb21fY2FjaGVfcXVhZCwKKwkJICAgJnNuYW5kX2NhcF9wcm9ncmFtX2xvYWRfeDQsCisJCSAgIG10a19zbmFuZF93aW5ib25kX3NlbGVjdF9kaWUpLAorCVNOQU5EX0lORk8oIlcyNU4wMktWIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4ZWYsIDB4YWEsIDB4MjIpLAorCQkgICBTTkFORF9NRU1PUkdfMkdfMktfMTI4LAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV9xdWFkLAorCQkgICAmc25hbmRfY2FwX3Byb2dyYW1fbG9hZF94NCksCisKKwlTTkFORF9JTkZPKCJHRDVGMUdRNFVBV3h4IiwgU05BTkRfSUQoU05BTkRfSURfQUREUiwgMHhjOCwgMHgxMCksCisJCSAgIFNOQU5EX01FTU9SR18xR18yS182NCwKKwkJICAgJnNuYW5kX2NhcF9yZWFkX2Zyb21fY2FjaGVfcXVhZF9xMmQsCisJCSAgICZzbmFuZF9jYXBfcHJvZ3JhbV9sb2FkX3g0KSwKKwlTTkFORF9JTkZPKCJHRDVGMUdRNFVFeElHIiwgU05BTkRfSUQoU05BTkRfSURfQUREUiwgMHhjOCwgMHhkMSksCisJCSAgIFNOQU5EX01FTU9SR18xR18yS18xMjgsCisJCSAgICZzbmFuZF9jYXBfcmVhZF9mcm9tX2NhY2hlX3F1YWRfcTJkLAorCQkgICAmc25hbmRfY2FwX3Byb2dyYW1fbG9hZF94NCksCisJU05BTkRfSU5GTygiR0Q1RjFHUTRVRXh4SCIsIFNOQU5EX0lEKFNOQU5EX0lEX0FERFIsIDB4YzgsIDB4ZDkpLAorCQkgICBTTkFORF9NRU1PUkdfMUdfMktfNjQsCisJCSAgICZzbmFuZF9jYXBfcmVhZF9mcm9tX2NhY2hlX3F1YWRfcTJkLAorCQkgICAmc25hbmRfY2FwX3Byb2dyYW1fbG9hZF94NCksCisJU05BTkRfSU5GTygiR0Q1RjFHUTR4QVlJRyIsIFNOQU5EX0lEKFNOQU5EX0lEX0FERFIsIDB4YzgsIDB4ZjEpLAorCQkgICBTTkFORF9NRU1PUkdfMUdfMktfNjQsCisJCSAgICZzbmFuZF9jYXBfcmVhZF9mcm9tX2NhY2hlX3F1YWRfcTJkLAorCQkgICAmc25hbmRfY2FwX3Byb2dyYW1fbG9hZF94NCksCisJU05BTkRfSU5GTygiR0Q1RjJHUTRVRXhJRyIsIFNOQU5EX0lEKFNOQU5EX0lEX0FERFIsIDB4YzgsIDB4ZDIpLAorCQkgICBTTkFORF9NRU1PUkdfMkdfMktfMTI4LAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV9xdWFkX3EyZCwKKwkJICAgJnNuYW5kX2NhcF9wcm9ncmFtX2xvYWRfeDQpLAorCVNOQU5EX0lORk8oIkdENUYyR1E1VUV4eEgiLCBTTkFORF9JRChTTkFORF9JRF9BRERSLCAweGM4LCAweDMyKSwKKwkJICAgU05BTkRfTUVNT1JHXzJHXzJLXzY0LAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV9xdWFkX2E4ZCwKKwkJICAgJnNuYW5kX2NhcF9wcm9ncmFtX2xvYWRfeDQpLAorCVNOQU5EX0lORk8oIkdENUYyR1E0eEFZSUciLCBTTkFORF9JRChTTkFORF9JRF9BRERSLCAweGM4LCAweGYyKSwKKwkJICAgU05BTkRfTUVNT1JHXzJHXzJLXzY0LAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV9xdWFkX3EyZCwKKwkJICAgJnNuYW5kX2NhcF9wcm9ncmFtX2xvYWRfeDQpLAorCVNOQU5EX0lORk8oIkdENUY0R1E0VUJ4SUciLCBTTkFORF9JRChTTkFORF9JRF9BRERSLCAweGM4LCAweGQ0KSwKKwkJICAgU05BTkRfTUVNT1JHXzRHXzRLXzI1NiwKKwkJICAgJnNuYW5kX2NhcF9yZWFkX2Zyb21fY2FjaGVfcXVhZF9xMmQsCisJCSAgICZzbmFuZF9jYXBfcHJvZ3JhbV9sb2FkX3g0KSwKKwlTTkFORF9JTkZPKCJHRDVGNEdRNHhBWUlHIiwgU05BTkRfSUQoU05BTkRfSURfQUREUiwgMHhjOCwgMHhmNCksCisJCSAgIFNOQU5EX01FTU9SR180R18yS182NCwKKwkJICAgJnNuYW5kX2NhcF9yZWFkX2Zyb21fY2FjaGVfcXVhZF9xMmQsCisJCSAgICZzbmFuZF9jYXBfcHJvZ3JhbV9sb2FkX3g0KSwKKwlTTkFORF9JTkZPKCJHRDVGMkdRNVVFeHhHIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4YzgsIDB4NTIpLAorCQkgICBTTkFORF9NRU1PUkdfMkdfMktfMTI4LAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV9xdWFkX3EyZCwKKwkJICAgJnNuYW5kX2NhcF9wcm9ncmFtX2xvYWRfeDQpLAorCVNOQU5EX0lORk8oIkdENUY0R1E0VUN4SUciLCBTTkFORF9JRChTTkFORF9JRF9EWU1NWSwgMHhjOCwgMHhiNCksCisJCSAgIFNOQU5EX01FTU9SR180R180S18yNTYsCisJCSAgICZzbmFuZF9jYXBfcmVhZF9mcm9tX2NhY2hlX3F1YWRfcTJkLAorCQkgICAmc25hbmRfY2FwX3Byb2dyYW1fbG9hZF94NCksCisKKwlTTkFORF9JTkZPKCJNWDM1TEYxR0U0QUIiLCBTTkFORF9JRChTTkFORF9JRF9EWU1NWSwgMHhjMiwgMHgxMiksCisJCSAgIFNOQU5EX01FTU9SR18xR18yS182NCwKKwkJICAgJnNuYW5kX2NhcF9yZWFkX2Zyb21fY2FjaGVfeDQsCisJCSAgICZzbmFuZF9jYXBfcHJvZ3JhbV9sb2FkX3g0KSwKKwlTTkFORF9JTkZPKCJNWDM1TEYxRzI0QUQiLCBTTkFORF9JRChTTkFORF9JRF9EWU1NWSwgMHhjMiwgMHgxNCksCisJCSAgIFNOQU5EX01FTU9SR18xR18yS18xMjgsCisJCSAgICZzbmFuZF9jYXBfcmVhZF9mcm9tX2NhY2hlX3F1YWQsCisJCSAgICZzbmFuZF9jYXBfcHJvZ3JhbV9sb2FkX3g0KSwKKwlTTkFORF9JTkZPKCJNWDMxTEYxR0U0QkMiLCBTTkFORF9JRChTTkFORF9JRF9EWU1NWSwgMHhjMiwgMHgxZSksCisJCSAgIFNOQU5EX01FTU9SR18xR18yS182NCwKKwkJICAgJnNuYW5kX2NhcF9yZWFkX2Zyb21fY2FjaGVfeDQsCisJCSAgICZzbmFuZF9jYXBfcHJvZ3JhbV9sb2FkX3g0KSwKKwlTTkFORF9JTkZPKCJNWDM1TEYyR0U0QUIiLCBTTkFORF9JRChTTkFORF9JRF9EWU1NWSwgMHhjMiwgMHgyMiksCisJCSAgIFNOQU5EX01FTU9SR18yR18yS182NCwKKwkJICAgJnNuYW5kX2NhcF9yZWFkX2Zyb21fY2FjaGVfeDQsCisJCSAgICZzbmFuZF9jYXBfcHJvZ3JhbV9sb2FkX3g0KSwKKwlTTkFORF9JTkZPKCJNWDM1TEYyRzI0QUQiLCBTTkFORF9JRChTTkFORF9JRF9EWU1NWSwgMHhjMiwgMHgyNCksCisJCSAgIFNOQU5EX01FTU9SR18yR18yS18xMjgsCisJCSAgICZzbmFuZF9jYXBfcmVhZF9mcm9tX2NhY2hlX3F1YWQsCisJCSAgICZzbmFuZF9jYXBfcHJvZ3JhbV9sb2FkX3g0KSwKKwlTTkFORF9JTkZPKCJNWDM1TEYyR0U0QUQiLCBTTkFORF9JRChTTkFORF9JRF9EWU1NWSwgMHhjMiwgMHgyNiksCisJCSAgIFNOQU5EX01FTU9SR18yR18yS18xMjgsCisJCSAgICZzbmFuZF9jYXBfcmVhZF9mcm9tX2NhY2hlX3g0LAorCQkgICAmc25hbmRfY2FwX3Byb2dyYW1fbG9hZF94NCksCisJU05BTkRfSU5GTygiTVgzNUxGMkcxNEFDIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4YzIsIDB4MjApLAorCQkgICBTTkFORF9NRU1PUkdfMkdfMktfNjQsCisJCSAgICZzbmFuZF9jYXBfcmVhZF9mcm9tX2NhY2hlX3g0LAorCQkgICAmc25hbmRfY2FwX3Byb2dyYW1fbG9hZF94NCksCisJU05BTkRfSU5GTygiTVgzNUxGNEcyNEFEIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4YzIsIDB4MzUpLAorCQkgICBTTkFORF9NRU1PUkdfNEdfNEtfMjU2LAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV9xdWFkLAorCQkgICAmc25hbmRfY2FwX3Byb2dyYW1fbG9hZF94NCksCisJU05BTkRfSU5GTygiTVgzNUxGNEdFNEFEIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4YzIsIDB4MzcpLAorCQkgICBTTkFORF9NRU1PUkdfNEdfNEtfMjU2LAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV94NCwKKwkJICAgJnNuYW5kX2NhcF9wcm9ncmFtX2xvYWRfeDQpLAorCisJU05BTkRfSU5GTygiTVQyOUYxRzAxQUFBREQiLCBTTkFORF9JRChTTkFORF9JRF9EWU1NWSwgMHgyYywgMHgxMiksCisJCSAgIFNOQU5EX01FTU9SR18xR18yS182NCwKKwkJICAgJnNuYW5kX2NhcF9yZWFkX2Zyb21fY2FjaGVfeDQsCisJCSAgICZzbmFuZF9jYXBfcHJvZ3JhbV9sb2FkX3gxKSwKKwlTTkFORF9JTkZPKCJNVDI5RjFHMDFBQkFGRCIsIFNOQU5EX0lEKFNOQU5EX0lEX0RZTU1ZLCAweDJjLCAweDE0KSwKKwkJICAgU05BTkRfTUVNT1JHXzFHXzJLXzEyOCwKKwkJICAgJnNuYW5kX2NhcF9yZWFkX2Zyb21fY2FjaGVfcXVhZCwKKwkJICAgJnNuYW5kX2NhcF9wcm9ncmFtX2xvYWRfeDQpLAorCVNOQU5EX0lORk8oIk1UMjlGMkcwMUFBQUVEIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4MmMsIDB4OWYpLAorCQkgICBTTkFORF9NRU1PUkdfMkdfMktfNjRfMlAsCisJCSAgICZzbmFuZF9jYXBfcmVhZF9mcm9tX2NhY2hlX3g0LAorCQkgICAmc25hbmRfY2FwX3Byb2dyYW1fbG9hZF94MSksCisJU05BTkRfSU5GTygiTVQyOUYyRzAxQUJBR0QiLCBTTkFORF9JRChTTkFORF9JRF9EWU1NWSwgMHgyYywgMHgyNCksCisJCSAgIFNOQU5EX01FTU9SR18yR18yS18xMjhfMlAsCisJCSAgICZzbmFuZF9jYXBfcmVhZF9mcm9tX2NhY2hlX3F1YWQsCisJCSAgICZzbmFuZF9jYXBfcHJvZ3JhbV9sb2FkX3g0KSwKKwlTTkFORF9JTkZPKCJNVDI5RjRHMDFBQUFERCIsIFNOQU5EX0lEKFNOQU5EX0lEX0RZTU1ZLCAweDJjLCAweDMyKSwKKwkJICAgU05BTkRfTUVNT1JHXzRHXzJLXzY0XzJQLAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV94NCwKKwkJICAgJnNuYW5kX2NhcF9wcm9ncmFtX2xvYWRfeDEpLAorCVNOQU5EX0lORk8oIk1UMjlGNEcwMUFCQUZEIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4MmMsIDB4MzQpLAorCQkgICBTTkFORF9NRU1PUkdfNEdfNEtfMjU2LAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV9xdWFkLAorCQkgICAmc25hbmRfY2FwX3Byb2dyYW1fbG9hZF94NCksCisJU05BTkRfSU5GTygiTVQyOUY0RzAxQURBR0QiLCBTTkFORF9JRChTTkFORF9JRF9EWU1NWSwgMHgyYywgMHgzNiksCisJCSAgIFNOQU5EX01FTU9SR180R18yS18xMjhfMlBfMkQsCisJCSAgICZzbmFuZF9jYXBfcmVhZF9mcm9tX2NhY2hlX3F1YWQsCisJCSAgICZzbmFuZF9jYXBfcHJvZ3JhbV9sb2FkX3g0LAorCQkgICBtdGtfc25hbmRfbWljcm9uX3NlbGVjdF9kaWUpLAorCVNOQU5EX0lORk8oIk1UMjlGOEcwMUFEQUZEIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4MmMsIDB4NDYpLAorCQkgICBTTkFORF9NRU1PUkdfOEdfNEtfMjU2XzJELAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV9xdWFkLAorCQkgICAmc25hbmRfY2FwX3Byb2dyYW1fbG9hZF94NCwKKwkJICAgbXRrX3NuYW5kX21pY3Jvbl9zZWxlY3RfZGllKSwKKworCVNOQU5EX0lORk8oIlRDNThDVkcwUzNIUkFJRyIsIFNOQU5EX0lEKFNOQU5EX0lEX0RZTU1ZLCAweDk4LCAweGMyKSwKKwkJICAgU05BTkRfTUVNT1JHXzFHXzJLXzEyOCwKKwkJICAgJnNuYW5kX2NhcF9yZWFkX2Zyb21fY2FjaGVfeDQsCisJCSAgICZzbmFuZF9jYXBfcHJvZ3JhbV9sb2FkX3gxKSwKKwlTTkFORF9JTkZPKCJUQzU4Q1ZHMVMzSFJBSUciLCBTTkFORF9JRChTTkFORF9JRF9EWU1NWSwgMHg5OCwgMHhjYiksCisJCSAgIFNOQU5EX01FTU9SR18yR18yS18xMjgsCisJCSAgICZzbmFuZF9jYXBfcmVhZF9mcm9tX2NhY2hlX3g0LAorCQkgICAmc25hbmRfY2FwX3Byb2dyYW1fbG9hZF94MSksCisJU05BTkRfSU5GTygiVEM1OENWRzJTMEhSQUlHIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4OTgsIDB4Y2QpLAorCQkgICBTTkFORF9NRU1PUkdfNEdfNEtfMjU2LAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV94NCwKKwkJICAgJnNuYW5kX2NhcF9wcm9ncmFtX2xvYWRfeDEpLAorCVNOQU5EX0lORk8oIlRDNThDVkcwUzNIUkFJSiIsIFNOQU5EX0lEKFNOQU5EX0lEX0RZTU1ZLCAweDk4LCAweGUyKSwKKwkJICAgU05BTkRfTUVNT1JHXzFHXzJLXzEyOCwKKwkJICAgJnNuYW5kX2NhcF9yZWFkX2Zyb21fY2FjaGVfeDQsCisJCSAgICZzbmFuZF9jYXBfcHJvZ3JhbV9sb2FkX3g0KSwKKwlTTkFORF9JTkZPKCJUQzU4Q1ZHMVMzSFJBSUoiLCBTTkFORF9JRChTTkFORF9JRF9EWU1NWSwgMHg5OCwgMHhlYiksCisJCSAgIFNOQU5EX01FTU9SR18yR18yS18xMjgsCisJCSAgICZzbmFuZF9jYXBfcmVhZF9mcm9tX2NhY2hlX3g0LAorCQkgICAmc25hbmRfY2FwX3Byb2dyYW1fbG9hZF94NCksCisJU05BTkRfSU5GTygiVEM1OENWRzJTMEhSQUlKIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4OTgsIDB4ZWQpLAorCQkgICBTTkFORF9NRU1PUkdfNEdfNEtfMjU2LAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV94NCwKKwkJICAgJnNuYW5kX2NhcF9wcm9ncmFtX2xvYWRfeDQpLAorCVNOQU5EX0lORk8oIlRINThDVkczUzBIUkFJSiIsIFNOQU5EX0lEKFNOQU5EX0lEX0RZTU1ZLCAweDk4LCAweGU0KSwKKwkJICAgU05BTkRfTUVNT1JHXzhHXzRLXzI1NiwKKwkJICAgJnNuYW5kX2NhcF9yZWFkX2Zyb21fY2FjaGVfeDQsCisJCSAgICZzbmFuZF9jYXBfcHJvZ3JhbV9sb2FkX3g0KSwKKworCVNOQU5EX0lORk8oIkY1MEw1MTJNNDFBIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4YzgsIDB4MjApLAorCQkgICBTTkFORF9NRU1PUkdfNTEyTV8yS182NCwKKwkJICAgJnNuYW5kX2NhcF9yZWFkX2Zyb21fY2FjaGVfeDQsCisJCSAgICZzbmFuZF9jYXBfcHJvZ3JhbV9sb2FkX3g0KSwKKwlTTkFORF9JTkZPKCJGNTBMMUc0MUEiLCBTTkFORF9JRChTTkFORF9JRF9EWU1NWSwgMHhjOCwgMHgyMSksCisJCSAgIFNOQU5EX01FTU9SR18xR18yS182NCwKKwkJICAgJnNuYW5kX2NhcF9yZWFkX2Zyb21fY2FjaGVfeDQsCisJCSAgICZzbmFuZF9jYXBfcHJvZ3JhbV9sb2FkX3g0KSwKKwlTTkFORF9JTkZPKCJGNTBMMUc0MUxCIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4YzgsIDB4MDEpLAorCQkgICBTTkFORF9NRU1PUkdfMUdfMktfNjQsCisJCSAgICZzbmFuZF9jYXBfcmVhZF9mcm9tX2NhY2hlX3F1YWQsCisJCSAgICZzbmFuZF9jYXBfcHJvZ3JhbV9sb2FkX3g0KSwKKwlTTkFORF9JTkZPKCJGNTBMMkc0MUxCIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4YzgsIDB4MGEpLAorCQkgICBTTkFORF9NRU1PUkdfMkdfMktfNjRfMkQsCisJCSAgICZzbmFuZF9jYXBfcmVhZF9mcm9tX2NhY2hlX3F1YWQsCisJCSAgICZzbmFuZF9jYXBfcHJvZ3JhbV9sb2FkX3g0LAorCQkgICBtdGtfc25hbmRfd2luYm9uZF9zZWxlY3RfZGllKSwKKworCVNOQU5EX0lORk8oIkNTMTFHMFQwQTBBQSIsIFNOQU5EX0lEKFNOQU5EX0lEX0RZTU1ZLCAweDZiLCAweDAwKSwKKwkJICAgU05BTkRfTUVNT1JHXzFHXzJLXzEyOCwKKwkJICAgJnNuYW5kX2NhcF9yZWFkX2Zyb21fY2FjaGVfcXVhZF9xMmQsCisJCSAgICZzbmFuZF9jYXBfcHJvZ3JhbV9sb2FkX3g0KSwKKwlTTkFORF9JTkZPKCJDUzExRzBHMEEwQUEiLCBTTkFORF9JRChTTkFORF9JRF9EWU1NWSwgMHg2YiwgMHgxMCksCisJCSAgIFNOQU5EX01FTU9SR18xR18yS18xMjgsCisJCSAgICZzbmFuZF9jYXBfcmVhZF9mcm9tX2NhY2hlX3F1YWRfcTJkLAorCQkgICAmc25hbmRfY2FwX3Byb2dyYW1fbG9hZF94NCksCisJU05BTkRfSU5GTygiQ1MxMUcwUzBBMEFBIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4NmIsIDB4MjApLAorCQkgICBTTkFORF9NRU1PUkdfMUdfMktfNjQsCisJCSAgICZzbmFuZF9jYXBfcmVhZF9mcm9tX2NhY2hlX3F1YWRfcTJkLAorCQkgICAmc25hbmRfY2FwX3Byb2dyYW1fbG9hZF94NCksCisJU05BTkRfSU5GTygiQ1MxMUcxVDBBMEFBIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4NmIsIDB4MDEpLAorCQkgICBTTkFORF9NRU1PUkdfMkdfMktfMTI4LAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV9xdWFkX3EyZCwKKwkJICAgJnNuYW5kX2NhcF9wcm9ncmFtX2xvYWRfeDQpLAorCVNOQU5EX0lORk8oIkNTMTFHMVMwQTBBQSIsIFNOQU5EX0lEKFNOQU5EX0lEX0RZTU1ZLCAweDZiLCAweDIxKSwKKwkJICAgU05BTkRfTUVNT1JHXzJHXzJLXzY0LAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV9xdWFkX3EyZCwKKwkJICAgJnNuYW5kX2NhcF9wcm9ncmFtX2xvYWRfeDQpLAorCVNOQU5EX0lORk8oIkNTMTFHMlQwQTBBQSIsIFNOQU5EX0lEKFNOQU5EX0lEX0RZTU1ZLCAweDZiLCAweDAyKSwKKwkJICAgU05BTkRfTUVNT1JHXzRHXzJLXzEyOCwKKwkJICAgJnNuYW5kX2NhcF9yZWFkX2Zyb21fY2FjaGVfcXVhZF9xMmQsCisJCSAgICZzbmFuZF9jYXBfcHJvZ3JhbV9sb2FkX3g0KSwKKwlTTkFORF9JTkZPKCJDUzExRzJTMEEwQUEiLCBTTkFORF9JRChTTkFORF9JRF9EWU1NWSwgMHg2YiwgMHgyMiksCisJCSAgIFNOQU5EX01FTU9SR180R18yS182NCwKKwkJICAgJnNuYW5kX2NhcF9yZWFkX2Zyb21fY2FjaGVfcXVhZF9xMmQsCisJCSAgICZzbmFuZF9jYXBfcHJvZ3JhbV9sb2FkX3g0KSwKKworCVNOQU5EX0lORk8oIkVNNzNCMDQ0VkNBIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4ZDUsIDB4MDEpLAorCQkgICBTTkFORF9NRU1PUkdfNTEyTV8yS182NCwKKwkJICAgJnNuYW5kX2NhcF9yZWFkX2Zyb21fY2FjaGVfcXVhZF9xMmQsCisJCSAgICZzbmFuZF9jYXBfcHJvZ3JhbV9sb2FkX3g0KSwKKwlTTkFORF9JTkZPKCJFTTczQzA0NFNOQiIsIFNOQU5EX0lEKFNOQU5EX0lEX0RZTU1ZLCAweGQ1LCAweDExKSwKKwkJICAgU05BTkRfTUVNT1JHXzFHXzJLXzEyMCwKKwkJICAgJnNuYW5kX2NhcF9yZWFkX2Zyb21fY2FjaGVfcXVhZF9xMmQsCisJCSAgICZzbmFuZF9jYXBfcHJvZ3JhbV9sb2FkX3g0KSwKKwlTTkFORF9JTkZPKCJFTTczQzA0NFNORiIsIFNOQU5EX0lEKFNOQU5EX0lEX0RZTU1ZLCAweGQ1LCAweDA5KSwKKwkJICAgU05BTkRfTUVNT1JHXzFHXzJLXzEyOCwKKwkJICAgJnNuYW5kX2NhcF9yZWFkX2Zyb21fY2FjaGVfcXVhZF9xMmQsCisJCSAgICZzbmFuZF9jYXBfcHJvZ3JhbV9sb2FkX3g0KSwKKwlTTkFORF9JTkZPKCJFTTczQzA0NFZDQSIsIFNOQU5EX0lEKFNOQU5EX0lEX0RZTU1ZLCAweGQ1LCAweDE4KSwKKwkJICAgU05BTkRfTUVNT1JHXzFHXzJLXzY0LAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV9xdWFkX3EyZCwKKwkJICAgJnNuYW5kX2NhcF9wcm9ncmFtX2xvYWRfeDQpLAorCVNOQU5EX0lORk8oIkVNNzNDMDQ0U05BIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4ZDUsIDB4MTkpLAorCQkgICBTTkFORF9NRU1PUkcoMjA0OCwgNjQsIDEyOCwgNTEyLCAxLCAxKSwKKwkJICAgJnNuYW5kX2NhcF9yZWFkX2Zyb21fY2FjaGVfcXVhZF9xMmQsCisJCSAgICZzbmFuZF9jYXBfcHJvZ3JhbV9sb2FkX3g0KSwKKwlTTkFORF9JTkZPKCJFTTczQzA0NFZDRCIsIFNOQU5EX0lEKFNOQU5EX0lEX0RZTU1ZLCAweGQ1LCAweDFjKSwKKwkJICAgU05BTkRfTUVNT1JHXzFHXzJLXzY0LAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV9xdWFkX3EyZCwKKwkJICAgJnNuYW5kX2NhcF9wcm9ncmFtX2xvYWRfeDQpLAorCVNOQU5EX0lORk8oIkVNNzNDMDQ0U05EIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4ZDUsIDB4MWQpLAorCQkgICBTTkFORF9NRU1PUkdfMUdfMktfNjQsCisJCSAgICZzbmFuZF9jYXBfcmVhZF9mcm9tX2NhY2hlX3F1YWRfcTJkLAorCQkgICAmc25hbmRfY2FwX3Byb2dyYW1fbG9hZF94NCksCisJU05BTkRfSU5GTygiRU03M0QwNDRTTkQiLCBTTkFORF9JRChTTkFORF9JRF9EWU1NWSwgMHhkNSwgMHgxZSksCisJCSAgIFNOQU5EX01FTU9SR18yR18yS182NCwKKwkJICAgJnNuYW5kX2NhcF9yZWFkX2Zyb21fY2FjaGVfcXVhZF9xMmQsCisJCSAgICZzbmFuZF9jYXBfcHJvZ3JhbV9sb2FkX3g0KSwKKwlTTkFORF9JTkZPKCJFTTczQzA0NFZDQyIsIFNOQU5EX0lEKFNOQU5EX0lEX0RZTU1ZLCAweGQ1LCAweDIyKSwKKwkJICAgU05BTkRfTUVNT1JHXzFHXzJLXzY0LAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV9xdWFkX3EyZCwKKwkJICAgJnNuYW5kX2NhcF9wcm9ncmFtX2xvYWRfeDQpLAorCVNOQU5EX0lORk8oIkVNNzNDMDQ0VkNGIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4ZDUsIDB4MjUpLAorCQkgICBTTkFORF9NRU1PUkdfMUdfMktfNjQsCisJCSAgICZzbmFuZF9jYXBfcmVhZF9mcm9tX2NhY2hlX3F1YWRfcTJkLAorCQkgICAmc25hbmRfY2FwX3Byb2dyYW1fbG9hZF94NCksCisJU05BTkRfSU5GTygiRU03M0MwNDRTTkMiLCBTTkFORF9JRChTTkFORF9JRF9EWU1NWSwgMHhkNSwgMHgzMSksCisJCSAgIFNOQU5EX01FTU9SR18xR18yS18xMjgsCisJCSAgICZzbmFuZF9jYXBfcmVhZF9mcm9tX2NhY2hlX3F1YWRfcTJkLAorCQkgICAmc25hbmRfY2FwX3Byb2dyYW1fbG9hZF94NCksCisJU05BTkRfSU5GTygiRU03M0QwNDRTTkMiLCBTTkFORF9JRChTTkFORF9JRF9EWU1NWSwgMHhkNSwgMHgwYSksCisJCSAgIFNOQU5EX01FTU9SR18yR18yS18xMjAsCisJCSAgICZzbmFuZF9jYXBfcmVhZF9mcm9tX2NhY2hlX3F1YWRfcTJkLAorCQkgICAmc25hbmRfY2FwX3Byb2dyYW1fbG9hZF94NCksCisJU05BTkRfSU5GTygiRU03M0QwNDRTTkEiLCBTTkFORF9JRChTTkFORF9JRF9EWU1NWSwgMHhkNSwgMHgxMiksCisJCSAgIFNOQU5EX01FTU9SR18yR18yS18xMjgsCisJCSAgICZzbmFuZF9jYXBfcmVhZF9mcm9tX2NhY2hlX3F1YWRfcTJkLAorCQkgICAmc25hbmRfY2FwX3Byb2dyYW1fbG9hZF94NCksCisJU05BTkRfSU5GTygiRU03M0QwNDRTTkYiLCBTTkFORF9JRChTTkFORF9JRF9EWU1NWSwgMHhkNSwgMHgxMCksCisJCSAgIFNOQU5EX01FTU9SR18yR18yS18xMjgsCisJCSAgICZzbmFuZF9jYXBfcmVhZF9mcm9tX2NhY2hlX3F1YWRfcTJkLAorCQkgICAmc25hbmRfY2FwX3Byb2dyYW1fbG9hZF94NCksCisJU05BTkRfSU5GTygiRU03M0QwNDRWQ0EiLCBTTkFORF9JRChTTkFORF9JRF9EWU1NWSwgMHhkNSwgMHgxMyksCisJCSAgIFNOQU5EX01FTU9SR18yR18yS18xMjgsCisJCSAgICZzbmFuZF9jYXBfcmVhZF9mcm9tX2NhY2hlX3F1YWRfcTJkLAorCQkgICAmc25hbmRfY2FwX3Byb2dyYW1fbG9hZF94NCksCisJU05BTkRfSU5GTygiRU03M0QwNDRWQ0IiLCBTTkFORF9JRChTTkFORF9JRF9EWU1NWSwgMHhkNSwgMHgxNCksCisJCSAgIFNOQU5EX01FTU9SR18yR18yS182NCwKKwkJICAgJnNuYW5kX2NhcF9yZWFkX2Zyb21fY2FjaGVfcXVhZF9xMmQsCisJCSAgICZzbmFuZF9jYXBfcHJvZ3JhbV9sb2FkX3g0KSwKKwlTTkFORF9JTkZPKCJFTTczRDA0NFZDRCIsIFNOQU5EX0lEKFNOQU5EX0lEX0RZTU1ZLCAweGQ1LCAweDE3KSwKKwkJICAgU05BTkRfTUVNT1JHXzJHXzJLXzEyOCwKKwkJICAgJnNuYW5kX2NhcF9yZWFkX2Zyb21fY2FjaGVfcXVhZF9xMmQsCisJCSAgICZzbmFuZF9jYXBfcHJvZ3JhbV9sb2FkX3g0KSwKKwlTTkFORF9JTkZPKCJFTTczRDA0NFZDSCIsIFNOQU5EX0lEKFNOQU5EX0lEX0RZTU1ZLCAweGQ1LCAweDFiKSwKKwkJICAgU05BTkRfTUVNT1JHXzJHXzJLXzY0LAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV9xdWFkX3EyZCwKKwkJICAgJnNuYW5kX2NhcF9wcm9ncmFtX2xvYWRfeDQpLAorCVNOQU5EX0lORk8oIkVNNzNEMDQ0U05EIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4ZDUsIDB4MWQpLAorCQkgICBTTkFORF9NRU1PUkdfMkdfMktfNjQsCisJCSAgICZzbmFuZF9jYXBfcmVhZF9mcm9tX2NhY2hlX3F1YWRfcTJkLAorCQkgICAmc25hbmRfY2FwX3Byb2dyYW1fbG9hZF94NCksCisJU05BTkRfSU5GTygiRU03M0QwNDRWQ0ciLCBTTkFORF9JRChTTkFORF9JRF9EWU1NWSwgMHhkNSwgMHgxZiksCisJCSAgIFNOQU5EX01FTU9SR18yR18yS182NCwKKwkJICAgJnNuYW5kX2NhcF9yZWFkX2Zyb21fY2FjaGVfcXVhZF9xMmQsCisJCSAgICZzbmFuZF9jYXBfcHJvZ3JhbV9sb2FkX3g0KSwKKwlTTkFORF9JTkZPKCJFTTczRDA0NFZDRSIsIFNOQU5EX0lEKFNOQU5EX0lEX0RZTU1ZLCAweGQ1LCAweDIwKSwKKwkJICAgU05BTkRfTUVNT1JHXzJHXzJLXzY0LAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV9xdWFkX3EyZCwKKwkJICAgJnNuYW5kX2NhcF9wcm9ncmFtX2xvYWRfeDQpLAorCVNOQU5EX0lORk8oIkVNNzNEMDQ0VkNMIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4ZDUsIDB4MmUpLAorCQkgICBTTkFORF9NRU1PUkdfMkdfMktfMTI4LAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV9xdWFkX3EyZCwKKwkJICAgJnNuYW5kX2NhcF9wcm9ncmFtX2xvYWRfeDQpLAorCVNOQU5EX0lORk8oIkVNNzNEMDQ0U05CIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4ZDUsIDB4MzIpLAorCQkgICBTTkFORF9NRU1PUkdfMkdfMktfMTI4LAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV9xdWFkX3EyZCwKKwkJICAgJnNuYW5kX2NhcF9wcm9ncmFtX2xvYWRfeDQpLAorCVNOQU5EX0lORk8oIkVNNzNFMDQ0U05BIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4ZDUsIDB4MDMpLAorCQkgICBTTkFORF9NRU1PUkdfNEdfNEtfMjU2LAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV9xdWFkX3EyZCwKKwkJICAgJnNuYW5kX2NhcF9wcm9ncmFtX2xvYWRfeDQpLAorCVNOQU5EX0lORk8oIkVNNzNFMDQ0U05EIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4ZDUsIDB4MGIpLAorCQkgICBTTkFORF9NRU1PUkdfNEdfNEtfMjQwLAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV9xdWFkX3EyZCwKKwkJICAgJnNuYW5kX2NhcF9wcm9ncmFtX2xvYWRfeDQpLAorCVNOQU5EX0lORk8oIkVNNzNFMDQ0U05CIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4ZDUsIDB4MjMpLAorCQkgICBTTkFORF9NRU1PUkdfNEdfNEtfMjU2LAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV9xdWFkX3EyZCwKKwkJICAgJnNuYW5kX2NhcF9wcm9ncmFtX2xvYWRfeDQpLAorCVNOQU5EX0lORk8oIkVNNzNFMDQ0VkNBIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4ZDUsIDB4MmMpLAorCQkgICBTTkFORF9NRU1PUkdfNEdfNEtfMjU2LAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV9xdWFkX3EyZCwKKwkJICAgJnNuYW5kX2NhcF9wcm9ncmFtX2xvYWRfeDQpLAorCVNOQU5EX0lORk8oIkVNNzNFMDQ0VkNCIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4ZDUsIDB4MmYpLAorCQkgICBTTkFORF9NRU1PUkdfNEdfMktfMTI4LAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV9xdWFkX3EyZCwKKwkJICAgJnNuYW5kX2NhcF9wcm9ncmFtX2xvYWRfeDQpLAorCVNOQU5EX0lORk8oIkVNNzNGMDQ0U05BIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4ZDUsIDB4MjQpLAorCQkgICBTTkFORF9NRU1PUkdfOEdfNEtfMjU2LAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV9xdWFkX3EyZCwKKwkJICAgJnNuYW5kX2NhcF9wcm9ncmFtX2xvYWRfeDQpLAorCVNOQU5EX0lORk8oIkVNNzNGMDQ0VkNBIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4ZDUsIDB4MmQpLAorCQkgICBTTkFORF9NRU1PUkdfOEdfNEtfMjU2LAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV9xdWFkX3EyZCwKKwkJICAgJnNuYW5kX2NhcF9wcm9ncmFtX2xvYWRfeDQpLAorCVNOQU5EX0lORk8oIkVNNzNFMDQ0U05FIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4ZDUsIDB4MGUpLAorCQkgICBTTkFORF9NRU1PUkdfOEdfNEtfMjU2LAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV9xdWFkX3EyZCwKKwkJICAgJnNuYW5kX2NhcF9wcm9ncmFtX2xvYWRfeDQpLAorCVNOQU5EX0lORk8oIkVNNzNDMDQ0U05HIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4ZDUsIDB4MGMpLAorCQkgICBTTkFORF9NRU1PUkdfMUdfMktfMTIwLAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV9xdWFkX3EyZCwKKwkJICAgJnNuYW5kX2NhcF9wcm9ncmFtX2xvYWRfeDQpLAorCVNOQU5EX0lORk8oIkVNNzNEMDQ0VkNOIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4ZDUsIDB4MGYpLAorCQkgICBTTkFORF9NRU1PUkdfMkdfMktfNjQsCisJCSAgICZzbmFuZF9jYXBfcmVhZF9mcm9tX2NhY2hlX3F1YWRfcTJkLAorCQkgICAmc25hbmRfY2FwX3Byb2dyYW1fbG9hZF94NCksCisKKwlTTkFORF9JTkZPKCJGTTM1UTFHQSIsIFNOQU5EX0lEKFNOQU5EX0lEX0RZTU1ZLCAweGU1LCAweDcxKSwKKwkJICAgU05BTkRfTUVNT1JHXzFHXzJLXzY0LAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV94NCwKKwkJICAgJnNuYW5kX2NhcF9wcm9ncmFtX2xvYWRfeDQpLAorCisJU05BTkRfSU5GTygiUE4yNkcwMUEiLCBTTkFORF9JRChTTkFORF9JRF9EWU1NWSwgMHhhMSwgMHhlMSksCisJCSAgIFNOQU5EX01FTU9SR18xR18yS18xMjgsCisJCSAgICZzbmFuZF9jYXBfcmVhZF9mcm9tX2NhY2hlX3F1YWRfcTJkLAorCQkgICAmc25hbmRfY2FwX3Byb2dyYW1fbG9hZF94NCksCisJU05BTkRfSU5GTygiUE4yNkcwMkEiLCBTTkFORF9JRChTTkFORF9JRF9EWU1NWSwgMHhhMSwgMHhlMiksCisJCSAgIFNOQU5EX01FTU9SR18yR18yS18xMjgsCisJCSAgICZzbmFuZF9jYXBfcmVhZF9mcm9tX2NhY2hlX3F1YWRfcTJkLAorCQkgICAmc25hbmRfY2FwX3Byb2dyYW1fbG9hZF94NCksCisKKwlTTkFORF9JTkZPKCJJUzM3U01MMDFHMSIsIFNOQU5EX0lEKFNOQU5EX0lEX0RZTU1ZLCAweGM4LCAweDIxKSwKKwkJICAgU05BTkRfTUVNT1JHXzFHXzJLXzY0LAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV94NCwKKwkJICAgJnNuYW5kX2NhcF9wcm9ncmFtX2xvYWRfeDQpLAorCisJU05BTkRfSU5GTygiQVRPMjVEMUdBIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4OWIsIDB4MTIpLAorCQkgICBTTkFORF9NRU1PUkdfMUdfMktfNjQsCisJCSAgICZzbmFuZF9jYXBfcmVhZF9mcm9tX2NhY2hlX3g0X29ubHksCisJCSAgICZzbmFuZF9jYXBfcHJvZ3JhbV9sb2FkX3g0KSwKKworCVNOQU5EX0lORk8oIkhZRjFHUTRVIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4YzksIDB4NTEpLAorCQkgICBTTkFORF9NRU1PUkdfMUdfMktfMTI4LAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV9xdWFkX3EyZCwKKwkJICAgJnNuYW5kX2NhcF9wcm9ncmFtX2xvYWRfeDQpLAorCVNOQU5EX0lORk8oIkhZRjJHUTRVIiwgU05BTkRfSUQoU05BTkRfSURfRFlNTVksIDB4YzksIDB4NTIpLAorCQkgICBTTkFORF9NRU1PUkdfMkdfMktfMTI4LAorCQkgICAmc25hbmRfY2FwX3JlYWRfZnJvbV9jYWNoZV9xdWFkX3EyZCwKKwkJICAgJnNuYW5kX2NhcF9wcm9ncmFtX2xvYWRfeDQpLAorfTsKKworc3RhdGljIGludCBtdGtfc25hbmRfd2luYm9uZF9zZWxlY3RfZGllKHN0cnVjdCBtdGtfc25hbmQgKnNuZiwgdWludDMyX3QgZGllaWR4KQoreworCXVpbnQ4X3Qgb3BbMl07CisKKwlpZiAoZGllaWR4ID4gMSkgeworCQlzbmFuZF9sb2dfY2hpcChzbmYtPnBkZXYsICJJbnZhbGlkIGRpZSBpbmRleCAldVxuIiwgZGllaWR4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJb3BbMF0gPSBTTkFORF9DTURfV0lOQk9ORF9TRUxFQ1RfRElFOworCW9wWzFdID0gKHVpbnQ4X3QpZGllaWR4OworCisJcmV0dXJuIG10a19zbmFuZF9tYWNfaW8oc25mLCBvcCwgc2l6ZW9mKG9wKSwgTlVMTCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX3NuYW5kX21pY3Jvbl9zZWxlY3RfZGllKHN0cnVjdCBtdGtfc25hbmQgKnNuZiwgdWludDMyX3QgZGllaWR4KQoreworCWludCByZXQ7CisKKwlpZiAoZGllaWR4ID4gMSkgeworCQlzbmFuZF9sb2dfY2hpcChzbmYtPnBkZXYsICJJbnZhbGlkIGRpZSBpbmRleCAldVxuIiwgZGllaWR4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gbXRrX3NuYW5kX3NldF9mZWF0dXJlKHNuZiwgU05BTkRfRkVBVFVSRV9NSUNST05fRElFX0FERFIsCisJCQkJICAgIFNOQU5EX01JQ1JPTl9ESUVfU0VMXzEpOworCWlmIChyZXQpIHsKKwkJc25hbmRfbG9nX2NoaXAoc25mLT5wZGV2LAorCQkJICAgICAgICJGYWlsZWQgdG8gc2V0IGRpZSBzZWxlY3Rpb24gZmVhdHVyZVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2NvbnN0IHN0cnVjdCBzbmFuZF9mbGFzaF9pbmZvICpzbmFuZF9mbGFzaF9pZF9sb29rdXAoZW51bSBzbmFuZF9pZF90eXBlIHR5cGUsCisJCQkJCQkgICAgIGNvbnN0IHVpbnQ4X3QgKmlkKQoreworCWNvbnN0IHN0cnVjdCBzbmFuZF9pZCAqZmlkOworCXVpbnQzMl90IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzbmFuZF9mbGFzaF9pZHMpOyBpKyspIHsKKwkJaWYgKHNuYW5kX2ZsYXNoX2lkc1tpXS5pZC50eXBlICE9IHR5cGUpCisJCQljb250aW51ZTsKKworCQlmaWQgPSAmc25hbmRfZmxhc2hfaWRzW2ldLmlkOworCQlpZiAobWVtY21wKGZpZC0+aWQsIGlkLCBmaWQtPmxlbikpCisJCQljb250aW51ZTsKKworCQlyZXR1cm4gJnNuYW5kX2ZsYXNoX2lkc1tpXTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9tdGQvbXRrLXNuYW5kL210ay1zbmFuZC1tdGQuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9tdGQvbXRrLXNuYW5kL210ay1zbmFuZC1tdGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWUwMzE3Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL210ZC9tdGstc25hbmQvbXRrLXNuYW5kLW10ZC5jCkBAIC0wLDAgKzEsNzI4IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBNZWRpYVRlayBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQXV0aG9yOiBXZWlqaWUgR2FvIDx3ZWlqaWUuZ2FvQG1lZGlhdGVrLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisKKyNpbmNsdWRlICJtdGstc25hbmQuaCIKKyNpbmNsdWRlICJtdGstc25hbmQtb3MuaCIKKworc3RydWN0IG10a19zbmFuZF9vZl9pZCB7CisJZW51bSBtdGtfc25hbmRfc29jIHNvYzsKKwlib29sIGVuX2VjY19jbGs7CisJYm9vbCBlbl9uZmlfaGNsazsKK307CisKK3N0cnVjdCBtdGtfc25hbmRfbXRkIHsKKwlzdHJ1Y3QgbXRrX3NuYW5kX3BsYXRfZGV2IHBkZXY7CisJc3RydWN0IG10a19zbmFuZF9vZl9pZCAqc29jX2lkOworCisJc3RydWN0IGNsayAqbmZpX2NsazsKKwlzdHJ1Y3QgY2xrICpwYWRfY2xrOworCXN0cnVjdCBjbGsgKmVjY19jbGs7CisJc3RydWN0IGNsayAqbmZpX2hjbGs7CisKKwl2b2lkIF9faW9tZW0gKm5maV9yZWdzOworCXZvaWQgX19pb21lbSAqZWNjX3JlZ3M7CisKKwlpbnQgaXJxOworCisJYm9vbCBxdWFkX3NwaTsKKwllbnVtIG10a19zbmFuZF9zb2Mgc29jOworCisJc3RydWN0IG10ZF9pbmZvIG10ZDsKKwlzdHJ1Y3QgbXRrX3NuYW5kICpzbmY7CisJc3RydWN0IG10a19zbmFuZF9jaGlwX2luZm8gY2luZm87CisJdWludDhfdCAqcGFnZV9jYWNoZTsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKK307CisKKyNkZWZpbmUgbXRkX3RvX21zbShtdGQpIGNvbnRhaW5lcl9vZihtdGQsIHN0cnVjdCBtdGtfc25hbmRfbXRkLCBtdGQpCisKK3N0YXRpYyBpbnQgbXRrX3NuYW5kX210ZF9lcmFzZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGVyYXNlX2luZm8gKmluc3RyKQoreworCXN0cnVjdCBtdGtfc25hbmRfbXRkICptc20gPSBtdGRfdG9fbXNtKG10ZCk7CisJdTY0IHN0YXJ0X2FkZHIsIGVuZF9hZGRyOworCWludCByZXQ7CisKKwkvKiBEbyBub3QgYWxsb3cgd3JpdGUgcGFzdCBlbmQgb2YgZGV2aWNlICovCisJaWYgKChpbnN0ci0+YWRkciArIGluc3RyLT5sZW4pID4gbXRkLT5zaXplKSB7CisJCWRldl9lcnIobXNtLT5wZGV2LmRldiwKKwkJCSJhdHRlbXB0IHRvIGVyYXNlIGJleW9uZCBlbmQgb2YgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3RhcnRfYWRkciA9IGluc3RyLT5hZGRyICYgKH5tdGQtPmVyYXNlc2l6ZV9tYXNrKTsKKwllbmRfYWRkciA9IGluc3RyLT5hZGRyICsgaW5zdHItPmxlbjsKKwlpZiAoZW5kX2FkZHIgJiBtdGQtPmVyYXNlc2l6ZV9tYXNrKSB7CisJCWVuZF9hZGRyID0gKGVuZF9hZGRyICsgbXRkLT5lcmFzZXNpemVfbWFzaykgJgorCQkJICAgKH5tdGQtPmVyYXNlc2l6ZV9tYXNrKTsKKwl9CisKKwltdXRleF9sb2NrKCZtc20tPmxvY2spOworCisJd2hpbGUgKHN0YXJ0X2FkZHIgPCBlbmRfYWRkcikgeworCQlpZiAobXRrX3NuYW5kX2Jsb2NrX2lzYmFkKG1zbS0+c25mLCBzdGFydF9hZGRyKSkgeworCQkJaW5zdHItPmZhaWxfYWRkciA9IHN0YXJ0X2FkZHI7CisJCQlyZXQgPSAtRUlPOworCQkJYnJlYWs7CisJCX0KKworCQlyZXQgPSBtdGtfc25hbmRfZXJhc2VfYmxvY2sobXNtLT5zbmYsIHN0YXJ0X2FkZHIpOworCQlpZiAocmV0KSB7CisJCQlpbnN0ci0+ZmFpbF9hZGRyID0gc3RhcnRfYWRkcjsKKwkJCWJyZWFrOworCQl9CisKKwkJc3RhcnRfYWRkciArPSBtdGQtPmVyYXNlc2l6ZTsKKwl9CisKKwltdXRleF91bmxvY2soJm1zbS0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10a19zbmFuZF9tdGRfcmVhZF9kYXRhKHN0cnVjdCBtdGtfc25hbmRfbXRkICptc20sIHVpbnQ2NF90IGFkZHIsCisJCQkJICAgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpCit7CisJc3RydWN0IG10ZF9pbmZvICptdGQgPSAmbXNtLT5tdGQ7CisJc2l6ZV90IGxlbiwgb29ibGVuLCBtYXhvb2JsZW4sIGNoa2xlbjsKKwl1aW50MzJfdCBjb2wsIG9vYm9mZnM7CisJdWludDhfdCAqZGF0Y2FjaGUsICpvb2JjYWNoZTsKKwlib29sIGVjY19mYWlsZWQgPSBmYWxzZSwgcmF3ID0gb3BzLT5tb2RlID09IE1URF9PUFNfUkFXID8gdHJ1ZSA6IGZhbHNlOworCWludCByZXQsIG1heF9iaXRmbGlwcyA9IDA7CisKKwljb2wgPSBhZGRyICYgbXRkLT53cml0ZXNpemVfbWFzazsKKwlhZGRyICY9IH5tdGQtPndyaXRlc2l6ZV9tYXNrOworCW1heG9vYmxlbiA9IG10ZF9vb2JhdmFpbChtdGQsIG9wcyk7CisJb29ib2ZmcyA9IG9wcy0+b29ib2ZmczsKKwlvb2JsZW4gPSBvcHMtPm9vYmxlbjsKKwlsZW4gPSBvcHMtPmxlbjsKKworCWRhdGNhY2hlID0gbGVuID8gbXNtLT5wYWdlX2NhY2hlIDogTlVMTDsKKwlvb2JjYWNoZSA9IG9vYmxlbiA/IG1zbS0+cGFnZV9jYWNoZSArIG10ZC0+d3JpdGVzaXplIDogTlVMTDsKKworCW9wcy0+b29icmV0bGVuID0gMDsKKwlvcHMtPnJldGxlbiA9IDA7CisKKwl3aGlsZSAobGVuIHx8IG9vYmxlbikgeworCQlpZiAob3BzLT5tb2RlID09IE1URF9PUFNfQVVUT19PT0IpCisJCQlyZXQgPSBtdGtfc25hbmRfcmVhZF9wYWdlX2F1dG9fb29iKG1zbS0+c25mLCBhZGRyLAorCQkJCWRhdGNhY2hlLCBvb2JjYWNoZSwgbWF4b29ibGVuLCBOVUxMLCByYXcpOworCQllbHNlCisJCQlyZXQgPSBtdGtfc25hbmRfcmVhZF9wYWdlKG1zbS0+c25mLCBhZGRyLCBkYXRjYWNoZSwKKwkJCQlvb2JjYWNoZSwgcmF3KTsKKworCQlpZiAocmV0IDwgMCAmJiByZXQgIT0gLUVCQURNU0cpCisJCQlyZXR1cm4gcmV0OworCisJCWlmIChyZXQgPT0gLUVCQURNU0cpIHsKKwkJCW10ZC0+ZWNjX3N0YXRzLmZhaWxlZCsrOworCQkJZWNjX2ZhaWxlZCA9IHRydWU7CisJCX0gZWxzZSB7CisJCQltdGQtPmVjY19zdGF0cy5jb3JyZWN0ZWQgKz0gcmV0OworCQkJbWF4X2JpdGZsaXBzID0gbWF4X3QoaW50LCByZXQsIG1heF9iaXRmbGlwcyk7CisJCX0KKworCQlpZiAobGVuKSB7CisJCQkvKiBNb3ZlIGRhdGEgKi8KKwkJCWNoa2xlbiA9IG10ZC0+d3JpdGVzaXplIC0gY29sOworCQkJaWYgKGNoa2xlbiA+IGxlbikKKwkJCQljaGtsZW4gPSBsZW47CisKKwkJCW1lbWNweShvcHMtPmRhdGJ1ZiArIG9wcy0+cmV0bGVuLCBkYXRjYWNoZSArIGNvbCwKKwkJCSAgICAgICBjaGtsZW4pOworCQkJbGVuIC09IGNoa2xlbjsKKwkJCWNvbCA9IDA7IC8qIChjb2wgKyBjaGtsZW4pICUgICovCisJCQlvcHMtPnJldGxlbiArPSBjaGtsZW47CisJCX0KKworCQlpZiAob29ibGVuKSB7CisJCQkvKiBNb3ZlIG9vYiAqLworCQkJY2hrbGVuID0gbWF4b29ibGVuIC0gb29ib2ZmczsKKwkJCWlmIChjaGtsZW4gPiBvb2JsZW4pCisJCQkJY2hrbGVuID0gb29ibGVuOworCisJCQltZW1jcHkob3BzLT5vb2JidWYgKyBvcHMtPm9vYnJldGxlbiwgb29iY2FjaGUgKyBvb2JvZmZzLAorCQkJICAgICAgIGNoa2xlbik7CisJCQlvb2JsZW4gLT0gY2hrbGVuOworCQkJb29ib2ZmcyA9IDA7IC8qIChvb2JvZmZzICsgY2hrbGVuKSAlIG1heG9vYmxlbjsgKi8KKwkJCW9wcy0+b29icmV0bGVuICs9IGNoa2xlbjsKKwkJfQorCisJCWFkZHIgKz0gbXRkLT53cml0ZXNpemU7CisJfQorCisJcmV0dXJuIGVjY19mYWlsZWQgPyAtRUJBRE1TRyA6IG1heF9iaXRmbGlwczsKK30KKworc3RhdGljIGludCBtdGtfc25hbmRfbXRkX3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwKKwkJCQkgIHN0cnVjdCBtdGRfb29iX29wcyAqb3BzKQoreworCXN0cnVjdCBtdGtfc25hbmRfbXRkICptc20gPSBtdGRfdG9fbXNtKG10ZCk7CisJdWludDMyX3QgbWF4b29ibGVuOworCWludCByZXQ7CisKKwlpZiAoIW9wcy0+b29iYnVmICYmICFvcHMtPmRhdGJ1ZikgeworCQlpZiAob3BzLT5vb2JsZW4gfHwgb3BzLT5sZW4pCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlyZXR1cm4gMDsKKwl9CisKKwlzd2l0Y2ggKG9wcy0+bW9kZSkgeworCWNhc2UgTVREX09QU19QTEFDRV9PT0I6CisJY2FzZSBNVERfT1BTX0FVVE9fT09COgorCWNhc2UgTVREX09QU19SQVc6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIobXNtLT5wZGV2LmRldiwgInVuc3VwcG9ydGVkIG9vYiBtb2RlOiAldVxuIiwgb3BzLT5tb2RlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbWF4b29ibGVuID0gbXRkX29vYmF2YWlsKG10ZCwgb3BzKTsKKworCS8qIERvIG5vdCBhbGxvdyByZWFkIHBhc3QgZW5kIG9mIGRldmljZSAqLworCWlmIChvcHMtPmRhdGJ1ZiAmJiAoZnJvbSArIG9wcy0+bGVuKSA+IG10ZC0+c2l6ZSkgeworCQlkZXZfZXJyKG1zbS0+cGRldi5kZXYsCisJCQkiYXR0ZW1wdCB0byByZWFkIGJleW9uZCBlbmQgb2YgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHVubGlrZWx5KG9wcy0+b29ib2ZmcyA+PSBtYXhvb2JsZW4pKSB7CisJCWRldl9lcnIobXNtLT5wZGV2LmRldiwgImF0dGVtcHQgdG8gc3RhcnQgcmVhZCBvdXRzaWRlIG9vYlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh1bmxpa2VseShmcm9tID49IG10ZC0+c2l6ZSB8fAorCSAgICBvcHMtPm9vYm9mZnMgKyBvcHMtPm9vYmxlbiA+ICgobXRkLT5zaXplID4+IG10ZC0+d3JpdGVzaXplX3NoaWZ0KSAtCisJICAgIChmcm9tID4+IG10ZC0+d3JpdGVzaXplX3NoaWZ0KSkgKiBtYXhvb2JsZW4pKSB7CisJCWRldl9lcnIobXNtLT5wZGV2LmRldiwKKwkJCSJhdHRlbXB0IHRvIHJlYWQgYmV5b25kIGVuZCBvZiBkZXZpY2VcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltdXRleF9sb2NrKCZtc20tPmxvY2spOworCXJldCA9IG10a19zbmFuZF9tdGRfcmVhZF9kYXRhKG1zbSwgZnJvbSwgb3BzKTsKKwltdXRleF91bmxvY2soJm1zbS0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10a19zbmFuZF9tdGRfd3JpdGVfZGF0YShzdHJ1Y3QgbXRrX3NuYW5kX210ZCAqbXNtLCB1aW50NjRfdCBhZGRyLAorCQkJCSAgICBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKK3sKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9ICZtc20tPm10ZDsKKwlzaXplX3QgbGVuLCBvb2JsZW4sIG1heG9vYmxlbiwgY2hrbGVuLCBvb2J3cmxlbjsKKwl1aW50MzJfdCBjb2wsIG9vYm9mZnM7CisJdWludDhfdCAqZGF0Y2FjaGUsICpvb2JjYWNoZTsKKwlib29sIHJhdyA9IG9wcy0+bW9kZSA9PSBNVERfT1BTX1JBVyA/IHRydWUgOiBmYWxzZTsKKwlpbnQgcmV0OworCisJY29sID0gYWRkciAmIG10ZC0+d3JpdGVzaXplX21hc2s7CisJYWRkciAmPSB+bXRkLT53cml0ZXNpemVfbWFzazsKKwltYXhvb2JsZW4gPSBtdGRfb29iYXZhaWwobXRkLCBvcHMpOworCW9vYm9mZnMgPSBvcHMtPm9vYm9mZnM7CisJb29ibGVuID0gb3BzLT5vb2JsZW47CisJbGVuID0gb3BzLT5sZW47CisKKwlkYXRjYWNoZSA9IGxlbiA/IG1zbS0+cGFnZV9jYWNoZSA6IE5VTEw7CisJb29iY2FjaGUgPSBvb2JsZW4gPyBtc20tPnBhZ2VfY2FjaGUgKyBtdGQtPndyaXRlc2l6ZSA6IE5VTEw7CisKKwlvcHMtPm9vYnJldGxlbiA9IDA7CisJb3BzLT5yZXRsZW4gPSAwOworCisJd2hpbGUgKGxlbiB8fCBvb2JsZW4pIHsKKwkJaWYgKGxlbikgeworCQkJLyogTW92ZSBkYXRhICovCisJCQljaGtsZW4gPSBtdGQtPndyaXRlc2l6ZSAtIGNvbDsKKwkJCWlmIChjaGtsZW4gPiBsZW4pCisJCQkJY2hrbGVuID0gbGVuOworCisJCQltZW1zZXQoZGF0Y2FjaGUsIDB4ZmYsIGNvbCk7CisJCQltZW1jcHkoZGF0Y2FjaGUgKyBjb2wsIG9wcy0+ZGF0YnVmICsgb3BzLT5yZXRsZW4sCisJCQkgICAgICAgY2hrbGVuKTsKKwkJCW1lbXNldChkYXRjYWNoZSArIGNvbCArIGNoa2xlbiwgMHhmZiwKKwkJCSAgICAgICBtdGQtPndyaXRlc2l6ZSAtIGNvbCAtIGNoa2xlbik7CisJCQlsZW4gLT0gY2hrbGVuOworCQkJY29sID0gMDsgLyogKGNvbCArIGNoa2xlbikgJSAgKi8KKwkJCW9wcy0+cmV0bGVuICs9IGNoa2xlbjsKKwkJfQorCisJCW9vYndybGVuID0gMDsKKwkJaWYgKG9vYmxlbikgeworCQkJLyogTW92ZSBvb2IgKi8KKwkJCWNoa2xlbiA9IG1heG9vYmxlbiAtIG9vYm9mZnM7CisJCQlpZiAoY2hrbGVuID4gb29ibGVuKQorCQkJCWNoa2xlbiA9IG9vYmxlbjsKKworCQkJbWVtc2V0KG9vYmNhY2hlLCAweGZmLCBvb2JvZmZzKTsKKwkJCW1lbWNweShvb2JjYWNoZSArIG9vYm9mZnMsCisJCQkgICAgICAgb3BzLT5vb2JidWYgKyBvcHMtPm9vYnJldGxlbiwgY2hrbGVuKTsKKwkJCW1lbXNldChvb2JjYWNoZSArIG9vYm9mZnMgKyBjaGtsZW4sIDB4ZmYsCisJCQkgICAgICAgbXRkLT5vb2JzaXplIC0gb29ib2ZmcyAtIGNoa2xlbik7CisJCQlvb2J3cmxlbiA9IGNoa2xlbiArIG9vYm9mZnM7CisJCQlvb2JsZW4gLT0gY2hrbGVuOworCQkJb29ib2ZmcyA9IDA7IC8qIChvb2JvZmZzICsgY2hrbGVuKSAlIG1heG9vYmxlbjsgKi8KKwkJCW9wcy0+b29icmV0bGVuICs9IGNoa2xlbjsKKwkJfQorCisJCWlmIChvcHMtPm1vZGUgPT0gTVREX09QU19BVVRPX09PQikKKwkJCXJldCA9IG10a19zbmFuZF93cml0ZV9wYWdlX2F1dG9fb29iKG1zbS0+c25mLCBhZGRyLAorCQkJCWRhdGNhY2hlLCBvb2JjYWNoZSwgb29id3JsZW4sIE5VTEwsIHJhdyk7CisJCWVsc2UKKwkJCXJldCA9IG10a19zbmFuZF93cml0ZV9wYWdlKG1zbS0+c25mLCBhZGRyLCBkYXRjYWNoZSwKKwkJCQlvb2JjYWNoZSwgcmF3KTsKKworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlhZGRyICs9IG10ZC0+d3JpdGVzaXplOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19zbmFuZF9tdGRfd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sCisJCQkJICAgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpCit7CisJc3RydWN0IG10a19zbmFuZF9tdGQgKm1zbSA9IG10ZF90b19tc20obXRkKTsKKwl1aW50MzJfdCBtYXhvb2JsZW47CisJaW50IHJldDsKKworCWlmICghb3BzLT5vb2JidWYgJiYgIW9wcy0+ZGF0YnVmKSB7CisJCWlmIChvcHMtPm9vYmxlbiB8fCBvcHMtPmxlbikKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXJldHVybiAwOworCX0KKworCXN3aXRjaCAob3BzLT5tb2RlKSB7CisJY2FzZSBNVERfT1BTX1BMQUNFX09PQjoKKwljYXNlIE1URF9PUFNfQVVUT19PT0I6CisJY2FzZSBNVERfT1BTX1JBVzoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2Vycihtc20tPnBkZXYuZGV2LCAidW5zdXBwb3J0ZWQgb29iIG1vZGU6ICV1XG4iLCBvcHMtPm1vZGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltYXhvb2JsZW4gPSBtdGRfb29iYXZhaWwobXRkLCBvcHMpOworCisJLyogRG8gbm90IGFsbG93IHdyaXRlIHBhc3QgZW5kIG9mIGRldmljZSAqLworCWlmIChvcHMtPmRhdGJ1ZiAmJiAodG8gKyBvcHMtPmxlbikgPiBtdGQtPnNpemUpIHsKKwkJZGV2X2Vycihtc20tPnBkZXYuZGV2LAorCQkJImF0dGVtcHQgdG8gd3JpdGUgYmV5b25kIGVuZCBvZiBkZXZpY2VcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodW5saWtlbHkob3BzLT5vb2JvZmZzID49IG1heG9vYmxlbikpIHsKKwkJZGV2X2Vycihtc20tPnBkZXYuZGV2LAorCQkJImF0dGVtcHQgdG8gc3RhcnQgd3JpdGUgb3V0c2lkZSBvb2JcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodW5saWtlbHkodG8gPj0gbXRkLT5zaXplIHx8CisJICAgIG9wcy0+b29ib2ZmcyArIG9wcy0+b29ibGVuID4gKChtdGQtPnNpemUgPj4gbXRkLT53cml0ZXNpemVfc2hpZnQpIC0KKwkgICAgKHRvID4+IG10ZC0+d3JpdGVzaXplX3NoaWZ0KSkgKiBtYXhvb2JsZW4pKSB7CisJCWRldl9lcnIobXNtLT5wZGV2LmRldiwKKwkJCSJhdHRlbXB0IHRvIHdyaXRlIGJleW9uZCBlbmQgb2YgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXV0ZXhfbG9jaygmbXNtLT5sb2NrKTsKKwlyZXQgPSBtdGtfc25hbmRfbXRkX3dyaXRlX2RhdGEobXNtLCB0bywgb3BzKTsKKwltdXRleF91bmxvY2soJm1zbS0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10a19zbmFuZF9tdGRfYmxvY2tfaXNiYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZmZzKQoreworCXN0cnVjdCBtdGtfc25hbmRfbXRkICptc20gPSBtdGRfdG9fbXNtKG10ZCk7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJm1zbS0+bG9jayk7CisJcmV0ID0gbXRrX3NuYW5kX2Jsb2NrX2lzYmFkKG1zbS0+c25mLCBvZmZzKTsKKwltdXRleF91bmxvY2soJm1zbS0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10a19zbmFuZF9tdGRfYmxvY2tfbWFya2JhZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mZnMpCit7CisJc3RydWN0IG10a19zbmFuZF9tdGQgKm1zbSA9IG10ZF90b19tc20obXRkKTsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmbXNtLT5sb2NrKTsKKwlyZXQgPSBtdGtfc25hbmRfYmxvY2tfbWFya2JhZChtc20tPnNuZiwgb2Zmcyk7CisJbXV0ZXhfdW5sb2NrKCZtc20tPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdGtfc25hbmRfb29ibGF5b3V0X2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHNlY3Rpb24sCisJCQkJICAgc3RydWN0IG10ZF9vb2JfcmVnaW9uICpvb2JlY2MpCit7CisJc3RydWN0IG10a19zbmFuZF9tdGQgKm1zbSA9IG10ZF90b19tc20obXRkKTsKKworCWlmIChzZWN0aW9uKQorCQlyZXR1cm4gLUVSQU5HRTsKKworCW9vYmVjYy0+b2Zmc2V0ID0gbXNtLT5jaW5mby5mZG1fc2l6ZSAqIG1zbS0+Y2luZm8ubnVtX3NlY3RvcnM7CisJb29iZWNjLT5sZW5ndGggPSBtdGQtPm9vYnNpemUgLSBvb2JlY2MtPm9mZnNldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19zbmFuZF9vb2JsYXlvdXRfZnJlZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHNlY3Rpb24sCisJCQkJICAgIHN0cnVjdCBtdGRfb29iX3JlZ2lvbiAqb29iZnJlZSkKK3sKKwlzdHJ1Y3QgbXRrX3NuYW5kX210ZCAqbXNtID0gbXRkX3RvX21zbShtdGQpOworCisJaWYgKHNlY3Rpb24gPj0gbXNtLT5jaW5mby5udW1fc2VjdG9ycykKKwkJcmV0dXJuIC1FUkFOR0U7CisKKwlvb2JmcmVlLT5sZW5ndGggPSBtc20tPmNpbmZvLmZkbV9zaXplIC0gMTsKKwlvb2JmcmVlLT5vZmZzZXQgPSBzZWN0aW9uICogbXNtLT5jaW5mby5mZG1fc2l6ZSArIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlycXJldHVybl90IG10a19zbmFuZF9pcnEoaW50IGlycSwgdm9pZCAqaWQpCit7CisJc3RydWN0IG10a19zbmFuZF9tdGQgKm1zbSA9IGlkOworCWludCByZXQ7CisKKwlyZXQgPSBtdGtfc25hbmRfaXJxX3Byb2Nlc3MobXNtLT5zbmYpOworCWlmIChyZXQgPiAwKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKKwlyZXR1cm4gSVJRX05PTkU7Cit9CisKK3N0YXRpYyBpbnQgbXRrX3NuYW5kX2VuYWJsZV9jbGsoc3RydWN0IG10a19zbmFuZF9tdGQgKm1zbSkKK3sKKwlzdHJ1Y3QgbXRrX3NuYW5kX29mX2lkICpzb2NfaWQgPSBtc20tPnNvY19pZDsKKwlpbnQgcmV0OworCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKG1zbS0+bmZpX2Nsayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKG1zbS0+cGRldi5kZXYsICJ1bmFibGUgdG8gZW5hYmxlIG5maSBjbGtcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShtc20tPnBhZF9jbGspOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihtc20tPnBkZXYuZGV2LCAidW5hYmxlIHRvIGVuYWJsZSBwYWQgY2xrXG4iKTsKKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKG1zbS0+bmZpX2Nsayk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKHNvY19pZC0+ZW5fZWNjX2NsaykgeworCQlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUobXNtLT5lY2NfY2xrKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2Vycihtc20tPnBkZXYuZGV2LCAidW5hYmxlIHRvIGVuYWJsZSBlY2MgY2xrXG4iKTsKKwkJCWNsa19kaXNhYmxlX3VucHJlcGFyZShtc20tPm5maV9jbGspOworCQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKG1zbS0+cGFkX2Nsayk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJaWYgKHNvY19pZC0+ZW5fbmZpX2hjbGspIHsKKwkJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKG1zbS0+bmZpX2hjbGspOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKG1zbS0+cGRldi5kZXYsICJ1bmFibGUgdG8gZW5hYmxlIG5maSBoY2xrXG4iKTsKKwkJCWNsa19kaXNhYmxlX3VucHJlcGFyZShtc20tPm5maV9jbGspOworCQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKG1zbS0+cGFkX2Nsayk7CisJCQlpZiAoc29jX2lkLT5lbl9lY2NfY2xrKQorCQkJCWNsa19kaXNhYmxlX3VucHJlcGFyZShtc20tPmVjY19jbGspOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtdGtfc25hbmRfZGlzYWJsZV9jbGsoc3RydWN0IG10a19zbmFuZF9tdGQgKm1zbSkKK3sKKwlzdHJ1Y3QgbXRrX3NuYW5kX29mX2lkICpzb2NfaWQgPSBtc20tPnNvY19pZDsKKworCWNsa19kaXNhYmxlX3VucHJlcGFyZShtc20tPm5maV9jbGspOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShtc20tPnBhZF9jbGspOworCWlmIChzb2NfaWQtPmVuX2VjY19jbGspCisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShtc20tPmVjY19jbGspOworCWlmIChzb2NfaWQtPmVuX25maV9oY2xrKQorCQljbGtfZGlzYWJsZV91bnByZXBhcmUobXNtLT5uZmlfaGNsayk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRkX29vYmxheW91dF9vcHMgbXRrX3NuYW5kX29vYmxheW91dCA9IHsKKwkuZWNjID0gbXRrX3NuYW5kX29vYmxheW91dF9lY2MsCisJLmZyZWUgPSBtdGtfc25hbmRfb29ibGF5b3V0X2ZyZWUsCit9OworCitzdGF0aWMgc3RydWN0IG10a19zbmFuZF9vZl9pZCBtdDc2MjJfc29jX2lkID0geworCS5zb2MgPSBTTkFORF9TT0NfTVQ3NjIyLAorCS5lbl9lY2NfY2xrID0gdHJ1ZSwKKwkuZW5fbmZpX2hjbGsgPSBmYWxzZQorfTsKKworc3RhdGljIHN0cnVjdCBtdGtfc25hbmRfb2ZfaWQgbXQ3NjI5X3NvY19pZCA9IHsKKwkuc29jID0gU05BTkRfU09DX01UNzYyOSwKKwkuZW5fZWNjX2NsayA9IHRydWUsCisJLmVuX25maV9oY2xrID0gZmFsc2UKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRrX3NuYW5kX29mX2lkIG10Nzk4Nl9zb2NfaWQgPSB7CisJLnNvYyA9IFNOQU5EX1NPQ19NVDc5ODYsCisJLmVuX2VjY19jbGsgPSBmYWxzZSwKKwkuZW5fbmZpX2hjbGsgPSB0cnVlCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfc25hbmRfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc2MjItc25hbmQiLCAuZGF0YSA9ICZtdDc2MjJfc29jX2lkIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc2Mjktc25hbmQiLCAuZGF0YSA9ICZtdDc2Mjlfc29jX2lkIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtc25hbmQiLCAuZGF0YSA9ICZtdDc5ODZfc29jX2lkIH0sCisJeyB9LAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXRrX3NuYW5kX2lkcyk7CisKK3N0YXRpYyBpbnQgbXRrX3NuYW5kX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG10a19zbmFuZF9wbGF0ZGF0YSBtdGtfc25hbmRfcGRhdGEgPSB7fTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGRldi0+ZGV2Lm9mX25vZGU7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2Zfc29jX2lkOworCXN0cnVjdCBtdGtfc25hbmRfbXRkICptc207CisJc3RydWN0IG10ZF9pbmZvICptdGQ7CisJc3RydWN0IHJlc291cmNlICpyOworCXVpbnQzMl90IHNpemU7CisJaW50IHJldDsKKworCW9mX3NvY19pZCA9IG9mX21hdGNoX25vZGUobXRrX3NuYW5kX2lkcywgbnApOworCWlmICghb2Zfc29jX2lkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1zbSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKm1zbSksIEdGUF9LRVJORUwpOworCWlmICghbXNtKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1zbS0+c29jX2lkID0gb2Zfc29jX2lkLT5kYXRhOworCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJuZmkiKTsKKwltc20tPm5maV9yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHIpOworCWlmIChJU19FUlIobXNtLT5uZmlfcmVncykpIHsKKwkJcmV0ID0gUFRSX0VSUihtc20tPm5maV9yZWdzKTsKKwkJZ290byBlcnJvdXQxOworCX0KKworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAiZWNjIik7CisJbXNtLT5lY2NfcmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByKTsKKwlpZiAoSVNfRVJSKG1zbS0+ZWNjX3JlZ3MpKSB7CisJCXJldCA9IFBUUl9FUlIobXNtLT5lY2NfcmVncyk7CisJCWdvdG8gZXJyb3V0MTsKKwl9CisKKwltc20tPnBkZXYuZGV2ID0gJnBkZXYtPmRldjsKKwltc20tPnF1YWRfc3BpID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCAibWVkaWF0ZWsscXVhZC1zcGkiKTsKKwltc20tPnNvYyA9IG1zbS0+c29jX2lkLT5zb2M7CisKKwltc20tPm5maV9jbGsgPSBkZXZtX2Nsa19nZXQobXNtLT5wZGV2LmRldiwgIm5maV9jbGsiKTsKKwlpZiAoSVNfRVJSKG1zbS0+bmZpX2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihtc20tPm5maV9jbGspOworCQlkZXZfZXJyKG1zbS0+cGRldi5kZXYsCisJCQkidW5hYmxlIHRvIGdldCBuZmlfY2xrLCBlcnIgPSAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJvdXQxOworCX0KKworCWlmIChtc20tPnNvY19pZC0+ZW5fZWNjX2NsaykgeworCQltc20tPmVjY19jbGsgPSBkZXZtX2Nsa19nZXQobXNtLT5wZGV2LmRldiwgImVjY19jbGsiKTsKKwkJaWYgKElTX0VSUihtc20tPmVjY19jbGspKSB7CisJCQlyZXQgPSBQVFJfRVJSKG1zbS0+ZWNjX2Nsayk7CisJCQlkZXZfZXJyKG1zbS0+cGRldi5kZXYsCisJCQkJInVuYWJsZSB0byBnZXQgZWNjX2NsaywgZXJyID0gJWRcbiIsIHJldCk7CisJCQlnb3RvIGVycm91dDE7CisJCX0KKwl9CisKKwltc20tPnBhZF9jbGsgPSBkZXZtX2Nsa19nZXQobXNtLT5wZGV2LmRldiwgInBhZF9jbGsiKTsKKwlpZiAoSVNfRVJSKG1zbS0+cGFkX2NsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihtc20tPnBhZF9jbGspOworCQlkZXZfZXJyKG1zbS0+cGRldi5kZXYsCisJCQkidW5hYmxlIHRvIGdldCBwYWRfY2xrLCBlcnIgPSAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJvdXQxOworCX0KKworCWlmIChtc20tPnNvY19pZC0+ZW5fbmZpX2hjbGspIHsKKwkJbXNtLT5uZmlfaGNsayA9IGRldm1fY2xrX2dldChtc20tPnBkZXYuZGV2LCAibmZpX2hjbGsiKTsKKwkJaWYgKElTX0VSUihtc20tPm5maV9oY2xrKSkgeworCQkJcmV0ID0gUFRSX0VSUihtc20tPm5maV9oY2xrKTsKKwkJCWRldl9lcnIobXNtLT5wZGV2LmRldiwKKwkJCQkidW5hYmxlIHRvIGdldCBuZmlfaGNsaywgZXJyID0gJWRcbiIsIHJldCk7CisJCQlnb3RvIGVycm91dDE7CisJCX0KKwl9CisKKwlyZXQgPSBtdGtfc25hbmRfZW5hYmxlX2Nsayhtc20pOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3V0MTsKKworCS8qIFByb2JlIFNQSS1OQU5EIEZsYXNoICovCisJbXRrX3NuYW5kX3BkYXRhLnNvYyA9IG1zbS0+c29jOworCW10a19zbmFuZF9wZGF0YS5xdWFkX3NwaSA9IG1zbS0+cXVhZF9zcGk7CisJbXRrX3NuYW5kX3BkYXRhLm5maV9iYXNlID0gbXNtLT5uZmlfcmVnczsKKwltdGtfc25hbmRfcGRhdGEuZWNjX2Jhc2UgPSBtc20tPmVjY19yZWdzOworCisJcmV0ID0gbXRrX3NuYW5kX2luaXQoJm1zbS0+cGRldiwgJm10a19zbmFuZF9wZGF0YSwgJm1zbS0+c25mKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm91dDE7CisKKwltc20tPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKG1zbS0+aXJxID49IDApIHsKKwkJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycShtc20tPnBkZXYuZGV2LCBtc20tPmlycSwgbXRrX3NuYW5kX2lycSwKKwkJCQkgICAgICAgMHgwLCAibXRrLXNuYW5kIiwgbXNtKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2Vycihtc20tPnBkZXYuZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3Qgc25maSBpcnFcbiIpOworCQkJZ290byBlcnJvdXQyOworCQl9CisKKwkJcmV0ID0gZG1hX3NldF9tYXNrKG1zbS0+cGRldi5kZXYsIERNQV9CSVRfTUFTSygzMikpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKG1zbS0+cGRldi5kZXYsICJmYWlsZWQgdG8gc2V0IGRtYSBtYXNrXG4iKTsKKwkJCWdvdG8gZXJyb3V0MzsKKwkJfQorCX0KKworCW10a19zbmFuZF9nZXRfY2hpcF9pbmZvKG1zbS0+c25mLCAmbXNtLT5jaW5mbyk7CisKKwlzaXplID0gbXNtLT5jaW5mby5wYWdlc2l6ZSArIG1zbS0+Y2luZm8uc3BhcmVzaXplOworCW1zbS0+cGFnZV9jYWNoZSA9IGRldm1fa21hbGxvYyhtc20tPnBkZXYuZGV2LCBzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1zbS0+cGFnZV9jYWNoZSkgeworCQlkZXZfZXJyKG1zbS0+cGRldi5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgcGFnZSBjYWNoZVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3V0MzsKKwl9CisKKwltdXRleF9pbml0KCZtc20tPmxvY2spOworCisJZGV2X2luZm8obXNtLT5wZGV2LmRldiwKKwkJICJjaGlwIGlzICVzLCBzaXplICVsbHVNQiwgcGFnZSBzaXplICV1LCBvb2Igc2l6ZSAldVxuIiwKKwkJIG1zbS0+Y2luZm8ubW9kZWwsIG1zbS0+Y2luZm8uY2hpcHNpemUgPj4gMjAsCisJCSBtc20tPmNpbmZvLnBhZ2VzaXplLCBtc20tPmNpbmZvLnNwYXJlc2l6ZSk7CisKKwkvKiBJbml0aWFsaXplIG10ZCBmb3IgU1BJLU5BTkQgKi8KKwltdGQgPSAmbXNtLT5tdGQ7CisKKwltdGQtPm93bmVyID0gVEhJU19NT0RVTEU7CisJbXRkLT5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKKwltdGQtPnR5cGUgPSBNVERfTkFOREZMQVNIOworCW10ZC0+ZmxhZ3MgPSBNVERfQ0FQX05BTkRGTEFTSDsKKworCW10ZF9zZXRfb2Zfbm9kZShtdGQsIG5wKTsKKworCW10ZC0+c2l6ZSA9IG1zbS0+Y2luZm8uY2hpcHNpemU7CisJbXRkLT5lcmFzZXNpemUgPSBtc20tPmNpbmZvLmJsb2Nrc2l6ZTsKKwltdGQtPndyaXRlc2l6ZSA9IG1zbS0+Y2luZm8ucGFnZXNpemU7CisJbXRkLT53cml0ZWJ1ZnNpemUgPSBtdGQtPndyaXRlc2l6ZTsKKwltdGQtPm9vYnNpemUgPSBtc20tPmNpbmZvLnNwYXJlc2l6ZTsKKwltdGQtPm9vYmF2YWlsID0gbXNtLT5jaW5mby5udW1fc2VjdG9ycyAqIChtc20tPmNpbmZvLmZkbV9zaXplIC0gMSk7CisKKwltdGQtPmVyYXNlc2l6ZV9zaGlmdCA9IGZmcyhtdGQtPmVyYXNlc2l6ZSkgLSAxOworCW10ZC0+d3JpdGVzaXplX3NoaWZ0ID0gZmZzKG10ZC0+d3JpdGVzaXplKSAtIDE7CisJbXRkLT5lcmFzZXNpemVfbWFzayA9ICgxIDw8IG10ZC0+ZXJhc2VzaXplX3NoaWZ0KSAtIDE7CisJbXRkLT53cml0ZXNpemVfbWFzayA9ICgxIDw8IG10ZC0+d3JpdGVzaXplX3NoaWZ0KSAtIDE7CisKKwltdGQtPm9vYmxheW91dCA9ICZtdGtfc25hbmRfb29ibGF5b3V0OworCisJbXRkLT5lY2Nfc3RyZW5ndGggPSBtc20tPmNpbmZvLmVjY19zdHJlbmd0aDsKKwltdGQtPmJpdGZsaXBfdGhyZXNob2xkID0gKG10ZC0+ZWNjX3N0cmVuZ3RoICogMykgLyA0OworCW10ZC0+ZWNjX3N0ZXBfc2l6ZSA9IG1zbS0+Y2luZm8uc2VjdG9yX3NpemU7CisKKwltdGQtPl9lcmFzZSA9IG10a19zbmFuZF9tdGRfZXJhc2U7CisJbXRkLT5fcmVhZF9vb2IgPSBtdGtfc25hbmRfbXRkX3JlYWRfb29iOworCW10ZC0+X3dyaXRlX29vYiA9IG10a19zbmFuZF9tdGRfd3JpdGVfb29iOworCW10ZC0+X2Jsb2NrX2lzYmFkID0gbXRrX3NuYW5kX210ZF9ibG9ja19pc2JhZDsKKwltdGQtPl9ibG9ja19tYXJrYmFkID0gbXRrX3NuYW5kX210ZF9ibG9ja19tYXJrYmFkOworCisJcmV0ID0gbXRkX2RldmljZV9yZWdpc3RlcihtdGQsIE5VTEwsIDApOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihtc20tPnBkZXYuZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIG10ZCBwYXJ0aXRpb25cbiIpOworCQlnb3RvIGVycm91dDQ7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbXNtKTsKKworCXJldHVybiAwOworCitlcnJvdXQ0OgorCWRldm1fa2ZyZWUobXNtLT5wZGV2LmRldiwgbXNtLT5wYWdlX2NhY2hlKTsKKworZXJyb3V0MzoKKwlpZiAobXNtLT5pcnEgPj0gMCkKKwkJZGV2bV9mcmVlX2lycShtc20tPnBkZXYuZGV2LCBtc20tPmlycSwgbXNtKTsKKworZXJyb3V0MjoKKwltdGtfc25hbmRfY2xlYW51cChtc20tPnNuZik7CisKK2Vycm91dDE6CisJZGV2bV9rZnJlZShtc20tPnBkZXYuZGV2LCBtc20pOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10a19zbmFuZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbXRrX3NuYW5kX210ZCAqbXNtID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG10ZF9pbmZvICptdGQgPSAmbXNtLT5tdGQ7CisJaW50IHJldDsKKworCXJldCA9IG10ZF9kZXZpY2VfdW5yZWdpc3RlcihtdGQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwltdGtfc25hbmRfY2xlYW51cChtc20tPnNuZik7CisKKwlpZiAobXNtLT5pcnEgPj0gMCkKKwkJZGV2bV9mcmVlX2lycShtc20tPnBkZXYuZGV2LCBtc20tPmlycSwgbXNtKTsKKworCW10a19zbmFuZF9kaXNhYmxlX2Nsayhtc20pOworCisJZGV2bV9rZnJlZShtc20tPnBkZXYuZGV2LCBtc20tPnBhZ2VfY2FjaGUpOworCWRldm1fa2ZyZWUobXNtLT5wZGV2LmRldiwgbXNtKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19zbmFuZF9kcml2ZXIgPSB7CisJLnByb2JlID0gbXRrX3NuYW5kX3Byb2JlLAorCS5yZW1vdmUgPSBtdGtfc25hbmRfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm10ay1zbmFuZCIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG10a19zbmFuZF9pZHMsCisJfSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobXRrX3NuYW5kX2RyaXZlcik7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIldlaWppZSBHYW8gPHdlaWppZS5nYW9AbWVkaWF0ZWsuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNZWlkYVRlayBTUEktTkFORCBGbGFzaCBDb250cm9sbGVyIERyaXZlciIpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL210ZC9tdGstc25hbmQvbXRrLXNuYW5kLW9zLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbXRkL210ay1zbmFuZC9tdGstc25hbmQtb3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzNmZmVjCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL210ZC9tdGstc25hbmQvbXRrLXNuYW5kLW9zLmMKQEAgLTAsMCArMSw0OCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWVkaWFUZWsgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIEF1dGhvcjogV2VpamllIEdhbyA8d2VpamllLmdhb0BtZWRpYXRlay5jb20+CisgKi8KKworI2luY2x1ZGUgIm10ay1zbmFuZC1kZWYuaCIKKworaW50IG10a19zbmFuZF9sb2coc3RydWN0IG10a19zbmFuZF9wbGF0X2RldiAqcGRldiwKKwkJICBlbnVtIG10a19zbmFuZF9sb2dfY2F0ZWdvcnkgY2F0LCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwljb25zdCBjaGFyICpjYXRuYW1lID0gIiI7CisJdmFfbGlzdCBhcDsKKwljaGFyICptc2c7CisKKwlzd2l0Y2ggKGNhdCkgeworCWNhc2UgU05BTkRfTE9HX05GSToKKwkJY2F0bmFtZSA9ICJORkkiOworCQlicmVhazsKKwljYXNlIFNOQU5EX0xPR19TTkZJOgorCQljYXRuYW1lID0gIlNORkkiOworCQlicmVhazsKKwljYXNlIFNOQU5EX0xPR19FQ0M6CisJCWNhdG5hbWUgPSAiRUNDIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJbXNnID0ga3Zhc3ByaW50ZihHRlBfS0VSTkVMLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCisJaWYgKCFtc2cpIHsKKwkJZGV2X3dhcm4ocGRldi0+ZGV2LCAidW5hYmxlIHRvIHByaW50IGxvZ1xuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoKmNhdG5hbWUpCisJCWRldl93YXJuKHBkZXYtPmRldiwgIiVzOiAlcyIsIGNhdG5hbWUsIG1zZyk7CisJZWxzZQorCQlkZXZfd2FybihwZGV2LT5kZXYsICIlcyIsIG1zZyk7CisKKwlrZnJlZShtc2cpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbXRkL210ay1zbmFuZC9tdGstc25hbmQtb3MuaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9tdGQvbXRrLXNuYW5kL210ay1zbmFuZC1vcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyM2Y3M2YKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbXRkL210ay1zbmFuZC9tdGstc25hbmQtb3MuaApAQCAtMCwwICsxLDEzMyBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWVkaWFUZWsgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIEF1dGhvcjogV2VpamllIEdhbyA8d2VpamllLmdhb0BtZWRpYXRlay5jb20+CisgKi8KKworI2lmbmRlZiBfTVRLX1NOQU5EX09TX0hfCisjZGVmaW5lIF9NVEtfU05BTkRfT1NfSF8KKworI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NpemVzLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKworc3RydWN0IG10a19zbmFuZF9wbGF0X2RldiB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBjb21wbGV0aW9uIGRvbmU7Cit9OworCisvKiBQb2xsaW5nIGhlbHBlcnMgKi8KKyNkZWZpbmUgcmVhZDE2X3BvbGxfdGltZW91dChhZGRyLCB2YWwsIGNvbmQsIHNsZWVwX3VzLCB0aW1lb3V0X3VzKSBcCisJcmVhZHdfcG9sbF90aW1lb3V0KChhZGRyKSwgKHZhbCksIChjb25kKSwgKHNsZWVwX3VzKSwgKHRpbWVvdXRfdXMpKQorCisjZGVmaW5lIHJlYWQzMl9wb2xsX3RpbWVvdXQoYWRkciwgdmFsLCBjb25kLCBzbGVlcF91cywgdGltZW91dF91cykgXAorCXJlYWRsX3BvbGxfdGltZW91dCgoYWRkciksICh2YWwpLCAoY29uZCksIChzbGVlcF91cyksICh0aW1lb3V0X3VzKSkKKworLyogVGltZXIgaGVscGVycyAqLworI2RlZmluZSBtdGtfc25hbmRfdGltZV90IGt0aW1lX3QKKworc3RhdGljIGlubGluZSBtdGtfc25hbmRfdGltZV90IHRpbWVyX2dldF90aWNrcyh2b2lkKQoreworCXJldHVybiBrdGltZV9nZXQoKTsKK30KKworc3RhdGljIGlubGluZSBtdGtfc25hbmRfdGltZV90IHRpbWVyX3RpbWVfdG9fdGljayh1aW50MzJfdCB0aW1lb3V0X3VzKQoreworCXJldHVybiBrdGltZV9hZGRfdXMoa3RpbWVfc2V0KDAsIDApLCB0aW1lb3V0X3VzKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHRpbWVyX2lzX3RpbWVvdXQobXRrX3NuYW5kX3RpbWVfdCBzdGFydF90aWNrLAorCQkJCSAgICBtdGtfc25hbmRfdGltZV90IHRpbWVvdXRfdGljaykKK3sKKwlrdGltZV90IHRtbyA9IGt0aW1lX2FkZChzdGFydF90aWNrLCB0aW1lb3V0X3RpY2spOworCisJcmV0dXJuIGt0aW1lX2NvbXBhcmUoa3RpbWVfZ2V0KCksIHRtbykgPiAwOworfQorCisvKiBNZW1vcnkgaGVscGVycyAqLworc3RhdGljIGlubGluZSB2b2lkICpnZW5lcmljX21lbV9hbGxvYyhzdHJ1Y3QgbXRrX3NuYW5kX3BsYXRfZGV2ICpwZGV2LAorCQkJCSAgICAgIHNpemVfdCBzaXplKQoreworCXJldHVybiBkZXZtX2t6YWxsb2MocGRldi0+ZGV2LCBzaXplLCBHRlBfS0VSTkVMKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBnZW5lcmljX21lbV9mcmVlKHN0cnVjdCBtdGtfc25hbmRfcGxhdF9kZXYgKnBkZXYsIHZvaWQgKnB0cikKK3sKKwlkZXZtX2tmcmVlKHBkZXYtPmRldiwgcHRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpkbWFfbWVtX2FsbG9jKHN0cnVjdCBtdGtfc25hbmRfcGxhdF9kZXYgKnBkZXYsIHNpemVfdCBzaXplKQoreworCXJldHVybiBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworfQorc3RhdGljIGlubGluZSB2b2lkIGRtYV9tZW1fZnJlZShzdHJ1Y3QgbXRrX3NuYW5kX3BsYXRfZGV2ICpwZGV2LCB2b2lkICpwdHIpCit7CisJa2ZyZWUocHRyKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZG1hX21lbV9tYXAoc3RydWN0IG10a19zbmFuZF9wbGF0X2RldiAqcGRldiwgdm9pZCAqdmFkZHIsCisJCQkgICAgICB1aW50cHRyX3QgKmRtYV9hZGRyLCBzaXplX3Qgc2l6ZSwgYm9vbCB0b19kZXZpY2UpCit7CisJZG1hX2FkZHJfdCBhZGRyOworCWludCByZXQ7CisKKwlhZGRyID0gZG1hX21hcF9zaW5nbGUocGRldi0+ZGV2LCB2YWRkciwgc2l6ZSwKKwkJCSAgICAgIHRvX2RldmljZSA/IERNQV9UT19ERVZJQ0UgOiBETUFfRlJPTV9ERVZJQ0UpOworCXJldCA9IGRtYV9tYXBwaW5nX2Vycm9yKHBkZXYtPmRldiwgYWRkcik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCSpkbWFfYWRkciA9ICh1aW50cHRyX3QpYWRkcjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX21lbV91bm1hcChzdHJ1Y3QgbXRrX3NuYW5kX3BsYXRfZGV2ICpwZGV2LAorCQkJCSB1aW50cHRyX3QgZG1hX2FkZHIsIHNpemVfdCBzaXplLAorCQkJCSBib29sIHRvX2RldmljZSkKK3sKKwlkbWFfdW5tYXBfc2luZ2xlKHBkZXYtPmRldiwgZG1hX2FkZHIsIHNpemUsCisJCQkgdG9fZGV2aWNlID8gRE1BX1RPX0RFVklDRSA6IERNQV9GUk9NX0RFVklDRSk7Cit9CisKKy8qIEludGVycnVwdCBoZWxwZXJzICovCitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX2NvbXBsZXRpb25fZG9uZShzdHJ1Y3QgbXRrX3NuYW5kX3BsYXRfZGV2ICpwZGV2KQoreworCWNvbXBsZXRlKCZwZGV2LT5kb25lKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlycV9jb21wbGV0aW9uX2luaXQoc3RydWN0IG10a19zbmFuZF9wbGF0X2RldiAqcGRldikKK3sKKwlpbml0X2NvbXBsZXRpb24oJnBkZXYtPmRvbmUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpcnFfY29tcGxldGlvbl93YWl0KHN0cnVjdCBtdGtfc25hbmRfcGxhdF9kZXYgKnBkZXYsCisJCQkJICAgICAgIHZvaWQgX19pb21lbSAqcmVnLCB1aW50MzJfdCBiaXQsCisJCQkJICAgICAgIHVpbnQzMl90IHRpbWVvdXRfdXMpCit7CisjaWYgMAorCXVpbnQzMl90IHZhbDsKKworCXJldHVybiByZWFkMzJfcG9sbF90aW1lb3V0KHJlZywgdmFsLCB2YWwgJiBiaXQsIDAsIHRpbWVvdXRfdXMpOworI2Vsc2UKKwlpbnQgcmV0OworCisJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZwZGV2LT5kb25lLAorCQkJCQkgIHVzZWNzX3RvX2ppZmZpZXModGltZW91dF91cykpOworCWlmICghcmV0KQorCQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCXJldHVybiAwOworI2VuZGlmCit9CisKKyNlbmRpZiAvKiBfTVRLX1NOQU5EX09TX0hfICovCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbXRkL210ay1zbmFuZC9tdGstc25hbmQuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9tdGQvbXRrLXNuYW5kL210ay1zbmFuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NGJjZmMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbXRkL210ay1zbmFuZC9tdGstc25hbmQuYwpAQCAtMCwwICsxLDE5MTMgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0zLUNsYXVzZQorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBNZWRpYVRlayBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQXV0aG9yOiBXZWlqaWUgR2FvIDx3ZWlqaWUuZ2FvQG1lZGlhdGVrLmNvbT4KKyAqLworCisjaW5jbHVkZSAibXRrLXNuYW5kLWRlZi5oIgorCisvKiBORkkgcmVnaXN0ZXJzICovCisjZGVmaW5lIE5GSV9DTkZHCQkJMHgwMDAKKyNkZWZpbmUgQ05GR19PUF9NT0RFX1MJCQkxMgorI2RlZmluZSAgIENORkdfT1BfTU9ERV9DVVNUCQk2CisjZGVmaW5lICAgQ05GR19PUF9NT0RFX1BST0dSQU0JCTMKKyNkZWZpbmUgQ05GR19BVVRPX0ZNVF9FTgkJQklUKDkpCisjZGVmaW5lIENORkdfSFdfRUNDX0VOCQkJQklUKDgpCisjZGVmaW5lIENORkdfRE1BX0JVUlNUX0VOCQlCSVQoMikKKyNkZWZpbmUgQ05GR19SRUFEX01PREUJCQlCSVQoMSkKKyNkZWZpbmUgQ05GR19ETUFfTU9ERQkJCUJJVCgwKQorCisjZGVmaW5lIE5GSV9QQUdFRk1UCQkJMHgwMDA0CisjZGVmaW5lIE5GSV9TUEFSRV9TSVpFX0xTX1MJCTE2CisjZGVmaW5lIE5GSV9GRE1fRUNDX05VTV9TCQkxMgorI2RlZmluZSBORklfRkRNX05VTV9TCQkJOAorI2RlZmluZSBORklfU1BBUkVfU0laRV9TCQk0CisjZGVmaW5lIE5GSV9TRUNfU0VMXzUxMgkJCUJJVCgyKQorI2RlZmluZSBORklfUEFHRV9TSVpFX1MJCQkwCisjZGVmaW5lICAgTkZJX1BBR0VfU0laRV81MTJfMksJCTAKKyNkZWZpbmUgICBORklfUEFHRV9TSVpFXzJLXzRLCQkxCisjZGVmaW5lICAgTkZJX1BBR0VfU0laRV80S184SwkJMgorI2RlZmluZSAgIE5GSV9QQUdFX1NJWkVfOEtfMTZLCQkzCisKKyNkZWZpbmUgTkZJX0NPTgkJCQkweDAwOAorI2RlZmluZSBDT05fU0VDX05VTV9TCQkJMTIKKyNkZWZpbmUgQ09OX0JXUgkJCQlCSVQoOSkKKyNkZWZpbmUgQ09OX0JSRAkJCQlCSVQoOCkKKyNkZWZpbmUgQ09OX05GSV9SU1QJCQlCSVQoMSkKKyNkZWZpbmUgQ09OX0ZJRk9fRkxVU0gJCQlCSVQoMCkKKworI2RlZmluZSBORklfSU5UUl9FTgkJCTB4MDEwCisjZGVmaW5lIE5GSV9JTlRSX1NUQQkJCTB4MDE0CisjZGVmaW5lIE5GSV9JUlFfSU5UUl9FTgkJCUJJVCgzMSkKKyNkZWZpbmUgTkZJX0lSUV9DVVNfUkVBRAkJQklUKDgpCisjZGVmaW5lIE5GSV9JUlFfQ1VTX1BHCQkJQklUKDcpCisKKyNkZWZpbmUgTkZJX0NNRAkJCQkweDAyMAorCisjZGVmaW5lIE5GSV9TVFJEQVRBCQkJMHgwNDAKKyNkZWZpbmUgU1RSX0RBVEEJCQlCSVQoMCkKKworI2RlZmluZSBORklfU1RBCQkJCTB4MDYwCisjZGVmaW5lIE5GSV9OQU5EX0ZTTQkJCUdFTk1BU0soMjgsIDI0KQorI2RlZmluZSBORklfRlNNCQkJCUdFTk1BU0soMTksIDE2KQorI2RlZmluZSBSRUFEX0VNUFRZCQkJQklUKDEyKQorCisjZGVmaW5lIE5GSV9GSUZPU1RBCQkJMHgwNjQKKyNkZWZpbmUgRklGT19XUl9SRU1BSU5fUwkJOAorI2RlZmluZSBGSUZPX1JEX1JFTUFJTl9TCQkwCisKKyNkZWZpbmUgTkZJX0FERFJDTlRSCQkJMHgwNzAKKyNkZWZpbmUgU0VDX0NOVFIJCQlHRU5NQVNLKDE2LCAxMikKKyNkZWZpbmUgU0VDX0NOVFJfUwkJCTEyCisjZGVmaW5lIE5GSV9TRUNfQ05UUih2YWwpICAgICAgICAgICAgICAgKCgodmFsKSAmIFNFQ19DTlRSKSA+PiBTRUNfQ05UUl9TKQorCisjZGVmaW5lIE5GSV9TVFJBRERSCQkJMHgwODAKKworI2RlZmluZSBORklfQllURUxFTgkJCTB4MDg0CisjZGVmaW5lIEJVU19TRUNfQ05UUih2YWwpCQkoKCh2YWwpICYgU0VDX0NOVFIpID4+IFNFQ19DTlRSX1MpCisKKyNkZWZpbmUgTkZJX0ZETTBMCQkJMHgwYTAKKyNkZWZpbmUgTkZJX0ZETTBNCQkJMHgwYTQKKyNkZWZpbmUgTkZJX0ZETUwobikJCQkoTkZJX0ZETTBMICsgKG4pICogOCkKKyNkZWZpbmUgTkZJX0ZETU0obikJCQkoTkZJX0ZETTBNICsgKG4pICogOCkKKworI2RlZmluZSBORklfREVCVUdfQ09OMQkJCTB4MjIwCisjZGVmaW5lIFdCVUZfRU4JCQkJQklUKDIpCisKKyNkZWZpbmUgTkZJX01BU1RFUlNUQQkJCTB4MjI0CisjZGVmaW5lIE1BU19BRERSCQkJR0VOTUFTSygxMSwgOSkKKyNkZWZpbmUgTUFTX1JECQkJCUdFTk1BU0soOCwgNikKKyNkZWZpbmUgTUFTX1dSCQkJCUdFTk1BU0soNSwgMykKKyNkZWZpbmUgTUFTX1JERExZCQkJR0VOTUFTSygyLCAwKQorI2RlZmluZSBORklfTUFTVEVSU1RBX01BU0tfNzYyMgkJKE1BU19BRERSIHwgTUFTX1JEIHwgTUFTX1dSIHwgTUFTX1JERExZKQorI2RlZmluZSBBSEJfQlVTX0JVU1kJCQlCSVQoMSkKKyNkZWZpbmUgQlVTX0JVU1kJCQlCSVQoMCkKKyNkZWZpbmUgTkZJX01BU1RFUlNUQV9NQVNLXzc5ODYJCShBSEJfQlVTX0JVU1kgfCBCVVNfQlVTWSkKKworLyogU05GSSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgU05GX01BQ19DVEwJCQkweDUwMAorI2RlZmluZSBNQUNfWElPX1NFTAkJCUJJVCg0KQorI2RlZmluZSBTRl9NQUNfRU4JCQlCSVQoMykKKyNkZWZpbmUgU0ZfVFJJRwkJCQlCSVQoMikKKyNkZWZpbmUgV0lQX1JFQURZCQkJQklUKDEpCisjZGVmaW5lIFdJUAkJCQlCSVQoMCkKKworI2RlZmluZSBTTkZfTUFDX09VVEwJCQkweDUwNAorI2RlZmluZSBTTkZfTUFDX0lOTAkJCTB4NTA4CisKKyNkZWZpbmUgU05GX1JEX0NUTDIJCQkweDUxMAorI2RlZmluZSBEQVRBX1JFQURfRFVNTVlfUwkJOAorI2RlZmluZSBEQVRBX1JFQURfQ01EX1MJCQkwCisKKyNkZWZpbmUgU05GX1JEX0NUTDMJCQkweDUxNAorCisjZGVmaW5lIFNORl9QR19DVEwxCQkJMHg1MjQKKyNkZWZpbmUgUEdfTE9BRF9DTURfUwkJCTgKKworI2RlZmluZSBTTkZfUEdfQ1RMMgkJCTB4NTI4CisKKyNkZWZpbmUgU05GX01JU0NfQ1RMCQkJMHg1MzgKKyNkZWZpbmUgU1dfUlNUCQkJCUJJVCgyOCkKKyNkZWZpbmUgRklGT19SRF9MVENfUwkJCTI1CisjZGVmaW5lIFBHX0xPQURfWDRfRU4JCQlCSVQoMjApCisjZGVmaW5lIERBVEFfUkVBRF9NT0RFX1MJCTE2CisjZGVmaW5lIERBVEFfUkVBRF9NT0RFCQkJR0VOTUFTSygxOCwgMTYpCisjZGVmaW5lICAgREFUQV9SRUFEX01PREVfWDEJCTAKKyNkZWZpbmUgICBEQVRBX1JFQURfTU9ERV9YMgkJMQorI2RlZmluZSAgIERBVEFfUkVBRF9NT0RFX1g0CQkyCisjZGVmaW5lICAgREFUQV9SRUFEX01PREVfRFVBTAkJNQorI2RlZmluZSAgIERBVEFfUkVBRF9NT0RFX1FVQUQJCTYKKyNkZWZpbmUgTEFUQ0hfTEFUX1MJCQk4CisjZGVmaW5lIExBVENIX0xBVAkJCUdFTk1BU0soOSwgOCkKKyNkZWZpbmUgUEdfTE9BRF9DVVNUT01fRU4JCUJJVCg3KQorI2RlZmluZSBEQVRBUkRfQ1VTVE9NX0VOCQlCSVQoNikKKyNkZWZpbmUgQ1NfREVTRUxFQ1RfQ1lDX1MJCTAKKworI2RlZmluZSBTTkZfTUlTQ19DVEwyCQkJMHg1M2MKKyNkZWZpbmUgUFJPR1JBTV9MT0FEX0JZVEVfTlVNX1MJCTE2CisjZGVmaW5lIFJFQURfREFUQV9CWVRFX05VTV9TCQkxMQorCisjZGVmaW5lIFNORl9ETFlfQ1RMMwkJCTB4NTQ4CisjZGVmaW5lIFNGQ0tfU0FNX0RMWV9TCQkJMAorCisjZGVmaW5lIFNORl9TVEFfQ1RMMQkJCTB4NTUwCisjZGVmaW5lIENVU19QR19ET05FCQkJQklUKDI4KQorI2RlZmluZSBDVVNfUkVBRF9ET05FCQkJQklUKDI3KQorI2RlZmluZSBTUElfU1RBVEVfUwkJCTAKKyNkZWZpbmUgU1BJX1NUQVRFCQkJR0VOTUFTSygzLCAwKQorCisjZGVmaW5lIFNORl9DRkcJCQkJMHg1NWMKKyNkZWZpbmUgU1BJX01PREUJCQlCSVQoMCkKKworI2RlZmluZSBTTkZfR1BSQU0JCQkweDgwMAorI2RlZmluZSBTTkZfR1BSQU1fU0laRQkJCTB4YTAKKworI2RlZmluZSBTTkZJX1BPTExfSU5URVJWQUwJCTEwMDAwMDAKKworc3RhdGljIGNvbnN0IHVpbnQ4X3QgbXQ3NjIyX3NwYXJlX3NpemVzW10gPSB7IDE2LCAyNiwgMjcsIDI4IH07CisKK3N0YXRpYyBjb25zdCB1aW50OF90IG10Nzk4Nl9zcGFyZV9zaXplc1tdID0geworCTE2LCAyNiwgMjcsIDI4LCAzMiwgMzYsIDQwLCA0NCwgNDgsIDQ5LCA1MCwgNTEsIDUyLCA2MiwgNjEsIDYzLCA2NCwKKwk2NywgNzQKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX3NuYW5kX3NvY19kYXRhIG10a19zbmFuZF9zb2NzW19fU05BTkRfU09DX01BWF0gPSB7CisJW1NOQU5EX1NPQ19NVDc2MjJdID0geworCQkuc2VjdG9yX3NpemUgPSA1MTIsCisJCS5tYXhfc2VjdG9ycyA9IDgsCisJCS5mZG1fc2l6ZSA9IDgsCisJCS5mZG1fZWNjX3NpemUgPSAxLAorCQkuZmlmb19zaXplID0gMzIsCisJCS5iYm1fc3dhcCA9IGZhbHNlLAorCQkuZW1wdHlfcGFnZV9jaGVjayA9IGZhbHNlLAorCQkubWFzdGVyc3RhX21hc2sgPSBORklfTUFTVEVSU1RBX01BU0tfNzYyMiwKKwkJLnNwYXJlX3NpemVzID0gbXQ3NjIyX3NwYXJlX3NpemVzLAorCQkubnVtX3NwYXJlX3NpemUgPSBBUlJBWV9TSVpFKG10NzYyMl9zcGFyZV9zaXplcyksCisJCS5sYXRjaF9sYXQgPSAwLAorCQkuc2FtcGxlX2RlbGF5ID0gNDAKKwl9LAorCVtTTkFORF9TT0NfTVQ3NjI5XSA9IHsKKwkJLnNlY3Rvcl9zaXplID0gNTEyLAorCQkubWF4X3NlY3RvcnMgPSA4LAorCQkuZmRtX3NpemUgPSA4LAorCQkuZmRtX2VjY19zaXplID0gMSwKKwkJLmZpZm9fc2l6ZSA9IDMyLAorCQkuYmJtX3N3YXAgPSB0cnVlLAorCQkuZW1wdHlfcGFnZV9jaGVjayA9IGZhbHNlLAorCQkubWFzdGVyc3RhX21hc2sgPSBORklfTUFTVEVSU1RBX01BU0tfNzYyMiwKKwkJLnNwYXJlX3NpemVzID0gbXQ3NjIyX3NwYXJlX3NpemVzLAorCQkubnVtX3NwYXJlX3NpemUgPSBBUlJBWV9TSVpFKG10NzYyMl9zcGFyZV9zaXplcyksCisJCS5sYXRjaF9sYXQgPSAwLAorCQkuc2FtcGxlX2RlbGF5ID0gNDAKKwl9LAorCVtTTkFORF9TT0NfTVQ3OTg2XSA9IHsKKwkJLnNlY3Rvcl9zaXplID0gMTAyNCwKKwkJLm1heF9zZWN0b3JzID0gMTYsCisJCS5mZG1fc2l6ZSA9IDgsCisJCS5mZG1fZWNjX3NpemUgPSAxLAorCQkuZmlmb19zaXplID0gNjQsCisJCS5iYm1fc3dhcCA9IHRydWUsCisJCS5lbXB0eV9wYWdlX2NoZWNrID0gdHJ1ZSwKKwkJLm1hc3RlcnN0YV9tYXNrID0gTkZJX01BU1RFUlNUQV9NQVNLXzc5ODYsCisJCS5zcGFyZV9zaXplcyA9IG10Nzk4Nl9zcGFyZV9zaXplcywKKwkJLm51bV9zcGFyZV9zaXplID0gQVJSQVlfU0laRShtdDc5ODZfc3BhcmVfc2l6ZXMpLAorCQkubGF0Y2hfbGF0ID0gMCwKKwkJLnNhbXBsZV9kZWxheSA9IDQwCisJfSwKK307CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgbmZpX3JlYWQzMihzdHJ1Y3QgbXRrX3NuYW5kICpzbmYsIHVpbnQzMl90IHJlZykKK3sKKwlyZXR1cm4gcmVhZGwoc25mLT5uZmlfYmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZmlfd3JpdGUzMihzdHJ1Y3QgbXRrX3NuYW5kICpzbmYsIHVpbnQzMl90IHJlZywKKwkJCSAgICAgICB1aW50MzJfdCB2YWwpCit7CisJd3JpdGVsKHZhbCwgc25mLT5uZmlfYmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZmlfd3JpdGUxNihzdHJ1Y3QgbXRrX3NuYW5kICpzbmYsIHVpbnQzMl90IHJlZywKKwkJCSAgICAgICB1aW50MTZfdCB2YWwpCit7CisJd3JpdGV3KHZhbCwgc25mLT5uZmlfYmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZmlfcm13MzIoc3RydWN0IG10a19zbmFuZCAqc25mLCB1aW50MzJfdCByZWcsIHVpbnQzMl90IGNsciwKKwkJCSAgICAgdWludDMyX3Qgc2V0KQoreworCXVpbnQzMl90IHZhbDsKKworCXZhbCA9IHJlYWRsKHNuZi0+bmZpX2Jhc2UgKyByZWcpOworCXZhbCAmPSB+Y2xyOworCXZhbCB8PSBzZXQ7CisJd3JpdGVsKHZhbCwgc25mLT5uZmlfYmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIG5maV93cml0ZV9kYXRhKHN0cnVjdCBtdGtfc25hbmQgKnNuZiwgdWludDMyX3QgcmVnLAorCQkJICAgY29uc3QgdWludDhfdCAqZGF0YSwgdWludDMyX3QgbGVuKQoreworCXVpbnQzMl90IGksIHZhbCA9IDAsIGVzID0gc2l6ZW9mKHVpbnQzMl90KTsKKworCWZvciAoaSA9IHJlZzsgaSA8IHJlZyArIGxlbjsgaSsrKSB7CisJCXZhbCB8PSAoKHVpbnQzMl90KSpkYXRhKyspIDw8ICg4ICogKGkgJSBlcykpOworCisJCWlmIChpICUgZXMgPT0gZXMgLSAxIHx8IGkgPT0gcmVnICsgbGVuIC0gMSkgeworCQkJbmZpX3dyaXRlMzIoc25mLCBpICYgfihlcyAtIDEpLCB2YWwpOworCQkJdmFsID0gMDsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgbmZpX3JlYWRfZGF0YShzdHJ1Y3QgbXRrX3NuYW5kICpzbmYsIHVpbnQzMl90IHJlZywgdWludDhfdCAqZGF0YSwKKwkJCSAgdWludDMyX3QgbGVuKQoreworCXVpbnQzMl90IGksIHZhbCA9IDAsIGVzID0gc2l6ZW9mKHVpbnQzMl90KTsKKworCWZvciAoaSA9IHJlZzsgaSA8IHJlZyArIGxlbjsgaSsrKSB7CisJCWlmIChpID09IHJlZyB8fCBpICUgZXMgPT0gMCkKKwkJCXZhbCA9IG5maV9yZWFkMzIoc25mLCBpICYgfihlcyAtIDEpKTsKKworCQkqZGF0YSsrID0gKHVpbnQ4X3QpKHZhbCA+PiAoOCAqIChpICUgZXMpKSk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG9fYm1fc3dhcCh1aW50OF90ICpibTEsIHVpbnQ4X3QgKmJtMikKK3sKKwl1aW50OF90IHRtcCA9ICpibTE7CisJKmJtMSA9ICpibTI7CisJKmJtMiA9IHRtcDsKK30KKworc3RhdGljIHZvaWQgbXRrX3NuYW5kX2JtX3N3YXBfcmF3KHN0cnVjdCBtdGtfc25hbmQgKnNuZikKK3sKKwl1aW50MzJfdCBmZG1fYmJtX3BvczsKKworCWlmICghc25mLT5uZmlfc29jLT5iYm1fc3dhcCB8fCBzbmYtPmVjY19zdGVwcyA9PSAxKQorCQlyZXR1cm47CisKKwlmZG1fYmJtX3BvcyA9IChzbmYtPmVjY19zdGVwcyAtIDEpICogc25mLT5yYXdfc2VjdG9yX3NpemUgKworCQkgICAgICBzbmYtPm5maV9zb2MtPnNlY3Rvcl9zaXplOworCWRvX2JtX3N3YXAoJnNuZi0+cGFnZV9jYWNoZVtmZG1fYmJtX3Bvc10sCisJCSAgICZzbmYtPnBhZ2VfY2FjaGVbc25mLT53cml0ZXNpemVdKTsKK30KKworc3RhdGljIHZvaWQgbXRrX3NuYW5kX2JtX3N3YXAoc3RydWN0IG10a19zbmFuZCAqc25mKQoreworCXVpbnQzMl90IGJ1Zl9iYm1fcG9zLCBmZG1fYmJtX3BvczsKKworCWlmICghc25mLT5uZmlfc29jLT5iYm1fc3dhcCB8fCBzbmYtPmVjY19zdGVwcyA9PSAxKQorCQlyZXR1cm47CisKKwlidWZfYmJtX3BvcyA9IHNuZi0+d3JpdGVzaXplIC0KKwkJICAgICAgKHNuZi0+ZWNjX3N0ZXBzIC0gMSkgKiBzbmYtPnNwYXJlX3Blcl9zZWN0b3I7CisJZmRtX2JibV9wb3MgPSBzbmYtPndyaXRlc2l6ZSArCisJCSAgICAgIChzbmYtPmVjY19zdGVwcyAtIDEpICogc25mLT5uZmlfc29jLT5mZG1fc2l6ZTsKKwlkb19ibV9zd2FwKCZzbmYtPnBhZ2VfY2FjaGVbZmRtX2JibV9wb3NdLAorCQkgICAmc25mLT5wYWdlX2NhY2hlW2J1Zl9iYm1fcG9zXSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19zbmFuZF9mZG1fYm1fc3dhcF9yYXcoc3RydWN0IG10a19zbmFuZCAqc25mKQoreworCXVpbnQzMl90IGZkbV9iYm1fcG9zMSwgZmRtX2JibV9wb3MyOworCisJaWYgKCFzbmYtPm5maV9zb2MtPmJibV9zd2FwIHx8IHNuZi0+ZWNjX3N0ZXBzID09IDEpCisJCXJldHVybjsKKworCWZkbV9iYm1fcG9zMSA9IHNuZi0+bmZpX3NvYy0+c2VjdG9yX3NpemU7CisJZmRtX2JibV9wb3MyID0gKHNuZi0+ZWNjX3N0ZXBzIC0gMSkgKiBzbmYtPnJhd19zZWN0b3Jfc2l6ZSArCisJCSAgICAgICBzbmYtPm5maV9zb2MtPnNlY3Rvcl9zaXplOworCWRvX2JtX3N3YXAoJnNuZi0+cGFnZV9jYWNoZVtmZG1fYmJtX3BvczFdLAorCQkgICAmc25mLT5wYWdlX2NhY2hlW2ZkbV9iYm1fcG9zMl0pOworfQorCitzdGF0aWMgdm9pZCBtdGtfc25hbmRfZmRtX2JtX3N3YXAoc3RydWN0IG10a19zbmFuZCAqc25mKQoreworCXVpbnQzMl90IGZkbV9iYm1fcG9zMSwgZmRtX2JibV9wb3MyOworCisJaWYgKCFzbmYtPm5maV9zb2MtPmJibV9zd2FwIHx8IHNuZi0+ZWNjX3N0ZXBzID09IDEpCisJCXJldHVybjsKKworCWZkbV9iYm1fcG9zMSA9IHNuZi0+d3JpdGVzaXplOworCWZkbV9iYm1fcG9zMiA9IHNuZi0+d3JpdGVzaXplICsKKwkJICAgICAgIChzbmYtPmVjY19zdGVwcyAtIDEpICogc25mLT5uZmlfc29jLT5mZG1fc2l6ZTsKKwlkb19ibV9zd2FwKCZzbmYtPnBhZ2VfY2FjaGVbZmRtX2JibV9wb3MxXSwKKwkJICAgJnNuZi0+cGFnZV9jYWNoZVtmZG1fYmJtX3BvczJdKTsKK30KKworc3RhdGljIGludCBtdGtfbmZpX3Jlc2V0KHN0cnVjdCBtdGtfc25hbmQgKnNuZikKK3sKKwl1aW50MzJfdCB2YWwsIGZpZm9fbWFzazsKKwlpbnQgcmV0OworCisJbmZpX3dyaXRlMzIoc25mLCBORklfQ09OLCBDT05fRklGT19GTFVTSCB8IENPTl9ORklfUlNUKTsKKworCXJldCA9IHJlYWQxNl9wb2xsX3RpbWVvdXQoc25mLT5uZmlfYmFzZSArIE5GSV9NQVNURVJTVEEsIHZhbCwKKwkJCQkgICEodmFsICYgc25mLT5uZmlfc29jLT5tYXN0ZXJzdGFfbWFzayksIDAsCisJCQkJICBTTkZJX1BPTExfSU5URVJWQUwpOworCWlmIChyZXQpIHsKKwkJc25hbmRfbG9nX25maShzbmYtPnBkZXYsCisJCQkgICAgICAiTkZJIG1hc3RlciBpcyBzdGlsbCBidXN5IGFmdGVyIHJlc2V0XG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSByZWFkMzJfcG9sbF90aW1lb3V0KHNuZi0+bmZpX2Jhc2UgKyBORklfU1RBLCB2YWwsCisJCQkJICAhKHZhbCAmIChORklfRlNNIHwgTkZJX05BTkRfRlNNKSksIDAsCisJCQkJICBTTkZJX1BPTExfSU5URVJWQUwpOworCWlmIChyZXQpIHsKKwkJc25hbmRfbG9nX25maShzbmYtPnBkZXYsICJGYWlsZWQgdG8gcmVzZXQgTkZJXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlmaWZvX21hc2sgPSAoKHNuZi0+bmZpX3NvYy0+Zmlmb19zaXplIC0gMSkgPDwgRklGT19SRF9SRU1BSU5fUykgfAorCQkgICAgKChzbmYtPm5maV9zb2MtPmZpZm9fc2l6ZSAtIDEpIDw8IEZJRk9fV1JfUkVNQUlOX1MpOworCXJldCA9IHJlYWQxNl9wb2xsX3RpbWVvdXQoc25mLT5uZmlfYmFzZSArIE5GSV9GSUZPU1RBLCB2YWwsCisJCQkJICAhKHZhbCAmIGZpZm9fbWFzayksIDAsIFNORklfUE9MTF9JTlRFUlZBTCk7CisJaWYgKHJldCkgeworCQlzbmFuZF9sb2dfbmZpKHNuZi0+cGRldiwgIk5GSSBGSUZPcyBhcmUgbm90IGVtcHR5XG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfc25hbmRfbWFjX3Jlc2V0KHN0cnVjdCBtdGtfc25hbmQgKnNuZikKK3sKKwlpbnQgcmV0OworCXVpbnQzMl90IHZhbDsKKworCW5maV9ybXczMihzbmYsIFNORl9NSVNDX0NUTCwgMCwgU1dfUlNUKTsKKworCXJldCA9IHJlYWQzMl9wb2xsX3RpbWVvdXQoc25mLT5uZmlfYmFzZSArIFNORl9TVEFfQ1RMMSwgdmFsLAorCQkJCSAgISh2YWwgJiBTUElfU1RBVEUpLCAwLCBTTkZJX1BPTExfSU5URVJWQUwpOworCWlmIChyZXQpCisJCXNuYW5kX2xvZ19zbmZpKHNuZi0+cGRldiwgIkZhaWxlZCB0byByZXNldCBTTkZJIE1BQ1xuIik7CisKKwluZmlfd3JpdGUzMihzbmYsIFNORl9NSVNDX0NUTCwgKDIgPDwgRklGT19SRF9MVENfUykgfAorCQkgICAgKDEwIDw8IENTX0RFU0VMRUNUX0NZQ19TKSB8IChzbmYtPm5maV9zb2MtPmxhdGNoX2xhdCA8PCBMQVRDSF9MQVRfUykpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdGtfc25hbmRfbWFjX3RyaWdnZXIoc3RydWN0IG10a19zbmFuZCAqc25mLCB1aW50MzJfdCBvdXRsZW4sCisJCQkJIHVpbnQzMl90IGlubGVuKQoreworCWludCByZXQ7CisJdWludDMyX3QgdmFsOworCisJbmZpX3dyaXRlMzIoc25mLCBTTkZfTUFDX0NUTCwgU0ZfTUFDX0VOKTsKKwluZmlfd3JpdGUzMihzbmYsIFNORl9NQUNfT1VUTCwgb3V0bGVuKTsKKwluZmlfd3JpdGUzMihzbmYsIFNORl9NQUNfSU5MLCBpbmxlbik7CisKKwluZmlfd3JpdGUzMihzbmYsIFNORl9NQUNfQ1RMLCBTRl9NQUNfRU4gfCBTRl9UUklHKTsKKworCXJldCA9IHJlYWQzMl9wb2xsX3RpbWVvdXQoc25mLT5uZmlfYmFzZSArIFNORl9NQUNfQ1RMLCB2YWwsCisJCQkJICB2YWwgJiBXSVBfUkVBRFksIDAsIFNORklfUE9MTF9JTlRFUlZBTCk7CisJaWYgKHJldCkgeworCQlzbmFuZF9sb2dfc25maShzbmYtPnBkZXYsICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgV0lQX1JFQURZXG4iKTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCXJldCA9IHJlYWQzMl9wb2xsX3RpbWVvdXQoc25mLT5uZmlfYmFzZSArIFNORl9NQUNfQ1RMLCB2YWwsCisJCQkJICAhKHZhbCAmIFdJUCksIDAsIFNORklfUE9MTF9JTlRFUlZBTCk7CisJaWYgKHJldCkgeworCQlzbmFuZF9sb2dfc25maShzbmYtPnBkZXYsCisJCQkgICAgICAgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBXSVAgY2xlYXJlZFxuIik7CisJfQorCitjbGVhbnVwOgorCW5maV93cml0ZTMyKHNuZiwgU05GX01BQ19DVEwsIDApOworCisJcmV0dXJuIHJldDsKK30KKworaW50IG10a19zbmFuZF9tYWNfaW8oc3RydWN0IG10a19zbmFuZCAqc25mLCBjb25zdCB1aW50OF90ICpvdXQsIHVpbnQzMl90IG91dGxlbiwKKwkJICAgICB1aW50OF90ICppbiwgdWludDMyX3QgaW5sZW4pCit7CisJaW50IHJldDsKKworCWlmIChvdXRsZW4gKyBpbmxlbiA+IFNORl9HUFJBTV9TSVpFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW10a19zbmFuZF9tYWNfcmVzZXQoc25mKTsKKworCW5maV93cml0ZV9kYXRhKHNuZiwgU05GX0dQUkFNLCBvdXQsIG91dGxlbik7CisKKwlyZXQgPSBtdGtfc25hbmRfbWFjX3RyaWdnZXIoc25mLCBvdXRsZW4sIGlubGVuKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKCFpbmxlbikKKwkJcmV0dXJuIDA7CisKKwluZmlfcmVhZF9kYXRhKHNuZiwgU05GX0dQUkFNICsgb3V0bGVuLCBpbiwgaW5sZW4pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX3NuYW5kX2dldF9mZWF0dXJlKHN0cnVjdCBtdGtfc25hbmQgKnNuZiwgdWludDMyX3QgYWRkcikKK3sKKwl1aW50OF90IG9wWzJdLCB2YWw7CisJaW50IHJldDsKKworCW9wWzBdID0gU05BTkRfQ01EX0dFVF9GRUFUVVJFOworCW9wWzFdID0gKHVpbnQ4X3QpYWRkcjsKKworCXJldCA9IG10a19zbmFuZF9tYWNfaW8oc25mLCBvcCwgc2l6ZW9mKG9wKSwgJnZhbCwgMSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiB2YWw7Cit9CisKK2ludCBtdGtfc25hbmRfc2V0X2ZlYXR1cmUoc3RydWN0IG10a19zbmFuZCAqc25mLCB1aW50MzJfdCBhZGRyLCB1aW50MzJfdCB2YWwpCit7CisJdWludDhfdCBvcFszXTsKKworCW9wWzBdID0gU05BTkRfQ01EX1NFVF9GRUFUVVJFOworCW9wWzFdID0gKHVpbnQ4X3QpYWRkcjsKKwlvcFsyXSA9ICh1aW50OF90KXZhbDsKKworCXJldHVybiBtdGtfc25hbmRfbWFjX2lvKHNuZiwgb3AsIHNpemVvZihvcCksIE5VTEwsIDApOworfQorCitzdGF0aWMgaW50IG10a19zbmFuZF9wb2xsX3N0YXR1cyhzdHJ1Y3QgbXRrX3NuYW5kICpzbmYsIHVpbnQzMl90IHdhaXRfdXMpCit7CisJaW50IHZhbDsKKwltdGtfc25hbmRfdGltZV90IHRpbWVfc3RhcnQsIHRtbzsKKworCXRpbWVfc3RhcnQgPSB0aW1lcl9nZXRfdGlja3MoKTsKKwl0bW8gPSB0aW1lcl90aW1lX3RvX3RpY2sod2FpdF91cyk7CisKKwlkbyB7CisJCXZhbCA9IG10a19zbmFuZF9nZXRfZmVhdHVyZShzbmYsIFNOQU5EX0ZFQVRVUkVfU1RBVFVTX0FERFIpOworCQlpZiAoISh2YWwgJiBTTkFORF9TVEFUVVNfT0lQKSkKKwkJCXJldHVybiB2YWwgJiAoU05BTkRfU1RBVFVTX0VSQVNFX0ZBSUwgfAorCQkJCSAgICAgIFNOQU5EX1NUQVRVU19QUk9HUkFNX0ZBSUwpOworCX0gd2hpbGUgKCF0aW1lcl9pc190aW1lb3V0KHRpbWVfc3RhcnQsIHRtbykpOworCisJcmV0dXJuIC1FVElNRURPVVQ7Cit9CisKK2ludCBtdGtfc25hbmRfY2hpcF9yZXNldChzdHJ1Y3QgbXRrX3NuYW5kICpzbmYpCit7CisJdWludDhfdCBvcCA9IFNOQU5EX0NNRF9SRVNFVDsKKwlpbnQgcmV0OworCisJcmV0ID0gbXRrX3NuYW5kX21hY19pbyhzbmYsICZvcCwgMSwgTlVMTCwgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG10a19zbmFuZF9wb2xsX3N0YXR1cyhzbmYsIFNORklfUE9MTF9JTlRFUlZBTCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfc25hbmRfY29uZmlnX2ZlYXR1cmUoc3RydWN0IG10a19zbmFuZCAqc25mLCB1aW50OF90IGNsciwKKwkJCQkgICAgdWludDhfdCBzZXQpCit7CisJaW50IHZhbCwgbmV3dmFsOworCWludCByZXQ7CisKKwl2YWwgPSBtdGtfc25hbmRfZ2V0X2ZlYXR1cmUoc25mLCBTTkFORF9GRUFUVVJFX0NPTkZJR19BRERSKTsKKwlpZiAodmFsIDwgMCkgeworCQlzbmFuZF9sb2dfY2hpcChzbmYtPnBkZXYsCisJCQkgICAgICAgIkZhaWxlZCB0byBnZXQgY29uZmlndXJhdGlvbiBmZWF0dXJlXG4iKTsKKwkJcmV0dXJuIHZhbDsKKwl9CisKKwluZXd2YWwgPSAodmFsICYgKH5jbHIpKSB8IHNldDsKKworCWlmIChuZXd2YWwgPT0gdmFsKQorCQlyZXR1cm4gMDsKKworCXJldCA9IG10a19zbmFuZF9zZXRfZmVhdHVyZShzbmYsIFNOQU5EX0ZFQVRVUkVfQ09ORklHX0FERFIsCisJCQkJICAgICh1aW50OF90KW5ld3ZhbCk7CisJaWYgKHZhbCA8IDApIHsKKwkJc25hbmRfbG9nX2NoaXAoc25mLT5wZGV2LAorCQkJICAgICAgICJGYWlsZWQgdG8gc2V0IGNvbmZpZ3VyYXRpb24gZmVhdHVyZVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJdmFsID0gbXRrX3NuYW5kX2dldF9mZWF0dXJlKHNuZiwgU05BTkRfRkVBVFVSRV9DT05GSUdfQUREUik7CisJaWYgKHZhbCA8IDApIHsKKwkJc25hbmRfbG9nX2NoaXAoc25mLT5wZGV2LAorCQkJICAgICAgICJGYWlsZWQgdG8gZ2V0IGNvbmZpZ3VyYXRpb24gZmVhdHVyZVxuIik7CisJCXJldHVybiB2YWw7CisJfQorCisJaWYgKG5ld3ZhbCAhPSB2YWwpCisJCXJldHVybiAtRU5PVFNVUFA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfc25hbmRfb25kaWVfZWNjX2NvbnRyb2woc3RydWN0IG10a19zbmFuZCAqc25mLCBib29sIGVuYWJsZSkKK3sKKwlpbnQgcmV0OworCisJaWYgKGVuYWJsZSkKKwkJcmV0ID0gbXRrX3NuYW5kX2NvbmZpZ19mZWF0dXJlKHNuZiwgMCwgU05BTkRfRkVBVFVSRV9FQ0NfRU4pOworCWVsc2UKKwkJcmV0ID0gbXRrX3NuYW5kX2NvbmZpZ19mZWF0dXJlKHNuZiwgU05BTkRfRkVBVFVSRV9FQ0NfRU4sIDApOworCisJaWYgKHJldCkgeworCQlzbmFuZF9sb2dfY2hpcChzbmYtPnBkZXYsICJGYWlsZWQgdG8gJXMgT24tRGllIEVDQyBlbmdpbmVcbiIsCisJCQkgICAgICAgZW5hYmxlID8gImVuYWJsZSIgOiAiZGlzYWJsZSIpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXRrX3NuYW5kX3FzcGlfY29udHJvbChzdHJ1Y3QgbXRrX3NuYW5kICpzbmYsIGJvb2wgZW5hYmxlKQoreworCWludCByZXQ7CisKKwlpZiAoZW5hYmxlKSB7CisJCXJldCA9IG10a19zbmFuZF9jb25maWdfZmVhdHVyZShzbmYsIDAsCisJCQkJCSAgICAgICBTTkFORF9GRUFUVVJFX1FVQURfRU5BQkxFKTsKKwl9IGVsc2UgeworCQlyZXQgPSBtdGtfc25hbmRfY29uZmlnX2ZlYXR1cmUoc25mLAorCQkJCQkgICAgICAgU05BTkRfRkVBVFVSRV9RVUFEX0VOQUJMRSwgMCk7CisJfQorCisJaWYgKHJldCkgeworCQlzbmFuZF9sb2dfY2hpcChzbmYtPnBkZXYsICJGYWlsZWQgdG8gJXMgcXVhZCBzcGlcbiIsCisJCQkgICAgICAgZW5hYmxlID8gImVuYWJsZSIgOiAiZGlzYWJsZSIpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXRrX3NuYW5kX3VubG9jayhzdHJ1Y3QgbXRrX3NuYW5kICpzbmYpCit7CisJaW50IHJldDsKKworCXJldCA9IG10a19zbmFuZF9zZXRfZmVhdHVyZShzbmYsIFNOQU5EX0ZFQVRVUkVfUFJPVEVDVF9BRERSLCAwKTsKKwlpZiAocmV0KSB7CisJCXNuYW5kX2xvZ19jaGlwKHNuZi0+cGRldiwgIkZhaWxlZCB0byBzZXQgcHJvdGVjdGlvbiBmZWF0dXJlXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfc25hbmRfd3JpdGVfZW5hYmxlKHN0cnVjdCBtdGtfc25hbmQgKnNuZikKK3sKKwl1aW50OF90IG9wID0gU05BTkRfQ01EX1dSSVRFX0VOQUJMRTsKKwlpbnQgcmV0LCB2YWw7CisKKwlyZXQgPSBtdGtfc25hbmRfbWFjX2lvKHNuZiwgJm9wLCAxLCBOVUxMLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJdmFsID0gbXRrX3NuYW5kX2dldF9mZWF0dXJlKHNuZiwgU05BTkRfRkVBVFVSRV9TVEFUVVNfQUREUik7CisJaWYgKHZhbCA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAodmFsICYgU05BTkRfU1RBVFVTX1dFTCkKKwkJcmV0dXJuIDA7CisKKwlzbmFuZF9sb2dfY2hpcChzbmYtPnBkZXYsICJGYWlsZWQgdG8gc2VuZCB3cml0ZS1lbmFibGUgY29tbWFuZFxuIik7CisKKwlyZXR1cm4gLUVOT1RTVVBQOworfQorCitzdGF0aWMgaW50IG10a19zbmFuZF9zZWxlY3RfZGllKHN0cnVjdCBtdGtfc25hbmQgKnNuZiwgdWludDMyX3QgZGllaWR4KQoreworCWlmICghc25mLT5zZWxlY3RfZGllKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBzbmYtPnNlbGVjdF9kaWUoc25mLCBkaWVpZHgpOworfQorCitzdGF0aWMgdWludDY0X3QgbXRrX3NuYW5kX3NlbGVjdF9kaWVfYWRkcmVzcyhzdHJ1Y3QgbXRrX3NuYW5kICpzbmYsCisJCQkJCSAgICAgdWludDY0X3QgYWRkcikKK3sKKwl1aW50MzJfdCBkaWVpZHg7CisKKwlpZiAoIXNuZi0+c2VsZWN0X2RpZSkKKwkJcmV0dXJuIGFkZHI7CisKKwlkaWVpZHggPSBhZGRyID4+IHNuZi0+ZGllX3NoaWZ0OworCisJbXRrX3NuYW5kX3NlbGVjdF9kaWUoc25mLCBkaWVpZHgpOworCisJcmV0dXJuIGFkZHIgJiBzbmYtPmRpZV9tYXNrOworfQorCitzdGF0aWMgdWludDMyX3QgbXRrX3NuYW5kX2dldF9wbGFuZV9hZGRyZXNzKHN0cnVjdCBtdGtfc25hbmQgKnNuZiwKKwkJCQkJICAgIHVpbnQzMl90IHBhZ2UpCit7CisJdWludDMyX3QgcGFnZXNfcGVyX2Jsb2NrOworCisJcGFnZXNfcGVyX2Jsb2NrID0gMSA8PCAoc25mLT5lcmFzZXNpemVfc2hpZnQgLSBzbmYtPndyaXRlc2l6ZV9zaGlmdCk7CisKKwlpZiAocGFnZSAmIHBhZ2VzX3Blcl9ibG9jaykKKwkJcmV0dXJuIDEgPDwgKHNuZi0+d3JpdGVzaXplX3NoaWZ0ICsgMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfc25hbmRfcGFnZV9vcChzdHJ1Y3QgbXRrX3NuYW5kICpzbmYsIHVpbnQzMl90IHBhZ2UsIHVpbnQ4X3QgY21kKQoreworCXVpbnQ4X3Qgb3BbNF07CisKKwlvcFswXSA9IGNtZDsKKwlvcFsxXSA9IChwYWdlID4+IDE2KSAmIDB4ZmY7CisJb3BbMl0gPSAocGFnZSA+PiA4KSAmIDB4ZmY7CisJb3BbM10gPSBwYWdlICYgMHhmZjsKKworCXJldHVybiBtdGtfc25hbmRfbWFjX2lvKHNuZiwgb3AsIHNpemVvZihvcCksIE5VTEwsIDApOworfQorCitzdGF0aWMgdm9pZCBtdGtfc25hbmRfcmVhZF9mZG0oc3RydWN0IG10a19zbmFuZCAqc25mLCB1aW50OF90ICpidWYpCit7CisJdWludDMyX3QgdmFsbCwgdmFsbTsKKwl1aW50OF90ICpvb2JwdHIgPSBidWY7CisJaW50IGksIGo7CisKKwlmb3IgKGkgPSAwOyBpIDwgc25mLT5lY2Nfc3RlcHM7IGkrKykgeworCQl2YWxsID0gbmZpX3JlYWQzMihzbmYsIE5GSV9GRE1MKGkpKTsKKwkJdmFsbSA9IG5maV9yZWFkMzIoc25mLCBORklfRkRNTShpKSk7CisKKwkJZm9yIChqID0gMDsgaiA8IHNuZi0+bmZpX3NvYy0+ZmRtX3NpemU7IGorKykKKwkJCW9vYnB0cltqXSA9IChqID49IDQgPyB2YWxtIDogdmFsbCkgPj4gKChqICUgNCkgKiA4KTsKKworCQlvb2JwdHIgKz0gc25mLT5uZmlfc29jLT5mZG1fc2l6ZTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbXRrX3NuYW5kX3JlYWRfZWNjX3Bhcml0eShzdHJ1Y3QgbXRrX3NuYW5kICpzbmYsIHVpbnQzMl90IHBhZ2UsCisJCQkJICAgICB1aW50MzJfdCBzZWN0LCB1aW50OF90ICpvb2IpCit7CisJdWludDMyX3QgZWNjX2J5dGVzID0gc25mLT5zcGFyZV9wZXJfc2VjdG9yIC0gc25mLT5uZmlfc29jLT5mZG1fc2l6ZTsKKwl1aW50MzJfdCBjb2xhZGRyLCByYXdfb2Zmcywgb2ZmczsKKwl1aW50OF90IG9wWzRdOworCisJaWYgKHNpemVvZihvcCkgKyBlY2NfYnl0ZXMgPiBTTkZfR1BSQU1fU0laRSkgeworCQlzbmFuZF9sb2dfc25maShzbmYtPnBkZXYsCisJCQkgICAgICAgIkVDQyBwYXJpdHkgc2l6ZSBkb2VzIG5vdCBmaXQgdGhlIEdQUkFNXG4iKTsKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKwl9CisKKwlyYXdfb2ZmcyA9IHNlY3QgKiBzbmYtPnJhd19zZWN0b3Jfc2l6ZSArIHNuZi0+bmZpX3NvYy0+c2VjdG9yX3NpemUgKworCQkgICBzbmYtPm5maV9zb2MtPmZkbV9zaXplOworCW9mZnMgPSBzbmYtPmVjY19zdGVwcyAqIHNuZi0+bmZpX3NvYy0+ZmRtX3NpemUgKyBzZWN0ICogZWNjX2J5dGVzOworCisJLyogQ29sdW1uIGFkZHJlc3Mgd2l0aCBwbGFuZSBiaXQgKi8KKwljb2xhZGRyID0gcmF3X29mZnMgfCBtdGtfc25hbmRfZ2V0X3BsYW5lX2FkZHJlc3Moc25mLCBwYWdlKTsKKworCW9wWzBdID0gU05BTkRfQ01EX1JFQURfRlJPTV9DQUNIRTsKKwlvcFsxXSA9IChjb2xhZGRyID4+IDgpICYgMHhmZjsKKwlvcFsyXSA9IGNvbGFkZHIgJiAweGZmOworCW9wWzNdID0gMDsKKworCXJldHVybiBtdGtfc25hbmRfbWFjX2lvKHNuZiwgb3AsIHNpemVvZihvcCksIG9vYiArIG9mZnMsIGVjY19ieXRlcyk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX3NuYW5kX2NoZWNrX2VjY19yZXN1bHQoc3RydWN0IG10a19zbmFuZCAqc25mLCB1aW50MzJfdCBwYWdlKQoreworCXVpbnQ4X3QgKm9vYiA9IHNuZi0+cGFnZV9jYWNoZSArIHNuZi0+d3JpdGVzaXplOworCWludCBpLCByYywgcmV0ID0gMCwgbWF4X2JpdGZsaXBzID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBzbmYtPmVjY19zdGVwczsgaSsrKSB7CisJCWlmIChzbmYtPnNlY3RfYmZbaV0gPj0gMCkgeworCQkJaWYgKHNuZi0+c2VjdF9iZltpXSA+IG1heF9iaXRmbGlwcykKKwkJCQltYXhfYml0ZmxpcHMgPSBzbmYtPnNlY3RfYmZbaV07CisJCQljb250aW51ZTsKKwkJfQorCisJCXJjID0gbXRrX3NuYW5kX3JlYWRfZWNjX3Bhcml0eShzbmYsIHBhZ2UsIGksIG9vYik7CisJCWlmIChyYykKKwkJCXJldHVybiByYzsKKworCQlyYyA9IG10a19lY2NfZml4dXBfZW1wdHlfc2VjdG9yKHNuZiwgaSk7CisJCWlmIChyYyA8IDApIHsKKwkJCXJldCA9IC1FQkFETVNHOworCisJCQlzbmFuZF9sb2dfZWNjKHNuZi0+cGRldiwKKwkJCSAgICAgICJVbmNvcnJlY3RhYmxlIGJpdGZsaXBzIGluIHBhZ2UgJXUgc2VjdCAldVxuIiwKKwkJCSAgICAgIHBhZ2UsIGkpOworCQl9IGVsc2UgaWYgKHJjKSB7CisJCQlzbmYtPnNlY3RfYmZbaV0gPSByYzsKKworCQkJaWYgKHNuZi0+c2VjdF9iZltpXSA+IG1heF9iaXRmbGlwcykKKwkJCQltYXhfYml0ZmxpcHMgPSBzbmYtPnNlY3RfYmZbaV07CisKKwkJCXNuYW5kX2xvZ19lY2Moc25mLT5wZGV2LAorCQkJICAgICAgIiV1IGJpdGZsaXAlcyBjb3JyZWN0ZWQgaW4gcGFnZSAldSBzZWN0ICV1XG4iLAorCQkJICAgICAgcmMsIHJjID4gMSA/ICJzIiA6ICIiLCBwYWdlLCBpKTsKKwkJfSBlbHNlIHsKKwkJCXNuZi0+c2VjdF9iZltpXSA9IDA7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0ID8gcmV0IDogbWF4X2JpdGZsaXBzOworfQorCitzdGF0aWMgaW50IG10a19zbmFuZF9yZWFkX2NhY2hlKHN0cnVjdCBtdGtfc25hbmQgKnNuZiwgdWludDMyX3QgcGFnZSwgYm9vbCByYXcpCit7CisJdWludDMyX3QgY29sYWRkciwgcndieXRlcywgbW9kZSwgbGVuLCB2YWw7CisJdWludHB0cl90IGRtYV9hZGRyOworCWludCByZXQ7CisKKwkvKiBDb2x1bW4gYWRkcmVzcyB3aXRoIHBsYW5lIGJpdCAqLworCWNvbGFkZHIgPSBtdGtfc25hbmRfZ2V0X3BsYW5lX2FkZHJlc3Moc25mLCBwYWdlKTsKKworCW10a19zbmFuZF9tYWNfcmVzZXQoc25mKTsKKwltdGtfbmZpX3Jlc2V0KHNuZik7CisKKwkvKiBDb21tYW5kIGFuZCBkdW1teSBjeWNsZXMgKi8KKwluZmlfd3JpdGUzMihzbmYsIFNORl9SRF9DVEwyLAorCQkgICAgKCh1aW50MzJfdClzbmYtPmR1bW15X3JmYyA8PCBEQVRBX1JFQURfRFVNTVlfUykgfAorCQkgICAgKHNuZi0+b3Bjb2RlX3JmYyA8PCBEQVRBX1JFQURfQ01EX1MpKTsKKworCS8qIENvbHVtbiBhZGRyZXNzICovCisJbmZpX3dyaXRlMzIoc25mLCBTTkZfUkRfQ1RMMywgY29sYWRkcik7CisKKwkvKiBTZXQgcmVhZCBtb2RlICovCisJbW9kZSA9ICh1aW50MzJfdClzbmYtPm1vZGVfcmZjIDw8IERBVEFfUkVBRF9NT0RFX1M7CisJbmZpX3JtdzMyKHNuZiwgU05GX01JU0NfQ1RMLCBEQVRBX1JFQURfTU9ERSwKKwkJCW1vZGUgfCBEQVRBUkRfQ1VTVE9NX0VOIHwgKHNuZi0+bmZpX3NvYy0+bGF0Y2hfbGF0IDw8IExBVENIX0xBVF9TKSk7CisKKwkvKiBTZXQgYnl0ZXMgdG8gcmVhZCAqLworCXJ3Ynl0ZXMgPSBzbmYtPmVjY19zdGVwcyAqIHNuZi0+cmF3X3NlY3Rvcl9zaXplOworCW5maV93cml0ZTMyKHNuZiwgU05GX01JU0NfQ1RMMiwgKHJ3Ynl0ZXMgPDwgUFJPR1JBTV9MT0FEX0JZVEVfTlVNX1MpIHwKKwkJICAgIHJ3Ynl0ZXMpOworCisJLyogTkZJIHJlYWQgcHJlcGFyZSAqLworCW1vZGUgPSByYXcgPyAwIDogQ05GR19IV19FQ0NfRU4gfCBDTkZHX0FVVE9fRk1UX0VOOworCW5maV93cml0ZTE2KHNuZiwgTkZJX0NORkcsIChDTkZHX09QX01PREVfQ1VTVCA8PCBDTkZHX09QX01PREVfUykgfAorCQkgICAgQ05GR19ETUFfQlVSU1RfRU4gfCBDTkZHX1JFQURfTU9ERSB8IENORkdfRE1BX01PREUgfCBtb2RlKTsKKworCW5maV93cml0ZTMyKHNuZiwgTkZJX0NPTiwgKHNuZi0+ZWNjX3N0ZXBzIDw8IENPTl9TRUNfTlVNX1MpKTsKKworCS8qIFByZXBhcmUgZm9yIERNQSByZWFkICovCisJbGVuID0gc25mLT53cml0ZXNpemUgKyBzbmYtPm9vYnNpemU7CisJcmV0ID0gZG1hX21lbV9tYXAoc25mLT5wZGV2LCBzbmYtPnBhZ2VfY2FjaGUsICZkbWFfYWRkciwgbGVuLCBmYWxzZSk7CisJaWYgKHJldCkgeworCQlzbmFuZF9sb2dfbmZpKHNuZi0+cGRldiwKKwkJCSAgICAgICJETUEgbWFwIGZyb20gZGV2aWNlIGZhaWxlZCB3aXRoICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCW5maV93cml0ZTMyKHNuZiwgTkZJX1NUUkFERFIsICh1aW50MzJfdClkbWFfYWRkcik7CisKKwlpZiAoIXJhdykKKwkJbXRrX3NuYW5kX2VjY19kZWNvZGVyX3N0YXJ0KHNuZik7CisKKwkvKiBQcmVwYXJlIGZvciBjdXN0b20gcmVhZCBpbnRlcnJ1cHQgKi8KKwluZmlfd3JpdGUzMihzbmYsIE5GSV9JTlRSX0VOLCBORklfSVJRX0lOVFJfRU4gfCBORklfSVJRX0NVU19SRUFEKTsKKwlpcnFfY29tcGxldGlvbl9pbml0KHNuZi0+cGRldik7CisKKwkvKiBUcmlnZ2VyIE5GSSBpbnRvIGN1c3RvbSBtb2RlICovCisJbmZpX3dyaXRlMTYoc25mLCBORklfQ01ELCBORklfQ01EX0RVTU1ZX1JFQUQpOworCisJLyogU3RhcnQgRE1BIHJlYWQgKi8KKwluZmlfcm13MzIoc25mLCBORklfQ09OLCAwLCBDT05fQlJEKTsKKwluZmlfd3JpdGUxNihzbmYsIE5GSV9TVFJEQVRBLCBTVFJfREFUQSk7CisKKwkvKiBXYWl0IGZvciBvcGVyYXRpb24gZmluaXNoZWQgKi8KKwlyZXQgPSBpcnFfY29tcGxldGlvbl93YWl0KHNuZi0+cGRldiwgc25mLT5uZmlfYmFzZSArIFNORl9TVEFfQ1RMMSwKKwkJCQkgIENVU19SRUFEX0RPTkUsIFNORklfUE9MTF9JTlRFUlZBTCk7CisJaWYgKHJldCkgeworCQlzbmFuZF9sb2dfbmZpKHNuZi0+cGRldiwKKwkJCSAgICAgICJETUEgdGltZWQgb3V0IGZvciByZWFkaW5nIGZyb20gY2FjaGVcbiIpOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJLyogV2FpdCBmb3IgQlVTX1NFQ19DTlRSIHJldHVybmluZyBleHBlY3RlZCB2YWx1ZSAqLworCXJldCA9IHJlYWQzMl9wb2xsX3RpbWVvdXQoc25mLT5uZmlfYmFzZSArIE5GSV9CWVRFTEVOLCB2YWwsCisJCQkJICBCVVNfU0VDX0NOVFIodmFsKSA+PSBzbmYtPmVjY19zdGVwcywKKwkJCQkgIDAsIFNORklfUE9MTF9JTlRFUlZBTCk7CisJaWYgKHJldCkgeworCQlzbmFuZF9sb2dfbmZpKHNuZi0+cGRldiwKKwkJCSAgICAgICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgQlVTX1NFQ19DTlRSXG4iKTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCS8qIFdhaXQgZm9yIGJ1cyBiZWNvbWluZyBpZGxlICovCisJcmV0ID0gcmVhZDMyX3BvbGxfdGltZW91dChzbmYtPm5maV9iYXNlICsgTkZJX01BU1RFUlNUQSwgdmFsLAorCQkJCSAgISh2YWwgJiBzbmYtPm5maV9zb2MtPm1hc3RlcnN0YV9tYXNrKSwKKwkJCQkgIDAsIFNORklfUE9MTF9JTlRFUlZBTCk7CisJaWYgKHJldCkgeworCQlzbmFuZF9sb2dfbmZpKHNuZi0+cGRldiwKKwkJCSAgICAgICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgYnVzIGJlY29taW5nIGlkbGVcbiIpOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJaWYgKCFyYXcpIHsKKwkJcmV0ID0gbXRrX2VjY193YWl0X2RlY29kZXJfZG9uZShzbmYpOworCQlpZiAocmV0KQorCQkJZ290byBjbGVhbnVwOworCisJCW10a19zbmFuZF9yZWFkX2ZkbShzbmYsIHNuZi0+cGFnZV9jYWNoZSArIHNuZi0+d3JpdGVzaXplKTsKKworCQltdGtfZWNjX2NoZWNrX2RlY29kZV9lcnJvcihzbmYpOworCQltdGtfc25hbmRfZWNjX2RlY29kZXJfc3RvcChzbmYpOworCisJCXJldCA9IG10a19zbmFuZF9jaGVja19lY2NfcmVzdWx0KHNuZiwgcGFnZSk7CisJfQorCitjbGVhbnVwOgorCS8qIERNQSBjbGVhbnVwICovCisJZG1hX21lbV91bm1hcChzbmYtPnBkZXYsIGRtYV9hZGRyLCBsZW4sIGZhbHNlKTsKKworCS8qIFN0b3AgcmVhZCAqLworCW5maV93cml0ZTMyKHNuZiwgTkZJX0NPTiwgMCk7CisJbmZpX3dyaXRlMTYoc25mLCBORklfQ05GRywgMCk7CisKKwkvKiBDbGVhciBTTkYgZG9uZSBmbGFnICovCisJbmZpX3JtdzMyKHNuZiwgU05GX1NUQV9DVEwxLCAwLCBDVVNfUkVBRF9ET05FKTsKKwluZmlfd3JpdGUzMihzbmYsIFNORl9TVEFfQ1RMMSwgMCk7CisKKwkvKiBEaXNhYmxlIGludGVycnVwdCAqLworCW5maV9yZWFkMzIoc25mLCBORklfSU5UUl9TVEEpOworCW5maV93cml0ZTMyKHNuZiwgTkZJX0lOVFJfRU4sIDApOworCisJbmZpX3JtdzMyKHNuZiwgU05GX01JU0NfQ1RMLCBEQVRBUkRfQ1VTVE9NX0VOIHwgTEFUQ0hfTEFULCAwKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19zbmFuZF9mcm9tX3Jhd19wYWdlKHN0cnVjdCBtdGtfc25hbmQgKnNuZiwgdm9pZCAqYnVmLCB2b2lkICpvb2IpCit7CisJdWludDMyX3QgaSwgZWNjX2J5dGVzID0gc25mLT5zcGFyZV9wZXJfc2VjdG9yIC0gc25mLT5uZmlfc29jLT5mZG1fc2l6ZTsKKwl1aW50OF90ICplY2NwdHIgPSBvb2IgKyBzbmYtPmVjY19zdGVwcyAqIHNuZi0+bmZpX3NvYy0+ZmRtX3NpemU7CisJdWludDhfdCAqYnVmcHRyID0gYnVmLCAqb29icHRyID0gb29iLCAqcmF3X3NlY3RvcjsKKworCWZvciAoaSA9IDA7IGkgPCBzbmYtPmVjY19zdGVwczsgaSsrKSB7CisJCXJhd19zZWN0b3IgPSBzbmYtPnBhZ2VfY2FjaGUgKyBpICogc25mLT5yYXdfc2VjdG9yX3NpemU7CisKKwkJaWYgKGJ1ZikgeworCQkJbWVtY3B5KGJ1ZnB0ciwgcmF3X3NlY3Rvciwgc25mLT5uZmlfc29jLT5zZWN0b3Jfc2l6ZSk7CisJCQlidWZwdHIgKz0gc25mLT5uZmlfc29jLT5zZWN0b3Jfc2l6ZTsKKwkJfQorCisJCXJhd19zZWN0b3IgKz0gc25mLT5uZmlfc29jLT5zZWN0b3Jfc2l6ZTsKKworCQlpZiAob29iKSB7CisJCQltZW1jcHkob29icHRyLCByYXdfc2VjdG9yLCBzbmYtPm5maV9zb2MtPmZkbV9zaXplKTsKKwkJCW9vYnB0ciArPSBzbmYtPm5maV9zb2MtPmZkbV9zaXplOworCQkJcmF3X3NlY3RvciArPSBzbmYtPm5maV9zb2MtPmZkbV9zaXplOworCisJCQltZW1jcHkoZWNjcHRyLCByYXdfc2VjdG9yLCBlY2NfYnl0ZXMpOworCQkJZWNjcHRyICs9IGVjY19ieXRlczsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBtdGtfc25hbmRfZG9fcmVhZF9wYWdlKHN0cnVjdCBtdGtfc25hbmQgKnNuZiwgdWludDY0X3QgYWRkciwKKwkJCQkgIHZvaWQgKmJ1Ziwgdm9pZCAqb29iLCBib29sIHJhdywgYm9vbCBmb3JtYXQpCit7CisJdWludDY0X3QgZGllX2FkZHI7CisJdWludDMyX3QgcGFnZSwgZGx5X2N0cmwzOworCWludCByZXQsIHJldHJ5X2NudCA9IDA7CisKKwlkaWVfYWRkciA9IG10a19zbmFuZF9zZWxlY3RfZGllX2FkZHJlc3Moc25mLCBhZGRyKTsKKwlwYWdlID0gZGllX2FkZHIgPj4gc25mLT53cml0ZXNpemVfc2hpZnQ7CisKKwlkbHlfY3RybDMgPSBuZmlfcmVhZDMyKHNuZiwgU05GX0RMWV9DVEwzKTsKKworCXJldCA9IG10a19zbmFuZF9wYWdlX29wKHNuZiwgcGFnZSwgU05BTkRfQ01EX1JFQURfVE9fQ0FDSEUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBtdGtfc25hbmRfcG9sbF9zdGF0dXMoc25mLCBTTkZJX1BPTExfSU5URVJWQUwpOworCWlmIChyZXQgPCAwKSB7CisJCXNuYW5kX2xvZ19jaGlwKHNuZi0+cGRldiwgIlJlYWQgdG8gY2FjaGUgY29tbWFuZCB0aW1lZCBvdXRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworcmV0cnk6CisJcmV0ID0gbXRrX3NuYW5kX3JlYWRfY2FjaGUoc25mLCBwYWdlLCByYXcpOworCWlmIChyZXQgPCAwICYmIHJldCAhPSAtRUJBRE1TRykKKwkJcmV0dXJuIHJldDsKKworCWlmIChyZXQgPT0gLUVCQURNU0cgJiYgcmV0cnlfY250IDwgMTYpIHsKKwkJbmZpX3dyaXRlMzIoc25mLCBTTkZfRExZX0NUTDMsIHJldHJ5X2NudCAqIDIpOworCQlyZXRyeV9jbnQrKzsKKwkJZ290byByZXRyeTsKKwl9CisKKwlpZiAocmV0cnlfY250KSB7CisJCWlmKHJldCA9PSAtRUJBRE1TRykgeworCQkJbmZpX3dyaXRlMzIoc25mLCBTTkZfRExZX0NUTDMsIGRseV9jdHJsMyk7CisJCQlzbmFuZF9sb2dfY2hpcChzbmYtPnBkZXYsCisJCQkJICAgICAgICJORkkgY2FsaWJyYXRpb24gZmFpbGVkLiBPcmlnaW5hbCBzYW1wbGUgZGVsYXk6IDB4JXhcbiIsCisJCQkJICAgICAgIGRseV9jdHJsMyk7CisJCX0gZWxzZSB7CisJCQlzbmFuZF9sb2dfY2hpcChzbmYtPnBkZXYsCisJCQkJICAgICAgICJORkkgY2FsaWJyYXRpb24gcGFzc2VkLiBOZXcgc2FtcGxlIGRlbGF5OiAweCV4XG4iLAorCQkJCSAgICAgICBuZmlfcmVhZDMyKHNuZiwgU05GX0RMWV9DVEwzKSk7CisJCX0KKwl9CisKKwlpZiAocmF3KSB7CisJCWlmIChmb3JtYXQpIHsKKwkJCW10a19zbmFuZF9ibV9zd2FwX3JhdyhzbmYpOworCQkJbXRrX3NuYW5kX2ZkbV9ibV9zd2FwX3JhdyhzbmYpOworCQkJbXRrX3NuYW5kX2Zyb21fcmF3X3BhZ2Uoc25mLCBidWYsIG9vYik7CisJCX0gZWxzZSB7CisJCQlpZiAoYnVmKQorCQkJCW1lbWNweShidWYsIHNuZi0+cGFnZV9jYWNoZSwgc25mLT53cml0ZXNpemUpOworCisJCQlpZiAob29iKSB7CisJCQkJbWVtc2V0KG9vYiwgMHhmZiwgc25mLT5vb2JzaXplKTsKKwkJCQltZW1jcHkob29iLCBzbmYtPnBhZ2VfY2FjaGUgKyBzbmYtPndyaXRlc2l6ZSwKKwkJCQkgICAgICAgc25mLT5lY2Nfc3RlcHMgKiBzbmYtPnNwYXJlX3Blcl9zZWN0b3IpOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJbXRrX3NuYW5kX2JtX3N3YXAoc25mKTsKKwkJbXRrX3NuYW5kX2ZkbV9ibV9zd2FwKHNuZik7CisKKwkJaWYgKGJ1ZikKKwkJCW1lbWNweShidWYsIHNuZi0+cGFnZV9jYWNoZSwgc25mLT53cml0ZXNpemUpOworCisJCWlmIChvb2IpIHsKKwkJCW1lbXNldChvb2IsIDB4ZmYsIHNuZi0+b29ic2l6ZSk7CisJCQltZW1jcHkob29iLCBzbmYtPnBhZ2VfY2FjaGUgKyBzbmYtPndyaXRlc2l6ZSwKKwkJCSAgICAgICBzbmYtPmVjY19zdGVwcyAqIHNuZi0+bmZpX3NvYy0+ZmRtX3NpemUpOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworaW50IG10a19zbmFuZF9yZWFkX3BhZ2Uoc3RydWN0IG10a19zbmFuZCAqc25mLCB1aW50NjRfdCBhZGRyLCB2b2lkICpidWYsCisJCQl2b2lkICpvb2IsIGJvb2wgcmF3KQoreworCWlmICghc25mIHx8ICghYnVmICYmICFvb2IpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhZGRyID49IHNuZi0+c2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gbXRrX3NuYW5kX2RvX3JlYWRfcGFnZShzbmYsIGFkZHIsIGJ1Ziwgb29iLCByYXcsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBtdGtfc25hbmRfd3JpdGVfZmRtKHN0cnVjdCBtdGtfc25hbmQgKnNuZiwgY29uc3QgdWludDhfdCAqYnVmKQoreworCXVpbnQzMl90IHZhbGwsIHZhbG0sIGZkbV9zaXplID0gc25mLT5uZmlfc29jLT5mZG1fc2l6ZTsKKwljb25zdCB1aW50OF90ICpvb2JwdHIgPSBidWY7CisJaW50IGksIGo7CisKKwlmb3IgKGkgPSAwOyBpIDwgc25mLT5lY2Nfc3RlcHM7IGkrKykgeworCQl2YWxsID0gMDsKKwkJdmFsbSA9IDA7CisKKwkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgeworCQkJaWYgKGogPCA0KQorCQkJCXZhbGwgfD0gKGogPCBmZG1fc2l6ZSA/IG9vYnB0cltqXSA6IDB4ZmYpCisJCQkJCQk8PCAoaiAqIDgpOworCQkJZWxzZQorCQkJCXZhbG0gfD0gKGogPCBmZG1fc2l6ZSA/IG9vYnB0cltqXSA6IDB4ZmYpCisJCQkJCQk8PCAoKGogLSA0KSAqIDgpOworCQl9CisKKwkJbmZpX3dyaXRlMzIoc25mLCBORklfRkRNTChpKSwgdmFsbCk7CisJCW5maV93cml0ZTMyKHNuZiwgTkZJX0ZETU0oaSksIHZhbG0pOworCisJCW9vYnB0ciArPSBmZG1fc2l6ZTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbXRrX3NuYW5kX3Byb2dyYW1fbG9hZChzdHJ1Y3QgbXRrX3NuYW5kICpzbmYsIHVpbnQzMl90IHBhZ2UsCisJCQkJICBib29sIHJhdykKK3sKKwl1aW50MzJfdCBjb2xhZGRyLCByd2J5dGVzLCBtb2RlLCBsZW4sIHZhbDsKKwl1aW50cHRyX3QgZG1hX2FkZHI7CisJaW50IHJldDsKKworCS8qIENvbHVtbiBhZGRyZXNzIHdpdGggcGxhbmUgYml0ICovCisJY29sYWRkciA9IG10a19zbmFuZF9nZXRfcGxhbmVfYWRkcmVzcyhzbmYsIHBhZ2UpOworCisJbXRrX3NuYW5kX21hY19yZXNldChzbmYpOworCW10a19uZmlfcmVzZXQoc25mKTsKKworCS8qIFdyaXRlIEZETSByZWdpc3RlcnMgaWYgbmVjZXNzYXJ5ICovCisJaWYgKCFyYXcpCisJCW10a19zbmFuZF93cml0ZV9mZG0oc25mLCBzbmYtPnBhZ2VfY2FjaGUgKyBzbmYtPndyaXRlc2l6ZSk7CisKKwkvKiBDb21tYW5kICovCisJbmZpX3dyaXRlMzIoc25mLCBTTkZfUEdfQ1RMMSwgKHNuZi0+b3Bjb2RlX3BsIDw8IFBHX0xPQURfQ01EX1MpKTsKKworCS8qIENvbHVtbiBhZGRyZXNzICovCisJbmZpX3dyaXRlMzIoc25mLCBTTkZfUEdfQ1RMMiwgY29sYWRkcik7CisKKwkvKiBTZXQgd3JpdGUgbW9kZSAqLworCW1vZGUgPSBzbmYtPm1vZGVfcGwgPyBQR19MT0FEX1g0X0VOIDogMDsKKwluZmlfcm13MzIoc25mLCBTTkZfTUlTQ19DVEwsIFBHX0xPQURfWDRfRU4sIG1vZGUgfCBQR19MT0FEX0NVU1RPTV9FTik7CisKKwkvKiBTZXQgYnl0ZXMgdG8gd3JpdGUgKi8KKwlyd2J5dGVzID0gc25mLT5lY2Nfc3RlcHMgKiBzbmYtPnJhd19zZWN0b3Jfc2l6ZTsKKwluZmlfd3JpdGUzMihzbmYsIFNORl9NSVNDX0NUTDIsIChyd2J5dGVzIDw8IFBST0dSQU1fTE9BRF9CWVRFX05VTV9TKSB8CisJCSAgICByd2J5dGVzKTsKKworCS8qIE5GSSB3cml0ZSBwcmVwYXJlICovCisJbW9kZSA9IHJhdyA/IDAgOiBDTkZHX0hXX0VDQ19FTiB8IENORkdfQVVUT19GTVRfRU47CisJbmZpX3dyaXRlMTYoc25mLCBORklfQ05GRywgKENORkdfT1BfTU9ERV9QUk9HUkFNIDw8IENORkdfT1BfTU9ERV9TKSB8CisJCSAgICBDTkZHX0RNQV9CVVJTVF9FTiB8IENORkdfRE1BX01PREUgfCBtb2RlKTsKKworCW5maV93cml0ZTMyKHNuZiwgTkZJX0NPTiwgKHNuZi0+ZWNjX3N0ZXBzIDw8IENPTl9TRUNfTlVNX1MpKTsKKworCS8qIFByZXBhcmUgZm9yIERNQSB3cml0ZSAqLworCWxlbiA9IHNuZi0+d3JpdGVzaXplICsgc25mLT5vb2JzaXplOworCXJldCA9IGRtYV9tZW1fbWFwKHNuZi0+cGRldiwgc25mLT5wYWdlX2NhY2hlLCAmZG1hX2FkZHIsIGxlbiwgdHJ1ZSk7CisJaWYgKHJldCkgeworCQlzbmFuZF9sb2dfbmZpKHNuZi0+cGRldiwKKwkJCSAgICAgICJETUEgbWFwIHRvIGRldmljZSBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwluZmlfd3JpdGUzMihzbmYsIE5GSV9TVFJBRERSLCAodWludDMyX3QpZG1hX2FkZHIpOworCisJaWYgKCFyYXcpCisJCW10a19zbmFuZF9lY2NfZW5jb2Rlcl9zdGFydChzbmYpOworCisJLyogUHJlcGFyZSBmb3IgY3VzdG9tIHdyaXRlIGludGVycnVwdCAqLworCW5maV93cml0ZTMyKHNuZiwgTkZJX0lOVFJfRU4sIE5GSV9JUlFfSU5UUl9FTiB8IE5GSV9JUlFfQ1VTX1BHKTsKKwlpcnFfY29tcGxldGlvbl9pbml0KHNuZi0+cGRldik7CisKKwkvKiBUcmlnZ2VyIE5GSSBpbnRvIGN1c3RvbSBtb2RlICovCisJbmZpX3dyaXRlMTYoc25mLCBORklfQ01ELCBORklfQ01EX0RVTU1ZX1dSSVRFKTsKKworCS8qIFN0YXJ0IERNQSB3cml0ZSAqLworCW5maV9ybXczMihzbmYsIE5GSV9DT04sIDAsIENPTl9CV1IpOworCW5maV93cml0ZTE2KHNuZiwgTkZJX1NUUkRBVEEsIFNUUl9EQVRBKTsKKworCS8qIFdhaXQgZm9yIG9wZXJhdGlvbiBmaW5pc2hlZCAqLworCXJldCA9IGlycV9jb21wbGV0aW9uX3dhaXQoc25mLT5wZGV2LCBzbmYtPm5maV9iYXNlICsgU05GX1NUQV9DVEwxLAorCQkJCSAgQ1VTX1BHX0RPTkUsIFNORklfUE9MTF9JTlRFUlZBTCk7CisJaWYgKHJldCkgeworCQlzbmFuZF9sb2dfbmZpKHNuZi0+cGRldiwKKwkJCSAgICAgICJETUEgdGltZWQgb3V0IGZvciBwcm9ncmFtIGxvYWRcbiIpOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJLyogV2FpdCBmb3IgTkZJX1NFQ19DTlRSIHJldHVybmluZyBleHBlY3RlZCB2YWx1ZSAqLworCXJldCA9IHJlYWQzMl9wb2xsX3RpbWVvdXQoc25mLT5uZmlfYmFzZSArIE5GSV9BRERSQ05UUiwgdmFsLAorCQkJCSAgTkZJX1NFQ19DTlRSKHZhbCkgPj0gc25mLT5lY2Nfc3RlcHMsCisJCQkJICAwLCBTTkZJX1BPTExfSU5URVJWQUwpOworCWlmIChyZXQpIHsKKwkJc25hbmRfbG9nX25maShzbmYtPnBkZXYsCisJCQkgICAgICAiVGltZWQgb3V0IHdhaXRpbmcgZm9yIEJVU19TRUNfQ05UUlxuIik7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlpZiAoIXJhdykKKwkJbXRrX3NuYW5kX2VjY19lbmNvZGVyX3N0b3Aoc25mKTsKKworY2xlYW51cDoKKwkvKiBETUEgY2xlYW51cCAqLworCWRtYV9tZW1fdW5tYXAoc25mLT5wZGV2LCBkbWFfYWRkciwgbGVuLCB0cnVlKTsKKworCS8qIFN0b3Agd3JpdGUgKi8KKwluZmlfd3JpdGUzMihzbmYsIE5GSV9DT04sIDApOworCW5maV93cml0ZTE2KHNuZiwgTkZJX0NORkcsIDApOworCisJLyogQ2xlYXIgU05GIGRvbmUgZmxhZyAqLworCW5maV9ybXczMihzbmYsIFNORl9TVEFfQ1RMMSwgMCwgQ1VTX1BHX0RPTkUpOworCW5maV93cml0ZTMyKHNuZiwgU05GX1NUQV9DVEwxLCAwKTsKKworCS8qIERpc2FibGUgaW50ZXJydXB0ICovCisJbmZpX3JlYWQzMihzbmYsIE5GSV9JTlRSX1NUQSk7CisJbmZpX3dyaXRlMzIoc25mLCBORklfSU5UUl9FTiwgMCk7CisKKwluZmlfcm13MzIoc25mLCBTTkZfTUlTQ19DVEwsIFBHX0xPQURfQ1VTVE9NX0VOLCAwKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19zbmFuZF90b19yYXdfcGFnZShzdHJ1Y3QgbXRrX3NuYW5kICpzbmYsCisJCQkJICBjb25zdCB2b2lkICpidWYsIGNvbnN0IHZvaWQgKm9vYiwKKwkJCQkgIGJvb2wgZW1wdHlfZWNjKQoreworCXVpbnQzMl90IGksIGVjY19ieXRlcyA9IHNuZi0+c3BhcmVfcGVyX3NlY3RvciAtIHNuZi0+bmZpX3NvYy0+ZmRtX3NpemU7CisJY29uc3QgdWludDhfdCAqZWNjcHRyID0gb29iICsgc25mLT5lY2Nfc3RlcHMgKiBzbmYtPm5maV9zb2MtPmZkbV9zaXplOworCWNvbnN0IHVpbnQ4X3QgKmJ1ZnB0ciA9IGJ1ZiwgKm9vYnB0ciA9IG9vYjsKKwl1aW50OF90ICpyYXdfc2VjdG9yOworCisJbWVtc2V0KHNuZi0+cGFnZV9jYWNoZSwgMHhmZiwgc25mLT53cml0ZXNpemUgKyBzbmYtPm9vYnNpemUpOworCWZvciAoaSA9IDA7IGkgPCBzbmYtPmVjY19zdGVwczsgaSsrKSB7CisJCXJhd19zZWN0b3IgPSBzbmYtPnBhZ2VfY2FjaGUgKyBpICogc25mLT5yYXdfc2VjdG9yX3NpemU7CisKKwkJaWYgKGJ1ZikgeworCQkJbWVtY3B5KHJhd19zZWN0b3IsIGJ1ZnB0ciwgc25mLT5uZmlfc29jLT5zZWN0b3Jfc2l6ZSk7CisJCQlidWZwdHIgKz0gc25mLT5uZmlfc29jLT5zZWN0b3Jfc2l6ZTsKKwkJfQorCisJCXJhd19zZWN0b3IgKz0gc25mLT5uZmlfc29jLT5zZWN0b3Jfc2l6ZTsKKworCQlpZiAob29iKSB7CisJCQltZW1jcHkocmF3X3NlY3Rvciwgb29icHRyLCBzbmYtPm5maV9zb2MtPmZkbV9zaXplKTsKKwkJCW9vYnB0ciArPSBzbmYtPm5maV9zb2MtPmZkbV9zaXplOworCQkJcmF3X3NlY3RvciArPSBzbmYtPm5maV9zb2MtPmZkbV9zaXplOworCisJCQlpZiAoZW1wdHlfZWNjKQorCQkJCW1lbXNldChyYXdfc2VjdG9yLCAweGZmLCBlY2NfYnl0ZXMpOworCQkJZWxzZQorCQkJCW1lbWNweShyYXdfc2VjdG9yLCBlY2NwdHIsIGVjY19ieXRlcyk7CisJCQllY2NwdHIgKz0gZWNjX2J5dGVzOworCQl9CisJfQorfQorCitzdGF0aWMgYm9vbCBtdGtfc25hbmRfaXNfZW1wdHlfcGFnZShzdHJ1Y3QgbXRrX3NuYW5kICpzbmYsIGNvbnN0IHZvaWQgKmJ1ZiwKKwkJCQkgICAgY29uc3Qgdm9pZCAqb29iKQoreworCWNvbnN0IHVpbnQ4X3QgKnAgPSBidWY7CisJdWludDMyX3QgaSwgajsKKworCWlmIChidWYpIHsKKwkJZm9yIChpID0gMDsgaSA8IHNuZi0+d3JpdGVzaXplOyBpKyspIHsKKwkJCWlmIChwW2ldICE9IDB4ZmYpCisJCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCisJaWYgKG9vYikgeworCQlmb3IgKGogPSAwOyBqIDwgc25mLT5lY2Nfc3RlcHM7IGorKykgeworCQkJcCA9IG9vYiArIGogKiBzbmYtPm5maV9zb2MtPmZkbV9zaXplOworCisJCQlmb3IgKGkgPSAwOyBpIDwgc25mLT5uZmlfc29jLT5mZG1fZWNjX3NpemU7IGkrKykgeworCQkJCWlmIChwW2ldICE9IDB4ZmYpCisJCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW50IG10a19zbmFuZF9kb193cml0ZV9wYWdlKHN0cnVjdCBtdGtfc25hbmQgKnNuZiwgdWludDY0X3QgYWRkciwKKwkJCQkgICBjb25zdCB2b2lkICpidWYsIGNvbnN0IHZvaWQgKm9vYiwKKwkJCQkgICBib29sIHJhdywgYm9vbCBmb3JtYXQpCit7CisJdWludDY0X3QgZGllX2FkZHI7CisJYm9vbCBlbXB0eV9lY2MgPSBmYWxzZTsKKwl1aW50MzJfdCBwYWdlOworCWludCByZXQ7CisKKwlkaWVfYWRkciA9IG10a19zbmFuZF9zZWxlY3RfZGllX2FkZHJlc3Moc25mLCBhZGRyKTsKKwlwYWdlID0gZGllX2FkZHIgPj4gc25mLT53cml0ZXNpemVfc2hpZnQ7CisKKwlpZiAoIXJhdyAmJiBtdGtfc25hbmRfaXNfZW1wdHlfcGFnZShzbmYsIGJ1Ziwgb29iKSkgeworCQkvKgorCQkgKiBJZiB0aGUgZGF0YSBpbiB0aGUgcGFnZSB0byBiZSBlY2MtZWQgaXMgZnVsbCAweGZmLAorCQkgKiBjaGFuZ2UgdG8gcmF3IHdyaXRlIG1vZGUKKwkJICovCisJCXJhdyA9IHRydWU7CisJCWZvcm1hdCA9IHRydWU7CisKKwkJLyogZmlsbCBlY2MgcGFyaXR5IGNvZGUgcmVnaW9uIHdpdGggMHhmZiAqLworCQllbXB0eV9lY2MgPSB0cnVlOworCX0KKworCWlmIChyYXcpIHsKKwkJaWYgKGZvcm1hdCkgeworCQkJbXRrX3NuYW5kX3RvX3Jhd19wYWdlKHNuZiwgYnVmLCBvb2IsIGVtcHR5X2VjYyk7CisJCQltdGtfc25hbmRfZmRtX2JtX3N3YXBfcmF3KHNuZik7CisJCQltdGtfc25hbmRfYm1fc3dhcF9yYXcoc25mKTsKKwkJfSBlbHNlIHsKKwkJCW1lbXNldChzbmYtPnBhZ2VfY2FjaGUsIDB4ZmYsCisJCQkgICAgICAgc25mLT53cml0ZXNpemUgKyBzbmYtPm9vYnNpemUpOworCisJCQlpZiAoYnVmKQorCQkJCW1lbWNweShzbmYtPnBhZ2VfY2FjaGUsIGJ1Ziwgc25mLT53cml0ZXNpemUpOworCisJCQlpZiAob29iKSB7CisJCQkJbWVtY3B5KHNuZi0+cGFnZV9jYWNoZSArIHNuZi0+d3JpdGVzaXplLCBvb2IsCisJCQkJICAgICAgIHNuZi0+ZWNjX3N0ZXBzICogc25mLT5zcGFyZV9wZXJfc2VjdG9yKTsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCW1lbXNldChzbmYtPnBhZ2VfY2FjaGUsIDB4ZmYsIHNuZi0+d3JpdGVzaXplICsgc25mLT5vb2JzaXplKTsKKwkJaWYgKGJ1ZikKKwkJCW1lbWNweShzbmYtPnBhZ2VfY2FjaGUsIGJ1Ziwgc25mLT53cml0ZXNpemUpOworCisJCWlmIChvb2IpIHsKKwkJCW1lbWNweShzbmYtPnBhZ2VfY2FjaGUgKyBzbmYtPndyaXRlc2l6ZSwgb29iLAorCQkJICAgICAgIHNuZi0+ZWNjX3N0ZXBzICogc25mLT5uZmlfc29jLT5mZG1fc2l6ZSk7CisJCX0KKworCQltdGtfc25hbmRfZmRtX2JtX3N3YXAoc25mKTsKKwkJbXRrX3NuYW5kX2JtX3N3YXAoc25mKTsKKwl9CisKKwlyZXQgPSBtdGtfc25hbmRfd3JpdGVfZW5hYmxlKHNuZik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG10a19zbmFuZF9wcm9ncmFtX2xvYWQoc25mLCBwYWdlLCByYXcpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBtdGtfc25hbmRfcGFnZV9vcChzbmYsIHBhZ2UsIFNOQU5EX0NNRF9QUk9HUkFNX0VYRUNVVEUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBtdGtfc25hbmRfcG9sbF9zdGF0dXMoc25mLCBTTkZJX1BPTExfSU5URVJWQUwpOworCWlmIChyZXQgPCAwKSB7CisJCXNuYW5kX2xvZ19jaGlwKHNuZi0+cGRldiwKKwkJCSAgICAgICAiUGFnZSBwcm9ncmFtIGNvbW1hbmQgdGltZWQgb3V0IG9uIHBhZ2UgJXVcbiIsCisJCQkgICAgICAgcGFnZSk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKHJldCAmIFNOQU5EX1NUQVRVU19QUk9HUkFNX0ZBSUwpIHsKKwkJc25hbmRfbG9nX2NoaXAoc25mLT5wZGV2LAorCQkJICAgICAgICJQYWdlIHByb2dyYW0gZmFpbGVkIG9uIHBhZ2UgJXVcbiIsIHBhZ2UpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IG10a19zbmFuZF93cml0ZV9wYWdlKHN0cnVjdCBtdGtfc25hbmQgKnNuZiwgdWludDY0X3QgYWRkciwgY29uc3Qgdm9pZCAqYnVmLAorCQkJIGNvbnN0IHZvaWQgKm9vYiwgYm9vbCByYXcpCit7CisJaWYgKCFzbmYgfHwgKCFidWYgJiYgIW9vYikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGFkZHIgPj0gc25mLT5zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBtdGtfc25hbmRfZG9fd3JpdGVfcGFnZShzbmYsIGFkZHIsIGJ1Ziwgb29iLCByYXcsIHRydWUpOworfQorCitpbnQgbXRrX3NuYW5kX2VyYXNlX2Jsb2NrKHN0cnVjdCBtdGtfc25hbmQgKnNuZiwgdWludDY0X3QgYWRkcikKK3sKKwl1aW50NjRfdCBkaWVfYWRkcjsKKwl1aW50MzJfdCBwYWdlLCBibG9jazsKKwlpbnQgcmV0OworCisJaWYgKCFzbmYpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGFkZHIgPj0gc25mLT5zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRpZV9hZGRyID0gbXRrX3NuYW5kX3NlbGVjdF9kaWVfYWRkcmVzcyhzbmYsIGFkZHIpOworCWJsb2NrID0gZGllX2FkZHIgPj4gc25mLT5lcmFzZXNpemVfc2hpZnQ7CisJcGFnZSA9IGJsb2NrIDw8IChzbmYtPmVyYXNlc2l6ZV9zaGlmdCAtIHNuZi0+d3JpdGVzaXplX3NoaWZ0KTsKKworCXJldCA9IG10a19zbmFuZF93cml0ZV9lbmFibGUoc25mKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gbXRrX3NuYW5kX3BhZ2Vfb3Aoc25mLCBwYWdlLCBTTkFORF9DTURfQkxPQ0tfRVJBU0UpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBtdGtfc25hbmRfcG9sbF9zdGF0dXMoc25mLCBTTkZJX1BPTExfSU5URVJWQUwpOworCWlmIChyZXQgPCAwKSB7CisJCXNuYW5kX2xvZ19jaGlwKHNuZi0+cGRldiwKKwkJCSAgICAgICAiQmxvY2sgZXJhc2UgY29tbWFuZCB0aW1lZCBvdXQgb24gYmxvY2sgJXVcbiIsCisJCQkgICAgICAgYmxvY2spOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChyZXQgJiBTTkFORF9TVEFUVVNfRVJBU0VfRkFJTCkgeworCQlzbmFuZF9sb2dfY2hpcChzbmYtPnBkZXYsCisJCQkgICAgICAgIkJsb2NrIGVyYXNlIGZhaWxlZCBvbiBibG9jayAldVxuIiwgYmxvY2spOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfc25hbmRfYmxvY2tfaXNiYWRfc3RkKHN0cnVjdCBtdGtfc25hbmQgKnNuZiwgdWludDY0X3QgYWRkcikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gbXRrX3NuYW5kX2RvX3JlYWRfcGFnZShzbmYsIGFkZHIsIE5VTEwsIHNuZi0+YnVmX2NhY2hlLCB0cnVlLAorCQkJCSAgICAgZmFsc2UpOworCWlmIChyZXQgJiYgcmV0ICE9IC1FQkFETVNHKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHNuZi0+YnVmX2NhY2hlWzBdICE9IDB4ZmY7Cit9CisKK3N0YXRpYyBpbnQgbXRrX3NuYW5kX2Jsb2NrX2lzYmFkX210ayhzdHJ1Y3QgbXRrX3NuYW5kICpzbmYsIHVpbnQ2NF90IGFkZHIpCit7CisJaW50IHJldDsKKworCXJldCA9IG10a19zbmFuZF9kb19yZWFkX3BhZ2Uoc25mLCBhZGRyLCBOVUxMLCBzbmYtPmJ1Zl9jYWNoZSwgdHJ1ZSwKKwkJCQkgICAgIHRydWUpOworCWlmIChyZXQgJiYgcmV0ICE9IC1FQkFETVNHKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHNuZi0+YnVmX2NhY2hlWzBdICE9IDB4ZmY7Cit9CisKK2ludCBtdGtfc25hbmRfYmxvY2tfaXNiYWQoc3RydWN0IG10a19zbmFuZCAqc25mLCB1aW50NjRfdCBhZGRyKQoreworCWlmICghc25mKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhZGRyID49IHNuZi0+c2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlhZGRyICY9IH5zbmYtPmVyYXNlc2l6ZV9tYXNrOworCisJaWYgKHNuZi0+bmZpX3NvYy0+YmJtX3N3YXApCisJCXJldHVybiBtdGtfc25hbmRfYmxvY2tfaXNiYWRfc3RkKHNuZiwgYWRkcik7CisKKwlyZXR1cm4gbXRrX3NuYW5kX2Jsb2NrX2lzYmFkX210ayhzbmYsIGFkZHIpOworfQorCitzdGF0aWMgaW50IG10a19zbmFuZF9ibG9ja19tYXJrYmFkX3N0ZChzdHJ1Y3QgbXRrX3NuYW5kICpzbmYsIHVpbnQ2NF90IGFkZHIpCit7CisJLyogU3RhbmRhcmQgQkJNIHBvc2l0aW9uICovCisJbWVtc2V0KHNuZi0+YnVmX2NhY2hlLCAweGZmLCBzbmYtPm9vYnNpemUpOworCXNuZi0+YnVmX2NhY2hlWzBdID0gMDsKKworCXJldHVybiBtdGtfc25hbmRfZG9fd3JpdGVfcGFnZShzbmYsIGFkZHIsIE5VTEwsIHNuZi0+YnVmX2NhY2hlLCB0cnVlLAorCQkJCSAgICAgICBmYWxzZSk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX3NuYW5kX2Jsb2NrX21hcmtiYWRfbXRrKHN0cnVjdCBtdGtfc25hbmQgKnNuZiwgdWludDY0X3QgYWRkcikKK3sKKwkvKiBXcml0ZSB0aGUgd2hvbGUgcGFnZSB3aXRoIHplcm9zICovCisJbWVtc2V0KHNuZi0+YnVmX2NhY2hlLCAwLCBzbmYtPndyaXRlc2l6ZSArIHNuZi0+b29ic2l6ZSk7CisKKwlyZXR1cm4gbXRrX3NuYW5kX2RvX3dyaXRlX3BhZ2Uoc25mLCBhZGRyLCBzbmYtPmJ1Zl9jYWNoZSwKKwkJCQkgICAgICAgc25mLT5idWZfY2FjaGUgKyBzbmYtPndyaXRlc2l6ZSwgdHJ1ZSwKKwkJCQkgICAgICAgdHJ1ZSk7Cit9CisKK2ludCBtdGtfc25hbmRfYmxvY2tfbWFya2JhZChzdHJ1Y3QgbXRrX3NuYW5kICpzbmYsIHVpbnQ2NF90IGFkZHIpCit7CisJaWYgKCFzbmYpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGFkZHIgPj0gc25mLT5zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWFkZHIgJj0gfnNuZi0+ZXJhc2VzaXplX21hc2s7CisKKwlpZiAoc25mLT5uZmlfc29jLT5iYm1fc3dhcCkKKwkJcmV0dXJuIG10a19zbmFuZF9ibG9ja19tYXJrYmFkX3N0ZChzbmYsIGFkZHIpOworCisJcmV0dXJuIG10a19zbmFuZF9ibG9ja19tYXJrYmFkX210ayhzbmYsIGFkZHIpOworfQorCitpbnQgbXRrX3NuYW5kX2ZpbGxfb29iKHN0cnVjdCBtdGtfc25hbmQgKnNuZiwgdWludDhfdCAqb29icmF3LAorCQkgICAgICAgY29uc3QgdWludDhfdCAqb29iYnVmLCBzaXplX3Qgb29ibGVuKQoreworCXNpemVfdCBsZW4gPSBvb2JsZW4sIHNlY3RfZmRtX2xlbjsKKwljb25zdCB1aW50OF90ICpvb2IgPSBvb2JidWY7CisJdWludDMyX3Qgc3RlcCA9IDA7CisKKwlpZiAoIXNuZiB8fCAhb29icmF3IHx8ICFvb2IpCisJCXJldHVybiAtRUlOVkFMOworCisJd2hpbGUgKGxlbiAmJiBzdGVwIDwgc25mLT5lY2Nfc3RlcHMpIHsKKwkJc2VjdF9mZG1fbGVuID0gc25mLT5uZmlfc29jLT5mZG1fc2l6ZSAtIDE7CisJCWlmIChzZWN0X2ZkbV9sZW4gPiBsZW4pCisJCQlzZWN0X2ZkbV9sZW4gPSBsZW47CisKKwkJbWVtY3B5KG9vYnJhdyArIHN0ZXAgKiBzbmYtPm5maV9zb2MtPmZkbV9zaXplICsgMSwgb29iLAorCQkgICAgICAgc2VjdF9mZG1fbGVuKTsKKworCQlsZW4gLT0gc2VjdF9mZG1fbGVuOworCQlvb2IgKz0gc2VjdF9mZG1fbGVuOworCQlzdGVwKys7CisJfQorCisJcmV0dXJuIGxlbjsKK30KKworaW50IG10a19zbmFuZF90cmFuc2Zlcl9vb2Ioc3RydWN0IG10a19zbmFuZCAqc25mLCB1aW50OF90ICpvb2JidWYsCisJCQkgICBzaXplX3Qgb29ibGVuLCBjb25zdCB1aW50OF90ICpvb2JyYXcpCit7CisJc2l6ZV90IGxlbiA9IG9vYmxlbiwgc2VjdF9mZG1fbGVuOworCXVpbnQ4X3QgKm9vYiA9IG9vYmJ1ZjsKKwl1aW50MzJfdCBzdGVwID0gMDsKKworCWlmICghc25mIHx8ICFvb2JyYXcgfHwgIW9vYikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3aGlsZSAobGVuICYmIHN0ZXAgPCBzbmYtPmVjY19zdGVwcykgeworCQlzZWN0X2ZkbV9sZW4gPSBzbmYtPm5maV9zb2MtPmZkbV9zaXplIC0gMTsKKwkJaWYgKHNlY3RfZmRtX2xlbiA+IGxlbikKKwkJCXNlY3RfZmRtX2xlbiA9IGxlbjsKKworCQltZW1jcHkob29iLCBvb2JyYXcgKyBzdGVwICogc25mLT5uZmlfc29jLT5mZG1fc2l6ZSArIDEsCisJCSAgICAgICBzZWN0X2ZkbV9sZW4pOworCisJCWxlbiAtPSBzZWN0X2ZkbV9sZW47CisJCW9vYiArPSBzZWN0X2ZkbV9sZW47CisJCXN0ZXArKzsKKwl9CisKKwlyZXR1cm4gbGVuOworfQorCitpbnQgbXRrX3NuYW5kX3JlYWRfcGFnZV9hdXRvX29vYihzdHJ1Y3QgbXRrX3NuYW5kICpzbmYsIHVpbnQ2NF90IGFkZHIsCisJCQkJIHZvaWQgKmJ1Ziwgdm9pZCAqb29iLCBzaXplX3Qgb29ibGVuLAorCQkJCSBzaXplX3QgKmFjdHVhbG9vYmxlbiwgYm9vbCByYXcpCit7CisJaW50IHJldCwgb29icmVtYWluOworCisJaWYgKCFzbmYpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFvb2IpCisJCXJldHVybiBtdGtfc25hbmRfcmVhZF9wYWdlKHNuZiwgYWRkciwgYnVmLCBOVUxMLCByYXcpOworCisJcmV0ID0gbXRrX3NuYW5kX3JlYWRfcGFnZShzbmYsIGFkZHIsIGJ1Ziwgc25mLT5idWZfY2FjaGUsIHJhdyk7CisJaWYgKHJldCAmJiByZXQgIT0gLUVCQURNU0cpIHsKKwkJaWYgKGFjdHVhbG9vYmxlbikKKwkJCSphY3R1YWxvb2JsZW4gPSAwOworCQlyZXR1cm4gcmV0OworCX0KKworCW9vYnJlbWFpbiA9IG10a19zbmFuZF90cmFuc2Zlcl9vb2Ioc25mLCBvb2IsIG9vYmxlbiwgc25mLT5idWZfY2FjaGUpOworCWlmIChhY3R1YWxvb2JsZW4pCisJCSphY3R1YWxvb2JsZW4gPSBvb2JsZW4gLSBvb2JyZW1haW47CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgbXRrX3NuYW5kX3dyaXRlX3BhZ2VfYXV0b19vb2Ioc3RydWN0IG10a19zbmFuZCAqc25mLCB1aW50NjRfdCBhZGRyLAorCQkJCSAgY29uc3Qgdm9pZCAqYnVmLCBjb25zdCB2b2lkICpvb2IsCisJCQkJICBzaXplX3Qgb29ibGVuLCBzaXplX3QgKmFjdHVhbG9vYmxlbiwgYm9vbCByYXcpCit7CisJaW50IG9vYnJlbWFpbjsKKworCWlmICghc25mKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghb29iKQorCQlyZXR1cm4gbXRrX3NuYW5kX3dyaXRlX3BhZ2Uoc25mLCBhZGRyLCBidWYsIE5VTEwsIHJhdyk7CisKKwltZW1zZXQoc25mLT5idWZfY2FjaGUsIDB4ZmYsIHNuZi0+b29ic2l6ZSk7CisJb29icmVtYWluID0gbXRrX3NuYW5kX2ZpbGxfb29iKHNuZiwgc25mLT5idWZfY2FjaGUsIG9vYiwgb29ibGVuKTsKKwlpZiAoYWN0dWFsb29ibGVuKQorCQkqYWN0dWFsb29ibGVuID0gb29ibGVuIC0gb29icmVtYWluOworCisJcmV0dXJuIG10a19zbmFuZF93cml0ZV9wYWdlKHNuZiwgYWRkciwgYnVmLCBzbmYtPmJ1Zl9jYWNoZSwgcmF3KTsKK30KKworaW50IG10a19zbmFuZF9nZXRfY2hpcF9pbmZvKHN0cnVjdCBtdGtfc25hbmQgKnNuZiwKKwkJCSAgICBzdHJ1Y3QgbXRrX3NuYW5kX2NoaXBfaW5mbyAqaW5mbykKK3sKKwlpZiAoIXNuZiB8fCAhaW5mbykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpbmZvLT5tb2RlbCA9IHNuZi0+bW9kZWw7CisJaW5mby0+Y2hpcHNpemUgPSBzbmYtPnNpemU7CisJaW5mby0+YmxvY2tzaXplID0gc25mLT5lcmFzZXNpemU7CisJaW5mby0+cGFnZXNpemUgPSBzbmYtPndyaXRlc2l6ZTsKKwlpbmZvLT5zcGFyZXNpemUgPSBzbmYtPm9vYnNpemU7CisJaW5mby0+c3BhcmVfcGVyX3NlY3RvciA9IHNuZi0+c3BhcmVfcGVyX3NlY3RvcjsKKwlpbmZvLT5mZG1fc2l6ZSA9IHNuZi0+bmZpX3NvYy0+ZmRtX3NpemU7CisJaW5mby0+ZmRtX2VjY19zaXplID0gc25mLT5uZmlfc29jLT5mZG1fZWNjX3NpemU7CisJaW5mby0+bnVtX3NlY3RvcnMgPSBzbmYtPmVjY19zdGVwczsKKwlpbmZvLT5zZWN0b3Jfc2l6ZSA9IHNuZi0+bmZpX3NvYy0+c2VjdG9yX3NpemU7CisJaW5mby0+ZWNjX3N0cmVuZ3RoID0gc25mLT5lY2Nfc3RyZW5ndGg7CisJaW5mby0+ZWNjX2J5dGVzID0gc25mLT5lY2NfYnl0ZXM7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG10a19zbmFuZF9pcnFfcHJvY2VzcyhzdHJ1Y3QgbXRrX3NuYW5kICpzbmYpCit7CisJdWludDMyX3Qgc3RhLCBpZW47CisKKwlpZiAoIXNuZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdGEgPSBuZmlfcmVhZDMyKHNuZiwgTkZJX0lOVFJfU1RBKTsKKwlpZW4gPSBuZmlfcmVhZDMyKHNuZiwgTkZJX0lOVFJfRU4pOworCisJaWYgKCEoc3RhICYgaWVuKSkKKwkJcmV0dXJuIDA7CisKKwluZmlfd3JpdGUzMihzbmYsIE5GSV9JTlRSX0VOLCAwKTsKKwlpcnFfY29tcGxldGlvbl9kb25lKHNuZi0+cGRldik7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBtdGtfc25hbmRfc2VsZWN0X3NwYXJlX3Blcl9zZWN0b3Ioc3RydWN0IG10a19zbmFuZCAqc25mKQoreworCXVpbnQzMl90IHNwYXJlX3Blcl9zdGVwID0gc25mLT5vb2JzaXplIC8gc25mLT5lY2Nfc3RlcHM7CisJaW50IGksIG11bCA9IDE7CisKKwkvKgorCSAqIElmIHdlJ3JlIHVzaW5nIHRoZSAxS0Igc2VjdG9yIHNpemUsIEhXIHdpbGwgYXV0b21hdGljYWxseQorCSAqIGRvdWJsZSB0aGUgc3BhcmUgc2l6ZS4gU28gd2Ugc2hvdWxkIG9ubHkgdXNlIGhhbGYgb2YgdGhlIHZhbHVlLgorCSAqLworCWlmIChzbmYtPm5maV9zb2MtPnNlY3Rvcl9zaXplID09IDEwMjQpCisJCW11bCA9IDI7CisKKwlzcGFyZV9wZXJfc3RlcCAvPSBtdWw7CisKKwlmb3IgKGkgPSBzbmYtPm5maV9zb2MtPm51bV9zcGFyZV9zaXplIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJaWYgKHNuZi0+bmZpX3NvYy0+c3BhcmVfc2l6ZXNbaV0gPD0gc3BhcmVfcGVyX3N0ZXApIHsKKwkJCXNuZi0+c3BhcmVfcGVyX3NlY3RvciA9IHNuZi0+bmZpX3NvYy0+c3BhcmVfc2l6ZXNbaV07CisJCQlzbmYtPnNwYXJlX3Blcl9zZWN0b3IgKj0gbXVsOworCQkJcmV0dXJuIGk7CisJCX0KKwl9CisKKwlzbmFuZF9sb2dfbmZpKHNuZi0+cGRldiwKKwkJICAgICAgIlBhZ2Ugc2l6ZSAldSsldSBpcyBub3Qgc3VwcG9ydGVkXG4iLCBzbmYtPndyaXRlc2l6ZSwKKwkJICAgICAgc25mLT5vb2JzaXplKTsKKworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBtdGtfc25hbmRfcGFnZWZtdF9zZXR1cChzdHJ1Y3QgbXRrX3NuYW5kICpzbmYpCit7CisJdWludDMyX3Qgc3BhcmVfc2l6ZV9pZHgsIHNwYXJlX3NpemVfc2hpZnQsIHBhZ2VzaXplX2lkeDsKKwl1aW50MzJfdCBzZWN0b3Jfc2l6ZV81MTI7CisKKwlpZiAoc25mLT5uZmlfc29jLT5zZWN0b3Jfc2l6ZSA9PSA1MTIpIHsKKwkJc2VjdG9yX3NpemVfNTEyID0gTkZJX1NFQ19TRUxfNTEyOworCQlzcGFyZV9zaXplX3NoaWZ0ID0gTkZJX1NQQVJFX1NJWkVfUzsKKwl9IGVsc2UgeworCQlzZWN0b3Jfc2l6ZV81MTIgPSAwOworCQlzcGFyZV9zaXplX3NoaWZ0ID0gTkZJX1NQQVJFX1NJWkVfTFNfUzsKKwl9CisKKwlzd2l0Y2ggKHNuZi0+d3JpdGVzaXplKSB7CisJY2FzZSBTWl81MTI6CisJCXBhZ2VzaXplX2lkeCA9IE5GSV9QQUdFX1NJWkVfNTEyXzJLOworCQlicmVhazsKKwljYXNlIFNaXzJLOgorCQlpZiAoc25mLT5uZmlfc29jLT5zZWN0b3Jfc2l6ZSA9PSA1MTIpCisJCQlwYWdlc2l6ZV9pZHggPSBORklfUEFHRV9TSVpFXzJLXzRLOworCQllbHNlCisJCQlwYWdlc2l6ZV9pZHggPSBORklfUEFHRV9TSVpFXzUxMl8ySzsKKwkJYnJlYWs7CisJY2FzZSBTWl80SzoKKwkJaWYgKHNuZi0+bmZpX3NvYy0+c2VjdG9yX3NpemUgPT0gNTEyKQorCQkJcGFnZXNpemVfaWR4ID0gTkZJX1BBR0VfU0laRV80S184SzsKKwkJZWxzZQorCQkJcGFnZXNpemVfaWR4ID0gTkZJX1BBR0VfU0laRV8yS180SzsKKwkJYnJlYWs7CisJY2FzZSBTWl84SzoKKwkJaWYgKHNuZi0+bmZpX3NvYy0+c2VjdG9yX3NpemUgPT0gNTEyKQorCQkJcGFnZXNpemVfaWR4ID0gTkZJX1BBR0VfU0laRV84S18xNks7CisJCWVsc2UKKwkJCXBhZ2VzaXplX2lkeCA9IE5GSV9QQUdFX1NJWkVfNEtfOEs7CisJCWJyZWFrOworCWNhc2UgU1pfMTZLOgorCQlwYWdlc2l6ZV9pZHggPSBORklfUEFHRV9TSVpFXzhLXzE2SzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc25hbmRfbG9nX25maShzbmYtPnBkZXYsICJQYWdlIHNpemUgJXUgaXMgbm90IHN1cHBvcnRlZFxuIiwKKwkJCSAgICAgIHNuZi0+d3JpdGVzaXplKTsKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKwl9CisKKwlzcGFyZV9zaXplX2lkeCA9IG10a19zbmFuZF9zZWxlY3Rfc3BhcmVfcGVyX3NlY3RvcihzbmYpOworCWlmICh1bmxpa2VseShzcGFyZV9zaXplX2lkeCA8IDApKQorCQlyZXR1cm4gLUVOT1RTVVBQOworCisJc25mLT5yYXdfc2VjdG9yX3NpemUgPSBzbmYtPm5maV9zb2MtPnNlY3Rvcl9zaXplICsKKwkJCSAgICAgICBzbmYtPnNwYXJlX3Blcl9zZWN0b3I7CisKKwkvKiBTZXR1cCBwYWdlIGZvcm1hdCAqLworCW5maV93cml0ZTMyKHNuZiwgTkZJX1BBR0VGTVQsCisJCSAgICAoc25mLT5uZmlfc29jLT5mZG1fZWNjX3NpemUgPDwgTkZJX0ZETV9FQ0NfTlVNX1MpIHwKKwkJICAgIChzbmYtPm5maV9zb2MtPmZkbV9zaXplIDw8IE5GSV9GRE1fTlVNX1MpIHwKKwkJICAgIChzcGFyZV9zaXplX2lkeCA8PCBzcGFyZV9zaXplX3NoaWZ0KSB8CisJCSAgICAocGFnZXNpemVfaWR4IDw8IE5GSV9QQUdFX1NJWkVfUykgfAorCQkgICAgc2VjdG9yX3NpemVfNTEyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgZW51bSBzbmFuZF9mbGFzaF9pbyBtdGtfc25hbmRfc2VsZWN0X29wY29kZShzdHJ1Y3QgbXRrX3NuYW5kICpzbmYsCisJCQkJICAgdWludDMyX3Qgc25maV9jYXBzLCB1aW50OF90ICpvcGNvZGUsCisJCQkJICAgdWludDhfdCAqZHVtbXksCisJCQkJICAgY29uc3Qgc3RydWN0IHNuYW5kX2lvX2NhcCAqb3BfY2FwKQoreworCXVpbnQzMl90IGksIGNhcHM7CisKKwljYXBzID0gc25maV9jYXBzICYgb3BfY2FwLT5jYXBzOworCisJaSA9IGZscyhjYXBzKTsKKwlpZiAoaSA+IDApIHsKKwkJKm9wY29kZSA9IG9wX2NhcC0+b3Bjb2Rlc1tpIC0gMV0ub3Bjb2RlOworCQlpZiAoZHVtbXkpCisJCQkqZHVtbXkgPSBvcF9jYXAtPm9wY29kZXNbaSAtIDFdLmR1bW15OworCQlyZXR1cm4gaSAtIDE7CisJfQorCisJcmV0dXJuIF9fU05BTkRfSU9fTUFYOworfQorCitzdGF0aWMgaW50IG10a19zbmFuZF9zZWxlY3Rfb3Bjb2RlX3JmYyhzdHJ1Y3QgbXRrX3NuYW5kICpzbmYsCisJCQkJICAgICAgIHVpbnQzMl90IHNuZmlfY2FwcywKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IHNuYW5kX2lvX2NhcCAqb3BfY2FwKQoreworCWVudW0gc25hbmRfZmxhc2hfaW8gaWR4OworCisJc3RhdGljIGNvbnN0IHVpbnQ4X3QgcmZjX21vZGVzW19fU05BTkRfSU9fTUFYXSA9IHsKKwkJW1NOQU5EX0lPXzFfMV8xXSA9IERBVEFfUkVBRF9NT0RFX1gxLAorCQlbU05BTkRfSU9fMV8xXzJdID0gREFUQV9SRUFEX01PREVfWDIsCisJCVtTTkFORF9JT18xXzJfMl0gPSBEQVRBX1JFQURfTU9ERV9EVUFMLAorCQlbU05BTkRfSU9fMV8xXzRdID0gREFUQV9SRUFEX01PREVfWDQsCisJCVtTTkFORF9JT18xXzRfNF0gPSBEQVRBX1JFQURfTU9ERV9RVUFELAorCX07CisKKwlpZHggPSBtdGtfc25hbmRfc2VsZWN0X29wY29kZShzbmYsIHNuZmlfY2FwcywgJnNuZi0+b3Bjb2RlX3JmYywKKwkJCQkgICAgICAmc25mLT5kdW1teV9yZmMsIG9wX2NhcCk7CisJaWYgKGlkeCA+PSBfX1NOQU5EX0lPX01BWCkgeworCQlzbmFuZF9sb2dfc25maShzbmYtPnBkZXYsCisJCQkgICAgICAgIk5vIGNhcGFibGUgb3Bjb2RlIGZvciByZWFkIGZyb20gY2FjaGVcbiIpOworCQlyZXR1cm4gLUVOT1RTVVBQOworCX0KKworCXNuZi0+bW9kZV9yZmMgPSByZmNfbW9kZXNbaWR4XTsKKworCWlmIChpZHggPT0gU05BTkRfSU9fMV8xXzQgfHwgaWR4ID09IFNOQU5EX0lPXzFfNF80KQorCQlzbmYtPnF1YWRfc3BpX29wID0gdHJ1ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19zbmFuZF9zZWxlY3Rfb3Bjb2RlX3BsKHN0cnVjdCBtdGtfc25hbmQgKnNuZiwgdWludDMyX3Qgc25maV9jYXBzLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBzbmFuZF9pb19jYXAgKm9wX2NhcCkKK3sKKwllbnVtIHNuYW5kX2ZsYXNoX2lvIGlkeDsKKworCXN0YXRpYyBjb25zdCB1aW50OF90IHBsX21vZGVzW19fU05BTkRfSU9fTUFYXSA9IHsKKwkJW1NOQU5EX0lPXzFfMV8xXSA9IDAsCisJCVtTTkFORF9JT18xXzFfNF0gPSAxLAorCX07CisKKwlpZHggPSBtdGtfc25hbmRfc2VsZWN0X29wY29kZShzbmYsIHNuZmlfY2FwcywgJnNuZi0+b3Bjb2RlX3BsLAorCQkJCSAgICAgIE5VTEwsIG9wX2NhcCk7CisJaWYgKGlkeCA+PSBfX1NOQU5EX0lPX01BWCkgeworCQlzbmFuZF9sb2dfc25maShzbmYtPnBkZXYsCisJCQkgICAgICAgIk5vIGNhcGFibGUgb3Bjb2RlIGZvciBwcm9ncmFtIGxvYWRcbiIpOworCQlyZXR1cm4gLUVOT1RTVVBQOworCX0KKworCXNuZi0+bW9kZV9wbCA9IHBsX21vZGVzW2lkeF07CisKKwlpZiAoaWR4ID09IFNOQU5EX0lPXzFfMV80KQorCQlzbmYtPnF1YWRfc3BpX29wID0gdHJ1ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19zbmFuZF9zZXR1cChzdHJ1Y3QgbXRrX3NuYW5kICpzbmYsCisJCQkgICBjb25zdCBzdHJ1Y3Qgc25hbmRfZmxhc2hfaW5mbyAqc25hbmRfaW5mbykKK3sKKwljb25zdCBzdHJ1Y3Qgc25hbmRfbWVtX29yZyAqbWVtb3JnID0gJnNuYW5kX2luZm8tPm1lbW9yZzsKKwl1aW50MzJfdCBpLCBtc2dfc2l6ZSwgc25maV9jYXBzOworCWludCByZXQ7CisKKwkvKiBDYWxjdWxhdGUgZmxhc2ggbWVtb3J5IG9yZ2FuaXphdGlvbiAqLworCXNuZi0+bW9kZWwgPSBzbmFuZF9pbmZvLT5tb2RlbDsKKwlzbmYtPndyaXRlc2l6ZSA9IG1lbW9yZy0+cGFnZXNpemU7CisJc25mLT5vb2JzaXplID0gbWVtb3JnLT5zcGFyZXNpemU7CisJc25mLT5lcmFzZXNpemUgPSBzbmYtPndyaXRlc2l6ZSAqIG1lbW9yZy0+cGFnZXNfcGVyX2Jsb2NrOworCXNuZi0+ZGllX3NpemUgPSAodWludDY0X3Qpc25mLT5lcmFzZXNpemUgKiBtZW1vcmctPmJsb2Nrc19wZXJfZGllOworCXNuZi0+c2l6ZSA9IHNuZi0+ZGllX3NpemUgKiBtZW1vcmctPm5kaWVzOworCXNuZi0+bnVtX2RpZXMgPSBtZW1vcmctPm5kaWVzOworCisJc25mLT53cml0ZXNpemVfbWFzayA9IHNuZi0+d3JpdGVzaXplIC0gMTsKKwlzbmYtPmVyYXNlc2l6ZV9tYXNrID0gc25mLT5lcmFzZXNpemUgLSAxOworCXNuZi0+ZGllX21hc2sgPSBzbmYtPmRpZV9zaXplIC0gMTsKKworCXNuZi0+d3JpdGVzaXplX3NoaWZ0ID0gZmZzKHNuZi0+d3JpdGVzaXplKSAtIDE7CisJc25mLT5lcmFzZXNpemVfc2hpZnQgPSBmZnMoc25mLT5lcmFzZXNpemUpIC0gMTsKKwlzbmYtPmRpZV9zaGlmdCA9IG10a19zbmFuZF9mZnM2NChzbmYtPmRpZV9zaXplKSAtIDE7CisKKwlzbmYtPnNlbGVjdF9kaWUgPSBzbmFuZF9pbmZvLT5zZWxlY3RfZGllOworCisJLyogRGV0ZXJtaW5lIG9wY29kZXMgZm9yIHJlYWQgZnJvbSBjYWNoZS9wcm9ncmFtIGxvYWQgKi8KKwlzbmZpX2NhcHMgPSBTUElfSU9fMV8xXzEgfCBTUElfSU9fMV8xXzIgfCBTUElfSU9fMV8yXzI7CisJaWYgKHNuZi0+c25maV9xdWFkX3NwaSkKKwkJc25maV9jYXBzIHw9IFNQSV9JT18xXzFfNCB8IFNQSV9JT18xXzRfNDsKKworCXJldCA9IG10a19zbmFuZF9zZWxlY3Rfb3Bjb2RlX3JmYyhzbmYsIHNuZmlfY2Fwcywgc25hbmRfaW5mby0+Y2FwX3JkKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gbXRrX3NuYW5kX3NlbGVjdF9vcGNvZGVfcGwoc25mLCBzbmZpX2NhcHMsIHNuYW5kX2luZm8tPmNhcF9wbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIEVDQyBhbmQgcGFnZSBmb3JtYXQgKi8KKwlzbmYtPmVjY19zdGVwcyA9IHNuZi0+d3JpdGVzaXplIC8gc25mLT5uZmlfc29jLT5zZWN0b3Jfc2l6ZTsKKwlpZiAoc25mLT5lY2Nfc3RlcHMgPiBzbmYtPm5maV9zb2MtPm1heF9zZWN0b3JzKSB7CisJCXNuYW5kX2xvZ19uZmkoc25mLT5wZGV2LCAiUGFnZSBzaXplICV1IGlzIG5vdCBzdXBwb3J0ZWRcbiIsCisJCQkgICAgICBzbmYtPndyaXRlc2l6ZSk7CisJCXJldHVybiAtRU5PVFNVUFA7CisJfQorCisJcmV0ID0gbXRrX3NuYW5kX3BhZ2VmbXRfc2V0dXAoc25mKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbXNnX3NpemUgPSBzbmYtPm5maV9zb2MtPnNlY3Rvcl9zaXplICsgc25mLT5uZmlfc29jLT5mZG1fZWNjX3NpemU7CisJcmV0ID0gbXRrX2VjY19zZXR1cChzbmYsIHNuZi0+bmZpX2Jhc2UgKyBORklfRkRNMEwsCisJCQkgICAgc25mLT5zcGFyZV9wZXJfc2VjdG9yIC0gc25mLT5uZmlfc29jLT5mZG1fc2l6ZSwKKwkJCSAgICBtc2dfc2l6ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW5maV93cml0ZTE2KHNuZiwgTkZJX0NORkcsIDApOworCisJLyogVHVuaW5nIG9wdGlvbnMgKi8KKwluZmlfd3JpdGUxNihzbmYsIE5GSV9ERUJVR19DT04xLCBXQlVGX0VOKTsKKwluZmlfd3JpdGUzMihzbmYsIFNORl9ETFlfQ1RMMywgKHNuZi0+bmZpX3NvYy0+c2FtcGxlX2RlbGF5IDw8IFNGQ0tfU0FNX0RMWV9TKSk7CisKKwkvKiBJbnRlcnJ1cHRzICovCisJbmZpX3JlYWQzMihzbmYsIE5GSV9JTlRSX1NUQSk7CisJbmZpX3dyaXRlMzIoc25mLCBORklfSU5UUl9FTiwgMCk7CisKKwkvKiBDbGVhciBTTkYgZG9uZSBmbGFnICovCisJbmZpX3JtdzMyKHNuZiwgU05GX1NUQV9DVEwxLCAwLCBDVVNfUkVBRF9ET05FIHwgQ1VTX1BHX0RPTkUpOworCW5maV93cml0ZTMyKHNuZiwgU05GX1NUQV9DVEwxLCAwKTsKKworCS8qIEluaXRpYWxpemF0aW9uIG9uIGFsbCBkaWVzICovCisJZm9yIChpID0gMDsgaSA8IHNuZi0+bnVtX2RpZXM7IGkrKykgeworCQltdGtfc25hbmRfc2VsZWN0X2RpZShzbmYsIGkpOworCisJCS8qIERpc2FibGUgT24tRGllIEVDQyBlbmdpbmUgKi8KKwkJcmV0ID0gbXRrX3NuYW5kX29uZGllX2VjY19jb250cm9sKHNuZiwgZmFsc2UpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQkvKiBEaXNhYmxlIGJsb2NrIHByb3RlY3Rpb24gKi8KKwkJbXRrX3NuYW5kX3VubG9jayhzbmYpOworCisJCS8qIEVuYWJsZS9kaXNhYmxlIHF1YWQtc3BpICovCisJCW10a19zbmFuZF9xc3BpX2NvbnRyb2woc25mLCBzbmYtPnF1YWRfc3BpX29wKTsKKwl9CisKKwltdGtfc25hbmRfc2VsZWN0X2RpZShzbmYsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX3NuYW5kX2lkX3Byb2JlKHN0cnVjdCBtdGtfc25hbmQgKnNuZiwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBzbmFuZF9mbGFzaF9pbmZvICoqc25hbmRfaW5mbykKK3sKKwl1aW50OF90IGlkWzRdLCBvcFsyXTsKKwlpbnQgcmV0OworCisJLyogUmVhZCBTUEktTkFORCBKRURFQyBJRCwgT1AgKyBkdW1teS9hZGRyICsgSUQgKi8KKwlvcFswXSA9IFNOQU5EX0NNRF9SRUFESUQ7CisJb3BbMV0gPSAwOworCXJldCA9IG10a19zbmFuZF9tYWNfaW8oc25mLCBvcCwgMiwgaWQsIHNpemVvZihpZCkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkqc25hbmRfaW5mbyA9IHNuYW5kX2ZsYXNoX2lkX2xvb2t1cChTTkFORF9JRF9EWU1NWSwgaWQpOworCWlmICgqc25hbmRfaW5mbykKKwkJcmV0dXJuIDA7CisKKwkvKiBSZWFkIFNQSS1OQU5EIEpFREVDIElELCBPUCArIElEICovCisJb3BbMF0gPSBTTkFORF9DTURfUkVBRElEOworCXJldCA9IG10a19zbmFuZF9tYWNfaW8oc25mLCBvcCwgMSwgaWQsIHNpemVvZihpZCkpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkqc25hbmRfaW5mbyA9IHNuYW5kX2ZsYXNoX2lkX2xvb2t1cChTTkFORF9JRF9EWU1NWSwgaWQpOworCWlmICgqc25hbmRfaW5mbykKKwkJcmV0dXJuIDA7CisKKwlzbmFuZF9sb2dfY2hpcChzbmYtPnBkZXYsCisJCSAgICAgICAiVW5yZWNvZ25pemVkIFNQSS1OQU5EIElEOiAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAorCQkgICAgICAgaWRbMF0sIGlkWzFdLCBpZFsyXSwgaWRbM10pOworCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK2ludCBtdGtfc25hbmRfaW5pdCh2b2lkICpkZXYsIGNvbnN0IHN0cnVjdCBtdGtfc25hbmRfcGxhdGRhdGEgKnBkYXRhLAorCQkgICBzdHJ1Y3QgbXRrX3NuYW5kICoqcHNuZikKK3sKKwljb25zdCBzdHJ1Y3Qgc25hbmRfZmxhc2hfaW5mbyAqc25hbmRfaW5mbzsKKwl1aW50MzJfdCByYXdwYWdlX3NpemUsIHNlY3RfYmZfc2l6ZTsKKwlzdHJ1Y3QgbXRrX3NuYW5kIHRtcHNuZiwgKnNuZjsKKwlpbnQgcmV0OworCisJaWYgKCFwZGF0YSB8fCAhcHNuZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocGRhdGEtPnNvYyA+PSBfX1NOQU5EX1NPQ19NQVgpIHsKKwkJc25hbmRfbG9nX2NoaXAoZGV2LCAiSW52YWxpZCBTT0MgJXUgZm9yIE1USy1TTkFORFxuIiwKKwkJCSAgICAgICBwZGF0YS0+c29jKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogRHVtbXkgaW5zdGFuY2Ugb25seSBmb3IgaW5pdGlhbCByZXNldCBhbmQgaWQgcHJvYmUgKi8KKwl0bXBzbmYubmZpX2Jhc2UgPSBwZGF0YS0+bmZpX2Jhc2U7CisJdG1wc25mLmVjY19iYXNlID0gcGRhdGEtPmVjY19iYXNlOworCXRtcHNuZi5zb2MgPSBwZGF0YS0+c29jOworCXRtcHNuZi5uZmlfc29jID0gJm10a19zbmFuZF9zb2NzW3BkYXRhLT5zb2NdOworCXRtcHNuZi5wZGV2ID0gZGV2OworCisJLyogU3dpdGNoIHRvIFNORkkgbW9kZSAqLworCXdyaXRlbChTUElfTU9ERSwgdG1wc25mLm5maV9iYXNlICsgU05GX0NGRyk7CisKKwkvKiBSZXNldCBTTkZJICYgTkZJICovCisJbXRrX3NuYW5kX21hY19yZXNldCgmdG1wc25mKTsKKwltdGtfbmZpX3Jlc2V0KCZ0bXBzbmYpOworCisJLyogUmVzZXQgU1BJLU5BTkQgY2hpcCAqLworCXJldCA9IG10a19zbmFuZF9jaGlwX3Jlc2V0KCZ0bXBzbmYpOworCWlmIChyZXQpIHsKKwkJc25hbmRfbG9nX2NoaXAoZGV2LCAiRmFpbGVkIHRvIHJlc2V0IFNQSS1OQU5EIGNoaXBcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFByb2JlIFNQSS1OQU5EIGZsYXNoIGJ5IEpFREVDIElEICovCisJcmV0ID0gbXRrX3NuYW5kX2lkX3Byb2JlKCZ0bXBzbmYsICZzbmFuZF9pbmZvKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmF3cGFnZV9zaXplID0gc25hbmRfaW5mby0+bWVtb3JnLnBhZ2VzaXplICsKKwkJICAgICAgIHNuYW5kX2luZm8tPm1lbW9yZy5zcGFyZXNpemU7CisKKwlzZWN0X2JmX3NpemUgPSBtdGtfc25hbmRfc29jc1twZGF0YS0+c29jXS5tYXhfc2VjdG9ycyAqCisJCSAgICAgICBzaXplb2YoKnNuZi0+c2VjdF9iZik7CisKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIGluc3RhbmNlIGFuZCBjYWNoZSAqLworCXNuZiA9IGdlbmVyaWNfbWVtX2FsbG9jKGRldiwKKwkJCQlzaXplb2YoKnNuZikgKyByYXdwYWdlX3NpemUgKyBzZWN0X2JmX3NpemUpOworCWlmICghc25mKSB7CisJCXNuYW5kX2xvZ19jaGlwKGRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGluc3RhbmNlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc25mLT5zZWN0X2JmID0gKGludCAqKSgodWludHB0cl90KXNuZiArIHNpemVvZigqc25mKSk7CisJc25mLT5idWZfY2FjaGUgPSAodWludDhfdCAqKSgodWludHB0cl90KXNuZi0+c2VjdF9iZiArIHNlY3RfYmZfc2l6ZSk7CisKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIERNQSBidWZmZXIgKi8KKwlzbmYtPnBhZ2VfY2FjaGUgPSBkbWFfbWVtX2FsbG9jKGRldiwgcmF3cGFnZV9zaXplKTsKKwlpZiAoIXNuZi0+cGFnZV9jYWNoZSkgeworCQlnZW5lcmljX21lbV9mcmVlKGRldiwgc25mKTsKKwkJc25hbmRfbG9nX2NoaXAoZGV2LAorCQkJICAgICAgICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBETUEgYnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogRmlsbCB1cCBpbnN0YW5jZSAqLworCXNuZi0+cGRldiA9IGRldjsKKwlzbmYtPm5maV9iYXNlID0gcGRhdGEtPm5maV9iYXNlOworCXNuZi0+ZWNjX2Jhc2UgPSBwZGF0YS0+ZWNjX2Jhc2U7CisJc25mLT5zb2MgPSBwZGF0YS0+c29jOworCXNuZi0+bmZpX3NvYyA9ICZtdGtfc25hbmRfc29jc1twZGF0YS0+c29jXTsKKwlzbmYtPnNuZmlfcXVhZF9zcGkgPSBwZGF0YS0+cXVhZF9zcGk7CisKKwkvKiBJbml0aWFsaXplIFNORkkgJiBFQ0MgZW5naW5lICovCisJcmV0ID0gbXRrX3NuYW5kX3NldHVwKHNuZiwgc25hbmRfaW5mbyk7CisJaWYgKHJldCkgeworCQlkbWFfbWVtX2ZyZWUoZGV2LCBzbmYtPnBhZ2VfY2FjaGUpOworCQlnZW5lcmljX21lbV9mcmVlKGRldiwgc25mKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkqcHNuZiA9IHNuZjsKKworCXJldHVybiAwOworfQorCitpbnQgbXRrX3NuYW5kX2NsZWFudXAoc3RydWN0IG10a19zbmFuZCAqc25mKQoreworCWlmICghc25mKQorCQlyZXR1cm4gMDsKKworCWRtYV9tZW1fZnJlZShzbmYtPnBkZXYsIHNuZi0+cGFnZV9jYWNoZSk7CisJZ2VuZXJpY19tZW1fZnJlZShzbmYtPnBkZXYsIHNuZik7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9tdGQvbXRrLXNuYW5kL210ay1zbmFuZC5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL210ZC9tdGstc25hbmQvbXRrLXNuYW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgyZjgwYwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9tdGQvbXRrLXNuYW5kL210ay1zbmFuZC5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0zLUNsYXVzZSAqLworLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBNZWRpYVRlayBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogQXV0aG9yOiBXZWlqaWUgR2FvIDx3ZWlqaWUuZ2FvQG1lZGlhdGVrLmNvbT4KKyAqLworCisjaWZuZGVmIF9NVEtfU05BTkRfSF8KKyNkZWZpbmUgX01US19TTkFORF9IXworCisjaWZuZGVmIFBSSVZBVEVfTVRLX1NOQU5EX0hFQURFUgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNlbmRpZgorCitlbnVtIG10a19zbmFuZF9zb2MgeworCVNOQU5EX1NPQ19NVDc2MjIsCisJU05BTkRfU09DX01UNzYyOSwKKwlTTkFORF9TT0NfTVQ3OTg2LAorCisJX19TTkFORF9TT0NfTUFYCit9OworCitzdHJ1Y3QgbXRrX3NuYW5kX3BsYXRkYXRhIHsKKwl2b2lkICpuZmlfYmFzZTsKKwl2b2lkICplY2NfYmFzZTsKKwllbnVtIG10a19zbmFuZF9zb2Mgc29jOworCWJvb2wgcXVhZF9zcGk7Cit9OworCitzdHJ1Y3QgbXRrX3NuYW5kX2NoaXBfaW5mbyB7CisJY29uc3QgY2hhciAqbW9kZWw7CisJdWludDY0X3QgY2hpcHNpemU7CisJdWludDMyX3QgYmxvY2tzaXplOworCXVpbnQzMl90IHBhZ2VzaXplOworCXVpbnQzMl90IHNwYXJlc2l6ZTsKKwl1aW50MzJfdCBzcGFyZV9wZXJfc2VjdG9yOworCXVpbnQzMl90IGZkbV9zaXplOworCXVpbnQzMl90IGZkbV9lY2Nfc2l6ZTsKKwl1aW50MzJfdCBudW1fc2VjdG9yczsKKwl1aW50MzJfdCBzZWN0b3Jfc2l6ZTsKKwl1aW50MzJfdCBlY2Nfc3RyZW5ndGg7CisJdWludDMyX3QgZWNjX2J5dGVzOworfTsKKworc3RydWN0IG10a19zbmFuZDsKK3N0cnVjdCBzbmFuZF9mbGFzaF9pbmZvOworCitpbnQgbXRrX3NuYW5kX2luaXQodm9pZCAqZGV2LCBjb25zdCBzdHJ1Y3QgbXRrX3NuYW5kX3BsYXRkYXRhICpwZGF0YSwKKwkJICAgc3RydWN0IG10a19zbmFuZCAqKnBzbmYpOworaW50IG10a19zbmFuZF9jbGVhbnVwKHN0cnVjdCBtdGtfc25hbmQgKnNuZik7CisKK2ludCBtdGtfc25hbmRfY2hpcF9yZXNldChzdHJ1Y3QgbXRrX3NuYW5kICpzbmYpOworaW50IG10a19zbmFuZF9yZWFkX3BhZ2Uoc3RydWN0IG10a19zbmFuZCAqc25mLCB1aW50NjRfdCBhZGRyLCB2b2lkICpidWYsCisJCQl2b2lkICpvb2IsIGJvb2wgcmF3KTsKK2ludCBtdGtfc25hbmRfd3JpdGVfcGFnZShzdHJ1Y3QgbXRrX3NuYW5kICpzbmYsIHVpbnQ2NF90IGFkZHIsIGNvbnN0IHZvaWQgKmJ1ZiwKKwkJCSBjb25zdCB2b2lkICpvb2IsIGJvb2wgcmF3KTsKK2ludCBtdGtfc25hbmRfZXJhc2VfYmxvY2soc3RydWN0IG10a19zbmFuZCAqc25mLCB1aW50NjRfdCBhZGRyKTsKK2ludCBtdGtfc25hbmRfYmxvY2tfaXNiYWQoc3RydWN0IG10a19zbmFuZCAqc25mLCB1aW50NjRfdCBhZGRyKTsKK2ludCBtdGtfc25hbmRfYmxvY2tfbWFya2JhZChzdHJ1Y3QgbXRrX3NuYW5kICpzbmYsIHVpbnQ2NF90IGFkZHIpOworaW50IG10a19zbmFuZF9maWxsX29vYihzdHJ1Y3QgbXRrX3NuYW5kICpzbmYsIHVpbnQ4X3QgKm9vYnJhdywKKwkJICAgICAgIGNvbnN0IHVpbnQ4X3QgKm9vYmJ1Ziwgc2l6ZV90IG9vYmxlbik7CitpbnQgbXRrX3NuYW5kX3RyYW5zZmVyX29vYihzdHJ1Y3QgbXRrX3NuYW5kICpzbmYsIHVpbnQ4X3QgKm9vYmJ1ZiwKKwkJCSAgIHNpemVfdCBvb2JsZW4sIGNvbnN0IHVpbnQ4X3QgKm9vYnJhdyk7CitpbnQgbXRrX3NuYW5kX3JlYWRfcGFnZV9hdXRvX29vYihzdHJ1Y3QgbXRrX3NuYW5kICpzbmYsIHVpbnQ2NF90IGFkZHIsCisJCQkJIHZvaWQgKmJ1Ziwgdm9pZCAqb29iLCBzaXplX3Qgb29ibGVuLAorCQkJCSBzaXplX3QgKmFjdHVhbG9vYmxlbiwgYm9vbCByYXcpOworaW50IG10a19zbmFuZF93cml0ZV9wYWdlX2F1dG9fb29iKHN0cnVjdCBtdGtfc25hbmQgKnNuZiwgdWludDY0X3QgYWRkciwKKwkJCQkgIGNvbnN0IHZvaWQgKmJ1ZiwgY29uc3Qgdm9pZCAqb29iLAorCQkJCSAgc2l6ZV90IG9vYmxlbiwgc2l6ZV90ICphY3R1YWxvb2JsZW4sCisJCQkJICBib29sIHJhdyk7CitpbnQgbXRrX3NuYW5kX2dldF9jaGlwX2luZm8oc3RydWN0IG10a19zbmFuZCAqc25mLAorCQkJICAgIHN0cnVjdCBtdGtfc25hbmRfY2hpcF9pbmZvICppbmZvKTsKK2ludCBtdGtfc25hbmRfaXJxX3Byb2Nlc3Moc3RydWN0IG10a19zbmFuZCAqc25mKTsKKworI2VuZGlmIC8qIF9NVEtfU05BTkRfSF8gKi8KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvS2NvbmZpZyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MmU2YjM4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9LY29uZmlnCkBAIC0wLDAgKzEsMzEgQEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQorY29uZmlnIE5FVF9WRU5ET1JfTUVESUFURUsKKwlib29sICJNZWRpYVRlayBldGhlcm5ldCBkcml2ZXIiCisJZGVwZW5kcyBvbiBBUkNIX01FRElBVEVLIHx8IFNPQ19NVDc2MjEgfHwgU09DX01UNzYyMAorCS0tLWhlbHAtLS0KKwkgIElmIHlvdSBoYXZlIGEgTWVkaWF0ZWsgU29DIHdpdGggZXRoZXJuZXQsIHNheSBZLgorCitpZiBORVRfVkVORE9SX01FRElBVEVLCisKK2NvbmZpZyBORVRfTUVESUFURUtfU09DCisJdHJpc3RhdGUgIk1lZGlhVGVrIFNvQyBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnQiCisJc2VsZWN0IFBIWUxJTksKKwktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgZ2lnYWJpdCBldGhlcm5ldCBNQUNzIGluIHRoZQorCSAgTWVkaWFUZWsgU29DIGZhbWlseS4KKworY29uZmlnIE1FRElBVEVLX05FVFNZU19WMgorCXRyaXN0YXRlICJNZWRpYVRlayBFdGhlcm5ldCBORVRTWVMgVjIgc3VwcG9ydCIKKwkgZGVwZW5kcyBvbiBBUkNIX01FRElBVEVLICYmIE5FVF9NRURJQVRFS19TT0MKKwktLS1oZWxwLS0tCisJICBUaGlzIG9wdGlvbnMgZW5hYmxlIE1USyBFdGhlcm5ldCBORVRTWVMgVjIgc3VwcG9ydAorCitjb25maWcgTkVUX01FRElBVEVLX0hOQVQKKwl0cmlzdGF0ZSAiTWVkaWFUZWsgSFcgTkFUIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBORVRfTUVESUFURUtfU09DICYmIE5GX0NPTk5UUkFDSyAmJiBJUF9ORl9OQVQKKwktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgaGFyZHdhcmQgTmV0d29yayBBZGRyZXNzIFRyYW5zbGF0aW9uCisJICBpbiB0aGUgTWVkaWFUZWsgTVQ3OTg2L01UMjcwMS9NVDc2MjIvTVQ3NjI5L01UNzYyMSBjaGlwc2V0CisJICBmYW1pbHkuCisKK2VuZGlmICNORVRfVkVORE9SX01FRElBVEVLCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL01ha2VmaWxlIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMDQ2ZTczCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9NYWtlZmlsZQpAQCAtMCwwICsxLDggQEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQorIworIyBNYWtlZmlsZSBmb3IgdGhlIE1lZGlhdGVrIFNvQ3MgYnVpbHQtaW4gZXRoZXJuZXQgbWFjcworIworCitvYmotJChDT05GSUdfTkVUX01FRElBVEVLX1NPQykJCQkrPSBtdGtfZXRoLm8KK210a19ldGgteSA6PSBtdGtfZXRoX3NvYy5vIG10a19zZ21paS5vIG10a19ldGhfcGF0aC5vIG10a19ldGhfZGJnLm8KK29iai0kKENPTkZJR19ORVRfTUVESUFURUtfSE5BVCkJCQkrPSBtdGtfaG5hdC8KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9kYmcuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9kYmcuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NzQ0NDBkCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX2RiZy5jCkBAIC0wLDAgKzEsMTUyOSBAQAorLyoKKyAqICAgQ29weXJpZ2h0IChDKSAyMDE4IE1lZGlhVGVrIEluYy4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIENvcHlyaWdodCAoQykgMjAwOS0yMDE2IEpvaG4gQ3Jpc3BpbiA8YmxvZ2ljQG9wZW53cnQub3JnPgorICogICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNiBGZWxpeCBGaWV0a2F1IDxuYmRAb3BlbndydC5vcmc+CisgKiAgIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IE1pY2hhZWwgTGVlIDxpZ3Z0ZWVAZ21haWwuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC90cmFjZV9zZXEuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC91NjRfc3RhdHNfc3luYy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfbWRpby5oPgorCisjaW5jbHVkZSAibXRrX2V0aF9zb2MuaCIKKyNpbmNsdWRlICJtdGtfZXRoX2RiZy5oIgorCit1MzIgaHdfbHJvX2FnZ19udW1fY250W01US19IV19MUk9fUklOR19OVU1dW01US19IV19MUk9fTUFYX0FHR19DTlQgKyAxXTsKK3UzMiBod19scm9fYWdnX3NpemVfY250W01US19IV19MUk9fUklOR19OVU1dWzE2XTsKK3UzMiBod19scm9fdG90X2FnZ19jbnRbTVRLX0hXX0xST19SSU5HX05VTV07Cit1MzIgaHdfbHJvX3RvdF9mbHVzaF9jbnRbTVRLX0hXX0xST19SSU5HX05VTV07Cit1MzIgaHdfbHJvX2FnZ19mbHVzaF9jbnRbTVRLX0hXX0xST19SSU5HX05VTV07Cit1MzIgaHdfbHJvX2FnZV9mbHVzaF9jbnRbTVRLX0hXX0xST19SSU5HX05VTV07Cit1MzIgaHdfbHJvX3NlcV9mbHVzaF9jbnRbTVRLX0hXX0xST19SSU5HX05VTV07Cit1MzIgaHdfbHJvX3RpbWVzdGFtcF9mbHVzaF9jbnRbTVRLX0hXX0xST19SSU5HX05VTV07Cit1MzIgaHdfbHJvX25vcnVsZV9mbHVzaF9jbnRbTVRLX0hXX0xST19SSU5HX05VTV07Cit1MzIgbXRrX2h3bHJvX3N0YXRzX2VibDsKK3N0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfaHdfbHJvX3N0YXRzLCAqcHJvY19od19scm9fYXV0b190bGI7Cit0eXBlZGVmIGludCAoKm10a19scm9fZGJnX2Z1bmMpIChpbnQgcGFyKTsKKworc3RydWN0IG10a19ldGhfZGVidWcgeworICAgICAgICBzdHJ1Y3QgZGVudHJ5ICpyb290OworfTsKKworc3RydWN0IG10a19ldGggKmdfZXRoOworCitzdHJ1Y3QgbXRrX2V0aF9kZWJ1ZyBldGhfZGVidWc7CisKK3ZvaWQgbXQ3NTMwX21kaW9fdzMyKHN0cnVjdCBtdGtfZXRoICpldGgsIHUxNiByZWcsIHUzMiB2YWwpCit7CisJbXV0ZXhfbG9jaygmZXRoLT5taWlfYnVzLT5tZGlvX2xvY2spOworCisJX210a19tZGlvX3dyaXRlKGV0aCwgMHgxZiwgMHgxZiwgKHJlZyA+PiA2KSAmIDB4M2ZmKTsKKwlfbXRrX21kaW9fd3JpdGUoZXRoLCAweDFmLCAocmVnID4+IDIpICYgMHhmLCAgdmFsICYgMHhmZmZmKTsKKwlfbXRrX21kaW9fd3JpdGUoZXRoLCAweDFmLCAweDEwLCB2YWwgPj4gMTYpOworCisJbXV0ZXhfdW5sb2NrKCZldGgtPm1paV9idXMtPm1kaW9fbG9jayk7Cit9CisKK3UzMiBtdDc1MzBfbWRpb19yMzIoc3RydWN0IG10a19ldGggKmV0aCwgdTMyIHJlZykKK3sKKwl1MTYgaGlnaCwgbG93OworCisJbXV0ZXhfbG9jaygmZXRoLT5taWlfYnVzLT5tZGlvX2xvY2spOworCisJX210a19tZGlvX3dyaXRlKGV0aCwgMHgxZiwgMHgxZiwgKHJlZyA+PiA2KSAmIDB4M2ZmKTsKKwlsb3cgPSBfbXRrX21kaW9fcmVhZChldGgsIDB4MWYsIChyZWcgPj4gMikgJiAweGYpOworCWhpZ2ggPSBfbXRrX21kaW9fcmVhZChldGgsIDB4MWYsIDB4MTApOworCisJbXV0ZXhfdW5sb2NrKCZldGgtPm1paV9idXMtPm1kaW9fbG9jayk7CisKKwlyZXR1cm4gKGhpZ2ggPDwgMTYpIHwgKGxvdyAmIDB4ZmZmZik7Cit9CisKK3ZvaWQgbXRrX3N3aXRjaF93MzIoc3RydWN0IG10a19ldGggKmV0aCwgdTMyIHZhbCwgdW5zaWduZWQgcmVnKQoreworCW10a193MzIoZXRoLCB2YWwsIHJlZyArIDB4MTAwMDApOworfQorRVhQT1JUX1NZTUJPTChtdGtfc3dpdGNoX3czMik7CisKK3UzMiBtdGtfc3dpdGNoX3IzMihzdHJ1Y3QgbXRrX2V0aCAqZXRoLCB1bnNpZ25lZCByZWcpCit7CisJcmV0dXJuIG10a19yMzIoZXRoLCByZWcgKyAweDEwMDAwKTsKK30KK0VYUE9SVF9TWU1CT0wobXRrX3N3aXRjaF9yMzIpOworCitzdGF0aWMgaW50IG10a2V0aF9kZWJ1Z19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcHJpdmF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX2V0aCAqZXRoID0gbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgbXRrX21hYyAqbWFjID0gMDsKKwlpbnQgIGkgPSAwOworCisJZm9yIChpID0gMCA7IGkgPCBNVEtfTUFYX0RFVlMgOyBpKyspIHsKKwkJaWYgKCFldGgtPm1hY1tpXSB8fAorCQkgICAgb2ZfcGh5X2lzX2ZpeGVkX2xpbmsoZXRoLT5tYWNbaV0tPm9mX25vZGUpKQorCQkJY29udGludWU7CisJCW1hYyA9IGV0aC0+bWFjW2ldOworI2lmIDAgLy9GSVhNRQorCQl3aGlsZSAoaiA8IDMwKSB7CisJCQlkID0gIF9tdGtfbWRpb19yZWFkKGV0aCwgbWFjLT5waHlfZGV2LT5hZGRyLCBqKTsKKworCQkJc2VxX3ByaW50ZihtLCAicGh5PSVkLCByZWc9MHglMDh4LCBkYXRhPTB4JTA4eFxuIiwKKwkJCQkgICBtYWMtPnBoeV9kZXYtPmFkZHIsIGosIGQpOworCQkJaisrOworCQl9CisjZW5kaWYJCQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtldGhfZGVidWdfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgbXRrZXRoX2RlYnVnX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtdGtldGhfZGVidWdfZm9wcyA9IHsKKwkub3BlbiA9IG10a2V0aF9kZWJ1Z19vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBtdGtldGhfbXQ3NTMwc3dfZGVidWdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnByaXZhdGUpCit7CisJc3RydWN0IG10a19ldGggKmV0aCA9IG0tPnByaXZhdGU7CisJdTMyICBvZmZzZXQsIGRhdGE7CisJaW50IGk7CisJc3RydWN0IG10NzUzMF9yYW5nZXMgeworCQl1MzIgc3RhcnQ7CisJCXUzMiBlbmQ7CisJfSByYW5nZXNbXSA9IHsKKwkJezB4MCwgMHhhY30sCisJCXsweDEwMDAsIDB4MTBlMH0sCisJCXsweDExMDAsIDB4MTE0MH0sCisJCXsweDEyMDAsIDB4MTI0MH0sCisJCXsweDEzMDAsIDB4MTM0MH0sCisJCXsweDE0MDAsIDB4MTQ0MH0sCisJCXsweDE1MDAsIDB4MTU0MH0sCisJCXsweDE2MDAsIDB4MTY0MH0sCisJCXsweDE4MDAsIDB4MTg0OH0sCisJCXsweDE5MDAsIDB4MTk0OH0sCisJCXsweDFhMDAsIDB4MWE0OH0sCisJCXsweDFiMDAsIDB4MWI0OH0sCisJCXsweDFjMDAsIDB4MWM0OH0sCisJCXsweDFkMDAsIDB4MWQ0OH0sCisJCXsweDFlMDAsIDB4MWU0OH0sCisJCXsweDFmNjAsIDB4MWZmY30sCisJCXsweDIwMDAsIDB4MjEyY30sCisJCXsweDIyMDAsIDB4MjIyY30sCisJCXsweDIzMDAsIDB4MjMyY30sCisJCXsweDI0MDAsIDB4MjQyY30sCisJCXsweDI1MDAsIDB4MjUyY30sCisJCXsweDI2MDAsIDB4MjYyY30sCisJCXsweDMwMDAsIDB4MzAxNH0sCisJCXsweDMwYzAsIDB4MzBmOH0sCisJCXsweDMxMDAsIDB4MzExNH0sCisJCXsweDMyMDAsIDB4MzIxNH0sCisJCXsweDMzMDAsIDB4MzMxNH0sCisJCXsweDM0MDAsIDB4MzQxNH0sCisJCXsweDM1MDAsIDB4MzUxNH0sCisJCXsweDM2MDAsIDB4MzYxNH0sCisJCXsweDQwMDAsIDB4NDBkNH0sCisJCXsweDQxMDAsIDB4NDFkNH0sCisJCXsweDQyMDAsIDB4NDJkNH0sCisJCXsweDQzMDAsIDB4NDNkNH0sCisJCXsweDQ0MDAsIDB4NDRkNH0sCisJCXsweDQ1MDAsIDB4NDVkNH0sCisJCXsweDQ2MDAsIDB4NDZkNH0sCisJCXsweDRmMDAsIDB4NDYxY30sCisJCXsweDcwMDAsIDB4NzAzOH0sCisJCXsweDcxMjAsIDB4NzEyNH0sCisJCXsweDc4MDAsIDB4NzgwNH0sCisJCXsweDc4MTAsIDB4NzgxMH0sCisJCXsweDc4MzAsIDB4NzgzMH0sCisJCXsweDdhMDAsIDB4N2E3Y30sCisJCXsweDdiMDAsIDB4N2IwNH0sCisJCXsweDdlMDAsIDB4N2UwNH0sCisJCXsweDdmZmMsIDB4N2ZmY30sCisJfTsKKworCWlmICghbXQ3NTMwX2V4aXN0KGV0aCkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmICgoIWV0aC0+bWFjWzBdIHx8ICFvZl9waHlfaXNfZml4ZWRfbGluayhldGgtPm1hY1swXS0+b2Zfbm9kZSkpICYmCisJICAgICghZXRoLT5tYWNbMV0gfHwgIW9mX3BoeV9pc19maXhlZF9saW5rKGV0aC0+bWFjWzFdLT5vZl9ub2RlKSkpIHsKKwkJc2VxX3B1dHMobSwgIm5vIHN3aXRjaCBmb3VuZFxuIik7CisJCXJldHVybiAwOworCX0KKworCWZvciAoaSA9IDAgOyBpIDwgQVJSQVlfU0laRShyYW5nZXMpIDsgaSsrKSB7CisJCWZvciAob2Zmc2V0ID0gcmFuZ2VzW2ldLnN0YXJ0OworCQkgICAgIG9mZnNldCA8PSByYW5nZXNbaV0uZW5kOyBvZmZzZXQgKz0gNCkgeworCQkJZGF0YSA9ICBtdDc1MzBfbWRpb19yMzIoZXRoLCBvZmZzZXQpOworCQkJc2VxX3ByaW50ZihtLCAibXQ3NTMwIHN3aXRjaCByZWc9MHglMDh4LCBkYXRhPTB4JTA4eFxuIiwKKwkJCQkgICBvZmZzZXQsIGRhdGEpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrZXRoX2RlYnVnX210NzUzMHN3X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIG10a2V0aF9tdDc1MzBzd19kZWJ1Z19zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbXRrZXRoX2RlYnVnX210NzUzMHN3X2ZvcHMgPSB7CisJLm9wZW4gPSBtdGtldGhfZGVidWdfbXQ3NTMwc3dfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBzc2l6ZV90IG10a2V0aF9tdDc1MzBzd19kZWJ1Z2ZzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgICAgIGNvbnN0IGNoYXIgX191c2VyICpwdHIsCisJCQkJCSAgICAgc2l6ZV90IGxlbiwgbG9mZl90ICpvZmYpCit7CisJc3RydWN0IG10a19ldGggKmV0aCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1ZlszMl0sICp0b2tlbiwgKnAgPSBidWY7CisJdTMyIHJlZywgdmFsdWUsIHBoeTsKKwlpbnQgcmV0OworCisJaWYgKCFtdDc1MzBfZXhpc3QoZXRoKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKCpvZmYgIT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAobGVuID4gc2l6ZW9mKGJ1ZikgLSAxKQorCQlsZW4gPSBzaXplb2YoYnVmKSAtIDE7CisKKwlyZXQgPSBzdHJuY3B5X2Zyb21fdXNlcihidWYsIHB0ciwgbGVuKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlidWZbbGVuXSA9ICdcMCc7CisKKwl0b2tlbiA9IHN0cnNlcCgmcCwgIiAiKTsKKwlpZiAoIXRva2VuKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoa3N0cnRvdWwodG9rZW4sIDE2LCAodW5zaWduZWQgbG9uZyAqKSZwaHkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXRva2VuID0gc3Ryc2VwKCZwLCAiICIpOworCWlmICghdG9rZW4pCisJCXJldHVybiAtRUlOVkFMOworCWlmIChrc3RydG91bCh0b2tlbiwgMTYsICh1bnNpZ25lZCBsb25nICopJnJlZykpCisJCXJldHVybiAtRUlOVkFMOworCisJdG9rZW4gPSBzdHJzZXAoJnAsICIgIik7CisJaWYgKCF0b2tlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGtzdHJ0b3VsKHRva2VuLCAxNiwgKHVuc2lnbmVkIGxvbmcgKikmdmFsdWUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByX2luZm8oIiVzOnBoeT0lZCwgcmVnPTB4JXgsIHZhbD0weCV4XG4iLCBfX2Z1bmNfXywKKwkJMHgxZiwgcmVnLCB2YWx1ZSk7CisJbXQ3NTMwX21kaW9fdzMyKGV0aCwgcmVnLCB2YWx1ZSk7CisJcHJfaW5mbygiJXM6cGh5PSVkLCByZWc9MHgleCwgdmFsPTB4JXggY29uZmlybS4uXG4iLCBfX2Z1bmNfXywKKwkJMHgxZiwgcmVnLCBtdDc1MzBfbWRpb19yMzIoZXRoLCByZWcpKTsKKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBzc2l6ZV90IG10a2V0aF9kZWJ1Z2ZzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqcHRyLAorCQkJCSAgICBzaXplX3QgbGVuLCBsb2ZmX3QgKm9mZikKK3sKKwlzdHJ1Y3QgbXRrX2V0aCAqZXRoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzMyXSwgKnRva2VuLCAqcCA9IGJ1ZjsKKwl1MzIgcmVnLCB2YWx1ZSwgcGh5OworCWludCByZXQ7CisKKwlpZiAoKm9mZiAhPSAwKQorCQlyZXR1cm4gMDsKKworCWlmIChsZW4gPiBzaXplb2YoYnVmKSAtIDEpCisJCWxlbiA9IHNpemVvZihidWYpIC0gMTsKKworCXJldCA9IHN0cm5jcHlfZnJvbV91c2VyKGJ1ZiwgcHRyLCBsZW4pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWJ1ZltsZW5dID0gJ1wwJzsKKworCXRva2VuID0gc3Ryc2VwKCZwLCAiICIpOworCWlmICghdG9rZW4pCisJCXJldHVybiAtRUlOVkFMOworCWlmIChrc3RydG91bCh0b2tlbiwgMTYsICh1bnNpZ25lZCBsb25nICopJnBoeSkpCisJCXJldHVybiAtRUlOVkFMOworCisJdG9rZW4gPSBzdHJzZXAoJnAsICIgIik7CisKKwlpZiAoIXRva2VuKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoa3N0cnRvdWwodG9rZW4sIDE2LCAodW5zaWduZWQgbG9uZyAqKSZyZWcpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXRva2VuID0gc3Ryc2VwKCZwLCAiICIpOworCisJaWYgKCF0b2tlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGtzdHJ0b3VsKHRva2VuLCAxNiwgKHVuc2lnbmVkIGxvbmcgKikmdmFsdWUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByX2luZm8oIiVzOnBoeT0lZCwgcmVnPTB4JXgsIHZhbD0weCV4XG4iLCBfX2Z1bmNfXywKKwkJcGh5LCByZWcsIHZhbHVlKTsKKworCV9tdGtfbWRpb193cml0ZShldGgsIHBoeSwgIHJlZywgdmFsdWUpOworCisJcHJfaW5mbygiJXM6cGh5PSVkLCByZWc9MHgleCwgdmFsPTB4JXggY29uZmlybS4uXG4iLCBfX2Z1bmNfXywKKwkJcGh5LCByZWcsIF9tdGtfbWRpb19yZWFkKGV0aCwgcGh5LCByZWcpKTsKKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBzc2l6ZV90IG10a2V0aF9kZWJ1Z2ZzX3Jlc2V0KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqcHRyLAorCQkJCSAgICBzaXplX3QgbGVuLCBsb2ZmX3QgKm9mZikKK3sKKwlzdHJ1Y3QgbXRrX2V0aCAqZXRoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJc2NoZWR1bGVfd29yaygmZXRoLT5wZW5kaW5nX3dvcmspOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfcmVnX3cgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBzaW1wbGVfb3BlbiwKKwkud3JpdGUgPSBtdGtldGhfZGVidWdmc193cml0ZSwKKwkubGxzZWVrID0gbm9vcF9sbHNlZWssCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX2V0aF9yZXNldCA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IHNpbXBsZV9vcGVuLAorCS53cml0ZSA9IG10a2V0aF9kZWJ1Z2ZzX3Jlc2V0LAorCS5sbHNlZWsgPSBub29wX2xsc2VlaywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfbXQ3NTMwc3dfcmVnX3cgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBzaW1wbGVfb3BlbiwKKwkud3JpdGUgPSBtdGtldGhfbXQ3NTMwc3dfZGVidWdmc193cml0ZSwKKwkubGxzZWVrID0gbm9vcF9sbHNlZWssCit9OworCit2b2lkIG10a2V0aF9kZWJ1Z2ZzX2V4aXQoc3RydWN0IG10a19ldGggKmV0aCkKK3sKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoZXRoX2RlYnVnLnJvb3QpOworfQorCitpbnQgbXRrZXRoX2RlYnVnZnNfaW5pdChzdHJ1Y3QgbXRrX2V0aCAqZXRoKQoreworCWludCByZXQgPSAwOworCisJZXRoX2RlYnVnLnJvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoIm10a2V0aCIsIE5VTEwpOworCWlmICghZXRoX2RlYnVnLnJvb3QpIHsKKwkJZGV2X25vdGljZShldGgtPmRldiwgIiVzOmVyciBhdCAlZFxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKwkJcmV0ID0gLUVOT01FTTsKKwl9CisKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJwaHlfcmVncyIsIFNfSVJVR08sCisJCQkgICAgZXRoX2RlYnVnLnJvb3QsIGV0aCwgJm10a2V0aF9kZWJ1Z19mb3BzKTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJwaHlfcmVnX3ciLCBTX0lGUkVHIHwgU19JV1VTUiwKKwkJCSAgICBldGhfZGVidWcucm9vdCwgZXRoLCAgJmZvcHNfcmVnX3cpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInJlc2V0IiwgU19JRlJFRyB8IFNfSVdVU1IsCisJCQkgICAgZXRoX2RlYnVnLnJvb3QsIGV0aCwgICZmb3BzX2V0aF9yZXNldCk7CisJaWYgKG10NzUzMF9leGlzdChldGgpKSB7CisJCWRlYnVnZnNfY3JlYXRlX2ZpbGUoIm10NzUzMHN3X3JlZ3MiLCBTX0lSVUdPLAorCQkJCSAgICBldGhfZGVidWcucm9vdCwgZXRoLAorCQkJCSAgICAmbXRrZXRoX2RlYnVnX210NzUzMHN3X2ZvcHMpOworCQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJtdDc1MzBzd19yZWdfdyIsIFNfSUZSRUcgfCBTX0lXVVNSLAorCQkJCSAgICBldGhfZGVidWcucm9vdCwgZXRoLAorCQkJCSAgICAmZm9wc19tdDc1MzBzd19yZWdfdyk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgbWlpX21ncl9yZWFkX2NvbWJpbmUoc3RydWN0IG10a19ldGggKmV0aCwgdTMyIHBoeV9hZGRyLCB1MzIgcGh5X3JlZ2lzdGVyLAorCQkJICB1MzIgKnJlYWRfZGF0YSkKK3sKKwlpZiAobXQ3NTMwX2V4aXN0KGV0aCkgJiYgcGh5X2FkZHIgPT0gMzEpCisJCSpyZWFkX2RhdGEgPSBtdDc1MzBfbWRpb19yMzIoZXRoLCBwaHlfcmVnaXN0ZXIpOworCisJZWxzZQorCQkqcmVhZF9kYXRhID0gX210a19tZGlvX3JlYWQoZXRoLCBwaHlfYWRkciwgcGh5X3JlZ2lzdGVyKTsKK30KKwordm9pZCBtaWlfbWdyX3dyaXRlX2NvbWJpbmUoc3RydWN0IG10a19ldGggKmV0aCwgdTE2IHBoeV9hZGRyLCB1MTYgcGh5X3JlZ2lzdGVyLAorCQkJICAgdTMyIHdyaXRlX2RhdGEpCit7CisJaWYgKG10NzUzMF9leGlzdChldGgpICYmIHBoeV9hZGRyID09IDMxKQorCQltdDc1MzBfbWRpb193MzIoZXRoLCBwaHlfcmVnaXN0ZXIsIHdyaXRlX2RhdGEpOworCisJZWxzZQorCQlfbXRrX21kaW9fd3JpdGUoZXRoLCBwaHlfYWRkciwgcGh5X3JlZ2lzdGVyLCB3cml0ZV9kYXRhKTsKK30KKworc3RhdGljIHZvaWQgbWlpX21ncl9yZWFkX2NsNDUoc3RydWN0IG10a19ldGggKmV0aCwgdTE2IHBvcnQsIHUxNiBkZXZhZCwgdTE2IHJlZywgdTE2ICpkYXRhKQoreworCW10a19jbDQ1X2luZF9yZWFkKGV0aCwgcG9ydCwgZGV2YWQsIHJlZywgZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIG1paV9tZ3Jfd3JpdGVfY2w0NShzdHJ1Y3QgbXRrX2V0aCAqZXRoLCB1MTYgcG9ydCwgdTE2IGRldmFkLCB1MTYgcmVnLCB1MTYgZGF0YSkKK3sKKwltdGtfY2w0NV9pbmRfd3JpdGUoZXRoLCBwb3J0LCBkZXZhZCwgcmVnLCBkYXRhKTsKK30KKworaW50IG10a19kb19wcml2X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKQoreworCXN0cnVjdCBtdGtfbWFjICptYWMgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBtdGtfZXRoICpldGggPSBtYWMtPmh3OworCXN0cnVjdCBtdGtfbWlpX2lvY3RsX2RhdGEgbWlpOworCXN0cnVjdCBtdGtfZXN3X3JlZyByZWc7CisJdTE2IHZhbDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBNVEtFVEhfTUlJX1JFQUQ6CisJCWlmIChjb3B5X2Zyb21fdXNlcigmbWlpLCBpZnItPmlmcl9kYXRhLCBzaXplb2YobWlpKSkpCisJCQlnb3RvIGVycl9jb3B5OworCQltaWlfbWdyX3JlYWRfY29tYmluZShldGgsIG1paS5waHlfaWQsIG1paS5yZWdfbnVtLAorCQkJCSAgICAgJm1paS52YWxfb3V0KTsKKwkJaWYgKGNvcHlfdG9fdXNlcihpZnItPmlmcl9kYXRhLCAmbWlpLCBzaXplb2YobWlpKSkpCisJCQlnb3RvIGVycl9jb3B5OworCisJCXJldHVybiAwOworCWNhc2UgTVRLRVRIX01JSV9XUklURToKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZtaWksIGlmci0+aWZyX2RhdGEsIHNpemVvZihtaWkpKSkKKwkJCWdvdG8gZXJyX2NvcHk7CisJCW1paV9tZ3Jfd3JpdGVfY29tYmluZShldGgsIG1paS5waHlfaWQsIG1paS5yZWdfbnVtLAorCQkJCSAgICAgIG1paS52YWxfaW4pOworCQlyZXR1cm4gMDsKKwljYXNlIE1US0VUSF9NSUlfUkVBRF9DTDQ1OgorCQlpZiAoY29weV9mcm9tX3VzZXIoJm1paSwgaWZyLT5pZnJfZGF0YSwgc2l6ZW9mKG1paSkpKQorCQkJZ290byBlcnJfY29weTsKKwkJbWlpX21ncl9yZWFkX2NsNDUoZXRoLAorCQkJCSAgbWRpb19waHlfaWRfcHJ0YWQobWlpLnBoeV9pZCksCisJCQkJICBtZGlvX3BoeV9pZF9kZXZhZChtaWkucGh5X2lkKSwKKwkJCQkgIG1paS5yZWdfbnVtLAorCQkJCSAgJnZhbCk7CisJCW1paS52YWxfb3V0ID0gdmFsOworCQlpZiAoY29weV90b191c2VyKGlmci0+aWZyX2RhdGEsICZtaWksIHNpemVvZihtaWkpKSkKKwkJCWdvdG8gZXJyX2NvcHk7CisKKwkJcmV0dXJuIDA7CisJY2FzZSBNVEtFVEhfTUlJX1dSSVRFX0NMNDU6CisJCWlmIChjb3B5X2Zyb21fdXNlcigmbWlpLCBpZnItPmlmcl9kYXRhLCBzaXplb2YobWlpKSkpCisJCQlnb3RvIGVycl9jb3B5OworCQl2YWwgPSBtaWkudmFsX2luOworCQltaWlfbWdyX3dyaXRlX2NsNDUoZXRoLAorCQkJCSAgbWRpb19waHlfaWRfcHJ0YWQobWlpLnBoeV9pZCksCisJCQkJICBtZGlvX3BoeV9pZF9kZXZhZChtaWkucGh5X2lkKSwKKwkJCQkgIG1paS5yZWdfbnVtLAorCQkJCSAgdmFsKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBNVEtFVEhfRVNXX1JFR19SRUFEOgorCQlpZiAoIW10NzUzMF9leGlzdChldGgpKQorCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCQlpZiAoY29weV9mcm9tX3VzZXIoJnJlZywgaWZyLT5pZnJfZGF0YSwgc2l6ZW9mKHJlZykpKQorCQkJZ290byBlcnJfY29weTsKKwkJaWYgKHJlZy5vZmYgPiBSRUdfRVNXX01BWCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlyZWcudmFsID0gbXRrX3N3aXRjaF9yMzIoZXRoLCByZWcub2ZmKTsKKworCQlpZiAoY29weV90b191c2VyKGlmci0+aWZyX2RhdGEsICZyZWcsIHNpemVvZihyZWcpKSkKKwkJCWdvdG8gZXJyX2NvcHk7CisKKwkJcmV0dXJuIDA7CisJY2FzZSBNVEtFVEhfRVNXX1JFR19XUklURToKKwkJaWYgKCFtdDc1MzBfZXhpc3QoZXRoKSkKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZyZWcsIGlmci0+aWZyX2RhdGEsIHNpemVvZihyZWcpKSkKKwkJCWdvdG8gZXJyX2NvcHk7CisJCWlmIChyZWcub2ZmID4gUkVHX0VTV19NQVgpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJbXRrX3N3aXRjaF93MzIoZXRoLCByZWcudmFsLCByZWcub2ZmKTsKKworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gLUVPUE5PVFNVUFA7CitlcnJfY29weToKKwlyZXR1cm4gLUVGQVVMVDsKK30KKworaW50IGVzd19jbnRfcmVhZChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKKwl1bnNpZ25lZCBpbnQgcGt0X2NudCA9IDA7CisJaW50IGkgPSAwOworCXN0cnVjdCBtdGtfZXRoICpldGggPSBnX2V0aDsKKwl1bnNpZ25lZCBpbnQgbWliX2Jhc2UgPSBNVEtfR0RNMV9UWF9HQkNOVDsKKworCXNlcV9wdXRzKHNlcSwgIlxuCQkgIDw8Q1BVPj5cbiIpOworCXNlcV9wdXRzKHNlcSwgIgkJICAgIHxcbiIpOworCXNlcV9wdXRzKHNlcSwgIistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiIpOworCXNlcV9wdXRzKHNlcSwgInwJCSAgPDxQU0U+PgkJICAgICAgICB8XG4iKTsKKwlzZXFfcHV0cyhzZXEsICIrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4iKTsKKwlzZXFfcHV0cyhzZXEsICIJCSAgIHxcbiIpOworCXNlcV9wdXRzKHNlcSwgIistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiIpOworCXNlcV9wdXRzKHNlcSwgInwJCSAgPDxHRE1BPj4JCSAgICAgICAgfFxuIik7CisJc2VxX3ByaW50ZihzZXEsICJ8IEdETUExX1JYX0dCQ05UICA6ICUwMTB1IChSeCBHb29kIEJ5dGVzKQl8XG4iLAorCQkgICBtdGtfcjMyKGV0aCwgbWliX2Jhc2UpKTsKKwlzZXFfcHJpbnRmKHNlcSwgInwgR0RNQTFfUlhfR1BDTlQgIDogJTAxMHUgKFJ4IEdvb2QgUGt0cykJfFxuIiwKKwkJICAgbXRrX3IzMihldGgsIG1pYl9iYXNlKzB4MDgpKTsKKwlzZXFfcHJpbnRmKHNlcSwgInwgR0RNQTFfUlhfT0VSQ05UIDogJTAxMHUgKG92ZXJmbG93IGVycm9yKQl8XG4iLAorCQkgICBtdGtfcjMyKGV0aCwgbWliX2Jhc2UrMHgxMCkpOworCXNlcV9wcmludGYoc2VxLCAifCBHRE1BMV9SWF9GRVJDTlQgOiAlMDEwdSAoRkNTIGVycm9yKQl8XG4iLAorCQkgICBtdGtfcjMyKGV0aCwgbWliX2Jhc2UrMHgxNCkpOworCXNlcV9wcmludGYoc2VxLCAifCBHRE1BMV9SWF9TRVJDTlQgOiAlMDEwdSAodG9vIHNob3J0KQl8XG4iLAorCQkgICBtdGtfcjMyKGV0aCwgbWliX2Jhc2UrMHgxOCkpOworCXNlcV9wcmludGYoc2VxLCAifCBHRE1BMV9SWF9MRVJDTlQgOiAlMDEwdSAodG9vIGxvbmcpCXxcbiIsCisJCSAgIG10a19yMzIoZXRoLCBtaWJfYmFzZSsweDFDKSk7CisJc2VxX3ByaW50ZihzZXEsICJ8IEdETUExX1JYX0NFUkNOVCA6ICUwMTB1IChjaGVja3N1bSBlcnJvcikJfFxuIiwKKwkJICAgbXRrX3IzMihldGgsIG1pYl9iYXNlKzB4MjApKTsKKwlzZXFfcHJpbnRmKHNlcSwgInwgR0RNQTFfUlhfRkNDTlQgIDogJTAxMHUgKGZsb3cgY29udHJvbCkJfFxuIiwKKwkJICAgbXRrX3IzMihldGgsIG1pYl9iYXNlKzB4MjQpKTsKKwlzZXFfcHJpbnRmKHNlcSwgInwgR0RNQTFfVFhfU0tJUENOVDogJTAxMHUgKGFib3V0IGNvdW50KQl8XG4iLAorCQkgICBtdGtfcjMyKGV0aCwgbWliX2Jhc2UrMHgyOCkpOworCXNlcV9wcmludGYoc2VxLCAifCBHRE1BMV9UWF9DT0xDTlQgOiAlMDEwdSAoY29sbGlzaW9uIGNvdW50KQl8XG4iLAorCQkgICBtdGtfcjMyKGV0aCwgbWliX2Jhc2UrMHgyQykpOworCXNlcV9wcmludGYoc2VxLCAifCBHRE1BMV9UWF9HQkNOVCAgOiAlMDEwdSAoVHggR29vZCBCeXRlcykJfFxuIiwKKwkJICAgbXRrX3IzMihldGgsIG1pYl9iYXNlKzB4MzApKTsKKwlzZXFfcHJpbnRmKHNlcSwgInwgR0RNQTFfVFhfR1BDTlQgIDogJTAxMHUgKFR4IEdvb2QgUGt0cykJfFxuIiwKKwkJICAgbXRrX3IzMihldGgsIG1pYl9iYXNlKzB4MzgpKTsKKwlzZXFfcHV0cyhzZXEsICJ8CQkJCQkJfFxuIik7CisJc2VxX3ByaW50ZihzZXEsICJ8IEdETUEyX1JYX0dCQ05UICA6ICUwMTB1IChSeCBHb29kIEJ5dGVzKQl8XG4iLAorCQkgICBtdGtfcjMyKGV0aCwgbWliX2Jhc2UrMHg0MCkpOworCXNlcV9wcmludGYoc2VxLCAifCBHRE1BMl9SWF9HUENOVCAgOiAlMDEwdSAoUnggR29vZCBQa3RzKQl8XG4iLAorCQkgICBtdGtfcjMyKGV0aCwgbWliX2Jhc2UrMHg0OCkpOworCXNlcV9wcmludGYoc2VxLCAifCBHRE1BMl9SWF9PRVJDTlQgOiAlMDEwdSAob3ZlcmZsb3cgZXJyb3IpCXxcbiIsCisJCSAgIG10a19yMzIoZXRoLCBtaWJfYmFzZSsweDUwKSk7CisJc2VxX3ByaW50ZihzZXEsICJ8IEdETUEyX1JYX0ZFUkNOVCA6ICUwMTB1IChGQ1MgZXJyb3IpCXxcbiIsCisJCSAgIG10a19yMzIoZXRoLCBtaWJfYmFzZSsweDU0KSk7CisJc2VxX3ByaW50ZihzZXEsICJ8IEdETUEyX1JYX1NFUkNOVCA6ICUwMTB1ICh0b28gc2hvcnQpCXxcbiIsCisJCSAgIG10a19yMzIoZXRoLCBtaWJfYmFzZSsweDU4KSk7CisJc2VxX3ByaW50ZihzZXEsICJ8IEdETUEyX1JYX0xFUkNOVCA6ICUwMTB1ICh0b28gbG9uZykJfFxuIiwKKwkJICAgbXRrX3IzMihldGgsIG1pYl9iYXNlKzB4NUMpKTsKKwlzZXFfcHJpbnRmKHNlcSwgInwgR0RNQTJfUlhfQ0VSQ05UIDogJTAxMHUgKGNoZWNrc3VtIGVycm9yKQl8XG4iLAorCQkgICBtdGtfcjMyKGV0aCwgbWliX2Jhc2UrMHg2MCkpOworCXNlcV9wcmludGYoc2VxLCAifCBHRE1BMl9SWF9GQ0NOVCAgOiAlMDEwdSAoZmxvdyBjb250cm9sKQl8XG4iLAorCQkgICBtdGtfcjMyKGV0aCwgbWliX2Jhc2UrMHg2NCkpOworCXNlcV9wcmludGYoc2VxLCAifCBHRE1BMl9UWF9TS0lQQ05UOiAlMDEwdSAoc2tpcCkJCXxcbiIsCisJCSAgIG10a19yMzIoZXRoLCBtaWJfYmFzZSsweDY4KSk7CisJc2VxX3ByaW50ZihzZXEsICJ8IEdETUEyX1RYX0NPTENOVCA6ICUwMTB1IChjb2xsaXNpb24pCXxcbiIsCisJCSAgIG10a19yMzIoZXRoLCBtaWJfYmFzZSsweDZDKSk7CisJc2VxX3ByaW50ZihzZXEsICJ8IEdETUEyX1RYX0dCQ05UICA6ICUwMTB1IChUeCBHb29kIEJ5dGVzKQl8XG4iLAorCQkgICBtdGtfcjMyKGV0aCwgbWliX2Jhc2UrMHg3MCkpOworCXNlcV9wcmludGYoc2VxLCAifCBHRE1BMl9UWF9HUENOVCAgOiAlMDEwdSAoVHggR29vZCBQa3RzKQl8XG4iLAorCQkgICBtdGtfcjMyKGV0aCwgbWliX2Jhc2UrMHg3OCkpOworCXNlcV9wdXRzKHNlcSwgIistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiIpOworCisJaWYgKCFtdDc1MzBfZXhpc3QoZXRoKSkKKwkJcmV0dXJuIDA7CisKKyNkZWZpbmUgRFVNUF9FQUNIX1BPUlQoYmFzZSkJCQkJCVwKKwlkbyB7IFwKKwkJZm9yIChpID0gMDsgaSA8IDc7IGkrKykgewkJCQlcCisJCQlwa3RfY250ID0gbXQ3NTMwX21kaW9fcjMyKGV0aCwgKGJhc2UpICsgKGkgKiAweDEwMCkpO1wKKwkJCXNlcV9wcmludGYoc2VxLCAiJTh1ICIsIHBrdF9jbnQpOwkJXAorCQl9CQkJCQkJCVwKKwkJc2VxX3B1dHMoc2VxLCAiXG4iKTsgXAorCX0gd2hpbGUgKDApCisKKwlzZXFfcHJpbnRmKHNlcSwgIj09PT09PT09PT09PT09PT09PT09PSAlOHMgJThzICU4cyAlOHMgJThzICU4cyAlOHNcbiIsCisJCSAgICJQb3J0MCIsICJQb3J0MSIsICJQb3J0MiIsICJQb3J0MyIsICJQb3J0NCIsICJQb3J0NSIsCisJCSAgICJQb3J0NiIpOworCXNlcV9wdXRzKHNlcSwgIlR4IERyb3AgUGFja2V0ICAgICAgOiIpOworCURVTVBfRUFDSF9QT1JUKDB4NDAwMCk7CisJc2VxX3B1dHMoc2VxLCAiVHggQ1JDIEVycm9yICAgICAgICA6Iik7CisJRFVNUF9FQUNIX1BPUlQoMHg0MDA0KTsKKwlzZXFfcHV0cyhzZXEsICJUeCBVbmljYXN0IFBhY2tldCAgIDoiKTsKKwlEVU1QX0VBQ0hfUE9SVCgweDQwMDgpOworCXNlcV9wdXRzKHNlcSwgIlR4IE11bHRpY2FzdCBQYWNrZXQgOiIpOworCURVTVBfRUFDSF9QT1JUKDB4NDAwQyk7CisJc2VxX3B1dHMoc2VxLCAiVHggQnJvYWRjYXN0IFBhY2tldCA6Iik7CisJRFVNUF9FQUNIX1BPUlQoMHg0MDEwKTsKKwlzZXFfcHV0cyhzZXEsICJUeCBDb2xsaXNpb24gRXZlbnQgIDoiKTsKKwlEVU1QX0VBQ0hfUE9SVCgweDQwMTQpOworCXNlcV9wdXRzKHNlcSwgIlR4IFBhdXNlIFBhY2tldCAgICAgOiIpOworCURVTVBfRUFDSF9QT1JUKDB4NDAyQyk7CisJc2VxX3B1dHMoc2VxLCAiUnggRHJvcCBQYWNrZXQgICAgICA6Iik7CisJRFVNUF9FQUNIX1BPUlQoMHg0MDYwKTsKKwlzZXFfcHV0cyhzZXEsICJSeCBGaWx0ZXJpbmcgUGFja2V0IDoiKTsKKwlEVU1QX0VBQ0hfUE9SVCgweDQwNjQpOworCXNlcV9wdXRzKHNlcSwgIlJ4IFVuaWNhc3QgUGFja2V0ICAgOiIpOworCURVTVBfRUFDSF9QT1JUKDB4NDA2OCk7CisJc2VxX3B1dHMoc2VxLCAiUnggTXVsdGljYXN0IFBhY2tldCA6Iik7CisJRFVNUF9FQUNIX1BPUlQoMHg0MDZDKTsKKwlzZXFfcHV0cyhzZXEsICJSeCBCcm9hZGNhc3QgUGFja2V0IDoiKTsKKwlEVU1QX0VBQ0hfUE9SVCgweDQwNzApOworCXNlcV9wdXRzKHNlcSwgIlJ4IEFsaWdubWVudCBFcnJvciAgOiIpOworCURVTVBfRUFDSF9QT1JUKDB4NDA3NCk7CisJc2VxX3B1dHMoc2VxLCAiUnggQ1JDIEVycm9yCSAgICA6Iik7CisJRFVNUF9FQUNIX1BPUlQoMHg0MDc4KTsKKwlzZXFfcHV0cyhzZXEsICJSeCBVbmRlcnNpemUgRXJyb3IgIDoiKTsKKwlEVU1QX0VBQ0hfUE9SVCgweDQwN0MpOworCXNlcV9wdXRzKHNlcSwgIlJ4IEZyYWdtZW50IEVycm9yICAgOiIpOworCURVTVBfRUFDSF9QT1JUKDB4NDA4MCk7CisJc2VxX3B1dHMoc2VxLCAiUnggT3ZlcnNpemUgRXJyb3IgICA6Iik7CisJRFVNUF9FQUNIX1BPUlQoMHg0MDg0KTsKKwlzZXFfcHV0cyhzZXEsICJSeCBKYWJiZXIgRXJyb3IgICAgIDoiKTsKKwlEVU1QX0VBQ0hfUE9SVCgweDQwODgpOworCXNlcV9wdXRzKHNlcSwgIlJ4IFBhdXNlIFBhY2tldCAgICAgOiIpOworCURVTVBfRUFDSF9QT1JUKDB4NDA4Qyk7CisJbXQ3NTMwX21kaW9fdzMyKGV0aCwgMHg0ZmUwLCAweGYwKTsKKwltdDc1MzBfbWRpb193MzIoZXRoLCAweDRmZTAsIDB4ODAwMDAwZjApOworCisJc2VxX3B1dHMoc2VxLCAiXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN3aXRjaF9jb3VudF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBlc3dfY250X3JlYWQsIDApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzd2l0Y2hfY291bnRfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IHN3aXRjaF9jb3VudF9vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlCit9OworCitzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX3R4X3JpbmcsICpwcm9jX3J4X3Jpbmc7CisKK2ludCB0eF9yaW5nX3JlYWQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCit7CisJc3RydWN0IG10a190eF9yaW5nICpyaW5nID0gJmdfZXRoLT50eF9yaW5nOworCXN0cnVjdCBtdGtfdHhfZG1hICp0eF9yaW5nOworCWludCBpID0gMDsKKworCXR4X3JpbmcgPQorCSAgICBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRrX3R4X2RtYSkgKiBNVEtfRE1BX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghdHhfcmluZykgeworCQlzZXFfcHV0cyhzZXEsICIgYWxsb2NhdGUgdGVtcCB0eF9yaW5nIGZhaWwuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZm9yIChpID0gMDsgaSA8IE1US19ETUFfU0laRTsgaSsrKQorCQl0eF9yaW5nW2ldID0gcmluZy0+ZG1hW2ldOworCisJc2VxX3ByaW50ZihzZXEsICJmcmVlIGNvdW50ID0gJWRcbiIsIChpbnQpYXRvbWljX3JlYWQoJnJpbmctPmZyZWVfY291bnQpKTsKKwlzZXFfcHJpbnRmKHNlcSwgImNwdSBuZXh0IGZyZWU6ICVkXG4iLCAoaW50KShyaW5nLT5uZXh0X2ZyZWUgLSByaW5nLT5kbWEpKTsKKwlzZXFfcHJpbnRmKHNlcSwgImNwdSBsYXN0IGZyZWU6ICVkXG4iLCAoaW50KShyaW5nLT5sYXN0X2ZyZWUgLSByaW5nLT5kbWEpKTsKKwlmb3IgKGkgPSAwOyBpIDwgTVRLX0RNQV9TSVpFOyBpKyspIHsKKwkJZG1hX2FkZHJfdCB0bXAgPSByaW5nLT5waHlzICsgaSAqIHNpemVvZigqdHhfcmluZyk7CisKKwkJc2VxX3ByaW50ZihzZXEsICIlZCAoJXBhZCk6ICUwOHggJTA4eCAlMDh4ICUwOHgiLCBpLCAmdG1wLAorCQkJICAgKihpbnQgKikmdHhfcmluZ1tpXS50eGQxLCAqKGludCAqKSZ0eF9yaW5nW2ldLnR4ZDIsCisJCQkgICAqKGludCAqKSZ0eF9yaW5nW2ldLnR4ZDMsICooaW50ICopJnR4X3JpbmdbaV0udHhkNCk7CisjaWYgZGVmaW5lZChDT05GSUdfTUVESUFURUtfTkVUU1lTX1YyKQorCQlzZXFfcHJpbnRmKHNlcSwgIiAlMDh4ICUwOHggJTA4eCAlMDh4IiwKKwkJCSAgICooaW50ICopJnR4X3JpbmdbaV0udHhkNSwgKihpbnQgKikmdHhfcmluZ1tpXS50eGQ2LAorCQkJICAgKihpbnQgKikmdHhfcmluZ1tpXS50eGQ3LCAqKGludCAqKSZ0eF9yaW5nW2ldLnR4ZDgpOworI2VuZGlmCisJCXNlcV9wcmludGYoc2VxLCAiXG4iKTsKKwl9CisKKwlrZnJlZSh0eF9yaW5nKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0eF9yaW5nX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHR4X3JpbmdfcmVhZCwgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHR4X3JpbmdfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IHR4X3Jpbmdfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZQorfTsKKworaW50IHJ4X3JpbmdfcmVhZChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgbXRrX3J4X3JpbmcgKnJpbmcgPSAmZ19ldGgtPnJ4X3JpbmdbMF07CisJc3RydWN0IG10a19yeF9kbWEgKnJ4X3Jpbmc7CisKKwlpbnQgaSA9IDA7CisKKwlyeF9yaW5nID0KKwkgICAga21hbGxvYyhzaXplb2Yoc3RydWN0IG10a19yeF9kbWEpICogTVRLX0RNQV9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJ4X3JpbmcpIHsKKwkJc2VxX3B1dHMoc2VxLCAiIGFsbG9jYXRlIHRlbXAgcnhfcmluZyBmYWlsLlxuIik7CisJCXJldHVybiAwOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBNVEtfRE1BX1NJWkU7IGkrKykKKwkJcnhfcmluZ1tpXSA9IHJpbmctPmRtYVtpXTsKKworCXNlcV9wcmludGYoc2VxLCAibmV4dCB0byByZWFkOiAlZFxuIiwKKwkJICAgTkVYVF9ERVNQX0lEWChyaW5nLT5jYWxjX2lkeCwgTVRLX0RNQV9TSVpFKSk7CisJZm9yIChpID0gMDsgaSA8IE1US19ETUFfU0laRTsgaSsrKSB7CisJCXNlcV9wcmludGYoc2VxLCAiJWQ6ICUwOHggJTA4eCAlMDh4ICUwOHgiLCBpLAorCQkJICAgKihpbnQgKikmcnhfcmluZ1tpXS5yeGQxLCAqKGludCAqKSZyeF9yaW5nW2ldLnJ4ZDIsCisJCQkgICAqKGludCAqKSZyeF9yaW5nW2ldLnJ4ZDMsICooaW50ICopJnJ4X3JpbmdbaV0ucnhkNCk7CisjaWYgZGVmaW5lZChDT05GSUdfTUVESUFURUtfTkVUU1lTX1YyKQorCQlzZXFfcHJpbnRmKHNlcSwgIiAlMDh4ICUwOHggJTA4eCAlMDh4IiwKKwkJCSAgICooaW50ICopJnJ4X3JpbmdbaV0ucnhkNSwgKihpbnQgKikmcnhfcmluZ1tpXS5yeGQ2LAorCQkJICAgKihpbnQgKikmcnhfcmluZ1tpXS5yeGQ3LCAqKGludCAqKSZyeF9yaW5nW2ldLnJ4ZDgpOworI2VuZGlmCisJCXNlcV9wcmludGYoc2VxLCAiXG4iKTsKKwl9CisKKwlrZnJlZShyeF9yaW5nKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByeF9yaW5nX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHJ4X3JpbmdfcmVhZCwgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJ4X3JpbmdfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IHJ4X3Jpbmdfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZQorfTsKKworc3RhdGljIGlubGluZSB1MzIgbXRrX2RiZ19yMzIodTMyIHJlZykKK3sKKwl2b2lkIF9faW9tZW0gKnZpcnRfcmVnOworCXUzMiB2YWw7CisKKwl2aXJ0X3JlZyA9IGlvcmVtYXAocmVnLCAzMik7CisJdmFsID0gX19yYXdfcmVhZGwodmlydF9yZWcpOworCWlvdW5tYXAodmlydF9yZWcpOworCisJcmV0dXJuIHZhbDsKK30KKworaW50IGRiZ19yZWdzX3JlYWQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCit7CisJc3RydWN0IG10a19ldGggKmV0aCA9IGdfZXRoOworCisJc2VxX3B1dHMoc2VxLCAiICAgPDxERUJVRyBSRUcgRFVNUD4+XG4iKTsKKworCXNlcV9wcmludGYoc2VxLCAifCBGRV9JTlRfU1RBCTogJTA4eCB8XG4iLAorCQkgICBtdGtfcjMyKGV0aCwgTVRLX0lOVF9TVEFUVVMpKTsKKwlpZiAoTVRLX0hBU19DQVBTKGV0aC0+c29jLT5jYXBzLCBNVEtfTkVUU1lTX1YyKSkKKwkJc2VxX3ByaW50ZihzZXEsICJ8IEZFX0lOVF9TVEEyCTogJTA4eCB8XG4iLAorCQkJICAgbXRrX3IzMihldGgsIE1US19JTlRfU1RBVFVTMikpOworCisJc2VxX3ByaW50ZihzZXEsICJ8IFBTRV9GUUZDX0NGRwk6ICUwOHggfFxuIiwKKwkJICAgbXRrX3IzMihldGgsIE1US19QU0VfRlFGQ19DRkcpKTsKKwlzZXFfcHJpbnRmKHNlcSwgInwgUFNFX0lRX1NUQTEJOiAlMDh4IHxcbiIsCisJCSAgIG10a19yMzIoZXRoLCBNVEtfUFNFX0lRX1NUQSgwKSkpOworCXNlcV9wcmludGYoc2VxLCAifCBQU0VfSVFfU1RBMgk6ICUwOHggfFxuIiwKKwkJICAgbXRrX3IzMihldGgsIE1US19QU0VfSVFfU1RBKDEpKSk7CisKKwlpZiAoTVRLX0hBU19DQVBTKGV0aC0+c29jLT5jYXBzLCBNVEtfTkVUU1lTX1YyKSkgeworCQlzZXFfcHJpbnRmKHNlcSwgInwgUFNFX0lRX1NUQTMJOiAlMDh4IHxcbiIsCisJCQkgICBtdGtfcjMyKGV0aCwgTVRLX1BTRV9JUV9TVEEoMikpKTsKKwkJc2VxX3ByaW50ZihzZXEsICJ8IFBTRV9JUV9TVEE0CTogJTA4eCB8XG4iLAorCQkJICAgbXRrX3IzMihldGgsIE1US19QU0VfSVFfU1RBKDMpKSk7CisJCXNlcV9wcmludGYoc2VxLCAifCBQU0VfSVFfU1RBNQk6ICUwOHggfFxuIiwKKwkJCSAgIG10a19yMzIoZXRoLCBNVEtfUFNFX0lRX1NUQSg0KSkpOworCX0KKworCXNlcV9wcmludGYoc2VxLCAifCBQU0VfT1FfU1RBMQk6ICUwOHggfFxuIiwKKwkJICAgbXRrX3IzMihldGgsIE1US19QU0VfT1FfU1RBKDApKSk7CisJc2VxX3ByaW50ZihzZXEsICJ8IFBTRV9PUV9TVEEyCTogJTA4eCB8XG4iLAorCQkgICBtdGtfcjMyKGV0aCwgTVRLX1BTRV9PUV9TVEEoMSkpKTsKKworCWlmIChNVEtfSEFTX0NBUFMoZXRoLT5zb2MtPmNhcHMsIE1US19ORVRTWVNfVjIpKSB7CisJCXNlcV9wcmludGYoc2VxLCAifCBQU0VfT1FfU1RBMwk6ICUwOHggfFxuIiwKKwkJCSAgIG10a19yMzIoZXRoLCBNVEtfUFNFX09RX1NUQSgyKSkpOworCQlzZXFfcHJpbnRmKHNlcSwgInwgUFNFX09RX1NUQTQJOiAlMDh4IHxcbiIsCisJCQkgICBtdGtfcjMyKGV0aCwgTVRLX1BTRV9PUV9TVEEoMykpKTsKKwkJc2VxX3ByaW50ZihzZXEsICJ8IFBTRV9PUV9TVEE1CTogJTA4eCB8XG4iLAorCQkJICAgbXRrX3IzMihldGgsIE1US19QU0VfT1FfU1RBKDQpKSk7CisJfQorCisJc2VxX3ByaW50ZihzZXEsICJ8IFBETUFfQ1JYX0lEWAk6ICUwOHggfFxuIiwKKwkJICAgbXRrX3IzMihldGgsIE1US19QUlhfQ1JYX0lEWDApKTsKKwlzZXFfcHJpbnRmKHNlcSwgInwgUERNQV9EUlhfSURYCTogJTA4eCB8XG4iLAorCQkgICBtdGtfcjMyKGV0aCwgTVRLX1BSWF9EUlhfSURYMCkpOworCXNlcV9wcmludGYoc2VxLCAifCBRRE1BX0NUWF9JRFgJOiAlMDh4IHxcbiIsCisJCSAgIG10a19yMzIoZXRoLCBNVEtfUVRYX0NUWF9QVFIpKTsKKwlzZXFfcHJpbnRmKHNlcSwgInwgUURNQV9EVFhfSURYCTogJTA4eCB8XG4iLAorCQkgICBtdGtfcjMyKGV0aCwgTVRLX1FUWF9EVFhfUFRSKSk7CisJc2VxX3ByaW50ZihzZXEsICJ8IFFETUFfRlFfQ05UCTogJTA4eCB8XG4iLAorCQkgICBtdGtfcjMyKGV0aCwgTVRLX1FETUFfRlFfQ05UKSk7CisJc2VxX3ByaW50ZihzZXEsICJ8IEZFX1BTRV9GUkVFCTogJTA4eCB8XG4iLAorCQkgICBtdGtfcjMyKGV0aCwgTVRLX0ZFX1BTRV9GUkVFKSk7CisJc2VxX3ByaW50ZihzZXEsICJ8IEZFX0RST1BfRlEJOiAlMDh4IHxcbiIsCisJCSAgIG10a19yMzIoZXRoLCBNVEtfRkVfRFJPUF9GUSkpOworCXNlcV9wcmludGYoc2VxLCAifCBGRV9EUk9QX0ZDCTogJTA4eCB8XG4iLAorCQkgICBtdGtfcjMyKGV0aCwgTVRLX0ZFX0RST1BfRkMpKTsKKwlzZXFfcHJpbnRmKHNlcSwgInwgRkVfRFJPUF9QUEUJOiAlMDh4IHxcbiIsCisJCSAgIG10a19yMzIoZXRoLCBNVEtfRkVfRFJPUF9QUEUpKTsKKwlzZXFfcHJpbnRmKHNlcSwgInwgR0RNMV9JR19DVFJMCTogJTA4eCB8XG4iLAorCQkgICBtdGtfcjMyKGV0aCwgTVRLX0dETUFfRldEX0NGRygwKSkpOworCXNlcV9wcmludGYoc2VxLCAifCBHRE0yX0lHX0NUUkwJOiAlMDh4IHxcbiIsCisJCSAgIG10a19yMzIoZXRoLCBNVEtfR0RNQV9GV0RfQ0ZHKDEpKSk7CisJc2VxX3ByaW50ZihzZXEsICJ8IE1BQ19QMV9NQ1IJOiAlMDh4IHxcbiIsCisJCSAgIG10a19yMzIoZXRoLCBNVEtfTUFDX01DUigwKSkpOworCXNlcV9wcmludGYoc2VxLCAifCBNQUNfUDJfTUNSCTogJTA4eCB8XG4iLAorCQkgICBtdGtfcjMyKGV0aCwgTVRLX01BQ19NQ1IoMSkpKTsKKwlzZXFfcHJpbnRmKHNlcSwgInwgTUFDX1AxX0ZTTQk6ICUwOHggfFxuIiwKKwkJICAgbXRrX3IzMihldGgsIE1US19NQUNfRlNNKDApKSk7CisJc2VxX3ByaW50ZihzZXEsICJ8IE1BQ19QMl9GU00JOiAlMDh4IHxcbiIsCisJCSAgIG10a19yMzIoZXRoLCBNVEtfTUFDX0ZTTSgxKSkpOworCisJaWYgKE1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX05FVFNZU19WMikpIHsKKwkJc2VxX3ByaW50ZihzZXEsICJ8IEZFX0NETTFfRlNNCTogJTA4eCB8XG4iLAorCQkJICAgbXRrX3IzMihldGgsIE1US19GRV9DRE0xX0ZTTSkpOworCQlzZXFfcHJpbnRmKHNlcSwgInwgRkVfQ0RNMl9GU00JOiAlMDh4IHxcbiIsCisJCQkgICBtdGtfcjMyKGV0aCwgTVRLX0ZFX0NETTJfRlNNKSk7CisJCXNlcV9wcmludGYoc2VxLCAifCBGRV9DRE0zX0ZTTQk6ICUwOHggfFxuIiwKKwkJCSAgIG10a19yMzIoZXRoLCBNVEtfRkVfQ0RNM19GU00pKTsKKwkJc2VxX3ByaW50ZihzZXEsICJ8IEZFX0NETTRfRlNNCTogJTA4eCB8XG4iLAorCQkJICAgbXRrX3IzMihldGgsIE1US19GRV9DRE00X0ZTTSkpOworCQlzZXFfcHJpbnRmKHNlcSwgInwgRkVfR0RNMV9GU00JOiAlMDh4IHxcbiIsCisJCQkgICBtdGtfcjMyKGV0aCwgTVRLX0ZFX0dETTFfRlNNKSk7CisJCXNlcV9wcmludGYoc2VxLCAifCBGRV9HRE0yX0ZTTQk6ICUwOHggfFxuIiwKKwkJCSAgIG10a19yMzIoZXRoLCBNVEtfRkVfR0RNMl9GU00pKTsKKwkJc2VxX3ByaW50ZihzZXEsICJ8IFNHTUlJX0VGVVNFCTogJTA4eCB8XG4iLAorCQkJICAgbXRrX2RiZ19yMzIoTVRLX1NHTUlJX0VGVVNFKSk7CisJCXNlcV9wcmludGYoc2VxLCAifCBTR01JSTBfUlhfQ05UIDogJTA4eCB8XG4iLAorCQkJICAgbXRrX2RiZ19yMzIoTVRLX1NHTUlJX0ZBTFNFX0NBUlJJRVJfQ05UKDApKSk7CisJCXNlcV9wcmludGYoc2VxLCAifCBTR01JSTFfUlhfQ05UIDogJTA4eCB8XG4iLAorCQkJICAgbXRrX2RiZ19yMzIoTVRLX1NHTUlJX0ZBTFNFX0NBUlJJRVJfQ05UKDEpKSk7CisJCXNlcV9wcmludGYoc2VxLCAifCBXRURfUlRRTV9HTE8JOiAlMDh4IHxcbiIsCisJCQkgICBtdGtfZGJnX3IzMihNVEtfV0VEX1JUUU1fR0xPX0NGRykpOworCX0KKworCW10a193MzIoZXRoLCAweGZmZmZmZmZmLCBNVEtfSU5UX1NUQVRVUyk7CisJaWYgKE1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX05FVFNZU19WMikpCisJCW10a193MzIoZXRoLCAweGZmZmZmZmZmLCBNVEtfSU5UX1NUQVRVUzIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGJnX3JlZ3Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZGJnX3JlZ3NfcmVhZCwgMCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRiZ19yZWdzX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBkYmdfcmVnc19vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlCit9OworCit2b2lkIGh3X2xyb19zdGF0c191cGRhdGUodTMyIHJpbmdfbm8sIHN0cnVjdCBtdGtfcnhfZG1hICpyeGQpCit7CisJdTMyIGlkeCwgYWdnX2NudCwgYWdnX3NpemU7CisKKyNpZiBkZWZpbmVkKENPTkZJR19NRURJQVRFS19ORVRTWVNfVjIpCisJaWR4ID0gcmluZ19ubyAtIDQ7CisJYWdnX2NudCA9IFJYX0RNQV9HRVRfQUdHX0NOVF9WMihyeGQtPnJ4ZDYpOworI2Vsc2UKKwlpZHggPSByaW5nX25vIC0gMTsKKwlhZ2dfY250ID0gUlhfRE1BX0dFVF9BR0dfQ05UKHJ4ZC0+cnhkMik7CisjZW5kaWYKKworCWFnZ19zaXplID0gUlhfRE1BX0dFVF9QTEVOMChyeGQtPnJ4ZDIpOworCisJaHdfbHJvX2FnZ19zaXplX2NudFtpZHhdW2FnZ19zaXplIC8gNTAwMF0rKzsKKwlod19scm9fYWdnX251bV9jbnRbaWR4XVthZ2dfY250XSsrOworCWh3X2xyb190b3RfZmx1c2hfY250W2lkeF0rKzsKKwlod19scm9fdG90X2FnZ19jbnRbaWR4XSArPSBhZ2dfY250OworfQorCit2b2lkIGh3X2xyb19mbHVzaF9zdGF0c191cGRhdGUodTMyIHJpbmdfbm8sIHN0cnVjdCBtdGtfcnhfZG1hICpyeGQpCit7CisJdTMyIGlkeCwgZmx1c2hfcmVhc29uOworCisjaWYgZGVmaW5lZChDT05GSUdfTUVESUFURUtfTkVUU1lTX1YyKQorCWlkeCA9IHJpbmdfbm8gLSA0OworCWZsdXNoX3JlYXNvbiA9IFJYX0RNQV9HRVRfRkxVU0hfUlNOX1YyKHJ4ZC0+cnhkNik7CisjZWxzZQorCWlkeCA9IHJpbmdfbm8gLSAxOworCWZsdXNoX3JlYXNvbiA9IFJYX0RNQV9HRVRfUkVWKHJ4ZC0+cnhkMik7CisjZW5kaWYKKworCWlmICgoZmx1c2hfcmVhc29uICYgMHg3KSA9PSBNVEtfSFdfTFJPX0FHR19GTFVTSCkKKwkJaHdfbHJvX2FnZ19mbHVzaF9jbnRbaWR4XSsrOworCWVsc2UgaWYgKChmbHVzaF9yZWFzb24gJiAweDcpID09IE1US19IV19MUk9fQUdFX0ZMVVNIKQorCQlod19scm9fYWdlX2ZsdXNoX2NudFtpZHhdKys7CisJZWxzZSBpZiAoKGZsdXNoX3JlYXNvbiAmIDB4NykgPT0gTVRLX0hXX0xST19OT1RfSU5fU0VRX0ZMVVNIKQorCQlod19scm9fc2VxX2ZsdXNoX2NudFtpZHhdKys7CisJZWxzZSBpZiAoKGZsdXNoX3JlYXNvbiAmIDB4NykgPT0gTVRLX0hXX0xST19USU1FU1RBTVBfRkxVU0gpCisJCWh3X2xyb190aW1lc3RhbXBfZmx1c2hfY250W2lkeF0rKzsKKwllbHNlIGlmICgoZmx1c2hfcmVhc29uICYgMHg3KSA9PSBNVEtfSFdfTFJPX05PTl9SVUxFX0ZMVVNIKQorCQlod19scm9fbm9ydWxlX2ZsdXNoX2NudFtpZHhdKys7Cit9CisKK3NzaXplX3QgaHdfbHJvX3N0YXRzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmRhdGEpCit7CisJbWVtc2V0KGh3X2xyb19hZ2dfbnVtX2NudCwgMCwgc2l6ZW9mKGh3X2xyb19hZ2dfbnVtX2NudCkpOworCW1lbXNldChod19scm9fYWdnX3NpemVfY250LCAwLCBzaXplb2YoaHdfbHJvX2FnZ19zaXplX2NudCkpOworCW1lbXNldChod19scm9fdG90X2FnZ19jbnQsIDAsIHNpemVvZihod19scm9fdG90X2FnZ19jbnQpKTsKKwltZW1zZXQoaHdfbHJvX3RvdF9mbHVzaF9jbnQsIDAsIHNpemVvZihod19scm9fdG90X2ZsdXNoX2NudCkpOworCW1lbXNldChod19scm9fYWdnX2ZsdXNoX2NudCwgMCwgc2l6ZW9mKGh3X2xyb19hZ2dfZmx1c2hfY250KSk7CisJbWVtc2V0KGh3X2xyb19hZ2VfZmx1c2hfY250LCAwLCBzaXplb2YoaHdfbHJvX2FnZV9mbHVzaF9jbnQpKTsKKwltZW1zZXQoaHdfbHJvX3NlcV9mbHVzaF9jbnQsIDAsIHNpemVvZihod19scm9fc2VxX2ZsdXNoX2NudCkpOworCW1lbXNldChod19scm9fdGltZXN0YW1wX2ZsdXNoX2NudCwgMCwKKwkgICAgICAgc2l6ZW9mKGh3X2xyb190aW1lc3RhbXBfZmx1c2hfY250KSk7CisJbWVtc2V0KGh3X2xyb19ub3J1bGVfZmx1c2hfY250LCAwLCBzaXplb2YoaHdfbHJvX25vcnVsZV9mbHVzaF9jbnQpKTsKKworCXByX2luZm8oImNsZWFyIGh3IGxybyBjbnQgdGFibGVcbiIpOworCisJcmV0dXJuIGNvdW50OworfQorCitpbnQgaHdfbHJvX3N0YXRzX3JlYWRfdjEoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCit7CisJaW50IGk7CisKKwlzZXFfcHV0cyhzZXEsICJIVyBMUk8gc3RhdGlzdGljIGR1bXA6XG4iKTsKKworCS8qIEFnZyBudW1iZXIgY291bnQgKi8KKwlzZXFfcHV0cyhzZXEsICJDbnQ6ICAgUklORzEgfCBSSU5HMiB8IFJJTkczIHwgVG90YWxcbiIpOworCWZvciAoaSA9IDA7IGkgPD0gTVRLX0hXX0xST19NQVhfQUdHX0NOVDsgaSsrKSB7CisJCXNlcV9wcmludGYoc2VxLCAiICVkIDogICAgICAlZCAgICAgICAgJWQgICAgICAgICVkICAgICAgICAlZFxuIiwKKwkJCSAgIGksIGh3X2xyb19hZ2dfbnVtX2NudFswXVtpXSwKKwkJCSAgIGh3X2xyb19hZ2dfbnVtX2NudFsxXVtpXSwgaHdfbHJvX2FnZ19udW1fY250WzJdW2ldLAorCQkJICAgaHdfbHJvX2FnZ19udW1fY250WzBdW2ldICsgaHdfbHJvX2FnZ19udW1fY250WzFdW2ldICsKKwkJCSAgIGh3X2xyb19hZ2dfbnVtX2NudFsyXVtpXSk7CisJfQorCisJLyogVG90YWwgYWdnIGNvdW50ICovCisJc2VxX3B1dHMoc2VxLCAiVG90YWwgYWdnOiAgIFJJTkcxIHwgUklORzIgfCBSSU5HMyB8IFRvdGFsXG4iKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiAgICAgICAgICAgICAgICAlZCAgICAgICVkICAgICAgJWQgICAgICAlZFxuIiwKKwkJICAgaHdfbHJvX3RvdF9hZ2dfY250WzBdLCBod19scm9fdG90X2FnZ19jbnRbMV0sCisJCSAgIGh3X2xyb190b3RfYWdnX2NudFsyXSwKKwkJICAgaHdfbHJvX3RvdF9hZ2dfY250WzBdICsgaHdfbHJvX3RvdF9hZ2dfY250WzFdICsKKwkJICAgaHdfbHJvX3RvdF9hZ2dfY250WzJdKTsKKworCS8qIFRvdGFsIGZsdXNoIGNvdW50ICovCisJc2VxX3B1dHMoc2VxLCAiVG90YWwgZmx1c2g6ICAgUklORzEgfCBSSU5HMiB8IFJJTkczIHwgVG90YWxcbiIpOworCXNlcV9wcmludGYoc2VxLCAiICAgICAgICAgICAgICAgICVkICAgICAgJWQgICAgICAlZCAgICAgICVkXG4iLAorCQkgICBod19scm9fdG90X2ZsdXNoX2NudFswXSwgaHdfbHJvX3RvdF9mbHVzaF9jbnRbMV0sCisJCSAgIGh3X2xyb190b3RfZmx1c2hfY250WzJdLAorCQkgICBod19scm9fdG90X2ZsdXNoX2NudFswXSArIGh3X2xyb190b3RfZmx1c2hfY250WzFdICsKKwkJICAgaHdfbHJvX3RvdF9mbHVzaF9jbnRbMl0pOworCisJLyogQXZnIGFnZyBjb3VudCAqLworCXNlcV9wdXRzKHNlcSwgIkF2ZyBhZ2c6ICAgUklORzEgfCBSSU5HMiB8IFJJTkczIHwgVG90YWxcbiIpOworCXNlcV9wcmludGYoc2VxLCAiICAgICAgICAgICAgICAgICVkICAgICAgJWQgICAgICAlZCAgICAgICVkXG4iLAorCQkgICAoaHdfbHJvX3RvdF9mbHVzaF9jbnRbMF0pID8KKwkJICAgIGh3X2xyb190b3RfYWdnX2NudFswXSAvIGh3X2xyb190b3RfZmx1c2hfY250WzBdIDogMCwKKwkJICAgKGh3X2xyb190b3RfZmx1c2hfY250WzFdKSA/CisJCSAgICBod19scm9fdG90X2FnZ19jbnRbMV0gLyBod19scm9fdG90X2ZsdXNoX2NudFsxXSA6IDAsCisJCSAgIChod19scm9fdG90X2ZsdXNoX2NudFsyXSkgPworCQkgICAgaHdfbHJvX3RvdF9hZ2dfY250WzJdIC8gaHdfbHJvX3RvdF9mbHVzaF9jbnRbMl0gOiAwLAorCQkgICAoaHdfbHJvX3RvdF9mbHVzaF9jbnRbMF0gKyBod19scm9fdG90X2ZsdXNoX2NudFsxXSArCisJCSAgICBod19scm9fdG90X2ZsdXNoX2NudFsyXSkgPworCQkgICAgKChod19scm9fdG90X2FnZ19jbnRbMF0gKyBod19scm9fdG90X2FnZ19jbnRbMV0gKworCQkgICAgICBod19scm9fdG90X2FnZ19jbnRbMl0pIC8gKGh3X2xyb190b3RfZmx1c2hfY250WzBdICsKKwkJICAgICAgaHdfbHJvX3RvdF9mbHVzaF9jbnRbMV0gKyBod19scm9fdG90X2ZsdXNoX2NudFsyXSkpIDogMCk7CisKKwkvKiAgU3RhdGlzdGljcyBvZiBhZ2dyZWdhdGlvbiBzaXplIGNvdW50cyAqLworCXNlcV9wdXRzKHNlcSwgIkhXIExSTyBmbHVzaCBwa3QgbGVuOlxuIik7CisJc2VxX3B1dHMoc2VxLCAiIExlbmd0aCAgfCBSSU5HMSAgfCBSSU5HMiAgfCBSSU5HMyAgfCBUb3RhbFxuIik7CisJZm9yIChpID0gMDsgaSA8IDE1OyBpKyspIHsKKwkJc2VxX3ByaW50ZihzZXEsICIlZH4lZDogJWQgICAgICAlZCAgICAgICVkICAgICAgJWRcbiIsIGkgKiA1MDAwLAorCQkJICAgKGkgKyAxKSAqIDUwMDAsIGh3X2xyb19hZ2dfc2l6ZV9jbnRbMF1baV0sCisJCQkgICBod19scm9fYWdnX3NpemVfY250WzFdW2ldLCBod19scm9fYWdnX3NpemVfY250WzJdW2ldLAorCQkJICAgaHdfbHJvX2FnZ19zaXplX2NudFswXVtpXSArCisJCQkgICBod19scm9fYWdnX3NpemVfY250WzFdW2ldICsKKwkJCSAgIGh3X2xyb19hZ2dfc2l6ZV9jbnRbMl1baV0pOworCX0KKworCXNlcV9wdXRzKHNlcSwgIkZsdXNoIHJlYXNvbjogICBSSU5HMSB8IFJJTkcyIHwgUklORzMgfCBUb3RhbFxuIik7CisJc2VxX3ByaW50ZihzZXEsICJBR0cgdGltZW91dDogICAgICAlZCAgICAgICVkICAgICAgJWQgICAgICAlZFxuIiwKKwkJICAgaHdfbHJvX2FnZ19mbHVzaF9jbnRbMF0sIGh3X2xyb19hZ2dfZmx1c2hfY250WzFdLAorCQkgICBod19scm9fYWdnX2ZsdXNoX2NudFsyXSwKKwkJICAgKGh3X2xyb19hZ2dfZmx1c2hfY250WzBdICsgaHdfbHJvX2FnZ19mbHVzaF9jbnRbMV0gKworCQkgICAgaHdfbHJvX2FnZ19mbHVzaF9jbnRbMl0pKTsKKworCXNlcV9wcmludGYoc2VxLCAiQUdFIHRpbWVvdXQ6ICAgICAgJWQgICAgICAlZCAgICAgICVkICAgICAgJWRcbiIsCisJCSAgIGh3X2xyb19hZ2VfZmx1c2hfY250WzBdLCBod19scm9fYWdlX2ZsdXNoX2NudFsxXSwKKwkJICAgaHdfbHJvX2FnZV9mbHVzaF9jbnRbMl0sCisJCSAgIChod19scm9fYWdlX2ZsdXNoX2NudFswXSArIGh3X2xyb19hZ2VfZmx1c2hfY250WzFdICsKKwkJICAgIGh3X2xyb19hZ2VfZmx1c2hfY250WzJdKSk7CisKKwlzZXFfcHJpbnRmKHNlcSwgIk5vdCBpbi1zZXF1ZW5jZTogICVkICAgICAgJWQgICAgICAlZCAgICAgICVkXG4iLAorCQkgICBod19scm9fc2VxX2ZsdXNoX2NudFswXSwgaHdfbHJvX3NlcV9mbHVzaF9jbnRbMV0sCisJCSAgIGh3X2xyb19zZXFfZmx1c2hfY250WzJdLAorCQkgICAoaHdfbHJvX3NlcV9mbHVzaF9jbnRbMF0gKyBod19scm9fc2VxX2ZsdXNoX2NudFsxXSArCisJCSAgICBod19scm9fc2VxX2ZsdXNoX2NudFsyXSkpOworCisJc2VxX3ByaW50ZihzZXEsICJUaW1lc3RhbXA6ICAgICAgICAlZCAgICAgICVkICAgICAgJWQgICAgICAlZFxuIiwKKwkJICAgaHdfbHJvX3RpbWVzdGFtcF9mbHVzaF9jbnRbMF0sCisJCSAgIGh3X2xyb190aW1lc3RhbXBfZmx1c2hfY250WzFdLAorCQkgICBod19scm9fdGltZXN0YW1wX2ZsdXNoX2NudFsyXSwKKwkJICAgKGh3X2xyb190aW1lc3RhbXBfZmx1c2hfY250WzBdICsKKwkJICAgIGh3X2xyb190aW1lc3RhbXBfZmx1c2hfY250WzFdICsKKwkJICAgIGh3X2xyb190aW1lc3RhbXBfZmx1c2hfY250WzJdKSk7CisKKwlzZXFfcHJpbnRmKHNlcSwgIk5vIExSTyBydWxlOiAgICAgICVkICAgICAgJWQgICAgICAlZCAgICAgICVkXG4iLAorCQkgICBod19scm9fbm9ydWxlX2ZsdXNoX2NudFswXSwKKwkJICAgaHdfbHJvX25vcnVsZV9mbHVzaF9jbnRbMV0sCisJCSAgIGh3X2xyb19ub3J1bGVfZmx1c2hfY250WzJdLAorCQkgICAoaHdfbHJvX25vcnVsZV9mbHVzaF9jbnRbMF0gKworCQkgICAgaHdfbHJvX25vcnVsZV9mbHVzaF9jbnRbMV0gKworCQkgICAgaHdfbHJvX25vcnVsZV9mbHVzaF9jbnRbMl0pKTsKKworCXJldHVybiAwOworfQorCitpbnQgaHdfbHJvX3N0YXRzX3JlYWRfdjIoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCit7CisJaW50IGk7CisKKwlzZXFfcHV0cyhzZXEsICJIVyBMUk8gc3RhdGlzdGljIGR1bXA6XG4iKTsKKworCS8qIEFnZyBudW1iZXIgY291bnQgKi8KKwlzZXFfcHV0cyhzZXEsICJDbnQ6ICAgUklORzQgfCBSSU5HNSB8IFJJTkc2IHwgUklORzcgVG90YWxcbiIpOworCWZvciAoaSA9IDA7IGkgPD0gTVRLX0hXX0xST19NQVhfQUdHX0NOVDsgaSsrKSB7CisJCXNlcV9wcmludGYoc2VxLAorCQkJICAgIiAlZCA6ICAgICAgJWQgICAgICAgICVkICAgICAgICAlZCAgICAgICAgJWQgICAgICAgICVkXG4iLAorCQkJICAgaSwgaHdfbHJvX2FnZ19udW1fY250WzBdW2ldLCBod19scm9fYWdnX251bV9jbnRbMV1baV0sCisJCQkgICBod19scm9fYWdnX251bV9jbnRbMl1baV0sIGh3X2xyb19hZ2dfbnVtX2NudFszXVtpXSwKKwkJCSAgIGh3X2xyb19hZ2dfbnVtX2NudFswXVtpXSArIGh3X2xyb19hZ2dfbnVtX2NudFsxXVtpXSArCisJCQkgICBod19scm9fYWdnX251bV9jbnRbMl1baV0gKyBod19scm9fYWdnX251bV9jbnRbM11baV0pOworCX0KKworCS8qIFRvdGFsIGFnZyBjb3VudCAqLworCXNlcV9wdXRzKHNlcSwgIlRvdGFsIGFnZzogICBSSU5HNCB8IFJJTkc1IHwgUklORzYgfCBSSU5HNyBUb3RhbFxuIik7CisJc2VxX3ByaW50ZihzZXEsICIgICAgICAgICAgICAgICAgJWQgICAgICAlZCAgICAgICVkICAgICAgJWQgICAgICAlZFxuIiwKKwkJICAgaHdfbHJvX3RvdF9hZ2dfY250WzBdLCBod19scm9fdG90X2FnZ19jbnRbMV0sCisJCSAgIGh3X2xyb190b3RfYWdnX2NudFsyXSwgaHdfbHJvX3RvdF9hZ2dfY250WzNdLAorCQkgICBod19scm9fdG90X2FnZ19jbnRbMF0gKyBod19scm9fdG90X2FnZ19jbnRbMV0gKworCQkgICBod19scm9fdG90X2FnZ19jbnRbMl0gKyBod19scm9fdG90X2FnZ19jbnRbM10pOworCisJLyogVG90YWwgZmx1c2ggY291bnQgKi8KKwlzZXFfcHV0cyhzZXEsICJUb3RhbCBmbHVzaDogICBSSU5HNCB8IFJJTkc1IHwgUklORzYgfCBSSU5HNyBUb3RhbFxuIik7CisJc2VxX3ByaW50ZihzZXEsICIgICAgICAgICAgICAgICAgJWQgICAgICAlZCAgICAgICVkICAgICAgJWQgICAgICAlZFxuIiwKKwkJICAgaHdfbHJvX3RvdF9mbHVzaF9jbnRbMF0sIGh3X2xyb190b3RfZmx1c2hfY250WzFdLAorCQkgICBod19scm9fdG90X2ZsdXNoX2NudFsyXSwgaHdfbHJvX3RvdF9mbHVzaF9jbnRbM10sCisJCSAgIGh3X2xyb190b3RfZmx1c2hfY250WzBdICsgaHdfbHJvX3RvdF9mbHVzaF9jbnRbMV0gKworCQkgICBod19scm9fdG90X2ZsdXNoX2NudFsyXSArIGh3X2xyb190b3RfZmx1c2hfY250WzNdKTsKKworCS8qIEF2ZyBhZ2cgY291bnQgKi8KKwlzZXFfcHV0cyhzZXEsICJBdmcgYWdnOiAgIFJJTkc0IHwgUklORzUgfCBSSU5HNiB8IFJJTkc3IFRvdGFsXG4iKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiAgICAgICAgICAgICAgICAlZCAgICAgICVkICAgICAgJWQgICAgICAlZCAgICAgICVkXG4iLAorCQkgICAoaHdfbHJvX3RvdF9mbHVzaF9jbnRbMF0pID8KKwkJICAgIGh3X2xyb190b3RfYWdnX2NudFswXSAvIGh3X2xyb190b3RfZmx1c2hfY250WzBdIDogMCwKKwkJICAgKGh3X2xyb190b3RfZmx1c2hfY250WzFdKSA/CisJCSAgICBod19scm9fdG90X2FnZ19jbnRbMV0gLyBod19scm9fdG90X2ZsdXNoX2NudFsxXSA6IDAsCisJCSAgIChod19scm9fdG90X2ZsdXNoX2NudFsyXSkgPworCQkgICAgaHdfbHJvX3RvdF9hZ2dfY250WzJdIC8gaHdfbHJvX3RvdF9mbHVzaF9jbnRbMl0gOiAwLAorCQkgICAoaHdfbHJvX3RvdF9mbHVzaF9jbnRbM10pID8KKyAgICAgICAgICAgICAgICAgICAgaHdfbHJvX3RvdF9hZ2dfY250WzNdIC8gaHdfbHJvX3RvdF9mbHVzaF9jbnRbM10gOiAwLAorCQkgICAoaHdfbHJvX3RvdF9mbHVzaF9jbnRbMF0gKyBod19scm9fdG90X2ZsdXNoX2NudFsxXSArCisJCSAgICBod19scm9fdG90X2ZsdXNoX2NudFsyXSArIGh3X2xyb190b3RfZmx1c2hfY250WzNdKSA/CisJCSAgICAoKGh3X2xyb190b3RfYWdnX2NudFswXSArIGh3X2xyb190b3RfYWdnX2NudFsxXSArCisJCSAgICAgIGh3X2xyb190b3RfYWdnX2NudFsyXSArIGh3X2xyb190b3RfYWdnX2NudFszXSkgLworCQkgICAgIChod19scm9fdG90X2ZsdXNoX2NudFswXSArIGh3X2xyb190b3RfZmx1c2hfY250WzFdICsKKwkJICAgICAgaHdfbHJvX3RvdF9mbHVzaF9jbnRbMl0gKyBod19scm9fdG90X2ZsdXNoX2NudFszXSkpIDogMCk7CisKKwkvKiAgU3RhdGlzdGljcyBvZiBhZ2dyZWdhdGlvbiBzaXplIGNvdW50cyAqLworCXNlcV9wdXRzKHNlcSwgIkhXIExSTyBmbHVzaCBwa3QgbGVuOlxuIik7CisJc2VxX3B1dHMoc2VxLCAiIExlbmd0aCAgfCBSSU5HNCAgfCBSSU5HNSAgfCBSSU5HNiAgfCBSSU5HNyBUb3RhbFxuIik7CisJZm9yIChpID0gMDsgaSA8IDE1OyBpKyspIHsKKwkJc2VxX3ByaW50ZihzZXEsICIlZH4lZDogJWQgICAgICAlZCAgICAgICVkICAgICAgJWQgICAgICAlZFxuIiwKKwkJCSAgIGkgKiA1MDAwLCAoaSArIDEpICogNTAwMCwKKwkJCSAgIGh3X2xyb19hZ2dfc2l6ZV9jbnRbMF1baV0sIGh3X2xyb19hZ2dfc2l6ZV9jbnRbMV1baV0sCisJCQkgICBod19scm9fYWdnX3NpemVfY250WzJdW2ldLCBod19scm9fYWdnX3NpemVfY250WzNdW2ldLAorCQkJICAgaHdfbHJvX2FnZ19zaXplX2NudFswXVtpXSArCisJCQkgICBod19scm9fYWdnX3NpemVfY250WzFdW2ldICsKKwkJCSAgIGh3X2xyb19hZ2dfc2l6ZV9jbnRbMl1baV0gKworCQkJICAgaHdfbHJvX2FnZ19zaXplX2NudFszXVtpXSk7CisJfQorCisJc2VxX3B1dHMoc2VxLCAiRmx1c2ggcmVhc29uOiAgIFJJTkc0IHwgUklORzUgfCBSSU5HNiB8IFJJTkc3IFRvdGFsXG4iKTsKKwlzZXFfcHJpbnRmKHNlcSwgIkFHRyB0aW1lb3V0OiAgICAgICVkICAgICAgJWQgICAgICAlZCAgICAgICVkICAgICAgJWRcbiIsCisJCSAgIGh3X2xyb19hZ2dfZmx1c2hfY250WzBdLCBod19scm9fYWdnX2ZsdXNoX2NudFsxXSwKKwkJICAgaHdfbHJvX2FnZ19mbHVzaF9jbnRbMl0sIGh3X2xyb19hZ2dfZmx1c2hfY250WzNdLAorCQkgICAoaHdfbHJvX2FnZ19mbHVzaF9jbnRbMF0gKyBod19scm9fYWdnX2ZsdXNoX2NudFsxXSArCisJCSAgICBod19scm9fYWdnX2ZsdXNoX2NudFsyXSArIGh3X2xyb19hZ2dfZmx1c2hfY250WzNdKSk7CisKKwlzZXFfcHJpbnRmKHNlcSwgIkFHRSB0aW1lb3V0OiAgICAgICVkICAgICAgJWQgICAgICAlZCAgICAgICVkICAgICAgJWRcbiIsCisJCSAgIGh3X2xyb19hZ2VfZmx1c2hfY250WzBdLCBod19scm9fYWdlX2ZsdXNoX2NudFsxXSwKKwkJICAgaHdfbHJvX2FnZV9mbHVzaF9jbnRbMl0sIGh3X2xyb19hZ2VfZmx1c2hfY250WzNdLAorCQkgICAoaHdfbHJvX2FnZV9mbHVzaF9jbnRbMF0gKyBod19scm9fYWdlX2ZsdXNoX2NudFsxXSArCisJCSAgICBod19scm9fYWdlX2ZsdXNoX2NudFsyXSArIGh3X2xyb19hZ2VfZmx1c2hfY250WzNdKSk7CisKKwlzZXFfcHJpbnRmKHNlcSwgIk5vdCBpbi1zZXF1ZW5jZTogICVkICAgICAgJWQgICAgICAlZCAgICAgICVkICAgICAgJWRcbiIsCisJCSAgIGh3X2xyb19zZXFfZmx1c2hfY250WzBdLCBod19scm9fc2VxX2ZsdXNoX2NudFsxXSwKKwkJICAgaHdfbHJvX3NlcV9mbHVzaF9jbnRbMl0sIGh3X2xyb19zZXFfZmx1c2hfY250WzNdLAorCQkgICAoaHdfbHJvX3NlcV9mbHVzaF9jbnRbMF0gKyBod19scm9fc2VxX2ZsdXNoX2NudFsxXSArCisJCSAgICBod19scm9fc2VxX2ZsdXNoX2NudFsyXSArIGh3X2xyb19zZXFfZmx1c2hfY250WzNdKSk7CisKKwlzZXFfcHJpbnRmKHNlcSwgIlRpbWVzdGFtcDogICAgICAgICVkICAgICAgJWQgICAgICAlZCAgICAgICVkICAgICAgJWRcbiIsCisJCSAgIGh3X2xyb190aW1lc3RhbXBfZmx1c2hfY250WzBdLAorCQkgICBod19scm9fdGltZXN0YW1wX2ZsdXNoX2NudFsxXSwKKwkJICAgaHdfbHJvX3RpbWVzdGFtcF9mbHVzaF9jbnRbMl0sCisJCSAgIGh3X2xyb190aW1lc3RhbXBfZmx1c2hfY250WzNdLAorCQkgICAoaHdfbHJvX3RpbWVzdGFtcF9mbHVzaF9jbnRbMF0gKworCQkgICAgaHdfbHJvX3RpbWVzdGFtcF9mbHVzaF9jbnRbMV0gKworCQkgICAgaHdfbHJvX3RpbWVzdGFtcF9mbHVzaF9jbnRbMl0gKworCQkgICAgaHdfbHJvX3RpbWVzdGFtcF9mbHVzaF9jbnRbM10pKTsKKworCXNlcV9wcmludGYoc2VxLCAiTm8gTFJPIHJ1bGU6ICAgICAgJWQgICAgICAlZCAgICAgICVkICAgICAgJWQgICAgICAlZFxuIiwKKwkJICAgaHdfbHJvX25vcnVsZV9mbHVzaF9jbnRbMF0sCisJCSAgIGh3X2xyb19ub3J1bGVfZmx1c2hfY250WzFdLAorCQkgICBod19scm9fbm9ydWxlX2ZsdXNoX2NudFsyXSwKKwkJICAgaHdfbHJvX25vcnVsZV9mbHVzaF9jbnRbM10sCisJCSAgIChod19scm9fbm9ydWxlX2ZsdXNoX2NudFswXSArCisJCSAgICBod19scm9fbm9ydWxlX2ZsdXNoX2NudFsxXSArCisJCSAgICBod19scm9fbm9ydWxlX2ZsdXNoX2NudFsyXSArCisJCSAgICBod19scm9fbm9ydWxlX2ZsdXNoX2NudFszXSkpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBod19scm9fc3RhdHNfcmVhZF93cmFwcGVyKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworCXN0cnVjdCBtdGtfZXRoICpldGggPSBnX2V0aDsKKworCWlmIChNVEtfSEFTX0NBUFMoZXRoLT5zb2MtPmNhcHMsIE1US19ORVRTWVNfVjIpKQorCQlod19scm9fc3RhdHNfcmVhZF92MihzZXEsIHYpOworCWVsc2UKKwkJaHdfbHJvX3N0YXRzX3JlYWRfdjEoc2VxLCB2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGh3X2xyb19zdGF0c19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBod19scm9fc3RhdHNfcmVhZF93cmFwcGVyLCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHdfbHJvX3N0YXRzX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBod19scm9fc3RhdHNfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLndyaXRlID0gaHdfbHJvX3N0YXRzX3dyaXRlLAorCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UKK307CisKK2ludCBod2xyb19hZ2dfY250X2N0cmwoaW50IGNudCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDE7IGkgPD0gTVRLX0hXX0xST19SSU5HX05VTTsgaSsrKQorCQlTRVRfUERNQV9SWFJJTkdfTUFYX0FHR19DTlQoZ19ldGgsIGksIGNudCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGh3bHJvX2FnZ190aW1lX2N0cmwoaW50IHRpbWUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAxOyBpIDw9IE1US19IV19MUk9fUklOR19OVU07IGkrKykKKwkJU0VUX1BETUFfUlhSSU5HX0FHR19USU1FKGdfZXRoLCBpLCB0aW1lKTsKKworCXJldHVybiAwOworfQorCitpbnQgaHdscm9fYWdlX3RpbWVfY3RybChpbnQgdGltZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDE7IGkgPD0gTVRLX0hXX0xST19SSU5HX05VTTsgaSsrKQorCQlTRVRfUERNQV9SWFJJTkdfQUdFX1RJTUUoZ19ldGgsIGksIHRpbWUpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBod2xyb190aHJlc2hvbGRfY3RybChpbnQgYmFuZHdpZHRoKQoreworCVNFVF9QRE1BX0xST19CV19USFJFU0hPTEQoZ19ldGgsIGJhbmR3aWR0aCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGh3bHJvX3JpbmdfZW5hYmxlX2N0cmwoaW50IGVuYWJsZSkKK3sKKwlpbnQgaTsKKworCXByX2luZm8oIlslc10gJXMgSFcgTFJPIHJpbmdzXG4iLCBfX2Z1bmNfXywgKGVuYWJsZSkgPyAiRW5hYmxlIiA6ICJEaXNhYmxlIik7CisKKwlmb3IgKGkgPSAxOyBpIDw9IE1US19IV19MUk9fUklOR19OVU07IGkrKykKKwkJU0VUX1BETUFfUlhSSU5HX1ZBTElEKGdfZXRoLCBpLCBlbmFibGUpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBod2xyb19zdGF0c19lbmFibGVfY3RybChpbnQgZW5hYmxlKQoreworCXByX2luZm8oIlslc10gJXMgSFcgTFJPIHN0YXRpc3RpY3NcbiIsIF9fZnVuY19fLCAoZW5hYmxlKSA/ICJFbmFibGUiIDogIkRpc2FibGUiKTsKKwltdGtfaHdscm9fc3RhdHNfZWJsID0gZW5hYmxlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBtdGtfbHJvX2RiZ19mdW5jIGxyb19kYmdfZnVuY1tdID0geworCVswXSA9IGh3bHJvX2FnZ19jbnRfY3RybCwKKwlbMV0gPSBod2xyb19hZ2dfdGltZV9jdHJsLAorCVsyXSA9IGh3bHJvX2FnZV90aW1lX2N0cmwsCisJWzNdID0gaHdscm9fdGhyZXNob2xkX2N0cmwsCisJWzRdID0gaHdscm9fcmluZ19lbmFibGVfY3RybCwKKwlbNV0gPSBod2xyb19zdGF0c19lbmFibGVfY3RybCwKK307CisKK3NzaXplX3QgaHdfbHJvX2F1dG9fdGxiX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmRhdGEpCit7CisJY2hhciBidWZbMzJdOworCWNoYXIgKnBfYnVmOworCWNoYXIgKnBfdG9rZW4gPSBOVUxMOworCWNoYXIgKnBfZGVsaW1pdGVyID0gIiBcdCI7CisJbG9uZyB4ID0gMCwgeSA9IDA7CisJdTMyIGxlbiA9IGNvdW50OworCWludCByZXQ7CisKKwlpZiAobGVuID49IHNpemVvZihidWYpKSB7CisJCXByX2luZm8oIklucHV0IGhhbmRsaW5nIGZhaWwhXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIGJ1ZmZlciwgbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlidWZbbGVuXSA9ICdcMCc7CisKKwlwX2J1ZiA9IGJ1ZjsKKwlwX3Rva2VuID0gc3Ryc2VwKCZwX2J1ZiwgcF9kZWxpbWl0ZXIpOworCWlmICghcF90b2tlbikKKwkJeCA9IDA7CisJZWxzZQorCQlyZXQgPSBrc3RydG9sKHBfdG9rZW4sIDEwLCAmeCk7CisKKwlwX3Rva2VuID0gc3Ryc2VwKCZwX2J1ZiwgIlx0XG4gIik7CisJaWYgKHBfdG9rZW4pCisJCXJldCA9IGtzdHJ0b2wocF90b2tlbiwgMTAsICZ5KTsKKworCWlmIChscm9fZGJnX2Z1bmNbeF0gJiYgKEFSUkFZX1NJWkUobHJvX2RiZ19mdW5jKSA+IHgpKQorCQkoKmxyb19kYmdfZnVuY1t4XSkgKHkpOworCisJcmV0dXJuIGNvdW50OworfQorCit2b2lkIGh3X2xyb19hdXRvX3RsYl9kdW1wX3YxKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB1MzIgaW5kZXgpCit7CisJaW50IGk7CisJc3RydWN0IG10a19scm9fYWx0X3YxIGFsdDsKKwlfX2JlMzIgYWRkcjsKKwl1MzIgdGxiX2luZm9bOV07CisJdTMyIGR3X2xlbiwgY250LCBwcmlvcml0eTsKKwl1MzIgZW50cnk7CisKKwlpZiAoaW5kZXggPiA0KQorCQlpbmRleCA9IGluZGV4IC0gMTsKKwllbnRyeSA9IChpbmRleCAqIDkpICsgMTsKKworCS8qIHJlYWQgdmFsaWQgZW50cmllcyBvZiB0aGUgYXV0by1sZWFybiB0YWJsZSAqLworCW10a193MzIoZ19ldGgsIGVudHJ5LCBNVEtfRkVfQUxUX0NGOCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKQorCQl0bGJfaW5mb1tpXSA9IG10a19yMzIoZ19ldGgsIE1US19GRV9BTFRfU0VRX0NGQyk7CisKKwltZW1jcHkoJmFsdCwgdGxiX2luZm8sIHNpemVvZihzdHJ1Y3QgbXRrX2xyb19hbHRfdjEpKTsKKworCWR3X2xlbiA9IGFsdC5hbHRfaW5mbzcuZHdfbGVuOworCWNudCA9IGFsdC5hbHRfaW5mbzYuY250OworCisJaWYgKG10a19yMzIoZ19ldGgsIE1US19QRE1BX0xST19DVFJMX0RXMCkgJiBNVEtfTFJPX0FMVF9QS1RfQ05UX01PREUpCisJCXByaW9yaXR5ID0gY250OwkJLyogcGFja2V0IGNvdW50ICovCisJZWxzZQorCQlwcmlvcml0eSA9IGR3X2xlbjsJLyogYnl0ZSBjb3VudCAqLworCisJLyogZHVtcCB2YWxpZCBlbnRyaWVzIG9mIHRoZSBhdXRvLWxlYXJuIHRhYmxlICovCisJaWYgKGluZGV4ID49IDQpCisJCXNlcV9wcmludGYoc2VxLCAiXG49PT09PSBUQUJMRSBFbnRyeTogJWQgKEFjdCkgPT09PT1cbiIsIGluZGV4KTsKKwllbHNlCisJCXNlcV9wcmludGYoc2VxLCAiXG49PT09PSBUQUJMRSBFbnRyeTogJWQgKExSVSkgPT09PT1cbiIsIGluZGV4KTsKKworCWlmIChhbHQuYWx0X2luZm84LmlwdjQpIHsKKwkJYWRkciA9IGh0b25sKGFsdC5hbHRfaW5mbzEuc2lwMCk7CisJCXNlcV9wcmludGYoc2VxLCAiU0lQID0gJXBJNCAoSVB2NClcbiIsICZhZGRyKTsKKwl9IGVsc2UgeworCQlzZXFfcHJpbnRmKHNlcSwgIlNJUCA9ICUwOFg6JTA4WDolMDhYOiUwOFggKElQdjYpXG4iLAorCQkJICAgYWx0LmFsdF9pbmZvNC5zaXAzLCBhbHQuYWx0X2luZm8zLnNpcDIsCisJCQkgICBhbHQuYWx0X2luZm8yLnNpcDEsIGFsdC5hbHRfaW5mbzEuc2lwMCk7CisJfQorCisJc2VxX3ByaW50ZihzZXEsICJESVBfSUQgPSAlZFxuIiwgYWx0LmFsdF9pbmZvOC5kaXBfaWQpOworCXNlcV9wcmludGYoc2VxLCAiVENQIFNQT1JUID0gJWQgfCBUQ1AgRFBPUlQgPSAlZFxuIiwKKwkJICAgYWx0LmFsdF9pbmZvMC5zdHAsIGFsdC5hbHRfaW5mbzAuZHRwKTsKKwlzZXFfcHJpbnRmKHNlcSwgIlZMQU5fVklEX1ZMRCA9ICVkXG4iLCBhbHQuYWx0X2luZm82LnZsYW5fdmlkX3ZsZCk7CisJc2VxX3ByaW50ZihzZXEsICJWTEFOMSA9ICVkIHwgVkxBTjIgPSAlZCB8IFZMQU4zID0gJWQgfCBWTEFONCA9JWRcbiIsCisJCSAgIChhbHQuYWx0X2luZm81LnZsYW5fdmlkMCAmIDB4ZmZmKSwKKwkJICAgKChhbHQuYWx0X2luZm81LnZsYW5fdmlkMCA+PiAxMikgJiAweGZmZiksCisJCSAgICgoYWx0LmFsdF9pbmZvNi52bGFuX3ZpZDEgPDwgOCkgfAorCQkgICAoKGFsdC5hbHRfaW5mbzUudmxhbl92aWQwID4+IDI0KSAmIDB4ZmZmKSksCisJCSAgICgoYWx0LmFsdF9pbmZvNi52bGFuX3ZpZDEgPj4gNCkgJiAweGZmZikpOworCXNlcV9wcmludGYoc2VxLCAiVFBVVCA9ICVkIHwgRlJFUSA9ICVkXG4iLCBkd19sZW4sIGNudCk7CisJc2VxX3ByaW50ZihzZXEsICJQUklPUklUWSA9ICVkXG4iLCBwcmlvcml0eSk7Cit9CisKK3ZvaWQgaHdfbHJvX2F1dG9fdGxiX2R1bXBfdjIoc3RydWN0IHNlcV9maWxlICpzZXEsIHUzMiBpbmRleCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgbXRrX2xyb19hbHRfdjIgYWx0OworCXUzMiBzY29yZSA9IDAsIGlwdjQgPSAwOworCXUzMiBpcHY2WzRdID0geyAwIH07CisJdTMyIHRsYl9pbmZvWzEyXTsKKworCS8qIHJlYWQgdmFsaWQgZW50cmllcyBvZiB0aGUgYXV0by1sZWFybiB0YWJsZSAqLworCW10a193MzIoZ19ldGgsIGluZGV4IDw8IE1US19MUk9fQUxUX0lOREVYX09GRlNFVCwgTVRLX0xST19BTFRfREJHKTsKKworCWZvciAoaSA9IDA7IGkgPCAxMTsgaSsrKQorCQl0bGJfaW5mb1tpXSA9IG10a19yMzIoZ19ldGgsIE1US19MUk9fQUxUX0RCR19EQVRBKTsKKworCW1lbWNweSgmYWx0LCB0bGJfaW5mbywgc2l6ZW9mKHN0cnVjdCBtdGtfbHJvX2FsdF92MikpOworCisJaWYgKG10a19yMzIoZ19ldGgsIE1US19QRE1BX0xST19DVFJMX0RXMCkgJiBNVEtfTFJPX0FMVF9QS1RfQ05UX01PREUpCisJCXNjb3JlID0gMTsJLyogcGFja2V0IGNvdW50ICovCisJZWxzZQorCQlzY29yZSA9IDA7CS8qIGJ5dGUgY291bnQgKi8KKworCS8qIGR1bXAgdmFsaWQgZW50cmllcyBvZiB0aGUgYXV0by1sZWFybiB0YWJsZSAqLworCWlmIChhbHQuYWx0X2luZm8wLnZhbGlkKSB7CisJCWlmIChpbmRleCA8IDUpCisJCQlzZXFfcHJpbnRmKHNlcSwKKwkJCQkgICAiXG49PT09PSBUQUJMRSBFbnRyeTogJWQgKG9uZ2luZykgPT09PT1cbiIsCisJCQkJICAgaW5kZXgpOworCQllbHNlCisJCQlzZXFfcHJpbnRmKHNlcSwKKwkJCQkgICAiXG49PT09PSBUQUJMRSBFbnRyeTogJWQgKGNhbmRpZGF0ZSkgPT09PT1cbiIsCisJCQkJICAgaW5kZXgpOworCisJCWlmIChhbHQuYWx0X2luZm8xLnY0X3ZhbGlkKSB7CisJCQlpcHY0ID0gKGFsdC5hbHRfaW5mbzQuc2lwMF9oIDw8IDIzKSB8CisJCQkJYWx0LmFsdF9pbmZvNS5zaXAwX2w7CisJCQlzZXFfcHJpbnRmKHNlcSwgIlNJUCA9IDB4JXg6IChJUHY0KVxuIiwgaXB2NCk7CisKKwkJCWlwdjQgPSAoYWx0LmFsdF9pbmZvOC5kaXAwX2ggPDwgMjMpIHwKKwkJCQlhbHQuYWx0X2luZm85LmRpcDBfbDsKKwkJCXNlcV9wcmludGYoc2VxLCAiRElQID0gMHgleDogKElQdjQpXG4iLCBpcHY0KTsKKwkJfSBlbHNlIGlmIChhbHQuYWx0X2luZm8xLnY2X3ZhbGlkKSB7CisJCQlpcHY2WzNdID0gKGFsdC5hbHRfaW5mbzEuc2lwM19oIDw8IDIzKSB8CisJCQkJICAgKGFsdC5hbHRfaW5mbzIuc2lwM19sIDw8IDkpOworCQkJaXB2NlsyXSA9IChhbHQuYWx0X2luZm8yLnNpcDJfaCA8PCAyMykgfAorCQkJCSAgIChhbHQuYWx0X2luZm8zLnNpcDJfbCA8PCA5KTsKKwkJCWlwdjZbMV0gPSAoYWx0LmFsdF9pbmZvMy5zaXAxX2ggPDwgMjMpIHwKKwkJCQkgICAoYWx0LmFsdF9pbmZvNC5zaXAxX2wgPDwgOSk7CisJCQlpcHY2WzBdID0gKGFsdC5hbHRfaW5mbzQuc2lwMF9oIDw8IDIzKSB8CisJCQkJICAgKGFsdC5hbHRfaW5mbzUuc2lwMF9sIDw8IDkpOworCQkJc2VxX3ByaW50ZihzZXEsICJTSVAgPSAweCV4OjB4JXg6MHgleDoweCV4IChJUHY2KVxuIiwKKwkJCQkgICBpcHY2WzNdLCBpcHY2WzJdLCBpcHY2WzFdLCBpcHY2WzBdKTsKKworCQkJaXB2NlszXSA9IChhbHQuYWx0X2luZm81LmRpcDNfaCA8PCAyMykgfAorCQkJCSAgIChhbHQuYWx0X2luZm82LmRpcDNfbCA8PCA5KTsKKwkJCWlwdjZbMl0gPSAoYWx0LmFsdF9pbmZvNi5kaXAyX2ggPDwgMjMpIHwKKwkJCQkgICAoYWx0LmFsdF9pbmZvNy5kaXAyX2wgPDwgOSk7CisJCQlpcHY2WzFdID0gKGFsdC5hbHRfaW5mbzcuZGlwMV9oIDw8IDIzKSB8CisJCQkJICAgKGFsdC5hbHRfaW5mbzguZGlwMV9sIDw8IDkpOworCQkJaXB2NlswXSA9IChhbHQuYWx0X2luZm84LmRpcDBfaCA8PCAyMykgfAorCQkJCSAgIChhbHQuYWx0X2luZm85LmRpcDBfbCA8PCA5KTsKKwkJCXNlcV9wcmludGYoc2VxLCAiRElQID0gMHgleDoweCV4OjB4JXg6MHgleCAoSVB2NilcbiIsCisJCQkJICAgaXB2NlszXSwgaXB2NlsyXSwgaXB2NlsxXSwgaXB2NlswXSk7CisJCX0KKworCQlzZXFfcHJpbnRmKHNlcSwgIlRDUCBTUE9SVCA9ICVkIHwgVENQIERQT1JUID0gJWRcbiIsCisJCQkgICAoYWx0LmFsdF9pbmZvOS5zcF9oIDw8IDcpIHwgKGFsdC5hbHRfaW5mbzEwLnNwX2wpLAorCQkJICAgYWx0LmFsdF9pbmZvMTAuZHApOworCX0KK30KKworaW50IGh3X2xyb19hdXRvX3RsYl9yZWFkKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworCWludCBpOworCXUzMiByZWdfdmFsOworCXUzMiByZWdfb3AxLCByZWdfb3AyLCByZWdfb3AzLCByZWdfb3A0OworCXUzMiBhZ2dfY250LCBhZ2dfdGltZSwgYWdlX3RpbWU7CisKKwlzZXFfcHV0cyhzZXEsICJVc2FnZSBvZiAvcHJvYy9tdGtldGgvaHdfbHJvX2F1dG9fdGxiOlxuIik7CisJc2VxX3B1dHMoc2VxLCAiZWNobyBbZnVuY3Rpb25dIFtzZXR0aW5nXSA+IC9wcm9jL210a2V0aC9od19scm9fYXV0b190bGJcbiIpOworCXNlcV9wdXRzKHNlcSwgIkZ1bmN0aW9uczpcbiIpOworCXNlcV9wdXRzKHNlcSwgIlswXSA9IGh3bHJvX2FnZ19jbnRfY3RybFxuIik7CisJc2VxX3B1dHMoc2VxLCAiWzFdID0gaHdscm9fYWdnX3RpbWVfY3RybFxuIik7CisJc2VxX3B1dHMoc2VxLCAiWzJdID0gaHdscm9fYWdlX3RpbWVfY3RybFxuIik7CisJc2VxX3B1dHMoc2VxLCAiWzNdID0gaHdscm9fdGhyZXNob2xkX2N0cmxcbiIpOworCXNlcV9wdXRzKHNlcSwgIls0XSA9IGh3bHJvX3JpbmdfZW5hYmxlX2N0cmxcbiIpOworCXNlcV9wdXRzKHNlcSwgIls1XSA9IGh3bHJvX3N0YXRzX2VuYWJsZV9jdHJsXG5cbiIpOworCisJaWYgKE1US19IQVNfQ0FQUyhnX2V0aC0+c29jLT5jYXBzLCBNVEtfTkVUU1lTX1YyKSkgeworCQlmb3IgKGkgPSAxOyBpIDw9IDg7IGkrKykKKwkJCWh3X2xyb19hdXRvX3RsYl9kdW1wX3YyKHNlcSwgaSk7CisJfSBlbHNlIHsKKwkJLyogUmVhZCB2YWxpZCBlbnRyaWVzIG9mIHRoZSBhdXRvLWxlYXJuIHRhYmxlICovCisJCW10a193MzIoZ19ldGgsIDAsIE1US19GRV9BTFRfQ0Y4KTsKKwkJcmVnX3ZhbCA9IG10a19yMzIoZ19ldGgsIE1US19GRV9BTFRfU0VRX0NGQyk7CisKKwkJc2VxX3ByaW50ZihzZXEsCisJCQkgICAiSFcgTFJPIEF1dG8tbGVhcm4gVGFibGU6IChNVEtfRkVfQUxUX1NFUV9DRkM9MHgleClcbiIsCisJCQkgICByZWdfdmFsKTsKKworCQlmb3IgKGkgPSA3OyBpID49IDA7IGktLSkgeworCQkJaWYgKHJlZ192YWwgJiAoMSA8PCBpKSkKKwkJCQlod19scm9fYXV0b190bGJfZHVtcF92MShzZXEsIGkpOworCQl9CisJfQorCisJLyogUmVhZCB0aGUgYWdnX3RpbWUvYWdlX3RpbWUvYWdnX2NudCBvZiBMUk8gcmluZ3MgKi8KKwlzZXFfcHV0cyhzZXEsICJcbkhXIExSTyBSaW5nIFNldHRpbmdzXG4iKTsKKworCWZvciAoaSA9IDE7IGkgPD0gTVRLX0hXX0xST19SSU5HX05VTTsgaSsrKSB7CisJCXJlZ19vcDEgPSBtdGtfcjMyKGdfZXRoLCBNVEtfTFJPX0NUUkxfRFcxX0NGRyhpKSk7CisJCXJlZ19vcDIgPSBtdGtfcjMyKGdfZXRoLCBNVEtfTFJPX0NUUkxfRFcyX0NGRyhpKSk7CisJCXJlZ19vcDMgPSBtdGtfcjMyKGdfZXRoLCBNVEtfTFJPX0NUUkxfRFczX0NGRyhpKSk7CisJCXJlZ19vcDQgPSBtdGtfcjMyKGdfZXRoLCBNVEtfUERNQV9MUk9fQ1RSTF9EVzIpOworCisJCWFnZ19jbnQgPQorCQkgICAgKChyZWdfb3AzICYgMHgzKSA8PCA2KSB8CisJCSAgICAoKHJlZ19vcDIgPj4gTVRLX0xST19SSU5HX0FHR19DTlRfTF9PRkZTRVQpICYgMHgzZik7CisJCWFnZ190aW1lID0gKHJlZ19vcDIgPj4gTVRLX0xST19SSU5HX0FHR19USU1FX09GRlNFVCkgJiAweGZmZmY7CisJCWFnZV90aW1lID0KKwkJICAgICgocmVnX29wMiAmIDB4M2YpIDw8IDEwKSB8CisJCSAgICAoKHJlZ19vcDEgPj4gTVRLX0xST19SSU5HX0FHRV9USU1FX0xfT0ZGU0VUKSAmIDB4M2ZmKTsKKwkJc2VxX3ByaW50ZihzZXEsCisJCQkgICAiUmluZ1slZF06IE1BWF9BR0dfQ05UPSVkLCBBR0dfVElNRT0lZCwgQUdFX1RJTUU9JWQsIFRocmVzaG9sZD0lZFxuIiwKKwkJCSAgIChNVEtfSEFTX0NBUFMoZ19ldGgtPnNvYy0+Y2FwcywgTVRLX05FVFNZU19WMikpPyBpKzMgOiBpLAorCQkJICAgYWdnX2NudCwgYWdnX3RpbWUsIGFnZV90aW1lLCByZWdfb3A0KTsKKwl9CisKKwlzZXFfcHV0cyhzZXEsICJcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaHdfbHJvX2F1dG9fdGxiX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGh3X2xyb19hdXRvX3RsYl9yZWFkLCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHdfbHJvX2F1dG9fdGxiX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBod19scm9fYXV0b190bGJfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLndyaXRlID0gaHdfbHJvX2F1dG9fdGxiX3dyaXRlLAorCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UKK307CisKK3N0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19yZWdfZGlyOworc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19lc3dfY250LCAqcHJvY19kYmdfcmVnczsKKworaW50IGRlYnVnX3Byb2NfaW5pdChzdHJ1Y3QgbXRrX2V0aCAqZXRoKQoreworCWdfZXRoID0gZXRoOworCisJaWYgKCFwcm9jX3JlZ19kaXIpCisJCXByb2NfcmVnX2RpciA9IHByb2NfbWtkaXIoUFJPQ1JFR19ESVIsIE5VTEwpOworCisJcHJvY190eF9yaW5nID0KKwkgICAgcHJvY19jcmVhdGUoUFJPQ1JFR19UWFJJTkcsIDAsIHByb2NfcmVnX2RpciwgJnR4X3JpbmdfZm9wcyk7CisJaWYgKCFwcm9jX3R4X3JpbmcpCisJCXByX25vdGljZSgiISEgRkFJTCB0byBjcmVhdGUgJXMgUFJPQyAhIVxuIiwgUFJPQ1JFR19UWFJJTkcpOworCisJcHJvY19yeF9yaW5nID0KKwkgICAgcHJvY19jcmVhdGUoUFJPQ1JFR19SWFJJTkcsIDAsIHByb2NfcmVnX2RpciwgJnJ4X3JpbmdfZm9wcyk7CisJaWYgKCFwcm9jX3J4X3JpbmcpCisJCXByX25vdGljZSgiISEgRkFJTCB0byBjcmVhdGUgJXMgUFJPQyAhIVxuIiwgUFJPQ1JFR19SWFJJTkcpOworCisJcHJvY19lc3dfY250ID0KKwkgICAgcHJvY19jcmVhdGUoUFJPQ1JFR19FU1dfQ05ULCAwLCBwcm9jX3JlZ19kaXIsICZzd2l0Y2hfY291bnRfZm9wcyk7CisJaWYgKCFwcm9jX2Vzd19jbnQpCisJCXByX25vdGljZSgiISEgRkFJTCB0byBjcmVhdGUgJXMgUFJPQyAhIVxuIiwgUFJPQ1JFR19FU1dfQ05UKTsKKworCXByb2NfZGJnX3JlZ3MgPQorCSAgICBwcm9jX2NyZWF0ZShQUk9DUkVHX0RCR19SRUdTLCAwLCBwcm9jX3JlZ19kaXIsICZkYmdfcmVnc19mb3BzKTsKKwlpZiAoIXByb2NfZGJnX3JlZ3MpCisJCXByX25vdGljZSgiISEgRkFJTCB0byBjcmVhdGUgJXMgUFJPQyAhIVxuIiwgUFJPQ1JFR19EQkdfUkVHUyk7CisKKwlpZiAoZ19ldGgtPmh3bHJvKSB7CisJCXByb2NfaHdfbHJvX3N0YXRzID0KKwkJCXByb2NfY3JlYXRlKFBST0NSRUdfSFdfTFJPX1NUQVRTLCAwLCBwcm9jX3JlZ19kaXIsCisJCQkJICAgICZod19scm9fc3RhdHNfZm9wcyk7CisJCWlmICghcHJvY19od19scm9fc3RhdHMpCisJCQlwcl9pbmZvKCIhISBGQUlMIHRvIGNyZWF0ZSAlcyBQUk9DICEhXG4iLCBQUk9DUkVHX0hXX0xST19TVEFUUyk7CisKKwkJcHJvY19od19scm9fYXV0b190bGIgPQorCQkJcHJvY19jcmVhdGUoUFJPQ1JFR19IV19MUk9fQVVUT19UTEIsIDAsIHByb2NfcmVnX2RpciwKKwkJCQkgICAgJmh3X2xyb19hdXRvX3RsYl9mb3BzKTsKKwkJaWYgKCFwcm9jX2h3X2xyb19hdXRvX3RsYikKKwkJCXByX2luZm8oIiEhIEZBSUwgdG8gY3JlYXRlICVzIFBST0MgISFcbiIsCisJCQkJUFJPQ1JFR19IV19MUk9fQVVUT19UTEIpOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIGRlYnVnX3Byb2NfZXhpdCh2b2lkKQoreworCWlmIChwcm9jX3R4X3JpbmcpCisJCXJlbW92ZV9wcm9jX2VudHJ5KFBST0NSRUdfVFhSSU5HLCBwcm9jX3JlZ19kaXIpOworCWlmIChwcm9jX3J4X3JpbmcpCisJCXJlbW92ZV9wcm9jX2VudHJ5KFBST0NSRUdfUlhSSU5HLCBwcm9jX3JlZ19kaXIpOworCisJaWYgKHByb2NfZXN3X2NudCkKKwkJcmVtb3ZlX3Byb2NfZW50cnkoUFJPQ1JFR19FU1dfQ05ULCBwcm9jX3JlZ19kaXIpOworCisJaWYgKHByb2NfcmVnX2RpcikKKwkJcmVtb3ZlX3Byb2NfZW50cnkoUFJPQ1JFR19ESVIsIDApOworCisJaWYgKHByb2NfZGJnX3JlZ3MpCisJCXJlbW92ZV9wcm9jX2VudHJ5KFBST0NSRUdfREJHX1JFR1MsIHByb2NfcmVnX2Rpcik7CisKKwlpZiAoZ19ldGgtPmh3bHJvKSB7CisJCWlmIChwcm9jX2h3X2xyb19zdGF0cykKKwkJCXJlbW92ZV9wcm9jX2VudHJ5KFBST0NSRUdfSFdfTFJPX1NUQVRTLCBwcm9jX3JlZ19kaXIpOworCisJCWlmIChwcm9jX2h3X2xyb19hdXRvX3RsYikKKwkJCXJlbW92ZV9wcm9jX2VudHJ5KFBST0NSRUdfSFdfTFJPX0FVVE9fVExCLCBwcm9jX3JlZ19kaXIpOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX2RiZy5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX2RiZy5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVhMTQ3YjcKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfZGJnLmgKQEAgLTAsMCArMSwyODQgQEAKKy8qCisgKiAgIENvcHlyaWdodCAoQykgMjAxOCBNZWRpYVRlayBJbmMuCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNiBKb2huIENyaXNwaW4gPGJsb2dpY0BvcGVud3J0Lm9yZz4KKyAqICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTYgRmVsaXggRmlldGthdSA8bmJkQG9wZW53cnQub3JnPgorICogICBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBNaWNoYWVsIExlZSA8aWd2dGVlQGdtYWlsLmNvbT4KKyAqLworCisjaWZuZGVmIE1US19FVEhfREJHX0gKKyNkZWZpbmUgTVRLX0VUSF9EQkdfSAorCisvKiBEZWJ1ZyBQdXJwb3NlIFJlZ2lzdGVyICovCisjZGVmaW5lIE1US19QU0VfRlFGQ19DRkcJCTB4MTAwCisjZGVmaW5lIE1US19GRV9DRE0xX0ZTTQkJCTB4MjIwCisjZGVmaW5lIE1US19GRV9DRE0yX0ZTTQkJCTB4MjI0CisjZGVmaW5lIE1US19GRV9DRE0zX0ZTTQkJCTB4MjM4CisjZGVmaW5lIE1US19GRV9DRE00X0ZTTQkJCTB4Mjk4CisjZGVmaW5lIE1US19GRV9HRE0xX0ZTTQkJCTB4MjI4CisjZGVmaW5lIE1US19GRV9HRE0yX0ZTTQkJCTB4MjJDCisjZGVmaW5lIE1US19GRV9QU0VfRlJFRQkJCTB4MjQwCisjZGVmaW5lIE1US19GRV9EUk9QX0ZRCQkJMHgyNDQKKyNkZWZpbmUgTVRLX0ZFX0RST1BfRkMJCQkweDI0OAorI2RlZmluZSBNVEtfRkVfRFJPUF9QUEUJCQkweDI0QworI2RlZmluZSBNVEtfTUFDX0ZTTSh4KQkJCSgweDEwMTBDICsgKCh4KSAqIDB4MTAwKSkKKyNkZWZpbmUgTVRLX1NHTUlJX0ZBTFNFX0NBUlJJRVJfQ05UKHgpCSgweDEwMDYwMDI4ICsgKCh4KSAqIDB4MTAwMDApKQorI2RlZmluZSBNVEtfU0dNSUlfRUZVU0UJCQkweDExRDAwOEM4CisjZGVmaW5lIE1US19XRURfUlRRTV9HTE9fQ0ZHCQkweDE1MDEwQjAwCisKKyNpZiBkZWZpbmVkKENPTkZJR19NRURJQVRFS19ORVRTWVNfVjIpCisjZGVmaW5lIE1US19QU0VfSVFfU1RBKHgpCQkoMHgxODAgKyAoeCkgKiAweDQpCisjZGVmaW5lIE1US19QU0VfT1FfU1RBKHgpCQkoMHgxQTAgKyAoeCkgKiAweDQpCisjZWxzZQorI2RlZmluZSBNVEtfUFNFX0lRX1NUQSh4KQkJKDB4MTEwICsgKHgpICogMHg0KQorI2RlZmluZSBNVEtfUFNFX09RX1NUQSh4KQkJKDB4MTE4ICsgKHgpICogMHg0KQorI2VuZGlmCisKKyNkZWZpbmUgTVRLRVRIX01JSV9SRUFEICAgICAgICAgICAgICAgICAgMHg4OUYzCisjZGVmaW5lIE1US0VUSF9NSUlfV1JJVEUgICAgICAgICAgICAgICAgIDB4ODlGNAorI2RlZmluZSBNVEtFVEhfRVNXX1JFR19SRUFEICAgICAgICAgICAgICAweDg5RjEKKyNkZWZpbmUgTVRLRVRIX0VTV19SRUdfV1JJVEUgICAgICAgICAgICAgMHg4OUYyCisjZGVmaW5lIE1US0VUSF9NSUlfUkVBRF9DTDQ1ICAgICAgICAgICAgIDB4ODlGQworI2RlZmluZSBNVEtFVEhfTUlJX1dSSVRFX0NMNDUgICAgICAgICAgICAweDg5RkQKKyNkZWZpbmUgUkVHX0VTV19NQVggICAgICAgICAgICAgICAgICAgICAweEZDCisKKyNkZWZpbmUgUFJPQ1JFR19FU1dfQ05UCQkJImVzd19jbnQiCisjZGVmaW5lIFBST0NSRUdfVFhSSU5HCQkJInR4X3JpbmciCisjZGVmaW5lIFBST0NSRUdfUlhSSU5HCQkJInJ4X3JpbmciCisjZGVmaW5lIFBST0NSRUdfRElSCQkJIm10a2V0aCIKKyNkZWZpbmUgUFJPQ1JFR19EQkdfUkVHUwkJImRiZ19yZWdzIgorI2RlZmluZSBQUk9DUkVHX0hXX0xST19TVEFUUwkJImh3X2xyb19zdGF0cyIKKyNkZWZpbmUgUFJPQ1JFR19IV19MUk9fQVVUT19UTEIJCSJod19scm9fYXV0b190bGIiCisKKy8qIEhXIExSTyBmbHVzaCByZWFzb24gKi8KKyNkZWZpbmUgTVRLX0hXX0xST19BR0dfRkxVU0gJCSgxKQorI2RlZmluZSBNVEtfSFdfTFJPX0FHRV9GTFVTSAkJKDIpCisjZGVmaW5lIE1US19IV19MUk9fTk9UX0lOX1NFUV9GTFVTSAkoMykKKyNkZWZpbmUgTVRLX0hXX0xST19USU1FU1RBTVBfRkxVU0gJKDQpCisjZGVmaW5lIE1US19IV19MUk9fTk9OX1JVTEVfRkxVU0gJKDUpCisKKyNkZWZpbmUgU0VUX1BETUFfUlhSSU5HX01BWF9BR0dfQ05UKGV0aCwgeCwgeSkJCQkJXAorewkJCQkJCQkJCVwKKwl1MzIgcmVnX3ZhbDEgPSBtdGtfcjMyKGV0aCwgTVRLX0xST19DVFJMX0RXMl9DRkcoeCkpOwkJXAorCXUzMiByZWdfdmFsMiA9IG10a19yMzIoZXRoLCBNVEtfTFJPX0NUUkxfRFczX0NGRyh4KSk7CQlcCisJcmVnX3ZhbDEgJj0gfk1US19MUk9fUklOR19BR0dfQ05UX0xfTUFTSzsJCQlcCisJcmVnX3ZhbDIgJj0gfk1US19MUk9fUklOR19BR0dfQ05UX0hfTUFTSzsJCQlcCisJcmVnX3ZhbDEgfD0gKCh5KSAmIDB4M2YpIDw8IE1US19MUk9fUklOR19BR0dfQ05UX0xfT0ZGU0VUOwlcCisJcmVnX3ZhbDIgfD0gKCgoeSkgPj4gNikgJiAweDAzKSA8PAkJCQlcCisJCSAgICAgTVRLX0xST19SSU5HX0FHR19DTlRfSF9PRkZTRVQ7CQkJXAorCW10a193MzIoZXRoLCByZWdfdmFsMSwgTVRLX0xST19DVFJMX0RXMl9DRkcoeCkpOwkJXAorCW10a193MzIoZXRoLCByZWdfdmFsMiwgTVRLX0xST19DVFJMX0RXM19DRkcoeCkpOwkJXAorfQorCisjZGVmaW5lIFNFVF9QRE1BX1JYUklOR19BR0dfVElNRShldGgsIHgsIHkpCQkJCVwKK3sJCQkJCQkJCQlcCisJdTMyIHJlZ192YWwgPSBtdGtfcjMyKGV0aCwgTVRLX0xST19DVFJMX0RXMl9DRkcoeCkpOwkJXAorCXJlZ192YWwgJj0gfk1US19MUk9fUklOR19BR0dfVElNRV9NQVNLOwkJCQlcCisJcmVnX3ZhbCB8PSAoKHkpICYgMHhmZmZmKSA8PCBNVEtfTFJPX1JJTkdfQUdHX1RJTUVfT0ZGU0VUOwlcCisJbXRrX3czMihldGgsIHJlZ192YWwsIE1US19MUk9fQ1RSTF9EVzJfQ0ZHKHgpKTsJCQlcCit9CisKKyNkZWZpbmUgU0VUX1BETUFfUlhSSU5HX0FHRV9USU1FKGV0aCwgeCwgeSkJCQkJXAorewkJCQkJCQkJCVwKKwl1MzIgcmVnX3ZhbDEgPSBtdGtfcjMyKGV0aCwgTVRLX0xST19DVFJMX0RXMV9DRkcoeCkpOwkJXAorCXUzMiByZWdfdmFsMiA9IG10a19yMzIoZXRoLCBNVEtfTFJPX0NUUkxfRFcyX0NGRyh4KSk7CQlcCisJcmVnX3ZhbDEgJj0gfk1US19MUk9fUklOR19BR0VfVElNRV9MX01BU0s7CQkJXAorCXJlZ192YWwyICY9IH5NVEtfTFJPX1JJTkdfQUdFX1RJTUVfSF9NQVNLOwkJCVwKKwlyZWdfdmFsMSB8PSAoKHkpICYgMHgzZmYpIDw8IE1US19MUk9fUklOR19BR0VfVElNRV9MX09GRlNFVDsJXAorCXJlZ192YWwyIHw9ICgoKHkpID4+IDEwKSAmIDB4MDNmKSA8PAkJCQlcCisJCSAgICAgTVRLX0xST19SSU5HX0FHRV9USU1FX0hfT0ZGU0VUOwkJCVwKKwltdGtfdzMyKGV0aCwgcmVnX3ZhbDEsIE1US19MUk9fQ1RSTF9EVzFfQ0ZHKHgpKTsJCVwKKwltdGtfdzMyKGV0aCwgcmVnX3ZhbDIsIE1US19MUk9fQ1RSTF9EVzJfQ0ZHKHgpKTsJCVwKK30KKworI2RlZmluZSBTRVRfUERNQV9MUk9fQldfVEhSRVNIT0xEKGV0aCwgeCkJCQkJXAorewkJCQkJCQkJCVwKKwl1MzIgcmVnX3ZhbCA9IG10a19yMzIoZXRoLCBNVEtfUERNQV9MUk9fQ1RSTF9EVzIpOwkJXAorCXJlZ192YWwgPSAoeCk7CQkJCQkJCVwKKwltdGtfdzMyKGV0aCwgcmVnX3ZhbCwgTVRLX1BETUFfTFJPX0NUUkxfRFcyKTsJCQlcCit9CisKKyNkZWZpbmUgU0VUX1BETUFfUlhSSU5HX1ZBTElEKGV0aCwgeCwgeSkJCQkJXAorewkJCQkJCQkJCVwKKwl1MzIgcmVnX3ZhbCA9IG10a19yMzIoZXRoLCBNVEtfTFJPX0NUUkxfRFcyX0NGRyh4KSk7CQlcCisJcmVnX3ZhbCAmPSB+KDB4MSA8PCBNVEtfUlhfUE9SVF9WQUxJRF9PRkZTRVQpOwkJCVwKKwlyZWdfdmFsIHw9ICgoeSkgJiAweDEpIDw8IE1US19SWF9QT1JUX1ZBTElEX09GRlNFVDsJCVwKKwltdGtfdzMyKGV0aCwgcmVnX3ZhbCwgTVRLX0xST19DVFJMX0RXMl9DRkcoeCkpOwkJCVwKK30KKworc3RydWN0IG10a19scm9fYWx0X3YxX2luZm8wIHsKKwl1MzIgZHRwIDogMTY7CisJdTMyIHN0cCA6IDE2OworfTsKKworc3RydWN0IG10a19scm9fYWx0X3YxX2luZm8xIHsKKwl1MzIgc2lwMCA6IDMyOworfTsKKworc3RydWN0IG10a19scm9fYWx0X3YxX2luZm8yIHsKKwl1MzIgc2lwMSA6IDMyOworfTsKKworc3RydWN0IG10a19scm9fYWx0X3YxX2luZm8zIHsKKwl1MzIgc2lwMiA6IDMyOworfTsKKworc3RydWN0IG10a19scm9fYWx0X3YxX2luZm80IHsKKwl1MzIgc2lwMyA6IDMyOworfTsKKworc3RydWN0IG10a19scm9fYWx0X3YxX2luZm81IHsKKwl1MzIgdmxhbl92aWQwIDogMzI7Cit9OworCitzdHJ1Y3QgbXRrX2xyb19hbHRfdjFfaW5mbzYgeworCXUzMiB2bGFuX3ZpZDEgOiAxNjsKKwl1MzIgdmxhbl92aWRfdmxkIDogNDsKKwl1MzIgY250IDogMTI7Cit9OworCitzdHJ1Y3QgbXRrX2xyb19hbHRfdjFfaW5mbzcgeworCXUzMiBkd19sZW4gOiAzMjsKK307CisKK3N0cnVjdCBtdGtfbHJvX2FsdF92MV9pbmZvOCB7CisJdTMyIGRpcF9pZCA6IDI7CisJdTMyIGlwdjYgOiAxOworCXUzMiBpcHY0IDogMTsKKwl1MzIgcmVzdiA6IDI3OworCXUzMiB2YWxpZCA6IDE7Cit9OworCitzdHJ1Y3QgbXRrX2xyb19hbHRfdjEgeworCXN0cnVjdCBtdGtfbHJvX2FsdF92MV9pbmZvMCBhbHRfaW5mbzA7CisJc3RydWN0IG10a19scm9fYWx0X3YxX2luZm8xIGFsdF9pbmZvMTsKKwlzdHJ1Y3QgbXRrX2xyb19hbHRfdjFfaW5mbzIgYWx0X2luZm8yOworCXN0cnVjdCBtdGtfbHJvX2FsdF92MV9pbmZvMyBhbHRfaW5mbzM7CisJc3RydWN0IG10a19scm9fYWx0X3YxX2luZm80IGFsdF9pbmZvNDsKKwlzdHJ1Y3QgbXRrX2xyb19hbHRfdjFfaW5mbzUgYWx0X2luZm81OworCXN0cnVjdCBtdGtfbHJvX2FsdF92MV9pbmZvNiBhbHRfaW5mbzY7CisJc3RydWN0IG10a19scm9fYWx0X3YxX2luZm83IGFsdF9pbmZvNzsKKwlzdHJ1Y3QgbXRrX2xyb19hbHRfdjFfaW5mbzggYWx0X2luZm84OworfTsKKworc3RydWN0IG10a19scm9fYWx0X3YyX2luZm8wIHsKKwl1MzIgdjJfaWRfaDozOworCXUzMiB2MV9pZDoxMjsKKwl1MzIgdjBfaWQ6MTI7CisJdTMyIHYzX3ZhbGlkOjE7CisJdTMyIHYyX3ZhbGlkOjE7CisJdTMyIHYxX3ZhbGlkOjE7CisJdTMyIHYwX3ZhbGlkOjE7CisJdTMyIHZhbGlkOjE7Cit9OworCitzdHJ1Y3QgbXRrX2xyb19hbHRfdjJfaW5mbzEgeworCXUzMiBzaXAzX2g6OTsKKwl1MzIgdjZfdmFsaWQ6MTsKKwl1MzIgdjRfdmFsaWQ6MTsKKwl1MzIgdjNfaWQ6MTI7CisJdTMyIHYyX2lkX2w6OTsKK307CisKK3N0cnVjdCBtdGtfbHJvX2FsdF92Ml9pbmZvMiB7CisJdTMyIHNpcDJfaDo5OworCXUzMiBzaXAzX2w6MjM7Cit9Oworc3RydWN0IG10a19scm9fYWx0X3YyX2luZm8zIHsKKwl1MzIgc2lwMV9oOjk7CisJdTMyIHNpcDJfbDoyMzsKK307CitzdHJ1Y3QgbXRrX2xyb19hbHRfdjJfaW5mbzQgeworCXUzMiBzaXAwX2g6OTsKKwl1MzIgc2lwMV9sOjIzOworfTsKK3N0cnVjdCBtdGtfbHJvX2FsdF92Ml9pbmZvNSB7CisJdTMyIGRpcDNfaDo5OworCXUzMiBzaXAwX2w6MjM7Cit9Oworc3RydWN0IG10a19scm9fYWx0X3YyX2luZm82IHsKKwl1MzIgZGlwMl9oOjk7CisJdTMyIGRpcDNfbDoyMzsKK307CitzdHJ1Y3QgbXRrX2xyb19hbHRfdjJfaW5mbzcgeworCXUzMiBkaXAxX2g6OTsKKwl1MzIgZGlwMl9sOjIzOworfTsKK3N0cnVjdCBtdGtfbHJvX2FsdF92Ml9pbmZvOCB7CisJdTMyIGRpcDBfaDo5OworCXUzMiBkaXAxX2w6MjM7Cit9Oworc3RydWN0IG10a19scm9fYWx0X3YyX2luZm85IHsKKwl1MzIgc3BfaDo5OworCXUzMiBkaXAwX2w6MjM7Cit9Oworc3RydWN0IG10a19scm9fYWx0X3YyX2luZm8xMCB7CisJdTMyIHJlc3Y6OTsKKwl1MzIgZHA6MTY7CisJdTMyIHNwX2w6NzsKK307CisKK3N0cnVjdCBtdGtfbHJvX2FsdF92MiB7CisJc3RydWN0IG10a19scm9fYWx0X3YyX2luZm8wIGFsdF9pbmZvMDsKKwlzdHJ1Y3QgbXRrX2xyb19hbHRfdjJfaW5mbzEgYWx0X2luZm8xOworCXN0cnVjdCBtdGtfbHJvX2FsdF92Ml9pbmZvMiBhbHRfaW5mbzI7CisJc3RydWN0IG10a19scm9fYWx0X3YyX2luZm8zIGFsdF9pbmZvMzsKKwlzdHJ1Y3QgbXRrX2xyb19hbHRfdjJfaW5mbzQgYWx0X2luZm80OworCXN0cnVjdCBtdGtfbHJvX2FsdF92Ml9pbmZvNSBhbHRfaW5mbzU7CisJc3RydWN0IG10a19scm9fYWx0X3YyX2luZm82IGFsdF9pbmZvNjsKKwlzdHJ1Y3QgbXRrX2xyb19hbHRfdjJfaW5mbzcgYWx0X2luZm83OworCXN0cnVjdCBtdGtfbHJvX2FsdF92Ml9pbmZvOCBhbHRfaW5mbzg7CisJc3RydWN0IG10a19scm9fYWx0X3YyX2luZm85IGFsdF9pbmZvOTsKKwlzdHJ1Y3QgbXRrX2xyb19hbHRfdjJfaW5mbzEwIGFsdF9pbmZvMTA7Cit9OworCitzdHJ1Y3QgbXRrX2Vzd19yZWcgeworCXVuc2lnbmVkIGludCBvZmY7CisJdW5zaWduZWQgaW50IHZhbDsKK307CisKK3N0cnVjdCBtdGtfbWlpX2lvY3RsX2RhdGEgeworCXUxNiBwaHlfaWQ7CisJdTE2IHJlZ19udW07CisJdW5zaWduZWQgaW50IHZhbF9pbjsKKwl1bnNpZ25lZCBpbnQgdmFsX291dDsKK307CisKKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfRFNBX01UNzUzMCkgfHwgZGVmaW5lZChDT05GSUdfTVQ3NTNYX0dTVykKK3N0YXRpYyBpbmxpbmUgYm9vbCBtdDc1MzBfZXhpc3Qoc3RydWN0IG10a19ldGggKmV0aCkKK3sKKwlyZXR1cm4gdHJ1ZTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIGJvb2wgbXQ3NTMwX2V4aXN0KHN0cnVjdCBtdGtfZXRoICpldGgpCit7CisJcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKK2V4dGVybiB1MzIgX210a19tZGlvX3JlYWQoc3RydWN0IG10a19ldGggKmV0aCwgdTE2IHBoeV9hZGRyLCB1MTYgcGh5X3JlZyk7CitleHRlcm4gdTMyIF9tdGtfbWRpb193cml0ZShzdHJ1Y3QgbXRrX2V0aCAqZXRoLCB1MTYgcGh5X2FkZHIsCisJCSAgICB1MTYgcGh5X3JlZ2lzdGVyLCB1MTYgd3JpdGVfZGF0YSk7CisKK2V4dGVybiB1MzIgbXRrX2NsNDVfaW5kX3JlYWQoc3RydWN0IG10a19ldGggKmV0aCwgdTE2IHBvcnQsIHUxNiBkZXZhZCwgdTE2IHJlZywgdTE2ICpkYXRhKTsKK2V4dGVybiB1MzIgbXRrX2NsNDVfaW5kX3dyaXRlKHN0cnVjdCBtdGtfZXRoICpldGgsIHUxNiBwb3J0LCB1MTYgZGV2YWQsIHUxNiByZWcsIHUxNiBkYXRhKTsKKworaW50IGRlYnVnX3Byb2NfaW5pdChzdHJ1Y3QgbXRrX2V0aCAqZXRoKTsKK3ZvaWQgZGVidWdfcHJvY19leGl0KHZvaWQpOworCitpbnQgbXRrZXRoX2RlYnVnZnNfaW5pdChzdHJ1Y3QgbXRrX2V0aCAqZXRoKTsKK3ZvaWQgbXRrZXRoX2RlYnVnZnNfZXhpdChzdHJ1Y3QgbXRrX2V0aCAqZXRoKTsKK2ludCBtdGtfZG9fcHJpdl9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCk7Cit2b2lkIGh3X2xyb19zdGF0c191cGRhdGUodTMyIHJpbmdfbm8sIHN0cnVjdCBtdGtfcnhfZG1hICpyeGQpOwordm9pZCBod19scm9fZmx1c2hfc3RhdHNfdXBkYXRlKHUzMiByaW5nX25vLCBzdHJ1Y3QgbXRrX3J4X2RtYSAqcnhkKTsKKworI2VuZGlmIC8qIE1US19FVEhfREJHX0ggKi8KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9wYXRoLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfcGF0aC5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRjYjNjOGEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfcGF0aC5jCkBAIC0wLDAgKzEsMzA1IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLy8gQ29weXJpZ2h0IChjKSAyMDE4LTIwMTkgTWVkaWFUZWsgSW5jLgorCisvKiBBIGxpYnJhcnkgZm9yIGNvbmZpZ3VyaW5nIHBhdGggZnJvbSBHTUFDL0dETSB0byB0YXJnZXQgUEhZCisgKgorICogQXV0aG9yOiBTZWFuIFdhbmcgPHNlYW4ud2FuZ0BtZWRpYXRlay5jb20+CisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKworI2luY2x1ZGUgIm10a19ldGhfc29jLmgiCisKK3N0cnVjdCBtdGtfZXRoX211eGMgeworCWNvbnN0IGNoYXIJKm5hbWU7CisJaW50CQljYXBfYml0OworCWludAkJKCpzZXRfcGF0aCkoc3RydWN0IG10a19ldGggKmV0aCwgaW50IHBhdGgpOworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKm10a19ldGhfcGF0aF9uYW1lKGludCBwYXRoKQoreworCXN3aXRjaCAocGF0aCkgeworCWNhc2UgTVRLX0VUSF9QQVRIX0dNQUMxX1JHTUlJOgorCQlyZXR1cm4gImdtYWMxX3JnbWlpIjsKKwljYXNlIE1US19FVEhfUEFUSF9HTUFDMV9UUkdNSUk6CisJCXJldHVybiAiZ21hYzFfdHJnbWlpIjsKKwljYXNlIE1US19FVEhfUEFUSF9HTUFDMV9TR01JSToKKwkJcmV0dXJuICJnbWFjMV9zZ21paSI7CisJY2FzZSBNVEtfRVRIX1BBVEhfR01BQzJfUkdNSUk6CisJCXJldHVybiAiZ21hYzJfcmdtaWkiOworCWNhc2UgTVRLX0VUSF9QQVRIX0dNQUMyX1NHTUlJOgorCQlyZXR1cm4gImdtYWMyX3NnbWlpIjsKKwljYXNlIE1US19FVEhfUEFUSF9HTUFDMl9HRVBIWToKKwkJcmV0dXJuICJnbWFjMl9nZXBoeSI7CisJY2FzZSBNVEtfRVRIX1BBVEhfR0RNMV9FU1c6CisJCXJldHVybiAiZ2RtMV9lc3ciOworCWRlZmF1bHQ6CisJCXJldHVybiAidW5rbm93biBwYXRoIjsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2V0X211eF9nZG0xX3RvX2dtYWMxX2VzdyhzdHJ1Y3QgbXRrX2V0aCAqZXRoLCBpbnQgcGF0aCkKK3sKKwlib29sIHVwZGF0ZWQgPSB0cnVlOworCXUzMiB2YWwsIG1hc2ssIHNldDsKKworCXN3aXRjaCAocGF0aCkgeworCWNhc2UgTVRLX0VUSF9QQVRIX0dNQUMxX1NHTUlJOgorCQltYXNrID0gfih1MzIpTVRLX01VWF9UT19FU1c7CisJCXNldCA9IDA7CisJCWJyZWFrOworCWNhc2UgTVRLX0VUSF9QQVRIX0dETTFfRVNXOgorCQltYXNrID0gfih1MzIpTVRLX01VWF9UT19FU1c7CisJCXNldCA9IE1US19NVVhfVE9fRVNXOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl1cGRhdGVkID0gZmFsc2U7CisJCWJyZWFrOworCX07CisKKwlpZiAodXBkYXRlZCkgeworCQl2YWwgPSBtdGtfcjMyKGV0aCwgTVRLX01BQ19NSVNDKTsKKwkJdmFsID0gKHZhbCAmIG1hc2spIHwgc2V0OworCQltdGtfdzMyKGV0aCwgdmFsLCBNVEtfTUFDX01JU0MpOworCX0KKworCWRldl9kYmcoZXRoLT5kZXYsICJwYXRoICVzIGluICVzIHVwZGF0ZWQgPSAlZFxuIiwKKwkJbXRrX2V0aF9wYXRoX25hbWUocGF0aCksIF9fZnVuY19fLCB1cGRhdGVkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNldF9tdXhfZ21hYzJfZ21hYzBfdG9fZ2VwaHkoc3RydWN0IG10a19ldGggKmV0aCwgaW50IHBhdGgpCit7CisJdW5zaWduZWQgaW50IHZhbCA9IDA7CisJYm9vbCB1cGRhdGVkID0gdHJ1ZTsKKworCXN3aXRjaCAocGF0aCkgeworCWNhc2UgTVRLX0VUSF9QQVRIX0dNQUMyX0dFUEhZOgorCQl2YWwgPSB+KHUzMilHRVBIWV9NQUNfU0VMOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl1cGRhdGVkID0gZmFsc2U7CisJCWJyZWFrOworCX0KKworCWlmICh1cGRhdGVkKQorCQlyZWdtYXBfdXBkYXRlX2JpdHMoZXRoLT5pbmZyYSwgSU5GUkFfTUlTQzIsIEdFUEhZX01BQ19TRUwsIHZhbCk7CisKKwlkZXZfZGJnKGV0aC0+ZGV2LCAicGF0aCAlcyBpbiAlcyB1cGRhdGVkID0gJWRcbiIsCisJCW10a19ldGhfcGF0aF9uYW1lKHBhdGgpLCBfX2Z1bmNfXywgdXBkYXRlZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXRfbXV4X3UzX2dtYWMyX3RvX3FwaHkoc3RydWN0IG10a19ldGggKmV0aCwgaW50IHBhdGgpCit7CisJdW5zaWduZWQgaW50IHZhbCA9IDAsbWFzaz0wLHJlZz0wOworCWJvb2wgdXBkYXRlZCA9IHRydWU7CisKKwlzd2l0Y2ggKHBhdGgpIHsKKwljYXNlIE1US19FVEhfUEFUSF9HTUFDMl9TR01JSToKKwkJaWYgKE1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX1UzX0NPUEhZX1YyKSkgeworCQkJcmVnID0gVVNCX1BIWV9TV0lUQ0hfUkVHOworCQkJdmFsID0gU0dNSUlfUVBIWV9TRUw7CisJCQltYXNrID0gUVBIWV9TRUxfTUFTSzsKKwkJfSBlbHNlIHsKKwkJCXJlZyA9IElORlJBX01JU0MyOworCQkJdmFsID0gQ09fUVBIWV9TRUw7CisJCQltYXNrID0gdmFsOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXVwZGF0ZWQgPSBmYWxzZTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHVwZGF0ZWQpCisJCXJlZ21hcF91cGRhdGVfYml0cyhldGgtPmluZnJhLCByZWcsIG1hc2ssIHZhbCk7CisKKwlkZXZfZGJnKGV0aC0+ZGV2LCAicGF0aCAlcyBpbiAlcyB1cGRhdGVkID0gJWRcbiIsCisJCW10a19ldGhfcGF0aF9uYW1lKHBhdGgpLCBfX2Z1bmNfXywgdXBkYXRlZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXRfbXV4X2dtYWMxX2dtYWMyX3RvX3NnbWlpX3JnbWlpKHN0cnVjdCBtdGtfZXRoICpldGgsIGludCBwYXRoKQoreworCXVuc2lnbmVkIGludCB2YWwgPSAwOworCWJvb2wgdXBkYXRlZCA9IHRydWU7CisKKwlzcGluX2xvY2soJmV0aC0+c3lzY2ZnMF9sb2NrKTsKKworCXN3aXRjaCAocGF0aCkgeworCWNhc2UgTVRLX0VUSF9QQVRIX0dNQUMxX1NHTUlJOgorCQl2YWwgPSBTWVNDRkcwX1NHTUlJX0dNQUMxOworCQlicmVhazsKKwljYXNlIE1US19FVEhfUEFUSF9HTUFDMl9TR01JSToKKwkJdmFsID0gU1lTQ0ZHMF9TR01JSV9HTUFDMjsKKwkJYnJlYWs7CisJY2FzZSBNVEtfRVRIX1BBVEhfR01BQzFfUkdNSUk6CisJY2FzZSBNVEtfRVRIX1BBVEhfR01BQzJfUkdNSUk6CisJCXJlZ21hcF9yZWFkKGV0aC0+ZXRoc3lzLCBFVEhTWVNfU1lTQ0ZHMCwgJnZhbCk7CisJCXZhbCAmPSBTWVNDRkcwX1NHTUlJX01BU0s7CisKKwkJaWYgKChwYXRoID09IE1US19HTUFDMV9SR01JSSAmJiB2YWwgPT0gU1lTQ0ZHMF9TR01JSV9HTUFDMSkgfHwKKwkJICAgIChwYXRoID09IE1US19HTUFDMl9SR01JSSAmJiB2YWwgPT0gU1lTQ0ZHMF9TR01JSV9HTUFDMikpCisJCQl2YWwgPSAwOworCQllbHNlCisJCQl1cGRhdGVkID0gZmFsc2U7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXVwZGF0ZWQgPSBmYWxzZTsKKwkJYnJlYWs7CisJfTsKKworCWlmICh1cGRhdGVkKQorCQlyZWdtYXBfdXBkYXRlX2JpdHMoZXRoLT5ldGhzeXMsIEVUSFNZU19TWVNDRkcwLAorCQkJCSAgIFNZU0NGRzBfU0dNSUlfTUFTSywgdmFsKTsKKworCXNwaW5fdW5sb2NrKCZldGgtPnN5c2NmZzBfbG9jayk7CisKKwlkZXZfZGJnKGV0aC0+ZGV2LCAicGF0aCAlcyBpbiAlcyB1cGRhdGVkID0gJWRcbiIsCisJCW10a19ldGhfcGF0aF9uYW1lKHBhdGgpLCBfX2Z1bmNfXywgdXBkYXRlZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXRfbXV4X2dtYWMxMl90b19nZXBoeV9zZ21paShzdHJ1Y3QgbXRrX2V0aCAqZXRoLCBpbnQgcGF0aCkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsID0gMDsKKwlib29sIHVwZGF0ZWQgPSB0cnVlOworCisJc3Bpbl9sb2NrKCZldGgtPnN5c2NmZzBfbG9jayk7CisKKwlyZWdtYXBfcmVhZChldGgtPmV0aHN5cywgRVRIU1lTX1NZU0NGRzAsICZ2YWwpOworCisJc3dpdGNoIChwYXRoKSB7CisJY2FzZSBNVEtfRVRIX1BBVEhfR01BQzFfU0dNSUk6CisJCXZhbCB8PSBTWVNDRkcwX1NHTUlJX0dNQUMxX1YyOworCQlicmVhazsKKwljYXNlIE1US19FVEhfUEFUSF9HTUFDMl9HRVBIWToKKwkJdmFsICY9IH4odTMyKVNZU0NGRzBfU0dNSUlfR01BQzJfVjI7CisJCWJyZWFrOworCWNhc2UgTVRLX0VUSF9QQVRIX0dNQUMyX1NHTUlJOgorCQl2YWwgfD0gU1lTQ0ZHMF9TR01JSV9HTUFDMl9WMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdXBkYXRlZCA9IGZhbHNlOworCX07CisKKwlpZiAodXBkYXRlZCkKKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGV0aC0+ZXRoc3lzLCBFVEhTWVNfU1lTQ0ZHMCwKKwkJCQkgICBTWVNDRkcwX1NHTUlJX01BU0ssIHZhbCk7CisKKwlzcGluX3VubG9jaygmZXRoLT5zeXNjZmcwX2xvY2spOworCisJZGV2X2RiZyhldGgtPmRldiwgInBhdGggJXMgaW4gJXMgdXBkYXRlZCA9ICVkXG4iLAorCQltdGtfZXRoX3BhdGhfbmFtZShwYXRoKSwgX19mdW5jX18sIHVwZGF0ZWQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2V0aF9tdXhjIG10a19ldGhfbXV4Y1tdID0geworCXsKKwkJLm5hbWUgPSAibXV4X2dkbTFfdG9fZ21hYzFfZXN3IiwKKwkJLmNhcF9iaXQgPSBNVEtfRVRIX01VWF9HRE0xX1RPX0dNQUMxX0VTVywKKwkJLnNldF9wYXRoID0gc2V0X211eF9nZG0xX3RvX2dtYWMxX2VzdywKKwl9LCB7CisJCS5uYW1lID0gIm11eF9nbWFjMl9nbWFjMF90b19nZXBoeSIsCisJCS5jYXBfYml0ID0gTVRLX0VUSF9NVVhfR01BQzJfR01BQzBfVE9fR0VQSFksCisJCS5zZXRfcGF0aCA9IHNldF9tdXhfZ21hYzJfZ21hYzBfdG9fZ2VwaHksCisJfSwgeworCQkubmFtZSA9ICJtdXhfdTNfZ21hYzJfdG9fcXBoeSIsCisJCS5jYXBfYml0ID0gTVRLX0VUSF9NVVhfVTNfR01BQzJfVE9fUVBIWSwKKwkJLnNldF9wYXRoID0gc2V0X211eF91M19nbWFjMl90b19xcGh5LAorCX0sIHsKKwkJLm5hbWUgPSAibXV4X2dtYWMxX2dtYWMyX3RvX3NnbWlpX3JnbWlpIiwKKwkJLmNhcF9iaXQgPSBNVEtfRVRIX01VWF9HTUFDMV9HTUFDMl9UT19TR01JSV9SR01JSSwKKwkJLnNldF9wYXRoID0gc2V0X211eF9nbWFjMV9nbWFjMl90b19zZ21paV9yZ21paSwKKwl9LCB7CisJCS5uYW1lID0gIm11eF9nbWFjMTJfdG9fZ2VwaHlfc2dtaWkiLAorCQkuY2FwX2JpdCA9IE1US19FVEhfTVVYX0dNQUMxMl9UT19HRVBIWV9TR01JSSwKKwkJLnNldF9wYXRoID0gc2V0X211eF9nbWFjMTJfdG9fZ2VwaHlfc2dtaWksCisJfSwKK307CisKK3N0YXRpYyBpbnQgbXRrX2V0aF9tdXhfc2V0dXAoc3RydWN0IG10a19ldGggKmV0aCwgaW50IHBhdGgpCit7CisJaW50IGksIGVyciA9IDA7CisKKwlpZiAoIU1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgcGF0aCkpIHsKKwkJZGV2X2VycihldGgtPmRldiwgInBhdGggJXMgaXNuJ3Qgc3VwcG9ydCBvbiB0aGUgU29DXG4iLAorCQkJbXRrX2V0aF9wYXRoX25hbWUocGF0aCkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIU1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX01VWCkpCisJCXJldHVybiAwOworCisJLyogU2V0dXAgTVVYIGluIHBhdGggZmFicmljICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobXRrX2V0aF9tdXhjKTsgaSsrKSB7CisJCWlmIChNVEtfSEFTX0NBUFMoZXRoLT5zb2MtPmNhcHMsIG10a19ldGhfbXV4Y1tpXS5jYXBfYml0KSkgeworCQkJZXJyID0gbXRrX2V0aF9tdXhjW2ldLnNldF9wYXRoKGV0aCwgcGF0aCk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gb3V0OworCQl9IGVsc2UgeworCQkJZGV2X2RiZyhldGgtPmRldiwgIm11eCAlcyBpc24ndCBwcmVzZW50IG9uIHRoZSBTb0NcbiIsCisJCQkJbXRrX2V0aF9tdXhjW2ldLm5hbWUpOworCQl9CisJfQorCitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworaW50IG10a19nbWFjX3NnbWlpX3BhdGhfc2V0dXAoc3RydWN0IG10a19ldGggKmV0aCwgaW50IG1hY19pZCkKK3sKKwlpbnQgZXJyLCBwYXRoOworCisJcGF0aCA9IChtYWNfaWQgPT0gMCkgPyAgTVRLX0VUSF9QQVRIX0dNQUMxX1NHTUlJIDoKKwkJCQlNVEtfRVRIX1BBVEhfR01BQzJfU0dNSUk7CisKKwkvKiBTZXR1cCBwcm9wZXIgTVVYZXMgYWxvbmcgdGhlIHBhdGggKi8KKwllcnIgPSBtdGtfZXRoX211eF9zZXR1cChldGgsIHBhdGgpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG10a19nbWFjX2dlcGh5X3BhdGhfc2V0dXAoc3RydWN0IG10a19ldGggKmV0aCwgaW50IG1hY19pZCkKK3sKKwlpbnQgZXJyLCBwYXRoID0gMDsKKworCWlmIChtYWNfaWQgPT0gMSkKKwkJcGF0aCA9IE1US19FVEhfUEFUSF9HTUFDMl9HRVBIWTsKKworCWlmICghcGF0aCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBTZXR1cCBwcm9wZXIgTVVYZXMgYWxvbmcgdGhlIHBhdGggKi8KKwllcnIgPSBtdGtfZXRoX211eF9zZXR1cChldGgsIHBhdGgpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG10a19nbWFjX3JnbWlpX3BhdGhfc2V0dXAoc3RydWN0IG10a19ldGggKmV0aCwgaW50IG1hY19pZCkKK3sKKwlpbnQgZXJyLCBwYXRoOworCisJcGF0aCA9IChtYWNfaWQgPT0gMCkgPyAgTVRLX0VUSF9QQVRIX0dNQUMxX1JHTUlJIDoKKwkJCQlNVEtfRVRIX1BBVEhfR01BQzJfUkdNSUk7CisKKwkvKiBTZXR1cCBwcm9wZXIgTVVYZXMgYWxvbmcgdGhlIHBhdGggKi8KKwllcnIgPSBtdGtfZXRoX211eF9zZXR1cChldGgsIHBhdGgpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFiZjQzYjMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmMKQEAgLTAsMCArMSwzNzU4IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CisvKgorICoKKyAqICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTYgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKiAgIENvcHlyaWdodCAoQykgMjAwOS0yMDE2IEZlbGl4IEZpZXRrYXUgPG5iZEBvcGVud3J0Lm9yZz4KKyAqICAgQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgTWljaGFlbCBMZWUgPGlndnRlZUBnbWFpbC5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX21kaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9uZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9yZXNldC5oPgorI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BpbmN0cmwvZGV2aW5mby5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeWxpbmsuaD4KKyNpbmNsdWRlIDxuZXQvZHNhLmg+CisKKyNpbmNsdWRlICJtdGtfZXRoX3NvYy5oIgorI2luY2x1ZGUgIm10a19ldGhfZGJnLmgiCisKKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfTUVESUFURUtfSE5BVCkgfHwgZGVmaW5lZChDT05GSUdfTkVUX01FRElBVEVLX0hOQVRfTU9EVUxFKQorI2luY2x1ZGUgIm10a19obmF0L25mX2huYXRfbXRrLmgiCisjZW5kaWYKKworc3RhdGljIGludCBtdGtfbXNnX2xldmVsID0gLTE7Cittb2R1bGVfcGFyYW1fbmFtZWQobXNnX2xldmVsLCBtdGtfbXNnX2xldmVsLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhtc2dfbGV2ZWwsICJNZXNzYWdlIGxldmVsICgtMT1kZWZhdWx0cywwPW5vbmUsLi4uLDE2PWFsbCkiKTsKKworI2RlZmluZSBNVEtfRVRIVE9PTF9TVEFUKHgpIHsgI3gsIFwKKwkJCSAgICAgIG9mZnNldG9mKHN0cnVjdCBtdGtfaHdfc3RhdHMsIHgpIC8gc2l6ZW9mKHU2NCkgfQorCisvKiBzdHJpbmdzIHVzZWQgYnkgZXRodG9vbCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZXRodG9vbF9zdGF0cyB7CisJY2hhciBzdHJbRVRIX0dTVFJJTkdfTEVOXTsKKwl1MzIgb2Zmc2V0OworfSBtdGtfZXRodG9vbF9zdGF0c1tdID0geworCU1US19FVEhUT09MX1NUQVQodHhfYnl0ZXMpLAorCU1US19FVEhUT09MX1NUQVQodHhfcGFja2V0cyksCisJTVRLX0VUSFRPT0xfU1RBVCh0eF9za2lwKSwKKwlNVEtfRVRIVE9PTF9TVEFUKHR4X2NvbGxpc2lvbnMpLAorCU1US19FVEhUT09MX1NUQVQocnhfYnl0ZXMpLAorCU1US19FVEhUT09MX1NUQVQocnhfcGFja2V0cyksCisJTVRLX0VUSFRPT0xfU1RBVChyeF9vdmVyZmxvdyksCisJTVRLX0VUSFRPT0xfU1RBVChyeF9mY3NfZXJyb3JzKSwKKwlNVEtfRVRIVE9PTF9TVEFUKHJ4X3Nob3J0X2Vycm9ycyksCisJTVRLX0VUSFRPT0xfU1RBVChyeF9sb25nX2Vycm9ycyksCisJTVRLX0VUSFRPT0xfU1RBVChyeF9jaGVja3N1bV9lcnJvcnMpLAorCU1US19FVEhUT09MX1NUQVQocnhfZmxvd19jb250cm9sX3BhY2tldHMpLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtdGtfY2xrc19zb3VyY2VfbmFtZVtdID0geworCSJldGhpZiIsICJzZ21paXRvcCIsICJlc3ciLCAiZ3AwIiwgImdwMSIsICJncDIiLCAiZmUiLCAidHJncGxsIiwKKwkic2dtaWlfdHgyNTBtIiwgInNnbWlpX3J4MjUwbSIsICJzZ21paV9jZHJfcmVmIiwgInNnbWlpX2Nkcl9mYiIsCisJInNnbWlpMl90eDI1MG0iLCAic2dtaWkyX3J4MjUwbSIsICJzZ21paTJfY2RyX3JlZiIsICJzZ21paTJfY2RyX2ZiIiwKKwkic2dtaWlfY2siLCAiZXRoMnBsbCIsICJ3b2NwdTAiLCJ3b2NwdTEiLAorfTsKKwordm9pZCBtdGtfdzMyKHN0cnVjdCBtdGtfZXRoICpldGgsIHUzMiB2YWwsIHVuc2lnbmVkIHJlZykKK3sKKwlfX3Jhd193cml0ZWwodmFsLCBldGgtPmJhc2UgKyByZWcpOworfQorCit1MzIgbXRrX3IzMihzdHJ1Y3QgbXRrX2V0aCAqZXRoLCB1bnNpZ25lZCByZWcpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKGV0aC0+YmFzZSArIHJlZyk7Cit9CisKK3UzMiBtdGtfbTMyKHN0cnVjdCBtdGtfZXRoICpldGgsIHUzMiBtYXNrLCB1MzIgc2V0LCB1bnNpZ25lZCByZWcpCit7CisJdTMyIHZhbDsKKworCXZhbCA9IG10a19yMzIoZXRoLCByZWcpOworCXZhbCAmPSB+bWFzazsKKwl2YWwgfD0gc2V0OworCW10a193MzIoZXRoLCB2YWwsIHJlZyk7CisJcmV0dXJuIHJlZzsKK30KKworc3RhdGljIGludCBtdGtfbWRpb19idXN5X3dhaXQoc3RydWN0IG10a19ldGggKmV0aCkKK3sKKwl1bnNpZ25lZCBsb25nIHRfc3RhcnQgPSBqaWZmaWVzOworCisJd2hpbGUgKDEpIHsKKwkJaWYgKCEobXRrX3IzMihldGgsIE1US19QSFlfSUFDKSAmIFBIWV9JQUNfQUNDRVNTKSkKKwkJCXJldHVybiAwOworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0X3N0YXJ0ICsgUEhZX0lBQ19USU1FT1VUKSkKKwkJCWJyZWFrOworCQljb25kX3Jlc2NoZWQoKTsKKwl9CisKKwlkZXZfZXJyKGV0aC0+ZGV2LCAibWRpbzogTURJTyB0aW1lb3V0XG4iKTsKKwlyZXR1cm4gLTE7Cit9CisKK3UzMiBfbXRrX21kaW9fd3JpdGUoc3RydWN0IG10a19ldGggKmV0aCwgdTE2IHBoeV9hZGRyLAorCQkJICAgdTE2IHBoeV9yZWdpc3RlciwgdTE2IHdyaXRlX2RhdGEpCit7CisJaWYgKG10a19tZGlvX2J1c3lfd2FpdChldGgpKQorCQlyZXR1cm4gLTE7CisKKwl3cml0ZV9kYXRhICY9IDB4ZmZmZjsKKworCW10a193MzIoZXRoLCBQSFlfSUFDX0FDQ0VTUyB8IFBIWV9JQUNfU1RBUlQgfCBQSFlfSUFDX1dSSVRFIHwKKwkJKChwaHlfcmVnaXN0ZXIgJiAweDFmKSA8PCBQSFlfSUFDX1JFR19TSElGVCkgfAorCQkoKHBoeV9hZGRyICYgMHgxZikgPDwgUEhZX0lBQ19BRERSX1NISUZUKSB8IHdyaXRlX2RhdGEsCisJCU1US19QSFlfSUFDKTsKKworCWlmIChtdGtfbWRpb19idXN5X3dhaXQoZXRoKSkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKK3UzMiBfbXRrX21kaW9fcmVhZChzdHJ1Y3QgbXRrX2V0aCAqZXRoLCB1MTYgcGh5X2FkZHIsIHUxNiBwaHlfcmVnKQoreworCXUzMiBkOworCisJaWYgKG10a19tZGlvX2J1c3lfd2FpdChldGgpKQorCQlyZXR1cm4gMHhmZmZmOworCisJbXRrX3czMihldGgsIFBIWV9JQUNfQUNDRVNTIHwgUEhZX0lBQ19TVEFSVCB8IFBIWV9JQUNfUkVBRCB8CisJCSgocGh5X3JlZyAmIDB4MWYpIDw8IFBIWV9JQUNfUkVHX1NISUZUKSB8CisJCSgocGh5X2FkZHIgJiAweDFmKSA8PCBQSFlfSUFDX0FERFJfU0hJRlQpLAorCQlNVEtfUEhZX0lBQyk7CisKKwlpZiAobXRrX21kaW9fYnVzeV93YWl0KGV0aCkpCisJCXJldHVybiAweGZmZmY7CisKKwlkID0gbXRrX3IzMihldGgsIE1US19QSFlfSUFDKSAmIDB4ZmZmZjsKKworCXJldHVybiBkOworfQorCitzdGF0aWMgaW50IG10a19tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwKKwkJCSAgaW50IHBoeV9yZWcsIHUxNiB2YWwpCit7CisJc3RydWN0IG10a19ldGggKmV0aCA9IGJ1cy0+cHJpdjsKKworCXJldHVybiBfbXRrX21kaW9fd3JpdGUoZXRoLCBwaHlfYWRkciwgcGh5X3JlZywgdmFsKTsKK30KKworc3RhdGljIGludCBtdGtfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgaW50IHBoeV9yZWcpCit7CisJc3RydWN0IG10a19ldGggKmV0aCA9IGJ1cy0+cHJpdjsKKworCXJldHVybiBfbXRrX21kaW9fcmVhZChldGgsIHBoeV9hZGRyLCBwaHlfcmVnKTsKK30KKwordTMyIG10a19jbDQ1X2luZF9yZWFkKHN0cnVjdCBtdGtfZXRoICpldGgsIHUxNiBwb3J0LCB1MTYgZGV2YWQsIHUxNiByZWcsIHUxNiAqZGF0YSkKK3sKKyAgICAgICAgbXV0ZXhfbG9jaygmZXRoLT5taWlfYnVzLT5tZGlvX2xvY2spOworCisgICAgICAgIF9tdGtfbWRpb193cml0ZShldGgsIHBvcnQsIE1JSV9NTURfQUNDX0NUTF9SRUcsIGRldmFkKTsKKyAgICAgICAgX210a19tZGlvX3dyaXRlKGV0aCwgcG9ydCwgTUlJX01NRF9BRERSX0RBVEFfUkVHLCByZWcpOworICAgICAgICBfbXRrX21kaW9fd3JpdGUoZXRoLCBwb3J0LCBNSUlfTU1EX0FDQ19DVExfUkVHLCBNTURfT1BfTU9ERV9EQVRBIHwgZGV2YWQpOworICAgICAgICAqZGF0YSA9IF9tdGtfbWRpb19yZWFkKGV0aCwgcG9ydCwgTUlJX01NRF9BRERSX0RBVEFfUkVHKTsKKworICAgICAgICBtdXRleF91bmxvY2soJmV0aC0+bWlpX2J1cy0+bWRpb19sb2NrKTsKKworICAgICAgICByZXR1cm4gMDsKK30KKwordTMyIG10a19jbDQ1X2luZF93cml0ZShzdHJ1Y3QgbXRrX2V0aCAqZXRoLCB1MTYgcG9ydCwgdTE2IGRldmFkLCB1MTYgcmVnLCB1MTYgZGF0YSkKK3sKKyAgICAgICAgbXV0ZXhfbG9jaygmZXRoLT5taWlfYnVzLT5tZGlvX2xvY2spOworCisgICAgICAgIF9tdGtfbWRpb193cml0ZShldGgsIHBvcnQsIE1JSV9NTURfQUNDX0NUTF9SRUcsIGRldmFkKTsKKyAgICAgICAgX210a19tZGlvX3dyaXRlKGV0aCwgcG9ydCwgTUlJX01NRF9BRERSX0RBVEFfUkVHLCByZWcpOworICAgICAgICBfbXRrX21kaW9fd3JpdGUoZXRoLCBwb3J0LCBNSUlfTU1EX0FDQ19DVExfUkVHLCBNTURfT1BfTU9ERV9EQVRBIHwgZGV2YWQpOworICAgICAgICBfbXRrX21kaW9fd3JpdGUoZXRoLCBwb3J0LCBNSUlfTU1EX0FERFJfREFUQV9SRUcsIGRhdGEpOworCisgICAgICAgIG11dGV4X3VubG9jaygmZXRoLT5taWlfYnVzLT5tZGlvX2xvY2spOworCisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10NzYyMV9nbWFjMF9yZ21paV9hZGp1c3Qoc3RydWN0IG10a19ldGggKmV0aCwKKwkJCQkgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpCit7CisJdTMyIHZhbDsKKworCS8qIENoZWNrIEREUiBtZW1vcnkgdHlwZS4KKwkgKiBDdXJyZW50bHkgVFJHTUlJIG1vZGUgd2l0aCBERFIyIG1lbW9yeSBpcyBub3Qgc3VwcG9ydGVkLgorCSAqLworCXJlZ21hcF9yZWFkKGV0aC0+ZXRoc3lzLCBFVEhTWVNfU1lTQ0ZHLCAmdmFsKTsKKwlpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9UUkdNSUkgJiYKKwkgICAgdmFsICYgU1lTQ0ZHX0RSQU1fVFlQRV9ERFIyKSB7CisJCWRldl9lcnIoZXRoLT5kZXYsCisJCQkiVFJHTUlJIG1vZGUgd2l0aCBERFIyIG1lbW9yeSBpcyBub3Qgc3VwcG9ydGVkIVxuIik7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwl2YWwgPSAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9UUkdNSUkpID8KKwkJRVRIU1lTX1RSR01JSV9NVDc2MjFfRERSX1BMTCA6IDA7CisKKwlyZWdtYXBfdXBkYXRlX2JpdHMoZXRoLT5ldGhzeXMsIEVUSFNZU19DTEtDRkcwLAorCQkJICAgRVRIU1lTX1RSR01JSV9NVDc2MjFfTUFTSywgdmFsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtdGtfZ21hYzBfcmdtaWlfYWRqdXN0KHN0cnVjdCBtdGtfZXRoICpldGgsCisJCQkJICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSwgaW50IHNwZWVkKQoreworCXUzMiB2YWw7CisJaW50IHJldDsKKworCWlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1RSR01JSSkgeworCQltdGtfdzMyKGV0aCwgVFJHTUlJX01PREUsIElOVEZfTU9ERSk7CisJCXZhbCA9IDUwMDAwMDAwMDsKKwkJcmV0ID0gY2xrX3NldF9yYXRlKGV0aC0+Y2xrc1tNVEtfQ0xLX1RSR1BMTF0sIHZhbCk7CisJCWlmIChyZXQpCisJCQlkZXZfZXJyKGV0aC0+ZGV2LCAiRmFpbGVkIHRvIHNldCB0cmdtaWkgcGxsOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuOworCX0KKworCXZhbCA9IChzcGVlZCA9PSBTUEVFRF8xMDAwKSA/CisJCUlOVEZfTU9ERV9SR01JSV8xMDAwIDogSU5URl9NT0RFX1JHTUlJXzEwXzEwMDsKKwltdGtfdzMyKGV0aCwgdmFsLCBJTlRGX01PREUpOworCisJcmVnbWFwX3VwZGF0ZV9iaXRzKGV0aC0+ZXRoc3lzLCBFVEhTWVNfQ0xLQ0ZHMCwKKwkJCSAgIEVUSFNZU19UUkdNSUlfQ0xLX1NFTDM2Ml81LAorCQkJICAgRVRIU1lTX1RSR01JSV9DTEtfU0VMMzYyXzUpOworCisJdmFsID0gKHNwZWVkID09IFNQRUVEXzEwMDApID8gMjUwMDAwMDAwIDogNTAwMDAwMDAwOworCXJldCA9IGNsa19zZXRfcmF0ZShldGgtPmNsa3NbTVRLX0NMS19UUkdQTExdLCB2YWwpOworCWlmIChyZXQpCisJCWRldl9lcnIoZXRoLT5kZXYsICJGYWlsZWQgdG8gc2V0IHRyZ21paSBwbGw6ICVkXG4iLCByZXQpOworCisJdmFsID0gKHNwZWVkID09IFNQRUVEXzEwMDApID8KKwkJUkNLX0NUUkxfUkdNSUlfMTAwMCA6IFJDS19DVFJMX1JHTUlJXzEwXzEwMDsKKwltdGtfdzMyKGV0aCwgdmFsLCBUUkdNSUlfUkNLX0NUUkwpOworCisJdmFsID0gKHNwZWVkID09IFNQRUVEXzEwMDApID8KKwkJVENLX0NUUkxfUkdNSUlfMTAwMCA6IFRDS19DVFJMX1JHTUlJXzEwXzEwMDsKKwltdGtfdzMyKGV0aCwgdmFsLCBUUkdNSUlfVENLX0NUUkwpOworfQorCitzdGF0aWMgdm9pZCBtdGtfbWFjX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsCisJCQkgICBjb25zdCBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX21hYyAqbWFjID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IG10a19tYWMsCisJCQkJCSAgIHBoeWxpbmtfY29uZmlnKTsKKwlzdHJ1Y3QgbXRrX2V0aCAqZXRoID0gbWFjLT5odzsKKwl1MzIgbWNyX2N1ciwgbWNyX25ldywgc2lkLCBpOworCWludCB2YWwsIGdlX21vZGUsIGVycj0wOworCisJLyogTVQ3Nng4IGhhcyBubyBoYXJkd2FyZSBzZXR0aW5ncyBiZXR3ZWVuIGZvciB0aGUgTUFDICovCisJaWYgKCFNVEtfSEFTX0NBUFMoZXRoLT5zb2MtPmNhcHMsIE1US19TT0NfTVQ3NjI4KSAmJgorCSAgICBtYWMtPmludGVyZmFjZSAhPSBzdGF0ZS0+aW50ZXJmYWNlKSB7CisJCS8qIFNldHVwIHNvYyBwaW4gZnVuY3Rpb25zICovCisJCXN3aXRjaCAoc3RhdGUtPmludGVyZmFjZSkgeworCQljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9UUkdNSUk6CisJCQlpZiAobWFjLT5pZCkKKwkJCQlnb3RvIGVycl9waHk7CisJCQlpZiAoIU1US19IQVNfQ0FQUyhtYWMtPmh3LT5zb2MtPmNhcHMsCisJCQkJCSAgTVRLX0dNQUMxX1RSR01JSSkpCisJCQkJZ290byBlcnJfcGh5OworCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1RYSUQ6CisJCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1JYSUQ6CisJCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX0lEOgorCQljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSToKKwkJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfTUlJOgorCQljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SRVZNSUk6CisJCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUk6CisJCQlpZiAoTVRLX0hBU19DQVBTKGV0aC0+c29jLT5jYXBzLCBNVEtfUkdNSUkpKSB7CisJCQkJZXJyID0gbXRrX2dtYWNfcmdtaWlfcGF0aF9zZXR1cChldGgsIG1hYy0+aWQpOworCQkJCWlmIChlcnIpCisJCQkJCWdvdG8gaW5pdF9lcnI7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYOgorCQljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8yNTAwQkFTRVg6CisJCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOgorCQkJaWYgKE1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX1NHTUlJKSkgeworCQkJCWVyciA9IG10a19nbWFjX3NnbWlpX3BhdGhfc2V0dXAoZXRoLCBtYWMtPmlkKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlnb3RvIGluaXRfZXJyOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUk6CisJCQlpZiAoTVRLX0hBU19DQVBTKGV0aC0+c29jLT5jYXBzLCBNVEtfR0VQSFkpKSB7CisJCQkJZXJyID0gbXRrX2dtYWNfZ2VwaHlfcGF0aF9zZXR1cChldGgsIG1hYy0+aWQpOworCQkJCWlmIChlcnIpCisJCQkJCWdvdG8gaW5pdF9lcnI7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gZXJyX3BoeTsKKwkJfQorCisJCS8qIFNldHVwIGNsb2NrIGZvciAxc3QgZ21hYyAqLworCQlpZiAoIW1hYy0+aWQgJiYgc3RhdGUtPmludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkgJiYKKwkJICAgICFwaHlfaW50ZXJmYWNlX21vZGVfaXNfODAyM3ooc3RhdGUtPmludGVyZmFjZSkgJiYKKwkJICAgIE1US19IQVNfQ0FQUyhtYWMtPmh3LT5zb2MtPmNhcHMsIE1US19HTUFDMV9UUkdNSUkpKSB7CisJCQlpZiAoTVRLX0hBU19DQVBTKG1hYy0+aHctPnNvYy0+Y2FwcywKKwkJCQkJIE1US19UUkdNSUlfTVQ3NjIxX0NMSykpIHsKKwkJCQlpZiAobXQ3NjIxX2dtYWMwX3JnbWlpX2FkanVzdChtYWMtPmh3LAorCQkJCQkJCSAgICAgIHN0YXRlLT5pbnRlcmZhY2UpKQorCQkJCQlnb3RvIGVycl9waHk7CisJCQl9IGVsc2UgeworCQkJCW10a19nbWFjMF9yZ21paV9hZGp1c3QobWFjLT5odywKKwkJCQkJCSAgICAgICBzdGF0ZS0+aW50ZXJmYWNlLAorCQkJCQkJICAgICAgIHN0YXRlLT5zcGVlZCk7CisKKwkJCQkvKiBtdDc2MjNfcGFkX2Nsa19zZXR1cCAqLworCQkJCWZvciAoaSA9IDAgOyBpIDwgTlVNX1RSR01JSV9DVFJMOyBpKyspCisJCQkJCW10a193MzIobWFjLT5odywKKwkJCQkJCVREX0RNX0RSVlAoOCkgfCBURF9ETV9EUlZOKDgpLAorCQkJCQkJVFJHTUlJX1REX09EVChpKSk7CisKKwkJCQkvKiBBc3NlcnQvcmVsZWFzZSBNVDc2MjMgUlhDIHJlc2V0ICovCisJCQkJbXRrX20zMihtYWMtPmh3LCAwLCBSWENfUlNUIHwgUlhDX0RRU0lTRUwsCisJCQkJCVRSR01JSV9SQ0tfQ1RSTCk7CisJCQkJbXRrX20zMihtYWMtPmh3LCBSWENfUlNULCAwLCBUUkdNSUlfUkNLX0NUUkwpOworCQkJfQorCQl9CisKKwkJZ2VfbW9kZSA9IDA7CisJCXN3aXRjaCAoc3RhdGUtPmludGVyZmFjZSkgeworCQljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk6CisJCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUk6CisJCQlnZV9tb2RlID0gMTsKKwkJCWJyZWFrOworCQljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SRVZNSUk6CisJCQlnZV9tb2RlID0gMjsKKwkJCWJyZWFrOworCQljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJOgorCQkJaWYgKG1hYy0+aWQpCisJCQkJZ290byBlcnJfcGh5OworCQkJZ2VfbW9kZSA9IDM7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJLyogcHV0IHRoZSBnbWFjIGludG8gdGhlIHJpZ2h0IG1vZGUgKi8KKwkJc3Bpbl9sb2NrKCZldGgtPnN5c2NmZzBfbG9jayk7CisJCXJlZ21hcF9yZWFkKGV0aC0+ZXRoc3lzLCBFVEhTWVNfU1lTQ0ZHMCwgJnZhbCk7CisJCXZhbCAmPSB+U1lTQ0ZHMF9HRV9NT0RFKFNZU0NGRzBfR0VfTUFTSywgbWFjLT5pZCk7CisJCXZhbCB8PSBTWVNDRkcwX0dFX01PREUoZ2VfbW9kZSwgbWFjLT5pZCk7CisJCXJlZ21hcF93cml0ZShldGgtPmV0aHN5cywgRVRIU1lTX1NZU0NGRzAsIHZhbCk7CisJCXNwaW5fdW5sb2NrKCZldGgtPnN5c2NmZzBfbG9jayk7CisKKwkJbWFjLT5pbnRlcmZhY2UgPSBzdGF0ZS0+aW50ZXJmYWNlOworCX0KKworCS8qIFNHTUlJICovCisJaWYgKHN0YXRlLT5pbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJIHx8CisJICAgIHBoeV9pbnRlcmZhY2VfbW9kZV9pc184MDIzeihzdGF0ZS0+aW50ZXJmYWNlKSkgeworCQkvKiBUaGUgcGF0aCBHTUFDIHRvIFNHTUlJIHdpbGwgYmUgZW5hYmxlZCBvbmNlIHRoZSBTR01JSVNZUyBpcworCQkgKiBiZWluZyBzZXR1cCBkb25lLgorCQkgKi8KKwkJc3Bpbl9sb2NrKCZldGgtPnN5c2NmZzBfbG9jayk7CisJCXJlZ21hcF9yZWFkKGV0aC0+ZXRoc3lzLCBFVEhTWVNfU1lTQ0ZHMCwgJnZhbCk7CisKKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGV0aC0+ZXRoc3lzLCBFVEhTWVNfU1lTQ0ZHMCwKKwkJCQkgICBTWVNDRkcwX1NHTUlJX01BU0ssCisJCQkJICAgfih1MzIpU1lTQ0ZHMF9TR01JSV9NQVNLKTsKKworCQkvKiBEZWNpZGUgaG93IEdNQUMgYW5kIFNHTUlJU1lTIGJlIG1hcHBlZCAqLworCQlzaWQgPSAoTVRLX0hBU19DQVBTKGV0aC0+c29jLT5jYXBzLCBNVEtfU0hBUkVEX1NHTUlJKSkgPworCQkgICAgICAgMCA6IG1hYy0+aWQ7CisKKwkJLyogU2V0dXAgU0dNSUlTWVMgd2l0aCB0aGUgZGV0ZXJtaW5lZCBwcm9wZXJ0eSAqLworCQlpZiAoc3RhdGUtPmludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpCisJCQllcnIgPSBtdGtfc2dtaWlfc2V0dXBfbW9kZV9mb3JjZShldGgtPnNnbWlpLCBzaWQsCisJCQkJCQkJIHN0YXRlKTsKKwkJZWxzZSBpZiAocGh5bGlua19hdXRvbmVnX2luYmFuZChtb2RlKSkKKwkJCWVyciA9IG10a19zZ21paV9zZXR1cF9tb2RlX2FuKGV0aC0+c2dtaWksIHNpZCk7CisKKwkJaWYgKGVycikgeworCQkJc3Bpbl91bmxvY2soJmV0aC0+c3lzY2ZnMF9sb2NrKTsKKwkJCWdvdG8gaW5pdF9lcnI7CisJCX0KKworCQlyZWdtYXBfdXBkYXRlX2JpdHMoZXRoLT5ldGhzeXMsIEVUSFNZU19TWVNDRkcwLAorCQkJCSAgIFNZU0NGRzBfU0dNSUlfTUFTSywgdmFsKTsKKwkJc3Bpbl91bmxvY2soJmV0aC0+c3lzY2ZnMF9sb2NrKTsKKwl9IGVsc2UgaWYgKHBoeWxpbmtfYXV0b25lZ19pbmJhbmQobW9kZSkpIHsKKwkJZGV2X2VycihldGgtPmRldiwKKwkJCSJJbi1iYW5kIG1vZGUgbm90IHN1cHBvcnRlZCBpbiBub24gU0dNSUkgbW9kZSFcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogU2V0dXAgZ21hYyAqLworCW1jcl9jdXIgPSBtdGtfcjMyKG1hYy0+aHcsIE1US19NQUNfTUNSKG1hYy0+aWQpKTsKKwltY3JfbmV3ID0gbWNyX2N1cjsKKwltY3JfbmV3ICY9IH4oTUFDX01DUl9TUEVFRF8xMDAgfCBNQUNfTUNSX1NQRUVEXzEwMDAgfAorCQkgICAgIE1BQ19NQ1JfRk9SQ0VfRFBYIHwgTUFDX01DUl9GT1JDRV9UWF9GQyB8CisJCSAgICAgTUFDX01DUl9GT1JDRV9SWF9GQyk7CisJbWNyX25ldyB8PSBNQUNfTUNSX01BWF9SWF8xNTM2IHwgTUFDX01DUl9JUEdfQ0ZHIHwgTUFDX01DUl9GT1JDRV9NT0RFIHwKKwkJICAgTUFDX01DUl9CQUNLT0ZGX0VOIHwgTUFDX01DUl9CQUNLUFJfRU4gfCBNQUNfTUNSX0ZPUkNFX0xJTks7CisKKwlzd2l0Y2ggKHN0YXRlLT5zcGVlZCkgeworCWNhc2UgU1BFRURfMjUwMDoKKwljYXNlIFNQRUVEXzEwMDA6CisJCW1jcl9uZXcgfD0gTUFDX01DUl9TUEVFRF8xMDAwOworCQlicmVhazsKKwljYXNlIFNQRUVEXzEwMDoKKwkJbWNyX25ldyB8PSBNQUNfTUNSX1NQRUVEXzEwMDsKKwkJYnJlYWs7CisJfQorCWlmIChzdGF0ZS0+ZHVwbGV4ID09IERVUExFWF9GVUxMKSB7CisJCW1jcl9uZXcgfD0gTUFDX01DUl9GT1JDRV9EUFg7CisJCWlmIChzdGF0ZS0+cGF1c2UgJiBNTE9fUEFVU0VfVFgpCisJCQltY3JfbmV3IHw9IE1BQ19NQ1JfRk9SQ0VfVFhfRkM7CisJCWlmIChzdGF0ZS0+cGF1c2UgJiBNTE9fUEFVU0VfUlgpCisJCQltY3JfbmV3IHw9IE1BQ19NQ1JfRk9SQ0VfUlhfRkM7CisJfQorCisJLyogT25seSB1cGRhdGUgY29udHJvbCByZWdpc3RlciB3aGVuIG5lZWRlZCEgKi8KKwlpZiAobWNyX25ldyAhPSBtY3JfY3VyKQorCQltdGtfdzMyKG1hYy0+aHcsIG1jcl9uZXcsIE1US19NQUNfTUNSKG1hYy0+aWQpKTsKKworCXJldHVybjsKKworZXJyX3BoeToKKwlkZXZfZXJyKGV0aC0+ZGV2LCAiJXM6IEdNQUMlZCBtb2RlICVzIG5vdCBzdXBwb3J0ZWQhXG4iLCBfX2Z1bmNfXywKKwkJbWFjLT5pZCwgcGh5X21vZGVzKHN0YXRlLT5pbnRlcmZhY2UpKTsKKwlyZXR1cm47CisKK2luaXRfZXJyOgorCWRldl9lcnIoZXRoLT5kZXYsICIlczogR01BQyVkIG1vZGUgJXMgZXJyOiAlZCFcbiIsIF9fZnVuY19fLAorCQltYWMtPmlkLCBwaHlfbW9kZXMoc3RhdGUtPmludGVyZmFjZSksIGVycik7Cit9CisKK3N0YXRpYyBpbnQgbXRrX21hY19saW5rX3N0YXRlKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLAorCQkJICAgICAgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IG10a19tYWMgKm1hYyA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBtdGtfbWFjLAorCQkJCQkgICBwaHlsaW5rX2NvbmZpZyk7CisJdTMyIHBtc3IgPSBtdGtfcjMyKG1hYy0+aHcsIE1US19NQUNfTVNSKG1hYy0+aWQpKTsKKworCXN0YXRlLT5saW5rID0gKHBtc3IgJiBNQUNfTVNSX0xJTkspOworCXN0YXRlLT5kdXBsZXggPSAocG1zciAmIE1BQ19NU1JfRFBYKSA+PiAxOworCisJc3dpdGNoIChwbXNyICYgKE1BQ19NU1JfU1BFRURfMTAwMCB8IE1BQ19NU1JfU1BFRURfMTAwKSkgeworCWNhc2UgMDoKKwkJc3RhdGUtPnNwZWVkID0gU1BFRURfMTA7CisJCWJyZWFrOworCWNhc2UgTUFDX01TUl9TUEVFRF8xMDA6CisJCXN0YXRlLT5zcGVlZCA9IFNQRUVEXzEwMDsKKwkJYnJlYWs7CisJY2FzZSBNQUNfTVNSX1NQRUVEXzEwMDA6CisJCXN0YXRlLT5zcGVlZCA9IFNQRUVEXzEwMDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXN0YXRlLT5zcGVlZCA9IFNQRUVEX1VOS05PV047CisJCWJyZWFrOworCX0KKworCXN0YXRlLT5wYXVzZSAmPSAoTUxPX1BBVVNFX1JYIHwgTUxPX1BBVVNFX1RYKTsKKwlpZiAocG1zciAmIE1BQ19NU1JfUlhfRkMpCisJCXN0YXRlLT5wYXVzZSB8PSBNTE9fUEFVU0VfUlg7CisJaWYgKHBtc3IgJiBNQUNfTVNSX1RYX0ZDKQorCQlzdGF0ZS0+cGF1c2UgfD0gTUxPX1BBVVNFX1RYOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIG10a19tYWNfYW5fcmVzdGFydChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZykKK3sKKwlzdHJ1Y3QgbXRrX21hYyAqbWFjID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IG10a19tYWMsCisJCQkJCSAgIHBoeWxpbmtfY29uZmlnKTsKKworCW10a19zZ21paV9yZXN0YXJ0X2FuKG1hYy0+aHcsIG1hYy0+aWQpOworfQorCitzdGF0aWMgdm9pZCBtdGtfbWFjX2xpbmtfZG93bihzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsCisJCQkgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKQoreworCXN0cnVjdCBtdGtfbWFjICptYWMgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgbXRrX21hYywKKwkJCQkJICAgcGh5bGlua19jb25maWcpOworCXUzMiBtY3IgPSBtdGtfcjMyKG1hYy0+aHcsIE1US19NQUNfTUNSKG1hYy0+aWQpKTsKKworCW1jciAmPSB+KE1BQ19NQ1JfVFhfRU4gfCBNQUNfTUNSX1JYX0VOKTsKKwltdGtfdzMyKG1hYy0+aHcsIG1jciwgTVRLX01BQ19NQ1IobWFjLT5pZCkpOworfQorCitzdGF0aWMgdm9pZCBtdGtfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbW9kZSwgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3BlZWQsIGludCBkdXBsZXgsIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpCit7CisJc3RydWN0IG10a19tYWMgKm1hYyA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBtdGtfbWFjLAorCQkJCQkgICBwaHlsaW5rX2NvbmZpZyk7CisJdTMyIG1jciA9IG10a19yMzIobWFjLT5odywgTVRLX01BQ19NQ1IobWFjLT5pZCkpOworCisJbWNyIHw9IE1BQ19NQ1JfVFhfRU4gfCBNQUNfTUNSX1JYX0VOOworCW10a193MzIobWFjLT5odywgbWNyLCBNVEtfTUFDX01DUihtYWMtPmlkKSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a192YWxpZGF0ZShzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywKKwkJCSB1bnNpZ25lZCBsb25nICpzdXBwb3J0ZWQsCisJCQkgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IG10a19tYWMgKm1hYyA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBtdGtfbWFjLAorCQkJCQkgICBwaHlsaW5rX2NvbmZpZyk7CisJX19FVEhUT09MX0RFQ0xBUkVfTElOS19NT0RFX01BU0sobWFzaykgPSB7IDAsIH07CisKKwlpZiAoc3RhdGUtPmludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTkEgJiYKKwkgICAgc3RhdGUtPmludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJICYmCisJICAgIHN0YXRlLT5pbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkgJiYKKwkgICAgIShNVEtfSEFTX0NBUFMobWFjLT5ody0+c29jLT5jYXBzLCBNVEtfUkdNSUkpICYmCisJICAgICAgcGh5X2ludGVyZmFjZV9tb2RlX2lzX3JnbWlpKHN0YXRlLT5pbnRlcmZhY2UpKSAmJgorCSAgICAhKE1US19IQVNfQ0FQUyhtYWMtPmh3LT5zb2MtPmNhcHMsIE1US19UUkdNSUkpICYmCisJICAgICAgIW1hYy0+aWQgJiYgc3RhdGUtPmludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfVFJHTUlJKSAmJgorCSAgICAhKE1US19IQVNfQ0FQUyhtYWMtPmh3LT5zb2MtPmNhcHMsIE1US19TR01JSSkgJiYKKwkgICAgICAoc3RhdGUtPmludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkgfHwKKwkgICAgICAgcGh5X2ludGVyZmFjZV9tb2RlX2lzXzgwMjN6KHN0YXRlLT5pbnRlcmZhY2UpKSkpIHsKKwkJbGlua21vZGVfemVybyhzdXBwb3J0ZWQpOworCQlyZXR1cm47CisJfQorCisJcGh5bGlua19zZXRfcG9ydF9tb2RlcyhtYXNrKTsKKwlwaHlsaW5rX3NldChtYXNrLCBBdXRvbmVnKTsKKworCXN3aXRjaCAoc3RhdGUtPmludGVyZmFjZSkgeworCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1RSR01JSToKKwkJcGh5bGlua19zZXQobWFzaywgMTAwMGJhc2VUX0Z1bGwpOworCQlicmVhazsKKwljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVg6CisJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfMjUwMEJBU0VYOgorCQlwaHlsaW5rX3NldChtYXNrLCAxMDAwYmFzZVhfRnVsbCk7CisJCXBoeWxpbmtfc2V0KG1hc2ssIDI1MDBiYXNlWF9GdWxsKTsKKwkJYnJlYWs7CisJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfR01JSToKKwljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSToKKwljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9JRDoKKwljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9SWElEOgorCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1RYSUQ6CisJCXBoeWxpbmtfc2V0KG1hc2ssIDEwMDBiYXNlVF9IYWxmKTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6CisJCXBoeWxpbmtfc2V0KG1hc2ssIDEwMDBiYXNlVF9GdWxsKTsKKwkJcGh5bGlua19zZXQobWFzaywgMTAwMGJhc2VYX0Z1bGwpOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk6CisJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfUk1JSToKKwljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SRVZNSUk6CisJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfTkE6CisJZGVmYXVsdDoKKwkJcGh5bGlua19zZXQobWFzaywgMTBiYXNlVF9IYWxmKTsKKwkJcGh5bGlua19zZXQobWFzaywgMTBiYXNlVF9GdWxsKTsKKwkJcGh5bGlua19zZXQobWFzaywgMTAwYmFzZVRfSGFsZik7CisJCXBoeWxpbmtfc2V0KG1hc2ssIDEwMGJhc2VUX0Z1bGwpOworCQlicmVhazsKKwl9CisKKwlpZiAoc3RhdGUtPmludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfTkEpIHsKKwkJaWYgKE1US19IQVNfQ0FQUyhtYWMtPmh3LT5zb2MtPmNhcHMsIE1US19TR01JSSkpIHsKKwkJCXBoeWxpbmtfc2V0KG1hc2ssIDEwMDBiYXNlVF9GdWxsKTsKKwkJCXBoeWxpbmtfc2V0KG1hc2ssIDEwMDBiYXNlWF9GdWxsKTsKKwkJCXBoeWxpbmtfc2V0KG1hc2ssIDI1MDBiYXNlWF9GdWxsKTsKKwkJfQorCQlpZiAoTVRLX0hBU19DQVBTKG1hYy0+aHctPnNvYy0+Y2FwcywgTVRLX1JHTUlJKSkgeworCQkJcGh5bGlua19zZXQobWFzaywgMTAwMGJhc2VUX0Z1bGwpOworCQkJcGh5bGlua19zZXQobWFzaywgMTAwMGJhc2VUX0hhbGYpOworCQkJcGh5bGlua19zZXQobWFzaywgMTAwMGJhc2VYX0Z1bGwpOworCQl9CisJCWlmIChNVEtfSEFTX0NBUFMobWFjLT5ody0+c29jLT5jYXBzLCBNVEtfR0VQSFkpKSB7CisJCQlwaHlsaW5rX3NldChtYXNrLCAxMDAwYmFzZVRfRnVsbCk7CisJCQlwaHlsaW5rX3NldChtYXNrLCAxMDAwYmFzZVRfSGFsZik7CisJCX0KKwl9CisKKwlwaHlsaW5rX3NldChtYXNrLCBQYXVzZSk7CisJcGh5bGlua19zZXQobWFzaywgQXN5bV9QYXVzZSk7CisKKwlsaW5rbW9kZV9hbmQoc3VwcG9ydGVkLCBzdXBwb3J0ZWQsIG1hc2spOworCWxpbmttb2RlX2FuZChzdGF0ZS0+YWR2ZXJ0aXNpbmcsIHN0YXRlLT5hZHZlcnRpc2luZywgbWFzayk7CisKKwkvKiBXZSBjYW4gb25seSBvcGVyYXRlIGF0IDI1MDBCYXNlWCBvciAxMDAwQmFzZVguIElmIHJlcXVlc3RlZAorCSAqIHRvIGFkdmVydGlzZSBib3RoLCBvbmx5IHJlcG9ydCBhZHZlcnRpc2luZyBhdCAyNTAwQmFzZVguCisJICovCisJcGh5bGlua19oZWxwZXJfYmFzZXhfc3BlZWQoc3RhdGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyBtdGtfcGh5bGlua19vcHMgPSB7CisJLnZhbGlkYXRlID0gbXRrX3ZhbGlkYXRlLAorCS5tYWNfbGlua19zdGF0ZSA9IG10a19tYWNfbGlua19zdGF0ZSwKKwkubWFjX2FuX3Jlc3RhcnQgPSBtdGtfbWFjX2FuX3Jlc3RhcnQsCisJLm1hY19jb25maWcgPSBtdGtfbWFjX2NvbmZpZywKKwkubWFjX2xpbmtfZG93biA9IG10a19tYWNfbGlua19kb3duLAorCS5tYWNfbGlua191cCA9IG10a19tYWNfbGlua191cCwKK307CisKK3N0YXRpYyBpbnQgbXRrX21kaW9faW5pdChzdHJ1Y3QgbXRrX2V0aCAqZXRoKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbWlpX25wOworCWludCByZXQ7CisKKwltaWlfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShldGgtPmRldi0+b2Zfbm9kZSwgIm1kaW8tYnVzIik7CisJaWYgKCFtaWlfbnApIHsKKwkJZGV2X2VycihldGgtPmRldiwgIm5vICVzIGNoaWxkIG5vZGUgZm91bmQiLCAibWRpby1idXMiKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG1paV9ucCkpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJfcHV0X25vZGU7CisJfQorCisJZXRoLT5taWlfYnVzID0gZGV2bV9tZGlvYnVzX2FsbG9jKGV0aC0+ZGV2KTsKKwlpZiAoIWV0aC0+bWlpX2J1cykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9wdXRfbm9kZTsKKwl9CisKKwlldGgtPm1paV9idXMtPm5hbWUgPSAibWRpbyI7CisJZXRoLT5taWlfYnVzLT5yZWFkID0gbXRrX21kaW9fcmVhZDsKKwlldGgtPm1paV9idXMtPndyaXRlID0gbXRrX21kaW9fd3JpdGU7CisJZXRoLT5taWlfYnVzLT5wcml2ID0gZXRoOworCWV0aC0+bWlpX2J1cy0+cGFyZW50ID0gZXRoLT5kZXY7CisKKwlpZihzbnByaW50ZihldGgtPm1paV9idXMtPmlkLCBNSUlfQlVTX0lEX1NJWkUsICIlcE9GbiIsIG1paV9ucCkgPCAwKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3B1dF9ub2RlOworCX0KKwlyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGV0aC0+bWlpX2J1cywgbWlpX25wKTsKKworZXJyX3B1dF9ub2RlOgorCW9mX25vZGVfcHV0KG1paV9ucCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXRrX21kaW9fY2xlYW51cChzdHJ1Y3QgbXRrX2V0aCAqZXRoKQoreworCWlmICghZXRoLT5taWlfYnVzKQorCQlyZXR1cm47CisKKwltZGlvYnVzX3VucmVnaXN0ZXIoZXRoLT5taWlfYnVzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG10a190eF9pcnFfZGlzYWJsZShzdHJ1Y3QgbXRrX2V0aCAqZXRoLCB1MzIgbWFzaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB2YWw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZXRoLT50eF9pcnFfbG9jaywgZmxhZ3MpOworCXZhbCA9IG10a19yMzIoZXRoLCBldGgtPnR4X2ludF9tYXNrX3JlZyk7CisJbXRrX3czMihldGgsIHZhbCAmIH5tYXNrLCBldGgtPnR4X2ludF9tYXNrX3JlZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXRoLT50eF9pcnFfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbXRrX3R4X2lycV9lbmFibGUoc3RydWN0IG10a19ldGggKmV0aCwgdTMyIG1hc2spCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgdmFsOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmV0aC0+dHhfaXJxX2xvY2ssIGZsYWdzKTsKKwl2YWwgPSBtdGtfcjMyKGV0aCwgZXRoLT50eF9pbnRfbWFza19yZWcpOworCW10a193MzIoZXRoLCB2YWwgfCBtYXNrLCBldGgtPnR4X2ludF9tYXNrX3JlZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXRoLT50eF9pcnFfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbXRrX3J4X2lycV9kaXNhYmxlKHN0cnVjdCBtdGtfZXRoICpldGgsIHUzMiBtYXNrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHZhbDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZldGgtPnJ4X2lycV9sb2NrLCBmbGFncyk7CisJdmFsID0gbXRrX3IzMihldGgsIE1US19QRE1BX0lOVF9NQVNLKTsKKwltdGtfdzMyKGV0aCwgdmFsICYgfm1hc2ssIE1US19QRE1BX0lOVF9NQVNLKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZldGgtPnJ4X2lycV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfcnhfaXJxX2VuYWJsZShzdHJ1Y3QgbXRrX2V0aCAqZXRoLCB1MzIgbWFzaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB2YWw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZXRoLT5yeF9pcnFfbG9jaywgZmxhZ3MpOworCXZhbCA9IG10a19yMzIoZXRoLCBNVEtfUERNQV9JTlRfTUFTSyk7CisJbXRrX3czMihldGgsIHZhbCB8IG1hc2ssIE1US19QRE1BX0lOVF9NQVNLKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZldGgtPnJ4X2lycV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKQoreworCWludCByZXQgPSBldGhfbWFjX2FkZHIoZGV2LCBwKTsKKwlzdHJ1Y3QgbXRrX21hYyAqbWFjID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbXRrX2V0aCAqZXRoID0gbWFjLT5odzsKKwljb25zdCBjaGFyICptYWNhZGRyID0gZGV2LT5kZXZfYWRkcjsKKworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAodW5saWtlbHkodGVzdF9iaXQoTVRLX1JFU0VUVElORywgJm1hYy0+aHctPnN0YXRlKSkpCisJCXJldHVybiAtRUJVU1k7CisKKwlzcGluX2xvY2tfYmgoJm1hYy0+aHctPnBhZ2VfbG9jayk7CisJaWYgKE1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX1NPQ19NVDc2MjgpKSB7CisJCW10a193MzIobWFjLT5odywgKG1hY2FkZHJbMF0gPDwgOCkgfCBtYWNhZGRyWzFdLAorCQkJTVQ3NjI4X1NETV9NQUNfQURSSCk7CisJCW10a193MzIobWFjLT5odywgKG1hY2FkZHJbMl0gPDwgMjQpIHwgKG1hY2FkZHJbM10gPDwgMTYpIHwKKwkJCShtYWNhZGRyWzRdIDw8IDgpIHwgbWFjYWRkcls1XSwKKwkJCU1UNzYyOF9TRE1fTUFDX0FEUkwpOworCX0gZWxzZSB7CisJCW10a193MzIobWFjLT5odywgKG1hY2FkZHJbMF0gPDwgOCkgfCBtYWNhZGRyWzFdLAorCQkJTVRLX0dETUFfTUFDX0FEUkgobWFjLT5pZCkpOworCQltdGtfdzMyKG1hYy0+aHcsIChtYWNhZGRyWzJdIDw8IDI0KSB8IChtYWNhZGRyWzNdIDw8IDE2KSB8CisJCQkobWFjYWRkcls0XSA8PCA4KSB8IG1hY2FkZHJbNV0sCisJCQlNVEtfR0RNQV9NQUNfQURSTChtYWMtPmlkKSk7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZtYWMtPmh3LT5wYWdlX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbXRrX3N0YXRzX3VwZGF0ZV9tYWMoc3RydWN0IG10a19tYWMgKm1hYykKK3sKKwlzdHJ1Y3QgbXRrX2h3X3N0YXRzICpod19zdGF0cyA9IG1hYy0+aHdfc3RhdHM7CisJdW5zaWduZWQgaW50IGJhc2UgPSBNVEtfR0RNMV9UWF9HQkNOVDsKKwl1NjQgc3RhdHM7CisKKwliYXNlICs9IGh3X3N0YXRzLT5yZWdfb2Zmc2V0OworCisJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmaHdfc3RhdHMtPnN5bmNwKTsKKworCWh3X3N0YXRzLT5yeF9ieXRlcyArPSBtdGtfcjMyKG1hYy0+aHcsIGJhc2UpOworCXN0YXRzID0gIG10a19yMzIobWFjLT5odywgYmFzZSArIDB4MDQpOworCWlmIChzdGF0cykKKwkJaHdfc3RhdHMtPnJ4X2J5dGVzICs9IChzdGF0cyA8PCAzMik7CisJaHdfc3RhdHMtPnJ4X3BhY2tldHMgKz0gbXRrX3IzMihtYWMtPmh3LCBiYXNlICsgMHgwOCk7CisJaHdfc3RhdHMtPnJ4X292ZXJmbG93ICs9IG10a19yMzIobWFjLT5odywgYmFzZSArIDB4MTApOworCWh3X3N0YXRzLT5yeF9mY3NfZXJyb3JzICs9IG10a19yMzIobWFjLT5odywgYmFzZSArIDB4MTQpOworCWh3X3N0YXRzLT5yeF9zaG9ydF9lcnJvcnMgKz0gbXRrX3IzMihtYWMtPmh3LCBiYXNlICsgMHgxOCk7CisJaHdfc3RhdHMtPnJ4X2xvbmdfZXJyb3JzICs9IG10a19yMzIobWFjLT5odywgYmFzZSArIDB4MWMpOworCWh3X3N0YXRzLT5yeF9jaGVja3N1bV9lcnJvcnMgKz0gbXRrX3IzMihtYWMtPmh3LCBiYXNlICsgMHgyMCk7CisJaHdfc3RhdHMtPnJ4X2Zsb3dfY29udHJvbF9wYWNrZXRzICs9CisJCQkJCW10a19yMzIobWFjLT5odywgYmFzZSArIDB4MjQpOworCWh3X3N0YXRzLT50eF9za2lwICs9IG10a19yMzIobWFjLT5odywgYmFzZSArIDB4MjgpOworCWh3X3N0YXRzLT50eF9jb2xsaXNpb25zICs9IG10a19yMzIobWFjLT5odywgYmFzZSArIDB4MmMpOworCWh3X3N0YXRzLT50eF9ieXRlcyArPSBtdGtfcjMyKG1hYy0+aHcsIGJhc2UgKyAweDMwKTsKKwlzdGF0cyA9ICBtdGtfcjMyKG1hYy0+aHcsIGJhc2UgKyAweDM0KTsKKwlpZiAoc3RhdHMpCisJCWh3X3N0YXRzLT50eF9ieXRlcyArPSAoc3RhdHMgPDwgMzIpOworCWh3X3N0YXRzLT50eF9wYWNrZXRzICs9IG10a19yMzIobWFjLT5odywgYmFzZSArIDB4MzgpOworCXU2NF9zdGF0c191cGRhdGVfZW5kKCZod19zdGF0cy0+c3luY3ApOworfQorCitzdGF0aWMgdm9pZCBtdGtfc3RhdHNfdXBkYXRlKHN0cnVjdCBtdGtfZXRoICpldGgpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTVRLX01BQ19DT1VOVDsgaSsrKSB7CisJCWlmICghZXRoLT5tYWNbaV0gfHwgIWV0aC0+bWFjW2ldLT5od19zdGF0cykKKwkJCWNvbnRpbnVlOworCQlpZiAoc3Bpbl90cnlsb2NrKCZldGgtPm1hY1tpXS0+aHdfc3RhdHMtPnN0YXRzX2xvY2spKSB7CisJCQltdGtfc3RhdHNfdXBkYXRlX21hYyhldGgtPm1hY1tpXSk7CisJCQlzcGluX3VubG9jaygmZXRoLT5tYWNbaV0tPmh3X3N0YXRzLT5zdGF0c19sb2NrKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgbXRrX2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IHJ0bmxfbGlua19zdGF0czY0ICpzdG9yYWdlKQoreworCXN0cnVjdCBtdGtfbWFjICptYWMgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBtdGtfaHdfc3RhdHMgKmh3X3N0YXRzID0gbWFjLT5od19zdGF0czsKKwl1bnNpZ25lZCBpbnQgc3RhcnQ7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpICYmIG5ldGlmX2RldmljZV9wcmVzZW50KGRldikpIHsKKwkJaWYgKHNwaW5fdHJ5bG9ja19iaCgmaHdfc3RhdHMtPnN0YXRzX2xvY2spKSB7CisJCQltdGtfc3RhdHNfdXBkYXRlX21hYyhtYWMpOworCQkJc3Bpbl91bmxvY2tfYmgoJmh3X3N0YXRzLT5zdGF0c19sb2NrKTsKKwkJfQorCX0KKworCWRvIHsKKwkJc3RhcnQgPSB1NjRfc3RhdHNfZmV0Y2hfYmVnaW5faXJxKCZod19zdGF0cy0+c3luY3ApOworCQlzdG9yYWdlLT5yeF9wYWNrZXRzID0gaHdfc3RhdHMtPnJ4X3BhY2tldHM7CisJCXN0b3JhZ2UtPnR4X3BhY2tldHMgPSBod19zdGF0cy0+dHhfcGFja2V0czsKKwkJc3RvcmFnZS0+cnhfYnl0ZXMgPSBod19zdGF0cy0+cnhfYnl0ZXM7CisJCXN0b3JhZ2UtPnR4X2J5dGVzID0gaHdfc3RhdHMtPnR4X2J5dGVzOworCQlzdG9yYWdlLT5jb2xsaXNpb25zID0gaHdfc3RhdHMtPnR4X2NvbGxpc2lvbnM7CisJCXN0b3JhZ2UtPnJ4X2xlbmd0aF9lcnJvcnMgPSBod19zdGF0cy0+cnhfc2hvcnRfZXJyb3JzICsKKwkJCWh3X3N0YXRzLT5yeF9sb25nX2Vycm9yczsKKwkJc3RvcmFnZS0+cnhfb3Zlcl9lcnJvcnMgPSBod19zdGF0cy0+cnhfb3ZlcmZsb3c7CisJCXN0b3JhZ2UtPnJ4X2NyY19lcnJvcnMgPSBod19zdGF0cy0+cnhfZmNzX2Vycm9yczsKKwkJc3RvcmFnZS0+cnhfZXJyb3JzID0gaHdfc3RhdHMtPnJ4X2NoZWNrc3VtX2Vycm9yczsKKwkJc3RvcmFnZS0+dHhfYWJvcnRlZF9lcnJvcnMgPSBod19zdGF0cy0+dHhfc2tpcDsKKwl9IHdoaWxlICh1NjRfc3RhdHNfZmV0Y2hfcmV0cnlfaXJxKCZod19zdGF0cy0+c3luY3AsIHN0YXJ0KSk7CisKKwlzdG9yYWdlLT50eF9lcnJvcnMgPSBkZXYtPnN0YXRzLnR4X2Vycm9yczsKKwlzdG9yYWdlLT5yeF9kcm9wcGVkID0gZGV2LT5zdGF0cy5yeF9kcm9wcGVkOworCXN0b3JhZ2UtPnR4X2Ryb3BwZWQgPSBkZXYtPnN0YXRzLnR4X2Ryb3BwZWQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG10a19tYXhfZnJhZ19zaXplKGludCBtdHUpCit7CisJLyogbWFrZSBzdXJlIGJ1Zl9zaXplIHdpbGwgYmUgYXQgbGVhc3QgTVRLX01BWF9SWF9MRU5HVEggKi8KKwlpZiAobXR1ICsgTVRLX1JYX0VUSF9ITEVOIDwgTVRLX01BWF9SWF9MRU5HVEgpCisJCW10dSA9IE1US19NQVhfUlhfTEVOR1RIIC0gTVRLX1JYX0VUSF9ITEVOOworCisJcmV0dXJuIFNLQl9EQVRBX0FMSUdOKE1US19SWF9ITEVOICsgbXR1KSArCisJCVNLQl9EQVRBX0FMSUdOKHNpemVvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG10a19tYXhfYnVmX3NpemUoaW50IGZyYWdfc2l6ZSkKK3sKKwlpbnQgYnVmX3NpemUgPSBmcmFnX3NpemUgLSBORVRfU0tCX1BBRCAtIE5FVF9JUF9BTElHTiAtCisJCSAgICAgICBTS0JfREFUQV9BTElHTihzaXplb2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbykpOworCisJV0FSTl9PTihidWZfc2l6ZSA8IE1US19NQVhfUlhfTEVOR1RIKTsKKworCXJldHVybiBidWZfc2l6ZTsKK30KKworc3RhdGljIGlubGluZSBib29sIG10a19yeF9nZXRfZGVzYyhzdHJ1Y3QgbXRrX3J4X2RtYSAqcnhkLAorCQkJCSAgIHN0cnVjdCBtdGtfcnhfZG1hICpkbWFfcnhkKQoreworCXJ4ZC0+cnhkMiA9IFJFQURfT05DRShkbWFfcnhkLT5yeGQyKTsKKwlpZiAoIShyeGQtPnJ4ZDIgJiBSWF9ETUFfRE9ORSkpCisJCXJldHVybiBmYWxzZTsKKworCXJ4ZC0+cnhkMSA9IFJFQURfT05DRShkbWFfcnhkLT5yeGQxKTsKKwlyeGQtPnJ4ZDMgPSBSRUFEX09OQ0UoZG1hX3J4ZC0+cnhkMyk7CisJcnhkLT5yeGQ0ID0gUkVBRF9PTkNFKGRtYV9yeGQtPnJ4ZDQpOworI2lmIGRlZmluZWQoQ09ORklHX01FRElBVEVLX05FVFNZU19WMikKKwlyeGQtPnJ4ZDUgPSBSRUFEX09OQ0UoZG1hX3J4ZC0+cnhkNSk7CisJcnhkLT5yeGQ2ID0gUkVBRF9PTkNFKGRtYV9yeGQtPnJ4ZDYpOworI2VuZGlmCisJcmV0dXJuIHRydWU7Cit9CisKKy8qIHRoZSBxZG1hIGNvcmUgbmVlZHMgc2NyYXRjaCBtZW1vcnkgdG8gYmUgc2V0dXAgKi8KK3N0YXRpYyBpbnQgbXRrX2luaXRfZnFfZG1hKHN0cnVjdCBtdGtfZXRoICpldGgpCit7CisJZG1hX2FkZHJfdCBwaHlfcmluZ190YWlsOworCWludCBjbnQgPSBNVEtfRE1BX1NJWkU7CisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKwlpbnQgaTsKKworCWlmICghZXRoLT5zb2MtPmhhc19zcmFtKSB7CisJCWV0aC0+c2NyYXRjaF9yaW5nID0gZG1hX2FsbG9jX2NvaGVyZW50KGV0aC0+ZGV2LAorCQkJCQkgICAgICAgY250ICogc2l6ZW9mKHN0cnVjdCBtdGtfdHhfZG1hKSwKKwkJCQkJICAgICAgICZldGgtPnBoeV9zY3JhdGNoX3JpbmcsCisJCQkJCSAgICAgICBHRlBfQVRPTUlDKTsKKwl9IGVsc2UgeworCQlldGgtPnNjcmF0Y2hfcmluZyA9IGV0aC0+YmFzZSArIE1US19FVEhfU1JBTV9PRkZTRVQ7CisJfQorCisJaWYgKHVubGlrZWx5KCFldGgtPnNjcmF0Y2hfcmluZykpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKworCWV0aC0+c2NyYXRjaF9oZWFkID0ga2NhbGxvYyhjbnQsIE1US19RRE1BX1BBR0VfU0laRSwKKwkJCQkgICAgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCFldGgtPnNjcmF0Y2hfaGVhZCkpCisJCXJldHVybiAtRU5PTUVNOworCisJZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShldGgtPmRldiwKKwkJCQkgIGV0aC0+c2NyYXRjaF9oZWFkLCBjbnQgKiBNVEtfUURNQV9QQUdFX1NJWkUsCisJCQkJICBETUFfRlJPTV9ERVZJQ0UpOworCWlmICh1bmxpa2VseShkbWFfbWFwcGluZ19lcnJvcihldGgtPmRldiwgZG1hX2FkZHIpKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwaHlfcmluZ190YWlsID0gZXRoLT5waHlfc2NyYXRjaF9yaW5nICsKKwkJCShzaXplb2Yoc3RydWN0IG10a190eF9kbWEpICogKGNudCAtIDEpKTsKKworCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykgeworCQlldGgtPnNjcmF0Y2hfcmluZ1tpXS50eGQxID0KKwkJCQkoZG1hX2FkZHIgKyAoaSAqIE1US19RRE1BX1BBR0VfU0laRSkpOworCQlpZiAoaSA8IGNudCAtIDEpCisJCQlldGgtPnNjcmF0Y2hfcmluZ1tpXS50eGQyID0gKGV0aC0+cGh5X3NjcmF0Y2hfcmluZyArCisJCQkJKChpICsgMSkgKiBzaXplb2Yoc3RydWN0IG10a190eF9kbWEpKSk7CisJCWV0aC0+c2NyYXRjaF9yaW5nW2ldLnR4ZDMgPSBUWF9ETUFfU0RMKE1US19RRE1BX1BBR0VfU0laRSk7CisKKwkJZXRoLT5zY3JhdGNoX3JpbmdbaV0udHhkNCA9IDA7CisjaWYgZGVmaW5lZChDT05GSUdfTUVESUFURUtfTkVUU1lTX1YyKQorCQlpZiAoZXRoLT5zb2MtPmhhc19zcmFtICYmICgoc2l6ZW9mKHN0cnVjdCBtdGtfdHhfZG1hKSkgPiAxNikpIHsKKwkJCWV0aC0+c2NyYXRjaF9yaW5nW2ldLnR4ZDUgPSAwOworCQkJZXRoLT5zY3JhdGNoX3JpbmdbaV0udHhkNiA9IDA7CisJCQlldGgtPnNjcmF0Y2hfcmluZ1tpXS50eGQ3ID0gMDsKKwkJCWV0aC0+c2NyYXRjaF9yaW5nW2ldLnR4ZDggPSAwOworCQl9CisjZW5kaWYKKwl9CisKKwltdGtfdzMyKGV0aCwgZXRoLT5waHlfc2NyYXRjaF9yaW5nLCBNVEtfUURNQV9GUV9IRUFEKTsKKwltdGtfdzMyKGV0aCwgcGh5X3JpbmdfdGFpbCwgTVRLX1FETUFfRlFfVEFJTCk7CisJbXRrX3czMihldGgsIChjbnQgPDwgMTYpIHwgY250LCBNVEtfUURNQV9GUV9DTlQpOworCW10a193MzIoZXRoLCBNVEtfUURNQV9QQUdFX1NJWkUgPDwgMTYsIE1US19RRE1BX0ZRX0JMRU4pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqbXRrX3FkbWFfcGh5c190b192aXJ0KHN0cnVjdCBtdGtfdHhfcmluZyAqcmluZywgdTMyIGRlc2MpCit7CisJdm9pZCAqcmV0ID0gcmluZy0+ZG1hOworCisJcmV0dXJuIHJldCArIChkZXNjIC0gcmluZy0+cGh5cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a190eF9idWYgKm10a19kZXNjX3RvX3R4X2J1ZihzdHJ1Y3QgbXRrX3R4X3JpbmcgKnJpbmcsCisJCQkJCQkgICAgc3RydWN0IG10a190eF9kbWEgKnR4ZCkKK3sKKwlpbnQgaWR4ID0gdHhkIC0gcmluZy0+ZG1hOworCisJcmV0dXJuICZyaW5nLT5idWZbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBtdGtfdHhfZG1hICpxZG1hX3RvX3BkbWEoc3RydWN0IG10a190eF9yaW5nICpyaW5nLAorCQkJCSAgICAgICBzdHJ1Y3QgbXRrX3R4X2RtYSAqZG1hKQoreworCXJldHVybiByaW5nLT5kbWFfcGRtYSAtIHJpbmctPmRtYSArIGRtYTsKK30KKworc3RhdGljIGludCB0eGRfdG9faWR4KHN0cnVjdCBtdGtfdHhfcmluZyAqcmluZywgc3RydWN0IG10a190eF9kbWEgKmRtYSkKK3sKKwlyZXR1cm4gKCh2b2lkICopZG1hIC0gKHZvaWQgKilyaW5nLT5kbWEpIC8gc2l6ZW9mKCpkbWEpOworfQorCitzdGF0aWMgdm9pZCBtdGtfdHhfdW5tYXAoc3RydWN0IG10a19ldGggKmV0aCwgc3RydWN0IG10a190eF9idWYgKnR4X2J1ZiwKKwkJCSBib29sIG5hcGkpCit7CisJaWYgKE1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX1FETUEpKSB7CisJCWlmICh0eF9idWYtPmZsYWdzICYgTVRLX1RYX0ZMQUdTX1NJTkdMRTApIHsKKwkJCWRtYV91bm1hcF9zaW5nbGUoZXRoLT5kZXYsCisJCQkJCSBkbWFfdW5tYXBfYWRkcih0eF9idWYsIGRtYV9hZGRyMCksCisJCQkJCSBkbWFfdW5tYXBfbGVuKHR4X2J1ZiwgZG1hX2xlbjApLAorCQkJCQkgRE1BX1RPX0RFVklDRSk7CisJCX0gZWxzZSBpZiAodHhfYnVmLT5mbGFncyAmIE1US19UWF9GTEFHU19QQUdFMCkgeworCQkJZG1hX3VubWFwX3BhZ2UoZXRoLT5kZXYsCisJCQkJICAgICAgIGRtYV91bm1hcF9hZGRyKHR4X2J1ZiwgZG1hX2FkZHIwKSwKKwkJCQkgICAgICAgZG1hX3VubWFwX2xlbih0eF9idWYsIGRtYV9sZW4wKSwKKwkJCQkgICAgICAgRE1BX1RPX0RFVklDRSk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoZG1hX3VubWFwX2xlbih0eF9idWYsIGRtYV9sZW4wKSkgeworCQkJZG1hX3VubWFwX3BhZ2UoZXRoLT5kZXYsCisJCQkJICAgICAgIGRtYV91bm1hcF9hZGRyKHR4X2J1ZiwgZG1hX2FkZHIwKSwKKwkJCQkgICAgICAgZG1hX3VubWFwX2xlbih0eF9idWYsIGRtYV9sZW4wKSwKKwkJCQkgICAgICAgRE1BX1RPX0RFVklDRSk7CisJCX0KKworCQlpZiAoZG1hX3VubWFwX2xlbih0eF9idWYsIGRtYV9sZW4xKSkgeworCQkJZG1hX3VubWFwX3BhZ2UoZXRoLT5kZXYsCisJCQkJICAgICAgIGRtYV91bm1hcF9hZGRyKHR4X2J1ZiwgZG1hX2FkZHIxKSwKKwkJCQkgICAgICAgZG1hX3VubWFwX2xlbih0eF9idWYsIGRtYV9sZW4xKSwKKwkJCQkgICAgICAgRE1BX1RPX0RFVklDRSk7CisJCX0KKwl9CisKKwl0eF9idWYtPmZsYWdzID0gMDsKKwlpZiAodHhfYnVmLT5za2IgJiYKKwkgICAgKHR4X2J1Zi0+c2tiICE9IChzdHJ1Y3Qgc2tfYnVmZiAqKU1US19ETUFfRFVNTVlfREVTQykpIHsKKwkJaWYgKG5hcGkpCisJCQluYXBpX2NvbnN1bWVfc2tiKHR4X2J1Zi0+c2tiLCBuYXBpKTsKKwkJZWxzZQorCQkJZGV2X2tmcmVlX3NrYl9hbnkodHhfYnVmLT5za2IpOworCX0KKwl0eF9idWYtPnNrYiA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX3R4X2J1ZihzdHJ1Y3QgbXRrX2V0aCAqZXRoLCBzdHJ1Y3QgbXRrX3R4X2J1ZiAqdHhfYnVmLAorCQkJIHN0cnVjdCBtdGtfdHhfZG1hICp0eGQsIGRtYV9hZGRyX3QgbWFwcGVkX2FkZHIsCisJCQkgc2l6ZV90IHNpemUsIGludCBpZHgpCit7CisJaWYgKE1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX1FETUEpKSB7CisJCWRtYV91bm1hcF9hZGRyX3NldCh0eF9idWYsIGRtYV9hZGRyMCwgbWFwcGVkX2FkZHIpOworCQlkbWFfdW5tYXBfbGVuX3NldCh0eF9idWYsIGRtYV9sZW4wLCBzaXplKTsKKwl9IGVsc2UgeworCQlpZiAoaWR4ICYgMSkgeworCQkJdHhkLT50eGQzID0gbWFwcGVkX2FkZHI7CisJCQl0eGQtPnR4ZDIgfD0gVFhfRE1BX1BMRU4xKHNpemUpOworCQkJZG1hX3VubWFwX2FkZHJfc2V0KHR4X2J1ZiwgZG1hX2FkZHIxLCBtYXBwZWRfYWRkcik7CisJCQlkbWFfdW5tYXBfbGVuX3NldCh0eF9idWYsIGRtYV9sZW4xLCBzaXplKTsKKwkJfSBlbHNlIHsKKwkJCXR4X2J1Zi0+c2tiID0gKHN0cnVjdCBza19idWZmICopTVRLX0RNQV9EVU1NWV9ERVNDOworCQkJdHhkLT50eGQxID0gbWFwcGVkX2FkZHI7CisJCQl0eGQtPnR4ZDIgPSBUWF9ETUFfUExFTjAoc2l6ZSk7CisJCQlkbWFfdW5tYXBfYWRkcl9zZXQodHhfYnVmLCBkbWFfYWRkcjAsIG1hcHBlZF9hZGRyKTsKKwkJCWRtYV91bm1hcF9sZW5fc2V0KHR4X2J1ZiwgZG1hX2xlbjAsIHNpemUpOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IG10a190eF9tYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgICAgaW50IHR4X251bSwgc3RydWN0IG10a190eF9yaW5nICpyaW5nLCBib29sIGdzbykKK3sKKwlzdHJ1Y3QgbXRrX21hYyAqbWFjID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbXRrX2V0aCAqZXRoID0gbWFjLT5odzsKKwlzdHJ1Y3QgbXRrX3R4X2RtYSAqaXR4ZCwgKnR4ZDsKKwlzdHJ1Y3QgbXRrX3R4X2RtYSAqaXR4ZF9wZG1hLCAqdHhkX3BkbWE7CisJc3RydWN0IG10a190eF9idWYgKml0eF9idWYsICp0eF9idWY7CisJZG1hX2FkZHJfdCBtYXBwZWRfYWRkcjsKKwl1bnNpZ25lZCBpbnQgbnJfZnJhZ3M7CisJaW50IGksIG5fZGVzYyA9IDE7CisJdTMyIHR4ZDQgPSAwLCB0eGQ1ID0gMCwgdHhkNiA9IDA7CisJdTMyIGZwb3J0OworCXUzMiBxaWQgPSAwOworCWludCBrID0gMDsKKworCWl0eGQgPSByaW5nLT5uZXh0X2ZyZWU7CisJaXR4ZF9wZG1hID0gcWRtYV90b19wZG1hKHJpbmcsIGl0eGQpOworCWlmIChpdHhkID09IHJpbmctPmxhc3RfZnJlZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpdHhfYnVmID0gbXRrX2Rlc2NfdG9fdHhfYnVmKHJpbmcsIGl0eGQpOworCW1lbXNldChpdHhfYnVmLCAwLCBzaXplb2YoKml0eF9idWYpKTsKKworCW1hcHBlZF9hZGRyID0gZG1hX21hcF9zaW5nbGUoZXRoLT5kZXYsIHNrYi0+ZGF0YSwKKwkJCQkgICAgIHNrYl9oZWFkbGVuKHNrYiksIERNQV9UT19ERVZJQ0UpOworCWlmICh1bmxpa2VseShkbWFfbWFwcGluZ19lcnJvcihldGgtPmRldiwgbWFwcGVkX2FkZHIpKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlXUklURV9PTkNFKGl0eGQtPnR4ZDEsIG1hcHBlZF9hZGRyKTsKKwlpdHhfYnVmLT5mbGFncyB8PSBNVEtfVFhfRkxBR1NfU0lOR0xFMDsKKwlpdHhfYnVmLT5mbGFncyB8PSAoIW1hYy0+aWQpID8gTVRLX1RYX0ZMQUdTX0ZQT1JUMCA6CisJCQkgIE1US19UWF9GTEFHU19GUE9SVDE7CisJc2V0dXBfdHhfYnVmKGV0aCwgaXR4X2J1ZiwgaXR4ZF9wZG1hLCBtYXBwZWRfYWRkciwgc2tiX2hlYWRsZW4oc2tiKSwKKwkJICAgICBrKyspOworCisJbnJfZnJhZ3MgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOworCisgICAgICAgIHFpZCA9IHNrYi0+bWFyayAmIChNVEtfUURNQV9UWF9NQVNLKTsKKworI2lmIGRlZmluZWQoQ09ORklHX01FRElBVEVLX05FVFNZU19WMikKKwlpZighcWlkICYmIG1hYy0+aWQpCisJCXFpZCA9IE1US19RRE1BX0dNQUMyX1FJRDsKKyNlbmRpZgorCisJaWYgKE1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX05FVFNZU19WMikpIHsKKwkJLyogc2V0IHRoZSBmb3J3YXJkIHBvcnQgKi8KKwkJZnBvcnQgPSAobWFjLT5pZCArIDEpIDw8IFRYX0RNQV9GUE9SVF9TSElGVF9WMjsKKwkJdHhkNCB8PSBmcG9ydDsKKworCQlpZiAoZ3NvKQorCQkJdHhkNSB8PSBUWF9ETUFfVFNPX1YyOworCisJCS8qIFRYIENoZWNrc3VtIG9mZmxvYWQgKi8KKwkJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpCisJCQl0eGQ1IHw9IFRYX0RNQV9DSEtTVU1fVjI7CisKKwkJLyogVkxBTiBoZWFkZXIgb2ZmbG9hZCAqLworCQlpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkKKwkJCXR4ZDYgfD0gVFhfRE1BX0lOU19WTEFOX1YyIHwgc2tiX3ZsYW5fdGFnX2dldChza2IpOworCisJCXR4ZDQgPSB0eGQ0IHwgVFhfRE1BX1NXQ19WMjsKKwl9IGVsc2UgeworCQkvKiBzZXQgdGhlIGZvcndhcmQgcG9ydCAqLworCQlmcG9ydCA9IChtYWMtPmlkICsgMSkgPDwgVFhfRE1BX0ZQT1JUX1NISUZUOworCQl0eGQ0IHw9IGZwb3J0OworCisgICAgICAgICAgICAgICAgaWYgKGdzbykKKyAgICAgICAgICAgICAgICAgICAgICAgIHR4ZDQgfD0gVFhfRE1BX1RTTzsKKworICAgICAgICAgICAgICAgIC8qIFRYIENoZWNrc3VtIG9mZmxvYWQgKi8KKyAgICAgICAgICAgICAgICBpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHR4ZDQgfD0gVFhfRE1BX0NIS1NVTTsKKworCQkvKiBWTEFOIGhlYWRlciBvZmZsb2FkICovCisJCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKQorCQkJdHhkNCB8PSBUWF9ETUFfSU5TX1ZMQU4gfCBza2Jfdmxhbl90YWdfZ2V0KHNrYik7CisJfQorCS8qIFRYIFNHIG9mZmxvYWQgKi8KKwl0eGQgPSBpdHhkOworCXR4ZF9wZG1hID0gcWRtYV90b19wZG1hKHJpbmcsIHR4ZCk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfTUVESUFURUtfSE5BVCkgfHwgZGVmaW5lZChDT05GSUdfTkVUX01FRElBVEVLX0hOQVRfTU9EVUxFKQorCWlmIChITkFUX1NLQl9DQjIoc2tiKS0+bWFnaWMgPT0gMHg3ODY4MTQxNSkgeworCQlpZiAoTVRLX0hBU19DQVBTKGV0aC0+c29jLT5jYXBzLCBNVEtfTkVUU1lTX1YyKSkgeworCQkJdHhkNCAmPSB+KDB4ZiA8PCBUWF9ETUFfRlBPUlRfU0hJRlRfVjIpOworCQkJdHhkNCB8PSAweDQgPDwgVFhfRE1BX0ZQT1JUX1NISUZUX1YyOworCQl9IGVsc2UgeworCQkJdHhkNCAmPSB+KDB4NyA8PCBUWF9ETUFfRlBPUlRfU0hJRlQpOworCQkJdHhkNCB8PSAweDQgPDwgVFhfRE1BX0ZQT1JUX1NISUZUOworCQl9CisJfQorCisJdHJhY2VfcHJpbnRrKCJbJXNdIG5yX2ZyYWdzPSV4IEhOQVRfU0tCX0NCMihza2IpLT5tYWdpYz0leCB0eGQ0PSV4PC0tLS0tXG4iLAorCQkgICAgIF9fZnVuY19fLCBucl9mcmFncywgSE5BVF9TS0JfQ0IyKHNrYiktPm1hZ2ljLCB0eGQ0KTsKKyNlbmRpZgorCisJZm9yIChpID0gMDsgaSA8IG5yX2ZyYWdzOyBpKyspIHsKKwkJc2tiX2ZyYWdfdCAqZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldOworCQl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMDsKKwkJaW50IGZyYWdfc2l6ZSA9IHNrYl9mcmFnX3NpemUoZnJhZyk7CisKKwkJd2hpbGUgKGZyYWdfc2l6ZSkgeworCQkJYm9vbCBsYXN0X2ZyYWcgPSBmYWxzZTsKKwkJCXVuc2lnbmVkIGludCBmcmFnX21hcF9zaXplOworCQkJYm9vbCBuZXdfZGVzYyA9IHRydWU7CisKKwkJCWlmIChNVEtfSEFTX0NBUFMoZXRoLT5zb2MtPmNhcHMsIE1US19RRE1BKSB8fAorCQkJICAgIChpICYgMHgxKSkgeworCQkJCXR4ZCA9IG10a19xZG1hX3BoeXNfdG9fdmlydChyaW5nLCB0eGQtPnR4ZDIpOworCQkJCXR4ZF9wZG1hID0gcWRtYV90b19wZG1hKHJpbmcsIHR4ZCk7CisJCQkJaWYgKHR4ZCA9PSByaW5nLT5sYXN0X2ZyZWUpCisJCQkJCWdvdG8gZXJyX2RtYTsKKworCQkJCW5fZGVzYysrOworCQkJfSBlbHNlIHsKKwkJCQluZXdfZGVzYyA9IGZhbHNlOworCQkJfQorCisKKwkJCWZyYWdfbWFwX3NpemUgPSBtaW4oZnJhZ19zaXplLCBNVEtfVFhfRE1BX0JVRl9MRU4pOworCQkJbWFwcGVkX2FkZHIgPSBza2JfZnJhZ19kbWFfbWFwKGV0aC0+ZGV2LCBmcmFnLCBvZmZzZXQsCisJCQkJCQkgICAgICAgZnJhZ19tYXBfc2l6ZSwKKwkJCQkJCSAgICAgICBETUFfVE9fREVWSUNFKTsKKwkJCWlmICh1bmxpa2VseShkbWFfbWFwcGluZ19lcnJvcihldGgtPmRldiwgbWFwcGVkX2FkZHIpKSkKKwkJCQlnb3RvIGVycl9kbWE7CisKKwkJCWlmIChpID09IG5yX2ZyYWdzIC0gMSAmJgorCQkJICAgIChmcmFnX3NpemUgLSBmcmFnX21hcF9zaXplKSA9PSAwKQorCQkJCWxhc3RfZnJhZyA9IHRydWU7CisKKwkJCVdSSVRFX09OQ0UodHhkLT50eGQxLCBtYXBwZWRfYWRkcik7CisKKwkJCWlmIChNVEtfSEFTX0NBUFMoZXRoLT5zb2MtPmNhcHMsIE1US19ORVRTWVNfVjIpKSB7CisJCQkJV1JJVEVfT05DRSh0eGQtPnR4ZDMsIChUWF9ETUFfUExFTjAoZnJhZ19tYXBfc2l6ZSkgfAorCQkJCQkgICBsYXN0X2ZyYWcgKiBUWF9ETUFfTFMwKSk7CisJCQkJV1JJVEVfT05DRSh0eGQtPnR4ZDQsIGZwb3J0IHwgVFhfRE1BX1NXQ19WMiB8CisJCQkJCQkgICAgICBRSURfQklUU19WMihxaWQpKTsKKwkJCX0gZWxzZSB7CisJCQkJV1JJVEVfT05DRSh0eGQtPnR4ZDMsCisJCQkJCSAgIChUWF9ETUFfU1dDIHwgUUlEX0xPV19CSVRTKHFpZCkgfAorCQkJCQkgICAgVFhfRE1BX1BMRU4wKGZyYWdfbWFwX3NpemUpIHwKKwkJCQkJICAgIGxhc3RfZnJhZyAqIFRYX0RNQV9MUzApKTsKKwkJCQlXUklURV9PTkNFKHR4ZC0+dHhkNCwKKwkJCQkJICAgZnBvcnQgfCBRSURfSElHSF9CSVRTKHFpZCkpOworCQkJfQorCisJCQl0eF9idWYgPSBtdGtfZGVzY190b190eF9idWYocmluZywgdHhkKTsKKwkJCWlmIChuZXdfZGVzYykKKwkJCQltZW1zZXQodHhfYnVmLCAwLCBzaXplb2YoKnR4X2J1ZikpOworCQkJdHhfYnVmLT5za2IgPSAoc3RydWN0IHNrX2J1ZmYgKilNVEtfRE1BX0RVTU1ZX0RFU0M7CisJCQl0eF9idWYtPmZsYWdzIHw9IE1US19UWF9GTEFHU19QQUdFMDsKKwkJCXR4X2J1Zi0+ZmxhZ3MgfD0gKCFtYWMtPmlkKSA/IE1US19UWF9GTEFHU19GUE9SVDAgOgorCQkJCQkgTVRLX1RYX0ZMQUdTX0ZQT1JUMTsKKworCQkJc2V0dXBfdHhfYnVmKGV0aCwgdHhfYnVmLCB0eGRfcGRtYSwgbWFwcGVkX2FkZHIsCisJCQkJICAgICBmcmFnX21hcF9zaXplLCBrKyspOworCisJCQlmcmFnX3NpemUgLT0gZnJhZ19tYXBfc2l6ZTsKKwkJCW9mZnNldCArPSBmcmFnX21hcF9zaXplOworCQl9CisJfQorCisJLyogc3RvcmUgc2tiIHRvIGNsZWFudXAgKi8KKwlpdHhfYnVmLT5za2IgPSBza2I7CisKKyNpZiBkZWZpbmVkKENPTkZJR19NRURJQVRFS19ORVRTWVNfVjIpCisJV1JJVEVfT05DRShpdHhkLT50eGQ1LCB0eGQ1KTsKKwlXUklURV9PTkNFKGl0eGQtPnR4ZDYsIHR4ZDYpOworCVdSSVRFX09OQ0UoaXR4ZC0+dHhkNywgMCk7CisJV1JJVEVfT05DRShpdHhkLT50eGQ4LCAwKTsKKyNlbmRpZgorCisJaWYgKE1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX05FVFNZU19WMikpIHsKKwkJV1JJVEVfT05DRShpdHhkLT50eGQ0LCB0eGQ0IHwgUUlEX0JJVFNfVjIocWlkKSk7CisJCVdSSVRFX09OQ0UoaXR4ZC0+dHhkMywgKFRYX0RNQV9QTEVOMChza2JfaGVhZGxlbihza2IpKSB8CisJCQkJKCFucl9mcmFncyAqIFRYX0RNQV9MUzApKSk7CisJfSBlbHNlIHsKKwkJV1JJVEVfT05DRShpdHhkLT50eGQ0LCB0eGQ0IHwgUUlEX0hJR0hfQklUUyhxaWQpKTsKKwkJV1JJVEVfT05DRShpdHhkLT50eGQzLAorCQkJICAgVFhfRE1BX1NXQyB8IFRYX0RNQV9QTEVOMChza2JfaGVhZGxlbihza2IpKSB8CisJCQkgICAoIW5yX2ZyYWdzICogVFhfRE1BX0xTMCkgfCBRSURfTE9XX0JJVFMocWlkKSk7CisJfQorCisJaWYgKCFNVEtfSEFTX0NBUFMoZXRoLT5zb2MtPmNhcHMsIE1US19RRE1BKSkgeworCQlpZiAoayAmIDB4MSkKKwkJCXR4ZF9wZG1hLT50eGQyIHw9IFRYX0RNQV9MUzA7CisJCWVsc2UKKwkJCXR4ZF9wZG1hLT50eGQyIHw9IFRYX0RNQV9MUzE7CisJfQorCisJbmV0ZGV2X3NlbnRfcXVldWUoZGV2LCBza2ItPmxlbik7CisJc2tiX3R4X3RpbWVzdGFtcChza2IpOworCisJcmluZy0+bmV4dF9mcmVlID0gbXRrX3FkbWFfcGh5c190b192aXJ0KHJpbmcsIHR4ZC0+dHhkMik7CisJYXRvbWljX3N1YihuX2Rlc2MsICZyaW5nLT5mcmVlX2NvdW50KTsKKworCS8qIG1ha2Ugc3VyZSB0aGF0IGFsbCBjaGFuZ2VzIHRvIHRoZSBkbWEgcmluZyBhcmUgZmx1c2hlZCBiZWZvcmUgd2UKKwkgKiBjb250aW51ZQorCSAqLworCXdtYigpOworCisJaWYgKE1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX1FETUEpKSB7CisJCWlmIChuZXRpZl94bWl0X3N0b3BwZWQobmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIDApKSB8fAorCQkgICAgIW5ldGRldl94bWl0X21vcmUoKSkKKwkJCW10a193MzIoZXRoLCB0eGQtPnR4ZDIsIE1US19RVFhfQ1RYX1BUUik7CisJfSBlbHNlIHsKKwkJaW50IG5leHRfaWR4ID0gTkVYVF9ERVNQX0lEWCh0eGRfdG9faWR4KHJpbmcsIHR4ZCksCisJCQkJCSAgICAgcmluZy0+ZG1hX3NpemUpOworCQltdGtfdzMyKGV0aCwgbmV4dF9pZHgsIE1UNzYyOF9UWF9DVFhfSURYMCk7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9kbWE6CisJZG8geworCQl0eF9idWYgPSBtdGtfZGVzY190b190eF9idWYocmluZywgaXR4ZCk7CisKKwkJLyogdW5tYXAgZG1hICovCisJCW10a190eF91bm1hcChldGgsIHR4X2J1ZiwgZmFsc2UpOworCisJCWl0eGQtPnR4ZDMgPSBUWF9ETUFfTFMwIHwgVFhfRE1BX09XTkVSX0NQVTsKKwkJaWYgKCFNVEtfSEFTX0NBUFMoZXRoLT5zb2MtPmNhcHMsIE1US19RRE1BKSkKKwkJCWl0eGRfcGRtYS0+dHhkMiA9IFRYX0RNQV9ERVNQMl9ERUY7CisKKwkJaXR4ZCA9IG10a19xZG1hX3BoeXNfdG9fdmlydChyaW5nLCBpdHhkLT50eGQyKTsKKwkJaXR4ZF9wZG1hID0gcWRtYV90b19wZG1hKHJpbmcsIGl0eGQpOworCX0gd2hpbGUgKGl0eGQgIT0gdHhkKTsKKworCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgaW5saW5lIGludCBtdGtfY2FsX3R4ZF9yZXEoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpbnQgaSwgbmZyYWdzOworCXNrYl9mcmFnX3QgKmZyYWc7CisKKwluZnJhZ3MgPSAxOworCWlmIChza2JfaXNfZ3NvKHNrYikpIHsKKwkJZm9yIChpID0gMDsgaSA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7IGkrKykgeworCQkJZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldOworCQkJbmZyYWdzICs9IERJVl9ST1VORF9VUChza2JfZnJhZ19zaXplKGZyYWcpLAorCQkJCQkJTVRLX1RYX0RNQV9CVUZfTEVOKTsKKwkJfQorCX0gZWxzZSB7CisJCW5mcmFncyArPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOworCX0KKworCXJldHVybiBuZnJhZ3M7Cit9CisKK3N0YXRpYyBpbnQgbXRrX3F1ZXVlX3N0b3BwZWQoc3RydWN0IG10a19ldGggKmV0aCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBNVEtfTUFDX0NPVU5UOyBpKyspIHsKKwkJaWYgKCFldGgtPm5ldGRldltpXSkKKwkJCWNvbnRpbnVlOworCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChldGgtPm5ldGRldltpXSkpCisJCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXRrX3dha2VfcXVldWUoc3RydWN0IG10a19ldGggKmV0aCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBNVEtfTUFDX0NPVU5UOyBpKyspIHsKKwkJaWYgKCFldGgtPm5ldGRldltpXSkKKwkJCWNvbnRpbnVlOworCQluZXRpZl93YWtlX3F1ZXVlKGV0aC0+bmV0ZGV2W2ldKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbXRrX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX21hYyAqbWFjID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbXRrX2V0aCAqZXRoID0gbWFjLT5odzsKKwlzdHJ1Y3QgbXRrX3R4X3JpbmcgKnJpbmcgPSAmZXRoLT50eF9yaW5nOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZkZXYtPnN0YXRzOworCWJvb2wgZ3NvID0gZmFsc2U7CisJaW50IHR4X251bTsKKworCS8qIG5vcm1hbGx5IHdlIGNhbiByZWx5IG9uIHRoZSBzdGFjayBub3QgY2FsbGluZyB0aGlzIG1vcmUgdGhhbiBvbmNlLAorCSAqIGhvd2V2ZXIgd2UgaGF2ZSAyIHF1ZXVlcyBydW5uaW5nIG9uIHRoZSBzYW1lIHJpbmcgc28gd2UgbmVlZCB0byBsb2NrCisJICogdGhlIHJpbmcgYWNjZXNzCisJICovCisJc3Bpbl9sb2NrKCZldGgtPnBhZ2VfbG9jayk7CisKKwlpZiAodW5saWtlbHkodGVzdF9iaXQoTVRLX1JFU0VUVElORywgJmV0aC0+c3RhdGUpKSkKKwkJZ290byBkcm9wOworCisJdHhfbnVtID0gbXRrX2NhbF90eGRfcmVxKHNrYik7CisJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZyaW5nLT5mcmVlX2NvdW50KSA8PSB0eF9udW0pKSB7CisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJbmV0aWZfZXJyKGV0aCwgdHhfcXVldWVkLCBkZXYsCisJCQkgICJUeCBSaW5nIGZ1bGwgd2hlbiBxdWV1ZSBhd2FrZSFcbiIpOworCQlzcGluX3VubG9jaygmZXRoLT5wYWdlX2xvY2spOworCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJfQorCisJLyogVFNPOiBmaWxsIE1TUyBpbmZvIGluIHRjcCBjaGVja3N1bSBmaWVsZCAqLworCWlmIChza2JfaXNfZ3NvKHNrYikpIHsKKwkJaWYgKHNrYl9jb3dfaGVhZChza2IsIDApKSB7CisJCQluZXRpZl93YXJuKGV0aCwgdHhfZXJyLCBkZXYsCisJCQkJICAgIkdTTyBleHBhbmQgaGVhZCBmYWlsLlxuIik7CisJCQlnb3RvIGRyb3A7CisJCX0KKworCQlpZiAoc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSAmCisJCQkJKFNLQl9HU09fVENQVjQgfCBTS0JfR1NPX1RDUFY2KSkgeworCQkJZ3NvID0gdHJ1ZTsKKwkJCXRjcF9oZHIoc2tiKS0+Y2hlY2sgPSBodG9ucyhza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplKTsKKwkJfQorCX0KKworCWlmIChtdGtfdHhfbWFwKHNrYiwgZGV2LCB0eF9udW0sIHJpbmcsIGdzbykgPCAwKQorCQlnb3RvIGRyb3A7CisKKwlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJnJpbmctPmZyZWVfY291bnQpIDw9IHJpbmctPnRocmVzaCkpCisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCXNwaW5fdW5sb2NrKCZldGgtPnBhZ2VfbG9jayk7CisKKwlyZXR1cm4gTkVUREVWX1RYX09LOworCitkcm9wOgorCXNwaW5fdW5sb2NrKCZldGgtPnBhZ2VfbG9jayk7CisJc3RhdHMtPnR4X2Ryb3BwZWQrKzsKKwlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCXJldHVybiBORVRERVZfVFhfT0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbXRrX3J4X3JpbmcgKm10a19nZXRfcnhfcmluZyhzdHJ1Y3QgbXRrX2V0aCAqZXRoKQoreworCWludCBpOworCXN0cnVjdCBtdGtfcnhfcmluZyAqcmluZzsKKwlpbnQgaWR4OworCisJZm9yIChpID0gMDsgaSA8IE1US19NQVhfUlhfUklOR19OVU07IGkrKykgeworCQlpZiAoIUlTX05PUk1BTF9SSU5HKGkpICYmICFJU19IV19MUk9fUklORyhpKSkKKwkJCWNvbnRpbnVlOworCisJCXJpbmcgPSAmZXRoLT5yeF9yaW5nW2ldOworCQlpZHggPSBORVhUX0RFU1BfSURYKHJpbmctPmNhbGNfaWR4LCByaW5nLT5kbWFfc2l6ZSk7CisJCWlmIChyaW5nLT5kbWFbaWR4XS5yeGQyICYgUlhfRE1BX0RPTkUpIHsKKwkJCXJpbmctPmNhbGNfaWR4X3VwZGF0ZSA9IHRydWU7CisJCQlyZXR1cm4gcmluZzsKKwkJfQorCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBtdGtfdXBkYXRlX3J4X2NwdV9pZHgoc3RydWN0IG10a19ldGggKmV0aCwgc3RydWN0IG10a19yeF9yaW5nICpyaW5nKQoreworCWludCBpOworCisJaWYgKCFldGgtPmh3bHJvKQorCQltdGtfdzMyKGV0aCwgcmluZy0+Y2FsY19pZHgsIHJpbmctPmNyeF9pZHhfcmVnKTsKKwllbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IE1US19NQVhfUlhfUklOR19OVU07IGkrKykgeworCQkJcmluZyA9ICZldGgtPnJ4X3JpbmdbaV07CisJCQlpZiAocmluZy0+Y2FsY19pZHhfdXBkYXRlKSB7CisJCQkJcmluZy0+Y2FsY19pZHhfdXBkYXRlID0gZmFsc2U7CisJCQkJbXRrX3czMihldGgsIHJpbmctPmNhbGNfaWR4LCByaW5nLT5jcnhfaWR4X3JlZyk7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgbXRrX3BvbGxfcngoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0LAorCQkgICAgICAgc3RydWN0IG10a19ldGggKmV0aCkKK3sKKwlzdHJ1Y3QgbXRrX25hcGkgKnJ4X25hcGkgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IG10a19uYXBpLCBuYXBpKTsKKwlzdHJ1Y3QgbXRrX3J4X3JpbmcgKnJpbmcgPSByeF9uYXBpLT5yeF9yaW5nOworCWludCBpZHg7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1OCAqZGF0YSwgKm5ld19kYXRhOworCXN0cnVjdCBtdGtfcnhfZG1hICpyeGQsIHRyeGQ7CisJaW50IGRvbmUgPSAwOworCisJaWYgKHVubGlrZWx5KCFyaW5nKSkKKwkJZ290byByeF9kb25lOworCisJd2hpbGUgKGRvbmUgPCBidWRnZXQpIHsKKwkJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwkJdW5zaWduZWQgaW50IHBrdGxlbjsKKwkJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKwkJaW50IG1hYzsKKworCQlpZiAoZXRoLT5od2xybykKKwkJCXJpbmcgPSBtdGtfZ2V0X3J4X3JpbmcoZXRoKTsKKworCQlpZiAodW5saWtlbHkoIXJpbmcpKQorCQkJZ290byByeF9kb25lOworCisJCWlkeCA9IE5FWFRfREVTUF9JRFgocmluZy0+Y2FsY19pZHgsIHJpbmctPmRtYV9zaXplKTsKKwkJcnhkID0gJnJpbmctPmRtYVtpZHhdOworCQlkYXRhID0gcmluZy0+ZGF0YVtpZHhdOworCisJCWlmICghbXRrX3J4X2dldF9kZXNjKCZ0cnhkLCByeGQpKQorCQkJYnJlYWs7CisKKwkJLyogZmluZCBvdXQgd2hpY2ggbWFjIHRoZSBwYWNrZXQgY29tZSBmcm9tLiB2YWx1ZXMgc3RhcnQgYXQgMSAqLworCQlpZiAoTVRLX0hBU19DQVBTKGV0aC0+c29jLT5jYXBzLCBNVEtfU09DX01UNzYyOCkpIHsKKwkJCW1hYyA9IDA7CisJCX0gZWxzZSB7CisjaWYgZGVmaW5lZChDT05GSUdfTUVESUFURUtfTkVUU1lTX1YyKQorCQkJaWYgKE1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX05FVFNZU19WMikpCisJCQkJbWFjID0gUlhfRE1BX0dFVF9TUE9SVCh0cnhkLnJ4ZDUpIC0gMTsKKwkJCWVsc2UKKyNlbmRpZgorCQkJCW1hYyA9ICh0cnhkLnJ4ZDQgJiBSWF9ETUFfU1BFQ0lBTF9UQUcpID8KKwkJCQkgICAgICAwIDogUlhfRE1BX0dFVF9TUE9SVCh0cnhkLnJ4ZDQpIC0gMTsKKwkJfQorCisJCWlmICh1bmxpa2VseShtYWMgPCAwIHx8IG1hYyA+PSBNVEtfTUFDX0NPVU5UIHx8CisJCQkgICAgICFldGgtPm5ldGRldlttYWNdKSkKKwkJCWdvdG8gcmVsZWFzZV9kZXNjOworCisJCW5ldGRldiA9IGV0aC0+bmV0ZGV2W21hY107CisKKwkJaWYgKHVubGlrZWx5KHRlc3RfYml0KE1US19SRVNFVFRJTkcsICZldGgtPnN0YXRlKSkpCisJCQlnb3RvIHJlbGVhc2VfZGVzYzsKKworCQkvKiBhbGxvYyBuZXcgYnVmZmVyICovCisJCW5ld19kYXRhID0gbmFwaV9hbGxvY19mcmFnKHJpbmctPmZyYWdfc2l6ZSk7CisJCWlmICh1bmxpa2VseSghbmV3X2RhdGEpKSB7CisJCQluZXRkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCWdvdG8gcmVsZWFzZV9kZXNjOworCQl9CisJCWRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUoZXRoLT5kZXYsCisJCQkJCSAgbmV3X2RhdGEgKyBORVRfU0tCX1BBRCArCisJCQkJCSAgZXRoLT5pcF9hbGlnbiwKKwkJCQkJICByaW5nLT5idWZfc2l6ZSwKKwkJCQkJICBETUFfRlJPTV9ERVZJQ0UpOworCQlpZiAodW5saWtlbHkoZG1hX21hcHBpbmdfZXJyb3IoZXRoLT5kZXYsIGRtYV9hZGRyKSkpIHsKKwkJCXNrYl9mcmVlX2ZyYWcobmV3X2RhdGEpOworCQkJbmV0ZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQlnb3RvIHJlbGVhc2VfZGVzYzsKKwkJfQorCisJCWRtYV91bm1hcF9zaW5nbGUoZXRoLT5kZXYsIHRyeGQucnhkMSwKKwkJCQkgcmluZy0+YnVmX3NpemUsIERNQV9GUk9NX0RFVklDRSk7CisKKwkJLyogcmVjZWl2ZSBkYXRhICovCisJCXNrYiA9IGJ1aWxkX3NrYihkYXRhLCByaW5nLT5mcmFnX3NpemUpOworCQlpZiAodW5saWtlbHkoIXNrYikpIHsKKwkJCXNrYl9mcmVlX2ZyYWcoZGF0YSk7CisJCQluZXRkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCWdvdG8gc2tpcF9yeDsKKwkJfQorCQlza2JfcmVzZXJ2ZShza2IsIE5FVF9TS0JfUEFEICsgTkVUX0lQX0FMSUdOKTsKKworCQlwa3RsZW4gPSBSWF9ETUFfR0VUX1BMRU4wKHRyeGQucnhkMik7CisJCXNrYi0+ZGV2ID0gbmV0ZGV2OworCQlza2JfcHV0KHNrYiwgcGt0bGVuKTsKKworCQlpZiAoKCFNVEtfSEFTX0NBUFMoZXRoLT5zb2MtPmNhcHMsIE1US19ORVRTWVNfVjIpICYmCisJCQkJICAodHJ4ZC5yeGQ0ICYgZXRoLT5yeF9kbWFfbDRfdmFsaWQpKSB8fAorCQkgICAgKE1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX05FVFNZU19WMikgJiYKKwkJCQkgICh0cnhkLnJ4ZDMgJiBldGgtPnJ4X2RtYV9sNF92YWxpZCkpKQorCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJZWxzZQorCQkJc2tiX2NoZWNrc3VtX25vbmVfYXNzZXJ0KHNrYik7CisJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5ldGRldik7CisKKwkJaWYgKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCkgeworCQkJaWYgKE1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX05FVFNZU19WMikpIHsKKwkJCQlpZiAodHJ4ZC5yeGQzICYgUlhfRE1BX1ZUQUdfVjIpCisJCQkJCV9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLAorCQkJCQlodG9ucyhSWF9ETUFfVlBJRF9WMih0cnhkLnJ4ZDQpKSwKKwkJCQkJUlhfRE1BX1ZJRF9WMih0cnhkLnJ4ZDQpKTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKHRyeGQucnhkMiAmIFJYX0RNQV9WVEFHKQorCQkJCQlfX3ZsYW5faHdhY2NlbF9wdXRfdGFnKHNrYiwKKwkJCQkJaHRvbnMoUlhfRE1BX1ZQSUQodHJ4ZC5yeGQzKSksCisJCQkJCVJYX0RNQV9WSUQodHJ4ZC5yeGQzKSk7CisJCQl9CisKKwkJCS8qIElmIG5ldGRldiBpcyBhdHRhY2hlZCB0byBkc2Egc3dpdGNoLCB0aGUgc3BlY2lhbAorCQkJICogdGFnIGluc2VydGVkIGluIFZMQU4gZmllbGQgYnkgc3dpdGNoIGhhcmR3YXJlIGNhbgorCQkJICogYmUgb2ZmbG9hZCBieSBSWCBIVyBWTEFOIG9mZmxvYWQuIENsZWFycyB0aGUgVkxBTgorCQkJICogaW5mb3JtYXRpb24gZnJvbSBAc2tiIHRvIGF2b2lkIHVuZXhwZWN0ZWQgODAyMWQKKwkJCSAqIGhhbmRsZXIgYmVmb3JlIHBhY2tldCBlbnRlciBkc2EgZnJhbWV3b3JrLgorCQkJICovCisJCQlpZiAobmV0ZGV2X3VzZXNfZHNhKG5ldGRldikpCisJCQkJX192bGFuX2h3YWNjZWxfY2xlYXJfdGFnKHNrYik7CisJCX0KKworI2lmIGRlZmluZWQoQ09ORklHX05FVF9NRURJQVRFS19ITkFUKSB8fCBkZWZpbmVkKENPTkZJR19ORVRfTUVESUFURUtfSE5BVF9NT0RVTEUpCisjaWYgZGVmaW5lZChDT05GSUdfTUVESUFURUtfTkVUU1lTX1YyKQorCQlpZiAoTVRLX0hBU19DQVBTKGV0aC0+c29jLT5jYXBzLCBNVEtfTkVUU1lTX1YyKSkKKwkJCSoodTMyICopKHNrYi0+aGVhZCkgPSB0cnhkLnJ4ZDU7CisJCWVsc2UKKyNlbmRpZgorCQkJKih1MzIgKikoc2tiLT5oZWFkKSA9IHRyeGQucnhkNDsKKworCQlza2JfaG5hdF9hbGcoc2tiKSA9IDA7CisJCXNrYl9obmF0X2ZpbGxlZChza2IpID0gMDsKKwkJc2tiX2huYXRfbWFnaWNfdGFnKHNrYikgPSBITkFUX01BR0lDX1RBRzsKKworCQlpZiAoc2tiX2huYXRfcmVhc29uKHNrYikgPT0gSElUX0JJTkRfRk9SQ0VfVE9fQ1BVKSB7CisJCQl0cmFjZV9wcmludGsoIlslc10gcmVhc29uPTB4JXgoZm9yY2UgdG8gQ1BVKSBmcm9tIFdBTiB0byBFeHRcbiIsCisJCQkJICAgICBfX2Z1bmNfXywgc2tiX2huYXRfcmVhc29uKHNrYikpOworCQkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9IT1NUOworCQl9CisKKwkJdHJhY2VfcHJpbnRrKCJbJXNdIHJ4ZDooZW50cnk9JXgsc3BvcnQ9JXgscmVhc29uPSV4LGFsZz0leFxuIiwKKwkJCSAgICAgX19mdW5jX18sIHNrYl9obmF0X2VudHJ5KHNrYiksIHNrYl9obmF0X3Nwb3J0KHNrYiksCisJCQkgICAgIHNrYl9obmF0X3JlYXNvbihza2IpLCBza2JfaG5hdF9hbGcoc2tiKSk7CisjZW5kaWYKKwkJaWYgKG10a19od2xyb19zdGF0c19lYmwgJiYKKwkJICAgIElTX0hXX0xST19SSU5HKHJpbmctPnJpbmdfbm8pICYmIGV0aC0+aHdscm8pIHsKKwkJCWh3X2xyb19zdGF0c191cGRhdGUocmluZy0+cmluZ19ubywgJnRyeGQpOworCQkJaHdfbHJvX2ZsdXNoX3N0YXRzX3VwZGF0ZShyaW5nLT5yaW5nX25vLCAmdHJ4ZCk7CisJCX0KKworCQlza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgMCk7CisJCW5hcGlfZ3JvX3JlY2VpdmUobmFwaSwgc2tiKTsKKworc2tpcF9yeDoKKwkJcmluZy0+ZGF0YVtpZHhdID0gbmV3X2RhdGE7CisJCXJ4ZC0+cnhkMSA9ICh1bnNpZ25lZCBpbnQpZG1hX2FkZHI7CisKK3JlbGVhc2VfZGVzYzoKKwkJaWYgKE1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX1NPQ19NVDc2MjgpKQorCQkJcnhkLT5yeGQyID0gUlhfRE1BX0xTTzsKKwkJZWxzZQorCQkJcnhkLT5yeGQyID0gUlhfRE1BX1BMRU4wKHJpbmctPmJ1Zl9zaXplKTsKKworCQlyaW5nLT5jYWxjX2lkeCA9IGlkeDsKKworCQlkb25lKys7CisJfQorCityeF9kb25lOgorCWlmIChkb25lKSB7CisJCS8qIG1ha2Ugc3VyZSB0aGF0IGFsbCBjaGFuZ2VzIHRvIHRoZSBkbWEgcmluZyBhcmUgZmx1c2hlZCBiZWZvcmUKKwkJICogd2UgY29udGludWUKKwkJICovCisJCXdtYigpOworCQltdGtfdXBkYXRlX3J4X2NwdV9pZHgoZXRoLCByaW5nKTsKKwl9CisKKwlyZXR1cm4gZG9uZTsKK30KKworc3RhdGljIHZvaWQgbXRrX3BvbGxfdHhfcWRtYShzdHJ1Y3QgbXRrX2V0aCAqZXRoLCBpbnQgYnVkZ2V0LAorCQkJICAgIHVuc2lnbmVkIGludCAqZG9uZSwgdW5zaWduZWQgaW50ICpieXRlcykKK3sKKwlzdHJ1Y3QgbXRrX3R4X3JpbmcgKnJpbmcgPSAmZXRoLT50eF9yaW5nOworCXN0cnVjdCBtdGtfdHhfZG1hICpkZXNjOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IG10a190eF9idWYgKnR4X2J1ZjsKKwl1MzIgY3B1LCBkbWE7CisKKwljcHUgPSByaW5nLT5sYXN0X2ZyZWVfcHRyOworCWRtYSA9IG10a19yMzIoZXRoLCBNVEtfUVRYX0RSWF9QVFIpOworCisJZGVzYyA9IG10a19xZG1hX3BoeXNfdG9fdmlydChyaW5nLCBjcHUpOworCisJd2hpbGUgKChjcHUgIT0gZG1hKSAmJiBidWRnZXQpIHsKKwkJdTMyIG5leHRfY3B1ID0gZGVzYy0+dHhkMjsKKwkJaW50IG1hYyA9IDA7CisKKwkJaWYgKChkZXNjLT50eGQzICYgVFhfRE1BX09XTkVSX0NQVSkgPT0gMCkKKwkJCWJyZWFrOworCisJCWRlc2MgPSBtdGtfcWRtYV9waHlzX3RvX3ZpcnQocmluZywgZGVzYy0+dHhkMik7CisKKwkJdHhfYnVmID0gbXRrX2Rlc2NfdG9fdHhfYnVmKHJpbmcsIGRlc2MpOworCQlpZiAodHhfYnVmLT5mbGFncyAmIE1US19UWF9GTEFHU19GUE9SVDEpCisJCQltYWMgPSAxOworCisJCXNrYiA9IHR4X2J1Zi0+c2tiOworCQlpZiAoIXNrYikKKwkJCWJyZWFrOworCisJCWlmIChza2IgIT0gKHN0cnVjdCBza19idWZmICopTVRLX0RNQV9EVU1NWV9ERVNDKSB7CisJCQlieXRlc1ttYWNdICs9IHNrYi0+bGVuOworCQkJZG9uZVttYWNdKys7CisJCQlidWRnZXQtLTsKKwkJfQorCQltdGtfdHhfdW5tYXAoZXRoLCB0eF9idWYsIHRydWUpOworCisJCXJpbmctPmxhc3RfZnJlZSA9IGRlc2M7CisJCWF0b21pY19pbmMoJnJpbmctPmZyZWVfY291bnQpOworCisJCWNwdSA9IG5leHRfY3B1OworCX0KKworCXJpbmctPmxhc3RfZnJlZV9wdHIgPSBjcHU7CisJbXRrX3czMihldGgsIGNwdSwgTVRLX1FUWF9DUlhfUFRSKTsKK30KKworc3RhdGljIHZvaWQgbXRrX3BvbGxfdHhfcGRtYShzdHJ1Y3QgbXRrX2V0aCAqZXRoLCBpbnQgYnVkZ2V0LAorCQkJICAgIHVuc2lnbmVkIGludCAqZG9uZSwgdW5zaWduZWQgaW50ICpieXRlcykKK3sKKwlzdHJ1Y3QgbXRrX3R4X3JpbmcgKnJpbmcgPSAmZXRoLT50eF9yaW5nOworCXN0cnVjdCBtdGtfdHhfZG1hICpkZXNjOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IG10a190eF9idWYgKnR4X2J1ZjsKKwl1MzIgY3B1LCBkbWE7CisKKwljcHUgPSByaW5nLT5jcHVfaWR4OworCWRtYSA9IG10a19yMzIoZXRoLCBNVDc2MjhfVFhfRFRYX0lEWDApOworCisJd2hpbGUgKChjcHUgIT0gZG1hKSAmJiBidWRnZXQpIHsKKwkJdHhfYnVmID0gJnJpbmctPmJ1ZltjcHVdOworCQlza2IgPSB0eF9idWYtPnNrYjsKKwkJaWYgKCFza2IpCisJCQlicmVhazsKKworCQlpZiAoc2tiICE9IChzdHJ1Y3Qgc2tfYnVmZiAqKU1US19ETUFfRFVNTVlfREVTQykgeworCQkJYnl0ZXNbMF0gKz0gc2tiLT5sZW47CisJCQlkb25lWzBdKys7CisJCQlidWRnZXQtLTsKKwkJfQorCisJCW10a190eF91bm1hcChldGgsIHR4X2J1ZiwgdHJ1ZSk7CisKKwkJZGVzYyA9ICZyaW5nLT5kbWFbY3B1XTsKKwkJcmluZy0+bGFzdF9mcmVlID0gZGVzYzsKKwkJYXRvbWljX2luYygmcmluZy0+ZnJlZV9jb3VudCk7CisKKwkJY3B1ID0gTkVYVF9ERVNQX0lEWChjcHUsIHJpbmctPmRtYV9zaXplKTsKKwl9CisKKwlyaW5nLT5jcHVfaWR4ID0gY3B1OworfQorCitzdGF0aWMgaW50IG10a19wb2xsX3R4KHN0cnVjdCBtdGtfZXRoICpldGgsIGludCBidWRnZXQpCit7CisJc3RydWN0IG10a190eF9yaW5nICpyaW5nID0gJmV0aC0+dHhfcmluZzsKKwl1bnNpZ25lZCBpbnQgZG9uZVtNVEtfTUFYX0RFVlNdOworCXVuc2lnbmVkIGludCBieXRlc1tNVEtfTUFYX0RFVlNdOworCWludCB0b3RhbCA9IDAsIGk7CisKKwltZW1zZXQoZG9uZSwgMCwgc2l6ZW9mKGRvbmUpKTsKKwltZW1zZXQoYnl0ZXMsIDAsIHNpemVvZihieXRlcykpOworCisJaWYgKE1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX1FETUEpKQorCQltdGtfcG9sbF90eF9xZG1hKGV0aCwgYnVkZ2V0LCBkb25lLCBieXRlcyk7CisJZWxzZQorCQltdGtfcG9sbF90eF9wZG1hKGV0aCwgYnVkZ2V0LCBkb25lLCBieXRlcyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTVRLX01BQ19DT1VOVDsgaSsrKSB7CisJCWlmICghZXRoLT5uZXRkZXZbaV0gfHwgIWRvbmVbaV0pCisJCQljb250aW51ZTsKKwkJbmV0ZGV2X2NvbXBsZXRlZF9xdWV1ZShldGgtPm5ldGRldltpXSwgZG9uZVtpXSwgYnl0ZXNbaV0pOworCQl0b3RhbCArPSBkb25lW2ldOworCX0KKworCWlmIChtdGtfcXVldWVfc3RvcHBlZChldGgpICYmCisJICAgIChhdG9taWNfcmVhZCgmcmluZy0+ZnJlZV9jb3VudCkgPiByaW5nLT50aHJlc2gpKQorCQltdGtfd2FrZV9xdWV1ZShldGgpOworCisJcmV0dXJuIHRvdGFsOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGFuZGxlX3N0YXR1c19pcnEoc3RydWN0IG10a19ldGggKmV0aCkKK3sKKwl1MzIgc3RhdHVzMiA9IG10a19yMzIoZXRoLCBNVEtfSU5UX1NUQVRVUyk7CisKKwlpZiAodW5saWtlbHkoc3RhdHVzMiAmIChNVEtfR0RNMV9BRiB8IE1US19HRE0yX0FGKSkpIHsKKwkJbXRrX3N0YXRzX3VwZGF0ZShldGgpOworCQltdGtfdzMyKGV0aCwgKE1US19HRE0xX0FGIHwgTVRLX0dETTJfQUYpLAorCQkJTVRLX0lOVF9TVEFUVVMpOworCX0KK30KKworc3RhdGljIGludCBtdGtfbmFwaV90eChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCit7CisJc3RydWN0IG10a19ldGggKmV0aCA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgbXRrX2V0aCwgdHhfbmFwaSk7CisJdTMyIHN0YXR1cywgbWFzazsKKwlpbnQgdHhfZG9uZSA9IDA7CisKKwlpZiAoTVRLX0hBU19DQVBTKGV0aC0+c29jLT5jYXBzLCBNVEtfUURNQSkpCisJCW10a19oYW5kbGVfc3RhdHVzX2lycShldGgpOworCW10a193MzIoZXRoLCBNVEtfVFhfRE9ORV9JTlQsIGV0aC0+dHhfaW50X3N0YXR1c19yZWcpOworCXR4X2RvbmUgPSBtdGtfcG9sbF90eChldGgsIGJ1ZGdldCk7CisKKwlpZiAodW5saWtlbHkobmV0aWZfbXNnX2ludHIoZXRoKSkpIHsKKwkJc3RhdHVzID0gbXRrX3IzMihldGgsIGV0aC0+dHhfaW50X3N0YXR1c19yZWcpOworCQltYXNrID0gbXRrX3IzMihldGgsIGV0aC0+dHhfaW50X21hc2tfcmVnKTsKKwkJZGV2X2luZm8oZXRoLT5kZXYsCisJCQkgImRvbmUgdHggJWQsIGludHIgMHglMDh4LzB4JXhcbiIsCisJCQkgdHhfZG9uZSwgc3RhdHVzLCBtYXNrKTsKKwl9CisKKwlpZiAodHhfZG9uZSA9PSBidWRnZXQpCisJCXJldHVybiBidWRnZXQ7CisKKwlzdGF0dXMgPSBtdGtfcjMyKGV0aCwgZXRoLT50eF9pbnRfc3RhdHVzX3JlZyk7CisJaWYgKHN0YXR1cyAmIE1US19UWF9ET05FX0lOVCkKKwkJcmV0dXJuIGJ1ZGdldDsKKworCWlmIChuYXBpX2NvbXBsZXRlKG5hcGkpKQorCQltdGtfdHhfaXJxX2VuYWJsZShldGgsIE1US19UWF9ET05FX0lOVCk7CisKKwlyZXR1cm4gdHhfZG9uZTsKK30KKworc3RhdGljIGludCBtdGtfbmFwaV9yeChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCit7CisJc3RydWN0IG10a19uYXBpICpyeF9uYXBpID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBtdGtfbmFwaSwgbmFwaSk7CisJc3RydWN0IG10a19ldGggKmV0aCA9IHJ4X25hcGktPmV0aDsKKwlzdHJ1Y3QgbXRrX3J4X3JpbmcgKnJpbmcgPSByeF9uYXBpLT5yeF9yaW5nOworCXUzMiBzdGF0dXMsIG1hc2s7CisJaW50IHJ4X2RvbmUgPSAwOworCWludCByZW1haW5fYnVkZ2V0ID0gYnVkZ2V0OworCisJbXRrX2hhbmRsZV9zdGF0dXNfaXJxKGV0aCk7CisKK3BvbGxfYWdhaW46CisJbXRrX3czMihldGgsIE1US19SWF9ET05FX0lOVChyaW5nLT5yaW5nX25vKSwgTVRLX1BETUFfSU5UX1NUQVRVUyk7CisJcnhfZG9uZSA9IG10a19wb2xsX3J4KG5hcGksIHJlbWFpbl9idWRnZXQsIGV0aCk7CisKKwlpZiAodW5saWtlbHkobmV0aWZfbXNnX2ludHIoZXRoKSkpIHsKKwkJc3RhdHVzID0gbXRrX3IzMihldGgsIE1US19QRE1BX0lOVF9TVEFUVVMpOworCQltYXNrID0gbXRrX3IzMihldGgsIE1US19QRE1BX0lOVF9NQVNLKTsKKwkJZGV2X2luZm8oZXRoLT5kZXYsCisJCQkgImRvbmUgcnggJWQsIGludHIgMHglMDh4LzB4JXhcbiIsCisJCQkgcnhfZG9uZSwgc3RhdHVzLCBtYXNrKTsKKwl9CisJaWYgKHJ4X2RvbmUgPT0gcmVtYWluX2J1ZGdldCkKKwkJcmV0dXJuIGJ1ZGdldDsKKworCXN0YXR1cyA9IG10a19yMzIoZXRoLCBNVEtfUERNQV9JTlRfU1RBVFVTKTsKKwlpZiAoc3RhdHVzICYgTVRLX1JYX0RPTkVfSU5UKHJpbmctPnJpbmdfbm8pKSB7CisJCXJlbWFpbl9idWRnZXQgLT0gcnhfZG9uZTsKKwkJZ290byBwb2xsX2FnYWluOworCX0KKworCWlmIChuYXBpX2NvbXBsZXRlKG5hcGkpKQorCQltdGtfcnhfaXJxX2VuYWJsZShldGgsIE1US19SWF9ET05FX0lOVChyaW5nLT5yaW5nX25vKSk7CisKKwlyZXR1cm4gcnhfZG9uZSArIGJ1ZGdldCAtIHJlbWFpbl9idWRnZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXRrX3R4X2FsbG9jKHN0cnVjdCBtdGtfZXRoICpldGgpCit7CisJc3RydWN0IG10a190eF9yaW5nICpyaW5nID0gJmV0aC0+dHhfcmluZzsKKwlpbnQgaSwgc3ogPSBzaXplb2YoKnJpbmctPmRtYSk7CisKKwlyaW5nLT5idWYgPSBrY2FsbG9jKE1US19ETUFfU0laRSwgc2l6ZW9mKCpyaW5nLT5idWYpLAorCQkJICAgICAgIEdGUF9LRVJORUwpOworCWlmICghcmluZy0+YnVmKQorCQlnb3RvIG5vX3R4X21lbTsKKworCWlmICghZXRoLT5zb2MtPmhhc19zcmFtKQorCQlyaW5nLT5kbWEgPSBkbWFfYWxsb2NfY29oZXJlbnQoZXRoLT5kZXYsIE1US19ETUFfU0laRSAqIHN6LAorCQkJCQkgICAgICAgJnJpbmctPnBoeXMsIEdGUF9BVE9NSUMpOworCWVsc2UgeworCQlyaW5nLT5kbWEgPSAgZXRoLT5zY3JhdGNoX3JpbmcgKyBNVEtfRE1BX1NJWkU7CisJCXJpbmctPnBoeXMgPSBldGgtPnBoeV9zY3JhdGNoX3JpbmcgKyBNVEtfRE1BX1NJWkUgKiBzejsKKwl9CisKKwlpZiAoIXJpbmctPmRtYSkKKwkJZ290byBub190eF9tZW07CisKKwlmb3IgKGkgPSAwOyBpIDwgTVRLX0RNQV9TSVpFOyBpKyspIHsKKwkJaW50IG5leHQgPSAoaSArIDEpICUgTVRLX0RNQV9TSVpFOworCQl1MzIgbmV4dF9wdHIgPSByaW5nLT5waHlzICsgbmV4dCAqIHN6OworCisJCXJpbmctPmRtYVtpXS50eGQyID0gbmV4dF9wdHI7CisJCXJpbmctPmRtYVtpXS50eGQzID0gVFhfRE1BX0xTMCB8IFRYX0RNQV9PV05FUl9DUFU7CisJCXJpbmctPmRtYVtpXS50eGQ0ID0gMDsKKyNpZiBkZWZpbmVkKENPTkZJR19NRURJQVRFS19ORVRTWVNfVjIpCisgICAgICAgICAgICAgICAgaWYgKGV0aC0+c29jLT5oYXNfc3JhbSAmJiAoIHN6ID4gMTYpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByaW5nLT5kbWFbaV0udHhkNSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICByaW5nLT5kbWFbaV0udHhkNiA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICByaW5nLT5kbWFbaV0udHhkNyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICByaW5nLT5kbWFbaV0udHhkOCA9IDA7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisJfQorCisJLyogT24gTVQ3Njg4IChQRE1BIG9ubHkpIHRoaXMgZHJpdmVyIHVzZXMgdGhlIHJpbmctPmRtYSBzdHJ1Y3RzCisJICogb25seSBhcyB0aGUgZnJhbWV3b3JrLiBUaGUgcmVhbCBIVyBkZXNjcmlwdG9ycyBhcmUgdGhlIFBETUEKKwkgKiBkZXNjcmlwdG9ycyBpbiByaW5nLT5kbWFfcGRtYS4KKwkgKi8KKwlpZiAoIU1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX1FETUEpKSB7CisJCXJpbmctPmRtYV9wZG1hID0gZG1hX2FsbG9jX2NvaGVyZW50KGV0aC0+ZGV2LCBNVEtfRE1BX1NJWkUgKiBzeiwKKwkJCQkJCSAgICAmcmluZy0+cGh5c19wZG1hLAorCQkJCQkJICAgIEdGUF9BVE9NSUMpOworCQlpZiAoIXJpbmctPmRtYV9wZG1hKQorCQkJZ290byBub190eF9tZW07CisKKwkJZm9yIChpID0gMDsgaSA8IE1US19ETUFfU0laRTsgaSsrKSB7CisJCQlyaW5nLT5kbWFfcGRtYVtpXS50eGQyID0gVFhfRE1BX0RFU1AyX0RFRjsKKwkJCXJpbmctPmRtYV9wZG1hW2ldLnR4ZDQgPSAwOworCQl9CisJfQorCisJcmluZy0+ZG1hX3NpemUgPSBNVEtfRE1BX1NJWkU7CisJYXRvbWljX3NldCgmcmluZy0+ZnJlZV9jb3VudCwgTVRLX0RNQV9TSVpFIC0gMik7CisJcmluZy0+bmV4dF9mcmVlID0gJnJpbmctPmRtYVswXTsKKwlyaW5nLT5sYXN0X2ZyZWUgPSAmcmluZy0+ZG1hW01US19ETUFfU0laRSAtIDFdOworCXJpbmctPmxhc3RfZnJlZV9wdHIgPSAodTMyKShyaW5nLT5waHlzICsgKChNVEtfRE1BX1NJWkUgLSAxKSAqIHN6KSk7CisJcmluZy0+dGhyZXNoID0gTUFYX1NLQl9GUkFHUzsKKworCS8qIG1ha2Ugc3VyZSB0aGF0IGFsbCBjaGFuZ2VzIHRvIHRoZSBkbWEgcmluZyBhcmUgZmx1c2hlZCBiZWZvcmUgd2UKKwkgKiBjb250aW51ZQorCSAqLworCXdtYigpOworCisJaWYgKE1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX1FETUEpKSB7CisJCW10a193MzIoZXRoLCByaW5nLT5waHlzLCBNVEtfUVRYX0NUWF9QVFIpOworCQltdGtfdzMyKGV0aCwgcmluZy0+cGh5cywgTVRLX1FUWF9EVFhfUFRSKTsKKwkJbXRrX3czMihldGgsCisJCQlyaW5nLT5waHlzICsgKChNVEtfRE1BX1NJWkUgLSAxKSAqIHN6KSwKKwkJCU1US19RVFhfQ1JYX1BUUik7CisJCW10a193MzIoZXRoLCByaW5nLT5sYXN0X2ZyZWVfcHRyLCBNVEtfUVRYX0RSWF9QVFIpOworCQltdGtfdzMyKGV0aCwgKFFETUFfUkVTX1RIUkVTIDw8IDgpIHwgUURNQV9SRVNfVEhSRVMsCisJCQlNVEtfUVRYX0NGRygwKSk7CisJfSBlbHNlIHsKKwkJbXRrX3czMihldGgsIHJpbmctPnBoeXNfcGRtYSwgTVQ3NjI4X1RYX0JBU0VfUFRSMCk7CisJCW10a193MzIoZXRoLCBNVEtfRE1BX1NJWkUsIE1UNzYyOF9UWF9NQVhfQ05UMCk7CisJCW10a193MzIoZXRoLCAwLCBNVDc2MjhfVFhfQ1RYX0lEWDApOworCQltdGtfdzMyKGV0aCwgTVQ3NjI4X1BTVF9EVFhfSURYMCwgTVRLX1BETUFfUlNUX0lEWCk7CisJfQorCisJcmV0dXJuIDA7CisKK25vX3R4X21lbToKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgbXRrX3R4X2NsZWFuKHN0cnVjdCBtdGtfZXRoICpldGgpCit7CisJc3RydWN0IG10a190eF9yaW5nICpyaW5nID0gJmV0aC0+dHhfcmluZzsKKwlpbnQgaTsKKworCWlmIChyaW5nLT5idWYpIHsKKwkJZm9yIChpID0gMDsgaSA8IE1US19ETUFfU0laRTsgaSsrKQorCQkJbXRrX3R4X3VubWFwKGV0aCwgJnJpbmctPmJ1ZltpXSwgZmFsc2UpOworCQlrZnJlZShyaW5nLT5idWYpOworCQlyaW5nLT5idWYgPSBOVUxMOworCX0KKworCWlmICghZXRoLT5zb2MtPmhhc19zcmFtICYmIHJpbmctPmRtYSkgeworCQlkbWFfZnJlZV9jb2hlcmVudChldGgtPmRldiwKKwkJCQkgIE1US19ETUFfU0laRSAqIHNpemVvZigqcmluZy0+ZG1hKSwKKwkJCQkgIHJpbmctPmRtYSwKKwkJCQkgIHJpbmctPnBoeXMpOworCQlyaW5nLT5kbWEgPSBOVUxMOworCX0KKworCWlmIChyaW5nLT5kbWFfcGRtYSkgeworCQlkbWFfZnJlZV9jb2hlcmVudChldGgtPmRldiwKKwkJCQkgIE1US19ETUFfU0laRSAqIHNpemVvZigqcmluZy0+ZG1hX3BkbWEpLAorCQkJCSAgcmluZy0+ZG1hX3BkbWEsCisJCQkJICByaW5nLT5waHlzX3BkbWEpOworCQlyaW5nLT5kbWFfcGRtYSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgaW50IG10a19yeF9hbGxvYyhzdHJ1Y3QgbXRrX2V0aCAqZXRoLCBpbnQgcmluZ19ubywgaW50IHJ4X2ZsYWcpCit7CisJc3RydWN0IG10a19yeF9yaW5nICpyaW5nOworCWludCByeF9kYXRhX2xlbiwgcnhfZG1hX3NpemU7CisJaW50IGk7CisKKwlpZiAocnhfZmxhZyA9PSBNVEtfUlhfRkxBR1NfUURNQSkgeworCQlpZiAocmluZ19ubykKKwkJCXJldHVybiAtRUlOVkFMOworCQlyaW5nID0gJmV0aC0+cnhfcmluZ19xZG1hOworCX0gZWxzZSB7CisJCXJpbmcgPSAmZXRoLT5yeF9yaW5nW3Jpbmdfbm9dOworCX0KKworCWlmIChyeF9mbGFnID09IE1US19SWF9GTEFHU19IV0xSTykgeworCQlyeF9kYXRhX2xlbiA9IE1US19NQVhfTFJPX1JYX0xFTkdUSDsKKwkJcnhfZG1hX3NpemUgPSBNVEtfSFdfTFJPX0RNQV9TSVpFOworCX0gZWxzZSB7CisJCXJ4X2RhdGFfbGVuID0gRVRIX0RBVEFfTEVOOworCQlyeF9kbWFfc2l6ZSA9IE1US19ETUFfU0laRTsKKwl9CisKKwlyaW5nLT5mcmFnX3NpemUgPSBtdGtfbWF4X2ZyYWdfc2l6ZShyeF9kYXRhX2xlbik7CisJcmluZy0+YnVmX3NpemUgPSBtdGtfbWF4X2J1Zl9zaXplKHJpbmctPmZyYWdfc2l6ZSk7CisJcmluZy0+ZGF0YSA9IGtjYWxsb2MocnhfZG1hX3NpemUsIHNpemVvZigqcmluZy0+ZGF0YSksCisJCQkgICAgIEdGUF9LRVJORUwpOworCWlmICghcmluZy0+ZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKGkgPSAwOyBpIDwgcnhfZG1hX3NpemU7IGkrKykgeworCQlyaW5nLT5kYXRhW2ldID0gbmV0ZGV2X2FsbG9jX2ZyYWcocmluZy0+ZnJhZ19zaXplKTsKKwkJaWYgKCFyaW5nLT5kYXRhW2ldKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaWYgKCghZXRoLT5zb2MtPmhhc19zcmFtKSB8fCAoZXRoLT5zb2MtPmhhc19zcmFtCisJCQkJJiYgKHJ4X2ZsYWcgIT0gTVRLX1JYX0ZMQUdTX05PUk1BTCkpKQorCQlyaW5nLT5kbWEgPSBkbWFfYWxsb2NfY29oZXJlbnQoZXRoLT5kZXYsCisJCQkJCSAgICAgICByeF9kbWFfc2l6ZSAqIHNpemVvZigqcmluZy0+ZG1hKSwKKwkJCQkJICAgICAgICZyaW5nLT5waHlzLCBHRlBfQVRPTUlDKTsKKwllbHNlIHsKKwkJc3RydWN0IG10a190eF9yaW5nICp0eF9yaW5nID0gJmV0aC0+dHhfcmluZzsKKwkJcmluZy0+ZG1hID0gKHN0cnVjdCBtdGtfcnhfZG1hICopKHR4X3JpbmctPmRtYSArCisJCQkgICAgIE1US19ETUFfU0laRSAqIChyaW5nX25vICsgMSkpOworCQlyaW5nLT5waHlzID0gdHhfcmluZy0+cGh5cyArIE1US19ETUFfU0laRSAqCisJCQkgICAgIHNpemVvZigqdHhfcmluZy0+ZG1hKSAqIChyaW5nX25vICsgMSk7CisJfQorCisJaWYgKCFyaW5nLT5kbWEpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IHJ4X2RtYV9zaXplOyBpKyspIHsKKwkJZG1hX2FkZHJfdCBkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKGV0aC0+ZGV2LAorCQkJCXJpbmctPmRhdGFbaV0gKyBORVRfU0tCX1BBRCArIGV0aC0+aXBfYWxpZ24sCisJCQkJcmluZy0+YnVmX3NpemUsCisJCQkJRE1BX0ZST01fREVWSUNFKTsKKwkJaWYgKHVubGlrZWx5KGRtYV9tYXBwaW5nX2Vycm9yKGV0aC0+ZGV2LCBkbWFfYWRkcikpKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXJpbmctPmRtYVtpXS5yeGQxID0gKHVuc2lnbmVkIGludClkbWFfYWRkcjsKKworCQlpZiAoTVRLX0hBU19DQVBTKGV0aC0+c29jLT5jYXBzLCBNVEtfU09DX01UNzYyOCkpCisJCQlyaW5nLT5kbWFbaV0ucnhkMiA9IFJYX0RNQV9MU087CisJCWVsc2UKKwkJCXJpbmctPmRtYVtpXS5yeGQyID0gUlhfRE1BX1BMRU4wKHJpbmctPmJ1Zl9zaXplKTsKKworCQlyaW5nLT5kbWFbaV0ucnhkMyA9IDA7CisJCXJpbmctPmRtYVtpXS5yeGQ0ID0gMDsKKyNpZiBkZWZpbmVkKENPTkZJR19NRURJQVRFS19ORVRTWVNfVjIpCisJCWlmIChldGgtPnNvYy0+aGFzX3NyYW0gJiYgKChzaXplb2Yoc3RydWN0IG10a19yeF9kbWEpKSA+IDE2KSkgeworCQkJcmluZy0+ZG1hW2ldLnJ4ZDUgPSAwOworCQkJcmluZy0+ZG1hW2ldLnJ4ZDYgPSAwOworCQkJcmluZy0+ZG1hW2ldLnJ4ZDcgPSAwOworCQkJcmluZy0+ZG1hW2ldLnJ4ZDggPSAwOworCQl9CisjZW5kaWYKKwl9CisJcmluZy0+ZG1hX3NpemUgPSByeF9kbWFfc2l6ZTsKKwlyaW5nLT5jYWxjX2lkeF91cGRhdGUgPSBmYWxzZTsKKwlyaW5nLT5jYWxjX2lkeCA9IHJ4X2RtYV9zaXplIC0gMTsKKwlyaW5nLT5jcnhfaWR4X3JlZyA9IChyeF9mbGFnID09IE1US19SWF9GTEFHU19RRE1BKSA/CisJCQkgICAgIE1US19RUlhfQ1JYX0lEWF9DRkcocmluZ19ubykgOgorCQkJICAgICBNVEtfUFJYX0NSWF9JRFhfQ0ZHKHJpbmdfbm8pOworCXJpbmctPnJpbmdfbm8gPSByaW5nX25vOworCS8qIG1ha2Ugc3VyZSB0aGF0IGFsbCBjaGFuZ2VzIHRvIHRoZSBkbWEgcmluZyBhcmUgZmx1c2hlZCBiZWZvcmUgd2UKKwkgKiBjb250aW51ZQorCSAqLworCXdtYigpOworCisJaWYgKHJ4X2ZsYWcgPT0gTVRLX1JYX0ZMQUdTX1FETUEpIHsKKwkJbXRrX3czMihldGgsIHJpbmctPnBoeXMsIE1US19RUlhfQkFTRV9QVFJfQ0ZHKHJpbmdfbm8pKTsKKwkJbXRrX3czMihldGgsIHJ4X2RtYV9zaXplLCBNVEtfUVJYX01BWF9DTlRfQ0ZHKHJpbmdfbm8pKTsKKwkJbXRrX3czMihldGgsIHJpbmctPmNhbGNfaWR4LCByaW5nLT5jcnhfaWR4X3JlZyk7CisJCW10a193MzIoZXRoLCBNVEtfUFNUX0RSWF9JRFhfQ0ZHKHJpbmdfbm8pLCBNVEtfUURNQV9SU1RfSURYKTsKKwl9IGVsc2UgeworCQltdGtfdzMyKGV0aCwgcmluZy0+cGh5cywgTVRLX1BSWF9CQVNFX1BUUl9DRkcocmluZ19ubykpOworCQltdGtfdzMyKGV0aCwgcnhfZG1hX3NpemUsIE1US19QUlhfTUFYX0NOVF9DRkcocmluZ19ubykpOworCQltdGtfdzMyKGV0aCwgcmluZy0+Y2FsY19pZHgsIHJpbmctPmNyeF9pZHhfcmVnKTsKKwkJbXRrX3czMihldGgsIE1US19QU1RfRFJYX0lEWF9DRkcocmluZ19ubyksIE1US19QRE1BX1JTVF9JRFgpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtdGtfcnhfY2xlYW4oc3RydWN0IG10a19ldGggKmV0aCwgc3RydWN0IG10a19yeF9yaW5nICpyaW5nLCBpbnQgaW5fc3JhbSkKK3sKKwlpbnQgaTsKKworCWlmIChyaW5nLT5kYXRhICYmIHJpbmctPmRtYSkgeworCQlmb3IgKGkgPSAwOyBpIDwgcmluZy0+ZG1hX3NpemU7IGkrKykgeworCQkJaWYgKCFyaW5nLT5kYXRhW2ldKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCFyaW5nLT5kbWFbaV0ucnhkMSkKKwkJCQljb250aW51ZTsKKwkJCWRtYV91bm1hcF9zaW5nbGUoZXRoLT5kZXYsCisJCQkJCSByaW5nLT5kbWFbaV0ucnhkMSwKKwkJCQkJIHJpbmctPmJ1Zl9zaXplLAorCQkJCQkgRE1BX0ZST01fREVWSUNFKTsKKwkJCXNrYl9mcmVlX2ZyYWcocmluZy0+ZGF0YVtpXSk7CisJCX0KKwkJa2ZyZWUocmluZy0+ZGF0YSk7CisJCXJpbmctPmRhdGEgPSBOVUxMOworCX0KKworCWlmKGluX3NyYW0pCisJCXJldHVybjsKKworCWlmIChyaW5nLT5kbWEpIHsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoZXRoLT5kZXYsCisJCQkJICByaW5nLT5kbWFfc2l6ZSAqIHNpemVvZigqcmluZy0+ZG1hKSwKKwkJCQkgIHJpbmctPmRtYSwKKwkJCQkgIHJpbmctPnBoeXMpOworCQlyaW5nLT5kbWEgPSBOVUxMOworCX0KK30KKworc3RhdGljIGludCBtdGtfaHdscm9fcnhfaW5pdChzdHJ1Y3QgbXRrX2V0aCAqZXRoKQoreworCWludCBpOworCXUzMiB2YWw7CisJdTMyIHJpbmdfY3RybF9kdzEgPSAwLCByaW5nX2N0cmxfZHcyID0gMCwgcmluZ19jdHJsX2R3MyA9IDA7CisJdTMyIGxyb19jdHJsX2R3MCA9IDAsIGxyb19jdHJsX2R3MyA9IDA7CisKKwkvKiBzZXQgTFJPIHJpbmdzIHRvIGF1dG8tbGVhcm4gbW9kZXMgKi8KKwlyaW5nX2N0cmxfZHcyIHw9IE1US19SSU5HX0FVVE9fTEVSQU5fTU9ERTsKKworCS8qIHZhbGlkYXRlIExSTyByaW5nICovCisJcmluZ19jdHJsX2R3MiB8PSBNVEtfUklOR19WTEQ7CisKKwkvKiBzZXQgQUdFIHRpbWVyICh1bml0OiAyMHVzKSAqLworCXJpbmdfY3RybF9kdzIgfD0gTVRLX1JJTkdfQUdFX1RJTUVfSDsKKwlyaW5nX2N0cmxfZHcxIHw9IE1US19SSU5HX0FHRV9USU1FX0w7CisKKwkvKiBzZXQgbWF4IEFHRyB0aW1lciAodW5pdDogMjB1cykgKi8KKwlyaW5nX2N0cmxfZHcyIHw9IE1US19SSU5HX01BWF9BR0dfVElNRTsKKworCS8qIHNldCBtYXggTFJPIEFHRyBjb3VudCAqLworCXJpbmdfY3RybF9kdzIgfD0gTVRLX1JJTkdfTUFYX0FHR19DTlRfTDsKKwlyaW5nX2N0cmxfZHczIHw9IE1US19SSU5HX01BWF9BR0dfQ05UX0g7CisKKwlmb3IgKGkgPSAxOyBpIDw9IE1US19IV19MUk9fUklOR19OVU07IGkrKykgeworCQltdGtfdzMyKGV0aCwgcmluZ19jdHJsX2R3MSwgTVRLX0xST19DVFJMX0RXMV9DRkcoaSkpOworCQltdGtfdzMyKGV0aCwgcmluZ19jdHJsX2R3MiwgTVRLX0xST19DVFJMX0RXMl9DRkcoaSkpOworCQltdGtfdzMyKGV0aCwgcmluZ19jdHJsX2R3MywgTVRLX0xST19DVFJMX0RXM19DRkcoaSkpOworCX0KKworCS8qIElQdjQgY2hlY2tzdW0gdXBkYXRlIGVuYWJsZSAqLworCWxyb19jdHJsX2R3MCB8PSBNVEtfTDNfQ0tTX1VQRF9FTjsKKworCS8qIHN3aXRjaCBwcmlvcml0eSBjb21wYXJpc29uIHRvIHBhY2tldCBjb3VudCBtb2RlICovCisJbHJvX2N0cmxfZHcwIHw9IE1US19MUk9fQUxUX1BLVF9DTlRfTU9ERTsKKworCS8qIGJhbmR3aWR0aCB0aHJlc2hvbGQgc2V0dGluZyAqLworCW10a193MzIoZXRoLCBNVEtfSFdfTFJPX0JXX1RIUkUsIE1US19QRE1BX0xST19DVFJMX0RXMik7CisKKwkvKiBhdXRvLWxlYXJuIHNjb3JlIGRlbHRhIHNldHRpbmcgKi8KKwltdGtfdzMyKGV0aCwgTVRLX0hXX0xST19SRVBMQUNFX0RFTFRBLCBNVEtfTFJPX0FMVF9TQ09SRV9ERUxUQSk7CisKKwkvKiBzZXQgcmVmcmVzaCB0aW1lciBmb3IgYWx0ZXJpbmcgZmxvd3MgdG8gMSBzZWMuICh1bml0OiAyMHVzKSAqLworCW10a193MzIoZXRoLCAoTVRLX0hXX0xST19USU1FUl9VTklUIDw8IDE2KSB8IE1US19IV19MUk9fUkVGUkVTSF9USU1FLAorCQlNVEtfUERNQV9MUk9fQUxUX1JFRlJFU0hfVElNRVIpOworCisJLyogdGhlIG1pbmltYWwgcmVtYWluaW5nIHJvb20gb2YgU0RMMCBpbiBSWEQgZm9yIGxybyBhZ2dyZWdhdGlvbiAqLworCWxyb19jdHJsX2R3MyB8PSBNVEtfTFJPX01JTl9SWERfU0RMOworCisJaWYgKE1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX05FVFNZU19WMikpIHsKKwkJdmFsID0gbXRrX3IzMihldGgsIE1US19QRE1BX1JYX0NGRyk7CisJCW10a193MzIoZXRoLCB2YWwgfCAoTVRLX1BETUFfTFJPX1NETCA8PCBNVEtfUlhfQ0ZHX1NETF9PRkZTRVQpLAorCQkJTVRLX1BETUFfUlhfQ0ZHKTsKKworCQlscm9fY3RybF9kdzAgfD0gTVRLX1BETUFfTFJPX1NETCA8PCBNVEtfQ1RSTF9EVzBfU0RMX09GRlNFVDsKKwl9IGVsc2UgeworCQkvKiBzZXQgSFcgTFJPIG1vZGUgJiB0aGUgbWF4IGFnZ3JlZ2F0aW9uIGNvdW50IGZvciByeCBwYWNrZXRzICovCisJCWxyb19jdHJsX2R3MyB8PSBNVEtfQURNQV9NT0RFIHwgKE1US19IV19MUk9fTUFYX0FHR19DTlQgJiAweGZmKTsKKwl9CisKKwkvKiBlbmFibGUgSFcgTFJPICovCisJbHJvX2N0cmxfZHcwIHw9IE1US19MUk9fRU47CisKKwkvKiBlbmFibGUgY3B1IHJlYXNvbiBibGFjayBsaXN0ICovCisJbHJvX2N0cmxfZHcwIHw9IE1US19MUk9fQ1JTTl9CTlc7CisKKwltdGtfdzMyKGV0aCwgbHJvX2N0cmxfZHczLCBNVEtfUERNQV9MUk9fQ1RSTF9EVzMpOworCW10a193MzIoZXRoLCBscm9fY3RybF9kdzAsIE1US19QRE1BX0xST19DVFJMX0RXMCk7CisKKwkvKiBubyB1c2UgUFBFIGNwdSByZWFzb24gKi8KKwltdGtfdzMyKGV0aCwgMHhmZmZmZmZmZiwgTVRLX1BETUFfTFJPX0NUUkxfRFcxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtdGtfaHdscm9fcnhfdW5pbml0KHN0cnVjdCBtdGtfZXRoICpldGgpCit7CisJaW50IGk7CisJdTMyIHZhbDsKKworCS8qIHJlbGlucXVpc2ggbHJvIHJpbmdzLCBmbHVzaCBhZ2dyZWdhdGVkIHBhY2tldHMgKi8KKwltdGtfdzMyKGV0aCwgTVRLX0xST19SSU5HX1JFTElOR1VJU0hfUkVRLCBNVEtfUERNQV9MUk9fQ1RSTF9EVzApOworCisJLyogd2FpdCBmb3IgcmVsaW5xdWlzaG1lbnRzIGRvbmUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQl2YWwgPSBtdGtfcjMyKGV0aCwgTVRLX1BETUFfTFJPX0NUUkxfRFcwKTsKKwkJaWYgKHZhbCAmIE1US19MUk9fUklOR19SRUxJTkdVSVNIX0RPTkUpIHsKKwkJCW1zbGVlcCgyMCk7CisJCQljb250aW51ZTsKKwkJfQorCQlicmVhazsKKwl9CisKKwkvKiBpbnZhbGlkYXRlIGxybyByaW5ncyAqLworCWZvciAoaSA9IDE7IGkgPD0gTVRLX0hXX0xST19SSU5HX05VTTsgaSsrKQorCQltdGtfdzMyKGV0aCwgMCwgTVRLX0xST19DVFJMX0RXMl9DRkcoaSkpOworCisJLyogZGlzYWJsZSBIVyBMUk8gKi8KKwltdGtfdzMyKGV0aCwgMCwgTVRLX1BETUFfTFJPX0NUUkxfRFcwKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2h3bHJvX3ZhbF9pcGFkZHIoc3RydWN0IG10a19ldGggKmV0aCwgaW50IGlkeCwgX19iZTMyIGlwKQoreworCXUzMiByZWdfdmFsOworCisJaWYgKE1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX05FVFNZU19WMikpCisJCWlkeCArPSAxOworCisJcmVnX3ZhbCA9IG10a19yMzIoZXRoLCBNVEtfTFJPX0NUUkxfRFcyX0NGRyhpZHgpKTsKKworCS8qIGludmFsaWRhdGUgdGhlIElQIHNldHRpbmcgKi8KKwltdGtfdzMyKGV0aCwgKHJlZ192YWwgJiB+TVRLX1JJTkdfTVlJUF9WTEQpLCBNVEtfTFJPX0NUUkxfRFcyX0NGRyhpZHgpKTsKKworCW10a193MzIoZXRoLCBpcCwgTVRLX0xST19ESVBfRFcwX0NGRyhpZHgpKTsKKworCS8qIHZhbGlkYXRlIHRoZSBJUCBzZXR0aW5nICovCisJbXRrX3czMihldGgsIChyZWdfdmFsIHwgTVRLX1JJTkdfTVlJUF9WTEQpLCBNVEtfTFJPX0NUUkxfRFcyX0NGRyhpZHgpKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2h3bHJvX2ludmFsX2lwYWRkcihzdHJ1Y3QgbXRrX2V0aCAqZXRoLCBpbnQgaWR4KQoreworCXUzMiByZWdfdmFsOworCisJaWYgKE1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX05FVFNZU19WMikpCisJCWlkeCArPSAxOworCisJcmVnX3ZhbCA9IG10a19yMzIoZXRoLCBNVEtfTFJPX0NUUkxfRFcyX0NGRyhpZHgpKTsKKworCS8qIGludmFsaWRhdGUgdGhlIElQIHNldHRpbmcgKi8KKwltdGtfdzMyKGV0aCwgKHJlZ192YWwgJiB+TVRLX1JJTkdfTVlJUF9WTEQpLCBNVEtfTFJPX0NUUkxfRFcyX0NGRyhpZHgpKTsKKworCW10a193MzIoZXRoLCAwLCBNVEtfTFJPX0RJUF9EVzBfQ0ZHKGlkeCkpOworfQorCitzdGF0aWMgaW50IG10a19od2xyb19nZXRfaXBfY250KHN0cnVjdCBtdGtfbWFjICptYWMpCit7CisJaW50IGNudCA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTVRLX01BWF9MUk9fSVBfQ05UOyBpKyspIHsKKwkJaWYgKG1hYy0+aHdscm9faXBbaV0pCisJCQljbnQrKzsKKwl9CisKKwlyZXR1cm4gY250OworfQorCitzdGF0aWMgaW50IG10a19od2xyb19hZGRfaXBhZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZCkKK3sKKwlzdHJ1Y3QgZXRodG9vbF9yeF9mbG93X3NwZWMgKmZzcCA9CisJCShzdHJ1Y3QgZXRodG9vbF9yeF9mbG93X3NwZWMgKikmY21kLT5mczsKKwlzdHJ1Y3QgbXRrX21hYyAqbWFjID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbXRrX2V0aCAqZXRoID0gbWFjLT5odzsKKwlpbnQgaHdscm9faWR4OworCisJaWYgKChmc3AtPmZsb3dfdHlwZSAhPSBUQ1BfVjRfRkxPVykgfHwKKwkgICAgKCFmc3AtPmhfdS50Y3BfaXA0X3NwZWMuaXA0ZHN0KSB8fAorCSAgICAoZnNwLT5sb2NhdGlvbiA+IDEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1hYy0+aHdscm9faXBbZnNwLT5sb2NhdGlvbl0gPSBodG9ubChmc3AtPmhfdS50Y3BfaXA0X3NwZWMuaXA0ZHN0KTsKKwlod2xyb19pZHggPSAobWFjLT5pZCAqIE1US19NQVhfTFJPX0lQX0NOVCkgKyBmc3AtPmxvY2F0aW9uOworCisJbWFjLT5od2xyb19pcF9jbnQgPSBtdGtfaHdscm9fZ2V0X2lwX2NudChtYWMpOworCisJbXRrX2h3bHJvX3ZhbF9pcGFkZHIoZXRoLCBod2xyb19pZHgsIG1hYy0+aHdscm9faXBbZnNwLT5sb2NhdGlvbl0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2h3bHJvX2RlbF9pcGFkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqY21kKQoreworCXN0cnVjdCBldGh0b29sX3J4X2Zsb3dfc3BlYyAqZnNwID0KKwkJKHN0cnVjdCBldGh0b29sX3J4X2Zsb3dfc3BlYyAqKSZjbWQtPmZzOworCXN0cnVjdCBtdGtfbWFjICptYWMgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBtdGtfZXRoICpldGggPSBtYWMtPmh3OworCWludCBod2xyb19pZHg7CisKKwlpZiAoZnNwLT5sb2NhdGlvbiA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJbWFjLT5od2xyb19pcFtmc3AtPmxvY2F0aW9uXSA9IDA7CisJaHdscm9faWR4ID0gKG1hYy0+aWQgKiBNVEtfTUFYX0xST19JUF9DTlQpICsgZnNwLT5sb2NhdGlvbjsKKworCW1hYy0+aHdscm9faXBfY250ID0gbXRrX2h3bHJvX2dldF9pcF9jbnQobWFjKTsKKworCW10a19od2xyb19pbnZhbF9pcGFkZHIoZXRoLCBod2xyb19pZHgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG10a19od2xyb19uZXRkZXZfZGlzYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfbWFjICptYWMgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBtdGtfZXRoICpldGggPSBtYWMtPmh3OworCWludCBpLCBod2xyb19pZHg7CisKKwlmb3IgKGkgPSAwOyBpIDwgTVRLX01BWF9MUk9fSVBfQ05UOyBpKyspIHsKKwkJbWFjLT5od2xyb19pcFtpXSA9IDA7CisJCWh3bHJvX2lkeCA9IChtYWMtPmlkICogTVRLX01BWF9MUk9fSVBfQ05UKSArIGk7CisKKwkJbXRrX2h3bHJvX2ludmFsX2lwYWRkcihldGgsIGh3bHJvX2lkeCk7CisJfQorCisJbWFjLT5od2xyb19pcF9jbnQgPSAwOworfQorCitzdGF0aWMgaW50IG10a19od2xyb19nZXRfZmRpcl9lbnRyeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqY21kKQoreworCXN0cnVjdCBtdGtfbWFjICptYWMgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBldGh0b29sX3J4X2Zsb3dfc3BlYyAqZnNwID0KKwkJKHN0cnVjdCBldGh0b29sX3J4X2Zsb3dfc3BlYyAqKSZjbWQtPmZzOworCisJLyogb25seSB0Y3AgZHN0IGlwdjQgaXMgbWVhbmluZ2Z1bCwgb3RoZXJzIGFyZSBtZWFuaW5nbGVzcyAqLworCWZzcC0+Zmxvd190eXBlID0gVENQX1Y0X0ZMT1c7CisJZnNwLT5oX3UudGNwX2lwNF9zcGVjLmlwNGRzdCA9IG50b2hsKG1hYy0+aHdscm9faXBbZnNwLT5sb2NhdGlvbl0pOworCWZzcC0+bV91LnRjcF9pcDRfc3BlYy5pcDRkc3QgPSAwOworCisJZnNwLT5oX3UudGNwX2lwNF9zcGVjLmlwNHNyYyA9IDA7CisJZnNwLT5tX3UudGNwX2lwNF9zcGVjLmlwNHNyYyA9IDB4ZmZmZmZmZmY7CisJZnNwLT5oX3UudGNwX2lwNF9zcGVjLnBzcmMgPSAwOworCWZzcC0+bV91LnRjcF9pcDRfc3BlYy5wc3JjID0gMHhmZmZmOworCWZzcC0+aF91LnRjcF9pcDRfc3BlYy5wZHN0ID0gMDsKKwlmc3AtPm1fdS50Y3BfaXA0X3NwZWMucGRzdCA9IDB4ZmZmZjsKKwlmc3AtPmhfdS50Y3BfaXA0X3NwZWMudG9zID0gMDsKKwlmc3AtPm1fdS50Y3BfaXA0X3NwZWMudG9zID0gMHhmZjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19od2xyb19nZXRfZmRpcl9hbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQsCisJCQkJICB1MzIgKnJ1bGVfbG9jcykKK3sKKwlzdHJ1Y3QgbXRrX21hYyAqbWFjID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgY250ID0gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBNVEtfTUFYX0xST19JUF9DTlQ7IGkrKykgeworCQlpZiAobWFjLT5od2xyb19pcFtpXSkgeworCQkJcnVsZV9sb2NzW2NudF0gPSBpOworCQkJY250Kys7CisJCX0KKwl9CisKKwljbWQtPnJ1bGVfY250ID0gY250OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX3Jzc19pbml0KHN0cnVjdCBtdGtfZXRoICpldGgpCit7CisJdTMyIHZhbDsKKworCWlmICghTVRLX0hBU19DQVBTKGV0aC0+c29jLT5jYXBzLCBNVEtfTkVUU1lTX1YyKSkgeworCQkvKiBTZXQgUlNTIHJpbmdzIHRvIFBTRSBtb2RlcyAqLworCQl2YWwgPSAgbXRrX3IzMihldGgsIE1US19MUk9fQ1RSTF9EVzJfQ0ZHKDEpKTsKKwkJdmFsIHw9IE1US19SSU5HX1BTRV9NT0RFOworCQltdGtfdzMyKGV0aCwgdmFsLCBNVEtfTFJPX0NUUkxfRFcyX0NGRygxKSk7CisKKwkJLyogRW5hYmxlIG5vbi1scm8gbXVsdGlwbGUgcnggKi8KKwkJdmFsID0gbXRrX3IzMihldGgsIE1US19QRE1BX0xST19DVFJMX0RXMCk7CisJCXZhbCB8PSBNVEtfTk9OX0xST19NVUxUSV9FTjsKKwkJbXRrX3czMihldGgsIHZhbCwgTVRLX1BETUFfTFJPX0NUUkxfRFcwKTsKKworCQkvKiBFbmFibGUgUlNTIGRseSBpbnQgc3Vwb29ydCAqLworCQl2YWwgfD0gTVRLX0xST19ETFlfSU5UX0VOOworCQltdGtfdzMyKGV0aCwgdmFsLCBNVEtfUERNQV9MUk9fQ1RSTF9EVzApOworCisJCS8qIFNldCBSU1MgZGVsYXkgY29uZmlnIGludCByaW5nMSAqLworCQltdGtfdzMyKGV0aCwgTVRLX01BWF9ERUxBWV9JTlQsIE1US19MUk9fUlgxX0RMWV9JTlQpOworCX0KKworCS8qIEhhc2ggVHlwZSAqLworCXZhbCA9IG10a19yMzIoZXRoLCBNVEtfUERNQV9SU1NfR0xPX0NGRyk7CisJdmFsIHw9IE1US19SU1NfSVBWNF9TVEFUSUNfSEFTSDsKKwl2YWwgfD0gTVRLX1JTU19JUFY2X1NUQVRJQ19IQVNIOworCW10a193MzIoZXRoLCB2YWwsIE1US19QRE1BX1JTU19HTE9fQ0ZHKTsKKworCS8qIFNlbGVjdCB0aGUgc2l6ZSBvZiBpbmRpcmVjdGlvbiB0YWJsZSAqLworCW10a193MzIoZXRoLCBNVEtfUlNTX0lORFJfVEFCTEVfU0laRTQsIE1US19SU1NfSU5EUl9UQUJMRV9EVzApOworCW10a193MzIoZXRoLCBNVEtfUlNTX0lORFJfVEFCTEVfU0laRTQsIE1US19SU1NfSU5EUl9UQUJMRV9EVzEpOworCW10a193MzIoZXRoLCBNVEtfUlNTX0lORFJfVEFCTEVfU0laRTQsIE1US19SU1NfSU5EUl9UQUJMRV9EVzIpOworCW10a193MzIoZXRoLCBNVEtfUlNTX0lORFJfVEFCTEVfU0laRTQsIE1US19SU1NfSU5EUl9UQUJMRV9EVzMpOworCW10a193MzIoZXRoLCBNVEtfUlNTX0lORFJfVEFCTEVfU0laRTQsIE1US19SU1NfSU5EUl9UQUJMRV9EVzQpOworCW10a193MzIoZXRoLCBNVEtfUlNTX0lORFJfVEFCTEVfU0laRTQsIE1US19SU1NfSU5EUl9UQUJMRV9EVzUpOworCW10a193MzIoZXRoLCBNVEtfUlNTX0lORFJfVEFCTEVfU0laRTQsIE1US19SU1NfSU5EUl9UQUJMRV9EVzYpOworCW10a193MzIoZXRoLCBNVEtfUlNTX0lORFJfVEFCTEVfU0laRTQsIE1US19SU1NfSU5EUl9UQUJMRV9EVzcpOworCisJLyogUGF1c2UgKi8KKwl2YWwgfD0gTVRLX1JTU19DRkdfUkVROworCW10a193MzIoZXRoLCB2YWwsIE1US19QRE1BX1JTU19HTE9fQ0ZHKTsKKworCS8qIEVuYWJsZSBSU1MqLworCXZhbCB8PSBNVEtfUlNTX0VOOworCW10a193MzIoZXRoLCB2YWwsIE1US19QRE1BX1JTU19HTE9fQ0ZHKTsKKworCS8qIFJlbGVhc2UgcGF1c2UgKi8KKwl2YWwgJj0gfihNVEtfUlNTX0NGR19SRVEpOworCW10a193MzIoZXRoLCB2YWwsIE1US19QRE1BX1JTU19HTE9fQ0ZHKTsKKworCS8qIFNldCBwZXJSU1MgR1JQIElOVCAqLworCW10a193MzIoZXRoLCBNVEtfUlhfRE9ORV9JTlQoTVRLX1JTU19SSU5HMSksIE1US19QRE1BX0lOVF9HUlAzKTsKKworCS8qIFNldCBHUlAgSU5UICovCisJbXRrX3czMihldGgsIDB4MjEwMjEwMzAsIE1US19GRV9JTlRfR1JQKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtdGtfcnNzX3VuaW5pdChzdHJ1Y3QgbXRrX2V0aCAqZXRoKQoreworCXUzMiB2YWw7CisKKwkvKiBQYXVzZSAqLworCXZhbCA9IG10a19yMzIoZXRoLCBNVEtfUERNQV9SU1NfR0xPX0NGRyk7CisJdmFsIHw9IE1US19SU1NfQ0ZHX1JFUTsKKwltdGtfdzMyKGV0aCwgdmFsLCBNVEtfUERNQV9SU1NfR0xPX0NGRyk7CisKKwkvKiBEaXNhYmxlIFJTUyovCisJdmFsICY9IH4oTVRLX1JTU19FTik7CisJbXRrX3czMihldGgsIHZhbCwgTVRLX1BETUFfUlNTX0dMT19DRkcpOworCisJLyogUmVsZWFzZSBwYXVzZSAqLworCXZhbCAmPSB+KE1US19SU1NfQ0ZHX1JFUSk7CisJbXRrX3czMihldGgsIHZhbCwgTVRLX1BETUFfUlNTX0dMT19DRkcpOworfQorCitzdGF0aWMgbmV0ZGV2X2ZlYXR1cmVzX3QgbXRrX2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKQoreworCWlmICghKGZlYXR1cmVzICYgTkVUSUZfRl9MUk8pKSB7CisJCXN0cnVjdCBtdGtfbWFjICptYWMgPSBuZXRkZXZfcHJpdihkZXYpOworCQlpbnQgaXBfY250ID0gbXRrX2h3bHJvX2dldF9pcF9jbnQobWFjKTsKKworCQlpZiAoaXBfY250KSB7CisJCQluZXRkZXZfaW5mbyhkZXYsICJSWCBmbG93IGlzIHByb2dyYW1tZWQsIExSTyBzaG91bGQga2VlcCBvblxuIik7CisKKwkJCWZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPOworCQl9CisJfQorCisJaWYgKChmZWF0dXJlcyAmIE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYKSAmJiBuZXRkZXZfdXNlc19kc2EoZGV2KSkgeworCQluZXRkZXZfaW5mbyhkZXYsICJUWCB2bGFuIG9mZmxvYWQgY2Fubm90IGJlIGVuYWJsZWQgd2hlbiBkc2EgaXMgYXR0YWNoZWQuXG4iKTsKKworCQlmZWF0dXJlcyAmPSB+TkVUSUZfRl9IV19WTEFOX0NUQUdfVFg7CisJfQorCisJcmV0dXJuIGZlYXR1cmVzOworfQorCitzdGF0aWMgaW50IG10a19zZXRfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpCit7CisJc3RydWN0IG10a19tYWMgKm1hYyA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG10a19ldGggKmV0aCA9IG1hYy0+aHc7CisJaW50IGVyciA9IDA7CisKKwlpZiAoISgoZGV2LT5mZWF0dXJlcyBeIGZlYXR1cmVzKSAmIE1US19TRVRfRkVBVFVSRVMpKQorCQlyZXR1cm4gMDsKKworCWlmICghKGZlYXR1cmVzICYgTkVUSUZfRl9MUk8pKQorCQltdGtfaHdscm9fbmV0ZGV2X2Rpc2FibGUoZGV2KTsKKworCWlmICghKGZlYXR1cmVzICYgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlgpKQorCQltdGtfdzMyKGV0aCwgMCwgTVRLX0NETVBfRUdfQ1RSTCk7CisJZWxzZQorCQltdGtfdzMyKGV0aCwgMSwgTVRLX0NETVBfRUdfQ1RSTCk7CisKKwlyZXR1cm4gZXJyOworfQorCisvKiB3YWl0IGZvciBETUEgdG8gZmluaXNoIHdoYXRldmVyIGl0IGlzIGRvaW5nIGJlZm9yZSB3ZSBzdGFydCB1c2luZyBpdCBhZ2FpbiAqLworc3RhdGljIGludCBtdGtfZG1hX2J1c3lfd2FpdChzdHJ1Y3QgbXRrX2V0aCAqZXRoKQoreworCXVuc2lnbmVkIGxvbmcgdF9zdGFydCA9IGppZmZpZXM7CisKKwl3aGlsZSAoMSkgeworCQlpZiAoTVRLX0hBU19DQVBTKGV0aC0+c29jLT5jYXBzLCBNVEtfUURNQSkpIHsKKwkJCWlmICghKG10a19yMzIoZXRoLCBNVEtfUURNQV9HTE9fQ0ZHKSAmCisJCQkgICAgICAoTVRLX1JYX0RNQV9CVVNZIHwgTVRLX1RYX0RNQV9CVVNZKSkpCisJCQkJcmV0dXJuIDA7CisJCX0gZWxzZSB7CisJCQlpZiAoIShtdGtfcjMyKGV0aCwgTVRLX1BETUFfR0xPX0NGRykgJgorCQkJICAgICAgKE1US19SWF9ETUFfQlVTWSB8IE1US19UWF9ETUFfQlVTWSkpKQorCQkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdF9zdGFydCArIE1US19ETUFfQlVTWV9USU1FT1VUKSkKKwkJCWJyZWFrOworCX0KKworCWRldl9lcnIoZXRoLT5kZXYsICJETUEgaW5pdCB0aW1lb3V0XG4iKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RtYV9pbml0KHN0cnVjdCBtdGtfZXRoICpldGgpCit7CisJaW50IGVycjsKKwl1MzIgaTsKKworCWlmIChtdGtfZG1hX2J1c3lfd2FpdChldGgpKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKE1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX1FETUEpKSB7CisJCS8qIFFETUEgbmVlZHMgc2NyYXRjaCBtZW1vcnkgZm9yIGludGVybmFsIHJlb3JkZXJpbmcgb2YgdGhlCisJCSAqIGRlc2NyaXB0b3JzCisJCSAqLworCQllcnIgPSBtdGtfaW5pdF9mcV9kbWEoZXRoKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gbXRrX3R4X2FsbG9jKGV0aCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmIChNVEtfSEFTX0NBUFMoZXRoLT5zb2MtPmNhcHMsIE1US19RRE1BKSkgeworCQllcnIgPSBtdGtfcnhfYWxsb2MoZXRoLCAwLCBNVEtfUlhfRkxBR1NfUURNQSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IG10a19yeF9hbGxvYyhldGgsIDAsIE1US19SWF9GTEFHU19OT1JNQUwpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAoZXRoLT5od2xybykgeworCQlpID0gKE1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX05FVFNZU19WMikpID8gNCA6IDE7CisJCWZvciAoOyBpIDwgTVRLX01BWF9SWF9SSU5HX05VTTsgaSsrKSB7CisJCQllcnIgPSBtdGtfcnhfYWxsb2MoZXRoLCBpLCBNVEtfUlhfRkxBR1NfSFdMUk8pOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQl9CisJCWVyciA9IG10a19od2xyb19yeF9pbml0KGV0aCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWlmIChNVEtfSEFTX0NBUFMoZXRoLT5zb2MtPmNhcHMsIE1US19SU1MpKSB7CisJCWZvciAoaSA9IDE7IGkgPCBNVEtfUlhfTkFQSV9OVU07IGkrKykgeworCQkJZXJyID0gbXRrX3J4X2FsbG9jKGV0aCwgaSwgTVRLX1JYX0ZMQUdTX05PUk1BTCk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCX0KKwkJZXJyID0gbXRrX3Jzc19pbml0KGV0aCk7CisJCWlmIChlcnIpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworCX0KKworCWlmIChNVEtfSEFTX0NBUFMoZXRoLT5zb2MtPmNhcHMsIE1US19RRE1BKSkgeworCQkvKiBFbmFibGUgcmFuZG9tIGVhcmx5IGRyb3AgYW5kIHNldCBkcm9wIHRocmVzaG9sZAorCQkgKiBhdXRvbWF0aWNhbGx5CisJCSAqLworCQltdGtfdzMyKGV0aCwgRkNfVEhSRVNfRFJPUF9NT0RFIHwgRkNfVEhSRVNfRFJPUF9FTiB8CisJCQlGQ19USFJFU19NSU4sIE1US19RRE1BX0ZDX1RIUkVTKTsKKwkJbXRrX3czMihldGgsIDB4MCwgTVRLX1FETUFfSFJFRDIpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtdGtfZG1hX2ZyZWUoc3RydWN0IG10a19ldGggKmV0aCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBNVEtfTUFDX0NPVU5UOyBpKyspCisJCWlmIChldGgtPm5ldGRldltpXSkKKwkJCW5ldGRldl9yZXNldF9xdWV1ZShldGgtPm5ldGRldltpXSk7CisJaWYgKCAhZXRoLT5zb2MtPmhhc19zcmFtICYmIGV0aC0+c2NyYXRjaF9yaW5nKSB7CisJCWRtYV9mcmVlX2NvaGVyZW50KGV0aC0+ZGV2LAorCQkJCSAgTVRLX0RNQV9TSVpFICogc2l6ZW9mKHN0cnVjdCBtdGtfdHhfZG1hKSwKKwkJCQkgIGV0aC0+c2NyYXRjaF9yaW5nLAorCQkJCSAgZXRoLT5waHlfc2NyYXRjaF9yaW5nKTsKKwkJZXRoLT5zY3JhdGNoX3JpbmcgPSBOVUxMOworCQlldGgtPnBoeV9zY3JhdGNoX3JpbmcgPSAwOworCX0KKwltdGtfdHhfY2xlYW4oZXRoKTsKKwltdGtfcnhfY2xlYW4oZXRoLCAmZXRoLT5yeF9yaW5nWzBdLDEpOworCW10a19yeF9jbGVhbihldGgsICZldGgtPnJ4X3JpbmdfcWRtYSwwKTsKKworCWlmIChldGgtPmh3bHJvKSB7CisJCW10a19od2xyb19yeF91bmluaXQoZXRoKTsKKworCQlpID0gKE1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX05FVFNZU19WMikpID8gNCA6IDE7CisJCWZvciAoOyBpIDwgTVRLX01BWF9SWF9SSU5HX05VTTsgaSsrKQorCQkJbXRrX3J4X2NsZWFuKGV0aCwgJmV0aC0+cnhfcmluZ1tpXSwgMCk7CisJfQorCisJaWYgKE1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX1JTUykpIHsKKwkJbXRrX3Jzc191bmluaXQoZXRoKTsKKworCQlmb3IgKGkgPSAxOyBpIDwgTVRLX1JYX05BUElfTlVNOyBpKyspCisJCQltdGtfcnhfY2xlYW4oZXRoLCAmZXRoLT5yeF9yaW5nW2ldLCAxKTsKKwl9CisKKwlpZiAoZXRoLT5zY3JhdGNoX2hlYWQpIHsKKwkJa2ZyZWUoZXRoLT5zY3JhdGNoX2hlYWQpOworCQlldGgtPnNjcmF0Y2hfaGVhZCA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgdm9pZCBtdGtfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfbWFjICptYWMgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBtdGtfZXRoICpldGggPSBtYWMtPmh3OworCisJZXRoLT5uZXRkZXZbbWFjLT5pZF0tPnN0YXRzLnR4X2Vycm9ycysrOworCW5ldGlmX2VycihldGgsIHR4X2VyciwgZGV2LAorCQkgICJ0cmFuc21pdCB0aW1lZCBvdXRcbiIpOworCXNjaGVkdWxlX3dvcmsoJmV0aC0+cGVuZGluZ193b3JrKTsKK30KKworc3RhdGljIGlycXJldHVybl90IG10a19oYW5kbGVfaXJxX3J4KGludCBpcnEsIHZvaWQgKnByaXYpCit7CisJc3RydWN0IG10a19uYXBpICpyeF9uYXBpID0gcHJpdjsKKwlzdHJ1Y3QgbXRrX2V0aCAqZXRoID0gcnhfbmFwaS0+ZXRoOworCXN0cnVjdCBtdGtfcnhfcmluZyAqcmluZyA9IHJ4X25hcGktPnJ4X3Jpbmc7CisKKwlpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgmcnhfbmFwaS0+bmFwaSkpKSB7CisJCW10a19yeF9pcnFfZGlzYWJsZShldGgsIE1US19SWF9ET05FX0lOVChyaW5nLT5yaW5nX25vKSk7CisJCV9fbmFwaV9zY2hlZHVsZSgmcnhfbmFwaS0+bmFwaSk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbXRrX2hhbmRsZV9pcnFfdHgoaW50IGlycSwgdm9pZCAqX2V0aCkKK3sKKwlzdHJ1Y3QgbXRrX2V0aCAqZXRoID0gX2V0aDsKKworCWlmIChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVwKCZldGgtPnR4X25hcGkpKSkgeworCQltdGtfdHhfaXJxX2Rpc2FibGUoZXRoLCBNVEtfVFhfRE9ORV9JTlQpOworCQlfX25hcGlfc2NoZWR1bGUoJmV0aC0+dHhfbmFwaSk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbXRrX2hhbmRsZV9pcnEoaW50IGlycSwgdm9pZCAqX2V0aCkKK3sKKwlzdHJ1Y3QgbXRrX2V0aCAqZXRoID0gX2V0aDsKKworCWlmIChtdGtfcjMyKGV0aCwgTVRLX1BETUFfSU5UX01BU0spICYgTVRLX1JYX0RPTkVfSU5UKDApKSB7CisJCWlmIChtdGtfcjMyKGV0aCwgTVRLX1BETUFfSU5UX1NUQVRVUykgJiBNVEtfUlhfRE9ORV9JTlQoMCkpCisJCQltdGtfaGFuZGxlX2lycV9yeChpcnEsICZldGgtPnJ4X25hcGlbMF0pOworCX0KKwlpZiAobXRrX3IzMihldGgsIGV0aC0+dHhfaW50X21hc2tfcmVnKSAmIE1US19UWF9ET05FX0lOVCkgeworCQlpZiAobXRrX3IzMihldGgsIGV0aC0+dHhfaW50X3N0YXR1c19yZWcpICYgTVRLX1RYX0RPTkVfSU5UKQorCQkJbXRrX2hhbmRsZV9pcnFfdHgoaXJxLCBfZXRoKTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorc3RhdGljIHZvaWQgbXRrX3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfbWFjICptYWMgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBtdGtfZXRoICpldGggPSBtYWMtPmh3OworCisJbXRrX3R4X2lycV9kaXNhYmxlKGV0aCwgTVRLX1RYX0RPTkVfSU5UKTsKKwltdGtfcnhfaXJxX2Rpc2FibGUoZXRoLCBNVEtfUlhfRE9ORV9JTlQoMCkpOworCW10a19oYW5kbGVfaXJxX3J4KGV0aC0+aXJxWzJdLCAmZXRoLT5yeF9uYXBpWzBdKTsKKwltdGtfdHhfaXJxX2VuYWJsZShldGgsIE1US19UWF9ET05FX0lOVCk7CisJbXRrX3J4X2lycV9lbmFibGUoZXRoLCBNVEtfUlhfRE9ORV9JTlQoMCkpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgbXRrX3N0YXJ0X2RtYShzdHJ1Y3QgbXRrX2V0aCAqZXRoKQoreworCXUzMiByeF8yYl9vZmZzZXQgPSAoTkVUX0lQX0FMSUdOID09IDIpID8gTVRLX1JYXzJCX09GRlNFVCA6IDA7CisJaW50IHZhbCwgZXJyOworCisJZXJyID0gbXRrX2RtYV9pbml0KGV0aCk7CisJaWYgKGVycikgeworCQltdGtfZG1hX2ZyZWUoZXRoKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAoTVRLX0hBU19DQVBTKGV0aC0+c29jLT5jYXBzLCBNVEtfUURNQSkpIHsKKwkJdmFsID0gbXRrX3IzMihldGgsIE1US19RRE1BX0dMT19DRkcpOworCQlpZiAoTVRLX0hBU19DQVBTKGV0aC0+c29jLT5jYXBzLCBNVEtfTkVUU1lTX1YyKSkKKwkJCW10a193MzIoZXRoLAorCQkJCXZhbCB8IE1US19UWF9ETUFfRU4gfCBNVEtfUlhfRE1BX0VOIHwKKwkJCQlNVEtfRE1BX1NJWkVfMzJEV09SRFMgfCBNVEtfVFhfV0JfRERPTkUgfAorCQkJCU1US19ORFBfQ09fUFJPIHwgTVRLX01VVExJX0NOVCB8CisJCQkJTVRLX1JFU1ZfQlVGIHwgTVRLX1dDT01QX0VOIHwKKwkJCQlNVEtfRE1BRF9XUl9XRE9ORSB8IE1US19DSEtfRERPTkVfRU4gfAorCQkJCU1US19SWF8yQl9PRkZTRVQsIE1US19RRE1BX0dMT19DRkcpOworCQllbHNlCisJCQltdGtfdzMyKGV0aCwKKwkJCQl2YWwgfCBNVEtfVFhfRE1BX0VOIHwKKwkJCQlNVEtfRE1BX1NJWkVfMzJEV09SRFMgfCBNVEtfTkRQX0NPX1BSTyB8CisJCQkJTVRLX1JYX0RNQV9FTiB8IE1US19SWF8yQl9PRkZTRVQgfAorCQkJCU1US19SWF9CVF8zMkRXT1JEUywKKwkJCQlNVEtfUURNQV9HTE9fQ0ZHKTsKKworCQl2YWwgPSBtdGtfcjMyKGV0aCwgTVRLX1BETUFfR0xPX0NGRyk7CisJCW10a193MzIoZXRoLAorCQkJdmFsIHwgTVRLX1JYX0RNQV9FTiB8IHJ4XzJiX29mZnNldCB8CisJCQlNVEtfUlhfQlRfMzJEV09SRFMgfCBNVEtfTVVMVElfRU4sCisJCQlNVEtfUERNQV9HTE9fQ0ZHKTsKKwl9IGVsc2UgeworCQltdGtfdzMyKGV0aCwgTVRLX1RYX1dCX0RET05FIHwgTVRLX1RYX0RNQV9FTiB8IE1US19SWF9ETUFfRU4gfAorCQkJTVRLX01VTFRJX0VOIHwgTVRLX1BETUFfU0laRV84RFdPUkRTLAorCQkJTVRLX1BETUFfR0xPX0NGRyk7CisJfQorCisJaWYgKE1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX05FVFNZU19WMikgJiYgZXRoLT5od2xybykgeworCQl2YWwgPSBtdGtfcjMyKGV0aCwgTVRLX1BETUFfR0xPX0NGRyk7CisJCW10a193MzIoZXRoLCB2YWwgfCBNVEtfUlhfRE1BX0xST19FTiwgTVRLX1BETUFfR0xPX0NGRyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG10a19nZG1fY29uZmlnKHN0cnVjdCBtdGtfZXRoICpldGgsIHUzMiBjb25maWcpCit7CisJaW50IGk7CisKKwlpZiAoTVRLX0hBU19DQVBTKGV0aC0+c29jLT5jYXBzLCBNVEtfU09DX01UNzYyOCkpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBNVEtfTUFDX0NPVU5UOyBpKyspIHsKKwkJdTMyIHZhbCA9IG10a19yMzIoZXRoLCBNVEtfR0RNQV9GV0RfQ0ZHKGkpKTsKKworCQkvKiBkZWZhdWx0IHNldHVwIHRoZSBmb3J3YXJkIHBvcnQgdG8gc2VuZCBmcmFtZSB0byBQRE1BICovCisJCXZhbCAmPSB+MHhmZmZmOworCisJCS8qIEVuYWJsZSBSWCBjaGVja3N1bSAqLworCQl2YWwgfD0gTVRLX0dETUFfSUNTX0VOIHwgTVRLX0dETUFfVENTX0VOIHwgTVRLX0dETUFfVUNTX0VOOworCisJCXZhbCB8PSBjb25maWc7CisKKwkJaWYgKGV0aC0+bmV0ZGV2W2ldICYmIG5ldGRldl91c2VzX2RzYShldGgtPm5ldGRldltpXSkpCisJCQl2YWwgfD0gTVRLX0dETUFfU1BFQ0lBTF9UQUc7CisKKwkJbXRrX3czMihldGgsIHZhbCwgTVRLX0dETUFfRldEX0NGRyhpKSk7CisJfQorfQorCitzdGF0aWMgaW50IG10a19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10a19tYWMgKm1hYyA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG10a19ldGggKmV0aCA9IG1hYy0+aHc7CisJaW50IGVyciwgaTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBoeV9ub2RlOworCisJZXJyID0gcGh5bGlua19vZl9waHlfY29ubmVjdChtYWMtPnBoeWxpbmssIG1hYy0+b2Zfbm9kZSwgMCk7CisJaWYgKGVycikgeworCQluZXRkZXZfZXJyKGRldiwgIiVzOiBjb3VsZCBub3QgYXR0YWNoIFBIWTogJWRcbiIsIF9fZnVuY19fLAorCQkJICAgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiB3ZSBydW4gMiBuZXRkZXZzIG9uIHRoZSBzYW1lIGRtYSByaW5nIHNvIHdlIG9ubHkgYnJpbmcgaXQgdXAgb25jZSAqLworCWlmICghcmVmY291bnRfcmVhZCgmZXRoLT5kbWFfcmVmY250KSkgeworCQlpbnQgZXJyID0gbXRrX3N0YXJ0X2RtYShldGgpOworCisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCW10a19nZG1fY29uZmlnKGV0aCwgTVRLX0dETUFfVE9fUERNQSk7CisKKwkJLyogSW5kaWNhdGVzIENETSB0byBwYXJzZSB0aGUgTVRLIHNwZWNpYWwgdGFnIGZyb20gQ1BVICovCisJCWlmIChuZXRkZXZfdXNlc19kc2EoZGV2KSkgeworCQkJdTMyIHZhbDsKKwkJCXZhbCA9IG10a19yMzIoZXRoLCBNVEtfQ0RNUV9JR19DVFJMKTsKKwkJCW10a193MzIoZXRoLCB2YWwgfCBNVEtfQ0RNUV9TVEFHX0VOLCBNVEtfQ0RNUV9JR19DVFJMKTsKKwkJCXZhbCA9IG10a19yMzIoZXRoLCBNVEtfQ0RNUF9JR19DVFJMKTsKKwkJCW10a193MzIoZXRoLCB2YWwgfCBNVEtfQ0RNUF9TVEFHX0VOLCBNVEtfQ0RNUF9JR19DVFJMKTsKKwkJfQorCisJCW5hcGlfZW5hYmxlKCZldGgtPnR4X25hcGkpOworCQluYXBpX2VuYWJsZSgmZXRoLT5yeF9uYXBpWzBdLm5hcGkpOworCQltdGtfdHhfaXJxX2VuYWJsZShldGgsIE1US19UWF9ET05FX0lOVCk7CisJCW10a19yeF9pcnFfZW5hYmxlKGV0aCwgTVRLX1JYX0RPTkVfSU5UKDApKTsKKworCQlpZiAoTVRLX0hBU19DQVBTKGV0aC0+c29jLT5jYXBzLCBNVEtfUlNTKSkgeworCQkJZm9yIChpID0gMTsgaSA8IE1US19SWF9OQVBJX05VTTsgaSsrKSB7CisJCQkJbmFwaV9lbmFibGUoJmV0aC0+cnhfbmFwaVtpXS5uYXBpKTsKKwkJCQltdGtfcnhfaXJxX2VuYWJsZShldGgsIE1US19SWF9ET05FX0lOVChpKSk7CisJCQl9CisJCX0KKworCQlyZWZjb3VudF9zZXQoJmV0aC0+ZG1hX3JlZmNudCwgMSk7CisJfQorCWVsc2UKKwkJcmVmY291bnRfaW5jKCZldGgtPmRtYV9yZWZjbnQpOworCisJcGh5bGlua19zdGFydChtYWMtPnBoeWxpbmspOworCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisJcGh5X25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKG1hYy0+b2Zfbm9kZSwgInBoeS1oYW5kbGUiLCAwKTsKKwlpZiAoIXBoeV9ub2RlKSB7CisJCXJlZ21hcF93cml0ZShldGgtPnNnbWlpLT5yZWdtYXBbMF0sIFNHTVNZU19RUEhZX1BXUl9TVEFURV9DVFJMLCAwKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG10a19zdG9wX2RtYShzdHJ1Y3QgbXRrX2V0aCAqZXRoLCB1MzIgZ2xvX2NmZykKK3sKKwl1MzIgdmFsOworCWludCBpOworCisJLyogc3RvcCB0aGUgZG1hIGVuZ2luZSAqLworCXNwaW5fbG9ja19iaCgmZXRoLT5wYWdlX2xvY2spOworCXZhbCA9IG10a19yMzIoZXRoLCBnbG9fY2ZnKTsKKwltdGtfdzMyKGV0aCwgdmFsICYgfihNVEtfVFhfV0JfRERPTkUgfCBNVEtfUlhfRE1BX0VOIHwgTVRLX1RYX0RNQV9FTiksCisJCWdsb19jZmcpOworCXNwaW5fdW5sb2NrX2JoKCZldGgtPnBhZ2VfbG9jayk7CisKKwkvKiB3YWl0IGZvciBkbWEgc3RvcCAqLworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCXZhbCA9IG10a19yMzIoZXRoLCBnbG9fY2ZnKTsKKwkJaWYgKHZhbCAmIChNVEtfVFhfRE1BX0JVU1kgfCBNVEtfUlhfRE1BX0JVU1kpKSB7CisJCQltc2xlZXAoMjApOworCQkJY29udGludWU7CisJCX0KKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IG10a19zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10a19tYWMgKm1hYyA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG10a19ldGggKmV0aCA9IG1hYy0+aHc7CisJaW50IGk7CisJdTMyIHZhbCA9IDA7CisJc3RydWN0IGRldmljZV9ub2RlICpwaHlfbm9kZTsKKworCW5ldGlmX3R4X2Rpc2FibGUoZGV2KTsKKworCXBoeV9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShtYWMtPm9mX25vZGUsICJwaHktaGFuZGxlIiwgMCk7CisJaWYgKHBoeV9ub2RlKSB7CisJCXZhbCA9IF9tdGtfbWRpb19yZWFkKGV0aCwgMCwgMCk7CisJCXZhbCB8PSBCTUNSX1BET1dOOworCQlfbXRrX21kaW9fd3JpdGUoZXRoLCAwLCAwLCB2YWwpOworCX1lbHNlIHsKKwkJcmVnbWFwX3JlYWQoZXRoLT5zZ21paS0+cmVnbWFwWzBdLCBTR01TWVNfUVBIWV9QV1JfU1RBVEVfQ1RSTCwgJnZhbCk7CisJCXZhbCB8PSBTR01JSV9QSFlBX1BXRDsKKwkJcmVnbWFwX3dyaXRlKGV0aC0+c2dtaWktPnJlZ21hcFswXSwgU0dNU1lTX1FQSFlfUFdSX1NUQVRFX0NUUkwsIHZhbCk7CisJfQorCisJLy9HTUFDIFJYIGRpc2FibGUKKwl2YWwgPSBtdGtfcjMyKGV0aCwgTVRLX01BQ19NQ1IobWFjLT5pZCkpOworCW10a193MzIoZXRoLCB2YWwgJiB+KE1BQ19NQ1JfUlhfRU4pLCBNVEtfTUFDX01DUihtYWMtPmlkKSk7CisKKwlwaHlsaW5rX3N0b3AobWFjLT5waHlsaW5rKTsKKworCXBoeWxpbmtfZGlzY29ubmVjdF9waHkobWFjLT5waHlsaW5rKTsKKworCS8qIG9ubHkgc2h1dGRvd24gRE1BIGlmIHRoaXMgaXMgdGhlIGxhc3QgdXNlciAqLworCWlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0KCZldGgtPmRtYV9yZWZjbnQpKQorCQlyZXR1cm4gMDsKKworCW10a19nZG1fY29uZmlnKGV0aCwgTVRLX0dETUFfRFJPUF9BTEwpOworCisJbXRrX3R4X2lycV9kaXNhYmxlKGV0aCwgTVRLX1RYX0RPTkVfSU5UKTsKKwltdGtfcnhfaXJxX2Rpc2FibGUoZXRoLCBNVEtfUlhfRE9ORV9JTlQoMCkpOworCW5hcGlfZGlzYWJsZSgmZXRoLT50eF9uYXBpKTsKKwluYXBpX2Rpc2FibGUoJmV0aC0+cnhfbmFwaVswXS5uYXBpKTsKKworCWlmIChNVEtfSEFTX0NBUFMoZXRoLT5zb2MtPmNhcHMsIE1US19SU1MpKSB7CisJCWZvciAoaSA9IDE7IGkgPCBNVEtfUlhfTkFQSV9OVU07IGkrKykgeworCQkJbXRrX3J4X2lycV9kaXNhYmxlKGV0aCwgTVRLX1JYX0RPTkVfSU5UKGkpKTsKKwkJCW5hcGlfZGlzYWJsZSgmZXRoLT5yeF9uYXBpW2ldLm5hcGkpOworCQl9CisJfQorCisJaWYgKE1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX1FETUEpKQorCQltdGtfc3RvcF9kbWEoZXRoLCBNVEtfUURNQV9HTE9fQ0ZHKTsKKwltdGtfc3RvcF9kbWEoZXRoLCBNVEtfUERNQV9HTE9fQ0ZHKTsKKworCW10a19kbWFfZnJlZShldGgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGV0aHN5c19yZXNldChzdHJ1Y3QgbXRrX2V0aCAqZXRoLCB1MzIgcmVzZXRfYml0cykKK3sKKwlyZWdtYXBfdXBkYXRlX2JpdHMoZXRoLT5ldGhzeXMsIEVUSFNZU19SU1RDVFJMLAorCQkJICAgcmVzZXRfYml0cywKKwkJCSAgIHJlc2V0X2JpdHMpOworCisJdXNsZWVwX3JhbmdlKDEwMDAsIDExMDApOworCXJlZ21hcF91cGRhdGVfYml0cyhldGgtPmV0aHN5cywgRVRIU1lTX1JTVENUUkwsCisJCQkgICByZXNldF9iaXRzLAorCQkJICAgfnJlc2V0X2JpdHMpOworCW1kZWxheSgxMCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19jbGtfZGlzYWJsZShzdHJ1Y3QgbXRrX2V0aCAqZXRoKQoreworCWludCBjbGs7CisKKwlmb3IgKGNsayA9IE1US19DTEtfTUFYIC0gMTsgY2xrID49IDA7IGNsay0tKQorCQljbGtfZGlzYWJsZV91bnByZXBhcmUoZXRoLT5jbGtzW2Nsa10pOworfQorCitzdGF0aWMgaW50IG10a19jbGtfZW5hYmxlKHN0cnVjdCBtdGtfZXRoICpldGgpCit7CisJaW50IGNsaywgcmV0OworCisJZm9yIChjbGsgPSAwOyBjbGsgPCBNVEtfQ0xLX01BWCA7IGNsaysrKSB7CisJCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShldGgtPmNsa3NbY2xrXSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycl9kaXNhYmxlX2Nsa3M7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9kaXNhYmxlX2Nsa3M6CisJd2hpbGUgKC0tY2xrID49IDApCisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShldGgtPmNsa3NbY2xrXSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10a19uYXBpX2luaXQoc3RydWN0IG10a19ldGggKmV0aCkKK3sKKwlzdHJ1Y3QgbXRrX25hcGkgKnJ4X25hcGkgPSAmZXRoLT5yeF9uYXBpWzBdOworCWludCBpOworCisJcnhfbmFwaS0+ZXRoID0gZXRoOworCXJ4X25hcGktPnJ4X3JpbmcgPSAmZXRoLT5yeF9yaW5nWzBdOworCXJ4X25hcGktPmlycV9ncnBfbm8gPSAyOworCisJaWYgKE1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX1JTUykpIHsKKwkJZm9yIChpID0gMTsgaSA8IE1US19SWF9OQVBJX05VTTsgaSsrKSB7CisJCQlyeF9uYXBpID0gJmV0aC0+cnhfbmFwaVtpXTsKKwkJCXJ4X25hcGktPmV0aCA9IGV0aDsKKwkJCXJ4X25hcGktPnJ4X3JpbmcgPSAmZXRoLT5yeF9yaW5nW2ldOworCQkJcnhfbmFwaS0+aXJxX2dycF9ubyA9IDIgKyBpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2h3X2luaXQoc3RydWN0IG10a19ldGggKmV0aCkKK3sKKwlpbnQgaSwgcmV0OworCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoTVRLX0hXX0lOSVQsICZldGgtPnN0YXRlKSkKKwkJcmV0dXJuIDA7CisKKwlwbV9ydW50aW1lX2VuYWJsZShldGgtPmRldik7CisJcG1fcnVudGltZV9nZXRfc3luYyhldGgtPmRldik7CisKKwlyZXQgPSBtdGtfY2xrX2VuYWJsZShldGgpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2Rpc2FibGVfcG07CisKKwlpZiAoTVRLX0hBU19DQVBTKGV0aC0+c29jLT5jYXBzLCBNVEtfU09DX01UNzYyOCkpIHsKKwkJcmV0ID0gZGV2aWNlX3Jlc2V0KGV0aC0+ZGV2KTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihldGgtPmRldiwgIk1BQyByZXNldCBmYWlsZWQhXG4iKTsKKwkJCWdvdG8gZXJyX2Rpc2FibGVfcG07CisJCX0KKworCQkvKiBlbmFibGUgaW50ZXJydXB0IGRlbGF5IGZvciBSWCAqLworCQltdGtfdzMyKGV0aCwgTVRLX1BETUFfREVMQVlfUlhfREVMQVksIE1US19QRE1BX0RFTEFZX0lOVCk7CisKKwkJLyogZGlzYWJsZSBkZWxheSBhbmQgbm9ybWFsIGludGVycnVwdCAqLworCQltdGtfdHhfaXJxX2Rpc2FibGUoZXRoLCB+MCk7CisJCW10a19yeF9pcnFfZGlzYWJsZShldGgsIH4wKTsKKworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBOb24tTVQ3NjI4IGhhbmRsaW5nLi4uICovCisJaWYgKE1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX05FVFNZU19WMikpCisJCXJlZ21hcF93cml0ZShldGgtPmV0aHN5cywgRVRIU1lTX0ZFX1JTVF9DSEtfSURMRV9FTiwgMCk7CisKKwlpZihNVEtfSEFTX0NBUFMoZXRoLT5zb2MtPmNhcHMsIE1US19SU1RDVFJMX1BQRTEpKQorCQlldGhzeXNfcmVzZXQoZXRoLCAgUlNUQ1RSTF9FVEggfCBSU1RDVFJMX0ZFIHwgUlNUQ1RSTF9QUEUgfCBSU1RDVFJMX1BQRTEpOworCWVsc2UKKwkJZXRoc3lzX3Jlc2V0KGV0aCwgIFJTVENUUkxfRVRIIHwgUlNUQ1RSTF9GRSB8IFJTVENUUkxfUFBFKTsKKworCWlmIChNVEtfSEFTX0NBUFMoZXRoLT5zb2MtPmNhcHMsIE1US19ORVRTWVNfVjIpKSB7CisJCXJlZ21hcF93cml0ZShldGgtPmV0aHN5cywgRVRIU1lTX0ZFX1JTVF9DSEtfSURMRV9FTiwgMHgzZmZmZmZmKTsKKworCQkvKiBTZXQgRkUgdG8gUERNQXYyIGlmIG5lY2Vzc2FyeSAqLworCQltdGtfdzMyKGV0aCwgbXRrX3IzMihldGgsIE1US19GRV9HTE9fTUlTQykgfCBNVEtfUERNQV9WMiwgTVRLX0ZFX0dMT19NSVNDKTsKKwl9CisKKwlpZiAoZXRoLT5wY3RsKSB7CisJCS8qIFNldCBHRTIgZHJpdmluZyBhbmQgc2xldyByYXRlICovCisJCXJlZ21hcF93cml0ZShldGgtPnBjdGwsIEdQSU9fRFJWX1NFTDEwLCAweGEwMCk7CisKKwkJLyogc2V0IEdFMiBURFNFTCAqLworCQlyZWdtYXBfd3JpdGUoZXRoLT5wY3RsLCBHUElPX09EMzNfQ1RSTDgsIDB4NSk7CisKKwkJLyogc2V0IEdFMiBUVU5FICovCisJCXJlZ21hcF93cml0ZShldGgtPnBjdGwsIEdQSU9fQklBU19DVFJMLCAweDApOworCX0KKworCS8qIFNldCBsaW5rZG93biBhcyB0aGUgZGVmYXVsdCBmb3IgZWFjaCBHTUFDLiBJdHMgb3duIE1DUiB3b3VsZCBiZSBzZXQKKwkgKiB1cCB3aXRoIHRoZSBtb3JlIGFwcHJvcHJpYXRlIHZhbHVlIHdoZW4gbXRrX21hY19jb25maWcgY2FsbCBpcyBiZWluZworCSAqIGludm9rZWQuCisJICovCisJZm9yIChpID0gMDsgaSA8IE1US19NQUNfQ09VTlQ7IGkrKykKKwkJbXRrX3czMihldGgsIE1BQ19NQ1JfRk9SQ0VfTElOS19ET1dOLCBNVEtfTUFDX01DUihpKSk7CisKKwkvKiBFbmFibGUgUlggVkxhbiBPZmZsb2FkaW5nICovCisJaWYgKGV0aC0+c29jLT5od19mZWF0dXJlcyAmIE5FVElGX0ZfSFdfVkxBTl9DVEFHX1JYKQorCQltdGtfdzMyKGV0aCwgMSwgTVRLX0NETVBfRUdfQ1RSTCk7CisJZWxzZQorCQltdGtfdzMyKGV0aCwgMCwgTVRLX0NETVBfRUdfQ1RSTCk7CisKKwkvKiBlbmFibGUgaW50ZXJydXB0IGRlbGF5IGZvciBSWC9UWCAqLworCW10a193MzIoZXRoLCAweDhmMGY4ZjBmLCBNVEtfUERNQV9ERUxBWV9JTlQpOworCW10a193MzIoZXRoLCAweDhmMGY4ZjBmLCBNVEtfUURNQV9ERUxBWV9JTlQpOworCisJbXRrX3R4X2lycV9kaXNhYmxlKGV0aCwgfjApOworCW10a19yeF9pcnFfZGlzYWJsZShldGgsIH4wKTsKKworCS8qIEZFIGludCBncm91cGluZyAqLworCW10a193MzIoZXRoLCBNVEtfVFhfRE9ORV9JTlQsIE1US19QRE1BX0lOVF9HUlAxKTsKKwltdGtfdzMyKGV0aCwgTVRLX1JYX0RPTkVfSU5UKDApLCBNVEtfUERNQV9JTlRfR1JQMik7CisJbXRrX3czMihldGgsIE1US19UWF9ET05FX0lOVCwgTVRLX1FETUFfSU5UX0dSUDEpOworCW10a193MzIoZXRoLCBNVEtfUlhfRE9ORV9JTlQoMCksIE1US19RRE1BX0lOVF9HUlAyKTsKKwltdGtfdzMyKGV0aCwgMHgyMTAyMTAwMCwgTVRLX0ZFX0lOVF9HUlApOworCisJaWYgKE1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX05FVFNZU19WMikpIHsKKwkJLyogUFNFIEZyZWUgUXVldWUgRmxvdyBDb250cm9sICAqLworCQltdGtfdzMyKGV0aCwgMHgwMWZhMDFmNCwgUFNFX0ZRRkNfQ0ZHMik7CisKKwkJLyogUFNFIHNob3VsZCBub3QgZHJvcCBwb3J0OCBhbmQgcG9ydDkgcGFja2V0cyAqLworCQltdGtfdzMyKGV0aCwgMHgwMDAwMDMwMCwgUFNFX0RST1BfQ0ZHKTsKKworCQkvKiBQU0UgY29uZmlnIGlucHV0IHF1ZXVlIHRocmVzaG9sZCAqLworCQltdGtfdzMyKGV0aCwgMHgwMDFhMDAwZSwgUFNFX0lRX1JFVigxKSk7CisJCW10a193MzIoZXRoLCAweDAxZmYwMDFhLCBQU0VfSVFfUkVWKDIpKTsKKwkJbXRrX3czMihldGgsIDB4MDAwZTAxZmYsIFBTRV9JUV9SRVYoMykpOworCQltdGtfdzMyKGV0aCwgMHgwMDBlMDAwZSwgUFNFX0lRX1JFVig0KSk7CisJCW10a193MzIoZXRoLCAweDAwMGUwMDBlLCBQU0VfSVFfUkVWKDUpKTsKKwkJbXRrX3czMihldGgsIDB4MDAwZTAwMGUsIFBTRV9JUV9SRVYoNikpOworCQltdGtfdzMyKGV0aCwgMHgwMDBlMDAwZSwgUFNFX0lRX1JFVig3KSk7CisJCW10a193MzIoZXRoLCAweDAwMmEwMDBlLCBQU0VfSVFfUkVWKDgpKTsKKworCQkvKiBQU0UgY29uZmlnIG91dHB1dCBxdWV1ZSB0aHJlc2hvbGQgKi8KKwkJbXRrX3czMihldGgsIDB4MDAwZjAwMGEsIFBTRV9PUV9USCgxKSk7CisJCW10a193MzIoZXRoLCAweDAwMWEwMDBmLCBQU0VfT1FfVEgoMikpOworCQltdGtfdzMyKGV0aCwgMHgwMDBmMDAxYSwgUFNFX09RX1RIKDMpKTsKKwkJbXRrX3czMihldGgsIDB4MDFmZjAwMGYsIFBTRV9PUV9USCg0KSk7CisJCW10a193MzIoZXRoLCAweDAwMGYwMDBmLCBQU0VfT1FfVEgoNSkpOworCQltdGtfdzMyKGV0aCwgMHgwMDA2MDAwZiwgUFNFX09RX1RIKDYpKTsKKwkJbXRrX3czMihldGgsIDB4MDAwNjAwMDYsIFBTRV9PUV9USCg3KSk7CisJCW10a193MzIoZXRoLCAweDAwMDYwMDA2LCBQU0VfT1FfVEgoOCkpOworCisJCS8qIEdETSBhbmQgQ0RNIFRocmVzaG9sZCAqLworCQltdGtfdzMyKGV0aCwgMHgwMDAwMDAwNCwgTVRLX0dETTJfVEhSRVMpOworICAgICAgICAgICAgICAgIG10a193MzIoZXRoLCAweDAwMDAwMDA0LCBNVEtfQ0RNVzBfVEhSRVMpOworICAgICAgICAgICAgICAgIG10a193MzIoZXRoLCAweDAwMDAwMDA0LCBNVEtfQ0RNVzFfVEhSRVMpOworICAgICAgICAgICAgICAgIG10a193MzIoZXRoLCAweDAwMDAwMDA0LCBNVEtfQ0RNRTBfVEhSRVMpOworICAgICAgICAgICAgICAgIG10a193MzIoZXRoLCAweDAwMDAwMDA0LCBNVEtfQ0RNRTFfVEhSRVMpOworICAgICAgICAgICAgICAgIG10a193MzIoZXRoLCAweDAwMDAwMDA0LCBNVEtfQ0RNTV9USFJFUyk7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9kaXNhYmxlX3BtOgorCXBtX3J1bnRpbWVfcHV0X3N5bmMoZXRoLT5kZXYpOworCXBtX3J1bnRpbWVfZGlzYWJsZShldGgtPmRldik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10a19od19kZWluaXQoc3RydWN0IG10a19ldGggKmV0aCkKK3sKKwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChNVEtfSFdfSU5JVCwgJmV0aC0+c3RhdGUpKQorCQlyZXR1cm4gMDsKKworCW10a19jbGtfZGlzYWJsZShldGgpOworCisJcG1fcnVudGltZV9wdXRfc3luYyhldGgtPmRldik7CisJcG1fcnVudGltZV9kaXNhYmxlKGV0aC0+ZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBtdGtfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfbWFjICptYWMgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBtdGtfZXRoICpldGggPSBtYWMtPmh3OworCWNvbnN0IGNoYXIgKm1hY19hZGRyOworCisJbWFjX2FkZHIgPSBvZl9nZXRfbWFjX2FkZHJlc3MobWFjLT5vZl9ub2RlKTsKKwlpZiAoIUlTX0VSUihtYWNfYWRkcikpCisJCWV0aGVyX2FkZHJfY29weShkZXYtPmRldl9hZGRyLCBtYWNfYWRkcik7CisKKwkvKiBJZiB0aGUgbWFjIGFkZHJlc3MgaXMgaW52YWxpZCwgdXNlIHJhbmRvbSBtYWMgYWRkcmVzcyAgKi8KKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcikpIHsKKwkJZXRoX2h3X2FkZHJfcmFuZG9tKGRldik7CisJCWRldl9lcnIoZXRoLT5kZXYsICJnZW5lcmF0ZWQgcmFuZG9tIE1BQyBhZGRyZXNzICVwTVxuIiwKKwkJCWRldi0+ZGV2X2FkZHIpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtdGtfdW5pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10a19tYWMgKm1hYyA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG10a19ldGggKmV0aCA9IG1hYy0+aHc7CisKKwlwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KG1hYy0+cGh5bGluayk7CisJbXRrX3R4X2lycV9kaXNhYmxlKGV0aCwgfjApOworCW10a19yeF9pcnFfZGlzYWJsZShldGgsIH4wKTsKK30KKworc3RhdGljIGludCBtdGtfZG9faW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCit7CisJc3RydWN0IG10a19tYWMgKm1hYyA9IG5ldGRldl9wcml2KGRldik7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU0lPQ0dNSUlQSFk6CisJY2FzZSBTSU9DR01JSVJFRzoKKwljYXNlIFNJT0NTTUlJUkVHOgorCQlyZXR1cm4gcGh5bGlua19taWlfaW9jdGwobWFjLT5waHlsaW5rLCBpZnIsIGNtZCk7CisJZGVmYXVsdDoKKwkJLyogZGVmYXVsdCBpbnZva2UgdGhlIG10a19ldGhfZGJnIGhhbmRsZXIgKi8KKwkJcmV0dXJuIG10a19kb19wcml2X2lvY3RsKGRldiwgaWZyLCBjbWQpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKK3N0YXRpYyB2b2lkIG10a19wZW5kaW5nX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBtdGtfZXRoICpldGggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG10a19ldGgsIHBlbmRpbmdfd29yayk7CisJaW50IGVyciwgaTsKKwl1bnNpZ25lZCBsb25nIHJlc3RhcnQgPSAwOworCisJcnRubF9sb2NrKCk7CisKKwlkZXZfZGJnKGV0aC0+ZGV2LCAiWyVzXVslZF0gcmVzZXRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdF9sb2NrKE1US19SRVNFVFRJTkcsICZldGgtPnN0YXRlKSkKKwkJY3B1X3JlbGF4KCk7CisKKwlkZXZfZGJnKGV0aC0+ZGV2LCAiWyVzXVslZF0gbXRrX3N0b3Agc3RhcnRzXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworCS8qIHN0b3AgYWxsIGRldmljZXMgdG8gbWFrZSBzdXJlIHRoYXQgZG1hIGlzIHByb3Blcmx5IHNodXQgZG93biAqLworCWZvciAoaSA9IDA7IGkgPCBNVEtfTUFDX0NPVU5UOyBpKyspIHsKKwkJaWYgKCFldGgtPm5ldGRldltpXSkKKwkJCWNvbnRpbnVlOworCQltdGtfc3RvcChldGgtPm5ldGRldltpXSk7CisJCV9fc2V0X2JpdChpLCAmcmVzdGFydCk7CisJfQorCWRldl9kYmcoZXRoLT5kZXYsICJbJXNdWyVkXSBtdGtfc3RvcCBlbmRzXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJLyogcmVzdGFydCB1bmRlcmx5aW5nIGhhcmR3YXJlIHN1Y2ggYXMgcG93ZXIsIGNsb2NrLCBwaW4gbXV4CisJICogYW5kIHRoZSBjb25uZWN0ZWQgcGh5CisJICovCisJbXRrX2h3X2RlaW5pdChldGgpOworCisJaWYgKGV0aC0+ZGV2LT5waW5zKQorCQlwaW5jdHJsX3NlbGVjdF9zdGF0ZShldGgtPmRldi0+cGlucy0+cCwKKwkJCQkgICAgIGV0aC0+ZGV2LT5waW5zLT5kZWZhdWx0X3N0YXRlKTsKKwltdGtfaHdfaW5pdChldGgpOworCisJLyogcmVzdGFydCBETUEgYW5kIGVuYWJsZSBJUlFzICovCisJZm9yIChpID0gMDsgaSA8IE1US19NQUNfQ09VTlQ7IGkrKykgeworCQlpZiAoIXRlc3RfYml0KGksICZyZXN0YXJ0KSkKKwkJCWNvbnRpbnVlOworCQllcnIgPSBtdGtfb3BlbihldGgtPm5ldGRldltpXSk7CisJCWlmIChlcnIpIHsKKwkJCW5ldGlmX2FsZXJ0KGV0aCwgaWZ1cCwgZXRoLT5uZXRkZXZbaV0sCisJCQkgICAgICAiRHJpdmVyIHVwL2Rvd24gY3ljbGUgZmFpbGVkLCBjbG9zaW5nIGRldmljZS5cbiIpOworCQkJZGV2X2Nsb3NlKGV0aC0+bmV0ZGV2W2ldKTsKKwkJfQorCX0KKworCWRldl9kYmcoZXRoLT5kZXYsICJbJXNdWyVkXSByZXNldCBkb25lXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJY2xlYXJfYml0X3VubG9jayhNVEtfUkVTRVRUSU5HLCAmZXRoLT5zdGF0ZSk7CisKKwlydG5sX3VubG9jaygpOworfQorCitzdGF0aWMgaW50IG10a19mcmVlX2RldihzdHJ1Y3QgbXRrX2V0aCAqZXRoKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE1US19NQUNfQ09VTlQ7IGkrKykgeworCQlpZiAoIWV0aC0+bmV0ZGV2W2ldKQorCQkJY29udGludWU7CisJCWZyZWVfbmV0ZGV2KGV0aC0+bmV0ZGV2W2ldKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfdW5yZWdfZGV2KHN0cnVjdCBtdGtfZXRoICpldGgpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTVRLX01BQ19DT1VOVDsgaSsrKSB7CisJCWlmICghZXRoLT5uZXRkZXZbaV0pCisJCQljb250aW51ZTsKKwkJdW5yZWdpc3Rlcl9uZXRkZXYoZXRoLT5uZXRkZXZbaV0pOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19jbGVhbnVwKHN0cnVjdCBtdGtfZXRoICpldGgpCit7CisJbXRrX3VucmVnX2RldihldGgpOworCW10a19mcmVlX2RldihldGgpOworCWNhbmNlbF93b3JrX3N5bmMoJmV0aC0+cGVuZGluZ193b3JrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCisJCQkJICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKQoreworCXN0cnVjdCBtdGtfbWFjICptYWMgPSBuZXRkZXZfcHJpdihuZGV2KTsKKworCWlmICh1bmxpa2VseSh0ZXN0X2JpdChNVEtfUkVTRVRUSU5HLCAmbWFjLT5ody0+c3RhdGUpKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXJldHVybiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX2dldChtYWMtPnBoeWxpbmssIGNtZCk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKKwkJCQkgIGNvbnN0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpCit7CisJc3RydWN0IG10a19tYWMgKm1hYyA9IG5ldGRldl9wcml2KG5kZXYpOworCisJaWYgKHVubGlrZWx5KHRlc3RfYml0KE1US19SRVNFVFRJTkcsICZtYWMtPmh3LT5zdGF0ZSkpKQorCQlyZXR1cm4gLUVCVVNZOworCisJcmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KG1hYy0+cGh5bGluaywgY21kKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgbXRrX21hYyAqbWFjID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXN0cmxjcHkoaW5mby0+ZHJpdmVyLCBtYWMtPmh3LT5kZXYtPmRyaXZlci0+bmFtZSwgc2l6ZW9mKGluZm8tPmRyaXZlcikpOworCXN0cmxjcHkoaW5mby0+YnVzX2luZm8sIGRldl9uYW1lKG1hYy0+aHctPmRldiksIHNpemVvZihpbmZvLT5idXNfaW5mbykpOworCWluZm8tPm5fc3RhdHMgPSBBUlJBWV9TSVpFKG10a19ldGh0b29sX3N0YXRzKTsKK30KKworc3RhdGljIHUzMiBtdGtfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10a19tYWMgKm1hYyA9IG5ldGRldl9wcml2KGRldik7CisKKwlyZXR1cm4gbWFjLT5ody0+bXNnX2VuYWJsZTsKK30KKworc3RhdGljIHZvaWQgbXRrX3NldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgdmFsdWUpCit7CisJc3RydWN0IG10a19tYWMgKm1hYyA9IG5ldGRldl9wcml2KGRldik7CisKKwltYWMtPmh3LT5tc2dfZW5hYmxlID0gdmFsdWU7Cit9CisKK3N0YXRpYyBpbnQgbXRrX253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX21hYyAqbWFjID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmICh1bmxpa2VseSh0ZXN0X2JpdChNVEtfUkVTRVRUSU5HLCAmbWFjLT5ody0+c3RhdGUpKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmICghbWFjLT5waHlsaW5rKQorCQlyZXR1cm4gLUVOT1RTVVBQOworCisJcmV0dXJuIHBoeWxpbmtfZXRodG9vbF9ud2F5X3Jlc2V0KG1hYy0+cGh5bGluayk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqZGF0YSkKK3sKKwlpbnQgaTsKKworCXN3aXRjaCAoc3RyaW5nc2V0KSB7CisJY2FzZSBFVEhfU1NfU1RBVFM6CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG10a19ldGh0b29sX3N0YXRzKTsgaSsrKSB7CisJCQltZW1jcHkoZGF0YSwgbXRrX2V0aHRvb2xfc3RhdHNbaV0uc3RyLCBFVEhfR1NUUklOR19MRU4pOworCQkJZGF0YSArPSBFVEhfR1NUUklOR19MRU47CisJCX0KKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IG10a19nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3NldCkKK3sKKwlzd2l0Y2ggKHNzZXQpIHsKKwljYXNlIEVUSF9TU19TVEFUUzoKKwkJcmV0dXJuIEFSUkFZX1NJWkUobXRrX2V0aHRvb2xfc3RhdHMpOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG10a19nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLCB1NjQgKmRhdGEpCit7CisJc3RydWN0IG10a19tYWMgKm1hYyA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG10a19od19zdGF0cyAqaHdzdGF0cyA9IG1hYy0+aHdfc3RhdHM7CisJdTY0ICpkYXRhX3NyYywgKmRhdGFfZHN0OworCXVuc2lnbmVkIGludCBzdGFydDsKKwlpbnQgaTsKKworCWlmICh1bmxpa2VseSh0ZXN0X2JpdChNVEtfUkVTRVRUSU5HLCAmbWFjLT5ody0+c3RhdGUpKSkKKwkJcmV0dXJuOworCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSAmJiBuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKSB7CisJCWlmIChzcGluX3RyeWxvY2tfYmgoJmh3c3RhdHMtPnN0YXRzX2xvY2spKSB7CisJCQltdGtfc3RhdHNfdXBkYXRlX21hYyhtYWMpOworCQkJc3Bpbl91bmxvY2tfYmgoJmh3c3RhdHMtPnN0YXRzX2xvY2spOworCQl9CisJfQorCisJZGF0YV9zcmMgPSAodTY0ICopaHdzdGF0czsKKworCWRvIHsKKwkJZGF0YV9kc3QgPSBkYXRhOworCQlzdGFydCA9IHU2NF9zdGF0c19mZXRjaF9iZWdpbl9pcnEoJmh3c3RhdHMtPnN5bmNwKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdGtfZXRodG9vbF9zdGF0cyk7IGkrKykKKwkJCSpkYXRhX2RzdCsrID0gKihkYXRhX3NyYyArIG10a19ldGh0b29sX3N0YXRzW2ldLm9mZnNldCk7CisJfSB3aGlsZSAodTY0X3N0YXRzX2ZldGNoX3JldHJ5X2lycSgmaHdzdGF0cy0+c3luY3AsIHN0YXJ0KSk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2dldF9yeG5mYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqY21kLAorCQkJIHUzMiAqcnVsZV9sb2NzKQoreworCWludCByZXQgPSAtRU9QTk9UU1VQUDsKKworCXN3aXRjaCAoY21kLT5jbWQpIHsKKwljYXNlIEVUSFRPT0xfR1JYUklOR1M6CisJCWlmIChkZXYtPmh3X2ZlYXR1cmVzICYgTkVUSUZfRl9MUk8pIHsKKwkJCWNtZC0+ZGF0YSA9IE1US19NQVhfUlhfUklOR19OVU07CisJCQlyZXQgPSAwOworCQl9CisJCWJyZWFrOworCWNhc2UgRVRIVE9PTF9HUlhDTFNSTENOVDoKKwkJaWYgKGRldi0+aHdfZmVhdHVyZXMgJiBORVRJRl9GX0xSTykgeworCQkJc3RydWN0IG10a19tYWMgKm1hYyA9IG5ldGRldl9wcml2KGRldik7CisKKwkJCWNtZC0+cnVsZV9jbnQgPSBtYWMtPmh3bHJvX2lwX2NudDsKKwkJCXJldCA9IDA7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBFVEhUT09MX0dSWENMU1JVTEU6CisJCWlmIChkZXYtPmh3X2ZlYXR1cmVzICYgTkVUSUZfRl9MUk8pCisJCQlyZXQgPSBtdGtfaHdscm9fZ2V0X2ZkaXJfZW50cnkoZGV2LCBjbWQpOworCQlicmVhazsKKwljYXNlIEVUSFRPT0xfR1JYQ0xTUkxBTEw6CisJCWlmIChkZXYtPmh3X2ZlYXR1cmVzICYgTkVUSUZfRl9MUk8pCisJCQlyZXQgPSBtdGtfaHdscm9fZ2V0X2ZkaXJfYWxsKGRldiwgY21kLAorCQkJCQkJICAgICBydWxlX2xvY3MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10a19zZXRfcnhuZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmNtZCkKK3sKKwlpbnQgcmV0ID0gLUVPUE5PVFNVUFA7CisKKwlzd2l0Y2ggKGNtZC0+Y21kKSB7CisJY2FzZSBFVEhUT09MX1NSWENMU1JMSU5TOgorCQlpZiAoZGV2LT5od19mZWF0dXJlcyAmIE5FVElGX0ZfTFJPKQorCQkJcmV0ID0gbXRrX2h3bHJvX2FkZF9pcGFkZHIoZGV2LCBjbWQpOworCQlicmVhazsKKwljYXNlIEVUSFRPT0xfU1JYQ0xTUkxERUw6CisJCWlmIChkZXYtPmh3X2ZlYXR1cmVzICYgTkVUSUZfRl9MUk8pCisJCQlyZXQgPSBtdGtfaHdscm9fZGVsX2lwYWRkcihkZXYsIGNtZCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbXRrX2V0aHRvb2xfb3BzID0geworCS5nZXRfbGlua19rc2V0dGluZ3MJPSBtdGtfZ2V0X2xpbmtfa3NldHRpbmdzLAorCS5zZXRfbGlua19rc2V0dGluZ3MJPSBtdGtfc2V0X2xpbmtfa3NldHRpbmdzLAorCS5nZXRfZHJ2aW5mbwkJPSBtdGtfZ2V0X2RydmluZm8sCisJLmdldF9tc2dsZXZlbAkJPSBtdGtfZ2V0X21zZ2xldmVsLAorCS5zZXRfbXNnbGV2ZWwJCT0gbXRrX3NldF9tc2dsZXZlbCwKKwkubndheV9yZXNldAkJPSBtdGtfbndheV9yZXNldCwKKwkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKKwkuZ2V0X3N0cmluZ3MJCT0gbXRrX2dldF9zdHJpbmdzLAorCS5nZXRfc3NldF9jb3VudAkJPSBtdGtfZ2V0X3NzZXRfY291bnQsCisJLmdldF9ldGh0b29sX3N0YXRzCT0gbXRrX2dldF9ldGh0b29sX3N0YXRzLAorCS5nZXRfcnhuZmMJCT0gbXRrX2dldF9yeG5mYywKKwkuc2V0X3J4bmZjICAgICAgICAgICAgICA9IG10a19zZXRfcnhuZmMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG10a19uZXRkZXZfb3BzID0geworCS5uZG9faW5pdAkJPSBtdGtfaW5pdCwKKwkubmRvX3VuaW5pdAkJPSBtdGtfdW5pbml0LAorCS5uZG9fb3BlbgkJPSBtdGtfb3BlbiwKKwkubmRvX3N0b3AJCT0gbXRrX3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IG10a19zdGFydF94bWl0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gbXRrX3NldF9tYWNfYWRkcmVzcywKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX2RvX2lvY3RsCQk9IG10a19kb19pb2N0bCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gbXRrX3R4X3RpbWVvdXQsCisJLm5kb19nZXRfc3RhdHM2NCAgICAgICAgPSBtdGtfZ2V0X3N0YXRzNjQsCisJLm5kb19maXhfZmVhdHVyZXMJPSBtdGtfZml4X2ZlYXR1cmVzLAorCS5uZG9fc2V0X2ZlYXR1cmVzCT0gbXRrX3NldF9mZWF0dXJlcywKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gbXRrX3BvbGxfY29udHJvbGxlciwKKyNlbmRpZgorfTsKKworc3RhdGljIGludCBtdGtfYWRkX21hYyhzdHJ1Y3QgbXRrX2V0aCAqZXRoLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCWNvbnN0IF9fYmUzMiAqX2lkID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgTlVMTCk7CisJc3RydWN0IHBoeWxpbmsgKnBoeWxpbms7CisJaW50IHBoeV9tb2RlLCBpZCwgZXJyOworCXN0cnVjdCBtdGtfbWFjICptYWM7CisKKwlpZiAoIV9pZCkgeworCQlkZXZfZXJyKGV0aC0+ZGV2LCAibWlzc2luZyBtYWMgaWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZCA9IGJlMzJfdG9fY3B1cChfaWQpOworCWlmIChpZCA8IDAgfHwgaWQgPj0gTVRLX01BQ19DT1VOVCkgeworCQlkZXZfZXJyKGV0aC0+ZGV2LCAiJWQgaXMgbm90IGEgdmFsaWQgbWFjIGlkXG4iLCBpZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChldGgtPm5ldGRldltpZF0pIHsKKwkJZGV2X2VycihldGgtPmRldiwgImR1cGxpY2F0ZSBtYWMgaWQgZm91bmQ6ICVkXG4iLCBpZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWV0aC0+bmV0ZGV2W2lkXSA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZigqbWFjKSk7CisJaWYgKCFldGgtPm5ldGRldltpZF0pIHsKKwkJZGV2X2VycihldGgtPmRldiwgImFsbG9jX2V0aGVyZGV2IGZhaWxlZFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltYWMgPSBuZXRkZXZfcHJpdihldGgtPm5ldGRldltpZF0pOworCWV0aC0+bWFjW2lkXSA9IG1hYzsKKwltYWMtPmlkID0gaWQ7CisJbWFjLT5odyA9IGV0aDsKKwltYWMtPm9mX25vZGUgPSBucDsKKworCW1lbXNldChtYWMtPmh3bHJvX2lwLCAwLCBzaXplb2YobWFjLT5od2xyb19pcCkpOworCW1hYy0+aHdscm9faXBfY250ID0gMDsKKworCW1hYy0+aHdfc3RhdHMgPSBkZXZtX2t6YWxsb2MoZXRoLT5kZXYsCisJCQkJICAgICBzaXplb2YoKm1hYy0+aHdfc3RhdHMpLAorCQkJCSAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFtYWMtPmh3X3N0YXRzKSB7CisJCWRldl9lcnIoZXRoLT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgY291bnRlciBtZW1vcnlcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfbmV0ZGV2OworCX0KKwlzcGluX2xvY2tfaW5pdCgmbWFjLT5od19zdGF0cy0+c3RhdHNfbG9jayk7CisJdTY0X3N0YXRzX2luaXQoJm1hYy0+aHdfc3RhdHMtPnN5bmNwKTsKKwltYWMtPmh3X3N0YXRzLT5yZWdfb2Zmc2V0ID0gaWQgKiBNVEtfU1RBVF9PRkZTRVQ7CisKKwkvKiBwaHlsaW5rIGNyZWF0ZSAqLworCXBoeV9tb2RlID0gb2ZfZ2V0X3BoeV9tb2RlKG5wKTsKKwlpZiAocGh5X21vZGUgPCAwKSB7CisJCWRldl9lcnIoZXRoLT5kZXYsICJpbmNvcnJlY3QgcGh5LW1vZGVcbiIpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGZyZWVfbmV0ZGV2OworCX0KKworCS8qIG1hYyBjb25maWcgaXMgbm90IHNldCAqLworCW1hYy0+aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX05BOworCW1hYy0+bW9kZSA9IE1MT19BTl9QSFk7CisJbWFjLT5zcGVlZCA9IFNQRUVEX1VOS05PV047CisKKwltYWMtPnBoeWxpbmtfY29uZmlnLmRldiA9ICZldGgtPm5ldGRldltpZF0tPmRldjsKKwltYWMtPnBoeWxpbmtfY29uZmlnLnR5cGUgPSBQSFlMSU5LX05FVERFVjsKKworCXBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZSgmbWFjLT5waHlsaW5rX2NvbmZpZywKKwkJCQkgb2ZfZndub2RlX2hhbmRsZShtYWMtPm9mX25vZGUpLAorCQkJCSBwaHlfbW9kZSwgJm10a19waHlsaW5rX29wcyk7CisJaWYgKElTX0VSUihwaHlsaW5rKSkgeworCQllcnIgPSBQVFJfRVJSKHBoeWxpbmspOworCQlnb3RvIGZyZWVfbmV0ZGV2OworCX0KKworCW1hYy0+cGh5bGluayA9IHBoeWxpbms7CisKKwlTRVRfTkVUREVWX0RFVihldGgtPm5ldGRldltpZF0sIGV0aC0+ZGV2KTsKKwlldGgtPm5ldGRldltpZF0tPndhdGNoZG9nX3RpbWVvID0gNSAqIEhaOworCWV0aC0+bmV0ZGV2W2lkXS0+bmV0ZGV2X29wcyA9ICZtdGtfbmV0ZGV2X29wczsKKwlldGgtPm5ldGRldltpZF0tPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKWV0aC0+YmFzZTsKKworCWV0aC0+bmV0ZGV2W2lkXS0+aHdfZmVhdHVyZXMgPSBldGgtPnNvYy0+aHdfZmVhdHVyZXM7CisJaWYgKGV0aC0+aHdscm8pCisJCWV0aC0+bmV0ZGV2W2lkXS0+aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9MUk87CisKKwlldGgtPm5ldGRldltpZF0tPnZsYW5fZmVhdHVyZXMgPSBldGgtPnNvYy0+aHdfZmVhdHVyZXMgJgorCQl+KE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYIHwgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlgpOworCWV0aC0+bmV0ZGV2W2lkXS0+ZmVhdHVyZXMgfD0gZXRoLT5zb2MtPmh3X2ZlYXR1cmVzOworCWV0aC0+bmV0ZGV2W2lkXS0+ZXRodG9vbF9vcHMgPSAmbXRrX2V0aHRvb2xfb3BzOworCisJZXRoLT5uZXRkZXZbaWRdLT5pcnEgPSBldGgtPmlycVswXTsKKwlldGgtPm5ldGRldltpZF0tPmRldi5vZl9ub2RlID0gbnA7CisKKwlyZXR1cm4gMDsKKworZnJlZV9uZXRkZXY6CisJZnJlZV9uZXRkZXYoZXRoLT5uZXRkZXZbaWRdKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG10a19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbWFjX25wOworCXN0cnVjdCBtdGtfZXRoICpldGg7CisJaW50IGVyciwgaTsKKworCWV0aCA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmV0aCksIEdGUF9LRVJORUwpOworCWlmICghZXRoKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWV0aC0+c29jID0gb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKCZwZGV2LT5kZXYpOworCisJZXRoLT5kZXYgPSAmcGRldi0+ZGV2OworCWV0aC0+YmFzZSA9IGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZShwZGV2LCAwKTsKKwlpZiAoSVNfRVJSKGV0aC0+YmFzZSkpCisJCXJldHVybiBQVFJfRVJSKGV0aC0+YmFzZSk7CisKKwlpZihldGgtPnNvYy0+aGFzX3NyYW0pIHsKKwkJc3RydWN0IHJlc291cmNlICpyZXM7CisJCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJCWlmICh1bmxpa2VseSghcmVzKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlldGgtPnBoeV9zY3JhdGNoX3JpbmcgPSByZXMtPnN0YXJ0ICsgTVRLX0VUSF9TUkFNX09GRlNFVDsKKwl9CisKKwlpZiAoTVRLX0hBU19DQVBTKGV0aC0+c29jLT5jYXBzLCBNVEtfUURNQSkpIHsKKwkJZXRoLT50eF9pbnRfbWFza19yZWcgPSBNVEtfUURNQV9JTlRfTUFTSzsKKwkJZXRoLT50eF9pbnRfc3RhdHVzX3JlZyA9IE1US19RRE1BX0lOVF9TVEFUVVM7CisJfSBlbHNlIHsKKwkJZXRoLT50eF9pbnRfbWFza19yZWcgPSBNVEtfUERNQV9JTlRfTUFTSzsKKwkJZXRoLT50eF9pbnRfc3RhdHVzX3JlZyA9IE1US19QRE1BX0lOVF9TVEFUVVM7CisJfQorCisJaWYgKE1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX1NPQ19NVDc2MjgpKSB7CisJCWV0aC0+cnhfZG1hX2w0X3ZhbGlkID0gUlhfRE1BX0w0X1ZBTElEX1BETUE7CisJCWV0aC0+aXBfYWxpZ24gPSBORVRfSVBfQUxJR047CisJfSBlbHNlIHsKKwkJaWYgKE1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX05FVFNZU19WMikpCisJCQlldGgtPnJ4X2RtYV9sNF92YWxpZCA9IFJYX0RNQV9MNF9WQUxJRF9WMjsKKwkJZWxzZQorCQkJZXRoLT5yeF9kbWFfbDRfdmFsaWQgPSBSWF9ETUFfTDRfVkFMSUQ7CisJfQorCisJc3Bpbl9sb2NrX2luaXQoJmV0aC0+cGFnZV9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmZXRoLT50eF9pcnFfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmV0aC0+cnhfaXJxX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZldGgtPnN5c2NmZzBfbG9jayk7CisKKwlpZiAoIU1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX1NPQ19NVDc2MjgpKSB7CisJCWV0aC0+ZXRoc3lzID0gc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZShwZGV2LT5kZXYub2Zfbm9kZSwKKwkJCQkJCQkgICAgICAibWVkaWF0ZWssZXRoc3lzIik7CisJCWlmIChJU19FUlIoZXRoLT5ldGhzeXMpKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBldGhzeXMgcmVnbWFwIGZvdW5kXG4iKTsKKwkJCXJldHVybiBQVFJfRVJSKGV0aC0+ZXRoc3lzKTsKKwkJfQorCX0KKworCWlmIChNVEtfSEFTX0NBUFMoZXRoLT5zb2MtPmNhcHMsIE1US19JTkZSQSkpIHsKKwkJZXRoLT5pbmZyYSA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUocGRldi0+ZGV2Lm9mX25vZGUsCisJCQkJCQkJICAgICAibWVkaWF0ZWssaW5mcmFjZmciKTsKKwkJaWYgKElTX0VSUihldGgtPmluZnJhKSkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gaW5mcmFjZmcgcmVnbWFwIGZvdW5kXG4iKTsKKwkJCXJldHVybiBQVFJfRVJSKGV0aC0+aW5mcmEpOworCQl9CisJfQorCisJaWYgKE1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX1NHTUlJKSkgeworCQlldGgtPnNnbWlpID0gZGV2bV9remFsbG9jKGV0aC0+ZGV2LCBzaXplb2YoKmV0aC0+c2dtaWkpLAorCQkJCQkgIEdGUF9LRVJORUwpOworCQlpZiAoIWV0aC0+c2dtaWkpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQllcnIgPSBtdGtfc2dtaWlfaW5pdChldGgtPnNnbWlpLCBwZGV2LT5kZXYub2Zfbm9kZSwKKwkJCQkgICAgIGV0aC0+c29jLT5hbmFfcmdjMyk7CisKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJaWYgKGV0aC0+c29jLT5yZXF1aXJlZF9wY3RsKSB7CisJCWV0aC0+cGN0bCA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUocGRldi0+ZGV2Lm9mX25vZGUsCisJCQkJCQkJICAgICJtZWRpYXRlayxwY3RsIik7CisJCWlmIChJU19FUlIoZXRoLT5wY3RsKSkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gcGN0bCByZWdtYXAgZm91bmRcbiIpOworCQkJcmV0dXJuIFBUUl9FUlIoZXRoLT5wY3RsKTsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBNVEtfTUFYX0lSUV9OVU07IGkrKykgeworCQlpZiAoTVRLX0hBU19DQVBTKGV0aC0+c29jLT5jYXBzLCBNVEtfU0hBUkVEX0lOVCkgJiYgaSA+IDApCisJCQlldGgtPmlycVtpXSA9IGV0aC0+aXJxWzBdOworCQllbHNlCisJCQlldGgtPmlycVtpXSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgaSk7CisJCWlmIChldGgtPmlycVtpXSA8IDApIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIElSUSVkIHJlc291cmNlIGZvdW5kXG4iLCBpKTsKKwkJCXJldHVybiAtRU5YSU87CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShldGgtPmNsa3MpOyBpKyspIHsKKwkJZXRoLT5jbGtzW2ldID0gZGV2bV9jbGtfZ2V0KGV0aC0+ZGV2LAorCQkJCQkgICAgbXRrX2Nsa3Nfc291cmNlX25hbWVbaV0pOworCQlpZiAoSVNfRVJSKGV0aC0+Y2xrc1tpXSkpIHsKKwkJCWlmIChQVFJfRVJSKGV0aC0+Y2xrc1tpXSkgPT0gLUVQUk9CRV9ERUZFUikKKwkJCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwkJCWlmIChldGgtPnNvYy0+cmVxdWlyZWRfY2xrcyAmIEJJVChpKSkgeworCQkJCWRldl9lcnIoJnBkZXYtPmRldiwgImNsb2NrICVzIG5vdCBmb3VuZFxuIiwKKwkJCQkJbXRrX2Nsa3Nfc291cmNlX25hbWVbaV0pOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJZXRoLT5jbGtzW2ldID0gTlVMTDsKKwkJfQorCX0KKworCWV0aC0+bXNnX2VuYWJsZSA9IG5ldGlmX21zZ19pbml0KG10a19tc2dfbGV2ZWwsIE1US19ERUZBVUxUX01TR19FTkFCTEUpOworCUlOSVRfV09SSygmZXRoLT5wZW5kaW5nX3dvcmssIG10a19wZW5kaW5nX3dvcmspOworCisJZXJyID0gbXRrX2h3X2luaXQoZXRoKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXRoLT5od2xybyA9IE1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX0hXTFJPKTsKKworCWZvcl9lYWNoX2NoaWxkX29mX25vZGUocGRldi0+ZGV2Lm9mX25vZGUsIG1hY19ucCkgeworCQlpZiAoIW9mX2RldmljZV9pc19jb21wYXRpYmxlKG1hY19ucCwKKwkJCQkJICAgICAibWVkaWF0ZWssZXRoLW1hYyIpKQorCQkJY29udGludWU7CisKKwkJaWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG1hY19ucCkpCisJCQljb250aW51ZTsKKworCQllcnIgPSBtdGtfYWRkX21hYyhldGgsIG1hY19ucCk7CisJCWlmIChlcnIpIHsKKwkJCW9mX25vZGVfcHV0KG1hY19ucCk7CisJCQlnb3RvIGVycl9kZWluaXRfaHc7CisJCX0KKwl9CisKKwllcnIgPSBtdGtfbmFwaV9pbml0KGV0aCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfZnJlZV9kZXY7CisKKwlpZiAoTVRLX0hBU19DQVBTKGV0aC0+c29jLT5jYXBzLCBNVEtfU0hBUkVEX0lOVCkpIHsKKwkJZXJyID0gZGV2bV9yZXF1ZXN0X2lycShldGgtPmRldiwgZXRoLT5pcnFbMF0sCisJCQkJICAgICAgIG10a19oYW5kbGVfaXJxLCAwLAorCQkJCSAgICAgICBkZXZfbmFtZShldGgtPmRldiksIGV0aCk7CisJfSBlbHNlIHsKKwkJZXJyID0gZGV2bV9yZXF1ZXN0X2lycShldGgtPmRldiwgZXRoLT5pcnFbMV0sCisJCQkJICAgICAgIG10a19oYW5kbGVfaXJxX3R4LCAwLAorCQkJCSAgICAgICBkZXZfbmFtZShldGgtPmRldiksIGV0aCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9mcmVlX2RldjsKKworCQllcnIgPSBkZXZtX3JlcXVlc3RfaXJxKGV0aC0+ZGV2LCBldGgtPmlycVsyXSwKKwkJCQkgICAgICAgbXRrX2hhbmRsZV9pcnFfcngsIDAsCisJCQkJICAgICAgIGRldl9uYW1lKGV0aC0+ZGV2KSwgJmV0aC0+cnhfbmFwaVswXSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9mcmVlX2RldjsKKworCQlpZiAoTVRLX0hBU19DQVBTKGV0aC0+c29jLT5jYXBzLCBNVEtfUlNTKSkgeworCQkJZm9yIChpID0gMTsgaSA8IE1US19SWF9OQVBJX05VTTsgaSsrKSB7CisJCQkJZXJyID0gZGV2bV9yZXF1ZXN0X2lycShldGgtPmRldiwKKwkJCQkJCWV0aC0+aXJxWzIgKyBpXSwKKwkJCQkJCW10a19oYW5kbGVfaXJxX3J4LCAwLAorCQkJCQkJZGV2X25hbWUoZXRoLT5kZXYpLAorCQkJCQkJJmV0aC0+cnhfbmFwaVtpXSk7CisJCQkJaWYgKGVycikKKwkJCQkJZ290byBlcnJfZnJlZV9kZXY7CisJCQl9CisJCX0KKwl9CisJaWYgKGVycikKKwkJZ290byBlcnJfZnJlZV9kZXY7CisKKwkvKiBObyBNVDc2MjgvODggc3VwcG9ydCB5ZXQgKi8KKwlpZiAoIU1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX1NPQ19NVDc2MjgpKSB7CisJCWVyciA9IG10a19tZGlvX2luaXQoZXRoKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX2ZyZWVfZGV2OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBNVEtfTUFYX0RFVlM7IGkrKykgeworCQlpZiAoIWV0aC0+bmV0ZGV2W2ldKQorCQkJY29udGludWU7CisKKwkJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGV0aC0+bmV0ZGV2W2ldKTsKKwkJaWYgKGVycikgeworCQkJZGV2X2VycihldGgtPmRldiwgImVycm9yIGJyaW5naW5nIHVwIGRldmljZVxuIik7CisJCQlnb3RvIGVycl9kZWluaXRfbWRpbzsKKwkJfSBlbHNlCisJCQluZXRpZl9pbmZvKGV0aCwgcHJvYmUsIGV0aC0+bmV0ZGV2W2ldLAorCQkJCSAgICJtZWRpYXRlayBmcmFtZSBlbmdpbmUgYXQgMHglMDhseCwgaXJxICVkXG4iLAorCQkJCSAgIGV0aC0+bmV0ZGV2W2ldLT5iYXNlX2FkZHIsIGV0aC0+aXJxWzBdKTsKKwl9CisKKwkvKiB3ZSBydW4gMiBkZXZpY2VzIG9uIHRoZSBzYW1lIERNQSByaW5nIHNvIHdlIG5lZWQgYSBkdW1teSBkZXZpY2UKKwkgKiBmb3IgTkFQSSB0byB3b3JrCisJICovCisJaW5pdF9kdW1teV9uZXRkZXYoJmV0aC0+ZHVtbXlfZGV2KTsKKwluZXRpZl9uYXBpX2FkZCgmZXRoLT5kdW1teV9kZXYsICZldGgtPnR4X25hcGksIG10a19uYXBpX3R4LAorCQkgICAgICAgTVRLX05BUElfV0VJR0hUKTsKKwluZXRpZl9uYXBpX2FkZCgmZXRoLT5kdW1teV9kZXYsICZldGgtPnJ4X25hcGlbMF0ubmFwaSwgbXRrX25hcGlfcngsCisJCSAgICAgICBNVEtfTkFQSV9XRUlHSFQpOworCisJaWYgKE1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX1JTUykpIHsKKwkJZm9yIChpID0gMTsgaSA8IE1US19SWF9OQVBJX05VTTsgaSsrKQorCQkJbmV0aWZfbmFwaV9hZGQoJmV0aC0+ZHVtbXlfZGV2LCAmZXRoLT5yeF9uYXBpW2ldLm5hcGksCisJCQkJICAgICAgIG10a19uYXBpX3J4LCBNVEtfTkFQSV9XRUlHSFQpOworCX0KKworCW10a2V0aF9kZWJ1Z2ZzX2luaXQoZXRoKTsKKwlkZWJ1Z19wcm9jX2luaXQoZXRoKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGV0aCk7CisKKwlyZXR1cm4gMDsKKworZXJyX2RlaW5pdF9tZGlvOgorCW10a19tZGlvX2NsZWFudXAoZXRoKTsKK2Vycl9mcmVlX2RldjoKKwltdGtfZnJlZV9kZXYoZXRoKTsKK2Vycl9kZWluaXRfaHc6CisJbXRrX2h3X2RlaW5pdChldGgpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBtdGtfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG10a19ldGggKmV0aCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBtdGtfbWFjICptYWM7CisJaW50IGk7CisKKwkvKiBzdG9wIGFsbCBkZXZpY2VzIHRvIG1ha2Ugc3VyZSB0aGF0IGRtYSBpcyBwcm9wZXJseSBzaHV0IGRvd24gKi8KKwlmb3IgKGkgPSAwOyBpIDwgTVRLX01BQ19DT1VOVDsgaSsrKSB7CisJCWlmICghZXRoLT5uZXRkZXZbaV0pCisJCQljb250aW51ZTsKKwkJbXRrX3N0b3AoZXRoLT5uZXRkZXZbaV0pOworCQltYWMgPSBuZXRkZXZfcHJpdihldGgtPm5ldGRldltpXSk7CisJCXBoeWxpbmtfZGlzY29ubmVjdF9waHkobWFjLT5waHlsaW5rKTsKKwl9CisKKwltdGtfaHdfZGVpbml0KGV0aCk7CisKKwluZXRpZl9uYXBpX2RlbCgmZXRoLT50eF9uYXBpKTsKKwluZXRpZl9uYXBpX2RlbCgmZXRoLT5yeF9uYXBpWzBdLm5hcGkpOworCisJaWYgKE1US19IQVNfQ0FQUyhldGgtPnNvYy0+Y2FwcywgTVRLX1JTUykpIHsKKwkJZm9yIChpID0gMTsgaSA8IE1US19SWF9OQVBJX05VTTsgaSsrKQorCQkJbmV0aWZfbmFwaV9kZWwoJmV0aC0+cnhfbmFwaVtpXS5uYXBpKTsKKwl9CisKKwltdGtfY2xlYW51cChldGgpOworCW10a19tZGlvX2NsZWFudXAoZXRoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19zb2NfZGF0YSBtdDI3MDFfZGF0YSA9IHsKKwkuY2FwcyA9IE1UNzYyM19DQVBTIHwgTVRLX0hXTFJPLAorCS5od19mZWF0dXJlcyA9IE1US19IV19GRUFUVVJFUywKKwkucmVxdWlyZWRfY2xrcyA9IE1UNzYyM19DTEtTX0JJVE1BUCwKKwkucmVxdWlyZWRfcGN0bCA9IHRydWUsCisJLmhhc19zcmFtID0gZmFsc2UsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19zb2NfZGF0YSBtdDc2MjFfZGF0YSA9IHsKKwkuY2FwcyA9IE1UNzYyMV9DQVBTLAorCS5od19mZWF0dXJlcyA9IE1US19IV19GRUFUVVJFUywKKwkucmVxdWlyZWRfY2xrcyA9IE1UNzYyMV9DTEtTX0JJVE1BUCwKKwkucmVxdWlyZWRfcGN0bCA9IGZhbHNlLAorCS5oYXNfc3JhbSA9IGZhbHNlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfc29jX2RhdGEgbXQ3NjIyX2RhdGEgPSB7CisJLmFuYV9yZ2MzID0gMHgyMDI4LAorCS5jYXBzID0gTVQ3NjIyX0NBUFMgfCBNVEtfSFdMUk8sCisJLmh3X2ZlYXR1cmVzID0gTVRLX0hXX0ZFQVRVUkVTLAorCS5yZXF1aXJlZF9jbGtzID0gTVQ3NjIyX0NMS1NfQklUTUFQLAorCS5yZXF1aXJlZF9wY3RsID0gZmFsc2UsCisJLmhhc19zcmFtID0gZmFsc2UsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19zb2NfZGF0YSBtdDc2MjNfZGF0YSA9IHsKKwkuY2FwcyA9IE1UNzYyM19DQVBTIHwgTVRLX0hXTFJPLAorCS5od19mZWF0dXJlcyA9IE1US19IV19GRUFUVVJFUywKKwkucmVxdWlyZWRfY2xrcyA9IE1UNzYyM19DTEtTX0JJVE1BUCwKKwkucmVxdWlyZWRfcGN0bCA9IHRydWUsCisJLmhhc19zcmFtID0gZmFsc2UsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19zb2NfZGF0YSBtdDc2MjlfZGF0YSA9IHsKKwkuYW5hX3JnYzMgPSAweDEyOCwKKwkuY2FwcyA9IE1UNzYyOV9DQVBTIHwgTVRLX0hXTFJPLAorCS5od19mZWF0dXJlcyA9IE1US19IV19GRUFUVVJFUywKKwkucmVxdWlyZWRfY2xrcyA9IE1UNzYyOV9DTEtTX0JJVE1BUCwKKwkucmVxdWlyZWRfcGN0bCA9IGZhbHNlLAorCS5oYXNfc3JhbSA9IGZhbHNlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfc29jX2RhdGEgbXQ3OTg2X2RhdGEgPSB7CisJLmFuYV9yZ2MzID0gMHgxMjgsCisJLmNhcHMgPSBNVDc5ODZfQ0FQUywKKwkuaHdfZmVhdHVyZXMgPSBNVEtfSFdfRkVBVFVSRVMsCisJLnJlcXVpcmVkX2Nsa3MgPSBNVDc5ODZfQ0xLU19CSVRNQVAsCisJLnJlcXVpcmVkX3BjdGwgPSBmYWxzZSwKKwkuaGFzX3NyYW0gPSB0cnVlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfc29jX2RhdGEgbXQ3OTgxX2RhdGEgPSB7CisJLmFuYV9yZ2MzID0gMHgxMjgsCisJLmNhcHMgPSBNVDc5ODFfQ0FQUywKKwkuaHdfZmVhdHVyZXMgPSBNVEtfSFdfRkVBVFVSRVMsCisJLnJlcXVpcmVkX2Nsa3MgPSBNVDc5ODFfQ0xLU19CSVRNQVAsCisJLnJlcXVpcmVkX3BjdGwgPSBmYWxzZSwKKwkuaGFzX3NyYW0gPSB0cnVlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfc29jX2RhdGEgcnQ1MzUwX2RhdGEgPSB7CisJLmNhcHMgPSBNVDc2MjhfQ0FQUywKKwkuaHdfZmVhdHVyZXMgPSBNVEtfSFdfRkVBVFVSRVNfTVQ3NjI4LAorCS5yZXF1aXJlZF9jbGtzID0gTVQ3NjI4X0NMS1NfQklUTUFQLAorCS5yZXF1aXJlZF9wY3RsID0gZmFsc2UsCisJLmhhc19zcmFtID0gZmFsc2UsCit9OworCitjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX210a19tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQyNzAxLWV0aCIsIC5kYXRhID0gJm10MjcwMV9kYXRhfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzYyMS1ldGgiLCAuZGF0YSA9ICZtdDc2MjFfZGF0YX0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc2MjItZXRoIiwgLmRhdGEgPSAmbXQ3NjIyX2RhdGF9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NjIzLWV0aCIsIC5kYXRhID0gJm10NzYyM19kYXRhfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzYyOS1ldGgiLCAuZGF0YSA9ICZtdDc2MjlfZGF0YX0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtZXRoIiwgLmRhdGEgPSAmbXQ3OTg2X2RhdGF9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTgxLWV0aCIsIC5kYXRhID0gJm10Nzk4MV9kYXRhfSwKKwl7IC5jb21wYXRpYmxlID0gInJhbGluayxydDUzNTAtZXRoIiwgLmRhdGEgPSAmcnQ1MzUwX2RhdGF9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9mX210a19tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19kcml2ZXIgPSB7CisJLnByb2JlID0gbXRrX3Byb2JlLAorCS5yZW1vdmUgPSBtdGtfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm10a19zb2NfZXRoIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbXRrX21hdGNoLAorCX0sCit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG10a19kcml2ZXIpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJKb2huIENyaXNwaW4gPGJsb2dpY0BvcGVud3J0Lm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRXRoZXJuZXQgZHJpdmVyIGZvciBNZWRpYVRlayBTb0MiKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2V0aF9zb2MuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hMzFjNGY2Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5oCkBAIC0wLDAgKzEsMTI3MCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLworLyoKKyAqCisgKiAgIENvcHlyaWdodCAoQykgMjAwOS0yMDE2IEpvaG4gQ3Jpc3BpbiA8YmxvZ2ljQG9wZW53cnQub3JnPgorICogICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNiBGZWxpeCBGaWV0a2F1IDxuYmRAb3BlbndydC5vcmc+CisgKiAgIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IE1pY2hhZWwgTGVlIDxpZ3Z0ZWVAZ21haWwuY29tPgorICovCisKKyNpZm5kZWYgTVRLX0VUSF9ICisjZGVmaW5lIE1US19FVEhfSAorCisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9uZXQuaD4KKyNpbmNsdWRlIDxsaW51eC91NjRfc3RhdHNfc3luYy5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZmNvdW50Lmg+CisjaW5jbHVkZSA8bGludXgvcGh5bGluay5oPgorCisjZGVmaW5lIE1US19RRE1BX1BBR0VfU0laRQkyMDQ4CisjZGVmaW5lCU1US19NQVhfUlhfTEVOR1RICTE1MzYKKyNkZWZpbmUgTVRLX0RNQV9TSVpFCQkyMDQ4CisjZGVmaW5lIE1US19OQVBJX1dFSUdIVAkJMjU2CisjZGVmaW5lIE1US19NQUNfQ09VTlQJCTIKKyNkZWZpbmUgTVRLX1JYX0VUSF9ITEVOCQkoVkxBTl9FVEhfSExFTiArIFZMQU5fSExFTiArIEVUSF9GQ1NfTEVOKQorI2RlZmluZSBNVEtfUlhfSExFTgkJKE5FVF9TS0JfUEFEICsgTVRLX1JYX0VUSF9ITEVOICsgTkVUX0lQX0FMSUdOKQorI2RlZmluZSBNVEtfRE1BX0RVTU1ZX0RFU0MJMHhmZmZmZmZmZgorI2RlZmluZSBNVEtfREVGQVVMVF9NU0dfRU5BQkxFCShORVRJRl9NU0dfRFJWIHwgXAorCQkJCSBORVRJRl9NU0dfUFJPQkUgfCBcCisJCQkJIE5FVElGX01TR19MSU5LIHwgXAorCQkJCSBORVRJRl9NU0dfVElNRVIgfCBcCisJCQkJIE5FVElGX01TR19JRkRPV04gfCBcCisJCQkJIE5FVElGX01TR19JRlVQIHwgXAorCQkJCSBORVRJRl9NU0dfUlhfRVJSIHwgXAorCQkJCSBORVRJRl9NU0dfVFhfRVJSKQorI2RlZmluZSBNVEtfSFdfRkVBVFVSRVMJCShORVRJRl9GX0lQX0NTVU0gfCBcCisJCQkJIE5FVElGX0ZfUlhDU1VNIHwgXAorCQkJCSBORVRJRl9GX0hXX1ZMQU5fQ1RBR19UWCB8IFwKKwkJCQkgTkVUSUZfRl9TRyB8IE5FVElGX0ZfVFNPIHwgXAorCQkJCSBORVRJRl9GX1RTTzYgfCBcCisJCQkJIE5FVElGX0ZfSVBWNl9DU1VNKQorI2RlZmluZSBNVEtfU0VUX0ZFQVRVUkVTCShORVRJRl9GX0xSTyB8IFwKKwkJCQkgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlgpCisjZGVmaW5lIE1US19IV19GRUFUVVJFU19NVDc2MjgJKE5FVElGX0ZfU0cgfCBORVRJRl9GX1JYQ1NVTSkKKyNkZWZpbmUgTkVYVF9ERVNQX0lEWChYLCBZKQkoKChYKSArIDEpICYgKChZKSAtIDEpKQorCisjZGVmaW5lIE1US19IV19MUk9fRE1BX1NJWkUJOAorCisjZGVmaW5lCU1US19NQVhfTFJPX1JYX0xFTkdUSAkJKDQwOTYgKiAzKQorI2RlZmluZQlNVEtfTUFYX0xST19JUF9DTlQJCTIKKyNkZWZpbmUJTVRLX0hXX0xST19USU1FUl9VTklUCQkxCS8qIDIwIHVzICovCisjZGVmaW5lCU1US19IV19MUk9fUkVGUkVTSF9USU1FCQk1MDAwMAkvKiAxIHNlYy4gKi8KKyNkZWZpbmUJTVRLX0hXX0xST19BR0dfVElNRQkJMTAJLyogMjAwdXMgKi8KKyNkZWZpbmUJTVRLX0hXX0xST19BR0VfVElNRQkJNTAJLyogMW1zICovCisjZGVmaW5lCU1US19IV19MUk9fTUFYX0FHR19DTlQJCTY0CisjZGVmaW5lCU1US19IV19MUk9fQldfVEhSRQkJMzAwMAorI2RlZmluZQlNVEtfSFdfTFJPX1JFUExBQ0VfREVMVEEJMTAwMAorI2RlZmluZQlNVEtfSFdfTFJPX1NETF9SRU1BSU5fUk9PTQkxNTIyCisKKy8qIEZyYW1lIEVuZ2luZSBHbG9iYWwgUmVzZXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRLX1JTVF9HTAkJMHgwNAorI2RlZmluZSBSU1RfR0xfUFNFCQlCSVQoMCkKKworLyogRnJhbWUgRW5naW5lIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRLX0lOVF9TVEFUVVMJCTB4MDgKKyNkZWZpbmUgTVRLX0lOVF9TVEFUVVMyCQkweDI4CisjZGVmaW5lIE1US19HRE0xX0FGCQlCSVQoMjgpCisjZGVmaW5lIE1US19HRE0yX0FGCQlCSVQoMjkpCisKKy8qIFBETUEgSFcgTFJPIEFsdGVyIEZsb3cgVGltZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRLX1BETUFfTFJPX0FMVF9SRUZSRVNIX1RJTUVSCTB4MWMKKworLyogRnJhbWUgRW5naW5lIEludGVycnVwdCBHcm91cGluZyBSZWdpc3RlciAqLworI2RlZmluZSBNVEtfRkVfSU5UX0dSUAkJMHgyMAorCisvKiBGcmFtZSBFbmdpbmUgTFJPIGF1dG8tbGVhcm4gdGFibGUgaW5mbyAqLworI2RlZmluZSBNVEtfRkVfQUxUX0NGOAkJMHgzMDAKKyNkZWZpbmUgTVRLX0ZFX0FMVF9TR0xfQ0ZDCTB4MzA0CisjZGVmaW5lIE1US19GRV9BTFRfU0VRX0NGQwkweDMwOAorCisvKiBDRE1QIEluZ3Jlc3MgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBNVEtfQ0RNUV9JR19DVFJMCTB4MTQwMAorI2RlZmluZSBNVEtfQ0RNUV9TVEFHX0VOCUJJVCgwKQorCisvKiBDRE1QIEluZ3Jlc3MgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBNVEtfQ0RNUF9JR19DVFJMCTB4NDAwCisjZGVmaW5lIE1US19DRE1QX1NUQUdfRU4JQklUKDApCisKKy8qIENETVAgRXhncmVzcyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIE1US19DRE1QX0VHX0NUUkwJMHg0MDQKKworLyogR0RNIEV4Z3Jlc3MgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBNVEtfR0RNQV9GV0RfQ0ZHKHgpCSgweDUwMCArICh4ICogMHgxMDAwKSkKKyNkZWZpbmUgTVRLX0dETUFfU1BFQ0lBTF9UQUcJQklUKDI0KQorI2RlZmluZSBNVEtfR0RNQV9JQ1NfRU4JCUJJVCgyMikKKyNkZWZpbmUgTVRLX0dETUFfVENTX0VOCQlCSVQoMjEpCisjZGVmaW5lIE1US19HRE1BX1VDU19FTgkJQklUKDIwKQorI2RlZmluZSBNVEtfR0RNQV9UT19QRE1BCTB4MAorI2RlZmluZSBNVEtfR0RNQV9EUk9QX0FMTAkweDc3NzcKKworLyogVW5pY2FzdCBGaWx0ZXIgTUFDIEFkZHJlc3MgUmVnaXN0ZXIgLSBMb3cgKi8KKyNkZWZpbmUgTVRLX0dETUFfTUFDX0FEUkwoeCkJKDB4NTA4ICsgKHggKiAweDEwMDApKQorCisvKiBVbmljYXN0IEZpbHRlciBNQUMgQWRkcmVzcyBSZWdpc3RlciAtIEhpZ2ggKi8KKyNkZWZpbmUgTVRLX0dETUFfTUFDX0FEUkgoeCkJKDB4NTBDICsgKHggKiAweDEwMDApKQorCisvKiBJbnRlcm5hbCBTUkFNIG9mZnNldCAqLworI2RlZmluZSBNVEtfRVRIX1NSQU1fT0ZGU0VUCTB4NDAwMDAKKworLyogRkUgZ2xvYmFsIG1pc2MgcmVnKi8KKyNkZWZpbmUgTVRLX0ZFX0dMT19NSVNDICAgICAgICAgMHgxMjQKKworLyogUFNFIEZyZWUgUXVldWUgRmxvdyBDb250cm9sICAqLworI2RlZmluZSBQU0VfRlFGQ19DRkcxCQkweDEwMAorI2RlZmluZSBQU0VfRlFGQ19DRkcyCQkweDEwNAorI2RlZmluZSBQU0VfRFJPUF9DRkcJCTB4MTA4CisKKy8qIFBTRSBJbnB1dCBRdWV1ZSBSZXNlcnZhdGlvbiBSZWdpc3RlciovCisjZGVmaW5lIFBTRV9JUV9SRVYoeCkJCSgweDE0MCArICgoeCAtIDEpICogMHg0KSkKKworLyogUFNFIE91dHB1dCBRdWV1ZSBUaHJlc2hvbGQgUmVnaXN0ZXIqLworI2RlZmluZSBQU0VfT1FfVEgoeCkJCSgweDE2MCArICgoeCAtIDEpICogMHg0KSkKKworLyogR0RNIGFuZCBDRE0gVGhyZXNob2xkICovCisjZGVmaW5lIE1US19HRE0yX1RIUkVTCQkweDE1MzAKKyNkZWZpbmUgTVRLX0NETVcwX1RIUkVTCQkweDE2NGMKKyNkZWZpbmUgTVRLX0NETVcxX1RIUkVTCQkweDE2NTAKKyNkZWZpbmUgTVRLX0NETUUwX1RIUkVTCQkweDE2NTQKKyNkZWZpbmUgTVRLX0NETUUxX1RIUkVTCQkweDE2NTgKKyNkZWZpbmUgTVRLX0NETU1fVEhSRVMJCTB4MTY1YworCisjZGVmaW5lIE1US19QRE1BX1YyCQlCSVQoNCkKKworI2lmIGRlZmluZWQoQ09ORklHX01FRElBVEVLX05FVFNZU19WMikKKyNkZWZpbmUgUERNQV9CQVNFICAgICAgICAgICAgICAgMHg2MDAwCisjZGVmaW5lIFFETUFfQkFTRSAgICAgICAgICAgICAgIDB4NDQwMAorI2Vsc2UKKyNkZWZpbmUgUERNQV9CQVNFICAgICAgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFFETUFfQkFTRSAgICAgICAgICAgICAgIDB4MTgwMAorI2VuZGlmCisvKiBQRE1BIFJYIEJhc2UgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSBNVEtfUFJYX0JBU0VfUFRSMAkoUERNQV9CQVNFICsgMHgxMDApCisjZGVmaW5lIE1US19QUlhfQkFTRV9QVFJfQ0ZHKHgpCShNVEtfUFJYX0JBU0VfUFRSMCArICh4ICogMHgxMCkpCisKKy8qIFBETUEgUlggTWF4aW11bSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSBNVEtfUFJYX01BWF9DTlQwCShNVEtfUFJYX0JBU0VfUFRSMCArIDB4MDQpCisjZGVmaW5lIE1US19QUlhfTUFYX0NOVF9DRkcoeCkJKE1US19QUlhfTUFYX0NOVDAgKyAoeCAqIDB4MTApKQorCisvKiBQRE1BIFJYIENQVSBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lIE1US19QUlhfQ1JYX0lEWDAJKE1US19QUlhfQkFTRV9QVFIwICsgMHgwOCkKKyNkZWZpbmUgTVRLX1BSWF9DUlhfSURYX0NGRyh4KQkoTVRLX1BSWF9DUlhfSURYMCArICh4ICogMHgxMCkpCisKKy8qIFBETUEgUlggRE1BIFBvaW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRLX1BSWF9EUlhfSURYMAkoTVRLX1BSWF9CQVNFX1BUUjAgKyAweDBjKQorI2RlZmluZSBNVEtfUFJYX0RSWF9JRFhfQ0ZHKHgpCShNVEtfUFJYX0RSWF9JRFgwICsgKHggKiAweDEwKSkKKworLyogUERNQSBIVyBMUk8gQ29udHJvbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgQklUUyhtLCBuKQkJCSh+KEJJVChtKSAtIDEpICYgKChCSVQobikgLSAxKSB8IEJJVChuKSkpCisjaWYgZGVmaW5lZChDT05GSUdfTUVESUFURUtfTkVUU1lTX1YyKQorI2RlZmluZSBNVEtfTUFYX1JYX1JJTkdfTlVNCQkoOCkKKyNkZWZpbmUgTVRLX0hXX0xST19SSU5HX05VTQkJKDQpCisjZGVmaW5lIElTX0hXX0xST19SSU5HKHJpbmdfbm8pCQkoKChyaW5nX25vKSA+IDMpICYmICgocmluZ19ubykgPCA4KSkKKyNkZWZpbmUgTVRLX1BETUFfTFJPX0NUUkxfRFcwCQkoUERNQV9CQVNFICsgMHg0MDgpCisjZGVmaW5lIE1US19MUk9fQUxUX1NDT1JFX0RFTFRBCQkoUERNQV9CQVNFICsgMHg0MWMpCisjZGVmaW5lIE1US19MUk9fUlhfUklORzBfQ1RSTF9EVzEJKFBETUFfQkFTRSArIDB4NDM4KQorI2RlZmluZSBNVEtfTFJPX1JYX1JJTkcwX0NUUkxfRFcyCShQRE1BX0JBU0UgKyAweDQzYykKKyNkZWZpbmUgTVRLX0xST19SWF9SSU5HMF9DVFJMX0RXMwkoUERNQV9CQVNFICsgMHg0NDApCisjZGVmaW5lIE1US19MM19DS1NfVVBEX0VOCQlCSVQoMTkpCisjZGVmaW5lIE1US19MUk9fQ1JTTl9CTlcJCUJJVCgyMikKKyNkZWZpbmUgTVRLX0xST19SSU5HX1JFTElOR1VJU0hfUkVRCSgweGYgPDwgMjQpCisjZGVmaW5lIE1US19MUk9fUklOR19SRUxJTkdVSVNIX0RPTkUJKDB4ZiA8PCAyOCkKKyNlbHNlCisjZGVmaW5lIE1US19NQVhfUlhfUklOR19OVU0JCSg0KQorI2RlZmluZSBNVEtfSFdfTFJPX1JJTkdfTlVNCQkoMykKKyNkZWZpbmUgSVNfSFdfTFJPX1JJTkcocmluZ19ubykJCSgoKHJpbmdfbm8pID4gMCkgJiYgKChyaW5nX25vKSA8IDQpKQorI2RlZmluZSBNVEtfUERNQV9MUk9fQ1RSTF9EVzAJCShQRE1BX0JBU0UgKyAweDE4MCkKKyNkZWZpbmUgTVRLX0xST19BTFRfU0NPUkVfREVMVEEJCShQRE1BX0JBU0UgKyAweDI0YykKKyNkZWZpbmUgTVRLX0xST19SWF9SSU5HMF9DVFJMX0RXMQkoUERNQV9CQVNFICsgMHgzMjgpCisjZGVmaW5lIE1US19MUk9fUlhfUklORzBfQ1RSTF9EVzIJKFBETUFfQkFTRSArIDB4MzJjKQorI2RlZmluZSBNVEtfTFJPX1JYX1JJTkcwX0NUUkxfRFczCShQRE1BX0JBU0UgKyAweDMzMCkKKyNkZWZpbmUgTVRLX0xST19DUlNOX0JOVwkJQklUKDYpCisjZGVmaW5lIE1US19MM19DS1NfVVBEX0VOCQlCSVQoNykKKyNkZWZpbmUgTVRLX0xST19SSU5HX1JFTElOR1VJU0hfUkVRCSgweDcgPDwgMjYpCisjZGVmaW5lIE1US19MUk9fUklOR19SRUxJTkdVSVNIX0RPTkUJKDB4NyA8PCAyOSkKKyNlbmRpZgorCisjZGVmaW5lIElTX05PUk1BTF9SSU5HKHJpbmdfbm8pCQkoKHJpbmdfbm8pID09IDApCisjZGVmaW5lIE1US19MUk9fRU4JCQlCSVQoMCkKKyNkZWZpbmUgTVRLX05PTl9MUk9fTVVMVElfRU4gICAJCUJJVCgyKQorI2RlZmluZSBNVEtfTFJPX0RMWV9JTlRfRU4JCUJJVCg1KQorI2RlZmluZSBNVEtfTFJPX0FMVF9QS1RfQ05UX01PREUJQklUKDIxKQorI2RlZmluZSBNVEtfTFJPX0w0X0NUUkxfUFNIX0VOCQlCSVQoMjMpCisjZGVmaW5lIE1US19DVFJMX0RXMF9TRExfT0ZGU0VUCQkoMykKKyNkZWZpbmUgTVRLX0NUUkxfRFcwX1NETF9NQVNLCQlCSVRTKDMsIDE4KQorCisjZGVmaW5lIE1US19QRE1BX0xST19DVFJMX0RXMQkoTVRLX1BETUFfTFJPX0NUUkxfRFcwICsgMHgwNCkKKyNkZWZpbmUgTVRLX1BETUFfTFJPX0NUUkxfRFcyCShNVEtfUERNQV9MUk9fQ1RSTF9EVzAgKyAweDA4KQorI2RlZmluZSBNVEtfUERNQV9MUk9fQ1RSTF9EVzMJKE1US19QRE1BX0xST19DVFJMX0RXMCArIDB4MGMpCisjZGVmaW5lIE1US19BRE1BX01PREUJCUJJVCgxNSkKKyNkZWZpbmUgTVRLX0xST19NSU5fUlhEX1NETAkoTVRLX0hXX0xST19TRExfUkVNQUlOX1JPT00gPDwgMTYpCisKKy8qIFBETUEgUlNTIENvbnRyb2wgUmVnaXN0ZXJzICovCisjaWYgZGVmaW5lZChDT05GSUdfTUVESUFURUtfTkVUU1lTX1YyKQorI2RlZmluZSBNVEtfUERNQV9SU1NfR0xPX0NGRwkJKFBETUFfQkFTRSArIDB4ODAwKQorI2RlZmluZSBNVEtfUlhfTkFQSV9OVU0JCQkoMikKKyNkZWZpbmUgTVRLX01BWF9JUlFfTlVNCQkJKDQpCisjZWxzZQorI2RlZmluZSBNVEtfUERNQV9SU1NfR0xPX0NGRwkJMHgzMDAwCisjZGVmaW5lIE1US19SWF9OQVBJX05VTQkJCSgxKQorI2RlZmluZSBNVEtfTUFYX0lSUV9OVU0JCQkoMykKKyNlbmRpZgorI2RlZmluZSBNVEtfUlNTX1JJTkcxCQkJKDEpCisjZGVmaW5lIE1US19SU1NfRU4JCQlCSVQoMCkKKyNkZWZpbmUgTVRLX1JTU19DRkdfUkVRCQkJQklUKDIpCisjZGVmaW5lIE1US19SU1NfSVBWNl9TVEFUSUNfSEFTSAkoMHg3IDw8IDgpCisjZGVmaW5lIE1US19SU1NfSVBWNF9TVEFUSUNfSEFTSAkoMHg3IDw8IDEyKQorI2RlZmluZSBNVEtfUlNTX0lORFJfVEFCTEVfRFcwCQkoTVRLX1BETUFfUlNTX0dMT19DRkcgKyAweDUwKQorI2RlZmluZSBNVEtfUlNTX0lORFJfVEFCTEVfRFcxCQkoTVRLX1BETUFfUlNTX0dMT19DRkcgKyAweDU0KQorI2RlZmluZSBNVEtfUlNTX0lORFJfVEFCTEVfRFcyCQkoTVRLX1BETUFfUlNTX0dMT19DRkcgKyAweDU4KQorI2RlZmluZSBNVEtfUlNTX0lORFJfVEFCTEVfRFczCQkoTVRLX1BETUFfUlNTX0dMT19DRkcgKyAweDVDKQorI2RlZmluZSBNVEtfUlNTX0lORFJfVEFCTEVfRFc0CQkoTVRLX1BETUFfUlNTX0dMT19DRkcgKyAweDYwKQorI2RlZmluZSBNVEtfUlNTX0lORFJfVEFCTEVfRFc1CQkoTVRLX1BETUFfUlNTX0dMT19DRkcgKyAweDY0KQorI2RlZmluZSBNVEtfUlNTX0lORFJfVEFCTEVfRFc2CQkoTVRLX1BETUFfUlNTX0dMT19DRkcgKyAweDY4KQorI2RlZmluZSBNVEtfUlNTX0lORFJfVEFCTEVfRFc3CQkoTVRLX1BETUFfUlNTX0dMT19DRkcgKyAweDZDKQorI2RlZmluZSBNVEtfUlNTX0lORFJfVEFCTEVfU0laRTQJMHg0NDQ0NDQ0NAorCisvKiBQRE1BIEdsb2JhbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIE1US19QRE1BX0dMT19DRkcJKFBETUFfQkFTRSArIDB4MjA0KQorI2RlZmluZSBNVEtfUlhfRE1BX0xST19FTglCSVQoOCkKKyNkZWZpbmUgTVRLX01VTFRJX0VOCQlCSVQoMTApCisjZGVmaW5lIE1US19QRE1BX1NJWkVfOERXT1JEUwkoMSA8PCA0KQorCisvKiBQRE1BIEdsb2JhbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIE1US19QRE1BX1JYX0NGRwkJKFBETUFfQkFTRSArIDB4MjEwKQorI2RlZmluZSBNVEtfUERNQV9MUk9fU0RMCSgweDMwMDApCisjZGVmaW5lIE1US19SWF9DRkdfU0RMX09GRlNFVAkoMTYpCisKKy8qIFBETUEgUmVzZXQgSW5kZXggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRLX1BETUFfUlNUX0lEWAkoUERNQV9CQVNFICsgMHgyMDgpCisjZGVmaW5lIE1US19QU1RfRFJYX0lEWDAJQklUKDE2KQorI2RlZmluZSBNVEtfUFNUX0RSWF9JRFhfQ0ZHKHgpCShNVEtfUFNUX0RSWF9JRFgwIDw8ICh4KSkKKworLyogUERNQSBEZWxheSBJbnRlcnJ1cHQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRLX1BETUFfREVMQVlfSU5UCQkoUERNQV9CQVNFICsgMHgyMGMpCisjZGVmaW5lIE1US19QRE1BX0RFTEFZX1JYX0VOCQlCSVQoMTUpCisjZGVmaW5lIE1US19QRE1BX0RFTEFZX1JYX1BJTlQJCTQKKyNkZWZpbmUgTVRLX1BETUFfREVMQVlfUlhfUElOVF9TSElGVAk4CisjZGVmaW5lIE1US19QRE1BX0RFTEFZX1JYX1BUSU1FCQk0CisjZGVmaW5lIE1US19QRE1BX0RFTEFZX1JYX0RFTEFZCQlcCisJKE1US19QRE1BX0RFTEFZX1JYX0VOIHwgTVRLX1BETUFfREVMQVlfUlhfUFRJTUUgfCBcCisJKE1US19QRE1BX0RFTEFZX1JYX1BJTlQgPDwgTVRLX1BETUFfREVMQVlfUlhfUElOVF9TSElGVCkpCisKKy8qIFBETUEgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBNVEtfUERNQV9JTlRfU1RBVFVTCShQRE1BX0JBU0UgKyAweDIyMCkKKworLyogUERNQSBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLworI2RlZmluZSBNVEtfUERNQV9JTlRfTUFTSwkoUERNQV9CQVNFICsgMHgyMjgpCisKKy8qIFBETUEgSW50ZXJydXB0IGdyb3VwaW5nIHJlZ2lzdGVycyAqLworI2RlZmluZSBNVEtfUERNQV9JTlRfR1JQMQkoUERNQV9CQVNFICsgMHgyNTApCisjZGVmaW5lIE1US19QRE1BX0lOVF9HUlAyCShQRE1BX0JBU0UgKyAweDI1NCkKKyNpZiBkZWZpbmVkKENPTkZJR19NRURJQVRFS19ORVRTWVNfVjIpCisjZGVmaW5lIE1US19QRE1BX0lOVF9HUlAzCShQRE1BX0JBU0UgKyAweDI1OCkKKyNlbHNlCisjZGVmaW5lIE1US19QRE1BX0lOVF9HUlAzCShQRE1BX0JBU0UgKyAweDIyYykKKyNlbmRpZgorI2RlZmluZSBNVEtfTFJPX1JYMV9ETFlfSU5UCTB4YTcwCisjZGVmaW5lIE1US19NQVhfREVMQVlfSU5UCTB4OGYwZjhmMGYKKworLyogUERNQSBIVyBMUk8gSVAgU2V0dGluZyBSZWdpc3RlcnMgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19NRURJQVRFS19ORVRTWVNfVjIpCisjZGVmaW5lIE1US19MUk9fUlhfUklORzBfRElQX0RXMAkoUERNQV9CQVNFICsgMHg0MTQpCisjZWxzZQorI2RlZmluZSBNVEtfTFJPX1JYX1JJTkcwX0RJUF9EVzAJKFBETUFfQkFTRSArIDB4MzA0KQorI2VuZGlmCisjZGVmaW5lIE1US19MUk9fRElQX0RXMF9DRkcoeCkJCShNVEtfTFJPX1JYX1JJTkcwX0RJUF9EVzAgKyAoeCAqIDB4NDApKQorI2RlZmluZSBNVEtfUklOR19NWUlQX1ZMRAkJQklUKDkpCisKKy8qIFBETUEgSFcgTFJPIEFMVCBEZWJ1ZyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgTVRLX0xST19BTFRfREJHCQkJKFBETUFfQkFTRSArIDB4NDQwKQorI2RlZmluZSBNVEtfTFJPX0FMVF9JTkRFWF9PRkZTRVQJKDgpCisKKy8qIFBETUEgSFcgTFJPIEFMVCBEYXRhIFJlZ2lzdGVycyAqLworI2RlZmluZSBNVEtfTFJPX0FMVF9EQkdfREFUQQkJKFBETUFfQkFTRSArIDB4NDQ0KQorCisvKiBQRE1BIEhXIExSTyBSaW5nIENvbnRyb2wgUmVnaXN0ZXJzICovCisjZGVmaW5lIE1US19MUk9fQ1RSTF9EVzFfQ0ZHKHgpCQkoTVRLX0xST19SWF9SSU5HMF9DVFJMX0RXMSArICh4ICogMHg0MCkpCisjZGVmaW5lIE1US19MUk9fQ1RSTF9EVzJfQ0ZHKHgpCQkoTVRLX0xST19SWF9SSU5HMF9DVFJMX0RXMiArICh4ICogMHg0MCkpCisjZGVmaW5lIE1US19MUk9fQ1RSTF9EVzNfQ0ZHKHgpCQkoTVRLX0xST19SWF9SSU5HMF9DVFJMX0RXMyArICh4ICogMHg0MCkpCisjZGVmaW5lIE1US19SSU5HX0FHRV9USU1FX0wJCSgoTVRLX0hXX0xST19BR0VfVElNRSAmIDB4M2ZmKSA8PCAyMikKKyNkZWZpbmUgTVRLX1JJTkdfQUdFX1RJTUVfSAkJKChNVEtfSFdfTFJPX0FHRV9USU1FID4+IDEwKSAmIDB4M2YpCisjZGVmaW5lIE1US19SSU5HX1BTRV9NT0RFICAgICAgICAJKDEgPDwgNikKKyNkZWZpbmUgTVRLX1JJTkdfQVVUT19MRVJBTl9NT0RFCSgzIDw8IDYpCisjZGVmaW5lIE1US19SSU5HX1ZMRAkJCUJJVCg4KQorI2RlZmluZSBNVEtfUklOR19NQVhfQUdHX1RJTUUJCSgoTVRLX0hXX0xST19BR0dfVElNRSAmIDB4ZmZmZikgPDwgMTApCisjZGVmaW5lIE1US19SSU5HX01BWF9BR0dfQ05UX0wJCSgoTVRLX0hXX0xST19NQVhfQUdHX0NOVCAmIDB4M2YpIDw8IDI2KQorI2RlZmluZSBNVEtfUklOR19NQVhfQUdHX0NOVF9ICQkoKE1US19IV19MUk9fTUFYX0FHR19DTlQgPj4gNikgJiAweDMpCisKKy8qIExST19SWF9SSU5HX0NUUkxfRFcgbWFza3MgKi8KKyNkZWZpbmUgTVRLX0xST19SSU5HX0FHR19USU1FX01BU0sJQklUUygxMCwgMjUpCisjZGVmaW5lIE1US19MUk9fUklOR19BR0dfQ05UX0xfTUFTSwlCSVRTKDI2LCAzMSkKKyNkZWZpbmUgTVRLX0xST19SSU5HX0FHR19DTlRfSF9NQVNLCUJJVFMoMCwgMSkKKyNkZWZpbmUgTVRLX0xST19SSU5HX0FHRV9USU1FX0xfTUFTSwlCSVRTKDIyLCAzMSkKKyNkZWZpbmUgTVRLX0xST19SSU5HX0FHRV9USU1FX0hfTUFTSwlCSVRTKDAsIDUpCisKKy8qIExST19SWF9SSU5HX0NUUkxfRFcwIG9mZnNldHMgKi8KKyNkZWZpbmUgTVRLX1JYX0lQVjZfRk9SQ0VfT0ZGU0VUCSgwKQorI2RlZmluZSBNVEtfUlhfSVBWNF9GT1JDRV9PRkZTRVQJKDEpCisKKy8qIExST19SWF9SSU5HX0NUUkxfRFcxIG9mZnNldHMgICovCisjZGVmaW5lIE1US19MUk9fUklOR19BR0VfVElNRV9MX09GRlNFVAkoMjIpCisKKy8qIExST19SWF9SSU5HX0NUUkxfRFcyIG9mZnNldHMgICovCisjZGVmaW5lIE1US19MUk9fUklOR19BR0VfVElNRV9IX09GRlNFVAkoMCkKKyNkZWZpbmUgTVRLX1JYX01PREVfT0ZGU0VUCQkoNikKKyNkZWZpbmUgTVRLX1JYX1BPUlRfVkFMSURfT0ZGU0VUCSg4KQorI2RlZmluZSBNVEtfUlhfTVlJUF9WQUxJRF9PRkZTRVQJKDkpCisjZGVmaW5lIE1US19MUk9fUklOR19BR0dfVElNRV9PRkZTRVQJKDEwKQorI2RlZmluZSBNVEtfTFJPX1JJTkdfQUdHX0NOVF9MX09GRlNFVAkoMjYpCisKKy8qIExST19SWF9SSU5HX0NUUkxfRFczIG9mZnNldHMgICovCisjZGVmaW5lIE1US19MUk9fUklOR19BR0dfQ05UX0hfT0ZGU0VUCSgwKQorCisvKiBMUk9fUlhfUklOR19TVFBfRFRQX0RXIG9mZnNldHMgKi8KKyNkZWZpbmUgTVRLX1JYX1RDUF9ERVNUX1BPUlRfT0ZGU0VUCSgwKQorI2RlZmluZSBNVEtfUlhfVENQX1NSQ19QT1JUX09GRlNFVAkoMTYpCisKKy8qIFFETUEgVFggUXVldWUgQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgTVRLX1FUWF9DRkcoeCkJCShRRE1BX0JBU0UgKyAoeCAqIDB4MTApKQorI2RlZmluZSBRRE1BX1JFU19USFJFUwkJNAorCisvKiBRRE1BIFRYIFF1ZXVlIFNjaGVkdWxlciBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgTVRLX1FUWF9TQ0goeCkJCShRRE1BX0JBU0UgKyA0ICsgKHggKiAweDEwKSkKKworLyogUURNQSBSWCBCYXNlIFBvaW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRLX1FSWF9CQVNFX1BUUjAJKFFETUFfQkFTRSArIDB4MTAwKQorI2RlZmluZSBNVEtfUVJYX0JBU0VfUFRSX0NGRyh4KQkoTVRLX1FSWF9CQVNFX1BUUjAgKyAoKHgpICogMHgxMCkpCisKKy8qIFFETUEgUlggTWF4aW11bSBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSBNVEtfUVJYX01BWF9DTlQwCShRRE1BX0JBU0UgKyAweDEwNCkKKyNkZWZpbmUgTVRLX1FSWF9NQVhfQ05UX0NGRyh4KQkoTVRLX1FSWF9NQVhfQ05UMCArICgoeCkgKiAweDEwKSkKKworLyogUURNQSBSWCBDUFUgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSBNVEtfUVJYX0NSWF9JRFgwCShRRE1BX0JBU0UgKyAweDEwOCkKKyNkZWZpbmUgTVRLX1FSWF9DUlhfSURYX0NGRyh4KQkoTVRLX1FSWF9DUlhfSURYMCArICgoeCkgKiAweDEwKSkKKworLyogUURNQSBSWCBETUEgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSBNVEtfUVJYX0RSWF9JRFgwCShRRE1BX0JBU0UgKyAweDEwYykKKworLyogUURNQSBHbG9iYWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBNVEtfUURNQV9HTE9fQ0ZHCShRRE1BX0JBU0UgKyAweDIwNCkKKyNkZWZpbmUgTVRLX1JYXzJCX09GRlNFVAlCSVQoMzEpCisjZGVmaW5lIE1US19SWF9CVF8zMkRXT1JEUwkoMyA8PCAxMSkKKyNkZWZpbmUgTVRLX05EUF9DT19QUk8JCUJJVCgxMCkKKyNkZWZpbmUgTVRLX1RYX1dCX0RET05FCQlCSVQoNikKKyNkZWZpbmUgTVRLX0RNQV9TSVpFXzE2RFdPUkRTCSgyIDw8IDQpCisjZGVmaW5lIE1US19ETUFfU0laRV8zMkRXT1JEUwkoMyA8PCA0KQorI2RlZmluZSBNVEtfUlhfRE1BX0JVU1kJCUJJVCgzKQorI2RlZmluZSBNVEtfVFhfRE1BX0JVU1kJCUJJVCgxKQorI2RlZmluZSBNVEtfUlhfRE1BX0VOCQlCSVQoMikKKyNkZWZpbmUgTVRLX1RYX0RNQV9FTgkJQklUKDApCisjZGVmaW5lIE1US19ETUFfQlVTWV9USU1FT1VUCUhaCisKKy8qIFFETUEgVjIgR2xvYmFsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRLX0NIS19ERE9ORV9FTglCSVQoMjgpCisjZGVmaW5lIE1US19ETUFEX1dSX1dET05FCUJJVCgyNikKKyNkZWZpbmUgTVRLX1dDT01QX0VOCQlCSVQoMjQpCisjZGVmaW5lIE1US19SRVNWX0JVRgkJKDB4NDAgPDwgMTYpCisjZGVmaW5lIE1US19NVVRMSV9DTlQJCSgweDQgPDwgMTIpCisKKy8qIFFETUEgUmVzZXQgSW5kZXggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRLX1FETUFfUlNUX0lEWAkoUURNQV9CQVNFICsgMHgyMDgpCisKKy8qIFFETUEgRGVsYXkgSW50ZXJydXB0IFJlZ2lzdGVyICovCisjZGVmaW5lIE1US19RRE1BX0RFTEFZX0lOVAkoUURNQV9CQVNFICsgMHgyMGMpCisKKy8qIFFETUEgRmxvdyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIE1US19RRE1BX0ZDX1RIUkVTCShRRE1BX0JBU0UgKyAweDIxMCkKKyNkZWZpbmUgRkNfVEhSRVNfRFJPUF9NT0RFCUJJVCgyMCkKKyNkZWZpbmUgRkNfVEhSRVNfRFJPUF9FTgkoNyA8PCAxNikKKyNkZWZpbmUgRkNfVEhSRVNfTUlOCQkweDQ0NDQKKworLyogUURNQSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIE1US19RRE1BX0lOVF9TVEFUVVMJKFFETUFfQkFTRSArIDB4MjE4KQorI2lmIGRlZmluZWQoQ09ORklHX01FRElBVEVLX05FVFNZU19WMikKKyNkZWZpbmUgTVRLX1JYX0RPTkVfSU5UKHJpbmdfbm8pCQlcCisJKChyaW5nX25vKT8gQklUKDE2ICsgKHJpbmdfbm8pKSA6IEJJVCgxNCkpCisjZWxzZQorI2RlZmluZSBNVEtfUlhfRE9ORV9JTlQocmluZ19ubykJCVwKKwkoKHJpbmdfbm8pPyBCSVQoMjQgKyAocmluZ19ubykpIDogQklUKDMwKSkKKyNlbmRpZgorI2RlZmluZSBNVEtfUlhfRE9ORV9JTlQzCUJJVCgxOSkKKyNkZWZpbmUgTVRLX1JYX0RPTkVfSU5UMglCSVQoMTgpCisjZGVmaW5lIE1US19SWF9ET05FX0lOVDEJQklUKDE3KQorI2RlZmluZSBNVEtfUlhfRE9ORV9JTlQwCUJJVCgxNikKKyNkZWZpbmUgTVRLX1RYX0RPTkVfSU5UMwlCSVQoMykKKyNkZWZpbmUgTVRLX1RYX0RPTkVfSU5UMglCSVQoMikKKyNkZWZpbmUgTVRLX1RYX0RPTkVfSU5UMQlCSVQoMSkKKyNkZWZpbmUgTVRLX1RYX0RPTkVfSU5UMAlCSVQoMCkKKyNkZWZpbmUgTVRLX1RYX0RPTkVfRExZICAgICAgICAgQklUKDI4KQorI2RlZmluZSBNVEtfVFhfRE9ORV9JTlQgICAgICAgICBNVEtfVFhfRE9ORV9ETFkKKworLyogUURNQSBJbnRlcnJ1cHQgZ3JvdXBpbmcgcmVnaXN0ZXJzICovCisjZGVmaW5lIE1US19RRE1BX0lOVF9HUlAxCShRRE1BX0JBU0UgKyAweDIyMCkKKyNkZWZpbmUgTVRLX1FETUFfSU5UX0dSUDIJKFFETUFfQkFTRSArIDB4MjI0KQorI2RlZmluZSBNVEtfUkxTX0RPTkVfSU5UCUJJVCgwKQorCisvKiBRRE1BIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRLX1FETUFfSU5UX01BU0sJKFFETUFfQkFTRSArIDB4MjFjKQorCisvKiBRRE1BIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovCisjZGVmaW5lIE1US19RRE1BX0hSRUQyCQkoUURNQV9CQVNFICsgMHgyNDQpCisKKy8qIFFETUEgVFggRm9yd2FyZCBDUFUgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSBNVEtfUVRYX0NUWF9QVFIJCShRRE1BX0JBU0UgKzB4MzAwKQorCisvKiBRRE1BIFRYIEZvcndhcmQgRE1BIFBvaW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRLX1FUWF9EVFhfUFRSCQkoUURNQV9CQVNFICsweDMwNCkKKworLyogUURNQSBUWCBSZWxlYXNlIENQVSBQb2ludGVyIFJlZ2lzdGVyICovCisjZGVmaW5lIE1US19RVFhfQ1JYX1BUUgkJKFFETUFfQkFTRSArMHgzMTApCisKKy8qIFFETUEgVFggUmVsZWFzZSBETUEgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSBNVEtfUVRYX0RSWF9QVFIJCShRRE1BX0JBU0UgKzB4MzE0KQorCisvKiBRRE1BIEZRIEhlYWQgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSBNVEtfUURNQV9GUV9IRUFECShRRE1BX0JBU0UgKzB4MzIwKQorCisvKiBRRE1BIEZRIEhlYWQgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSBNVEtfUURNQV9GUV9UQUlMCShRRE1BX0JBU0UgKzB4MzI0KQorCisvKiBRRE1BIEZRIEZyZWUgUGFnZSBDb3VudGVyIFJlZ2lzdGVyICovCisjZGVmaW5lIE1US19RRE1BX0ZRX0NOVAkJKFFETUFfQkFTRSArMHgzMjgpCisKKy8qIFFETUEgRlEgRnJlZSBQYWdlIEJ1ZmZlciBMZW5ndGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVRLX1FETUFfRlFfQkxFTgkoUURNQV9CQVNFICsweDMyYykKKworLyogR01BMSBSZWNlaXZlZCBHb29kIEJ5dGUgQ291bnQgUmVnaXN0ZXIgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19NRURJQVRFS19ORVRTWVNfVjIpCisjZGVmaW5lIE1US19HRE0xX1RYX0dCQ05UICAgICAgIDB4MUMwMAorI2Vsc2UKKyNkZWZpbmUgTVRLX0dETTFfVFhfR0JDTlQJMHgyNDAwCisjZW5kaWYKKyNkZWZpbmUgTVRLX1NUQVRfT0ZGU0VUCQkweDQwCisKKy8qIFFETUEgVFggTlVNICovCisjZGVmaW5lIE1US19RRE1BX1RYX05VTQkJMTYKKyNkZWZpbmUgTVRLX1FETUFfVFhfTUFTSwkoKE1US19RRE1BX1RYX05VTSkgLSAxKQorI2RlZmluZSBRSURfTE9XX0JJVFMoeCkgICAgICAgICAoKHgpICYgMHhmKQorI2RlZmluZSBRSURfSElHSF9CSVRTKHgpICAgICAgICAoKCgoeCkgPj4gNCkgJiAweDMpIDw8IDIwKQorI2RlZmluZSBRSURfQklUU19WMih4KQkJKCgoeCkgJiAweDNmKSA8PCAxNikKKworI2RlZmluZSBNVEtfUURNQV9HTUFDMl9RSUQJOAorCisvKiBRRE1BIFYyIGRlc2NyaXB0b3IgdHhkNiAqLworI2RlZmluZSBUWF9ETUFfSU5TX1ZMQU5fVjIgICAgICAgICBCSVQoMTYpCisKKy8qIFFETUEgVjIgZGVzY3JpcHRvciB0eGQ1ICovCisjZGVmaW5lIFRYX0RNQV9DSEtTVU1fVjIgICAgICAgICAgICgweDcgPDwgMjgpCisjZGVmaW5lIFRYX0RNQV9UU09fVjIgICAgICAgICAgICAgIEJJVCgzMSkKKworLyogUURNQSBWMiBkZXNjcmlwdG9yIHR4ZDQgKi8KKyNkZWZpbmUgVFhfRE1BX0ZQT1JUX1NISUZUX1YyICAgICAgOAorI2RlZmluZSBUWF9ETUFfRlBPUlRfTUFTS19WMiAgICAgICAweGYKKyNkZWZpbmUgVFhfRE1BX1NXQ19WMiAgICAgICAgICAgICAgQklUKDMwKQorCisjaWYgZGVmaW5lZChDT05GSUdfTUVESUFURUtfTkVUU1lTX1YyKQorI2RlZmluZSBNVEtfVFhfRE1BX0JVRl9MRU4gICAgICAweGZmZmYKKyNkZWZpbmUgTVRLX1RYX0RNQV9CVUZfU0hJRlQgICAgOAorI2Vsc2UKKyNkZWZpbmUgTVRLX1RYX0RNQV9CVUZfTEVOICAgICAgMHgzZmZmCisjZGVmaW5lIE1US19UWF9ETUFfQlVGX1NISUZUICAgIDE2CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX01FRElBVEVLX05FVFNZU19WMikKKyNkZWZpbmUgTVRLX1JYX0RNQV9CVUZfTEVOICAgICAgMHhmZmZmCisjZGVmaW5lIE1US19SWF9ETUFfQlVGX1NISUZUICAgIDgKKyNkZWZpbmUgUlhfRE1BX1NQT1JUX1NISUZUICAgICAgMjYKKyNkZWZpbmUgUlhfRE1BX1NQT1JUX01BU0sgICAgICAgMHhmCisjZWxzZQorI2RlZmluZSBNVEtfUlhfRE1BX0JVRl9MRU4gICAgICAweDNmZmYKKyNkZWZpbmUgTVRLX1JYX0RNQV9CVUZfU0hJRlQgICAgMTYKKyNkZWZpbmUgUlhfRE1BX1NQT1JUX1NISUZUICAgICAgMTkKKyNkZWZpbmUgUlhfRE1BX1NQT1JUX01BU0sgICAgICAgMHg3CisjZW5kaWYKKworLyogUURNQSBkZXNjcmlwdG9yIHR4ZDQgKi8KKyNkZWZpbmUgVFhfRE1BX0NIS1NVTQkJKDB4NyA8PCAyOSkKKyNkZWZpbmUgVFhfRE1BX1RTTwkJQklUKDI4KQorI2RlZmluZSBUWF9ETUFfRlBPUlRfU0hJRlQJMjUKKyNkZWZpbmUgVFhfRE1BX0ZQT1JUX01BU0sJMHg3CisjZGVmaW5lIFRYX0RNQV9JTlNfVkxBTgkJQklUKDE2KQorCisvKiBRRE1BIGRlc2NyaXB0b3IgdHhkMyAqLworI2RlZmluZSBUWF9ETUFfT1dORVJfQ1BVCUJJVCgzMSkKKyNkZWZpbmUgVFhfRE1BX0xTMAkJQklUKDMwKQorI2RlZmluZSBUWF9ETUFfUExFTjAoX3gpCSgoKF94KSAmIE1US19UWF9ETUFfQlVGX0xFTikgPDwgTVRLX1RYX0RNQV9CVUZfU0hJRlQpCisjZGVmaW5lIFRYX0RNQV9QTEVOMShfeCkJKChfeCkgJiBNVEtfVFhfRE1BX0JVRl9MRU4pCisjZGVmaW5lIFRYX0RNQV9TV0MJCUJJVCgxNCkKKyNkZWZpbmUgVFhfRE1BX1NETChfeCkJCShUWF9ETUFfUExFTjAoX3gpKQorCisvKiBQRE1BIG9uIE1UNzYyOCAqLworI2RlZmluZSBUWF9ETUFfRE9ORQkJQklUKDMxKQorI2RlZmluZSBUWF9ETUFfTFMxCQlCSVQoMTQpCisjZGVmaW5lIFRYX0RNQV9ERVNQMl9ERUYJKFRYX0RNQV9MUzAgfCBUWF9ETUFfRE9ORSkKKworLyogUURNQSBkZXNjcmlwdG9yIHJ4ZDIgKi8KKyNkZWZpbmUgUlhfRE1BX0RPTkUJCUJJVCgzMSkKKyNkZWZpbmUgUlhfRE1BX0xTTwkJQklUKDMwKQorI2RlZmluZSBSWF9ETUFfUExFTjAoX3gpCSgoKF94KSAmIE1US19SWF9ETUFfQlVGX0xFTikgPDwgTVRLX1JYX0RNQV9CVUZfU0hJRlQpCisjZGVmaW5lIFJYX0RNQV9HRVRfUExFTjAoX3gpCSgoKF94KSA+PiBNVEtfUlhfRE1BX0JVRl9TSElGVCkgJiBNVEtfUlhfRE1BX0JVRl9MRU4pCisjZGVmaW5lIFJYX0RNQV9HRVRfQUdHX0NOVChfeCkJKCgoX3gpID4+IDIpICYgMHhmZikKKyNkZWZpbmUgUlhfRE1BX0dFVF9SRVYoX3gpCSgoKF94KSA+PiAxMCkgJiAweDFmKQorI2RlZmluZSBSWF9ETUFfVlRBRwkJQklUKDE1KQorCisvKiBRRE1BIGRlc2NyaXB0b3IgcnhkMyAqLworI2RlZmluZSBSWF9ETUFfVklEKF94KQkJKChfeCkgJiBWTEFOX1ZJRF9NQVNLKQorI2RlZmluZSBSWF9ETUFfVENJKF94KQkJKChfeCkgJiAoVkxBTl9QUklPX01BU0sgfCBWTEFOX1ZJRF9NQVNLKSkKKyNkZWZpbmUgUlhfRE1BX1ZQSUQoX3gpCQkoKChfeCkgPj4gMTYpICYgMHhmZmZmKQorCisvKiBRRE1BIGRlc2NyaXB0b3IgcnhkNCAqLworI2RlZmluZSBSWF9ETUFfTDRfVkFMSUQJCUJJVCgyNCkKKyNkZWZpbmUgUlhfRE1BX0w0X1ZBTElEX1BETUEJQklUKDMwKQkJLyogd2hlbiBQRE1BIGlzIHVzZWQgKi8KKyNkZWZpbmUgUlhfRE1BX1NQRUNJQUxfVEFHCUJJVCgyMikJCS8qIHN3aXRjaCBoZWFkZXIgaW4gcGFja2V0ICovCisKKyNkZWZpbmUgUlhfRE1BX0dFVF9TUE9SVChfeCkgCSgoKF94KSA+PiBSWF9ETUFfU1BPUlRfU0hJRlQpICYgUlhfRE1BX1NQT1JUX01BU0spCisKKy8qIFBETUEgVjIgZGVzY3JpcHRvciByeGQzICovCisjZGVmaW5lIFJYX0RNQV9WVEFHX1YyICAgICAgICAgIEJJVCgwKQorI2RlZmluZSBSWF9ETUFfTDRfVkFMSURfVjIgICAgICBCSVQoMikKKworLyogUERNQSBWMiBkZXNjcmlwdG9yIHJ4ZDQgKi8KKyNkZWZpbmUgUlhfRE1BX1ZJRF9WMihfeCkgICAgICAgUlhfRE1BX1ZJRChfeCkKKyNkZWZpbmUgUlhfRE1BX1RDSV9WMihfeCkJUlhfRE1BX1RDSShfeCkKKyNkZWZpbmUgUlhfRE1BX1ZQSURfVjIoX3gpCVJYX0RNQV9WUElEKF94KQorCisvKiBQRE1BIFYyIGRlc2NyaXB0b3IgcnhkNiAqLworI2RlZmluZSBSWF9ETUFfR0VUX0ZMVVNIX1JTTl9WMihfeCkJKChfeCkgJiAweDcpCisjZGVmaW5lIFJYX0RNQV9HRVRfQUdHX0NOVF9WMihfeCkJKCgoX3gpID4+IDE2KSAmIDB4ZmYpCisKKy8qIFBIWSBJbmRpcmVjdCBBY2Nlc3MgQ29udHJvbCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgTVRLX1BIWV9JQUMJCTB4MTAwMDQKKyNkZWZpbmUgUEhZX0lBQ19BQ0NFU1MJCUJJVCgzMSkKKyNkZWZpbmUgUEhZX0lBQ19SRUFECQlCSVQoMTkpCisjZGVmaW5lIFBIWV9JQUNfV1JJVEUJCUJJVCgxOCkKKyNkZWZpbmUgUEhZX0lBQ19TVEFSVAkJQklUKDE2KQorI2RlZmluZSBQSFlfSUFDX0FERFJfU0hJRlQJMjAKKyNkZWZpbmUgUEhZX0lBQ19SRUdfU0hJRlQJMjUKKyNkZWZpbmUgUEhZX0lBQ19USU1FT1VUCQlIWgorCisjZGVmaW5lIE1US19NQUNfTUlTQwkJMHgxMDAwYworI2RlZmluZSBNVEtfTVVYX1RPX0VTVwkJQklUKDApCisKKy8qIE1hYyBjb250cm9sIHJlZ2lzdGVycyAqLworI2RlZmluZSBNVEtfTUFDX01DUih4KQkJKDB4MTAxMDAgKyAoeCAqIDB4MTAwKSkKKyNkZWZpbmUgTUFDX01DUl9NQVhfUlhfMTUzNglCSVQoMjQpCisjZGVmaW5lIE1BQ19NQ1JfSVBHX0NGRwkJKEJJVCgxOCkgfCBCSVQoMTYpKQorI2RlZmluZSBNQUNfTUNSX0ZPUkNFX01PREUJQklUKDE1KQorI2RlZmluZSBNQUNfTUNSX1RYX0VOCQlCSVQoMTQpCisjZGVmaW5lIE1BQ19NQ1JfUlhfRU4JCUJJVCgxMykKKyNkZWZpbmUgTUFDX01DUl9CQUNLT0ZGX0VOCUJJVCg5KQorI2RlZmluZSBNQUNfTUNSX0JBQ0tQUl9FTglCSVQoOCkKKyNkZWZpbmUgTUFDX01DUl9GT1JDRV9SWF9GQwlCSVQoNSkKKyNkZWZpbmUgTUFDX01DUl9GT1JDRV9UWF9GQwlCSVQoNCkKKyNkZWZpbmUgTUFDX01DUl9TUEVFRF8xMDAwCUJJVCgzKQorI2RlZmluZSBNQUNfTUNSX1NQRUVEXzEwMAlCSVQoMikKKyNkZWZpbmUgTUFDX01DUl9GT1JDRV9EUFgJQklUKDEpCisjZGVmaW5lIE1BQ19NQ1JfRk9SQ0VfTElOSwlCSVQoMCkKKyNkZWZpbmUgTUFDX01DUl9GT1JDRV9MSU5LX0RPV04JKE1BQ19NQ1JfRk9SQ0VfTU9ERSkKKworLyogTWFjIHN0YXR1cyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgTVRLX01BQ19NU1IoeCkJCSgweDEwMTA4ICsgKHggKiAweDEwMCkpCisjZGVmaW5lIE1BQ19NU1JfRUVFMUcJCUJJVCg3KQorI2RlZmluZSBNQUNfTVNSX0VFRTEwME0JCUJJVCg2KQorI2RlZmluZSBNQUNfTVNSX1JYX0ZDCQlCSVQoNSkKKyNkZWZpbmUgTUFDX01TUl9UWF9GQwkJQklUKDQpCisjZGVmaW5lIE1BQ19NU1JfU1BFRURfMTAwMAlCSVQoMykKKyNkZWZpbmUgTUFDX01TUl9TUEVFRF8xMDAJQklUKDIpCisjZGVmaW5lIE1BQ19NU1JfU1BFRURfTUFTSwkoTUFDX01TUl9TUEVFRF8xMDAwIHwgTUFDX01TUl9TUEVFRF8xMDApCisjZGVmaW5lIE1BQ19NU1JfRFBYCQlCSVQoMSkKKyNkZWZpbmUgTUFDX01TUl9MSU5LCQlCSVQoMCkKKworLyogVFJHTUlJIFJYQyBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFRSR01JSV9SQ0tfQ1RSTAkJMHgxMDMwMAorI2RlZmluZSBEUVNJMCh4KQkJKCh4IDw8IDApICYgR0VOTUFTSyg2LCAwKSkKKyNkZWZpbmUgRFFTSTEoeCkJCSgoeCA8PCA4KSAmIEdFTk1BU0soMTQsIDgpKQorI2RlZmluZSBSWENUTF9ETVdUTEFUKHgpCSgoeCA8PCAxNikgJiBHRU5NQVNLKDE4LCAxNikpCisjZGVmaW5lIFJYQ19SU1QJCQlCSVQoMzEpCisjZGVmaW5lIFJYQ19EUVNJU0VMCQlCSVQoMzApCisjZGVmaW5lIFJDS19DVFJMX1JHTUlJXzEwMDAJKFJYQ19EUVNJU0VMIHwgUlhDVExfRE1XVExBVCgyKSB8IERRU0kxKDE2KSkKKyNkZWZpbmUgUkNLX0NUUkxfUkdNSUlfMTBfMTAwCVJYQ1RMX0RNV1RMQVQoMikKKworI2RlZmluZSBOVU1fVFJHTUlJX0NUUkwJCTUKKworLyogVFJHTUlJIFJYQyBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFRSR01JSV9UQ0tfQ1RSTAkJMHgxMDM0MAorI2RlZmluZSBUWENUTF9ETVdUTEFUKHgpCSgoeCA8PCAxNikgJiBHRU5NQVNLKDE4LCAxNikpCisjZGVmaW5lIFRYQ19JTlYJCQlCSVQoMzApCisjZGVmaW5lIFRDS19DVFJMX1JHTUlJXzEwMDAJVFhDVExfRE1XVExBVCgyKQorI2RlZmluZSBUQ0tfQ1RSTF9SR01JSV8xMF8xMDAJKFRYQ19JTlYgfCBUWENUTF9ETVdUTEFUKDIpKQorCisvKiBUUkdNSUkgVFggRHJpdmUgU3RyZW5ndGggKi8KKyNkZWZpbmUgVFJHTUlJX1REX09EVChpKQkoMHgxMDM1NCArIDggKiAoaSkpCisjZGVmaW5lICBURF9ETV9EUlZQKHgpCQkoKHgpICYgMHhmKQorI2RlZmluZSAgVERfRE1fRFJWTih4KQkJKCgoeCkgJiAweGYpIDw8IDQpCisKKy8qIFRSR01JSSBJbnRlcmZhY2UgbW9kZSByZWdpc3RlciAqLworI2RlZmluZSBJTlRGX01PREUJCTB4MTAzOTAKKyNkZWZpbmUgVFJHTUlJX0lOVEZfRElTCQlCSVQoMCkKKyNkZWZpbmUgVFJHTUlJX01PREUJCUJJVCgxKQorI2RlZmluZSBUUkdNSUlfQ0VOVFJBTF9BTElHTkVECUJJVCgyKQorI2RlZmluZSBJTlRGX01PREVfUkdNSUlfMTAwMCAgICAoVFJHTUlJX01PREUgfCBUUkdNSUlfQ0VOVFJBTF9BTElHTkVEKQorI2RlZmluZSBJTlRGX01PREVfUkdNSUlfMTBfMTAwICAwCisKKy8qIEdQSU8gcG9ydCBjb250cm9sIHJlZ2lzdGVycyBmb3IgR01BQyAyKi8KKyNkZWZpbmUgR1BJT19PRDMzX0NUUkw4CQkweDRjMAorI2RlZmluZSBHUElPX0JJQVNfQ1RSTAkJMHhlZDAKKyNkZWZpbmUgR1BJT19EUlZfU0VMMTAJCTB4ZjAwCisKKy8qIGV0aGVybmV0IHN1YnN5c3RlbSBjaGlwIGlkIHJlZ2lzdGVyICovCisjZGVmaW5lIEVUSFNZU19DSElQSUQwXzMJMHgwCisjZGVmaW5lIEVUSFNZU19DSElQSUQ0XzcJMHg0CisjZGVmaW5lIE1UNzYyM19FVEgJCTc2MjMKKyNkZWZpbmUgTVQ3NjIyX0VUSAkJNzYyMgorI2RlZmluZSBNVDc2MjFfRVRICQk3NjIxCisKKy8qIGV0aGVybmV0IHN5c3RlbSBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIEVUSFNZU19TWVNDRkcJCTB4MTAKKyNkZWZpbmUgU1lTQ0ZHX0RSQU1fVFlQRV9ERFIyCUJJVCg0KQorCisvKiBldGhlcm5ldCBzdWJzeXN0ZW0gY29uZmlnIHJlZ2lzdGVyICovCisjZGVmaW5lIEVUSFNZU19TWVNDRkcwCQkweDE0CisjZGVmaW5lIFNZU0NGRzBfR0VfTUFTSwkJMHgzCisjZGVmaW5lIFNZU0NGRzBfR0VfTU9ERSh4LCB5KQkoeCA8PCAoMTIgKyAoeSAqIDIpKSkKKyNkZWZpbmUgU1lTQ0ZHMF9TR01JSV9NQVNLICAgICBHRU5NQVNLKDksIDgpCisjZGVmaW5lIFNZU0NGRzBfU0dNSUlfR01BQzEgICAgKCgyIDw8IDgpICYgU1lTQ0ZHMF9TR01JSV9NQVNLKQorI2RlZmluZSBTWVNDRkcwX1NHTUlJX0dNQUMyICAgICgoMyA8PCA4KSAmIFNZU0NGRzBfU0dNSUlfTUFTSykKKyNkZWZpbmUgU1lTQ0ZHMF9TR01JSV9HTUFDMV9WMiBCSVQoOSkKKyNkZWZpbmUgU1lTQ0ZHMF9TR01JSV9HTUFDMl9WMiBCSVQoOCkKKworCisvKiBldGhlcm5ldCBzdWJzeXN0ZW0gY2xvY2sgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRVRIU1lTX0NMS0NGRzAJCTB4MmMKKyNkZWZpbmUgRVRIU1lTX1RSR01JSV9DTEtfU0VMMzYyXzUJQklUKDExKQorI2RlZmluZSBFVEhTWVNfVFJHTUlJX01UNzYyMV9NQVNLCShCSVQoNSkgfCBCSVQoNikpCisjZGVmaW5lIEVUSFNZU19UUkdNSUlfTVQ3NjIxX0FQTEwJQklUKDYpCisjZGVmaW5lIEVUSFNZU19UUkdNSUlfTVQ3NjIxX0REUl9QTEwJQklUKDUpCisKKy8qIGV0aGVybmV0IHJlc2V0IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRVRIU1lTX1JTVENUUkwJMHgzNAorI2RlZmluZSBSU1RDVFJMX0ZFCUJJVCg2KQorI2RlZmluZSBSU1RDVFJMX1BQRQlCSVQoMzEpCisjZGVmaW5lIFJTVENUUkxfUFBFMSAJQklUKDMwKQorI2RlZmluZSBSU1RDVFJMX0VUSCAJQklUKDIzKQorCisvKiBldGhlcm5ldCByZXNldCBjaGVjayBpZGxlIHJlZ2lzdGVyICovCisjZGVmaW5lIEVUSFNZU19GRV9SU1RfQ0hLX0lETEVfRU4gCTB4MjgKKworCisvKiBTR01JSSBzdWJzeXN0ZW0gY29uZmlnIHJlZ2lzdGVycyAqLworLyogUmVnaXN0ZXIgdG8gYXV0by1uZWdvdGlhdGlvbiByZXN0YXJ0ICovCisjZGVmaW5lIFNHTVNZU19QQ1NfQ09OVFJPTF8xCTB4MAorI2RlZmluZSBTR01JSV9BTl9SRVNUQVJUCUJJVCg5KQorI2RlZmluZSBTR01JSV9JU09MQVRFCQlCSVQoMTApCisjZGVmaW5lIFNHTUlJX0FOX0VOQUJMRQkJQklUKDEyKQorI2RlZmluZSBTR01JSV9MSU5LX1NUQVRZUwlCSVQoMTgpCisjZGVmaW5lIFNHTUlJX0FOX0FCSUxJVFkJQklUKDE5KQorI2RlZmluZSBTR01JSV9BTl9DT01QTEVURQlCSVQoMjEpCisjZGVmaW5lIFNHTUlJX1BDU19GQVVMVAkJQklUKDIzKQorI2RlZmluZSBTR01JSV9BTl9FWFBBTlNJT05fQ0xSCUJJVCgzMCkKKworLyogUmVnaXN0ZXIgdG8gcHJvZ3JhbW1hYmxlIGxpbmsgdGltZXIsIHRoZSB1bml0IGluIDIgKiA4bnMgKi8KKyNkZWZpbmUgU0dNU1lTX1BDU19MSU5LX1RJTUVSCTB4MTgKKyNkZWZpbmUgU0dNSUlfTElOS19USU1FUl9ERUZBVUxUCSgweDE4NmEwICYgR0VOTUFTSygxOSwgMCkpCisKKy8qIFJlZ2lzdGVyIHRvIGNvbnRyb2wgcmVtb3RlIGZhdWx0ICovCisjZGVmaW5lIFNHTVNZU19TR01JSV9NT0RFCQkweDIwCisjZGVmaW5lIFNHTUlJX0lGX01PREVfQklUMAkJQklUKDApCisjZGVmaW5lIFNHTUlJX1NQRUVEX0RVUExFWF9BTgkJQklUKDEpCisjZGVmaW5lIFNHTUlJX1NQRUVEXzEwCQkJMHgwCisjZGVmaW5lIFNHTUlJX1NQRUVEXzEwMAkJCUJJVCgyKQorI2RlZmluZSBTR01JSV9TUEVFRF8xMDAwCQlCSVQoMykKKyNkZWZpbmUgU0dNSUlfRFVQTEVYX0ZVTEwJCUJJVCg0KQorI2RlZmluZSBTR01JSV9JRl9NT0RFX0JJVDUJCUJJVCg1KQorI2RlZmluZSBTR01JSV9SRU1PVEVfRkFVTFRfRElTCQlCSVQoOCkKKyNkZWZpbmUgU0dNSUlfQ09ERV9TWU5DX1NFVF9WQUwJCUJJVCg5KQorI2RlZmluZSBTR01JSV9DT0RFX1NZTkNfU0VUX0VOCQlCSVQoMTApCisjZGVmaW5lIFNHTUlJX1NFTkRfQU5fRVJST1JfRU4JCUJJVCgxMSkKKyNkZWZpbmUgU0dNSUlfSUZfTU9ERV9NQVNLCQlHRU5NQVNLKDUsIDEpCisKKy8qIFJlZ2lzdGVyIHRvIHNldCBTR01JSSBzcGVlZCwgQU5BIFJHXyBDb250cm9sIFNpZ25hbHMgSUlJKi8KKyNkZWZpbmUgU0dNU1lTX0FOQV9SR19DUzMJMHgyMDI4CisjZGVmaW5lIFJHX1BIWV9TUEVFRF9NQVNLCShCSVQoMikgfCBCSVQoMykpCisjZGVmaW5lIFJHX1BIWV9TUEVFRF8xXzI1RwkweDAKKyNkZWZpbmUgUkdfUEhZX1NQRUVEXzNfMTI1RwlCSVQoMikKKworLyogUmVnaXN0ZXIgdG8gcG93ZXIgdXAgUVBIWSAqLworI2RlZmluZSBTR01TWVNfUVBIWV9QV1JfU1RBVEVfQ1RSTCAweGU4CisjZGVmaW5lCVNHTUlJX1BIWUFfUFdECQlCSVQoNCkKKworLyogUmVnaXN0ZXIgdG8gUVBIWSB3cmFwcGVyIGNvbnRyb2wgKi8KKyNkZWZpbmUgU0dNU1lTX1FQSFlfV1JBUF9DVFJMCTB4ZWMKKyNkZWZpbmUgU0dNSUlfUE5fU1dBUF9NQVNLCUdFTk1BU0soMSwgMCkKKyNkZWZpbmUgU0dNSUlfUE5fU1dBUF9UWF9SWAkoQklUKDApIHwgQklUKDEpKQorCisvKiBJbmZyYXN5cyBzdWJzeXN0ZW0gY29uZmlnIHJlZ2lzdGVycyAqLworI2RlZmluZSBJTkZSQV9NSVNDMiAgICAgICAgICAgIDB4NzBjCisjZGVmaW5lIENPX1FQSFlfU0VMICAgICAgICAgICAgQklUKDApCisjZGVmaW5lIEdFUEhZX01BQ19TRUwgICAgICAgICAgQklUKDEpCisKKy8qIFRvcCBtaXNjIHJlZ2lzdGVycyAqLworI2RlZmluZSBVU0JfUEhZX1NXSVRDSF9SRUcgICAgIDB4MjE4CisjZGVmaW5lIFFQSFlfU0VMX01BU0sgICAgICAgICAgR0VOTUFTSygxLCAwKQorI2RlZmluZSBTR01JSV9RUEhZX1NFTAkgICAgICAgMHgyCisKKy8qTURJTyBjb250cm9sKi8KKyNkZWZpbmUgTUlJX01NRF9BQ0NfQ1RMX1JFRyAgICAgICAgICAgICAweDBkCisjZGVmaW5lIE1JSV9NTURfQUREUl9EQVRBX1JFRyAgICAgICAgICAgMHgwZQorI2RlZmluZSBNTURfT1BfTU9ERV9EQVRBIEJJVCgxNCkKKworLyogTVQ3NjI4Lzg4IHNwZWNpZmljIHN0dWZmICovCisjZGVmaW5lIE1UNzYyOF9QRE1BX09GRlNFVAkweDA4MDAKKyNkZWZpbmUgTVQ3NjI4X1NETV9PRkZTRVQJMHgwYzAwCisKKyNkZWZpbmUgTVQ3NjI4X1RYX0JBU0VfUFRSMAkoTVQ3NjI4X1BETUFfT0ZGU0VUICsgMHgwMCkKKyNkZWZpbmUgTVQ3NjI4X1RYX01BWF9DTlQwCShNVDc2MjhfUERNQV9PRkZTRVQgKyAweDA0KQorI2RlZmluZSBNVDc2MjhfVFhfQ1RYX0lEWDAJKE1UNzYyOF9QRE1BX09GRlNFVCArIDB4MDgpCisjZGVmaW5lIE1UNzYyOF9UWF9EVFhfSURYMAkoTVQ3NjI4X1BETUFfT0ZGU0VUICsgMHgwYykKKyNkZWZpbmUgTVQ3NjI4X1BTVF9EVFhfSURYMAlCSVQoMCkKKworI2RlZmluZSBNVDc2MjhfU0RNX01BQ19BRFJMCShNVDc2MjhfU0RNX09GRlNFVCArIDB4MGMpCisjZGVmaW5lIE1UNzYyOF9TRE1fTUFDX0FEUkgJKE1UNzYyOF9TRE1fT0ZGU0VUICsgMHgxMCkKKworc3RydWN0IG10a19yeF9kbWEgeworCXVuc2lnbmVkIGludCByeGQxOworCXVuc2lnbmVkIGludCByeGQyOworCXVuc2lnbmVkIGludCByeGQzOworCXVuc2lnbmVkIGludCByeGQ0OworI2lmIGRlZmluZWQoQ09ORklHX01FRElBVEVLX05FVFNZU19WMikKKwl1bnNpZ25lZCBpbnQgcnhkNTsKKwl1bnNpZ25lZCBpbnQgcnhkNjsKKwl1bnNpZ25lZCBpbnQgcnhkNzsKKwl1bnNpZ25lZCBpbnQgcnhkODsKKyNlbmRpZgorfSBfX3BhY2tlZCBfX2FsaWduZWQoNCk7CisKK3N0cnVjdCBtdGtfdHhfZG1hIHsKKwl1bnNpZ25lZCBpbnQgdHhkMTsKKwl1bnNpZ25lZCBpbnQgdHhkMjsKKwl1bnNpZ25lZCBpbnQgdHhkMzsKKwl1bnNpZ25lZCBpbnQgdHhkNDsKKyNpZiBkZWZpbmVkKENPTkZJR19NRURJQVRFS19ORVRTWVNfVjIpCisJdW5zaWduZWQgaW50IHR4ZDU7CisJdW5zaWduZWQgaW50IHR4ZDY7CisJdW5zaWduZWQgaW50IHR4ZDc7CisJdW5zaWduZWQgaW50IHR4ZDg7CisjZW5kaWYKK30gX19wYWNrZWQgX19hbGlnbmVkKDQpOworCitzdHJ1Y3QgbXRrX2V0aDsKK3N0cnVjdCBtdGtfbWFjOworCisvKiBzdHJ1Y3QgbXRrX2h3X3N0YXRzIC0gdGhlIHN0cnVjdHVyZSB0aGF0IGhvbGRzIHRoZSB0cmFmZmljIHN0YXRpc3RpY3MuCisgKiBAc3RhdHNfbG9jazoJCW1ha2Ugc3VyZSB0aGF0IHN0YXRzIG9wZXJhdGlvbnMgYXJlIGF0b21pYworICogQHJlZ19vZmZzZXQ6CQl0aGUgc3RhdHVzIHJlZ2lzdGVyIG9mZnNldCBvZiB0aGUgU29DCisgKiBAc3luY3A6CQl0aGUgcmVmY291bnQKKyAqCisgKiBBbGwgb2YgdGhlIHN1cHBvcnRlZCBTb0NzIGhhdmUgaGFyZHdhcmUgY291bnRlcnMgZm9yIHRyYWZmaWMgc3RhdGlzdGljcy4KKyAqIFdoZW5ldmVyIHRoZSBzdGF0dXMgSVJRIHRyaWdnZXJzIHdlIGNhbiByZWFkIHRoZSBsYXRlc3Qgc3RhdHMgZnJvbSB0aGVzZQorICogY291bnRlcnMgYW5kIHN0b3JlIHRoZW0gaW4gdGhpcyBzdHJ1Y3QuCisgKi8KK3N0cnVjdCBtdGtfaHdfc3RhdHMgeworCXU2NCB0eF9ieXRlczsKKwl1NjQgdHhfcGFja2V0czsKKwl1NjQgdHhfc2tpcDsKKwl1NjQgdHhfY29sbGlzaW9uczsKKwl1NjQgcnhfYnl0ZXM7CisJdTY0IHJ4X3BhY2tldHM7CisJdTY0IHJ4X292ZXJmbG93OworCXU2NCByeF9mY3NfZXJyb3JzOworCXU2NCByeF9zaG9ydF9lcnJvcnM7CisJdTY0IHJ4X2xvbmdfZXJyb3JzOworCXU2NCByeF9jaGVja3N1bV9lcnJvcnM7CisJdTY0IHJ4X2Zsb3dfY29udHJvbF9wYWNrZXRzOworCisJc3BpbmxvY2tfdAkJc3RhdHNfbG9jazsKKwl1MzIJCQlyZWdfb2Zmc2V0OworCXN0cnVjdCB1NjRfc3RhdHNfc3luYwlzeW5jcDsKK307CisKK2VudW0gbXRrX3R4X2ZsYWdzIHsKKwkvKiBQRE1BIGRlc2NyaXB0b3IgY2FuIHBvaW50IGF0IDEtMiBzZWdtZW50cy4gVGhpcyBlbnVtIGFsbG93cyB1cyB0bworCSAqIHRyYWNrIGhvdyBtZW1vcnkgd2FzIGFsbG9jYXRlZCBzbyB0aGF0IGl0IGNhbiBiZSBmcmVlZCBwcm9wZXJseS4KKwkgKi8KKwlNVEtfVFhfRkxBR1NfU0lOR0xFMAk9IDB4MDEsCisJTVRLX1RYX0ZMQUdTX1BBR0UwCT0gMHgwMiwKKworCS8qIE1US19UWF9GTEFHU19GUE9SVHggYWxsb3dzIHRyYWNraW5nIHdoaWNoIHBvcnQgdGhlIHRyYW5zbWl0dGVkCisJICogU0tCIG91dCBpbnN0ZWFkIG9mIGxvb2tpbmcgdXAgdGhyb3VnaCBoYXJkd2FyZSBUWCBkZXNjcmlwdG9yLgorCSAqLworCU1US19UWF9GTEFHU19GUE9SVDAJPSAweDA0LAorCU1US19UWF9GTEFHU19GUE9SVDEJPSAweDA4LAorfTsKKworLyogVGhpcyBlbnVtIGFsbG93cyB1cyB0byBpZGVudGlmeSBob3cgdGhlIGNsb2NrIGlzIGRlZmluZWQgb24gdGhlIGFycmF5IG9mIHRoZQorICogY2xvY2sgaW4gdGhlIG9yZGVyCisgKi8KK2VudW0gbXRrX2Nsa3NfbWFwIHsKKwlNVEtfQ0xLX0VUSElGLAorCU1US19DTEtfU0dNSUlUT1AsCisJTVRLX0NMS19FU1csCisJTVRLX0NMS19HUDAsCisJTVRLX0NMS19HUDEsCisJTVRLX0NMS19HUDIsCisJTVRLX0NMS19GRSwKKwlNVEtfQ0xLX1RSR1BMTCwKKwlNVEtfQ0xLX1NHTUlJX1RYXzI1ME0sCisJTVRLX0NMS19TR01JSV9SWF8yNTBNLAorCU1US19DTEtfU0dNSUlfQ0RSX1JFRiwKKwlNVEtfQ0xLX1NHTUlJX0NEUl9GQiwKKwlNVEtfQ0xLX1NHTUlJMl9UWF8yNTBNLAorCU1US19DTEtfU0dNSUkyX1JYXzI1ME0sCisJTVRLX0NMS19TR01JSTJfQ0RSX1JFRiwKKwlNVEtfQ0xLX1NHTUlJMl9DRFJfRkIsCisJTVRLX0NMS19TR01JSV9DSywKKwlNVEtfQ0xLX0VUSDJQTEwsCisJTVRLX0NMS19XT0NQVTAsCisJTVRLX0NMS19XT0NQVTEsCisJTVRLX0NMS19NQVgKK307CisKKyNkZWZpbmUgTVQ3NjIzX0NMS1NfQklUTUFQCShCSVQoTVRLX0NMS19FVEhJRikgfCBCSVQoTVRLX0NMS19FU1cpIHwgIFwKKwkJCQkgQklUKE1US19DTEtfR1AxKSB8IEJJVChNVEtfQ0xLX0dQMikgfCBcCisJCQkJIEJJVChNVEtfQ0xLX1RSR1BMTCkpCisjZGVmaW5lIE1UNzYyMl9DTEtTX0JJVE1BUAkoQklUKE1US19DTEtfRVRISUYpIHwgQklUKE1US19DTEtfRVNXKSB8ICBcCisJCQkJIEJJVChNVEtfQ0xLX0dQMCkgfCBCSVQoTVRLX0NMS19HUDEpIHwgXAorCQkJCSBCSVQoTVRLX0NMS19HUDIpIHwgXAorCQkJCSBCSVQoTVRLX0NMS19TR01JSV9UWF8yNTBNKSB8IFwKKwkJCQkgQklUKE1US19DTEtfU0dNSUlfUlhfMjUwTSkgfCBcCisJCQkJIEJJVChNVEtfQ0xLX1NHTUlJX0NEUl9SRUYpIHwgXAorCQkJCSBCSVQoTVRLX0NMS19TR01JSV9DRFJfRkIpIHwgXAorCQkJCSBCSVQoTVRLX0NMS19TR01JSV9DSykgfCBcCisJCQkJIEJJVChNVEtfQ0xLX0VUSDJQTEwpKQorI2RlZmluZSBNVDc2MjFfQ0xLU19CSVRNQVAJKDApCisjZGVmaW5lIE1UNzYyOF9DTEtTX0JJVE1BUAkoMCkKKyNkZWZpbmUgTVQ3NjI5X0NMS1NfQklUTUFQCShCSVQoTVRLX0NMS19FVEhJRikgfCBCSVQoTVRLX0NMS19FU1cpIHwgIFwKKwkJCQkgQklUKE1US19DTEtfR1AwKSB8IEJJVChNVEtfQ0xLX0dQMSkgfCBcCisJCQkJIEJJVChNVEtfQ0xLX0dQMikgfCBCSVQoTVRLX0NMS19GRSkgfCBcCisJCQkJIEJJVChNVEtfQ0xLX1NHTUlJX1RYXzI1ME0pIHwgXAorCQkJCSBCSVQoTVRLX0NMS19TR01JSV9SWF8yNTBNKSB8IFwKKwkJCQkgQklUKE1US19DTEtfU0dNSUlfQ0RSX1JFRikgfCBcCisJCQkJIEJJVChNVEtfQ0xLX1NHTUlJX0NEUl9GQikgfCBcCisJCQkJIEJJVChNVEtfQ0xLX1NHTUlJMl9UWF8yNTBNKSB8IFwKKwkJCQkgQklUKE1US19DTEtfU0dNSUkyX1JYXzI1ME0pIHwgXAorCQkJCSBCSVQoTVRLX0NMS19TR01JSTJfQ0RSX1JFRikgfCBcCisJCQkJIEJJVChNVEtfQ0xLX1NHTUlJMl9DRFJfRkIpIHwgXAorCQkJCSBCSVQoTVRLX0NMS19TR01JSV9DSykgfCBcCisJCQkJIEJJVChNVEtfQ0xLX0VUSDJQTEwpIHwgQklUKE1US19DTEtfU0dNSUlUT1ApKQorCisjZGVmaW5lIE1UNzk4Nl9DTEtTX0JJVE1BUAkoQklUKE1US19DTEtfRkUpIHwgQklUKE1US19DTEtfR1AyKSB8IEJJVChNVEtfQ0xLX0dQMSkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoTVRLX0NMS19XT0NQVTEpIHwgQklUKE1US19DTEtfV09DUFUwKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVChNVEtfQ0xLX1NHTUlJX1RYXzI1ME0pIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKE1US19DTEtfU0dNSUlfUlhfMjUwTSkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoTVRLX0NMS19TR01JSV9DRFJfUkVGKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVChNVEtfQ0xLX1NHTUlJX0NEUl9GQikgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoTVRLX0NMS19TR01JSTJfVFhfMjUwTSkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoTVRLX0NMS19TR01JSTJfUlhfMjUwTSkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoTVRLX0NMS19TR01JSTJfQ0RSX1JFRikgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoTVRLX0NMS19TR01JSTJfQ0RSX0ZCKSkKKworCisjZGVmaW5lIE1UNzk4MV9DTEtTX0JJVE1BUAkoQklUKE1US19DTEtfRkUpIHwgQklUKE1US19DTEtfR1AyKSB8IEJJVChNVEtfQ0xLX0dQMSkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoTVRLX0NMS19XT0NQVTApIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKE1US19DTEtfU0dNSUlfVFhfMjUwTSkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoTVRLX0NMS19TR01JSV9SWF8yNTBNKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVChNVEtfQ0xLX1NHTUlJX0NEUl9SRUYpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKE1US19DTEtfU0dNSUlfQ0RSX0ZCKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVChNVEtfQ0xLX1NHTUlJMl9UWF8yNTBNKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVChNVEtfQ0xLX1NHTUlJMl9SWF8yNTBNKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVChNVEtfQ0xLX1NHTUlJMl9DRFJfUkVGKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVChNVEtfQ0xLX1NHTUlJMl9DRFJfRkIpKQorZW51bSBtdGtfZGV2X3N0YXRlIHsKKwlNVEtfSFdfSU5JVCwKKwlNVEtfUkVTRVRUSU5HCit9OworCisvKiBzdHJ1Y3QgbXRrX3R4X2J1ZiAtCVRoaXMgc3RydWN0IGhvbGRzIHRoZSBwb2ludGVycyB0byB0aGUgbWVtb3J5IHBvaW50ZWQgYXQKKyAqCQkJYnkgdGhlIFRYIGRlc2NyaXB0b3IJcworICogQHNrYjoJCVRoZSBTS0IgcG9pbnRlciBvZiB0aGUgcGFja2V0IGJlaW5nIHNlbnQKKyAqIEBkbWFfYWRkcjA6CQlUaGUgYmFzZSBhZGRyIG9mIHRoZSBmaXJzdCBzZWdtZW50CisgKiBAZG1hX2xlbjA6CQlUaGUgbGVuZ3RoIG9mIHRoZSBmaXJzdCBzZWdtZW50CisgKiBAZG1hX2FkZHIxOgkJVGhlIGJhc2UgYWRkciBvZiB0aGUgc2Vjb25kIHNlZ21lbnQKKyAqIEBkbWFfbGVuMToJCVRoZSBsZW5ndGggb2YgdGhlIHNlY29uZCBzZWdtZW50CisgKi8KK3N0cnVjdCBtdGtfdHhfYnVmIHsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXUzMiBmbGFnczsKKwlERUZJTkVfRE1BX1VOTUFQX0FERFIoZG1hX2FkZHIwKTsKKwlERUZJTkVfRE1BX1VOTUFQX0xFTihkbWFfbGVuMCk7CisJREVGSU5FX0RNQV9VTk1BUF9BRERSKGRtYV9hZGRyMSk7CisJREVGSU5FX0RNQV9VTk1BUF9MRU4oZG1hX2xlbjEpOworfTsKKworLyogc3RydWN0IG10a190eF9yaW5nIC0JVGhpcyBzdHJ1Y3QgaG9sZHMgaW5mbyBkZXNjcmliaW5nIGEgVFggcmluZworICogQGRtYToJCVRoZSBkZXNjcmlwdG9yIHJpbmcKKyAqIEBidWY6CQlUaGUgbWVtb3J5IHBvaW50ZWQgYXQgYnkgdGhlIHJpbmcKKyAqIEBwaHlzOgkJVGhlIHBoeXNpY2FsIGFkZHIgb2YgdHhfYnVmCisgKiBAbmV4dF9mcmVlOgkJUG9pbnRlciB0byB0aGUgbmV4dCBmcmVlIGRlc2NyaXB0b3IKKyAqIEBsYXN0X2ZyZWU6CQlQb2ludGVyIHRvIHRoZSBsYXN0IGZyZWUgZGVzY3JpcHRvcgorICogQGxhc3RfZnJlZV9wdHI6CUhhcmR3YXJlIHBvaW50ZXIgdmFsdWUgb2YgdGhlIGxhc3QgZnJlZSBkZXNjcmlwdG9yCisgKiBAdGhyZXNoOgkJVGhlIHRocmVzaG9sZCBvZiBtaW5pbXVtIGFtb3VudCBvZiBmcmVlIGRlc2NyaXB0b3JzCisgKiBAZnJlZV9jb3VudDoJCVFETUEgdXNlcyBhIGxpbmtlZCBsaXN0LiBUcmFjayBob3cgbWFueSBmcmVlIGRlc2NyaXB0b3JzCisgKgkJCWFyZSBwcmVzZW50CisgKi8KK3N0cnVjdCBtdGtfdHhfcmluZyB7CisJc3RydWN0IG10a190eF9kbWEgKmRtYTsKKwlzdHJ1Y3QgbXRrX3R4X2J1ZiAqYnVmOworCWRtYV9hZGRyX3QgcGh5czsKKwlzdHJ1Y3QgbXRrX3R4X2RtYSAqbmV4dF9mcmVlOworCXN0cnVjdCBtdGtfdHhfZG1hICpsYXN0X2ZyZWU7CisJdTMyIGxhc3RfZnJlZV9wdHI7CisJdTE2IHRocmVzaDsKKwlhdG9taWNfdCBmcmVlX2NvdW50OworCWludCBkbWFfc2l6ZTsKKwlzdHJ1Y3QgbXRrX3R4X2RtYSAqZG1hX3BkbWE7CS8qIEZvciBNVDc2MjgvODggUERNQSBoYW5kbGluZyAqLworCWRtYV9hZGRyX3QgcGh5c19wZG1hOworCWludCBjcHVfaWR4OworfTsKKworLyogUERNQSByeCByaW5nIG1vZGUgKi8KK2VudW0gbXRrX3J4X2ZsYWdzIHsKKwlNVEtfUlhfRkxBR1NfTk9STUFMID0gMCwKKwlNVEtfUlhfRkxBR1NfSFdMUk8sCisJTVRLX1JYX0ZMQUdTX1FETUEsCit9OworCisvKiBzdHJ1Y3QgbXRrX3J4X3JpbmcgLQlUaGlzIHN0cnVjdCBob2xkcyBpbmZvIGRlc2NyaWJpbmcgYSBSWCByaW5nCisgKiBAZG1hOgkJVGhlIGRlc2NyaXB0b3IgcmluZworICogQGRhdGE6CQlUaGUgbWVtb3J5IHBvaW50ZWQgYXQgYnkgdGhlIHJpbmcKKyAqIEBwaHlzOgkJVGhlIHBoeXNpY2FsIGFkZHIgb2YgcnhfYnVmCisgKiBAZnJhZ19zaXplOgkJSG93IGJpZyBjYW4gZWFjaCBmcmFnbWVudCBiZQorICogQGJ1Zl9zaXplOgkJVGhlIHNpemUgb2YgZWFjaCBwYWNrZXQgYnVmZmVyCisgKiBAY2FsY19pZHg6CQlUaGUgY3VycmVudCBoZWFkIG9mIHJpbmcKKyAqIEByaW5nX25vOgkJVGhlIGluZGV4IG9mIHJpbmcKKyAqLworc3RydWN0IG10a19yeF9yaW5nIHsKKwlzdHJ1Y3QgbXRrX3J4X2RtYSAqZG1hOworCXU4ICoqZGF0YTsKKwlkbWFfYWRkcl90IHBoeXM7CisJdTE2IGZyYWdfc2l6ZTsKKwl1MTYgYnVmX3NpemU7CisJdTE2IGRtYV9zaXplOworCWJvb2wgY2FsY19pZHhfdXBkYXRlOworCXUxNiBjYWxjX2lkeDsKKwl1MzIgY3J4X2lkeF9yZWc7CisJdTMyIHJpbmdfbm87Cit9OworCisvKiBzdHJ1Y3QgbXRrX25hcGkgLQlUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgaG9sZGluZyBOQVBJLXJlbGF0ZWQgaW5mb3JtYXRpb24sCisgKgkJCWFuZCBhIG10a19uYXBpIHN0cnVjdCBpcyBiaW5kaW5nIHRvIG9uZSBpbnRlcnJ1cHQgZ3JvdXAKKyAqIEBuYXBpOgkJVGhlIE5BUEkgc3RydWN0CisgKiBAcnhfcmluZzoJCVBvaW50ZXIgdG8gdGhlIG1lbW9yeSBob2xkaW5nIGluZm8gYWJvdXQgdGhlIFJYIHJpbmcKKyAqIEBpcnFfZ3JwX2lkeDoJVGhlIGluZGV4IGluZGljYXRlcyB3aGljaCBpbnRlcnJ1cHQgZ3JvdXAgdGhhdCB0aGlzCisgKgkJCW10a19uYXBpIGlzIGJpbmRpbmcgdG8KKyAqLworc3RydWN0IG10a19uYXBpIHsKKwlzdHJ1Y3QgbmFwaV9zdHJ1Y3QJbmFwaTsKKwlzdHJ1Y3QgbXRrX2V0aAkJKmV0aDsKKwlzdHJ1Y3QgbXRrX3J4X3JpbmcJKnJ4X3Jpbmc7CisJdTMyCQkJaXJxX2dycF9ubzsKK307CisKK2VudW0gbWt0X2V0aF9jYXBhYmlsaXRpZXMgeworCU1US19SR01JSV9CSVQgPSAwLAorCU1US19UUkdNSUlfQklULAorCU1US19TR01JSV9CSVQsCisJTVRLX0VTV19CSVQsCisJTVRLX0dFUEhZX0JJVCwKKwlNVEtfTVVYX0JJVCwKKwlNVEtfSU5GUkFfQklULAorCU1US19TSEFSRURfU0dNSUlfQklULAorCU1US19IV0xST19CSVQsCisJTVRLX1JTU19CSVQsCisJTVRLX1NIQVJFRF9JTlRfQklULAorCU1US19UUkdNSUlfTVQ3NjIxX0NMS19CSVQsCisJTVRLX1FETUFfQklULAorCU1US19ORVRTWVNfVjJfQklULAorCU1US19TT0NfTVQ3NjI4X0JJVCwKKwlNVEtfUlNUQ1RSTF9QUEUxX0JJVCwKKwlNVEtfVTNfQ09QSFlfVjJfQklULAorCisJLyogTVVYIEJJVFMqLworCU1US19FVEhfTVVYX0dETTFfVE9fR01BQzFfRVNXX0JJVCwKKwlNVEtfRVRIX01VWF9HTUFDMl9HTUFDMF9UT19HRVBIWV9CSVQsCisJTVRLX0VUSF9NVVhfVTNfR01BQzJfVE9fUVBIWV9CSVQsCisJTVRLX0VUSF9NVVhfR01BQzFfR01BQzJfVE9fU0dNSUlfUkdNSUlfQklULAorCU1US19FVEhfTVVYX0dNQUMxMl9UT19HRVBIWV9TR01JSV9CSVQsCisKKwkvKiBQQVRIIEJJVFMgKi8KKwlNVEtfRVRIX1BBVEhfR01BQzFfUkdNSUlfQklULAorCU1US19FVEhfUEFUSF9HTUFDMV9UUkdNSUlfQklULAorCU1US19FVEhfUEFUSF9HTUFDMV9TR01JSV9CSVQsCisJTVRLX0VUSF9QQVRIX0dNQUMyX1JHTUlJX0JJVCwKKwlNVEtfRVRIX1BBVEhfR01BQzJfU0dNSUlfQklULAorCU1US19FVEhfUEFUSF9HTUFDMl9HRVBIWV9CSVQsCisJTVRLX0VUSF9QQVRIX0dETTFfRVNXX0JJVCwKK307CisKKy8qIFN1cHBvcnRlZCBoYXJkd2FyZSBncm91cCBvbiBTb0NzICovCisjZGVmaW5lIE1US19SR01JSQkJQklUKE1US19SR01JSV9CSVQpCisjZGVmaW5lIE1US19UUkdNSUkJCUJJVChNVEtfVFJHTUlJX0JJVCkKKyNkZWZpbmUgTVRLX1NHTUlJCQlCSVQoTVRLX1NHTUlJX0JJVCkKKyNkZWZpbmUgTVRLX0VTVwkJCUJJVChNVEtfRVNXX0JJVCkKKyNkZWZpbmUgTVRLX0dFUEhZCQlCSVQoTVRLX0dFUEhZX0JJVCkKKyNkZWZpbmUgTVRLX01VWAkJCUJJVChNVEtfTVVYX0JJVCkKKyNkZWZpbmUgTVRLX0lORlJBCQlCSVQoTVRLX0lORlJBX0JJVCkKKyNkZWZpbmUgTVRLX1NIQVJFRF9TR01JSQlCSVQoTVRLX1NIQVJFRF9TR01JSV9CSVQpCisjZGVmaW5lIE1US19IV0xSTwkJQklUKE1US19IV0xST19CSVQpCisjZGVmaW5lIE1US19SU1MJCQlCSVQoTVRLX1JTU19CSVQpCisjZGVmaW5lIE1US19TSEFSRURfSU5UCQlCSVQoTVRLX1NIQVJFRF9JTlRfQklUKQorI2RlZmluZSBNVEtfVFJHTUlJX01UNzYyMV9DTEsJQklUKE1US19UUkdNSUlfTVQ3NjIxX0NMS19CSVQpCisjZGVmaW5lIE1US19RRE1BCQlCSVQoTVRLX1FETUFfQklUKQorI2RlZmluZSBNVEtfTkVUU1lTX1YyCQlCSVQoTVRLX05FVFNZU19WMl9CSVQpCisjZGVmaW5lIE1US19TT0NfTVQ3NjI4CQlCSVQoTVRLX1NPQ19NVDc2MjhfQklUKQorI2RlZmluZSBNVEtfUlNUQ1RSTF9QUEUxCUJJVChNVEtfUlNUQ1RSTF9QUEUxX0JJVCkKKyNkZWZpbmUgTVRLX1UzX0NPUEhZX1YyCQlCSVQoTVRLX1UzX0NPUEhZX1YyX0JJVCkKKworI2RlZmluZSBNVEtfRVRIX01VWF9HRE0xX1RPX0dNQUMxX0VTVwkJXAorCUJJVChNVEtfRVRIX01VWF9HRE0xX1RPX0dNQUMxX0VTV19CSVQpCisjZGVmaW5lIE1US19FVEhfTVVYX0dNQUMyX0dNQUMwX1RPX0dFUEhZCVwKKwlCSVQoTVRLX0VUSF9NVVhfR01BQzJfR01BQzBfVE9fR0VQSFlfQklUKQorI2RlZmluZSBNVEtfRVRIX01VWF9VM19HTUFDMl9UT19RUEhZCQlcCisJQklUKE1US19FVEhfTVVYX1UzX0dNQUMyX1RPX1FQSFlfQklUKQorI2RlZmluZSBNVEtfRVRIX01VWF9HTUFDMV9HTUFDMl9UT19TR01JSV9SR01JSQlcCisJQklUKE1US19FVEhfTVVYX0dNQUMxX0dNQUMyX1RPX1NHTUlJX1JHTUlJX0JJVCkKKyNkZWZpbmUgTVRLX0VUSF9NVVhfR01BQzEyX1RPX0dFUEhZX1NHTUlJCVwKKwlCSVQoTVRLX0VUSF9NVVhfR01BQzEyX1RPX0dFUEhZX1NHTUlJX0JJVCkKKworLyogU3VwcG9ydGVkIHBhdGggcHJlc2VudCBvbiBTb0NzICovCisjZGVmaW5lIE1US19FVEhfUEFUSF9HTUFDMV9SR01JSQlCSVQoTVRLX0VUSF9QQVRIX0dNQUMxX1JHTUlJX0JJVCkKKyNkZWZpbmUgTVRLX0VUSF9QQVRIX0dNQUMxX1RSR01JSQlCSVQoTVRLX0VUSF9QQVRIX0dNQUMxX1RSR01JSV9CSVQpCisjZGVmaW5lIE1US19FVEhfUEFUSF9HTUFDMV9TR01JSQlCSVQoTVRLX0VUSF9QQVRIX0dNQUMxX1NHTUlJX0JJVCkKKyNkZWZpbmUgTVRLX0VUSF9QQVRIX0dNQUMyX1JHTUlJCUJJVChNVEtfRVRIX1BBVEhfR01BQzJfUkdNSUlfQklUKQorI2RlZmluZSBNVEtfRVRIX1BBVEhfR01BQzJfU0dNSUkJQklUKE1US19FVEhfUEFUSF9HTUFDMl9TR01JSV9CSVQpCisjZGVmaW5lIE1US19FVEhfUEFUSF9HTUFDMl9HRVBIWQlCSVQoTVRLX0VUSF9QQVRIX0dNQUMyX0dFUEhZX0JJVCkKKyNkZWZpbmUgTVRLX0VUSF9QQVRIX0dETTFfRVNXCQlCSVQoTVRLX0VUSF9QQVRIX0dETTFfRVNXX0JJVCkKKworI2RlZmluZSBNVEtfR01BQzFfUkdNSUkJCShNVEtfRVRIX1BBVEhfR01BQzFfUkdNSUkgfCBNVEtfUkdNSUkpCisjZGVmaW5lIE1US19HTUFDMV9UUkdNSUkJKE1US19FVEhfUEFUSF9HTUFDMV9UUkdNSUkgfCBNVEtfVFJHTUlJKQorI2RlZmluZSBNVEtfR01BQzFfU0dNSUkJCShNVEtfRVRIX1BBVEhfR01BQzFfU0dNSUkgfCBNVEtfU0dNSUkpCisjZGVmaW5lIE1US19HTUFDMl9SR01JSQkJKE1US19FVEhfUEFUSF9HTUFDMl9SR01JSSB8IE1US19SR01JSSkKKyNkZWZpbmUgTVRLX0dNQUMyX1NHTUlJCQkoTVRLX0VUSF9QQVRIX0dNQUMyX1NHTUlJIHwgTVRLX1NHTUlJKQorI2RlZmluZSBNVEtfR01BQzJfR0VQSFkJCShNVEtfRVRIX1BBVEhfR01BQzJfR0VQSFkgfCBNVEtfR0VQSFkpCisjZGVmaW5lIE1US19HRE0xX0VTVwkJKE1US19FVEhfUEFUSF9HRE0xX0VTVyB8IE1US19FU1cpCisKKy8qIE1VWGVzIHByZXNlbnQgb24gU29DcyAqLworLyogMDogR0RNMSAtPiBHTUFDMSwgMTogR0RNMSAtPiBFU1cgKi8KKyNkZWZpbmUgTVRLX01VWF9HRE0xX1RPX0dNQUMxX0VTVyAoTVRLX0VUSF9NVVhfR0RNMV9UT19HTUFDMV9FU1cgfCBNVEtfTVVYKQorCisvKiAwOiBHTUFDMiAtPiBHRVBIWSwgMTogR01BQzAgLT4gR2VQSFkgKi8KKyNkZWZpbmUgTVRLX01VWF9HTUFDMl9HTUFDMF9UT19HRVBIWSAgICBcCisJKE1US19FVEhfTVVYX0dNQUMyX0dNQUMwX1RPX0dFUEhZIHwgTVRLX01VWCB8IE1US19JTkZSQSkKKworLyogMDogVTMgLT4gUVBIWSwgMTogR01BQzIgLT4gUVBIWSAqLworI2RlZmluZSBNVEtfTVVYX1UzX0dNQUMyX1RPX1FQSFkgICAgICAgIFwKKwkoTVRLX0VUSF9NVVhfVTNfR01BQzJfVE9fUVBIWSB8IE1US19NVVggfCBNVEtfSU5GUkEpCisKKy8qIDI6IEdNQUMxIC0+IFNHTUlJLCAzOiBHTUFDMiAtPiBTR01JSSAqLworI2RlZmluZSBNVEtfTVVYX0dNQUMxX0dNQUMyX1RPX1NHTUlJX1JHTUlJICAgICAgXAorCShNVEtfRVRIX01VWF9HTUFDMV9HTUFDMl9UT19TR01JSV9SR01JSSB8IE1US19NVVggfCBcCisJTVRLX1NIQVJFRF9TR01JSSkKKworLyogMDogR01BQ3ggLT4gR0VQSFksIDE6IEdNQUN4IC0+IFNHTUlJIHdoZXJlIHggaXMgMSBvciAyICovCisjZGVmaW5lIE1US19NVVhfR01BQzEyX1RPX0dFUEhZX1NHTUlJICAgXAorCShNVEtfRVRIX01VWF9HTUFDMTJfVE9fR0VQSFlfU0dNSUkgfCBNVEtfTVVYKQorCisjZGVmaW5lIE1US19IQVNfQ0FQUyhjYXBzLCBfeCkJCSgoKGNhcHMpICYgKF94KSkgPT0gKF94KSkKKworI2RlZmluZSBNVDc2MjFfQ0FQUyAgKE1US19HTUFDMV9SR01JSSB8IE1US19HTUFDMV9UUkdNSUkgfCBcCisJCSAgICAgIE1US19HTUFDMl9SR01JSSB8IE1US19TSEFSRURfSU5UIHwgXAorCQkgICAgICBNVEtfVFJHTUlJX01UNzYyMV9DTEsgfCBNVEtfUURNQSkKKworI2RlZmluZSBNVDc2MjJfQ0FQUyAgKE1US19HTUFDMV9SR01JSSB8IE1US19HTUFDMV9TR01JSSB8IE1US19HTUFDMl9SR01JSSB8IFwKKwkJICAgICAgTVRLX0dNQUMyX1NHTUlJIHwgTVRLX0dETTFfRVNXIHwgXAorCQkgICAgICBNVEtfTVVYX0dETTFfVE9fR01BQzFfRVNXIHwgXAorCQkgICAgICBNVEtfTVVYX0dNQUMxX0dNQUMyX1RPX1NHTUlJX1JHTUlJIHwgTVRLX1FETUEpCisKKyNkZWZpbmUgTVQ3NjIzX0NBUFMgIChNVEtfR01BQzFfUkdNSUkgfCBNVEtfR01BQzFfVFJHTUlJIHwgTVRLX0dNQUMyX1JHTUlJIHwgXAorCQkgICAgICBNVEtfUURNQSkKKworI2RlZmluZSBNVDc2MjhfQ0FQUyAgKE1US19TSEFSRURfSU5UIHwgTVRLX1NPQ19NVDc2MjgpCisKKyNkZWZpbmUgTVQ3NjI5X0NBUFMgIChNVEtfR01BQzFfU0dNSUkgfCBNVEtfR01BQzJfU0dNSUkgfCBNVEtfR01BQzJfR0VQSFkgfCBcCisJCSAgICAgIE1US19HRE0xX0VTVyB8IE1US19NVVhfR0RNMV9UT19HTUFDMV9FU1cgfCBcCisJCSAgICAgIE1US19NVVhfR01BQzJfR01BQzBfVE9fR0VQSFkgfCBcCisJCSAgICAgIE1US19NVVhfVTNfR01BQzJfVE9fUVBIWSB8IFwKKwkJICAgICAgTVRLX01VWF9HTUFDMTJfVE9fR0VQSFlfU0dNSUkgfCBNVEtfUURNQSkKKworI2RlZmluZSBNVDc5ODZfQ0FQUyAgIChNVEtfR01BQzFfU0dNSUkgfCBNVEtfR01BQzJfU0dNSUkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgIE1US19NVVhfR01BQzEyX1RPX0dFUEhZX1NHTUlJIHwgTVRLX1FETUEgfCBcCisgICAgICAgICAgICAgICAgICAgICAgIE1US19ORVRTWVNfVjIgfCBNVEtfUlNUQ1RSTF9QUEUxKQorCisjZGVmaW5lIE1UNzk4MV9DQVBTICAgKE1US19HTUFDMV9TR01JSSB8IE1US19HTUFDMl9TR01JSSB8IE1US19HTUFDMl9HRVBIWSB8IFwKKwkJCU1US19NVVhfR01BQzEyX1RPX0dFUEhZX1NHTUlJIHwgTVRLX1FETUEgfCBcCisJCQlNVEtfTVVYX1UzX0dNQUMyX1RPX1FQSFkgfCBNVEtfVTNfQ09QSFlfVjIgfCBcCisJCQlNVEtfTkVUU1lTX1YyKQorCisvKiBzdHJ1Y3QgbXRrX2V0aF9kYXRhIC0JVGhpcyBpcyB0aGUgc3RydWN0dXJlIGhvbGRpbmcgYWxsIGRpZmZlcmVuY2VzCisgKgkJCQlhbW9uZyB2YXJpb3VzIHBsYWZvcm1zCisgKiBAYW5hX3JnYzM6ICAgICAgICAgICAgICAgICAgIFRoZSBvZmZzZXQgZm9yIHJlZ2lzdGVyIEFOQV9SR0MzIHJlbGF0ZWQgdG8KKyAqCQkJCXNnbWlpc3lzIHN5c2NvbgorICogQGNhcHMJCQlGbGFncyBzaG93biB0aGUgZXh0cmEgY2FwYWJpbGl0eSBmb3IgdGhlIFNvQworICogQGh3X2ZlYXR1cmVzCQkJRmxhZ3Mgc2hvd24gSFcgZmVhdHVyZXMKKyAqIEByZXF1aXJlZF9jbGtzCQlGbGFncyBzaG93biB0aGUgYml0bWFwIGZvciByZXF1aXJlZCBjbG9ja3Mgb24KKyAqCQkJCXRoZSB0YXJnZXQgU29DCisgKiBAcmVxdWlyZWRfcGN0bAkJQSBib29sIHZhbHVlIHRvIHNob3cgd2hldGhlciB0aGUgU29DIHJlcXVpcmVzCisgKgkJCQl0aGUgZXh0cmEgc2V0dXAgZm9yIHRob3NlIHBpbnMgdXNlZCBieSBHTUFDLgorICovCitzdHJ1Y3QgbXRrX3NvY19kYXRhIHsKKwl1MzIgICAgICAgICAgICAgYW5hX3JnYzM7CisJdTMyCQljYXBzOworCXUzMgkJcmVxdWlyZWRfY2xrczsKKwlib29sCQlyZXF1aXJlZF9wY3RsOworCW5ldGRldl9mZWF0dXJlc190IGh3X2ZlYXR1cmVzOworCWJvb2wJCWhhc19zcmFtOworfTsKKworLyogY3VycmVudGx5IG5vIFNvQyBoYXMgbW9yZSB0aGFuIDIgbWFjcyAqLworI2RlZmluZSBNVEtfTUFYX0RFVlMJCQkyCisKKyNkZWZpbmUgTVRLX1NHTUlJX1BIWVNQRUVEX0FOICAgICAgICAgIEJJVCgzMSkKKyNkZWZpbmUgTVRLX1NHTUlJX1BIWVNQRUVEX01BU0sgICAgICAgIEdFTk1BU0soMiwgMCkKKyNkZWZpbmUgTVRLX1NHTUlJX1BIWVNQRUVEXzEwMDAgICAgICAgIEJJVCgwKQorI2RlZmluZSBNVEtfU0dNSUlfUEhZU1BFRURfMjUwMCAgICAgICAgQklUKDEpCisjZGVmaW5lIE1US19TR01JSV9QTl9TV0FQCSAgICAgICBCSVQoMTYpCisjZGVmaW5lIE1US19IQVNfRkxBR1MoZmxhZ3MsIF94KSAgICAgICAoKChmbGFncykgJiAoX3gpKSA9PSAoX3gpKQorCisvKiBzdHJ1Y3QgbXRrX3NnbWlpIC0gIFRoaXMgaXMgdGhlIHN0cnVjdHVyZSBob2xkaW5nIHNnbWlpIHJlZ21hcCBhbmQgaXRzCisgKiAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcmlzdGljcworICogQHJlZ21hcDogICAgICAgICAgICBUaGUgcmVnaXN0ZXIgbWFwIHBvaW50aW5nIGF0IHRoZSByYW5nZSB1c2VkIHRvIHNldHVwCisgKiAgICAgICAgICAgICAgICAgICAgIFNHTUlJIG1vZGVzCisgKiBAZmxhZ3M6ICAgICAgICAgICAgIFRoZSBlbnVtIHJlZmVycyB0byB3aGljaCBtb2RlIHRoZSBzZ21paSB3YW50cyB0byBydW4gb24KKyAqIEBhbmFfcmdjMzogICAgICAgICAgVGhlIG9mZnNldCByZWZlcnMgdG8gcmVnaXN0ZXIgQU5BX1JHQzMgcmVsYXRlZCB0byByZWdtYXAKKyAqLworCitzdHJ1Y3QgbXRrX3NnbWlpIHsKKwlzdHJ1Y3QgcmVnbWFwICAgKnJlZ21hcFtNVEtfTUFYX0RFVlNdOworCXUzMiAgICAgICAgICAgICBmbGFnc1tNVEtfTUFYX0RFVlNdOworCXUzMiAgICAgICAgICAgICBhbmFfcmdjMzsKK307CisKKy8qIHN0cnVjdCBtdGtfZXRoIC0JVGhpcyBpcyB0aGUgbWFpbiBkYXRhc3J1Y3R1cmUgZm9yIGhvbGRpbmcgdGhlIHN0YXRlCisgKgkJCW9mIHRoZSBkcml2ZXIKKyAqIEBkZXY6CQlUaGUgZGV2aWNlIHBvaW50ZXIKKyAqIEBiYXNlOgkJVGhlIG1hcHBlZCByZWdpc3RlciBpL28gYmFzZQorICogQHBhZ2VfbG9jazoJCU1ha2Ugc3VyZSB0aGF0IHJlZ2lzdGVyIG9wZXJhdGlvbnMgYXJlIGF0b21pYworICogQHR4X2lycV9fbG9jazoJTWFrZSBzdXJlIHRoYXQgSVJRIHJlZ2lzdGVyIG9wZXJhdGlvbnMgYXJlIGF0b21pYworICogQHJ4X2lycV9fbG9jazoJTWFrZSBzdXJlIHRoYXQgSVJRIHJlZ2lzdGVyIG9wZXJhdGlvbnMgYXJlIGF0b21pYworICogQGR1bW15X2RldjoJCXdlIHJ1biAyIG5ldGRldnMgb24gMSBwaHlzaWNhbCBETUEgcmluZyBhbmQgbmVlZCBhCisgKgkJCWR1bW15IGZvciBOQVBJIHRvIHdvcmsKKyAqIEBuZXRkZXY6CQlUaGUgbmV0ZGV2IGluc3RhbmNlcworICogQG1hYzoJCUVhY2ggbmV0ZGV2IGlzIGxpbmtlZCB0byBhIHBoeXNpY2FsIE1BQworICogQGlycToJCVRoZSBJUlEgdGhhdCB3ZSBhcmUgdXNpbmcKKyAqIEBtc2dfZW5hYmxlOgkJRXRodG9vbCBtc2cgbGV2ZWwKKyAqIEBldGhzeXM6CQlUaGUgcmVnaXN0ZXIgbWFwIHBvaW50aW5nIGF0IHRoZSByYW5nZSB1c2VkIHRvIHNldHVwCisgKgkJCU1JSSBtb2RlcworICogQGluZnJhOiAgICAgICAgICAgICAgVGhlIHJlZ2lzdGVyIG1hcCBwb2ludGluZyBhdCB0aGUgcmFuZ2UgdXNlZCB0byBzZXR1cAorICogICAgICAgICAgICAgICAgICAgICAgU0dNSUkgYW5kIEdlUEhZIHBhdGgKKyAqIEBwY3RsOgkJVGhlIHJlZ2lzdGVyIG1hcCBwb2ludGluZyBhdCB0aGUgcmFuZ2UgdXNlZCB0byBzZXR1cAorICoJCQlHTUFDIHBvcnQgZHJpdmUvc2xldyB2YWx1ZXMKKyAqIEBkbWFfcmVmY250OgkJdHJhY2sgaG93IG1hbnkgbmV0ZGV2cyBhcmUgdXNpbmcgdGhlIERNQSBlbmdpbmUKKyAqIEB0eF9yaW5nOgkJUG9pbnRlciB0byB0aGUgbWVtb3J5IGhvbGRpbmcgaW5mbyBhYm91dCB0aGUgVFggcmluZworICogQHJ4X3Jpbmc6CQlQb2ludGVyIHRvIHRoZSBtZW1vcnkgaG9sZGluZyBpbmZvIGFib3V0IHRoZSBSWCByaW5nCisgKiBAcnhfcmluZ19xZG1hOglQb2ludGVyIHRvIHRoZSBtZW1vcnkgaG9sZGluZyBpbmZvIGFib3V0IHRoZSBRRE1BIFJYIHJpbmcKKyAqIEB0eF9uYXBpOgkJVGhlIFRYIE5BUEkgc3RydWN0CisgKiBAcnhfbmFwaToJCVRoZSBSWCBOQVBJIHN0cnVjdAorICogQHNjcmF0Y2hfcmluZzoJTmV3ZXIgU29DcyBuZWVkIG1lbW9yeSBmb3IgYSBzZWNvbmQgSFcgbWFuYWdlZCBUWCByaW5nCisgKiBAcGh5X3NjcmF0Y2hfcmluZzoJcGh5c2ljYWwgYWRkcmVzcyBvZiBzY3JhdGNoX3JpbmcKKyAqIEBzY3JhdGNoX2hlYWQ6CVRoZSBzY3JhdGNoIG1lbW9yeSB0aGF0IHNjcmF0Y2hfcmluZyBwb2ludHMgdG8uCisgKiBAY2xrczoJCWNsb2NrIGFycmF5IGZvciBhbGwgY2xvY2tzIHJlcXVpcmVkCisgKiBAbWlpX2J1czoJCUlmIHRoZXJlIGlzIGEgYnVzIHdlIG5lZWQgdG8gY3JlYXRlIGFuIGluc3RhbmNlIGZvciBpdAorICogQHBlbmRpbmdfd29yazoJVGhlIHdvcmtxdWV1ZSB1c2VkIHRvIHJlc2V0IHRoZSBkbWEgcmluZworICogQHN0YXRlOgkJSW5pdGlhbGl6YXRpb24gYW5kIHJ1bnRpbWUgc3RhdGUgb2YgdGhlIGRldmljZQorICogQHNvYzoJCUhvbGRpbmcgc3BlY2lmaWMgZGF0YSBhbW9uZyB2YWlvdXMgU29DcworICovCisKK3N0cnVjdCBtdGtfZXRoIHsKKwlzdHJ1Y3QgZGV2aWNlCQkJKmRldjsKKwl2b2lkIF9faW9tZW0JCQkqYmFzZTsKKwlzcGlubG9ja190CQkJcGFnZV9sb2NrOworCXNwaW5sb2NrX3QJCQl0eF9pcnFfbG9jazsKKwlzcGlubG9ja190CQkJcnhfaXJxX2xvY2s7CisJc3RydWN0IG5ldF9kZXZpY2UJCWR1bW15X2RldjsKKwlzdHJ1Y3QgbmV0X2RldmljZQkJKm5ldGRldltNVEtfTUFYX0RFVlNdOworCXN0cnVjdCBtdGtfbWFjCQkJKm1hY1tNVEtfTUFYX0RFVlNdOworCWludAkJCQlpcnFbTVRLX01BWF9JUlFfTlVNXTsKKwl1MzIJCQkJbXNnX2VuYWJsZTsKKwl1bnNpZ25lZCBsb25nCQkJc3lzY2xrOworCXN0cnVjdCByZWdtYXAJCQkqZXRoc3lzOworCXN0cnVjdCByZWdtYXAgICAgICAgICAgICAgICAgICAgKmluZnJhOworCXN0cnVjdCBtdGtfc2dtaWkgICAgICAgICAgICAgICAgKnNnbWlpOworCXN0cnVjdCByZWdtYXAJCQkqcGN0bDsKKwlib29sCQkJCWh3bHJvOworCXJlZmNvdW50X3QJCQlkbWFfcmVmY250OworCXN0cnVjdCBtdGtfdHhfcmluZwkJdHhfcmluZzsKKwlzdHJ1Y3QgbXRrX3J4X3JpbmcJCXJ4X3JpbmdbTVRLX01BWF9SWF9SSU5HX05VTV07CisJc3RydWN0IG10a19yeF9yaW5nCQlyeF9yaW5nX3FkbWE7CisJc3RydWN0IG5hcGlfc3RydWN0CQl0eF9uYXBpOworCXN0cnVjdCBtdGtfbmFwaQkJCXJ4X25hcGlbTVRLX1JYX05BUElfTlVNXTsKKwlzdHJ1Y3QgbXRrX3R4X2RtYQkJKnNjcmF0Y2hfcmluZzsKKwlkbWFfYWRkcl90CQkJcGh5X3NjcmF0Y2hfcmluZzsKKwl2b2lkCQkJCSpzY3JhdGNoX2hlYWQ7CisJc3RydWN0IGNsawkJCSpjbGtzW01US19DTEtfTUFYXTsKKworCXN0cnVjdCBtaWlfYnVzCQkJKm1paV9idXM7CisJc3RydWN0IHdvcmtfc3RydWN0CQlwZW5kaW5nX3dvcms7CisJdW5zaWduZWQgbG9uZwkJCXN0YXRlOworCisJY29uc3Qgc3RydWN0IG10a19zb2NfZGF0YQkqc29jOworCisJdTMyCQkJCXR4X2ludF9tYXNrX3JlZzsKKwl1MzIJCQkJdHhfaW50X3N0YXR1c19yZWc7CisJdTMyCQkJCXJ4X2RtYV9sNF92YWxpZDsKKwlpbnQJCQkJaXBfYWxpZ247CisJc3BpbmxvY2tfdAkJCXN5c2NmZzBfbG9jazsKK307CisKKy8qIHN0cnVjdCBtdGtfbWFjIC0JdGhlIHN0cnVjdHVyZSB0aGF0IGhvbGRzIHRoZSBpbmZvIGFib3V0IHRoZSBNQUNzIG9mIHRoZQorICoJCQlTb0MKKyAqIEBpZDoJCQlUaGUgbnVtYmVyIG9mIHRoZSBNQUMKKyAqIEBpbnRlcmZhY2U6CQlJbnRlcmZhY2UgbW9kZSBrZXB0IGZvciBkZXRlY3RpbmcgY2hhbmdlIGluIGh3IHNldHRpbmdzCisgKiBAb2Zfbm9kZToJCU91ciBkZXZpY2V0cmVlIG5vZGUKKyAqIEBodzoJCQlCYWNrcG9pbnRlciB0byBvdXIgbWFpbiBkYXRhc3RydXR1cmUKKyAqIEBod19zdGF0czoJCVBhY2tldCBzdGF0aXN0aWNzIGNvdW50ZXIKKyAqLworc3RydWN0IG10a19tYWMgeworCXVuc2lnbmVkIGludAkJCWlkOworCXBoeV9pbnRlcmZhY2VfdAkJCWludGVyZmFjZTsKKwl1bnNpZ25lZCBpbnQJCQltb2RlOworCWludAkJCQlzcGVlZDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUJCSpvZl9ub2RlOworCXN0cnVjdCBwaHlsaW5rCQkJKnBoeWxpbms7CisJc3RydWN0IHBoeWxpbmtfY29uZmlnCQlwaHlsaW5rX2NvbmZpZzsKKwlzdHJ1Y3QgbXRrX2V0aAkJCSpodzsKKwlzdHJ1Y3QgbXRrX2h3X3N0YXRzCQkqaHdfc3RhdHM7CisJX19iZTMyCQkJCWh3bHJvX2lwW01US19NQVhfTFJPX0lQX0NOVF07CisJaW50CQkJCWh3bHJvX2lwX2NudDsKK307CisKKy8qIHRoZSBzdHJ1Y3QgZGVzY3JpYmluZyB0aGUgU29DLiB0aGVzZSBhcmUgZGVjbGFyZWQgaW4gdGhlIHNvY194eXouYyBmaWxlcyAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfbXRrX21hdGNoW107CitleHRlcm4gdTMyIG10a19od2xyb19zdGF0c19lYmw7CisKKy8qIHJlYWQgdGhlIGhhcmR3YXJlIHN0YXR1cyByZWdpc3RlciAqLwordm9pZCBtdGtfc3RhdHNfdXBkYXRlX21hYyhzdHJ1Y3QgbXRrX21hYyAqbWFjKTsKKwordm9pZCBtdGtfdzMyKHN0cnVjdCBtdGtfZXRoICpldGgsIHUzMiB2YWwsIHVuc2lnbmVkIHJlZyk7Cit1MzIgbXRrX3IzMihzdHJ1Y3QgbXRrX2V0aCAqZXRoLCB1bnNpZ25lZCByZWcpOworCitpbnQgbXRrX3NnbWlpX2luaXQoc3RydWN0IG10a19zZ21paSAqc3MsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCSAgIHUzMiBhbmFfcmdjMyk7CitpbnQgbXRrX3NnbWlpX3NldHVwX21vZGVfYW4oc3RydWN0IG10a19zZ21paSAqc3MsIHVuc2lnbmVkIGludCBpZCk7CitpbnQgbXRrX3NnbWlpX3NldHVwX21vZGVfZm9yY2Uoc3RydWN0IG10a19zZ21paSAqc3MsIHVuc2lnbmVkIGludCBpZCwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSk7Cit2b2lkIG10a19zZ21paV9yZXN0YXJ0X2FuKHN0cnVjdCBtdGtfZXRoICpldGgsIGludCBtYWNfaWQpOworCitpbnQgbXRrX2dtYWNfc2dtaWlfcGF0aF9zZXR1cChzdHJ1Y3QgbXRrX2V0aCAqZXRoLCBpbnQgbWFjX2lkKTsKK2ludCBtdGtfZ21hY19nZXBoeV9wYXRoX3NldHVwKHN0cnVjdCBtdGtfZXRoICpldGgsIGludCBtYWNfaWQpOworaW50IG10a19nbWFjX3JnbWlpX3BhdGhfc2V0dXAoc3RydWN0IG10a19ldGggKmV0aCwgaW50IG1hY19pZCk7CisKKyNlbmRpZiAvKiBNVEtfRVRIX0ggKi8KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2huYXQvTWFrZWZpbGUgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19obmF0L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMWJiY2IKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19obmF0L01ha2VmaWxlCkBAIC0wLDAgKzEsNSBAQAorY2NmbGFncy15PS1XZXJyb3IKKworb2JqLSQoQ09ORklHX05FVF9NRURJQVRFS19ITkFUKSAgICAgICAgICs9IG10a2huYXQubworbXRraG5hdC1vYmpzIDo9IGhuYXQubyBobmF0X25mX2hvb2subyBobmF0X2RlYnVnZnMubyBobmF0X21jYXN0Lm8KK210a2huYXQtJChDT05GSUdfTkVUX0RTQV9NVDc1MzApCSs9IGhuYXRfc3RhZy5vCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19obmF0L2huYXQuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2huYXQvaG5hdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4YTgzYjgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19obmF0L2huYXQuYwpAQCAtMCwwICsxLDg2NiBAQAorLyogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBTZWFuIFdhbmcgPHNlYW4ud2FuZ0BtZWRpYXRlay5jb20+CisgKiAgIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEpvaG4gQ3Jpc3BpbiA8YmxvZ2ljQG9wZW53cnQub3JnPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaWYuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc2V0Lmg+CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisjaW5jbHVkZSA8bmV0L25ldGxpbmsuaD4KKworI2luY2x1ZGUgIm5mX2huYXRfbXRrLmgiCisjaW5jbHVkZSAiaG5hdC5oIgorCitzdHJ1Y3QgbXRrX2huYXQgKmhuYXRfcHJpdjsKK3N0YXRpYyBzdHJ1Y3Qgc29ja2V0ICpfaG5hdF9yb2FtX3NvY2s7CitzdGF0aWMgc3RydWN0IHdvcmtfc3RydWN0IF9obmF0X3JvYW1fd29yazsKKworaW50ICgqcmFfc3dfbmF0X2hvb2tfcngpKHN0cnVjdCBza19idWZmICpza2IpID0gTlVMTDsKK0VYUE9SVF9TWU1CT0wocmFfc3dfbmF0X2hvb2tfcngpOworaW50ICgqcmFfc3dfbmF0X2hvb2tfdHgpKHN0cnVjdCBza19idWZmICpza2IsIGludCBnbWFjX25vKSA9IE5VTEw7CitFWFBPUlRfU1lNQk9MKHJhX3N3X25hdF9ob29rX3R4KTsKKworaW50ICgqcHBlX2RlbF9lbnRyeV9ieV9tYWMpKHVuc2lnbmVkIGNoYXIgKm1hYykgPSBOVUxMOworRVhQT1JUX1NZTUJPTChwcGVfZGVsX2VudHJ5X2J5X21hYyk7CisKK3ZvaWQgKCpwcGVfZGV2X3JlZ2lzdGVyX2hvb2spKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpID0gTlVMTDsKK0VYUE9SVF9TWU1CT0wocHBlX2Rldl9yZWdpc3Rlcl9ob29rKTsKK3ZvaWQgKCpwcGVfZGV2X3VucmVnaXN0ZXJfaG9vaykoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgPSBOVUxMOworRVhQT1JUX1NZTUJPTChwcGVfZGV2X3VucmVnaXN0ZXJfaG9vayk7CisKK3N0YXRpYyB2b2lkIGhuYXRfc21hX2J1aWxkX2VudHJ5KHN0cnVjdCB0aW1lcl9saXN0ICp0KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IENGR19QUEVfTlVNOyBpKyspCisJCWNyX3NldF9maWVsZChobmF0X3ByaXYtPnBwZV9iYXNlW2ldICsgUFBFX1RCX0NGRywKKwkJCSAgICAgU01BLCBTTUFfRldEX0NQVV9CVUlMRF9FTlRSWSk7Cit9CisKK3ZvaWQgaG5hdF9jYWNoZV9lYmwoaW50IGVuYWJsZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBDRkdfUFBFX05VTTsgaSsrKSB7CisJCWNyX3NldF9maWVsZChobmF0X3ByaXYtPnBwZV9iYXNlW2ldICsgUFBFX0NBSF9DVFJMLCBDQUhfWF9NT0RFLCAxKTsKKwkJY3Jfc2V0X2ZpZWxkKGhuYXRfcHJpdi0+cHBlX2Jhc2VbaV0gKyBQUEVfQ0FIX0NUUkwsIENBSF9YX01PREUsIDApOworCQljcl9zZXRfZmllbGQoaG5hdF9wcml2LT5wcGVfYmFzZVtpXSArIFBQRV9DQUhfQ1RSTCwgQ0FIX0VOLCBlbmFibGUpOworCX0KK30KKworc3RhdGljIHZvaWQgaG5hdF9yZXNldF90aW1lc3RhbXAoc3RydWN0IHRpbWVyX2xpc3QgKnQpCit7CisJc3RydWN0IGZvZV9lbnRyeSAqZW50cnk7CisJaW50IGhhc2hfaW5kZXg7CisKKwlobmF0X2NhY2hlX2VibCgwKTsKKwljcl9zZXRfZmllbGQoaG5hdF9wcml2LT5wcGVfYmFzZVswXSArIFBQRV9UQl9DRkcsIFRDUF9BR0UsIDApOworCWNyX3NldF9maWVsZChobmF0X3ByaXYtPnBwZV9iYXNlWzBdICsgUFBFX1RCX0NGRywgVURQX0FHRSwgMCk7CisJd3JpdGVsKDAsIGhuYXRfcHJpdi0+ZmVfYmFzZSArIDB4MDAxMCk7CisKKwlmb3IgKGhhc2hfaW5kZXggPSAwOyBoYXNoX2luZGV4IDwgaG5hdF9wcml2LT5mb2VfZXRyeV9udW07IGhhc2hfaW5kZXgrKykgeworCQllbnRyeSA9IGhuYXRfcHJpdi0+Zm9lX3RhYmxlX2NwdVswXSArIGhhc2hfaW5kZXg7CisJCWlmIChlbnRyeS0+YmZpYjEuc3RhdGUgPT0gQklORCkKKwkJCWVudHJ5LT5iZmliMS50aW1lX3N0YW1wID0KKwkJCQlyZWFkbChobmF0X3ByaXYtPmZlX2Jhc2UgKyAweDAwMTApICYgKDB4RkZGRik7CisJfQorCisJY3Jfc2V0X2ZpZWxkKGhuYXRfcHJpdi0+cHBlX2Jhc2VbMF0gKyBQUEVfVEJfQ0ZHLCBUQ1BfQUdFLCAxKTsKKwljcl9zZXRfZmllbGQoaG5hdF9wcml2LT5wcGVfYmFzZVswXSArIFBQRV9UQl9DRkcsIFVEUF9BR0UsIDEpOworCWhuYXRfY2FjaGVfZWJsKDEpOworCisJbW9kX3RpbWVyKCZobmF0X3ByaXYtPmhuYXRfcmVzZXRfdGltZXN0YW1wX3RpbWVyLCBqaWZmaWVzICsgMTQ0MDAgKiBIWik7Cit9CisKK3N0YXRpYyB2b2lkIGNyX3NldF9iaXRzKHZvaWQgX19pb21lbSAqcmVnLCB1MzIgYnMpCit7CisJdTMyIHZhbCA9IHJlYWRsKHJlZyk7CisKKwl2YWwgfD0gYnM7CisJd3JpdGVsKHZhbCwgcmVnKTsKK30KKworc3RhdGljIHZvaWQgY3JfY2xyX2JpdHModm9pZCBfX2lvbWVtICpyZWcsIHUzMiBicykKK3sKKwl1MzIgdmFsID0gcmVhZGwocmVnKTsKKworCXZhbCAmPSB+YnM7CisJd3JpdGVsKHZhbCwgcmVnKTsKK30KKwordm9pZCBjcl9zZXRfZmllbGQodm9pZCBfX2lvbWVtICpyZWcsIHUzMiBmaWVsZCwgdTMyIHZhbCkKK3sKKwl1bnNpZ25lZCBpbnQgdHYgPSByZWFkbChyZWcpOworCisJdHYgJj0gfmZpZWxkOworCXR2IHw9ICgodmFsKSA8PCAoZmZzKCh1bnNpZ25lZCBpbnQpZmllbGQpIC0gMSkpOworCXdyaXRlbCh0diwgcmVnKTsKK30KKworLypib3VuZGFyeSBlbnRyeSBjYW4ndCBiZSB1c2VkIHRvIGFjY2VsZXJhdGUgZGF0YSBmbG93Ki8KK3N0YXRpYyB2b2lkIGV4Y2x1ZGVfYm91bmRhcnlfZW50cnkoc3RydWN0IGZvZV9lbnRyeSAqZm9lX3RhYmxlX2NwdSkKK3sKKwlpbnQgZW50cnlfYmFzZSA9IDA7CisJaW50IGJhZF9lbnRyeSwgaSwgajsKKwlzdHJ1Y3QgZm9lX2VudHJ5ICpmb2VfZW50cnk7CisJLyp0aGVzZSBlbnRyaWVzIGFyZSBib3VuZGFyeSBldmVyeSAxMjggZW50cmllcyovCisJaW50IGJvdW5kYXJ5X2VudHJ5X29mZnNldFs4XSA9IHsgMTIsIDI1LCAzOCwgNTEsIDc2LCA4OSwgMTAyLCAxMTV9OworCisJaWYgKCFmb2VfdGFibGVfY3B1KQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBlbnRyeV9iYXNlIDwgaG5hdF9wcml2LT5mb2VfZXRyeV9udW07IGkrKykgeworCQkvKiBzZXQgYm91bmRhcnkgZW50cmllcyBhcyBzdGF0aWMqLworCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSB7CisJCQliYWRfZW50cnkgPSBlbnRyeV9iYXNlICsgYm91bmRhcnlfZW50cnlfb2Zmc2V0W2pdOworCQkJZm9lX2VudHJ5ID0gJmZvZV90YWJsZV9jcHVbYmFkX2VudHJ5XTsKKwkJCWZvZV9lbnRyeS0+dWRpYjEuc3RhID0gMTsKKwkJfQorCQllbnRyeV9iYXNlID0gKGkgKyAxKSAqIDEyODsKKwl9Cit9CisKK3ZvaWQgc2V0X2dtYWNfcHBlX2Z3ZChpbnQgaWQsIGludCBlbmFibGUpCit7CisJdm9pZCBfX2lvbWVtICpyZWc7CisJdTMyIHZhbDsKKworCXJlZyA9IGhuYXRfcHJpdi0+ZmVfYmFzZSArIChpZCA/IEdETUEyX0ZXRF9DRkcgOiBHRE1BMV9GV0RfQ0ZHKTsKKworCWlmIChlbmFibGUpIHsKKwkJY3Jfc2V0X2JpdHMocmVnLCBCSVRTX0dETV9BTExfRlJDX1BfUFBFKTsKKworCQlyZXR1cm47CisJfQorCisJLypkaXNhYmxlZCAqLworCXZhbCA9IHJlYWRsKHJlZyk7CisJaWYgKCh2YWwgJiBHRE1fQUxMX0ZSQ19NQVNLKSA9PSBCSVRTX0dETV9BTExfRlJDX1BfUFBFKQorCQljcl9zZXRfZmllbGQocmVnLCBHRE1fQUxMX0ZSQ19NQVNLLAorCQkJICAgICBCSVRTX0dETV9BTExfRlJDX1BfQ1BVX1BETUEpOworfQorCitzdGF0aWMgaW50IGVudHJ5X21hY19jbXAoc3RydWN0IGZvZV9lbnRyeSAqZW50cnksIHU4ICptYWMpCit7CisJaW50IHJldCA9IDA7CisKKwlpZihJU19JUFY0X0dSUChlbnRyeSkpIHsKKwkJaWYoKChzd2FiMzIoZW50cnktPmlwdjRfaG5hcHQuZG1hY19oaSkgPT0gKih1MzIgKiltYWMpICYmCisJCQkoc3dhYjE2KGVudHJ5LT5pcHY0X2huYXB0LmRtYWNfbG8pID09ICoodTE2ICopJm1hY1s0XSkpIHx8CisJCQkoKHN3YWIzMihlbnRyeS0+aXB2NF9obmFwdC5zbWFjX2hpKSA9PSAqKHUzMiAqKW1hYykgJiYKKwkJCShzd2FiMTYoZW50cnktPmlwdjRfaG5hcHQuc21hY19sbykgPT0gKih1MTYgKikmbWFjWzRdKSkpCisJCQlyZXQgPSAxOworCX0gZWxzZSB7CisJCWlmKCgoc3dhYjMyKGVudHJ5LT5pcHY2XzV0X3JvdXRlLmRtYWNfaGkpID09ICoodTMyICopbWFjKSAmJgorCQkJKHN3YWIxNihlbnRyeS0+aXB2Nl81dF9yb3V0ZS5kbWFjX2xvKSA9PSAqKHUxNiAqKSZtYWNbNF0pKSB8fAorCQkJKChzd2FiMzIoZW50cnktPmlwdjZfNXRfcm91dGUuc21hY19oaSkgPT0gKih1MzIgKiltYWMpICYmCisJCQkoc3dhYjE2KGVudHJ5LT5pcHY2XzV0X3JvdXRlLnNtYWNfbG8pID09ICoodTE2ICopJm1hY1s0XSkpKQorCQkJcmV0ID0gMTsKKwl9CisKKwlpZiAocmV0ICYmIGRlYnVnX2xldmVsID49IDIpCisJCXByX2luZm8oIm1hYz0lcE1cbiIsIG1hYyk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgZW50cnlfZGVsZXRlX2J5X21hYyh1OCAqbWFjKQoreworCXN0cnVjdCBmb2VfZW50cnkgKmVudHJ5ID0gTlVMTDsKKwlpbnQgaW5kZXgsIGksIHJldCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgQ0ZHX1BQRV9OVU07IGkrKykgeworCQllbnRyeSA9IGhuYXRfcHJpdi0+Zm9lX3RhYmxlX2NwdVtpXTsKKwkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgREVGX0VUUllfTlVNOyBlbnRyeSsrLCBpbmRleCsrKSB7CisJCQlpZihlbnRyeS0+YmZpYjEuc3RhdGUgPT0gQklORCAmJiBlbnRyeV9tYWNfY21wKGVudHJ5LCBtYWMpKSB7CisJCQkJbWVtc2V0KGVudHJ5LCAwLCBzaXplb2YoKmVudHJ5KSk7CisJCQkJaG5hdF9jYWNoZV9lYmwoMSk7CisJCQkJaWYgKGRlYnVnX2xldmVsID49IDIpCisJCQkJCXByX2luZm8oImRlbGV0ZSBlbnRyeSBpZHggPSAlZFxuIiwgaW5kZXgpOworCQkJCXJldCsrOworCQkJfQorCQl9CisJfQorCisJaWYoIXJldCAmJiBkZWJ1Z19sZXZlbCA+PSAyKQorCQlwcl9pbmZvKCJlbnRyeSBub3QgZm91bmRcbiIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgaG5hdF9yb2FtX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBrdmVjIGlvdjsKKwlzdHJ1Y3QgbXNnaGRyIG1zZzsKKwlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKKwlzdHJ1Y3QgbmRtc2cgKm5kbTsKKwlzdHJ1Y3QgbmxhdHRyICpubGE7CisJdTggcmN2X2J1Zls1MTJdOworCWludCBsZW47CisKKwlpZiAoIV9obmF0X3JvYW1fc29jaykKKwkJcmV0dXJuOworCisJaW92Lmlvdl9iYXNlID0gcmN2X2J1ZjsKKwlpb3YuaW92X2xlbiA9IHNpemVvZihyY3ZfYnVmKTsKKwltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKG1zZykpOworCW1zZy5tc2dfbmFtZWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbmwpOworCisJbGVuID0ga2VybmVsX3JlY3Ztc2coX2huYXRfcm9hbV9zb2NrLCAmbXNnLCAmaW92LCAxLCBpb3YuaW92X2xlbiwgMCk7CisJaWYgKGxlbiA8PSAwKQorCQlnb3RvIG91dDsKKworCW5saCA9IChzdHJ1Y3Qgbmxtc2doZHIqKXJjdl9idWY7CisJaWYgKCFOTE1TR19PSyhubGgsIGxlbikgfHwgbmxoLT5ubG1zZ190eXBlICE9IFJUTV9ORVdORUlHSCkKKwkJZ290byBvdXQ7CisKKwlsZW4gPSBubGgtPm5sbXNnX2xlbiAtIE5MTVNHX0hEUkxFTjsKKwluZG0gPSAoc3RydWN0IG5kbXNnICopTkxNU0dfREFUQShubGgpOworCWlmIChuZG0tPm5kbV9mYW1pbHkgIT0gUEZfQlJJREdFKQorCQlnb3RvIG91dDsKKworCW5sYSA9IChzdHJ1Y3QgbmxhdHRyICopKCh1OCAqKW5kbSArIHNpemVvZihzdHJ1Y3QgbmRtc2cpKTsKKwlsZW4gLT0gTkxNU0dfTEVOR1RIKHNpemVvZihzdHJ1Y3QgbmRtc2cpKTsKKwl3aGlsZSAobmxhX29rKG5sYSwgbGVuKSkgeworCQlpZiAobmxhX3R5cGUobmxhKSA9PSBOREFfTExBRERSKSB7CisJCQllbnRyeV9kZWxldGVfYnlfbWFjKG5sYV9kYXRhKG5sYSkpOworCQl9CisJCW5sYSA9IG5sYV9uZXh0KG5sYSwgJmxlbik7CisJfQorCitvdXQ6CisJc2NoZWR1bGVfd29yaygmX2huYXRfcm9hbV93b3JrKTsKK30KKworc3RhdGljIGludCBobmF0X3JvYW1pbmdfZW5hYmxlKHZvaWQpCit7CisJc3RydWN0IHNvY2tldCAqc29jayA9IE5VTEw7CisJc3RydWN0IHNvY2thZGRyX25sIGFkZHI7CisJaW50IHJldDsKKworCUlOSVRfV09SSygmX2huYXRfcm9hbV93b3JrLCBobmF0X3JvYW1faGFuZGxlcik7CisKKwlyZXQgPSBzb2NrX2NyZWF0ZV9rZXJuKCZpbml0X25ldCwgQUZfTkVUTElOSywgU09DS19SQVcsIE5FVExJTktfUk9VVEUsICZzb2NrKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlfaG5hdF9yb2FtX3NvY2sgPSBzb2NrOworCisJYWRkci5ubF9mYW1pbHkgPSBBRl9ORVRMSU5LOworCWFkZHIubmxfcGFkID0gMDsKKwlhZGRyLm5sX3BpZCA9IDY1NTM0OworCWFkZHIubmxfZ3JvdXBzID0gMSA8PCAoUlROTEdSUF9ORUlHSCAtIDEpOworCXJldCA9IGtlcm5lbF9iaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwgc2l6ZW9mKGFkZHIpKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlzY2hlZHVsZV93b3JrKCZfaG5hdF9yb2FtX3dvcmspOworCXByX2luZm8oImhuYXQgcm9hbWluZyB3b3JrIGVuYWJsZVxuIik7CisKKwlyZXR1cm4gMDsKK291dDoKKwlpZiAoc29jaykKKwkJc29ja19yZWxlYXNlKHNvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgaG5hdF9yb2FtaW5nX2Rpc2FibGUodm9pZCkKK3sKKwlpZiAoX2huYXRfcm9hbV9zb2NrKQorCQlzb2NrX3JlbGVhc2UoX2huYXRfcm9hbV9zb2NrKTsKKwlfaG5hdF9yb2FtX3NvY2sgPSBOVUxMOworCXByX2luZm8oImhuYXQgcm9hbWluZyB3b3JrIGRpc2FibGVcbiIpOworfQorCitzdGF0aWMgaW50IGhuYXRfc3RhcnQodTMyIHBwZV9pZCkKK3sKKwl1MzIgZm9lX3RhYmxlX3N6OworCXUzMiBmb2VfbWliX3RiX3N6OworCWludCBldHJ5X251bV9jZmc7CisKKwlpZiAocHBlX2lkID49IENGR19QUEVfTlVNKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIG1hcHAgdGhlIEZPRSB0YWJsZSAqLworCWZvciAoZXRyeV9udW1fY2ZnID0gREVGX0VUUllfTlVNX0NGRyA7IGV0cnlfbnVtX2NmZyA+PSAwIDsgZXRyeV9udW1fY2ZnLS0sIGhuYXRfcHJpdi0+Zm9lX2V0cnlfbnVtIC89IDIpIHsKKwkJZm9lX3RhYmxlX3N6ID0gaG5hdF9wcml2LT5mb2VfZXRyeV9udW0gKiBzaXplb2Yoc3RydWN0IGZvZV9lbnRyeSk7CisJCWhuYXRfcHJpdi0+Zm9lX3RhYmxlX2NwdVtwcGVfaWRdID0gZG1hX2FsbG9jX2NvaGVyZW50KAorCQkJCWhuYXRfcHJpdi0+ZGV2LCBmb2VfdGFibGVfc3osCisJCQkJJmhuYXRfcHJpdi0+Zm9lX3RhYmxlX2RldltwcGVfaWRdLCBHRlBfS0VSTkVMKTsKKworCQlpZiAoaG5hdF9wcml2LT5mb2VfdGFibGVfY3B1W3BwZV9pZF0pCisJCQlicmVhazsKKwl9CisKKwlpZiAoIWhuYXRfcHJpdi0+Zm9lX3RhYmxlX2NwdVtwcGVfaWRdKQorCQlyZXR1cm4gLTE7CisJZGV2X2luZm8oaG5hdF9wcml2LT5kZXYsICJQUEUlZCBlbnRyeSBudW1iZXIgPSAlZFxuIiwKKwkJIHBwZV9pZCwgaG5hdF9wcml2LT5mb2VfZXRyeV9udW0pOworCisJd3JpdGVsKGhuYXRfcHJpdi0+Zm9lX3RhYmxlX2RldltwcGVfaWRdLCBobmF0X3ByaXYtPnBwZV9iYXNlW3BwZV9pZF0gKyBQUEVfVEJfQkFTRSk7CisJbWVtc2V0KGhuYXRfcHJpdi0+Zm9lX3RhYmxlX2NwdVtwcGVfaWRdLCAwLCBmb2VfdGFibGVfc3opOworCisJaWYgKGhuYXRfcHJpdi0+ZGF0YS0+dmVyc2lvbiA9PSBNVEtfSE5BVF9WMSkKKwkJZXhjbHVkZV9ib3VuZGFyeV9lbnRyeShobmF0X3ByaXYtPmZvZV90YWJsZV9jcHVbcHBlX2lkXSk7CisKKwlpZiAoaG5hdF9wcml2LT5kYXRhLT5wZXJfZmxvd19hY2NvdW50aW5nKSB7CisJCWZvZV9taWJfdGJfc3ogPSBobmF0X3ByaXYtPmZvZV9ldHJ5X251bSAqIHNpemVvZihzdHJ1Y3QgbWliX2VudHJ5KTsKKwkJaG5hdF9wcml2LT5mb2VfbWliX2NwdVtwcGVfaWRdID0KKwkJCWRtYV9hbGxvY19jb2hlcmVudChobmF0X3ByaXYtPmRldiwgZm9lX21pYl90Yl9zeiwKKwkJCQkJICAgJmhuYXRfcHJpdi0+Zm9lX21pYl9kZXZbcHBlX2lkXSwgR0ZQX0tFUk5FTCk7CisJCWlmICghaG5hdF9wcml2LT5mb2VfbWliX2NwdVtwcGVfaWRdKQorCQkJcmV0dXJuIC0xOworCQl3cml0ZWwoaG5hdF9wcml2LT5mb2VfbWliX2RldltwcGVfaWRdLAorCQkgICAgICAgaG5hdF9wcml2LT5wcGVfYmFzZVtwcGVfaWRdICsgUFBFX01JQl9UQl9CQVNFKTsKKwkJbWVtc2V0KGhuYXRfcHJpdi0+Zm9lX21pYl9jcHVbcHBlX2lkXSwgMCwgZm9lX21pYl90Yl9zeik7CisKKwkJaG5hdF9wcml2LT5hY2N0W3BwZV9pZF0gPQorCQkJa3phbGxvYyhobmF0X3ByaXYtPmZvZV9ldHJ5X251bSAqIHNpemVvZihzdHJ1Y3QgaG5hdF9hY2NvdW50aW5nKSwKKwkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKCFobmF0X3ByaXYtPmFjY3RbcHBlX2lkXSkKKwkJCXJldHVybiAtMTsKKwl9CisJLyogc2V0dXAgaGFzaGluZyAqLworCWNyX3NldF9maWVsZChobmF0X3ByaXYtPnBwZV9iYXNlW3BwZV9pZF0gKyBQUEVfVEJfQ0ZHLCBUQl9FVFJZX05VTSwgZXRyeV9udW1fY2ZnKTsKKwljcl9zZXRfZmllbGQoaG5hdF9wcml2LT5wcGVfYmFzZVtwcGVfaWRdICsgUFBFX1RCX0NGRywgSEFTSF9NT0RFLCBIQVNIX01PREVfMSk7CisJd3JpdGVsKEhBU0hfU0VFRF9LRVksIGhuYXRfcHJpdi0+cHBlX2Jhc2VbcHBlX2lkXSArIFBQRV9IQVNIX1NFRUQpOworCWNyX3NldF9maWVsZChobmF0X3ByaXYtPnBwZV9iYXNlW3BwZV9pZF0gKyBQUEVfVEJfQ0ZHLCBYTU9ERSwgMCk7CisJY3Jfc2V0X2ZpZWxkKGhuYXRfcHJpdi0+cHBlX2Jhc2VbcHBlX2lkXSArIFBQRV9UQl9DRkcsIFRCX0VOVFJZX1NJWkUsIEVOVFJZXzgwQik7CisJY3Jfc2V0X2ZpZWxkKGhuYXRfcHJpdi0+cHBlX2Jhc2VbcHBlX2lkXSArIFBQRV9UQl9DRkcsIFNNQSwgU01BX0ZXRF9DUFVfQlVJTERfRU5UUlkpOworCisJLyogc2V0IGlwIHByb3RvICovCisJd3JpdGVsKDB4RkZGRkZGRkYsIGhuYXRfcHJpdi0+cHBlX2Jhc2VbcHBlX2lkXSArIFBQRV9JUF9QUk9UX0NISyk7CisKKwkvKiBzZXR1cCBjYWNoaW5nICovCisJaG5hdF9jYWNoZV9lYmwoMSk7CisKKwkvKiBlbmFibGUgRk9FICovCisJY3Jfc2V0X2JpdHMoaG5hdF9wcml2LT5wcGVfYmFzZVtwcGVfaWRdICsgUFBFX0ZMT1dfQ0ZHLAorCQkgICAgQklUX1VEUF9JUDRGX05BVF9FTiB8IEJJVF9JUFY0X05BVF9FTiB8IEJJVF9JUFY0X05BUFRfRU4gfAorCQkgICAgQklUX0lQVjRfTkFUX0ZSQUdfRU4gfCBCSVRfSVBWNF9IQVNIX0dSRUsgfAorCQkgICAgQklUX0lQVjRfRFNMX0VOIHwgQklUX0lQVjZfNlJEX0VOIHwKKwkJICAgIEJJVF9JUFY2XzNUX1JPVVRFX0VOIHwgQklUX0lQVjZfNVRfUk9VVEVfRU4pOworCisJaWYgKGhuYXRfcHJpdi0+ZGF0YS0+dmVyc2lvbiA9PSBNVEtfSE5BVF9WNCkKKwkJY3Jfc2V0X2JpdHMoaG5hdF9wcml2LT5wcGVfYmFzZVtwcGVfaWRdICsgUFBFX0ZMT1dfQ0ZHLAorCQkJICAgIEJJVF9JUFY0X01BUEVfRU4gfCBCSVRfSVBWNF9NQVBUX0VOKTsKKworCS8qIHNldHVwIEZPRSBhZ2luZyAqLworCWNyX3NldF9maWVsZChobmF0X3ByaXYtPnBwZV9iYXNlW3BwZV9pZF0gKyBQUEVfVEJfQ0ZHLCBOVFVfQUdFLCAxKTsKKwljcl9zZXRfZmllbGQoaG5hdF9wcml2LT5wcGVfYmFzZVtwcGVfaWRdICsgUFBFX1RCX0NGRywgVU5CRF9BR0UsIDEpOworCWNyX3NldF9maWVsZChobmF0X3ByaXYtPnBwZV9iYXNlW3BwZV9pZF0gKyBQUEVfVU5CX0FHRSwgVU5CX01OUCwgMTAwMCk7CisJY3Jfc2V0X2ZpZWxkKGhuYXRfcHJpdi0+cHBlX2Jhc2VbcHBlX2lkXSArIFBQRV9VTkJfQUdFLCBVTkJfRExUQSwgMyk7CisJY3Jfc2V0X2ZpZWxkKGhuYXRfcHJpdi0+cHBlX2Jhc2VbcHBlX2lkXSArIFBQRV9UQl9DRkcsIFRDUF9BR0UsIDEpOworCWNyX3NldF9maWVsZChobmF0X3ByaXYtPnBwZV9iYXNlW3BwZV9pZF0gKyBQUEVfVEJfQ0ZHLCBVRFBfQUdFLCAxKTsKKwljcl9zZXRfZmllbGQoaG5hdF9wcml2LT5wcGVfYmFzZVtwcGVfaWRdICsgUFBFX1RCX0NGRywgRklOX0FHRSwgMSk7CisJY3Jfc2V0X2ZpZWxkKGhuYXRfcHJpdi0+cHBlX2Jhc2VbcHBlX2lkXSArIFBQRV9CTkRfQUdFXzAsIFVEUF9ETFRBLCAxMik7CisJY3Jfc2V0X2ZpZWxkKGhuYXRfcHJpdi0+cHBlX2Jhc2VbcHBlX2lkXSArIFBQRV9CTkRfQUdFXzAsIE5UVV9ETFRBLCAxKTsKKwljcl9zZXRfZmllbGQoaG5hdF9wcml2LT5wcGVfYmFzZVtwcGVfaWRdICsgUFBFX0JORF9BR0VfMSwgRklOX0RMVEEsIDEpOworCWNyX3NldF9maWVsZChobmF0X3ByaXYtPnBwZV9iYXNlW3BwZV9pZF0gKyBQUEVfQk5EX0FHRV8xLCBUQ1BfRExUQSwgNyk7CisKKwkvKiBzZXR1cCBGT0Uga2EgKi8KKwljcl9zZXRfZmllbGQoaG5hdF9wcml2LT5wcGVfYmFzZVtwcGVfaWRdICsgUFBFX1RCX0NGRywgU0NBTl9NT0RFLCAyKTsKKwljcl9zZXRfZmllbGQoaG5hdF9wcml2LT5wcGVfYmFzZVtwcGVfaWRdICsgUFBFX1RCX0NGRywgS0FfQ0ZHLCAzKTsKKwljcl9zZXRfZmllbGQoaG5hdF9wcml2LT5wcGVfYmFzZVtwcGVfaWRdICsgUFBFX0tBLCBLQV9ULCAxKTsKKwljcl9zZXRfZmllbGQoaG5hdF9wcml2LT5wcGVfYmFzZVtwcGVfaWRdICsgUFBFX0tBLCBUQ1BfS0EsIDEpOworCWNyX3NldF9maWVsZChobmF0X3ByaXYtPnBwZV9iYXNlW3BwZV9pZF0gKyBQUEVfS0EsIFVEUF9LQSwgMSk7CisJY3Jfc2V0X2ZpZWxkKGhuYXRfcHJpdi0+cHBlX2Jhc2VbcHBlX2lkXSArIFBQRV9CSU5EX0xNVF8xLCBOVFVfS0EsIDEpOworCisJLyogc2V0dXAgRk9FIHJhdGUgbGltaXQgKi8KKwljcl9zZXRfZmllbGQoaG5hdF9wcml2LT5wcGVfYmFzZVtwcGVfaWRdICsgUFBFX0JJTkRfTE1UXzAsIFFVUlRfTE1ULCAxNjM4Myk7CisJY3Jfc2V0X2ZpZWxkKGhuYXRfcHJpdi0+cHBlX2Jhc2VbcHBlX2lkXSArIFBQRV9CSU5EX0xNVF8wLCBIQUxGX0xNVCwgMTYzODMpOworCWNyX3NldF9maWVsZChobmF0X3ByaXYtPnBwZV9iYXNlW3BwZV9pZF0gKyBQUEVfQklORF9MTVRfMSwgRlVMTF9MTVQsIDE2MzgzKTsKKwkvKiBzZXR1cCBiaW5kaW5nIHRocmVzaG9sZCBhcyAzMCBwYWNrZXRzIHBlciBzZWNvbmQgKi8KKwljcl9zZXRfZmllbGQoaG5hdF9wcml2LT5wcGVfYmFzZVtwcGVfaWRdICsgUFBFX0JORFIsIEJJTkRfUkFURSwgMHgxRSk7CisKKwkvKiBzZXR1cCBGT0UgY2YgZ2VuICovCisJY3Jfc2V0X2ZpZWxkKGhuYXRfcHJpdi0+cHBlX2Jhc2VbcHBlX2lkXSArIFBQRV9HTE9fQ0ZHLCBQUEVfRU4sIDEpOworCXdyaXRlbCgwLCBobmF0X3ByaXYtPnBwZV9iYXNlW3BwZV9pZF0gKyBQUEVfREZUX0NQT1JUKTsgLyogcGRtYSAqLworCS8qIHdyaXRlbCgweDU1NTU1NTU1LCBobmF0X3ByaXYtPnBwZV9iYXNlW3BwZV9pZF0gKyBQUEVfREZUX0NQT1JUKTsgKi8gLyogcWRtYSAqLworCWNyX3NldF9maWVsZChobmF0X3ByaXYtPnBwZV9iYXNlW3BwZV9pZF0gKyBQUEVfR0xPX0NGRywgVFRMMF9EUlAsIDApOworCisJaWYgKGhuYXRfcHJpdi0+ZGF0YS0+dmVyc2lvbiA9PSBNVEtfSE5BVF9WNCkgeworCQl3cml0ZWwoMHhjYjc3NywgaG5hdF9wcml2LT5wcGVfYmFzZVtwcGVfaWRdICsgUFBFX0RGVF9DUE9SVDEpOworCQl3cml0ZWwoMHg3ZiwgaG5hdF9wcml2LT5wcGVfYmFzZVtwcGVfaWRdICsgUFBFX1NCV19DVFJMKTsKKwl9CisKKwkvKmVuYWJsZSBwcGUgbWliIGNvdW50ZXIqLworCWlmIChobmF0X3ByaXYtPmRhdGEtPnBlcl9mbG93X2FjY291bnRpbmcpIHsKKwkJY3Jfc2V0X2ZpZWxkKGhuYXRfcHJpdi0+cHBlX2Jhc2VbcHBlX2lkXSArIFBQRV9NSUJfQ0ZHLCBNSUJfRU4sIDEpOworCQljcl9zZXRfZmllbGQoaG5hdF9wcml2LT5wcGVfYmFzZVtwcGVfaWRdICsgUFBFX01JQl9DRkcsIE1JQl9SRUFEX0NMRUFSLCAxKTsKKwkJY3Jfc2V0X2ZpZWxkKGhuYXRfcHJpdi0+cHBlX2Jhc2VbcHBlX2lkXSArIFBQRV9NSUJfQ0FIX0NUUkwsIE1JQl9DQUhfRU4sIDEpOworCX0KKworCWhuYXRfcHJpdi0+Z19wcGRldiA9IGRldl9nZXRfYnlfbmFtZSgmaW5pdF9uZXQsIGhuYXRfcHJpdi0+cHBkKTsKKwlobmF0X3ByaXYtPmdfd2FuZGV2ID0gZGV2X2dldF9ieV9uYW1lKCZpbml0X25ldCwgaG5hdF9wcml2LT53YW4pOworCisJZGV2X2luZm8oaG5hdF9wcml2LT5kZXYsICJQUEUlZCBod25hdCBzdGFydFxuIiwgcHBlX2lkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBwZV9idXN5X3dhaXQodTMyIHBwZV9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHRfc3RhcnQgPSBqaWZmaWVzOworCXUzMiByID0gMDsKKworCWlmIChwcGVfaWQgPj0gQ0ZHX1BQRV9OVU0pCisJCXJldHVybiAtRUlOVkFMOworCisJd2hpbGUgKDEpIHsKKwkJciA9IHJlYWRsKChobmF0X3ByaXYtPnBwZV9iYXNlW3BwZV9pZF0gKyAweDApKTsKKwkJaWYgKCEociAmIEJJVCgzMSkpKQorCQkJcmV0dXJuIDA7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRfc3RhcnQgKyBIWikpCisJCQlicmVhazsKKwkJdXNsZWVwX3JhbmdlKDEwLCAyMCk7CisJfQorCisJZGV2X25vdGljZShobmF0X3ByaXYtPmRldiwgInBwZTolcyB0aW1lb3V0XG4iLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIGhuYXRfc3RvcCh1MzIgcHBlX2lkKQoreworCXUzMiBmb2VfdGFibGVfc3o7CisJdTMyIGZvZV9taWJfdGJfc3o7CisJc3RydWN0IGZvZV9lbnRyeSAqZW50cnksICplbmQ7CisJdTMyIHIxID0gMCwgcjIgPSAwOworCisJaWYgKHBwZV9pZCA+PSBDRkdfUFBFX05VTSkKKwkJcmV0dXJuOworCisJLyogc2VuZCBhbGwgdHJhZmZpYyBiYWNrIHRvIHRoZSBETUEgZW5naW5lICovCisJc2V0X2dtYWNfcHBlX2Z3ZCgwLCAwKTsKKwlzZXRfZ21hY19wcGVfZndkKDEsIDApOworCisJZGV2X2luZm8oaG5hdF9wcml2LT5kZXYsICJod25hdCBzdG9wXG4iKTsKKworCWlmIChobmF0X3ByaXYtPmZvZV90YWJsZV9jcHVbcHBlX2lkXSkgeworCQllbnRyeSA9IGhuYXRfcHJpdi0+Zm9lX3RhYmxlX2NwdVtwcGVfaWRdOworCQllbmQgPSBobmF0X3ByaXYtPmZvZV90YWJsZV9jcHVbcHBlX2lkXSArIGhuYXRfcHJpdi0+Zm9lX2V0cnlfbnVtOworCQl3aGlsZSAoZW50cnkgPCBlbmQpIHsKKwkJCWVudHJ5LT5iZmliMS5zdGF0ZSA9IElOVkFMSUQ7CisJCQllbnRyeSsrOworCQl9CisJfQorCS8qIGRpc2FibGUgY2FjaGluZyAqLworCWhuYXRfY2FjaGVfZWJsKDApOworCisJLyogZmx1c2ggY2FjaGUgaGFzIHRvIGJlIGFoZWFkIG9mIGhuYXQgZGlzYWJsZSAtLSovCisJY3Jfc2V0X2ZpZWxkKGhuYXRfcHJpdi0+cHBlX2Jhc2VbcHBlX2lkXSArIFBQRV9HTE9fQ0ZHLCBQUEVfRU4sIDApOworCisJLyogZGlzYWJsZSBzY2FuIG1vZGUgYW5kIGtlZXAtYWxpdmUgKi8KKwljcl9zZXRfZmllbGQoaG5hdF9wcml2LT5wcGVfYmFzZVtwcGVfaWRdICsgUFBFX1RCX0NGRywgU0NBTl9NT0RFLCAwKTsKKwljcl9zZXRfZmllbGQoaG5hdF9wcml2LT5wcGVfYmFzZVtwcGVfaWRdICsgUFBFX1RCX0NGRywgS0FfQ0ZHLCAwKTsKKworCXBwZV9idXN5X3dhaXQocHBlX2lkKTsKKworCS8qIGRpc2FibGUgRk9FICovCisJY3JfY2xyX2JpdHMoaG5hdF9wcml2LT5wcGVfYmFzZVtwcGVfaWRdICsgUFBFX0ZMT1dfQ0ZHLAorCQkgICAgQklUX0lQVjRfTkFQVF9FTiB8IEJJVF9JUFY0X05BVF9FTiB8IEJJVF9JUFY0X05BVF9GUkFHX0VOIHwKKwkJICAgIEJJVF9JUFY2X0hBU0hfR1JFSyB8IEJJVF9JUFY0X0RTTF9FTiB8CisJCSAgICBCSVRfSVBWNl82UkRfRU4gfCBCSVRfSVBWNl8zVF9ST1VURV9FTiB8CisJCSAgICBCSVRfSVBWNl81VF9ST1VURV9FTiB8IEJJVF9GVUNfRk9FIHwgQklUX0ZNQ19GT0UpOworCisJaWYgKGhuYXRfcHJpdi0+ZGF0YS0+dmVyc2lvbiA9PSBNVEtfSE5BVF9WNCkKKwkJY3JfY2xyX2JpdHMoaG5hdF9wcml2LT5wcGVfYmFzZVtwcGVfaWRdICsgUFBFX0ZMT1dfQ0ZHLAorCQkJICAgIEJJVF9JUFY0X01BUEVfRU4gfCBCSVRfSVBWNF9NQVBUX0VOKTsKKworCS8qIGRpc2FibGUgRk9FIGFnaW5nICovCisJY3Jfc2V0X2ZpZWxkKGhuYXRfcHJpdi0+cHBlX2Jhc2VbcHBlX2lkXSArIFBQRV9UQl9DRkcsIE5UVV9BR0UsIDApOworCWNyX3NldF9maWVsZChobmF0X3ByaXYtPnBwZV9iYXNlW3BwZV9pZF0gKyBQUEVfVEJfQ0ZHLCBVTkJEX0FHRSwgMCk7CisJY3Jfc2V0X2ZpZWxkKGhuYXRfcHJpdi0+cHBlX2Jhc2VbcHBlX2lkXSArIFBQRV9UQl9DRkcsIFRDUF9BR0UsIDApOworCWNyX3NldF9maWVsZChobmF0X3ByaXYtPnBwZV9iYXNlW3BwZV9pZF0gKyBQUEVfVEJfQ0ZHLCBVRFBfQUdFLCAwKTsKKwljcl9zZXRfZmllbGQoaG5hdF9wcml2LT5wcGVfYmFzZVtwcGVfaWRdICsgUFBFX1RCX0NGRywgRklOX0FHRSwgMCk7CisKKwlyMSA9IHJlYWRsKGhuYXRfcHJpdi0+ZmVfYmFzZSArIDB4MTAwKTsKKwlyMiA9IHJlYWRsKGhuYXRfcHJpdi0+ZmVfYmFzZSArIDB4MTBjKTsKKworCWRldl9pbmZvKGhuYXRfcHJpdi0+ZGV2LCAiMHgxMDAgPSAweCV4LCAweDEwYyA9IDB4JXhcbiIsIHIxLCByMik7CisKKwlpZiAoKChyMSAmIDB4ZmYwMCkgPj4gMHg4KSA+PSAocjEgJiAweGZmKSB8fAorCSAgICAoKHIxICYgMHhmZjAwKSA+PiAweDgpID49IChyMiAmIDB4ZmYpKSB7CisJCWRldl9pbmZvKGhuYXRfcHJpdi0+ZGV2LCAicmVzZXQgcHNlXG4iKTsKKwkJd3JpdGVsKDB4MSwgaG5hdF9wcml2LT5mZV9iYXNlICsgMHg0KTsKKwl9CisKKwkvKiBmcmVlIHRoZSBGT0UgdGFibGUgKi8KKwlmb2VfdGFibGVfc3ogPSBobmF0X3ByaXYtPmZvZV9ldHJ5X251bSAqIHNpemVvZihzdHJ1Y3QgZm9lX2VudHJ5KTsKKwlpZiAoaG5hdF9wcml2LT5mb2VfdGFibGVfY3B1W3BwZV9pZF0pCisJCWRtYV9mcmVlX2NvaGVyZW50KGhuYXRfcHJpdi0+ZGV2LCBmb2VfdGFibGVfc3osCisJCQkJICBobmF0X3ByaXYtPmZvZV90YWJsZV9jcHVbcHBlX2lkXSwKKwkJCQkgIGhuYXRfcHJpdi0+Zm9lX3RhYmxlX2RldltwcGVfaWRdKTsKKwl3cml0ZWwoMCwgaG5hdF9wcml2LT5wcGVfYmFzZVtwcGVfaWRdICsgUFBFX1RCX0JBU0UpOworCisJaWYgKGhuYXRfcHJpdi0+ZGF0YS0+cGVyX2Zsb3dfYWNjb3VudGluZykgeworCQlmb2VfbWliX3RiX3N6ID0gaG5hdF9wcml2LT5mb2VfZXRyeV9udW0gKiBzaXplb2Yoc3RydWN0IG1pYl9lbnRyeSk7CisJCWlmIChobmF0X3ByaXYtPmZvZV9taWJfY3B1W3BwZV9pZF0pCisJCQlkbWFfZnJlZV9jb2hlcmVudChobmF0X3ByaXYtPmRldiwgZm9lX21pYl90Yl9zeiwKKwkJCQkJICBobmF0X3ByaXYtPmZvZV9taWJfY3B1W3BwZV9pZF0sCisJCQkJCSAgaG5hdF9wcml2LT5mb2VfbWliX2RldltwcGVfaWRdKTsKKwkJd3JpdGVsKDAsIGhuYXRfcHJpdi0+cHBlX2Jhc2VbcHBlX2lkXSArIFBQRV9NSUJfVEJfQkFTRSk7CisJCWtmcmVlKGhuYXRfcHJpdi0+YWNjdFtwcGVfaWRdKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhuYXRfcmVsZWFzZV9uZXRkZXYodm9pZCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgZXh0ZGV2X2VudHJ5ICpleHRfZW50cnk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0VYVF9ERVZTICYmIGhuYXRfcHJpdi0+ZXh0X2lmW2ldOyBpKyspIHsKKwkJZXh0X2VudHJ5ID0gaG5hdF9wcml2LT5leHRfaWZbaV07CisJCWlmIChleHRfZW50cnktPmRldikKKwkJCWRldl9wdXQoZXh0X2VudHJ5LT5kZXYpOworCQlleHRfaWZfZGVsKGV4dF9lbnRyeSk7CisJCWtmcmVlKGV4dF9lbnRyeSk7CisJfQorCisJaWYgKGhuYXRfcHJpdi0+Z19wcGRldikKKwkJZGV2X3B1dChobmF0X3ByaXYtPmdfcHBkZXYpOworCisJaWYgKGhuYXRfcHJpdi0+Z193YW5kZXYpCisJCWRldl9wdXQoaG5hdF9wcml2LT5nX3dhbmRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbmZfaG5hdF9uZXRkZXZpY2VfbmIgX19yZWFkX21vc3RseSA9IHsKKwkubm90aWZpZXJfY2FsbCA9IG5mX2huYXRfbmV0ZGV2aWNlX2V2ZW50LAorfTsKKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBuZl9obmF0X25ldGV2ZW50X25iIF9fcmVhZF9tb3N0bHkgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBuZl9obmF0X25ldGV2ZW50X2hhbmRsZXIsCit9OworCitpbnQgaG5hdF9lbmFibGVfaG9vayh2b2lkKQoreworCS8qIHJlZ2lzdGVyIGhvb2sgZnVuY3Rpb25zIHVzZWQgYnkgV0hOQVQgbW9kdWxlLgorCSAqLworCWlmIChobmF0X3ByaXYtPmRhdGEtPndobmF0KSB7CisJCXJhX3N3X25hdF9ob29rX3J4ID0KKwkJCShobmF0X3ByaXYtPmRhdGEtPnZlcnNpb24gPT0gTVRLX0hOQVRfVjQpID8KKwkJCSBtdGtfc3dfbmF0X2hvb2tfcnggOiBOVUxMOworCQlyYV9zd19uYXRfaG9va190eCA9IG10a19zd19uYXRfaG9va190eDsKKwkJcHBlX2Rldl9yZWdpc3Rlcl9ob29rID0gbXRrX3BwZV9kZXZfcmVnaXN0ZXJfaG9vazsKKwkJcHBlX2Rldl91bnJlZ2lzdGVyX2hvb2sgPSBtdGtfcHBlX2Rldl91bnJlZ2lzdGVyX2hvb2s7CisJfQorCisJaWYgKGhuYXRfcmVnaXN0ZXJfbmZfaG9va3MoKSkKKwkJcmV0dXJuIC0xOworCisJcHBlX2RlbF9lbnRyeV9ieV9tYWMgPSBlbnRyeV9kZWxldGVfYnlfbWFjOworCWhvb2tfdG9nZ2xlID0gMTsKKworCXJldHVybiAwOworfQorCitpbnQgaG5hdF9kaXNhYmxlX2hvb2sodm9pZCkKK3sKKwlpbnQgaSwgaGFzaF9pbmRleDsKKwlzdHJ1Y3QgZm9lX2VudHJ5ICplbnRyeTsKKworCXJhX3N3X25hdF9ob29rX3R4ID0gTlVMTDsKKwlyYV9zd19uYXRfaG9va19yeCA9IE5VTEw7CisJaG5hdF91bnJlZ2lzdGVyX25mX2hvb2tzKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQ0ZHX1BQRV9OVU07IGkrKykgeworCQljcl9zZXRfZmllbGQoaG5hdF9wcml2LT5wcGVfYmFzZVtpXSArIFBQRV9UQl9DRkcsCisJCQkgICAgIFNNQSwgU01BX09OTFlfRldEX0NQVSk7CisKKwkJZm9yIChoYXNoX2luZGV4ID0gMDsgaGFzaF9pbmRleCA8IGhuYXRfcHJpdi0+Zm9lX2V0cnlfbnVtOyBoYXNoX2luZGV4KyspIHsKKwkJCWVudHJ5ID0gaG5hdF9wcml2LT5mb2VfdGFibGVfY3B1W2ldICsgaGFzaF9pbmRleDsKKwkJCWlmIChlbnRyeS0+YmZpYjEuc3RhdGUgPT0gQklORCkgeworCQkJCWVudHJ5LT5pcHY0X2huYXB0LnVkaWIxLnN0YXRlID0gSU5WQUxJRDsKKwkJCQllbnRyeS0+aXB2NF9obmFwdC51ZGliMS50aW1lX3N0YW1wID0KKwkJCQkJcmVhZGwoKGhuYXRfcHJpdi0+ZmVfYmFzZSArIDB4MDAxMCkpICYgMHhGRjsKKwkJCX0KKwkJfQorCX0KKworCS8qIGNsZWFyIEhXTkFUIGNhY2hlICovCisJaG5hdF9jYWNoZV9lYmwoMSk7CisKKwltb2RfdGltZXIoJmhuYXRfcHJpdi0+aG5hdF9zbWFfYnVpbGRfZW50cnlfdGltZXIsIGppZmZpZXMgKyAzICogSFopOworCXBwZV9kZWxfZW50cnlfYnlfbWFjID0gTlVMTDsKKwlob29rX3RvZ2dsZSA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBtdGtfcGFja190eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUgICA9IEhRT1NfTUFHSUNfVEFHLAorCS5mdW5jICAgPSBtdGtfaHFvc19wdHlwZV9jYiwKK307CisKK3N0YXRpYyBpbnQgaG5hdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCBpOworCWludCBlcnIgPSAwOworCWludCBpbmRleCA9IDA7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJY29uc3QgY2hhciAqbmFtZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCXVuc2lnbmVkIGludCB2YWw7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBleHRkZXZfZW50cnkgKmV4dF9lbnRyeTsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKKworCWhuYXRfcHJpdiA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IG10a19obmF0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFobmF0X3ByaXYpCisJCXJldHVybiAtRU5PTUVNOworCisJaG5hdF9wcml2LT5mb2VfZXRyeV9udW0gPSBERUZfRVRSWV9OVU07CisKKwltYXRjaCA9IG9mX21hdGNoX2RldmljZShvZl9obmF0X21hdGNoLCAmcGRldi0+ZGV2KTsKKwlpZiAodW5saWtlbHkoIW1hdGNoKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlobmF0X3ByaXYtPmRhdGEgPSAoc3RydWN0IG10a19obmF0X2RhdGEgKiltYXRjaC0+ZGF0YTsKKworCWhuYXRfcHJpdi0+ZGV2ID0gJnBkZXYtPmRldjsKKwlucCA9IGhuYXRfcHJpdi0+ZGV2LT5vZl9ub2RlOworCisJZXJyID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobnAsICJtdGtldGgtd2FuIiwgJm5hbWUpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0cm5jcHkoaG5hdF9wcml2LT53YW4sIChjaGFyICopbmFtZSwgSUZOQU1TSVogLSAxKTsKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAid2FuID0gJXNcbiIsIGhuYXRfcHJpdi0+d2FuKTsKKworCWVyciA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCAibXRrZXRoLWxhbiIsICZuYW1lKTsKKwlpZiAoZXJyIDwgMCkKKwkJc3RybmNweShobmF0X3ByaXYtPmxhbiwgImV0aDAiLCBJRk5BTVNJWik7CisJZWxzZQorCQlzdHJuY3B5KGhuYXRfcHJpdi0+bGFuLCAoY2hhciAqKW5hbWUsIElGTkFNU0laIC0gMSk7CisJZGV2X2luZm8oJnBkZXYtPmRldiwgImxhbiA9ICVzXG4iLCBobmF0X3ByaXYtPmxhbik7CisKKwllcnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgIm10a2V0aC1wcGQiLCAmbmFtZSk7CisJaWYgKGVyciA8IDApCisJCXN0cm5jcHkoaG5hdF9wcml2LT5wcGQsICJldGgwIiwgSUZOQU1TSVopOworCWVsc2UKKwkJc3RybmNweShobmF0X3ByaXYtPnBwZCwgKGNoYXIgKiluYW1lLCBJRk5BTVNJWiAtIDEpOworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJwcGQgPSAlc1xuIiwgaG5hdF9wcml2LT5wcGQpOworCisJLypnZXQgdG90YWwgZ21hYyBudW0gaW4gaG5hdCovCisJZXJyID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfaW5kZXgobnAsICJtdGtldGgtbWF4LWdtYWMiLCAwLCAmdmFsKTsKKworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhuYXRfcHJpdi0+Z21hY19udW0gPSB2YWw7CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiZ21hYyBudW0gPSAlZFxuIiwgaG5hdF9wcml2LT5nbWFjX251bSk7CisKKwllcnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChucCwgIm10a2RzYS13YW4tcG9ydCIsIDAsICZ2YWwpOworCisJaWYgKGVyciA8IDApIHsKKwkJaG5hdF9wcml2LT53YW5fZHNhX3BvcnQgPSBOT05FX0RTQV9QT1JUOworCX0gZWxzZSB7CisJCWhuYXRfcHJpdi0+d2FuX2RzYV9wb3J0ID0gdmFsOworCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAid2FuIGRzYSBwb3J0ID0gJWRcbiIsIGhuYXRfcHJpdi0+d2FuX2RzYV9wb3J0KTsKKwl9CisKKwllcnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChucCwgIm10a2V0aC1wcGUtbnVtIiwgMCwgJnZhbCk7CisKKwlpZiAoZXJyIDwgMCkKKwkJaG5hdF9wcml2LT5wcGVfbnVtID0gMTsKKwllbHNlCisJCWhuYXRfcHJpdi0+cHBlX251bSA9IHZhbDsKKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJwcGUgbnVtID0gJWRcbiIsIGhuYXRfcHJpdi0+cHBlX251bSk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWhuYXRfcHJpdi0+ZmVfYmFzZSA9IGRldm1faW9yZW1hcF9ub2NhY2hlKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsCisJCQkJCSAgICAgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJaWYgKCFobmF0X3ByaXYtPmZlX2Jhc2UpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKworI2lmIGRlZmluZWQoQ09ORklHX01FRElBVEVLX05FVFNZU19WMikKKwlobmF0X3ByaXYtPnBwZV9iYXNlWzBdID0gaG5hdF9wcml2LT5mZV9iYXNlICsgMHgyMjAwOworCisJaWYgKENGR19QUEVfTlVNID4gMSkKKwkJaG5hdF9wcml2LT5wcGVfYmFzZVsxXSA9IGhuYXRfcHJpdi0+ZmVfYmFzZSArIDB4MjYwMDsKKyNlbHNlCisJaG5hdF9wcml2LT5wcGVfYmFzZVswXSA9IGhuYXRfcHJpdi0+ZmVfYmFzZSArIDB4ZTAwOworI2VuZGlmCisKKwllcnIgPSBobmF0X2luaXRfZGVidWdmcyhobmF0X3ByaXYpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlwcm9wID0gb2ZfZmluZF9wcm9wZXJ0eShucCwgImV4dC1kZXZpY2VzIiwgTlVMTCk7CisJZm9yIChuYW1lID0gb2ZfcHJvcF9uZXh0X3N0cmluZyhwcm9wLCBOVUxMKTsgbmFtZTsKKwkgICAgIG5hbWUgPSBvZl9wcm9wX25leHRfc3RyaW5nKHByb3AsIG5hbWUpLCBpbmRleCsrKSB7CisJCWV4dF9lbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKCpleHRfZW50cnkpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFleHRfZW50cnkpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9vdXQxOworCQl9CisJCXN0cm5jcHkoZXh0X2VudHJ5LT5uYW1lLCAoY2hhciAqKW5hbWUsIElGTkFNU0laIC0gMSk7CisJCWV4dF9pZl9hZGQoZXh0X2VudHJ5KTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0VYVF9ERVZTICYmIGhuYXRfcHJpdi0+ZXh0X2lmW2ldOyBpKyspIHsKKwkJZXh0X2VudHJ5ID0gaG5hdF9wcml2LT5leHRfaWZbaV07CisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJleHQgZGV2aWNlcyA9ICVzXG4iLCBleHRfZW50cnktPm5hbWUpOworCX0KKworCWhuYXRfcHJpdi0+bHZpZCA9IDE7CisJaG5hdF9wcml2LT53dmlkID0gMjsKKworCWZvciAoaSA9IDA7IGkgPCBDRkdfUFBFX05VTTsgaSsrKSB7CisJCWVyciA9IGhuYXRfc3RhcnQoaSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXQ7CisJfQorCisJaWYgKGhuYXRfcHJpdi0+ZGF0YS0+d2huYXQpIHsKKwkJZXJyID0gd2huYXRfYWRqdXN0X25mX2hvb2tzKCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXQ7CisJfQorCisJZXJyID0gaG5hdF9lbmFibGVfaG9vaygpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dDsKKworCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmbmZfaG5hdF9uZXRkZXZpY2VfbmIpOworCXJlZ2lzdGVyX25ldGV2ZW50X25vdGlmaWVyKCZuZl9obmF0X25ldGV2ZW50X25iKTsKKworCWlmIChobmF0X3ByaXYtPmRhdGEtPm1jYXN0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBDRkdfUFBFX05VTTsgaSsrKQorCQkJaG5hdF9tY2FzdF9lbmFibGUoaSk7CisJfQorCisJdGltZXJfc2V0dXAoJmhuYXRfcHJpdi0+aG5hdF9zbWFfYnVpbGRfZW50cnlfdGltZXIsIGhuYXRfc21hX2J1aWxkX2VudHJ5LCAwKTsKKwlpZiAoaG5hdF9wcml2LT5kYXRhLT52ZXJzaW9uID09IE1US19ITkFUX1YzKSB7CisJCXRpbWVyX3NldHVwKCZobmF0X3ByaXYtPmhuYXRfcmVzZXRfdGltZXN0YW1wX3RpbWVyLCBobmF0X3Jlc2V0X3RpbWVzdGFtcCwgMCk7CisJCWhuYXRfcHJpdi0+aG5hdF9yZXNldF90aW1lc3RhbXBfdGltZXIuZXhwaXJlcyA9IGppZmZpZXM7CisJCWFkZF90aW1lcigmaG5hdF9wcml2LT5obmF0X3Jlc2V0X3RpbWVzdGFtcF90aW1lcik7CisJfQorCisJaWYgKElTX0hRT1NfTU9ERSAmJiBJU19HTUFDMV9NT0RFKQorCQlkZXZfYWRkX3BhY2soJm10a19wYWNrX3R5cGUpOworCisJZXJyID0gaG5hdF9yb2FtaW5nX2VuYWJsZSgpOworCWlmIChlcnIpCisJCXByX2luZm8oImhuYXQgcm9hbWluZyB3b3JrIGZhaWxcbiIpOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXQ6CisJZm9yIChpID0gMDsgaSA8IENGR19QUEVfTlVNOyBpKyspCisJCWhuYXRfc3RvcChpKTsKK2Vycl9vdXQxOgorCWhuYXRfZGVpbml0X2RlYnVnZnMoaG5hdF9wcml2KTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0VYVF9ERVZTICYmIGhuYXRfcHJpdi0+ZXh0X2lmW2ldOyBpKyspIHsKKwkJZXh0X2VudHJ5ID0gaG5hdF9wcml2LT5leHRfaWZbaV07CisJCWV4dF9pZl9kZWwoZXh0X2VudHJ5KTsKKwkJa2ZyZWUoZXh0X2VudHJ5KTsKKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBobmF0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCBpOworCisJaG5hdF9yb2FtaW5nX2Rpc2FibGUoKTsKKwl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmbmZfaG5hdF9uZXRkZXZpY2VfbmIpOworCXVucmVnaXN0ZXJfbmV0ZXZlbnRfbm90aWZpZXIoJm5mX2huYXRfbmV0ZXZlbnRfbmIpOworCWhuYXRfZGlzYWJsZV9ob29rKCk7CisKKwlpZiAoaG5hdF9wcml2LT5kYXRhLT5tY2FzdCkKKwkJaG5hdF9tY2FzdF9kaXNhYmxlKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQ0ZHX1BQRV9OVU07IGkrKykKKwkJaG5hdF9zdG9wKGkpOworCisJaG5hdF9kZWluaXRfZGVidWdmcyhobmF0X3ByaXYpOworCWhuYXRfcmVsZWFzZV9uZXRkZXYoKTsKKwlkZWxfdGltZXJfc3luYygmaG5hdF9wcml2LT5obmF0X3NtYV9idWlsZF9lbnRyeV90aW1lcik7CisJaWYgKGhuYXRfcHJpdi0+ZGF0YS0+dmVyc2lvbiA9PSBNVEtfSE5BVF9WMykKKwkJZGVsX3RpbWVyX3N5bmMoJmhuYXRfcHJpdi0+aG5hdF9yZXNldF90aW1lc3RhbXBfdGltZXIpOworCisJaWYgKElTX0hRT1NfTU9ERSAmJiBJU19HTUFDMV9NT0RFKQorCQlkZXZfcmVtb3ZlX3BhY2soJm10a19wYWNrX3R5cGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2huYXRfZGF0YSBobmF0X2RhdGFfdjEgPSB7CisJLm51bV9vZl9zY2ggPSAyLAorCS53aG5hdCA9IGZhbHNlLAorCS5wZXJfZmxvd19hY2NvdW50aW5nID0gZmFsc2UsCisJLm1jYXN0ID0gZmFsc2UsCisJLnZlcnNpb24gPSBNVEtfSE5BVF9WMSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2huYXRfZGF0YSBobmF0X2RhdGFfdjIgPSB7CisJLm51bV9vZl9zY2ggPSAyLAorCS53aG5hdCA9IHRydWUsCisJLnBlcl9mbG93X2FjY291bnRpbmcgPSB0cnVlLAorCS5tY2FzdCA9IGZhbHNlLAorCS52ZXJzaW9uID0gTVRLX0hOQVRfVjIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19obmF0X2RhdGEgaG5hdF9kYXRhX3YzID0geworCS5udW1fb2Zfc2NoID0gNCwKKwkud2huYXQgPSBmYWxzZSwKKwkucGVyX2Zsb3dfYWNjb3VudGluZyA9IGZhbHNlLAorCS5tY2FzdCA9IGZhbHNlLAorCS52ZXJzaW9uID0gTVRLX0hOQVRfVjMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19obmF0X2RhdGEgaG5hdF9kYXRhX3Y0ID0geworCS5udW1fb2Zfc2NoID0gNCwKKwkud2huYXQgPSB0cnVlLAorCS5wZXJfZmxvd19hY2NvdW50aW5nID0gdHJ1ZSwKKwkubWNhc3QgPSBmYWxzZSwKKwkudmVyc2lvbiA9IE1US19ITkFUX1Y0LAorfTsKKworY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl9obmF0X21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdGstaG5hdCIsIC5kYXRhID0gJmhuYXRfZGF0YV92MyB9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXRrLWhuYXRfdjEiLCAuZGF0YSA9ICZobmF0X2RhdGFfdjEgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ay1obmF0X3YyIiwgLmRhdGEgPSAmaG5hdF9kYXRhX3YyIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdGstaG5hdF92MyIsIC5kYXRhID0gJmhuYXRfZGF0YV92MyB9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXRrLWhuYXRfdjQiLCAuZGF0YSA9ICZobmF0X2RhdGFfdjQgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBvZl9obmF0X21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaG5hdF9kcml2ZXIgPSB7CisJLnByb2JlID0gaG5hdF9wcm9iZSwKKwkucmVtb3ZlID0gaG5hdF9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAibWVkaWF0ZWtfc29jX2huYXQiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9obmF0X21hdGNoLAorCX0sCit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGhuYXRfZHJpdmVyKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FVVEhPUigiU2VhbiBXYW5nIDxzZWFuLndhbmdAbWVkaWF0ZWsuY29tPiIpOworTU9EVUxFX0FVVEhPUigiSm9obiBDcmlzcGluIDxqb2huQHBocm96ZW4ub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNZWRpYXRlayBIYXJkd2FyZSBOQVQiKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2huYXQvaG5hdC5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfaG5hdC9obmF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFhMDYwZgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2huYXQvaG5hdC5oCkBAIC0wLDAgKzEsOTY5IEBACisvKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IFNlYW4gV2FuZyA8c2Vhbi53YW5nQG1lZGlhdGVrLmNvbT4KKyAqICAgQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bmV0L25ldGV2ZW50Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CisjaW5jbHVkZSAiaG5hdF9tY2FzdC5oIgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFJlZ2lzdGVyIE9mZnNldCovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgUFBFX0dMT19DRkcgMHgwMAorI2RlZmluZSBQUEVfRkxPV19DRkcgMHgwNAorI2RlZmluZSBQUEVfSVBfUFJPVF9DSEsgMHgwOAorI2RlZmluZSBQUEVfSVBfUFJPVF8wIDB4MEMKKyNkZWZpbmUgUFBFX0lQX1BST1RfMSAweDEwCisjZGVmaW5lIFBQRV9JUF9QUk9UXzIgMHgxNAorI2RlZmluZSBQUEVfSVBfUFJPVF8zIDB4MTgKKyNkZWZpbmUgUFBFX1RCX0NGRyAweDFDCisjZGVmaW5lIFBQRV9UQl9CQVNFIDB4MjAKKyNkZWZpbmUgUFBFX1RCX1VTRUQgMHgyNAorI2RlZmluZSBQUEVfQk5EUiAweDI4CisjZGVmaW5lIFBQRV9CSU5EX0xNVF8wIDB4MkMKKyNkZWZpbmUgUFBFX0JJTkRfTE1UXzEgMHgzMAorI2RlZmluZSBQUEVfS0EgMHgzNAorI2RlZmluZSBQUEVfVU5CX0FHRSAweDM4CisjZGVmaW5lIFBQRV9CTkRfQUdFXzAgMHgzQworI2RlZmluZSBQUEVfQk5EX0FHRV8xIDB4NDAKKyNkZWZpbmUgUFBFX0hBU0hfU0VFRCAweDQ0CisjZGVmaW5lIFBQRV9ERlRfQ1BPUlQgMHg0OAorI2RlZmluZSBQUEVfREZUX0NQT1JUMSAweDRDCisjZGVmaW5lIFBQRV9NQ0FTVF9QUFNFIDB4ODQKKyNkZWZpbmUgUFBFX01DQVNUX0xfMCAweDg4CisjZGVmaW5lIFBQRV9NQ0FTVF9IXzAgMHg4QworI2RlZmluZSBQUEVfTUNBU1RfTF8xIDB4OTAKKyNkZWZpbmUgUFBFX01DQVNUX0hfMSAweDk0CisjZGVmaW5lIFBQRV9NQ0FTVF9MXzIgMHg5OAorI2RlZmluZSBQUEVfTUNBU1RfSF8yIDB4OUMKKyNkZWZpbmUgUFBFX01DQVNUX0xfMyAweEEwCisjZGVmaW5lIFBQRV9NQ0FTVF9IXzMgMHhBNAorI2RlZmluZSBQUEVfTUNBU1RfTF80IDB4QTgKKyNkZWZpbmUgUFBFX01DQVNUX0hfNCAweEFDCisjZGVmaW5lIFBQRV9NQ0FTVF9MXzUgMHhCMAorI2RlZmluZSBQUEVfTUNBU1RfSF81IDB4QjQKKyNkZWZpbmUgUFBFX01DQVNUX0xfNiAweEJDCisjZGVmaW5lIFBQRV9NQ0FTVF9IXzYgMHhDMAorI2RlZmluZSBQUEVfTUNBU1RfTF83IDB4QzQKKyNkZWZpbmUgUFBFX01DQVNUX0hfNyAweEM4CisjZGVmaW5lIFBQRV9NQ0FTVF9MXzggMHhDQworI2RlZmluZSBQUEVfTUNBU1RfSF84IDB4RDAKKyNkZWZpbmUgUFBFX01DQVNUX0xfOSAweEQ0CisjZGVmaW5lIFBQRV9NQ0FTVF9IXzkgMHhEOAorI2RlZmluZSBQUEVfTUNBU1RfTF9BIDB4REMKKyNkZWZpbmUgUFBFX01DQVNUX0hfQSAweEUwCisjZGVmaW5lIFBQRV9NQ0FTVF9MX0IgMHhFNAorI2RlZmluZSBQUEVfTUNBU1RfSF9CIDB4RTgKKyNkZWZpbmUgUFBFX01DQVNUX0xfQyAweEVDCisjZGVmaW5lIFBQRV9NQ0FTVF9IX0MgMHhGMAorI2RlZmluZSBQUEVfTUNBU1RfTF9EIDB4RjQKKyNkZWZpbmUgUFBFX01DQVNUX0hfRCAweEY4CisjZGVmaW5lIFBQRV9NQ0FTVF9MX0UgMHhGQworI2RlZmluZSBQUEVfTUNBU1RfSF9FIDB4RTAKKyNkZWZpbmUgUFBFX01DQVNUX0xfRiAweDEwMAorI2RlZmluZSBQUEVfTUNBU1RfSF9GIDB4MTA0CisjZGVmaW5lIFBQRV9NQ0FTVF9MXzEwIDB4QzAwCisjZGVmaW5lIFBQRV9NQ0FTVF9IXzEwIDB4QzA0CisjZGVmaW5lIFBQRV9NVFVfRFJQIDB4MTA4CisjZGVmaW5lIFBQRV9NVFVfVkxZUl8wIDB4MTBDCisjZGVmaW5lIFBQRV9NVFVfVkxZUl8xIDB4MTEwCisjZGVmaW5lIFBQRV9NVFVfVkxZUl8yIDB4MTE0CisjZGVmaW5lIFBQRV9WUE1fVFBJRCAweDExOAorI2RlZmluZSBQUEVfQ0FIX0NUUkwgMHgxMjAKKyNkZWZpbmUgUFBFX0NBSF9UQUdfU1JIIDB4MTI0CisjZGVmaW5lIFBQRV9DQUhfTElORV9SVyAweDEyOAorI2RlZmluZSBQUEVfQ0FIX1dEQVRBIDB4MTJDCisjZGVmaW5lIFBQRV9DQUhfUkRBVEEgMHgxMzAKKworI2RlZmluZSBQUEVfTUlCX0NGRyAwWDEzNAorI2RlZmluZSBQUEVfTUlCX1RCX0JBU0UgMFgxMzgKKyNkZWZpbmUgUFBFX01JQl9TRVJfQ1IgMFgxM0MKKyNkZWZpbmUgUFBFX01JQl9TRVJfUjAgMFgxNDAKKyNkZWZpbmUgUFBFX01JQl9TRVJfUjEgMFgxNDQKKyNkZWZpbmUgUFBFX01JQl9TRVJfUjIgMFgxNDgKKyNkZWZpbmUgUFBFX01JQl9DQUhfQ1RSTCAwWDE1MAorI2RlZmluZSBQUEVfTUlCX0NBSF9UQUdfU1JIIDBYMTU0CisjZGVmaW5lIFBQRV9NSUJfQ0FIX0xJTkVfUlcgMFgxNTgKKyNkZWZpbmUgUFBFX01JQl9DQUhfV0RBVEEgMFgxNUMKKyNkZWZpbmUgUFBFX01JQl9DQUhfUkRBVEEgMFgxNjAKKyNkZWZpbmUgUFBFX1NCV19DVFJMIDB4MTc0CisKKyNkZWZpbmUgR0RNQTFfRldEX0NGRyAweDUwMAorI2RlZmluZSBHRE1BMl9GV0RfQ0ZHIDB4MTUwMAorCisvKiBRRE1BIFR4IHF1ZXVlIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgUVRYX0NGRyh4KQkJCShRRE1BX0JBU0UgKyAoKHgpICogMHgxMCkpCisjZGVmaW5lIFFUWF9DRkdfSFdfUkVTVl9DTlRfT0ZGU0VUCSg4KQorI2RlZmluZSBRVFhfQ0ZHX1NXX1JFU1ZfQ05UX09GRlNFVAkoMCkKKworI2RlZmluZSBRVFhfU0NIKHgpCQkJKFFETUFfQkFTRSArIDB4NCArICgoeCkgKiAweDEwKSkKKyNkZWZpbmUgUVRYX1NDSF9NSU5fUkFURV9FTgkJQklUKDI3KQorI2RlZmluZSBRVFhfU0NIX01BWF9SQVRFX0VOCQlCSVQoMTEpCisjZGVmaW5lIFFUWF9TQ0hfTUlOX1JBVEVfTUFOX09GRlNFVAkoMjApCisjZGVmaW5lIFFUWF9TQ0hfTUlOX1JBVEVfRVhQX09GRlNFVAkoMTYpCisjZGVmaW5lIFFUWF9TQ0hfTUFYX1JBVEVfV0dIVF9PRkZTRVQJKDEyKQorI2RlZmluZSBRVFhfU0NIX01BWF9SQVRFX01BTl9PRkZTRVQJKDQpCisjZGVmaW5lIFFUWF9TQ0hfTUFYX1JBVEVfRVhQX09GRlNFVAkoMCkKKworLyogUURNQSBUeCBzY2hlZHVsZXIgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSBRRE1BX1BBR0UJCQkoUURNQV9CQVNFICsgMHgxZjApCisjZGVmaW5lIFFETUFfVFhfMlNDSF9CQVNFCQkoUURNQV9CQVNFICsgMHgyMTQpCisjZGVmaW5lIFFUWF9NSUJfSUYJCQkoUURNQV9CQVNFICsgMHgyYmMpCisjZGVmaW5lIFFETUFfVFhfNFNDSF9CQVNFKHgpCQkoUURNQV9CQVNFICsgMHgzOTggKyAoKCh4KSA+PiAxKSAqIDB4NCkpCisjZGVmaW5lIFFETUFfVFhfU0NIX1dGUV9FTgkJQklUKDE1KQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFJlZ2lzdGVyIE1hc2sqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBQUEVfVEJfQ0ZHIG1hc2sgKi8KKyNkZWZpbmUgVEJfRVRSWV9OVU0gKDB4NyA8PCAwKSAvKiBSVyAqLworI2RlZmluZSBUQl9FTlRSWV9TSVpFICgweDEgPDwgMykgLyogUlcgKi8KKyNkZWZpbmUgU01BICgweDMgPDwgNCkgLyogUlcgKi8KKyNkZWZpbmUgTlRVX0FHRSAoMHgxIDw8IDcpIC8qIFJXICovCisjZGVmaW5lIFVOQkRfQUdFICgweDEgPDwgOCkgLyogUlcgKi8KKyNkZWZpbmUgVENQX0FHRSAoMHgxIDw8IDkpIC8qIFJXICovCisjZGVmaW5lIFVEUF9BR0UgKDB4MSA8PCAxMCkgLyogUlcgKi8KKyNkZWZpbmUgRklOX0FHRSAoMHgxIDw8IDExKSAvKiBSVyAqLworI2RlZmluZSBLQV9DRkcgKDB4MyA8PCAxMikKKyNkZWZpbmUgSEFTSF9NT0RFICgweDMgPDwgMTQpIC8qIFJXICovCisjZGVmaW5lIFNDQU5fTU9ERSAoMHgzIDw8IDE2KSAvKiBSVyAqLworI2RlZmluZSBYTU9ERSAoMHgzIDw8IDE4KSAvKiBSVyAqLworCisvKlBQRV9DQUhfQ1RSTCBtYXNrKi8KKyNkZWZpbmUgQ0FIX0VOICgweDEgPDwgMCkgLyogUlcgKi8KKyNkZWZpbmUgQ0FIX1hfTU9ERSAoMHgxIDw8IDkpIC8qIFJXICovCisKKy8qUFBFX1VOQl9BR0UgbWFzayovCisjZGVmaW5lIFVOQl9ETFRBICgweGZmIDw8IDApIC8qIFJXICovCisjZGVmaW5lIFVOQl9NTlAgKDB4ZmZmZiA8PCAxNikgLyogUlcgKi8KKworLypQUEVfQk5EX0FHRV8wIG1hc2sqLworI2RlZmluZSBVRFBfRExUQSAoMHhmZmZmIDw8IDApIC8qIFJXICovCisjZGVmaW5lIE5UVV9ETFRBICgweGZmZmYgPDwgMTYpIC8qIFJXICovCisKKy8qUFBFX0JORF9BR0VfMSBtYXNrKi8KKyNkZWZpbmUgVENQX0RMVEEgKDB4ZmZmZiA8PCAwKSAvKiBSVyAqLworI2RlZmluZSBGSU5fRExUQSAoMHhmZmZmIDw8IDE2KSAvKiBSVyAqLworCisvKlBQRV9LQSBtYXNrKi8KKyNkZWZpbmUgS0FfVCAoMHhmZmZmIDw8IDApIC8qIFJXICovCisjZGVmaW5lIFRDUF9LQSAoMHhmZiA8PCAxNikgLyogUlcgKi8KKyNkZWZpbmUgVURQX0tBICgweGZmIDw8IDI0KSAvKiBSVyAqLworCisvKlBQRV9CSU5EX0xNVF8wIG1hc2sqLworI2RlZmluZSBRVVJUX0xNVCAoMHgzZmYgPDwgMCkgLyogUlcgKi8KKyNkZWZpbmUgSEFMRl9MTVQgKDB4M2ZmIDw8IDE2KSAvKiBSVyAqLworCisvKlBQRV9CSU5EX0xNVF8xIG1hc2sqLworI2RlZmluZSBGVUxMX0xNVCAoMHgzZmZmIDw8IDApIC8qIFJXICovCisjZGVmaW5lIE5UVV9LQSAoMHhmZiA8PCAxNikgLyogUlcgKi8KKworLypQUEVfQk5EUiBtYXNrKi8KKyNkZWZpbmUgQklORF9SQVRFICgweGZmZmYgPDwgMCkgLyogUlcgKi8KKyNkZWZpbmUgUEJORF9SRF9QUkQgKDB4ZmZmZiA8PCAxNikgLyogUlcgKi8KKworLypQUEVfR0xPX0NGRyBtYXNrKi8KKyNkZWZpbmUgUFBFX0VOICgweDEgPDwgMCkgLyogUlcgKi8KKyNkZWZpbmUgVFRMMF9EUlAgKDB4MSA8PCA0KSAvKiBSVyAqLworI2RlZmluZSBNQ0FTVF9UQl9FTiAoMHgxIDw8IDcpIC8qIFJXICovCisjZGVmaW5lIE1DQVNUX0hBU0ggKDB4MyA8PCAxMikgLyogUlcgKi8KKworI2RlZmluZSBNQ19QM19QUFNFICgweGYgPDwgMTIpIC8qIFJXICovCisjZGVmaW5lIE1DX1AyX1BQU0UgKDB4ZiA8PCA4KSAvKiBSVyAqLworI2RlZmluZSBNQ19QMV9QUFNFICgweGYgPDwgNCkgLyogUlcgKi8KKyNkZWZpbmUgTUNfUDBfUFBTRSAoMHhmIDw8IDApIC8qIFJXICovCisKKyNkZWZpbmUgTUlCX0VOICgweDEgPDwgMCkgLyogUlcgKi8KKyNkZWZpbmUgTUlCX1JFQURfQ0xFQVIgKDBYMSA8PCAxKSAvKiBSVyAqLworI2RlZmluZSBNSUJfQ0FIX0VOICgwWDEgPDwgMCkgLyogUlcgKi8KKworLypHRE1BX0ZXRF9DRkcgbWFzayAqLworI2RlZmluZSBHRE1fVUZSQ19NQVNLICgweDcgPDwgMTIpIC8qIFJXICovCisjZGVmaW5lIEdETV9CRlJDX01BU0sgKDB4NyA8PCA4KSAvKlJXKi8KKyNkZWZpbmUgR0RNX01GUkNfTUFTSyAoMHg3IDw8IDQpIC8qUlcqLworI2RlZmluZSBHRE1fT0ZSQ19NQVNLICgweDcgPDwgMCkgLypSVyovCisjZGVmaW5lIEdETV9BTExfRlJDX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJKEdETV9VRlJDX01BU0sgfCBHRE1fQkZSQ19NQVNLIHwgR0RNX01GUkNfTUFTSyB8IEdETV9PRlJDX01BU0spCisKKy8qUURNQV9QQUdFIG1hc2sqLworI2RlZmluZSBRVFhfQ0ZHX1BBR0UgKDB4ZiA8PCAwKSAvKiBSVyAqLworCisvKlFUWF9NSUJfSUYgbWFzayovCisjZGVmaW5lIE1JQl9PTl9RVFhfQ0ZHICgweDEgPDwgMzEpIC8qIFJXICovCisjZGVmaW5lIFZRVFhfTUlCX0VOICgweDEgPDwgMjgpIC8qIFJXICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogRGVzY3JpcHRvciBTdHJ1Y3R1cmUgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmIGRlZmluZWQoQ09ORklHX01FRElBVEVLX05FVFNZU19WMikKK3N0cnVjdCBobmF0X3VuYmluZF9pbmZvX2JsayB7CisJdTMyIHRpbWVfc3RhbXAgOiA4OworCXUzMiBzcCA6IDQ7CisJdTMyIHBjbnQgOiA4OworCXUzMiBpbGdmIDogMTsKKwl1MzIgbWMgOiAxOworCXUzMiBwcmViIDogMTsKKwl1MzIgcGt0X3R5cGUgOiA1OworCXUzMiBzdGF0ZSA6IDI7CisJdTMyIHVkcCA6IDE7CisJdTMyIHN0YSA6IDE7CQkvKiBzdGF0aWMgZW50cnkgKi8KK30gX19wYWNrZWQ7CisKK3N0cnVjdCBobmF0X2JpbmRfaW5mb19ibGsgeworCXUzMiB0aW1lX3N0YW1wIDogODsKKwl1MzIgc3AgOiA0OworCXUzMiBtYyA6IDE7CisJdTMyIGthIDogMTsJCS8qIGtlZXAgYWxpdmUgKi8KKwl1MzIgdmxhbl9sYXllciA6IDM7CisJdTMyIHBzbiA6IDE7CQkvKiBlZ3Jlc3MgcGFja2V0IGhhcyBQUFBvRSBzZXNzaW9uICovCisJdTMyIHZwbSA6IDE7CQkvKiAwOmV0aGVydHlwZSByZW1hcmssIDE6MHg4MTAwKENSIGRlZmF1bHQpICovCisJdTMyIHBzIDogMTsJCS8qIHBhY2tldCBzYW1wbGluZyAqLworCXUzMiBjYWggOiAxOwkJLyogY2FjaGVhYmxlIGZsYWcgKi8KKwl1MzIgcm10IDogMTsJCS8qIHJlbW92ZSB0dW5uZWwgaXAgaGVhZGVyICg2cmQvZHNsaXRlIG9ubHkpICovCisJdTMyIHR0bCA6IDE7CisJdTMyIHBrdF90eXBlIDogNTsKKwl1MzIgc3RhdGUgOiAyOworCXUzMiB1ZHAgOiAxOworCXUzMiBzdGEgOiAxOwkJLyogc3RhdGljIGVudHJ5ICovCit9IF9fcGFja2VkOworCitzdHJ1Y3QgaG5hdF9pbmZvX2JsazIgeworCXUzMiBxaWQgOiA3OwkJLyogUUlEIGluIFFvcyBQb3J0ICovCisJdTMyIHBvcnRfbWcgOiAxOworCXUzMiBmcW9zIDogMTsJCS8qIGZvcmNlIHRvIFBTRSBRb1MgcG9ydCAqLworCXUzMiBkcCA6IDQ7CQkvKiBmb3JjZSB0byBQU0UgcG9ydCB4ICovCisJdTMyIG1jYXN0IDogMTsJCS8qIG11bHRpY2FzdCB0aGlzIHBhY2tldCB0byBDUFUgKi8KKwl1MzIgcGNwbCA6IDE7CQkvKiBPU0JOICovCisJdTMyIG1pYmYgOiAxOworCXUzMiBhbGVuIDogMTsKKwl1MzIgcnhpZCA6IDI7CisJdTMyIHdpbmZvaSA6IDE7CisJdTMyIHBvcnRfYWcgOiA0OworCXUzMiBkc2NwIDogODsJCS8qIERTQ1AgdmFsdWUgKi8KK30gX19wYWNrZWQ7CisKK3N0cnVjdCBobmF0X3dpbmZvIHsKKwl1MzIgYnNzaWQgOiA2OwkJLyogV2lGaSBCc3NpZHggKi8KKwl1MzIgd2NpZCA6IDEwOwkJLyogV2lGaSB3dGFibGUgSWR4ICovCit9IF9fcGFja2VkOworCisjZWxzZQorc3RydWN0IGhuYXRfdW5iaW5kX2luZm9fYmxrIHsKKwl1MzIgdGltZV9zdGFtcCA6IDg7CisJdTMyIHBjbnQgOiAxNjsgLyogcGFja2V0IGNvdW50ICovCisJdTMyIHByZWIgOiAxOworCXUzMiBwa3RfdHlwZSA6IDM7CisJdTMyIHN0YXRlIDogMjsKKwl1MzIgdWRwIDogMTsKKwl1MzIgc3RhIDogMTsgLyogc3RhdGljIGVudHJ5ICovCit9IF9fcGFja2VkOworCitzdHJ1Y3QgaG5hdF9iaW5kX2luZm9fYmxrIHsKKwl1MzIgdGltZV9zdGFtcCA6IDE1OworCXUzMiBrYSA6IDE7IC8qIGtlZXAgYWxpdmUgKi8KKwl1MzIgdmxhbl9sYXllciA6IDM7CisJdTMyIHBzbiA6IDE7IC8qIGVncmVzcyBwYWNrZXQgaGFzIFBQUG9FIHNlc3Npb24gKi8KKwl1MzIgdnBtIDogMTsgLyogMDpldGhlcnR5cGUgcmVtYXJrLCAxOjB4ODEwMChDUiBkZWZhdWx0KSAqLworCXUzMiBwcyA6IDE7IC8qIHBhY2tldCBzYW1wbGluZyAqLworCXUzMiBjYWggOiAxOyAvKiBjYWNoZWFibGUgZmxhZyAqLworCXUzMiBybXQgOiAxOyAvKiByZW1vdmUgdHVubmVsIGlwIGhlYWRlciAoNnJkL2RzbGl0ZSBvbmx5KSAqLworCXUzMiB0dGwgOiAxOworCXUzMiBwa3RfdHlwZSA6IDM7CisJdTMyIHN0YXRlIDogMjsKKwl1MzIgdWRwIDogMTsKKwl1MzIgc3RhIDogMTsgLyogc3RhdGljIGVudHJ5ICovCit9IF9fcGFja2VkOworCitzdHJ1Y3QgaG5hdF9pbmZvX2JsazIgeworCXUzMiBxaWQgOiA0OyAvKiBRSUQgaW4gUW9zIFBvcnQgKi8KKwl1MzIgZnFvcyA6IDE7IC8qIGZvcmNlIHRvIFBTRSBRb1MgcG9ydCAqLworCXUzMiBkcCA6IDM7IC8qIGZvcmNlIHRvIFBTRSBwb3J0IHgKKwkJICAgICAqIDA6UFNFLDE6R1NXLCAyOkdNQUMsNDpQUEUsNTpRRE1BLDc9RFJPUAorCQkgICAgICovCisJdTMyIG1jYXN0IDogMTsgLyogbXVsdGljYXN0IHRoaXMgcGFja2V0IHRvIENQVSAqLworCXUzMiBwY3BsIDogMTsgLyogT1NCTiAqLworCXUzMiBtaWJmIDogMTsgLyogMDpvZmYgMTpvbiBQUEUgTUlCIGNvdW50ZXIgKi8KKwl1MzIgYWxlbiA6IDE7IC8qIDA6cG9zdCAxOnByZSBwYWNrZXQgbGVuZ3RoIGluIGFjY291bnRpbmcgKi8KKwl1MzIgcG9ydF9tZyA6IDY7IC8qIHBvcnQgbWV0ZXIgZ3JvdXAgKi8KKwl1MzIgcG9ydF9hZyA6IDY7IC8qIHBvcnQgYWNjb3VudCBncm91cCAqLworCXUzMiBkc2NwIDogODsgLyogRFNDUCB2YWx1ZSAqLworfSBfX3BhY2tlZDsKKworc3RydWN0IGhuYXRfd2luZm8geworCXUzMiBic3NpZCA6IDY7CQkvKiBXaUZpIEJzc2lkeCAqLworCXUzMiB3Y2lkIDogODsJCS8qIFdpRmkgd3RhYmxlIElkeCAqLworCXUzMiByeGlkIDogMjsJCS8qIFdpRmkgUmluZyBpZHggKi8KK30gX19wYWNrZWQ7CisjZW5kaWYKKworLyogaW5mbyBibGsyIGZvciBXSE5BVCAqLworc3RydWN0IGhuYXRfaW5mb19ibGsyX3dobmF0IHsKKwl1MzIgcWlkIDogNDsgLyogUUlEWzM6MF0gaW4gUW9zIFBvcnQgKi8KKwl1MzIgZnFvcyA6IDE7IC8qIGZvcmNlIHRvIFBTRSBRb1MgcG9ydCAqLworCXUzMiBkcCA6IDM7IC8qIGZvcmNlIHRvIFBTRSBwb3J0IHgKKwkJICAgICAqIDA6UFNFLDE6R1NXLCAyOkdNQUMsNDpQUEUsNTpRRE1BLDc9RFJPUAorCQkgICAgICovCisJdTMyIG1jYXN0IDogMTsgLyogbXVsdGljYXN0IHRoaXMgcGFja2V0IHRvIENQVSAqLworCXUzMiBwY3BsIDogMTsgLyogT1NCTiAqLworCXUzMiBtaWJmIDogMTsgLyogMDpvZmYgMTpvbiBQUEUgTUlCIGNvdW50ZXIgKi8KKwl1MzIgYWxlbiA6IDE7IC8qIDA6cG9zdCAxOnByZSBwYWNrZXQgbGVuZ3RoIGluIGFjY291bnRpbmcgKi8KKwl1MzIgcWlkMiA6IDI7IC8qIFFJRFs1OjRdIGluIFFvcyBQb3J0ICovCisJdTMyIHJlc3YgOiAyOworCXUzMiB3ZG1haWQgOiAxOyAvKiAwOnRvIHBjaWUwIGRldiAxOnRvIHBjaWUxIGRldiAqLworCXUzMiB3aW5mb2kgOiAxOyAvKiAwOm9mZiAxOm9uIFdpLUZpIGh3bmF0IHN1cHBvcnQgKi8KKwl1MzIgcG9ydF9hZyA6IDY7IC8qIHBvcnQgYWNjb3VudCBncm91cCAqLworCXUzMiBkc2NwIDogODsgLyogRFNDUCB2YWx1ZSAqLworfSBfX3BhY2tlZDsKKworc3RydWN0IGhuYXRfaXB2NF9obmFwdCB7CisJdW5pb24geworCQlzdHJ1Y3QgaG5hdF9iaW5kX2luZm9fYmxrIGJmaWIxOworCQlzdHJ1Y3QgaG5hdF91bmJpbmRfaW5mb19ibGsgdWRpYjE7CisJCXUzMiBpbmZvX2JsazE7CisJfTsKKwl1MzIgc2lwOworCXUzMiBkaXA7CisJdTE2IGRwb3J0OworCXUxNiBzcG9ydDsKKwl1bmlvbiB7CisJCXN0cnVjdCBobmF0X2luZm9fYmxrMiBpYmxrMjsKKwkJc3RydWN0IGhuYXRfaW5mb19ibGsyX3dobmF0IGlibGsydzsKKwkJdTMyIGluZm9fYmxrMjsKKwl9OworCXUzMiBuZXdfc2lwOworCXUzMiBuZXdfZGlwOworCXUxNiBuZXdfZHBvcnQ7CisJdTE2IG5ld19zcG9ydDsKKwl1MTYgbV90aW1lc3RhbXA7IC8qIEZvciBtY2FzdCovCisJdTE2IHJlc3YxOworCXUzMiByZXN2MjsKKwl1MzIgcmVzdjMgOiAyNjsKKwl1MzIgYWN0X2RwIDogNjsgLyogVURGICovCisJdTE2IHZsYW4xOworCXUxNiBldHlwZTsKKwl1MzIgZG1hY19oaTsKKwl1bmlvbiB7CisjaWYgIWRlZmluZWQoQ09ORklHX01FRElBVEVLX05FVFNZU19WMikKKwkJc3RydWN0IGhuYXRfd2luZm8gd2luZm87CisjZW5kaWYKKwkJdTE2IHZsYW4yOworCX07CisJdTE2IGRtYWNfbG87CisJdTMyIHNtYWNfaGk7CisJdTE2IHBwcG9lX2lkOworCXUxNiBzbWFjX2xvOworI2lmIGRlZmluZWQoQ09ORklHX01FRElBVEVLX05FVFNZU19WMikKKwl1MTYgbWluZm87CisJc3RydWN0IGhuYXRfd2luZm8gd2luZm87CisjZW5kaWYKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBobmF0X2lwdjRfZHNsaXRlIHsKKwl1bmlvbiB7CisJCXN0cnVjdCBobmF0X2JpbmRfaW5mb19ibGsgYmZpYjE7CisJCXN0cnVjdCBobmF0X3VuYmluZF9pbmZvX2JsayB1ZGliMTsKKwkJdTMyIGluZm9fYmxrMTsKKwl9OworCXUzMiBzaXA7CisJdTMyIGRpcDsKKwl1MTYgZHBvcnQ7CisJdTE2IHNwb3J0OworCisJdTMyIHR1bm5lbF9zaXB2Nl8wOworCXUzMiB0dW5uZWxfc2lwdjZfMTsKKwl1MzIgdHVubmVsX3NpcHY2XzI7CisJdTMyIHR1bm5lbF9zaXB2Nl8zOworCisJdTMyIHR1bm5lbF9kaXB2Nl8wOworCXUzMiB0dW5uZWxfZGlwdjZfMTsKKwl1MzIgdHVubmVsX2RpcHY2XzI7CisJdTMyIHR1bm5lbF9kaXB2Nl8zOworCisJdTggZmxvd19sYmxbM107IC8qIGluIG9yZGVyIHRvIGNvbnNpc3Qgd2l0aCBMaW51eCBrZXJuZWwgKHNob3VsZCBiZSAyMGJpdHMpICovCisJdTggcHJpb3JpdHk7ICAgIC8qIGluIG9yZGVyIHRvIGNvbnNpc3Qgd2l0aCBMaW51eCBrZXJuZWwgKHNob3VsZCBiZSA4Yml0cykgKi8KKwl1MzIgaG9wX2xpbWl0IDogODsKKwl1MzIgcmVzdjIgOiAxODsKKwl1MzIgYWN0X2RwIDogNjsgLyogVURGICovCisKKwl1bmlvbiB7CisJCXN0cnVjdCBobmF0X2luZm9fYmxrMiBpYmxrMjsKKwkJc3RydWN0IGhuYXRfaW5mb19ibGsyX3dobmF0IGlibGsydzsKKwkJdTMyIGluZm9fYmxrMjsKKwl9OworCisJdTE2IHZsYW4xOworCXUxNiBldHlwZTsKKwl1MzIgZG1hY19oaTsKKwl1bmlvbiB7CisjaWYgIWRlZmluZWQoQ09ORklHX01FRElBVEVLX05FVFNZU19WMikKKwkJc3RydWN0IGhuYXRfd2luZm8gd2luZm87CisjZW5kaWYKKwkJdTE2IHZsYW4yOworCX07CisJdTE2IGRtYWNfbG87CisJdTMyIHNtYWNfaGk7CisJdTE2IHBwcG9lX2lkOworCXUxNiBzbWFjX2xvOworI2lmIGRlZmluZWQoQ09ORklHX01FRElBVEVLX05FVFNZU19WMikKKwl1MTYgbWluZm87CisJc3RydWN0IGhuYXRfd2luZm8gd2luZm87CisJdTMyIG5ld19zaXA7CisgICAgICAgIHUzMiBuZXdfZGlwOworICAgICAgICB1MTYgbmV3X2Rwb3J0OworICAgICAgICB1MTYgbmV3X3Nwb3J0OworI2VuZGlmCit9IF9fcGFja2VkOworCitzdHJ1Y3QgaG5hdF9pcHY2XzN0X3JvdXRlIHsKKwl1bmlvbiB7CisJCXN0cnVjdCBobmF0X2JpbmRfaW5mb19ibGsgYmZpYjE7CisJCXN0cnVjdCBobmF0X3VuYmluZF9pbmZvX2JsayB1ZGliMTsKKwkJdTMyIGluZm9fYmxrMTsKKwl9OworCXUzMiBpcHY2X3NpcDA7CisJdTMyIGlwdjZfc2lwMTsKKwl1MzIgaXB2Nl9zaXAyOworCXUzMiBpcHY2X3NpcDM7CisJdTMyIGlwdjZfZGlwMDsKKwl1MzIgaXB2Nl9kaXAxOworCXUzMiBpcHY2X2RpcDI7CisJdTMyIGlwdjZfZGlwMzsKKwl1MzIgcHJvdCA6IDg7CisJdTMyIGhwaCA6IDI0OyAvKiBoYXNoIHBsYWNlaG9sZGVyICovCisKKwl1MzIgcmVzdjE7CisJdTMyIHJlc3YyOworCXUzMiByZXN2MzsKKwl1MzIgcmVzdjQgOiAyNjsKKwl1MzIgYWN0X2RwIDogNjsgLyogVURGICovCisKKwl1bmlvbiB7CisJCXN0cnVjdCBobmF0X2luZm9fYmxrMiBpYmxrMjsKKwkJc3RydWN0IGhuYXRfaW5mb19ibGsyX3dobmF0IGlibGsydzsKKwkJdTMyIGluZm9fYmxrMjsKKwl9OworCXUxNiB2bGFuMTsKKwl1MTYgZXR5cGU7CisJdTMyIGRtYWNfaGk7CisJdW5pb24geworI2lmICFkZWZpbmVkKENPTkZJR19NRURJQVRFS19ORVRTWVNfVjIpCisJCXN0cnVjdCBobmF0X3dpbmZvIHdpbmZvOworI2VuZGlmCisJCXUxNiB2bGFuMjsKKwl9OworCXUxNiBkbWFjX2xvOworCXUzMiBzbWFjX2hpOworCXUxNiBwcHBvZV9pZDsKKwl1MTYgc21hY19sbzsKKyNpZiBkZWZpbmVkKENPTkZJR19NRURJQVRFS19ORVRTWVNfVjIpCisJdTE2IG1pbmZvOworCXN0cnVjdCBobmF0X3dpbmZvIHdpbmZvOworI2VuZGlmCit9IF9fcGFja2VkOworCitzdHJ1Y3QgaG5hdF9pcHY2XzV0X3JvdXRlIHsKKwl1bmlvbiB7CisJCXN0cnVjdCBobmF0X2JpbmRfaW5mb19ibGsgYmZpYjE7CisJCXN0cnVjdCBobmF0X3VuYmluZF9pbmZvX2JsayB1ZGliMTsKKwkJdTMyIGluZm9fYmxrMTsKKwl9OworCXUzMiBpcHY2X3NpcDA7CisJdTMyIGlwdjZfc2lwMTsKKwl1MzIgaXB2Nl9zaXAyOworCXUzMiBpcHY2X3NpcDM7CisJdTMyIGlwdjZfZGlwMDsKKwl1MzIgaXB2Nl9kaXAxOworCXUzMiBpcHY2X2RpcDI7CisJdTMyIGlwdjZfZGlwMzsKKwl1MTYgZHBvcnQ7CisJdTE2IHNwb3J0OworCisJdTMyIHJlc3YxOworCXUzMiByZXN2MjsKKwl1MzIgcmVzdjM7CisJdTMyIHJlc3Y0IDogMjY7CisJdTMyIGFjdF9kcCA6IDY7IC8qIFVERiAqLworCisJdW5pb24geworCQlzdHJ1Y3QgaG5hdF9pbmZvX2JsazIgaWJsazI7CisJCXN0cnVjdCBobmF0X2luZm9fYmxrMl93aG5hdCBpYmxrMnc7CisJCXUzMiBpbmZvX2JsazI7CisJfTsKKworCXUxNiB2bGFuMTsKKwl1MTYgZXR5cGU7CisJdTMyIGRtYWNfaGk7CisJdW5pb24geworI2lmICFkZWZpbmVkKENPTkZJR19NRURJQVRFS19ORVRTWVNfVjIpCisJCXN0cnVjdCBobmF0X3dpbmZvIHdpbmZvOworI2VuZGlmCisJCXUxNiB2bGFuMjsKKwl9OworCXUxNiBkbWFjX2xvOworCXUzMiBzbWFjX2hpOworCXUxNiBwcHBvZV9pZDsKKwl1MTYgc21hY19sbzsKKyNpZiBkZWZpbmVkKENPTkZJR19NRURJQVRFS19ORVRTWVNfVjIpCisJdTE2IG1pbmZvOworCXN0cnVjdCBobmF0X3dpbmZvIHdpbmZvOworI2VuZGlmCit9IF9fcGFja2VkOworCitzdHJ1Y3QgaG5hdF9pcHY2XzZyZCB7CisJdW5pb24geworCQlzdHJ1Y3QgaG5hdF9iaW5kX2luZm9fYmxrIGJmaWIxOworCQlzdHJ1Y3QgaG5hdF91bmJpbmRfaW5mb19ibGsgdWRpYjE7CisJCXUzMiBpbmZvX2JsazE7CisJfTsKKwl1MzIgaXB2Nl9zaXAwOworCXUzMiBpcHY2X3NpcDE7CisJdTMyIGlwdjZfc2lwMjsKKwl1MzIgaXB2Nl9zaXAzOworCXUzMiBpcHY2X2RpcDA7CisJdTMyIGlwdjZfZGlwMTsKKwl1MzIgaXB2Nl9kaXAyOworCXUzMiBpcHY2X2RpcDM7CisJdTE2IGRwb3J0OworCXUxNiBzcG9ydDsKKworCXUzMiB0dW5uZWxfc2lwdjQ7CisJdTMyIHR1bm5lbF9kaXB2NDsKKwl1MzIgaGRyX2Noa3N1bSA6IDE2OworCXUzMiBkc2NwIDogODsKKwl1MzIgdHRsIDogODsKKwl1MzIgZmxhZyA6IDM7CisJdTMyIHJlc3YxIDogMTM7CisJdTMyIHBlcl9mbG93XzZyZF9pZCA6IDE7CisJdTMyIHJlc3YyIDogOTsKKwl1MzIgYWN0X2RwIDogNjsgLyogVURGICovCisKKwl1bmlvbiB7CisJCXN0cnVjdCBobmF0X2luZm9fYmxrMiBpYmxrMjsKKwkJc3RydWN0IGhuYXRfaW5mb19ibGsyX3dobmF0IGlibGsydzsKKwkJdTMyIGluZm9fYmxrMjsKKwl9OworCisJdTE2IHZsYW4xOworCXUxNiBldHlwZTsKKwl1MzIgZG1hY19oaTsKKwl1bmlvbiB7CisjaWYgIWRlZmluZWQoQ09ORklHX01FRElBVEVLX05FVFNZU19WMikKKwkJc3RydWN0IGhuYXRfd2luZm8gd2luZm87CisjZW5kaWYKKwkJdTE2IHZsYW4yOworCX07CisJdTE2IGRtYWNfbG87CisJdTMyIHNtYWNfaGk7CisJdTE2IHBwcG9lX2lkOworCXUxNiBzbWFjX2xvOworI2lmIGRlZmluZWQoQ09ORklHX01FRElBVEVLX05FVFNZU19WMikKKwl1MTYgbWluZm87CisJc3RydWN0IGhuYXRfd2luZm8gd2luZm87CisJdTMyIHJlc3YzOworICAgICAgICB1MzIgcmVzdjQ7CisgICAgICAgIHUxNiBuZXdfZHBvcnQ7CisgICAgICAgIHUxNiBuZXdfc3BvcnQ7CisjZW5kaWYKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBmb2VfZW50cnkgeworCXVuaW9uIHsKKwkJc3RydWN0IGhuYXRfdW5iaW5kX2luZm9fYmxrIHVkaWIxOworCQlzdHJ1Y3QgaG5hdF9iaW5kX2luZm9fYmxrIGJmaWIxOworCQlzdHJ1Y3QgaG5hdF9pcHY0X2huYXB0IGlwdjRfaG5hcHQ7CisJCXN0cnVjdCBobmF0X2lwdjRfZHNsaXRlIGlwdjRfZHNsaXRlOworCQlzdHJ1Y3QgaG5hdF9pcHY2XzN0X3JvdXRlIGlwdjZfM3Rfcm91dGU7CisJCXN0cnVjdCBobmF0X2lwdjZfNXRfcm91dGUgaXB2Nl81dF9yb3V0ZTsKKwkJc3RydWN0IGhuYXRfaXB2Nl82cmQgaXB2Nl82cmQ7CisJfTsKK307CisKKy8qIElmIHVzZXIgd2FudHMgdG8gY2hhbmdlIGRlZmF1bHQgRk9FIGVudHJ5IG51bWJlciwgYm90aCBERUZfRVRSWV9OVU0gYW5kCisgKiBERUZfRVRSWV9OVU1fQ0ZHIG5lZWQgdG8gYmUgbW9kaWZpZWQuCisgKi8KKyNkZWZpbmUgREVGX0VUUllfTlVNCQk4MTkyCisvKiBmZWFzaWJsZSB2YWx1ZXMgOiAzMjc2OCwgMTYzODQsIDgxOTIsIDQwOTYsIDIwNDgsIDEwMjQgKi8KKyNkZWZpbmUgREVGX0VUUllfTlVNX0NGRwlUQUJMRV84SworLyogY29ycmVzcG9uZGluZyB2YWx1ZXMgOiBUQUJMRV8zMkssIFRBQkxFXzE2SywgVEFCTEVfOEssIFRBQkxFXzRLLCBUQUJMRV8ySywKKyAqIFRBQkxFXzFLCisgKi8KKyNkZWZpbmUgTUFYX0VYVF9ERVZTCQkoMHgzZlUpCisjZGVmaW5lIE1BWF9JRl9OVU0JCTY0CisKKyNpZiBkZWZpbmVkKENPTkZJR19NRURJQVRFS19ORVRTWVNfVjIpCisjZGVmaW5lIE1BWF9QUEVfTlVNCQkyCisjZWxzZQorI2RlZmluZSBNQVhfUFBFX05VTQkJMQorI2VuZGlmCisjZGVmaW5lIENGR19QUEVfTlVNCQkoaG5hdF9wcml2LT5wcGVfbnVtKQorCitzdHJ1Y3QgbWliX2VudHJ5IHsKKwl1MzIgYnl0X2NudF9sOworCXUxNiBieXRfY250X2g7CisJdTMyIHBrdF9jbnRfbDsKKwl1OCBwa3RfY250X2g7CisJdTggcmVzdjA7CisJdTMyIHJlc3YxOworfSBfX3BhY2tlZDsKKworc3RydWN0IGhuYXRfYWNjb3VudGluZyB7CisJdTY0IGJ5dGVzOworCXU2NCBwYWNrZXRzOworfTsKKworZW51bSBtdGtfaG5hdF92ZXJzaW9uIHsKKwlNVEtfSE5BVF9WMSA9IDEsIC8qIHZlcnNpb24gMTogbXQ3NjIxLCBtdDc2MjMgKi8KKwlNVEtfSE5BVF9WMiwgLyogdmVyc2lvbiAyOiBtdDc2MjIgKi8KKwlNVEtfSE5BVF9WMywgLyogdmVyc2lvbiAzOiBtdDc2MjkgKi8KKwlNVEtfSE5BVF9WNCwgLyogdmVyc2lvbiA0OiBtdDc5ODYgKi8KK307CisKK3N0cnVjdCBtdGtfaG5hdF9kYXRhIHsKKwl1OCBudW1fb2Zfc2NoOworCWJvb2wgd2huYXQ7CisJYm9vbCBwZXJfZmxvd19hY2NvdW50aW5nOworCWJvb2wgbWNhc3Q7CisJZW51bSBtdGtfaG5hdF92ZXJzaW9uIHZlcnNpb247Cit9OworCitzdHJ1Y3QgbXRrX2huYXQgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwl2b2lkIF9faW9tZW0gKmZlX2Jhc2U7CisJdm9pZCBfX2lvbWVtICpwcGVfYmFzZVtNQVhfUFBFX05VTV07CisJc3RydWN0IGZvZV9lbnRyeSAqZm9lX3RhYmxlX2NwdVtNQVhfUFBFX05VTV07CisJZG1hX2FkZHJfdCBmb2VfdGFibGVfZGV2W01BWF9QUEVfTlVNXTsKKwl1OCBlbmFibGU7CisJdTggZW5hYmxlMTsKKwlzdHJ1Y3QgZGVudHJ5ICpyb290OworCXN0cnVjdCBkZWJ1Z2ZzX3JlZ3NldDMyICpyZWdzZXRbTUFYX1BQRV9OVU1dOworCisJc3RydWN0IG1pYl9lbnRyeSAqZm9lX21pYl9jcHVbTUFYX1BQRV9OVU1dOworCWRtYV9hZGRyX3QgZm9lX21pYl9kZXZbTUFYX1BQRV9OVU1dOworCXN0cnVjdCBobmF0X2FjY291bnRpbmcgKmFjY3RbTUFYX1BQRV9OVU1dOworCWNvbnN0IHN0cnVjdCBtdGtfaG5hdF9kYXRhICpkYXRhOworCisJLypkZXZpY2VzIHdlIHBsYXlzIGZvciovCisJY2hhciB3YW5bSUZOQU1TSVpdOworCWNoYXIgbGFuW0lGTkFNU0laXTsKKwljaGFyIHBwZFtJRk5BTVNJWl07CisJdTE2IGx2aWQ7CisJdTE2IHd2aWQ7CisKKwlzdHJ1Y3QgcmVzZXRfY29udHJvbCAqcnN0YzsKKworCXU4IHBwZV9udW07CisJdTggZ21hY19udW07CisJdTggd2FuX2RzYV9wb3J0OworCXN0cnVjdCBwcGVfbWNhc3RfdGFibGUgKnBtY2FzdDsKKworCXUzMiBmb2VfZXRyeV9udW07CisJc3RydWN0IG5ldF9kZXZpY2UgKmdfcHBkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmdfd2FuZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICp3aWZpX2hvb2tfaWZbTUFYX0lGX05VTV07CisJc3RydWN0IGV4dGRldl9lbnRyeSAqZXh0X2lmW01BWF9FWFRfREVWU107CisJc3RydWN0IHRpbWVyX2xpc3QgaG5hdF9zbWFfYnVpbGRfZW50cnlfdGltZXI7CisJc3RydWN0IHRpbWVyX2xpc3QgaG5hdF9yZXNldF90aW1lc3RhbXBfdGltZXI7CisJc3RydWN0IHRpbWVyX2xpc3QgaG5hdF9tY2FzdF9jaGVja190aW1lcjsKKwlib29sIG5mX3N0YXRfZW47Cit9OworCitzdHJ1Y3QgZXh0ZGV2X2VudHJ5IHsKKwljaGFyIG5hbWVbSUZOQU1TSVpdOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Cit9OworCitzdHJ1Y3QgdGNwdWRwaGRyIHsKKwlfX2JlMTYgc3JjOworCV9fYmUxNiBkc3Q7Cit9OworCitlbnVtIEZvZUVudHJ5U3RhdGUgeyBJTlZBTElEID0gMCwgVU5CSU5EID0gMSwgQklORCA9IDIsIEZJTiA9IDMgfTsKKworZW51bSBGb2VJcEFjdCB7CisJSVBWNF9ITkFQVCA9IDAsCisJSVBWNF9ITkFUID0gMSwKKwlJUFY0X0RTTElURSA9IDMsCisJSVBWNl8zVF9ST1VURSA9IDQsCisJSVBWNl81VF9ST1VURSA9IDUsCisJSVBWNl82UkQgPSA3LAorI2lmIGRlZmluZWQoQ09ORklHX01FRElBVEVLX05FVFNZU19WMikKKwlJUFY0X01BUF9UID0gOCwKKwlJUFY0X01BUF9FID0gOSwKKyNlbHNlCisJSVBWNF9NQVBfVCA9IDYsCisJSVBWNF9NQVBfRSA9IDYsCisjZW5kaWYKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogQ29tbW9uIERlZmluaXRpb24qLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgSE5BVF9TV19WRVIgICAiMS4xLjAiCisjZGVmaW5lIEhBU0hfU0VFRF9LRVkgMHgxMjM0NTY3OAorCisvKlBQRV9UQl9DRkcgdmFsdWUqLworI2RlZmluZSBFTlRSWV84MEIgMQorI2RlZmluZSBFTlRSWV82NEIgMAorI2RlZmluZSBUQUJMRV8xSyAwCisjZGVmaW5lIFRBQkxFXzJLIDEKKyNkZWZpbmUgVEFCTEVfNEsgMgorI2RlZmluZSBUQUJMRV84SyAzCisjZGVmaW5lIFRBQkxFXzE2SyA0CisjZGVmaW5lIFRBQkxFXzMySyA1CisjZGVmaW5lIFNNQV9EUk9QIDAgLyogRHJvcCB0aGUgcGFja2V0ICovCisjZGVmaW5lIFNNQV9EUk9QMiAxIC8qIERyb3AgdGhlIHBhY2tldCAqLworI2RlZmluZSBTTUFfT05MWV9GV0RfQ1BVIDIgLyogT25seSBGb3J3YXJkIHRvIENQVSAqLworI2RlZmluZSBTTUFfRldEX0NQVV9CVUlMRF9FTlRSWSAzIC8qIEZvcndhcmQgdG8gQ1BVIGFuZCBidWlsZCBuZXcgRk9FIGVudHJ5ICovCisjZGVmaW5lIEhBU0hfTU9ERV8wIDAKKyNkZWZpbmUgSEFTSF9NT0RFXzEgMQorI2RlZmluZSBIQVNIX01PREVfMiAyCisjZGVmaW5lIEhBU0hfTU9ERV8zIDMKKworLypQUEVfRkxPV19DRkcqLworI2RlZmluZSBCSVRfRlVDX0ZPRSBCSVQoMikKKyNkZWZpbmUgQklUX0ZNQ19GT0UgQklUKDEpCisjZGVmaW5lIEJJVF9GQkNfRk9FIEJJVCgwKQorI2RlZmluZSBCSVRfVURQX0lQNEZfTkFUX0VOIEJJVCg3KSAvKkVuYWJsZSBJUHY0IGZyYWdtZW50ICsgVURQIHBhY2tldCBOQVQqLworI2RlZmluZSBCSVRfSVBWNl8zVF9ST1VURV9FTiBCSVQoOCkKKyNkZWZpbmUgQklUX0lQVjZfNVRfUk9VVEVfRU4gQklUKDkpCisjZGVmaW5lIEJJVF9JUFY2XzZSRF9FTiBCSVQoMTApCisjZGVmaW5lIEJJVF9JUFY0X05BVF9FTiBCSVQoMTIpCisjZGVmaW5lIEJJVF9JUFY0X05BUFRfRU4gQklUKDEzKQorI2RlZmluZSBCSVRfSVBWNF9EU0xfRU4gQklUKDE0KQorI2RlZmluZSBCSVRfTUlCX0JVU1kgQklUKDE2KQorI2RlZmluZSBCSVRfSVBWNF9OQVRfRlJBR19FTiBCSVQoMTcpCisjZGVmaW5lIEJJVF9JUFY0X0hBU0hfR1JFSyBCSVQoMTkpCisjZGVmaW5lIEJJVF9JUFY2X0hBU0hfR1JFSyBCSVQoMjApCisjZGVmaW5lIEJJVF9JUFY0X01BUEVfRU4gQklUKDIxKQorI2RlZmluZSBCSVRfSVBWNF9NQVBUX0VOIEJJVCgyMikKKworLypHRE1BX0ZXRF9DRkcgdmFsdWUqLworI2RlZmluZSBCSVRTX0dETV9VRlJDX1BfUFBFIChOUl9QUEUwX1BPUlQgPDwgMTIpCisjZGVmaW5lIEJJVFNfR0RNX0JGUkNfUF9QUEUgKE5SX1BQRTBfUE9SVCA8PCA4KQorI2RlZmluZSBCSVRTX0dETV9NRlJDX1BfUFBFIChOUl9QUEUwX1BPUlQgPDwgNCkKKyNkZWZpbmUgQklUU19HRE1fT0ZSQ19QX1BQRSAoTlJfUFBFMF9QT1JUIDw8IDApCisjZGVmaW5lIEJJVFNfR0RNX0FMTF9GUkNfUF9QUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCShCSVRTX0dETV9VRlJDX1BfUFBFIHwgQklUU19HRE1fQkZSQ19QX1BQRSB8IEJJVFNfR0RNX01GUkNfUF9QUEUgfCAgXAorCSBCSVRTX0dETV9PRlJDX1BfUFBFKQorCisjZGVmaW5lIEJJVFNfR0RNX1VGUkNfUF9DUFVfUERNQSAoTlJfUERNQV9QT1JUIDw8IDEyKQorI2RlZmluZSBCSVRTX0dETV9CRlJDX1BfQ1BVX1BETUEgKE5SX1BETUFfUE9SVCA8PCA4KQorI2RlZmluZSBCSVRTX0dETV9NRlJDX1BfQ1BVX1BETUEgKE5SX1BETUFfUE9SVCA8PCA0KQorI2RlZmluZSBCSVRTX0dETV9PRlJDX1BfQ1BVX1BETUEgKE5SX1BETUFfUE9SVCA8PCAwKQorI2RlZmluZSBCSVRTX0dETV9BTExfRlJDX1BfQ1BVX1BETUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCShCSVRTX0dETV9VRlJDX1BfQ1BVX1BETUEgfCBCSVRTX0dETV9CRlJDX1BfQ1BVX1BETUEgfCAgICAgICAgICAgICAgIFwKKwkgQklUU19HRE1fTUZSQ19QX0NQVV9QRE1BIHwgQklUU19HRE1fT0ZSQ19QX0NQVV9QRE1BKQorCisjZGVmaW5lIEJJVFNfR0RNX1VGUkNfUF9DUFVfUURNQSAoTlJfUURNQV9QT1JUIDw8IDEyKQorI2RlZmluZSBCSVRTX0dETV9CRlJDX1BfQ1BVX1FETUEgKE5SX1FETUFfUE9SVCA8PCA4KQorI2RlZmluZSBCSVRTX0dETV9NRlJDX1BfQ1BVX1FETUEgKE5SX1FETUFfUE9SVCA8PCA0KQorI2RlZmluZSBCSVRTX0dETV9PRlJDX1BfQ1BVX1FETUEgKE5SX1FETUFfUE9SVCA8PCAwKQorI2RlZmluZSBCSVRTX0dETV9BTExfRlJDX1BfQ1BVX1FETUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCShCSVRTX0dETV9VRlJDX1BfQ1BVX1FETUEgfCBCSVRTX0dETV9CRlJDX1BfQ1BVX1FETUEgfCAgICAgICAgICAgICAgIFwKKwkgQklUU19HRE1fTUZSQ19QX0NQVV9RRE1BIHwgQklUU19HRE1fT0ZSQ19QX0NQVV9RRE1BKQorCisjZGVmaW5lIEJJVFNfR0RNX1VGUkNfUF9ESVNDQVJEIChOUl9ESVNDQVJEIDw8IDEyKQorI2RlZmluZSBCSVRTX0dETV9CRlJDX1BfRElTQ0FSRCAoTlJfRElTQ0FSRCA8PCA4KQorI2RlZmluZSBCSVRTX0dETV9NRlJDX1BfRElTQ0FSRCAoTlJfRElTQ0FSRCA8PCA0KQorI2RlZmluZSBCSVRTX0dETV9PRlJDX1BfRElTQ0FSRCAoTlJfRElTQ0FSRCA8PCAwKQorI2RlZmluZSBCSVRTX0dETV9BTExfRlJDX1BfRElTQ0FSRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCShCSVRTX0dETV9VRlJDX1BfRElTQ0FSRCB8IEJJVFNfR0RNX0JGUkNfUF9ESVNDQVJEIHwgICAgICAgICAgICAgICAgIFwKKwkgQklUU19HRE1fTUZSQ19QX0RJU0NBUkQgfCBCSVRTX0dETV9PRlJDX1BfRElTQ0FSRCkKKworI2RlZmluZSBobmF0X2lzX2VuYWJsZWQoaG5hdF9wcml2KSAoaG5hdF9wcml2LT5lbmFibGUpCisjZGVmaW5lIGhuYXRfZW5hYmxlZChobmF0X3ByaXYpIChobmF0X3ByaXYtPmVuYWJsZSA9IDEpCisjZGVmaW5lIGhuYXRfZGlzYWJsZWQoaG5hdF9wcml2KSAoaG5hdF9wcml2LT5lbmFibGUgPSAwKQorI2RlZmluZSBobmF0X2lzX2VuYWJsZWQxKGhuYXRfcHJpdikgKGhuYXRfcHJpdi0+ZW5hYmxlMSkKKyNkZWZpbmUgaG5hdF9lbmFibGVkMShobmF0X3ByaXYpIChobmF0X3ByaXYtPmVuYWJsZTEgPSAxKQorI2RlZmluZSBobmF0X2Rpc2FibGVkMShobmF0X3ByaXYpIChobmF0X3ByaXYtPmVuYWJsZTEgPSAwKQorCisjZGVmaW5lIGVudHJ5X2huYXRfaXNfYm91bmQoZSkgKGUtPmJmaWIxLnN0YXRlID09IEJJTkQpCisjZGVmaW5lIGVudHJ5X2huYXRfc3RhdGUoZSkgKGUtPmJmaWIxLnN0YXRlKQorCisjZGVmaW5lIHNrYl9obmF0X2lzX2hhc2hlZChza2IpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCShza2JfaG5hdF9lbnRyeShza2IpICE9IDB4M2ZmZiAmJiBza2JfaG5hdF9lbnRyeShza2IpIDwgaG5hdF9wcml2LT5mb2VfZXRyeV9udW0pCisjZGVmaW5lIEZST01fR0VfTEFOKHNrYikgKHNrYl9obmF0X2lmYWNlKHNrYikgPT0gRk9FX01BR0lDX0dFX0xBTikKKyNkZWZpbmUgRlJPTV9HRV9XQU4oc2tiKSAoc2tiX2huYXRfaWZhY2Uoc2tiKSA9PSBGT0VfTUFHSUNfR0VfV0FOKQorI2RlZmluZSBGUk9NX0dFX1BQRChza2IpIChza2JfaG5hdF9pZmFjZShza2IpID09IEZPRV9NQUdJQ19HRV9QUEQpCisjZGVmaW5lIEZST01fR0VfVklSVFVBTChza2IpIChza2JfaG5hdF9pZmFjZShza2IpID09IEZPRV9NQUdJQ19HRV9WSVJUVUFMKQorI2RlZmluZSBGUk9NX0VYVChza2IpIChza2JfaG5hdF9pZmFjZShza2IpID09IEZPRV9NQUdJQ19FWFQpCisjZGVmaW5lIEZST01fV0VEKHNrYikgKChza2JfaG5hdF9pZmFjZShza2IpID09IEZPRV9NQUdJQ19XRUQwKSB8fAkJXAorCQkgICAgICAgKHNrYl9obmF0X2lmYWNlKHNrYikgPT0gRk9FX01BR0lDX1dFRDEpKQorI2RlZmluZSBGT0VfTUFHSUNfR0VfTEFOIDB4MQorI2RlZmluZSBGT0VfTUFHSUNfR0VfV0FOIDB4MgorI2RlZmluZSBGT0VfTUFHSUNfRVhUIDB4MworI2RlZmluZSBGT0VfTUFHSUNfR0VfVklSVFVBTCAweDQKKyNkZWZpbmUgRk9FX01BR0lDX0dFX1BQRCAweDUKKyNkZWZpbmUgRk9FX01BR0lDX1dFRDAgMHg3OAorI2RlZmluZSBGT0VfTUFHSUNfV0VEMSAweDc5CisjZGVmaW5lIEZPRV9JTlZBTElEIDB4ZgorI2RlZmluZSBpbmRleDZiKGkpICgweDNmVSAtIGkpCisKKyNkZWZpbmUgSVBWNF9ITkFQVCAwCisjZGVmaW5lIElQVjRfSE5BVCAxCisjZGVmaW5lIElQX0ZPUk1BVChhZGRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSgoKHVuc2lnbmVkIGNoYXIgKikmYWRkcilbM10sICgodW5zaWduZWQgY2hhciAqKSZhZGRyKVsyXSwgICAgICAgICAgICAgIFwKKwkoKHVuc2lnbmVkIGNoYXIgKikmYWRkcilbMV0sICgodW5zaWduZWQgY2hhciAqKSZhZGRyKVswXSkKKworLypQU0UgUG9ydHMqLworI2RlZmluZSBOUl9QRE1BX1BPUlQgMAorI2RlZmluZSBOUl9HTUFDMV9QT1JUIDEKKyNkZWZpbmUgTlJfR01BQzJfUE9SVCAyCisjaWYgZGVmaW5lZChDT05GSUdfTUVESUFURUtfTkVUU1lTX1YyKQorI2RlZmluZSBOUl9XSE5BVF9XRE1BX1BPUlQgRUlOVkFMCisjZGVmaW5lIE5SX1BQRTBfUE9SVCAzCisjZGVmaW5lIE5SX1BQRTFfUE9SVCA0CisjZWxzZQorI2RlZmluZSBOUl9XSE5BVF9XRE1BX1BPUlQgMworI2RlZmluZSBOUl9QUEUwX1BPUlQgNAorI2VuZGlmCisjZGVmaW5lIE5SX1FETUFfUE9SVCA1CisjZGVmaW5lIE5SX0RJU0NBUkQgNworI2RlZmluZSBOUl9XRE1BMF9QT1JUIDgKKyNkZWZpbmUgTlJfV0RNQTFfUE9SVCA5CisjZGVmaW5lIExBTl9ERVZfTkFNRSBobmF0X3ByaXYtPmxhbgorI2RlZmluZSBJU19XQU4oZGV2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkoIXN0cm5jbXAoKGRldiktPm5hbWUsIGhuYXRfcHJpdi0+d2FuLCBzdHJsZW4oaG5hdF9wcml2LT53YW4pKSkKKyNkZWZpbmUgSVNfTEFOKGRldikgKCFzdHJuY21wKGRldi0+bmFtZSwgTEFOX0RFVl9OQU1FLCBzdHJsZW4oTEFOX0RFVl9OQU1FKSkpCisjZGVmaW5lIElTX0JSKGRldikgKCFzdHJuY21wKGRldi0+bmFtZSwgImJyIiwgMikpCisjZGVmaW5lIElTX1dITkFUKGRldikJCQkJCQkJCVwKKwkoKGhuYXRfcHJpdi0+ZGF0YS0+d2huYXQgJiYJCQkJCQlcCisJIChnZXRfd2lmaV9ob29rX2lmX2luZGV4X2Zyb21fZGV2KGRldikgIT0gMCkpID8gMSA6IDApCisjZGVmaW5lIElTX0VYVChkZXYpICgoZ2V0X2luZGV4X2Zyb21fZGV2KGRldikgIT0gMCkgPyAxIDogMCkKKyNkZWZpbmUgSVNfUFBEKGRldikgKCFzdHJjbXAoZGV2LT5uYW1lLCBobmF0X3ByaXYtPnBwZCkpCisjZGVmaW5lIElTX0lQVjRfSE5BUFQoeCkgKCgoeCktPmJmaWIxLnBrdF90eXBlID09IElQVjRfSE5BUFQpID8gMSA6IDApCisjZGVmaW5lIElTX0lQVjRfSE5BVCh4KSAoKCh4KS0+YmZpYjEucGt0X3R5cGUgPT0gSVBWNF9ITkFUKSA/IDEgOiAwKQorI2RlZmluZSBJU19JUFY0X0dSUCh4KSAoSVNfSVBWNF9ITkFQVCh4KSB8IElTX0lQVjRfSE5BVCh4KSkKKyNkZWZpbmUgSVNfSVBWNF9EU0xJVEUoeCkgKCgoeCktPmJmaWIxLnBrdF90eXBlID09IElQVjRfRFNMSVRFKSA/IDEgOiAwKQorI2RlZmluZSBJU19JUFY0X01BUEUoeCkgKCgoeCktPmJmaWIxLnBrdF90eXBlID09IElQVjRfTUFQX0UpID8gMSA6IDApCisjZGVmaW5lIElTX0lQVjRfTUFQVCh4KSAoKCh4KS0+YmZpYjEucGt0X3R5cGUgPT0gSVBWNF9NQVBfVCkgPyAxIDogMCkKKyNkZWZpbmUgSVNfSVBWNl8zVF9ST1VURSh4KSAoKCh4KS0+YmZpYjEucGt0X3R5cGUgPT0gSVBWNl8zVF9ST1VURSkgPyAxIDogMCkKKyNkZWZpbmUgSVNfSVBWNl81VF9ST1VURSh4KSAoKCh4KS0+YmZpYjEucGt0X3R5cGUgPT0gSVBWNl81VF9ST1VURSkgPyAxIDogMCkKKyNkZWZpbmUgSVNfSVBWNl82UkQoeCkgKCgoeCktPmJmaWIxLnBrdF90eXBlID09IElQVjZfNlJEKSA/IDEgOiAwKQorI2RlZmluZSBJU19JUFY2X0dSUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkoSVNfSVBWNl8zVF9ST1VURSh4KSB8IElTX0lQVjZfNVRfUk9VVEUoeCkgfCBJU19JUFY2XzZSRCh4KSB8ICAgICAgICAgIFwKKwkgSVNfSVBWNF9EU0xJVEUoeCkgfCBJU19JUFY0X01BUEUoeCkgfCBJU19JUFY0X01BUFQoeCkpCisjZGVmaW5lIElTX0JPTkRfTU9ERSAoIXN0cm5jbXAoTEFOX0RFVl9OQU1FLCAiYm9uZCIsIDQpKQorI2RlZmluZSBJU19HTUFDMV9NT0RFICgoaG5hdF9wcml2LT5nbWFjX251bSA9PSAxKSA/IDEgOiAwKQorI2RlZmluZSBJU19IUU9TX01PREUgKHFvc190b2dnbGUgPT0gMSkKKyNkZWZpbmUgSVNfUFBQUV9NT0RFIChxb3NfdG9nZ2xlID09IDIpCQkvKiBQZXIgUG9ydCBQZXIgUXVldWUgKi8KKyNkZWZpbmUgTUFYX1BQUFFfUE9SVF9OVU0JNgorCisjZGVmaW5lIGVzKGVudHJ5KSAoZW50cnlfc3RhdGVbZW50cnktPmJmaWIxLnN0YXRlXSkKKyNkZWZpbmUgZWkoZW50cnksIGVuZCkgKGhuYXRfcHJpdi0+Zm9lX2V0cnlfbnVtIC0gKGludCkoZW5kIC0gZW50cnkpKQorI2RlZmluZSBwdChlbnRyeSkgKHBhY2tldF90eXBlW2VudHJ5LT5pcHY0X2huYXB0LmJmaWIxLnBrdF90eXBlXSkKKyNkZWZpbmUgaXB2NF9zbWFjKG1hYywgZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCW1hY1swXSA9IGUtPmlwdjRfaG5hcHQuc21hY19oaVszXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJbWFjWzFdID0gZS0+aXB2NF9obmFwdC5zbWFjX2hpWzJdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQltYWNbMl0gPSBlLT5pcHY0X2huYXB0LnNtYWNfaGlbMV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCW1hY1szXSA9IGUtPmlwdjRfaG5hcHQuc21hY19oaVswXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJbWFjWzRdID0gZS0+aXB2NF9obmFwdC5zbWFjX2xvWzFdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQltYWNbNV0gPSBlLT5pcHY0X2huYXB0LnNtYWNfbG9bMF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJfSkKKyNkZWZpbmUgaXB2NF9kbWFjKG1hYywgZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCW1hY1swXSA9IGUtPmlwdjRfaG5hcHQuZG1hY19oaVszXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJbWFjWzFdID0gZS0+aXB2NF9obmFwdC5kbWFjX2hpWzJdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQltYWNbMl0gPSBlLT5pcHY0X2huYXB0LmRtYWNfaGlbMV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCW1hY1szXSA9IGUtPmlwdjRfaG5hcHQuZG1hY19oaVswXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJbWFjWzRdID0gZS0+aXB2NF9obmFwdC5kbWFjX2xvWzFdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQltYWNbNV0gPSBlLT5pcHY0X2huYXB0LmRtYWNfbG9bMF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJfSkKKworI2RlZmluZSBJU19EU0FfTEFOKGRldikgKCFzdHJuY21wKGRldi0+bmFtZSwgImxhbiIsIDMpKQorI2RlZmluZSBJU19EU0FfV0FOKGRldikgKCFzdHJuY21wKGRldi0+bmFtZSwgIndhbiIsIDMpKQorI2RlZmluZSBOT05FX0RTQV9QT1JUIDB4ZmYKKyNkZWZpbmUgTUFYX0NSU05fTlVNIDMyCisjZGVmaW5lIElQVjZfSERSX0xFTiA0MAorCisvKlFETUFfUEFHRSB2YWx1ZSovCisjZGVmaW5lIE5VTV9PRl9RX1BFUl9QQUdFIDE2CisKKy8qSVB2NiBIZWFkZXIqLworI2lmbmRlZiBORVhUSERSX0lQSVAKKyNkZWZpbmUgTkVYVEhEUl9JUElQIDQKKyNlbmRpZgorCitleHRlcm4gY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl9obmF0X21hdGNoW107CitleHRlcm4gc3RydWN0IG10a19obmF0ICpobmF0X3ByaXY7CisKKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfRFNBX01UNzUzMCkKK3UzMiBobmF0X2RzYV9maWxsX3N0YWcoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJICAgICAgIHN0cnVjdCBmb2VfZW50cnkgKmVudHJ5LAorCQkgICAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZF9od19wYXRoICpod19wYXRoLAorCQkgICAgICAgdTE2IGV0aF9wcm90bywgaW50IG1hcGUpOworCitzdGF0aWMgaW5saW5lIGJvb2wgaG5hdF9kc2FfaXNfZW5hYmxlKHN0cnVjdCBtdGtfaG5hdCAqcHJpdikKK3sKKwlyZXR1cm4gKHByaXYtPndhbl9kc2FfcG9ydCAhPSBOT05FX0RTQV9QT1JUKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHUzMiBobmF0X2RzYV9maWxsX3N0YWcoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgIHN0cnVjdCBmb2VfZW50cnkgKmVudHJ5LAorCQkJCSAgICAgc3RydWN0IGZsb3dfb2ZmbG9hZF9od19wYXRoICpod19wYXRoLAorCQkJCSAgICAgdTE2IGV0aF9wcm90bywgaW50IG1hcGUpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBobmF0X2RzYV9pc19lbmFibGUoc3RydWN0IG10a19obmF0ICpwcml2KQoreworCXJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCit2b2lkIGhuYXRfZGVpbml0X2RlYnVnZnMoc3RydWN0IG10a19obmF0ICpoKTsKK2ludCBobmF0X2luaXRfZGVidWdmcyhzdHJ1Y3QgbXRrX2huYXQgKmgpOworaW50IGhuYXRfcmVnaXN0ZXJfbmZfaG9va3Modm9pZCk7Cit2b2lkIGhuYXRfdW5yZWdpc3Rlcl9uZl9ob29rcyh2b2lkKTsKK2ludCB3aG5hdF9hZGp1c3RfbmZfaG9va3Modm9pZCk7CitpbnQgbXRrX2hxb3NfcHR5cGVfY2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKnVudXNlZCk7CitleHRlcm4gaW50IGRiZ19jcHVfcmVhc29uOworZXh0ZXJuIGludCBkZWJ1Z19sZXZlbDsKK2V4dGVybiBpbnQgaG9va190b2dnbGU7CitleHRlcm4gaW50IG1hcGVfdG9nZ2xlOworZXh0ZXJuIGludCBxb3NfdG9nZ2xlOworCitpbnQgZXh0X2lmX2FkZChzdHJ1Y3QgZXh0ZGV2X2VudHJ5ICpleHRfZW50cnkpOworaW50IGV4dF9pZl9kZWwoc3RydWN0IGV4dGRldl9lbnRyeSAqZXh0X2VudHJ5KTsKK3ZvaWQgY3Jfc2V0X2ZpZWxkKHZvaWQgX19pb21lbSAqcmVnLCB1MzIgZmllbGQsIHUzMiB2YWwpOworaW50IG10a19zd19uYXRfaG9va190eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZ21hY19ubyk7CitpbnQgbXRrX3N3X25hdF9ob29rX3J4KHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBtdGtfcHBlX2Rldl9yZWdpc3Rlcl9ob29rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwordm9pZCBtdGtfcHBlX2Rldl91bnJlZ2lzdGVyX2hvb2soc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitpbnQgbmZfaG5hdF9uZXRkZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsIHVuc2lnbmVkIGxvbmcgZXZlbnQsCisJCQkgICAgdm9pZCAqcHRyKTsKK2ludCBuZl9obmF0X25ldGV2ZW50X2hhbmRsZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsIHVuc2lnbmVkIGxvbmcgZXZlbnQsCisJCQkgICAgIHZvaWQgKnB0cik7Cit1aW50MzJfdCBmb2VfZHVtcF9wa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit1aW50MzJfdCBobmF0X2NwdV9yZWFzb25fY250KHN0cnVjdCBza19idWZmICpza2IpOworaW50IGhuYXRfZW5hYmxlX2hvb2sodm9pZCk7CitpbnQgaG5hdF9kaXNhYmxlX2hvb2sodm9pZCk7Cit2b2lkIGhuYXRfY2FjaGVfZWJsKGludCBlbmFibGUpOwordm9pZCBobmF0X3Fvc19zaGFwZXJfZWJsKHUzMiBpZCwgdTMyIGVuYWJsZSk7Cit2b2lkIHNldF9nbWFjX3BwZV9md2QoaW50IGdtYWNfbm8sIGludCBlbmFibGUpOworaW50IGVudHJ5X2RldGFpbCh1MzIgcHBlX2lkLCBpbnQgaW5kZXgpOworaW50IGVudHJ5X2RlbGV0ZV9ieV9tYWModTggKm1hYyk7CitpbnQgZW50cnlfZGVsZXRlKHUzMiBwcGVfaWQsIGludCBpbmRleCk7CitzdHJ1Y3QgaG5hdF9hY2NvdW50aW5nICpobmF0X2dldF9jb3VudChzdHJ1Y3QgbXRrX2huYXQgKmgsIHUzMiBwcGVfaWQsCisJCQkJICAgICAgIHUzMiBpbmRleCwgc3RydWN0IGhuYXRfYWNjb3VudGluZyAqZGlmZik7CisKK3N0YXRpYyBpbmxpbmUgdTE2IGZvZV90aW1lc3RhbXAoc3RydWN0IG10a19obmF0ICpoKQoreworCXJldHVybiAocmVhZGwoaG5hdF9wcml2LT5mZV9iYXNlICsgMHgwMDEwKSkgJiAweGZmZmY7Cit9CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19obmF0L2huYXRfZGVidWdmcy5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfaG5hdC9obmF0X2RlYnVnZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTQwM2E4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfaG5hdC9obmF0X2RlYnVnZnMuYwpAQCAtMCwwICsxLDIyOTQgQEAKKy8qICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgU2VhbiBXYW5nIDxzZWFuLndhbmdAbWVkaWF0ZWsuY29tPgorICogICBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBKb2huIENyaXNwaW4gPGJsb2dpY0BvcGVud3J0Lm9yZz4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+CisKKyNpbmNsdWRlICJobmF0LmgiCisjaW5jbHVkZSAibmZfaG5hdF9tdGsuaCIKKyNpbmNsdWRlICIuLi9tdGtfZXRoX3NvYy5oIgorCitpbnQgZGJnX2VudHJ5X3N0YXRlID0gQklORDsKK3R5cGVkZWYgaW50ICgqZGVidWdmc193cml0ZV9mdW5jKShpbnQgcGFyMSk7CitpbnQgZGVidWdfbGV2ZWw7CitpbnQgZGJnX2NwdV9yZWFzb247CitpbnQgaG9va190b2dnbGU7CitpbnQgbWFwZV90b2dnbGU7CitpbnQgcW9zX3RvZ2dsZTsKK3Vuc2lnbmVkIGludCBkYmdfY3B1X3JlYXNvbl9jbnRbTUFYX0NSU05fTlVNXTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBlbnRyeV9zdGF0ZVtdID0geyAiSU5WQUxJRCIsICJVTkJJTkQiLCAiQklORCIsICJGSU4iIH07CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcGFja2V0X3R5cGVbXSA9IHsKKwkiSVBWNF9ITkFQVCIsICAgICJJUFY0X0hOQVQiLCAgICAgIklQVjZfMVRfUk9VVEUiLCAiSVBWNF9EU0xJVEUiLAorCSJJUFY2XzNUX1JPVVRFIiwgIklQVjZfNVRfUk9VVEUiLCAiUkVWIiwJICAgIklQVjZfNlJEIiwKKwkiSVBWNF9NQVBfVCIsICAgICJJUFY0X01BUF9FIiwKK307CisKK3N0YXRpYyB1aW50OF90ICpzaG93X2NwdV9yZWFzb24oc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdGF0aWMgdTggYnVmWzMyXTsKKworCXN3aXRjaCAoc2tiX2huYXRfcmVhc29uKHNrYikpIHsKKwljYXNlIFRUTF8wOgorCQlyZXR1cm4gIklQdjQoSVB2NikgVFRMKGhvcCBsaW1pdClcbiI7CisJY2FzZSBIQVNfT1BUSU9OX0hFQURFUjoKKwkJcmV0dXJuICJJcHY0KElQdjYpIGhhcyBvcHRpb24oZXh0ZW5zaW9uKSBoZWFkZXJcbiI7CisJY2FzZSBOT19GTE9XX0lTX0FTU0lHTkVEOgorCQlyZXR1cm4gIk5vIGZsb3cgaXMgYXNzaWduZWRcbiI7CisJY2FzZSBJUFY0X1dJVEhfRlJBR01FTlQ6CisJCXJldHVybiAiSVB2NCBITkFUIGRvZXNuJ3Qgc3VwcG9ydCBJUHY0IC93IGZyYWdtZW50XG4iOworCWNhc2UgSVBWNF9ITkFQVF9EU0xJVEVfV0lUSF9GUkFHTUVOVDoKKwkJcmV0dXJuICJJUHY0IEhOQVBUL0RTLUxpdGUgZG9lc24ndCBzdXBwb3J0IElQdjQgL3cgZnJhZ21lbnRcbiI7CisJY2FzZSBJUFY0X0hOQVBUX0RTTElURV9XSVRIT1VUX1RDUF9VRFA6CisJCXJldHVybiAiSVB2NCBITkFQVC9EUy1MaXRlIGNhbid0IGZpbmQgVENQL1VEUCBzcG9ydC9kcG9ydFxuIjsKKwljYXNlIElQVjZfNVRfNlJEX1dJVEhPVVRfVENQX1VEUDoKKwkJcmV0dXJuICJJUHY2IDVULXJvdXRlLzZSRCBjYW4ndCBmaW5kIFRDUC9VRFAgc3BvcnQvZHBvcnRcbiI7CisJY2FzZSBUQ1BfRklOX1NZTl9SU1Q6CisJCXJldHVybiAiSW5ncmVzcyBwYWNrZXQgaXMgVENQIGZpbi9zeW4vcnN0XG4iOworCWNhc2UgVU5fSElUOgorCQlyZXR1cm4gIkZPRSBVbi1oaXRcbiI7CisJY2FzZSBISVRfVU5CSU5EOgorCQlyZXR1cm4gIkZPRSBIaXQgdW5iaW5kXG4iOworCWNhc2UgSElUX1VOQklORF9SQVRFX1JFQUNIOgorCQlyZXR1cm4gIkZPRSBIaXQgdW5iaW5kICYgcmF0ZSByZWFjaFxuIjsKKwljYXNlIEhJVF9CSU5EX1RDUF9GSU46CisJCXJldHVybiAiSGl0IGJpbmQgUFBFIFRDUCBGSU4gZW50cnlcbiI7CisJY2FzZSBISVRfQklORF9UVExfMToKKwkJcmV0dXJuICJIaXQgYmluZCBQUEUgZW50cnkgYW5kIFRUTChob3AgbGltaXQpID0gMSBhbmQgVFRMKGhvdCBsaW1pdCkgLSAxXG4iOworCWNhc2UgSElUX0JJTkRfV0lUSF9WTEFOX1ZJT0xBVElPTjoKKwkJcmV0dXJuICJIaXQgYmluZCBhbmQgVkxBTiByZXBsYWNlbWVudCB2aW9sYXRpb25cbiI7CisJY2FzZSBISVRfQklORF9LRUVQQUxJVkVfVUNfT0xEX0hEUjoKKwkJcmV0dXJuICJIaXQgYmluZCBhbmQga2VlcCBhbGl2ZSB3aXRoIHVuaWNhc3Qgb2xkLWhlYWRlciBwYWNrZXRcbiI7CisJY2FzZSBISVRfQklORF9LRUVQQUxJVkVfTUNfTkVXX0hEUjoKKwkJcmV0dXJuICJIaXQgYmluZCBhbmQga2VlcCBhbGl2ZSB3aXRoIG11bHRpY2FzdCBuZXctaGVhZGVyIHBhY2tldFxuIjsKKwljYXNlIEhJVF9CSU5EX0tFRVBBTElWRV9EVVBfT0xEX0hEUjoKKwkJcmV0dXJuICJIaXQgYmluZCBhbmQga2VlcCBhbGl2ZSB3aXRoIGR1cGxpY2F0ZSBvbGQtaGVhZGVyIHBhY2tldFxuIjsKKwljYXNlIEhJVF9CSU5EX0ZPUkNFX1RPX0NQVToKKwkJcmV0dXJuICJGT0UgSGl0IGJpbmQgJiBmb3JjZSB0byBDUFVcbiI7CisJY2FzZSBISVRfQklORF9FWENFRURfTVRVOgorCQlyZXR1cm4gIkhpdCBiaW5kIGFuZCBleGNlZWQgTVRVXG4iOworCWNhc2UgSElUX0JJTkRfTVVMVElDQVNUX1RPX0NQVToKKwkJcmV0dXJuICJIaXQgYmluZCBtdWx0aWNhc3QgcGFja2V0IHRvIENQVVxuIjsKKwljYXNlIEhJVF9CSU5EX01VTFRJQ0FTVF9UT19HTUFDX0NQVToKKwkJcmV0dXJuICJIaXQgYmluZCBtdWx0aWNhc3QgcGFja2V0IHRvIEdNQUMgJiBDUFVcbiI7CisJY2FzZSBISVRfUFJFX0JJTkQ6CisJCXJldHVybiAiUHJlIGJpbmRcbiI7CisJfQorCisJc3ByaW50ZihidWYsICJDUFUgUmVhc29uIEVycm9yIC0gJVhcbiIsIHNrYl9obmF0X2VudHJ5KHNrYikpOworCXJldHVybiBidWY7Cit9CisKK3VpbnQzMl90IGZvZV9kdW1wX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBmb2VfZW50cnkgKmVudHJ5OworCisJaWYgKHNrYl9obmF0X2VudHJ5KHNrYikgPj0gaG5hdF9wcml2LT5mb2VfZXRyeV9udW0gfHwKKwkgICAgc2tiX2huYXRfcHBlKHNrYikgPj0gQ0ZHX1BQRV9OVU0pCisJCXJldHVybiAxOworCisJZW50cnkgPSAmaG5hdF9wcml2LT5mb2VfdGFibGVfY3B1W3NrYl9obmF0X3BwZShza2IpXVtza2JfaG5hdF9lbnRyeShza2IpXTsKKwlwcl9pbmZvKCJcblJ4PT09PEZPRV9FbnRyeT0lZD49PT09PVxuIiwgc2tiX2huYXRfZW50cnkoc2tiKSk7CisJcHJfaW5mbygiUmN2SUY9JXNcbiIsIHNrYi0+ZGV2LT5uYW1lKTsKKwlwcl9pbmZvKCJQUEVfSUQ9JWRcbiIsIHNrYl9obmF0X3BwZShza2IpKTsKKwlwcl9pbmZvKCJGT0VfRW50cnk9JWRcbiIsIHNrYl9obmF0X2VudHJ5KHNrYikpOworCXByX2luZm8oIkNQVSBSZWFzb249JXMiLCBzaG93X2NwdV9yZWFzb24oc2tiKSk7CisJcHJfaW5mbygiQUxHPSVkXG4iLCBza2JfaG5hdF9hbGcoc2tiKSk7CisJcHJfaW5mbygiU1A9JWRcbiIsIHNrYl9obmF0X3Nwb3J0KHNrYikpOworCisJLyogc29tZSBzcGVjaWFsIGFsZXJ0IG9jY3VycmVkLCBzbyBlbnRyeV9udW0gaXMgdXNlbGVzcyAoanVzdCBza2lwIGl0KSAqLworCWlmIChza2JfaG5hdF9lbnRyeShza2IpID09IDB4M2ZmZikKKwkJcmV0dXJuIDE7CisKKwkvKiBQUEU6IElQdjQgcGFja2V0PUlQVjRfSE5BVCBJUHY2IHBhY2tldD1JUFY2X1JPVVRFICovCisJaWYgKElTX0lQVjRfR1JQKGVudHJ5KSkgeworCQlfX2JlMzIgc2FkZHIgPSBodG9ubChlbnRyeS0+aXB2NF9obmFwdC5zaXApOworCQlfX2JlMzIgZGFkZHIgPSBodG9ubChlbnRyeS0+aXB2NF9obmFwdC5kaXApOworCisJCXByX2luZm8oIkluZm9ybWF0aW9uIEJsb2NrIDE9JXhcbiIsCisJCQllbnRyeS0+aXB2NF9obmFwdC5pbmZvX2JsazEpOworCQlwcl9pbmZvKCJTSVA9JXBJNFxuIiwgJnNhZGRyKTsKKwkJcHJfaW5mbygiRElQPSVwSTRcbiIsICZkYWRkcik7CisJCXByX2luZm8oIlNQT1JUPSVkXG4iLCBlbnRyeS0+aXB2NF9obmFwdC5zcG9ydCk7CisJCXByX2luZm8oIkRQT1JUPSVkXG4iLCBlbnRyeS0+aXB2NF9obmFwdC5kcG9ydCk7CisJCXByX2luZm8oIkluZm9ybWF0aW9uIEJsb2NrIDI9JXhcbiIsCisJCQllbnRyeS0+aXB2NF9obmFwdC5pbmZvX2JsazIpOworCQlwcl9pbmZvKCJTdGF0ZSA9ICVzLCBwcm90byA9ICVzXG4iLCBlbnRyeS0+YmZpYjEuc3RhdGUgPT0gMCA/CisJCQkiSW52YWxpZCIgOiBlbnRyeS0+YmZpYjEuc3RhdGUgPT0gMSA/CisJCQkiVW5iaW5kIiA6IGVudHJ5LT5iZmliMS5zdGF0ZSA9PSAyID8KKwkJCSJCSU5EIiA6IGVudHJ5LT5iZmliMS5zdGF0ZSA9PSAzID8KKwkJCSJGSU4iIDogIlVua25vd24iLAorCQkJZW50cnktPmlwdjRfaG5hcHQuYmZpYjEudWRwID09IDAgPworCQkJIlRDUCIgOiBlbnRyeS0+aXB2NF9obmFwdC5iZmliMS51ZHAgPT0gMSA/CisJCQkiVURQIiA6ICJVbmtub3duIik7CisJfSBlbHNlIGlmIChJU19JUFY2X0dSUChlbnRyeSkpIHsKKwkJcHJfaW5mbygiSW5mb3JtYXRpb24gQmxvY2sgMT0leFxuIiwKKwkJCWVudHJ5LT5pcHY2XzV0X3JvdXRlLmluZm9fYmxrMSk7CisJCXByX2luZm8oIklQdjZfU0lQPSUwOFg6JTA4WDolMDhYOiUwOFhcbiIsCisJCQllbnRyeS0+aXB2Nl81dF9yb3V0ZS5pcHY2X3NpcDAsCisJCQllbnRyeS0+aXB2Nl81dF9yb3V0ZS5pcHY2X3NpcDEsCisJCQllbnRyeS0+aXB2Nl81dF9yb3V0ZS5pcHY2X3NpcDIsCisJCQllbnRyeS0+aXB2Nl81dF9yb3V0ZS5pcHY2X3NpcDMpOworCQlwcl9pbmZvKCJJUHY2X0RJUD0lMDhYOiUwOFg6JTA4WDolMDhYXG4iLAorCQkJZW50cnktPmlwdjZfNXRfcm91dGUuaXB2Nl9kaXAwLAorCQkJZW50cnktPmlwdjZfNXRfcm91dGUuaXB2Nl9kaXAxLAorCQkJZW50cnktPmlwdjZfNXRfcm91dGUuaXB2Nl9kaXAyLAorCQkJZW50cnktPmlwdjZfNXRfcm91dGUuaXB2Nl9kaXAzKTsKKwkJcHJfaW5mbygiU1BPUlQ9JWRcbiIsIGVudHJ5LT5pcHY2XzV0X3JvdXRlLnNwb3J0KTsKKwkJcHJfaW5mbygiRFBPUlQ9JWRcbiIsIGVudHJ5LT5pcHY2XzV0X3JvdXRlLmRwb3J0KTsKKwkJcHJfaW5mbygiSW5mb3JtYXRpb24gQmxvY2sgMj0leFxuIiwKKwkJCWVudHJ5LT5pcHY2XzV0X3JvdXRlLmluZm9fYmxrMik7CisJCXByX2luZm8oIlN0YXRlID0gJXMsIHByb3RvID0gJXNcbiIsIGVudHJ5LT5iZmliMS5zdGF0ZSA9PSAwID8KKwkJCSJJbnZhbGlkIiA6IGVudHJ5LT5iZmliMS5zdGF0ZSA9PSAxID8KKwkJCSJVbmJpbmQiIDogZW50cnktPmJmaWIxLnN0YXRlID09IDIgPworCQkJIkJJTkQiIDogZW50cnktPmJmaWIxLnN0YXRlID09IDMgPworCQkJIkZJTiIgOiAiVW5rbm93biIsCisJCQllbnRyeS0+aXB2Nl81dF9yb3V0ZS5iZmliMS51ZHAgPT0gMCA/CisJCQkiVENQIiA6IGVudHJ5LT5pcHY2XzV0X3JvdXRlLmJmaWIxLnVkcCA9PSAxID8KKwkJCSJVRFAiIDoJIlVua25vd24iKTsKKwl9IGVsc2UgeworCQlwcl9pbmZvKCJ1bmtub3duIFBrdF90eXBlPSVkXG4iLCBlbnRyeS0+YmZpYjEucGt0X3R5cGUpOworCX0KKworCXByX2luZm8oIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworCXJldHVybiAxOworfQorCit1aW50MzJfdCBobmF0X2NwdV9yZWFzb25fY250KHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3dpdGNoIChza2JfaG5hdF9yZWFzb24oc2tiKSkgeworCWNhc2UgVFRMXzA6CisJCWRiZ19jcHVfcmVhc29uX2NudFswXSsrOworCQlyZXR1cm4gMDsKKwljYXNlIEhBU19PUFRJT05fSEVBREVSOgorCQlkYmdfY3B1X3JlYXNvbl9jbnRbMV0rKzsKKwkJcmV0dXJuIDA7CisJY2FzZSBOT19GTE9XX0lTX0FTU0lHTkVEOgorCQlkYmdfY3B1X3JlYXNvbl9jbnRbMl0rKzsKKwkJcmV0dXJuIDA7CisJY2FzZSBJUFY0X1dJVEhfRlJBR01FTlQ6CisJCWRiZ19jcHVfcmVhc29uX2NudFszXSsrOworCQlyZXR1cm4gMDsKKwljYXNlIElQVjRfSE5BUFRfRFNMSVRFX1dJVEhfRlJBR01FTlQ6CisJCWRiZ19jcHVfcmVhc29uX2NudFs0XSsrOworCQlyZXR1cm4gMDsKKwljYXNlIElQVjRfSE5BUFRfRFNMSVRFX1dJVEhPVVRfVENQX1VEUDoKKwkJZGJnX2NwdV9yZWFzb25fY250WzVdKys7CisJCXJldHVybiAwOworCWNhc2UgSVBWNl81VF82UkRfV0lUSE9VVF9UQ1BfVURQOgorCQlkYmdfY3B1X3JlYXNvbl9jbnRbNl0rKzsKKwkJcmV0dXJuIDA7CisJY2FzZSBUQ1BfRklOX1NZTl9SU1Q6CisJCWRiZ19jcHVfcmVhc29uX2NudFs3XSsrOworCQlyZXR1cm4gMDsKKwljYXNlIFVOX0hJVDoKKwkJZGJnX2NwdV9yZWFzb25fY250WzhdKys7CisJCXJldHVybiAwOworCWNhc2UgSElUX1VOQklORDoKKwkJZGJnX2NwdV9yZWFzb25fY250WzldKys7CisJCXJldHVybiAwOworCWNhc2UgSElUX1VOQklORF9SQVRFX1JFQUNIOgorCQlkYmdfY3B1X3JlYXNvbl9jbnRbMTBdKys7CisJCXJldHVybiAwOworCWNhc2UgSElUX0JJTkRfVENQX0ZJTjoKKwkJZGJnX2NwdV9yZWFzb25fY250WzExXSsrOworCQlyZXR1cm4gMDsKKwljYXNlIEhJVF9CSU5EX1RUTF8xOgorCQlkYmdfY3B1X3JlYXNvbl9jbnRbMTJdKys7CisJCXJldHVybiAwOworCWNhc2UgSElUX0JJTkRfV0lUSF9WTEFOX1ZJT0xBVElPTjoKKwkJZGJnX2NwdV9yZWFzb25fY250WzEzXSsrOworCQlyZXR1cm4gMDsKKwljYXNlIEhJVF9CSU5EX0tFRVBBTElWRV9VQ19PTERfSERSOgorCQlkYmdfY3B1X3JlYXNvbl9jbnRbMTRdKys7CisJCXJldHVybiAwOworCWNhc2UgSElUX0JJTkRfS0VFUEFMSVZFX01DX05FV19IRFI6CisJCWRiZ19jcHVfcmVhc29uX2NudFsxNV0rKzsKKwkJcmV0dXJuIDA7CisJY2FzZSBISVRfQklORF9LRUVQQUxJVkVfRFVQX09MRF9IRFI6CisJCWRiZ19jcHVfcmVhc29uX2NudFsxNl0rKzsKKwkJcmV0dXJuIDA7CisJY2FzZSBISVRfQklORF9GT1JDRV9UT19DUFU6CisJCWRiZ19jcHVfcmVhc29uX2NudFsxN10rKzsKKwkJcmV0dXJuIDA7CisJY2FzZSBISVRfQklORF9FWENFRURfTVRVOgorCQlkYmdfY3B1X3JlYXNvbl9jbnRbMThdKys7CisJCXJldHVybiAwOworCWNhc2UgSElUX0JJTkRfTVVMVElDQVNUX1RPX0NQVToKKwkJZGJnX2NwdV9yZWFzb25fY250WzE5XSsrOworCQlyZXR1cm4gMDsKKwljYXNlIEhJVF9CSU5EX01VTFRJQ0FTVF9UT19HTUFDX0NQVToKKwkJZGJnX2NwdV9yZWFzb25fY250WzIwXSsrOworCQlyZXR1cm4gMDsKKwljYXNlIEhJVF9QUkVfQklORDoKKwkJZGJnX2NwdV9yZWFzb25fY250WzIxXSsrOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGhuYXRfc2V0X3VzYWdlKGludCBsZXZlbCkKK3sKKwlkZWJ1Z19sZXZlbCA9IGxldmVsOworCXByX2luZm8oIlJlYWQgY3B1X3JlYXNvbiBjb3VudDogY2F0IC9zeXMva2VybmVsL2RlYnVnL2huYXQvY3B1X3JlYXNvblxuXG4iKTsKKwlwcl9pbmZvKCI9PT09PT09PT09PT09PT09PT09PUFkdmFuY2VkIFNldHRpbmdzPT09PT09PT09PT09PT09PT09PT1cbiIpOworCXByX2luZm8oIlVzYWdlOiBlY2hvIFt0eXBlXSBbb3B0aW9uXSA+IC9zeXMva2VybmVsL2RlYnVnL2huYXQvY3B1X3JlYXNvblxuXG4iKTsKKwlwcl9pbmZvKCJDb21tYW5kczogICBbdHlwZV0gW29wdGlvbl1cbiIpOworCXByX2luZm8oIiAgICAgICAgICAgICAgMCAgICAgICAwfjcgICAgICBTZXQgZGVidWdfbGV2ZWwoMH43KSwgY3VycmVudCBkZWJ1Z19sZXZlbD0lZFxuIiwKKwkJZGVidWdfbGV2ZWwpOworCXByX2luZm8oIiAgICAgICAgICAgICAgMSAgICBjcHVfcmVhc29uICBUcmFjayBlbnRyaWVzIG9mIHRoZSBzZXQgY3B1X3JlYXNvblxuIik7CisJcHJfaW5mbygiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldCB0eXBlPTEgd2lsbCBjaGFuZ2UgZGVidWdfbGV2ZWw9N1xuIik7CisJcHJfaW5mbygiY3B1X3JlYXNvbiBsaXN0OlxuIik7CisJcHJfaW5mbygiICAgICAgICAgICAgICAgICAgICAgICAyICAgICAgIElQdjQoSVB2NikgVFRMKGhvcCBsaW1pdCkgPSAwXG4iKTsKKwlwcl9pbmZvKCIgICAgICAgICAgICAgICAgICAgICAgIDMgICAgICAgSVB2NChJUHY2KSBoYXMgb3B0aW9uKGV4dGVuc2lvbikgaGVhZGVyXG4iKTsKKwlwcl9pbmZvKCIgICAgICAgICAgICAgICAgICAgICAgIDcgICAgICAgTm8gZmxvdyBpcyBhc3NpZ25lZFxuIik7CisJcHJfaW5mbygiICAgICAgICAgICAgICAgICAgICAgICA4ICAgICAgIElQdjQgSE5BVCBkb2Vzbid0IHN1cHBvcnQgSVB2NCAvdyBmcmFnbWVudFxuIik7CisJcHJfaW5mbygiICAgICAgICAgICAgICAgICAgICAgICA5ICAgICAgIElQdjQgSE5BUFQvRFMtTGl0ZSBkb2Vzbid0IHN1cHBvcnQgSVB2NCAvdyBmcmFnbWVudFxuIik7CisJcHJfaW5mbygiICAgICAgICAgICAgICAgICAgICAgIDEwICAgICAgIElQdjQgSE5BUFQvRFMtTGl0ZSBjYW4ndCBmaW5kIFRDUC9VRFAgc3BvcnQvZHBvcnRcbiIpOworCXByX2luZm8oIiAgICAgICAgICAgICAgICAgICAgICAxMSAgICAgICBJUHY2IDVULXJvdXRlLzZSRCBjYW4ndCBmaW5kIFRDUC9VRFAgc3BvcnQvZHBvcnRcbiIpOworCXByX2luZm8oIiAgICAgICAgICAgICAgICAgICAgICAxMiAgICAgICBJbmdyZXNzIHBhY2tldCBpcyBUQ1AgZmluL3N5bi9yc3RcbiIpOworCXByX2luZm8oIiAgICAgICAgICAgICAgICAgICAgICAxMyAgICAgICBGT0UgVW4taGl0XG4iKTsKKwlwcl9pbmZvKCIgICAgICAgICAgICAgICAgICAgICAgMTQgICAgICAgRk9FIEhpdCB1bmJpbmRcbiIpOworCXByX2luZm8oIiAgICAgICAgICAgICAgICAgICAgICAxNSAgICAgICBGT0UgSGl0IHVuYmluZCAmIHJhdGUgcmVhY2hcbiIpOworCXByX2luZm8oIiAgICAgICAgICAgICAgICAgICAgICAxNiAgICAgICBIaXQgYmluZCBQUEUgVENQIEZJTiBlbnRyeVxuIik7CisJcHJfaW5mbygiICAgICAgICAgICAgICAgICAgICAgIDE3ICAgICAgIEhpdCBiaW5kIFBQRSBlbnRyeSBhbmQgVFRMKGhvcCBsaW1pdCkgPSAxXG4iKTsKKwlwcl9pbmZvKCIgICAgICAgICAgICAgICAgICAgICAgMTggICAgICAgSGl0IGJpbmQgYW5kIFZMQU4gcmVwbGFjZW1lbnQgdmlvbGF0aW9uXG4iKTsKKwlwcl9pbmZvKCIgICAgICAgICAgICAgICAgICAgICAgMTkgICAgICAgSGl0IGJpbmQgYW5kIGtlZXAgYWxpdmUgd2l0aCB1bmljYXN0IG9sZC1oZWFkZXIgcGFja2V0XG4iKTsKKwlwcl9pbmZvKCIgICAgICAgICAgICAgICAgICAgICAgMjAgICAgICAgSGl0IGJpbmQgYW5kIGtlZXAgYWxpdmUgd2l0aCBtdWx0aWNhc3QgbmV3LWhlYWRlciBwYWNrZXRcbiIpOworCXByX2luZm8oIiAgICAgICAgICAgICAgICAgICAgICAyMSAgICAgICBIaXQgYmluZCBhbmQga2VlcCBhbGl2ZSB3aXRoIGR1cGxpY2F0ZSBvbGQtaGVhZGVyIHBhY2tldFxuIik7CisJcHJfaW5mbygiICAgICAgICAgICAgICAgICAgICAgIDIyICAgICAgIEZPRSBIaXQgYmluZCAmIGZvcmNlIHRvIENQVVxuIik7CisJcHJfaW5mbygiICAgICAgICAgICAgICAgICAgICAgIDIzICAgICAgIEhJVF9CSU5EX1dJVEhfT1BUSU9OX0hFQURFUlxuIik7CisJcHJfaW5mbygiICAgICAgICAgICAgICAgICAgICAgIDI0ICAgICAgIFN3aXRjaCBjbG9uZSBtdWx0aWNhc3QgcGFja2V0IHRvIENQVVxuIik7CisJcHJfaW5mbygiICAgICAgICAgICAgICAgICAgICAgIDI1ICAgICAgIFN3aXRjaCBjbG9uZSBtdWx0aWNhc3QgcGFja2V0IHRvIEdNQUMxICYgQ1BVXG4iKTsKKwlwcl9pbmZvKCIgICAgICAgICAgICAgICAgICAgICAgMjYgICAgICAgSElUX1BSRV9CSU5EXG4iKTsKKwlwcl9pbmZvKCIgICAgICAgICAgICAgICAgICAgICAgMjcgICAgICAgSElUX0JJTkRfUEFDS0VUX1NBTVBMSU5HXG4iKTsKKwlwcl9pbmZvKCIgICAgICAgICAgICAgICAgICAgICAgMjggICAgICAgSGl0IGJpbmQgYW5kIGV4Y2VlZCBNVFVcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBobmF0X2NwdV9yZWFzb24oaW50IGNwdV9yZWFzb24pCit7CisJZGJnX2NwdV9yZWFzb24gPSBjcHVfcmVhc29uOworCWRlYnVnX2xldmVsID0gNzsKKwlwcl9pbmZvKCJzaG93IGNwdSByZWFzb24gPSAlZFxuIiwgY3B1X3JlYXNvbik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGVudHJ5X3NldF91c2FnZShpbnQgbGV2ZWwpCit7CisJZGVidWdfbGV2ZWwgPSBsZXZlbDsKKwlwcl9pbmZvKCJTaG93IGFsbCBlbnRyaWVzKGRlZmF1bHQgc3RhdGU9YmluZCk6IGNhdCAvc3lzL2tlcm5lbC9kZWJ1Zy9obmF0L2huYXRfZW50cnlcblxuIik7CisJcHJfaW5mbygiPT09PT09PT09PT09PT09PT09PT1BZHZhbmNlZCBTZXR0aW5ncz09PT09PT09PT09PT09PT09PT09XG4iKTsKKwlwcl9pbmZvKCJVc2FnZTogZWNobyBbdHlwZV0gW29wdGlvbl0gPiAvc3lzL2tlcm5lbC9kZWJ1Zy9obmF0L2huYXRfZW50cnlcblxuIik7CisJcHJfaW5mbygiQ29tbWFuZHM6ICAgW3R5cGVdIFtvcHRpb25dXG4iKTsKKwlwcl9pbmZvKCIgICAgICAgICAgICAgIDAgICAgICAgMH43ICAgICAgU2V0IGRlYnVnX2xldmVsKDB+NyksIGN1cnJlbnQgZGVidWdfbGV2ZWw9JWRcbiIsCisJCWRlYnVnX2xldmVsKTsKKwlwcl9pbmZvKCIgICAgICAgICAgICAgIDEgICAgICAgMH4zICAgICAgQ2hhbmdlIHRyYWNraW5nIHN0YXRlXG4iKTsKKwlwcl9pbmZvKCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDA6aW52YWxpZDsgMTp1bmJpbmQ7IDI6YmluZDsgMzpmaW4pXG4iKTsKKwlwcl9pbmZvKCIgICAgICAgICAgICAgIDIgICA8ZW50cnlfaWR4PiAgU2hvdyBQUEUwIHNwZWNpZmljIGZvZSBlbnRyeSBpbmZvLiBvZiBhc3NpZ25lZCA8ZW50cnlfaWR4PlxuIik7CisJcHJfaW5mbygiICAgICAgICAgICAgICAzICAgPGVudHJ5X2lkeD4gIERlbGV0ZSBQUEUwIHNwZWNpZmljIGZvZSBlbnRyeSBvZiBhc3NpZ25lZCA8ZW50cnlfaWR4PlxuIik7CisJcHJfaW5mbygiICAgICAgICAgICAgICA0ICAgPGVudHJ5X2lkeD4gIFNob3cgUFBFMSBzcGVjaWZpYyBmb2UgZW50cnkgaW5mby4gb2YgYXNzaWduZWQgPGVudHJ5X2lkeD5cbiIpOworCXByX2luZm8oIiAgICAgICAgICAgICAgNSAgIDxlbnRyeV9pZHg+ICBEZWxldGUgUFBFMSBzcGVjaWZpYyBmb2UgZW50cnkgb2YgYXNzaWduZWQgPGVudHJ5X2lkeD5cbiIpOworCXByX2luZm8oIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIGVudHJ5X2lkeCBpcyAtMSwgY2xlYXIgYWxsIGVudHJpZXNcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBlbnRyeV9zZXRfc3RhdGUoaW50IHN0YXRlKQoreworCWRiZ19lbnRyeV9zdGF0ZSA9IHN0YXRlOworCXByX2luZm8oIkVOVFJZIFNUQVRFID0gJXNcbiIsIGRiZ19lbnRyeV9zdGF0ZSA9PSAwID8KKwkJIkludmFsaWQiIDogZGJnX2VudHJ5X3N0YXRlID09IDEgPworCQkiVW5iaW5kIiA6IGRiZ19lbnRyeV9zdGF0ZSA9PSAyID8KKwkJIkJJTkQiIDogZGJnX2VudHJ5X3N0YXRlID09IDMgPworCQkiRklOIiA6ICJVbmtub3duIik7CisJcmV0dXJuIDA7Cit9CisKK2ludCB3cmFwcGVkX3BwZTBfZW50cnlfZGV0YWlsKGludCBpbmRleCkgeworCWVudHJ5X2RldGFpbCgwLCBpbmRleCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCB3cmFwcGVkX3BwZTFfZW50cnlfZGV0YWlsKGludCBpbmRleCkgeworCWVudHJ5X2RldGFpbCgxLCBpbmRleCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBlbnRyeV9kZXRhaWwodTMyIHBwZV9pZCwgaW50IGluZGV4KQoreworCXN0cnVjdCBmb2VfZW50cnkgKmVudHJ5OworCXN0cnVjdCBtdGtfaG5hdCAqaCA9IGhuYXRfcHJpdjsKKwl1MzIgKnA7CisJdTMyIGkgPSAwOworCXUzMiBwcmludF9jbnQ7CisJdW5zaWduZWQgY2hhciBoX2Rlc3RbRVRIX0FMRU5dOworCXVuc2lnbmVkIGNoYXIgaF9zb3VyY2VbRVRIX0FMRU5dOworCV9fYmUzMiBzYWRkciwgZGFkZHIsIG5zYWRkciwgbmRhZGRyOworCisJaWYgKHBwZV9pZCA+PSBDRkdfUFBFX05VTSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGgtPmZvZV9ldHJ5X251bSkgeworCQlwcl9pbmZvKCJJbnZhbGlkIGVudHJ5IGluZGV4XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZW50cnkgPSBoLT5mb2VfdGFibGVfY3B1W3BwZV9pZF0gKyBpbmRleDsKKwlzYWRkciA9IGh0b25sKGVudHJ5LT5pcHY0X2huYXB0LnNpcCk7CisJZGFkZHIgPSBodG9ubChlbnRyeS0+aXB2NF9obmFwdC5kaXApOworCW5zYWRkciA9IGh0b25sKGVudHJ5LT5pcHY0X2huYXB0Lm5ld19zaXApOworCW5kYWRkciA9IGh0b25sKGVudHJ5LT5pcHY0X2huYXB0Lm5ld19kaXApOworCXAgPSAodWludDMyX3QgKillbnRyeTsKKwlwcl9pbmZvKCI9PT09PT09PT09PFBQRV9JRD0lZCwgRmxvdyBUYWJsZSBFbnRyeT0lZCAoJXApPj09PT09PT09PT09PT09PVxuIiwKKwkJcHBlX2lkLCBpbmRleCwgZW50cnkpOworCWlmIChkZWJ1Z19sZXZlbCA+PSAyKSB7CisJCXByaW50X2NudCA9IDIwOworCQlmb3IgKGkgPSAwOyBpIDwgcHJpbnRfY250OyBpKyspCisJCQlwcl9pbmZvKCIlMDJkOiAlMDhYXG4iLCBpLCAqKHAgKyBpKSk7CisJfQorCXByX2luZm8oIi0tLS0tLS0tLS0tLS0tLS0tPEZsb3cgSW5mbz4tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCXByX2luZm8oIkluZm9ybWF0aW9uIEJsb2NrIDE6ICUwOFhcbiIsIGVudHJ5LT5pcHY0X2huYXB0LmluZm9fYmxrMSk7CisKKwlpZiAoSVNfSVBWNF9ITkFQVChlbnRyeSkpIHsKKwkJcHJfaW5mbygiSW5mb3JtYXRpb24gQmxvY2sgMjogJTA4WCAoRlA9JWQgRlFPUz0lZCBRSUQ9JWQpIiwKKwkJCWVudHJ5LT5pcHY0X2huYXB0LmluZm9fYmxrMiwKKwkJCWVudHJ5LT5pcHY0X2huYXB0LmlibGsyLmRwLAorCQkJZW50cnktPmlwdjRfaG5hcHQuaWJsazIuZnFvcywKKwkJCWVudHJ5LT5pcHY0X2huYXB0LmlibGsyLnFpZCk7CisJCXByX2luZm8oIkNyZWF0ZSBJUHY0IEhOQVBUIGVudHJ5XG4iKTsKKwkJcHJfaW5mbygiSVB2NCBPcmcgSVAvUG9ydDogJXBJNDolZC0+JXBJNDolZFxuIiwgJnNhZGRyLAorCQkJZW50cnktPmlwdjRfaG5hcHQuc3BvcnQsICZkYWRkciwKKwkJCWVudHJ5LT5pcHY0X2huYXB0LmRwb3J0KTsKKwkJcHJfaW5mbygiSVB2NCBOZXcgSVAvUG9ydDogJXBJNDolZC0+JXBJNDolZFxuIiwgJm5zYWRkciwKKwkJCWVudHJ5LT5pcHY0X2huYXB0Lm5ld19zcG9ydCwgJm5kYWRkciwKKwkJCWVudHJ5LT5pcHY0X2huYXB0Lm5ld19kcG9ydCk7CisJfSBlbHNlIGlmIChJU19JUFY0X0hOQVQoZW50cnkpKSB7CisJCXByX2luZm8oIkluZm9ybWF0aW9uIEJsb2NrIDI6ICUwOFhcbiIsCisJCQllbnRyeS0+aXB2NF9obmFwdC5pbmZvX2JsazIpOworCQlwcl9pbmZvKCJDcmVhdGUgSVB2NCBITkFUIGVudHJ5XG4iKTsKKwkJcHJfaW5mbygiSVB2NCBPcmcgSVA6ICVwSTQtPiVwSTRcbiIsICZzYWRkciwgJmRhZGRyKTsKKwkJcHJfaW5mbygiSVB2NCBOZXcgSVA6ICVwSTQtPiVwSTRcbiIsICZuc2FkZHIsICZuZGFkZHIpOworCX0gZWxzZSBpZiAoSVNfSVBWNF9EU0xJVEUoZW50cnkpKSB7CisJCXByX2luZm8oIkluZm9ybWF0aW9uIEJsb2NrIDI6ICUwOFhcbiIsCisJCQllbnRyeS0+aXB2NF9kc2xpdGUuaW5mb19ibGsyKTsKKwkJcHJfaW5mbygiQ3JlYXRlIElQdjQgRHMtTGl0ZSBlbnRyeVxuIik7CisJCXByX2luZm8oIklQdjQgRHMtTGl0ZTogJXBJNDolZC0+JXBJNDolZFxuIiwgJnNhZGRyLAorCQkJZW50cnktPmlwdjRfZHNsaXRlLnNwb3J0LCAmZGFkZHIsCisJCQllbnRyeS0+aXB2NF9kc2xpdGUuZHBvcnQpOworCQlwcl9pbmZvKCJFRyBESVB2NjogJTA4WDolMDhYOiUwOFg6JTA4WC0+JTA4WDolMDhYOiUwOFg6JTA4WFxuIiwKKwkJCWVudHJ5LT5pcHY0X2RzbGl0ZS50dW5uZWxfc2lwdjZfMCwKKwkJCWVudHJ5LT5pcHY0X2RzbGl0ZS50dW5uZWxfc2lwdjZfMSwKKwkJCWVudHJ5LT5pcHY0X2RzbGl0ZS50dW5uZWxfc2lwdjZfMiwKKwkJCWVudHJ5LT5pcHY0X2RzbGl0ZS50dW5uZWxfc2lwdjZfMywKKwkJCWVudHJ5LT5pcHY0X2RzbGl0ZS50dW5uZWxfZGlwdjZfMCwKKwkJCWVudHJ5LT5pcHY0X2RzbGl0ZS50dW5uZWxfZGlwdjZfMSwKKwkJCWVudHJ5LT5pcHY0X2RzbGl0ZS50dW5uZWxfZGlwdjZfMiwKKwkJCWVudHJ5LT5pcHY0X2RzbGl0ZS50dW5uZWxfZGlwdjZfMyk7CisjaWYgZGVmaW5lZChDT05GSUdfTUVESUFURUtfTkVUU1lTX1YyKQorCX0gZWxzZSBpZiAoSVNfSVBWNF9NQVBFKGVudHJ5KSkgeworCQluc2FkZHIgPSBodG9ubChlbnRyeS0+aXB2NF9kc2xpdGUubmV3X3NpcCk7CisJCW5kYWRkciA9IGh0b25sKGVudHJ5LT5pcHY0X2RzbGl0ZS5uZXdfZGlwKTsKKworCQlwcl9pbmZvKCJJbmZvcm1hdGlvbiBCbG9jayAyOiAlMDhYXG4iLAorCQkJZW50cnktPmlwdjRfZHNsaXRlLmluZm9fYmxrMik7CisJCXByX2luZm8oIkNyZWF0ZSBJUHY0IE1BUC1FIGVudHJ5XG4iKTsKKwkJcHJfaW5mbygiSVB2NCBNQVAtRSBPcmcgSVAvUG9ydDogJXBJNDolZC0+JXBJNDolZFxuIiwKKwkJCSZzYWRkciwJZW50cnktPmlwdjRfZHNsaXRlLnNwb3J0LAorCQkJJmRhZGRyLAllbnRyeS0+aXB2NF9kc2xpdGUuZHBvcnQpOworCQlwcl9pbmZvKCJJUHY0IE1BUC1FIE5ldyBJUC9Qb3J0OiAlcEk0OiVkLT4lcEk0OiVkXG4iLAorCQkJJm5zYWRkciwgZW50cnktPmlwdjRfZHNsaXRlLm5ld19zcG9ydCwKKwkJCSZuZGFkZHIsIGVudHJ5LT5pcHY0X2RzbGl0ZS5uZXdfZHBvcnQpOworCQlwcl9pbmZvKCJFRyBESVB2NjogJTA4WDolMDhYOiUwOFg6JTA4WC0+JTA4WDolMDhYOiUwOFg6JTA4WFxuIiwKKwkJCWVudHJ5LT5pcHY0X2RzbGl0ZS50dW5uZWxfc2lwdjZfMCwKKwkJCWVudHJ5LT5pcHY0X2RzbGl0ZS50dW5uZWxfc2lwdjZfMSwKKwkJCWVudHJ5LT5pcHY0X2RzbGl0ZS50dW5uZWxfc2lwdjZfMiwKKwkJCWVudHJ5LT5pcHY0X2RzbGl0ZS50dW5uZWxfc2lwdjZfMywKKwkJCWVudHJ5LT5pcHY0X2RzbGl0ZS50dW5uZWxfZGlwdjZfMCwKKwkJCWVudHJ5LT5pcHY0X2RzbGl0ZS50dW5uZWxfZGlwdjZfMSwKKwkJCWVudHJ5LT5pcHY0X2RzbGl0ZS50dW5uZWxfZGlwdjZfMiwKKwkJCWVudHJ5LT5pcHY0X2RzbGl0ZS50dW5uZWxfZGlwdjZfMyk7CisjZW5kaWYKKwl9IGVsc2UgaWYgKElTX0lQVjZfM1RfUk9VVEUoZW50cnkpKSB7CisJCXByX2luZm8oIkluZm9ybWF0aW9uIEJsb2NrIDI6ICUwOFhcbiIsCisJCQllbnRyeS0+aXB2Nl8zdF9yb3V0ZS5pbmZvX2JsazIpOworCQlwcl9pbmZvKCJDcmVhdGUgSVB2NiAzLVR1cGxlIGVudHJ5XG4iKTsKKwkJcHJfaW5mbygiSU5HIFNJUHY2LT5ESVB2NjogJTA4WDolMDhYOiUwOFg6JTA4WC0+ICUwOFg6JTA4WDolMDhYOiUwOFggKFByb3Q9JWQpXG4iLAorCQkJZW50cnktPmlwdjZfM3Rfcm91dGUuaXB2Nl9zaXAwLAorCQkJZW50cnktPmlwdjZfM3Rfcm91dGUuaXB2Nl9zaXAxLAorCQkJZW50cnktPmlwdjZfM3Rfcm91dGUuaXB2Nl9zaXAyLAorCQkJZW50cnktPmlwdjZfM3Rfcm91dGUuaXB2Nl9zaXAzLAorCQkJZW50cnktPmlwdjZfM3Rfcm91dGUuaXB2Nl9kaXAwLAorCQkJZW50cnktPmlwdjZfM3Rfcm91dGUuaXB2Nl9kaXAxLAorCQkJZW50cnktPmlwdjZfM3Rfcm91dGUuaXB2Nl9kaXAyLAorCQkJZW50cnktPmlwdjZfM3Rfcm91dGUuaXB2Nl9kaXAzLAorCQkJZW50cnktPmlwdjZfM3Rfcm91dGUucHJvdCk7CisJfSBlbHNlIGlmIChJU19JUFY2XzVUX1JPVVRFKGVudHJ5KSkgeworCQlwcl9pbmZvKCJJbmZvcm1hdGlvbiBCbG9jayAyOiAlMDhYXG4iLAorCQkJZW50cnktPmlwdjZfNXRfcm91dGUuaW5mb19ibGsyKTsKKwkJcHJfaW5mbygiQ3JlYXRlIElQdjYgNS1UdXBsZSBlbnRyeVxuIik7CisJCXByX2luZm8oIklORyBTSVB2Ni0+RElQdjY6ICUwOFg6JTA4WDolMDhYOiUwOFg6JWQtPiAlMDhYOiUwOFg6JTA4WDolMDhYOiVkXG4iLAorCQkJZW50cnktPmlwdjZfNXRfcm91dGUuaXB2Nl9zaXAwLAorCQkJZW50cnktPmlwdjZfNXRfcm91dGUuaXB2Nl9zaXAxLAorCQkJZW50cnktPmlwdjZfNXRfcm91dGUuaXB2Nl9zaXAyLAorCQkJZW50cnktPmlwdjZfNXRfcm91dGUuaXB2Nl9zaXAzLAorCQkJZW50cnktPmlwdjZfNXRfcm91dGUuc3BvcnQsCisJCQllbnRyeS0+aXB2Nl81dF9yb3V0ZS5pcHY2X2RpcDAsCisJCQllbnRyeS0+aXB2Nl81dF9yb3V0ZS5pcHY2X2RpcDEsCisJCQllbnRyeS0+aXB2Nl81dF9yb3V0ZS5pcHY2X2RpcDIsCisJCQllbnRyeS0+aXB2Nl81dF9yb3V0ZS5pcHY2X2RpcDMsCisJCQllbnRyeS0+aXB2Nl81dF9yb3V0ZS5kcG9ydCk7CisJfSBlbHNlIGlmIChJU19JUFY2XzZSRChlbnRyeSkpIHsKKwkJcHJfaW5mbygiSW5mb3JtYXRpb24gQmxvY2sgMjogJTA4WFxuIiwKKwkJCWVudHJ5LT5pcHY2XzZyZC5pbmZvX2JsazIpOworCQlwcl9pbmZvKCJDcmVhdGUgSVB2NiA2UkQgZW50cnlcbiIpOworCQlwcl9pbmZvKCJJTkcgU0lQdjYtPkRJUHY2OiAlMDhYOiUwOFg6JTA4WDolMDhYOiVkLT4gJTA4WDolMDhYOiUwOFg6JTA4WDolZFxuIiwKKwkJCWVudHJ5LT5pcHY2XzZyZC5pcHY2X3NpcDAsIGVudHJ5LT5pcHY2XzZyZC5pcHY2X3NpcDEsCisJCQllbnRyeS0+aXB2Nl82cmQuaXB2Nl9zaXAyLCBlbnRyeS0+aXB2Nl82cmQuaXB2Nl9zaXAzLAorCQkJZW50cnktPmlwdjZfNnJkLnNwb3J0LCBlbnRyeS0+aXB2Nl82cmQuaXB2Nl9kaXAwLAorCQkJZW50cnktPmlwdjZfNnJkLmlwdjZfZGlwMSwgZW50cnktPmlwdjZfNnJkLmlwdjZfZGlwMiwKKwkJCWVudHJ5LT5pcHY2XzZyZC5pcHY2X2RpcDMsIGVudHJ5LT5pcHY2XzZyZC5kcG9ydCk7CisJfQorCWlmIChJU19JUFY0X0hOQVBUKGVudHJ5KSB8fCBJU19JUFY0X0hOQVQoZW50cnkpKSB7CisJCSooKHUzMiAqKWhfc291cmNlKSA9IHN3YWIzMihlbnRyeS0+aXB2NF9obmFwdC5zbWFjX2hpKTsKKwkJKigodTE2ICopJmhfc291cmNlWzRdKSA9IHN3YWIxNihlbnRyeS0+aXB2NF9obmFwdC5zbWFjX2xvKTsKKwkJKigodTMyICopaF9kZXN0KSA9IHN3YWIzMihlbnRyeS0+aXB2NF9obmFwdC5kbWFjX2hpKTsKKwkJKigodTE2ICopJmhfZGVzdFs0XSkgPSBzd2FiMTYoZW50cnktPmlwdjRfaG5hcHQuZG1hY19sbyk7CisJCXByX2luZm8oIlNNQUM9JXBNID0+IERNQUM9JXBNXG4iLCBoX3NvdXJjZSwgaF9kZXN0KTsKKwkJcHJfaW5mbygiU3RhdGUgPSAlcywgIiwJZW50cnktPmJmaWIxLnN0YXRlID09IDAgPworCQkJIkludmFsaWQiIDogZW50cnktPmJmaWIxLnN0YXRlID09IDEgPworCQkJIlVuYmluZCIgOiBlbnRyeS0+YmZpYjEuc3RhdGUgPT0gMiA/CisJCQkiQklORCIgOiBlbnRyeS0+YmZpYjEuc3RhdGUgPT0gMyA/CisJCQkiRklOIiA6ICJVbmtub3duIik7CisJCXByX2luZm8oIlZsYW5fTGF5ZXIgPSAldSwgIiwgZW50cnktPmJmaWIxLnZsYW5fbGF5ZXIpOworCQlwcl9pbmZvKCJFdGhfdHlwZSA9IDB4JXgsIFZpZDEgPSAweCV4LCBWaWQyID0gMHgleFxuIiwKKwkJCWVudHJ5LT5pcHY0X2huYXB0LmV0eXBlLCBlbnRyeS0+aXB2NF9obmFwdC52bGFuMSwKKwkJCWVudHJ5LT5pcHY0X2huYXB0LnZsYW4yKTsKKwkJcHJfaW5mbygibXVsdGljYXN0ID0gJWQsIHBwcG9lID0gJWQsIHByb3RvID0gJXNcbiIsCisJCQllbnRyeS0+aXB2NF9obmFwdC5pYmxrMi5tY2FzdCwKKwkJCWVudHJ5LT5pcHY0X2huYXB0LmJmaWIxLnBzbiwKKwkJCWVudHJ5LT5pcHY0X2huYXB0LmJmaWIxLnVkcCA9PSAwID8KKwkJCSJUQ1AiIDoJZW50cnktPmlwdjRfaG5hcHQuYmZpYjEudWRwID09IDEgPworCQkJIlVEUCIgOiAiVW5rbm93biIpOworCQlwcl9pbmZvKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4iKTsKKwl9IGVsc2UgeworCQkqKCh1MzIgKiloX3NvdXJjZSkgPSBzd2FiMzIoZW50cnktPmlwdjZfNXRfcm91dGUuc21hY19oaSk7CisJCSooKHUxNiAqKSZoX3NvdXJjZVs0XSkgPSBzd2FiMTYoZW50cnktPmlwdjZfNXRfcm91dGUuc21hY19sbyk7CisJCSooKHUzMiAqKWhfZGVzdCkgPSBzd2FiMzIoZW50cnktPmlwdjZfNXRfcm91dGUuZG1hY19oaSk7CisJCSooKHUxNiAqKSZoX2Rlc3RbNF0pID0gc3dhYjE2KGVudHJ5LT5pcHY2XzV0X3JvdXRlLmRtYWNfbG8pOworCQlwcl9pbmZvKCJTTUFDPSVwTSA9PiBETUFDPSVwTVxuIiwgaF9zb3VyY2UsIGhfZGVzdCk7CisJCXByX2luZm8oIlN0YXRlID0gJXMsICIsCWVudHJ5LT5iZmliMS5zdGF0ZSA9PSAwID8KKwkJCSJJbnZhbGlkIiA6IGVudHJ5LT5iZmliMS5zdGF0ZSA9PSAxID8KKwkJCSJVbmJpbmQiIDogZW50cnktPmJmaWIxLnN0YXRlID09IDIgPworCQkJIkJJTkQiIDogZW50cnktPmJmaWIxLnN0YXRlID09IDMgPworCQkJIkZJTiIgOiAiVW5rbm93biIpOworCisJCXByX2luZm8oIlZsYW5fTGF5ZXIgPSAldSwgIiwgZW50cnktPmJmaWIxLnZsYW5fbGF5ZXIpOworCQlwcl9pbmZvKCJFdGhfdHlwZSA9IDB4JXgsIFZpZDEgPSAweCV4LCBWaWQyID0gMHgleFxuIiwKKwkJCWVudHJ5LT5pcHY2XzV0X3JvdXRlLmV0eXBlLCBlbnRyeS0+aXB2Nl81dF9yb3V0ZS52bGFuMSwKKwkJCWVudHJ5LT5pcHY2XzV0X3JvdXRlLnZsYW4yKTsKKwkJcHJfaW5mbygibXVsdGljYXN0ID0gJWQsIHBwcG9lID0gJWQsIHByb3RvID0gJXNcbiIsCisJCQllbnRyeS0+aXB2Nl81dF9yb3V0ZS5pYmxrMi5tY2FzdCwKKwkJCWVudHJ5LT5pcHY2XzV0X3JvdXRlLmJmaWIxLnBzbiwKKwkJCWVudHJ5LT5pcHY2XzV0X3JvdXRlLmJmaWIxLnVkcCA9PSAwID8KKwkJCSJUQ1AiIDoJZW50cnktPmlwdjZfNXRfcm91dGUuYmZpYjEudWRwID09IDEgPworCQkJIlVEUCIgOgkiVW5rbm93biIpOworCQlwcl9pbmZvKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4iKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCB3cmFwcGVkX3BwZTBfZW50cnlfZGVsZXRlKGludCBpbmRleCkgeworCWVudHJ5X2RlbGV0ZSgwLCBpbmRleCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCB3cmFwcGVkX3BwZTFfZW50cnlfZGVsZXRlKGludCBpbmRleCkgeworCWVudHJ5X2RlbGV0ZSgxLCBpbmRleCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBlbnRyeV9kZWxldGUodTMyIHBwZV9pZCwgaW50IGluZGV4KQoreworCXN0cnVjdCBmb2VfZW50cnkgKmVudHJ5OworCXN0cnVjdCBtdGtfaG5hdCAqaCA9IGhuYXRfcHJpdjsKKworCWlmIChwcGVfaWQgPj0gQ0ZHX1BQRV9OVU0pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGluZGV4IDwgLTEgfHwgaW5kZXggPj0gKGludCloLT5mb2VfZXRyeV9udW0pIHsKKwkJcHJfaW5mbygiSW52YWxpZCBlbnRyeSBpbmRleFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChpbmRleCA9PSAtMSkgeworCQltZW1zZXQoaC0+Zm9lX3RhYmxlX2NwdVtwcGVfaWRdLCAwLCBoLT5mb2VfZXRyeV9udW0gKiBzaXplb2Yoc3RydWN0IGZvZV9lbnRyeSkpOworCQlwcl9pbmZvKCJjbGVhciBhbGwgZm9lIGVudHJ5XG4iKTsKKwl9IGVsc2UgeworCisJCWVudHJ5ID0gaC0+Zm9lX3RhYmxlX2NwdVtwcGVfaWRdICsgaW5kZXg7CisJCW1lbXNldChlbnRyeSwgMCwgc2l6ZW9mKHN0cnVjdCBmb2VfZW50cnkpKTsKKwkJcHJfaW5mbygiZGVsZXRlIHBwZSBpZCA9ICVkLCBlbnRyeSBpZHggPSAlZFxuIiwgcHBlX2lkLCBpbmRleCk7CisJfQorCisJLyogY2xlYXIgSFdOQVQgY2FjaGUgKi8KKwlobmF0X2NhY2hlX2VibCgxKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChlbnRyeV9kZWxldGUpOworCitpbnQgY3Jfc2V0X3VzYWdlKGludCBsZXZlbCkKK3sKKwlkZWJ1Z19sZXZlbCA9IGxldmVsOworCXByX2luZm8oIkR1bXAgaG5hdCBDUjogY2F0IC9zeXMva2VybmVsL2RlYnVnL2huYXQvaG5hdF9zZXR0aW5nXG5cbiIpOworCXByX2luZm8oIj09PT09PT09PT09PT09PT09PT09QWR2YW5jZWQgU2V0dGluZ3M9PT09PT09PT09PT09PT09PT09PVxuIik7CisJcHJfaW5mbygiVXNhZ2U6IGVjaG8gW3R5cGVdIFtvcHRpb25dID4gL3N5cy9rZXJuZWwvZGVidWcvaG5hdC9obmF0X3NldHRpbmdcblxuIik7CisJcHJfaW5mbygiQ29tbWFuZHM6ICAgW3R5cGVdIFtvcHRpb25dXG4iKTsKKwlwcl9pbmZvKCIgICAgICAgICAgICAgIDAgICAgIDB+NyAgICAgICAgU2V0IGRlYnVnX2xldmVsKDB+NyksIGN1cnJlbnQgZGVidWdfbGV2ZWw9JWRcbiIsCisJCWRlYnVnX2xldmVsKTsKKwlwcl9pbmZvKCIgICAgICAgICAgICAgIDEgICAgIDB+NjU1MzUgICAgU2V0IGJpbmRpbmcgdGhyZXNob2xkXG4iKTsKKwlwcl9pbmZvKCIgICAgICAgICAgICAgIDIgICAgIDB+NjU1MzUgICAgU2V0IFRDUCBiaW5kIGxpZmV0aW1lXG4iKTsKKwlwcl9pbmZvKCIgICAgICAgICAgICAgIDMgICAgIDB+NjU1MzUgICAgU2V0IEZJTiBiaW5kIGxpZmV0aW1lXG4iKTsKKwlwcl9pbmZvKCIgICAgICAgICAgICAgIDQgICAgIDB+NjU1MzUgICAgU2V0IFVEUCBiaW5kIGxpZmV0aW1lXG4iKTsKKwlwcl9pbmZvKCIgICAgICAgICAgICAgIDUgICAgIDB+MjU1ICAgICAgU2V0IFRDUCBrZWVwIGFsaXZlIGludGVydmFsXG4iKTsKKwlwcl9pbmZvKCIgICAgICAgICAgICAgIDYgICAgIDB+MjU1ICAgICAgU2V0IFVEUCBrZWVwIGFsaXZlIGludGVydmFsXG4iKTsKKwlwcl9pbmZvKCIgICAgICAgICAgICAgIDcgICAgIDB+MSAgICAgICAgU2V0IGhuYXQgY291bnRlciB1cGRhdGUgdG8gbmZfY29ubnRyYWNrXG4iKTsKKworCXJldHVybiAwOworfQorCitpbnQgYmluZGluZ190aHJlc2hvbGQoaW50IHRocmVzaG9sZCkKK3sKKwlpbnQgaTsKKworCXByX2luZm8oIkJpbmRpbmcgVGhyZXNob2xkID0lZFxuIiwgdGhyZXNob2xkKTsKKworCWZvciAoaSA9IDA7IGkgPCBDRkdfUFBFX05VTTsgaSsrKQorCQl3cml0ZWwodGhyZXNob2xkLCBobmF0X3ByaXYtPnBwZV9iYXNlW2ldICsgUFBFX0JORFIpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCB0Y3BfYmluZF9saWZldGltZShpbnQgdGNwX2xpZmUpCit7CisJaW50IGk7CisKKwlwcl9pbmZvKCJ0Y3BfbGlmZSA9ICVkXG4iLCB0Y3BfbGlmZSk7CisKKwkvKiBzZXQgRGVsdGEgdGltZSBmb3IgYWdpbmcgb3V0IGFuIGJpbmQgVENQIEZPRSBlbnRyeSAqLworCWZvciAoaSA9IDA7IGkgPCBDRkdfUFBFX05VTTsgaSsrKQorCQljcl9zZXRfZmllbGQoaG5hdF9wcml2LT5wcGVfYmFzZVtpXSArIFBQRV9CTkRfQUdFXzEsCisJCQkgICAgIFRDUF9ETFRBLCB0Y3BfbGlmZSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGZpbl9iaW5kX2xpZmV0aW1lKGludCBmaW5fbGlmZSkKK3sKKwlpbnQgaTsKKworCXByX2luZm8oImZpbl9saWZlID0gJWRcbiIsIGZpbl9saWZlKTsKKworCS8qIHNldCBEZWx0YSB0aW1lIGZvciBhZ2luZyBvdXQgYW4gYmluZCBUQ1AgRklOIEZPRSBlbnRyeSAqLworCWZvciAoaSA9IDA7IGkgPCBDRkdfUFBFX05VTTsgaSsrKQorCQljcl9zZXRfZmllbGQoaG5hdF9wcml2LT5wcGVfYmFzZVtpXSArIFBQRV9CTkRfQUdFXzEsCisJCQkgICAgIEZJTl9ETFRBLCBmaW5fbGlmZSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHVkcF9iaW5kX2xpZmV0aW1lKGludCB1ZHBfbGlmZSkKK3sKKwlpbnQgaTsKKworCXByX2luZm8oInVkcF9saWZlID0gJWRcbiIsIHVkcF9saWZlKTsKKworCS8qIHNldCBEZWx0YSB0aW1lIGZvciBhZ2luZyBvdXQgYW4gYmluZCBVRFAgRk9FIGVudHJ5ICovCisJZm9yIChpID0gMDsgaSA8IENGR19QUEVfTlVNOyBpKyspCisJCWNyX3NldF9maWVsZChobmF0X3ByaXYtPnBwZV9iYXNlW2ldICsgUFBFX0JORF9BR0VfMCwKKwkJCSAgICAgVURQX0RMVEEsIHVkcF9saWZlKTsKKworCXJldHVybiAwOworfQorCitpbnQgdGNwX2tlZXBfYWxpdmUoaW50IHRjcF9pbnRlcnZhbCkKK3sKKwlpbnQgaTsKKworCWlmICh0Y3BfaW50ZXJ2YWwgPiAyNTUpIHsKKwkJdGNwX2ludGVydmFsID0gMjU1OworCQlwcl9pbmZvKCJUQ1Aga2VlcCBhbGl2ZSBtYXggaW50ZXJ2YWwgPSAyNTVcbiIpOworCX0gZWxzZSB7CisJCXByX2luZm8oInRjcF9pbnRlcnZhbCA9ICVkXG4iLCB0Y3BfaW50ZXJ2YWwpOworCX0KKworCS8qIEtlZXAgYWxpdmUgdGltZSBmb3IgYmluZCBGT0UgVENQIGVudHJ5ICovCisJZm9yIChpID0gMDsgaSA8IENGR19QUEVfTlVNOyBpKyspCisJCWNyX3NldF9maWVsZChobmF0X3ByaXYtPnBwZV9iYXNlW2ldICsgUFBFX0tBLAorCQkJICAgICBUQ1BfS0EsIHRjcF9pbnRlcnZhbCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHVkcF9rZWVwX2FsaXZlKGludCB1ZHBfaW50ZXJ2YWwpCit7CisJaW50IGk7CisKKwlpZiAodWRwX2ludGVydmFsID4gMjU1KSB7CisJCXVkcF9pbnRlcnZhbCA9IDI1NTsKKwkJcHJfaW5mbygiVENQL1VEUCBrZWVwIGFsaXZlIG1heCBpbnRlcnZhbCA9IDI1NVxuIik7CisJfSBlbHNlIHsKKwkJcHJfaW5mbygidWRwX2ludGVydmFsID0gJWRcbiIsIHVkcF9pbnRlcnZhbCk7CisJfQorCisJLyogS2VlcCBhbGl2ZSB0aW1lciBmb3IgYmluZCBGT0UgVURQIGVudHJ5ICovCisJZm9yIChpID0gMDsgaSA8IENGR19QUEVfTlVNOyBpKyspCisJCWNyX3NldF9maWVsZChobmF0X3ByaXYtPnBwZV9iYXNlW2ldICsgUFBFX0tBLAorCQkJICAgICBVRFBfS0EsIHVkcF9pbnRlcnZhbCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHNldF9uZl91cGRhdGVfdG9nZ2xlKGludCB0b2dnbGUpCit7CisJc3RydWN0IG10a19obmF0ICpoID0gaG5hdF9wcml2OworCisJaWYgKHRvZ2dsZSA9PSAxKQorCQlwcl9pbmZvKCJFbmFibGUgaG5hdCBjb3VudGVyIHVwZGF0ZSB0byBuZl9jb25udHJhY2tcbiIpOworCWVsc2UgaWYgKHRvZ2dsZSA9PSAwKQorCQlwcl9pbmZvKCJEaXNhYmxlIGhuYXQgY291bnRlciB1cGRhdGUgdG8gbmZfY29ubnRyYWNrXG4iKTsKKwllbHNlCisJCXByX2luZm8oImlucHV0IGVycm9yXG4iKTsKKwloLT5uZl9zdGF0X2VuID0gdG9nZ2xlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBkZWJ1Z2ZzX3dyaXRlX2Z1bmMgaG5hdF9zZXRfZnVuY1tdID0geworCVswXSA9IGhuYXRfc2V0X3VzYWdlLAorCVsxXSA9IGhuYXRfY3B1X3JlYXNvbiwKK307CisKK3N0YXRpYyBjb25zdCBkZWJ1Z2ZzX3dyaXRlX2Z1bmMgZW50cnlfc2V0X2Z1bmNbXSA9IHsKKwlbMF0gPSBlbnRyeV9zZXRfdXNhZ2UsCisJWzFdID0gZW50cnlfc2V0X3N0YXRlLAorCVsyXSA9IHdyYXBwZWRfcHBlMF9lbnRyeV9kZXRhaWwsCisJWzNdID0gd3JhcHBlZF9wcGUwX2VudHJ5X2RlbGV0ZSwKKwlbNF0gPSB3cmFwcGVkX3BwZTFfZW50cnlfZGV0YWlsLAorCVs1XSA9IHdyYXBwZWRfcHBlMV9lbnRyeV9kZWxldGUsCit9OworCitzdGF0aWMgY29uc3QgZGVidWdmc193cml0ZV9mdW5jIGNyX3NldF9mdW5jW10gPSB7CisJWzBdID0gY3Jfc2V0X3VzYWdlLCAgICAgIFsxXSA9IGJpbmRpbmdfdGhyZXNob2xkLAorCVsyXSA9IHRjcF9iaW5kX2xpZmV0aW1lLCBbM10gPSBmaW5fYmluZF9saWZldGltZSwKKwlbNF0gPSB1ZHBfYmluZF9saWZldGltZSwgWzVdID0gdGNwX2tlZXBfYWxpdmUsCisJWzZdID0gdWRwX2tlZXBfYWxpdmUsICAgIFs3XSA9IHNldF9uZl91cGRhdGVfdG9nZ2xlLAorfTsKKworaW50IHJlYWRfbWliKHN0cnVjdCBtdGtfaG5hdCAqaCwgdTMyIHBwZV9pZCwKKwkgICAgIHUzMiBpbmRleCwgdTY0ICpieXRlcywgdTY0ICpwYWNrZXRzKQoreworCWludCByZXQ7CisJdTMyIHZhbCwgY250X3IwLCBjbnRfcjEsIGNudF9yMjsKKworCWlmIChwcGVfaWQgPj0gQ0ZHX1BQRV9OVU0pCisJCXJldHVybiAtRUlOVkFMOworCisJd3JpdGVsKGluZGV4IHwgKDEgPDwgMTYpLCBoLT5wcGVfYmFzZVtwcGVfaWRdICsgUFBFX01JQl9TRVJfQ1IpOworCXJldCA9IHJlYWR4X3BvbGxfdGltZW91dF9hdG9taWMocmVhZGwsIGgtPnBwZV9iYXNlW3BwZV9pZF0gKyBQUEVfTUlCX1NFUl9DUiwgdmFsLAorCQkJCQkhKHZhbCAmIEJJVF9NSUJfQlVTWSksIDIwLCAxMDAwMCk7CisKKwlpZiAocmV0IDwgMCkgeworCQlwcl9ub3RpY2UoIm1pYiBidXN5LCBwbGVhc2UgY2hlY2sgbGF0ZXJcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwljbnRfcjAgPSByZWFkbChoLT5wcGVfYmFzZVtwcGVfaWRdICsgUFBFX01JQl9TRVJfUjApOworCWNudF9yMSA9IHJlYWRsKGgtPnBwZV9iYXNlW3BwZV9pZF0gKyBQUEVfTUlCX1NFUl9SMSk7CisJY250X3IyID0gcmVhZGwoaC0+cHBlX2Jhc2VbcHBlX2lkXSArIFBQRV9NSUJfU0VSX1IyKTsKKwkqYnl0ZXMgPSBjbnRfcjAgKyAoKHU2NCkoY250X3IxICYgMHhmZmZmKSA8PCAzMik7CisJKnBhY2tldHMgPSAoKGNudF9yMSAmIDB4ZmZmZjAwMDApID4+IDE2KSArICgoY250X3IyICYgMHhmZmZmZmYpIDw8IDE2KTsKKworCXJldHVybiAwOworCit9CisKK3N0cnVjdCBobmF0X2FjY291bnRpbmcgKmhuYXRfZ2V0X2NvdW50KHN0cnVjdCBtdGtfaG5hdCAqaCwgdTMyIHBwZV9pZCwKKwkJCQkgICAgICAgdTMyIGluZGV4LCBzdHJ1Y3QgaG5hdF9hY2NvdW50aW5nICpkaWZmKQorCit7CisJdTY0IGJ5dGVzLCBwYWNrZXRzOworCisJaWYgKHBwZV9pZCA+PSBDRkdfUFBFX05VTSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIWhuYXRfcHJpdi0+ZGF0YS0+cGVyX2Zsb3dfYWNjb3VudGluZykKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAocmVhZF9taWIoaCwgcHBlX2lkLCBpbmRleCwgJmJ5dGVzLCAmcGFja2V0cykpCisJCXJldHVybiBOVUxMOworCisJaC0+YWNjdFtwcGVfaWRdW2luZGV4XS5ieXRlcyArPSBieXRlczsKKwloLT5hY2N0W3BwZV9pZF1baW5kZXhdLnBhY2tldHMgKz0gcGFja2V0czsKKwkKKwlpZiAoZGlmZikgeworCQlkaWZmLT5ieXRlcyA9IGJ5dGVzOworCQlkaWZmLT5wYWNrZXRzID0gcGFja2V0czsKKwl9CisKKwlyZXR1cm4gJmgtPmFjY3RbcHBlX2lkXVtpbmRleF07Cit9CitFWFBPUlRfU1lNQk9MKGhuYXRfZ2V0X2NvdW50KTsKKworI2RlZmluZSBQUklOVF9DT1VOVChtLCBhY2N0KSB7aWYgKGFjY3QpIFwKKwkJc2VxX3ByaW50ZihtLCAiYnl0ZXM9JWxsdXxwYWNrZXRzPSVsbHV8IiwgXAorCQkJICAgYWNjdC0+Ynl0ZXMsIGFjY3QtPnBhY2tldHMpOyB9CitzdGF0aWMgaW50IF9faG5hdF9kZWJ1Z19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcHJpdmF0ZSwgdTMyIHBwZV9pZCkKK3sKKwlzdHJ1Y3QgbXRrX2huYXQgKmggPSBobmF0X3ByaXY7CisJc3RydWN0IGZvZV9lbnRyeSAqZW50cnksICplbmQ7CisJdW5zaWduZWQgY2hhciBoX2Rlc3RbRVRIX0FMRU5dOworCXVuc2lnbmVkIGNoYXIgaF9zb3VyY2VbRVRIX0FMRU5dOworCXN0cnVjdCBobmF0X2FjY291bnRpbmcgKmFjY3Q7CisJdTMyIGVudHJ5X2luZGV4ID0gMDsKKworCWlmIChwcGVfaWQgPj0gQ0ZHX1BQRV9OVU0pCisJCXJldHVybiAtRUlOVkFMOworCisJZW50cnkgPSBoLT5mb2VfdGFibGVfY3B1W3BwZV9pZF07CisJZW5kID0gaC0+Zm9lX3RhYmxlX2NwdVtwcGVfaWRdICsgaG5hdF9wcml2LT5mb2VfZXRyeV9udW07CisJd2hpbGUgKGVudHJ5IDwgZW5kKSB7CisJCWlmICghZW50cnktPmJmaWIxLnN0YXRlKSB7CisJCQllbnRyeSsrOworCQkJZW50cnlfaW5kZXgrKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWFjY3QgPSBobmF0X2dldF9jb3VudChoLCBwcGVfaWQsIGVudHJ5X2luZGV4LCBOVUxMKTsKKwkJaWYgKElTX0lQVjRfSE5BUFQoZW50cnkpKSB7CisJCQlfX2JlMzIgc2FkZHIgPSBodG9ubChlbnRyeS0+aXB2NF9obmFwdC5zaXApOworCQkJX19iZTMyIGRhZGRyID0gaHRvbmwoZW50cnktPmlwdjRfaG5hcHQuZGlwKTsKKwkJCV9fYmUzMiBuc2FkZHIgPSBodG9ubChlbnRyeS0+aXB2NF9obmFwdC5uZXdfc2lwKTsKKwkJCV9fYmUzMiBuZGFkZHIgPSBodG9ubChlbnRyeS0+aXB2NF9obmFwdC5uZXdfZGlwKTsKKworCQkJKigodTMyICopaF9zb3VyY2UpID0gc3dhYjMyKGVudHJ5LT5pcHY0X2huYXB0LnNtYWNfaGkpOworCQkJKigodTE2ICopJmhfc291cmNlWzRdKSA9CisJCQkJc3dhYjE2KGVudHJ5LT5pcHY0X2huYXB0LnNtYWNfbG8pOworCQkJKigodTMyICopaF9kZXN0KSA9IHN3YWIzMihlbnRyeS0+aXB2NF9obmFwdC5kbWFjX2hpKTsKKwkJCSooKHUxNiAqKSZoX2Rlc3RbNF0pID0KKwkJCQlzd2FiMTYoZW50cnktPmlwdjRfaG5hcHQuZG1hY19sbyk7CisJCQlQUklOVF9DT1VOVChtLCBhY2N0KTsKKwkJCXNlcV9wcmludGYobSwKKwkJCQkgICAiYWRkcj0weCVwfHBwZT0lZHxpbmRleD0lZHxzdGF0ZT0lc3x0eXBlPSVzfCVwSTQ6JWQtPiVwSTQ6JWQ9PiVwSTQ6JWQtPiVwSTQ6JWR8JXBNPT4lcE18ZXR5cGU9MHglMDR4fGluZm8xPTB4JXh8aW5mbzI9MHgleHx2bGFuMT0lZHx2bGFuMj0lZFxuIiwKKwkJCQkgICBlbnRyeSwgcHBlX2lkLCBlaShlbnRyeSwgZW5kKSwKKwkJCQkgICBlcyhlbnRyeSksIHB0KGVudHJ5KSwgJnNhZGRyLAorCQkJCSAgIGVudHJ5LT5pcHY0X2huYXB0LnNwb3J0LCAmZGFkZHIsCisJCQkJICAgZW50cnktPmlwdjRfaG5hcHQuZHBvcnQsICZuc2FkZHIsCisJCQkJICAgZW50cnktPmlwdjRfaG5hcHQubmV3X3Nwb3J0LCAmbmRhZGRyLAorCQkJCSAgIGVudHJ5LT5pcHY0X2huYXB0Lm5ld19kcG9ydCwgaF9zb3VyY2UsIGhfZGVzdCwKKwkJCQkgICBudG9ocyhlbnRyeS0+aXB2NF9obmFwdC5ldHlwZSksCisJCQkJICAgZW50cnktPmlwdjRfaG5hcHQuaW5mb19ibGsxLAorCQkJCSAgIGVudHJ5LT5pcHY0X2huYXB0LmluZm9fYmxrMiwKKwkJCQkgICBlbnRyeS0+aXB2NF9obmFwdC52bGFuMSwKKwkJCQkgICBlbnRyeS0+aXB2NF9obmFwdC52bGFuMik7CisJCX0gZWxzZSBpZiAoSVNfSVBWNF9ITkFUKGVudHJ5KSkgeworCQkJX19iZTMyIHNhZGRyID0gaHRvbmwoZW50cnktPmlwdjRfaG5hcHQuc2lwKTsKKwkJCV9fYmUzMiBkYWRkciA9IGh0b25sKGVudHJ5LT5pcHY0X2huYXB0LmRpcCk7CisJCQlfX2JlMzIgbnNhZGRyID0gaHRvbmwoZW50cnktPmlwdjRfaG5hcHQubmV3X3NpcCk7CisJCQlfX2JlMzIgbmRhZGRyID0gaHRvbmwoZW50cnktPmlwdjRfaG5hcHQubmV3X2RpcCk7CisKKwkJCSooKHUzMiAqKWhfc291cmNlKSA9IHN3YWIzMihlbnRyeS0+aXB2NF9obmFwdC5zbWFjX2hpKTsKKwkJCSooKHUxNiAqKSZoX3NvdXJjZVs0XSkgPQorCQkJCXN3YWIxNihlbnRyeS0+aXB2NF9obmFwdC5zbWFjX2xvKTsKKwkJCSooKHUzMiAqKWhfZGVzdCkgPSBzd2FiMzIoZW50cnktPmlwdjRfaG5hcHQuZG1hY19oaSk7CisJCQkqKCh1MTYgKikmaF9kZXN0WzRdKSA9CisJCQkJc3dhYjE2KGVudHJ5LT5pcHY0X2huYXB0LmRtYWNfbG8pOworCQkJUFJJTlRfQ09VTlQobSwgYWNjdCk7CisJCQlzZXFfcHJpbnRmKG0sCisJCQkJICAgImFkZHI9MHglcHxwcGU9JWR8aW5kZXg9JWR8c3RhdGU9JXN8dHlwZT0lc3wlcEk0LT4lcEk0PT4lcEk0LT4lcEk0fCVwTT0+JXBNfGV0eXBlPTB4JTA0eHxpbmZvMT0weCV4fGluZm8yPTB4JXh8dmxhbjE9JWR8dmxhbjI9JWRcbiIsCisJCQkJICAgZW50cnksIHBwZV9pZCwgZWkoZW50cnksIGVuZCksCisJCQkJICAgZXMoZW50cnkpLCBwdChlbnRyeSksICZzYWRkciwKKwkJCQkgICAmZGFkZHIsICZuc2FkZHIsICZuZGFkZHIsIGhfc291cmNlLCBoX2Rlc3QsCisJCQkJICAgbnRvaHMoZW50cnktPmlwdjRfaG5hcHQuZXR5cGUpLAorCQkJCSAgIGVudHJ5LT5pcHY0X2huYXB0LmluZm9fYmxrMSwKKwkJCQkgICBlbnRyeS0+aXB2NF9obmFwdC5pbmZvX2JsazIsCisJCQkJICAgZW50cnktPmlwdjRfaG5hcHQudmxhbjEsCisJCQkJICAgZW50cnktPmlwdjRfaG5hcHQudmxhbjIpOworCQl9IGVsc2UgaWYgKElTX0lQVjZfNVRfUk9VVEUoZW50cnkpKSB7CisJCQl1MzIgaXB2Nl9zaXAwID0gZW50cnktPmlwdjZfM3Rfcm91dGUuaXB2Nl9zaXAwOworCQkJdTMyIGlwdjZfc2lwMSA9IGVudHJ5LT5pcHY2XzN0X3JvdXRlLmlwdjZfc2lwMTsKKwkJCXUzMiBpcHY2X3NpcDIgPSBlbnRyeS0+aXB2Nl8zdF9yb3V0ZS5pcHY2X3NpcDI7CisJCQl1MzIgaXB2Nl9zaXAzID0gZW50cnktPmlwdjZfM3Rfcm91dGUuaXB2Nl9zaXAzOworCQkJdTMyIGlwdjZfZGlwMCA9IGVudHJ5LT5pcHY2XzN0X3JvdXRlLmlwdjZfZGlwMDsKKwkJCXUzMiBpcHY2X2RpcDEgPSBlbnRyeS0+aXB2Nl8zdF9yb3V0ZS5pcHY2X2RpcDE7CisJCQl1MzIgaXB2Nl9kaXAyID0gZW50cnktPmlwdjZfM3Rfcm91dGUuaXB2Nl9kaXAyOworCQkJdTMyIGlwdjZfZGlwMyA9IGVudHJ5LT5pcHY2XzN0X3JvdXRlLmlwdjZfZGlwMzsKKworCQkJKigodTMyICopaF9zb3VyY2UpID0KKwkJCQlzd2FiMzIoZW50cnktPmlwdjZfNXRfcm91dGUuc21hY19oaSk7CisJCQkqKCh1MTYgKikmaF9zb3VyY2VbNF0pID0KKwkJCQlzd2FiMTYoZW50cnktPmlwdjZfNXRfcm91dGUuc21hY19sbyk7CisJCQkqKCh1MzIgKiloX2Rlc3QpID0gc3dhYjMyKGVudHJ5LT5pcHY2XzV0X3JvdXRlLmRtYWNfaGkpOworCQkJKigodTE2ICopJmhfZGVzdFs0XSkgPQorCQkJCXN3YWIxNihlbnRyeS0+aXB2Nl81dF9yb3V0ZS5kbWFjX2xvKTsKKwkJCVBSSU5UX0NPVU5UKG0sIGFjY3QpOworCQkJc2VxX3ByaW50ZihtLAorCQkJCSAgICJhZGRyPTB4JXB8cHBlPSVkfGluZGV4PSVkfHN0YXRlPSVzfHR5cGU9JXN8U0lQPSUwOHg6JTA4eDolMDh4OiUwOHgoc3A9JWQpLT5ESVA9JTA4eDolMDh4OiUwOHg6JTA4eChkcD0lZCl8JXBNPT4lcE18ZXR5cGU9MHglMDR4fGluZm8xPTB4JXh8aW5mbzI9MHgleFxuIiwKKwkJCQkgICBlbnRyeSwgcHBlX2lkLCBlaShlbnRyeSwgZW5kKSwgZXMoZW50cnkpLCBwdChlbnRyeSksIGlwdjZfc2lwMCwKKwkJCQkgICBpcHY2X3NpcDEsIGlwdjZfc2lwMiwgaXB2Nl9zaXAzLAorCQkJCSAgIGVudHJ5LT5pcHY2XzV0X3JvdXRlLnNwb3J0LCBpcHY2X2RpcDAsCisJCQkJICAgaXB2Nl9kaXAxLCBpcHY2X2RpcDIsIGlwdjZfZGlwMywKKwkJCQkgICBlbnRyeS0+aXB2Nl81dF9yb3V0ZS5kcG9ydCwgaF9zb3VyY2UsIGhfZGVzdCwKKwkJCQkgICBudG9ocyhlbnRyeS0+aXB2Nl81dF9yb3V0ZS5ldHlwZSksCisJCQkJICAgZW50cnktPmlwdjZfNXRfcm91dGUuaW5mb19ibGsxLAorCQkJCSAgIGVudHJ5LT5pcHY2XzV0X3JvdXRlLmluZm9fYmxrMik7CisJCX0gZWxzZSBpZiAoSVNfSVBWNl8zVF9ST1VURShlbnRyeSkpIHsKKwkJCXUzMiBpcHY2X3NpcDAgPSBlbnRyeS0+aXB2Nl8zdF9yb3V0ZS5pcHY2X3NpcDA7CisJCQl1MzIgaXB2Nl9zaXAxID0gZW50cnktPmlwdjZfM3Rfcm91dGUuaXB2Nl9zaXAxOworCQkJdTMyIGlwdjZfc2lwMiA9IGVudHJ5LT5pcHY2XzN0X3JvdXRlLmlwdjZfc2lwMjsKKwkJCXUzMiBpcHY2X3NpcDMgPSBlbnRyeS0+aXB2Nl8zdF9yb3V0ZS5pcHY2X3NpcDM7CisJCQl1MzIgaXB2Nl9kaXAwID0gZW50cnktPmlwdjZfM3Rfcm91dGUuaXB2Nl9kaXAwOworCQkJdTMyIGlwdjZfZGlwMSA9IGVudHJ5LT5pcHY2XzN0X3JvdXRlLmlwdjZfZGlwMTsKKwkJCXUzMiBpcHY2X2RpcDIgPSBlbnRyeS0+aXB2Nl8zdF9yb3V0ZS5pcHY2X2RpcDI7CisJCQl1MzIgaXB2Nl9kaXAzID0gZW50cnktPmlwdjZfM3Rfcm91dGUuaXB2Nl9kaXAzOworCisJCQkqKCh1MzIgKiloX3NvdXJjZSkgPQorCQkJCXN3YWIzMihlbnRyeS0+aXB2Nl81dF9yb3V0ZS5zbWFjX2hpKTsKKwkJCSooKHUxNiAqKSZoX3NvdXJjZVs0XSkgPQorCQkJCXN3YWIxNihlbnRyeS0+aXB2Nl81dF9yb3V0ZS5zbWFjX2xvKTsKKwkJCSooKHUzMiAqKWhfZGVzdCkgPSBzd2FiMzIoZW50cnktPmlwdjZfNXRfcm91dGUuZG1hY19oaSk7CisJCQkqKCh1MTYgKikmaF9kZXN0WzRdKSA9CisJCQkJc3dhYjE2KGVudHJ5LT5pcHY2XzV0X3JvdXRlLmRtYWNfbG8pOworCQkJUFJJTlRfQ09VTlQobSwgYWNjdCk7CisJCQlzZXFfcHJpbnRmKG0sCisJCQkJICAgImFkZHI9MHglcHxwcGU9JWR8aW5kZXg9JWR8c3RhdGU9JXN8dHlwZT0lc3xTSVA9JTA4eDolMDh4OiUwOHg6JTA4eC0+RElQPSUwOHg6JTA4eDolMDh4OiUwOHh8JXBNPT4lcE18ZXR5cGU9MHglMDR4fGluZm8xPTB4JXh8aW5mbzI9MHgleFxuIiwKKwkJCQkgICBlbnRyeSwgcHBlX2lkLCBlaShlbnRyeSwgZW5kKSwKKwkJCQkgICBlcyhlbnRyeSksIHB0KGVudHJ5KSwgaXB2Nl9zaXAwLAorCQkJCSAgIGlwdjZfc2lwMSwgaXB2Nl9zaXAyLCBpcHY2X3NpcDMsIGlwdjZfZGlwMCwKKwkJCQkgICBpcHY2X2RpcDEsIGlwdjZfZGlwMiwgaXB2Nl9kaXAzLCBoX3NvdXJjZSwKKwkJCQkgICBoX2Rlc3QsIG50b2hzKGVudHJ5LT5pcHY2XzV0X3JvdXRlLmV0eXBlKSwKKwkJCQkgICBlbnRyeS0+aXB2Nl81dF9yb3V0ZS5pbmZvX2JsazEsCisJCQkJICAgZW50cnktPmlwdjZfNXRfcm91dGUuaW5mb19ibGsyKTsKKwkJfSBlbHNlIGlmIChJU19JUFY2XzZSRChlbnRyeSkpIHsKKwkJCXUzMiBpcHY2X3NpcDAgPSBlbnRyeS0+aXB2Nl8zdF9yb3V0ZS5pcHY2X3NpcDA7CisJCQl1MzIgaXB2Nl9zaXAxID0gZW50cnktPmlwdjZfM3Rfcm91dGUuaXB2Nl9zaXAxOworCQkJdTMyIGlwdjZfc2lwMiA9IGVudHJ5LT5pcHY2XzN0X3JvdXRlLmlwdjZfc2lwMjsKKwkJCXUzMiBpcHY2X3NpcDMgPSBlbnRyeS0+aXB2Nl8zdF9yb3V0ZS5pcHY2X3NpcDM7CisJCQl1MzIgaXB2Nl9kaXAwID0gZW50cnktPmlwdjZfM3Rfcm91dGUuaXB2Nl9kaXAwOworCQkJdTMyIGlwdjZfZGlwMSA9IGVudHJ5LT5pcHY2XzN0X3JvdXRlLmlwdjZfZGlwMTsKKwkJCXUzMiBpcHY2X2RpcDIgPSBlbnRyeS0+aXB2Nl8zdF9yb3V0ZS5pcHY2X2RpcDI7CisJCQl1MzIgaXB2Nl9kaXAzID0gZW50cnktPmlwdjZfM3Rfcm91dGUuaXB2Nl9kaXAzOworCQkJX19iZTMyIHRzYWRkciA9IGh0b25sKGVudHJ5LT5pcHY2XzZyZC50dW5uZWxfc2lwdjQpOworCQkJX19iZTMyIHRkYWRkciA9IGh0b25sKGVudHJ5LT5pcHY2XzZyZC50dW5uZWxfZGlwdjQpOworCisJCQkqKCh1MzIgKiloX3NvdXJjZSkgPQorCQkJCXN3YWIzMihlbnRyeS0+aXB2Nl81dF9yb3V0ZS5zbWFjX2hpKTsKKwkJCSooKHUxNiAqKSZoX3NvdXJjZVs0XSkgPQorCQkJCXN3YWIxNihlbnRyeS0+aXB2Nl81dF9yb3V0ZS5zbWFjX2xvKTsKKwkJCSooKHUzMiAqKWhfZGVzdCkgPSBzd2FiMzIoZW50cnktPmlwdjZfNXRfcm91dGUuZG1hY19oaSk7CisJCQkqKCh1MTYgKikmaF9kZXN0WzRdKSA9CisJCQkJc3dhYjE2KGVudHJ5LT5pcHY2XzV0X3JvdXRlLmRtYWNfbG8pOworCQkJUFJJTlRfQ09VTlQobSwgYWNjdCk7CisJCQlzZXFfcHJpbnRmKG0sCisJCQkJICAgImFkZHI9MHglcHxwcGU9JWR8aW5kZXg9JWR8c3RhdGU9JXN8dHlwZT0lc3xTSVA9JTA4eDolMDh4OiUwOHg6JTA4eChzcD0lZCktPkRJUD0lMDh4OiUwOHg6JTA4eDolMDh4KGRwPSVkKXxUU0lQPSVwSTQtPlRESVA9JXBJNHwlcE09PiVwTXxldHlwZT0weCUwNHh8aW5mbzE9MHgleHxpbmZvMj0weCV4XG4iLAorCQkJCSAgIGVudHJ5LCBwcGVfaWQsIGVpKGVudHJ5LCBlbmQpLAorCQkJCSAgIGVzKGVudHJ5KSwgcHQoZW50cnkpLCBpcHY2X3NpcDAsCisJCQkJICAgaXB2Nl9zaXAxLCBpcHY2X3NpcDIsIGlwdjZfc2lwMywKKwkJCQkgICBlbnRyeS0+aXB2Nl81dF9yb3V0ZS5zcG9ydCwgaXB2Nl9kaXAwLAorCQkJCSAgIGlwdjZfZGlwMSwgaXB2Nl9kaXAyLCBpcHY2X2RpcDMsCisJCQkJICAgZW50cnktPmlwdjZfNXRfcm91dGUuZHBvcnQsICZ0c2FkZHIsICZ0ZGFkZHIsCisJCQkJICAgaF9zb3VyY2UsIGhfZGVzdCwKKwkJCQkgICBudG9ocyhlbnRyeS0+aXB2Nl81dF9yb3V0ZS5ldHlwZSksCisJCQkJICAgZW50cnktPmlwdjZfNXRfcm91dGUuaW5mb19ibGsxLAorCQkJCSAgIGVudHJ5LT5pcHY2XzV0X3JvdXRlLmluZm9fYmxrMik7CisJCX0gZWxzZSBpZiAoSVNfSVBWNF9EU0xJVEUoZW50cnkpKSB7CisJCQlfX2JlMzIgc2FkZHIgPSBodG9ubChlbnRyeS0+aXB2NF9obmFwdC5zaXApOworCQkJX19iZTMyIGRhZGRyID0gaHRvbmwoZW50cnktPmlwdjRfaG5hcHQuZGlwKTsKKwkJCXUzMiBpcHY2X3RzaXAwID0gZW50cnktPmlwdjRfZHNsaXRlLnR1bm5lbF9zaXB2Nl8wOworCQkJdTMyIGlwdjZfdHNpcDEgPSBlbnRyeS0+aXB2NF9kc2xpdGUudHVubmVsX3NpcHY2XzE7CisJCQl1MzIgaXB2Nl90c2lwMiA9IGVudHJ5LT5pcHY0X2RzbGl0ZS50dW5uZWxfc2lwdjZfMjsKKwkJCXUzMiBpcHY2X3RzaXAzID0gZW50cnktPmlwdjRfZHNsaXRlLnR1bm5lbF9zaXB2Nl8zOworCQkJdTMyIGlwdjZfdGRpcDAgPSBlbnRyeS0+aXB2NF9kc2xpdGUudHVubmVsX2RpcHY2XzA7CisJCQl1MzIgaXB2Nl90ZGlwMSA9IGVudHJ5LT5pcHY0X2RzbGl0ZS50dW5uZWxfZGlwdjZfMTsKKwkJCXUzMiBpcHY2X3RkaXAyID0gZW50cnktPmlwdjRfZHNsaXRlLnR1bm5lbF9kaXB2Nl8yOworCQkJdTMyIGlwdjZfdGRpcDMgPSBlbnRyeS0+aXB2NF9kc2xpdGUudHVubmVsX2RpcHY2XzM7CisKKwkJCSooKHUzMiAqKWhfc291cmNlKSA9IHN3YWIzMihlbnRyeS0+aXB2NF9kc2xpdGUuc21hY19oaSk7CisJCQkqKCh1MTYgKikmaF9zb3VyY2VbNF0pID0KKwkJCQlzd2FiMTYoZW50cnktPmlwdjRfZHNsaXRlLnNtYWNfbG8pOworCQkJKigodTMyICopaF9kZXN0KSA9IHN3YWIzMihlbnRyeS0+aXB2NF9kc2xpdGUuZG1hY19oaSk7CisJCQkqKCh1MTYgKikmaF9kZXN0WzRdKSA9CisJCQkJc3dhYjE2KGVudHJ5LT5pcHY0X2RzbGl0ZS5kbWFjX2xvKTsKKwkJCVBSSU5UX0NPVU5UKG0sIGFjY3QpOworCQkJc2VxX3ByaW50ZihtLAorCQkJCSAgICJhZGRyPTB4JXB8cHBlPSVkfGluZGV4PSVkfHN0YXRlPSVzfHR5cGU9JXN8U0lQPSVwSTQtPkRJUD0lcEk0fFRTSVA9JTA4eDolMDh4OiUwOHg6JTA4eC0+VERJUD0lMDh4OiUwOHg6JTA4eDolMDh4fCVwTT0+JXBNfGV0eXBlPTB4JTA0eHxpbmZvMT0weCV4fGluZm8yPTB4JXhcbiIsCisJCQkJICAgZW50cnksIHBwZV9pZCwgZWkoZW50cnksIGVuZCksCisJCQkJICAgZXMoZW50cnkpLCBwdChlbnRyeSksICZzYWRkciwKKwkJCQkgICAmZGFkZHIsIGlwdjZfdHNpcDAsIGlwdjZfdHNpcDEsIGlwdjZfdHNpcDIsCisJCQkJICAgaXB2Nl90c2lwMywgaXB2Nl90ZGlwMCwgaXB2Nl90ZGlwMSwgaXB2Nl90ZGlwMiwKKwkJCQkgICBpcHY2X3RkaXAzLCBoX3NvdXJjZSwgaF9kZXN0LAorCQkJCSAgIG50b2hzKGVudHJ5LT5pcHY2XzV0X3JvdXRlLmV0eXBlKSwKKwkJCQkgICBlbnRyeS0+aXB2Nl81dF9yb3V0ZS5pbmZvX2JsazEsCisJCQkJICAgZW50cnktPmlwdjZfNXRfcm91dGUuaW5mb19ibGsyKTsKKyNpZiBkZWZpbmVkKENPTkZJR19NRURJQVRFS19ORVRTWVNfVjIpCisJCX0gZWxzZSBpZiAoSVNfSVBWNF9NQVBFKGVudHJ5KSkgeworCQkJX19iZTMyIHNhZGRyID0gaHRvbmwoZW50cnktPmlwdjRfZHNsaXRlLnNpcCk7CisJCQlfX2JlMzIgZGFkZHIgPSBodG9ubChlbnRyeS0+aXB2NF9kc2xpdGUuZGlwKTsKKwkJCV9fYmUzMiBuc2FkZHIgPSBodG9ubChlbnRyeS0+aXB2NF9kc2xpdGUubmV3X3NpcCk7CisJCQlfX2JlMzIgbmRhZGRyID0gaHRvbmwoZW50cnktPmlwdjRfZHNsaXRlLm5ld19kaXApOworCQkJdTMyIGlwdjZfdHNpcDAgPSBlbnRyeS0+aXB2NF9kc2xpdGUudHVubmVsX3NpcHY2XzA7CisJCQl1MzIgaXB2Nl90c2lwMSA9IGVudHJ5LT5pcHY0X2RzbGl0ZS50dW5uZWxfc2lwdjZfMTsKKwkJCXUzMiBpcHY2X3RzaXAyID0gZW50cnktPmlwdjRfZHNsaXRlLnR1bm5lbF9zaXB2Nl8yOworCQkJdTMyIGlwdjZfdHNpcDMgPSBlbnRyeS0+aXB2NF9kc2xpdGUudHVubmVsX3NpcHY2XzM7CisJCQl1MzIgaXB2Nl90ZGlwMCA9IGVudHJ5LT5pcHY0X2RzbGl0ZS50dW5uZWxfZGlwdjZfMDsKKwkJCXUzMiBpcHY2X3RkaXAxID0gZW50cnktPmlwdjRfZHNsaXRlLnR1bm5lbF9kaXB2Nl8xOworCQkJdTMyIGlwdjZfdGRpcDIgPSBlbnRyeS0+aXB2NF9kc2xpdGUudHVubmVsX2RpcHY2XzI7CisJCQl1MzIgaXB2Nl90ZGlwMyA9IGVudHJ5LT5pcHY0X2RzbGl0ZS50dW5uZWxfZGlwdjZfMzsKKworCQkJKigodTMyICopaF9zb3VyY2UpID0gc3dhYjMyKGVudHJ5LT5pcHY0X2RzbGl0ZS5zbWFjX2hpKTsKKwkJCSooKHUxNiAqKSZoX3NvdXJjZVs0XSkgPQorCQkJCXN3YWIxNihlbnRyeS0+aXB2NF9kc2xpdGUuc21hY19sbyk7CisJCQkqKCh1MzIgKiloX2Rlc3QpID0gc3dhYjMyKGVudHJ5LT5pcHY0X2RzbGl0ZS5kbWFjX2hpKTsKKwkJCSooKHUxNiAqKSZoX2Rlc3RbNF0pID0KKwkJCQlzd2FiMTYoZW50cnktPmlwdjRfZHNsaXRlLmRtYWNfbG8pOworCQkJUFJJTlRfQ09VTlQobSwgYWNjdCk7CisJCQlzZXFfcHJpbnRmKG0sCisJCQkJICAgImFkZHI9MHglcHxwcGU9JWR8aW5kZXg9JWR8c3RhdGU9JXN8dHlwZT0lc3xTSVA9JXBJNDolZC0+RElQPSVwSTQ6JWR8TlNJUD0lcEk0OiVkLT5ORElQPSVwSTQ6JWR8VFNJUD0lMDh4OiUwOHg6JTA4eDolMDh4LT5URElQPSUwOHg6JTA4eDolMDh4OiUwOHh8JXBNPT4lcE18ZXR5cGU9MHglMDR4fGluZm8xPTB4JXh8aW5mbzI9MHgleFxuIiwKKwkJCQkgICBlbnRyeSwgcHBlX2lkLCBlaShlbnRyeSwgZW5kKSwKKwkJCQkgICBlcyhlbnRyeSksIHB0KGVudHJ5KSwKKwkJCQkgICAmc2FkZHIsIGVudHJ5LT5pcHY0X2RzbGl0ZS5zcG9ydCwKKwkJCQkgICAmZGFkZHIsIGVudHJ5LT5pcHY0X2RzbGl0ZS5kcG9ydCwKKwkJCQkgICAmbnNhZGRyLCBlbnRyeS0+aXB2NF9kc2xpdGUubmV3X3Nwb3J0LAorCQkJCSAgICZuZGFkZHIsIGVudHJ5LT5pcHY0X2RzbGl0ZS5uZXdfZHBvcnQsCisJCQkJICAgaXB2Nl90c2lwMCwgaXB2Nl90c2lwMSwgaXB2Nl90c2lwMiwKKwkJCQkgICBpcHY2X3RzaXAzLCBpcHY2X3RkaXAwLCBpcHY2X3RkaXAxLAorCQkJCSAgIGlwdjZfdGRpcDIsIGlwdjZfdGRpcDMsIGhfc291cmNlLCBoX2Rlc3QsCisJCQkJICAgbnRvaHMoZW50cnktPmlwdjZfNXRfcm91dGUuZXR5cGUpLAorCQkJCSAgIGVudHJ5LT5pcHY2XzV0X3JvdXRlLmluZm9fYmxrMSwKKwkJCQkgICBlbnRyeS0+aXB2Nl81dF9yb3V0ZS5pbmZvX2JsazIpOworI2VuZGlmCisJCX0gZWxzZQorCQkJc2VxX3ByaW50ZihtLCAiYWRkcj0weCVwfHBwZT0lZHxpbmRleD0lZCBzdGF0ZT0lc1xuIiwgZW50cnksIHBwZV9pZCwgZWkoZW50cnksIGVuZCksCisJCQkJICAgZXMoZW50cnkpKTsKKwkJZW50cnkrKzsKKwkJZW50cnlfaW5kZXgrKzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBobmF0X2RlYnVnX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwcml2YXRlKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IENGR19QUEVfTlVNOyBpKyspCisJCV9faG5hdF9kZWJ1Z19zaG93KG0sIHByaXZhdGUsIGkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaG5hdF9kZWJ1Z19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBobmF0X2RlYnVnX3Nob3csIGZpbGUtPnByaXZhdGVfZGF0YSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhuYXRfZGVidWdfZm9wcyA9IHsKKwkub3BlbiA9IGhuYXRfZGVidWdfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgaG5hdF93aG5hdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcHJpdmF0ZSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCisJZm9yIChpID0gMDsgaSA8IE1BWF9JRl9OVU07IGkrKykgeworCQlkZXYgPSBobmF0X3ByaXYtPndpZmlfaG9va19pZltpXTsKKwkJaWYgKGRldikKKwkJCXNlcV9wcmludGYobSwgIiVkOiVzXG4iLCBpLCBkZXYtPm5hbWUpOworCQllbHNlCisJCQljb250aW51ZTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBobmF0X3dobmF0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGhuYXRfd2huYXRfc2hvdywgZmlsZS0+cHJpdmF0ZV9kYXRhKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaG5hdF93aG5hdF9mb3BzID0geworCS5vcGVuID0gaG5hdF93aG5hdF9vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworaW50IGNwdV9yZWFzb25fcmVhZChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnByaXZhdGUpCit7CisJaW50IGk7CisKKwlwcl9pbmZvKCI9PT09PT09PT09PT0gQ1BVIFJFQVNPTiA9PT09PT09PT1cbiIpOworCXByX2luZm8oIigyKUlQdjQoSVB2NikgVFRMKGhvcCBsaW1pdCkgPSAldVxuIiwgZGJnX2NwdV9yZWFzb25fY250WzBdKTsKKwlwcl9pbmZvKCIoMylJcHY0KElQdjYpIGhhcyBvcHRpb24oZXh0ZW5zaW9uKSBoZWFkZXIgPSAldVxuIiwKKwkJZGJnX2NwdV9yZWFzb25fY250WzFdKTsKKwlwcl9pbmZvKCIoNylObyBmbG93IGlzIGFzc2lnbmVkID0gJXVcbiIsIGRiZ19jcHVfcmVhc29uX2NudFsyXSk7CisJcHJfaW5mbygiKDgpSVB2NCBITkFUIGRvZXNuJ3Qgc3VwcG9ydCBJUHY0IC93IGZyYWdtZW50ID0gJXVcbiIsCisJCWRiZ19jcHVfcmVhc29uX2NudFszXSk7CisJcHJfaW5mbygiKDkpSVB2NCBITkFQVC9EUy1MaXRlIGRvZXNuJ3Qgc3VwcG9ydCBJUHY0IC93IGZyYWdtZW50ID0gJXVcbiIsCisJCWRiZ19jcHVfcmVhc29uX2NudFs0XSk7CisJcHJfaW5mbygiKDEwKUlQdjQgSE5BUFQvRFMtTGl0ZSBjYW4ndCBmaW5kIFRDUC9VRFAgc3BvcnQvZHBvcnQgPSAldVxuIiwKKwkJZGJnX2NwdV9yZWFzb25fY250WzVdKTsKKwlwcl9pbmZvKCIoMTEpSVB2NiA1VC1yb3V0ZS82UkQgY2FuJ3QgZmluZCBUQ1AvVURQIHNwb3J0L2Rwb3J0ID0gJXVcbiIsCisJCWRiZ19jcHVfcmVhc29uX2NudFs2XSk7CisJcHJfaW5mbygiKDEyKUluZ3Jlc3MgcGFja2V0IGlzIFRDUCBmaW4vc3luL3JzdCA9ICV1XG4iLAorCQlkYmdfY3B1X3JlYXNvbl9jbnRbN10pOworCXByX2luZm8oIigxMylGT0UgVW4taGl0ID0gJXVcbiIsIGRiZ19jcHVfcmVhc29uX2NudFs4XSk7CisJcHJfaW5mbygiKDE0KUZPRSBIaXQgdW5iaW5kID0gJXVcbiIsIGRiZ19jcHVfcmVhc29uX2NudFs5XSk7CisJcHJfaW5mbygiKDE1KUZPRSBIaXQgdW5iaW5kICYgcmF0ZSByZWFjaCA9ICV1XG4iLAorCQlkYmdfY3B1X3JlYXNvbl9jbnRbMTBdKTsKKwlwcl9pbmZvKCIoMTYpSGl0IGJpbmQgUFBFIFRDUCBGSU4gZW50cnkgPSAldVxuIiwKKwkJZGJnX2NwdV9yZWFzb25fY250WzExXSk7CisJcHJfaW5mbygiKDE3KUhpdCBiaW5kIFBQRSBlbnRyeSBhbmQgVFRMKGhvcCBsaW1pdCkgPSAxIGFuZCBUVEwoaG90IGxpbWl0KSAtIDEgPSAldVxuIiwKKwkJZGJnX2NwdV9yZWFzb25fY250WzEyXSk7CisJcHJfaW5mbygiKDE4KUhpdCBiaW5kIGFuZCBWTEFOIHJlcGxhY2VtZW50IHZpb2xhdGlvbiA9ICV1XG4iLAorCQlkYmdfY3B1X3JlYXNvbl9jbnRbMTNdKTsKKwlwcl9pbmZvKCIoMTkpSGl0IGJpbmQgYW5kIGtlZXAgYWxpdmUgd2l0aCB1bmljYXN0IG9sZC1oZWFkZXIgcGFja2V0ID0gJXVcbiIsCisJCWRiZ19jcHVfcmVhc29uX2NudFsxNF0pOworCXByX2luZm8oIigyMClIaXQgYmluZCBhbmQga2VlcCBhbGl2ZSB3aXRoIG11bHRpY2FzdCBuZXctaGVhZGVyIHBhY2tldCA9ICV1XG4iLAorCQlkYmdfY3B1X3JlYXNvbl9jbnRbMTVdKTsKKwlwcl9pbmZvKCIoMjEpSGl0IGJpbmQgYW5kIGtlZXAgYWxpdmUgd2l0aCBkdXBsaWNhdGUgb2xkLWhlYWRlciBwYWNrZXQgPSAldVxuIiwKKwkJZGJnX2NwdV9yZWFzb25fY250WzE2XSk7CisJcHJfaW5mbygiKDIyKUZPRSBIaXQgYmluZCAmIGZvcmNlIHRvIENQVSA9ICV1XG4iLAorCQlkYmdfY3B1X3JlYXNvbl9jbnRbMTddKTsKKwlwcl9pbmZvKCIoMjgpSGl0IGJpbmQgYW5kIGV4Y2VlZCBNVFUgPSV1XG4iLCBkYmdfY3B1X3JlYXNvbl9jbnRbMThdKTsKKwlwcl9pbmZvKCIoMjQpSGl0IGJpbmQgbXVsdGljYXN0IHBhY2tldCB0byBDUFUgPSAldVxuIiwKKwkJZGJnX2NwdV9yZWFzb25fY250WzE5XSk7CisJcHJfaW5mbygiKDI1KUhpdCBiaW5kIG11bHRpY2FzdCBwYWNrZXQgdG8gR01BQyAmIENQVSA9ICV1XG4iLAorCQlkYmdfY3B1X3JlYXNvbl9jbnRbMjBdKTsKKwlwcl9pbmZvKCIoMjYpUHJlIGJpbmQgPSAldVxuIiwgZGJnX2NwdV9yZWFzb25fY250WzIxXSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjI7IGkrKykKKwkJZGJnX2NwdV9yZWFzb25fY250W2ldID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjcHVfcmVhc29uX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGNwdV9yZWFzb25fcmVhZCwgZmlsZS0+cHJpdmF0ZV9kYXRhKTsKK30KKworc3NpemVfdCBjcHVfcmVhc29uX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpkYXRhKQoreworCWNoYXIgYnVmWzMyXTsKKwljaGFyICpwX2J1ZjsKKwl1MzIgbGVuID0gY291bnQ7CisJbG9uZyBhcmcwID0gMCwgYXJnMSA9IDA7CisJY2hhciAqcF90b2tlbiA9IE5VTEw7CisJY2hhciAqcF9kZWxpbWl0ZXIgPSAiIFx0IjsKKwlpbnQgcmV0OworCisJaWYgKGxlbiA+PSBzaXplb2YoYnVmKSkgeworCQlwcl9pbmZvKCJpbnB1dCBoYW5kbGluZyBmYWlsIVxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCBidWZmZXIsIGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCisJYnVmW2xlbl0gPSAnXDAnOworCisJcF9idWYgPSBidWY7CisJcF90b2tlbiA9IHN0cnNlcCgmcF9idWYsIHBfZGVsaW1pdGVyKTsKKwlpZiAoIXBfdG9rZW4pCisJCWFyZzAgPSAwOworCWVsc2UKKwkJcmV0ID0ga3N0cnRvbChwX3Rva2VuLCAxMCwgJmFyZzApOworCisJc3dpdGNoIChhcmcwKSB7CisJY2FzZSAwOgorCWNhc2UgMToKKwkJcF90b2tlbiA9IHN0cnNlcCgmcF9idWYsIHBfZGVsaW1pdGVyKTsKKwkJaWYgKCFwX3Rva2VuKQorCQkJYXJnMSA9IDA7CisJCWVsc2UKKwkJCXJldCA9IGtzdHJ0b2wocF90b2tlbiwgMTAsICZhcmcxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfaW5mbygibm8gaGFuZGxlciBkZWZpbmVkIGZvciBjb21tYW5kIGlkKDB4JTA4bHgpXG5cciIsIGFyZzApOworCQlhcmcwID0gMDsKKwkJYXJnMSA9IDA7CisJCWJyZWFrOworCX0KKworCSgqaG5hdF9zZXRfZnVuY1thcmcwXSkoYXJnMSk7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjcHVfcmVhc29uX2ZvcHMgPSB7CisJLm9wZW4gPSBjcHVfcmVhc29uX29wZW4sCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS53cml0ZSA9IGNwdV9yZWFzb25fd3JpdGUsCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3ZvaWQgZGJnX2R1bXBfZW50cnkoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZm9lX2VudHJ5ICplbnRyeSwKKwkJICAgIHVpbnQzMl90IGluZGV4KQoreworCV9fYmUzMiBzYWRkciwgZGFkZHIsIG5zYWRkciwgbmRhZGRyOworCisJc2FkZHIgPSBodG9ubChlbnRyeS0+aXB2NF9obmFwdC5zaXApOworCWRhZGRyID0gaHRvbmwoZW50cnktPmlwdjRfaG5hcHQuZGlwKTsKKwluc2FkZHIgPSBodG9ubChlbnRyeS0+aXB2NF9obmFwdC5uZXdfc2lwKTsKKwluZGFkZHIgPSBodG9ubChlbnRyeS0+aXB2NF9obmFwdC5uZXdfZGlwKTsKKworCWlmIChJU19JUFY0X0hOQVBUKGVudHJ5KSkgeworCQlzZXFfcHJpbnRmKG0sCisJCQkgICAiTkFQVCglZCk6ICVwSTQ6JWQtPiVwSTQ6JWQgPT4gJXBJNDolZC0+JXBJNDolZFxuIiwKKwkJCSAgIGluZGV4LCAmc2FkZHIsIGVudHJ5LT5pcHY0X2huYXB0LnNwb3J0LCAmZGFkZHIsCisJCQkgICBlbnRyeS0+aXB2NF9obmFwdC5kcG9ydCwgJm5zYWRkciwKKwkJCSAgIGVudHJ5LT5pcHY0X2huYXB0Lm5ld19zcG9ydCwgJm5kYWRkciwKKwkJCSAgIGVudHJ5LT5pcHY0X2huYXB0Lm5ld19kcG9ydCk7CisJfSBlbHNlIGlmIChJU19JUFY0X0hOQVQoZW50cnkpKSB7CisJCXNlcV9wcmludGYobSwgIk5BVCglZCk6ICVwSTQtPiVwSTQgPT4gJXBJNC0+JXBJNFxuIiwKKwkJCSAgIGluZGV4LCAmc2FkZHIsICZkYWRkciwgJm5zYWRkciwgJm5kYWRkcik7CisJfQorCisJaWYgKElTX0lQVjRfRFNMSVRFKGVudHJ5KSkgeworCQlzZXFfcHJpbnRmKG0sCisJCQkgICAiSVB2NCBEcy1MaXRlKCVkKTogJXBJNDolZC0+JXBJNDolZCA9PiAlMDhYOiUwOFg6JTA4WDolMDhYLT4lMDhYOiUwOFg6JTA4WDolMDhYXG4iLAorCQkJICAgaW5kZXgsICZzYWRkciwgZW50cnktPmlwdjRfZHNsaXRlLnNwb3J0LCAmZGFkZHIsCisJCQkgICBlbnRyeS0+aXB2NF9kc2xpdGUuZHBvcnQsCisJCQkgICBlbnRyeS0+aXB2NF9kc2xpdGUudHVubmVsX3NpcHY2XzAsCisJCQkgICBlbnRyeS0+aXB2NF9kc2xpdGUudHVubmVsX3NpcHY2XzEsCisJCQkgICBlbnRyeS0+aXB2NF9kc2xpdGUudHVubmVsX3NpcHY2XzIsCisJCQkgICBlbnRyeS0+aXB2NF9kc2xpdGUudHVubmVsX3NpcHY2XzMsCisJCQkgICBlbnRyeS0+aXB2NF9kc2xpdGUudHVubmVsX2RpcHY2XzAsCisJCQkgICBlbnRyeS0+aXB2NF9kc2xpdGUudHVubmVsX2RpcHY2XzEsCisJCQkgICBlbnRyeS0+aXB2NF9kc2xpdGUudHVubmVsX2RpcHY2XzIsCisJCQkgICBlbnRyeS0+aXB2NF9kc2xpdGUudHVubmVsX2RpcHY2XzMpOworI2lmIGRlZmluZWQoQ09ORklHX01FRElBVEVLX05FVFNZU19WMikKKwl9IGVsc2UgaWYgKElTX0lQVjRfTUFQRShlbnRyeSkpIHsKKwkJbnNhZGRyID0gaHRvbmwoZW50cnktPmlwdjRfZHNsaXRlLm5ld19zaXApOworCQluZGFkZHIgPSBodG9ubChlbnRyeS0+aXB2NF9kc2xpdGUubmV3X2RpcCk7CisKKwkJc2VxX3ByaW50ZihtLAorCQkJICAgIklQdjQgTUFQLUUoJWQpOiAlcEk0OiVkLT4lcEk0OiVkID0+ICVwSTQ6JWQtPiVwSTQ6JWQgfCBUdW5uZWw9JTA4WDolMDhYOiUwOFg6JTA4WC0+JTA4WDolMDhYOiUwOFg6JTA4WFxuIiwKKwkJCSAgIGluZGV4LCAmc2FkZHIsIGVudHJ5LT5pcHY0X2RzbGl0ZS5zcG9ydCwKKwkJCSAgICZkYWRkciwgZW50cnktPmlwdjRfZHNsaXRlLmRwb3J0LAorCQkJICAgJm5zYWRkciwgZW50cnktPmlwdjRfZHNsaXRlLm5ld19zcG9ydCwKKwkJCSAgICZuZGFkZHIsIGVudHJ5LT5pcHY0X2RzbGl0ZS5uZXdfZHBvcnQsCisJCQkgICBlbnRyeS0+aXB2NF9kc2xpdGUudHVubmVsX3NpcHY2XzAsCisJCQkgICBlbnRyeS0+aXB2NF9kc2xpdGUudHVubmVsX3NpcHY2XzEsCisJCQkgICBlbnRyeS0+aXB2NF9kc2xpdGUudHVubmVsX3NpcHY2XzIsCisJCQkgICBlbnRyeS0+aXB2NF9kc2xpdGUudHVubmVsX3NpcHY2XzMsCisJCQkgICBlbnRyeS0+aXB2NF9kc2xpdGUudHVubmVsX2RpcHY2XzAsCisJCQkgICBlbnRyeS0+aXB2NF9kc2xpdGUudHVubmVsX2RpcHY2XzEsCisJCQkgICBlbnRyeS0+aXB2NF9kc2xpdGUudHVubmVsX2RpcHY2XzIsCisJCQkgICBlbnRyeS0+aXB2NF9kc2xpdGUudHVubmVsX2RpcHY2XzMpOworI2VuZGlmCisJfSBlbHNlIGlmIChJU19JUFY2XzNUX1JPVVRFKGVudHJ5KSkgeworCQlzZXFfcHJpbnRmKG0sCisJCQkgICAiSVB2Nl8zVCglZCk6ICUwOFg6JTA4WDolMDhYOiUwOFggPT4gJTA4WDolMDhYOiUwOFg6JTA4WCAoUHJvdD0lZClcbiIsCisJCQkgICBpbmRleCwgZW50cnktPmlwdjZfM3Rfcm91dGUuaXB2Nl9zaXAwLAorCQkJICAgZW50cnktPmlwdjZfM3Rfcm91dGUuaXB2Nl9zaXAxLAorCQkJICAgZW50cnktPmlwdjZfM3Rfcm91dGUuaXB2Nl9zaXAyLAorCQkJICAgZW50cnktPmlwdjZfM3Rfcm91dGUuaXB2Nl9zaXAzLAorCQkJICAgZW50cnktPmlwdjZfM3Rfcm91dGUuaXB2Nl9kaXAwLAorCQkJICAgZW50cnktPmlwdjZfM3Rfcm91dGUuaXB2Nl9kaXAxLAorCQkJICAgZW50cnktPmlwdjZfM3Rfcm91dGUuaXB2Nl9kaXAyLAorCQkJICAgZW50cnktPmlwdjZfM3Rfcm91dGUuaXB2Nl9kaXAzLAorCQkJICAgZW50cnktPmlwdjZfM3Rfcm91dGUucHJvdCk7CisJfSBlbHNlIGlmIChJU19JUFY2XzVUX1JPVVRFKGVudHJ5KSkgeworCQlzZXFfcHJpbnRmKG0sCisJCQkgICAiSVB2Nl81VCglZCk6ICUwOFg6JTA4WDolMDhYOiUwOFg6JWQgPT4gJTA4WDolMDhYOiUwOFg6JTA4WDolZFxuIiwKKwkJCSAgIGluZGV4LCBlbnRyeS0+aXB2Nl81dF9yb3V0ZS5pcHY2X3NpcDAsCisJCQkgICBlbnRyeS0+aXB2Nl81dF9yb3V0ZS5pcHY2X3NpcDEsCisJCQkgICBlbnRyeS0+aXB2Nl81dF9yb3V0ZS5pcHY2X3NpcDIsCisJCQkgICBlbnRyeS0+aXB2Nl81dF9yb3V0ZS5pcHY2X3NpcDMsCisJCQkgICBlbnRyeS0+aXB2Nl81dF9yb3V0ZS5zcG9ydCwKKwkJCSAgIGVudHJ5LT5pcHY2XzV0X3JvdXRlLmlwdjZfZGlwMCwKKwkJCSAgIGVudHJ5LT5pcHY2XzV0X3JvdXRlLmlwdjZfZGlwMSwKKwkJCSAgIGVudHJ5LT5pcHY2XzV0X3JvdXRlLmlwdjZfZGlwMiwKKwkJCSAgIGVudHJ5LT5pcHY2XzV0X3JvdXRlLmlwdjZfZGlwMywKKwkJCSAgIGVudHJ5LT5pcHY2XzV0X3JvdXRlLmRwb3J0KTsKKwl9IGVsc2UgaWYgKElTX0lQVjZfNlJEKGVudHJ5KSkgeworCQlzZXFfcHJpbnRmKG0sCisJCQkgICAiSVB2Nl82UkQoJWQpOiAlMDhYOiUwOFg6JTA4WDolMDhYOiVkID0+ICUwOFg6JTA4WDolMDhYOiUwOFg6JWRcbiIsCisJCQkgICBpbmRleCwgZW50cnktPmlwdjZfNnJkLmlwdjZfc2lwMCwKKwkJCSAgIGVudHJ5LT5pcHY2XzZyZC5pcHY2X3NpcDEsIGVudHJ5LT5pcHY2XzZyZC5pcHY2X3NpcDIsCisJCQkgICBlbnRyeS0+aXB2Nl82cmQuaXB2Nl9zaXAzLCBlbnRyeS0+aXB2Nl82cmQuc3BvcnQsCisJCQkgICBlbnRyeS0+aXB2Nl82cmQuaXB2Nl9kaXAwLCBlbnRyeS0+aXB2Nl82cmQuaXB2Nl9kaXAxLAorCQkJICAgZW50cnktPmlwdjZfNnJkLmlwdjZfZGlwMiwgZW50cnktPmlwdjZfNnJkLmlwdjZfZGlwMywKKwkJCSAgIGVudHJ5LT5pcHY2XzZyZC5kcG9ydCk7CisJfQorfQorCitpbnQgX19obmF0X2VudHJ5X3JlYWQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwcml2YXRlLCB1MzIgcHBlX2lkKQoreworCXN0cnVjdCBtdGtfaG5hdCAqaCA9IGhuYXRfcHJpdjsKKwlzdHJ1Y3QgZm9lX2VudHJ5ICplbnRyeSwgKmVuZDsKKwlpbnQgaGFzaF9pbmRleDsKKwlpbnQgY250OworCisJaWYgKHBwZV9pZCA+PSBDRkdfUFBFX05VTSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwloYXNoX2luZGV4ID0gMDsKKwljbnQgPSAwOworCWVudHJ5ID0gaC0+Zm9lX3RhYmxlX2NwdVtwcGVfaWRdOworCWVuZCA9IGgtPmZvZV90YWJsZV9jcHVbcHBlX2lkXSArIGhuYXRfcHJpdi0+Zm9lX2V0cnlfbnVtOworCisJc2VxX3ByaW50ZihtLCAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CisJc2VxX3ByaW50ZihtLCAiUFBFX0lEID0gJWRcbiIsIHBwZV9pZCk7CisKKwl3aGlsZSAoZW50cnkgPCBlbmQpIHsKKwkJaWYgKGVudHJ5LT5iZmliMS5zdGF0ZSA9PSBkYmdfZW50cnlfc3RhdGUpIHsKKwkJCWNudCsrOworCQkJZGJnX2R1bXBfZW50cnkobSwgZW50cnksIGhhc2hfaW5kZXgpOworCQl9CisJCWhhc2hfaW5kZXgrKzsKKwkJZW50cnkrKzsKKwl9CisKKwlzZXFfcHJpbnRmKG0sICJUb3RhbCBTdGF0ZSA9ICVzIGNudCA9ICVkXG4iLAorCQkgICBkYmdfZW50cnlfc3RhdGUgPT0gMCA/CisJCSAgICJJbnZhbGlkIiA6IGRiZ19lbnRyeV9zdGF0ZSA9PSAxID8KKwkJICAgIlVuYmluZCIgOiBkYmdfZW50cnlfc3RhdGUgPT0gMiA/CisJCSAgICJCSU5EIiA6IGRiZ19lbnRyeV9zdGF0ZSA9PSAzID8KKwkJICAgIkZJTiIgOiAiVW5rbm93biIsIGNudCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGhuYXRfZW50cnlfcmVhZChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnByaXZhdGUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQ0ZHX1BQRV9OVU07IGkrKykKKwkJX19obmF0X2VudHJ5X3JlYWQobSwgcHJpdmF0ZSwgaSk7CisKKwlyZXR1cm4gMDsKK30KKworc3NpemVfdCBobmF0X2VudHJ5X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpkYXRhKQoreworCWNoYXIgYnVmWzMyXTsKKwljaGFyICpwX2J1ZjsKKwl1MzIgbGVuID0gY291bnQ7CisJbG9uZyBhcmcwID0gMCwgYXJnMSA9IDA7CisJY2hhciAqcF90b2tlbiA9IE5VTEw7CisJY2hhciAqcF9kZWxpbWl0ZXIgPSAiIFx0IjsKKwlpbnQgcmV0OworCisJaWYgKGxlbiA+PSBzaXplb2YoYnVmKSkgeworCQlwcl9pbmZvKCJpbnB1dCBoYW5kbGluZyBmYWlsIVxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCBidWZmZXIsIGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCisJYnVmW2xlbl0gPSAnXDAnOworCisJcF9idWYgPSBidWY7CisJcF90b2tlbiA9IHN0cnNlcCgmcF9idWYsIHBfZGVsaW1pdGVyKTsKKwlpZiAoIXBfdG9rZW4pCisJCWFyZzAgPSAwOworCWVsc2UKKwkJcmV0ID0ga3N0cnRvbChwX3Rva2VuLCAxMCwgJmFyZzApOworCisJc3dpdGNoIChhcmcwKSB7CisJY2FzZSAwOgorCWNhc2UgMToKKwljYXNlIDI6CisJY2FzZSAzOgorCWNhc2UgNDoKKwljYXNlIDU6CisJCXBfdG9rZW4gPSBzdHJzZXAoJnBfYnVmLCBwX2RlbGltaXRlcik7CisJCWlmICghcF90b2tlbikKKwkJCWFyZzEgPSAwOworCQllbHNlCisJCQlyZXQgPSBrc3RydG9sKHBfdG9rZW4sIDEwLCAmYXJnMSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2luZm8oIm5vIGhhbmRsZXIgZGVmaW5lZCBmb3IgY29tbWFuZCBpZCgweCUwOGx4KVxuXHIiLCBhcmcwKTsKKwkJYXJnMCA9IDA7CisJCWFyZzEgPSAwOworCQlicmVhazsKKwl9CisKKwkoKmVudHJ5X3NldF9mdW5jW2FyZzBdKShhcmcxKTsKKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbnQgaG5hdF9lbnRyeV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBobmF0X2VudHJ5X3JlYWQsIGZpbGUtPnByaXZhdGVfZGF0YSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhuYXRfZW50cnlfZm9wcyA9IHsKKwkub3BlbiA9IGhuYXRfZW50cnlfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLndyaXRlID0gaG5hdF9lbnRyeV93cml0ZSwKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworaW50IF9faG5hdF9zZXR0aW5nX3JlYWQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwcml2YXRlLCB1MzIgcHBlX2lkKQoreworCXN0cnVjdCBtdGtfaG5hdCAqaCA9IGhuYXRfcHJpdjsKKwlpbnQgaTsKKwlpbnQgY3JfbWF4OworCisJaWYgKHBwZV9pZCA+PSBDRkdfUFBFX05VTSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljcl9tYXggPSAzMTkgKiA0OworCWZvciAoaSA9IDA7IGkgPCBjcl9tYXg7IGkgPSBpICsgMHgxMCkgeworCQlwcl9pbmZvKCIweCVwIDogMHglMDh4IDB4JTA4eCAweCUwOHggMHglMDh4XG4iLAorCQkJKHZvaWQgKiloLT5mb2VfdGFibGVfZGV2W3BwZV9pZF0gKyBpLAorCQkJcmVhZGwoaC0+cHBlX2Jhc2VbcHBlX2lkXSArIGkpLAorCQkJcmVhZGwoaC0+cHBlX2Jhc2VbcHBlX2lkXSArIGkgKyA0KSwKKwkJCXJlYWRsKGgtPnBwZV9iYXNlW3BwZV9pZF0gKyBpICsgOCksCisJCQlyZWFkbChoLT5wcGVfYmFzZVtwcGVfaWRdICsgaSArIDB4YykpOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgaG5hdF9zZXR0aW5nX3JlYWQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwcml2YXRlKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IENGR19QUEVfTlVNOyBpKyspCisJCV9faG5hdF9zZXR0aW5nX3JlYWQobSwgcHJpdmF0ZSwgaSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBobmF0X3NldHRpbmdfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgaG5hdF9zZXR0aW5nX3JlYWQsIGZpbGUtPnByaXZhdGVfZGF0YSk7Cit9CisKK3NzaXplX3QgaG5hdF9zZXR0aW5nX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmRhdGEpCit7CisJY2hhciBidWZbMzJdOworCWNoYXIgKnBfYnVmOworCXUzMiBsZW4gPSBjb3VudDsKKwlsb25nIGFyZzAgPSAwLCBhcmcxID0gMDsKKwljaGFyICpwX3Rva2VuID0gTlVMTDsKKwljaGFyICpwX2RlbGltaXRlciA9ICIgXHQiOworCWludCByZXQ7CisKKwlpZiAobGVuID49IHNpemVvZihidWYpKSB7CisJCXByX2luZm8oImlucHV0IGhhbmRsaW5nIGZhaWwhXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIGJ1ZmZlciwgbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlidWZbbGVuXSA9ICdcMCc7CisKKwlwX2J1ZiA9IGJ1ZjsKKwlwX3Rva2VuID0gc3Ryc2VwKCZwX2J1ZiwgcF9kZWxpbWl0ZXIpOworCWlmICghcF90b2tlbikKKwkJYXJnMCA9IDA7CisJZWxzZQorCQlyZXQgPSBrc3RydG9sKHBfdG9rZW4sIDEwLCAmYXJnMCk7CisKKwlzd2l0Y2ggKGFyZzApIHsKKwljYXNlIDA6CisJY2FzZSAxOgorCWNhc2UgMjoKKwljYXNlIDM6CisJY2FzZSA0OgorCWNhc2UgNToKKwljYXNlIDY6CisJY2FzZSA3OgorCQlwX3Rva2VuID0gc3Ryc2VwKCZwX2J1ZiwgcF9kZWxpbWl0ZXIpOworCQlpZiAoIXBfdG9rZW4pCisJCQlhcmcxID0gMDsKKwkJZWxzZQorCQkJcmV0ID0ga3N0cnRvbChwX3Rva2VuLCAxMCwgJmFyZzEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9pbmZvKCJubyBoYW5kbGVyIGRlZmluZWQgZm9yIGNvbW1hbmQgaWQoMHglMDhseClcblxyIiwgYXJnMCk7CisJCWFyZzAgPSAwOworCQlhcmcxID0gMDsKKwkJYnJlYWs7CisJfQorCisJKCpjcl9zZXRfZnVuY1thcmcwXSkoYXJnMSk7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBobmF0X3NldHRpbmdfZm9wcyA9IHsKKwkub3BlbiA9IGhuYXRfc2V0dGluZ19vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkud3JpdGUgPSBobmF0X3NldHRpbmdfd3JpdGUsCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK2ludCBfX21jYXN0X3RhYmxlX2R1bXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwcml2YXRlLCB1MzIgcHBlX2lkKQoreworCXN0cnVjdCBtdGtfaG5hdCAqaCA9IGhuYXRfcHJpdjsKKwlzdHJ1Y3QgcHBlX21jYXN0X2ggbWNhc3RfaDsKKwlzdHJ1Y3QgcHBlX21jYXN0X2wgbWNhc3RfbDsKKwl1OCBpLCBtYXg7CisJdm9pZCBfX2lvbWVtICpyZWc7CisKKwlpZiAocHBlX2lkID49IENGR19QUEVfTlVNKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghaC0+cG1jYXN0KQorCQlyZXR1cm4gMDsKKworCW1heCA9IGgtPnBtY2FzdC0+bWF4X2VudHJ5OworCXByX2luZm8oIj09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOworCXByX2luZm8oIlBQRV9JRCA9ICVkXG4iLCBwcGVfaWQpOworCXByX2luZm8oIk1BQyB8IFZJRCB8IFBvcnRNYXNrIHwgUW9zUG9ydE1hc2tcbiIpOworCWZvciAoaSA9IDA7IGkgPCBtYXg7IGkrKykgeworCQlpZiAoaSA8IDB4MTApIHsKKwkJCXJlZyA9IGgtPnBwZV9iYXNlW3BwZV9pZF0gKyBQUEVfTUNBU1RfSF8wICsgaSAqIDg7CisJCQltY2FzdF9oLnUudmFsdWUgPSByZWFkbChyZWcpOworCQkJcmVnID0gaC0+cHBlX2Jhc2VbcHBlX2lkXSArIFBQRV9NQ0FTVF9MXzAgKyBpICogODsKKwkJCW1jYXN0X2wuYWRkciA9IHJlYWRsKHJlZyk7CisJCX0gZWxzZSB7CisJCQlyZWcgPSBoLT5mZV9iYXNlICsgUFBFX01DQVNUX0hfMTAgKyAoaSAtIDB4MTApICogODsKKwkJCW1jYXN0X2gudS52YWx1ZSA9IHJlYWRsKHJlZyk7CisJCQlyZWcgPSBoLT5mZV9iYXNlICsgUFBFX01DQVNUX0xfMTAgKyAoaSAtIDB4MTApICogODsKKwkJCW1jYXN0X2wuYWRkciA9IHJlYWRsKHJlZyk7CisJCX0KKwkJcHJfaW5mbygiJTA4eCAlZCAlYyVjJWMlYyAlYyVjJWMlYyAoUUlEPSVkLCBtY19tcHJlX3NlbD0lZClcbiIsCisJCQltY2FzdF9sLmFkZHIsCisJCQltY2FzdF9oLnUuaW5mby5tY192aWQsCisJCQkobWNhc3RfaC51LmluZm8ubWNfcHhfZW4gJiAweDA4KSA/ICcxJyA6ICctJywKKwkJCShtY2FzdF9oLnUuaW5mby5tY19weF9lbiAmIDB4MDQpID8gJzEnIDogJy0nLAorCQkJKG1jYXN0X2gudS5pbmZvLm1jX3B4X2VuICYgMHgwMikgPyAnMScgOiAnLScsCisJCQkobWNhc3RfaC51LmluZm8ubWNfcHhfZW4gJiAweDAxKSA/ICcxJyA6ICctJywKKwkJCShtY2FzdF9oLnUuaW5mby5tY19weF9xb3NfZW4gJiAweDA4KSA/ICcxJyA6ICctJywKKwkJCShtY2FzdF9oLnUuaW5mby5tY19weF9xb3NfZW4gJiAweDA0KSA/ICcxJyA6ICctJywKKwkJCShtY2FzdF9oLnUuaW5mby5tY19weF9xb3NfZW4gJiAweDAyKSA/ICcxJyA6ICctJywKKwkJCShtY2FzdF9oLnUuaW5mby5tY19weF9xb3NfZW4gJiAweDAxKSA/ICcxJyA6ICctJywKKwkJCW1jYXN0X2gudS5pbmZvLm1jX3Fvc19xaWQgKworCQkJKChtY2FzdF9oLnUuaW5mby5tY19xb3NfcWlkNTQpIDw8IDQpLAorCQkJbWNhc3RfaC51LmluZm8ubWNfbXByZV9zZWwpOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgbWNhc3RfdGFibGVfZHVtcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnByaXZhdGUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQ0ZHX1BQRV9OVU07IGkrKykKKwkJX19tY2FzdF90YWJsZV9kdW1wKG0sIHByaXZhdGUsIGkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWNhc3RfdGFibGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgbWNhc3RfdGFibGVfZHVtcCwgZmlsZS0+cHJpdmF0ZV9kYXRhKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaG5hdF9tY2FzdF9mb3BzID0geworCS5vcGVuID0gbWNhc3RfdGFibGVfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgaG5hdF9leHRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnByaXZhdGUpCit7CisJaW50IGk7CisJc3RydWN0IGV4dGRldl9lbnRyeSAqZXh0X2VudHJ5OworCisJZm9yIChpID0gMDsgaSA8IE1BWF9FWFRfREVWUyAmJiBobmF0X3ByaXYtPmV4dF9pZltpXTsgaSsrKSB7CisJCWV4dF9lbnRyeSA9IGhuYXRfcHJpdi0+ZXh0X2lmW2ldOworCQlpZiAoZXh0X2VudHJ5LT5kZXYpCisJCQlzZXFfcHJpbnRmKG0sICJleHQgZGV2aWNlcyBbJWRdID0gJXMgIChkZXY9JXAsIGlmaW5kZXg9JWQpXG4iLAorCQkJCSAgIGksIGV4dF9lbnRyeS0+bmFtZSwgZXh0X2VudHJ5LT5kZXYsCisJCQkJICAgZXh0X2VudHJ5LT5kZXYtPmlmaW5kZXgpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhuYXRfZXh0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGhuYXRfZXh0X3Nob3csIGZpbGUtPnByaXZhdGVfZGF0YSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhuYXRfZXh0X2ZvcHMgPSB7CisJLm9wZW4gPSBobmF0X2V4dF9vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIHNzaXplX3QgaG5hdF9zY2hlZF9zaG93KHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJbG9uZyBpZCA9IChsb25nKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbXRrX2huYXQgKmggPSBobmF0X3ByaXY7CisJdTMyIHFkbWFfdHhfc2NoOworCWludCBlbmFibGU7CisJaW50IHNjaGVkdWxpbmc7CisJaW50IG1heF9yYXRlOworCWNoYXIgKmJ1ZjsKKwl1bnNpZ25lZCBpbnQgbGVuID0gMCwgYnVmX2xlbiA9IDE1MDA7CisJc3NpemVfdCByZXRfY250OworCWludCBzY2hlZHVsZXIsIGk7CisJdTMyIHNjaF9yZWc7CisKKwlidWYgPSBremFsbG9jKGJ1Zl9sZW4sIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChobmF0X3ByaXYtPmRhdGEtPm51bV9vZl9zY2ggPT0gNCkKKwkJcWRtYV90eF9zY2ggPSByZWFkbChoLT5mZV9iYXNlICsgUURNQV9UWF80U0NIX0JBU0UoaWQpKTsKKwllbHNlCisJCXFkbWFfdHhfc2NoID0gcmVhZGwoaC0+ZmVfYmFzZSArIFFETUFfVFhfMlNDSF9CQVNFKTsKKworCWlmIChpZCAmIDB4MSkKKwkJcWRtYV90eF9zY2ggPj49IDE2OworCXFkbWFfdHhfc2NoICY9IDB4ZmZmZjsKKwllbmFibGUgPSAhIShxZG1hX3R4X3NjaCAmIEJJVCgxMSkpOworCXNjaGVkdWxpbmcgPSAhIShxZG1hX3R4X3NjaCAmIEJJVCgxNSkpOworCW1heF9yYXRlID0gKChxZG1hX3R4X3NjaCA+PiA0KSAmIDB4N2YpOworCXFkbWFfdHhfc2NoICY9IDB4ZjsKKwl3aGlsZSAocWRtYV90eF9zY2gtLSkKKwkJbWF4X3JhdGUgKj0gMTA7CisKKwlsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgYnVmX2xlbiAtIGxlbiwKKwkJCSAiRU5cdFNjaGVkdWxpbmdcdE1BWFx0UXVldWUjXG4lZFx0JXMlMTZkXHQiLCBlbmFibGUsCisJCQkgKHNjaGVkdWxpbmcgPT0gMSkgPyAiV1JSIiA6ICJTUCIsIG1heF9yYXRlKTsKKworCWZvciAoaSA9IDA7IGkgPCBNVEtfUURNQV9UWF9OVU07IGkrKykgeworCQljcl9zZXRfZmllbGQoaC0+ZmVfYmFzZSArIFFETUFfUEFHRSwgUVRYX0NGR19QQUdFLAorCQkJICAgICAoaSAvIE5VTV9PRl9RX1BFUl9QQUdFKSk7CisJCXNjaF9yZWcgPSByZWFkbChoLT5mZV9iYXNlICsgUVRYX1NDSChpICUgTlVNX09GX1FfUEVSX1BBR0UpKTsKKwkJaWYgKGhuYXRfcHJpdi0+ZGF0YS0+bnVtX29mX3NjaCA9PSA0KQorCQkJc2NoZWR1bGVyID0gKHNjaF9yZWcgPj4gMzApICYgMHgzOworCQllbHNlCisJCQlzY2hlZHVsZXIgPSAhIShzY2hfcmVnICYgQklUKDMxKSk7CisJCWlmIChpZCA9PSBzY2hlZHVsZXIpCisJCQlsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgYnVmX2xlbiAtIGxlbiwgIiVkICAiLCBpKTsKKwl9CisKKwlsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgYnVmX2xlbiAtIGxlbiwgIlxuIik7CisJaWYgKGxlbiA+IGJ1Zl9sZW4pCisJCWxlbiA9IGJ1Zl9sZW47CisKKwlyZXRfY250ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7CisKKwlrZnJlZShidWYpOworCXJldHVybiByZXRfY250OworfQorCitzdGF0aWMgc3NpemVfdCBobmF0X3NjaGVkX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCXNpemVfdCBsZW5ndGgsIGxvZmZfdCAqb2Zmc2V0KQoreworCWxvbmcgaWQgPSAobG9uZylmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IG10a19obmF0ICpoID0gaG5hdF9wcml2OworCWNoYXIgbGluZVs2NF0gPSB7MH07CisJaW50IGVuYWJsZSwgcmF0ZSwgZXhwID0gMCwgc2hpZnQgPSAwOworCWNoYXIgc2NoZWR1bGluZ1szMl07CisJc2l6ZV90IHNpemU7CisJdTMyIHFkbWFfdHhfc2NoOworCXUzMiB2YWwgPSAwOworCisJaWYgKGxlbmd0aCA+PSBzaXplb2YobGluZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKGxpbmUsIGJ1ZiwgbGVuZ3RoKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoc3NjYW5mKGxpbmUsICIlZCAlcyAlZCIsICZlbmFibGUsIHNjaGVkdWxpbmcsICZyYXRlKSAhPSAzKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXdoaWxlIChyYXRlID4gMTI3KSB7CisJCXJhdGUgLz0gMTA7CisJCWV4cCsrOworCX0KKworCWxpbmVbbGVuZ3RoXSA9ICdcMCc7CisKKwlpZiAoZW5hYmxlKQorCQl2YWwgfD0gQklUKDExKTsKKwlpZiAoc3RyY21wKHNjaGVkdWxpbmcsICJzcCIpICE9IDApCisJCXZhbCB8PSBCSVQoMTUpOworCXZhbCB8PSAocmF0ZSAmIDB4N2YpIDw8IDQ7CisJdmFsIHw9IGV4cCAmIDB4ZjsKKwlpZiAoaWQgJiAweDEpCisJCXNoaWZ0ID0gMTY7CisKKwlpZiAoaG5hdF9wcml2LT5kYXRhLT5udW1fb2Zfc2NoID09IDQpCisJCXFkbWFfdHhfc2NoID0gcmVhZGwoaC0+ZmVfYmFzZSArIFFETUFfVFhfNFNDSF9CQVNFKGlkKSk7CisJZWxzZQorCQlxZG1hX3R4X3NjaCA9IHJlYWRsKGgtPmZlX2Jhc2UgKyBRRE1BX1RYXzJTQ0hfQkFTRSk7CisKKwlxZG1hX3R4X3NjaCAmPSB+KDB4ZmZmZiA8PCBzaGlmdCk7CisJcWRtYV90eF9zY2ggfD0gdmFsIDw8IHNoaWZ0OworCWlmIChobmF0X3ByaXYtPmRhdGEtPm51bV9vZl9zY2ggPT0gNCkKKwkJd3JpdGVsKHFkbWFfdHhfc2NoLCBoLT5mZV9iYXNlICsgUURNQV9UWF80U0NIX0JBU0UoaWQpKTsKKwllbHNlCisJCXdyaXRlbChxZG1hX3R4X3NjaCwgaC0+ZmVfYmFzZSArIFFETUFfVFhfMlNDSF9CQVNFKTsKKworCXNpemUgPSBzdHJsZW4obGluZSk7CisJKm9mZnNldCArPSBzaXplOworCisJcmV0dXJuIGxlbmd0aDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaG5hdF9zY2hlZF9mb3BzID0geworCS5vcGVuID0gc2ltcGxlX29wZW4sCisJLnJlYWQgPSBobmF0X3NjaGVkX3Nob3csCisJLndyaXRlID0gaG5hdF9zY2hlZF93cml0ZSwKKwkubGxzZWVrID0gZGVmYXVsdF9sbHNlZWssCit9OworCitzdGF0aWMgc3NpemVfdCBobmF0X3F1ZXVlX3Nob3coc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgbXRrX2huYXQgKmggPSBobmF0X3ByaXY7CisJbG9uZyBpZCA9IChsb25nKWZpbGUtPnByaXZhdGVfZGF0YTsKKwl1MzIgcXR4X3NjaDsKKwl1MzIgcXR4X2NmZzsKKwlpbnQgc2NoZWR1bGVyOworCWludCBtaW5fcmF0ZV9lbjsKKwlpbnQgbWluX3JhdGU7CisJaW50IG1pbl9yYXRlX2V4cDsKKwlpbnQgbWF4X3JhdGVfZW47CisJaW50IG1heF93ZWlnaHQ7CisJaW50IG1heF9yYXRlOworCWludCBtYXhfcmF0ZV9leHA7CisJY2hhciAqYnVmOworCXVuc2lnbmVkIGludCBsZW4gPSAwLCBidWZfbGVuID0gMTUwMDsKKwlzc2l6ZV90IHJldF9jbnQ7CisKKwlidWYgPSBremFsbG9jKGJ1Zl9sZW4sIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNyX3NldF9maWVsZChoLT5mZV9iYXNlICsgUURNQV9QQUdFLCBRVFhfQ0ZHX1BBR0UsIChpZCAvIE5VTV9PRl9RX1BFUl9QQUdFKSk7CisJcXR4X2NmZyA9IHJlYWRsKGgtPmZlX2Jhc2UgKyBRVFhfQ0ZHKGlkICUgTlVNX09GX1FfUEVSX1BBR0UpKTsKKwlxdHhfc2NoID0gcmVhZGwoaC0+ZmVfYmFzZSArIFFUWF9TQ0goaWQgJSBOVU1fT0ZfUV9QRVJfUEFHRSkpOworCWlmIChobmF0X3ByaXYtPmRhdGEtPm51bV9vZl9zY2ggPT0gNCkKKwkJc2NoZWR1bGVyID0gKHF0eF9zY2ggPj4gMzApICYgMHgzOworCWVsc2UKKwkJc2NoZWR1bGVyID0gISEocXR4X3NjaCAmIEJJVCgzMSkpOworCW1pbl9yYXRlX2VuID0gISEocXR4X3NjaCAmIEJJVCgyNykpOworCW1pbl9yYXRlID0gKHF0eF9zY2ggPj4gMjApICYgMHg3ZjsKKwltaW5fcmF0ZV9leHAgPSAocXR4X3NjaCA+PiAxNikgJiAweGY7CisJbWF4X3JhdGVfZW4gPSAhIShxdHhfc2NoICYgQklUKDExKSk7CisJbWF4X3dlaWdodCA9IChxdHhfc2NoID4+IDEyKSAmIDB4ZjsKKwltYXhfcmF0ZSA9IChxdHhfc2NoID4+IDQpICYgMHg3ZjsKKwltYXhfcmF0ZV9leHAgPSBxdHhfc2NoICYgMHhmOworCXdoaWxlIChtaW5fcmF0ZV9leHAtLSkKKwkJbWluX3JhdGUgKj0gMTA7CisKKwl3aGlsZSAobWF4X3JhdGVfZXhwLS0pCisJCW1heF9yYXRlICo9IDEwOworCisJbGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIGJ1Zl9sZW4gLSBsZW4sCisJCQkgInNjaGVkdWxlcjogJWRcbmh3IHJlc3Y6ICVkXG5zdyByZXN2OiAlZFxuIiwgc2NoZWR1bGVyLAorCQkJIChxdHhfY2ZnID4+IDgpICYgMHhmZiwgcXR4X2NmZyAmIDB4ZmYpOworCisJaWYgKGhuYXRfcHJpdi0+ZGF0YS0+dmVyc2lvbiAhPSBNVEtfSE5BVF9WMSkgeworCQkvKiBTd2l0Y2ggdG8gZGVidWcgbW9kZSAqLworCQljcl9zZXRfZmllbGQoaC0+ZmVfYmFzZSArIFFUWF9NSUJfSUYsIE1JQl9PTl9RVFhfQ0ZHLCAxKTsKKwkJY3Jfc2V0X2ZpZWxkKGgtPmZlX2Jhc2UgKyBRVFhfTUlCX0lGLCBWUVRYX01JQl9FTiwgMSk7CisJCXF0eF9jZmcgPSByZWFkbChoLT5mZV9iYXNlICsgUVRYX0NGRyhpZCAlIE5VTV9PRl9RX1BFUl9QQUdFKSk7CisJCXF0eF9zY2ggPSByZWFkbChoLT5mZV9iYXNlICsgUVRYX1NDSChpZCAlIE5VTV9PRl9RX1BFUl9QQUdFKSk7CisJCWxlbiArPSBzY25wcmludGYoYnVmICsgbGVuLCBidWZfbGVuIC0gbGVuLAorCQkJCSAicGFja2V0IGNvdW50OiAldVxuIiwgcXR4X2NmZyk7CisJCWxlbiArPSBzY25wcmludGYoYnVmICsgbGVuLCBidWZfbGVuIC0gbGVuLAorCQkJCSAicGFja2V0IGRyb3A6ICV1XG5cbiIsIHF0eF9zY2gpOworCisJCS8qIFJlY292ZXIgdG8gbm9ybWFsIG1vZGUgKi8KKwkJY3Jfc2V0X2ZpZWxkKGhuYXRfcHJpdi0+ZmVfYmFzZSArIFFUWF9NSUJfSUYsCisJCQkgICAgIE1JQl9PTl9RVFhfQ0ZHLCAwKTsKKwkJY3Jfc2V0X2ZpZWxkKGhuYXRfcHJpdi0+ZmVfYmFzZSArIFFUWF9NSUJfSUYsIFZRVFhfTUlCX0VOLCAwKTsKKwl9CisKKwlsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgYnVmX2xlbiAtIGxlbiwKKwkJCSAiICAgICAgRU4gICAgIFJBVEUgICAgIFdFSUdIVFxuIik7CisJbGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIGJ1Zl9sZW4gLSBsZW4sCisJCQkgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCWxlbiArPSBzY25wcmludGYoYnVmICsgbGVuLCBidWZfbGVuIC0gbGVuLAorCQkJICJtYXglNWQlOWQlOWRcbiIsIG1heF9yYXRlX2VuLCBtYXhfcmF0ZSwgbWF4X3dlaWdodCk7CisJbGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIGJ1Zl9sZW4gLSBsZW4sCisJCQkgIm1pbiU1ZCU5ZCAgICAgICAgLVxuIiwgbWluX3JhdGVfZW4sIG1pbl9yYXRlKTsKKworCWlmIChsZW4gPiBidWZfbGVuKQorCQlsZW4gPSBidWZfbGVuOworCisJcmV0X2NudCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOworCisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0X2NudDsKK30KKworc3RhdGljIHNzaXplX3QgaG5hdF9xdWV1ZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQlzaXplX3QgbGVuZ3RoLCBsb2ZmX3QgKm9mZnNldCkKK3sKKwlsb25nIGlkID0gKGxvbmcpZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBtdGtfaG5hdCAqaCA9IGhuYXRfcHJpdjsKKwljaGFyIGxpbmVbNjRdID0gezB9OworCWludCBtYXhfZW5hYmxlLCBtYXhfcmF0ZSwgbWF4X2V4cCA9IDA7CisJaW50IG1pbl9lbmFibGUsIG1pbl9yYXRlLCBtaW5fZXhwID0gMDsKKwlpbnQgd2VpZ2h0OworCWludCByZXN2OworCWludCBzY2hlZHVsZXI7CisJc2l6ZV90IHNpemU7CisJdTMyIHF0eF9zY2ggPSAwOworCisJY3Jfc2V0X2ZpZWxkKGgtPmZlX2Jhc2UgKyBRRE1BX1BBR0UsIFFUWF9DRkdfUEFHRSwgKGlkIC8gTlVNX09GX1FfUEVSX1BBR0UpKTsKKwlpZiAobGVuZ3RoID49IHNpemVvZihsaW5lKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIobGluZSwgYnVmLCBsZW5ndGgpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChzc2NhbmYobGluZSwgIiVkICVkICVkICVkICVkICVkICVkIiwgJnNjaGVkdWxlciwgJm1pbl9lbmFibGUsICZtaW5fcmF0ZSwKKwkJICAgJm1heF9lbmFibGUsICZtYXhfcmF0ZSwgJndlaWdodCwgJnJlc3YpICE9IDcpCisJCXJldHVybiAtRUZBVUxUOworCisJbGluZVtsZW5ndGhdID0gJ1wwJzsKKworCXdoaWxlIChtYXhfcmF0ZSA+IDEyNykgeworCQltYXhfcmF0ZSAvPSAxMDsKKwkJbWF4X2V4cCsrOworCX0KKworCXdoaWxlIChtaW5fcmF0ZSA+IDEyNykgeworCQltaW5fcmF0ZSAvPSAxMDsKKwkJbWluX2V4cCsrOworCX0KKworCWlmIChobmF0X3ByaXYtPmRhdGEtPm51bV9vZl9zY2ggPT0gNCkKKwkJcXR4X3NjaCB8PSAoc2NoZWR1bGVyICYgMHgzKSA8PCAzMDsKKwllbHNlCisJCXF0eF9zY2ggfD0gKHNjaGVkdWxlciAmIDB4MSkgPDwgMzE7CisJaWYgKG1pbl9lbmFibGUpCisJCXF0eF9zY2ggfD0gQklUKDI3KTsKKwlxdHhfc2NoIHw9IChtaW5fcmF0ZSAmIDB4N2YpIDw8IDIwOworCXF0eF9zY2ggfD0gKG1pbl9leHAgJiAweGYpIDw8IDE2OworCWlmIChtYXhfZW5hYmxlKQorCQlxdHhfc2NoIHw9IEJJVCgxMSk7CisJcXR4X3NjaCB8PSAod2VpZ2h0ICYgMHhmKSA8PCAxMjsKKwlxdHhfc2NoIHw9IChtYXhfcmF0ZSAmIDB4N2YpIDw8IDQ7CisJcXR4X3NjaCB8PSBtYXhfZXhwICYgMHhmOworCXdyaXRlbChxdHhfc2NoLCBoLT5mZV9iYXNlICsgUVRYX1NDSChpZCAlIE5VTV9PRl9RX1BFUl9QQUdFKSk7CisKKwlyZXN2ICY9IDB4ZmY7CisJcXR4X3NjaCA9IHJlYWRsKGgtPmZlX2Jhc2UgKyBRVFhfQ0ZHKGlkICUgTlVNX09GX1FfUEVSX1BBR0UpKTsKKwlxdHhfc2NoICY9IDB4ZmZmZjAwMDA7CisJcXR4X3NjaCB8PSAocmVzdiA8PCA4KSB8IHJlc3Y7CisJd3JpdGVsKHF0eF9zY2gsIGgtPmZlX2Jhc2UgKyBRVFhfQ0ZHKGlkICUgTlVNX09GX1FfUEVSX1BBR0UpKTsKKworCXNpemUgPSBzdHJsZW4obGluZSk7CisJKm9mZnNldCArPSBzaXplOworCisJcmV0dXJuIGxlbmd0aDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaG5hdF9xdWV1ZV9mb3BzID0geworCS5vcGVuID0gc2ltcGxlX29wZW4sCisJLnJlYWQgPSBobmF0X3F1ZXVlX3Nob3csCisJLndyaXRlID0gaG5hdF9xdWV1ZV93cml0ZSwKKwkubGxzZWVrID0gZGVmYXVsdF9sbHNlZWssCit9OworCitzdGF0aWMgc3NpemVfdCBobmF0X3BwZF9pZl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmRhdGEpCit7CisJY2hhciBidWZbSUZOQU1TSVpdOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJY2hhciAqcCwgKnRtcDsKKworCWlmIChjb3VudCA+PSBJRk5BTVNJWikKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwltZW1zZXQoYnVmLCAwLCBJRk5BTVNJWik7CisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgYnVmZmVyLCBjb3VudCkpCisJCXJldHVybiAtRUZBVUxUOworCisJdG1wID0gYnVmOworCXAgPSBzdHJzZXAoJnRtcCwgIlxuXHIgIik7CisJZGV2ID0gZGV2X2dldF9ieV9uYW1lKCZpbml0X25ldCwgcCk7CisKKwlpZiAoZGV2KSB7CisJCWlmIChobmF0X3ByaXYtPmdfcHBkZXYpCisJCQlkZXZfcHV0KGhuYXRfcHJpdi0+Z19wcGRldik7CisJCWhuYXRfcHJpdi0+Z19wcGRldiA9IGRldjsKKworCQlzdHJuY3B5KGhuYXRfcHJpdi0+cHBkLCBwLCBJRk5BTVNJWiAtIDEpOworCQlwcl9pbmZvKCJobmF0X3ByaXYgcHBkID0gJXNcbiIsIGhuYXRfcHJpdi0+cHBkKTsKKwl9IGVsc2UgeworCQlwcl9pbmZvKCJubyBzdWNoIGRldmljZSFcbiIpOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGludCBobmF0X3BwZF9pZl9yZWFkKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcHJpdmF0ZSkKK3sKKwlwcl9pbmZvKCJobmF0X3ByaXYgcHBkID0gJXNcbiIsIGhuYXRfcHJpdi0+cHBkKTsKKworCWlmIChobmF0X3ByaXYtPmdfcHBkZXYpIHsKKwkJcHJfaW5mbygiaG5hdF9wcml2IGdfcHBkZXYgbmFtZSA9ICVzXG4iLAorCQkJaG5hdF9wcml2LT5nX3BwZGV2LT5uYW1lKTsKKwl9IGVsc2UgeworCQlwcl9pbmZvKCJobmF0X3ByaXYgZ19wcGRldiBpcyBudWxsIVxuIik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaG5hdF9wcGRfaWZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgaG5hdF9wcGRfaWZfcmVhZCwgZmlsZS0+cHJpdmF0ZV9kYXRhKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaG5hdF9wcGRfaWZfZm9wcyA9IHsKKwkub3BlbiA9IGhuYXRfcHBkX2lmX29wZW4sCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS53cml0ZSA9IGhuYXRfcHBkX2lmX3dyaXRlLAorCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IGhuYXRfbWFwZV90b2dnbGVfcmVhZChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnByaXZhdGUpCit7CisJcHJfaW5mbygidmFsdWU9JWQsICVzIGlzIGVuYWJsZWQgbm93IVxuIiwgbWFwZV90b2dnbGUsIChtYXBlX3RvZ2dsZSkgPyAibWFwZSIgOiAiZHMtbGl0ZSIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaG5hdF9tYXBlX3RvZ2dsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBobmF0X21hcGVfdG9nZ2xlX3JlYWQsIGZpbGUtPnByaXZhdGVfZGF0YSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGhuYXRfbWFwZV90b2dnbGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmRhdGEpCit7CisJY2hhciBidWYgPSAwOworCWludCBsZW4gPSBjb3VudDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmYnVmLCBidWZmZXIsIGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKGJ1ZiA9PSAnMScgJiYgIW1hcGVfdG9nZ2xlKSB7CisJCXByX2luZm8oIm1hcGUgaXMgZ29pbmcgdG8gYmUgZW5hYmxlZCwgZHMtbGl0ZSBpcyBnb2luZyB0byBiZSBkaXNhYmxlZCAhXG4iKTsKKwkJbWFwZV90b2dnbGUgPSAxOworCX0gZWxzZSBpZiAoYnVmID09ICcwJyAmJiBtYXBlX3RvZ2dsZSkgeworCQlwcl9pbmZvKCJkcy1saXRlIGlzIGdvaW5nIHRvIGJlIGVuYWJsZWQsIG1hcGUgaXMgZ29pbmcgdG8gYmUgZGlzYWJsZWQgIVxuIik7CisJCW1hcGVfdG9nZ2xlID0gMDsKKwl9CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBobmF0X21hcGVfdG9nZ2xlX2ZvcHMgPSB7CisJLm9wZW4gPSBobmF0X21hcGVfdG9nZ2xlX29wZW4sCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS53cml0ZSA9IGhuYXRfbWFwZV90b2dnbGVfd3JpdGUsCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgaG5hdF9ob29rX3RvZ2dsZV9yZWFkKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcHJpdmF0ZSkKK3sKKwlwcl9pbmZvKCJ2YWx1ZT0lZCwgaG9vayBpcyAlcyBub3chXG4iLCBob29rX3RvZ2dsZSwgKGhvb2tfdG9nZ2xlKSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaG5hdF9ob29rX3RvZ2dsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBobmF0X2hvb2tfdG9nZ2xlX3JlYWQsIGZpbGUtPnByaXZhdGVfZGF0YSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGhuYXRfaG9va190b2dnbGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmRhdGEpCit7CisJY2hhciBidWZbOF0gPSB7MH07CisJaW50IGxlbiA9IGNvdW50OworCXUzMiBpZDsKKworCWlmICgobGVuID4gOCkgfHwgY29weV9mcm9tX3VzZXIoYnVmLCBidWZmZXIsIGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKGJ1ZlswXSA9PSAnMScgJiYgIWhvb2tfdG9nZ2xlKSB7CisJCXByX2luZm8oImhvb2sgaXMgZ29pbmcgdG8gYmUgZW5hYmxlZCAhXG4iKTsKKwkJaG5hdF9lbmFibGVfaG9vaygpOworCisJCWlmIChJU19QUFBRX01PREUpIHsKKwkJCWZvciAoaWQgPSAwOyBpZCA8IE1BWF9QUFBRX1BPUlRfTlVNOyBpZCsrKQorCQkJCWhuYXRfcW9zX3NoYXBlcl9lYmwoaWQsIDEpOworCQl9CisJfSBlbHNlIGlmIChidWZbMF0gPT0gJzAnICYmIGhvb2tfdG9nZ2xlKSB7CisJCXByX2luZm8oImhvb2sgaXMgZ29pbmcgdG8gYmUgZGlzYWJsZWQgIVxuIik7CisJCWhuYXRfZGlzYWJsZV9ob29rKCk7CisKKwkJaWYgKElTX1BQUFFfTU9ERSkgeworCQkJZm9yIChpZCA9IDA7IGlkIDwgTUFYX1BQUFFfUE9SVF9OVU07IGlkKyspCisJCQkJaG5hdF9xb3Nfc2hhcGVyX2VibChpZCwgMCk7CisJCX0KKwl9CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBobmF0X2hvb2tfdG9nZ2xlX2ZvcHMgPSB7CisJLm9wZW4gPSBobmF0X2hvb2tfdG9nZ2xlX29wZW4sCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS53cml0ZSA9IGhuYXRfaG9va190b2dnbGVfd3JpdGUsCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgaG5hdF9xb3NfdG9nZ2xlX3JlYWQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwcml2YXRlKQoreworCXByX2luZm8oInZhbHVlPSVkLCBIUW9TIGlzICVzIG5vdyFcbiIsIHFvc190b2dnbGUsIChxb3NfdG9nZ2xlKSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaG5hdF9xb3NfdG9nZ2xlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGhuYXRfcW9zX3RvZ2dsZV9yZWFkLCBmaWxlLT5wcml2YXRlX2RhdGEpOworfQorCit2b2lkIGhuYXRfcW9zX3NoYXBlcl9lYmwodTMyIGlkLCB1MzIgZW5hYmxlKQoreworCXN0cnVjdCBtdGtfaG5hdCAqaCA9IGhuYXRfcHJpdjsKKwl1MzIgY2ZnOworCisJaWYgKGVuYWJsZSkgeworCQljZmcgPSBRVFhfU0NIX01JTl9SQVRFX0VOIHwgUVRYX1NDSF9NQVhfUkFURV9FTjsKKwkJY2ZnIHw9ICgxIDw8IFFUWF9TQ0hfTUlOX1JBVEVfTUFOX09GRlNFVCkgfAorCQkgICAgICAgKDQgPDwgUVRYX1NDSF9NSU5fUkFURV9FWFBfT0ZGU0VUKSB8CisJCSAgICAgICAoMjUgPDwgUVRYX1NDSF9NQVhfUkFURV9NQU5fT0ZGU0VUKSB8CisJCSAgICAgICAoNSA8PCBRVFhfU0NIX01BWF9SQVRFX0VYUF9PRkZTRVQpIHwKKwkJICAgICAgICg0IDw8IFFUWF9TQ0hfTUFYX1JBVEVfV0dIVF9PRkZTRVQpOworCisJCXdyaXRlbChjZmcsIGgtPmZlX2Jhc2UgKyBRVFhfU0NIKGlkICUgTlVNX09GX1FfUEVSX1BBR0UpKTsKKwl9IGVsc2UgeworCQl3cml0ZWwoMCwgaC0+ZmVfYmFzZSArIFFUWF9TQ0goaWQgJSBOVU1fT0ZfUV9QRVJfUEFHRSkpOworCX0KK30KKworc3RhdGljIHZvaWQgaG5hdF9xb3NfZGlzYWJsZSh2b2lkKQoreworCXN0cnVjdCBtdGtfaG5hdCAqaCA9IGhuYXRfcHJpdjsKKwl1MzIgaWQsIGNmZzsKKworCWZvciAoaWQgPSAwOyBpZCA8IE1BWF9QUFBRX1BPUlRfTlVNOyBpZCsrKSB7CisJCWhuYXRfcW9zX3NoYXBlcl9lYmwoaWQsIDApOworCQl3cml0ZWwoKDQgPDwgUVRYX0NGR19IV19SRVNWX0NOVF9PRkZTRVQpIHwKKwkJICAgICAgICg0IDw8IFFUWF9DRkdfU1dfUkVTVl9DTlRfT0ZGU0VUKSwKKwkJICAgICAgIGgtPmZlX2Jhc2UgKyBRVFhfQ0ZHKGlkICUgTlVNX09GX1FfUEVSX1BBR0UpKTsKKwl9CisKKwljZmcgPSAoUURNQV9UWF9TQ0hfV0ZRX0VOKSB8IChRRE1BX1RYX1NDSF9XRlFfRU4gPDwgMTYpOworCWZvciAoaWQgPSAwOyBpZCA8IGgtPmRhdGEtPm51bV9vZl9zY2g7IGlkICs9IDIpIHsKKwkJaWYgKGgtPmRhdGEtPm51bV9vZl9zY2ggPT0gNCkKKwkJCXdyaXRlbChjZmcsIGgtPmZlX2Jhc2UgKyBRRE1BX1RYXzRTQ0hfQkFTRShpZCkpOworCQllbHNlCisJCQl3cml0ZWwoY2ZnLCBoLT5mZV9iYXNlICsgUURNQV9UWF8yU0NIX0JBU0UpOworCX0KK30KKworc3RhdGljIHZvaWQgaG5hdF9xb3NfcHBwcV9lbmFibGUodm9pZCkKK3sKKwlzdHJ1Y3QgbXRrX2huYXQgKmggPSBobmF0X3ByaXY7CisJdTMyIGlkLCBjZmc7CisKKwlmb3IgKGlkID0gMDsgaWQgPCBNQVhfUFBQUV9QT1JUX05VTTsgaWQrKykgeworCQlpZiAoaG9va190b2dnbGUpCisJCQlobmF0X3Fvc19zaGFwZXJfZWJsKGlkLCAxKTsKKwkJZWxzZQorCQkJaG5hdF9xb3Nfc2hhcGVyX2VibChpZCwgMCk7CisKKwkJd3JpdGVsKCg0IDw8IFFUWF9DRkdfSFdfUkVTVl9DTlRfT0ZGU0VUKSB8CisJCSAgICAgICAoNCA8PCBRVFhfQ0ZHX1NXX1JFU1ZfQ05UX09GRlNFVCksCisJCSAgICAgICBoLT5mZV9iYXNlICsgUVRYX0NGRyhpZCAlIE5VTV9PRl9RX1BFUl9QQUdFKSk7CisJfQorCisJY2ZnID0gKFFETUFfVFhfU0NIX1dGUV9FTikgfCAoUURNQV9UWF9TQ0hfV0ZRX0VOIDw8IDE2KTsKKwlmb3IgKGlkID0gMDsgaWQgPCBoLT5kYXRhLT5udW1fb2Zfc2NoOyBpZCs9IDIpIHsKKwkJaWYgKGgtPmRhdGEtPm51bV9vZl9zY2ggPT0gNCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlbChjZmcsIGgtPmZlX2Jhc2UgKyBRRE1BX1RYXzRTQ0hfQkFTRShpZCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlbChjZmcsIGgtPmZlX2Jhc2UgKyBRRE1BX1RYXzJTQ0hfQkFTRSk7CisJfQorfQorCitzdGF0aWMgc3NpemVfdCBobmF0X3Fvc190b2dnbGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqZGF0YSkKK3sKKwljaGFyIGJ1Zls4XTsKKwlpbnQgbGVuID0gY291bnQ7CisKKwlpZiAoKGxlbiA+IDgpIHx8IGNvcHlfZnJvbV91c2VyKGJ1ZiwgYnVmZmVyLCBsZW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChidWZbMF0gPT0gJzAnKSB7CisJCXByX2luZm8oIkhRb1MgaXMgZ29pbmcgdG8gYmUgZGlzYWJsZWQgIVxuIik7CisJCXFvc190b2dnbGUgPSAwOworCQlobmF0X3Fvc19kaXNhYmxlKCk7CisJfSBlbHNlIGlmIChidWZbMF0gPT0gJzEnKSB7CisJCXByX2luZm8oIkhRb1MgbW9kZSBpcyBnb2luZyB0byBiZSBlbmFibGVkICFcbiIpOworCQlxb3NfdG9nZ2xlID0gMTsKKwl9IGVsc2UgaWYgKGJ1ZlswXSA9PSAnMicpIHsKKwkJcHJfaW5mbygiUGVyLXBvcnQtcGVyLXF1ZXVlIG1vZGUgaXMgZ29pbmcgdG8gYmUgZW5hYmxlZCAhXG4iKTsKKwkJcW9zX3RvZ2dsZSA9IDI7CisJCWhuYXRfcW9zX3BwcHFfZW5hYmxlKCk7CisJfQorCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaG5hdF9xb3NfdG9nZ2xlX2ZvcHMgPSB7CisJLm9wZW4gPSBobmF0X3Fvc190b2dnbGVfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLndyaXRlID0gaG5hdF9xb3NfdG9nZ2xlX3dyaXRlLAorCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IGhuYXRfdmVyc2lvbl9yZWFkKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcHJpdmF0ZSkKK3sKKwlwcl9pbmZvKCJITkFUIFNXIHZlcnNpb24gOiAlc1xuSE5BVCBIVyB2ZXJzaW9uIDogJWRcbiIsIEhOQVRfU1dfVkVSLCBobmF0X3ByaXYtPmRhdGEtPnZlcnNpb24pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaG5hdF92ZXJzaW9uX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGhuYXRfdmVyc2lvbl9yZWFkLCBmaWxlLT5wcml2YXRlX2RhdGEpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBobmF0X3ZlcnNpb25fZm9wcyA9IHsKKwkub3BlbiA9IGhuYXRfdmVyc2lvbl9vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworaW50IGdldF9wcGVfbWliKHUzMiBwcGVfaWQsIGludCBpbmRleCwgdTY0ICpwa3RfY250LCB1NjQgKmJ5dGVfY250KQoreworCXN0cnVjdCBtdGtfaG5hdCAqaCA9IGhuYXRfcHJpdjsKKwlzdHJ1Y3QgaG5hdF9hY2NvdW50aW5nICphY2N0OworCXN0cnVjdCBmb2VfZW50cnkgKmVudHJ5OworCisJaWYgKHBwZV9pZCA+PSBDRkdfUFBFX05VTSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGgtPmZvZV9ldHJ5X251bSkgeworCQlwcl9pbmZvKCJJbnZhbGlkIGVudHJ5IGluZGV4XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYWNjdCA9IGhuYXRfZ2V0X2NvdW50KGgsIHBwZV9pZCwgaW5kZXgsIE5VTEwpOworCWVudHJ5ID0gaG5hdF9wcml2LT5mb2VfdGFibGVfY3B1W3BwZV9pZF0gKyBpbmRleDsKKworCWlmICghYWNjdCkKKwkJcmV0dXJuIC0xOworCisJaWYgKGVudHJ5LT5iZmliMS5zdGF0ZSAhPSBCSU5EKQorCQlyZXR1cm4gLTE7CisKKwkqcGt0X2NudCA9IGFjY3QtPnBhY2tldHM7CisJKmJ5dGVfY250ID0gYWNjdC0+Ynl0ZXM7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZ2V0X3BwZV9taWIpOworCitpbnQgaXNfZW50cnlfYmluZGluZyh1MzIgcHBlX2lkLCBpbnQgaW5kZXgpCit7CisJc3RydWN0IG10a19obmF0ICpoID0gaG5hdF9wcml2OworCXN0cnVjdCBmb2VfZW50cnkgKmVudHJ5OworCisJaWYgKHBwZV9pZCA+PSBDRkdfUFBFX05VTSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGgtPmZvZV9ldHJ5X251bSkgeworCQlwcl9pbmZvKCJJbnZhbGlkIGVudHJ5IGluZGV4XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZW50cnkgPSBobmF0X3ByaXYtPmZvZV90YWJsZV9jcHVbcHBlX2lkXSArIGluZGV4OworCisJcmV0dXJuIGVudHJ5LT5iZmliMS5zdGF0ZSA9PSBCSU5EOworfQorRVhQT1JUX1NZTUJPTChpc19lbnRyeV9iaW5kaW5nKTsKKworI2RlZmluZSBkdW1wX3JlZ2lzdGVyKG5tKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJLm5hbWUgPSBfX3N0cmluZ2lmeShubSksIC5vZmZzZXQgPSBQUEVfIyNubSwgICAgICAgICAgICAgICAgICAgXAorCX0KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZWJ1Z2ZzX3JlZzMyIGhuYXRfcmVnc1tdID0geworCWR1bXBfcmVnaXN0ZXIoR0xPX0NGRyksICAgICBkdW1wX3JlZ2lzdGVyKEZMT1dfQ0ZHKSwKKwlkdW1wX3JlZ2lzdGVyKElQX1BST1RfQ0hLKSwgZHVtcF9yZWdpc3RlcihJUF9QUk9UXzApLAorCWR1bXBfcmVnaXN0ZXIoSVBfUFJPVF8xKSwgICBkdW1wX3JlZ2lzdGVyKElQX1BST1RfMiksCisJZHVtcF9yZWdpc3RlcihJUF9QUk9UXzMpLCAgIGR1bXBfcmVnaXN0ZXIoVEJfQ0ZHKSwKKwlkdW1wX3JlZ2lzdGVyKFRCX0JBU0UpLCAgICAgZHVtcF9yZWdpc3RlcihUQl9VU0VEKSwKKwlkdW1wX3JlZ2lzdGVyKEJORFIpLAlkdW1wX3JlZ2lzdGVyKEJJTkRfTE1UXzApLAorCWR1bXBfcmVnaXN0ZXIoQklORF9MTVRfMSksICBkdW1wX3JlZ2lzdGVyKEtBKSwKKwlkdW1wX3JlZ2lzdGVyKFVOQl9BR0UpLCAgICAgZHVtcF9yZWdpc3RlcihCTkRfQUdFXzApLAorCWR1bXBfcmVnaXN0ZXIoQk5EX0FHRV8xKSwgICBkdW1wX3JlZ2lzdGVyKEhBU0hfU0VFRCksCisJZHVtcF9yZWdpc3RlcihERlRfQ1BPUlQpLCAgIGR1bXBfcmVnaXN0ZXIoTUNBU1RfUFBTRSksCisJZHVtcF9yZWdpc3RlcihNQ0FTVF9MXzApLCAgIGR1bXBfcmVnaXN0ZXIoTUNBU1RfSF8wKSwKKwlkdW1wX3JlZ2lzdGVyKE1DQVNUX0xfMSksICAgZHVtcF9yZWdpc3RlcihNQ0FTVF9IXzEpLAorCWR1bXBfcmVnaXN0ZXIoTUNBU1RfTF8yKSwgICBkdW1wX3JlZ2lzdGVyKE1DQVNUX0hfMiksCisJZHVtcF9yZWdpc3RlcihNQ0FTVF9MXzMpLCAgIGR1bXBfcmVnaXN0ZXIoTUNBU1RfSF8zKSwKKwlkdW1wX3JlZ2lzdGVyKE1DQVNUX0xfNCksICAgZHVtcF9yZWdpc3RlcihNQ0FTVF9IXzQpLAorCWR1bXBfcmVnaXN0ZXIoTUNBU1RfTF81KSwgICBkdW1wX3JlZ2lzdGVyKE1DQVNUX0hfNSksCisJZHVtcF9yZWdpc3RlcihNQ0FTVF9MXzYpLCAgIGR1bXBfcmVnaXN0ZXIoTUNBU1RfSF82KSwKKwlkdW1wX3JlZ2lzdGVyKE1DQVNUX0xfNyksICAgZHVtcF9yZWdpc3RlcihNQ0FTVF9IXzcpLAorCWR1bXBfcmVnaXN0ZXIoTUNBU1RfTF84KSwgICBkdW1wX3JlZ2lzdGVyKE1DQVNUX0hfOCksCisJZHVtcF9yZWdpc3RlcihNQ0FTVF9MXzkpLCAgIGR1bXBfcmVnaXN0ZXIoTUNBU1RfSF85KSwKKwlkdW1wX3JlZ2lzdGVyKE1DQVNUX0xfQSksICAgZHVtcF9yZWdpc3RlcihNQ0FTVF9IX0EpLAorCWR1bXBfcmVnaXN0ZXIoTUNBU1RfTF9CKSwgICBkdW1wX3JlZ2lzdGVyKE1DQVNUX0hfQiksCisJZHVtcF9yZWdpc3RlcihNQ0FTVF9MX0MpLCAgIGR1bXBfcmVnaXN0ZXIoTUNBU1RfSF9DKSwKKwlkdW1wX3JlZ2lzdGVyKE1DQVNUX0xfRCksICAgZHVtcF9yZWdpc3RlcihNQ0FTVF9IX0QpLAorCWR1bXBfcmVnaXN0ZXIoTUNBU1RfTF9FKSwgICBkdW1wX3JlZ2lzdGVyKE1DQVNUX0hfRSksCisJZHVtcF9yZWdpc3RlcihNQ0FTVF9MX0YpLCAgIGR1bXBfcmVnaXN0ZXIoTUNBU1RfSF9GKSwKKwlkdW1wX3JlZ2lzdGVyKE1UVV9EUlApLCAgICAgZHVtcF9yZWdpc3RlcihNVFVfVkxZUl8wKSwKKwlkdW1wX3JlZ2lzdGVyKE1UVV9WTFlSXzEpLCAgZHVtcF9yZWdpc3RlcihNVFVfVkxZUl8yKSwKKwlkdW1wX3JlZ2lzdGVyKFZQTV9UUElEKSwgICAgZHVtcF9yZWdpc3RlcihWUE1fVFBJRCksCisJZHVtcF9yZWdpc3RlcihDQUhfQ1RSTCksICAgIGR1bXBfcmVnaXN0ZXIoQ0FIX1RBR19TUkgpLAorCWR1bXBfcmVnaXN0ZXIoQ0FIX0xJTkVfUlcpLCBkdW1wX3JlZ2lzdGVyKENBSF9XREFUQSksCisJZHVtcF9yZWdpc3RlcihDQUhfUkRBVEEpLAorfTsKKworaW50IGhuYXRfaW5pdF9kZWJ1Z2ZzKHN0cnVjdCBtdGtfaG5hdCAqaCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgZGVudHJ5ICpyb290OworCXN0cnVjdCBkZW50cnkgKmZpbGU7CisJbG9uZyBpOworCWNoYXIgbmFtZVsxNl07CisKKwlyb290ID0gZGVidWdmc19jcmVhdGVfZGlyKCJobmF0IiwgTlVMTCk7CisJaWYgKCFyb290KSB7CisJCWRldl9ub3RpY2UoaC0+ZGV2LCAiJXM6ZXJyIGF0ICVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjA7CisJfQorCWgtPnJvb3QgPSByb290OworCisJZm9yIChpID0gMDsgaSA8IENGR19QUEVfTlVNOyBpKyspIHsKKwkJaC0+cmVnc2V0W2ldID0ga3phbGxvYyhzaXplb2YoKmgtPnJlZ3NldFtpXSksIEdGUF9LRVJORUwpOworCQlpZiAoIWgtPnJlZ3NldFtpXSkgeworCQkJZGV2X25vdGljZShoLT5kZXYsICIlczplcnIgYXQgJWRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBlcnIxOworCQl9CisJCWgtPnJlZ3NldFtpXS0+cmVncyA9IGhuYXRfcmVnczsKKwkJaC0+cmVnc2V0W2ldLT5ucmVncyA9IEFSUkFZX1NJWkUoaG5hdF9yZWdzKTsKKwkJaC0+cmVnc2V0W2ldLT5iYXNlID0gaC0+cHBlX2Jhc2VbaV07CisKKwkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAicmVnZHVtcCVsZCIsIGkpOworCQlmaWxlID0gZGVidWdmc19jcmVhdGVfcmVnc2V0MzIobmFtZSwgU19JUlVHTywKKwkJCQkJICAgICAgIHJvb3QsIGgtPnJlZ3NldFtpXSk7CisJCWlmICghZmlsZSkgeworCQkJZGV2X25vdGljZShoLT5kZXYsICIlczplcnIgYXQgJWRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBlcnIxOworCQl9CisJfQorCisJZGVidWdmc19jcmVhdGVfZmlsZSgiYWxsX2VudHJ5IiwgU19JUlVHTywgcm9vdCwgaCwgJmhuYXRfZGVidWdfZm9wcyk7CisJZGVidWdmc19jcmVhdGVfZmlsZSgiZXh0ZXJuYWxfaW50ZXJmYWNlIiwgU19JUlVHTywgcm9vdCwgaCwKKwkJCSAgICAmaG5hdF9leHRfZm9wcyk7CisJZGVidWdmc19jcmVhdGVfZmlsZSgid2huYXRfaW50ZXJmYWNlIiwgU19JUlVHTywgcm9vdCwgaCwKKwkJCSAgICAmaG5hdF93aG5hdF9mb3BzKTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJjcHVfcmVhc29uIiwgU19JRlJFRyB8IFNfSVJVR08sIHJvb3QsIGgsCisJCQkgICAgJmNwdV9yZWFzb25fZm9wcyk7CisJZGVidWdmc19jcmVhdGVfZmlsZSgiaG5hdF9lbnRyeSIsIFNfSVJVR08gfCBTX0lSVUdPLCByb290LCBoLAorCQkJICAgICZobmF0X2VudHJ5X2ZvcHMpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImhuYXRfc2V0dGluZyIsIFNfSVJVR08gfCBTX0lSVUdPLCByb290LCBoLAorCQkJICAgICZobmF0X3NldHRpbmdfZm9wcyk7CisJZGVidWdmc19jcmVhdGVfZmlsZSgibWNhc3RfdGFibGUiLCBTX0lSVUdPIHwgU19JUlVHTywgcm9vdCwgaCwKKwkJCSAgICAmaG5hdF9tY2FzdF9mb3BzKTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJob29rX3RvZ2dsZSIsIFNfSVJVR08gfCBTX0lSVUdPLCByb290LCBoLAorCQkJICAgICZobmF0X2hvb2tfdG9nZ2xlX2ZvcHMpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoIm1hcGVfdG9nZ2xlIiwgU19JUlVHTyB8IFNfSVJVR08sIHJvb3QsIGgsCisJCQkgICAgJmhuYXRfbWFwZV90b2dnbGVfZm9wcyk7CisJZGVidWdmc19jcmVhdGVfZmlsZSgicW9zX3RvZ2dsZSIsIFNfSVJVR08gfCBTX0lSVUdPLCByb290LCBoLAorCQkJICAgICZobmF0X3Fvc190b2dnbGVfZm9wcyk7CisJZGVidWdmc19jcmVhdGVfZmlsZSgiaG5hdF92ZXJzaW9uIiwgU19JUlVHTyB8IFNfSVJVR08sIHJvb3QsIGgsCisJCQkgICAgJmhuYXRfdmVyc2lvbl9mb3BzKTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJobmF0X3BwZF9pZiIsIFNfSVJVR08gfCBTX0lSVUdPLCByb290LCBoLAorCQkJICAgICZobmF0X3BwZF9pZl9mb3BzKTsKKworCWZvciAoaSA9IDA7IGkgPCBobmF0X3ByaXYtPmRhdGEtPm51bV9vZl9zY2g7IGkrKykgeworCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJxZG1hX3NjaCVsZCIsIGkpOworCQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKG5hbWUsIFNfSVJVR08sIHJvb3QsICh2b2lkICopaSwKKwkJCQkgICAgJmhuYXRfc2NoZWRfZm9wcyk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IE1US19RRE1BX1RYX05VTTsgaSsrKSB7CisJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgInFkbWFfdHhxJWxkIiwgaSk7CisJCWRlYnVnZnNfY3JlYXRlX2ZpbGUobmFtZSwgU19JUlVHTywgcm9vdCwgKHZvaWQgKilpLAorCQkJCSAgICAmaG5hdF9xdWV1ZV9mb3BzKTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyMToKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUocm9vdCk7CitlcnIwOgorCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgaG5hdF9kZWluaXRfZGVidWdmcyhzdHJ1Y3QgbXRrX2huYXQgKmgpCit7CisJaW50IGk7CisKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoaC0+cm9vdCk7CisJaC0+cm9vdCA9IE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgQ0ZHX1BQRV9OVU07IGkrKykKKwkJa2ZyZWUoaC0+cmVnc2V0W2ldKTsKK30KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2huYXQvaG5hdF9tY2FzdC5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfaG5hdC9obmF0X21jYXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEyYzg0NQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2huYXQvaG5hdF9tY2FzdC5jCkBAIC0wLDAgKzEsMzU1IEBACisvKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IFpoaXFpYW5nIFlhbmcgPHpoaXFpYW5nLnlhbmdAbWVkaWF0ZWsuY29tPgorICovCisjaW5jbHVkZSA8bmV0L3NvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYnJpZGdlLmg+CisjaW5jbHVkZSAiaG5hdC5oIgorCisvKiAqCisgKiBtY2FzdF9lbnRyeV9nZXQgLSBSZXR1cm5zIHRoZSBpbmRleCBvZiBhbiB1bnVzZWQgZW50cnkKKyAqIG9yIGFuIGFscmVhZHkgZXhpc3RlZCBlbnRyeSBpbiBtdGJsCisgKi8KK3N0YXRpYyBpbnQgbWNhc3RfZW50cnlfZ2V0KHUxNiB2bGFuX2lkLCB1MzIgZHN0X21hYykKK3sKKwlpbnQgaW5kZXggPSAtMTsKKwl1OCBpOworCXN0cnVjdCBwcGVfbWNhc3RfZ3JvdXAgKnAgPSBobmF0X3ByaXYtPnBtY2FzdC0+bXRibDsKKwl1OCBtYXggPSBobmF0X3ByaXYtPnBtY2FzdC0+bWF4X2VudHJ5OworCisJZm9yIChpID0gMDsgaSA8IG1heDsgaSsrKSB7CisJCWlmICgoaW5kZXggPT0gLTEpICYmICghcC0+dmFsaWQpKSB7CisJCQlpbmRleCA9IGk7IC8qZ2V0IHRoZSBmaXJzdCB1bnVzZWQgZW50cnkgaW5kZXgqLworCQkJY29udGludWU7CisJCX0KKwkJaWYgKChwLT52aWQgPT0gdmxhbl9pZCkgJiYgKHAtPm1hY19oaSA9PSBkc3RfbWFjKSkgeworCQkJaW5kZXggPSBpOworCQkJYnJlYWs7CisJCX0KKwkJcCsrOworCX0KKwlpZiAoaW5kZXggPT0gLTEpCisJCXByX2luZm8oIiVzOmdyb3VwIHRhYmxlIGlzIGZ1bGxcbiIsIF9fZnVuY19fKTsKKworCXJldHVybiBpbmRleDsKK30KKworc3RhdGljIHZvaWQgZ2V0X21hY19mcm9tX21kYl9lbnRyeShzdHJ1Y3QgYnJfbWRiX2VudHJ5ICplbnRyeSwKKwkJCQkgICB1MzIgKm1hY19oaSwgdTE2ICptYWNfbG8pCit7CisJc3dpdGNoIChudG9ocyhlbnRyeS0+YWRkci5wcm90bykpIHsKKwljYXNlIEVUSF9QX0lQOgorCQkqbWFjX2xvID0gMHgwMTAwOworCQkqbWFjX2hpID0gc3dhYjMyKChlbnRyeS0+YWRkci51LmlwNCAmIDB4ZmZmZmZlMDApICsgMHg1ZSk7CisJCWJyZWFrOworCWNhc2UgRVRIX1BfSVBWNjoKKwkJKm1hY19sbyA9IDB4MzMzMzsKKwkJKm1hY19oaSA9IHN3YWIzMihlbnRyeS0+YWRkci51LmlwNi5zNl9hZGRyMzJbM10pOworCQlicmVhazsKKwl9CisJdHJhY2VfcHJpbnRrKCIlczpncm91cCBtYWNfaD0weCUwOHgsIG1hY19sPTB4JTA0eFxuIiwKKwkJICAgICBfX2Z1bmNfXywgKm1hY19oaSwgKm1hY19sbyk7Cit9CisKKy8qc2V0X2huYXRfbXRibCAtIHNldCBwcGUgbXVsdGljYXN0IHJlZ2lzdGVyKi8KK3N0YXRpYyBpbnQgc2V0X2huYXRfbXRibChzdHJ1Y3QgcHBlX21jYXN0X2dyb3VwICpncm91cCwgdTMyIHBwZV9pZCwgaW50IGluZGV4KQoreworCXN0cnVjdCBwcGVfbWNhc3RfaCBtY2FzdF9oOworCXN0cnVjdCBwcGVfbWNhc3RfbCBtY2FzdF9sOworCXUxNiBtYWNfbG8gPSBncm91cC0+bWFjX2xvOworCXUzMiBtYWNfaGkgPSBncm91cC0+bWFjX2hpOworCXU4IG1jX3BvcnQgPSBncm91cC0+bWNfcG9ydDsKKwl2b2lkIF9faW9tZW0gKnJlZzsKKworCWlmIChwcGVfaWQgPj0gQ0ZHX1BQRV9OVU0pCisJCXJldHVybiAtRUlOVkFMOworCisJbWNhc3RfaC51LnZhbHVlID0gMDsKKwltY2FzdF9sLmFkZHIgPSAwOworCWlmIChtYWNfbG8gPT0gMHgwMTAwKQorCQltY2FzdF9oLnUuaW5mby5tY19tcHJlX3NlbCA9IDA7CisJZWxzZSBpZiAobWFjX2xvID09IDB4MzMzMykKKwkJbWNhc3RfaC51LmluZm8ubWNfbXByZV9zZWwgPSAxOworCisJbWNhc3RfaC51LmluZm8ubWNfcHhfZW4gPSBtY19wb3J0OworCW1jYXN0X2wuYWRkciA9IG1hY19oaTsKKwltY2FzdF9oLnUuaW5mby52YWxpZCA9IGdyb3VwLT52YWxpZDsKKwl0cmFjZV9wcmludGsoIiVzOmluZGV4PSVkLGdyb3VwIGluZm89MHgleCxhZGRyPTB4JXhcbiIsCisJCSAgICAgX19mdW5jX18sIGluZGV4LCBtY2FzdF9oLnUudmFsdWUsIG1jYXN0X2wuYWRkcik7CisJaWYgKGluZGV4IDwgMHgxMCkgeworCQlyZWcgPSBobmF0X3ByaXYtPnBwZV9iYXNlW3BwZV9pZF0gKyBQUEVfTUNBU1RfSF8wICsgKChpbmRleCkgKiA4KTsKKwkJd3JpdGVsKG1jYXN0X2gudS52YWx1ZSwgcmVnKTsKKwkJcmVnID0gaG5hdF9wcml2LT5wcGVfYmFzZVtwcGVfaWRdICsgUFBFX01DQVNUX0xfMCArICgoaW5kZXgpICogOCk7CisJCXdyaXRlbChtY2FzdF9sLmFkZHIsIHJlZyk7CisJfSBlbHNlIHsKKwkJaW5kZXggPSBpbmRleCAtIDB4MTA7CisJCXJlZyA9IGhuYXRfcHJpdi0+ZmVfYmFzZSArIFBQRV9NQ0FTVF9IXzEwICsgKChpbmRleCkgKiA4KTsKKwkJd3JpdGVsKG1jYXN0X2gudS52YWx1ZSwgcmVnKTsKKwkJcmVnID0gaG5hdF9wcml2LT5mZV9iYXNlICsgUFBFX01DQVNUX0xfMTAgKyAoKGluZGV4KSAqIDgpOworCQl3cml0ZWwobWNhc3RfaC51LnZhbHVlLCByZWcpOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGhuYXRfbWNhc3RfdGFibGVfdXBkYXRlIC0KKyAqCTEuZ2V0IGEgdmFsaWQgZ3JvdXAgZW50cnkKKyAqCTIudXBkYXRlIGdyb3VwIGluZm8KKyAqCQlhLnVwZGF0ZSBlaWYmb2lmIGNvdW50CisgKgkJYi5laWYgPT0wICYgb2lmID09IDAsZGVsZXRlIGl0IGZyb20gZ3JvdXAgdGFibGUKKyAqCQljLm9pZiAhPSAwLHNldCBtYyBmb3J3YXJkIHBvcnQgdG8gY3B1LGVsc2UgZG8gbm90IGZvcndhcmQgdG8gY3B1CisgKgkzLnNldCB0aGUgZ3JvdXAgaW5mbyB0byBwcGUgcmVnaXN0ZXIKKyAqLworc3RhdGljIGludCBobmF0X21jYXN0X3RhYmxlX3VwZGF0ZShpbnQgdHlwZSwgc3RydWN0IGJyX21kYl9lbnRyeSAqZW50cnkpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwl1MzIgbWFjX2hpID0gMDsKKwl1MTYgbWFjX2xvID0gMDsKKwlpbnQgaSwgaW5kZXg7CisJc3RydWN0IHBwZV9tY2FzdF9ncm91cCAqZ3JvdXA7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJZGV2ID0gZGV2X2dldF9ieV9pbmRleF9yY3UoJmluaXRfbmV0LCBlbnRyeS0+aWZpbmRleCk7CisJaWYgKCFkZXYpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKworCWdldF9tYWNfZnJvbV9tZGJfZW50cnkoZW50cnksICZtYWNfaGksICZtYWNfbG8pOworCWluZGV4ID0gbWNhc3RfZW50cnlfZ2V0KGVudHJ5LT52aWQsIG1hY19oaSk7CisJaWYgKGluZGV4ID09IC0xKQorCQlyZXR1cm4gLTE7CisKKwlncm91cCA9ICZobmF0X3ByaXYtPnBtY2FzdC0+bXRibFtpbmRleF07CisJZ3JvdXAtPm1hY19oaSA9IG1hY19oaTsKKwlncm91cC0+bWFjX2xvID0gbWFjX2xvOworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgUlRNX05FV01EQjoKKwkJaWYgKElTX0xBTihkZXYpIHx8IElTX1dBTihkZXYpKQorCQkJZ3JvdXAtPmVpZisrOworCQllbHNlCisJCQlncm91cC0+b2lmKys7CisJCWdyb3VwLT52aWQgPSBlbnRyeS0+dmlkOworCQlncm91cC0+dmFsaWQgPSB0cnVlOworCQlicmVhazsKKwljYXNlIFJUTV9ERUxNREI6CisJCWlmIChncm91cC0+dmFsaWQpIHsKKwkJCWlmIChJU19MQU4oZGV2KSB8fCBJU19XQU4oZGV2KSkKKwkJCQlncm91cC0+ZWlmLS07CisJCQllbHNlCisJCQkJZ3JvdXAtPm9pZi0tOworCQkJfQorCQlicmVhazsKKwl9CisJdHJhY2VfcHJpbnRrKCIlczpkZXZuYW1lPSVzLGVpZj0lZCxvaWY9JWRcbiIsIF9fZnVuY19fLAorCQkgICAgIGRldi0+bmFtZSwgZ3JvdXAtPmVpZiwgZ3JvdXAtPm9pZik7CisJaWYgKGdyb3VwLT52YWxpZCkgeworCQlpZiAoZ3JvdXAtPm9pZiAmJiBncm91cC0+ZWlmKQorCQkJLypldGgmd2lmaSBib3RoIGluIGdyb3VwLGZvcndhcmQgdG8gY3B1JkdETUExKi8KKwkJCWdyb3VwLT5tY19wb3J0ID0gKE1DQVNUX1RPX1BETUEgfHwgTUNBU1RfVE9fR0RNQTEpOworCQllbHNlIGlmIChncm91cC0+b2lmKQorCQkJLypvbmx5IHdpZmkgaW4gZ3JvdXAsZm9yd2FyZCB0byBjcHUgb25seSovCisJCQlncm91cC0+bWNfcG9ydCA9IE1DQVNUX1RPX1BETUE7CisJCWVsc2UKKwkJCS8qb25seSBldGggaW4gZ3JvdXAsZm9yd2FyZCB0byBHRE1BMSBvbmx5Ki8KKwkJCWdyb3VwLT5tY19wb3J0ID0gTUNBU1RfVE9fR0RNQTE7CisJCWlmICghZ3JvdXAtPm9pZiAmJiAhZ3JvdXAtPmVpZikKKwkJCS8qbm9ib2R5IGluIHRoaXMgZ3JvdXAsY2xlYXIgdGhlIGVudHJ5Ki8KKwkJCW1lbXNldChncm91cCwgMCwgc2l6ZW9mKHN0cnVjdCBwcGVfbWNhc3RfZ3JvdXApKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgQ0ZHX1BQRV9OVU07IGkrKykKKwkJCXNldF9obmF0X210YmwoZ3JvdXAsIGksIGluZGV4KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaG5hdF9tY2FzdF9ubG1zZ19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKKwlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKKwlzdHJ1Y3QgbmxhdHRyICpuZXN0LCAqbmVzdDIsICppbmZvOworCXN0cnVjdCBicl9wb3J0X21zZyAqYnBtOworCXN0cnVjdCBicl9tZGJfZW50cnkgKmVudHJ5OworCXN0cnVjdCBwcGVfbWNhc3RfdGFibGUgKnBtY2FzdDsKKwlzdHJ1Y3Qgc29jayAqc2s7CisKKwlwbWNhc3QgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHBwZV9tY2FzdF90YWJsZSwgd29yayk7CisJc2sgPSBwbWNhc3QtPm1zb2NrLT5zazsKKworCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJnNrLT5za19yZWNlaXZlX3F1ZXVlKSkpIHsKKwkJbmxoID0gbmxtc2dfaGRyKHNrYik7CisJCWlmICghbmxtc2dfb2sobmxoLCBza2ItPmxlbikpIHsKKwkJCWtmcmVlX3NrYihza2IpOworCQkJY29udGludWU7CisJCX0KKwkJYnBtID0gbmxtc2dfZGF0YShubGgpOworCQluZXN0ID0gbmxtc2dfZmluZF9hdHRyKG5saCwgc2l6ZW9mKGJwbSksIE1EQkFfTURCKTsKKwkJaWYgKCFuZXN0KSB7CisJCQlrZnJlZV9za2Ioc2tiKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCW5lc3QyID0gbmxhX2ZpbmRfbmVzdGVkKG5lc3QsIE1EQkFfTURCX0VOVFJZKTsKKwkJaWYgKG5lc3QyKSB7CisJCQlpbmZvID0gbmxhX2ZpbmRfbmVzdGVkKG5lc3QyLCBNREJBX01EQl9FTlRSWV9JTkZPKTsKKwkJCWlmICghaW5mbykgeworCQkJCWtmcmVlX3NrYihza2IpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQllbnRyeSA9IChzdHJ1Y3QgYnJfbWRiX2VudHJ5ICopbmxhX2RhdGEoaW5mbyk7CisJCQl0cmFjZV9wcmludGsoIiVzOmNtZD0weCUyeCxpZmluZGV4PTB4JXgsc3RhdGU9MHgleCIsCisJCQkJICAgICBfX2Z1bmNfXywgbmxoLT5ubG1zZ190eXBlLAorCQkJCSAgICAgZW50cnktPmlmaW5kZXgsIGVudHJ5LT5zdGF0ZSk7CisJCQl0cmFjZV9wcmludGsoInZpZD0weCV4LGlwPTB4JXgscHJvdG89MHgleFxuIiwKKwkJCQkgICAgIGVudHJ5LT52aWQsIGVudHJ5LT5hZGRyLnUuaXA0LAorCQkJCSAgICAgZW50cnktPmFkZHIucHJvdG8pOworCQkJaG5hdF9tY2FzdF90YWJsZV91cGRhdGUobmxoLT5ubG1zZ190eXBlLCBlbnRyeSk7CisJCX0KKwkJa2ZyZWVfc2tiKHNrYik7CisJfQorfQorCitzdGF0aWMgdm9pZCBobmF0X21jYXN0X25sbXNnX3JjdihzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IHBwZV9tY2FzdF90YWJsZSAqcG1jYXN0ID0gaG5hdF9wcml2LT5wbWNhc3Q7CisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnF1ZXVlID0gcG1jYXN0LT5xdWV1ZTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmsgPSAmcG1jYXN0LT53b3JrOworCisJcXVldWVfd29yayhxdWV1ZSwgd29yayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29ja2V0ICpobmF0X21jYXN0X25ldGxpbmtfb3BlbihzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IHNvY2tldCAqc29jayA9IE5VTEw7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc29ja2FkZHJfbmwgYWRkcjsKKworCXJldCA9IHNvY2tfY3JlYXRlX2tlcm4obmV0LCBQRl9ORVRMSU5LLCBTT0NLX1JBVywgTkVUTElOS19ST1VURSwgJnNvY2spOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXNvY2stPnNrLT5za19kYXRhX3JlYWR5ID0gaG5hdF9tY2FzdF9ubG1zZ19yY3Y7CisJYWRkci5ubF9mYW1pbHkgPSBQRl9ORVRMSU5LOworCWFkZHIubmxfcGlkID0gNjU1MzY7IC8qZml4IG1lOmhvdyB0byBnZXQgYW4gdW5pcXVlIGlkPyovCisJYWRkci5ubF9ncm91cHMgPSBSVE1HUlBfTURCOworCXJldCA9IHNvY2stPm9wcy0+YmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsIHNpemVvZihhZGRyKSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJcmV0dXJuIHNvY2s7CitvdXQ6CisJaWYgKHNvY2spCisJCXNvY2tfcmVsZWFzZShzb2NrKTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBobmF0X21jYXN0X2NoZWNrX3RpbWVzdGFtcChzdHJ1Y3QgdGltZXJfbGlzdCAqdCkKK3sKKwlzdHJ1Y3QgZm9lX2VudHJ5ICplbnRyeTsKKwlpbnQgaSwgaGFzaF9pbmRleDsKKwl1MTYgZV90cywgZm9lX3RzOworCisJZm9yIChpID0gMDsgaSA8IENGR19QUEVfTlVNOyBpKyspIHsKKwkJZm9yIChoYXNoX2luZGV4ID0gMDsgaGFzaF9pbmRleCA8IGhuYXRfcHJpdi0+Zm9lX2V0cnlfbnVtOyBoYXNoX2luZGV4KyspIHsKKwkJCWVudHJ5ID0gaG5hdF9wcml2LT5mb2VfdGFibGVfY3B1W2ldICsgaGFzaF9pbmRleDsKKwkJCWlmIChlbnRyeS0+YmZpYjEuc3RhID09IDEpIHsKKwkJCQllX3RzID0gKGVudHJ5LT5pcHY0X2huYXB0Lm1fdGltZXN0YW1wKSAmIDB4ZmZmZjsKKwkJCQlmb2VfdHMgPSBmb2VfdGltZXN0YW1wKGhuYXRfcHJpdik7CisJCQkJaWYgKChmb2VfdHMgLSBlX3RzKSA+IDB4MzAwMCkKKwkJCQkJZm9lX3RzID0gKH4oZm9lX3RzKSkgJiAweGZmZmY7CisJCQkJaWYgKGFicyhmb2VfdHMgLSBlX3RzKSA+IDIwKQorCQkJCQllbnRyeV9kZWxldGUoaSwgaGFzaF9pbmRleCk7CisJCQl9CisJCX0KKwl9CisJbW9kX3RpbWVyKCZobmF0X3ByaXYtPmhuYXRfbWNhc3RfY2hlY2tfdGltZXIsIGppZmZpZXMgKyAxMCAqIEhaKTsKK30KKworaW50IGhuYXRfbWNhc3RfZW5hYmxlKHUzMiBwcGVfaWQpCit7CisJc3RydWN0IHBwZV9tY2FzdF90YWJsZSAqcG1jYXN0OworCisJaWYgKHBwZV9pZCA+PSBDRkdfUFBFX05VTSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwbWNhc3QgPSBremFsbG9jKHNpemVvZigqcG1jYXN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwbWNhc3QpCisJCXJldHVybiAtMTsKKworCWlmIChobmF0X3ByaXYtPmRhdGEtPnZlcnNpb24gPT0gTVRLX0hOQVRfVjEpCisJCXBtY2FzdC0+bWF4X2VudHJ5ID0gMHgxMDsKKwllbHNlCisJCXBtY2FzdC0+bWF4X2VudHJ5ID0gTUFYX01DQVNUX0VOVFJZOworCisJSU5JVF9XT1JLKCZwbWNhc3QtPndvcmssIGhuYXRfbWNhc3Rfbmxtc2dfaGFuZGxlcik7CisJcG1jYXN0LT5xdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJwcGVfbWNhc3QiKTsKKwlpZiAoIXBtY2FzdC0+cXVldWUpCisJCWdvdG8gZXJyOworCisJcG1jYXN0LT5tc29jayA9IGhuYXRfbWNhc3RfbmV0bGlua19vcGVuKCZpbml0X25ldCk7CisJaWYgKCFwbWNhc3QtPm1zb2NrKQorCQlnb3RvIGVycjsKKworCWhuYXRfcHJpdi0+cG1jYXN0ID0gcG1jYXN0OworCisJLyogbXQ3NjI5IHNob3VsZCBjaGVja291dCBtY2FzdCBlbnRyeSBsaWZlIHRpbWUgbWFudWFseSAqLworCWlmIChobmF0X3ByaXYtPmRhdGEtPnZlcnNpb24gPT0gTVRLX0hOQVRfVjMpIHsKKwkJdGltZXJfc2V0dXAoJmhuYXRfcHJpdi0+aG5hdF9tY2FzdF9jaGVja190aW1lciwKKwkJCSAgICBobmF0X21jYXN0X2NoZWNrX3RpbWVzdGFtcCwgMCk7CisJCWhuYXRfcHJpdi0+aG5hdF9tY2FzdF9jaGVja190aW1lci5leHBpcmVzID0gamlmZmllczsKKwkJYWRkX3RpbWVyKCZobmF0X3ByaXYtPmhuYXRfbWNhc3RfY2hlY2tfdGltZXIpOworCX0KKworCS8qIEVuYWJsZSBtdWx0aWNhc3QgdGFibGUgbG9va3VwICovCisJY3Jfc2V0X2ZpZWxkKGhuYXRfcHJpdi0+cHBlX2Jhc2VbcHBlX2lkXSArIFBQRV9HTE9fQ0ZHLCBNQ0FTVF9UQl9FTiwgMSk7CisJLyogbXVsdGljYXN0IHBvcnQwIG1hcCB0byBQRE1BICovCisJY3Jfc2V0X2ZpZWxkKGhuYXRfcHJpdi0+cHBlX2Jhc2VbcHBlX2lkXSArIFBQRV9NQ0FTVF9QUFNFLCBNQ19QMF9QUFNFLCAwKTsKKwkvKiBtdWx0aWNhc3QgcG9ydDEgbWFwIHRvIEdNQUMxICovCisJY3Jfc2V0X2ZpZWxkKGhuYXRfcHJpdi0+cHBlX2Jhc2VbcHBlX2lkXSArIFBQRV9NQ0FTVF9QUFNFLCBNQ19QMV9QUFNFLCAxKTsKKwkvKiBtdWx0aWNhc3QgcG9ydDIgbWFwIHRvIEdNQUMyICovCisJY3Jfc2V0X2ZpZWxkKGhuYXRfcHJpdi0+cHBlX2Jhc2VbcHBlX2lkXSArIFBQRV9NQ0FTVF9QUFNFLCBNQ19QMl9QUFNFLCAyKTsKKwkvKiBtdWx0aWNhc3QgcG9ydDMgbWFwIHRvIFFETUEgKi8KKwljcl9zZXRfZmllbGQoaG5hdF9wcml2LT5wcGVfYmFzZVtwcGVfaWRdICsgUFBFX01DQVNUX1BQU0UsIE1DX1AzX1BQU0UsIDUpOworCisJcmV0dXJuIDA7CitlcnI6CisJaWYgKHBtY2FzdC0+cXVldWUpCisJCWRlc3Ryb3lfd29ya3F1ZXVlKHBtY2FzdC0+cXVldWUpOworCWlmIChwbWNhc3QtPm1zb2NrKQorCQlzb2NrX3JlbGVhc2UocG1jYXN0LT5tc29jayk7CisJa2ZyZWUocG1jYXN0KTsKKworCXJldHVybiAtMTsKK30KKworaW50IGhuYXRfbWNhc3RfZGlzYWJsZSh2b2lkKQoreworCXN0cnVjdCBwcGVfbWNhc3RfdGFibGUgKnBtY2FzdCA9IGhuYXRfcHJpdi0+cG1jYXN0OworCisJaWYgKCFwbWNhc3QpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGhuYXRfcHJpdi0+ZGF0YS0+dmVyc2lvbiA9PSBNVEtfSE5BVF9WMykKKwkJZGVsX3RpbWVyX3N5bmMoJmhuYXRfcHJpdi0+aG5hdF9tY2FzdF9jaGVja190aW1lcik7CisKKwlmbHVzaF93b3JrKCZwbWNhc3QtPndvcmspOworCWRlc3Ryb3lfd29ya3F1ZXVlKHBtY2FzdC0+cXVldWUpOworCXNvY2tfcmVsZWFzZShwbWNhc3QtPm1zb2NrKTsKKwlrZnJlZShwbWNhc3QpOworCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2huYXQvaG5hdF9tY2FzdC5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfaG5hdC9obmF0X21jYXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ1YjVkMQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2huYXQvaG5hdF9tY2FzdC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgWmhpcWlhbmcgWWFuZyA8emhpcWlhbmcueWFuZ0BtZWRpYXRlay5jb20+CisgKi8KKworI2lmbmRlZiBORl9ITkFUX01DQVNUX0gKKyNkZWZpbmUgTkZfSE5BVF9NQ0FTVF9ICisKKyNkZWZpbmUgUlRNR1JQX0lQVjRfTVJPVVRFIDB4MjAKKyNkZWZpbmUgUlRNR1JQX01EQiAweDIwMDAwMDAKKworI2RlZmluZSBNQVhfTUNBU1RfRU5UUlkgNjQKKworI2RlZmluZSBNQ0FTVF9UT19QRE1BICgweDEgPDwgMCkKKyNkZWZpbmUgTUNBU1RfVE9fR0RNQTEgKDB4MSA8PCAxKQorI2RlZmluZSBNQ0FTVF9UT19HRE1BMiAoMHgxIDw8IDIpCisKK3N0cnVjdCBwcGVfbWNhc3RfZ3JvdXAgeworCXUzMiBtYWNfaGk7IC8qbXVsdGljYXN0IG1hYyBhZGRyKi8KKwl1MTYgbWFjX2xvOyAvKm11bHRpY2FzdCBtYWMgYWRkciovCisJdTE2IHZpZDsKKwl1OCBtY19wb3J0OyAvKjE6Zm9yd2FyZCB0byBjcHUsMjpmb3J3YXJkIHRvIEdETUExLDQ6Zm9yd2FyZCB0byBHRE1BMiovCisJdTggZWlmOyAvKm51bSBvZiBldGggaWYgYWRkZWQgdG8gbXVsdGkgZ3JvdXAuICovCisJdTggb2lmOyAvKiBudW0gb2Ygb3RoZXIgaWYgYWRkZWQgdG8gbXVsdGkgZ3JvdXAgLGV4IHdpZmkuKi8KKwlib29sIHZhbGlkOworfTsKKworc3RydWN0IHBwZV9tY2FzdF90YWJsZSB7CisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnF1ZXVlOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCXN0cnVjdCBzb2NrZXQgKm1zb2NrOworCXN0cnVjdCBwcGVfbWNhc3RfZ3JvdXAgbXRibFtNQVhfTUNBU1RfRU5UUlldOworCXU4IG1heF9lbnRyeTsKK307CisKK3N0cnVjdCBwcGVfbWNhc3RfaCB7CisJdW5pb24geworCQl1MzIgdmFsdWU7CisJCXN0cnVjdCB7CisJCQl1MzIgbWNfdmlkOjEyOworCQkJdTMyIG1jX3Fvc19xaWQ1NDoyOyAvKiBtdDc2MjIgb25seSAqLworCQkJdTMyIHZhbGlkOjE7CisJCQl1MzIgcmV2MToxOworCQkJLyowOmZvcndhcmQgdG8gY3B1LDE6Zm9yd2FyZCB0byBHRE1BMSovCisJCQl1MzIgbWNfcHhfZW46NDsKKwkJCXUzMiBtY19tcHJlX3NlbDoyOyAvKiAwPTAxOjAwLCAyPTMzOjMzICovCisJCQl1MzIgbWNfdmlkX2NtcDoxOworCQkJdTMyIHJldjI6MTsKKwkJCXUzMiBtY19weF9xb3NfZW46NDsKKwkJCXUzMiBtY19xb3NfcWlkOjQ7CisJCX0gaW5mbzsKKwl9IHU7Cit9OworCitzdHJ1Y3QgcHBlX21jYXN0X2wgeworCXUzMiBhZGRyOworfTsKKworaW50IGhuYXRfbWNhc3RfZW5hYmxlKHUzMiBwcGVfaWQpOworaW50IGhuYXRfbWNhc3RfZGlzYWJsZSh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19obmF0L2huYXRfbmZfaG9vay5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfaG5hdC9obmF0X25mX2hvb2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDI3NWEwCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfaG5hdC9obmF0X25mX2hvb2suYwpAQCAtMCwwICsxLDIyODggQEAKKy8qICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgU2VhbiBXYW5nIDxzZWFuLndhbmdAbWVkaWF0ZWsuY29tPgorICogICBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBKb2huIENyaXNwaW4gPGJsb2dpY0BvcGVud3J0Lm9yZz4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY2Lmg+CisKKyNpbmNsdWRlIDxuZXQvYXJwLmg+CisjaW5jbHVkZSA8bmV0L25laWdoYm91ci5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPgorI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CisjaW5jbHVkZSA8bmV0L2lwNl9yb3V0ZS5oPgorI2luY2x1ZGUgPG5ldC9pcC5oPgorI2luY2x1ZGUgPG5ldC90Y3AuaD4KKyNpbmNsdWRlIDxuZXQvdWRwLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hY2N0Lmg+CisKKyNpbmNsdWRlICJuZl9obmF0X210ay5oIgorI2luY2x1ZGUgImhuYXQuaCIKKworI2luY2x1ZGUgIi4uL210a19ldGhfc29jLmgiCisKKyNkZWZpbmUgZG9fZ2UyZXh0X2Zhc3QoZGV2LCBza2IpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJKChJU19MQU4oZGV2KSB8fCBJU19XQU4oZGV2KSB8fCBJU19QUEQoZGV2KSkgJiYgXAorCSBza2JfaG5hdF9pc19oYXNoZWQoc2tiKSAmJiBcCisJIHNrYl9obmF0X3JlYXNvbihza2IpID09IEhJVF9CSU5EX0ZPUkNFX1RPX0NQVSkKKyNkZWZpbmUgZG9fZXh0MmdlX2Zhc3RfbGVhcm4oZGV2LCBza2IpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJKElTX1BQRChkZXYpICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJIChza2JfaG5hdF9zcG9ydChza2IpID09IE5SX1BETUFfUE9SVCB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgIHNrYl9obmF0X3Nwb3J0KHNrYikgPT0gTlJfUURNQV9QT1JUKSAmJiAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgKChnZXRfZGV2X2Zyb21faW5kZXgoc2tiLT52bGFuX3RjaSAmIFZMQU5fVklEX01BU0spKSB8fCAgIFwKKwkJIGdldF93YW5kZXZfZnJvbV9pbmRleChza2ItPnZsYW5fdGNpICYgVkxBTl9WSURfTUFTSykpKQorI2RlZmluZSBkb19tYXBlX3cybF9mYXN0KGRldiwgc2tiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJKG1hcGVfdG9nZ2xlICYmIElTX1dBTihkZXYpICYmICghaXNfZnJvbV9tYXBlKHNrYikpKQorCitzdGF0aWMgc3RydWN0IGlwdjZoZHIgbWFwZV9sMndfdjZoOworc3RhdGljIHN0cnVjdCBpcHY2aGRyIG1hcGVfdzJsX3Y2aDsKK3N0YXRpYyBpbmxpbmUgdWludDhfdCBnZXRfd2lmaV9ob29rX2lmX2luZGV4X2Zyb21fZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAxOyBpIDwgTUFYX0lGX05VTTsgaSsrKSB7CisJCWlmIChobmF0X3ByaXYtPndpZmlfaG9va19pZltpXSA9PSBkZXYpCisJCQlyZXR1cm4gaTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ2V0X2V4dF9kZXZpY2VfbnVtYmVyKHZvaWQpCit7CisJaW50IGksIG51bWJlciA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0VYVF9ERVZTICYmIGhuYXRfcHJpdi0+ZXh0X2lmW2ldOyBpKyspCisJCW51bWJlciArPSAxOworCXJldHVybiBudW1iZXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZpbmRfZXh0aWZfZnJvbV9kZXZuYW1lKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaW50IGk7CisJc3RydWN0IGV4dGRldl9lbnRyeSAqZXh0X2VudHJ5OworCisJZm9yIChpID0gMDsgaSA8IE1BWF9FWFRfREVWUyAmJiBobmF0X3ByaXYtPmV4dF9pZltpXTsgaSsrKSB7CisJCWV4dF9lbnRyeSA9IGhuYXRfcHJpdi0+ZXh0X2lmW2ldOworCQlpZiAoIXN0cmNtcChuYW1lLCBleHRfZW50cnktPm5hbWUpKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBnZXRfaW5kZXhfZnJvbV9kZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgZXh0ZGV2X2VudHJ5ICpleHRfZW50cnk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0VYVF9ERVZTICYmIGhuYXRfcHJpdi0+ZXh0X2lmW2ldOyBpKyspIHsKKwkJZXh0X2VudHJ5ID0gaG5hdF9wcml2LT5leHRfaWZbaV07CisJCWlmIChkZXYgPT0gZXh0X2VudHJ5LT5kZXYpCisJCQlyZXR1cm4gZXh0X2VudHJ5LT5kZXYtPmlmaW5kZXg7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICpnZXRfZGV2X2Zyb21faW5kZXgoaW50IGluZGV4KQoreworCWludCBpOworCXN0cnVjdCBleHRkZXZfZW50cnkgKmV4dF9lbnRyeTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfRVhUX0RFVlMgJiYgaG5hdF9wcml2LT5leHRfaWZbaV07IGkrKykgeworCQlleHRfZW50cnkgPSBobmF0X3ByaXYtPmV4dF9pZltpXTsKKwkJaWYgKGV4dF9lbnRyeS0+ZGV2ICYmIGluZGV4ID09IGV4dF9lbnRyeS0+ZGV2LT5pZmluZGV4KSB7CisJCQlkZXYgPSBleHRfZW50cnktPmRldjsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiBkZXY7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2UgKmdldF93YW5kZXZfZnJvbV9pbmRleChpbnQgaW5kZXgpCit7CisJaWYgKCFobmF0X3ByaXYtPmdfd2FuZGV2KQorCQlobmF0X3ByaXYtPmdfd2FuZGV2ID0gZGV2X2dldF9ieV9uYW1lKCZpbml0X25ldCwgaG5hdF9wcml2LT53YW4pOworCisJaWYgKGhuYXRfcHJpdi0+Z193YW5kZXYgJiYgaG5hdF9wcml2LT5nX3dhbmRldi0+aWZpbmRleCA9PSBpbmRleCkKKwkJcmV0dXJuIGhuYXRfcHJpdi0+Z193YW5kZXY7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGV4dGlmX3NldF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgZXh0ZGV2X2VudHJ5ICpleHRfZW50cnk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0VYVF9ERVZTICYmIGhuYXRfcHJpdi0+ZXh0X2lmW2ldOyBpKyspIHsKKwkJZXh0X2VudHJ5ID0gaG5hdF9wcml2LT5leHRfaWZbaV07CisJCWlmICghc3RyY21wKGRldi0+bmFtZSwgZXh0X2VudHJ5LT5uYW1lKSAmJiAhZXh0X2VudHJ5LT5kZXYpIHsKKwkJCWRldl9ob2xkKGRldik7CisJCQlleHRfZW50cnktPmRldiA9IGRldjsKKwkJCXByX2luZm8oIiVzKCVzKVxuIiwgX19mdW5jX18sIGRldi0+bmFtZSk7CisKKwkJCXJldHVybiBleHRfZW50cnktPmRldi0+aWZpbmRleDsKKwkJfQorCX0KKworCXJldHVybiAtMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZXh0aWZfcHV0X2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWludCBpOworCXN0cnVjdCBleHRkZXZfZW50cnkgKmV4dF9lbnRyeTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfRVhUX0RFVlMgJiYgaG5hdF9wcml2LT5leHRfaWZbaV07IGkrKykgeworCQlleHRfZW50cnkgPSBobmF0X3ByaXYtPmV4dF9pZltpXTsKKwkJaWYgKGV4dF9lbnRyeS0+ZGV2ID09IGRldikgeworCQkJZXh0X2VudHJ5LT5kZXYgPSBOVUxMOworCQkJZGV2X3B1dChkZXYpOworCQkJcHJfaW5mbygiJXMoJXMpXG4iLCBfX2Z1bmNfXywgZGV2LT5uYW1lKTsKKworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1cm4gLTE7Cit9CisKK2ludCBleHRfaWZfYWRkKHN0cnVjdCBleHRkZXZfZW50cnkgKmV4dF9lbnRyeSkKK3sKKwlpbnQgbGVuID0gZ2V0X2V4dF9kZXZpY2VfbnVtYmVyKCk7CisKKwlpZiAobGVuIDwgTUFYX0VYVF9ERVZTKQorCQlobmF0X3ByaXYtPmV4dF9pZltsZW4rK10gPSBleHRfZW50cnk7CisKKwlyZXR1cm4gbGVuOworfQorCitpbnQgZXh0X2lmX2RlbChzdHJ1Y3QgZXh0ZGV2X2VudHJ5ICpleHRfZW50cnkpCit7CisJaW50IGksIGo7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0VYVF9ERVZTOyBpKyspIHsKKwkJaWYgKGhuYXRfcHJpdi0+ZXh0X2lmW2ldID09IGV4dF9lbnRyeSkgeworCQkJZm9yIChqID0gaTsgaG5hdF9wcml2LT5leHRfaWZbal0gJiYgaiA8IE1BWF9FWFRfREVWUyAtIDE7IGorKykKKwkJCQlobmF0X3ByaXYtPmV4dF9pZltqXSA9IGhuYXRfcHJpdi0+ZXh0X2lmW2ogKyAxXTsKKwkJCWhuYXRfcHJpdi0+ZXh0X2lmW2pdID0gTlVMTDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIGk7Cit9CisKK3ZvaWQgZm9lX2NsZWFyX2FsbF9iaW5kX2VudHJpZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpbnQgaSwgaGFzaF9pbmRleDsKKwlzdHJ1Y3QgZm9lX2VudHJ5ICplbnRyeTsKKworCWlmICghSVNfTEFOKGRldikgJiYgIUlTX1dBTihkZXYpICYmCisJICAgICFmaW5kX2V4dGlmX2Zyb21fZGV2bmFtZShkZXYtPm5hbWUpICYmCisJICAgICFkZXYtPm5ldGRldl9vcHMtPm5kb19mbG93X29mZmxvYWRfY2hlY2spCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBDRkdfUFBFX05VTTsgaSsrKSB7CisJCWNyX3NldF9maWVsZChobmF0X3ByaXYtPnBwZV9iYXNlW2ldICsgUFBFX1RCX0NGRywKKwkJCSAgICAgU01BLCBTTUFfT05MWV9GV0RfQ1BVKTsKKworCQlmb3IgKGhhc2hfaW5kZXggPSAwOyBoYXNoX2luZGV4IDwgaG5hdF9wcml2LT5mb2VfZXRyeV9udW07IGhhc2hfaW5kZXgrKykgeworCQkJZW50cnkgPSBobmF0X3ByaXYtPmZvZV90YWJsZV9jcHVbaV0gKyBoYXNoX2luZGV4OworCQkJaWYgKGVudHJ5LT5iZmliMS5zdGF0ZSA9PSBCSU5EKSB7CisJCQkJZW50cnktPmlwdjRfaG5hcHQudWRpYjEuc3RhdGUgPSBJTlZBTElEOworCQkJCWVudHJ5LT5pcHY0X2huYXB0LnVkaWIxLnRpbWVfc3RhbXAgPQorCQkJCQlyZWFkbCgoaG5hdF9wcml2LT5mZV9iYXNlICsgMHgwMDEwKSkgJiAweEZGOworCQkJfQorCQl9CisJfQorCisJLyogY2xlYXIgSFdOQVQgY2FjaGUgKi8KKwlobmF0X2NhY2hlX2VibCgxKTsKKworCW1vZF90aW1lcigmaG5hdF9wcml2LT5obmF0X3NtYV9idWlsZF9lbnRyeV90aW1lciwgamlmZmllcyArIDMgKiBIWik7Cit9CisKK3N0YXRpYyB2b2lkIGdtYWNfcHBlX2Z3ZF9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpZiAoSVNfTEFOKGRldikgfHwgSVNfR01BQzFfTU9ERSkKKwkJc2V0X2dtYWNfcHBlX2Z3ZCgwLCAxKTsKKwllbHNlIGlmIChJU19XQU4oZGV2KSkKKwkJc2V0X2dtYWNfcHBlX2Z3ZCgxLCAxKTsKK30KKworaW50IG5mX2huYXRfbmV0ZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLCB1bnNpZ25lZCBsb25nIGV2ZW50LAorCQkJICAgIHZvaWQgKnB0cikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCisJZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBORVRERVZfVVA6CisJCWdtYWNfcHBlX2Z3ZF9lbmFibGUoZGV2KTsKKworCQlleHRpZl9zZXRfZGV2KGRldik7CisKKwkJYnJlYWs7CisJY2FzZSBORVRERVZfR09JTkdfRE9XTjoKKwkJaWYgKCFnZXRfd2lmaV9ob29rX2lmX2luZGV4X2Zyb21fZGV2KGRldikpCisJCQlleHRpZl9wdXRfZGV2KGRldik7CisKKwkJZm9lX2NsZWFyX2FsbF9iaW5kX2VudHJpZXMoZGV2KTsKKworCQlicmVhazsKKwljYXNlIE5FVERFVl9VTlJFR0lTVEVSOgorCQlpZiAoaG5hdF9wcml2LT5nX3BwZGV2ID09IGRldikgeworCQkJaG5hdF9wcml2LT5nX3BwZGV2ID0gTlVMTDsKKwkJCWRldl9wdXQoZGV2KTsKKwkJfQorCQlpZiAoaG5hdF9wcml2LT5nX3dhbmRldiA9PSBkZXYpIHsKKwkJCWhuYXRfcHJpdi0+Z193YW5kZXYgPSBOVUxMOworCQkJZGV2X3B1dChkZXYpOworCQl9CisKKwkJYnJlYWs7CisJY2FzZSBORVRERVZfUkVHSVNURVI6CisJCWlmIChJU19QUEQoZGV2KSAmJiAhaG5hdF9wcml2LT5nX3BwZGV2KQorCQkJaG5hdF9wcml2LT5nX3BwZGV2ID0gZGV2X2dldF9ieV9uYW1lKCZpbml0X25ldCwgaG5hdF9wcml2LT5wcGQpOworCQlpZiAoSVNfV0FOKGRldikgJiYgIWhuYXRfcHJpdi0+Z193YW5kZXYpCisJCQlobmF0X3ByaXYtPmdfd2FuZGV2ID0gZGV2X2dldF9ieV9uYW1lKCZpbml0X25ldCwgaG5hdF9wcml2LT53YW4pOworCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKwordm9pZCBmb2VfY2xlYXJfZW50cnkoc3RydWN0IG5laWdoYm91ciAqbmVpZ2gpCit7CisJdTMyICpkYWRkciA9ICh1MzIgKiluZWlnaC0+cHJpbWFyeV9rZXk7CisJdW5zaWduZWQgY2hhciBoX2Rlc3RbRVRIX0FMRU5dOworCXN0cnVjdCBmb2VfZW50cnkgKmVudHJ5OworCWludCBpLCBoYXNoX2luZGV4OworCXUzMiBkaXA7CisKKwlkaXAgPSAodTMyKSgqZGFkZHIpOworCisJZm9yIChpID0gMDsgaSA8IENGR19QUEVfTlVNOyBpKyspIHsKKwkJZm9yIChoYXNoX2luZGV4ID0gMDsgaGFzaF9pbmRleCA8IGhuYXRfcHJpdi0+Zm9lX2V0cnlfbnVtOyBoYXNoX2luZGV4KyspIHsKKwkJCWVudHJ5ID0gaG5hdF9wcml2LT5mb2VfdGFibGVfY3B1W2ldICsgaGFzaF9pbmRleDsKKwkJCWlmIChlbnRyeS0+YmZpYjEuc3RhdGUgPT0gQklORCAmJgorCQkJICAgIGVudHJ5LT5pcHY0X2huYXB0Lm5ld19kaXAgPT0gbnRvaGwoZGlwKSkgeworCQkJCSooKHUzMiAqKWhfZGVzdCkgPSBzd2FiMzIoZW50cnktPmlwdjRfaG5hcHQuZG1hY19oaSk7CisJCQkJKigodTE2ICopJmhfZGVzdFs0XSkgPQorCQkJCQlzd2FiMTYoZW50cnktPmlwdjRfaG5hcHQuZG1hY19sbyk7CisJCQkJaWYgKHN0cm5jbXAoaF9kZXN0LCBuZWlnaC0+aGEsIEVUSF9BTEVOKSAhPSAwKSB7CisJCQkJCXByX2luZm8oIiVzOiBzdGF0ZT0lZFxuIiwgX19mdW5jX18sCisJCQkJCQluZWlnaC0+bnVkX3N0YXRlKTsKKwkJCQkJY3Jfc2V0X2ZpZWxkKGhuYXRfcHJpdi0+cHBlX2Jhc2VbaV0gKyBQUEVfVEJfQ0ZHLAorCQkJCQkJICAgICBTTUEsIFNNQV9PTkxZX0ZXRF9DUFUpOworCisJCQkJCWVudHJ5LT5pcHY0X2huYXB0LnVkaWIxLnN0YXRlID0gSU5WQUxJRDsKKwkJCQkJZW50cnktPmlwdjRfaG5hcHQudWRpYjEudGltZV9zdGFtcCA9CisJCQkJCQlyZWFkbCgoaG5hdF9wcml2LT5mZV9iYXNlICsgMHgwMDEwKSkgJiAweEZGOworCisJCQkJCS8qIGNsZWFyIEhXTkFUIGNhY2hlICovCisJCQkJCWhuYXRfY2FjaGVfZWJsKDEpOworCisJCQkJCW1vZF90aW1lcigmaG5hdF9wcml2LT5obmF0X3NtYV9idWlsZF9lbnRyeV90aW1lciwKKwkJCQkJCSAgamlmZmllcyArIDMgKiBIWik7CisKKwkJCQkJcHJfaW5mbygiRGVsZXRlIG9sZCBlbnRyeTogZGlwID0lcEk0XG4iLCAmZGlwKTsKKwkJCQkJcHJfaW5mbygiT2xkIG1hYz0gJXBNXG4iLCBoX2Rlc3QpOworCQkJCQlwcl9pbmZvKCJOZXcgbWFjPSAlcE1cbiIsIG5laWdoLT5oYSk7CisJCQkJfQorCQkJfQorCQl9CisJfQorfQorCitpbnQgbmZfaG5hdF9uZXRldmVudF9oYW5kbGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLCB1bnNpZ25lZCBsb25nIGV2ZW50LAorCQkJICAgICB2b2lkICpwdHIpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CisJc3RydWN0IG5laWdoYm91ciAqbmVpZ2ggPSBOVUxMOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTkVURVZFTlRfTkVJR0hfVVBEQVRFOgorCQluZWlnaCA9IHB0cjsKKwkJZGV2ID0gbmVpZ2gtPmRldjsKKwkJaWYgKGRldikKKwkJCWZvZV9jbGVhcl9lbnRyeShuZWlnaCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKwordW5zaWduZWQgaW50IG1hcGVfYWRkX2lwdjZfaGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcHY2aGRyIG1hcGVfaXA2aCkKK3sKKwlzdHJ1Y3QgZXRoaGRyICpldGggPSBOVUxMOworCXN0cnVjdCBpcHY2aGRyICppcDZoID0gTlVMTDsKKwlzdHJ1Y3QgaXBoZHIgKmlwaCA9IE5VTEw7CisKKwlpZiAoc2tiX2hlYWRyb29tKHNrYikgPCBJUFY2X0hEUl9MRU4gfHwgc2tiX3NoYXJlZChza2IpIHx8CisJICAgIChza2JfY2xvbmVkKHNrYikgJiYgIXNrYl9jbG9uZV93cml0YWJsZShza2IsIDApKSkgeworCQlyZXR1cm4gLTE7CisJfQorCisJLyogcG9pbnQgdG8gTDMgKi8KKwltZW1jcHkoc2tiLT5kYXRhIC0gSVBWNl9IRFJfTEVOIC0gRVRIX0hMRU4sIHNrYl9wdXNoKHNrYiwgRVRIX0hMRU4pLCBFVEhfSExFTik7CisJbWVtY3B5KHNrYl9wdXNoKHNrYiwgSVBWNl9IRFJfTEVOIC0gRVRIX0hMRU4pLCAmbWFwZV9pcDZoLCBJUFY2X0hEUl9MRU4pOworCisJZXRoID0gKHN0cnVjdCBldGhoZHIgKikoc2tiLT5kYXRhIC0gRVRIX0hMRU4pOworCWV0aC0+aF9wcm90byA9IGh0b25zKEVUSF9QX0lQVjYpOworCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTsKKworCWlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoc2tiLT5kYXRhICsgSVBWNl9IRFJfTEVOKTsKKwlpcDZoID0gKHN0cnVjdCBpcHY2aGRyICopKHNrYi0+ZGF0YSk7CisJaXA2aC0+cGF5bG9hZF9sZW4gPSBpcGgtPnRvdF9sZW47IC8qIG1heWJlIGRpZmZlcmVudCB3aXRoIGlwdjQgKi8KKworCXNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAwKTsKKwlza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiLCBpcGgtPmlobCAqIDQgKyBJUFY2X0hEUl9MRU4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBmaXhfc2tiX3BhY2tldF90eXBlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGV0aGhkciAqZXRoKQoreworCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKKwlpZiAodW5saWtlbHkoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZXRoLT5oX2Rlc3QpKSkgeworCQlpZiAoZXRoZXJfYWRkcl9lcXVhbF82NGJpdHMoZXRoLT5oX2Rlc3QsIGRldi0+YnJvYWRjYXN0KSkKKwkJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfQlJPQURDQVNUOworCQllbHNlCisJCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX01VTFRJQ0FTVDsKKwl9Cit9CisKK3Vuc2lnbmVkIGludCBkb19obmF0X2V4dF90b19nZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJCQkgICAgICAgY29uc3QgY2hhciAqZnVuYykKK3sKKwlpZiAoaG5hdF9wcml2LT5nX3BwZGV2ICYmIGhuYXRfcHJpdi0+Z19wcGRldi0+ZmxhZ3MgJiBJRkZfVVApIHsKKwkJdTE2IHZsYW5faWQgPSAwOworCQlza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgMCk7CisJCXNrYl9wdXNoKHNrYiwgRVRIX0hMRU4pOworCQlzZXRfdG9fcHBlKHNrYik7CisKKwkJdmxhbl9pZCA9IHNrYl92bGFuX3RhZ19nZXRfaWQoc2tiKTsKKwkJaWYgKHZsYW5faWQpIHsKKwkJCXNrYiA9IHZsYW5faW5zZXJ0X3RhZyhza2IsIHNrYi0+dmxhbl9wcm90bywgc2tiLT52bGFuX3RjaSk7CisJCQlpZiAoIXNrYikKKwkJCQlyZXR1cm4gLTE7CisJCX0KKworCQkvKnNldCB3aGVyZSB3ZSBjb21lIGZyb20qLworCQlza2ItPnZsYW5fcHJvdG8gPSBodG9ucyhFVEhfUF84MDIxUSk7CisJCXNrYi0+dmxhbl90Y2kgPQorCQkJKFZMQU5fQ0ZJX01BU0sgfCAoaW4tPmlmaW5kZXggJiBWTEFOX1ZJRF9NQVNLKSk7CisJCXRyYWNlX3ByaW50aygKKwkJCSIlczogdmxhbl9wcm90PTB4JXgsIHZsYW5fdGNpPSV4LCBpbi0+bmFtZT0lcywgc2tiLT5kZXYtPm5hbWU9JXNcbiIsCisJCQlfX2Z1bmNfXywgbnRvaHMoc2tiLT52bGFuX3Byb3RvKSwgc2tiLT52bGFuX3RjaSwKKwkJCWluLT5uYW1lLCBobmF0X3ByaXYtPmdfcHBkZXYtPm5hbWUpOworCQlza2ItPmRldiA9IGhuYXRfcHJpdi0+Z19wcGRldjsKKwkJZGV2X3F1ZXVlX3htaXQoc2tiKTsKKwkJdHJhY2VfcHJpbnRrKCIlczogY2FsbGVkIGZyb20gJXMgc3VjY2Vzc2Z1bGx5XG4iLCBfX2Z1bmNfXywgZnVuYyk7CisJCXJldHVybiAwOworCX0KKworCXRyYWNlX3ByaW50aygiJXM6IGNhbGxlZCBmcm9tICVzIGZhaWxcbiIsIF9fZnVuY19fLCBmdW5jKTsKKwlyZXR1cm4gLTE7Cit9CisKK3Vuc2lnbmVkIGludCBkb19obmF0X2V4dF90b19nZTIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgY2hhciAqZnVuYykKK3sKKwlzdHJ1Y3QgZXRoaGRyICpldGggPSBldGhfaGRyKHNrYik7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZm9lX2VudHJ5ICplbnRyeTsKKworCXRyYWNlX3ByaW50aygiJXM6IHZsYW5fcHJvdD0weCV4LCB2bGFuX3RjaT0leFxuIiwgX19mdW5jX18sCisJCSAgICAgbnRvaHMoc2tiLT52bGFuX3Byb3RvKSwgc2tiLT52bGFuX3RjaSk7CisKKwlkZXYgPSBnZXRfZGV2X2Zyb21faW5kZXgoc2tiLT52bGFuX3RjaSAmIFZMQU5fVklEX01BU0spOworCisJaWYgKGRldikgeworCQkvKnNldCB3aGVyZSB3ZSB0byBnbyovCisJCXNrYi0+ZGV2ID0gZGV2OworCQlza2ItPnZsYW5fcHJvdG8gPSAwOworCQlza2ItPnZsYW5fdGNpID0gMDsKKworCQlpZiAobnRvaHMoZXRoLT5oX3Byb3RvKSA9PSBFVEhfUF84MDIxUSkgeworCQkJc2tiID0gc2tiX3ZsYW5fdW50YWcoc2tiKTsKKwkJCWlmICh1bmxpa2VseSghc2tiKSkKKwkJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAoSVNfQk9ORF9NT0RFICYmCisJCSAgICAoKChobmF0X3ByaXYtPmRhdGEtPnZlcnNpb24gPT0gTVRLX0hOQVRfVjQpICYmCisJCQkJKHNrYl9obmF0X2VudHJ5KHNrYikgIT0gMHg3ZmZmKSkgfHwKKwkJICAgICAoKGhuYXRfcHJpdi0+ZGF0YS0+dmVyc2lvbiAhPSBNVEtfSE5BVF9WNCkgJiYKKwkJCQkoc2tiX2huYXRfZW50cnkoc2tiKSAhPSAweDNmZmYpKSkpCisJCQlza2Jfc2V0X2hhc2goc2tiLCBza2JfaG5hdF9lbnRyeShza2IpID4+IDEsIFBLVF9IQVNIX1RZUEVfTDQpOworCisJCXNldF9mcm9tX2V4dGdlKHNrYik7CisJCWZpeF9za2JfcGFja2V0X3R5cGUoc2tiLCBza2ItPmRldiwgZXRoKTsKKwkJbmV0aWZfcngoc2tiKTsKKwkJdHJhY2VfcHJpbnRrKCIlczogY2FsbGVkIGZyb20gJXMgc3VjY2Vzc2Z1bGx5XG4iLCBfX2Z1bmNfXywKKwkJCSAgICAgZnVuYyk7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCS8qIE1hcEUgV0FOIC0tPiBMQU4vV0xBTiBQaW5nUG9uZy4gKi8KKwkJZGV2ID0gZ2V0X3dhbmRldl9mcm9tX2luZGV4KHNrYi0+dmxhbl90Y2kgJiBWTEFOX1ZJRF9NQVNLKTsKKwkJaWYgKG1hcGVfdG9nZ2xlICYmIGRldikgeworCQkJaWYgKCFtYXBlX2FkZF9pcHY2X2hkcihza2IsIG1hcGVfdzJsX3Y2aCkpIHsKKwkJCQlza2Jfc2V0X21hY19oZWFkZXIoc2tiLCAtRVRIX0hMRU4pOworCQkJCXNrYi0+ZGV2ID0gZGV2OworCQkJCXNldF9mcm9tX21hcGUoc2tiKTsKKwkJCQlza2ItPnZsYW5fcHJvdG8gPSAwOworCQkJCXNrYi0+dmxhbl90Y2kgPSAwOworCQkJCWZpeF9za2JfcGFja2V0X3R5cGUoc2tiLCBza2ItPmRldiwgZXRoX2hkcihza2IpKTsKKwkJCQllbnRyeSA9ICZobmF0X3ByaXYtPmZvZV90YWJsZV9jcHVbc2tiX2huYXRfcHBlKHNrYildW3NrYl9obmF0X2VudHJ5KHNrYildOworCQkJCWVudHJ5LT5iZmliMS5wa3RfdHlwZSA9IElQVjRfSE5BUFQ7CisJCQkJbmV0aWZfcngoc2tiKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCQl0cmFjZV9wcmludGsoIiVzOiBjYWxsZWQgZnJvbSAlcyBmYWlsXG4iLCBfX2Z1bmNfXywgZnVuYyk7CisJCXJldHVybiAtMTsKKwl9Cit9CisKK3Vuc2lnbmVkIGludCBkb19obmF0X2dlX3RvX2V4dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBjaGFyICpmdW5jKQoreworCS8qc2V0IHdoZXJlIHdlIHRvIGdvKi8KKwl1OCBpbmRleDsKKwlzdHJ1Y3QgZm9lX2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCisJZW50cnkgPSAmaG5hdF9wcml2LT5mb2VfdGFibGVfY3B1W3NrYl9obmF0X3BwZShza2IpXVtza2JfaG5hdF9lbnRyeShza2IpXTsKKworCWlmIChJU19JUFY0X0dSUChlbnRyeSkpCisJCWluZGV4ID0gZW50cnktPmlwdjRfaG5hcHQuYWN0X2RwOworCWVsc2UKKwkJaW5kZXggPSBlbnRyeS0+aXB2Nl81dF9yb3V0ZS5hY3RfZHA7CisKKwlza2ItPmRldiA9IGdldF9kZXZfZnJvbV9pbmRleChpbmRleCk7CisKKwlpZiAoSVNfSFFPU19NT0RFICYmIGV0aF9oZHIoc2tiKS0+aF9wcm90byA9PSBIUU9TX01BR0lDX1RBRykgeworCQlza2IgPSBza2JfdW5zaGFyZShza2IsIEdGUF9BVE9NSUMpOworCQlpZiAoIXNrYikKKwkJCXJldHVybiBORl9BQ0NFUFQ7CisKKwkJaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgVkxBTl9ITEVOKSkpCisJCQlyZXR1cm4gTkZfQUNDRVBUOworCisJCXNrYl9wdWxsX3Jjc3VtKHNrYiwgVkxBTl9ITEVOKTsKKworCQltZW1tb3ZlKHNrYi0+ZGF0YSAtIEVUSF9ITEVOLCBza2ItPmRhdGEgLSBFVEhfSExFTiAtIFZMQU5fSExFTiwKKwkJCTIgKiBFVEhfQUxFTik7CisJfQorCisJaWYgKHNrYi0+ZGV2KSB7CisJCXNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCAwKTsKKwkJc2tiX3B1c2goc2tiLCBFVEhfSExFTik7CisJCWRldl9xdWV1ZV94bWl0KHNrYik7CisJCXRyYWNlX3ByaW50aygiJXM6IGNhbGxlZCBmcm9tICVzIHN1Y2Nlc3NmdWxseVxuIiwgX19mdW5jX18sCisJCQkgICAgIGZ1bmMpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlpZiAobWFwZV90b2dnbGUpIHsKKwkJCS8qIEFkZCBpcHY2IGhlYWRlciBtYXBlIGZvciBsYW4vd2xhbiAtLT53YW4gKi8KKwkJCWRldiA9IGdldF93YW5kZXZfZnJvbV9pbmRleChpbmRleCk7CisJCQlpZiAoZGV2KSB7CisJCQkJaWYgKCFtYXBlX2FkZF9pcHY2X2hkcihza2IsIG1hcGVfbDJ3X3Y2aCkpIHsKKwkJCQkJc2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIDApOworCQkJCQlza2JfcHVzaChza2IsIEVUSF9ITEVOKTsKKwkJCQkJc2tiX3NldF9tYWNfaGVhZGVyKHNrYiwgMCk7CisJCQkJCXNrYi0+ZGV2ID0gZGV2OworCQkJCQlkZXZfcXVldWVfeG1pdChza2IpOworCQkJCQlyZXR1cm4gMDsKKwkJCQl9CisJCQkJdHJhY2VfcHJpbnRrKCIlczogY2FsbGVkIGZyb20gJXMgZmFpbFtNYXBFXVxuIiwgX19mdW5jX18sCisJCQkJCSAgICAgZnVuYyk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQl9CisJfQorCS8qaWYgZXh0ZXJuYWwgZGV2aWNlcyBpcyBkb3duLCBpbnZhbGlkYXRlIHJlbGF0ZWQgcHBlIGVudHJ5Ki8KKwlpZiAoZW50cnlfaG5hdF9pc19ib3VuZChlbnRyeSkpIHsKKwkJZW50cnktPmJmaWIxLnN0YXRlID0gSU5WQUxJRDsKKwkJaWYgKElTX0lQVjRfR1JQKGVudHJ5KSkKKwkJCWVudHJ5LT5pcHY0X2huYXB0LmFjdF9kcCA9IDA7CisJCWVsc2UKKwkJCWVudHJ5LT5pcHY2XzV0X3JvdXRlLmFjdF9kcCA9IDA7CisKKwkJLyogY2xlYXIgSFdOQVQgY2FjaGUgKi8KKwkJaG5hdF9jYWNoZV9lYmwoMSk7CisJfQorCXRyYWNlX3ByaW50aygiJXM6IGNhbGxlZCBmcm9tICVzIGZhaWwsIGluZGV4PSV4XG4iLCBfX2Z1bmNfXywKKwkJICAgICBmdW5jLCBpbmRleCk7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCBwcmVfcm91dGluZ19wcmludChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LCBjb25zdCBjaGFyICpmdW5jKQoreworCXRyYWNlX3ByaW50aygKKwkJIlslc106ICVzKGlpZj0weCV4IENCMj0weCV4KS0tPiVzIChwcGVfaGFzaD0weCV4KSBzcG9ydD0weCV4IHJlYXNvbj0weCV4IGFsZz0weCV4IGZyb20gJXNcbiIsCisJCV9fZnVuY19fLCBpbi0+bmFtZSwgc2tiX2huYXRfaWZhY2Uoc2tiKSwKKwkJSE5BVF9TS0JfQ0IyKHNrYiktPm1hZ2ljLCBvdXQtPm5hbWUsIHNrYl9obmF0X2VudHJ5KHNrYiksCisJCXNrYl9obmF0X3Nwb3J0KHNrYiksIHNrYl9obmF0X3JlYXNvbihza2IpLCBza2JfaG5hdF9hbGcoc2tiKSwKKwkJZnVuYyk7Cit9CisKK3N0YXRpYyB2b2lkIHBvc3Rfcm91dGluZ19wcmludChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJCQkgICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwgY29uc3QgY2hhciAqZnVuYykKK3sKKwl0cmFjZV9wcmludGsoCisJCSJbJXNdOiAlcyhpaWY9MHgleCwgQ0IyPTB4JXgpLS0+JXMgKHBwZV9oYXNoPTB4JXgpIHNwb3J0PTB4JXggcmVhc29uPTB4JXggYWxnPTB4JXggZnJvbSAlc1xuIiwKKwkJX19mdW5jX18sIGluLT5uYW1lLCBza2JfaG5hdF9pZmFjZShza2IpLAorCQlITkFUX1NLQl9DQjIoc2tiKS0+bWFnaWMsIG91dC0+bmFtZSwgc2tiX2huYXRfZW50cnkoc2tiKSwKKwkJc2tiX2huYXRfc3BvcnQoc2tiKSwgc2tiX2huYXRfcmVhc29uKHNrYiksIHNrYl9obmF0X2FsZyhza2IpLAorCQlmdW5jKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGhuYXRfc2V0X2lpZihjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsCisJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHZhbCkKK3sKKwlpZiAoSVNfV0hOQVQoc3RhdGUtPmluKSAmJiBGUk9NX1dFRChza2IpKSB7CisJCXJldHVybjsKKwl9IGVsc2UgaWYgKElTX0xBTihzdGF0ZS0+aW4pKSB7CisJCXNrYl9obmF0X2lmYWNlKHNrYikgPSBGT0VfTUFHSUNfR0VfTEFOOworCX0gZWxzZSBpZiAoSVNfUFBEKHN0YXRlLT5pbikpIHsKKwkJc2tiX2huYXRfaWZhY2Uoc2tiKSA9IEZPRV9NQUdJQ19HRV9QUEQ7CisJfSBlbHNlIGlmIChJU19FWFQoc3RhdGUtPmluKSkgeworCQlza2JfaG5hdF9pZmFjZShza2IpID0gRk9FX01BR0lDX0VYVDsKKwl9IGVsc2UgaWYgKElTX1dBTihzdGF0ZS0+aW4pKSB7CisJCXNrYl9obmF0X2lmYWNlKHNrYikgPSBGT0VfTUFHSUNfR0VfV0FOOworCX0gZWxzZSBpZiAoIUlTX0JSKHN0YXRlLT5pbikpIHsKKwkJaWYgKHN0YXRlLT5pbi0+bmV0ZGV2X29wcy0+bmRvX2Zsb3dfb2ZmbG9hZF9jaGVjaykgeworCQkJc2tiX2huYXRfaWZhY2Uoc2tiKSA9IEZPRV9NQUdJQ19HRV9WSVJUVUFMOworCQl9IGVsc2UgeworCQkJc2tiX2huYXRfaWZhY2Uoc2tiKSA9IEZPRV9JTlZBTElEOworCisJCQlpZiAoaXNfbWFnaWNfdGFnX3ZhbGlkKHNrYikgJiYKKwkJCSAgICBJU19TUEFDRV9BVkFJTEFCTEVfSEVBRChza2IpKQorCQkJCW1lbXNldChza2JfaG5hdF9pbmZvKHNrYiksIDAsIEZPRV9JTkZPX0xFTik7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBobmF0X3NldF9hbGcoY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlLAorCQkJCXN0cnVjdCBza19idWZmICpza2IsIGludCB2YWwpCit7CisJc2tiX2huYXRfYWxnKHNrYikgPSB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBobmF0X3NldF9oZWFkX2ZyYWdzKGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSwKKwkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKmhlYWRfc2tiLCBpbnQgdmFsLAorCQkJCSAgICAgICB2b2lkICgqZm4pKGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSwKKwkJCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHZhbCkpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNlZ3MgPSBza2Jfc2hpbmZvKGhlYWRfc2tiKS0+ZnJhZ19saXN0OworCisJZm4oc3RhdGUsIGhlYWRfc2tiLCB2YWwpOworCXdoaWxlIChzZWdzKSB7CisJCWZuKHN0YXRlLCBzZWdzLCB2YWwpOworCQlzZWdzID0gc2Vncy0+bmV4dDsKKwl9Cit9CisKK3Vuc2lnbmVkIGludCBkb19obmF0X21hcGVfdzJsX2Zhc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAorCQkJCSAgIGNvbnN0IGNoYXIgKmZ1bmMpCit7CisJc3RydWN0IGlwdjZoZHIgKmlwNmggPSBpcHY2X2hkcihza2IpOworCXN0cnVjdCBpcGhkciBfaXBoZHI7CisJc3RydWN0IGlwaGRyICppcGg7CisJc3RydWN0IGV0aGhkciAqZXRoOworCisJLyogV0FOIC0+IExBTi9XTEFOIE1hcEUuICovCisJaWYgKG1hcGVfdG9nZ2xlICYmIChpcDZoLT5uZXh0aGRyID09IE5FWFRIRFJfSVBJUCkpIHsKKwkJaXBoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgSVBWNl9IRFJfTEVOLCBzaXplb2YoX2lwaGRyKSwgJl9pcGhkcik7CisJCWlmICh1bmxpa2VseSghaXBoKSkKKwkJCXJldHVybiAtMTsKKworCQlzd2l0Y2ggKGlwaC0+cHJvdG9jb2wpIHsKKwkJY2FzZSBJUFBST1RPX1VEUDoKKwkJY2FzZSBJUFBST1RPX1RDUDoKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC0xOworCQl9CisJCW1hcGVfdzJsX3Y2aCA9ICppcDZoOworCisJCS8qIFJlbW92ZSBpcHY2IGhlYWRlci4gKi8KKwkJbWVtY3B5KHNrYi0+ZGF0YSArIElQVjZfSERSX0xFTiAtIEVUSF9ITEVOLAorCQkgICAgICAgc2tiLT5kYXRhIC0gRVRIX0hMRU4sIEVUSF9ITEVOKTsKKwkJc2tiX3B1bGwoc2tiLCBJUFY2X0hEUl9MRU4gLSBFVEhfSExFTik7CisJCXNrYl9zZXRfbWFjX2hlYWRlcihza2IsIDApOworCQlza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgRVRIX0hMRU4pOworCQlza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiLCBFVEhfSExFTiArIHNpemVvZihfaXBoZHIpKTsKKworCQlldGggPSBldGhfaGRyKHNrYik7CisJCWV0aC0+aF9wcm90byA9IGh0b25zKEVUSF9QX0lQKTsKKwkJc2V0X3RvX3BwZShza2IpOworCisJCXNrYi0+dmxhbl9wcm90byA9IGh0b25zKEVUSF9QXzgwMjFRKTsKKwkJc2tiLT52bGFuX3RjaSA9CisJCShWTEFOX0NGSV9NQVNLIHwgKGluLT5pZmluZGV4ICYgVkxBTl9WSURfTUFTSykpOworCisJCWlmICghaG5hdF9wcml2LT5nX3BwZGV2KQorCQkJaG5hdF9wcml2LT5nX3BwZGV2ID0gZGV2X2dldF9ieV9uYW1lKCZpbml0X25ldCwgaG5hdF9wcml2LT5wcGQpOworCisJCXNrYi0+ZGV2ID0gaG5hdF9wcml2LT5nX3BwZGV2OworCQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApOworCisJCWRldl9xdWV1ZV94bWl0KHNrYik7CisKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBpc19wcGVfc3VwcG9ydF90eXBlKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGV0aGhkciAqZXRoID0gTlVMTDsKKwlzdHJ1Y3QgaXBoZHIgKmlwaCA9IE5VTEw7CisJc3RydWN0IGlwdjZoZHIgKmlwNmggPSBOVUxMOworCXN0cnVjdCBpcGhkciBfaXBoZHI7CisKKwlldGggPSBldGhfaGRyKHNrYik7CisJaWYgKCFpc19tYWdpY190YWdfdmFsaWQoc2tiKSB8fCAhSVNfU1BBQ0VfQVZBSUxBQkxFX0hFQUQoc2tiKSB8fAorCSAgICBpc19icm9hZGNhc3RfZXRoZXJfYWRkcihldGgtPmhfZGVzdCkpCisJCXJldHVybiAwOworCisJc3dpdGNoIChudG9ocyhza2ItPnByb3RvY29sKSkgeworCWNhc2UgRVRIX1BfSVA6CisJCWlwaCA9IGlwX2hkcihza2IpOworCisJCS8qIGRvIG5vdCBhY2NlbGVyYXRlIG5vbiB0Y3AvdWRwIHRyYWZmaWMgKi8KKwkJaWYgKChpcGgtPnByb3RvY29sID09IElQUFJPVE9fVENQKSB8fAorCQkgICAgKGlwaC0+cHJvdG9jb2wgPT0gSVBQUk9UT19VRFApIHx8CisJCSAgICAoaXBoLT5wcm90b2NvbCA9PSBJUFBST1RPX0lQVjYpKSB7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCWJyZWFrOworCWNhc2UgRVRIX1BfSVBWNjoKKwkJaXA2aCA9IGlwdjZfaGRyKHNrYik7CisKKwkJaWYgKChpcDZoLT5uZXh0aGRyID09IE5FWFRIRFJfVENQKSB8fAorCQkgICAgKGlwNmgtPm5leHRoZHIgPT0gTkVYVEhEUl9VRFApKSB7CisJCQlyZXR1cm4gMTsKKwkJfSBlbHNlIGlmIChpcDZoLT5uZXh0aGRyID09IE5FWFRIRFJfSVBJUCkgeworCQkJaXBoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgSVBWNl9IRFJfTEVOLAorCQkJCQkJIHNpemVvZihfaXBoZHIpLCAmX2lwaGRyKTsKKwkJCWlmICh1bmxpa2VseSghaXBoKSkKKwkJCQlyZXR1cm4gMDsKKworCQkJaWYgKChpcGgtPnByb3RvY29sID09IElQUFJPVE9fVENQKSB8fAorCQkJICAgIChpcGgtPnByb3RvY29sID09IElQUFJPVE9fVURQKSkgeworCQkJCXJldHVybiAxOworCQkJfQorCisJCX0KKworCQlicmVhazsKKwljYXNlIEVUSF9QXzgwMjFROgorCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAorbXRrX2huYXRfaXB2Nl9uZl9wcmVfcm91dGluZyh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpCit7CisJaWYgKCFpc19wcGVfc3VwcG9ydF90eXBlKHNrYikpIHsKKwkJaG5hdF9zZXRfaGVhZF9mcmFncyhzdGF0ZSwgc2tiLCAxLCBobmF0X3NldF9hbGcpOworCQlyZXR1cm4gTkZfQUNDRVBUOworCX0KKworCWhuYXRfc2V0X2hlYWRfZnJhZ3Moc3RhdGUsIHNrYiwgLTEsIGhuYXRfc2V0X2lpZik7CisKKwlwcmVfcm91dGluZ19wcmludChza2IsIHN0YXRlLT5pbiwgc3RhdGUtPm91dCwgX19mdW5jX18pOworCisJLyogcGFja2V0cyBmcm9tIGV4dGVybmFsIGRldmljZXMgLT4geHh4ICxzdGVwIDEgLCBsZWFybmluZyBzdGFnZSAmIGJvdW5kIHN0YWdlKi8KKwlpZiAoZG9fZXh0MmdlX2Zhc3RfdHJ5KHN0YXRlLT5pbiwgc2tiKSkgeworCQlpZiAoIWRvX2huYXRfZXh0X3RvX2dlKHNrYiwgc3RhdGUtPmluLCBfX2Z1bmNfXykpCisJCQlyZXR1cm4gTkZfU1RPTEVOOworCQlpZiAoIXNrYikKKwkJCWdvdG8gZHJvcDsKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKwl9CisKKwkvKiBwYWNrZXRzIGZvcm0gZ2UgLT4gZXh0ZXJuYWwgZGV2aWNlCisJICogRm9yIHN0YW5kYWxvbmUgd2FuIGludGVyZmFjZQorCSAqLworCWlmIChkb19nZTJleHRfZmFzdChzdGF0ZS0+aW4sIHNrYikpIHsKKwkJaWYgKCFkb19obmF0X2dlX3RvX2V4dChza2IsIF9fZnVuY19fKSkKKwkJCXJldHVybiBORl9TVE9MRU47CisJCWdvdG8gZHJvcDsKKwl9CisKKwkvKiBNYXBFIG5lZWQgcmVtb3ZlIGlwdjYgaGVhZGVyIGFuZCBwaW5ncG9uZy4gKi8KKwlpZiAoZG9fbWFwZV93MmxfZmFzdChzdGF0ZS0+aW4sIHNrYikpIHsKKwkJaWYgKCFkb19obmF0X21hcGVfdzJsX2Zhc3Qoc2tiLCBzdGF0ZS0+aW4sIF9fZnVuY19fKSkKKwkJCXJldHVybiBORl9TVE9MRU47CisJCWVsc2UKKwkJCXJldHVybiBORl9BQ0NFUFQ7CisJfQorCisJaWYgKGlzX2Zyb21fbWFwZShza2IpKQorCQljbHJfZnJvbV9leHRnZShza2IpOworCisJcmV0dXJuIE5GX0FDQ0VQVDsKK2Ryb3A6CisJcHJpbnRrX3JhdGVsaW1pdGVkKEtFUk5fV0FSTklORworCQkJCSIlczpkcm9wIChpbl9kZXY9JXMsIGlpZj0weCV4LCBDQjI9MHgleCwgcHBlX2hhc2g9MHgleCwgc3BvcnQ9MHgleCwgcmVhc29uPTB4JXgsIGFsZz0weCV4KVxuIiwKKwkJCQlfX2Z1bmNfXywgc3RhdGUtPmluLT5uYW1lLCBza2JfaG5hdF9pZmFjZShza2IpLAorCQkJCUhOQVRfU0tCX0NCMihza2IpLT5tYWdpYywgc2tiX2huYXRfZW50cnkoc2tiKSwKKwkJCQlza2JfaG5hdF9zcG9ydChza2IpLCBza2JfaG5hdF9yZWFzb24oc2tiKSwKKwkJCQlza2JfaG5hdF9hbGcoc2tiKSk7CisKKwlyZXR1cm4gTkZfRFJPUDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAorbXRrX2huYXRfaXB2NF9uZl9wcmVfcm91dGluZyh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpCit7CisJaWYgKCFpc19wcGVfc3VwcG9ydF90eXBlKHNrYikpIHsKKwkJaG5hdF9zZXRfaGVhZF9mcmFncyhzdGF0ZSwgc2tiLCAxLCBobmF0X3NldF9hbGcpOworCQlyZXR1cm4gTkZfQUNDRVBUOworCX0KKworCWhuYXRfc2V0X2hlYWRfZnJhZ3Moc3RhdGUsIHNrYiwgLTEsIGhuYXRfc2V0X2lpZik7CisKKwlwcmVfcm91dGluZ19wcmludChza2IsIHN0YXRlLT5pbiwgc3RhdGUtPm91dCwgX19mdW5jX18pOworCisJLyogcGFja2V0cyBmcm9tIGV4dGVybmFsIGRldmljZXMgLT4geHh4ICxzdGVwIDEgLCBsZWFybmluZyBzdGFnZSAmIGJvdW5kIHN0YWdlKi8KKwlpZiAoZG9fZXh0MmdlX2Zhc3RfdHJ5KHN0YXRlLT5pbiwgc2tiKSkgeworCQlpZiAoIWRvX2huYXRfZXh0X3RvX2dlKHNrYiwgc3RhdGUtPmluLCBfX2Z1bmNfXykpCisJCQlyZXR1cm4gTkZfU1RPTEVOOworCQlpZiAoIXNrYikKKwkJCWdvdG8gZHJvcDsKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKwl9CisKKwkvKiBwYWNrZXRzIGZvcm0gZ2UgLT4gZXh0ZXJuYWwgZGV2aWNlCisJICogRm9yIHN0YW5kYWxvbmUgd2FuIGludGVyZmFjZQorCSAqLworCWlmIChkb19nZTJleHRfZmFzdChzdGF0ZS0+aW4sIHNrYikpIHsKKwkJaWYgKCFkb19obmF0X2dlX3RvX2V4dChza2IsIF9fZnVuY19fKSkKKwkJCXJldHVybiBORl9TVE9MRU47CisJCWdvdG8gZHJvcDsKKwl9CisKKwlyZXR1cm4gTkZfQUNDRVBUOworZHJvcDoKKwlwcmludGtfcmF0ZWxpbWl0ZWQoS0VSTl9XQVJOSU5HCisJCQkJIiVzOmRyb3AgKGluX2Rldj0lcywgaWlmPTB4JXgsIENCMj0weCV4LCBwcGVfaGFzaD0weCV4LCBzcG9ydD0weCV4LCByZWFzb249MHgleCwgYWxnPTB4JXgpXG4iLAorCQkJCV9fZnVuY19fLCBzdGF0ZS0+aW4tPm5hbWUsIHNrYl9obmF0X2lmYWNlKHNrYiksCisJCQkJSE5BVF9TS0JfQ0IyKHNrYiktPm1hZ2ljLCBza2JfaG5hdF9lbnRyeShza2IpLAorCQkJCXNrYl9obmF0X3Nwb3J0KHNrYiksIHNrYl9obmF0X3JlYXNvbihza2IpLAorCQkJCXNrYl9obmF0X2FsZyhza2IpKTsKKworCXJldHVybiBORl9EUk9QOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50CittdGtfaG5hdF9icl9uZl9sb2NhbF9pbih2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCB2bGFuX2V0aGhkciAqdmV0aDsKKworCWlmIChJU19IUU9TX01PREUgJiYgaG5hdF9wcml2LT5kYXRhLT53aG5hdCkgeworCQl2ZXRoID0gKHN0cnVjdCB2bGFuX2V0aGhkciAqKXNrYl9tYWNfaGVhZGVyKHNrYik7CisKKwkJaWYgKGV0aF9oZHIoc2tiKS0+aF9wcm90byA9PSBIUU9TX01BR0lDX1RBRykgeworCQkJc2tiX2huYXRfZW50cnkoc2tiKSA9IG50b2hzKHZldGgtPmhfdmxhbl9UQ0kpICYgMHgzZmZmOworCQkJc2tiX2huYXRfcmVhc29uKHNrYikgPSBISVRfQklORF9GT1JDRV9UT19DUFU7CisJCX0KKwl9CisKKwlpZiAoIUhBU19IUU9TX01BR0lDX1RBRyhza2IpICYmICFpc19wcGVfc3VwcG9ydF90eXBlKHNrYikpIHsKKwkJaG5hdF9zZXRfaGVhZF9mcmFncyhzdGF0ZSwgc2tiLCAxLCBobmF0X3NldF9hbGcpOworCQlyZXR1cm4gTkZfQUNDRVBUOworCX0KKworCWhuYXRfc2V0X2hlYWRfZnJhZ3Moc3RhdGUsIHNrYiwgLTEsIGhuYXRfc2V0X2lpZik7CisKKwlwcmVfcm91dGluZ19wcmludChza2IsIHN0YXRlLT5pbiwgc3RhdGUtPm91dCwgX19mdW5jX18pOworCisJaWYgKHVubGlrZWx5KGRlYnVnX2xldmVsID49IDcpKSB7CisJCWhuYXRfY3B1X3JlYXNvbl9jbnQoc2tiKTsKKwkJaWYgKHNrYl9obmF0X3JlYXNvbihza2IpID09IGRiZ19jcHVfcmVhc29uKQorCQkJZm9lX2R1bXBfcGt0KHNrYik7CisJfQorCisJLyogcGFja2V0cyBmcm9tIGV4dGVybmFsIGRldmljZXMgLT4geHh4ICxzdGVwIDEgLCBsZWFybmluZyBzdGFnZSAmIGJvdW5kIHN0YWdlKi8KKwlpZiAoKHNrYl9obmF0X2lmYWNlKHNrYikgPT0gRk9FX01BR0lDX0VYVCkgJiYgIWlzX2Zyb21fZXh0Z2Uoc2tiKSAmJgorCSAgICAhaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZXRoX2hkcihza2IpLT5oX2Rlc3QpKSB7CisJCWlmICghaG5hdF9wcml2LT5nX3BwZGV2KQorCQkJaG5hdF9wcml2LT5nX3BwZGV2ID0gZGV2X2dldF9ieV9uYW1lKCZpbml0X25ldCwgaG5hdF9wcml2LT5wcGQpOworCisJCWlmICghZG9faG5hdF9leHRfdG9fZ2Uoc2tiLCBzdGF0ZS0+aW4sIF9fZnVuY19fKSkKKwkJCXJldHVybiBORl9TVE9MRU47CisJCWlmICghc2tiKQorCQkJZ290byBkcm9wOworCQlyZXR1cm4gTkZfQUNDRVBUOworCX0KKworCWlmIChobmF0X3ByaXYtPmRhdGEtPndobmF0KSB7CisJCWlmIChza2JfaG5hdF9pZmFjZShza2IpID09IEZPRV9NQUdJQ19FWFQpCisJCQljbHJfZnJvbV9leHRnZShza2IpOworCisJCS8qIHBhY2tldHMgZnJvbSBleHRlcm5hbCBkZXZpY2VzIC0+IHh4eCAsc3RlcCAyLCBsZWFybmluZyBzdGFnZSAqLworCQlpZiAoZG9fZXh0MmdlX2Zhc3RfbGVhcm4oc3RhdGUtPmluLCBza2IpICYmICghcW9zX3RvZ2dsZSB8fAorCQkgICAgKHFvc190b2dnbGUgJiYgZXRoX2hkcihza2IpLT5oX3Byb3RvICE9IEhRT1NfTUFHSUNfVEFHKSkpIHsKKwkJCWlmICghZG9faG5hdF9leHRfdG9fZ2UyKHNrYiwgX19mdW5jX18pKQorCQkJCXJldHVybiBORl9TVE9MRU47CisJCQlnb3RvIGRyb3A7CisJCX0KKworCQkvKiBwYWNrZXRzIGZvcm0gZ2UgLT4gZXh0ZXJuYWwgZGV2aWNlICovCisJCWlmIChkb19nZTJleHRfZmFzdChzdGF0ZS0+aW4sIHNrYikpIHsKKwkJCWlmICghZG9faG5hdF9nZV90b19leHQoc2tiLCBfX2Z1bmNfXykpCisJCQkJcmV0dXJuIE5GX1NUT0xFTjsKKwkJCWdvdG8gZHJvcDsKKwkJfQorCX0KKworCS8qIE1hcEUgbmVlZCByZW1vdmUgaXB2NiBoZWFkZXIgYW5kIHBpbmdwb25nLiAoYnJpZGdlIG1vZGUpICovCisJaWYgKGRvX21hcGVfdzJsX2Zhc3Qoc3RhdGUtPmluLCBza2IpKSB7CisJCWlmICghZG9faG5hdF9tYXBlX3cybF9mYXN0KHNrYiwgc3RhdGUtPmluLCBfX2Z1bmNfXykpCisJCQlyZXR1cm4gTkZfU1RPTEVOOworCQllbHNlCisJCQlyZXR1cm4gTkZfQUNDRVBUOworCX0KKworCXJldHVybiBORl9BQ0NFUFQ7Citkcm9wOgorCXByaW50a19yYXRlbGltaXRlZChLRVJOX1dBUk5JTkcKKwkJCQkiJXM6ZHJvcCAoaW5fZGV2PSVzLCBpaWY9MHgleCwgQ0IyPTB4JXgsIHBwZV9oYXNoPTB4JXgsIHNwb3J0PTB4JXgsIHJlYXNvbj0weCV4LCBhbGc9MHgleClcbiIsCisJCQkJX19mdW5jX18sIHN0YXRlLT5pbi0+bmFtZSwgc2tiX2huYXRfaWZhY2Uoc2tiKSwKKwkJCQlITkFUX1NLQl9DQjIoc2tiKS0+bWFnaWMsIHNrYl9obmF0X2VudHJ5KHNrYiksCisJCQkJc2tiX2huYXRfc3BvcnQoc2tiKSwgc2tiX2huYXRfcmVhc29uKHNrYiksCisJCQkJc2tiX2huYXRfYWxnKHNrYikpOworCisJcmV0dXJuIE5GX0RST1A7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaG5hdF9pcHY2X2dldF9uZXh0aG9wKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJCQkJICBzdHJ1Y3QgZmxvd19vZmZsb2FkX2h3X3BhdGggKmh3X3BhdGgpCit7CisJY29uc3Qgc3RydWN0IGluNl9hZGRyICppcHY2X25leHRob3A7CisJc3RydWN0IG5laWdoYm91ciAqbmVpZ2ggPSBOVUxMOworCXN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IHNrYl9kc3Qoc2tiKTsKKwlzdHJ1Y3QgZXRoaGRyICpldGg7CisKKwlpZiAoaHdfcGF0aC0+ZmxhZ3MgJiBGTE9XX09GRkxPQURfUEFUSF9QUFBPRSkgeworCQltZW1jcHkoZXRoX2hkcihza2IpLT5oX3NvdXJjZSwgaHdfcGF0aC0+ZXRoX3NyYywgRVRIX0FMRU4pOworCQltZW1jcHkoZXRoX2hkcihza2IpLT5oX2Rlc3QsIGh3X3BhdGgtPmV0aF9kZXN0LCBFVEhfQUxFTik7CisJCXJldHVybiAwOworCX0KKworCXJjdV9yZWFkX2xvY2tfYmgoKTsKKwlpcHY2X25leHRob3AgPQorCQlydDZfbmV4dGhvcCgoc3RydWN0IHJ0Nl9pbmZvICopZHN0LCAmaXB2Nl9oZHIoc2tiKS0+ZGFkZHIpOworCW5laWdoID0gX19pcHY2X25laWdoX2xvb2t1cF9ub3JlZihkc3QtPmRldiwgaXB2Nl9uZXh0aG9wKTsKKwlpZiAodW5saWtlbHkoIW5laWdoKSkgeworCQlkZXZfbm90aWNlKGhuYXRfcHJpdi0+ZGV2LCAiJXM6Tm8gbmVpZ2ggKGRhZGRyPSVwSTYpXG4iLCBfX2Z1bmNfXywKKwkJCSAgICZpcHY2X2hkcihza2IpLT5kYWRkcik7CisJCXJjdV9yZWFkX3VubG9ja19iaCgpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogd2h5IGRvIHdlIGdldCBhbGwgemVybyBldGhlcm5ldCBhZGRyZXNzID8gKi8KKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmVpZ2gtPmhhKSkgeworCQlyY3VfcmVhZF91bmxvY2tfYmgoKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChpcHY2X2hkcihza2IpLT5uZXh0aGRyID09IE5FWFRIRFJfSVBJUCkgeworCQkvKmNvcHkgZXRoZXIgdHlwZSBmb3IgRFMtTGl0ZSBhbmQgTWFwRSAqLworCQlldGggPSAoc3RydWN0IGV0aGhkciAqKShza2ItPmRhdGEgLSBFVEhfSExFTik7CisJCWV0aC0+aF9wcm90byA9IHNrYi0+cHJvdG9jb2w7CisJfSBlbHNlIHsKKwkJZXRoID0gZXRoX2hkcihza2IpOworCX0KKworCWV0aGVyX2FkZHJfY29weShldGgtPmhfZGVzdCwgbmVpZ2gtPmhhKTsKKwlldGhlcl9hZGRyX2NvcHkoZXRoLT5oX3NvdXJjZSwgb3V0LT5kZXZfYWRkcik7CisKKwlyY3VfcmVhZF91bmxvY2tfYmgoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGhuYXRfaXB2NF9nZXRfbmV4dGhvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJCQkJCSAgc3RydWN0IGZsb3dfb2ZmbG9hZF9od19wYXRoICpod19wYXRoKQoreworCXUzMiBuZXh0aG9wOworCXN0cnVjdCBuZWlnaGJvdXIgKm5laWdoOworCXN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IHNrYl9kc3Qoc2tiKTsKKwlzdHJ1Y3QgcnRhYmxlICpydCA9IChzdHJ1Y3QgcnRhYmxlICopZHN0OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoX19mb3JjZSBzdHJ1Y3QgbmV0X2RldmljZSAqKW91dDsKKworCWlmIChod19wYXRoLT5mbGFncyAmIEZMT1dfT0ZGTE9BRF9QQVRIX1BQUE9FKSB7CisJCW1lbWNweShldGhfaGRyKHNrYiktPmhfc291cmNlLCBod19wYXRoLT5ldGhfc3JjLCBFVEhfQUxFTik7CisJCW1lbWNweShldGhfaGRyKHNrYiktPmhfZGVzdCwgaHdfcGF0aC0+ZXRoX2Rlc3QsIEVUSF9BTEVOKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmN1X3JlYWRfbG9ja19iaCgpOworCW5leHRob3AgPSAoX19mb3JjZSB1MzIpcnRfbmV4dGhvcChydCwgaXBfaGRyKHNrYiktPmRhZGRyKTsKKwluZWlnaCA9IF9faXB2NF9uZWlnaF9sb29rdXBfbm9yZWYoZGV2LCBuZXh0aG9wKTsKKwlpZiAodW5saWtlbHkoIW5laWdoKSkgeworCQlkZXZfbm90aWNlKGhuYXRfcHJpdi0+ZGV2LCAiJXM6Tm8gbmVpZ2ggKGRhZGRyPSVwSTQpXG4iLCBfX2Z1bmNfXywKKwkJCSAgICZpcF9oZHIoc2tiKS0+ZGFkZHIpOworCQlyY3VfcmVhZF91bmxvY2tfYmgoKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIHdoeSBkbyB3ZSBnZXQgYWxsIHplcm8gZXRoZXJuZXQgYWRkcmVzcyA/ICovCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKG5laWdoLT5oYSkpIHsKKwkJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CisJCXJldHVybiAtMTsKKwl9CisKKwltZW1jcHkoZXRoX2hkcihza2IpLT5oX2Rlc3QsIG5laWdoLT5oYSwgRVRIX0FMRU4pOworCW1lbWNweShldGhfaGRyKHNrYiktPmhfc291cmNlLCBvdXQtPmRldl9hZGRyLCBFVEhfQUxFTik7CisKKwlyY3VfcmVhZF91bmxvY2tfYmgoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTE2IHBwZV9nZXRfY2hrYmFzZShzdHJ1Y3QgaXBoZHIgKmlwaCkKK3sKKwl1MTYgb3JnX2Noa3N1bSA9IG50b2hzKGlwaC0+Y2hlY2spOworCXUxNiBvcmdfdG90X2xlbiA9IG50b2hzKGlwaC0+dG90X2xlbik7CisJdTE2IG9yZ19pZCA9IG50b2hzKGlwaC0+aWQpOworCXUxNiBjaGtzdW1fdG1wLCB0b3RfbGVuX3RtcCwgaWRfdG1wOworCXUzMiB0bXAgPSAwOworCXUxNiBjaGtzdW1fYmFzZSA9IDA7CisKKwljaGtzdW1fdG1wID0gfihvcmdfY2hrc3VtKTsKKwl0b3RfbGVuX3RtcCA9IH4ob3JnX3RvdF9sZW4pOworCWlkX3RtcCA9IH4ob3JnX2lkKTsKKwl0bXAgPSBjaGtzdW1fdG1wICsgdG90X2xlbl90bXAgKyBpZF90bXA7CisJdG1wID0gKCh0bXAgPj4gMTYpICYgMHg3KSArICh0bXAgJiAweEZGRkYpOworCXRtcCA9ICgodG1wID4+IDE2KSAmIDB4NykgKyAodG1wICYgMHhGRkZGKTsKKwljaGtzdW1fYmFzZSA9IHRtcCAmIDB4RkZGRjsKKworCXJldHVybiBjaGtzdW1fYmFzZTsKK30KKworc3RydWN0IGZvZV9lbnRyeSBwcGVfZmlsbF9MMl9pbmZvKHN0cnVjdCBldGhoZHIgKmV0aCwgc3RydWN0IGZvZV9lbnRyeSBlbnRyeSwKKwkJCQkgIHN0cnVjdCBmbG93X29mZmxvYWRfaHdfcGF0aCAqaHdfcGF0aCkKK3sKKwlzd2l0Y2ggKGVudHJ5LmJmaWIxLnBrdF90eXBlKSB7CisJY2FzZSBJUFY0X0hOQVBUOgorCWNhc2UgSVBWNF9ITkFUOgorCQllbnRyeS5pcHY0X2huYXB0LmRtYWNfaGkgPSBzd2FiMzIoKigodTMyICopZXRoLT5oX2Rlc3QpKTsKKwkJZW50cnkuaXB2NF9obmFwdC5kbWFjX2xvID0gc3dhYjE2KCooKHUxNiAqKSZldGgtPmhfZGVzdFs0XSkpOworCQllbnRyeS5pcHY0X2huYXB0LnNtYWNfaGkgPSBzd2FiMzIoKigodTMyICopZXRoLT5oX3NvdXJjZSkpOworCQllbnRyeS5pcHY0X2huYXB0LnNtYWNfbG8gPSBzd2FiMTYoKigodTE2ICopJmV0aC0+aF9zb3VyY2VbNF0pKTsKKwkJZW50cnkuaXB2NF9obmFwdC5wcHBvZV9pZCA9IGh3X3BhdGgtPnBwcG9lX3NpZDsKKwkJYnJlYWs7CisJY2FzZSBJUFY0X0RTTElURToKKwljYXNlIElQVjRfTUFQX0U6CisJY2FzZSBJUFY2XzZSRDoKKwljYXNlIElQVjZfNVRfUk9VVEU6CisJY2FzZSBJUFY2XzNUX1JPVVRFOgorCQllbnRyeS5pcHY2XzV0X3JvdXRlLmRtYWNfaGkgPSBzd2FiMzIoKigodTMyICopZXRoLT5oX2Rlc3QpKTsKKwkJZW50cnkuaXB2Nl81dF9yb3V0ZS5kbWFjX2xvID0gc3dhYjE2KCooKHUxNiAqKSZldGgtPmhfZGVzdFs0XSkpOworCQllbnRyeS5pcHY2XzV0X3JvdXRlLnNtYWNfaGkgPSBzd2FiMzIoKigodTMyICopZXRoLT5oX3NvdXJjZSkpOworCQllbnRyeS5pcHY2XzV0X3JvdXRlLnNtYWNfbG8gPQorCQkJc3dhYjE2KCooKHUxNiAqKSZldGgtPmhfc291cmNlWzRdKSk7CisJCWVudHJ5LmlwdjZfNXRfcm91dGUucHBwb2VfaWQgPSBod19wYXRoLT5wcHBvZV9zaWQ7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gZW50cnk7Cit9CisKK3N0cnVjdCBmb2VfZW50cnkgcHBlX2ZpbGxfaW5mb19ibGsoc3RydWN0IGV0aGhkciAqZXRoLCBzdHJ1Y3QgZm9lX2VudHJ5IGVudHJ5LAorCQkJCSAgIHN0cnVjdCBmbG93X29mZmxvYWRfaHdfcGF0aCAqaHdfcGF0aCkKK3sKKwllbnRyeS5iZmliMS5wc24gPSAoaHdfcGF0aC0+ZmxhZ3MgJiBGTE9XX09GRkxPQURfUEFUSF9QUFBPRSkgPyAxIDogMDsKKwllbnRyeS5iZmliMS52bGFuX2xheWVyICs9IChod19wYXRoLT5mbGFncyAmIEZMT1dfT0ZGTE9BRF9QQVRIX1ZMQU4pID8gMSA6IDA7CisJZW50cnkuYmZpYjEudnBtID0gKGVudHJ5LmJmaWIxLnZsYW5fbGF5ZXIpID8gMSA6IDA7CisJZW50cnkuYmZpYjEudHRsID0gMTsKKwllbnRyeS5iZmliMS5jYWggPSAxOworCWVudHJ5LmJmaWIxLmthID0gMTsKKwllbnRyeS5iZmliMS50aW1lX3N0YW1wID0gKGhuYXRfcHJpdi0+ZGF0YS0+dmVyc2lvbiA9PSBNVEtfSE5BVF9WNCkgPworCQlyZWFkbChobmF0X3ByaXYtPmZlX2Jhc2UgKyAweDAwMTApICYgKDB4RkYpIDoKKwkJcmVhZGwoaG5hdF9wcml2LT5mZV9iYXNlICsgMHgwMDEwKSAmICgweDdGRkYpOworCisJc3dpdGNoIChlbnRyeS5iZmliMS5wa3RfdHlwZSkgeworCWNhc2UgSVBWNF9ITkFQVDoKKwljYXNlIElQVjRfSE5BVDoKKwkJaWYgKGhuYXRfcHJpdi0+ZGF0YS0+bWNhc3QgJiYKKwkJICAgIGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKCZldGgtPmhfZGVzdFswXSkpIHsKKwkJCWVudHJ5LmlwdjRfaG5hcHQuaWJsazIubWNhc3QgPSAxOworCQkJaWYgKGhuYXRfcHJpdi0+ZGF0YS0+dmVyc2lvbiA9PSBNVEtfSE5BVF9WMykgeworCQkJCWVudHJ5LmJmaWIxLnN0YSA9IDE7CisJCQkJZW50cnkuaXB2NF9obmFwdC5tX3RpbWVzdGFtcCA9IGZvZV90aW1lc3RhbXAoaG5hdF9wcml2KTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWVudHJ5LmlwdjRfaG5hcHQuaWJsazIubWNhc3QgPSAwOworCQl9CisKKwkJZW50cnkuaXB2NF9obmFwdC5pYmxrMi5wb3J0X2FnID0KKwkJCShobmF0X3ByaXYtPmRhdGEtPnZlcnNpb24gPT0gTVRLX0hOQVRfVjQpID8gMHhmIDogMHgzZjsKKwkJYnJlYWs7CisJY2FzZSBJUFY0X0RTTElURToKKwljYXNlIElQVjRfTUFQX0U6CisJY2FzZSBJUFY2XzZSRDoKKwljYXNlIElQVjZfNVRfUk9VVEU6CisJY2FzZSBJUFY2XzNUX1JPVVRFOgorCQlpZiAoaG5hdF9wcml2LT5kYXRhLT5tY2FzdCAmJgorCQkgICAgaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoJmV0aC0+aF9kZXN0WzBdKSkgeworCQkJZW50cnkuaXB2Nl81dF9yb3V0ZS5pYmxrMi5tY2FzdCA9IDE7CisJCQlpZiAoaG5hdF9wcml2LT5kYXRhLT52ZXJzaW9uID09IE1US19ITkFUX1YzKSB7CisJCQkJZW50cnkuYmZpYjEuc3RhID0gMTsKKwkJCQllbnRyeS5pcHY0X2huYXB0Lm1fdGltZXN0YW1wID0gZm9lX3RpbWVzdGFtcChobmF0X3ByaXYpOworCQkJfQorCQl9IGVsc2UgeworCQkJZW50cnkuaXB2Nl81dF9yb3V0ZS5pYmxrMi5tY2FzdCA9IDA7CisJCX0KKworCQllbnRyeS5pcHY2XzV0X3JvdXRlLmlibGsyLnBvcnRfYWcgPQorCQkJKGhuYXRfcHJpdi0+ZGF0YS0+dmVyc2lvbiA9PSBNVEtfSE5BVF9WNCkgPyAweGYgOiAweDNmOworCQlicmVhazsKKwl9CisJcmV0dXJuIGVudHJ5OworfQorCitzdGF0aWMgdm9pZCBwcGVfZmlsbF9mbG93X2xibChzdHJ1Y3QgZm9lX2VudHJ5ICplbnRyeSwgc3RydWN0IGlwdjZoZHIgKmlwNmgpCit7CisJZW50cnktPmlwdjRfZHNsaXRlLmZsb3dfbGJsWzBdID0gaXA2aC0+Zmxvd19sYmxbMl07CisJZW50cnktPmlwdjRfZHNsaXRlLmZsb3dfbGJsWzFdID0gaXA2aC0+Zmxvd19sYmxbMV07CisJZW50cnktPmlwdjRfZHNsaXRlLmZsb3dfbGJsWzJdID0gaXA2aC0+Zmxvd19sYmxbMF07Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2tiX3RvX2huYXRfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBmb2VfZW50cnkgKmZvZSwKKwkJCQkgICAgIHN0cnVjdCBmbG93X29mZmxvYWRfaHdfcGF0aCAqaHdfcGF0aCkKK3sKKwlzdHJ1Y3QgZm9lX2VudHJ5IGVudHJ5ID0geyAwIH07CisJaW50IHdobmF0ID0gSVNfV0hOQVQoZGV2KTsKKwlzdHJ1Y3QgZXRoaGRyICpldGg7CisJc3RydWN0IGlwaGRyICppcGg7CisJc3RydWN0IGlwdjZoZHIgKmlwNmg7CisJc3RydWN0IHRjcHVkcGhkciBfcG9ydHM7CisJY29uc3Qgc3RydWN0IHRjcHVkcGhkciAqcHB0cjsKKwl1MzIgZ21hYyA9IE5SX0RJU0NBUkQ7CisJaW50IHVkcCA9IDA7CisJdTMyIHFpZCA9IDA7CisJdTMyIHBvcnRfaWQgPSAwOworCWludCBtYXBlID0gMDsKKworCWlmIChpcHY2X2hkcihza2IpLT5uZXh0aGRyID09IE5FWFRIRFJfSVBJUCkKKwkJLyogcG9pbnQgdG8gZXRoZXJuZXQgaGVhZGVyIGZvciBEUy1MaXRlIGFuZCBNYXBFICovCisJCWV0aCA9IChzdHJ1Y3QgZXRoaGRyICopKHNrYi0+ZGF0YSAtIEVUSF9ITEVOKTsKKwllbHNlCisJCWV0aCA9IGV0aF9oZHIoc2tiKTsKKworCS8qZG8gbm90IGJpbmQgbXVsdGljYXN0IGlmIFBQRSBtY2FzdCBub3QgZW5hYmxlKi8KKwlpZiAoIWhuYXRfcHJpdi0+ZGF0YS0+bWNhc3QgJiYgaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZXRoLT5oX2Rlc3QpKQorCQlyZXR1cm4gMDsKKworCWVudHJ5LmJmaWIxLnBrdF90eXBlID0gZm9lLT51ZGliMS5wa3RfdHlwZTsgLyogR2V0IHBhY2t0ZSB0eXBlIHN0YXRlKi8KKyNpZiBkZWZpbmVkKENPTkZJR19NRURJQVRFS19ORVRTWVNfVjIpCisJZW50cnkuYmZpYjEuc3AgPSBmb2UtPnVkaWIxLnNwOworI2VuZGlmCisKKwlzd2l0Y2ggKG50b2hzKGV0aC0+aF9wcm90bykpIHsKKwljYXNlIEVUSF9QX0lQOgorCQlpcGggPSBpcF9oZHIoc2tiKTsKKwkJc3dpdGNoIChpcGgtPnByb3RvY29sKSB7CisJCWNhc2UgSVBQUk9UT19VRFA6CisJCQl1ZHAgPSAxOworCQkJLyogZmFsbHRocm91Z2ggKi8KKwkJY2FzZSBJUFBST1RPX1RDUDoKKwkJCWVudHJ5LmlwdjRfaG5hcHQuZXR5cGUgPSBodG9ucyhFVEhfUF9JUCk7CisKKwkJCS8qIERTLUxpdGUgV0FOLT5MQU4gKi8KKwkJCWlmIChlbnRyeS5pcHY0X2huYXB0LmJmaWIxLnBrdF90eXBlID09IElQVjRfRFNMSVRFIHx8CisJCQkgICAgZW50cnkuaXB2NF9obmFwdC5iZmliMS5wa3RfdHlwZSA9PSBJUFY0X01BUF9FKSB7CisJCQkJZW50cnkuaXB2NF9kc2xpdGUuc2lwID0gZm9lLT5pcHY0X2RzbGl0ZS5zaXA7CisJCQkJZW50cnkuaXB2NF9kc2xpdGUuZGlwID0gZm9lLT5pcHY0X2RzbGl0ZS5kaXA7CisJCQkJZW50cnkuaXB2NF9kc2xpdGUuc3BvcnQgPQorCQkJCQlmb2UtPmlwdjRfZHNsaXRlLnNwb3J0OworCQkJCWVudHJ5LmlwdjRfZHNsaXRlLmRwb3J0ID0KKwkJCQkJZm9lLT5pcHY0X2RzbGl0ZS5kcG9ydDsKKworI2lmIGRlZmluZWQoQ09ORklHX01FRElBVEVLX05FVFNZU19WMikKKwkJCQlpZiAoZW50cnkuYmZpYjEucGt0X3R5cGUgPT0gSVBWNF9NQVBfRSkgeworCQkJCQlwcHRyID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwKKwkJCQkJCQkJICBpcGgtPmlobCAqIDQsCisJCQkJCQkJCSAgc2l6ZW9mKF9wb3J0cyksCisJCQkJCQkJCSAgJl9wb3J0cyk7CisJCQkJCWlmICh1bmxpa2VseSghcHB0cikpCisJCQkJCQlyZXR1cm4gLTE7CisKKwkJCQkJZW50cnkuaXB2NF9kc2xpdGUubmV3X3NpcCA9CisJCQkJCQkJbnRvaGwoaXBoLT5zYWRkcik7CisJCQkJCWVudHJ5LmlwdjRfZHNsaXRlLm5ld19kaXAgPQorCQkJCQkJCW50b2hsKGlwaC0+ZGFkZHIpOworCQkJCQllbnRyeS5pcHY0X2RzbGl0ZS5uZXdfc3BvcnQgPQorCQkJCQkJCW50b2hzKHBwdHItPnNyYyk7CisJCQkJCWVudHJ5LmlwdjRfZHNsaXRlLm5ld19kcG9ydCA9CisJCQkJCQkJbnRvaHMocHB0ci0+ZHN0KTsKKwkJCQl9CisjZW5kaWYKKworCQkJCWVudHJ5LmlwdjRfZHNsaXRlLnR1bm5lbF9zaXB2Nl8wID0KKwkJCQkJZm9lLT5pcHY0X2RzbGl0ZS50dW5uZWxfc2lwdjZfMDsKKwkJCQllbnRyeS5pcHY0X2RzbGl0ZS50dW5uZWxfc2lwdjZfMSA9CisJCQkJCWZvZS0+aXB2NF9kc2xpdGUudHVubmVsX3NpcHY2XzE7CisJCQkJZW50cnkuaXB2NF9kc2xpdGUudHVubmVsX3NpcHY2XzIgPQorCQkJCQlmb2UtPmlwdjRfZHNsaXRlLnR1bm5lbF9zaXB2Nl8yOworCQkJCWVudHJ5LmlwdjRfZHNsaXRlLnR1bm5lbF9zaXB2Nl8zID0KKwkJCQkJZm9lLT5pcHY0X2RzbGl0ZS50dW5uZWxfc2lwdjZfMzsKKworCQkJCWVudHJ5LmlwdjRfZHNsaXRlLnR1bm5lbF9kaXB2Nl8wID0KKwkJCQkJZm9lLT5pcHY0X2RzbGl0ZS50dW5uZWxfZGlwdjZfMDsKKwkJCQllbnRyeS5pcHY0X2RzbGl0ZS50dW5uZWxfZGlwdjZfMSA9CisJCQkJCWZvZS0+aXB2NF9kc2xpdGUudHVubmVsX2RpcHY2XzE7CisJCQkJZW50cnkuaXB2NF9kc2xpdGUudHVubmVsX2RpcHY2XzIgPQorCQkJCQlmb2UtPmlwdjRfZHNsaXRlLnR1bm5lbF9kaXB2Nl8yOworCQkJCWVudHJ5LmlwdjRfZHNsaXRlLnR1bm5lbF9kaXB2Nl8zID0KKwkJCQkJZm9lLT5pcHY0X2RzbGl0ZS50dW5uZWxfZGlwdjZfMzsKKworCQkJCWVudHJ5LmlwdjRfZHNsaXRlLmJmaWIxLnJtdCA9IDE7CisJCQkJZW50cnkuaXB2NF9kc2xpdGUuaWJsazIuZHNjcCA9IGlwaC0+dG9zOworCQkJCWVudHJ5LmlwdjRfZHNsaXRlLnZsYW4xID0gaHdfcGF0aC0+dmxhbl9pZDsKKwkJCQlpZiAoaG5hdF9wcml2LT5kYXRhLT5wZXJfZmxvd19hY2NvdW50aW5nKQorCQkJCQllbnRyeS5pcHY0X2RzbGl0ZS5pYmxrMi5taWJmID0gMTsKKworCQkJfSBlbHNlIHsKKwkJCQllbnRyeS5pcHY0X2huYXB0LmlibGsyLmRzY3AgPSBpcGgtPnRvczsKKwkJCQlpZiAoaG5hdF9wcml2LT5kYXRhLT5wZXJfZmxvd19hY2NvdW50aW5nKQorCQkJCQllbnRyeS5pcHY0X2huYXB0LmlibGsyLm1pYmYgPSAxOworCisJCQkJZW50cnkuaXB2NF9obmFwdC52bGFuMSA9IGh3X3BhdGgtPnZsYW5faWQ7CisKKwkJCQlpZiAoc2tiLT52bGFuX3RjaSAmJiBGUk9NX0dFX1dBTihza2IpICYmIElTX0xBTihkZXYpKSB7CisJCQkJCWVudHJ5LmJmaWIxLnZsYW5fbGF5ZXIgKz0gMTsKKworCQkJCQlpZiAoZW50cnkuaXB2NF9obmFwdC52bGFuMSkKKwkJCQkJCWVudHJ5LmlwdjRfaG5hcHQudmxhbjIgPSAoc2tiLT52bGFuX3RjaSAmIFZMQU5fVklEX01BU0spOworCQkJCQllbHNlCisJCQkJCQllbnRyeS5pcHY0X2huYXB0LnZsYW4xID0gKHNrYi0+dmxhbl90Y2kgJiBWTEFOX1ZJRF9NQVNLKTsKKwkJCQl9CisKKwkJCQllbnRyeS5pcHY0X2huYXB0LnNpcCA9IGZvZS0+aXB2NF9obmFwdC5zaXA7CisJCQkJZW50cnkuaXB2NF9obmFwdC5kaXAgPSBmb2UtPmlwdjRfaG5hcHQuZGlwOworCQkJCWVudHJ5LmlwdjRfaG5hcHQuc3BvcnQgPSBmb2UtPmlwdjRfaG5hcHQuc3BvcnQ7CisJCQkJZW50cnkuaXB2NF9obmFwdC5kcG9ydCA9IGZvZS0+aXB2NF9obmFwdC5kcG9ydDsKKworCQkJCWVudHJ5LmlwdjRfaG5hcHQubmV3X3NpcCA9IG50b2hsKGlwaC0+c2FkZHIpOworCQkJCWVudHJ5LmlwdjRfaG5hcHQubmV3X2RpcCA9IG50b2hsKGlwaC0+ZGFkZHIpOworCQkJfQorCisJCQllbnRyeS5pcHY0X2huYXB0LmJmaWIxLnVkcCA9IHVkcDsKKwkJCWlmIChJU19JUFY0X0hOQVBUKGZvZSkpIHsKKwkJCQlwcHRyID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgaXBoLT5paGwgKiA0LAorCQkJCQkJCSAgc2l6ZW9mKF9wb3J0cyksCisJCQkJCQkJICAmX3BvcnRzKTsKKwkJCQlpZiAodW5saWtlbHkoIXBwdHIpKQorCQkJCQlyZXR1cm4gLTE7CisKKwkJCQllbnRyeS5pcHY0X2huYXB0Lm5ld19zcG9ydCA9IG50b2hzKHBwdHItPnNyYyk7CisJCQkJZW50cnkuaXB2NF9obmFwdC5uZXdfZHBvcnQgPSBudG9ocyhwcHRyLT5kc3QpOworCQkJfQorCisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC0xOworCQl9CisJCXRyYWNlX3ByaW50aygKKwkJCSJbJXNdc2tiLT5oZWFkPSVwLCBza2ItPmRhdGE9JXAsaXBfaGRyPSVwLCBza2ItPmxlbj0lZCwgc2tiLT5kYXRhX2xlbj0lZFxuIiwKKwkJCV9fZnVuY19fLCBza2ItPmhlYWQsIHNrYi0+ZGF0YSwgaXBoLCBza2ItPmxlbiwKKwkJCXNrYi0+ZGF0YV9sZW4pOworCQlicmVhazsKKworCWNhc2UgRVRIX1BfSVBWNjoKKwkJaXA2aCA9IGlwdjZfaGRyKHNrYik7CisJCXN3aXRjaCAoaXA2aC0+bmV4dGhkcikgeworCQljYXNlIE5FWFRIRFJfVURQOgorCQkJdWRwID0gMTsKKwkJCS8qIGZhbGx0aHJvdWdoICovCisJCWNhc2UgTkVYVEhEUl9UQ1A6IC8qIElQdjYtNVQgb3IgSVB2Ni0zVCAqLworCQkJZW50cnkuaXB2Nl81dF9yb3V0ZS5ldHlwZSA9IGh0b25zKEVUSF9QX0lQVjYpOworCisJCQllbnRyeS5pcHY2XzV0X3JvdXRlLnZsYW4xID0gaHdfcGF0aC0+dmxhbl9pZDsKKworCQkJaWYgKHNrYi0+dmxhbl90Y2kgJiYgRlJPTV9HRV9XQU4oc2tiKSAmJiBJU19MQU4oZGV2KSkgeworCQkJCWVudHJ5LmJmaWIxLnZsYW5fbGF5ZXIgKz0gMTsKKworCQkJCWlmIChlbnRyeS5pcHY2XzV0X3JvdXRlLnZsYW4xKQorCQkJCQllbnRyeS5pcHY2XzV0X3JvdXRlLnZsYW4yID0gKHNrYi0+dmxhbl90Y2kgJiBWTEFOX1ZJRF9NQVNLKTsKKwkJCQllbHNlCisJCQkJCWVudHJ5LmlwdjZfNXRfcm91dGUudmxhbjEgPSAoc2tiLT52bGFuX3RjaSAmIFZMQU5fVklEX01BU0spOworCQkJfQorCisJCQlpZiAoaG5hdF9wcml2LT5kYXRhLT5wZXJfZmxvd19hY2NvdW50aW5nKQorCQkJCWVudHJ5LmlwdjZfNXRfcm91dGUuaWJsazIubWliZiA9IDE7CisJCQllbnRyeS5pcHY2XzV0X3JvdXRlLmJmaWIxLnVkcCA9IHVkcDsKKworCQkJaWYgKElTX0lQVjZfNlJEKGZvZSkpIHsKKwkJCQllbnRyeS5pcHY2XzV0X3JvdXRlLmJmaWIxLnJtdCA9IDE7CisJCQkJZW50cnkuaXB2Nl82cmQudHVubmVsX3NpcHY0ID0KKwkJCQkJZm9lLT5pcHY2XzZyZC50dW5uZWxfc2lwdjQ7CisJCQkJZW50cnkuaXB2Nl82cmQudHVubmVsX2RpcHY0ID0KKwkJCQkJZm9lLT5pcHY2XzZyZC50dW5uZWxfZGlwdjQ7CisJCQl9CisKKwkJCWVudHJ5LmlwdjZfM3Rfcm91dGUuaXB2Nl9zaXAwID0KKwkJCQlmb2UtPmlwdjZfM3Rfcm91dGUuaXB2Nl9zaXAwOworCQkJZW50cnkuaXB2Nl8zdF9yb3V0ZS5pcHY2X3NpcDEgPQorCQkJCWZvZS0+aXB2Nl8zdF9yb3V0ZS5pcHY2X3NpcDE7CisJCQllbnRyeS5pcHY2XzN0X3JvdXRlLmlwdjZfc2lwMiA9CisJCQkJZm9lLT5pcHY2XzN0X3JvdXRlLmlwdjZfc2lwMjsKKwkJCWVudHJ5LmlwdjZfM3Rfcm91dGUuaXB2Nl9zaXAzID0KKwkJCQlmb2UtPmlwdjZfM3Rfcm91dGUuaXB2Nl9zaXAzOworCisJCQllbnRyeS5pcHY2XzN0X3JvdXRlLmlwdjZfZGlwMCA9CisJCQkJZm9lLT5pcHY2XzN0X3JvdXRlLmlwdjZfZGlwMDsKKwkJCWVudHJ5LmlwdjZfM3Rfcm91dGUuaXB2Nl9kaXAxID0KKwkJCQlmb2UtPmlwdjZfM3Rfcm91dGUuaXB2Nl9kaXAxOworCQkJZW50cnkuaXB2Nl8zdF9yb3V0ZS5pcHY2X2RpcDIgPQorCQkJCWZvZS0+aXB2Nl8zdF9yb3V0ZS5pcHY2X2RpcDI7CisJCQllbnRyeS5pcHY2XzN0X3JvdXRlLmlwdjZfZGlwMyA9CisJCQkJZm9lLT5pcHY2XzN0X3JvdXRlLmlwdjZfZGlwMzsKKworCQkJaWYgKElTX0lQVjZfM1RfUk9VVEUoZm9lKSkgeworCQkJCWVudHJ5LmlwdjZfM3Rfcm91dGUucHJvdCA9CisJCQkJCWZvZS0+aXB2Nl8zdF9yb3V0ZS5wcm90OworCQkJCWVudHJ5LmlwdjZfM3Rfcm91dGUuaHBoID0KKwkJCQkJZm9lLT5pcHY2XzN0X3JvdXRlLmhwaDsKKwkJCX0KKworCQkJaWYgKElTX0lQVjZfNVRfUk9VVEUoZm9lKSB8fCBJU19JUFY2XzZSRChmb2UpKSB7CisJCQkJZW50cnkuaXB2Nl81dF9yb3V0ZS5zcG9ydCA9CisJCQkJCWZvZS0+aXB2Nl81dF9yb3V0ZS5zcG9ydDsKKwkJCQllbnRyeS5pcHY2XzV0X3JvdXRlLmRwb3J0ID0KKwkJCQkJZm9lLT5pcHY2XzV0X3JvdXRlLmRwb3J0OworCQkJfQorCQkJZW50cnkuaXB2Nl81dF9yb3V0ZS5pYmxrMi5kc2NwID0KKwkJCQkoaXA2aC0+cHJpb3JpdHkgPDwgNCB8CisJCQkJIChpcDZoLT5mbG93X2xibFswXSA+PiA0KSk7CisJCQlicmVhazsKKworCQljYXNlIE5FWFRIRFJfSVBJUDoKKwkJCWlmICgoIW1hcGVfdG9nZ2xlICYmCisJCQkgICAgIGVudHJ5LmJmaWIxLnBrdF90eXBlID09IElQVjRfRFNMSVRFKSB8fAorCQkJICAgIChtYXBlX3RvZ2dsZSAmJgorCQkJICAgICBlbnRyeS5iZmliMS5wa3RfdHlwZSA9PSBJUFY0X01BUF9FKSkgeworCQkJCS8qIERTLUxpdGUgTEFOLT5XQU4gKi8KKwkJCQllbnRyeS5pcHY0X2RzbGl0ZS5iZmliMS51ZHAgPQorCQkJCQlmb2UtPmlwdjRfZHNsaXRlLmJmaWIxLnVkcDsKKwkJCQllbnRyeS5pcHY0X2RzbGl0ZS5zaXAgPSBmb2UtPmlwdjRfZHNsaXRlLnNpcDsKKwkJCQllbnRyeS5pcHY0X2RzbGl0ZS5kaXAgPSBmb2UtPmlwdjRfZHNsaXRlLmRpcDsKKwkJCQllbnRyeS5pcHY0X2RzbGl0ZS5zcG9ydCA9CisJCQkJCWZvZS0+aXB2NF9kc2xpdGUuc3BvcnQ7CisJCQkJZW50cnkuaXB2NF9kc2xpdGUuZHBvcnQgPQorCQkJCQlmb2UtPmlwdjRfZHNsaXRlLmRwb3J0OworCisJCQkJZW50cnkuaXB2NF9kc2xpdGUudHVubmVsX3NpcHY2XzAgPQorCQkJCQludG9obChpcDZoLT5zYWRkci5zNl9hZGRyMzJbMF0pOworCQkJCWVudHJ5LmlwdjRfZHNsaXRlLnR1bm5lbF9zaXB2Nl8xID0KKwkJCQkJbnRvaGwoaXA2aC0+c2FkZHIuczZfYWRkcjMyWzFdKTsKKwkJCQllbnRyeS5pcHY0X2RzbGl0ZS50dW5uZWxfc2lwdjZfMiA9CisJCQkJCW50b2hsKGlwNmgtPnNhZGRyLnM2X2FkZHIzMlsyXSk7CisJCQkJZW50cnkuaXB2NF9kc2xpdGUudHVubmVsX3NpcHY2XzMgPQorCQkJCQludG9obChpcDZoLT5zYWRkci5zNl9hZGRyMzJbM10pOworCisJCQkJZW50cnkuaXB2NF9kc2xpdGUudHVubmVsX2RpcHY2XzAgPQorCQkJCQludG9obChpcDZoLT5kYWRkci5zNl9hZGRyMzJbMF0pOworCQkJCWVudHJ5LmlwdjRfZHNsaXRlLnR1bm5lbF9kaXB2Nl8xID0KKwkJCQkJbnRvaGwoaXA2aC0+ZGFkZHIuczZfYWRkcjMyWzFdKTsKKwkJCQllbnRyeS5pcHY0X2RzbGl0ZS50dW5uZWxfZGlwdjZfMiA9CisJCQkJCW50b2hsKGlwNmgtPmRhZGRyLnM2X2FkZHIzMlsyXSk7CisJCQkJZW50cnkuaXB2NF9kc2xpdGUudHVubmVsX2RpcHY2XzMgPQorCQkJCQludG9obChpcDZoLT5kYWRkci5zNl9hZGRyMzJbM10pOworCisJCQkJcHBlX2ZpbGxfZmxvd19sYmwoJmVudHJ5LCBpcDZoKTsKKworCQkJCWVudHJ5LmlwdjRfZHNsaXRlLnByaW9yaXR5ID0gaXA2aC0+cHJpb3JpdHk7CisJCQkJZW50cnkuaXB2NF9kc2xpdGUuaG9wX2xpbWl0ID0gaXA2aC0+aG9wX2xpbWl0OworCQkJCWVudHJ5LmlwdjRfZHNsaXRlLnZsYW4xID0gaHdfcGF0aC0+dmxhbl9pZDsKKwkJCQlpZiAoaG5hdF9wcml2LT5kYXRhLT5wZXJfZmxvd19hY2NvdW50aW5nKQorCQkJCQllbnRyeS5pcHY0X2RzbGl0ZS5pYmxrMi5taWJmID0gMTsKKwkJCX0gZWxzZSBpZiAobWFwZV90b2dnbGUgJiYKKwkJCQkgICBlbnRyeS5iZmliMS5wa3RfdHlwZSA9PSBJUFY0X0hOQVBUKSB7CisJCQkJLyogTWFwRSBMQU4gLT4gV0FOICovCisJCQkJbWFwZSA9IDE7CisJCQkJZW50cnkuaXB2NF9obmFwdC5pYmxrMi5kc2NwID0KKwkJCQkJZm9lLT5pcHY0X2huYXB0LmlibGsyLmRzY3A7CisJCQkJaWYgKGhuYXRfcHJpdi0+ZGF0YS0+cGVyX2Zsb3dfYWNjb3VudGluZykKKwkJCQkJZW50cnkuaXB2NF9obmFwdC5pYmxrMi5taWJmID0gMTsKKworCQkJCWlmIChJU19HTUFDMV9NT0RFKQorCQkJCQllbnRyeS5pcHY0X2huYXB0LnZsYW4xID0gMTsKKwkJCQllbHNlCisJCQkJCWVudHJ5LmlwdjRfaG5hcHQudmxhbjEgPSBod19wYXRoLT52bGFuX2lkOworCisJCQkJZW50cnkuaXB2NF9obmFwdC5zaXAgPSBmb2UtPmlwdjRfaG5hcHQuc2lwOworCQkJCWVudHJ5LmlwdjRfaG5hcHQuZGlwID0gZm9lLT5pcHY0X2huYXB0LmRpcDsKKwkJCQllbnRyeS5pcHY0X2huYXB0LnNwb3J0ID0gZm9lLT5pcHY0X2huYXB0LnNwb3J0OworCQkJCWVudHJ5LmlwdjRfaG5hcHQuZHBvcnQgPSBmb2UtPmlwdjRfaG5hcHQuZHBvcnQ7CisKKwkJCQllbnRyeS5pcHY0X2huYXB0Lm5ld19zaXAgPQorCQkJCQlmb2UtPmlwdjRfaG5hcHQubmV3X3NpcDsKKwkJCQllbnRyeS5pcHY0X2huYXB0Lm5ld19kaXAgPQorCQkJCQlmb2UtPmlwdjRfaG5hcHQubmV3X2RpcDsKKwkJCQllbnRyeS5pcHY0X2huYXB0LmV0eXBlID0gaHRvbnMoRVRIX1BfSVApOworCisJCQkJaWYgKElTX0hRT1NfTU9ERSkgeworCQkJCQllbnRyeS5pcHY0X2huYXB0LmlibGsyLnFpZCA9CisJCQkJCQkoaG5hdF9wcml2LT5kYXRhLT52ZXJzaW9uID09IE1US19ITkFUX1Y0KSA/CisJCQkJCQkgc2tiLT5tYXJrICYgMHg3ZiA6IHNrYi0+bWFyayAmIDB4ZjsKKwkJCQkJZW50cnkuaXB2NF9obmFwdC5pYmxrMi5mcW9zID0gMTsKKwkJCQl9CisKKwkJCQllbnRyeS5pcHY0X2huYXB0LmJmaWIxLnVkcCA9CisJCQkJCWZvZS0+aXB2NF9obmFwdC5iZmliMS51ZHA7CisKKwkJCQllbnRyeS5pcHY0X2huYXB0Lm5ld19zcG9ydCA9CisJCQkJCWZvZS0+aXB2NF9obmFwdC5uZXdfc3BvcnQ7CisJCQkJZW50cnkuaXB2NF9obmFwdC5uZXdfZHBvcnQgPQorCQkJCQlmb2UtPmlwdjRfaG5hcHQubmV3X2Rwb3J0OworCQkJCW1hcGVfbDJ3X3Y2aCA9ICppcDZoOworCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCXRyYWNlX3ByaW50aygKKwkJCSJbJXNdc2tiLT5oZWFkPSVwLCBza2ItPmRhdGE9JXAsaXB2Nl9oZHI9JXAsIHNrYi0+bGVuPSVkLCBza2ItPmRhdGFfbGVuPSVkXG4iLAorCQkJX19mdW5jX18sIHNrYi0+aGVhZCwgc2tiLT5kYXRhLCBpcDZoLCBza2ItPmxlbiwKKwkJCXNrYi0+ZGF0YV9sZW4pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWlwaCA9IGlwX2hkcihza2IpOworCQlzd2l0Y2ggKGVudHJ5LmJmaWIxLnBrdF90eXBlKSB7CisJCWNhc2UgSVBWNl82UkQ6IC8qIDZSRCBMQU4tPldBTiAqLworCQkJZW50cnkuaXB2Nl82cmQuaXB2Nl9zaXAwID0gZm9lLT5pcHY2XzZyZC5pcHY2X3NpcDA7CisJCQllbnRyeS5pcHY2XzZyZC5pcHY2X3NpcDEgPSBmb2UtPmlwdjZfNnJkLmlwdjZfc2lwMTsKKwkJCWVudHJ5LmlwdjZfNnJkLmlwdjZfc2lwMiA9IGZvZS0+aXB2Nl82cmQuaXB2Nl9zaXAyOworCQkJZW50cnkuaXB2Nl82cmQuaXB2Nl9zaXAzID0gZm9lLT5pcHY2XzZyZC5pcHY2X3NpcDM7CisKKwkJCWVudHJ5LmlwdjZfNnJkLmlwdjZfZGlwMCA9IGZvZS0+aXB2Nl82cmQuaXB2Nl9kaXAwOworCQkJZW50cnkuaXB2Nl82cmQuaXB2Nl9kaXAxID0gZm9lLT5pcHY2XzZyZC5pcHY2X2RpcDE7CisJCQllbnRyeS5pcHY2XzZyZC5pcHY2X2RpcDIgPSBmb2UtPmlwdjZfNnJkLmlwdjZfZGlwMjsKKwkJCWVudHJ5LmlwdjZfNnJkLmlwdjZfZGlwMyA9IGZvZS0+aXB2Nl82cmQuaXB2Nl9kaXAzOworCisJCQllbnRyeS5pcHY2XzZyZC5zcG9ydCA9IGZvZS0+aXB2Nl82cmQuc3BvcnQ7CisJCQllbnRyeS5pcHY2XzZyZC5kcG9ydCA9IGZvZS0+aXB2Nl82cmQuZHBvcnQ7CisJCQllbnRyeS5pcHY2XzZyZC50dW5uZWxfc2lwdjQgPSBudG9obChpcGgtPnNhZGRyKTsKKwkJCWVudHJ5LmlwdjZfNnJkLnR1bm5lbF9kaXB2NCA9IG50b2hsKGlwaC0+ZGFkZHIpOworCQkJZW50cnkuaXB2Nl82cmQuaGRyX2Noa3N1bSA9IHBwZV9nZXRfY2hrYmFzZShpcGgpOworCQkJZW50cnkuaXB2Nl82cmQuZmxhZyA9IChudG9ocyhpcGgtPmZyYWdfb2ZmKSA+PiAxMyk7CisJCQllbnRyeS5pcHY2XzZyZC50dGwgPSBpcGgtPnR0bDsKKwkJCWVudHJ5LmlwdjZfNnJkLmRzY3AgPSBpcGgtPnRvczsKKwkJCWVudHJ5LmlwdjZfNnJkLnBlcl9mbG93XzZyZF9pZCA9IDE7CisJCQllbnRyeS5pcHY2XzZyZC52bGFuMSA9IGh3X3BhdGgtPnZsYW5faWQ7CisJCQlpZiAoaG5hdF9wcml2LT5kYXRhLT5wZXJfZmxvd19hY2NvdW50aW5nKQorCQkJCWVudHJ5LmlwdjZfNnJkLmlibGsyLm1pYmYgPSAxOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCS8qIEZpbGwgTGF5ZXIyIEluZm8uKi8KKwllbnRyeSA9IHBwZV9maWxsX0wyX2luZm8oZXRoLCBlbnRyeSwgaHdfcGF0aCk7CisKKwkvKiBGaWxsIEluZm8gQmxrKi8KKwllbnRyeSA9IHBwZV9maWxsX2luZm9fYmxrKGV0aCwgZW50cnksIGh3X3BhdGgpOworCisJaWYgKElTX0xBTihkZXYpKSB7CisJCWlmIChJU19EU0FfTEFOKGRldikpCisJCQlwb3J0X2lkID0gaG5hdF9kc2FfZmlsbF9zdGFnKGRldiwgJmVudHJ5LCBod19wYXRoLAorCQkJCQkJICAgICBudG9ocyhldGgtPmhfcHJvdG8pLAorCQkJCQkJICAgICBtYXBlKTsKKworCQlpZiAoSVNfQk9ORF9NT0RFKQorCQkJZ21hYyA9ICgoc2tiX2huYXRfZW50cnkoc2tiKSA+PiAxKSAlIGhuYXRfcHJpdi0+Z21hY19udW0pID8KKwkJCQkgTlJfR01BQzJfUE9SVCA6IE5SX0dNQUMxX1BPUlQ7CisJCWVsc2UKKwkJCWdtYWMgPSBOUl9HTUFDMV9QT1JUOworCX0gZWxzZSBpZiAoSVNfV0FOKGRldikpIHsKKwkJaWYgKElTX0RTQV9XQU4oZGV2KSkKKwkJCXBvcnRfaWQgPSBobmF0X2RzYV9maWxsX3N0YWcoZGV2LCZlbnRyeSwgaHdfcGF0aCwKKwkJCQkJCSAgICAgbnRvaHMoZXRoLT5oX3Byb3RvKSwKKwkJCQkJCSAgICAgbWFwZSk7CisJCWlmIChtYXBlX3RvZ2dsZSAmJiBtYXBlID09IDEpIHsKKwkJCWdtYWMgPSBOUl9QRE1BX1BPUlQ7CisJCQkvKiBTZXQgYWN0X2RwID0gd2FuX2RldiAqLworCQkJZW50cnkuaXB2NF9obmFwdC5hY3RfZHAgPSBkZXYtPmlmaW5kZXg7CisJCX0gZWxzZSB7CisJCQlnbWFjID0gKElTX0dNQUMxX01PREUpID8gTlJfR01BQzFfUE9SVCA6IE5SX0dNQUMyX1BPUlQ7CisJCX0KKwl9IGVsc2UgaWYgKElTX0VYVChkZXYpICYmIChGUk9NX0dFX1BQRChza2IpIHx8IEZST01fR0VfTEFOKHNrYikgfHwKKwkJICAgRlJPTV9HRV9XQU4oc2tiKSB8fCBGUk9NX0dFX1ZJUlRVQUwoc2tiKSB8fCBGUk9NX1dFRChza2IpKSkgeworCQlpZiAoIWhuYXRfcHJpdi0+ZGF0YS0+d2huYXQgJiYgSVNfR01BQzFfTU9ERSkgeworCQkJZW50cnkuYmZpYjEudnBtID0gMTsKKwkJCWVudHJ5LmJmaWIxLnZsYW5fbGF5ZXIgPSAxOworCisJCQlpZiAoRlJPTV9HRV9MQU4oc2tiKSkKKwkJCQllbnRyeS5pcHY0X2huYXB0LnZsYW4xID0gMTsKKwkJCWVsc2UgaWYgKEZST01fR0VfV0FOKHNrYikgfHwgRlJPTV9HRV9WSVJUVUFMKHNrYikpCisJCQkJZW50cnkuaXB2NF9obmFwdC52bGFuMSA9IDI7CisJCX0KKworCQl0cmFjZV9wcmludGsoImxlYXJuIG9mIGxhbiBvciB3YW4oaWlmPSV4KSAtLT4gJXMoZXh0KVxuIiwKKwkJCSAgICAgc2tiX2huYXRfaWZhY2Uoc2tiKSwgZGV2LT5uYW1lKTsKKwkJLyogVG8gQ1BVIHRoZW4gc3RvbGVuIGJ5IHByZS1yb3V0aW5nIGhhbnQgaG9vayBvZiBMQU4vV0FOCisJCSAqIEN1cnJlbnQgc2V0dGluZyBpcyBQRE1BIFJYLgorCQkgKi8KKwkJZ21hYyA9IE5SX1BETUFfUE9SVDsKKwkJaWYgKElTX0lQVjRfR1JQKGZvZSkpCisJCQllbnRyeS5pcHY0X2huYXB0LmFjdF9kcCA9IGRldi0+aWZpbmRleDsKKwkJZWxzZQorCQkJZW50cnkuaXB2Nl81dF9yb3V0ZS5hY3RfZHAgPSBkZXYtPmlmaW5kZXg7CisJfSBlbHNlIHsKKwkJcHJpbnRrX3JhdGVsaW1pdGVkKEtFUk5fV0FSTklORworCQkJCQkiVW5rbm93biBjYXNlIG9mIGRwLCBpaWY9JXggLS0+ICVzXG4iLAorCQkJCQlza2JfaG5hdF9pZmFjZShza2IpLCBkZXYtPm5hbWUpOworCisJCXJldHVybiAwOworCX0KKworCWlmIChJU19IUU9TX01PREUpCisJCXFpZCA9IHNrYi0+bWFyayAmIChNVEtfUURNQV9UWF9NQVNLKTsKKwllbHNlIGlmIChJU19QUFBRX01PREUgJiYgKElTX0RTQV9MQU4oZGV2KSB8fCBJU19EU0FfV0FOKGRldikpKQorCQlxaWQgPSBwb3J0X2lkICYgTVRLX1FETUFfVFhfTUFTSzsKKwllbHNlCisJCXFpZCA9IDA7CisKKwlpZiAoSVNfSVBWNF9HUlAoZm9lKSkgeworCQllbnRyeS5pcHY0X2huYXB0LmlibGsyLmRwID0gZ21hYzsKKwkJZW50cnkuaXB2NF9obmFwdC5pYmxrMi5wb3J0X21nID0KKwkJCShobmF0X3ByaXYtPmRhdGEtPnZlcnNpb24gPT0gTVRLX0hOQVRfVjEpID8gMHgzZiA6IDA7CisKKwkJaWYgKHFvc190b2dnbGUpIHsKKwkJCWlmIChobmF0X3ByaXYtPmRhdGEtPnZlcnNpb24gPT0gTVRLX0hOQVRfVjQpIHsKKwkJCQllbnRyeS5pcHY0X2huYXB0LmlibGsyLnFpZCA9IHFpZCAmIDB4N2Y7CisJCQl9IGVsc2UgeworCQkJCS8qIHFpZFs1OjBdPSBwb3J0X21nWzE6MF0rIHFpZFszOjBdICovCisJCQkJZW50cnkuaXB2NF9obmFwdC5pYmxrMi5xaWQgPSBxaWQgJiAweGY7CisJCQkJaWYgKGhuYXRfcHJpdi0+ZGF0YS0+dmVyc2lvbiAhPSBNVEtfSE5BVF9WMSkKKwkJCQkJZW50cnkuaXB2NF9obmFwdC5pYmxrMi5wb3J0X21nIHw9CisJCQkJCQkoKHFpZCA+PiA0KSAmIDB4Myk7CisKKwkJCQlpZiAoKChJU19FWFQoZGV2KSAmJiAoRlJPTV9HRV9MQU4oc2tiKSB8fAorCQkJCSAgICAgIEZST01fR0VfV0FOKHNrYikgfHwgRlJPTV9HRV9WSVJUVUFMKHNrYikpKSB8fAorCQkJCSAgICAgICgobWFwZV90b2dnbGUgJiYgbWFwZSA9PSAxKSAmJiAhRlJPTV9FWFQoc2tiKSkpICYmCisJCQkJICAgICAgKCF3aG5hdCkpIHsKKwkJCQkJZW50cnkuaXB2NF9obmFwdC5ldHlwZSA9IGh0b25zKEhRT1NfTUFHSUNfVEFHKTsKKwkJCQkJZW50cnkuaXB2NF9obmFwdC52bGFuMSA9IHNrYl9obmF0X2VudHJ5KHNrYik7CisJCQkJCWVudHJ5LmJmaWIxLnZsYW5fbGF5ZXIgPSAxOworCQkJCX0KKwkJCX0KKworCQkJaWYgKEZST01fRVhUKHNrYikgfHwgc2tiX2huYXRfc3BvcnQoc2tiKSA9PSBOUl9RRE1BX1BPUlQgfHwKKwkJCSAgICAoSVNfUFBQUV9NT0RFICYmICFJU19EU0FfTEFOKGRldikgJiYgIUlTX0RTQV9XQU4oZGV2KSkpCisJCQkJZW50cnkuaXB2NF9obmFwdC5pYmxrMi5mcW9zID0gMDsKKwkJCWVsc2UKKwkJCQllbnRyeS5pcHY0X2huYXB0LmlibGsyLmZxb3MgPSAxOworCQl9IGVsc2UgeworCQkJZW50cnkuaXB2NF9obmFwdC5pYmxrMi5mcW9zID0gMDsKKwkJfQorCX0gZWxzZSB7CisJCWVudHJ5LmlwdjZfNXRfcm91dGUuaWJsazIuZHAgPSBnbWFjOworCQllbnRyeS5pcHY2XzV0X3JvdXRlLmlibGsyLnBvcnRfbWcgPQorCQkJKGhuYXRfcHJpdi0+ZGF0YS0+dmVyc2lvbiA9PSBNVEtfSE5BVF9WMSkgPyAweDNmIDogMDsKKworCQlpZiAocW9zX3RvZ2dsZSkgeworCQkJaWYgKGhuYXRfcHJpdi0+ZGF0YS0+dmVyc2lvbiA9PSBNVEtfSE5BVF9WNCkgeworCQkJCWVudHJ5LmlwdjZfNXRfcm91dGUuaWJsazIucWlkID0gcWlkICYgMHg3ZjsKKwkJCX0gZWxzZSB7CisJCQkJLyogcWlkWzU6MF09IHBvcnRfbWdbMTowXSsgcWlkWzM6MF0gKi8KKwkJCQllbnRyeS5pcHY2XzV0X3JvdXRlLmlibGsyLnFpZCA9IHFpZCAmIDB4ZjsKKwkJCQlpZiAoaG5hdF9wcml2LT5kYXRhLT52ZXJzaW9uICE9IE1US19ITkFUX1YxKQorCQkJCQllbnRyeS5pcHY2XzV0X3JvdXRlLmlibGsyLnBvcnRfbWcgfD0KKwkJCQkJCQkJKChxaWQgPj4gNCkgJiAweDMpOworCisJCQkJaWYgKElTX0VYVChkZXYpICYmIChGUk9NX0dFX0xBTihza2IpIHx8CisJCQkJICAgIEZST01fR0VfV0FOKHNrYikgfHwgRlJPTV9HRV9WSVJUVUFMKHNrYikpICYmCisJCQkJICAgICghd2huYXQpKSB7CisJCQkJCWVudHJ5LmlwdjZfNXRfcm91dGUuZXR5cGUgPSBodG9ucyhIUU9TX01BR0lDX1RBRyk7CisJCQkJCWVudHJ5LmlwdjZfNXRfcm91dGUudmxhbjEgPSBza2JfaG5hdF9lbnRyeShza2IpOworCQkJCQllbnRyeS5iZmliMS52bGFuX2xheWVyID0gMTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChGUk9NX0VYVChza2IpIHx8CisJCQkgICAgKElTX1BQUFFfTU9ERSAmJiAhSVNfRFNBX0xBTihkZXYpICYmICFJU19EU0FfV0FOKGRldikpKQorCQkJCWVudHJ5LmlwdjZfNXRfcm91dGUuaWJsazIuZnFvcyA9IDA7CisJCQllbHNlCisJCQkJZW50cnkuaXB2Nl81dF9yb3V0ZS5pYmxrMi5mcW9zID0gMTsKKwkJfSBlbHNlIHsKKwkJCWVudHJ5LmlwdjZfNXRfcm91dGUuaWJsazIuZnFvcyA9IDA7CisJCX0KKwl9CisKKwkvKiBUaGUgSU5GTzIucG9ydF9tZyBhbmQgMm5kIFZMQU4gSUQgZmllbGRzIG9mIFBQRSBlbnRyeSBhcmUgcmVkZWZpbmVkCisJICogYnkgV2ktRmkgd2huYXQgZW5naW5lLiBUaGVzZSBkYXRhIGFuZCBJTkZPMi5kcCB3aWxsIGJlIHVwZGF0ZWQgYW5kCisJICogdGhlIGVudHJ5IGlzIHNldCB0byBCSU5EIHN0YXRlIGluIG10a19zd19uYXRfaG9va190eCgpLgorCSAqLworCWlmICghd2huYXQpCisJCWVudHJ5LmJmaWIxLnN0YXRlID0gQklORDsKKworCW1lbWNweShmb2UsICZlbnRyeSwgc2l6ZW9mKGVudHJ5KSk7CisJLypyZXNldCBzdGF0aXN0aWMgZm9yIHRoaXMgZW50cnkqLworCWlmIChobmF0X3ByaXYtPmRhdGEtPnBlcl9mbG93X2FjY291bnRpbmcpCisJCW1lbXNldCgmaG5hdF9wcml2LT5hY2N0W3NrYl9obmF0X3BwZShza2IpXVtza2JfaG5hdF9lbnRyeShza2IpXSwKKwkJICAgICAgIDAsIHNpemVvZihzdHJ1Y3QgbWliX2VudHJ5KSk7CisKKwl3bWIoKTsKKwlza2JfaG5hdF9maWxsZWQoc2tiKSA9IEhOQVRfSU5GT19GSUxMRUQ7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG10a19zd19uYXRfaG9va190eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZ21hY19ubykKK3sKKwlzdHJ1Y3QgZm9lX2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3QgZXRoaGRyICpldGg7CisKKwlpZiAoc2tiX2huYXRfYWxnKHNrYikgfHwgIWlzX2huYXRfaW5mb19maWxsZWQoc2tiKSB8fAorCSAgICAhaXNfbWFnaWNfdGFnX3ZhbGlkKHNrYikgfHwgIUlTX1NQQUNFX0FWQUlMQUJMRV9IRUFEKHNrYikpCisJCXJldHVybiBORl9BQ0NFUFQ7CisKKwl0cmFjZV9wcmludGsoCisJCSJbJXNdZW50cnk9JXggcmVhc29uPSV4IGdtYWNfbm89JXggd2RtYWlkPSV4IHJ4aWQ9JXggd2NpZD0leCBic3NpZD0leFxuIiwKKwkJX19mdW5jX18sIHNrYl9obmF0X2VudHJ5KHNrYiksIHNrYl9obmF0X3JlYXNvbihza2IpLCBnbWFjX25vLAorCQlza2JfaG5hdF93ZG1hX2lkKHNrYiksIHNrYl9obmF0X2Jzc19pZChza2IpLAorCQlza2JfaG5hdF93Y19pZChza2IpLCBza2JfaG5hdF9yeF9pZChza2IpKTsKKworCWlmICgoZ21hY19ubyAhPSBOUl9XRE1BMF9QT1JUKSAmJiAoZ21hY19ubyAhPSBOUl9XRE1BMV9QT1JUKSAmJgorCSAgICAoZ21hY19ubyAhPSBOUl9XSE5BVF9XRE1BX1BPUlQpKQorCQlyZXR1cm4gTkZfQUNDRVBUOworCisJaWYgKCFza2JfaG5hdF9pc19oYXNoZWQoc2tiKSkKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKworCWlmIChza2JfaG5hdF9lbnRyeShza2IpID49IGhuYXRfcHJpdi0+Zm9lX2V0cnlfbnVtIHx8CisJICAgIHNrYl9obmF0X3BwZShza2IpID49IENGR19QUEVfTlVNKQorCQlyZXR1cm4gTkZfQUNDRVBUOworCisJZW50cnkgPSAmaG5hdF9wcml2LT5mb2VfdGFibGVfY3B1W3NrYl9obmF0X3BwZShza2IpXVtza2JfaG5hdF9lbnRyeShza2IpXTsKKwlpZiAoZW50cnlfaG5hdF9pc19ib3VuZChlbnRyeSkpCisJCXJldHVybiBORl9BQ0NFUFQ7CisKKwlpZiAoc2tiX2huYXRfcmVhc29uKHNrYikgIT0gSElUX1VOQklORF9SQVRFX1JFQUNIKQorCQlyZXR1cm4gTkZfQUNDRVBUOworCisJZXRoID0gZXRoX2hkcihza2IpOworCisJLypub3QgYmluZCBtdWx0aWNhc3QgaWYgUFBFIG1jYXN0IG5vdCBlbmFibGUqLworCWlmICghaG5hdF9wcml2LT5kYXRhLT5tY2FzdCkgeworCQlpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZXRoLT5oX2Rlc3QpKQorCQkJcmV0dXJuIE5GX0FDQ0VQVDsKKworCQlpZiAoSVNfSVBWNF9HUlAoZW50cnkpKQorCQkJZW50cnktPmlwdjRfaG5hcHQuaWJsazIubWNhc3QgPSAwOworCQllbHNlCisJCQllbnRyeS0+aXB2Nl81dF9yb3V0ZS5pYmxrMi5tY2FzdCA9IDA7CisJfQorCisJLyogU29tZSBtdF93aWZpIHZpcnR1YWwgaW50ZXJmYWNlcywgc3VjaCBhcyBhcGNsaSwKKwkgKiB3aWxsIGNoYW5nZSB0aGUgc21hYyBmb3Igc3BlY2FpbCBwdXJwb3NlLgorCSAqLworCXN3aXRjaCAoZW50cnktPmJmaWIxLnBrdF90eXBlKSB7CisJY2FzZSBJUFY0X0hOQVBUOgorCWNhc2UgSVBWNF9ITkFUOgorCQllbnRyeS0+aXB2NF9obmFwdC5zbWFjX2hpID0gc3dhYjMyKCooKHUzMiAqKWV0aC0+aF9zb3VyY2UpKTsKKwkJZW50cnktPmlwdjRfaG5hcHQuc21hY19sbyA9IHN3YWIxNigqKCh1MTYgKikmZXRoLT5oX3NvdXJjZVs0XSkpOworCQlicmVhazsKKwljYXNlIElQVjRfRFNMSVRFOgorCWNhc2UgSVBWNF9NQVBfRToKKwljYXNlIElQVjZfNlJEOgorCWNhc2UgSVBWNl81VF9ST1VURToKKwljYXNlIElQVjZfM1RfUk9VVEU6CisJCWVudHJ5LT5pcHY2XzV0X3JvdXRlLnNtYWNfaGkgPSBzd2FiMzIoKigodTMyICopZXRoLT5oX3NvdXJjZSkpOworCQllbnRyeS0+aXB2Nl81dF9yb3V0ZS5zbWFjX2xvID0gc3dhYjE2KCooKHUxNiAqKSZldGgtPmhfc291cmNlWzRdKSk7CisJCWJyZWFrOworCX0KKworCWlmIChza2ItPnZsYW5fdGNpKSB7CisJCWVudHJ5LT5iZmliMS52bGFuX2xheWVyICs9IDE7CisJCWVudHJ5LT5iZmliMS52cG0gPSAxOworCQlpZiAoSVNfSVBWNF9HUlAoZW50cnkpKSB7CisJCQllbnRyeS0+aXB2NF9obmFwdC5ldHlwZSA9IGh0b25zKEVUSF9QXzgwMjFRKTsKKwkJCWlmKGVudHJ5LT5pcHY0X2huYXB0LnZsYW4xKQorCQkJCWVudHJ5LT5pcHY0X2huYXB0LnZsYW4yID0gc2tiLT52bGFuX3RjaTsKKwkJCWVsc2UKKwkJCQllbnRyeS0+aXB2NF9obmFwdC52bGFuMSA9IHNrYi0+dmxhbl90Y2k7CisJCX0gZWxzZSBpZiAoSVNfSVBWNl9HUlAoZW50cnkpKSB7CisJCQllbnRyeS0+aXB2Nl81dF9yb3V0ZS5ldHlwZSA9IGh0b25zKEVUSF9QXzgwMjFRKTsKKwkJCWlmKGVudHJ5LT5pcHY2XzV0X3JvdXRlLnZsYW4xKQorCQkJCWVudHJ5LT5pcHY2XzV0X3JvdXRlLnZsYW4yID0gc2tiLT52bGFuX3RjaTsKKwkJCWVsc2UKKwkJCQllbnRyeS0+aXB2Nl81dF9yb3V0ZS52bGFuMSA9IHNrYi0+dmxhbl90Y2k7CisJCX0KKwl9IGVsc2UgeworCQllbnRyeS0+YmZpYjEudnBtID0gMDsKKwkJZW50cnktPmJmaWIxLnZsYW5fbGF5ZXIgPSAwOworCX0KKworCS8qIE1UNzYyMiB3aWZpIGh3X25hdCBub3Qgc3VwcG9ydCBRb1MgKi8KKwlpZiAoSVNfSVBWNF9HUlAoZW50cnkpKSB7CisJCWVudHJ5LT5pcHY0X2huYXB0LmlibGsyLmZxb3MgPSAwOworCQlpZiAoKGhuYXRfcHJpdi0+ZGF0YS0+dmVyc2lvbiA9PSBNVEtfSE5BVF9WMiAmJgorCQkgICAgIGdtYWNfbm8gPT0gTlJfV0hOQVRfV0RNQV9QT1JUKSB8fAorCQkgICAgKGhuYXRfcHJpdi0+ZGF0YS0+dmVyc2lvbiA9PSBNVEtfSE5BVF9WNCAmJgorCQkgICAgIChnbWFjX25vID09IE5SX1dETUEwX1BPUlQgfHwgZ21hY19ubyA9PSBOUl9XRE1BMV9QT1JUKSkpIHsKKwkJCWVudHJ5LT5pcHY0X2huYXB0LndpbmZvLmJzc2lkID0gc2tiX2huYXRfYnNzX2lkKHNrYik7CisJCQllbnRyeS0+aXB2NF9obmFwdC53aW5mby53Y2lkID0gc2tiX2huYXRfd2NfaWQoc2tiKTsKKyNpZiBkZWZpbmVkKENPTkZJR19NRURJQVRFS19ORVRTWVNfVjIpCisJCQllbnRyeS0+aXB2NF9obmFwdC5pYmxrMi5mcW9zID0gKElTX0hRT1NfTU9ERSkgPyAxIDogMDsKKwkJCWVudHJ5LT5pcHY0X2huYXB0LmlibGsyLnJ4aWQgPSBza2JfaG5hdF9yeF9pZChza2IpOworCQkJZW50cnktPmlwdjRfaG5hcHQuaWJsazIud2luZm9pID0gMTsKKyNlbHNlCisJCQllbnRyeS0+aXB2NF9obmFwdC53aW5mby5yeGlkID0gc2tiX2huYXRfcnhfaWQoc2tiKTsKKwkJCWVudHJ5LT5pcHY0X2huYXB0LmlibGsydy53aW5mb2kgPSAxOworCQkJZW50cnktPmlwdjRfaG5hcHQuaWJsazJ3LndkbWFpZCA9IHNrYl9obmF0X3dkbWFfaWQoc2tiKTsKKyNlbmRpZgorCQl9IGVsc2UgeworCQkJaWYgKElTX0dNQUMxX01PREUgJiYgIWhuYXRfZHNhX2lzX2VuYWJsZShobmF0X3ByaXYpKSB7CisJCQkJZW50cnktPmJmaWIxLnZwbSA9IDE7CisJCQkJZW50cnktPmJmaWIxLnZsYW5fbGF5ZXIgPSAxOworCisJCQkJaWYgKEZST01fR0VfTEFOKHNrYikpCisJCQkJCWVudHJ5LT5pcHY0X2huYXB0LnZsYW4xID0gMTsKKwkJCQllbHNlIGlmIChGUk9NX0dFX1dBTihza2IpIHx8IEZST01fR0VfVklSVFVBTChza2IpKQorCQkJCQllbnRyeS0+aXB2NF9obmFwdC52bGFuMSA9IDI7CisJCQl9CisKKwkJCWlmIChJU19IUU9TX01PREUgJiYKKwkJCSAgICAoRlJPTV9HRV9MQU4oc2tiKSB8fCBGUk9NX0dFX1dBTihza2IpIHx8IEZST01fR0VfVklSVFVBTChza2IpKSkgeworCQkJCWVudHJ5LT5iZmliMS52cG0gPSAwOworCQkJCWVudHJ5LT5iZmliMS52bGFuX2xheWVyID0gMTsKKwkJCQllbnRyeS0+aXB2NF9obmFwdC5ldHlwZSA9IGh0b25zKEhRT1NfTUFHSUNfVEFHKTsKKwkJCQllbnRyeS0+aXB2NF9obmFwdC52bGFuMSA9IHNrYl9obmF0X2VudHJ5KHNrYik7CisJCQkJZW50cnktPmlwdjRfaG5hcHQuaWJsazIuZnFvcyA9IDE7CisJCQl9CisJCX0KKwkJZW50cnktPmlwdjRfaG5hcHQuaWJsazIuZHAgPSBnbWFjX25vOworCX0gZWxzZSB7CisJCWVudHJ5LT5pcHY2XzV0X3JvdXRlLmlibGsyLmZxb3MgPSAwOworCQlpZiAoKGhuYXRfcHJpdi0+ZGF0YS0+dmVyc2lvbiA9PSBNVEtfSE5BVF9WMiAmJgorCQkgICAgIGdtYWNfbm8gPT0gTlJfV0hOQVRfV0RNQV9QT1JUKSB8fAorCQkgICAgKGhuYXRfcHJpdi0+ZGF0YS0+dmVyc2lvbiA9PSBNVEtfSE5BVF9WNCAmJgorCQkgICAgIChnbWFjX25vID09IE5SX1dETUEwX1BPUlQgfHwgZ21hY19ubyA9PSBOUl9XRE1BMV9QT1JUKSkpIHsKKwkJCWVudHJ5LT5pcHY2XzV0X3JvdXRlLndpbmZvLmJzc2lkID0gc2tiX2huYXRfYnNzX2lkKHNrYik7CisJCQllbnRyeS0+aXB2Nl81dF9yb3V0ZS53aW5mby53Y2lkID0gc2tiX2huYXRfd2NfaWQoc2tiKTsKKyNpZiBkZWZpbmVkKENPTkZJR19NRURJQVRFS19ORVRTWVNfVjIpCisJCQllbnRyeS0+aXB2Nl81dF9yb3V0ZS5pYmxrMi5mcW9zID0gKElTX0hRT1NfTU9ERSkgPyAxIDogMDsKKwkJCWVudHJ5LT5pcHY2XzV0X3JvdXRlLmlibGsyLnJ4aWQgPSBza2JfaG5hdF9yeF9pZChza2IpOworCQkJZW50cnktPmlwdjZfNXRfcm91dGUuaWJsazIud2luZm9pID0gMTsKKyNlbHNlCisJCQllbnRyeS0+aXB2Nl81dF9yb3V0ZS53aW5mby5yeGlkID0gc2tiX2huYXRfcnhfaWQoc2tiKTsKKwkJCWVudHJ5LT5pcHY2XzV0X3JvdXRlLmlibGsydy53aW5mb2kgPSAxOworCQkJZW50cnktPmlwdjZfNXRfcm91dGUuaWJsazJ3LndkbWFpZCA9IHNrYl9obmF0X3dkbWFfaWQoc2tiKTsKKyNlbmRpZgorCQl9IGVsc2UgeworCQkJaWYgKElTX0dNQUMxX01PREUgJiYgIWhuYXRfZHNhX2lzX2VuYWJsZShobmF0X3ByaXYpKSB7CisJCQkJZW50cnktPmJmaWIxLnZwbSA9IDE7CisJCQkJZW50cnktPmJmaWIxLnZsYW5fbGF5ZXIgPSAxOworCisJCQkJaWYgKEZST01fR0VfTEFOKHNrYikpCisJCQkJCWVudHJ5LT5pcHY2XzV0X3JvdXRlLnZsYW4xID0gMTsKKwkJCQllbHNlIGlmIChGUk9NX0dFX1dBTihza2IpIHx8IEZST01fR0VfVklSVFVBTChza2IpKQorCQkJCQllbnRyeS0+aXB2Nl81dF9yb3V0ZS52bGFuMSA9IDI7CisJCQl9CisKKwkJCWlmIChJU19IUU9TX01PREUgJiYKKwkJCSAgICAoRlJPTV9HRV9MQU4oc2tiKSB8fCBGUk9NX0dFX1dBTihza2IpIHx8IEZST01fR0VfVklSVFVBTChza2IpKSkgeworCQkJCWVudHJ5LT5iZmliMS52cG0gPSAwOworCQkJCWVudHJ5LT5iZmliMS52bGFuX2xheWVyID0gMTsKKwkJCQllbnRyeS0+aXB2Nl81dF9yb3V0ZS5ldHlwZSA9IGh0b25zKEhRT1NfTUFHSUNfVEFHKTsKKwkJCQllbnRyeS0+aXB2Nl81dF9yb3V0ZS52bGFuMSA9IHNrYl9obmF0X2VudHJ5KHNrYik7CisJCQkJZW50cnktPmlwdjZfNXRfcm91dGUuaWJsazIuZnFvcyA9IDE7CisJCQl9CisJCX0KKwkJZW50cnktPmlwdjZfNXRfcm91dGUuaWJsazIuZHAgPSBnbWFjX25vOworCX0KKworCWVudHJ5LT5iZmliMS5zdGF0ZSA9IEJJTkQ7CisKKwlyZXR1cm4gTkZfQUNDRVBUOworfQorCitpbnQgbXRrX3N3X25hdF9ob29rX3J4KHN0cnVjdCBza19idWZmICpza2IpCit7CisJaWYgKCFJU19TUEFDRV9BVkFJTEFCTEVfSEVBRChza2IpIHx8ICFGUk9NX1dFRChza2IpKSB7CisJCXNrYl9obmF0X21hZ2ljX3RhZyhza2IpID0gMDsKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKwl9CisKKwlza2JfaG5hdF9hbGcoc2tiKSA9IDA7CisJc2tiX2huYXRfZmlsbGVkKHNrYikgPSAwOworCXNrYl9obmF0X21hZ2ljX3RhZyhza2IpID0gSE5BVF9NQUdJQ19UQUc7CisKKwlpZiAoc2tiX2huYXRfaWZhY2Uoc2tiKSA9PSBGT0VfTUFHSUNfV0VEMCkKKwkJc2tiX2huYXRfc3BvcnQoc2tiKSA9IE5SX1dETUEwX1BPUlQ7CisJZWxzZSBpZiAoc2tiX2huYXRfaWZhY2Uoc2tiKSA9PSBGT0VfTUFHSUNfV0VEMSkKKwkJc2tiX2huYXRfc3BvcnQoc2tiKSA9IE5SX1dETUExX1BPUlQ7CisKKwlyZXR1cm4gTkZfQUNDRVBUOworfQorCit2b2lkIG10a19wcGVfZGV2X3JlZ2lzdGVyX2hvb2soc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpbnQgaSwgbnVtYmVyID0gMDsKKwlzdHJ1Y3QgZXh0ZGV2X2VudHJ5ICpleHRfZW50cnk7CisKKwlmb3IgKGkgPSAxOyBpIDwgTUFYX0lGX05VTTsgaSsrKSB7CisJCWlmIChobmF0X3ByaXYtPndpZmlfaG9va19pZltpXSA9PSBkZXYpIHsKKwkJCXByX2luZm8oIiVzIDogJXMgaGFzIGJlZW4gcmVnaXN0ZXJlZCBpbiB3aWZpX2hvb2tfaWYgdGFibGVbJWRdXG4iLAorCQkJCV9fZnVuY19fLCBkZXYtPm5hbWUsIGkpOworCQkJcmV0dXJuOworCQl9CisJCWlmICghaG5hdF9wcml2LT53aWZpX2hvb2tfaWZbaV0pIHsKKwkJCWlmIChmaW5kX2V4dGlmX2Zyb21fZGV2bmFtZShkZXYtPm5hbWUpKSB7CisJCQkJZXh0aWZfc2V0X2RldihkZXYpOworCQkJCWdvdG8gYWRkX3dpZmlfaG9va19pZjsKKwkJCX0KKworCQkJbnVtYmVyID0gZ2V0X2V4dF9kZXZpY2VfbnVtYmVyKCk7CisJCQlpZiAobnVtYmVyID49IE1BWF9FWFRfREVWUykgeworCQkJCXByX2luZm8oIiVzIDogZXh0ZGV2IGFycmF5IGlzIGZ1bGwuICVzIGlzIG5vdCByZWdpc3RlcmVkXG4iLAorCQkJCQlfX2Z1bmNfXywgZGV2LT5uYW1lKTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCWV4dF9lbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKCpleHRfZW50cnkpLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghZXh0X2VudHJ5KQorCQkJCXJldHVybjsKKworCQkJc3RybmNweShleHRfZW50cnktPm5hbWUsIGRldi0+bmFtZSwgSUZOQU1TSVogLSAxKTsKKwkJCWRldl9ob2xkKGRldik7CisJCQlleHRfZW50cnktPmRldiA9IGRldjsKKwkJCWV4dF9pZl9hZGQoZXh0X2VudHJ5KTsKKworYWRkX3dpZmlfaG9va19pZjoKKwkJCWRldl9ob2xkKGRldik7CisJCQlobmF0X3ByaXYtPndpZmlfaG9va19pZltpXSA9IGRldjsKKworCQkJYnJlYWs7CisJCX0KKwl9CisJcHJfaW5mbygiJXMgOiBpbmV0ZXJmYWNlICVzIHJlZ2lzdGVyICglZClcbiIsIF9fZnVuY19fLCBkZXYtPm5hbWUsIGkpOworfQorCit2b2lkIG10a19wcGVfZGV2X3VucmVnaXN0ZXJfaG9vayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWludCBpOworCisJZm9yIChpID0gMTsgaSA8IE1BWF9JRl9OVU07IGkrKykgeworCQlpZiAoaG5hdF9wcml2LT53aWZpX2hvb2tfaWZbaV0gPT0gZGV2KSB7CisJCQlobmF0X3ByaXYtPndpZmlfaG9va19pZltpXSA9IE5VTEw7CisJCQlkZXZfcHV0KGRldik7CisKKwkJCWJyZWFrOworCQl9CisJfQorCisJZXh0aWZfcHV0X2RldihkZXYpOworCXByX2luZm8oIiVzIDogaW5ldGVyZmFjZSAlcyBzZXQgbnVsbCAoJWQpXG4iLCBfX2Z1bmNfXywgZGV2LT5uYW1lLCBpKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBtdGtfaG5hdF9hY2NlbF90eXBlKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGRzdF9lbnRyeSAqZHN0OworCXN0cnVjdCBuZl9jb25uICpjdDsKKwllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKKwljb25zdCBzdHJ1Y3QgbmZfY29ubl9oZWxwICpoZWxwOworCisJLyogRG8gbm90IGFjY2VsZXJhdGUgMXN0IHJvdW5kIG9mIHhmcm0gZmxvdywgYW5kIDJuZCByb3VuZCBvZiB4ZnJtIGZsb3cKKwkgKiBpcyBmcm9tIGxvY2FsX291dCB3aGljaCBpcyBhbHNvIGZpbHRlcmVkIGluIHNhbml0eSBjaGVjay4KKwkgKi8KKwlkc3QgPSBza2JfZHN0KHNrYik7CisJaWYgKGRzdCAmJiBkc3RfeGZybShkc3QpKQorCQlyZXR1cm4gMDsKKworCWN0ID0gbmZfY3RfZ2V0KHNrYiwgJmN0aW5mbyk7CisJaWYgKCFjdCkKKwkJcmV0dXJuIDE7CisKKwkvKiByY3VfcmVhZF9sb2NrKCllZCBieSBuZl9ob29rX3Nsb3cgKi8KKwloZWxwID0gbmZjdF9oZWxwKGN0KTsKKwlpZiAoaGVscCAmJiByY3VfZGVyZWZlcmVuY2UoaGVscC0+aGVscGVyKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgbXRrX2huYXRfZHNjcF91cGRhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZvZV9lbnRyeSAqZW50cnkpCit7CisJc3RydWN0IGlwaGRyICppcGg7CisJc3RydWN0IGV0aGhkciAqZXRoOworCXN0cnVjdCBpcHY2aGRyICppcDZoOworCWJvb2wgZmxhZyA9IGZhbHNlOworCisJZXRoID0gZXRoX2hkcihza2IpOworCXN3aXRjaCAobnRvaHMoZXRoLT5oX3Byb3RvKSkgeworCWNhc2UgRVRIX1BfSVA6CisJCWlwaCA9IGlwX2hkcihza2IpOworCQlpZiAoSVNfSVBWNF9HUlAoZW50cnkpICYmIGVudHJ5LT5pcHY0X2huYXB0LmlibGsyLmRzY3AgIT0gaXBoLT50b3MpCisJCQlmbGFnID0gdHJ1ZTsKKwkJYnJlYWs7CisJY2FzZSBFVEhfUF9JUFY2OgorCQlpcDZoID0gaXB2Nl9oZHIoc2tiKTsKKwkJaWYgKChJU19JUFY2XzNUX1JPVVRFKGVudHJ5KSB8fCBJU19JUFY2XzVUX1JPVVRFKGVudHJ5KSkgJiYKKwkJCShlbnRyeS0+aXB2Nl81dF9yb3V0ZS5pYmxrMi5kc2NwICE9CisJCQkoaXA2aC0+cHJpb3JpdHkgPDwgNCB8IChpcDZoLT5mbG93X2xibFswXSA+PiA0KSkpKQorCQkJZmxhZyA9IHRydWU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisKKwlpZiAoZmxhZykgeworCQlpZiAoZGVidWdfbGV2ZWwgPj0gMikKKwkJCXByX2luZm8oIkRlbGV0ZSBlbnRyeSBpZHg9JWQuXG4iLCBza2JfaG5hdF9lbnRyeShza2IpKTsKKwkJbWVtc2V0KGVudHJ5LCAwLCBzaXplb2Yoc3RydWN0IGZvZV9lbnRyeSkpOworCQlobmF0X2NhY2hlX2VibCgxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG10a19obmF0X25mX3VwZGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBuZl9jb25uICpjdDsKKwlzdHJ1Y3QgbmZfY29ubl9hY2N0ICphY2N0OworCXN0cnVjdCBuZl9jb25uX2NvdW50ZXIgKmNvdW50ZXI7CisJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87CisJc3RydWN0IGhuYXRfYWNjb3VudGluZyBkaWZmOworCisJY3QgPSBuZl9jdF9nZXQoc2tiLCAmY3RpbmZvKTsKKwlpZiAoY3QpIHsKKwkJaWYgKCFobmF0X2dldF9jb3VudChobmF0X3ByaXYsIHNrYl9obmF0X3BwZShza2IpLCBza2JfaG5hdF9lbnRyeShza2IpLCAmZGlmZikpCisJCQlyZXR1cm47CisKKwkJYWNjdCA9IG5mX2Nvbm5fYWNjdF9maW5kKGN0KTsKKwkJaWYgKGFjY3QpIHsKKwkJCWNvdW50ZXIgPSBhY2N0LT5jb3VudGVyOworCQkJYXRvbWljNjRfYWRkKGRpZmYucGFja2V0cywgJmNvdW50ZXJbQ1RJTkZPMkRJUihjdGluZm8pXS5wYWNrZXRzKTsKKwkJCWF0b21pYzY0X2FkZChkaWZmLmJ5dGVzLCAmY291bnRlcltDVElORk8yRElSKGN0aW5mbyldLmJ5dGVzKTsKKwkJfQorCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGludCBtdGtfaG5hdF9uZl9wb3N0X3JvdXRpbmcoCisJc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwl1bnNpZ25lZCBpbnQgKCpmbikoc3RydWN0IHNrX2J1ZmYgKiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKiwKKwkJCSAgIHN0cnVjdCBmbG93X29mZmxvYWRfaHdfcGF0aCAqKSwKKwljb25zdCBjaGFyICpmdW5jKQoreworCXN0cnVjdCBmb2VfZW50cnkgKmVudHJ5OworCXN0cnVjdCBmbG93X29mZmxvYWRfaHdfcGF0aCBod19wYXRoID0geyAuZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlKilvdXQsCisJCQkJCQkudmlydF9kZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UqKW91dCB9OworCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICphcnBfZGV2ID0gb3V0OworCisJaWYgKHNrYl9obmF0X2FsZyhza2IpIHx8IHVubGlrZWx5KCFpc19tYWdpY190YWdfdmFsaWQoc2tiKSB8fAorCQkJCQkgICFJU19TUEFDRV9BVkFJTEFCTEVfSEVBRChza2IpKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAodW5saWtlbHkoIXNrYl9obmF0X2lzX2hhc2hlZChza2IpKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAob3V0LT5uZXRkZXZfb3BzLT5uZG9fZmxvd19vZmZsb2FkX2NoZWNrKSB7CisJCW91dC0+bmV0ZGV2X29wcy0+bmRvX2Zsb3dfb2ZmbG9hZF9jaGVjaygmaHdfcGF0aCk7CisJCW91dCA9IChJU19HTUFDMV9NT0RFKSA/IGh3X3BhdGgudmlydF9kZXYgOiBod19wYXRoLmRldjsKKwl9CisKKwlpZiAoIUlTX0xBTihvdXQpICYmICFJU19XQU4ob3V0KSAmJiAhSVNfRVhUKG91dCkpCisJCXJldHVybiAwOworCisJdHJhY2VfcHJpbnRrKCJbJXNdIGNhc2UgaGl0LCAleC0tPiVzLCByZWFzb249JXhcbiIsIF9fZnVuY19fLAorCQkgICAgIHNrYl9obmF0X2lmYWNlKHNrYiksIG91dC0+bmFtZSwgc2tiX2huYXRfcmVhc29uKHNrYikpOworCisJZW50cnkgPSAmaG5hdF9wcml2LT5mb2VfdGFibGVfY3B1W3NrYl9obmF0X3BwZShza2IpXVtza2JfaG5hdF9lbnRyeShza2IpXTsKKworCXN3aXRjaCAoc2tiX2huYXRfcmVhc29uKHNrYikpIHsKKwljYXNlIEhJVF9VTkJJTkRfUkFURV9SRUFDSDoKKwkJaWYgKGVudHJ5X2huYXRfaXNfYm91bmQoZW50cnkpKQorCQkJYnJlYWs7CisKKwkJaWYgKGZuICYmICFtdGtfaG5hdF9hY2NlbF90eXBlKHNrYikpCisJCQlicmVhazsKKworCQlpZiAoZm4gJiYgZm4oc2tiLCBhcnBfZGV2LCAmaHdfcGF0aCkpCisJCQlicmVhazsKKworCQlza2JfdG9faG5hdF9pbmZvKHNrYiwgb3V0LCBlbnRyeSwgJmh3X3BhdGgpOworCQlicmVhazsKKwljYXNlIEhJVF9CSU5EX0tFRVBBTElWRV9EVVBfT0xEX0hEUjoKKwkJLyogdXBkYXRlIGhuYXQgY291bnQgdG8gbmZfY29ubnRyYWNrIGJ5IGtlZXBhbGl2ZSAqLworCQlpZiAoaG5hdF9wcml2LT5kYXRhLT5wZXJfZmxvd19hY2NvdW50aW5nICYmIGhuYXRfcHJpdi0+bmZfc3RhdF9lbikKKwkJCW10a19obmF0X25mX3VwZGF0ZShza2IpOworCisJCWlmIChmbiAmJiAhbXRrX2huYXRfYWNjZWxfdHlwZShza2IpKQorCQkJYnJlYWs7CisKKwkJLyogdXBkYXRlIGRzY3AgZm9yIHFvcyAqLworCQltdGtfaG5hdF9kc2NwX3VwZGF0ZShza2IsIGVudHJ5KTsKKworCQkvKiB1cGRhdGUgbWNhc3QgdGltZXN0YW1wKi8KKwkJaWYgKGhuYXRfcHJpdi0+ZGF0YS0+dmVyc2lvbiA9PSBNVEtfSE5BVF9WMyAmJgorCQkgICAgaG5hdF9wcml2LT5kYXRhLT5tY2FzdCAmJiBlbnRyeS0+YmZpYjEuc3RhID09IDEpCisJCQllbnRyeS0+aXB2NF9obmFwdC5tX3RpbWVzdGFtcCA9IGZvZV90aW1lc3RhbXAoaG5hdF9wcml2KTsKKworCQlpZiAoZW50cnlfaG5hdF9pc19ib3VuZChlbnRyeSkpIHsKKwkJCW1lbXNldChza2JfaG5hdF9pbmZvKHNrYiksIDAsIEZPRV9JTkZPX0xFTik7CisKKwkJCXJldHVybiAtMTsKKwkJfQorCQlicmVhazsKKwljYXNlIEhJVF9CSU5EX01VTFRJQ0FTVF9UT19DUFU6CisJY2FzZSBISVRfQklORF9NVUxUSUNBU1RfVE9fR01BQ19DUFU6CisJCS8qZG8gbm90IGZvcndhcmQgdG8gZ2RtYSBhZ2FpbixpZiBwcGUgYWxyZWFkeSBkb25lIGl0Ki8KKwkJaWYgKElTX0xBTihvdXQpIHx8IElTX1dBTihvdXQpKQorCQkJcmV0dXJuIC0xOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAorbXRrX2huYXRfaXB2Nl9uZl9sb2NhbF9vdXQodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZm9lX2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3QgaXB2NmhkciAqaXA2aDsKKwlzdHJ1Y3QgaXBoZHIgX2lwaGRyOworCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoOworCXN0cnVjdCB0Y3B1ZHBoZHIgX3BvcnRzOworCWNvbnN0IHN0cnVjdCB0Y3B1ZHBoZHIgKnBwdHI7CisJaW50IHVkcCA9IDA7CisKKwlpZiAodW5saWtlbHkoIXNrYl9obmF0X2lzX2hhc2hlZChza2IpKSkKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKworCWVudHJ5ID0gJmhuYXRfcHJpdi0+Zm9lX3RhYmxlX2NwdVtza2JfaG5hdF9wcGUoc2tiKV1bc2tiX2huYXRfZW50cnkoc2tiKV07CisJaWYgKHNrYl9obmF0X3JlYXNvbihza2IpID09IEhJVF9VTkJJTkRfUkFURV9SRUFDSCkgeworCQlpcDZoID0gaXB2Nl9oZHIoc2tiKTsKKwkJaWYgKGlwNmgtPm5leHRoZHIgPT0gTkVYVEhEUl9JUElQKSB7CisJCQkvKiBNYXAtRSBMQU4tPldBTjogbmVlZCB0byByZWNvcmQgb3JpZyBpbmZvIGJlZm9yZSBmbi4gKi8KKwkJCWlmIChtYXBlX3RvZ2dsZSkgeworCQkJCWlwaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIElQVjZfSERSX0xFTiwKKwkJCQkJCQkgc2l6ZW9mKF9pcGhkciksICZfaXBoZHIpOworCQkJCWlmICh1bmxpa2VseSghaXBoKSkKKwkJCQkJcmV0dXJuIE5GX0FDQ0VQVDsKKworCQkJCXN3aXRjaCAoaXBoLT5wcm90b2NvbCkgeworCQkJCWNhc2UgSVBQUk9UT19VRFA6CisJCQkJCXVkcCA9IDE7CisJCQkJY2FzZSBJUFBST1RPX1RDUDoKKwkJCQlicmVhazsKKworCQkJCWRlZmF1bHQ6CisJCQkJCXJldHVybiBORl9BQ0NFUFQ7CisJCQkJfQorCisJCQkJcHB0ciA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIElQVjZfSERSX0xFTiArIGlwaC0+aWhsICogNCwKKwkJCQkJCQkgIHNpemVvZihfcG9ydHMpLCAmX3BvcnRzKTsKKwkJCQlpZiAodW5saWtlbHkoIXBwdHIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBORl9BQ0NFUFQ7CisKKwkJCQllbnRyeS0+YmZpYjEudWRwID0gdWRwOworCisjaWYgZGVmaW5lZChDT05GSUdfTUVESUFURUtfTkVUU1lTX1YyKQorCQkJCWVudHJ5LT5iZmliMS5wa3RfdHlwZSA9IElQVjRfTUFQX0U7CisJCQkJZW50cnktPmlwdjRfZHNsaXRlLmlibGsyLmRzY3AgPSBpcGgtPnRvczsKKwkJCQllbnRyeS0+aXB2NF9kc2xpdGUubmV3X3NpcCA9IG50b2hsKGlwaC0+c2FkZHIpOworCQkJCWVudHJ5LT5pcHY0X2RzbGl0ZS5uZXdfZGlwID0gbnRvaGwoaXBoLT5kYWRkcik7CisJCQkJZW50cnktPmlwdjRfZHNsaXRlLm5ld19zcG9ydCA9IG50b2hzKHBwdHItPnNyYyk7CisJCQkJZW50cnktPmlwdjRfZHNsaXRlLm5ld19kcG9ydCA9IG50b2hzKHBwdHItPmRzdCk7CisjZWxzZQorCQkJCWVudHJ5LT5pcHY0X2huYXB0LmlibGsyLmRzY3AgPSBpcGgtPnRvczsKKwkJCQllbnRyeS0+aXB2NF9obmFwdC5uZXdfc2lwID0gbnRvaGwoaXBoLT5zYWRkcik7CisJCQkJZW50cnktPmlwdjRfaG5hcHQubmV3X2RpcCA9IG50b2hsKGlwaC0+ZGFkZHIpOworCQkJCWVudHJ5LT5pcHY0X2huYXB0Lm5ld19zcG9ydCA9IG50b2hzKHBwdHItPnNyYyk7CisJCQkJZW50cnktPmlwdjRfaG5hcHQubmV3X2Rwb3J0ID0gbnRvaHMocHB0ci0+ZHN0KTsKKyNlbmRpZgorCQkJfSBlbHNlIHsKKwkJCQllbnRyeS0+YmZpYjEucGt0X3R5cGUgPSBJUFY0X0RTTElURTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gTkZfQUNDRVBUOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50CittdGtfaG5hdF9pcHY2X25mX3Bvc3Rfcm91dGluZyh2b2lkICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKQoreworCXBvc3Rfcm91dGluZ19wcmludChza2IsIHN0YXRlLT5pbiwgc3RhdGUtPm91dCwgX19mdW5jX18pOworCisJaWYgKCFtdGtfaG5hdF9uZl9wb3N0X3JvdXRpbmcoc2tiLCBzdGF0ZS0+b3V0LCBobmF0X2lwdjZfZ2V0X25leHRob3AsCisJCQkJICAgICAgX19mdW5jX18pKQorCQlyZXR1cm4gTkZfQUNDRVBUOworCisJdHJhY2VfcHJpbnRrKAorCQkiJXM6ZHJvcCAoaWlmPTB4JXgsIG91dF9kZXY9JXMsIENCMj0weCV4LCBwcGVfaGFzaD0weCV4LCBzcG9ydD0weCV4LCByZWFzb249MHgleCwgYWxnPTB4JXgpXG4iLAorCQlfX2Z1bmNfXywgc2tiX2huYXRfaWZhY2Uoc2tiKSwgc3RhdGUtPm91dC0+bmFtZSwgSE5BVF9TS0JfQ0IyKHNrYiktPm1hZ2ljLAorCQlza2JfaG5hdF9lbnRyeShza2IpLCBza2JfaG5hdF9zcG9ydChza2IpLCBza2JfaG5hdF9yZWFzb24oc2tiKSwKKwkJc2tiX2huYXRfYWxnKHNrYikpOworCisJcmV0dXJuIE5GX0RST1A7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK210a19obmF0X2lwdjRfbmZfcG9zdF9yb3V0aW5nKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpCit7CisJcG9zdF9yb3V0aW5nX3ByaW50KHNrYiwgc3RhdGUtPmluLCBzdGF0ZS0+b3V0LCBfX2Z1bmNfXyk7CisKKwlpZiAoIW10a19obmF0X25mX3Bvc3Rfcm91dGluZyhza2IsIHN0YXRlLT5vdXQsIGhuYXRfaXB2NF9nZXRfbmV4dGhvcCwKKwkJCQkgICAgICBfX2Z1bmNfXykpCisJCXJldHVybiBORl9BQ0NFUFQ7CisKKwl0cmFjZV9wcmludGsoCisJCSIlczpkcm9wIChpaWY9MHgleCwgb3V0X2Rldj0lcywgQ0IyPTB4JXgsIHBwZV9oYXNoPTB4JXgsIHNwb3J0PTB4JXgsIHJlYXNvbj0weCV4LCBhbGc9MHgleClcbiIsCisJCV9fZnVuY19fLCBza2JfaG5hdF9pZmFjZShza2IpLCBzdGF0ZS0+b3V0LT5uYW1lLCBITkFUX1NLQl9DQjIoc2tiKS0+bWFnaWMsCisJCXNrYl9obmF0X2VudHJ5KHNrYiksIHNrYl9obmF0X3Nwb3J0KHNrYiksIHNrYl9obmF0X3JlYXNvbihza2IpLAorCQlza2JfaG5hdF9hbGcoc2tiKSk7CisKKwlyZXR1cm4gTkZfRFJPUDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAorbXRrX3BvbmdfaHFvc19oYW5kbGVyKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZldGggPSAoc3RydWN0IHZsYW5fZXRoaGRyICopc2tiX21hY19oZWFkZXIoc2tiKTsKKworCWlmIChJU19IUU9TX01PREUgJiYgZXRoX2hkcihza2IpLT5oX3Byb3RvID09IEhRT1NfTUFHSUNfVEFHKSB7CisJCXNrYl9obmF0X2VudHJ5KHNrYikgPSBudG9ocyh2ZXRoLT5oX3ZsYW5fVENJKSAmIDB4M2ZmZjsKKwkJc2tiX2huYXRfcmVhc29uKHNrYikgPSBISVRfQklORF9GT1JDRV9UT19DUFU7CisJfQorCisJaWYgKHNrYl9obmF0X2lmYWNlKHNrYikgPT0gRk9FX01BR0lDX0VYVCkKKwkJY2xyX2Zyb21fZXh0Z2Uoc2tiKTsKKworCS8qIHBhY2tldHMgZnJvbSBleHRlcm5hbCBkZXZpY2VzIC0+IHh4eCAsc3RlcCAyLCBsZWFybmluZyBzdGFnZSAqLworCWlmIChkb19leHQyZ2VfZmFzdF9sZWFybihzdGF0ZS0+aW4sIHNrYikgJiYgKCFxb3NfdG9nZ2xlIHx8CisJICAgIChxb3NfdG9nZ2xlICYmIGV0aF9oZHIoc2tiKS0+aF9wcm90byAhPSBIUU9TX01BR0lDX1RBRykpKSB7CisJCWlmICghZG9faG5hdF9leHRfdG9fZ2UyKHNrYiwgX19mdW5jX18pKQorCQkJcmV0dXJuIE5GX1NUT0xFTjsKKwkJZ290byBkcm9wOworCX0KKworCS8qIHBhY2tldHMgZm9ybSBnZSAtPiBleHRlcm5hbCBkZXZpY2UgKi8KKwlpZiAoZG9fZ2UyZXh0X2Zhc3Qoc3RhdGUtPmluLCBza2IpKSB7CisJCWlmICghZG9faG5hdF9nZV90b19leHQoc2tiLCBfX2Z1bmNfXykpCisJCQlyZXR1cm4gTkZfU1RPTEVOOworCQlnb3RvIGRyb3A7CisJfQorCisJcmV0dXJuIE5GX0FDQ0VQVDsKK2Ryb3A6CisJcHJpbnRrX3JhdGVsaW1pdGVkKEtFUk5fV0FSTklORworCQkJCSIlczpkcm9wIChpbl9kZXY9JXMsIGlpZj0weCV4LCBDQjI9MHgleCwgcHBlX2hhc2g9MHgleCwgc3BvcnQ9MHgleCwgcmVhc29uPTB4JXgsIGFsZz0weCV4KVxuIiwKKwkJCQlfX2Z1bmNfXywgc3RhdGUtPmluLT5uYW1lLCBza2JfaG5hdF9pZmFjZShza2IpLAorCQkJCUhOQVRfU0tCX0NCMihza2IpLT5tYWdpYywgc2tiX2huYXRfZW50cnkoc2tiKSwKKwkJCQlza2JfaG5hdF9zcG9ydChza2IpLCBza2JfaG5hdF9yZWFzb24oc2tiKSwKKwkJCQlza2JfaG5hdF9hbGcoc2tiKSk7CisKKwlyZXR1cm4gTkZfRFJPUDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAorbXRrX2huYXRfYnJfbmZfbG9jYWxfb3V0KHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKQoreworCXBvc3Rfcm91dGluZ19wcmludChza2IsIHN0YXRlLT5pbiwgc3RhdGUtPm91dCwgX19mdW5jX18pOworCisJaWYgKCFtdGtfaG5hdF9uZl9wb3N0X3JvdXRpbmcoc2tiLCBzdGF0ZS0+b3V0LCAwLCBfX2Z1bmNfXykpCisJCXJldHVybiBORl9BQ0NFUFQ7CisKKwl0cmFjZV9wcmludGsoCisJCSIlczpkcm9wIChpaWY9MHgleCwgb3V0X2Rldj0lcywgQ0IyPTB4JXgsIHBwZV9oYXNoPTB4JXgsIHNwb3J0PTB4JXgsIHJlYXNvbj0weCV4LCBhbGc9MHgleClcbiIsCisJCV9fZnVuY19fLCBza2JfaG5hdF9pZmFjZShza2IpLCBzdGF0ZS0+b3V0LT5uYW1lLCBITkFUX1NLQl9DQjIoc2tiKS0+bWFnaWMsCisJCXNrYl9obmF0X2VudHJ5KHNrYiksIHNrYl9obmF0X3Nwb3J0KHNrYiksIHNrYl9obmF0X3JlYXNvbihza2IpLAorCQlza2JfaG5hdF9hbGcoc2tiKSk7CisKKwlyZXR1cm4gTkZfRFJPUDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAorbXRrX2huYXRfaXB2NF9uZl9sb2NhbF9vdXQodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjsKKwlzdHJ1Y3QgZm9lX2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3QgaXBoZHIgKmlwaDsKKworCWlmICghc2tiX2huYXRfaXNfaGFzaGVkKHNrYikpCisJCXJldHVybiBORl9BQ0NFUFQ7CisKKwllbnRyeSA9ICZobmF0X3ByaXYtPmZvZV90YWJsZV9jcHVbc2tiX2huYXRfcHBlKHNrYildW3NrYl9obmF0X2VudHJ5KHNrYildOworCisJaWYgKHVubGlrZWx5KHNrYl9oZWFkcm9vbShza2IpIDwgRk9FX0lORk9fTEVOKSkgeworCQluZXdfc2tiID0gc2tiX3JlYWxsb2NfaGVhZHJvb20oc2tiLCBGT0VfSU5GT19MRU4pOworCQlpZiAoIW5ld19za2IpIHsKKwkJCWRldl9pbmZvKGhuYXRfcHJpdi0+ZGV2LCAiJXM6ZHJvcFxuIiwgX19mdW5jX18pOworCQkJcmV0dXJuIE5GX0RST1A7CisJCX0KKwkJZGV2X2tmcmVlX3NrYihza2IpOworCQlza2IgPSBuZXdfc2tiOworCX0KKworCS8qIE1ha2UgdGhlIGZsb3cgZnJvbSBsb2NhbCBub3QgYmUgYm91bmQuICovCisJaXBoID0gaXBfaGRyKHNrYik7CisJaWYgKGlwaC0+cHJvdG9jb2wgPT0gSVBQUk9UT19JUFY2KSB7CisJCWVudHJ5LT51ZGliMS5wa3RfdHlwZSA9IElQVjZfNlJEOworCQlobmF0X3NldF9oZWFkX2ZyYWdzKHN0YXRlLCBza2IsIDAsIGhuYXRfc2V0X2FsZyk7CisJfSBlbHNlIHsKKwkJaG5hdF9zZXRfaGVhZF9mcmFncyhzdGF0ZSwgc2tiLCAxLCBobmF0X3NldF9hbGcpOworCX0KKworCXJldHVybiBORl9BQ0NFUFQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXRrX2huYXRfYnJfbmZfZm9yd2FyZCh2b2lkICpwcml2LAorCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUpCit7CisJaWYgKChobmF0X3ByaXYtPmRhdGEtPnZlcnNpb24gPT0gTVRLX0hOQVRfVjIpICYmCisJICAgIHVubGlrZWx5KElTX0VYVChzdGF0ZS0+aW4pICYmIElTX0VYVChzdGF0ZS0+b3V0KSkpCisJCWhuYXRfc2V0X2hlYWRfZnJhZ3Moc3RhdGUsIHNrYiwgMSwgaG5hdF9zZXRfYWxnKTsKKworCXJldHVybiBORl9BQ0NFUFQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgbXRrX2huYXRfbmZfb3BzW10gX19yZWFkX21vc3RseSA9IHsKKwl7CisJCS5ob29rID0gbXRrX2huYXRfaXB2NF9uZl9wcmVfcm91dGluZywKKwkJLnBmID0gTkZQUk9UT19JUFY0LAorCQkuaG9va251bSA9IE5GX0lORVRfUFJFX1JPVVRJTkcsCisJCS5wcmlvcml0eSA9IE5GX0lQX1BSSV9GSVJTVCArIDEsCisJfSwKKwl7CisJCS5ob29rID0gbXRrX2huYXRfaXB2Nl9uZl9wcmVfcm91dGluZywKKwkJLnBmID0gTkZQUk9UT19JUFY2LAorCQkuaG9va251bSA9IE5GX0lORVRfUFJFX1JPVVRJTkcsCisJCS5wcmlvcml0eSA9IE5GX0lQX1BSSV9GSVJTVCArIDEsCisJfSwKKwl7CisJCS5ob29rID0gbXRrX2huYXRfaXB2Nl9uZl9wb3N0X3JvdXRpbmcsCisJCS5wZiA9IE5GUFJPVE9fSVBWNiwKKwkJLmhvb2tudW0gPSBORl9JTkVUX1BPU1RfUk9VVElORywKKwkJLnByaW9yaXR5ID0gTkZfSVBfUFJJX0xBU1QsCisJfSwKKwl7CisJCS5ob29rID0gbXRrX2huYXRfaXB2Nl9uZl9sb2NhbF9vdXQsCisJCS5wZiA9IE5GUFJPVE9fSVBWNiwKKwkJLmhvb2tudW0gPSBORl9JTkVUX0xPQ0FMX09VVCwKKwkJLnByaW9yaXR5ID0gTkZfSVBfUFJJX0xBU1QsCisJfSwKKwl7CisJCS5ob29rID0gbXRrX2huYXRfaXB2NF9uZl9wb3N0X3JvdXRpbmcsCisJCS5wZiA9IE5GUFJPVE9fSVBWNCwKKwkJLmhvb2tudW0gPSBORl9JTkVUX1BPU1RfUk9VVElORywKKwkJLnByaW9yaXR5ID0gTkZfSVBfUFJJX0xBU1QsCisJfSwKKwl7CisJCS5ob29rID0gbXRrX2huYXRfaXB2NF9uZl9sb2NhbF9vdXQsCisJCS5wZiA9IE5GUFJPVE9fSVBWNCwKKwkJLmhvb2tudW0gPSBORl9JTkVUX0xPQ0FMX09VVCwKKwkJLnByaW9yaXR5ID0gTkZfSVBfUFJJX0xBU1QsCisJfSwKKwl7CisJCS5ob29rID0gbXRrX2huYXRfYnJfbmZfbG9jYWxfaW4sCisJCS5wZiA9IE5GUFJPVE9fQlJJREdFLAorCQkuaG9va251bSA9IE5GX0JSX0xPQ0FMX0lOLAorCQkucHJpb3JpdHkgPSBORl9CUl9QUklfRklSU1QsCisJfSwKKwl7CisJCS5ob29rID0gbXRrX2huYXRfYnJfbmZfbG9jYWxfb3V0LAorCQkucGYgPSBORlBST1RPX0JSSURHRSwKKwkJLmhvb2tudW0gPSBORl9CUl9MT0NBTF9PVVQsCisJCS5wcmlvcml0eSA9IE5GX0JSX1BSSV9MQVNUIC0gMSwKKwl9LAorCXsKKwkJLmhvb2sgPSBtdGtfcG9uZ19ocW9zX2hhbmRsZXIsCisJCS5wZiA9IE5GUFJPVE9fQlJJREdFLAorCQkuaG9va251bSA9IE5GX0JSX1BSRV9ST1VUSU5HLAorCQkucHJpb3JpdHkgPSBORl9CUl9QUklfRklSU1QgKyAxLAorCX0sCit9OworCitpbnQgaG5hdF9yZWdpc3Rlcl9uZl9ob29rcyh2b2lkKQoreworCXJldHVybiBuZl9yZWdpc3Rlcl9uZXRfaG9va3MoJmluaXRfbmV0LCBtdGtfaG5hdF9uZl9vcHMsIEFSUkFZX1NJWkUobXRrX2huYXRfbmZfb3BzKSk7Cit9CisKK3ZvaWQgaG5hdF91bnJlZ2lzdGVyX25mX2hvb2tzKHZvaWQpCit7CisJbmZfdW5yZWdpc3Rlcl9uZXRfaG9va3MoJmluaXRfbmV0LCBtdGtfaG5hdF9uZl9vcHMsIEFSUkFZX1NJWkUobXRrX2huYXRfbmZfb3BzKSk7Cit9CisKK2ludCB3aG5hdF9hZGp1c3RfbmZfaG9va3Modm9pZCkKK3sKKwlzdHJ1Y3QgbmZfaG9va19vcHMgKmhvb2sgPSBtdGtfaG5hdF9uZl9vcHM7CisJdW5zaWduZWQgaW50IG4gPSBBUlJBWV9TSVpFKG10a19obmF0X25mX29wcyk7CisKKwl3aGlsZSAobi0tID4gMCkgeworCQlpZiAoaG9va1tuXS5ob29rID09IG10a19obmF0X2JyX25mX2xvY2FsX2luKSB7CisJCQlob29rW25dLmhvb2tudW0gPSBORl9CUl9QUkVfUk9VVElORzsKKwkJCWhvb2tbbl0ucHJpb3JpdHkgPSBORl9CUl9QUklfRklSU1QgKyAxOworCQl9IGVsc2UgaWYgKGhvb2tbbl0uaG9vayA9PSBtdGtfaG5hdF9icl9uZl9sb2NhbF9vdXQpIHsKKwkJCWhvb2tbbl0uaG9va251bSA9IE5GX0JSX1BPU1RfUk9VVElORzsKKwkJfSBlbHNlIGlmIChob29rW25dLmhvb2sgPT0gbXRrX3BvbmdfaHFvc19oYW5kbGVyKSB7CisJCQlob29rW25dLmhvb2sgPSBtdGtfaG5hdF9icl9uZl9mb3J3YXJkOworCQkJaG9va1tuXS5ob29rbnVtID0gTkZfQlJfRk9SV0FSRDsKKwkJCWhvb2tbbl0ucHJpb3JpdHkgPSBORl9CUl9QUklfTEFTVCAtIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IG10a19ocW9zX3B0eXBlX2NiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICp1bnVzZWQpCit7CisJc3RydWN0IHZsYW5fZXRoaGRyICp2ZXRoID0gKHN0cnVjdCB2bGFuX2V0aGhkciAqKXNrYl9tYWNfaGVhZGVyKHNrYik7CisKKwlza2JfaG5hdF9lbnRyeShza2IpID0gbnRvaHModmV0aC0+aF92bGFuX1RDSSkgJiAweDNmZmY7CisJc2tiX2huYXRfcmVhc29uKHNrYikgPSBISVRfQklORF9GT1JDRV9UT19DUFU7CisKKwlkb19obmF0X2dlX3RvX2V4dChza2IsIF9fZnVuY19fKTsKKworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19obmF0L2huYXRfc3RhZy5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfaG5hdC9obmF0X3N0YWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2RlM2U5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfaG5hdC9obmF0X3N0YWcuYwpAQCAtMCwwICsxLDYyIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorICoKKyAqIENvcHlyaWdodCAoYykgMjAyMCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IExhbmRlbiBDaGFvIDxsYW5kZW4uY2hhb0BtZWRpYXRlay5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPgorI2luY2x1ZGUgImhuYXQuaCIKKwordTMyIGhuYXRfZHNhX2ZpbGxfc3RhZyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkgICAgICAgc3RydWN0IGZvZV9lbnRyeSAqZW50cnksCisJCSAgICAgICBzdHJ1Y3QgZmxvd19vZmZsb2FkX2h3X3BhdGggKmh3X3BhdGgsCisJCSAgICAgICB1MTYgZXRoX3Byb3RvLAorCQkgICAgICAgaW50IG1hcGUpCit7CisJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CisJY29uc3QgdW5zaWduZWQgaW50ICpwb3J0X3JlZzsKKwlpbnQgcG9ydF9pbmRleDsKKwl1MTYgc3BfdGFnOworCisJaWYgKGh3X3BhdGgtPmZsYWdzICYgRkxPV19PRkZMT0FEX1BBVEhfVkxBTikKKwkJbmRldiA9IGh3X3BhdGgtPmRldjsKKwllbHNlCisJCW5kZXYgPSBuZXRkZXY7CisKKwlwb3J0X3JlZyA9IG9mX2dldF9wcm9wZXJ0eShuZGV2LT5kZXYub2Zfbm9kZSwgInJlZyIsIE5VTEwpOworCWlmICh1bmxpa2VseSghcG9ydF9yZWcpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBvcnRfaW5kZXggPSBiZTMyX3RvX2NwdXAocG9ydF9yZWcpOworCXNwX3RhZyA9IEJJVChwb3J0X2luZGV4KTsKKworCWlmICghZW50cnktPmJmaWIxLnZsYW5fbGF5ZXIpCisJCWVudHJ5LT5iZmliMS52bGFuX2xheWVyID0gMTsKKwllbHNlCisJCS8qIFZMQU4gZXhpc3RlbmNlIGluZGljYXRvciAqLworCQlzcF90YWcgfD0gQklUKDgpOworCWVudHJ5LT5iZmliMS52cG0gPSAwOworCisJc3dpdGNoIChldGhfcHJvdG8pIHsKKwljYXNlIEVUSF9QX0lQOgorCQlpZiAoZW50cnktPmlwdjRfaG5hcHQuYmZpYjEucGt0X3R5cGUgPT0gSVBWNF9EU0xJVEUpCisJCQllbnRyeS0+aXB2NF9kc2xpdGUuZXR5cGUgPSBzcF90YWc7CisJCWVsc2UKKwkJCWVudHJ5LT5pcHY0X2huYXB0LmV0eXBlID0gc3BfdGFnOworCQlicmVhazsKKwljYXNlIEVUSF9QX0lQVjY6CisJCS8qIEluIHRoZSBjYXNlIE1BUEUgTEFOIC0tPiBXQU4sIGJpbmRpbmcgZW50cnkgaXMgdG8gQ1BVLgorCQkgKiBEbyBub3QgYWRkIHNwZWNpYWwgdGFnLgorCQkgKi8KKwkJaWYgKCFtYXBlKQorCQkJLyogZXR5cGUgb2Zmc2V0IG9mIGlwdjYgZW50cmllcyBhcmUgdGhlIHNhbWUuICovCisJCQllbnRyeS0+aXB2Nl81dF9yb3V0ZS5ldHlwZSA9IHNwX3RhZzsKKworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9pbmZvKCJEU0EgKyBITkFUIHVuc3VwcG9ydCBwcm90b2NvbFxuIik7CisJfQorCisJcmV0dXJuIHBvcnRfaW5kZXg7Cit9CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19obmF0L25mX2huYXRfbXRrLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19obmF0L25mX2huYXRfbXRrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZiYmUwNgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2huYXQvbmZfaG5hdF9tdGsuaApAQCAtMCwwICsxLDEyOSBAQAorLyogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBTZWFuIFdhbmcgPHNlYW4ud2FuZ0BtZWRpYXRlay5jb20+CisgKiAgIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEpvaG4gQ3Jpc3BpbiA8YmxvZ2ljQG9wZW53cnQub3JnPgorICovCisKKyNpZm5kZWYgTkZfSE5BVF9NVEtfSAorI2RlZmluZSBORl9ITkFUX01US19ICisKKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgIi4uL210a19ldGhfc29jLmgiCisKKyNkZWZpbmUgSE5BVF9TS0JfQ0IyKF9fc2tiKSAoKHN0cnVjdCBobmF0X3NrYl9jYjIgKikmKChfX3NrYiktPmNiWzQ0XSkpCitzdHJ1Y3QgaG5hdF9za2JfY2IyIHsKKwlfX3UzMiBtYWdpYzsKK307CisKKyNpZiBkZWZpbmVkKENPTkZJR19NRURJQVRFS19ORVRTWVNfVjIpCitzdHJ1Y3QgaG5hdF9kZXNjIHsKKwl1MzIgZW50cnkgOiAxNTsKKwl1MzIgZmlsbGVkIDogMzsKKwl1MzIgY3JzbiA6IDU7CisJdTMyIHJlc3YxIDogMzsKKwl1MzIgc3BvcnQgOiA0OworCXUzMiByZXN2MiA6IDE7CisJdTMyIGFsZyA6IDE7CisJdTMyIGlmYWNlIDogODsKKwl1MzIgd2RtYWlkIDogMjsKKwl1MzIgcnhpZCA6IDI7CisJdTMyIHdjaWQgOiAxMDsKKwl1MzIgYnNzaWQgOiA2OworCXUzMiByZXN2NSA6IDIwOworCXUzMiBtYWdpY190YWdfcHJvdGVjdCA6IDE2OworfSBfX3BhY2tlZDsKKyNlbHNlCitzdHJ1Y3QgaG5hdF9kZXNjIHsKKwl1MzIgZW50cnkgOiAxNDsKKwl1MzIgY3JzbiA6IDU7CisJdTMyIHNwb3J0IDogNDsKKwl1MzIgYWxnIDogMTsKKwl1MzIgaWZhY2UgOiA0OworCXUzMiBmaWxsZWQgOiAzOworCXUzMiByZXN2IDogMTsKKwl1MzIgbWFnaWNfdGFnX3Byb3RlY3QgOiAxNjsKKwl1MzIgd2RtYWlkIDogODsKKwl1MzIgcnhpZCA6IDI7CisJdTMyIHdjaWQgOiA4OworCXUzMiBic3NpZCA6IDY7Cit9IF9fcGFja2VkOworI2VuZGlmCisKKyNkZWZpbmUgSFFPU19NQUdJQ19UQUcgMHg1Njc4CisjZGVmaW5lIEhBU19IUU9TX01BR0lDX1RBRyhza2IpIChxb3NfdG9nZ2xlICYmIHNrYi0+cHJvdG9jb2wgPT0gSFFPU19NQUdJQ19UQUcpCisKKyNkZWZpbmUgSE5BVF9NQUdJQ19UQUcgMHg2Nzg5CisjZGVmaW5lIEhOQVRfSU5GT19GSUxMRUQgMHg3CisjZGVmaW5lIFdJRklfSU5GT19MRU4gMworI2RlZmluZSBGT0VfSU5GT19MRU4gKDEwICsgV0lGSV9JTkZPX0xFTikKKyNkZWZpbmUgSVNfU1BBQ0VfQVZBSUxBQkxFX0hFQUQoc2tiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJKCgoKHNrYl9oZWFkcm9vbShza2IpID49IEZPRV9JTkZPX0xFTikgPyAxIDogMCkpKQorCisjZGVmaW5lIHNrYl9obmF0X2luZm8oc2tiKSAoKHN0cnVjdCBobmF0X2Rlc2MgKikoc2tiLT5oZWFkKSkKKyNkZWZpbmUgc2tiX2huYXRfbWFnaWMoc2tiKSAoKChzdHJ1Y3QgaG5hdF9kZXNjICopKHNrYi0+aGVhZCkpLT5tYWdpYykKKyNkZWZpbmUgc2tiX2huYXRfcmVhc29uKHNrYikgKCgoc3RydWN0IGhuYXRfZGVzYyAqKShza2ItPmhlYWQpKS0+Y3JzbikKKyNkZWZpbmUgc2tiX2huYXRfZW50cnkoc2tiKSAoKChzdHJ1Y3QgaG5hdF9kZXNjICopKHNrYi0+aGVhZCkpLT5lbnRyeSkKKyNkZWZpbmUgc2tiX2huYXRfc3BvcnQoc2tiKSAoKChzdHJ1Y3QgaG5hdF9kZXNjICopKHNrYi0+aGVhZCkpLT5zcG9ydCkKKyNkZWZpbmUgc2tiX2huYXRfYWxnKHNrYikgKCgoc3RydWN0IGhuYXRfZGVzYyAqKShza2ItPmhlYWQpKS0+YWxnKQorI2RlZmluZSBza2JfaG5hdF9pZmFjZShza2IpICgoKHN0cnVjdCBobmF0X2Rlc2MgKikoc2tiLT5oZWFkKSktPmlmYWNlKQorI2RlZmluZSBza2JfaG5hdF9maWxsZWQoc2tiKSAoKChzdHJ1Y3QgaG5hdF9kZXNjICopKHNrYi0+aGVhZCkpLT5maWxsZWQpCisjZGVmaW5lIHNrYl9obmF0X21hZ2ljX3RhZyhza2IpICgoKHN0cnVjdCBobmF0X2Rlc2MgKikoKHNrYiktPmhlYWQpKS0+bWFnaWNfdGFnX3Byb3RlY3QpCisjZGVmaW5lIHNrYl9obmF0X3dkbWFfaWQoc2tiKSAoKChzdHJ1Y3QgaG5hdF9kZXNjICopKChza2IpLT5oZWFkKSktPndkbWFpZCkKKyNkZWZpbmUgc2tiX2huYXRfcnhfaWQoc2tiKSAoKChzdHJ1Y3QgaG5hdF9kZXNjICopKChza2IpLT5oZWFkKSktPnJ4aWQpCisjZGVmaW5lIHNrYl9obmF0X3djX2lkKHNrYikgKCgoc3RydWN0IGhuYXRfZGVzYyAqKSgoc2tiKS0+aGVhZCkpLT53Y2lkKQorI2RlZmluZSBza2JfaG5hdF9ic3NfaWQoc2tiKSAoKChzdHJ1Y3QgaG5hdF9kZXNjICopKChza2IpLT5oZWFkKSktPmJzc2lkKQorI2RlZmluZSBza2JfaG5hdF9wcGUoc2tiKQkJCQlcCisJKChza2JfaG5hdF9pZmFjZShza2IpID09IEZPRV9NQUdJQ19XRUQxICYmIENGR19QUEVfTlVNID4gMSkgPyAxIDogMCkKKyNkZWZpbmUgZG9fZXh0MmdlX2Zhc3RfdHJ5KGRldiwgc2tiKQkJCQkJCVwKKwkoKHNrYl9obmF0X2lmYWNlKHNrYikgPT0gRk9FX01BR0lDX0VYVCkgJiYgIWlzX2Zyb21fZXh0Z2Uoc2tiKSkKKyNkZWZpbmUgc2V0X2Zyb21fZXh0Z2Uoc2tiKSAoSE5BVF9TS0JfQ0IyKHNrYiktPm1hZ2ljID0gMHg3ODc4NjY4OCkKKyNkZWZpbmUgY2xyX2Zyb21fZXh0Z2Uoc2tiKSAoSE5BVF9TS0JfQ0IyKHNrYiktPm1hZ2ljID0gMHgwKQorI2RlZmluZSBzZXRfdG9fcHBlKHNrYikgKEhOQVRfU0tCX0NCMihza2IpLT5tYWdpYyA9IDB4Nzg2ODE0MTUpCisjZGVmaW5lIGlzX2Zyb21fZXh0Z2Uoc2tiKSAoSE5BVF9TS0JfQ0IyKHNrYiktPm1hZ2ljID09IDB4Nzg3ODY2ODgpCisjZGVmaW5lIGlzX2huYXRfaW5mb19maWxsZWQoc2tiKSAoc2tiX2huYXRfZmlsbGVkKHNrYikgPT0gSE5BVF9JTkZPX0ZJTExFRCkKKyNkZWZpbmUgaXNfbWFnaWNfdGFnX3ZhbGlkKHNrYikgKHNrYl9obmF0X21hZ2ljX3RhZyhza2IpID09IEhOQVRfTUFHSUNfVEFHKQorI2RlZmluZSBzZXRfZnJvbV9tYXBlKHNrYikgKEhOQVRfU0tCX0NCMihza2IpLT5tYWdpYyA9IDB4Nzg3ODc3ODgpCisjZGVmaW5lIGlzX2Zyb21fbWFwZShza2IpIChITkFUX1NLQl9DQjIoc2tiKS0+bWFnaWMgPT0gMHg3ODc4Nzc4OCkKKyNkZWZpbmUgaXNfdW5yZXNlcnZlZF9wb3J0KGhkcikJCQkJCQkgICAgICAgXAorCSgobnRvaHMoaGRyLT5zb3VyY2UpID4gMTAyMykgJiYgKG50b2hzKGhkci0+ZGVzdCkgPiAxMDIzKSkKKworI2RlZmluZSBUVExfMCAweDAyCisjZGVmaW5lIEhBU19PUFRJT05fSEVBREVSIDB4MDMKKyNkZWZpbmUgTk9fRkxPV19JU19BU1NJR05FRCAweDA3CisjZGVmaW5lIElQVjRfV0lUSF9GUkFHTUVOVCAweDA4CisjZGVmaW5lIElQVjRfSE5BUFRfRFNMSVRFX1dJVEhfRlJBR01FTlQgMHgwOQorI2RlZmluZSBJUFY0X0hOQVBUX0RTTElURV9XSVRIT1VUX1RDUF9VRFAgMHgwQQorI2RlZmluZSBJUFY2XzVUXzZSRF9XSVRIT1VUX1RDUF9VRFAgMHgwQgorI2RlZmluZSBUQ1BfRklOX1NZTl9SU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkweDBDIC8qIEluZ3Jlc3MgcGFja2V0IGlzIFRDUCBmaW4vc3luL3JzdCAoZm9yIElQdjQgTkFQVC9EUy1MaXRlIG9yIElQdjYgNVQtcm91dGUvNlJEKSAqLworI2RlZmluZSBVTl9ISVQgMHgwRCAvKiBGT0UgVW4taGl0ICovCisjZGVmaW5lIEhJVF9VTkJJTkQgMHgwRSAvKiBGT0UgSGl0IHVuYmluZCAqLworI2RlZmluZSBISVRfVU5CSU5EX1JBVEVfUkVBQ0ggMHgwRgorI2RlZmluZSBISVRfQklORF9UQ1BfRklOIDB4MTAKKyNkZWZpbmUgSElUX0JJTkRfVFRMXzEgMHgxMQorI2RlZmluZSBISVRfQklORF9XSVRIX1ZMQU5fVklPTEFUSU9OIDB4MTIKKyNkZWZpbmUgSElUX0JJTkRfS0VFUEFMSVZFX1VDX09MRF9IRFIgMHgxMworI2RlZmluZSBISVRfQklORF9LRUVQQUxJVkVfTUNfTkVXX0hEUiAweDE0CisjZGVmaW5lIEhJVF9CSU5EX0tFRVBBTElWRV9EVVBfT0xEX0hEUiAweDE1CisjZGVmaW5lIEhJVF9CSU5EX0ZPUkNFX1RPX0NQVSAweDE2CisjZGVmaW5lIEhJVF9CSU5EX1dJVEhfT1BUSU9OX0hFQURFUiAweDE3CisjZGVmaW5lIEhJVF9CSU5EX01VTFRJQ0FTVF9UT19DUFUgMHgxOAorI2RlZmluZSBISVRfQklORF9NVUxUSUNBU1RfVE9fR01BQ19DUFUgMHgxOQorI2RlZmluZSBISVRfUFJFX0JJTkQgMHgxQQorI2RlZmluZSBISVRfQklORF9QQUNLRVRfU0FNUExJTkcgMHgxQgorI2RlZmluZSBISVRfQklORF9FWENFRURfTVRVIDB4MUMKKwordTMyIGhuYXRfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit1MzIgaG5hdF9zZXRfc2tiX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyICpyeGQpOwordTMyIGhuYXRfcmVnKHN0cnVjdCBuZXRfZGV2aWNlICosIHZvaWQgX19pb21lbSAqKTsKK3UzMiBobmF0X3VucmVnKHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3NnbWlpLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19zZ21paS5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUwYmRiZDgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19zZ21paS5jCkBAIC0wLDAgKzEsMTM3IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLy8gQ29weXJpZ2h0IChjKSAyMDE4LTIwMTkgTWVkaWFUZWsgSW5jLgorCisvKiBBIGxpYnJhcnkgZm9yIE1lZGlhVGVrIFNHTUlJIGNpcmN1aXQKKyAqCisgKiBBdXRob3I6IFNlYW4gV2FuZyA8c2Vhbi53YW5nQG1lZGlhdGVrLmNvbT4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorCisjaW5jbHVkZSAibXRrX2V0aF9zb2MuaCIKKworaW50IG10a19zZ21paV9pbml0KHN0cnVjdCBtdGtfc2dtaWkgKnNzLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKnIsIHUzMiBhbmFfcmdjMykKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCWludCBpOworCisJc3MtPmFuYV9yZ2MzID0gYW5hX3JnYzM7CisKKwlmb3IgKGkgPSAwOyBpIDwgTVRLX01BWF9ERVZTOyBpKyspIHsKKwkJbnAgPSBvZl9wYXJzZV9waGFuZGxlKHIsICJtZWRpYXRlayxzZ21paXN5cyIsIGkpOworCQlpZiAoIW5wKQorCQkJYnJlYWs7CisKKwkJc3MtPnJlZ21hcFtpXSA9IHN5c2Nvbl9ub2RlX3RvX3JlZ21hcChucCk7CisJCWlmIChJU19FUlIoc3MtPnJlZ21hcFtpXSkpCisJCQlyZXR1cm4gUFRSX0VSUihzcy0+cmVnbWFwW2ldKTsKKworCQlzcy0+ZmxhZ3NbaV0gJj0gfihNVEtfU0dNSUlfUE5fU1dBUCk7CisJCWlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobnAsICJwbl9zd2FwIikpCisJCQlzcy0+ZmxhZ3NbaV0gfD0gTVRLX1NHTUlJX1BOX1NXQVA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBtdGtfc2dtaWlfc2V0dXBfbW9kZV9hbihzdHJ1Y3QgbXRrX3NnbWlpICpzcywgdW5zaWduZWQgaW50IGlkKQoreworCXVuc2lnbmVkIGludCB2YWw7CisKKwlpZiAoIXNzLT5yZWdtYXBbaWRdKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFNldHVwIHRoZSBsaW5rIHRpbWVyIGFuZCBRUEhZIHBvd2VyIHVwIGluc2lkZSBTR01JSVNZUyAqLworCXJlZ21hcF93cml0ZShzcy0+cmVnbWFwW2lkXSwgU0dNU1lTX1BDU19MSU5LX1RJTUVSLAorCQkgICAgIFNHTUlJX0xJTktfVElNRVJfREVGQVVMVCk7CisKKwlyZWdtYXBfcmVhZChzcy0+cmVnbWFwW2lkXSwgU0dNU1lTX1NHTUlJX01PREUsICZ2YWwpOworCXZhbCB8PSBTR01JSV9SRU1PVEVfRkFVTFRfRElTOworCXJlZ21hcF93cml0ZShzcy0+cmVnbWFwW2lkXSwgU0dNU1lTX1NHTUlJX01PREUsIHZhbCk7CisKKwlyZWdtYXBfcmVhZChzcy0+cmVnbWFwW2lkXSwgU0dNU1lTX1BDU19DT05UUk9MXzEsICZ2YWwpOworCXZhbCB8PSBTR01JSV9BTl9SRVNUQVJUOworCXJlZ21hcF93cml0ZShzcy0+cmVnbWFwW2lkXSwgU0dNU1lTX1BDU19DT05UUk9MXzEsIHZhbCk7CisKKwlpZihNVEtfSEFTX0ZMQUdTKHNzLT5mbGFnc1tpZF0sTVRLX1NHTUlJX1BOX1NXQVApKQorCQlyZWdtYXBfdXBkYXRlX2JpdHMoc3MtPnJlZ21hcFtpZF0sIFNHTVNZU19RUEhZX1dSQVBfQ1RSTCwKKwkJCQkgICBTR01JSV9QTl9TV0FQX01BU0ssIFNHTUlJX1BOX1NXQVBfVFhfUlgpOworCisJcmVnbWFwX3JlYWQoc3MtPnJlZ21hcFtpZF0sIFNHTVNZU19RUEhZX1BXUl9TVEFURV9DVFJMLCAmdmFsKTsKKwl2YWwgJj0gflNHTUlJX1BIWUFfUFdEOworCXJlZ21hcF93cml0ZShzcy0+cmVnbWFwW2lkXSwgU0dNU1lTX1FQSFlfUFdSX1NUQVRFX0NUUkwsIHZhbCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG10a19zZ21paV9zZXR1cF9tb2RlX2ZvcmNlKHN0cnVjdCBtdGtfc2dtaWkgKnNzLCB1bnNpZ25lZCBpbnQgaWQsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCWlmICghc3MtPnJlZ21hcFtpZF0pCisJCXJldHVybiAtRUlOVkFMOworCisJcmVnbWFwX3JlYWQoc3MtPnJlZ21hcFtpZF0sIHNzLT5hbmFfcmdjMywgJnZhbCk7CisJdmFsICY9IH5SR19QSFlfU1BFRURfTUFTSzsKKwlpZiAoc3RhdGUtPmludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMjUwMEJBU0VYKQorCQl2YWwgfD0gUkdfUEhZX1NQRUVEXzNfMTI1RzsKKwlyZWdtYXBfd3JpdGUoc3MtPnJlZ21hcFtpZF0sIHNzLT5hbmFfcmdjMywgdmFsKTsKKworCS8qIERpc2FibGUgU0dNSUkgQU4gKi8KKwlyZWdtYXBfcmVhZChzcy0+cmVnbWFwW2lkXSwgU0dNU1lTX1BDU19DT05UUk9MXzEsICZ2YWwpOworCXZhbCAmPSB+U0dNSUlfQU5fRU5BQkxFOworCXJlZ21hcF93cml0ZShzcy0+cmVnbWFwW2lkXSwgU0dNU1lTX1BDU19DT05UUk9MXzEsIHZhbCk7CisKKwkvKiBTR01JSSBmb3JjZSBtb2RlIHNldHRpbmcgKi8KKwlyZWdtYXBfcmVhZChzcy0+cmVnbWFwW2lkXSwgU0dNU1lTX1NHTUlJX01PREUsICZ2YWwpOworCXZhbCAmPSB+U0dNSUlfSUZfTU9ERV9NQVNLOworCisJc3dpdGNoIChzdGF0ZS0+c3BlZWQpIHsKKwljYXNlIFNQRUVEXzEwOgorCQl2YWwgfD0gU0dNSUlfU1BFRURfMTA7CisJCWJyZWFrOworCWNhc2UgU1BFRURfMTAwOgorCQl2YWwgfD0gU0dNSUlfU1BFRURfMTAwOworCQlicmVhazsKKwljYXNlIFNQRUVEXzI1MDA6CisJY2FzZSBTUEVFRF8xMDAwOgorCQl2YWwgfD0gU0dNSUlfU1BFRURfMTAwMDsKKwkJYnJlYWs7CisJfTsKKworCWlmIChzdGF0ZS0+ZHVwbGV4ID09IERVUExFWF9GVUxMKQorCQl2YWwgfD0gU0dNSUlfRFVQTEVYX0ZVTEw7CisKKwlyZWdtYXBfd3JpdGUoc3MtPnJlZ21hcFtpZF0sIFNHTVNZU19TR01JSV9NT0RFLCB2YWwpOworCisJaWYoTVRLX0hBU19GTEFHUyhzcy0+ZmxhZ3NbaWRdLE1US19TR01JSV9QTl9TV0FQKSkKKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKHNzLT5yZWdtYXBbaWRdLCBTR01TWVNfUVBIWV9XUkFQX0NUUkwsCisJCQkJICAgU0dNSUlfUE5fU1dBUF9NQVNLLCBTR01JSV9QTl9TV0FQX1RYX1JYKTsKKwkvKiBSZWxlYXNlIFBIWUEgcG93ZXIgZG93biBzdGF0ZSAqLworCXJlZ21hcF9yZWFkKHNzLT5yZWdtYXBbaWRdLCBTR01TWVNfUVBIWV9QV1JfU1RBVEVfQ1RSTCwgJnZhbCk7CisJdmFsICY9IH5TR01JSV9QSFlBX1BXRDsKKwlyZWdtYXBfd3JpdGUoc3MtPnJlZ21hcFtpZF0sIFNHTVNZU19RUEhZX1BXUl9TVEFURV9DVFJMLCB2YWwpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbXRrX3NnbWlpX3Jlc3RhcnRfYW4oc3RydWN0IG10a19ldGggKmV0aCwgaW50IG1hY19pZCkKK3sKKwlzdHJ1Y3QgbXRrX3NnbWlpICpzcyA9IGV0aC0+c2dtaWk7CisJdW5zaWduZWQgaW50IHZhbCwgc2lkOworCisJLyogRGVjaWRlIGhvdyBHTUFDIGFuZCBTR01JSVNZUyBiZSBtYXBwZWQgKi8KKwlzaWQgPSAoTVRLX0hBU19DQVBTKGV0aC0+c29jLT5jYXBzLCBNVEtfU0hBUkVEX1NHTUlJKSkgPworCSAgICAgICAwIDogbWFjX2lkOworCisJaWYgKCFzcy0+cmVnbWFwW3NpZF0pCisJCXJldHVybjsKKworCXJlZ21hcF9yZWFkKHNzLT5yZWdtYXBbc2lkXSwgU0dNU1lTX1BDU19DT05UUk9MXzEsICZ2YWwpOworCXZhbCB8PSBTR01JSV9BTl9SRVNUQVJUOworCXJlZ21hcF93cml0ZShzcy0+cmVnbWFwW3NpZF0sIFNHTVNZU19QQ1NfQ09OVFJPTF8xLCB2YWwpOworfQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvZ3B5MjExLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ncHkyMTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWM4M2IzCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvZ3B5MjExLmMKQEAgLTAsMCArMSw2MSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArCisjaW5jbHVkZSA8bGludXgvYml0ZmllbGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KKworc3RhdGljIGludCBncHkyMTFfcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK2ludCBncHkyMTFfcGh5X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCit7CisJaW50IHNnbWlpX3JlZyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCA4KTsKKworCS8qIGVuYWJsZSAyLjVHIFNHTUlJIHJhdGUgYWRhcHRpb24gKi8KKwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDgsIDB4MjRlMik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBncHkyMTFfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCit7CisJaW50IHJldDsKKworCXJldCA9IGdlbnBoeV9yZWFkX2FiaWxpdGllcyhwaHlkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBHUFkyMTEgd2l0aCByYXRlIGFkYXB0aW9uIHN1cHBvcnRzIDEwME0vMUcvMi41RyBzcGVlZC4gKi8KKwlsaW5rbW9kZV9jbGVhcl9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTBiYXNlVF9IYWxmX0JJVCwKKwkJCSAgIHBoeWRldi0+c3VwcG9ydGVkKTsKKwlsaW5rbW9kZV9jbGVhcl9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTBiYXNlVF9GdWxsX0JJVCwKKwkJCSAgIHBoeWRldi0+c3VwcG9ydGVkKTsKKwlsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlWF9GdWxsX0JJVCwKKwkJCSBwaHlkZXYtPnN1cHBvcnRlZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGdweTIxMV9waHlfZHJpdmVyW10gPSB7CisJeworCQlQSFlfSURfTUFUQ0hfTU9ERUwoMHg2N2M5ZGUwYSksCisJCS5uYW1lCQk9ICJJbnRlbCBHUFkyMTEgUEhZIiwKKwkJLmNvbmZpZ19pbml0CT0gZ3B5MjExX3BoeV9jb25maWdfaW5pdCwKKwkJLnByb2JlCQk9IGdweTIxMV9waHlfcHJvYmUsCisJCS5nZXRfZmVhdHVyZXMJPSBncHkyMTFfZ2V0X2ZlYXR1cmVzLAorCX0KK307CisKK21vZHVsZV9waHlfZHJpdmVyKGdweTIxMV9waHlfZHJpdmVyKTsKKworc3RhdGljIHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBncHkyMTFfcGh5X3RibFtdID0geworCXsgUEhZX0lEX01BVENIX1ZFTkRPUigweDY3YzlkZTAwKSB9LAorCXsgfQorfTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJJbnRlbCBHUFkyMTEgUEhZIGRyaXZlciB3aXRoIHJhdGUgYWRhcHRpb24iKTsKK01PRFVMRV9BVVRIT1IoIkxhbmRlbiBDaGFvIDxsYW5kZW4uY2hhb0BtZWRpYXRlay5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUobWRpbywgZ3B5MjExX3BoeV90YmwpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvbWVkaWF0ZWstZ2UuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrLWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhmOWQ2YQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L21lZGlhdGVrLWdlLmMKQEAgLTAsMCArMSw5MzIgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKworI2luY2x1ZGUgPGxpbnV4L2JpdGZpZWxkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbnZtZW0tY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorCisjZGVmaW5lIEFOQUxPR19JTlRFUk5BTF9PUEVSQVRJT05fTUFYX1VTCSgyMCkKKyNkZWZpbmUgWkNBTF9DVFJMX01JTgkJCQkoMCkKKyNkZWZpbmUgWkNBTF9DVFJMX01BWAkJCQkoNjMpCisjZGVmaW5lIFRYUkVTRVJWRV9NSU4JCQkJKDApCisjZGVmaW5lIFRYUkVTRVJWRV9NQVgJCQkJKDcpCisKKworI2RlZmluZSBNVEtfRVhUX1BBR0VfQUNDRVNTCQkweDFmCisjZGVmaW5lIE1US19QSFlfUEFHRV9TVEFOREFSRAkJMHgwMDAwCisjZGVmaW5lIE1US19QSFlfUEFHRV9FWFRFTkRFRAkJMHgwMDAxCisjZGVmaW5lIE1US19QSFlfUEFHRV9FWFRFTkRFRF8yCQkweDAwMDIKKyNkZWZpbmUgTVRLX1BIWV9QQUdFX0VYVEVOREVEXzMJCTB4MDAwMworI2RlZmluZSBNVEtfUEhZX1BBR0VfRVhURU5ERURfMkEzMAkweDJhMzAKKyNkZWZpbmUgTVRLX1BIWV9QQUdFX0VYVEVOREVEXzUyQjUJMHg1MmI1CisKKy8qIFJlZ2lzdGVycyBvbiBNRElPX01NRF9WRU5EMSAqLworI2RlZmluZSBNVEtfUEhZXzFzdF9PVkVSU0hPT1RfTEVWRUxfMFRPMQkoMHgxKQorI2RlZmluZSBNVEtfUEhZXzJuZF9PVkVSU0hPT1RfTEVWRUxfMFRPMQkoMHgyKQorI2RlZmluZSBNVEtfUEhZXzFzdF9PVkVSU0hPT1RfTEVWRUxfMVRPMAkoMHg0KQorI2RlZmluZSBNVEtfUEhZXzJuZF9PVkVSU0hPT1RfTEVWRUxfMVRPMAkoMHg1KQorI2RlZmluZSBNVEtfUEhZXzFzdF9PVkVSU0hPT1RfTEVWRUxfMFRPTjEJKDB4NykgLyogTiBtZWFucyBuZWdhdGl2ZSAqLworI2RlZmluZSBNVEtfUEhZXzJuZF9PVkVSU0hPT1RfTEVWRUxfMFRPTjEJKDB4OCkKKyNkZWZpbmUgTVRLX1BIWV8xc3RfT1ZFUlNIT09UX0xFVkVMX04xVE8wCSgweGEpCisjZGVmaW5lIE1US19QSFlfMm5kX09WRVJTSE9PVF9MRVZFTF9OMVRPMAkoMHhiKQorCisjZGVmaW5lIE1US19QSFlfVFhWTERfREFfUkcJCQkJKDB4MTIpCisjZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9BX0dCRV9NQVNLCUdFTk1BU0soMTUsIDEwKQorI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQV9UQlRfTUFTSwlHRU5NQVNLKDUsIDApCisKKyNkZWZpbmUgTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfQTIJKDB4MTYpCisjZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9BX0hCVF9NQVNLCUdFTk1BU0soMTUsIDEwKQorI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQV9UU1RfTUFTSwlHRU5NQVNLKDUsIDApCisKKyNkZWZpbmUgTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfQjEJKDB4MTcpCisjZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9CX0dCRV9NQVNLCUdFTk1BU0soMTMsIDgpCisjZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9CX1RCVF9NQVNLCUdFTk1BU0soNSwgMCkKKworI2RlZmluZSBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9CMgkoMHgxOCkKKyNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0JfSEJUX01BU0sJR0VOTUFTSygxMywgOCkKKyNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0JfVFNUX01BU0sJR0VOTUFTSyg1LCAwKQorCisjZGVmaW5lIE1US19QSFlfVFhfSTJNUEJfVEVTVF9NT0RFX0MxCSgweDE5KQorI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQ19HQkVfTUFTSwlHRU5NQVNLKDEzLCA4KQorI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfQ19UQlRfTUFTSwlHRU5NQVNLKDUsIDApCisKKyNkZWZpbmUgTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfQzIJKDB4MjApCisjZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9DX0hCVF9NQVNLCUdFTk1BU0soMTMsIDgpCisjZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9DX1RTVF9NQVNLCUdFTk1BU0soNSwgMCkKKworI2RlZmluZSBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9EMQkoMHgyMSkKKyNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0RfR0JFX01BU0sJR0VOTUFTSygxMywgOCkKKyNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0RfVEJUX01BU0sJR0VOTUFTSyg1LCAwKQorCisjZGVmaW5lIE1US19QSFlfVFhfSTJNUEJfVEVTVF9NT0RFX0QyCSgweDIyKQorI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfRF9IQlRfTUFTSwlHRU5NQVNLKDEzLCA4KQorI2RlZmluZSAgIE1US19QSFlfREFfVFhfSTJNUEJfRF9UU1RfTUFTSwlHRU5NQVNLKDUsIDApCisKKworI2RlZmluZSBNVEtfUEhZX1JFU0VSVkVfUkdfMAkJKDB4MjcpCisjZGVmaW5lIE1US19QSFlfUkVTRVJWRV9SR18xCQkoMHgyOCkKKworI2RlZmluZSBNVEtfUEhZX1JHX0FOQV9URVNUX1BPV0VSVVBfVFgJKDB4M2IpCisjZGVmaW5lIE1US19QSFlfVEFOQV9DQUxfTU9ERQkJKDB4YzEpCisjZGVmaW5lIE1US19QSFlfVEFOQV9DQUxfTU9ERV9TSElGVAkoOCkKKworI2RlZmluZSBNVEtfUEhZX1JYQURDX0NUUkxfUkc5CQkoMHhjOCkKKyNkZWZpbmUgICBNVEtfUEhZX0RBX1JYX1BTQk5fVEJUX01BU0sJR0VOTUFTSygxNCwgMTIpCisjZGVmaW5lICAgTVRLX1BIWV9EQV9SWF9QU0JOX0hCVF9NQVNLCUdFTk1BU0soMTAsIDgpCisjZGVmaW5lICAgTVRLX1BIWV9EQV9SWF9QU0JOX0dCRV9NQVNLCUdFTk1BU0soNiwgNCkKKyNkZWZpbmUgICBNVEtfUEhZX0RBX1JYX1BTQk5fTFBfTUFTSwlHRU5NQVNLKDIsIDApCisKKyNkZWZpbmUgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMAkJKDB4ZGIpCisjZGVmaW5lICAgTVRLX1BIWV9SR19DQUxfQ0tJTlYJCUJJVCgxMikKKyNkZWZpbmUgICBNVEtfUEhZX1JHX0FOQV9DQUxFTgkJQklUKDgpCisjZGVmaW5lICAgTVRLX1BIWV9SR19SRVhUX0NBTEVOCQlCSVQoNCkKKyNkZWZpbmUgICBNVEtfUEhZX1JHX1pDQUxFTl9BCQlCSVQoMCkKKworI2RlZmluZSBNVEtfUEhZX1JHX0FOQV9DQUxfUkcxCQkoMHhkYykKKyNkZWZpbmUgICBNVEtfUEhZX1JHX1pDQUxFTl9CCQlCSVQoMTIpCisjZGVmaW5lICAgTVRLX1BIWV9SR19aQ0FMRU5fQwkJQklUKDgpCisjZGVmaW5lICAgTVRLX1BIWV9SR19aQ0FMRU5fRAkJQklUKDQpCisjZGVmaW5lICAgTVRLX1BIWV9SR19UWFZPU19DQUxFTglCSVQoMCkKKworI2RlZmluZSBNVEtfUEhZX1JHX0FOQV9DQUxfUkcyCQkoMHhkZCkKKyNkZWZpbmUgICBNVEtfUEhZX1JHX1RYR19DQUxFTl9BCUJJVCgxMikKKyNkZWZpbmUgICBNVEtfUEhZX1JHX1RYR19DQUxFTl9CCUJJVCg4KQorI2RlZmluZSAgIE1US19QSFlfUkdfVFhHX0NBTEVOX0MJQklUKDQpCisjZGVmaW5lICAgTVRLX1BIWV9SR19UWEdfQ0FMRU5fRAlCSVQoMCkKKworI2RlZmluZSBNVEtfUEhZX1JHX0FOQV9DQUxfUkc1CQkoMHhlMCkKKyNkZWZpbmUgICBNVEtfUEhZX1JHX1JFWFRfVFJJTV9NQVNLCUdFTk1BU0soMTMsIDgpCisjZGVmaW5lICAgTVRLX1BIWV9SR19aQ0FMX0NUUkxfTUFTSwlHRU5NQVNLKDUsIDApCisKKyNkZWZpbmUgTVRLX1BIWV9SR19ERVYxRV9SRUcxNzIJCSgweDE3MikKKyNkZWZpbmUgICBNVEtfUEhZX0NSX1RYX0FNUF9PRkZTRVRfQV9NQVNLCUdFTk1BU0soMTMsIDgpCisjZGVmaW5lICAgTVRLX1BIWV9DUl9UWF9BTVBfT0ZGU0VUX0JfTUFTSwlHRU5NQVNLKDYsIDApCisKKyNkZWZpbmUgTVRLX1BIWV9SR19ERVYxRV9SRUcxNzMJCSgweDE3MykKKyNkZWZpbmUgICBNVEtfUEhZX0NSX1RYX0FNUF9PRkZTRVRfQ19NQVNLCUdFTk1BU0soMTMsIDgpCisjZGVmaW5lICAgTVRLX1BIWV9DUl9UWF9BTVBfT0ZGU0VUX0RfTUFTSwlHRU5NQVNLKDYsIDApCisKKyNkZWZpbmUgTVRLX1BIWV9SR19ERVYxRV9SRUcxNzQJCSgweDE3NCkKKyNkZWZpbmUgICBNVEtfUEhZX1JTRUxfVFhfQV9NQVNLCUdFTk1BU0soMTQsIDgpCisjZGVmaW5lICAgTVRLX1BIWV9SU0VMX1RYX0JfTUFTSwlHRU5NQVNLKDYsIDApCisKKyNkZWZpbmUgTVRLX1BIWV9SR19ERVYxRV9SRUcxNzUJCSgweDE3NSkKKyNkZWZpbmUgICBNVEtfUEhZX1JTRUxfVFhfQ19NQVNLCUdFTk1BU0soMTQsIDgpCisjZGVmaW5lICAgTVRLX1BIWV9SU0VMX1RYX0RfTUFTSwlHRU5NQVNLKDYsIDApCisKKyNkZWZpbmUgTVRLX1BIWV9SR19ERVYxRV9SRUcxN0EJCSgweDE3YSkKKyNkZWZpbmUgICBNVEtfUEhZX0FEX0NBTF9DT01QX09VVF9TSElGVAkoOCkKKworI2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzE3QgkJKDB4MTdiKQorI2RlZmluZSAgIE1US19QSFlfREFfQ0FMX0NMSwkJQklUKDApCisKKyNkZWZpbmUgTVRLX1BIWV9SR19ERVYxRV9SRUcxN0MJCSgweDE3YykKKyNkZWZpbmUgICBNVEtfUEhZX0RBX0NBTElOX0ZMQUcJCUJJVCgwKQorCisjZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHMTdECQkoMHgxN2QpCisjZGVmaW5lICAgTVRLX1BIWV9EQVNOX0RBQ19JTjBfQV9NQVNLCUdFTk1BU0soOSwgMCkKKworI2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzE3RQkJKDB4MTdlKQorI2RlZmluZSAgIE1US19QSFlfREFTTl9EQUNfSU4wX0JfTUFTSwlHRU5NQVNLKDksIDApCisKKyNkZWZpbmUgTVRLX1BIWV9SR19ERVYxRV9SRUcxN0YJCSgweDE3ZikKKyNkZWZpbmUgICBNVEtfUEhZX0RBU05fREFDX0lOMF9DX01BU0sJR0VOTUFTSyg5LCAwKQorCisjZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHMTgwCQkoMHgxODApCisjZGVmaW5lICAgTVRLX1BIWV9EQVNOX0RBQ19JTjBfRF9NQVNLCUdFTk1BU0soOSwgMCkKKworI2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzE4MQkJKDB4MTgxKQorI2RlZmluZSAgIE1US19QSFlfREFTTl9EQUNfSU4xX0FfTUFTSwlHRU5NQVNLKDksIDApCisKKyNkZWZpbmUgTVRLX1BIWV9SR19ERVYxRV9SRUcxODIJCSgweDE4MikKKyNkZWZpbmUgICBNVEtfUEhZX0RBU05fREFDX0lOMV9CX01BU0sJR0VOTUFTSyg5LCAwKQorCisjZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHMTgzCQkoMHgxODMpCisjZGVmaW5lICAgTVRLX1BIWV9EQVNOX0RBQ19JTjFfQ19NQVNLCUdFTk1BU0soOSwgMCkKKworI2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzE4NAkJKDB4MTgwKQorI2RlZmluZSAgIE1US19QSFlfREFTTl9EQUNfSU4xX0RfTUFTSwlHRU5NQVNLKDksIDApCisKKyNkZWZpbmUgTVRLX1BIWV9SR19ERVYxRV9SRUc1M0QJCSgweDUzZCkKKyNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX1I1MF9BX05PUk1BTF9NQVNLCUdFTk1BU0soMTMsIDgpCisjZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9SNTBfQV9UQlRfTUFTSwkJR0VOTUFTSyg1LCAwKQorCisjZGVmaW5lIE1US19QSFlfUkdfREVWMUVfUkVHNTNFCQkoMHg1M2UpCisjZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9SNTBfQl9OT1JNQUxfTUFTSwlHRU5NQVNLKDEzLCA4KQorI2RlZmluZSAgIE1US19QSFlfREFfVFhfUjUwX0JfVEJUX01BU0sJCUdFTk1BU0soNSwgMCkKKworI2RlZmluZSBNVEtfUEhZX1JHX0RFVjFFX1JFRzUzRgkJKDB4NTNmKQorI2RlZmluZSAgIE1US19QSFlfREFfVFhfUjUwX0NfTk9STUFMX01BU0sJR0VOTUFTSygxMywgOCkKKyNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX1I1MF9DX1RCVF9NQVNLCQlHRU5NQVNLKDUsIDApCisKKyNkZWZpbmUgTVRLX1BIWV9SR19ERVYxRV9SRUc1NDAJCSgweDU0MCkKKyNkZWZpbmUgICBNVEtfUEhZX0RBX1RYX1I1MF9EX05PUk1BTF9NQVNLCUdFTk1BU0soMTMsIDgpCisjZGVmaW5lICAgTVRLX1BIWV9EQV9UWF9SNTBfRF9UQlRfTUFTSwkJR0VOTUFTSyg1LCAwKQorCisKKy8qIFJlZ2lzdGVycyBvbiBNRElPX01NRF9WRU5EMiAqLworI2RlZmluZSBNVEtfUEhZX0FOQV9URVNUX0JVU19DVFJMX1JHCSgweDEwMCkKKyNkZWZpbmUgICBNVEtfUEhZX0FOQV9URVNUX01PREVfTUFTSwkJR0VOTUFTSygxNSwgOCkKKworI2RlZmluZSBNVEtfUEhZX1JHX0RFVjFGX1JFRzExMAkJKDB4MTEwKQorI2RlZmluZSAgIE1US19QSFlfUkdfVFNUX0RNWTJfTUFTSwkJR0VOTUFTSyg1LCAwKQorI2RlZmluZSAgIE1US19QSFlfUkdfVEFOQV9SRVNFUlZFX01BU0sJR0VOTUFTSygxMywgOCkKKworI2RlZmluZSBNVEtfUEhZX1JHX0RFVjFGX1JFRzExNQkJKDB4MTE1KQorI2RlZmluZSAgIE1US19QSFlfUkdfQkdfUkFTRUxfTUFTSwlHRU5NQVNLKDIsIDApCisKKy8qCisgKiBUaGVzZSBtYWNybyBwcml2aWRlcyBlZnVzZSBwYXJzaW5nIGZvciBpbnRlcm5hbCBwaHkuCisgKi8KKyNkZWZpbmUgRUZTX0RBX1RYX0kyTVBCX0EoeCkJCSgoKHgpID4+IDApICYgR0VOTUFTSyg1LCAwKSkKKyNkZWZpbmUgRUZTX0RBX1RYX0kyTVBCX0IoeCkJCSgoKHgpID4+IDYpICYgR0VOTUFTSyg1LCAwKSkKKyNkZWZpbmUgRUZTX0RBX1RYX0kyTVBCX0MoeCkJCSgoKHgpID4+IDEyKSAmIEdFTk1BU0soNSwgMCkpCisjZGVmaW5lIEVGU19EQV9UWF9JMk1QQl9EKHgpCQkoKCh4KSA+PiAxOCkgJiBHRU5NQVNLKDUsIDApKQorI2RlZmluZSBFRlNfREFfVFhfQU1QX09GRlNFVF9BKHgpCSgoKHgpID4+IDI0KSAmIEdFTk1BU0soNSwgMCkpCisKKyNkZWZpbmUgRUZTX0RBX1RYX0FNUF9PRkZTRVRfQih4KQkoKCh4KSA+PiAwKSAmIEdFTk1BU0soNSwgMCkpCisjZGVmaW5lIEVGU19EQV9UWF9BTVBfT0ZGU0VUX0MoeCkJKCgoeCkgPj4gNikgJiBHRU5NQVNLKDUsIDApKQorI2RlZmluZSBFRlNfREFfVFhfQU1QX09GRlNFVF9EKHgpCSgoKHgpID4+IDEyKSAmIEdFTk1BU0soNSwgMCkpCisjZGVmaW5lIEVGU19EQV9UWF9SNTBfQSh4KQkJKCgoeCkgPj4gMTgpICYgR0VOTUFTSyg1LCAwKSkKKyNkZWZpbmUgRUZTX0RBX1RYX1I1MF9CKHgpCQkoKCh4KSA+PiAyNCkgJiBHRU5NQVNLKDUsIDApKQorCisjZGVmaW5lIEVGU19EQV9UWF9SNTBfQyh4KQkJKCgoeCkgPj4gMCkgJiBHRU5NQVNLKDUsIDApKQorI2RlZmluZSBFRlNfREFfVFhfUjUwX0QoeCkJCSgoKHgpID4+IDYpICYgR0VOTUFTSyg1LCAwKSkKKyNkZWZpbmUgRUZTX0RBX1RYX1I1MF9BXzEwTSh4KQkJKCgoeCkgPj4gMTIpICYgR0VOTUFTSyg1LCAwKSkKKyNkZWZpbmUgRUZTX0RBX1RYX1I1MF9CXzEwTSh4KQkJKCgoeCkgPj4gMTgpICYgR0VOTUFTSyg1LCAwKSkKKworI2RlZmluZSBFRlNfUkdfQkdfUkFTRUwoeCkJCSgoKHgpID4+IDQpICYgR0VOTUFTSygyLCAwKSkKKyNkZWZpbmUgRUZTX1JHX1JFWFRfVFJJTSh4KQkJKCgoeCkgPj4gNykgJiBHRU5NQVNLKDUsIDApKQorCit0eXBlZGVmIGVudW0geworCVBBSVJfQSwKKwlQQUlSX0IsCisJUEFJUl9DLAorCVBBSVJfRCwKK30gcGh5X2NhbF9wYWlyX3Q7CisKK2NvbnN0IHU4IG10Nzk4eF96Y2FsX3RvX3I1MFs2NF0gPSB7CisJNywgOCwgOSwgOSwgMTAsIDEwLCAxMSwgMTEsCisJMTIsIDEzLCAxMywgMTQsIDE0LCAxNSwgMTYsIDE2LAorCTE3LCAxOCwgMTgsIDE5LCAyMCwgMjEsIDIxLCAyMiwKKwkyMywgMjQsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksCisJMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LAorCTM4LCA0MCwgNDEsIDQyLCA0MywgNDUsIDQ2LCA0OCwKKwk0OSwgNTEsIDUyLCA1NCwgNTUsIDU3LCA1OSwgNjEsCisJNjIsIDYzLCA2MywgNjMsIDYzLCA2MywgNjMsIDYzCit9OworCitjb25zdCBjaGFyIHBhaXJbNF0gPSB7J0EnLCAnQicsICdDJywgJ0QnfTsKKworI2RlZmluZSBDQUxfTk9fUEFJUihjYWxfaXRlbSwgY2FsX21vZGUsIC4uLikgXAorCWNhbF9yZXQgPSBjYWxfaXRlbSMjX2NhbF8jI2NhbF9tb2RlKHBoeWRldiwgIyNfX1ZBX0FSR1NfXyk7CisKKyNkZWZpbmUgQ0FMX1BBSVJfQV9UT19BKGNhbF9pdGVtLCBjYWxfbW9kZSwgLi4uKQlcCisJZm9yKGk9UEFJUl9BOyBpPD1QQUlSX0E7IGkrKykgewkJCVwKKwkJY2FsX3JldCA9IGNhbF9pdGVtIyNfY2FsXyMjY2FsX21vZGUocGh5ZGV2LCAjI19fVkFfQVJHU19fLCBpKTtcCisJCWlmKGNhbF9yZXQpIGJyZWFrOwkJCVwKKwl9CisKKyNkZWZpbmUgQ0FMX1BBSVJfQV9UT19EKGNhbF9pdGVtLCBjYWxfbW9kZSwgLi4uKQlcCisJZm9yKGk9UEFJUl9BOyBpPD1QQUlSX0Q7IGkrKykgewkJCVwKKwkJY2FsX3JldCA9IGNhbF9pdGVtIyNfY2FsXyMjY2FsX21vZGUocGh5ZGV2LCAjI19fVkFfQVJHU19fLCBpKTtcCisJCWlmKGNhbF9yZXQpIGJyZWFrOwkJCVwKKwl9CisKKyNkZWZpbmUgU1dfQ0FMKGNhbF9pdGVtLCBjYWxfbW9kZV9nZXQsIHBhaXJfbW9kZSkJCQlcCisJaWYocmV0IHx8ICghcmV0ICYmIHN0cmNtcCgic3ciLCBjYWxfbW9kZV9nZXQpID09IDApKSB7CQlcCisJCUNBTF8jI3BhaXJfbW9kZShjYWxfaXRlbSwgc3cpCQkJCVwKKwl9CisKKyNkZWZpbmUgU1dfRUZVU0VfQ0FMKGNhbF9pdGVtLCBjYWxfbW9kZV9nZXQsIHBhaXJfbW9kZSwuLi4pCVwKKwlpZiAoKGVmc192YWxpZCAmJiByZXQpIHx8CQkJCVwKKwkgICAgKCFyZXQgJiYgc3RyY21wKCJlZnVzZSIsIGNhbF9tb2RlX2dldCkgPT0gMCkpIHsJXAorCQlDQUxfIyNwYWlyX21vZGUoY2FsX2l0ZW0sIGVmdXNlLCAjI19fVkFfQVJHU19fKQlcCisJfSBlbHNlIGlmICgoIWVmc192YWxpZCAmJiByZXQpIHx8CQkJXAorCQkgICAoIXJldCAmJiBzdHJjbXAoInN3IiwgY2FsX21vZGVfZ2V0KSA9PSAwKSkgewlcCisJCUNBTF8jI3BhaXJfbW9kZShjYWxfaXRlbSwgc3cpCQkJXAorCX0KKworI2RlZmluZSBFRlVTRV9DQUwoY2FsX2l0ZW0sIGNhbF9tb2RlX2dldCwgcGFpcl9tb2RlLCAuLi4pCVwKKwlpZiAoKGVmc192YWxpZCAmJiByZXQpIHx8CQkJCVwKKwkgICAgKCFyZXQgJiYgc3RyY21wKCJlZnVzZSIsIGNhbF9tb2RlX2dldCkgPT0gMCkpIHtcCisJCUNBTF8jI3BhaXJfbW9kZShjYWxfaXRlbSwgZWZ1c2UsICMjX19WQV9BUkdTX18pCVwKKwl9CisKKyNkZWZpbmUgQ0FMX0ZMT1coY2FsX2l0ZW0sIGNhbF9tb2RlLCBjYWxfbW9kZV9nZXQsIHBhaXJfbW9kZSwuLi4pCVwKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhwaHlkZXYtPm1kaW8uZGV2Lm9mX25vZGUsCQlcCisJCQkjY2FsX2l0ZW0sICZjYWxfbW9kZV9nZXQpOwkJCVwKKwljYWxfbW9kZSMjX0NBTChjYWxfaXRlbSwgY2FsX21vZGVfZ2V0LCBwYWlyX21vZGUsICMjX19WQV9BUkdTX18pXAorCWVsc2UgewkJCQkJCQkJXAorCQlkZXZfaW5mbygmcGh5ZGV2LT5tZGlvLmRldiwgIiVzIGNhbCBtb2RlICVzJXMsIgkJXAorCQkJICIgdXNlIGRlZmF1bHQgdmFsdWUsIgkJCQlcCisJCQkgIiBlZnMtdmFsaWQ6ICVzIiwJCQkJXAorCQkJICNjYWxfaXRlbSwJCQkJCVwKKwkJCSByZXQ/ICIiIDogY2FsX21vZGVfZ2V0LAkJCVwKKwkJCSByZXQ/ICJub3Qgc3BlY2lmaWVkIiA6ICIgbm90IHN1cHBvcnRlZCIsCVwKKwkJCSBlZnNfdmFsaWQ/ICJ5ZXMiIDogIm5vIik7CQkJXAorCX0JCQkJCQkJCVwKKwlpZihjYWxfcmV0KSB7CQkJCQkJCVwKKwkJZGV2X2VycigmcGh5ZGV2LT5tZGlvLmRldiwgIiVzIGNhbCBmYWlsZWRcbiIsICNjYWxfaXRlbSk7XAorCQlyZXQgPSAtRUlPOwkJCQkJCVwKKwkJZ290byBvdXQ7CQkJCQkJXAorCX0KKworc3RhdGljIGludCBtdGtfZ2VwaHlfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCit7CisJcmV0dXJuIF9fcGh5X3JlYWQocGh5ZGV2LCBNVEtfRVhUX1BBR0VfQUNDRVNTKTsKK30KKworc3RhdGljIGludCBtdGtfZ2VwaHlfd3JpdGVfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSkKK3sKKwlyZXR1cm4gX19waHlfd3JpdGUocGh5ZGV2LCBNVEtfRVhUX1BBR0VfQUNDRVNTLCBwYWdlKTsKK30KKworLyoKKyAqIE9uZSBjYWxpYnJhdGlvbiBjeWNsZSBjb25zaXN0cyBvZjoKKyAqIDEuU2V0IERBX0NBTElOX0ZMQUcgaGlnaCB0byBzdGFydCBjYWxpYnJhdGlvbi4gS2VlcCBpdCBoaWdoCisgKiAgIHVudGlsIEFEX0NBTF9DT01QIGlzIHJlYWR5IHRvIG91dHB1dCBjYWxpYnJhdGlvbiByZXN1bHQuCisgKiAyLldhaXQgdW50aWwgREFfQ0FMX0NMSyBpcyBhdmFpbGFibGUuCisgKiAzLkZldGNoIEFEX0NBTF9DT01QX09VVC4KKyAqLworc3RhdGljIGludCBjYWxfY3ljbGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldmFkLAorCQl1MzIgcmVnbnVtLCB1MTYgbWFzaywgdTE2IGNhbF92YWwpCit7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCWludCByZWdfdmFsOworCWludCByZXQ7CisKKwlwaHlfbW9kaWZ5X21tZChwaHlkZXYsIGRldmFkLCByZWdudW0sCisJCQltYXNrLCBjYWxfdmFsKTsKKwlwaHlfc2V0X2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREVWMUVfUkVHMTdDLAorCQkJTVRLX1BIWV9EQV9DQUxJTl9GTEFHKTsKKworCXRpbWVvdXQgPSBqaWZmaWVzICsgdXNlY3NfdG9famlmZmllcyhBTkFMT0dfSU5URVJOQUxfT1BFUkFUSU9OX01BWF9VUyk7CisJZG97CisJCXJlZ192YWwgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19ERVYxRV9SRUcxN0IpOworCX0gd2hpbGUodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkgJiYgIShyZWdfdmFsICYgQklUKDApKSk7CisKKwlpZighKHJlZ192YWwgJiBCSVQoMCkpKSB7CisJCWRldl9lcnIoJnBoeWRldi0+bWRpby5kZXYsICJDYWxpYnJhdGlvbiBjeWNsZSB0aW1lb3V0XG4iKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJcGh5X2NsZWFyX2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREVWMUVfUkVHMTdDLAorCQkJTVRLX1BIWV9EQV9DQUxJTl9GTEFHKTsKKwlyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19ERVYxRV9SRUcxN0EpID4+CisJCQlNVEtfUEhZX0FEX0NBTF9DT01QX09VVF9TSElGVDsKKwlkZXZfZGJnKCZwaHlkZXYtPm1kaW8uZGV2LCAiY2FsX3ZhbDogMHgleCwgcmV0OiAlZFxuIiwgY2FsX3ZhbCwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmV4dF9maWxsX3Jlc3VsdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgKmJ1ZikKK3sKKwlwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkc1LAorCQkJTVRLX1BIWV9SR19SRVhUX1RSSU1fTUFTSywgYnVmWzBdIDw8IDgpOworCXBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIE1US19QSFlfUkdfREVWMUZfUkVHMTE1LAorCQkJTVRLX1BIWV9SR19CR19SQVNFTF9NQVNLLCBidWZbMV0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmV4dF9jYWxfZWZ1c2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyICpidWYpCit7CisJdTE2IHJleHRfY2FsX3ZhbFsyXTsKKworCXJleHRfY2FsX3ZhbFswXSA9IEVGU19SR19SRVhUX1RSSU0oYnVmWzNdKTsKKwlyZXh0X2NhbF92YWxbMV0gPSBFRlNfUkdfQkdfUkFTRUwoYnVmWzNdKTsKKwlyZXh0X2ZpbGxfcmVzdWx0KHBoeWRldiwgcmV4dF9jYWxfdmFsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJleHRfY2FsX3N3KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCit7CisJdTggcmdfemNhbF9jdHJsX2RlZjsKKwl1OCB6Y2FsX2xvd2VyLCB6Y2FsX3VwcGVyLCByZ196Y2FsX2N0cmw7CisJdTggbG93ZXJfcmV0LCB1cHBlcl9yZXQ7CisJdTE2IHJleHRfY2FsX3ZhbFsyXTsKKwlpbnQgcmV0OworCisJcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgTVRLX1BIWV9BTkFfVEVTVF9CVVNfQ1RSTF9SRywKKwkJTVRLX1BIWV9BTkFfVEVTVF9NT0RFX01BU0ssIE1US19QSFlfVEFOQV9DQUxfTU9ERSA8PCA4KTsKKwlwaHlfY2xlYXJfYml0c19tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMSwKKwkJTVRLX1BIWV9SR19UWFZPU19DQUxFTik7CisJcGh5X3NldF9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcwLAorCQlNVEtfUEhZX1JHX0NBTF9DS0lOViB8IE1US19QSFlfUkdfQU5BX0NBTEVOIHwgTVRLX1BIWV9SR19SRVhUX0NBTEVOKTsKKwlwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLCBNVEtfUEhZX1JHX0RFVjFGX1JFRzExMCwKKwkJTVRLX1BIWV9SR19UU1RfRE1ZMl9NQVNLLCAweDEpOworCisJcmdfemNhbF9jdHJsX2RlZiA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkc1KSAmCisJCQkJCU1US19QSFlfUkdfWkNBTF9DVFJMX01BU0s7CisJemNhbF9sb3dlciA9IFpDQUxfQ1RSTF9NSU47CisJemNhbF91cHBlciA9IFpDQUxfQ1RSTF9NQVg7CisKKwlkZXZfZGJnKCZwaHlkZXYtPm1kaW8uZGV2LCAiU3RhcnQgUkVYVCBTVyBjYWwuXG4iKTsKKwl3aGlsZSgoemNhbF91cHBlci16Y2FsX2xvd2VyKSA+IDEpIHsKKwkJcmdfemNhbF9jdHJsID0gRElWX1JPVU5EX0NMT1NFU1QoemNhbF9sb3dlcit6Y2FsX3VwcGVyLCAyKTsKKwkJcmV0ID0gY2FsX2N5Y2xlKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzUsCisJCQkJTVRLX1BIWV9SR19aQ0FMX0NUUkxfTUFTSywgcmdfemNhbF9jdHJsKTsKKwkJaWYocmV0ID09IDEpIHsKKwkJCXpjYWxfdXBwZXIgPSByZ196Y2FsX2N0cmw7CisJCQl1cHBlcl9yZXQgPSByZXQ7CisJCX0gZWxzZSBpZihyZXQgPT0gMCkgeworCQkJemNhbF9sb3dlciA9IHJnX3pjYWxfY3RybDsKKwkJCWxvd2VyX3JldCA9IHJldDsKKwkJfSBlbHNlCisJCQlnb3RvIHJlc3RvcmU7CisJfQorCisJaWYoemNhbF9sb3dlciA9PSBaQ0FMX0NUUkxfTUlOKSB7CisJCXJldCA9IGxvd2VyX3JldCA9IGNhbF9jeWNsZShwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkc1LAorCQkJCU1US19QSFlfUkdfWkNBTF9DVFJMX01BU0ssIHpjYWxfbG93ZXIpOworCX0gZWxzZSBpZih6Y2FsX3VwcGVyID09IFpDQUxfQ1RSTF9NQVgpIHsKKwkJcmV0ID0gdXBwZXJfcmV0ID0gY2FsX2N5Y2xlKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzUsCisJCQkJTVRLX1BIWV9SR19aQ0FMX0NUUkxfTUFTSywgemNhbF91cHBlcik7CisJfQorCWlmIChyZXQgPCAwKQorCQlnb3RvIHJlc3RvcmU7CisKKwlyZXQgPSB1cHBlcl9yZXQtbG93ZXJfcmV0OworCWlmIChyZXQgPT0gMSkgeworCQlyZXh0X2NhbF92YWxbMF0gPSB6Y2FsX3VwcGVyOworCQlyZXh0X2NhbF92YWxbMV0gPSB6Y2FsX3VwcGVyID4+IDM7CisJCXJleHRfZmlsbF9yZXN1bHQocGh5ZGV2LCByZXh0X2NhbF92YWwpOworCQlkZXZfaW5mbygmcGh5ZGV2LT5tZGlvLmRldiwgIlJFWFQgU1cgY2FsIHJlc3VsdDogMHgleFxuIiwgemNhbF91cHBlcik7CisJCXJldCA9IDA7CisJfSBlbHNlCisJCXJldCA9IC1FSU5WQUw7CisKK3Jlc3RvcmU6CisJcGh5X2NsZWFyX2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIE1US19QSFlfQU5BX1RFU1RfQlVTX0NUUkxfUkcsCisJCQkgICBNVEtfUEhZX0FOQV9URVNUX01PREVfTUFTSyk7CisJcGh5X2NsZWFyX2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzAsCisJCQkgICBNVEtfUEhZX1JHX0NBTF9DS0lOViB8IE1US19QSFlfUkdfQU5BX0NBTEVOIHwgTVRLX1BIWV9SR19SRVhUX0NBTEVOKTsKKwlwaHlfY2xlYXJfYml0c19tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgTVRLX1BIWV9SR19ERVYxRl9SRUcxMTAsCisJCQkgICBNVEtfUEhZX1JHX1RTVF9ETVkyX01BU0spOworCXBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzUsCisJCSAgICAgICBNVEtfUEhZX1JHX1pDQUxfQ1RSTF9NQVNLLCByZ196Y2FsX2N0cmxfZGVmKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdHhfb2Zmc2V0X2ZpbGxfcmVzdWx0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiAqYnVmKQoreworCXBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREVWMUVfUkVHMTcyLAorCQkgICAgICAgTVRLX1BIWV9DUl9UWF9BTVBfT0ZGU0VUX0FfTUFTSywgYnVmWzBdIDw8IDgpOworCXBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREVWMUVfUkVHMTcyLAorCQkgICAgICAgTVRLX1BIWV9DUl9UWF9BTVBfT0ZGU0VUX0JfTUFTSywgYnVmWzFdKTsKKwlwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RFVjFFX1JFRzE3MywKKwkJICAgICAgIE1US19QSFlfQ1JfVFhfQU1QX09GRlNFVF9DX01BU0ssIGJ1ZlsyXSA8PCA4KTsKKwlwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RFVjFFX1JFRzE3MywKKwkJICAgICAgIE1US19QSFlfQ1JfVFhfQU1QX09GRlNFVF9EX01BU0ssIGJ1ZlszXSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0eF9vZmZzZXRfY2FsX2VmdXNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiAqYnVmKQoreworCXUxNiB0eF9vZmZzZXRfY2FsX3ZhbFs0XTsKKworCXR4X29mZnNldF9jYWxfdmFsWzBdID0gRUZTX0RBX1RYX0FNUF9PRkZTRVRfQShidWZbMF0pOworCXR4X29mZnNldF9jYWxfdmFsWzFdID0gRUZTX0RBX1RYX0FNUF9PRkZTRVRfQihidWZbMV0pOworCXR4X29mZnNldF9jYWxfdmFsWzJdID0gRUZTX0RBX1RYX0FNUF9PRkZTRVRfQyhidWZbMV0pOworCXR4X29mZnNldF9jYWxfdmFsWzNdID0gRUZTX0RBX1RYX0FNUF9PRkZTRVRfRChidWZbMV0pOworCisJdHhfb2Zmc2V0X2ZpbGxfcmVzdWx0KHBoeWRldiwgdHhfb2Zmc2V0X2NhbF92YWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHhfYW1wX2ZpbGxfcmVzdWx0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiAqYnVmKQoreworCS8qIFdlIGFkZCBzb21lIGNhbGlicmF0aW9uIHRvIGVmdXNlIHZhbHVlczoKKwkgKiBHQkU6ICs3LCBUQlQ6ICsxLCBIQlQ6ICs0LCBUU1Q6ICs3CisJICovCisJcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9UWFZMRF9EQV9SRywKKwkJICAgICAgIE1US19QSFlfREFfVFhfSTJNUEJfQV9HQkVfTUFTSywgKGJ1ZlswXSArIDcpIDw8IDEwKTsKKwlwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1RYVkxEX0RBX1JHLAorCQkgICAgICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9BX1RCVF9NQVNLLCBidWZbMF0gKyAxKTsKKwlwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9BMiwKKwkJICAgICAgIE1US19QSFlfREFfVFhfSTJNUEJfQV9IQlRfTUFTSywgKGJ1ZlswXSArIDQpIDw8IDEwKTsKKwlwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9BMiwKKwkJICAgICAgIE1US19QSFlfREFfVFhfSTJNUEJfQV9UU1RfTUFTSywgYnVmWzBdICsgNyk7CisKKwlwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9CMSwKKwkJICAgICAgIE1US19QSFlfREFfVFhfSTJNUEJfQl9HQkVfTUFTSywgKGJ1ZlsxXSArIDcpIDw8IDgpOworCXBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfVFhfSTJNUEJfVEVTVF9NT0RFX0IxLAorCQkgICAgICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9CX1RCVF9NQVNLLCBidWZbMV0gKyAxKTsKKwlwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9CMiwKKwkJICAgICAgIE1US19QSFlfREFfVFhfSTJNUEJfQl9IQlRfTUFTSywgKGJ1ZlsxXSArIDQgKSA8PCA4KTsKKwlwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9CMiwKKwkJICAgICAgIE1US19QSFlfREFfVFhfSTJNUEJfQl9UU1RfTUFTSywgYnVmWzFdICsgNyk7CisKKwlwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9DMSwKKwkJICAgICAgIE1US19QSFlfREFfVFhfSTJNUEJfQ19HQkVfTUFTSywgKGJ1ZlsyXSArIDcpIDw8IDgpOworCXBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfVFhfSTJNUEJfVEVTVF9NT0RFX0MxLAorCQkgICAgICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9DX1RCVF9NQVNLLCBidWZbMl0gKyAxKTsKKwlwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9DMiwKKwkJICAgICAgIE1US19QSFlfREFfVFhfSTJNUEJfQ19IQlRfTUFTSywgKGJ1ZlsyXSArIDQpIDw8IDgpOworCXBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfVFhfSTJNUEJfVEVTVF9NT0RFX0MyLAorCQkgICAgICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9DX1RTVF9NQVNLLCBidWZbMl0gKyA3KTsKKworCXBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfVFhfSTJNUEJfVEVTVF9NT0RFX0QxLAorCQkgICAgICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9EX0dCRV9NQVNLLCAoYnVmWzNdICsgNykgPDwgOCk7CisJcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfRDEsCisJCSAgICAgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0RfVEJUX01BU0ssIGJ1ZlszXSArIDEpOworCXBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfVFhfSTJNUEJfVEVTVF9NT0RFX0QyLAorCQkgICAgICAgTVRLX1BIWV9EQV9UWF9JMk1QQl9EX0hCVF9NQVNLLCAoYnVmWzNdICsgNCkgPDwgOCk7CisJcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfRDIsCisJCSAgICAgICBNVEtfUEhZX0RBX1RYX0kyTVBCX0RfVFNUX01BU0ssIGJ1ZlszXSArIDcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHhfYW1wX2NhbF9lZnVzZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgKmJ1ZikKK3sKKwl1MTYgdHhfYW1wX2NhbF92YWxbNF07CisKKwl0eF9hbXBfY2FsX3ZhbFswXSA9IEVGU19EQV9UWF9JMk1QQl9BKGJ1ZlswXSk7CisJdHhfYW1wX2NhbF92YWxbMV0gPSBFRlNfREFfVFhfSTJNUEJfQihidWZbMF0pOworCXR4X2FtcF9jYWxfdmFsWzJdID0gRUZTX0RBX1RYX0kyTVBCX0MoYnVmWzBdKTsKKwl0eF9hbXBfY2FsX3ZhbFszXSA9IEVGU19EQV9UWF9JMk1QQl9EKGJ1ZlswXSk7CisJdHhfYW1wX2ZpbGxfcmVzdWx0KHBoeWRldiwgdHhfYW1wX2NhbF92YWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHhfcjUwX2ZpbGxfcmVzdWx0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiAqYnVmLAorCQkJICAgICAgcGh5X2NhbF9wYWlyX3QgdHhnX2NhbGVuX3gpCit7CisJc3dpdGNoKHR4Z19jYWxlbl94KSB7CisJCWNhc2UgUEFJUl9BOgorCQkJcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19ERVYxRV9SRUc1M0QsCisJCQkJICAgICAgIE1US19QSFlfREFfVFhfUjUwX0FfTk9STUFMX01BU0ssIGJ1ZlswXSA8PCA4KTsKKwkJCXBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREVWMUVfUkVHNTNELAorCQkJCSAgICAgICBNVEtfUEhZX0RBX1RYX1I1MF9BX1RCVF9NQVNLLCBidWZbMF0pOworCQkJYnJlYWs7CisJCWNhc2UgUEFJUl9COgorCQkJcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19ERVYxRV9SRUc1M0UsCisJCQkJICAgICAgIE1US19QSFlfREFfVFhfUjUwX0JfTk9STUFMX01BU0ssIGJ1ZlswXSA8PCA4KTsKKwkJCXBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREVWMUVfUkVHNTNFLAorCQkJCSAgICAgICBNVEtfUEhZX0RBX1RYX1I1MF9CX1RCVF9NQVNLLCBidWZbMF0pOworCQkJYnJlYWs7CisJCWNhc2UgUEFJUl9DOgorCQkJcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19ERVYxRV9SRUc1M0YsCisJCQkJICAgICAgIE1US19QSFlfREFfVFhfUjUwX0NfTk9STUFMX01BU0ssIGJ1ZlswXSA8PCA4KTsKKwkJCXBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREVWMUVfUkVHNTNGLAorCQkJCSAgICAgICBNVEtfUEhZX0RBX1RYX1I1MF9DX1RCVF9NQVNLLCBidWZbMF0pOworCQkJYnJlYWs7CisJCWNhc2UgUEFJUl9EOgorCQkJcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19ERVYxRV9SRUc1NDAsCisJCQkJICAgICAgIE1US19QSFlfREFfVFhfUjUwX0RfTk9STUFMX01BU0ssIGJ1ZlswXSA8PCA4KTsKKwkJCXBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREVWMUVfUkVHNTQwLAorCQkJCSAgICAgICBNVEtfUEhZX0RBX1RYX1I1MF9EX1RCVF9NQVNLLCBidWZbMF0pOworCQkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHR4X3I1MF9jYWxfZWZ1c2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyICpidWYsCisJCQkgICAgcGh5X2NhbF9wYWlyX3QgdHhnX2NhbGVuX3gpCit7CisJdTE2IHR4X3I1MF9jYWxfdmFsWzFdOworCisJc3dpdGNoKHR4Z19jYWxlbl94KSB7CisJCWNhc2UgUEFJUl9BOgorCQkJdHhfcjUwX2NhbF92YWxbMF0gPSBFRlNfREFfVFhfUjUwX0EoYnVmWzFdKTsKKwkJCWJyZWFrOworCQljYXNlIFBBSVJfQjoKKwkJCXR4X3I1MF9jYWxfdmFsWzBdID0gRUZTX0RBX1RYX1I1MF9CKGJ1ZlsxXSk7CisJCQlicmVhazsKKwkJY2FzZSBQQUlSX0M6CisJCQl0eF9yNTBfY2FsX3ZhbFswXSA9IEVGU19EQV9UWF9SNTBfQyhidWZbMl0pOworCQkJYnJlYWs7CisJCWNhc2UgUEFJUl9EOgorCQkJdHhfcjUwX2NhbF92YWxbMF0gPSBFRlNfREFfVFhfUjUwX0QoYnVmWzJdKTsKKwkJCWJyZWFrOworCX0KKwl0eF9yNTBfZmlsbF9yZXN1bHQocGh5ZGV2LCB0eF9yNTBfY2FsX3ZhbCwgdHhnX2NhbGVuX3gpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHhfcjUwX2NhbF9zdyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBwaHlfY2FsX3BhaXJfdCB0eGdfY2FsZW5feCkKK3sKKwl1OCByZ196Y2FsX2N0cmxfZGVmOworCXU4IHpjYWxfbG93ZXIsIHpjYWxfdXBwZXIsIHJnX3pjYWxfY3RybDsKKwl1OCBsb3dlcl9yZXQsIHVwcGVyX3JldDsKKwl1MTYgdHhfcjUwX2NhbF92YWxbMV07CisJaW50IHJldDsKKworCXBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIE1US19QSFlfQU5BX1RFU1RfQlVTX0NUUkxfUkcsCisJCU1US19QSFlfQU5BX1RFU1RfTU9ERV9NQVNLLCBNVEtfUEhZX1RBTkFfQ0FMX01PREUgPDwgOCk7CisJcGh5X2NsZWFyX2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzEsCisJCU1US19QSFlfUkdfVFhWT1NfQ0FMRU4pOworCXBoeV9zZXRfYml0c19tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMCwKKwkJTVRLX1BIWV9SR19DQUxfQ0tJTlYgfCBNVEtfUEhZX1JHX0FOQV9DQUxFTik7CisJcGh5X3NldF9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcyLAorCQlCSVQodHhnX2NhbGVuX3ggKiA0KSk7CisJcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgTVRLX1BIWV9SR19ERVYxRl9SRUcxMTAsCisJCU1US19QSFlfUkdfVFNUX0RNWTJfTUFTSywgMHgxKTsKKworCXJnX3pjYWxfY3RybF9kZWYgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHNSkgJgorCQkJCU1US19QSFlfUkdfWkNBTF9DVFJMX01BU0s7CisJemNhbF9sb3dlciA9IFpDQUxfQ1RSTF9NSU47CisJemNhbF91cHBlciA9IFpDQUxfQ1RSTF9NQVg7CisKKwlkZXZfZGJnKCZwaHlkZXYtPm1kaW8uZGV2LCAiU3RhcnQgVFgtUjUwIFBhaXIlYyBTVyBjYWwuXG4iLCBwYWlyW3R4Z19jYWxlbl94XSk7CisJd2hpbGUoKHpjYWxfdXBwZXItemNhbF9sb3dlcikgPiAxKSB7CisJCXJnX3pjYWxfY3RybCA9IERJVl9ST1VORF9DTE9TRVNUKHpjYWxfbG93ZXIremNhbF91cHBlciwgMik7CisJCXJldCA9IGNhbF9jeWNsZShwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkc1LAorCQkJCU1US19QSFlfUkdfWkNBTF9DVFJMX01BU0ssIHJnX3pjYWxfY3RybCk7CisJCWlmKHJldD09MSkgeworCQkJemNhbF91cHBlciA9IHJnX3pjYWxfY3RybDsKKwkJCXVwcGVyX3JldCA9IHJldDsKKwkJfSBlbHNlIGlmKHJldD09MCkgeworCQkJemNhbF9sb3dlciA9IHJnX3pjYWxfY3RybDsKKwkJCWxvd2VyX3JldCA9IHJldDsKKwkJfSBlbHNlCisJCQlnb3RvIHJlc3RvcmU7CisJfQorCisJaWYoemNhbF9sb3dlciA9PSBaQ0FMX0NUUkxfTUlOKSB7CisJCXJldCA9IGxvd2VyX3JldCA9IGNhbF9jeWNsZShwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkc1LAorCQkJCU1US19QSFlfUkdfWkNBTF9DVFJMX01BU0ssIHpjYWxfbG93ZXIpOworCX0gZWxzZSBpZih6Y2FsX3VwcGVyID09IFpDQUxfQ1RSTF9NQVgpIHsKKwkJcmV0ID0gdXBwZXJfcmV0ID0gY2FsX2N5Y2xlKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzUsCisJCQkJTVRLX1BIWV9SR19aQ0FMX0NUUkxfTUFTSywgemNhbF91cHBlcik7CisJfQorCWlmIChyZXQgPCAwKQorCQlnb3RvIHJlc3RvcmU7CisKKwlyZXQgPSB1cHBlcl9yZXQtbG93ZXJfcmV0OworCWlmIChyZXQgPT0gMSkgeworCQl0eF9yNTBfY2FsX3ZhbFswXSA9IG10Nzk4eF96Y2FsX3RvX3I1MFt6Y2FsX3VwcGVyXTsKKwkJdHhfcjUwX2ZpbGxfcmVzdWx0KHBoeWRldiwgdHhfcjUwX2NhbF92YWwsIHR4Z19jYWxlbl94KTsKKwkJZGV2X2luZm8oJnBoeWRldi0+bWRpby5kZXYsICJUWC1SNTAgUGFpciVjIFNXIGNhbCByZXN1bHQ6IDB4JXhcbiIsCisJCQlwYWlyW3R4Z19jYWxlbl94XSwgemNhbF9sb3dlcik7CisJCXJldCA9IDA7CisJfSBlbHNlCisJCXJldCA9IC1FSU5WQUw7CisKK3Jlc3RvcmU6CisJcGh5X2NsZWFyX2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIE1US19QSFlfQU5BX1RFU1RfQlVTX0NUUkxfUkcsCisJCU1US19QSFlfQU5BX1RFU1RfTU9ERV9NQVNLKTsKKwlwaHlfY2xlYXJfYml0c19tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMCwKKwkJTVRLX1BIWV9SR19DQUxfQ0tJTlYgfCBNVEtfUEhZX1JHX0FOQV9DQUxFTik7CisJcGh5X2NsZWFyX2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzIsCisJCUJJVCh0eGdfY2FsZW5feCAqIDQpKTsKKwlwaHlfY2xlYXJfYml0c19tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgTVRLX1BIWV9SR19ERVYxRl9SRUcxMTAsCisJCU1US19QSFlfUkdfVFNUX0RNWTJfTUFTSyk7CisJcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHNSwKKwkJTVRLX1BIWV9SR19aQ0FMX0NUUkxfTUFTSywgcmdfemNhbF9jdHJsX2RlZik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHR4X3ZjbV9jYWxfc3coc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgcGh5X2NhbF9wYWlyX3QgcmdfdHhyZXNlcnZlX3gpCit7CisJdTggbG93ZXJfaWR4LCB1cHBlcl9pZHgsIHR4cmVzZXJ2ZV92YWw7CisJdTggbG93ZXJfcmV0LCB1cHBlcl9yZXQ7CisJaW50IHJldDsKKworCXBoeV9zZXRfYml0c19tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMCwKKwkJTVRLX1BIWV9SR19BTkFfQ0FMRU4pOworCXBoeV9jbGVhcl9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcwLAorCQlNVEtfUEhZX1JHX0NBTF9DS0lOVik7CisJcGh5X3NldF9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcxLAorCQlNVEtfUEhZX1JHX1RYVk9TX0NBTEVOKTsKKworCXN3aXRjaChyZ190eHJlc2VydmVfeCkgeworCQljYXNlIFBBSVJfQToKKwkJCXBoeV9jbGVhcl9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RFVjFFX1JFRzE3RCwKKwkJCQlNVEtfUEhZX0RBU05fREFDX0lOMF9BX01BU0spOworCQkJcGh5X2NsZWFyX2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREVWMUVfUkVHMTgxLAorCQkJCU1US19QSFlfREFTTl9EQUNfSU4xX0FfTUFTSyk7CisJCQlwaHlfc2V0X2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzAsCisJCQkJTVRLX1BIWV9SR19aQ0FMRU5fQSk7CisJCQlicmVhazsKKwkJY2FzZSBQQUlSX0I6CisJCQlwaHlfY2xlYXJfYml0c19tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19ERVYxRV9SRUcxN0UsCisJCQkJTVRLX1BIWV9EQVNOX0RBQ19JTjBfQl9NQVNLKTsKKwkJCXBoeV9jbGVhcl9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RFVjFFX1JFRzE4MiwKKwkJCQlNVEtfUEhZX0RBU05fREFDX0lOMV9CX01BU0spOworCQkJcGh5X3NldF9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcxLAorCQkJCU1US19QSFlfUkdfWkNBTEVOX0IpOworCQkJYnJlYWs7CisJCWNhc2UgUEFJUl9DOgorCQkJcGh5X2NsZWFyX2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREVWMUVfUkVHMTdGLAorCQkJCU1US19QSFlfREFTTl9EQUNfSU4wX0NfTUFTSyk7CisJCQlwaHlfY2xlYXJfYml0c19tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19ERVYxRV9SRUcxODMsCisJCQkJTVRLX1BIWV9EQVNOX0RBQ19JTjFfQ19NQVNLKTsKKwkJCXBoeV9zZXRfYml0c19tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMSwKKwkJCQlNVEtfUEhZX1JHX1pDQUxFTl9DKTsKKwkJCWJyZWFrOworCQljYXNlIFBBSVJfRDoKKwkJCXBoeV9jbGVhcl9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0RFVjFFX1JFRzE4MCwKKwkJCQlNVEtfUEhZX0RBU05fREFDX0lOMF9EX01BU0spOworCQkJcGh5X2NsZWFyX2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfREVWMUVfUkVHMTg0LAorCQkJCU1US19QSFlfREFTTl9EQUNfSU4xX0RfTUFTSyk7CisJCQlwaHlfc2V0X2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzEsCisJCQkJTVRLX1BIWV9SR19aQ0FMRU5fRCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIHJlc3RvcmU7CisJfQorCisJbG93ZXJfaWR4ID0gVFhSRVNFUlZFX01JTjsKKwl1cHBlcl9pZHggPSBUWFJFU0VSVkVfTUFYOworCisJZGV2X2RiZygmcGh5ZGV2LT5tZGlvLmRldiwgIlN0YXJ0IFRYLVZDTSBTVyBjYWwuXG4iKTsKKwl3aGlsZSgodXBwZXJfaWR4LWxvd2VyX2lkeCkgPiAxKSB7CisJCXR4cmVzZXJ2ZV92YWwgPSBESVZfUk9VTkRfQ0xPU0VTVChsb3dlcl9pZHgrdXBwZXJfaWR4LCAyKTsKKwkJcmV0ID0gY2FsX2N5Y2xlKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUlhBRENfQ1RSTF9SRzksCisJCQkJTVRLX1BIWV9EQV9SWF9QU0JOX1RCVF9NQVNLIHwgTVRLX1BIWV9EQV9SWF9QU0JOX0hCVF9NQVNLIHwKKwkJCQlNVEtfUEhZX0RBX1JYX1BTQk5fR0JFX01BU0sgfCBNVEtfUEhZX0RBX1JYX1BTQk5fTFBfTUFTSywKKwkJCQl0eHJlc2VydmVfdmFsIDw8IDEyIHwgdHhyZXNlcnZlX3ZhbCA8PCA4IHwKKwkJCQl0eHJlc2VydmVfdmFsIDw8IDQgfCB0eHJlc2VydmVfdmFsKTsKKwkJaWYocmV0PT0xKSB7CisJCQl1cHBlcl9pZHggPSB0eHJlc2VydmVfdmFsOworCQkJdXBwZXJfcmV0ID0gcmV0OworCQl9IGVsc2UgaWYocmV0PT0wKSB7CisJCQlsb3dlcl9pZHggPSB0eHJlc2VydmVfdmFsOworCQkJbG93ZXJfcmV0ID0gcmV0OworCQl9IGVsc2UKKwkJCWdvdG8gcmVzdG9yZTsKKwl9CisKKwlpZihsb3dlcl9pZHggPT0gVFhSRVNFUlZFX01JTikgeworCQlyZXQgPSBsb3dlcl9yZXQgPSBjYWxfY3ljbGUocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SWEFEQ19DVFJMX1JHOSwKKwkJCQlNVEtfUEhZX0RBX1JYX1BTQk5fVEJUX01BU0sgfCBNVEtfUEhZX0RBX1JYX1BTQk5fSEJUX01BU0sgfAorCQkJCU1US19QSFlfREFfUlhfUFNCTl9HQkVfTUFTSyB8IE1US19QSFlfREFfUlhfUFNCTl9MUF9NQVNLLAorCQkJCWxvd2VyX2lkeCA8PCAxMiB8IGxvd2VyX2lkeCA8PCA4IHwgbG93ZXJfaWR4IDw8IDQgfCBsb3dlcl9pZHgpOworCX0gZWxzZSBpZih1cHBlcl9pZHggPT0gVFhSRVNFUlZFX01BWCkgeworCQlyZXQgPSB1cHBlcl9yZXQgPSBjYWxfY3ljbGUocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SWEFEQ19DVFJMX1JHOSwKKwkJCQlNVEtfUEhZX0RBX1JYX1BTQk5fVEJUX01BU0sgfCBNVEtfUEhZX0RBX1JYX1BTQk5fSEJUX01BU0sgfAorCQkJCU1US19QSFlfREFfUlhfUFNCTl9HQkVfTUFTSyB8IE1US19QSFlfREFfUlhfUFNCTl9MUF9NQVNLLAorCQkJCXVwcGVyX2lkeCA8PCAxMiB8IHVwcGVyX2lkeCA8PCA4IHwgdXBwZXJfaWR4IDw8IDQgfCB1cHBlcl9pZHgpOworCX0KKwlpZiAocmV0IDwgMCkKKwkJZ290byByZXN0b3JlOworCisJLyogV2UgY2FsaWJyYXRlIFRYLVZDTSBpbiBkaWZmZXJlbnQgbG9naWMuIENoZWNrIHVwcGVyIGluZGV4IGFuZCB0aGVuCisJICogbG93ZXIgaW5kZXguIElmIHRoaXMgY2FsaWJyYXRpb24gaXMgdmFsaWQsIGFwcGx5IGxvd2VyIGluZGV4J3MgcmVzdWx0LgorCSAqLworCXJldCA9IHVwcGVyX3JldC1sb3dlcl9yZXQ7CisJaWYgKHJldCA9PSAxKSB7CisJCXJldCA9IDA7CisJCWRldl9pbmZvKCZwaHlkZXYtPm1kaW8uZGV2LCAiVFgtVkNNIFNXIGNhbCByZXN1bHQ6IDB4JXhcbiIsIHVwcGVyX2lkeCk7CisJfSBlbHNlIGlmIChsb3dlcl9pZHggPT0gVFhSRVNFUlZFX01JTiAmJiB1cHBlcl9yZXQgPT0gMSAmJiBsb3dlcl9yZXQgPT0gMSkgeworCQlyZXQgPSAwOworCQljYWxfY3ljbGUocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SWEFEQ19DVFJMX1JHOSwKKwkJCU1US19QSFlfREFfUlhfUFNCTl9UQlRfTUFTSyB8IE1US19QSFlfREFfUlhfUFNCTl9IQlRfTUFTSyB8CisJCQlNVEtfUEhZX0RBX1JYX1BTQk5fR0JFX01BU0sgfCBNVEtfUEhZX0RBX1JYX1BTQk5fTFBfTUFTSywKKwkJCWxvd2VyX2lkeCA8PCAxMiB8IGxvd2VyX2lkeCA8PCA4IHwgbG93ZXJfaWR4IDw8IDQgfCBsb3dlcl9pZHgpOworCQlkZXZfd2FybigmcGh5ZGV2LT5tZGlvLmRldiwgIlRYLVZDTSBTVyBjYWwgcmVzdWx0IGF0IGxvdyBtYXJnaW4gMHgleFxuIiwgbG93ZXJfaWR4KTsKKwl9IGVsc2UgaWYgKHVwcGVyX2lkeCA9PSBUWFJFU0VSVkVfTUFYICYmIHVwcGVyX3JldCA9PSAwICYmIGxvd2VyX3JldCA9PSAwKSB7CisJCXJldCA9IDA7CisJCWRldl93YXJuKCZwaHlkZXYtPm1kaW8uZGV2LCAiVFgtVkNNIFNXIGNhbCByZXN1bHQgYXQgaGlnaCBtYXJnaW4gMHgleFxuIiwgdXBwZXJfaWR4KTsKKwl9IGVsc2UKKwkJcmV0ID0gLUVJTlZBTDsKKworcmVzdG9yZToKKwlwaHlfY2xlYXJfYml0c19tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMCwKKwkJTVRLX1BIWV9SR19BTkFfQ0FMRU4pOworCXBoeV9jbGVhcl9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1JHX0FOQV9DQUxfUkcxLAorCQlNVEtfUEhZX1JHX1RYVk9TX0NBTEVOKTsKKwlwaHlfY2xlYXJfYml0c19tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9SR19BTkFfQ0FMX1JHMCwKKwkJTVRLX1BIWV9SR19aQ0FMRU5fQSk7CisJcGh5X2NsZWFyX2JpdHNfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfUkdfQU5BX0NBTF9SRzEsCisJCU1US19QSFlfUkdfWkNBTEVOX0IgfCBNVEtfUEhZX1JHX1pDQUxFTl9DIHwgTVRLX1BIWV9SR19aQ0FMRU5fRCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtdGtfZ2VwaHlfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKK3sKKwkvKiBEaXNhYmxlIEVFRSAqLworCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9FRUVfQURWLCAwKTsKKworCS8qIEVuYWJsZSBIVyBhdXRvIGRvd25zaGlmdCAqLworCXBoeV9tb2RpZnlfcGFnZWQocGh5ZGV2LCBNVEtfUEhZX1BBR0VfRVhURU5ERUQsIDB4MTQsIDAsIEJJVCg0KSk7CisKKwkvKiBJbmNyZWFzZSBTbHZEUFNyZWFkeSB0aW1lICovCisJcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgTVRLX1BIWV9QQUdFX0VYVEVOREVEXzUyQjUpOworCV9fcGh5X3dyaXRlKHBoeWRldiwgMHgxMCwgMHhhZmFlKTsKKwlfX3BoeV93cml0ZShwaHlkZXYsIDB4MTIsIDB4MmYpOworCV9fcGh5X3dyaXRlKHBoeWRldiwgMHgxMCwgMHg4ZmFlKTsKKwlwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgTVRLX1BIWV9QQUdFX1NUQU5EQVJELCAwKTsKKworCS8qIEFkanVzdCAxMDBfbXNlX3RocmVzaG9sZCAqLworCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHgxMjMsIDB4ZmZmZik7CisKKwkvKiBEaXNhYmxlIG1jYyAqLworCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgMHhhNiwgMHgzMDApOworfQorCitzdGF0aWMgaW50IG10NzUzMF9waHlfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKK3sKKwltdGtfZ2VwaHlfY29uZmlnX2luaXQocGh5ZGV2KTsKKworCS8qIEluY3JlYXNlIHBvc3RfdXBkYXRlX3RpbWVyICovCisJcGh5X3dyaXRlX3BhZ2VkKHBoeWRldiwgTVRLX1BIWV9QQUdFX0VYVEVOREVEXzMsIDB4MTEsIDB4NGIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXQ3NTMxX3BoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQoreworCWlmIChwaHlkZXYtPmludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpCisJCXJldHVybiAtRUlOVkFMOworCisJbXRrX2dlcGh5X2NvbmZpZ19pbml0KHBoeWRldik7CisKKwkvKiBQSFkgbGluayBkb3duIHBvd2VyIHNhdmluZyBlbmFibGUgKi8KKwlwaHlfc2V0X2JpdHMocGh5ZGV2LCAweDE3LCBCSVQoNCkpOworCXBoeV9jbGVhcl9iaXRzX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCAweGM2LCAweDMwMCk7CisKKwkvKiBTZXQgVFggUGFpciBkZWxheSBzZWxlY3Rpb24gKi8KKwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MTMsIDB4NDA0KTsKKwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIDB4MTQsIDB4NDA0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbXQ3OTh4X3BoeV9maW5ldHVuZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQoreworCS8qIDEwME0gZXllIGZpbmV0dW5lOgorCSAqIEtlZXAgbWlkZGxlIGxldmVsIG9mIFRYIE1MVDMgc2hhcHBlciBhcyBkZWZhdWx0LgorCSAqIE9ubHkgY2hhbmdlIFRYIE1MVDMgb3ZlcnNob290IGxldmVsIGhlcmUuCisJICovCisJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZXzFzdF9PVkVSU0hPT1RfTEVWRUxfMFRPMSwgMHgxY2UpOworCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV8ybmRfT1ZFUlNIT09UX0xFVkVMXzBUTzEsIDB4MWMxKTsKKwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfMXN0X09WRVJTSE9PVF9MRVZFTF8xVE8wLCAweDIwZik7CisJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZXzJuZF9PVkVSU0hPT1RfTEVWRUxfMVRPMCwgMHgyMDIpOworCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV8xc3RfT1ZFUlNIT09UX0xFVkVMXzBUT04xLCAweDNkMCk7CisJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZXzJuZF9PVkVSU0hPT1RfTEVWRUxfMFRPTjEsIDB4M2MwKTsKKwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfMXN0X09WRVJTSE9PVF9MRVZFTF9OMVRPMCwgMHgxMyk7CisJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZXzJuZF9PVkVSU0hPT1RfTEVWRUxfTjFUTzAsIDB4NSk7CisjCisJLyogVFgtQU1QIGZpbmV0dW5lOgorCSAqIDEwME0gKzQsIDEwMDBNICs2IHRvIGRlZmF1bHQgdmFsdWUuCisJICogSWYgZWZ1c2UgdmFsdWVzIGFyZW4ndCB2YWxpZCwgVFgtQU1QIHVzZXMgdGhlIGJlbG93IHZhbHVlcy4KKwkgKi8KKwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfVFhWTERfREFfUkcsIDB4OTgyNCk7CisJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9BMiwgMHg5MDI2KTsKKwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfVFhfSTJNUEJfVEVTVF9NT0RFX0IxLCAweDI2MjQpOworCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfQjIsIDB4MjQyNik7CisJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9DMSwgMHgyNjI0KTsKKwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDEsIE1US19QSFlfVFhfSTJNUEJfVEVTVF9NT0RFX0MyLCAweDI0MjYpOworCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMSwgTVRLX1BIWV9UWF9JMk1QQl9URVNUX01PREVfRDEsIDB4MjYyNCk7CisJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQxLCBNVEtfUEhZX1RYX0kyTVBCX1RFU1RfTU9ERV9EMiwgMHgyNDI2KTsKK30KKworc3RhdGljIGludCBtdDc5OHhfcGh5X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCit7CisJY29uc3QgY2hhciAqY2FsX21vZGVfZnJvbV9kdHM7CisJaW50IGksIHJldCwgY2FsX3JldDsKKwl1MzIgKmJ1ZjsKKwlib29sIGVmc192YWxpZCA9IHRydWU7CisJc2l6ZV90IGxlbjsKKwlzdHJ1Y3QgbnZtZW1fY2VsbCAqY2VsbDsKKworCWlmIChwaHlkZXYtPmludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfR01JSSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdDc5OHhfcGh5X2ZpbmV0dW5lKHBoeWRldik7CisKKwljZWxsID0gbnZtZW1fY2VsbF9nZXQoJnBoeWRldi0+bWRpby5kZXYsICJwaHktY2FsLWRhdGEiKTsKKwlpZiAoSVNfRVJSKGNlbGwpKSB7CisJCWlmIChQVFJfRVJSKGNlbGwpID09IC1FUFJPQkVfREVGRVIpCisJCQlyZXR1cm4gUFRSX0VSUihjZWxsKTsKKwkJcmV0dXJuIDA7CisJfQorCisJYnVmID0gKHUzMiAqKW52bWVtX2NlbGxfcmVhZChjZWxsLCAmbGVuKTsKKwlpZiAoSVNfRVJSKGJ1ZikpCisJCXJldHVybiBQVFJfRVJSKGJ1Zik7CisJbnZtZW1fY2VsbF9wdXQoY2VsbCk7CisKKwlpZighYnVmWzBdICYmICFidWZbMV0gJiYgIWJ1ZlsyXSAmJiAhYnVmWzNdKQorCQllZnNfdmFsaWQgPSBmYWxzZTsKKworCWlmIChsZW4gPCA0ICogc2l6ZW9mKHUzMikpIHsKKwkJZGV2X2VycigmcGh5ZGV2LT5tZGlvLmRldiwgImludmFsaWQgY2FsaWJyYXRpb24gZGF0YVxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCUNBTF9GTE9XKHJleHQsIFNXX0VGVVNFLCBjYWxfbW9kZV9mcm9tX2R0cywgTk9fUEFJUiwgYnVmKQorCUNBTF9GTE9XKHR4X29mZnNldCwgRUZVU0UsIGNhbF9tb2RlX2Zyb21fZHRzLCBOT19QQUlSLCBidWYpCisJQ0FMX0ZMT1codHhfYW1wLCBFRlVTRSwgY2FsX21vZGVfZnJvbV9kdHMsIE5PX1BBSVIsIGJ1ZikKKwlDQUxfRkxPVyh0eF9yNTAsIFNXX0VGVVNFLCBjYWxfbW9kZV9mcm9tX2R0cywgUEFJUl9BX1RPX0QsIGJ1ZikKKwlDQUxfRkxPVyh0eF92Y20sIFNXLCBjYWxfbW9kZV9mcm9tX2R0cywgUEFJUl9BX1RPX0EpCisJcmV0ID0gMDsKKworb3V0OgorCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG10a19nZXBoeV9kcml2ZXJbXSA9IHsKKyNpZiAwCisJeworCQlQSFlfSURfTUFUQ0hfRVhBQ1QoMHgwM2EyOTQxMiksCisJCS5uYW1lCQk9ICJNZWRpYVRlayBNVDc1MzAgUEhZIiwKKwkJLmNvbmZpZ19pbml0CT0gbXQ3NTMwX3BoeV9jb25maWdfaW5pdCwKKwkJLyogSW50ZXJydXB0cyBhcmUgaGFuZGxlZCBieSB0aGUgc3dpdGNoLCBub3QgdGhlIFBIWQorCQkgKiBpdHNlbGYuCisJCSAqLworCQkuY29uZmlnX2ludHIJPSBnZW5waHlfbm9fY29uZmlnX2ludHIsCisJCS5oYW5kbGVfaW50ZXJydXB0ID0gZ2VucGh5X25vX2Fja19pbnRlcnJ1cHQsCisJCS5zdXNwZW5kCT0gZ2VucGh5X3N1c3BlbmQsCisJCS5yZXN1bWUJCT0gZ2VucGh5X3Jlc3VtZSwKKwkJLnJlYWRfcGFnZQk9IG10a19nZXBoeV9yZWFkX3BhZ2UsCisJCS53cml0ZV9wYWdlCT0gbXRrX2dlcGh5X3dyaXRlX3BhZ2UsCisJfSwKKwl7CisJCVBIWV9JRF9NQVRDSF9FWEFDVCgweDAzYTI5NDQxKSwKKwkJLm5hbWUJCT0gIk1lZGlhVGVrIE1UNzUzMSBQSFkiLAorCQkuY29uZmlnX2luaXQJPSBtdDc1MzFfcGh5X2NvbmZpZ19pbml0LAorCQkvKiBJbnRlcnJ1cHRzIGFyZSBoYW5kbGVkIGJ5IHRoZSBzd2l0Y2gsIG5vdCB0aGUgUEhZCisJCSAqIGl0c2VsZi4KKwkJICovCisJCS5jb25maWdfaW50cgk9IGdlbnBoeV9ub19jb25maWdfaW50ciwKKwkJLmhhbmRsZV9pbnRlcnJ1cHQgPSBnZW5waHlfbm9fYWNrX2ludGVycnVwdCwKKwkJLnN1c3BlbmQJPSBnZW5waHlfc3VzcGVuZCwKKwkJLnJlc3VtZQkJPSBnZW5waHlfcmVzdW1lLAorCQkucmVhZF9wYWdlCT0gbXRrX2dlcGh5X3JlYWRfcGFnZSwKKwkJLndyaXRlX3BhZ2UJPSBtdGtfZ2VwaHlfd3JpdGVfcGFnZSwKKwl9LAorI2VuZGlmCisJeworCQlQSFlfSURfTUFUQ0hfRVhBQ1QoMHgwM2EyOTQ2MSksCisJCS5uYW1lCQk9ICJNZWRpYVRlayBNVDc5OHggUEhZIiwKKwkJLmNvbmZpZ19pbml0CT0gbXQ3OTh4X3BoeV9jb25maWdfaW5pdCwKKwkJLyogSW50ZXJydXB0cyBhcmUgaGFuZGxlZCBieSB0aGUgc3dpdGNoLCBub3QgdGhlIFBIWQorCQkgKiBpdHNlbGYuCisJCSAqLworCQkuY29uZmlnX2ludHIJPSBnZW5waHlfbm9fY29uZmlnX2ludHIsCisJCS5oYW5kbGVfaW50ZXJydXB0ID0gZ2VucGh5X25vX2Fja19pbnRlcnJ1cHQsCisJCS5zdXNwZW5kCT0gZ2VucGh5X3N1c3BlbmQsCisJCS5yZXN1bWUJCT0gZ2VucGh5X3Jlc3VtZSwKKwkJLnJlYWRfcGFnZQk9IG10a19nZXBoeV9yZWFkX3BhZ2UsCisJCS53cml0ZV9wYWdlCT0gbXRrX2dlcGh5X3dyaXRlX3BhZ2UsCisJfSwKK307CisKK21vZHVsZV9waHlfZHJpdmVyKG10a19nZXBoeV9kcml2ZXIpOworCitzdGF0aWMgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG10a19nZXBoeV90YmxbXSA9IHsKKwl7IFBIWV9JRF9NQVRDSF9WRU5ET1IoMHgwM2EyOTQwMCkgfSwKKwl7IH0KK307CisKK01PRFVMRV9ERVNDUklQVElPTigiTWVkaWFUZWsgR2lnYWJpdCBFdGhlcm5ldCBQSFkgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJERU5HLCBRaW5nZmFuZyA8ZHFmZXh0QGdtYWlsLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBtdGtfZ2VwaHlfdGJsKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L210ay9tdDc1M3gvS2NvbmZpZyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L210ay9tdDc1M3gvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWUwMjMwCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvbXRrL210NzUzeC9LY29uZmlnCkBAIC0wLDAgKzEsMyBAQAorCitjb25maWcgTVQ3NTNYX0dTVworCXRyaXN0YXRlICJEcml2ZXIgZm9yIHRoZSBNZWRpYVRlayBNVDc1M3ggc3dpdGNoIgpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvbXRrL210NzUzeC9NYWtlZmlsZSBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L210ay9tdDc1M3gvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTMwNGZjYgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L210ay9tdDc1M3gvTWFrZWZpbGUKQEAgLTAsMCArMSwxMSBAQAorIworIyBNYWtlZmlsZSBmb3IgTWVkaWFUZWsgTVQ3NTN4IGdpZ2FiaXQgc3dpdGNoCisjCisKK29iai0kKENPTkZJR19NVDc1M1hfR1NXKQkrPSBtdDc1M3gubworCittdDc1M3gtJChDT05GSUdfU1dDT05GSUcpCSs9IG10NzUzeF9zd2NvbmZpZy5vCisKK210NzUzeC15CQkJKz0gbXQ3NTN4X21kaW8ubyBtdDc1MzAubyBtdDc1MzEubyBcCisJCQkJCW10NzUzeF9jb21tb24ubyBtdDc1M3hfdmxhbi5vIG10NzUzeF9ubC5vCisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L210ay9tdDc1M3gvbXQ3NTMwLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9tdGsvbXQ3NTN4L210NzUzMC5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc4NTNlMjcKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9tdGsvbXQ3NTN4L210NzUzMC5jCkBAIC0wLDAgKzEsNjQ0IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxOCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IFdlaWppZSBHYW8gPHdlaWppZS5nYW9AbWVkaWF0ZWsuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAibXQ3NTN4LmgiCisjaW5jbHVkZSAibXQ3NTN4X3JlZ3MuaCIKKworLyogTVQ3NTMwIHJlZ2lzdGVycyAqLworCisvKiBVbmlxdWUgZmllbGRzIG9mIFBNQ1IgZm9yIE1UNzUzMCAqLworI2RlZmluZSBGT1JDRV9NT0RFCQkJQklUKDE1KQorCisvKiBVbmlxdWUgZmllbGRzIG9mIEdNQUNDUiBmb3IgTVQ3NTMwICovCisjZGVmaW5lIFZMQU5fU1VQVF9OT19TCQkJMTQKKyNkZWZpbmUgVkxBTl9TVVBUX05PX00JCQkweDFjMDAwCisjZGVmaW5lIExBVEVfQ09MX0RST1AJCQlCSVQoMTMpCisKKy8qIFVuaXF1ZSBmaWVsZHMgb2YgKE0pSFdTVFJBUCBmb3IgTVQ3NTMwICovCisjZGVmaW5lIEJPTkRfT1BUSU9OCQkJQklUKDI0KQorI2RlZmluZSBQNV9QSFkwX1NFTAkJCUJJVCgyMCkKKyNkZWZpbmUgQ0hHX1RSQVAJCQlCSVQoMTYpCisjZGVmaW5lIExPT1BERVRfRElTCQkJQklUKDE0KQorI2RlZmluZSBQNV9JTlRGX1NFTF9HTUFDNQkJQklUKDEzKQorI2RlZmluZSBTTUlfQUREUl9TCQkJMTEKKyNkZWZpbmUgU01JX0FERFJfTQkJCTB4MTgwMAorI2RlZmluZSBYVEFMX0ZTRUxfUwkJCTkKKyNkZWZpbmUgWFRBTF9GU0VMX00JCQkweDYwMAorI2RlZmluZSBQNl9JTlRGX0RJUwkJCUJJVCg4KQorI2RlZmluZSBQNV9JTlRGX01PREVfUkdNSUkJCUJJVCg3KQorI2RlZmluZSBQNV9JTlRGX0RJU19TCQkJQklUKDYpCisjZGVmaW5lIENfTURJT19CUFNfUwkJCUJJVCg1KQorI2RlZmluZSBFRVBST01fRU5fUwkJCUJJVCg0KQorCisvKiBQSFkgRUVFIFJlZ2lzdGVyIGJpdG1hcCBvZiBkZWZpbmUgKi8KKyNkZWZpbmUgUEhZX0RFVjA3CQkJMHgwNworI2RlZmluZSBQSFlfREVWMDdfUkVHXzAzQwkJMHgzYworCisvKiBQSFkgRXh0ZW5kIFJlZ2lzdGVyIDB4MTQgYml0bWFwIG9mIGRlZmluZSAqLworI2RlZmluZSBQSFlfRVhUX1JFR18xNAkJCTB4MTQKKworLyogRmllbGRzIG9mIFBIWV9FWFRfUkVHXzE0ICovCisjZGVmaW5lIFBIWV9FTl9ET1dOX1NIRklUCQlCSVQoNCkKKworLyogUEhZIFRva2VuIFJpbmcgUmVnaXN0ZXIgMHgxMCBiaXRtYXAgb2YgZGVmaW5lICovCisjZGVmaW5lIFBIWV9UUl9SRUdfMTAJCQkweDEwCisKKy8qIFBIWSBUb2tlbiBSaW5nIFJlZ2lzdGVyIDB4MTIgYml0bWFwIG9mIGRlZmluZSAqLworI2RlZmluZSBQSFlfVFJfUkVHXzEyCQkJMHgxMgorCisvKiBQSFkgTFBJIFBDUy9EU1AgQ29udHJvbCBSZWdpc3RlciBiaXRtYXAgb2YgZGVmaW5lICovCisjZGVmaW5lIFBIWV9MUElfUkVHXzExCQkJMHgxMQorCisvKiBQSFkgREVWIDB4MWUgUmVnaXN0ZXIgYml0bWFwIG9mIGRlZmluZSAqLworI2RlZmluZSBQSFlfREVWMUUJCQkweDFlCisjZGVmaW5lIFBIWV9ERVYxRV9SRUdfMTIzCQkweDEyMworI2RlZmluZSBQSFlfREVWMUVfUkVHX0E2CQkweGE2CisKKy8qIFZhbHVlcyBvZiBYVEFMX0ZTRUwgKi8KKyNkZWZpbmUgWFRBTF8yME1IWgkJCTEKKyNkZWZpbmUgWFRBTF80ME1IWgkJCTIKKyNkZWZpbmUgWFRBTF8yNU1IWgkJCTMKKworLyogVG9wIHNpbmdsZSBjb250cm9sIENSIGRlZmluZSAqLworI2RlZmluZSBUT1BfU0lHX0NUUkwJCQkweDc4MDgKKworLyogVE9QX1NJR19DVFJMIFJlZ2lzdGVyIGJpdG1hcCBvZiBkZWZpbmUgKi8KKyNkZWZpbmUgT1VUUFVUX0lOVFJfUwkJCTE2CisjZGVmaW5lIE9VVFBVVF9JTlRSX00JCQkweDMwMDAwCisKKyNkZWZpbmUgUDZFQ1IJCQkJMHg3ODMwCisjZGVmaW5lIFA2X0lOVEZfTU9ERV9UUkdNSUkJCUJJVCgwKQorCisjZGVmaW5lIFRSR01JSV9UWENUUkwJCQkweDdhNDAKKyNkZWZpbmUgVFJBSU5fVFhFTgkJCUJJVCgzMSkKKyNkZWZpbmUgVFhDX0lOVgkJCQlCSVQoMzApCisjZGVmaW5lIFRYX0RPRU8JCQkJQklUKDI5KQorI2RlZmluZSBUWF9SU1QJCQkJQklUKDI4KQorCisjZGVmaW5lIFRSR01JSV9URDBfQ1RSTAkJCTB4N2E1MAorI2RlZmluZSBUUkdNSUlfVEQxX0NUUkwJCQkweDdhNTgKKyNkZWZpbmUgVFJHTUlJX1REMl9DVFJMCQkJMHg3YTYwCisjZGVmaW5lIFRSR01JSV9URDNfQ1RSTAkJCTB4N2E2OAorI2RlZmluZSBUUkdNSUlfVFhDVExfQ1RSTAkJMHg3YTcwCisjZGVmaW5lIFRSR01JSV9UQ0tfQ1RSTAkJCTB4N2E3OAorI2RlZmluZSBUUkdNSUlfVERfQ1RSTChuKQkJKDB4N2E1MCArIChuKSAqIDgpCisjZGVmaW5lIE5VTV9UUkdNSUlfQ1RSTAkJCTYKKyNkZWZpbmUgVFhfRE1QRURSVgkJCUJJVCgzMSkKKyNkZWZpbmUgVFhfRE1fU1IJCQlCSVQoMTUpCisjZGVmaW5lIFRYX0RNRVJPRFQJCQlCSVQoMTQpCisjZGVmaW5lIFRYX0RNT0VDVEwJCQlCSVQoMTMpCisjZGVmaW5lIFRYX1RBUF9TCQkJOAorI2RlZmluZSBUWF9UQVBfTQkJCTB4ZjAwCisjZGVmaW5lIFRYX1RSQUlOX1dEX1MJCQkwCisjZGVmaW5lIFRYX1RSQUlOX1dEX00JCQkweGZmCisKKyNkZWZpbmUgVFJHTUlJX1REMF9PRFQJCQkweDdhNTQKKyNkZWZpbmUgVFJHTUlJX1REMV9PRFQJCQkweDdhNWMKKyNkZWZpbmUgVFJHTUlJX1REMl9PRFQJCQkweDdhNjQKKyNkZWZpbmUgVFJHTUlJX1REM19PRFQJCQkweDdhNmMKKyNkZWZpbmUgVFJHTUlJX1RYQ1RMX09EVAkJMHg3NTc0CisjZGVmaW5lIFRSR01JSV9UQ0tfT0RUCQkJMHg3NTdjCisjZGVmaW5lIFRSR01JSV9URF9PRFQobikJCSgweDdhNTQgKyAobikgKiA4KQorI2RlZmluZSBOVU1fVFJHTUlJX09EVAkJCTYKKyNkZWZpbmUgVFhfRE1fRFJWTl9QUkVfUwkJMzAKKyNkZWZpbmUgVFhfRE1fRFJWTl9QUkVfTQkJMHhjMDAwMDAwMAorI2RlZmluZSBUWF9ETV9EUlZQX1BSRV9TCQkyOAorI2RlZmluZSBUWF9ETV9EUlZQX1BSRV9NCQkweDMwMDAwMDAwCisjZGVmaW5lIFRYX0RNX1REU0VMX1MJCQkyNAorI2RlZmluZSBUWF9ETV9URFNFTF9NCQkJMHhmMDAwMDAwCisjZGVmaW5lIFRYX09EVEVOCQkJQklUKDIzKQorI2RlZmluZSBUWF9ETUVfUFJFCQkJQklUKDIwKQorI2RlZmluZSBUWF9ETV9EUlZOVDAJCQlCSVQoMTkpCisjZGVmaW5lIFRYX0RNX0RSVlBUMAkJCUJJVCgxOCkKKyNkZWZpbmUgVFhfRE1fRFJWTlRFCQkJQklUKDE3KQorI2RlZmluZSBUWF9ETV9EUlZQVEUJCQlCSVQoMTYpCisjZGVmaW5lIFRYX0RNX09EVE5fUwkJCTEyCisjZGVmaW5lIFRYX0RNX09EVE5fTQkJCTB4NzAwMAorI2RlZmluZSBUWF9ETV9PRFRQX1MJCQk4CisjZGVmaW5lIFRYX0RNX09EVFBfTQkJCTB4NzAwCisjZGVmaW5lIFRYX0RNX0RSVk5fUwkJCTQKKyNkZWZpbmUgVFhfRE1fRFJWTl9NCQkJMHhmMAorI2RlZmluZSBUWF9ETV9EUlZQX1MJCQkwCisjZGVmaW5lIFRYX0RNX0RSVlBfTQkJCTB4MGYKKworI2RlZmluZSBQNVJHTUlJUlhDUgkJCTB4N2IwMAorI2RlZmluZSBDU1JfUkdNSUlfUkNUTF9DRkdfUwkJMjQKKyNkZWZpbmUgQ1NSX1JHTUlJX1JDVExfQ0ZHX00JCTB4NzAwMDAwMAorI2RlZmluZSBDU1JfUkdNSUlfUlhEX0NGR19TCQkxNgorI2RlZmluZSBDU1JfUkdNSUlfUlhEX0NGR19NCQkweDcwMDAwCisjZGVmaW5lIENTUl9SR01JSV9FREdFX0FMSUdOCQlCSVQoOCkKKyNkZWZpbmUgQ1NSX1JHTUlJX1JYQ185MERFR19DRkdfUwk0CisjZGVmaW5lIENTUl9SR01JSV9SWENfOTBERUdfQ0ZHX00JMHhmMAorI2RlZmluZSBDU1JfUkdNSUlfUlhDXzBERUdfQ0ZHX1MJMAorI2RlZmluZSBDU1JfUkdNSUlfUlhDXzBERUdfQ0ZHX00JMHgwZgorCisjZGVmaW5lIFA1UkdNSUlUWENSCQkJMHg3YjA0CisjZGVmaW5lIENTUl9SR01JSV9UWEVOX0NGR19TCQkxNgorI2RlZmluZSBDU1JfUkdNSUlfVFhFTl9DRkdfTQkJMHg3MDAwMAorI2RlZmluZSBDU1JfUkdNSUlfVFhEX0NGR19TCQk4CisjZGVmaW5lIENTUl9SR01JSV9UWERfQ0ZHX00JCTB4NzAwCisjZGVmaW5lIENTUl9SR01JSV9UWENfQ0ZHX1MJCTAKKyNkZWZpbmUgQ1NSX1JHTUlJX1RYQ19DRkdfTQkJMHgxZgorCisjZGVmaW5lIENISVBfUkVWCQkJMHg3ZmZjCisjZGVmaW5lIENISVBfTkFNRV9TCQkJMTYKKyNkZWZpbmUgQ0hJUF9OQU1FX00JCQkweGZmZmYwMDAwCisjZGVmaW5lIENISVBfUkVWX1MJCQkwCisjZGVmaW5lIENISVBfUkVWX00JCQkweDBmCisKKy8qIE1NRCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQ09SRV9QTExfR1JPVVAyCQkJMHg0MDEKKyNkZWZpbmUgUkdfU1lTUExMX0VOX05PUk1BTAkJQklUKDE1KQorI2RlZmluZSBSR19TWVNQTExfVk9ERU4JCQlCSVQoMTQpCisjZGVmaW5lIFJHX1NZU1BMTF9QT1NESVZfUwkJNQorI2RlZmluZSBSR19TWVNQTExfUE9TRElWX00JCTB4NjAKKworI2RlZmluZSBDT1JFX1BMTF9HUk9VUDQJCQkweDQwMworI2RlZmluZSBSR19TWVNQTExfRERTRkJLX0VOCQlCSVQoMTIpCisjZGVmaW5lIFJHX1NZU1BMTF9CSUFTX0VOCQlCSVQoMTEpCisjZGVmaW5lIFJHX1NZU1BMTF9CSUFTX0xQRl9FTgkJQklUKDEwKQorCisjZGVmaW5lIENPUkVfUExMX0dST1VQNQkJCTB4NDA0CisjZGVmaW5lIFJHX0xDRERTX1BDV19OQ1BPMV9TCQkwCisjZGVmaW5lIFJHX0xDRERTX1BDV19OQ1BPMV9NCQkweGZmZmYKKworI2RlZmluZSBDT1JFX1BMTF9HUk9VUDYJCQkweDQwNQorI2RlZmluZSBSR19MQ0REU19QQ1dfTkNQTzBfUwkJMAorI2RlZmluZSBSR19MQ0REU19QQ1dfTkNQTzBfTQkJMHhmZmZmCisKKyNkZWZpbmUgQ09SRV9QTExfR1JPVVA3CQkJMHg0MDYKKyNkZWZpbmUgUkdfTENERFNfUFdEQgkJCUJJVCgxNSkKKyNkZWZpbmUgUkdfTENERFNfSVNPX0VOCQkJQklUKDEzKQorI2RlZmluZSBSR19MQ0NEU19DX1MJCQk0CisjZGVmaW5lIFJHX0xDQ0RTX0NfTQkJCTB4NzAKKyNkZWZpbmUgUkdfTENERFNfUENXX05DUE9fQ0hHCQlCSVQoMykKKworI2RlZmluZSBDT1JFX1BMTF9HUk9VUDEwCQkweDQwOQorI2RlZmluZSBSR19MQ0REU19TU0NfREVMVEFfUwkJMAorI2RlZmluZSBSR19MQ0REU19TU0NfREVMVEFfTQkJMHhmZmYKKworI2RlZmluZSBDT1JFX1BMTF9HUk9VUDExCQkweDQwYQorI2RlZmluZSBSR19MQ0REU19TU0NfREVMVEExX1MJCTAKKyNkZWZpbmUgUkdfTENERFNfU1NDX0RFTFRBMV9NCQkweGZmZgorCisjZGVmaW5lIENPUkVfR1NXUExMX0dDUl8xCQkweDA0MGQKKyNkZWZpbmUgR1NXUExMX1BSRURJVl9TCQkJMTQKKyNkZWZpbmUgR1NXUExMX1BSRURJVl9NCQkJMHhjMDAwCisjZGVmaW5lIEdTV1BMTF9QT1NURElWXzIwME1fUwkJMTIKKyNkZWZpbmUgR1NXUExMX1BPU1RESVZfMjAwTV9NCQkweDMwMDAKKyNkZWZpbmUgR1NXUExMX0VOX1BSRQkJCUJJVCgxMSkKKyNkZWZpbmUgR1NXUExMX0ZCS1NFTAkJCUJJVCgxMCkKKyNkZWZpbmUgR1NXUExMX0JQCQkJQklUKDkpCisjZGVmaW5lIEdTV1BMTF9CUgkJCUJJVCg4KQorI2RlZmluZSBHU1dQTExfRkJLRElWXzIwME1fUwkJMAorI2RlZmluZSBHU1dQTExfRkJLRElWXzIwME1fTQkJMHhmZgorCisjZGVmaW5lIENPUkVfR1NXUExMX0dDUl8yCQkweDA0MGUKKyNkZWZpbmUgR1NXUExMX1BPU1RESVZfNTAwTV9TCQk4CisjZGVmaW5lIEdTV1BMTF9QT1NURElWXzUwME1fTQkJMHgzMDAKKyNkZWZpbmUgR1NXUExMX0ZCS0RJVl81MDBNX1MJCTAKKyNkZWZpbmUgR1NXUExMX0ZCS0RJVl81MDBNX00JCTB4ZmYKKworI2RlZmluZSBUUkdNSUlfR1NXX0NMS19DRwkJMHgwNDEwCisjZGVmaW5lIFRSR01JSUNLX0VOCQkJQklUKDEpCisjZGVmaW5lIEdTV0NLX0VOCQkJQklUKDApCisKK3N0YXRpYyBpbnQgbXQ3NTMwX21paV9yZWFkKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3csIGludCBwaHksIGludCByZWcpCit7CisJaWYgKHBoeSA8IE1UNzUzWF9OVU1fUEhZUykKKwkJcGh5ID0gKGdzdy0+cGh5X2Jhc2UgKyBwaHkpICYgTVQ3NTNYX1NNSV9BRERSX01BU0s7CisKKwlyZXR1cm4gbWRpb2J1c19yZWFkKGdzdy0+aG9zdF9idXMsIHBoeSwgcmVnKTsKK30KKworc3RhdGljIHZvaWQgbXQ3NTMwX21paV93cml0ZShzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3LCBpbnQgcGh5LCBpbnQgcmVnLCB1MTYgdmFsKQoreworCWlmIChwaHkgPCBNVDc1M1hfTlVNX1BIWVMpCisJCXBoeSA9IChnc3ctPnBoeV9iYXNlICsgcGh5KSAmIE1UNzUzWF9TTUlfQUREUl9NQVNLOworCisJbWRpb2J1c193cml0ZShnc3ctPmhvc3RfYnVzLCBwaHksIHJlZywgdmFsKTsKK30KKworc3RhdGljIGludCBtdDc1MzBfbW1kX3JlYWQoc3RydWN0IGdzd19tdDc1M3ggKmdzdywgaW50IGFkZHIsIGludCBkZXZhZCwgdTE2IHJlZykKK3sKKwl1MTYgdmFsOworCisJaWYgKGFkZHIgPCBNVDc1M1hfTlVNX1BIWVMpCisJCWFkZHIgPSAoZ3N3LT5waHlfYmFzZSArIGFkZHIpICYgTVQ3NTNYX1NNSV9BRERSX01BU0s7CisKKwltdXRleF9sb2NrKCZnc3ctPmhvc3RfYnVzLT5tZGlvX2xvY2spOworCisJZ3N3LT5ob3N0X2J1cy0+d3JpdGUoZ3N3LT5ob3N0X2J1cywgYWRkciwgTUlJX01NRF9BQ0NfQ1RMX1JFRywKKwkJCSAgICAgKE1NRF9BRERSIDw8IE1NRF9DTURfUykgfAorCQkJICAgICAoKGRldmFkIDw8IE1NRF9ERVZBRF9TKSAmIE1NRF9ERVZBRF9NKSk7CisKKwlnc3ctPmhvc3RfYnVzLT53cml0ZShnc3ctPmhvc3RfYnVzLCBhZGRyLCBNSUlfTU1EX0FERFJfREFUQV9SRUcsIHJlZyk7CisKKwlnc3ctPmhvc3RfYnVzLT53cml0ZShnc3ctPmhvc3RfYnVzLCBhZGRyLCBNSUlfTU1EX0FDQ19DVExfUkVHLAorCQkJICAgICAoTU1EX0RBVEEgPDwgTU1EX0NNRF9TKSB8CisJCQkgICAgICgoZGV2YWQgPDwgTU1EX0RFVkFEX1MpICYgTU1EX0RFVkFEX00pKTsKKworCXZhbCA9IGdzdy0+aG9zdF9idXMtPnJlYWQoZ3N3LT5ob3N0X2J1cywgYWRkciwgTUlJX01NRF9BRERSX0RBVEFfUkVHKTsKKworCW11dGV4X3VubG9jaygmZ3N3LT5ob3N0X2J1cy0+bWRpb19sb2NrKTsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyB2b2lkIG10NzUzMF9tbWRfd3JpdGUoc3RydWN0IGdzd19tdDc1M3ggKmdzdywgaW50IGFkZHIsIGludCBkZXZhZCwKKwkJCSAgICAgdTE2IHJlZywgdTE2IHZhbCkKK3sKKwlpZiAoYWRkciA8IE1UNzUzWF9OVU1fUEhZUykKKwkJYWRkciA9IChnc3ctPnBoeV9iYXNlICsgYWRkcikgJiBNVDc1M1hfU01JX0FERFJfTUFTSzsKKworCW11dGV4X2xvY2soJmdzdy0+aG9zdF9idXMtPm1kaW9fbG9jayk7CisKKwlnc3ctPmhvc3RfYnVzLT53cml0ZShnc3ctPmhvc3RfYnVzLCBhZGRyLCBNSUlfTU1EX0FDQ19DVExfUkVHLAorCQkgICAgICAoTU1EX0FERFIgPDwgTU1EX0NNRF9TKSB8CisJCSAgICAgICgoZGV2YWQgPDwgTU1EX0RFVkFEX1MpICYgTU1EX0RFVkFEX00pKTsKKworCWdzdy0+aG9zdF9idXMtPndyaXRlKGdzdy0+aG9zdF9idXMsIGFkZHIsIE1JSV9NTURfQUREUl9EQVRBX1JFRywgcmVnKTsKKworCWdzdy0+aG9zdF9idXMtPndyaXRlKGdzdy0+aG9zdF9idXMsIGFkZHIsIE1JSV9NTURfQUNDX0NUTF9SRUcsCisJCSAgICAgIChNTURfREFUQSA8PCBNTURfQ01EX1MpIHwKKwkJICAgICAgKChkZXZhZCA8PCBNTURfREVWQURfUykgJiBNTURfREVWQURfTSkpOworCisJZ3N3LT5ob3N0X2J1cy0+d3JpdGUoZ3N3LT5ob3N0X2J1cywgYWRkciwgTUlJX01NRF9BRERSX0RBVEFfUkVHLCB2YWwpOworCisJbXV0ZXhfdW5sb2NrKCZnc3ctPmhvc3RfYnVzLT5tZGlvX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBtdDc1MzBfY29yZV9yZWdfd3JpdGUoc3RydWN0IGdzd19tdDc1M3ggKmdzdywgdTMyIHJlZywgdTMyIHZhbCkKK3sKKwlnc3ctPm1tZF93cml0ZShnc3csIDAsIDB4MWYsIHJlZywgdmFsKTsKK30KKworc3RhdGljIHZvaWQgbXQ3NTMwX3RyZ21paV9zZXR0aW5nKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3cpCit7CisJdTE2IGk7CisKKwltdDc1MzBfY29yZV9yZWdfd3JpdGUoZ3N3LCBDT1JFX1BMTF9HUk9VUDUsIDB4MDc4MCk7CisJbWRlbGF5KDEpOworCW10NzUzMF9jb3JlX3JlZ193cml0ZShnc3csIENPUkVfUExMX0dST1VQNiwgMCk7CisJbXQ3NTMwX2NvcmVfcmVnX3dyaXRlKGdzdywgQ09SRV9QTExfR1JPVVAxMCwgMHg4Nyk7CisJbWRlbGF5KDEpOworCW10NzUzMF9jb3JlX3JlZ193cml0ZShnc3csIENPUkVfUExMX0dST1VQMTEsIDB4ODcpOworCisJLyogUExMIEJJQVMgZW5hYmxlICovCisJbXQ3NTMwX2NvcmVfcmVnX3dyaXRlKGdzdywgQ09SRV9QTExfR1JPVVA0LAorCQkJICAgICAgUkdfU1lTUExMX0REU0ZCS19FTiB8IFJHX1NZU1BMTF9CSUFTX0VOKTsKKwltZGVsYXkoMSk7CisKKwkvKiBQTEwgTFBGIGVuYWJsZSAqLworCW10NzUzMF9jb3JlX3JlZ193cml0ZShnc3csIENPUkVfUExMX0dST1VQNCwKKwkJCSAgICAgIFJHX1NZU1BMTF9ERFNGQktfRU4gfAorCQkJICAgICAgUkdfU1lTUExMX0JJQVNfRU4gfCBSR19TWVNQTExfQklBU19MUEZfRU4pOworCisJLyogc3lzIFBMTCBlbmFibGUgKi8KKwltdDc1MzBfY29yZV9yZWdfd3JpdGUoZ3N3LCBDT1JFX1BMTF9HUk9VUDIsCisJCQkgICAgICBSR19TWVNQTExfRU5fTk9STUFMIHwgUkdfU1lTUExMX1ZPREVOIHwKKwkJCSAgICAgICgxIDw8IFJHX1NZU1BMTF9QT1NESVZfUykpOworCisJLyogTENERERTIFBXRFMgKi8KKwltdDc1MzBfY29yZV9yZWdfd3JpdGUoZ3N3LCBDT1JFX1BMTF9HUk9VUDcsCisJCQkgICAgICAoMyA8PCBSR19MQ0NEU19DX1MpIHwKKwkJCSAgICAgIFJHX0xDRERTX1BXREIgfCBSR19MQ0REU19JU09fRU4pOworCW1kZWxheSgxKTsKKworCS8qIEVuYWJsZSBNVDc1MzAgVFJHTUlJIGNsb2NrICovCisJbXQ3NTMwX2NvcmVfcmVnX3dyaXRlKGdzdywgVFJHTUlJX0dTV19DTEtfQ0csIEdTV0NLX0VOIHwgVFJHTUlJQ0tfRU4pOworCisJLyogbG93ZXIgVHggRHJpdmluZyAqLworCWZvciAoaSA9IDAgOyBpIDwgTlVNX1RSR01JSV9PRFQ7IGkrKykKKwkJbXQ3NTN4X3JlZ193cml0ZShnc3csIFRSR01JSV9URF9PRFQoaSksCisJCQkJICg0IDw8IFRYX0RNX0RSVlBfUykgfCAoNCA8PCBUWF9ETV9EUlZOX1MpKTsKK30KKworc3RhdGljIHZvaWQgbXQ3NTMwX3JnbWlpX3NldHRpbmcoc3RydWN0IGdzd19tdDc1M3ggKmdzdykKK3sKKwl1MzIgdmFsOworCisJbXQ3NTMwX2NvcmVfcmVnX3dyaXRlKGdzdywgQ09SRV9QTExfR1JPVVA1LCAweDBjODApOworCW1kZWxheSgxKTsKKwltdDc1MzBfY29yZV9yZWdfd3JpdGUoZ3N3LCBDT1JFX1BMTF9HUk9VUDYsIDApOworCW10NzUzMF9jb3JlX3JlZ193cml0ZShnc3csIENPUkVfUExMX0dST1VQMTAsIDB4ODcpOworCW1kZWxheSgxKTsKKwltdDc1MzBfY29yZV9yZWdfd3JpdGUoZ3N3LCBDT1JFX1BMTF9HUk9VUDExLCAweDg3KTsKKworCXZhbCA9IG10NzUzeF9yZWdfcmVhZChnc3csIFRSR01JSV9UWENUUkwpOworCXZhbCAmPSB+VFhDX0lOVjsKKwltdDc1M3hfcmVnX3dyaXRlKGdzdywgVFJHTUlJX1RYQ1RSTCwgdmFsKTsKKworCW10NzUzeF9yZWdfd3JpdGUoZ3N3LCBUUkdNSUlfVENLX0NUUkwsCisJCQkgKDggPDwgVFhfVEFQX1MpIHwgKDB4NTUgPDwgVFhfVFJBSU5fV0RfUykpOworfQorCitzdGF0aWMgaW50IG10NzUzMF9tYWNfcG9ydF9zZXR1cChzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3KQoreworCXUzMiBod3N0cmFwLCBwNmVjciA9IDAsIHA1bWNyLCBwNm1jciwgcGh5YWQ7CisKKwlod3N0cmFwID0gbXQ3NTN4X3JlZ19yZWFkKGdzdywgTUhXU1RSQVApOworCWh3c3RyYXAgJj0gfihQNl9JTlRGX0RJUyB8IFA1X0lOVEZfTU9ERV9SR01JSSB8IFA1X0lOVEZfRElTX1MpOworCWh3c3RyYXAgfD0gUDVfSU5URl9TRUxfR01BQzU7CisJaWYgKCFnc3ctPnBvcnQ1X2NmZy5lbmFibGVkKSB7CisJCXA1bWNyID0gRk9SQ0VfTU9ERTsKKwkJaHdzdHJhcCB8PSBQNV9JTlRGX0RJU19TOworCX0gZWxzZSB7CisJCXA1bWNyID0gKElQR185NkJJVF9XSVRIX1NIT1JUX0lQRyA8PCBJUEdfQ0ZHX1MpIHwKKwkJCU1BQ19NT0RFIHwgTUFDX1RYX0VOIHwgTUFDX1JYX0VOIHwKKwkJCUJLT0ZGX0VOIHwgQkFDS1BSX0VOOworCisJCWlmIChnc3ctPnBvcnQ1X2NmZy5mb3JjZV9saW5rKSB7CisJCQlwNW1jciB8PSBGT1JDRV9NT0RFIHwgRk9SQ0VfTElOSyB8IEZPUkNFX1JYX0ZDIHwKKwkJCQkgRk9SQ0VfVFhfRkM7CisJCQlwNW1jciB8PSBnc3ctPnBvcnQ1X2NmZy5zcGVlZCA8PCBGT1JDRV9TUERfUzsKKworCQkJaWYgKGdzdy0+cG9ydDVfY2ZnLmR1cGxleCkKKwkJCQlwNW1jciB8PSBGT1JDRV9EUFg7CisJCX0KKworCQlzd2l0Y2ggKGdzdy0+cG9ydDVfY2ZnLnBoeV9tb2RlKSB7CisJCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX01JSToKKwkJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfR01JSToKKwkJCWJyZWFrOworCQljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSToKKwkJCWh3c3RyYXAgfD0gUDVfSU5URl9NT0RFX1JHTUlJOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfaW5mbyhnc3ctPmRldiwgIiVzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgcG9ydDVcbiIsCisJCQkJIHBoeV9tb2Rlcyhnc3ctPnBvcnQ1X2NmZy5waHlfbW9kZSkpOworCQkJcDVtY3IgPSBGT1JDRV9NT0RFOworCQkJaHdzdHJhcCB8PSBQNV9JTlRGX0RJU19TOworCQl9CisKKwkJLyogUG9ydDUgdG8gUEhZIGRpcmVjdCBtb2RlICovCisJCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihnc3ctPnBvcnQ1X2NmZy5ucCwgInBoeS1hZGRyZXNzIiwKKwkJCQkJICZwaHlhZCkpCisJCQlnb3RvIHBhcnNlX3A2OworCisJCWlmIChwaHlhZCAhPSAwICYmIHBoeWFkICE9IDQpIHsKKwkJCWRldl9pbmZvKGdzdy0+ZGV2LAorCQkJCSAiT25seSBQSFkgMC80IGNhbiBiZSBjb25uZWN0ZWQgdG8gUG9ydCA1XG4iKTsKKwkJCWdvdG8gcGFyc2VfcDY7CisJCX0KKworCQlod3N0cmFwICY9IH5QNV9JTlRGX1NFTF9HTUFDNTsKKwkJaWYgKHBoeWFkID09IDApCisJCQlod3N0cmFwIHw9IFA1X1BIWTBfU0VMOworCQllbHNlCisJCQlod3N0cmFwICY9IH5QNV9QSFkwX1NFTDsKKwl9CisKK3BhcnNlX3A2OgorCWlmICghZ3N3LT5wb3J0Nl9jZmcuZW5hYmxlZCkgeworCQlwNm1jciA9IEZPUkNFX01PREU7CisJCWh3c3RyYXAgfD0gUDZfSU5URl9ESVM7CisJfSBlbHNlIHsKKwkJcDZtY3IgPSAoSVBHXzk2QklUX1dJVEhfU0hPUlRfSVBHIDw8IElQR19DRkdfUykgfAorCQkJTUFDX01PREUgfCBNQUNfVFhfRU4gfCBNQUNfUlhfRU4gfAorCQkJQktPRkZfRU4gfCBCQUNLUFJfRU47CisKKwkJaWYgKGdzdy0+cG9ydDZfY2ZnLmZvcmNlX2xpbmspIHsKKwkJCXA2bWNyIHw9IEZPUkNFX01PREUgfCBGT1JDRV9MSU5LIHwgRk9SQ0VfUlhfRkMgfAorCQkJCSBGT1JDRV9UWF9GQzsKKwkJCXA2bWNyIHw9IGdzdy0+cG9ydDZfY2ZnLnNwZWVkIDw8IEZPUkNFX1NQRF9TOworCisJCQlpZiAoZ3N3LT5wb3J0Nl9jZmcuZHVwbGV4KQorCQkJCXA2bWNyIHw9IEZPUkNFX0RQWDsKKwkJfQorCisJCXN3aXRjaCAoZ3N3LT5wb3J0Nl9jZmcucGh5X21vZGUpIHsKKwkJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk6CisJCQlwNmVjciA9IEJJVCgxKTsKKwkJCWJyZWFrOworCQljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9UUkdNSUk6CisJCQkvKiBzZXQgTVQ3NTMwIGNlbnRyYWwgYWxpZ24gKi8KKwkJCXA2ZWNyID0gQklUKDApOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfaW5mbyhnc3ctPmRldiwgIiVzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgcG9ydDZcbiIsCisJCQkJIHBoeV9tb2Rlcyhnc3ctPnBvcnQ2X2NmZy5waHlfbW9kZSkpOworCQkJcDZtY3IgPSBGT1JDRV9NT0RFOworCQkJaHdzdHJhcCB8PSBQNl9JTlRGX0RJUzsKKwkJfQorCX0KKworCW10NzUzeF9yZWdfd3JpdGUoZ3N3LCBNSFdTVFJBUCwgaHdzdHJhcCk7CisJbXQ3NTN4X3JlZ193cml0ZShnc3csIFA2RUNSLCBwNmVjcik7CisKKwltdDc1M3hfcmVnX3dyaXRlKGdzdywgUE1DUig1KSwgcDVtY3IpOworCW10NzUzeF9yZWdfd3JpdGUoZ3N3LCBQTUNSKDYpLCBwNm1jcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXQ3NTMwX2NvcmVfcGxsX3NldHVwKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3cpCit7CisJdTMyIGh3c3RyYXA7CisKKwlod3N0cmFwID0gbXQ3NTN4X3JlZ19yZWFkKGdzdywgSFdTVFJBUCk7CisKKwlzd2l0Y2ggKChod3N0cmFwICYgWFRBTF9GU0VMX00pID4+IFhUQUxfRlNFTF9TKSB7CisJY2FzZSBYVEFMXzQwTUhaOgorCQkvKiBEaXNhYmxlIE1UNzUzMCBjb3JlIGNsb2NrICovCisJCW10NzUzMF9jb3JlX3JlZ193cml0ZShnc3csIFRSR01JSV9HU1dfQ0xLX0NHLCAwKTsKKworCQkvKiBkaXNhYmxlIE1UNzUzMCBQTEwgKi8KKwkJbXQ3NTMwX2NvcmVfcmVnX3dyaXRlKGdzdywgQ09SRV9HU1dQTExfR0NSXzEsCisJCQkJICAgICAgKDIgPDwgR1NXUExMX1BPU1RESVZfMjAwTV9TKSB8CisJCQkJICAgICAgKDMyIDw8IEdTV1BMTF9GQktESVZfMjAwTV9TKSk7CisKKwkJLyogRm9yIE1UNzUzMCBjb3JlIGNsb2NrID0gNTAwTWh6ICovCisJCW10NzUzMF9jb3JlX3JlZ193cml0ZShnc3csIENPUkVfR1NXUExMX0dDUl8yLAorCQkJCSAgICAgICgxIDw8IEdTV1BMTF9QT1NURElWXzUwME1fUykgfAorCQkJCSAgICAgICgyNSA8PCBHU1dQTExfRkJLRElWXzUwME1fUykpOworCisJCS8qIEVuYWJsZSBNVDc1MzAgUExMICovCisJCW10NzUzMF9jb3JlX3JlZ193cml0ZShnc3csIENPUkVfR1NXUExMX0dDUl8xLAorCQkJCSAgICAgICgyIDw8IEdTV1BMTF9QT1NURElWXzIwME1fUykgfAorCQkJCSAgICAgICgzMiA8PCBHU1dQTExfRkJLRElWXzIwME1fUykgfAorCQkJCSAgICAgIEdTV1BMTF9FTl9QUkUpOworCisJCXVzbGVlcF9yYW5nZSgyMCwgNDApOworCisJCS8qIEVuYWJsZSBNVDc1MzAgY29yZSBjbG9jayAqLworCQltdDc1MzBfY29yZV9yZWdfd3JpdGUoZ3N3LCBUUkdNSUlfR1NXX0NMS19DRywgR1NXQ0tfRU4pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBUT0RPOiBQTEwgc2V0dGluZ3MgZm9yIDIwLzI1TUh6ICovCisJCWJyZWFrOworCX0KKworCWh3c3RyYXAgPSBtdDc1M3hfcmVnX3JlYWQoZ3N3LCBIV1NUUkFQKTsKKwlod3N0cmFwIHw9IENIR19UUkFQOworCWlmIChnc3ctPmRpcmVjdF9waHlfYWNjZXNzKQorCQlod3N0cmFwICY9IH5DX01ESU9fQlBTX1M7CisJZWxzZQorCQlod3N0cmFwIHw9IENfTURJT19CUFNfUzsKKworCW10NzUzeF9yZWdfd3JpdGUoZ3N3LCBNSFdTVFJBUCwgaHdzdHJhcCk7CisKKwlpZiAoZ3N3LT5wb3J0Nl9jZmcuZW5hYmxlZCAmJgorCSAgICBnc3ctPnBvcnQ2X2NmZy5waHlfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfVFJHTUlJKSB7CisJCW10NzUzMF90cmdtaWlfc2V0dGluZyhnc3cpOworCX0gZWxzZSB7CisJCS8qIFJHTUlJICovCisJCW10NzUzMF9yZ21paV9zZXR0aW5nKGdzdyk7CisJfQorCisJLyogZGVsYXkgc2V0dGluZyBmb3IgMTAvMTAwME0gKi8KKwltdDc1M3hfcmVnX3dyaXRlKGdzdywgUDVSR01JSVJYQ1IsCisJCQkgQ1NSX1JHTUlJX0VER0VfQUxJR04gfAorCQkJICgyIDw8IENTUl9SR01JSV9SWENfMERFR19DRkdfUykpOworCW10NzUzeF9yZWdfd3JpdGUoZ3N3LCBQNVJHTUlJVFhDUiwgMHgxNCA8PCBDU1JfUkdNSUlfVFhDX0NGR19TKTsKK30KKworc3RhdGljIGludCBtdDc1MzBfc3dfZGV0ZWN0KHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3csIHN0cnVjdCBjaGlwX3JldiAqY3JldikKK3sKKwl1MzIgcmV2OworCisJcmV2ID0gbXQ3NTN4X3JlZ19yZWFkKGdzdywgQ0hJUF9SRVYpOworCisJaWYgKCgocmV2ICYgQ0hJUF9OQU1FX00pID4+IENISVBfTkFNRV9TKSA9PSBNVDc1MzApIHsKKwkJaWYgKGNyZXYpIHsKKwkJCWNyZXYtPnJldiA9IHJldiAmIENISVBfUkVWX007CisJCQljcmV2LT5uYW1lID0gIk1UNzUzMCI7CisJCX0KKworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIHZvaWQgbXQ3NTMwX3BoeV9zZXR0aW5nKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3cpCit7CisJaW50IGk7CisJdTMyIHZhbDsKKworCWZvciAoaSA9IDA7IGkgPCBNVDc1M1hfTlVNX1BIWVM7IGkrKykgeworCQkvKiBEaXNhYmxlIEVFRSAqLworCQlnc3ctPm1tZF93cml0ZShnc3csIGksIFBIWV9ERVYwNywgUEhZX0RFVjA3X1JFR18wM0MsIDApOworCisJCS8qIEVuYWJsZSBIVyBhdXRvIGRvd25zaGlmdCAqLworCQlnc3ctPm1paV93cml0ZShnc3csIGksIDB4MWYsIDB4MSk7CisJCXZhbCA9IGdzdy0+bWlpX3JlYWQoZ3N3LCBpLCBQSFlfRVhUX1JFR18xNCk7CisJCXZhbCB8PSBQSFlfRU5fRE9XTl9TSEZJVDsKKwkJZ3N3LT5taWlfd3JpdGUoZ3N3LCBpLCBQSFlfRVhUX1JFR18xNCwgdmFsKTsKKworCQkvKiBJbmNyZWFzZSBTbHZEUFNyZWFkeSB0aW1lICovCisJCWdzdy0+bWlpX3dyaXRlKGdzdywgaSwgMHgxZiwgMHg1MmI1KTsKKwkJZ3N3LT5taWlfd3JpdGUoZ3N3LCBpLCBQSFlfVFJfUkVHXzEwLCAweGFmYWUpOworCQlnc3ctPm1paV93cml0ZShnc3csIGksIFBIWV9UUl9SRUdfMTIsIDB4MmYpOworCQlnc3ctPm1paV93cml0ZShnc3csIGksIFBIWV9UUl9SRUdfMTAsIDB4OGZhZSk7CisKKwkJLyogSW5jcmVhc2UgcG9zdF91cGRhdGVfdGltZXIgKi8KKwkJZ3N3LT5taWlfd3JpdGUoZ3N3LCBpLCAweDFmLCAweDMpOworCQlnc3ctPm1paV93cml0ZShnc3csIGksIFBIWV9MUElfUkVHXzExLCAweDRiKTsKKwkJZ3N3LT5taWlfd3JpdGUoZ3N3LCBpLCAweDFmLCAwKTsKKworCQkvKiBBZGp1c3QgMTAwX21zZV90aHJlc2hvbGQgKi8KKwkJZ3N3LT5tbWRfd3JpdGUoZ3N3LCBpLCBQSFlfREVWMUUsIFBIWV9ERVYxRV9SRUdfMTIzLCAweGZmZmYpOworCisJCS8qIERpc2FibGUgbWNjICovCisJCWdzdy0+bW1kX3dyaXRlKGdzdywgaSwgUEhZX0RFVjFFLCBQSFlfREVWMUVfUkVHX0E2LCAweDMwMCk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIGJvb2wgZ2V0X3BoeV9hY2Nlc3NfbW9kZShjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXJldHVybiBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobnAsICJtdDc1MzAsZGlyZWN0LXBoeS1hY2Nlc3MiKTsKK30KKworc3RhdGljIGludCBtdDc1MzBfc3dfaW5pdChzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3KQoreworCWludCBpOworCXUzMiB2YWw7CisKKwlnc3ctPmRpcmVjdF9waHlfYWNjZXNzID0gZ2V0X3BoeV9hY2Nlc3NfbW9kZShnc3ctPmRldi0+b2Zfbm9kZSk7CisKKwkvKiBGb3JjZSBNVDc1MzAgdG8gdXNlIChpbilkaXJlY3QgUEhZIGFjY2VzcyAqLworCXZhbCA9IG10NzUzeF9yZWdfcmVhZChnc3csIEhXU1RSQVApOworCXZhbCB8PSBDSEdfVFJBUDsKKwlpZiAoZ3N3LT5kaXJlY3RfcGh5X2FjY2VzcykKKwkJdmFsICY9IH5DX01ESU9fQlBTX1M7CisJZWxzZQorCQl2YWwgfD0gQ19NRElPX0JQU19TOworCW10NzUzeF9yZWdfd3JpdGUoZ3N3LCBNSFdTVFJBUCwgdmFsKTsKKworCS8qIFJlYWQgUEhZIGFkZHJlc3MgYmFzZSBmcm9tIEhXU1RSQVAgKi8KKwlnc3ctPnBoeV9iYXNlICA9ICgoKHZhbCAmIFNNSV9BRERSX00pID4+IFNNSV9BRERSX1MpIDw8IDMpICsgODsKKwlnc3ctPnBoeV9iYXNlICY9IE1UNzUzWF9TTUlfQUREUl9NQVNLOworCisJaWYgKGdzdy0+ZGlyZWN0X3BoeV9hY2Nlc3MpIHsKKwkJZ3N3LT5taWlfcmVhZCA9IG10NzUzMF9taWlfcmVhZDsKKwkJZ3N3LT5taWlfd3JpdGUgPSBtdDc1MzBfbWlpX3dyaXRlOworCQlnc3ctPm1tZF9yZWFkID0gbXQ3NTMwX21tZF9yZWFkOworCQlnc3ctPm1tZF93cml0ZSA9IG10NzUzMF9tbWRfd3JpdGU7CisJfSBlbHNlIHsKKwkJZ3N3LT5taWlfcmVhZCA9IG10NzUzeF9taWlfcmVhZDsKKwkJZ3N3LT5taWlfd3JpdGUgPSBtdDc1M3hfbWlpX3dyaXRlOworCQlnc3ctPm1tZF9yZWFkID0gbXQ3NTN4X21tZF9pbmRfcmVhZDsKKwkJZ3N3LT5tbWRfd3JpdGUgPSBtdDc1M3hfbW1kX2luZF93cml0ZTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgTVQ3NTNYX05VTV9QSFlTOyBpKyspIHsKKwkJdmFsID0gZ3N3LT5taWlfcmVhZChnc3csIGksIE1JSV9CTUNSKTsKKwkJdmFsIHw9IEJNQ1JfUERPV047CisJCWdzdy0+bWlpX3dyaXRlKGdzdywgaSwgTUlJX0JNQ1IsIHZhbCk7CisJfQorCisJLyogRm9yY2UgTUFDIGxpbmsgZG93biBiZWZvcmUgcmVzZXQgKi8KKwltdDc1M3hfcmVnX3dyaXRlKGdzdywgUE1DUig1KSwgRk9SQ0VfTU9ERSk7CisJbXQ3NTN4X3JlZ193cml0ZShnc3csIFBNQ1IoNiksIEZPUkNFX01PREUpOworCisJLyogU3dpdGNoIHNvZnQgcmVzZXQgKi8KKwkvKiBCVUc6IHN3IHJlc2V0IGNhdXNlcyBnc3cgaW50IGZsb29kaW5nICovCisJbXQ3NTN4X3JlZ193cml0ZShnc3csIFNZU19DVFJMLCBTV19QSFlfUlNUIHwgU1dfU1lTX1JTVCB8IFNXX1JFR19SU1QpOworCXVzbGVlcF9yYW5nZSgxMCwgMjApOworCisJLyogZ2xvYmFsIG1hYyBjb250cm9sIHNldHRpbmdzIGNvbmZpZ3VyYXRpb24gKi8KKwltdDc1M3hfcmVnX3dyaXRlKGdzdywgR01BQ0NSLAorCQkJIExBVEVfQ09MX0RST1AgfCAoMTUgPDwgTVRDQ19MTVRfUykgfAorCQkJICgyIDw8IE1BWF9SWF9KVU1CT19TKSB8IFJYX1BLVF9MRU5fTUFYX0pVTUJPKTsKKworCS8qIE91dHB1dCBJTlRSIHNlbGVjdGVkICovCisJdmFsID0gbXQ3NTN4X3JlZ19yZWFkKGdzdywgVE9QX1NJR19DVFJMKTsKKwl2YWwgJj0gfk9VVFBVVF9JTlRSX007CisJdmFsIHw9ICgzIDw8IE9VVFBVVF9JTlRSX1MpOworCW10NzUzeF9yZWdfd3JpdGUoZ3N3LCBUT1BfU0lHX0NUUkwsIHZhbCk7CisKKwltdDc1MzBfY29yZV9wbGxfc2V0dXAoZ3N3KTsKKwltdDc1MzBfbWFjX3BvcnRfc2V0dXAoZ3N3KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10NzUzMF9zd19wb3N0X2luaXQoc3RydWN0IGdzd19tdDc1M3ggKmdzdykKK3sKKwlpbnQgaTsKKwl1MzIgdmFsOworCisJbXQ3NTMwX3BoeV9zZXR0aW5nKGdzdyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTVQ3NTNYX05VTV9QSFlTOyBpKyspIHsKKwkJdmFsID0gZ3N3LT5taWlfcmVhZChnc3csIGksIE1JSV9CTUNSKTsKKwkJdmFsICY9IH5CTUNSX1BET1dOOworCQlnc3ctPm1paV93cml0ZShnc3csIGksIE1JSV9CTUNSLCB2YWwpOworCX0KKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgbXQ3NTN4X3N3X2lkIG10NzUzMF9pZCA9IHsKKwkubW9kZWwgPSBNVDc1MzAsCisJLmRldGVjdCA9IG10NzUzMF9zd19kZXRlY3QsCisJLmluaXQgPSBtdDc1MzBfc3dfaW5pdCwKKwkucG9zdF9pbml0ID0gbXQ3NTMwX3N3X3Bvc3RfaW5pdAorfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L210ay9tdDc1M3gvbXQ3NTMwLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9tdGsvbXQ3NTN4L210NzUzMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMjQzZDQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9tdGsvbXQ3NTN4L210NzUzMC5oCkBAIC0wLDAgKzEsMTMgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTggTWVkaWFUZWsgSW5jLgorICovCisKKyNpZm5kZWYgX01UNzUzMF9IXworI2RlZmluZSBfTVQ3NTMwX0hfCisKKyNpbmNsdWRlICJtdDc1M3guaCIKKworZXh0ZXJuIHN0cnVjdCBtdDc1M3hfc3dfaWQgbXQ3NTMwX2lkOworCisjZW5kaWYgLyogX01UNzUzMF9IXyAqLwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvbXRrL210NzUzeC9tdDc1MzEuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L210ay9tdDc1M3gvbXQ3NTMxLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzI1MzA0MgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L210ay9tdDc1M3gvbXQ3NTMxLmMKQEAgLTAsMCArMSwxMDU4IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxOCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IFpoYW5ndW8gSnUgPHpoYW5ndW8uanVAbWVkaWF0ZWsuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KKworI2luY2x1ZGUgIm10NzUzeC5oIgorI2luY2x1ZGUgIm10NzUzeF9yZWdzLmgiCisKKy8qIE1UNzUzMSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgU0dNSUlfUkVHX0JBU0UJCQkweDUwMDAKKyNkZWZpbmUgU0dNSUlfUkVHX1BPUlRfQkFTRQkJMHgxMDAwCisjZGVmaW5lIFNHTUlJX1JFRyhwLCByKQkJCShTR01JSV9SRUdfQkFTRSArIFwKKwkJCQkJKHApICogU0dNSUlfUkVHX1BPUlRfQkFTRSArIChyKSkKKyNkZWZpbmUgUENTX0NPTlRST0xfMShwKQkJU0dNSUlfUkVHKHAsIDB4MDApCisjZGVmaW5lIFNHTUlJX01PREUocCkJCQlTR01JSV9SRUcocCwgMHgyMCkKKyNkZWZpbmUgUVBIWV9QV1JfU1RBVEVfQ1RSTChwKQkJU0dNSUlfUkVHKHAsIDB4ZTgpCisjZGVmaW5lIEFOQV9DS0JHKHApCQkJU0dNSUlfUkVHKHAsIDB4MTAwKQorI2RlZmluZSBBTkFfREFfRk9SQ0VfTU9ERTEocCkJCVNHTUlJX1JFRyhwLCAweDExMCkKKyNkZWZpbmUgUEhZQV9DVFJMX1NJR05BTDMocCkJCVNHTUlJX1JFRyhwLCAweDEyOCkKKyNkZWZpbmUgUEhZQV9BTkFfU1lTUExMKHApCQlTR01JSV9SRUcocCwgMHgxNTgpCisKKy8qIEZpZWxkcyBvZiBQQ1NfQ09OVFJPTF8xICovCisjZGVmaW5lIFNHTUlJX0xJTktfU1RBVFVTCQlCSVQoMTgpCisjZGVmaW5lIFNHTUlJX0FOX0VOQUJMRQkJCUJJVCgxMikKKyNkZWZpbmUgU0dNSUlfQU5fUkVTVEFSVAkJQklUKDkpCisKKy8qIEZpZWxkcyBvZiBTR01JSV9NT0RFICovCisjZGVmaW5lIFNHTUlJX1JFTU9URV9GQVVMVF9ESVMJCUJJVCg4KQorI2RlZmluZSBTR01JSV9JRl9NT0RFX0ZPUkNFX0RVUExFWAlCSVQoNCkKKyNkZWZpbmUgU0dNSUlfSUZfTU9ERV9GT1JDRV9TUEVFRF9TCTB4MgorI2RlZmluZSBTR01JSV9JRl9NT0RFX0ZPUkNFX1NQRUVEX00JMHgwYworI2RlZmluZSBTR01JSV9JRl9NT0RFX0FEVkVSVF9BTgkJQklUKDEpCisKKy8qIFZhbHVlcyBvZiBTR01JSV9JRl9NT0RFX0ZPUkNFX1NQRUVEICovCisjZGVmaW5lIFNHTUlJX0lGX01PREVfRk9SQ0VfU1BFRURfMTAJMAorI2RlZmluZSBTR01JSV9JRl9NT0RFX0ZPUkNFX1NQRUVEXzEwMAkxCisjZGVmaW5lIFNHTUlJX0lGX01PREVfRk9SQ0VfU1BFRURfMTAwMAkyCisKKy8qIEZpZWxkcyBvZiBRUEhZX1BXUl9TVEFURV9DVFJMICovCisjZGVmaW5lIFBIWUFfUFdECQkJQklUKDQpCisKKy8qIEZpZWxkcyBvZiBBTkFfQ0tCRyAqLworI2RlZmluZSBTU1VTQl9QTExfU1NDX0VOCQlCSVQoMjEpCisKKy8qIEZpZWxkcyBvZiBBTkFfREFfRk9SQ0VfTU9ERTEgKi8KKyNkZWZpbmUgRk9SQ0VfUExMX1NTQ19FTgkJQklUKDMwKQorCisvKiBGaWVsZHMgb2YgUEhZQV9DVFJMX1NJR05BTDMgKi8KKyNkZWZpbmUgUkdfVFBIWV9TUEVFRF9TCQkJMgorI2RlZmluZSBSR19UUEhZX1NQRUVEX00JCQkweDBjCisKKy8qIFZhbHVlcyBvZiBSR19UUEhZX1NQRUVEICovCisjZGVmaW5lIFJHX1RQSFlfU1BFRURfMTAwMAkJMAorI2RlZmluZSBSR19UUEhZX1NQRUVEXzI1MDAJCTEKKworLyogRmllbGRzIG9mIFBIWUFfQU5BX1NZU1BMTCAqLworI2RlZmluZSBSR19WVVNCMTBfT04JCQlCSVQoMjkpCisKKy8qIFVuaXF1ZSBmaWVsZHMgb2YgKE0pSFdTVFJBUCBmb3IgTVQ3NTMxICovCisjZGVmaW5lIFhUQUxfRlNFTF9TCQkJNworI2RlZmluZSBYVEFMX0ZTRUxfTQkJCUJJVCg3KQorI2RlZmluZSBQSFlfRU4JCQkJQklUKDYpCisjZGVmaW5lIENIR19TVFJBUAkJCUJJVCg4KQorCisvKiBFZnVzZSBSZWdpc3RlciBEZWZpbmUgKi8KKyNkZWZpbmUgR0JFX0VGVVNFCQkJMHg3YmM4CisjZGVmaW5lIEdCRV9TRUxfRUZVU0VfRU4JCUJJVCgwKQorCisvKiBQSFkgRU5BQkxFIFJlZ2lzdGVyIGJpdG1hcCBkZWZpbmUgKi8KKyNkZWZpbmUgUEhZX0RFVjFGCQkJMHgxZgorI2RlZmluZSBQSFlfREVWMUZfUkVHXzQ0CQkweDQ0CisjZGVmaW5lIFBIWV9ERVYxRl9SRUdfMTA0CQkweDEwNAorI2RlZmluZSBQSFlfREVWMUZfUkVHXzEwQQkJMHgxMGEKKyNkZWZpbmUgUEhZX0RFVjFGX1JFR18xMEIJCTB4MTBiCisjZGVmaW5lIFBIWV9ERVYxRl9SRUdfMTBDCQkweDEwYworI2RlZmluZSBQSFlfREVWMUZfUkVHXzEwRAkJMHgxMGQKKyNkZWZpbmUgUEhZX0RFVjFGX1JFR18yNjgJCTB4MjY4CisjZGVmaW5lIFBIWV9ERVYxRl9SRUdfMjY5CQkweDI2OQorI2RlZmluZSBQSFlfREVWMUZfUkVHXzI2QQkJMHgyNkEKKyNkZWZpbmUgUEhZX0RFVjFGX1JFR180MDMJCTB4NDAzCisKKy8qIEZpZWxkcyBvZiBQSFlfREVWMUZfUkVHXzQwMyAqLworI2RlZmluZSBHQkVfRUZVU0VfU0VUVElORwkJQklUKDMpCisjZGVmaW5lIFBIWV9FTl9CWVBBU1NfTU9ERQkJQklUKDQpCisjZGVmaW5lIFBPV0VSX09OX09GRgkJCUJJVCg1KQorI2RlZmluZSBQSFlfUExMX00JCQlHRU5NQVNLKDksIDgpCisjZGVmaW5lIFBIWV9QTExfU0VMKHgpCQkJKCgoeCkgPDwgOCkgJiBHRU5NQVNLKDksIDgpKQorCisvKiBQSFkgRUVFIFJlZ2lzdGVyIGJpdG1hcCBvZiBkZWZpbmUgKi8KKyNkZWZpbmUgUEhZX0RFVjA3CQkJMHgwNworI2RlZmluZSBQSFlfREVWMDdfUkVHXzAzQwkJMHgzYworCisvKiBQSFkgRXh0ZW5kIFJlZ2lzdGVyIDB4MTQgYml0bWFwIG9mIGRlZmluZSAqLworI2RlZmluZSBQSFlfRVhUX1JFR18xNAkJCTB4MTQKKworLyogRmllbGRzIG9mIFBIWV9FWFRfUkVHXzE0ICovCisjZGVmaW5lIFBIWV9FTl9ET1dOX1NIRklUCQlCSVQoNCkKKworLyogUEhZIEV4dGVuZCBSZWdpc3RlciAweDE3IGJpdG1hcCBvZiBkZWZpbmUgKi8KKyNkZWZpbmUgUEhZX0VYVF9SRUdfMTcJCQkweDE3CisKKy8qIEZpZWxkcyBvZiBQSFlfRVhUX1JFR18xNyAqLworI2RlZmluZSBQSFlfTElOS0RPV05fUE9XRVJfU0FWSU5HX0VOCUJJVCg0KQorCisvKiBQSFkgUE1BIFJlZ2lzdGVyIDB4MTcgYml0bWFwIG9mIGRlZmluZSAqLworI2RlZmluZSBTTFZfRFNQX1JFQURZX1RJTUVfUwkJMTUKKyNkZWZpbmUgU0xWX0RTUF9SRUFEWV9USU1FX00JCSgweGZmIDw8IFNMVl9EU1BfUkVBRFlfVElNRV9TKQorCisvKiBQSFkgUE1BIFJlZ2lzdGVyIDB4MTggYml0bWFwIG9mIGRlZmluZSAqLworI2RlZmluZSBFTkFCTEVfUkFORE9NX1VQREFURV9UUklHR0VSCUJJVCg4KQorCisvKiBQSFkgREVWIDB4MWUgUmVnaXN0ZXIgYml0bWFwIG9mIGRlZmluZSAqLworI2RlZmluZSBQSFlfREVWMUUJCQkweDFlCisjZGVmaW5lIFBIWV9UWF9NTFQzX0JBU0UJCTB4MAorI2RlZmluZSBQSFlfREVWMUVfUkVHXzEzCQkweDEzCisjZGVmaW5lIFBIWV9ERVYxRV9SRUdfMTQJCTB4MTQKKyNkZWZpbmUgUEhZX0RFVjFFX1JFR180MQkJMHg0MQorI2RlZmluZSBQSFlfREVWMUVfUkVHX0E2CQkweGE2CisjZGVmaW5lIFBIWV9ERVYxRV9SRUdfMEM2CQkweDBjNgorI2RlZmluZSBQSFlfREVWMUVfUkVHXzBGRQkJMHgwZmUKKyNkZWZpbmUgUEhZX0RFVjFFX1JFR18xMjMJCTB4MTIzCisjZGVmaW5lIFBIWV9ERVYxRV9SRUdfMTQxCQkweDE0MQorI2RlZmluZSBQSFlfREVWMUVfUkVHXzE4OQkJMHgxODkKKyNkZWZpbmUgUEhZX0RFVjFFX1JFR18yMzQJCTB4MjM0CisKKy8qIEZpZWxkcyBvZiBQSFlfREVWMUVfUkVHXzBDNiAqLworI2RlZmluZSBQSFlfUE9XRVJfU0FWSU5HX1MJCTgKKyNkZWZpbmUgUEhZX1BPV0VSX1NBVklOR19NCQkweDMwMAorI2RlZmluZSBQSFlfUE9XRVJfU0FWSU5HX1RYCQkweDAKKworLyogRmllbGRzIG9mIFBIWV9ERVYxRV9SRUdfMTg5ICovCisjZGVmaW5lIERFU0NSQU1CTEVSX0NMRUFSX0VOCQkweDEKKworLyogRmllbGRzIG9mIFBIWV9ERVYxRV9SRUdfMjM0ICovCisjZGVmaW5lIFRSX09QRU5fTE9PUF9FTgkJCUJJVCgwKQorCisvKiBQb3J0IGRlYnVnIGNvdW50IHJlZ2lzdGVyICovCisjZGVmaW5lIERCR19DTlRfQkFTRQkJCTB4MzAxOAorI2RlZmluZSBEQkdfQ05UX1BPUlRfQkFTRQkJMHgxMDAKKyNkZWZpbmUgREJHX0NOVChwKQkJCShEQkdfQ05UX0JBU0UgKyBcCisJCQkJCShwKSAqIERCR19DTlRfUE9SVF9CQVNFKQorI2RlZmluZSBESVNfQ0xSCQkJCUJJVCgzMSkKKworLyogVmFsdWVzIG9mIFhUQUxfRlNFTF9TICovCisjZGVmaW5lIFhUQUxfNDBNSFoJCQkwCisjZGVmaW5lIFhUQUxfMjVNSFoJCQkxCisKKyNkZWZpbmUgUExMR1BfRU4JCQkweDc4MjAKKyNkZWZpbmUgRU5fQ09SRVBMTAkJCUJJVCgyKQorI2RlZmluZSBTV19DTEtTVwkJCUJJVCgxKQorI2RlZmluZSBTV19QTExHUAkJCUJJVCgwKQorCisjZGVmaW5lIFBMTEdQX0NSMAkJCTB4NzhhOAorI2RlZmluZSBSR19DT1JFUExMX0VOCQkJQklUKDIyKQorI2RlZmluZSBSR19DT1JFUExMX1BPU0RJVl9TCQkyMworI2RlZmluZSBSR19DT1JFUExMX1BPU0RJVl9NCQkweDM4MDAwMDAKKyNkZWZpbmUgUkdfQ09SRVBMTF9TRE1fUENXX1MJCTEKKyNkZWZpbmUgUkdfQ09SRVBMTF9TRE1fUENXX00JCTB4M2ZmZmZlCisjZGVmaW5lIFJHX0NPUkVQTExfU0RNX1BDV19DSEcJCUJJVCgwKQorCisvKiBUT1AgU2lnbmFscyBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVE9QX1NJR19TUgkJCTB4NzgwYworI2RlZmluZSBQQURfTUNNX1NNSV9FTgkJCUJJVCgwKQorI2RlZmluZSBQQURfRFVBTF9TR01JSV9FTgkJQklUKDEpCisKKy8qIFJHTUlJIGFuZCBTR01JSSBQTEwgY2xvY2sgKi8KKyNkZWZpbmUgQU5BX1BMTEdQX0NSMgkJCTB4NzhiMAorI2RlZmluZSBBTkFfUExMR1BfQ1I1CQkJMHg3OGJjCisKKy8qIEdQSU8gbW9kZSBkZWZpbmUgKi8KKyNkZWZpbmUgR1BJT19NT0RFX1JFR1MoeCkJCSgweDdjMGMgKyAoKCh4KSAvIDgpICogNCkpCisjZGVmaW5lIEdQSU9fTU9ERV9TCQkJNAorCisvKiBHUElPIEdST1VQIElPTEIgU01UMCBDb250cm9sICovCisjZGVmaW5lIFNNVDBfSU9MQgkJCTB4N2YwNAorI2RlZmluZSBTTVRfSU9MQl81X1NNSV9NRENfRU4JCUJJVCg1KQorCisvKiBVbmlxdWUgZmllbGRzIG9mIFBNQ1IgZm9yIE1UNzUzMSAqLworI2RlZmluZSBGT1JDRV9NT0RFX0VFRTFHCQlCSVQoMjUpCisjZGVmaW5lIEZPUkNFX01PREVfRUVFMTAwCQlCSVQoMjYpCisjZGVmaW5lIEZPUkNFX01PREVfVFhfRkMJCUJJVCgyNykKKyNkZWZpbmUgRk9SQ0VfTU9ERV9SWF9GQwkJQklUKDI4KQorI2RlZmluZSBGT1JDRV9NT0RFX0RQWAkJCUJJVCgyOSkKKyNkZWZpbmUgRk9SQ0VfTU9ERV9TUEQJCQlCSVQoMzApCisjZGVmaW5lIEZPUkNFX01PREVfTE5LCQkJQklUKDMxKQorI2RlZmluZSBGT1JDRV9NT0RFCQkJQklUKDE1KQorCisjZGVmaW5lIENISVBfUkVWCQkJMHg3ODFDCisjZGVmaW5lIENISVBfTkFNRV9TCQkJMTYKKyNkZWZpbmUgQ0hJUF9OQU1FX00JCQkweGZmZmYwMDAwCisjZGVmaW5lIENISVBfUkVWX1MJCQkwCisjZGVmaW5lIENISVBfUkVWX00JCQkweDBmCisjZGVmaW5lIENISVBfUkVWX0UxCQkJMHgwCisKKyNkZWZpbmUgQ0xLR0VOX0NUUkwJCQkweDc1MDAKKyNkZWZpbmUgQ0xLX1NLRVdfT1VUX1MJCQk4CisjZGVmaW5lIENMS19TS0VXX09VVF9NCQkJMHgzMDAKKyNkZWZpbmUgQ0xLX1NLRVdfSU5fUwkJCTYKKyNkZWZpbmUgQ0xLX1NLRVdfSU5fTQkJCTB4YzAKKyNkZWZpbmUgUlhDTEtfTk9fREVMQVkJCQlCSVQoNSkKKyNkZWZpbmUgVFhDTEtfTk9fUkVWRVJTRQkJQklUKDQpCisjZGVmaW5lIEdQX01PREVfUwkJCTEKKyNkZWZpbmUgR1BfTU9ERV9NCQkJMHgwNgorI2RlZmluZSBHUF9DTEtfRU4JCQlCSVQoMCkKKworI2RlZmluZSBDUEdDX0NUUkwJCQkweEIwCisjZGVmaW5lIENPTF9FTgkJCQlCSVQoMCkKKyNkZWZpbmUgQ09MX0NMS19FTgkJCUJJVCgxKQorI2RlZmluZSBDT0xfUlNUX04JCQlCSVQoMikKKyNkZWZpbmUgQ09MX0JVU1kJCQlCSVQoMykKKworLyogVmFsdWVzIG9mIEdQX01PREUgKi8KKyNkZWZpbmUgR1BfTU9ERV9SR01JSQkJCTAKKyNkZWZpbmUgR1BfTU9ERV9NSUkJCQkxCisjZGVmaW5lIEdQX01PREVfUkVWX01JSQkJCTIKKworLyogVmFsdWVzIG9mIENMS19TS0VXX0lOICovCisjZGVmaW5lIENMS19TS0VXX0lOX05PX0NIQU5HRQkJMAorI2RlZmluZSBDTEtfU0tFV19JTl9ERUxBWV8xMDBQUFMJMQorI2RlZmluZSBDTEtfU0tFV19JTl9ERUxBWV8yMDBQUFMJMgorI2RlZmluZSBDTEtfU0tFV19JTl9SRVZFUlNFCQkzCisKKy8qIFZhbHVlcyBvZiBDTEtfU0tFV19PVVQgKi8KKyNkZWZpbmUgQ0xLX1NLRVdfT1VUX05PX0NIQU5HRQkJMAorI2RlZmluZSBDTEtfU0tFV19PVVRfREVMQVlfMTAwUFBTCTEKKyNkZWZpbmUgQ0xLX1NLRVdfT1VUX0RFTEFZXzIwMFBQUwkyCisjZGVmaW5lIENMS19TS0VXX09VVF9SRVZFUlNFCQkzCisKKy8qIFByb3ByaWV0b3J5IENvbnRyb2wgUmVnaXN0ZXIgb2YgSW50ZXJuYWwgUGh5IGRldmljZSAweDFlICovCisjZGVmaW5lIFJYQURDX0NPTlRST0xfMwkJCTB4YzIKKyNkZWZpbmUgUlhBRENfTERPX0NPTlRST0xfMgkJMHhkMworCisvKiBQcm9wcmlldG9yeSBDb250cm9sIFJlZ2lzdGVyIG9mIEludGVybmFsIFBoeSBkZXZpY2UgMHgxZiAqLworI2RlZmluZSBUWFZMRF9EQV8yNzEJCQkweDI3MQorI2RlZmluZSBUWFZMRF9EQV8yNzIJCQkweDI3MgorI2RlZmluZSBUWFZMRF9EQV8yNzMJCQkweDI3MworCisvKiBncGlvIHBpbm11eCBwaW5zIGFuZCBmdW5jdGlvbnMgZGVmaW5lICovCitzdGF0aWMgaW50IGdwaW9faW50X3BpbnNbXSA9IHswfTsKK3N0YXRpYyBpbnQgZ3Bpb19pbnRfZnVuY3NbXSA9IHsxfTsKK3N0YXRpYyBpbnQgZ3Bpb19tZGNfcGluc1tdID0gezExLCAyMH07CitzdGF0aWMgaW50IGdwaW9fbWRjX2Z1bmNzW10gPSB7MiwgMn07CitzdGF0aWMgaW50IGdwaW9fbWRpb19waW5zW10gPSB7MTIsIDIxfTsKK3N0YXRpYyBpbnQgZ3Bpb19tZGlvX2Z1bmNzW10gPSB7MiwgMn07CisKK3N0YXRpYyBpbnQgbXQ3NTMxX3NldF9wb3J0X3NnbWlpX2ZvcmNlX21vZGUoc3RydWN0IGdzd19tdDc1M3ggKmdzdywgdTMyIHBvcnQsCisJCQkJCSAgICBzdHJ1Y3QgbXQ3NTN4X3BvcnRfY2ZnICpwb3J0X2NmZykKK3sKKwl1MzIgc3BlZWQsIHBvcnRfYmFzZSwgdmFsOworCWt0aW1lX3QgdGltZW91dDsKKwl1MzIgdGltZW91dF91czsKKworCWlmIChwb3J0IDwgNSB8fCBwb3J0ID49IE1UNzUzWF9OVU1fUE9SVFMpIHsKKwkJZGV2X2luZm8oZ3N3LT5kZXYsICJwb3J0ICVkIGlzIG5vdCBhIFNHTUlJIHBvcnRcbiIsIHBvcnQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwb3J0X2Jhc2UgPSBwb3J0IC0gNTsKKworCXN3aXRjaCAocG9ydF9jZmctPnNwZWVkKSB7CisJY2FzZSBNQUNfU1BEXzEwMDA6CisJCXNwZWVkID0gUkdfVFBIWV9TUEVFRF8xMDAwOworCQlicmVhazsKKwljYXNlIE1BQ19TUERfMjUwMDoKKwkJc3BlZWQgPSBSR19UUEhZX1NQRUVEXzI1MDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9pbmZvKGdzdy0+ZGV2LCAiaW52YWxpZCBTR01JSSBzcGVlZCBpZHggJWQgZm9yIHBvcnQgJWRcbiIsCisJCQkgcG9ydF9jZmctPnNwZWVkLCBwb3J0KTsKKworCQlzcGVlZCA9IFJHX1RQSFlfU1BFRURfMTAwMDsKKwl9CisKKwkvKiBTdGVwIDE6IFNwZWVkIHNlbGVjdCByZWdpc3RlciBzZXR0aW5nICovCisJdmFsID0gbXQ3NTN4X3JlZ19yZWFkKGdzdywgUEhZQV9DVFJMX1NJR05BTDMocG9ydF9iYXNlKSk7CisJdmFsICY9IH5SR19UUEhZX1NQRUVEX007CisJdmFsIHw9IHNwZWVkIDw8IFJHX1RQSFlfU1BFRURfUzsKKwltdDc1M3hfcmVnX3dyaXRlKGdzdywgUEhZQV9DVFJMX1NJR05BTDMocG9ydF9iYXNlKSwgdmFsKTsKKworCS8qIFN0ZXAgMiA6IERpc2FibGUgQU4gKi8KKwl2YWwgPSBtdDc1M3hfcmVnX3JlYWQoZ3N3LCBQQ1NfQ09OVFJPTF8xKHBvcnRfYmFzZSkpOworCXZhbCAmPSB+U0dNSUlfQU5fRU5BQkxFOworCW10NzUzeF9yZWdfd3JpdGUoZ3N3LCBQQ1NfQ09OVFJPTF8xKHBvcnRfYmFzZSksIHZhbCk7CisKKwkvKiBTdGVwIDM6IFNHTUlJIGZvcmNlIG1vZGUgc2V0dGluZyAqLworCXZhbCA9IG10NzUzeF9yZWdfcmVhZChnc3csIFNHTUlJX01PREUocG9ydF9iYXNlKSk7CisJdmFsICY9IH5TR01JSV9JRl9NT0RFX0FEVkVSVF9BTjsKKwl2YWwgJj0gflNHTUlJX0lGX01PREVfRk9SQ0VfU1BFRURfTTsKKwl2YWwgfD0gU0dNSUlfSUZfTU9ERV9GT1JDRV9TUEVFRF8xMDAwIDw8IFNHTUlJX0lGX01PREVfRk9SQ0VfU1BFRURfUzsKKwl2YWwgfD0gU0dNSUlfSUZfTU9ERV9GT1JDRV9EVVBMRVg7CisJLyogRm9yIHNnbWlpIGZvcmNlIG1vZGUsIDAgaXMgZnVsbCBkdXBsZXggYW5kIDEgaXMgaGFsZiBkdXBsZXggKi8KKwlpZiAocG9ydF9jZmctPmR1cGxleCkKKwkJdmFsICY9IH5TR01JSV9JRl9NT0RFX0ZPUkNFX0RVUExFWDsKKworCW10NzUzeF9yZWdfd3JpdGUoZ3N3LCBTR01JSV9NT0RFKHBvcnRfYmFzZSksIHZhbCk7CisKKwkvKiBTdGVwIDQ6IFhYWDogRGlzYWJsZSBMaW5rIHBhcnRuZXIncyBBTiBhbmQgc2V0IGZvcmNlIG1vZGUgKi8KKworCS8qIFN0ZXAgNTogWFhYOiBTcGVjaWFsIHNldHRpbmcgZm9yIFBIWUEgPT0+IHJlc2VydmVkIGZvciBmbGV4aWJsZSAqLworCisJLyogU3RlcCA2IDogUmVsZWFzZSBQSFlBIHBvd2VyIGRvd24gc3RhdGUgKi8KKwl2YWwgPSBtdDc1M3hfcmVnX3JlYWQoZ3N3LCBRUEhZX1BXUl9TVEFURV9DVFJMKHBvcnRfYmFzZSkpOworCXZhbCAmPSB+UEhZQV9QV0Q7CisJbXQ3NTN4X3JlZ193cml0ZShnc3csIFFQSFlfUFdSX1NUQVRFX0NUUkwocG9ydF9iYXNlKSwgdmFsKTsKKworCS8qIFN0ZXAgNyA6IFBvbGxpbmcgU0dNSUlfTElOS19TVEFUVVMgKi8KKwl0aW1lb3V0X3VzID0gMjAwMDAwMDsKKwl0aW1lb3V0ID0ga3RpbWVfYWRkX3VzKGt0aW1lX2dldCgpLCB0aW1lb3V0X3VzKTsKKwl3aGlsZSAoMSkgeworCQl2YWwgPSBtdDc1M3hfcmVnX3JlYWQoZ3N3LCBQQ1NfQ09OVFJPTF8xKHBvcnRfYmFzZSkpOworCQl2YWwgJj0gU0dNSUlfTElOS19TVEFUVVM7CisKKwkJaWYgKHZhbCkKKwkJCWJyZWFrOworCisJCWlmIChrdGltZV9jb21wYXJlKGt0aW1lX2dldCgpLCB0aW1lb3V0KSA+IDApCisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdDc1MzFfc2V0X3BvcnRfc2dtaWlfYW5fbW9kZShzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3LCB1MzIgcG9ydCwKKwkJCQkJIHN0cnVjdCBtdDc1M3hfcG9ydF9jZmcgKnBvcnRfY2ZnKQoreworCXUzMiBzcGVlZCwgcG9ydF9iYXNlLCB2YWw7CisJa3RpbWVfdCB0aW1lb3V0OworCXUzMiB0aW1lb3V0X3VzOworCisJaWYgKHBvcnQgPCA1IHx8IHBvcnQgPj0gTVQ3NTNYX05VTV9QT1JUUykgeworCQlkZXZfaW5mbyhnc3ctPmRldiwgInBvcnQgJWQgaXMgbm90IGEgU0dNSUkgcG9ydFxuIiwgcG9ydCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXBvcnRfYmFzZSA9IHBvcnQgLSA1OworCisJc3dpdGNoIChwb3J0X2NmZy0+c3BlZWQpIHsKKwljYXNlIE1BQ19TUERfMTAwMDoKKwkJc3BlZWQgPSBSR19UUEhZX1NQRUVEXzEwMDA7CisJCWJyZWFrOworCWNhc2UgTUFDX1NQRF8yNTAwOgorCQlzcGVlZCA9IFJHX1RQSFlfU1BFRURfMjUwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2luZm8oZ3N3LT5kZXYsICJpbnZhbGlkIFNHTUlJIHNwZWVkIGlkeCAlZCBmb3IgcG9ydCAlZFxuIiwKKwkJCSBwb3J0X2NmZy0+c3BlZWQsIHBvcnQpOworCisJCXNwZWVkID0gUkdfVFBIWV9TUEVFRF8xMDAwOworCX0KKworCS8qIFN0ZXAgMTogU3BlZWQgc2VsZWN0IHJlZ2lzdGVyIHNldHRpbmcgKi8KKwl2YWwgPSBtdDc1M3hfcmVnX3JlYWQoZ3N3LCBQSFlBX0NUUkxfU0lHTkFMMyhwb3J0X2Jhc2UpKTsKKwl2YWwgJj0gflJHX1RQSFlfU1BFRURfTTsKKwl2YWwgfD0gc3BlZWQgPDwgUkdfVFBIWV9TUEVFRF9TOworCW10NzUzeF9yZWdfd3JpdGUoZ3N3LCBQSFlBX0NUUkxfU0lHTkFMMyhwb3J0X2Jhc2UpLCB2YWwpOworCisJLyogU3RlcCAyOiBSZW1vdGUgZmF1bHQgZGlzYWJsZSAqLworCXZhbCA9IG10NzUzeF9yZWdfcmVhZChnc3csIFNHTUlJX01PREUocG9ydCkpOworCXZhbCB8PSBTR01JSV9SRU1PVEVfRkFVTFRfRElTOworCW10NzUzeF9yZWdfd3JpdGUoZ3N3LCBTR01JSV9NT0RFKHBvcnQpLCB2YWwpOworCisJLyogU3RlcCAzOiBTZXR0aW5nIExpbmsgcGFydG5lcidzIEFOIGVuYWJsZSA9IDEgKi8KKworCS8qIFN0ZXAgNDogU2V0dGluZyBMaW5rIHBhcnRuZXIncyBkZXZpY2UgYWJpbGl0eSBmb3Igc3BlZWQvZHVwbGV4ICovCisKKwkvKiBTdGVwIDU6IEFOIHJlLXN0YXJ0ICovCisJdmFsID0gbXQ3NTN4X3JlZ19yZWFkKGdzdywgUENTX0NPTlRST0xfMShwb3J0KSk7CisJdmFsIHw9IFNHTUlJX0FOX1JFU1RBUlQ7CisJbXQ3NTN4X3JlZ193cml0ZShnc3csIFBDU19DT05UUk9MXzEocG9ydCksIHZhbCk7CisKKwkvKiBTdGVwIDY6IFNwZWNpYWwgc2V0dGluZyBmb3IgUEhZQSA9PT4gcmVzZXJ2ZWQgZm9yIGZsZXhpYmxlICovCisKKwkvKiBTdGVwIDcgOiBQb2xsaW5nIFNHTUlJX0xJTktfU1RBVFVTICovCisJdGltZW91dF91cyA9IDIwMDAwMDA7CisJdGltZW91dCA9IGt0aW1lX2FkZF91cyhrdGltZV9nZXQoKSwgdGltZW91dF91cyk7CisJd2hpbGUgKDEpIHsKKwkJdmFsID0gbXQ3NTN4X3JlZ19yZWFkKGdzdywgUENTX0NPTlRST0xfMShwb3J0X2Jhc2UpKTsKKwkJdmFsICY9IFNHTUlJX0xJTktfU1RBVFVTOworCisJCWlmICh2YWwpCisJCQlicmVhazsKKworCQlpZiAoa3RpbWVfY29tcGFyZShrdGltZV9nZXQoKSwgdGltZW91dCkgPiAwKQorCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG10NzUzMV9zZ21paV9zc2Moc3RydWN0IGdzd19tdDc1M3ggKmdzdywgdTMyIHBvcnQsIGludCBlbmFibGUpCit7CisJdTMyIHZhbDsKKwl1MzIgcG9ydF9iYXNlID0gcG9ydCAtIDU7CisKKwlpZiAoZW5hYmxlKSB7CisJCXZhbCA9IG10NzUzeF9yZWdfcmVhZChnc3csIEFOQV9DS0JHKHBvcnRfYmFzZSkpOworCQl2YWwgfD0gU1NVU0JfUExMX1NTQ19FTjsKKwkJbXQ3NTN4X3JlZ193cml0ZShnc3csIEFOQV9DS0JHKHBvcnRfYmFzZSksIHZhbCk7CisKKwkJdmFsID0gbXQ3NTN4X3JlZ19yZWFkKGdzdywgQU5BX0RBX0ZPUkNFX01PREUxKHBvcnRfYmFzZSkpOworCQl2YWwgfD0gRk9SQ0VfUExMX1NTQ19FTjsKKwkJbXQ3NTN4X3JlZ193cml0ZShnc3csIEFOQV9EQV9GT1JDRV9NT0RFMShwb3J0X2Jhc2UpLCB2YWwpOworCX0gZWxzZSB7CisJCXZhbCA9IG10NzUzeF9yZWdfcmVhZChnc3csIEFOQV9DS0JHKHBvcnRfYmFzZSkpOworCQl2YWwgJj0gflNTVVNCX1BMTF9TU0NfRU47CisJCW10NzUzeF9yZWdfd3JpdGUoZ3N3LCBBTkFfQ0tCRyhwb3J0X2Jhc2UpLCB2YWwpOworCisJCXZhbCA9IG10NzUzeF9yZWdfcmVhZChnc3csIEFOQV9EQV9GT1JDRV9NT0RFMShwb3J0X2Jhc2UpKTsKKwkJdmFsICY9IH5GT1JDRV9QTExfU1NDX0VOOworCQltdDc1M3hfcmVnX3dyaXRlKGdzdywgQU5BX0RBX0ZPUkNFX01PREUxKHBvcnRfYmFzZSksIHZhbCk7CisJfQorfQorCitzdGF0aWMgaW50IG10NzUzMV9zZXRfcG9ydF9yZ21paShzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3LCB1MzIgcG9ydCkKK3sKKwl1MzIgdmFsOworCisJaWYgKHBvcnQgIT0gNSkgeworCQlkZXZfaW5mbyhnc3ctPmRldiwgIlJHTUlJIG1vZGUgaXMgbm90IGF2YWlsYWJsZSBmb3IgcG9ydCAlZFxuIiwKKwkJCSBwb3J0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdmFsID0gbXQ3NTN4X3JlZ19yZWFkKGdzdywgQ0xLR0VOX0NUUkwpOworCXZhbCB8PSBHUF9DTEtfRU47CisJdmFsICY9IH5HUF9NT0RFX007CisJdmFsIHw9IEdQX01PREVfUkdNSUkgPDwgR1BfTU9ERV9TOworCXZhbCB8PSBUWENMS19OT19SRVZFUlNFOworCXZhbCB8PSBSWENMS19OT19ERUxBWTsKKwl2YWwgJj0gfkNMS19TS0VXX0lOX007CisJdmFsIHw9IENMS19TS0VXX0lOX05PX0NIQU5HRSA8PCBDTEtfU0tFV19JTl9TOworCXZhbCAmPSB+Q0xLX1NLRVdfT1VUX007CisJdmFsIHw9IENMS19TS0VXX09VVF9OT19DSEFOR0UgPDwgQ0xLX1NLRVdfT1VUX1M7CisJbXQ3NTN4X3JlZ193cml0ZShnc3csIENMS0dFTl9DVFJMLCB2YWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXQ3NTMxX21hY19wb3J0X3NldHVwKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3csIHUzMiBwb3J0LAorCQkJCSBzdHJ1Y3QgbXQ3NTN4X3BvcnRfY2ZnICpwb3J0X2NmZykKK3sKKwl1MzIgcG1jcjsKKwl1MzIgc3BlZWQ7CisKKwlpZiAocG9ydCA8IDUgfHwgcG9ydCA+PSBNVDc1M1hfTlVNX1BPUlRTKSB7CisJCWRldl9pbmZvKGdzdy0+ZGV2LCAicG9ydCAlZCBpcyBub3QgYSBNQUMgcG9ydFxuIiwgcG9ydCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChwb3J0X2NmZy0+ZW5hYmxlZCkgeworCQlwbWNyID0gKElQR185NkJJVF9XSVRIX1NIT1JUX0lQRyA8PCBJUEdfQ0ZHX1MpIHwKKwkJICAgICAgIE1BQ19NT0RFIHwgTUFDX1RYX0VOIHwgTUFDX1JYX0VOIHwKKwkJICAgICAgIEJLT0ZGX0VOIHwgQkFDS1BSX0VOOworCisJCWlmIChwb3J0X2NmZy0+Zm9yY2VfbGluaykgeworCQkJLyogUE1DUidzIHNwZWVkIGZpZWxkIDB4MTEgaXMgcmVzZXJ2ZWQsCisJCQkgKiBzdyBzaG91bGQgc2V0IDB4MTAKKwkJCSAqLworCQkJc3BlZWQgPSBwb3J0X2NmZy0+c3BlZWQ7CisJCQlpZiAocG9ydF9jZmctPnNwZWVkID09IE1BQ19TUERfMjUwMCkKKwkJCQlzcGVlZCA9IE1BQ19TUERfMTAwMDsKKworCQkJcG1jciB8PSBGT1JDRV9NT0RFX0xOSyB8IEZPUkNFX0xJTksgfAorCQkJCUZPUkNFX01PREVfU1BEIHwgRk9SQ0VfTU9ERV9EUFggfAorCQkJCUZPUkNFX01PREVfUlhfRkMgfCBGT1JDRV9NT0RFX1RYX0ZDIHwKKwkJCQlGT1JDRV9SWF9GQyB8IEZPUkNFX1RYX0ZDIHwKKwkJCQkoc3BlZWQgPDwgRk9SQ0VfU1BEX1MpOworCisJCQlpZiAocG9ydF9jZmctPmR1cGxleCkKKwkJCQlwbWNyIHw9IEZPUkNFX0RQWDsKKwkJfQorCX0gZWxzZSB7CisJCXBtY3IgPSBGT1JDRV9NT0RFX0xOSzsKKwl9CisKKwlzd2l0Y2ggKHBvcnRfY2ZnLT5waHlfbW9kZSkgeworCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOgorCQltdDc1MzFfc2V0X3BvcnRfcmdtaWkoZ3N3LCBwb3J0KTsKKwkJYnJlYWs7CisJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6CisJCWlmIChwb3J0X2NmZy0+Zm9yY2VfbGluaykKKwkJCW10NzUzMV9zZXRfcG9ydF9zZ21paV9mb3JjZV9tb2RlKGdzdywgcG9ydCwgcG9ydF9jZmcpOworCQllbHNlCisJCQltdDc1MzFfc2V0X3BvcnRfc2dtaWlfYW5fbW9kZShnc3csIHBvcnQsIHBvcnRfY2ZnKTsKKworCQltdDc1MzFfc2dtaWlfc3NjKGdzdywgcG9ydCwgcG9ydF9jZmctPnNzY19vbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmIChwb3J0X2NmZy0+ZW5hYmxlZCkKKwkJCWRldl9pbmZvKGdzdy0+ZGV2LCAiJXMgaXMgbm90IHN1cHBvcnRlZCBieSBwb3J0ICVkXG4iLAorCQkJCSBwaHlfbW9kZXMocG9ydF9jZmctPnBoeV9tb2RlKSwgcG9ydCk7CisKKwkJcG1jciA9IEZPUkNFX01PREVfTE5LOworCX0KKworCW10NzUzeF9yZWdfd3JpdGUoZ3N3LCBQTUNSKHBvcnQpLCBwbWNyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtdDc1MzFfY29yZV9wbGxfc2V0dXAoc3RydWN0IGdzd19tdDc1M3ggKmdzdykKK3sKKwl1MzIgdmFsOworCXUzMiB0b3Bfc2lnOworCXUzMiBod3N0cmFwOworCXUzMiB4dGFsOworCisJdmFsID0gbXQ3NTN4X3JlZ19yZWFkKGdzdywgQ0hJUF9SRVYpOworCXRvcF9zaWcgPSBtdDc1M3hfcmVnX3JlYWQoZ3N3LCBUT1BfU0lHX1NSKTsKKwlod3N0cmFwID0gbXQ3NTN4X3JlZ19yZWFkKGdzdywgSFdTVFJBUCk7CisJaWYgKCh2YWwgJiBDSElQX1JFVl9NKSA+IDApCisJCXh0YWwgPSAodG9wX3NpZyAmIFBBRF9NQ01fU01JX0VOKSA/IFhUQUxfNDBNSFogOiBYVEFMXzI1TUhaOworCWVsc2UKKwkJeHRhbCA9IChod3N0cmFwICYgWFRBTF9GU0VMX00pID4+IFhUQUxfRlNFTF9TOworCisJLyogZHVtcCBIVyBzdHJhcCBhbmQgWFRBTCAqLworCWRldl9pbmZvKGdzdy0+ZGV2LCAiSFdTVFJBUD0weCV4IFhUQUw9JWRNSHpcbiIsIGh3c3RyYXAsCisJCSAoeHRhbCA9PSBYVEFMXzI1TUhaKSA/IDI1IDogNDApOworCisJLyogT25seSBCRSBuZWVkcyBhZGRpdGlvbmFsIHNldHRpbmcgKi8KKwlpZiAodG9wX3NpZyAmIFBBRF9EVUFMX1NHTUlJX0VOKQorCQlyZXR1cm47CisKKwkvKiBEaXNhYmxlIFBvcnQ1IFNHTUlJIGNsZWFybHkgKi8KKwl2YWwgPSBtdDc1M3hfcmVnX3JlYWQoZ3N3LCBQSFlBX0FOQV9TWVNQTEwoMCkpOworCXZhbCAmPSB+UkdfVlVTQjEwX09OOworCW10NzUzeF9yZWdfd3JpdGUoZ3N3LCBQSFlBX0FOQV9TWVNQTEwoMCksIHZhbCk7CisKKwlzd2l0Y2ggKHh0YWwpIHsKKwljYXNlIFhUQUxfMjVNSFo6CisJCS8qIFN0ZXAgMSA6IERpc2FibGUgTVQ3NTMxIENPUkVQTEwgKi8KKwkJdmFsID0gbXQ3NTN4X3JlZ19yZWFkKGdzdywgUExMR1BfRU4pOworCQl2YWwgJj0gfkVOX0NPUkVQTEw7CisJCW10NzUzeF9yZWdfd3JpdGUoZ3N3LCBQTExHUF9FTiwgdmFsKTsKKworCQkvKiBTdGVwIDI6IHN3aXRjaCB0byBYVEFMIG91dHB1dCAqLworCQl2YWwgPSBtdDc1M3hfcmVnX3JlYWQoZ3N3LCBQTExHUF9FTik7CisJCXZhbCB8PSBTV19DTEtTVzsKKwkJbXQ3NTN4X3JlZ193cml0ZShnc3csIFBMTEdQX0VOLCB2YWwpOworCisJCXZhbCA9IG10NzUzeF9yZWdfcmVhZChnc3csIFBMTEdQX0NSMCk7CisJCXZhbCAmPSB+UkdfQ09SRVBMTF9FTjsKKwkJbXQ3NTN4X3JlZ193cml0ZShnc3csIFBMTEdQX0NSMCwgdmFsKTsKKworCQkvKiBTdGVwIDM6IGRpc2FibGUgUExMR1AgYW5kIGVuYWJsZSBwcm9ncmFtIFBMTEdQICovCisJCXZhbCA9IG10NzUzeF9yZWdfcmVhZChnc3csIFBMTEdQX0VOKTsKKwkJdmFsIHw9IFNXX1BMTEdQOworCQltdDc1M3hfcmVnX3dyaXRlKGdzdywgUExMR1BfRU4sIHZhbCk7CisKKwkJLyogU3RlcCA0OiBwcm9ncmFtIENPUkVQTEwgb3V0cHV0IGZyZXF1ZW5jeSB0byA1MDBNSHogKi8KKwkJdmFsID0gbXQ3NTN4X3JlZ19yZWFkKGdzdywgUExMR1BfQ1IwKTsKKwkJdmFsICY9IH5SR19DT1JFUExMX1BPU0RJVl9NOworCQl2YWwgfD0gMiA8PCBSR19DT1JFUExMX1BPU0RJVl9TOworCQltdDc1M3hfcmVnX3dyaXRlKGdzdywgUExMR1BfQ1IwLCB2YWwpOworCQl1c2xlZXBfcmFuZ2UoMjUsIDM1KTsKKworCQl2YWwgPSBtdDc1M3hfcmVnX3JlYWQoZ3N3LCBQTExHUF9DUjApOworCQl2YWwgJj0gflJHX0NPUkVQTExfU0RNX1BDV19NOworCQl2YWwgfD0gMHgxNDAwMDAgPDwgUkdfQ09SRVBMTF9TRE1fUENXX1M7CisJCW10NzUzeF9yZWdfd3JpdGUoZ3N3LCBQTExHUF9DUjAsIHZhbCk7CisKKwkJLyogU2V0IGZlZWRiYWNrIGRpdmlkZSByYXRpbyB1cGRhdGUgc2lnbmFsIHRvIGhpZ2ggKi8KKwkJdmFsID0gbXQ3NTN4X3JlZ19yZWFkKGdzdywgUExMR1BfQ1IwKTsKKwkJdmFsIHw9IFJHX0NPUkVQTExfU0RNX1BDV19DSEc7CisJCW10NzUzeF9yZWdfd3JpdGUoZ3N3LCBQTExHUF9DUjAsIHZhbCk7CisJCS8qIFdhaXQgZm9yIGF0IGxlYXN0IDE2IFhUQUwgY2xvY2tzICovCisJCXVzbGVlcF9yYW5nZSgxMCwgMjApOworCisJCS8qIFN0ZXAgNTogc2V0IGZlZWRiYWNrIGRpdmlkZSByYXRpbyB1cGRhdGUgc2lnbmFsIHRvIGxvdyAqLworCQl2YWwgPSBtdDc1M3hfcmVnX3JlYWQoZ3N3LCBQTExHUF9DUjApOworCQl2YWwgJj0gflJHX0NPUkVQTExfU0RNX1BDV19DSEc7CisJCW10NzUzeF9yZWdfd3JpdGUoZ3N3LCBQTExHUF9DUjAsIHZhbCk7CisKKwkJLyogRW5hYmxlIDMyNU0gY2xvY2sgZm9yIFNHTUlJICovCisJCW10NzUzeF9yZWdfd3JpdGUoZ3N3LCBBTkFfUExMR1BfQ1I1LCAweGFkMDAwMCk7CisKKwkJLyogRW5hYmxlIDI1MFNTQyBjbG9jayBmb3IgUkdNSUkgKi8KKwkJbXQ3NTN4X3JlZ193cml0ZShnc3csIEFOQV9QTExHUF9DUjIsIDB4NGY0MDAwMCk7CisKKwkJLyogU3RlcCA2OiBFbmFibGUgTVQ3NTMxIFBMTCAqLworCQl2YWwgPSBtdDc1M3hfcmVnX3JlYWQoZ3N3LCBQTExHUF9DUjApOworCQl2YWwgfD0gUkdfQ09SRVBMTF9FTjsKKwkJbXQ3NTN4X3JlZ193cml0ZShnc3csIFBMTEdQX0NSMCwgdmFsKTsKKworCQl2YWwgPSBtdDc1M3hfcmVnX3JlYWQoZ3N3LCBQTExHUF9FTik7CisJCXZhbCB8PSBFTl9DT1JFUExMOworCQltdDc1M3hfcmVnX3dyaXRlKGdzdywgUExMR1BfRU4sIHZhbCk7CisJCXVzbGVlcF9yYW5nZSgyNSwgMzUpOworCisJCWJyZWFrOworCWNhc2UgWFRBTF80ME1IWjoKKwkJLyogU3RlcCAxIDogRGlzYWJsZSBNVDc1MzEgQ09SRVBMTCAqLworCQl2YWwgPSBtdDc1M3hfcmVnX3JlYWQoZ3N3LCBQTExHUF9FTik7CisJCXZhbCAmPSB+RU5fQ09SRVBMTDsKKwkJbXQ3NTN4X3JlZ193cml0ZShnc3csIFBMTEdQX0VOLCB2YWwpOworCisJCS8qIFN0ZXAgMjogc3dpdGNoIHRvIFhUQUwgb3V0cHV0ICovCisJCXZhbCA9IG10NzUzeF9yZWdfcmVhZChnc3csIFBMTEdQX0VOKTsKKwkJdmFsIHw9IFNXX0NMS1NXOworCQltdDc1M3hfcmVnX3dyaXRlKGdzdywgUExMR1BfRU4sIHZhbCk7CisKKwkJdmFsID0gbXQ3NTN4X3JlZ19yZWFkKGdzdywgUExMR1BfQ1IwKTsKKwkJdmFsICY9IH5SR19DT1JFUExMX0VOOworCQltdDc1M3hfcmVnX3dyaXRlKGdzdywgUExMR1BfQ1IwLCB2YWwpOworCisJCS8qIFN0ZXAgMzogZGlzYWJsZSBQTExHUCBhbmQgZW5hYmxlIHByb2dyYW0gUExMR1AgKi8KKwkJdmFsID0gbXQ3NTN4X3JlZ19yZWFkKGdzdywgUExMR1BfRU4pOworCQl2YWwgfD0gU1dfUExMR1A7CisJCW10NzUzeF9yZWdfd3JpdGUoZ3N3LCBQTExHUF9FTiwgdmFsKTsKKworCQkvKiBTdGVwIDQ6IHByb2dyYW0gQ09SRVBMTCBvdXRwdXQgZnJlcXVlbmN5IHRvIDUwME1IeiAqLworCQl2YWwgPSBtdDc1M3hfcmVnX3JlYWQoZ3N3LCBQTExHUF9DUjApOworCQl2YWwgJj0gflJHX0NPUkVQTExfUE9TRElWX007CisJCXZhbCB8PSAyIDw8IFJHX0NPUkVQTExfUE9TRElWX1M7CisJCW10NzUzeF9yZWdfd3JpdGUoZ3N3LCBQTExHUF9DUjAsIHZhbCk7CisJCXVzbGVlcF9yYW5nZSgyNSwgMzUpOworCisJCXZhbCA9IG10NzUzeF9yZWdfcmVhZChnc3csIFBMTEdQX0NSMCk7CisJCXZhbCAmPSB+UkdfQ09SRVBMTF9TRE1fUENXX007CisJCXZhbCB8PSAweDE5MDAwMCA8PCBSR19DT1JFUExMX1NETV9QQ1dfUzsKKwkJbXQ3NTN4X3JlZ193cml0ZShnc3csIFBMTEdQX0NSMCwgdmFsKTsKKworCQkvKiBTZXQgZmVlZGJhY2sgZGl2aWRlIHJhdGlvIHVwZGF0ZSBzaWduYWwgdG8gaGlnaCAqLworCQl2YWwgPSBtdDc1M3hfcmVnX3JlYWQoZ3N3LCBQTExHUF9DUjApOworCQl2YWwgfD0gUkdfQ09SRVBMTF9TRE1fUENXX0NIRzsKKwkJbXQ3NTN4X3JlZ193cml0ZShnc3csIFBMTEdQX0NSMCwgdmFsKTsKKwkJLyogV2FpdCBmb3IgYXQgbGVhc3QgMTYgWFRBTCBjbG9ja3MgKi8KKwkJdXNsZWVwX3JhbmdlKDEwLCAyMCk7CisKKwkJLyogU3RlcCA1OiBzZXQgZmVlZGJhY2sgZGl2aWRlIHJhdGlvIHVwZGF0ZSBzaWduYWwgdG8gbG93ICovCisJCXZhbCA9IG10NzUzeF9yZWdfcmVhZChnc3csIFBMTEdQX0NSMCk7CisJCXZhbCAmPSB+UkdfQ09SRVBMTF9TRE1fUENXX0NIRzsKKwkJbXQ3NTN4X3JlZ193cml0ZShnc3csIFBMTEdQX0NSMCwgdmFsKTsKKworCQkvKiBFbmFibGUgMzI1TSBjbG9jayBmb3IgU0dNSUkgKi8KKwkJbXQ3NTN4X3JlZ193cml0ZShnc3csIEFOQV9QTExHUF9DUjUsIDB4YWQwMDAwKTsKKworCQkvKiBFbmFibGUgMjUwU1NDIGNsb2NrIGZvciBSR01JSSAqLworCQltdDc1M3hfcmVnX3dyaXRlKGdzdywgQU5BX1BMTEdQX0NSMiwgMHg0ZjQwMDAwKTsKKworCQkvKiBTdGVwIDY6IEVuYWJsZSBNVDc1MzEgUExMICovCisJCXZhbCA9IG10NzUzeF9yZWdfcmVhZChnc3csIFBMTEdQX0NSMCk7CisJCXZhbCB8PSBSR19DT1JFUExMX0VOOworCQltdDc1M3hfcmVnX3dyaXRlKGdzdywgUExMR1BfQ1IwLCB2YWwpOworCisJCXZhbCA9IG10NzUzeF9yZWdfcmVhZChnc3csIFBMTEdQX0VOKTsKKwkJdmFsIHw9IEVOX0NPUkVQTEw7CisJCW10NzUzeF9yZWdfd3JpdGUoZ3N3LCBQTExHUF9FTiwgdmFsKTsKKwkJdXNsZWVwX3JhbmdlKDI1LCAzNSk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBtdDc1MzFfaW50ZXJuYWxfcGh5X2NhbGlicmF0aW9uKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3cpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXQ3NTMxX3N3X2RldGVjdChzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3LCBzdHJ1Y3QgY2hpcF9yZXYgKmNyZXYpCit7CisJdTMyIHJldiwgdG9wc2lnOworCisJcmV2ID0gbXQ3NTN4X3JlZ19yZWFkKGdzdywgQ0hJUF9SRVYpOworCisJaWYgKCgocmV2ICYgQ0hJUF9OQU1FX00pID4+IENISVBfTkFNRV9TKSA9PSBNVDc1MzEpIHsKKwkJaWYgKGNyZXYpIHsKKwkJCXRvcHNpZyA9IG10NzUzeF9yZWdfcmVhZChnc3csIFRPUF9TSUdfU1IpOworCisJCQljcmV2LT5yZXYgPSByZXYgJiBDSElQX1JFVl9NOworCQkJY3Jldi0+bmFtZSA9IHRvcHNpZyAmIFBBRF9EVUFMX1NHTUlJX0VOID8KKwkJCQkgICAgICJNVDc1MzFBRSIgOiAiTVQ3NTMxQkUiOworCQl9CisKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyB2b2lkIHBpbm11eF9zZXRfbXV4Xzc1MzEoc3RydWN0IGdzd19tdDc1M3ggKmdzdywgdTMyIHBpbiwgdTMyIG1vZGUpCit7CisJdTMyIHZhbDsKKworCXZhbCA9IG10NzUzeF9yZWdfcmVhZChnc3csIEdQSU9fTU9ERV9SRUdTKHBpbikpOworCXZhbCAmPSB+KDB4ZiA8PCAocGluICYgNykgKiBHUElPX01PREVfUyk7CisJdmFsIHw9IG1vZGUgPDwgKHBpbiAmIDcpICogR1BJT19NT0RFX1M7CisJbXQ3NTN4X3JlZ193cml0ZShnc3csIEdQSU9fTU9ERV9SRUdTKHBpbiksIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgbXQ3NTMxX3NldF9ncGlvX3Bpbm11eChzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3KQoreworCXUzMiBncm91cCA9IDA7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGdzdy0+ZGV2LT5vZl9ub2RlOworCisJLyogU2V0IEdQSU8gMCBpbnRlcnJ1cHQgbW9kZSAqLworCXBpbm11eF9zZXRfbXV4Xzc1MzEoZ3N3LCBncGlvX2ludF9waW5zWzBdLCBncGlvX2ludF9mdW5jc1swXSk7CisKKwlvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgIm1lZGlhdGVrLG1kaW9fbWFzdGVyX3Bpbm11eCIsICZncm91cCk7CisKKwkvKiBncm91cCA9IDA6IGRvIG5vdGhpbmcsIDE6IDFzdCBncm91cCAoQUUpLCAyOiAybmQgZ3JvdXAgKEJFKSAqLworCWlmIChncm91cCA+IDAgJiYgZ3JvdXAgPD0gMikgeworCQlncm91cC0tOworCQlwaW5tdXhfc2V0X211eF83NTMxKGdzdywgZ3Bpb19tZGNfcGluc1tncm91cF0sCisJCQkJICAgIGdwaW9fbWRjX2Z1bmNzW2dyb3VwXSk7CisJCXBpbm11eF9zZXRfbXV4Xzc1MzEoZ3N3LCBncGlvX21kaW9fcGluc1tncm91cF0sCisJCQkJICAgIGdwaW9fbWRpb19mdW5jc1tncm91cF0pOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtdDc1MzFfcGh5X3BsbF9zZXR1cChzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3KQoreworCXUzMiBod3N0cmFwOworCXUzMiB2YWw7CisKKwl2YWwgPSBtdDc1M3hfcmVnX3JlYWQoZ3N3LCBDSElQX1JFVik7CisJaWYgKCh2YWwgJiBDSElQX1JFVl9NKSA+IDApCisJCXJldHVybjsKKworCWh3c3RyYXAgPSBtdDc1M3hfcmVnX3JlYWQoZ3N3LCBIV1NUUkFQKTsKKworCXN3aXRjaCAoKGh3c3RyYXAgJiBYVEFMX0ZTRUxfTSkgPj4gWFRBTF9GU0VMX1MpIHsKKwljYXNlIFhUQUxfMjVNSFo6CisJCS8qIGRpc2FibGUgcGxsIGF1dG8gY2FsaWJyYXRpb24gKi8KKwkJZ3N3LT5tbWRfd3JpdGUoZ3N3LCAwLCBQSFlfREVWMUYsIFBIWV9ERVYxRl9SRUdfMTA0LCAweDYwOCk7CisKKwkJLyogY2hhbmdlIHBsbCBzZWwgKi8KKwkJdmFsID0gZ3N3LT5tbWRfcmVhZChnc3csIDAsIFBIWV9ERVYxRiwKKwkJCQkgICAgIFBIWV9ERVYxRl9SRUdfNDAzKTsKKwkJdmFsICY9IH4oUEhZX1BMTF9NKTsKKwkJdmFsIHw9IFBIWV9QTExfU0VMKDMpOworCQlnc3ctPm1tZF93cml0ZShnc3csIDAsIFBIWV9ERVYxRiwgUEhZX0RFVjFGX1JFR180MDMsIHZhbCk7CisKKwkJLyogc2V0IGRpdmlkZXIgcmF0aW8gKi8KKwkJZ3N3LT5tbWRfd3JpdGUoZ3N3LCAwLCBQSFlfREVWMUYsCisJCQkgICAgICAgUEhZX0RFVjFGX1JFR18xMEEsIDB4MTAwOSk7CisKKwkJLyogc2V0IGRpdmlkZXIgcmF0aW8gKi8KKwkJZ3N3LT5tbWRfd3JpdGUoZ3N3LCAwLCBQSFlfREVWMUYsIFBIWV9ERVYxRl9SRUdfMTBCLCAweDdjNik7CisKKwkJLyogY2FwYWNpdGFuY2UgYW5kIHJlc2lzdGFuY2UgYWRqdXN0bWVudCAqLworCQlnc3ctPm1tZF93cml0ZShnc3csIDAsIFBIWV9ERVYxRiwKKwkJCSAgICAgICBQSFlfREVWMUZfUkVHXzEwQywgMHhhOGJlKTsKKworCQlicmVhazsKKwljYXNlIFhUQUxfNDBNSFo6CisJCS8qIGRpc2FibGUgcGxsIGF1dG8gY2FsaWJyYXRpb24gKi8KKwkJZ3N3LT5tbWRfd3JpdGUoZ3N3LCAwLCBQSFlfREVWMUYsIFBIWV9ERVYxRl9SRUdfMTA0LCAweDYwOCk7CisKKwkJLyogY2hhbmdlIHBsbCBzZWwgKi8KKwkJdmFsID0gZ3N3LT5tbWRfcmVhZChnc3csIDAsIFBIWV9ERVYxRiwKKwkJCQkgICAgIFBIWV9ERVYxRl9SRUdfNDAzKTsKKwkJdmFsICY9IH4oUEhZX1BMTF9NKTsKKwkJdmFsIHw9IFBIWV9QTExfU0VMKDMpOworCQlnc3ctPm1tZF93cml0ZShnc3csIDAsIFBIWV9ERVYxRiwgUEhZX0RFVjFGX1JFR180MDMsIHZhbCk7CisKKwkJLyogc2V0IGRpdmlkZXIgcmF0aW8gKi8KKwkJZ3N3LT5tbWRfd3JpdGUoZ3N3LCAwLCBQSFlfREVWMUYsCisJCQkgICAgICAgUEhZX0RFVjFGX1JFR18xMEEsIDB4MTAxOCk7CisKKwkJLyogc2V0IGRpdmlkZXIgcmF0aW8gKi8KKwkJZ3N3LT5tbWRfd3JpdGUoZ3N3LCAwLCBQSFlfREVWMUYsIFBIWV9ERVYxRl9SRUdfMTBCLCAweGM2NzYpOworCisJCS8qIGNhcGFjaXRhbmNlIGFuZCByZXNpc3RhbmNlIGFkanVzdG1lbnQgKi8KKwkJZ3N3LT5tbWRfd3JpdGUoZ3N3LCAwLCBQSFlfREVWMUYsCisJCQkgICAgICAgUEhZX0RFVjFGX1JFR18xMEMsIDB4ZDhiZSk7CisJCWJyZWFrOworCX0KKworCS8qIHBvd2VyIGRvd24gcGxsLiBhZGRpdGlvbmFsIGRlbGF5IGlzIG5vdCByZXF1aXJlZCB2aWEgbWRpbyBhY2Nlc3MgKi8KKwlnc3ctPm1tZF93cml0ZShnc3csIDAsIFBIWV9ERVYxRiwgUEhZX0RFVjFGX1JFR18xMEQsIDB4MTApOworCisJLyogcG93ZXIgdXAgcGxsICovCisJZ3N3LT5tbWRfd3JpdGUoZ3N3LCAwLCBQSFlfREVWMUYsIFBIWV9ERVYxRl9SRUdfMTBELCAweDE0KTsKK30KKworLyogMTIgcmVnaXN0ZXJzIGZvciBUWF9NTFQzIHdhdmVmb3JtIHR1bmluZy4KKyAqICAgIDAxMiAzNDUgNjc4IDlhYgorICogIDEgICAgX18KKyAqICAgICBfLyAgXF8KKyAqICAwXy8gICAgICBcCisgKiAgICAgICAgICAgIFxfICAgIF8vCisgKiAtMSAgICAgICAgICAgXF9fLworICovCitzdGF0aWMgdm9pZCBtdDc1MzFfcGh5XzEwMG1fZXllX2RpYWdfc2V0dGluZyhzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3LCB1MzIgcG9ydCkKK3sKKwlnc3ctPm1tZF93cml0ZShnc3csIHBvcnQsIFBIWV9ERVYxRSwgUEhZX1RYX01MVDNfQkFTRSArIDB4MCwgMHgxODcpOworCWdzdy0+bW1kX3dyaXRlKGdzdywgcG9ydCwgUEhZX0RFVjFFLCBQSFlfVFhfTUxUM19CQVNFICsgMHgxLCAweDFjOSk7CisJZ3N3LT5tbWRfd3JpdGUoZ3N3LCBwb3J0LCBQSFlfREVWMUUsIFBIWV9UWF9NTFQzX0JBU0UgKyAweDIsIDB4MWM2KTsKKwlnc3ctPm1tZF93cml0ZShnc3csIHBvcnQsIFBIWV9ERVYxRSwgUEhZX1RYX01MVDNfQkFTRSArIDB4MywgMHgxODIpOworCWdzdy0+bW1kX3dyaXRlKGdzdywgcG9ydCwgUEhZX0RFVjFFLCBQSFlfVFhfTUxUM19CQVNFICsgMHg0LCAweDIwOCk7CisJZ3N3LT5tbWRfd3JpdGUoZ3N3LCBwb3J0LCBQSFlfREVWMUUsIFBIWV9UWF9NTFQzX0JBU0UgKyAweDUsIDB4MjA1KTsKKwlnc3ctPm1tZF93cml0ZShnc3csIHBvcnQsIFBIWV9ERVYxRSwgUEhZX1RYX01MVDNfQkFTRSArIDB4NiwgMHgzODQpOworCWdzdy0+bW1kX3dyaXRlKGdzdywgcG9ydCwgUEhZX0RFVjFFLCBQSFlfVFhfTUxUM19CQVNFICsgMHg3LCAweDNjYik7CisJZ3N3LT5tbWRfd3JpdGUoZ3N3LCBwb3J0LCBQSFlfREVWMUUsIFBIWV9UWF9NTFQzX0JBU0UgKyAweDgsIDB4M2M0KTsKKwlnc3ctPm1tZF93cml0ZShnc3csIHBvcnQsIFBIWV9ERVYxRSwgUEhZX1RYX01MVDNfQkFTRSArIDB4OSwgMHgzMGEpOworCWdzdy0+bW1kX3dyaXRlKGdzdywgcG9ydCwgUEhZX0RFVjFFLCBQSFlfVFhfTUxUM19CQVNFICsgMHhhLCAweDAwYik7CisJZ3N3LT5tbWRfd3JpdGUoZ3N3LCBwb3J0LCBQSFlfREVWMUUsIFBIWV9UWF9NTFQzX0JBU0UgKyAweGIsIDB4MDAyKTsKK30KKworc3RhdGljIHZvaWQgbXQ3NTMxX3BoeV9zZXR0aW5nKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3cpCit7CisJaW50IGk7CisJdTMyIHZhbDsKKworCWZvciAoaSA9IDA7IGkgPCBNVDc1M1hfTlVNX1BIWVM7IGkrKykgeworCQltdDc1MzFfcGh5XzEwMG1fZXllX2RpYWdfc2V0dGluZyhnc3csIGkpOworCisJCS8qIEVuYWJsZSBIVyBhdXRvIGRvd25zaGlmdCAqLworCQlnc3ctPm1paV93cml0ZShnc3csIGksIDB4MWYsIDB4MSk7CisJCXZhbCA9IGdzdy0+bWlpX3JlYWQoZ3N3LCBpLCBQSFlfRVhUX1JFR18xNCk7CisJCXZhbCB8PSBQSFlfRU5fRE9XTl9TSEZJVDsKKwkJZ3N3LT5taWlfd3JpdGUoZ3N3LCBpLCBQSFlfRVhUX1JFR18xNCwgdmFsKTsKKworCQkvKiBEZWNyZWFzZSBTbHZEUFNyZWFkeSB0aW1lICovCisJCXZhbCA9IG10NzUzeF90cl9yZWFkKGdzdywgaSwgUE1BX0NILCBQTUFfTk9ELCBQTUFfMTcpOworCQl2YWwgJj0gflNMVl9EU1BfUkVBRFlfVElNRV9NOworCQl2YWwgfD0gMHhjIDw8IFNMVl9EU1BfUkVBRFlfVElNRV9TOworCQltdDc1M3hfdHJfd3JpdGUoZ3N3LCBpLCBQTUFfQ0gsIFBNQV9OT0QsIFBNQV8xNywgdmFsKTsKKworCQkvKiBFbmFibGUgUmFuZG9tIFVwZGF0ZSBNZWNoYW5pc20gKi8KKwkJdmFsID0gbXQ3NTN4X3RyX3JlYWQoZ3N3LCBpLCBQTUFfQ0gsIFBNQV9OT0QsIFBNQV8xOCk7CisJCXZhbCB8PSBFTkFCTEVfUkFORE9NX1VQREFURV9UUklHR0VSOworCQltdDc1M3hfdHJfd3JpdGUoZ3N3LCBpLCBQTUFfQ0gsIFBNQV9OT0QsIFBNQV8xOCwgdmFsKTsKKworCQkvKiBQSFkgbGluayBkb3duIHBvd2VyIHNhdmluZyBlbmFibGUgKi8KKwkJdmFsID0gZ3N3LT5taWlfcmVhZChnc3csIGksIFBIWV9FWFRfUkVHXzE3KTsKKwkJdmFsIHw9IFBIWV9MSU5LRE9XTl9QT1dFUl9TQVZJTkdfRU47CisJCWdzdy0+bWlpX3dyaXRlKGdzdywgaSwgUEhZX0VYVF9SRUdfMTcsIHZhbCk7CisKKwkJdmFsID0gZ3N3LT5tbWRfcmVhZChnc3csIGksIFBIWV9ERVYxRSwgUEhZX0RFVjFFX1JFR18wQzYpOworCQl2YWwgJj0gflBIWV9QT1dFUl9TQVZJTkdfTTsKKwkJdmFsIHw9IFBIWV9QT1dFUl9TQVZJTkdfVFggPDwgUEhZX1BPV0VSX1NBVklOR19TOworCQlnc3ctPm1tZF93cml0ZShnc3csIGksIFBIWV9ERVYxRSwgUEhZX0RFVjFFX1JFR18wQzYsIHZhbCk7CisKKwkJLyogVGltaW5nIFJlY292ZXJ5IGZvciBHYkUgc2xhdmUgbW9kZSAqLworCQltdDc1M3hfdHJfd3JpdGUoZ3N3LCBpLCBQTUFfQ0gsIFBNQV9OT0QsIFBNQV8wMSwgMHg2ZmI5MGEpOworCQltdDc1M3hfdHJfd3JpdGUoZ3N3LCBpLCBEU1BfQ0gsIERTUF9OT0QsIERTUF8wNiwgMHgyZWJhZWYpOworCQl2YWwgPSBnc3ctPm1tZF9yZWFkKGdzdywgaSwgUEhZX0RFVjFFLCBQSFlfREVWMUVfUkVHXzIzNCk7CisJCXZhbCB8PSBUUl9PUEVOX0xPT1BfRU47CisJCWdzdy0+bW1kX3dyaXRlKGdzdywgaSwgUEhZX0RFVjFFLCBQSFlfREVWMUVfUkVHXzIzNCwgdmFsKTsKKworCQkvKiBFbmFibGUgQXN5bW1ldHJpYyBQYXVzZSBDYXBhYmlsaXR5ICovCisJCXZhbCA9IGdzdy0+bWlpX3JlYWQoZ3N3LCBpLCBNSUlfQURWRVJUSVNFKTsKKwkJdmFsIHw9IEFEVkVSVElTRV9QQVVTRV9BU1lNOworCQlnc3ctPm1paV93cml0ZShnc3csIGksIE1JSV9BRFZFUlRJU0UsIHZhbCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBtdDc1MzFfYWRqdXN0X2xpbmVfZHJpdmluZyhzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3LCB1MzIgcG9ydCkKK3sKKwkvKiBGb3IgQURDIHRpbWluZyBtYXJnaW4gd2luZG93IGZvciBMRE8gY2FsaWJyYXRpb24gKi8KKwlnc3ctPm1tZF93cml0ZShnc3csIHBvcnQsIFBIWV9ERVYxRSwgUlhBRENfTERPX0NPTlRST0xfMiwgMHgyMjIyKTsKKworCS8qIEFkanVzdCBBRCBzYW1wbGUgdGltaW5nICovCisJZ3N3LT5tbWRfd3JpdGUoZ3N3LCBwb3J0LCBQSFlfREVWMUUsIFJYQURDX0NPTlRST0xfMywgMHg0NDQ0KTsKKworCS8qIEFkanVzdCBMaW5lIGRyaXZlciBjdXJyZW50IGZvciBkaWZmZXJlbnQgbW9kZSAqLworCWdzdy0+bW1kX3dyaXRlKGdzdywgcG9ydCwgUEhZX0RFVjFGLCBUWFZMRF9EQV8yNzEsIDB4MmNhNSk7CisKKwkvKiBBZGp1c3QgTGluZSBkcml2ZXIgY3VycmVudCBmb3IgZGlmZmVyZW50IG1vZGUgKi8KKwlnc3ctPm1tZF93cml0ZShnc3csIHBvcnQsIFBIWV9ERVYxRiwgVFhWTERfREFfMjcyLCAweGM2Yik7CisKKwkvKiBBZGp1c3QgTGluZSBkcml2ZXIgZ2FpbiBmb3IgMTBCVCBmcm9tIDEwMDBCVCBjYWxpYnJhdGlvbiByZXN1bHQgKi8KKwlnc3ctPm1tZF93cml0ZShnc3csIHBvcnQsIFBIWV9ERVYxRiwgVFhWTERfREFfMjczLCAweDMwMDApOworCisJLyogQWRqdXN0IFJYIEVjaG8gcGF0aCBmaWx0ZXIgKi8KKwlnc3ctPm1tZF93cml0ZShnc3csIHBvcnQsIFBIWV9ERVYxRSwgUEhZX0RFVjFFX1JFR18wRkUsIDB4Mik7CisKKwkvKiBBZGp1c3QgUlggSFZHQSBiaWFzIGN1cnJlbnQgKi8KKwlnc3ctPm1tZF93cml0ZShnc3csIHBvcnQsIFBIWV9ERVYxRSwgUEhZX0RFVjFFX1JFR180MSwgMHgzMzMzKTsKKworCS8qIEFkanVzdCBUWCBjbGFzcyBBQiBkcml2ZXIgMSAqLworCWdzdy0+bW1kX3dyaXRlKGdzdywgcG9ydCwgUEhZX0RFVjFGLCBQSFlfREVWMUZfUkVHXzI2OCwgMHgzODQpOworCisJLyogQWRqdXN0IFRYIGNsYXNzIEFCIGRyaXZlciAyICovCisJZ3N3LT5tbWRfd3JpdGUoZ3N3LCBwb3J0LCBQSFlfREVWMUYsIFBIWV9ERVYxRl9SRUdfMjY5LCAweDExMTQpOworCisJLyogQWRqdXN0IERBQyBkZWxheSBmb3IgVFggUGFpcnMgKi8KKwlnc3ctPm1tZF93cml0ZShnc3csIHBvcnQsIFBIWV9ERVYxRSwgUEhZX0RFVjFFX1JFR18xMywgMHg0MDQpOworCWdzdy0+bW1kX3dyaXRlKGdzdywgcG9ydCwgUEhZX0RFVjFFLCBQSFlfREVWMUVfUkVHXzE0LCAweDQwNCk7CisKKwkvKiBBZGp1c3QgREFDIGRpZ2l0YWwgZGVsYXkgZm9yIFRYIERlbGF5ICovCisJZ3N3LT5tbWRfd3JpdGUoZ3N3LCBwb3J0LCBQSFlfREVWMUYsIFBIWV9ERVYxRl9SRUdfNDQsIDB4YzApOworCisJLyogQWRqdXN0IExpbmUgZHJpdmVyIGNvbXBlbnNhdGlvbiBjYXAgZm9yIHN0YWJpbGl0eSBjb25jZXJuIGR1ZSB0bworCSAqIGluY3JlYXNlIGN1cnJlbnQuCisJICovCisJZ3N3LT5tbWRfd3JpdGUoZ3N3LCBwb3J0LCBQSFlfREVWMUYsIFBIWV9ERVYxRl9SRUdfMjZBLCAweDMzMzMpOworfQorCitzdGF0aWMgdm9pZCBtdDc1MzFfZWVlX3NldHRpbmcoc3RydWN0IGdzd19tdDc1M3ggKmdzdywgdTMyIHBvcnQpCit7CisJdTMyIHZhbDsKKworCS8qIERpc2FibGUgRUVFICovCisJZ3N3LT5tbWRfd3JpdGUoZ3N3LCBwb3J0LCBQSFlfREVWMDcsIFBIWV9ERVYwN19SRUdfMDNDLCAwKTsKKworCS8qIERpc2FibGUgZ2VuZXJhdGUgc2lnbmFsIHRvIGNsZWFyIHRoZSBzY3JhbWJsZV9sb2NrIHdoZW4gbHBpIG1vZGUgKi8KKwl2YWwgPSBnc3ctPm1tZF9yZWFkKGdzdywgcG9ydCwgUEhZX0RFVjFFLCBQSFlfREVWMUVfUkVHXzE4OSk7CisJdmFsICY9IH5ERVNDUkFNQkxFUl9DTEVBUl9FTjsKKwlnc3ctPm1tZF93cml0ZShnc3csIHBvcnQsIFBIWV9ERVYxRSwgUEhZX0RFVjFFX1JFR18xODksIHZhbCk7CisKKwkvKiBSb2xsIGJhY2sgRUVFIFNsYXZlIE1vZGUgKi8KKwlnc3ctPm1tZF93cml0ZShnc3csIHBvcnQsIDB4MWUsIDB4MmQxLCAwKTsKKwltdDc1M3hfdHJfd3JpdGUoZ3N3LCBwb3J0LCBEU1BfQ0gsIERTUF9OT0QsIERTUF8wOCwgMHgxYik7CisJbXQ3NTN4X3RyX3dyaXRlKGdzdywgcG9ydCwgRFNQX0NILCBEU1BfTk9ELCBEU1BfMGYsIDApOworCW10NzUzeF90cl93cml0ZShnc3csIHBvcnQsIERTUF9DSCwgRFNQX05PRCwgRFNQXzEwLCAweDUwMDApOworCisJLyogQWRqdXN0IDEwMF9tc2VfdGhyZXNob2xkICovCisJZ3N3LT5tbWRfd3JpdGUoZ3N3LCBwb3J0LCBQSFlfREVWMUUsIFBIWV9ERVYxRV9SRUdfMTIzLCAweGZmZmYpOworCisJLyogRGlzYWJsZSBtY2MgKi8KKwlnc3ctPm1tZF93cml0ZShnc3csIHBvcnQsIFBIWV9ERVYxRSwgUEhZX0RFVjFFX1JFR19BNiwgMHgzMDApOworfQorCitzdGF0aWMgdm9pZCBtdDc1MzFfYWZpZm9fcmVzZXQoc3RydWN0IGdzd19tdDc1M3ggKmdzdywgaW50IGVuYWJsZSkKK3sKKwlpbnQgcDsKKwl1MzIgdmFsOworCisJaWYgKGVuYWJsZSkgeworCQlmb3IgKHAgPSAwOyBwIDwgTVQ3NTNYX05VTV9QT1JUUzsgcCsrKSB7CisJCQl2YWwgPSBtdDc1M3hfcmVnX3JlYWQoZ3N3LCBEQkdfQ05UKHApKTsKKwkJCXZhbCAmPSB+RElTX0NMUjsKKwkJCW10NzUzeF9yZWdfd3JpdGUoZ3N3LCBEQkdfQ05UKHApLCB2YWwpOworCQl9CisJfSBlbHNlIHsKKwkJZm9yIChwID0gMDsgcCA8IE1UNzUzWF9OVU1fUE9SVFM7IHArKykgeworCQkJdmFsID0gbXQ3NTN4X3JlZ19yZWFkKGdzdywgREJHX0NOVChwKSk7CisJCQl2YWwgfD0gRElTX0NMUjsKKwkJCW10NzUzeF9yZWdfd3JpdGUoZ3N3LCBEQkdfQ05UKHApLCB2YWwpOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IG10NzUzMV9zd19pbml0KHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3cpCit7CisJaW50IGk7CisJdTMyIHZhbDsKKworCWdzdy0+cGh5X2Jhc2UgPSAoZ3N3LT5zbWlfYWRkciArIDEpICYgTVQ3NTNYX1NNSV9BRERSX01BU0s7CisKKwlnc3ctPm1paV9yZWFkID0gbXQ3NTN4X21paV9yZWFkOworCWdzdy0+bWlpX3dyaXRlID0gbXQ3NTN4X21paV93cml0ZTsKKwlnc3ctPm1tZF9yZWFkID0gbXQ3NTN4X21tZF9yZWFkOworCWdzdy0+bW1kX3dyaXRlID0gbXQ3NTN4X21tZF93cml0ZTsKKworCWdzdy0+aHdfcGh5X2NhbCA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChnc3ctPmRldi0+b2Zfbm9kZSwgIm1lZGlhdGVrLGh3X3BoeV9jYWwiKTsKKworCWZvciAoaSA9IDA7IGkgPCBNVDc1M1hfTlVNX1BIWVM7IGkrKykgeworCQl2YWwgPSBnc3ctPm1paV9yZWFkKGdzdywgaSwgTUlJX0JNQ1IpOworCQl2YWwgfD0gQk1DUl9JU09MQVRFOworCQlnc3ctPm1paV93cml0ZShnc3csIGksIE1JSV9CTUNSLCB2YWwpOworCX0KKworCS8qIEZvcmNlIE1BQyBsaW5rIGRvd24gYmVmb3JlIHJlc2V0ICovCisJbXQ3NTN4X3JlZ193cml0ZShnc3csIFBNQ1IoNSksIEZPUkNFX01PREVfTE5LKTsKKwltdDc1M3hfcmVnX3dyaXRlKGdzdywgUE1DUig2KSwgRk9SQ0VfTU9ERV9MTkspOworCisJLyogU3dpdGNoIHNvZnQgcmVzZXQgKi8KKwltdDc1M3hfcmVnX3dyaXRlKGdzdywgU1lTX0NUUkwsIFNXX1NZU19SU1QgfCBTV19SRUdfUlNUKTsKKwl1c2xlZXBfcmFuZ2UoMTAsIDIwKTsKKworCS8qIEVuYWJsZSBNREMgaW5wdXQgU2NobWl0dCBUcmlnZ2VyICovCisJdmFsID0gbXQ3NTN4X3JlZ19yZWFkKGdzdywgU01UMF9JT0xCKTsKKwltdDc1M3hfcmVnX3dyaXRlKGdzdywgU01UMF9JT0xCLCB2YWwgfCBTTVRfSU9MQl81X1NNSV9NRENfRU4pOworCisJLyogU2V0IDc1MzEgZ3BpbyBwaW5tdXggKi8KKwltdDc1MzFfc2V0X2dwaW9fcGlubXV4KGdzdyk7CisKKwltdDc1MzFfY29yZV9wbGxfc2V0dXAoZ3N3KTsKKwltdDc1MzFfbWFjX3BvcnRfc2V0dXAoZ3N3LCA1LCAmZ3N3LT5wb3J0NV9jZmcpOworCW10NzUzMV9tYWNfcG9ydF9zZXR1cChnc3csIDYsICZnc3ctPnBvcnQ2X2NmZyk7CisKKwkvKiBHbG9iYWwgbWFjIGNvbnRyb2wgc2V0dGluZ3MgKi8KKwltdDc1M3hfcmVnX3dyaXRlKGdzdywgR01BQ0NSLAorCQkJICgxNSA8PCBNVENDX0xNVF9TKSB8ICgxNSA8PCBNQVhfUlhfSlVNQk9fUykgfAorCQkJIFJYX1BLVF9MRU5fTUFYX0pVTUJPKTsKKworCS8qIEVuYWJsZSBDb2xsaXNpb24gUG9sbCAqLworCXZhbCA9IG10NzUzeF9yZWdfcmVhZChnc3csIENQR0NfQ1RSTCk7CisJdmFsIHw9IENPTF9DTEtfRU47CisJbXQ3NTN4X3JlZ193cml0ZShnc3csIENQR0NfQ1RSTCwgdmFsKTsKKwl2YWwgfD0gQ09MX1JTVF9OOworCW10NzUzeF9yZWdfd3JpdGUoZ3N3LCBDUEdDX0NUUkwsIHZhbCk7CisJdmFsIHw9IENPTF9FTjsKKwltdDc1M3hfcmVnX3dyaXRlKGdzdywgQ1BHQ19DVFJMLCB2YWwpOworCisJLyogRGlzYWJsZSBBRklGTyByZXNldCBmb3IgZXh0cmEgc2hvcnQgSVBHICovCisJbXQ3NTMxX2FmaWZvX3Jlc2V0KGdzdywgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdDc1MzFfc3dfcG9zdF9pbml0KHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3cpCit7CisJaW50IGk7CisJdTMyIHZhbDsKKworCS8qIExldCBpbnRlcm5hbCBQSFlzIG9ubHkgVHggY29uc3RhbnQgZGF0YSBpbiBjb25maWd1cmUgc3RhZ2UuICovCisJZm9yIChpID0gMDsgaSA8IE1UNzUzWF9OVU1fUEhZUzsgaSsrKQorCQlnc3ctPm1tZF93cml0ZShnc3csIGksIFBIWV9ERVYxRSwgUEhZX0RFVjFFX1JFR18xNDEsIDB4MjAwKTsKKworCS8qIEludGVybmFsIFBIWXMgbWlnaHQgYmUgZW5hYmxlZCBieSBIVyBCb290c3RyYXBwaW5nLCBvciBib290bG9hZGVyLgorCSAqIFR1cm4gb2ZmIFBIWXMgYmVmb3JlIHNldHVwIFBIWSBQTEwuCisJICovCisJdmFsID0gZ3N3LT5tbWRfcmVhZChnc3csIDAsIFBIWV9ERVYxRiwgUEhZX0RFVjFGX1JFR180MDMpOworCXZhbCB8PSBQSFlfRU5fQllQQVNTX01PREU7CisJdmFsIHw9IFBPV0VSX09OX09GRjsKKwlnc3ctPm1tZF93cml0ZShnc3csIDAsIFBIWV9ERVYxRiwgUEhZX0RFVjFGX1JFR180MDMsIHZhbCk7CisKKwltdDc1MzFfcGh5X3BsbF9zZXR1cChnc3cpOworCisJLyogRW5hYmxlIEludGVybmFsIFBIWXMgYmVmb3JlIHBoeSBzZXR0aW5nICovCisJdmFsID0gZ3N3LT5tbWRfcmVhZChnc3csIDAsIFBIWV9ERVYxRiwgUEhZX0RFVjFGX1JFR180MDMpOworCXZhbCB8PSBQSFlfRU5fQllQQVNTX01PREU7CisJdmFsICY9IH5QT1dFUl9PTl9PRkY7CisJZ3N3LT5tbWRfd3JpdGUoZ3N3LCAwLCBQSFlfREVWMUYsIFBIWV9ERVYxRl9SRUdfNDAzLCB2YWwpOworCisJbXQ3NTMxX3BoeV9zZXR0aW5nKGdzdyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTVQ3NTNYX05VTV9QSFlTOyBpKyspIHsKKwkJdmFsID0gZ3N3LT5taWlfcmVhZChnc3csIGksIE1JSV9CTUNSKTsKKwkJdmFsICY9IH5CTUNSX0lTT0xBVEU7CisJCWdzdy0+bWlpX3dyaXRlKGdzdywgaSwgTUlJX0JNQ1IsIHZhbCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IE1UNzUzWF9OVU1fUEhZUzsgaSsrKSB7CisJCW10NzUzMV9hZGp1c3RfbGluZV9kcml2aW5nKGdzdywgaSk7CisJCW10NzUzMV9lZWVfc2V0dGluZyhnc3csIGkpOworCX0KKworCS8qIFJlc3RvcmUgaW50ZXJuYWwgUEhZcyBub3JtYWwgVHggZnVuY3Rpb24gYWZ0ZXIgY29uZmlndXJlIHN0YWdlLiAqLworCWZvciAoaSA9IDA7IGkgPCBNVDc1M1hfTlVNX1BIWVM7IGkrKykKKwkJZ3N3LT5tbWRfd3JpdGUoZ3N3LCBpLCBQSFlfREVWMUUsIFBIWV9ERVYxRV9SRUdfMTQxLCAweDApOworCisJbXQ3NTMxX2ludGVybmFsX3BoeV9jYWxpYnJhdGlvbihnc3cpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBtdDc1M3hfc3dfaWQgbXQ3NTMxX2lkID0geworCS5tb2RlbCA9IE1UNzUzMSwKKwkuZGV0ZWN0ID0gbXQ3NTMxX3N3X2RldGVjdCwKKwkuaW5pdCA9IG10NzUzMV9zd19pbml0LAorCS5wb3N0X2luaXQgPSBtdDc1MzFfc3dfcG9zdF9pbml0Cit9OworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJaaGFuZ3VvIEp1IDx6aGFuZ3VvLmp1QG1lZGlhdGVrLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBNZWRpYVRlayBNVDc1M3ggR2lnYWJpdCBTd2l0Y2giKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L210ay9tdDc1M3gvbXQ3NTMxLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9tdGsvbXQ3NTN4L210NzUzMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYzhhNDkKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9tdGsvbXQ3NTN4L210NzUzMS5oCkBAIC0wLDAgKzEsMTMgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTggTWVkaWFUZWsgSW5jLgorICovCisKKyNpZm5kZWYgX01UNzUzMV9IXworI2RlZmluZSBfTVQ3NTMxX0hfCisKKyNpbmNsdWRlICJtdDc1M3guaCIKKworZXh0ZXJuIHN0cnVjdCBtdDc1M3hfc3dfaWQgbXQ3NTMxX2lkOworCisjZW5kaWYgLyogX01UNzUzMV9IXyAqLwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvbXRrL210NzUzeC9tdDc1M3guaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L210ay9tdDc1M3gvbXQ3NTN4LmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzMyYmRhMQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L210ay9tdDc1M3gvbXQ3NTN4LmgKQEAgLTAsMCArMSwyMjQgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisvKgorICogQ29weXJpZ2h0IChjKSAyMDE4IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogV2VpamllIEdhbyA8d2VpamllLmdhb0BtZWRpYXRlay5jb20+CisgKi8KKworI2lmbmRlZiBfTVQ3NTNYX0hfCisjZGVmaW5lIF9NVDc1M1hfSF8KKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX21kaW8uaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+CisKKyNpZmRlZiBDT05GSUdfU1dDT05GSUcKKyNpbmNsdWRlIDxsaW51eC9zd2l0Y2guaD4KKyNlbmRpZgorCisjaW5jbHVkZSAibXQ3NTN4X3ZsYW4uaCIKKworI2RlZmluZSBNVDc1M1hfREZMX0NQVV9QT1JUCTYKKyNkZWZpbmUgTVQ3NTNYX05VTV9QSFlTCQk1CisKKyNkZWZpbmUgTVQ3NTNYX0RGTF9TTUlfQUREUgkweDFmCisjZGVmaW5lIE1UNzUzWF9TTUlfQUREUl9NQVNLCTB4MWYKKworc3RydWN0IGdzd19tdDc1M3g7CisKK2VudW0gbXQ3NTN4X21vZGVsIHsKKwlNVDc1MzAgPSAweDc1MzAsCisJTVQ3NTMxID0gMHg3NTMxCit9OworCitzdHJ1Y3QgbXQ3NTN4X3BvcnRfY2ZnIHsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCWludCBwaHlfbW9kZTsKKwl1MzIgZW5hYmxlZDogMTsKKwl1MzIgZm9yY2VfbGluazogMTsKKwl1MzIgc3BlZWQ6IDI7CisJdTMyIGR1cGxleDogMTsKKwlib29sIHNzY19vbjsKKwlib29sIHN0YWdfb247Cit9OworCitzdHJ1Y3QgbXQ3NTN4X3BoeSB7CisJc3RydWN0IGdzd19tdDc1M3ggKmdzdzsKKwlzdHJ1Y3QgbmV0X2RldmljZSBuZXRkZXY7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKK307CisKK3N0cnVjdCBnc3dfbXQ3NTN4IHsKKwl1MzIgaWQ7CisKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IG1paV9idXMgKmhvc3RfYnVzOworCXN0cnVjdCBtaWlfYnVzICpncGh5X2J1czsKKwlzdHJ1Y3QgbXV0ZXggbWlpX2xvY2s7CS8qIE1JSSBhY2Nlc3MgbG9jayAqLworCXUzMiBzbWlfYWRkcjsKKwl1MzIgcGh5X2Jhc2U7CisJaW50IGRpcmVjdF9waHlfYWNjZXNzOworCisJZW51bSBtdDc1M3hfbW9kZWwgbW9kZWw7CisJY29uc3QgY2hhciAqbmFtZTsKKworCXN0cnVjdCBtdDc1M3hfcG9ydF9jZmcgcG9ydDVfY2ZnOworCXN0cnVjdCBtdDc1M3hfcG9ydF9jZmcgcG9ydDZfY2ZnOworCisJYm9vbCBod19waHlfY2FsOworCWJvb2wgcGh5X3N0YXR1c19wb2xsOworCXN0cnVjdCBtdDc1M3hfcGh5IHBoeXNbTVQ3NTNYX05VTV9QSFlTXTsKKy8vCWludCBwaHlfaXJxc1tQSFlfTUFYX0FERFJdOyAvL0ZJWE1FIAorCisJaW50IHBoeV9saW5rX3N0czsKKworCWludCBpcnE7CisJaW50IHJlc2V0X3BpbjsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaXJxX3dvcmtlcjsKKworI2lmZGVmIENPTkZJR19TV0NPTkZJRworCXN0cnVjdCBzd2l0Y2hfZGV2IHN3ZGV2OworCXUzMiBjcHVfcG9ydDsKKyNlbmRpZgorCisJaW50IGdsb2JhbF92bGFuX2VuYWJsZTsKKwlzdHJ1Y3QgbXQ3NTN4X3ZsYW5fZW50cnkgdmxhbl9lbnRyaWVzW01UNzUzWF9OVU1fVkxBTlNdOworCXN0cnVjdCBtdDc1M3hfcG9ydF9lbnRyeSBwb3J0X2VudHJpZXNbTVQ3NTNYX05VTV9QT1JUU107CisKKwlpbnQgKCptaWlfcmVhZCkoc3RydWN0IGdzd19tdDc1M3ggKmdzdywgaW50IHBoeSwgaW50IHJlZyk7CisJdm9pZCAoKm1paV93cml0ZSkoc3RydWN0IGdzd19tdDc1M3ggKmdzdywgaW50IHBoeSwgaW50IHJlZywgdTE2IHZhbCk7CisKKwlpbnQgKCptbWRfcmVhZCkoc3RydWN0IGdzd19tdDc1M3ggKmdzdywgaW50IGFkZHIsIGludCBkZXZhZCwgdTE2IHJlZyk7CisJdm9pZCAoKm1tZF93cml0ZSkoc3RydWN0IGdzd19tdDc1M3ggKmdzdywgaW50IGFkZHIsIGludCBkZXZhZCwgdTE2IHJlZywKKwkJCSAgdTE2IHZhbCk7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCitzdHJ1Y3QgY2hpcF9yZXYgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJdTMyIHJldjsKK307CisKK3N0cnVjdCBtdDc1M3hfc3dfaWQgeworCWVudW0gbXQ3NTN4X21vZGVsIG1vZGVsOworCWludCAoKmRldGVjdCkoc3RydWN0IGdzd19tdDc1M3ggKmdzdywgc3RydWN0IGNoaXBfcmV2ICpjcmV2KTsKKwlpbnQgKCppbml0KShzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3KTsKKwlpbnQgKCpwb3N0X2luaXQpKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3cpOworfTsKKworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgbXQ3NTN4X2RldnM7CisKK3N0cnVjdCBnc3dfbXQ3NTN4ICptdDc1M3hfZ2V0X2dzdyh1MzIgaWQpOworc3RydWN0IGdzd19tdDc1M3ggKm10NzUzeF9nZXRfZmlyc3RfZ3N3KHZvaWQpOwordm9pZCBtdDc1M3hfcHV0X2dzdyh2b2lkKTsKK3ZvaWQgbXQ3NTN4X2xvY2tfZ3N3KHZvaWQpOworCit1MzIgbXQ3NTN4X3JlZ19yZWFkKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3csIHUzMiByZWcpOwordm9pZCBtdDc1M3hfcmVnX3dyaXRlKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3csIHUzMiByZWcsIHUzMiB2YWwpOworCitpbnQgbXQ3NTN4X21paV9yZWFkKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3csIGludCBwaHksIGludCByZWcpOwordm9pZCBtdDc1M3hfbWlpX3dyaXRlKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3csIGludCBwaHksIGludCByZWcsIHUxNiB2YWwpOworCitpbnQgbXQ3NTN4X21tZF9yZWFkKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3csIGludCBhZGRyLCBpbnQgZGV2YWQsIHUxNiByZWcpOwordm9pZCBtdDc1M3hfbW1kX3dyaXRlKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3csIGludCBhZGRyLCBpbnQgZGV2YWQsIHUxNiByZWcsCisJCSAgICAgIHUxNiB2YWwpOworCitpbnQgbXQ3NTN4X21tZF9pbmRfcmVhZChzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3LCBpbnQgYWRkciwgaW50IGRldmFkLCB1MTYgcmVnKTsKK3ZvaWQgbXQ3NTN4X21tZF9pbmRfd3JpdGUoc3RydWN0IGdzd19tdDc1M3ggKmdzdywgaW50IGFkZHIsIGludCBkZXZhZCwgdTE2IHJlZywKKwkJCSAgdTE2IHZhbCk7CisKK2ludCBtdDc1M3hfdHJfcmVhZChzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3LCBpbnQgYWRkciwgdTggY2gsIHU4IG5vZGUsIHU4IGRhZGRyKTsKK3ZvaWQgbXQ3NTN4X3RyX3dyaXRlKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3csIGludCBhZGRyLCB1OCBjaCwgdTggbm9kZSwgdTggZGFkZHIsCisJCSAgICAgdTMyIGRhdGEpOworCit2b2lkIG10NzUzeF9pcnFfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Cit2b2lkIG10NzUzeF9pcnFfZW5hYmxlKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3cpOworCitpbnQgbXQ3NTN4X3BoeV9jYWxpYnJhdGlvbihzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3LCB1OCBwaHlhZGRyKTsKK2ludCBleHRwaHlfaW5pdChzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3LCBpbnQgYWRkcik7CisKKy8qIE1ESU8gSW5kaXJlY3QgQWNjZXNzIFJlZ2lzdGVycyAqLworI2RlZmluZSBNSUlfTU1EX0FDQ19DVExfUkVHCQkweDBkCisjZGVmaW5lIE1NRF9DTURfUwkJCTE0CisjZGVmaW5lIE1NRF9DTURfTQkJCTB4YzAwMAorI2RlZmluZSBNTURfREVWQURfUwkJCTAKKyNkZWZpbmUgTU1EX0RFVkFEX00JCQkweDFmCisKKy8qIE1NRF9DTUQ6IE1NRCBjb21tYW5kcyAqLworI2RlZmluZSBNTURfQUREUgkJCTAKKyNkZWZpbmUgTU1EX0RBVEEJCQkxCisKKyNkZWZpbmUgTUlJX01NRF9BRERSX0RBVEFfUkVHCQkweDBlCisKKy8qIFByb2NlZHVyZSBvZiBNVDc1M3ggSW50ZXJuYWwgUmVnaXN0ZXIgQWNjZXNzCisgKgorICogMS4gSW50ZXJuYWwgUmVnaXN0ZXIgQWRkcmVzcworICoKKyAqICAgIFRoZSBNVDc1M3ggaGFzIGEgMTYtYml0IHJlZ2lzdGVyIGFkZHJlc3MgYW5kIGVhY2ggcmVnaXN0ZXIgaXMgMzItYml0LgorICogICAgVGhpcyBtZWFucyB0aGUgbG93ZXN0IHR3byBiaXRzIGFyZSBub3QgdXNlZCBhcyB0aGUgcmVnaXN0ZXIgYWRkcmVzcyBpcworICogICAgNC1ieXRlIGFsaWduZWQuCisgKgorICogICAgUmVzdCBvZiB0aGUgdmFsaWQgYml0cyBhcmUgZGl2aWRlZCBpbnRvIHR3byBwYXJ0czoKKyAqICAgICAgQml0IDE1Li42IGlzIHRoZSBQYWdlIGFkZHJlc3MKKyAqICAgICAgQml0IDUuLjIgaXMgdGhlIGxvdyBhZGRyZXNzCisgKgorICogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICAgfCAxNSAgMTQgIDEzICAxMiAgMTEgIDEwICAgOSAgIDggICA3ICAgNiB8IDUgICA0ICAgMyAgIDIgfCAxICAgMCAgfAorICogICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tfAorICogICAgfCAgICAgICAgICAgICAgUGFnZSBBZGRyZXNzICAgICAgICAgICAgICB8ICAgIEFkZHJlc3MgICAgfCBVbnVzZWQgfAorICogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIDIuIE1ESU8gYWNjZXNzIHRpbWluZworICoKKyAqICAgIFRoZSBNVDc1M3ggdXNlcyB0aGUgZm9sbG93aW5nIE1ESU8gdGltaW5nIGZvciBhIHNpbmdsZSByZWdpc3RlciByZWFkCisgKgorICogICAgICBQaGFzZSAxOiBXcml0ZSBQYWdlIEFkZHJlc3MKKyAqICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgIHwgU1QgfCBPUCB8IFBIWV9BRERSIHwgVFlQRSB8IFJTVkQgfCBUQSB8ICBSU1ZEIHwgICAgUEFHRV9BRERSICAgIHwKKyAqICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgIHwgMDEgfCAwMSB8ICAgMTExMTEgIHwgICAxICB8IDExMTEgfCB4eCB8IDAwMDAwIHwgUkVHX0FERFJbMTUuLjZdIHwKKyAqICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiAgICAgIFBoYXNlIDI6IFdyaXRlIGxvdyBBZGRyZXNzICYgUmVhZCBsb3cgd29yZAorICogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICAgfCBTVCB8IE9QIHwgUEhZX0FERFIgfCBUWVBFIHwgICAgTE9XX0FERFIgICAgfCBUQSB8ICAgICAgREFUQSAgICAgfAorICogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICAgfCAwMSB8IDEwIHwgICAxMTExMSAgfCAgIDAgIHwgUkVHX0FERFJbNS4uMl0gfCB4eCB8ICBEQVRBWzE1Li4wXSAgfAorICogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqICAgICAgUGhhc2UgMzogUmVhZCBoaWdoIHdvcmQKKyAqICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgIHwgU1QgfCBPUCB8IFBIWV9BRERSIHwgVFlQRSB8IFJTVkQgfCBUQSB8ICAgICAgICAgICBEQVRBICAgICAgICAgIHwKKyAqICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgIHwgMDEgfCAxMCB8ICAgMTExMTEgIHwgICAxICB8IDAwMDAgfCB4eCB8ICAgICAgIERBVEFbMzEuLjE2XSAgICAgIHwKKyAqICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiAgICBUaGUgTVQ3NTN4IHVzZXMgdGhlIGZvbGxvd2luZyBNRElPIHRpbWluZyBmb3IgYSBzaW5nbGUgcmVnaXN0ZXIgd3JpdGUKKyAqCisgKiAgICAgIFBoYXNlIDE6IFdyaXRlIFBhZ2UgQWRkcmVzcyAoVGhlIHNhbWUgYXMgcmVhZCkKKyAqCisgKiAgICAgIFBoYXNlIDI6IFdyaXRlIGxvdyBBZGRyZXNzIGFuZCBsb3cgd29yZAorICogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICAgfCBTVCB8IE9QIHwgUEhZX0FERFIgfCBUWVBFIHwgICAgTE9XX0FERFIgICAgfCBUQSB8ICAgICAgREFUQSAgICAgfAorICogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICAgfCAwMSB8IDAxIHwgICAxMTExMSAgfCAgIDAgIHwgUkVHX0FERFJbNS4uMl0gfCB4eCB8ICBEQVRBWzE1Li4wXSAgfAorICogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqICAgICAgUGhhc2UgMzogd3JpdGUgaGlnaCB3b3JkCisgKiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICB8IFNUIHwgT1AgfCBQSFlfQUREUiB8IFRZUEUgfCBSU1ZEIHwgVEEgfCAgICAgICAgICAgREFUQSAgICAgICAgICB8CisgKiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICB8IDAxIHwgMDEgfCAgIDExMTExICB8ICAgMSAgfCAwMDAwIHwgeHggfCAgICAgICBEQVRBWzMxLi4xNl0gICAgICB8CisgKiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICovCisKKy8qIEludGVybmFsIFJlZ2lzdGVyIEFkZHJlc3MgZmllbGRzICovCisjZGVmaW5lIE1UNzUzWF9SRUdfUEFHRV9BRERSX1MJCTYKKyNkZWZpbmUgTVQ3NTNYX1JFR19QQUdFX0FERFJfTQkJMHhmZmMwCisjZGVmaW5lIE1UNzUzWF9SRUdfQUREUl9TCQkyCisjZGVmaW5lIE1UNzUzWF9SRUdfQUREUl9NCQkweDNjCisjZW5kaWYgLyogX01UNzUzWF9IXyAqLwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvbXRrL210NzUzeC9tdDc1M3hfY29tbW9uLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9tdGsvbXQ3NTN4L210NzUzeF9jb21tb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDE1ZGRmCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvbXRrL210NzUzeC9tdDc1M3hfY29tbW9uLmMKQEAgLTAsMCArMSw5MCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxOCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IFdlaWppZSBHYW8gPHdlaWppZS5nYW9AbWVkaWF0ZWsuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAibXQ3NTN4LmgiCisjaW5jbHVkZSAibXQ3NTN4X3JlZ3MuaCIKKwordm9pZCBtdDc1M3hfaXJxX2VuYWJsZShzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3KQoreworCXUzMiB2YWw7CisJaW50IGk7CisKKwkvKiBSZWNvcmQgaW5pdGlhbCBQSFkgbGluayBzdGF0dXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTVQ3NTNYX05VTV9QSFlTOyBpKyspIHsKKwkJdmFsID0gZ3N3LT5taWlfcmVhZChnc3csIGksIE1JSV9CTVNSKTsKKwkJaWYgKHZhbCAmIEJNU1JfTFNUQVRVUykKKwkJCWdzdy0+cGh5X2xpbmtfc3RzIHw9IEJJVChpKTsKKwl9CisKKwl2YWwgPSBCSVQoTVQ3NTNYX05VTV9QSFlTKSAtIDE7CisKKwltdDc1M3hfcmVnX3dyaXRlKGdzdywgU1lTX0lOVF9FTiwgdmFsKTsKK30KKworc3RhdGljIHZvaWQgZGlzcGxheV9wb3J0X2xpbmtfc3RhdHVzKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3csIHUzMiBwb3J0KQoreworCXUzMiBwbXNyLCBzcGVlZF9iaXRzOworCWNvbnN0IGNoYXIgKnNwZWVkOworCisJcG1zciA9IG10NzUzeF9yZWdfcmVhZChnc3csIFBNU1IocG9ydCkpOworCisJc3BlZWRfYml0cyA9IChwbXNyICYgTUFDX1NQRF9TVFNfTSkgPj4gTUFDX1NQRF9TVFNfUzsKKworCXN3aXRjaCAoc3BlZWRfYml0cykgeworCWNhc2UgTUFDX1NQRF8xMDoKKwkJc3BlZWQgPSAiMTBNYnBzIjsKKwkJYnJlYWs7CisJY2FzZSBNQUNfU1BEXzEwMDoKKwkJc3BlZWQgPSAiMTAwTWJwcyI7CisJCWJyZWFrOworCWNhc2UgTUFDX1NQRF8xMDAwOgorCQlzcGVlZCA9ICIxR2JwcyI7CisJCWJyZWFrOworCWNhc2UgTUFDX1NQRF8yNTAwOgorCQlzcGVlZCA9ICIyLjVHYnBzIjsKKwkJYnJlYWs7CisJfQorCisJaWYgKHBtc3IgJiBNQUNfTE5LX1NUUykgeworCQlkZXZfaW5mbyhnc3ctPmRldiwgIlBvcnQgJWQgTGluayBpcyBVcCAtICVzLyVzXG4iLAorCQkJIHBvcnQsIHNwZWVkLCAocG1zciAmIE1BQ19EUFhfU1RTKSA/ICJGdWxsIiA6ICJIYWxmIik7CisJfSBlbHNlIHsKKwkJZGV2X2luZm8oZ3N3LT5kZXYsICJQb3J0ICVkIExpbmsgaXMgRG93blxuIiwgcG9ydCk7CisJfQorfQorCit2b2lkIG10NzUzeF9pcnFfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3OworCXUzMiBzdHMsIHBoeXN0cywgbGFzdHN0czsKKwlpbnQgaTsKKworCWdzdyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZ3N3X210NzUzeCwgaXJxX3dvcmtlcik7CisKKwlzdHMgPSBtdDc1M3hfcmVnX3JlYWQoZ3N3LCBTWVNfSU5UX1NUUyk7CisKKwkvKiBDaGVjayBmb3IgY2hhbmdlZCBQSFkgbGluayBzdGF0dXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTVQ3NTNYX05VTV9QSFlTOyBpKyspIHsKKwkJaWYgKCEoc3RzICYgUEhZX0xDX0lOVChpKSkpCisJCQljb250aW51ZTsKKworCQlsYXN0c3RzID0gZ3N3LT5waHlfbGlua19zdHMgJiBCSVQoaSk7CisJCXBoeXN0cyA9ICEhKGdzdy0+bWlpX3JlYWQoZ3N3LCBpLCBNSUlfQk1TUikgJiBCTVNSX0xTVEFUVVMpOworCQlwaHlzdHMgPDw9IGk7CisKKwkJaWYgKHBoeXN0cyBeIGxhc3RzdHMpIHsKKwkJCWdzdy0+cGh5X2xpbmtfc3RzIF49IEJJVChpKTsKKwkJCWRpc3BsYXlfcG9ydF9saW5rX3N0YXR1cyhnc3csIGkpOworCQl9CisJfQorCisJbXQ3NTN4X3JlZ193cml0ZShnc3csIFNZU19JTlRfU1RTLCBzdHMpOworCisJZW5hYmxlX2lycShnc3ctPmlycSk7Cit9CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9tdGsvbXQ3NTN4L210NzUzeF9tZGlvLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9tdGsvbXQ3NTN4L210NzUzeF9tZGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDZhMTExNAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L210ay9tdDc1M3gvbXQ3NTN4X21kaW8uYwpAQCAtMCwwICsxLDg2MSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTggTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBXZWlqaWUgR2FvIDx3ZWlqaWUuZ2FvQG1lZGlhdGVrLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcmVzZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfbWRpby5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L29mX25ldC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorCisjaW5jbHVkZSAibXQ3NTN4LmgiCisjaW5jbHVkZSAibXQ3NTN4X3N3Y29uZmlnLmgiCisjaW5jbHVkZSAibXQ3NTN4X3JlZ3MuaCIKKyNpbmNsdWRlICJtdDc1M3hfbmwuaCIKKyNpbmNsdWRlICJtdDc1MzAuaCIKKyNpbmNsdWRlICJtdDc1MzEuaCIKKworc3RhdGljIHUzMiBtdDc1M3hfaWQ7CitzdHJ1Y3QgbGlzdF9oZWFkIG10NzUzeF9kZXZzOworc3RhdGljIERFRklORV9NVVRFWChtdDc1M3hfZGV2c19sb2NrKTsKKworc3RhdGljIHN0cnVjdCBtdDc1M3hfc3dfaWQgKm10NzUzeF9zd19pZHNbXSA9IHsKKwkmbXQ3NTMwX2lkLAorCSZtdDc1MzFfaWQsCit9OworCit1MzIgbXQ3NTN4X3JlZ19yZWFkKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3csIHUzMiByZWcpCit7CisJdTMyIGhpZ2gsIGxvdzsKKworCW11dGV4X2xvY2soJmdzdy0+aG9zdF9idXMtPm1kaW9fbG9jayk7CisKKwlnc3ctPmhvc3RfYnVzLT53cml0ZShnc3ctPmhvc3RfYnVzLCBnc3ctPnNtaV9hZGRyLCAweDFmLAorCQkocmVnICYgTVQ3NTNYX1JFR19QQUdFX0FERFJfTSkgPj4gTVQ3NTNYX1JFR19QQUdFX0FERFJfUyk7CisKKwlsb3cgPSBnc3ctPmhvc3RfYnVzLT5yZWFkKGdzdy0+aG9zdF9idXMsIGdzdy0+c21pX2FkZHIsCisJCShyZWcgJiBNVDc1M1hfUkVHX0FERFJfTSkgPj4gTVQ3NTNYX1JFR19BRERSX1MpOworCisJaGlnaCA9IGdzdy0+aG9zdF9idXMtPnJlYWQoZ3N3LT5ob3N0X2J1cywgZ3N3LT5zbWlfYWRkciwgMHgxMCk7CisKKwltdXRleF91bmxvY2soJmdzdy0+aG9zdF9idXMtPm1kaW9fbG9jayk7CisKKwlyZXR1cm4gKGhpZ2ggPDwgMTYpIHwgKGxvdyAmIDB4ZmZmZik7Cit9CisKK3ZvaWQgbXQ3NTN4X3JlZ193cml0ZShzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3LCB1MzIgcmVnLCB1MzIgdmFsKQoreworCW11dGV4X2xvY2soJmdzdy0+aG9zdF9idXMtPm1kaW9fbG9jayk7CisKKwlnc3ctPmhvc3RfYnVzLT53cml0ZShnc3ctPmhvc3RfYnVzLCBnc3ctPnNtaV9hZGRyLCAweDFmLAorCQkocmVnICYgTVQ3NTNYX1JFR19QQUdFX0FERFJfTSkgPj4gTVQ3NTNYX1JFR19QQUdFX0FERFJfUyk7CisKKwlnc3ctPmhvc3RfYnVzLT53cml0ZShnc3ctPmhvc3RfYnVzLCBnc3ctPnNtaV9hZGRyLAorCQkocmVnICYgTVQ3NTNYX1JFR19BRERSX00pID4+IE1UNzUzWF9SRUdfQUREUl9TLCB2YWwgJiAweGZmZmYpOworCisJZ3N3LT5ob3N0X2J1cy0+d3JpdGUoZ3N3LT5ob3N0X2J1cywgZ3N3LT5zbWlfYWRkciwgMHgxMCwgdmFsID4+IDE2KTsKKworCW11dGV4X3VubG9jaygmZ3N3LT5ob3N0X2J1cy0+bWRpb19sb2NrKTsKK30KKworLyogSW5kaXJlY3QgTURJTyBjbGF1c2UgMjIvNDUgYWNjZXNzICovCitzdGF0aWMgaW50IG10NzUzeF9taWlfcncoc3RydWN0IGdzd19tdDc1M3ggKmdzdywgaW50IHBoeSwgaW50IHJlZywgdTE2IGRhdGEsCisJCQkgdTMyIGNtZCwgdTMyIHN0KQoreworCWt0aW1lX3QgdGltZW91dDsKKwl1MzIgdmFsLCB0aW1lb3V0X3VzOworCWludCByZXQgPSAwOworCisJdGltZW91dF91cyA9IDEwMDAwMDsKKwl0aW1lb3V0ID0ga3RpbWVfYWRkX3VzKGt0aW1lX2dldCgpLCB0aW1lb3V0X3VzKTsKKwl3aGlsZSAoMSkgeworCQl2YWwgPSBtdDc1M3hfcmVnX3JlYWQoZ3N3LCBQSFlfSUFDKTsKKworCQlpZiAoKHZhbCAmIFBIWV9BQ1NfU1QpID09IDApCisJCQlicmVhazsKKworCQlpZiAoa3RpbWVfY29tcGFyZShrdGltZV9nZXQoKSwgdGltZW91dCkgPiAwKQorCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJdmFsID0gKHN0IDw8IE1ESU9fU1RfUykgfAorCSAgICAgICgoY21kIDw8IE1ESU9fQ01EX1MpICYgTURJT19DTURfTSkgfAorCSAgICAgICgocGh5IDw8IE1ESU9fUEhZX0FERFJfUykgJiBNRElPX1BIWV9BRERSX00pIHwKKwkgICAgICAoKHJlZyA8PCBNRElPX1JFR19BRERSX1MpICYgTURJT19SRUdfQUREUl9NKTsKKworCWlmIChjbWQgPT0gTURJT19DTURfV1JJVEUgfHwgY21kID09IE1ESU9fQ01EX0FERFIpCisJCXZhbCB8PSBkYXRhICYgTURJT19SV19EQVRBX007CisKKwltdDc1M3hfcmVnX3dyaXRlKGdzdywgUEhZX0lBQywgdmFsIHwgUEhZX0FDU19TVCk7CisKKwl0aW1lb3V0X3VzID0gMTAwMDAwOworCXRpbWVvdXQgPSBrdGltZV9hZGRfdXMoa3RpbWVfZ2V0KCksIHRpbWVvdXRfdXMpOworCXdoaWxlICgxKSB7CisJCXZhbCA9IG10NzUzeF9yZWdfcmVhZChnc3csIFBIWV9JQUMpOworCisJCWlmICgodmFsICYgUEhZX0FDU19TVCkgPT0gMCkKKwkJCWJyZWFrOworCisJCWlmIChrdGltZV9jb21wYXJlKGt0aW1lX2dldCgpLCB0aW1lb3V0KSA+IDApCisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwlpZiAoY21kID09IE1ESU9fQ01EX1JFQUQgfHwgY21kID09IE1ESU9fQ01EX1JFQURfQzQ1KSB7CisJCXZhbCA9IG10NzUzeF9yZWdfcmVhZChnc3csIFBIWV9JQUMpOworCQlyZXQgPSB2YWwgJiBNRElPX1JXX0RBVEFfTTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgbXQ3NTN4X21paV9yZWFkKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3csIGludCBwaHksIGludCByZWcpCit7CisJaW50IHZhbDsKKworCWlmIChwaHkgPCBNVDc1M1hfTlVNX1BIWVMpCisJCXBoeSA9IChnc3ctPnBoeV9iYXNlICsgcGh5KSAmIE1UNzUzWF9TTUlfQUREUl9NQVNLOworCisJbXV0ZXhfbG9jaygmZ3N3LT5taWlfbG9jayk7CisJdmFsID0gbXQ3NTN4X21paV9ydyhnc3csIHBoeSwgcmVnLCAwLCBNRElPX0NNRF9SRUFELCBNRElPX1NUX0MyMik7CisJbXV0ZXhfdW5sb2NrKCZnc3ctPm1paV9sb2NrKTsKKworCXJldHVybiB2YWw7Cit9CisKK3ZvaWQgbXQ3NTN4X21paV93cml0ZShzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3LCBpbnQgcGh5LCBpbnQgcmVnLCB1MTYgdmFsKQoreworCWlmIChwaHkgPCBNVDc1M1hfTlVNX1BIWVMpCisJCXBoeSA9IChnc3ctPnBoeV9iYXNlICsgcGh5KSAmIE1UNzUzWF9TTUlfQUREUl9NQVNLOworCisJbXV0ZXhfbG9jaygmZ3N3LT5taWlfbG9jayk7CisJbXQ3NTN4X21paV9ydyhnc3csIHBoeSwgcmVnLCB2YWwsIE1ESU9fQ01EX1dSSVRFLCBNRElPX1NUX0MyMik7CisJbXV0ZXhfdW5sb2NrKCZnc3ctPm1paV9sb2NrKTsKK30KKworaW50IG10NzUzeF9tbWRfcmVhZChzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3LCBpbnQgYWRkciwgaW50IGRldmFkLCB1MTYgcmVnKQoreworCWludCB2YWw7CisKKwlpZiAoYWRkciA8IE1UNzUzWF9OVU1fUEhZUykKKwkJYWRkciA9IChnc3ctPnBoeV9iYXNlICsgYWRkcikgJiBNVDc1M1hfU01JX0FERFJfTUFTSzsKKworCW11dGV4X2xvY2soJmdzdy0+bWlpX2xvY2spOworCW10NzUzeF9taWlfcncoZ3N3LCBhZGRyLCBkZXZhZCwgcmVnLCBNRElPX0NNRF9BRERSLCBNRElPX1NUX0M0NSk7CisJdmFsID0gbXQ3NTN4X21paV9ydyhnc3csIGFkZHIsIGRldmFkLCAwLCBNRElPX0NNRF9SRUFEX0M0NSwKKwkJCSAgICBNRElPX1NUX0M0NSk7CisJbXV0ZXhfdW5sb2NrKCZnc3ctPm1paV9sb2NrKTsKKworCXJldHVybiB2YWw7Cit9CisKK3ZvaWQgbXQ3NTN4X21tZF93cml0ZShzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3LCBpbnQgYWRkciwgaW50IGRldmFkLCB1MTYgcmVnLAorCQkgICAgICB1MTYgdmFsKQoreworCWlmIChhZGRyIDwgTVQ3NTNYX05VTV9QSFlTKQorCQlhZGRyID0gKGdzdy0+cGh5X2Jhc2UgKyBhZGRyKSAmIE1UNzUzWF9TTUlfQUREUl9NQVNLOworCisJbXV0ZXhfbG9jaygmZ3N3LT5taWlfbG9jayk7CisJbXQ3NTN4X21paV9ydyhnc3csIGFkZHIsIGRldmFkLCByZWcsIE1ESU9fQ01EX0FERFIsIE1ESU9fU1RfQzQ1KTsKKwltdDc1M3hfbWlpX3J3KGdzdywgYWRkciwgZGV2YWQsIHZhbCwgTURJT19DTURfV1JJVEUsIE1ESU9fU1RfQzQ1KTsKKwltdXRleF91bmxvY2soJmdzdy0+bWlpX2xvY2spOworfQorCitpbnQgbXQ3NTN4X21tZF9pbmRfcmVhZChzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3LCBpbnQgYWRkciwgaW50IGRldmFkLCB1MTYgcmVnKQoreworCXUxNiB2YWw7CisKKwlpZiAoYWRkciA8IE1UNzUzWF9OVU1fUEhZUykKKwkJYWRkciA9IChnc3ctPnBoeV9iYXNlICsgYWRkcikgJiBNVDc1M1hfU01JX0FERFJfTUFTSzsKKworCW11dGV4X2xvY2soJmdzdy0+bWlpX2xvY2spOworCisJbXQ3NTN4X21paV9ydyhnc3csIGFkZHIsIE1JSV9NTURfQUNDX0NUTF9SRUcsCisJCSAgICAgIChNTURfQUREUiA8PCBNTURfQ01EX1MpIHwKKwkJICAgICAgKChkZXZhZCA8PCBNTURfREVWQURfUykgJiBNTURfREVWQURfTSksCisJCSAgICAgIE1ESU9fQ01EX1dSSVRFLCBNRElPX1NUX0MyMik7CisKKwltdDc1M3hfbWlpX3J3KGdzdywgYWRkciwgTUlJX01NRF9BRERSX0RBVEFfUkVHLCByZWcsCisJCSAgICAgIE1ESU9fQ01EX1dSSVRFLCBNRElPX1NUX0MyMik7CisKKwltdDc1M3hfbWlpX3J3KGdzdywgYWRkciwgTUlJX01NRF9BQ0NfQ1RMX1JFRywKKwkJICAgICAgKE1NRF9EQVRBIDw8IE1NRF9DTURfUykgfAorCQkgICAgICAoKGRldmFkIDw8IE1NRF9ERVZBRF9TKSAmIE1NRF9ERVZBRF9NKSwKKwkJICAgICAgTURJT19DTURfV1JJVEUsIE1ESU9fU1RfQzIyKTsKKworCXZhbCA9IG10NzUzeF9taWlfcncoZ3N3LCBhZGRyLCBNSUlfTU1EX0FERFJfREFUQV9SRUcsIDAsCisJCQkgICAgTURJT19DTURfUkVBRCwgTURJT19TVF9DMjIpOworCisJbXV0ZXhfdW5sb2NrKCZnc3ctPm1paV9sb2NrKTsKKworCXJldHVybiB2YWw7Cit9CisKK3ZvaWQgbXQ3NTN4X21tZF9pbmRfd3JpdGUoc3RydWN0IGdzd19tdDc1M3ggKmdzdywgaW50IGFkZHIsIGludCBkZXZhZCwgdTE2IHJlZywKKwkJCSAgdTE2IHZhbCkKK3sKKwlpZiAoYWRkciA8IE1UNzUzWF9OVU1fUEhZUykKKwkJYWRkciA9IChnc3ctPnBoeV9iYXNlICsgYWRkcikgJiBNVDc1M1hfU01JX0FERFJfTUFTSzsKKworCW11dGV4X2xvY2soJmdzdy0+bWlpX2xvY2spOworCisJbXQ3NTN4X21paV9ydyhnc3csIGFkZHIsIE1JSV9NTURfQUNDX0NUTF9SRUcsCisJCSAgICAgIChNTURfQUREUiA8PCBNTURfQ01EX1MpIHwKKwkJICAgICAgKChkZXZhZCA8PCBNTURfREVWQURfUykgJiBNTURfREVWQURfTSksCisJCSAgICAgIE1ESU9fQ01EX1dSSVRFLCBNRElPX1NUX0MyMik7CisKKwltdDc1M3hfbWlpX3J3KGdzdywgYWRkciwgTUlJX01NRF9BRERSX0RBVEFfUkVHLCByZWcsCisJCSAgICAgIE1ESU9fQ01EX1dSSVRFLCBNRElPX1NUX0MyMik7CisKKwltdDc1M3hfbWlpX3J3KGdzdywgYWRkciwgTUlJX01NRF9BQ0NfQ1RMX1JFRywKKwkJICAgICAgKE1NRF9EQVRBIDw8IE1NRF9DTURfUykgfAorCQkgICAgICAoKGRldmFkIDw8IE1NRF9ERVZBRF9TKSAmIE1NRF9ERVZBRF9NKSwKKwkJICAgICAgTURJT19DTURfV1JJVEUsIE1ESU9fU1RfQzIyKTsKKworCW10NzUzeF9taWlfcncoZ3N3LCBhZGRyLCBNSUlfTU1EX0FERFJfREFUQV9SRUcsIHZhbCwKKwkJICAgICAgTURJT19DTURfV1JJVEUsIE1ESU9fU1RfQzIyKTsKKworCW11dGV4X3VubG9jaygmZ3N3LT5taWlfbG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG10NzUzeF9nZXRfZHVwbGV4KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJcmV0dXJuIG9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwgImZ1bGwtZHVwbGV4Iik7Cit9CisKK3N0YXRpYyB2b2lkIG10NzUzeF9sb2FkX3BvcnRfY2ZnKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3cpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpwb3J0X25wOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZml4ZWRfbGlua19ub2RlOworCXN0cnVjdCBtdDc1M3hfcG9ydF9jZmcgKnBvcnRfY2ZnOworCXUzMiBwb3J0OworCisJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShnc3ctPmRldi0+b2Zfbm9kZSwgcG9ydF9ucCkgeworCQlpZiAoIW9mX2RldmljZV9pc19jb21wYXRpYmxlKHBvcnRfbnAsICJtZWRpYXRlayxtdDc1M3gtcG9ydCIpKQorCQkJY29udGludWU7CisKKwkJaWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKHBvcnRfbnApKQorCQkJY29udGludWU7CisKKwkJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBvcnRfbnAsICJyZWciLCAmcG9ydCkpCisJCQljb250aW51ZTsKKworCQlzd2l0Y2ggKHBvcnQpIHsKKwkJY2FzZSA1OgorCQkJcG9ydF9jZmcgPSAmZ3N3LT5wb3J0NV9jZmc7CisJCQlicmVhazsKKwkJY2FzZSA2OgorCQkJcG9ydF9jZmcgPSAmZ3N3LT5wb3J0Nl9jZmc7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHBvcnRfY2ZnLT5lbmFibGVkKSB7CisJCQlkZXZfaW5mbyhnc3ctPmRldiwgImR1cGxpY2F0ZWQgbm9kZSBmb3IgcG9ydCVkXG4iLAorCQkJCSBwb3J0X2NmZy0+cGh5X21vZGUpOworCQkJY29udGludWU7CisJCX0KKworCQlwb3J0X2NmZy0+bnAgPSBwb3J0X25wOworCisJCXBvcnRfY2ZnLT5waHlfbW9kZSA9IG9mX2dldF9waHlfbW9kZShwb3J0X25wKTsKKwkJaWYgKHBvcnRfY2ZnLT5waHlfbW9kZSA8IDApIHsKKwkJCWRldl9pbmZvKGdzdy0+ZGV2LCAiaW5jb3JyZWN0IHBoeS1tb2RlICVkXG4iLCBwb3J0KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZml4ZWRfbGlua19ub2RlID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUocG9ydF9ucCwgImZpeGVkLWxpbmsiKTsKKwkJaWYgKGZpeGVkX2xpbmtfbm9kZSkgeworCQkJdTMyIHNwZWVkOworCisJCQlwb3J0X2NmZy0+Zm9yY2VfbGluayA9IDE7CisJCQlwb3J0X2NmZy0+ZHVwbGV4ID0gbXQ3NTN4X2dldF9kdXBsZXgoZml4ZWRfbGlua19ub2RlKTsKKworCQkJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKGZpeGVkX2xpbmtfbm9kZSwgInNwZWVkIiwKKwkJCQkJCSAmc3BlZWQpKSB7CisJCQkJc3BlZWQgPSAwOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlvZl9ub2RlX3B1dChmaXhlZF9saW5rX25vZGUpOworCisJCQlzd2l0Y2ggKHNwZWVkKSB7CisJCQljYXNlIDEwOgorCQkJCXBvcnRfY2ZnLT5zcGVlZCA9IE1BQ19TUERfMTA7CisJCQkJYnJlYWs7CisJCQljYXNlIDEwMDoKKwkJCQlwb3J0X2NmZy0+c3BlZWQgPSBNQUNfU1BEXzEwMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgMTAwMDoKKwkJCQlwb3J0X2NmZy0+c3BlZWQgPSBNQUNfU1BEXzEwMDA7CisJCQkJYnJlYWs7CisJCQljYXNlIDI1MDA6CisJCQkJcG9ydF9jZmctPnNwZWVkID0gTUFDX1NQRF8yNTAwOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlkZXZfaW5mbyhnc3ctPmRldiwgImluY29ycmVjdCBzcGVlZCAlZFxuIiwKKwkJCQkJIHNwZWVkKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCisJCXBvcnRfY2ZnLT5zc2Nfb24gPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wocG9ydF9jZmctPm5wLAorCQkJCQkJCSAibWVkaWF0ZWssc3NjLW9uIik7CisJCXBvcnRfY2ZnLT5zdGFnX29uID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKHBvcnRfY2ZnLT5ucCwKKwkJCQkJCQkgICJtZWRpYXRlayxzdGFnLW9uIik7CisJCXBvcnRfY2ZnLT5lbmFibGVkID0gMTsKKwl9Cit9CisKK3ZvaWQgbXQ3NTN4X3RyX3dyaXRlKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3csIGludCBhZGRyLCB1OCBjaCwgdTggbm9kZSwgdTggZGFkZHIsCisJCSAgICAgdTMyIGRhdGEpCit7CisJa3RpbWVfdCB0aW1lb3V0OworCXUzMiB0aW1lb3V0X3VzOworCXUzMiB2YWw7CisKKwlpZiAoYWRkciA8IE1UNzUzWF9OVU1fUEhZUykKKwkJYWRkciA9IChnc3ctPnBoeV9iYXNlICsgYWRkcikgJiBNVDc1M1hfU01JX0FERFJfTUFTSzsKKworCWdzdy0+bWlpX3dyaXRlKGdzdywgYWRkciwgUEhZX0NMMjJfUEFHRV9DVFJMLCBQSFlfVFJfUEFHRSk7CisKKwl2YWwgPSBnc3ctPm1paV9yZWFkKGdzdywgYWRkciwgUEhZX1RSX0NUUkwpOworCisJdGltZW91dF91cyA9IDEwMDAwMDsKKwl0aW1lb3V0ID0ga3RpbWVfYWRkX3VzKGt0aW1lX2dldCgpLCB0aW1lb3V0X3VzKTsKKwl3aGlsZSAoMSkgeworCQl2YWwgPSBnc3ctPm1paV9yZWFkKGdzdywgYWRkciwgUEhZX1RSX0NUUkwpOworCisJCWlmICghISh2YWwgJiBQSFlfVFJfUEtUX1hNVF9TVEEpKQorCQkJYnJlYWs7CisKKwkJaWYgKGt0aW1lX2NvbXBhcmUoa3RpbWVfZ2V0KCksIHRpbWVvdXQpID4gMCkKKwkJCWdvdG8gb3V0OworCX0KKworCWdzdy0+bWlpX3dyaXRlKGdzdywgYWRkciwgUEhZX1RSX0xPV19EQVRBLCBQSFlfVFJfTE9XX1ZBTChkYXRhKSk7CisJZ3N3LT5taWlfd3JpdGUoZ3N3LCBhZGRyLCBQSFlfVFJfSElHSF9EQVRBLCBQSFlfVFJfSElHSF9WQUwoZGF0YSkpOworCXZhbCA9IFBIWV9UUl9QS1RfWE1UX1NUQSB8IChQSFlfVFJfV1JJVEUgPDwgUEhZX1RSX1dSX1MpIHwKKwkgICAgICAoY2ggPDwgUEhZX1RSX0NIX0FERFJfUykgfCAobm9kZSA8PCBQSFlfVFJfTk9ERV9BRERSX1MpIHwKKwkgICAgICAoZGFkZHIgPDwgUEhZX1RSX0RBVEFfQUREUl9TKTsKKwlnc3ctPm1paV93cml0ZShnc3csIGFkZHIsIFBIWV9UUl9DVFJMLCB2YWwpOworCisJdGltZW91dF91cyA9IDEwMDAwMDsKKwl0aW1lb3V0ID0ga3RpbWVfYWRkX3VzKGt0aW1lX2dldCgpLCB0aW1lb3V0X3VzKTsKKwl3aGlsZSAoMSkgeworCQl2YWwgPSBnc3ctPm1paV9yZWFkKGdzdywgYWRkciwgUEhZX1RSX0NUUkwpOworCisJCWlmICghISh2YWwgJiBQSFlfVFJfUEtUX1hNVF9TVEEpKQorCQkJYnJlYWs7CisKKwkJaWYgKGt0aW1lX2NvbXBhcmUoa3RpbWVfZ2V0KCksIHRpbWVvdXQpID4gMCkKKwkJCWdvdG8gb3V0OworCX0KK291dDoKKwlnc3ctPm1paV93cml0ZShnc3csIGFkZHIsIFBIWV9DTDIyX1BBR0VfQ1RSTCwgMCk7Cit9CisKK2ludCBtdDc1M3hfdHJfcmVhZChzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3LCBpbnQgYWRkciwgdTggY2gsIHU4IG5vZGUsIHU4IGRhZGRyKQoreworCWt0aW1lX3QgdGltZW91dDsKKwl1MzIgdGltZW91dF91czsKKwl1MzIgdmFsOworCXU4IHZhbF9oOworCisJaWYgKGFkZHIgPCBNVDc1M1hfTlVNX1BIWVMpCisJCWFkZHIgPSAoZ3N3LT5waHlfYmFzZSArIGFkZHIpICYgTVQ3NTNYX1NNSV9BRERSX01BU0s7CisKKwlnc3ctPm1paV93cml0ZShnc3csIGFkZHIsIFBIWV9DTDIyX1BBR0VfQ1RSTCwgUEhZX1RSX1BBR0UpOworCisJdmFsID0gZ3N3LT5taWlfcmVhZChnc3csIGFkZHIsIFBIWV9UUl9DVFJMKTsKKworCXRpbWVvdXRfdXMgPSAxMDAwMDA7CisJdGltZW91dCA9IGt0aW1lX2FkZF91cyhrdGltZV9nZXQoKSwgdGltZW91dF91cyk7CisJd2hpbGUgKDEpIHsKKwkJdmFsID0gZ3N3LT5taWlfcmVhZChnc3csIGFkZHIsIFBIWV9UUl9DVFJMKTsKKworCQlpZiAoISEodmFsICYgUEhZX1RSX1BLVF9YTVRfU1RBKSkKKwkJCWJyZWFrOworCisJCWlmIChrdGltZV9jb21wYXJlKGt0aW1lX2dldCgpLCB0aW1lb3V0KSA+IDApIHsKKwkJCWdzdy0+bWlpX3dyaXRlKGdzdywgYWRkciwgUEhZX0NMMjJfUEFHRV9DVFJMLCAwKTsKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQl9CisJfQorCisJdmFsID0gUEhZX1RSX1BLVF9YTVRfU1RBIHwgKFBIWV9UUl9SRUFEIDw8IFBIWV9UUl9XUl9TKSB8CisJICAgICAgKGNoIDw8IFBIWV9UUl9DSF9BRERSX1MpIHwgKG5vZGUgPDwgUEhZX1RSX05PREVfQUREUl9TKSB8CisJICAgICAgKGRhZGRyIDw8IFBIWV9UUl9EQVRBX0FERFJfUyk7CisJZ3N3LT5taWlfd3JpdGUoZ3N3LCBhZGRyLCBQSFlfVFJfQ1RSTCwgdmFsKTsKKworCXRpbWVvdXRfdXMgPSAxMDAwMDA7CisJdGltZW91dCA9IGt0aW1lX2FkZF91cyhrdGltZV9nZXQoKSwgdGltZW91dF91cyk7CisJd2hpbGUgKDEpIHsKKwkJdmFsID0gZ3N3LT5taWlfcmVhZChnc3csIGFkZHIsIFBIWV9UUl9DVFJMKTsKKworCQlpZiAoISEodmFsICYgUEhZX1RSX1BLVF9YTVRfU1RBKSkKKwkJCWJyZWFrOworCisJCWlmIChrdGltZV9jb21wYXJlKGt0aW1lX2dldCgpLCB0aW1lb3V0KSA+IDApIHsKKwkJCWdzdy0+bWlpX3dyaXRlKGdzdywgYWRkciwgUEhZX0NMMjJfUEFHRV9DVFJMLCAwKTsKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQl9CisJfQorCisJdmFsID0gZ3N3LT5taWlfcmVhZChnc3csIGFkZHIsIFBIWV9UUl9MT1dfREFUQSk7CisJdmFsX2ggPSBnc3ctPm1paV9yZWFkKGdzdywgYWRkciwgUEhZX1RSX0hJR0hfREFUQSk7CisJdmFsIHw9ICh2YWxfaCA8PCAxNik7CisKKwlnc3ctPm1paV93cml0ZShnc3csIGFkZHIsIFBIWV9DTDIyX1BBR0VfQ1RSTCwgMCk7CisKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgdm9pZCBtdDc1M3hfYWRkX2dzdyhzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3KQoreworCW11dGV4X2xvY2soJm10NzUzeF9kZXZzX2xvY2spOworCWdzdy0+aWQgPSBtdDc1M3hfaWQrKzsKKwlJTklUX0xJU1RfSEVBRCgmZ3N3LT5saXN0KTsKKwlsaXN0X2FkZF90YWlsKCZnc3ctPmxpc3QsICZtdDc1M3hfZGV2cyk7CisJbXV0ZXhfdW5sb2NrKCZtdDc1M3hfZGV2c19sb2NrKTsKK30KKworc3RhdGljIHZvaWQgbXQ3NTN4X3JlbW92ZV9nc3coc3RydWN0IGdzd19tdDc1M3ggKmdzdykKK3sKKwltdXRleF9sb2NrKCZtdDc1M3hfZGV2c19sb2NrKTsKKwlsaXN0X2RlbCgmZ3N3LT5saXN0KTsKKwltdXRleF91bmxvY2soJm10NzUzeF9kZXZzX2xvY2spOworfQorCisKK3N0cnVjdCBnc3dfbXQ3NTN4ICptdDc1M3hfZ2V0X2dzdyh1MzIgaWQpCit7CisJc3RydWN0IGdzd19tdDc1M3ggKmRldjsKKworCW11dGV4X2xvY2soJm10NzUzeF9kZXZzX2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZtdDc1M3hfZGV2cywgbGlzdCkgeworCQlpZiAoZGV2LT5pZCA9PSBpZCkKKwkJCXJldHVybiBkZXY7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZtdDc1M3hfZGV2c19sb2NrKTsKKworCXJldHVybiBOVUxMOworfQorCitzdHJ1Y3QgZ3N3X210NzUzeCAqbXQ3NTN4X2dldF9maXJzdF9nc3codm9pZCkKK3sKKwlzdHJ1Y3QgZ3N3X210NzUzeCAqZGV2OworCisJbXV0ZXhfbG9jaygmbXQ3NTN4X2RldnNfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJm10NzUzeF9kZXZzLCBsaXN0KQorCQlyZXR1cm4gZGV2OworCisJbXV0ZXhfdW5sb2NrKCZtdDc1M3hfZGV2c19sb2NrKTsKKworCXJldHVybiBOVUxMOworfQorCit2b2lkIG10NzUzeF9wdXRfZ3N3KHZvaWQpCit7CisJbXV0ZXhfdW5sb2NrKCZtdDc1M3hfZGV2c19sb2NrKTsKK30KKwordm9pZCBtdDc1M3hfbG9ja19nc3codm9pZCkKK3sKKwltdXRleF9sb2NrKCZtdDc1M3hfZGV2c19sb2NrKTsKK30KKworc3RhdGljIGludCBtdDc1M3hfaHdfcmVzZXQoc3RydWN0IGdzd19tdDc1M3ggKmdzdykKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZ3N3LT5kZXYtPm9mX25vZGU7CisJc3RydWN0IHJlc2V0X2NvbnRyb2wgKnJzdGM7CisJaW50IG1jbTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCW1jbSA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwgIm1lZGlhdGVrLG1jbSIpOworCWlmIChtY20pIHsKKwkJcnN0YyA9IGRldm1fcmVzZXRfY29udHJvbF9nZXQoZ3N3LT5kZXYsICJtY20iKTsKKwkJcmV0ID0gSVNfRVJSKHJzdGMpOworCQlpZiAoSVNfRVJSKHJzdGMpKSB7CisJCQlkZXZfZXJyKGdzdy0+ZGV2LCAiTWlzc2luZyByZXNldCBjdHJsIG9mIHN3aXRjaFxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJcmVzZXRfY29udHJvbF9hc3NlcnQocnN0Yyk7CisJCW1zbGVlcCgzMCk7CisJCXJlc2V0X2NvbnRyb2xfZGVhc3NlcnQocnN0Yyk7CisKKwkJZ3N3LT5yZXNldF9waW4gPSAtMTsKKwkJcmV0dXJuIDA7CisJfQorCisJZ3N3LT5yZXNldF9waW4gPSBvZl9nZXRfbmFtZWRfZ3BpbyhucCwgInJlc2V0LWdwaW9zIiwgMCk7CisJaWYgKGdzdy0+cmVzZXRfcGluIDwgMCkgeworCQlkZXZfZXJyKGdzdy0+ZGV2LCAiTWlzc2luZyByZXNldCBwaW4gb2Ygc3dpdGNoXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBkZXZtX2dwaW9fcmVxdWVzdChnc3ctPmRldiwgZ3N3LT5yZXNldF9waW4sICJtdDc1M3gtcmVzZXQiKTsKKwlpZiAocmV0KSB7CisJCWRldl9pbmZvKGdzdy0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgZ3BpbyAlZFxuIiwKKwkJCSBnc3ctPnJlc2V0X3Bpbik7CisJCXJldHVybiByZXQ7CisJfQorCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdzdy0+cmVzZXRfcGluLCAwKTsKKwltc2xlZXAoMzApOworCWdwaW9fc2V0X3ZhbHVlKGdzdy0+cmVzZXRfcGluLCAxKTsKKwltc2xlZXAoNTAwKTsKKworCXJldHVybiAwOworfQorI2lmIDEgLy9YRFhEWERYRAorc3RhdGljIGludCBtdDc1M3hfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnKQoreworCXN0cnVjdCBnc3dfbXQ3NTN4ICpnc3cgPSBidXMtPnByaXY7CisKKwlyZXR1cm4gZ3N3LT5taWlfcmVhZChnc3csIGFkZHIsIHJlZyk7Cit9CisKK3N0YXRpYyBpbnQgbXQ3NTN4X21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCByZWcsIHUxNiB2YWwpCit7CisJc3RydWN0IGdzd19tdDc1M3ggKmdzdyA9IGJ1cy0+cHJpdjsKKworCWdzdy0+bWlpX3dyaXRlKGdzdywgYWRkciwgcmVnLCB2YWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbXQ3NTN4X2R1bW15X25ldGRldl9vcHMgPSB7Cit9OworCitzdGF0aWMgdm9pZCBtdDc1M3hfcGh5X2xpbmtfaGFuZGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtdDc1M3hfcGh5ICpwaHkgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgbXQ3NTN4X3BoeSwgbmV0ZGV2KTsKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gcGh5LT5waHlkZXY7CisJc3RydWN0IGdzd19tdDc1M3ggKmdzdyA9IHBoeS0+Z3N3OworCXUzMiBwb3J0ID0gcGh5IC0gZ3N3LT5waHlzOworCisJaWYgKHBoeWRldi0+bGluaykgeworCQlkZXZfaW5mbyhnc3ctPmRldiwKKwkJCSAiUG9ydCAlZCBMaW5rIGlzIFVwIC0gJXMvJXMgLSBmbG93IGNvbnRyb2wgJXNcbiIsCisJCQkgcG9ydCwgcGh5X3NwZWVkX3RvX3N0cihwaHlkZXYtPnNwZWVkKSwKKwkJCSAocGh5ZGV2LT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpID8gIkZ1bGwiIDogIkhhbGYiLAorCQkJIHBoeWRldi0+cGF1c2UgPyAicngvdHgiIDogIm9mZiIpOworCX0gZWxzZSB7CisJCWRldl9pbmZvKGdzdy0+ZGV2LCAiUG9ydCAlZCBMaW5rIGlzIERvd25cbiIsIHBvcnQpOworCX0KK30KKworc3RhdGljIHZvaWQgbXQ3NTN4X2Nvbm5lY3RfaW50ZXJuYWxfcGh5cyhzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3LAorCQkJCQkgc3RydWN0IGRldmljZV9ub2RlICptaWlfbnApCit7CisJc3RydWN0IGRldmljZV9ub2RlICpwaHlfbnA7CisJc3RydWN0IG10NzUzeF9waHkgKnBoeTsKKwlpbnQgcGh5X21vZGU7CisJdTMyIHBoeWFkOworCisJaWYgKCFtaWlfbnApCisJCXJldHVybjsKKworCWZvcl9lYWNoX2NoaWxkX29mX25vZGUobWlpX25wLCBwaHlfbnApIHsKKwkJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBoeV9ucCwgInJlZyIsICZwaHlhZCkpCisJCQljb250aW51ZTsKKworCQlpZiAocGh5YWQgPj0gTVQ3NTNYX05VTV9QSFlTKQorCQkJY29udGludWU7CisKKwkJcGh5X21vZGUgPSBvZl9nZXRfcGh5X21vZGUocGh5X25wKTsKKwkJaWYgKHBoeV9tb2RlIDwgMCkgeworCQkJZGV2X2luZm8oZ3N3LT5kZXYsICJpbmNvcnJlY3QgcGh5LW1vZGUgJWQgZm9yIFBIWSAlZFxuIiwKKwkJCQkgcGh5X21vZGUsIHBoeWFkKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcGh5ID0gJmdzdy0+cGh5c1twaHlhZF07CisJCXBoeS0+Z3N3ID0gZ3N3OworCisJCWluaXRfZHVtbXlfbmV0ZGV2KCZwaHktPm5ldGRldik7CisJCXBoeS0+bmV0ZGV2Lm5ldGRldl9vcHMgPSAmbXQ3NTN4X2R1bW15X25ldGRldl9vcHM7CisKKwkJcGh5LT5waHlkZXYgPSBvZl9waHlfY29ubmVjdCgmcGh5LT5uZXRkZXYsIHBoeV9ucCwKKwkJCQkJbXQ3NTN4X3BoeV9saW5rX2hhbmRsZXIsIDAsIHBoeV9tb2RlKTsKKwkJaWYgKCFwaHktPnBoeWRldikgeworCQkJZGV2X2luZm8oZ3N3LT5kZXYsICJjb3VsZCBub3QgY29ubmVjdCB0byBQSFkgJWRcbiIsCisJCQkJIHBoeWFkKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcGh5X3N0YXJ0KHBoeS0+cGh5ZGV2KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG10NzUzeF9kaXNjb25uZWN0X2ludGVybmFsX3BoeXMoc3RydWN0IGdzd19tdDc1M3ggKmdzdykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGdzdy0+cGh5cyk7IGkrKykgeworCQlpZiAoZ3N3LT5waHlzW2ldLnBoeWRldikgeworCQkJcGh5X3N0b3AoZ3N3LT5waHlzW2ldLnBoeWRldik7CisJCQlwaHlfZGlzY29ubmVjdChnc3ctPnBoeXNbaV0ucGh5ZGV2KTsKKwkJCWdzdy0+cGh5c1tpXS5waHlkZXYgPSBOVUxMOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IG10NzUzeF9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3cpCit7CisJc3RydWN0IGRldmljZV9ub2RlICptaWlfbnA7CisJaW50IGksIHJldDsKKworCW1paV9ucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGdzdy0+ZGV2LT5vZl9ub2RlLCAibWRpby1idXMiKTsKKwlpZiAobWlpX25wICYmICFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG1paV9ucCkpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnJfcHV0X25vZGU7CisJfQorCisJZ3N3LT5ncGh5X2J1cyA9IGRldm1fbWRpb2J1c19hbGxvYyhnc3ctPmRldik7CisJaWYgKCFnc3ctPmdwaHlfYnVzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3B1dF9ub2RlOworCX0KKworCWdzdy0+Z3BoeV9idXMtPm5hbWUgPSAibXQ3NTN4X21kaW8iOworCWdzdy0+Z3BoeV9idXMtPnJlYWQgPSBtdDc1M3hfbWRpb19yZWFkOworCWdzdy0+Z3BoeV9idXMtPndyaXRlID0gbXQ3NTN4X21kaW9fd3JpdGU7CisJZ3N3LT5ncGh5X2J1cy0+cHJpdiA9IGdzdzsKKwlnc3ctPmdwaHlfYnVzLT5wYXJlbnQgPSBnc3ctPmRldjsKKwlnc3ctPmdwaHlfYnVzLT5waHlfbWFzayA9IEJJVChNVDc1M1hfTlVNX1BIWVMpIC0gMTsKKy8vCWdzdy0+Z3BoeV9idXMtPmlycSA9IGdzdy0+cGh5X2lycXM7CisKKwlmb3IgKGkgPSAwOyBpIDwgUEhZX01BWF9BRERSOyBpKyspCisJCWdzdy0+Z3BoeV9idXMtPmlycVtpXSA9IFBIWV9QT0xMOworCisJaWYgKG1paV9ucCkKKwkJc25wcmludGYoZ3N3LT5ncGh5X2J1cy0+aWQsIE1JSV9CVVNfSURfU0laRSwgIiVzQCVzIiwKKwkJCSBtaWlfbnAtPm5hbWUsIGdzdy0+ZGV2LT5vZl9ub2RlLT5uYW1lKTsKKwllbHNlCisJCXNucHJpbnRmKGdzdy0+Z3BoeV9idXMtPmlkLCBNSUlfQlVTX0lEX1NJWkUsICJtZGlvQCVzIiwKKwkJCSBnc3ctPmRldi0+b2Zfbm9kZS0+bmFtZSk7CisKKwlyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGdzdy0+Z3BoeV9idXMsIG1paV9ucCk7CisKKwlpZiAocmV0KSB7CisJCWRldm1fbWRpb2J1c19mcmVlKGdzdy0+ZGV2LCBnc3ctPmdwaHlfYnVzKTsKKwkJZ3N3LT5ncGh5X2J1cyA9IE5VTEw7CisJfSBlbHNlIHsKKwkJaWYgKGdzdy0+cGh5X3N0YXR1c19wb2xsKQorCQkJbXQ3NTN4X2Nvbm5lY3RfaW50ZXJuYWxfcGh5cyhnc3csIG1paV9ucCk7CisJfQorCitlcnJfcHV0X25vZGU6CisJaWYgKG1paV9ucCkKKwkJb2Zfbm9kZV9wdXQobWlpX25wKTsKKworCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKworc3RhdGljIGlycXJldHVybl90IG10NzUzeF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXYpCit7CisJc3RydWN0IGdzd19tdDc1M3ggKmdzdyA9IGRldjsKKworCWRpc2FibGVfaXJxX25vc3luYyhnc3ctPmlycSk7CisKKwlzY2hlZHVsZV93b3JrKCZnc3ctPmlycV93b3JrZXIpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IG10NzUzeF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBnc3dfbXQ3NTN4ICpnc3c7CisJc3RydWN0IG10NzUzeF9zd19pZCAqc3c7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHBkZXYtPmRldi5vZl9ub2RlOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbWRpbzsKKwlzdHJ1Y3QgbWlpX2J1cyAqbWRpb19idXM7CisJaW50IHJldCA9IC1FSU5WQUw7CisJc3RydWN0IGNoaXBfcmV2IHJldjsKKwlzdHJ1Y3QgbXQ3NTN4X21hcHBpbmcgKm1hcDsKKwlpbnQgaTsKKworCW1kaW8gPSBvZl9wYXJzZV9waGFuZGxlKG5wLCAibWVkaWF0ZWssbWRpbyIsIDApOworCWlmICghbWRpbykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZGlvX2J1cyA9IG9mX21kaW9fZmluZF9idXMobWRpbyk7CisJaWYgKCFtZGlvX2J1cykKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisKKwlnc3cgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBnc3dfbXQ3NTN4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFnc3cpCisJCXJldHVybiAtRU5PTUVNOworCisJZ3N3LT5ob3N0X2J1cyA9IG1kaW9fYnVzOworCWdzdy0+ZGV2ID0gJnBkZXYtPmRldjsKKwltdXRleF9pbml0KCZnc3ctPm1paV9sb2NrKTsKKworCS8qIFN3aXRjaCBoYXJkIHJlc2V0ICovCisJaWYgKG10NzUzeF9od19yZXNldChnc3cpKQorCQlnb3RvIGZhaWw7CisKKwkvKiBGZXRjaCB0aGUgU01JIGFkZHJlc3MgZGlyc3QgKi8KKwlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJtZWRpYXRlayxzbWktYWRkciIsICZnc3ctPnNtaV9hZGRyKSkKKwkJZ3N3LT5zbWlfYWRkciA9IE1UNzUzWF9ERkxfU01JX0FERFI7CisKKwkvKiBHZXQgTEFOL1dBTiBwb3J0IG1hcHBpbmcgKi8KKwltYXAgPSBtdDc1M3hfZmluZF9tYXBwaW5nKG5wKTsKKwlpZiAobWFwKSB7CisJCW10NzUzeF9hcHBseV9tYXBwaW5nKGdzdywgbWFwKTsKKwkJZ3N3LT5nbG9iYWxfdmxhbl9lbmFibGUgPSAxOworCQlkZXZfaW5mbyhnc3ctPmRldiwgIkxBTi9XQU4gVkxBTiBzZXR0aW5nPSVzXG4iLCBtYXAtPm5hbWUpOworCX0KKworCS8qIExvYWQgTUFDIHBvcnQgY29uZmlndXJhdGlvbnMgKi8KKwltdDc1M3hfbG9hZF9wb3J0X2NmZyhnc3cpOworCisJLyogQ2hlY2sgZm9yIHZhbGlkIHN3aXRjaCBhbmQgdGhlbiBpbml0aWFsaXplICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobXQ3NTN4X3N3X2lkcyk7IGkrKykgeworCQlpZiAoIW10NzUzeF9zd19pZHNbaV0tPmRldGVjdChnc3csICZyZXYpKSB7CisJCQlzdyA9IG10NzUzeF9zd19pZHNbaV07CisKKwkJCWdzdy0+bmFtZSA9IHJldi5uYW1lOworCQkJZ3N3LT5tb2RlbCA9IHN3LT5tb2RlbDsKKworCQkJZGV2X2luZm8oZ3N3LT5kZXYsICJTd2l0Y2ggaXMgTWVkaWFUZWsgJXMgcmV2ICVkIiwKKwkJCQkgZ3N3LT5uYW1lLCByZXYucmV2KTsKKworCQkJLyogSW5pdGlhbGl6ZSB0aGUgc3dpdGNoICovCisJCQlyZXQgPSBzdy0+aW5pdChnc3cpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGZhaWw7CisKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGkgPj0gQVJSQVlfU0laRShtdDc1M3hfc3dfaWRzKSkgeworCQlkZXZfZXJyKGdzdy0+ZGV2LCAiTm8gbXQ3NTN4IHN3aXRjaCBmb3VuZFxuIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlnc3ctPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGdzdy0+aXJxID49IDApIHsKKwkJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycShnc3ctPmRldiwgZ3N3LT5pcnEsIG10NzUzeF9pcnFfaGFuZGxlciwKKwkJCQkgICAgICAgMCwgZGV2X25hbWUoZ3N3LT5kZXYpLCBnc3cpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGdzdy0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgaXJxICVkXG4iLAorCQkJCWdzdy0+aXJxKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCisJCUlOSVRfV09SSygmZ3N3LT5pcnFfd29ya2VyLCBtdDc1M3hfaXJxX3dvcmtlcik7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZ3N3KTsKKworCWdzdy0+cGh5X3N0YXR1c19wb2xsID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKGdzdy0+ZGV2LT5vZl9ub2RlLAorCQkJCQkJICAgICAibWVkaWF0ZWsscGh5LXBvbGwiKTsKKworCW10NzUzeF9hZGRfZ3N3KGdzdyk7CisjaWYgMSAvL1hEWEQKKwltdDc1M3hfbWRpb19yZWdpc3Rlcihnc3cpOworI2VuZGlmCisKKwltdDc1M3hfc3djb25maWdfaW5pdChnc3cpOworCisJaWYgKHN3LT5wb3N0X2luaXQpCisJCXN3LT5wb3N0X2luaXQoZ3N3KTsKKworCWlmIChnc3ctPmlycSA+PSAwKQorCQltdDc1M3hfaXJxX2VuYWJsZShnc3cpOworCisJcmV0dXJuIDA7CisKK2ZhaWw6CisJZGV2bV9rZnJlZSgmcGRldi0+ZGV2LCBnc3cpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdDc1M3hfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGdzd19tdDc1M3ggKmdzdyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKGdzdy0+aXJxID49IDApCisJCWNhbmNlbF93b3JrX3N5bmMoJmdzdy0+aXJxX3dvcmtlcik7CisKKwlpZiAoZ3N3LT5yZXNldF9waW4gPj0gMCkKKwkJZGV2bV9ncGlvX2ZyZWUoJnBkZXYtPmRldiwgZ3N3LT5yZXNldF9waW4pOworCisjaWZkZWYgQ09ORklHX1NXQ09ORklHCisJbXQ3NTN4X3N3Y29uZmlnX2Rlc3Ryb3koZ3N3KTsKKyNlbmRpZgorCisjaWYgMSAvL1hEWEQKKwltdDc1M3hfZGlzY29ubmVjdF9pbnRlcm5hbF9waHlzKGdzdyk7CisKKwltZGlvYnVzX3VucmVnaXN0ZXIoZ3N3LT5ncGh5X2J1cyk7CisjZW5kaWYKKworCW10NzUzeF9yZW1vdmVfZ3N3KGdzdyk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdDc1M3hfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc1M3giIH0sCisJeyB9LAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXQ3NTN4X2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10NzUzeF9kcml2ZXIgPSB7CisJLnByb2JlID0gbXQ3NTN4X3Byb2JlLAorCS5yZW1vdmUgPSBtdDc1M3hfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm10NzUzeCIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG10NzUzeF9pZHMsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG10NzUzeF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCUlOSVRfTElTVF9IRUFEKCZtdDc1M3hfZGV2cyk7CisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtdDc1M3hfZHJpdmVyKTsKKworCW10NzUzeF9ubF9pbml0KCk7CisKKwlyZXR1cm4gcmV0OworfQorbW9kdWxlX2luaXQobXQ3NTN4X2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgbXQ3NTN4X2V4aXQodm9pZCkKK3sKKwltdDc1M3hfbmxfZXhpdCgpOworCisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm10NzUzeF9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQobXQ3NTN4X2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJXZWlqaWUgR2FvIDx3ZWlqaWUuZ2FvQG1lZGlhdGVrLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBNZWRpYVRlayBNVDc1M3ggR2lnYWJpdCBTd2l0Y2giKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L210ay9tdDc1M3gvbXQ3NTN4X25sLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9tdGsvbXQ3NTN4L210NzUzeF9ubC5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmEwNGM3MDEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9tdGsvbXQ3NTN4L210NzUzeF9ubC5jCkBAIC0wLDAgKzEsMzgxIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxOCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IFNpcnVpIFpoYW8gPFNpcnVpLlpoYW9AbWVkaWF0ZWsuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxuZXQvZ2VuZXRsaW5rLmg+CisKKyNpbmNsdWRlICJtdDc1M3guaCIKKyNpbmNsdWRlICJtdDc1M3hfbmwuaCIKKworc3RydWN0IG10NzUzeF9ubF9jbWRfaXRlbSB7CisJZW51bSBtdDc1M3hfY21kIGNtZDsKKwlib29sIHJlcXVpcmVfZGV2OworCWludCAoKnByb2Nlc3MpKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3cpOworCXUzMiBucl9yZXF1aXJlZF9hdHRyczsKKwljb25zdCBlbnVtIG10NzUzeF9hdHRyICpyZXF1aXJlZF9hdHRyczsKK307CisKK3N0YXRpYyBpbnQgbXQ3NTN4X25sX3Jlc3BvbnNlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pOworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbXQ3NTN4X25sX2NtZF9wb2xpY3lbXSA9IHsKKwlbTVQ3NTNYX0FUVFJfVFlQRV9NRVNHXSA9IHsgLnR5cGUgPSBOTEFfU1RSSU5HIH0sCisJW01UNzUzWF9BVFRSX1RZUEVfUEhZXSA9IHsgLnR5cGUgPSBOTEFfUzMyIH0sCisJW01UNzUzWF9BVFRSX1RZUEVfUkVHXSA9IHsgLnR5cGUgPSBOTEFfUzMyIH0sCisJW01UNzUzWF9BVFRSX1RZUEVfVkFMXSA9IHsgLnR5cGUgPSBOTEFfUzMyIH0sCisJW01UNzUzWF9BVFRSX1RZUEVfREVWX05BTUVdID0geyAudHlwZSA9IE5MQV9TMzIgfSwKKwlbTVQ3NTNYX0FUVFJfVFlQRV9ERVZfSURdID0geyAudHlwZSA9IE5MQV9TMzIgfSwKKwlbTVQ3NTNYX0FUVFJfVFlQRV9ERVZBRF0gPSB7IC50eXBlID0gTkxBX1MzMiB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX29wcyBtdDc1M3hfbmxfb3BzW10gPSB7CisJeworCQkuY21kID0gTVQ3NTNYX0NNRF9SRVFVRVNULAorCQkuZG9pdCA9IG10NzUzeF9ubF9yZXNwb25zZSwKKy8vCQkucG9saWN5ID0gbXQ3NTN4X25sX2NtZF9wb2xpY3ksCisJCS5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSwKKwl9LCB7CisJCS5jbWQgPSBNVDc1M1hfQ01EX1JFQUQsCisJCS5kb2l0ID0gbXQ3NTN4X25sX3Jlc3BvbnNlLAorLy8JCS5wb2xpY3kgPSBtdDc1M3hfbmxfY21kX3BvbGljeSwKKwkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAorCX0sIHsKKwkJLmNtZCA9IE1UNzUzWF9DTURfV1JJVEUsCisJCS5kb2l0ID0gbXQ3NTN4X25sX3Jlc3BvbnNlLAorLy8JCS5wb2xpY3kgPSBtdDc1M3hfbmxfY21kX3BvbGljeSwKKwkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IG10NzUzeF9ubF9mYW1pbHkgPSB7CisJLm5hbWUgPQkJTVQ3NTNYX0dFTkxfTkFNRSwKKwkudmVyc2lvbiA9CU1UNzUzWF9HRU5MX1ZFUlNJT04sCisJLm1heGF0dHIgPQlNVDc1M1hfTlJfQVRUUl9UWVBFLAorCS5vcHMgPQkJbXQ3NTN4X25sX29wcywKKwkubl9vcHMgPQlBUlJBWV9TSVpFKG10NzUzeF9ubF9vcHMpLAorCS5wb2xpY3kgPQltdDc1M3hfbmxfY21kX3BvbGljeSwKK307CisKK3N0YXRpYyBpbnQgbXQ3NTN4X25sX2xpc3RfZGV2cyhjaGFyICpidWZmLCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3OworCWludCBsZW4sIHRvdGFsID0gMDsKKwljaGFyIGJ1Zls4MF07CisKKwltZW1zZXQoYnVmZiwgMCwgc2l6ZSk7CisKKwltdDc1M3hfbG9ja19nc3coKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZ3N3LCAmbXQ3NTN4X2RldnMsIGxpc3QpIHsKKwkJbGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwKKwkJCSAgICAgICAiaWQ6ICVkLCBtb2RlbDogJXMsIG5vZGU6ICVzXG4iLAorCQkJICAgICAgIGdzdy0+aWQsIGdzdy0+bmFtZSwgZ3N3LT5kZXYtPm9mX25vZGUtPm5hbWUpOworCQlzdHJuY2F0KGJ1ZmYsIGJ1Ziwgc2l6ZSAtIHRvdGFsKTsKKwkJdG90YWwgKz0gbGVuOworCX0KKworCW10NzUzeF9wdXRfZ3N3KCk7CisKKwlyZXR1cm4gdG90YWw7Cit9CisKK3N0YXRpYyBpbnQgbXQ3NTN4X25sX3ByZXBhcmVfcmVwbHkoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgdTggY21kLAorCQkJCSAgIHN0cnVjdCBza19idWZmICoqc2ticCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOworCXZvaWQgKnJlcGx5OworCisJaWYgKCFpbmZvKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1zZyA9IGdlbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1zZykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBDb25zdHJ1Y3Qgc2VuZC1iYWNrIG1lc3NhZ2UgaGVhZGVyICovCisJcmVwbHkgPSBnZW5sbXNnX3B1dChtc2csIGluZm8tPnNuZF9wb3J0aWQsIGluZm8tPnNuZF9zZXEsCisJCQkgICAgJm10NzUzeF9ubF9mYW1pbHksIDAsIGNtZCk7CisJaWYgKCFyZXBseSkgeworCQlubG1zZ19mcmVlKG1zZyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCSpza2JwID0gbXNnOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10NzUzeF9ubF9zZW5kX3JlcGx5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3RydWN0IGdlbmxtc2doZHIgKmdlbmxoZHIgPSBubG1zZ19kYXRhKG5sbXNnX2hkcihza2IpKTsKKwl2b2lkICpyZXBseSA9IGdlbmxtc2dfZGF0YShnZW5saGRyKTsKKworCS8qIEZpbmFsaXplIGEgZ2VuZXJpYyBuZXRsaW5rIG1lc3NhZ2UgKHVwZGF0ZSBtZXNzYWdlIGhlYWRlcikgKi8KKwlnZW5sbXNnX2VuZChza2IsIHJlcGx5KTsKKworCS8qIHJlcGx5IHRvIGEgcmVxdWVzdCAqLworCXJldHVybiBnZW5sbXNnX3JlcGx5KHNrYiwgaW5mbyk7Cit9CisKK3N0YXRpYyBzMzIgbXQ3NTN4X25sX2dldF9zMzIoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgZW51bSBtdDc1M3hfYXR0ciBhdHRyLAorCQkJICAgICBzMzIgZGVmdmFsKQoreworCXN0cnVjdCBubGF0dHIgKm5hOworCisJbmEgPSBpbmZvLT5hdHRyc1thdHRyXTsKKwlpZiAobmEpCisJCXJldHVybiBubGFfZ2V0X3MzMihuYSk7CisKKwlyZXR1cm4gZGVmdmFsOworfQorCitzdGF0aWMgaW50IG10NzUzeF9ubF9nZXRfdTMyKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIGVudW0gbXQ3NTN4X2F0dHIgYXR0ciwKKwkJCSAgICAgdTMyICp2YWwpCit7CisJc3RydWN0IG5sYXR0ciAqbmE7CisKKwluYSA9IGluZm8tPmF0dHJzW2F0dHJdOworCWlmIChuYSkgeworCQkqdmFsID0gbmxhX2dldF91MzIobmEpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ3N3X210NzUzeCAqbXQ3NTN4X25sX3BhcnNlX2ZpbmRfZ3N3KHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3RydWN0IGdzd19tdDc1M3ggKmdzdzsKKwlzdHJ1Y3QgbmxhdHRyICpuYTsKKwlpbnQgZ3N3X2lkOworCisJbmEgPSBpbmZvLT5hdHRyc1tNVDc1M1hfQVRUUl9UWVBFX0RFVl9JRF07CisJaWYgKG5hKSB7CisJCWdzd19pZCA9IG5sYV9nZXRfczMyKG5hKTsKKwkJaWYgKGdzd19pZCA+PSAwKQorCQkJZ3N3ID0gbXQ3NTN4X2dldF9nc3coZ3N3X2lkKTsKKwkJZWxzZQorCQkJZ3N3ID0gbXQ3NTN4X2dldF9maXJzdF9nc3coKTsKKwl9IGVsc2UgeworCQlnc3cgPSBtdDc1M3hfZ2V0X2ZpcnN0X2dzdygpOworCX0KKworCXJldHVybiBnc3c7Cit9CisKK3N0YXRpYyBpbnQgbXQ3NTN4X25sX2dldF9zd2RldnMoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IGdzd19tdDc1M3ggKmdzdykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqcmVwX3NrYiA9IE5VTEw7CisJY2hhciBkZXZfaW5mb1s1MTJdOworCWludCByZXQ7CisKKwlyZXQgPSBtdDc1M3hfbmxfbGlzdF9kZXZzKGRldl9pbmZvLCBzaXplb2YoZGV2X2luZm8pKTsKKwlpZiAoIXJldCkgeworCQlwcl9pbmZvKCJObyBzd2l0Y2ggcmVnaXN0ZXJlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IG10NzUzeF9ubF9wcmVwYXJlX3JlcGx5KGluZm8sIE1UNzUzWF9DTURfUkVQTFksICZyZXBfc2tiKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnI7CisKKwlyZXQgPSBubGFfcHV0X3N0cmluZyhyZXBfc2tiLCBNVDc1M1hfQVRUUl9UWVBFX01FU0csIGRldl9pbmZvKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnI7CisKKwlyZXR1cm4gbXQ3NTN4X25sX3NlbmRfcmVwbHkocmVwX3NrYiwgaW5mbyk7CisKK2VycjoKKwlpZiAocmVwX3NrYikKKwkJbmxtc2dfZnJlZShyZXBfc2tiKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXQ3NTN4X25sX3JlcGx5X3JlYWQoc3RydWN0IGdlbmxfaW5mbyAqaW5mbywgc3RydWN0IGdzd19tdDc1M3ggKmdzdykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqcmVwX3NrYiA9IE5VTEw7CisJczMyIHBoeSwgZGV2YWQsIHJlZzsKKwlpbnQgdmFsdWU7CisJaW50IHJldCA9IDA7CisKKwlwaHkgPSBtdDc1M3hfbmxfZ2V0X3MzMihpbmZvLCBNVDc1M1hfQVRUUl9UWVBFX1BIWSwgLTEpOworCWRldmFkID0gbXQ3NTN4X25sX2dldF9zMzIoaW5mbywgTVQ3NTNYX0FUVFJfVFlQRV9ERVZBRCwgLTEpOworCXJlZyA9IG10NzUzeF9ubF9nZXRfczMyKGluZm8sIE1UNzUzWF9BVFRSX1RZUEVfUkVHLCAtMSk7CisKKwlpZiAocmVnIDwgMCkKKwkJZ290byBlcnI7CisKKwlyZXQgPSBtdDc1M3hfbmxfcHJlcGFyZV9yZXBseShpbmZvLCBNVDc1M1hfQ01EX1JFQUQsICZyZXBfc2tiKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnI7CisKKwlpZiAocGh5ID49IDApIHsKKwkJaWYgKGRldmFkIDwgMCkKKwkJCXZhbHVlID0gZ3N3LT5taWlfcmVhZChnc3csIHBoeSwgcmVnKTsKKwkJZWxzZQorCQkJdmFsdWUgPSBnc3ctPm1tZF9yZWFkKGdzdywgcGh5LCBkZXZhZCwgcmVnKTsKKwl9IGVsc2UgeworCQl2YWx1ZSA9IG10NzUzeF9yZWdfcmVhZChnc3csIHJlZyk7CisJfQorCisJcmV0ID0gbmxhX3B1dF9zMzIocmVwX3NrYiwgTVQ3NTNYX0FUVFJfVFlQRV9SRUcsIHJlZyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyOworCisJcmV0ID0gbmxhX3B1dF9zMzIocmVwX3NrYiwgTVQ3NTNYX0FUVFJfVFlQRV9WQUwsIHZhbHVlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnI7CisKKwlyZXR1cm4gbXQ3NTN4X25sX3NlbmRfcmVwbHkocmVwX3NrYiwgaW5mbyk7CisKK2VycjoKKwlpZiAocmVwX3NrYikKKwkJbmxtc2dfZnJlZShyZXBfc2tiKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXQ3NTN4X25sX3JlcGx5X3dyaXRlKHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3cpCit7CisJc3RydWN0IHNrX2J1ZmYgKnJlcF9za2IgPSBOVUxMOworCXMzMiBwaHksIGRldmFkLCByZWc7CisJdTMyIHZhbHVlOworCWludCByZXQgPSAwOworCisJcGh5ID0gbXQ3NTN4X25sX2dldF9zMzIoaW5mbywgTVQ3NTNYX0FUVFJfVFlQRV9QSFksIC0xKTsKKwlkZXZhZCA9IG10NzUzeF9ubF9nZXRfczMyKGluZm8sIE1UNzUzWF9BVFRSX1RZUEVfREVWQUQsIC0xKTsKKwlyZWcgPSBtdDc1M3hfbmxfZ2V0X3MzMihpbmZvLCBNVDc1M1hfQVRUUl9UWVBFX1JFRywgLTEpOworCisJaWYgKG10NzUzeF9ubF9nZXRfdTMyKGluZm8sIE1UNzUzWF9BVFRSX1RZUEVfVkFMLCAmdmFsdWUpKQorCQlnb3RvIGVycjsKKworCWlmIChyZWcgPCAwKQorCQlnb3RvIGVycjsKKworCXJldCA9IG10NzUzeF9ubF9wcmVwYXJlX3JlcGx5KGluZm8sIE1UNzUzWF9DTURfV1JJVEUsICZyZXBfc2tiKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnI7CisKKwlpZiAocGh5ID49IDApIHsKKwkJaWYgKGRldmFkIDwgMCkKKwkJCWdzdy0+bWlpX3dyaXRlKGdzdywgcGh5LCByZWcsIHZhbHVlKTsKKwkJZWxzZQorCQkJZ3N3LT5tbWRfd3JpdGUoZ3N3LCBwaHksIGRldmFkLCByZWcsIHZhbHVlKTsKKwl9IGVsc2UgeworCQltdDc1M3hfcmVnX3dyaXRlKGdzdywgcmVnLCB2YWx1ZSk7CisJfQorCisJcmV0ID0gbmxhX3B1dF9zMzIocmVwX3NrYiwgTVQ3NTNYX0FUVFJfVFlQRV9SRUcsIHJlZyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyOworCisJcmV0ID0gbmxhX3B1dF9zMzIocmVwX3NrYiwgTVQ3NTNYX0FUVFJfVFlQRV9WQUwsIHZhbHVlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnI7CisKKwlyZXR1cm4gbXQ3NTN4X25sX3NlbmRfcmVwbHkocmVwX3NrYiwgaW5mbyk7CisKK2VycjoKKwlpZiAocmVwX3NrYikKKwkJbmxtc2dfZnJlZShyZXBfc2tiKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBlbnVtIG10NzUzeF9hdHRyIG10NzUzeF9ubF9jbWRfcmVhZF9hdHRyc1tdID0geworCU1UNzUzWF9BVFRSX1RZUEVfUkVHCit9OworCitzdGF0aWMgY29uc3QgZW51bSBtdDc1M3hfYXR0ciBtdDc1M3hfbmxfY21kX3dyaXRlX2F0dHJzW10gPSB7CisJTVQ3NTNYX0FUVFJfVFlQRV9SRUcsCisJTVQ3NTNYX0FUVFJfVFlQRV9WQUwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXQ3NTN4X25sX2NtZF9pdGVtIG10NzUzeF9ubF9jbWRzW10gPSB7CisJeworCQkuY21kID0gTVQ3NTNYX0NNRF9SRVFVRVNULAorCQkucmVxdWlyZV9kZXYgPSBmYWxzZSwKKwkJLnByb2Nlc3MgPSBtdDc1M3hfbmxfZ2V0X3N3ZGV2cworCX0sIHsKKwkJLmNtZCA9IE1UNzUzWF9DTURfUkVBRCwKKwkJLnJlcXVpcmVfZGV2ID0gdHJ1ZSwKKwkJLnByb2Nlc3MgPSBtdDc1M3hfbmxfcmVwbHlfcmVhZCwKKwkJLnJlcXVpcmVkX2F0dHJzID0gbXQ3NTN4X25sX2NtZF9yZWFkX2F0dHJzLAorCQkubnJfcmVxdWlyZWRfYXR0cnMgPSBBUlJBWV9TSVpFKG10NzUzeF9ubF9jbWRfcmVhZF9hdHRycyksCisJfSwgeworCQkuY21kID0gTVQ3NTNYX0NNRF9XUklURSwKKwkJLnJlcXVpcmVfZGV2ID0gdHJ1ZSwKKwkJLnByb2Nlc3MgPSBtdDc1M3hfbmxfcmVwbHlfd3JpdGUsCisJCS5yZXF1aXJlZF9hdHRycyA9IG10NzUzeF9ubF9jbWRfd3JpdGVfYXR0cnMsCisJCS5ucl9yZXF1aXJlZF9hdHRycyA9IEFSUkFZX1NJWkUobXQ3NTN4X25sX2NtZF93cml0ZV9hdHRycyksCisJfQorfTsKKworc3RhdGljIGludCBtdDc1M3hfbmxfcmVzcG9uc2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZ2VubG1zZ2hkciAqaGRyID0gbmxtc2dfZGF0YShpbmZvLT5ubGhkcik7CisJY29uc3Qgc3RydWN0IG10NzUzeF9ubF9jbWRfaXRlbSAqY21kaXRlbSA9IE5VTEw7CisJc3RydWN0IGdzd19tdDc1M3ggKmdzdyA9IE5VTEw7CisJdTMyIHNhdF9yZXFfYXR0cnMgPSAwOworCWludCBpLCByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdDc1M3hfbmxfY21kcyk7IGkrKykgeworCQlpZiAoaGRyLT5jbWQgPT0gbXQ3NTN4X25sX2NtZHNbaV0uY21kKSB7CisJCQljbWRpdGVtID0gJm10NzUzeF9ubF9jbWRzW2ldOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIWNtZGl0ZW0pIHsKKwkJcHJfaW5mbygibXQ3NTN4LW5sOiB1bmtub3duIGNtZCAldVxuIiwgaGRyLT5jbWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgY21kaXRlbS0+bnJfcmVxdWlyZWRfYXR0cnM7IGkrKykgeworCQlpZiAoaW5mby0+YXR0cnNbY21kaXRlbS0+cmVxdWlyZWRfYXR0cnNbaV1dKQorCQkJc2F0X3JlcV9hdHRycysrOworCX0KKworCWlmIChzYXRfcmVxX2F0dHJzICE9IGNtZGl0ZW0tPm5yX3JlcXVpcmVkX2F0dHJzKSB7CisJCXByX2luZm8oIm10NzUzeC1ubDogbWlzc2luZyByZXF1aXJlZCBhdHRyKHMpIGZvciBjbWQgJXVcbiIsCisJCQloZHItPmNtZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChjbWRpdGVtLT5yZXF1aXJlX2RldikgeworCQlnc3cgPSBtdDc1M3hfbmxfcGFyc2VfZmluZF9nc3coaW5mbyk7CisJCWlmICghZ3N3KSB7CisJCQlwcl9pbmZvKCJtdDc1M3gtbmw6IGZhaWxlZCB0byBmaW5kIHN3aXRjaCBkZXZcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlyZXQgPSBjbWRpdGVtLT5wcm9jZXNzKGluZm8sIGdzdyk7CisKKwltdDc1M3hfcHV0X2dzdygpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IF9faW5pdCBtdDc1M3hfbmxfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBnZW5sX3JlZ2lzdGVyX2ZhbWlseSgmbXQ3NTN4X25sX2ZhbWlseSk7CisJaWYgKHJldCkgeworCQlwcl9pbmZvKCJtdDc1M3gtbmw6IGdlbmxfcmVnaXN0ZXJfZmFtaWx5X3dpdGhfb3BzIGZhaWxlZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgX19leGl0IG10NzUzeF9ubF9leGl0KHZvaWQpCit7CisJZ2VubF91bnJlZ2lzdGVyX2ZhbWlseSgmbXQ3NTN4X25sX2ZhbWlseSk7Cit9CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9tdGsvbXQ3NTN4L210NzUzeF9ubC5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvbXRrL210NzUzeC9tdDc1M3hfbmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWRjOWU3Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvbXRrL210NzUzeC9tdDc1M3hfbmwuaApAQCAtMCwwICsxLDQzIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCisvKgorICogQ29weXJpZ2h0IChjKSAyMDE4IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogU2lydWkgWmhhbyA8U2lydWkuWmhhb0BtZWRpYXRlay5jb20+CisgKi8KKworI2lmbmRlZiBfTVQ3NTNYX05MX0hfCisjZGVmaW5lIF9NVDc1M1hfTkxfSF8KKworI2RlZmluZSBNVDc1M1hfR0VOTF9OQU1FCQkibXQ3NTN4IgorI2RlZmluZSBNVDc1M1hfR0VOTF9WRVJTSU9OCQkweDEKKworZW51bSBtdDc1M3hfY21kIHsKKwlNVDc1M1hfQ01EX1VOU1BFQyA9IDAsCisJTVQ3NTNYX0NNRF9SRVFVRVNULAorCU1UNzUzWF9DTURfUkVQTFksCisJTVQ3NTNYX0NNRF9SRUFELAorCU1UNzUzWF9DTURfV1JJVEUsCisKKwlfX01UNzUzWF9DTURfTUFYLAorfTsKKworZW51bSBtdDc1M3hfYXR0ciB7CisJTVQ3NTNYX0FUVFJfVFlQRV9VTlNQRUMgPSAwLAorCU1UNzUzWF9BVFRSX1RZUEVfTUVTRywKKwlNVDc1M1hfQVRUUl9UWVBFX1BIWSwKKwlNVDc1M1hfQVRUUl9UWVBFX0RFVkFELAorCU1UNzUzWF9BVFRSX1RZUEVfUkVHLAorCU1UNzUzWF9BVFRSX1RZUEVfVkFMLAorCU1UNzUzWF9BVFRSX1RZUEVfREVWX05BTUUsCisJTVQ3NTNYX0FUVFJfVFlQRV9ERVZfSUQsCisKKwlfX01UNzUzWF9BVFRSX1RZUEVfTUFYLAorfTsKKworI2RlZmluZSBNVDc1M1hfTlJfQVRUUl9UWVBFCQkoX19NVDc1M1hfQVRUUl9UWVBFX01BWCAtIDEpCisKKyNpZmRlZiBfX0tFUk5FTF9fCitpbnQgX19pbml0IG10NzUzeF9ubF9pbml0KHZvaWQpOwordm9pZCBfX2V4aXQgbXQ3NTN4X25sX2V4aXQodm9pZCk7CisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX01UNzUzWF9OTF9IXyAqLwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvbXRrL210NzUzeC9tdDc1M3hfcmVncy5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvbXRrL210NzUzeC9tdDc1M3hfcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE3ODQ4NzMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9tdGsvbXQ3NTN4L210NzUzeF9yZWdzLmgKQEAgLTAsMCArMSwzNDQgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisvKgorICogQ29weXJpZ2h0IChjKSAyMDE4IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogV2VpamllIEdhbyA8d2VpamllLmdhb0BtZWRpYXRlay5jb20+CisgKi8KKworI2lmbmRlZiBfTVQ3NTNYX1JFR1NfSF8KKyNkZWZpbmUgX01UNzUzWF9SRUdTX0hfCisKKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKworLyogVmFsdWVzIG9mIEVncmVzcyBUQUcgQ29udHJvbCAqLworI2RlZmluZSBFVEFHX0NUUkxfVU5UQUcJCQkwCisjZGVmaW5lIEVUQUdfQ1RSTF9UQUcJCQkyCisjZGVmaW5lIEVUQUdfQ1RSTF9TV0FQCQkJMQorI2RlZmluZSBFVEFHX0NUUkxfU1RBQ0sJCQkzCisKKyNkZWZpbmUgVlRDUgkJCQkweDkwCisjZGVmaW5lIFZBV0QxCQkJCTB4OTQKKyNkZWZpbmUgVkFXRDIJCQkJMHg5OAorCisvKiBGaWVsZHMgb2YgVlRDUiAqLworI2RlZmluZSBWVENSX0JVU1kJCQlCSVQoMzEpCisjZGVmaW5lIElEWF9JTlZMRAkJCUJJVCgxNikKKyNkZWZpbmUgVlRDUl9GVU5DX1MJCQkxMgorI2RlZmluZSBWVENSX0ZVTkNfTQkJCTB4ZjAwMAorI2RlZmluZSBWVENSX1ZJRF9TCQkJMAorI2RlZmluZSBWVENSX1ZJRF9NCQkJMHhmZmYKKworLyogVmFsdWVzIG9mIFZUQ1JfRlVOQyAqLworI2RlZmluZSBWVENSX1JFQURfVkxBTl9FTlRSWQkJMAorI2RlZmluZSBWVENSX1dSSVRFX1ZMQU5fRU5UUlkJCTEKKyNkZWZpbmUgVlRDUl9JTlZEX1ZMQU5fRU5UUlkJCTIKKyNkZWZpbmUgVlRDUl9FTkFCTEVfVkxBTl9FTlRSWQkJMworI2RlZmluZSBWVENSX1JFQURfQUNMX0VOVFJZCQk0CisjZGVmaW5lIFZUQ1JfV1JJVEVfQUNMX0VOVFJZCQk1CisjZGVmaW5lIFZUQ1JfUkVBRF9UUlRDTV9UQUJMRQkJNgorI2RlZmluZSBWVENSX1dSSVRFX1RSVENNX1RBQkxFCQk3CisjZGVmaW5lIFZUQ1JfUkVBRF9BQ0xfTUFTS19FTlRSWQk4CisjZGVmaW5lIFZUQ1JfV1JJVEVfQUNMX01BU0tfRU5UUlkJOQorI2RlZmluZSBWVENSX1JFQURfQUNMX1JVTEVfRU5UUlkJMTAKKyNkZWZpbmUgVlRDUl9XUklURV9BQ0xfUlVMRV9FTlRSWQkxMQorI2RlZmluZSBWVENSX1JFQURfQUNMX1JBVEVfRU5UUlkJMTIKKyNkZWZpbmUgVlRDUl9XUklURV9BQ0xfUkFURV9FTlRSWQkxMworCisvKiBWTEFOIGVudHJ5IGZpZWxkcyAqLworLyogVkFXRDEgKi8KKyNkZWZpbmUgUE9SVF9TVEFHCQkJQklUKDMxKQorI2RlZmluZSBJVkxfTUFDCQkJCUJJVCgzMCkKKyNkZWZpbmUgRUdfQ09OCQkJCUJJVCgyOSkKKyNkZWZpbmUgVlRBR19FTgkJCQlCSVQoMjgpCisjZGVmaW5lIENPUFlfUFJJCQkJQklUKDI3KQorI2RlZmluZSBVU0VSX1BSSV9TCQkJMjQKKyNkZWZpbmUgVVNFUl9QUklfTQkJCTB4NzAwMDAwMAorI2RlZmluZSBQT1JUX01FTV9TCQkJMTYKKyNkZWZpbmUgUE9SVF9NRU1fTQkJCTB4ZmYwMDAwCisjZGVmaW5lIFNfVEFHMV9TCQkJNAorI2RlZmluZSBTX1RBRzFfTQkJCTB4ZmZmMAorI2RlZmluZSBGSURfUwkJCQkxCisjZGVmaW5lIEZJRF9NCQkJCTB4MGUKKyNkZWZpbmUgVkVOVFJZX1ZBTElECQkJQklUKDApCisKKy8qIFZBV0QyICovCisjZGVmaW5lIFNfVEFHMl9TCQkJMTYKKyNkZWZpbmUgU19UQUcyX00JCQkweGZmZmYwMDAwCisjZGVmaW5lIFBPUlRfRVRBR19TKHApCQkJKChwKSAqIDIpCisjZGVmaW5lIFBPUlRfRVRBR19NCQkJMHgwMworCisjZGVmaW5lIFBPUlRfQ1RSTF9CQVNFCQkJMHgyMDAwCisjZGVmaW5lIFBPUlRfQ1RSTF9QT1JUX09GRlNFVAkJMHgxMDAKKyNkZWZpbmUgUE9SVF9DVFJMX1JFRyhwLCByKQkJKFBPUlRfQ1RSTF9CQVNFICsgXAorCQkJCQkocCkgKiBQT1JUX0NUUkxfUE9SVF9PRkZTRVQgKyAgKHIpKQorI2RlZmluZSBDS0dDUihwKQkJCVBPUlRfQ1RSTF9SRUcocCwgMHgwMCkKKyNkZWZpbmUgUENSKHApCQkJCVBPUlRfQ1RSTF9SRUcocCwgMHgwNCkKKyNkZWZpbmUgUElDKHApCQkJCVBPUlRfQ1RSTF9SRUcocCwgMHgwOCkKKyNkZWZpbmUgUFNDKHApCQkJCVBPUlRfQ1RSTF9SRUcocCwgMHgwYykKKyNkZWZpbmUgUFZDKHApCQkJCVBPUlRfQ1RSTF9SRUcocCwgMHgxMCkKKyNkZWZpbmUgUFBCVjEocCkJCQlQT1JUX0NUUkxfUkVHKHAsIDB4MTQpCisjZGVmaW5lIFBQQlYyKHApCQkJUE9SVF9DVFJMX1JFRyhwLCAweDE4KQorI2RlZmluZSBCU1IocCkJCQkJUE9SVF9DVFJMX1JFRyhwLCAweDFjKQorI2RlZmluZSBTVEFHMDEJCQkJUE9SVF9DVFJMX1JFRyhwLCAweDIwKQorI2RlZmluZSBTVEFHMjMJCQkJUE9SVF9DVFJMX1JFRyhwLCAweDI0KQorI2RlZmluZSBTVEFHNDUJCQkJUE9SVF9DVFJMX1JFRyhwLCAweDI4KQorI2RlZmluZSBTVEFHNjcJCQkJUE9SVF9DVFJMX1JFRyhwLCAweDJjKQorCisjZGVmaW5lIFBQQlYocCwgZykJCQkoUFBCVjEocCkgKyAoKGcpIC8gMikgKiA0KQorCisvKiBGaWVsZHMgb2YgUENSICovCisjZGVmaW5lIE1MRFYyX0VOCQkJQklUKDMwKQorI2RlZmluZSBFR19UQUdfUwkJCTI4CisjZGVmaW5lIEVHX1RBR19NCQkJMHgzMDAwMDAwMAorI2RlZmluZSBQT1JUX1BSSV9TCQkJMjQKKyNkZWZpbmUgUE9SVF9QUklfTQkJCTB4NzAwMDAwMAorI2RlZmluZSBQT1JUX01BVFJJWF9TCQkJMTYKKyNkZWZpbmUgUE9SVF9NQVRSSVhfTQkJCTB4ZmYwMDAwCisjZGVmaW5lIFVQMkRTQ1BfRU4JCQlCSVQoMTIpCisjZGVmaW5lIFVQMlRBR19FTgkJCUJJVCgxMSkKKyNkZWZpbmUgQUNMX0VOCQkJCUJJVCgxMCkKKyNkZWZpbmUgUE9SVF9UWF9NSVIJCQlCSVQoOSkKKyNkZWZpbmUgUE9SVF9SWF9NSVIJCQlCSVQoOCkKKyNkZWZpbmUgQUNMX01JUgkJCQlCSVQoNykKKyNkZWZpbmUgTUlTX1BPUlRfRldfUwkJCTQKKyNkZWZpbmUgTUlTX1BPUlRfRldfTQkJCTB4NzAKKyNkZWZpbmUgVkxBTl9NSVMJCQlCSVQoMikKKyNkZWZpbmUgUE9SVF9WTEFOX1MJCQkwCisjZGVmaW5lIFBPUlRfVkxBTl9NCQkJMHgwMworCisvKiBWYWx1ZXMgb2YgUE9SVF9WTEFOICovCisjZGVmaW5lIFBPUlRfTUFUUklYX01PREUJCTAKKyNkZWZpbmUgRkFMTEJBQ0tfTU9ERQkJCTEKKyNkZWZpbmUgQ0hFQ0tfTU9ERQkJCTIKKyNkZWZpbmUgU0VDVVJJVFlfTU9ERQkJCTMKKworLyogRmllbGRzIG9mIFBWQyAqLworI2RlZmluZSBTVEFHX1ZQSURfUwkJCTE2CisjZGVmaW5lIFNUQUdfVlBJRF9NCQkJMHhmZmZmMDAwMAorI2RlZmluZSBESVNfUFZJRAkJCUJJVCgxNSkKKyNkZWZpbmUgRk9SQ0VfUFZJRAkJCUJJVCgxNCkKKyNkZWZpbmUgUFRfVlBNCQkJCUJJVCgxMikKKyNkZWZpbmUgUFRfT1BUSU9OCQkJQklUKDExKQorI2RlZmluZSBQVkNfRUdfVEFHX1MJCQk4CisjZGVmaW5lIFBWQ19FR19UQUdfTQkJCTB4NzAwCisjZGVmaW5lIFZMQU5fQVRUUl9TCQkJNgorI2RlZmluZSBWTEFOX0FUVFJfTQkJCTB4YzAKKyNkZWZpbmUgUFZDX1BPUlRfU1RBRwkJCUJJVCg1KQorI2RlZmluZSBCQ19MS1lWX0VOCQkJQklUKDQpCisjZGVmaW5lIE1DX0xLWVZfRU4JCQlCSVQoMykKKyNkZWZpbmUgVUNfTEtZVl9FTgkJCUJJVCgyKQorI2RlZmluZSBBQ0NfRlJNX1MJCQkwCisjZGVmaW5lIEFDQ19GUk1fTQkJCTB4MDMKKworLyogVmFsdWVzIG9mIFZMQU5fQVRUUiAqLworI2RlZmluZSBWQV9VU0VSX1BPUlQJCQkwCisjZGVmaW5lIFZBX1NUQUNLX1BPUlQJCQkxCisjZGVmaW5lIFZBX1RSQU5TTEFUSU9OX1BPUlQJCTIKKyNkZWZpbmUgVkFfVFJBTlNQQVJFTlRfUE9SVAkJMworCisvKiBGaWVsZHMgb2YgUFBCViAqLworI2RlZmluZSBHUlBfUE9SVF9QUklfUyhnKQkJKCgoZykgJSAyKSAqIDE2ICsgMTMpCisjZGVmaW5lIEdSUF9QT1JUX1BSSV9NCQkJMHgwNworI2RlZmluZSBHUlBfUE9SVF9WSURfUyhnKQkJKCgoZykgJSAyKSAqIDE2KQorI2RlZmluZSBHUlBfUE9SVF9WSURfTQkJCTB4ZmZmCisKKyNkZWZpbmUgUE9SVF9NQUNfQ1RSTF9CQVNFCQkweDMwMDAKKyNkZWZpbmUgUE9SVF9NQUNfQ1RSTF9QT1JUX09GRlNFVAkweDEwMAorI2RlZmluZSBQT1JUX01BQ19DVFJMX1JFRyhwLCByKQkJKFBPUlRfTUFDX0NUUkxfQkFTRSArIFwKKwkJCQkJKHApICogUE9SVF9NQUNfQ1RSTF9QT1JUX09GRlNFVCArIChyKSkKKyNkZWZpbmUgUE1DUihwKQkJCQlQT1JUX01BQ19DVFJMX1JFRyhwLCAweDAwKQorI2RlZmluZSBQTUVFRUNSKHApCQkJUE9SVF9NQUNfQ1RSTF9SRUcocCwgMHgwNCkKKyNkZWZpbmUgUE1TUihwKQkJCQlQT1JUX01BQ19DVFJMX1JFRyhwLCAweDA4KQorI2RlZmluZSBQSU5UX0VOKHApCQkJUE9SVF9NQUNfQ1RSTF9SRUcocCwgMHgxMCkKKyNkZWZpbmUgUElOVF9TVFMocCkJCQlQT1JUX01BQ19DVFJMX1JFRyhwLCAweDE0KQorCisjZGVmaW5lIEdNQUNDUgkJCQkoUE9SVF9NQUNfQ1RSTF9CQVNFICsgMHhlMCkKKyNkZWZpbmUgVFhDUkNfRU4JCQlCSVQoMTkpCisjZGVmaW5lIFJYQ1JDX0VOCQkJQklUKDE4KQorI2RlZmluZSBQUk1CTF9MTVRfRU4JCQlCSVQoMTcpCisjZGVmaW5lIE1UQ0NfTE1UX1MJCQk5CisjZGVmaW5lIE1UQ0NfTE1UX00JCQkweDFlMDAKKyNkZWZpbmUgTUFYX1JYX0pVTUJPX1MJCQkyCisjZGVmaW5lIE1BWF9SWF9KVU1CT19NCQkJMHgzYworI2RlZmluZSBNQVhfUlhfUEtUX0xFTl9TCQkwCisjZGVmaW5lIE1BWF9SWF9QS1RfTEVOX00JCTB4MworCisvKiBWYWx1ZXMgb2YgTUFYX1JYX1BLVF9MRU4gKi8KKyNkZWZpbmUgUlhfUEtUX0xFTl8xNTE4CQkJMAorI2RlZmluZSBSWF9QS1RfTEVOXzE1MzYJCQkxCisjZGVmaW5lIFJYX1BLVF9MRU5fMTUyMgkJCTIKKyNkZWZpbmUgUlhfUEtUX0xFTl9NQVhfSlVNQk8JCTMKKworLyogRmllbGRzIG9mIFBNQ1IgKi8KKyNkZWZpbmUgSVBHX0NGR19TCQkJMTgKKyNkZWZpbmUgSVBHX0NGR19NCQkJMHhjMDAwMAorI2RlZmluZSBFWFRfUEhZCQkJCUJJVCgxNykKKyNkZWZpbmUgTUFDX01PREUJCQlCSVQoMTYpCisjZGVmaW5lIE1BQ19UWF9FTgkJCUJJVCgxNCkKKyNkZWZpbmUgTUFDX1JYX0VOCQkJQklUKDEzKQorI2RlZmluZSBNQUNfUFJFCQkJCUJJVCgxMSkKKyNkZWZpbmUgQktPRkZfRU4JCQlCSVQoOSkKKyNkZWZpbmUgQkFDS1BSX0VOCQkJQklUKDgpCisjZGVmaW5lIEZPUkNFX0VFRTFHCQkJQklUKDcpCisjZGVmaW5lIEZPUkNFX0VFRTEwMDAJCQlCSVQoNikKKyNkZWZpbmUgRk9SQ0VfUlhfRkMJCQlCSVQoNSkKKyNkZWZpbmUgRk9SQ0VfVFhfRkMJCQlCSVQoNCkKKyNkZWZpbmUgRk9SQ0VfU1BEX1MJCQkyCisjZGVmaW5lIEZPUkNFX1NQRF9NCQkJMHgwYworI2RlZmluZSBGT1JDRV9EUFgJCQlCSVQoMSkKKyNkZWZpbmUgRk9SQ0VfTElOSwkJCUJJVCgwKQorCisvKiBGaWVsZHMgb2YgUE1TUiAqLworI2RlZmluZSBFRUUxR19TVFMJCQlCSVQoNykKKyNkZWZpbmUgRUVFMTAwX1NUUwkJCUJJVCg2KQorI2RlZmluZSBSWF9GQ19TVFMJCQlCSVQoNSkKKyNkZWZpbmUgVFhfRkNfU1RTCQkJQklUKDQpCisjZGVmaW5lIE1BQ19TUERfU1RTX1MJCQkyCisjZGVmaW5lIE1BQ19TUERfU1RTX00JCQkweDBjCisjZGVmaW5lIE1BQ19EUFhfU1RTCQkJQklUKDEpCisjZGVmaW5lIE1BQ19MTktfU1RTCQkJQklUKDApCisKKy8qIFZhbHVlcyBvZiBNQUNfU1BEX1NUUyAqLworI2RlZmluZSBNQUNfU1BEXzEwCQkJMAorI2RlZmluZSBNQUNfU1BEXzEwMAkJCTEKKyNkZWZpbmUgTUFDX1NQRF8xMDAwCQkJMgorI2RlZmluZSBNQUNfU1BEXzI1MDAJCQkzCisKKy8qIFZhbHVlcyBvZiBJUEdfQ0ZHICovCisjZGVmaW5lIElQR185NkJJVAkJCTAKKyNkZWZpbmUgSVBHXzk2QklUX1dJVEhfU0hPUlRfSVBHCTEKKyNkZWZpbmUgSVBHXzY0QklUCQkJMgorCisjZGVmaW5lIE1JQl9DT1VOVEVSX0JBU0UJCTB4NDAwMAorI2RlZmluZSBNSUJfQ09VTlRFUl9QT1JUX09GRlNFVAkJMHgxMDAKKyNkZWZpbmUgTUlCX0NPVU5URVJfUkVHKHAsIHIpCQkoTUlCX0NPVU5URVJfQkFTRSArIFwKKwkJCQkJKHApICogTUlCX0NPVU5URVJfUE9SVF9PRkZTRVQgKyAocikpCisjZGVmaW5lIFNUQVRTX1REUEMJCQkweDAwCisjZGVmaW5lIFNUQVRTX1RDUkMJCQkweDA0CisjZGVmaW5lIFNUQVRTX1RVUEMJCQkweDA4CisjZGVmaW5lIFNUQVRTX1RNUEMJCQkweDBDCisjZGVmaW5lIFNUQVRTX1RCUEMJCQkweDEwCisjZGVmaW5lIFNUQVRTX1RDRUMJCQkweDE0CisjZGVmaW5lIFNUQVRTX1RTQ0VDCQkJMHgxOAorI2RlZmluZSBTVEFUU19UTUNFQwkJCTB4MUMKKyNkZWZpbmUgU1RBVFNfVERFQwkJCTB4MjAKKyNkZWZpbmUgU1RBVFNfVExDRUMJCQkweDI0CisjZGVmaW5lIFNUQVRTX1RYQ0VDCQkJMHgyOAorI2RlZmluZSBTVEFUU19UUFBDCQkJMHgyQworI2RlZmluZSBTVEFUU19UTDY0UEMJCQkweDMwCisjZGVmaW5lIFNUQVRTX1RMNjVQQwkJCTB4MzQKKyNkZWZpbmUgU1RBVFNfVEwxMjhQQwkJCTB4MzgKKyNkZWZpbmUgU1RBVFNfVEwyNTZQQwkJCTB4M0MKKyNkZWZpbmUgU1RBVFNfVEw1MTJQQwkJCTB4NDAKKyNkZWZpbmUgU1RBVFNfVEwxMDI0UEMJCQkweDQ0CisjZGVmaW5lIFNUQVRTX1RPQwkJCTB4NDgKKyNkZWZpbmUgU1RBVFNfUkRQQwkJCTB4NjAKKyNkZWZpbmUgU1RBVFNfUkZQQwkJCTB4NjQKKyNkZWZpbmUgU1RBVFNfUlVQQwkJCTB4NjgKKyNkZWZpbmUgU1RBVFNfUk1QQwkJCTB4NkMKKyNkZWZpbmUgU1RBVFNfUkJQQwkJCTB4NzAKKyNkZWZpbmUgU1RBVFNfUkFFUEMJCQkweDc0CisjZGVmaW5lIFNUQVRTX1JDRVBDCQkJMHg3OAorI2RlZmluZSBTVEFUU19SVVNQQwkJCTB4N0MKKyNkZWZpbmUgU1RBVFNfUkZFUEMJCQkweDgwCisjZGVmaW5lIFNUQVRTX1JPU1BDCQkJMHg4NAorI2RlZmluZSBTVEFUU19SSkVQQwkJCTB4ODgKKyNkZWZpbmUgU1RBVFNfUlBQQwkJCTB4OEMKKyNkZWZpbmUgU1RBVFNfUkw2NFBDCQkJMHg5MAorI2RlZmluZSBTVEFUU19STDY1UEMJCQkweDk0CisjZGVmaW5lIFNUQVRTX1JMMTI4UEMJCQkweDk4CisjZGVmaW5lIFNUQVRTX1JMMjU2UEMJCQkweDlDCisjZGVmaW5lIFNUQVRTX1JMNTEyUEMJCQkweEEwCisjZGVmaW5lIFNUQVRTX1JMMTAyNFBDCQkJMHhBNAorI2RlZmluZSBTVEFUU19ST0MJCQkweEE4CisjZGVmaW5lIFNUQVRTX1JEUENfQ1RSTAkJCTB4QjAKKyNkZWZpbmUgU1RBVFNfUkRQQ19JTkcJCQkweEI0CisjZGVmaW5lIFNUQVRTX1JEUENfQVJMCQkJMHhCOAorCisjZGVmaW5lIFNZU19DVFJMCQkJMHg3MDAwCisjZGVmaW5lIFNXX1BIWV9SU1QJCQlCSVQoMikKKyNkZWZpbmUgU1dfU1lTX1JTVAkJCUJJVCgxKQorI2RlZmluZSBTV19SRUdfUlNUCQkJQklUKDApCisKKyNkZWZpbmUgU1lTX0lOVF9FTgkJCTB4NzAwOAorI2RlZmluZSBTWVNfSU5UX1NUUwkJCTB4NzAwYworI2RlZmluZSBNQUNfUENfSU5UCQkJQklUKDE2KQorI2RlZmluZSBQSFlfSU5UKHApCQkJQklUKChwKSArIDgpCisjZGVmaW5lIFBIWV9MQ19JTlQocCkJCQlCSVQocCkKKworI2RlZmluZSBQSFlfSUFDCQkJCTB4NzAxYworI2RlZmluZSBQSFlfQUNTX1NUCQkJQklUKDMxKQorI2RlZmluZSBNRElPX1JFR19BRERSX1MJCQkyNQorI2RlZmluZSBNRElPX1JFR19BRERSX00JCQkweDNlMDAwMDAwCisjZGVmaW5lIE1ESU9fUEhZX0FERFJfUwkJCTIwCisjZGVmaW5lIE1ESU9fUEhZX0FERFJfTQkJCTB4MWYwMDAwMAorI2RlZmluZSBNRElPX0NNRF9TCQkJMTgKKyNkZWZpbmUgTURJT19DTURfTQkJCTB4YzAwMDAKKyNkZWZpbmUgTURJT19TVF9TCQkJMTYKKyNkZWZpbmUgTURJT19TVF9NCQkJMHgzMDAwMAorI2RlZmluZSBNRElPX1JXX0RBVEFfUwkJCTAKKyNkZWZpbmUgTURJT19SV19EQVRBX00JCQkweGZmZmYKKworLyogTURJT19DTUQ6IE1ESU8gY29tbWFuZHMgKi8KKyNkZWZpbmUgTURJT19DTURfQUREUgkJCTAKKyNkZWZpbmUgTURJT19DTURfV1JJVEUJCQkxCisjZGVmaW5lIE1ESU9fQ01EX1JFQUQJCQkyCisjZGVmaW5lIE1ESU9fQ01EX1JFQURfQzQ1CQkzCisKKy8qIE1ESU9fU1Q6IE1ESU8gc3RhcnQgZmllbGQgKi8KKyNkZWZpbmUgTURJT19TVF9DNDUJCQkwCisjZGVmaW5lIE1ESU9fU1RfQzIyCQkJMQorCisjZGVmaW5lIEhXU1RSQVAJCQkJMHg3ODAwCisjZGVmaW5lIE1IV1NUUkFQCQkJMHg3ODA0CisKKy8qIEludGVybmFsIEdQSFkgUGFnZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFBIWV9DTDIyX1BBR0VfQ1RSTAkJMHgxZgorI2RlZmluZSBQSFlfVFJfUEFHRQkJCTB4NTJiNQorCisvKiBJbnRlcm5hbCBHUEhZIFRva2VuIFJpbmcgQWNjZXNzIFJlZ2lzdGVycyAqLworI2RlZmluZSBQSFlfVFJfQ1RSTAkJCTB4MTAKKyNkZWZpbmUgUEhZX1RSX0xPV19EQVRBCQkJMHgxMQorI2RlZmluZSBQSFlfVFJfSElHSF9EQVRBCQkweDEyCisKKy8qIEZpZWxkcyBvZiBQSFlfVFJfQ1RSTCAqLworI2RlZmluZSBQSFlfVFJfUEtUX1hNVF9TVEEJCUJJVCgxNSkKKyNkZWZpbmUgUEhZX1RSX1dSX1MJCQkxMworI2RlZmluZSBQSFlfVFJfQ0hfQUREUl9TCQkxMQorI2RlZmluZSBQSFlfVFJfTk9ERV9BRERSX1MJCTcKKyNkZWZpbmUgUEhZX1RSX0RBVEFfQUREUl9TCQkxCisKK2VudW0gcGh5X3RyX3dyIHsKKwlQSFlfVFJfV1JJVEUgPSAwLAorCVBIWV9UUl9SRUFEID0gMSwKK307CisKKy8qIEhlbHBlciBtYWNybyBmb3IgR1BIWSBUb2tlbiBSaW5nIEFjY2VzcyAqLworI2RlZmluZSBQSFlfVFJfTE9XX1ZBTCh4KQkJKCh4KSAmIDB4ZmZmZikKKyNkZWZpbmUgUEhZX1RSX0hJR0hfVkFMKHgpCQkoKCh4KSAmIDB4ZmYwMDAwKSA+PiAxNikKKworLyogVG9rZW4gUmluZyBDaGFubmVscyAqLworI2RlZmluZSBQTUFfQ0gJCQkJMHgxCisjZGVmaW5lIERTUF9DSAkJCQkweDIKKworLyogVG9rZW4gUmluZyBOb2RlcyAqLworI2RlZmluZSBQTUFfTk9ECQkJCTB4ZgorI2RlZmluZSBEU1BfTk9ECQkJCTB4ZAorCisvKiBUb2tlbiBSaW5nIHJlZ2lzdGVyIHJhbmdlICovCitlbnVtIHRyX3BtYV9yZWdfYWRkciB7CisJUE1BX01JTiA9IDB4MCwKKwlQTUFfMDEgID0gMHgxLAorCVBNQV8xNyAgPSAweDE3LAorCVBNQV8xOCAgPSAweDE4LAorCVBNQV9NQVggPSAweDNkLAorfTsKKworZW51bSB0cl9kc3BfcmVnX2FkZHIgeworCURTUF9NSU4gPSAweDAsCisJRFNQXzA2ICA9IDB4NiwKKwlEU1BfMDggID0gMHg4LAorCURTUF8wZiAgPSAweGYsCisJRFNQXzEwICA9IDB4MTAsCisJRFNQX01BWCA9IDB4M2UsCit9OworI2VuZGlmIC8qIF9NVDc1M1hfUkVHU19IXyAqLwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvbXRrL210NzUzeC9tdDc1M3hfc3djb25maWcuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L210ay9tdDc1M3gvbXQ3NTN4X3N3Y29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2EwNTk1MgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L210ay9tdDc1M3gvbXQ3NTN4X3N3Y29uZmlnLmMKQEAgLTAsMCArMSw1MTcgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogQ29weXJpZ2h0IChjKSAyMDE4IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogV2VpamllIEdhbyA8d2VpamllLmdhb0BtZWRpYXRlay5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lmLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPG5ldC9nZW5ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbG9ja2RlcC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorCisjaW5jbHVkZSAibXQ3NTN4LmgiCisjaW5jbHVkZSAibXQ3NTN4X3N3Y29uZmlnLmgiCisjaW5jbHVkZSAibXQ3NTN4X3JlZ3MuaCIKKworI2RlZmluZSBNVDc1M1hfUE9SVF9NSUJfVFhCX0lECTE4CS8qIFR4Qnl0ZSAqLworI2RlZmluZSBNVDc1M1hfUE9SVF9NSUJfUlhCX0lECTM3CS8qIFJ4Qnl0ZSAqLworCisjZGVmaW5lIE1JQl9ERVNDKF9zLCBfbywgX24pICAgXAorCXsgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJLnNpemUgPSAoX3MpLCAgIFwKKwkJLm9mZnNldCA9IChfbyksIFwKKwkJLm5hbWUgPSAoX24pLCAgIFwKKwl9CisKK3N0cnVjdCBtdDc1M3hfbWliX2Rlc2MgeworCXVuc2lnbmVkIGludCBzaXplOworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisJY29uc3QgY2hhciAqbmFtZTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXQ3NTN4X21pYl9kZXNjIG10NzUzeF9taWJzW10gPSB7CisJTUlCX0RFU0MoMSwgU1RBVFNfVERQQywgIlR4RHJvcCIpLAorCU1JQl9ERVNDKDEsIFNUQVRTX1RDUkMsICJUeENSQyIpLAorCU1JQl9ERVNDKDEsIFNUQVRTX1RVUEMsICJUeFVuaSIpLAorCU1JQl9ERVNDKDEsIFNUQVRTX1RNUEMsICJUeE11bHRpIiksCisJTUlCX0RFU0MoMSwgU1RBVFNfVEJQQywgIlR4QnJvYWQiKSwKKwlNSUJfREVTQygxLCBTVEFUU19UQ0VDLCAiVHhDb2xsaXNpb24iKSwKKwlNSUJfREVTQygxLCBTVEFUU19UU0NFQywgIlR4U2luZ2xlQ29sIiksCisJTUlCX0RFU0MoMSwgU1RBVFNfVE1DRUMsICJUeE11bHRpQ29sIiksCisJTUlCX0RFU0MoMSwgU1RBVFNfVERFQywgIlR4RGVmZXIiKSwKKwlNSUJfREVTQygxLCBTVEFUU19UTENFQywgIlR4TGF0ZUNvbCIpLAorCU1JQl9ERVNDKDEsIFNUQVRTX1RYQ0VDLCAiVHhFeGNDb2wiKSwKKwlNSUJfREVTQygxLCBTVEFUU19UUFBDLCAiVHhQYXVzZSIpLAorCU1JQl9ERVNDKDEsIFNUQVRTX1RMNjRQQywgIlR4NjRCeXRlIiksCisJTUlCX0RFU0MoMSwgU1RBVFNfVEw2NVBDLCAiVHg2NUJ5dGUiKSwKKwlNSUJfREVTQygxLCBTVEFUU19UTDEyOFBDLCAiVHgxMjhCeXRlIiksCisJTUlCX0RFU0MoMSwgU1RBVFNfVEwyNTZQQywgIlR4MjU2Qnl0ZSIpLAorCU1JQl9ERVNDKDEsIFNUQVRTX1RMNTEyUEMsICJUeDUxMkJ5dGUiKSwKKwlNSUJfREVTQygxLCBTVEFUU19UTDEwMjRQQywgIlR4MTAyNEJ5dGUiKSwKKwlNSUJfREVTQygyLCBTVEFUU19UT0MsICJUeEJ5dGUiKSwKKwlNSUJfREVTQygxLCBTVEFUU19SRFBDLCAiUnhEcm9wIiksCisJTUlCX0RFU0MoMSwgU1RBVFNfUkZQQywgIlJ4RmlsdGVyZWQiKSwKKwlNSUJfREVTQygxLCBTVEFUU19SVVBDLCAiUnhVbmkiKSwKKwlNSUJfREVTQygxLCBTVEFUU19STVBDLCAiUnhNdWx0aSIpLAorCU1JQl9ERVNDKDEsIFNUQVRTX1JCUEMsICJSeEJyb2FkIiksCisJTUlCX0RFU0MoMSwgU1RBVFNfUkFFUEMsICJSeEFsaWduRXJyIiksCisJTUlCX0RFU0MoMSwgU1RBVFNfUkNFUEMsICJSeENSQyIpLAorCU1JQl9ERVNDKDEsIFNUQVRTX1JVU1BDLCAiUnhVbmRlclNpemUiKSwKKwlNSUJfREVTQygxLCBTVEFUU19SRkVQQywgIlJ4RnJhZ21lbnQiKSwKKwlNSUJfREVTQygxLCBTVEFUU19ST1NQQywgIlJ4T3ZlclNpemUiKSwKKwlNSUJfREVTQygxLCBTVEFUU19SSkVQQywgIlJ4SmFiYmVyIiksCisJTUlCX0RFU0MoMSwgU1RBVFNfUlBQQywgIlJ4UGF1c2UiKSwKKwlNSUJfREVTQygxLCBTVEFUU19STDY0UEMsICJSeDY0Qnl0ZSIpLAorCU1JQl9ERVNDKDEsIFNUQVRTX1JMNjVQQywgIlJ4NjVCeXRlIiksCisJTUlCX0RFU0MoMSwgU1RBVFNfUkwxMjhQQywgIlJ4MTI4Qnl0ZSIpLAorCU1JQl9ERVNDKDEsIFNUQVRTX1JMMjU2UEMsICJSeDI1NkJ5dGUiKSwKKwlNSUJfREVTQygxLCBTVEFUU19STDUxMlBDLCAiUng1MTJCeXRlIiksCisJTUlCX0RFU0MoMSwgU1RBVFNfUkwxMDI0UEMsICJSeDEwMjRCeXRlIiksCisJTUlCX0RFU0MoMiwgU1RBVFNfUk9DLCAiUnhCeXRlIiksCisJTUlCX0RFU0MoMSwgU1RBVFNfUkRQQ19DVFJMLCAiUnhDdHJsRHJvcCIpLAorCU1JQl9ERVNDKDEsIFNUQVRTX1JEUENfSU5HLCAiUnhJbmdEcm9wIiksCisJTUlCX0RFU0MoMSwgU1RBVFNfUkRQQ19BUkwsICJSeEFSTERyb3AiKQorfTsKKworZW51bSB7CisJLyogR2xvYmFsIGF0dHJpYnV0ZXMuICovCisJTVQ3NTNYX0FUVFJfRU5BQkxFX1ZMQU4sCit9OworCitzdGF0aWMgaW50IG10NzUzeF9nZXRfdmxhbl9lbmFibGUoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCQkgIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCQkgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IGdzd19tdDc1M3ggKmdzdyA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBnc3dfbXQ3NTN4LCBzd2Rldik7CisKKwl2YWwtPnZhbHVlLmkgPSBnc3ctPmdsb2JhbF92bGFuX2VuYWJsZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10NzUzeF9zZXRfdmxhbl9lbmFibGUoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCQkgIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCQkgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IGdzd19tdDc1M3ggKmdzdyA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBnc3dfbXQ3NTN4LCBzd2Rldik7CisKKwlnc3ctPmdsb2JhbF92bGFuX2VuYWJsZSA9IHZhbC0+dmFsdWUuaSAhPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXQ3NTN4X2dldF9wb3J0X3B2aWQoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgaW50IHBvcnQsIGludCAqdmFsKQoreworCXN0cnVjdCBnc3dfbXQ3NTN4ICpnc3cgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgZ3N3X210NzUzeCwgc3dkZXYpOworCisJaWYgKHBvcnQgPj0gTVQ3NTNYX05VTV9QT1JUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkqdmFsID0gbXQ3NTN4X3JlZ19yZWFkKGdzdywgUFBCVjEocG9ydCkpOworCSp2YWwgJj0gR1JQX1BPUlRfVklEX007CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdDc1M3hfc2V0X3BvcnRfcHZpZChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBpbnQgcG9ydCwgaW50IHB2aWQpCit7CisJc3RydWN0IGdzd19tdDc1M3ggKmdzdyA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBnc3dfbXQ3NTN4LCBzd2Rldik7CisKKwlpZiAocG9ydCA+PSBNVDc1M1hfTlVNX1BPUlRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChwdmlkIDwgTVQ3NTNYX01JTl9WSUQgfHwgcHZpZCA+IE1UNzUzWF9NQVhfVklEKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWdzdy0+cG9ydF9lbnRyaWVzW3BvcnRdLnB2aWQgPSBwdmlkOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXQ3NTN4X2dldF92bGFuX3BvcnRzKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IGdzd19tdDc1M3ggKmdzdyA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBnc3dfbXQ3NTN4LCBzd2Rldik7CisJdTMyIG1lbWJlcjsKKwl1MzIgZXRhZ3M7CisJaW50IGk7CisKKwl2YWwtPmxlbiA9IDA7CisKKwlpZiAodmFsLT5wb3J0X3ZsYW4gPCAwIHx8IHZhbC0+cG9ydF92bGFuID49IE1UNzUzWF9OVU1fVkxBTlMpCisJCXJldHVybiAtRUlOVkFMOworCisJbXQ3NTN4X3ZsYW5fY3RybChnc3csIFZUQ1JfUkVBRF9WTEFOX0VOVFJZLCB2YWwtPnBvcnRfdmxhbik7CisKKwltZW1iZXIgPSBtdDc1M3hfcmVnX3JlYWQoZ3N3LCBWQVdEMSk7CisJbWVtYmVyICY9IFBPUlRfTUVNX007CisJbWVtYmVyID4+PSBQT1JUX01FTV9TOworCisJZXRhZ3MgPSBtdDc1M3hfcmVnX3JlYWQoZ3N3LCBWQVdEMik7CisKKwlmb3IgKGkgPSAwOyBpIDwgTVQ3NTNYX05VTV9QT1JUUzsgaSsrKSB7CisJCXN0cnVjdCBzd2l0Y2hfcG9ydCAqcDsKKwkJaW50IGV0YWc7CisKKwkJaWYgKCEobWVtYmVyICYgQklUKGkpKSkKKwkJCWNvbnRpbnVlOworCisJCXAgPSAmdmFsLT52YWx1ZS5wb3J0c1t2YWwtPmxlbisrXTsKKwkJcC0+aWQgPSBpOworCisJCWV0YWcgPSAoZXRhZ3MgPj4gUE9SVF9FVEFHX1MoaSkpICYgUE9SVF9FVEFHX007CisKKwkJaWYgKGV0YWcgPT0gRVRBR19DVFJMX1RBRykKKwkJCXAtPmZsYWdzIHw9IEJJVChTV0lUQ0hfUE9SVF9GTEFHX1RBR0dFRCk7CisJCWVsc2UgaWYgKGV0YWcgIT0gRVRBR19DVFJMX1VOVEFHKQorCQkJZGV2X2luZm8oZ3N3LT5kZXYsCisJCQkJICJ2bGFuIGVncmVzcyB0YWcgY29udHJvbCBuZWl0aGVyIHVudGFnIG5vciB0YWcuXG4iKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdDc1M3hfc2V0X3ZsYW5fcG9ydHMoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGdzd19tdDc1M3gsIHN3ZGV2KTsKKwl1OCBtZW1iZXIgPSAwOworCXU4IGV0YWdzID0gMDsKKwlpbnQgaTsKKworCWlmICh2YWwtPnBvcnRfdmxhbiA8IDAgfHwgdmFsLT5wb3J0X3ZsYW4gPj0gTVQ3NTNYX05VTV9WTEFOUyB8fAorCSAgICB2YWwtPmxlbiA+IE1UNzUzWF9OVU1fUE9SVFMpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IHZhbC0+bGVuOyBpKyspIHsKKwkJc3RydWN0IHN3aXRjaF9wb3J0ICpwID0gJnZhbC0+dmFsdWUucG9ydHNbaV07CisKKwkJaWYgKHAtPmlkID49IE1UNzUzWF9OVU1fUE9SVFMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQltZW1iZXIgfD0gQklUKHAtPmlkKTsKKworCQlpZiAocC0+ZmxhZ3MgJiBCSVQoU1dJVENIX1BPUlRfRkxBR19UQUdHRUQpKQorCQkJZXRhZ3MgfD0gQklUKHAtPmlkKTsKKwl9CisKKwlnc3ctPnZsYW5fZW50cmllc1t2YWwtPnBvcnRfdmxhbl0ubWVtYmVyID0gbWVtYmVyOworCWdzdy0+dmxhbl9lbnRyaWVzW3ZhbC0+cG9ydF92bGFuXS5ldGFncyA9IGV0YWdzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXQ3NTN4X3NldF92aWQoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCSAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBnc3dfbXQ3NTN4ICpnc3cgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgZ3N3X210NzUzeCwgc3dkZXYpOworCWludCB2bGFuOworCXUxNiB2aWQ7CisKKwl2bGFuID0gdmFsLT5wb3J0X3ZsYW47CisJdmlkID0gKHUxNil2YWwtPnZhbHVlLmk7CisKKwlpZiAodmxhbiA8IDAgfHwgdmxhbiA+PSBNVDc1M1hfTlVNX1ZMQU5TKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh2aWQgPCBNVDc1M1hfTUlOX1ZJRCB8fCB2aWQgPiBNVDc1M1hfTUFYX1ZJRCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlnc3ctPnZsYW5fZW50cmllc1t2bGFuXS52aWQgPSB2aWQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXQ3NTN4X2dldF92aWQoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCSAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXZhbC0+dmFsdWUuaSA9IHZhbC0+cG9ydF92bGFuOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10NzUzeF9nZXRfcG9ydF9saW5rKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsIGludCBwb3J0LAorCQkJCXN0cnVjdCBzd2l0Y2hfcG9ydF9saW5rICpsaW5rKQoreworCXN0cnVjdCBnc3dfbXQ3NTN4ICpnc3cgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgZ3N3X210NzUzeCwgc3dkZXYpOworCXUzMiBzcGVlZCwgcG1zcjsKKworCWlmIChwb3J0IDwgMCB8fCBwb3J0ID49IE1UNzUzWF9OVU1fUE9SVFMpCisJCXJldHVybiAtRUlOVkFMOworCisJcG1zciA9IG10NzUzeF9yZWdfcmVhZChnc3csIFBNU1IocG9ydCkpOworCisJbGluay0+bGluayA9IHBtc3IgJiBNQUNfTE5LX1NUUzsKKwlsaW5rLT5kdXBsZXggPSBwbXNyICYgTUFDX0RQWF9TVFM7CisJc3BlZWQgPSAocG1zciAmIE1BQ19TUERfU1RTX00pID4+IE1BQ19TUERfU1RTX1M7CisKKwlzd2l0Y2ggKHNwZWVkKSB7CisJY2FzZSBNQUNfU1BEXzEwOgorCQlsaW5rLT5zcGVlZCA9IFNXSVRDSF9QT1JUX1NQRUVEXzEwOworCQlicmVhazsKKwljYXNlIE1BQ19TUERfMTAwOgorCQlsaW5rLT5zcGVlZCA9IFNXSVRDSF9QT1JUX1NQRUVEXzEwMDsKKwkJYnJlYWs7CisJY2FzZSBNQUNfU1BEXzEwMDA6CisJCWxpbmstPnNwZWVkID0gU1dJVENIX1BPUlRfU1BFRURfMTAwMDsKKwkJYnJlYWs7CisJY2FzZSBNQUNfU1BEXzI1MDA6CisJCS8qIFRPRE86IHN3Y29uZmlnIGhhcyBubyBzdXBwb3J0IGZvciAyNTAwIG5vdyAqLworCQlsaW5rLT5zcGVlZCA9IFNXSVRDSF9QT1JUX1NQRUVEX1VOS05PV047CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10NzUzeF9zZXRfcG9ydF9saW5rKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsIGludCBwb3J0LAorCQkJCXN0cnVjdCBzd2l0Y2hfcG9ydF9saW5rICpsaW5rKQoreworI2lmbmRlZiBNT0RVTEUKKwlpZiAocG9ydCA+PSBNVDc1M1hfTlVNX1BIWVMpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHN3aXRjaF9nZW5lcmljX3NldF9saW5rKGRldiwgcG9ydCwgbGluayk7CisjZWxzZQorCXJldHVybiAtRU5PVFNVUFA7CisjZW5kaWYKK30KKworc3RhdGljIHU2NCBnZXRfbWliX2NvdW50ZXIoc3RydWN0IGdzd19tdDc1M3ggKmdzdywgaW50IGksIGludCBwb3J0KQoreworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisJdTY0IGxvLCBoaSwgaGkyOworCisJb2Zmc2V0ID0gbXQ3NTN4X21pYnNbaV0ub2Zmc2V0OworCisJaWYgKG10NzUzeF9taWJzW2ldLnNpemUgPT0gMSkKKwkJcmV0dXJuIG10NzUzeF9yZWdfcmVhZChnc3csIE1JQl9DT1VOVEVSX1JFRyhwb3J0LCBvZmZzZXQpKTsKKworCWRvIHsKKwkJaGkgPSBtdDc1M3hfcmVnX3JlYWQoZ3N3LCBNSUJfQ09VTlRFUl9SRUcocG9ydCwgb2Zmc2V0ICsgNCkpOworCQlsbyA9IG10NzUzeF9yZWdfcmVhZChnc3csIE1JQl9DT1VOVEVSX1JFRyhwb3J0LCBvZmZzZXQpKTsKKwkJaGkyID0gbXQ3NTN4X3JlZ19yZWFkKGdzdywgTUlCX0NPVU5URVJfUkVHKHBvcnQsIG9mZnNldCArIDQpKTsKKwl9IHdoaWxlIChoaTIgIT0gaGkpOworCisJcmV0dXJuIChoaSA8PCAzMikgfCBsbzsKK30KKworc3RhdGljIGludCBtdDc1M3hfZ2V0X3BvcnRfbWliKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJICAgICAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RhdGljIGNoYXIgYnVmWzQwOTZdOworCXN0cnVjdCBnc3dfbXQ3NTN4ICpnc3cgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgZ3N3X210NzUzeCwgc3dkZXYpOworCWludCBpLCBsZW4gPSAwOworCisJaWYgKHZhbC0+cG9ydF92bGFuID49IE1UNzUzWF9OVU1fUE9SVFMpCisJCXJldHVybiAtRUlOVkFMOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJCQkiUG9ydCAlZCBNSUIgY291bnRlcnNcbiIsIHZhbC0+cG9ydF92bGFuKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG10NzUzeF9taWJzKTsgKytpKSB7CisJCXU2NCBjb3VudGVyOworCisJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCQkJCSIlLTExczogIiwgbXQ3NTN4X21pYnNbaV0ubmFtZSk7CisJCWNvdW50ZXIgPSBnZXRfbWliX2NvdW50ZXIoZ3N3LCBpLCB2YWwtPnBvcnRfdmxhbik7CisJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLCAiJWxsdVxuIiwKKwkJCQljb3VudGVyKTsKKwl9CisKKwl2YWwtPnZhbHVlLnMgPSBidWY7CisJdmFsLT5sZW4gPSBsZW47CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXQ3NTN4X2dldF9wb3J0X3N0YXRzKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsIGludCBwb3J0LAorCQkJCSBzdHJ1Y3Qgc3dpdGNoX3BvcnRfc3RhdHMgKnN0YXRzKQoreworCXN0cnVjdCBnc3dfbXQ3NTN4ICpnc3cgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgZ3N3X210NzUzeCwgc3dkZXYpOworCisJaWYgKHBvcnQgPCAwIHx8IHBvcnQgPj0gTVQ3NTNYX05VTV9QT1JUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdGF0cy0+dHhfYnl0ZXMgPSBnZXRfbWliX2NvdW50ZXIoZ3N3LCBNVDc1M1hfUE9SVF9NSUJfVFhCX0lELCBwb3J0KTsKKwlzdGF0cy0+cnhfYnl0ZXMgPSBnZXRfbWliX2NvdW50ZXIoZ3N3LCBNVDc1M1hfUE9SVF9NSUJfUlhCX0lELCBwb3J0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtdDc1M3hfcG9ydF9pc29sYXRpb24oc3RydWN0IGdzd19tdDc1M3ggKmdzdykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBNVDc1M1hfTlVNX1BPUlRTOyBpKyspCisJCW10NzUzeF9yZWdfd3JpdGUoZ3N3LCBQQ1IoaSksCisJCQkJIEJJVChnc3ctPmNwdV9wb3J0KSA8PCBQT1JUX01BVFJJWF9TKTsKKworCW10NzUzeF9yZWdfd3JpdGUoZ3N3LCBQQ1IoZ3N3LT5jcHVfcG9ydCksIFBPUlRfTUFUUklYX00pOworCisJZm9yIChpID0gMDsgaSA8IE1UNzUzWF9OVU1fUE9SVFM7IGkrKykgeworCQl1MzIgcHZjX21vZGUgPSAweDgxMDAgPDwgU1RBR19WUElEX1M7CisKKwkJaWYgKChnc3ctPnBvcnQ1X2NmZy5zdGFnX29uICYmIGkgPT0gNSkgfHwKKwkJICAgIChnc3ctPnBvcnQ2X2NmZy5zdGFnX29uICYmIGkgPT0gNikpCisJCQlwdmNfbW9kZSB8PSBQVkNfUE9SVF9TVEFHOworCQllbHNlCisJCQlwdmNfbW9kZSB8PSAoVkFfVFJBTlNQQVJFTlRfUE9SVCA8PCBWTEFOX0FUVFJfUyk7CisKKwkJbXQ3NTN4X3JlZ193cml0ZShnc3csIFBWQyhpKSwgcHZjX21vZGUpOworCX0KK30KKworc3RhdGljIGludCBtdDc1M3hfYXBwbHlfY29uZmlnKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYpCit7CisJc3RydWN0IGdzd19tdDc1M3ggKmdzdyA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBnc3dfbXQ3NTN4LCBzd2Rldik7CisKKwlpZiAoIWdzdy0+Z2xvYmFsX3ZsYW5fZW5hYmxlKSB7CisJCW10NzUzeF9wb3J0X2lzb2xhdGlvbihnc3cpOworCQlyZXR1cm4gMDsKKwl9CisKKwltdDc1M3hfYXBwbHlfdmxhbl9jb25maWcoZ3N3KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10NzUzeF9yZXNldF9zd2l0Y2goc3RydWN0IHN3aXRjaF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGdzd19tdDc1M3gsIHN3ZGV2KTsKKwlpbnQgaTsKKworCW1lbXNldChnc3ctPnBvcnRfZW50cmllcywgMCwgc2l6ZW9mKGdzdy0+cG9ydF9lbnRyaWVzKSk7CisJbWVtc2V0KGdzdy0+dmxhbl9lbnRyaWVzLCAwLCBzaXplb2YoZ3N3LT52bGFuX2VudHJpZXMpKTsKKworCS8qIHNldCBkZWZhdWx0IHZpZCBvZiBlYWNoIHZsYW4gdG8gdGhlIHNhbWUgbnVtYmVyIG9mIHZsYW4sIHNvIHRoZSB2aWQKKwkgKiB3b24ndCBuZWVkIGJlIHNldCBleHBsaWNpdGx5LgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBNVDc1M1hfTlVNX1ZMQU5TOyBpKyspCisJCWdzdy0+dmxhbl9lbnRyaWVzW2ldLnZpZCA9IGk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdDc1M3hfcGh5X3JlYWQxNihzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBpbnQgYWRkciwgdTggcmVnLAorCQkJICAgICB1MTYgKnZhbHVlKQoreworCXN0cnVjdCBnc3dfbXQ3NTN4ICpnc3cgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgZ3N3X210NzUzeCwgc3dkZXYpOworCisJKnZhbHVlID0gZ3N3LT5taWlfcmVhZChnc3csIGFkZHIsIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdDc1M3hfcGh5X3dyaXRlMTYoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgaW50IGFkZHIsIHU4IHJlZywKKwkJCSAgICAgIHUxNiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGdzd19tdDc1M3gsIHN3ZGV2KTsKKworCWdzdy0+bWlpX3dyaXRlKGdzdywgYWRkciwgcmVnLCB2YWx1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciBtdDc1M3hfZ2xvYmFsW10gPSB7CisJeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX0lOVCwKKwkJLm5hbWUgPSAiZW5hYmxlX3ZsYW4iLAorCQkuZGVzY3JpcHRpb24gPSAiVkxBTiBtb2RlICgxOmVuYWJsZWQpIiwKKwkJLm1heCA9IDEsCisJCS5pZCA9IE1UNzUzWF9BVFRSX0VOQUJMRV9WTEFOLAorCQkuZ2V0ID0gbXQ3NTN4X2dldF92bGFuX2VuYWJsZSwKKwkJLnNldCA9IG10NzUzeF9zZXRfdmxhbl9lbmFibGUsCisJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciBtdDc1M3hfcG9ydFtdID0geworCXsKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9TVFJJTkcsCisJCS5uYW1lID0gIm1pYiIsCisJCS5kZXNjcmlwdGlvbiA9ICJHZXQgTUlCIGNvdW50ZXJzIGZvciBwb3J0IiwKKwkJLmdldCA9IG10NzUzeF9nZXRfcG9ydF9taWIsCisJCS5zZXQgPSBOVUxMLAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyIG10NzUzeF92bGFuW10gPSB7CisJeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX0lOVCwKKwkJLm5hbWUgPSAidmlkIiwKKwkJLmRlc2NyaXB0aW9uID0gIlZMQU4gSUQgKDAtNDA5NCkiLAorCQkuc2V0ID0gbXQ3NTN4X3NldF92aWQsCisJCS5nZXQgPSBtdDc1M3hfZ2V0X3ZpZCwKKwkJLm1heCA9IDQwOTQsCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2Rldl9vcHMgbXQ3NTN4X3N3ZGV2X29wcyA9IHsKKwkuYXR0cl9nbG9iYWwgPSB7CisJCS5hdHRyID0gbXQ3NTN4X2dsb2JhbCwKKwkJLm5fYXR0ciA9IEFSUkFZX1NJWkUobXQ3NTN4X2dsb2JhbCksCisJfSwKKwkuYXR0cl9wb3J0ID0geworCQkuYXR0ciA9IG10NzUzeF9wb3J0LAorCQkubl9hdHRyID0gQVJSQVlfU0laRShtdDc1M3hfcG9ydCksCisJfSwKKwkuYXR0cl92bGFuID0geworCQkuYXR0ciA9IG10NzUzeF92bGFuLAorCQkubl9hdHRyID0gQVJSQVlfU0laRShtdDc1M3hfdmxhbiksCisJfSwKKwkuZ2V0X3ZsYW5fcG9ydHMgPSBtdDc1M3hfZ2V0X3ZsYW5fcG9ydHMsCisJLnNldF92bGFuX3BvcnRzID0gbXQ3NTN4X3NldF92bGFuX3BvcnRzLAorCS5nZXRfcG9ydF9wdmlkID0gbXQ3NTN4X2dldF9wb3J0X3B2aWQsCisJLnNldF9wb3J0X3B2aWQgPSBtdDc1M3hfc2V0X3BvcnRfcHZpZCwKKwkuZ2V0X3BvcnRfbGluayA9IG10NzUzeF9nZXRfcG9ydF9saW5rLAorCS5zZXRfcG9ydF9saW5rID0gbXQ3NTN4X3NldF9wb3J0X2xpbmssCisJLmdldF9wb3J0X3N0YXRzID0gbXQ3NTN4X2dldF9wb3J0X3N0YXRzLAorCS5hcHBseV9jb25maWcgPSBtdDc1M3hfYXBwbHlfY29uZmlnLAorCS5yZXNldF9zd2l0Y2ggPSBtdDc1M3hfcmVzZXRfc3dpdGNoLAorCS5waHlfcmVhZDE2ID0gbXQ3NTN4X3BoeV9yZWFkMTYsCisJLnBoeV93cml0ZTE2ID0gbXQ3NTN4X3BoeV93cml0ZTE2LAorfTsKKworaW50IG10NzUzeF9zd2NvbmZpZ19pbml0KHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3cpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGdzdy0+ZGV2LT5vZl9ub2RlOworCXN0cnVjdCBzd2l0Y2hfZGV2ICpzd2RldjsKKwlpbnQgcmV0OworCisJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAibWVkaWF0ZWssY3B1cG9ydCIsICZnc3ctPmNwdV9wb3J0KSkKKwkJZ3N3LT5jcHVfcG9ydCA9IE1UNzUzWF9ERkxfQ1BVX1BPUlQ7CisKKwlzd2RldiA9ICZnc3ctPnN3ZGV2OworCisJc3dkZXYtPm5hbWUgPSBnc3ctPm5hbWU7CisJc3dkZXYtPmFsaWFzID0gZ3N3LT5uYW1lOworCXN3ZGV2LT5jcHVfcG9ydCA9IGdzdy0+Y3B1X3BvcnQ7CisJc3dkZXYtPnBvcnRzID0gTVQ3NTNYX05VTV9QT1JUUzsKKwlzd2Rldi0+dmxhbnMgPSBNVDc1M1hfTlVNX1ZMQU5TOworCXN3ZGV2LT5vcHMgPSAmbXQ3NTN4X3N3ZGV2X29wczsKKworCXJldCA9IHJlZ2lzdGVyX3N3aXRjaChzd2RldiwgTlVMTCk7CisJaWYgKHJldCkgeworCQlkZXZfbm90aWNlKGdzdy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHN3aXRjaCAlc1xuIiwKKwkJCSAgIHN3ZGV2LT5uYW1lKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwltdDc1M3hfYXBwbHlfY29uZmlnKHN3ZGV2KTsKKworCXJldHVybiAwOworfQorCit2b2lkIG10NzUzeF9zd2NvbmZpZ19kZXN0cm95KHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3cpCit7CisJdW5yZWdpc3Rlcl9zd2l0Y2goJmdzdy0+c3dkZXYpOworfQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvbXRrL210NzUzeC9tdDc1M3hfc3djb25maWcuaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L210ay9tdDc1M3gvbXQ3NTN4X3N3Y29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAwMDM2NAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L210ay9tdDc1M3gvbXQ3NTN4X3N3Y29uZmlnLmgKQEAgLTAsMCArMSwyOSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMjAxOCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IFdlaWppZSBHYW8gPHdlaWppZS5nYW9AbWVkaWF0ZWsuY29tPgorICovCisKKyNpZm5kZWYgX01UNzUzWF9TV0NPTkZJR19IXworI2RlZmluZSBfTVQ3NTNYX1NXQ09ORklHX0hfCisKKyNpZmRlZiBDT05GSUdfU1dDT05GSUcKKyNpbmNsdWRlIDxsaW51eC9zd2l0Y2guaD4KKyNpbmNsdWRlICJtdDc1M3guaCIKKworaW50IG10NzUzeF9zd2NvbmZpZ19pbml0KHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3cpOwordm9pZCBtdDc1M3hfc3djb25maWdfZGVzdHJveShzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBtdDc1M3hfc3djb25maWdfaW5pdChzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3KQoreworCW10NzUzeF9hcHBseV92bGFuX2NvbmZpZyhnc3cpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdDc1M3hfc3djb25maWdfZGVzdHJveShzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3KQoreworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfTVQ3NTNYX1NXQ09ORklHX0hfICovCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9tdGsvbXQ3NTN4L210NzUzeF92bGFuLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9tdGsvbXQ3NTN4L210NzUzeF92bGFuLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTY2NzA5NwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L210ay9tdDc1M3gvbXQ3NTN4X3ZsYW4uYwpAQCAtMCwwICsxLDE5MyBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTggTWVkaWFUZWsgSW5jLgorICovCisKKyNpbmNsdWRlICJtdDc1M3guaCIKKyNpbmNsdWRlICJtdDc1M3hfcmVncy5oIgorCitzdHJ1Y3QgbXQ3NTN4X21hcHBpbmcgbXQ3NTN4X2RlZl9tYXBwaW5nW10gPSB7CisJeworCQkubmFtZSA9ICJsbGxsdyIsCisJCS5wdmlkcyA9IHsgMSwgMSwgMSwgMSwgMiwgMiwgMSB9LAorCQkubWVtYmVycyA9IHsgMCwgMHg0ZiwgMHgzMCB9LAorCQkuZXRhZ3MgPSB7IDAsIDAsIDAgfSwKKwkJLnZpZHMgPSB7IDAsIDEsIDIgfSwKKwl9LCB7CisJCS5uYW1lID0gIndsbGxsIiwKKwkJLnB2aWRzID0geyAyLCAxLCAxLCAxLCAxLCAyLCAxIH0sCisJCS5tZW1iZXJzID0geyAwLCAweDVlLCAweDIxIH0sCisJCS5ldGFncyA9IHsgMCwgMCwgMCB9LAorCQkudmlkcyA9IHsgMCwgMSwgMiB9LAorCX0sIHsKKwkJLm5hbWUgPSAibHdsbGwiLAorCQkucHZpZHMgPSB7IDEsIDIsIDEsIDEsIDEsIDIsIDEgfSwKKwkJLm1lbWJlcnMgPSB7IDAsIDB4NWQsIDB4MjIgfSwKKwkJLmV0YWdzID0geyAwLCAwLCAwIH0sCisJCS52aWRzID0geyAwLCAxLCAyIH0sCisJfSwgeworCQkubmFtZSA9ICJsbGxsbCIsCisJCS5wdmlkcyA9IHsgMSwgMSwgMSwgMSwgMSwgMSwgMSB9LAorCQkubWVtYmVycyA9IHsgMCwgMHg3ZiB9LAorCQkuZXRhZ3MgPSB7IDAsIDAgfSwKKwkJLnZpZHMgPSB7IDAsIDEgfSwKKwl9LAorfTsKKwordm9pZCBtdDc1M3hfdmxhbl9jdHJsKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3csIHUzMiBjbWQsIHUzMiB2YWwpCit7CisJaW50IGk7CisKKwltdDc1M3hfcmVnX3dyaXRlKGdzdywgVlRDUiwKKwkJCSBWVENSX0JVU1kgfCAoKGNtZCA8PCBWVENSX0ZVTkNfUykgJiBWVENSX0ZVTkNfTSkgfAorCQkJICh2YWwgJiBWVENSX1ZJRF9NKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzAwOyBpKyspIHsKKwkJdTMyIHZhbCA9IG10NzUzeF9yZWdfcmVhZChnc3csIFZUQ1IpOworCisJCWlmICgodmFsICYgVlRDUl9CVVNZKSA9PSAwKQorCQkJYnJlYWs7CisKKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDExMDApOworCX0KKworCWlmIChpID09IDMwMCkKKwkJZGV2X2luZm8oZ3N3LT5kZXYsICJ2dGNyIHRpbWVvdXRcbiIpOworfQorCitzdGF0aWMgdm9pZCBtdDc1M3hfd3JpdGVfdmxhbl9lbnRyeShzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3LCBpbnQgdmxhbiwgdTE2IHZpZCwKKwkJCQkgICAgdTggcG9ydHMsIHU4IGV0YWdzKQoreworCWludCBwb3J0OworCXUzMiB2YWw7CisKKwkvKiB2bGFuIHBvcnQgbWVtYmVyc2hpcCAqLworCWlmIChwb3J0cykKKwkJbXQ3NTN4X3JlZ193cml0ZShnc3csIFZBV0QxLAorCQkJCSBJVkxfTUFDIHwgVlRBR19FTiB8IFZFTlRSWV9WQUxJRCB8CisJCQkJICgocG9ydHMgPDwgUE9SVF9NRU1fUykgJiBQT1JUX01FTV9NKSk7CisJZWxzZQorCQltdDc1M3hfcmVnX3dyaXRlKGdzdywgVkFXRDEsIDApOworCisJLyogZWdyZXNzIG1vZGUgKi8KKwl2YWwgPSAwOworCWZvciAocG9ydCA9IDA7IHBvcnQgPCBNVDc1M1hfTlVNX1BPUlRTOyBwb3J0KyspIHsKKwkJaWYgKGV0YWdzICYgQklUKHBvcnQpKQorCQkJdmFsIHw9IEVUQUdfQ1RSTF9UQUcgPDwgUE9SVF9FVEFHX1MocG9ydCk7CisJCWVsc2UKKwkJCXZhbCB8PSBFVEFHX0NUUkxfVU5UQUcgPDwgUE9SVF9FVEFHX1MocG9ydCk7CisJfQorCW10NzUzeF9yZWdfd3JpdGUoZ3N3LCBWQVdEMiwgdmFsKTsKKworCS8qIHdyaXRlIHRvIHZsYW4gdGFibGUgKi8KKwltdDc1M3hfdmxhbl9jdHJsKGdzdywgVlRDUl9XUklURV9WTEFOX0VOVFJZLCB2aWQpOworfQorCit2b2lkIG10NzUzeF9hcHBseV92bGFuX2NvbmZpZyhzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3KQoreworCWludCBpLCBqOworCXU4IHRhZ19wb3J0czsKKwl1OCB1bnRhZ19wb3J0czsKKworCS8qIHNldCBhbGwgcG9ydHMgYXMgc2VjdXJpdHkgbW9kZSAqLworCWZvciAoaSA9IDA7IGkgPCBNVDc1M1hfTlVNX1BPUlRTOyBpKyspCisJCW10NzUzeF9yZWdfd3JpdGUoZ3N3LCBQQ1IoaSksCisJCQkJIFBPUlRfTUFUUklYX00gfCBTRUNVUklUWV9NT0RFKTsKKworCS8qIGNoZWNrIGlmIGEgcG9ydCBpcyB1c2VkIGluIHRhZy91bnRhZyB2bGFuIGVncmVzcyBtb2RlICovCisJdGFnX3BvcnRzID0gMDsKKwl1bnRhZ19wb3J0cyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgTVQ3NTNYX05VTV9WTEFOUzsgaSsrKSB7CisJCXU4IG1lbWJlciA9IGdzdy0+dmxhbl9lbnRyaWVzW2ldLm1lbWJlcjsKKwkJdTggZXRhZ3MgPSBnc3ctPnZsYW5fZW50cmllc1tpXS5ldGFnczsKKworCQlpZiAoIW1lbWJlcikKKwkJCWNvbnRpbnVlOworCisJCWZvciAoaiA9IDA7IGogPCBNVDc1M1hfTlVNX1BPUlRTOyBqKyspIHsKKwkJCWlmICghKG1lbWJlciAmIEJJVChqKSkpCisJCQkJY29udGludWU7CisKKwkJCWlmIChldGFncyAmIEJJVChqKSkKKwkJCQl0YWdfcG9ydHMgfD0gMXUgPDwgajsKKwkJCWVsc2UKKwkJCQl1bnRhZ19wb3J0cyB8PSAxdSA8PCBqOworCQl9CisJfQorCisJLyogc2V0IGFsbCB1bnRhZy1vbmx5IHBvcnRzIGFzIHRyYW5zcGFyZW50IGFuZCB0aGUgcmVzdCBhcyB1c2VyIHBvcnQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTVQ3NTNYX05VTV9QT1JUUzsgaSsrKSB7CisJCXUzMiBwdmNfbW9kZSA9IDB4ODEwMCA8PCBTVEFHX1ZQSURfUzsKKworCQlpZiAodW50YWdfcG9ydHMgJiBCSVQoaSkgJiYgISh0YWdfcG9ydHMgJiBCSVQoaSkpKQorCQkJcHZjX21vZGUgPSAoMHg4MTAwIDw8IFNUQUdfVlBJRF9TKSB8CisJCQkJKFZBX1RSQU5TUEFSRU5UX1BPUlQgPDwgVkxBTl9BVFRSX1MpOworCisJCWlmICgoZ3N3LT5wb3J0NV9jZmcuc3RhZ19vbiAmJiBpID09IDUpIHx8CisJCSAgICAoZ3N3LT5wb3J0Nl9jZmcuc3RhZ19vbiAmJiBpID09IDYpKQorCQkJcHZjX21vZGUgPSAoMHg4MTAwIDw8IFNUQUdfVlBJRF9TKSB8IFBWQ19QT1JUX1NUQUc7CisKKwkJbXQ3NTN4X3JlZ193cml0ZShnc3csIFBWQyhpKSwgcHZjX21vZGUpOworCX0KKworCS8qIGZpcnN0IGNsZWFyIHRoZSBzd2l0Y2ggdmxhbiB0YWJsZSAqLworCWZvciAoaSA9IDA7IGkgPCBNVDc1M1hfTlVNX1ZMQU5TOyBpKyspCisJCW10NzUzeF93cml0ZV92bGFuX2VudHJ5KGdzdywgaSwgaSwgMCwgMCk7CisKKwkvKiBub3cgcHJvZ3JhbSBvbmx5IHZsYW5zIHdpdGggbWVtYmVycyB0byBhdm9pZAorCSAqIGNsb2JiZXJpbmcgcmVtYXBwZWQgZW50cmllcyBpbiBsYXRlciBpdGVyYXRpb25zCisJICovCisJZm9yIChpID0gMDsgaSA8IE1UNzUzWF9OVU1fVkxBTlM7IGkrKykgeworCQl1MTYgdmlkID0gZ3N3LT52bGFuX2VudHJpZXNbaV0udmlkOworCQl1OCBtZW1iZXIgPSBnc3ctPnZsYW5fZW50cmllc1tpXS5tZW1iZXI7CisJCXU4IGV0YWdzID0gZ3N3LT52bGFuX2VudHJpZXNbaV0uZXRhZ3M7CisKKwkJaWYgKG1lbWJlcikKKwkJCW10NzUzeF93cml0ZV92bGFuX2VudHJ5KGdzdywgaSwgdmlkLCBtZW1iZXIsIGV0YWdzKTsKKwl9CisKKwkvKiBQb3J0IERlZmF1bHQgUFZJRCAqLworCWZvciAoaSA9IDA7IGkgPCBNVDc1M1hfTlVNX1BPUlRTOyBpKyspIHsKKwkJaW50IHZsYW4gPSBnc3ctPnBvcnRfZW50cmllc1tpXS5wdmlkOworCQl1MTYgcHZpZCA9IDA7CisJCXUzMiB2YWw7CisKKwkJaWYgKHZsYW4gPCBNVDc1M1hfTlVNX1ZMQU5TICYmIGdzdy0+dmxhbl9lbnRyaWVzW3ZsYW5dLm1lbWJlcikKKwkJCXB2aWQgPSBnc3ctPnZsYW5fZW50cmllc1t2bGFuXS52aWQ7CisKKwkJdmFsID0gbXQ3NTN4X3JlZ19yZWFkKGdzdywgUFBCVjEoaSkpOworCQl2YWwgJj0gfkdSUF9QT1JUX1ZJRF9NOworCQl2YWwgfD0gcHZpZDsKKwkJbXQ3NTN4X3JlZ193cml0ZShnc3csIFBQQlYxKGkpLCB2YWwpOworCX0KK30KKworc3RydWN0IG10NzUzeF9tYXBwaW5nICptdDc1M3hfZmluZF9tYXBwaW5nKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJY29uc3QgY2hhciAqbWFwOworCWludCBpOworCisJaWYgKG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCAibWVkaWF0ZWsscG9ydG1hcCIsICZtYXApKQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG10NzUzeF9kZWZfbWFwcGluZyk7IGkrKykKKwkJaWYgKCFzdHJjbXAobWFwLCBtdDc1M3hfZGVmX21hcHBpbmdbaV0ubmFtZSkpCisJCQlyZXR1cm4gJm10NzUzeF9kZWZfbWFwcGluZ1tpXTsKKworCXJldHVybiBOVUxMOworfQorCit2b2lkIG10NzUzeF9hcHBseV9tYXBwaW5nKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3csIHN0cnVjdCBtdDc1M3hfbWFwcGluZyAqbWFwKQoreworCWludCBpID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBNVDc1M1hfTlVNX1BPUlRTOyBpKyspCisJCWdzdy0+cG9ydF9lbnRyaWVzW2ldLnB2aWQgPSBtYXAtPnB2aWRzW2ldOworCisJZm9yIChpID0gMDsgaSA8IE1UNzUzWF9OVU1fVkxBTlM7IGkrKykgeworCQlnc3ctPnZsYW5fZW50cmllc1tpXS5tZW1iZXIgPSBtYXAtPm1lbWJlcnNbaV07CisJCWdzdy0+dmxhbl9lbnRyaWVzW2ldLmV0YWdzID0gbWFwLT5ldGFnc1tpXTsKKwkJZ3N3LT52bGFuX2VudHJpZXNbaV0udmlkID0gbWFwLT52aWRzW2ldOworCX0KK30KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L210ay9tdDc1M3gvbXQ3NTN4X3ZsYW4uaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L210ay9tdDc1M3gvbXQ3NTN4X3ZsYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzI2YjhlCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvbXRrL210NzUzeC9tdDc1M3hfdmxhbi5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTggTWVkaWFUZWsgSW5jLgorICovCisKKyNpZm5kZWYgX01UNzUzWF9WTEFOX0hfCisjZGVmaW5lIF9NVDc1M1hfVkxBTl9IXworCisjZGVmaW5lIE1UNzUzWF9OVU1fUE9SVFMJNworI2RlZmluZSBNVDc1M1hfTlVNX1ZMQU5TCTQwOTUKKyNkZWZpbmUgTVQ3NTNYX01BWF9WSUQJCTQwOTUKKyNkZWZpbmUgTVQ3NTNYX01JTl9WSUQJCTAKKworc3RydWN0IGdzd19tdDc1M3g7CisKK3N0cnVjdCBtdDc1M3hfcG9ydF9lbnRyeSB7CisJdTE2CXB2aWQ7Cit9OworCitzdHJ1Y3QgbXQ3NTN4X3ZsYW5fZW50cnkgeworCXUxNgl2aWQ7CisJdTgJbWVtYmVyOworCXU4CWV0YWdzOworfTsKKworc3RydWN0IG10NzUzeF9tYXBwaW5nIHsKKwljaGFyCSpuYW1lOworCXUxNglwdmlkc1tNVDc1M1hfTlVNX1BPUlRTXTsKKwl1OAltZW1iZXJzW01UNzUzWF9OVU1fVkxBTlNdOworCXU4CWV0YWdzW01UNzUzWF9OVU1fVkxBTlNdOworCXUxNgl2aWRzW01UNzUzWF9OVU1fVkxBTlNdOworfTsKKworZXh0ZXJuIHN0cnVjdCBtdDc1M3hfbWFwcGluZyBtdDc1M3hfZGVmYXVsdHNbXTsKKwordm9pZCBtdDc1M3hfdmxhbl9jdHJsKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3csIHUzMiBjbWQsIHUzMiB2YWwpOwordm9pZCBtdDc1M3hfYXBwbHlfdmxhbl9jb25maWcoc3RydWN0IGdzd19tdDc1M3ggKmdzdyk7CitzdHJ1Y3QgbXQ3NTN4X21hcHBpbmcgKm10NzUzeF9maW5kX21hcHBpbmcoc3RydWN0IGRldmljZV9ub2RlICpucCk7Cit2b2lkIG10NzUzeF9hcHBseV9tYXBwaW5nKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3csIHN0cnVjdCBtdDc1M3hfbWFwcGluZyAqbWFwKTsKKyNlbmRpZiAvKiBfTVQ3NTNYX1ZMQU5fSF8gKi8KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9NYWtlZmlsZSBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjI4OTFlCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL01ha2VmaWxlCkBAIC0wLDAgKzEsNjYgQEAKK29iai0kKENPTkZJR19SVEw4MzY3U19HU1cpICs9IHJ0bDgzNjdzX2dzdy5vCitydGw4MzY3c19nc3ctb2JqcyA6PSBydGw4MzY3c19tZGlvLm8gcnRsODM2N3NfZGJnLm8KK2lmZXEgKCQoQ09ORklHX1NXQ09ORklHKSx5KQorcnRsODM2N3NfZ3N3LW9ianMgKz0gcnRsODM2N3MubworZW5kaWYKK3J0bDgzNjdzX2dzdy1vYmpzICs9IHJ0bDgzNjdjL2FjbC5vCitydGw4MzY3c19nc3ctb2JqcyArPSBydGw4MzY3Yy9jcHUubworcnRsODM2N3NfZ3N3LW9ianMgKz0gcnRsODM2N2MvZG90MXgubworcnRsODM2N3NfZ3N3LW9ianMgKz0gcnRsODM2N2MvZWVlLm8KK3J0bDgzNjdzX2dzdy1vYmpzICs9IHJ0bDgzNjdjL2lnbXAubworcnRsODM2N3NfZ3N3LW9ianMgKz0gcnRsODM2N2MvaW50ZXJydXB0Lm8KK3J0bDgzNjdzX2dzdy1vYmpzICs9IHJ0bDgzNjdjL2wyLm8KK3J0bDgzNjdzX2dzdy1vYmpzICs9IHJ0bDgzNjdjL2xlYWt5Lm8KK3J0bDgzNjdzX2dzdy1vYmpzICs9IHJ0bDgzNjdjL2xlZC5vCitydGw4MzY3c19nc3ctb2JqcyArPSBydGw4MzY3Yy9taXJyb3IubworcnRsODM2N3NfZ3N3LW9ianMgKz0gcnRsODM2N2Mvb2FtLm8KK3J0bDgzNjdzX2dzdy1vYmpzICs9IHJ0bDgzNjdjL3BvcnQubworcnRsODM2N3NfZ3N3LW9ianMgKz0gcnRsODM2N2MvcHRwLm8KK3J0bDgzNjdzX2dzdy1vYmpzICs9IHJ0bDgzNjdjL3Fvcy5vCitydGw4MzY3c19nc3ctb2JqcyArPSBydGw4MzY3Yy9yYXRlLm8KK3J0bDgzNjdzX2dzdy1vYmpzICs9IHJ0bDgzNjdjL3JsZHAubworcnRsODM2N3NfZ3N3LW9ianMgKz0gcnRsODM2N2MvcnRrX3N3aXRjaC5vCitydGw4MzY3c19nc3ctb2JqcyArPSBydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X2FjbC5vCitydGw4MzY3c19nc3ctb2JqcyArPSBydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2Lm8KK3J0bDgzNjdzX2dzdy1vYmpzICs9IHJ0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfY3B1dGFnLm8KK3J0bDgzNjdzX2dzdy1vYmpzICs9IHJ0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfZG90MXgubworcnRsODM2N3NfZ3N3LW9ianMgKz0gcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9lYXYubworcnRsODM2N3NfZ3N3LW9ianMgKz0gcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9lZWUubworcnRsODM2N3NfZ3N3LW9ianMgKz0gcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9mYy5vCitydGw4MzY3c19nc3ctb2JqcyArPSBydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X2dyZWVuLm8KK3J0bDgzNjdzX2dzdy1vYmpzICs9IHJ0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfaHNiLm8KK3J0bDgzNjdzX2dzdy1vYmpzICs9IHJ0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfaWdtcC5vCitydGw4MzY3c19nc3ctb2JqcyArPSBydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X2luYndjdHJsLm8KK3J0bDgzNjdzX2dzdy1vYmpzICs9IHJ0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfaW50ZXJydXB0Lm8KK3J0bDgzNjdzX2dzdy1vYmpzICs9IHJ0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfbGVkLm8KK3J0bDgzNjdzX2dzdy1vYmpzICs9IHJ0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfbHV0Lm8KK3J0bDgzNjdzX2dzdy1vYmpzICs9IHJ0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfbWV0ZXIubworcnRsODM2N3NfZ3N3LW9ianMgKz0gcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9taWIubworcnRsODM2N3NfZ3N3LW9ianMgKz0gcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9taXJyb3IubworcnRsODM2N3NfZ3N3LW9ianMgKz0gcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9taXNjLm8KK3J0bDgzNjdzX2dzdy1vYmpzICs9IHJ0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfb2FtLm8KK3J0bDgzNjdzX2dzdy1vYmpzICs9IHJ0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfcGh5Lm8KK3J0bDgzNjdzX2dzdy1vYmpzICs9IHJ0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfcG9ydC5vCitydGw4MzY3c19nc3ctb2JqcyArPSBydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X3BvcnRJc29sYXRpb24ubworcnRsODM2N3NfZ3N3LW9ianMgKz0gcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9xb3MubworcnRsODM2N3NfZ3N3LW9ianMgKz0gcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9ybGRwLm8KK3J0bDgzNjdzX2dzdy1vYmpzICs9IHJ0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfcm1hLm8KK3J0bDgzNjdzX2dzdy1vYmpzICs9IHJ0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfc2NoZWR1bGluZy5vCitydGw4MzY3c19nc3ctb2JqcyArPSBydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X3N0b3JtLm8KK3J0bDgzNjdzX2dzdy1vYmpzICs9IHJ0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfc3ZsYW4ubworcnRsODM2N3NfZ3N3LW9ianMgKz0gcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl90cnVua2luZy5vCitydGw4MzY3c19nc3ctb2JqcyArPSBydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X3Vua25vd25NdWx0aWNhc3QubworcnRsODM2N3NfZ3N3LW9ianMgKz0gcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl92bGFuLm8KK3J0bDgzNjdzX2dzdy1vYmpzICs9IHJ0bDgzNjdjL3NtaS5vCitydGw4MzY3c19nc3ctb2JqcyArPSBydGw4MzY3Yy9zdGF0Lm8KK3J0bDgzNjdzX2dzdy1vYmpzICs9IHJ0bDgzNjdjL3N0b3JtLm8KK3J0bDgzNjdzX2dzdy1vYmpzICs9IHJ0bDgzNjdjL3N2bGFuLm8KK3J0bDgzNjdzX2dzdy1vYmpzICs9IHJ0bDgzNjdjL3RyYXAubworcnRsODM2N3NfZ3N3LW9ianMgKz0gcnRsODM2N2MvdHJ1bmsubworcnRsODM2N3NfZ3N3LW9ianMgKz0gcnRsODM2N2Mvdmxhbi5vCisKK2NjZmxhZ3MteSArPSAtV2Vycm9yIC1EX0xJVFRMRV9FTkRJQU4gLURNRENfTURJT19PUEVSQVRJT04KKworY2NmbGFncy15ICs9IC1JZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlCitjY2ZsYWdzLXkgKz0gLUlpbmNsdWRlL2xpbnV4LworCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvbW9kdWxlcy5idWlsdGluIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL21vZHVsZXMuYnVpbHRpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjFhNzBhCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL21vZHVsZXMuYnVpbHRpbgpAQCAtMCwwICsxIEBACitrZXJuZWwvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3c19nc3cua28KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9hY2wuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9hY2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWU1YTVlCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2FjbC5jCkBAIC0wLDAgKzEsMjA2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiAkUmV2aXNpb246IDc2MzA2ICQKKyAqICREYXRlOiAyMDE3LTAzLTA4IDE1OjEzOjU4ICswODAwICjpgLHkuIksIDA4IOS4ieaciCAyMDE3KSAkCisgKgorICogUHVycG9zZSA6IFJUSyBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkgZm9yIFJUTDgzNjcvUlRMODM2N0MKKyAqIEZlYXR1cmUgOiBIZXJlIGlzIGEgbGlzdCBvZiBhbGwgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgaW4gQUNMIG1vZHVsZS4KKyAqCisgKi8KKworI2luY2x1ZGUgPHJ0a19zd2l0Y2guaD4KKyNpbmNsdWRlIDxydGtfZXJyb3IuaD4KKyNpbmNsdWRlIDxhY2wuaD4KKyNpbmNsdWRlIDx2bGFuLmg+CisjaW5jbHVkZSA8c3ZsYW4uaD4KKyNpbmNsdWRlIDxyYXRlLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2Lmg+CisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl9hY2wuaD4KKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2X2hzYi5oPgorI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnZfdmxhbi5oPgorI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnZfc3ZsYW4uaD4KKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2X2NwdXRhZy5oPgorI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnZfbWliLmg+CisKK0NPTlNUX1QgcnRrX3VpbnQ4IGZpbHRlcl90ZW1wbGF0ZUZpZWxkW1JUTDgzNjdDX0FDTFRFTVBMQVRFTk9dW1JUTDgzNjdDX0FDTFJVTEVGSUVMRE5PXSA9IHsKKyAgICB7QUNMX0RNQUMwLCAgICAgICAgICAgICBBQ0xfRE1BQzEsICAgICAgICAgIEFDTF9ETUFDMiwgICAgICAgICAgQUNMX1NNQUMwLCAgICAgICAgICBBQ0xfU01BQzEsICAgICAgICAgIEFDTF9TTUFDMiwgICAgICAgICAgQUNMX0VUSEVSVFlQRSwgICAgICBBQ0xfRklFTERfU0VMRUNUMTV9LAorICAgIHtBQ0xfSVA0U0lQMCwgICAgICAgICAgIEFDTF9JUDRTSVAxLCAgICAgICAgQUNMX0lQNERJUDAsICAgICAgICBBQ0xfSVA0RElQMSwgICAgICAgIEFDTF9GSUVMRF9TRUxFQ1QxMywgQUNMX0ZJRUxEX1NFTEVDVDE0LCBBQ0xfRklFTERfU0VMRUNUMDIsIEFDTF9GSUVMRF9TRUxFQ1QxNX0sCisgICAge0FDTF9JUDZTSVAwV0lUSElQVjQsICAgQUNMX0lQNlNJUDFXSVRISVBWNCxBQ0xfRklFTERfU0VMRUNUMDMsIEFDTF9GSUVMRF9TRUxFQ1QwNCwgQUNMX0ZJRUxEX1NFTEVDVDA1LCBBQ0xfRklFTERfU0VMRUNUMDYsIEFDTF9GSUVMRF9TRUxFQ1QwNywgQUNMX0ZJRUxEX1NFTEVDVDA4fSwKKyAgICB7QUNMX0lQNkRJUDBXSVRISVBWNCwgICBBQ0xfSVA2RElQMVdJVEhJUFY0LEFDTF9GSUVMRF9TRUxFQ1QwOSwgQUNMX0ZJRUxEX1NFTEVDVDEwLCBBQ0xfRklFTERfU0VMRUNUMTEsIEFDTF9GSUVMRF9TRUxFQ1QxMiwgQUNMX0ZJRUxEX1NFTEVDVDEzLCBBQ0xfRklFTERfU0VMRUNUMTR9LAorICAgIHtBQ0xfVklEUkFOR0UsICAgICAgICAgIEFDTF9JUFJBTkdFLCAgICAgICAgQUNMX1BPUlRSQU5HRSwgICAgICBBQ0xfQ1RBRywgICAgICAgICAgIEFDTF9TVEFHLCAgICAgICAgICAgQUNMX0ZJRUxEX1NFTEVDVDEzLCBBQ0xfRklFTERfU0VMRUNUMTQsIEFDTF9GSUVMRF9TRUxFQ1QxNX0KK307CisKK0NPTlNUX1QgcnRrX3VpbnQ4IGZpbHRlcl9hZHZhbmNlQ2FyZXRhZ0ZpZWxkW1JUTDgzNjdDX0FDTFRFTVBMQVRFTk9dWzJdID0geworICAgIHtUUlVFLCAgICAgIDd9LAorICAgIHtUUlVFLCAgICAgIDd9LAorICAgIHtGQUxTRSwgICAgIDB9LAorICAgIHtGQUxTRSwgICAgIDB9LAorICAgIHtUUlVFLCAgICAgIDd9LAorfTsKKworCitDT05TVF9UIHJ0a191aW50OCBmaWx0ZXJfZmllbGRUZW1wbGF0ZUluZGV4W0ZJTFRFUl9GSUVMRF9FTkRdW1JUS19GSUxURVJfRklFTERfVVNFRF9NQVhdID0geworICAgIHsweDAwLCAweDAxLDB4MDJ9LAorICAgIHsweDAzLCAweDA0LDB4MDV9LAorICAgIHsweDA2fSwKKyAgICB7MHg0M30sCisgICAgezB4NDR9LAorICAgIHsweDEwLCAweDExfSwKKyAgICB7MHgxMiwgMHgxM30sCisgICAgezB4MjR9LAorICAgIHsweDI1fSwKKyAgICB7MHgzNX0sCisgICAgezB4MzV9LAorICAgIHsweDIwLCAweDIxLDB4MjIsMHgyM30sCisgICAgezB4MzAsIDB4MzEsMHgzMiwweDMzfSwKKyAgICB7MHgyNn0sCisgICAgezB4Mjd9LAorICAgIHsweDE0fSwKKyAgICB7MHgxNX0sCisgICAgezB4MTZ9LAorICAgIHsweDE0fSwKKyAgICB7MHgxNX0sCisgICAgezB4MTR9LAorICAgIHsweDE0fSwKKyAgICB7MHgxNH0sCisKKyAgICB7MHg0MH0sCisgICAgezB4NDF9LAorICAgIHsweDQyfSwKKworICAgIHsweDE0fSwKKyAgICB7MHgxNX0sCisgICAgezB4MTZ9LAorICAgIHsweDIyfSwKKyAgICB7MHgyM30sCisgICAgezB4MjR9LAorICAgIHsweDI1fSwKKyAgICB7MHgyNn0sCisgICAgezB4Mjd9LAorICAgIHsweDMyfSwKKyAgICB7MHgzM30sCisgICAgezB4MzR9LAorICAgIHsweDM1fSwKKyAgICB7MHgzNn0sCisgICAgezB4Mzd9LAorICAgIHsweDQ3fSwKKworICAgIHsweEZGfSAvKiBQYXR0ZXJuIE1hdGNoICovCit9OworCitDT05TVF9UIHJ0a191aW50OCBmaWx0ZXJfZmllbGRTaXplW0ZJTFRFUl9GSUVMRF9FTkRdID0geworICAgIDMsIDMsIDEsIDEsIDEsCisgICAgMiwgMiwgMSwgMSwgMSwgMSwgNCwgNCwgMSwgMSwKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLAorICAgIDEsIDEsIDEsCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwKKyAgICA4Cit9OworCitDT05TVF9UIHJ0a191aW50MTYgZmllbGRfc2VsZWN0b3JbUlRMODM2N0NfRklFTERTRUxfRk9STUFUX05VTUJFUl1bMl0gPQoreworICAgIHtGSUVMRFNFTF9GT1JNQVRfREVGQVVMVCwgMH0sICAgIC8qIEZpZWxkIFNlbGVjdG9yIDAgKi8KKyAgICB7RklFTERTRUxfRk9STUFUX0RFRkFVTFQsIDB9LCAgICAvKiBGaWVsZCBTZWxlY3RvciAxICovCisgICAge0ZJRUxEU0VMX0ZPUk1BVF9JUFBBWUxPQUQsIDEyfSwgLyogRmllbGQgU2VsZWN0b3IgMiAqLworICAgIHtGSUVMRFNFTF9GT1JNQVRfSVBWNiwgMTB9LCAgICAgIC8qIEZpZWxkIFNlbGVjdG9yIDMgKi8KKyAgICB7RklFTERTRUxfRk9STUFUX0lQVjYsIDh9LCAgICAgICAvKiBGaWVsZCBTZWxlY3RvciA0ICovCisgICAge0ZJRUxEU0VMX0ZPUk1BVF9JUFY0LCAwfSwgICAgICAgLyogRmllbGQgU2VsZWN0b3IgNSAqLworICAgIHtGSUVMRFNFTF9GT1JNQVRfSVBWNCwgOH0sICAgICAgIC8qIEZpZWxkIFNlbGVjdG9yIDYgKi8KKyAgICB7RklFTERTRUxfRk9STUFUX0lQVjYsIDB9LCAgICAgICAvKiBGaWVsZCBTZWxlY3RvciA3ICovCisgICAge0ZJRUxEU0VMX0ZPUk1BVF9JUFY2LCA2fSwgICAgICAgLyogRmllbGQgU2VsZWN0b3IgOCAqLworICAgIHtGSUVMRFNFTF9GT1JNQVRfSVBWNiwgMjZ9LCAgICAgIC8qIEZpZWxkIFNlbGVjdG9yIDkgKi8KKyAgICB7RklFTERTRUxfRk9STUFUX0lQVjYsIDI0fSwgICAgICAvKiBGaWVsZCBTZWxlY3RvciAxMCAqLworICAgIHtGSUVMRFNFTF9GT1JNQVRfREVGQVVMVCwgMH0sICAgIC8qIEZpZWxkIFNlbGVjdG9yIDExICovCisgICAge0ZJRUxEU0VMX0ZPUk1BVF9JUFY0LCA2fSwgICAgICAgLyogRmllbGQgU2VsZWN0b3IgMTIgKi8KKyAgICB7RklFTERTRUxfRk9STUFUX0lQUEFZTE9BRCwgMH0sICAvKiBGaWVsZCBTZWxlY3RvciAxMyAqLworICAgIHtGSUVMRFNFTF9GT1JNQVRfSVBQQVlMT0FELCAyfSwgIC8qIEZpZWxkIFNlbGVjdG9yIDE0ICovCisgICAge0ZJRUxEU0VMX0ZPUk1BVF9ERUZBVUxULCAwfSAgICAgLyogRmllbGQgU2VsZWN0b3IgMTUgKi8KK307CisKKworc3RhdGljIHJ0a19hcGlfcmV0X3QgX3J0a19maWx0ZXJfaWdyQWNsX3dyaXRlRGF0YUZpZWxkKHJ0bDgzNjdjX2FjbHJ1bGUgKmFjbFJ1bGUsIHJ0a19maWx0ZXJfZmllbGRfdCAqZmllbGRQdHIpOworCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19maWx0ZXJfaWdyQWNsX2luaXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBBQ0wgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24KKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAtIFBvaW50ZXIgcEZpbHRlcl9maWVsZCBvciBwRmlsdGVyX2NmZyBwb2ludCB0byBOVUxMLgorICogTm90ZToKKyAqICAgICAgVGhpcyBmdW5jdGlvbiBlbmFibGUgYW5kIGludGlhbGl6ZSBBQ0wgZnVuY3Rpb24KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfZmlsdGVyX2lnckFjbF9pbml0KHZvaWQpCit7CisgICAgcnRsODM2N2NfYWNsdGVtcGxhdGVfdCAgICAgICBhY2xUZW1wOworICAgIHJ0a191aW50MzIgICAgICAgICAgICAgICAgIGksIGo7CisgICAgcnRrX2FwaV9yZXRfdCAgICAgICAgICByZXQ7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKChyZXQgPSBydGtfZmlsdGVyX2lnckFjbF9jZmdfZGVsQWxsKCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIGZvcihpID0gMDsgaSA8IFJUTDgzNjdDX0FDTFRFTVBMQVRFTk87IGkrKykKKyAgICB7CisgICAgICAgIGZvcihqID0gMDsgaiA8IFJUTDgzNjdDX0FDTFJVTEVGSUVMRE5PO2orKykKKyAgICAgICAgICAgIGFjbFRlbXAuZmllbGRbal0gPSBmaWx0ZXJfdGVtcGxhdGVGaWVsZFtpXVtqXTsKKworICAgICAgICBpZiAoKHJldCA9IHJ0bDgzNjdjX3NldEFzaWNBY2xUZW1wbGF0ZShpLCAmYWNsVGVtcCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgZm9yKGkgPSAwOyBpIDwgUlRMODM2N0NfRklFTERTRUxfRk9STUFUX05VTUJFUjsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKChyZXQgPSBydGw4MzY3Y19zZXRBc2ljRmllbGRTZWxlY3RvcihpLCBmaWVsZF9zZWxlY3RvcltpXVswXSwgZmllbGRfc2VsZWN0b3JbaV1bMV0pKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIFJUS19TQ0FOX0FMTF9QSFlfUE9SVE1BU0soaSkKKyAgICB7CisgICAgICAgIGlmICgocmV0ID0gcnRsODM2N2Nfc2V0QXNpY0FjbChpLCBUUlVFKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKworICAgICAgICBpZiAoKHJldCA9IHJ0bDgzNjdjX3NldEFzaWNBY2xVbm1hdGNoZWRQZXJtaXQoaSwgVFJVRSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2ZpbHRlcl9pZ3JBY2xfZmllbGRfYWRkCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQWRkIGNvbXBhcmlzb24gcnVsZSB0byBhbiBBQ0wgY29uZmlndXJhdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHBGaWx0ZXJfY2ZnICAgICAtIFRoZSBBQ0wgY29uZmlndXJhdGlvbiB0aGF0IHRoaXMgZnVuY3Rpb24gd2lsbCBhZGQgY29tcGFyaXNvbiBydWxlCisgKiAgICAgIHBGaWx0ZXJfZmllbGQgICAtIFRoZSBjb21wYXJpc29uIHJ1bGUgdGhhdCB3aWxsIGJlIGFkZGVkLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgICAgIC0gUG9pbnRlciBwRmlsdGVyX2ZpZWxkIG9yIHBGaWx0ZXJfY2ZnIHBvaW50IHRvIE5VTEwuCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhpcyBmdW5jdGlvbiBhZGQgYSBjb21wYXJpc29uIHJ1bGUgKCpwRmlsdGVyX2ZpZWxkKSB0byBhbiBBQ0wgY29uZmlndXJhdGlvbiAoKnBGaWx0ZXJfY2ZnKS4KKyAqICAgICAgUG9pbnRlciBwRmlsdGVyX2NmZyBwb2ludHMgdG8gYW4gQUNMIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLCB0aGlzIHN0cnVjdHVyZSBrZWVwcyBtdWx0aXBsZSBBQ0wKKyAqICAgICAgY29tcGFyaXNvbiBydWxlcyBieSBtZWFucyBvZiBsaW5rZWQgbGlzdC4gUG9pbnRlciBwRmlsdGVyX2ZpZWxkIHdpbGwgYmUgYWRkZWQgdG8gbGlua2VkCisgKiAgICAgIGxpc3Qga2VlcGVkIGJ5IHN0cnVjdHVyZSB0aGF0IHBGaWx0ZXJfY2ZnIHBvaW50cyB0by4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfZmlsdGVyX2lnckFjbF9maWVsZF9hZGQocnRrX2ZpbHRlcl9jZmdfdCogcEZpbHRlcl9jZmcsIHJ0a19maWx0ZXJfZmllbGRfdCogcEZpbHRlcl9maWVsZCkKK3sKKyAgICBydGtfdWludDMyIGk7CisgICAgcnRrX2ZpbHRlcl9maWVsZF90ICp0YWlsUHRyOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKE5VTEwgPT0gcEZpbHRlcl9jZmcgfHwgTlVMTCA9PSBwRmlsdGVyX2ZpZWxkKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmKHBGaWx0ZXJfZmllbGQtPmZpZWxkVHlwZSA+PSBGSUxURVJfRklFTERfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0VOVFJZX0lOREVYOworCisKKyAgICBpZigwID09IHBGaWx0ZXJfZmllbGQtPmZpZWxkVGVtcGxhdGVObykKKyAgICB7CisgICAgICAgIHBGaWx0ZXJfZmllbGQtPmZpZWxkVGVtcGxhdGVObyA9IGZpbHRlcl9maWVsZFNpemVbcEZpbHRlcl9maWVsZC0+ZmllbGRUeXBlXTsKKworICAgICAgICBmb3IoaSA9IDA7IGkgPCBwRmlsdGVyX2ZpZWxkLT5maWVsZFRlbXBsYXRlTm87IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgcEZpbHRlcl9maWVsZC0+ZmllbGRUZW1wbGF0ZUlkeFtpXSA9IGZpbHRlcl9maWVsZFRlbXBsYXRlSW5kZXhbcEZpbHRlcl9maWVsZC0+ZmllbGRUeXBlXVtpXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKE5VTEwgPT0gcEZpbHRlcl9jZmctPmZpZWxkSGVhZCkKKyAgICB7CisgICAgICAgIHBGaWx0ZXJfY2ZnLT5maWVsZEhlYWQgPSBwRmlsdGVyX2ZpZWxkOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAocEZpbHRlcl9jZmctPmZpZWxkSGVhZC0+bmV4dCA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBwRmlsdGVyX2NmZy0+ZmllbGRIZWFkLT5uZXh0ID0gcEZpbHRlcl9maWVsZDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhaWxQdHIgPSBwRmlsdGVyX2NmZy0+ZmllbGRIZWFkLT5uZXh0OworICAgICAgICAgICAgd2hpbGUoIHRhaWxQdHItPm5leHQgIT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0YWlsUHRyID0gdGFpbFB0ci0+bmV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRhaWxQdHItPm5leHQgPSBwRmlsdGVyX2ZpZWxkOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworc3RhdGljIHJ0a19hcGlfcmV0X3QgX3J0a19maWx0ZXJfaWdyQWNsX3dyaXRlRGF0YUZpZWxkKHJ0bDgzNjdjX2FjbHJ1bGUgKmFjbFJ1bGUsIHJ0a19maWx0ZXJfZmllbGRfdCAqZmllbGRQdHIpCit7CisgICAgcnRrX3VpbnQzMiBpLCB0ZW1wSWR4LGZpZWxkSWR4LCBpcFZhbHVlLCBpcE1hc2s7CisgICAgcnRrX3VpbnQzMiBpcDZhZGRyW1JUS19JUFY2X0FERFJfV09SRF9MRU5HVEhdOworICAgIHJ0a191aW50MzIgaXA2bWFza1tSVEtfSVBWNl9BRERSX1dPUkRfTEVOR1RIXTsKKworICAgIGZvcihpID0gMDsgaSA8IGZpZWxkUHRyLT5maWVsZFRlbXBsYXRlTm87IGkrKykKKyAgICB7CisgICAgICAgIHRlbXBJZHggPSAoZmllbGRQdHItPmZpZWxkVGVtcGxhdGVJZHhbaV0gJiAweEYwKSA+PiA0OworCisgICAgICAgIGFjbFJ1bGVbdGVtcElkeF0udmFsaWQgPSBUUlVFOworICAgIH0KKworICAgIHN3aXRjaCAoZmllbGRQdHItPmZpZWxkVHlwZSkKKyAgICB7CisgICAgLyogdXNlIERNQUMgc3RydWN0dXJlIGFzIHJlcHJlc2VudGF0aXZlIGZvciBtYWMgc3RydWN0dXJlICovCisgICAgY2FzZSBGSUxURVJfRklFTERfRE1BQzoKKyAgICBjYXNlIEZJTFRFUl9GSUVMRF9TTUFDOgorCisgICAgICAgIGZvcihpID0gMDsgaSA8IGZpZWxkUHRyLT5maWVsZFRlbXBsYXRlTm87IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGVtcElkeCA9IChmaWVsZFB0ci0+ZmllbGRUZW1wbGF0ZUlkeFtpXSAmIDB4RjApID4+IDQ7CisgICAgICAgICAgICBmaWVsZElkeCA9IGZpZWxkUHRyLT5maWVsZFRlbXBsYXRlSWR4W2ldICYgMHgwRjsKKworICAgICAgICAgICAgYWNsUnVsZVt0ZW1wSWR4XS5kYXRhX2JpdHMuZmllbGRbZmllbGRJZHhdID0gZmllbGRQdHItPmZpbHRlcl9wYXR0ZXJuX3VuaW9uLm1hYy52YWx1ZS5vY3RldFs1IC0gaSoyXSB8IChmaWVsZFB0ci0+ZmlsdGVyX3BhdHRlcm5fdW5pb24ubWFjLnZhbHVlLm9jdGV0WzUgLSAoaSoyICsgMSldIDw8IDgpOworICAgICAgICAgICAgYWNsUnVsZVt0ZW1wSWR4XS5jYXJlX2JpdHMuZmllbGRbZmllbGRJZHhdID0gZmllbGRQdHItPmZpbHRlcl9wYXR0ZXJuX3VuaW9uLm1hYy5tYXNrLm9jdGV0WzUgLSBpKjJdIHwgKGZpZWxkUHRyLT5maWx0ZXJfcGF0dGVybl91bmlvbi5tYWMubWFzay5vY3RldFs1IC0gKGkqMiArIDEpXSA8PCA4KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEZJTFRFUl9GSUVMRF9FVEhFUlRZUEU6CisgICAgICAgIGZvcihpID0gMDsgaSA8IGZpZWxkUHRyLT5maWVsZFRlbXBsYXRlTm87IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGVtcElkeCA9IChmaWVsZFB0ci0+ZmllbGRUZW1wbGF0ZUlkeFtpXSAmIDB4RjApID4+IDQ7CisgICAgICAgICAgICBmaWVsZElkeCA9IGZpZWxkUHRyLT5maWVsZFRlbXBsYXRlSWR4W2ldICYgMHgwRjsKKworICAgICAgICAgICAgYWNsUnVsZVt0ZW1wSWR4XS5kYXRhX2JpdHMuZmllbGRbZmllbGRJZHhdID0gZmllbGRQdHItPmZpbHRlcl9wYXR0ZXJuX3VuaW9uLmV0aGVyVHlwZS52YWx1ZTsKKyAgICAgICAgICAgIGFjbFJ1bGVbdGVtcElkeF0uY2FyZV9iaXRzLmZpZWxkW2ZpZWxkSWR4XSA9IGZpZWxkUHRyLT5maWx0ZXJfcGF0dGVybl91bmlvbi5ldGhlclR5cGUubWFzazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEZJTFRFUl9GSUVMRF9JUFY0X1NJUDoKKyAgICBjYXNlIEZJTFRFUl9GSUVMRF9JUFY0X0RJUDoKKworICAgICAgICBpcFZhbHVlID0gZmllbGRQdHItPmZpbHRlcl9wYXR0ZXJuX3VuaW9uLnNpcC52YWx1ZTsKKyAgICAgICAgaXBNYXNrID0gZmllbGRQdHItPmZpbHRlcl9wYXR0ZXJuX3VuaW9uLnNpcC5tYXNrOworCisgICAgICAgIGZvcihpID0gMDsgaSA8IGZpZWxkUHRyLT5maWVsZFRlbXBsYXRlTm87IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGVtcElkeCA9IChmaWVsZFB0ci0+ZmllbGRUZW1wbGF0ZUlkeFtpXSAmIDB4RjApID4+IDQ7CisgICAgICAgICAgICBmaWVsZElkeCA9IGZpZWxkUHRyLT5maWVsZFRlbXBsYXRlSWR4W2ldICYgMHgwRjsKKworICAgICAgICAgICAgYWNsUnVsZVt0ZW1wSWR4XS5kYXRhX2JpdHMuZmllbGRbZmllbGRJZHhdID0gKDB4RkZGRiAmIChpcFZhbHVlID4+IChpKjE2KSkpOworICAgICAgICAgICAgYWNsUnVsZVt0ZW1wSWR4XS5jYXJlX2JpdHMuZmllbGRbZmllbGRJZHhdID0gKDB4RkZGRiAmIChpcE1hc2sgPj4gKGkqMTYpKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGSUxURVJfRklFTERfSVBWNF9UT1M6CisgICAgICAgIGZvcihpID0gMDsgaSA8IGZpZWxkUHRyLT5maWVsZFRlbXBsYXRlTm87IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGVtcElkeCA9IChmaWVsZFB0ci0+ZmllbGRUZW1wbGF0ZUlkeFtpXSAmIDB4RjApID4+IDQ7CisgICAgICAgICAgICBmaWVsZElkeCA9IGZpZWxkUHRyLT5maWVsZFRlbXBsYXRlSWR4W2ldICYgMHgwRjsKKworICAgICAgICAgICAgYWNsUnVsZVt0ZW1wSWR4XS5kYXRhX2JpdHMuZmllbGRbZmllbGRJZHhdID0gZmllbGRQdHItPmZpbHRlcl9wYXR0ZXJuX3VuaW9uLmlwVG9zLnZhbHVlICYgMHhGRjsKKyAgICAgICAgICAgIGFjbFJ1bGVbdGVtcElkeF0uY2FyZV9iaXRzLmZpZWxkW2ZpZWxkSWR4XSA9IGZpZWxkUHRyLT5maWx0ZXJfcGF0dGVybl91bmlvbi5pcFRvcy5tYXNrICAmIDB4RkY7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGSUxURVJfRklFTERfSVBWNF9QUk9UT0NPTDoKKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgZmllbGRQdHItPmZpZWxkVGVtcGxhdGVObzsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0ZW1wSWR4ID0gKGZpZWxkUHRyLT5maWVsZFRlbXBsYXRlSWR4W2ldICYgMHhGMCkgPj4gNDsKKyAgICAgICAgICAgIGZpZWxkSWR4ID0gZmllbGRQdHItPmZpZWxkVGVtcGxhdGVJZHhbaV0gJiAweDBGOworCisgICAgICAgICAgICBhY2xSdWxlW3RlbXBJZHhdLmRhdGFfYml0cy5maWVsZFtmaWVsZElkeF0gPSBmaWVsZFB0ci0+ZmlsdGVyX3BhdHRlcm5fdW5pb24ucHJvdG9jb2wudmFsdWUgJiAweEZGOworICAgICAgICAgICAgYWNsUnVsZVt0ZW1wSWR4XS5jYXJlX2JpdHMuZmllbGRbZmllbGRJZHhdID0gZmllbGRQdHItPmZpbHRlcl9wYXR0ZXJuX3VuaW9uLnByb3RvY29sLm1hc2sgICYgMHhGRjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEZJTFRFUl9GSUVMRF9JUFY2X1NJUFY2OgorICAgIGNhc2UgRklMVEVSX0ZJRUxEX0lQVjZfRElQVjY6CisgICAgICAgIGZvcihpID0gMDsgaSA8IFJUS19JUFY2X0FERFJfV09SRF9MRU5HVEg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaXA2YWRkcltpXSA9IGZpZWxkUHRyLT5maWx0ZXJfcGF0dGVybl91bmlvbi5zaXB2Ni52YWx1ZS5hZGRyW2ldOworICAgICAgICAgICAgaXA2bWFza1tpXSA9IGZpZWxkUHRyLT5maWx0ZXJfcGF0dGVybl91bmlvbi5zaXB2Ni5tYXNrLmFkZHJbaV07CisgICAgICAgIH0KKworICAgICAgICBmb3IoaSA9IDA7IGkgPCBmaWVsZFB0ci0+ZmllbGRUZW1wbGF0ZU5vOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlbXBJZHggPSAoZmllbGRQdHItPmZpZWxkVGVtcGxhdGVJZHhbaV0gJiAweEYwKSA+PiA0OworICAgICAgICAgICAgZmllbGRJZHggPSBmaWVsZFB0ci0+ZmllbGRUZW1wbGF0ZUlkeFtpXSAmIDB4MEY7CisKKyAgICAgICAgICAgIGlmKGkgPCAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFjbFJ1bGVbdGVtcElkeF0uZGF0YV9iaXRzLmZpZWxkW2ZpZWxkSWR4XSA9ICgoaXA2YWRkclswXSAmICgweEZGRkYgPDwgKGkgKiAxNikpKSA+PiAoaSAqIDE2KSk7CisgICAgICAgICAgICAgICAgYWNsUnVsZVt0ZW1wSWR4XS5jYXJlX2JpdHMuZmllbGRbZmllbGRJZHhdID0gKChpcDZtYXNrWzBdICYgKDB4RkZGRiA8PCAoaSAqIDE2KSkpID4+IChpICogMTYpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKmRlZmF1bHQgYWNsIHRlbXBsYXRlIGZvciBpcHY2IGFkZHJlc3Mgc3VwcG9ydHMgTVNCIDMyLWJpdHMgYW5kIExTQiAzMi1iaXRzIG9ubHkqLworICAgICAgICAgICAgICAgIGFjbFJ1bGVbdGVtcElkeF0uZGF0YV9iaXRzLmZpZWxkW2ZpZWxkSWR4XSA9ICgoaXA2YWRkclszXSAmICgweEZGRkYgPDwgKChpJjEpICogMTYpKSkgPj4gKChpJjEpICogMTYpKTsKKyAgICAgICAgICAgICAgICBhY2xSdWxlW3RlbXBJZHhdLmNhcmVfYml0cy5maWVsZFtmaWVsZElkeF0gPSAoKGlwNm1hc2tbM10gJiAoMHhGRkZGIDw8ICgoaSYxKSAqIDE2KSkpID4+ICgoaSYxKSAqIDE2KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZJTFRFUl9GSUVMRF9DVEFHOgorICAgIGNhc2UgRklMVEVSX0ZJRUxEX1NUQUc6CisKKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgZmllbGRQdHItPmZpZWxkVGVtcGxhdGVObzsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0ZW1wSWR4ID0gKGZpZWxkUHRyLT5maWVsZFRlbXBsYXRlSWR4W2ldICYgMHhGMCkgPj4gNDsKKyAgICAgICAgICAgIGZpZWxkSWR4ID0gZmllbGRQdHItPmZpZWxkVGVtcGxhdGVJZHhbaV0gJiAweDBGOworCisgICAgICAgICAgICBhY2xSdWxlW3RlbXBJZHhdLmRhdGFfYml0cy5maWVsZFtmaWVsZElkeF0gPSAoZmllbGRQdHItPmZpbHRlcl9wYXR0ZXJuX3VuaW9uLmwydGFnLnByaS52YWx1ZSA8PCAxMykgfCAoZmllbGRQdHItPmZpbHRlcl9wYXR0ZXJuX3VuaW9uLmwydGFnLmNmaS52YWx1ZSA8PCAxMikgfCBmaWVsZFB0ci0+ZmlsdGVyX3BhdHRlcm5fdW5pb24ubDJ0YWcudmlkLnZhbHVlOworICAgICAgICAgICAgYWNsUnVsZVt0ZW1wSWR4XS5jYXJlX2JpdHMuZmllbGRbZmllbGRJZHhdID0gKGZpZWxkUHRyLT5maWx0ZXJfcGF0dGVybl91bmlvbi5sMnRhZy5wcmkubWFzayA8PCAxMykgfCAoZmllbGRQdHItPmZpbHRlcl9wYXR0ZXJuX3VuaW9uLmwydGFnLmNmaS5tYXNrIDw8IDEyKSB8IGZpZWxkUHRyLT5maWx0ZXJfcGF0dGVybl91bmlvbi5sMnRhZy52aWQubWFzazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEZJTFRFUl9GSUVMRF9JUFY0X0ZMQUc6CisKKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgZmllbGRQdHItPmZpZWxkVGVtcGxhdGVObzsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0ZW1wSWR4ID0gKGZpZWxkUHRyLT5maWVsZFRlbXBsYXRlSWR4W2ldICYgMHhGMCkgPj4gNDsKKyAgICAgICAgICAgIGZpZWxkSWR4ID0gZmllbGRQdHItPmZpZWxkVGVtcGxhdGVJZHhbaV0gJiAweDBGOworCisgICAgICAgICAgICBhY2xSdWxlW3RlbXBJZHhdLmRhdGFfYml0cy5maWVsZFtmaWVsZElkeF0gJj0gMHgxRkZGOworICAgICAgICAgICAgYWNsUnVsZVt0ZW1wSWR4XS5kYXRhX2JpdHMuZmllbGRbZmllbGRJZHhdIHw9IChmaWVsZFB0ci0+ZmlsdGVyX3BhdHRlcm5fdW5pb24uaXBGbGFnLnhmLnZhbHVlIDw8IDE1KTsKKyAgICAgICAgICAgIGFjbFJ1bGVbdGVtcElkeF0uZGF0YV9iaXRzLmZpZWxkW2ZpZWxkSWR4XSB8PSAoZmllbGRQdHItPmZpbHRlcl9wYXR0ZXJuX3VuaW9uLmlwRmxhZy5kZi52YWx1ZSA8PCAxNCk7CisgICAgICAgICAgICBhY2xSdWxlW3RlbXBJZHhdLmRhdGFfYml0cy5maWVsZFtmaWVsZElkeF0gfD0gKGZpZWxkUHRyLT5maWx0ZXJfcGF0dGVybl91bmlvbi5pcEZsYWcubWYudmFsdWUgPDwgMTMpOworCisgICAgICAgICAgICBhY2xSdWxlW3RlbXBJZHhdLmNhcmVfYml0cy5maWVsZFtmaWVsZElkeF0gJj0gMHgxRkZGOworICAgICAgICAgICAgYWNsUnVsZVt0ZW1wSWR4XS5jYXJlX2JpdHMuZmllbGRbZmllbGRJZHhdIHw9IChmaWVsZFB0ci0+ZmlsdGVyX3BhdHRlcm5fdW5pb24uaXBGbGFnLnhmLm1hc2sgPDwgMTUpOworICAgICAgICAgICAgYWNsUnVsZVt0ZW1wSWR4XS5jYXJlX2JpdHMuZmllbGRbZmllbGRJZHhdIHw9IChmaWVsZFB0ci0+ZmlsdGVyX3BhdHRlcm5fdW5pb24uaXBGbGFnLmRmLm1hc2sgPDwgMTQpOworICAgICAgICAgICAgYWNsUnVsZVt0ZW1wSWR4XS5jYXJlX2JpdHMuZmllbGRbZmllbGRJZHhdIHw9IChmaWVsZFB0ci0+ZmlsdGVyX3BhdHRlcm5fdW5pb24uaXBGbGFnLm1mLm1hc2sgPDwgMTMpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGSUxURVJfRklFTERfSVBWNF9PRkZTRVQ6CisKKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgZmllbGRQdHItPmZpZWxkVGVtcGxhdGVObzsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0ZW1wSWR4ID0gKGZpZWxkUHRyLT5maWVsZFRlbXBsYXRlSWR4W2ldICYgMHhGMCkgPj4gNDsKKyAgICAgICAgICAgIGZpZWxkSWR4ID0gZmllbGRQdHItPmZpZWxkVGVtcGxhdGVJZHhbaV0gJiAweDBGOworCisgICAgICAgICAgICBhY2xSdWxlW3RlbXBJZHhdLmRhdGFfYml0cy5maWVsZFtmaWVsZElkeF0gJj0gMHhFMDAwOworICAgICAgICAgICAgYWNsUnVsZVt0ZW1wSWR4XS5kYXRhX2JpdHMuZmllbGRbZmllbGRJZHhdIHw9IGZpZWxkUHRyLT5maWx0ZXJfcGF0dGVybl91bmlvbi5pbkRhdGEudmFsdWU7CisKKyAgICAgICAgICAgIGFjbFJ1bGVbdGVtcElkeF0uY2FyZV9iaXRzLmZpZWxkW2ZpZWxkSWR4XSAmPSAweEUwMDA7CisgICAgICAgICAgICBhY2xSdWxlW3RlbXBJZHhdLmNhcmVfYml0cy5maWVsZFtmaWVsZElkeF0gfD0gZmllbGRQdHItPmZpbHRlcl9wYXR0ZXJuX3VuaW9uLmluRGF0YS5tYXNrOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZJTFRFUl9GSUVMRF9JUFY2X1RSQUZGSUNfQ0xBU1M6CisgICAgICAgIGZvcihpID0gMDsgaSA8IGZpZWxkUHRyLT5maWVsZFRlbXBsYXRlTm87IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGVtcElkeCA9IChmaWVsZFB0ci0+ZmllbGRUZW1wbGF0ZUlkeFtpXSAmIDB4RjApID4+IDQ7CisgICAgICAgICAgICBmaWVsZElkeCA9IGZpZWxkUHRyLT5maWVsZFRlbXBsYXRlSWR4W2ldICYgMHgwRjsKKworCisgICAgICAgICAgICBhY2xSdWxlW3RlbXBJZHhdLmRhdGFfYml0cy5maWVsZFtmaWVsZElkeF0gPSAoZmllbGRQdHItPmZpbHRlcl9wYXR0ZXJuX3VuaW9uLmluRGF0YS52YWx1ZSA8PCA0KSYweDBGRjA7CisgICAgICAgICAgICBhY2xSdWxlW3RlbXBJZHhdLmNhcmVfYml0cy5maWVsZFtmaWVsZElkeF0gPSAoZmllbGRQdHItPmZpbHRlcl9wYXR0ZXJuX3VuaW9uLmluRGF0YS5tYXNrIDw8IDQpJjB4MEZGMDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEZJTFRFUl9GSUVMRF9JUFY2X05FWFRfSEVBREVSOgorICAgICAgICBmb3IoaSA9IDA7IGkgPCBmaWVsZFB0ci0+ZmllbGRUZW1wbGF0ZU5vOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlbXBJZHggPSAoZmllbGRQdHItPmZpZWxkVGVtcGxhdGVJZHhbaV0gJiAweEYwKSA+PiA0OworICAgICAgICAgICAgZmllbGRJZHggPSBmaWVsZFB0ci0+ZmllbGRUZW1wbGF0ZUlkeFtpXSAmIDB4MEY7CisKKyAgICAgICAgICAgIGFjbFJ1bGVbdGVtcElkeF0uZGF0YV9iaXRzLmZpZWxkW2ZpZWxkSWR4XSA9IGZpZWxkUHRyLT5maWx0ZXJfcGF0dGVybl91bmlvbi5pbkRhdGEudmFsdWUgPDwgODsKKyAgICAgICAgICAgIGFjbFJ1bGVbdGVtcElkeF0uY2FyZV9iaXRzLmZpZWxkW2ZpZWxkSWR4XSA9IGZpZWxkUHRyLT5maWx0ZXJfcGF0dGVybl91bmlvbi5pbkRhdGEubWFzayA8PCA4OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRklMVEVSX0ZJRUxEX1RDUF9TUE9SVDoKKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgZmllbGRQdHItPmZpZWxkVGVtcGxhdGVObzsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0ZW1wSWR4ID0gKGZpZWxkUHRyLT5maWVsZFRlbXBsYXRlSWR4W2ldICYgMHhGMCkgPj4gNDsKKyAgICAgICAgICAgIGZpZWxkSWR4ID0gZmllbGRQdHItPmZpZWxkVGVtcGxhdGVJZHhbaV0gJiAweDBGOworCisgICAgICAgICAgICBhY2xSdWxlW3RlbXBJZHhdLmRhdGFfYml0cy5maWVsZFtmaWVsZElkeF0gPSBmaWVsZFB0ci0+ZmlsdGVyX3BhdHRlcm5fdW5pb24udGNwU3JjUG9ydC52YWx1ZTsKKyAgICAgICAgICAgIGFjbFJ1bGVbdGVtcElkeF0uY2FyZV9iaXRzLmZpZWxkW2ZpZWxkSWR4XSA9IGZpZWxkUHRyLT5maWx0ZXJfcGF0dGVybl91bmlvbi50Y3BTcmNQb3J0Lm1hc2s7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGSUxURVJfRklFTERfVENQX0RQT1JUOgorICAgICAgICBmb3IoaSA9IDA7IGkgPCBmaWVsZFB0ci0+ZmllbGRUZW1wbGF0ZU5vOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlbXBJZHggPSAoZmllbGRQdHItPmZpZWxkVGVtcGxhdGVJZHhbaV0gJiAweEYwKSA+PiA0OworICAgICAgICAgICAgZmllbGRJZHggPSBmaWVsZFB0ci0+ZmllbGRUZW1wbGF0ZUlkeFtpXSAmIDB4MEY7CisKKyAgICAgICAgICAgIGFjbFJ1bGVbdGVtcElkeF0uZGF0YV9iaXRzLmZpZWxkW2ZpZWxkSWR4XSA9IGZpZWxkUHRyLT5maWx0ZXJfcGF0dGVybl91bmlvbi50Y3BEc3RQb3J0LnZhbHVlOworICAgICAgICAgICAgYWNsUnVsZVt0ZW1wSWR4XS5jYXJlX2JpdHMuZmllbGRbZmllbGRJZHhdID0gZmllbGRQdHItPmZpbHRlcl9wYXR0ZXJuX3VuaW9uLnRjcERzdFBvcnQubWFzazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEZJTFRFUl9GSUVMRF9UQ1BfRkxBRzoKKworICAgICAgICBmb3IoaSA9IDA7IGkgPCBmaWVsZFB0ci0+ZmllbGRUZW1wbGF0ZU5vOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlbXBJZHggPSAoZmllbGRQdHItPmZpZWxkVGVtcGxhdGVJZHhbaV0gJiAweEYwKSA+PiA0OworICAgICAgICAgICAgZmllbGRJZHggPSBmaWVsZFB0ci0+ZmllbGRUZW1wbGF0ZUlkeFtpXSAmIDB4MEY7CisKKyAgICAgICAgICAgIGFjbFJ1bGVbdGVtcElkeF0uZGF0YV9iaXRzLmZpZWxkW2ZpZWxkSWR4XSB8PSAoZmllbGRQdHItPmZpbHRlcl9wYXR0ZXJuX3VuaW9uLnRjcEZsYWcuY3dyLnZhbHVlIDw8IDcpOworICAgICAgICAgICAgYWNsUnVsZVt0ZW1wSWR4XS5kYXRhX2JpdHMuZmllbGRbZmllbGRJZHhdIHw9IChmaWVsZFB0ci0+ZmlsdGVyX3BhdHRlcm5fdW5pb24udGNwRmxhZy5lY2UudmFsdWUgPDwgNik7CisgICAgICAgICAgICBhY2xSdWxlW3RlbXBJZHhdLmRhdGFfYml0cy5maWVsZFtmaWVsZElkeF0gfD0gKGZpZWxkUHRyLT5maWx0ZXJfcGF0dGVybl91bmlvbi50Y3BGbGFnLnVyZy52YWx1ZSA8PCA1KTsKKyAgICAgICAgICAgIGFjbFJ1bGVbdGVtcElkeF0uZGF0YV9iaXRzLmZpZWxkW2ZpZWxkSWR4XSB8PSAoZmllbGRQdHItPmZpbHRlcl9wYXR0ZXJuX3VuaW9uLnRjcEZsYWcuYWNrLnZhbHVlIDw8IDQpOworICAgICAgICAgICAgYWNsUnVsZVt0ZW1wSWR4XS5kYXRhX2JpdHMuZmllbGRbZmllbGRJZHhdIHw9IChmaWVsZFB0ci0+ZmlsdGVyX3BhdHRlcm5fdW5pb24udGNwRmxhZy5wc2gudmFsdWUgPDwgMyk7CisgICAgICAgICAgICBhY2xSdWxlW3RlbXBJZHhdLmRhdGFfYml0cy5maWVsZFtmaWVsZElkeF0gfD0gKGZpZWxkUHRyLT5maWx0ZXJfcGF0dGVybl91bmlvbi50Y3BGbGFnLnJzdC52YWx1ZSA8PCAyKTsKKyAgICAgICAgICAgIGFjbFJ1bGVbdGVtcElkeF0uZGF0YV9iaXRzLmZpZWxkW2ZpZWxkSWR4XSB8PSAoZmllbGRQdHItPmZpbHRlcl9wYXR0ZXJuX3VuaW9uLnRjcEZsYWcuc3luLnZhbHVlIDw8IDEpOworICAgICAgICAgICAgYWNsUnVsZVt0ZW1wSWR4XS5kYXRhX2JpdHMuZmllbGRbZmllbGRJZHhdIHw9IGZpZWxkUHRyLT5maWx0ZXJfcGF0dGVybl91bmlvbi50Y3BGbGFnLmZpbi52YWx1ZTsKKworICAgICAgICAgICAgYWNsUnVsZVt0ZW1wSWR4XS5jYXJlX2JpdHMuZmllbGRbZmllbGRJZHhdIHw9IChmaWVsZFB0ci0+ZmlsdGVyX3BhdHRlcm5fdW5pb24udGNwRmxhZy5jd3IubWFzayA8PCA3KTsKKyAgICAgICAgICAgIGFjbFJ1bGVbdGVtcElkeF0uY2FyZV9iaXRzLmZpZWxkW2ZpZWxkSWR4XSB8PSAoZmllbGRQdHItPmZpbHRlcl9wYXR0ZXJuX3VuaW9uLnRjcEZsYWcuZWNlLm1hc2sgPDwgNik7CisgICAgICAgICAgICBhY2xSdWxlW3RlbXBJZHhdLmNhcmVfYml0cy5maWVsZFtmaWVsZElkeF0gfD0gKGZpZWxkUHRyLT5maWx0ZXJfcGF0dGVybl91bmlvbi50Y3BGbGFnLnVyZy5tYXNrIDw8IDUpOworICAgICAgICAgICAgYWNsUnVsZVt0ZW1wSWR4XS5jYXJlX2JpdHMuZmllbGRbZmllbGRJZHhdIHw9IChmaWVsZFB0ci0+ZmlsdGVyX3BhdHRlcm5fdW5pb24udGNwRmxhZy5hY2subWFzayA8PCA0KTsKKyAgICAgICAgICAgIGFjbFJ1bGVbdGVtcElkeF0uY2FyZV9iaXRzLmZpZWxkW2ZpZWxkSWR4XSB8PSAoZmllbGRQdHItPmZpbHRlcl9wYXR0ZXJuX3VuaW9uLnRjcEZsYWcucHNoLm1hc2sgPDwgMyk7CisgICAgICAgICAgICBhY2xSdWxlW3RlbXBJZHhdLmNhcmVfYml0cy5maWVsZFtmaWVsZElkeF0gfD0gKGZpZWxkUHRyLT5maWx0ZXJfcGF0dGVybl91bmlvbi50Y3BGbGFnLnJzdC5tYXNrIDw8IDIpOworICAgICAgICAgICAgYWNsUnVsZVt0ZW1wSWR4XS5jYXJlX2JpdHMuZmllbGRbZmllbGRJZHhdIHw9IChmaWVsZFB0ci0+ZmlsdGVyX3BhdHRlcm5fdW5pb24udGNwRmxhZy5zeW4ubWFzayA8PCAxKTsKKyAgICAgICAgICAgIGFjbFJ1bGVbdGVtcElkeF0uY2FyZV9iaXRzLmZpZWxkW2ZpZWxkSWR4XSB8PSBmaWVsZFB0ci0+ZmlsdGVyX3BhdHRlcm5fdW5pb24udGNwRmxhZy5maW4ubWFzazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEZJTFRFUl9GSUVMRF9VRFBfU1BPUlQ6CisgICAgICAgIGZvcihpID0gMDsgaSA8IGZpZWxkUHRyLT5maWVsZFRlbXBsYXRlTm87IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGVtcElkeCA9IChmaWVsZFB0ci0+ZmllbGRUZW1wbGF0ZUlkeFtpXSAmIDB4RjApID4+IDQ7CisgICAgICAgICAgICBmaWVsZElkeCA9IGZpZWxkUHRyLT5maWVsZFRlbXBsYXRlSWR4W2ldICYgMHgwRjsKKworICAgICAgICAgICAgYWNsUnVsZVt0ZW1wSWR4XS5kYXRhX2JpdHMuZmllbGRbZmllbGRJZHhdID0gZmllbGRQdHItPmZpbHRlcl9wYXR0ZXJuX3VuaW9uLnVkcFNyY1BvcnQudmFsdWU7CisgICAgICAgICAgICBhY2xSdWxlW3RlbXBJZHhdLmNhcmVfYml0cy5maWVsZFtmaWVsZElkeF0gPSBmaWVsZFB0ci0+ZmlsdGVyX3BhdHRlcm5fdW5pb24udWRwU3JjUG9ydC5tYXNrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRklMVEVSX0ZJRUxEX1VEUF9EUE9SVDoKKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgZmllbGRQdHItPmZpZWxkVGVtcGxhdGVObzsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0ZW1wSWR4ID0gKGZpZWxkUHRyLT5maWVsZFRlbXBsYXRlSWR4W2ldICYgMHhGMCkgPj4gNDsKKyAgICAgICAgICAgIGZpZWxkSWR4ID0gZmllbGRQdHItPmZpZWxkVGVtcGxhdGVJZHhbaV0gJiAweDBGOworCisgICAgICAgICAgICBhY2xSdWxlW3RlbXBJZHhdLmRhdGFfYml0cy5maWVsZFtmaWVsZElkeF0gPSBmaWVsZFB0ci0+ZmlsdGVyX3BhdHRlcm5fdW5pb24udWRwRHN0UG9ydC52YWx1ZTsKKyAgICAgICAgICAgIGFjbFJ1bGVbdGVtcElkeF0uY2FyZV9iaXRzLmZpZWxkW2ZpZWxkSWR4XSA9IGZpZWxkUHRyLT5maWx0ZXJfcGF0dGVybl91bmlvbi51ZHBEc3RQb3J0Lm1hc2s7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGSUxURVJfRklFTERfSUNNUF9DT0RFOgorICAgICAgICBmb3IoaSA9IDA7IGkgPCBmaWVsZFB0ci0+ZmllbGRUZW1wbGF0ZU5vOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlbXBJZHggPSAoZmllbGRQdHItPmZpZWxkVGVtcGxhdGVJZHhbaV0gJiAweEYwKSA+PiA0OworICAgICAgICAgICAgZmllbGRJZHggPSBmaWVsZFB0ci0+ZmllbGRUZW1wbGF0ZUlkeFtpXSAmIDB4MEY7CisKKyAgICAgICAgICAgIGFjbFJ1bGVbdGVtcElkeF0uZGF0YV9iaXRzLmZpZWxkW2ZpZWxkSWR4XSAmPSAweEZGMDA7CisgICAgICAgICAgICBhY2xSdWxlW3RlbXBJZHhdLmRhdGFfYml0cy5maWVsZFtmaWVsZElkeF0gfD0gZmllbGRQdHItPmZpbHRlcl9wYXR0ZXJuX3VuaW9uLmljbXBDb2RlLnZhbHVlOworICAgICAgICAgICAgYWNsUnVsZVt0ZW1wSWR4XS5jYXJlX2JpdHMuZmllbGRbZmllbGRJZHhdICY9IDB4RkYwMDsKKyAgICAgICAgICAgIGFjbFJ1bGVbdGVtcElkeF0uY2FyZV9iaXRzLmZpZWxkW2ZpZWxkSWR4XSB8PSBmaWVsZFB0ci0+ZmlsdGVyX3BhdHRlcm5fdW5pb24uaWNtcENvZGUubWFzazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEZJTFRFUl9GSUVMRF9JQ01QX1RZUEU6CisgICAgICAgIGZvcihpID0gMDsgaSA8IGZpZWxkUHRyLT5maWVsZFRlbXBsYXRlTm87IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGVtcElkeCA9IChmaWVsZFB0ci0+ZmllbGRUZW1wbGF0ZUlkeFtpXSAmIDB4RjApID4+IDQ7CisgICAgICAgICAgICBmaWVsZElkeCA9IGZpZWxkUHRyLT5maWVsZFRlbXBsYXRlSWR4W2ldICYgMHgwRjsKKworICAgICAgICAgICAgYWNsUnVsZVt0ZW1wSWR4XS5kYXRhX2JpdHMuZmllbGRbZmllbGRJZHhdICY9IDB4MDBGRjsKKyAgICAgICAgICAgIGFjbFJ1bGVbdGVtcElkeF0uZGF0YV9iaXRzLmZpZWxkW2ZpZWxkSWR4XSB8PSAoZmllbGRQdHItPmZpbHRlcl9wYXR0ZXJuX3VuaW9uLmljbXBUeXBlLnZhbHVlIDw8IDgpOworICAgICAgICAgICAgYWNsUnVsZVt0ZW1wSWR4XS5jYXJlX2JpdHMuZmllbGRbZmllbGRJZHhdICY9IDB4MDBGRjsKKyAgICAgICAgICAgIGFjbFJ1bGVbdGVtcElkeF0uY2FyZV9iaXRzLmZpZWxkW2ZpZWxkSWR4XSB8PSAoZmllbGRQdHItPmZpbHRlcl9wYXR0ZXJuX3VuaW9uLmljbXBUeXBlLm1hc2sgPDwgOCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGSUxURVJfRklFTERfSUdNUF9UWVBFOgorICAgICAgICBmb3IoaSA9IDA7IGkgPCBmaWVsZFB0ci0+ZmllbGRUZW1wbGF0ZU5vOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlbXBJZHggPSAoZmllbGRQdHItPmZpZWxkVGVtcGxhdGVJZHhbaV0gJiAweEYwKSA+PiA0OworICAgICAgICAgICAgZmllbGRJZHggPSBmaWVsZFB0ci0+ZmllbGRUZW1wbGF0ZUlkeFtpXSAmIDB4MEY7CisKKyAgICAgICAgICAgIGFjbFJ1bGVbdGVtcElkeF0uZGF0YV9iaXRzLmZpZWxkW2ZpZWxkSWR4XSA9IChmaWVsZFB0ci0+ZmlsdGVyX3BhdHRlcm5fdW5pb24uaWdtcFR5cGUudmFsdWUgPDwgOCk7CisgICAgICAgICAgICBhY2xSdWxlW3RlbXBJZHhdLmNhcmVfYml0cy5maWVsZFtmaWVsZElkeF0gPSAoZmllbGRQdHItPmZpbHRlcl9wYXR0ZXJuX3VuaW9uLmlnbXBUeXBlLm1hc2sgPDwgOCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGSUxURVJfRklFTERfUEFUVEVSTl9NQVRDSDoKKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgZmllbGRQdHItPmZpZWxkVGVtcGxhdGVObzsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0ZW1wSWR4ID0gKGZpZWxkUHRyLT5maWVsZFRlbXBsYXRlSWR4W2ldICYgMHhGMCkgPj4gNDsKKyAgICAgICAgICAgIGZpZWxkSWR4ID0gZmllbGRQdHItPmZpZWxkVGVtcGxhdGVJZHhbaV0gJiAweDBGOworCisgICAgICAgICAgICBhY2xSdWxlW3RlbXBJZHhdLmRhdGFfYml0cy5maWVsZFtmaWVsZElkeF0gPSAoKGZpZWxkUHRyLT5maWx0ZXJfcGF0dGVybl91bmlvbi5wYXR0ZXJuLnZhbHVlW2kvMl0gPj4gKDE2ICogKGklMikpKSAmIDB4MDAwMEZGRkYgKTsKKyAgICAgICAgICAgIGFjbFJ1bGVbdGVtcElkeF0uY2FyZV9iaXRzLmZpZWxkW2ZpZWxkSWR4XSA9ICgoZmllbGRQdHItPmZpbHRlcl9wYXR0ZXJuX3VuaW9uLnBhdHRlcm4ubWFza1tpLzJdID4+ICgxNiAqIChpJTIpKSkgJiAweDAwMDBGRkZGICk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGSUxURVJfRklFTERfVklEX1JBTkdFOgorICAgIGNhc2UgRklMVEVSX0ZJRUxEX0lQX1JBTkdFOgorICAgIGNhc2UgRklMVEVSX0ZJRUxEX1BPUlRfUkFOR0U6CisgICAgZGVmYXVsdDoKKyAgICAgICAgdGVtcElkeCA9IChmaWVsZFB0ci0+ZmllbGRUZW1wbGF0ZUlkeFswXSAmIDB4RjApID4+IDQ7CisgICAgICAgIGZpZWxkSWR4ID0gZmllbGRQdHItPmZpZWxkVGVtcGxhdGVJZHhbMF0gJiAweDBGOworCisgICAgICAgIGFjbFJ1bGVbdGVtcElkeF0uZGF0YV9iaXRzLmZpZWxkW2ZpZWxkSWR4XSA9IGZpZWxkUHRyLT5maWx0ZXJfcGF0dGVybl91bmlvbi5pbkRhdGEudmFsdWU7CisgICAgICAgIGFjbFJ1bGVbdGVtcElkeF0uY2FyZV9iaXRzLmZpZWxkW2ZpZWxkSWR4XSA9IGZpZWxkUHRyLT5maWx0ZXJfcGF0dGVybl91bmlvbi5pbkRhdGEubWFzazsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2ZpbHRlcl9pZ3JBY2xfY2ZnX2FkZAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEFkZCBhbiBBQ0wgY29uZmlndXJhdGlvbiB0byBBU0lDCisgKiBJbnB1dDoKKyAqICAgICAgZmlsdGVyX2lkICAgICAgIC0gU3RhcnQgaW5kZXggb2YgQUNMIGNvbmZpZ3VyYXRpb24uCisgKiAgICAgIHBGaWx0ZXJfY2ZnICAgICAtIFRoZSBBQ0wgY29uZmlndXJhdGlvbiB0aGF0IHRoaXMgZnVuY3Rpb24gd2lsbCBhZGQgY29tcGFyaXNvbiBydWxlCisgKiAgICAgIHBGaWx0ZXJfYWN0aW9uICAtIEFjdGlvbihzKSBvZiBBQ0wgY29uZmlndXJhdGlvbi4KKyAqIE91dHB1dDoKKyAqICAgICAgcnVsZU51bSAtIG51bWJlciBvZiBydWxlcyB3cml0dGVuIGluIGFjbCB0YWJsZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfTlVMTF9QT0lOVEVSICAgICAgICAgICAgICAgICAgICAgLSBQb2ludGVyIHBGaWx0ZXJfZmllbGQgb3IgcEZpbHRlcl9jZmcgcG9pbnQgdG8gTlVMTC4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogICAgICBSVF9FUlJfRU5UUllfSU5ERVggICAgICAgICAgICAgICAgICAgICAgLSBJbnZhbGlkIGZpbHRlcl9pZCAuCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgICAgICAgICAgICAgICAgICAgICAtIFBvaW50ZXIgcEZpbHRlcl9hY3Rpb24gb3IgcEZpbHRlcl9jZmcgcG9pbnQgdG8gTlVMTC4KKyAqICAgICAgUlRfRVJSX0ZJTFRFUl9JTkFDTF9BQ1RfTk9UX1NVUFBPUlQgICAgIC0gQWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBjaGlwLgorICogICAgICBSVF9FUlJfRklMVEVSX0lOQUNMX1JVTEVfTk9UX1NVUFBPUlQgICAgLSBSdWxlIGlzIG5vdCBzdXBwb3J0ZWQuCisgKiBOb3RlOgorICogICAgICBUaGlzIGZ1bmN0aW9uIHN0b3JlIHBGaWx0ZXJfY2ZnLCBwRmlsdGVyX2FjdGlvbiBpbnRvIEFTSUMuIFRoZSBzdGFydGluZworICogICAgICBpbmRleChlcykgaXMgZmlsdGVyX2lkLgorICovCitydGtfYXBpX3JldF90IHJ0a19maWx0ZXJfaWdyQWNsX2NmZ19hZGQocnRrX2ZpbHRlcl9pZF90IGZpbHRlcl9pZCwgcnRrX2ZpbHRlcl9jZmdfdCogcEZpbHRlcl9jZmcsIHJ0a19maWx0ZXJfYWN0aW9uX3QqIHBGaWx0ZXJfYWN0aW9uLCBydGtfZmlsdGVyX251bWJlcl90ICpydWxlTnVtKQoreworICAgIHJ0a19hcGlfcmV0X3QgICAgICAgICAgICAgICByZXRWYWw7CisgICAgcnRrX3VpbnQzMiAgICAgICAgICAgICAgICAgIGNhcmVUYWdEYXRhLCBjYXJlVGFnTWFzazsKKyAgICBydGtfdWludDMyICAgICAgICAgICAgICAgICAgaSx2aWR4LCBzdmlkeCwgYWN0VHlwZSwgcnVsZUlkOworICAgIHJ0a191aW50MzIgICAgICAgICAgICAgICAgICBhY2xBY3RDdHJsOworICAgIHJ0a191aW50MzIgICAgICAgICAgICAgICAgICBjcHVQb3J0OworICAgIHJ0a19maWx0ZXJfZmllbGRfdCogICAgICAgICBmaWVsZFB0cjsKKyAgICBydGw4MzY3Y19hY2xydWxlICAgICAgICAgICAgYWNsUnVsZVtSVEw4MzY3Q19BQ0xURU1QTEFURU5PXTsKKyAgICBydGw4MzY3Y19hY2xydWxlICAgICAgICAgICAgdGVtcFJ1bGU7CisgICAgcnRsODM2N2NfYWNsX2FjdF90ICAgICAgICAgIGFjbEFjdDsKKyAgICBydGtfdWludDMyICAgICAgICAgICAgICAgICAgbm9SdWxlc0FkZDsKKyAgICBydGtfdWludDMyICAgICAgICAgICAgICAgICAgcG9ydG1hc2s7CisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKGZpbHRlcl9pZCA+IFJUTDgzNjdDX0FDTFJVTEVNQVggKQorICAgICAgICByZXR1cm4gUlRfRVJSX0VOVFJZX0lOREVYOworCisgICAgaWYoKE5VTEwgPT0gcEZpbHRlcl9jZmcpIHx8IChOVUxMID09IHBGaWx0ZXJfYWN0aW9uKSB8fCAoTlVMTCA9PSBydWxlTnVtKSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBmaWVsZFB0ciA9IHBGaWx0ZXJfY2ZnLT5maWVsZEhlYWQ7CisKKyAgICAvKiBpbml0IFJVTEUgKi8KKyAgICBmb3IoaSA9IDA7IGkgPCBSVEw4MzY3Q19BQ0xURU1QTEFURU5POyBpKyspCisgICAgeworICAgICAgICBtZW1zZXQoJmFjbFJ1bGVbaV0sIDAsIHNpemVvZihydGw4MzY3Y19hY2xydWxlKSk7CisKKyAgICAgICAgYWNsUnVsZVtpXS5kYXRhX2JpdHMudHlwZT0gaTsKKyAgICAgICAgYWNsUnVsZVtpXS5jYXJlX2JpdHMudHlwZT0gMHg3OworICAgIH0KKworICAgIHdoaWxlKE5VTEwgIT0gZmllbGRQdHIpCisgICAgeworICAgICAgICBfcnRrX2ZpbHRlcl9pZ3JBY2xfd3JpdGVEYXRhRmllbGQoYWNsUnVsZSwgZmllbGRQdHIpOworCisgICAgICAgIGZpZWxkUHRyID0gZmllbGRQdHItPm5leHQ7CisgICAgfQorCisgICAgLypzZXQgY2FyZSB0YWcgbWFzayBpbiBVc2VyIERlZmluZWQgRmllbGQgMTUqLworICAgIC8qRm9sbG93IGNhcmUgdGFnIHNob3VsZCBub3QgYmUgdXNlZCB3aGlsZSBBQ0wgdGVtcGxhdGUgYW5kIFVzZXIgZGVmaW5lZCBmaWVsZHMgYXJlIGZ1bGx5IGNvbnRyb2wgYnkgc3lzdGVtIGRlc2lnbmVyKi8KKyAgICAvKnRob3NlIGFkdmFuY2VkIHBhY2tldCB0eXBlIGNhcmUgdGFnIGlzIHVzZWQgaW4gZGVmYXVsdCB0ZW1wbGF0ZSBkZXNpZ24gc3RydWN0dXJlIG9ubHkqLworICAgIGNhcmVUYWdEYXRhID0gMDsKKyAgICBjYXJlVGFnTWFzayA9IDA7CisKKyAgICBmb3IoaSA9IENBUkVfVEFHX1RDUDsgaSA8IENBUkVfVEFHX0VORDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYocEZpbHRlcl9jZmctPmNhcmVUYWcudGFnVHlwZVtpXS5tYXNrKQorICAgICAgICAgICAgY2FyZVRhZ01hc2sgPSBjYXJlVGFnTWFzayB8ICgxIDw8IChpLUNBUkVfVEFHX1RDUCkpOworCisgICAgICAgIGlmKHBGaWx0ZXJfY2ZnLT5jYXJlVGFnLnRhZ1R5cGVbaV0udmFsdWUpCisgICAgICAgICAgICBjYXJlVGFnRGF0YSA9IGNhcmVUYWdEYXRhIHwgKDEgPDwgKGktQ0FSRV9UQUdfVENQKSk7CisgICAgfQorCisgICAgaWYoY2FyZVRhZ0RhdGEgfHwgY2FyZVRhZ01hc2spCisgICAgeworICAgICAgICBpID0gMDsKKyAgICAgICAgd2hpbGUoaSA8IFJUTDgzNjdDX0FDTFRFTVBMQVRFTk8pCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKGFjbFJ1bGVbaV0udmFsaWQgPT0gMSAmJiBmaWx0ZXJfYWR2YW5jZUNhcmV0YWdGaWVsZFtpXVswXSA9PSBUUlVFKQorICAgICAgICAgICAgeworCisgICAgICAgICAgICAgICAgYWNsUnVsZVtpXS5kYXRhX2JpdHMuZmllbGRbZmlsdGVyX2FkdmFuY2VDYXJldGFnRmllbGRbaV1bMV1dID0gY2FyZVRhZ0RhdGEgJiAweEZGRkY7CisgICAgICAgICAgICAgICAgYWNsUnVsZVtpXS5jYXJlX2JpdHMuZmllbGRbZmlsdGVyX2FkdmFuY2VDYXJldGFnRmllbGRbaV1bMV1dID0gY2FyZVRhZ01hc2sgJiAweEZGRkY7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpKys7CisgICAgICAgIH0KKyAgICAgICAgLypub25lIG9mIHByZXZpb3VzIHVzZWQgdGVtcGxhdGUgY29udGFpbmluZyBmaWVsZCAxNSovCisgICAgICAgIGlmKGkgPT0gUlRMODM2N0NfQUNMVEVNUExBVEVOTykKKyAgICAgICAgeworICAgICAgICAgICAgaSA9IDA7CisgICAgICAgICAgICB3aGlsZShpIDwgUlRMODM2N0NfQUNMVEVNUExBVEVOTykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZihmaWx0ZXJfYWR2YW5jZUNhcmV0YWdGaWVsZFtpXVswXSA9PSBUUlVFKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYWNsUnVsZVtpXS5kYXRhX2JpdHMuZmllbGRbZmlsdGVyX2FkdmFuY2VDYXJldGFnRmllbGRbaV1bMV1dID0gY2FyZVRhZ0RhdGEgJiAweEZGRkY7CisgICAgICAgICAgICAgICAgICAgIGFjbFJ1bGVbaV0uY2FyZV9iaXRzLmZpZWxkW2ZpbHRlcl9hZHZhbmNlQ2FyZXRhZ0ZpZWxkW2ldWzFdXSA9IGNhcmVUYWdNYXNrICYgMHhGRkZGOworICAgICAgICAgICAgICAgICAgICBhY2xSdWxlW2ldLnZhbGlkID0gMTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qQ2hlY2sgcnVsZSBudW1iZXIqLworICAgIG5vUnVsZXNBZGQgPSAwOworICAgIGZvcihpID0gMDsgaSA8IFJUTDgzNjdDX0FDTFRFTVBMQVRFTk87IGkrKykKKyAgICB7CisgICAgICAgIGlmKDEgPT0gYWNsUnVsZVtpXS52YWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgbm9SdWxlc0FkZCArKzsKKyAgICAgICAgfQorICAgIH0KKworICAgICpydWxlTnVtID0gbm9SdWxlc0FkZDsKKworICAgIGlmKChmaWx0ZXJfaWQgKyBub1J1bGVzQWRkIC0gMSkgPiBSVEw4MzY3Q19BQ0xSVUxFTUFYKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9FTlRSWV9JTkRFWDsKKyAgICB9CisKKyAgICAvKnNldCBjYXJlIHRhZyBtYXNrIGluIFRBRyBJbmRpY2F0b3IqLworICAgIGNhcmVUYWdEYXRhID0gMDsKKyAgICBjYXJlVGFnTWFzayA9IDA7CisKKyAgICBmb3IoaSA9IDA7IGkgPD0gQ0FSRV9UQUdfSVBWNjtpKyspCisgICAgeworICAgICAgICBpZigwID09IHBGaWx0ZXJfY2ZnLT5jYXJlVGFnLnRhZ1R5cGVbaV0ubWFzayApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhcmVUYWdNYXNrICY9ICB+KDEgPDwgaSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBjYXJlVGFnTWFzayB8PSAoMSA8PCBpKTsKKyAgICAgICAgICAgIGlmKDAgPT0gcEZpbHRlcl9jZmctPmNhcmVUYWcudGFnVHlwZVtpXS52YWx1ZSApCisgICAgICAgICAgICAgICAgY2FyZVRhZ0RhdGEgJj0gfigxIDw8IGkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNhcmVUYWdEYXRhIHw9ICgxIDw8IGkpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yKGkgPSAwOyBpIDwgUlRMODM2N0NfQUNMVEVNUExBVEVOTzsgaSsrKQorICAgIHsKKyAgICAgICAgYWNsUnVsZVtpXS5kYXRhX2JpdHMudGFnX2V4aXN0ID0gKGNhcmVUYWdEYXRhKSAmIEFDTF9SVUxFX0NBUkVUQUdfTUFTSzsKKyAgICAgICAgYWNsUnVsZVtpXS5jYXJlX2JpdHMudGFnX2V4aXN0ID0gKGNhcmVUYWdNYXNrKSAmIEFDTF9SVUxFX0NBUkVUQUdfTUFTSzsKKyAgICB9CisKKyAgICBSVEtfQ0hLX1BPUlRNQVNLX1ZBTElEKCZwRmlsdGVyX2NmZy0+YWN0aXZlcG9ydC52YWx1ZSk7CisgICAgUlRLX0NIS19QT1JUTUFTS19WQUxJRCgmcEZpbHRlcl9jZmctPmFjdGl2ZXBvcnQubWFzayk7CisKKyAgICBmb3IoaSA9IDA7IGkgPCBSVEw4MzY3Q19BQ0xURU1QTEFURU5POyBpKyspCisgICAgeworICAgICAgICBpZihUUlVFID09IGFjbFJ1bGVbaV0udmFsaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKHJ0a19zd2l0Y2hfcG9ydG1hc2tfTDJQX2dldCgmcEZpbHRlcl9jZmctPmFjdGl2ZXBvcnQudmFsdWUsICZwb3J0bWFzaykgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9NQVNLOworCisgICAgICAgICAgICBhY2xSdWxlW2ldLmRhdGFfYml0cy5hY3RpdmVfcG9ydG1zayA9IHBvcnRtYXNrOworCisgICAgICAgICAgICBpZihydGtfc3dpdGNoX3BvcnRtYXNrX0wyUF9nZXQoJnBGaWx0ZXJfY2ZnLT5hY3RpdmVwb3J0Lm1hc2ssICZwb3J0bWFzaykgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9NQVNLOworCisgICAgICAgICAgICBhY2xSdWxlW2ldLmNhcmVfYml0cy5hY3RpdmVfcG9ydG1zayA9IHBvcnRtYXNrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYocEZpbHRlcl9jZmctPmludmVydCA+PSBGSUxURVJfSU5WRVJUX0VORCApCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKworICAgIC8qTGFzdCBhY3Rpb24gZ2V0cyBoaWdoIHByaW9yaXR5IGlmIGFjdGlvbnMgYXJlIHRoZSBzYW1lKi8KKyAgICBtZW1zZXQoJmFjbEFjdCwgMCwgc2l6ZW9mKHJ0bDgzNjdjX2FjbF9hY3RfdCkpOworICAgIGFjbEFjdEN0cmwgPSAwOworICAgIGZvcihhY3RUeXBlID0gMDsgYWN0VHlwZSA8IEZJTFRFUl9FTkFDVF9FTkQ7IGFjdFR5cGUgKyspCisgICAgeworICAgICAgICBpZihwRmlsdGVyX2FjdGlvbi0+YWN0RW5hYmxlW2FjdFR5cGVdKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGFjdFR5cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBjYXNlIEZJTFRFUl9FTkFDVF9DVkxBTl9JTkdSRVNTOgorICAgICAgICAgICAgICAgIGlmKHBGaWx0ZXJfYWN0aW9uLT5maWx0ZXJDdmxhblZpZCA+IFJUTDgzNjdDX0VWSURNQVgpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRrX3ZsYW5fY2hlY2tBbmRDcmVhdGVNYnIocEZpbHRlcl9hY3Rpb24tPmZpbHRlckN2bGFuVmlkLCAmdmlkeCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFjbEFjdC5jYWN0ID0gRklMVEVSX0VOQUNUX0NWTEFOX1RZUEUoYWN0VHlwZSk7CisgICAgICAgICAgICAgICAgYWNsQWN0LmN2aWR4X2NhY3QgPSB2aWR4OworCisgICAgICAgICAgICAgICAgaWYoYWNsQWN0Q3RybCAmKEZJTFRFUl9FTkFDVF9DVkxBTl9NQVNLKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKGFjbEFjdC5jYWN0X2V4dCA9PSBGSUxURVJfRU5BQ1RfQ0FDVEVYVF9UQUdPTkxZKQorICAgICAgICAgICAgICAgICAgICAgICAgYWNsQWN0LmNhY3RfZXh0ID0gRklMVEVSX0VOQUNUX0NBQ1RFWFRfQk9USFZMQU5UQUc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFjbEFjdC5jYWN0X2V4dCA9IEZJTFRFUl9FTkFDVF9DQUNURVhUX1ZMQU5PTkxZOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGFjbEFjdEN0cmwgfD0gRklMVEVSX0VOQUNUX0NWTEFOX01BU0s7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEZJTFRFUl9FTkFDVF9DVkxBTl9FR1JFU1M6CisgICAgICAgICAgICAgICAgaWYocEZpbHRlcl9hY3Rpb24tPmZpbHRlckN2bGFuVmlkID4gUlRMODM2N0NfRVZJRE1BWCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGtfdmxhbl9jaGVja0FuZENyZWF0ZU1icihwRmlsdGVyX2FjdGlvbi0+ZmlsdGVyQ3ZsYW5WaWQsICZ2aWR4KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgYWNsQWN0LmNhY3QgPSBGSUxURVJfRU5BQ1RfQ1ZMQU5fVFlQRShhY3RUeXBlKTsKKyAgICAgICAgICAgICAgICBhY2xBY3QuY3ZpZHhfY2FjdCA9IHZpZHg7CisKKyAgICAgICAgICAgICAgICBpZihhY2xBY3RDdHJsICYoRklMVEVSX0VOQUNUX0NWTEFOX01BU0spKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoYWNsQWN0LmNhY3RfZXh0ID09IEZJTFRFUl9FTkFDVF9DQUNURVhUX1RBR09OTFkpCisgICAgICAgICAgICAgICAgICAgICAgICBhY2xBY3QuY2FjdF9leHQgPSBGSUxURVJfRU5BQ1RfQ0FDVEVYVF9CT1RIVkxBTlRBRzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYWNsQWN0LmNhY3RfZXh0ID0gRklMVEVSX0VOQUNUX0NBQ1RFWFRfVkxBTk9OTFk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYWNsQWN0Q3RybCB8PSBGSUxURVJfRU5BQ1RfQ1ZMQU5fTUFTSzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICBjYXNlIEZJTFRFUl9FTkFDVF9DVkxBTl9TVklEOgorCisgICAgICAgICAgICAgICAgYWNsQWN0LmNhY3QgPSBGSUxURVJfRU5BQ1RfQ1ZMQU5fVFlQRShhY3RUeXBlKTsKKworICAgICAgICAgICAgICAgIGlmKGFjbEFjdEN0cmwgJihGSUxURVJfRU5BQ1RfQ1ZMQU5fTUFTSykpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZihhY2xBY3QuY2FjdF9leHQgPT0gRklMVEVSX0VOQUNUX0NBQ1RFWFRfVEFHT05MWSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjbEFjdC5jYWN0X2V4dCA9IEZJTFRFUl9FTkFDVF9DQUNURVhUX0JPVEhWTEFOVEFHOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhY2xBY3QuY2FjdF9leHQgPSBGSUxURVJfRU5BQ1RfQ0FDVEVYVF9WTEFOT05MWTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBhY2xBY3RDdHJsIHw9IEZJTFRFUl9FTkFDVF9DVkxBTl9NQVNLOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgIGNhc2UgRklMVEVSX0VOQUNUX1BPTElDSU5HXzE6CisgICAgICAgICAgICAgICAgaWYocEZpbHRlcl9hY3Rpb24tPmZpbHRlclBvbGljaW5nSWR4WzFdID49IChSVEtfTUVURVJfTlVNICsgUlRMODM2N0NfTUFYX0xPR19DTlRfTlVNKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgICAgICAgICAgICAgIGFjbEFjdC5jYWN0ID0gRklMVEVSX0VOQUNUX0NWTEFOX1RZUEUoYWN0VHlwZSk7CisgICAgICAgICAgICAgICAgYWNsQWN0LmN2aWR4X2NhY3QgPSBwRmlsdGVyX2FjdGlvbi0+ZmlsdGVyUG9saWNpbmdJZHhbMV07CisKKyAgICAgICAgICAgICAgICBpZihhY2xBY3RDdHJsICYoRklMVEVSX0VOQUNUX0NWTEFOX01BU0spKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoYWNsQWN0LmNhY3RfZXh0ID09IEZJTFRFUl9FTkFDVF9DQUNURVhUX1RBR09OTFkpCisgICAgICAgICAgICAgICAgICAgICAgICBhY2xBY3QuY2FjdF9leHQgPSBGSUxURVJfRU5BQ1RfQ0FDVEVYVF9CT1RIVkxBTlRBRzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYWNsQWN0LmNhY3RfZXh0ID0gRklMVEVSX0VOQUNUX0NBQ1RFWFRfVkxBTk9OTFk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYWNsQWN0Q3RybCB8PSBGSUxURVJfRU5BQ1RfQ1ZMQU5fTUFTSzsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBGSUxURVJfRU5BQ1RfU1ZMQU5fSU5HUkVTUzoKKyAgICAgICAgICAgIGNhc2UgRklMVEVSX0VOQUNUX1NWTEFOX0VHUkVTUzoKKworICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGtfc3ZsYW5fY2hlY2tBbmRDcmVhdGVNYnIocEZpbHRlcl9hY3Rpb24tPmZpbHRlclN2bGFuVmlkLCAmc3ZpZHgpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICBhY2xBY3Quc2FjdCA9IEZJTFRFUl9FTkFDVF9TVkxBTl9UWVBFKGFjdFR5cGUpOworICAgICAgICAgICAgICAgIGFjbEFjdC5zdmlkeF9zYWN0ID0gc3ZpZHg7CisgICAgICAgICAgICAgICAgYWNsQWN0Q3RybCB8PSBGSUxURVJfRU5BQ1RfU1ZMQU5fTUFTSzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRklMVEVSX0VOQUNUX1NWTEFOX0NWSUQ6CisKKyAgICAgICAgICAgICAgICBhY2xBY3Quc2FjdCA9IEZJTFRFUl9FTkFDVF9TVkxBTl9UWVBFKGFjdFR5cGUpOworICAgICAgICAgICAgICAgIGFjbEFjdEN0cmwgfD0gRklMVEVSX0VOQUNUX1NWTEFOX01BU0s7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEZJTFRFUl9FTkFDVF9QT0xJQ0lOR18yOgorICAgICAgICAgICAgICAgIGlmKHBGaWx0ZXJfYWN0aW9uLT5maWx0ZXJQb2xpY2luZ0lkeFsyXSA+PSAoUlRLX01FVEVSX05VTSArIFJUTDgzNjdDX01BWF9MT0dfQ05UX05VTSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICAgICAgICAgICAgICBhY2xBY3Quc2FjdCA9IEZJTFRFUl9FTkFDVF9TVkxBTl9UWVBFKGFjdFR5cGUpOworICAgICAgICAgICAgICAgIGFjbEFjdC5zdmlkeF9zYWN0ID0gcEZpbHRlcl9hY3Rpb24tPmZpbHRlclBvbGljaW5nSWR4WzJdOworICAgICAgICAgICAgICAgIGFjbEFjdEN0cmwgfD0gRklMVEVSX0VOQUNUX1NWTEFOX01BU0s7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEZJTFRFUl9FTkFDVF9QT0xJQ0lOR18wOgorICAgICAgICAgICAgICAgIGlmKHBGaWx0ZXJfYWN0aW9uLT5maWx0ZXJQb2xpY2luZ0lkeFswXSA+PSAoUlRLX01FVEVSX05VTSArIFJUTDgzNjdDX01BWF9MT0dfQ05UX05VTSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICAgICAgICAgICAgICBhY2xBY3QuYWNsbWV0ZXJpZHggPSBwRmlsdGVyX2FjdGlvbi0+ZmlsdGVyUG9saWNpbmdJZHhbMF07CisgICAgICAgICAgICAgICAgYWNsQWN0Q3RybCB8PSBGSUxURVJfRU5BQ1RfUE9MSUNJTkdfTUFTSzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRklMVEVSX0VOQUNUX1BSSU9SSVRZOgorICAgICAgICAgICAgY2FzZSBGSUxURVJfRU5BQ1RfMVBfUkVNQVJLOgorICAgICAgICAgICAgICAgIGlmKHBGaWx0ZXJfYWN0aW9uLT5maWx0ZXJQcmlvcml0eSA+IFJUTDgzNjdDX1BSSU1BWCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgICAgICAgICAgICAgIGFjbEFjdC5wcmlhY3QgPSBGSUxURVJfRU5BQ1RfUFJJX1RZUEUoYWN0VHlwZSk7CisgICAgICAgICAgICAgICAgYWNsQWN0LnByaWR4ID0gcEZpbHRlcl9hY3Rpb24tPmZpbHRlclByaW9yaXR5OworICAgICAgICAgICAgICAgIGFjbEFjdEN0cmwgfD0gRklMVEVSX0VOQUNUX1BSSU9SSVRZX01BU0s7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEZJTFRFUl9FTkFDVF9EU0NQX1JFTUFSSzoKKyAgICAgICAgICAgICAgICBpZihwRmlsdGVyX2FjdGlvbi0+ZmlsdGVyUHJpb3JpdHkgPiBSVEw4MzY3Q19EU0NQTUFYKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgICAgICAgICAgICAgYWNsQWN0LnByaWFjdCA9IEZJTFRFUl9FTkFDVF9QUklfVFlQRShhY3RUeXBlKTsKKyAgICAgICAgICAgICAgICBhY2xBY3QucHJpZHggPSBwRmlsdGVyX2FjdGlvbi0+ZmlsdGVyUHJpb3JpdHk7CisgICAgICAgICAgICAgICAgYWNsQWN0Q3RybCB8PSBGSUxURVJfRU5BQ1RfUFJJT1JJVFlfTUFTSzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRklMVEVSX0VOQUNUX1BPTElDSU5HXzM6CisgICAgICAgICAgICAgICAgaWYocEZpbHRlcl9hY3Rpb24tPmZpbHRlclByaW9yaXR5ID49IChSVEtfTUVURVJfTlVNICsgUlRMODM2N0NfTUFYX0xPR19DTlRfTlVNKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgICAgICAgICAgICAgIGFjbEFjdC5wcmlhY3QgPSBGSUxURVJfRU5BQ1RfUFJJX1RZUEUoYWN0VHlwZSk7CisgICAgICAgICAgICAgICAgYWNsQWN0LnByaWR4ID0gcEZpbHRlcl9hY3Rpb24tPmZpbHRlclBvbGljaW5nSWR4WzNdOworICAgICAgICAgICAgICAgIGFjbEFjdEN0cmwgfD0gRklMVEVSX0VOQUNUX1BSSU9SSVRZX01BU0s7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEZJTFRFUl9FTkFDVF9EUk9QOgorCisgICAgICAgICAgICAgICAgYWNsQWN0LmZ3ZGFjdCA9IEZJTFRFUl9FTkFDVF9GV0RfVFlQRShGSUxURVJfRU5BQ1RfUkVESVJFQ1QpOworICAgICAgICAgICAgICAgIGFjbEFjdC5md2RhY3RfZXh0ID0gRkFMU0U7CisKKyAgICAgICAgICAgICAgICBhY2xBY3QuZndkcG1hc2sgPSAwOworICAgICAgICAgICAgICAgIGFjbEFjdEN0cmwgfD0gRklMVEVSX0VOQUNUX0ZXRF9NQVNLOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBGSUxURVJfRU5BQ1RfUkVESVJFQ1Q6CisgICAgICAgICAgICAgICAgUlRLX0NIS19QT1JUTUFTS19WQUxJRCgmcEZpbHRlcl9hY3Rpb24tPmZpbHRlclBvcnRtYXNrKTsKKworICAgICAgICAgICAgICAgIGFjbEFjdC5md2RhY3QgPSBGSUxURVJfRU5BQ1RfRldEX1RZUEUoYWN0VHlwZSk7CisgICAgICAgICAgICAgICAgYWNsQWN0LmZ3ZGFjdF9leHQgPSBGQUxTRTsKKworICAgICAgICAgICAgICAgIGlmKHJ0a19zd2l0Y2hfcG9ydG1hc2tfTDJQX2dldCgmcEZpbHRlcl9hY3Rpb24tPmZpbHRlclBvcnRtYXNrLCAmcG9ydG1hc2spICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX01BU0s7CisgICAgICAgICAgICAgICAgYWNsQWN0LmZ3ZHBtYXNrID0gcG9ydG1hc2s7CisKKyAgICAgICAgICAgICAgICBhY2xBY3RDdHJsIHw9IEZJTFRFUl9FTkFDVF9GV0RfTUFTSzsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBGSUxURVJfRU5BQ1RfQUREX0RTVFBPUlQ6CisgICAgICAgICAgICAgICAgUlRLX0NIS19QT1JUTUFTS19WQUxJRCgmcEZpbHRlcl9hY3Rpb24tPmZpbHRlclBvcnRtYXNrKTsKKworICAgICAgICAgICAgICAgIGFjbEFjdC5md2RhY3QgPSBGSUxURVJfRU5BQ1RfRldEX1RZUEUoYWN0VHlwZSk7CisgICAgICAgICAgICAgICAgYWNsQWN0LmZ3ZGFjdF9leHQgPSBGQUxTRTsKKworICAgICAgICAgICAgICAgIGlmKHJ0a19zd2l0Y2hfcG9ydG1hc2tfTDJQX2dldCgmcEZpbHRlcl9hY3Rpb24tPmZpbHRlclBvcnRtYXNrLCAmcG9ydG1hc2spICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX01BU0s7CisgICAgICAgICAgICAgICAgYWNsQWN0LmZ3ZHBtYXNrID0gcG9ydG1hc2s7CisKKyAgICAgICAgICAgICAgICBhY2xBY3RDdHJsIHw9IEZJTFRFUl9FTkFDVF9GV0RfTUFTSzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRklMVEVSX0VOQUNUX01JUlJPUjoKKyAgICAgICAgICAgICAgICBSVEtfQ0hLX1BPUlRNQVNLX1ZBTElEKCZwRmlsdGVyX2FjdGlvbi0+ZmlsdGVyUG9ydG1hc2spOworCisgICAgICAgICAgICAgICAgYWNsQWN0LmZ3ZGFjdCA9IEZJTFRFUl9FTkFDVF9GV0RfVFlQRShhY3RUeXBlKTsKKyAgICAgICAgICAgICAgICBhY2xBY3QuY2FjdF9leHQgPSBGQUxTRTsKKworICAgICAgICAgICAgICAgIGlmKHJ0a19zd2l0Y2hfcG9ydG1hc2tfTDJQX2dldCgmcEZpbHRlcl9hY3Rpb24tPmZpbHRlclBvcnRtYXNrLCAmcG9ydG1hc2spICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX01BU0s7CisgICAgICAgICAgICAgICAgYWNsQWN0LmZ3ZHBtYXNrID0gcG9ydG1hc2s7CisKKyAgICAgICAgICAgICAgICBhY2xBY3RDdHJsIHw9IEZJTFRFUl9FTkFDVF9GV0RfTUFTSzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRklMVEVSX0VOQUNUX1RSQVBfQ1BVOgorCisgICAgICAgICAgICAgICAgYWNsQWN0LmZ3ZGFjdCA9IEZJTFRFUl9FTkFDVF9GV0RfVFlQRShhY3RUeXBlKTsKKyAgICAgICAgICAgICAgICBhY2xBY3QuZndkYWN0X2V4dCA9IEZBTFNFOworCisgICAgICAgICAgICAgICAgYWNsQWN0Q3RybCB8PSBGSUxURVJfRU5BQ1RfRldEX01BU0s7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEZJTFRFUl9FTkFDVF9DT1BZX0NQVToKKyAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0NwdXRhZ1RyYXBQb3J0KCZjcHVQb3J0KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgYWNsQWN0LmZ3ZGFjdCA9IEZJTFRFUl9FTkFDVF9GV0RfVFlQRShGSUxURVJfRU5BQ1RfTUlSUk9SKTsKKyAgICAgICAgICAgICAgICBhY2xBY3QuZndkYWN0X2V4dCA9IEZBTFNFOworCisgICAgICAgICAgICAgICAgYWNsQWN0LmZ3ZHBtYXNrID0gMSA8PCBjcHVQb3J0OworICAgICAgICAgICAgICAgIGFjbEFjdEN0cmwgfD0gRklMVEVSX0VOQUNUX0ZXRF9NQVNLOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBGSUxURVJfRU5BQ1RfSVNPTEFUSU9OOgorICAgICAgICAgICAgICAgIFJUS19DSEtfUE9SVE1BU0tfVkFMSUQoJnBGaWx0ZXJfYWN0aW9uLT5maWx0ZXJQb3J0bWFzayk7CisKKyAgICAgICAgICAgICAgICBhY2xBY3QuZndkYWN0X2V4dCA9IFRSVUU7CisKKyAgICAgICAgICAgICAgICBpZihydGtfc3dpdGNoX3BvcnRtYXNrX0wyUF9nZXQoJnBGaWx0ZXJfYWN0aW9uLT5maWx0ZXJQb3J0bWFzaywgJnBvcnRtYXNrKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9NQVNLOworICAgICAgICAgICAgICAgIGFjbEFjdC5md2RwbWFzayA9IHBvcnRtYXNrOworCisgICAgICAgICAgICAgICAgYWNsQWN0Q3RybCB8PSBGSUxURVJfRU5BQ1RfRldEX01BU0s7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgRklMVEVSX0VOQUNUX0lOVEVSUlVQVDoKKworICAgICAgICAgICAgICAgIGFjbEFjdC5hY2xpbnQgPSBUUlVFOworICAgICAgICAgICAgICAgIGFjbEFjdEN0cmwgfD0gRklMVEVSX0VOQUNUX0lOVEdQSU9fTUFTSzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRklMVEVSX0VOQUNUX0dQTzoKKworICAgICAgICAgICAgICAgIGFjbEFjdC5ncGlvX2VuID0gVFJVRTsKKyAgICAgICAgICAgICAgICBhY2xBY3QuZ3Bpb19waW4gPSBwRmlsdGVyX2FjdGlvbi0+ZmlsdGVyUGluOworICAgICAgICAgICAgICAgIGFjbEFjdEN0cmwgfD0gRklMVEVSX0VOQUNUX0lOVEdQSU9fTUFTSzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICBjYXNlIEZJTFRFUl9FTkFDVF9FR1JFU1NDVEFHX1RBRzoKKworICAgICAgICAgICAgICAgIGlmKGFjbEFjdEN0cmwgJihGSUxURVJfRU5BQ1RfQ1ZMQU5fTUFTSykpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZihhY2xBY3QuY2FjdF9leHQgPT0gRklMVEVSX0VOQUNUX0NBQ1RFWFRfVkxBTk9OTFkpCisgICAgICAgICAgICAgICAgICAgICAgICBhY2xBY3QuY2FjdF9leHQgPSBGSUxURVJfRU5BQ1RfQ0FDVEVYVF9CT1RIVkxBTlRBRzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYWNsQWN0LmNhY3RfZXh0ID0gRklMVEVSX0VOQUNUX0NBQ1RFWFRfVEFHT05MWTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYWNsQWN0LnRhZ19mbXQgPSBGSUxURVJfQ1RBR0ZNVF9UQUc7CisgICAgICAgICAgICAgICAgYWNsQWN0Q3RybCB8PSBGSUxURVJfRU5BQ1RfQ1ZMQU5fTUFTSzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICBjYXNlIEZJTFRFUl9FTkFDVF9FR1JFU1NDVEFHX1VOVEFHOgorCisgICAgICAgICAgICAgICAgaWYoYWNsQWN0Q3RybCAmKEZJTFRFUl9FTkFDVF9DVkxBTl9NQVNLKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKGFjbEFjdC5jYWN0X2V4dCA9PSBGSUxURVJfRU5BQ1RfQ0FDVEVYVF9WTEFOT05MWSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjbEFjdC5jYWN0X2V4dCA9IEZJTFRFUl9FTkFDVF9DQUNURVhUX0JPVEhWTEFOVEFHOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhY2xBY3QuY2FjdF9leHQgPSBGSUxURVJfRU5BQ1RfQ0FDVEVYVF9UQUdPTkxZOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhY2xBY3QudGFnX2ZtdCA9IEZJTFRFUl9DVEFHRk1UX1VOVEFHOworICAgICAgICAgICAgICAgIGFjbEFjdEN0cmwgfD0gRklMVEVSX0VOQUNUX0NWTEFOX01BU0s7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgY2FzZSBGSUxURVJfRU5BQ1RfRUdSRVNTQ1RBR19LRUVQOgorCisgICAgICAgICAgICAgICAgaWYoYWNsQWN0Q3RybCAmKEZJTFRFUl9FTkFDVF9DVkxBTl9NQVNLKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKGFjbEFjdC5jYWN0X2V4dCA9PSBGSUxURVJfRU5BQ1RfQ0FDVEVYVF9WTEFOT05MWSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjbEFjdC5jYWN0X2V4dCA9IEZJTFRFUl9FTkFDVF9DQUNURVhUX0JPVEhWTEFOVEFHOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhY2xBY3QuY2FjdF9leHQgPSBGSUxURVJfRU5BQ1RfQ0FDVEVYVF9UQUdPTkxZOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhY2xBY3QudGFnX2ZtdCA9IEZJTFRFUl9DVEFHRk1UX0tFRVA7CisgICAgICAgICAgICAgICAgYWNsQWN0Q3RybCB8PSBGSUxURVJfRU5BQ1RfQ1ZMQU5fTUFTSzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICBjYXNlIEZJTFRFUl9FTkFDVF9FR1JFU1NDVEFHX0tFRVBBTkQxUFJNSzoKKworICAgICAgICAgICAgICAgIGlmKGFjbEFjdEN0cmwgJihGSUxURVJfRU5BQ1RfQ1ZMQU5fTUFTSykpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZihhY2xBY3QuY2FjdF9leHQgPT0gRklMVEVSX0VOQUNUX0NBQ1RFWFRfVkxBTk9OTFkpCisgICAgICAgICAgICAgICAgICAgICAgICBhY2xBY3QuY2FjdF9leHQgPSBGSUxURVJfRU5BQ1RfQ0FDVEVYVF9CT1RIVkxBTlRBRzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYWNsQWN0LmNhY3RfZXh0ID0gRklMVEVSX0VOQUNUX0NBQ1RFWFRfVEFHT05MWTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYWNsQWN0LnRhZ19mbXQgPSBGSUxURVJfQ1RBR0ZNVF9LRUVQMVBSTUs7CisgICAgICAgICAgICAgICAgYWNsQWN0Q3RybCB8PSBGSUxURVJfRU5BQ1RfQ1ZMQU5fTUFTSzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gUlRfRVJSX0ZJTFRFUl9JTkFDTF9BQ1RfTk9UX1NVUFBPUlQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8qY2hlY2sgaWYgZnJlZSBBQ0wgcnVsZXMgYXJlIGVub3VnaCovCisgICAgZm9yKGkgPSBmaWx0ZXJfaWQ7IGkgPCAoZmlsdGVyX2lkICsgbm9SdWxlc0FkZCk7IGkrKykKKyAgICB7CisgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljQWNsUnVsZShpLCAmdGVtcFJ1bGUpKSAhPSBSVF9FUlJfT0sgKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZih0ZW1wUnVsZS52YWxpZCA9PSBUUlVFKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gUlRfRVJSX1RCTF9GVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgcnVsZUlkID0gMDsKKyAgICBmb3IoaSA9IDA7IGkgPCBSVEw4MzY3Q19BQ0xURU1QTEFURU5POyBpKyspCisgICAgeworICAgICAgICBpZihhY2xSdWxlW2ldLnZhbGlkID09IFRSVUUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIHdyaXRlIEFDTCBhY3Rpb24gY29udHJvbCAqLworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNBY2xBY3RDdHJsKGZpbHRlcl9pZCArIHJ1bGVJZCwgYWNsQWN0Q3RybCkpICE9IFJUX0VSUl9PSyApCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIC8qIHdyaXRlIEFDTCBhY3Rpb24gKi8KKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljQWNsQWN0KGZpbHRlcl9pZCArIHJ1bGVJZCwgJmFjbEFjdCkpICE9IFJUX0VSUl9PSyApCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgLyogd3JpdGUgQUNMIG5vdCAqLworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNBY2xOb3QoZmlsdGVyX2lkICsgcnVsZUlkLCBwRmlsdGVyX2NmZy0+aW52ZXJ0KSkgIT0gUlRfRVJSX09LICkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgLyogd3JpdGUgQUNMIHJ1bGUgKi8KKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljQWNsUnVsZShmaWx0ZXJfaWQgKyBydWxlSWQsICZhY2xSdWxlW2ldKSkgIT0gUlRfRVJSX09LICkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAvKiBvbmx5IHRoZSBmaXJzdCBydWxlIHdpbGwgYmUgd3JpdHRlbiB3aXRoIGlucHV0IGFjdGlvbiBjb250cm9sLCBhY2xBY3RDdHJsIG9mIG90aGVyIHJ1bGVzIHdpbGwgYmUgemVybyAqLworICAgICAgICAgICAgYWNsQWN0Q3RybCA9IDA7CisgICAgICAgICAgICBtZW1zZXQoJmFjbEFjdCwgMCwgc2l6ZW9mKHJ0bDgzNjdjX2FjbF9hY3RfdCkpOworCisgICAgICAgICAgICBydWxlSWQgKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfZmlsdGVyX2lnckFjbF9jZmdfZGVsCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgRGVsZXRlIGFuIEFDTCBjb25maWd1cmF0aW9uIGZyb20gQVNJQworICogSW5wdXQ6CisgKiAgICAgIGZpbHRlcl9pZCAgIC0gU3RhcnQgaW5kZXggb2YgQUNMIGNvbmZpZ3VyYXRpb24uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0ZJTFRFUl9FTlRSWUlEWCAgLSBJbnZhbGlkIGZpbHRlcl9pZC4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgZnVuY3Rpb24gZGVsZXRlIGEgZ3JvdXAgb2YgQUNMIHJ1bGVzIHN0YXJ0aW5nIGZyb20gZmlsdGVyX2lkLgorICovCitydGtfYXBpX3JldF90IHJ0a19maWx0ZXJfaWdyQWNsX2NmZ19kZWwocnRrX2ZpbHRlcl9pZF90IGZpbHRlcl9pZCkKK3sKKyAgICBydGw4MzY3Y19hY2xydWxlIGluaXRSdWxlOworICAgIHJ0bDgzNjdjX2FjbF9hY3RfdCAgaW5pdEFjdDsKKyAgICBydGtfYXBpX3JldF90IHJldDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihmaWx0ZXJfaWQgPiBSVEw4MzY3Q19BQ0xSVUxFTUFYICkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9GSUxURVJfRU5UUllJRFg7CisKKyAgICBtZW1zZXQoJmluaXRSdWxlLCAwLCBzaXplb2YocnRsODM2N2NfYWNscnVsZSkpOworICAgIG1lbXNldCgmaW5pdEFjdCwgMCwgc2l6ZW9mKHJ0bDgzNjdjX2FjbF9hY3RfdCkpOworCisgICAgaWYoKHJldCA9IHJ0bDgzNjdjX3NldEFzaWNBY2xSdWxlKGZpbHRlcl9pZCwgJmluaXRSdWxlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0OworICAgIGlmKChyZXQgPSBydGw4MzY3Y19zZXRBc2ljQWNsQWN0Q3RybChmaWx0ZXJfaWQsIEZJTFRFUl9FTkFDVF9JTklUX01BU0spKSE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICBpZigocmV0ID0gcnRsODM2N2Nfc2V0QXNpY0FjbEFjdChmaWx0ZXJfaWQsICZpbml0QWN0KSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0OworICAgIGlmKChyZXQgPSBydGw4MzY3Y19zZXRBc2ljQWNsTm90KGZpbHRlcl9pZCwgRElTQUJMRUQpKSAhPSBSVF9FUlJfT0sgKQorICAgICAgICByZXR1cm4gcmV0OworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2ZpbHRlcl9pZ3JBY2xfY2ZnX2RlbEFsbAorICogRGVzY3JpcHRpb246CisgKiAgICAgIERlbGV0ZSBhbGwgQUNMIGVudHJpZXMgZnJvbSBBU0lDCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBUaGlzIGZ1bmN0aW9uIGRlbGV0ZSBhbGwgQUNMIGNvbmZpZ3VyYXRpb24gZnJvbSBBU0lDLgorICovCitydGtfYXBpX3JldF90IHJ0a19maWx0ZXJfaWdyQWNsX2NmZ19kZWxBbGwodm9pZCkKK3sKKyAgICBydGtfdWludDMyICAgICAgICAgICAgaTsKKyAgICBydGtfYXBpX3JldF90ICAgICByZXQ7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgZm9yKGkgPSAwOyBpIDwgUlRMODM2N0NfQUNMUlVMRU5POyBpKyspCisgICAgeworICAgICAgICBpZigocmV0ID0gcnRsODM2N2Nfc2V0QXNpY0FjbEFjdEN0cmwoaSwgRklMVEVSX0VOQUNUX0lOSVRfTUFTSykpIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgaWYoKHJldCA9IHJ0bDgzNjdjX3NldEFzaWNBY2xOb3QoaSwgRElTQUJMRUQpKSAhPSBSVF9FUlJfT0sgKQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfQUNMX1JFU0VUX0NGRywgUlRMODM2N0NfQUNMX1JFU0VUX0NGR19PRkZTRVQsIFRSVUUpOzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2ZpbHRlcl9pZ3JBY2xfY2ZnX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBvbmUgaW5ncmVzcyBhY2wgY29uZmlndXJhdGlvbiBmcm9tIEFTSUMuCisgKiBJbnB1dDoKKyAqICAgICAgZmlsdGVyX2lkICAgICAgIC0gU3RhcnQgaW5kZXggb2YgQUNMIGNvbmZpZ3VyYXRpb24uCisgKiBPdXRwdXQ6CisgKiAgICAgIHBGaWx0ZXJfY2ZnICAgICAtIGJ1ZmZlciBwb2ludGVyIG9mIGluZ3Jlc3MgYWNsIGRhdGEKKyAqICAgICAgcEZpbHRlcl9hY3Rpb24gIC0gYnVmZmVyIHBvaW50ZXIgb2YgaW5ncmVzcyBhY2wgYWN0aW9uCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgICAgIC0gUG9pbnRlciBwRmlsdGVyX2FjdGlvbiBvciBwRmlsdGVyX2NmZyBwb2ludCB0byBOVUxMLgorICogICAgICBSVF9FUlJfRklMVEVSX0VOVFJZSURYICAtIEludmFsaWQgZW50cnkgaW5kZXguCisgKiBOb3RlOgorICogICAgICBUaGlzIGZ1bmN0aW9uIGdldCBjb25maWd1cmF0aW9uIGZyb20gQVNJQy4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfZmlsdGVyX2lnckFjbF9jZmdfZ2V0KHJ0a19maWx0ZXJfaWRfdCBmaWx0ZXJfaWQsIHJ0a19maWx0ZXJfY2ZnX3Jhd190ICpwRmlsdGVyX2NmZywgcnRrX2ZpbHRlcl9hY3Rpb25fdCAqcEFjdGlvbikKK3sKKyAgICBydGtfYXBpX3JldF90ICAgICAgICAgICAgICAgcmV0VmFsOworICAgIHJ0a191aW50MzIgICAgICAgICAgICAgICAgICBpLCB0bXA7CisgICAgcnRsODM2N2NfYWNscnVsZSAgICAgICAgICAgIGFjbFJ1bGU7CisgICAgcnRsODM2N2NfYWNsX2FjdF90ICAgICAgICAgIGFjbEFjdDsKKyAgICBydGtfdWludDMyICAgICAgICAgICAgICAgICAgY3B1UG9ydDsKKyAgICBydGw4MzY3Y19hY2x0ZW1wbGF0ZV90ICAgICAgdHlwZTsKKyAgICBydGw4MzY3Y19zdmxhbl9tZW1jb25mX3QgICAgc3ZsYW5fY2ZnOworICAgIHJ0bDgzNjdjX3ZsYW5jb25maWd1c2VyICAgICB2bGFuTUM7CisgICAgcnRrX3VpbnQzMiAgICAgICAgICAgICAgICAgIHBoeVBtYXNrOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKE5VTEwgPT0gcEZpbHRlcl9jZmcgfHwgTlVMTCA9PSBwQWN0aW9uKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmKGZpbHRlcl9pZCA+IFJUTDgzNjdDX0FDTFJVTEVNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfRU5UUllfSU5ERVg7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNBY2xSdWxlKGZpbHRlcl9pZCwgJmFjbFJ1bGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAvKiBDaGVjayB2YWxpZCAqLworICAgIGlmKGFjbFJ1bGUudmFsaWQgPT0gMCkKKyAgICB7CisgICAgICAgIHBGaWx0ZXJfY2ZnLT52YWxpZCA9IERJU0FCTEVEOworICAgICAgICByZXR1cm4gUlRfRVJSX09LOworICAgIH0KKworICAgIHBoeVBtYXNrID0gYWNsUnVsZS5kYXRhX2JpdHMuYWN0aXZlX3BvcnRtc2s7CisgICAgaWYocnRrX3N3aXRjaF9wb3J0bWFza19QMkxfZ2V0KHBoeVBtYXNrLCYocEZpbHRlcl9jZmctPmFjdGl2ZXBvcnQudmFsdWUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiBSVF9FUlJfRkFJTEVEOworCisgICAgcGh5UG1hc2sgPSBhY2xSdWxlLmNhcmVfYml0cy5hY3RpdmVfcG9ydG1zazsKKyAgICBpZihydGtfc3dpdGNoX3BvcnRtYXNrX1AyTF9nZXQocGh5UG1hc2ssJihwRmlsdGVyX2NmZy0+YWN0aXZlcG9ydC5tYXNrKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKKworICAgIGZvcihpID0gMDsgaSA8PSBDQVJFX1RBR19JUFY2OyBpKyspCisgICAgeworICAgICAgICBpZihhY2xSdWxlLmRhdGFfYml0cy50YWdfZXhpc3QgJiAoMSA8PCBpKSkKKyAgICAgICAgICAgIHBGaWx0ZXJfY2ZnLT5jYXJlVGFnLnRhZ1R5cGVbaV0udmFsdWUgPSAxOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwRmlsdGVyX2NmZy0+Y2FyZVRhZy50YWdUeXBlW2ldLnZhbHVlID0gMDsKKworICAgICAgICBpZiAoYWNsUnVsZS5jYXJlX2JpdHMudGFnX2V4aXN0ICYgKDEgPDwgaSkpCisgICAgICAgICAgICBwRmlsdGVyX2NmZy0+Y2FyZVRhZy50YWdUeXBlW2ldLm1hc2sgPSAxOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwRmlsdGVyX2NmZy0+Y2FyZVRhZy50YWdUeXBlW2ldLm1hc2sgPSAwOworICAgIH0KKworICAgIGlmKGZpbHRlcl9hZHZhbmNlQ2FyZXRhZ0ZpZWxkW2FjbFJ1bGUuZGF0YV9iaXRzLnR5cGVdWzBdID09IFRSVUUpCisgICAgeworICAgICAgICAvKiBBZHZhbmNlZCBDYXJlIHRhZyBzZXR0aW5nICovCisgICAgICAgIGZvcihpID0gQ0FSRV9UQUdfVENQOyBpIDwgQ0FSRV9UQUdfRU5EOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKGFjbFJ1bGUuZGF0YV9iaXRzLmZpZWxkW2ZpbHRlcl9hZHZhbmNlQ2FyZXRhZ0ZpZWxkW2FjbFJ1bGUuZGF0YV9iaXRzLnR5cGVdWzFdXSAmICgweDAwMDEgPDwgKGktQ0FSRV9UQUdfVENQKSkgKQorICAgICAgICAgICAgICAgIHBGaWx0ZXJfY2ZnLT5jYXJlVGFnLnRhZ1R5cGVbaV0udmFsdWUgPSAxOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHBGaWx0ZXJfY2ZnLT5jYXJlVGFnLnRhZ1R5cGVbaV0udmFsdWUgPSAwOworCisgICAgICAgICAgICBpZihhY2xSdWxlLmNhcmVfYml0cy5maWVsZFtmaWx0ZXJfYWR2YW5jZUNhcmV0YWdGaWVsZFthY2xSdWxlLmNhcmVfYml0cy50eXBlXVsxXV0gJiAoMHgwMDAxIDw8IChpLUNBUkVfVEFHX1RDUCkpICkKKyAgICAgICAgICAgICAgICBwRmlsdGVyX2NmZy0+Y2FyZVRhZy50YWdUeXBlW2ldLm1hc2sgPSAxOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHBGaWx0ZXJfY2ZnLT5jYXJlVGFnLnRhZ1R5cGVbaV0ubWFzayA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IoaSA9IDA7IGkgPCBSVEw4MzY3Q19BQ0xSVUxFRklFTEROTzsgaSsrKQorICAgIHsKKyAgICAgICAgcEZpbHRlcl9jZmctPmNhcmVGaWVsZFJhd1tpXSA9IGFjbFJ1bGUuY2FyZV9iaXRzLmZpZWxkW2ldOworICAgICAgICBwRmlsdGVyX2NmZy0+ZGF0YUZpZWxkUmF3W2ldID0gYWNsUnVsZS5kYXRhX2JpdHMuZmllbGRbaV07CisgICAgfQorCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljQWNsTm90KGZpbHRlcl9pZCwgJnRtcCkpIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcEZpbHRlcl9jZmctPmludmVydCA9IHRtcDsKKworICAgIHBGaWx0ZXJfY2ZnLT52YWxpZCA9IGFjbFJ1bGUudmFsaWQ7CisKKyAgICBtZW1zZXQocEFjdGlvbiwgMCwgc2l6ZW9mKHJ0a19maWx0ZXJfYWN0aW9uX3QpKTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0FjbEFjdEN0cmwoZmlsdGVyX2lkLCAmdG1wKSkhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNBY2xBY3QoZmlsdGVyX2lkLCAmYWNsQWN0KSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYodG1wICYgRklMVEVSX0VOQUNUX0ZXRF9NQVNLKQorICAgIHsKKyAgICAgICAgaWYoVFJVRSA9PSBhY2xBY3QuZndkYWN0X2V4dCkKKyAgICAgICAgeworICAgICAgICAgICAgcEFjdGlvbi0+YWN0RW5hYmxlW0ZJTFRFUl9FTkFDVF9JU09MQVRJT05dID0gVFJVRTsKKworICAgICAgICAgICAgcGh5UG1hc2sgPSBhY2xBY3QuZndkcG1hc2s7CisgICAgICAgICAgICBpZihydGtfc3dpdGNoX3BvcnRtYXNrX1AyTF9nZXQocGh5UG1hc2ssJihwQWN0aW9uLT5maWx0ZXJQb3J0bWFzaykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKGFjbEFjdC5md2RhY3QgPT0gUlRMODM2N0NfQUNMX0ZXRF9UUkFQKQorICAgICAgICB7CisgICAgICAgICAgICBwQWN0aW9uLT5hY3RFbmFibGVbRklMVEVSX0VOQUNUX1RSQVBfQ1BVXSA9IFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYWNsQWN0LmZ3ZGFjdCA9PSBSVEw4MzY3Q19BQ0xfRldEX01JUlJPUkZVTlRJT04gKQorICAgICAgICB7CisgICAgICAgICAgICBwQWN0aW9uLT5hY3RFbmFibGVbRklMVEVSX0VOQUNUX01JUlJPUl0gPSBUUlVFOworCisgICAgICAgICAgICBwaHlQbWFzayA9IGFjbEFjdC5md2RwbWFzazsKKyAgICAgICAgICAgIGlmKHJ0a19zd2l0Y2hfcG9ydG1hc2tfUDJMX2dldChwaHlQbWFzaywmKHBBY3Rpb24tPmZpbHRlclBvcnRtYXNrKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiBSVF9FUlJfRkFJTEVEOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGFjbEFjdC5md2RhY3QgPT0gUlRMODM2N0NfQUNMX0ZXRF9SRURJUkVDVCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoYWNsQWN0LmZ3ZHBtYXNrID09IDAgKQorICAgICAgICAgICAgICAgIHBBY3Rpb24tPmFjdEVuYWJsZVtGSUxURVJfRU5BQ1RfRFJPUF0gPSBUUlVFOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBBY3Rpb24tPmFjdEVuYWJsZVtGSUxURVJfRU5BQ1RfUkVESVJFQ1RdID0gVFJVRTsKKworICAgICAgICAgICAgICAgIHBoeVBtYXNrID0gYWNsQWN0LmZ3ZHBtYXNrOworICAgICAgICAgICAgICAgIGlmKHJ0a19zd2l0Y2hfcG9ydG1hc2tfUDJMX2dldChwaHlQbWFzaywmKHBBY3Rpb24tPmZpbHRlclBvcnRtYXNrKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChhY2xBY3QuZndkYWN0ID09IFJUTDgzNjdDX0FDTF9GV0RfTUlSUk9SKQorICAgICAgICB7CisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0NwdXRhZ1RyYXBQb3J0KCZjcHVQb3J0KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICBpZiAoYWNsQWN0LmZ3ZHBtYXNrID09ICgxIDw8IGNwdVBvcnQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBBY3Rpb24tPmFjdEVuYWJsZVtGSUxURVJfRU5BQ1RfQ09QWV9DUFVdID0gVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwQWN0aW9uLT5hY3RFbmFibGVbRklMVEVSX0VOQUNUX0FERF9EU1RQT1JUXSA9IFRSVUU7CisKKyAgICAgICAgICAgICAgICBwaHlQbWFzayA9IGFjbEFjdC5md2RwbWFzazsKKyAgICAgICAgICAgICAgICBpZihydGtfc3dpdGNoX3BvcnRtYXNrX1AyTF9nZXQocGh5UG1hc2ssJihwQWN0aW9uLT5maWx0ZXJQb3J0bWFzaykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9GQUlMRUQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKHRtcCAmIEZJTFRFUl9FTkFDVF9QT0xJQ0lOR19NQVNLKQorICAgIHsKKyAgICAgICAgcEFjdGlvbi0+YWN0RW5hYmxlW0ZJTFRFUl9FTkFDVF9QT0xJQ0lOR18wXSA9IFRSVUU7CisgICAgICAgIHBBY3Rpb24tPmZpbHRlclBvbGljaW5nSWR4WzBdID0gYWNsQWN0LmFjbG1ldGVyaWR4OworICAgIH0KKworICAgIGlmKHRtcCAmIEZJTFRFUl9FTkFDVF9QUklPUklUWV9NQVNLKQorICAgIHsKKyAgICAgICAgaWYoYWNsQWN0LnByaWFjdCA9PSBGSUxURVJfRU5BQ1RfUFJJX1RZUEUoRklMVEVSX0VOQUNUX1BSSU9SSVRZKSkKKyAgICAgICAgeworICAgICAgICAgICAgcEFjdGlvbi0+YWN0RW5hYmxlW0ZJTFRFUl9FTkFDVF9QUklPUklUWV0gPSBUUlVFOworICAgICAgICAgICAgcEFjdGlvbi0+ZmlsdGVyUHJpb3JpdHkgPSBhY2xBY3QucHJpZHg7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZihhY2xBY3QucHJpYWN0ID09IEZJTFRFUl9FTkFDVF9QUklfVFlQRShGSUxURVJfRU5BQ1RfMVBfUkVNQVJLKSkKKyAgICAgICAgeworICAgICAgICAgICAgcEFjdGlvbi0+YWN0RW5hYmxlW0ZJTFRFUl9FTkFDVF8xUF9SRU1BUktdID0gVFJVRTsKKyAgICAgICAgICAgIHBBY3Rpb24tPmZpbHRlclByaW9yaXR5ID0gYWNsQWN0LnByaWR4OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoYWNsQWN0LnByaWFjdCA9PSBGSUxURVJfRU5BQ1RfUFJJX1RZUEUoRklMVEVSX0VOQUNUX0RTQ1BfUkVNQVJLKSkKKyAgICAgICAgeworICAgICAgICAgICAgcEFjdGlvbi0+YWN0RW5hYmxlW0ZJTFRFUl9FTkFDVF9EU0NQX1JFTUFSS10gPSBUUlVFOworICAgICAgICAgICAgcEFjdGlvbi0+ZmlsdGVyUHJpb3JpdHkgPSBhY2xBY3QucHJpZHg7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZihhY2xBY3QucHJpYWN0ID09IEZJTFRFUl9FTkFDVF9QUklfVFlQRShGSUxURVJfRU5BQ1RfUE9MSUNJTkdfMykpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBBY3Rpb24tPmFjdEVuYWJsZVtGSUxURVJfRU5BQ1RfUE9MSUNJTkdfM10gPSBUUlVFOworICAgICAgICAgICAgcEFjdGlvbi0+ZmlsdGVyUG9saWNpbmdJZHhbM10gID0gYWNsQWN0LnByaWR4OworICAgICAgICB9CisgICAgfQorCisgICAgaWYodG1wICYgRklMVEVSX0VOQUNUX1NWTEFOX01BU0spCisgICAgeworICAgICAgICBpZihhY2xBY3Quc2FjdCA9PSBGSUxURVJfRU5BQ1RfU1ZMQU5fVFlQRShGSUxURVJfRU5BQ1RfU1ZMQU5fSU5HUkVTUykpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU3ZsYW5NZW1iZXJDb25maWd1cmF0aW9uKGFjbEFjdC5zdmlkeF9zYWN0LCAmc3ZsYW5fY2ZnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIHBBY3Rpb24tPmFjdEVuYWJsZVtGSUxURVJfRU5BQ1RfU1ZMQU5fSU5HUkVTU10gPSBUUlVFOworICAgICAgICAgICAgcEFjdGlvbi0+ZmlsdGVyU3ZsYW5JZHggPSBhY2xBY3Quc3ZpZHhfc2FjdDsKKyAgICAgICAgICAgIHBBY3Rpb24tPmZpbHRlclN2bGFuVmlkID0gc3ZsYW5fY2ZnLnZzX3N2aWQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZihhY2xBY3Quc2FjdCA9PSBGSUxURVJfRU5BQ1RfU1ZMQU5fVFlQRShGSUxURVJfRU5BQ1RfU1ZMQU5fRUdSRVNTKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTdmxhbk1lbWJlckNvbmZpZ3VyYXRpb24oYWNsQWN0LnN2aWR4X3NhY3QsICZzdmxhbl9jZmcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgcEFjdGlvbi0+YWN0RW5hYmxlW0ZJTFRFUl9FTkFDVF9TVkxBTl9FR1JFU1NdID0gVFJVRTsKKyAgICAgICAgICAgIHBBY3Rpb24tPmZpbHRlclN2bGFuSWR4ID0gYWNsQWN0LnN2aWR4X3NhY3Q7CisgICAgICAgICAgICBwQWN0aW9uLT5maWx0ZXJTdmxhblZpZCA9IHN2bGFuX2NmZy52c19zdmlkOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoYWNsQWN0LnNhY3QgPT0gRklMVEVSX0VOQUNUX1NWTEFOX1RZUEUoRklMVEVSX0VOQUNUX1NWTEFOX0NWSUQpKQorICAgICAgICAgICAgcEFjdGlvbi0+YWN0RW5hYmxlW0ZJTFRFUl9FTkFDVF9TVkxBTl9DVklEXSA9IFRSVUU7CisgICAgICAgIGVsc2UgaWYoYWNsQWN0LnNhY3QgPT0gRklMVEVSX0VOQUNUX1NWTEFOX1RZUEUoRklMVEVSX0VOQUNUX1BPTElDSU5HXzIpKQorICAgICAgICB7CisgICAgICAgICAgICBwQWN0aW9uLT5hY3RFbmFibGVbRklMVEVSX0VOQUNUX1BPTElDSU5HXzJdID0gVFJVRTsKKyAgICAgICAgICAgIHBBY3Rpb24tPmZpbHRlclBvbGljaW5nSWR4WzJdICA9IGFjbEFjdC5zdmlkeF9zYWN0OworICAgICAgICB9CisgICAgfQorCisKKyAgICBpZih0bXAgJiBGSUxURVJfRU5BQ1RfQ1ZMQU5fTUFTSykKKyAgICB7CisgICAgICAgIGlmKEZJTFRFUl9FTkFDVF9DQUNURVhUX1RBR09OTFkgPT0gYWNsQWN0LmNhY3RfZXh0IHx8CisgICAgICAgICAgICBGSUxURVJfRU5BQ1RfQ0FDVEVYVF9CT1RIVkxBTlRBRyA9PSBhY2xBY3QuY2FjdF9leHQgKQorICAgICAgICB7CisgICAgICAgICAgICBpZihGSUxURVJfQ1RBR0ZNVF9VTlRBRyA9PSBhY2xBY3QudGFnX2ZtdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwQWN0aW9uLT5hY3RFbmFibGVbRklMVEVSX0VOQUNUX0VHUkVTU0NUQUdfVU5UQUddID0gVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoRklMVEVSX0NUQUdGTVRfVEFHID09IGFjbEFjdC50YWdfZm10KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBBY3Rpb24tPmFjdEVuYWJsZVtGSUxURVJfRU5BQ1RfRUdSRVNTQ1RBR19UQUddID0gVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoRklMVEVSX0NUQUdGTVRfS0VFUCA9PSBhY2xBY3QudGFnX2ZtdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwQWN0aW9uLT5hY3RFbmFibGVbRklMVEVSX0VOQUNUX0VHUkVTU0NUQUdfS0VFUF0gPSBUUlVFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgIGVsc2UgaWYoRklMVEVSX0NUQUdGTVRfS0VFUDFQUk1LPT0gYWNsQWN0LnRhZ19mbXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcEFjdGlvbi0+YWN0RW5hYmxlW0ZJTFRFUl9FTkFDVF9FR1JFU1NDVEFHX0tFRVBBTkQxUFJNS10gPSBUUlVFOworICAgICAgICAgICAgfQorCisgICAgICAgIH0KKworICAgICAgICBpZihGSUxURVJfRU5BQ1RfQ0FDVEVYVF9WTEFOT05MWSA9PSBhY2xBY3QuY2FjdF9leHQgfHwKKyAgICAgICAgICAgIEZJTFRFUl9FTkFDVF9DQUNURVhUX0JPVEhWTEFOVEFHID09IGFjbEFjdC5jYWN0X2V4dCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKGFjbEFjdC5jYWN0ID09IEZJTFRFUl9FTkFDVF9DVkxBTl9UWVBFKEZJTFRFUl9FTkFDVF9DVkxBTl9JTkdSRVNTKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1ZsYW5NZW1iZXJDb25maWcoYWNsQWN0LmN2aWR4X2NhY3QsICZ2bGFuTUMpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICBwQWN0aW9uLT5hY3RFbmFibGVbRklMVEVSX0VOQUNUX0NWTEFOX0lOR1JFU1NdID0gVFJVRTsKKyAgICAgICAgICAgICAgICBwQWN0aW9uLT5maWx0ZXJDdmxhbklkeCAgPSBhY2xBY3QuY3ZpZHhfY2FjdDsKKyAgICAgICAgICAgICAgICBwQWN0aW9uLT5maWx0ZXJDdmxhblZpZCAgPSB2bGFuTUMuZXZpZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoYWNsQWN0LmNhY3QgPT0gRklMVEVSX0VOQUNUX0NWTEFOX1RZUEUoRklMVEVSX0VOQUNUX0NWTEFOX0VHUkVTUykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNWbGFuTWVtYmVyQ29uZmlnKGFjbEFjdC5jdmlkeF9jYWN0LCAmdmxhbk1DKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgcEFjdGlvbi0+YWN0RW5hYmxlW0ZJTFRFUl9FTkFDVF9DVkxBTl9FR1JFU1NdID0gVFJVRTsKKyAgICAgICAgICAgICAgICBwQWN0aW9uLT5maWx0ZXJDdmxhbklkeCAgPSBhY2xBY3QuY3ZpZHhfY2FjdDsKKyAgICAgICAgICAgICAgICBwQWN0aW9uLT5maWx0ZXJDdmxhblZpZCAgPSB2bGFuTUMuZXZpZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoYWNsQWN0LmNhY3QgPT0gRklMVEVSX0VOQUNUX0NWTEFOX1RZUEUoRklMVEVSX0VOQUNUX0NWTEFOX1NWSUQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBBY3Rpb24tPmFjdEVuYWJsZVtGSUxURVJfRU5BQ1RfQ1ZMQU5fU1ZJRF0gPSBUUlVFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZihhY2xBY3QuY2FjdCA9PSBGSUxURVJfRU5BQ1RfQ1ZMQU5fVFlQRShGSUxURVJfRU5BQ1RfUE9MSUNJTkdfMSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcEFjdGlvbi0+YWN0RW5hYmxlW0ZJTFRFUl9FTkFDVF9QT0xJQ0lOR18xXSA9IFRSVUU7CisgICAgICAgICAgICAgICAgcEFjdGlvbi0+ZmlsdGVyUG9saWNpbmdJZHhbMV0gID0gYWNsQWN0LmN2aWR4X2NhY3Q7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZih0bXAgJiBGSUxURVJfRU5BQ1RfSU5UR1BJT19NQVNLKQorICAgIHsKKyAgICAgICAgaWYoVFJVRSA9PSBhY2xBY3QuYWNsaW50KQorICAgICAgICB7CisgICAgICAgICAgICBwQWN0aW9uLT5hY3RFbmFibGVbRklMVEVSX0VOQUNUX0lOVEVSUlVQVF0gPSBUUlVFOworICAgICAgICB9CisKKyAgICAgICAgaWYoVFJVRSA9PSBhY2xBY3QuZ3Bpb19lbikKKyAgICAgICAgeworICAgICAgICAgICAgcEFjdGlvbi0+YWN0RW5hYmxlW0ZJTFRFUl9FTkFDVF9HUE9dID0gVFJVRTsKKyAgICAgICAgICAgIHBBY3Rpb24tPmZpbHRlclBpbiA9IGFjbEFjdC5ncGlvX3BpbjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIEdldCBmaWVsZCB0eXBlIG9mIFJBVyBkYXRhICovCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljQWNsVGVtcGxhdGUoYWNsUnVsZS5kYXRhX2JpdHMudHlwZSwgJnR5cGUpKSE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGZvcihpID0gMDsgaSA8IFJUTDgzNjdDX0FDTFJVTEVGSUVMRE5POyBpKyspCisgICAgeworICAgICAgICBwRmlsdGVyX2NmZy0+ZmllbGRSYXdUeXBlW2ldID0gdHlwZS5maWVsZFtpXTsKKyAgICB9LyogZW5kIG9mIGZvcihpLi4uKSAqLworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2ZpbHRlcl9pZ3JBY2xfdW5tYXRjaEFjdGlvbl9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgYWN0aW9uIHRvIHBhY2tldHMgd2hlbiBubyBBQ0wgY29uZmlndXJhdGlvbiBtYXRjaAorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBQb3J0IGlkLgorICogICAgICBhY3Rpb24gIC0gQWN0aW9uLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgaWQuCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGlzIGZ1bmN0aW9uIHNldHMgYWN0aW9uIG9mIHBhY2tldHMgd2hlbiBubyBBQ0wgY29uZmlncnVhdGlvbiBtYXRjaGVzLgorICovCitydGtfYXBpX3JldF90IHJ0a19maWx0ZXJfaWdyQWNsX3VubWF0Y2hBY3Rpb25fc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2ZpbHRlcl91bm1hdGNoX2FjdGlvbl90IGFjdGlvbikKK3sKKyAgICBydGtfYXBpX3JldF90IHJldDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBwb3J0IHZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgaWYoYWN0aW9uID49IEZJTFRFUl9VTk1BVENIX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmKChyZXQgPSBydGw4MzY3Y19zZXRBc2ljQWNsVW5tYXRjaGVkUGVybWl0KHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCBhY3Rpb24pKSAhPSBSVF9FUlJfT0spCisgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19maWx0ZXJfaWdyQWNsX3VubWF0Y2hBY3Rpb25fZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGFjdGlvbiB0byBwYWNrZXRzIHdoZW4gbm8gQUNMIGNvbmZpZ3VyYXRpb24gbWF0Y2gKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUG9ydCBpZC4KKyAqIE91dHB1dDoKKyAqICAgICAgcEFjdGlvbiAtIEFjdGlvbi4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBpZC4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgZnVuY3Rpb24gZ2V0cyBhY3Rpb24gb2YgcGFja2V0cyB3aGVuIG5vIEFDTCBjb25maWdydWF0aW9uIG1hdGNoZXMuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2ZpbHRlcl9pZ3JBY2xfdW5tYXRjaEFjdGlvbl9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfZmlsdGVyX3VubWF0Y2hfYWN0aW9uX3QqIHBBY3Rpb24pCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXQ7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoTlVMTCA9PSBwQWN0aW9uKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIC8qIENoZWNrIHBvcnQgdmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQocG9ydCk7CisKKyAgICBpZigocmV0ID0gcnRsODM2N2NfZ2V0QXNpY0FjbFVubWF0Y2hlZFBlcm1pdChydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgcEFjdGlvbikpICE9IFJUX0VSUl9PSykKKyAgICAgICByZXR1cm4gcmV0OworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2ZpbHRlcl9pZ3JBY2xfc3RhdGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHN0YXRlIG9mIGluZ3Jlc3MgQUNMLgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBQb3J0IGlkLgorICogICAgICBzdGF0ZSAgIC0gSW5ncmVzcyBBQ0wgc3RhdGUuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBpZC4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgZnVuY3Rpb24gZ2V0cyBhY3Rpb24gb2YgcGFja2V0cyB3aGVuIG5vIEFDTCBjb25maWdydWF0aW9uIG1hdGNoZXMuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2ZpbHRlcl9pZ3JBY2xfc3RhdGVfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2ZpbHRlcl9zdGF0ZV90IHN0YXRlKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0OworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIENoZWNrIHBvcnQgdmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQocG9ydCk7CisKKyAgICBpZihzdGF0ZSA+PSBSVEtfRU5BQkxFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmKChyZXQgPSBydGw4MzY3Y19zZXRBc2ljQWNsKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCBzdGF0ZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICByZXR1cm4gcmV0OworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2ZpbHRlcl9pZ3JBY2xfc3RhdGVfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHN0YXRlIG9mIGluZ3Jlc3MgQUNMLgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBQb3J0IGlkLgorICogT3V0cHV0OgorICogICAgICBwU3RhdGUgIC0gSW5ncmVzcyBBQ0wgc3RhdGUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgaWQuCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGlzIGZ1bmN0aW9uIGdldHMgYWN0aW9uIG9mIHBhY2tldHMgd2hlbiBubyBBQ0wgY29uZmlncnVhdGlvbiBtYXRjaGVzLgorICovCitydGtfYXBpX3JldF90IHJ0a19maWx0ZXJfaWdyQWNsX3N0YXRlX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19maWx0ZXJfc3RhdGVfdCogcFN0YXRlKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0OworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKE5VTEwgPT0gcFN0YXRlKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIC8qIENoZWNrIHBvcnQgdmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQocG9ydCk7CisKKyAgICBpZigocmV0ID0gcnRsODM2N2NfZ2V0QXNpY0FjbChydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgcFN0YXRlKSkgIT0gUlRfRVJSX09LKQorICAgICAgIHJldHVybiByZXQ7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2ZpbHRlcl9pZ3JBY2xfdGVtcGxhdGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHRlbXBsYXRlIG9mIGluZ3Jlc3MgQUNMLgorICogSW5wdXQ6CisgKiAgICAgIHRlbXBsYXRlIC0gSW5ncmVzcyBBQ0wgdGVtcGxhdGUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhpcyBmdW5jdGlvbiBzZXQgQUNMIHRlbXBsYXRlLgorICovCitydGtfYXBpX3JldF90IHJ0a19maWx0ZXJfaWdyQWNsX3RlbXBsYXRlX3NldChydGtfZmlsdGVyX3RlbXBsYXRlX3QgKmFjbFRlbXBsYXRlKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgaWR4RmllbGQ7CisgICAgcnRsODM2N2NfYWNsdGVtcGxhdGVfdCBhY2xUeXBlOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKGFjbFRlbXBsYXRlLT5pbmRleCA+PSBSVEtfTUFYX05VTV9PRl9GSUxURVJfVFlQRSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGZvcihpZHhGaWVsZCA9IDA7IGlkeEZpZWxkIDwgUlRLX01BWF9OVU1fT0ZfRklMVEVSX0ZJRUxEOyBpZHhGaWVsZCsrKQorICAgIHsKKyAgICAgICAgaWYoYWNsVGVtcGxhdGUtPmZpZWxkVHlwZVtpZHhGaWVsZF0gPCBGSUxURVJfRklFTERfUkFXX0RNQUNfMTVfMCB8fAorICAgICAgICAgICAgKGFjbFRlbXBsYXRlLT5maWVsZFR5cGVbaWR4RmllbGRdID4gRklMVEVSX0ZJRUxEX1JBV19DVEFHICYmIGFjbFRlbXBsYXRlLT5maWVsZFR5cGVbaWR4RmllbGRdIDwgRklMVEVSX0ZJRUxEX1JBV19JUFY0X1NJUF8xNV8wICkgfHwKKyAgICAgICAgICAgIChhY2xUZW1wbGF0ZS0+ZmllbGRUeXBlW2lkeEZpZWxkXSA+IEZJTFRFUl9GSUVMRF9SQVdfSVBWNF9ESVBfMzFfMTYgJiYgYWNsVGVtcGxhdGUtPmZpZWxkVHlwZVtpZHhGaWVsZF0gPCBGSUxURVJfRklFTERfUkFXX0lQVjZfU0lQXzE1XzAgKSB8fAorICAgICAgICAgICAgKGFjbFRlbXBsYXRlLT5maWVsZFR5cGVbaWR4RmllbGRdID4gRklMVEVSX0ZJRUxEX1JBV19JUFY2X0RJUF8zMV8xNiAmJiBhY2xUZW1wbGF0ZS0+ZmllbGRUeXBlW2lkeEZpZWxkXSA8IEZJTFRFUl9GSUVMRF9SQVdfVklEUkFOR0UgKSB8fAorICAgICAgICAgICAgKGFjbFRlbXBsYXRlLT5maWVsZFR5cGVbaWR4RmllbGRdID4gRklMVEVSX0ZJRUxEX1JBV19GSUVMRF9WQUxJRCAmJiBhY2xUZW1wbGF0ZS0+ZmllbGRUeXBlW2lkeEZpZWxkXSA8IEZJTFRFUl9GSUVMRF9SQVdfRklFTERfU0VMRUNUMDAgKSB8fAorICAgICAgICAgICAgYWNsVGVtcGxhdGUtPmZpZWxkVHlwZVtpZHhGaWVsZF0gPj0gRklMVEVSX0ZJRUxEX1JBV19FTkQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IoaWR4RmllbGQgPSAwOyBpZHhGaWVsZCA8IFJUS19NQVhfTlVNX09GX0ZJTFRFUl9GSUVMRDsgaWR4RmllbGQrKykKKyAgICB7CisgICAgICAgIGFjbFR5cGUuZmllbGRbaWR4RmllbGRdID0gYWNsVGVtcGxhdGUtPmZpZWxkVHlwZVtpZHhGaWVsZF07CisgICAgfQorCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNBY2xUZW1wbGF0ZShhY2xUZW1wbGF0ZS0+aW5kZXgsICZhY2xUeXBlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2ZpbHRlcl9pZ3JBY2xfdGVtcGxhdGVfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHRlbXBsYXRlIG9mIGluZ3Jlc3MgQUNMLgorICogSW5wdXQ6CisgKiAgICAgIHRlbXBsYXRlIC0gSW5ncmVzcyBBQ0wgdGVtcGxhdGUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgVGhpcyBmdW5jdGlvbiBnZXRzIHRlbXBsYXRlIG9mIEFDTC4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfZmlsdGVyX2lnckFjbF90ZW1wbGF0ZV9nZXQocnRrX2ZpbHRlcl90ZW1wbGF0ZV90ICphY2xUZW1wbGF0ZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldDsKKyAgICBydGtfdWludDMyIGlkeEZpZWxkOworICAgIHJ0bDgzNjdjX2FjbHRlbXBsYXRlX3QgYWNsVHlwZTsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IGFjbFRlbXBsYXRlKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmKGFjbFRlbXBsYXRlLT5pbmRleCA+PSBSVEtfTUFYX05VTV9PRl9GSUxURVJfVFlQRSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgaWYoKHJldCA9IHJ0bDgzNjdjX2dldEFzaWNBY2xUZW1wbGF0ZShhY2xUZW1wbGF0ZS0+aW5kZXgsICZhY2xUeXBlKSkgIT0gUlRfRVJSX09LKQorICAgICAgIHJldHVybiByZXQ7CisKKyAgICBmb3IoaWR4RmllbGQgPSAwOyBpZHhGaWVsZCA8IFJUS19NQVhfTlVNX09GX0ZJTFRFUl9GSUVMRDsgaWR4RmllbGQgKyspCisgICAgeworICAgICAgICBhY2xUZW1wbGF0ZS0+ZmllbGRUeXBlW2lkeEZpZWxkXSA9IGFjbFR5cGUuZmllbGRbaWR4RmllbGRdOworICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19maWx0ZXJfaWdyQWNsX2ZpZWxkX3NlbF9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgdXNlciBkZWZpbmVkIGZpZWxkIHNlbGVjdG9ycyBpbiBIU0IKKyAqIElucHV0OgorICogICAgICBpbmRleCAgICAgICAtIGluZGV4IG9mIGZpZWxkIHNlbGVjdG9yIDAtMTUKKyAqICAgICAgZm9ybWF0ICAgICAgLSBGb3JtYXQgb2YgZmllbGQgc2VsZWN0b3IKKyAqICAgICAgb2Zmc2V0ICAgICAgLSBSZXRyaWV2aW5nIGRhdGEgb2Zmc2V0CisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIFN5c3RlbSBzdXBwb3J0IDE2IHVzZXIgZGVmaW5lZCBmaWVsZCBzZWxjdG9ycy4KKyAqICAgICAgRWFjaCBzZWxlY3RvciBjYW4gYmUgZW5hYmxlZCBvciBkaXNhYmxlLgorICogICAgICBVc2VyIGNhbiBkZWZpbmVkIHJldHJpZXZpbmcgMTYtYml0cyBpbiBtYW55IHByZWRlZmllbmQKKyAqICAgICAgc3RhbmRhcmQgbDIvbDMvbDQgcGF5bG9hZC4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfZmlsdGVyX2lnckFjbF9maWVsZF9zZWxfc2V0KHJ0a191aW50MzIgaW5kZXgsIHJ0a19maWVsZF9zZWxfdCBmb3JtYXQsIHJ0a191aW50MzIgb2Zmc2V0KQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0OworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKGluZGV4ID49IFJUTDgzNjdDX0ZJRUxEU0VMX0ZPUk1BVF9OVU1CRVIpCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgaWYoZm9ybWF0ID49IEZPUk1BVF9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgaWYob2Zmc2V0ID4gUlRMODM2N0NfRklFTERTRUxfTUFYX09GRlNFVCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICBpZigocmV0ID0gcnRsODM2N2Nfc2V0QXNpY0ZpZWxkU2VsZWN0b3IoaW5kZXgsIChydGtfdWludDMyKWZvcm1hdCwgb2Zmc2V0KSkgIT0gUlRfRVJSX09LKQorICAgICAgIHJldHVybiByZXQ7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfZmlsdGVyX2lnckFjbF9maWVsZF9zZWxfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHVzZXIgZGVmaW5lZCBmaWVsZCBzZWxlY3RvcnMgaW4gSFNCCisgKiBJbnB1dDoKKyAqICAgICAgaW5kZXggICAgICAgLSBpbmRleCBvZiBmaWVsZCBzZWxlY3RvciAwLTE1CisgKiBPdXRwdXQ6CisgKiAgICAgIHBGb3JtYXQgICAgIC0gRm9ybWF0IG9mIGZpZWxkIHNlbGVjdG9yCisgKiAgICAgIHBPZmZzZXQgICAgIC0gUmV0cmlldmluZyBkYXRhIG9mZnNldAorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZS4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfZmlsdGVyX2lnckFjbF9maWVsZF9zZWxfZ2V0KHJ0a191aW50MzIgaW5kZXgsIHJ0a19maWVsZF9zZWxfdCAqcEZvcm1hdCwgcnRrX3VpbnQzMiAqcE9mZnNldCkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBGb3JtYXQgfHwgTlVMTCA9PSBwT2Zmc2V0KQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmKGluZGV4ID49IFJUTDgzNjdDX0ZJRUxEU0VMX0ZPUk1BVF9OVU1CRVIpCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgaWYoKHJldCA9IHJ0bDgzNjdjX2dldEFzaWNGaWVsZFNlbGVjdG9yKGluZGV4LCBwRm9ybWF0LCBwT2Zmc2V0KSkgIT0gUlRfRVJSX09LKQorICAgICAgIHJldHVybiByZXQ7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfZmlsdGVyX2lwcmFuZ2Vfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IElQIFJhbmdlIGNoZWNrCisgKiBJbnB1dDoKKyAqICAgICAgaW5kZXggICAgICAgLSBpbmRleCBvZiBJUCBSYW5nZSAwLTE1CisgKiAgICAgIHR5cGUgICAgICAgIC0gSVAgUmFuZ2UgY2hlY2sgdHlwZSwgMDpEZWxldGUgYSBlbnRyeSwgMTogSVB2NF9TSVAsIDI6IElQdjRfRElQLCAzOklQdjZfU0lQLCA0OklQdjZfRElQCisgKiAgICAgIHVwcGVySXAgICAgIC0gVGhlIHVwcGVyIGJvdW5kIG9mIElQIHJhbmdlCisgKiAgICAgIGxvd2VySXAgICAgIC0gVGhlIGxvd2VyIEJvdW5kIG9mIElQIHJhbmdlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgICAgLSBUaGUgcGFyYW1ldGVyIGlzIG91dCBvZiByYW5nZQorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgIC0gSW5wdXQgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIHVwcGVySXAgbXVzdCBiZSBsYXJnZXIgb3IgZXF1YWwgdGhhbiBsb3dlcklwLgorICovCitydGtfYXBpX3JldF90IHJ0a19maWx0ZXJfaXByYW5nZV9zZXQocnRrX3VpbnQzMiBpbmRleCwgcnRrX2ZpbHRlcl9pcHJhbmdlX3QgdHlwZSwgaXBhZGRyX3QgdXBwZXJJcCwgaXBhZGRyX3QgbG93ZXJJcCkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihpbmRleCA+IFJUTDgzNjdDX0FDTFJBTkdFTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIGlmKHR5cGUgPj0gSVBSQU5HRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgaWYobG93ZXJJcCA+IHVwcGVySXApCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZigocmV0ID0gcnRsODM2N2Nfc2V0QXNpY0FjbElwUmFuZ2UoaW5kZXgsIHR5cGUsIHVwcGVySXAsIGxvd2VySXApKSAhPSBSVF9FUlJfT0spCisgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19maWx0ZXJfaXByYW5nZV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgSVAgUmFuZ2UgY2hlY2sKKyAqIElucHV0OgorICogICAgICBpbmRleCAgICAgICAtIGluZGV4IG9mIElQIFJhbmdlIDAtMTUKKyAqIE91dHB1dDoKKyAqICAgICAgcFR5cGUgICAgICAgIC0gSVAgUmFuZ2UgY2hlY2sgdHlwZSwgMDpEZWxldGUgYSBlbnRyeSwgMTogSVB2NF9TSVAsIDI6IElQdjRfRElQLCAzOklQdjZfU0lQLCA0OklQdjZfRElQCisgKiAgICAgIHBVcHBlcklwICAgICAtIFRoZSB1cHBlciBib3VuZCBvZiBJUCByYW5nZQorICogICAgICBwTG93ZXJJcCAgICAgLSBUaGUgbG93ZXIgQm91bmQgb2YgSVAgcmFuZ2UKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAgICAtIFRoZSBwYXJhbWV0ZXIgaXMgb3V0IG9mIHJhbmdlCisgKiBOb3RlOgorICogICAgICBOb25lLgorICovCitydGtfYXBpX3JldF90IHJ0a19maWx0ZXJfaXByYW5nZV9nZXQocnRrX3VpbnQzMiBpbmRleCwgcnRrX2ZpbHRlcl9pcHJhbmdlX3QgKnBUeXBlLCBpcGFkZHJfdCAqcFVwcGVySXAsIGlwYWRkcl90ICpwTG93ZXJJcCkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZigoTlVMTCA9PSBwVHlwZSkgfHwgKE5VTEwgPT0gcFVwcGVySXApIHx8IChOVUxMID09IHBMb3dlcklwKSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZihpbmRleCA+IFJUTDgzNjdDX0FDTFJBTkdFTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIGlmKChyZXQgPSBydGw4MzY3Y19nZXRBc2ljQWNsSXBSYW5nZShpbmRleCwgcFR5cGUsIHBVcHBlcklwLCBwTG93ZXJJcCkpICE9IFJUX0VSUl9PSykKKyAgICAgICByZXR1cm4gcmV0OworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2ZpbHRlcl92aWRyYW5nZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgVklEIFJhbmdlIGNoZWNrCisgKiBJbnB1dDoKKyAqICAgICAgaW5kZXggICAgICAgLSBpbmRleCBvZiBWSUQgUmFuZ2UgMC0xNQorICogICAgICB0eXBlICAgICAgICAtIElQIFJhbmdlIGNoZWNrIHR5cGUsIDA6RGVsZXRlIGEgZW50cnksIDE6IENWSUQsIDI6IFNWSUQKKyAqICAgICAgdXBwZXJWaWQgICAgLSBUaGUgdXBwZXIgYm91bmQgb2YgVklEIHJhbmdlCisgKiAgICAgIGxvd2VyVmlkICAgIC0gVGhlIGxvd2VyIEJvdW5kIG9mIFZJRCByYW5nZQorICogT3V0cHV0OgorICogICAgICBOb25lLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFICAgIC0gVGhlIHBhcmFtZXRlciBpcyBvdXQgb2YgcmFuZ2UKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAtIElucHV0IGVycm9yCisgKiBOb3RlOgorICogICAgICB1cHBlclZpZCBtdXN0IGJlIGxhcmdlciBvciBlcXVhbCB0aGFuIGxvd2VyVmlkLgorICovCitydGtfYXBpX3JldF90IHJ0a19maWx0ZXJfdmlkcmFuZ2Vfc2V0KHJ0a191aW50MzIgaW5kZXgsIHJ0a19maWx0ZXJfdmlkcmFuZ2VfdCB0eXBlLCBydGtfdWludDMyIHVwcGVyVmlkLCBydGtfdWludDMyIGxvd2VyVmlkKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0OworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKGluZGV4ID4gUlRMODM2N0NfQUNMUkFOR0VNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgaWYodHlwZSA+PSBWSURSQU5HRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgaWYobG93ZXJWaWQgPiB1cHBlclZpZCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmKCAodXBwZXJWaWQgPiBSVEw4MzY3Q19WSURNQVgpIHx8IChsb3dlclZpZCA+IFJUTDgzNjdDX1ZJRE1BWCkpCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgaWYoKHJldCA9IHJ0bDgzNjdjX3NldEFzaWNBY2xWaWRSYW5nZShpbmRleCwgdHlwZSwgdXBwZXJWaWQsIGxvd2VyVmlkKSkgIT0gUlRfRVJSX09LKQorICAgICAgIHJldHVybiByZXQ7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfZmlsdGVyX3ZpZHJhbmdlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBWSUQgUmFuZ2UgY2hlY2sKKyAqIElucHV0OgorICogICAgICBpbmRleCAgICAgICAtIGluZGV4IG9mIFZJRCBSYW5nZSAwLTE1CisgKiBPdXRwdXQ6CisgKiAgICAgIHBUeXBlICAgICAgICAtIElQIFJhbmdlIGNoZWNrIHR5cGUsIDA6VW51c2VkLCAxOiBDVklELCAyOiBTVklECisgKiAgICAgIHBVcHBlclZpZCAgICAtIFRoZSB1cHBlciBib3VuZCBvZiBWSUQgcmFuZ2UKKyAqICAgICAgcExvd2VyVmlkICAgIC0gVGhlIGxvd2VyIEJvdW5kIG9mIFZJRCByYW5nZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFICAgIC0gVGhlIHBhcmFtZXRlciBpcyBvdXQgb2YgcmFuZ2UKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2ZpbHRlcl92aWRyYW5nZV9nZXQocnRrX3VpbnQzMiBpbmRleCwgcnRrX2ZpbHRlcl92aWRyYW5nZV90ICpwVHlwZSwgcnRrX3VpbnQzMiAqcFVwcGVyVmlkLCBydGtfdWludDMyICpwTG93ZXJWaWQpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXQ7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoKE5VTEwgPT0gcFR5cGUpIHx8IChOVUxMID09IHBVcHBlclZpZCkgfHwgKE5VTEwgPT0gcExvd2VyVmlkKSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZihpbmRleCA+IFJUTDgzNjdDX0FDTFJBTkdFTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIGlmKChyZXQgPSBydGw4MzY3Y19nZXRBc2ljQWNsVmlkUmFuZ2UoaW5kZXgsIHBUeXBlLCBwVXBwZXJWaWQsIHBMb3dlclZpZCkpICE9IFJUX0VSUl9PSykKKyAgICAgICByZXR1cm4gcmV0OworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2ZpbHRlcl9wb3J0cmFuZ2Vfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IFBvcnQgUmFuZ2UgY2hlY2sKKyAqIElucHV0OgorICogICAgICBpbmRleCAgICAgICAtIGluZGV4IG9mIFBvcnQgUmFuZ2UgMC0xNQorICogICAgICB0eXBlICAgICAgICAtIElQIFJhbmdlIGNoZWNrIHR5cGUsIDA6RGVsZXRlIGEgZW50cnksIDE6IFNvdXJjZSBQb3J0LCAyOiBEZXN0bmF0aW9uIFBvcnQKKyAqICAgICAgdXBwZXJQb3J0ICAgLSBUaGUgdXBwZXIgYm91bmQgb2YgUG9ydCByYW5nZQorICogICAgICBsb3dlclBvcnQgICAtIFRoZSBsb3dlciBCb3VuZCBvZiBQb3J0IHJhbmdlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgICAgLSBUaGUgcGFyYW1ldGVyIGlzIG91dCBvZiByYW5nZQorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgIC0gSW5wdXQgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIHVwcGVyUG9ydCBtdXN0IGJlIGxhcmdlciBvciBlcXVhbCB0aGFuIGxvd2VyUG9ydC4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfZmlsdGVyX3BvcnRyYW5nZV9zZXQocnRrX3VpbnQzMiBpbmRleCwgcnRrX2ZpbHRlcl9wb3J0cmFuZ2VfdCB0eXBlLCBydGtfdWludDMyIHVwcGVyUG9ydCwgcnRrX3VpbnQzMiBsb3dlclBvcnQpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXQ7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoaW5kZXggPiBSVEw4MzY3Q19BQ0xSQU5HRU1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICBpZih0eXBlID49IFBPUlRSQU5HRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgaWYobG93ZXJQb3J0ID4gdXBwZXJQb3J0KQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYodXBwZXJQb3J0ID4gUlRMODM2N0NfQUNMX1BPUlRSQU5HRU1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmKGxvd2VyUG9ydCA+IFJUTDgzNjdDX0FDTF9QT1JUUkFOR0VNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZigocmV0ID0gcnRsODM2N2Nfc2V0QXNpY0FjbFBvcnRSYW5nZShpbmRleCwgdHlwZSwgdXBwZXJQb3J0LCBsb3dlclBvcnQpKSAhPSBSVF9FUlJfT0spCisgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19maWx0ZXJfcG9ydHJhbmdlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBQb3J0IFJhbmdlIGNoZWNrCisgKiBJbnB1dDoKKyAqICAgICAgaW5kZXggICAgICAgLSBpbmRleCBvZiBQb3J0IFJhbmdlIDAtMTUKKyAqIE91dHB1dDoKKyAqICAgICAgcFR5cGUgICAgICAgLSBJUCBSYW5nZSBjaGVjayB0eXBlLCAwOkRlbGV0ZSBhIGVudHJ5LCAxOiBTb3VyY2UgUG9ydCwgMjogRGVzdG5hdGlvbiBQb3J0CisgKiAgICAgIHBVcHBlclBvcnQgIC0gVGhlIHVwcGVyIGJvdW5kIG9mIFBvcnQgcmFuZ2UKKyAqICAgICAgcExvd2VyUG9ydCAgLSBUaGUgbG93ZXIgQm91bmQgb2YgUG9ydCByYW5nZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFICAgIC0gVGhlIHBhcmFtZXRlciBpcyBvdXQgb2YgcmFuZ2UKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAtIElucHV0IGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lLgorICovCitydGtfYXBpX3JldF90IHJ0a19maWx0ZXJfcG9ydHJhbmdlX2dldChydGtfdWludDMyIGluZGV4LCBydGtfZmlsdGVyX3BvcnRyYW5nZV90ICpwVHlwZSwgcnRrX3VpbnQzMiAqcFVwcGVyUG9ydCwgcnRrX3VpbnQzMiAqcExvd2VyUG9ydCkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZigoTlVMTCA9PSBwVHlwZSkgfHwgKE5VTEwgPT0gcFVwcGVyUG9ydCkgfHwgKE5VTEwgPT0gcExvd2VyUG9ydCkpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYoaW5kZXggPiBSVEw4MzY3Q19BQ0xSQU5HRU1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICBpZigocmV0ID0gcnRsODM2N2NfZ2V0QXNpY0FjbFBvcnRSYW5nZShpbmRleCwgcFR5cGUsIHBVcHBlclBvcnQsIHBMb3dlclBvcnQpKSAhPSBSVF9FUlJfT0spCisgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19maWx0ZXJfaWdyQWNsUG9sYXJpdHlfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IEFDTCBHb2lwIGNvbnRyb2wgcGFsYXJpdHkKKyAqIElucHV0OgorICogICAgICBwb2xhcml0eSAtIDE6IEhpZ2gsIDA6IExvdworICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgbm9uZQorICovCitydGtfYXBpX3JldF90IHJ0a19maWx0ZXJfaWdyQWNsUG9sYXJpdHlfc2V0KHJ0a191aW50MzIgcG9sYXJpdHkpCit7CisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKHBvbGFyaXR5ID4gMSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNBY2xHcGlvUG9sYXJpdHkocG9sYXJpdHkpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2ZpbHRlcl9pZ3JBY2xQb2xhcml0eV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgQUNMIEdvaXAgY29udHJvbCBwYWxhcml0eQorICogSW5wdXQ6CisgKiAgICAgIHBQb2xhcml0eSAtIDE6IEhpZ2gsIDA6IExvdworICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgbm9uZQorICovCitydGtfYXBpX3JldF90IHJ0a19maWx0ZXJfaWdyQWNsUG9sYXJpdHlfZ2V0KHJ0a191aW50MzIqIHBQb2xhcml0eSkKK3sKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoTlVMTCA9PSBwUG9sYXJpdHkpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNBY2xHcGlvUG9sYXJpdHkocFBvbGFyaXR5KTsKK30KKworCisKKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2NwdS5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2NwdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxY2Q5NWIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvY3B1LmMKQEAgLTAsMCArMSw1MzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogJFJldmlzaW9uOiA3NjMwNiAkCisgKiAkRGF0ZTogMjAxNy0wMy0wOCAxNToxMzo1OCArMDgwMCAo6YCx5LiJLCAwOCDkuInmnIggMjAxNykgJAorICoKKyAqIFB1cnBvc2UgOiBSVEsgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJIGZvciBSVEw4MzY3L1JUTDgzNjdDCisgKiBGZWF0dXJlIDogSGVyZSBpcyBhIGxpc3Qgb2YgYWxsIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIGluIENQVSBtb2R1bGUuCisgKgorICovCisKKyNpbmNsdWRlIDxydGtfc3dpdGNoLmg+CisjaW5jbHVkZSA8cnRrX2Vycm9yLmg+CisjaW5jbHVkZSA8Y3B1Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2Lmg+CisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl9jcHV0YWcuaD4KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2NwdV9lbmFibGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IENQVSBwb3J0IGZ1bmN0aW9uIGVuYWJsZS9kaXNhYmxlLgorICogSW5wdXQ6CisgKiAgICAgIGVuYWJsZSAtIENQVSBwb3J0IGZ1bmN0aW9uIGVuYWJsZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlci4KKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBzZXQgQ1BVIHBvcnQgZnVuY3Rpb24gZW5hYmxlL2Rpc2FibGUuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2NwdV9lbmFibGVfc2V0KHJ0a19lbmFibGVfdCBlbmFibGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKGVuYWJsZSA+PSBSVEtfRU5BQkxFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9FTkFCTEU7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNDcHV0YWdFbmFibGUoZW5hYmxlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKERJU0FCTEVEID09IGVuYWJsZSkKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0NwdXRhZ1BvcnRtYXNrKDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19jcHVfZW5hYmxlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBDUFUgcG9ydCBhbmQgaXRzIHNldHRpbmcuCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwRW5hYmxlIC0gQ1BVIHBvcnQgZnVuY3Rpb24gZW5hYmxlCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogICAgICBSVF9FUlJfTDJfTk9fQ1BVX1BPUlQgICAtIENQVSBwb3J0IGlzIG5vdCBleGlzdAorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IENQVSBwb3J0IGZ1bmN0aW9uIGVuYWJsZS9kaXNhYmxlLgorICovCitydGtfYXBpX3JldF90IHJ0a19jcHVfZW5hYmxlX2dldChydGtfZW5hYmxlX3QgKnBFbmFibGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoTlVMTCA9PSBwRW5hYmxlKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0NwdXRhZ0VuYWJsZShwRW5hYmxlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2NwdV90YWdQb3J0X3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBDUFUgcG9ydCBhbmQgQ1BVIHRhZyBpbnNlcnQgbW9kZS4KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqICAgICAgbW9kZSAtIENQVSB0YWcgaW5zZXJ0IGZvciBwYWNrZXRzIGVncmVzcyBmcm9tIENQVSBwb3J0LgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlci4KKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBzZXQgQ1BVIHBvcnQgYW5kIGluc2VydGluZyBwcm9wcmlldGFyeSBDUFUgdGFnIG1vZGUgKExlbmd0aC9UeXBlIDB4ODg5OSkKKyAqICAgICAgdG8gdGhlIGZyYW1lIHRoYXQgdHJhbnNtaXR0aW5nIHRvIENQVSBwb3J0LgorICogICAgICBUaGUgaW5zZXQgY3B1IHRhZyBtb2RlIGlzIGFzIGZvbGxvd2luZzoKKyAqICAgICAgLSBDUFVfSU5TRVJUX1RPX0FMTAorICogICAgICAtIENQVV9JTlNFUlRfVE9fVFJBUFBJTkcKKyAqICAgICAgLSBDUFVfSU5TRVJUX1RPX05PTkUKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfY3B1X3RhZ1BvcnRfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2NwdV9pbnNlcnRfdCBtb2RlKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIENoZWNrIHBvcnQgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQocG9ydCk7CisKKyAgICBpZiAobW9kZSA+PSBDUFVfSU5TRVJUX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0NwdXRhZ1BvcnRtYXNrKDE8PHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljQ3B1dGFnVHJhcFBvcnQocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCkpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNDcHV0YWdJbnNlcnRNb2RlKG1vZGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfY3B1X3RhZ1BvcnRfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IENQVSBwb3J0IGFuZCBDUFUgdGFnIGluc2VydCBtb2RlLgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcFBvcnQgLSBQb3J0IGlkLgorICogICAgICBwTW9kZSAtIENQVSB0YWcgaW5zZXJ0IGZvciBwYWNrZXRzIGVncmVzcyBmcm9tIENQVSBwb3J0LCAwOmFsbCBpbnNlcnQgMTpPbmx5IGZvciB0cmFwcGVkIHBhY2tldHMgMjpubyBpbnNlcnQuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogICAgICBSVF9FUlJfTDJfTk9fQ1BVX1BPUlQgICAtIENQVSBwb3J0IGlzIG5vdCBleGlzdAorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IGNvbmZpZ3VyZWQgQ1BVIHBvcnQgYW5kIGl0cyBzZXR0aW5nLgorICogICAgICBUaGUgaW5zZXQgY3B1IHRhZyBtb2RlIGlzIGFzIGZvbGxvd2luZzoKKyAqICAgICAgLSBDUFVfSU5TRVJUX1RPX0FMTAorICogICAgICAtIENQVV9JTlNFUlRfVE9fVFJBUFBJTkcKKyAqICAgICAgLSBDUFVfSU5TRVJUX1RPX05PTkUKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfY3B1X3RhZ1BvcnRfZ2V0KHJ0a19wb3J0X3QgKnBQb3J0LCBydGtfY3B1X2luc2VydF90ICpwTW9kZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHBtc2ssIHBvcnQ7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoTlVMTCA9PSBwUG9ydCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZihOVUxMID09IHBNb2RlKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0NwdXRhZ1BvcnRtYXNrKCZwbXNrKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljQ3B1dGFnVHJhcFBvcnQoJnBvcnQpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAqcFBvcnQgPSBydGtfc3dpdGNoX3BvcnRfUDJMX2dldChwb3J0KTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0NwdXRhZ0luc2VydE1vZGUocE1vZGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19jcHVfYXdhcmVQb3J0X3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBDUFUgYXdhcmUgcG9ydCBtYXNrLgorICogSW5wdXQ6CisgKiAgICAgIHBvcnRtYXNrIC0gUG9ydCBtYXNrLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX01BU0sgICAgICAtIEludmFsaWQgcG9ydCBtYXNrLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gc2V0IGNvbmZpZ3VyZWQgQ1BVIGF3YXJlIHBvcnQgbWFzay4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfY3B1X2F3YXJlUG9ydF9zZXQocnRrX3BvcnRtYXNrX3QgKnBQb3J0bWFzaykKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHBoeU1iclBtYXNrOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIENoZWNrIFZhbGlkIHBvcnQgbWFzayAqLworICAgIGlmKE5VTEwgPT0gcFBvcnRtYXNrKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIC8qIENoZWNrIHBvcnQgbWFzayB2YWxpZCAqLworICAgIFJUS19DSEtfUE9SVE1BU0tfVkFMSUQocFBvcnRtYXNrKTsKKworICAgIGlmKHJ0a19zd2l0Y2hfcG9ydG1hc2tfTDJQX2dldChwUG9ydG1hc2ssICZwaHlNYnJQbWFzaykgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0NwdXRhZ1BvcnRtYXNrKHBoeU1iclBtYXNrKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2NwdV9hd2FyZVBvcnRfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IENQVSBhd2FyZSBwb3J0IG1hc2suCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwUG9ydG1hc2sgLSBQb3J0IG1hc2suCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBnZXQgY29uZmlndXJlZCBDUFUgYXdhcmUgcG9ydCBtYXNrLgorICovCitydGtfYXBpX3JldF90IHJ0a19jcHVfYXdhcmVQb3J0X2dldChydGtfcG9ydG1hc2tfdCAqcFBvcnRtYXNrKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcG1zazsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBQb3J0bWFzaykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNDcHV0YWdQb3J0bWFzaygmcG1zaykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmKHJ0a19zd2l0Y2hfcG9ydG1hc2tfUDJMX2dldChwbXNrLCBwUG9ydG1hc2spICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9GQUlMRUQ7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfY3B1X3RhZ1Bvc2l0aW9uX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBDUFUgdGFnIHBvc2l0aW9uLgorICogSW5wdXQ6CisgKiAgICAgIHBvc2l0aW9uIC0gQ1BVIHRhZyBwb3NpdGlvbi4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAtIEludmFsaWQgaW5wdXQuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBzZXQgQ1BVIHRhZyBwb3NpdGlvbi4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfY3B1X3RhZ1Bvc2l0aW9uX3NldChydGtfY3B1X3Bvc2l0aW9uX3QgcG9zaXRpb24pCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKHBvc2l0aW9uID49IENQVV9QT1NfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljQ3B1dGFnUG9zaXRpb24ocG9zaXRpb24pKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfY3B1X3RhZ1Bvc2l0aW9uX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBDUFUgdGFnIHBvc2l0aW9uLgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcFBvc2l0aW9uIC0gQ1BVIHRhZyBwb3NpdGlvbi4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgLSBJbnZhbGlkIGlucHV0LgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IENQVSB0YWcgcG9zaXRpb24uCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2NwdV90YWdQb3NpdGlvbl9nZXQocnRrX2NwdV9wb3NpdGlvbl90ICpwUG9zaXRpb24pCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoTlVMTCA9PSBwUG9zaXRpb24pCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljQ3B1dGFnUG9zaXRpb24ocFBvc2l0aW9uKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2NwdV90YWdMZW5ndGhfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IENQVSB0YWcgbGVuZ3RoLgorICogSW5wdXQ6CisgKiAgICAgIGxlbmd0aCAtIENQVSB0YWcgbGVuZ3RoLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgIC0gSW52YWxpZCBpbnB1dC4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIHNldCBDUFUgdGFnIGxlbmd0aC4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfY3B1X3RhZ0xlbmd0aF9zZXQocnRrX2NwdV90YWdfbGVuZ3RoX3QgbGVuZ3RoKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmIChsZW5ndGggPj0gQ1BVX0xFTl9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNDcHV0YWdNb2RlKGxlbmd0aCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19jcHVfdGFnTGVuZ3RoX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBDUFUgdGFnIGxlbmd0aC4KKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBMZW5ndGggLSBDUFUgdGFnIGxlbmd0aC4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgLSBJbnZhbGlkIGlucHV0LgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IENQVSB0YWcgbGVuZ3RoLgorICovCitydGtfYXBpX3JldF90IHJ0a19jcHVfdGFnTGVuZ3RoX2dldChydGtfY3B1X3RhZ19sZW5ndGhfdCAqcExlbmd0aCkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBMZW5ndGgpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljQ3B1dGFnTW9kZShwTGVuZ3RoKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2NwdV9wcmlSZW1hcF9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBDb25maWd1cmUgQ1BVIHByaW9yaXRpZXMgbWFwcGluZyB0byBpbnRlcm5hbCBhYnNvbHV0ZSBwcmlvcml0eS4KKyAqIElucHV0OgorICogICAgICBpbnRfcHJpICAgICAtIGludGVybmFsIHByaW9yaXR5IHZhbHVlLgorICogICAgICBuZXdfcHJpICAgIC0gbmV3IGludGVybmFsIHByaW9yaXR5IHZhbHVlLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogICAgICBSVF9FUlJfVkxBTl9QUklPUklUWSAgICAtIEludmFsaWQgMXAgcHJpb3JpdHkuCisgKiAgICAgIFJUX0VSUl9RT1NfSU5UX1BSSU9SSVRZIC0gSW52YWxpZCBwcmlvcml0eS4KKyAqIE5vdGU6CisgKiAgICAgIFByaW9yaXR5IG9mIENQVSB0YWcgYXNzaWdubWVudCBmb3IgaW50ZXJuYWwgYXNpYyBwcmlvcml0eSwgYW5kIGl0IGlzIHVzZWQgZm9yIHF1ZXVlIHVzYWdlIGFuZCBwYWNrZXQgc2NoZWR1bGluZy4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfY3B1X3ByaVJlbWFwX3NldChydGtfcHJpX3QgaW50X3ByaSwgcnRrX3ByaV90IG5ld19wcmkpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKG5ld19wcmkgPiBSVEw4MzY3Q19QUklNQVggfHwgaW50X3ByaSA+IFJUTDgzNjdDX1BSSU1BWCkKKyAgICAgICAgcmV0dXJuICBSVF9FUlJfVkxBTl9QUklPUklUWTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0NwdXRhZ1ByaW9yaXR5UmVtYXBwaW5nKGludF9wcmksIG5ld19wcmkpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfY3B1X3ByaVJlbWFwX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIENvbmZpZ3VyZSBDUFUgcHJpb3JpdGllcyBtYXBwaW5nIHRvIGludGVybmFsIGFic29sdXRlIHByaW9yaXR5LgorICogSW5wdXQ6CisgKiAgICAgIGludF9wcmkgICAgIC0gaW50ZXJuYWwgcHJpb3JpdHkgdmFsdWUuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBOZXdfcHJpICAgIC0gbmV3IGludGVybmFsIHByaW9yaXR5IHZhbHVlLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX1ZMQU5fUFJJT1JJVFkgICAgLSBJbnZhbGlkIDFwIHByaW9yaXR5LgorICogICAgICBSVF9FUlJfUU9TX0lOVF9QUklPUklUWSAtIEludmFsaWQgcHJpb3JpdHkuCisgKiBOb3RlOgorICogICAgICBQcmlvcml0eSBvZiBDUFUgdGFnIGFzc2lnbm1lbnQgZm9yIGludGVybmFsIGFzaWMgcHJpb3JpdHksIGFuZCBpdCBpcyB1c2VkIGZvciBxdWV1ZSB1c2FnZSBhbmQgcGFja2V0IHNjaGVkdWxpbmcuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2NwdV9wcmlSZW1hcF9nZXQocnRrX3ByaV90IGludF9wcmksIHJ0a19wcmlfdCAqcE5ld19wcmkpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoTlVMTCA9PSBwTmV3X3ByaSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoaW50X3ByaSA+IFJUTDgzNjdDX1BSSU1BWCkKKyAgICAgICAgcmV0dXJuICBSVF9FUlJfUU9TX0lOVF9QUklPUklUWTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0NwdXRhZ1ByaW9yaXR5UmVtYXBwaW5nKGludF9wcmksIHBOZXdfcHJpKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2NwdV9hY2NlcHRMZW5ndGhfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IENQVSBhY2NlcHQgIGxlbmd0aC4KKyAqIElucHV0OgorICogICAgICBsZW5ndGggLSBDUFUgdGFnIGxlbmd0aC4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAtIEludmFsaWQgaW5wdXQuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBzZXQgQ1BVIGFjY2VwdCBsZW5ndGguCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2NwdV9hY2NlcHRMZW5ndGhfc2V0KHJ0a19jcHVfcnhfbGVuZ3RoX3QgbGVuZ3RoKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmIChsZW5ndGggPj0gQ1BVX1JYX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0NwdXRhZ1J4TWluTGVuZ3RoKGxlbmd0aCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19jcHVfYWNjZXB0TGVuZ3RoX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBDUFUgYWNjZXB0IGxlbmd0aC4KKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBMZW5ndGggLSBDUFUgdGFnIGxlbmd0aC4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgLSBJbnZhbGlkIGlucHV0LgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IENQVSBhY2NlcHQgbGVuZ3RoLgorICovCitydGtfYXBpX3JldF90IHJ0a19jcHVfYWNjZXB0TGVuZ3RoX2dldChydGtfY3B1X3J4X2xlbmd0aF90ICpwTGVuZ3RoKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKE5VTEwgPT0gcExlbmd0aCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNDcHV0YWdSeE1pbkxlbmd0aChwTGVuZ3RoKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworCisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9kb3QxeC5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2RvdDF4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzliMTQ2YQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9kb3QxeC5jCkBAIC0wLDAgKzEsODQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNzU3ODMgJAorICogJERhdGU6IDIwMTctMDItMTMgMTQ6NTQ6NTMgKzA4MDAgKOmAseS4gCwgMTMg5LqM5pyIIDIwMTcpICQKKyAqCisgKiBQdXJwb3NlIDogUlRLIHN3aXRjaCBoaWdoLWxldmVsIEFQSSBmb3IgUlRMODM2Ny9SVEw4MzY3QworICogRmVhdHVyZSA6IEhlcmUgaXMgYSBsaXN0IG9mIGFsbCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBpbiAxWCBtb2R1bGUuCisgKgorICovCisKKyNpbmNsdWRlIDxydGtfc3dpdGNoLmg+CisjaW5jbHVkZSA8cnRrX2Vycm9yLmg+CisjaW5jbHVkZSA8ZG90MXguaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx2bGFuLmg+CisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydi5oPgorI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnZfZG90MXguaD4KKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2X3JtYS5oPgorI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnZfbHV0Lmg+CisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl92bGFuLmg+CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19kb3QxeF91bmF1dGhQYWNrZXRPcGVyX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCA4MDIuMXggdW5hdXRoIGFjdGlvbiBjb25maWd1cmF0aW9uLgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgICAgICAtIFBvcnQgaWQuCisgKiAgICAgIHVuYXV0aF9hY3Rpb24gICAtIDgwMi4xWCB1bmF1dGggYWN0aW9uLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIuCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBjYW4gc2V0IDgwMi4xeCB1bmF1dGggYWN0aW9uIGNvbmZpZ3VyYXRpb24uCisgKiAgICAgIFRoZSB1bmF1dGggYWN0aW9uIGlzIGFzIGZvbGxvd2luZzoKKyAqICAgICAgLSBET1QxWF9BQ1RJT05fRFJPUAorICogICAgICAtIERPVDFYX0FDVElPTl9UUkFQMkNQVQorICogICAgICAtIERPVDFYX0FDVElPTl9HVUVTVFZMQU4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfZG90MXhfdW5hdXRoUGFja2V0T3Blcl9zZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfZG90MXhfdW5hdXRoX2FjdGlvbl90IHVuYXV0aF9hY3Rpb24pCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgcG9ydCBWYWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwb3J0KTsKKworICAgIGlmICh1bmF1dGhfYWN0aW9uID49IERPVDFYX0FDVElPTl9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfRE9UMVhfUFJPQzsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpYzF4UHJvY0NvbmZpZyhydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgdW5hdXRoX2FjdGlvbikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19kb3QxeF91bmF1dGhQYWNrZXRPcGVyX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCA4MDIuMXggdW5hdXRoIGFjdGlvbiBjb25maWd1cmF0aW9uLgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBQb3J0IGlkLgorICogT3V0cHV0OgorICogICAgICBwVW5hdXRoX2FjdGlvbiAtIDgwMi4xWCB1bmF1dGggYWN0aW9uLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBnZXQgODAyLjF4IHVuYXV0aCBhY3Rpb24gY29uZmlndXJhdGlvbi4KKyAqICAgICAgVGhlIHVuYXV0aCBhY3Rpb24gaXMgYXMgZm9sbG93aW5nOgorICogICAgICAtIERPVDFYX0FDVElPTl9EUk9QCisgKiAgICAgIC0gRE9UMVhfQUNUSU9OX1RSQVAyQ1BVCisgKiAgICAgIC0gRE9UMVhfQUNUSU9OX0dVRVNUVkxBTgorICovCitydGtfYXBpX3JldF90IHJ0a19kb3QxeF91bmF1dGhQYWNrZXRPcGVyX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19kb3QxeF91bmF1dGhfYWN0aW9uX3QgKnBVbmF1dGhfYWN0aW9uKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIENoZWNrIHBvcnQgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQocG9ydCk7CisKKyAgICBpZihOVUxMID09IHBVbmF1dGhfYWN0aW9uKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpYzF4UHJvY0NvbmZpZyhydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgcFVuYXV0aF9hY3Rpb24pKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfZG90MXhfZWFwb2xGcmFtZTJDcHVFbmFibGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IDgwMi4xeCBFQVBPTCBwYWNrZXQgdHJhcCB0byBDUFUgY29uZmlndXJhdGlvbgorICogSW5wdXQ6CisgKiAgICAgIGVuYWJsZSAtIFRoZSBzdGF0dXMgb2YgODAyLjF4IEVBUE9MIHBhY2tldC4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfRU5BQkxFICAgICAgIC0gSW52YWxpZCBlbmFibGUgaW5wdXQuCisgKiBOb3RlOgorICogICAgICBUbyBzdXBwb3J0IDgwMi4xeCBhdXRoZW50aWNhdGlvbiBmdW5jdGlvbmFsaXR5LCBFQVBPTCBmcmFtZSAoZXRoZXIgdHlwZSA9IDB4ODg4RSkgaGFzIHRvCisgKiAgICAgIGJlIHRyYXBwZWQgdG8gQ1BVLgorICogICAgICBUaGUgc3RhdHVzIG9mIEVBUE9MIGZyYW1lIHRyYXAgdG8gQ1BVIGlzIGFzIGZvbGxvd2luZzoKKyAqICAgICAgLSBESVNBQkxFRAorICogICAgICAtIEVOQUJMRUQKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfZG90MXhfZWFwb2xGcmFtZTJDcHVFbmFibGVfc2V0KHJ0a19lbmFibGVfdCBlbmFibGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRsODM2N2Nfcm1hX3Qgcm1hY2ZnOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmIChlbmFibGUgPj0gUlRLX0VOQUJMRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfRU5BQkxFOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUm1hKDMsICZybWFjZmcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoRU5BQkxFRCA9PSBlbmFibGUpCisgICAgICAgIHJtYWNmZy5vcGVyYXRpb24gPSBSTUFPUF9UUkFQX1RPX0NQVTsKKyAgICBlbHNlIGlmIChESVNBQkxFRCA9PSBlbmFibGUpCisgICAgICAgIHJtYWNmZy5vcGVyYXRpb24gPSBSTUFPUF9GT1JXQVJEOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUm1hKDMsICZybWFjZmcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfZG90MXhfZWFwb2xGcmFtZTJDcHVFbmFibGVfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IDgwMi4xeCBFQVBPTCBwYWNrZXQgdHJhcCB0byBDUFUgY29uZmlndXJhdGlvbgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcEVuYWJsZSAtIFRoZSBzdGF0dXMgb2YgODAyLjF4IEVBUE9MIHBhY2tldC4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRvIHN1cHBvcnQgODAyLjF4IGF1dGhlbnRpY2F0aW9uIGZ1bmN0aW9uYWxpdHksIEVBUE9MIGZyYW1lIChldGhlciB0eXBlID0gMHg4ODhFKSBoYXMgdG8KKyAqICAgICAgYmUgdHJhcHBlZCB0byBDUFUuCisgKiAgICAgIFRoZSBzdGF0dXMgb2YgRUFQT0wgZnJhbWUgdHJhcCB0byBDUFUgaXMgYXMgZm9sbG93aW5nOgorICogICAgICAtIERJU0FCTEVECisgKiAgICAgIC0gRU5BQkxFRAorICovCitydGtfYXBpX3JldF90IHJ0a19kb3QxeF9lYXBvbEZyYW1lMkNwdUVuYWJsZV9nZXQocnRrX2VuYWJsZV90ICpwRW5hYmxlKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0bDgzNjdjX3JtYV90IHJtYWNmZzsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBFbmFibGUpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUm1hKDMsICZybWFjZmcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoUk1BT1BfVFJBUF9UT19DUFUgPT0gcm1hY2ZnLm9wZXJhdGlvbikKKyAgICAgICAgKnBFbmFibGUgPSBFTkFCTEVEOworICAgIGVsc2UKKyAgICAgICAgKnBFbmFibGUgPSBESVNBQkxFRDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19kb3QxeF9wb3J0QmFzZWRFbmFibGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IDgwMi4xeCBwb3J0LWJhc2VkIGVuYWJsZSBjb25maWd1cmF0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiAgICAgIGVuYWJsZSAtIFRoZSBzdGF0dXMgb2YgODAyLjF4IHBvcnQuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqICAgICAgUlRfRVJSX0VOQUJMRSAgICAgICAgICAgICAgIC0gSW52YWxpZCBlbmFibGUgaW5wdXQuCisgKiAgICAgIFJUX0VSUl9ET1QxWF9QT1JUQkFTRURQTkVOICAtIDgwMi4xWCBwb3J0LWJhc2VkIGVuYWJsZSBlcnJvcgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gdXBkYXRlIHRoZSBwb3J0LWJhc2VkIHBvcnQgZW5hYmxlIHJlZ2lzdGVyIGNvbnRlbnQuIElmIGEgcG9ydCBpcyA4MDIuMXgKKyAqICAgICAgcG9ydCBiYXNlZCBuZXR3b3JrIGFjY2VzcyBjb250cm9sICJlbmFibGVkIiwgaXQgc2hvdWxkIGJlIGF1dGhlbnRpY2F0ZWQgc28gcGFja2V0cworICogICAgICBmcm9tIHRoYXQgcG9ydCB3b24ndCBiZSBkcm9wcGVkIG9yIHRyYXBwZWQgdG8gQ1BVLgorICogICAgICBUaGUgc3RhdHVzIG9mIDgwMi4xeCBwb3J0LWJhc2VkIG5ldHdvcmsgYWNjZXNzIGNvbnRyb2wgaXMgYXMgZm9sbG93aW5nOgorICogICAgICAtIERJU0FCTEVECisgKiAgICAgIC0gRU5BQkxFRAorICovCitydGtfYXBpX3JldF90IHJ0a19kb3QxeF9wb3J0QmFzZWRFbmFibGVfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2VuYWJsZV90IGVuYWJsZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBwb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgaWYgKGVuYWJsZSA+PSBSVEtfRU5BQkxFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9FTkFCTEU7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWMxeFBCRW5Db25maWcocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksZW5hYmxlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2RvdDF4X3BvcnRCYXNlZEVuYWJsZV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgODAyLjF4IHBvcnQtYmFzZWQgZW5hYmxlIGNvbmZpZ3VyYXRpb24KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqIE91dHB1dDoKKyAqICAgICAgcEVuYWJsZSAtIFRoZSBzdGF0dXMgb2YgODAyLjF4IHBvcnQuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IHRoZSA4MDIuMXggcG9ydC1iYXNlZCBwb3J0IHN0YXR1cy4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfZG90MXhfcG9ydEJhc2VkRW5hYmxlX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19lbmFibGVfdCAqcEVuYWJsZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBwb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgaWYoTlVMTCA9PSBwRW5hYmxlKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpYzF4UEJFbkNvbmZpZyhydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgcEVuYWJsZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19kb3QxeF9wb3J0QmFzZWRBdXRoU3RhdHVzX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCA4MDIuMXggcG9ydC1iYXNlZCBhdXRoLiBwb3J0IGNvbmZpZ3VyYXRpb24KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqICAgICAgcG9ydF9hdXRoIC0gVGhlIHN0YXR1cyBvZiA4MDIuMXggcG9ydC4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgIFJUX0VSUl9ET1QxWF9QT1JUQkFTRURBVVRIICAgLSA4MDIuMVggcG9ydC1iYXNlZCBhdXRoIGVycm9yCisgKiBOb3RlOgorICogICAgICBUaGUgYXV0aGVudGljYXRlZCBzdGF0dXMgb2YgODAyLjF4IHBvcnQtYmFzZWQgbmV0d29yayBhY2Nlc3MgY29udHJvbCBpcyBhcyBmb2xsb3dpbmc6CisgKiAgICAgIC0gVU5BVVRICisgKiAgICAgIC0gQVVUSAorICovCitydGtfYXBpX3JldF90IHJ0a19kb3QxeF9wb3J0QmFzZWRBdXRoU3RhdHVzX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19kb3QxeF9hdXRoX3N0YXR1c190IHBvcnRfYXV0aCkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBwb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgIGlmIChwb3J0X2F1dGggPj0gQVVUSF9TVEFUVVNfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0RPVDFYX1BPUlRCQVNFREFVVEg7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWMxeFBCQXV0aENvbmZpZyhydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgcG9ydF9hdXRoKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfZG90MXhfcG9ydEJhc2VkQXV0aFN0YXR1c19nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgODAyLjF4IHBvcnQtYmFzZWQgYXV0aC4gcG9ydCBjb25maWd1cmF0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBQb3J0X2F1dGggLSBUaGUgc3RhdHVzIG9mIDgwMi4xeCBwb3J0LgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGdldCA4MDIuMXggcG9ydC1iYXNlZCBwb3J0IGF1dGguaW5mb3JtYXRpb24uCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2RvdDF4X3BvcnRCYXNlZEF1dGhTdGF0dXNfZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2RvdDF4X2F1dGhfc3RhdHVzX3QgKnBQb3J0X2F1dGgpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoTlVMTCA9PSBwUG9ydF9hdXRoKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIC8qIENoZWNrIHBvcnQgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQocG9ydCk7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWMxeFBCQXV0aENvbmZpZyhydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgcFBvcnRfYXV0aCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfZG90MXhfcG9ydEJhc2VkRGlyZWN0aW9uX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCA4MDIuMXggcG9ydC1iYXNlZCBvcGVyYXRpb25hbCBkaXJlY3Rpb24gY29uZmlndXJhdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgICAgICAtIFBvcnQgaWQuCisgKiAgICAgIHBvcnRfZGlyZWN0aW9uICAtIE9wZXJhdGlvbiBkaXJlY3Rpb24KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfRE9UMVhfUE9SVEJBU0VET1BESVIgLSA4MDIuMVggcG9ydC1iYXNlZCBvcGVyYXRpb24gZGlyZWN0aW9uIGVycm9yCisgKiBOb3RlOgorICogICAgICBUaGUgb3BlcmF0ZSBjb250cm9sbGVkIGRpcmVjdGlvbiBvZiA4MDIuMXggcG9ydC1iYXNlZCBuZXR3b3JrIGFjY2VzcyBjb250cm9sIGlzIGFzIGZvbGxvd2luZzoKKyAqICAgICAgLSBCT1RICisgKiAgICAgIC0gSU4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfZG90MXhfcG9ydEJhc2VkRGlyZWN0aW9uX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19kb3QxeF9kaXJlY3Rpb25fdCBwb3J0X2RpcmVjdGlvbikKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBwb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgaWYgKHBvcnRfZGlyZWN0aW9uID49IERJUkVDVElPTl9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfRE9UMVhfUE9SVEJBU0VET1BESVI7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWMxeFBCT3BkaXJDb25maWcocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIHBvcnRfZGlyZWN0aW9uKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2RvdDF4X3BvcnRCYXNlZERpcmVjdGlvbl9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgODAyLjFYIHBvcnQtYmFzZWQgb3BlcmF0aW9uYWwgZGlyZWN0aW9uIGNvbmZpZ3VyYXRpb24KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqIE91dHB1dDoKKyAqICAgICAgcFBvcnRfZGlyZWN0aW9uIC0gT3BlcmF0aW9uIGRpcmVjdGlvbgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGdldCA4MDIuMXggcG9ydC1iYXNlZCBvcGVyYXRpb25hbCBkaXJlY3Rpb24gaW5mb3JtYXRpb24uCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2RvdDF4X3BvcnRCYXNlZERpcmVjdGlvbl9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfZG90MXhfZGlyZWN0aW9uX3QgKnBQb3J0X2RpcmVjdGlvbikKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBQb3J0X2RpcmVjdGlvbikKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICAvKiBDaGVjayBwb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljMXhQQk9wZGlyQ29uZmlnKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCBwUG9ydF9kaXJlY3Rpb24pKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfZG90MXhfbWFjQmFzZWRFbmFibGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IDgwMi4xeCBtYWMtYmFzZWQgcG9ydCBlbmFibGUgY29uZmlndXJhdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBQb3J0IGlkLgorICogICAgICBlbmFibGUgLSBUaGUgc3RhdHVzIG9mIDgwMi4xeCBwb3J0LgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9FTkFCTEUgICAgICAgICAgICAgICAtIEludmFsaWQgZW5hYmxlIGlucHV0LgorICogICAgICBSVF9FUlJfRE9UMVhfTUFDQkFTRURQTkVOICAgLSA4MDIuMVggbWFjLWJhc2VkIGVuYWJsZSBlcnJvcgorICogTm90ZToKKyAqICAgICAgSWYgYSBwb3J0IGlzIDgwMi4xeCBNQUMgYmFzZWQgbmV0d29yayBhY2Nlc3MgY29udHJvbCAiZW5hYmxlZCIsIHRoZSBpbmNvbWluZyBwYWNrZXRzIHNob3VsZAorICogICAgICAgYmUgYXV0aGVudGljYXRlZCBzbyBwYWNrZXRzIGZyb20gdGhhdCBwb3J0IHdvbid0IGJlIGRyb3BwZWQgb3IgdHJhcHBlZCB0byBDUFUuCisgKiAgICAgIFRoZSBzdGF0dXMgb2YgODAyLjF4IE1BQy1iYXNlZCBuZXR3b3JrIGFjY2VzcyBjb250cm9sIGlzIGFzIGZvbGxvd2luZzoKKyAqICAgICAgLSBESVNBQkxFRAorICogICAgICAtIEVOQUJMRUQKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfZG90MXhfbWFjQmFzZWRFbmFibGVfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2VuYWJsZV90IGVuYWJsZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBwb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgaWYgKGVuYWJsZSA+PSBSVEtfRU5BQkxFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9FTkFCTEU7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWMxeE1CRW5Db25maWcocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksZW5hYmxlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2RvdDF4X21hY0Jhc2VkRW5hYmxlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCA4MDIuMXggbWFjLWJhc2VkIHBvcnQgZW5hYmxlIGNvbmZpZ3VyYXRpb24KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqIE91dHB1dDoKKyAqICAgICAgcEVuYWJsZSAtIFRoZSBzdGF0dXMgb2YgODAyLjF4IHBvcnQuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogTm90ZToKKyAqICAgICAgSWYgYSBwb3J0IGlzIDgwMi4xeCBNQUMgYmFzZWQgbmV0d29yayBhY2Nlc3MgY29udHJvbCAiZW5hYmxlZCIsIHRoZSBpbmNvbWluZyBwYWNrZXRzIHNob3VsZAorICogICAgICBiZSBhdXRoZW50aWNhdGVkIHNvIHBhY2tldHMgZnJvbSB0aGF0IHBvcnQgd29udCBiZSBkcm9wcGVkIG9yIHRyYXBwZWQgdG8gQ1BVLgorICogICAgICBUaGUgc3RhdHVzIG9mIDgwMi4xeCBNQUMtYmFzZWQgbmV0d29yayBhY2Nlc3MgY29udHJvbCBpcyBhcyBmb2xsb3dpbmc6CisgKiAgICAgIC0gRElTQUJMRUQKKyAqICAgICAgLSBFTkFCTEVECisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2RvdDF4X21hY0Jhc2VkRW5hYmxlX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19lbmFibGVfdCAqcEVuYWJsZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBFbmFibGUpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgLyogQ2hlY2sgcG9ydCBWYWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwb3J0KTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpYzF4TUJFbkNvbmZpZyhydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgcEVuYWJsZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19kb3QxeF9tYWNCYXNlZEF1dGhNYWNfYWRkCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQWRkIGFuIGF1dGhlbnRpY2F0ZWQgTUFDIHRvIEFTSUMKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAtIFBvcnQgaWQuCisgKiAgICAgIHBBdXRoX21hYyAgIC0gVGhlIGF1dGhlbnRpY2F0ZWQgTUFDLgorICogICAgICBmaWQgICAgICAgICAtIGZpbHRlcmluZyBkYXRhYmFzZS4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfRU5BQkxFICAgICAgICAgICAgICAgLSBJbnZhbGlkIGVuYWJsZSBpbnB1dC4KKyAqICAgICAgUlRfRVJSX0RPVDFYX01BQ0JBU0VEUE5FTiAgIC0gODAyLjFYIG1hYy1iYXNlZCBlbmFibGUgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGFkZCBhIDgwMi4xeCBhdXRoZW50aWNhdGVkIE1BQyBhZGRyZXNzIHRvIHBvcnQuIElmIHRoZSBNQUMgZG9lcyBub3QgZXhpc3QgaW4gTFVULAorICogICAgICB1c2VyIGNhbid0IGFkZCB0aGlzIE1BQyB0byBhdXRoIHN0YXR1cy4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfZG90MXhfbWFjQmFzZWRBdXRoTWFjX2FkZChydGtfcG9ydF90IHBvcnQsIHJ0a19tYWNfdCAqcEF1dGhfbWFjLCBydGtfZmlkX3QgZmlkKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgbWV0aG9kOworICAgIHJ0bDgzNjdjX2x1dHRiIGwyVGFibGU7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogbXVzdCBiZSB1bmljYXN0IGFkZHJlc3MgKi8KKyAgICBpZiAoKHBBdXRoX21hYyA9PSBOVUxMKSB8fCAocEF1dGhfbWFjLT5vY3RldFswXSAmIDB4MSkpCisgICAgICAgIHJldHVybiBSVF9FUlJfTUFDOworCisgICAgLyogQ2hlY2sgcG9ydCBWYWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwb3J0KTsKKworICAgIGlmIChmaWQgPiBSVEw4MzY3Q19GSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfTDJfRklEOworCisgICAgbWVtc2V0KCZsMlRhYmxlLCAwLCBzaXplb2YocnRsODM2N2NfbHV0dGIpKTsKKworICAgIC8qIGZpbGwga2V5IChNQUMsRklEKSB0byBnZXQgTDIgZW50cnkgKi8KKyAgICBtZW1jcHkobDJUYWJsZS5tYWMub2N0ZXQsIHBBdXRoX21hYy0+b2N0ZXQsIEVUSEVSX0FERFJfTEVOKTsKKyAgICBsMlRhYmxlLmZpZCA9IGZpZDsKKyAgICBtZXRob2QgPSBMVVRSRUFETUVUSE9EX01BQzsKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljTDJMb29rdXBUYihtZXRob2QsICZsMlRhYmxlKTsKKyAgICBpZiAoIFJUX0VSUl9PSyA9PSByZXRWYWwpCisgICAgeworICAgICAgICBpZiAobDJUYWJsZS5zcGEgIT0gcnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCkpCisgICAgICAgICAgICByZXR1cm4gUlRfRVJSX0RPVDFYX01BQ19QT1JUX01JU01BVENIOworCisgICAgICAgIG1lbWNweShsMlRhYmxlLm1hYy5vY3RldCwgcEF1dGhfbWFjLT5vY3RldCwgRVRIRVJfQUREUl9MRU4pOworICAgICAgICBsMlRhYmxlLmZpZCA9IGZpZDsKKyAgICAgICAgbDJUYWJsZS5lZmlkID0gMDsKKyAgICAgICAgbDJUYWJsZS5hdXRoID0gMTsKKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0wyTG9va3VwVGIoJmwyVGFibGUpOworICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHVybiByZXRWYWw7CisKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2RvdDF4X21hY0Jhc2VkQXV0aE1hY19kZWwKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBEZWxldGUgYW4gYXV0aGVudGljYXRlZCBNQUMgdG8gQVNJQworICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBQb3J0IGlkLgorICogICAgICBwQXV0aF9tYWMgLSBUaGUgYXV0aGVudGljYXRlZCBNQUMuCisgKiAgICAgIGZpZCAtIGZpbHRlcmluZyBkYXRhYmFzZS4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfTUFDICAgICAgICAgIC0gSW52YWxpZCBNQUMgYWRkcmVzcy4KKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBkZWxldGUgYSA4MDIuMXggYXV0aGVudGljYXRlZCBNQUMgYWRkcmVzcyB0byBwb3J0LiBJdCBvbmx5IGNoYW5nZSB0aGUgYXV0aCBzdGF0dXMgb2YKKyAqICAgICAgdGhlIE1BQyBhbmQgd29uJ3QgZGVsZXRlIGl0IGZyb20gTFVULgorICovCitydGtfYXBpX3JldF90IHJ0a19kb3QxeF9tYWNCYXNlZEF1dGhNYWNfZGVsKHJ0a19wb3J0X3QgcG9ydCwgcnRrX21hY190ICpwQXV0aF9tYWMsIHJ0a19maWRfdCBmaWQpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBtZXRob2Q7CisgICAgcnRsODM2N2NfbHV0dGIgbDJUYWJsZTsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBtdXN0IGJlIHVuaWNhc3QgYWRkcmVzcyAqLworICAgIGlmICgocEF1dGhfbWFjID09IE5VTEwpIHx8IChwQXV0aF9tYWMtPm9jdGV0WzBdICYgMHgxKSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9NQUM7CisKKyAgICAvKiBDaGVjayBwb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgaWYgKGZpZCA+IFJUTDgzNjdDX0ZJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9MMl9GSUQ7CisKKyAgICBtZW1zZXQoJmwyVGFibGUsIDAsIHNpemVvZihydGw4MzY3Y19sdXR0YikpOworCisgICAgLyogZmlsbCBrZXkgKE1BQyxGSUQpIHRvIGdldCBMMiBlbnRyeSAqLworICAgIG1lbWNweShsMlRhYmxlLm1hYy5vY3RldCwgcEF1dGhfbWFjLT5vY3RldCwgRVRIRVJfQUREUl9MRU4pOworICAgIGwyVGFibGUuZmlkID0gZmlkOworICAgIG1ldGhvZCA9IExVVFJFQURNRVRIT0RfTUFDOworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNMMkxvb2t1cFRiKG1ldGhvZCwgJmwyVGFibGUpOworICAgIGlmIChSVF9FUlJfT0sgPT0gcmV0VmFsKQorICAgIHsKKyAgICAgICAgaWYgKGwyVGFibGUuc3BhICE9IHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpKQorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9ET1QxWF9NQUNfUE9SVF9NSVNNQVRDSDsKKworICAgICAgICBtZW1jcHkobDJUYWJsZS5tYWMub2N0ZXQsIHBBdXRoX21hYy0+b2N0ZXQsIEVUSEVSX0FERFJfTEVOKTsKKyAgICAgICAgbDJUYWJsZS5maWQgPSBmaWQ7CisgICAgICAgIGwyVGFibGUuYXV0aCA9IDA7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNMMkxvb2t1cFRiKCZsMlRhYmxlKTsKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisgICAgZWxzZQorICAgICAgICByZXR1cm4gcmV0VmFsOworCit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19kb3QxeF9tYWNCYXNlZERpcmVjdGlvbl9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgODAyLjF4IG1hYy1iYXNlZCBvcGVyYXRpb25hbCBkaXJlY3Rpb24gY29uZmlndXJhdGlvbgorICogSW5wdXQ6CisgKiAgICAgIG1hY19kaXJlY3Rpb24gLSBPcGVyYXRpb24gZGlyZWN0aW9uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIuCisgKiAgICAgIFJUX0VSUl9ET1QxWF9NQUNCQVNFRE9QRElSICAtIDgwMi4xWCBtYWMtYmFzZWQgb3BlcmF0aW9uIGRpcmVjdGlvbiBlcnJvcgorICogTm90ZToKKyAqICAgICAgVGhlIG9wZXJhdGUgY29udHJvbGxlZCBkaXJlY3Rpb24gb2YgODAyLjF4IG1hYy1iYXNlZCBuZXR3b3JrIGFjY2VzcyBjb250cm9sIGlzIGFzIGZvbGxvd2luZzoKKyAqICAgICAgLSBCT1RICisgKiAgICAgIC0gSU4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfZG90MXhfbWFjQmFzZWREaXJlY3Rpb25fc2V0KHJ0a19kb3QxeF9kaXJlY3Rpb25fdCBtYWNfZGlyZWN0aW9uKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmIChtYWNfZGlyZWN0aW9uID49IERJUkVDVElPTl9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfRE9UMVhfTUFDQkFTRURPUERJUjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpYzF4TUJPcGRpckNvbmZpZyhtYWNfZGlyZWN0aW9uKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2RvdDF4X21hY0Jhc2VkRGlyZWN0aW9uX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCA4MDIuMXggbWFjLWJhc2VkIG9wZXJhdGlvbmFsIGRpcmVjdGlvbiBjb25maWd1cmF0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBNYWNfZGlyZWN0aW9uIC0gT3BlcmF0aW9uIGRpcmVjdGlvbgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IDgwMi4xeCBtYWMtYmFzZWQgb3BlcmF0aW9uYWwgZGlyZWN0aW9uIGluZm9ybWF0aW9uLgorICovCitydGtfYXBpX3JldF90IHJ0a19kb3QxeF9tYWNCYXNlZERpcmVjdGlvbl9nZXQocnRrX2RvdDF4X2RpcmVjdGlvbl90ICpwTWFjX2RpcmVjdGlvbikKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBNYWNfZGlyZWN0aW9uKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpYzF4TUJPcGRpckNvbmZpZyhwTWFjX2RpcmVjdGlvbikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIFNldCA4MDIuMXggZ3Vlc3QgVkxBTiBjb25maWd1cmF0aW9uCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IDgwMi4xeCBtYWMtYmFzZWQgb3BlcmF0aW9uYWwgZGlyZWN0aW9uIGNvbmZpZ3VyYXRpb24KKyAqIElucHV0OgorICogICAgICB2aWQgLSA4MDIuMXggZ3Vlc3QgVkxBTiBJRAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlci4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBvcGVyYXRlIGNvbnRyb2xsZWQgODAyLjF4IGd1ZXN0IFZMQU4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfZG90MXhfZ3Vlc3RWbGFuX3NldChydGtfdmxhbl90IHZpZCkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIGluZGV4OworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIHZpZCBtdXN0IGJlIDB+NDA5NSAqLworICAgIGlmICh2aWQgPiBSVEw4MzY3Q19WSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfVkxBTl9WSUQ7CisKKyAgICBpZigocmV0VmFsID0gcnRrX3ZsYW5fY2hlY2tBbmRDcmVhdGVNYnIodmlkLCAmaW5kZXgpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWMxeEd1ZXN0VmlkeChpbmRleCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19kb3QxeF9ndWVzdFZsYW5fZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IDgwMi4xeCBndWVzdCBWTEFOIGNvbmZpZ3VyYXRpb24KKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBWaWQgLSA4MDIuMXggZ3Vlc3QgVkxBTiBJRAorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IDgwMi4xeCBndWVzdCBWTEFOIGluZm9ybWF0aW9uLgorICovCitydGtfYXBpX3JldF90IHJ0a19kb3QxeF9ndWVzdFZsYW5fZ2V0KHJ0a192bGFuX3QgKnBWaWQpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBndmlkeDsKKyAgICBydGw4MzY3Y192bGFuY29uZmlndXNlciB2bGFuTUM7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoTlVMTCA9PSBwVmlkKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpYzF4R3Vlc3RWaWR4KCZndmlkeCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1ZsYW5NZW1iZXJDb25maWcoZ3ZpZHgsICZ2bGFuTUMpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAqcFZpZCA9IHZsYW5NQy5ldmlkOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2RvdDF4X2d1ZXN0VmxhbjJBdXRoX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCA4MDIuMXggZ3Vlc3QgVkxBTiB0byBhdXRoIGhvc3QgY29uZmlndXJhdGlvbgorICogSW5wdXQ6CisgKiAgICAgIGVuYWJsZSAtIFRoZSBzdGF0dXMgb2YgZ3Vlc3QgVkxBTiB0byBhdXRoIGhvc3QuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVyLgorICogTm90ZToKKyAqICAgICAgVGhlIG9wZXJhdGlvbmFsIGRpcmVjdGlvbiBvZiA4MDIuMXggZ3Vlc3QgVkxBTiB0byBhdXRoIGhvc3QgY29udHJvbCBpcyBhcyBmb2xsb3dpbmc6CisgKiAgICAgIC0gRU5BQkxFRAorICogICAgICAtIERJU0FCTEVECisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2RvdDF4X2d1ZXN0VmxhbjJBdXRoX3NldChydGtfZW5hYmxlX3QgZW5hYmxlKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmIChlbmFibGUgPj0gUlRLX0VOQUJMRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfRU5BQkxFOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljMXhHVk9wZGlyKGVuYWJsZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19kb3QxeF9ndWVzdFZsYW4yQXV0aF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgODAyLjF4IGd1ZXN0IFZMQU4gdG8gYXV0aCBob3N0IGNvbmZpZ3VyYXRpb24KKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBFbmFibGUgLSBUaGUgc3RhdHVzIG9mIGd1ZXN0IFZMQU4gdG8gYXV0aCBob3N0LgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IDgwMi4xeCBndWVzdCBWTEFOIHRvIGF1dGggaG9zdCBpbmZvcm1hdGlvbi4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfZG90MXhfZ3Vlc3RWbGFuMkF1dGhfZ2V0KHJ0a19lbmFibGVfdCAqcEVuYWJsZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBFbmFibGUpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljMXhHVk9wZGlyKHBFbmFibGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9lZWUuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9lZWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDE0YzJjCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2VlZS5jCkBAIC0wLDAgKzEsMTYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNDgxNTYgJAorICogJERhdGU6IDIwMTQtMDUtMjkgMTY6Mzk6MDYgKzA4MDAgKOmAseWbmywgMjkg5LqU5pyIIDIwMTQpICQKKyAqCisgKiBQdXJwb3NlIDogUlRLIHN3aXRjaCBoaWdoLWxldmVsIEFQSSBmb3IgUlRMODM2Ny9SVEw4MzY3QworICogRmVhdHVyZSA6IEhlcmUgaXMgYSBsaXN0IG9mIGFsbCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBpbiBFRUUgbW9kdWxlLgorICoKKyAqLworCisjaW5jbHVkZSA8cnRrX3N3aXRjaC5oPgorI2luY2x1ZGUgPHJ0a19lcnJvci5oPgorI2luY2x1ZGUgPGVlZS5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydi5oPgorI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnZfZWVlLmg+CisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl9waHkuaD4KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2VlZV9pbml0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgRUVFIGZ1bmN0aW9uIGluaXRpYWxpemF0aW9uLgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBpbml0aWFsaXplIEVFRSBzdGF0dXMuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2VlZV9pbml0KHZvaWQpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgwMDE4LCAxMCwgMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MDAxOCwgMTEsIDEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfZWVlX3BvcnRFbmFibGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IGVuYWJsZSBzdGF0dXMgb2YgRUVFIGZ1bmN0aW9uLgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBwb3J0IGlkLgorICogICAgICBlbmFibGUgLSBlbmFibGUgRUVFIHN0YXR1cy4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9FTkFCTEUgLSBJbnZhbGlkIGVuYWJsZSBpbnB1dC4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBzZXQgRUVFIGZ1bmN0aW9uIHRvIHRoZSBzcGVjaWZpYyBwb3J0LgorICogICAgICBUaGUgY29uZmlndXJhdGlvbiBvZiB0aGUgcG9ydCBpcyBhcyBmb2xsb3dpbmc6CisgKiAgICAgIC0gRElTQUJMRQorICogICAgICAtIEVOQUJMRQorICovCitydGtfYXBpX3JldF90IHJ0a19lZWVfcG9ydEVuYWJsZV9zZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfZW5hYmxlX3QgZW5hYmxlKQoreworICAgIHJ0a19hcGlfcmV0X3QgICByZXRWYWw7CisgICAgcnRrX3VpbnQzMiAgICAgIHJlZ0RhdGE7CisgICAgcnRrX3VpbnQzMiAgICBwaHlfcG9ydDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBwb3J0IGlzIFVUUCBwb3J0ICovCisgICAgUlRLX0NIS19QT1JUX0lTX1VUUChwb3J0KTsKKworICAgIGlmIChlbmFibGU+PVJUS19FTkFCTEVfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgcGh5X3BvcnQgPSBydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0VlZTEwME0ocGh5X3BvcnQsZW5hYmxlKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNFZWVHaWdhKHBoeV9wb3J0LGVuYWJsZSkpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQSFlSZWcocGh5X3BvcnQsIFJUTDgzNjdDX1BIWV9QQUdFX0FERFJFU1MsIDApKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BIWVJlZyhwaHlfcG9ydCwgMCwgJnJlZ0RhdGEpKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIHJlZ0RhdGEgfD0gMHgwMjAwOworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BIWVJlZyhwaHlfcG9ydCwgMCwgcmVnRGF0YSkpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfZWVlX3BvcnRFbmFibGVfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGVuYWJsZSBzdGF0dXMgb2YgRUVFIGZ1bmN0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBFbmFibGUgLSBCYWNrIHByZXNzdXJlIHN0YXR1cy4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgY2FuIGdldCBFRUUgZnVuY3Rpb24gdG8gdGhlIHNwZWNpZmljIHBvcnQuCisgKiAgICAgIFRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBwb3J0IGlzIGFzIGZvbGxvd2luZzoKKyAqICAgICAgLSBESVNBQkxFCisgKiAgICAgIC0gRU5BQkxFCisgKi8KKworcnRrX2FwaV9yZXRfdCBydGtfZWVlX3BvcnRFbmFibGVfZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2VuYWJsZV90ICpwRW5hYmxlKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcmVnRGF0YTEsIHJlZ0RhdGEyOworICAgIHJ0a191aW50MzIgICAgcGh5X3BvcnQ7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgcG9ydCBpcyBVVFAgcG9ydCAqLworICAgIFJUS19DSEtfUE9SVF9JU19VVFAocG9ydCk7CisKKyAgICBpZihOVUxMID09IHBFbmFibGUpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgcGh5X3BvcnQgPSBydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0VlZTEwME0ocGh5X3BvcnQsJnJlZ0RhdGExKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNFZWVHaWdhKHBoeV9wb3J0LCZyZWdEYXRhMikpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAocmVnRGF0YTE9PTEmJnJlZ0RhdGEyPT0xKQorICAgICAgICAqcEVuYWJsZSA9IEVOQUJMRUQ7CisgICAgZWxzZQorICAgICAgICAqcEVuYWJsZSA9IERJU0FCTEVEOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaTJjLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdhNWYzNwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pMmMuYwpAQCAtMCwwICsxLDQzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiAkUmV2aXNpb246IDYzOTMyICQKKyAqICREYXRlOiAyMDE1LTEyLTA4IDE0OjA2OjI5ICswODAwICjlkajkuowsIDA4IOWNgeS6jOaciCAyMDE1KSAkCisgKgorICogUHVycG9zZSA6IFJUSyBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkgZm9yIFJUTDgzNjcvUlRMODM2N0MKKyAqIEZlYXR1cmUgOiBIZXJlIGlzIGEgbGlzdCBvZiBhbGwgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgaW4gaTJjIG1vZHVsZS4KKyAqCisgKi8KKworI2luY2x1ZGUgPHJ0a19zd2l0Y2guaD4KKyNpbmNsdWRlIDxydGtfZXJyb3IuaD4KKyNpbmNsdWRlIDxwb3J0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8cnRsODM2N2NfcmVnLmg+CisKKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2X2kyYy5oPgorI2luY2x1ZGUgPHJ0a19zd2l0Y2guaD4KKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2Lmg+CisjaW5jbHVkZSA8cnRrX3R5cGVzLmg+CisjaW5jbHVkZSA8aTJjLmg+CisKKworc3RhdGljIHJ0a19JMkNfMTZiaXRfbW9kZV90IHJ0a19pMmNfbW9kZSA9IEkyQ19MU0JfMTZCSVRfTU9ERTsKKworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaTJjX2luaXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBJMkMgc21hcnQgZnVuY3Rpb24gaW5pdGlhbGl6YXRpb24uCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIGluaXRpYWxpemUgRUVFIHN0YXR1cy4KKyAqICAgICAgbmVlZCB1c2VkIEdQSU8gcGlucworICogICAgICBPcGVuRHJhaW4gYW5kIGNsb2NrCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2kyY19pbml0KHZvaWQpCit7CisgICAgcnRrX3VpbnQzMiByZXRWYWw7CisgIHN3aXRjaF9jaGlwX3QgQ2hpcElEOworICAvKiBwcm9iZSBzd2l0Y2ggKi8KKyAgaWYoKHJldFZhbCA9IHJ0a19zd2l0Y2hfcHJvYmUoJkNoaXBJRCkpICE9IFJUX0VSUl9PSykKKyAgICAgIHJldHVybiByZXRWYWw7CisKKyAgaWYoIENoaXBJRCA9PSBDSElQX1JUTDgzNzBCICkKKyAgeworICAgLypzZXQgR1BJTzgsIEdQSU85LCBPcGVuRHJhaW4gYXMgSTJDLCBjbG9jayA9IDI1MktIWiAgICovCisgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfTV9JMkNfU1lTX0NUTCwgMHg1YzNmKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworICB9CisgIGVsc2UKKyAgICAgIHJldHVybiBSVF9FUlJfRkFJTEVEOworICByZXR1cm4gIFJUX0VSUl9PSzsKK30KKworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaTJjX21vZGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IEkyQyBkYXRhIGJ5dGUtb3JkZXIuCisgKiBJbnB1dDoKKyAqICAgICAgaTJjbW9kZSAtIGJ5dGUtb3JkZXIgbW9kZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlci4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBzZXQgSTJjIHRyYWZmaWMncyBieXRlLW9yZGVyIC4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfaTJjX21vZGVfc2V0KCBydGtfSTJDXzE2Yml0X21vZGVfdCBpMmNtb2RlICkKK3sKKyAgICBpZihpMmNtb2RlID49IEkyQ19Nb2RlX0VORCkKKyAgICB7CisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisgICAgfQorICAgIGVsc2UgaWYoaTJjbW9kZSA9PSBJMkNfNzBCX0xTQl8xNkJJVF9NT0RFKQorICAgIHsKKyAgICAgICAgcnRrX2kyY19tb2RlID0gSTJDXzcwQl9MU0JfMTZCSVRfTU9ERTsKKworICAgICAgICByZXR1cm4gUlRfRVJSX09LOworICAgIH0KKyAgICBlbHNlIGlmKCBpMmNtb2RlID09IEkyQ19MU0JfMTZCSVRfTU9ERSkKKyAgICB7CisgICAgICAgIHJ0a19pMmNfbW9kZSA9IEkyQ19MU0JfMTZCSVRfTU9ERTsKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PSzsKKyAgICB9CisgICAgZWxzZQorICAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2kyY19tb2RlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBpMmMgdHJhZmZpYyBieXRlLW9yZGVyIHNldHRpbmcuCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwSTJjTW9kZSAtIGkyYyBieXRlLW9yZGVyCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAgICAgLSBpbnB1dCBwYXJhbWV0ZXIgaXMgbnVsbCBwb2ludGVyCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBnZXQgaTJjIHRyYWZmaWMgYnl0ZS1vcmRlciBzZXR0aW5nLgorICovCitydGtfYXBpX3JldF90IHJ0a19pMmNfbW9kZV9nZXQoIHJ0a19JMkNfMTZiaXRfbW9kZV90ICogcEkyY01vZGUpCit7CisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKyAgICBpZihOVUxMID09IHBJMmNNb2RlKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKyAgICBpZihydGtfaTJjX21vZGUgPT0gSTJDXzcwQl9MU0JfMTZCSVRfTU9ERSkKKyAgICAgICAgKnBJMmNNb2RlID0gMTsKKyAgICBlbHNlIGlmICgocnRrX2kyY19tb2RlID09IEkyQ19MU0JfMTZCSVRfTU9ERSkpCisgICAgICAgICpwSTJjTW9kZSA9IDA7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19pMmNfZ3Bpb1Bpbkdyb3VwX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBpMmMgU0RBICYgU0NMIHVzZWQgR1BJTyBwaW5zIGdyb3VwLgorICogSW5wdXQ6CisgKiAgICAgIHBpbnNfZ3JvdXAgLSBHUElPIHBpbnMgZ3JvdXAKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlci4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIHNldCBpMmMgdXNlZCBncGlvIHBpbnMgZ3JvdXAuCisgKiAgICAgIFRoZXJlIGFyZSB0aHJlZSBncm91cCBwaW5zIGNvdWxkIGJlIHVzZWQKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfaTJjX2dwaW9QaW5Hcm91cF9zZXQoIHJ0a19JMkNfZ3Bpb19waW5fdCBwaW5zX2dyb3VwICkKK3sKKyAgICBydGtfdWludDMyIHJldFZhbDsKKworCisgICAgaWYoICggcGluc19ncm91cCA+IEkyQ19HUElPX1BJTl9FTkQgKXx8ICggcGluc19ncm91cCA8IEkyQ19HUElPX1BJTl84XzkpICkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0kyQ0dwaW9QaW5Hcm91cChwaW5zX2dyb3VwKSApICE9IFJUX0VSUl9PSyApCisgICAgICAgIHJldHVybiByZXRWYWwgOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2kyY19ncGlvUGluR3JvdXBfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGkyYyBTREEgJiBTQ0wgdXNlZCBHUElPIHBpbnMgZ3JvdXAuCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwUGluc19ncm91cCAtIEdQSU8gcGlucyBncm91cAorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgICAgIC0gaW5wdXQgcGFyYW1ldGVyIGlzIG51bGwgcG9pbnRlcgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IGkyYyB1c2VkIGdwaW8gcGlucyBncm91cC4KKyAqICAgICAgVGhlcmUgYXJlIHRocmVlIGdyb3VwIHBpbnMgY291bGQgYmUgdXNlZAorICovCitydGtfYXBpX3JldF90IHJ0a19pMmNfZ3Bpb1Bpbkdyb3VwX2dldCggcnRrX0kyQ19ncGlvX3Bpbl90ICogcFBpbnNfZ3JvdXAgKQoreworICAgIHJ0a191aW50MzIgcmV0VmFsOworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBQaW5zX2dyb3VwKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKyAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNJMkNHcGlvUGluR3JvdXAocFBpbnNfZ3JvdXApICkgIT0gUlRfRVJSX09LICkKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19pMmNfZGF0YV9yZWFkCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgcmVhZCBpMmMgc2xhdmUgZGV2aWNlIHJlZ2lzdGVyLgorICogSW5wdXQ6CisgKiAgICAgIGRldmljZUFkZHIgICAtICAgYWNjZXNzIFNsYXZlIGRldmljZSBhZGRyZXNzCisgKiAgICAgIHNsYXZlUmVnQWRkciAtICAgYWNjZXNzIFNsYXZlIHJlZ2lzdGVyIGFkZHJlc3MKKyAqIE91dHB1dDoKKyAqICAgICAgcFJlZ0RhdGEgICAgIC0gICByZWFkIGRhdGEKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfTlVMTF9QT0lOVEVSICAgICAtIGlucHV0IHBhcmFtZXRlciBpcyBudWxsIHBvaW50ZXIKKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGFjY2VzcyBpMmMgc2xhdmUgYW5kIHJlYWQgaTJjIHNsYXZlIGRldmljZSByZWdpc3Rlci4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfaTJjX2RhdGFfcmVhZChydGtfdWludDggZGV2aWNlQWRkciwgcnRrX3VpbnQzMiBzbGF2ZVJlZ0FkZHIsIHJ0a191aW50MzIgKnBSZWdEYXRhKQoreworICAgICBydGtfdWludDMyIHJldFZhbCwgY291bnRlcj0wOworICAgICBydGtfdWludDggY29udHJvbEJ5dGVfVywgY29udHJvbEJ5dGVfUjsKKyAgICAgcnRrX3VpbnQ4IHNsYXZlUmVnQWRkcl9MLCBzbGF2ZVJlZ0FkZHJfSCA9IDB4MCwgdGVtcDsKKyAgICAgcnRrX3VpbnQ4IHJlZ0RhdGFfTCwgcmVnRGF0YV9IOworCisgICAvKiBjb250cm9sIGJ5dGUgOmRldmljZUFkZHJlc3MgKyBXLCAgZGV2aWNlQWRkcmVzcyArIFIgICAqLworICAgIGNvbnRyb2xCeXRlX1cgPSAocnRrX3VpbnQ4KShkZXZpY2VBZGRyIDw8IDEpIDsKKyAgICBjb250cm9sQnl0ZV9SID0gKHJ0a191aW50OCkoY29udHJvbEJ5dGVfVyB8IDB4MSk7CisKKyAgICBzbGF2ZVJlZ0FkZHJfTCA9IChydGtfdWludDgpIChzbGF2ZVJlZ0FkZHIgJiAweDAwRkYpIDsKKyAgICBzbGF2ZVJlZ0FkZHJfSCA9IChydGtfdWludDgpIChzbGF2ZVJlZ0FkZHIgPj44KSA7CisKKyAgICBpZiggcnRrX2kyY19tb2RlID09IEkyQ183MEJfTFNCXzE2QklUX01PREUpCisgICAgeworICAgICAgICB0ZW1wID0gc2xhdmVSZWdBZGRyX0wgOworICAgICAgICBzbGF2ZVJlZ0FkZHJfTCA9IHNsYXZlUmVnQWRkcl9IOworICAgICAgICBzbGF2ZVJlZ0FkZHJfSCA9IHRlbXA7CisgICAgfQorCisKKyAgLypjaGVjayBidXMgc3RhdGU6IGlkbGUqLworICBmb3IoY291bnRlciA9IDMwMDA7IGNvdW50ZXI+MDsgY291bnRlci0tKQorICB7CisgICAgaWYgKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0kyQ19jaGVja0J1c0lkbGUoKSApID09IFJUX0VSUl9PSykKKyAgICAgICAgIGJyZWFrOworICB9CisgIGlmKCBjb3VudGVyID09MCApCisgICAgICByZXR1cm4gcmV0VmFsOyAvKmkyYyBpcyBidXN5Ki8KKworICAgLyp0eCBTdGFydCBjbWQqLworICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljSTJDU3RhcnRDbWQoKSApICE9IFJUX0VSUl9PSyApCisgICAgICAgcmV0dXJuIHJldFZhbCA7CisKKworICAvKnR4IGNvbnRyb2wgX1cqLworICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljSTJDVHhPbmVDaGFyQ21kKGNvbnRyb2xCeXRlX1cpKSE9IFJUX0VSUl9PSyApCisgICAgICByZXR1cm4gcmV0VmFsIDsKKworCisgIC8qY2hlY2sgaWYgUlggYWNrIGZyb20gc2xhdmUqLworICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljSTJDY2hlY2tSeEFjaygpKSAhPSBSVF9FUlJfT0sgKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgLyogdHggc2xhdmUgYnVmZmVyIGFkZHJlc3MgbG93IDggYml0cyAqLworICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljSTJDVHhPbmVDaGFyQ21kKHNsYXZlUmVnQWRkcl9MKSkhPSBSVF9FUlJfT0sgKQorICAgICAgICAgcmV0dXJuIHJldFZhbCAgOworCisgICAvKmNoZWNrIGlmIFJYIGFjayBmcm9tIHNsYXZlKi8KKyAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0kyQ2NoZWNrUnhBY2soKSkgIT0gUlRfRVJSX09LICkKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworCisKKyAgICAgICAgLyogdHggc2xhdmUgYnVmZmVyIGFkZHJlc3MgaGlnaCA4IGJpdHMgKi8KKyAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0kyQ1R4T25lQ2hhckNtZChzbGF2ZVJlZ0FkZHJfSCkpIT0gUlRfRVJSX09LICkKKyAgICAgICAgIHJldHVybiByZXRWYWwgIDsKKworCisgICAvKmNoZWNrIGlmIFJYIGFjayBmcm9tIHNsYXZlKi8KKyAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0kyQ2NoZWNrUnhBY2soKSkgIT0gUlRfRVJSX09LICkKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworCisgICAvKnR4IFN0YXJ0IGNtZCovCisgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNJMkNTdGFydENtZCgpICkgIT0gUlRfRVJSX09LICkKKyAgICAgICByZXR1cm4gcmV0VmFsIDsKKworICAgICAgLyp0eCBjb250cm9sIF9SKi8KKyAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0kyQ1R4T25lQ2hhckNtZChjb250cm9sQnl0ZV9SKSkhPSBSVF9FUlJfT0sgKQorICAgICAgIHJldHVybiByZXRWYWwgOworCisKKyAgLypjaGVjayBpZiBSWCBhY2sgZnJvbSBzbGF2ZSovCisgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNJMkNjaGVja1J4QWNrKCkpICE9IFJUX0VSUl9PSyApCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKworICAgIC8qIHJ4IGxvdyA4Yml0IGRhdGEqLworICAgaWYoICggcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0kyQ1J4T25lQ2hhckNtZCggJnJlZ0RhdGFfTCkgKSAhPSBSVF9FUlJfT0sgKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisKKworICAgIC8qIHR4IGFjayB0byBzbGF2ZSwga2VlcCByZWNlaXZlICovCisgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljSTJDVHhBY2tDbWQoKSkgIT0gUlRfRVJSX09LICkKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAvKiByeCBoaWdoIDhiaXQgZGF0YSovCisgICAgaWYoICggcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0kyQ1J4T25lQ2hhckNtZCggJnJlZ0RhdGFfSCkgKSAhPSBSVF9FUlJfT0sgKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisKKworICAgIC8qIHR4IE5vYWNrIHRvIHNsYXZlLCBTdG9wIHJlY2VpdmUgKi8KKyAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljSTJDVHhOb0Fja0NtZCgpKSAhPSBSVF9FUlJfT0sgKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisKKyAgICAvKnR4IFN0b3AgY21kICovCisgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljSTJDU3RvcENtZCgpKSAhPSBSVF9FUlJfT0sgKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgKnBSZWdEYXRhID0gKHJlZ0RhdGFfSCA8PCA4KSB8IHJlZ0RhdGFfTDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19pMmNfZGF0YV93cml0ZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIHdyaXRlIGRhdGEgdG8gaTJjIHNsYXZlIGRldmljZSByZWdpc3RlcgorICogSW5wdXQ6CisgKiAgICAgIGRldmljZUFkZHIgICAtICAgYWNjZXNzIFNsYXZlIGRldmljZSBhZGRyZXNzCisgKiAgICAgIHNsYXZlUmVnQWRkciAtICAgYWNjZXNzIFNsYXZlIHJlZ2lzdGVyIGFkZHJlc3MKKyAqICAgICAgcmVnRGF0YSAgICAgIC0gICBkYXRhIHRvIHNldAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGFjY2VzcyBpMmMgc2xhdmUgYW5kIHNldHRpbmcgaTJjIHNsYXZlIGRldmljZSByZWdpc3Rlci4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfaTJjX2RhdGFfd3JpdGUocnRrX3VpbnQ4IGRldmljZUFkZHIsIHJ0a191aW50MzIgc2xhdmVSZWdBZGRyLCBydGtfdWludDMyIHJlZ0RhdGEpCit7CisgICAgIHJ0a191aW50MzIgcmV0VmFsLGNvdW50ZXI7CisgICAgIHJ0a191aW50OCBjb250cm9sQnl0ZV9XOworICAgICBydGtfdWludDggc2xhdmVSZWdBZGRyX0wsIHNsYXZlUmVnQWRkcl9IID0gMHgwLCB0ZW1wOworICAgICBydGtfdWludDggcmVnRGF0YV9MLCByZWdEYXRhX0g7CisKKyAgLyogY29udHJvbCBieXRlIDpkZXZpY2VBZGRyZXNzICsgVyAgICAqLworICAgIGNvbnRyb2xCeXRlX1cgPSAocnRrX3VpbnQ4KShkZXZpY2VBZGRyPDwgMSkgOworCisgICAgc2xhdmVSZWdBZGRyX0wgPSAocnRrX3VpbnQ4KSAoc2xhdmVSZWdBZGRyICYgMHgwMEZGKSA7CisgICAgc2xhdmVSZWdBZGRyX0ggPSAocnRrX3VpbnQ4KSAoc2xhdmVSZWdBZGRyID4+OCkgOworCisgICAgcmVnRGF0YV9IICAgPSAocnRrX3VpbnQ4KSAocmVnRGF0YT4+IDgpOworICAgIHJlZ0RhdGFfTCAgID0gKHJ0a191aW50OCkgKHJlZ0RhdGEgJiAweDAwRkYpOworCisgICAgaWYoIHJ0a19pMmNfbW9kZSA9PSBJMkNfNzBCX0xTQl8xNkJJVF9NT0RFKQorICAgIHsKKyAgICAgICAgdGVtcCA9IHNsYXZlUmVnQWRkcl9MIDsKKyAgICAgICAgc2xhdmVSZWdBZGRyX0wgPSBzbGF2ZVJlZ0FkZHJfSDsKKyAgICAgICAgc2xhdmVSZWdBZGRyX0ggPSB0ZW1wOworICAgIH0KKworCisgIC8qY2hlY2sgYnVzIHN0YXRlOiBpZGxlKi8KKyAgZm9yKGNvdW50ZXIgPSAzMDAwOyBjb3VudGVyPjA7IGNvdW50ZXItLSkKKyAgeworICAgIGlmICggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNJMkNfY2hlY2tCdXNJZGxlKCkgKSA9PSBSVF9FUlJfT0spCisgICAgICAgIGJyZWFrOworICB9CisKKyAgaWYoIGNvdW50ZXIgPT0wICkKKyAgICAgIHJldHVybiByZXRWYWw7IC8qaTJjIGlzIGJ1c3kqLworCisKKyAgIC8qdHggU3RhcnQgY21kKi8KKyAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0kyQ1N0YXJ0Q21kKCkgKSAhPSBSVF9FUlJfT0sgKQorICAgICAgIHJldHVybiByZXRWYWwgOworCisKKyAgLyp0eCBjb250cm9sIF9XKi8KKyAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0kyQ1R4T25lQ2hhckNtZChjb250cm9sQnl0ZV9XKSkhPSBSVF9FUlJfT0sgKQorICAgICAgcmV0dXJuIHJldFZhbCA7CisKKworICAvKmNoZWNrIGlmIFJYIGFjayBmcm9tIHNsYXZlKi8KKyAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0kyQ2NoZWNrUnhBY2soKSkgIT0gUlRfRVJSX09LICkKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworCisgICAgLyogdHggc2xhdmUgYnVmZmVyIGFkZHJlc3MgbG93IDggYml0cyAqLworICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljSTJDVHhPbmVDaGFyQ21kKHNsYXZlUmVnQWRkcl9MKSkhPSBSVF9FUlJfT0sgKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisKKyAgIC8qY2hlY2sgaWYgUlggYWNrIGZyb20gc2xhdmUqLworICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljSTJDY2hlY2tSeEFjaygpKSAhPSBSVF9FUlJfT0sgKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisKKyAgIC8qIHR4IHNsYXZlIGJ1ZmZlciBhZGRyZXNzIGhpZ2ggOCBiaXRzICovCisgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNJMkNUeE9uZUNoYXJDbWQoc2xhdmVSZWdBZGRyX0gpKSE9IFJUX0VSUl9PSyApCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKworICAgLypjaGVjayBpZiBSWCBhY2sgZnJvbSBzbGF2ZSovCisgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNJMkNjaGVja1J4QWNrKCkpICE9IFJUX0VSUl9PSyApCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKworICAgICAvKnR4IERhdGF2bHVlIExTQiovCisgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNJMkNUeE9uZUNoYXJDbWQocmVnRGF0YV9MKSkhPSBSVF9FUlJfT0sgKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisKKyAgIC8qY2hlY2sgaWYgUlggYWNrIGZyb20gc2xhdmUqLworICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljSTJDY2hlY2tSeEFjaygpKSAhPSBSVF9FUlJfT0sgKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisKKyAgIC8qdHggRGF0YXZsdWUgTVNCKi8KKyAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0kyQ1R4T25lQ2hhckNtZChyZWdEYXRhX0gpKSE9IFJUX0VSUl9PSyApCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKworICAgLypjaGVjayBpZiBSWCBhY2sgZnJvbSBzbGF2ZSovCisgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNJMkNjaGVja1J4QWNrKCkpICE9IFJUX0VSUl9PSyApCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKworICAgIC8qdHggU3RvcCBjbWQgKi8KKyAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNJMkNTdG9wQ21kKCkpICE9IFJUX0VSUl9PSyApCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisKKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2lnbXAuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pZ21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcwY2JkYQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pZ21wLmMKQEAgLTAsMCArMSwxNTU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNzYzMDYgJAorICogJERhdGU6IDIwMTctMDMtMDggMTU6MTM6NTggKzA4MDAgKOmAseS4iSwgMDgg5LiJ5pyIIDIwMTcpICQKKyAqCisgKiBQdXJwb3NlIDogUlRLIHN3aXRjaCBoaWdoLWxldmVsIEFQSSBmb3IgUlRMODM2Ny9SVEw4MzY3QworICogRmVhdHVyZSA6IEhlcmUgaXMgYSBsaXN0IG9mIGFsbCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBpbiBJR01QIG1vZHVsZS4KKyAqCisgKi8KKworI2luY2x1ZGUgPHJ0a19zd2l0Y2guaD4KKyNpbmNsdWRlIDxydGtfZXJyb3IuaD4KKyNpbmNsdWRlIDxpZ21wLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2Lmg+CisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl9pZ21wLmg+CisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl9sdXQuaD4KKworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaWdtcF9pbml0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgVGhpcyBBUEkgZW5hYmxlcyBIL1cgSUdNUCBhbmQgc2V0IGEgZGVmYXVsdCBpbml0aWFsIGNvbmZpZ3VyYXRpb24uCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZS4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGVuYWJsZXMgSC9XIElHTVAgYW5kIHNldCBhIGRlZmF1bHQgaW5pdGlhbCBjb25maWd1cmF0aW9uLgorICovCitydGtfYXBpX3JldF90IHJ0a19pZ21wX2luaXQodm9pZCkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfcG9ydF90IHBvcnQ7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljTHV0SXBNdWx0aWNhc3RMb29rdXAoRU5BQkxFRCkpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNMdXRJcExvb2t1cE1ldGhvZCgxKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIFJUS19TQ0FOX0FMTF9QSFlfUE9SVE1BU0socG9ydCkKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0lHTVB2MU9wZWFydGlvbihwb3J0LCBQUk9UT0NPTF9PUF9BU0lDKSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljSUdNUHYyT3BlYXJ0aW9uKHBvcnQsIFBST1RPQ09MX09QX0FTSUMpKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNJR01QdjNPcGVhcnRpb24ocG9ydCwgUFJPVE9DT0xfT1BfRkxPT0QpKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNNTER2MU9wZWFydGlvbihwb3J0LCBQUk9UT0NPTF9PUF9BU0lDKSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljTUxEdjJPcGVhcnRpb24ocG9ydCwgUFJPVE9DT0xfT1BfRkxPT0QpKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNJR01QQWxsb3dEeW5hbWljUm91dGVyUG9ydChydGtfc3dpdGNoX3BoeVBvcnRNYXNrX2dldCgpKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0lHTVBGYXN0TGVhdmVFbihFTkFCTEVEKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0lHTVBSZXBvcnRMZWF2ZUZsb29kKDEpKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljSWdtcChFTkFCTEVEKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19pZ21wX3N0YXRlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFRoaXMgQVBJIHNldCBIL1cgSUdNUCBzdGF0ZS4KKyAqIElucHV0OgorICogICAgICBlbmFibGVkICAgICAtIEgvVyBJR01QIHN0YXRlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgLSBFcnJvciBwYXJhbWV0ZXIKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIHNldCBIL1cgSUdNUCBzdGF0ZS4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfaWdtcF9zdGF0ZV9zZXQocnRrX2VuYWJsZV90IGVuYWJsZWQpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKGVuYWJsZWQgPj0gUlRLX0VOQUJMRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNJZ21wKGVuYWJsZWQpKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2lnbXBfc3RhdGVfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgVGhpcyBBUEkgZ2V0IEgvVyBJR01QIHN0YXRlLgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBFbmFibGVkICAgICAgICAtIEgvVyBJR01QIHN0YXRlCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgLSBFcnJvciBwYXJhbWV0ZXIKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIHNldCBjdXJyZW50IEgvVyBJR01QIHN0YXRlLgorICovCitydGtfYXBpX3JldF90IHJ0a19pZ21wX3N0YXRlX2dldChydGtfZW5hYmxlX3QgKnBFbmFibGVkKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKHBFbmFibGVkID09IE5VTEwpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljSWdtcChwRW5hYmxlZCkpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaWdtcF9zdGF0aWNfcm91dGVyX3BvcnRfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQ29uZmlndXJlIHN0YXRpYyByb3V0ZXIgcG9ydAorICogSW5wdXQ6CisgKiAgICAgIHBQb3J0bWFzayAgICAtIFN0YXRpYyBQb3J0IG1hc2sKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfTUFTSyAgICAgICAtIEVycm9yIHBhcmFtZXRlcgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgc2V0IHN0YXRpYyByb3V0ZXIgcG9ydAorICovCitydGtfYXBpX3JldF90IHJ0a19pZ21wX3N0YXRpY19yb3V0ZXJfcG9ydF9zZXQocnRrX3BvcnRtYXNrX3QgKnBQb3J0bWFzaykKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHBtYXNrOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIENoZWNrIFZhbGlkIHBvcnQgbWFzayAqLworICAgIGlmKHBQb3J0bWFzayA9PSBOVUxMKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIFJUS19DSEtfUE9SVE1BU0tfVkFMSUQocFBvcnRtYXNrKTsKKworICAgIGlmICgocmV0VmFsID0gcnRrX3N3aXRjaF9wb3J0bWFza19MMlBfZ2V0KHBQb3J0bWFzaywgJnBtYXNrKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0lHTVBTdGF0aWNSb3V0ZXJQb3J0KHBtYXNrKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19pZ21wX3N0YXRpY19yb3V0ZXJfcG9ydF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgc3RhdGljIHJvdXRlciBwb3J0CisgKiBJbnB1dDoKKyAqICAgICAgTm9uZS4KKyAqIE91dHB1dDoKKyAqICAgICAgcFBvcnRtYXNrICAgICAgIC0gU3RhdGljIHBvcnQgbWFzaworICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9NQVNLICAgICAgIC0gRXJyb3IgcGFyYW1ldGVyCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBnZXQgc3RhdGljIHJvdXRlciBwb3J0CisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2lnbXBfc3RhdGljX3JvdXRlcl9wb3J0X2dldChydGtfcG9ydG1hc2tfdCAqcFBvcnRtYXNrKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcG1hc2s7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYocFBvcnRtYXNrID09IE5VTEwpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljSUdNUFN0YXRpY1JvdXRlclBvcnQoJnBtYXNrKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRrX3N3aXRjaF9wb3J0bWFza19QMkxfZ2V0KHBtYXNrLCBwUG9ydG1hc2spKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2lnbXBfcHJvdG9jb2xfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgc2V0IElHTVAvTUxEIHByb3RvY29sIGFjdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgIC0gUG9ydCBJRAorICogICAgICBwcm90b2NvbCAgICAtIElHTVAvTUxEIHByb3RvY29sCisgKiAgICAgIGFjdGlvbiAgICAgIC0gUGVyLXBvcnQgYW5kIHBlci1wcm90b2NvbCBJR01QIGFjdGlvbiBzZWV0aW5nCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX01BU0sgICAgICAgLSBFcnJvciBwYXJhbWV0ZXIKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIHNldCBJR01QL01MRCBwcm90b2NvbCBhY3Rpb24KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfaWdtcF9wcm90b2NvbF9zZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfaWdtcF9wcm90b2NvbF90IHByb3RvY29sLCBydGtfaWdtcF9hY3Rpb25fdCBhY3Rpb24pCit7CisgICAgcnRrX3VpbnQzMiAgICAgIG9wZXJhdGlvbjsKKyAgICBydGtfYXBpX3JldF90ICAgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIENoZWNrIHBvcnQgdmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQocG9ydCk7CisKKyAgICBpZihwcm90b2NvbCA+PSBQUk9UT0NPTF9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZihhY3Rpb24gPj0gSUdNUF9BQ1RJT05fRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgc3dpdGNoKGFjdGlvbikKKyAgICB7CisgICAgICAgIGNhc2UgSUdNUF9BQ1RJT05fRk9SV0FSRDoKKyAgICAgICAgICAgIG9wZXJhdGlvbiA9IFBST1RPQ09MX09QX0ZMT09EOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSUdNUF9BQ1RJT05fVFJBUDJDUFU6CisgICAgICAgICAgICBvcGVyYXRpb24gPSBQUk9UT0NPTF9PUF9UUkFQOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSUdNUF9BQ1RJT05fRFJPUDoKKyAgICAgICAgICAgIG9wZXJhdGlvbiA9IFBST1RPQ09MX09QX0RST1A7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJR01QX0FDVElPTl9BU0lDOgorICAgICAgICAgICAgb3BlcmF0aW9uID0gUFJPVE9DT0xfT1BfQVNJQzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKyAgICB9CisKKyAgICBzd2l0Y2gocHJvdG9jb2wpCisgICAgeworICAgICAgICBjYXNlIFBST1RPQ09MX0lHTVB2MToKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0lHTVB2MU9wZWFydGlvbihydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgb3BlcmF0aW9uKSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQUk9UT0NPTF9JR01QdjI6CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNJR01QdjJPcGVhcnRpb24ocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIG9wZXJhdGlvbikpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUFJPVE9DT0xfSUdNUHYzOgorICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljSUdNUHYzT3BlYXJ0aW9uKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCBvcGVyYXRpb24pKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBST1RPQ09MX01MRHYxOgorICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljTUxEdjFPcGVhcnRpb24ocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIG9wZXJhdGlvbikpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUFJPVE9DT0xfTUxEdjI6CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNNTER2Mk9wZWFydGlvbihydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgb3BlcmF0aW9uKSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaWdtcF9wcm90b2NvbF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBzZXQgSUdNUC9NTEQgcHJvdG9jb2wgYWN0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQb3J0IElECisgKiAgICAgIHByb3RvY29sICAgIC0gSUdNUC9NTEQgcHJvdG9jb2wKKyAqICAgICAgYWN0aW9uICAgICAgLSBQZXItcG9ydCBhbmQgcGVyLXByb3RvY29sIElHTVAgYWN0aW9uIHNlZXRpbmcKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfTUFTSyAgICAgICAtIEVycm9yIHBhcmFtZXRlcgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgc2V0IElHTVAvTUxEIHByb3RvY29sIGFjdGlvbgorICovCitydGtfYXBpX3JldF90IHJ0a19pZ21wX3Byb3RvY29sX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19pZ21wX3Byb3RvY29sX3QgcHJvdG9jb2wsIHJ0a19pZ21wX2FjdGlvbl90ICpwQWN0aW9uKQoreworICAgIHJ0a191aW50MzIgICAgICBvcGVyYXRpb247CisgICAgcnRrX2FwaV9yZXRfdCAgIHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBwb3J0IHZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgaWYocHJvdG9jb2wgPj0gUFJPVE9DT0xfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYocEFjdGlvbiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIHN3aXRjaChwcm90b2NvbCkKKyAgICB7CisgICAgICAgIGNhc2UgUFJPVE9DT0xfSUdNUHYxOgorICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljSUdNUHYxT3BlYXJ0aW9uKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCAmb3BlcmF0aW9uKSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQUk9UT0NPTF9JR01QdjI6CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNJR01QdjJPcGVhcnRpb24ocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksICZvcGVyYXRpb24pKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBST1RPQ09MX0lHTVB2MzoKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0lHTVB2M09wZWFydGlvbihydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgJm9wZXJhdGlvbikpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUFJPVE9DT0xfTUxEdjE6CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNNTER2MU9wZWFydGlvbihydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgJm9wZXJhdGlvbikpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUFJPVE9DT0xfTUxEdjI6CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNNTER2Mk9wZWFydGlvbihydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgJm9wZXJhdGlvbikpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgfQorCisgICAgc3dpdGNoKG9wZXJhdGlvbikKKyAgICB7CisgICAgICAgIGNhc2UgUFJPVE9DT0xfT1BfRkxPT0Q6CisgICAgICAgICAgICAqcEFjdGlvbiA9IElHTVBfQUNUSU9OX0ZPUldBUkQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQUk9UT0NPTF9PUF9UUkFQOgorICAgICAgICAgICAgKnBBY3Rpb24gPSBJR01QX0FDVElPTl9UUkFQMkNQVTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBST1RPQ09MX09QX0RST1A6CisgICAgICAgICAgICAqcEFjdGlvbiA9IElHTVBfQUNUSU9OX0RST1A7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQUk9UT0NPTF9PUF9BU0lDOgorICAgICAgICAgICAgKnBBY3Rpb24gPSBJR01QX0FDVElPTl9BU0lDOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaWdtcF9mYXN0TGVhdmVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgc2V0IElHTVAvTUxEIEZhc3RMZWF2ZSBzdGF0ZQorICogSW5wdXQ6CisgKiAgICAgIHN0YXRlICAgICAgIC0gRU5BQkxFRDogRW5hYmxlIEZhc3RMZWF2ZSwgRElTQUJMRUQ6IGRpc2FibGUgRmFzdExlYXZlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgIC0gRXJyb3IgSW5wdXQKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgc2V0IElHTVAvTUxEIEZhc3RMZWF2ZSBzdGF0ZQorICovCitydGtfYXBpX3JldF90IHJ0a19pZ21wX2Zhc3RMZWF2ZV9zZXQocnRrX2VuYWJsZV90IHN0YXRlKQoreworICAgIHJ0a19hcGlfcmV0X3QgICByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoc3RhdGUgPj0gUlRLX0VOQUJMRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNJR01QRmFzdExlYXZlRW4oKHJ0a191aW50MzIpc3RhdGUpKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2lnbXBfZmFzdExlYXZlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIGdldCBJR01QL01MRCBGYXN0TGVhdmUgc3RhdGUKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBTdGF0ZSAgICAgIC0gRU5BQkxFRDogRW5hYmxlIEZhc3RMZWF2ZSwgRElTQUJMRUQ6IGRpc2FibGUgRmFzdExlYXZlCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfTlVMTF9QT0lOVEVSICAgIC0gTlVMTCBwb2ludGVyCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGdldCBJR01QL01MRCBGYXN0TGVhdmUgc3RhdGUKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfaWdtcF9mYXN0TGVhdmVfZ2V0KHJ0a19lbmFibGVfdCAqcFN0YXRlKQoreworICAgIHJ0a191aW50MzIgICAgICBmYXN0X2xlYXZlOworICAgIHJ0a19hcGlfcmV0X3QgICByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYocFN0YXRlID09IE5VTEwpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljSUdNUEZhc3RMZWF2ZUVuKCZmYXN0X2xlYXZlKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICpwU3RhdGUgPSAoKGZhc3RfbGVhdmUgPT0gMSkgPyBFTkFCTEVEIDogRElTQUJMRUQpOworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19pZ21wX21heEdyb3VwX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwZXIgcG9ydCBtdWx0aWNhc3QgZ3JvdXAgbGVhcm5pbmcgbGltaXQuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQb3J0IElECisgKiAgICAgIGdyb3VwICAgICAgIC0gVGhlIG51bWJlciBvZiBtdWx0aWNhc3QgZ3JvdXAgbGVhcm5pbmcgbGltaXQuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgIC0gRXJyb3IgUG9ydCBJRAorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFICAgIC0gcGFyYW1ldGVyIG91dCBvZiByYW5nZQorICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBzZXQgcGVyIHBvcnQgbXVsdGljYXN0IGdyb3VwIGxlYXJuaW5nIGxpbWl0LgorICovCitydGtfYXBpX3JldF90IHJ0a19pZ21wX21heEdyb3VwX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a191aW50MzIgZ3JvdXApCit7CisgICAgcnRrX2FwaV9yZXRfdCAgIHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBwb3J0IHZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgaWYoZ3JvdXAgPiBSVEw4MzY3Q19JR01QX01BWF9HT1VQKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0lHTVBQb3J0TUFYR3JvdXAocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIGdyb3VwKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19pZ21wX21heEdyb3VwX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwZXIgcG9ydCBtdWx0aWNhc3QgZ3JvdXAgbGVhcm5pbmcgbGltaXQuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQb3J0IElECisgKiBPdXRwdXQ6CisgKiAgICAgIHBHcm91cCAgICAgIC0gVGhlIG51bWJlciBvZiBtdWx0aWNhc3QgZ3JvdXAgbGVhcm5pbmcgbGltaXQuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgIC0gRXJyb3IgUG9ydCBJRAorICogICAgICBSVF9FUlJfTlVMTF9QT0lOVEVSICAgIC0gTnVsbCBwb2ludGVyCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGdldCBwZXIgcG9ydCBtdWx0aWNhc3QgZ3JvdXAgbGVhcm5pbmcgbGltaXQuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2lnbXBfbWF4R3JvdXBfZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3VpbnQzMiAqcEdyb3VwKQoreworICAgIHJ0a19hcGlfcmV0X3QgICByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgcG9ydCB2YWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwb3J0KTsKKworICAgIGlmKHBHcm91cCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0lHTVBQb3J0TUFYR3JvdXAocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIHBHcm91cCkpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaWdtcF9jdXJyZW50R3JvdXBfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHBlciBwb3J0IG11bHRpY2FzdCBncm91cCBsZWFybmluZyBjb3VudC4KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAtIFBvcnQgSUQKKyAqIE91dHB1dDoKKyAqICAgICAgcEdyb3VwICAgICAgLSBUaGUgbnVtYmVyIG9mIG11bHRpY2FzdCBncm91cCBsZWFybmluZyBjb3VudC4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgLSBFcnJvciBQb3J0IElECisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgICAgLSBOdWxsIHBvaW50ZXIKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgZ2V0IHBlciBwb3J0IG11bHRpY2FzdCBncm91cCBsZWFybmluZyBjb3VudC4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfaWdtcF9jdXJyZW50R3JvdXBfZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3VpbnQzMiAqcEdyb3VwKQoreworICAgIHJ0a19hcGlfcmV0X3QgICByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgcG9ydCB2YWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwb3J0KTsKKworICAgIGlmKHBHcm91cCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0lHTVBQb3J0Q3VycmVudEdyb3VwKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCBwR3JvdXApKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2lnbXBfdGFibGVGdWxsQWN0aW9uX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIHNldCBJR01QL01MRCBUYWJsZSBGdWxsIEFjdGlvbgorICogSW5wdXQ6CisgKiAgICAgIGFjdGlvbiAgICAgIC0gVGFibGUgRnVsbCBBY3Rpb24KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgLSBFcnJvciBJbnB1dAorICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICovCitydGtfYXBpX3JldF90IHJ0a19pZ21wX3RhYmxlRnVsbEFjdGlvbl9zZXQocnRrX2lnbXBfdGFibGVGdWxsQWN0aW9uX3QgYWN0aW9uKQoreworICAgIHJ0a19hcGlfcmV0X3QgICByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoYWN0aW9uID49IElHTVBfVEFCTEVfRlVMTF9PUF9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNJR01QVGFibGVGdWxsT1AoKHJ0a191aW50MzIpYWN0aW9uKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19pZ21wX3RhYmxlRnVsbEFjdGlvbl9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBnZXQgSUdNUC9NTEQgVGFibGUgRnVsbCBBY3Rpb24KKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBBY3Rpb24gICAgIC0gVGFibGUgRnVsbCBBY3Rpb24KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgICAgLSBOdWxsIHBvaW50ZXIKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfaWdtcF90YWJsZUZ1bGxBY3Rpb25fZ2V0KHJ0a19pZ21wX3RhYmxlRnVsbEFjdGlvbl90ICpwQWN0aW9uKQoreworICAgIHJ0a19hcGlfcmV0X3QgICByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoTlVMTCA9PSBwQWN0aW9uKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0lHTVBUYWJsZUZ1bGxPUCgocnRrX3VpbnQzMiAqKXBBY3Rpb24pKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2lnbXBfY2hlY2tzdW1FcnJvckFjdGlvbl9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBzZXQgSUdNUC9NTEQgQ2hlY2tzdW0gRXJyb3IgQWN0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgYWN0aW9uICAgICAgLSBDaGVja3N1bSBlcnJvciBBY3Rpb24KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgLSBFcnJvciBJbnB1dAorICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICovCitydGtfYXBpX3JldF90IHJ0a19pZ21wX2NoZWNrc3VtRXJyb3JBY3Rpb25fc2V0KHJ0a19pZ21wX2NoZWNrc3VtRXJyb3JBY3Rpb25fdCBhY3Rpb24pCit7CisgICAgcnRrX2FwaV9yZXRfdCAgIHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihhY3Rpb24gPj0gSUdNUF9DUkNfRVJSX09QX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0lHTVBDUkNFcnJPUCgocnRrX3VpbnQzMilhY3Rpb24pKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaWdtcF9jaGVja3N1bUVycm9yQWN0aW9uX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIGdldCBJR01QL01MRCBDaGVja3N1bSBFcnJvciBBY3Rpb24KKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBBY3Rpb24gICAgIC0gQ2hlY2tzdW0gZXJyb3IgQWN0aW9uCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfTlVMTF9QT0lOVEVSICAgIC0gTnVsbCBwb2ludGVyCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2lnbXBfY2hlY2tzdW1FcnJvckFjdGlvbl9nZXQocnRrX2lnbXBfY2hlY2tzdW1FcnJvckFjdGlvbl90ICpwQWN0aW9uKQoreworICAgIHJ0a19hcGlfcmV0X3QgICByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoTlVMTCA9PSBwQWN0aW9uKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0lHTVBDUkNFcnJPUCgocnRrX3VpbnQzMiAqKXBBY3Rpb24pKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2lnbXBfbGVhdmVUaW1lcl9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBzZXQgSUdNUC9NTEQgTGVhdmUgdGltZXIKKyAqIElucHV0OgorICogICAgICB0aW1lciAgICAgICAtIExlYXZlIHRpbWVyCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgIC0gRXJyb3IgSW5wdXQKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfaWdtcF9sZWF2ZVRpbWVyX3NldChydGtfdWludDMyIHRpbWVyKQoreworICAgIHJ0a19hcGlfcmV0X3QgICByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYodGltZXIgPiBSVEw4MzY3Q19NQVhfTEVBVkVfVElNRVIpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNJR01QTGVhdmVUaW1lcih0aW1lcikpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaWdtcF9sZWF2ZVRpbWVyX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIGdldCBJR01QL01MRCBMZWF2ZSB0aW1lcgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcFRpbWVyICAgICAgLSBMZWF2ZSBUaW1lci4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgICAgLSBOdWxsIHBvaW50ZXIKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfaWdtcF9sZWF2ZVRpbWVyX2dldChydGtfdWludDMyICpwVGltZXIpCit7CisgICAgcnRrX2FwaV9yZXRfdCAgIHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBUaW1lcikKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNJR01QTGVhdmVUaW1lcihwVGltZXIpKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2lnbXBfcXVlcnlJbnRlcnZhbF9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBzZXQgSUdNUC9NTEQgUXVlcnkgSW50ZXJ2YWwKKyAqIElucHV0OgorICogICAgICBpbnRlcnZhbCAgICAgLSBRdWVyeSBJbnRlcnZhbAorICogT3V0cHV0OgorICogICAgICBOb25lLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAtIEVycm9yIElucHV0CisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2lnbXBfcXVlcnlJbnRlcnZhbF9zZXQocnRrX3VpbnQzMiBpbnRlcnZhbCkKK3sKKyAgICBydGtfYXBpX3JldF90ICAgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKGludGVydmFsID4gUlRMODM2N0NfTUFYX1FVRVJZX0lOVCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0lHTVBRdWVyeUludGVydmFsKGludGVydmFsKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19pZ21wX3F1ZXJ5SW50ZXJ2YWxfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgZ2V0IElHTVAvTUxEIFF1ZXJ5IEludGVydmFsCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZS4KKyAqIE91dHB1dDoKKyAqICAgICAgcEludGVydmFsICAgLSBRdWVyeSBJbnRlcnZhbAorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAgICAtIE51bGwgcG9pbnRlcgorICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICovCitydGtfYXBpX3JldF90IHJ0a19pZ21wX3F1ZXJ5SW50ZXJ2YWxfZ2V0KHJ0a191aW50MzIgKnBJbnRlcnZhbCkKK3sKKyAgICBydGtfYXBpX3JldF90ICAgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKE5VTEwgPT0gcEludGVydmFsKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0lHTVBRdWVyeUludGVydmFsKHBJbnRlcnZhbCkpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaWdtcF9yb2J1c3RuZXNzX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIHNldCBJR01QL01MRCBSb2J1c3RuZXNzIHZhbHVlCisgKiBJbnB1dDoKKyAqICAgICAgcm9idXN0bmVzcyAgICAgLSBSb2J1c3RuZXNzIHZhbHVlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgIC0gRXJyb3IgSW5wdXQKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfaWdtcF9yb2J1c3RuZXNzX3NldChydGtfdWludDMyIHJvYnVzdG5lc3MpCit7CisgICAgcnRrX2FwaV9yZXRfdCAgIHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihyb2J1c3RuZXNzID4gUlRMODM2N0NfTUFYX1JPQl9WQVIpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNJR01QUm9iVmFyKHJvYnVzdG5lc3MpKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2lnbXBfcm9idXN0bmVzc19nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBnZXQgSUdNUC9NTEQgUm9idXN0bmVzcyB2YWx1ZQorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcFJvYnVzdG5lc3MgICAgIC0gUm9idXN0bmVzcyB2YWx1ZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgICAgLSBOdWxsIHBvaW50ZXIKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfaWdtcF9yb2J1c3RuZXNzX2dldChydGtfdWludDMyICpwUm9idXN0bmVzcykKK3sKKyAgICBydGtfYXBpX3JldF90ICAgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKE5VTEwgPT0gcFJvYnVzdG5lc3MpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljSUdNUFJvYlZhcihwUm9idXN0bmVzcykpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaWdtcF9keW5hbWljUm91dGVyUm9ydEFsbG93X3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIENvbmZpZ3VyZSBkeW5hbWljIHJvdXRlciBwb3J0IGFsbG93IG9wdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHBQb3J0bWFzayAgICAtIER5bmFtaWMgUG9ydCBhbGxvdyBtYXNrCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX01BU0sgICAgICAgLSBFcnJvciBwYXJhbWV0ZXIKKyAqIE5vdGU6CisgKgorICovCitydGtfYXBpX3JldF90IHJ0a19pZ21wX2R5bmFtaWNSb3V0ZXJQb3J0QWxsb3dfc2V0KHJ0a19wb3J0bWFza190ICpwUG9ydG1hc2spCit7CisgICAgcnRrX2FwaV9yZXRfdCAgIHJldFZhbDsKKyAgICBydGtfdWludDMyIHBtYXNrOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKE5VTEwgPT0gcFBvcnRtYXNrKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIFJUS19DSEtfUE9SVE1BU0tfVkFMSUQocFBvcnRtYXNrKTsKKworICAgIGlmICgocmV0VmFsID0gcnRrX3N3aXRjaF9wb3J0bWFza19MMlBfZ2V0KHBQb3J0bWFzaywgJnBtYXNrKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0lHTVBBbGxvd0R5bmFtaWNSb3V0ZXJQb3J0KHBtYXNrKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19pZ21wX2R5bmFtaWNSb3V0ZXJSb3J0QWxsb3dfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGR5bmFtaWMgcm91dGVyIHBvcnQgYWxsb3cgb3B0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZS4KKyAqIE91dHB1dDoKKyAqICAgICAgcFBvcnRtYXNrICAgIC0gRHluYW1pYyBQb3J0IGFsbG93IG1hc2sKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAgICAtIE51bGwgcG9pbnRlcgorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9NQVNLICAgICAgIC0gRXJyb3IgcGFyYW1ldGVyCisgKiBOb3RlOgorICoKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfaWdtcF9keW5hbWljUm91dGVyUG9ydEFsbG93X2dldChydGtfcG9ydG1hc2tfdCAqcFBvcnRtYXNrKQoreworICAgIHJ0a19hcGlfcmV0X3QgICByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBwbWFzazsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBQb3J0bWFzaykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNJR01QQWxsb3dEeW5hbWljUm91dGVyUG9ydCgmcG1hc2spKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKChyZXRWYWwgPSBydGtfc3dpdGNoX3BvcnRtYXNrX1AyTF9nZXQocG1hc2ssIHBQb3J0bWFzaykpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaWdtcF9keW5hbWljUm91dGVyUG9ydF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgZHluYW1pYyByb3V0ZXIgcG9ydAorICogSW5wdXQ6CisgKiAgICAgIE5vbmUuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBEeW5hbWljUm91dGVyUG9ydCAgICAtIER5bmFtaWMgUm91dGVyIFBvcnQKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAgICAtIE51bGwgcG9pbnRlcgorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9NQVNLICAgICAgIC0gRXJyb3IgcGFyYW1ldGVyCisgKiBOb3RlOgorICoKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfaWdtcF9keW5hbWljUm91dGVyUG9ydF9nZXQocnRrX2lnbXBfZHluYW1pY1JvdXRlclBvcnRfdCAqcER5bmFtaWNSb3V0ZXJQb3J0KQoreworICAgIHJ0a19hcGlfcmV0X3QgICByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBwb3J0OworICAgIHJ0a191aW50MzIgdGltZXI7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoTlVMTCA9PSBwRHluYW1pY1JvdXRlclBvcnQpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljSUdNUGR5bmFtaWNSb3V0ZXJQb3J0MSgmcG9ydCwgJnRpbWVyKSkhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAocG9ydCA9PSBSVEw4MzY3Q19ST1VURVJfUE9SVF9JTlZBTElEKQorICAgIHsKKyAgICAgICAgcER5bmFtaWNSb3V0ZXJQb3J0LT5keW5hbWljUm91dGVyUG9ydDBWYWxpZCA9IERJU0FCTEVEOworICAgICAgICBwRHluYW1pY1JvdXRlclBvcnQtPmR5bmFtaWNSb3V0ZXJQb3J0MCAgICAgID0gMDsKKyAgICAgICAgcER5bmFtaWNSb3V0ZXJQb3J0LT5keW5hbWljUm91dGVyUG9ydDBUaW1lciA9IDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHBEeW5hbWljUm91dGVyUG9ydC0+ZHluYW1pY1JvdXRlclBvcnQwVmFsaWQgPSBFTkFCTEVEOworICAgICAgICBwRHluYW1pY1JvdXRlclBvcnQtPmR5bmFtaWNSb3V0ZXJQb3J0MCAgICAgID0gcnRrX3N3aXRjaF9wb3J0X1AyTF9nZXQocG9ydCk7CisgICAgICAgIHBEeW5hbWljUm91dGVyUG9ydC0+ZHluYW1pY1JvdXRlclBvcnQwVGltZXIgPSB0aW1lcjsKKyAgICB9CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNJR01QZHluYW1pY1JvdXRlclBvcnQyKCZwb3J0LCAmdGltZXIpKSE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmIChwb3J0ID09IFJUTDgzNjdDX1JPVVRFUl9QT1JUX0lOVkFMSUQpCisgICAgeworICAgICAgICBwRHluYW1pY1JvdXRlclBvcnQtPmR5bmFtaWNSb3V0ZXJQb3J0MVZhbGlkID0gRElTQUJMRUQ7CisgICAgICAgIHBEeW5hbWljUm91dGVyUG9ydC0+ZHluYW1pY1JvdXRlclBvcnQxICAgICAgPSAwOworICAgICAgICBwRHluYW1pY1JvdXRlclBvcnQtPmR5bmFtaWNSb3V0ZXJQb3J0MVRpbWVyID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcER5bmFtaWNSb3V0ZXJQb3J0LT5keW5hbWljUm91dGVyUG9ydDFWYWxpZCA9IEVOQUJMRUQ7CisgICAgICAgIHBEeW5hbWljUm91dGVyUG9ydC0+ZHluYW1pY1JvdXRlclBvcnQxICAgICAgPSBydGtfc3dpdGNoX3BvcnRfUDJMX2dldChwb3J0KTsKKyAgICAgICAgcER5bmFtaWNSb3V0ZXJQb3J0LT5keW5hbWljUm91dGVyUG9ydDFUaW1lciA9IHRpbWVyOworICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19pZ21wX3N1cHByZXNzaW9uRW5hYmxlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIENvbmZpZ3VyZSBJR01QdjEvdjIgJiBNTER2MSBSZXBvcnQvTGVhdmUvRG9uZSBzdXBwcmVzc2lvbgorICogSW5wdXQ6CisgKiAgICAgIHJlcG9ydFN1cHByZXNzaW9uICAgLSBSZXBvcnQgc3VwcHJlc3Npb24KKyAqICAgICAgbGVhdmVTdXBwcmVzc2lvbiAgICAtIExlYXZlIHN1cHByZXNzaW9uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgLSBFcnJvciBJbnB1dAorICogTm90ZToKKyAqCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2lnbXBfc3VwcHJlc3Npb25FbmFibGVfc2V0KHJ0a19lbmFibGVfdCByZXBvcnRTdXBwcmVzc2lvbiwgcnRrX2VuYWJsZV90IGxlYXZlU3VwcHJlc3Npb24pCit7CisgICAgcnRrX2FwaV9yZXRfdCAgIHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihyZXBvcnRTdXBwcmVzc2lvbiA+PSBSVEtfRU5BQkxFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmKGxlYXZlU3VwcHJlc3Npb24gPj0gUlRLX0VOQUJMRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNJR01QU3VwcHJlc3Npb24oKHJ0a191aW50MzIpcmVwb3J0U3VwcHJlc3Npb24sIChydGtfdWludDMyKWxlYXZlU3VwcHJlc3Npb24pKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2lnbXBfc3VwcHJlc3Npb25FbmFibGVfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IElHTVB2MS92MiAmIE1MRHYxIFJlcG9ydC9MZWF2ZS9Eb25lIHN1cHByZXNzaW9uCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwUmVwb3J0U3VwcHJlc3Npb24gIC0gUmVwb3J0IHN1cHByZXNzaW9uCisgKiAgICAgIHBMZWF2ZVN1cHByZXNzaW9uICAgLSBMZWF2ZSBzdXBwcmVzc2lvbgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfTlVMTF9QT0lOVEVSICAgIC0gTnVsbCBwb2ludGVyCisgKiBOb3RlOgorICoKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfaWdtcF9zdXBwcmVzc2lvbkVuYWJsZV9nZXQocnRrX2VuYWJsZV90ICpwUmVwb3J0U3VwcHJlc3Npb24sIHJ0a19lbmFibGVfdCAqcExlYXZlU3VwcHJlc3Npb24pCit7CisgICAgcnRrX2FwaV9yZXRfdCAgIHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBSZXBvcnRTdXBwcmVzc2lvbikKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZihOVUxMID09IHBMZWF2ZVN1cHByZXNzaW9uKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0lHTVBTdXBwcmVzc2lvbigocnRrX3VpbnQzMiAqKXBSZXBvcnRTdXBwcmVzc2lvbiwgKHJ0a191aW50MzIgKilwTGVhdmVTdXBwcmVzc2lvbikpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaWdtcF9wb3J0UnhQa3RFbmFibGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQ29uZmlndXJlIElHTVAvTUxEIFJYIFBhY2tldCBjb25maWd1cmF0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAtIFBvcnQgSUQKKyAqICAgICAgcFJ4Q2ZnICAgICAtIFJYIFBhY2tldCBDb25maWd1cmF0aW9uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgLSBFcnJvciBJbnB1dAorICogICAgICBSVF9FUlJfTlVMTF9QT0lOVEVSICAgIC0gTnVsbCBwb2ludGVyCisgKiBOb3RlOgorICoKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfaWdtcF9wb3J0UnhQa3RFbmFibGVfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2lnbXBfcnhQa3RFbmFibGVfdCAqcFJ4Q2ZnKQoreworICAgIHJ0a19hcGlfcmV0X3QgICByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgcG9ydCB2YWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwb3J0KTsKKworICAgIGlmKE5VTEwgPT0gcFJ4Q2ZnKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmKHBSeENmZy0+cnhRdWVyeSA+PSBSVEtfRU5BQkxFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmKHBSeENmZy0+cnhSZXBvcnQgPj0gUlRLX0VOQUJMRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZihwUnhDZmctPnJ4TGVhdmUgPj0gUlRLX0VOQUJMRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZihwUnhDZmctPnJ4TVJQID49IFJUS19FTkFCTEVfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYocFJ4Q2ZnLT5yeE1jYXN0ID49IFJUS19FTkFCTEVfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljSUdNUFF1ZXJ5UlgocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIChydGtfdWludDMyKXBSeENmZy0+cnhRdWVyeSkpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNJR01QUmVwb3J0UlgocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIChydGtfdWludDMyKXBSeENmZy0+cnhSZXBvcnQpKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljSUdNUExlYXZlUlgocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIChydGtfdWludDMyKXBSeENmZy0+cnhMZWF2ZSkpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNJR01QTVJQUlgocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIChydGtfdWludDMyKXBSeENmZy0+cnhNUlApKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljSUdNUE1jRGF0YVJYKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCAocnRrX3VpbnQzMilwUnhDZmctPnJ4TWNhc3QpKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2lnbXBfcG9ydFJ4UGt0RW5hYmxlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBJR01QL01MRCBSWCBQYWNrZXQgY29uZmlndXJhdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgLSBQb3J0IElECisgKiAgICAgIHBSeENmZyAgICAgLSBSWCBQYWNrZXQgQ29uZmlndXJhdGlvbgorICogT3V0cHV0OgorICogICAgICBOb25lLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgIC0gRXJyb3IgSW5wdXQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAgICAtIE51bGwgcG9pbnRlcgorICogTm90ZToKKyAqCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2lnbXBfcG9ydFJ4UGt0RW5hYmxlX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19pZ21wX3J4UGt0RW5hYmxlX3QgKnBSeENmZykKK3sKKyAgICBydGtfYXBpX3JldF90ICAgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIENoZWNrIHBvcnQgdmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQocG9ydCk7CisKKyAgICBpZihOVUxMID09IHBSeENmZykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNJR01QUXVlcnlSWChydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgKHJ0a191aW50MzIgKikmKHBSeENmZy0+cnhRdWVyeSkpKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljSUdNUFJlcG9ydFJYKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCAocnRrX3VpbnQzMiAqKSYocFJ4Q2ZnLT5yeFJlcG9ydCkpKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljSUdNUExlYXZlUlgocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIChydGtfdWludDMyICopJihwUnhDZmctPnJ4TGVhdmUpKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0lHTVBNUlBSWChydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgKHJ0a191aW50MzIgKikmKHBSeENmZy0+cnhNUlApKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0lHTVBNY0RhdGFSWChydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgKHJ0a191aW50MzIgKikmKHBSeENmZy0+cnhNY2FzdCkpKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2lnbXBfZ3JvdXBJbmZvX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBJR01QL01MRCBHcm91cCBkYXRhYmFzZQorICogSW5wdXQ6CisgKiAgICAgIGluZGVzICAgICAgIC0gSW5kZXggKDB+MjU1KQorICogT3V0cHV0OgorICogICAgICBwR3JvdXAgICAgICAtIEdyb3VwIGRhdGFiYXNlIGluZm9ybWF0aW9uLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgIC0gRXJyb3IgSW5wdXQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAgICAtIE51bGwgcG9pbnRlcgorICogTm90ZToKKyAqCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2lnbXBfZ3JvdXBJbmZvX2dldChydGtfdWludDMyIGluZGV4LCBydGtfaWdtcF9ncm91cEluZm9fdCAqcEdyb3VwKQoreworICAgIHJ0a19hcGlfcmV0X3QgICByZXRWYWw7CisgICAgcnRrX3VpbnQzMiAgICAgIHZhbGlkOworICAgIHJ0bDgzNjdjX2lnbXBncm91cCAgZ3JwOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIENoZWNrIGluZGV4ICovCisgICAgaWYoaW5kZXggPiBSVEw4MzY3Q19JR01QX01BWF9HT1VQKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYoTlVMTCA9PSBwR3JvdXApCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljSUdNUEdyb3VwKGluZGV4LCAmdmFsaWQsICZncnApKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgbWVtc2V0KHBHcm91cCwgMHgwMCwgc2l6ZW9mKHJ0a19pZ21wX2dyb3VwSW5mb190KSk7CisgICAgcEdyb3VwLT52YWxpZCA9IHZhbGlkOworICAgIHBHcm91cC0+cmVwb3J0U3VwcEZsYWcgPSBncnAucmVwb3J0X3N1cHBfZmxhZzsKKworICAgIGlmKGdycC5wMF90aW1lciAhPSAwKQorICAgIHsKKyAgICAgICAgUlRLX1BPUlRNQVNLX1BPUlRfU0VUKChwR3JvdXAtPm1lbWJlciksIHJ0a19zd2l0Y2hfcG9ydF9QMkxfZ2V0KDApKTsKKyAgICAgICAgcEdyb3VwLT50aW1lcltydGtfc3dpdGNoX3BvcnRfUDJMX2dldCgwKV0gPSBncnAucDBfdGltZXI7CisgICAgfQorCisgICAgaWYoZ3JwLnAxX3RpbWVyICE9IDApCisgICAgeworICAgICAgICBSVEtfUE9SVE1BU0tfUE9SVF9TRVQoKHBHcm91cC0+bWVtYmVyKSwgcnRrX3N3aXRjaF9wb3J0X1AyTF9nZXQoMSkpOworICAgICAgICBwR3JvdXAtPnRpbWVyW3J0a19zd2l0Y2hfcG9ydF9QMkxfZ2V0KDEpXSA9IGdycC5wMV90aW1lcjsKKyAgICB9CisKKyAgICBpZihncnAucDJfdGltZXIgIT0gMCkKKyAgICB7CisgICAgICAgIFJUS19QT1JUTUFTS19QT1JUX1NFVCgocEdyb3VwLT5tZW1iZXIpLCBydGtfc3dpdGNoX3BvcnRfUDJMX2dldCgyKSk7CisgICAgICAgIHBHcm91cC0+dGltZXJbcnRrX3N3aXRjaF9wb3J0X1AyTF9nZXQoMildID0gZ3JwLnAyX3RpbWVyOworICAgIH0KKworICAgIGlmKGdycC5wM190aW1lciAhPSAwKQorICAgIHsKKyAgICAgICAgUlRLX1BPUlRNQVNLX1BPUlRfU0VUKChwR3JvdXAtPm1lbWJlciksIHJ0a19zd2l0Y2hfcG9ydF9QMkxfZ2V0KDMpKTsKKyAgICAgICAgcEdyb3VwLT50aW1lcltydGtfc3dpdGNoX3BvcnRfUDJMX2dldCgzKV0gPSBncnAucDNfdGltZXI7CisgICAgfQorCisgICAgaWYoZ3JwLnA0X3RpbWVyICE9IDApCisgICAgeworICAgICAgICBSVEtfUE9SVE1BU0tfUE9SVF9TRVQoKHBHcm91cC0+bWVtYmVyKSwgcnRrX3N3aXRjaF9wb3J0X1AyTF9nZXQoNCkpOworICAgICAgICBwR3JvdXAtPnRpbWVyW3J0a19zd2l0Y2hfcG9ydF9QMkxfZ2V0KDQpXSA9IGdycC5wNF90aW1lcjsKKyAgICB9CisKKyAgICBpZihncnAucDVfdGltZXIgIT0gMCkKKyAgICB7CisgICAgICAgIFJUS19QT1JUTUFTS19QT1JUX1NFVCgocEdyb3VwLT5tZW1iZXIpLCBydGtfc3dpdGNoX3BvcnRfUDJMX2dldCg1KSk7CisgICAgICAgIHBHcm91cC0+dGltZXJbcnRrX3N3aXRjaF9wb3J0X1AyTF9nZXQoNSldID0gZ3JwLnA1X3RpbWVyOworICAgIH0KKworICAgIGlmKGdycC5wNl90aW1lciAhPSAwKQorICAgIHsKKyAgICAgICAgUlRLX1BPUlRNQVNLX1BPUlRfU0VUKChwR3JvdXAtPm1lbWJlciksIHJ0a19zd2l0Y2hfcG9ydF9QMkxfZ2V0KDYpKTsKKyAgICAgICAgcEdyb3VwLT50aW1lcltydGtfc3dpdGNoX3BvcnRfUDJMX2dldCg2KV0gPSBncnAucDZfdGltZXI7CisgICAgfQorCisgICAgaWYoZ3JwLnA3X3RpbWVyICE9IDApCisgICAgeworICAgICAgICBSVEtfUE9SVE1BU0tfUE9SVF9TRVQoKHBHcm91cC0+bWVtYmVyKSwgcnRrX3N3aXRjaF9wb3J0X1AyTF9nZXQoNykpOworICAgICAgICBwR3JvdXAtPnRpbWVyW3J0a19zd2l0Y2hfcG9ydF9QMkxfZ2V0KDcpXSA9IGdycC5wN190aW1lcjsKKyAgICB9CisKKyAgICBpZihncnAucDhfdGltZXIgIT0gMCkKKyAgICB7CisgICAgICAgIFJUS19QT1JUTUFTS19QT1JUX1NFVCgocEdyb3VwLT5tZW1iZXIpLCBydGtfc3dpdGNoX3BvcnRfUDJMX2dldCg4KSk7CisgICAgICAgIHBHcm91cC0+dGltZXJbcnRrX3N3aXRjaF9wb3J0X1AyTF9nZXQoOCldID0gZ3JwLnA4X3RpbWVyOworICAgIH0KKworICAgIGlmKGdycC5wOV90aW1lciAhPSAwKQorICAgIHsKKyAgICAgICAgUlRLX1BPUlRNQVNLX1BPUlRfU0VUKChwR3JvdXAtPm1lbWJlciksIHJ0a19zd2l0Y2hfcG9ydF9QMkxfZ2V0KDkpKTsKKyAgICAgICAgcEdyb3VwLT50aW1lcltydGtfc3dpdGNoX3BvcnRfUDJMX2dldCg5KV0gPSBncnAucDlfdGltZXI7CisgICAgfQorCisgICAgaWYoZ3JwLnAxMF90aW1lciAhPSAwKQorICAgIHsKKyAgICAgICAgUlRLX1BPUlRNQVNLX1BPUlRfU0VUKChwR3JvdXAtPm1lbWJlciksIHJ0a19zd2l0Y2hfcG9ydF9QMkxfZ2V0KDEwKSk7CisgICAgICAgIHBHcm91cC0+dGltZXJbcnRrX3N3aXRjaF9wb3J0X1AyTF9nZXQoMTApXSA9IGdycC5wMTBfdGltZXI7CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2lnbXBfUmVwb3J0TGVhdmVGd2RBY3Rpb25fc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IFJlcG9ydCBMZWF2ZSBwYWNrZXQgZm9yd2FyZGluZyBhY3Rpb24KKyAqIElucHV0OgorICogICAgICBhY3Rpb24gICAgICAtIEFjdGlvbgorICogT3V0cHV0OgorICogICAgICBOb25lLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgIC0gRXJyb3IgSW5wdXQKKyAqIE5vdGU6CisgKgorICovCitydGtfYXBpX3JldF90IHJ0a19pZ21wX1JlcG9ydExlYXZlRndkQWN0aW9uX3NldChydGtfaWdtcF9SZXBvcnRMZWF2ZUZ3ZEFjdF90IGFjdGlvbikKK3sKKyAgICBydGtfYXBpX3JldF90ICAgcmV0VmFsOworICAgIHJ0a191aW50MzIgICAgICByZWdEYXRhOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIHN3aXRjaChhY3Rpb24pCisgICAgeworICAgICAgICBjYXNlIElHTVBfUkVQT1JUX0xFQVZFX1RPX1JPVVRFUjoKKyAgICAgICAgICAgIHJlZ0RhdGEgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSUdNUF9SRVBPUlRfTEVBVkVfVE9fQUxMUE9SVDoKKyAgICAgICAgICAgIHJlZ0RhdGEgPSAyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSUdNUF9SRVBPUlRfTEVBVkVfVE9fUk9VVEVSX1BPUlRfQURWOgorICAgICAgICAgICAgcmVnRGF0YSA9IDM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisgICAgfQorCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljSUdNUFJlcG9ydExlYXZlRmxvb2QocmVnRGF0YSkpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaWdtcF9SZXBvcnRMZWF2ZUZ3ZEFjdGlvbl9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgUmVwb3J0IExlYXZlIHBhY2tldCBmb3J3YXJkaW5nIGFjdGlvbgorICogSW5wdXQ6CisgKiAgICAgIGFjdGlvbiAgICAgIC0gQWN0aW9uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgLSBFcnJvciBJbnB1dAorICogICAgICBSVF9FUlJfTlVMTF9QT0lOVEVSICAgIC0gTnVsbCBQb2ludGVyCisgKiBOb3RlOgorICoKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfaWdtcF9SZXBvcnRMZWF2ZUZ3ZEFjdGlvbl9nZXQocnRrX2lnbXBfUmVwb3J0TGVhdmVGd2RBY3RfdCAqcEFjdGlvbikKK3sKKyAgICBydGtfYXBpX3JldF90ICAgcmV0VmFsOworICAgIHJ0a191aW50MzIgICAgICByZWdEYXRhOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKE5VTEwgPT0gcEFjdGlvbikKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNJR01QUmVwb3J0TGVhdmVGbG9vZCgmcmVnRGF0YSkpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBzd2l0Y2gocmVnRGF0YSkKKyAgICB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICpwQWN0aW9uID0gSUdNUF9SRVBPUlRfTEVBVkVfVE9fUk9VVEVSOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICpwQWN0aW9uID0gSUdNUF9SRVBPUlRfTEVBVkVfVE9fQUxMUE9SVDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAqcEFjdGlvbiA9IElHTVBfUkVQT1JUX0xFQVZFX1RPX1JPVVRFUl9QT1JUX0FEVjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9GQUlMRUQ7CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2lnbXBfZHJvcExlYXZlWmVyb0VuYWJsZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgdGhlIGZ1bmN0aW9uIG9mIGRyb3BwcGluZyBMZWF2ZSBwYWNrZXQgd2l0aCBncm91cCBJUCA9IDAuMC4wLjAKKyAqIElucHV0OgorICogICAgICBlbmFibGVkICAgICAgLSBBY3Rpb24gMTogZHJvcCwgMDpwYXNzCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgLSBFcnJvciBJbnB1dAorICogTm90ZToKKyAqCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2lnbXBfZHJvcExlYXZlWmVyb0VuYWJsZV9zZXQocnRrX2VuYWJsZV90IGVuYWJsZWQpCit7CisgICAgcnRrX2FwaV9yZXRfdCAgIHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihlbmFibGVkID49IFJUS19FTkFCTEVfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljSUdNUERyb3BMZWF2ZVplcm8oZW5hYmxlZCkpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworCit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19pZ21wX2Ryb3BMZWF2ZVplcm9FbmFibGVfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHRoZSBmdW5jdGlvbiBvZiBkcm9wcHBpbmcgTGVhdmUgcGFja2V0IHdpdGggZ3JvdXAgSVAgPSAwLjAuMC4wCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwRW5hYmxlZC4gICAtIEFjdGlvbiAxOiBkcm9wLCAwOnBhc3MKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAtIEVycm9yIElucHV0CisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgICAgLSBOdWxsIFBvaW50ZXIKKyAqIE5vdGU6CisgKgorICovCitydGtfYXBpX3JldF90IHJ0a19pZ21wX2Ryb3BMZWF2ZVplcm9FbmFibGVfZ2V0KHJ0a19lbmFibGVfdCAqcEVuYWJsZWQpCit7CisgICAgcnRrX2FwaV9yZXRfdCAgIHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBFbmFibGVkKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0lHTVBEcm9wTGVhdmVaZXJvKChydGtfdWludDMyICopcEVuYWJsZWQpKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKKworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaWdtcF9ieXBhc3NHcm91cFJhbmdlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBCeXBhc3MgZ3JvdXAKKyAqIElucHV0OgorICogICAgICBncm91cCAgICAgICAtIGJ5cGFzc2VkIGdyb3VwCisgKiAgICAgIGVuYWJsZWQgICAgIC0gZW5hYmxlZCAxOiBCeXBhc3NlZCwgMDogbm90IGJ5cGFzcworICogT3V0cHV0OgorICogICAgICBOb25lLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgIC0gRXJyb3IgSW5wdXQKKyAqIE5vdGU6CisgKgorICovCitydGtfYXBpX3JldF90IHJ0a19pZ21wX2J5cGFzc0dyb3VwUmFuZ2Vfc2V0KHJ0a19pZ21wX2J5cGFzc0dyb3VwX3QgZ3JvdXAsIHJ0a19lbmFibGVfdCBlbmFibGVkKQoreworICAgIHJ0a19hcGlfcmV0X3QgICByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoZ3JvdXAgPj0gSUdNUF9CWVBBU1NfR1JPVVBfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYoZW5hYmxlZCA+PSBSVEtfRU5BQkxFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0lHTVBCeXBhc3NHcm91cChncm91cCwgZW5hYmxlZCkpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaWdtcF9ieXBhc3NHcm91cFJhbmdlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIGdldCBCeXBhc3MgZ3JvdXAKKyAqIElucHV0OgorICogICAgICBncm91cCAgICAgICAtIGJ5cGFzc2VkIGdyb3VwCisgKiBPdXRwdXQ6CisgKiAgICAgIHBFbmFibGUgICAgIC0gZW5hYmxlZCAxOiBCeXBhc3NlZCwgMDogbm90IGJ5cGFzcworICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgIC0gRXJyb3IgSW5wdXQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAgICAtIE51bGwgUG9pbnRlcgorICogTm90ZToKKyAqCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2lnbXBfYnlwYXNzR3JvdXBSYW5nZV9nZXQocnRrX2lnbXBfYnlwYXNzR3JvdXBfdCBncm91cCwgcnRrX2VuYWJsZV90ICpwRW5hYmxlKQoreworICAgIHJ0a19hcGlfcmV0X3QgICByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoZ3JvdXAgPj0gSUdNUF9CWVBBU1NfR1JPVVBfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYoTlVMTCA9PSBwRW5hYmxlKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0lHTVBCeXBhc3NHcm91cChncm91cCwgcEVuYWJsZSkpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvYWNsLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9hY2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzA4ZGE4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvYWNsLmgKQEAgLTAsMCArMSw5OTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogUHVycG9zZSA6IFJUTDgzNjcvUlRMODM2N0Mgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJCisgKgorICogRmVhdHVyZSA6IFRoZSBmaWxlIGluY2x1ZGVzIEFDTCBtb2R1bGUgaGlnaC1sYXllciBBUEkgZGVmaW5hdGlvbgorICoKKyAqLworCisjaWZuZGVmIF9fUlRLX0FQSV9BQ0xfSF9fCisjZGVmaW5lIF9fUlRLX0FQSV9BQ0xfSF9fCisKKy8qCisgKiBEYXRhIFR5cGUgRGVjbGFyYXRpb24KKyAqLworI2RlZmluZSBSVEtfRklMVEVSX1JBV19GSUVMRF9OVU1CRVIgICAgICAgICAgICAgICAgOAorCisjZGVmaW5lIEFDTF9ERUZBVUxUX0FCSUxJVFkgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBQ0xfREVGQVVMVF9VTk1BVENIX1BFUk1JVCAgICAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBBQ0xfUlVMRV9GUkVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQUNMX1JVTEVfSU5BVkFJTEFCTEUgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFDTF9SVUxFX0NBUkVUQUdfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgMHgxRgorI2RlZmluZSBGSUxURVJfUE9MSUNJTkdfTUFYICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRklMVEVSX0xPR0dJTkdfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZJTFRFUl9QQVRURVJOX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgNAorCisjZGVmaW5lIEZJTFRFUl9FTkFDVF9DVkxBTl9NQVNLICAgICAgICAgMHgwMQorI2RlZmluZSBGSUxURVJfRU5BQ1RfU1ZMQU5fTUFTSyAgICAgICAgIDB4MDIKKyNkZWZpbmUgRklMVEVSX0VOQUNUX1BSSU9SSVRZX01BU0sgICAgICAweDA0CisjZGVmaW5lIEZJTFRFUl9FTkFDVF9QT0xJQ0lOR19NQVNLICAgICAgMHgwOAorI2RlZmluZSBGSUxURVJfRU5BQ1RfRldEX01BU0sgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgRklMVEVSX0VOQUNUX0lOVEdQSU9fTUFTSyAgICAgICAweDIwCisjZGVmaW5lIEZJTFRFUl9FTkFDVF9JTklUX01BU0sgICAgICAgICAgMHgzRgorCit0eXBlZGVmIGVudW0gcnRrX2ZpbHRlcl9hY3RfY2FjdGV4dF9lCit7CisgICAgRklMVEVSX0VOQUNUX0NBQ1RFWFRfVkxBTk9OTFk9MCwKKyAgICBGSUxURVJfRU5BQ1RfQ0FDVEVYVF9CT1RIVkxBTlRBRywKKyAgICBGSUxURVJfRU5BQ1RfQ0FDVEVYVF9UQUdPTkxZLAorICAgIEZJTFRFUl9FTkFDVF9DQUNURVhUX0VORCwKKworCit9cnRrX2ZpbHRlcl9hY3RfY2FjdGV4dF90OworCit0eXBlZGVmIGVudW0gcnRrX2ZpbHRlcl9hY3RfY3RhZ2ZtdF9lCit7CisgICAgRklMVEVSX0NUQUdGTVRfVU5UQUc9MCwKKyAgICBGSUxURVJfQ1RBR0ZNVF9UQUcsCisgICAgRklMVEVSX0NUQUdGTVRfS0VFUCwKKyAgICBGSUxURVJfQ1RBR0ZNVF9LRUVQMVBSTUssCisKKworfXJ0a19maWx0ZXJfYWN0X2N0YWdfdDsKKworCisKKworCisjZGVmaW5lIFJUS19NQVhfTlVNX09GX0ZJTFRFUl9UWVBFICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBSVEtfTUFYX05VTV9PRl9GSUxURVJfRklFTEQgICAgICAgICAgICAgICAgIDgKKworI2RlZmluZSBSVEtfRE9UXzFBU19USU1FU1RBTVBfVU5JVF9JTl9XT1JEX0xFTkdUSCAgIDNVTAorI2RlZmluZSBSVEtfSVBWNl9BRERSX1dPUkRfTEVOR1RIICAgICAgICAgICAgICAgICAgIDRVTAorCisjZGVmaW5lIEZJTFRFUl9FTkFDVF9DVkxBTl9UWVBFKHR5cGUpICAgKHR5cGUgLSBGSUxURVJfRU5BQ1RfQ1ZMQU5fSU5HUkVTUykKKyNkZWZpbmUgRklMVEVSX0VOQUNUX1NWTEFOX1RZUEUodHlwZSkgICAodHlwZSAtIEZJTFRFUl9FTkFDVF9TVkxBTl9JTkdSRVNTKQorI2RlZmluZSBGSUxURVJfRU5BQ1RfRldEX1RZUEUodHlwZSkgICAgICh0eXBlIC0gRklMVEVSX0VOQUNUX0FERF9EU1RQT1JUKQorI2RlZmluZSBGSUxURVJfRU5BQ1RfUFJJX1RZUEUodHlwZSkgICAgICh0eXBlIC0gRklMVEVSX0VOQUNUX1BSSU9SSVRZKQorCisjZGVmaW5lIFJUS19GSUxURVJfRklFTERfVVNFRF9NQVggICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBSVEtfRklMVEVSX0ZJRUxEX0lOREVYKHRlbXBsYXRlLCBpbmRleCkgICAgICgodGVtcGxhdGUgPDwgNCkgKyBpbmRleCkKKworCit0eXBlZGVmIGVudW0gcnRrX2ZpbHRlcl9hY3RfZW5hYmxlX2UKK3sKKyAgICAvKiBDVkxBTiAqLworICAgIEZJTFRFUl9FTkFDVF9DVkxBTl9JTkdSRVNTID0gMCwKKyAgICBGSUxURVJfRU5BQ1RfQ1ZMQU5fRUdSRVNTLAorICAgIEZJTFRFUl9FTkFDVF9DVkxBTl9TVklELAorICAgIEZJTFRFUl9FTkFDVF9QT0xJQ0lOR18xLAorCisgICAgLyogU1ZMQU4gKi8KKyAgICBGSUxURVJfRU5BQ1RfU1ZMQU5fSU5HUkVTUywKKyAgICBGSUxURVJfRU5BQ1RfU1ZMQU5fRUdSRVNTLAorICAgIEZJTFRFUl9FTkFDVF9TVkxBTl9DVklELAorICAgIEZJTFRFUl9FTkFDVF9QT0xJQ0lOR18yLAorCisgICAgLyogUG9saWNpbmcgYW5kIExvZ2dpbmcgKi8KKyAgICBGSUxURVJfRU5BQ1RfUE9MSUNJTkdfMCwKKworICAgIC8qIEZvcndhcmQgKi8KKyAgICBGSUxURVJfRU5BQ1RfQ09QWV9DUFUsCisgICAgRklMVEVSX0VOQUNUX0RST1AsCisgICAgRklMVEVSX0VOQUNUX0FERF9EU1RQT1JULAorICAgIEZJTFRFUl9FTkFDVF9SRURJUkVDVCwKKyAgICBGSUxURVJfRU5BQ1RfTUlSUk9SLAorICAgIEZJTFRFUl9FTkFDVF9UUkFQX0NQVSwKKyAgICBGSUxURVJfRU5BQ1RfSVNPTEFUSU9OLAorCisgICAgLyogUW9TICovCisgICAgRklMVEVSX0VOQUNUX1BSSU9SSVRZLAorICAgIEZJTFRFUl9FTkFDVF9EU0NQX1JFTUFSSywKKyAgICBGSUxURVJfRU5BQ1RfMVBfUkVNQVJLLAorICAgIEZJTFRFUl9FTkFDVF9QT0xJQ0lOR18zLAorCisgICAgLyogSW50ZXJydXRwIGFuZCBHUE8gKi8KKyAgICBGSUxURVJfRU5BQ1RfSU5URVJSVVBULAorICAgIEZJTFRFUl9FTkFDVF9HUE8sCisKKyAgICAvKlZMQU4gdGFnKi8KKyAgICBGSUxURVJfRU5BQ1RfRUdSRVNTQ1RBR19VTlRBRywKKyAgICBGSUxURVJfRU5BQ1RfRUdSRVNTQ1RBR19UQUcsCisgICAgRklMVEVSX0VOQUNUX0VHUkVTU0NUQUdfS0VFUCwKKyAgICBGSUxURVJfRU5BQ1RfRUdSRVNTQ1RBR19LRUVQQU5EMVBSTUssCisKKyAgICBGSUxURVJfRU5BQ1RfRU5ELAorfSBydGtfZmlsdGVyX2FjdF9lbmFibGVfdDsKKworCit0eXBlZGVmIHN0cnVjdAoreworICAgIHJ0a19maWx0ZXJfYWN0X2VuYWJsZV90IGFjdEVuYWJsZVtGSUxURVJfRU5BQ1RfRU5EXTsKKworICAgIC8qIENWTEFOIGFjdG9uICovCisgICAgcnRrX3VpbnQzMiAgICAgIGZpbHRlckN2bGFuVmlkOworICAgIHJ0a191aW50MzIgICAgICBmaWx0ZXJDdmxhbklkeDsKKyAgICAvKiBTVkxBTiBhY3Rpb24gKi8KKyAgICBydGtfdWludDMyICAgICAgZmlsdGVyU3ZsYW5WaWQ7CisgICAgcnRrX3VpbnQzMiAgICAgIGZpbHRlclN2bGFuSWR4OworCisgICAgLyogUG9saWNpbmcgYWN0aW9uICovCisgICAgcnRrX3VpbnQzMiAgICAgIGZpbHRlclBvbGljaW5nSWR4W0ZJTFRFUl9QT0xJQ0lOR19NQVhdOworCisgICAgLyogRm9yd2FyZGluZyBhY3Rpb24gKi8KKyAgICBydGtfcG9ydG1hc2tfdCAgZmlsdGVyUG9ydG1hc2s7CisKKyAgICAvKiBRT1MgYWN0aW9uICovCisgICAgcnRrX3VpbnQzMiAgICAgIGZpbHRlclByaW9yaXR5OworCisgICAgLypHUE8qLworICAgIHJ0a191aW50MzIgICAgICBmaWx0ZXJQaW47CisKK30gcnRrX2ZpbHRlcl9hY3Rpb25fdDsKKwordHlwZWRlZiBzdHJ1Y3QgcnRrX2ZpbHRlcl9mbGFnX3MKK3sKKyAgICBydGtfdWludDMyIHZhbHVlOworICAgIHJ0a191aW50MzIgbWFzazsKK30gcnRrX2ZpbHRlcl9mbGFnX3Q7CisKK3R5cGVkZWYgZW51bSBydGtfZmlsdGVyX2NhcmVfdGFnX2luZGV4X2UKK3sKKyAgICBDQVJFX1RBR19DVEFHID0gMCwKKyAgICBDQVJFX1RBR19TVEFHLAorICAgIENBUkVfVEFHX1BQUE9FLAorICAgIENBUkVfVEFHX0lQVjQsCisgICAgQ0FSRV9UQUdfSVBWNiwKKyAgICBDQVJFX1RBR19UQ1AsCisgICAgQ0FSRV9UQUdfVURQLAorICAgIENBUkVfVEFHX0FSUCwKKyAgICBDQVJFX1RBR19SU1YxLAorICAgIENBUkVfVEFHX1JTVjIsCisgICAgQ0FSRV9UQUdfSUNNUCwKKyAgICBDQVJFX1RBR19JR01QLAorICAgIENBUkVfVEFHX0xMQywKKyAgICBDQVJFX1RBR19SU1YzLAorICAgIENBUkVfVEFHX0hUVFAsCisgICAgQ0FSRV9UQUdfUlNWNCwKKyAgICBDQVJFX1RBR19SU1Y1LAorICAgIENBUkVfVEFHX0RIQ1AsCisgICAgQ0FSRV9UQUdfREhDUFY2LAorICAgIENBUkVfVEFHX1NOTVAsCisgICAgQ0FSRV9UQUdfT0FNLAorICAgIENBUkVfVEFHX0VORCwKK30gcnRrX2ZpbHRlcl9jYXJlX3RhZ19pbmRleF90OworCit0eXBlZGVmIHN0cnVjdCBydGtfZmlsdGVyX2NhcmVfdGFnX3MKK3sKKyAgICBydGtfZmlsdGVyX2ZsYWdfdCB0YWdUeXBlW0NBUkVfVEFHX0VORF07Cit9IHJ0a19maWx0ZXJfY2FyZV90YWdfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcnRrX2ZpbHRlcl9maWVsZCBydGtfZmlsdGVyX2ZpZWxkX3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgcnRrX3VpbnQzMiB2YWx1ZVtSVEtfRE9UXzFBU19USU1FU1RBTVBfVU5JVF9JTl9XT1JEX0xFTkdUSF07Cit9IHJ0a19maWx0ZXJfZG90MWFzX3RpbWVzdGFtcF90OworCit0eXBlZGVmIGVudW0gcnRrX2ZpbHRlcl9maWVsZF9kYXRhX3R5cGVfZQoreworICAgIEZJTFRFUl9GSUVMRF9EQVRBX01BU0sgPSAwLAorICAgIEZJTFRFUl9GSUVMRF9EQVRBX1JBTkdFLAorICAgIEZJTFRFUl9GSUVMRF9EQVRBX0VORCAsCit9IHJ0a19maWx0ZXJfZmllbGRfZGF0YV90eXBlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHJ0a19maWx0ZXJfaXBfcworeworICAgIHJ0a191aW50MzIgZGF0YVR5cGU7CisgICAgcnRrX3VpbnQzMiByYW5nZVN0YXJ0OworICAgIHJ0a191aW50MzIgcmFuZ2VFbmQ7CisgICAgcnRrX3VpbnQzMiB2YWx1ZTsKKyAgICBydGtfdWludDMyIG1hc2s7Cit9IHJ0a19maWx0ZXJfaXBfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcnRrX2ZpbHRlcl9tYWNfcworeworICAgIHJ0a191aW50MzIgZGF0YVR5cGU7CisgICAgcnRrX21hY190IHZhbHVlOworICAgIHJ0a19tYWNfdCBtYXNrOworICAgIHJ0a19tYWNfdCByYW5nZVN0YXJ0OworICAgIHJ0a19tYWNfdCByYW5nZUVuZDsKK30gcnRrX2ZpbHRlcl9tYWNfdDsKKwordHlwZWRlZiBydGtfdWludDMyIHJ0a19maWx0ZXJfb3BfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcnRrX2ZpbHRlcl92YWx1ZV9zCit7CisgICAgcnRrX3VpbnQzMiBkYXRhVHlwZTsKKyAgICBydGtfdWludDMyIHZhbHVlOworICAgIHJ0a191aW50MzIgbWFzazsKKyAgICBydGtfdWludDMyIHJhbmdlU3RhcnQ7CisgICAgcnRrX3VpbnQzMiByYW5nZUVuZDsKKworfSBydGtfZmlsdGVyX3ZhbHVlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHJ0a19maWx0ZXJfYWN0aXZlcG9ydF9zCit7CisgICAgcnRrX3BvcnRtYXNrX3QgdmFsdWU7CisgICAgcnRrX3BvcnRtYXNrX3QgbWFzazsKKworfSBydGtfZmlsdGVyX2FjdGl2ZXBvcnRfdDsKKworCisKK3R5cGVkZWYgc3RydWN0IHJ0a19maWx0ZXJfdGFnX3MKK3sKKyAgICBydGtfZmlsdGVyX3ZhbHVlX3QgcHJpOworICAgIHJ0a19maWx0ZXJfZmxhZ190IGNmaTsKKyAgICBydGtfZmlsdGVyX3ZhbHVlX3QgdmlkOworfSBydGtfZmlsdGVyX3RhZ190OworCit0eXBlZGVmIHN0cnVjdCBydGtfZmlsdGVyX2lwRmxhZ19zCit7CisgICAgcnRrX2ZpbHRlcl9mbGFnX3QgeGY7CisgICAgcnRrX2ZpbHRlcl9mbGFnX3QgbWY7CisgICAgcnRrX2ZpbHRlcl9mbGFnX3QgZGY7Cit9IHJ0a19maWx0ZXJfaXBGbGFnX3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgcnRrX3VpbnQzMiBhZGRyW1JUS19JUFY2X0FERFJfV09SRF9MRU5HVEhdOworfSBydGtfZmlsdGVyX2lwNl9hZGRyX3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgcnRrX3VpbnQzMiBkYXRhVHlwZTsKKyAgICBydGtfZmlsdGVyX2lwNl9hZGRyX3QgdmFsdWU7CisgICAgcnRrX2ZpbHRlcl9pcDZfYWRkcl90IG1hc2s7CisgICAgcnRrX2ZpbHRlcl9pcDZfYWRkcl90IHJhbmdlU3RhcnQ7CisgICAgcnRrX2ZpbHRlcl9pcDZfYWRkcl90IHJhbmdlRW5kOworfSBydGtfZmlsdGVyX2lwNl90OworCit0eXBlZGVmIHJ0a191aW50MzIgcnRrX2ZpbHRlcl9udW1iZXJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcnRrX2ZpbHRlcl9wYXR0ZXJuX3MKK3sKKyAgICBydGtfdWludDMyIHZhbHVlW0ZJTFRFUl9QQVRURVJOX01BWF07CisgICAgcnRrX3VpbnQzMiBtYXNrW0ZJTFRFUl9QQVRURVJOX01BWF07Cit9IHJ0a19maWx0ZXJfcGF0dGVybl90OworCit0eXBlZGVmIHN0cnVjdCBydGtfZmlsdGVyX3RjcEZsYWdfcworeworICAgIHJ0a19maWx0ZXJfZmxhZ190IHVyZzsKKyAgICBydGtfZmlsdGVyX2ZsYWdfdCBhY2s7CisgICAgcnRrX2ZpbHRlcl9mbGFnX3QgcHNoOworICAgIHJ0a19maWx0ZXJfZmxhZ190IHJzdDsKKyAgICBydGtfZmlsdGVyX2ZsYWdfdCBzeW47CisgICAgcnRrX2ZpbHRlcl9mbGFnX3QgZmluOworICAgIHJ0a19maWx0ZXJfZmxhZ190IG5zOworICAgIHJ0a19maWx0ZXJfZmxhZ190IGN3cjsKKyAgICBydGtfZmlsdGVyX2ZsYWdfdCBlY2U7Cit9IHJ0a19maWx0ZXJfdGNwRmxhZ190OworCit0eXBlZGVmIHJ0a191aW50MzIgcnRrX2ZpbHRlcl9maWVsZF9yYXdfdDsKKwordHlwZWRlZiBlbnVtIHJ0a19maWx0ZXJfZmllbGRfdGVtcGxlX2lucHV0X2UKK3sKKyAgICBGSUxURVJfRklFTERfVEVNUExFX0lOUFVUX1RZUEUgPSAwLAorICAgIEZJTFRFUl9GSUVMRF9URU1QTEVfSU5QVVRfSU5ERVgsCisgICAgRklMVEVSX0ZJRUxEX1RFTVBMRV9JTlBVVF9NQVggLAorfSBydGtfZmlsdGVyX2ZpZWxkX3RlbXBsZV9pbnB1dF90OworCitzdHJ1Y3QgcnRrX2ZpbHRlcl9maWVsZAoreworICAgIHJ0a191aW50MzIgZmllbGRUeXBlOworCisgICAgdW5pb24KKyAgICB7CisgICAgICAgIC8qIEwyIHN0cnVjdCAqLworICAgICAgICBydGtfZmlsdGVyX21hY190ICAgICAgIGRtYWM7CisgICAgICAgIHJ0a19maWx0ZXJfbWFjX3QgICAgICAgc21hYzsKKyAgICAgICAgcnRrX2ZpbHRlcl92YWx1ZV90ICAgICBldGhlclR5cGU7CisgICAgICAgIHJ0a19maWx0ZXJfdGFnX3QgICAgICAgY3RhZzsKKyAgICAgICAgcnRrX2ZpbHRlcl90YWdfdCAgICAgICByZWxheUN0YWc7CisgICAgICAgIHJ0a19maWx0ZXJfdGFnX3QgICAgICAgc3RhZzsKKyAgICAgICAgcnRrX2ZpbHRlcl90YWdfdCAgICAgICBsMnRhZzsKKyAgICAgICAgcnRrX2ZpbHRlcl9kb3QxYXNfdGltZXN0YW1wX3QgZG90MWFzVGltZVN0YW1wOworICAgICAgICBydGtfZmlsdGVyX21hY190ICAgICAgIG1hYzsKKworICAgICAgICAvKiBMMyBzdHJ1Y3QgKi8KKyAgICAgICAgcnRrX2ZpbHRlcl9pcF90ICAgICAgc2lwOworICAgICAgICBydGtfZmlsdGVyX2lwX3QgICAgICBkaXA7CisgICAgICAgIHJ0a19maWx0ZXJfaXBfdCAgICAgIGlwOworICAgICAgICBydGtfZmlsdGVyX3ZhbHVlX3QgICBwcm90b2NvbDsKKyAgICAgICAgcnRrX2ZpbHRlcl92YWx1ZV90ICAgaXBUb3M7CisgICAgICAgIHJ0a19maWx0ZXJfaXBGbGFnX3QgIGlwRmxhZzsKKyAgICAgICAgcnRrX2ZpbHRlcl92YWx1ZV90ICAgaXBPZmZzZXQ7CisgICAgICAgIHJ0a19maWx0ZXJfaXA2X3QgICAgIHNpcHY2OworICAgICAgICBydGtfZmlsdGVyX2lwNl90ICAgICBkaXB2NjsKKyAgICAgICAgcnRrX2ZpbHRlcl9pcDZfdCAgICAgaXB2NjsKKyAgICAgICAgcnRrX2ZpbHRlcl92YWx1ZV90ICAgaXB2NlRyYWZmaWNDbGFzczsKKyAgICAgICAgcnRrX2ZpbHRlcl92YWx1ZV90ICAgaXB2Nk5leHRIZWFkZXI7CisgICAgICAgIHJ0a19maWx0ZXJfdmFsdWVfdCAgIGZsb3dMYWJlbDsKKworICAgICAgICAvKiBMNCBzdHJ1Y3QgKi8KKyAgICAgICAgcnRrX2ZpbHRlcl92YWx1ZV90ICAgdGNwU3JjUG9ydDsKKyAgICAgICAgcnRrX2ZpbHRlcl92YWx1ZV90ICAgdGNwRHN0UG9ydDsKKyAgICAgICAgcnRrX2ZpbHRlcl90Y3BGbGFnX3QgdGNwRmxhZzsKKyAgICAgICAgcnRrX2ZpbHRlcl92YWx1ZV90ICAgdGNwU2VxTnVtYmVyOworICAgICAgICBydGtfZmlsdGVyX3ZhbHVlX3QgICB0Y3BBY2tOdW1iZXI7CisgICAgICAgIHJ0a19maWx0ZXJfdmFsdWVfdCAgIHVkcFNyY1BvcnQ7CisgICAgICAgIHJ0a19maWx0ZXJfdmFsdWVfdCAgIHVkcERzdFBvcnQ7CisgICAgICAgIHJ0a19maWx0ZXJfdmFsdWVfdCAgIGljbXBDb2RlOworICAgICAgICBydGtfZmlsdGVyX3ZhbHVlX3QgICBpY21wVHlwZTsKKyAgICAgICAgcnRrX2ZpbHRlcl92YWx1ZV90ICAgaWdtcFR5cGU7CisKKyAgICAgICAgLyogcGF0dGVybiBtYXRjaCAqLworICAgICAgICBydGtfZmlsdGVyX3BhdHRlcm5fdCBwYXR0ZXJuOworCisgICAgICAgIHJ0a19maWx0ZXJfdmFsdWVfdCAgIGluRGF0YTsKKworICAgIH0gZmlsdGVyX3BhdHRlcm5fdW5pb247CisKKyAgICBydGtfdWludDMyIGZpZWxkVGVtcGxhdGVObzsKKyAgICBydGtfdWludDMyIGZpZWxkVGVtcGxhdGVJZHhbUlRLX0ZJTFRFUl9GSUVMRF9VU0VEX01BWF07CisKKyAgICBzdHJ1Y3QgcnRrX2ZpbHRlcl9maWVsZCAqbmV4dDsKK307CisKK3R5cGVkZWYgZW51bSBydGtfZmlsdGVyX2ZpZWxkX3R5cGVfZQoreworICAgIEZJTFRFUl9GSUVMRF9ETUFDID0gMCwKKyAgICBGSUxURVJfRklFTERfU01BQywKKyAgICBGSUxURVJfRklFTERfRVRIRVJUWVBFLAorICAgIEZJTFRFUl9GSUVMRF9DVEFHLAorICAgIEZJTFRFUl9GSUVMRF9TVEFHLAorCisgICAgRklMVEVSX0ZJRUxEX0lQVjRfU0lQLAorICAgIEZJTFRFUl9GSUVMRF9JUFY0X0RJUCwKKyAgICBGSUxURVJfRklFTERfSVBWNF9UT1MsCisgICAgRklMVEVSX0ZJRUxEX0lQVjRfUFJPVE9DT0wsCisgICAgRklMVEVSX0ZJRUxEX0lQVjRfRkxBRywKKyAgICBGSUxURVJfRklFTERfSVBWNF9PRkZTRVQsCisgICAgRklMVEVSX0ZJRUxEX0lQVjZfU0lQVjYsCisgICAgRklMVEVSX0ZJRUxEX0lQVjZfRElQVjYsCisgICAgRklMVEVSX0ZJRUxEX0lQVjZfVFJBRkZJQ19DTEFTUywKKyAgICBGSUxURVJfRklFTERfSVBWNl9ORVhUX0hFQURFUiwKKworICAgIEZJTFRFUl9GSUVMRF9UQ1BfU1BPUlQsCisgICAgRklMVEVSX0ZJRUxEX1RDUF9EUE9SVCwKKyAgICBGSUxURVJfRklFTERfVENQX0ZMQUcsCisgICAgRklMVEVSX0ZJRUxEX1VEUF9TUE9SVCwKKyAgICBGSUxURVJfRklFTERfVURQX0RQT1JULAorICAgIEZJTFRFUl9GSUVMRF9JQ01QX0NPREUsCisgICAgRklMVEVSX0ZJRUxEX0lDTVBfVFlQRSwKKyAgICBGSUxURVJfRklFTERfSUdNUF9UWVBFLAorCisgICAgRklMVEVSX0ZJRUxEX1ZJRF9SQU5HRSwKKyAgICBGSUxURVJfRklFTERfSVBfUkFOR0UsCisgICAgRklMVEVSX0ZJRUxEX1BPUlRfUkFOR0UsCisKKyAgICBGSUxURVJfRklFTERfVVNFUl9ERUZJTkVEMDAsCisgICAgRklMVEVSX0ZJRUxEX1VTRVJfREVGSU5FRDAxLAorICAgIEZJTFRFUl9GSUVMRF9VU0VSX0RFRklORUQwMiwKKyAgICBGSUxURVJfRklFTERfVVNFUl9ERUZJTkVEMDMsCisgICAgRklMVEVSX0ZJRUxEX1VTRVJfREVGSU5FRDA0LAorICAgIEZJTFRFUl9GSUVMRF9VU0VSX0RFRklORUQwNSwKKyAgICBGSUxURVJfRklFTERfVVNFUl9ERUZJTkVEMDYsCisgICAgRklMVEVSX0ZJRUxEX1VTRVJfREVGSU5FRDA3LAorICAgIEZJTFRFUl9GSUVMRF9VU0VSX0RFRklORUQwOCwKKyAgICBGSUxURVJfRklFTERfVVNFUl9ERUZJTkVEMDksCisgICAgRklMVEVSX0ZJRUxEX1VTRVJfREVGSU5FRDEwLAorICAgIEZJTFRFUl9GSUVMRF9VU0VSX0RFRklORUQxMSwKKyAgICBGSUxURVJfRklFTERfVVNFUl9ERUZJTkVEMTIsCisgICAgRklMVEVSX0ZJRUxEX1VTRVJfREVGSU5FRDEzLAorICAgIEZJTFRFUl9GSUVMRF9VU0VSX0RFRklORUQxNCwKKyAgICBGSUxURVJfRklFTERfVVNFUl9ERUZJTkVEMTUsCisKKyAgICBGSUxURVJfRklFTERfUEFUVEVSTl9NQVRDSCwKKworICAgIEZJTFRFUl9GSUVMRF9FTkQsCit9IHJ0a19maWx0ZXJfZmllbGRfdHlwZV90OworCisKK3R5cGVkZWYgZW51bSBydGtfZmlsdGVyX2ZpZWxkX3R5cGVfcmF3X2UKK3sKKyAgICBGSUxURVJfRklFTERfUkFXX1VOVVNFRCA9IDAsCisgICAgRklMVEVSX0ZJRUxEX1JBV19ETUFDXzE1XzAsCisgICAgRklMVEVSX0ZJRUxEX1JBV19ETUFDXzMxXzE2LAorICAgIEZJTFRFUl9GSUVMRF9SQVdfRE1BQ180N18zMiwKKyAgICBGSUxURVJfRklFTERfUkFXX1NNQUNfMTVfMCwKKyAgICBGSUxURVJfRklFTERfUkFXX1NNQUNfMzFfMTYsCisgICAgRklMVEVSX0ZJRUxEX1JBV19TTUFDXzQ3XzMyLAorICAgIEZJTFRFUl9GSUVMRF9SQVdfRVRIRVJUWVBFLAorICAgIEZJTFRFUl9GSUVMRF9SQVdfU1RBRywKKyAgICBGSUxURVJfRklFTERfUkFXX0NUQUcsCisKKyAgICBGSUxURVJfRklFTERfUkFXX0lQVjRfU0lQXzE1XzAgPSAweDEwLAorICAgIEZJTFRFUl9GSUVMRF9SQVdfSVBWNF9TSVBfMzFfMTYsCisgICAgRklMVEVSX0ZJRUxEX1JBV19JUFY0X0RJUF8xNV8wLAorICAgIEZJTFRFUl9GSUVMRF9SQVdfSVBWNF9ESVBfMzFfMTYsCisKKworICAgIEZJTFRFUl9GSUVMRF9SQVdfSVBWNl9TSVBfMTVfMCA9IDB4MjAsCisgICAgRklMVEVSX0ZJRUxEX1JBV19JUFY2X1NJUF8zMV8xNiwKKyAgICBGSUxURVJfRklFTERfUkFXX0lQVjZfRElQXzE1XzAgPSAweDI4LAorICAgIEZJTFRFUl9GSUVMRF9SQVdfSVBWNl9ESVBfMzFfMTYsCisKKyAgICBGSUxURVJfRklFTERfUkFXX1ZJRFJBTkdFID0gMHgzMCwKKyAgICBGSUxURVJfRklFTERfUkFXX0lQUkFOR0UsCisgICAgRklMVEVSX0ZJRUxEX1JBV19QT1JUUkFOR0UsCisgICAgRklMVEVSX0ZJRUxEX1JBV19GSUVMRF9WQUxJRCwKKworICAgIEZJTFRFUl9GSUVMRF9SQVdfRklFTERfU0VMRUNUMDAgPSAweDQwLAorICAgIEZJTFRFUl9GSUVMRF9SQVdfRklFTERfU0VMRUNUMDEsCisgICAgRklMVEVSX0ZJRUxEX1JBV19GSUVMRF9TRUxFQ1QwMiwKKyAgICBGSUxURVJfRklFTERfUkFXX0ZJRUxEX1NFTEVDVDAzLAorICAgIEZJTFRFUl9GSUVMRF9SQVdfRklFTERfU0VMRUNUMDQsCisgICAgRklMVEVSX0ZJRUxEX1JBV19GSUVMRF9TRUxFQ1QwNSwKKyAgICBGSUxURVJfRklFTERfUkFXX0ZJRUxEX1NFTEVDVDA2LAorICAgIEZJTFRFUl9GSUVMRF9SQVdfRklFTERfU0VMRUNUMDcsCisgICAgRklMVEVSX0ZJRUxEX1JBV19GSUVMRF9TRUxFQ1QwOCwKKyAgICBGSUxURVJfRklFTERfUkFXX0ZJRUxEX1NFTEVDVDA5LAorICAgIEZJTFRFUl9GSUVMRF9SQVdfRklFTERfU0VMRUNUMTAsCisgICAgRklMVEVSX0ZJRUxEX1JBV19GSUVMRF9TRUxFQ1QxMSwKKyAgICBGSUxURVJfRklFTERfUkFXX0ZJRUxEX1NFTEVDVDEyLAorICAgIEZJTFRFUl9GSUVMRF9SQVdfRklFTERfU0VMRUNUMTMsCisgICAgRklMVEVSX0ZJRUxEX1JBV19GSUVMRF9TRUxFQ1QxNCwKKyAgICBGSUxURVJfRklFTERfUkFXX0ZJRUxEX1NFTEVDVDE1LAorCisgICAgRklMVEVSX0ZJRUxEX1JBV19FTkQsCit9IHJ0a19maWx0ZXJfZmllbGRfdHlwZV9yYXdfdDsKKwordHlwZWRlZiBlbnVtIHJ0a19maWx0ZXJfZmxhZ19jYXJlX3R5cGVfZQoreworICAgIEZJTFRFUl9GTEFHX0NBUkVfRE9OVF9DQVJFID0gMCwKKyAgICBGSUxURVJfRkxBR19DQVJFXzEsCisgICAgRklMVEVSX0ZMQUdfQ0FSRV8wLAorICAgIEZJTFRFUl9GTEFHX0VORAorfSBydGtfZmlsdGVyX2ZsYWdfY2FyZV90eXBlX3Q7CisKK3R5cGVkZWYgcnRrX3VpbnQzMiAgcnRrX2ZpbHRlcl9pZF90OyAgICAvKiBmaWx0ZXIgaWQgdHlwZSAqLworCit0eXBlZGVmIGVudW0gcnRrX2ZpbHRlcl9pbnZlcnRfZQoreworICAgIEZJTFRFUl9JTlZFUlRfRElTQUJMRSA9IDAsCisgICAgRklMVEVSX0lOVkVSVF9FTkFCTEUsCisgICAgRklMVEVSX0lOVkVSVF9FTkQsCit9IHJ0a19maWx0ZXJfaW52ZXJ0X3Q7CisKK3R5cGVkZWYgcnRrX3VpbnQzMiBydGtfZmlsdGVyX3N0YXRlX3Q7CisKK3R5cGVkZWYgcnRrX3VpbnQzMiBydGtfZmlsdGVyX3VubWF0Y2hfYWN0aW9uX3Q7CisKK3R5cGVkZWYgZW51bSBydGtfZmlsdGVyX3VubWF0Y2hfYWN0aW9uX2UKK3sKKyAgICBGSUxURVJfVU5NQVRDSF9EUk9QID0gMCwKKyAgICBGSUxURVJfVU5NQVRDSF9QRVJNSVQsCisgICAgRklMVEVSX1VOTUFUQ0hfRU5ELAorfSBydGtfZmlsdGVyX3VubWF0Y2hfYWN0aW9uX3R5cGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBydGtfZmlsdGVyX2ZpZWxkX3QgICAgICAqZmllbGRIZWFkOworICAgIHJ0a19maWx0ZXJfY2FyZV90YWdfdCAgIGNhcmVUYWc7CisgICAgcnRrX2ZpbHRlcl9hY3RpdmVwb3J0X3QgYWN0aXZlcG9ydDsKKworICAgIHJ0a19maWx0ZXJfaW52ZXJ0X3QgICAgIGludmVydDsKK30gcnRrX2ZpbHRlcl9jZmdfdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBydGtfZmlsdGVyX2ZpZWxkX3Jhd190ICAgICAgZGF0YUZpZWxkUmF3W1JUS19GSUxURVJfUkFXX0ZJRUxEX05VTUJFUl07CisgICAgcnRrX2ZpbHRlcl9maWVsZF9yYXdfdCAgICAgIGNhcmVGaWVsZFJhd1tSVEtfRklMVEVSX1JBV19GSUVMRF9OVU1CRVJdOworICAgIHJ0a19maWx0ZXJfZmllbGRfdHlwZV9yYXdfdCBmaWVsZFJhd1R5cGVbUlRLX0ZJTFRFUl9SQVdfRklFTERfTlVNQkVSXTsKKyAgICBydGtfZmlsdGVyX2NhcmVfdGFnX3QgICAgICAgY2FyZVRhZzsKKyAgICBydGtfZmlsdGVyX2FjdGl2ZXBvcnRfdCAgICAgYWN0aXZlcG9ydDsKKworICAgIHJ0a19maWx0ZXJfaW52ZXJ0X3QgICAgICAgICBpbnZlcnQ7CisgICAgcnRrX2VuYWJsZV90ICAgICAgICAgICAgICAgIHZhbGlkOworfSBydGtfZmlsdGVyX2NmZ19yYXdfdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBydGtfdWludDMyIGluZGV4OworICAgIHJ0a19maWx0ZXJfZmllbGRfdHlwZV9yYXdfdCBmaWVsZFR5cGVbUlRLX0ZJTFRFUl9SQVdfRklFTERfTlVNQkVSXTsKK30gcnRrX2ZpbHRlcl90ZW1wbGF0ZV90OworCit0eXBlZGVmIGVudW0gcnRrX2ZpZWxkX3NlbF9lCit7CisgICAgRk9STUFUX0RFRkFVTFQgPSAwLAorICAgIEZPUk1BVF9SQVcsCisgICAgRk9STUFUX0xMQywKKyAgICBGT1JNQVRfSVBWNCwKKyAgICBGT1JNQVRfQVJQLAorICAgIEZPUk1BVF9JUFY2LAorICAgIEZPUk1BVF9JUFBBWUxPQUQsCisgICAgRk9STUFUX0w0UEFZTE9BRCwKKyAgICBGT1JNQVRfRU5ECit9cnRrX2ZpZWxkX3NlbF90OworCit0eXBlZGVmIGVudW0gcnRrX2ZpbHRlcl9pcHJhbmdlX2UKK3sKKyAgICBJUFJBTkdFX1VOVVNFRCA9IDAsCisgICAgSVBSQU5HRV9JUFY0X1NJUCwKKyAgICBJUFJBTkdFX0lQVjRfRElQLAorICAgIElQUkFOR0VfSVBWNl9TSVAsCisgICAgSVBSQU5HRV9JUFY2X0RJUCwKKyAgICBJUFJBTkdFX0VORAorfXJ0a19maWx0ZXJfaXByYW5nZV90OworCit0eXBlZGVmIGVudW0gcnRrX2ZpbHRlcl92aWRyYW5nZV9lCit7CisgICAgVklEUkFOR0VfVU5VU0VEID0gMCwKKyAgICBWSURSQU5HRV9DVklELAorICAgIFZJRFJBTkdFX1NWSUQsCisgICAgVklEUkFOR0VfRU5ECit9cnRrX2ZpbHRlcl92aWRyYW5nZV90OworCit0eXBlZGVmIGVudW0gcnRrX2ZpbHRlcl9wb3J0cmFuZ2VfZQoreworICAgIFBPUlRSQU5HRV9VTlVTRUQgPSAwLAorICAgIFBPUlRSQU5HRV9TUE9SVCwKKyAgICBQT1JUUkFOR0VfRFBPUlQsCisgICAgUE9SVFJBTkdFX0VORAorfXJ0a19maWx0ZXJfcG9ydHJhbmdlX3Q7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19maWx0ZXJfaWdyQWNsX2luaXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBBQ0wgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24KKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAtIFBvaW50ZXIgcEZpbHRlcl9maWVsZCBvciBwRmlsdGVyX2NmZyBwb2ludCB0byBOVUxMLgorICogTm90ZToKKyAqICAgICAgVGhpcyBmdW5jdGlvbiBlbmFibGUgYW5kIGludGlhbGl6ZSBBQ0wgZnVuY3Rpb24KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2ZpbHRlcl9pZ3JBY2xfaW5pdCh2b2lkKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2ZpbHRlcl9pZ3JBY2xfZmllbGRfYWRkCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQWRkIGNvbXBhcmlzb24gcnVsZSB0byBhbiBBQ0wgY29uZmlndXJhdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHBGaWx0ZXJfY2ZnICAgICAtIFRoZSBBQ0wgY29uZmlndXJhdGlvbiB0aGF0IHRoaXMgZnVuY3Rpb24gd2lsbCBhZGQgY29tcGFyaXNvbiBydWxlCisgKiAgICAgIHBGaWx0ZXJfZmllbGQgICAtIFRoZSBjb21wYXJpc29uIHJ1bGUgdGhhdCB3aWxsIGJlIGFkZGVkLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgICAgIC0gUG9pbnRlciBwRmlsdGVyX2ZpZWxkIG9yIHBGaWx0ZXJfY2ZnIHBvaW50IHRvIE5VTEwuCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhpcyBmdW5jdGlvbiBhZGQgYSBjb21wYXJpc29uIHJ1bGUgKCpwRmlsdGVyX2ZpZWxkKSB0byBhbiBBQ0wgY29uZmlndXJhdGlvbiAoKnBGaWx0ZXJfY2ZnKS4KKyAqICAgICAgUG9pbnRlciBwRmlsdGVyX2NmZyBwb2ludHMgdG8gYW4gQUNMIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLCB0aGlzIHN0cnVjdHVyZSBrZWVwcyBtdWx0aXBsZSBBQ0wKKyAqICAgICAgY29tcGFyaXNvbiBydWxlcyBieSBtZWFucyBvZiBsaW5rZWQgbGlzdC4gUG9pbnRlciBwRmlsdGVyX2ZpZWxkIHdpbGwgYmUgYWRkZWQgdG8gbGlua2VkCisgKiAgICAgIGxpc3Qga2VlcGVkIGJ5IHN0cnVjdHVyZSB0aGF0IHBGaWx0ZXJfY2ZnIHBvaW50cyB0by4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2ZpbHRlcl9pZ3JBY2xfZmllbGRfYWRkKHJ0a19maWx0ZXJfY2ZnX3QgKnBGaWx0ZXJfY2ZnLCBydGtfZmlsdGVyX2ZpZWxkX3QgKnBGaWx0ZXJfZmllbGQpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfZmlsdGVyX2lnckFjbF9jZmdfYWRkCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQWRkIGFuIEFDTCBjb25maWd1cmF0aW9uIHRvIEFTSUMKKyAqIElucHV0OgorICogICAgICBmaWx0ZXJfaWQgICAgICAgLSBTdGFydCBpbmRleCBvZiBBQ0wgY29uZmlndXJhdGlvbi4KKyAqICAgICAgcEZpbHRlcl9jZmcgICAgIC0gVGhlIEFDTCBjb25maWd1cmF0aW9uIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsIGFkZCBjb21wYXJpc29uIHJ1bGUKKyAqICAgICAgcEZpbHRlcl9hY3Rpb24gIC0gQWN0aW9uKHMpIG9mIEFDTCBjb25maWd1cmF0aW9uLgorICogT3V0cHV0OgorICogICAgICBydWxlTnVtIC0gbnVtYmVyIG9mIHJ1bGVzIHdyaXR0ZW4gaW4gYWNsIHRhYmxlCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgICAgICAgICAgICAgICAgICAgICAtIFBvaW50ZXIgcEZpbHRlcl9maWVsZCBvciBwRmlsdGVyX2NmZyBwb2ludCB0byBOVUxMLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiAgICAgIFJUX0VSUl9FTlRSWV9JTkRFWCAgICAgICAgICAgICAgICAgICAgICAtIEludmFsaWQgZmlsdGVyX2lkIC4KKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAgICAgICAgICAgICAgICAgICAgIC0gUG9pbnRlciBwRmlsdGVyX2FjdGlvbiBvciBwRmlsdGVyX2NmZyBwb2ludCB0byBOVUxMLgorICogICAgICBSVF9FUlJfRklMVEVSX0lOQUNMX0FDVF9OT1RfU1VQUE9SVCAgICAgLSBBY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGNoaXAuCisgKiAgICAgIFJUX0VSUl9GSUxURVJfSU5BQ0xfUlVMRV9OT1RfU1VQUE9SVCAgICAtIFJ1bGUgaXMgbm90IHN1cHBvcnRlZC4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgZnVuY3Rpb24gc3RvcmUgcEZpbHRlcl9jZmcsIHBGaWx0ZXJfYWN0aW9uIGludG8gQVNJQy4gVGhlIHN0YXJ0aW5nCisgKiAgICAgIGluZGV4KGVzKSBpcyBmaWx0ZXJfaWQuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19maWx0ZXJfaWdyQWNsX2NmZ19hZGQocnRrX2ZpbHRlcl9pZF90IGZpbHRlcl9pZCwgcnRrX2ZpbHRlcl9jZmdfdCAqcEZpbHRlcl9jZmcsIHJ0a19maWx0ZXJfYWN0aW9uX3QgKnBBY3Rpb24sIHJ0a19maWx0ZXJfbnVtYmVyX3QgKnJ1bGVOdW0pOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfZmlsdGVyX2lnckFjbF9jZmdfZGVsCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgRGVsZXRlIGFuIEFDTCBjb25maWd1cmF0aW9uIGZyb20gQVNJQworICogSW5wdXQ6CisgKiAgICAgIGZpbHRlcl9pZCAgIC0gU3RhcnQgaW5kZXggb2YgQUNMIGNvbmZpZ3VyYXRpb24uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0ZJTFRFUl9FTlRSWUlEWCAgLSBJbnZhbGlkIGZpbHRlcl9pZC4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgZnVuY3Rpb24gZGVsZXRlIGEgZ3JvdXAgb2YgQUNMIHJ1bGVzIHN0YXJ0aW5nIGZyb20gZmlsdGVyX2lkLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfZmlsdGVyX2lnckFjbF9jZmdfZGVsKHJ0a19maWx0ZXJfaWRfdCBmaWx0ZXJfaWQpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfZmlsdGVyX2lnckFjbF9jZmdfZGVsQWxsCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgRGVsZXRlIGFsbCBBQ0wgZW50cmllcyBmcm9tIEFTSUMKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgZnVuY3Rpb24gZGVsZXRlIGFsbCBBQ0wgY29uZmlndXJhdGlvbiBmcm9tIEFTSUMuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19maWx0ZXJfaWdyQWNsX2NmZ19kZWxBbGwodm9pZCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19maWx0ZXJfaWdyQWNsX2NmZ19nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgb25lIGluZ3Jlc3MgYWNsIGNvbmZpZ3VyYXRpb24gZnJvbSBBU0lDLgorICogSW5wdXQ6CisgKiAgICAgIGZpbHRlcl9pZCAgICAgICAtIFN0YXJ0IGluZGV4IG9mIEFDTCBjb25maWd1cmF0aW9uLgorICogT3V0cHV0OgorICogICAgICBwRmlsdGVyX2NmZyAgICAgLSBidWZmZXIgcG9pbnRlciBvZiBpbmdyZXNzIGFjbCBkYXRhCisgKiAgICAgIHBGaWx0ZXJfYWN0aW9uICAtIGJ1ZmZlciBwb2ludGVyIG9mIGluZ3Jlc3MgYWNsIGFjdGlvbgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfTlVMTF9QT0lOVEVSICAgICAtIFBvaW50ZXIgcEZpbHRlcl9hY3Rpb24gb3IgcEZpbHRlcl9jZmcgcG9pbnQgdG8gTlVMTC4KKyAqICAgICAgUlRfRVJSX0ZJTFRFUl9FTlRSWUlEWCAgLSBJbnZhbGlkIGVudHJ5IGluZGV4LgorICogTm90ZToKKyAqICAgICAgVGhpcyBmdW5jdGlvbiBkZWxldGUgYWxsIEFDTCBjb25maWd1cmF0aW9uIGZyb20gQVNJQy4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2ZpbHRlcl9pZ3JBY2xfY2ZnX2dldChydGtfZmlsdGVyX2lkX3QgZmlsdGVyX2lkLCBydGtfZmlsdGVyX2NmZ19yYXdfdCAqcEZpbHRlcl9jZmcsIHJ0a19maWx0ZXJfYWN0aW9uX3QgKnBBY3Rpb24pOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfZmlsdGVyX2lnckFjbF91bm1hdGNoQWN0aW9uX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBhY3Rpb24gdG8gcGFja2V0cyB3aGVuIG5vIEFDTCBjb25maWd1cmF0aW9uIG1hdGNoCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIFBvcnQgaWQuCisgKiAgICAgIGFjdGlvbiAgLSBBY3Rpb24uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBpZC4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgZnVuY3Rpb24gc2V0cyBhY3Rpb24gb2YgcGFja2V0cyB3aGVuIG5vIEFDTCBjb25maWdydWF0aW9uIG1hdGNoZXMuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19maWx0ZXJfaWdyQWNsX3VubWF0Y2hBY3Rpb25fc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2ZpbHRlcl91bm1hdGNoX2FjdGlvbl90IGFjdGlvbik7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19maWx0ZXJfaWdyQWNsX3VubWF0Y2hBY3Rpb25fZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGFjdGlvbiB0byBwYWNrZXRzIHdoZW4gbm8gQUNMIGNvbmZpZ3VyYXRpb24gbWF0Y2gKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUG9ydCBpZC4KKyAqIE91dHB1dDoKKyAqICAgICAgcEFjdGlvbiAtIEFjdGlvbi4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBpZC4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgZnVuY3Rpb24gZ2V0cyBhY3Rpb24gb2YgcGFja2V0cyB3aGVuIG5vIEFDTCBjb25maWdydWF0aW9uIG1hdGNoZXMuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19maWx0ZXJfaWdyQWNsX3VubWF0Y2hBY3Rpb25fZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2ZpbHRlcl91bm1hdGNoX2FjdGlvbl90KiBhY3Rpb24pOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfZmlsdGVyX2lnckFjbF9zdGF0ZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgc3RhdGUgb2YgaW5ncmVzcyBBQ0wuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIFBvcnQgaWQuCisgKiAgICAgIHN0YXRlICAgLSBJbmdyZXNzIEFDTCBzdGF0ZS4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IGlkLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhpcyBmdW5jdGlvbiBnZXRzIGFjdGlvbiBvZiBwYWNrZXRzIHdoZW4gbm8gQUNMIGNvbmZpZ3J1YXRpb24gbWF0Y2hlcy4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2ZpbHRlcl9pZ3JBY2xfc3RhdGVfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2ZpbHRlcl9zdGF0ZV90IHN0YXRlKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2ZpbHRlcl9pZ3JBY2xfc3RhdGVfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHN0YXRlIG9mIGluZ3Jlc3MgQUNMLgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBQb3J0IGlkLgorICogT3V0cHV0OgorICogICAgICBwU3RhdGUgIC0gSW5ncmVzcyBBQ0wgc3RhdGUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgaWQuCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGlzIGZ1bmN0aW9uIGdldHMgYWN0aW9uIG9mIHBhY2tldHMgd2hlbiBubyBBQ0wgY29uZmlncnVhdGlvbiBtYXRjaGVzLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfZmlsdGVyX2lnckFjbF9zdGF0ZV9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfZmlsdGVyX3N0YXRlX3QqIHN0YXRlKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2ZpbHRlcl9pZ3JBY2xfdGVtcGxhdGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHRlbXBsYXRlIG9mIGluZ3Jlc3MgQUNMLgorICogSW5wdXQ6CisgKiAgICAgIHRlbXBsYXRlIC0gSW5ncmVzcyBBQ0wgdGVtcGxhdGUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhpcyBmdW5jdGlvbiBzZXQgQUNMIHRlbXBsYXRlLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfZmlsdGVyX2lnckFjbF90ZW1wbGF0ZV9zZXQocnRrX2ZpbHRlcl90ZW1wbGF0ZV90ICphY2xUZW1wbGF0ZSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19maWx0ZXJfaWdyQWNsX3RlbXBsYXRlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCB0ZW1wbGF0ZSBvZiBpbmdyZXNzIEFDTC4KKyAqIElucHV0OgorICogICAgICB0ZW1wbGF0ZSAtIEluZ3Jlc3MgQUNMIHRlbXBsYXRlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgZnVuY3Rpb24gZ2V0cyB0ZW1wbGF0ZSBvZiBBQ0wuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19maWx0ZXJfaWdyQWNsX3RlbXBsYXRlX2dldChydGtfZmlsdGVyX3RlbXBsYXRlX3QgKmFjbFRlbXBsYXRlKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2ZpbHRlcl9pZ3JBY2xfZmllbGRfc2VsX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCB1c2VyIGRlZmluZWQgZmllbGQgc2VsZWN0b3JzIGluIEhTQgorICogSW5wdXQ6CisgKiAgICAgIGluZGV4ICAgICAgIC0gaW5kZXggb2YgZmllbGQgc2VsZWN0b3IgMC0xNQorICogICAgICBmb3JtYXQgICAgICAtIEZvcm1hdCBvZiBmaWVsZCBzZWxlY3RvcgorICogICAgICBvZmZzZXQgICAgICAtIFJldHJpZXZpbmcgZGF0YSBvZmZzZXQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgU3lzdGVtIHN1cHBvcnQgMTYgdXNlciBkZWZpbmVkIGZpZWxkIHNlbGN0b3JzLgorICogICAgICBFYWNoIHNlbGVjdG9yIGNhbiBiZSBlbmFibGVkIG9yIGRpc2FibGUuCisgKiAgICAgIFVzZXIgY2FuIGRlZmluZWQgcmV0cmlldmluZyAxNi1iaXRzIGluIG1hbnkgcHJlZGVmaWVuZAorICogICAgICBzdGFuZGFyZCBsMi9sMy9sNCBwYXlsb2FkLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfZmlsdGVyX2lnckFjbF9maWVsZF9zZWxfc2V0KHJ0a191aW50MzIgaW5kZXgsIHJ0a19maWVsZF9zZWxfdCBmb3JtYXQsIHJ0a191aW50MzIgb2Zmc2V0KTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2ZpbHRlcl9pZ3JBY2xfZmllbGRfc2VsX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCB1c2VyIGRlZmluZWQgZmllbGQgc2VsZWN0b3JzIGluIEhTQgorICogSW5wdXQ6CisgKiAgICAgIGluZGV4ICAgICAgIC0gaW5kZXggb2YgZmllbGQgc2VsZWN0b3IgMC0xNQorICogT3V0cHV0OgorICogICAgICBwRm9ybWF0ICAgICAtIEZvcm1hdCBvZiBmaWVsZCBzZWxlY3RvcgorICogICAgICBwT2Zmc2V0ICAgICAtIFJldHJpZXZpbmcgZGF0YSBvZmZzZXQKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19maWx0ZXJfaWdyQWNsX2ZpZWxkX3NlbF9nZXQocnRrX3VpbnQzMiBpbmRleCwgcnRrX2ZpZWxkX3NlbF90ICpwRm9ybWF0LCBydGtfdWludDMyICpwT2Zmc2V0KTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2ZpbHRlcl9pcHJhbmdlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBJUCBSYW5nZSBjaGVjaworICogSW5wdXQ6CisgKiAgICAgIGluZGV4ICAgICAgIC0gaW5kZXggb2YgSVAgUmFuZ2UgMC0xNQorICogICAgICB0eXBlICAgICAgICAtIElQIFJhbmdlIGNoZWNrIHR5cGUsIDA6RGVsZXRlIGEgZW50cnksIDE6IElQdjRfU0lQLCAyOiBJUHY0X0RJUCwgMzpJUHY2X1NJUCwgNDpJUHY2X0RJUAorICogICAgICB1cHBlcklwICAgICAtIFRoZSB1cHBlciBib3VuZCBvZiBJUCByYW5nZQorICogICAgICBsb3dlcklwICAgICAtIFRoZSBsb3dlciBCb3VuZCBvZiBJUCByYW5nZQorICogT3V0cHV0OgorICogICAgICBOb25lLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFICAgIC0gVGhlIHBhcmFtZXRlciBpcyBvdXQgb2YgcmFuZ2UKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAtIElucHV0IGVycm9yCisgKiBOb3RlOgorICogICAgICB1cHBlcklwIG11c3QgYmUgbGFyZ2VyIG9yIGVxdWFsIHRoYW4gbG93ZXJJcC4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2ZpbHRlcl9pcHJhbmdlX3NldChydGtfdWludDMyIGluZGV4LCBydGtfZmlsdGVyX2lwcmFuZ2VfdCB0eXBlLCBpcGFkZHJfdCB1cHBlcklwLCBpcGFkZHJfdCBsb3dlcklwKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2ZpbHRlcl9pcHJhbmdlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBJUCBSYW5nZSBjaGVjaworICogSW5wdXQ6CisgKiAgICAgIGluZGV4ICAgICAgIC0gaW5kZXggb2YgSVAgUmFuZ2UgMC0xNQorICogT3V0cHV0OgorICogICAgICBwVHlwZSAgICAgICAgLSBJUCBSYW5nZSBjaGVjayB0eXBlLCAwOkRlbGV0ZSBhIGVudHJ5LCAxOiBJUHY0X1NJUCwgMjogSVB2NF9ESVAsIDM6SVB2Nl9TSVAsIDQ6SVB2Nl9ESVAKKyAqICAgICAgcFVwcGVySXAgICAgIC0gVGhlIHVwcGVyIGJvdW5kIG9mIElQIHJhbmdlCisgKiAgICAgIHBMb3dlcklwICAgICAtIFRoZSBsb3dlciBCb3VuZCBvZiBJUCByYW5nZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFICAgIC0gVGhlIHBhcmFtZXRlciBpcyBvdXQgb2YgcmFuZ2UKKyAqIE5vdGU6CisgKiAgICAgIHVwcGVySXAgbXVzdCBiZSBsYXJnZXIgb3IgZXF1YWwgdGhhbiBsb3dlcklwLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfZmlsdGVyX2lwcmFuZ2VfZ2V0KHJ0a191aW50MzIgaW5kZXgsIHJ0a19maWx0ZXJfaXByYW5nZV90ICpwVHlwZSwgaXBhZGRyX3QgKnBVcHBlcklwLCBpcGFkZHJfdCAqcExvd2VySXApOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfZmlsdGVyX3ZpZHJhbmdlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBWSUQgUmFuZ2UgY2hlY2sKKyAqIElucHV0OgorICogICAgICBpbmRleCAgICAgICAtIGluZGV4IG9mIFZJRCBSYW5nZSAwLTE1CisgKiAgICAgIHR5cGUgICAgICAgIC0gSVAgUmFuZ2UgY2hlY2sgdHlwZSwgMDpEZWxldGUgYSBlbnRyeSwgMTogQ1ZJRCwgMjogU1ZJRAorICogICAgICB1cHBlclZpZCAgICAtIFRoZSB1cHBlciBib3VuZCBvZiBWSUQgcmFuZ2UKKyAqICAgICAgbG93ZXJWaWQgICAgLSBUaGUgbG93ZXIgQm91bmQgb2YgVklEIHJhbmdlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgICAgLSBUaGUgcGFyYW1ldGVyIGlzIG91dCBvZiByYW5nZQorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgIC0gSW5wdXQgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIHVwcGVyVmlkIG11c3QgYmUgbGFyZ2VyIG9yIGVxdWFsIHRoYW4gbG93ZXJWaWQuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19maWx0ZXJfdmlkcmFuZ2Vfc2V0KHJ0a191aW50MzIgaW5kZXgsIHJ0a19maWx0ZXJfdmlkcmFuZ2VfdCB0eXBlLCBydGtfdWludDMyIHVwcGVyVmlkLCBydGtfdWludDMyIGxvd2VyVmlkKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2ZpbHRlcl92aWRyYW5nZV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgVklEIFJhbmdlIGNoZWNrCisgKiBJbnB1dDoKKyAqICAgICAgaW5kZXggICAgICAgLSBpbmRleCBvZiBWSUQgUmFuZ2UgMC0xNQorICogT3V0cHV0OgorICogICAgICBwVHlwZSAgICAgICAgLSBJUCBSYW5nZSBjaGVjayB0eXBlLCAwOlVudXNlZCwgMTogQ1ZJRCwgMjogU1ZJRAorICogICAgICBwVXBwZXJWaWQgICAgLSBUaGUgdXBwZXIgYm91bmQgb2YgVklEIHJhbmdlCisgKiAgICAgIHBMb3dlclZpZCAgICAtIFRoZSBsb3dlciBCb3VuZCBvZiBWSUQgcmFuZ2UKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAgICAtIFRoZSBwYXJhbWV0ZXIgaXMgb3V0IG9mIHJhbmdlCisgKiBOb3RlOgorICogICAgICBOb25lLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfZmlsdGVyX3ZpZHJhbmdlX2dldChydGtfdWludDMyIGluZGV4LCBydGtfZmlsdGVyX3ZpZHJhbmdlX3QgKnBUeXBlLCBydGtfdWludDMyICpwVXBwZXJWaWQsIHJ0a191aW50MzIgKnBMb3dlclZpZCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19maWx0ZXJfcG9ydHJhbmdlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBQb3J0IFJhbmdlIGNoZWNrCisgKiBJbnB1dDoKKyAqICAgICAgaW5kZXggICAgICAgLSBpbmRleCBvZiBQb3J0IFJhbmdlIDAtMTUKKyAqICAgICAgdHlwZSAgICAgICAgLSBJUCBSYW5nZSBjaGVjayB0eXBlLCAwOkRlbGV0ZSBhIGVudHJ5LCAxOiBTb3VyY2UgUG9ydCwgMjogRGVzdG5hdGlvbiBQb3J0CisgKiAgICAgIHVwcGVyUG9ydCAgIC0gVGhlIHVwcGVyIGJvdW5kIG9mIFBvcnQgcmFuZ2UKKyAqICAgICAgbG93ZXJQb3J0ICAgLSBUaGUgbG93ZXIgQm91bmQgb2YgUG9ydCByYW5nZQorICogT3V0cHV0OgorICogICAgICBOb25lLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFICAgIC0gVGhlIHBhcmFtZXRlciBpcyBvdXQgb2YgcmFuZ2UKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAtIElucHV0IGVycm9yCisgKiBOb3RlOgorICogICAgICB1cHBlclBvcnQgbXVzdCBiZSBsYXJnZXIgb3IgZXF1YWwgdGhhbiBsb3dlclBvcnQuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19maWx0ZXJfcG9ydHJhbmdlX3NldChydGtfdWludDMyIGluZGV4LCBydGtfZmlsdGVyX3BvcnRyYW5nZV90IHR5cGUsIHJ0a191aW50MzIgdXBwZXJQb3J0LCBydGtfdWludDMyIGxvd2VyUG9ydCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19maWx0ZXJfcG9ydHJhbmdlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBQb3J0IFJhbmdlIGNoZWNrCisgKiBJbnB1dDoKKyAqICAgICAgaW5kZXggICAgICAgLSBpbmRleCBvZiBQb3J0IFJhbmdlIDAtMTUKKyAqIE91dHB1dDoKKyAqICAgICAgcFR5cGUgICAgICAgLSBJUCBSYW5nZSBjaGVjayB0eXBlLCAwOkRlbGV0ZSBhIGVudHJ5LCAxOiBTb3VyY2UgUG9ydCwgMjogRGVzdG5hdGlvbiBQb3J0CisgKiAgICAgIHBVcHBlclBvcnQgIC0gVGhlIHVwcGVyIGJvdW5kIG9mIFBvcnQgcmFuZ2UKKyAqICAgICAgcExvd2VyUG9ydCAgLSBUaGUgbG93ZXIgQm91bmQgb2YgUG9ydCByYW5nZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFICAgIC0gVGhlIHBhcmFtZXRlciBpcyBvdXQgb2YgcmFuZ2UKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAtIElucHV0IGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfZmlsdGVyX3BvcnRyYW5nZV9nZXQocnRrX3VpbnQzMiBpbmRleCwgcnRrX2ZpbHRlcl9wb3J0cmFuZ2VfdCAqcFR5cGUsIHJ0a191aW50MzIgKnBVcHBlclBvcnQsIHJ0a191aW50MzIgKnBMb3dlclBvcnQpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfZmlsdGVyX2lnckFjbFBvbGFyaXR5X3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBBQ0wgR29pcCBjb250cm9sIHBhbGFyaXR5CisgKiBJbnB1dDoKKyAqICAgICAgcG9sYXJpdHkgLSAxOiBIaWdoLCAwOiBMb3cKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIG5vbmUKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2ZpbHRlcl9pZ3JBY2xQb2xhcml0eV9zZXQocnRrX3VpbnQzMiBwb2xhcml0eSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19maWx0ZXJfaWdyQWNsUG9sYXJpdHlfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IEFDTCBHb2lwIGNvbnRyb2wgcGFsYXJpdHkKKyAqIElucHV0OgorICogICAgICBwUG9sYXJpdHkgLSAxOiBIaWdoLCAwOiBMb3cKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIG5vbmUKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2ZpbHRlcl9pZ3JBY2xQb2xhcml0eV9nZXQocnRrX3VpbnQzMiogcFBvbGFyaXR5KTsKKworCisjZW5kaWYgLyogX19SVEtfQVBJX0FDTF9IX18gKi8KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL2NwdS5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvY3B1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU0NGFjYQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL2NwdS5oCkBAIC0wLDAgKzEsMzI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqIFB1cnBvc2UgOiBSVEw4MzY3L1JUTDgzNjdDIHN3aXRjaCBoaWdoLWxldmVsIEFQSQorICoKKyAqIEZlYXR1cmUgOiBUaGUgZmlsZSBpbmNsdWRlcyBDUFUgbW9kdWxlIGhpZ2gtbGF5ZXIgQVBJIGRlZmluYXRpb24KKyAqCisgKi8KKworI2lmbmRlZiBfX1JUS19BUElfQ1BVX0hfXworI2RlZmluZSBfX1JUS19BUElfQ1BVX0hfXworCisKKy8qCisgKiBEYXRhIFR5cGUgRGVjbGFyYXRpb24KKyAqLwordHlwZWRlZiBlbnVtIHJ0a19jcHVfaW5zZXJ0X2UKK3sKKyAgICBDUFVfSU5TRVJUX1RPX0FMTCA9IDAsCisgICAgQ1BVX0lOU0VSVF9UT19UUkFQUElORywKKyAgICBDUFVfSU5TRVJUX1RPX05PTkUsCisgICAgQ1BVX0lOU0VSVF9FTkQKK31ydGtfY3B1X2luc2VydF90OworCit0eXBlZGVmIGVudW0gcnRrX2NwdV9wb3NpdGlvbl9lCit7CisgICAgQ1BVX1BPU19BRlRFUl9TQSA9IDAsCisgICAgQ1BVX1BPU19CRUZPUkVfQ1JDLAorICAgIENQVV9QT1NfRU5ECit9cnRrX2NwdV9wb3NpdGlvbl90OworCit0eXBlZGVmIGVudW0gcnRrX2NwdV90YWdfbGVuZ3RoX2UKK3sKKyAgICBDUFVfTEVOXzhCWVRFUyA9IDAsCisgICAgQ1BVX0xFTl80QllURVMsCisgICAgQ1BVX0xFTl9FTkQKK31ydGtfY3B1X3RhZ19sZW5ndGhfdDsKKworCit0eXBlZGVmIGVudW0gcnRrX2NwdV9yeF9sZW5ndGhfZQoreworICAgIENQVV9SWF83MkJZVEVTID0gMCwKKyAgICBDUFVfUlhfNjRCWVRFUywKKyAgICBDUFVfUlhfRU5ECit9cnRrX2NwdV9yeF9sZW5ndGhfdDsKKworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfY3B1X2VuYWJsZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgQ1BVIHBvcnQgZnVuY3Rpb24gZW5hYmxlL2Rpc2FibGUuCisgKiBJbnB1dDoKKyAqICAgICAgZW5hYmxlIC0gQ1BVIHBvcnQgZnVuY3Rpb24gZW5hYmxlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVyLgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIHNldCBDUFUgcG9ydCBmdW5jdGlvbiBlbmFibGUvZGlzYWJsZS4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2NwdV9lbmFibGVfc2V0KHJ0a19lbmFibGVfdCBlbmFibGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfY3B1X2VuYWJsZV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgQ1BVIHBvcnQgYW5kIGl0cyBzZXR0aW5nLgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcEVuYWJsZSAtIENQVSBwb3J0IGZ1bmN0aW9uIGVuYWJsZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX0wyX05PX0NQVV9QT1JUICAgLSBDUFUgcG9ydCBpcyBub3QgZXhpc3QKKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGdldCBDUFUgcG9ydCBmdW5jdGlvbiBlbmFibGUvZGlzYWJsZS4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2NwdV9lbmFibGVfZ2V0KHJ0a19lbmFibGVfdCAqcEVuYWJsZSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19jcHVfdGFnUG9ydF9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgQ1BVIHBvcnQgYW5kIENQVSB0YWcgaW5zZXJ0IG1vZGUuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiAgICAgIG1vZGUgLSBDUFUgdGFnIGluc2VydCBmb3IgcGFja2V0cyBlZ3Jlc3MgZnJvbSBDUFUgcG9ydC4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIuCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gc2V0IENQVSBwb3J0IGFuZCBpbnNlcnRpbmcgcHJvcHJpZXRhcnkgQ1BVIHRhZyBtb2RlIChMZW5ndGgvVHlwZSAweDg4OTkpCisgKiAgICAgIHRvIHRoZSBmcmFtZSB0aGF0IHRyYW5zbWl0dGluZyB0byBDUFUgcG9ydC4KKyAqICAgICAgVGhlIGluc2V0IGNwdSB0YWcgbW9kZSBpcyBhcyBmb2xsb3dpbmc6CisgKiAgICAgIC0gQ1BVX0lOU0VSVF9UT19BTEwKKyAqICAgICAgLSBDUFVfSU5TRVJUX1RPX1RSQVBQSU5HCisgKiAgICAgIC0gQ1BVX0lOU0VSVF9UT19OT05FCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19jcHVfdGFnUG9ydF9zZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfY3B1X2luc2VydF90IG1vZGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfY3B1X3RhZ1BvcnRfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IENQVSBwb3J0IGFuZCBDUFUgdGFnIGluc2VydCBtb2RlLgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcFBvcnQgLSBQb3J0IGlkLgorICogICAgICBwTW9kZSAtIENQVSB0YWcgaW5zZXJ0IGZvciBwYWNrZXRzIGVncmVzcyBmcm9tIENQVSBwb3J0LCAwOmFsbCBpbnNlcnQgMTpPbmx5IGZvciB0cmFwcGVkIHBhY2tldHMgMjpubyBpbnNlcnQuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogICAgICBSVF9FUlJfTDJfTk9fQ1BVX1BPUlQgICAtIENQVSBwb3J0IGlzIG5vdCBleGlzdAorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IGNvbmZpZ3VyZWQgQ1BVIHBvcnQgYW5kIGl0cyBzZXR0aW5nLgorICogICAgICBUaGUgaW5zZXQgY3B1IHRhZyBtb2RlIGlzIGFzIGZvbGxvd2luZzoKKyAqICAgICAgLSBDUFVfSU5TRVJUX1RPX0FMTAorICogICAgICAtIENQVV9JTlNFUlRfVE9fVFJBUFBJTkcKKyAqICAgICAgLSBDUFVfSU5TRVJUX1RPX05PTkUKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2NwdV90YWdQb3J0X2dldChydGtfcG9ydF90ICpwUG9ydCwgcnRrX2NwdV9pbnNlcnRfdCAqcE1vZGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfY3B1X2F3YXJlUG9ydF9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgQ1BVIGF3YXJlIHBvcnQgbWFzay4KKyAqIElucHV0OgorICogICAgICBwb3J0bWFzayAtIFBvcnQgbWFzay4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9NQVNLICAgICAgLSBJbnZhbGlkIHBvcnQgbWFzay4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIHNldCBjb25maWd1cmVkIENQVSBhd2FyZSBwb3J0IG1hc2suCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19jcHVfYXdhcmVQb3J0X3NldChydGtfcG9ydG1hc2tfdCAqcFBvcnRtYXNrKTsKKworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfY3B1X2F3YXJlUG9ydF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgQ1BVIGF3YXJlIHBvcnQgbWFzay4KKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBQb3J0bWFzayAtIFBvcnQgbWFzay4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGdldCBjb25maWd1cmVkIENQVSBhd2FyZSBwb3J0IG1hc2suCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19jcHVfYXdhcmVQb3J0X2dldChydGtfcG9ydG1hc2tfdCAqcFBvcnRtYXNrKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2NwdV90YWdQb3NpdGlvbl9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgQ1BVIHRhZyBwb3NpdGlvbi4KKyAqIElucHV0OgorICogICAgICBwb3NpdGlvbiAtIENQVSB0YWcgcG9zaXRpb24uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgLSBJbnZhbGlkIGlucHV0LgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gc2V0IENQVSB0YWcgcG9zaXRpb24uCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19jcHVfdGFnUG9zaXRpb25fc2V0KHJ0a19jcHVfcG9zaXRpb25fdCBwb3NpdGlvbik7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19jcHVfdGFnUG9zaXRpb25fZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IENQVSB0YWcgcG9zaXRpb24uCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwUG9zaXRpb24gLSBDUFUgdGFnIHBvc2l0aW9uLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAtIEludmFsaWQgaW5wdXQuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBnZXQgQ1BVIHRhZyBwb3NpdGlvbi4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2NwdV90YWdQb3NpdGlvbl9nZXQocnRrX2NwdV9wb3NpdGlvbl90ICpwUG9zaXRpb24pOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfY3B1X3RhZ0xlbmd0aF9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgQ1BVIHRhZyBsZW5ndGguCisgKiBJbnB1dDoKKyAqICAgICAgbGVuZ3RoIC0gQ1BVIHRhZyBsZW5ndGguCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgLSBJbnZhbGlkIGlucHV0LgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gc2V0IENQVSB0YWcgbGVuZ3RoLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfY3B1X3RhZ0xlbmd0aF9zZXQocnRrX2NwdV90YWdfbGVuZ3RoX3QgbGVuZ3RoKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2NwdV90YWdMZW5ndGhfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IENQVSB0YWcgbGVuZ3RoLgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcExlbmd0aCAtIENQVSB0YWcgbGVuZ3RoLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAtIEludmFsaWQgaW5wdXQuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBnZXQgQ1BVIHRhZyBsZW5ndGguCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19jcHVfdGFnTGVuZ3RoX2dldChydGtfY3B1X3RhZ19sZW5ndGhfdCAqcExlbmd0aCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19jcHVfYWNjZXB0TGVuZ3RoX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBDUFUgYWNjZXB0ICBsZW5ndGguCisgKiBJbnB1dDoKKyAqICAgICAgbGVuZ3RoIC0gQ1BVIHRhZyBsZW5ndGguCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgLSBJbnZhbGlkIGlucHV0LgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gc2V0IENQVSBhY2NlcHQgbGVuZ3RoLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfY3B1X2FjY2VwdExlbmd0aF9zZXQocnRrX2NwdV9yeF9sZW5ndGhfdCBsZW5ndGgpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfY3B1X2FjY2VwdExlbmd0aF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgQ1BVIGFjY2VwdCBsZW5ndGguCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwTGVuZ3RoIC0gQ1BVIHRhZyBsZW5ndGguCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgIC0gSW52YWxpZCBpbnB1dC4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGdldCBDUFUgYWNjZXB0IGxlbmd0aC4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2NwdV9hY2NlcHRMZW5ndGhfZ2V0KHJ0a19jcHVfcnhfbGVuZ3RoX3QgKnBMZW5ndGgpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfY3B1X3ByaVJlbWFwX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIENvbmZpZ3VyZSBDUFUgcHJpb3JpdGllcyBtYXBwaW5nIHRvIGludGVybmFsIGFic29sdXRlIHByaW9yaXR5LgorICogSW5wdXQ6CisgKiAgICAgIGludF9wcmkgICAgIC0gaW50ZXJuYWwgcHJpb3JpdHkgdmFsdWUuCisgKiAgICAgIG5ld19wcmkgICAgLSBuZXcgaW50ZXJuYWwgcHJpb3JpdHkgdmFsdWUuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiAgICAgIFJUX0VSUl9WTEFOX1BSSU9SSVRZICAgIC0gSW52YWxpZCAxcCBwcmlvcml0eS4KKyAqICAgICAgUlRfRVJSX1FPU19JTlRfUFJJT1JJVFkgLSBJbnZhbGlkIHByaW9yaXR5LgorICogTm90ZToKKyAqICAgICAgUHJpb3JpdHkgb2YgQ1BVIHRhZyBhc3NpZ25tZW50IGZvciBpbnRlcm5hbCBhc2ljIHByaW9yaXR5LCBhbmQgaXQgaXMgdXNlZCBmb3IgcXVldWUgdXNhZ2UgYW5kIHBhY2tldCBzY2hlZHVsaW5nLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfY3B1X3ByaVJlbWFwX3NldChydGtfcHJpX3QgaW50X3ByaSwgcnRrX3ByaV90IG5ld19wcmkpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfY3B1X3ByaVJlbWFwX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIENvbmZpZ3VyZSBDUFUgcHJpb3JpdGllcyBtYXBwaW5nIHRvIGludGVybmFsIGFic29sdXRlIHByaW9yaXR5LgorICogSW5wdXQ6CisgKiAgICAgIGludF9wcmkgICAgIC0gaW50ZXJuYWwgcHJpb3JpdHkgdmFsdWUuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBOZXdfcHJpICAgIC0gbmV3IGludGVybmFsIHByaW9yaXR5IHZhbHVlLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX1ZMQU5fUFJJT1JJVFkgICAgLSBJbnZhbGlkIDFwIHByaW9yaXR5LgorICogICAgICBSVF9FUlJfUU9TX0lOVF9QUklPUklUWSAtIEludmFsaWQgcHJpb3JpdHkuCisgKiBOb3RlOgorICogICAgICBQcmlvcml0eSBvZiBDUFUgdGFnIGFzc2lnbm1lbnQgZm9yIGludGVybmFsIGFzaWMgcHJpb3JpdHksIGFuZCBpdCBpcyB1c2VkIGZvciBxdWV1ZSB1c2FnZSBhbmQgcGFja2V0IHNjaGVkdWxpbmcuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19jcHVfcHJpUmVtYXBfZ2V0KHJ0a19wcmlfdCBpbnRfcHJpLCBydGtfcHJpX3QgKnBOZXdfcHJpKTsKKworCisjZW5kaWYgLyogX19SVEtfQVBJX0NQVV9IX18gKi8KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL2RvdDF4LmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9kb3QxeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMGEwNWEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9kb3QxeC5oCkBAIC0wLDAgKzEsNDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqIFB1cnBvc2UgOiBSVEw4MzY3L1JUTDgzNjdDIHN3aXRjaCBoaWdoLWxldmVsIEFQSQorICoKKyAqIEZlYXR1cmUgOiBUaGUgZmlsZSBpbmNsdWRlcyAxWCBtb2R1bGUgaGlnaC1sYXllciBBUEkgZGVmaW5hdGlvbgorICoKKyAqLworCisjaWZuZGVmIF9fUlRLX0FQSV9ET1QxWF9IX18KKyNkZWZpbmUgX19SVEtfQVBJX0RPVDFYX0hfXworCisKKy8qIFR5cGUgb2YgcG9ydC1iYXNlZCBkb3QxeCBhdXRoL3VuYXV0aCovCit0eXBlZGVmIGVudW0gcnRrX2RvdDF4X2F1dGhfc3RhdHVzX2UKK3sKKyAgICBVTkFVVEggPSAwLAorICAgIEFVVEgsCisgICAgQVVUSF9TVEFUVVNfRU5ECit9IHJ0a19kb3QxeF9hdXRoX3N0YXR1c190OworCit0eXBlZGVmIGVudW0gcnRrX2RvdDF4X2RpcmVjdGlvbl9lCit7CisgICAgRElSX0JPVEggPSAwLAorICAgIERJUl9JTiwKKyAgICBESVJFQ1RJT05fRU5ECit9IHJ0a19kb3QxeF9kaXJlY3Rpb25fdDsKKworLyogdW5hdXRoIHBrdCBhY3Rpb24gKi8KK3R5cGVkZWYgZW51bSBydGtfZG90MXhfdW5hdXRoX2FjdGlvbl9lCit7CisgICAgRE9UMVhfQUNUSU9OX0RST1AgPSAwLAorICAgIERPVDFYX0FDVElPTl9UUkFQMkNQVSwKKyAgICBET1QxWF9BQ1RJT05fR1VFU1RWTEFOLAorICAgIERPVDFYX0FDVElPTl9FTkQKK30gcnRrX2RvdDF4X3VuYXV0aF9hY3Rpb25fdDsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2RvdDF4X3VuYXV0aFBhY2tldE9wZXJfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IDgwMi4xeCB1bmF1dGggYWN0aW9uIGNvbmZpZ3VyYXRpb24uCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgICAgIC0gUG9ydCBpZC4KKyAqICAgICAgdW5hdXRoX2FjdGlvbiAgIC0gODAyLjFYIHVuYXV0aCBhY3Rpb24uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlci4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBzZXQgODAyLjF4IHVuYXV0aCBhY3Rpb24gY29uZmlndXJhdGlvbi4KKyAqICAgICAgVGhlIHVuYXV0aCBhY3Rpb24gaXMgYXMgZm9sbG93aW5nOgorICogICAgICAtIERPVDFYX0FDVElPTl9EUk9QCisgKiAgICAgIC0gRE9UMVhfQUNUSU9OX1RSQVAyQ1BVCisgKiAgICAgIC0gRE9UMVhfQUNUSU9OX0dVRVNUVkxBTgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfZG90MXhfdW5hdXRoUGFja2V0T3Blcl9zZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfZG90MXhfdW5hdXRoX2FjdGlvbl90IHVuYXV0aF9hY3Rpb24pOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfZG90MXhfdW5hdXRoUGFja2V0T3Blcl9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgODAyLjF4IHVuYXV0aCBhY3Rpb24gY29uZmlndXJhdGlvbi4KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqIE91dHB1dDoKKyAqICAgICAgcFVuYXV0aF9hY3Rpb24gLSA4MDIuMVggdW5hdXRoIGFjdGlvbi4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBjYW4gZ2V0IDgwMi4xeCB1bmF1dGggYWN0aW9uIGNvbmZpZ3VyYXRpb24uCisgKiAgICAgIFRoZSB1bmF1dGggYWN0aW9uIGlzIGFzIGZvbGxvd2luZzoKKyAqICAgICAgLSBET1QxWF9BQ1RJT05fRFJPUAorICogICAgICAtIERPVDFYX0FDVElPTl9UUkFQMkNQVQorICogICAgICAtIERPVDFYX0FDVElPTl9HVUVTVFZMQU4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2RvdDF4X3VuYXV0aFBhY2tldE9wZXJfZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2RvdDF4X3VuYXV0aF9hY3Rpb25fdCAqcFVuYXV0aF9hY3Rpb24pOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfZG90MXhfZWFwb2xGcmFtZTJDcHVFbmFibGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IDgwMi4xeCBFQVBPTCBwYWNrZXQgdHJhcCB0byBDUFUgY29uZmlndXJhdGlvbgorICogSW5wdXQ6CisgKiAgICAgIGVuYWJsZSAtIFRoZSBzdGF0dXMgb2YgODAyLjF4IEVBUE9MIHBhY2tldC4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfRU5BQkxFICAgICAgIC0gSW52YWxpZCBlbmFibGUgaW5wdXQuCisgKiBOb3RlOgorICogICAgICBUbyBzdXBwb3J0IDgwMi4xeCBhdXRoZW50aWNhdGlvbiBmdW5jdGlvbmFsaXR5LCBFQVBPTCBmcmFtZSAoZXRoZXIgdHlwZSA9IDB4ODg4RSkgaGFzIHRvCisgKiAgICAgIGJlIHRyYXBwZWQgdG8gQ1BVLgorICogICAgICBUaGUgc3RhdHVzIG9mIEVBUE9MIGZyYW1lIHRyYXAgdG8gQ1BVIGlzIGFzIGZvbGxvd2luZzoKKyAqICAgICAgLSBESVNBQkxFRAorICogICAgICAtIEVOQUJMRUQKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2RvdDF4X2VhcG9sRnJhbWUyQ3B1RW5hYmxlX3NldChydGtfZW5hYmxlX3QgZW5hYmxlKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2RvdDF4X2VhcG9sRnJhbWUyQ3B1RW5hYmxlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCA4MDIuMXggRUFQT0wgcGFja2V0IHRyYXAgdG8gQ1BVIGNvbmZpZ3VyYXRpb24KKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBFbmFibGUgLSBUaGUgc3RhdHVzIG9mIDgwMi4xeCBFQVBPTCBwYWNrZXQuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUbyBzdXBwb3J0IDgwMi4xeCBhdXRoZW50aWNhdGlvbiBmdW5jdGlvbmFsaXR5LCBFQVBPTCBmcmFtZSAoZXRoZXIgdHlwZSA9IDB4ODg4RSkgaGFzIHRvCisgKiAgICAgIGJlIHRyYXBwZWQgdG8gQ1BVLgorICogICAgICBUaGUgc3RhdHVzIG9mIEVBUE9MIGZyYW1lIHRyYXAgdG8gQ1BVIGlzIGFzIGZvbGxvd2luZzoKKyAqICAgICAgLSBESVNBQkxFRAorICogICAgICAtIEVOQUJMRUQKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2RvdDF4X2VhcG9sRnJhbWUyQ3B1RW5hYmxlX2dldChydGtfZW5hYmxlX3QgKnBFbmFibGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfZG90MXhfcG9ydEJhc2VkRW5hYmxlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCA4MDIuMXggcG9ydC1iYXNlZCBlbmFibGUgY29uZmlndXJhdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBQb3J0IGlkLgorICogICAgICBlbmFibGUgLSBUaGUgc3RhdHVzIG9mIDgwMi4xeCBwb3J0LgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9FTkFCTEUgICAgICAgICAgICAgICAtIEludmFsaWQgZW5hYmxlIGlucHV0LgorICogICAgICBSVF9FUlJfRE9UMVhfUE9SVEJBU0VEUE5FTiAgLSA4MDIuMVggcG9ydC1iYXNlZCBlbmFibGUgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIHVwZGF0ZSB0aGUgcG9ydC1iYXNlZCBwb3J0IGVuYWJsZSByZWdpc3RlciBjb250ZW50LiBJZiBhIHBvcnQgaXMgODAyLjF4CisgKiAgICAgIHBvcnQgYmFzZWQgbmV0d29yayBhY2Nlc3MgY29udHJvbCAiZW5hYmxlZCIsIGl0IHNob3VsZCBiZSBhdXRoZW50aWNhdGVkIHNvIHBhY2tldHMKKyAqICAgICAgZnJvbSB0aGF0IHBvcnQgd29uJ3QgYmUgZHJvcHBlZCBvciB0cmFwcGVkIHRvIENQVS4KKyAqICAgICAgVGhlIHN0YXR1cyBvZiA4MDIuMXggcG9ydC1iYXNlZCBuZXR3b3JrIGFjY2VzcyBjb250cm9sIGlzIGFzIGZvbGxvd2luZzoKKyAqICAgICAgLSBESVNBQkxFRAorICogICAgICAtIEVOQUJMRUQKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2RvdDF4X3BvcnRCYXNlZEVuYWJsZV9zZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfZW5hYmxlX3QgZW5hYmxlKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2RvdDF4X3BvcnRCYXNlZEVuYWJsZV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgODAyLjF4IHBvcnQtYmFzZWQgZW5hYmxlIGNvbmZpZ3VyYXRpb24KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqIE91dHB1dDoKKyAqICAgICAgcEVuYWJsZSAtIFRoZSBzdGF0dXMgb2YgODAyLjF4IHBvcnQuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IHRoZSA4MDIuMXggcG9ydC1iYXNlZCBwb3J0IHN0YXR1cy4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2RvdDF4X3BvcnRCYXNlZEVuYWJsZV9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfZW5hYmxlX3QgKnBFbmFibGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfZG90MXhfcG9ydEJhc2VkQXV0aFN0YXR1c19zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgODAyLjF4IHBvcnQtYmFzZWQgYXV0aC4gcG9ydCBjb25maWd1cmF0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiAgICAgIHBvcnRfYXV0aCAtIFRoZSBzdGF0dXMgb2YgODAyLjF4IHBvcnQuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqICAgICBSVF9FUlJfRE9UMVhfUE9SVEJBU0VEQVVUSCAgIC0gODAyLjFYIHBvcnQtYmFzZWQgYXV0aCBlcnJvcgorICogTm90ZToKKyAqICAgICAgVGhlIGF1dGhlbnRpY2F0ZWQgc3RhdHVzIG9mIDgwMi4xeCBwb3J0LWJhc2VkIG5ldHdvcmsgYWNjZXNzIGNvbnRyb2wgaXMgYXMgZm9sbG93aW5nOgorICogICAgICAtIFVOQVVUSAorICogICAgICAtIEFVVEgKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2RvdDF4X3BvcnRCYXNlZEF1dGhTdGF0dXNfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2RvdDF4X2F1dGhfc3RhdHVzX3QgcG9ydF9hdXRoKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2RvdDF4X3BvcnRCYXNlZEF1dGhTdGF0dXNfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IDgwMi4xeCBwb3J0LWJhc2VkIGF1dGguIHBvcnQgY29uZmlndXJhdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBQb3J0IGlkLgorICogT3V0cHV0OgorICogICAgICBwUG9ydF9hdXRoIC0gVGhlIHN0YXR1cyBvZiA4MDIuMXggcG9ydC4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBnZXQgODAyLjF4IHBvcnQtYmFzZWQgcG9ydCBhdXRoLmluZm9ybWF0aW9uLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfZG90MXhfcG9ydEJhc2VkQXV0aFN0YXR1c19nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfZG90MXhfYXV0aF9zdGF0dXNfdCAqcFBvcnRfYXV0aCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19kb3QxeF9wb3J0QmFzZWREaXJlY3Rpb25fc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IDgwMi4xeCBwb3J0LWJhc2VkIG9wZXJhdGlvbmFsIGRpcmVjdGlvbiBjb25maWd1cmF0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgICAgIC0gUG9ydCBpZC4KKyAqICAgICAgcG9ydF9kaXJlY3Rpb24gIC0gT3BlcmF0aW9uIGRpcmVjdGlvbgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9ET1QxWF9QT1JUQkFTRURPUERJUiAtIDgwMi4xWCBwb3J0LWJhc2VkIG9wZXJhdGlvbiBkaXJlY3Rpb24gZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIFRoZSBvcGVyYXRlIGNvbnRyb2xsZWQgZGlyZWN0aW9uIG9mIDgwMi4xeCBwb3J0LWJhc2VkIG5ldHdvcmsgYWNjZXNzIGNvbnRyb2wgaXMgYXMgZm9sbG93aW5nOgorICogICAgICAtIEJPVEgKKyAqICAgICAgLSBJTgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfZG90MXhfcG9ydEJhc2VkRGlyZWN0aW9uX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19kb3QxeF9kaXJlY3Rpb25fdCBwb3J0X2RpcmVjdGlvbik7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19kb3QxeF9wb3J0QmFzZWREaXJlY3Rpb25fZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IDgwMi4xWCBwb3J0LWJhc2VkIG9wZXJhdGlvbmFsIGRpcmVjdGlvbiBjb25maWd1cmF0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBQb3J0X2RpcmVjdGlvbiAtIE9wZXJhdGlvbiBkaXJlY3Rpb24KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBnZXQgODAyLjF4IHBvcnQtYmFzZWQgb3BlcmF0aW9uYWwgZGlyZWN0aW9uIGluZm9ybWF0aW9uLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfZG90MXhfcG9ydEJhc2VkRGlyZWN0aW9uX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19kb3QxeF9kaXJlY3Rpb25fdCAqcFBvcnRfZGlyZWN0aW9uKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2RvdDF4X21hY0Jhc2VkRW5hYmxlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCA4MDIuMXggbWFjLWJhc2VkIHBvcnQgZW5hYmxlIGNvbmZpZ3VyYXRpb24KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqICAgICAgZW5hYmxlIC0gVGhlIHN0YXR1cyBvZiA4MDIuMXggcG9ydC4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfRU5BQkxFICAgICAgICAgICAgICAgLSBJbnZhbGlkIGVuYWJsZSBpbnB1dC4KKyAqICAgICAgUlRfRVJSX0RPVDFYX01BQ0JBU0VEUE5FTiAgIC0gODAyLjFYIG1hYy1iYXNlZCBlbmFibGUgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIElmIGEgcG9ydCBpcyA4MDIuMXggTUFDIGJhc2VkIG5ldHdvcmsgYWNjZXNzIGNvbnRyb2wgImVuYWJsZWQiLCB0aGUgaW5jb21pbmcgcGFja2V0cyBzaG91bGQKKyAqICAgICAgIGJlIGF1dGhlbnRpY2F0ZWQgc28gcGFja2V0cyBmcm9tIHRoYXQgcG9ydCB3b24ndCBiZSBkcm9wcGVkIG9yIHRyYXBwZWQgdG8gQ1BVLgorICogICAgICBUaGUgc3RhdHVzIG9mIDgwMi4xeCBNQUMtYmFzZWQgbmV0d29yayBhY2Nlc3MgY29udHJvbCBpcyBhcyBmb2xsb3dpbmc6CisgKiAgICAgIC0gRElTQUJMRUQKKyAqICAgICAgLSBFTkFCTEVECisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19kb3QxeF9tYWNCYXNlZEVuYWJsZV9zZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfZW5hYmxlX3QgZW5hYmxlKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2RvdDF4X21hY0Jhc2VkRW5hYmxlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCA4MDIuMXggbWFjLWJhc2VkIHBvcnQgZW5hYmxlIGNvbmZpZ3VyYXRpb24KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqIE91dHB1dDoKKyAqICAgICAgcEVuYWJsZSAtIFRoZSBzdGF0dXMgb2YgODAyLjF4IHBvcnQuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogTm90ZToKKyAqICAgICAgSWYgYSBwb3J0IGlzIDgwMi4xeCBNQUMgYmFzZWQgbmV0d29yayBhY2Nlc3MgY29udHJvbCAiZW5hYmxlZCIsIHRoZSBpbmNvbWluZyBwYWNrZXRzIHNob3VsZAorICogICAgICBiZSBhdXRoZW50aWNhdGVkIHNvIHBhY2tldHMgZnJvbSB0aGF0IHBvcnQgd29udCBiZSBkcm9wcGVkIG9yIHRyYXBwZWQgdG8gQ1BVLgorICogICAgICBUaGUgc3RhdHVzIG9mIDgwMi4xeCBNQUMtYmFzZWQgbmV0d29yayBhY2Nlc3MgY29udHJvbCBpcyBhcyBmb2xsb3dpbmc6CisgKiAgICAgIC0gRElTQUJMRUQKKyAqICAgICAgLSBFTkFCTEVECisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19kb3QxeF9tYWNCYXNlZEVuYWJsZV9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfZW5hYmxlX3QgKnBFbmFibGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfZG90MXhfbWFjQmFzZWRBdXRoTWFjX2FkZAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEFkZCBhbiBhdXRoZW50aWNhdGVkIE1BQyB0byBBU0lDCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQb3J0IGlkLgorICogICAgICBwQXV0aF9tYWMgICAtIFRoZSBhdXRoZW50aWNhdGVkIE1BQy4KKyAqICAgICAgZmlkICAgICAgICAgLSBmaWx0ZXJpbmcgZGF0YWJhc2UuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqICAgICAgUlRfRVJSX0VOQUJMRSAgICAgICAgICAgICAgIC0gSW52YWxpZCBlbmFibGUgaW5wdXQuCisgKiAgICAgIFJUX0VSUl9ET1QxWF9NQUNCQVNFRFBORU4gICAtIDgwMi4xWCBtYWMtYmFzZWQgZW5hYmxlIGVycm9yCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBhZGQgYSA4MDIuMXggYXV0aGVudGljYXRlZCBNQUMgYWRkcmVzcyB0byBwb3J0LiBJZiB0aGUgTUFDIGRvZXMgbm90IGV4aXN0IGluIExVVCwKKyAqICAgICAgdXNlciBjYW4ndCBhZGQgdGhpcyBNQUMgdG8gYXV0aCBzdGF0dXMuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19kb3QxeF9tYWNCYXNlZEF1dGhNYWNfYWRkKHJ0a19wb3J0X3QgcG9ydCwgcnRrX21hY190ICpwQXV0aF9tYWMsIHJ0a19maWRfdCBmaWQpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfZG90MXhfbWFjQmFzZWRBdXRoTWFjX2RlbAorICogRGVzY3JpcHRpb246CisgKiAgICAgIERlbGV0ZSBhbiBhdXRoZW50aWNhdGVkIE1BQyB0byBBU0lDCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiAgICAgIHBBdXRoX21hYyAtIFRoZSBhdXRoZW50aWNhdGVkIE1BQy4KKyAqICAgICAgZmlkIC0gZmlsdGVyaW5nIGRhdGFiYXNlLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9NQUMgICAgICAgICAgLSBJbnZhbGlkIE1BQyBhZGRyZXNzLgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGRlbGV0ZSBhIDgwMi4xeCBhdXRoZW50aWNhdGVkIE1BQyBhZGRyZXNzIHRvIHBvcnQuIEl0IG9ubHkgY2hhbmdlIHRoZSBhdXRoIHN0YXR1cyBvZgorICogICAgICB0aGUgTUFDIGFuZCB3b24ndCBkZWxldGUgaXQgZnJvbSBMVVQuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19kb3QxeF9tYWNCYXNlZEF1dGhNYWNfZGVsKHJ0a19wb3J0X3QgcG9ydCwgcnRrX21hY190ICpwQXV0aF9tYWMsIHJ0a19maWRfdCBmaWQpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfZG90MXhfbWFjQmFzZWREaXJlY3Rpb25fc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IDgwMi4xeCBtYWMtYmFzZWQgb3BlcmF0aW9uYWwgZGlyZWN0aW9uIGNvbmZpZ3VyYXRpb24KKyAqIElucHV0OgorICogICAgICBtYWNfZGlyZWN0aW9uIC0gT3BlcmF0aW9uIGRpcmVjdGlvbgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVyLgorICogICAgICBSVF9FUlJfRE9UMVhfTUFDQkFTRURPUERJUiAgLSA4MDIuMVggbWFjLWJhc2VkIG9wZXJhdGlvbiBkaXJlY3Rpb24gZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIFRoZSBvcGVyYXRlIGNvbnRyb2xsZWQgZGlyZWN0aW9uIG9mIDgwMi4xeCBtYWMtYmFzZWQgbmV0d29yayBhY2Nlc3MgY29udHJvbCBpcyBhcyBmb2xsb3dpbmc6CisgKiAgICAgIC0gQk9USAorICogICAgICAtIElOCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19kb3QxeF9tYWNCYXNlZERpcmVjdGlvbl9zZXQocnRrX2RvdDF4X2RpcmVjdGlvbl90IG1hY19kaXJlY3Rpb24pOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfZG90MXhfbWFjQmFzZWREaXJlY3Rpb25fZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IDgwMi4xeCBtYWMtYmFzZWQgb3BlcmF0aW9uYWwgZGlyZWN0aW9uIGNvbmZpZ3VyYXRpb24KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqIE91dHB1dDoKKyAqICAgICAgcE1hY19kaXJlY3Rpb24gLSBPcGVyYXRpb24gZGlyZWN0aW9uCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBnZXQgODAyLjF4IG1hYy1iYXNlZCBvcGVyYXRpb25hbCBkaXJlY3Rpb24gaW5mb3JtYXRpb24uCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19kb3QxeF9tYWNCYXNlZERpcmVjdGlvbl9nZXQocnRrX2RvdDF4X2RpcmVjdGlvbl90ICpwTWFjX2RpcmVjdGlvbik7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIFNldCA4MDIuMXggZ3Vlc3QgVkxBTiBjb25maWd1cmF0aW9uCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IDgwMi4xeCBtYWMtYmFzZWQgb3BlcmF0aW9uYWwgZGlyZWN0aW9uIGNvbmZpZ3VyYXRpb24KKyAqIElucHV0OgorICogICAgICB2aWQgLSA4MDIuMXggZ3Vlc3QgVkxBTiBJRAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlci4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBvcGVyYXRlIGNvbnRyb2xsZWQgODAyLjF4IGd1ZXN0IFZMQU4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2RvdDF4X2d1ZXN0Vmxhbl9zZXQocnRrX3ZsYW5fdCB2aWQpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfZG90MXhfZ3Vlc3RWbGFuX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCA4MDIuMXggZ3Vlc3QgVkxBTiBjb25maWd1cmF0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwVmlkIC0gODAyLjF4IGd1ZXN0IFZMQU4gSUQKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGdldCA4MDIuMXggZ3Vlc3QgVkxBTiBpbmZvcm1hdGlvbi4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2RvdDF4X2d1ZXN0Vmxhbl9nZXQocnRrX3ZsYW5fdCAqcFZpZCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19kb3QxeF9ndWVzdFZsYW4yQXV0aF9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgODAyLjF4IGd1ZXN0IFZMQU4gdG8gYXV0aCBob3N0IGNvbmZpZ3VyYXRpb24KKyAqIElucHV0OgorICogICAgICBlbmFibGUgLSBUaGUgc3RhdHVzIG9mIGd1ZXN0IFZMQU4gdG8gYXV0aCBob3N0LgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlci4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBvcGVyYXRpb25hbCBkaXJlY3Rpb24gb2YgODAyLjF4IGd1ZXN0IFZMQU4gdG8gYXV0aCBob3N0IGNvbnRyb2wgaXMgYXMgZm9sbG93aW5nOgorICogICAgICAtIEVOQUJMRUQKKyAqICAgICAgLSBESVNBQkxFRAorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfZG90MXhfZ3Vlc3RWbGFuMkF1dGhfc2V0KHJ0a19lbmFibGVfdCBlbmFibGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfZG90MXhfZ3Vlc3RWbGFuMkF1dGhfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IDgwMi4xeCBndWVzdCBWTEFOIHRvIGF1dGggaG9zdCBjb25maWd1cmF0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwRW5hYmxlIC0gVGhlIHN0YXR1cyBvZiBndWVzdCBWTEFOIHRvIGF1dGggaG9zdC4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGdldCA4MDIuMXggZ3Vlc3QgVkxBTiB0byBhdXRoIGhvc3QgaW5mb3JtYXRpb24uCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19kb3QxeF9ndWVzdFZsYW4yQXV0aF9nZXQocnRrX2VuYWJsZV90ICpwRW5hYmxlKTsKKworCisjZW5kaWYgLyogX19SVEtfQVBJX0RPVDFYX0hfXyAqLworCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9lZWUuaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL2VlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NzA5OTgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9lZWUuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqIFB1cnBvc2UgOiBSVEw4MzY3L1JUTDgzNjdDIHN3aXRjaCBoaWdoLWxldmVsIEFQSQorICoKKyAqIEZlYXR1cmUgOiBUaGUgZmlsZSBpbmNsdWRlcyBFRUUgbW9kdWxlIGhpZ2gtbGF5ZXIgQVBJIGRlZmluYXRpb24KKyAqCisgKi8KKworI2lmbmRlZiBfX1JUS19BUElfRUVFX0hfXworI2RlZmluZSBfX1JUS19BUElfRUVFX0hfXworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfZWVlX2luaXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBFRUUgZnVuY3Rpb24gaW5pdGlhbGl6YXRpb24uCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBpcyB1c2VkIHRvIGluaXRpYWxpemUgRUVFIHN0YXR1cy4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2VlZV9pbml0KHZvaWQpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfZWVlX3BvcnRFbmFibGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IGVuYWJsZSBzdGF0dXMgb2YgRUVFIGZ1bmN0aW9uLgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBwb3J0IGlkLgorICogICAgICBlbmFibGUgLSBlbmFibGUgRUVFIHN0YXR1cy4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9FTkFCTEUgLSBJbnZhbGlkIGVuYWJsZSBpbnB1dC4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBzZXQgRUVFIGZ1bmN0aW9uIHRvIHRoZSBzcGVjaWZpYyBwb3J0LgorICogICAgICBUaGUgY29uZmlndXJhdGlvbiBvZiB0aGUgcG9ydCBpcyBhcyBmb2xsb3dpbmc6CisgKiAgICAgIC0gRElTQUJMRQorICogICAgICAtIEVOQUJMRQorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfZWVlX3BvcnRFbmFibGVfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2VuYWJsZV90IGVuYWJsZSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19lZWVfcG9ydEVuYWJsZV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcG9ydCBhZG1pbiBjb25maWd1cmF0aW9uIG9mIHRoZSBzcGVjaWZpYyBwb3J0LgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBQb3J0IGlkLgorICogT3V0cHV0OgorICogICAgICBwRW5hYmxlIC0gQmFjayBwcmVzc3VyZSBzdGF0dXMuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBzZXQgRUVFIGZ1bmN0aW9uIHRvIHRoZSBzcGVjaWZpYyBwb3J0LgorICogICAgICBUaGUgY29uZmlndXJhdGlvbiBvZiB0aGUgcG9ydCBpcyBhcyBmb2xsb3dpbmc6CisgKiAgICAgIC0gRElTQUJMRQorICogICAgICAtIEVOQUJMRQorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfZWVlX3BvcnRFbmFibGVfZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2VuYWJsZV90ICpwRW5hYmxlKTsKKworCisjZW5kaWYgLyogX19SVEtfQVBJX0VFRV9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvaTJjLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9pMmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzdmMDc1Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvaTJjLmgKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogUHVycG9zZSA6IFJUTDgzNjcvUlRMODM2N0Mgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJCisgKgorICogRmVhdHVyZSA6IFRoZSBmaWxlIGluY2x1ZGVzIEkyQyBtb2R1bGUgaGlnaC1sYXllciBBUEkgZGVmaW5hdGlvbgorICoKKyAqLworCisKKyNpZm5kZWYgX19SVEtfQVBJX0kyQ19IX18KKyNkZWZpbmUgX19SVEtfQVBJX0kyQ19IX18KKyNpbmNsdWRlIDxydGtfdHlwZXMuaD4KKworI2RlZmluZSBJMkNfR1BJT19NQVhfR1JPVVAgKDMpCisKK3R5cGVkZWYgZW51bSBydGtfSTJDXzE2Yml0X21vZGVfZXsKKyAgICBJMkNfTFNCXzE2QklUX01PREUgPSAwLAorICAgIEkyQ183MEJfTFNCXzE2QklUX01PREUsCisgICAgSTJDX01vZGVfRU5ECit9cnRrX0kyQ18xNmJpdF9tb2RlX3Q7CisKKwordHlwZWRlZiBlbnVtIHJ0a19JMkNfZ3Bpb19waW5fZXsKKyAgICBJMkNfR1BJT19QSU5fOF85ID0gMCwKKyAgICBJMkNfR1BJT19QSU5fMTVfMTYgLAorICAgIEkyQ19HUElPX1BJTl8zNV8zNiAsCisgICAgSTJDX0dQSU9fUElOX0VORAorfXJ0a19JMkNfZ3Bpb19waW5fdDsKKworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaTJjX2RhdGFfcmVhZAorICogRGVzY3JpcHRpb246CisgKiAgICAgIHJlYWQgaTJjIHNsYXZlIGRldmljZSByZWdpc3Rlci4KKyAqIElucHV0OgorICogICAgICBkZXZpY2VBZGRyICAgLSAgIGFjY2VzcyBTbGF2ZSBkZXZpY2UgYWRkcmVzcworICogICAgICBzbGF2ZVJlZ0FkZHIgLSAgIGFjY2VzcyBTbGF2ZSByZWdpc3RlciBhZGRyZXNzCisgKiBPdXRwdXQ6CisgKiAgICAgIHBSZWdEYXRhICAgICAtICAgcmVhZCBkYXRhCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAgICAgLSBpbnB1dCBwYXJhbWV0ZXIgaXMgbnVsbCBwb2ludGVyCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBhY2Nlc3MgaTJjIHNsYXZlIGFuZCByZWFkIGkyYyBzbGF2ZSBkZXZpY2UgcmVnaXN0ZXIuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19pMmNfZGF0YV9yZWFkKHJ0a191aW50OCBkZXZpY2VBZGRyLCBydGtfdWludDMyIHNsYXZlUmVnQWRkciwgcnRrX3VpbnQzMiAqcFJlZ0RhdGEpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaTJjX2RhdGFfd3JpdGUKKyAqIERlc2NyaXB0aW9uOgorICogICAgICB3cml0ZSBkYXRhIHRvIGkyYyBzbGF2ZSBkZXZpY2UgcmVnaXN0ZXIKKyAqIElucHV0OgorICogICAgICBkZXZpY2VBZGRyICAgLSAgIGFjY2VzcyBTbGF2ZSBkZXZpY2UgYWRkcmVzcworICogICAgICBzbGF2ZVJlZ0FkZHIgLSAgIGFjY2VzcyBTbGF2ZSByZWdpc3RlciBhZGRyZXNzCisgKiAgICAgIHJlZ0RhdGEgICAgICAtICAgZGF0YSB0byBzZXQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBhY2Nlc3MgaTJjIHNsYXZlIGFuZCBzZXR0aW5nIGkyYyBzbGF2ZSBkZXZpY2UgcmVnaXN0ZXIuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19pMmNfZGF0YV93cml0ZShydGtfdWludDggZGV2aWNlQWRkciwgcnRrX3VpbnQzMiBzbGF2ZVJlZ0FkZHIsIHJ0a191aW50MzIgcmVnRGF0YSk7CisKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2kyY19pbml0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgSTJDIHNtYXJ0IGZ1bmN0aW9uIGluaXRpYWxpemF0aW9uLgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBpbml0aWFsaXplIEVFRSBzdGF0dXMuCisgKiAgICAgIG5lZWQgdXNlZCBHUElPIHBpbnMKKyAqICAgICAgT3BlbkRyYWluIGFuZCBjbG9jaworICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfaTJjX2luaXQodm9pZCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19pMmNfbW9kZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgSTJDIGRhdGEgYnl0ZS1vcmRlci4KKyAqIElucHV0OgorICogICAgICBpMmNtb2RlIC0gYnl0ZS1vcmRlciBtb2RlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVyLgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgY2FuIHNldCBJMmMgdHJhZmZpYydzIGJ5dGUtb3JkZXIgLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfaTJjX21vZGVfc2V0KCBydGtfSTJDXzE2Yml0X21vZGVfdCBpMmNtb2RlKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2kyY19tb2RlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBpMmMgdHJhZmZpYyBieXRlLW9yZGVyIHNldHRpbmcuCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwSTJjTW9kZSAtIGkyYyBieXRlLW9yZGVyCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAgICAgLSBpbnB1dCBwYXJhbWV0ZXIgaXMgbnVsbCBwb2ludGVyCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBnZXQgaTJjIHRyYWZmaWMgYnl0ZS1vcmRlciBzZXR0aW5nLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfaTJjX21vZGVfZ2V0KCBydGtfSTJDXzE2Yml0X21vZGVfdCAqIHBJMmNNb2RlKTsKKworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaTJjX2dwaW9QaW5Hcm91cF9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgaTJjIFNEQSAmIFNDTCB1c2VkIEdQSU8gcGlucyBncm91cC4KKyAqIElucHV0OgorICogICAgICBwaW5zX2dyb3VwIC0gR1BJTyBwaW5zIGdyb3VwCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBzZXQgaTJjIHVzZWQgZ3BpbyBwaW5zIGdyb3VwLgorICogICAgICBUaGVyZSBhcmUgdGhyZWUgZ3JvdXAgcGlucyBjb3VsZCBiZSB1c2VkCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19pMmNfZ3Bpb1Bpbkdyb3VwX3NldCggcnRrX0kyQ19ncGlvX3Bpbl90IHBpbnNfZ3JvdXApOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaTJjX2dwaW9QaW5Hcm91cF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgaTJjIFNEQSAmIFNDTCB1c2VkIEdQSU8gcGlucyBncm91cC4KKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBQaW5zX2dyb3VwIC0gR1BJTyBwaW5zIGdyb3VwCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAgICAgLSBpbnB1dCBwYXJhbWV0ZXIgaXMgbnVsbCBwb2ludGVyCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBnZXQgaTJjIHVzZWQgZ3BpbyBwaW5zIGdyb3VwLgorICogICAgICBUaGVyZSBhcmUgdGhyZWUgZ3JvdXAgcGlucyBjb3VsZCBiZSB1c2VkCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19pMmNfZ3Bpb1Bpbkdyb3VwX2dldChydGtfSTJDX2dwaW9fcGluX3QgKiBwUGluc19ncm91cCk7CisKKworCisKKworCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9pZ21wLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9pZ21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA4OGIwYwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL2lnbXAuaApAQCAtMCwwICsxLDc2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiBQdXJwb3NlIDogUlRMODM2Ny9SVEw4MzY3QyBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkKKyAqCisgKiBGZWF0dXJlIDogVGhlIGZpbGUgaW5jbHVkZXMgSUdNUCBtb2R1bGUgaGlnaC1sYXllciBBUEkgZGVmaW5hdGlvbgorICoKKyAqLworCisjaWZuZGVmIF9fUlRLX0FQSV9JR01QX0hfXworI2RlZmluZSBfX1JUS19BUElfSUdNUF9IX18KKworLyoKKyAqIERhdGEgVHlwZSBEZWNsYXJhdGlvbgorICovCit0eXBlZGVmIGVudW0gcnRrX2lnbXBfdHlwZV9lCit7CisgICAgSUdNUF9JUFY0ID0gMCwKKyAgICBJR01QX1BQUE9FX0lQVjQsCisgICAgSUdNUF9NTEQsCisgICAgSUdNUF9QUFBPRV9NTEQsCisgICAgSUdNUF9UWVBFX0VORAorfSBydGtfaWdtcF90eXBlX3Q7CisKK3R5cGVkZWYgZW51bSBydGtfdHJhcF9pZ21wX2FjdGlvbl9lCit7CisgICAgSUdNUF9BQ1RJT05fRk9SV0FSRCA9IDAsCisgICAgSUdNUF9BQ1RJT05fVFJBUDJDUFUsCisgICAgSUdNUF9BQ1RJT05fRFJPUCwKKyAgICBJR01QX0FDVElPTl9BU0lDLAorICAgIElHTVBfQUNUSU9OX0VORAorfSBydGtfaWdtcF9hY3Rpb25fdDsKKwordHlwZWRlZiBlbnVtIHJ0a19pZ21wX3Byb3RvY29sX2UKK3sKKyAgICBQUk9UT0NPTF9JR01QdjEgPSAwLAorICAgIFBST1RPQ09MX0lHTVB2MiwKKyAgICBQUk9UT0NPTF9JR01QdjMsCisgICAgUFJPVE9DT0xfTUxEdjEsCisgICAgUFJPVE9DT0xfTUxEdjIsCisgICAgUFJPVE9DT0xfRU5ECit9IHJ0a19pZ21wX3Byb3RvY29sX3Q7CisKK3R5cGVkZWYgZW51bSBydGtfaWdtcF90YWJsZUZ1bGxBY3Rpb25fZQoreworICAgIElHTVBfVEFCTEVfRlVMTF9GT1JXQVJEID0gMCwKKyAgICBJR01QX1RBQkxFX0ZVTExfRFJPUCwKKyAgICBJR01QX1RBQkxFX0ZVTExfVFJBUCwKKyAgICBJR01QX1RBQkxFX0ZVTExfT1BfRU5ECit9cnRrX2lnbXBfdGFibGVGdWxsQWN0aW9uX3Q7CisKK3R5cGVkZWYgZW51bSBydGtfaWdtcF9jaGVja3N1bUVycm9yQWN0aW9uX2UKK3sKKyAgICBJR01QX0NSQ19FUlJfRFJPUCA9IDAsCisgICAgSUdNUF9DUkNfRVJSX1RSQVAsCisgICAgSUdNUF9DUkNfRVJSX0ZPUldBUkQsCisgICAgSUdNUF9DUkNfRVJSX09QX0VORAorfXJ0a19pZ21wX2NoZWNrc3VtRXJyb3JBY3Rpb25fdDsKKwordHlwZWRlZiBlbnVtIHJ0a19pZ21wX2J5cGFzc0dyb3VwX2UKK3sKKyAgICBJR01QX0JZUEFTU18yMjRfMF8wX1ggPSAwLAorICAgIElHTVBfQllQQVNTXzIyNF8wXzFfWCwKKyAgICBJR01QX0JZUEFTU18yMzlfMjU1XzI1NV9YLAorICAgIElHTVBfQllQQVNTX0lQVjZfMDBYWCwKKyAgICBJR01QX0JZUEFTU19HUk9VUF9FTkQKK31ydGtfaWdtcF9ieXBhc3NHcm91cF90OworCisKK3R5cGVkZWYgc3RydWN0IHJ0a19pZ21wX2R5bmFtaWNSb3V0ZXJQb3J0X3MKK3sKKyAgICBydGtfZW5hYmxlX3QgICAgZHluYW1pY1JvdXRlclBvcnQwVmFsaWQ7CisgICAgcnRrX3BvcnRfdCAgICAgIGR5bmFtaWNSb3V0ZXJQb3J0MDsKKyAgICBydGtfdWludDMyICAgICAgZHluYW1pY1JvdXRlclBvcnQwVGltZXI7CisgICAgcnRrX2VuYWJsZV90ICAgIGR5bmFtaWNSb3V0ZXJQb3J0MVZhbGlkOworICAgIHJ0a19wb3J0X3QgICAgICBkeW5hbWljUm91dGVyUG9ydDE7CisgICAgcnRrX3VpbnQzMiAgICAgIGR5bmFtaWNSb3V0ZXJQb3J0MVRpbWVyOworCit9cnRrX2lnbXBfZHluYW1pY1JvdXRlclBvcnRfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcnRrX2lnbXBfcnhQa3RFbmFibGVfcworeworICAgIHJ0a19lbmFibGVfdCByeFF1ZXJ5OworICAgIHJ0a19lbmFibGVfdCByeFJlcG9ydDsKKyAgICBydGtfZW5hYmxlX3QgcnhMZWF2ZTsKKyAgICBydGtfZW5hYmxlX3QgcnhNUlA7CisgICAgcnRrX2VuYWJsZV90IHJ4TWNhc3Q7Cit9cnRrX2lnbXBfcnhQa3RFbmFibGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcnRrX2lnbXBfZ3JvdXBJbmZvX3MKK3sKKyAgICBydGtfZW5hYmxlX3QgICAgdmFsaWQ7CisgICAgcnRrX3BvcnRtYXNrX3QgIG1lbWJlcjsKKyAgICBydGtfdWludDMyICAgICAgdGltZXJbUlRLX1BPUlRfTUFYXTsKKyAgICBydGtfdWludDMyICAgICAgcmVwb3J0U3VwcEZsYWc7Cit9cnRrX2lnbXBfZ3JvdXBJbmZvX3Q7CisKK3R5cGVkZWYgZW51bSBydGtfaWdtcF9SZXBvcnRMZWF2ZUZ3ZEFjdF9lCit7CisgICAgSUdNUF9SRVBPUlRfTEVBVkVfVE9fUk9VVEVSID0gMCwKKyAgICBJR01QX1JFUE9SVF9MRUFWRV9UT19BTExQT1JULAorICAgIElHTVBfUkVQT1JUX0xFQVZFX1RPX1JPVVRFUl9QT1JUX0FEViwKKyAgICBJR01QX1JFUE9SVF9MRUFWRV9BQ1RfRU5ECit9cnRrX2lnbXBfUmVwb3J0TGVhdmVGd2RBY3RfdDsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2lnbXBfaW5pdAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFRoaXMgQVBJIGVuYWJsZXMgSC9XIElHTVAgYW5kIHNldCBhIGRlZmF1bHQgaW5pdGlhbCBjb25maWd1cmF0aW9uLgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBlbmFibGVzIEgvVyBJR01QIGFuZCBzZXQgYSBkZWZhdWx0IGluaXRpYWwgY29uZmlndXJhdGlvbi4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2lnbXBfaW5pdCh2b2lkKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2lnbXBfc3RhdGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgVGhpcyBBUEkgc2V0IEgvVyBJR01QIHN0YXRlLgorICogSW5wdXQ6CisgKiAgICAgIGVuYWJsZWQgICAgIC0gSC9XIElHTVAgc3RhdGUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAtIEVycm9yIHBhcmFtZXRlcgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgc2V0IEgvVyBJR01QIHN0YXRlLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfaWdtcF9zdGF0ZV9zZXQocnRrX2VuYWJsZV90IGVuYWJsZWQpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaWdtcF9zdGF0ZV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBUaGlzIEFQSSBnZXQgSC9XIElHTVAgc3RhdGUuCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZS4KKyAqIE91dHB1dDoKKyAqICAgICAgcEVuYWJsZWQgICAgICAgIC0gSC9XIElHTVAgc3RhdGUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAtIEVycm9yIHBhcmFtZXRlcgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgc2V0IGN1cnJlbnQgSC9XIElHTVAgc3RhdGUuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19pZ21wX3N0YXRlX2dldChydGtfZW5hYmxlX3QgKnBFbmFibGVkKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2lnbXBfc3RhdGljX3JvdXRlcl9wb3J0X3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIENvbmZpZ3VyZSBzdGF0aWMgcm91dGVyIHBvcnQKKyAqIElucHV0OgorICogICAgICBwUG9ydG1hc2sgICAgLSBTdGF0aWMgUG9ydCBtYXNrCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX01BU0sgICAgICAgLSBFcnJvciBwYXJhbWV0ZXIKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIHNldCBzdGF0aWMgcm91dGVyIHBvcnQKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2lnbXBfc3RhdGljX3JvdXRlcl9wb3J0X3NldChydGtfcG9ydG1hc2tfdCAqcFBvcnRtYXNrKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2lnbXBfc3RhdGljX3JvdXRlcl9wb3J0X2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBzdGF0aWMgcm91dGVyIHBvcnQKKyAqIElucHV0OgorICogICAgICBOb25lLgorICogT3V0cHV0OgorICogICAgICBwUG9ydG1hc2sgICAgICAgLSBTdGF0aWMgcG9ydCBtYXNrCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX01BU0sgICAgICAgLSBFcnJvciBwYXJhbWV0ZXIKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGdldCBzdGF0aWMgcm91dGVyIHBvcnQKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2lnbXBfc3RhdGljX3JvdXRlcl9wb3J0X2dldChydGtfcG9ydG1hc2tfdCAqcFBvcnRtYXNrKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2lnbXBfcHJvdG9jb2xfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgc2V0IElHTVAvTUxEIHByb3RvY29sIGFjdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgIC0gUG9ydCBJRAorICogICAgICBwcm90b2NvbCAgICAtIElHTVAvTUxEIHByb3RvY29sCisgKiAgICAgIGFjdGlvbiAgICAgIC0gUGVyLXBvcnQgYW5kIHBlci1wcm90b2NvbCBJR01QIGFjdGlvbiBzZWV0aW5nCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX01BU0sgICAgICAgLSBFcnJvciBwYXJhbWV0ZXIKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIHNldCBJR01QL01MRCBwcm90b2NvbCBhY3Rpb24KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2lnbXBfcHJvdG9jb2xfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2lnbXBfcHJvdG9jb2xfdCBwcm90b2NvbCwgcnRrX2lnbXBfYWN0aW9uX3QgYWN0aW9uKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2lnbXBfcHJvdG9jb2xfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgc2V0IElHTVAvTUxEIHByb3RvY29sIGFjdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgIC0gUG9ydCBJRAorICogICAgICBwcm90b2NvbCAgICAtIElHTVAvTUxEIHByb3RvY29sCisgKiAgICAgIGFjdGlvbiAgICAgIC0gUGVyLXBvcnQgYW5kIHBlci1wcm90b2NvbCBJR01QIGFjdGlvbiBzZWV0aW5nCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX01BU0sgICAgICAgLSBFcnJvciBwYXJhbWV0ZXIKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIHNldCBJR01QL01MRCBwcm90b2NvbCBhY3Rpb24KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2lnbXBfcHJvdG9jb2xfZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2lnbXBfcHJvdG9jb2xfdCBwcm90b2NvbCwgcnRrX2lnbXBfYWN0aW9uX3QgKnBBY3Rpb24pOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaWdtcF9mYXN0TGVhdmVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgc2V0IElHTVAvTUxEIEZhc3RMZWF2ZSBzdGF0ZQorICogSW5wdXQ6CisgKiAgICAgIHN0YXRlICAgICAgIC0gRU5BQkxFRDogRW5hYmxlIEZhc3RMZWF2ZSwgRElTQUJMRUQ6IGRpc2FibGUgRmFzdExlYXZlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgIC0gRXJyb3IgSW5wdXQKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgc2V0IElHTVAvTUxEIEZhc3RMZWF2ZSBzdGF0ZQorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfaWdtcF9mYXN0TGVhdmVfc2V0KHJ0a19lbmFibGVfdCBzdGF0ZSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19pZ21wX2Zhc3RMZWF2ZV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBnZXQgSUdNUC9NTEQgRmFzdExlYXZlIHN0YXRlCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwU3RhdGUgICAgICAtIEVOQUJMRUQ6IEVuYWJsZSBGYXN0TGVhdmUsIERJU0FCTEVEOiBkaXNhYmxlIEZhc3RMZWF2ZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAgICAtIE5VTEwgcG9pbnRlcgorICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBnZXQgSUdNUC9NTEQgRmFzdExlYXZlIHN0YXRlCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19pZ21wX2Zhc3RMZWF2ZV9nZXQocnRrX2VuYWJsZV90ICpwU3RhdGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaWdtcF9tYXhHcm91cF9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgcGVyIHBvcnQgbXVsdGljYXN0IGdyb3VwIGxlYXJuaW5nIGxpbWl0LgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgIC0gUG9ydCBJRAorICogICAgICBncm91cCAgICAgICAtIFRoZSBudW1iZXIgb2YgbXVsdGljYXN0IGdyb3VwIGxlYXJuaW5nIGxpbWl0LgorICogT3V0cHV0OgorICogICAgICBOb25lLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAtIEVycm9yIFBvcnQgSUQKKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAgICAtIHBhcmFtZXRlciBvdXQgb2YgcmFuZ2UKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgc2V0IHBlciBwb3J0IG11bHRpY2FzdCBncm91cCBsZWFybmluZyBsaW1pdC4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2lnbXBfbWF4R3JvdXBfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3VpbnQzMiBncm91cCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19pZ21wX21heEdyb3VwX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwZXIgcG9ydCBtdWx0aWNhc3QgZ3JvdXAgbGVhcm5pbmcgbGltaXQuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQb3J0IElECisgKiBPdXRwdXQ6CisgKiAgICAgIHBHcm91cCAgICAgIC0gVGhlIG51bWJlciBvZiBtdWx0aWNhc3QgZ3JvdXAgbGVhcm5pbmcgbGltaXQuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgIC0gRXJyb3IgUG9ydCBJRAorICogICAgICBSVF9FUlJfTlVMTF9QT0lOVEVSICAgIC0gTnVsbCBwb2ludGVyCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGdldCBwZXIgcG9ydCBtdWx0aWNhc3QgZ3JvdXAgbGVhcm5pbmcgbGltaXQuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19pZ21wX21heEdyb3VwX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a191aW50MzIgKnBHcm91cCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19pZ21wX2N1cnJlbnRHcm91cF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcGVyIHBvcnQgbXVsdGljYXN0IGdyb3VwIGxlYXJuaW5nIGNvdW50LgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgIC0gUG9ydCBJRAorICogT3V0cHV0OgorICogICAgICBwR3JvdXAgICAgICAtIFRoZSBudW1iZXIgb2YgbXVsdGljYXN0IGdyb3VwIGxlYXJuaW5nIGNvdW50LgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAtIEVycm9yIFBvcnQgSUQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAgICAtIE51bGwgcG9pbnRlcgorICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBnZXQgcGVyIHBvcnQgbXVsdGljYXN0IGdyb3VwIGxlYXJuaW5nIGNvdW50LgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfaWdtcF9jdXJyZW50R3JvdXBfZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3VpbnQzMiAqcEdyb3VwKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2lnbXBfdGFibGVGdWxsQWN0aW9uX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIHNldCBJR01QL01MRCBUYWJsZSBGdWxsIEFjdGlvbgorICogSW5wdXQ6CisgKiAgICAgIGFjdGlvbiAgICAgIC0gVGFibGUgRnVsbCBBY3Rpb24KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgLSBFcnJvciBJbnB1dAorICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfaWdtcF90YWJsZUZ1bGxBY3Rpb25fc2V0KHJ0a19pZ21wX3RhYmxlRnVsbEFjdGlvbl90IGFjdGlvbik7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19pZ21wX3RhYmxlRnVsbEFjdGlvbl9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBnZXQgSUdNUC9NTEQgVGFibGUgRnVsbCBBY3Rpb24KKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBBY3Rpb24gICAgIC0gVGFibGUgRnVsbCBBY3Rpb24KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgICAgLSBOdWxsIHBvaW50ZXIKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2lnbXBfdGFibGVGdWxsQWN0aW9uX2dldChydGtfaWdtcF90YWJsZUZ1bGxBY3Rpb25fdCAqcEFjdGlvbik7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19pZ21wX2NoZWNrc3VtRXJyb3JBY3Rpb25fc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgc2V0IElHTVAvTUxEIENoZWNrc3VtIEVycm9yIEFjdGlvbgorICogSW5wdXQ6CisgKiAgICAgIGFjdGlvbiAgICAgIC0gQ2hlY2tzdW0gZXJyb3IgQWN0aW9uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgIC0gRXJyb3IgSW5wdXQKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2lnbXBfY2hlY2tzdW1FcnJvckFjdGlvbl9zZXQocnRrX2lnbXBfY2hlY2tzdW1FcnJvckFjdGlvbl90IGFjdGlvbik7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19pZ21wX2NoZWNrc3VtRXJyb3JBY3Rpb25fZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgZ2V0IElHTVAvTUxEIENoZWNrc3VtIEVycm9yIEFjdGlvbgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcEFjdGlvbiAgICAgLSBDaGVja3N1bSBlcnJvciBBY3Rpb24KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgICAgLSBOdWxsIHBvaW50ZXIKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2lnbXBfY2hlY2tzdW1FcnJvckFjdGlvbl9nZXQocnRrX2lnbXBfY2hlY2tzdW1FcnJvckFjdGlvbl90ICpwQWN0aW9uKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2lnbXBfbGVhdmVUaW1lcl9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBzZXQgSUdNUC9NTEQgTGVhdmUgdGltZXIKKyAqIElucHV0OgorICogICAgICB0aW1lciAgICAgICAtIExlYXZlIHRpbWVyCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgIC0gRXJyb3IgSW5wdXQKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2lnbXBfbGVhdmVUaW1lcl9zZXQocnRrX3VpbnQzMiB0aW1lcik7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19pZ21wX2xlYXZlVGltZXJfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgZ2V0IElHTVAvTUxEIExlYXZlIHRpbWVyCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwVGltZXIgICAgICAtIExlYXZlIFRpbWVyLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAgICAtIE51bGwgcG9pbnRlcgorICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfaWdtcF9sZWF2ZVRpbWVyX2dldChydGtfdWludDMyICpwVGltZXIpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaWdtcF9xdWVyeUludGVydmFsX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIHNldCBJR01QL01MRCBRdWVyeSBJbnRlcnZhbAorICogSW5wdXQ6CisgKiAgICAgIGludGVydmFsICAgICAtIFF1ZXJ5IEludGVydmFsCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgIC0gRXJyb3IgSW5wdXQKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2lnbXBfcXVlcnlJbnRlcnZhbF9zZXQocnRrX3VpbnQzMiBpbnRlcnZhbCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19pZ21wX3F1ZXJ5SW50ZXJ2YWxfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgZ2V0IElHTVAvTUxEIFF1ZXJ5IEludGVydmFsCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZS4KKyAqIE91dHB1dDoKKyAqICAgICAgcEludGVydmFsICAgLSBRdWVyeSBJbnRlcnZhbAorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAgICAtIE51bGwgcG9pbnRlcgorICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfaWdtcF9xdWVyeUludGVydmFsX2dldChydGtfdWludDMyICpwSW50ZXJ2YWwpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaWdtcF9yb2J1c3RuZXNzX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIHNldCBJR01QL01MRCBSb2J1c3RuZXNzIHZhbHVlCisgKiBJbnB1dDoKKyAqICAgICAgcm9idXN0bmVzcyAgICAgLSBSb2J1c3RuZXNzIHZhbHVlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgIC0gRXJyb3IgSW5wdXQKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2lnbXBfcm9idXN0bmVzc19zZXQocnRrX3VpbnQzMiByb2J1c3RuZXNzKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2lnbXBfcm9idXN0bmVzc19nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBnZXQgSUdNUC9NTEQgUm9idXN0bmVzcyB2YWx1ZQorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcFJvYnVzdG5lc3MgICAgIC0gUm9idXN0bmVzcyB2YWx1ZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgICAgLSBOdWxsIHBvaW50ZXIKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2lnbXBfcm9idXN0bmVzc19nZXQocnRrX3VpbnQzMiAqcFJvYnVzdG5lc3MpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaWdtcF9keW5hbWljUm91dGVyUm9ydEFsbG93X3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIENvbmZpZ3VyZSBkeW5hbWljIHJvdXRlciBwb3J0IGFsbG93IG9wdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHBQb3J0bWFzayAgICAtIER5bmFtaWMgUG9ydCBhbGxvdyBtYXNrCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX01BU0sgICAgICAgLSBFcnJvciBwYXJhbWV0ZXIKKyAqIE5vdGU6CisgKgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfaWdtcF9keW5hbWljUm91dGVyUG9ydEFsbG93X3NldChydGtfcG9ydG1hc2tfdCAqcFBvcnRtYXNrKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2lnbXBfZHluYW1pY1JvdXRlclJvcnRBbGxvd19nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgZHluYW1pYyByb3V0ZXIgcG9ydCBhbGxvdyBvcHRpb24KKyAqIElucHV0OgorICogICAgICBOb25lLgorICogT3V0cHV0OgorICogICAgICBwUG9ydG1hc2sgICAgLSBEeW5hbWljIFBvcnQgYWxsb3cgbWFzaworICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9NQVNLICAgICAgIC0gRXJyb3IgcGFyYW1ldGVyCisgKiBOb3RlOgorICoKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2lnbXBfZHluYW1pY1JvdXRlclBvcnRBbGxvd19nZXQocnRrX3BvcnRtYXNrX3QgKnBQb3J0bWFzayk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19pZ21wX2R5bmFtaWNSb3V0ZXJQb3J0X2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBkeW5hbWljIHJvdXRlciBwb3J0CisgKiBJbnB1dDoKKyAqICAgICAgTm9uZS4KKyAqIE91dHB1dDoKKyAqICAgICAgcER5bmFtaWNSb3V0ZXJQb3J0ICAgIC0gRHluYW1pYyBSb3V0ZXIgUG9ydAorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfTlVMTF9QT0lOVEVSICAgIC0gTnVsbCBwb2ludGVyCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX01BU0sgICAgICAgLSBFcnJvciBwYXJhbWV0ZXIKKyAqIE5vdGU6CisgKgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfaWdtcF9keW5hbWljUm91dGVyUG9ydF9nZXQocnRrX2lnbXBfZHluYW1pY1JvdXRlclBvcnRfdCAqcER5bmFtaWNSb3V0ZXJQb3J0KTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2lnbXBfc3VwcHJlc3Npb25FbmFibGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQ29uZmlndXJlIElHTVB2MS92MiAmIE1MRHYxIFJlcG9ydC9MZWF2ZS9Eb25lIHN1cHByZXNzaW9uCisgKiBJbnB1dDoKKyAqICAgICAgcmVwb3J0U3VwcHJlc3Npb24gICAtIFJlcG9ydCBzdXBwcmVzc2lvbgorICogICAgICBsZWF2ZVN1cHByZXNzaW9uICAgIC0gTGVhdmUgc3VwcHJlc3Npb24KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAtIEVycm9yIElucHV0CisgKiBOb3RlOgorICoKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2lnbXBfc3VwcHJlc3Npb25FbmFibGVfc2V0KHJ0a19lbmFibGVfdCByZXBvcnRTdXBwcmVzc2lvbiwgcnRrX2VuYWJsZV90IGxlYXZlU3VwcHJlc3Npb24pOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaWdtcF9zdXBwcmVzc2lvbkVuYWJsZV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgSUdNUHYxL3YyICYgTUxEdjEgUmVwb3J0L0xlYXZlL0RvbmUgc3VwcHJlc3Npb24KKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBSZXBvcnRTdXBwcmVzc2lvbiAgLSBSZXBvcnQgc3VwcHJlc3Npb24KKyAqICAgICAgcExlYXZlU3VwcHJlc3Npb24gICAtIExlYXZlIHN1cHByZXNzaW9uCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgICAgLSBOdWxsIHBvaW50ZXIKKyAqIE5vdGU6CisgKgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfaWdtcF9zdXBwcmVzc2lvbkVuYWJsZV9nZXQocnRrX2VuYWJsZV90ICpwUmVwb3J0U3VwcHJlc3Npb24sIHJ0a19lbmFibGVfdCAqcExlYXZlU3VwcHJlc3Npb24pOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaWdtcF9wb3J0UnhQa3RFbmFibGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQ29uZmlndXJlIElHTVAvTUxEIFJYIFBhY2tldCBjb25maWd1cmF0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAtIFBvcnQgSUQKKyAqICAgICAgcFJ4Q2ZnICAgICAtIFJYIFBhY2tldCBDb25maWd1cmF0aW9uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgLSBFcnJvciBJbnB1dAorICogICAgICBSVF9FUlJfTlVMTF9QT0lOVEVSICAgIC0gTnVsbCBwb2ludGVyCisgKiBOb3RlOgorICoKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2lnbXBfcG9ydFJ4UGt0RW5hYmxlX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19pZ21wX3J4UGt0RW5hYmxlX3QgKnBSeENmZyk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19pZ21wX3BvcnRSeFBrdEVuYWJsZV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgSUdNUC9NTEQgUlggUGFja2V0IGNvbmZpZ3VyYXRpb24KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgIC0gUG9ydCBJRAorICogICAgICBwUnhDZmcgICAgIC0gUlggUGFja2V0IENvbmZpZ3VyYXRpb24KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAtIEVycm9yIElucHV0CisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgICAgLSBOdWxsIHBvaW50ZXIKKyAqIE5vdGU6CisgKgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfaWdtcF9wb3J0UnhQa3RFbmFibGVfZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2lnbXBfcnhQa3RFbmFibGVfdCAqcFJ4Q2ZnKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2lnbXBfZ3JvdXBJbmZvX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBJR01QL01MRCBHcm91cCBkYXRhYmFzZQorICogSW5wdXQ6CisgKiAgICAgIGluZGVzICAgICAgIC0gSW5kZXggKDB+MjU1KQorICogT3V0cHV0OgorICogICAgICBwR3JvdXAgICAgICAtIEdyb3VwIGRhdGFiYXNlIGluZm9ybWF0aW9uLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgIC0gRXJyb3IgSW5wdXQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAgICAtIE51bGwgcG9pbnRlcgorICogTm90ZToKKyAqCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19pZ21wX2dyb3VwSW5mb19nZXQocnRrX3VpbnQzMiBpbmRleCwgcnRrX2lnbXBfZ3JvdXBJbmZvX3QgKnBHcm91cCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19pZ21wX1JlcG9ydExlYXZlRndkQWN0aW9uX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBSZXBvcnQgTGVhdmUgcGFja2V0IGZvcndhcmRpbmcgYWN0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgYWN0aW9uICAgICAgLSBBY3Rpb24KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAtIEVycm9yIElucHV0CisgKiBOb3RlOgorICoKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2lnbXBfUmVwb3J0TGVhdmVGd2RBY3Rpb25fc2V0KHJ0a19pZ21wX1JlcG9ydExlYXZlRndkQWN0X3QgYWN0aW9uKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2lnbXBfUmVwb3J0TGVhdmVGd2RBY3Rpb25fZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFJlcG9ydCBMZWF2ZSBwYWNrZXQgZm9yd2FyZGluZyBhY3Rpb24KKyAqIElucHV0OgorICogICAgICBhY3Rpb24gICAgICAtIEFjdGlvbgorICogT3V0cHV0OgorICogICAgICBOb25lLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgIC0gRXJyb3IgSW5wdXQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAgICAtIE51bGwgUG9pbnRlcgorICogTm90ZToKKyAqCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19pZ21wX1JlcG9ydExlYXZlRndkQWN0aW9uX2dldChydGtfaWdtcF9SZXBvcnRMZWF2ZUZ3ZEFjdF90ICpwQWN0aW9uKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2lnbXBfZHJvcExlYXZlWmVyb0VuYWJsZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgdGhlIGZ1bmN0aW9uIG9mIGRyb3BwcGluZyBMZWF2ZSBwYWNrZXQgd2l0aCBncm91cCBJUCA9IDAuMC4wLjAKKyAqIElucHV0OgorICogICAgICBlbmFibGVkICAgICAgLSBBY3Rpb24gMTogZHJvcCwgMDpwYXNzCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgLSBFcnJvciBJbnB1dAorICogTm90ZToKKyAqCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19pZ21wX2Ryb3BMZWF2ZVplcm9FbmFibGVfc2V0KHJ0a19lbmFibGVfdCBlbmFibGVkKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2lnbXBfZHJvcExlYXZlWmVyb0VuYWJsZV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgdGhlIGZ1bmN0aW9uIG9mIGRyb3BwcGluZyBMZWF2ZSBwYWNrZXQgd2l0aCBncm91cCBJUCA9IDAuMC4wLjAKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBFbmFibGVkLiAgIC0gQWN0aW9uIDE6IGRyb3AsIDA6cGFzcworICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgIC0gRXJyb3IgSW5wdXQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAgICAtIE51bGwgUG9pbnRlcgorICogTm90ZToKKyAqCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19pZ21wX2Ryb3BMZWF2ZVplcm9FbmFibGVfZ2V0KHJ0a19lbmFibGVfdCAqcEVuYWJsZWQpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaWdtcF9ieXBhc3NHcm91cFJhbmdlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBCeXBhc3MgZ3JvdXAKKyAqIElucHV0OgorICogICAgICBncm91cCAgICAgICAtIGJ5cGFzc2VkIGdyb3VwCisgKiAgICAgIGVuYWJsZWQgICAgIC0gZW5hYmxlZCAxOiBCeXBhc3NlZCwgMDogbm90IGJ5cGFzcworICogT3V0cHV0OgorICogICAgICBOb25lLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgIC0gRXJyb3IgSW5wdXQKKyAqIE5vdGU6CisgKgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfaWdtcF9ieXBhc3NHcm91cFJhbmdlX3NldChydGtfaWdtcF9ieXBhc3NHcm91cF90IGdyb3VwLCBydGtfZW5hYmxlX3QgZW5hYmxlZCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19pZ21wX2J5cGFzc0dyb3VwUmFuZ2VfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgZ2V0IEJ5cGFzcyBncm91cAorICogSW5wdXQ6CisgKiAgICAgIGdyb3VwICAgICAgIC0gYnlwYXNzZWQgZ3JvdXAKKyAqIE91dHB1dDoKKyAqICAgICAgcEVuYWJsZSAgICAgLSBlbmFibGVkIDE6IEJ5cGFzc2VkLCAwOiBub3QgYnlwYXNzCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgLSBFcnJvciBJbnB1dAorICogICAgICBSVF9FUlJfTlVMTF9QT0lOVEVSICAgIC0gTnVsbCBQb2ludGVyCisgKiBOb3RlOgorICoKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2lnbXBfYnlwYXNzR3JvdXBSYW5nZV9nZXQocnRrX2lnbXBfYnlwYXNzR3JvdXBfdCBncm91cCwgcnRrX2VuYWJsZV90ICpwRW5hYmxlKTsKKworI2VuZGlmIC8qIF9fUlRLX0FQSV9JR01QX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvaW50ZXJydXB0LmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9pbnRlcnJ1cHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjY4OWViCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvaW50ZXJydXB0LmgKQEAgLTAsMCArMSwyNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogUHVycG9zZSA6IFJUTDgzNjcvUlRMODM2N0Mgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJCisgKgorICogRmVhdHVyZSA6IFRoZSBmaWxlIGluY2x1ZGVzIEludGVycnVwdCBtb2R1bGUgaGlnaC1sYXllciBBUEkgZGVmaW5hdGlvbgorICoKKyAqLworCisjaWZuZGVmIF9fUlRLX0FQSV9JTlRFUlJVUFRfSF9fCisjZGVmaW5lIF9fUlRLX0FQSV9JTlRFUlJVUFRfSF9fCisKKworLyoKKyAqIERhdGEgVHlwZSBEZWNsYXJhdGlvbgorICovCisjZGVmaW5lIFJUS19NQVhfTlVNX09GX0lOVEVSUlVQVF9UWVBFICAgICAgICAgICAgICAgMQorCisKK3R5cGVkZWYgc3RydWN0ICBydGtfaW50X3N0YXR1c19zCit7CisgICAgcnRrX3VpbnQxNiB2YWx1ZVtSVEtfTUFYX05VTV9PRl9JTlRFUlJVUFRfVFlQRV07Cit9IHJ0a19pbnRfc3RhdHVzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHJ0a19pbnRfaW5mb19zCit7CisgICAgcnRrX3BvcnRtYXNrX3QgIHBvcnRNYXNrOworICAgIHJ0a191aW50MzIgICAgICBtZXRlck1hc2s7CisgICAgcnRrX3VpbnQzMiAgICAgIHN5c3RlbUxlYXJuT3ZlcjsKK31ydGtfaW50X2luZm9fdDsKKwordHlwZWRlZiBlbnVtIHJ0a19pbnRfdHlwZV9lCit7CisgICAgSU5UX1RZUEVfTElOS19TVEFUVVMgPSAwLAorICAgIElOVF9UWVBFX01FVEVSX0VYQ0VFRCwKKyAgICBJTlRfVFlQRV9MRUFSTl9MSU1JVCwKKyAgICBJTlRfVFlQRV9MSU5LX1NQRUVELAorICAgIElOVF9UWVBFX0NPTkdFU1QsCisgICAgSU5UX1RZUEVfR1JFRU5fRkVBVFVSRSwKKyAgICBJTlRfVFlQRV9MT09QX0RFVEVDVCwKKyAgICBJTlRfVFlQRV84MDUxLAorICAgIElOVF9UWVBFX0NBQkxFX0RJQUcsCisgICAgSU5UX1RZUEVfQUNMLAorICAgIElOVF9UWVBFX1JFU0VSVkVELCAvKiBVbnVzZWQgKi8KKyAgICBJTlRfVFlQRV9TTElFTlQsCisgICAgSU5UX1RZUEVfRU5ECit9cnRrX2ludF90eXBlX3Q7CisKK3R5cGVkZWYgZW51bSBydGtfaW50X2FkdlR5cGVfZQoreworICAgIEFEVl9MMl9MRUFSTl9QT1JUX01BU0sgPSAwLAorICAgIEFEVl9TUEVFRF9DSEFOR0VfUE9SVF9NQVNLLAorICAgIEFEVl9TUEVDSUFMX0NPTkdFU1RJT05fUE9SVF9NQVNLLAorICAgIEFEVl9QT1JUX0xJTktET1dOX1BPUlRfTUFTSywKKyAgICBBRFZfUE9SVF9MSU5LVVBfUE9SVF9NQVNLLAorICAgIEFEVl9NRVRFUl9FWENFRURfTUFTSywKKyAgICBBRFZfUkxEUF9MT09QRUQsCisgICAgQURWX1JMRFBfUkVMRUFTRUQsCisgICAgQURWX0VORCwKK30gcnRrX2ludF9hZHZUeXBlX3Q7CisKK3R5cGVkZWYgZW51bSBydGtfaW50X3BvbGFyaXR5X2UKK3sKKyAgICBJTlRfUE9MQVJfSElHSCA9IDAsCisgICAgSU5UX1BPTEFSX0xPVywKKyAgICBJTlRfUE9MQVJfRU5ECit9IHJ0a19pbnRfcG9sYXJpdHlfdDsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2ludF9wb2xhcml0eV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgaW50ZXJydXB0IHBvbGFyaXR5IGNvbmZpZ3VyYXRpb24uCisgKiBJbnB1dDoKKyAqICAgICAgdHlwZSAtIEludGVycnVwdHBvbGFyaXR5IHR5cGUuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIHNldCBpbnRlcnJ1cHQgcG9sYXJpdHkgY29uZmlndXJhdGlvbi4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2ludF9wb2xhcml0eV9zZXQocnRrX2ludF9wb2xhcml0eV90IHR5cGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaW50X3BvbGFyaXR5X2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBpbnRlcnJ1cHQgcG9sYXJpdHkgY29uZmlndXJhdGlvbi4KKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBUeXBlIC0gSW50ZXJydXB0cG9sYXJpdHkgdHlwZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGdldCBpbnRlcnJ1cHQgcG9sYXJpdHkgY29uZmlndXJhdGlvbi4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2ludF9wb2xhcml0eV9nZXQocnRrX2ludF9wb2xhcml0eV90ICpwVHlwZSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19pbnRfY29udHJvbF9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgaW50ZXJydXB0IHRyaWdnZXIgc3RhdHVzIGNvbmZpZ3VyYXRpb24uCisgKiBJbnB1dDoKKyAqICAgICAgdHlwZSAtIEludGVycnVwdCB0eXBlLgorICogICAgICBlbmFibGUgLSBJbnRlcnJ1cHQgc3RhdHVzLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiAgICAgIFJUX0VSUl9FTkFCTEUgICAgICAgLSBJbnZhbGlkIGVuYWJsZSBpbnB1dC4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIHNldCBpbnRlcnJ1cHQgc3RhdHVzIGNvbmZpZ3VyYXRpb24uCisgKiAgICAgIFRoZSBpbnRlcnJ1cHQgdHJpZ2dlciBzdGF0dXMgaXMgc2hvd24gaW4gdGhlIGZvbGxvd2luZzoKKyAqICAgICAgLSBJTlRfVFlQRV9MSU5LX1NUQVRVUworICogICAgICAtIElOVF9UWVBFX01FVEVSX0VYQ0VFRAorICogICAgICAtIElOVF9UWVBFX0xFQVJOX0xJTUlUCisgKiAgICAgIC0gSU5UX1RZUEVfTElOS19TUEVFRAorICogICAgICAtIElOVF9UWVBFX0NPTkdFU1QKKyAqICAgICAgLSBJTlRfVFlQRV9HUkVFTl9GRUFUVVJFCisgKiAgICAgIC0gSU5UX1RZUEVfTE9PUF9ERVRFQ1QKKyAqICAgICAgLSBJTlRfVFlQRV84MDUxLAorICogICAgICAtIElOVF9UWVBFX0NBQkxFX0RJQUcsCisgKiAgICAgIC0gSU5UX1RZUEVfQUNMLAorICogICAgICAtIElOVF9UWVBFX1NMSUVOVAorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfaW50X2NvbnRyb2xfc2V0KHJ0a19pbnRfdHlwZV90IHR5cGUsIHJ0a19lbmFibGVfdCBlbmFibGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaW50X2NvbnRyb2xfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGludGVycnVwdCB0cmlnZ2VyIHN0YXR1cyBjb25maWd1cmF0aW9uLgorICogSW5wdXQ6CisgKiAgICAgIHR5cGUgLSBJbnRlcnJ1cHQgdHlwZS4KKyAqIE91dHB1dDoKKyAqICAgICAgcEVuYWJsZSAtIEludGVycnVwdCBzdGF0dXMuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBnZXQgaW50ZXJydXB0IHN0YXR1cyBjb25maWd1cmF0aW9uLgorICogICAgICBUaGUgaW50ZXJydXB0IHRyaWdnZXIgc3RhdHVzIGlzIHNob3duIGluIHRoZSBmb2xsb3dpbmc6CisgKiAgICAgIC0gSU5UX1RZUEVfTElOS19TVEFUVVMKKyAqICAgICAgLSBJTlRfVFlQRV9NRVRFUl9FWENFRUQKKyAqICAgICAgLSBJTlRfVFlQRV9MRUFSTl9MSU1JVAorICogICAgICAtIElOVF9UWVBFX0xJTktfU1BFRUQKKyAqICAgICAgLSBJTlRfVFlQRV9DT05HRVNUCisgKiAgICAgIC0gSU5UX1RZUEVfR1JFRU5fRkVBVFVSRQorICogICAgICAtIElOVF9UWVBFX0xPT1BfREVURUNUCisgKiAgICAgIC0gSU5UX1RZUEVfODA1MSwKKyAqICAgICAgLSBJTlRfVFlQRV9DQUJMRV9ESUFHLAorICogICAgICAtIElOVF9UWVBFX0FDTCwKKyAqICAgICAgLSBJTlRfVFlQRV9TTElFTlQKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2ludF9jb250cm9sX2dldChydGtfaW50X3R5cGVfdCB0eXBlLCBydGtfZW5hYmxlX3QqIHBFbmFibGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaW50X3N0YXR1c19zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgaW50ZXJydXB0IHRyaWdnZXIgc3RhdHVzIHRvIGNsZWFuLgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcFN0YXR1c01hc2sgLSBJbnRlcnJ1cHQgc3RhdHVzIGJpdCBtYXNrLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBjbGVhbiBpbnRlcnJ1cHQgdHJpZ2dlciBzdGF0dXMgd2hlbiBpbnRlcnJ1cHQgaGFwcGVuZWQuCisgKiAgICAgIFRoZSBpbnRlcnJ1cHQgdHJpZ2dlciBzdGF0dXMgaXMgc2hvd24gaW4gdGhlIGZvbGxvd2luZzoKKyAqICAgICAgLSBJTlRfVFlQRV9MSU5LX1NUQVRVUyAgICAodmFsdWVbMF0gKEJpdDApKQorICogICAgICAtIElOVF9UWVBFX01FVEVSX0VYQ0VFRCAgICh2YWx1ZVswXSAoQml0MSkpCisgKiAgICAgIC0gSU5UX1RZUEVfTEVBUk5fTElNSVQgICAgKHZhbHVlWzBdIChCaXQyKSkKKyAqICAgICAgLSBJTlRfVFlQRV9MSU5LX1NQRUVEICAgICAodmFsdWVbMF0gKEJpdDMpKQorICogICAgICAtIElOVF9UWVBFX0NPTkdFU1QgICAgICAgICh2YWx1ZVswXSAoQml0NCkpCisgKiAgICAgIC0gSU5UX1RZUEVfR1JFRU5fRkVBVFVSRSAgKHZhbHVlWzBdIChCaXQ1KSkKKyAqICAgICAgLSBJTlRfVFlQRV9MT09QX0RFVEVDVCAgICAodmFsdWVbMF0gKEJpdDYpKQorICogICAgICAtIElOVF9UWVBFXzgwNTEgICAgICAgICAgICh2YWx1ZVswXSAoQml0NykpCisgKiAgICAgIC0gSU5UX1RZUEVfQ0FCTEVfRElBRyAgICAgKHZhbHVlWzBdIChCaXQ4KSkKKyAqICAgICAgLSBJTlRfVFlQRV9BQ0wgICAgICAgICAgICAodmFsdWVbMF0gKEJpdDkpKQorICogICAgICAtIElOVF9UWVBFX1NMSUVOVCAgICAgICAgICh2YWx1ZVswXSAoQml0MTEpKQorICogICAgICBUaGUgc3RhdHVzIHdpbGwgYmUgY2xlYXJlZCBhZnRlciBleGVjdXRlIHRoaXMgQVBJLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfaW50X3N0YXR1c19zZXQocnRrX2ludF9zdGF0dXNfdCAqcFN0YXR1c01hc2spOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaW50X3N0YXR1c19nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgaW50ZXJydXB0IHRyaWdnZXIgc3RhdHVzLgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcFN0YXR1c01hc2sgLSBJbnRlcnJ1cHQgc3RhdHVzIGJpdCBtYXNrLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IGludGVycnVwdCB0cmlnZ2VyIHN0YXR1cyB3aGVuIGludGVycnVwdCBoYXBwZW5lZC4KKyAqICAgICAgVGhlIGludGVycnVwdCB0cmlnZ2VyIHN0YXR1cyBpcyBzaG93biBpbiB0aGUgZm9sbG93aW5nOgorICogICAgICAtIElOVF9UWVBFX0xJTktfU1RBVFVTICAgICh2YWx1ZVswXSAoQml0MCkpCisgKiAgICAgIC0gSU5UX1RZUEVfTUVURVJfRVhDRUVEICAgKHZhbHVlWzBdIChCaXQxKSkKKyAqICAgICAgLSBJTlRfVFlQRV9MRUFSTl9MSU1JVCAgICAodmFsdWVbMF0gKEJpdDIpKQorICogICAgICAtIElOVF9UWVBFX0xJTktfU1BFRUQgICAgICh2YWx1ZVswXSAoQml0MykpCisgKiAgICAgIC0gSU5UX1RZUEVfQ09OR0VTVCAgICAgICAgKHZhbHVlWzBdIChCaXQ0KSkKKyAqICAgICAgLSBJTlRfVFlQRV9HUkVFTl9GRUFUVVJFICAodmFsdWVbMF0gKEJpdDUpKQorICogICAgICAtIElOVF9UWVBFX0xPT1BfREVURUNUICAgICh2YWx1ZVswXSAoQml0NikpCisgKiAgICAgIC0gSU5UX1RZUEVfODA1MSAgICAgICAgICAgKHZhbHVlWzBdIChCaXQ3KSkKKyAqICAgICAgLSBJTlRfVFlQRV9DQUJMRV9ESUFHICAgICAodmFsdWVbMF0gKEJpdDgpKQorICogICAgICAtIElOVF9UWVBFX0FDTCAgICAgICAgICAgICh2YWx1ZVswXSAoQml0OSkpCisgKiAgICAgIC0gSU5UX1RZUEVfU0xJRU5UICAgICAgICAgKHZhbHVlWzBdIChCaXQxMSkpCisgKgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfaW50X3N0YXR1c19nZXQocnRrX2ludF9zdGF0dXNfdCogcFN0YXR1c01hc2spOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaW50X2FkdmFuY2VJbmZvX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBpbnRlcnJ1cHQgYWR2YW5jZWQgaW5mb3JtYXRpb24uCisgKiBJbnB1dDoKKyAqICAgICAgYWR2X3R5cGUgLSBBZHZhbmNlZCBpbnRlcnJ1cHQgdHlwZS4KKyAqIE91dHB1dDoKKyAqICAgICAgaW5mbyAtIEluZm9ybWF0aW9uIHBlciB0eXBlLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgY2FuIGdldCBhZHZhbmNlZCBpbmZvcm1hdGlvbiB3aGVuIGludGVycnVwdCBoYXBwZW5lZC4KKyAqICAgICAgVGhlIHN0YXR1cyB3aWxsIGJlIGNsZWFyZWQgYWZ0ZXIgZXhlY3V0ZSB0aGlzIEFQSS4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2ludF9hZHZhbmNlSW5mb19nZXQocnRrX2ludF9hZHZUeXBlX3QgYWR2X3R5cGUsIHJ0a19pbnRfaW5mb190KiBpbmZvKTsKKworCisjZW5kaWYgLyogX19SVEtfQVBJX0lOVEVSUlVQVF9IX18gKi8KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL2wyLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9sMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwY2NkYmUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9sMi5oCkBAIC0wLDAgKzEsMTE4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiBQdXJwb3NlIDogUlRMODM2Ny9SVEw4MzY3QyBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkKKyAqCisgKiBGZWF0dXJlIDogVGhlIGZpbGUgaW5jbHVkZXMgTDIgbW9kdWxlIGhpZ2gtbGF5ZXIgQVBJIGRlZmluYXRpb24KKyAqCisgKi8KKworI2lmbmRlZiBfX1JUS19BUElfTDJfSF9fCisjZGVmaW5lIF9fUlRLX0FQSV9MMl9IX18KKworCisvKgorICogRGF0YSBUeXBlIERlY2xhcmF0aW9uCisgKi8KKyNkZWZpbmUgUlRLX01BWF9OVU1fT0ZfTEVBUk5fTElNSVQgICAgICAgICAgICAgICAgICAocnRrX3N3aXRjaF9tYXhMdXRBZGRyTnVtYmVyX2dldCgpKQorCisjZGVmaW5lIFJUS19NQUNfQUREUl9MRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBSVEtfTUFYX0xVVF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgIChSVEtfTUFYX05VTV9PRl9MRUFSTl9MSU1JVCkKKyNkZWZpbmUgUlRLX01BWF9MVVRfQUREUl9JRCAgICAgICAgICAgICAgICAgICAgICAgICAoUlRLX01BWF9MVVRfQUREUkVTUyAtIDEpCisKK3R5cGVkZWYgcnRrX3VpbnQzMiBydGtfbDJfYWdlX3RpbWVfdDsKKwordHlwZWRlZiBlbnVtIHJ0a19sMl9mbG9vZF90eXBlX2UKK3sKKyAgICBGTE9PRF9VTktOT1dOREEgPSAwLAorICAgIEZMT09EX1VOS05PV05NQywKKyAgICBGTE9PRF9CQywKKyAgICBGTE9PRF9FTkQKK30gcnRrX2wyX2Zsb29kX3R5cGVfdDsKKwordHlwZWRlZiBydGtfdWludDMyIHJ0a19sMl9mbHVzaEl0ZW1fdDsKKwordHlwZWRlZiBlbnVtIHJ0a19sMl9mbHVzaFR5cGVfZQoreworICAgIEZMVVNIX1RZUEVfQllfUE9SVCA9IDAsICAgICAgIC8qIHBoeXNpY2FsIHBvcnQgICAgICAgKi8KKyAgICBGTFVTSF9UWVBFX0JZX1BPUlRfVklELCAgICAgICAvKiBwaHlzaWNhbCBwb3J0ICsgVklEICovCisgICAgRkxVU0hfVFlQRV9CWV9QT1JUX0ZJRCwgICAgICAgLyogcGh5c2ljYWwgcG9ydCArIEZJRCAqLworICAgIEZMVVNIX1RZUEVfRU5ECit9IHJ0a19sMl9mbHVzaFR5cGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcnRrX2wyX2ZsdXNoQ2ZnX3MKK3sKKyAgICBydGtfZW5hYmxlX3QgICAgZmx1c2hCeVZpZDsKKyAgICBydGtfdmxhbl90ICAgICAgdmlkOworICAgIHJ0a19lbmFibGVfdCAgICBmbHVzaEJ5RmlkOworICAgIHJ0a191aW50MzIgICAgICBmaWQ7CisgICAgcnRrX2VuYWJsZV90ICAgIGZsdXNoQnlQb3J0OworICAgIHJ0a19wb3J0X3QgICAgICBwb3J0OworICAgIHJ0a19lbmFibGVfdCAgICBmbHVzaEJ5TWFjOworICAgIHJ0a19tYWNfdCAgICAgICB1Y2FzdEFkZHI7CisgICAgcnRrX2VuYWJsZV90ICAgIGZsdXNoU3RhdGljQWRkcjsKKyAgICBydGtfZW5hYmxlX3QgICAgZmx1c2hBZGRyT25BbGxQb3J0czsgLyogdGhpcyBpcyB1c2VkIHdoZW4gZmx1c2hCeVZpZCAqLworfSBydGtfbDJfZmx1c2hDZmdfdDsKKwordHlwZWRlZiBlbnVtIHJ0a19sMl9yZWFkX21ldGhvZF9leworCisgICAgUkVBRE1FVEhPRF9NQUMgPSAwLAorICAgIFJFQURNRVRIT0RfQUREUkVTUywKKyAgICBSRUFETUVUSE9EX05FWFRfQUREUkVTUywKKyAgICBSRUFETUVUSE9EX05FWFRfTDJVQywKKyAgICBSRUFETUVUSE9EX05FWFRfTDJNQywKKyAgICBSRUFETUVUSE9EX05FWFRfTDNNQywKKyAgICBSRUFETUVUSE9EX05FWFRfTDJMM01DLAorICAgIFJFQURNRVRIT0RfTkVYVF9MMlVDU1BBLAorICAgIFJFQURNRVRIT0RfRU5ECit9cnRrX2wyX3JlYWRfbWV0aG9kX3Q7CisKKy8qIGwyIGxpbWl0IGxlYXJuaW5nIGNvdW50IGFjdGlvbiAqLwordHlwZWRlZiBlbnVtIHJ0a19sMl9saW1pdExlYXJuQ250QWN0aW9uX2UKK3sKKyAgICBMSU1JVF9MRUFSTl9DTlRfQUNUSU9OX0RST1AgPSAwLAorICAgIExJTUlUX0xFQVJOX0NOVF9BQ1RJT05fRk9SV0FSRCwKKyAgICBMSU1JVF9MRUFSTl9DTlRfQUNUSU9OX1RPX0NQVSwKKyAgICBMSU1JVF9MRUFSTl9DTlRfQUNUSU9OX0VORAorfSBydGtfbDJfbGltaXRMZWFybkNudEFjdGlvbl90OworCit0eXBlZGVmIGVudW0gcnRrX2wyX2lwbWNfbG9va3VwX3R5cGVfZQoreworICAgIExPT0tVUF9NQUMgPSAwLAorICAgIExPT0tVUF9JUCwKKyAgICBMT09LVVBfSVBfVklELAorICAgIExPT0tVUF9FTkQKK30gcnRrX2wyX2lwbWNfbG9va3VwX3R5cGVfdDsKKworLyogbDIgYWRkcmVzcyB0YWJsZSAtIHVuaWNhc3QgZGF0YSBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0IHJ0a19sMl91Y2FzdEFkZHJfcworeworICAgIHJ0a19tYWNfdCAgICAgICBtYWM7CisgICAgcnRrX3VpbnQzMiAgICAgIGl2bDsKKyAgICBydGtfdWludDMyICAgICAgY3ZpZDsKKyAgICBydGtfdWludDMyICAgICAgZmlkOworICAgIHJ0a191aW50MzIgICAgICBlZmlkOworICAgIHJ0a191aW50MzIgICAgICBwb3J0OworICAgIHJ0a191aW50MzIgICAgICBzYV9ibG9jazsKKyAgICBydGtfdWludDMyICAgICAgZGFfYmxvY2s7CisgICAgcnRrX3VpbnQzMiAgICAgIGF1dGg7CisgICAgcnRrX3VpbnQzMiAgICAgIGlzX3N0YXRpYzsKKyAgICBydGtfdWludDMyICAgICAgcHJpb3JpdHk7CisgICAgcnRrX3VpbnQzMiAgICAgIHNhX3ByaV9lbjsKKyAgICBydGtfdWludDMyICAgICAgZndkX3ByaV9lbjsKKyAgICBydGtfdWludDMyICAgICAgYWRkcmVzczsKK31ydGtfbDJfdWNhc3RBZGRyX3Q7CisKKy8qIGwyIGFkZHJlc3MgdGFibGUgLSBtdWx0aWNhc3QgZGF0YSBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0IHJ0a19sMl9tY2FzdEFkZHJfcworeworICAgIHJ0a191aW50MzIgICAgICB2aWQ7CisgICAgcnRrX21hY190ICAgICAgIG1hYzsKKyAgICBydGtfdWludDMyICAgICAgZmlkOworICAgIHJ0a19wb3J0bWFza190ICBwb3J0bWFzazsKKyAgICBydGtfdWludDMyICAgICAgaXZsOworICAgIHJ0a191aW50MzIgICAgICBwcmlvcml0eTsKKyAgICBydGtfdWludDMyICAgICAgZndkX3ByaV9lbjsKKyAgICBydGtfdWludDMyICAgICAgaWdtcF9hc2ljOworICAgIHJ0a191aW50MzIgICAgICBpZ21wX2luZGV4OworICAgIHJ0a191aW50MzIgICAgICBhZGRyZXNzOworfXJ0a19sMl9tY2FzdEFkZHJfdDsKKworLyogbDIgYWRkcmVzcyB0YWJsZSAtIGlwIG11bHRpY2FzdCBkYXRhIHN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgcnRrX2wyX2lwTWNhc3RBZGRyX3MKK3sKKyAgICBpcGFkZHJfdCAgICAgICAgZGlwOworICAgIGlwYWRkcl90ICAgICAgICBzaXA7CisgICAgcnRrX3BvcnRtYXNrX3QgIHBvcnRtYXNrOworICAgIHJ0a191aW50MzIgICAgICBwcmlvcml0eTsKKyAgICBydGtfdWludDMyICAgICAgZndkX3ByaV9lbjsKKyAgICBydGtfdWludDMyICAgICAgaWdtcF9hc2ljOworICAgIHJ0a191aW50MzIgICAgICBpZ21wX2luZGV4OworICAgIHJ0a191aW50MzIgICAgICBhZGRyZXNzOworfXJ0a19sMl9pcE1jYXN0QWRkcl90OworCisvKiBsMiBhZGRyZXNzIHRhYmxlIC0gaXAgVklEIG11bHRpY2FzdCBkYXRhIHN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgcnRrX2wyX2lwVmlkTWNhc3RBZGRyX3MKK3sKKyAgICBpcGFkZHJfdCAgICAgICAgZGlwOworICAgIGlwYWRkcl90ICAgICAgICBzaXA7CisgICAgcnRrX3VpbnQzMiAgICAgIHZpZDsKKyAgICBydGtfcG9ydG1hc2tfdCAgcG9ydG1hc2s7CisgICAgcnRrX3VpbnQzMiAgICAgIGFkZHJlc3M7Cit9cnRrX2wyX2lwVmlkTWNhc3RBZGRyX3Q7CisKK3R5cGVkZWYgc3RydWN0IHJ0a19sMl9hZGRyX3RhYmxlX3MKK3sKKyAgICBydGtfdWludDMyICBpbmRleDsKKyAgICBpcGFkZHJfdCAgICBzaXA7CisgICAgaXBhZGRyX3QgICAgZGlwOworICAgIHJ0a19tYWNfdCAgIG1hYzsKKyAgICBydGtfdWludDMyICBzYV9ibG9jazsKKyAgICBydGtfdWludDMyICBhdXRoOworICAgIHJ0a19wb3J0bWFza190ICBwb3J0bWFzazsKKyAgICBydGtfdWludDMyICBhZ2U7CisgICAgcnRrX3VpbnQzMiAgaXZsOworICAgIHJ0a191aW50MzIgIGN2aWQ7CisgICAgcnRrX3VpbnQzMiAgZmlkOworICAgIHJ0a191aW50MzIgIGlzX2lwbXVsOworICAgIHJ0a191aW50MzIgIGlzX3N0YXRpYzsKKyAgICBydGtfdWludDMyICBpc19pcHZpZG11bDsKKyAgICBydGtfdWludDMyICBsM192aWQ7Cit9cnRrX2wyX2FkZHJfdGFibGVfdDsKKwordHlwZWRlZiBlbnVtIHJ0a19sMl9jbGVhclN0YXR1c19lCit7CisgICAgTDJfQ0xFQVJfU1RBVEVfRklOSVNIID0gMCwKKyAgICBMMl9DTEVBUl9TVEFURV9CVVNZLAorICAgIEwyX0NMRUFSX1NUQVRFX0VORAorfXJ0a19sMl9jbGVhclN0YXR1c190OworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbDJfaW5pdAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEluaXRpYWxpemUgbDIgbW9kdWxlIG9mIHRoZSBzcGVjaWZpZWQgZGV2aWNlLgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgSW5pdGlhbGl6ZSBsMiBtb2R1bGUgYmVmb3JlIGNhbGxpbmcgYW55IGwyIEFQSXMuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19sMl9pbml0KHZvaWQpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbDJfYWRkcl9hZGQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBBZGQgTFVUIHVuaWNhc3QgZW50cnkuCisgKiBJbnB1dDoKKyAqICAgICAgcE1hYyAtIDYgYnl0ZXMgdW5pY2FzdChJL0cgYml0IGlzIDApIG1hYyBhZGRyZXNzIHRvIGJlIHdyaXR0ZW4gaW50byBMVVQuCisgKiAgICAgIHBMMl9kYXRhIC0gVW5pY2FzdCBlbnRyeSBwYXJhbWV0ZXIKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9NQUMgICAgICAgICAgICAgIC0gSW52YWxpZCBNQUMgYWRkcmVzcy4KKyAqICAgICAgUlRfRVJSX0wyX0ZJRCAgICAgICAgICAgLSBJbnZhbGlkIEZJRCAuCisgKiAgICAgIFJUX0VSUl9MMl9JTkRFWFRCTF9GVUxMIC0gaGFzaGVkIGluZGV4IGlzIGZ1bGwgb2YgZW50cmllcy4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBJZiB0aGUgdW5pY2FzdCBtYWMgYWRkcmVzcyBhbHJlYWR5IGV4aXN0ZWQgaW4gTFVULCBpdCB3aWxsIHVkcGF0ZSB0aGUgc3RhdHVzIG9mIHRoZSBlbnRyeS4KKyAqICAgICAgT3RoZXJ3aXNlLCBpdCB3aWxsIGZpbmQgYW4gZW1wdHkgb3IgYXNpYyBhdXRvIGxlYXJuZWQgZW50cnkgdG8gd3JpdGUuIElmIGFsbCB0aGUgZW50cmllcworICogICAgICB3aXRoIHRoZSBzYW1lIGhhc2ggdmFsdWUgY2FuJ3QgYmUgcmVwbGFjZWQsIEFTSUMgd2lsbCByZXR1cm4gYSBSVF9FUlJfTDJfSU5ERVhUQkxfRlVMTCBlcnJvci4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2wyX2FkZHJfYWRkKHJ0a19tYWNfdCAqcE1hYywgcnRrX2wyX3VjYXN0QWRkcl90ICpwTDJfZGF0YSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sMl9hZGRyX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBMVVQgdW5pY2FzdCBlbnRyeS4KKyAqIElucHV0OgorICogICAgICBwTWFjICAgIC0gNiBieXRlcyB1bmljYXN0KEkvRyBiaXQgaXMgMCkgbWFjIGFkZHJlc3MgdG8gYmUgd3JpdHRlbiBpbnRvIExVVC4KKyAqIE91dHB1dDoKKyAqICAgICAgcEwyX2RhdGEgLSBVbmljYXN0IGVudHJ5IHBhcmFtZXRlcgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfTUFDICAgICAgICAgICAgICAgICAgLSBJbnZhbGlkIE1BQyBhZGRyZXNzLgorICogICAgICBSVF9FUlJfTDJfRklEICAgICAgICAgICAgICAgLSBJbnZhbGlkIEZJRCAuCisgKiAgICAgIFJUX0VSUl9MMl9FTlRSWV9OT1RGT1VORCAgICAtIE5vIHN1Y2ggTFVUIGVudHJ5LgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBJZiB0aGUgdW5pY2FzdCBtYWMgYWRkcmVzcyBleGlzdGVkIGluIExVVCwgaXQgd2lsbCByZXR1cm4gdGhlIHBvcnQgYW5kIGZpZCB3aGVyZQorICogICAgICB0aGUgbWFjIGlzIGxlYXJuZWQuIE90aGVyd2lzZSwgaXQgd2lsbCByZXR1cm4gYSBSVF9FUlJfTDJfRU5UUllfTk9URk9VTkQgZXJyb3IuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19sMl9hZGRyX2dldChydGtfbWFjX3QgKnBNYWMsIHJ0a19sMl91Y2FzdEFkZHJfdCAqcEwyX2RhdGEpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbDJfYWRkcl9uZXh0X2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBOZXh0IExVVCB1bmljYXN0IGVudHJ5LgorICogSW5wdXQ6CisgKiAgICAgIHJlYWRfbWV0aG9kICAgICAtIFRoZSByZWFkaW5nIG1ldGhvZC4KKyAqICAgICAgcG9ydCAgICAgICAgICAgIC0gVGhlIHBvcnQgbnVtYmVyIGlmIHRoZSByZWFkX21ldG9oZCBpcyBSRUFETUVUSE9EX05FWFRfTDJVQ1NQQQorICogICAgICBwQWRkcmVzcyAgICAgICAgLSBUaGUgQWRkcmVzcyBJRAorICogT3V0cHV0OgorICogICAgICBwTDJfZGF0YSAtIFVuaWNhc3QgZW50cnkgcGFyYW1ldGVyCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9NQUMgICAgICAgICAgICAgICAgICAtIEludmFsaWQgTUFDIGFkZHJlc3MuCisgKiAgICAgIFJUX0VSUl9MMl9GSUQgICAgICAgICAgICAgICAtIEludmFsaWQgRklEIC4KKyAqICAgICAgUlRfRVJSX0wyX0VOVFJZX05PVEZPVU5EICAgIC0gTm8gc3VjaCBMVVQgZW50cnkuCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIEdldCB0aGUgbmV4dCB1bmljYXN0IGVudHJ5IGFmdGVyIHRoZSBjdXJyZW50IGVudHJ5IHBvaW50ZWQgYnkgcEFkZHJlc3MuCisgKiAgICAgIFRoZSBhZGRyZXNzIG9mIG5leHQgZW50cnkgaXMgcmV0dXJuZWQgYnkgcEFkZHJlc3MuIFVzZXIgY2FuIHVzZSAoYWRkcmVzcyArIDEpCisgKiAgICAgIGFzIHBBZGRyZXNzIHRvIGNhbGwgdGhpcyBBUEkgYWdhaW4gZm9yIGR1bXBpbmcgYWxsIGVudHJpZXMgaXMgTFVULgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfbDJfYWRkcl9uZXh0X2dldChydGtfbDJfcmVhZF9tZXRob2RfdCByZWFkX21ldGhvZCwgcnRrX3BvcnRfdCBwb3J0LCBydGtfdWludDMyICpwQWRkcmVzcywgcnRrX2wyX3VjYXN0QWRkcl90ICpwTDJfZGF0YSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sMl9hZGRyX2RlbAorICogRGVzY3JpcHRpb246CisgKiAgICAgIERlbGV0ZSBMVVQgdW5pY2FzdCBlbnRyeS4KKyAqIElucHV0OgorICogICAgICBwTWFjIC0gNiBieXRlcyB1bmljYXN0KEkvRyBiaXQgaXMgMCkgbWFjIGFkZHJlc3MgdG8gYmUgd3JpdHRlbiBpbnRvIExVVC4KKyAqICAgICAgZmlkIC0gRmlsdGVyaW5nIGRhdGFiYXNlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqICAgICAgUlRfRVJSX01BQyAgICAgICAgICAgICAgICAgIC0gSW52YWxpZCBNQUMgYWRkcmVzcy4KKyAqICAgICAgUlRfRVJSX0wyX0ZJRCAgICAgICAgICAgICAgIC0gSW52YWxpZCBGSUQgLgorICogICAgICBSVF9FUlJfTDJfRU5UUllfTk9URk9VTkQgICAgLSBObyBzdWNoIExVVCBlbnRyeS4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgSWYgdGhlIG1hYyBoYXMgZXhpc3RlZCBpbiB0aGUgTFVULCBpdCB3aWxsIGJlIGRlbGV0ZWQuIE90aGVyd2lzZSwgaXQgd2lsbCByZXR1cm4gUlRfRVJSX0wyX0VOVFJZX05PVEZPVU5ELgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfbDJfYWRkcl9kZWwocnRrX21hY190ICpwTWFjLCBydGtfbDJfdWNhc3RBZGRyX3QgKnBMMl9kYXRhKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX21jYXN0QWRkcl9hZGQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBBZGQgTFVUIG11bHRpY2FzdCBlbnRyeS4KKyAqIElucHV0OgorICogICAgICBwTWNhc3RBZGRyICAtIEwyIG11bHRpY2FzdCBlbnRyeSBzdHJ1Y3R1cmUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9NQUMgICAgICAgICAgICAgIC0gSW52YWxpZCBNQUMgYWRkcmVzcy4KKyAqICAgICAgUlRfRVJSX0wyX0ZJRCAgICAgICAgICAgLSBJbnZhbGlkIEZJRCAuCisgKiAgICAgIFJUX0VSUl9MMl9WSUQgICAgICAgICAgIC0gSW52YWxpZCBWSUQgLgorICogICAgICBSVF9FUlJfTDJfSU5ERVhUQkxfRlVMTCAtIGhhc2hlZCBpbmRleCBpcyBmdWxsIG9mIGVudHJpZXMuCisgKiAgICAgIFJUX0VSUl9QT1JUX01BU0sgICAgICAgIC0gSW52YWxpZCBwb3J0bWFzay4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBJZiB0aGUgbXVsdGljYXN0IG1hYyBhZGRyZXNzIGFscmVhZHkgZXhpc3RlZCBpbiB0aGUgTFVULCBpdCB3aWxsIHVkcGF0ZSB0aGUKKyAqICAgICAgcG9ydCBtYXNrIG9mIHRoZSBlbnRyeS4gT3RoZXJ3aXNlLCBpdCB3aWxsIGZpbmQgYW4gZW1wdHkgb3IgYXNpYyBhdXRvIGxlYXJuZWQKKyAqICAgICAgZW50cnkgdG8gd3JpdGUuIElmIGFsbCB0aGUgZW50cmllcyB3aXRoIHRoZSBzYW1lIGhhc2ggdmFsdWUgY2FuJ3QgYmUgcmVwbGFjZWQsCisgKiAgICAgIEFTSUMgd2lsbCByZXR1cm4gYSBSVF9FUlJfTDJfSU5ERVhUQkxfRlVMTCBlcnJvci4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2wyX21jYXN0QWRkcl9hZGQocnRrX2wyX21jYXN0QWRkcl90ICpwTWNhc3RBZGRyKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX21jYXN0QWRkcl9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgTFVUIG11bHRpY2FzdCBlbnRyeS4KKyAqIElucHV0OgorICogICAgICBwTWNhc3RBZGRyICAtIEwyIG11bHRpY2FzdCBlbnRyeSBzdHJ1Y3R1cmUKKyAqIE91dHB1dDoKKyAqICAgICAgcE1jYXN0QWRkciAgLSBMMiBtdWx0aWNhc3QgZW50cnkgc3RydWN0dXJlCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9NQUMgICAgICAgICAgICAgICAgICAtIEludmFsaWQgTUFDIGFkZHJlc3MuCisgKiAgICAgIFJUX0VSUl9MMl9GSUQgICAgICAgICAgICAgICAtIEludmFsaWQgRklEIC4KKyAqICAgICAgUlRfRVJSX0wyX1ZJRCAgICAgICAgICAgICAgIC0gSW52YWxpZCBWSUQgLgorICogICAgICBSVF9FUlJfTDJfRU5UUllfTk9URk9VTkQgICAgLSBObyBzdWNoIExVVCBlbnRyeS4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgSWYgdGhlIG11bHRpY2FzdCBtYWMgYWRkcmVzcyBleGlzdGVkIGluIHRoZSBMVVQsIGl0IHdpbGwgcmV0dXJuIHRoZSBwb3J0IHdoZXJlCisgKiAgICAgIHRoZSBtYWMgaXMgbGVhcm5lZC4gT3RoZXJ3aXNlLCBpdCB3aWxsIHJldHVybiBhIFJUX0VSUl9MMl9FTlRSWV9OT1RGT1VORCBlcnJvci4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2wyX21jYXN0QWRkcl9nZXQocnRrX2wyX21jYXN0QWRkcl90ICpwTWNhc3RBZGRyKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX21jYXN0QWRkcl9uZXh0X2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBOZXh0IEwyIE11bHRpY2FzdCBlbnRyeS4KKyAqIElucHV0OgorICogICAgICBwQWRkcmVzcyAgICAgICAgLSBUaGUgQWRkcmVzcyBJRAorICogT3V0cHV0OgorICogICAgICBwTWNhc3RBZGRyICAtIEwyIG11bHRpY2FzdCBlbnRyeSBzdHJ1Y3R1cmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0wyX0VOVFJZX05PVEZPVU5EICAgIC0gTm8gc3VjaCBMVVQgZW50cnkuCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIEdldCB0aGUgbmV4dCBMMiBtdWx0aWNhc3QgZW50cnkgYWZ0ZXIgdGhlIGN1cnJlbnQgZW50cnkgcG9pbnRlZCBieSBwQWRkcmVzcy4KKyAqICAgICAgVGhlIGFkZHJlc3Mgb2YgbmV4dCBlbnRyeSBpcyByZXR1cm5lZCBieSBwQWRkcmVzcy4gVXNlciBjYW4gdXNlIChhZGRyZXNzICsgMSkKKyAqICAgICAgYXMgcEFkZHJlc3MgdG8gY2FsbCB0aGlzIEFQSSBhZ2FpbiBmb3IgZHVtcGluZyBhbGwgbXVsdGljYXN0IGVudHJpZXMgaXMgTFVULgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfbDJfbWNhc3RBZGRyX25leHRfZ2V0KHJ0a191aW50MzIgKnBBZGRyZXNzLCBydGtfbDJfbWNhc3RBZGRyX3QgKnBNY2FzdEFkZHIpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbDJfbWNhc3RBZGRyX2RlbAorICogRGVzY3JpcHRpb246CisgKiAgICAgIERlbGV0ZSBMVVQgbXVsdGljYXN0IGVudHJ5LgorICogSW5wdXQ6CisgKiAgICAgIHBNY2FzdEFkZHIgIC0gTDIgbXVsdGljYXN0IGVudHJ5IHN0cnVjdHVyZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9NQUMgICAgICAgICAgICAgICAgICAtIEludmFsaWQgTUFDIGFkZHJlc3MuCisgKiAgICAgIFJUX0VSUl9MMl9GSUQgICAgICAgICAgICAgICAtIEludmFsaWQgRklEIC4KKyAqICAgICAgUlRfRVJSX0wyX1ZJRCAgICAgICAgICAgICAgIC0gSW52YWxpZCBWSUQgLgorICogICAgICBSVF9FUlJfTDJfRU5UUllfTk9URk9VTkQgICAgLSBObyBzdWNoIExVVCBlbnRyeS4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgSWYgdGhlIG1hYyBoYXMgZXhpc3RlZCBpbiB0aGUgTFVULCBpdCB3aWxsIGJlIGRlbGV0ZWQuIE90aGVyd2lzZSwgaXQgd2lsbCByZXR1cm4gUlRfRVJSX0wyX0VOVFJZX05PVEZPVU5ELgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfbDJfbWNhc3RBZGRyX2RlbChydGtfbDJfbWNhc3RBZGRyX3QgKnBNY2FzdEFkZHIpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbDJfaXBNY2FzdEFkZHJfYWRkCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQWRkIEx1dCBJUCBtdWx0aWNhc3QgZW50cnkKKyAqIElucHV0OgorICogICAgICBwSXBNY2FzdEFkZHIgICAgLSBJUCBNdWx0aWNhc3QgZW50cnkKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9MMl9JTkRFWFRCTF9GVUxMIC0gaGFzaGVkIGluZGV4IGlzIGZ1bGwgb2YgZW50cmllcy4KKyAqICAgICAgUlRfRVJSX1BPUlRfTUFTSyAgICAgICAgLSBJbnZhbGlkIHBvcnRtYXNrLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFN5c3RlbSBzdXBwb3J0cyBMMiBlbnRyeSB3aXRoIElQIG11bHRpY2FzdCBESVAvU0lQIHRvIGZvcndhcmQgSVAgbXVsdGljYXN0aW5nIGZyYW1lIGFzIHVzZXIKKyAqICAgICAgZGVzaXJlZC4gSWYgdGhpcyBmdW5jdGlvbiBpcyBlbmFibGVkLCB0aGVuIHN5c3RlbSB3aWxsIGJlIGxvb2tlZCB1cCBMMiBJUCBtdWx0aWNhc3QgZW50cnkgdG8KKyAqICAgICAgZm9yd2FyZCBJUCBtdWx0aWNhc3QgZnJhbWUgZGlyZWN0bHkgd2l0aG91dCBmbG9vZGluZy4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2wyX2lwTWNhc3RBZGRyX2FkZChydGtfbDJfaXBNY2FzdEFkZHJfdCAqcElwTWNhc3RBZGRyKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2lwTWNhc3RBZGRyX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBMVVQgSVAgbXVsdGljYXN0IGVudHJ5LgorICogSW5wdXQ6CisgKiAgICAgIHBJcE1jYXN0QWRkciAgICAtIElQIE11bHRpY2FzdCBlbnRyeQorICogT3V0cHV0OgorICogICAgICBwSXBNY2FzdEFkZHIgICAgLSBJUCBNdWx0aWNhc3QgZW50cnkKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0wyX0VOVFJZX05PVEZPVU5EICAgIC0gTm8gc3VjaCBMVVQgZW50cnkuCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGdldCBMdXQgdGFibGUgb2YgSVAgbXVsdGljYXN0IGVudHJ5LgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfbDJfaXBNY2FzdEFkZHJfZ2V0KHJ0a19sMl9pcE1jYXN0QWRkcl90ICpwSXBNY2FzdEFkZHIpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbDJfaXBNY2FzdEFkZHJfbmV4dF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgTmV4dCBJUCBNdWx0aWNhc3QgZW50cnkuCisgKiBJbnB1dDoKKyAqICAgICAgcEFkZHJlc3MgICAgICAgIC0gVGhlIEFkZHJlc3MgSUQKKyAqIE91dHB1dDoKKyAqICAgICAgcElwTWNhc3RBZGRyICAgIC0gSVAgTXVsdGljYXN0IGVudHJ5CisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9MMl9FTlRSWV9OT1RGT1VORCAgICAtIE5vIHN1Y2ggTFVUIGVudHJ5LgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBHZXQgdGhlIG5leHQgSVAgbXVsdGljYXN0IGVudHJ5IGFmdGVyIHRoZSBjdXJyZW50IGVudHJ5IHBvaW50ZWQgYnkgcEFkZHJlc3MuCisgKiAgICAgIFRoZSBhZGRyZXNzIG9mIG5leHQgZW50cnkgaXMgcmV0dXJuZWQgYnkgcEFkZHJlc3MuIFVzZXIgY2FuIHVzZSAoYWRkcmVzcyArIDEpCisgKiAgICAgIGFzIHBBZGRyZXNzIHRvIGNhbGwgdGhpcyBBUEkgYWdhaW4gZm9yIGR1bXBpbmcgYWxsIElQIG11bHRpY2FzdCBlbnRyaWVzIGlzIExVVC4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2wyX2lwTWNhc3RBZGRyX25leHRfZ2V0KHJ0a191aW50MzIgKnBBZGRyZXNzLCBydGtfbDJfaXBNY2FzdEFkZHJfdCAqcElwTWNhc3RBZGRyKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2lwTWNhc3RBZGRyX2RlbAorICogRGVzY3JpcHRpb246CisgKiAgICAgIERlbGV0ZSBhIGlwIG11bHRpY2FzdCBhZGRyZXNzIGVudHJ5IGZyb20gdGhlIHNwZWNpZmllZCBkZXZpY2UuCisgKiBJbnB1dDoKKyAqICAgICAgcElwTWNhc3RBZGRyICAgIC0gSVAgTXVsdGljYXN0IGVudHJ5CisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0wyX0VOVFJZX05PVEZPVU5EICAgIC0gTm8gc3VjaCBMVVQgZW50cnkuCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGRlbGV0ZSBhIElQIG11bHRpY2FzdCBhZGRyZXNzIGVudHJ5IGZyb20gdGhlIHNwZWNpZmllZCBkZXZpY2UuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19sMl9pcE1jYXN0QWRkcl9kZWwocnRrX2wyX2lwTWNhc3RBZGRyX3QgKnBJcE1jYXN0QWRkcik7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sMl9pcFZpZE1jYXN0QWRkcl9hZGQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBBZGQgTHV0IElQIG11bHRpY2FzdCtWSUQgZW50cnkKKyAqIElucHV0OgorICogICAgICBwSXBWaWRNY2FzdEFkZHIgLSBJUCAmIFZJRCBtdWx0aWNhc3QgRW50cnkKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9MMl9JTkRFWFRCTF9GVUxMIC0gaGFzaGVkIGluZGV4IGlzIGZ1bGwgb2YgZW50cmllcy4KKyAqICAgICAgUlRfRVJSX1BPUlRfTUFTSyAgICAgICAgLSBJbnZhbGlkIHBvcnRtYXNrLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfbDJfaXBWaWRNY2FzdEFkZHJfYWRkKHJ0a19sMl9pcFZpZE1jYXN0QWRkcl90ICpwSXBWaWRNY2FzdEFkZHIpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbDJfaXBWaWRNY2FzdEFkZHJfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IExVVCBJUCBtdWx0aWNhc3QrVklEIGVudHJ5LgorICogSW5wdXQ6CisgKiAgICAgIHBJcFZpZE1jYXN0QWRkciAtIElQICYgVklEIG11bHRpY2FzdCBFbnRyeQorICogT3V0cHV0OgorICogICAgICBwSXBWaWRNY2FzdEFkZHIgLSBJUCAmIFZJRCBtdWx0aWNhc3QgRW50cnkKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0wyX0VOVFJZX05PVEZPVU5EICAgIC0gTm8gc3VjaCBMVVQgZW50cnkuCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfbDJfaXBWaWRNY2FzdEFkZHJfZ2V0KHJ0a19sMl9pcFZpZE1jYXN0QWRkcl90ICpwSXBWaWRNY2FzdEFkZHIpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbDJfaXBWaWRNY2FzdEFkZHJfbmV4dF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgTmV4dCBJUCBNdWx0aWNhc3QrVklEIGVudHJ5LgorICogSW5wdXQ6CisgKiAgICAgIHBBZGRyZXNzICAgICAgICAtIFRoZSBBZGRyZXNzIElECisgKiBPdXRwdXQ6CisgKiAgICAgIHBJcFZpZE1jYXN0QWRkciAtIElQICYgVklEIG11bHRpY2FzdCBFbnRyeQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfTDJfRU5UUllfTk9URk9VTkQgICAgLSBObyBzdWNoIExVVCBlbnRyeS4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgR2V0IHRoZSBuZXh0IElQIG11bHRpY2FzdCBlbnRyeSBhZnRlciB0aGUgY3VycmVudCBlbnRyeSBwb2ludGVkIGJ5IHBBZGRyZXNzLgorICogICAgICBUaGUgYWRkcmVzcyBvZiBuZXh0IGVudHJ5IGlzIHJldHVybmVkIGJ5IHBBZGRyZXNzLiBVc2VyIGNhbiB1c2UgKGFkZHJlc3MgKyAxKQorICogICAgICBhcyBwQWRkcmVzcyB0byBjYWxsIHRoaXMgQVBJIGFnYWluIGZvciBkdW1waW5nIGFsbCBJUCBtdWx0aWNhc3QgZW50cmllcyBpcyBMVVQuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19sMl9pcFZpZE1jYXN0QWRkcl9uZXh0X2dldChydGtfdWludDMyICpwQWRkcmVzcywgcnRrX2wyX2lwVmlkTWNhc3RBZGRyX3QgKnBJcFZpZE1jYXN0QWRkcik7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sMl9pcFZpZE1jYXN0QWRkcl9kZWwKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBEZWxldGUgYSBpcCBtdWx0aWNhc3QrVklEIGFkZHJlc3MgZW50cnkgZnJvbSB0aGUgc3BlY2lmaWVkIGRldmljZS4KKyAqIElucHV0OgorICogICAgICBwSXBWaWRNY2FzdEFkZHIgLSBJUCAmIFZJRCBtdWx0aWNhc3QgRW50cnkKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfTDJfRU5UUllfTk9URk9VTkQgICAgLSBObyBzdWNoIExVVCBlbnRyeS4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19sMl9pcFZpZE1jYXN0QWRkcl9kZWwocnRrX2wyX2lwVmlkTWNhc3RBZGRyX3QgKnBJcFZpZE1jYXN0QWRkcik7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sMl91Y2FzdEFkZHJfZmx1c2gKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBGbHVzaCBMMiBtYWMgYWRkcmVzcyBieSB0eXBlIGluIHRoZSBzcGVjaWZpZWQgZGV2aWNlIChib3RoIGR5bmFtaWMgYW5kIHN0YXRpYykuCisgKiBJbnB1dDoKKyAqICAgICAgcENvbmZpZyAtIGZsdXNoIGNvbmZpZ3VyYXRpb24KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqICAgICAgUlRfRVJSX1ZMQU5fVklEICAgICAtIEludmFsaWQgVklEIHBhcmFtZXRlci4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIGZsdXNoQnlWaWQgICAgICAgICAgLSAxOiBGbHVzaCBieSBWSUQsIDA6IERvbid0IGZsdXNoIGJ5IFZJRAorICogICAgICB2aWQgICAgICAgICAgICAgICAgIC0gVklEICgwIH4gNDA5NSkKKyAqICAgICAgZmx1c2hCeUZpZCAgICAgICAgICAtIDE6IEZsdXNoIGJ5IEZJRCwgMDogRG9uJ3QgZmx1c2ggYnkgRklECisgKiAgICAgIGZpZCAgICAgICAgICAgICAgICAgLSBGSUQgKDAgfiAxNSkKKyAqICAgICAgZmx1c2hCeVBvcnQgICAgICAgICAtIDE6IEZsdXNoIGJ5IFBvcnQsIDA6IERvbid0IGZsdXNoIGJ5IFBvcnQKKyAqICAgICAgcG9ydCAgICAgICAgICAgICAgICAtIFBvcnQgSUQKKyAqICAgICAgZmx1c2hCeU1hYyAgICAgICAgICAtIE5vdCBTdXBwb3J0ZWQKKyAqICAgICAgdWNhc3RBZGRyICAgICAgICAgICAtIE5vdCBTdXBwb3J0ZWQKKyAqICAgICAgZmx1c2hTdGF0aWNBZGRyICAgICAtIDE6IEZsdXNoIGJvdGggU3RhdGljIGFuZCBEeW5hbWljIGVudHJpZXMsIDA6IEZsdXNoIG9ubHkgRHluYW1pYyBlbnRyaWVzCisgKiAgICAgIGZsdXNoQWRkck9uQWxsUG9ydHMgLSAxOiBGbHVzaCBWSUQtbWF0Y2hlZCBlbnRyaWVzIGF0IGFsbCBwb3J0cywgMDogRmx1c2ggVklELW1hdGNoZWQgZW50cmllcyBwZXIgcG9ydC4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2wyX3VjYXN0QWRkcl9mbHVzaChydGtfbDJfZmx1c2hDZmdfdCAqcENvbmZpZyk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sMl90YWJsZV9jbGVhcgorICogRGVzY3JpcHRpb246CisgKiAgICAgIEZsdXNoIGFsbCBzdGF0aWMgJiBkeW5hbWljIGVudHJpZXMgaW4gTFVULgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19sMl90YWJsZV9jbGVhcih2b2lkKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX3RhYmxlX2NsZWFyU3RhdHVzX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCB0YWJsZSBjbGVhciBzdGF0dXMKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBTdGF0dXMgLSBDbGVhciBzdGF0dXMsIDE6QnVzeSwgMDpmaW5pc2gKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfbDJfdGFibGVfY2xlYXJTdGF0dXNfZ2V0KHJ0a19sMl9jbGVhclN0YXR1c190ICpwU3RhdHVzKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2ZsdXNoTGlua0Rvd25Qb3J0QWRkckVuYWJsZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgSFcgZmx1c2ggbGlua2Rvd24gcG9ydCBtYWMgY29uZmlndXJhdGlvbiBvZiB0aGUgc3BlY2lmaWVkIGRldmljZS4KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqICAgICAgZW5hYmxlIC0gbGluayBkb3duIGZsdXNoIHN0YXR1cworICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfRU5BQkxFICAgICAgIC0gSW52YWxpZCBlbmFibGUgaW5wdXQuCisgKiBOb3RlOgorICogICAgICBUaGUgc3RhdHVzIG9mIGZsdXNoIGxpbmtkb3duIHBvcnQgYWRkcmVzcyBpcyBhcyBmb2xsb3dpbmc6CisgKiAgICAgIC0gRElTQUJMRUQKKyAqICAgICAgLSBFTkFCTEVECisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19sMl9mbHVzaExpbmtEb3duUG9ydEFkZHJFbmFibGVfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2VuYWJsZV90IGVuYWJsZSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sMl9mbHVzaExpbmtEb3duUG9ydEFkZHJFbmFibGVfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IEhXIGZsdXNoIGxpbmtkb3duIHBvcnQgbWFjIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHNwZWNpZmllZCBkZXZpY2UuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBFbmFibGUgLSBsaW5rIGRvd24gZmx1c2ggc3RhdHVzCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogTm90ZToKKyAqICAgICAgVGhlIHN0YXR1cyBvZiBmbHVzaCBsaW5rZG93biBwb3J0IGFkZHJlc3MgaXMgYXMgZm9sbG93aW5nOgorICogICAgICAtIERJU0FCTEVECisgKiAgICAgIC0gRU5BQkxFRAorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfbDJfZmx1c2hMaW5rRG93blBvcnRBZGRyRW5hYmxlX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19lbmFibGVfdCAqcEVuYWJsZSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sMl9hZ2luZ0VuYWJsZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgTDIgTFVUIGFnaW5nIHN0YXR1cyBwZXIgcG9ydCBzZXR0aW5nLgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBQb3J0IGlkLgorICogICAgICBlbmFibGUgIC0gQWdpbmcgc3RhdHVzCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9FTkFCTEUgICAgICAgLSBJbnZhbGlkIGVuYWJsZSBpbnB1dC4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBiZSB1c2VkIHRvIHNldCBMMiBMVVQgYWdpbmcgc3RhdHVzIHBlciBwb3J0LgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfbDJfYWdpbmdFbmFibGVfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2VuYWJsZV90IGVuYWJsZSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sMl9hZ2luZ0VuYWJsZV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgTDIgTFVUIGFnaW5nIHN0YXR1cyBwZXIgcG9ydCBzZXR0aW5nLgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBQb3J0IGlkLgorICogT3V0cHV0OgorICogICAgICBwRW5hYmxlIC0gQWdpbmcgc3RhdHVzCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgY2FuIGJlIHVzZWQgdG8gZ2V0IEwyIExVVCBhZ2luZyBmdW5jdGlvbiBwZXIgcG9ydC4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2wyX2FnaW5nRW5hYmxlX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19lbmFibGVfdCAqcEVuYWJsZSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sMl9saW1pdExlYXJuaW5nQ250X3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwZXItUG9ydCBhdXRvIGxlYXJuaW5nIGxpbWl0IG51bWJlcgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBQb3J0IGlkLgorICogICAgICBtYWNfY250IC0gQXV0byBsZWFybmluZyBlbnRyaWVzIGxpbWl0IG51bWJlcgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9MSU1JVEVEX0wyRU5UUllfTlVNICAtIEludmFsaWQgYXV0byBsZWFybmluZyBsaW1pdCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIHNldCBwZXItcG9ydCBBU0lDIGF1dG8gbGVhcm5pbmcgbGltaXQgbnVtYmVyIGZyb20gMChkaXNhYmxlIGxlYXJuaW5nKQorICogICAgICB0byA4ay4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2wyX2xpbWl0TGVhcm5pbmdDbnRfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX21hY19jbnRfdCBtYWNfY250KTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2xpbWl0TGVhcm5pbmdDbnRfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHBlci1Qb3J0IGF1dG8gbGVhcm5pbmcgbGltaXQgbnVtYmVyCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBNYWNfY250IC0gQXV0byBsZWFybmluZyBlbnRyaWVzIGxpbWl0IG51bWJlcgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGdldCBwZXItcG9ydCBBU0lDIGF1dG8gbGVhcm5pbmcgbGltaXQgbnVtYmVyLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfbDJfbGltaXRMZWFybmluZ0NudF9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfbWFjX2NudF90ICpwTWFjX2NudCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sMl9saW1pdFN5c3RlbUxlYXJuaW5nQ250X3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBTeXN0ZW0gYXV0byBsZWFybmluZyBsaW1pdCBudW1iZXIKKyAqIElucHV0OgorICogICAgICBtYWNfY250IC0gQXV0byBsZWFybmluZyBlbnRyaWVzIGxpbWl0IG51bWJlcgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9MSU1JVEVEX0wyRU5UUllfTlVNICAtIEludmFsaWQgYXV0byBsZWFybmluZyBsaW1pdCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIHNldCBzeXN0ZW0gQVNJQyBhdXRvIGxlYXJuaW5nIGxpbWl0IG51bWJlciBmcm9tIDAoZGlzYWJsZSBsZWFybmluZykKKyAqICAgICAgdG8gMjExMi4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2wyX2xpbWl0U3lzdGVtTGVhcm5pbmdDbnRfc2V0KHJ0a19tYWNfY250X3QgbWFjX2NudCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sMl9saW1pdFN5c3RlbUxlYXJuaW5nQ250X2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBTeXN0ZW0gYXV0byBsZWFybmluZyBsaW1pdCBudW1iZXIKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBNYWNfY250IC0gQXV0byBsZWFybmluZyBlbnRyaWVzIGxpbWl0IG51bWJlcgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGdldCBzeXN0ZW0gQVNJQyBhdXRvIGxlYXJuaW5nIGxpbWl0IG51bWJlci4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2wyX2xpbWl0U3lzdGVtTGVhcm5pbmdDbnRfZ2V0KHJ0a19tYWNfY250X3QgKnBNYWNfY250KTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2xpbWl0TGVhcm5pbmdDbnRBY3Rpb25fc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQ29uZmlndXJlIGF1dG8gbGVhcm4gb3ZlciBsaW1pdCBudW1iZXIgYWN0aW9uLgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBQb3J0IGlkLgorICogICAgICBhY3Rpb24gLSBBdXRvIGxlYXJuaW5nIGVudHJpZXMgbGltaXQgbnVtYmVyCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9OT1RfQUxMT1dFRCAgLSBJbnZhbGlkIGxlYXJuIG92ZXIgYWN0aW9uCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBzZXQgU0EgdW5rbm93biBwYWNrZXQgYWN0aW9uIHdoaWxlIGF1dG8gbGVhcm4gbGltaXQgbnVtYmVyIGlzIG92ZXIKKyAqICAgICAgVGhlIGFjdGlvbiBzeW1ib2wgYXMgZm9sbG93aW5nOgorICogICAgICAtIExJTUlUX0xFQVJOX0NOVF9BQ1RJT05fRFJPUCwKKyAqICAgICAgLSBMSU1JVF9MRUFSTl9DTlRfQUNUSU9OX0ZPUldBUkQsCisgKiAgICAgIC0gTElNSVRfTEVBUk5fQ05UX0FDVElPTl9UT19DUFUsCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19sMl9saW1pdExlYXJuaW5nQ250QWN0aW9uX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19sMl9saW1pdExlYXJuQ250QWN0aW9uX3QgYWN0aW9uKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2xpbWl0TGVhcm5pbmdDbnRBY3Rpb25fZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGF1dG8gbGVhcm4gb3ZlciBsaW1pdCBudW1iZXIgYWN0aW9uLgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBQb3J0IGlkLgorICogT3V0cHV0OgorICogICAgICBwQWN0aW9uIC0gTGVhcm4gb3ZlciBhY3Rpb24KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBnZXQgU0EgdW5rbm93biBwYWNrZXQgYWN0aW9uIHdoaWxlIGF1dG8gbGVhcm4gbGltaXQgbnVtYmVyIGlzIG92ZXIKKyAqICAgICAgVGhlIGFjdGlvbiBzeW1ib2wgYXMgZm9sbG93aW5nOgorICogICAgICAtIExJTUlUX0xFQVJOX0NOVF9BQ1RJT05fRFJPUCwKKyAqICAgICAgLSBMSU1JVF9MRUFSTl9DTlRfQUNUSU9OX0ZPUldBUkQsCisgKiAgICAgIC0gTElNSVRfTEVBUk5fQ05UX0FDVElPTl9UT19DUFUsCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19sMl9saW1pdExlYXJuaW5nQ250QWN0aW9uX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19sMl9saW1pdExlYXJuQ250QWN0aW9uX3QgKnBBY3Rpb24pOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbDJfbGltaXRTeXN0ZW1MZWFybmluZ0NudEFjdGlvbl9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBDb25maWd1cmUgc3lzdGVtIGF1dG8gbGVhcm4gb3ZlciBsaW1pdCBudW1iZXIgYWN0aW9uLgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBQb3J0IGlkLgorICogICAgICBhY3Rpb24gLSBBdXRvIGxlYXJuaW5nIGVudHJpZXMgbGltaXQgbnVtYmVyCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9OT1RfQUxMT1dFRCAgLSBJbnZhbGlkIGxlYXJuIG92ZXIgYWN0aW9uCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBzZXQgU0EgdW5rbm93biBwYWNrZXQgYWN0aW9uIHdoaWxlIGF1dG8gbGVhcm4gbGltaXQgbnVtYmVyIGlzIG92ZXIKKyAqICAgICAgVGhlIGFjdGlvbiBzeW1ib2wgYXMgZm9sbG93aW5nOgorICogICAgICAtIExJTUlUX0xFQVJOX0NOVF9BQ1RJT05fRFJPUCwKKyAqICAgICAgLSBMSU1JVF9MRUFSTl9DTlRfQUNUSU9OX0ZPUldBUkQsCisgKiAgICAgIC0gTElNSVRfTEVBUk5fQ05UX0FDVElPTl9UT19DUFUsCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19sMl9saW1pdFN5c3RlbUxlYXJuaW5nQ250QWN0aW9uX3NldChydGtfbDJfbGltaXRMZWFybkNudEFjdGlvbl90IGFjdGlvbik7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sMl9saW1pdFN5c3RlbUxlYXJuaW5nQ250QWN0aW9uX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBzeXN0ZW0gYXV0byBsZWFybiBvdmVyIGxpbWl0IG51bWJlciBhY3Rpb24uCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZS4KKyAqIE91dHB1dDoKKyAqICAgICAgcEFjdGlvbiAtIExlYXJuIG92ZXIgYWN0aW9uCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IFNBIHVua25vd24gcGFja2V0IGFjdGlvbiB3aGlsZSBhdXRvIGxlYXJuIGxpbWl0IG51bWJlciBpcyBvdmVyCisgKiAgICAgIFRoZSBhY3Rpb24gc3ltYm9sIGFzIGZvbGxvd2luZzoKKyAqICAgICAgLSBMSU1JVF9MRUFSTl9DTlRfQUNUSU9OX0RST1AsCisgKiAgICAgIC0gTElNSVRfTEVBUk5fQ05UX0FDVElPTl9GT1JXQVJELAorICogICAgICAtIExJTUlUX0xFQVJOX0NOVF9BQ1RJT05fVE9fQ1BVLAorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfbDJfbGltaXRTeXN0ZW1MZWFybmluZ0NudEFjdGlvbl9nZXQocnRrX2wyX2xpbWl0TGVhcm5DbnRBY3Rpb25fdCAqcEFjdGlvbik7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sMl9saW1pdFN5c3RlbUxlYXJuaW5nQ250UG9ydE1hc2tfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQ29uZmlndXJlIHN5c3RlbSBhdXRvIGxlYXJuIHBvcnRtYXNrCisgKiBJbnB1dDoKKyAqICAgICAgcFBvcnRtYXNrIC0gUG9ydCBNYXNrCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfTUFTSyAgICAtIEludmFsaWQgcG9ydCBtYXNrLgorICogTm90ZToKKyAqCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19sMl9saW1pdFN5c3RlbUxlYXJuaW5nQ250UG9ydE1hc2tfc2V0KHJ0a19wb3J0bWFza190ICpwUG9ydG1hc2spOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbDJfbGltaXRTeXN0ZW1MZWFybmluZ0NudFBvcnRNYXNrX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIGdldCBzeXN0ZW0gYXV0byBsZWFybiBwb3J0bWFzaworICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcFBvcnRtYXNrIC0gUG9ydCBNYXNrCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgLSBOdWxsIHBvaW50ZXIuCisgKiBOb3RlOgorICoKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2wyX2xpbWl0U3lzdGVtTGVhcm5pbmdDbnRQb3J0TWFza19nZXQocnRrX3BvcnRtYXNrX3QgKnBQb3J0bWFzayk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sMl9sZWFybmluZ0NudF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcGVyLVBvcnQgY3VycmVudCBhdXRvIGxlYXJuaW5nIG51bWJlcgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBQb3J0IGlkLgorICogT3V0cHV0OgorICogICAgICBwTWFjX2NudCAtIEFTSUMgYXV0byBsZWFybmluZyBlbnRyaWVzIG51bWJlcgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGdldCBwZXItcG9ydCBBU0lDIGF1dG8gbGVhcm5pbmcgbnVtYmVyCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19sMl9sZWFybmluZ0NudF9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfbWFjX2NudF90ICpwTWFjX2NudCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sMl9mbG9vZFBvcnRNYXNrX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBmbG9vZGluZyBwb3J0bWFzaworICogSW5wdXQ6CisgKiAgICAgIHR5cGUgLSBmbG9vZGluZyB0eXBlLgorICogICAgICBwRmxvb2RfcG9ydG1hc2sgLSBmbG9vZGluZyBwb3JrbWFzaworICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX01BU0sgICAgLSBJbnZhbGlkIHBvcnRtYXNrLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgY2FuIHNldCB0aGUgZmxvb2RpbmcgbWFzay4KKyAqICAgICAgVGhlIGZsb29kaW5nIHR5cGUgaXMgYXMgZm9sbG93aW5nOgorICogICAgICAtIEZMT09EX1VOS05PV05EQQorICogICAgICAtIEZMT09EX1VOS05PV05NQworICogICAgICAtIEZMT09EX0JDCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19sMl9mbG9vZFBvcnRNYXNrX3NldChydGtfbDJfZmxvb2RfdHlwZV90IGZsb29vZF90eXBlLCBydGtfcG9ydG1hc2tfdCAqcEZsb29kX3BvcnRtYXNrKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2Zsb29kUG9ydE1hc2tfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGZsb29kaW5nIHBvcnRtYXNrCisgKiBJbnB1dDoKKyAqICAgICAgdHlwZSAtIGZsb29kaW5nIHR5cGUuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBGbG9vZF9wb3J0bWFzayAtIGZsb29kaW5nIHBvcmttYXNrCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgY2FuIGdldCB0aGUgZmxvb2RpbmcgbWFzay4KKyAqICAgICAgVGhlIGZsb29kaW5nIHR5cGUgaXMgYXMgZm9sbG93aW5nOgorICogICAgICAtIEZMT09EX1VOS05PV05EQQorICogICAgICAtIEZMT09EX1VOS05PV05NQworICogICAgICAtIEZMT09EX0JDCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19sMl9mbG9vZFBvcnRNYXNrX2dldChydGtfbDJfZmxvb2RfdHlwZV90IGZsb29vZF90eXBlLCBydGtfcG9ydG1hc2tfdCAqcEZsb29kX3BvcnRtYXNrKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2xvY2FsUGt0UGVybWl0X3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwZXJtaXR0aW9uIG9mIGZyYW1lcyBpZiBzb3VyY2UgcG9ydCBhbmQgZGVzdGluYXRpb24gcG9ydCBhcmUgdGhlIHNhbWUuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiAgICAgIHBlcm1pdCAtIHBlcm1pdHRpb24gc3RhdHVzCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9FTkFCTEUgICAgICAgLSBJbnZhbGlkIHBlcm1pdCB2YWx1ZS4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGlzIHNldHRlZCB0byBwZXJtaXQgZnJhbWUgaWYgaXRzIHNvdXJjZSBwb3J0IGlzIGVxdWFsIHRvIGRlc3RpbmF0aW9uIHBvcnQuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19sMl9sb2NhbFBrdFBlcm1pdF9zZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfZW5hYmxlX3QgcGVybWl0KTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2xvY2FsUGt0UGVybWl0X2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwZXJtaXR0aW9uIG9mIGZyYW1lcyBpZiBzb3VyY2UgcG9ydCBhbmQgZGVzdGluYXRpb24gcG9ydCBhcmUgdGhlIHNhbWUuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBQZXJtaXQgLSBwZXJtaXR0aW9uIHN0YXR1cworICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGlzIHRvIGdldCBwZXJtaXR0aW9uIHN0YXR1cyBmb3IgZnJhbWVzIGlmIGl0cyBzb3VyY2UgcG9ydCBpcyBlcXVhbCB0byBkZXN0aW5hdGlvbiBwb3J0LgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfbDJfbG9jYWxQa3RQZXJtaXRfZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2VuYWJsZV90ICpwUGVybWl0KTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2FnaW5nX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBMVVQgYWdnaW5nIG91dCBzcGVlZAorICogSW5wdXQ6CisgKiAgICAgIGFnaW5nX3RpbWUgLSBBZ2dpbmcgb3V0IHRpbWUuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAgICAgLSBpbnB1dCBvdXQgb2YgcmFuZ2UuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBzZXQgTFVUIGFnZ2luZyBvdXQgcGVyaW9kIGZvciBlYWNoIGVudHJ5IGFuZCB0aGUgcmFuZ2UgaXMgZnJvbSAxNHMgdG8gODAwcy4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2wyX2FnaW5nX3NldChydGtfbDJfYWdlX3RpbWVfdCBhZ2luZ190aW1lKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2FnaW5nX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBMVVQgYWdnaW5nIG91dCB0aW1lCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwRW5hYmxlIC0gQWdpbmcgc3RhdHVzCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IExVVCBhZ2dpbmcgb3V0IHBlcmlvZCBmb3IgZWFjaCBlbnRyeS4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2wyX2FnaW5nX2dldChydGtfbDJfYWdlX3RpbWVfdCAqcEFnaW5nX3RpbWUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbDJfaXBNY2FzdEFkZHJMb29rdXBfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IEx1dCBJUCBtdWx0aWNhc3QgbG9va3VwIGZ1bmN0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgdHlwZSAtIExvb2t1cCB0eXBlIGZvciBJUE1DIHBhY2tldC4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiB3b3JrIHdpdGggcnRrX2wyX2lwTWNhc3RBZGRyTG9va3VwRXhjZXB0aW9uX2FkZC4KKyAqICAgICAgSWYgdXNlcnMgc2V0IHRoZSBsb29rdXAgdHlwZSB0byBESVAsIHRoZSBncm91cCBpbiBleGNlcHRpb24gdGFibGUKKyAqICAgICAgd2lsbCBiZSBsb29rdXAgYnkgRElQK1NJUAorICogICAgICBJZiB1c2VycyBzZXQgdGhlIGxvb2t1cCB0eXBlIHRvIERJUCtTSVAsIHRoZSBncm91cCBpbiBleGNlcHRpb24gdGFibGUKKyAqICAgICAgd2lsbCBiZSBsb29rdXAgYnkgb25seSBESVAKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2wyX2lwTWNhc3RBZGRyTG9va3VwX3NldChydGtfbDJfaXBtY19sb29rdXBfdHlwZV90IHR5cGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbDJfaXBNY2FzdEFkZHJMb29rdXBfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IEx1dCBJUCBtdWx0aWNhc3QgbG9va3VwIGZ1bmN0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZS4KKyAqIE91dHB1dDoKKyAqICAgICAgcFR5cGUgLSBMb29rdXAgdHlwZSBmb3IgSVBNQyBwYWNrZXQuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfbDJfaXBNY2FzdEFkZHJMb29rdXBfZ2V0KHJ0a19sMl9pcG1jX2xvb2t1cF90eXBlX3QgKnBUeXBlKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2lwTWNhc3RGb3J3YXJkUm91dGVyUG9ydF9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgSVBNQyBwYWNrZXQgZm9yd2FyZCB0byByb3VudGVyIHBvcnQgYWxzbyBvciBub3QKKyAqIElucHV0OgorICogICAgICBlbmFibGVkIC0gMTogSW5sY3VkZSByb3V0ZXIgcG9ydCwgMCwgZXhjbHVkZSByb3V0ZXIgcG9ydAorICogT3V0cHV0OgorICogICAgICBOb25lLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19sMl9pcE1jYXN0Rm9yd2FyZFJvdXRlclBvcnRfc2V0KHJ0a19lbmFibGVfdCBlbmFibGVkKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2lwTWNhc3RGb3J3YXJkUm91dGVyUG9ydF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgSVBNQyBwYWNrZXQgZm9yd2FyZCB0byByb3VudGVyIHBvcnQgYWxzbyBvciBub3QKKyAqIElucHV0OgorICogICAgICBOb25lLgorICogT3V0cHV0OgorICogICAgICBwRW5hYmxlZCAgICAtIDE6IElubGN1ZGUgcm91dGVyIHBvcnQsIDAsIGV4Y2x1ZGUgcm91dGVyIHBvcnQKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAtIE51bGwgcG9pbnRlcgorICogTm90ZToKKyAqCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19sMl9pcE1jYXN0Rm9yd2FyZFJvdXRlclBvcnRfZ2V0KHJ0a19lbmFibGVfdCAqcEVuYWJsZWQpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbDJfaXBNY2FzdEdyb3VwRW50cnlfYWRkCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQWRkIGFuIElQIE11bHRpY2FzdCBlbnRyeSB0byBncm91cCB0YWJsZQorICogSW5wdXQ6CisgKiAgICAgIGlwX2FkZHIgICAgIC0gSVAgYWRkcmVzcworICogICAgICB2aWQgICAgICAgICAtIFZMQU4gSUQKKyAqICAgICAgcFBvcnRtYXNrICAgLSBwb3J0bWFzaworICogT3V0cHV0OgorICogICAgICBOb25lLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfVEJMX0ZVTEwgICAgLSBUYWJsZSBGdWxsCisgKiBOb3RlOgorICogICAgICBBZGQgYW4gZW50cnkgdG8gSVAgTXVsdGljYXN0IEdyb3VwIHRhYmxlLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfbDJfaXBNY2FzdEdyb3VwRW50cnlfYWRkKGlwYWRkcl90IGlwX2FkZHIsIHJ0a191aW50MzIgdmlkLCBydGtfcG9ydG1hc2tfdCAqcFBvcnRtYXNrKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2lwTWNhc3RHcm91cEVudHJ5X2RlbAorICogRGVzY3JpcHRpb246CisgKiAgICAgIERlbGV0ZSBhbiBlbnRyeSBmcm9tIElQIE11bHRpY2FzdCBncm91cCB0YWJsZQorICogSW5wdXQ6CisgKiAgICAgIGlwX2FkZHIgICAgIC0gSVAgYWRkcmVzcworICogICAgICB2aWQgICAgICAgICAtIFZMQU4gSUQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1RCTF9GVUxMICAgIC0gVGFibGUgRnVsbAorICogTm90ZToKKyAqICAgICAgRGVsZXRlIGFuIGVudHJ5IGZyb20gSVAgTXVsdGljYXN0IGdyb3VwIHRhYmxlLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfbDJfaXBNY2FzdEdyb3VwRW50cnlfZGVsKGlwYWRkcl90IGlwX2FkZHIsIHJ0a191aW50MzIgdmlkKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2lwTWNhc3RHcm91cEVudHJ5X2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIGdldCBhbiBlbnRyeSBmcm9tIElQIE11bHRpY2FzdCBncm91cCB0YWJsZQorICogSW5wdXQ6CisgKiAgICAgIGlwX2FkZHIgICAgIC0gSVAgYWRkcmVzcworICogICAgICB2aWQgICAgICAgICAtIFZMQU4gSUQKKyAqIE91dHB1dDoKKyAqICAgICAgcFBvcnRtYXNrICAgLSBtZW1iZXIgcG9ydCBtYXNrCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9UQkxfRlVMTCAgICAtIFRhYmxlIEZ1bGwKKyAqIE5vdGU6CisgKiAgICAgIERlbGV0ZSBhbiBlbnRyeSBmcm9tIElQIE11bHRpY2FzdCBncm91cCB0YWJsZS4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2wyX2lwTWNhc3RHcm91cEVudHJ5X2dldChpcGFkZHJfdCBpcF9hZGRyLCBydGtfdWludDMyIHZpZCwgcnRrX3BvcnRtYXNrX3QgKnBQb3J0bWFzayk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sMl9lbnRyeV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgTFVUIHVuaWNhc3QgZW50cnkuCisgKiBJbnB1dDoKKyAqICAgICAgcEwyX2VudHJ5IC0gSW5kZXggZmllbGQgaW4gdGhlIHN0cnVjdHVyZS4KKyAqIE91dHB1dDoKKyAqICAgICAgcEwyX2VudHJ5IC0gb3RoZXIgZmllbGRzIHN1Y2ggYXMgTUFDLCBwb3J0LCBhZ2UuLi4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0wyX0VNUFRZX0VOVFJZICAgLSBFbXB0eSBMVVQgZW50cnkuCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBnZXQgYWRkcmVzcyBieSBpbmRleCBmcm9tIDB+MjExMS4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2wyX2VudHJ5X2dldChydGtfbDJfYWRkcl90YWJsZV90ICpwTDJfZW50cnkpOworCisKKyNlbmRpZiAvKiBfX1JUS19BUElfTDJfSF9fICovCisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL2xlYWt5LmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9sZWFreS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZWY2MGQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9sZWFreS5oCkBAIC0wLDAgKzEsMzcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqIFB1cnBvc2UgOiBSVEw4MzY3L1JUTDgzNjdDIHN3aXRjaCBoaWdoLWxldmVsIEFQSQorICoKKyAqIEZlYXR1cmUgOiBUaGUgZmlsZSBpbmNsdWRlcyBMZWFreSBtb2R1bGUgaGlnaC1sYXllciBBUEkgZGVmaW5hdGlvbgorICoKKyAqLworCisjaWZuZGVmIF9fUlRLX0FQSV9MRUFLWV9IX18KKyNkZWZpbmUgX19SVEtfQVBJX0xFQUtZX0hfXworCisKK3R5cGVkZWYgZW51bSBydGtfbGVha3lfdHlwZV9lCit7CisgICAgTEVBS1lfQlJHX0dST1VQID0gMCwKKyAgICBMRUFLWV9GRF9QQVVTRSwKKyAgICBMRUFLWV9TUF9NQ0FTVCwKKyAgICBMRUFLWV8xWF9QQUUsCisgICAgTEVBS1lfVU5ERUZfQlJHXzA0LAorICAgIExFQUtZX1VOREVGX0JSR18wNSwKKyAgICBMRUFLWV9VTkRFRl9CUkdfMDYsCisgICAgTEVBS1lfVU5ERUZfQlJHXzA3LAorICAgIExFQUtZX1BST1ZJREVSX0JSSURHRV9HUk9VUF9BRERSRVNTLAorICAgIExFQUtZX1VOREVGX0JSR18wOSwKKyAgICBMRUFLWV9VTkRFRl9CUkdfMEEsCisgICAgTEVBS1lfVU5ERUZfQlJHXzBCLAorICAgIExFQUtZX1VOREVGX0JSR18wQywKKyAgICBMRUFLWV9QUk9WSURFUl9CUklER0VfR1ZSUF9BRERSRVNTLAorICAgIExFQUtZXzgwMjFBQiwKKyAgICBMRUFLWV9VTkRFRl9CUkdfMEYsCisgICAgTEVBS1lfQlJHX01OR0VNRU5ULAorICAgIExFQUtZX1VOREVGSU5FRF8xMSwKKyAgICBMRUFLWV9VTkRFRklORURfMTIsCisgICAgTEVBS1lfVU5ERUZJTkVEXzEzLAorICAgIExFQUtZX1VOREVGSU5FRF8xNCwKKyAgICBMRUFLWV9VTkRFRklORURfMTUsCisgICAgTEVBS1lfVU5ERUZJTkVEXzE2LAorICAgIExFQUtZX1VOREVGSU5FRF8xNywKKyAgICBMRUFLWV9VTkRFRklORURfMTgsCisgICAgTEVBS1lfVU5ERUZJTkVEXzE5LAorICAgIExFQUtZX1VOREVGSU5FRF8xQSwKKyAgICBMRUFLWV9VTkRFRklORURfMUIsCisgICAgTEVBS1lfVU5ERUZJTkVEXzFDLAorICAgIExFQUtZX1VOREVGSU5FRF8xRCwKKyAgICBMRUFLWV9VTkRFRklORURfMUUsCisgICAgTEVBS1lfVU5ERUZJTkVEXzFGLAorICAgIExFQUtZX0dNUlAsCisgICAgTEVBS1lfR1ZSUCwKKyAgICBMRUFLWV9VTkRFRl9HQVJQXzIyLAorICAgIExFQUtZX1VOREVGX0dBUlBfMjMsCisgICAgTEVBS1lfVU5ERUZfR0FSUF8yNCwKKyAgICBMRUFLWV9VTkRFRl9HQVJQXzI1LAorICAgIExFQUtZX1VOREVGX0dBUlBfMjYsCisgICAgTEVBS1lfVU5ERUZfR0FSUF8yNywKKyAgICBMRUFLWV9VTkRFRl9HQVJQXzI4LAorICAgIExFQUtZX1VOREVGX0dBUlBfMjksCisgICAgTEVBS1lfVU5ERUZfR0FSUF8yQSwKKyAgICBMRUFLWV9VTkRFRl9HQVJQXzJCLAorICAgIExFQUtZX1VOREVGX0dBUlBfMkMsCisgICAgTEVBS1lfVU5ERUZfR0FSUF8yRCwKKyAgICBMRUFLWV9VTkRFRl9HQVJQXzJFLAorICAgIExFQUtZX1VOREVGX0dBUlBfMkYsCisgICAgTEVBS1lfSUdNUCwKKyAgICBMRUFLWV9JUE1VTFRJQ0FTVCwKKyAgICBMRUFLWV9DRFAsCisgICAgTEVBS1lfQ1NTVFAsCisgICAgTEVBS1lfTExEUCwKKyAgICBMRUFLWV9FTkQsCit9cnRrX2xlYWt5X3R5cGVfdDsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2xlYWt5X3ZsYW5fc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IFZMQU4gbGVha3kuCisgKiBJbnB1dDoKKyAqICAgICAgdHlwZSAtIFBhY2tldCB0eXBlIGZvciBWTEFOIGxlYWt5LgorICogICAgICBlbmFibGUgLSBMZWFreSBzdGF0dXMuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX0VOQUJMRSAgICAgICAtIEludmFsaWQgZW5hYmxlIGlucHV0CisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBjYW4gc2V0IFZMQU4gbGVha3kgZm9yIFJNQSAsSUdNUC9NTEQsIENEUCwgQ1NTVFAsIGFuZCBMTERQIHBhY2tldHMuCisgKiAgICAgIFRoZSBsZWFreSBmcmFtZSB0eXBlcyBhcmUgYXMgZm9sbG93aW5nOgorICogICAgICAtIExFQUtZX0JSR19HUk9VUCwKKyAqICAgICAgLSBMRUFLWV9GRF9QQVVTRSwKKyAqICAgICAgLSBMRUFLWV9TUF9NQ0FTVCwKKyAqICAgICAgLSBMRUFLWV8xWF9QQUUsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfQlJHXzA0LAorICogICAgICAtIExFQUtZX1VOREVGX0JSR18wNSwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9CUkdfMDYsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfQlJHXzA3LAorICogICAgICAtIExFQUtZX1BST1ZJREVSX0JSSURHRV9HUk9VUF9BRERSRVNTLAorICogICAgICAtIExFQUtZX1VOREVGX0JSR18wOSwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9CUkdfMEEsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfQlJHXzBCLAorICogICAgICAtIExFQUtZX1VOREVGX0JSR18wQywKKyAqICAgICAgLSBMRUFLWV9QUk9WSURFUl9CUklER0VfR1ZSUF9BRERSRVNTLAorICogICAgICAtIExFQUtZXzgwMjFBQiwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9CUkdfMEYsCisgKiAgICAgIC0gTEVBS1lfQlJHX01OR0VNRU5ULAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xMSwKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMTIsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzEzLAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xNCwKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMTUsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzE2LAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xNywKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMTgsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzE5LAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xQSwKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMUIsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzFDLAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xRCwKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMUUsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzFGLAorICogICAgICAtIExFQUtZX0dNUlAsCisgKiAgICAgIC0gTEVBS1lfR1ZSUCwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzIyLAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMjMsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yNCwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzI1LAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMjYsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yNywKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzI4LAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMjksCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yQSwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzJCLAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMkMsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yRCwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzJFLAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMkYsCisgKiAgICAgIC0gTEVBS1lfSUdNUCwKKyAqICAgICAgLSBMRUFLWV9JUE1VTFRJQ0FTVC4KKyAqICAgICAgLSBMRUFLWV9DRFAsCisgKiAgICAgIC0gTEVBS1lfQ1NTVFAsCisgKiAgICAgIC0gTEVBS1lfTExEUC4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2xlYWt5X3ZsYW5fc2V0KHJ0a19sZWFreV90eXBlX3QgdHlwZSwgcnRrX2VuYWJsZV90IGVuYWJsZSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sZWFreV92bGFuX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBWTEFOIGxlYWt5LgorICogSW5wdXQ6CisgKiAgICAgIHR5cGUgLSBQYWNrZXQgdHlwZSBmb3IgVkxBTiBsZWFreS4KKyAqIE91dHB1dDoKKyAqICAgICAgcEVuYWJsZSAtIExlYWt5IHN0YXR1cy4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBnZXQgVkxBTiBsZWFreSBzdGF0dXMgZm9yIFJNQSAsSUdNUC9NTEQsIENEUCwgQ1NTVFAsIGFuZCBMTERQICBwYWNrZXRzLgorICogICAgICBUaGUgbGVha3kgZnJhbWUgdHlwZXMgYXJlIGFzIGZvbGxvd2luZzoKKyAqICAgICAgLSBMRUFLWV9CUkdfR1JPVVAsCisgKiAgICAgIC0gTEVBS1lfRkRfUEFVU0UsCisgKiAgICAgIC0gTEVBS1lfU1BfTUNBU1QsCisgKiAgICAgIC0gTEVBS1lfMVhfUEFFLAorICogICAgICAtIExFQUtZX1VOREVGX0JSR18wNCwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9CUkdfMDUsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfQlJHXzA2LAorICogICAgICAtIExFQUtZX1VOREVGX0JSR18wNywKKyAqICAgICAgLSBMRUFLWV9QUk9WSURFUl9CUklER0VfR1JPVVBfQUREUkVTUywKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9CUkdfMDksCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfQlJHXzBBLAorICogICAgICAtIExFQUtZX1VOREVGX0JSR18wQiwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9CUkdfMEMsCisgKiAgICAgIC0gTEVBS1lfUFJPVklERVJfQlJJREdFX0dWUlBfQUREUkVTUywKKyAqICAgICAgLSBMRUFLWV84MDIxQUIsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfQlJHXzBGLAorICogICAgICAtIExFQUtZX0JSR19NTkdFTUVOVCwKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMTEsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzEyLAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xMywKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMTQsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzE1LAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xNiwKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMTcsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzE4LAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xOSwKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMUEsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzFCLAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xQywKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMUQsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzFFLAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xRiwKKyAqICAgICAgLSBMRUFLWV9HTVJQLAorICogICAgICAtIExFQUtZX0dWUlAsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yMiwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzIzLAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMjQsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yNSwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzI2LAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMjcsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yOCwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzI5LAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMkEsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yQiwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzJDLAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMkQsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yRSwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzJGLAorICogICAgICAtIExFQUtZX0lHTVAsCisgKiAgICAgIC0gTEVBS1lfSVBNVUxUSUNBU1QuCisgKiAgICAgIC0gTEVBS1lfQ0RQLAorICogICAgICAtIExFQUtZX0NTU1RQLAorICogICAgICAtIExFQUtZX0xMRFAuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19sZWFreV92bGFuX2dldChydGtfbGVha3lfdHlwZV90IHR5cGUsIHJ0a19lbmFibGVfdCAqcEVuYWJsZSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sZWFreV9wb3J0SXNvbGF0aW9uX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwb3J0IGlzb2xhdGlvbiBsZWFreS4KKyAqIElucHV0OgorICogICAgICB0eXBlIC0gUGFja2V0IHR5cGUgZm9yIHBvcnQgaXNvbGF0aW9uIGxlYWt5LgorICogICAgICBlbmFibGUgLSBMZWFreSBzdGF0dXMuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX0VOQUJMRSAgICAgICAtIEludmFsaWQgZW5hYmxlIGlucHV0CisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBjYW4gc2V0IHBvcnQgaXNvbGF0aW9uIGxlYWt5IGZvciBSTUEgLElHTVAvTUxELCBDRFAsIENTU1RQLCBhbmQgTExEUCAgcGFja2V0cy4KKyAqICAgICAgVGhlIGxlYWt5IGZyYW1lIHR5cGVzIGFyZSBhcyBmb2xsb3dpbmc6CisgKiAgICAgIC0gTEVBS1lfQlJHX0dST1VQLAorICogICAgICAtIExFQUtZX0ZEX1BBVVNFLAorICogICAgICAtIExFQUtZX1NQX01DQVNULAorICogICAgICAtIExFQUtZXzFYX1BBRSwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9CUkdfMDQsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfQlJHXzA1LAorICogICAgICAtIExFQUtZX1VOREVGX0JSR18wNiwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9CUkdfMDcsCisgKiAgICAgIC0gTEVBS1lfUFJPVklERVJfQlJJREdFX0dST1VQX0FERFJFU1MsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfQlJHXzA5LAorICogICAgICAtIExFQUtZX1VOREVGX0JSR18wQSwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9CUkdfMEIsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfQlJHXzBDLAorICogICAgICAtIExFQUtZX1BST1ZJREVSX0JSSURHRV9HVlJQX0FERFJFU1MsCisgKiAgICAgIC0gTEVBS1lfODAyMUFCLAorICogICAgICAtIExFQUtZX1VOREVGX0JSR18wRiwKKyAqICAgICAgLSBMRUFLWV9CUkdfTU5HRU1FTlQsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzExLAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xMiwKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMTMsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzE0LAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xNSwKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMTYsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzE3LAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xOCwKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMTksCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzFBLAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xQiwKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMUMsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzFELAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xRSwKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMUYsCisgKiAgICAgIC0gTEVBS1lfR01SUCwKKyAqICAgICAgLSBMRUFLWV9HVlJQLAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMjIsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yMywKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzI0LAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMjUsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yNiwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzI3LAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMjgsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yOSwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzJBLAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMkIsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yQywKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzJELAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMkUsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yRiwKKyAqICAgICAgLSBMRUFLWV9JR01QLAorICogICAgICAtIExFQUtZX0lQTVVMVElDQVNULgorICogICAgICAtIExFQUtZX0NEUCwKKyAqICAgICAgLSBMRUFLWV9DU1NUUCwKKyAqICAgICAgLSBMRUFLWV9MTERQLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfbGVha3lfcG9ydElzb2xhdGlvbl9zZXQocnRrX2xlYWt5X3R5cGVfdCB0eXBlLCBydGtfZW5hYmxlX3QgZW5hYmxlKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2xlYWt5X3BvcnRJc29sYXRpb25fZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHBvcnQgaXNvbGF0aW9uIGxlYWt5LgorICogSW5wdXQ6CisgKiAgICAgIHR5cGUgLSBQYWNrZXQgdHlwZSBmb3IgcG9ydCBpc29sYXRpb24gbGVha3kuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBFbmFibGUgLSBMZWFreSBzdGF0dXMuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBjYW4gZ2V0IHBvcnQgaXNvbGF0aW9uIGxlYWt5IHN0YXR1cyBmb3IgUk1BICxJR01QL01MRCwgQ0RQLCBDU1NUUCwgYW5kIExMRFAgIHBhY2tldHMuCisgKiAgICAgIFRoZSBsZWFreSBmcmFtZSB0eXBlcyBhcmUgYXMgZm9sbG93aW5nOgorICogICAgICAtIExFQUtZX0JSR19HUk9VUCwKKyAqICAgICAgLSBMRUFLWV9GRF9QQVVTRSwKKyAqICAgICAgLSBMRUFLWV9TUF9NQ0FTVCwKKyAqICAgICAgLSBMRUFLWV8xWF9QQUUsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfQlJHXzA0LAorICogICAgICAtIExFQUtZX1VOREVGX0JSR18wNSwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9CUkdfMDYsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfQlJHXzA3LAorICogICAgICAtIExFQUtZX1BST1ZJREVSX0JSSURHRV9HUk9VUF9BRERSRVNTLAorICogICAgICAtIExFQUtZX1VOREVGX0JSR18wOSwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9CUkdfMEEsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfQlJHXzBCLAorICogICAgICAtIExFQUtZX1VOREVGX0JSR18wQywKKyAqICAgICAgLSBMRUFLWV9QUk9WSURFUl9CUklER0VfR1ZSUF9BRERSRVNTLAorICogICAgICAtIExFQUtZXzgwMjFBQiwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9CUkdfMEYsCisgKiAgICAgIC0gTEVBS1lfQlJHX01OR0VNRU5ULAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xMSwKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMTIsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzEzLAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xNCwKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMTUsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzE2LAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xNywKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMTgsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzE5LAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xQSwKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMUIsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzFDLAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xRCwKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMUUsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzFGLAorICogICAgICAtIExFQUtZX0dNUlAsCisgKiAgICAgIC0gTEVBS1lfR1ZSUCwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzIyLAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMjMsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yNCwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzI1LAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMjYsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yNywKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzI4LAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMjksCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yQSwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzJCLAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMkMsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yRCwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzJFLAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMkYsCisgKiAgICAgIC0gTEVBS1lfSUdNUCwKKyAqICAgICAgLSBMRUFLWV9JUE1VTFRJQ0FTVC4KKyAqICAgICAgLSBMRUFLWV9DRFAsCisgKiAgICAgIC0gTEVBS1lfQ1NTVFAsCisgKiAgICAgIC0gTEVBS1lfTExEUC4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2xlYWt5X3BvcnRJc29sYXRpb25fZ2V0KHJ0a19sZWFreV90eXBlX3QgdHlwZSwgcnRrX2VuYWJsZV90ICpwRW5hYmxlKTsKKworI2VuZGlmIC8qIF9fUlRLX0FQSV9MRUFLWV9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvbGVkLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9sZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWFjYzdjCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvbGVkLmgKQEAgLTAsMCArMSw0ODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogUHVycG9zZSA6IFJUTDgzNjcvUlRMODM2N0Mgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJCisgKgorICogRmVhdHVyZSA6IFRoZSBmaWxlIGluY2x1ZGVzIExFRCBtb2R1bGUgaGlnaC1sYXllciBBUEkgZGVmaW5hdGlvbgorICoKKyAqLworCisjaWZuZGVmIF9fUlRLX0FQSV9MRURfSF9fCisjZGVmaW5lIF9fUlRLX0FQSV9MRURfSF9fCisKK3R5cGVkZWYgZW51bSBydGtfbGVkX29wZXJhdGlvbl9lCit7CisgICAgTEVEX09QX1NDQU49MCwKKyAgICBMRURfT1BfUEFSQUxMRUwsCisgICAgTEVEX09QX1NFUklBTCwKKyAgICBMRURfT1BfRU5ELAorfXJ0a19sZWRfb3BlcmF0aW9uX3Q7CisKKwordHlwZWRlZiBlbnVtIHJ0a19sZWRfYWN0aXZlX2UKK3sKKyAgICBMRURfQUNUSVZFX0hJR0g9MCwKKyAgICBMRURfQUNUSVZFX0xPVywKKyAgICBMRURfQUNUSVZFX0VORCwKK31ydGtfbGVkX2FjdGl2ZV90OworCit0eXBlZGVmIGVudW0gcnRrX2xlZF9jb25maWdfZQoreworICAgIExFRF9DT05GSUdfTEVET0ZGPTAsCisgICAgTEVEX0NPTkZJR19EVVBDT0wsCisgICAgTEVEX0NPTkZJR19MSU5LX0FDVCwKKyAgICBMRURfQ09ORklHX1NQRDEwMDAsCisgICAgTEVEX0NPTkZJR19TUEQxMDAsCisgICAgTEVEX0NPTkZJR19TUEQxMCwKKyAgICBMRURfQ09ORklHX1NQRDEwMDBBQ1QsCisgICAgTEVEX0NPTkZJR19TUEQxMDBBQ1QsCisgICAgTEVEX0NPTkZJR19TUEQxMEFDVCwKKyAgICBMRURfQ09ORklHX1NQRDEwMDEwQUNULAorICAgIExFRF9DT05GSUdfTE9PUERFVEVDVCwKKyAgICBMRURfQ09ORklHX0VFRSwKKyAgICBMRURfQ09ORklHX0xJTktSWCwKKyAgICBMRURfQ09ORklHX0xJTktUWCwKKyAgICBMRURfQ09ORklHX01BU1RFUiwKKyAgICBMRURfQ09ORklHX0FDVCwKKyAgICBMRURfQ09ORklHX0VORCwKK31ydGtfbGVkX2NvbmdpZ190OworCit0eXBlZGVmIHN0cnVjdCBydGtfbGVkX2FiaWxpdHlfcworeworICAgIHJ0a19lbmFibGVfdCBsaW5rXzEwbTsKKyAgICBydGtfZW5hYmxlX3QgbGlua18xMDBtOworICAgIHJ0a19lbmFibGVfdCBsaW5rXzUwMG07CisgICAgcnRrX2VuYWJsZV90IGxpbmtfMTAwMG07CisgICAgcnRrX2VuYWJsZV90IGFjdF9yeDsKKyAgICBydGtfZW5hYmxlX3QgYWN0X3R4OworfXJ0a19sZWRfYWJpbGl0eV90OworCit0eXBlZGVmIGVudW0gcnRrX2xlZF9ibGlua19yYXRlX2UKK3sKKyAgICBMRURfQkxJTktSQVRFXzMyTVM9MCwKKyAgICBMRURfQkxJTktSQVRFXzY0TVMsCisgICAgTEVEX0JMSU5LUkFURV8xMjhNUywKKyAgICBMRURfQkxJTktSQVRFXzI1Nk1TLAorICAgIExFRF9CTElOS1JBVEVfNTEyTVMsCisgICAgTEVEX0JMSU5LUkFURV8xMDI0TVMsCisgICAgTEVEX0JMSU5LUkFURV80OE1TLAorICAgIExFRF9CTElOS1JBVEVfOTZNUywKKyAgICBMRURfQkxJTktSQVRFX0VORCwKK31ydGtfbGVkX2JsaW5rX3JhdGVfdDsKKwordHlwZWRlZiBlbnVtIHJ0a19sZWRfZ3JvdXBfZQoreworICAgIExFRF9HUk9VUF8wID0gMCwKKyAgICBMRURfR1JPVVBfMSwKKyAgICBMRURfR1JPVVBfMiwKKyAgICBMRURfR1JPVVBfRU5ECit9cnRrX2xlZF9ncm91cF90OworCisKK3R5cGVkZWYgZW51bSBydGtfbGVkX2ZvcmNlX21vZGVfZQoreworICAgIExFRF9GT1JDRV9OT1JNQUw9MCwKKyAgICBMRURfRk9SQ0VfQkxJTkssCisgICAgTEVEX0ZPUkNFX09GRiwKKyAgICBMRURfRk9SQ0VfT04sCisgICAgTEVEX0ZPUkNFX0VORAorfXJ0a19sZWRfZm9yY2VfbW9kZV90OworCit0eXBlZGVmIGVudW0gcnRrX2xlZF9zZXJpYWxPdXRwdXRfZQoreworICAgIFNFUklBTF9MRURfTk9ORSA9IDAsCisgICAgU0VSSUFMX0xFRF8wLAorICAgIFNFUklBTF9MRURfMF8xLAorICAgIFNFUklBTF9MRURfMF8yLAorICAgIFNFUklBTF9MRURfRU5ELAorfXJ0a19sZWRfc2VyaWFsT3V0cHV0X3Q7CisKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2xlZF9lbmFibGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IExlZCBlbmFibGUgY29uZ2l1cmF0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgZ3JvdXAgICAgICAgLSBMRUQgZ3JvdXAgaWQuCisgKiAgICAgIHBQb3J0bWFzayAgICAtIExFRCBlbmFibGUgcG9ydCBtYXNrLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSBMRUQgcGVyIHBvcnQgcGVyIGdyb3VwLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfbGVkX2VuYWJsZV9zZXQocnRrX2xlZF9ncm91cF90IGdyb3VwLCBydGtfcG9ydG1hc2tfdCAqcFBvcnRtYXNrKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2xlZF9lbmFibGVfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IExlZCBlbmFibGUgY29uZ2l1cmF0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgZ3JvdXAgLSBMRUQgZ3JvdXAgaWQuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBQb3J0bWFzayAtIExFRCBlbmFibGUgcG9ydCBtYXNrLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gYmUgdXNlZCB0byBnZXQgTEVEIGVuYWJsZSBzdGF0dXMuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19sZWRfZW5hYmxlX2dldChydGtfbGVkX2dyb3VwX3QgZ3JvdXAsIHJ0a19wb3J0bWFza190ICpwUG9ydG1hc2spOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbGVkX29wZXJhdGlvbl9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgTGVkIG9wZXJhdGlvbiBtb2RlCisgKiBJbnB1dDoKKyAqICAgICAgbW9kZSAtIExFRCBvcGVyYXRpb24gbW9kZS4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gc2V0IExlZCBvcGVyYXRpb24gbW9kZS4KKyAqICAgICAgVGhlIG1vZGVzIHRoYXQgY2FuIGJlIHNldCBhcmUgYXMgZm9sbG93aW5nOgorICogICAgICAtIExFRF9PUF9TQ0FOLAorICogICAgICAtIExFRF9PUF9QQVJBTExFTCwKKyAqICAgICAgLSBMRURfT1BfU0VSSUFMLAorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfbGVkX29wZXJhdGlvbl9zZXQocnRrX2xlZF9vcGVyYXRpb25fdCBtb2RlKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2xlZF9vcGVyYXRpb25fZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IExlZCBvcGVyYXRpb24gbW9kZQorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcE1vZGUgLSBTdXBwb3J0IExFRCBvcGVyYXRpb24gbW9kZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGdldCBMZWQgb3BlcmF0aW9uIG1vZGUuCisgKiAgICAgIFRoZSBtb2RlcyB0aGF0IGNhbiBiZSBzZXQgYXJlIGFzIGZvbGxvd2luZzoKKyAqICAgICAgLSBMRURfT1BfU0NBTiwKKyAqICAgICAgLSBMRURfT1BfUEFSQUxMRUwsCisgKiAgICAgIC0gTEVEX09QX1NFUklBTCwKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2xlZF9vcGVyYXRpb25fZ2V0KHJ0a19sZWRfb3BlcmF0aW9uX3QgKnBNb2RlKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2xlZF9tb2RlRm9yY2Vfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IExlZCBncm91cCB0byBjb25naXVyYXRpb24gZm9yY2UgbW9kZQorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBwb3J0IElECisgKiAgICAgIGdyb3VwICAgLSBTdXBwb3J0IExFRCBncm91cCBpZC4KKyAqICAgICAgbW9kZSAgICAtIFN1cHBvcnQgTEVEIGZvcmNlIG1vZGUuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEVycm9yIFBvcnQgSUQKKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGZvcmNlIHRvIG9uZSBmb3JjZSBtb2RlLgorICogICAgICBUaGUgZm9yY2UgbW9kZXMgdGhhdCBjYW4gYmUgc2V0IGFyZSBhcyBmb2xsb3dpbmc6CisgKiAgICAgIC0gTEVEX0ZPUkNFX05PUk1BTCwKKyAqICAgICAgLSBMRURfRk9SQ0VfQkxJTkssCisgKiAgICAgIC0gTEVEX0ZPUkNFX09GRiwKKyAqICAgICAgLSBMRURfRk9SQ0VfT04uCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19sZWRfbW9kZUZvcmNlX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19sZWRfZ3JvdXBfdCBncm91cCwgcnRrX2xlZF9mb3JjZV9tb2RlX3QgbW9kZSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sZWRfbW9kZUZvcmNlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBMZWQgZ3JvdXAgdG8gY29uZ2l1cmF0aW9uIGZvcmNlIG1vZGUKKyAqIElucHV0OgorICogICAgICBwb3J0ICAtIHBvcnQgSUQKKyAqICAgICAgZ3JvdXAgLSBTdXBwb3J0IExFRCBncm91cCBpZC4KKyAqICAgICAgcE1vZGUgLSBTdXBwb3J0IExFRCBmb3JjZSBtb2RlLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBFcnJvciBQb3J0IElECisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBnZXQgZm9yY2VkIExlZCBncm91cCBtb2RlLgorICogICAgICBUaGUgZm9yY2UgbW9kZXMgdGhhdCBjYW4gYmUgc2V0IGFyZSBhcyBmb2xsb3dpbmc6CisgKiAgICAgIC0gTEVEX0ZPUkNFX05PUk1BTCwKKyAqICAgICAgLSBMRURfRk9SQ0VfQkxJTkssCisgKiAgICAgIC0gTEVEX0ZPUkNFX09GRiwKKyAqICAgICAgLSBMRURfRk9SQ0VfT04uCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19sZWRfbW9kZUZvcmNlX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19sZWRfZ3JvdXBfdCBncm91cCwgcnRrX2xlZF9mb3JjZV9tb2RlX3QgKnBNb2RlKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2xlZF9ibGlua1JhdGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IExFRCBibGlua2luZyByYXRlCisgKiBJbnB1dDoKKyAqICAgICAgYmxpbmtSYXRlIC0gYmxpbmtpbmcgcmF0ZS4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgQVNJQyBzdXBwb3J0IDYgdHlwZXMgb2YgTEVEIGJsaW5raW5nIHJhdGVzIGF0IDQzbXMsIDg0bXMsIDEyMG1zLCAxNzBtcywgMzQwbXMgYW5kIDY3MG1zLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfbGVkX2JsaW5rUmF0ZV9zZXQocnRrX2xlZF9ibGlua19yYXRlX3QgYmxpbmtSYXRlKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2xlZF9ibGlua1JhdGVfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IExFRCBibGlua2luZyByYXRlIGF0IG1vZGUgMCB0byBtb2RlIDMKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBCbGlua1JhdGUgLSBibGlua2luZyByYXRlLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhlcmUgYXJlICA2IHR5cGVzIG9mIExFRCBibGlua2luZyByYXRlcyBhdCA0M21zLCA4NG1zLCAxMjBtcywgMTcwbXMsIDM0MG1zIGFuZCA2NzBtcy4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2xlZF9ibGlua1JhdGVfZ2V0KHJ0a19sZWRfYmxpbmtfcmF0ZV90ICpwQmxpbmtSYXRlKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2xlZF9ncm91cENvbmZpZ19zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgcGVyIGdyb3VwIExlZCB0byBjb25naXVyYXRpb24gbW9kZQorICogSW5wdXQ6CisgKiAgICAgIGdyb3VwICAgLSBMRUQgZ3JvdXAuCisgKiAgICAgIGNvbmZpZyAgLSBMRUQgY29uZmlndXJhdGlvbgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBzZXQgTEVEIGluZGljYXRlZCBpbmZvcm1hdGlvbiBjb25maWd1cmF0aW9uIGZvciBlYWNoIExFRCBncm91cCB3aXRoIDEgdG8gMSBsZWQgbWFwcGluZyB0byBlYWNoIHBvcnQuCisgKiAgICAgIC0gRGVmaW5pdGlvbiAgTEVEIFN0YXR1c2VzICAgICAgRGVzY3JpcHRpb24KKyAqICAgICAgLSAwMDAwICAgICAgICBMRURfT2ZmICAgICAgICAgICBMRUQgcGluIFRyaS1TdGF0ZS4KKyAqICAgICAgLSAwMDAxICAgICAgICBEdXAvQ29sICAgICAgICAgICBDb2xsaXNpb24sIEZ1bGwgZHVwbGV4IEluZGljYXRvci4KKyAqICAgICAgLSAwMDEwICAgICAgICBMaW5rL0FjdCAgICAgICAgICBMaW5rLCBBY3Rpdml0eSBJbmRpY2F0b3IuCisgKiAgICAgIC0gMDAxMSAgICAgICAgU3BkMTAwMCAgICAgICAgICAgMTAwME1iL3MgU3BlZWQgSW5kaWNhdG9yLgorICogICAgICAtIDAxMDAgICAgICAgIFNwZDEwMCAgICAgICAgICAgIDEwME1iL3MgU3BlZWQgSW5kaWNhdG9yLgorICogICAgICAtIDAxMDEgICAgICAgIFNwZDEwICAgICAgICAgICAgIDEwTWIvcyBTcGVlZCBJbmRpY2F0b3IuCisgKiAgICAgIC0gMDExMCAgICAgICAgU3BkMTAwMC9BY3QgICAgICAgMTAwME1iL3MgU3BlZWQvQWN0aXZpdHkgSW5kaWNhdG9yLgorICogICAgICAtIDAxMTEgICAgICAgIFNwZDEwMC9BY3QgICAgICAgIDEwME1iL3MgU3BlZWQvQWN0aXZpdHkgSW5kaWNhdG9yLgorICogICAgICAtIDEwMDAgICAgICAgIFNwZDEwL0FjdCAgICAgICAgIDEwTWIvcyBTcGVlZC9BY3Rpdml0eSBJbmRpY2F0b3IuCisgKiAgICAgIC0gMTAwMSAgICAgICAgU3BkMTAwICgxMCkvQWN0ICAgMTAvMTAwTWIvcyBTcGVlZC9BY3Rpdml0eSBJbmRpY2F0b3IuCisgKiAgICAgIC0gMTAxMCAgICAgICAgTG9vcERldGVjdCAgICAgICAgTG9vcERldGVjdCBJbmRpY2F0b3IuCisgKiAgICAgIC0gMTAxMSAgICAgICAgRUVFICAgICAgICAgICAgICAgRUVFIEluZGljYXRvci4KKyAqICAgICAgLSAxMTAwICAgICAgICBMaW5rL1J4ICAgICAgICAgICBMaW5rLCBBY3Rpdml0eSBJbmRpY2F0b3IuCisgKiAgICAgIC0gMTEwMSAgICAgICAgTGluay9UeCAgICAgICAgICAgTGluaywgQWN0aXZpdHkgSW5kaWNhdG9yLgorICogICAgICAtIDExMTAgICAgICAgIE1hc3RlciAgICAgICAgICAgIExpbmsgb24gTWFzdGVyIEluZGljYXRvci4KKyAqICAgICAgLSAxMTExICAgICAgICBBY3QgICAgICAgICAgICAgICBBY3Rpdml0eSBJbmRpY2F0b3IuIExvdyBmb3IgbGluayBlc3RhYmxpc2hlZC4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2xlZF9ncm91cENvbmZpZ19zZXQocnRrX2xlZF9ncm91cF90IGdyb3VwLCBydGtfbGVkX2NvbmdpZ190IGNvbmZpZyk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sZWRfZ3JvdXBDb25maWdfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IExlZCBncm91cCBjb25naXVyYXRpb24gbW9kZQorICogSW5wdXQ6CisgKiAgICAgIGdyb3VwIC0gTEVEIGdyb3VwLgorICogT3V0cHV0OgorICogICAgICBwQ29uZmlnIC0gTEVEIGNvbmZpZ3VyYXRpb24uCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICAgVGhlIEFQSSBjYW4gZ2V0IExFRCBpbmRpY2F0ZWQgaW5mb3JtYXRpb24gY29uZmlndXJhdGlvbiBmb3IgZWFjaCBMRUQgZ3JvdXAuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19sZWRfZ3JvdXBDb25maWdfZ2V0KHJ0a19sZWRfZ3JvdXBfdCBncm91cCwgcnRrX2xlZF9jb25naWdfdCAqcENvbmZpZyk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sZWRfZ3JvdXBBYmlsaXR5X3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIENvbmZpZ3VyZSBwZXIgZ3JvdXAgTGVkIGFiaWxpdHkKKyAqIElucHV0OgorICogICAgICBncm91cCAgICAtIExFRCBncm91cC4KKyAqICAgICAgcEFiaWxpdHkgLSBMRUQgYWJpbGl0eQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBOb25lLgorICovCisKK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19sZWRfZ3JvdXBBYmlsaXR5X3NldChydGtfbGVkX2dyb3VwX3QgZ3JvdXAsIHJ0a19sZWRfYWJpbGl0eV90ICpwQWJpbGl0eSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sZWRfZ3JvdXBBYmlsaXR5X2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwZXIgZ3JvdXAgTGVkIGFiaWxpdHkKKyAqIElucHV0OgorICogICAgICBncm91cCAgICAtIExFRCBncm91cC4KKyAqICAgICAgcEFiaWxpdHkgLSBMRUQgYWJpbGl0eQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBOb25lLgorICovCisKK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19sZWRfZ3JvdXBBYmlsaXR5X2dldChydGtfbGVkX2dyb3VwX3QgZ3JvdXAsIHJ0a19sZWRfYWJpbGl0eV90ICpwQWJpbGl0eSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sZWRfc2VyaWFsTW9kZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgTGVkIHNlcmlhbCBtb2RlIGFjdGl2ZSBjb25naXVyYXRpb24KKyAqIElucHV0OgorICogICAgICBhY3RpdmUgLSBMRUQgZ3JvdXAuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIHNldCBMRUQgc2VyaWFsIG1vZGUgYWN0aXZlIGNvbmdpdXJhdGlvbi4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX2xlZF9zZXJpYWxNb2RlX3NldChydGtfbGVkX2FjdGl2ZV90IGFjdGl2ZSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sZWRfc2VyaWFsTW9kZV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgTGVkIGdyb3VwIGNvbmdpdXJhdGlvbiBtb2RlCisgKiBJbnB1dDoKKyAqICAgICAgZ3JvdXAgLSBMRUQgZ3JvdXAuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBDb25maWcgLSBMRUQgY29uZmlndXJhdGlvbi4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgICBUaGUgQVBJIGNhbiBnZXQgTEVEIHNlcmlhbCBtb2RlIGFjdGl2ZSBjb25maWd1cmF0aW9uLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfbGVkX3NlcmlhbE1vZGVfZ2V0KHJ0a19sZWRfYWN0aXZlX3QgKnBBY3RpdmUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbGVkX091dHB1dEVuYWJsZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBUaGlzIEFQSSBzZXQgTEVEIEkvTyBzdGF0ZS4KKyAqIElucHV0OgorICogICAgICBlbmFibGVkICAgICAtIExFRCBJL08gc3RhdGUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAtIEVycm9yIHBhcmFtZXRlcgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgc2V0IExFRCBJL08gc3RhdGUuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19sZWRfT3V0cHV0RW5hYmxlX3NldChydGtfZW5hYmxlX3Qgc3RhdGUpOworCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sZWRfT3V0cHV0RW5hYmxlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFRoaXMgQVBJIGdldCBMRUQgSS9PIHN0YXRlLgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBFbmFibGVkICAgICAgICAtIExFRCBJL08gc3RhdGUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAtIEVycm9yIHBhcmFtZXRlcgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgc2V0IGN1cnJlbnQgTEVEIEkvTyAgc3RhdGUuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19sZWRfT3V0cHV0RW5hYmxlX2dldChydGtfZW5hYmxlX3QgKnBTdGF0ZSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sZWRfc2VyaWFsTW9kZVBvcnRtYXNrX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFRoaXMgQVBJIGNvbmZpZ3VyZSBTZXJpYWwgTEVEIG91dHB1dCBHcm91cCBhbmQgcG9ydG1hc2sKKyAqIElucHV0OgorICogICAgICBvdXRwdXQgICAgICAgICAgLSBvdXRwdXQgZ3JvdXAKKyAqICAgICAgcFBvcnRtYXNrICAgICAgIC0gb3V0cHV0IHBvcnRtYXNrCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgLSBFcnJvciBwYXJhbWV0ZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19sZWRfc2VyaWFsTW9kZVBvcnRtYXNrX3NldChydGtfbGVkX3NlcmlhbE91dHB1dF90IG91dHB1dCwgcnRrX3BvcnRtYXNrX3QgKnBQb3J0bWFzayk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sZWRfc2VyaWFsTW9kZVBvcnRtYXNrX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFRoaXMgQVBJIGdldCBTZXJpYWwgTEVEIG91dHB1dCBHcm91cCBhbmQgcG9ydG1hc2sKKyAqIElucHV0OgorICogICAgICBOb25lLgorICogT3V0cHV0OgorICogICAgICBwT3V0cHV0ICAgICAgICAgLSBvdXRwdXQgZ3JvdXAKKyAqICAgICAgcFBvcnRtYXNrICAgICAgIC0gb3V0cHV0IHBvcnRtYXNrCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgLSBFcnJvciBwYXJhbWV0ZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19sZWRfc2VyaWFsTW9kZVBvcnRtYXNrX2dldChydGtfbGVkX3NlcmlhbE91dHB1dF90ICpwT3V0cHV0LCBydGtfcG9ydG1hc2tfdCAqcFBvcnRtYXNrKTsKKworI2VuZGlmIC8qIF9fUlRLX0FQSV9MRURfSF9fICovCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9taXJyb3IuaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL21pcnJvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlOTg0YjcKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9taXJyb3IuaApAQCAtMCwwICsxLDI3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiBQdXJwb3NlIDogUlRMODM2Ny9SVEw4MzY3QyBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkKKyAqCisgKiBGZWF0dXJlIDogVGhlIGZpbGUgaW5jbHVkZXMgTWlycm9yIG1vZHVsZSBoaWdoLWxheWVyIEFQSSBkZWZpbmF0aW9uCisgKgorICovCisKKyNpZm5kZWYgX19SVEtfQVBJX01JUlJPUl9IX18KKyNkZWZpbmUgX19SVEtfQVBJX01JUlJPUl9IX18KKwordHlwZWRlZiBlbnVtIHJ0a19taXJyb3Jfa2VlcF9lCit7CisgICAgTUlSUk9SX0ZPTExPV19WTEFOID0gMCwKKyAgICBNSVJST1JfS0VFUF9PUklHSU5BTCwKKyAgICBNSVJST1JfS0VFUF9FTkQKK31ydGtfbWlycm9yX2tlZXBfdDsKKworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbWlycm9yX3BvcnRCYXNlZF9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgcG9ydCBtaXJyb3IgZnVuY3Rpb24uCisgKiBJbnB1dDoKKyAqICAgICAgbWlycm9yaW5nX3BvcnQgICAgICAgICAgLSBNb25pdG9yIHBvcnQuCisgKiAgICAgIHBNaXJyb3JlZF9yeF9wb3J0bWFzayAgIC0gUnggbWlycm9yIHBvcnQgbWFzay4KKyAqICAgICAgcE1pcnJvcmVkX3R4X3BvcnRtYXNrICAgLSBUeCBtaXJyb3IgcG9ydCBtYXNrLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiAgICAgIFJUX0VSUl9QT1JUX01BU0sgICAgLSBJbnZhbGlkIHBvcnRtYXNrLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBpcyB0byBzZXQgbWlycm9yIGZ1bmN0aW9uIG9mIHNvdXJjZSBwb3J0IGFuZCBtaXJyb3IgcG9ydC4KKyAqICAgICAgVGhlIG1pcnJvciBwb3J0IGNhbiBvbmx5IGJlIHNldCB0byBvbmUgcG9ydCBhbmQgdGhlIFRYIGFuZCBSWCBtaXJyb3IgcG9ydHMKKyAqICAgICAgc2hvdWxkIGJlIGlkZW50aWNhbC4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX21pcnJvcl9wb3J0QmFzZWRfc2V0KHJ0a19wb3J0X3QgbWlycm9yaW5nX3BvcnQsIHJ0a19wb3J0bWFza190ICpwTWlycm9yZWRfcnhfcG9ydG1hc2ssIHJ0a19wb3J0bWFza190ICpwTWlycm9yZWRfdHhfcG9ydG1hc2spOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbWlycm9yX3BvcnRCYXNlZF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcG9ydCBtaXJyb3IgZnVuY3Rpb24uCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwTWlycm9yaW5nX3BvcnQgICAgICAgICAtIE1vbml0b3IgcG9ydC4KKyAqICAgICAgcE1pcnJvcmVkX3J4X3BvcnRtYXNrICAgLSBSeCBtaXJyb3IgcG9ydCBtYXNrLgorICogICAgICBwTWlycm9yZWRfdHhfcG9ydG1hc2sgICAtIFR4IG1pcnJvciBwb3J0IG1hc2suCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGlzIHRvIGdldCBtaXJyb3IgZnVuY3Rpb24gb2Ygc291cmNlIHBvcnQgYW5kIG1pcnJvciBwb3J0LgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfbWlycm9yX3BvcnRCYXNlZF9nZXQocnRrX3BvcnRfdCogcE1pcnJvcmluZ19wb3J0LCBydGtfcG9ydG1hc2tfdCAqcE1pcnJvcmVkX3J4X3BvcnRtYXNrLCBydGtfcG9ydG1hc2tfdCAqcE1pcnJvcmVkX3R4X3BvcnRtYXNrKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX21pcnJvcl9wb3J0SXNvX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBtaXJyb3IgcG9ydCBpc29sYXRpb24uCisgKiBJbnB1dDoKKyAqICAgICAgZW5hYmxlIHxNaXJyb3IgaXNvbGF0aW9uIHN0YXR1cy4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfRU5BQkxFICAgICAgIC0gSW52YWxpZCBlbmFibGUgaW5wdXQKKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgaXMgdG8gc2V0IG1pcnJvciBpc29sYXRpb24gZnVuY3Rpb24gdGhhdCBwcmV2ZW50IG5vcm1hbCBmb3J3YXJkaW5nIHBhY2tldHMgdG8gbWlyb3IgcG9ydC4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX21pcnJvcl9wb3J0SXNvX3NldChydGtfZW5hYmxlX3QgZW5hYmxlKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX21pcnJvcl9wb3J0SXNvX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBtaXJyb3IgcG9ydCBpc29sYXRpb24uCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwRW5hYmxlIHxNaXJyb3IgaXNvbGF0aW9uIHN0YXR1cy4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgaXMgdG8gZ2V0IG1pcnJvciBpc29sYXRpb24gc3RhdHVzLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfbWlycm9yX3BvcnRJc29fZ2V0KHJ0a19lbmFibGVfdCAqcEVuYWJsZSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19taXJyb3JfdmxhbkxlYWt5X3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBtaXJyb3IgVkxBTiBsZWFreS4KKyAqIElucHV0OgorICogICAgICB0eGVuYWJsZSAtVFggbGVha3kgZW5hYmxlLgorICogICAgICByeGVuYWJsZSAtIFJYIGxlYWt5IGVuYWJsZS4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfRU5BQkxFICAgICAgIC0gSW52YWxpZCBlbmFibGUgaW5wdXQKKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgaXMgdG8gc2V0IG1pcnJvciBWTEFOIGxlYWt5IGZ1bmN0aW9uIGZvcndhcmRpbmcgcGFja2V0cyB0byBtaXJvciBwb3J0LgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfbWlycm9yX3ZsYW5MZWFreV9zZXQocnRrX2VuYWJsZV90IHR4ZW5hYmxlLCBydGtfZW5hYmxlX3QgcnhlbmFibGUpOworCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19taXJyb3JfdmxhbkxlYWt5X2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBtaXJyb3IgVkxBTiBsZWFreS4KKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBUeGVuYWJsZSAtIFRYIGxlYWt5IGVuYWJsZS4KKyAqICAgICAgcFJ4ZW5hYmxlIC0gUlggbGVha3kgZW5hYmxlLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBpcyB0byBnZXQgbWlycm9yIFZMQU4gbGVha3kgc3RhdHVzLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfbWlycm9yX3ZsYW5MZWFreV9nZXQocnRrX2VuYWJsZV90ICpwVHhlbmFibGUsIHJ0a19lbmFibGVfdCAqcFJ4ZW5hYmxlKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX21pcnJvcl9pc29sYXRpb25MZWFreV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgbWlycm9yIElzb2xhdGlvbiBsZWFreS4KKyAqIElucHV0OgorICogICAgICB0eGVuYWJsZSAtVFggbGVha3kgZW5hYmxlLgorICogICAgICByeGVuYWJsZSAtIFJYIGxlYWt5IGVuYWJsZS4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfRU5BQkxFICAgICAgIC0gSW52YWxpZCBlbmFibGUgaW5wdXQKKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgaXMgdG8gc2V0IG1pcnJvciBWTEFOIGxlYWt5IGZ1bmN0aW9uIGZvcndhcmRpbmcgcGFja2V0cyB0byBtaXJvciBwb3J0LgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfbWlycm9yX2lzb2xhdGlvbkxlYWt5X3NldChydGtfZW5hYmxlX3QgdHhlbmFibGUsIHJ0a19lbmFibGVfdCByeGVuYWJsZSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19taXJyb3JfaXNvbGF0aW9uTGVha3lfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IG1pcnJvciBpc29sYXRpb24gbGVha3kuCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwVHhlbmFibGUgLSBUWCBsZWFreSBlbmFibGUuCisgKiAgICAgIHBSeGVuYWJsZSAtIFJYIGxlYWt5IGVuYWJsZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgaXMgdG8gZ2V0IG1pcnJvciBpc29sYXRpb24gbGVha3kgc3RhdHVzLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfbWlycm9yX2lzb2xhdGlvbkxlYWt5X2dldChydGtfZW5hYmxlX3QgKnBUeGVuYWJsZSwgcnRrX2VuYWJsZV90ICpwUnhlbmFibGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbWlycm9yX2tlZXBfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IG1pcnJvciBwYWNrZXQgZm9ybWF0IGtlZXAuCisgKiBJbnB1dDoKKyAqICAgICAgbW9kZSAtIC1taXJyb3Iga2VlcCBtb2RlLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9FTkFCTEUgICAgICAgLSBJbnZhbGlkIGVuYWJsZSBpbnB1dAorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBpcyB0byBzZXQgIC1taXJyb3Iga2VlcCBtb2RlLgorICogICAgICBUaGUgbWlycm9yIGtlZXAgbW9kZSBpcyBhcyBmb2xsb3dpbmc6CisgKiAgICAgIC0gTUlSUk9SX0ZPTExPV19WTEFOCisgKiAgICAgIC0gTUlSUk9SX0tFRVBfT1JJR0lOQUwKKyAqICAgICAgLSBNSVJST1JfS0VFUF9FTkQKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX21pcnJvcl9rZWVwX3NldChydGtfbWlycm9yX2tlZXBfdCBtb2RlKTsKKworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbWlycm9yX2tlZXBfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IG1pcnJvciBwYWNrZXQgZm9ybWF0IGtlZXAuCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwTW9kZSAtbWlycm9yIGtlZXAgbW9kZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgaXMgdG8gZ2V0IG1pcnJvciBrZWVwIG1vZGUuCisgICogICAgICBUaGUgbWlycm9yIGtlZXAgbW9kZSBpcyBhcyBmb2xsb3dpbmc6CisgKiAgICAgIC0gTUlSUk9SX0ZPTExPV19WTEFOCisgKiAgICAgIC0gTUlSUk9SX0tFRVBfT1JJR0lOQUwKKyAqICAgICAgLSBNSVJST1JfS0VFUF9FTkQKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX21pcnJvcl9rZWVwX2dldChydGtfbWlycm9yX2tlZXBfdCAqcE1vZGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbWlycm9yX292ZXJyaWRlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwb3J0IG1pcnJvciBvdmVycmlkZSBmdW5jdGlvbi4KKyAqIElucHV0OgorICogICAgICByeE1pcnJvciAgICAgICAgLSAxOiBvdXRwdXQgbWlycm9yZWQgcGFja2V0LCAwOiBvdXRwdXQgbm9ybWFsIGZvcndhcmQgcGFja2V0CisgKiAgICAgIHR4TWlycm9yICAgICAgICAtIDE6IG91dHB1dCBtaXJyb3JlZCBwYWNrZXQsIDA6IG91dHB1dCBub3JtYWwgZm9yd2FyZCBwYWNrZXQKKyAqICAgICAgYWNsTWlycm9yICAgICAgIC0gMTogb3V0cHV0IG1pcnJvcmVkIHBhY2tldCwgMDogb3V0cHV0IG5vcm1hbCBmb3J3YXJkIHBhY2tldAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGlzIHRvIHNldCBtaXJyb3Igb3ZlcnJpZGUgZnVuY3Rpb24uCisgKiAgICAgIFRoaXMgZnVuY3Rpb24gY29udHJvbCB0aGUgb3V0cHV0IGZvcm1hdCB3aGVuIGEgcG9ydCBvdXRwdXQKKyAqICAgICAgbm9ybWFsIGZvcndhcmQgJiBtaXJyb3JlZCBwYWNrZXQgYXQgdGhlIHNhbWUgdGltZS4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX21pcnJvcl9vdmVycmlkZV9zZXQocnRrX2VuYWJsZV90IHJ4TWlycm9yLCBydGtfZW5hYmxlX3QgdHhNaXJyb3IsIHJ0a19lbmFibGVfdCBhY2xNaXJyb3IpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbWlycm9yX292ZXJyaWRlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwb3J0IG1pcnJvciBvdmVycmlkZSBmdW5jdGlvbi4KKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBSeE1pcnJvciAgICAgICAtIDE6IG91dHB1dCBtaXJyb3JlZCBwYWNrZXQsIDA6IG91dHB1dCBub3JtYWwgZm9yd2FyZCBwYWNrZXQKKyAqICAgICAgcFR4TWlycm9yICAgICAgIC0gMTogb3V0cHV0IG1pcnJvcmVkIHBhY2tldCwgMDogb3V0cHV0IG5vcm1hbCBmb3J3YXJkIHBhY2tldAorICogICAgICBwQWNsTWlycm9yICAgICAgLSAxOiBvdXRwdXQgbWlycm9yZWQgcGFja2V0LCAwOiBvdXRwdXQgbm9ybWFsIGZvcndhcmQgcGFja2V0CisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgLSBOdWxsIFBvaW50ZXIKKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgaXMgdG8gR2V0IG1pcnJvciBvdmVycmlkZSBmdW5jdGlvbi4KKyAqICAgICAgVGhpcyBmdW5jdGlvbiBjb250cm9sIHRoZSBvdXRwdXQgZm9ybWF0IHdoZW4gYSBwb3J0IG91dHB1dAorICogICAgICBub3JtYWwgZm9yd2FyZCAmIG1pcnJvcmVkIHBhY2tldCBhdCB0aGUgc2FtZSB0aW1lLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfbWlycm9yX292ZXJyaWRlX2dldChydGtfZW5hYmxlX3QgKnBSeE1pcnJvciwgcnRrX2VuYWJsZV90ICpwVHhNaXJyb3IsIHJ0a19lbmFibGVfdCAqcEFjbE1pcnJvcik7CisKKyNlbmRpZiAvKiBfX1JUS19BUElfTUlSUk9SX0hfXyAqLworCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9vYW0uaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL29hbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYzE0YmQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9vYW0uaApAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiAkUmV2aXNpb246IDc2MzA2ICQKKyAqICREYXRlOiAyMDE3LTAzLTA4IDE1OjEzOjU4ICswODAwICjpgLHkuIksIDA4IOS4ieaciCAyMDE3KSAkCisgKgorICogUHVycG9zZSA6IFJUTDgzNjcvUlRMODM2N0Mgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJCisgKgorICogRmVhdHVyZSA6IFRoZSBmaWxlIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgbW9kdWxlcyBhbmQgc3ViLW1vZHVsZXMKKyAqICAgICAgICAgICAoMSkgT0FNICg4MDIuM2FoKSBjb25maWd1cmF0aW9uCisgKgorICovCisKKyNpZm5kZWYgX19SVEtfT0FNX0hfXworI2RlZmluZSBfX1JUS19PQU1fSF9fCisKKy8qCisgKiBTeW1ib2wgRGVmaW5pdGlvbgorICovCisKKworLyoKKyAqIERhdGEgRGVjbGFyYXRpb24KKyAqLworCisKKy8qCisgKiBNYWNybyBEZWNsYXJhdGlvbgorICovCisKK3R5cGVkZWYgZW51bSBydGtfb2FtX3BhcnNlcl9hY3RfZQoreworICAgIE9BTV9QQVJTRVJfQUNUSU9OX0ZPUldBUkQgPSAwLAorICAgIE9BTV9QQVJTRVJfQUNUSU9OX0xPT1BCQUNLLAorICAgIE9BTV9QQVJTRVJfQUNUSU9OX0RJU0NBUkQsCisgICAgT0FNX1BBUlNFUl9BQ1RJT05fRU5ELAorCit9IHJ0a19vYW1fcGFyc2VyX2FjdF90OworCit0eXBlZGVmIGVudW0gcnRrX29hbV9tdWx0aXBsZXhlcl9hY3RfZQoreworICAgIE9BTV9NVUxUSVBMRVhFUl9BQ1RJT05fRk9SV0FSRCA9IDAsCisgICAgT0FNX01VTFRJUExFWEVSX0FDVElPTl9ESVNDQVJELAorICAgIE9BTV9NVUxUSVBMRVhFUl9BQ1RJT05fQ1BVT05MWSwKKyAgICBPQU1fTVVMVElQTEVYRVJfQUNUSU9OX0VORCwKKworfSBydGtfb2FtX211bHRpcGxleGVyX2FjdF90OworCisKKy8qCisgKiBGdW5jdGlvbiBEZWNsYXJhdGlvbgorICovCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19vYW1faW5pdAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEluaXRpYWxpemUgb2FtIG1vZHVsZS4KKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqIE5vdGU6CisgKiAgICAgIE11c3QgaW5pdGlhbGl6ZSBvYW0gbW9kdWxlIGJlZm9yZSBjYWxsaW5nIGFueSBvYW0gQVBJcy4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX29hbV9pbml0KHZvaWQpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfb2FtX3N0YXRlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFRoaXMgQVBJIHNldCBPQU0gc3RhdGUuCisgKiBJbnB1dDoKKyAqICAgICAgZW5hYmxlZCAgICAgLU9BTXN0YXRlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgLSBFcnJvciBwYXJhbWV0ZXIKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIHNldCBPQU0gc3RhdGUuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19vYW1fc3RhdGVfc2V0KHJ0a19lbmFibGVfdCBlbmFibGVkKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX29hbV9zdGF0ZV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBUaGlzIEFQSSBnZXQgT0FNIHN0YXRlLgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBFbmFibGVkICAgICAgICAtIEgvVyBJR01QIHN0YXRlCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgLSBFcnJvciBwYXJhbWV0ZXIKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIHNldCBjdXJyZW50IE9BTSBzdGF0ZS4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX29hbV9zdGF0ZV9nZXQocnRrX2VuYWJsZV90ICpwRW5hYmxlZCk7CisKKworLyogTW9kdWxlIE5hbWUgOiBPQU0gKi8KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX29hbV9wYXJzZXJBY3Rpb25fc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IE9BTSBwYXJzZXIgYWN0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIHBvcnQgaWQKKyAqICAgICAgYWN0aW9uICAtIHBhcnNlciBhY3Rpb24KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gaW52YWxpZCBwb3J0IGlkCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19vYW1fcGFyc2VyQWN0aW9uX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19vYW1fcGFyc2VyX2FjdF90IGFjdGlvbik7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19vYW1fcGFyc2VyQWN0aW9uX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBPQU0gcGFyc2VyIGFjdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBwb3J0IGlkCisgKiBPdXRwdXQ6CisgKiAgICAgIHBBY3Rpb24gIC0gcGFyc2VyIGFjdGlvbgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gaW52YWxpZCBwb3J0IGlkCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19vYW1fcGFyc2VyQWN0aW9uX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19vYW1fcGFyc2VyX2FjdF90ICpwQWN0aW9uKTsKKworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfb2FtX211bHRpcGxleGVyQWN0aW9uX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBPQU0gbXVsdGlwbGV4ZXIgYWN0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIHBvcnQgaWQKKyAqICAgICAgYWN0aW9uICAtIHBhcnNlciBhY3Rpb24KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gaW52YWxpZCBwb3J0IGlkCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19vYW1fbXVsdGlwbGV4ZXJBY3Rpb25fc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX29hbV9tdWx0aXBsZXhlcl9hY3RfdCBhY3Rpb24pOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfb2FtX211bHRpcGxleGVyQWN0aW9uX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBPQU0gbXVsdGlwbGV4ZXIgYWN0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIHBvcnQgaWQKKyAqIE91dHB1dDoKKyAqICAgICAgcEFjdGlvbiAgLSBwYXJzZXIgYWN0aW9uCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBpbnZhbGlkIHBvcnQgaWQKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX29hbV9tdWx0aXBsZXhlckFjdGlvbl9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfb2FtX211bHRpcGxleGVyX2FjdF90ICpwQWN0aW9uKTsKKworCisjZW5kaWYgLyogX19SVEtfT0FNX0hfXyAqLworCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9wb3J0LmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9wb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNhYzFiYwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3BvcnQuaApAQCAtMCwwICsxLDk1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiBQdXJwb3NlIDogUlRMODM2Ny9SVEw4MzY3QyBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkKKyAqCisgKiBGZWF0dXJlIDogVGhlIGZpbGUgaW5jbHVkZXMgcG9ydCBtb2R1bGUgaGlnaC1sYXllciBBUEkgZGVmaW5hdGlvbgorICoKKyAqLworCisjaWZuZGVmIF9fUlRLX0FQSV9QT1JUX0hfXworI2RlZmluZSBfX1JUS19BUElfUE9SVF9IX18KKworLyoKKyAqIERhdGEgVHlwZSBEZWNsYXJhdGlvbgorICovCisKKyNkZWZpbmUgUEhZX0NPTlRST0xfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFBIWV9TVEFUVVNfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBQSFlfQU5fQURWRVJUSVNFTUVOVF9SRUcgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgUEhZX0FOX0xJTktQQVJUTkVSX1JFRyAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFBIWV8xMDAwX0JBU0VUX0NPTlRST0xfUkVHICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBQSFlfMTAwMF9CQVNFVF9TVEFUVVNfUkVHICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFBIWV9SRVNPTFZFRF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKworI2RlZmluZSBSVEtfRUZJRF9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NworCisjZGVmaW5lIFJUS19GSUJFUl9GT1JDRV8xMDAwTSAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBSVEtfRklCRVJfRk9SQ0VfMTAwTSAgICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgUlRLX0ZJQkVSX0ZPUkNFXzEwME0xMDAwTSAgICAgICAgICAgICAgICAgICA3CisKKyNkZWZpbmUgUlRLX0lORFJFQ1RfQUNDRVNTX0NSVEwgICAgICAgICAgICAgICAgICAgICAweDFmMDAKKyNkZWZpbmUgUlRLX0lORFJFQ1RfQUNDRVNTX1NUQVRVUyAgICAgICAgICAgICAgICAgICAweDFmMDEKKyNkZWZpbmUgUlRLX0lORFJFQ1RfQUNDRVNTX0FERFJFU1MgICAgICAgICAgICAgICAgICAweDFmMDIKKyNkZWZpbmUgUlRLX0lORFJFQ1RfQUNDRVNTX1dSSVRFX0RBVEEgICAgICAgICAgICAgICAweDFmMDMKKyNkZWZpbmUgUlRLX0lORFJFQ1RfQUNDRVNTX1JFQURfREFUQSAgICAgICAgICAgICAgICAweDFmMDQKKyNkZWZpbmUgUlRLX0lORFJFQ1RfQUNDRVNTX0RFTEFZICAgICAgICAgICAgICAgICAgICAweDFmODAKKyNkZWZpbmUgUlRLX0lORFJFQ1RfQUNDRVNTX0JVUlNUICAgICAgICAgICAgICAgICAgICAweDFmODEKKyNkZWZpbmUgUlRLX1JXX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIKKyNkZWZpbmUgUlRLX0NNRF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgUlRLX1BIWV9CVVNZX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKwordHlwZWRlZiBlbnVtIHJ0a19tb2RlX2V4dF9lCit7CisgICAgTU9ERV9FWFRfRElTQUJMRSA9IDAsCisgICAgTU9ERV9FWFRfUkdNSUksCisgICAgTU9ERV9FWFRfTUlJX01BQywKKyAgICBNT0RFX0VYVF9NSUlfUEhZLAorICAgIE1PREVfRVhUX1RNSUlfTUFDLAorICAgIE1PREVfRVhUX1RNSUlfUEhZLAorICAgIE1PREVfRVhUX0dNSUksCisgICAgTU9ERV9FWFRfUk1JSV9NQUMsCisgICAgTU9ERV9FWFRfUk1JSV9QSFksCisgICAgTU9ERV9FWFRfU0dNSUksCisgICAgTU9ERV9FWFRfSFNHTUlJLAorICAgIE1PREVfRVhUXzEwMDBYXzEwMEZYLAorICAgIE1PREVfRVhUXzEwMDBYLAorICAgIE1PREVfRVhUXzEwMEZYLAorICAgIE1PREVfRVhUX1JHTUlJXzIsCisgICAgTU9ERV9FWFRfTUlJX01BQ18yLAorICAgIE1PREVfRVhUX01JSV9QSFlfMiwKKyAgICBNT0RFX0VYVF9UTUlJX01BQ18yLAorICAgIE1PREVfRVhUX1RNSUlfUEhZXzIsCisgICAgTU9ERV9FWFRfUk1JSV9NQUNfMiwKKyAgICBNT0RFX0VYVF9STUlJX1BIWV8yLAorICAgIE1PREVfRVhUX0VORAorfSBydGtfbW9kZV9leHRfdDsKKwordHlwZWRlZiBlbnVtIHJ0a19wb3J0X2R1cGxleF9lCit7CisgICAgUE9SVF9IQUxGX0RVUExFWCA9IDAsCisgICAgUE9SVF9GVUxMX0RVUExFWCwKKyAgICBQT1JUX0RVUExFWF9FTkQKK30gcnRrX3BvcnRfZHVwbGV4X3Q7CisKK3R5cGVkZWYgZW51bSBydGtfcG9ydF9saW5rU3RhdHVzX2UKK3sKKyAgICBQT1JUX0xJTktET1dOID0gMCwKKyAgICBQT1JUX0xJTktVUCwKKyAgICBQT1JUX0xJTktTVEFUVVNfRU5ECit9IHJ0a19wb3J0X2xpbmtTdGF0dXNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgIHJ0a19wb3J0X21hY19hYmlsaXR5X3MKK3sKKyAgICBydGtfdWludDMyIGZvcmNlbW9kZTsKKyAgICBydGtfdWludDMyIHNwZWVkOworICAgIHJ0a191aW50MzIgZHVwbGV4OworICAgIHJ0a191aW50MzIgbGluazsKKyAgICBydGtfdWludDMyIG53YXk7CisgICAgcnRrX3VpbnQzMiB0eHBhdXNlOworICAgIHJ0a191aW50MzIgcnhwYXVzZTsKK31ydGtfcG9ydF9tYWNfYWJpbGl0eV90OworCit0eXBlZGVmIHN0cnVjdCBydGtfcG9ydF9waHlfYWJpbGl0eV9zCit7CisgICAgcnRrX3VpbnQzMiAgICBBdXRvTmVnb3RpYXRpb247ICAvKlBIWSByZWdpc3RlciAwLjEyIHNldHRpbmcgZm9yIGF1dG8tbmVnb3RpYXRpb24gcHJvY2VzcyovCisgICAgcnRrX3VpbnQzMiAgICBIYWxmXzEwOyAgICAgICAgICAvKlBIWSByZWdpc3RlciA0LjUgc2V0dGluZyBmb3IgMTBCQVNFLVRYIGhhbGYgZHVwbGV4IGNhcGFibGUqLworICAgIHJ0a191aW50MzIgICAgRnVsbF8xMDsgICAgICAgICAgLypQSFkgcmVnaXN0ZXIgNC42IHNldHRpbmcgZm9yIDEwQkFTRS1UWCBmdWxsIGR1cGxleCBjYXBhYmxlKi8KKyAgICBydGtfdWludDMyICAgIEhhbGZfMTAwOyAgICAgICAgIC8qUEhZIHJlZ2lzdGVyIDQuNyBzZXR0aW5nIGZvciAxMDBCQVNFLVRYIGhhbGYgZHVwbGV4IGNhcGFibGUqLworICAgIHJ0a191aW50MzIgICAgRnVsbF8xMDA7ICAgICAgICAgLypQSFkgcmVnaXN0ZXIgNC44IHNldHRpbmcgZm9yIDEwMEJBU0UtVFggZnVsbCBkdXBsZXggY2FwYWJsZSovCisgICAgcnRrX3VpbnQzMiAgICBGdWxsXzEwMDA7ICAgICAgICAvKlBIWSByZWdpc3RlciA5Ljkgc2V0dGluZyBmb3IgMTAwMEJBU0UtVCBmdWxsIGR1cGxleCBjYXBhYmxlKi8KKyAgICBydGtfdWludDMyICAgIEZDOyAgICAgICAgICAgICAgIC8qUEhZIHJlZ2lzdGVyIDQuMTAgc2V0dGluZyBmb3IgZmxvdyBjb250cm9sIGNhcGFiaWxpdHkqLworICAgIHJ0a191aW50MzIgICAgQXN5RkM7ICAgICAgICAgICAgLypQSFkgcmVnaXN0ZXIgNC4xMSBzZXR0aW5nIGZvciAgYXN5bW1ldHJpYyBmbG93IGNvbnRyb2wgY2FwYWJpbGl0eSovCit9IHJ0a19wb3J0X3BoeV9hYmlsaXR5X3Q7CisKK3R5cGVkZWYgcnRrX3VpbnQzMiAgcnRrX3BvcnRfcGh5X2RhdGFfdDsgICAgIC8qIHBoeSBwYWdlICAqLworCit0eXBlZGVmIGVudW0gcnRrX3BvcnRfcGh5X21kaXhfbW9kZV9lCit7CisgICAgUEhZX0FVVE9fQ1JPU1NPVkVSX01PREU9IDAsCisgICAgUEhZX0ZPUkNFX01ESV9NT0RFLAorICAgIFBIWV9GT1JDRV9NRElYX01PREUsCisgICAgUEhZX0ZPUkNFX01PREVfRU5ECit9IHJ0a19wb3J0X3BoeV9tZGl4X21vZGVfdDsKKwordHlwZWRlZiBlbnVtIHJ0a19wb3J0X3BoeV9tZGl4X3N0YXR1c19lCit7CisgICAgUEhZX1NUQVRVU19BVVRPX01ESV9NT0RFPSAwLAorICAgIFBIWV9TVEFUVVNfQVVUT19NRElYX01PREUsCisgICAgUEhZX1NUQVRVU19GT1JDRV9NRElfTU9ERSwKKyAgICBQSFlfU1RBVFVTX0ZPUkNFX01ESVhfTU9ERSwKKyAgICBQSFlfU1RBVFVTX0ZPUkNFX01PREVfRU5ECit9IHJ0a19wb3J0X3BoeV9tZGl4X3N0YXR1c190OworCit0eXBlZGVmIHJ0a191aW50MzIgIHJ0a19wb3J0X3BoeV9wYWdlX3Q7ICAgICAvKiBwaHkgcGFnZSAgKi8KKwordHlwZWRlZiBlbnVtIHJ0a19wb3J0X3BoeV9yZWdfZQoreworICAgIFBIWV9SRUdfQ09OVFJPTCAgICAgICAgICAgICA9IDAsCisgICAgUEhZX1JFR19TVEFUVVMsCisgICAgUEhZX1JFR19JREVOVElGSUVSXzEsCisgICAgUEhZX1JFR19JREVOVElGSUVSXzIsCisgICAgUEhZX1JFR19BTl9BRFZFUlRJU0VNRU5ULAorICAgIFBIWV9SRUdfQU5fTElOS1BBUlRORVIsCisgICAgUEhZX1JFR18xMDAwX0JBU0VUX0NPTlRST0wgID0gOSwKKyAgICBQSFlfUkVHXzEwMDBfQkFTRVRfU1RBVFVTLAorICAgIFBIWV9SRUdfRU5EICAgICAgICAgICAgICAgICA9IDMyCit9IHJ0a19wb3J0X3BoeV9yZWdfdDsKKwordHlwZWRlZiBlbnVtIHJ0a19wb3J0X3BoeV90ZXN0X21vZGVfZQoreworICAgIFBIWV9URVNUX01PREVfTk9STUFMPSAwLAorICAgIFBIWV9URVNUX01PREVfMSwKKyAgICBQSFlfVEVTVF9NT0RFXzIsCisgICAgUEhZX1RFU1RfTU9ERV8zLAorICAgIFBIWV9URVNUX01PREVfNCwKKyAgICBQSFlfVEVTVF9NT0RFX0VORAorfSBydGtfcG9ydF9waHlfdGVzdF9tb2RlX3Q7CisKK3R5cGVkZWYgZW51bSBydGtfcG9ydF9zcGVlZF9lCit7CisgICAgUE9SVF9TUEVFRF8xME0gPSAwLAorICAgIFBPUlRfU1BFRURfMTAwTSwKKyAgICBQT1JUX1NQRUVEXzEwMDBNLAorICAgIFBPUlRfU1BFRURfNTAwTSwKKyAgICBQT1JUX1NQRUVEXzI1MDBNLAorICAgIFBPUlRfU1BFRURfRU5ECit9IHJ0a19wb3J0X3NwZWVkX3Q7CisKK3R5cGVkZWYgZW51bSBydGtfcG9ydF9tZWRpYV9lCit7CisgICAgUE9SVF9NRURJQV9DT1BQRVIgPSAwLAorICAgIFBPUlRfTUVESUFfRklCRVIsCisgICAgUE9SVF9NRURJQV9FTkQKK31ydGtfcG9ydF9tZWRpYV90OworCit0eXBlZGVmIHN0cnVjdCBydGtfcnRjdFJlc3VsdF9zCit7CisgICAgcnRrX3BvcnRfc3BlZWRfdCAgICBsaW5rVHlwZTsKKyAgICB1bmlvbgorICAgIHsKKyAgICAgICAgc3RydWN0IGZlX3Jlc3VsdF9zCisgICAgICAgIHsKKyAgICAgICAgICAgIHJ0a191aW50MzIgICAgICBpc1J4U2hvcnQ7CisgICAgICAgICAgICBydGtfdWludDMyICAgICAgaXNUeFNob3J0OworICAgICAgICAgICAgcnRrX3VpbnQzMiAgICAgIGlzUnhPcGVuOworICAgICAgICAgICAgcnRrX3VpbnQzMiAgICAgIGlzVHhPcGVuOworICAgICAgICAgICAgcnRrX3VpbnQzMiAgICAgIGlzUnhNaXNtYXRjaDsKKyAgICAgICAgICAgIHJ0a191aW50MzIgICAgICBpc1R4TWlzbWF0Y2g7CisgICAgICAgICAgICBydGtfdWludDMyICAgICAgaXNSeExpbmVkcml2ZXI7CisgICAgICAgICAgICBydGtfdWludDMyICAgICAgaXNUeExpbmVkcml2ZXI7CisgICAgICAgICAgICBydGtfdWludDMyICAgICAgcnhMZW47CisgICAgICAgICAgICBydGtfdWludDMyICAgICAgdHhMZW47CisgICAgICAgIH0gZmVfcmVzdWx0OworCisgICAgICAgIHN0cnVjdCBnZV9yZXN1bHRfcworICAgICAgICB7CisgICAgICAgICAgICBydGtfdWludDMyICAgICAgY2hhbm5lbEFTaG9ydDsKKyAgICAgICAgICAgIHJ0a191aW50MzIgICAgICBjaGFubmVsQlNob3J0OworICAgICAgICAgICAgcnRrX3VpbnQzMiAgICAgIGNoYW5uZWxDU2hvcnQ7CisgICAgICAgICAgICBydGtfdWludDMyICAgICAgY2hhbm5lbERTaG9ydDsKKworICAgICAgICAgICAgcnRrX3VpbnQzMiAgICAgIGNoYW5uZWxBT3BlbjsKKyAgICAgICAgICAgIHJ0a191aW50MzIgICAgICBjaGFubmVsQk9wZW47CisgICAgICAgICAgICBydGtfdWludDMyICAgICAgY2hhbm5lbENPcGVuOworICAgICAgICAgICAgcnRrX3VpbnQzMiAgICAgIGNoYW5uZWxET3BlbjsKKworICAgICAgICAgICAgcnRrX3VpbnQzMiAgICAgIGNoYW5uZWxBTWlzbWF0Y2g7CisgICAgICAgICAgICBydGtfdWludDMyICAgICAgY2hhbm5lbEJNaXNtYXRjaDsKKyAgICAgICAgICAgIHJ0a191aW50MzIgICAgICBjaGFubmVsQ01pc21hdGNoOworICAgICAgICAgICAgcnRrX3VpbnQzMiAgICAgIGNoYW5uZWxETWlzbWF0Y2g7CisKKyAgICAgICAgICAgIHJ0a191aW50MzIgICAgICBjaGFubmVsQUxpbmVkcml2ZXI7CisgICAgICAgICAgICBydGtfdWludDMyICAgICAgY2hhbm5lbEJMaW5lZHJpdmVyOworICAgICAgICAgICAgcnRrX3VpbnQzMiAgICAgIGNoYW5uZWxDTGluZWRyaXZlcjsKKyAgICAgICAgICAgIHJ0a191aW50MzIgICAgICBjaGFubmVsRExpbmVkcml2ZXI7CisKKyAgICAgICAgICAgIHJ0a191aW50MzIgICAgICBjaGFubmVsQUxlbjsKKyAgICAgICAgICAgIHJ0a191aW50MzIgICAgICBjaGFubmVsQkxlbjsKKyAgICAgICAgICAgIHJ0a191aW50MzIgICAgICBjaGFubmVsQ0xlbjsKKyAgICAgICAgICAgIHJ0a191aW50MzIgICAgICBjaGFubmVsRExlbjsKKyAgICAgICAgfSBnZV9yZXN1bHQ7CisgICAgfXJlc3VsdDsKK30gcnRrX3J0Y3RSZXN1bHRfdDsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3BvcnRfcGh5QXV0b05lZ29BYmlsaXR5X3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBldGhlcm5ldCBQSFkgYXV0by1uZWdvdGlhdGlvbiBkZXNpcmVkIGFiaWxpdHkuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBwb3J0IGlkLgorICogICAgICBwQWJpbGl0eSAgICAtIEFiaWxpdHkgc3RydWN0dXJlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfUEhZX1JFR19JRCAgICAgICAtIEludmFsaWQgUEhZIGFkZHJlc3MKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiAgICAgIFJUX0VSUl9CVVNZV0FJVF9USU1FT1VUIC0gUEhZIGFjY2VzcyBidXN5CisgKiBOb3RlOgorICogICAgICBJZiBGdWxsXzEwMDAgYml0IGlzIHNldCB0byAxLCB0aGUgQXV0b05lZ290aWF0aW9uIHdpbGwgYmUgYXV0b21hdGljIHNldCB0byAxLiBXaGlsZSBib3RoIEF1dG9OZWdvdGlhdGlvbiBhbmQgRnVsbF8xMDAwIGFyZSBzZXQgdG8gMCwgdGhlIFBIWSBzcGVlZCBhbmQgZHVwbGV4IHNlbGVjdGlvbiB3aWxsCisgKiAgICAgIGJlIHNldCBhcyBmb2xsb3dpbmcgMTAwRiA+IDEwMEggPiAxMEYgPiAxMEggcHJpb3JpdHkgc2VxdWVuY2UuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19wb3J0X3BoeUF1dG9OZWdvQWJpbGl0eV9zZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfcG9ydF9waHlfYWJpbGl0eV90ICpwQWJpbGl0eSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wb3J0X3BoeUF1dG9OZWdvQWJpbGl0eV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgUEhZIGFiaWxpdHkgdGhyb3VnaCBQSFkgcmVnaXN0ZXJzLgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBQb3J0IGlkLgorICogT3V0cHV0OgorICogICAgICBwQWJpbGl0eSAtIEFiaWxpdHkgc3RydWN0dXJlCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqICAgICAgUlRfRVJSX1BIWV9SRUdfSUQgICAgICAgLSBJbnZhbGlkIFBIWSBhZGRyZXNzCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogICAgICBSVF9FUlJfQlVTWVdBSVRfVElNRU9VVCAtIFBIWSBhY2Nlc3MgYnVzeQorICogTm90ZToKKyAqICAgICAgR2V0IHRoZSBjYXBhYmxpdHkgb2Ygc3BlY2lmaWVkIFBIWS4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3BvcnRfcGh5QXV0b05lZ29BYmlsaXR5X2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19wb3J0X3BoeV9hYmlsaXR5X3QgKnBBYmlsaXR5KTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3BvcnRfcGh5Rm9yY2VNb2RlQWJpbGl0eV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgdGhlIHBvcnQgc3BlZWQvZHVwbGV4IG1vZGUvcGF1c2UvYXN5X3BhdXNlIGluIHRoZSBQSFkgZm9yY2UgbW9kZS4KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAtIHBvcnQgaWQuCisgKiAgICAgIHBBYmlsaXR5ICAgIC0gQWJpbGl0eSBzdHJ1Y3R1cmUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9QSFlfUkVHX0lEICAgICAgIC0gSW52YWxpZCBQSFkgYWRkcmVzcworICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX0JVU1lXQUlUX1RJTUVPVVQgLSBQSFkgYWNjZXNzIGJ1c3kKKyAqIE5vdGU6CisgKiAgICAgIFdoaWxlIGJvdGggQXV0b05lZ290aWF0aW9uIGFuZCBGdWxsXzEwMDAgYXJlIHNldCB0byAwLCB0aGUgUEhZIHNwZWVkIGFuZCBkdXBsZXggc2VsZWN0aW9uIHdpbGwKKyAqICAgICAgYmUgc2V0IGFzIGZvbGxvd2luZyAxMDBGID4gMTAwSCA+IDEwRiA+IDEwSCBwcmlvcml0eSBzZXF1ZW5jZS4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3BvcnRfcGh5Rm9yY2VNb2RlQWJpbGl0eV9zZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfcG9ydF9waHlfYWJpbGl0eV90ICpwQWJpbGl0eSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wb3J0X3BoeUZvcmNlTW9kZUFiaWxpdHlfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFBIWSBhYmlsaXR5IHRocm91Z2ggUEhZIHJlZ2lzdGVycy4KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqIE91dHB1dDoKKyAqICAgICAgcEFiaWxpdHkgLSBBYmlsaXR5IHN0cnVjdHVyZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9QSFlfUkVHX0lEICAgICAgIC0gSW52YWxpZCBQSFkgYWRkcmVzcworICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX0JVU1lXQUlUX1RJTUVPVVQgLSBQSFkgYWNjZXNzIGJ1c3kKKyAqIE5vdGU6CisgKiAgICAgIEdldCB0aGUgY2FwYWJsaXR5IG9mIHNwZWNpZmllZCBQSFkuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19wb3J0X3BoeUZvcmNlTW9kZUFiaWxpdHlfZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3BvcnRfcGh5X2FiaWxpdHlfdCAqcEFiaWxpdHkpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcG9ydF9waHlTdGF0dXNfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGV0aGVybmV0IFBIWSBsaW5raW5nIHN0YXR1cworICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBQb3J0IGlkLgorICogT3V0cHV0OgorICogICAgICBsaW5rU3RhdHVzICAtIFBIWSBsaW5rIHN0YXR1cworICogICAgICBzcGVlZCAgICAgICAtIFBIWSBsaW5rIHNwZWVkCisgKiAgICAgIGR1cGxleCAgICAgIC0gUEhZIGR1cGxleCBtb2RlCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqICAgICAgUlRfRVJSX1BIWV9SRUdfSUQgICAgICAgLSBJbnZhbGlkIFBIWSBhZGRyZXNzCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogICAgICBSVF9FUlJfQlVTWVdBSVRfVElNRU9VVCAtIFBIWSBhY2Nlc3MgYnVzeQorICogTm90ZToKKyAqICAgICAgQVBJIHdpbGwgcmV0dXJuIGF1dG8gbmVnb3RpYXRpb24gc3RhdHVzIG9mIHBoeS4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3BvcnRfcGh5U3RhdHVzX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19wb3J0X2xpbmtTdGF0dXNfdCAqcExpbmtTdGF0dXMsIHJ0a19wb3J0X3NwZWVkX3QgKnBTcGVlZCwgcnRrX3BvcnRfZHVwbGV4X3QgKnBEdXBsZXgpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcG9ydF9tYWNGb3JjZUxpbmtfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHBvcnQgZm9yY2UgbGlua2luZyBjb25maWd1cmF0aW9uLgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgICAgICAtIHBvcnQgaWQuCisgKiAgICAgIHBQb3J0YWJpbGl0eSAgICAtIHBvcnQgYWJpbGl0eSBjb25maWd1cmF0aW9uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBjYW4gc2V0IFBvcnQvTUFDIGZvcmNlIG1vZGUgcHJvcGVydGllcy4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3BvcnRfbWFjRm9yY2VMaW5rX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19wb3J0X21hY19hYmlsaXR5X3QgKnBQb3J0YWJpbGl0eSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wb3J0X21hY0ZvcmNlTGlua19nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcG9ydCBmb3JjZSBsaW5raW5nIGNvbmZpZ3VyYXRpb24uCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBQb3J0YWJpbGl0eSAtIHBvcnQgYWJpbGl0eSBjb25maWd1cmF0aW9uCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgY2FuIGdldCBQb3J0L01BQyBmb3JjZSBtb2RlIHByb3BlcnRpZXMuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19wb3J0X21hY0ZvcmNlTGlua19nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfcG9ydF9tYWNfYWJpbGl0eV90ICpwUG9ydGFiaWxpdHkpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcG9ydF9tYWNGb3JjZUxpbmtFeHRfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IGV4dGVybmFsIGludGVyZmFjZSBmb3JjZSBsaW5raW5nIGNvbmZpZ3VyYXRpb24uCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgICAgIC0gZXh0ZXJuYWwgcG9ydCBJRAorICogICAgICBtb2RlICAgICAgICAgICAgLSBleHRlcm5hbCBpbnRlcmZhY2UgbW9kZQorICogICAgICBwUG9ydGFiaWxpdHkgICAgLSBwb3J0IGFiaWxpdHkgY29uZmlndXJhdGlvbgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBjYW4gc2V0IGV4dGVybmFsIGludGVyZmFjZSBmb3JjZSBtb2RlIHByb3BlcnRpZXMuCisgKiAgICAgIFRoZSBleHRlcm5hbCBpbnRlcmZhY2UgY2FuIGJlIHNldCB0bzoKKyAqICAgICAgLSBNT0RFX0VYVF9ESVNBQkxFLAorICogICAgICAtIE1PREVfRVhUX1JHTUlJLAorICogICAgICAtIE1PREVfRVhUX01JSV9NQUMsCisgKiAgICAgIC0gTU9ERV9FWFRfTUlJX1BIWSwKKyAqICAgICAgLSBNT0RFX0VYVF9UTUlJX01BQywKKyAqICAgICAgLSBNT0RFX0VYVF9UTUlJX1BIWSwKKyAqICAgICAgLSBNT0RFX0VYVF9HTUlJLAorICogICAgICAtIE1PREVfRVhUX1JNSUlfTUFDLAorICogICAgICAtIE1PREVfRVhUX1JNSUlfUEhZLAorICogICAgICAtIE1PREVfRVhUX1NHTUlJLAorICogICAgICAtIE1PREVfRVhUX0hTR01JSSwKKyAqICAgICAgLSBNT0RFX0VYVF8xMDAwWF8xMDBGWCwKKyAqICAgICAgLSBNT0RFX0VYVF8xMDAwWCwKKyAqICAgICAgLSBNT0RFX0VYVF8xMDBGWCwKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3BvcnRfbWFjRm9yY2VMaW5rRXh0X3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19tb2RlX2V4dF90IG1vZGUsIHJ0a19wb3J0X21hY19hYmlsaXR5X3QgKnBQb3J0YWJpbGl0eSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wb3J0X21hY0ZvcmNlTGlua0V4dF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgZXh0ZXJuYWwgaW50ZXJmYWNlIGZvcmNlIGxpbmtpbmcgY29uZmlndXJhdGlvbi4KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAgICAgLSBleHRlcm5hbCBwb3J0IElECisgKiBPdXRwdXQ6CisgKiAgICAgIHBNb2RlICAgICAgICAgICAtIGV4dGVybmFsIGludGVyZmFjZSBtb2RlCisgKiAgICAgIHBQb3J0YWJpbGl0eSAgICAtIHBvcnQgYWJpbGl0eSBjb25maWd1cmF0aW9uCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBjYW4gZ2V0IGV4dGVybmFsIGludGVyZmFjZSBmb3JjZSBtb2RlIHByb3BlcnRpZXMuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19wb3J0X21hY0ZvcmNlTGlua0V4dF9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfbW9kZV9leHRfdCAqcE1vZGUsIHJ0a19wb3J0X21hY19hYmlsaXR5X3QgKnBQb3J0YWJpbGl0eSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wb3J0X21hY1N0YXR1c19nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcG9ydCBsaW5rIHN0YXR1cy4KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqIE91dHB1dDoKKyAqICAgICAgcFBvcnRzdGF0dXMgLSBwb3J0IGFiaWxpdHkgY29uZmlndXJhdGlvbgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBnZXQgUG9ydC9QSFkgcHJvcGVydGllcy4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3BvcnRfbWFjU3RhdHVzX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19wb3J0X21hY19hYmlsaXR5X3QgKnBQb3J0c3RhdHVzKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3BvcnRfbWFjTG9jYWxMb29wYmFja0VuYWJsZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgUG9ydCBMb2NhbCBMb29wYmFjay4gKFJlZGlyZWN0IFRYIHRvIFJYLikKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUG9ydCBpZC4KKyAqICAgICAgZW5hYmxlICAtIExvb3BiYWNrIHN0YXRlLCAwOmRpc2FibGUsIDE6ZW5hYmxlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgY2FuIGVuYWJsZS9kaXNhYmxlIExvY2FsIGxvb3BiYWNrIGluIE1BQy4KKyAqICAgICAgRm9yIFVUUCBwb3J0LCBUaGlzIEFQSSB3aWxsIGFsc28gZW5hYmxlIHRoZSBkaWdpdGFsCisgKiAgICAgIGxvb3BiYWNrIGJpdCBpbiBQSFkgcmVnaXN0ZXIgZm9yIHN5bmMgb2Ygc3BlZWQgYmV0d2VlbgorICogICAgICBQSFkgYW5kIE1BQy4gRm9yIEVYVCBwb3J0LCB1c2VycyBuZWVkIHRvIGZvcmNlIHRoZQorICogICAgICBsaW5rIHN0YXRlIGJ5IHRoZW1zZWxmLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcG9ydF9tYWNMb2NhbExvb3BiYWNrRW5hYmxlX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19lbmFibGVfdCBlbmFibGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcG9ydF9tYWNMb2NhbExvb3BiYWNrRW5hYmxlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBQb3J0IExvY2FsIExvb3BiYWNrLiAoUmVkaXJlY3QgVFggdG8gUlguKQorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBQb3J0IGlkLgorICogT3V0cHV0OgorICogICAgICBwRW5hYmxlICAtIExvb3BiYWNrIHN0YXRlLCAwOmRpc2FibGUsIDE6ZW5hYmxlCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogTm90ZToKKyAqICAgICAgTm9uZS4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3BvcnRfbWFjTG9jYWxMb29wYmFja0VuYWJsZV9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfZW5hYmxlX3QgKnBFbmFibGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcG9ydF9waHlSZWdfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IFBIWSByZWdpc3RlciBkYXRhIG9mIHRoZSBzcGVjaWZpYyBwb3J0LgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBwb3J0IGlkLgorICogICAgICByZWcgICAgIC0gUmVnaXN0ZXIgaWQKKyAqICAgICAgcmVnRGF0YSAtIFJlZ2lzdGVyIGRhdGEKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9QSFlfUkVHX0lEICAgICAgIC0gSW52YWxpZCBQSFkgYWRkcmVzcworICogICAgICBSVF9FUlJfQlVTWVdBSVRfVElNRU9VVCAtIFBIWSBhY2Nlc3MgYnVzeQorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgY2FuIHNldCBQSFkgcmVnaXN0ZXIgZGF0YSBvZiB0aGUgc3BlY2lmaWMgcG9ydC4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3BvcnRfcGh5UmVnX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19wb3J0X3BoeV9yZWdfdCByZWcsIHJ0a19wb3J0X3BoeV9kYXRhX3QgdmFsdWUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcG9ydF9waHlSZWdfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFBIWSByZWdpc3RlciBkYXRhIG9mIHRoZSBzcGVjaWZpYyBwb3J0LgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBQb3J0IGlkLgorICogICAgICByZWcgICAgIC0gUmVnaXN0ZXIgaWQKKyAqIE91dHB1dDoKKyAqICAgICAgcERhdGEgICAtIFJlZ2lzdGVyIGRhdGEKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfUEhZX1JFR19JRCAgICAgICAtIEludmFsaWQgUEhZIGFkZHJlc3MKKyAqICAgICAgUlRfRVJSX0JVU1lXQUlUX1RJTUVPVVQgLSBQSFkgYWNjZXNzIGJ1c3kKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBnZXQgUEhZIHJlZ2lzdGVyIGRhdGEgb2YgdGhlIHNwZWNpZmljIHBvcnQuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19wb3J0X3BoeVJlZ19nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfcG9ydF9waHlfcmVnX3QgcmVnLCBydGtfcG9ydF9waHlfZGF0YV90ICpwRGF0YSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wb3J0X2JhY2twcmVzc3VyZUVuYWJsZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgdGhlIGhhbGYgZHVwbGV4IGJhY2twcmVzc3VyZSBlbmFibGUgc3RhdHVzIG9mIHRoZSBzcGVjaWZpYyBwb3J0LgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBwb3J0IGlkLgorICogICAgICBlbmFibGUgIC0gQmFjayBwcmVzc3VyZSBzdGF0dXMuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9FTkFCTEUgICAgICAgLSBJbnZhbGlkIGVuYWJsZSBpbnB1dC4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBzZXQgdGhlIGhhbGYgZHVwbGV4IGJhY2twcmVzc3VyZSBlbmFibGUgc3RhdHVzIG9mIHRoZSBzcGVjaWZpYyBwb3J0LgorICogICAgICBUaGUgaGFsZiBkdXBsZXggYmFja3ByZXNzdXJlIGVuYWJsZSBzdGF0dXMgb2YgdGhlIHBvcnQgaXMgYXMgZm9sbG93aW5nOgorICogICAgICAtIERJU0FCTEUKKyAqICAgICAgLSBFTkFCTEUKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3BvcnRfYmFja3ByZXNzdXJlRW5hYmxlX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19lbmFibGVfdCBlbmFibGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcG9ydF9iYWNrcHJlc3N1cmVFbmFibGVfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHRoZSBoYWxmIGR1cGxleCBiYWNrcHJlc3N1cmUgZW5hYmxlIHN0YXR1cyBvZiB0aGUgc3BlY2lmaWMgcG9ydC4KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqIE91dHB1dDoKKyAqICAgICAgcEVuYWJsZSAtIEJhY2sgcHJlc3N1cmUgc3RhdHVzLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBnZXQgdGhlIGhhbGYgZHVwbGV4IGJhY2twcmVzc3VyZSBlbmFibGUgc3RhdHVzIG9mIHRoZSBzcGVjaWZpYyBwb3J0LgorICogICAgICBUaGUgaGFsZiBkdXBsZXggYmFja3ByZXNzdXJlIGVuYWJsZSBzdGF0dXMgb2YgdGhlIHBvcnQgaXMgYXMgZm9sbG93aW5nOgorICogICAgICAtIERJU0FCTEUKKyAqICAgICAgLSBFTkFCTEUKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3BvcnRfYmFja3ByZXNzdXJlRW5hYmxlX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19lbmFibGVfdCAqcEVuYWJsZSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wb3J0X2FkbWluRW5hYmxlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwb3J0IGFkbWluIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHNwZWNpZmljIHBvcnQuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIHBvcnQgaWQuCisgKiAgICAgIGVuYWJsZSAgLSBCYWNrIHByZXNzdXJlIHN0YXR1cy4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqICAgICAgUlRfRVJSX0VOQUJMRSAgICAgICAtIEludmFsaWQgZW5hYmxlIGlucHV0LgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgY2FuIHNldCBwb3J0IGFkbWluIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHNwZWNpZmljIHBvcnQuCisgKiAgICAgIFRoZSBwb3J0IGFkbWluIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHBvcnQgaXMgYXMgZm9sbG93aW5nOgorICogICAgICAtIERJU0FCTEUKKyAqICAgICAgLSBFTkFCTEUKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3BvcnRfYWRtaW5FbmFibGVfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2VuYWJsZV90IGVuYWJsZSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wb3J0X2FkbWluRW5hYmxlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwb3J0IGFkbWluIGNvbmZpZ3VyYXRpb25vZiB0aGUgc3BlY2lmaWMgcG9ydC4KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqIE91dHB1dDoKKyAqICAgICAgcEVuYWJsZSAtIEJhY2sgcHJlc3N1cmUgc3RhdHVzLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBnZXQgcG9ydCBhZG1pbiBjb25maWd1cmF0aW9uIG9mIHRoZSBzcGVjaWZpYyBwb3J0LgorICogICAgICBUaGUgcG9ydCBhZG1pbiBjb25maWd1cmF0aW9uIG9mIHRoZSBwb3J0IGlzIGFzIGZvbGxvd2luZzoKKyAqICAgICAgLSBESVNBQkxFCisgKiAgICAgIC0gRU5BQkxFCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19wb3J0X2FkbWluRW5hYmxlX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19lbmFibGVfdCAqcEVuYWJsZSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wb3J0X2lzb2xhdGlvbl9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgcGVybWl0dGVkIHBvcnQgaXNvbGF0aW9uIHBvcnRtYXNrCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgIC0gcG9ydCBpZC4KKyAqICAgICAgcFBvcnRtYXNrICAgIC0gUGVybWl0IHBvcnQgbWFzaworICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfUE9SVF9NQVNLICAgIC0gSW52YWxpZCBwb3J0bWFzay4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIHNldCB0aGUgcG9ydCBtYXNrIHRoYXQgYSBwb3J0IGNhbiB0cmFzbWl0IHBhY2tldCB0byBvZiBlYWNoIHBvcnQKKyAqICAgICAgQSBwb3J0IGNhbiBvbmx5IHRyYW5zbWl0IHBhY2tldCB0byBwb3J0cyBpbmNsdWRlZCBpbiBwZXJtaXR0ZWQgcG9ydG1hc2sKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3BvcnRfaXNvbGF0aW9uX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19wb3J0bWFza190ICpwUG9ydG1hc2spOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcG9ydF9pc29sYXRpb25fZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHBlcm1pdHRlZCBwb3J0IGlzb2xhdGlvbiBwb3J0bWFzaworICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBQb3J0IGlkLgorICogT3V0cHV0OgorICogICAgICBwUG9ydG1hc2sgLSBQZXJtaXQgcG9ydCBtYXNrCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgZ2V0IHRoZSBwb3J0IG1hc2sgdGhhdCBhIHBvcnQgY2FuIHRyYXNtaXQgcGFja2V0IHRvIG9mIGVhY2ggcG9ydAorICogICAgICBBIHBvcnQgY2FuIG9ubHkgdHJhbnNtaXQgcGFja2V0IHRvIHBvcnRzIGluY2x1ZGVkIGluIHBlcm1pdHRlZCBwb3J0bWFzaworICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcG9ydF9pc29sYXRpb25fZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3BvcnRtYXNrX3QgKnBQb3J0bWFzayk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wb3J0X3JnbWlpRGVsYXlFeHRfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IFJHTUlJIGludGVyZmFjZSBkZWxheSB2YWx1ZSBmb3IgVFggYW5kIFJYLgorICogSW5wdXQ6CisgKiAgICAgIHR4RGVsYXkgLSBUWCBkZWxheSB2YWx1ZSwgMSBmb3IgZGVsYXkgMm5zIGFuZCAwIGZvciBuby1kZWxheQorICogICAgICByeERlbGF5IC0gUlggZGVsYXkgdmFsdWUsIDB+NyBmb3IgZGVsYXkgc2V0dXAuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBzZXQgZXh0ZXJuYWwgaW50ZXJmYWNlIDIgUkdNSUkgZGVsYXkuCisgKiAgICAgIEluIFRYIGRlbGF5LCB0aGVyZSBhcmUgMiBzZWxlY3Rpb246IG5vLWRlbGF5IGFuZCAybnMgZGVsYXkuCisgKiAgICAgIEluIFJYIGRla2F5LCB0aGVyZSBhcmUgOCBzdGVwcyBmb3IgZGVsYXkgdHVubmluZy4gMCBmb3Igbm8tZGVsYXksIGFuZCA3IGZvciBtYXhpbXVtIGRlbGF5LgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcG9ydF9yZ21paURlbGF5RXh0X3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19kYXRhX3QgdHhEZWxheSwgcnRrX2RhdGFfdCByeERlbGF5KTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3BvcnRfcmdtaWlEZWxheUV4dF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgUkdNSUkgaW50ZXJmYWNlIGRlbGF5IHZhbHVlIGZvciBUWCBhbmQgUlguCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwVHhEZWxheSAtIFRYIGRlbGF5IHZhbHVlCisgKiAgICAgIHBSeERlbGF5IC0gUlggZGVsYXkgdmFsdWUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBzZXQgZXh0ZXJuYWwgaW50ZXJmYWNlIDIgUkdNSUkgZGVsYXkuCisgKiAgICAgIEluIFRYIGRlbGF5LCB0aGVyZSBhcmUgMiBzZWxlY3Rpb246IG5vLWRlbGF5IGFuZCAybnMgZGVsYXkuCisgKiAgICAgIEluIFJYIGRla2F5LCB0aGVyZSBhcmUgOCBzdGVwcyBmb3IgZGVsYXkgdHVubmluZy4gMCBmb3IgbjAtZGVsYXksIGFuZCA3IGZvciBtYXhpbXVtIGRlbGF5LgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcG9ydF9yZ21paURlbGF5RXh0X2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19kYXRhX3QgKnBUeERlbGF5LCBydGtfZGF0YV90ICpwUnhEZWxheSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wb3J0X3BoeUVuYWJsZUFsbF9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgYWxsIFBIWSBlbmFibGUgc3RhdHVzLgorICogSW5wdXQ6CisgKiAgICAgIGVuYWJsZSAtIFBIWSBFbmFibGUgU3RhdGUuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0VOQUJMRSAgICAgICAtIEludmFsaWQgZW5hYmxlIGlucHV0LgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgY2FuIHNldCBhbGwgUEhZIHN0YXR1cy4KKyAqICAgICAgVGhlIGNvbmZpZ3VyYXRpb24gb2YgYWxsIFBIWSBpcyBhcyBmb2xsb3dpbmc6CisgKiAgICAgIC0gRElTQUJMRQorICogICAgICAtIEVOQUJMRQorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcG9ydF9waHlFbmFibGVBbGxfc2V0KHJ0a19lbmFibGVfdCBlbmFibGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcG9ydF9waHlFbmFibGVBbGxfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGFsbCBQSFkgZW5hYmxlIHN0YXR1cy4KKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBFbmFibGUgLSBQSFkgRW5hYmxlIFN0YXRlLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgY2FuIHNldCBhbGwgUEhZIHN0YXR1cy4KKyAqICAgICAgVGhlIGNvbmZpZ3VyYXRpb24gb2YgYWxsIFBIWSBpcyBhcyBmb2xsb3dpbmc6CisgKiAgICAgIC0gRElTQUJMRQorICogICAgICAtIEVOQUJMRQorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcG9ydF9waHlFbmFibGVBbGxfZ2V0KHJ0a19lbmFibGVfdCAqcEVuYWJsZSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wb3J0X2VmaWRfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHBvcnQtYmFzZWQgZW5oYW5jZWQgZmlsdGVyaW5nIGRhdGFiYXNlCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiAgICAgIGVmaWQgLSBTcGVjaWZpZWQgZW5oYW5jZWQgZmlsdGVyaW5nIGRhdGFiYXNlLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9MMl9GSUQgLSBJbnZhbGlkIGZpZC4KKyAqICAgICAgUlRfRVJSX0lOUFVUIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIuCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEIC0gSW52YWxpZCBwb3J0IElELgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gc2V0IHBvcnQtYmFzZWQgZW5oYW5jZWQgZmlsdGVyaW5nIGRhdGFiYXNlLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcG9ydF9lZmlkX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19kYXRhX3QgZWZpZCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wb3J0X2VmaWRfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHBvcnQtYmFzZWQgZW5oYW5jZWQgZmlsdGVyaW5nIGRhdGFiYXNlCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBFZmlkIC0gU3BlY2lmaWVkIGVuaGFuY2VkIGZpbHRlcmluZyBkYXRhYmFzZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogICAgICBSVF9FUlJfUE9SVF9JRCAtIEludmFsaWQgcG9ydCBJRC4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGdldCBwb3J0LWJhc2VkIGVuaGFuY2VkIGZpbHRlcmluZyBkYXRhYmFzZSBzdGF0dXMuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19wb3J0X2VmaWRfZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2RhdGFfdCAqcEVmaWQpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcG9ydF9waHlDb21ib1BvcnRNZWRpYV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgQ29tYm8gcG9ydCBtZWRpYSB0eXBlCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIFBvcnQgaWQuIChTaG91bGQgYmUgUG9ydCA0KQorICogICAgICBtZWRpYSAgIC0gTWVkaWEgKENPUFBFUiBvciBGSUJFUikKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgIC0gSW52YWxpZCBwb3J0IElELgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gU2V0IENvbWJvIHBvcnQgbWVkaWEgdHlwZS4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3BvcnRfcGh5Q29tYm9Qb3J0TWVkaWFfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3BvcnRfbWVkaWFfdCBtZWRpYSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wb3J0X3BoeUNvbWJvUG9ydE1lZGlhX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBDb21ibyBwb3J0IG1lZGlhIHR5cGUKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUG9ydCBpZC4gKFNob3VsZCBiZSBQb3J0IDQpCisgKiBPdXRwdXQ6CisgKiAgICAgIHBNZWRpYSAgLSBNZWRpYSAoQ09QUEVSIG9yIEZJQkVSKQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgSUQuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBTZXQgQ29tYm8gcG9ydCBtZWRpYSB0eXBlLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcG9ydF9waHlDb21ib1BvcnRNZWRpYV9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfcG9ydF9tZWRpYV90ICpwTWVkaWEpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcG9ydF9ydGN0RW5hYmxlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEVuYWJsZSBSVENUIHRlc3QKKyAqIElucHV0OgorICogICAgICBwUG9ydG1hc2sgICAgLSBQb3J0IG1hc2sgb2YgUlRDVCBlbmFibGVkIHBvcnQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9NQVNLICAgICAgICAtIEludmFsaWQgcG9ydCBtYXNrLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZW5hYmxlIFJUQ1QgVGVzdAorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcG9ydF9ydGN0RW5hYmxlX3NldChydGtfcG9ydG1hc2tfdCAqcFBvcnRtYXNrKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3BvcnRfcnRjdERpc2FibGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgRGlzYWJsZSBSVENUIHRlc3QKKyAqIElucHV0OgorICogICAgICBwUG9ydG1hc2sgICAgLSBQb3J0IG1hc2sgb2YgUlRDVCBkaXNhYmxlZCBwb3J0CisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfTUFTSyAgICAgICAgLSBJbnZhbGlkIHBvcnQgbWFzay4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGRpc2FibGUgUlRDVCBUZXN0CisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3BvcnRfcnRjdERpc2FibGVfc2V0KHJ0a19wb3J0bWFza190ICpwUG9ydG1hc2spOworCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wb3J0X3J0Y3RSZXN1bHRfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHRoZSByZXN1bHQgb2YgUlRDVCB0ZXN0CisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQb3J0IElECisgKiBPdXRwdXQ6CisgKiAgICAgIHBSdGN0UmVzdWx0IC0gVGhlIHJlc3VsdCBvZiBSVENUIHJlc3VsdAorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgSUQuCisgKiAgICAgIFJUX0VSUl9QSFlfUlRDVF9OT1RfRklOSVNIICAtIFRlc3RpbmcgZG9lcyBub3QgZmluaXNoLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IFJUQ1QgdGVzdCByZXN1bHQuCisgKiAgICAgIFJUQ1QgdGVzdCBtYXkgdGFrZXMgNC44IHNlY29uZHMgdG8gZmluaXNoIGl0cyB0ZXN0IGF0IG1vc3QuCisgKiAgICAgIFRodXMsIGlmIHRoaXMgQVBJIHJldHVybiBSVF9FUlJfUEhZX1JUQ1RfTk9UX0ZJTklTSCBvcgorICogICAgICBvdGhlciBlcnJvciBjb2RlLCB0aGUgcmVzdWx0IGNhbiBub3QgYmUgcmVmZXJlbmNlZCBhbmQKKyAqICAgICAgdXNlciBzaG91bGQgY2FsbCB0aGlzIEFQSSBhZ2FpbiB1bnRpbCB0aGlzIEFQSSByZXR1cm5zCisgKiAgICAgIGEgUlRfRVJSX09LLgorICogICAgICBUaGUgcmVzdWx0IGlzIHN0b3JlZCBhdCBwUnRjdFJlc3VsdC0+Z2VfcmVzdWx0CisgKiAgICAgIHBSdGN0UmVzdWx0LT5saW5rVHlwZSBpcyB1bnVzZWQuCisgKiAgICAgIFRoZSB1bml0IG9mIGNoYW5uZWwgbGVuZ3RoIGlzIDIuNWNtLiBFeC4gMzAwIG1lYW5zIDMwMCAqIDIuNSA9IDc1MGNtID0gNy41TQorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcG9ydF9ydGN0UmVzdWx0X2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19ydGN0UmVzdWx0X3QgKnBSdGN0UmVzdWx0KTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3BvcnRfc2RzX3Jlc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgUmVzZXQgU2VyZGVzCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQb3J0IElECisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgICAgICAtIEludmFsaWQgcG9ydCBJRC4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIHJlc2V0IFNlcmRlcworICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcG9ydF9zZHNfcmVzZXQocnRrX3BvcnRfdCBwb3J0KTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3BvcnRfc2dtaWlMaW5rU3RhdHVzX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBTR01JSSBzdGF0dXMKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAtIFBvcnQgSUQKKyAqIE91dHB1dDoKKyAqICAgICAgcFNpZ25hbERldGVjdCAgIC0gU2lnbmFsIGRldGVjdAorICogICAgICBwU3luYyAgICAgICAgICAgLSBTeW5jCisgKiAgICAgIHBMaW5rICAgICAgICAgICAtIExpbmsKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgICAgIC0gSW52YWxpZCBwb3J0IElELgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gcmVzZXQgU2VyZGVzCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19wb3J0X3NnbWlpTGlua1N0YXR1c19nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfZGF0YV90ICpwU2lnbmFsRGV0ZWN0LCBydGtfZGF0YV90ICpwU3luYywgcnRrX3BvcnRfbGlua1N0YXR1c190ICpwTGluayk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wb3J0X3NnbWlpTndheV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBDb25maWd1cmUgU0dNSUkvSFNHTUlJIHBvcnQgTndheSBzdGF0ZQorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgIC0gUG9ydCBJRAorICogICAgICBzdGF0ZSAgICAgICAtIE53YXkgc3RhdGUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgICAgIC0gSW52YWxpZCBwb3J0IElELgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjb25maWd1cmUgU0dNSUkvSFNHTUlJIHBvcnQgTndheSBzdGF0ZQorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcG9ydF9zZ21paU53YXlfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2VuYWJsZV90IHN0YXRlKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3BvcnRfc2dtaWlOd2F5X2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBTR01JSS9IU0dNSUkgcG9ydCBOd2F5IHN0YXRlCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQb3J0IElECisgKiBPdXRwdXQ6CisgKiAgICAgIHBTdGF0ZSAgICAgIC0gTndheSBzdGF0ZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgSUQuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBnZXQgU0dNSUkvSFNHTUlJIHBvcnQgTndheSBzdGF0ZQorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcG9ydF9zZ21paU53YXlfZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2VuYWJsZV90ICpwU3RhdGUpOworCisjZW5kaWYgLyogX19SVEtfQVBJX1BPUlRfSF9fICovCisKKworCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9wdHAuaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3B0cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNGFjYTUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9wdHAuaApAQCAtMCwwICsxLDUxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiBQdXJwb3NlIDogUlRMODM2Ny9SVEw4MzY3QyBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkKKyAqCisgKiBGZWF0dXJlIDogVGhlIGZpbGUgaW5jbHVkZXMgdGltZSBtb2R1bGUgaGlnaC1sYXllciBBUEkgZGVmaW5hdGlvbgorICoKKyAqLworCisjaWZuZGVmIF9fUlRLX0FQSV9QVFBfSF9fCisjZGVmaW5lIF9fUlRLX0FQSV9QVFBfSF9fCisKKy8qCisgKiBTeW1ib2wgRGVmaW5pdGlvbgorICovCisjZGVmaW5lIFJUS19NQVhfTlVNX09GX05BTk9fU0VDT05EICAgICAgICAgICAgICAgICAgICAgMHgzQjlBQzlGRgorI2RlZmluZSBSVEtfUFRQX0lOVFJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYKKyNkZWZpbmUgUlRLX01BWF9OVU1fT0ZfVFBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRgorCisvKiBNZXNzYWdlIFR5cGUgKi8KK3R5cGVkZWYgZW51bSBydGtfcHRwX21zZ1R5cGVfZQoreworICAgIFBUUF9NU0dfVFlQRV9UWF9TWU5DID0gMCwKKyAgICBQVFBfTVNHX1RZUEVfVFhfREVMQVlfUkVRLAorICAgIFBUUF9NU0dfVFlQRV9UWF9QREVMQVlfUkVRLAorICAgIFBUUF9NU0dfVFlQRV9UWF9QREVMQVlfUkVTUCwKKyAgICBQVFBfTVNHX1RZUEVfUlhfU1lOQywKKyAgICBQVFBfTVNHX1RZUEVfUlhfREVMQVlfUkVRLAorICAgIFBUUF9NU0dfVFlQRV9SWF9QREVMQVlfUkVRLAorICAgIFBUUF9NU0dfVFlQRV9SWF9QREVMQVlfUkVTUCwKKyAgICBQVFBfTVNHX1RZUEVfRU5ECit9IHJ0a19wdHBfbXNnVHlwZV90OworCit0eXBlZGVmIGVudW0gcnRrX3B0cF9pbnRUeXBlX2UKK3sKKyAgICBQVFBfSU5UX1RZUEVfVFhfU1lOQyA9IDAsCisgICAgUFRQX0lOVF9UWVBFX1RYX0RFTEFZX1JFUSwKKyAgICBQVFBfSU5UX1RZUEVfVFhfUERFTEFZX1JFUSwKKyAgICBQVFBfSU5UX1RZUEVfVFhfUERFTEFZX1JFU1AsCisgICAgUFRQX0lOVF9UWVBFX1JYX1NZTkMsCisgICAgUFRQX0lOVF9UWVBFX1JYX0RFTEFZX1JFUSwKKyAgICBQVFBfSU5UX1RZUEVfUlhfUERFTEFZX1JFUSwKKyAgICBQVFBfSU5UX1RZUEVfUlhfUERFTEFZX1JFU1AsCisgICAgUFRQX0lOVF9UWVBFX0FMTCwKKyAgICBQVFBfSU5UX1RZUEVfRU5ECit9cnRrX3B0cF9pbnRUeXBlX3Q7CisKK3R5cGVkZWYgZW51bSBydGtfcHRwX3N5c19hZGp1c3RfZQoreworICAgIFNZU19BREpVU1RfUExVUyA9IDAsCisgICAgU1lTX0FESlVTVF9NSU5VUywKKyAgICBTWVNfQURKVVNUX0VORAorfSBydGtfcHRwX3N5c19hZGp1c3RfdDsKKworCisvKiBSZWZlcmVuY2UgVGltZSAqLwordHlwZWRlZiBzdHJ1Y3QgcnRrX3B0cF90aW1lU3RhbXBfcworeworICAgIHJ0a191aW50MzIgc2VjOworICAgIHJ0a191aW50MzIgbnNlYzsKK30gcnRrX3B0cF90aW1lU3RhbXBfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcnRrX3B0cF9pbmZvX3MKK3sKKyAgICBydGtfdWludDMyIHNlcXVlbmNlSWQ7CisgICAgcnRrX3B0cF90aW1lU3RhbXBfdCAgIHRpbWVTdGFtcDsKK30gcnRrX3B0cF9pbmZvX3Q7CisKK3R5cGVkZWYgcnRrX3VpbnQzMiBydGtfcHRwX3RwaWRfdDsKKwordHlwZWRlZiBydGtfdWludDMyICBydGtfcHRwX2ludFN0YXR1c190OyAgICAgLyogaW50ZXJydXB0IHN0YXR1cyBtYXNrICAqLworCisvKgorICogRGF0YSBEZWNsYXJhdGlvbgorICovCisKKy8qCisgKiBGdW5jdGlvbiBEZWNsYXJhdGlvbgorICovCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdGltZV9pbml0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgUFRQIGZ1bmN0aW9uIGluaXRpYWxpemF0aW9uLgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBpbml0aWFsaXplIEVFRSBzdGF0dXMuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19wdHBfaW5pdCh2b2lkKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3B0cF9tYWNfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQ29uZmlndXJlIFBUUCBtYWMgYWRkcmVzcy4KKyAqIElucHV0OgorICogICAgICBtYWMgLSBtYWMgYWRkcmVzcyB0byBwYXJzZXIgUFRQIHBhY2tldHMuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVyLgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcHRwX21hY19zZXQocnRrX21hY190IG1hYyk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wdHBfbWFjX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBQVFAgbWFjIGFkZHJlc3MuCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwTWFjIC0gbWFjIGFkZHJlc3MgdG8gcGFyc2VyIFBUUCBwYWNrZXRzLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIuCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19wdHBfbWFjX2dldChydGtfbWFjX3QgKnBNYWMpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcHRwX3RwaWRfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQ29uZmlndXJlIFBUUCBhY2NlcHRlZCBvdXRlciAmIGlubmVyIHRhZyBUUElELgorICogSW5wdXQ6CisgKiAgICAgIG91dGVySWQgLSBFdGhlciB0eXBlIG9mIFMtdGFnIGZyYW1lIHBhcnNpbmcgaW4gUFRQIHBvcnRzLgorICogICAgICBpbm5lcklkIC0gRXRoZXIgdHlwZSBvZiBDLXRhZyBmcmFtZSBwYXJzaW5nIGluIFBUUCBwb3J0cy4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIuCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19wdHBfdHBpZF9zZXQocnRrX3B0cF90cGlkX3Qgb3V0ZXJJZCwgcnRrX3B0cF90cGlkX3QgaW5uZXJJZCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wdHBfdHBpZF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgUFRQIGFjY2VwdGVkIG91dGVyICYgaW5uZXIgdGFnIFRQSUQuCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwT3V0ZXJJZCAtIEV0aGVyIHR5cGUgb2YgUy10YWcgZnJhbWUgcGFyc2luZyBpbiBQVFAgcG9ydHMuCisgKiAgICAgIHBJbm5lcklkIC0gRXRoZXIgdHlwZSBvZiBDLXRhZyBmcmFtZSBwYXJzaW5nIGluIFBUUCBwb3J0cy4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3B0cF90cGlkX2dldChydGtfcHRwX3RwaWRfdCAqcE91dGVySWQsIHJ0a19wdHBfdHBpZF90ICpwSW5uZXJJZCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wdHBfcmVmVGltZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgdGhlIHJlZmVyZW5jZSB0aW1lIG9mIHRoZSBzcGVjaWZpZWQgZGV2aWNlLgorICogSW5wdXQ6CisgKiAgICAgIHRpbWVTdGFtcCAtIHJlZmVyZW5jZSB0aW1lc3RhbXAgdmFsdWUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfSU5QVVQgICAgLSBpbnZhbGlkIGlucHV0IHBhcmFtZXRlcgorICogQXBwbGljYWJsZToKKyAqICAgICAgODM5MCwgODM4MAorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcHRwX3JlZlRpbWVfc2V0KHJ0a19wdHBfdGltZVN0YW1wX3QgdGltZVN0YW1wKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3B0cF9yZWZUaW1lX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCB0aGUgcmVmZXJlbmNlIHRpbWUgb2YgdGhlIHNwZWNpZmllZCBkZXZpY2UuCisgKiBJbnB1dDoKKyAqIE91dHB1dDoKKyAqICAgICAgcFRpbWVTdGFtcCAtIHBvaW50ZXIgYnVmZmVyIG9mIHRoZSByZWZlcmVuY2UgdGltZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfVU5JVF9JRCAgICAgIC0gaW52YWxpZCB1bml0IGlkCisgKiAgICAgIFJUX0VSUl9OT1RfSU5JVCAgICAgLSBUaGUgbW9kdWxlIGlzIG5vdCBpbml0aWFsCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgLSBpbnB1dCBwYXJhbWV0ZXIgbWF5IGJlIG51bGwgcG9pbnRlcgorICogQXBwbGljYWJsZToKKyAqICAgICAgODM5MCwgODM4MAorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcHRwX3JlZlRpbWVfZ2V0KHJ0a19wdHBfdGltZVN0YW1wX3QgKnBUaW1lU3RhbXApOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcHRwX3JlZlRpbWVBZGp1c3Rfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQWRqdXN0IHRoZSByZWZlcmVuY2UgdGltZS4KKyAqIElucHV0OgorICogICAgICB1bml0ICAgICAgLSB1bml0IGlkCisgKiAgICAgIHNpZ24gICAgICAtIHNpZ25pZmljYW50CisgKiAgICAgIHRpbWVTdGFtcCAtIHJlZmVyZW5jZSB0aW1lc3RhbXAgdmFsdWUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfVU5JVF9JRCAgLSBpbnZhbGlkIHVuaXQgaWQKKyAqICAgICAgUlRfRVJSX05PVF9JTklUIC0gVGhlIG1vZHVsZSBpcyBub3QgaW5pdGlhbAorICogICAgICBSVF9FUlJfSU5QVVQgICAgLSBpbnZhbGlkIGlucHV0IHBhcmFtZXRlcgorICogTm90ZToKKyAqICAgICAgc2lnbj0wIGZvciBwb3NpdGl2ZSBhZGp1c3RtZW50LCBzaWduPTEgZm9yIG5lZ2F0aXZlIGFkanVzdG1lbnQuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19wdHBfcmVmVGltZUFkanVzdF9zZXQocnRrX3B0cF9zeXNfYWRqdXN0X3Qgc2lnbiwgcnRrX3B0cF90aW1lU3RhbXBfdCB0aW1lU3RhbXApOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcHRwX3JlZlRpbWVFbmFibGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHRoZSBlbmFibGUgc3RhdGUgb2YgcmVmZXJlbmNlIHRpbWUgb2YgdGhlIHNwZWNpZmllZCBkZXZpY2UuCisgKiBJbnB1dDoKKyAqICAgICAgZW5hYmxlIC0gc3RhdHVzCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgIC0gaW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3B0cF9yZWZUaW1lRW5hYmxlX3NldChydGtfZW5hYmxlX3QgZW5hYmxlKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3B0cF9yZWZUaW1lRW5hYmxlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCB0aGUgZW5hYmxlIHN0YXRlIG9mIHJlZmVyZW5jZSB0aW1lIG9mIHRoZSBzcGVjaWZpZWQgZGV2aWNlLgorICogSW5wdXQ6CisgKiBPdXRwdXQ6CisgKiAgICAgIHBFbmFibGUgLSBzdGF0dXMKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX1VOSVRfSUQgICAgICAtIGludmFsaWQgdW5pdCBpZAorICogICAgICBSVF9FUlJfTk9UX0lOSVQgICAgIC0gVGhlIG1vZHVsZSBpcyBub3QgaW5pdGlhbAorICogICAgICBSVF9FUlJfTlVMTF9QT0lOVEVSIC0gaW5wdXQgcGFyYW1ldGVyIG1heSBiZSBudWxsIHBvaW50ZXIKKyAqIEFwcGxpY2FibGU6CisgKiAgICAgIDgzOTAsIDgzODAKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3B0cF9yZWZUaW1lRW5hYmxlX2dldChydGtfZW5hYmxlX3QgKnBFbmFibGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcHRwX3BvcnRFbmFibGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IFBUUCBzdGF0dXMgb2YgdGhlIHNwZWNpZmllZCBwb3J0LgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAtIHBvcnQgaWQKKyAqICAgICAgZW5hYmxlIC0gc3RhdHVzCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX1BPUlQgICAgIC0gaW52YWxpZCBwb3J0IGlkCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAtIGludmFsaWQgaW5wdXQgcGFyYW1ldGVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19wdHBfcG9ydEVuYWJsZV9zZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfZW5hYmxlX3QgZW5hYmxlKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3B0cF9wb3J0RW5hYmxlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBQVFAgc3RhdHVzIG9mIHRoZSBzcGVjaWZpZWQgcG9ydC4KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gcG9ydCBpZAorICogT3V0cHV0OgorICogICAgICBwRW5hYmxlIC0gc3RhdHVzCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiAgICAgIFJUX0VSUl9QT1JUICAgICAgICAgLSBpbnZhbGlkIHBvcnQgaWQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAtIGlucHV0IHBhcmFtZXRlciBtYXkgYmUgbnVsbCBwb2ludGVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19wdHBfcG9ydEVuYWJsZV9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfZW5hYmxlX3QgKnBFbmFibGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcHRwX3BvcnRUaW1lc3RhbXBfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFBUUCB0aW1zdGFtcCBhY2NvcmRpbmcgdG8gdGhlIFBUUCBpZGVudGlmaWVyIG9uIHRoZSBkZWRpY2F0ZWQgcG9ydCBmcm9tIHRoZSBzcGVjaWZpZWQgZGV2aWNlLgorICogSW5wdXQ6CisgKiAgICAgIHVuaXQgICAgICAgLSB1bml0IGlkCisgKiAgICAgIHBvcnQgICAgICAgLSBwb3J0IGlkCisgKiAgICAgIHR5cGUgICAgICAgLSBQVFAgbWVzc2FnZSB0eXBlCisgKiBPdXRwdXQ6CisgKiAgICAgIHBJbmZvICAgICAgLSBwb2ludGVyIGJ1ZmZlciBvZiBzZXF1ZW5jZSBJRCBhbmQgdGltZXN0YW1wCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBpbnZhbGlkIHBvcnQgaWQKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIGludmFsaWQgaW5wdXQgcGFyYW1ldGVyCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgLSBpbnB1dCBwYXJhbWV0ZXIgbWF5IGJlIG51bGwgcG9pbnRlcgorICogQXBwbGljYWJsZToKKyAqICAgICAgODM5MCwgODM4MAorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcHRwX3BvcnRUaW1lc3RhbXBfZ2V0KCBydGtfcG9ydF90IHBvcnQsIHJ0a19wdHBfbXNnVHlwZV90IHR5cGUsIHJ0a19wdHBfaW5mb190ICpwSW5mbyk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wdHBfaW50Q29udHJvbF9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgUFRQIGludGVycnVwdCB0cmlnZ2VyIHN0YXR1cyBjb25maWd1cmF0aW9uLgorICogSW5wdXQ6CisgKiAgICAgIHR5cGUgLSBJbnRlcnJ1cHQgdHlwZS4KKyAqICAgICAgZW5hYmxlIC0gSW50ZXJydXB0IHN0YXR1cy4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogICAgICBSVF9FUlJfRU5BQkxFICAgICAgIC0gSW52YWxpZCBlbmFibGUgaW5wdXQuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBzZXQgUFRQIGludGVycnVwdCBzdGF0dXMgY29uZmlndXJhdGlvbi4KKyAqICAgICAgVGhlIGludGVycnVwdCB0cmlnZ2VyIHN0YXR1cyBpcyBzaG93biBpbiB0aGUgZm9sbG93aW5nOgorICogICAgICAgICAgUFRQX0lOVF9UWVBFX1RYX1NZTkMgPSAwLAorICogICAgICAgICAgUFRQX0lOVF9UWVBFX1RYX0RFTEFZX1JFUSwKKyAqICAgICAgICAgIFBUUF9JTlRfVFlQRV9UWF9QREVMQVlfUkVRLAorICogICAgICAgICAgUFRQX0lOVF9UWVBFX1RYX1BERUxBWV9SRVNQLAorICogICAgICAgICAgUFRQX0lOVF9UWVBFX1JYX1NZTkMsCisgKiAgICAgICAgICBQVFBfSU5UX1RZUEVfUlhfREVMQVlfUkVRLAorICogICAgICAgICAgUFRQX0lOVF9UWVBFX1JYX1BERUxBWV9SRVEsCisgKiAgICAgICAgICBQVFBfSU5UX1RZUEVfUlhfUERFTEFZX1JFU1AsCisgKiAgICAgICAgICBQVFBfSU5UX1RZUEVfQUxMLAorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcHRwX2ludENvbnRyb2xfc2V0KHJ0a19wdHBfaW50VHlwZV90IHR5cGUsIHJ0a19lbmFibGVfdCBlbmFibGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcHRwX2ludENvbnRyb2xfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFBUUCBpbnRlcnJ1cHQgdHJpZ2dlciBzdGF0dXMgY29uZmlndXJhdGlvbi4KKyAqIElucHV0OgorICogICAgICB0eXBlIC0gSW50ZXJydXB0IHR5cGUuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBFbmFibGUgLSBJbnRlcnJ1cHQgc3RhdHVzLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IGludGVycnVwdCBzdGF0dXMgY29uZmlndXJhdGlvbi4KKyAqICAgICAgVGhlIGludGVycnVwdCB0cmlnZ2VyIHN0YXR1cyBpcyBzaG93biBpbiB0aGUgZm9sbG93aW5nOgorICogICAgICAgICAgUFRQX0lOVF9UWVBFX1RYX1NZTkMgPSAwLAorICogICAgICAgICAgUFRQX0lOVF9UWVBFX1RYX0RFTEFZX1JFUSwKKyAqICAgICAgICAgIFBUUF9JTlRfVFlQRV9UWF9QREVMQVlfUkVRLAorICogICAgICAgICAgUFRQX0lOVF9UWVBFX1RYX1BERUxBWV9SRVNQLAorICogICAgICAgICAgUFRQX0lOVF9UWVBFX1JYX1NZTkMsCisgKiAgICAgICAgICBQVFBfSU5UX1RZUEVfUlhfREVMQVlfUkVRLAorICogICAgICAgICAgUFRQX0lOVF9UWVBFX1JYX1BERUxBWV9SRVEsCisgKiAgICAgICAgICBQVFBfSU5UX1RZUEVfUlhfUERFTEFZX1JFU1AsCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19wdHBfaW50Q29udHJvbF9nZXQocnRrX3B0cF9pbnRUeXBlX3QgdHlwZSwgcnRrX2VuYWJsZV90ICpwRW5hYmxlKTsKKworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcHRwX2ludFN0YXR1c19nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgUFRQIHBvcnQgaW50ZXJydXB0IHRyaWdnZXIgc3RhdHVzLgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgICAgIC0gcGh5c2ljYWwgcG9ydAorICogT3V0cHV0OgorICogICAgICBwU3RhdHVzTWFzayAtIEludGVycnVwdCBzdGF0dXMgYml0IG1hc2suCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBnZXQgaW50ZXJydXB0IHRyaWdnZXIgc3RhdHVzIHdoZW4gaW50ZXJydXB0IGhhcHBlbmVkLgorICogICAgICBUaGUgaW50ZXJydXB0IHRyaWdnZXIgc3RhdHVzIGlzIHNob3duIGluIHRoZSBmb2xsb3dpbmc6CisgKiAgICAgIC0gUE9SVCAwICBJTlQgICAgKHZhbHVlWzBdIChCaXQwKSkKKyAqICAgICAgLSBQT1JUIDEgIElOVCAgICAodmFsdWVbMF0gKEJpdDEpKQorICogICAgICAtIFBPUlQgMiAgSU5UICAgICh2YWx1ZVswXSAoQml0MikpCisgKiAgICAgIC0gUE9SVCAzICBJTlQgICAgKHZhbHVlWzBdIChCaXQzKSkKKyAqICAgICAgLSBQT1JUIDQgIElOVCAgICh2YWx1ZVswXSAoQml0NCkpCisKKyAqCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19wdHBfaW50U3RhdHVzX2dldChydGtfcHRwX2ludFN0YXR1c190ICpwU3RhdHVzTWFzayk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wdHBfcG9ydEludFN0YXR1c19zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgUFRQIHBvcnQgaW50ZXJydXB0IHRyaWdnZXIgc3RhdHVzIHRvIGNsZWFuLgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgICAgIC0gcGh5c2ljYWwgcG9ydAorICogICAgICBzdGF0dXNNYXNrIC0gSW50ZXJydXB0IHN0YXR1cyBiaXQgbWFzay4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBjbGVhbiBpbnRlcnJ1cHQgdHJpZ2dlciBzdGF0dXMgd2hlbiBpbnRlcnJ1cHQgaGFwcGVuZWQuCisgKiAgICAgIFRoZSBpbnRlcnJ1cHQgdHJpZ2dlciBzdGF0dXMgaXMgc2hvd24gaW4gdGhlIGZvbGxvd2luZzoKKyAqICAgICAgLSBQVFBfSU5UX1RZUEVfVFhfU1lOQyAgICAgICAgICAgICAgKHZhbHVlWzBdIChCaXQwKSkKKyAqICAgICAgLSBQVFBfSU5UX1RZUEVfVFhfREVMQVlfUkVRICAgICAgKHZhbHVlWzBdIChCaXQxKSkKKyAqICAgICAgLSBQVFBfSU5UX1RZUEVfVFhfUERFTEFZX1JFUSAgICAodmFsdWVbMF0gKEJpdDIpKQorICogICAgICAtIFBUUF9JTlRfVFlQRV9UWF9QREVMQVlfUkVTUCAgICh2YWx1ZVswXSAoQml0MykpCisgKiAgICAgIC0gUFRQX0lOVF9UWVBFX1JYX1NZTkMgICAgICAgICAgICAgICh2YWx1ZVswXSAoQml0NCkpCisgKiAgICAgIC0gUFRQX0lOVF9UWVBFX1JYX0RFTEFZX1JFUSAgICAgICh2YWx1ZVswXSAoQml0NSkpCisgKiAgICAgIC0gUFRQX0lOVF9UWVBFX1JYX1BERUxBWV9SRVEgICAgKHZhbHVlWzBdIChCaXQ2KSkKKyAqICAgICAgLSBQVFBfSU5UX1RZUEVfUlhfUERFTEFZX1JFU1AgICAodmFsdWVbMF0gKEJpdDcpKQorICogICAgICBUaGUgc3RhdHVzIHdpbGwgYmUgY2xlYXJlZCBhZnRlciBleGVjdXRlIHRoaXMgQVBJLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcHRwX3BvcnRJbnRTdGF0dXNfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3B0cF9pbnRTdGF0dXNfdCBzdGF0dXNNYXNrKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3B0cF9wb3J0SW50U3RhdHVzX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBQVFAgcG9ydCBpbnRlcnJ1cHQgdHJpZ2dlciBzdGF0dXMuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgICAgLSBwaHlzaWNhbCBwb3J0CisgKiBPdXRwdXQ6CisgKiAgICAgIHBTdGF0dXNNYXNrIC0gSW50ZXJydXB0IHN0YXR1cyBiaXQgbWFzay4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGdldCBpbnRlcnJ1cHQgdHJpZ2dlciBzdGF0dXMgd2hlbiBpbnRlcnJ1cHQgaGFwcGVuZWQuCisgKiAgICAgIFRoZSBpbnRlcnJ1cHQgdHJpZ2dlciBzdGF0dXMgaXMgc2hvd24gaW4gdGhlIGZvbGxvd2luZzoKKyAqICAgICAgLSBQVFBfSU5UX1RZUEVfVFhfU1lOQyAgICAgICAgICAgICAgKHZhbHVlWzBdIChCaXQwKSkKKyAqICAgICAgLSBQVFBfSU5UX1RZUEVfVFhfREVMQVlfUkVRICAgICAgKHZhbHVlWzBdIChCaXQxKSkKKyAqICAgICAgLSBQVFBfSU5UX1RZUEVfVFhfUERFTEFZX1JFUSAgICAodmFsdWVbMF0gKEJpdDIpKQorICogICAgICAtIFBUUF9JTlRfVFlQRV9UWF9QREVMQVlfUkVTUCAgICh2YWx1ZVswXSAoQml0MykpCisgKiAgICAgIC0gUFRQX0lOVF9UWVBFX1JYX1NZTkMgICAgICAgICAgICAgICh2YWx1ZVswXSAoQml0NCkpCisgKiAgICAgIC0gUFRQX0lOVF9UWVBFX1JYX0RFTEFZX1JFUSAgICAgICh2YWx1ZVswXSAoQml0NSkpCisgKiAgICAgIC0gUFRQX0lOVF9UWVBFX1JYX1BERUxBWV9SRVEgICAgKHZhbHVlWzBdIChCaXQ2KSkKKyAqICAgICAgLSBQVFBfSU5UX1RZUEVfUlhfUERFTEFZX1JFU1AgICAodmFsdWVbMF0gKEJpdDcpKQorICoKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3B0cF9wb3J0SW50U3RhdHVzX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19wdHBfaW50U3RhdHVzX3QgKnBTdGF0dXNNYXNrKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3B0cF9wb3J0UHRwVHJhcF9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgUFRQIHBhY2tldCB0cmFwIG9mIHRoZSBzcGVjaWZpZWQgcG9ydC4KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgLSBwb3J0IGlkCisgKiAgICAgIGVuYWJsZSAtIHN0YXR1cworICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiAgICAgIFJUX0VSUl9QT1JUICAgICAtIGludmFsaWQgcG9ydCBpZAorICogICAgICBSVF9FUlJfSU5QVVQgICAgLSBpbnZhbGlkIGlucHV0IHBhcmFtZXRlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcHRwX3BvcnRUcmFwX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19lbmFibGVfdCBlbmFibGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcHRwX3BvcnRQdHBFbmFibGVfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFBUUCBwYWNrZXQgdHJhcCBvZiB0aGUgc3BlY2lmaWVkIHBvcnQuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIHBvcnQgaWQKKyAqIE91dHB1dDoKKyAqICAgICAgcEVuYWJsZSAtIHN0YXR1cworICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfUE9SVCAgICAgICAgIC0gaW52YWxpZCBwb3J0IGlkCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgLSBpbnB1dCBwYXJhbWV0ZXIgbWF5IGJlIG51bGwgcG9pbnRlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcHRwX3BvcnRUcmFwX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19lbmFibGVfdCAqcEVuYWJsZSk7CisKKyNlbmRpZiAvKiBfX1JUS19BUElfUFRQX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcW9zLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9xb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmU0MTc0Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcW9zLmgKQEAgLTAsMCArMSw3ODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogUHVycG9zZSA6IFJUTDgzNjcvUlRMODM2N0Mgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJCisgKgorICogRmVhdHVyZSA6IFRoZSBmaWxlIGluY2x1ZGVzIFFvUyBtb2R1bGUgaGlnaC1sYXllciBBUEkgZGVmaW5hdGlvbgorICoKKyAqLworCisjaWZuZGVmIF9fUlRLX0FQSV9RT1NfSF9fCisjZGVmaW5lIF9fUlRLX0FQSV9RT1NfSF9fCisKKy8qCisgKiBEYXRhIFR5cGUgRGVjbGFyYXRpb24KKyAqLworI2RlZmluZSBRT1NfREVGQVVMVF9USUNLX1BFUklPRCAgICAgICAgICAgICAgICAgICAgICgxOS0xKQorI2RlZmluZSBRT1NfREVGQVVMVF9CWVRFX1BFUl9UT0tFTiAgICAgICAgICAgICAgICAgIDM0CisjZGVmaW5lIFFPU19ERUZBVUxUX0xLX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgKDM0KjMpIC8qIFdoeSB1c2UgMHg0MDA/ICovCisKKworI2RlZmluZSBRT1NfREVGQVVMVF9JTkdSRVNTX0JBTkRXSURUSCAgICAgICAgICAgICAgIDB4M0ZGRiAvKiAweDNGRkYgPT4gdW5saW1pdCAqLworI2RlZmluZSBRT1NfREVGQVVMVF9FR1JFU1NfQkFORFdJRFRIICAgICAgICAgICAgICAgIDB4M0QwOCAvKiggMHgzRDA4ICsgMSkgKiA2NEticHMgPT4gMUdicHMqLworI2RlZmluZSBRT1NfREVGQVVMVF9QUkVJRlAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUU9TX0RFRkFVTFRfUEFDS0VUX1VTRURfUEFHRVNfRkMgICAgICAgICAgICAweDYwCisjZGVmaW5lIFFPU19ERUZBVUxUX1BBQ0tFVF9VU0VEX0ZDX0VOICAgICAgICAgICAgICAgMAorI2RlZmluZSBRT1NfREVGQVVMVF9RVUVVRV9CQVNFRF9GQ19FTiAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBRT1NfREVGQVVMVF9QUklPUklUWV9TRUxFQ1RfUE9SVCAgICAgICAgICAgIDgKKyNkZWZpbmUgUU9TX0RFRkFVTFRfUFJJT1JJVFlfU0VMRUNUXzFRICAgICAgICAgICAgICAwCisjZGVmaW5lIFFPU19ERUZBVUxUX1BSSU9SSVRZX1NFTEVDVF9BQ0wgICAgICAgICAgICAgMAorI2RlZmluZSBRT1NfREVGQVVMVF9QUklPUklUWV9TRUxFQ1RfRFNDUCAgICAgICAgICAgIDAKKworI2RlZmluZSBRT1NfREVGQVVMVF9EU0NQX01BUFBJTkdfUFJJT1JJVFkgICAgICAgICAgIDAKKworI2RlZmluZSBRT1NfREVGQVVMVF8xUV9SRU1BUktJTkdfQUJJTElUWSAgICAgICAgICAgIDAKKyNkZWZpbmUgUU9TX0RFRkFVTFRfRFNDUF9SRU1BUktJTkdfQUJJTElUWSAgICAgICAgICAwCisjZGVmaW5lIFFPU19ERUZBVUxUX1FVRVVFX0dBUCAgICAgICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgUU9TX0RFRkFVTFRfUVVFVUVfTk9fTUFYICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIFFPU19ERUZBVUxUX0FWRVJBR0VfUEFDS0VUX1JBVEUgICAgICAgICAgICAgMHgzRkZGCisjZGVmaW5lIFFPU19ERUZBVUxUX0JVUlNUX1NJWkVfSU5fQVBSICAgICAgICAgICAgICAgMHgzRgorI2RlZmluZSBRT1NfREVGQVVMVF9QRUFLX1BBQ0tFVF9SQVRFICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgUU9TX0RFRkFVTFRfU0NIRURVTEVSX0FCSUxJVFlfQVBSICAgICAgICAgICAxICAgICAvKmRpc2FibGUqLworI2RlZmluZSBRT1NfREVGQVVMVF9TQ0hFRFVMRVJfQUJJTElUWV9QUFIgICAgICAgICAgIDEgICAgLypkaXNhYmxlKi8KKyNkZWZpbmUgUU9TX0RFRkFVTFRfU0NIRURVTEVSX0FCSUxJVFlfV0ZRICAgICAgICAgICAxICAgIC8qZGlzYWJsZSovCisKKyNkZWZpbmUgUU9TX1dFSUdIVF9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjcKKworI2RlZmluZSBSVEtfTUFYX05VTV9PRl9QUklPUklUWSAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgUlRLX01BWF9OVU1fT0ZfUVVFVUUgICAgICAgICAgICAgICAgICAgICAgICA4CisKKyNkZWZpbmUgUlRLX1BSSU1BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgUlRLX1FJRE1BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgUlRLX0RTQ1BNQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYzCisKKworLyogZW51bSBQcmlvcml0eSBTZWxlY3Rpb24gSW5kZXggKi8KK3R5cGVkZWYgZW51bSBydGtfcW9zX3ByaURlY1RibF9lCit7CisgICAgUFJJREVDVEJMX0lEWDAgPSAwLAorICAgIFBSSURFQ1RCTF9JRFgxLAorICAgIFBSSURFQ1RCTF9FTkQsCit9cnRrX3Fvc19wcmlEZWNUYmxfdDsKKworCisvKiBUeXBlcyBvZiA4MDIuMXAgcmVtYXJraW5nIHNvdXJjZSAqLwordHlwZWRlZiBlbnVtIHJ0a19xb3NfMXBSbWtTcmNfZQoreworICAgIERPVDFQX1JNS19TUkNfVVNFUl9QUkksCisgICAgRE9UMVBfUk1LX1NSQ19UQUdfUFJJLAorICAgIERPVDFQX1JNS19TUkNfRU5ECit9IHJ0a19xb3NfMXBSbWtTcmNfdDsKKworCisvKiBUeXBlcyBvZiBEU0NQIHJlbWFya2luZyBzb3VyY2UgKi8KK3R5cGVkZWYgZW51bSBydGtfcW9zX2RzY3BSbWtTcmNfZQoreworICAgIERTQ1BfUk1LX1NSQ19JTlRfUFJJLAorICAgIERTQ1BfUk1LX1NSQ19EU0NQLAorICAgIERTQ1BfUk1LX1NSQ19VU0VSX1BSSSwKKyAgICBEU0NQX1JNS19TUkNfRU5ECit9IHJ0a19xb3NfZHNjcFJta1NyY190OworCisKKworCit0eXBlZGVmIHN0cnVjdCBydGtfcHJpb3JpdHlfc2VsZWN0X3MKK3sKKyAgICBydGtfdWludDMyIHBvcnRfcHJpOworICAgIHJ0a191aW50MzIgZG90MXFfcHJpOworICAgIHJ0a191aW50MzIgYWNsX3ByaTsKKyAgICBydGtfdWludDMyIGRzY3BfcHJpOworICAgIHJ0a191aW50MzIgY3ZsYW5fcHJpOworICAgIHJ0a191aW50MzIgc3ZsYW5fcHJpOworICAgIHJ0a191aW50MzIgZG1hY19wcmk7CisgICAgcnRrX3VpbnQzMiBzbWFjX3ByaTsKK30gcnRrX3ByaW9yaXR5X3NlbGVjdF90OworCit0eXBlZGVmIHN0cnVjdCBydGtfcW9zX3ByaTJxdWV1ZV9zCit7CisgICAgcnRrX3VpbnQzMiBwcmkycXVldWVbUlRLX01BWF9OVU1fT0ZfUFJJT1JJVFldOworfSBydGtfcW9zX3ByaTJxdWV1ZV90OworCit0eXBlZGVmIHN0cnVjdCBydGtfcW9zX3F1ZXVlX3dlaWdodHNfcworeworICAgIHJ0a191aW50MzIgd2VpZ2h0c1tSVEtfTUFYX05VTV9PRl9RVUVVRV07Cit9IHJ0a19xb3NfcXVldWVfd2VpZ2h0c190OworCit0eXBlZGVmIGVudW0gcnRrX3Fvc19zY2hlZHVsaW5nX3R5cGVfZQoreworICAgIFdGUSA9IDAsICAgICAgICAvKiBXZWlnaHRlZC1GYWlyLVF1ZXVlICovCisgICAgV1JSLCAgICAgICAgICAgIC8qIFdlaWdodGVkLVJvdW5kLVJvYmluICovCisgICAgU0NIRURVTElOR19UWVBFX0VORAorfSBydGtfcW9zX3NjaGVkdWxpbmdfdHlwZV90OworCit0eXBlZGVmIHJ0a191aW50MzIgIHJ0a19xdWV1ZV9udW1fdDsgICAgLyogcXVldWUgbnVtYmVyKi8KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3Fvc19pbml0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQ29uZmlndXJlIFFvcyBkZWZhdWx0IHNldHRpbmdzIHdpdGggcXVldWUgbnVtYmVyIGFzc2lnbWVudCB0byBlYWNoIHBvcnQuCisgKiBJbnB1dDoKKyAqICAgICAgcXVldWVOdW0gLSBRdWV1ZSBudW1iZXIgb2YgZWFjaCBwb3J0LgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9RVUVVRV9OVU0gICAgLSBJbnZhbGlkIHF1ZXVlIG51bWJlci4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIHdpbGwgaW5pdGlhbGl6ZSByZWxhdGVkIFFvcyBzZXR0aW5nIHdpdGggcXVldWUgbnVtYmVyIGFzc2lnbWVudC4KKyAqICAgICAgVGhlIHF1ZXVlIG51bWJlciBpcyBmcm9tIDEgdG8gOC4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3Fvc19pbml0KHJ0a19xdWV1ZV9udW1fdCBxdWV1ZU51bSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19xb3NfcHJpU2VsX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIENvbmZpZ3VyZSB0aGUgcHJpb3JpdHkgb3JkZXIgYW1vbmcgZGlmZmVyZW50IHByaW9yaXR5IG1lY2hhbmlzbS4KKyAqIElucHV0OgorICogICAgICBpbmRleCAtIFByaW9yaXR5IGRlY2lzaW9uIHRhYmxlIGluZGV4ICgwfjEpCisgKiAgICAgIHBQcmlEZWMgLSBQcmlvcml0eSBhc3NpZ24gZm9yIHBvcnQsIGRzY3AsIDgwMi4xcCwgY3ZsYW4sIHN2bGFuLCBhY2wgYmFzZWQgcHJpb3JpdHkgZGVjaXNpb24uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1FPU19TRUxfUFJJX1NPVVJDRSAgIC0gSW52YWxpZCBwcmlvcml0eSBkZWNpc2lvbiBzb3VyY2UgcGFyYW1ldGVyLgorICogTm90ZToKKyAqICAgICAgQVNJQyB3aWxsIGZvbGxvdyB1c2VyIHByaW9yaXR5IHNldHRpbmcgb2YgbWVjaGFuaXNtcyB0byBzZWxlY3QgbWFwcGVkIHF1ZXVlIHByaW9yaXR5IGZvciByZWNlaXZpbmcgZnJhbWUuCisgKiAgICAgIElmIHR3byBwcmlvcml0eSBtZWNoYW5pc21zIGFyZSB0aGUgc2FtZSwgdGhlIEFTSUMgd2lsbCBjaG9zZSB0aGUgaGlnaGVzdCBwcmlvcml0eSBmcm9tIG1lY2hhbmlzbXMgdG8KKyAqICAgICAgYXNzaWduIHF1ZXVlIHByaW9yaXR5IHRvIHJlY2VpdmluZyBmcmFtZS4KKyAqICAgICAgVGhlIHByaW9yaXR5IHNvdXJjZXMgYXJlOgorICogICAgICAtIFBSSURFQ19QT1JUCisgKiAgICAgIC0gUFJJREVDX0FDTAorICogICAgICAtIFBSSURFQ19EU0NQCisgKiAgICAgIC0gUFJJREVDXzFRCisgKiAgICAgIC0gUFJJREVDXzFBRAorICogICAgICAtIFBSSURFQ19DVkxBTgorICogICAgICAtIFBSSURFQ19EQQorICogICAgICAtIFBSSURFQ19TQQorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcW9zX3ByaVNlbF9zZXQocnRrX3Fvc19wcmlEZWNUYmxfdCBpbmRleCwgcnRrX3ByaW9yaXR5X3NlbGVjdF90ICpwUHJpRGVjKTsKKworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcW9zX3ByaVNlbF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgdGhlIHByaW9yaXR5IG9yZGVyIGNvbmZpZ3VyYXRpb24gYW1vbmcgZGlmZmVyZW50IHByaW9yaXR5IG1lY2hhbmlzbS4KKyAqIElucHV0OgorICogICAgICBpbmRleCAtIFByaW9yaXR5IGRlY2lzaW9uIHRhYmxlIGluZGV4ICgwfjEpCisgKiBPdXRwdXQ6CisgKiAgICAgIHBQcmlEZWMgLSBQcmlvcml0eSBhc3NpZ24gZm9yIHBvcnQsIGRzY3AsIDgwMi4xcCwgY3ZsYW4sIHN2bGFuLCBhY2wgYmFzZWQgcHJpb3JpdHkgZGVjaXNpb24gLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgQVNJQyB3aWxsIGZvbGxvdyB1c2VyIHByaW9yaXR5IHNldHRpbmcgb2YgbWVjaGFuaXNtcyB0byBzZWxlY3QgbWFwcGVkIHF1ZXVlIHByaW9yaXR5IGZvciByZWNlaXZpbmcgZnJhbWUuCisgKiAgICAgIElmIHR3byBwcmlvcml0eSBtZWNoYW5pc21zIGFyZSB0aGUgc2FtZSwgdGhlIEFTSUMgd2lsbCBjaG9zZSB0aGUgaGlnaGVzdCBwcmlvcml0eSBmcm9tIG1lY2hhbmlzbXMgdG8KKyAqICAgICAgYXNzaWduIHF1ZXVlIHByaW9yaXR5IHRvIHJlY2VpdmluZyBmcmFtZS4KKyAqICAgICAgVGhlIHByaW9yaXR5IHNvdXJjZXMgYXJlOgorICogICAgICAtIFBSSURFQ19QT1JULAorICogICAgICAtIFBSSURFQ19BQ0wsCisgKiAgICAgIC0gUFJJREVDX0RTQ1AsCisgKiAgICAgIC0gUFJJREVDXzFRLAorICogICAgICAtIFBSSURFQ18xQUQsCisgKiAgICAgIC0gUFJJREVDX0NWTEFOLAorICogICAgICAtIFBSSURFQ19EQSwKKyAqICAgICAgLSBQUklERUNfU0EsCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19xb3NfcHJpU2VsX2dldChydGtfcW9zX3ByaURlY1RibF90IGluZGV4LCBydGtfcHJpb3JpdHlfc2VsZWN0X3QgKnBQcmlEZWMpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcW9zXzFwUHJpUmVtYXBfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQ29uZmlndXJlIDFRIHByaW9yaXRpZXMgbWFwcGluZyB0byBpbnRlcm5hbCBhYnNvbHV0ZSBwcmlvcml0eS4KKyAqIElucHV0OgorICogICAgICBkb3QxcF9wcmkgICAtIDgwMi4xcCBwcmlvcml0eSB2YWx1ZS4KKyAqICAgICAgaW50X3ByaSAgICAgLSBpbnRlcm5hbCBwcmlvcml0eSB2YWx1ZS4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX1ZMQU5fUFJJT1JJVFkgICAgLSBJbnZhbGlkIDFwIHByaW9yaXR5LgorICogICAgICBSVF9FUlJfUU9TX0lOVF9QUklPUklUWSAtIEludmFsaWQgcHJpb3JpdHkuCisgKiBOb3RlOgorICogICAgICBQcmlvcml0eSBvZiA4MDIuMVEgYXNzaWdubWVudCBmb3IgaW50ZXJuYWwgYXNpYyBwcmlvcml0eSwgYW5kIGl0IGlzIHVzZWQgZm9yIHF1ZXVlIHVzYWdlIGFuZCBwYWNrZXQgc2NoZWR1bGluZy4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3Fvc18xcFByaVJlbWFwX3NldChydGtfcHJpX3QgZG90MXBfcHJpLCBydGtfcHJpX3QgaW50X3ByaSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19xb3NfMXBQcmlSZW1hcF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgMVEgcHJpb3JpdGllcyBtYXBwaW5nIHRvIGludGVybmFsIGFic29sdXRlIHByaW9yaXR5LgorICogSW5wdXQ6CisgKiAgICAgIGRvdDFwX3ByaSAtIDgwMi4xcCBwcmlvcml0eSB2YWx1ZSAuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBJbnRfcHJpIC0gaW50ZXJuYWwgcHJpb3JpdHkgdmFsdWUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9WTEFOX1BSSU9SSVRZICAgIC0gSW52YWxpZCBwcmlvcml0eS4KKyAqICAgICAgUlRfRVJSX1FPU19JTlRfUFJJT1JJVFkgLSBJbnZhbGlkIHByaW9yaXR5LgorICogTm90ZToKKyAqICAgICAgUHJpb3JpdHkgb2YgODAyLjFRIGFzc2lnbWVudCBmb3IgaW50ZXJuYWwgYXNpYyBwcmlvcml0eSwgYW5kIGl0IGlzIHVlc2VkIGZvciBxdWV1ZSB1c2FnZSBhbmQgcGFja2V0IHNjaGVkdWxpbmcuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19xb3NfMXBQcmlSZW1hcF9nZXQocnRrX3ByaV90IGRvdDFwX3ByaSwgcnRrX3ByaV90ICpwSW50X3ByaSk7CisKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3Fvc18xcFJlbWFya1NyY1NlbF9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgcmVtYXJraW5nIHNvdXJjZSBvZiA4MDIuMXAgcmVtYXJraW5nLgorICogSW5wdXQ6CisgKiAgICAgIHR5cGUgICAgICAtIHJlbWFya2luZyBzb3VyY2UKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfTk9UX0lOSVQgICAgICAgICAtIFRoZSBtb2R1bGUgaXMgbm90IGluaXRpYWwKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gaW52YWxpZCBwb3J0IGlkCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgIC0gaW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIKKworICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gY29uZmlndXJlIDgwMi4xcCByZW1hcmsgZnVuY3Rpb25hbGl0eSB0byBtYXAgb3JpZ2luYWwgODAyLjFwIHZhbHVlIG9yIGludGVybmFsCisgKiAgICAgIHByaW9yaXR5IHRvIFRYIERTQ1AgdmFsdWUuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19xb3NfMXBSZW1hcmtTcmNTZWxfc2V0KHJ0a19xb3NfMXBSbWtTcmNfdCB0eXBlKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3Fvc18xcFJlbWFya1NyY1NlbF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcmVtYXJraW5nIHNvdXJjZSBvZiA4MDIuMXAgcmVtYXJraW5nLgorICogSW5wdXQ6CisgKiAgICAgIG5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcFR5cGUgICAgICAtIHJlbWFya2luZyBzb3VyY2UKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX05PVF9JTklUICAgICAgICAgLSBUaGUgbW9kdWxlIGlzIG5vdCBpbml0aWFsCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgIC0gaW52YWxpZCBwb3J0IGlkCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgIC0gaW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAgICAgLSBpbnB1dCBwYXJhbWV0ZXIgbWF5IGJlIG51bGwgcG9pbnRlcgorCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19xb3NfMXBSZW1hcmtTcmNTZWxfZ2V0KHJ0a19xb3NfMXBSbWtTcmNfdCAqcFR5cGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcW9zX2RzY3BQcmlSZW1hcF9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBNYXAgZHNjcCB2YWx1ZSB0byBpbnRlcm5hbCBwcmlvcml0eS4KKyAqIElucHV0OgorICogICAgICBkc2NwICAgIC0gRHNjcCB2YWx1ZSBvZiByZWNlaXZpbmcgZnJhbWUKKyAqICAgICAgaW50X3ByaSAtIGludGVybmFsIHByaW9yaXR5IHZhbHVlIC4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX1FPU19EU0NQX1ZBTFVFICAgLSBJbnZhbGlkIERTQ1AgdmFsdWUuCisgKiAgICAgIFJUX0VSUl9RT1NfSU5UX1BSSU9SSVRZIC0gSW52YWxpZCBwcmlvcml0eS4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBEaWZmZXJlbnRpYXRlZCBTZXJ2aWNlIENvZGUgUG9pbnQgaXMgYSBzZWxlY3RvciBmb3Igcm91dGVyJ3MgcGVyLWhvcCBiZWhhdmlvcnMuIEFzIGEgc2VsZWN0b3IsIHRoZXJlIGlzIG5vIGltcGxpY2F0aW9uIHRoYXQgYSBudW1lcmljYWxseQorICogICAgICBncmVhdGVyIERTQ1AgaW1wbGllcyBhIGJldHRlciBuZXR3b3JrIHNlcnZpY2UuIEFzIGNhbiBiZSBzZWVuLCB0aGUgRFNDUCB0b3RhbGx5IG92ZXJsYXBzIHRoZSBvbGQgcHJlY2VkZW5jZSBmaWVsZCBvZiBUT1MuIFNvIGlmIHZhbHVlcyBvZgorICogICAgICBEU0NQIGFyZSBjYXJlZnVsbHkgY2hvc2VuIHRoZW4gYmFja3dhcmQgY29tcGF0aWJpbGl0eSBjYW4gYmUgYWNoaWV2ZWQuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19xb3NfZHNjcFByaVJlbWFwX3NldChydGtfZHNjcF90IGRzY3AsIHJ0a19wcmlfdCBpbnRfcHJpKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3Fvc19kc2NwUHJpUmVtYXBfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGRzY3AgdmFsdWUgdG8gaW50ZXJuYWwgcHJpb3JpdHkuCisgKiBJbnB1dDoKKyAqICAgICAgZHNjcCAtIERzY3AgdmFsdWUgb2YgcmVjZWl2aW5nIGZyYW1lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBJbnRfcHJpIC0gaW50ZXJuYWwgcHJpb3JpdHkgdmFsdWUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9RT1NfRFNDUF9WQUxVRSAgIC0gSW52YWxpZCBEU0NQIHZhbHVlLgorICogTm90ZToKKyAqICAgICAgVGhlIERpZmZlcmVudGlhdGVkIFNlcnZpY2UgQ29kZSBQb2ludCBpcyBhIHNlbGVjdG9yIGZvciByb3V0ZXIncyBwZXItaG9wIGJlaGF2aW9ycy4gQXMgYSBzZWxlY3RvciwgdGhlcmUgaXMgbm8gaW1wbGljYXRpb24gdGhhdCBhIG51bWVyaWNhbGx5CisgKiAgICAgIGdyZWF0ZXIgRFNDUCBpbXBsaWVzIGEgYmV0dGVyIG5ldHdvcmsgc2VydmljZS4gQXMgY2FuIGJlIHNlZW4sIHRoZSBEU0NQIHRvdGFsbHkgb3ZlcmxhcHMgdGhlIG9sZCBwcmVjZWRlbmNlIGZpZWxkIG9mIFRPUy4gU28gaWYgdmFsdWVzIG9mCisgKiAgICAgIERTQ1AgYXJlIGNhcmVmdWxseSBjaG9zZW4gdGhlbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGNhbiBiZSBhY2hpZXZlZC4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3Fvc19kc2NwUHJpUmVtYXBfZ2V0KHJ0a19kc2NwX3QgZHNjcCwgcnRrX3ByaV90ICpwSW50X3ByaSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19xb3NfcG9ydFByaV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBDb25maWd1cmUgcHJpb3JpdHkgdXNhZ2UgdG8gZWFjaCBwb3J0LgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBQb3J0IGlkLgorICogICAgICBpbnRfcHJpIC0gaW50ZXJuYWwgcHJpb3JpdHkgdmFsdWUuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfUU9TX1NFTF9QT1JUX1BSSSAtIEludmFsaWQgcG9ydCBwcmlvcml0eS4KKyAqICAgICAgUlRfRVJSX1FPU19JTlRfUFJJT1JJVFkgLSBJbnZhbGlkIHByaW9yaXR5LgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gc2V0IHByaW9yaXR5IG9mIHBvcnQgYXNzaWdubWVudHMgZm9yIHF1ZXVlIHVzYWdlIGFuZCBwYWNrZXQgc2NoZWR1bGluZy4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3Fvc19wb3J0UHJpX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19wcmlfdCBpbnRfcHJpKSA7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19xb3NfcG9ydFByaV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcHJpb3JpdHkgdXNhZ2UgdG8gZWFjaCBwb3J0LgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBQb3J0IGlkLgorICogT3V0cHV0OgorICogICAgICBwSW50X3ByaSAtIGludGVybmFsIHByaW9yaXR5IHZhbHVlLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGdldCBwcmlvcml0eSBvZiBwb3J0IGFzc2lnbm1lbnRzIGZvciBxdWV1ZSB1c2FnZSBhbmQgcGFja2V0IHNjaGVkdWxpbmcuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19xb3NfcG9ydFByaV9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfcHJpX3QgKnBJbnRfcHJpKSA7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19xb3NfcXVldWVOdW1fc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IG91dHB1dCBxdWV1ZSBudW1iZXIgZm9yIGVhY2ggcG9ydC4KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUG9ydCBpZC4KKyAqICAgICAgaW5kZXggICAtIE1hcHBpbmcgcXVldWUgbnVtYmVyICgxfjgpCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9RVUVVRV9OVU0gICAgLSBJbnZhbGlkIHF1ZXVlIG51bWJlci4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIHNldCB0aGUgb3V0cHV0IHF1ZXVlIG51bWJlciBvZiB0aGUgc3BlY2lmaWVkIHBvcnQuIFRoZSBxdWV1ZSBudW1iZXIgaXMgZnJvbSAxIHRvIDguCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19xb3NfcXVldWVOdW1fc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3F1ZXVlX251bV90IHF1ZXVlX251bSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19xb3NfcXVldWVOdW1fZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IG91dHB1dCBxdWV1ZSBudW1iZXIuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBRdWV1ZV9udW0gLSBNYXBwaW5nIHF1ZXVlIG51bWJlcgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgd2lsbCByZXR1cm4gdGhlIG91dHB1dCBxdWV1ZSBudW1iZXIgb2YgdGhlIHNwZWNpZmllZCBwb3J0LiBUaGUgcXVldWUgbnVtYmVyIGlzIGZyb20gMSB0byA4LgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcW9zX3F1ZXVlTnVtX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19xdWV1ZV9udW1fdCAqcFF1ZXVlX251bSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19xb3NfcHJpTWFwX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBvdXRwdXQgcXVldWUgbnVtYmVyIGZvciBlYWNoIHBvcnQuCisgKiBJbnB1dDoKKyAqICAgICAgcXVldWVfbnVtICAgLSBRdWV1ZSBudW1iZXIgdXNhZ2UuCisgKiAgICAgIHBQcmkycWlkICAgIC0gUHJpb3JpdHkgbWFwcGluZyB0byBxdWV1ZSBJRC4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX1FVRVVFX05VTSAgICAgICAgLSBJbnZhbGlkIHF1ZXVlIG51bWJlci4KKyAqICAgICAgUlRfRVJSX1FVRVVFX0lEICAgICAgICAgLSBJbnZhbGlkIHF1ZXVlIGlkLgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9RT1NfSU5UX1BSSU9SSVRZIC0gSW52YWxpZCBwcmlvcml0eS4KKyAqIE5vdGU6CisgKiAgICAgIEFTSUMgc3VwcG9ydHMgcHJpb3JpdHkgbWFwcGluZyB0byBxdWV1ZSB3aXRoIGRpZmZlcmVudCBxdWV1ZSBudW1iZXIgZnJvbSAxIHRvIDguCisgKiAgICAgIEZvciBkaWZmZXJlbnQgcXVldWUgbnVtYmVycyB1c2FnZSwgQVNJQyBzdXBwb3J0cyBkaWZmZXJlbnQgaW50ZXJuYWwgYXZhaWxhYmxlIHF1ZXVlIElEcy4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3Fvc19wcmlNYXBfc2V0KHJ0a19xdWV1ZV9udW1fdCBxdWV1ZV9udW0sIHJ0a19xb3NfcHJpMnF1ZXVlX3QgKnBQcmkycWlkKTsKKworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcW9zX3ByaU1hcF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcHJpb3JpdHkgdG8gcXVldWUgSUQgbWFwcGluZyB0YWJsZSBwYXJhbWV0ZXJzLgorICogSW5wdXQ6CisgKiAgICAgIHF1ZXVlX251bSAtIFF1ZXVlIG51bWJlciB1c2FnZS4KKyAqIE91dHB1dDoKKyAqICAgICAgcFByaTJxaWQgLSBQcmlvcml0eSBtYXBwaW5nIHRvIHF1ZXVlIElELgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogICAgICBSVF9FUlJfUVVFVUVfTlVNICAgIC0gSW52YWxpZCBxdWV1ZSBudW1iZXIuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiByZXR1cm4gdGhlIG1hcHBpbmcgcXVldWUgaWQgb2YgdGhlIHNwZWNpZmllZCBwcmlvcml0eSBhbmQgcXVldWUgbnVtYmVyLgorICogICAgICBUaGUgcXVldWUgbnVtYmVyIGlzIGZyb20gMSB0byA4LgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcW9zX3ByaU1hcF9nZXQocnRrX3F1ZXVlX251bV90IHF1ZXVlX251bSwgcnRrX3Fvc19wcmkycXVldWVfdCAqcFByaTJxaWQpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcW9zX3NjaGVkdWxpbmdRdWV1ZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgd2VpZ2h0IGFuZCB0eXBlIG9mIHF1ZXVlcyBpbiBkZWRpY2F0ZWQgcG9ydC4KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAtIFBvcnQgaWQuCisgKiAgICAgIHBRd2VpZ2h0cyAgIC0gVGhlIGFycmF5IG9mIHdlaWdodHMgZm9yIFdSUi9XRlEgcXVldWUgKDAgZm9yIFNUUklDVF9QUklPUklUWSBxdWV1ZSkuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfUU9TX1FVRVVFX1dFSUdIVCAtIEludmFsaWQgcXVldWUgd2VpZ2h0LgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gc2V0IHdlaWdodCBhbmQgdHlwZSwgc3RyaWN0IHByaW9yaXR5IG9yIHdlaWdodCBmYWlyIHF1ZXVlIChXRlEpIGZvcgorICogICAgICBkZWRpY2F0ZWQgcG9ydCBmb3IgdXNpbmcgcXVldWVzLiBJZiBxdWV1ZSBpZCBpcyBub3QgaW5jbHVkZWQgaW4gcXVldWUgdXNhZ2UsCisgKiAgICAgIHRoZW4gaXRzIHR5cGUgYW5kIHdlaWdodCBzZXR0aW5nIGluIGR1bW15IGZvciBzZXR0aW5nLiBUaGVyZSBhcmUgcHJpb3JpdGllcworICogICAgICBhcyBxdWV1ZSBpZCBpbiBzdHJpY3QgcXVldWVzLiBJdCBtZWFucyBzdHJpY3QgcXVldWUgaWQgNSBjYXJyeWluZyBoaWdoZXIgcHJpb3JpdHkKKyAqICAgICAgdGhhbiBzdHJpY3QgcXVldWUgaWQgNC4gVGhlIFdGUSBxdWV1ZSB3ZWlnaHQgaXMgZnJvbSAxIHRvIDEyOCwgYW5kIHdlaWdodCAwIGlzCisgKiAgICAgIGZvciBzdHJpY3QgcHJpb3JpdHkgcXVldWUgdHlwZS4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3Fvc19zY2hlZHVsaW5nUXVldWVfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3Fvc19xdWV1ZV93ZWlnaHRzX3QgKnBRd2VpZ2h0cyk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19xb3Nfc2NoZWR1bGluZ1F1ZXVlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCB3ZWlnaHQgYW5kIHR5cGUgb2YgcXVldWVzIGluIGRlZGljYXRlZCBwb3J0LgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBQb3J0IGlkLgorICogT3V0cHV0OgorICogICAgICBwUXdlaWdodHMgLSBUaGUgYXJyYXkgb2Ygd2VpZ2h0cyBmb3IgV1JSL1dGUSBxdWV1ZSAoMCBmb3IgU1RSSUNUX1BSSU9SSVRZIHF1ZXVlKS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBnZXQgd2VpZ2h0IGFuZCB0eXBlLCBzdHJpY3QgcHJpb3JpdHkgb3Igd2VpZ2h0IGZhaXIgcXVldWUgKFdGUSkgZm9yIGRlZGljYXRlZCBwb3J0IGZvciB1c2luZyBxdWV1ZXMuCisgKiAgICAgIFRoZSBXRlEgcXVldWUgd2VpZ2h0IGlzIGZyb20gMSB0byAxMjgsIGFuZCB3ZWlnaHQgMCBpcyBmb3Igc3RyaWN0IHByaW9yaXR5IHF1ZXVlIHR5cGUuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19xb3Nfc2NoZWR1bGluZ1F1ZXVlX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19xb3NfcXVldWVfd2VpZ2h0c190ICpwUXdlaWdodHMpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcW9zXzFwUmVtYXJrRW5hYmxlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCAxcCBSZW1hcmtpbmcgc3RhdGUKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAtIFBvcnQgaWQuCisgKiAgICAgIGVuYWJsZSAgICAgIC0gU3RhdGUgb2YgcGVyLXBvcnQgMXAgUmVtYXJraW5nCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9FTkFCTEUgICAgICAgLSBJbnZhbGlkIGVuYWJsZSBwYXJhbWV0ZXIuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBlbmFibGUgb3IgZGlzYWJsZSA4MDIuMXAgcmVtYXJraW5nIGFiaWxpdHkgZm9yIHdob2xlIHN5c3RlbS4KKyAqICAgICAgVGhlIHN0YXR1cyBvZiA4MDIuMXAgcmVtYXJrOgorICogICAgICAtIERJU0FCTEVECisgKiAgICAgIC0gRU5BQkxFRAorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcW9zXzFwUmVtYXJrRW5hYmxlX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19lbmFibGVfdCBlbmFibGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcW9zXzFwUmVtYXJrRW5hYmxlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCA4MDIuMXAgcmVtYXJraW5nIGFiaWxpdHkuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBFbmFibGUgLSBTdGF0dXMgb2YgODAyLjFwIHJlbWFyay4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBnZXQgODAyLjFwIHJlbWFya2luZyBhYmlsaXR5LgorICogICAgICBUaGUgc3RhdHVzIG9mIDgwMi4xcCByZW1hcms6CisgKiAgICAgIC0gRElTQUJMRUQKKyAqICAgICAgLSBFTkFCTEVECisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19xb3NfMXBSZW1hcmtFbmFibGVfZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2VuYWJsZV90ICpwRW5hYmxlKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3Fvc18xcFJlbWFya19zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgODAyLjFwIHJlbWFya2luZyBwYXJhbWV0ZXIuCisgKiBJbnB1dDoKKyAqICAgICAgaW50X3ByaSAgICAgLSBJbnRlcm5hbCBwcmlvcml0eSB2YWx1ZS4KKyAqICAgICAgZG90MXBfcHJpICAgLSA4MDIuMXAgcHJpb3JpdHkgdmFsdWUuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1ZMQU5fUFJJT1JJVFkgICAgLSBJbnZhbGlkIDFwIHByaW9yaXR5LgorICogICAgICBSVF9FUlJfUU9TX0lOVF9QUklPUklUWSAtIEludmFsaWQgcHJpb3JpdHkuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBzZXQgODAyLjFwIHBhcmFtZXRlcnMgc291cmNlIHByaW9yaXR5IGFuZCBuZXcgcHJpb3JpdHkuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19xb3NfMXBSZW1hcmtfc2V0KHJ0a19wcmlfdCBpbnRfcHJpLCBydGtfcHJpX3QgZG90MXBfcHJpKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3Fvc18xcFJlbWFya19nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgODAyLjFwIHJlbWFya2luZyBwYXJhbWV0ZXIuCisgKiBJbnB1dDoKKyAqICAgICAgaW50X3ByaSAtIEludGVybmFsIHByaW9yaXR5IHZhbHVlLgorICogT3V0cHV0OgorICogICAgICBwRG90MXBfcHJpIC0gODAyLjFwIHByaW9yaXR5IHZhbHVlLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUU9TX0lOVF9QUklPUklUWSAtIEludmFsaWQgcHJpb3JpdHkuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBnZXQgODAyLjFwIHJlbWFya2luZyBwYXJhbWV0ZXJzLiBJdCB3b3VsZCByZXR1cm4gbmV3IHByaW9yaXR5IG9mIGluZ3Jlc3MgcHJpb3JpdHkuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19xb3NfMXBSZW1hcmtfZ2V0KHJ0a19wcmlfdCBpbnRfcHJpLCBydGtfcHJpX3QgKnBEb3QxcF9wcmkpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcW9zX2RzY3BSZW1hcmtFbmFibGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IERTQ1AgcmVtYXJraW5nIGFiaWxpdHkuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIFBvcnQgaWQuCisgKiAgICAgIGVuYWJsZSAgLSBzdGF0dXMgb2YgRFNDUCByZW1hcmsuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfUU9TX0lOVF9QUklPUklUWSAtIEludmFsaWQgcHJpb3JpdHkuCisgKiAgICAgIFJUX0VSUl9FTkFCTEUgICAgICAgICAgIC0gSW52YWxpZCBlbmFibGUgcGFyYW1ldGVyLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZW5hYmxlIG9yIGRpc2FibGUgRFNDUCByZW1hcmtpbmcgYWJpbGl0eSBmb3Igd2hvbGUgc3lzdGVtLgorICogICAgICBUaGUgc3RhdHVzIG9mIERTQ1AgcmVtYXJrOgorICogICAgICAtIERJU0FCTEVECisgKiAgICAgIC0gRU5BQkxFRAorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcW9zX2RzY3BSZW1hcmtFbmFibGVfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2VuYWJsZV90IGVuYWJsZSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19xb3NfZHNjcFJlbWFya0VuYWJsZV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgRFNDUCByZW1hcmtpbmcgYWJpbGl0eS4KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqIE91dHB1dDoKKyAqICAgICAgcEVuYWJsZSAtIHN0YXR1cyBvZiBEU0NQIHJlbWFya2luZy4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBnZXQgRFNDUCByZW1hcmtpbmcgYWJpbGl0eS4KKyAqICAgICAgVGhlIHN0YXR1cyBvZiBEU0NQIHJlbWFyazoKKyAqICAgICAgLSBESVNBQkxFRAorICogICAgICAtIEVOQUJMRUQKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3Fvc19kc2NwUmVtYXJrRW5hYmxlX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19lbmFibGVfdCAqcEVuYWJsZSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19xb3NfZHNjcFJlbWFya19zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgRFNDUCByZW1hcmtpbmcgcGFyYW1ldGVyLgorICogSW5wdXQ6CisgKiAgICAgIGludF9wcmkgLSBJbnRlcm5hbCBwcmlvcml0eSB2YWx1ZS4KKyAqICAgICAgZHNjcCAgICAtIERTQ1AgdmFsdWUuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1FPU19JTlRfUFJJT1JJVFkgLSBJbnZhbGlkIHByaW9yaXR5LgorICogICAgICBSVF9FUlJfUU9TX0RTQ1BfVkFMVUUgICAtIEludmFsaWQgRFNDUCB2YWx1ZS4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIHNldCBEU0NQIHZhbHVlIGFuZCBtYXBwaW5nIHByaW9yaXR5LgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcW9zX2RzY3BSZW1hcmtfc2V0KHJ0a19wcmlfdCBpbnRfcHJpLCBydGtfZHNjcF90IGRzY3ApOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcW9zX2RzY3BSZW1hcmtfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IERTQ1AgcmVtYXJraW5nIHBhcmFtZXRlci4KKyAqIElucHV0OgorICogICAgICBpbnRfcHJpIC0gSW50ZXJuYWwgcHJpb3JpdHkgdmFsdWUuCisgKiBPdXRwdXQ6CisgKiAgICAgIERzY3AgLSBEU0NQIHZhbHVlLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUU9TX0lOVF9QUklPUklUWSAtIEludmFsaWQgcHJpb3JpdHkuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBnZXQgRFNDUCBwYXJhbWV0ZXJzLiBJdCB3b3VsZCByZXR1cm4gRFNDUCB2YWx1ZSBmb3IgbWFwcGluZyBwcmlvcml0eS4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3Fvc19kc2NwUmVtYXJrX2dldChydGtfcHJpX3QgaW50X3ByaSwgcnRrX2RzY3BfdCAqcERzY3ApOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcW9zX2RzY3BSZW1hcmtTcmNTZWxfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHJlbWFya2luZyBzb3VyY2Ugb2YgRFNDUCByZW1hcmtpbmcuCisgKiBJbnB1dDoKKyAqICAgICAgdHlwZSAgICAgIC0gcmVtYXJraW5nIHNvdXJjZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiAgICAgIFJUX0VSUl9OT1RfSU5JVCAgICAgICAgIC0gVGhlIG1vZHVsZSBpcyBub3QgaW5pdGlhbAorICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBpbnZhbGlkIHBvcnQgaWQKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgLSBpbnZhbGlkIGlucHV0IHBhcmFtZXRlcgorCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBjb25maWd1cmUgRFNDUCByZW1hcmsgZnVuY3Rpb25hbGl0eSB0byBtYXAgb3JpZ2luYWwgRFNDUCB2YWx1ZSBvciBpbnRlcm5hbAorICogICAgICBwcmlvcml0eSB0byBUWCBEU0NQIHZhbHVlLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcW9zX2RzY3BSZW1hcmtTcmNTZWxfc2V0KHJ0a19xb3NfZHNjcFJta1NyY190IHR5cGUpOworCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19xb3NfZGNwUmVtYXJrU3JjU2VsX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCByZW1hcmtpbmcgc291cmNlIG9mIERTQ1AgcmVtYXJraW5nLgorICogSW5wdXQ6CisgKiAgICAgIG5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcFR5cGUgICAgICAtIHJlbWFya2luZyBzb3VyY2UKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX05PVF9JTklUICAgICAgICAgLSBUaGUgbW9kdWxlIGlzIG5vdCBpbml0aWFsCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgIC0gaW52YWxpZCBwb3J0IGlkCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgIC0gaW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAgICAgLSBpbnB1dCBwYXJhbWV0ZXIgbWF5IGJlIG51bGwgcG9pbnRlcgorCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19xb3NfZHNjcFJlbWFya1NyY1NlbF9nZXQocnRrX3Fvc19kc2NwUm1rU3JjX3QgKnBUeXBlKTsKKworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcW9zX2RzY3BSZW1hcmsyRHNjcF9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgRFNDUCB0byByZW1hcmtlZCBEU0NQIG1hcHBpbmcuCisgKiBJbnB1dDoKKyAqICAgICAgZHNjcCAgICAtIERTQ1AgdmFsdWUKKyAqICAgICAgcm1rRHNjcCAtIHJlbWFya2VkIERTQ1AgdmFsdWUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX1FPU19EU0NQX1ZBTFVFICAgLSBJbnZhbGlkIGRzY3AgdmFsdWUKKyAqIE5vdGU6CisgKiAgICAgIGRzY3AgcGFyYW1ldGVyIGNhbiBiZSBEU0NQIHZhbHVlIG9yIGludGVybmFsIHByaW9yaXR5IGFjY29yZGluZyB0byBjb25maWd1cmF0aW9uIG9mIEFQSQorICogICAgICBkYWxfYXBvbGxvbXBfcW9zX2RzY3BSZW1hcmtTcmNTZWxfc2V0KCksIGJlY2F1c2UgRFNDUCByZW1hcmsgZnVuY3Rpb25hbGl0eSBjYW4gbWFwIG9yaWdpbmFsIERTQ1AKKyAqICAgICAgdmFsdWUgb3IgaW50ZXJuYWwgcHJpb3JpdHkgdG8gVFggRFNDUCB2YWx1ZS4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3Fvc19kc2NwUmVtYXJrMkRzY3Bfc2V0KHJ0a19kc2NwX3QgZHNjcCwgcnRrX2RzY3BfdCBybWtEc2NwKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3Fvc19kc2NwUmVtYXJrMkRzY3BfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IERTQ1AgdG8gcmVtYXJrZWQgRFNDUCBtYXBwaW5nLgorICogSW5wdXQ6CisgKiAgICAgIGRzY3AgICAgLSBEU0NQIHZhbHVlCisgKiBPdXRwdXQ6CisgKiAgICAgIHBEc2NwICAgLSByZW1hcmtlZCBEU0NQIHZhbHVlCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiAgICAgIFJUX0VSUl9RT1NfRFNDUF9WQUxVRSAgIC0gSW52YWxpZCBkc2NwIHZhbHVlCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgICAgIC0gTlVMTCBwb2ludGVyCisgKiBOb3RlOgorICogICAgICBOb25lLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcW9zX2RzY3BSZW1hcmsyRHNjcF9nZXQocnRrX2RzY3BfdCBkc2NwLCBydGtfZHNjcF90ICpwRHNjcCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19xb3NfcG9ydFByaVNlbEluZGV4X3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIENvbmZpZ3VyZSBwcmlvcml0eSBkZWNpc2lvbiBpbmRleCB0byBlYWNoIHBvcnQuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiAgICAgIGluZGV4IC0gcHJpb3JpdHkgZGVjaXNpb24gaW5kZXguCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfRU5UUllfSU5ERVggLSBJbnZhbGlkIGVudHJ5IGluZGV4LgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gc2V0IHByaW9yaXR5IG9mIHBvcnQgYXNzaWdubWVudHMgZm9yIHF1ZXVlIHVzYWdlIGFuZCBwYWNrZXQgc2NoZWR1bGluZy4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3Fvc19wb3J0UHJpU2VsSW5kZXhfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3Fvc19wcmlEZWNUYmxfdCBpbmRleCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19xb3NfcG9ydFByaVNlbEluZGV4X2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwcmlvcml0eSBkZWNpc2lvbiBpbmRleCBmcm9tIGVhY2ggcG9ydC4KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqIE91dHB1dDoKKyAqICAgICAgcEluZGV4IC0gcHJpb3JpdHkgZGVjaXNpb24gaW5kZXguCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IHByaW9yaXR5IG9mIHBvcnQgYXNzaWdubWVudHMgZm9yIHF1ZXVlIHVzYWdlIGFuZCBwYWNrZXQgc2NoZWR1bGluZy4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3Fvc19wb3J0UHJpU2VsSW5kZXhfZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3Fvc19wcmlEZWNUYmxfdCAqcEluZGV4KTsKKworI2VuZGlmIC8qIF9fUlRLX0FQSV9RT1NfSF9fICovCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9yYXRlLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9yYXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMxZWQwMQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3JhdGUuaApAQCAtMCwwICsxLDMwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiBQdXJwb3NlIDogUlRMODM2Ny9SVEw4MzY3QyBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkKKyAqCisgKiBGZWF0dXJlIDogVGhlIGZpbGUgaW5jbHVkZXMgcmF0ZSBtb2R1bGUgaGlnaC1sYXllciBBUEkgZGVmaW5hdGlvbgorICoKKyAqLworCisjaWZuZGVmIF9fUlRLX0FQSV9SQVRFX0hfXworI2RlZmluZSBfX1JUS19BUElfUkFURV9IX18KKworLyoKKyAqIEluY2x1ZGUgRmlsZXMKKyAqLworLy8jaW5jbHVkZSA8cnRrX3R5cGVzLmg+CisKKy8qCisgKiBEYXRhIFR5cGUgRGVjbGFyYXRpb24KKyAqLworI2RlZmluZSBSVEtfTUFYX01FVEVSX0lEICAgICAgICAgICAgKHJ0a19zd2l0Y2hfbWF4TWV0ZXJJZF9nZXQoKSkKKyNkZWZpbmUgUlRLX01FVEVSX05VTSAgICAgICAgICAgICAgIChSVEtfTUFYX01FVEVSX0lEICsgMSkKKwordHlwZWRlZiBlbnVtIHJ0a19tZXRlcl90eXBlX2V7CisgICAgTUVURVJfVFlQRV9LQlBTID0gMCwgICAgLyogS2JwcyAqLworICAgIE1FVEVSX1RZUEVfUFBTLCAgICAgICAgIC8qIFBhY2tldCBwZXIgc2Vjb25kICovCisgICAgTUVURVJfVFlQRV9FTkQKK31ydGtfbWV0ZXJfdHlwZV90OworCisKKy8qCisgKiBGdW5jdGlvbiBEZWNsYXJhdGlvbgorICovCisKKyAvKiBSYXRlICovCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcmF0ZV9zaGFyZU1ldGVyX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBtZXRlciBjb25maWd1cmF0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgaW5kZXggICAgICAgLSBzaGFyZWQgbWV0ZXIgaW5kZXgKKyAqICAgICAgdHlwZSAgICAgICAgLSBzaGFyZWQgbWV0ZXIgdHlwZQorICogICAgICByYXRlICAgICAgICAtIHJhdGUgb2Ygc2hhcmUgbWV0ZXIKKyAqICAgICAgaWZnX2luY2x1ZGUgLSBpbmNsdWRlIElGRyBvciBub3QsIEVOQUJMRTppbmNsdWRlIERJU0FCTEU6ZXhjbHVkZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9GSUxURVJfTUVURVJfSUQgIC0gSW52YWxpZCBtZXRlcgorICogICAgICBSVF9FUlJfUkFURSAgICAgICAgICAgICAtIEludmFsaWQgcmF0ZQorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycworICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gc2V0IHNoYXJlZCBtZXRlciByYXRlIGFuZCBpZmcgaW5jbHVkZSBmb3IgZWFjaCBtZXRlci4KKyAqICAgICAgVGhlIHJhdGUgdW5pdCBpcyAxIGticHMgYW5kIHRoZSByYW5nZSBpcyBmcm9tIDhrIHRvIDEwNDg1NjhrIGlmIHR5cGUgaXMgTUVURVJfVFlQRV9LQlBTIGFuZAorICogICAgICB0aGUgZ3JhbnVsYXJpdHkgb2YgcmF0ZSBpcyA4IGticHMuCisgKiAgICAgIFRoZSByYXRlIHVuaXQgaXMgcGFja2V0cyBwZXIgc2Vjb25kIGFuZCB0aGUgcmFuZ2UgaXMgMSB+IDB4MUZGRiBpZiB0eXBlIGlzIE1FVEVSX1RZUEVfUFBTLgorICogICAgICBUaGUgaWZnX2luY2x1ZGUgcGFyYW1ldGVyIGlzIHVzZWQKKyAqICAgICAgZm9yIHJhdGUgY2FsY3VsYXRpb24gd2l0aC93aXRob3V0IGludGVyLWZyYW1lLWdhcCBhbmQgcHJlYW1ibGUuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3JhdGVfc2hhcmVNZXRlcl9zZXQocnRrX21ldGVyX2lkX3QgaW5kZXgsIHJ0a19tZXRlcl90eXBlX3QgdHlwZSwgcnRrX3JhdGVfdCByYXRlLCBydGtfZW5hYmxlX3QgaWZnX2luY2x1ZGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcmF0ZV9zaGFyZU1ldGVyX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBtZXRlciBjb25maWd1cmF0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgaW5kZXggICAgICAgIC0gc2hhcmVkIG1ldGVyIGluZGV4CisgKiBPdXRwdXQ6CisgKiAgICAgIHBUeXBlICAgICAgICAtIE1ldGVyIFR5cGUKKyAqICAgICAgcFJhdGUgICAgICAgIC0gcG9pbnRlciBvZiByYXRlIG9mIHNoYXJlIG1ldGVyCisgKiAgICAgIHBJZmdfaW5jbHVkZSAtIGluY2x1ZGUgSUZHIG9yIG5vdCwgRU5BQkxFOmluY2x1ZGUgRElTQUJMRTpleGNsdWRlCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9GSUxURVJfTUVURVJfSUQgIC0gSW52YWxpZCBtZXRlcgorICogTm90ZToKKyAqCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3JhdGVfc2hhcmVNZXRlcl9nZXQocnRrX21ldGVyX2lkX3QgaW5kZXgsIHJ0a19tZXRlcl90eXBlX3QgKnBUeXBlLCBydGtfcmF0ZV90ICpwUmF0ZSwgcnRrX2VuYWJsZV90ICpwSWZnX2luY2x1ZGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcmF0ZV9zaGFyZU1ldGVyQnVja2V0X3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBtZXRlciBCdWNrZXQgU2l6ZQorICogSW5wdXQ6CisgKiAgICAgIGluZGV4ICAgICAgICAtIHNoYXJlZCBtZXRlciBpbmRleAorICogICAgICBidWNrZXRfc2l6ZSAgLSBCdWNrZXQgU2l6ZQorICogT3V0cHV0OgorICogICAgICBOb25lLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgIC0gRXJyb3IgSW5wdXQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9GSUxURVJfTUVURVJfSUQgIC0gSW52YWxpZCBtZXRlcgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gc2V0IHNoYXJlZCBtZXRlciBidWNrZXQgc2l6ZS4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3JhdGVfc2hhcmVNZXRlckJ1Y2tldF9zZXQocnRrX21ldGVyX2lkX3QgaW5kZXgsIHJ0a191aW50MzIgYnVja2V0X3NpemUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcmF0ZV9zaGFyZU1ldGVyQnVja2V0X2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBtZXRlciBCdWNrZXQgU2l6ZQorICogSW5wdXQ6CisgKiAgICAgIGluZGV4ICAgICAgICAtIHNoYXJlZCBtZXRlciBpbmRleAorICogT3V0cHV0OgorICogICAgICBwQnVja2V0X3NpemUgLSBCdWNrZXQgU2l6ZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfRklMVEVSX01FVEVSX0lEICAtIEludmFsaWQgbWV0ZXIKKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGdldCBzaGFyZWQgbWV0ZXIgYnVja2V0IHNpemUuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19yYXRlX3NoYXJlTWV0ZXJCdWNrZXRfZ2V0KHJ0a19tZXRlcl9pZF90IGluZGV4LCBydGtfdWludDMyICpwQnVja2V0X3NpemUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcmF0ZV9pZ3JCYW5kd2lkdGhDdHJsUmF0ZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgcG9ydCBpbmdyZXNzIGJhbmR3aWR0aCBjb250cm9sCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQb3J0IGlkCisgKiAgICAgIHJhdGUgICAgICAgIC0gUmF0ZSBvZiBzaGFyZSBtZXRlcgorICogICAgICBpZmdfaW5jbHVkZSAtIGluY2x1ZGUgSUZHIG9yIG5vdCwgRU5BQkxFOmluY2x1ZGUgRElTQUJMRTpleGNsdWRlCisgKiAgICAgIGZjX2VuYWJsZSAgIC0gZW5hYmxlIGZsb3cgY29udHJvbCBvciBub3QsIEVOQUJMRTp1c2UgZmxvdyBjb250cm9sIERJU0FCTEU6ZHJvcAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfRU5BQkxFICAgICAgIC0gSW52YWxpZCBJRkcgcGFyYW1ldGVyLgorICogICAgICBSVF9FUlJfSU5CV19SQVRFICAgIC0gSW52YWxpZCBpbmdyZXNzIHJhdGUgcGFyYW1ldGVyLgorICogTm90ZToKKyAqICAgICAgVGhlIHJhdGUgdW5pdCBpcyAxIGticHMgYW5kIHRoZSByYW5nZSBpcyBmcm9tIDhrIHRvIDEwNDg1NjhrLiBUaGUgZ3JhbnVsYXJpdHkgb2YgcmF0ZSBpcyA4IGticHMuCisgKiAgICAgIFRoZSBpZmdfaW5jbHVkZSBwYXJhbWV0ZXIgaXMgdXNlZCBmb3IgcmF0ZSBjYWxjdWxhdGlvbiB3aXRoL3dpdGhvdXQgaW50ZXItZnJhbWUtZ2FwIGFuZCBwcmVhbWJsZS4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3JhdGVfaWdyQmFuZHdpZHRoQ3RybFJhdGVfc2V0KCBydGtfcG9ydF90IHBvcnQsIHJ0a19yYXRlX3QgcmF0ZSwgIHJ0a19lbmFibGVfdCBpZmdfaW5jbHVkZSwgcnRrX2VuYWJsZV90IGZjX2VuYWJsZSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19yYXRlX2lnckJhbmR3aWR0aEN0cmxSYXRlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwb3J0IGluZ3Jlc3MgYmFuZHdpZHRoIGNvbnRyb2wKKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZAorICogT3V0cHV0OgorICogICAgICBwUmF0ZSAgICAgICAgICAgLSBSYXRlIG9mIHNoYXJlIG1ldGVyCisgKiAgICAgIHBJZmdfaW5jbHVkZSAgICAtIFJhdGUncyBjYWxjdWxhdGlvbiBpbmNsdWRpbmcgSUZHLCBFTkFCTEU6aW5jbHVkZSBESVNBQkxFOmV4Y2x1ZGUKKyAqICAgICAgcEZjX2VuYWJsZSAgICAgIC0gZW5hYmxlIGZsb3cgY29udHJvbCBvciBub3QsIEVOQUJMRTp1c2UgZmxvdyBjb250cm9sIERJU0FCTEU6ZHJvcAorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgVGhlIHJhdGUgdW5pdCBpcyAxIGticHMgYW5kIHRoZSByYW5nZSBpcyBmcm9tIDhrIHRvIDEwNDg1NjhrLiBUaGUgZ3JhbnVsYXJpdHkgb2YgcmF0ZSBpcyA4IGticHMuCisgKiAgICAgVGhlIGlmZ19pbmNsdWRlIHBhcmFtZXRlciBpcyB1c2VkIGZvciByYXRlIGNhbGN1bGF0aW9uIHdpdGgvd2l0aG91dCBpbnRlci1mcmFtZS1nYXAgYW5kIHByZWFtYmxlLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcmF0ZV9pZ3JCYW5kd2lkdGhDdHJsUmF0ZV9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfcmF0ZV90ICpwUmF0ZSwgcnRrX2VuYWJsZV90ICpwSWZnX2luY2x1ZGUsIHJ0a19lbmFibGVfdCAqcEZjX2VuYWJsZSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19yYXRlX2VnckJhbmR3aWR0aEN0cmxSYXRlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwb3J0IGVncmVzcyBiYW5kd2lkdGggY29udHJvbAorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgIC0gUG9ydCBpZAorICogICAgICByYXRlICAgICAgICAtIFJhdGUgb2YgZWdyZXNzIGJhbmR3aWR0aAorICogICAgICBpZmdfaW5jbHVkZSAtIGluY2x1ZGUgSUZHIG9yIG5vdCwgRU5BQkxFOmluY2x1ZGUgRElTQUJMRTpleGNsdWRlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiAgICAgIFJUX0VSUl9RT1NfRUJXX1JBVEUgLSBJbnZhbGlkIGVncmVzcyBiYW5kd2lkdGgvcmF0ZQorICogTm90ZToKKyAqICAgICBUaGUgcmF0ZSB1bml0IGlzIDEga2JwcyBhbmQgdGhlIHJhbmdlIGlzIGZyb20gOGsgdG8gMTA0ODU2OGsuIFRoZSBncmFudWxhcml0eSBvZiByYXRlIGlzIDgga2Jwcy4KKyAqICAgICBUaGUgaWZnX2luY2x1ZGUgcGFyYW1ldGVyIGlzIHVzZWQgZm9yIHJhdGUgY2FsY3VsYXRpb24gd2l0aC93aXRob3V0IGludGVyLWZyYW1lLWdhcCBhbmQgcHJlYW1ibGUuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19yYXRlX2VnckJhbmR3aWR0aEN0cmxSYXRlX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19yYXRlX3QgcmF0ZSwgIHJ0a19lbmFibGVfdCBpZmdfaW5jbHVkKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3JhdGVfZWdyQmFuZHdpZHRoQ3RybFJhdGVfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHBvcnQgZWdyZXNzIGJhbmR3aWR0aCBjb250cm9sCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQKKyAqIE91dHB1dDoKKyAqICAgICAgcFJhdGUgICAgICAgICAgIC0gUmF0ZSBvZiBlZ3Jlc3MgYmFuZHdpZHRoCisgKiAgICAgIHBJZmdfaW5jbHVkZSAgICAtIFJhdGUncyBjYWxjdWxhdGlvbiBpbmNsdWRpbmcgSUZHLCBFTkFCTEU6aW5jbHVkZSBESVNBQkxFOmV4Y2x1ZGUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgIFRoZSByYXRlIHVuaXQgaXMgMSBrYnBzIGFuZCB0aGUgcmFuZ2UgaXMgZnJvbSA4ayB0byAxMDQ4NTY4ay4gVGhlIGdyYW51bGFyaXR5IG9mIHJhdGUgaXMgOCBrYnBzLgorICogICAgIFRoZSBpZmdfaW5jbHVkZSBwYXJhbWV0ZXIgaXMgdXNlZCBmb3IgcmF0ZSBjYWxjdWxhdGlvbiB3aXRoL3dpdGhvdXQgaW50ZXItZnJhbWUtZ2FwIGFuZCBwcmVhbWJsZS4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3JhdGVfZWdyQmFuZHdpZHRoQ3RybFJhdGVfZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3JhdGVfdCAqcFJhdGUsIHJ0a19lbmFibGVfdCAqcElmZ19pbmNsdWRlKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3JhdGVfZWdyUXVldWVCd0N0cmxFbmFibGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IGVuYWJsZSBzdGF0dXMgb2YgZWdyZXNzIGJhbmR3aWR0aCBjb250cm9sIG9uIHNwZWNpZmllZCBxdWV1ZS4KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgLSBwb3J0IGlkCisgKiAgICAgIHF1ZXVlICAtIHF1ZXVlIGlkCisgKiAgICAgIGVuYWJsZSAtIGVuYWJsZSBzdGF0dXMgb2YgZWdyZXNzIHF1ZXVlIGJhbmR3aWR0aCBjb250cm9sCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgLSBpbnZhbGlkIHBvcnQgaWQKKyAqICAgICAgUlRfRVJSX1FVRVVFX0lEICAgICAgICAgLSBpbnZhbGlkIHF1ZXVlIGlkCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgIC0gaW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3JhdGVfZWdyUXVldWVCd0N0cmxFbmFibGVfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3FpZF90IHF1ZXVlLCBydGtfZW5hYmxlX3QgZW5hYmxlKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3JhdGVfZWdyUXVldWVCd0N0cmxSYXRlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCByYXRlIG9mIGVncmVzcyBiYW5kd2lkdGggY29udHJvbCBvbiBzcGVjaWZpZWQgcXVldWUuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgLSBwb3J0IGlkCisgKiAgICAgIHF1ZXVlIC0gcXVldWUgaWQKKyAqICAgICAgcEluZGV4IC0gc2hhcmVkIG1ldGVyIGluZGV4CisgKiBPdXRwdXQ6CisgKiAgICAgIHBSYXRlIC0gcG9pbnRlciB0byByYXRlIG9mIGVncmVzcyBxdWV1ZSBiYW5kd2lkdGggY29udHJvbAorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAtIGludmFsaWQgcG9ydCBpZAorICogICAgICBSVF9FUlJfUVVFVUVfSUQgICAgICAgICAtIGludmFsaWQgcXVldWUgaWQKKyAqICAgICAgUlRfRVJSX0ZJTFRFUl9NRVRFUl9JRCAgLSBJbnZhbGlkIG1ldGVyIGlkCisgKiBOb3RlOgorICogICAgTm9uZS4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3JhdGVfZWdyUXVldWVCd0N0cmxFbmFibGVfZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3FpZF90IHF1ZXVlLCBydGtfZW5hYmxlX3QgKnBFbmFibGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcmF0ZV9lZ3JRdWV1ZUJ3Q3RybFJhdGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHJhdGUgb2YgZWdyZXNzIGJhbmR3aWR0aCBjb250cm9sIG9uIHNwZWNpZmllZCBxdWV1ZS4KKyAqIElucHV0OgorICogICAgICBwb3J0ICAtIHBvcnQgaWQKKyAqICAgICAgcXVldWUgLSBxdWV1ZSBpZAorICogICAgICBpbmRleCAtIHNoYXJlZCBtZXRlciBpbmRleAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgIC0gaW52YWxpZCBwb3J0IGlkCisgKiAgICAgIFJUX0VSUl9RVUVVRV9JRCAgICAgICAgIC0gaW52YWxpZCBxdWV1ZSBpZAorICogICAgICBSVF9FUlJfRklMVEVSX01FVEVSX0lEICAtIEludmFsaWQgbWV0ZXIgaWQKKyAqIE5vdGU6CisgKiAgICBUaGUgYWN0dWFsIHJhdGUgY29udHJvbCBpcyBzZXQgaW4gc2hhcmVkIG1ldGVycy4KKyAqICAgIFRoZSB1bml0IG9mIGdyYW51bGFyaXR5IGlzIDhLYnBzLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcmF0ZV9lZ3JRdWV1ZUJ3Q3RybFJhdGVfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3FpZF90IHF1ZXVlLCBydGtfbWV0ZXJfaWRfdCBpbmRleCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19yYXRlX2VnclF1ZXVlQndDdHJsUmF0ZV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcmF0ZSBvZiBlZ3Jlc3MgYmFuZHdpZHRoIGNvbnRyb2wgb24gc3BlY2lmaWVkIHF1ZXVlLgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgIC0gcG9ydCBpZAorICogICAgICBxdWV1ZSAtIHF1ZXVlIGlkCisgKiAgICAgIHBJbmRleCAtIHNoYXJlZCBtZXRlciBpbmRleAorICogT3V0cHV0OgorICogICAgICBwUmF0ZSAtIHBvaW50ZXIgdG8gcmF0ZSBvZiBlZ3Jlc3MgcXVldWUgYmFuZHdpZHRoIGNvbnRyb2wKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgLSBpbnZhbGlkIHBvcnQgaWQKKyAqICAgICAgUlRfRVJSX1FVRVVFX0lEICAgICAgICAgLSBpbnZhbGlkIHF1ZXVlIGlkCisgKiAgICAgIFJUX0VSUl9GSUxURVJfTUVURVJfSUQgIC0gSW52YWxpZCBtZXRlciBpZAorICogTm90ZToKKyAqICAgIFRoZSBhY3R1YWwgcmF0ZSBjb250cm9sIGlzIHNldCBpbiBzaGFyZWQgbWV0ZXJzLgorICogICAgVGhlIHVuaXQgb2YgZ3JhbnVsYXJpdHkgaXMgOEticHMuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19yYXRlX2VnclF1ZXVlQndDdHJsUmF0ZV9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfcWlkX3QgcXVldWUsIHJ0a19tZXRlcl9pZF90ICpwSW5kZXgpOworCisjZW5kaWYgLyogX19SVEtfQVBJX1JBVEVfSF9fICovCisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3JsZHAuaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3JsZHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTFkZTBjCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcmxkcC5oCkBAIC0wLDAgKzEsMjY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNzYzMDYgJAorICogJERhdGU6IDIwMTctMDMtMDggMTU6MTM6NTggKzA4MDAgKLZnpFQsIDA4IKRUpOsgMjAxNykgJAorICoKKyAqIFB1cnBvc2UgOiBEZWNsYXJhdGlvbiBvZiBSTERQIGFuZCBSTFBQIEFQSQorICoKKyAqIEZlYXR1cmUgOiBUaGUgZmlsZSBoYXZlIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBtb2R1bGUgYW5kIHN1Yi1tb2R1bGVzCisgKiAgICAgICAgICAgMSkgUkxEUCBhbmQgUkxQUCBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXMKKyAqCisgKi8KKworCisjaWZuZGVmIF9fUlRLX1JMRFBfSF9fCisjZGVmaW5lIF9fUlRLX1JMRFBfSF9fCisKKworLyoKKyAqIEluY2x1ZGUgRmlsZXMKKyAqLworCisKKy8qCisgKiBTeW1ib2wgRGVmaW5pdGlvbgorICovCit0eXBlZGVmIGVudW0gcnRrX3JsZHBfdHJpZ2dlcl9lCit7CisgICAgUlRLX1JMRFBfVFJJR0dFUl9TQU1PVklORyA9IDAsCisgICAgUlRLX1JMRFBfVFJJR0dFUl9QRVJJT0QsCisgICAgUlRLX1JMRFBfVFJJR0dFUl9FTkQKK30gcnRrX3JsZHBfdHJpZ2dlcl90OworCit0eXBlZGVmIGVudW0gcnRrX3JsZHBfY21wVHlwZV9lCit7CisgICAgUlRLX1JMRFBfQ01QVFlQRV9NQUdJQyA9IDAsICAgICAvKiBDb21wYXJlIHRoZSBSTERQIHdpdGggbWFnaWMgb25seSAqLworICAgIFJUS19STERQX0NNUFRZUEVfTUFHSUNfSUQsICAgICAgLyogQ29tcGFyZSB0aGUgUkxEUCB3aXRoIGJvdGggbWFnaWMgKyBJRCAqLworICAgIFJUS19STERQX0NNUFRZUEVfRU5ECit9IHJ0a19ybGRwX2NtcFR5cGVfdDsKKwordHlwZWRlZiBlbnVtIHJ0a19ybGRwX2xvb3BTdGF0dXNfZQoreworICAgIFJUS19STERQX0xPT1BTVFNfTk9ORSA9IDAsCisgICAgUlRLX1JMRFBfTE9PUFNUU19MT09QSU5HLAorICAgIFJUS19STERQX0xPT1BTVFNfRU5ECit9IHJ0a19ybGRwX2xvb3BTdGF0dXNfdDsKKwordHlwZWRlZiBlbnVtIHJ0a19ybHBwX3RyYXBUeXBlX2UKK3sKKyAgICBSVEtfUkxQUF9UUkFQVFlQRV9OT05FID0gMCwKKyAgICBSVEtfUkxQUF9UUkFQVFlQRV9DUFUsCisgICAgUlRLX1JMUFBfVFJBUFRZUEVfRU5ECit9IHJ0a19ybHBwX3RyYXBUeXBlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHJ0a19ybGRwX2NvbmZpZ19zCit7CisgICAgcnRrX2VuYWJsZV90ICAgICAgICBybGRwX2VuYWJsZTsKKyAgICBydGtfcmxkcF90cmlnZ2VyX3QgdHJpZ2dlcl9tb2RlOworICAgIHJ0a19tYWNfdCAgICAgICAgICAgbWFnaWM7CisgICAgcnRrX3JsZHBfY21wVHlwZV90ICBjb21wYXJlX3R5cGU7CisgICAgcnRrX3VpbnQzMiAgICAgICAgICAgICAgaW50ZXJ2YWxfY2hlY2s7IC8qIENoZWNraW5nIGludGVydmFsIGZvciBjaGVjayBzdGF0ZSAqLworICAgIHJ0a191aW50MzIgICAgICAgICAgICAgIG51bV9jaGVjazsgICAgICAvKiBDaGVja2luZyBudW1iZXIgZm9yIGNoZWNrIHN0YXRlICovCisgICAgcnRrX3VpbnQzMiAgICAgICAgICAgICAgaW50ZXJ2YWxfbG9vcDsgIC8qIENoZWNraW5nIGludGVydmFsIGZvciBsb29wIHN0YXRlICovCisgICAgcnRrX3VpbnQzMiAgICAgICAgICAgICAgbnVtX2xvb3A7ICAgICAgIC8qIENoZWNraW5nIG51bWJlciBmb3IgbG9vcCBzdGF0ZSAqLworfSBydGtfcmxkcF9jb25maWdfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcnRrX3JsZHBfcG9ydENvbmZpZ19zCit7CisgICAgcnRrX2VuYWJsZV90ICAgICAgICB0eF9lbmFibGU7Cit9IHJ0a19ybGRwX3BvcnRDb25maWdfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcnRrX3JsZHBfc3RhdHVzX3MKK3sKKyAgICBydGtfbWFjX3QgICAgICAgICAgIGlkOworfSBydGtfcmxkcF9zdGF0dXNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcnRrX3JsZHBfcG9ydFN0YXR1c19zCit7CisgICAgcnRrX3JsZHBfbG9vcFN0YXR1c190ICAgbG9vcF9zdGF0dXM7CisgICAgcnRrX3JsZHBfbG9vcFN0YXR1c190ICAgbG9vcF9lbnRlcjsKKyAgICBydGtfcmxkcF9sb29wU3RhdHVzX3QgICBsb29wX2xlYXZlOworfSBydGtfcmxkcF9wb3J0U3RhdHVzX3Q7CisKKy8qCisgKiBEYXRhIERlY2xhcmF0aW9uCisgKi8KKworCisvKgorICogTWFjcm8gRGVjbGFyYXRpb24KKyAqLworCisjZGVmaW5lIFJUS19STERQX0lOVEVSVkFMX01BWCAgMHhmZmZmCisjZGVmaW5lIFJUS19STERQX05VTV9NQVggICAgICAgMHhmZgorCisKKy8qCisgKiBGdW5jdGlvbiBEZWNsYXJhdGlvbgorICovCisKKy8qIE1vZHVsZSBOYW1lIDogUkxEUCAqLworCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19ybGRwX2NvbmZpZ19zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgUkxEUCBtb2R1bGUgY29uZmlndXJhdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHBDb25maWcgLSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSBvZiBSTERQCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX0lOUFVUCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3JsZHBfY29uZmlnX3NldChydGtfcmxkcF9jb25maWdfdCAqcENvbmZpZyk7CisKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3JsZHBfY29uZmlnX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBSTERQIG1vZHVsZSBjb25maWd1cmF0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwQ29uZmlnIC0gY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgb2YgUkxEUAorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfSU5QVVQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcmxkcF9jb25maWdfZ2V0KHJ0a19ybGRwX2NvbmZpZ190ICpwQ29uZmlnKTsKKworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcmxkcF9wb3J0Q29uZmlnX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwZXIgcG9ydCBSTERQIG1vZHVsZSBjb25maWd1cmF0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgIC0gcG9ydCBudW1iZXIgdG8gYmUgY29uZmlndXJlZAorICogICAgICBwUG9ydENvbmZpZyAtIHBlciBwb3J0IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIG9mIFJMRFAKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfSU5QVVQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcmxkcF9wb3J0Q29uZmlnX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19ybGRwX3BvcnRDb25maWdfdCAqcFBvcnRDb25maWcpOworCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19ybGRwX3BvcnRDb25maWdfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHBlciBwb3J0IFJMRFAgbW9kdWxlIGNvbmZpZ3VyYXRpb24KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gcG9ydCBudW1iZXIgdG8gYmUgZ2V0CisgKiBPdXRwdXQ6CisgKiAgICAgIHBQb3J0Q29uZmlnIC0gcGVyIHBvcnQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgb2YgUkxEUAorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfSU5QVVQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcmxkcF9wb3J0Q29uZmlnX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19ybGRwX3BvcnRDb25maWdfdCAqcFBvcnRDb25maWcpOworCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19ybGRwX3N0YXR1c19nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgUkxEUCBtb2R1bGUgc3RhdHVzCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwU3RhdHVzIC0gc3RhdHVzIHN0cnVjdHVyZSBvZiBSTERQCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3JsZHBfc3RhdHVzX2dldChydGtfcmxkcF9zdGF0dXNfdCAqcFN0YXR1cyk7CisKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3JsZHBfcG9ydFN0YXR1c19nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgUkxEUCBtb2R1bGUgc3RhdHVzCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIHBvcnQgbnVtYmVyIHRvIGJlIGdldAorICogT3V0cHV0OgorICogICAgICBwUG9ydFN0YXR1cyAtIHBlciBwb3J0IHN0YXR1cyBzdHJ1Y3R1cmUgb2YgUkxEUAorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfSU5QVVQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcmxkcF9wb3J0U3RhdHVzX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19ybGRwX3BvcnRTdGF0dXNfdCAqcFBvcnRTdGF0dXMpOworCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19ybGRwX3BvcnRTdGF0dXNfY2xlYXIKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBDbGVhciBSTERQIG1vZHVsZSBzdGF0dXMKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gcG9ydCBudW1iZXIgdG8gYmUgY2xlYXIKKyAqICAgICAgcFBvcnRTdGF0dXMgLSBwZXIgcG9ydCBzdGF0dXMgc3RydWN0dXJlIG9mIFJMRFAKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfSU5QVVQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUgorICogTm90ZToKKyAqICAgICAgQ2xlYXIgb3BlcmF0aW9uIGVmZmVjdCBsb29wX2VudGVyIGFuZCBsb29wX2xlYXZlIG9ubHksIG90aGVyIGZpZWxkIGluCisgKiAgICAgIHRoZSBzdHJ1Y3R1cmUgYXJlIGRvbid0IGNhcmUKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3JsZHBfcG9ydFN0YXR1c19zZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfcmxkcF9wb3J0U3RhdHVzX3QgKnBQb3J0U3RhdHVzKTsKKworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcmxkcF9wb3J0TG9vcFBhaXJfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFJMRFAgcG9ydCBsb29wIHBhaXJzCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIHBvcnQgbnVtYmVyIHRvIGJlIGdldAorICogT3V0cHV0OgorICogICAgICBwUG9ydG1hc2sgLSBwZXIgcG9ydCByZWxhdGVkIGxvb3AgcG9ydHMKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX0lOUFVUCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3JsZHBfcG9ydExvb3BQYWlyX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19wb3J0bWFza190ICpwUG9ydG1hc2spOworCisjZW5kaWYgLyogX19SVEtfUkxEUF9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRrX2Vycm9yLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGtfZXJyb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzljMGJlCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRrX2Vycm9yLmgKQEAgLTAsMCArMSwyMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogJFJldmlzaW9uOiA3NjMwNiAkCisgKiAkRGF0ZTogMjAxNy0wMy0wOCAxNToxMzo1OCArMDgwMCAo6YCx5LiJLCAwOCDkuInmnIggMjAxNykgJAorICoKKyAqIFB1cnBvc2UgOiBEZWZpbml0aW9uIHRoZSBlcnJvciBudW1iZXIgaW4gdGhlIFNESy4KKyAqIEZlYXR1cmUgOiBlcnJvciBkZWZpbml0aW9uCisgKgorICovCisKKyNpZm5kZWYgX19DT01NT05fUlRfRVJST1JfSF9fCisjZGVmaW5lIF9fQ09NTU9OX1JUX0VSUk9SX0hfXworCisvKgorICogSW5jbHVkZSBGaWxlcworICovCisKKy8qCisgKiBEYXRhIFR5cGUgRGVjbGFyYXRpb24KKyAqLwordHlwZWRlZiBlbnVtIHJ0X2Vycm9yX2NvZGVfZQoreworICAgIFJUX0VSUl9GQUlMRUQgPSAtMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdlbmVyYWwgRXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAvKiAweDAwMDB4eHh4IGZvciBjb21tb24gZXJyb3IgY29kZSAqLworICAgIFJUX0VSUl9PSyA9IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwMDAwMDAsIE9LICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX0lOUFVULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDAwMDAwMSwgaW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfVU5JVF9JRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMDAwMDAyLCBpbnZhbGlkIHVuaXQgaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9QT1JUX0lELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwMDAwMDMsIGludmFsaWQgcG9ydCBpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX1BPUlRfTUFTSywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDAwMDAwNCwgaW52YWxpZCBwb3J0IG1hc2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfUE9SVF9MSU5LRE9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMDAwMDA1LCBsaW5rIGRvd24gcG9ydCBzdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9FTlRSWV9JTkRFWCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwMDAwMDYsIGludmFsaWQgZW50cnkgaW5kZXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX05VTExfUE9JTlRFUiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDAwMDAwNywgaW5wdXQgcGFyYW1ldGVyIGlzIG51bGwgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfUVVFVUVfSUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMDAwMDA4LCBpbnZhbGlkIHF1ZXVlIGlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9RVUVVRV9OVU0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwMDAwMDksIGludmFsaWQgcXVldWUgbnVtYmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX0JVU1lXQUlUX1RJTUVPVVQsICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDAwMDAwYSwgYnVzeSB3YXR0aW5nIHRpbWUgb3V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfTUFDLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMDAwMDBiLCBpbnZhbGlkIG1hYyBhZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwMDAwMGMsIGlucHV0IHBhcmFtZXRlciBvdXQgb2YgcmFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX0NISVBfTk9UX1NVUFBPUlRFRCwgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDAwMDAwZCwgZnVuY3Rpb25zIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBjaGlwIG1vZGVsICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfU01JLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMDAwMDBlLCBTTUkgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9OT1RfSU5JVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwMDAwMGYsIFRoZSBtb2R1bGUgaXMgbm90IGluaXRpYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX0NISVBfTk9UX0ZPVU5ELCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDAwMDAxMCwgVGhlIGNoaXAgY2FuIG5vdCBmb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfTk9UX0FMTE9XRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMDAwMDExLCBhY3Rpb25zIG5vdCBhbGxvd2VkIGJ5IHRoZSBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9EUklWRVJfTk9UX0ZPVU5ELCAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwMDAwMTIsIFRoZSBkcml2ZXIgY2FuIG5vdCBmb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX1NFTV9MT0NLX0ZBSUxFRCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDAwMDAxMywgRmFpbGVkIHRvIGxvY2sgc2VtYXBob3JlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfU0VNX1VOTE9DS19GQUlMRUQsICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMDAwMDE0LCBGYWlsZWQgdG8gdW5sb2NrIHNlbWFwaG9yZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9FTkFCTEUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwMDAwMTUsIGludmFsaWQgZW5hYmxlIHBhcmFtZXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX1RCTF9GVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDAwMDAxNiwgaW5wdXQgdGFibGUgZnVsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgIC8qIDB4MDAwMXh4eHggZm9yIHZsYW4gKi8KKyAgICBSVF9FUlJfVkxBTl9WSUQgPSAweDAwMDEwMDAwLCAgICAgICAgICAgICAgICAgICAvKiAweDAwMDEwMDAwLCBpbnZhbGlkIHZpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9WTEFOX1BSSU9SSVRZLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwMTAwMDEsIGludmFsaWQgMXAgcHJpb3JpdHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX1ZMQU5fRU1QVFlfRU5UUlksICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDAxMDAwMiwgZW10cHkgZW50cnkgb2YgdmxhbiB0YWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfVkxBTl9BQ0NFUFRfRlJBTUVfVFlQRSwgICAgICAgICAgICAgICAgICAvKiAweDAwMDEwMDAzLCBpbnZhbGlkIGFjY2VwdCBmcmFtZSB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9WTEFOX0VYSVNULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwMTAwMDQsIHZsYW4gaXMgZXhpc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX1ZMQU5fRU5UUllfTk9UX0ZPVU5ELCAgICAgICAgICAgICAgICAgICAgLyogMHgwMDAxMDAwNSwgc3BlY2lmaWVkIHZsYW4gZW50cnkgbm90IGZvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfVkxBTl9QT1JUX01CUl9FWElTVCwgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMDEwMDA2LCBtZW1iZXIgcG9ydCBleGlzdCBpbiB0aGUgc3BlY2lmaWVkIHZsYW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9WTEFOX1BST1RPX0FORF9QT1JULCAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwMTAwMDgsIGludmFsaWQgcHJvdG9jb2wgYW5kIHBvcnQgYmFzZWQgdmxhbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAvKiAweDAwMDJ4eHh4IGZvciBzdmxhbiAqLworICAgIFJUX0VSUl9TVkxBTl9FTlRSWV9JTkRFWCA9IDB4MDAwMjAwMDAsICAgICAgICAgIC8qIDB4MDAwMjAwMDAsIGludmFsaWQgc3ZpZCBlbnRyeSBubyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX1NWTEFOX0VUSEVSX1RZUEUsICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDAyMDAwMSwgaW52YWxpZCBTVkxBTiBldGhlciB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfU1ZMQU5fVEFCTEVfRlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMDIwMDAyLCBubyBlbXB0eSBlbnRyeSBpbiBTVkxBTiB0YWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9TVkxBTl9FTlRSWV9OT1RfRk9VTkQsICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwMjAwMDMsIHNwZWNpZmllZCBzdmxhbiBlbnRyeSBub3QgZm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX1NWTEFOX0VYSVNULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDAyMDAwNCwgU1ZMQU4gZW50cnkgaXMgZXhpc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfU1ZMQU5fVklELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMDIwMDA1LCBpbnZhbGlkIHN2aWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgLyogMHgwMDAzeHh4eCBmb3IgTVNUUCAqLworICAgIFJUX0VSUl9NU1RJID0gMHgwMDAzMDAwMCwgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwMzAwMDAsIGludmFsaWQgbXN0aSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX01TVFBfU1RBVEUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDAzMDAwMSwgaW52YWxpZCBzcGFubmluZyB0cmVlIHN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfTVNUSV9FWElTVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMDMwMDAyLCBNU1RJIGV4aXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9NU1RJX05PVF9FWElTVCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwMzAwMDMsIE1TVEkgbm90IGV4aXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAvKiAweDAwMDR4eHh4IGZvciBCVUNLRVQgKi8KKyAgICBSVF9FUlJfVElNRVNMT1QgPSAweDAwMDQwMDAwLCAgICAgICAgICAgICAgICAgICAvKiAweDAwMDQwMDAwLCBpbnZhbGlkIHRpbWUgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9UT0tFTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwNDAwMDEsIGludmFsaWQgdG9rZW4gYW1vdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX1JBVEUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDA0MDAwMiwgaW52YWxpZCByYXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfVElDSywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMDQwMDAzLCBpbnZhbGlkIHRpY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgIC8qIDB4MDAwNXh4eHggZm9yIFJNQSAqLworICAgIFJUX0VSUl9STUFfQUREUiA9IDB4MDAwNTAwMDAsICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwNTAwMDAsIGludmFsaWQgcm1hIG1hYyBhZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX1JNQV9BQ1RJT04sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDA1MDAwMSwgaW52YWxpZCBybWEgYWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgIC8qIDB4MDAwNnh4eHggZm9yIEwyICovCisgICAgUlRfRVJSX0wyX0hBU0hfS0VZID0gMHgwMDA2MDAwMCwgICAgICAgICAgICAgICAgLyogMHgwMDA2MDAwMCwgaW52YWxpZCBMMiBIYXNoIGtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfTDJfSEFTSF9JTkRFWCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMDYwMDAxLCBpbnZhbGlkIEwyIEhhc2ggaW5kZXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9MMl9DQU1fSU5ERVgsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwNjAwMDIsIGludmFsaWQgTDIgQ0FNIGluZGV4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX0wyX0VOUlRZU0VMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDA2MDAwMywgaW52YWxpZCBFbnRyeVNlbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfTDJfSU5ERVhUQUJMRV9JTkRFWCwgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMDYwMDA0LCBpbnZhbGlkIEwyIGluZGV4IHRhYmxlKD1wb3J0TWFzayB0YWJsZSkgaW5kZXggICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9MSU1JVEVEX0wyRU5UUllfTlVNLCAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwNjAwMDUsIGludmFsaWQgbGltaXRlZCBMMiBlbnRyeSBudW1iZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX0wyX0FHR1JFR19QT1JULCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDA2MDAwNiwgdGhpcyBhZ2dyZWdhdGVkIHBvcnQgaXMgbm90IHRoZSBsb3dlc3QgcGh5c2ljYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0IG9mIGl0cyBhZ2dyZWdhdGlvbiBncm91cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9MMl9GSUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwNjAwMDcsIGludmFsaWQgZmlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX0wyX1ZJRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMDYwMDA4LCBpbnZhbGlkIGN2aWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9MMl9OT19FTVBUWV9FTlRSWSwgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwNjAwMDksIG5vIGVtcHR5IGVudHJ5IGluIEwyIHRhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX0wyX0VOVFJZX05PVEZPVU5ELCAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDA2MDAwYSwgc3BlY2lmaWVkIGVudHJ5IG5vdCBmb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfTDJfSU5ERVhUQkxfRlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMDYwMDBiLCB0aGUgTDIgaW5kZXggdGFibGUgaXMgZnVsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9MMl9JTlZBTElEX0ZMT1dUWVBFLCAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwNjAwMGMsIGludmFsaWQgTDIgZmxvdyB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX0wyX0wyVU5JX1BBUkFNLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDA2MDAwZCwgaW52YWxpZCBMMiB1bmljYXN0IHBhcmFtZXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfTDJfTDJNVUxUSV9QQVJBTSwgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMDYwMDBlLCBpbnZhbGlkIEwyIG11bHRpY2FzdCBwYXJhbWV0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9MMl9JUE1VTFRJX1BBUkFNLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwNjAwMGYsIGludmFsaWQgTDIgaXAgbXVsdGljYXN0IHBhcmFtZXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX0wyX1BBUlRJQUxfSEFTSF9LRVksICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDA2MDAxMCwgaW52YWxpZCBMMiBwYXJ0aWFsIEhhc2gga2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfTDJfRU1QVFlfRU5UUlksICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMDYwMDExLCB0aGUgZW50cnkgaXMgZW1wdHkoaW52YWxpZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9MMl9GTFVTSF9UWVBFLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwNjAwMTIsIHRoZSBmbHVzaCB0eXBlIGlzIGludmFsaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX0wyX05PX0NQVV9QT1JULCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDA2MDAxMywgQ1BVIHBvcnQgbm90IGV4aXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgIC8qIDB4MDAwN3h4eHggZm9yIEZJTFRFUiAoUElFKSAqLworICAgIFJUX0VSUl9GSUxURVJfQkxPQ0tOVU0gPSAweDAwMDcwMDAwLCAgICAgICAgICAgIC8qIDB4MDAwNzAwMDAsIGludmFsaWQgYmxvY2sgbnVtYmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX0ZJTFRFUl9FTlRSWUlEWCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDA3MDAwMSwgaW52YWxpZCBlbnRyeSBpbmRleCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfRklMVEVSX0NVVExJTkUsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMDcwMDAyLCBpbnZhbGlkIGN1dGxpbmUgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9GSUxURVJfRkxPV1RCTEJMT0NLLCAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwNzAwMDMsIGJsb2NrIGJlbG9uZ3MgdG8gZmxvdyB0YWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX0ZJTFRFUl9JTkFDTEJMT0NLLCAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDA3MDAwNCwgYmxvY2sgYmVsb25ncyB0byBpbmdyZXNzIEFDTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfRklMVEVSX0FDVElPTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMDcwMDA1LCBhY3Rpb24gZG9lc24ndCBjb25zaXN0IHRvIGVudHJ5IHR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9GSUxURVJfSU5BQ0xfUlVMRU5VTSwgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwNzAwMDYsIGludmFsaWQgQUNMIHJ1bGVudW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX0ZJTFRFUl9JTkFDTF9UWVBFLCAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDA3MDAwNywgZW50cnkgdHlwZSBpc24ndCBhbiBpbmdyZXNzIEFDTCBydWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfRklMVEVSX0lOQUNMX0VYSVNULCAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMDcwMDA4LCBBQ0wgZW50cnkgaXMgYWxyZWFkeSBleGl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9GSUxURVJfSU5BQ0xfRU1QVFksICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwNzAwMDksIEFDTCBlbnRyeSBpcyBlbXB0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX0ZJTFRFUl9GTE9XVEJMX1RZUEUsICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDA3MDAwYSwgZW50cnkgdHlwZSBpc24ndCBhbiBmbG93IHRhYmxlIHJ1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfRklMVEVSX0ZMT1dUQkxfUlVMRU5VTSwgICAgICAgICAgICAgICAgICAvKiAweDAwMDcwMDBiLCBpbnZhbGlkIGZsb3cgdGFibGUgcnVsZW51bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9GSUxURVJfRkxPV1RCTF9FTVBUWSwgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwNzAwMGMsIGZsb3cgdGFibGUgZW50cnkgaXMgZW1wdHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX0ZJTFRFUl9GTE9XVEJMX0VYSVNULCAgICAgICAgICAgICAgICAgICAgLyogMHgwMDA3MDAwZCwgZmxvdyB0YWJsZSBlbnRyeSBpcyBhbHJlYWR5IGV4aXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfRklMVEVSX01FVEVSX0lELCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMDcwMDBlLCBpbnZhbGlkIG1ldGVyaW5nIGlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9GSUxURVJfTE9HX0lELCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwNzAwMGYsIGludmFsaWQgbG9nIGlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX0ZJTFRFUl9JTkFDTF9OT05FX0JFR0lOX0lEWCwgICAgICAgICAgICAgLyogMHgwMDA3MDAxMCwgZW50cnkgaW5kZXggaXMgbm90IHN0YXJ0aW5nIGluZGV4IG9mIGEgZ3JvdXAgb2YgcnVsZXMgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfRklMVEVSX0lOQUNMX0FDVF9OT1RfU1VQUE9SVCwgICAgICAgICAgICAvKiAweDAwMDcwMDExLCBhY3Rpb24gbm90IHN1cHBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfRklMVEVSX0lOQUNMX1JVTEVfTk9UX1NVUFBPUlQsICAgICAgICAgICAvKiAweDAwMDcwMDEyLCBydWxlIG5vdCBzdXBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgIC8qIDB4MDAwOHh4eHggZm9yIEFDTCBSYXRlIExpbWl0ICovCisgICAgUlRfRVJSX0FDTFJMX0hUSFIgPSAweDAwMDgwMDAwLCAgICAgICAgICAgICAgICAgLyogMHgwMDA4MDAwMCwgaW52YWxpZCBoaWdoIHRocmVzaG9sZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfQUNMUkxfVElNRVNMT1QsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMDgwMDAxLCBpbnZhbGlkIHRpbWUgc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9BQ0xSTF9UT0tFTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwODAwMDIsIGludmFsaWQgdG9rZW4gYW1vdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX0FDTFJMX1JBVEUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDA4MDAwMywgaW52YWxpZCByYXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgIC8qIDB4MDAwOXh4eHggZm9yIExpbmsgYWdncmVnYXRpb24gKi8KKyAgICBSVF9FUlJfTEFfQ1BVUE9SVCA9IDB4MDAwOTAwMDAsICAgICAgICAgICAgICAgICAvKiAweDAwMDkwMDAwLCBDUFUgcG9ydCBjYW4gbm90IGJlIGFnZ3JlZ2F0ZWQgcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9MQV9UUlVOS19JRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwOTAwMDEsIGludmFsaWQgdHJ1bmsgaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX0xBX1BPUlRNQVNLLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDA5MDAwMiwgaW52YWxpZCBwb3J0IG1hc2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfTEFfSEFTSE1BU0ssICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMDkwMDAzLCBpbnZhbGlkIGhhc2ggbWFzayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9MQV9EVU1CLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwOTAwMDQsIHRoaXMgQVBJIHNob3VsZCBiZSB1c2VkIGluIDgwMi4xYWQgZHVtYiBtb2RlICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX0xBX1BPUlROVU1fRFVNQiwgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDA5MDAwNSwgaXQgY2FuIG9ubHkgYWdncmVnYXRlIGF0IG1vc3QgZm91ciBwb3J0cyB3aGVuIDgwMi4xYWQgZHVtYiBtb2RlICAgICAgKi8KKyAgICBSVF9FUlJfTEFfUE9SVE5VTV9OT1JNQUwsICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMDkwMDA2LCBpdCBjYW4gb25seSBhZ2dyZWdhdGUgYXQgbW9zdCBlaWdodCBwb3J0cyB3aGVuIDgwMi4xYWQgbm9ybWFsIG1vZGUgICAqLworICAgIFJUX0VSUl9MQV9NRU1CRVJfT1ZFUkxBUCwgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwOTAwMDcsIHRoZSBzcGVjaWZpZWQgcG9ydCBtYXNrIGlzIG92ZXJsYXBwZWQgd2l0aCBvdGhlciBncm91cCAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX0xBX05PVF9NRU1CRVJfUE9SVCwgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDA5MDAwOCwgdGhlIHBvcnQgaXMgbm90IGEgbWVtYmVyIHBvcnQgb2YgdGhlIHRydW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfTEFfVFJVTktfTk9UX0VYSVNULCAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMDkwMDA5LCB0aGUgdHJ1bmsgZG9lc24ndCBleGlzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisKKyAgICAvKiAweDAwMGF4eHh4IGZvciBzdG9ybSBmaWx0ZXIgKi8KKyAgICBSVF9FUlJfU0ZDX1RJQ0tfUEVSSU9EID0gMHgwMDBhMDAwMCwgICAgICAgICAgICAvKiAweDAwMGEwMDAwLCBpbnZhbGlkIFNGQyB0aWNrIHBlcmlvZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9TRkNfVU5LTk9XTl9HUk9VUCwgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwYTAwMDEsIFVua25vd24gU3Rvcm0gZmlsdGVyIGdyb3VwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAvKiAweDAwMGJ4eHh4IGZvciBwYXR0ZXJuIG1hdGNoICovCisgICAgUlRfRVJSX1BNX01BU0sgPSAweDAwMGIwMDAwLCAgICAgICAgICAgICAgICAgICAgLyogMHgwMDBiMDAwMCwgaW52YWxpZCBwYXR0ZXJuIGxlbmd0aC4gUGF0dGVybiBsZW5ndGggc2hvdWxkIGJlIDggICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfUE1fTEVOR1RILCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMGIwMDAxLCBpbnZhbGlkIHBhdHRlcm4gbWF0Y2ggbWFzaywgZmlyc3QgYnl0ZSBtdXN0IGNhcmUgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9QTV9NT0RFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwYjAwMDIsIGludmFsaWQgcGF0dGVybiBtYXRjaCBtb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAvKiAweDAwMGN4eHh4IGZvciBpbnB1dCBiYW5kd2lkdGggY29udHJvbCAqLworICAgIFJUX0VSUl9JTkJXX1RJQ0tfUEVSSU9EID0gMHgwMDBjMDAwMCwgICAgICAgICAgIC8qIDB4MDAwYzAwMDAsIGludmFsaWQgdGljayBwZXJpb2QgZm9yIGlucHV0IGJhbmR3aWR0aCBjb250cm9sICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX0lOQldfVE9LRU5fQU1PVU5ULCAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDBjMDAwMSwgaW52YWxpZCBhbW91bnQgb2YgdG9rZW4gZm9yIGlucHV0IGJhbmR3aWR0aCBjb250cm9sICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfSU5CV19GQ09OX1ZBTFVFLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMGMwMDAyLCBpbnZhbGlkIGZsb3cgY29udHJvbCBPTiB0aHJlc2hvbGQgdmFsdWUgZm9yIGlucHV0IGJhbmR3aWR0aCBjb250cm9sICAqLworICAgIFJUX0VSUl9JTkJXX0ZDT0ZGX1ZBTFVFLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwYzAwMDMsIGludmFsaWQgZmxvdyBjb250cm9sIE9GRiB0aHJlc2hvbGQgdmFsdWUgZm9yIGlucHV0IGJhbmR3aWR0aCBjb250cm9sICovCisgICAgUlRfRVJSX0lOQldfRkNfQUxMT1dBTkNFLCAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDBjMDAwNCwgaW52YWxpZCBhbGxvd2FuY2Ugb2YgaW5jb21taW5nIHBhY2tldCBmb3IgaW5wdXQgYmFuZHdpZHRoIGNvbnRyb2wgICAgKi8KKyAgICBSVF9FUlJfSU5CV19SQVRFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMGMwMDA1LCBpbnZhbGlkIGlucHV0IGJhbmR3aWR0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgLyogMHgwMDBkeHh4eCBmb3IgUW9TICovCisgICAgUlRfRVJSX1FPU18xUF9QUklPUklUWSA9IDB4MDAwZDAwMDAsICAgICAgICAgICAgLyogMHgwMDBkMDAwMCwgaW52YWxpZCA4MDIuMVAgcHJpb3JpdHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfUU9TX0RTQ1BfVkFMVUUsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMGQwMDAxLCBpbnZhbGlkIERTQ1AgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9RT1NfSU5UX1BSSU9SSVRZLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwZDAwMDIsIGludmFsaWQgaW50ZXJuYWwgcHJpb3JpdHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX1FPU19TRUxfRFNDUF9QUkksICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDBkMDAwMywgaW52YWxpZCBEU0NQIHNlbGVjdGlvbiBwcmlvcml0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfUU9TX1NFTF9QT1JUX1BSSSwgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMGQwMDA0LCBpbnZhbGlkIHBvcnQgc2VsZWN0aW9uIHByaW9yaXR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9RT1NfU0VMX0lOX0FDTF9QUkksICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwZDAwMDUsIGludmFsaWQgaW5ncmVzcyBBQ0wgc2VsZWN0aW9uIHByaW9yaXR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX1FPU19TRUxfQ0xBU1NfUFJJLCAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDBkMDAwNiwgaW52YWxpZCBjbGFzc2lmaWVyIHNlbGVjdGlvbiBwcmlvcml0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfUU9TX0VCV19SQVRFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMGQwMDA3LCBpbnZhbGlkIGVncmVzcyBiYW5kd2lkdGggcmF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9RT1NfU0NIRV9UWVBFLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwZDAwMDgsIGludmFsaWQgUW9TIHNjaGVkdWxpbmcgdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX1FPU19RVUVVRV9XRUlHSFQsICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDBkMDAwOSwgaW52YWxpZCBRdWV1ZSB3ZWlnaHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfUU9TX1NFTF9QUklfU09VUkNFLCAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMGQwMDBhLCBpbnZhbGlkIHNlbGVjdGlvbiBvZiBwcmlvcml0eSBzb3VyY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgIC8qIDB4MDAwZXh4eHggZm9yIHBvcnQgYWJpbGl0eSAqLworICAgIFJUX0VSUl9QSFlfUEFHRV9JRCA9IDB4MDAwZTAwMDAsICAgICAgICAgICAgICAgIC8qIDB4MDAwZTAwMDAsIGludmFsaWQgUEhZIHBhZ2UgaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX1BIWV9SRUdfSUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDBlMDAwMSwgaW52YWxpZCBQSFkgcmVnIGlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfUEhZX0RBVEFNQVNLLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMGUwMDAyLCBpbnZhbGlkIFBIWSBkYXRhIG1hc2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9QSFlfQVVUT19ORUdPX01PREUsICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwZTAwMDMsIGludmFsaWQgUEhZIGF1dG8tbmVnb3RpYXRpb24gbW9kZSovCisgICAgUlRfRVJSX1BIWV9TUEVFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDBlMDAwNCwgaW52YWxpZCBQSFkgc3BlZWQgc2V0dGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfUEhZX0RVUExFWCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMGUwMDA1LCBpbnZhbGlkIFBIWSBkdXBsZXggc2V0dGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9QSFlfRk9SQ0VfQUJJTElUWSwgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwZTAwMDYsIGludmFsaWQgUEhZIGZvcmNlIG1vZGUgYWJpbGl0eSBwYXJhbWV0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX1BIWV9GT1JDRV8xMDAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDBlMDAwNywgaW52YWxpZCBQSFkgZm9yY2UgbW9kZSAxRyBzcGVlZCBzZXR0aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfUEhZX1RYUlgsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMGUwMDA4LCBpbnZhbGlkIFBIWSB0eC9yeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9QSFlfSUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwZTAwMDksIGludmFsaWQgUEhZIGlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX1BIWV9SVENUX05PVF9GSU5JU0gsICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDBlMDAwYSwgUEhZIFJUQ1QgaW4gcHJvZ3Jlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgIC8qIDB4MDAwZnh4eHggZm9yIG1pcnJvciAqLworICAgIFJUX0VSUl9NSVJST1JfRElSRUNUSU9OID0gMHgwMDBmMDAwMCwgICAgICAgICAgIC8qIDB4MDAwZjAwMDAsIGludmFsaWQgZXJyb3IgbWlycm9yIGRpcmVjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX01JUlJPUl9TRVNTSU9OX0ZVTEwsICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDBmMDAwMSwgbWlycm9yaW5nIHNlc3Npb24gaXMgZnVsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfTUlSUk9SX1NFU1NJT05fTk9FWElTVCwgICAgICAgICAgICAgICAgICAvKiAweDAwMGYwMDAyLCBtaXJyb3Jpbmcgc2Vzc2lvbiBub3QgZXhpc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9NSVJST1JfUE9SVF9FWElTVCwgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAwZjAwMDMsIG1pcnJvcmluZyBwb3J0IGFscmVhZHkgZXhpc3RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX01JUlJPUl9QT1JUX05PVF9FWElTVCwgICAgICAgICAgICAgICAgICAgLyogMHgwMDBmMDAwNCwgbWlycm9yaW5nIHBvcnQgZG9lcyBub3QgZXhpc3RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfTUlSUk9SX1BPUlRfRlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMGYwMDA1LCBFeGNlZWRzIG1heGltdW0gbnVtYmVyIG9mIHN1cHBvcnRlZCBtaXJyb3JpbmcgcG9ydCAgICAgICAgICAgICAgICAgICAqLworCisgICAgLyogMHgwMDEweHh4eCBmb3Igc3RhdCAqLworICAgIFJUX0VSUl9TVEFUX0lOVkFMSURfR0xPQkFMX0NOVFIgPSAweDAwMTAwMDAwLCAgIC8qIDB4MDAxMDAwMDAsIEludmFsaWQgR2xvYmFsIENvdW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX1NUQVRfSU5WQUxJRF9QT1JUX0NOVFIsICAgICAgICAgICAgICAgICAgLyogMHgwMDEwMDAwMSwgSW52YWxpZCBQb3J0IENvdW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfU1RBVF9HTE9CQUxfQ05UUl9GQUlMLCAgICAgICAgICAgICAgICAgICAvKiAweDAwMTAwMDAyLCBDb3VsZCBub3QgcmV0cmlldmUvcmVzZXQgR2xvYmFsIENvdW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9TVEFUX1BPUlRfQ05UUl9GQUlMLCAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAxMDAwMDMsIENvdWxkIG5vdCByZXRyaWV2ZS9yZXNldCBQb3J0IENvdW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX1NUQVRfSU5WQUxJRF9DTlRSLCAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDEwMDAwNCwgSW52YWxpZCBDb3VudGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfU1RBVF9DTlRSX0ZBSUwsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMTAwMDA1LCBDb3VsZCBub3QgcmV0cmlldmUvcmVzZXQgQ291bnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgLyogMHgwMDExeHh4eCBmb3IgZG90MXggKi8KKyAgICBSVF9FUlJfRE9UMVhfSU5WQUxJRF9ESVJFQ1RJT04gPSAweDAwMTEwMDAwLCAgICAvKiAweDAwMTEwMDAwLCBJbnZhbGlkIEF1dGhlbnRpY2F0aW9uIERpcmVjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9ET1QxWF9QT1JUQkFTRURQTkVOLCAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAxMTAwMDEsIFBvcnQtYmFzZWQgZW5hYmxlIHBvcnQgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX0RPVDFYX1BPUlRCQVNFREFVVEgsICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDExMDAwMiwgUG9ydC1iYXNlZCBhdXRoIHBvcnQgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfRE9UMVhfUE9SVEJBU0VET1BESVIsICAgICAgICAgICAgICAgICAgICAvKiAweDAwMTEwMDAzLCBQb3J0LWJhc2VkIG9wZGlyIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9ET1QxWF9NQUNCQVNFRFBORU4sICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAxMTAwMDQsIE1BQy1iYXNlZCBlbmFibGUgcG9ydCBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX0RPVDFYX01BQ0JBU0VET1BESVIsICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDExMDAwNSwgTUFDLWJhc2VkIG9wZGlyIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfRE9UMVhfUFJPQywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwMTEwMDA2LCB1bmF1dGhvcml6ZWQgYmVoYXZpb3IgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIFJUX0VSUl9ET1QxWF9HVkxBTklEWCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDAxMTAwMDcsIGd1ZXN0IHZsYW4gaW5kZXggZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgUlRfRVJSX0RPVDFYX0dWTEFOVEFMSywgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMDExMDAwOCwgZ3Vlc3QgdmxhbiBPUERJUiBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBSVF9FUlJfRE9UMVhfTUFDX1BPUlRfTUlTTUFUQ0gsICAgICAgICAgICAgICAgICAvKiAweDAwMTEwMDA5LCBBdXRoIE1BQyBhbmQgcG9ydCBtaXNtYXRjaCBlcm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgUlRfRVJSX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBzeW1ib2wgaXMgdGhlIGxhdGVzdCBzeW1ib2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IHJ0X2Vycm9yX2NvZGVfdDsKKworCisjZW5kaWYgLyogX19DT01NT05fUlRfRVJST1JfSF9fICovCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGtfaGFsLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGtfaGFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRkYjIzZgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0a19oYWwuaApAQCAtMCwwICsxLDQ0IEBACisjaWZuZGVmIF9fUlRLX0hBTF9IX18KKyNkZWZpbmUgX19SVEtfSEFMX0hfXworI2luY2x1ZGUgInJhX2lvY3RsLmgiCisKKyNkZWZpbmUgUlRLX1NXX1ZJRF9SQU5HRSAgICAgICAgMTYKK3ZvaWQgcnRrX2hhbF9zd2l0Y2hfaW5pdCh2b2lkKTsKK3ZvaWQgcnRrX2hhbF9kdW1wX21pYih2b2lkKTsKK3ZvaWQgcnRrX2hhbF9kdW1wX2Z1bGxfbWliKHZvaWQpOworaW50IHJ0a19oYWxfZHVtcF92bGFuKHZvaWQpOwordm9pZCBydGtfaGFsX2NsZWFyX3ZsYW4odm9pZCk7CitpbnQgcnRrX2hhbF9zZXRfdmxhbihzdHJ1Y3QgcmFfc3dpdGNoX2lvY3RsX2RhdGEgKmRhdGEpOworaW50IHJ0a19oYWxfc2V0X2luZ3Jlc3NfcmF0ZShzdHJ1Y3QgcmFfc3dpdGNoX2lvY3RsX2RhdGEgKmRhdGEpOworaW50IHJ0a19oYWxfc2V0X2VncmVzc19yYXRlKHN0cnVjdCByYV9zd2l0Y2hfaW9jdGxfZGF0YSAqZGF0YSk7Cit2b2lkIHJ0a19oYWxfZHVtcF90YWJsZSh2b2lkKTsKK3ZvaWQgcnRrX2hhbF9jbGVhcl90YWJsZSh2b2lkKTsKK3ZvaWQgcnRrX2hhbF9nZXRfcGh5X3N0YXR1cyhzdHJ1Y3QgcmFfc3dpdGNoX2lvY3RsX2RhdGEgKmRhdGEpOwordm9pZCBydGtfaGFsX3NldF9wb3J0X21pcnJvcihzdHJ1Y3QgcmFfc3dpdGNoX2lvY3RsX2RhdGEgKmRhdGEpOwordm9pZCBydGtfaGFsX3JlYWRfcmVnKHN0cnVjdCByYV9zd2l0Y2hfaW9jdGxfZGF0YSAqZGF0YSk7Cit2b2lkIHJ0a19oYWxfd3JpdGVfcmVnKHN0cnVjdCByYV9zd2l0Y2hfaW9jdGxfZGF0YSAqZGF0YSk7Cit2b2lkIHJ0a19oYWxfcW9zX2VuKHN0cnVjdCByYV9zd2l0Y2hfaW9jdGxfZGF0YSAqZGF0YSk7Cit2b2lkIHJ0a19oYWxfcW9zX3NldF90YWJsZTJ0eXBlKHN0cnVjdCByYV9zd2l0Y2hfaW9jdGxfZGF0YSAqZGF0YSk7Cit2b2lkIHJ0a19oYWxfcW9zX2dldF90YWJsZTJ0eXBlKHN0cnVjdCByYV9zd2l0Y2hfaW9jdGxfZGF0YSAqZGF0YSk7Cit2b2lkIHJ0a19oYWxfcW9zX3NldF9wb3J0MnRhYmxlKHN0cnVjdCByYV9zd2l0Y2hfaW9jdGxfZGF0YSAqZGF0YSk7Cit2b2lkIHJ0a19oYWxfcW9zX2dldF9wb3J0MnRhYmxlKHN0cnVjdCByYV9zd2l0Y2hfaW9jdGxfZGF0YSAqZGF0YSk7Cit2b2lkIHJ0a19oYWxfcW9zX3NldF9wb3J0MnByaShzdHJ1Y3QgcmFfc3dpdGNoX2lvY3RsX2RhdGEgKmRhdGEpOwordm9pZCBydGtfaGFsX3Fvc19nZXRfcG9ydDJwcmkoc3RydWN0IHJhX3N3aXRjaF9pb2N0bF9kYXRhICpkYXRhKTsKK3ZvaWQgcnRrX2hhbF9xb3Nfc2V0X2RzY3AycHJpKHN0cnVjdCByYV9zd2l0Y2hfaW9jdGxfZGF0YSAqZGF0YSk7Cit2b2lkIHJ0a19oYWxfcW9zX2dldF9kc2NwMnByaShzdHJ1Y3QgcmFfc3dpdGNoX2lvY3RsX2RhdGEgKmRhdGEpOwordm9pZCBydGtfaGFsX3Fvc19zZXRfcHJpMnF1ZXVlKHN0cnVjdCByYV9zd2l0Y2hfaW9jdGxfZGF0YSAqZGF0YSk7Cit2b2lkIHJ0a19oYWxfcW9zX2dldF9wcmkycXVldWUoc3RydWN0IHJhX3N3aXRjaF9pb2N0bF9kYXRhICpkYXRhKTsKK3ZvaWQgcnRrX2hhbF9xb3Nfc2V0X3F1ZXVlX3dlaWdodChzdHJ1Y3QgcmFfc3dpdGNoX2lvY3RsX2RhdGEgKmRhdGEpOwordm9pZCBydGtfaGFsX3Fvc19nZXRfcXVldWVfd2VpZ2h0KHN0cnVjdCByYV9zd2l0Y2hfaW9jdGxfZGF0YSAqZGF0YSk7Cit2b2lkIHJ0a19oYWxfZW5hYmxlX2lnbXBzbm9vcChzdHJ1Y3QgcmFfc3dpdGNoX2lvY3RsX2RhdGEgKmRhdGEpOwordm9pZCBydGtfaGFsX2Rpc2FibGVfaWdtcHNub29wKHZvaWQpOwordm9pZCBydGtfaGFsX3NldF9waHlfdGVzdF9tb2RlKHN0cnVjdCByYV9zd2l0Y2hfaW9jdGxfZGF0YSAqZGF0YSk7Cit2b2lkIHJ0a19oYWxfZ2V0X3BoeV9yZWcoc3RydWN0IHJhX3N3aXRjaF9pb2N0bF9kYXRhICpkYXRhKTsKK3ZvaWQgcnRrX2hhbF9zZXRfcGh5X3JlZyhzdHJ1Y3QgcmFfc3dpdGNoX2lvY3RsX2RhdGEgKmRhdGEpOwordm9pZCBydGtfaGFsX3ZsYW5fdGFnKHN0cnVjdCByYV9zd2l0Y2hfaW9jdGxfZGF0YSAqZGF0YSk7Cit2b2lkIHJ0a19oYWxfdmxhbl9wb3J0cHZpZF9zZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfdmxhbl90IHB2aWQsIHJ0a19wcmlfdCBwcmlvcml0eSk7Cit2b2lkIHJ0a19oYWxfYWRkX3RhYmxlKHN0cnVjdCByYV9zd2l0Y2hfaW9jdGxfZGF0YSAqZGF0YSk7Cit2b2lkIHJ0a19oYWxfZGVsX3RhYmxlKHN0cnVjdCByYV9zd2l0Y2hfaW9jdGxfZGF0YSAqZGF0YSk7Cit2b2lkIHJ0a19oYWxfdmxhbl9tb2RlKHN0cnVjdCByYV9zd2l0Y2hfaW9jdGxfZGF0YSAqZGF0YSk7Cit2b2lkIHJ0a19oYWxfc2V0X3BvcnRfdHJ1bmsoc3RydWN0IHJhX3N3aXRjaF9pb2N0bF9kYXRhICpkYXRhKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRrX3N3aXRjaC5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRrX3N3aXRjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwY2ExMzYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGtfc3dpdGNoLmgKQEAgLTAsMCArMSw3MzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogJFJldmlzaW9uOiA3NjMzNiAkCisgKiAkRGF0ZTogMjAxNy0wMy0wOSAxMDo0MToyMSArMDgwMCAo6YCx5ZubLCAwOSDkuInmnIggMjAxNykgJAorICoKKyAqIFB1cnBvc2UgOiBSVEsgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJCisgKiBGZWF0dXJlIDogSGVyZSBpcyBhIGxpc3Qgb2YgYWxsIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIGluIHRoaXMgbW9kdWxlLgorICoKKyAqLworCisjaWZuZGVmIF9fUlRLX1NXSVRDSF9IX18KKyNkZWZpbmUgX19SVEtfU1dJVENIX0hfXworCisjaW5jbHVkZSA8cnRrX3R5cGVzLmg+CisKKyNkZWZpbmUgVU5ERUZJTkVfUEhZX1BPUlQgICAoMHhGRikKKyNkZWZpbmUgUlRLX1NXSVRDSF9QT1JUX05VTSAoMzIpCisKKyNkZWZpbmUgTUFYUEtUTEVOX0NGR19JRF9NQVggKDEpCisKKyNkZWZpbmUgUlRLX1NXSVRDSF9NQVhfUEtUTEVOICgweDNGRkYpCisKK3R5cGVkZWYgZW51bSBpbml0X3N0YXRlX2UKK3sKKyAgICBJTklUX05PVF9DT01QTEVURUQgPSAwLAorICAgIElOSVRfQ09NUExFVEVELAorICAgIElOSVRfU1RBVEVfRU5ECit9IGluaXRfc3RhdGVfdDsKKwordHlwZWRlZiBlbnVtIHN3aXRjaF9jaGlwX2UKK3sKKyAgICBDSElQX1JUTDgzNjdDID0gMCwKKyAgICBDSElQX1JUTDgzNzBCLAorICAgIENISVBfUlRMODM2NEIsCisgICAgQ0hJUF9SVEw4MzYzU0NfVkIsCisgICAgQ0hJUF9FTkQKK31zd2l0Y2hfY2hpcF90OworCit0eXBlZGVmIGVudW0gcG9ydF90eXBlX2UKK3sKKyAgICBVVFBfUE9SVCA9IDAsCisgICAgRVhUX1BPUlQsCisgICAgVU5LTk9XTl9QT1JUID0gMHhGRiwKKyAgICBQT1JUX1RZUEVfRU5ECit9cG9ydF90eXBlX3Q7CisKK3R5cGVkZWYgc3RydWN0IHJ0a19zd2l0Y2hfaGFsQ3RybF9zCit7CisgICAgc3dpdGNoX2NoaXBfdCAgIHN3aXRjaF90eXBlOworICAgIHJ0a191aW50MzIgICAgICBsMnBfcG9ydFtSVEtfU1dJVENIX1BPUlRfTlVNXTsKKyAgICBydGtfdWludDMyICAgICAgcDJsX3BvcnRbUlRLX1NXSVRDSF9QT1JUX05VTV07CisgICAgcG9ydF90eXBlX3QgICAgIGxvZ19wb3J0X3R5cGVbUlRLX1NXSVRDSF9QT1JUX05VTV07CisgICAgcnRrX3VpbnQzMiAgICAgIHB0cF9wb3J0W1JUS19TV0lUQ0hfUE9SVF9OVU1dOworICAgIHJ0a191aW50MzIgICAgICB2YWxpZF9wb3J0bWFzazsKKyAgICBydGtfdWludDMyICAgICAgdmFsaWRfdXRwX3BvcnRtYXNrOworICAgIHJ0a191aW50MzIgICAgICB2YWxpZF9leHRfcG9ydG1hc2s7CisgICAgcnRrX3VpbnQzMiAgICAgIHZhbGlkX2NwdV9wb3J0bWFzazsKKyAgICBydGtfdWludDMyICAgICAgbWluX3BoeV9wb3J0OworICAgIHJ0a191aW50MzIgICAgICBtYXhfcGh5X3BvcnQ7CisgICAgcnRrX3VpbnQzMiAgICAgIHBoeV9wb3J0bWFzazsKKyAgICBydGtfdWludDMyICAgICAgY29tYm9fbG9naWNhbF9wb3J0OworICAgIHJ0a191aW50MzIgICAgICBoc2dfbG9naWNhbF9wb3J0OworICAgIHJ0a191aW50MzIgICAgICBzZ19sb2dpY2FsX3BvcnRtYXNrOworICAgIHJ0a191aW50MzIgICAgICBtYXhfbWV0ZXJfaWQ7CisgICAgcnRrX3VpbnQzMiAgICAgIG1heF9sdXRfYWRkcl9udW07CisgICAgcnRrX3VpbnQzMiAgICAgIHRydW5rX2dyb3VwX21hc2s7CisKK31ydGtfc3dpdGNoX2hhbEN0cmxfdDsKKwordHlwZWRlZiBlbnVtIHJ0a19zd2l0Y2hfbWF4UGt0TGVuX2xpbmtTcGVlZF9lIHsKKyAgICAgTUFYUEtUTEVOX0xJTktfU1BFRURfRkUgPSAwLAorICAgICBNQVhQS1RMRU5fTElOS19TUEVFRF9HRSwKKyAgICAgTUFYUEtUTEVOX0xJTktfU1BFRURfRU5ELAorfSBydGtfc3dpdGNoX21heFBrdExlbl9saW5rU3BlZWRfdDsKKworCisvKiBVVElMIE1BQ1JPICovCisjZGVmaW5lIFJUS19DSEtfSU5JVF9TVEFURSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKHJ0a19zd2l0Y2hfaW5pdGlhbFN0YXRlX2dldCgpICE9IElOSVRfQ09NUExFVEVEKSBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gUlRfRVJSX05PVF9JTklUOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfXdoaWxlKDApCisKKyNkZWZpbmUgUlRLX0NIS19QT1JUX1ZBTElEKF9fcG9ydF9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYocnRrX3N3aXRjaF9sb2dpY2FsUG9ydENoZWNrKF9fcG9ydF9fKSAhPSBSVF9FUlJfT0spICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfXdoaWxlKDApCisKKyNkZWZpbmUgUlRLX0NIS19QT1JUX0lTX1VUUChfX3BvcnRfXykgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYocnRrX3N3aXRjaF9pc1V0cFBvcnQoX19wb3J0X18pICE9IFJUX0VSUl9PSykgICAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfXdoaWxlKDApCisKKyNkZWZpbmUgUlRLX0NIS19QT1JUX0lTX0VYVChfX3BvcnRfXykgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYocnRrX3N3aXRjaF9pc0V4dFBvcnQoX19wb3J0X18pICE9IFJUX0VSUl9PSykgICAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfXdoaWxlKDApCisKKyNkZWZpbmUgUlRLX0NIS19QT1JUX0lTX0NPTUJPKF9fcG9ydF9fKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYocnRrX3N3aXRjaF9pc0NvbWJvUG9ydChfX3BvcnRfXykgIT0gUlRfRVJSX09LKSAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfXdoaWxlKDApCisKKyNkZWZpbmUgUlRLX0NIS19QT1JUX0lTX1BUUChfX3BvcnRfXykgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYocnRrX3N3aXRjaF9pc1B0cFBvcnQoX19wb3J0X18pICE9IFJUX0VSUl9PSykgICAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfXdoaWxlKDApCisKKyNkZWZpbmUgUlRLX0NIS19QT1JUTUFTS19WQUxJRChfX3BvcnRtYXNrX18pICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYocnRrX3N3aXRjaF9pc1BvcnRNYXNrVmFsaWQoX19wb3J0bWFza19fKSAhPSBSVF9FUlJfT0spICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfTUFTSzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH13aGlsZSgwKQorCisjZGVmaW5lIFJUS19DSEtfUE9SVE1BU0tfVkFMSURfT05MWV9VVFAoX19wb3J0bWFza19fKSAgICAgICAgICAgICAgIFwKKyAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmKHJ0a19zd2l0Y2hfaXNQb3J0TWFza1V0cChfX3BvcnRtYXNrX18pICE9IFJUX0VSUl9PSykgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX01BU0s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9d2hpbGUoMCkKKworI2RlZmluZSBSVEtfQ0hLX1BPUlRNQVNLX1ZBTElEX09OTFlfRVhUKF9fcG9ydG1hc2tfXykgICAgICAgICAgICAgICBcCisgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZihydGtfc3dpdGNoX2lzUG9ydE1hc2tFeHQoX19wb3J0bWFza19fKSAhPSBSVF9FUlJfT0spICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9NQVNLOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfXdoaWxlKDApCisKKyNkZWZpbmUgUlRLX0NIS19UUlVOS19HUk9VUF9WQUxJRChfX2dycElkX18pICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYocnRrX3N3aXRjaF9pc1ZhbGlkVHJ1bmtHcnBJZChfX2dycElkX18pICE9IFJUX0VSUl9PSykgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gUlRfRVJSX0xBX1RSVU5LX0lEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH13aGlsZSgwKQorCisjZGVmaW5lIFJUS19QT1JUTUFTS19JU19QT1JUX1NFVChfX3BvcnRtYXNrX18sIF9fcG9ydF9fKSAgICAoKChfX3BvcnRtYXNrX18pLmJpdHNbMF0gJiAoMHgwMDAwMDAwMSA8PCBfX3BvcnRfXykpID8gMSA6IDApCisjZGVmaW5lIFJUS19QT1JUTUFTS19JU19FTVBUWShfX3BvcnRtYXNrX18pICAgICAgICAgICAgICAgICAoKChfX3BvcnRtYXNrX18pLmJpdHNbMF0gPT0gMCkgPyAxIDogMCkKKyNkZWZpbmUgUlRLX1BPUlRNQVNLX0NMRUFSKF9fcG9ydG1hc2tfXykgICAgICAgICAgICAgICAgICAgICgoX19wb3J0bWFza19fKS5iaXRzWzBdID0gMCkKKyNkZWZpbmUgUlRLX1BPUlRNQVNLX1BPUlRfU0VUKF9fcG9ydG1hc2tfXywgX19wb3J0X18pICAgICAgICgoX19wb3J0bWFza19fKS5iaXRzWzBdIHw9ICgweDAwMDAwMDAxIDw8IF9fcG9ydF9fKSkKKyNkZWZpbmUgUlRLX1BPUlRNQVNLX1BPUlRfQ0xFQVIoX19wb3J0bWFza19fLCBfX3BvcnRfXykgICAgICgoX19wb3J0bWFza19fKS5iaXRzWzBdICY9IH4oMHgwMDAwMDAwMSA8PCBfX3BvcnRfXykpCisjZGVmaW5lIFJUS19QT1JUTUFTS19BTExQT1JUX1NFVChfX3BvcnRtYXNrX18pICAgICAgICAgICAgICAocnRrX3N3aXRjaF9sb2dQb3J0TWFza19nZXQoJl9fcG9ydG1hc2tfXykpCisjZGVmaW5lIFJUS19QT1JUTUFTS19TQ0FOKF9fcG9ydG1hc2tfXywgX19wb3J0X18pICAgICAgICAgICBmb3IoX19wb3J0X18gPSAwOyBfX3BvcnRfXyA8IFJUS19TV0lUQ0hfUE9SVF9OVU07IF9fcG9ydF9fKyspICBpZihSVEtfUE9SVE1BU0tfSVNfUE9SVF9TRVQoX19wb3J0bWFza19fLCBfX3BvcnRfXykpCisjZGVmaW5lIFJUS19QT1JUTUFTS19DT01QQVJFKF9fcG9ydG1hc2tfQV9fLCBfX3BvcnRtYXNrX0JfXykgICAgKChfX3BvcnRtYXNrX0FfXykuYml0c1swXSAtIChfX3BvcnRtYXNrX0JfXykuYml0c1swXSkKKworI2RlZmluZSBSVEtfU0NBTl9BTExfUEhZX1BPUlRNQVNLKF9fcG9ydF9fKSAgICAgICAgICAgICAgICAgZm9yKF9fcG9ydF9fID0gMDsgX19wb3J0X18gPCBSVEtfU1dJVENIX1BPUlRfTlVNOyBfX3BvcnRfXysrKSAgaWYoIChydGtfc3dpdGNoX3BoeVBvcnRNYXNrX2dldCgpICYgKDB4MDAwMDAwMDEgPDwgX19wb3J0X18pKSkKKyNkZWZpbmUgUlRLX1NDQU5fQUxMX0xPR19QT1JUKF9fcG9ydF9fKSAgICAgICAgICAgICAgICAgICAgIGZvcihfX3BvcnRfXyA9IDA7IF9fcG9ydF9fIDwgUlRLX1NXSVRDSF9QT1JUX05VTTsgX19wb3J0X18rKykgIGlmKCBydGtfc3dpdGNoX2xvZ2ljYWxQb3J0Q2hlY2soX19wb3J0X18pID09IFJUX0VSUl9PSykKKyNkZWZpbmUgUlRLX1NDQU5fQUxMX0xPR19QT1JUTUFTSyhfX3BvcnRtYXNrX18pICAgICAgICAgICAgIGZvcigoX19wb3J0bWFza19fKS5iaXRzWzBdID0gMDsgKF9fcG9ydG1hc2tfXykuYml0c1swXSA8IDB4N0ZGRkY7IChfX3BvcnRtYXNrX18pLmJpdHNbMF0rKykgIGlmKCBydGtfc3dpdGNoX2lzUG9ydE1hc2tWYWxpZCgmX19wb3J0bWFza19fKSA9PSBSVF9FUlJfT0spCisKKy8qIFBvcnQgbWFzayBkZWZpbmF0aW9uICovCisjZGVmaW5lIFJUS19QSFlfUE9SVE1BU0tfQUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnRrX3N3aXRjaF9waHlQb3J0TWFza19nZXQoKSkKKworLyogUG9ydCBkZWZpbmF0aW9uKi8KKyNkZWZpbmUgUlRLX01BWF9MT0dJQ0FMX1BPUlRfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydGtfc3dpdGNoX21heExvZ2ljYWxQb3J0X2dldCgpKQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3dpdGNoX3Byb2JlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgUHJvYmUgc3dpdGNoCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN3aXRjaCBwcm9iZWQKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgIC0gU3dpdGNoIFVucHJvYmVkLgorICogTm90ZToKKyAqCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19zd2l0Y2hfcHJvYmUoc3dpdGNoX2NoaXBfdCAqcFN3aXRjaENoaXApOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3dpdGNoX2luaXRpYWxTdGF0ZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgaW5pdGlhbCBzdGF0dXMKKyAqIElucHV0OgorICogICAgICBzdGF0ZSAgIC0gSW5pdGlhbCBzdGF0ZTsKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBJbml0aWFsaXplZAorICogICAgICBSVF9FUlJfRkFJTEVEICAgLSBVbmluaXRpYWxpemVkCisgKiBOb3RlOgorICoKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3N3aXRjaF9pbml0aWFsU3RhdGVfc2V0KGluaXRfc3RhdGVfdCBzdGF0ZSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zd2l0Y2hfaW5pdGlhbFN0YXRlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBpbml0aWFsIHN0YXR1cworICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBJTklUX0NPTVBMRVRFRCAgICAgLSBJbml0aWFsaXplZAorICogICAgICBJTklUX05PVF9DT01QTEVURUQgLSBVbmluaXRpYWxpemVkCisgKiBOb3RlOgorICoKKyAqLworZXh0ZXJuIGluaXRfc3RhdGVfdCBydGtfc3dpdGNoX2luaXRpYWxTdGF0ZV9nZXQodm9pZCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zd2l0Y2hfbG9naWNhbFBvcnRDaGVjaworICogRGVzY3JpcHRpb246CisgKiAgICAgIENoZWNrIGxvZ2ljYWwgcG9ydCBJRC4KKyAqIElucHV0OgorICogICAgICBsb2dpY2FsUG9ydCAgICAgLSBsb2dpY2FsIHBvcnQgSUQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBQb3J0IElEIGlzIGNvcnJlY3QKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgIC0gUG9ydCBJRCBpcyBub3QgY29ycmVjdAorICogICAgICBSVF9FUlJfTk9UX0lOSVQgLSBOb3QgSW5pdGlhbGl6ZQorICogTm90ZToKKyAqCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19zd2l0Y2hfbG9naWNhbFBvcnRDaGVjayhydGtfcG9ydF90IGxvZ2ljYWxQb3J0KTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N3aXRjaF9pc1V0cFBvcnQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBDaGVjayBpcyBsb2dpY2FsIHBvcnQgYSBVVFAgcG9ydAorICogSW5wdXQ6CisgKiAgICAgIGxvZ2ljYWxQb3J0ICAgICAtIGxvZ2ljYWwgcG9ydCBJRAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFBvcnQgSUQgaXMgYSBVVFAgcG9ydAorICogICAgICBSVF9FUlJfRkFJTEVEICAgLSBQb3J0IElEIGlzIG5vdCBhIFVUUCBwb3J0CisgKiAgICAgIFJUX0VSUl9OT1RfSU5JVCAtIE5vdCBJbml0aWFsaXplCisgKiBOb3RlOgorICoKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3N3aXRjaF9pc1V0cFBvcnQocnRrX3BvcnRfdCBsb2dpY2FsUG9ydCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zd2l0Y2hfaXNFeHRQb3J0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQ2hlY2sgaXMgbG9naWNhbCBwb3J0IGEgRXh0ZW5zaW9uIHBvcnQKKyAqIElucHV0OgorICogICAgICBsb2dpY2FsUG9ydCAgICAgLSBsb2dpY2FsIHBvcnQgSUQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBQb3J0IElEIGlzIGEgRVhUIHBvcnQKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgIC0gUG9ydCBJRCBpcyBub3QgYSBFWFQgcG9ydAorICogICAgICBSVF9FUlJfTk9UX0lOSVQgLSBOb3QgSW5pdGlhbGl6ZQorICogTm90ZToKKyAqCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19zd2l0Y2hfaXNFeHRQb3J0KHJ0a19wb3J0X3QgbG9naWNhbFBvcnQpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3dpdGNoX2lzSHNnUG9ydAorICogRGVzY3JpcHRpb246CisgKiAgICAgIENoZWNrIGlzIGxvZ2ljYWwgcG9ydCBhIEhTRyBwb3J0CisgKiBJbnB1dDoKKyAqICAgICAgbG9naWNhbFBvcnQgICAgIC0gbG9naWNhbCBwb3J0IElECisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gUG9ydCBJRCBpcyBhIEhTRyBwb3J0CisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAtIFBvcnQgSUQgaXMgbm90IGEgSFNHIHBvcnQKKyAqICAgICAgUlRfRVJSX05PVF9JTklUIC0gTm90IEluaXRpYWxpemUKKyAqIE5vdGU6CisgKgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfc3dpdGNoX2lzSHNnUG9ydChydGtfcG9ydF90IGxvZ2ljYWxQb3J0KTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N3aXRjaF9pc1NnbWlpUG9ydAorICogRGVzY3JpcHRpb246CisgKiAgICAgIENoZWNrIGlzIGxvZ2ljYWwgcG9ydCBhIFNHTUlJIHBvcnQKKyAqIElucHV0OgorICogICAgICBsb2dpY2FsUG9ydCAgICAgLSBsb2dpY2FsIHBvcnQgSUQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBQb3J0IElEIGlzIGEgU0dNSUkgcG9ydAorICogICAgICBSVF9FUlJfRkFJTEVEICAgLSBQb3J0IElEIGlzIG5vdCBhIFNHTUlJIHBvcnQKKyAqICAgICAgUlRfRVJSX05PVF9JTklUIC0gTm90IEluaXRpYWxpemUKKyAqIE5vdGU6CisgKgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfc3dpdGNoX2lzU2dtaWlQb3J0KHJ0a19wb3J0X3QgbG9naWNhbFBvcnQpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3dpdGNoX2lzQ1BVUG9ydAorICogRGVzY3JpcHRpb246CisgKiAgICAgIENoZWNrIGlzIGxvZ2ljYWwgcG9ydCBhIENQVSBwb3J0CisgKiBJbnB1dDoKKyAqICAgICAgbG9naWNhbFBvcnQgICAgIC0gbG9naWNhbCBwb3J0IElECisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gUG9ydCBJRCBpcyBhIENQVSBwb3J0CisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAtIFBvcnQgSUQgaXMgbm90IGEgQ1BVIHBvcnQKKyAqICAgICAgUlRfRVJSX05PVF9JTklUIC0gTm90IEluaXRpYWxpemUKKyAqIE5vdGU6CisgKgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfc3dpdGNoX2lzQ1BVUG9ydChydGtfcG9ydF90IGxvZ2ljYWxQb3J0KTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N3aXRjaF9pc0NvbWJvUG9ydAorICogRGVzY3JpcHRpb246CisgKiAgICAgIENoZWNrIGlzIGxvZ2ljYWwgcG9ydCBhIENvbWJvIHBvcnQKKyAqIElucHV0OgorICogICAgICBsb2dpY2FsUG9ydCAgICAgLSBsb2dpY2FsIHBvcnQgSUQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBQb3J0IElEIGlzIGEgY29tYm8gcG9ydAorICogICAgICBSVF9FUlJfRkFJTEVEICAgLSBQb3J0IElEIGlzIG5vdCBhIGNvbWJvIHBvcnQKKyAqICAgICAgUlRfRVJSX05PVF9JTklUIC0gTm90IEluaXRpYWxpemUKKyAqIE5vdGU6CisgKgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfc3dpdGNoX2lzQ29tYm9Qb3J0KHJ0a19wb3J0X3QgbG9naWNhbFBvcnQpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3dpdGNoX0NvbWJvUG9ydF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgQ29tYm8gcG9ydCBJRAorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBQb3J0IElEIG9mIGNvbWJvIHBvcnQKKyAqIE5vdGU6CisgKgorICovCitleHRlcm4gcnRrX3VpbnQzMiBydGtfc3dpdGNoX0NvbWJvUG9ydF9nZXQodm9pZCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zd2l0Y2hfaXNQdHBQb3J0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQ2hlY2sgaXMgbG9naWNhbCBwb3J0IGEgUFRQIHBvcnQKKyAqIElucHV0OgorICogICAgICBsb2dpY2FsUG9ydCAgICAgLSBsb2dpY2FsIHBvcnQgSUQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBQb3J0IElEIGlzIGEgUFRQIHBvcnQKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgIC0gUG9ydCBJRCBpcyBub3QgYSBQVFAgcG9ydAorICogICAgICBSVF9FUlJfTk9UX0lOSVQgLSBOb3QgSW5pdGlhbGl6ZQorICogTm90ZToKKyAqCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19zd2l0Y2hfaXNQdHBQb3J0KHJ0a19wb3J0X3QgbG9naWNhbFBvcnQpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3dpdGNoX3BvcnRfTDJQX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwaHlzaWNhbCBwb3J0IElECisgKiBJbnB1dDoKKyAqICAgICAgbG9naWNhbFBvcnQgICAgICAgLSBsb2dpY2FsIHBvcnQgSUQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBQaHlzaWNhbCBwb3J0IElECisgKiBOb3RlOgorICoKKyAqLworZXh0ZXJuIHJ0a191aW50MzIgcnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocnRrX3BvcnRfdCBsb2dpY2FsUG9ydCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zd2l0Y2hfcG9ydF9QMkxfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGxvZ2ljYWwgcG9ydCBJRAorICogSW5wdXQ6CisgKiAgICAgIHBoeXNpY2FsUG9ydCAgICAgICAtIHBoeXNpY2FsIHBvcnQgSUQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBsb2dpY2FsIHBvcnQgSUQKKyAqIE5vdGU6CisgKgorICovCitleHRlcm4gcnRrX3BvcnRfdCBydGtfc3dpdGNoX3BvcnRfUDJMX2dldChydGtfdWludDMyIHBoeXNpY2FsUG9ydCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zd2l0Y2hfaXNQb3J0TWFza1ZhbGlkCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQ2hlY2sgcG9ydG1hc2sgaXMgdmFsaWQgb3Igbm90CisgKiBJbnB1dDoKKyAqICAgICAgcFBtYXNrICAgICAgIC0gbG9naWNhbCBwb3J0IG1hc2sKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gcG9ydCBtYXNrIGlzIHZhbGlkCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBwb3J0IG1hc2sgaXMgbm90IHZhbGlkCisgKiAgICAgIFJUX0VSUl9OT1RfSU5JVCAgICAgLSBOb3QgSW5pdGlhbGl6ZQorICogICAgICBSVF9FUlJfTlVMTF9QT0lOVEVSIC0gTnVsbCBwb2ludGVyCisgKiBOb3RlOgorICoKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3N3aXRjaF9pc1BvcnRNYXNrVmFsaWQocnRrX3BvcnRtYXNrX3QgKnBQbWFzayk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zd2l0Y2hfaXNQb3J0TWFza1V0cAorICogRGVzY3JpcHRpb246CisgKiAgICAgIENoZWNrIGFsbCBwb3J0cyBpbiBwb3J0bWFzayBhcmUgb25seSBVVFAgcG9ydAorICogSW5wdXQ6CisgKiAgICAgIHBQbWFzayAgICAgICAtIGxvZ2ljYWwgcG9ydCBtYXNrCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9ubHkgVVRQIHBvcnQgaW4gcG9ydCBtYXNrCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBOb3Qgb25seSBVVFAgcG9ydCBpbiBwb3J0IG1hc2sKKyAqICAgICAgUlRfRVJSX05PVF9JTklUICAgICAtIE5vdCBJbml0aWFsaXplCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgLSBOdWxsIHBvaW50ZXIKKyAqIE5vdGU6CisgKgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfc3dpdGNoX2lzUG9ydE1hc2tVdHAocnRrX3BvcnRtYXNrX3QgKnBQbWFzayk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zd2l0Y2hfaXNQb3J0TWFza0V4dAorICogRGVzY3JpcHRpb246CisgKiAgICAgIENoZWNrIGFsbCBwb3J0cyBpbiBwb3J0bWFzayBhcmUgb25seSBFWFQgcG9ydAorICogSW5wdXQ6CisgKiAgICAgIHBQbWFzayAgICAgICAtIGxvZ2ljYWwgcG9ydCBtYXNrCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9ubHkgRVhUIHBvcnQgaW4gcG9ydCBtYXNrCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBOb3Qgb25seSBFWFQgcG9ydCBpbiBwb3J0IG1hc2sKKyAqICAgICAgUlRfRVJSX05PVF9JTklUICAgICAtIE5vdCBJbml0aWFsaXplCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgLSBOdWxsIHBvaW50ZXIKKyAqIE5vdGU6CisgKgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfc3dpdGNoX2lzUG9ydE1hc2tFeHQocnRrX3BvcnRtYXNrX3QgKnBQbWFzayk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zd2l0Y2hfcG9ydG1hc2tfTDJQX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwaHlzaWNsIHBvcnRtYXNrIGZyb20gbG9naWNhbCBwb3J0bWFzaworICogSW5wdXQ6CisgKiAgICAgIHBMb2dpY2FsUG1hc2sgICAgICAgLSBsb2dpY2FsIHBvcnQgbWFzaworICogT3V0cHV0OgorICogICAgICBwUGh5c2ljYWxQb3J0bWFzayAgIC0gcGh5c2ljYWwgcG9ydCBtYXNrCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfTk9UX0lOSVQgICAgIC0gTm90IEluaXRpYWxpemUKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAtIE51bGwgcG9pbnRlcgorICogICAgICBSVF9FUlJfUE9SVF9NQVNLICAgIC0gRXJyb3IgcG9ydCBtYXNrCisgKiBOb3RlOgorICoKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3N3aXRjaF9wb3J0bWFza19MMlBfZ2V0KHJ0a19wb3J0bWFza190ICpwTG9naWNhbFBtYXNrLCBydGtfdWludDMyICpwUGh5c2ljYWxQb3J0bWFzayk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zd2l0Y2hfcG9ydG1hc2tfUDJMX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBsb2dpY2FsIHBvcnRtYXNrIGZyb20gcGh5c2ljYWwgcG9ydG1hc2sKKyAqIElucHV0OgorICogICAgICBwaHlzaWNhbFBvcnRtYXNrICAgIC0gcGh5c2ljYWwgcG9ydCBtYXNrCisgKiBPdXRwdXQ6CisgKiAgICAgIHBMb2dpY2FsUG1hc2sgICAgICAgLSBsb2dpY2FsIHBvcnQgbWFzaworICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX05PVF9JTklUICAgICAtIE5vdCBJbml0aWFsaXplCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgLSBOdWxsIHBvaW50ZXIKKyAqICAgICAgUlRfRVJSX1BPUlRfTUFTSyAgICAtIEVycm9yIHBvcnQgbWFzaworICogTm90ZToKKyAqCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19zd2l0Y2hfcG9ydG1hc2tfUDJMX2dldChydGtfdWludDMyIHBoeXNpY2FsUG9ydG1hc2ssIHJ0a19wb3J0bWFza190ICpwTG9naWNhbFBtYXNrKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N3aXRjaF9waHlQb3J0TWFza19nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcGh5c2ljYWwgcG9ydG1hc2sKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgMHgwMCAgICAgICAgICAgICAgICAtIE5vdCBJbml0aWFsaXplCisgKiAgICAgIE90aGVyIHZhbHVlICAgICAgICAgLSBQaHlzaWNhbCBwb3J0IG1hc2sKKyAqIE5vdGU6CisgKgorICovCitydGtfdWludDMyIHJ0a19zd2l0Y2hfcGh5UG9ydE1hc2tfZ2V0KHZvaWQpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3dpdGNoX2xvZ1BvcnRNYXNrX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBMb2dpY2FsIHBvcnRtYXNrCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfTk9UX0lOSVQgICAgIC0gTm90IEluaXRpYWxpemUKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAtIE51bGwgcG9pbnRlcgorICogTm90ZToKKyAqCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3N3aXRjaF9sb2dQb3J0TWFza19nZXQocnRrX3BvcnRtYXNrX3QgKnBQb3J0bWFzayk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zd2l0Y2hfaW5pdAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBjaGlwIHRvIGRlZmF1bHQgY29uZmlndXJhdGlvbiBlbnZpcm9tZW50CisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBzZXQgY2hpcCByZWdpc3RlcnMgdG8gZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciBkaWZmZXJlbnQgcmVsZWFzZSBjaGlwIG1vZGVsLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfc3dpdGNoX2luaXQodm9pZCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zd2l0Y2hfcG9ydE1heFBrdExlbl9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgTWF4IHBhY2tldCBsZW5ndGgKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUG9ydCBJRAorICogICAgICBzcGVlZCAgIC0gU3BlZWQKKyAqICAgICAgY2ZnSWQgICAtIENvbmZpZ3VyYXRpb24gSUQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEVycm9yIElucHV0CisgKiBOb3RlOgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfc3dpdGNoX3BvcnRNYXhQa3RMZW5fc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3N3aXRjaF9tYXhQa3RMZW5fbGlua1NwZWVkX3Qgc3BlZWQsIHJ0a191aW50MzIgY2ZnSWQpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3dpdGNoX3BvcnRNYXhQa3RMZW5fZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IE1heCBwYWNrZXQgbGVuZ3RoCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIFBvcnQgSUQKKyAqICAgICAgc3BlZWQgICAtIFNwZWVkCisgKiBPdXRwdXQ6CisgKiAgICAgIHBDZmdJZCAgLSBDb25maWd1cmF0aW9uIElECisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBFcnJvciBJbnB1dAorICogTm90ZToKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3N3aXRjaF9wb3J0TWF4UGt0TGVuX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19zd2l0Y2hfbWF4UGt0TGVuX2xpbmtTcGVlZF90IHNwZWVkLCBydGtfdWludDMyICpwQ2ZnSWQpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3dpdGNoX21heFBrdExlbkNmZ19zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgTWF4IHBhY2tldCBsZW5ndGggY29uZmlndXJhdGlvbgorICogSW5wdXQ6CisgKiAgICAgIGNmZ0lkICAgLSBDb25maWd1cmF0aW9uIElECisgKiAgICAgIHBrdExlbiAgLSBNYXggcGFja2V0IGxlbmd0aAorICogT3V0cHV0OgorICogICAgICBOb25lLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gRXJyb3IgSW5wdXQKKyAqIE5vdGU6CisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19zd2l0Y2hfbWF4UGt0TGVuQ2ZnX3NldChydGtfdWludDMyIGNmZ0lkLCBydGtfdWludDMyIHBrdExlbik7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zd2l0Y2hfbWF4UGt0TGVuQ2ZnX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBNYXggcGFja2V0IGxlbmd0aCBjb25maWd1cmF0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgY2ZnSWQgICAtIENvbmZpZ3VyYXRpb24gSUQKKyAqICAgICAgcFBrdExlbiAtIE1heCBwYWNrZXQgbGVuZ3RoCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBFcnJvciBJbnB1dAorICogTm90ZToKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3N3aXRjaF9tYXhQa3RMZW5DZmdfZ2V0KHJ0a191aW50MzIgY2ZnSWQsIHJ0a191aW50MzIgKnBQa3RMZW4pOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3dpdGNoX2dyZWVuRXRoZXJuZXRfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IGFsbCBQb3J0cyBHcmVlbiBFdGhlcm5ldCBzdGF0ZS4KKyAqIElucHV0OgorICogICAgICBlbmFibGUgLSBHcmVlbiBFdGhlcm5ldCBzdGF0ZS4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfRU5BQkxFICAgLSBJbnZhbGlkIGVuYWJsZSBpbnB1dC4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBzZXQgYWxsIFBvcnRzIEdyZWVuIEV0aGVybmV0IHN0YXRlLgorICogICAgICBUaGUgY29uZmlndXJhdGlvbiBpcyBhcyBmb2xsb3dpbmc6CisgKiAgICAgIC0gRElTQUJMRQorICogICAgICAtIEVOQUJMRQorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfc3dpdGNoX2dyZWVuRXRoZXJuZXRfc2V0KHJ0a19lbmFibGVfdCBlbmFibGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3dpdGNoX2dyZWVuRXRoZXJuZXRfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGFsbCBQb3J0cyBHcmVlbiBFdGhlcm5ldCBzdGF0ZS4KKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBFbmFibGUgLSBHcmVlbiBFdGhlcm5ldCBzdGF0ZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBnZXQgR3JlZW4gRXRoZXJuZXQgc3RhdGUuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19zd2l0Y2hfZ3JlZW5FdGhlcm5ldF9nZXQocnRrX2VuYWJsZV90ICpwRW5hYmxlKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N3aXRjaF9tYXhMb2dpY2FsUG9ydF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgTWF4IGxvZ2ljYWwgcG9ydCBJRAorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBNYXggbG9naWNhbCBwb3J0CisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBjYW4gZ2V0IG1heCBsb2dpY2FsIHBvcnQKKyAqLworZXh0ZXJuIHJ0a19wb3J0X3QgcnRrX3N3aXRjaF9tYXhMb2dpY2FsUG9ydF9nZXQodm9pZCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zd2l0Y2hfbWF4TWV0ZXJJZF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgTWF4IE1ldGVyIElECisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIDB4MDAgICAgICAgICAgICAgICAgLSBOb3QgSW5pdGlhbGl6ZQorICogICAgICBPdGhlciB2YWx1ZSAgICAgICAgIC0gTWF4IE1ldGVyIElECisgKiBOb3RlOgorICoKKyAqLworZXh0ZXJuIHJ0a191aW50MzIgcnRrX3N3aXRjaF9tYXhNZXRlcklkX2dldCh2b2lkKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N3aXRjaF9tYXhMdXRBZGRyTnVtYmVyX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBNYXggTFVUIEFkZHJlc3MgbnVtYmVyCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIDB4MDAgICAgICAgICAgICAgICAgLSBOb3QgSW5pdGlhbGl6ZQorICogICAgICBPdGhlciB2YWx1ZSAgICAgICAgIC0gTWF4IExVVCBBZGRyZXNzIG51bWJlcgorICogTm90ZToKKyAqCisgKi8KK2V4dGVybiBydGtfdWludDMyIHJ0a19zd2l0Y2hfbWF4THV0QWRkck51bWJlcl9nZXQodm9pZCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zd2l0Y2hfaXNWYWxpZFRydW5rR3JwSWQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBDaGVjayBpZiB0cnVuayBncm91cCBpcyB2YWxpZCBvciBub3QKKyAqIElucHV0OgorICogICAgICBncnBJZCAgICAgICAtIEdyb3VwIElECisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFRydW5rIEdyb3VwIElEIGlzIHZhbGlkCisgKiAgICAgIFJUX0VSUl9MQV9UUlVOS19JRCAgLSBUcnVuayBHcm91cCBJRCBpcyBub3QgdmFsaWQKKyAqIE5vdGU6CisgKgorICovCitydGtfdWludDMyIHJ0a19zd2l0Y2hfaXNWYWxpZFRydW5rR3JwSWQocnRrX3VpbnQzMiBncnBJZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRrX3R5cGVzLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGtfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODllY2I3Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRrX3R5cGVzLmgKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogJFJldmlzaW9uOiA3NjMwNiAkCisgKiAkRGF0ZTogMjAxNy0wMy0wOCAxNToxMzo1OCArMDgwMCAotmekVCwgMDggpFSk6yAyMDE3KSAkCisgKgorICogUHVycG9zZSA6IFJUTDgzNjdDIHN3aXRjaCBoaWdoLWxldmVsIHR5cGUgZW51bSBkZWZpbml0aW9uLgorICogRmVhdHVyZSA6CisgKgorICovCisKKyNpZm5kZWYgX1JUTDgzNjdDX1RZUEVTX0hfCisjZGVmaW5lIF9SVEw4MzY3Q19UWVBFU19IXworCisvLyNpbmNsdWRlIDxzdGRpby5oPgorCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyAgICAgIHJ0a191aW50NjQ7Cit0eXBlZGVmIGxvbmcgbG9uZyAgICAgICAgICAgICAgIHJ0a19pbnQ2NDsKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgICAgICAgcnRrX3VpbnQzMjsKK3R5cGVkZWYgaW50ICAgICAgICAgICAgICAgICAgICAgcnRrX2ludDMyOwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgICAgICAgICBydGtfdWludDE2OwordHlwZWRlZiBzaG9ydCAgICAgICAgICAgICAgICAgICBydGtfaW50MTY7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICAgICAgICAgIHJ0a191aW50ODsKK3R5cGVkZWYgY2hhciAgICAgICAgICAgICAgICAgICAgcnRrX2ludDg7CisKKyNkZWZpbmUgQ09OU1RfVCAgICAgY29uc3QKKworI2RlZmluZSBSVEtfVE9UQUxfTlVNX09GX1dPUkRfRk9SXzFCSVRfUE9SVF9MSVNUICAgIDEKKworI2RlZmluZSBSVEtfTUFYX05VTV9PRl9QT1JUICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgUlRLX1BPUlRfSURfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUlRLX01BWF9OVU1fT0ZfUE9SVC0xKQorI2RlZmluZSBSVEtfUEhZX0lEX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSVEtfTUFYX05VTV9PRl9QT1JULTQpCisjZGVmaW5lIFJUS19NQVhfUE9SVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRgorCisjZGVmaW5lIFJUS19XSE9MRV9TWVNURU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRgorCit0eXBlZGVmIHN0cnVjdCBydGtfcG9ydG1hc2tfcworeworICAgIHJ0a191aW50MzIgIGJpdHNbUlRLX1RPVEFMX05VTV9PRl9XT1JEX0ZPUl8xQklUX1BPUlRfTElTVF07Cit9IHJ0a19wb3J0bWFza190OworCit0eXBlZGVmIGVudW0gcnRrX2VuYWJsZV9lCit7CisgICAgRElTQUJMRUQgPSAwLAorICAgIEVOQUJMRUQsCisgICAgUlRLX0VOQUJMRV9FTkQKK30gcnRrX2VuYWJsZV90OworCisjaWZuZGVmIEVUSEVSX0FERFJfTEVOCisjZGVmaW5lIEVUSEVSX0FERFJfTEVOICAgICAgNgorI2VuZGlmCisKKy8qIGV0aGVybmV0IGFkZHJlc3MgdHlwZSAqLwordHlwZWRlZiBzdHJ1Y3QgIHJ0a19tYWNfcworeworICAgIHJ0a191aW50OCBvY3RldFtFVEhFUl9BRERSX0xFTl07Cit9IHJ0a19tYWNfdDsKKwordHlwZWRlZiBydGtfdWludDMyICBydGtfcHJpX3Q7ICAgICAgLyogcHJpb3JpdHkgdmxhdWUgKi8KK3R5cGVkZWYgcnRrX3VpbnQzMiAgcnRrX3FpZF90OyAgICAgIC8qIHF1ZXVlIGlkIHR5cGUgKi8KK3R5cGVkZWYgcnRrX3VpbnQzMiAgcnRrX2RhdGFfdDsKK3R5cGVkZWYgcnRrX3VpbnQzMiAgcnRrX2RzY3BfdDsgICAgIC8qIGRzY3AgdmxhdWUgKi8KK3R5cGVkZWYgcnRrX3VpbnQzMiAgcnRrX2ZpZF90OyAgICAgIC8qIGZpbHRlciBpZCB0eXBlICovCit0eXBlZGVmIHJ0a191aW50MzIgIHJ0a192bGFuX3Q7ICAgICAvKiB2bGFuIGlkIHR5cGUgKi8KK3R5cGVkZWYgcnRrX3VpbnQzMiAgcnRrX21hY19jbnRfdDsgIC8qIE1BQyBjb3VudCB0eXBlICAqLwordHlwZWRlZiBydGtfdWludDMyICBydGtfbWV0ZXJfaWRfdDsgLyogbWV0ZXIgaWQgdHlwZSAgKi8KK3R5cGVkZWYgcnRrX3VpbnQzMiAgcnRrX3JhdGVfdDsgICAgIC8qIHJhdGUgdHlwZSAgKi8KKwordHlwZWRlZiBlbnVtIHJ0a19wb3J0X2UKK3sKKyAgICBVVFBfUE9SVDAgPSAwLAorICAgIFVUUF9QT1JUMSwKKyAgICBVVFBfUE9SVDIsCisgICAgVVRQX1BPUlQzLAorICAgIFVUUF9QT1JUNCwKKyAgICBVVFBfUE9SVDUsCisgICAgVVRQX1BPUlQ2LAorICAgIFVUUF9QT1JUNywKKworICAgIEVYVF9QT1JUMCA9IDE2LAorICAgIEVYVF9QT1JUMSwKKyAgICBFWFRfUE9SVDIsCisKKyAgICBVTkRFRklORV9QT1JUID0gMzAsCisgICAgUlRLX1BPUlRfTUFYID0gMzEKK30gcnRrX3BvcnRfdDsKKworCisjaWZuZGVmIF9SVExfVFlQRVNfSAorCisjaWYgMAordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgICAgICB1aW50NjQ7Cit0eXBlZGVmIGxvbmcgbG9uZyAgICAgICAgICAgICAgIGludDY0OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgICAgICAgICB1aW50MzI7Cit0eXBlZGVmIGludCAgICAgICAgICAgICAgICAgICAgIGludDMyOwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgICAgICAgICB1aW50MTY7Cit0eXBlZGVmIHNob3J0ICAgICAgICAgICAgICAgICAgIGludDE2OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyICAgICAgICAgICB1aW50ODsKK3R5cGVkZWYgY2hhciAgICAgICAgICAgICAgICAgICAgaW50ODsKKyNlbmRpZgorCit0eXBlZGVmIHJ0a191aW50MzIgICAgICAgICAgICAgICAgICBpcGFkZHJfdDsKK3R5cGVkZWYgcnRrX3VpbnQzMiAgICAgICAgICAgICAgICAgIG1lbWFkZHI7CisKKyNpZm5kZWYgRVRIRVJfQUREUl9MRU4KKyNkZWZpbmUgRVRIRVJfQUREUl9MRU4gICAgICA2CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgZXRoZXJfYWRkcl9zIHsKKyAgICBydGtfdWludDggb2N0ZXRbRVRIRVJfQUREUl9MRU5dOworfSBldGhlcl9hZGRyX3Q7CisKKyNpZmRlZiBfX0tFUk5FTF9fCisjZGVmaW5lIHJ0bGdsdWVfcHJpbnRmIHByaW50aworI2Vsc2UKKyNkZWZpbmUgcnRsZ2x1ZV9wcmludGYgcHJpbnRmCisjZW5kaWYKKyNkZWZpbmUgUFJJTlQgICAgICAgICAgIHJ0bGdsdWVfcHJpbnRmCisjZW5kaWYgLypfUlRMX1RZUEVTX0gqLworCisvKiB0eXBlIGFic3RyYWN0aW9uICovCisjaWZkZWYgRU1CRURERURfU1VQUE9SVAorCit0eXBlZGVmIHJ0a19pbnQxNiAgICAgICAgICAgICAgICAgICBydGtfYXBpX3JldF90OwordHlwZWRlZiBydGtfaW50MTYgICAgICAgICAgICAgICAgICAgcmV0X3Q7Cit0eXBlZGVmIHJ0a191aW50MzIgICAgICAgICAgICAgICAgICBydGtfdV9sb25nOworCisjZWxzZQorCit0eXBlZGVmIHJ0a19pbnQzMiAgICAgICAgICAgICAgICAgICBydGtfYXBpX3JldF90OwordHlwZWRlZiBydGtfaW50MzIgICAgICAgICAgICAgICAgICAgcmV0X3Q7Cit0eXBlZGVmIHJ0a191aW50NjQgICAgICAgICAgICAgICAgICBydGtfdV9sb25nX3Q7CisKKyNlbmRpZgorCisjaWZuZGVmIE5VTEwKKyNkZWZpbmUgTlVMTCAwCisjZW5kaWYKKworI2lmbmRlZiBUUlVFCisjZGVmaW5lIFRSVUUgMQorI2VuZGlmCisKKyNpZm5kZWYgRkFMU0UKKyNkZWZpbmUgRkFMU0UgMAorI2VuZGlmCisKKyNkZWZpbmUgQ09OU1QgICAgICAgICAgIGNvbnN0CisjZW5kaWYgLyogX1JUTDgzNjdDX1RZUEVTX0hfICovCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGw4MzY3Y19hc2ljZHJ2LmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGw4MzY3Y19hc2ljZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVjYjQxYgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX2FzaWNkcnYuaApAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiAkUmV2aXNpb246IDc2MzA2ICQKKyAqICREYXRlOiAyMDE3LTAzLTA4IDE1OjEzOjU4ICswODAwICi2Z6RULCAwOCCkVKTrIDIwMTcpICQKKyAqCisgKiBQdXJwb3NlIDogUlRMODM2N0Mgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJIGZvciBSVEw4MzY3QworICogRmVhdHVyZSA6CisgKgorICovCisKKworI2lmbmRlZiBfUlRMODM2N0NfQVNJQ0RSVl9IXworI2RlZmluZSBfUlRMODM2N0NfQVNJQ0RSVl9IXworCisjaW5jbHVkZSA8cnRrX3R5cGVzLmg+CisjaW5jbHVkZSA8cnRrX2Vycm9yLmg+CisjaW5jbHVkZSA8cnRsODM2N2NfcmVnLmg+CisjaW5jbHVkZSA8cnRsODM2N2NfYmFzZS5oPgorCisjZGVmaW5lIFJUTDgzNjdDX1JFR0JJVExFTkdUSCAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIFJUTDgzNjdDX1JFR0RBVEFNQVggICAgICAgICAgICAgICAgIDB4RkZGRgorCisjZGVmaW5lIFJUTDgzNjdDX1ZJRE1BWCAgICAgICAgICAgICAgICAgICAgIDB4RkZGCisjZGVmaW5lIFJUTDgzNjdDX0VWSURNQVggICAgICAgICAgICAgICAgICAgIDB4MUZGRgorI2RlZmluZSBSVEw4MzY3Q19DVklEWE5PICAgICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBSVEw4MzY3Q19DVklEWE1BWCAgICAgICAgICAgICAgICAgICAoUlRMODM2N0NfQ1ZJRFhOTy0xKQorCisjZGVmaW5lIFJUTDgzNjdDX1BSSU1BWCAgICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgUlRMODM2N0NfRFNDUE1BWCAgICAgICAgICAgICAgICAgICAgNjMKKworI2RlZmluZSBSVEw4MzY3Q19QT1JUTk8gICAgICAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBSVEw4MzY3Q19QT1JUSURNQVggICAgICAgICAgICAgICAgICAoUlRMODM2N0NfUE9SVE5PLTEpCisjZGVmaW5lIFJUTDgzNjdDX1BNU0tNQVggICAgICAgICAgICAgICAgICAgICgoMTw8KFJUTDgzNjdDX1BPUlROTykpLTEpCisjZGVmaW5lIFJUTDgzNjdDX1BPUlRNQVNLICAgICAgICAgICAgICAgICAgIDB4N0ZGCisKKyNkZWZpbmUgUlRMODM2N0NfUEhZTk8gICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBSVEw4MzY3Q19QSFlJRE1BWCAgICAgICAgICAgICAgICAgIChSVEw4MzY3Q19QSFlOTy0xKQorCisjZGVmaW5lIFJUTDgzNjdDX1NWSURYTk8gICAgICAgICAgICAgICAgICAgIDY0CisjZGVmaW5lIFJUTDgzNjdDX1NWSURYTUFYICAgICAgICAgICAgICAgICAgIChSVEw4MzY3Q19TVklEWE5PLTEpCisjZGVmaW5lIFJUTDgzNjdDX01TVElNQVggICAgICAgICAgICAgICAgICAgIDE1CisKKyNkZWZpbmUgUlRMODM2N0NfTUVURVJOTyAgICAgICAgICAgICAgICAgICAgNjQKKyNkZWZpbmUgUlRMODM2N0NfTUVURVJNQVggICAgICAgICAgICAgICAgICAgKFJUTDgzNjdDX01FVEVSTk8tMSkKKyNkZWZpbmUgUlRMODM2N0NfTUVURVJCVUNLRVRTSVpFTUFYICAgICAgICAgMHhGRkZGCisKKyNkZWZpbmUgUlRMODM2N0NfUVVFVUVOTyAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBSVEw4MzY3Q19RSURNQVggICAgICAgICAgICAgICAgICAgICAoUlRMODM2N0NfUVVFVUVOTy0xKQorCisjZGVmaW5lIFJUTDgzNjdDX1BIWV9CVVNZX0NIRUNLX0NPVU5URVIgICAgIDEwMDAKKworI2RlZmluZSBSVEw4MzY3Q19RT1NfR1JBTlVMQVJUWV9NQVggICAgICAgICAweDdGRkZGCisjZGVmaW5lIFJUTDgzNjdDX1FPU19HUkFOVUxBUlRZX0xTQl9NQVNLICAgIDB4RkZGRgorI2RlZmluZSBSVEw4MzY3Q19RT1NfR1JBTlVMQVJUWV9MU0JfT0ZGU0VUICAwCisjZGVmaW5lIFJUTDgzNjdDX1FPU19HUkFOVUxBUlRZX01TQl9NQVNLICAgIDB4NzAwMDAKKyNkZWZpbmUgUlRMODM2N0NfUU9TX0dSQU5VTEFSVFlfTVNCX09GRlNFVCAgMTYKKworI2RlZmluZSBSVEw4MzY3Q19RT1NfR1JBTlVMQVJUWV9VTklUX0tCUFMgICA4CisKKyNkZWZpbmUgUlRMODM2N0NfUU9TX1JBVEVfSU5QVVRfTUFYICAgICAgICAgKDB4MUZGRkYgKiA4KQorI2RlZmluZSBSVEw4MzY3Q19RT1NfUkFURV9JTlBVVF9NQVhfSFNHICAgICAoMHg3RkZGRiAqIDgpCisjZGVmaW5lIFJUTDgzNjdDX1FPU19SQVRFX0lOUFVUX01JTiAgICAgICAgIDgKKyNkZWZpbmUgUlRMODM2N0NfUU9TX1BQU19JTlBVVF9NQVggICAgICAgICAgKDB4N0ZGRkYpCisjZGVmaW5lIFJUTDgzNjdDX1FPU19QUFNfSU5QVVRfTUlOICAgICAgICAgIDEKKworI2RlZmluZSBSVEw4MzY3Q19RVUVVRV9NQVNLICAgICAgICAgICAgICAgICAweEZGCisKKyNkZWZpbmUgUlRMODM2N0NfRUZJRE1BWCAgICAgICAgICAgICAgICAgICAgMHg3CisjZGVmaW5lIFJUTDgzNjdDX0ZJRE1BWCAgICAgICAgICAgICAgICAgICAgIDB4RgorCisjZGVmaW5lIFJUTDgzNjdDX0VBVl9TRUNPTkRNQVggICAgICAgICAgICAgICAgICAweEZGRkZGRkZGCisjZGVmaW5lIFJUTDgzNjdDX0VBVl9OQU5PU0VDT05ETUFYICAgICAgICAgIDB4M0I5QUM5RkYKKworCisvKiB0aGUgYWJvdmUgbWFjcm8gaXMgZ2VuZXJhdGVkIGJ5IGdlbkRvdEggKi8KKyNkZWZpbmUgUlRMODM2N0NfVkFMSURfUkVHX05PICAgICAgICAgICAgICAgMzg2OQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiAgRW51bQorICo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworZW51bSBSVEw4MzY3Q19UQUJMRV9BQ0NFU1NfT1AKK3sKKyAgICBUQl9PUF9SRUFEID0gMCwKKyAgICBUQl9PUF9XUklURQorfTsKKworZW51bSBSVEw4MzY3Q19UQUJMRV9BQ0NFU1NfVEFSR0VUCit7CisgICAgVEJfVEFSR0VUX0FDTFJVTEUgPSAxLAorICAgIFRCX1RBUkdFVF9BQ0xBQ1QsCisgICAgVEJfVEFSR0VUX0NWTEFOLAorICAgIFRCX1RBUkdFVF9MMiwKKyAgICBUQl9UQVJHRVRfSUdNUF9HUk9VUAorfTsKKworI2RlZmluZSBSVEw4MzY3Q19UQUJMRV9BQ0NFU1NfUkVHX0RBVEEob3AsIHRhcmdldCkgICAgKChvcCA8PCAzKSB8IHRhcmdldCkKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogIFN0cnVjdHVyZXMKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChydGtfdWludDMyIHJlZywgcnRrX3VpbnQzMiBiaXQsIHJ0a191aW50MzIgdmFsdWUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQocnRrX3VpbnQzMiByZWcsIHJ0a191aW50MzIgYml0LCBydGtfdWludDMyICpwVmFsdWUpOworCitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMocnRrX3VpbnQzMiByZWcsIHJ0a191aW50MzIgYml0cywgcnRrX3VpbnQzMiB2YWx1ZSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMocnRrX3VpbnQzMiByZWcsIHJ0a191aW50MzIgYml0cywgcnRrX3VpbnQzMiAqcFZhbHVlKTsKKworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNSZWcocnRrX3VpbnQzMiByZWcsIHJ0a191aW50MzIgdmFsdWUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNSZWcocnRrX3VpbnQzMiByZWcsIHJ0a191aW50MzIgKnBWYWx1ZSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKworCisjZW5kaWYgLyojaWZuZGVmIF9SVEw4MzY3Q19BU0lDRFJWX0hfKi8KKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl9hY2wuaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX2FzaWNkcnZfYWNsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFlNjlhYwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX2FzaWNkcnZfYWNsLmgKQEAgLTAsMCArMSwyMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogJFJldmlzaW9uOiA3NjMwNiAkCisgKiAkRGF0ZTogMjAxNy0wMy0wOCAxNToxMzo1OCArMDgwMCAotmekVCwgMDggpFSk6yAyMDE3KSAkCisgKgorICogUHVycG9zZSA6IFJUTDgzNjdDIHN3aXRjaCBoaWdoLWxldmVsIEFQSSBmb3IgUlRMODM2N0MKKyAqIEZlYXR1cmUgOiBBQ0wgcmVsYXRlZCBmdW5jdGlvbiBkcml2ZXJzCisgKgorICovCisKKyNpZm5kZWYgX1JUTDgzNjdDX0FTSUNEUlZfQUNMX0hfCisjZGVmaW5lIF9SVEw4MzY3Q19BU0lDRFJWX0FDTF9IXworCisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydi5oPgorCisjZGVmaW5lIFJUTDgzNjdDX0FDTFJVTEVOTyAgICAgICAgICAgICAgICAgIDk2CisKKyNkZWZpbmUgUlRMODM2N0NfQUNMUlVMRU1BWCAgICAgICAgICAgICAgICAgKFJUTDgzNjdDX0FDTFJVTEVOTy0xKQorI2RlZmluZSBSVEw4MzY3Q19BQ0xSVUxFRklFTEROTyAgICAgICAgICAgICA4CisjZGVmaW5lIFJUTDgzNjdDX0FDTFRFTVBMQVRFTk8gICAgICAgICAgICAgIDUKKyNkZWZpbmUgUlRMODM2N0NfQUNMVFlQRU1BWCAgICAgICAgICAgICAgICAgKFJUTDgzNjdDX0FDTFRFTVBMQVRFTk8tMSkKKworI2RlZmluZSBSVEw4MzY3Q19BQ0xSVUxFVEJMRU4gICAgICAgICAgICAgICA5CisjZGVmaW5lIFJUTDgzNjdDX0FDTEFDVFRCTEVOICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgUlRMODM2N0NfQUNMUlVMRVRCQUREUih0eXBlLCBydWxlKSAgKCh0eXBlIDw8IDYpIHwgcnVsZSkKKyNkZWZpbmUgUlRMODM2N0NfQUNMUlVMRVRCQUREUjIodHlwZSwgcnVsZSkgKCh0eXBlIDw8IDUpIHwgKHJ1bGUgKyA2NCkpCisKKyNkZWZpbmUgQUNMX0FDVF9DVkxBTl9FTkFCTEVfTUFTSyAgICAgICAgICAgMHgxCisjZGVmaW5lIEFDTF9BQ1RfU1ZMQU5fRU5BQkxFX01BU0sgICAgICAgICAgIDB4MgorI2RlZmluZSBBQ0xfQUNUX1BSSU9SSVRZX0VOQUJMRV9NQVNLICAgICAgICAweDQKKyNkZWZpbmUgQUNMX0FDVF9QT0xJQ0lOR19FTkFCTEVfTUFTSyAgICAgICAgMHg4CisjZGVmaW5lIEFDTF9BQ1RfRldEX0VOQUJMRV9NQVNLICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgQUNMX0FDVF9JTlRHUElPX0VOQUJMRV9NQVNLICAgICAgICAgMHgyMAorCisjZGVmaW5lIFJUTDgzNjdDX0FDTFJVTEVUQUdCSVRTICAgICAgICAgICAgIDUKKworI2RlZmluZSBSVEw4MzY3Q19BQ0xSQU5HRU5PICAgICAgICAgICAgICAgICAxNgorCisjZGVmaW5lIFJUTDgzNjdDX0FDTFJBTkdFTUFYICAgICAgICAgICAgICAgIChSVEw4MzY3Q19BQ0xSQU5HRU5PLTEpCisKKyNkZWZpbmUgUlRMODM2N0NfQUNMX1BPUlRSQU5HRU1BWCAgICAgICAgICAgKDB4RkZGRikKKyNkZWZpbmUgUlRMODM2N0NfQUNMX0FDVF9UQUJMRV9MRU4gICAgICAgICAgKDQpCisKK2VudW0gQUNMVENBTVRZUEVTCit7CisgICAgQ0FSRUJJVFM9IDAsCisgICAgREFUQUJJVFMKK307CisKK3R5cGVkZWYgZW51bSBhY2xGd2RBY3QKK3sKKyAgICBSVEw4MzY3Q19BQ0xfRldEX01JUlJPUiA9IDAsCisgICAgUlRMODM2N0NfQUNMX0ZXRF9SRURJUkVDVCwKKyAgICBSVEw4MzY3Q19BQ0xfRldEX01JUlJPUkZVTlRJT04sCisgICAgUlRMODM2N0NfQUNMX0ZXRF9UUkFQLAorfSBydGw4MzY3Y19hY2xGd2RfdDsKKworZW51bSBBQ0xGSUVMRFRZUEVTCit7CisgICAgQUNMX1VOVVNFRCwKKyAgICBBQ0xfRE1BQzAsCisgICAgQUNMX0RNQUMxLAorICAgIEFDTF9ETUFDMiwKKyAgICBBQ0xfU01BQzAsCisgICAgQUNMX1NNQUMxLAorICAgIEFDTF9TTUFDMiwKKyAgICBBQ0xfRVRIRVJUWVBFLAorICAgIEFDTF9TVEFHLAorICAgIEFDTF9DVEFHLAorICAgIEFDTF9JUDRTSVAwID0gMHgxMCwKKyAgICBBQ0xfSVA0U0lQMSwKKyAgICBBQ0xfSVA0RElQMCwKKyAgICBBQ0xfSVA0RElQMSwKKyAgICBBQ0xfSVA2U0lQMFdJVEhJUFY0ID0gMHgyMCwKKyAgICBBQ0xfSVA2U0lQMVdJVEhJUFY0LAorICAgIEFDTF9JUDZESVAwV0lUSElQVjQgPSAweDI4LAorICAgIEFDTF9JUDZESVAxV0lUSElQVjQsCisgICAgQUNMX1ZJRFJBTkdFID0gMHgzMCwKKyAgICBBQ0xfSVBSQU5HRSwKKyAgICBBQ0xfUE9SVFJBTkdFLAorICAgIEFDTF9GSUVMRF9WQUxJRCwKKyAgICBBQ0xfRklFTERfU0VMRUNUMDAgPSAweDQwLAorICAgIEFDTF9GSUVMRF9TRUxFQ1QwMSwKKyAgICBBQ0xfRklFTERfU0VMRUNUMDIsCisgICAgQUNMX0ZJRUxEX1NFTEVDVDAzLAorICAgIEFDTF9GSUVMRF9TRUxFQ1QwNCwKKyAgICBBQ0xfRklFTERfU0VMRUNUMDUsCisgICAgQUNMX0ZJRUxEX1NFTEVDVDA2LAorICAgIEFDTF9GSUVMRF9TRUxFQ1QwNywKKyAgICBBQ0xfRklFTERfU0VMRUNUMDgsCisgICAgQUNMX0ZJRUxEX1NFTEVDVDA5LAorICAgIEFDTF9GSUVMRF9TRUxFQ1QxMCwKKyAgICBBQ0xfRklFTERfU0VMRUNUMTEsCisgICAgQUNMX0ZJRUxEX1NFTEVDVDEyLAorICAgIEFDTF9GSUVMRF9TRUxFQ1QxMywKKyAgICBBQ0xfRklFTERfU0VMRUNUMTQsCisgICAgQUNMX0ZJRUxEX1NFTEVDVDE1LAorICAgIEFDTF9UQ1BTUE9SVCA9IDB4ODAsCisgICAgQUNMX1RDUERQT1JULAorICAgIEFDTF9UQ1BGTEFHLAorICAgIEFDTF9VRFBTUE9SVCwKKyAgICBBQ0xfVURQRFBPUlQsCisgICAgQUNMX0lDTVBDT0RFVFlQRSwKKyAgICBBQ0xfSUdNUFRZUEUsCisgICAgQUNMX1NQT1JULAorICAgIEFDTF9EUE9SVCwKKyAgICBBQ0xfSVA0VE9TUFJPVE8sCisgICAgQUNMX0lQNEZMQUdPRkYsCisgICAgQUNMX1RDTkgsCisgICAgQUNMX0NQVVRBRywKKyAgICBBQ0xfTDJQQVlMT0FELAorICAgIEFDTF9JUDZTSVAwLAorICAgIEFDTF9JUDZTSVAxLAorICAgIEFDTF9JUDZTSVAyLAorICAgIEFDTF9JUDZTSVAzLAorICAgIEFDTF9JUDZTSVA0LAorICAgIEFDTF9JUDZTSVA1LAorICAgIEFDTF9JUDZTSVA2LAorICAgIEFDTF9JUDZTSVA3LAorICAgIEFDTF9JUDZESVAwLAorICAgIEFDTF9JUDZESVAxLAorICAgIEFDTF9JUDZESVAyLAorICAgIEFDTF9JUDZESVAzLAorICAgIEFDTF9JUDZESVA0LAorICAgIEFDTF9JUDZESVA1LAorICAgIEFDTF9JUDZESVA2LAorICAgIEFDTF9JUDZESVA3LAorICAgIEFDTF9UWVBFX0VORAorfTsKKworc3RydWN0IGFjbF9ydWxlX3NtaV9zdHsKKyAgICBydGtfdWludDE2IHJ1bGVfaW5mbzsKKyAgICBydGtfdWludDE2IGZpZWxkW1JUTDgzNjdDX0FDTFJVTEVGSUVMRE5PXTsKK307CisKK3N0cnVjdCBhY2xfcnVsZV9zbWlfZXh0X3N0eworICAgIHJ0a191aW50MTYgcnVsZV9pbmZvOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgQUNMUlVMRVNNSXsKKyAgICBzdHJ1Y3QgYWNsX3J1bGVfc21pX3N0ICBjYXJlX2JpdHM7CisgICAgcnRrX3VpbnQxNiAgICAgIHZhbGlkOjE7CisgICAgc3RydWN0IGFjbF9ydWxlX3NtaV9zdCAgZGF0YV9iaXRzOworCisgICAgc3RydWN0IGFjbF9ydWxlX3NtaV9leHRfc3QgY2FyZV9iaXRzX2V4dDsKKyAgICBzdHJ1Y3QgYWNsX3J1bGVfc21pX2V4dF9zdCBkYXRhX2JpdHNfZXh0OworfXJ0bDgzNjdjX2FjbHJ1bGVzbWk7CisKK3N0cnVjdCBhY2xfcnVsZV9zdHsKKyAgICBydGtfdWludDE2IGFjdGl2ZV9wb3J0bXNrOjExOworICAgIHJ0a191aW50MTYgdHlwZTozOworICAgIHJ0a191aW50MTYgdGFnX2V4aXN0OjU7CisgICAgcnRrX3VpbnQxNiBmaWVsZFtSVEw4MzY3Q19BQ0xSVUxFRklFTEROT107Cit9OworCit0eXBlZGVmIHN0cnVjdCBBQ0xSVUxFeworICAgIHN0cnVjdCBhY2xfcnVsZV9zdCAgZGF0YV9iaXRzOworICAgIHJ0a191aW50MTYgICAgICB2YWxpZDoxOworICAgIHN0cnVjdCBhY2xfcnVsZV9zdCAgY2FyZV9iaXRzOworfXJ0bDgzNjdjX2FjbHJ1bGU7CisKKwordHlwZWRlZiBzdHJ1Y3QgcnRsODM2N2NfYWNsdGVtcGxhdGVfc3sKKyAgICBydGtfdWludDggZmllbGRbOF07Cit9cnRsODM2N2NfYWNsdGVtcGxhdGVfdDsKKworCit0eXBlZGVmIHN0cnVjdCBhY2xfYWN0X3N7CisgICAgcnRrX3VpbnQxNiBjdmlkeF9jYWN0Ojc7CisgICAgcnRrX3VpbnQxNiBjYWN0OjI7CisgICAgcnRrX3VpbnQxNiBzdmlkeF9zYWN0Ojc7CisgICAgcnRrX3VpbnQxNiBzYWN0OjI7CisKKworICAgIHJ0a191aW50MTYgYWNsbWV0ZXJpZHg6NzsKKyAgICBydGtfdWludDE2IGZ3ZHBtYXNrOjExOworICAgIHJ0a191aW50MTYgZndkYWN0OjI7CisKKyAgICBydGtfdWludDE2IHByaWR4Ojc7CisgICAgcnRrX3VpbnQxNiBwcmlhY3Q6MjsKKyAgICBydGtfdWludDE2IGdwaW9fcGluOjQ7CisgICAgcnRrX3VpbnQxNiBncGlvX2VuOjE7CisgICAgcnRrX3VpbnQxNiBhY2xpbnQ6MTsKKworICAgIHJ0a191aW50MTYgY2FjdF9leHQ6MjsKKyAgICBydGtfdWludDE2IGZ3ZGFjdF9leHQ6MTsKKyAgICBydGtfdWludDE2IHRhZ19mbXQ6MjsKK31ydGw4MzY3Y19hY2xfYWN0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGFjbF9ydWxlX3VuaW9uX3MKK3sKKyAgICBydGw4MzY3Y19hY2xydWxlIGFjbFJ1bGU7CisgICAgcnRsODM2N2NfYWNsX2FjdF90IGFjbEFjdDsKKyAgICBydGtfdWludDMyIGFjbEFjdEN0cmw7CisgICAgcnRrX3VpbnQzMiBhY2xOb3Q7Cit9cnRsODM2N2NfYWNsX3J1bGVfdW5pb25fdDsKKworCitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0FjbChydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgZW5hYmxlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0FjbChydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIqIHBFbmFibGVkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljQWNsVW5tYXRjaGVkUGVybWl0KHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBlbmFibGVkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljQWNsVW5tYXRjaGVkUGVybWl0KHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiogcEVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNBY2xSdWxlKHJ0a191aW50MzIgaW5kZXgsIHJ0bDgzNjdjX2FjbHJ1bGUgKnBBY2xSdWxlKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljQWNsUnVsZShydGtfdWludDMyIGluZGV4LCBydGw4MzY3Y19hY2xydWxlICpwQWNsUnVsZSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0FjbE5vdChydGtfdWludDMyIGluZGV4LCBydGtfdWludDMyIG5vdCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0FjbE5vdChydGtfdWludDMyIGluZGV4LCBydGtfdWludDMyKiBwTm90KTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljQWNsVGVtcGxhdGUocnRrX3VpbnQzMiBpbmRleCwgcnRsODM2N2NfYWNsdGVtcGxhdGVfdCogcEFjbFR5cGUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNBY2xUZW1wbGF0ZShydGtfdWludDMyIGluZGV4LCBydGw4MzY3Y19hY2x0ZW1wbGF0ZV90ICpwQWNsVHlwZSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0FjbEFjdChydGtfdWludDMyIGluZGV4LCBydGw4MzY3Y19hY2xfYWN0X3QqIHBBY2xBY3QpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNBY2xBY3QocnRrX3VpbnQzMiBpbmRleCwgcnRsODM2N2NfYWNsX2FjdF90ICpwQWNsQWN0KTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljQWNsQWN0Q3RybChydGtfdWludDMyIGluZGV4LCBydGtfdWludDMyIGFjbEFjdEN0cmwpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNBY2xBY3RDdHJsKHJ0a191aW50MzIgaW5kZXgsIHJ0a191aW50MzIgKmFjbEFjdEN0cmwpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNBY2xQb3J0UmFuZ2UocnRrX3VpbnQzMiBpbmRleCwgcnRrX3VpbnQzMiB0eXBlLCBydGtfdWludDMyIHVwcGVyUG9ydCwgcnRrX3VpbnQzMiBsb3dlclBvcnQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNBY2xQb3J0UmFuZ2UocnRrX3VpbnQzMiBpbmRleCwgcnRrX3VpbnQzMiogcFR5cGUsIHJ0a191aW50MzIqIHBVcHBlclBvcnQsIHJ0a191aW50MzIqIHBMb3dlclBvcnQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNBY2xWaWRSYW5nZShydGtfdWludDMyIGluZGV4LCBydGtfdWludDMyIHR5cGUsIHJ0a191aW50MzIgdXBwZXJWaWQsIHJ0a191aW50MzIgbG93ZXJWaWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNBY2xWaWRSYW5nZShydGtfdWludDMyIGluZGV4LCBydGtfdWludDMyKiBwVHlwZSwgcnRrX3VpbnQzMiogcFVwcGVyVmlkLCBydGtfdWludDMyKiBwTG93ZXJWaWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNBY2xJcFJhbmdlKHJ0a191aW50MzIgaW5kZXgsIHJ0a191aW50MzIgdHlwZSwgaXBhZGRyX3QgdXBwZXJJcCwgaXBhZGRyX3QgbG93ZXJJcCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0FjbElwUmFuZ2UocnRrX3VpbnQzMiBpbmRleCwgcnRrX3VpbnQzMiogcFR5cGUsIGlwYWRkcl90KiBwVXBwZXJJcCwgaXBhZGRyX3QqIHBMb3dlcklwKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljQWNsR3Bpb1BvbGFyaXR5KHJ0a191aW50MzIgcG9sYXJpdHkpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNBY2xHcGlvUG9sYXJpdHkocnRrX3VpbnQzMiogcFBvbGFyaXR5KTsKKworI2VuZGlmIC8qX1JUTDgzNjdDX0FTSUNEUlZfQUNMX0hfKi8KKworCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGw4MzY3Y19hc2ljZHJ2X2NwdXRhZy5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl9jcHV0YWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2E0NjAxCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl9jcHV0YWcuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNzYzMDYgJAorICogJERhdGU6IDIwMTctMDMtMDggMTU6MTM6NTggKzA4MDAgKLZnpFQsIDA4IKRUpOsgMjAxNykgJAorICoKKyAqIFB1cnBvc2UgOiBSVEw4MzY3QyBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkgZm9yIFJUTDgzNjdDCisgKiBGZWF0dXJlIDogUHJvcHJpZXRhcnkgQ1BVLXRhZyByZWxhdGVkIGZ1bmN0aW9uIGRyaXZlcnMKKyAqCisgKi8KKworI2lmbmRlZiBfUlRMODM2N0NfQVNJQ0RSVl9DUFVUQUdfSF8KKyNkZWZpbmUgX1JUTDgzNjdDX0FTSUNEUlZfQ1BVVEFHX0hfCisKKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2Lmg+CisKK2VudW0gQ1BVVEFHX0lOU0VSVF9NT0RFCit7CisgICAgQ1BVVEFHX0lOU0VSVF9UT19BTEwgPSAwLAorICAgIENQVVRBR19JTlNFUlRfVE9fVFJBUFBJTkcsCisgICAgQ1BVVEFHX0lOU0VSVF9UT19OTywKKyAgICBDUFVUQUdfSU5TRVJUX0VORAorfTsKKworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNDcHV0YWdFbmFibGUocnRrX3VpbnQzMiBlbmFibGVkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljQ3B1dGFnRW5hYmxlKHJ0a191aW50MzIgKnBFbmFibGVkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljQ3B1dGFnVHJhcFBvcnQocnRrX3VpbnQzMiBwb3J0KTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljQ3B1dGFnVHJhcFBvcnQocnRrX3VpbnQzMiAqcFBvcnQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNDcHV0YWdQb3J0bWFzayhydGtfdWludDMyIHBvcnRtYXNrKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljQ3B1dGFnUG9ydG1hc2socnRrX3VpbnQzMiAqcFBtc2spOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNDcHV0YWdJbnNlcnRNb2RlKHJ0a191aW50MzIgbW9kZSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0NwdXRhZ0luc2VydE1vZGUocnRrX3VpbnQzMiAqcE1vZGUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNDcHV0YWdQcmlvcml0eVJlbWFwcGluZyhydGtfdWludDMyIHNyY1ByaSwgcnRrX3VpbnQzMiBuZXdQcmkpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNDcHV0YWdQcmlvcml0eVJlbWFwcGluZyhydGtfdWludDMyIHNyY1ByaSwgcnRrX3VpbnQzMiAqcE5ld1ByaSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0NwdXRhZ1Bvc2l0aW9uKHJ0a191aW50MzIgcG9zdGlvbik7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0NwdXRhZ1Bvc2l0aW9uKHJ0a191aW50MzIqIHBQb3N0aW9uKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljQ3B1dGFnTW9kZShydGtfdWludDMyIG1vZGUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNDcHV0YWdNb2RlKHJ0a191aW50MzIgKnBNb2RlKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljQ3B1dGFnUnhNaW5MZW5ndGgocnRrX3VpbnQzMiBtb2RlKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljQ3B1dGFnUnhNaW5MZW5ndGgocnRrX3VpbnQzMiAqcE1vZGUpOworCisjZW5kaWYgLyojaWZuZGVmIF9SVEw4MzY3Q19BU0lDRFJWX0NQVVRBR19IXyovCisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX2FzaWNkcnZfZG90MXguaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX2FzaWNkcnZfZG90MXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjM5YWU3Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl9kb3QxeC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogJFJldmlzaW9uOiA3NjMwNiAkCisgKiAkRGF0ZTogMjAxNy0wMy0wOCAxNToxMzo1OCArMDgwMCAotmekVCwgMDggpFSk6yAyMDE3KSAkCisgKgorICogUHVycG9zZSA6IFJUTDgzNjdDIHN3aXRjaCBoaWdoLWxldmVsIEFQSSBmb3IgUlRMODM2N0MKKyAqIEZlYXR1cmUgOiA4MDIuMVggcmVsYXRlZCBmdW5jdGlvbnMKKyAqCisgKi8KKworI2lmbmRlZiBfUlRMODM2N0NfQVNJQ0RSVl9ET1QxWF9IXworI2RlZmluZSBfUlRMODM2N0NfQVNJQ0RSVl9ET1QxWF9IXworCisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydi5oPgorCitlbnVtIERPVDFYX1VOQVVUSF9CRUhBVgoreworICAgIERPVDFYX1VOQVVUSF9EUk9QID0gMCwKKyAgICBET1QxWF9VTkFVVEhfVFJBUCwKKyAgICBET1QxWF9VTkFVVEhfR1ZMQU4sCisgICAgRE9UMVhfVU5BVVRIX0VORAorfTsKKworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWMxeFBCRW5Db25maWcocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWMxeFBCRW5Db25maWcocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyICpwRW5hYmxlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpYzF4UEJBdXRoQ29uZmlnKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBhdXRoKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljMXhQQkF1dGhDb25maWcocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyICpwQXV0aCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpYzF4UEJPcGRpckNvbmZpZyhydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgb3BkaXIpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWMxeFBCT3BkaXJDb25maWcocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyICpwT3BkaXIpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWMxeE1CRW5Db25maWcocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWMxeE1CRW5Db25maWcocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyICpwRW5hYmxlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpYzF4TUJPcGRpckNvbmZpZyhydGtfdWludDMyIG9wZGlyKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljMXhNQk9wZGlyQ29uZmlnKHJ0a191aW50MzIgKnBPcGRpcik7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpYzF4UHJvY0NvbmZpZyhydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgcHJvYyk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpYzF4UHJvY0NvbmZpZyhydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgKnBQcm9jKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljMXhHdWVzdFZpZHgocnRrX3VpbnQzMiBpbmRleCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpYzF4R3Vlc3RWaWR4KHJ0a191aW50MzIgKnBJbmRleCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpYzF4R1ZPcGRpcihydGtfdWludDMyIGVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWMxeEdWT3BkaXIocnRrX3VpbnQzMiAqcEVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWMxeFRyYXBQcmlvcml0eShydGtfdWludDMyIHByaW9yaXR5KTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljMXhUcmFwUHJpb3JpdHkocnRrX3VpbnQzMiAqcFByaW9yaXR5KTsKKworCisjZW5kaWYgLypfUlRMODM2N0NfQVNJQ0RSVl9ET1QxWF9IXyovCisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX2FzaWNkcnZfZWF2LmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGw4MzY3Y19hc2ljZHJ2X2Vhdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MzNmNjYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGw4MzY3Y19hc2ljZHJ2X2Vhdi5oCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNzYzMDYgJAorICogJERhdGU6IDIwMTctMDMtMDggMTU6MTM6NTggKzA4MDAgKLZnpFQsIDA4IKRUpOsgMjAxNykgJAorICoKKyAqIFB1cnBvc2UgOiBSVEw4MzY3QyBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkgZm9yIFJUTDgzNjdDCisgKiBGZWF0dXJlIDogRXRoZXJuZXQgQVYgcmVsYXRlZCBmdW5jdGlvbnMKKyAqCisgKi8KKworI2lmbmRlZiBfUlRMODM2N0NfQVNJQ0RSVl9FQVZfSF8KKyNkZWZpbmUgX1JUTDgzNjdDX0FTSUNEUlZfRUFWX0hfCisKKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2Lmg+CisKK3R5cGVkZWYgZW51bSBSVEw4MzY3Q19QVFBfVElNRV9DTURfRQoreworICAgIFBUUF9USU1FX1JFQUQgPSAwLAorICAgIFBUUF9USU1FX1dSSVRFLAorICAgIFBUUF9USU1FX0lOQywKKyAgICBQVFBfVElNRV9ERUMsCisgICAgUFRQX1RJTUVfQ01EX0VORAorfVJUTDgzNjdDX1BUUF9USU1FX0NNRDsKKwordHlwZWRlZiBlbnVtIFJUTDgzNjdDX1BUUF9USU1FX0FESl9FCit7CisgICAgUFRQX1RJTUVfQURKX0lOQyA9IDAsCisgICAgUFRQX1RJTUVfQURKX0RFQywKKyAgICBQVFBfVElNRV9BREpfRU5ECit9UlRMODM2N0NfUFRQX1RJTUVfQURKOworCit0eXBlZGVmIGVudW0gUlRMODM2N0NfUFRQX1RJTUVfQ1RSTF9FCit7CisgICAgUFRQX1RJTUVfQ1RSTF9TVE9QID0gMCwKKyAgICBQVFBfVElNRV9DVFJMX1NUQVJULAorICAgIFBUUF9USU1FX0NUUkxfRU5ECit9UlRMODM2N0NfUFRQX1RJTUVfQ1RSTDsKKwordHlwZWRlZiBlbnVtIFJUTDgzNjdDX1BUUF9JTlRSX0lNUlNfRQoreworICAgIFBUUF9JTVJTX1RYX1NZTkMsCisgICAgUFRQX0lNUlNfVFhfREVMQVlfUkVRLAorICAgIFBUUF9JTVJTX1RYX1BERUxBWV9SRVEsCisgICAgUFRQX0lNUlNfVFhfUERFTEFZX1JFU1AsCisgICAgUFRQX0lNUlNfUlhfU1lOQywKKyAgICBQVFBfSU1SU19SWF9ERUxBWV9SRVEsCisgICAgUFRQX0lNUlNfUlhfUERFTEFZX1JFUSwKKyAgICBQVFBfSU1SU19SWF9QREVMQVlfUkVTUCwKKyAgICBQVFBfSU1SU19FTkQsCit9UlRMODM2N0NfUFRQX0lOVFJfSU1SUzsKKworCit0eXBlZGVmIGVudW0gUlRMODM2N0NfUFRQX1BLVF9UWVBFX0UKK3sKKyAgICBQVFBfUEtUX1RZUEVfVFhfU1lOQywKKyAgICBQVFBfUEtUX1RZUEVfVFhfREVMQVlfUkVRLAorICAgIFBUUF9QS1RfVFlQRV9UWF9QREVMQVlfUkVRLAorICAgIFBUUF9QS1RfVFlQRV9UWF9QREVMQVlfUkVTUCwKKyAgICBQVFBfUEtUX1RZUEVfUlhfU1lOQywKKyAgICBQVFBfUEtUX1RZUEVfUlhfREVMQVlfUkVRLAorICAgIFBUUF9QS1RfVFlQRV9SWF9QREVMQVlfUkVRLAorICAgIFBUUF9QS1RfVFlQRV9SWF9QREVMQVlfUkVTUCwKKyAgICBQVFBfUEtUX1RZUEVfRU5ELAorfVJUTDgzNjdDX1BUUF9QS1RfVFlQRTsKKwordHlwZWRlZiBzdHJ1Y3QgIHJ0bDgzNjdjX3B0cF90aW1lX3N0YW1wX3N7CisgICAgcnRrX3VpbnQzMiBzZXF1ZW5jZV9pZDsKKyAgICBydGtfdWludDMyIHNlY29uZDsKKyAgICBydGtfdWludDMyIG5hbm9fc2Vjb25kOworfXJ0bDgzNjdjX3B0cF90aW1lX3N0YW1wX3Q7CisKKyNkZWZpbmUgUlRMODM2N0NfUFRQX0lOVFJfTUFTSyAgICAgICAgMHhGRgorCisjZGVmaW5lIFJUTDgzNjdDX1BUUF9QT1JUX01BU0sgICAgICAgIDB4M0ZGCisKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljRWF2TWFjQWRkcmVzcyhldGhlcl9hZGRyX3QgbWFjKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljRWF2TWFjQWRkcmVzcyhldGhlcl9hZGRyX3QgKnBNYWMpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNFYXZUcGlkKHJ0a191aW50MzIgb3V0ZXJUYWcsIHJ0a191aW50MzIgaW5uZXJUYWcpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNFYXZUcGlkKHJ0a191aW50MzIqIHBPdXRlclRhZywgcnRrX3VpbnQzMiogcElubmVyVGFnKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljRWF2U3lzVGltZShydGtfdWludDMyIHNlY29uZCwgcnRrX3VpbnQzMiBuYW5vU2Vjb25kKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljRWF2U3lzVGltZShydGtfdWludDMyKiBwU2Vjb25kLCBydGtfdWludDMyKiBwTmFub1NlY29uZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0VhdlN5c1RpbWVBZGp1c3QocnRrX3VpbnQzMiB0eXBlLCBydGtfdWludDMyIHNlY29uZCwgcnRrX3VpbnQzMiBuYW5vU2Vjb25kKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljRWF2U3lzVGltZUN0cmwocnRrX3VpbnQzMiBjb250cm9sKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljRWF2U3lzVGltZUN0cmwocnRrX3VpbnQzMiogcENvbnRyb2wpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNFYXZJbnRlcnJ1cHRNYXNrKHJ0a191aW50MzIgaW1yKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljRWF2SW50ZXJydXB0TWFzayhydGtfdWludDMyKiBwSW1yKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljRWF2SW50ZXJydXB0U3RhdHVzKHJ0a191aW50MzIqIHBJbXMpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNFYXZQb3J0SW50ZXJydXB0U3RhdHVzKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBpbXMpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNFYXZQb3J0SW50ZXJydXB0U3RhdHVzKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiogcEltcyk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0VhdlBvcnRFbmFibGUocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNFYXZQb3J0RW5hYmxlKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcEVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNFYXZQb3J0VGltZVN0YW1wKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiB0eXBlLCBydGw4MzY3Y19wdHBfdGltZV9zdGFtcF90KiB0aW1lU3RhbXApOworCitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0VhdlRyYXAocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNFYXZUcmFwKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcEVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNFYXZFbmFibGUocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNFYXZFbmFibGUocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyICpwRW5hYmxlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0VhdlByaVJlbWFwcGluZyhydGtfdWludDMyIHNyY3ByaW9yaXR5LCBydGtfdWludDMyIHByaW9yaXR5KTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljRWF2UHJpUmVtYXBwaW5nKHJ0a191aW50MzIgc3JjcHJpb3JpdHksIHJ0a191aW50MzIgKnBQcmlvcml0eSk7CisKKyNlbmRpZiAvKiNpZm5kZWYgX1JUTDgzNjdDX0FTSUNEUlZfRUFWX0hfKi8KKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl9lZWUuaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX2FzaWNkcnZfZWVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJlZGNlNgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX2FzaWNkcnZfZWVlLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiAkUmV2aXNpb246IDQ4OTg5ICQKKyAqICREYXRlOiAyMDE0LTA3LTAxIDE1OjQ1OjI0ICswODAwICi2Z6RHLCAwMSCkQ6TrIDIwMTQpICQKKyAqCisgKiBQdXJwb3NlIDogUlRMODM3MCBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkgZm9yIFJUTDgzNjdDCisgKiBGZWF0dXJlIDoKKyAqCisgKi8KKworI2lmbmRlZiBfUlRMODM2N0NfQVNJQ0RSVl9FRUVfSF8KKyNkZWZpbmUgX1JUTDgzNjdDX0FTSUNEUlZfRUVFX0hfCisKKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2Lmg+CisKKyNkZWZpbmUgRUVFX09DUF9QSFlfQUREUiAgICAoMHhBNUQwKQorCitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0VlZTEwME0ocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGVuYWJsZSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0VlZTEwME0ocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyICplbmFibGUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNFZWVHaWdhKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBlbmFibGUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNFZWVHaWdhKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqZW5hYmxlKTsKKworCisjZW5kaWYgLypfUlRMODM2N0NfQVNJQ0RSVl9FRUVfSF8qLwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl9mYy5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl9mYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNjdjZGUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGw4MzY3Y19hc2ljZHJ2X2ZjLmgKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiAkUmV2aXNpb246IDc2MzA2ICQKKyAqICREYXRlOiAyMDE3LTAzLTA4IDE1OjEzOjU4ICswODAwICi2Z6RULCAwOCCkVKTrIDIwMTcpICQKKyAqCisgKiBQdXJwb3NlIDogUlRMODM2N0Mgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJIGZvciBSVEw4MzY3QworICogRmVhdHVyZSA6IEZsb3cgY29udHJvbCByZWxhdGVkIGZ1bmN0aW9ucworICoKKyAqLworCisjaWZuZGVmIF9SVEw4MzY3Q19BU0lDRFJWX0ZDX0hfCisjZGVmaW5lIF9SVEw4MzY3Q19BU0lDRFJWX0ZDX0hfCisKKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2Lmg+CisKKyNkZWZpbmUgUlRMODM2N0NfUEFHRV9OVU1CRVIgICAgMHg2MDAKKworCitlbnVtIEZMT1dfQ09OVFJPTF9UWVBFCit7CisgICAgRkNfRUdSRVNTID0gMCwKKyAgICBGQ19JTkdSRVNTLAorfTsKKworZW51bSBGQ19KVU1CT19TSVpFCit7CisgICAgRkNfSlVNQk9fU0laRV8zSyA9IDAsCisgICAgRkNfSlVNQk9fU0laRV80SywKKyAgICBGQ19KVU1CT19TSVpFXzZLLAorICAgIEZDX0pVTUJPX1NJWkVfOUssCisgICAgRkNfSlVNQk9fU0laRV9FTkQsCisKK307CisKKworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNGbG93Q29udHJvbFNlbGVjdChydGtfdWludDMyIHNlbGVjdCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0Zsb3dDb250cm9sU2VsZWN0KHJ0a191aW50MzIgKnBTZWxlY3QpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNGbG93Q29udHJvbEp1bWJvTW9kZShydGtfdWludDMyIGVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNGbG93Q29udHJvbEp1bWJvTW9kZShydGtfdWludDMyKiBwRW5hYmxlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0Zsb3dDb250cm9sSnVtYm9Nb2RlU2l6ZShydGtfdWludDMyIHNpemUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNGbG93Q29udHJvbEp1bWJvTW9kZVNpemUocnRrX3VpbnQzMiogcFNpemUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNGbG93Q29udHJvbFF1ZXVlRWdyZXNzRW5hYmxlKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBxaWQsIHJ0a191aW50MzIgZW5hYmxlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0Zsb3dDb250cm9sUXVldWVFZ3Jlc3NFbmFibGUocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIHFpZCwgcnRrX3VpbnQzMiogcEVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNGbG93Q29udHJvbERyb3BBbGwocnRrX3VpbnQzMiBkcm9wYWxsKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljRmxvd0NvbnRyb2xEcm9wQWxsKHJ0a191aW50MzIqIHBEcm9wYWxsKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljRmxvd0NvbnRyb2xQYXVzZUFsbFRocmVzaG9sZChydGtfdWludDMyIHRocmVzaG9sZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0Zsb3dDb250cm9sUGF1c2VBbGxUaHJlc2hvbGQocnRrX3VpbnQzMiAqcFRocmVzaG9sZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0Zsb3dDb250cm9sU3lzdGVtVGhyZXNob2xkKHJ0a191aW50MzIgb25UaHJlc2hvbGQsIHJ0a191aW50MzIgb2ZmVGhyZXNob2xkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljRmxvd0NvbnRyb2xTeXN0ZW1UaHJlc2hvbGQocnRrX3VpbnQzMiAqcE9uVGhyZXNob2xkLCBydGtfdWludDMyICpwT2ZmVGhyZXNob2xkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljRmxvd0NvbnRyb2xTaGFyZWRUaHJlc2hvbGQocnRrX3VpbnQzMiBvblRocmVzaG9sZCwgcnRrX3VpbnQzMiBvZmZUaHJlc2hvbGQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNGbG93Q29udHJvbFNoYXJlZFRocmVzaG9sZChydGtfdWludDMyICpwT25UaHJlc2hvbGQsIHJ0a191aW50MzIgKnBPZmZUaHJlc2hvbGQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNGbG93Q29udHJvbFBvcnRUaHJlc2hvbGQocnRrX3VpbnQzMiBvblRocmVzaG9sZCwgcnRrX3VpbnQzMiBvZmZUaHJlc2hvbGQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNGbG93Q29udHJvbFBvcnRUaHJlc2hvbGQocnRrX3VpbnQzMiAqcE9uVGhyZXNob2xkLCBydGtfdWludDMyICpwT2ZmVGhyZXNob2xkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljRmxvd0NvbnRyb2xQb3J0UHJpdmF0ZVRocmVzaG9sZChydGtfdWludDMyIG9uVGhyZXNob2xkLCBydGtfdWludDMyIG9mZlRocmVzaG9sZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0Zsb3dDb250cm9sUG9ydFByaXZhdGVUaHJlc2hvbGQocnRrX3VpbnQzMiAqcE9uVGhyZXNob2xkLCBydGtfdWludDMyICpwT2ZmVGhyZXNob2xkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljRmxvd0NvbnRyb2xTeXN0ZW1Ecm9wVGhyZXNob2xkKHJ0a191aW50MzIgb25UaHJlc2hvbGQsIHJ0a191aW50MzIgb2ZmVGhyZXNob2xkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljRmxvd0NvbnRyb2xTeXN0ZW1Ecm9wVGhyZXNob2xkKHJ0a191aW50MzIgKnBPblRocmVzaG9sZCwgcnRrX3VpbnQzMiAqcE9mZlRocmVzaG9sZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0Zsb3dDb250cm9sU2hhcmVkRHJvcFRocmVzaG9sZChydGtfdWludDMyIG9uVGhyZXNob2xkLCBydGtfdWludDMyIG9mZlRocmVzaG9sZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0Zsb3dDb250cm9sU2hhcmVkRHJvcFRocmVzaG9sZChydGtfdWludDMyICpwT25UaHJlc2hvbGQsIHJ0a191aW50MzIgKnBPZmZUaHJlc2hvbGQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNGbG93Q29udHJvbFBvcnREcm9wVGhyZXNob2xkKHJ0a191aW50MzIgb25UaHJlc2hvbGQsIHJ0a191aW50MzIgb2ZmVGhyZXNob2xkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljRmxvd0NvbnRyb2xQb3J0RHJvcFRocmVzaG9sZChydGtfdWludDMyICpwT25UaHJlc2hvbGQsIHJ0a191aW50MzIgKnBPZmZUaHJlc2hvbGQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNGbG93Q29udHJvbFBvcnRQcml2YXRlRHJvcFRocmVzaG9sZChydGtfdWludDMyIG9uVGhyZXNob2xkLCBydGtfdWludDMyIG9mZlRocmVzaG9sZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0Zsb3dDb250cm9sUG9ydFByaXZhdGVEcm9wVGhyZXNob2xkKHJ0a191aW50MzIgKnBPblRocmVzaG9sZCwgcnRrX3VpbnQzMiAqcE9mZlRocmVzaG9sZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0Zsb3dDb250cm9sU3lzdGVtSnVtYm9UaHJlc2hvbGQocnRrX3VpbnQzMiBvblRocmVzaG9sZCwgcnRrX3VpbnQzMiBvZmZUaHJlc2hvbGQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNGbG93Q29udHJvbFN5c3RlbUp1bWJvVGhyZXNob2xkKHJ0a191aW50MzIgKnBPblRocmVzaG9sZCwgcnRrX3VpbnQzMiAqcE9mZlRocmVzaG9sZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0Zsb3dDb250cm9sU2hhcmVkSnVtYm9UaHJlc2hvbGQocnRrX3VpbnQzMiBvblRocmVzaG9sZCwgcnRrX3VpbnQzMiBvZmZUaHJlc2hvbGQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNGbG93Q29udHJvbFNoYXJlZEp1bWJvVGhyZXNob2xkKHJ0a191aW50MzIgKnBPblRocmVzaG9sZCwgcnRrX3VpbnQzMiAqcE9mZlRocmVzaG9sZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0Zsb3dDb250cm9sUG9ydEp1bWJvVGhyZXNob2xkKHJ0a191aW50MzIgb25UaHJlc2hvbGQsIHJ0a191aW50MzIgb2ZmVGhyZXNob2xkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljRmxvd0NvbnRyb2xQb3J0SnVtYm9UaHJlc2hvbGQocnRrX3VpbnQzMiAqcE9uVGhyZXNob2xkLCBydGtfdWludDMyICpwT2ZmVGhyZXNob2xkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljRmxvd0NvbnRyb2xQb3J0UHJpdmF0ZUp1bWJvVGhyZXNob2xkKHJ0a191aW50MzIgb25UaHJlc2hvbGQsIHJ0a191aW50MzIgb2ZmVGhyZXNob2xkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljRmxvd0NvbnRyb2xQb3J0UHJpdmF0ZUp1bWJvVGhyZXNob2xkKHJ0a191aW50MzIgKnBPblRocmVzaG9sZCwgcnRrX3VpbnQzMiAqcE9mZlRocmVzaG9sZCk7CisKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljRWdyZXNzRmxvd0NvbnRyb2xQb3J0RHJvcEdhcChydGtfdWludDMyIGdhcCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0VncmVzc0Zsb3dDb250cm9sUG9ydERyb3BHYXAocnRrX3VpbnQzMiAqcEdhcCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0VncmVzc0Zsb3dDb250cm9sUXVldWVEcm9wR2FwKHJ0a191aW50MzIgZ2FwKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljRWdyZXNzRmxvd0NvbnRyb2xRdWV1ZURyb3BHYXAocnRrX3VpbnQzMiAqcEdhcCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0VncmVzc0Zsb3dDb250cm9sUG9ydERyb3BUaHJlc2hvbGQocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIHRocmVzaG9sZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0VncmVzc0Zsb3dDb250cm9sUG9ydERyb3BUaHJlc2hvbGQocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyICpwVGhyZXNob2xkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljRWdyZXNzRmxvd0NvbnRyb2xRdWV1ZURyb3BUaHJlc2hvbGQocnRrX3VpbnQzMiBxaWQsIHJ0a191aW50MzIgdGhyZXNob2xkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljRWdyZXNzRmxvd0NvbnRyb2xRdWV1ZURyb3BUaHJlc2hvbGQocnRrX3VpbnQzMiBxaWQsIHJ0a191aW50MzIgKnBUaHJlc2hvbGQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNFZ3Jlc3NRdWV1ZUVtcHR5UG9ydE1hc2socnRrX3VpbnQzMiAqcFBvcnRtYXNrKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljVG90YWxQYWdlKHJ0a191aW50MzIgKnBQYWdlQ291bnQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNQdWxiaWNQYWdlKHJ0a191aW50MzIgKnBQYWdlQ291bnQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNNYXhUb3RhbFBhZ2UocnRrX3VpbnQzMiAqcFBhZ2VDb3VudCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY01heFB1bGJpY1BhZ2UocnRrX3VpbnQzMiAqcFBhZ2VDb3VudCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BvcnRQYWdlKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcFBhZ2VDb3VudCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BvcnRQYWdlTWF4KHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcFBhZ2VDb3VudCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0Zsb3dDb250cm9sRWdyZXNzUG9ydEluZGVwKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBlbmFibGUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNGbG93Q29udHJvbEVncmVzc1BvcnRJbmRlcChydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgKnBFbmFibGUpOworCisjZW5kaWYgLypfUlRMODM2N0NfQVNJQ0RSVl9GQ19IXyovCisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX2FzaWNkcnZfZ3JlZW4uaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX2FzaWNkcnZfZ3JlZW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGZkMDg1Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl9ncmVlbi5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogJFJldmlzaW9uOiA3NjMwNiAkCisgKiAkRGF0ZTogMjAxNy0wMy0wOCAxNToxMzo1OCArMDgwMCAotmekVCwgMDggpFSk6yAyMDE3KSAkCisgKgorICogUHVycG9zZSA6IFJUTDgzNjdDIHN3aXRjaCBoaWdoLWxldmVsIEFQSSBmb3IgUlRMODM2N0MKKyAqIEZlYXR1cmUgOiBHcmVlbiBldGhlcm5ldCByZWxhdGVkIGZ1bmN0aW9ucworICoKKyAqLworCisjaWZuZGVmIF9SVEw4MzY3Q19BU0lDRFJWX0dSRUVOX0hfCisjZGVmaW5lIF9SVEw4MzY3Q19BU0lDRFJWX0dSRUVOX0hfCisKKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2Lmg+CisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl9waHkuaD4KKworI2RlZmluZSBQSFlfUE9XRVJTQVZJTkdfUkVHICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljR3JlZW5UcmFmZmljVHlwZShydGtfdWludDMyIHByaW9yaXR5LCBydGtfdWludDMyIHRyYWZmaWN0eXBlKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljR3JlZW5UcmFmZmljVHlwZShydGtfdWludDMyIHByaW9yaXR5LCBydGtfdWludDMyKiBwVHJhZmZpY3R5cGUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNHcmVlblBvcnRQYWdlKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiogcFBhZ2UpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNHcmVlbkhpZ2hQcmlvcml0eVRyYWZmaWMocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyKiBwSW5kaWNhdG9yKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljR3JlZW5IaWdoUHJpb3JpdHlUcmFmZmljKHJ0a191aW50MzIgcG9ydCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0dyZWVuRXRoZXJuZXQocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGdyZWVuKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljR3JlZW5FdGhlcm5ldChydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIqIGdyZWVuKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljUG93ZXJTYXZpbmcocnRrX3VpbnQzMiBwaHksIHJ0a191aW50MzIgZW5hYmxlKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljUG93ZXJTYXZpbmcocnRrX3VpbnQzMiBwaHksIHJ0a191aW50MzIqIGVuYWJsZSk7CisjZW5kaWYgLyojaWZuZGVmIF9SVEw4MzY3Q19BU0lDRFJWX0dSRUVOX0hfKi8KKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl9oc2IuaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX2FzaWNkcnZfaHNiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRmOWJiMwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX2FzaWNkcnZfaHNiLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiAkUmV2aXNpb246IDc2MzA2ICQKKyAqICREYXRlOiAyMDE3LTAzLTA4IDE1OjEzOjU4ICswODAwICi2Z6RULCAwOCCkVKTrIDIwMTcpICQKKyAqCisgKiBQdXJwb3NlIDogUlRMODM2N0Mgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJIGZvciBSVEw4MzY3QworICogRmVhdHVyZSA6IEZpZWxkIHNlbGVjdG9yIHJlbGF0ZWQgZnVuY3Rpb25zCisgKgorICovCisKKyNpZm5kZWYgX1JUTDgzNjdDX0FTSUNEUlZfX0hTQl9IXworI2RlZmluZSBfUlRMODM2N0NfQVNJQ0RSVl9fSFNCX0hfCisKKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2Lmg+CisKKyNkZWZpbmUgUlRMODM2N0NfRklFTERTRUxfRk9STUFUX05VTUJFUiAgICAgICgxNikKKyNkZWZpbmUgUlRMODM2N0NfRklFTERTRUxfTUFYX09GRlNFVCAgICAgICAgICgyNTUpCisKK2VudW0gRklFTERTRUxfRk9STUFUX0ZPUk1BVAoreworICAgIEZJRUxEU0VMX0ZPUk1BVF9ERUZBVUxUID0gMCwKKyAgICBGSUVMRFNFTF9GT1JNQVRfUkFXLAorICAgIEZJRUxEU0VMX0ZPUk1BVF9MTEMsCisgICAgRklFTERTRUxfRk9STUFUX0lQVjQsCisgICAgRklFTERTRUxfRk9STUFUX0FSUCwKKyAgICBGSUVMRFNFTF9GT1JNQVRfSVBWNiwKKyAgICBGSUVMRFNFTF9GT1JNQVRfSVBQQVlMT0FELAorICAgIEZJRUxEU0VMX0ZPUk1BVF9MNFBBWUxPQUQsCisgICAgRklFTERTRUxfRk9STUFUX0VORAorfTsKKworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNGaWVsZFNlbGVjdG9yKHJ0a191aW50MzIgaW5kZXgsIHJ0a191aW50MzIgZm9ybWF0LCBydGtfdWludDMyIG9mZnNldCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0ZpZWxkU2VsZWN0b3IocnRrX3VpbnQzMiBpbmRleCwgcnRrX3VpbnQzMiogcEZvcm1hdCwgcnRrX3VpbnQzMiogcE9mZnNldCk7CisKKyNlbmRpZiAvKl9SVEw4MzY3Q19BU0lDRFJWX19IU0JfSF8qLworCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGw4MzY3Y19hc2ljZHJ2X2kyYy5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl9pMmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWIwOTVhCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl9pMmMuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogMzg2NTEgJAorICogJERhdGU6IDIwMTYtMDItMjcgMTQ6MzI6NTYgKzA4MDAgKKlQpFQsIDE3IKV8pOsgMjAxNikgJAorICoKKyAqIFB1cnBvc2UgOiBSVEw4MzY3QyBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkgZm9yIFJUTDgzNjdDCisgKiBGZWF0dXJlIDogSTJDIHJlbGF0ZWQgZnVuY3Rpb25zCisgKgorICovCisKKworI2lmbmRlZiBfUlRMODM2N0NfQVNJQ0RSVl9JMkNfSF8KKyNkZWZpbmUgX1JUTDgzNjdDX0FTSUNEUlZfSTJDX0hfCisjaW5jbHVkZSA8cnRrX3R5cGVzLmg+CisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydi5oPgorCisKKyNkZWZpbmUgVElNRVJPVVRfRk9SX01JQ1JPU0VNSSAoMHg0MDApCisKKyNkZWZpbmUgR1BJT19JTlBVVCAxCisjZGVmaW5lIEdQSU9fT1VUUFVUIDIKKworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNJMkNfY2hlY2tCdXNJZGxlKHZvaWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNJMkNTdGFydENtZCh2b2lkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljSTJDU3RvcENtZCh2b2lkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljSTJDVHhPbmVDaGFyQ21kKHJ0a191aW50OCBvbmVDaGFyKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljSTJDY2hlY2tSeEFjayh2b2lkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljSTJDUnhPbmVDaGFyQ21kKHJ0a191aW50OCAqcFZhbHVlKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljSTJDVHhBY2tDbWQodm9pZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0kyQ1R4Tm9BY2tDbWQodm9pZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0kyQ1NvZnRSU1RzZXFDbWQodm9pZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0kyQ0dwaW9QaW5Hcm91cChydGtfdWludDMyIHBpbkdyb3VwX0lEKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljSTJDR3Bpb1Bpbkdyb3VwKHJ0a191aW50MzIgKiBwUGluR3JvdXBfSUQpOworCisKKworCisKKyNlbmRpZiAvKiNpZm5kZWYgX1JUTDgzNjdDX0FTSUNEUlZfSTJDX0hfKi8KKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl9pZ21wLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGw4MzY3Y19hc2ljZHJ2X2lnbXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODc5YjZiCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl9pZ21wLmgKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogJFJldmlzaW9uOiA3NjMwNiAkCisgKiAkRGF0ZTogMjAxNy0wMy0wOCAxNToxMzo1OCArMDgwMCAo6YCx5LiJLCAwOCDkuInmnIggMjAxNykgJAorICoKKyAqIFB1cnBvc2UgOiBSVEw4MzY3QyBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkgZm9yIFJUTDgzNjdDCisgKiBGZWF0dXJlIDogSUdNUCByZWxhdGVkIGZ1bmN0aW9ucworICoKKyAqLworCisjaWZuZGVmIF9SVEw4MzY3Q19BU0lDRFJWX0lHTVBfSF8KKyNkZWZpbmUgX1JUTDgzNjdDX0FTSUNEUlZfSUdNUF9IXworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEhlYWRlciBGaWxlIGluY2x1c2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydi5oPgorCisjZGVmaW5lIFJUTDgzNjdDX01BWF9MRUFWRV9USU1FUiAgICAgICAgKDcpCisjZGVmaW5lIFJUTDgzNjdDX01BWF9RVUVSWV9JTlQgICAgICAgICAgKDB4RkZGRikKKyNkZWZpbmUgUlRMODM2N0NfTUFYX1JPQl9WQVIgICAgICAgICAgICAoNykKKworI2RlZmluZSBSVEw4MzY3Q19JR01QX0dPVVBfTk8gICAgICAgICAgICgyNTYpCisjZGVmaW5lIFJUTDgzNjdDX0lHTVBfTUFYX0dPVVAgICAgICAgICAgKDB4RkYpCisjZGVmaW5lIFJUTDgzNjdDX0lHTVBfR1JQX0JMRU4gICAgICAgICAgKDMpCisjZGVmaW5lIFJUTDgzNjdDX1JPVVRFUl9QT1JUX0lOVkFMSUQgICAgKDB4RikKKworZW51bSBSVEw4MzY3Q19JR01QVEFCTEVfRlVMTF9PUAoreworICAgIFRBQkxFX0ZVTExfRk9SV0FSRCA9IDAsCisgICAgVEFCTEVfRlVMTF9EUk9QLAorICAgIFRBQkxFX0ZVTExfVFJBUCwKKyAgICBUQUJMRV9GVUxMX09QX0VORAorfTsKKworZW51bSBSVEw4MzY3Q19DUkNfRVJSX09QCit7CisgICAgQ1JDX0VSUl9EUk9QID0gMCwKKyAgICBDUkNfRVJSX1RSQVAsCisgICAgQ1JDX0VSUl9GT1JXQVJELAorICAgIENSQ19FUlJfT1BfRU5ECit9OworCitlbnVtIFJUTDgzNjdDX0lHTVBfTUxEX1BST1RPQ09MX09QCit7CisgICAgUFJPVE9DT0xfT1BfQVNJQyA9IDAsCisgICAgUFJPVE9DT0xfT1BfRkxPT0QsCisgICAgUFJPVE9DT0xfT1BfVFJBUCwKKyAgICBQUk9UT0NPTF9PUF9EUk9QLAorICAgIFBST1RPQ09MX09QX0VORAorfTsKKworZW51bSBSVEw4MzY3Q19JR01QX01MRF9CWVBBU1NfR1JPVVAKK3sKKyAgICBCWVBBU1NfMjI0XzBfMF9YID0gMCwKKyAgICBCWVBBU1NfMjI0XzBfMV9YLAorICAgIEJZUEFTU18yMzlfMjU1XzI1NV9YLAorICAgIEJZUEFTU19JUFY2XzAwWFgsCisgICAgQllQQVNTX0dST1VQX0VORAorfTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBydGtfdWludDMyIHAwX3RpbWVyOworICAgIHJ0a191aW50MzIgcDFfdGltZXI7CisgICAgcnRrX3VpbnQzMiBwMl90aW1lcjsKKyAgICBydGtfdWludDMyIHAzX3RpbWVyOworICAgIHJ0a191aW50MzIgcDRfdGltZXI7CisgICAgcnRrX3VpbnQzMiBwNV90aW1lcjsKKyAgICBydGtfdWludDMyIHA2X3RpbWVyOworICAgIHJ0a191aW50MzIgcDdfdGltZXI7CisgICAgcnRrX3VpbnQzMiBwOF90aW1lcjsKKyAgICBydGtfdWludDMyIHA5X3RpbWVyOworICAgIHJ0a191aW50MzIgcDEwX3RpbWVyOworICAgIHJ0a191aW50MzIgcmVwb3J0X3N1cHBfZmxhZzsKKworfXJ0bDgzNjdjX2lnbXBncm91cDsKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyB0aGUgcHJvcHJpZXRhcnkgc29mdHdhcmUgb2YgUmVhbHRlayBTZW1pY29uZHVjdG9yCisgKiBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIGxpY2Vuc29ycywgYW5kIG9ubHkgYmUgdXNlZCwgZHVwbGljYXRlZCwKKyAqIG1vZGlmaWVkIG9yIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBhdXRob3JpemVkIGxpY2Vuc2UgZnJvbSBSZWFsdGVrLgorICoKKyAqIEFOWSBVU0UgT0YgVEhFIFNPRlRXQVJFIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUgorICogVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKyAqCisgKiAkUmV2aXNpb246IDc2MzA2ICQKKyAqICREYXRlOiAyMDE3LTAzLTA4IDE1OjEzOjU4ICswODAwICjpgLHkuIksIDA4IOS4ieaciCAyMDE3KSAkCisgKgorICogUHVycG9zZSA6IFJUTDgzNjdDIHN3aXRjaCBoaWdoLWxldmVsIEFQSSBmb3IgUlRMODM2N0MKKyAqIEZlYXR1cmUgOiBJR01QIHJlbGF0ZWQgZnVuY3Rpb25zCisgKgorICovCisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl9pZ21wLmg+CisKK3JldF90IHJ0bDgzNjdjX3NldEFzaWNJZ21wKHJ0a191aW50MzIgZW5hYmxlZCk7CityZXRfdCBydGw4MzY3Y19nZXRBc2ljSWdtcChydGtfdWludDMyICpwRW5hYmxlZCk7CityZXRfdCBydGw4MzY3Y19zZXRBc2ljSXBNdWx0aWNhc3RWbGFuTGVha3kocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGVuYWJsZWQgKTsKK3JldF90IHJ0bDgzNjdjX2dldEFzaWNJcE11bHRpY2FzdFZsYW5MZWFreShydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgKnBFbmFibGVkICk7CityZXRfdCBydGw4MzY3Y19zZXRBc2ljSUdNUFRhYmxlRnVsbE9QKHJ0a191aW50MzIgb3BlcmF0aW9uKTsKK3JldF90IHJ0bDgzNjdjX2dldEFzaWNJR01QVGFibGVGdWxsT1AocnRrX3VpbnQzMiAqcE9wZXJhdGlvbik7CityZXRfdCBydGw4MzY3Y19zZXRBc2ljSUdNUENSQ0Vyck9QKHJ0a191aW50MzIgb3BlcmF0aW9uKTsKK3JldF90IHJ0bDgzNjdjX2dldEFzaWNJR01QQ1JDRXJyT1AocnRrX3VpbnQzMiAqcE9wZXJhdGlvbik7CityZXRfdCBydGw4MzY3Y19zZXRBc2ljSUdNUEZhc3RMZWF2ZUVuKHJ0a191aW50MzIgZW5hYmxlZCk7CityZXRfdCBydGw4MzY3Y19nZXRBc2ljSUdNUEZhc3RMZWF2ZUVuKHJ0a191aW50MzIgKnBFbmFibGVkKTsKK3JldF90IHJ0bDgzNjdjX3NldEFzaWNJR01QTGVhdmVUaW1lcihydGtfdWludDMyIGxlYXZlX3RpbWVyKTsKK3JldF90IHJ0bDgzNjdjX2dldEFzaWNJR01QTGVhdmVUaW1lcihydGtfdWludDMyICpwTGVhdmVfdGltZXIpOworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0lHTVBRdWVyeUludGVydmFsKHJ0a191aW50MzIgaW50ZXJ2YWwpOworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0lHTVBRdWVyeUludGVydmFsKHJ0a191aW50MzIgKnBJbnRlcnZhbCk7CityZXRfdCBydGw4MzY3Y19zZXRBc2ljSUdNUFJvYlZhcihydGtfdWludDMyIHJvYl92YXIpOworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0lHTVBSb2JWYXIocnRrX3VpbnQzMiAqcFJvYl92YXIpOworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0lHTVBTdGF0aWNSb3V0ZXJQb3J0KHJ0a191aW50MzIgcG1zayk7CityZXRfdCBydGw4MzY3Y19nZXRBc2ljSUdNUFN0YXRpY1JvdXRlclBvcnQocnRrX3VpbnQzMiAqcE1zayk7CityZXRfdCBydGw4MzY3Y19zZXRBc2ljSUdNUEFsbG93RHluYW1pY1JvdXRlclBvcnQocnRrX3VpbnQzMiBwbXNrKTsKK3JldF90IHJ0bDgzNjdjX2dldEFzaWNJR01QQWxsb3dEeW5hbWljUm91dGVyUG9ydChydGtfdWludDMyICpwUG1zayk7CityZXRfdCBydGw4MzY3Y19nZXRBc2ljSUdNUGR5bmFtaWNSb3V0ZXJQb3J0MShydGtfdWludDMyICpwUG9ydCwgcnRrX3VpbnQzMiAqcFRpbWVyKTsKK3JldF90IHJ0bDgzNjdjX2dldEFzaWNJR01QZHluYW1pY1JvdXRlclBvcnQyKHJ0a191aW50MzIgKnBQb3J0LCBydGtfdWludDMyICpwVGltZXIpOworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0lHTVBTdXBwcmVzc2lvbihydGtfdWludDMyIHJlcG9ydF9zdXBwX2VuYWJsZWQsIHJ0a191aW50MzIgbGVhdmVfc3VwcF9lbmFibGVkKTsKK3JldF90IHJ0bDgzNjdjX2dldEFzaWNJR01QU3VwcHJlc3Npb24ocnRrX3VpbnQzMiAqcFJlcG9ydF9zdXBwX2VuYWJsZWQsIHJ0a191aW50MzIgKnBMZWF2ZV9zdXBwX2VuYWJsZWQpOworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0lHTVBRdWVyeVJYKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBhbGxvd19xdWVyeSk7CityZXRfdCBydGw4MzY3Y19nZXRBc2ljSUdNUFF1ZXJ5UlgocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyICpwQWxsb3dfcXVlcnkpOworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0lHTVBSZXBvcnRSWChydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgYWxsb3dfcmVwb3J0KTsKK3JldF90IHJ0bDgzNjdjX2dldEFzaWNJR01QUmVwb3J0UlgocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyICpwQWxsb3dfcmVwb3J0KTsKK3JldF90IHJ0bDgzNjdjX3NldEFzaWNJR01QTGVhdmVSWChydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgYWxsb3dfbGVhdmUpOworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0lHTVBMZWF2ZVJYKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcEFsbG93X2xlYXZlKTsKK3JldF90IHJ0bDgzNjdjX3NldEFzaWNJR01QTVJQUlgocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGFsbG93X21ycCk7CityZXRfdCBydGw4MzY3Y19nZXRBc2ljSUdNUE1SUFJYKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcEFsbG93X21ycCk7CityZXRfdCBydGw4MzY3Y19zZXRBc2ljSUdNUE1jRGF0YVJYKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBhbGxvd19tY2RhdGEpOworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0lHTVBNY0RhdGFSWChydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgKnBBbGxvd19tY2RhdGEpOworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0lHTVB2MU9wZWFydGlvbihydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgaWdtcHYxX29wKTsKK3JldF90IHJ0bDgzNjdjX2dldEFzaWNJR01QdjFPcGVhcnRpb24ocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyICpwSWdtcHYxX29wKTsKK3JldF90IHJ0bDgzNjdjX3NldEFzaWNJR01QdjJPcGVhcnRpb24ocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGlnbXB2Ml9vcCk7CityZXRfdCBydGw4MzY3Y19nZXRBc2ljSUdNUHYyT3BlYXJ0aW9uKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcElnbXB2Ml9vcCk7CityZXRfdCBydGw4MzY3Y19zZXRBc2ljSUdNUHYzT3BlYXJ0aW9uKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBpZ21wdjNfb3ApOworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0lHTVB2M09wZWFydGlvbihydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgKnBJZ21wdjNfb3ApOworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY01MRHYxT3BlYXJ0aW9uKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBtbGR2MV9vcCk7CityZXRfdCBydGw4MzY3Y19nZXRBc2ljTUxEdjFPcGVhcnRpb24ocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyICpwTWxkdjFfb3ApOworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY01MRHYyT3BlYXJ0aW9uKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBtbGR2Ml9vcCk7CityZXRfdCBydGw4MzY3Y19nZXRBc2ljTUxEdjJPcGVhcnRpb24ocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyICpwTWxkdjJfb3ApOworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0lHTVBQb3J0TUFYR3JvdXAocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIG1heF9ncm91cCk7CityZXRfdCBydGw4MzY3Y19nZXRBc2ljSUdNUFBvcnRNQVhHcm91cChydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgKnBNYXhfZ3JvdXApOworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0lHTVBQb3J0Q3VycmVudEdyb3VwKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcEN1cnJlbnRfZ3JvdXApOworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0lHTVBHcm91cChydGtfdWludDMyIGlkeCwgcnRrX3VpbnQzMiAqcFZhbGlkLCBydGw4MzY3Y19pZ21wZ3JvdXAgKnBHcnApOworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0lwTXVsdGljYXN0UG9ydElzb0xlYWt5KHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBlbmFibGVkKTsKK3JldF90IHJ0bDgzNjdjX2dldEFzaWNJcE11bHRpY2FzdFBvcnRJc29MZWFreShydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgKnBFbmFibGVkKTsKK3JldF90IHJ0bDgzNjdjX3NldEFzaWNJR01QUmVwb3J0TGVhdmVGbG9vZChydGtfdWludDMyIGZsb29kKTsKK3JldF90IHJ0bDgzNjdjX2dldEFzaWNJR01QUmVwb3J0TGVhdmVGbG9vZChydGtfdWludDMyICpwRmxvb2QpOworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0lHTVBEcm9wTGVhdmVaZXJvKHJ0a191aW50MzIgZHJvcCk7CityZXRfdCBydGw4MzY3Y19nZXRBc2ljSUdNUERyb3BMZWF2ZVplcm8ocnRrX3VpbnQzMiAqcERyb3ApOworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0lHTVBCeXBhc3NTdG9ybUNUUkwocnRrX3VpbnQzMiBieXBhc3MpOworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0lHTVBCeXBhc3NTdG9ybUNUUkwocnRrX3VpbnQzMiAqcEJ5cGFzcyk7CityZXRfdCBydGw4MzY3Y19zZXRBc2ljSUdNUElzb0xlYWt5KHJ0a191aW50MzIgbGVha3kpOworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0lHTVBJc29MZWFreShydGtfdWludDMyICpwTGVha3kpOworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0lHTVBWTEFOTGVha3kocnRrX3VpbnQzMiBsZWFreSk7CityZXRfdCBydGw4MzY3Y19nZXRBc2ljSUdNUFZMQU5MZWFreShydGtfdWludDMyICpwTGVha3kpOworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0lHTVBCeXBhc3NHcm91cChydGtfdWludDMyIGJ5cGFzc1R5cGUsIHJ0a191aW50MzIgZW5hYmxlZCk7CityZXRfdCBydGw4MzY3Y19nZXRBc2ljSUdNUEJ5cGFzc0dyb3VwKHJ0a191aW50MzIgYnlwYXNzVHlwZSwgcnRrX3VpbnQzMiAqcEVuYWJsZWQpOworCisjZW5kaWYgLyojaWZuZGVmIF9SVEw4MzY3Q19BU0lDRFJWX0lHTVBfSF8qLworCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGw4MzY3Y19hc2ljZHJ2X2luYndjdHJsLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGw4MzY3Y19hc2ljZHJ2X2luYndjdHJsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBmMzU0NQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX2FzaWNkcnZfaW5id2N0cmwuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNzYzMDYgJAorICogJERhdGU6IDIwMTctMDMtMDggMTU6MTM6NTggKzA4MDAgKLZnpFQsIDA4IKRUpOsgMjAxNykgJAorICoKKyAqIFB1cnBvc2UgOiBSVEw4MzY3QyBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkgZm9yIFJUTDgzNjdDCisgKiBGZWF0dXJlIDogSW5ncmVzcyBiYW5kd2lkdGggY29udHJvbCByZWxhdGVkIGZ1bmN0aW9ucworICoKKyAqLworCisjaWZuZGVmIF9SVEw4MzY3Q19BU0lDRFJWX0lOQldDVFJMX0hfCisjZGVmaW5lIF9SVEw4MzY3Q19BU0lDRFJWX0lOQldDVFJMX0hfCisKKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2Lmg+CisKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljUG9ydEluZ3Jlc3NCYW5kd2lkdGgocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGJhbmR3aWR0aCwgcnRrX3VpbnQzMiBwcmVpZmcsIHJ0a191aW50MzIgZW5hYmxlRkMpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNQb3J0SW5ncmVzc0JhbmR3aWR0aChydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIqIHBCYW5kd2lkdGgsIHJ0a191aW50MzIqIHBQcmVpZmcsIHJ0a191aW50MzIqIHBFbmFibGVGQyApOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNQb3J0SW5ncmVzc0JhbmR3aWR0aEJ5cGFzcyhydGtfdWludDMyIGVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNQb3J0SW5ncmVzc0JhbmR3aWR0aEJ5cGFzcyhydGtfdWludDMyKiBwRW5hYmxlZCk7CisKKworI2VuZGlmIC8qX1JUTDgzNjdDX0FTSUNEUlZfSU5CV0NUUkxfSF8qLworCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGw4MzY3Y19hc2ljZHJ2X2ludGVycnVwdC5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl9pbnRlcnJ1cHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Yjc4MDE0Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl9pbnRlcnJ1cHQuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNzYzMDYgJAorICogJERhdGU6IDIwMTctMDMtMDggMTU6MTM6NTggKzA4MDAgKLZnpFQsIDA4IKRUpOsgMjAxNykgJAorICoKKyAqIFB1cnBvc2UgOiBSVEw4MzY3QyBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkgZm9yIFJUTDgzNjdDCisgKiBGZWF0dXJlIDogSW50ZXJydXB0IHJlbGF0ZWQgZnVuY3Rpb25zCisgKgorICovCisKKyNpZm5kZWYgX1JUTDgzNjdDX0FTSUNEUlZfSU5URVJSVVBUX0hfCisjZGVmaW5lIF9SVEw4MzY3Q19BU0lDRFJWX0lOVEVSUlVQVF9IXworCisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydi5oPgorCit0eXBlZGVmIGVudW0gUlRMODM2N0NfSU5UUl9JTVJTX0UKK3sKKyAgICBJTVJTX0xJTktfQ0hBTkdFLAorICAgIElNUlNfTUVURVJfRVhDRUVELAorICAgIElNUlNfTDJfTEVBUk4sCisgICAgSU1SU19TUEVFRF9DSEFOR0UsCisgICAgSU1SU19TUEVDSUFMX0NPTkdFU1RJT04sCisgICAgSU1SU19HUkVFTl9GRUFUVVJFLAorICAgIElNUlNfTE9PUF9ERVRFQ1RJT04sCisgICAgSU1SU184MDUxLAorICAgIElNUlNfQ0FCTEVfRElBRywKKyAgICBJTVJTX0FDTCwKKyAgICBJTVJTX1JFU0VSVkVELCAvKiBVbnVzZWQgKi8KKyAgICBJTVJTX1NMSUVOVCwKKyAgICBJTVJTX0VORCwKK31SVEw4MzY3Q19JTlRSX0lNUlM7CisKK3R5cGVkZWYgZW51bSBSVEw4MzY3Q19JTlRSX0lORElDQVRPUl9FCit7CisgICAgSU5UUlNUX0wyX0xFQVJOID0gMCwKKyAgICBJTlRSU1RfU1BFRURfQ0hBTkdFLAorICAgIElOVFJTVF9TUEVDSUFMX0NPTkdFU1RJT04sCisgICAgSU5UUlNUX1BPUlRfTElOS0RPV04sCisgICAgSU5UUlNUX1BPUlRfTElOS1VQLAorICAgIElOVFJTVF9NRVRFUjBfMTUsCisgICAgSU5UUlNUX01FVEVSMTZfMzEsCisgICAgSU5UUlNUX1JMRFBfTE9PUEVELAorICAgIElOVFJTVF9STERQX1JFTEVBU0VELAorICAgIElOVFJTVF9TWVNfTEVBUk4sCisgICAgSU5UUlNUX0VORCwKK31SVEw4MzY3Q19JTlRSX0lORElDQVRPUjsKKworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNJbnRlcnJ1cHRQb2xhcml0eShydGtfdWludDMyIHBvbGFyaXR5KTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljSW50ZXJydXB0UG9sYXJpdHkocnRrX3VpbnQzMiogcFBvbGFyaXR5KTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljSW50ZXJydXB0TWFzayhydGtfdWludDMyIGltcik7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0ludGVycnVwdE1hc2socnRrX3VpbnQzMiogcEltcik7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0ludGVycnVwdFN0YXR1cyhydGtfdWludDMyIGltcyk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0ludGVycnVwdFN0YXR1cyhydGtfdWludDMyKiBwSW1zKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljSW50ZXJydXB0UmVsYXRlZFN0YXR1cyhydGtfdWludDMyIHR5cGUsIHJ0a191aW50MzIgc3RhdHVzKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljSW50ZXJydXB0UmVsYXRlZFN0YXR1cyhydGtfdWludDMyIHR5cGUsIHJ0a191aW50MzIqIHBTdGF0dXMpOworCisKKyNlbmRpZiAvKiNpZm5kZWYgX1JUTDgzNjdDX0FTSUNEUlZfSU5URVJSVVBUX0hfKi8KKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl9sZWQuaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX2FzaWNkcnZfbGVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdmOGUyMAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX2FzaWNkcnZfbGVkLmgKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogJFJldmlzaW9uOiA3NjMwNiAkCisgKiAkRGF0ZTogMjAxNy0wMy0wOCAxNToxMzo1OCArMDgwMCAotmekVCwgMDggpFSk6yAyMDE3KSAkCisgKgorICogUHVycG9zZSA6IFJUTDgzNjdDIHN3aXRjaCBoaWdoLWxldmVsIEFQSSBmb3IgUlRMODM2N0MKKyAqIEZlYXR1cmUgOiBMRUQgcmVsYXRlZCBmdW5jdGlvbnMKKyAqCisgKi8KKworI2lmbmRlZiBfUlRMODM2N0NfQVNJQ0RSVl9MRURfSF8KKyNkZWZpbmUgX1JUTDgzNjdDX0FTSUNEUlZfTEVEX0hfCisKKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2Lmg+CisKKyNkZWZpbmUgUlRMODM2N0NfTEVER1JPVVBOTyAgICAgICAgICAgICAgICAgMworI2RlZmluZSBSVEw4MzY3Q19MRURHUk9VUE1BU0sgICAgICAgICAgICAgICAweDcKKyNkZWZpbmUgUlRMODM2N0NfTEVEX0ZPUkNFX01PREVfQkFTRSAgICAgICAgUlRMODM2N0NfUkVHX0NQVV9GT1JDRV9MRUQwX0NGRzAKKyNkZWZpbmUgUlRMODM2N0NfTEVEX0ZPUkNFX0NUUkwgICAgICAgICAgICAgUlRMODM2N0NfUkVHX0NQVV9GT1JDRV9MRURfQ0ZHCisKK2VudW0gUlRMODM2N0NfTEVET1B7CisKKyAgICBMRURPUF9TQ0FOMD0wLAorICAgIExFRE9QX1NDQU4xLAorICAgIExFRE9QX1BBUkFMTEVMLAorICAgIExFRE9QX1NFUklBTCwKKyAgICBMRURPUF9FTkQsCit9OworCitlbnVtIFJUTDgzNjdDX0xFRFNFUkFDVHsKKworICAgIExFRFNFUkFDVF9ISUdIPTAsCisgICAgTEVEU0VSQUNUX0xPVywKKyAgICBMRURTRVJBQ1RfTUFYLAorfTsKKworZW51bSBSVEw4MzY3Q19MRURTRVJ7CisKKyAgICBMRURTRVJfMTZHPTAsCisgICAgTEVEU0VSXzhHLAorICAgIExFRFNFUl9NQVgsCit9OworCitlbnVtIFJUTDgzNjdDX0xFRENPTkZ7CisKKyAgICBMRURDT05GX0xFRE9GRj0wLAorICAgIExFRENPTkZfRFVQQ09MLAorICAgIExFRENPTkZfTElOS19BQ1QsCisgICAgTEVEQ09ORl9TUEQxMDAwLAorICAgIExFRENPTkZfU1BEMTAwLAorICAgIExFRENPTkZfU1BEMTAsCisgICAgTEVEQ09ORl9TUEQxMDAwQUNULAorICAgIExFRENPTkZfU1BEMTAwQUNULAorICAgIExFRENPTkZfU1BEMTBBQ1QsCisgICAgTEVEQ09ORl9TUEQxMDAxMEFDVCwKKyAgICBMRURDT05GX0xPT1BERVRFQ1QsCisgICAgTEVEQ09ORl9FRUUsCisgICAgTEVEQ09ORl9MSU5LUlgsCisgICAgTEVEQ09ORl9MSU5LVFgsCisgICAgTEVEQ09ORl9NQVNURVIsCisgICAgTEVEQ09ORl9BQ1QsCisgICAgTEVEQ09ORl9FTkQKK307CisKK2VudW0gUlRMODM2N0NfTEVEQkxJTktSQVRFeworCisgICAgTEVEQkxJTktSQVRFXzMyTVM9MCwKKyAgICBMRURCTElOS1JBVEVfNjRNUywKKyAgICBMRURCTElOS1JBVEVfMTI4TVMsCisgICAgTEVEQkxJTktSQVRFXzI1Nk1TLAorICAgIExFREJMSU5LUkFURV81MTJNUywKKyAgICBMRURCTElOS1JBVEVfMTAyNE1TLAorICAgIExFREJMSU5LUkFURV80OE1TLAorICAgIExFREJMSU5LUkFURV85Nk1TLAorICAgIExFREJMSU5LUkFURV9FTkQsCit9OworCitlbnVtIFJUTDgzNjdDX0xFREZPUkNFTU9ERXsKKworICAgIExFREZPUkNFTU9ERV9OT1JNQUw9MCwKKyAgICBMRURGT1JDRU1PREVfQkxJTkssCisgICAgTEVERk9SQ0VNT0RFX09GRiwKKyAgICBMRURGT1JDRU1PREVfT04sCisgICAgTEVERk9SQ0VNT0RFX0VORCwKK307CisKK2VudW0gUlRMODM2N0NfTEVERk9SQ0VSQVRFeworCisgICAgTEVERk9SQ0VSQVRFXzUxMk1TPTAsCisgICAgTEVERk9SQ0VSQVRFXzEwMjRNUywKKyAgICBMRURGT1JDRVJBVEVfMjA0OE1TLAorICAgIExFREZPUkNFUkFURV9OT1JNQUwsCisgICAgTEVERk9SQ0VSQVRFX0VORCwKKworfTsKKworZW51bSBSVEw4MzY3Q19MRURNT0RFCit7CisgICAgUlRMODM2N0NfTEVEX01PREVfMCA9IDAsCisgICAgUlRMODM2N0NfTEVEX01PREVfMSwKKyAgICBSVEw4MzY3Q19MRURfTU9ERV8yLAorICAgIFJUTDgzNjdDX0xFRF9NT0RFXzMsCisgICAgUlRMODM2N0NfTEVEX01PREVfRU5ECit9OworCitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0xlZEluZGljYXRlSW5mb0NvbmZpZyhydGtfdWludDMyIGxlZG5vLCBydGtfdWludDMyIGNvbmZpZyk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0xlZEluZGljYXRlSW5mb0NvbmZpZyhydGtfdWludDMyIGxlZG5vLCBydGtfdWludDMyKiBwQ29uZmlnKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljRm9yY2VMZWQocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGdyb3VwLCBydGtfdWludDMyIG1vZGUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNGb3JjZUxlZChydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgZ3JvdXAsIHJ0a191aW50MzIqIHBNb2RlKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljRm9yY2VHcm91cExlZChydGtfdWludDMyIGdyb3VwbWFzaywgcnRrX3VpbnQzMiBtb2RlKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljRm9yY2VHcm91cExlZChydGtfdWludDMyKiBncm91cG1hc2ssIHJ0a191aW50MzIqIHBNb2RlKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljTGVkQmxpbmtSYXRlKHJ0a191aW50MzIgYmxpbmtSYXRlKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljTGVkQmxpbmtSYXRlKHJ0a191aW50MzIqIHBCbGlua1JhdGUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNMZWRGb3JjZUJsaW5rUmF0ZShydGtfdWludDMyIGJsaW5rUmF0ZSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0xlZEZvcmNlQmxpbmtSYXRlKHJ0a191aW50MzIqIHBCbGlua1JhdGUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNMZWRHcm91cE1vZGUocnRrX3VpbnQzMiBtb2RlKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljTGVkR3JvdXBNb2RlKHJ0a191aW50MzIqIHBNb2RlKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljTGVkR3JvdXBFbmFibGUocnRrX3VpbnQzMiBncm91cCwgcnRrX3VpbnQzMiBwb3J0bWFzayk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0xlZEdyb3VwRW5hYmxlKHJ0a191aW50MzIgZ3JvdXAsIHJ0a191aW50MzIgKnBvcnRtYXNrKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljTGVkT3BlcmF0aW9uTW9kZShydGtfdWludDMyIG1vZGUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNMZWRPcGVyYXRpb25Nb2RlKHJ0a191aW50MzIgKm1vZGUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNMZWRTZXJpYWxNb2RlQ29uZmlnKHJ0a191aW50MzIgYWN0aXZlLCBydGtfdWludDMyIHNlcmltb2RlKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljTGVkU2VyaWFsTW9kZUNvbmZpZyhydGtfdWludDMyICphY3RpdmUsIHJ0a191aW50MzIgKnNlcmltb2RlKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljTGVkT3V0cHV0RW5hYmxlKHJ0a191aW50MzIgZW5hYmxlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0xlZE91dHB1dEVuYWJsZShydGtfdWludDMyICpwdHJfZW5hYmxlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0xlZFNlcmlhbE91dHB1dChydGtfdWludDMyIG91dHB1dCwgcnRrX3VpbnQzMiBwbWFzayk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0xlZFNlcmlhbE91dHB1dChydGtfdWludDMyICpwT3V0cHV0LCBydGtfdWludDMyICpwUG1hc2spOworCisKKyNlbmRpZiAvKiNpZm5kZWYgX1JUTDgzNjdDX0FTSUNEUlZfTEVEX0hfKi8KKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl9sdXQuaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX2FzaWNkcnZfbHV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk0ZWEwNwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX2FzaWNkcnZfbHV0LmgKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogJFJldmlzaW9uOiA3NjMwNiAkCisgKiAkRGF0ZTogMjAxNy0wMy0wOCAxNToxMzo1OCArMDgwMCAotmekVCwgMDggpFSk6yAyMDE3KSAkCisgKgorICogUHVycG9zZSA6IFJUTDgzNjdDIHN3aXRjaCBoaWdoLWxldmVsIEFQSSBmb3IgUlRMODM2N0MKKyAqIEZlYXR1cmUgOiBMVVQgcmVsYXRlZCBmdW5jdGlvbnMKKyAqCisgKi8KKworCisjaWZuZGVmIF9SVEw4MzY3Q19BU0lDRFJWX0xVVF9IXworI2RlZmluZSBfUlRMODM2N0NfQVNJQ0RSVl9MVVRfSF8KKworI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnYuaD4KKworI2RlZmluZSBSVEw4MzY3Q19MVVRfQUdFVElNRVJNQVggICAgICAgICg3KQorI2RlZmluZSBSVEw4MzY3Q19MVVRfQUdFU1BFRURNQVggICAgICAgICgzKQorI2RlZmluZSBSVEw4MzY3Q19MVVRfTEVBUk5MSU1JVE1BWCAgICAgICgweDEwNDApCisjZGVmaW5lIFJUTDgzNjdDX0xVVF9BRERSTUFYICAgICAgICAgICAgKDB4MTAzRikKKyNkZWZpbmUgUlRMODM2N0NfTFVUX0lQTUNHUlBfVEFCTEVfTUFYICAoMHgzRikKKyNkZWZpbmUgUlRMODM2N0NfTFVUX0VOVFJZX1NJWkUgICAgICAgICAoNikKKyNkZWZpbmUgUlRMODM2N0NfTFVUX0JVU1lfQ0hFQ0tfTk8gICAgICAoMTApCisKKyNkZWZpbmUgUlRMODM2N0NfTFVUX1RBQkxFX1NJWkUgICAgICAgICAoNikKKworZW51bSBSVEw4MzY3Q19MVVRIQVNITUVUSE9EeworCisgICAgTFVUSEFTSE1FVEhPRF9TVkw9MCwKKyAgICBMVVRIQVNITUVUSE9EX0lWTCwKKyAgICBMVVRIQVNITUVUSE9EX0VORCwKK307CisKKworZW51bSBSVEw4MzY3Q19MUk5PVkVSQUNUeworCisgICAgTFJOT1ZFUkFDVF9GT1JXQVJEPTAsCisgICAgTFJOT1ZFUkFDVF9EUk9QLAorICAgIExSTk9WRVJBQ1RfVFJBUCwKKyAgICBMUk5PVkVSQUNUX0VORCwKK307CisKK2VudW0gUlRMODM2N0NfTFVUUkVBRE1FVEhPRHsKKworICAgIExVVFJFQURNRVRIT0RfTUFDID0wLAorICAgIExVVFJFQURNRVRIT0RfQUREUkVTUywKKyAgICBMVVRSRUFETUVUSE9EX05FWFRfQUREUkVTUywKKyAgICBMVVRSRUFETUVUSE9EX05FWFRfTDJVQywKKyAgICBMVVRSRUFETUVUSE9EX05FWFRfTDJNQywKKyAgICBMVVRSRUFETUVUSE9EX05FWFRfTDNNQywKKyAgICBMVVRSRUFETUVUSE9EX05FWFRfTDJMM01DLAorICAgIExVVFJFQURNRVRIT0RfTkVYVF9MMlVDU1BBLAorfTsKKworZW51bSBSVEw4MzY3Q19GTFVTSE1PREUKK3sKKyAgICBGTFVTSE1ET0VfUE9SVCA9IDAsCisgICAgRkxVU0hNRE9FX1ZJRCwKKyAgICBGTFVTSE1ET0VfRklELAorICAgIEZMVVNITURPRV9FTkQsCit9OworCitlbnVtIFJUTDgzNjdDX0ZMVVNIVFlQRQoreworICAgIEZMVVNIVFlQRV9EWU5BTUlDID0gMCwKKyAgICBGTFVTSFRZUEVfQk9USCwKKyAgICBGTFVTSFRZUEVfRU5ELAorfTsKKworCit0eXBlZGVmIHN0cnVjdCBMVVRUQUJMRXsKKworICAgIGlwYWRkcl90IHNpcDsKKyAgICBpcGFkZHJfdCBkaXA7CisgICAgZXRoZXJfYWRkcl90IG1hYzsKKyAgICBydGtfdWludDE2IGl2bF9zdmw6MTsKKyAgICBydGtfdWludDE2IGN2aWRfZmlkOjEyOworICAgIHJ0a191aW50MTYgZmlkOjQ7CisgICAgcnRrX3VpbnQxNiBlZmlkOjM7CisKKyAgICBydGtfdWludDE2IG5vc2FsZWFybjoxOworICAgIHJ0a191aW50MTYgZGFfYmxvY2s6MTsKKyAgICBydGtfdWludDE2IHNhX2Jsb2NrOjE7CisgICAgcnRrX3VpbnQxNiBhdXRoOjE7CisgICAgcnRrX3VpbnQxNiBsdXRfcHJpOjM7CisgICAgcnRrX3VpbnQxNiBzYV9lbjoxOworICAgIHJ0a191aW50MTYgZndkX2VuOjE7CisgICAgcnRrX3VpbnQxNiBtYnI6MTE7CisgICAgcnRrX3VpbnQxNiBzcGE6NDsKKyAgICBydGtfdWludDE2IGFnZTozOworICAgIHJ0a191aW50MTYgbDNsb29rdXA6MTsKKyAgICBydGtfdWludDE2IGlnbXBfYXNpYzoxOworICAgIHJ0a191aW50MTYgaWdtcGlkeDo4OworCisgICAgcnRrX3VpbnQxNiBsb29rdXBfaGl0OjE7CisgICAgcnRrX3VpbnQxNiBsb29rdXBfYnVzeToxOworICAgIHJ0a191aW50MTYgYWRkcmVzczoxMzsKKworICAgIHJ0a191aW50MTYgbDN2aWRsb29rdXA6MTsKKyAgICBydGtfdWludDE2IGwzX3ZpZDoxMjsKKworICAgIHJ0a191aW50MTYgd2FpdF90aW1lOworCit9cnRsODM2N2NfbHV0dGI7CisKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljTHV0SXBNdWx0aWNhc3RMb29rdXAocnRrX3VpbnQzMiBlbmFibGVkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljTHV0SXBNdWx0aWNhc3RMb29rdXAocnRrX3VpbnQzMiogcEVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNMdXRJcE11bHRpY2FzdFZpZExvb2t1cChydGtfdWludDMyIGVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNMdXRJcE11bHRpY2FzdFZpZExvb2t1cChydGtfdWludDMyKiBwRW5hYmxlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0x1dEFnZVRpbWVyU3BlZWQocnRrX3VpbnQzMiB0aW1lciwgcnRrX3VpbnQzMiBzcGVlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0x1dEFnZVRpbWVyU3BlZWQocnRrX3VpbnQzMiogcFRpbWVyLCBydGtfdWludDMyKiBwU3BlZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNMdXRDYW1UYlVzYWdlKHJ0a191aW50MzIgZW5hYmxlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0x1dENhbVRiVXNhZ2UocnRrX3VpbnQzMiogcEVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNMdXRDYW1UeXBlKHJ0a191aW50MzIqIHBUeXBlKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljTHV0TGVhcm5MaW1pdE5vKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBudW1iZXIpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNMdXRMZWFybkxpbWl0Tm8ocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyKiBwTnVtYmVyKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljU3lzdGVtTHV0TGVhcm5MaW1pdE5vKHJ0a191aW50MzIgbnVtYmVyKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljU3lzdGVtTHV0TGVhcm5MaW1pdE5vKHJ0a191aW50MzIgKnBOdW1iZXIpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNMdXRMZWFybk92ZXJBY3QocnRrX3VpbnQzMiBhY3Rpb24pOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNMdXRMZWFybk92ZXJBY3QocnRrX3VpbnQzMiogcEFjdGlvbik7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1N5c3RlbUx1dExlYXJuT3ZlckFjdChydGtfdWludDMyIGFjdGlvbik7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1N5c3RlbUx1dExlYXJuT3ZlckFjdChydGtfdWludDMyICpwQWN0aW9uKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljU3lzdGVtTHV0TGVhcm5Qb3J0TWFzayhydGtfdWludDMyIHBvcnRtYXNrKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljU3lzdGVtTHV0TGVhcm5Qb3J0TWFzayhydGtfdWludDMyICpwUG9ydG1hc2spOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNMMkxvb2t1cFRiKHJ0bDgzNjdjX2x1dHRiICpwTDJUYWJsZSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0wyTG9va3VwVGIocnRrX3VpbnQzMiBtZXRob2QsIHJ0bDgzNjdjX2x1dHRiICpwTDJUYWJsZSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0x1dExlYXJuTm8ocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyKiBwTnVtYmVyKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljTHV0SXBMb29rdXBNZXRob2QocnRrX3VpbnQzMiB0eXBlKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljTHV0SXBMb29rdXBNZXRob2QocnRrX3VpbnQzMiogcFR5cGUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNMdXRGb3JjZUZsdXNoKHJ0a191aW50MzIgcG9ydG1hc2spOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNMdXRGb3JjZUZsdXNoU3RhdHVzKHJ0a191aW50MzIgKnBQb3J0bWFzayk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0x1dEZsdXNoTW9kZShydGtfdWludDMyIG1vZGUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNMdXRGbHVzaE1vZGUocnRrX3VpbnQzMiogcE1vZGUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNMdXRGbHVzaFR5cGUocnRrX3VpbnQzMiB0eXBlKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljTHV0Rmx1c2hUeXBlKHJ0a191aW50MzIqIHBUeXBlKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljTHV0Rmx1c2hWaWQocnRrX3VpbnQzMiB2aWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNMdXRGbHVzaFZpZChydGtfdWludDMyKiBwVmlkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljTHV0Rmx1c2hGaWQocnRrX3VpbnQzMiBmaWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNMdXRGbHVzaEZpZChydGtfdWludDMyKiBwRmlkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljTHV0RGlzYWJsZUFnaW5nKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBkaXNhYmxlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0x1dERpc2FibGVBZ2luZyhydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgKnBEaXNhYmxlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0x1dElQTUNHcm91cChydGtfdWludDMyIGluZGV4LCBpcGFkZHJfdCBncm91cF9hZGRyLCBydGtfdWludDMyIHZpZCwgcnRrX3VpbnQzMiBwbWFzaywgcnRrX3VpbnQzMiB2YWxpZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0x1dElQTUNHcm91cChydGtfdWludDMyIGluZGV4LCBpcGFkZHJfdCAqcEdyb3VwX2FkZHIsIHJ0a191aW50MzIgKnBWaWQsIHJ0a191aW50MzIgKnBQbWFzaywgcnRrX3VpbnQzMiAqcFZhbGlkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljTHV0TGlua0Rvd25Gb3JjZUFnaW5nKHJ0a191aW50MzIgZW5hYmxlKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljTHV0TGlua0Rvd25Gb3JjZUFnaW5nKHJ0a191aW50MzIgKnBFbmFibGUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNMdXRGbHVzaEFsbCh2b2lkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljTHV0Rmx1c2hBbGxTdGF0dXMocnRrX3VpbnQzMiAqcEJ1c3lTdGF0dXMpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNMdXRJcG1jRndkUm91dGVyUG9ydChydGtfdWludDMyIGVuYWJsZSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0x1dElwbWNGd2RSb3V0ZXJQb3J0KHJ0a191aW50MzIgKnBFbmFibGUpOworCisjZW5kaWYgLypfUlRMODM2N0NfQVNJQ0RSVl9MVVRfSF8qLworCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGw4MzY3Y19hc2ljZHJ2X21ldGVyLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGw4MzY3Y19hc2ljZHJ2X21ldGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE3NjFhOQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX2FzaWNkcnZfbWV0ZXIuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNzYzMDYgJAorICogJERhdGU6IDIwMTctMDMtMDggMTU6MTM6NTggKzA4MDAgKLZnpFQsIDA4IKRUpOsgMjAxNykgJAorICoKKyAqIFB1cnBvc2UgOiBSVEw4MzY3QyBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkgZm9yIFJUTDgzNjdDCisgKiBGZWF0dXJlIDogU2hhcmVkIG1ldGVyIHJlbGF0ZWQgZnVuY3Rpb25zCisgKgorICovCisKKyNpZm5kZWYgX1JUTDgzNjdDX0FTSUNEUlZfTUVURVJfSF8KKyNkZWZpbmUgX1JUTDgzNjdDX0FTSUNEUlZfTUVURVJfSF8KKworI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnYuaD4KKworCitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1NoYXJlTWV0ZXIocnRrX3VpbnQzMiBpbmRleCwgcnRrX3VpbnQzMiByYXRlLCBydGtfdWludDMyIGlmZyk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1NoYXJlTWV0ZXIocnRrX3VpbnQzMiBpbmRleCwgcnRrX3VpbnQzMiAqcFJhdGUsIHJ0a191aW50MzIgKnBJZmcpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNTaGFyZU1ldGVyQnVja2V0U2l6ZShydGtfdWludDMyIGluZGV4LCBydGtfdWludDMyIGxiVGhyZXNob2xkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljU2hhcmVNZXRlckJ1Y2tldFNpemUocnRrX3VpbnQzMiBpbmRleCwgcnRrX3VpbnQzMiAqcExiVGhyZXNob2xkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljU2hhcmVNZXRlclR5cGUocnRrX3VpbnQzMiBpbmRleCwgcnRrX3VpbnQzMiB0eXBlKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljU2hhcmVNZXRlclR5cGUocnRrX3VpbnQzMiBpbmRleCwgcnRrX3VpbnQzMiAqcFR5cGUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNNZXRlckV4Y2VlZFN0YXR1cyhydGtfdWludDMyIGluZGV4KTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljTWV0ZXJFeGNlZWRTdGF0dXMocnRrX3VpbnQzMiBpbmRleCwgcnRrX3VpbnQzMiogcFN0YXR1cyk7CisKKyNlbmRpZiAvKl9SVEw4MzY3Q19BU0lDRFJWX0ZDX0hfKi8KKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl9taWIuaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX2FzaWNkcnZfbWliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E0NmUwZgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX2FzaWNkcnZfbWliLmgKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogJFJldmlzaW9uOiA3NjMwNiAkCisgKiAkRGF0ZTogMjAxNy0wMy0wOCAxNToxMzo1OCArMDgwMCAotmekVCwgMDggpFSk6yAyMDE3KSAkCisgKgorICogUHVycG9zZSA6IFJUTDgzNjdDIHN3aXRjaCBoaWdoLWxldmVsIEFQSSBmb3IgUlRMODM2N0MKKyAqIEZlYXR1cmUgOiBNSUIgcmVsYXRlZCBmdW5jdGlvbnMKKyAqCisgKi8KKworI2lmbmRlZiBfUlRMODM2N0NfQVNJQ0RSVl9NSUJfSF8KKyNkZWZpbmUgX1JUTDgzNjdDX0FTSUNEUlZfTUlCX0hfCisKKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2Lmg+CisKKyNkZWZpbmUgUlRMODM2N0NfTUlCX1BPUlRfT0ZGU0VUICAgICAgICAgICAgICAgICgweDdDKQorI2RlZmluZSBSVEw4MzY3Q19NSUJfTEVBUk5FTlRSWURJU0NBUkRfT0ZGU0VUICAgKDB4NDIwKQorCisjZGVmaW5lIFJUTDgzNjdDX01BWF9MT0dfQ05UX05VTSAgICAgICAgICAgICAgICAoMzIpCisjZGVmaW5lIFJUTDgzNjdDX01JQl9NQVhfTE9HX0NOVF9JRFggICAgICAgICAgICAoUlRMODM2N0NfTUFYX0xPR19DTlRfTlVNIC0gMSkKKyNkZWZpbmUgUlRMODM2N0NfTUlCX0xPR19DTlRfT0ZGU0VUICAgICAgICAgICAgICgweDNFMCkKKyNkZWZpbmUgUlRMODM2N0NfTUlCX01BWF9MT0dfTU9ERV9JRFggICAgICAgICAgICgxNi0xKQorCit0eXBlZGVmIGVudW0gUlRMODM2N0NfTUlCQ09VTlRFUl9FeworCisgICAgLyogUlggKi8KKyAgICBpZkluT2N0ZXRzID0gMCwKKworICAgIGRvdDNTdGF0c0ZDU0Vycm9ycywKKyAgICBkb3QzU3RhdHNTeW1ib2xFcnJvcnMsCisgICAgZG90M0luUGF1c2VGcmFtZXMsCisgICAgZG90M0NvbnRyb2xJblVua25vd25PcGNvZGVzLAorCisgICAgZXRoZXJTdGF0c0ZyYWdtZW50cywKKyAgICBldGhlclN0YXRzSmFiYmVycywKKyAgICBpZkluVWNhc3RQa3RzLAorICAgIGV0aGVyU3RhdHNEcm9wRXZlbnRzLAorCisgICAgaWZJbk11bHRpY2FzdFBrdHMsCisgICAgaWZJbkJyb2FkY2FzdFBrdHMsCisgICAgaW5NbGRDaGVja3N1bUVycm9yLAorICAgIGluSWdtcENoZWNrc3VtRXJyb3IsCisgICAgaW5NbGRTcGVjaWZpY1F1ZXJ5LAorICAgIGluTWxkR2VuZXJhbFF1ZXJ5LAorICAgIGluSWdtcFNwZWNpZmljUXVlcnksCisgICAgaW5JZ21wR2VuZXJhbFF1ZXJ5LAorICAgIGluTWxkTGVhdmVzLAorICAgIGluSWdtcExlYXZlcywKKworICAgIC8qIFRYL1JYICovCisgICAgZXRoZXJTdGF0c09jdGV0cywKKworICAgIGV0aGVyU3RhdHNVbmRlclNpemVQa3RzLAorICAgIGV0aGVyT3ZlcnNpemVTdGF0cywKKyAgICBldGhlclN0YXRzUGt0czY0T2N0ZXRzLAorICAgIGV0aGVyU3RhdHNQa3RzNjV0bzEyN09jdGV0cywKKyAgICBldGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzLAorICAgIGV0aGVyU3RhdHNQa3RzMjU2dG81MTFPY3RldHMsCisgICAgZXRoZXJTdGF0c1BrdHM1MTJ0bzEwMjNPY3RldHMsCisgICAgZXRoZXJTdGF0c1BrdHMxMDI0dG8xNTE4T2N0ZXRzLAorCisgICAgLyogVFggKi8KKyAgICBpZk91dE9jdGV0cywKKworICAgIGRvdDNTdGF0c1NpbmdsZUNvbGxpc2lvbkZyYW1lcywKKyAgICBkb3QzU3RhdE11bHRpcGxlQ29sbGlzaW9uRnJhbWVzLAorICAgIGRvdDNzRGVmZXJyZWRUcmFuc21pc3Npb25zLAorICAgIGRvdDNTdGF0c0xhdGVDb2xsaXNpb25zLAorICAgIGV0aGVyU3RhdHNDb2xsaXNpb25zLAorICAgIGRvdDNTdGF0c0V4Y2Vzc2l2ZUNvbGxpc2lvbnMsCisgICAgZG90M091dFBhdXNlRnJhbWVzLAorICAgIGlmT3V0RGlzY2FyZHMsCisKKyAgICAvKiBBTEUgKi8KKyAgICBkb3QxZFRwUG9ydEluRGlzY2FyZHMsCisgICAgaWZPdXRVY2FzdFBrdHMsCisgICAgaWZPdXRNdWx0aWNhc3RQa3RzLAorICAgIGlmT3V0QnJvYWRjYXN0UGt0cywKKyAgICBvdXRPYW1wZHVQa3RzLAorICAgIGluT2FtcGR1UGt0cywKKworICAgIGluSWdtcEpvaW5zU3VjY2VzcywKKyAgICBpbklnbXBKb2luc0ZhaWwsCisgICAgaW5NbGRKb2luc1N1Y2Nlc3MsCisgICAgaW5NbGRKb2luc0ZhaWwsCisgICAgaW5SZXBvcnRTdXBwcmVzc2lvbkRyb3AsCisgICAgaW5MZWF2ZVN1cHByZXNzaW9uRHJvcCwKKyAgICBvdXRJZ21wUmVwb3J0cywKKyAgICBvdXRJZ21wTGVhdmVzLAorICAgIG91dElnbXBHZW5lcmFsUXVlcnksCisgICAgb3V0SWdtcFNwZWNpZmljUXVlcnksCisgICAgb3V0TWxkUmVwb3J0cywKKyAgICBvdXRNbGRMZWF2ZXMsCisgICAgb3V0TWxkR2VuZXJhbFF1ZXJ5LAorICAgIG91dE1sZFNwZWNpZmljUXVlcnksCisgICAgaW5Lbm93bk11bHRpY2FzdFBrdHMsCisKKyAgICAvKkRldmljZSBvbmx5ICovCisgICAgZG90MWRUcExlYXJuZWRFbnRyeURpc2NhcmRzLAorICAgIFJUTDgzNjdDX01JQlNfTlVNQkVSLAorCit9UlRMODM2N0NfTUlCQ09VTlRFUjsKKworCitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY01JQnNDb3VudGVyUmVzZXQocnRrX3VpbnQzMiBncmVzZXQsIHJ0a191aW50MzIgcW1yZXNldCwgcnRrX3VpbnQzMiBwbWFzayk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY01JQnNDb3VudGVyKHJ0a191aW50MzIgcG9ydCxSVEw4MzY3Q19NSUJDT1VOVEVSIG1pYklkeCwgcnRrX3VpbnQ2NCogcENvdW50ZXIpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNNSUJzTG9nQ291bnRlcihydGtfdWludDMyIGluZGV4LCBydGtfdWludDMyICpwQ291bnRlcik7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY01JQnNDb250cm9sKHJ0a191aW50MzIqIHBNYXNrKTsKKworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNNSUJzUmVzZXRWYWx1ZShydGtfdWludDMyIHZhbHVlKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljTUlCc1Jlc2V0VmFsdWUocnRrX3VpbnQzMiogdmFsdWUpOworCitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY01JQnNVc2FnZU1vZGUocnRrX3VpbnQzMiBtb2RlKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljTUlCc1VzYWdlTW9kZShydGtfdWludDMyKiBwTW9kZSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY01JQnNUaW1lcihydGtfdWludDMyIHRpbWVyKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljTUlCc1RpbWVyKHJ0a191aW50MzIqIHBUaW1lcik7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY01JQnNMb2dnaW5nTW9kZShydGtfdWludDMyIGluZGV4LCBydGtfdWludDMyIG1vZGUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNNSUJzTG9nZ2luZ01vZGUocnRrX3VpbnQzMiBpbmRleCwgcnRrX3VpbnQzMiogcE1vZGUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNNSUJzTG9nZ2luZ1R5cGUocnRrX3VpbnQzMiBpbmRleCwgcnRrX3VpbnQzMiB0eXBlKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljTUlCc0xvZ2dpbmdUeXBlKHJ0a191aW50MzIgaW5kZXgsIHJ0a191aW50MzIqIHBUeXBlKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljTUlCc1Jlc2V0TG9nZ2luZ0NvdW50ZXIocnRrX3VpbnQzMiBpbmRleCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY01JQnNMZW5ndGgocnRrX3VpbnQzMiB0eExlbmd0aE1vZGUsIHJ0a191aW50MzIgcnhMZW5ndGhNb2RlKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljTUlCc0xlbmd0aChydGtfdWludDMyICpwVHhMZW5ndGhNb2RlLCBydGtfdWludDMyICpwUnhMZW5ndGhNb2RlKTsKKworI2VuZGlmIC8qI2lmbmRlZiBfUlRMODM2N0NfQVNJQ0RSVl9NSUJfSF8qLworCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGw4MzY3Y19hc2ljZHJ2X21pcnJvci5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl9taXJyb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2I3ODhkCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl9taXJyb3IuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNzYzMDYgJAorICogJERhdGU6IDIwMTctMDMtMDggMTU6MTM6NTggKzA4MDAgKLZnpFQsIDA4IKRUpOsgMjAxNykgJAorICoKKyAqIFB1cnBvc2UgOiBSVEw4MzY3QyBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkgZm9yIFJUTDgzNjdDCisgKiBGZWF0dXJlIDogUG9ydCBtaXJyb3IgcmVsYXRlZCBmdW5jdGlvbnMKKyAqCisgKi8KKworI2lmbmRlZiBfUlRMODM2N0NfQVNJQ0RSVl9NSVJST1JfSF8KKyNkZWZpbmUgX1JUTDgzNjdDX0FTSUNEUlZfTUlSUk9SX0hfCisKKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2Lmg+CisKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljUG9ydE1pcnJvcihydGtfdWludDMyIHNvdXJjZSwgcnRrX3VpbnQzMiBtb25pdG9yKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljUG9ydE1pcnJvcihydGtfdWludDMyICpwU291cmNlLCBydGtfdWludDMyICpwTW9uaXRvcik7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1BvcnRNaXJyb3JSeEZ1bmN0aW9uKHJ0a191aW50MzIgZW5hYmxlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BvcnRNaXJyb3JSeEZ1bmN0aW9uKHJ0a191aW50MzIqIHBFbmFibGVkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljUG9ydE1pcnJvclR4RnVuY3Rpb24ocnRrX3VpbnQzMiBlbmFibGVkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljUG9ydE1pcnJvclR4RnVuY3Rpb24ocnRrX3VpbnQzMiogcEVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNQb3J0TWlycm9ySXNvbGF0aW9uKHJ0a191aW50MzIgZW5hYmxlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BvcnRNaXJyb3JJc29sYXRpb24ocnRrX3VpbnQzMiogcEVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNQb3J0TWlycm9yUHJpb3JpdHkocnRrX3VpbnQzMiBwcmlvcml0eSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BvcnRNaXJyb3JQcmlvcml0eShydGtfdWludDMyKiBwUHJpb3JpdHkpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNQb3J0TWlycm9yTWFzayhydGtfdWludDMyIFNvdXJjZVBvcnRtYXNrKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljUG9ydE1pcnJvck1hc2socnRrX3VpbnQzMiAqcFNvdXJjZVBvcnRtYXNrKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljUG9ydE1pcnJvclZsYW5SeExlYWt5KHJ0a191aW50MzIgZW5hYmxlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BvcnRNaXJyb3JWbGFuUnhMZWFreShydGtfdWludDMyKiBwRW5hYmxlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1BvcnRNaXJyb3JWbGFuVHhMZWFreShydGtfdWludDMyIGVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNQb3J0TWlycm9yVmxhblR4TGVha3kocnRrX3VpbnQzMiogcEVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNQb3J0TWlycm9ySXNvbGF0aW9uUnhMZWFreShydGtfdWludDMyIGVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNQb3J0TWlycm9ySXNvbGF0aW9uUnhMZWFreShydGtfdWludDMyKiBwRW5hYmxlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1BvcnRNaXJyb3JJc29sYXRpb25UeExlYWt5KHJ0a191aW50MzIgZW5hYmxlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BvcnRNaXJyb3JJc29sYXRpb25UeExlYWt5KHJ0a191aW50MzIqIHBFbmFibGVkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljUG9ydE1pcnJvclJlYWxLZWVwKHJ0a191aW50MzIgbW9kZSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BvcnRNaXJyb3JSZWFsS2VlcChydGtfdWludDMyKiBwTW9kZSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1BvcnRNaXJyb3JPdmVycmlkZShydGtfdWludDMyIHJ4TWlycm9yLCBydGtfdWludDMyIHR4TWlycm9yLCBydGtfdWludDMyIGFjbE1pcnJvcik7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BvcnRNaXJyb3JPdmVycmlkZShydGtfdWludDMyICpwUnhNaXJyb3IsIHJ0a191aW50MzIgKnBUeE1pcnJvciwgcnRrX3VpbnQzMiAqcEFjbE1pcnJvcik7CisKKyNlbmRpZiAvKiNpZm5kZWYgX1JUTDgzNjdDX0FTSUNEUlZfTUlSUk9SX0hfKi8KKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl9taXNjLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGw4MzY3Y19hc2ljZHJ2X21pc2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjY2YTdiCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl9taXNjLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiAkUmV2aXNpb246IDc2MzA2ICQKKyAqICREYXRlOiAyMDE3LTAzLTA4IDE1OjEzOjU4ICswODAwICi2Z6RULCAwOCCkVKTrIDIwMTcpICQKKyAqCisgKiBQdXJwb3NlIDogUlRMODM2N0Mgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJIGZvciBSVEw4MzY3QworICogRmVhdHVyZSA6IE1pc2NlbGxhbmVvdXMgZnVuY3Rpb25zCisgKgorICovCisKKyNpZm5kZWYgX1JUTDgzNjdDX0FTSUNEUlZfTUlTQ19IXworI2RlZmluZSBfUlRMODM2N0NfQVNJQ0RSVl9NSVNDX0hfCisKKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2Lmg+CisKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljTWFjQWRkcmVzcyhldGhlcl9hZGRyX3QgbWFjKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljTWFjQWRkcmVzcyhldGhlcl9hZGRyX3QgKnBNYWMpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNEZWJ1Z0luZm8ocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyICpwRGVidWdpZm8pOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNQb3J0SmFtTW9kZShydGtfdWludDMyIG1vZGUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNQb3J0SmFtTW9kZShydGtfdWludDMyKiBwTW9kZSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY01heExlbmd0aENmZyhydGtfdWludDMyIGNmZ0lkLCBydGtfdWludDMyIG1heExlbmd0aCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY01heExlbmd0aENmZyhydGtfdWludDMyIGNmZ0lkLCBydGtfdWludDMyICpwTWF4TGVuZ3RoKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljTWF4TGVuZ3RoKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiB0eXBlLCBydGtfdWludDMyIGNmZ0lkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljTWF4TGVuZ3RoKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiB0eXBlLCBydGtfdWludDMyICpwQ2ZnSWQpOworCisjZW5kaWYgLypfUlRMODM2N0NfQVNJQ0RSVl9NSVNDX0hfKi8KKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl9vYW0uaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX2FzaWNkcnZfb2FtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA5ZGM3NgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX2FzaWNkcnZfb2FtLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiAkUmV2aXNpb246IDQyMzIxICQKKyAqICREYXRlOiAyMDEzLTA4LTI2IDEzOjUxOjI5ICswODAwICi2Z6RALCAyNiCkS6TrIDIwMTMpICQKKyAqCisgKiBQdXJwb3NlIDogUlRMODM2N0Mgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJIGZvciBSVEw4MzY3QworICogRmVhdHVyZSA6IE9BTSByZWxhdGVkIGZ1bmN0aW9ucworICoKKyAqLworCisjaWZuZGVmIF9SVEw4MzY3Q19BU0lDRFJWX09BTV9IXworI2RlZmluZSBfUlRMODM2N0NfQVNJQ0RSVl9PQU1fSF8KKworI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnYuaD4KKworZW51bSBPQU1QQVJBQ1QKK3sKKyAgICBPQU1fUEFSRldEID0gMCwKKyAgICBPQU1fUEFSTEIsCisgICAgT0FNX1BBUkRJU0NBUkQsCisgICAgT0FNX1BBUkZXRENQVQorfTsKKworZW51bSBPQU1NVUxBQ1QKK3sKKyAgICBPQU1fTVVMRldEID0gMCwKKyAgICBPQU1fTVVMRElTQ0FSRCwKKyAgICBPQU1fTVVMQ1BVCit9OworCitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY09hbVBhcnNlcihydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgcGFyc2VyKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljT2FtUGFyc2VyKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiogcFBhcnNlcik7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY09hbU11bHRpcGxleGVyKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBtdWx0aXBsZXhlcik7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY09hbU11bHRpcGxleGVyKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiogcE11bHRpcGxleGVyKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljT2FtQ3B1UHJpKHJ0a191aW50MzIgcHJpb3JpdHkpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNPYW1DcHVQcmkocnRrX3VpbnQzMiAqcFByaW9yaXR5KTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljT2FtRW5hYmxlKHJ0a191aW50MzIgZW5hYmxlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY09hbUVuYWJsZShydGtfdWludDMyICpwRW5hYmxlZCk7CisjZW5kaWYgLypfUlRMODM2N0NfQVNJQ0RSVl9PQU1fSF8qLworCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGw4MzY3Y19hc2ljZHJ2X3BoeS5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl9waHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTkzZDZlCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl9waHkuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNzYzMDYgJAorICogJERhdGU6IDIwMTctMDMtMDggMTU6MTM6NTggKzA4MDAgKLZnpFQsIDA4IKRUpOsgMjAxNykgJAorICoKKyAqIFB1cnBvc2UgOiBSVEw4MzY3QyBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkgZm9yIFJUTDgzNjdDCisgKiBGZWF0dXJlIDogUEhZIHJlbGF0ZWQgZnVuY3Rpb25zCisgKgorICovCisKKyNpZm5kZWYgX1JUTDgzNjdDX0FTSUNEUlZfUEhZX0hfCisjZGVmaW5lIF9SVEw4MzY3Q19BU0lDRFJWX1BIWV9IXworCisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydi5oPgorCisjZGVmaW5lIFJUTDgzNjdDX1BIWV9SRUdOT01BWCAgICAgICAgICAgMHgxRgorI2RlZmluZSBSVEw4MzY3Q19QSFlfRVhURVJOQUxNQVggICAgICAgIDB4NworCisjZGVmaW5lIFJUTDgzNjdDX1BIWV9CQVNFICAgICAgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIFJUTDgzNjdDX1BIWV9FWFRfQkFTRSAgICAgICAgICAgMHhBMDAwCisKKyNkZWZpbmUgUlRMODM2N0NfUEhZX09GRlNFVCAgICAgICAgICAgICA1CisjZGVmaW5lIFJUTDgzNjdDX1BIWV9FWFRfT0ZGU0VUICAgICAgICAgOQorCisjZGVmaW5lIFJUTDgzNjdDX1BIWV9QQUdFX0FERFJFU1MgICAgICAgMzEKKworCitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1BIWVJlZyhydGtfdWludDMyIHBoeU5vLCBydGtfdWludDMyIHBoeUFkZHIsIHJ0a191aW50MzIgcmVnRGF0YSApOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNQSFlSZWcocnRrX3VpbnQzMiBwaHlObywgcnRrX3VpbnQzMiBwaHlBZGRyLCBydGtfdWludDMyKiBwUmVnRGF0YSApOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNQSFlPQ1BSZWcocnRrX3VpbnQzMiBwaHlObywgcnRrX3VpbnQzMiBvY3BBZGRyLCBydGtfdWludDMyIG9jcERhdGEgKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljUEhZT0NQUmVnKHJ0a191aW50MzIgcGh5Tm8sIHJ0a191aW50MzIgb2NwQWRkciwgcnRrX3VpbnQzMiAqcFJlZ0RhdGEgKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljU2RzUmVnKHJ0a191aW50MzIgc2RzSWQsIHJ0a191aW50MzIgc2RzUmVnLCBydGtfdWludDMyIHNkc1BhZ2UsICBydGtfdWludDMyIHZhbHVlKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljU2RzUmVnKHJ0a191aW50MzIgc2RzSWQsIHJ0a191aW50MzIgc2RzUmVnLCBydGtfdWludDMyIHNkc1BhZ2UsIHJ0a191aW50MzIgKnZhbHVlKTsKKworI2VuZGlmIC8qI2lmbmRlZiBfUlRMODM2N0NfQVNJQ0RSVl9QSFlfSF8qLworCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGw4MzY3Y19hc2ljZHJ2X3BvcnQuaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX2FzaWNkcnZfcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkOTlkODUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGw4MzY3Y19hc2ljZHJ2X3BvcnQuaApAQCAtMCwwICsxLDIzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiAkUmV2aXNpb246IDc2MzMzICQKKyAqICREYXRlOiAyMDE3LTAzLTA5IDA5OjMzOjE1ICswODAwICi2Z6V8LCAwOSCkVKTrIDIwMTcpICQKKyAqCisgKiBQdXJwb3NlIDogUlRMODM2N0Mgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJIGZvciBSVEw4MzY3QworICogRmVhdHVyZSA6IFBvcnQgc2VjdXJpdHkgcmVsYXRlZCBmdW5jdGlvbnMKKyAqCisgKi8KKworI2lmbmRlZiBfUlRMODM2N0NfQVNJQ0RSVl9QT1JUU0VDVVJJVFlfSF8KKyNkZWZpbmUgX1JUTDgzNjdDX0FTSUNEUlZfUE9SVFNFQ1VSSVRZX0hfCisKKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2Lmg+CisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl91bmtub3duTXVsdGljYXN0Lmg+CisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl9waHkuaD4KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBUeXBlIERlZmluaXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFJUTDgzNjdDX01BQzcgICAgICAgNworI2RlZmluZSBSVEw4MzY3Q19FWFROTyAgICAgICAzCisKKyNkZWZpbmUgUlRMODM2N0NfUlRDVF9QQUdFICAgICAgICAgICgxMSkKKyNkZWZpbmUgUlRMODM2N0NfUlRDVF9SRVNVTFRfQV9SRUcgICgyNykKKyNkZWZpbmUgUlRMODM2N0NfUlRDVF9SRVNVTFRfQl9SRUcgICgyOCkKKyNkZWZpbmUgUlRMODM2N0NfUlRDVF9SRVNVTFRfQ19SRUcgICgyOSkKKyNkZWZpbmUgUlRMODM2N0NfUlRDVF9SRVNVTFRfRF9SRUcgICgzMCkKKyNkZWZpbmUgUlRMODM2N0NfUlRDVF9TVEFUVVNfUkVHICAgICgyNikKKworZW51bSBMMl9TRUNVUklUWV9CRUhBVkUKK3sKKyAgICBMMl9CRUhBVkVfRkxPT0RJTkcgPSAwLAorICAgIEwyX0JFSEFWRV9EUk9QLAorICAgIEwyX0JFSEFWRV9UUkFQLAorICAgIEwyX0JFSEFWRV9FTkQKK307CisKK2VudW0gTDJfVU5EQV9CRUhBVkUKK3sKKyAgICBMMl9VTkRBX0JFSEFWRV9GTE9PRElOR19QTUFTSyA9IDAsCisgICAgTDJfVU5EQV9CRUhBVkVfRFJPUCwKKyAgICBMMl9VTkRBX0JFSEFWRV9UUkFQLAorICAgIEwyX1VOREFfQkVIQVZFX0ZMT09ESU5HLAorICAgIEwyX1VOREFfQkVIQVZFX0VORAorfTsKKworZW51bSBMMl9TRUNVUklUWV9TQV9CRUhBVkUKK3sKKyAgICBMMl9CRUhBVkVfU0FfRkxPT0RJTkcgPSAwLAorICAgIEwyX0JFSEFWRV9TQV9EUk9QLAorICAgIEwyX0JFSEFWRV9TQV9UUkFQLAorICAgIEwyX0JFSEFWRV9TQV9DT1BZMjgwNTEsCisgICAgTDJfQkVIQVZFX1NBX0VORAorfTsKKworLyogZW51bSBmb3IgcG9ydCBjdXJyZW50IGxpbmsgc3BlZWQgKi8KK2VudW0gU1BFRURNT0RFCit7CisgICAgU1BEXzEwTSA9IDAsCisgICAgU1BEXzEwME0sCisgICAgU1BEXzEwMDBNLAorICAgIFNQRF8yNTAwTQorfTsKKworLyogZW51bSBmb3IgbWFjIGxpbmsgbW9kZSAqLworZW51bSBMSU5LTU9ERQoreworICAgIE1BQ19OT1JNQUwgPSAwLAorICAgIE1BQ19GT1JDRSwKK307CisKKy8qIGVudW0gZm9yIHBvcnQgY3VycmVudCBsaW5rIGR1cGxleCBtb2RlICovCitlbnVtIERVUExFWE1PREUKK3sKKyAgICBIQUxGX0RVUExFWCA9IDAsCisgICAgRlVMTF9EVVBMRVgKK307CisKKy8qIGVudW0gZm9yIHBvcnQgY3VycmVudCBNU1QgbW9kZSAqLworZW51bSBNU1RNT0RFCit7CisgICAgU0xBVkVfTU9ERT0gMCwKKyAgICBNQVNURVJfTU9ERQorfTsKKworCitlbnVtIEVYVE1PREUKK3sKKyAgICBFWFRfRElTQUJMRSA9IDAsCisgICAgRVhUX1JHTUlJLAorICAgIEVYVF9NSUlfTUFDLAorICAgIEVYVF9NSUlfUEhZLAorICAgIEVYVF9UTUlJX01BQywKKyAgICBFWFRfVE1JSV9QSFksCisgICAgRVhUX0dNSUksCisgICAgRVhUX1JNSUlfTUFDLAorICAgIEVYVF9STUlJX1BIWSwKKyAgICBFWFRfU0dNSUksCisgICAgRVhUX0hTR01JSSwKKyAgICBFWFRfMTAwMFhfMTAwRlgsCisgICAgRVhUXzEwMDBYLAorICAgIEVYVF8xMDBGWCwKKyAgICBFWFRfUkdNSUlfMiwKKyAgICBFWFRfTUlJX01BQ18yLAorICAgIEVYVF9NSUlfUEhZXzIsCisgICAgRVhUX1RNSUlfTUFDXzIsCisgICAgRVhUX1RNSUlfUEhZXzIsCisgICAgRVhUX1JNSUlfTUFDXzIsCisgICAgRVhUX1JNSUlfUEhZXzIsCisgICAgRVhUX0VORAorfTsKKworZW51bSBET1NUWVBFCit7CisgICAgRE9TX0RBRVFTQSA9IDAsCisgICAgRE9TX0xBTkRBVFRBQ0tTLAorICAgIERPU19CTEFUQVRUQUNLUywKKyAgICBET1NfU1lORklOU0NBTiwKKyAgICBET1NfWE1BU0NBTiwKKyAgICBET1NfTlVMTFNDQU4sCisgICAgRE9TX1NZTjEwMjQsCisgICAgRE9TX1RDUFNIT1JUSERSLAorICAgIERPU19UQ1BGUkFHRVJST1IsCisgICAgRE9TX0lDTVBGUkFHTUVOVCwKKyAgICBET1NfRU5ELAorCit9OworCit0eXBlZGVmIHN0cnVjdCAgcnRsODM2N2NfcG9ydF9hYmlsaXR5X3N7CisgICAgcnRrX3VpbnQxNiBmb3JjZW1vZGU7CisgICAgcnRrX3VpbnQxNiBtc3RmYXVsdDsKKyAgICBydGtfdWludDE2IG1zdG1vZGU7CisgICAgcnRrX3VpbnQxNiBud2F5OworICAgIHJ0a191aW50MTYgdHhwYXVzZTsKKyAgICBydGtfdWludDE2IHJ4cGF1c2U7CisgICAgcnRrX3VpbnQxNiBsaW5rOworICAgIHJ0a191aW50MTYgZHVwbGV4OworICAgIHJ0a191aW50MTYgc3BlZWQ7Cit9cnRsODM2N2NfcG9ydF9hYmlsaXR5X3Q7CisKK3R5cGVkZWYgc3RydWN0ICBydGw4MzY3Y19wb3J0X3N0YXR1c19zeworCisgICAgcnRrX3VpbnQxNiBscGkxMDAwOworICAgIHJ0a191aW50MTYgbHBpMTAwOworICAgIHJ0a191aW50MTYgbXN0ZmF1bHQ7CisgICAgcnRrX3VpbnQxNiBtc3Rtb2RlOworICAgIHJ0a191aW50MTYgbndheTsKKyAgICBydGtfdWludDE2IHR4cGF1c2U7CisgICAgcnRrX3VpbnQxNiByeHBhdXNlOworICAgIHJ0a191aW50MTYgbGluazsKKyAgICBydGtfdWludDE2IGR1cGxleDsKKyAgICBydGtfdWludDE2IHNwZWVkOworCit9cnRsODM2N2NfcG9ydF9zdGF0dXNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcnRjdF9yZXN1bHRfcworeworICAgIHJ0a191aW50MzIgICAgICBjaGFubmVsQVNob3J0OworICAgIHJ0a191aW50MzIgICAgICBjaGFubmVsQlNob3J0OworICAgIHJ0a191aW50MzIgICAgICBjaGFubmVsQ1Nob3J0OworICAgIHJ0a191aW50MzIgICAgICBjaGFubmVsRFNob3J0OworCisgICAgcnRrX3VpbnQzMiAgICAgIGNoYW5uZWxBT3BlbjsKKyAgICBydGtfdWludDMyICAgICAgY2hhbm5lbEJPcGVuOworICAgIHJ0a191aW50MzIgICAgICBjaGFubmVsQ09wZW47CisgICAgcnRrX3VpbnQzMiAgICAgIGNoYW5uZWxET3BlbjsKKworICAgIHJ0a191aW50MzIgICAgICBjaGFubmVsQU1pc21hdGNoOworICAgIHJ0a191aW50MzIgICAgICBjaGFubmVsQk1pc21hdGNoOworICAgIHJ0a191aW50MzIgICAgICBjaGFubmVsQ01pc21hdGNoOworICAgIHJ0a191aW50MzIgICAgICBjaGFubmVsRE1pc21hdGNoOworCisgICAgcnRrX3VpbnQzMiAgICAgIGNoYW5uZWxBTGluZWRyaXZlcjsKKyAgICBydGtfdWludDMyICAgICAgY2hhbm5lbEJMaW5lZHJpdmVyOworICAgIHJ0a191aW50MzIgICAgICBjaGFubmVsQ0xpbmVkcml2ZXI7CisgICAgcnRrX3VpbnQzMiAgICAgIGNoYW5uZWxETGluZWRyaXZlcjsKKworICAgIHJ0a191aW50MzIgICAgICBjaGFubmVsQUxlbjsKKyAgICBydGtfdWludDMyICAgICAgY2hhbm5lbEJMZW47CisgICAgcnRrX3VpbnQzMiAgICAgIGNoYW5uZWxDTGVuOworICAgIHJ0a191aW50MzIgICAgICBjaGFubmVsRExlbjsKK30gcnRsODM2N2NfcG9ydF9ydGN0X3Jlc3VsdF90OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRHJpdmVyIFByb3RvIFR5cGUgRGVmaW5pdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljUG9ydFVua25vd25EYUJlaGF2aW9yKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBiZWhhdmlvcik7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BvcnRVbmtub3duRGFCZWhhdmlvcihydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgKnBCZWhhdmlvcik7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1BvcnRVbmtub3duU2FCZWhhdmlvcihydGtfdWludDMyIGJlaGF2aW9yKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljUG9ydFVua25vd25TYUJlaGF2aW9yKHJ0a191aW50MzIgKnBCZWhhdmlvcik7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1BvcnRVbm1hdGNoZWRTYUJlaGF2aW9yKHJ0a191aW50MzIgYmVoYXZpb3IpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNQb3J0VW5tYXRjaGVkU2FCZWhhdmlvcihydGtfdWludDMyICpwQmVoYXZpb3IpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNQb3J0VW5tYXRjaGVkU2FNb3ZpbmcocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNQb3J0VW5tYXRjaGVkU2FNb3ZpbmcocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyICpwRW5hYmxlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1BvcnRVbmtub3duRGFGbG9vZGluZ1BvcnRtYXNrKHJ0a191aW50MzIgcG9ydG1hc2spOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNQb3J0VW5rbm93bkRhRmxvb2RpbmdQb3J0bWFzayhydGtfdWludDMyICpwUG9ydG1hc2spOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNQb3J0VW5rbm93bk11bHRpY2FzdEZsb29kaW5nUG9ydG1hc2socnRrX3VpbnQzMiBwb3J0bWFzayk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BvcnRVbmtub3duTXVsdGljYXN0Rmxvb2RpbmdQb3J0bWFzayhydGtfdWludDMyICpwUG9ydG1hc2spOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNQb3J0QmNhc3RGbG9vZGluZ1BvcnRtYXNrKHJ0a191aW50MzIgcG9ydG1hc2spOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNQb3J0QmNhc3RGbG9vZGluZ1BvcnRtYXNrKHJ0a191aW50MzIgKnBQb3J0bWFzayk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1BvcnRCbG9ja1NwYShydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgYmxvY2spOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNQb3J0QmxvY2tTcGEocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyICpwQmxvY2spOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNQb3J0Rm9yY2VMaW5rKHJ0a191aW50MzIgcG9ydCwgcnRsODM2N2NfcG9ydF9hYmlsaXR5X3QgKnBQb3J0QWJpbGl0eSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BvcnRGb3JjZUxpbmsocnRrX3VpbnQzMiBwb3J0LCBydGw4MzY3Y19wb3J0X2FiaWxpdHlfdCAqcFBvcnRBYmlsaXR5KTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljUG9ydFN0YXR1cyhydGtfdWludDMyIHBvcnQsIHJ0bDgzNjdjX3BvcnRfc3RhdHVzX3QgKnBQb3J0U3RhdHVzKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljUG9ydEZvcmNlTGlua0V4dChydGtfdWludDMyIGlkLCBydGw4MzY3Y19wb3J0X2FiaWxpdHlfdCAqcFBvcnRBYmlsaXR5KTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljUG9ydEZvcmNlTGlua0V4dChydGtfdWludDMyIGlkLCBydGw4MzY3Y19wb3J0X2FiaWxpdHlfdCAqcFBvcnRBYmlsaXR5KTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljUG9ydEV4dE1vZGUocnRrX3VpbnQzMiBpZCwgcnRrX3VpbnQzMiBtb2RlKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljUG9ydEV4dE1vZGUocnRrX3VpbnQzMiBpZCwgcnRrX3VpbnQzMiAqcE1vZGUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNQb3J0RG9zKHJ0a191aW50MzIgdHlwZSwgcnRrX3VpbnQzMiBkcm9wKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljUG9ydERvcyhydGtfdWludDMyIHR5cGUsIHJ0a191aW50MzIqIHBEcm9wKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljUG9ydEVuYWJsZUFsbChydGtfdWludDMyIGVuYWJsZSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BvcnRFbmFibGVBbGwocnRrX3VpbnQzMiAqcEVuYWJsZSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1BvcnRTbWFsbElwZyhydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgZW5hYmxlKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljUG9ydFNtYWxsSXBnKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiogcEVuYWJsZSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1BvcnRMb29wYmFjayhydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgZW5hYmxlKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljUG9ydExvb3BiYWNrKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcEVuYWJsZSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1BvcnRSVENURW5hYmxlKHJ0a191aW50MzIgcG9ydG1hc2spOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNQb3J0UlRDVERpc2FibGUocnRrX3VpbnQzMiBwb3J0bWFzayk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BvcnRSVENUUmVzdWx0KHJ0a191aW50MzIgcG9ydCwgcnRsODM2N2NfcG9ydF9ydGN0X3Jlc3VsdF90ICpwUmVzdWx0KTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZHNSZXNldChydGtfdWludDMyIGlkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRTZHNMaW5rU3RhdHVzKHJ0a191aW50MzIgZXh0X2lkLCBydGtfdWludDMyICpwU2lnbmFsRGV0ZWN0LCBydGtfdWludDMyICpwU3luYywgcnRrX3VpbnQzMiAqcExpbmspOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldFNnbWlpTndheShydGtfdWludDMyIGV4dF9pZCwgcnRrX3VpbnQzMiBzdGF0ZSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0U2dtaWlOd2F5KHJ0a191aW50MzIgZXh0X2lkLCBydGtfdWludDMyICpwU3RhdGUpOworCisjZW5kaWYgLypfUlRMODM2N0NfQVNJQ0RSVl9QT1JUU0VDVVJJVFlfSF8qLworCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGw4MzY3Y19hc2ljZHJ2X3BvcnRJc29sYXRpb24uaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX2FzaWNkcnZfcG9ydElzb2xhdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyM2Q4OGUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGw4MzY3Y19hc2ljZHJ2X3BvcnRJc29sYXRpb24uaApAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNzYzMDYgJAorICogJERhdGU6IDIwMTctMDMtMDggMTU6MTM6NTggKzA4MDAgKLZnpFQsIDA4IKRUpOsgMjAxNykgJAorICoKKyAqIFB1cnBvc2UgOiBSVEw4MzY3QyBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkgZm9yIFJUTDgzNjdDCisgKiBGZWF0dXJlIDogUG9ydCBpc29sYXRpb24gcmVsYXRlZCBmdW5jdGlvbnMKKyAqCisgKi8KKworI2lmbmRlZiBfUlRMODM2N0NfQVNJQ0RSVl9QT1JUSVNPTEFUSU9OX0hfCisjZGVmaW5lIF9SVEw4MzY3Q19BU0lDRFJWX1BPUlRJU09MQVRJT05fSF8KKworI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnYuaD4KKworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNQb3J0SXNvbGF0aW9uUGVybWl0dGVkUG9ydG1hc2socnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIHBlcm1pdFBvcnRtYXNrKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljUG9ydElzb2xhdGlvblBlcm1pdHRlZFBvcnRtYXNrKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcFBlcm1pdFBvcnRtYXNrKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljUG9ydElzb2xhdGlvbkVmaWQocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGVmaWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNQb3J0SXNvbGF0aW9uRWZpZChydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgKnBFZmlkKTsKKworI2VuZGlmIC8qX1JUTDgzNjdDX0FTSUNEUlZfUE9SVElTT0xBVElPTl9IXyovCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGw4MzY3Y19hc2ljZHJ2X3Fvcy5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl9xb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjA0MmJmCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl9xb3MuaApAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNzYzMDYgJAorICogJERhdGU6IDIwMTctMDMtMDggMTU6MTM6NTggKzA4MDAgKLZnpFQsIDA4IKRUpOsgMjAxNykgJAorICoKKyAqIFB1cnBvc2UgOiBSVEw4MzY3QyBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkgZm9yIFJUTDgzNjdDCisgKiBGZWF0dXJlIDogUW9zIHJlbGF0ZWQgZnVuY3Rpb25zCisgKgorICovCisKKyNpZm5kZWYgX1JUTDgzNjdDX0FTSUNEUlZfUU9TX0hfCisjZGVmaW5lIF9SVEw4MzY3Q19BU0lDRFJWX1FPU19IXworCisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydi5oPgorCisjZGVmaW5lIFJUTDgzNjdDX0RFQ0lTSU9OUFJJTUFYICAgIDB4RkYKKworLyogZW51bSBQcmlvcml0eSBTZWxlY3Rpb24gVHlwZXMgKi8KK2VudW0gUFJJREVDSVNJT04KK3sKKyAgICBQUklERUNfUE9SVCA9IDAsCisgICAgUFJJREVDX0FDTCwKKyAgICBQUklERUNfRFNDUCwKKyAgICBQUklERUNfMVEsCisgICAgUFJJREVDXzFBRCwKKyAgICBQUklERUNfQ1ZMQU4sCisgICAgUFJJREVDX0RBLAorICAgIFBSSURFQ19TQSwKKyAgICBQUklERUNfRU5ELAorfTsKKworLyogZW51bSBQcmlvcml0eSBTZWxlY3Rpb24gSW5kZXggKi8KK2VudW0gUlRMODM2N0NfUFJJREVDX1RBQkxFCit7CisgICAgUFJJREVDX0lEWDAgPSAwLAorICAgIFBSSURFQ19JRFgxLAorICAgIFBSSURFQ19JRFhfRU5ELAorfTsKKworZW51bSBSVEw4MzY3Q19ET1QxUF9QUklTRUwKK3sKKyAgICBET1QxUF9QUklTRUxfVVNFUiA9ICAwLAorICAgIERPVDFQX1BSSVNFTF9UQUcsCisgICAgRE9UMVBfUFJJU0VMX0VORAorfTsKKworZW51bSBSVEw4MzY3Q19EU0NQX1BSSVNFTAoreworICAgIERTQ1BfUFJJU0VMX0lOVEVSTkFMID0gIDAsCisgICAgRFNDUF9QUklTRUxfRFNDUCwKKyAgICBEU0NQX1BSSVNFTF9VU0VSICwKKyAgICBEU0NQX1BSSVNFTF9FTkQKK307CisKKworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNSZW1hcmtpbmdEb3QxcEFiaWxpdHkocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNSZW1hcmtpbmdEb3QxcEFiaWxpdHkocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyKiBwRW5hYmxlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1JlbWFya2luZ0RvdDFwUGFyYW1ldGVyKHJ0a191aW50MzIgcHJpb3JpdHksIHJ0a191aW50MzIgbmV3UHJpb3JpdHkgKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljUmVtYXJraW5nRG90MXBQYXJhbWV0ZXIocnRrX3VpbnQzMiBwcmlvcml0eSwgcnRrX3VpbnQzMiAqcE5ld1ByaW9yaXR5ICk7CitleHRlcm4gIHJldF90IHJ0bDgzNjdjX3NldEFzaWNSZW1hcmtpbmdEb3QxcFNyYyhydGtfdWludDMyIHR5cGUpOworZXh0ZXJuICByZXRfdCBydGw4MzY3Y19nZXRBc2ljUmVtYXJraW5nRG90MXBTcmMocnRrX3VpbnQzMiAqcFR5cGUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNSZW1hcmtpbmdEc2NwQWJpbGl0eShydGtfdWludDMyIGVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNSZW1hcmtpbmdEc2NwQWJpbGl0eShydGtfdWludDMyKiBwRW5hYmxlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1JlbWFya2luZ0RzY3BQYXJhbWV0ZXIocnRrX3VpbnQzMiBwcmlvcml0eSwgcnRrX3VpbnQzMiBuZXdEc2NwICk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1JlbWFya2luZ0RzY3BQYXJhbWV0ZXIocnRrX3VpbnQzMiBwcmlvcml0eSwgcnRrX3VpbnQzMiogcE5ld0RzY3AgKTsKKworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNQcmlvcml0eURvdDFxUmVtYXBwaW5nKHJ0a191aW50MzIgc3JjcHJpb3JpdHksIHJ0a191aW50MzIgcHJpb3JpdHkgKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljUHJpb3JpdHlEb3QxcVJlbWFwcGluZyhydGtfdWludDMyIHNyY3ByaW9yaXR5LCBydGtfdWludDMyICpwUHJpb3JpdHkgKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljUHJpb3JpdHlEc2NwQmFzZWQocnRrX3VpbnQzMiBkc2NwLCBydGtfdWludDMyIHByaW9yaXR5ICk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1ByaW9yaXR5RHNjcEJhc2VkKHJ0a191aW50MzIgZHNjcCwgcnRrX3VpbnQzMiAqcFByaW9yaXR5ICk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1ByaW9yaXR5UG9ydEJhc2VkKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBwcmlvcml0eSApOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNQcmlvcml0eVBvcnRCYXNlZChydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgKnBQcmlvcml0eSApOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNQcmlvcml0eURlY2lzaW9uKHJ0a191aW50MzIgaW5kZXgsIHJ0a191aW50MzIgcHJpc3JjLCBydGtfdWludDMyIGRlY2lzaW9uUHJpKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljUHJpb3JpdHlEZWNpc2lvbihydGtfdWludDMyIGluZGV4LCBydGtfdWludDMyIHByaXNyYywgcnRrX3VpbnQzMiogcERlY2lzaW9uUHJpKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljUHJpb3JpdHlUb1FJRE1hcHBpbmdUYWJsZShydGtfdWludDMyIHFudW0sIHJ0a191aW50MzIgcHJpb3JpdHksIHJ0a191aW50MzIgcWlkICk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1ByaW9yaXR5VG9RSURNYXBwaW5nVGFibGUocnRrX3VpbnQzMiBxbnVtLCBydGtfdWludDMyIHByaW9yaXR5LCBydGtfdWludDMyKiBwUWlkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljT3V0cHV0UXVldWVNYXBwaW5nSW5kZXgocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIHFudW0gKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljT3V0cHV0UXVldWVNYXBwaW5nSW5kZXgocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyICpwUW51bSApOworCitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1JlbWFya2luZ0RzY3BTcmMocnRrX3VpbnQzMiB0eXBlKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljUmVtYXJraW5nRHNjcFNyYyhydGtfdWludDMyICpwVHlwZSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1JlbWFya2luZ0RzY3AyRHNjcChydGtfdWludDMyIGRzY3AsIHJ0a191aW50MzIgcm1rRHNjcCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1JlbWFya2luZ0RzY3AyRHNjcChydGtfdWludDMyIGRzY3AsIHJ0a191aW50MzIgKnBSbWtEc2NwKTsKKworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNQb3J0UHJpb3JpdHlEZWNpc2lvbkluZGV4KHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBpbmRleCApOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNQb3J0UHJpb3JpdHlEZWNpc2lvbkluZGV4KHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcEluZGV4ICk7CisKKyNlbmRpZiAvKiNpZm5kZWYgX1JUTDgzNjdDX0FTSUNEUlZfUU9TX0hfKi8KKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl9ybGRwLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGw4MzY3Y19hc2ljZHJ2X3JsZHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGU5NzBiCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl9ybGRwLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiAkUmV2aXNpb246IDQyMzIxICQKKyAqICREYXRlOiAyMDEzLTA4LTI2IDEzOjUxOjI5ICswODAwICi2Z6RALCAyNiCkS6TrIDIwMTMpICQKKyAqCisgKiBQdXJwb3NlIDogUlRMODM2N0Mgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJIGZvciBSVEw4MzY3QworICogRmVhdHVyZSA6IFJMRFAgcmVsYXRlZCBmdW5jdGlvbnMKKyAqCisgKi8KKworI2lmbmRlZiBfUlRMODM2N0NfQVNJQ0RSVl9STERQX0hfCisjZGVmaW5lIF9SVEw4MzY3Q19BU0lDRFJWX1JMRFBfSF8KKworI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnYuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNSbGRwKHJ0a191aW50MzIgZW5hYmxlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1JsZHAocnRrX3VpbnQzMiAqcEVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNSbGRwRW5hYmxlODA1MShydGtfdWludDMyIGVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNSbGRwRW5hYmxlODA1MShydGtfdWludDMyICpwRW5hYmxlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1JsZHBDb21wYXJlUmFuZG9tTnVtYmVyKHJ0a191aW50MzIgZW5hYmxlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1JsZHBDb21wYXJlUmFuZG9tTnVtYmVyKHJ0a191aW50MzIgKnBFbmFibGVkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljUmxkcEluZGljYXRvclNvdXJjZShydGtfdWludDMyIHNyYyk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1JsZHBJbmRpY2F0b3JTb3VyY2UocnRrX3VpbnQzMiAqcFNyYyk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1JsZHBDaGVja2luZ1N0YXRlUGFyYShydGtfdWludDMyIHJldHJ5Q291bnQsIHJ0a191aW50MzIgcmV0cnlQZXJpb2QpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNSbGRwQ2hlY2tpbmdTdGF0ZVBhcmEocnRrX3VpbnQzMiAqcFJldHJ5Q291bnQsIHJ0a191aW50MzIgKnBSZXRyeVBlcmlvZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1JsZHBMb29wU3RhdGVQYXJhKHJ0a191aW50MzIgcmV0cnlDb3VudCwgcnRrX3VpbnQzMiByZXRyeVBlcmlvZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1JsZHBMb29wU3RhdGVQYXJhKHJ0a191aW50MzIgKnBSZXRyeUNvdW50LCBydGtfdWludDMyICpwUmV0cnlQZXJpb2QpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNSbGRwVHhQb3J0bWFzayhydGtfdWludDMyIHBvcnRtYXNrKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljUmxkcFR4UG9ydG1hc2socnRrX3VpbnQzMiAqcFBvcnRtYXNrKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljUmxkcE1hZ2ljTnVtKGV0aGVyX2FkZHJfdCBzZWVkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljUmxkcE1hZ2ljTnVtKGV0aGVyX2FkZHJfdCAqcFNlZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNSbGRwTG9vcGVkUG9ydG1hc2socnRrX3VpbnQzMiAqcFBvcnRtYXNrKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljUmxkcDgwNTFQb3J0bWFzayhydGtfdWludDMyIHBvcnRtYXNrKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljUmxkcDgwNTFQb3J0bWFzayhydGtfdWludDMyICpwUG9ydG1hc2spOworCisKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljUmxkcFJhbmRvbU51bWJlcihldGhlcl9hZGRyX3QgKnBSYW5kTnVtYmVyKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljUmxkcExvb3BlZFBvcnRQYWlyKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcExvb3BlZFBhaXIpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNSbHBwVHJhcDgwNTEocnRrX3VpbnQzMiBlbmFibGVkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljUmxwcFRyYXA4MDUxKHJ0a191aW50MzIgKnBFbmFibGVkKTsKKworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNSbGRwTGVhdmVMb29wZWRQb3J0bWFzayhydGtfdWludDMyIHBvcnRtYXNrKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljUmxkcExlYXZlTG9vcGVkUG9ydG1hc2socnRrX3VpbnQzMiAqcFBvcnRtYXNrKTsKKworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNSbGRwRW50ZXJMb29wZWRQb3J0bWFzayhydGtfdWludDMyIHBvcnRtYXNrKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljUmxkcEVudGVyTG9vcGVkUG9ydG1hc2socnRrX3VpbnQzMiAqcFBvcnRtYXNrKTsKKworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNSbGRwVHJpZ2dlck1vZGUocnRrX3VpbnQzMiBlbmFibGVkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljUmxkcFRyaWdnZXJNb2RlKHJ0a191aW50MzIgKnBFbmFibGVkKTsKKworI2VuZGlmIC8qX1JUTDgzNjdDX0FTSUNEUlZfUkxEUF9IXyovCisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX2FzaWNkcnZfcm1hLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGw4MzY3Y19hc2ljZHJ2X3JtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYzcwNzUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGw4MzY3Y19hc2ljZHJ2X3JtYS5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogJFJldmlzaW9uOiA2NDcxNiAkCisgKiAkRGF0ZTogMjAxNS0xMi0zMSAxNjozMTo1NSArMDgwMCAotmelfCwgMzEgpFGkR6TrIDIwMTUpICQKKyAqCisgKiBQdXJwb3NlIDogUlRMODM2N0Mgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJIGZvciBSVEw4MzY3QworICogRmVhdHVyZSA6IFJNQSByZWxhdGVkIGZ1bmN0aW9ucworICoKKyAqLworCisjaWZuZGVmIF9SVEw4MzY3Q19BU0lDRFJWX1JNQV9IXworI2RlZmluZSBfUlRMODM2N0NfQVNJQ0RSVl9STUFfSF8KKworI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnYuaD4KKworI2RlZmluZSBSVEw4MzY3Q19STUFNQVggICAgICAgICAgICAgICAgICAgICAweDJGCisKK2VudW0gUlRMODM2N0NfUk1BT1AKK3sKKyAgICBSTUFPUF9GT1JXQVJEID0gMCwKKyAgICBSTUFPUF9UUkFQX1RPX0NQVSwKKyAgICBSTUFPUF9EUk9QLAorICAgIFJNQU9QX0ZPUldBUkRfRVhDTFVERV9DUFUsCisgICAgUk1BT1BfRU5ECit9OworCisKK3R5cGVkZWYgc3RydWN0ICBydGw4MzY3Y19ybWFfc3sKKworICAgIHJ0a191aW50MTYgb3BlcmF0aW9uOworICAgIHJ0a191aW50MTYgZGlzY2FyZF9zdG9ybV9maWx0ZXI7CisgICAgcnRrX3VpbnQxNiB0cmFwX3ByaW9yaXR5OworICAgIHJ0a191aW50MTYga2VlcF9mb3JtYXQ7CisgICAgcnRrX3VpbnQxNiB2bGFuX2xlYWt5OworICAgIHJ0a191aW50MTYgcG9ydGlzb19sZWFreTsKKworfXJ0bDgzNjdjX3JtYV90OworCisKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljUm1hKHJ0a191aW50MzIgaW5kZXgsIHJ0bDgzNjdjX3JtYV90KiBwUm1hY2ZnKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljUm1hKHJ0a191aW50MzIgaW5kZXgsIHJ0bDgzNjdjX3JtYV90KiBwUm1hY2ZnKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljUm1hQ2RwKHJ0bDgzNjdjX3JtYV90KiBwUm1hY2ZnKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljUm1hQ2RwKHJ0bDgzNjdjX3JtYV90KiBwUm1hY2ZnKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljUm1hQ3NzdHAocnRsODM2N2Nfcm1hX3QqIHBSbWFjZmcpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNSbWFDc3N0cChydGw4MzY3Y19ybWFfdCogcFJtYWNmZyk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1JtYUxsZHAocnRrX3VpbnQzMiBlbmFibGVkLCBydGw4MzY3Y19ybWFfdCogcFJtYWNmZyk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1JtYUxsZHAocnRrX3VpbnQzMiAqcEVuYWJsZWQsIHJ0bDgzNjdjX3JtYV90KiBwUm1hY2ZnKTsKKworI2VuZGlmIC8qI2lmbmRlZiBfUlRMODM2N0NfQVNJQ0RSVl9STUFfSF8qLworCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGw4MzY3Y19hc2ljZHJ2X3NjaGVkdWxpbmcuaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX2FzaWNkcnZfc2NoZWR1bGluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxOWE0Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGw4MzY3Y19hc2ljZHJ2X3NjaGVkdWxpbmcuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNzYzMDYgJAorICogJERhdGU6IDIwMTctMDMtMDggMTU6MTM6NTggKzA4MDAgKLZnpFQsIDA4IKRUpOsgMjAxNykgJAorICoKKyAqIFB1cnBvc2UgOiBSVEw4MzY3QyBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkgZm9yIFJUTDgzNjdDCisgKiBGZWF0dXJlIDogUGFja2V0IFNjaGVkdWxpbmcgcmVsYXRlZCBmdW5jdGlvbnMKKyAqCisgKi8KKworI2lmbmRlZiBfUlRMODM2N0NfQVNJQ0RSVl9TQ0hFRFVMSU5HX0hfCisjZGVmaW5lIF9SVEw4MzY3Q19BU0lDRFJWX1NDSEVEVUxJTkdfSF8KKworI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnYuaD4KKworI2RlZmluZSBSVEw4MzY3Q19RV0VJR0hUTUFYICAgIDB4N0YKKyNkZWZpbmUgUlRMODM2N0NfUE9SVF9RVUVVRV9NRVRFUl9JTkRFWF9NQVggICAgNworCisvKiBlbnVtIGZvciBxdWV1ZSB0eXBlICovCitlbnVtIFFVRVVFVFlQRQoreworICAgIFFUWVBFX1NUUklDVCA9IDAsCisgICAgUVRZUEVfV0ZRLAorfTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljTGVha3lCdWNrZXRQYXJhbWV0ZXIocnRrX3VpbnQzMiB0aWNrLCBydGtfdWludDMyIHRva2VuKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljTGVha3lCdWNrZXRQYXJhbWV0ZXIocnRrX3VpbnQzMiAqdGljaywgcnRrX3VpbnQzMiAqdG9rZW4pOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNBcHJNZXRlcihydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgcWlkLCBydGtfdWludDMyIGFwcmlkeCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0Fwck1ldGVyKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBxaWQsIHJ0a191aW50MzIgKmFwcmlkeCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1Bwck1ldGVyKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBxaWQsIHJ0a191aW50MzIgcHByaWR4KTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljUHByTWV0ZXIocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIHFpZCwgcnRrX3VpbnQzMiAqcHByaWR4KTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljQXByRW5hYmxlKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBhcHJFbmFibGUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNBcHJFbmFibGUocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyICphcHJFbmFibGUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNQcHJFbmFibGUocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIHBwckVuYWJsZSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BwckVuYWJsZShydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgKnBwckVuYWJsZSk7CisKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljV0ZRV2VpZ2h0KHJ0a191aW50MzIsIHJ0a191aW50MzIgcXVldWVpZCwgcnRrX3VpbnQzMiB3ZWlnaHQgKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljV0ZRV2VpZ2h0KHJ0a191aW50MzIsIHJ0a191aW50MzIgcXVldWVpZCwgcnRrX3VpbnQzMiAqd2VpZ2h0ICk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1dGUUJ1cnN0U2l6ZShydGtfdWludDMyIGJ1cnN0c2l6ZSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1dGUUJ1cnN0U2l6ZShydGtfdWludDMyICpidXJzdHNpemUpOworCitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1F1ZXVlVHlwZShydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgcWlkLCBydGtfdWludDMyIHF1ZXVlVHlwZSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1F1ZXVlVHlwZShydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgcWlkLCBydGtfdWludDMyICpxdWV1ZVR5cGUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNRdWV1ZVJhdGUocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIHFpZCwgcnRrX3VpbnQzMiBwcHJpZHgsIHJ0a191aW50MzIgYXByaWR4ICk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1F1ZXVlUmF0ZShydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgcWlkLCBydGtfdWludDMyKiBwcHJpZHgsIHJ0a191aW50MzIqIGFwcmlkeCApOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNQb3J0RWdyZXNzUmF0ZShydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgcmF0ZSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BvcnRFZ3Jlc3NSYXRlKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcmF0ZSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1BvcnRFZ3Jlc3NSYXRlSWZnKHJ0a191aW50MzIgaWZnKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljUG9ydEVncmVzc1JhdGVJZmcocnRrX3VpbnQzMiAqaWZnKTsKKworI2VuZGlmIC8qX1JUTDgzNjdDX0FTSUNEUlZfU0NIRURVTElOR19IXyovCisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX2FzaWNkcnZfc3Rvcm0uaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX2FzaWNkcnZfc3Rvcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODY1YjUyCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl9zdG9ybS5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogJFJldmlzaW9uOiA3NjMwNiAkCisgKiAkRGF0ZTogMjAxNy0wMy0wOCAxNToxMzo1OCArMDgwMCAotmekVCwgMDggpFSk6yAyMDE3KSAkCisgKgorICogUHVycG9zZSA6IFJUTDgzNjdDIHN3aXRjaCBoaWdoLWxldmVsIEFQSSBmb3IgUlRMODM2N0MKKyAqIEZlYXR1cmUgOiBTdG9ybSBjb250cm9sIGZpbHRlcmluZyByZWxhdGVkIGZ1bmN0aW9ucworICoKKyAqLworCisjaWZuZGVmIF9SVEw4MzY3Q19BU0lDRFJWX1NUT1JNX0hfCisjZGVmaW5lIF9SVEw4MzY3Q19BU0lDRFJWX1NUT1JNX0hfCisKKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2Lmg+CisKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljU3Rvcm1GaWx0ZXJCcm9hZGNhc3RFbmFibGUocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNTdG9ybUZpbHRlckJyb2FkY2FzdEVuYWJsZShydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgKnBFbmFibGVkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljU3Rvcm1GaWx0ZXJCcm9hZGNhc3RNZXRlcihydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgbWV0ZXIpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNTdG9ybUZpbHRlckJyb2FkY2FzdE1ldGVyKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcE1ldGVyKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljU3Rvcm1GaWx0ZXJNdWx0aWNhc3RFbmFibGUocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNTdG9ybUZpbHRlck11bHRpY2FzdEVuYWJsZShydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgKnBFbmFibGVkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljU3Rvcm1GaWx0ZXJNdWx0aWNhc3RNZXRlcihydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgbWV0ZXIpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNTdG9ybUZpbHRlck11bHRpY2FzdE1ldGVyKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcE1ldGVyKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljU3Rvcm1GaWx0ZXJVbmtub3duTXVsdGljYXN0RW5hYmxlKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBlbmFibGVkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljU3Rvcm1GaWx0ZXJVbmtub3duTXVsdGljYXN0RW5hYmxlKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcEVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNTdG9ybUZpbHRlclVua25vd25NdWx0aWNhc3RNZXRlcihydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgbWV0ZXIpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNTdG9ybUZpbHRlclVua25vd25NdWx0aWNhc3RNZXRlcihydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgKnBNZXRlcik7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1N0b3JtRmlsdGVyVW5rbm93blVuaWNhc3RFbmFibGUocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNTdG9ybUZpbHRlclVua25vd25VbmljYXN0RW5hYmxlKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcEVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNTdG9ybUZpbHRlclVua25vd25VbmljYXN0TWV0ZXIocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIG1ldGVyKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljU3Rvcm1GaWx0ZXJVbmtub3duVW5pY2FzdE1ldGVyKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcE1ldGVyKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljU3Rvcm1GaWx0ZXJFeHRCcm9hZGNhc3RNZXRlcihydGtfdWludDMyIG1ldGVyKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljU3Rvcm1GaWx0ZXJFeHRCcm9hZGNhc3RNZXRlcihydGtfdWludDMyICpwTWV0ZXIpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNTdG9ybUZpbHRlckV4dE11bHRpY2FzdE1ldGVyKHJ0a191aW50MzIgbWV0ZXIpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNTdG9ybUZpbHRlckV4dE11bHRpY2FzdE1ldGVyKHJ0a191aW50MzIgKnBNZXRlcik7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1N0b3JtRmlsdGVyRXh0VW5rbm93bk11bHRpY2FzdE1ldGVyKHJ0a191aW50MzIgbWV0ZXIpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNTdG9ybUZpbHRlckV4dFVua25vd25NdWx0aWNhc3RNZXRlcihydGtfdWludDMyICpwTWV0ZXIpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNTdG9ybUZpbHRlckV4dFVua25vd25VbmljYXN0TWV0ZXIocnRrX3VpbnQzMiBtZXRlcik7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1N0b3JtRmlsdGVyRXh0VW5rbm93blVuaWNhc3RNZXRlcihydGtfdWludDMyICpwTWV0ZXIpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNTdG9ybUZpbHRlckV4dEJyb2FkY2FzdEVuYWJsZShydGtfdWludDMyIGVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNTdG9ybUZpbHRlckV4dEJyb2FkY2FzdEVuYWJsZShydGtfdWludDMyICpwRW5hYmxlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1N0b3JtRmlsdGVyRXh0TXVsdGljYXN0RW5hYmxlKHJ0a191aW50MzIgZW5hYmxlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1N0b3JtRmlsdGVyRXh0TXVsdGljYXN0RW5hYmxlKHJ0a191aW50MzIgKnBFbmFibGVkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljU3Rvcm1GaWx0ZXJFeHRVbmtub3duTXVsdGljYXN0RW5hYmxlKHJ0a191aW50MzIgZW5hYmxlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1N0b3JtRmlsdGVyRXh0VW5rbm93bk11bHRpY2FzdEVuYWJsZShydGtfdWludDMyICpwRW5hYmxlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1N0b3JtRmlsdGVyRXh0VW5rbm93blVuaWNhc3RFbmFibGUocnRrX3VpbnQzMiBlbmFibGVkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljU3Rvcm1GaWx0ZXJFeHRVbmtub3duVW5pY2FzdEVuYWJsZShydGtfdWludDMyICpwRW5hYmxlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1N0b3JtRmlsdGVyRXh0RW5hYmxlUG9ydE1hc2socnRrX3VpbnQzMiBwb3J0bWFzayk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1N0b3JtRmlsdGVyRXh0RW5hYmxlUG9ydE1hc2socnRrX3VpbnQzMiAqcFBvcnRtYXNrKTsKKworCisjZW5kaWYgLypfUlRMODM2N0NfQVNJQ0RSVl9TVE9STV9IXyovCisKKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl9zdmxhbi5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl9zdmxhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNmE0YTgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGw4MzY3Y19hc2ljZHJ2X3N2bGFuLmgKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogJFJldmlzaW9uOiA3NjMwNiAkCisgKiAkRGF0ZTogMjAxNy0wMy0wOCAxNToxMzo1OCArMDgwMCAotmekVCwgMDggpFSk6yAyMDE3KSAkCisgKgorICogUHVycG9zZSA6IFJUTDgzNjdDIHN3aXRjaCBoaWdoLWxldmVsIEFQSSBmb3IgUlRMODM2N0MKKyAqIEZlYXR1cmUgOiBTVkxBTiByZWxhdGVkIGZ1bmN0aW9ucworICoKKyAqLworCisjaWZuZGVmIF9SVEw4MzY3Q19BU0lDRFJWX1NWTEFOX0hfCisjZGVmaW5lIF9SVEw4MzY3Q19BU0lDRFJWX1NWTEFOX0hfCisKKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2Lmg+CisKKyNkZWZpbmUgUlRMODM2N0NfQzJTSURYTk8gICAgICAgICAgICAgICAxMjgKKyNkZWZpbmUgUlRMODM2N0NfQzJTSURYTUFYICAgICAgICAgICAgICAoUlRMODM2N0NfQzJTSURYTk8tMSkKKyNkZWZpbmUgUlRMODM2N0NfTUMyU0lEWE5PICAgICAgICAgICAgICAzMgorI2RlZmluZSBSVEw4MzY3Q19NQzJTSURYTUFYICAgICAgICAgICAgIChSVEw4MzY3Q19NQzJTSURYTk8tMSkKKyNkZWZpbmUgUlRMODM2N0NfU1AyQ0lEWE5PICAgICAgICAgICAgICAxMjgKKyNkZWZpbmUgUlRMODM2N0NfU1AyQ01BWCAgICAgICAgICAgICAgICAoUlRMODM2N0NfU1AyQ0lEWE5PLTEpCisKKyNkZWZpbmUgUlRMODM2N0NfU1ZMQU5fTUVNQ09ORl9MRU4gICAgICA0CisjZGVmaW5lIFJUTDgzNjdDX1NWTEFOX01DMlNfTEVOICAgICAgICAgNQorI2RlZmluZSBSVEw4MzY3Q19TVkxBTl9TUDJDX0xFTiAgICAgICAgIDIKKworZW51bSBSVEw4MzY3Q19TUFJJU0VMCit7CisgICAgU1BSSVNFTF9JTlRFUk5BTFBSSSA9ICAwLAorICAgIFNQUklTRUxfQ1RBR1BSSSwKKyAgICBTUFJJU0VMX1ZTUFJJLAorICAgIFNQUklTRUxfUEJQUkksCisgICAgU1BSSVNFTF9FTkQKK307CisKK2VudW0gUlRMODM2N0NfU1VOQUNDRVBUCit7CisgICAgU1VOQUNDRVBUX0RST1AgPSAgMCwKKyAgICBTVU5BQ0NFUFRfVFJBUCwKKyAgICBTVU5BQ0NFUFRfU1ZMQU4sCisgICAgU1VOQUNDRVBUX0VORAorfTsKKworZW51bSBSVEw4MzY3Q19TVkxBTl9NQzJTX01PREUKK3sKKyAgICBTVkxBTl9NQzJTX01PREVfTUFDID0gIDAsCisgICAgU1ZMQU5fTUMyU19NT0RFX0lQLAorICAgIFNWTEFOX01DMlNfTU9ERV9FTkQKK307CisKKwordHlwZWRlZiBzdHJ1Y3QgIHJ0bDgzNjdjX3N2bGFuX21lbWNvbmZfc3sKKworICAgIHJ0a191aW50MTYgdnNfbWVtYmVyOjExOworICAgIHJ0a191aW50MTYgdnNfdW50YWc6MTE7CisKKyAgICBydGtfdWludDE2IHZzX2ZpZF9tc3RpOjQ7CisgICAgcnRrX3VpbnQxNiB2c19wcmlvcml0eTozOworICAgIHJ0a191aW50MTYgdnNfZm9yY2VfZmlkOjE7CisgICAgcnRrX3VpbnQxNiByZXNlcnZlZDo4OworCisgICAgcnRrX3VpbnQxNiB2c19zdmlkOjEyOworICAgIHJ0a191aW50MTYgdnNfZWZpZGVuOjE7CisgICAgcnRrX3VpbnQxNiB2c19lZmlkOjM7CisKKworfXJ0bDgzNjdjX3N2bGFuX21lbWNvbmZfdDsKKworCit0eXBlZGVmIHN0cnVjdCAgcnRsODM2N2Nfc3ZsYW5fbWMyc19zeworCisgICAgcnRrX3VpbnQxNiB2YWxpZDoxOworICAgIHJ0a191aW50MTYgZm9ybWF0OjE7CisgICAgcnRrX3VpbnQxNiBzdmlkeDo2OworICAgIHJ0a191aW50MzIgc2RhdGE7CisgICAgcnRrX3VpbnQzMiBzbWFzazsKK31ydGw4MzY3Y19zdmxhbl9tYzJzX3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgIHJ0bDgzNjdjX3N2bGFuX3MyY19zeworCisgICAgcnRrX3VpbnQxNiB2YWxpZDoxOworICAgIHJ0a191aW50MTYgc3ZpZHg6NjsKKyAgICBydGtfdWludDE2IGRzdHBvcnQ6NDsKKyAgICBydGtfdWludDMyIHZpZDoxMjsKK31ydGw4MzY3Y19zdmxhbl9zMmNfdDsKKworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNTdmxhbkluZ3Jlc3NVbnRhZyhydGtfdWludDMyIG1vZGUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNTdmxhbkluZ3Jlc3NVbnRhZyhydGtfdWludDMyKiBwTW9kZSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1N2bGFuSW5ncmVzc1VubWF0Y2gocnRrX3VpbnQzMiBtb2RlKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljU3ZsYW5JbmdyZXNzVW5tYXRjaChydGtfdWludDMyKiBwTW9kZSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1N2bGFuVHJhcFByaW9yaXR5KHJ0a191aW50MzIgcHJpb3JpdHkpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNTdmxhblRyYXBQcmlvcml0eShydGtfdWludDMyKiBwUHJpb3JpdHkpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNTdmxhbkRlZmF1bHRWbGFuKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBpbmRleCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1N2bGFuRGVmYXVsdFZsYW4ocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyKiBwSW5kZXgpOworCitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1N2bGFuTWVtYmVyQ29uZmlndXJhdGlvbihydGtfdWludDMyIGluZGV4LHJ0bDgzNjdjX3N2bGFuX21lbWNvbmZfdCogcFN2bGFuTWVtQ2ZnKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljU3ZsYW5NZW1iZXJDb25maWd1cmF0aW9uKHJ0a191aW50MzIgaW5kZXgscnRsODM2N2Nfc3ZsYW5fbWVtY29uZl90KiBwU3ZsYW5NZW1DZmcpOworCitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1N2bGFuUHJpb3JpdHlTZWwocnRrX3VpbnQzMiBwcmlTZWwpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNTdmxhblByaW9yaXR5U2VsKHJ0a191aW50MzIqIHBQcmlTZWwpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNTdmxhblRwaWQocnRrX3VpbnQzMiBwcm90b2NvbFR5cGUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNTdmxhblRwaWQocnRrX3VpbnQzMiogcFByb3RvY29sVHlwZSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1N2bGFuVXBsaW5rUG9ydE1hc2socnRrX3VpbnQzMiBwb3J0TWFzayk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1N2bGFuVXBsaW5rUG9ydE1hc2socnRrX3VpbnQzMiogcFBvcnRtYXNrKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljU3ZsYW5FZ3Jlc3NVbmFzc2lnbihydGtfdWludDMyIGVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNTdmxhbkVncmVzc1VuYXNzaWduKHJ0a191aW50MzIqIHBFbmFibGVkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljU3ZsYW5DMlNDb25mKHJ0a191aW50MzIgaW5kZXgsIHJ0a191aW50MzIgZXZpZCwgcnRrX3VpbnQzMiBwb3J0bWFzaywgcnRrX3VpbnQzMiBzdmlkeCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1N2bGFuQzJTQ29uZihydGtfdWludDMyIGluZGV4LCBydGtfdWludDMyKiBwRXZpZCwgcnRrX3VpbnQzMiogcFBvcnRtYXNrLCBydGtfdWludDMyKiBwU3ZpZHgpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNTdmxhbk1DMlNDb25mKHJ0a191aW50MzIgaW5kZXgscnRsODM2N2Nfc3ZsYW5fbWMyc190KiBwU3ZsYW5NYzJzQ2ZnKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljU3ZsYW5NQzJTQ29uZihydGtfdWludDMyIGluZGV4LHJ0bDgzNjdjX3N2bGFuX21jMnNfdCogcFN2bGFuTWMyc0NmZyk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1N2bGFuU1AyQ0NvbmYocnRrX3VpbnQzMiBpbmRleCxydGw4MzY3Y19zdmxhbl9zMmNfdCogcFN2bGFuU3AyY0NmZyk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1N2bGFuU1AyQ0NvbmYocnRrX3VpbnQzMiBpbmRleCxydGw4MzY3Y19zdmxhbl9zMmNfdCogcFN2bGFuU3AyY0NmZyk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1N2bGFuRG1hY0N2aWRTZWwocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNTdmxhbkRtYWNDdmlkU2VsKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiogcEVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNTdmxhblVudGFnVmxhbihydGtfdWludDMyIGluZGV4KTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljU3ZsYW5VbnRhZ1ZsYW4ocnRrX3VpbnQzMiogcEluZGV4KTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljU3ZsYW5Vbm1hdGNoVmxhbihydGtfdWludDMyIGluZGV4KTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljU3ZsYW5Vbm1hdGNoVmxhbihydGtfdWludDMyKiBwSW5kZXgpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNTdmxhbkxvb2t1cFR5cGUocnRrX3VpbnQzMiB0eXBlKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljU3ZsYW5Mb29rdXBUeXBlKHJ0a191aW50MzIqIHBUeXBlKTsKKworCisjZW5kaWYgLyojaWZuZGVmIF9SVEw4MzY3Q19BU0lDRFJWX1NWTEFOX0hfKi8KKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl90cnVua2luZy5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl90cnVua2luZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlM2E2ODIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGw4MzY3Y19hc2ljZHJ2X3RydW5raW5nLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiAkUmV2aXNpb246IDc2MzA2ICQKKyAqICREYXRlOiAyMDE3LTAzLTA4IDE1OjEzOjU4ICswODAwICi2Z6RULCAwOCCkVKTrIDIwMTcpICQKKyAqCisgKiBQdXJwb3NlIDogUlRMODM2N0Mgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJIGZvciBSVEw4MzY3QworICogRmVhdHVyZSA6IFBvcnQgdHJ1bmtpbmcgcmVsYXRlZCBmdW5jdGlvbnMKKyAqCisgKi8KKworCisjaWZuZGVmIF9SVEw4MzY3Q19BU0lDRFJWX1RSVU5LSU5HX0hfCisjZGVmaW5lIF9SVEw4MzY3Q19BU0lDRFJWX1RSVU5LSU5HX0hfCisKKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2Lmg+CisKKyNkZWZpbmUgUlRMODM2N0NfTUFYX1RSVU5LX0dJRCAgICAgICAgICAgICAgKDIpCisjZGVmaW5lIFJUTDgzNjdDX1RSVU5LSU5HX1BPUlROTyAgICAgICAgICAgICg0KQorI2RlZmluZSBSVEw4MzY3Q19UUlVOS0lORzFfUE9SVE4wICAgICAgICAgICAoMikKKyNkZWZpbmUgUlRMODM2N0NfVFJVTktJTkdfSEFTSFZBTFVFX01BWCAgICAgKDE1KQorCitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1RydW5raW5nR3JvdXAocnRrX3VpbnQzMiBncm91cCwgcnRrX3VpbnQzMiBwb3J0bWFzayk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1RydW5raW5nR3JvdXAocnRrX3VpbnQzMiBncm91cCwgcnRrX3VpbnQzMiogcFBvcnRtYXNrKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljVHJ1bmtpbmdGbG9vZChydGtfdWludDMyIGVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNUcnVua2luZ0Zsb29kKHJ0a191aW50MzIqIHBFbmFibGVkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljVHJ1bmtpbmdIYXNoU2VsZWN0KHJ0a191aW50MzIgaGFzaHNlbCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1RydW5raW5nSGFzaFNlbGVjdChydGtfdWludDMyKiBwSGFzaHNlbCk7CisKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljUWV1ZXVFbXB0eVN0YXR1cyhydGtfdWludDMyKiBwUG9ydG1hc2spOworCitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1RydW5raW5nTW9kZShydGtfdWludDMyIG1vZGUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNUcnVua2luZ01vZGUocnRrX3VpbnQzMiogcE1vZGUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNUcnVua2luZ0ZjKHJ0a191aW50MzIgZ3JvdXAsIHJ0a191aW50MzIgZW5hYmxlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1RydW5raW5nRmMocnRrX3VpbnQzMiBncm91cCwgcnRrX3VpbnQzMiogcEVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNUcnVua2luZ0hhc2hUYWJsZShydGtfdWludDMyIGhhc2h2YWwsIHJ0a191aW50MzIgcG9ydElkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljVHJ1bmtpbmdIYXNoVGFibGUocnRrX3VpbnQzMiBoYXNodmFsLCBydGtfdWludDMyKiBwUG9ydElkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljVHJ1bmtpbmdIYXNoVGFibGUxKHJ0a191aW50MzIgaGFzaHZhbCwgcnRrX3VpbnQzMiBwb3J0SWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNUcnVua2luZ0hhc2hUYWJsZTEocnRrX3VpbnQzMiBoYXNodmFsLCBydGtfdWludDMyKiBwUG9ydElkKTsKKworI2VuZGlmIC8qX1JUTDgzNjdDX0FTSUNEUlZfVFJVTktJTkdfSF8qLworCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGw4MzY3Y19hc2ljZHJ2X3Vua25vd25NdWx0aWNhc3QuaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX2FzaWNkcnZfdW5rbm93bk11bHRpY2FzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNDJkMjUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGw4MzY3Y19hc2ljZHJ2X3Vua25vd25NdWx0aWNhc3QuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNzYzMDYgJAorICogJERhdGU6IDIwMTctMDMtMDggMTU6MTM6NTggKzA4MDAgKLZnpFQsIDA4IKRUpOsgMjAxNykgJAorICoKKyAqIFB1cnBvc2UgOiBSVEw4MzY3QyBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkgZm9yIFJUTDgzNjdDCisgKiBGZWF0dXJlIDogVW5rb3duIG11bHRpY2FzdCByZWxhdGVkIGZ1bmN0aW9ucworICoKKyAqLworCisjaWZuZGVmIF9SVEw4MzY3Q19BU0lDRFJWX1VOS05PV05NVUxUSUNBU1RfSF8KKyNkZWZpbmUgX1JUTDgzNjdDX0FTSUNEUlZfVU5LTk9XTk1VTFRJQ0FTVF9IXworCisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydi5oPgorCitlbnVtIEwyX1VOS09XTl9NVUxUSUNBU1RfQkVIQVZFCit7CisgICAgTDJfVU5LT1dOX01VTFRJQ0FTVF9GTE9PRElORyA9IDAsCisgICAgTDJfVU5LT1dOX01VTFRJQ0FTVF9EUk9QLAorICAgIEwyX1VOS09XTl9NVUxUSUNBU1RfVFJBUCwKKyAgICBMMl9VTktPV05fTVVMVElDQVNUX0RST1BfRVhDTFVERV9STUEsCisgICAgTDJfVU5LT1dOX01VTFRJQ0FTVF9FTkQKK307CisKK2VudW0gTDNfVU5LT1dOX01VTFRJQ0FTVF9CRUhBVkUKK3sKKyAgICBMM19VTktPV05fTVVMVElDQVNUX0ZMT09ESU5HID0gMCwKKyAgICBMM19VTktPV05fTVVMVElDQVNUX0RST1AsCisgICAgTDNfVU5LT1dOX01VTFRJQ0FTVF9UUkFQLAorICAgIEwzX1VOS09XTl9NVUxUSUNBU1RfUk9VVEVSLAorICAgIEwzX1VOS09XTl9NVUxUSUNBU1RfRU5ECit9OworCitlbnVtIE1VTFRJQ0FTVFRZUEV7CisgICAgTVVMVElDQVNUX1RZUEVfSVBWNCA9IDAsCisgICAgTVVMVElDQVNUX1RZUEVfSVBWNiwKKyAgICBNVUxUSUNBU1RfVFlQRV9MMiwKKyAgICBNVUxUSUNBU1RfVFlQRV9FTkQKK307CisKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljVW5rbm93bkwyTXVsdGljYXN0QmVoYXZpb3IocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGJlaGF2ZSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1Vua25vd25MMk11bHRpY2FzdEJlaGF2aW9yKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcEJlaGF2ZSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1Vua25vd25JUHY0TXVsdGljYXN0QmVoYXZpb3IocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGJlaGF2ZSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1Vua25vd25JUHY0TXVsdGljYXN0QmVoYXZpb3IocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyICpwQmVoYXZlKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljVW5rbm93bklQdjZNdWx0aWNhc3RCZWhhdmlvcihydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgYmVoYXZlKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljVW5rbm93bklQdjZNdWx0aWNhc3RCZWhhdmlvcihydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgKnBCZWhhdmUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNVbmtub3duTXVsdGljYXN0VHJhcFByaW9yaXR5KHJ0a191aW50MzIgcHJpb3JpdHkpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNVbmtub3duTXVsdGljYXN0VHJhcFByaW9yaXR5KHJ0a191aW50MzIgKnBQcmlvcml0eSk7CisKKyNlbmRpZiAvKl9SVEw4MzY3Q19BU0lDRFJWX1VOS05PV05NVUxUSUNBU1RfSF8qLworCisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX2FzaWNkcnZfdmxhbi5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl92bGFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE4NDg2NQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX2FzaWNkcnZfdmxhbi5oCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNzYzMDYgJAorICogJERhdGU6IDIwMTctMDMtMDggMTU6MTM6NTggKzA4MDAgKLZnpFQsIDA4IKRUpOsgMjAxNykgJAorICoKKyAqIFB1cnBvc2UgOiBSVEw4MzY3QyBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkgZm9yIFJUTDgzNjdDCisgKiBGZWF0dXJlIDogVkxBTiByZWxhdGVkIGZ1bmN0aW9ucworICoKKyAqLworCisKKyNpZm5kZWYgX1JUTDgzNjdDX0FTSUNEUlZfVkxBTl9IXworI2RlZmluZSBfUlRMODM2N0NfQVNJQ0RSVl9WTEFOX0hfCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogSGVhZGVyIEZpbGUgaW5jbHVzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2Lmg+CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQ29uc3RhbnQgRGVmaW5pdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgUlRMODM2N0NfUFJPVE9WTEFOX0dJRFhfTUFYIDMKKyNkZWZpbmUgUlRMODM2N0NfUFJPVE9WTEFOX0dST1VQTk8gIDQKKworI2RlZmluZSBSVEw4MzY3Q19WTEFOX0JVU1lfQ0hFQ0tfTk8gICAgICgxMCkKKworI2RlZmluZSBSVEw4MzY3Q19WTEFOX01CUkNGR19MRU4gICAgKDQpCisjZGVmaW5lIFJUTDgzNjdDX1ZMQU5fNEtUQUJMRV9MRU4gICAoMykKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBUeXBlIERlZmluaXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBzdHJ1Y3QgIFZMQU5DT05GSUdVU0VSCit7CisgICAgcnRrX3VpbnQxNiAgZXZpZDsKKyAgICBydGtfdWludDE2ICBtYnI7CisgICAgcnRrX3VpbnQxNiAgZmlkX21zdGk7CisgICAgcnRrX3VpbnQxNiAgZW52bGFucG9sOworICAgIHJ0a191aW50MTYgIG1ldGVyaWR4OworICAgIHJ0a191aW50MTYgIHZicGVuOworICAgIHJ0a191aW50MTYgIHZicHJpOworfXJ0bDgzNjdjX3ZsYW5jb25maWd1c2VyOworCit0eXBlZGVmIHN0cnVjdCAgVVNFUl9WTEFOVEFCTEV7CisKKyAgICBydGtfdWludDE2ICB2aWQ7CisgICAgcnRrX3VpbnQxNiAgbWJyOworICAgIHJ0a191aW50MTYgIHVudGFnOworICAgIHJ0a191aW50MTYgIGZpZF9tc3RpOworICAgIHJ0a191aW50MTYgIGVudmxhbnBvbDsKKyAgICBydGtfdWludDE2ICBtZXRlcmlkeDsKKyAgICBydGtfdWludDE2ICB2YnBlbjsKKyAgICBydGtfdWludDE2ICB2YnByaTsKKyAgICBydGtfdWludDE2ICBpdmxfc3ZsOworCit9cnRsODM2N2NfdXNlcl92bGFuNGtlbnRyeTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgRlJBTUVfVFlQRV9CT1RIID0gMCwKKyAgICBGUkFNRV9UWVBFX1RBR0dFRF9PTkxZLAorICAgIEZSQU1FX1RZUEVfVU5UQUdHRURfT05MWSwKKyAgICBGUkFNRV9UWVBFX01BWF9CT1VORAorfSBydGw4MzY3Y19hY2NmcmFtZXR5cGU7CisKK3R5cGVkZWYgZW51bQoreworICAgIEVHX1RBR19NT0RFX09SSSA9IDAsCisgICAgRUdfVEFHX01PREVfS0VFUCwKKyAgICBFR19UQUdfTU9ERV9QUklfVEFHLAorICAgIEVHX1RBR19NT0RFX1JFQUxfS0VFUCwKKyAgICBFR19UQUdfTU9ERV9FTkQKK30gcnRsODM2N2NfZWd0YWdtb2RlOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBQUFZMQU5fRlJBTUVfVFlQRV9FVEhFUk5FVCA9IDAsCisgICAgUFBWTEFOX0ZSQU1FX1RZUEVfTExDLAorICAgIFBQVkxBTl9GUkFNRV9UWVBFX1JGQzEwNDIsCisgICAgUFBWTEFOX0ZSQU1FX1RZUEVfRU5ECit9IHJ0bDgzNjdjX3Byb3ZsYW5fZnJhbWV0eXBlOworCitlbnVtIFJUTDgzNjdDX1NUUFNUCit7CisgICAgU1RQU1RfRElTQUJMRUQgPSAwLAorICAgIFNUUFNUX0JMT0NLSU5HLAorICAgIFNUUFNUX0xFQVJOSU5HLAorICAgIFNUUFNUX0ZPUldBUkRJTkcKK307CisKK2VudW0gUlRMODM2N0NfUkVTVklEQUNUCit7CisgICAgUkVTX1ZJRF9BQ1RfVU5UQUcgPSAwLAorICAgIFJFU19WSURfQUNUX1RBRywKKyAgICBSRVNfVklEX0FDVF9FTkQKK307CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgcnRsODM2N2NfcHJvdmxhbl9mcmFtZXR5cGUgIGZyYW1lVHlwZTsKKyAgICBydGtfdWludDMyICAgICAgICAgICAgICAgICAgICAgIGV0aGVyVHlwZTsKK30gcnRsODM2N2NfcHJvdG9jb2xnZGF0YWNmZzsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBydGtfdWludDMyIHZhbGlkOworICAgIHJ0a191aW50MzIgdmxhbl9pZHg7CisgICAgcnRrX3VpbnQzMiBwcmlvcml0eTsKK30gcnRsODM2N2NfcHJvdG9jb2x2bGFuY2ZnOworCitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1ZsYW5NZW1iZXJDb25maWcocnRrX3VpbnQzMiBpbmRleCwgcnRsODM2N2NfdmxhbmNvbmZpZ3VzZXIgKnBWbGFuQ2cpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNWbGFuTWVtYmVyQ29uZmlnKHJ0a191aW50MzIgaW5kZXgsIHJ0bDgzNjdjX3ZsYW5jb25maWd1c2VyICpwVmxhbkNnKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljVmxhbjRrRW50cnkocnRsODM2N2NfdXNlcl92bGFuNGtlbnRyeSAqcFZsYW40a0VudHJ5ICk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1ZsYW40a0VudHJ5KHJ0bDgzNjdjX3VzZXJfdmxhbjRrZW50cnkgKnBWbGFuNGtFbnRyeSApOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNWbGFuQWNjcGV0RnJhbWVUeXBlKHJ0a191aW50MzIgcG9ydCwgcnRsODM2N2NfYWNjZnJhbWV0eXBlIGZyYW1lVHlwZSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1ZsYW5BY2NwZXRGcmFtZVR5cGUocnRrX3VpbnQzMiBwb3J0LCBydGw4MzY3Y19hY2NmcmFtZXR5cGUgKnBGcmFtZVR5cGUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNWbGFuSW5ncmVzc0ZpbHRlcihydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgZW5hYmxlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1ZsYW5JbmdyZXNzRmlsdGVyKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcEVuYWJsZSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1ZsYW5FZ3Jlc3NUYWdNb2RlKHJ0a191aW50MzIgcG9ydCwgcnRsODM2N2NfZWd0YWdtb2RlIHRhZ01vZGUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNWbGFuRWdyZXNzVGFnTW9kZShydGtfdWludDMyIHBvcnQsIHJ0bDgzNjdjX2VndGFnbW9kZSAqcFRhZ01vZGUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNWbGFuUG9ydEJhc2VkVklEKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBpbmRleCwgcnRrX3VpbnQzMiBwcmkpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNWbGFuUG9ydEJhc2VkVklEKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcEluZGV4LCBydGtfdWludDMyICpwUHJpKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljVmxhblByb3RvY29sQmFzZWRHcm91cERhdGEocnRrX3VpbnQzMiBpbmRleCwgcnRsODM2N2NfcHJvdG9jb2xnZGF0YWNmZyAqcFBiQ2ZnKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljVmxhblByb3RvY29sQmFzZWRHcm91cERhdGEocnRrX3VpbnQzMiBpbmRleCwgcnRsODM2N2NfcHJvdG9jb2xnZGF0YWNmZyAqcFBiQ2ZnKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljVmxhblBvcnRBbmRQcm90b2NvbEJhc2VkKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBpbmRleCwgcnRsODM2N2NfcHJvdG9jb2x2bGFuY2ZnICpwUHBiQ2ZnKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljVmxhblBvcnRBbmRQcm90b2NvbEJhc2VkKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBpbmRleCwgcnRsODM2N2NfcHJvdG9jb2x2bGFuY2ZnICpwUHBiQ2ZnKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljVmxhbkZpbHRlcihydGtfdWludDMyIGVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNWbGFuRmlsdGVyKHJ0a191aW50MzIqIHBFbmFibGVkKTsKKworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNQb3J0QmFzZWRGaWQocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGZpZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BvcnRCYXNlZEZpZChydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIqIHBGaWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNQb3J0QmFzZWRGaWRFbihydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgZW5hYmxlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BvcnRCYXNlZEZpZEVuKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiogcEVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNTcGFubmluZ1RyZWVTdGF0dXMocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIG1zdGksIHJ0a191aW50MzIgc3RhdGUpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX2dldEFzaWNTcGFubmluZ1RyZWVTdGF0dXMocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIG1zdGksIHJ0a191aW50MzIqIHBTdGF0ZSk7CitleHRlcm4gcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1ZsYW5VbnRhZ0RzY3BQcmlvcml0eUVuKHJ0a191aW50MzIgZW5hYmxlZCk7CitleHRlcm4gcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1ZsYW5VbnRhZ0RzY3BQcmlvcml0eUVuKHJ0a191aW50MzIqIGVuYWJsZWQpOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldEFzaWNWbGFuVHJhbnNwYXJlbnQocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIHBvcnRtYXNrKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljVmxhblRyYW5zcGFyZW50KHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcFBvcnRtYXNrKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19zZXRBc2ljVmxhbkVncmVzc0tlZXAocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIHBvcnRtYXNrKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRBc2ljVmxhbkVncmVzc0tlZXAocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyKiBwUG9ydG1hc2spOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldFJlc2VydmVkVmlkQWN0aW9uKHJ0a191aW50MzIgdmlkMEFjdGlvbiwgcnRrX3VpbnQzMiB2aWQ0MDk1QWN0aW9uKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRSZXNlcnZlZFZpZEFjdGlvbihydGtfdWludDMyICpwVmlkMEFjdGlvbiwgcnRrX3VpbnQzMiAqcFZpZDQwOTVBY3Rpb24pOworZXh0ZXJuIHJldF90IHJ0bDgzNjdjX3NldFJlYWxLZWVwUmVtYXJrRW4ocnRrX3VpbnQzMiBlbmFibGVkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19nZXRSZWFsS2VlcFJlbWFya0VuKHJ0a191aW50MzIgKnBFbmFibGVkKTsKK2V4dGVybiByZXRfdCBydGw4MzY3Y19yZXNldFZsYW4odm9pZCk7CisKKyNlbmRpZiAvKiNpZm5kZWYgX1JUTDgzNjdDX0FTSUNEUlZfVkxBTl9IXyovCisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX2Jhc2UuaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX2Jhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzZjYThlCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvcnRsODM2N2NfYmFzZS5oCkBAIC0wLDAgKzEsNTk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNzYzMDYgJAorICogJERhdGU6IDIwMTctMDMtMDggMTU6MTM6NTggKzA4MDAgKLZnpFQsIDA4IKRUpOsgMjAxNykgJAorICoKKyAqIFB1cnBvc2UgOiBSVEw4MzY3QyBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkgZm9yIFJUTDgzNjdDCisgKiBGZWF0dXJlIDogUmVnc2l0ZXIgTUFDUk8gcmVsYXRlZCBkZWZpbml0aW9uCisgKgorICovCisKKyNpZm5kZWYgX1JUTDgzNjdDX0JBU0VfSF8KKyNkZWZpbmUgX1JUTDgzNjdDX0JBU0VfSF8KKworI2luY2x1ZGUgPHJ0bDgzNjdjX3JlZy5oPgorCisvKiAoMTYnaDAwMDApIHBvcnRfcmVnICovCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVF9TUEVDSUFMX0NPTkdFU1RfTU9ERV9USU1FUl9CQVNFICAgICAgICBSVEw4MzY3Q19SRUdfUEtUR0VOX1BPUlQwX1RJTUVSCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfU1BFQ0lBTF9DT05HRVNUX01PREVfVElNRVJfUkVHKHBvcnQpICAgIChSVEw4MzY3Q19QT1JUX1NQRUNJQUxfQ09OR0VTVF9NT0RFX1RJTUVSX0JBU0UgKyAocG9ydCA8PCA1KSkKKworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX01JU0NfQ0ZHX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1BPUlQwX01JU0NfQ0ZHCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfTUlTQ19DRkdfUkVHKHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgKFJUTDgzNjdDX1BPUlRfTUlTQ19DRkdfQkFTRSArIChwb3J0IDw8IDUpKQorI2RlZmluZSAgICBSVEw4MzY3Q18xUVJFTUFSS19FTkFCTEVfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1BPUlQwX01JU0NfQ0ZHX0RPVDFRX1JFTUFSS19FTkFCTEVfT0ZGU0VUCisjZGVmaW5lICAgIFJUTDgzNjdDXzFRUkVNQVJLX0VOQUJMRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUE9SVDBfTUlTQ19DRkdfRE9UMVFfUkVNQVJLX0VOQUJMRV9NQVNLCisKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5HUkVTU0JXX1BPUlRfSUZHX01BU0sgICAgICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19QT1JUMF9NSVNDX0NGR19JTkdSRVNTQldfSUZHX01BU0sKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9FR1JFU1NfTURPRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUE9SVDBfTUlTQ19DRkdfVkxBTl9FR1JFU1NfTU9ERV9NQVNLCisjZGVmaW5lICAgIFJUTDgzNjdDX1NQRUNJQUxDT05HRVNUX1NVU1RBSU5fVElNRVJfTUFTSyAgICAgICAgICAgIFJUTDgzNjdDX1BPUlQwX01JU0NfQ0ZHX0NPTkdFU1RJT05fU1VTVEFJTl9USU1FX01BU0sKKworI2RlZmluZSAgICBSVEw4MzY3Q19JTkdSRVNTQldfUE9SVF9SQVRFX0xTQl9CQVNFICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19JTkdSRVNTQldfUE9SVDBfUkFURV9DVFJMMAorI2RlZmluZSAgICBSVEw4MzY3Q19JTkdSRVNTQldfUE9SVF9SQVRFX0xTQl9SRUcocG9ydCkgICAgICAgICAgICAoUlRMODM2N0NfSU5HUkVTU0JXX1BPUlRfUkFURV9MU0JfQkFTRSArIChwb3J0IDw8IDUpKQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfU01BTExfSVBHX1JFRyhwb3J0KSAgICAgICAgICAgICAgICAgICAgKFJUTDgzNjdDX1JFR19QT1JUMF9NSVNDX0NGRyArIChwb3J0KjB4MjApKQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfRUVFX0NGR19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1BPUlQwX0VFRUNGRworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX0VFRV9DRkdfUkVHKHBvcnQpICAgICAgICAgICAgICAgICAgICAgIChSVEw4MzY3Q19SRUdfUE9SVDBfRUVFQ0ZHICsgKHBvcnQgPDwgNSkpCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfRUVFXzEwME1fT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUE9SVDBfRUVFQ0ZHX0VFRV8xMDBNX09GRlNFVAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX0VFRV8xMDBNX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1BPUlQwX0VFRUNGR19FRUVfMTAwTV9NQVNLCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfRUVFX0dJR0FfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUE9SVDBfRUVFQ0ZHX0VFRV9HSUdBXzUwME1fT0ZGU0VUCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfRUVFX0dJR0FfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUE9SVDBfRUVFQ0ZHX0VFRV9HSUdBXzUwME1fTUFTSworCisKKy8qICgxNidoMDIwMCkgb3V0cV9yZWcgKi8KKworI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRV9EUk9QX09OX0JBU0UgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9RVUVVRTBfRFJPUF9PTgorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRV9EUk9QX09OX1JFRyhxdWV1ZSkgICAgICAgICAgICAoUlRMODM2N0NfRkxPV0NUUkxfUVVFVUVfRFJPUF9PTl9CQVNFICsgcXVldWUpCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1FVRVVFX0RST1BfT05fTUFTSyAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfRkxPV0NUUkxfUVVFVUUwX0RST1BfT05fTUFTSworCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlRfRFJPUF9PTl9CQVNFICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfRkxPV0NUUkxfUE9SVDBfRFJPUF9PTgorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9QT1JUX0RST1BfT05fUkVHKFBPUlQpICAgICAgICAgICAgICAgIChSVEw4MzY3Q19GTE9XQ1RSTF9QT1JUX0RST1BfT05fQkFTRSArIFBPUlQpCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlRfRFJPUF9PTl9NQVNLICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19GTE9XQ1RSTF9QT1JUMF9EUk9QX09OX01BU0sKKworI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9QT1JUX0dBUF9SRUcgICAgICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfRkxPV0NUUkxfUE9SVF9HQVAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUVVFVUVfR0FQX1JFRyAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9RVUVVRV9HQVAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUE9SVF9RRU1QVFlfUkVHICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfUE9SVF9RRU1QVFkKKworLyogKDE2J2gwMzAwKSBzY2hfcmVnICovCisKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfV0ZRX0JVUlNUX1NJWkVfUkVHICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfV0ZRX0JVUlNUX1NJWkUKKworI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9RVUVVRV9UWVBFX0JBU0UgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9RVUVVRV9UWVBFX0NUUkwwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1FVRVVFX1RZUEVfUkVHKHBvcnQpICAgICAgICAgICAgICAgIChSVEw4MzY3Q19TQ0hFRFVMRV9RVUVVRV9UWVBFX0JBU0UgKyAocG9ydCA+PiAxKSkKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUVVFVUVfVFlQRV9PRkZTRVQocG9ydCwgcXVldWUpICAgICAgICAoKChwb3J0ICYgMHgxKSA8PCAzKSArIHF1ZXVlKQorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9RVUVVRV9UWVBFX01BU0socG9ydCwgcXVldWUpICAgICAgICAgUlRMODM2N0NfU0NIRURVTEVfUVVFVUVfVFlQRV9PRkZTRVQocG9ydCwgcXVldWUpCisKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVF9RVUVVRV9XRlFfV0VJR0hUX0JBU0UgICAgICAgICAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfUE9SVDBfUVVFVUUwX1dGUV9XRUlHSFQKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVF9RVUVVRV9XRlFfV0VJR0hUX1JFRyhwb3J0LCBxdWV1ZSkgICAgKFJUTDgzNjdDX1NDSEVEVUxFX1BPUlRfUVVFVUVfV0ZRX1dFSUdIVF9CQVNFICsgKHBvcnQgPDwgMykgKyBxdWV1ZSkKKworI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9BUFJfQ1RSTF9SRUcgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9BUFJfQ1RSTDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfQVBSX0NUUkxfT0ZGU0VUKHBvcnQpICAgICAgICAgICAgICAgIChwb3J0KQorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9BUFJfQ1RSTF9NQVNLKHBvcnQpICAgICAgICAgICAgICAgICgxIDw8IFJUTDgzNjdDX1NDSEVEVUxFX0FQUl9DVFJMX09GRlNFVChwb3J0KSkKKworI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUX0FQUl9NRVRFUl9CQVNFICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUMF9BUFJfTUVURVJfQ1RSTDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVF9BUFJfTUVURVJfUkVHKHBvcnQsIHF1ZXVlKSAgICAoUlRMODM2N0NfU0NIRURVTEVfUE9SVF9BUFJfTUVURVJfQkFTRSArIChwb3J0IDw8IDIpICsgKHF1ZXVlIC8gNSkpCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlRfQVBSX01FVEVSX09GRlNFVChxdWV1ZSkgICAgICAgICgzICogKHF1ZXVlICUgNSkpCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlRfQVBSX01FVEVSX01BU0socXVldWUpICAgICAgICAgICAgKFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQwX0FQUl9NRVRFUl9DVFJMMF9RVUVVRTBfQVBSX01FVEVSX01BU0sgPDwgUlRMODM2N0NfU0NIRURVTEVfUE9SVF9BUFJfTUVURVJfT0ZGU0VUKHF1ZXVlKSkKKworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX0VHUkVTU0JXX0xTQl9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1BPUlQwX0VHUkVTU0JXX0NUUkwwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfRUdSRVNTQldfTFNCX1JFRyhwb3J0KSAgICAgICAgICAgICAgICAgICAgKFJUTDgzNjdDX1BPUlRfRUdSRVNTQldfTFNCX0JBU0UgKyAocG9ydCA8PCAxKSkKKworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX0VHUkVTU0JXX01TQl9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1BPUlQwX0VHUkVTU0JXX0NUUkwxCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfRUdSRVNTQldfTVNCX1JFRyhwb3J0KSAgICAgICAgICAgICAgICAgICAgKFJUTDgzNjdDX1BPUlRfRUdSRVNTQldfTVNCX0JBU0UgKyAocG9ydCA8PCAxKSkKKworLyogKDE2J2gwNTAwKSB0YWJsZV9yZWcgKi8KKworI2RlZmluZSAgICBSVEw4MzY3Q19UQUJMRV9BQ0NFU1NfQ1RSTF9SRUcgICAgICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfVEFCTEVfQUNDRVNTX0NUUkwKKworI2RlZmluZSAgICBSVEw4MzY3Q19UQUJMRV9BQ0NFU1NfQUREUl9SRUcgICAgICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfVEFCTEVfQUNDRVNTX0FERFIKKworI2RlZmluZSAgICBSVEw4MzY3Q19UQUJMRV9BQ0NFU1NfU1RBVFVTX1JFRyAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19UQUJMRV9MVVRfQUREUgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1RBQkxFX0FDQ0VTU19XUkRBVEFfQkFTRSAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1RBQkxFX1dSSVRFX0RBVEEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1RBQkxFX0FDQ0VTU19XUkRBVEFfUkVHKGluZGV4KSAgICAgICAgICAgICAgICAoUlRMODM2N0NfVEFCTEVfQUNDRVNTX1dSREFUQV9CQVNFICsgaW5kZXgpCisKKyNkZWZpbmUgICAgUlRMODM2N0NfVEFCTEVfQUNDRVNTX1JEREFUQV9CQVNFICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfVEFCTEVfUkVBRF9EQVRBMAorI2RlZmluZSAgICBSVEw4MzY3Q19UQUJMRV9BQ0NFU1NfUkREQVRBX1JFRyhpbmRleCkgICAgICAgICAgICAgICAgKFJUTDgzNjdDX1RBQkxFX0FDQ0VTU19SRERBVEFfQkFTRSArIGluZGV4KQorCisKKworLyogKDE2J2gwNjAwKSBhY2xfcmVnICovCisKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1JVTEVfVEVNUExBVEVfQ1RSTF9CQVNFICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfQUNMX1JVTEVfVEVNUExBVEUwX0NUUkwwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9SVUxFX1RFTVBMQVRFX0NUUkxfUkVHKHRlbXBsYXRlKSAgICAgICAgKFJUTDgzNjdDX0FDTF9SVUxFX1RFTVBMQVRFX0NUUkxfQkFTRSArIHRlbXBsYXRlICogMHg0KQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfVEVNUExBVEVfRklFTERfT0ZGU0VUKGZpZWxkKSAgICAgICAgICAgICgoZmllbGQgJiAweDAxKSA8PDMpCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9URU1QTEFURV9GSUVMRF9NQVNLKGZpZWxkKSAgICAgICAgICAgICAgICAoMHgzRiA8PCBSVEw4MzY3Q19BQ0xfVEVNUExBVEVfRklFTERfT0ZGU0VUKGZpZWxkKSkKKworI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfQUNUSU9OX0NUUkxfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19BQ0xfQUNUSU9OX0NUUkwwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9BQ1RJT05fQ1RSTF9SRUcocnVsZSkgICAgICAgICAgICAgICAgICAgKFJUTDgzNjdDX0FDTF9BQ1RJT05fQ1RSTF9CQVNFICsgKHJ1bGUgPj4gMSkpCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9BQ1RJT05fQ1RSTDJfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19BQ0xfQUNUSU9OX0NUUkwzMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfQUNUSU9OX0NUUkwyX1JFRyhydWxlKSAgICAgICAgICAgICAgICAgIChSVEw4MzY3Q19BQ0xfQUNUSU9OX0NUUkwyX0JBU0UgKyAoKHJ1bGUtNjQpID4+IDEpKQorCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9PUF9OT1RfT0ZGU0VUKHJ1bGUpICAgICAgICAgICAgICAgICAgICAgICAgKDYgKyAoKHJ1bGUgJiAweDEpIDw8IDMpKQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfT1BfTk9UX01BU0socnVsZSkgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCBSVEw4MzY3Q19BQ0xfT1BfTk9UX09GRlNFVChydWxlKSkKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX09QX0FDVElPTl9PRkZTRVQocnVsZSkgICAgICAgICAgICAgICAgICAgICgocnVsZSAmIDB4MSkgPDwgMykKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX09QX0FDVElPTl9NQVNLKHJ1bGUpICAgICAgICAgICAgICAgICAgICAoMHgzRiA8PCBSVEw4MzY3Q19BQ0xfT1BfQUNUSU9OX09GRlNFVChydWxlKSkKKworI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfRU5BQkxFX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX0FDTF9FTkFCTEUKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1VOTUFUQ0hfUEVSTUlUX1JFRyAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19BQ0xfVU5NQVRDSF9QRVJNSVQKKworLyogKDE2J2gwNzAwKSBjdmxhbl9yZWcgKi8KKworI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BWSURfQ1RSTF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19WTEFOX1BWSURfQ1RSTDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QVklEX0NUUkxfUkVHKHBvcnQpICAgICAgICAgICAgICAgICAgICAoUlRMODM2N0NfVkxBTl9QVklEX0NUUkxfQkFTRSArIChwb3J0ID4+IDEpKQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1ZJRFhfT0ZGU0VUKHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgKChwb3J0ICYxKTw8MykKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVF9WSURYX01BU0socG9ydCkgICAgICAgICAgICAgICAgICAgICAgICAoUlRMODM2N0NfUE9SVDBfVklEWF9NQVNLIDw8IFJUTDgzNjdDX1BPUlRfVklEWF9PRkZTRVQocG9ydCkpCisKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEJfVkFMSURfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfVkxBTl9QUEIwX1ZBTElECisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCX1ZBTElEX1JFRyhpdGVtKSAgICAgICAgICAgICAgICAgICAgKFJUTDgzNjdDX1ZMQU5fUFBCX1ZBTElEX0JBU0UgKyAoaXRlbSA8PCAzKSkKKworI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9DVFJMX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1ZMQU5fUFBCMF9DVFJMMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9DVFJMX1JFRyhpdGVtLCBwb3J0KSAgICAgICAgICAgICAgIChSVEw4MzY3Q19WTEFOX1BQQl9DVFJMX0JBU0UgKyAoaXRlbSA8PCAzKSArIChwb3J0IC8gMykgKQorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9DVFJMX09GRlNFVChwb3J0KSAgICAgICAgICAgICAgICAgICAgKChwb3J0ICUgMykgKiA1KQorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9DVFJMX01BU0socG9ydCkgICAgICAgICAgICAgICAgICAgIChSVEw4MzY3Q19WTEFOX1BQQjBfQ1RSTDBfUE9SVDBfSU5ERVhfTUFTSyA8PCBSVEw4MzY3Q19WTEFOX1BQQl9DVFJMX09GRlNFVChwb3J0KSkKKworI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9GUkFNRVRZUEVfQkFTRSAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1ZMQU5fUFBCMF9DVFJMMgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9GUkFNRVRZUEVfUkVHKGl0ZW0pICAgICAgICAgICAgICAgKFJUTDgzNjdDX1ZMQU5fUFBCX0ZSQU1FVFlQRV9CQVNFICsgKGl0ZW0gPDwgMykpCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCX0ZSQU1FVFlQRV9NQVNLICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19WTEFOX1BQQjBfQ1RSTDJfRlJBTUVfVFlQRV9NQVNLCisKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEJfRVRIRVJUWVBSX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfVkxBTl9QUEIwX0NUUkwzCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCX0VUSEVSVFlQUl9SRUcoaXRlbSkgICAgICAgICAgICAgICAgKFJUTDgzNjdDX1ZMQU5fUFBCX0VUSEVSVFlQUl9CQVNFICsgKGl0ZW0gPDwgMykpCisKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTl9CQVNFICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMF9DVFJMMAorCisKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9DVFJMX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1ZMQU5fQ1RSTAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fSU5HUkVTU19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1ZMQU5fSU5HUkVTUworCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fQUNDRVBUX0ZSQU1FX1RZUEVfQkFTRSAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1ZMQU5fQUNDRVBUX0ZSQU1FX1RZUEVfQ1RSTDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9BQ0NFUFRfRlJBTUVfVFlQRV9SRUcocG9ydCkgICAgICAgICAgICAoUlRMODM2N0NfVkxBTl9BQ0NFUFRfRlJBTUVfVFlQRV9CQVNFICsgKHBvcnQgPj4gMykpCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fQUNDRVBUX0ZSQU1FX1RZUEVfTUFTSyhwb3J0KSAgICAgICAgICAgKFJUTDgzNjdDX1BPUlQwX0ZSQU1FX1RZUEVfTUFTSyA8PCAoKHBvcnQgJiAweDcpIDw8IDEpKQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfRUZJRF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfUE9SVF9FRklEX0NUUkwwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfRUZJRF9SRUcocG9ydCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJUTDgzNjdDX1BPUlRfRUZJRF9CQVNFICsgKHBvcnQgPj4gMikpCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfRUZJRF9PRkZTRVQocG9ydCkgICAgICAgICAgICAgICAgICAgICAgICAgKChwb3J0ICYgMHgzKSA8PCAyKQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX0VGSURfTUFTSyhwb3J0KSAgICAgICAgICAgICAgICAgICAgICAgIChSVEw4MzY3Q19QT1JUMF9FRklEX01BU0sgPDwgUlRMODM2N0NfUE9SVF9FRklEX09GRlNFVChwb3J0KSkKKworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1BCRklERU5fUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19QT1JUX1BCRklERU4KKworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1BCRklEX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19QT1JUMF9QQkZJRAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1BCRklEX1JFRyhwb3J0KSAgICAgICAgICAgICAgICAgICAgICAgIChSVEw4MzY3Q19QT1JUX1BCRklEX0JBU0UgKyBwb3J0KQorCisvKiAoMTYnaDA4MDApIGRwbV9yZWcgKi8KKworI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfUk1BX0NUUkwwMAorCisKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QT1JUQkFTRURfUFJJT1JJVFlfQkFTRSAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfVkxBTl9QT1JUQkFTRURfUFJJT1JJVFlfQ1RSTDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QT1JUQkFTRURfUFJJT1JJVFlfUkVHKHBvcnQpICAgICAgICAgICAgKFJUTDgzNjdDX1ZMQU5fUE9SVEJBU0VEX1BSSU9SSVRZX0JBU0UgKyAocG9ydCA+PiAyKSkKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QT1JUQkFTRURfUFJJT1JJVFlfT0ZGU0VUKHBvcnQpICAgICAgICAoKHBvcnQgJiAweDMpIDw8IDIpCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUE9SVEJBU0VEX1BSSU9SSVRZX01BU0socG9ydCkgICAgICAgICAgICAoMHg3IDw8IFJUTDgzNjdDX1ZMQU5fUE9SVEJBU0VEX1BSSU9SSVRZX09GRlNFVChwb3J0KSkKKworI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNX0JBU0UgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19WTEFOX1BQQl9QUklPUklUWV9JVEVNMF9DVFJMMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNX1JFRyhwb3J0LCBpdGVtKSAgICAgICAgKFJUTDgzNjdDX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU1fQkFTRSArIChpdGVtIDw8IDIpKyAocG9ydD4+MikpCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU1fT0ZGU0VUKHBvcnQpICAgICAgICAgICAgKChwb3J0ICYgMHgzKSA8PDIpCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU1fTUFTSyhwb3J0KSAgICAgICAgICAgIChSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNMF9DVFJMMF9QT1JUMF9QUklPUklUWV9NQVNLIDw8IFJUTDgzNjdDX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU1fT0ZGU0VUKHBvcnQpKQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU18xUV9QUklPUklUWV9SRU1BUFBJTkdfQkFTRSAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfUU9TXzFRX1BSSU9SSVRZX1JFTUFQUElOR19DVFJMMAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfMVFfUFJJT1JJVFlfUkVNQVBQSU5HX1JFRyhwcmkpICAgICAgICAgICAgKFJUTDgzNjdDX1FPU18xUV9QUklPUklUWV9SRU1BUFBJTkdfQkFTRSArIChwcmkgPj4gMikpCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU18xUV9QUklPUklUWV9SRU1BUFBJTkdfT0ZGU0VUKHByaSkgICAgICAgICgocHJpICYgMHgzKSA8PCAyKQorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfMVFfUFJJT1JJVFlfUkVNQVBQSU5HX01BU0socHJpKSAgICAgICAgICAgICgweDcgPDwgUlRMODM2N0NfUU9TXzFRX1BSSU9SSVRZX1JFTUFQUElOR19PRkZTRVQocHJpKSkKKworI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfRFNDUF9UT19QUklPUklUWV9CQVNFICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfUU9TX0RTQ1BfVE9fUFJJT1JJVFlfQ1RSTDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX0RTQ1BfVE9fUFJJT1JJVFlfUkVHKGRzY3ApICAgICAgICAgICAgICAgIChSVEw4MzY3Q19RT1NfRFNDUF9UT19QUklPUklUWV9CQVNFICsgKGRzY3AgPj4gMikpCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19EU0NQX1RPX1BSSU9SSVRZX09GRlNFVChkc2NwKSAgICAgICAgICAgICgoZHNjcCAmIDB4MykgPDwgMikKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX0RTQ1BfVE9fUFJJT1JJVFlfTUFTSyhkc2NwKSAgICAgICAgICAgICAgICAoMHg3IDw8IFJUTDgzNjdDX1FPU19EU0NQX1RPX1BSSU9SSVRZX09GRlNFVChkc2NwKSkKKworI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfUE9SVEJBU0VEX1BSSU9SSVRZX0JBU0UgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19RT1NfUE9SVEJBU0VEX1BSSU9SSVRZX0NUUkwwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19QT1JUQkFTRURfUFJJT1JJVFlfUkVHKHBvcnQpICAgICAgICAgICAgKFJUTDgzNjdDX1FPU19QT1JUQkFTRURfUFJJT1JJVFlfQkFTRSArIChwb3J0ID4+IDIpKQorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfUE9SVEJBU0VEX1BSSU9SSVRZX09GRlNFVChwb3J0KSAgICAgICAgICAgICgocG9ydCAmIDB4MykgPDwgMikKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX1BPUlRCQVNFRF9QUklPUklUWV9NQVNLKHBvcnQpICAgICAgICAgICAgKDB4NyA8PCBSVEw4MzY3Q19RT1NfUE9SVEJBU0VEX1BSSU9SSVRZX09GRlNFVChwb3J0KSkKKworI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfSU5URVJOQUxfUFJJT1JJVFlfREVDSVNJT05fQkFTRSAgICAgICAgICAgIFJUTDgzNjdDX1JFR19RT1NfSU5URVJOQUxfUFJJT1JJVFlfREVDSVNJT05fQ1RSTDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX0lOVEVSTkFMX1BSSU9SSVRZX0RFQ0lTSU9OX1JFRyhzcmMpICAgICAgICAoUlRMODM2N0NfUU9TX0lOVEVSTkFMX1BSSU9SSVRZX0RFQ0lTSU9OX0JBU0UgKyAoc3JjID4+IDEpKQorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfSU5URVJOQUxfUFJJT1JJVFlfREVDSVNJT05fT0ZGU0VUKHNyYykgICgoc3JjICYgMSkgPDwgMykKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX0lOVEVSTkFMX1BSSU9SSVRZX0RFQ0lTSU9OX01BU0soc3JjKSAgICAoUlRMODM2N0NfUU9TX0lOVEVSTkFMX1BSSU9SSVRZX0RFQ0lTSU9OX0NUUkwwX1FPU19QT1JUX1dFSUdIVF9NQVNLIDw8IFJUTDgzNjdDX1FPU19JTlRFUk5BTF9QUklPUklUWV9ERUNJU0lPTjJfT0ZGU0VUKHNyYykpCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX0lOVEVSTkFMX1BSSU9SSVRZX0RFQ0lTSU9OMl9CQVNFICAgICAgICAgICAgUlRMODM2N0NfUkVHX1FPU19JTlRFUk5BTF9QUklPUklUWV9ERUNJU0lPTjJfQ1RSTDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX0lOVEVSTkFMX1BSSU9SSVRZX0RFQ0lTSU9OMl9SRUcoc3JjKSAgICAgICAgKFJUTDgzNjdDX1FPU19JTlRFUk5BTF9QUklPUklUWV9ERUNJU0lPTjJfQkFTRSArIChzcmMgPj4gMSkpCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19JTlRFUk5BTF9QUklPUklUWV9ERUNJU0lPTjJfT0ZGU0VUKHNyYykgICgoc3JjICYgMSkgPDwgMykKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX0lOVEVSTkFMX1BSSU9SSVRZX0RFQ0lTSU9OMl9NQVNLKHNyYykgICAgKFJUTDgzNjdDX1FPU19JTlRFUk5BTF9QUklPUklUWV9ERUNJU0lPTjJfQ1RSTDBfUU9TX1BPUlRfV0VJR0hUX01BU0sgPDwgUlRMODM2N0NfUU9TX0lOVEVSTkFMX1BSSU9SSVRZX0RFQ0lTSU9OMl9PRkZTRVQoc3JjKSkKKworI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfSU5URVJOQUxfUFJJT1JJVFlfREVDSVNJT05fSURYX0NUUkwgICAgICAgICAgICBSVEw4MzY3Q19SRUdfUU9TX0lOVEVSTkFMX1BSSU9SSVRZX0RFQ0lTSU9OX0lEWAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfSU5URVJOQUxfUFJJT1JJVFlfREVDSVNJT05fSURYKHBvcnQpICAoMSA8PCBwb3J0KQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19QUklQT1JJVFlfUkVNQVBQSU5HX0lOX0NQVV9CQVNFICAgICAgICAgICAgUlRMODM2N0NfUkVHX1FPU19QUklPUklUWV9SRU1BUFBJTkdfSU5fQ1BVX0NUUkwwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19QUklQT1JJVFlfUkVNQVBQSU5HX0lOX0NQVV9SRUcocHJpKSAgICAgICAgKFJUTDgzNjdDX1FPU19QUklQT1JJVFlfUkVNQVBQSU5HX0lOX0NQVV9CQVNFICsgKHByaSA+PiAyKSkKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX1BSSVBPUklUWV9SRU1BUFBJTkdfSU5fQ1BVX09GRlNFVChwcmkpICAoKHByaSAmIDB4MykgPDwgMikKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX1BSSVBPUklUWV9SRU1BUFBJTkdfSU5fQ1BVX01BU0socHJpKSAgICAoUlRMODM2N0NfUU9TX1BSSU9SSVRZX1JFTUFQUElOR19JTl9DUFVfQ1RSTDBfUFJJT1JJVFkwX01BU0sgPDwgUlRMODM2N0NfUU9TX1BSSVBPUklUWV9SRU1BUFBJTkdfSU5fQ1BVX09GRlNFVChwcmkpKQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19UUkFQX1BSSU9SSVRZX0NUUkwwX1JFRyAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfUU9TX1RSQVBfUFJJT1JJVFkwCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX1RSQVBfUFJJT1JJVFlfQ1RSTDFfUkVHICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19RT1NfVFJBUF9QUklPUklUWTEKKworI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfRFNDUF9UT19EU0NQX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19RT1NfRFNDUF9SRU1BUktfRFNDUF9DVFJMMAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfRFNDUF9UT19EU0NQX1JFRyhkc2NwKSAgICAgICAgICAgICAgICAgICAgIChSVEw4MzY3Q19SRUdfUU9TX0RTQ1BfUkVNQVJLX0RTQ1BfQ1RSTDAgKyAoZHNjcCA+PiAxKSkKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX0RTQ1BfVE9fRFNDUF9PRkZTRVQoZHNjcCkgICAgICAgICAgICAgICAgKChkc2NwICYgMHgxKSA8PCA4KQorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfRFNDUF9UT19EU0NQX01BU0soZHNjcCkgICAgICAgICAgICAgICAgICAgKDB4M0YgPDwgUlRMODM2N0NfUU9TX0RTQ1BfVE9fRFNDUF9PRkZTRVQoZHNjcCkpCisKKyNkZWZpbmUgICAgUlRMODM2N0NfVU5VQ0FTVF9GTE9BRElOR19QTVNLX1JFRyAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1VOREFfRkxPT0RJTkdfUE1TSworCisjZGVmaW5lICAgIFJUTDgzNjdDX1VOTUNBU1RfRkxPQURJTkdfUE1TS19SRUcgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19VTk1DQVNUX0ZMT0FESU5HX1BNU0sKKworI2RlZmluZSAgICBSVEw4MzY3Q19CQ0FTVF9GTE9BRElOR19QTVNLX1JFRyAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19CQ0FTVF9GTE9BRElOR19QTVNLCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVF9JU09MQVRJT05fUE9SVF9NQVNLX0JBU0UgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1BPUlRfSVNPTEFUSU9OX1BPUlQwX01BU0sKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVF9JU09MQVRJT05fUE9SVF9NQVNLX1JFRyhwb3J0KSAgICAgICAgICAgIChSVEw4MzY3Q19QT1JUX0lTT0xBVElPTl9QT1JUX01BU0tfQkFTRSArIHBvcnQpCisKKyNkZWZpbmUgICAgUlRMODM2N0NfRk9SQ0VfQ1RSTF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19GT1JDRV9DVFJMCisKKyNkZWZpbmUgICAgUlRMODM2N0NfU09VUkNFX1BPUlRfQkxPQ0tfUkVHICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1NPVVJDRV9QT1JUX1BFUk1JVAorCisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNBU1RfVkxBTl9MRUFLWV9SRUcgICAgICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfSVBNQ0FTVF9WTEFOX0xFQUtZCisKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ0FTVF9QT1JUSVNPX0xFQUtZX1JFRyAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX0lQTUNBU1RfUE9SVElTT19MRUFLWQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfU0VDVVJJVF9DVFJMX1JFRyAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19QT1JUX1NFQ1VSSVRZX0NUUkwKKworI2RlZmluZSAgICBSVEw4MzY3Q19VTktOT1dOX0lQVjRfTVVMVElDQVNUX0JBU0UgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19VTktOT1dOX0lQVjRfTVVMVElDQVNUX0NUUkwwCisjZGVmaW5lICAgIFJUTDgzNjdDX1VOS05PV05fSVBWNF9NVUxUSUNBU1RfUkVHKHBvcnQpICAgICAgICAgICAgKFJUTDgzNjdDX1VOS05PV05fSVBWNF9NVUxUSUNBU1RfQkFTRSArIChwb3J0ID4+IDMpKQorI2RlZmluZSAgICBSVEw4MzY3Q19VTktOT1dOX0lQVjRfTVVMVElDQVNUX09GRlNFVChwb3J0KSAgICAgICAgICAgICgocG9ydCAmIDB4NykgPDwgMSkKKyNkZWZpbmUgICAgUlRMODM2N0NfVU5LTk9XTl9JUFY0X01VTFRJQ0FTVF9NQVNLKHBvcnQpICAgICAgICAgICAgKFJUTDgzNjdDX1BPUlQwX1VOS05PV05fSVA0X01DQVNUX01BU0sgPDwgUlRMODM2N0NfVU5LTk9XTl9JUFY0X01VTFRJQ0FTVF9PRkZTRVQocG9ydCkpCisKKyNkZWZpbmUgICAgUlRMODM2N0NfVU5LTk9XTl9JUFY2X01VTFRJQ0FTVF9CQVNFICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfVU5LTk9XTl9JUFY2X01VTFRJQ0FTVF9DVFJMMAorI2RlZmluZSAgICBSVEw4MzY3Q19VTktOT1dOX0lQVjZfTVVMVElDQVNUX1JFRyhwb3J0KSAgICAgICAgICAgIChSVEw4MzY3Q19VTktOT1dOX0lQVjZfTVVMVElDQVNUX0JBU0UgKyAocG9ydCA+PiAzKSkKKyNkZWZpbmUgICAgUlRMODM2N0NfVU5LTk9XTl9JUFY2X01VTFRJQ0FTVF9PRkZTRVQocG9ydCkgICAgICAgICAgICAoKHBvcnQgJiAweDcpIDw8IDEpCisjZGVmaW5lICAgIFJUTDgzNjdDX1VOS05PV05fSVBWNl9NVUxUSUNBU1RfTUFTSyhwb3J0KSAgICAgICAgICAgIChSVEw4MzY3Q19QT1JUMF9VTktOT1dOX0lQNF9NQ0FTVF9NQVNLIDw8IFJUTDgzNjdDX1VOS05PV05fSVBWNl9NVUxUSUNBU1RfT0ZGU0VUKHBvcnQpKQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1VOS05PV05fTDJfTVVMVElDQVNUX0JBU0UgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19VTktOT1dOX0wyX01VTFRJQ0FTVF9DVFJMMAorI2RlZmluZSAgICBSVEw4MzY3Q19VTktOT1dOX0wyX01VTFRJQ0FTVF9SRUcocG9ydCkgICAgICAgICAgICAgICAgKFJUTDgzNjdDX1VOS05PV05fTDJfTVVMVElDQVNUX0JBU0UgKyAocG9ydCA+PiAzKSkKKyNkZWZpbmUgICAgUlRMODM2N0NfVU5LTk9XTl9MMl9NVUxUSUNBU1RfT0ZGU0VUKHBvcnQpICAgICAgICAgICAgKChwb3J0ICYgMHg3KSA8PCAxKQorI2RlZmluZSAgICBSVEw4MzY3Q19VTktOT1dOX0wyX01VTFRJQ0FTVF9NQVNLKHBvcnQpICAgICAgICAgICAgICAgIChSVEw4MzY3Q19QT1JUMF9VTktOT1dOX0wyX01DQVNUX01BU0sgPDwgUlRMODM2N0NfVU5LTk9XTl9MMl9NVUxUSUNBU1RfT0ZGU0VUKHBvcnQpKQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfVFJVTktfQ1RSTF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1BPUlRfVFJVTktfQ1RSTAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0hBU0hfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA3RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfVFJVTktfR1JPVVBfTUFTS19SRUcgICAgUlRMODM2N0NfUkVHX1BPUlRfVFJVTktfR1JPVVBfTUFTSworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0dST1VQX01BU0tfT0ZGU0VUKGdyb3VwKSAgICAoZ3JvdXAgPDwgMikKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVF9UUlVOS19HUk9VUF9NQVNLX01BU0soZ3JvdXApICAgIChSVEw4MzY3Q19QT1JUX1RSVU5LX0dST1VQMF9NQVNLX01BU0sgPDwgUlRMODM2N0NfUE9SVF9UUlVOS19HUk9VUF9NQVNLX09GRlNFVChncm91cCkpCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVF9UUlVOS19GTE9XQ1RSTF9SRUcgICAgICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfUE9SVF9UUlVOS19GTE9XQ1RSTAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19QT1JUX1FVRVVFX05VTUJFUl9CQVNFICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfUU9TX1BPUlRfUVVFVUVfTlVNQkVSX0NUUkwwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19QT1JUX1FVRVVFX05VTUJFUl9SRUcocG9ydCkgICAgICAgICAgICAgICAgKFJUTDgzNjdDX1FPU19QT1JUX1FVRVVFX05VTUJFUl9CQVNFICsgKHBvcnQgPj4gMikpCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19QT1JUX1FVRVVFX05VTUJFUl9PRkZTRVQocG9ydCkgICAgICAgICAgICAoKHBvcnQgJiAweDMpIDw8IDIpCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19QT1JUX1FVRVVFX05VTUJFUl9NQVNLKHBvcnQpICAgICAgICAgICAgKDB4NyA8PCBSVEw4MzY3Q19RT1NfUE9SVF9RVUVVRV9OVU1CRVJfT0ZGU0VUKHBvcnQpKQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU18xUV9QUklPUklUWV9UT19RSURfQkFTRSAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1FPU18xUV9QUklPUklUWV9UT19RSURfQ1RSTDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzFRX1BSSU9SSVRZX1RPX1FJRF9SRUcoaW5kZXgsIHByaSkgICAgICAgIChSVEw4MzY3Q19RT1NfMVFfUFJJT1JJVFlfVE9fUUlEX0JBU0UgKyAoaW5kZXggPDwgMSkgKyAocHJpID4+IDIpKQorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfMVFfUFJJT1JJVFlfVE9fUUlEX09GRlNFVChwcmkpICAgICAgICAgICAgKChwcmkgJiAweDMpIDw8IDIpCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU18xUV9QUklPUklUWV9UT19RSURfTUFTSyhwcmkpICAgICAgICAgICAgKFJUTDgzNjdDX1FPU18xUV9QUklPUklUWV9UT19RSURfQ1RSTDBfUFJJT1JJVFkwX1RPX1FJRF9NQVNLIDw8IFJUTDgzNjdDX1FPU18xUV9QUklPUklUWV9UT19RSURfT0ZGU0VUKHByaSkpCisKKyNkZWZpbmUgICAgUlRMODM2N0NfREVCVUdfSU5GT19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfUE9SVF9ERUJVR19JTkZPX0NUUkwwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RFQlVHX0lORk9fUkVHKHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgKFJUTDgzNjdDX0RFQlVHX0lORk9fQkFTRSArIChwb3J0ID4+MSkpCisjZGVmaW5lICAgIFJUTDgzNjdDX0RFQlVHX0lORk9fT0ZGU0VUKHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgKChwb3J0JjEpPDwzKQorI2RlZmluZSAgICBSVEw4MzY3Q19ERUJVR19JTkZPX01BU0socG9ydCkgICAgICAgICAgICAgICAgICAgICAgICAoUlRMODM2N0NfUE9SVDBfREVCVUdfSU5GT19NQVNLIDw8IFJUTDgzNjdDX0RFQlVHX0lORk9fT0ZGU0VUKHBvcnQpKQorCisvKiAoMTYnaDBhMDApIGwyX3JlZyAqLworCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfVkxBTl9NU1RJMF9DVFJMMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVElfUkVHKHRyZWUsIHBvcnQpICAgICAgICAgICAgICAgICAgICAoUlRMODM2N0NfVkxBTl9NU1RJX0JBU0UgKyAodHJlZSA8PCAxKSArIChwb3J0ID4+IDMpKQorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVElfT0ZGU0VUKHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgKChwb3J0ICYgMHg3KSA8PCAxKQorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVElfTUFTSyhwb3J0KSAgICAgICAgICAgICAgICAgICAgICAgIChSVEw4MzY3Q19WTEFOX01TVEkwX0NUUkwwX1BPUlQwX1NUQVRFX01BU0sgPDwgUlRMODM2N0NfVkxBTl9NU1RJX09GRlNFVChwb3J0KSkKKworI2RlZmluZSAgICBSVEw4MzY3Q19MVVRfUE9SVF9MRUFSTl9MSU1JVE5PX0JBU0UgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19MVVRfUE9SVDBfTEVBUk5fTElNSVROTworI2RlZmluZSAgICBSVEw4MzY3Q19MVVRfUE9SVF9MRUFSTl9MSU1JVE5PX1JFRyhwb3J0KSAgICAgICAgICAgIChSVEw4MzY3Q19MVVRfUE9SVF9MRUFSTl9MSU1JVE5PX0JBU0UgKyBwb3J0KQorCisjZGVmaW5lICAgIFJUTDgzNjdDX0xVVF9DRkdfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX0xVVF9DRkcKKworI2RlZmluZSAgICBSVEw4MzY3Q19MVVRfQUdFT1VUX0NUUkxfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19MVVRfQUdFT1VUX0NUUkwKKworI2RlZmluZSAgICBSVEw4MzY3Q19GT1JDRV9GTFVTSF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19GT1JDRV9GTFVTSAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX0JDQVNUX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1NUT1JNX0JDQVNUCisKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fTUNBU1RfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfU1RPUk1fTUNBU1QKKworI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9VTktOT1dOX1VDQVNUX1JFRyAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19TVE9STV9VTktPV05fVUNBU1QKKworI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9VTktOT1dOX01DQVNUX1JFRyAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19TVE9STV9VTktPV05fTUNBU1QKKworI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9CQ0FTVF9NRVRFUl9DVFJMX0JBU0UgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19TVE9STV9CQ0FTVF9NRVRFUl9DVFJMMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9CQ0FTVF9NRVRFUl9DVFJMX1JFRyhwb3J0KSAgICAgICAgICAgIChSVEw4MzY3Q19TVE9STV9CQ0FTVF9NRVRFUl9DVFJMX0JBU0UgKyAocG9ydCA+PiAxKSkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fQkNBU1RfTUVURVJfQ1RSTF9PRkZTRVQocG9ydCkgICAgICAgICAgICAoKHBvcnQgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX0JDQVNUX01FVEVSX0NUUkxfTUFTSyhwb3J0KSAgICAgICAgICAgICgweEZGIDw8IFJUTDgzNjdDX1NUT1JNX0JDQVNUX01FVEVSX0NUUkxfT0ZGU0VUKHBvcnQpKQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX01DQVNUX01FVEVSX0NUUkxfQkFTRSAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1NUT1JNX01DQVNUX01FVEVSX0NUUkwwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX01DQVNUX01FVEVSX0NUUkxfUkVHKHBvcnQpICAgICAgICAgICAgKFJUTDgzNjdDX1NUT1JNX01DQVNUX01FVEVSX0NUUkxfQkFTRSArIChwb3J0ID4+IDEpKQorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9NQ0FTVF9NRVRFUl9DVFJMX09GRlNFVChwb3J0KSAgICAgICAgICAgICgocG9ydCAmIDB4MSkgPDwgMykKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fTUNBU1RfTUVURVJfQ1RSTF9NQVNLKHBvcnQpICAgICAgICAgICAgKDB4RkYgPDwgUlRMODM2N0NfU1RPUk1fTUNBU1RfTUVURVJfQ1RSTF9PRkZTRVQocG9ydCkpCisKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fVU5EQV9NRVRFUl9DVFJMX0JBU0UgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19TVE9STV9VTkRBX01FVEVSX0NUUkwwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX1VOREFfTUVURVJfQ1RSTF9SRUcocG9ydCkgICAgICAgICAgICAgICAgKFJUTDgzNjdDX1NUT1JNX1VOREFfTUVURVJfQ1RSTF9CQVNFICsgKHBvcnQgPj4gMSkpCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX1VOREFfTUVURVJfQ1RSTF9PRkZTRVQocG9ydCkgICAgICAgICAgICAoKHBvcnQgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX1VOREFfTUVURVJfQ1RSTF9NQVNLKHBvcnQpICAgICAgICAgICAgKDB4RkYgPDwgUlRMODM2N0NfU1RPUk1fVU5EQV9NRVRFUl9DVFJMX09GRlNFVChwb3J0KSkKKworI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9VTk1DX01FVEVSX0NUUkxfQkFTRSAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1NUT1JNX1VOTUNfTUVURVJfQ1RSTDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fVU5NQ19NRVRFUl9DVFJMX1JFRyhwb3J0KSAgICAgICAgICAgICAgICAoUlRMODM2N0NfU1RPUk1fVU5NQ19NRVRFUl9DVFJMX0JBU0UgKyAocG9ydCA+PiAxKSkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fVU5NQ19NRVRFUl9DVFJMX09GRlNFVChwb3J0KSAgICAgICAgICAgICgocG9ydCAmIDB4MSkgPDwgMykKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fVU5NQ19NRVRFUl9DVFJMX01BU0socG9ydCkgICAgICAgICAgICAoMHhGRiA8PCBSVEw4MzY3Q19TVE9STV9VTk1DX01FVEVSX0NUUkxfT0ZGU0VUKHBvcnQpKQorCisjZGVmaW5lICAgIFJUTDgzNjdDX09BTV9QQVJTRVJfT0ZGU0VUKHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgKHBvcnQqMikKKyNkZWZpbmUgICAgUlRMODM2N0NfT0FNX1BBUlNFUl9NQVNLKHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgKFJUTDgzNjdDX1BPUlQwX1BBUkFDVF9NQVNLIDw8IFJUTDgzNjdDX09BTV9QQVJTRVJfT0ZGU0VUKHBvcnQpKQorCisjZGVmaW5lICAgIFJUTDgzNjdDX09BTV9NVUxUSVBMRVhFUl9PRkZTRVQocG9ydCkgICAgICAgICAgICAgICAgKHBvcnQqMikKKyNkZWZpbmUgICAgUlRMODM2N0NfT0FNX01VTFRJUExFWEVSX01BU0socG9ydCkgICAgICAgICAgICAgICAgICAgIChSVEw4MzY3Q19QT1JUMF9QQVJBQ1RfTUFTSyA8PCBSVEw4MzY3Q19PQU1fTVVMVElQTEVYRVJfT0ZGU0VUKHBvcnQpKQorCisjZGVmaW5lICAgIFJUTDgzNjdDX09BTV9DVFJMX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX09BTV9DVFJMCisKKyNkZWZpbmUgICAgUlRMODM2N0NfRE9UMVhfUE9SVF9FTkFCTEVfUkVHICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX0RPVDFYX1BPUlRfRU5BQkxFCisKKyNkZWZpbmUgICAgUlRMODM2N0NfRE9UMVhfTUFDX0VOQUJMRV9SRUcgICAgICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfRE9UMVhfTUFDX0VOQUJMRQorCisjZGVmaW5lICAgIFJUTDgzNjdDX0RPVDFYX1BPUlRfQVVUSF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX0RPVDFYX1BPUlRfQVVUSAorCisjZGVmaW5lICAgIFJUTDgzNjdDX0RPVDFYX1BPUlRfT1BESVJfUkVHICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX0RPVDFYX1BPUlRfT1BESVIKKworI2RlZmluZSAgICBSVEw4MzY3Q19ET1QxWF9VTkFVVEhfQUNUX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfRE9UMVhfVU5BVVRIX0FDVF9XMAorI2RlZmluZSAgICBSVEw4MzY3Q19ET1QxWF9VTkFVVEhfQUNUX09GRlNFVChwb3J0KSAgICAgICAgICAgICAgICAoKHBvcnQgJiAweDcpIDw8IDEpCisjZGVmaW5lICAgIFJUTDgzNjdDX0RPVDFYX1VOQVVUSF9BQ1RfTUFTSyhwb3J0KSAgICAgICAgICAgICAgICAgICAgKFJUTDgzNjdDX0RPVDFYX1BPUlQwX1VOQVVUSEJIX01BU0sgPDwgUlRMODM2N0NfRE9UMVhfVU5BVVRIX0FDVF9PRkZTRVQocG9ydCkpCisKKyNkZWZpbmUgICAgUlRMODM2N0NfRE9UMVhfQ0ZHX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX0RPVDFYX0NGRworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19MMl9MUk5fQ05UX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX0wyX0xSTl9DTlRfQ1RSTDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0wyX0xSTl9DTlRfUkVHKHBvcnQpICAgICAgICAgICAgICAgICAgICAoUlRMODM2N0NfUkVHX0wyX0xSTl9DTlRfQkFTRSArIHBvcnQpCisKKy8qICgxNidoMGIwMCkgbWx0dmxhbl9yZWcgKi8KKworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZX0JBU0VfUkVHKGluZGV4KSAgICAgICAgKFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMF9DVFJMMCArIGluZGV4KjUpCisKKy8qICgxNidoMGMwMCkgc3ZsYW5fcmVnICovCisKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHX0JBU0VfUkVHKGluZGV4KSAgICAgICAgICAgICAgICAoUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzBfQ1RSTDEgKyBpbmRleCozKQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkdfQkFTRV9SRUcoaW5kZXgpICAgICAgICAgICAgICAgICAgKFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcwX0NUUkwwKyBpbmRleCozKQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DRkdfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQ0ZHCisKKy8qICgxNidoMGYwMCkgaHNhY3RybF9yZWcgKi8KKworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TMkNfRU5UUllfQkFTRV9SRUcoaW5kZXgpICAgICAgICAgICAgICAgIChSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTBfQ1RSTDAgKyBpbmRleCoyKQorCisvKiAoMTYnaDEwMDApIG1pYl9yZWcgKi8KKworI2RlZmluZSAgICBSVEw4MzY3Q19NSUJfQ09VTlRFUl9CQVNFX1JFRyAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19NSUJfQ09VTlRFUjAKKworI2RlZmluZSAgICBSVEw4MzY3Q19NSUJfQUREUkVTU19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19NSUJfQUREUkVTUworCisjZGVmaW5lICAgIFJUTDgzNjdDX01JQl9DVFJMX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX01JQl9DVFJMMAorI2RlZmluZSAgICBSVEw4MzY3Q19NSUJfUE9SVDA3X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweEZGPDxSVEw4MzY3Q19QT1JUMF9SRVNFVF9PRkZTRVQpCisKKy8qICgxNidoMTEwMCkgaW50cnB0X3JlZyAqLworCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfQ1RSTF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19JTlRSX0NUUkwKKworI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNUl9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19JTlRSX0lNUgorCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1TX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX0lOVFJfSU1TCisKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUl9JTkRJQ0FUT1JfQkFTRUQgICAgICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfTEVBUk5fT1ZFUl9JTkRJQ0FUT1IKKyNkZWZpbmUgICAgUlRMODM2N0NfTEVBUk5fT1ZFUl9JTkRJQ0FUT1JfUkVHICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfTEVBUk5fT1ZFUl9JTkRJQ0FUT1IKKworI2RlZmluZSAgICBSVEw4MzY3Q19TUEVFRF9DSEFOR0VfSU5ESUNBVE9SX1JFRyAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1NQRUVEX0NIQU5HRV9JTkRJQ0FUT1IKKworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX0xJTktET1dOX0lORElDQVRPUl9SRUcgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19QT1JUX0xJTktET1dOX0lORElDQVRPUgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfTElOS1VQX0lORElDQVRPUl9SRUcgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19QT1JUX0xJTktVUF9JTkRJQ0FUT1IKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVJfRVhDRUVEX0lORElDQVRPUl9CQVNFICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19NRVRFUl9FWENFRURfSU5ESUNBVE9SMAorI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVJfRVhDRUVEX0lORElDQVRPUl9SRUcobWV0ZXIpICAgICAgICAoUlRMODM2N0NfUkVHX01FVEVSX0VYQ0VFRF9JTkRJQ0FUT1JfQkFTRSArIChtZXRlciA+PiA0KSkKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSX0VYQ0VFRF9JTkRJQ0FUT1JfT0ZGU0VUKG1ldGVyKSAgICAobWV0ZXIgJiAweEYpCisKKy8qICgxNidoMTIwMCkgc3djb3JlX3JlZyAqLworCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZTX1RQSURfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1ZTX1RQSUQKKworI2RlZmluZSAgICBSVEw4MzY3Q19TV0lUQ0hfTUFDX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19TV0lUQ0hfTUFDMAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFTUFSS0lOR19DVFJMX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfU1dJVENIX0NUUkwwCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX0RTQ1BfUkVNQVJLX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfUU9TX0RTQ1BfUkVNQVJLX0NUUkwwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19EU0NQX1JFTUFSS19SRUcocHJpKSAgICAgICAgICAgICAgICAgICAgKFJUTDgzNjdDX1FPU19EU0NQX1JFTUFSS19CQVNFICsgKHByaSA+PiAxKSkKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX0RTQ1BfUkVNQVJLX09GRlNFVChwcmkpICAgICAgICAgICAgICAgICAgICAoKChwcmkpICYgMHgxKSA8PCAzKQorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfRFNDUF9SRU1BUktfTUFTSyhwcmkpICAgICAgICAgICAgICAgICAgICAoMHgzRiA8PCBSVEw4MzY3Q19RT1NfRFNDUF9SRU1BUktfT0ZGU0VUKHByaSkpCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzFRX1JFTUFSS19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19RT1NfMVFfUkVNQVJLX0NUUkwwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU18xUV9SRU1BUktfUkVHKHByaSkgICAgICAgICAgICAgICAgICAgICAgICAoUlRMODM2N0NfUU9TXzFRX1JFTUFSS19CQVNFICsgKHByaSA+PiAyKSkKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzFRX1JFTUFSS19PRkZTRVQocHJpKSAgICAgICAgICAgICAgICAgICAgKChwcmkgJiAweDMpIDw8IDIpCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU18xUV9SRU1BUktfTUFTSyhwcmkpICAgICAgICAgICAgICAgICAgICAgICAgKDB4NyA8PCBSVEw4MzY3Q19RT1NfMVFfUkVNQVJLX09GRlNFVChwcmkpKQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1BUS0dFTl9QQVlMT0FEX0NUUkwwX1JFRyAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1BUS0dFTl9QQVlMT0FEX0NUUkwwCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUFRLR0VOX1BBWUxPQURfQ1RSTDFfUkVHICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfUFRLR0VOX1BBWUxPQURfQ1RSTDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9VUExJTktfUE9SVE1BU0tfUkVHICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fVVBMSU5LX1BPUlRNQVNLCisKKyNkZWZpbmUgICAgUlRMODM2N0NfQ1BVX1BPUlRfTUFTS19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX0NQVV9QT1JUX01BU0sKKworI2RlZmluZSAgICBSVEw4MzY3Q19DUFVfQ1RSTF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19DUFVfQ1RSTAorCisjZGVmaW5lICAgIFJUTDgzNjdDX01JUlJPUl9DVFJMX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX01JUlJPUl9DVFJMCisKKworI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1JUTF9FR1JFU1NfUVVFVUVfRU5BQkxFX0JBU0UgICAgICAgICAgICBSVEw4MzY3Q19SRUdfRkxPV0NSVExfRUdSRVNTX1FVRVVFX0VOQUJMRV9DVFJMMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1JUTF9FR1JFU1NfUVVFVUVfRU5BQkxFX1JFRyhwb3J0KSAgICAgICAgKFJUTDgzNjdDX0ZMT1dDUlRMX0VHUkVTU19RVUVVRV9FTkFCTEVfQkFTRSArIChwb3J0ID4+IDEpKQorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1JUTF9FR1JFU1NfUVVFVUVfRU5BQkxFX1JFR19PRkZTRVQocG9ydCkgICAgKChwb3J0ICYgMHgxKSA8PCAzKQorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1JUTF9FR1JFU1NfUVVFVUVfRU5BQkxFX1JFR19NQVNLKHBvcnQpICAgIChSVEw4MzY3Q19QT1JUMF9RVUVVRV9NQVNLX01BU0sgPDwgUlRMODM2N0NfRkxPV0NSVExfRUdSRVNTX1FVRVVFX0VOQUJMRV9SRUdfT0ZGU0VUKHBvcnQpKQorCisKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUE9SVF9QQUdFX0NPVU5URVJfQkFTRSAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfRkxPV0NUUkxfUE9SVDBfUEFHRV9DT1VOVEVSCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlRfUEFHRV9DT1VOVEVSX1JFRyhwb3J0KSAgICAgICAgKFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlRfUEFHRV9DT1VOVEVSX0JBU0UgKyBwb3J0KQorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9QT1JUX1BBR0VfQ09VTlRFUl9NQVNLICAgICAgICAgICAgICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlQwX1BBR0VfQ09VTlRFUl9NQVNLCisKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUE9SVF9QQUdFX01BWF9CQVNFICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfRkxPV0NUUkxfUE9SVDBfUEFHRV9NQVgKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUE9SVF9QQUdFX01BWF9SRUcocG9ydCkgICAgICAgICAgICAoUlRMODM2N0NfRkxPV0NUUkxfUE9SVF9QQUdFX01BWF9CQVNFICsgcG9ydCkKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUE9SVF9QQUdFX01BWF9NQVNLICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19GTE9XQ1RSTF9QT1JUMF9QQUdFX01BWF9NQVNLCisKKyNkZWZpbmUgICAgUlRMODM2N0NfRklFTERfU0VMRUNUT1JfUkVHKGluZGV4KSAgICAgICAgICAgICAgICAgICAgKFJUTDgzNjdDX1JFR19GSUVMRF9TRUxFQ1RPUjAgKyBpbmRleCkKKyNkZWZpbmUgICAgUlRMODM2N0NfRklFTERfU0VMRUNUT1JfRU5BQkxFX09GRlNFVCAgICAgICAgICAgICAgICAgUlRMODM2N0NfRklFTERfU0VMRUNUT1IwX0VOQUJMRV9PRkZTRVQKKyNkZWZpbmUgICAgUlRMODM2N0NfRklFTERfU0VMRUNUT1JfRU5BQkxFX01BU0sgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX0ZJRUxEX1NFTEVDVE9SMF9FTkFCTEVfTUFTSworI2RlZmluZSAgICBSVEw4MzY3Q19GSUVMRF9TRUxFQ1RPUl9GT1JNQVRfT0ZGU0VUICAgICAgICAgICAgICAgIFJUTDgzNjdDX0ZJRUxEX1NFTEVDVE9SMF9GT1JNQVRfT0ZGU0VUCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJRUxEX1NFTEVDVE9SX0ZPUk1BVF9NQVNLICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19GSUVMRF9TRUxFQ1RPUjBfRk9STUFUX01BU0sKKyNkZWZpbmUgICAgUlRMODM2N0NfRklFTERfU0VMRUNUT1JfT0ZGU0VUX09GRlNFVCAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX0ZJRUxEX1NFTEVDVE9SMF9PRkZTRVRfT0ZGU0VUCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJRUxEX1NFTEVDVE9SX09GRlNFVF9NQVNLICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19GSUVMRF9TRUxFQ1RPUjBfT0ZGU0VUX01BU0sKKworLyogKDE2J2gxMzAwKSBjaGlwX3JlZyovCisKKy8qICgxNidoMTQwMCkgbXRycG9vbF9yZWcgKi8KKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVJfUkFURV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfTUVURVIwX1JBVEVfQ1RSTDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVJfUkFURV9SRUcobWV0ZXIpICAgICAgICAgICAgICAgICAgICAgICAgKChtZXRlciA8PCAxKSArIFJUTDgzNjdDX01FVEVSX1JBVEVfQkFTRSkKKworI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUl9CVUNLRVRfU0laRV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX01FVEVSMF9CVUNLRVRfU0laRQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUl9CVUNLRVRfU0laRV9SRUcobWV0ZXIpICAgICAgICAgICAgICAgIChSVEw4MzY3Q19NRVRFUl9CVUNLRVRfU0laRV9CQVNFICsgbWV0ZXIpCisKKyNkZWZpbmUgICAgUlRMODM2N0NfTEVBS1lfQlVDS0VUX1RJQ0tfUkVHICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX01FVEVSX0NUUkwwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xFQUtZX0JVQ0tFVF9USUNLX09GRlNFVCAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfTUVURVJfVElDS19PRkZTRVQKKyNkZWZpbmUgICAgUlRMODM2N0NfTEVBS1lfQlVDS0VUX1RJQ0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX01FVEVSX1RJQ0tfTUFTSworCisjZGVmaW5lICAgIFJUTDgzNjdDX0xFQUtZX0JVQ0tFVF9UT0tFTl9SRUcgICAgICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfTUVURVJfQ1RSTDEKKyNkZWZpbmUgICAgUlRMODM2N0NfTEVBS1lfQlVDS0VUX1RPS0VOX09GRlNFVCAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfTUVURVJfQ1RSTDFfT0ZGU0VUCisjZGVmaW5lICAgIFJUTDgzNjdDX0xFQUtZX0JVQ0tFVF9UT0tFTl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfTUVURVJfQ1RSTDFfTUFTSworCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSX09WRVJSQVRFX0lORElDQVRPUl9CQVNFICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19NRVRFUl9PVkVSUkFURV9JTkRJQ0FUT1IwCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSX09WRVJSQVRFX0lORElDQVRPUl9SRUcobWV0ZXIpICAgICAgICAgICAgKFJUTDgzNjdDX01FVEVSX09WRVJSQVRFX0lORElDQVRPUl9CQVNFICsgKG1ldGVyID4+IDQpKQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUl9FWENFRURfT0ZGU0VUKG1ldGVyKSAgICAgICAgICAgICAgICAgICAgKG1ldGVyICYgMHhGKQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUl9FWENFRURfTUFTSyhtZXRlcikgICAgICAgICAgICAgICAgICAgICgxIDw8IFJUTDgzNjdDX01FVEVSX0VYQ0VFRF9PRkZTRVQobWV0ZXIpKQorCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSX0lGR19DVFJMX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX01FVEVSX0lGR19DVFJMMAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUl9JRkdfQ1RSTF9SRUcobWV0ZXIpICAgICAgICAgICAgICAgICAgICAoUlRMODM2N0NfTUVURVJfSUZHX0NUUkxfQkFTRSArIChtZXRlciA+PiA0KSkKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVJfSUZHX09GRlNFVChtZXRlcikgICAgICAgICAgICAgICAgICAgICAgICAobWV0ZXIgJiAweEYpCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSX0lGR19NQVNLKG1ldGVyKSAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IFJUTDgzNjdDX01FVEVSX0lGR19PRkZTRVQobWV0ZXIpKQorCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX0NUUkxfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9DVFJMMAorCisvKiAoMTYnaDE4MDApODA1MV9STERQX0VFRV9yZWcgKi8KKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFTExEUF9DVFJMMF9SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfQ1RSTDAKKworI2RlZmluZSAgICBSVEw4MzY3Q19FRUVMTERQX0NUUkwxX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9DVFJMMQorCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRUxMRFBfUE1TS19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUE1TSworCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRUxMRFBfVFhfRlJBTUVVX1JFR19CQVNFICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9GUkFNRVUwMAorCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRUxMRFBfVFhfQ0FQX0ZSQU1FTF9SRUdfQkFTRSAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9DQVBfRlJBTUVMMDAKKworI2RlZmluZSAgICBSVEw4MzY3Q19FRUVMTERQX1JYX1ZBTFVFX1BPUlRfQkFTRSAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUlhfVkFMVUVfUDAwXzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRUxMRFBfUlhfVkFMVUVfUE9SVF9SRUcocG9ydCkgICAgICAgICAgICAgICAgKFJUTDgzNjdDX0VFRUxMRFBfUlhfVkFMVUVfUE9SVF9CQVNFICsgKHBvcnQgKiA5KSkKKworI2RlZmluZSAgICBSVEw4MzY3Q19STERQX0NUUkwwX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1JMRFBfQ1RSTDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUkxEUF9NT0RFX09GRlNFVCAgICAxNAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JMRFBfUkVUUllfQ09VTlRfUkVHICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1JMRFBfQ1RSTDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19STERQX1JFVFJZX1BFUklPRF9MT09QU1RBVEVfUkVHICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19STERQX0NUUkwyCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkxEUF9SRVRSWV9QRVJJT0RfQ0hLU1RBVEVfUkVHICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19STERQX0NUUkwzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkxEUF9UWF9QTVNLX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfUkxEUF9DVFJMNAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JMRFBfUkFORF9OVU1fUkVHX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfUkxEUF9SQU5EX05VTTAKKworI2RlZmluZSAgICBSVEw4MzY3Q19STERQX01BR0lDX05VTV9SRUdfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19STERQX01BR0lDX05VTTAKKworI2RlZmluZSAgICBSVEw4MzY3Q19STERQX0xPT1BfUE1TS19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1JMRFBfTE9PUFNUQVRVU19JTkRJQ0FUT1IKKworI2RlZmluZSAgICBSVEw4MzY3Q19STERQX0xPT1BfUE9SVF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19STERQX0xPT1BfUE9SVF9SRUcwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JMRFBfTE9PUF9QT1JUX1JFRyhwb3J0KSAgICAgICAgICAgICAgICAgICAgKFJUTDgzNjdDX1JMRFBfTE9PUF9QT1JUX0JBU0UgKyAocG9ydCA+PiAxKSkKKyNkZWZpbmUgICAgUlRMODM2N0NfUkxEUF9MT09QX1BPUlRfT0ZGU0VUKHBvcnQpICAgICAgICAgICAgICAgICAgICAoKHBvcnQgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgIFJUTDgzNjdDX1JMRFBfTE9PUF9QT1JUX01BU0socG9ydCkgICAgICAgICAgICAgICAgICAgIChSVEw4MzY3Q19STERQX0xPT1BfUE9SVF8wMF9NQVNLIDw8IFJUTDgzNjdDX1JMRFBfTE9PUF9QT1JUX09GRlNFVChwb3J0KSkKKworI2RlZmluZSAgICBSVEw4MzY3Q19QQUdFTUVURVJfUE9SVF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19QQUdFTUVURVJfUE9SVDBfQ1RSTDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEFHRU1FVEVSX1BPUlRfUkVHKHBvcnQpICAgICAgICAgICAgICAgICAgICAoUlRMODM2N0NfUEFHRU1FVEVSX1BPUlRfQkFTRSArIDB4MjAqcG9ydCkKKworI2RlZmluZSAgICBSVEw4MzY3Q19ISUdIUFJJX0lORElDQVRPUl9SRUcgICAgICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfSElHSFBSSV9JTkRJQ0FUT1IKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVF9JTkRJQ0FUT1JfT0ZGU0VUKHBvcnQpICAgICAgICAgICAgICAgICAgICAocG9ydCkKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVF9JTkRJQ0FUT1JfTUFTSyhwb3J0KSAgICAgICAgICAgICAgICAgICAgKFJUTDgzNjdDX1BPUlQwX0lORElDQVRPUl9NQVNLIDw8IFJUTDgzNjdDX1BPUlRfSU5ESUNBVE9SX09GRlNFVChwb3J0KSkKKworI2RlZmluZSAgICBSVEw4MzY3Q19ISUdIUFJJX0NGR19SRUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19ISUdIUFJJX0NGRworCisjZGVmaW5lICAgIFJUTDgzNjdDX0VBVl9QUklPUklUWV9SRU1BUFBJTkdfQkFTRSAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX0VBVl9DVFJMMQorI2RlZmluZSAgICBSVEw4MzY3Q19FQVZfUFJJT1JJVFlfUkVNQVBQSU5HX1JFRyhwcmkpICAgICAgICAgICAgICAgIChSVEw4MzY3Q19FQVZfUFJJT1JJVFlfUkVNQVBQSU5HX0JBU0UgKyAocHJpID4+IDIpKQorI2RlZmluZSAgICBSVEw4MzY3Q19FQVZfUFJJT1JJVFlfUkVNQVBQSU5HX09GRlNFVChwcmkpICAgICAgICAgICAgKChwcmkgJiAweDMpICogUlRMODM2N0NfUkVNQVBfRUFWX1BSSTFfUkVHRU5fT0ZGU0VUKQorI2RlZmluZSAgICBSVEw4MzY3Q19FQVZfUFJJT1JJVFlfUkVNQVBQSU5HX01BU0socHJpKSAgICAgICAgICAgIChSVEw4MzY3Q19SRU1BUF9FQVZfUFJJMF9SRUdFTl9NQVNLIDw8IFJUTDgzNjdDX0VBVl9QUklPUklUWV9SRU1BUFBJTkdfT0ZGU0VUKHByaSkpCisKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFUF9DRkdfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1BPUlQwX0VFRUNGRworI2RlZmluZSAgICBSVEw4MzY3Q19FRUVQX0NGR19SRUcocG9ydCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJUTDgzNjdDX0VFRVBfQ0ZHX0JBU0UgKyAocG9ydCoweDIwKSkKKworI2RlZmluZSAgICBSVEw4MzY3Q19QS0dfQ0ZHX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDBfQ1RSTAorI2RlZmluZSAgICBSVEw4MzY3Q19QS0dfQ0ZHX1JFRyhwb3J0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUlRMODM2N0NfUEtHX0NGR19CQVNFICsgKHBvcnQqMHgyMCkpCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtHX0RBX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfUEtUR0VOX1BPUlQwX0RBMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS0dfREFfUkVHKHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSVEw4MzY3Q19QS0dfREFfQkFTRSArIChwb3J0KjB4MjApKQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1BLR19TQV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1BLVEdFTl9QT1JUMF9TQTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtHX1NBX1JFRyhwb3J0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUlRMODM2N0NfUEtHX1NBX0JBU0UgKyAocG9ydCoweDIwKSkKKworI2RlZmluZSAgICBSVEw4MzY3Q19QS0dfTlVNX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDBfQ09VTlRFUjAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtHX05VTV9SRUcocG9ydCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJUTDgzNjdDX1BLR19OVU1fQkFTRSArIChwb3J0KjB4MjApKQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1BLR19MRU5HVEhfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1BLVEdFTl9QT1JUMF9UWF9MRU5HVEgKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtHX0xFTkdUSF9SRUcocG9ydCkgICAgICAgICAgICAgICAgICAgICAgICAoUlRMODM2N0NfUEtHX0xFTkdUSF9CQVNFICsgKHBvcnQqMHgyMCkpCisKKy8qICgxNidoMWMwMClJR01QX01MRF9yZWcgKi8KKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9HUk9VUF9VU0FHRV9CQVNFICAgICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfSUdNUF9HUk9VUF9VU0FHRV9MSVNUMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX0dST1VQX1VTQUdFX1JFRyhpZHgpICAgICAgICAgICAgICAgICAgIChSVEw4MzY3Q19JR01QX0dST1VQX1VTQUdFX0JBU0UgKyAoaWR4IC8gMTYpKQorCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZBTExCQUNLX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX0ZBTExCQUNLX1BPUlQwX0NGRzAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkFMTEJBQ0tfUE9SVF9DRkdfUkVHKHBvcnQpICAgICAgICAgICAgICAgICAoUlRMODM2N0NfRkFMTEJBQ0tfQkFTRSArIChwb3J0ICogNCkpCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZBTExCQUNLX1BPUlRfTU9OX0NOVF9SRUcocG9ydCkgICAgICAgICAgICAgKFJUTDgzNjdDX0ZBTExCQUNLX0JBU0UgKyAxICsgKHBvcnQgKiA0KSkKKyNkZWZpbmUgICAgUlRMODM2N0NfRkFMTEJBQ0tfUE9SVF9FUlJfQ05UX1JFRyhwb3J0KSAgICAgICAgICAgICAoUlRMODM2N0NfRkFMTEJBQ0tfQkFTRSArIDMgKyAocG9ydCAqIDQpKQorCisKKy8qICgxNidoNjQwMCl0aW1lcl8xNTg4ICovCisjZGVmaW5lICAgIFJUTDgzNjdDX0VBVl9DRkdfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfUDBfRUFWX0NGRworI2RlZmluZSAgICBSVEw4MzY3Q19FQVZfUE9SVF9DRkdfUkVHKHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJUTDgzNjdDX0VBVl9DRkdfQkFTRSArIChwb3J0ICoweDEwKSkKKyNkZWZpbmUgICAgUlRMODM2N0NfRUFWX0NGR19QVFBfUEhZX0VOX0VOX09GRlNFVCAgICAgICAgICAgICAgICAgUlRMODM2N0NfUDBfRUFWX0NGR19QVFBfUEhZX0VOX0VOX09GRlNFVAorI2RlZmluZSAgICBSVEw4MzY3Q19FQVZfQ0ZHX1JYX1BERUxBWV9SRVNQX09GRlNFVCAgICAgICAgICAgICAgICBSVEw4MzY3Q19QMF9FQVZfQ0ZHX1JYX1BERUxBWV9SRVNQX09GRlNFVAorI2RlZmluZSAgICBSVEw4MzY3Q19FQVZfQ0ZHX1JYX1BERUxBWV9SRVFfT0ZGU0VUICAgICAgICAgICAgICAgICBSVEw4MzY3Q19QMF9FQVZfQ0ZHX1JYX1BERUxBWV9SRVFfT0ZGU0VUCisjZGVmaW5lICAgIFJUTDgzNjdDX0VBVl9DRkdfUlhfREVMQVlfUkVRX09GRlNFVCAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19QMF9FQVZfQ0ZHX1JYX0RFTEFZX1JFUV9PRkZTRVQKKyNkZWZpbmUgICAgUlRMODM2N0NfRUFWX0NGR19SWF9TWU5DX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19QMF9FQVZfQ0ZHX1JYX1NZTkNfT0ZGU0VUCisjZGVmaW5lICAgIFJUTDgzNjdDX0VBVl9DRkdfVFhfUERFTEFZX1JFU1BfT0ZGU0VUICAgICAgICAgICAgICAgIFJUTDgzNjdDX1AwX0VBVl9DRkdfVFhfUERFTEFZX1JFU1BfT0ZGU0VUCisjZGVmaW5lICAgIFJUTDgzNjdDX0VBVl9DRkdfVFhfUERFTEFZX1JFUV9PRkZTRVQgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1AwX0VBVl9DRkdfVFhfUERFTEFZX1JFUV9PRkZTRVQKKyNkZWZpbmUgICAgUlRMODM2N0NfRUFWX0NGR19UWF9ERUxBWV9SRVFfT0ZGU0VUICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1AwX0VBVl9DRkdfVFhfREVMQVlfUkVRX09GRlNFVAorI2RlZmluZSAgICBSVEw4MzY3Q19FQVZfQ0ZHX1RYX1NZTkNfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1AwX0VBVl9DRkdfVFhfU1lOQ19PRkZTRVQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVFhfU1lOQ19TRVFfSURfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1AwX1RYX1NZTkNfU0VRX0lECisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19UWF9TWU5DX1NFUV9JRChwb3J0KSAgICAgICAgICAgICAgICAgICAgICAgIChSVEw4MzY3Q19SRUdfVFhfU1lOQ19TRVFfSURfQkFTRSArIChwb3J0ICoweDEwKSkKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NFUV9JRChwb3J0LCB0eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSVEw4MzY3Q19SRUdfVFhfU1lOQ19TRVFfSURfQkFTRSArIHR5cGUgKyAocG9ydCAqMHgxMCkpCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1RYX0RFTEFZX1JFUV9TRVFfSURfQkFTRSAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1AwX1RYX0RFTEFZX1JFUV9TRVFfSUQKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1RYX1BERUxBWV9SRVFfU0VRX0lEX0JBU0UgICAgICAgICAgUlRMODM2N0NfUkVHX1AwX1RYX1BERUxBWV9SRVFfU0VRX0lECisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19UWF9QREVMQVlfUkVTUF9TRVFfSURfQkFTRSAgICAgICAgUlRMODM2N0NfUkVHX1AwX1RYX1BERUxBWV9SRVNQX1NFUV9JRAorI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUlhfU1lOQ19TRVFfSURfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19QMF9SWF9TWU5DX1NFUV9JRAorI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUlhfREVMQVlfUkVRX1NFUV9JRF9CQVNFICAgICAgICAgICAgUlRMODM2N0NfUkVHX1AwX1JYX0RFTEFZX1JFUV9TRVFfSUQKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1JYX1BERUxBWV9SRVFfU0VRX0lEX0JBU0UgICAgICAgIFJUTDgzNjdDX1JFR19QMF9SWF9QREVMQVlfUkVRX1NFUV9JRAorI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUlhfUERFTEFZX1JFU1BfU0VRX0lEX0JBU0UgICAgICAgIFJUTDgzNjdDX1JFR19QMF9SWF9QREVMQVlfUkVTUF9TRVFfSUQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVF9OU0VDX0xfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfUDBfUE9SVF9OU0VDXzE1XzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlRfTlNFQ19MKHBvcnQpICAgICAgICAgICAgICAgICAgICAgICAgICAgIChSVEw4MzY3Q19SRUdfUE9SVF9OU0VDX0xfQkFTRSArIChwb3J0ICoweDEwKSkKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlRfTlNFQ19IX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1AwX1BPUlRfTlNFQ18yNl8xNgorI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVF9OU0VDX0gocG9ydCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJUTDgzNjdDX1JFR19QT1JUX05TRUNfSF9CQVNFICsgKHBvcnQgKjB4MTApKQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX05TRUNfSF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1AwX1BPUlRfTlNFQ18yNl8xNl9PRkZTRVQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVF9OU0VDX0hfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUDBfUE9SVF9OU0VDXzI2XzE2X01BU0sKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVF9TRUNfTF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfUDBfUE9SVF9TRUNfMTVfMAorI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVF9TRUNfTChwb3J0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUlRMODM2N0NfUkVHX1BPUlRfU0VDX0xfQkFTRSArIChwb3J0ICoweDEwKSkKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlRfU0VDX0hfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfUDBfUE9SVF9TRUNfMzFfMTYKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlRfU0VDX0gocG9ydCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFJUTDgzNjdDX1JFR19QT1JUX1NFQ19IX0JBU0UgKyAocG9ydCAqMHgxMCkpCisKKyNlbmRpZiAvKiNpZm5kZWYgX1JUTDgzNjdDX0JBU0VfSF8qLworCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGw4MzY3Y19yZWcuaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNGY0OGIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9ydGw4MzY3Y19yZWcuaApAQCAtMCwwICsxLDIyODE5IEBACisjaWZuZGVmIF9SVEw4MzY3Q19SRUdfSF8KKyNkZWZpbmUgX1JUTDgzNjdDX1JFR19IXworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCithdXRvLWdlbmVyYXRlZCByZWdpc3RlciBhZGRyZXNzIGFuZCBmaWVsZCBkYXRhCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiAoMTYnaDAwMDApcG9ydF9yZWcgKi8KKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDBfQ0dTVF9IQUxGX0NGRyAgICAweDAwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfQ0dTVF9IQUxGX0NGR19DT05HRVNUSU9OX1RJTUVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfQ0dTVF9IQUxGX0NGR19DT05HRVNUSU9OX1RJTUVfTUFTSyAgICAweEYwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX0NHU1RfSEFMRl9DRkdfQ09OR0VTVElPTl9TVVNUQUlOX1RJTUVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfQ0dTVF9IQUxGX0NGR19DT05HRVNUSU9OX1NVU1RBSU5fVElNRV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDBfQ1RSTCAgICAweDAwMDEKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQwX0NUUkxfU1RBVFVTX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDBfQ1RSTF9TVEFUVVNfTUFTSyAgICAweDgwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQwX0NUUkxfUEtUR0VOX1NUU19PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQwX0NUUkxfUEtUR0VOX1NUU19NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDBfQ1RSTF9DUkNfTk9fRVJST1JfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQwX0NUUkxfQ1JDX05PX0VSUk9SX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDBfQ1RSTF9DTURfU1RBUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQwX0NUUkxfQ01EX1NUQVJUX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1RYX0VSUl9DTlRfUE9SVDAgICAgMHgwMDAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1RYX0VSUl9DTlRfUE9SVDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVFhfRVJSX0NOVF9QT1JUMF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDBfREEwICAgIDB4MDAwMworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDBfREExICAgIDB4MDAwNAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDBfREEyICAgIDB4MDAwNQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDBfU0EwICAgIDB4MDAwNgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDBfU0ExICAgIDB4MDAwNworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDBfU0EyICAgIDB4MDAwOAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDBfQ09VTlRFUjAgICAgMHgwMDA5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BLVEdFTl9QT1JUMF9DT1VOVEVSMSAgICAweDAwMGEKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQwX0NPVU5URVIxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BLVEdFTl9QT1JUMF9DT1VOVEVSMV9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEtUR0VOX1BPUlQwX1RYX0xFTkdUSCAgICAweDAwMGIKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQwX1RYX0xFTkdUSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDBfVFhfTEVOR1RIX01BU0sgICAgMHgzRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BLVEdFTl9QT1JUMF9USU1FUiAgICAweDAwMGQKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQwX1RJTUVSX1RJTUVSX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BLVEdFTl9QT1JUMF9USU1FUl9USU1FUl9NQVNLICAgIDB4RjAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQwX1RJTUVSX1JYX0RNQV9FUlJfRkxBR19PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDBfVElNRVJfUlhfRE1BX0VSUl9GTEFHX01BU0sgICAgMHg4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQwX01JU0NfQ0ZHICAgIDB4MDAwZQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9NSVNDX0NGR19TTUFMTF9UQUdfSVBHX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9NSVNDX0NGR19TTUFMTF9UQUdfSVBHX01BU0sgICAgMHg4MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX01JU0NfQ0ZHX1RYX0lURlNQX01PREVfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX01JU0NfQ0ZHX1RYX0lURlNQX01PREVfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfTUlTQ19DRkdfRkxPV0NUUkxfSU5ERVBfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX01JU0NfQ0ZHX0ZMT1dDVFJMX0lOREVQX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX01JU0NfQ0ZHX0RPVDFRX1JFTUFSS19FTkFCTEVfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX01JU0NfQ0ZHX0RPVDFRX1JFTUFSS19FTkFCTEVfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfTUlTQ19DRkdfSU5HUkVTU0JXX0ZMT1dDVFJMX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9NSVNDX0NGR19JTkdSRVNTQldfRkxPV0NUUkxfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9NSVNDX0NGR19JTkdSRVNTQldfSUZHX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9NSVNDX0NGR19JTkdSRVNTQldfSUZHX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfTUlTQ19DRkdfUlhfU1BDX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX01JU0NfQ0ZHX1JYX1NQQ19NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX01JU0NfQ0ZHX0NSQ19TS0lQX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX01JU0NfQ0ZHX0NSQ19TS0lQX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfTUlTQ19DRkdfUEtUR0VOX1RYX0ZJUlNUX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX01JU0NfQ0ZHX1BLVEdFTl9UWF9GSVJTVF9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfTUlTQ19DRkdfTUFDX0xPT1BCQUNLX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX01JU0NfQ0ZHX01BQ19MT09QQkFDS19NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfTUlTQ19DRkdfVkxBTl9FR1JFU1NfTU9ERV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9NSVNDX0NGR19WTEFOX0VHUkVTU19NT0RFX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9NSVNDX0NGR19DT05HRVNUSU9OX1NVU1RBSU5fVElNRV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9NSVNDX0NGR19DT05HRVNUSU9OX1NVU1RBSU5fVElNRV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JTkdSRVNTQldfUE9SVDBfUkFURV9DVFJMMCAgICAweDAwMGYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSU5HUkVTU0JXX1BPUlQwX1JBVEVfQ1RSTDEgICAgMHgwMDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOR1JFU1NCV19QT1JUMF9SQVRFX0NUUkwxX0RVTU1ZX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOR1JFU1NCV19QT1JUMF9SQVRFX0NUUkwxX0RVTU1ZX01BU0sgICAgMHhGRkY4CisjZGVmaW5lICAgIFJUTDgzNjdDX0lOR1JFU1NCV19QT1JUMF9SQVRFX0NUUkwxX0lOR1JFU1NCV19SQVRFMTZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5HUkVTU0JXX1BPUlQwX1JBVEVfQ1RSTDFfSU5HUkVTU0JXX1JBVEUxNl9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUMF9GT1JDRV9SQVRFMCAgICAweDAwMTEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDBfRk9SQ0VfUkFURTEgICAgMHgwMDEyCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQwX0NVUkVOVF9SQVRFMCAgICAweDAwMTMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDBfQ1VSRU5UX1JBVEUxICAgIDB4MDAxNAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUMF9QQUdFX0NPVU5URVIgICAgMHgwMDE1CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX1BBR0VfQ09VTlRFUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9QQUdFX0NPVU5URVJfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BBR0VNRVRFUl9QT1JUMF9DVFJMMCAgICAweDAwMTYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEFHRU1FVEVSX1BPUlQwX0NUUkwxICAgIDB4MDAxNworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUMF9FRUVDRkcgICAgMHgwMDE4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX0VFRUNGR19FRUVQX0VOQUJMRV9UWF9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfRUVFQ0ZHX0VFRVBfRU5BQkxFX1RYX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX0VFRUNGR19FRUVQX0VOQUJMRV9SWF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfRUVFQ0ZHX0VFRVBfRU5BQkxFX1JYX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX0VFRUNGR19FRUVfRk9SQ0VfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX0VFRUNGR19FRUVfRk9SQ0VfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfRUVFQ0ZHX0VFRV8xMDBNX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9FRUVDRkdfRUVFXzEwME1fTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9FRUVDRkdfRUVFX0dJR0FfNTAwTV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfRUVFQ0ZHX0VFRV9HSUdBXzUwME1fTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9FRUVDRkdfRUVFX1RYX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX0VFRUNGR19FRUVfVFhfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9FRUVDRkdfRUVFX1JYX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX0VFRUNGR19FRUVfUlhfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9FRUVDRkdfRUVFX0RTUF9SWF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9FRUVDRkdfRUVFX0RTUF9SWF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfRUVFQ0ZHX0VFRV9MUElfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfRUVFQ0ZHX0VFRV9MUElfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX0VFRUNGR19FRUVfVFhfTFBJX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX0VFRUNGR19FRUVfVFhfTFBJX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9FRUVDRkdfRUVFX1JYX0xQSV9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9FRUVDRkdfRUVFX1JYX0xQSV9NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9FRUVDRkdfRUVFX1BBVVNFX0lORElDQVRPUl9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9FRUVDRkdfRUVFX1BBVVNFX0lORElDQVRPUl9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9FRUVDRkdfRUVFX1dBS0VfUkVRX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX0VFRUNGR19FRUVfV0FLRV9SRVFfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfRUVFQ0ZHX0VFRV9TTEVFUF9SRVFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfRUVFQ0ZHX0VFRV9TTEVFUF9SRVFfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDBfRUVFVFhNVFIgICAgMHgwMDE5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQwX0VFRVJYTVRSICAgIDB4MDAxYQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUMF9FRUVQVFhNVFIgICAgMHgwMDFiCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQwX0VFRVBSWE1UUiAgICAweDAwMWMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUFRQX1BPUlQwX0NGRzEgICAgMHgwMDFlCisjZGVmaW5lICAgIFJUTDgzNjdDX1BUUF9QT1JUMF9DRkcxX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1BUUF9QT1JUMF9DRkcxX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QMF9NU0lDMSAgICAweDAwMWYKKyNkZWZpbmUgICAgUlRMODM2N0NfUDBfTVNJQzFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDBfTVNJQzFfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDFfQ0dTVF9IQUxGX0NGRyAgICAweDAwMjAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfQ0dTVF9IQUxGX0NGR19DT05HRVNUSU9OX1RJTUVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfQ0dTVF9IQUxGX0NGR19DT05HRVNUSU9OX1RJTUVfTUFTSyAgICAweEYwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX0NHU1RfSEFMRl9DRkdfQ09OR0VTVElPTl9TVVNUQUlOX1RJTUVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfQ0dTVF9IQUxGX0NGR19DT05HRVNUSU9OX1NVU1RBSU5fVElNRV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDFfQ1RSTCAgICAweDAwMjEKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQxX0NUUkxfU1RBVFVTX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDFfQ1RSTF9TVEFUVVNfTUFTSyAgICAweDgwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQxX0NUUkxfUEtUR0VOX1NUU19PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQxX0NUUkxfUEtUR0VOX1NUU19NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDFfQ1RSTF9DUkNfTk9fRVJST1JfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQxX0NUUkxfQ1JDX05PX0VSUk9SX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDFfQ1RSTF9DTURfU1RBUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQxX0NUUkxfQ01EX1NUQVJUX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1RYX0VSUl9DTlRfUE9SVDEgICAgMHgwMDIyCisjZGVmaW5lICAgIFJUTDgzNjdDX1RYX0VSUl9DTlRfUE9SVDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVFhfRVJSX0NOVF9QT1JUMV9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDFfREEwICAgIDB4MDAyMworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDFfREExICAgIDB4MDAyNAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDFfREEyICAgIDB4MDAyNQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDFfU0EwICAgIDB4MDAyNgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDFfU0ExICAgIDB4MDAyNworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDFfU0EyICAgIDB4MDAyOAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDFfQ09VTlRFUjAgICAgMHgwMDI5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BLVEdFTl9QT1JUMV9DT1VOVEVSMSAgICAweDAwMmEKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQxX0NPVU5URVIxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BLVEdFTl9QT1JUMV9DT1VOVEVSMV9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEtUR0VOX1BPUlQxX1RYX0xFTkdUSCAgICAweDAwMmIKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQxX1RYX0xFTkdUSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDFfVFhfTEVOR1RIX01BU0sgICAgMHgzRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BLVEdFTl9QT1JUMV9USU1FUiAgICAweDAwMmQKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQxX1RJTUVSX1RJTUVSX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BLVEdFTl9QT1JUMV9USU1FUl9USU1FUl9NQVNLICAgIDB4RjAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQxX1RJTUVSX1JYX0RNQV9FUlJfRkxBR19PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDFfVElNRVJfUlhfRE1BX0VSUl9GTEFHX01BU0sgICAgMHg4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQxX01JU0NfQ0ZHICAgIDB4MDAyZQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9NSVNDX0NGR19TTUFMTF9UQUdfSVBHX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9NSVNDX0NGR19TTUFMTF9UQUdfSVBHX01BU0sgICAgMHg4MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX01JU0NfQ0ZHX1RYX0lURlNQX01PREVfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX01JU0NfQ0ZHX1RYX0lURlNQX01PREVfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfTUlTQ19DRkdfRkxPV0NUUkxfSU5ERVBfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX01JU0NfQ0ZHX0ZMT1dDVFJMX0lOREVQX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX01JU0NfQ0ZHX0RPVDFRX1JFTUFSS19FTkFCTEVfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX01JU0NfQ0ZHX0RPVDFRX1JFTUFSS19FTkFCTEVfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfTUlTQ19DRkdfSU5HUkVTU0JXX0ZMT1dDVFJMX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9NSVNDX0NGR19JTkdSRVNTQldfRkxPV0NUUkxfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9NSVNDX0NGR19JTkdSRVNTQldfSUZHX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9NSVNDX0NGR19JTkdSRVNTQldfSUZHX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfTUlTQ19DRkdfUlhfU1BDX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX01JU0NfQ0ZHX1JYX1NQQ19NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX01JU0NfQ0ZHX0NSQ19TS0lQX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX01JU0NfQ0ZHX0NSQ19TS0lQX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfTUlTQ19DRkdfUEtUR0VOX1RYX0ZJUlNUX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX01JU0NfQ0ZHX1BLVEdFTl9UWF9GSVJTVF9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfTUlTQ19DRkdfTUFDX0xPT1BCQUNLX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX01JU0NfQ0ZHX01BQ19MT09QQkFDS19NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfTUlTQ19DRkdfVkxBTl9FR1JFU1NfTU9ERV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9NSVNDX0NGR19WTEFOX0VHUkVTU19NT0RFX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9NSVNDX0NGR19DT05HRVNUSU9OX1NVU1RBSU5fVElNRV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9NSVNDX0NGR19DT05HRVNUSU9OX1NVU1RBSU5fVElNRV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JTkdSRVNTQldfUE9SVDFfUkFURV9DVFJMMCAgICAweDAwMmYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSU5HUkVTU0JXX1BPUlQxX1JBVEVfQ1RSTDEgICAgMHgwMDMwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOR1JFU1NCV19QT1JUMV9SQVRFX0NUUkwxX0RVTU1ZX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOR1JFU1NCV19QT1JUMV9SQVRFX0NUUkwxX0RVTU1ZX01BU0sgICAgMHhGRkY4CisjZGVmaW5lICAgIFJUTDgzNjdDX0lOR1JFU1NCV19QT1JUMV9SQVRFX0NUUkwxX0lOR1JFU1NCV19SQVRFMTZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5HUkVTU0JXX1BPUlQxX1JBVEVfQ1RSTDFfSU5HUkVTU0JXX1JBVEUxNl9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUMV9GT1JDRV9SQVRFMCAgICAweDAwMzEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDFfRk9SQ0VfUkFURTEgICAgMHgwMDMyCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQxX0NVUkVOVF9SQVRFMCAgICAweDAwMzMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDFfQ1VSRU5UX1JBVEUxICAgIDB4MDAzNAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUMV9QQUdFX0NPVU5URVIgICAgMHgwMDM1CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX1BBR0VfQ09VTlRFUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9QQUdFX0NPVU5URVJfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BBR0VNRVRFUl9QT1JUMV9DVFJMMCAgICAweDAwMzYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEFHRU1FVEVSX1BPUlQxX0NUUkwxICAgIDB4MDAzNworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUMV9FRUVDRkcgICAgMHgwMDM4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX0VFRUNGR19FRUVQX0VOQUJMRV9UWF9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfRUVFQ0ZHX0VFRVBfRU5BQkxFX1RYX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX0VFRUNGR19FRUVQX0VOQUJMRV9SWF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfRUVFQ0ZHX0VFRVBfRU5BQkxFX1JYX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX0VFRUNGR19FRUVfRk9SQ0VfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX0VFRUNGR19FRUVfRk9SQ0VfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfRUVFQ0ZHX0VFRV8xMDBNX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9FRUVDRkdfRUVFXzEwME1fTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9FRUVDRkdfRUVFX0dJR0FfNTAwTV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfRUVFQ0ZHX0VFRV9HSUdBXzUwME1fTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9FRUVDRkdfRUVFX1RYX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX0VFRUNGR19FRUVfVFhfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9FRUVDRkdfRUVFX1JYX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX0VFRUNGR19FRUVfUlhfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9FRUVDRkdfRUVFX0RTUF9SWF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9FRUVDRkdfRUVFX0RTUF9SWF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfRUVFQ0ZHX0VFRV9MUElfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfRUVFQ0ZHX0VFRV9MUElfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX0VFRUNGR19FRUVfVFhfTFBJX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX0VFRUNGR19FRUVfVFhfTFBJX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9FRUVDRkdfRUVFX1JYX0xQSV9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9FRUVDRkdfRUVFX1JYX0xQSV9NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9FRUVDRkdfRUVFX1BBVVNFX0lORElDQVRPUl9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9FRUVDRkdfRUVFX1BBVVNFX0lORElDQVRPUl9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9FRUVDRkdfRUVFX1dBS0VfUkVRX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX0VFRUNGR19FRUVfV0FLRV9SRVFfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfRUVFQ0ZHX0VFRV9TTEVFUF9SRVFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfRUVFQ0ZHX0VFRV9TTEVFUF9SRVFfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDFfRUVFVFhNVFIgICAgMHgwMDM5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQxX0VFRVJYTVRSICAgIDB4MDAzYQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUMV9FRUVQVFhNVFIgICAgMHgwMDNiCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQxX0VFRVBSWE1UUiAgICAweDAwM2MKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUFRQX1BPUlQxX0NGRzEgICAgMHgwMDNlCisjZGVmaW5lICAgIFJUTDgzNjdDX1BUUF9QT1JUMV9DRkcxX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1BUUF9QT1JUMV9DRkcxX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QMV9NU0lDMSAgICAweDAwM2YKKyNkZWZpbmUgICAgUlRMODM2N0NfUDFfTVNJQzFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDFfTVNJQzFfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDJfQ0dTVF9IQUxGX0NGRyAgICAweDAwNDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfQ0dTVF9IQUxGX0NGR19DT05HRVNUSU9OX1RJTUVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfQ0dTVF9IQUxGX0NGR19DT05HRVNUSU9OX1RJTUVfTUFTSyAgICAweEYwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX0NHU1RfSEFMRl9DRkdfQ09OR0VTVElPTl9TVVNUQUlOX1RJTUVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfQ0dTVF9IQUxGX0NGR19DT05HRVNUSU9OX1NVU1RBSU5fVElNRV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDJfQ1RSTCAgICAweDAwNDEKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQyX0NUUkxfU1RBVFVTX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDJfQ1RSTF9TVEFUVVNfTUFTSyAgICAweDgwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQyX0NUUkxfUEtUR0VOX1NUU19PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQyX0NUUkxfUEtUR0VOX1NUU19NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDJfQ1RSTF9DUkNfTk9fRVJST1JfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQyX0NUUkxfQ1JDX05PX0VSUk9SX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDJfQ1RSTF9DTURfU1RBUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQyX0NUUkxfQ01EX1NUQVJUX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1RYX0VSUl9DTlRfUE9SVDIgICAgMHgwMDQyCisjZGVmaW5lICAgIFJUTDgzNjdDX1RYX0VSUl9DTlRfUE9SVDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVFhfRVJSX0NOVF9QT1JUMl9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDJfREEwICAgIDB4MDA0MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDJfREExICAgIDB4MDA0NAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDJfREEyICAgIDB4MDA0NQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDJfU0EwICAgIDB4MDA0NgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDJfU0ExICAgIDB4MDA0NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDJfU0EyICAgIDB4MDA0OAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDJfQ09VTlRFUjAgICAgMHgwMDQ5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BLVEdFTl9QT1JUMl9DT1VOVEVSMSAgICAweDAwNGEKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQyX0NPVU5URVIxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BLVEdFTl9QT1JUMl9DT1VOVEVSMV9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEtUR0VOX1BPUlQyX1RYX0xFTkdUSCAgICAweDAwNGIKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQyX1RYX0xFTkdUSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDJfVFhfTEVOR1RIX01BU0sgICAgMHgzRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BLVEdFTl9QT1JUMl9USU1FUiAgICAweDAwNGQKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQyX1RJTUVSX1RJTUVSX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BLVEdFTl9QT1JUMl9USU1FUl9USU1FUl9NQVNLICAgIDB4RjAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQyX1RJTUVSX1JYX0RNQV9FUlJfRkxBR19PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDJfVElNRVJfUlhfRE1BX0VSUl9GTEFHX01BU0sgICAgMHg4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQyX01JU0NfQ0ZHICAgIDB4MDA0ZQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9NSVNDX0NGR19TTUFMTF9UQUdfSVBHX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9NSVNDX0NGR19TTUFMTF9UQUdfSVBHX01BU0sgICAgMHg4MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX01JU0NfQ0ZHX1RYX0lURlNQX01PREVfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX01JU0NfQ0ZHX1RYX0lURlNQX01PREVfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfTUlTQ19DRkdfRkxPV0NUUkxfSU5ERVBfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX01JU0NfQ0ZHX0ZMT1dDVFJMX0lOREVQX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX01JU0NfQ0ZHX0RPVDFRX1JFTUFSS19FTkFCTEVfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX01JU0NfQ0ZHX0RPVDFRX1JFTUFSS19FTkFCTEVfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfTUlTQ19DRkdfSU5HUkVTU0JXX0ZMT1dDVFJMX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9NSVNDX0NGR19JTkdSRVNTQldfRkxPV0NUUkxfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9NSVNDX0NGR19JTkdSRVNTQldfSUZHX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9NSVNDX0NGR19JTkdSRVNTQldfSUZHX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfTUlTQ19DRkdfUlhfU1BDX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX01JU0NfQ0ZHX1JYX1NQQ19NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX01JU0NfQ0ZHX0NSQ19TS0lQX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX01JU0NfQ0ZHX0NSQ19TS0lQX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfTUlTQ19DRkdfUEtUR0VOX1RYX0ZJUlNUX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX01JU0NfQ0ZHX1BLVEdFTl9UWF9GSVJTVF9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfTUlTQ19DRkdfTUFDX0xPT1BCQUNLX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX01JU0NfQ0ZHX01BQ19MT09QQkFDS19NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfTUlTQ19DRkdfVkxBTl9FR1JFU1NfTU9ERV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9NSVNDX0NGR19WTEFOX0VHUkVTU19NT0RFX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9NSVNDX0NGR19DT05HRVNUSU9OX1NVU1RBSU5fVElNRV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9NSVNDX0NGR19DT05HRVNUSU9OX1NVU1RBSU5fVElNRV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JTkdSRVNTQldfUE9SVDJfUkFURV9DVFJMMCAgICAweDAwNGYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSU5HUkVTU0JXX1BPUlQyX1JBVEVfQ1RSTDEgICAgMHgwMDUwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOR1JFU1NCV19QT1JUMl9SQVRFX0NUUkwxX0RVTU1ZX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOR1JFU1NCV19QT1JUMl9SQVRFX0NUUkwxX0RVTU1ZX01BU0sgICAgMHhGRkY4CisjZGVmaW5lICAgIFJUTDgzNjdDX0lOR1JFU1NCV19QT1JUMl9SQVRFX0NUUkwxX0lOR1JFU1NCV19SQVRFMTZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5HUkVTU0JXX1BPUlQyX1JBVEVfQ1RSTDFfSU5HUkVTU0JXX1JBVEUxNl9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUMl9GT1JDRV9SQVRFMCAgICAweDAwNTEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDJfRk9SQ0VfUkFURTEgICAgMHgwMDUyCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQyX0NVUkVOVF9SQVRFMCAgICAweDAwNTMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDJfQ1VSRU5UX1JBVEUxICAgIDB4MDA1NAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUMl9QQUdFX0NPVU5URVIgICAgMHgwMDU1CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX1BBR0VfQ09VTlRFUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9QQUdFX0NPVU5URVJfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BBR0VNRVRFUl9QT1JUMl9DVFJMMCAgICAweDAwNTYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEFHRU1FVEVSX1BPUlQyX0NUUkwxICAgIDB4MDA1NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUMl9FRUVDRkcgICAgMHgwMDU4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX0VFRUNGR19FRUVQX0VOQUJMRV9UWF9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfRUVFQ0ZHX0VFRVBfRU5BQkxFX1RYX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX0VFRUNGR19FRUVQX0VOQUJMRV9SWF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfRUVFQ0ZHX0VFRVBfRU5BQkxFX1JYX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX0VFRUNGR19FRUVfRk9SQ0VfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX0VFRUNGR19FRUVfRk9SQ0VfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfRUVFQ0ZHX0VFRV8xMDBNX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9FRUVDRkdfRUVFXzEwME1fTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9FRUVDRkdfRUVFX0dJR0FfNTAwTV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfRUVFQ0ZHX0VFRV9HSUdBXzUwME1fTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9FRUVDRkdfRUVFX1RYX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX0VFRUNGR19FRUVfVFhfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9FRUVDRkdfRUVFX1JYX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX0VFRUNGR19FRUVfUlhfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9FRUVDRkdfRUVFX0RTUF9SWF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9FRUVDRkdfRUVFX0RTUF9SWF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfRUVFQ0ZHX0VFRV9MUElfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfRUVFQ0ZHX0VFRV9MUElfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX0VFRUNGR19FRUVfVFhfTFBJX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX0VFRUNGR19FRUVfVFhfTFBJX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9FRUVDRkdfRUVFX1JYX0xQSV9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9FRUVDRkdfRUVFX1JYX0xQSV9NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9FRUVDRkdfRUVFX1BBVVNFX0lORElDQVRPUl9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9FRUVDRkdfRUVFX1BBVVNFX0lORElDQVRPUl9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9FRUVDRkdfRUVFX1dBS0VfUkVRX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX0VFRUNGR19FRUVfV0FLRV9SRVFfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfRUVFQ0ZHX0VFRV9TTEVFUF9SRVFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfRUVFQ0ZHX0VFRV9TTEVFUF9SRVFfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDJfRUVFVFhNVFIgICAgMHgwMDU5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQyX0VFRVJYTVRSICAgIDB4MDA1YQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUMl9FRUVQVFhNVFIgICAgMHgwMDViCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQyX0VFRVBSWE1UUiAgICAweDAwNWMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUFRQX1BPUlQyX0NGRzEgICAgMHgwMDVlCisjZGVmaW5lICAgIFJUTDgzNjdDX1BUUF9QT1JUMl9DRkcxX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1BUUF9QT1JUMl9DRkcxX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QMl9NU0lDMSAgICAweDAwNWYKKyNkZWZpbmUgICAgUlRMODM2N0NfUDJfTVNJQzFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDJfTVNJQzFfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDNfQ0dTVF9IQUxGX0NGRyAgICAweDAwNjAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfQ0dTVF9IQUxGX0NGR19DT05HRVNUSU9OX1RJTUVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfQ0dTVF9IQUxGX0NGR19DT05HRVNUSU9OX1RJTUVfTUFTSyAgICAweEYwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX0NHU1RfSEFMRl9DRkdfQ09OR0VTVElPTl9TVVNUQUlOX1RJTUVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfQ0dTVF9IQUxGX0NGR19DT05HRVNUSU9OX1NVU1RBSU5fVElNRV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDNfQ1RSTCAgICAweDAwNjEKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQzX0NUUkxfU1RBVFVTX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDNfQ1RSTF9TVEFUVVNfTUFTSyAgICAweDgwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQzX0NUUkxfUEtUR0VOX1NUU19PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQzX0NUUkxfUEtUR0VOX1NUU19NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDNfQ1RSTF9DUkNfTk9fRVJST1JfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQzX0NUUkxfQ1JDX05PX0VSUk9SX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDNfQ1RSTF9DTURfU1RBUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQzX0NUUkxfQ01EX1NUQVJUX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1RYX0VSUl9DTlRfUE9SVDMgICAgMHgwMDYyCisjZGVmaW5lICAgIFJUTDgzNjdDX1RYX0VSUl9DTlRfUE9SVDNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVFhfRVJSX0NOVF9QT1JUM19NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDNfREEwICAgIDB4MDA2MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDNfREExICAgIDB4MDA2NAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDNfREEyICAgIDB4MDA2NQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDNfU0EwICAgIDB4MDA2NgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDNfU0ExICAgIDB4MDA2NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDNfU0EyICAgIDB4MDA2OAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDNfQ09VTlRFUjAgICAgMHgwMDY5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BLVEdFTl9QT1JUM19DT1VOVEVSMSAgICAweDAwNmEKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQzX0NPVU5URVIxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BLVEdFTl9QT1JUM19DT1VOVEVSMV9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEtUR0VOX1BPUlQzX1RYX0xFTkdUSCAgICAweDAwNmIKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQzX1RYX0xFTkdUSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDNfVFhfTEVOR1RIX01BU0sgICAgMHgzRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BLVEdFTl9QT1JUM19USU1FUiAgICAweDAwNmQKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQzX1RJTUVSX1RJTUVSX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BLVEdFTl9QT1JUM19USU1FUl9USU1FUl9NQVNLICAgIDB4RjAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQzX1RJTUVSX1JYX0RNQV9FUlJfRkxBR19PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDNfVElNRVJfUlhfRE1BX0VSUl9GTEFHX01BU0sgICAgMHg4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQzX01JU0NfQ0ZHICAgIDB4MDA2ZQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19NSVNDX0NGR19TTUFMTF9UQUdfSVBHX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19NSVNDX0NGR19TTUFMTF9UQUdfSVBHX01BU0sgICAgMHg4MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX01JU0NfQ0ZHX1RYX0lURlNQX01PREVfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX01JU0NfQ0ZHX1RYX0lURlNQX01PREVfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfTUlTQ19DRkdfRkxPV0NUUkxfSU5ERVBfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX01JU0NfQ0ZHX0ZMT1dDVFJMX0lOREVQX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX01JU0NfQ0ZHX0RPVDFRX1JFTUFSS19FTkFCTEVfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX01JU0NfQ0ZHX0RPVDFRX1JFTUFSS19FTkFCTEVfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfTUlTQ19DRkdfSU5HUkVTU0JXX0ZMT1dDVFJMX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19NSVNDX0NGR19JTkdSRVNTQldfRkxPV0NUUkxfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19NSVNDX0NGR19JTkdSRVNTQldfSUZHX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19NSVNDX0NGR19JTkdSRVNTQldfSUZHX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfTUlTQ19DRkdfUlhfU1BDX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX01JU0NfQ0ZHX1JYX1NQQ19NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX01JU0NfQ0ZHX0NSQ19TS0lQX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX01JU0NfQ0ZHX0NSQ19TS0lQX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfTUlTQ19DRkdfUEtUR0VOX1RYX0ZJUlNUX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX01JU0NfQ0ZHX1BLVEdFTl9UWF9GSVJTVF9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfTUlTQ19DRkdfTUFDX0xPT1BCQUNLX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX01JU0NfQ0ZHX01BQ19MT09QQkFDS19NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfTUlTQ19DRkdfVkxBTl9FR1JFU1NfTU9ERV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19NSVNDX0NGR19WTEFOX0VHUkVTU19NT0RFX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19NSVNDX0NGR19DT05HRVNUSU9OX1NVU1RBSU5fVElNRV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19NSVNDX0NGR19DT05HRVNUSU9OX1NVU1RBSU5fVElNRV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JTkdSRVNTQldfUE9SVDNfUkFURV9DVFJMMCAgICAweDAwNmYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSU5HUkVTU0JXX1BPUlQzX1JBVEVfQ1RSTDEgICAgMHgwMDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOR1JFU1NCV19QT1JUM19SQVRFX0NUUkwxX0RVTU1ZX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOR1JFU1NCV19QT1JUM19SQVRFX0NUUkwxX0RVTU1ZX01BU0sgICAgMHhGRkY4CisjZGVmaW5lICAgIFJUTDgzNjdDX0lOR1JFU1NCV19QT1JUM19SQVRFX0NUUkwxX0lOR1JFU1NCV19SQVRFMTZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5HUkVTU0JXX1BPUlQzX1JBVEVfQ1RSTDFfSU5HUkVTU0JXX1JBVEUxNl9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUM19GT1JDRV9SQVRFMCAgICAweDAwNzEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDNfRk9SQ0VfUkFURTEgICAgMHgwMDcyCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQzX0NVUkVOVF9SQVRFMCAgICAweDAwNzMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDNfQ1VSRU5UX1JBVEUxICAgIDB4MDA3NAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUM19QQUdFX0NPVU5URVIgICAgMHgwMDc1CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX1BBR0VfQ09VTlRFUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19QQUdFX0NPVU5URVJfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BBR0VNRVRFUl9QT1JUM19DVFJMMCAgICAweDAwNzYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEFHRU1FVEVSX1BPUlQzX0NUUkwxICAgIDB4MDA3NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUM19FRUVDRkcgICAgMHgwMDc4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX0VFRUNGR19FRUVQX0VOQUJMRV9UWF9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfRUVFQ0ZHX0VFRVBfRU5BQkxFX1RYX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX0VFRUNGR19FRUVQX0VOQUJMRV9SWF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfRUVFQ0ZHX0VFRVBfRU5BQkxFX1JYX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX0VFRUNGR19FRUVfRk9SQ0VfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX0VFRUNGR19FRUVfRk9SQ0VfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfRUVFQ0ZHX0VFRV8xMDBNX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19FRUVDRkdfRUVFXzEwME1fTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19FRUVDRkdfRUVFX0dJR0FfNTAwTV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfRUVFQ0ZHX0VFRV9HSUdBXzUwME1fTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19FRUVDRkdfRUVFX1RYX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX0VFRUNGR19FRUVfVFhfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19FRUVDRkdfRUVFX1JYX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX0VFRUNGR19FRUVfUlhfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19FRUVDRkdfRUVFX0RTUF9SWF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19FRUVDRkdfRUVFX0RTUF9SWF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfRUVFQ0ZHX0VFRV9MUElfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfRUVFQ0ZHX0VFRV9MUElfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX0VFRUNGR19FRUVfVFhfTFBJX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX0VFRUNGR19FRUVfVFhfTFBJX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19FRUVDRkdfRUVFX1JYX0xQSV9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19FRUVDRkdfRUVFX1JYX0xQSV9NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19FRUVDRkdfRUVFX1BBVVNFX0lORElDQVRPUl9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19FRUVDRkdfRUVFX1BBVVNFX0lORElDQVRPUl9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19FRUVDRkdfRUVFX1dBS0VfUkVRX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX0VFRUNGR19FRUVfV0FLRV9SRVFfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfRUVFQ0ZHX0VFRV9TTEVFUF9SRVFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfRUVFQ0ZHX0VFRV9TTEVFUF9SRVFfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDNfRUVFVFhNVFIgICAgMHgwMDc5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQzX0VFRVJYTVRSICAgIDB4MDA3YQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUM19FRUVQVFhNVFIgICAgMHgwMDdiCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQzX0VFRVBSWE1UUiAgICAweDAwN2MKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUFRQX1BPUlQzX0NGRzEgICAgMHgwMDdlCisjZGVmaW5lICAgIFJUTDgzNjdDX1BUUF9QT1JUM19DRkcxX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1BUUF9QT1JUM19DRkcxX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QM19NU0lDMSAgICAweDAwN2YKKyNkZWZpbmUgICAgUlRMODM2N0NfUDNfTVNJQzFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDNfTVNJQzFfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDRfQ0dTVF9IQUxGX0NGRyAgICAweDAwODAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfQ0dTVF9IQUxGX0NGR19DT05HRVNUSU9OX1RJTUVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfQ0dTVF9IQUxGX0NGR19DT05HRVNUSU9OX1RJTUVfTUFTSyAgICAweEYwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X0NHU1RfSEFMRl9DRkdfQ09OR0VTVElPTl9TVVNUQUlOX1RJTUVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfQ0dTVF9IQUxGX0NGR19DT05HRVNUSU9OX1NVU1RBSU5fVElNRV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDRfQ1RSTCAgICAweDAwODEKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ0X0NUUkxfU1RBVFVTX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDRfQ1RSTF9TVEFUVVNfTUFTSyAgICAweDgwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ0X0NUUkxfUEtUR0VOX1NUU19PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ0X0NUUkxfUEtUR0VOX1NUU19NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDRfQ1RSTF9DUkNfTk9fRVJST1JfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ0X0NUUkxfQ1JDX05PX0VSUk9SX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDRfQ1RSTF9DTURfU1RBUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ0X0NUUkxfQ01EX1NUQVJUX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1RYX0VSUl9DTlRfUE9SVDQgICAgMHgwMDgyCisjZGVmaW5lICAgIFJUTDgzNjdDX1RYX0VSUl9DTlRfUE9SVDRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVFhfRVJSX0NOVF9QT1JUNF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDRfREEwICAgIDB4MDA4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDRfREExICAgIDB4MDA4NAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDRfREEyICAgIDB4MDA4NQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDRfU0EwICAgIDB4MDA4NgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDRfU0ExICAgIDB4MDA4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDRfU0EyICAgIDB4MDA4OAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDRfQ09VTlRFUjAgICAgMHgwMDg5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BLVEdFTl9QT1JUNF9DT1VOVEVSMSAgICAweDAwOGEKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ0X0NPVU5URVIxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BLVEdFTl9QT1JUNF9DT1VOVEVSMV9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEtUR0VOX1BPUlQ0X1RYX0xFTkdUSCAgICAweDAwOGIKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ0X1RYX0xFTkdUSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDRfVFhfTEVOR1RIX01BU0sgICAgMHgzRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BLVEdFTl9QT1JUNF9USU1FUiAgICAweDAwOGQKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ0X1RJTUVSX1RJTUVSX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BLVEdFTl9QT1JUNF9USU1FUl9USU1FUl9NQVNLICAgIDB4RjAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ0X1RJTUVSX1JYX0RNQV9FUlJfRkxBR19PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDRfVElNRVJfUlhfRE1BX0VSUl9GTEFHX01BU0sgICAgMHg4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQ0X01JU0NfQ0ZHICAgIDB4MDA4ZQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9NSVNDX0NGR19TTUFMTF9UQUdfSVBHX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9NSVNDX0NGR19TTUFMTF9UQUdfSVBHX01BU0sgICAgMHg4MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X01JU0NfQ0ZHX1RYX0lURlNQX01PREVfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X01JU0NfQ0ZHX1RYX0lURlNQX01PREVfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfTUlTQ19DRkdfRkxPV0NUUkxfSU5ERVBfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X01JU0NfQ0ZHX0ZMT1dDVFJMX0lOREVQX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X01JU0NfQ0ZHX0RPVDFRX1JFTUFSS19FTkFCTEVfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X01JU0NfQ0ZHX0RPVDFRX1JFTUFSS19FTkFCTEVfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfTUlTQ19DRkdfSU5HUkVTU0JXX0ZMT1dDVFJMX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9NSVNDX0NGR19JTkdSRVNTQldfRkxPV0NUUkxfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9NSVNDX0NGR19JTkdSRVNTQldfSUZHX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9NSVNDX0NGR19JTkdSRVNTQldfSUZHX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfTUlTQ19DRkdfUlhfU1BDX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X01JU0NfQ0ZHX1JYX1NQQ19NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X01JU0NfQ0ZHX0NSQ19TS0lQX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X01JU0NfQ0ZHX0NSQ19TS0lQX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfTUlTQ19DRkdfUEtUR0VOX1RYX0ZJUlNUX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X01JU0NfQ0ZHX1BLVEdFTl9UWF9GSVJTVF9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfTUlTQ19DRkdfTUFDX0xPT1BCQUNLX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X01JU0NfQ0ZHX01BQ19MT09QQkFDS19NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfTUlTQ19DRkdfVkxBTl9FR1JFU1NfTU9ERV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9NSVNDX0NGR19WTEFOX0VHUkVTU19NT0RFX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9NSVNDX0NGR19DT05HRVNUSU9OX1NVU1RBSU5fVElNRV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9NSVNDX0NGR19DT05HRVNUSU9OX1NVU1RBSU5fVElNRV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JTkdSRVNTQldfUE9SVDRfUkFURV9DVFJMMCAgICAweDAwOGYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSU5HUkVTU0JXX1BPUlQ0X1JBVEVfQ1RSTDEgICAgMHgwMDkwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOR1JFU1NCV19QT1JUNF9SQVRFX0NUUkwxX0RVTU1ZX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOR1JFU1NCV19QT1JUNF9SQVRFX0NUUkwxX0RVTU1ZX01BU0sgICAgMHhGRkY4CisjZGVmaW5lICAgIFJUTDgzNjdDX0lOR1JFU1NCV19QT1JUNF9SQVRFX0NUUkwxX0lOR1JFU1NCV19SQVRFMTZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5HUkVTU0JXX1BPUlQ0X1JBVEVfQ1RSTDFfSU5HUkVTU0JXX1JBVEUxNl9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUNF9GT1JDRV9SQVRFMCAgICAweDAwOTEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDRfRk9SQ0VfUkFURTEgICAgMHgwMDkyCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQ0X0NVUkVOVF9SQVRFMCAgICAweDAwOTMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDRfQ1VSRU5UX1JBVEUxICAgIDB4MDA5NAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUNF9QQUdFX0NPVU5URVIgICAgMHgwMDk1CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X1BBR0VfQ09VTlRFUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9QQUdFX0NPVU5URVJfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BBR0VNRVRFUl9QT1JUNF9DVFJMMCAgICAweDAwOTYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEFHRU1FVEVSX1BPUlQ0X0NUUkwxICAgIDB4MDA5NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUNF9FRUVDRkcgICAgMHgwMDk4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X0VFRUNGR19FRUVQX0VOQUJMRV9UWF9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfRUVFQ0ZHX0VFRVBfRU5BQkxFX1RYX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X0VFRUNGR19FRUVQX0VOQUJMRV9SWF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfRUVFQ0ZHX0VFRVBfRU5BQkxFX1JYX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X0VFRUNGR19FRUVfRk9SQ0VfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X0VFRUNGR19FRUVfRk9SQ0VfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfRUVFQ0ZHX0VFRV8xMDBNX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9FRUVDRkdfRUVFXzEwME1fTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9FRUVDRkdfRUVFX0dJR0FfNTAwTV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfRUVFQ0ZHX0VFRV9HSUdBXzUwME1fTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9FRUVDRkdfRUVFX1RYX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X0VFRUNGR19FRUVfVFhfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9FRUVDRkdfRUVFX1JYX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X0VFRUNGR19FRUVfUlhfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9FRUVDRkdfRUVFX0RTUF9SWF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9FRUVDRkdfRUVFX0RTUF9SWF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfRUVFQ0ZHX0VFRV9MUElfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfRUVFQ0ZHX0VFRV9MUElfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X0VFRUNGR19FRUVfVFhfTFBJX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X0VFRUNGR19FRUVfVFhfTFBJX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9FRUVDRkdfRUVFX1JYX0xQSV9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9FRUVDRkdfRUVFX1JYX0xQSV9NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9FRUVDRkdfRUVFX1BBVVNFX0lORElDQVRPUl9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9FRUVDRkdfRUVFX1BBVVNFX0lORElDQVRPUl9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9FRUVDRkdfRUVFX1dBS0VfUkVRX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X0VFRUNGR19FRUVfV0FLRV9SRVFfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfRUVFQ0ZHX0VFRV9TTEVFUF9SRVFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfRUVFQ0ZHX0VFRV9TTEVFUF9SRVFfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDRfRUVFVFhNVFIgICAgMHgwMDk5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQ0X0VFRVJYTVRSICAgIDB4MDA5YQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUNF9FRUVQVFhNVFIgICAgMHgwMDliCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQ0X0VFRVBSWE1UUiAgICAweDAwOWMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUFRQX1BPUlQ0X0NGRzEgICAgMHgwMDllCisjZGVmaW5lICAgIFJUTDgzNjdDX1BUUF9QT1JUNF9DRkcxX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1BUUF9QT1JUNF9DRkcxX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QNF9NU0lDMSAgICAweDAwOWYKKyNkZWZpbmUgICAgUlRMODM2N0NfUDRfTVNJQzFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDRfTVNJQzFfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDVfQ0dTVF9IQUxGX0NGRyAgICAweDAwYTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfQ0dTVF9IQUxGX0NGR19DT05HRVNUSU9OX1RJTUVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfQ0dTVF9IQUxGX0NGR19DT05HRVNUSU9OX1RJTUVfTUFTSyAgICAweEYwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X0NHU1RfSEFMRl9DRkdfQ09OR0VTVElPTl9TVVNUQUlOX1RJTUVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfQ0dTVF9IQUxGX0NGR19DT05HRVNUSU9OX1NVU1RBSU5fVElNRV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDVfQ1RSTCAgICAweDAwYTEKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ1X0NUUkxfU1RBVFVTX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDVfQ1RSTF9TVEFUVVNfTUFTSyAgICAweDgwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ1X0NUUkxfUEtUR0VOX1NUU19PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ1X0NUUkxfUEtUR0VOX1NUU19NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDVfQ1RSTF9DUkNfTk9fRVJST1JfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ1X0NUUkxfQ1JDX05PX0VSUk9SX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDVfQ1RSTF9DTURfU1RBUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ1X0NUUkxfQ01EX1NUQVJUX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1RYX0VSUl9DTlRfUE9SVDUgICAgMHgwMGEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1RYX0VSUl9DTlRfUE9SVDVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVFhfRVJSX0NOVF9QT1JUNV9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDVfREEwICAgIDB4MDBhMworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDVfREExICAgIDB4MDBhNAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDVfREEyICAgIDB4MDBhNQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDVfU0EwICAgIDB4MDBhNgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDVfU0ExICAgIDB4MDBhNworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDVfU0EyICAgIDB4MDBhOAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDVfQ09VTlRFUjAgICAgMHgwMGE5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BLVEdFTl9QT1JUNV9DT1VOVEVSMSAgICAweDAwYWEKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ1X0NPVU5URVIxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BLVEdFTl9QT1JUNV9DT1VOVEVSMV9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEtUR0VOX1BPUlQ1X1RYX0xFTkdUSCAgICAweDAwYWIKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ1X1RYX0xFTkdUSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDVfVFhfTEVOR1RIX01BU0sgICAgMHgzRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BLVEdFTl9QT1JUNV9USU1FUiAgICAweDAwYWQKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ1X1RJTUVSX1RJTUVSX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BLVEdFTl9QT1JUNV9USU1FUl9USU1FUl9NQVNLICAgIDB4RjAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ1X1RJTUVSX1JYX0RNQV9FUlJfRkxBR19PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDVfVElNRVJfUlhfRE1BX0VSUl9GTEFHX01BU0sgICAgMHg4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQ1X01JU0NfQ0ZHICAgIDB4MDBhZQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9NSVNDX0NGR19TTUFMTF9UQUdfSVBHX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9NSVNDX0NGR19TTUFMTF9UQUdfSVBHX01BU0sgICAgMHg4MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X01JU0NfQ0ZHX1RYX0lURlNQX01PREVfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X01JU0NfQ0ZHX1RYX0lURlNQX01PREVfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfTUlTQ19DRkdfRkxPV0NUUkxfSU5ERVBfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X01JU0NfQ0ZHX0ZMT1dDVFJMX0lOREVQX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X01JU0NfQ0ZHX0RPVDFRX1JFTUFSS19FTkFCTEVfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X01JU0NfQ0ZHX0RPVDFRX1JFTUFSS19FTkFCTEVfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfTUlTQ19DRkdfSU5HUkVTU0JXX0ZMT1dDVFJMX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9NSVNDX0NGR19JTkdSRVNTQldfRkxPV0NUUkxfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9NSVNDX0NGR19JTkdSRVNTQldfSUZHX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9NSVNDX0NGR19JTkdSRVNTQldfSUZHX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfTUlTQ19DRkdfUlhfU1BDX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X01JU0NfQ0ZHX1JYX1NQQ19NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X01JU0NfQ0ZHX0NSQ19TS0lQX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X01JU0NfQ0ZHX0NSQ19TS0lQX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfTUlTQ19DRkdfUEtUR0VOX1RYX0ZJUlNUX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X01JU0NfQ0ZHX1BLVEdFTl9UWF9GSVJTVF9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfTUlTQ19DRkdfTUFDX0xPT1BCQUNLX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X01JU0NfQ0ZHX01BQ19MT09QQkFDS19NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfTUlTQ19DRkdfVkxBTl9FR1JFU1NfTU9ERV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9NSVNDX0NGR19WTEFOX0VHUkVTU19NT0RFX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9NSVNDX0NGR19DT05HRVNUSU9OX1NVU1RBSU5fVElNRV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9NSVNDX0NGR19DT05HRVNUSU9OX1NVU1RBSU5fVElNRV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JTkdSRVNTQldfUE9SVDVfUkFURV9DVFJMMCAgICAweDAwYWYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSU5HUkVTU0JXX1BPUlQ1X1JBVEVfQ1RSTDEgICAgMHgwMGIwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOR1JFU1NCV19QT1JUNV9SQVRFX0NUUkwxX0RVTU1ZX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOR1JFU1NCV19QT1JUNV9SQVRFX0NUUkwxX0RVTU1ZX01BU0sgICAgMHhGRkY4CisjZGVmaW5lICAgIFJUTDgzNjdDX0lOR1JFU1NCV19QT1JUNV9SQVRFX0NUUkwxX0lOR1JFU1NCV19SQVRFMTZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5HUkVTU0JXX1BPUlQ1X1JBVEVfQ1RSTDFfSU5HUkVTU0JXX1JBVEUxNl9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUNV9GT1JDRV9SQVRFMCAgICAweDAwYjEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDVfRk9SQ0VfUkFURTEgICAgMHgwMGIyCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQ1X0NVUkVOVF9SQVRFMCAgICAweDAwYjMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDVfQ1VSRU5UX1JBVEUxICAgIDB4MDBiNAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUNV9QQUdFX0NPVU5URVIgICAgMHgwMGI1CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X1BBR0VfQ09VTlRFUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9QQUdFX0NPVU5URVJfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BBR0VNRVRFUl9QT1JUNV9DVFJMMCAgICAweDAwYjYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEFHRU1FVEVSX1BPUlQ1X0NUUkwxICAgIDB4MDBiNworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUNV9FRUVDRkcgICAgMHgwMGI4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X0VFRUNGR19FRUVQX0VOQUJMRV9UWF9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfRUVFQ0ZHX0VFRVBfRU5BQkxFX1RYX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X0VFRUNGR19FRUVQX0VOQUJMRV9SWF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfRUVFQ0ZHX0VFRVBfRU5BQkxFX1JYX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X0VFRUNGR19FRUVfRk9SQ0VfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X0VFRUNGR19FRUVfRk9SQ0VfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfRUVFQ0ZHX0VFRV8xMDBNX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9FRUVDRkdfRUVFXzEwME1fTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9FRUVDRkdfRUVFX0dJR0FfNTAwTV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfRUVFQ0ZHX0VFRV9HSUdBXzUwME1fTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9FRUVDRkdfRUVFX1RYX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X0VFRUNGR19FRUVfVFhfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9FRUVDRkdfRUVFX1JYX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X0VFRUNGR19FRUVfUlhfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9FRUVDRkdfRUVFX0RTUF9SWF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9FRUVDRkdfRUVFX0RTUF9SWF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfRUVFQ0ZHX0VFRV9MUElfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfRUVFQ0ZHX0VFRV9MUElfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X0VFRUNGR19FRUVfVFhfTFBJX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X0VFRUNGR19FRUVfVFhfTFBJX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9FRUVDRkdfRUVFX1JYX0xQSV9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9FRUVDRkdfRUVFX1JYX0xQSV9NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9FRUVDRkdfRUVFX1BBVVNFX0lORElDQVRPUl9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9FRUVDRkdfRUVFX1BBVVNFX0lORElDQVRPUl9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9FRUVDRkdfRUVFX1dBS0VfUkVRX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X0VFRUNGR19FRUVfV0FLRV9SRVFfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfRUVFQ0ZHX0VFRV9TTEVFUF9SRVFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfRUVFQ0ZHX0VFRV9TTEVFUF9SRVFfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDVfRUVFVFhNVFIgICAgMHgwMGI5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQ1X0VFRVJYTVRSICAgIDB4MDBiYQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUNV9FRUVQVFhNVFIgICAgMHgwMGJiCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQ1X0VFRVBSWE1UUiAgICAweDAwYmMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUFRQX1BPUlQ1X0NGRzEgICAgMHgwMGJlCisjZGVmaW5lICAgIFJUTDgzNjdDX1BUUF9QT1JUNV9DRkcxX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1BUUF9QT1JUNV9DRkcxX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QNV9NU0lDMSAgICAweDAwYmYKKyNkZWZpbmUgICAgUlRMODM2N0NfUDVfTVNJQzFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDVfTVNJQzFfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDZfQ0dTVF9IQUxGX0NGRyAgICAweDAwYzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfQ0dTVF9IQUxGX0NGR19DT05HRVNUSU9OX1RJTUVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfQ0dTVF9IQUxGX0NGR19DT05HRVNUSU9OX1RJTUVfTUFTSyAgICAweEYwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X0NHU1RfSEFMRl9DRkdfQ09OR0VTVElPTl9TVVNUQUlOX1RJTUVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfQ0dTVF9IQUxGX0NGR19DT05HRVNUSU9OX1NVU1RBSU5fVElNRV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDZfQ1RSTCAgICAweDAwYzEKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ2X0NUUkxfU1RBVFVTX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDZfQ1RSTF9TVEFUVVNfTUFTSyAgICAweDgwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ2X0NUUkxfUEtUR0VOX1NUU19PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ2X0NUUkxfUEtUR0VOX1NUU19NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDZfQ1RSTF9DUkNfTk9fRVJST1JfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ2X0NUUkxfQ1JDX05PX0VSUk9SX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDZfQ1RSTF9DTURfU1RBUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ2X0NUUkxfQ01EX1NUQVJUX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1RYX0VSUl9DTlRfUE9SVDYgICAgMHgwMGMyCisjZGVmaW5lICAgIFJUTDgzNjdDX1RYX0VSUl9DTlRfUE9SVDZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVFhfRVJSX0NOVF9QT1JUNl9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDZfREEwICAgIDB4MDBjMworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDZfREExICAgIDB4MDBjNAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDZfREEyICAgIDB4MDBjNQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDZfU0EwICAgIDB4MDBjNgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDZfU0ExICAgIDB4MDBjNworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDZfU0EyICAgIDB4MDBjOAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDZfQ09VTlRFUjAgICAgMHgwMGM5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BLVEdFTl9QT1JUNl9DT1VOVEVSMSAgICAweDAwY2EKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ2X0NPVU5URVIxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BLVEdFTl9QT1JUNl9DT1VOVEVSMV9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEtUR0VOX1BPUlQ2X1RYX0xFTkdUSCAgICAweDAwY2IKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ2X1RYX0xFTkdUSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDZfVFhfTEVOR1RIX01BU0sgICAgMHgzRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BLVEdFTl9QT1JUNl9USU1FUiAgICAweDAwY2QKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ2X1RJTUVSX1RJTUVSX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BLVEdFTl9QT1JUNl9USU1FUl9USU1FUl9NQVNLICAgIDB4RjAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ2X1RJTUVSX1JYX0RNQV9FUlJfRkxBR19PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDZfVElNRVJfUlhfRE1BX0VSUl9GTEFHX01BU0sgICAgMHg4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQ2X01JU0NfQ0ZHICAgIDB4MDBjZQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9NSVNDX0NGR19TTUFMTF9UQUdfSVBHX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9NSVNDX0NGR19TTUFMTF9UQUdfSVBHX01BU0sgICAgMHg4MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X01JU0NfQ0ZHX1RYX0lURlNQX01PREVfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X01JU0NfQ0ZHX1RYX0lURlNQX01PREVfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfTUlTQ19DRkdfRkxPV0NUUkxfSU5ERVBfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X01JU0NfQ0ZHX0ZMT1dDVFJMX0lOREVQX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X01JU0NfQ0ZHX0RPVDFRX1JFTUFSS19FTkFCTEVfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X01JU0NfQ0ZHX0RPVDFRX1JFTUFSS19FTkFCTEVfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfTUlTQ19DRkdfSU5HUkVTU0JXX0ZMT1dDVFJMX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9NSVNDX0NGR19JTkdSRVNTQldfRkxPV0NUUkxfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9NSVNDX0NGR19JTkdSRVNTQldfSUZHX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9NSVNDX0NGR19JTkdSRVNTQldfSUZHX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfTUlTQ19DRkdfUlhfU1BDX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X01JU0NfQ0ZHX1JYX1NQQ19NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X01JU0NfQ0ZHX0NSQ19TS0lQX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X01JU0NfQ0ZHX0NSQ19TS0lQX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfTUlTQ19DRkdfUEtUR0VOX1RYX0ZJUlNUX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X01JU0NfQ0ZHX1BLVEdFTl9UWF9GSVJTVF9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfTUlTQ19DRkdfTUFDX0xPT1BCQUNLX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X01JU0NfQ0ZHX01BQ19MT09QQkFDS19NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfTUlTQ19DRkdfVkxBTl9FR1JFU1NfTU9ERV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9NSVNDX0NGR19WTEFOX0VHUkVTU19NT0RFX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9NSVNDX0NGR19DT05HRVNUSU9OX1NVU1RBSU5fVElNRV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9NSVNDX0NGR19DT05HRVNUSU9OX1NVU1RBSU5fVElNRV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JTkdSRVNTQldfUE9SVDZfUkFURV9DVFJMMCAgICAweDAwY2YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSU5HUkVTU0JXX1BPUlQ2X1JBVEVfQ1RSTDEgICAgMHgwMGQwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOR1JFU1NCV19QT1JUNl9SQVRFX0NUUkwxX0RVTU1ZX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOR1JFU1NCV19QT1JUNl9SQVRFX0NUUkwxX0RVTU1ZX01BU0sgICAgMHhGRkY4CisjZGVmaW5lICAgIFJUTDgzNjdDX0lOR1JFU1NCV19QT1JUNl9SQVRFX0NUUkwxX0lOR1JFU1NCV19SQVRFMTZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5HUkVTU0JXX1BPUlQ2X1JBVEVfQ1RSTDFfSU5HUkVTU0JXX1JBVEUxNl9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUNl9GT1JDRV9SQVRFMCAgICAweDAwZDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDZfRk9SQ0VfUkFURTEgICAgMHgwMGQyCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQ2X0NVUkVOVF9SQVRFMCAgICAweDAwZDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDZfQ1VSRU5UX1JBVEUxICAgIDB4MDBkNAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUNl9QQUdFX0NPVU5URVIgICAgMHgwMGQ1CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X1BBR0VfQ09VTlRFUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9QQUdFX0NPVU5URVJfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BBR0VNRVRFUl9QT1JUNl9DVFJMMCAgICAweDAwZDYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEFHRU1FVEVSX1BPUlQ2X0NUUkwxICAgIDB4MDBkNworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUNl9FRUVDRkcgICAgMHgwMGQ4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X0VFRUNGR19FRUVQX0VOQUJMRV9UWF9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfRUVFQ0ZHX0VFRVBfRU5BQkxFX1RYX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X0VFRUNGR19FRUVQX0VOQUJMRV9SWF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfRUVFQ0ZHX0VFRVBfRU5BQkxFX1JYX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X0VFRUNGR19FRUVfRk9SQ0VfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X0VFRUNGR19FRUVfRk9SQ0VfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfRUVFQ0ZHX0VFRV8xMDBNX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9FRUVDRkdfRUVFXzEwME1fTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9FRUVDRkdfRUVFX0dJR0FfNTAwTV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfRUVFQ0ZHX0VFRV9HSUdBXzUwME1fTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9FRUVDRkdfRUVFX1RYX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X0VFRUNGR19FRUVfVFhfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9FRUVDRkdfRUVFX1JYX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X0VFRUNGR19FRUVfUlhfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9FRUVDRkdfRUVFX0RTUF9SWF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9FRUVDRkdfRUVFX0RTUF9SWF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfRUVFQ0ZHX0VFRV9MUElfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfRUVFQ0ZHX0VFRV9MUElfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X0VFRUNGR19FRUVfVFhfTFBJX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X0VFRUNGR19FRUVfVFhfTFBJX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9FRUVDRkdfRUVFX1JYX0xQSV9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9FRUVDRkdfRUVFX1JYX0xQSV9NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9FRUVDRkdfRUVFX1BBVVNFX0lORElDQVRPUl9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9FRUVDRkdfRUVFX1BBVVNFX0lORElDQVRPUl9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9FRUVDRkdfRUVFX1dBS0VfUkVRX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X0VFRUNGR19FRUVfV0FLRV9SRVFfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfRUVFQ0ZHX0VFRV9TTEVFUF9SRVFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfRUVFQ0ZHX0VFRV9TTEVFUF9SRVFfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDZfRUVFVFhNVFIgICAgMHgwMGQ5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQ2X0VFRVJYTVRSICAgIDB4MDBkYQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUNl9FRUVQVFhNVFIgICAgMHgwMGRiCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQ2X0VFRVBSWE1UUiAgICAweDAwZGMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUFRQX1BPUlQ2X0NGRzEgICAgMHgwMGRlCisjZGVmaW5lICAgIFJUTDgzNjdDX1BUUF9QT1JUNl9DRkcxX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1BUUF9QT1JUNl9DRkcxX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QNl9NU0lDMSAgICAweDAwZGYKKyNkZWZpbmUgICAgUlRMODM2N0NfUDZfTVNJQzFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDZfTVNJQzFfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDdfQ0dTVF9IQUxGX0NGRyAgICAweDAwZTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfQ0dTVF9IQUxGX0NGR19DT05HRVNUSU9OX1RJTUVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfQ0dTVF9IQUxGX0NGR19DT05HRVNUSU9OX1RJTUVfTUFTSyAgICAweEYwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X0NHU1RfSEFMRl9DRkdfQ09OR0VTVElPTl9TVVNUQUlOX1RJTUVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfQ0dTVF9IQUxGX0NGR19DT05HRVNUSU9OX1NVU1RBSU5fVElNRV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDdfQ1RSTCAgICAweDAwZTEKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ3X0NUUkxfU1RBVFVTX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDdfQ1RSTF9TVEFUVVNfTUFTSyAgICAweDgwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ3X0NUUkxfUEtUR0VOX1NUU19PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ3X0NUUkxfUEtUR0VOX1NUU19NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDdfQ1RSTF9DUkNfTk9fRVJST1JfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ3X0NUUkxfQ1JDX05PX0VSUk9SX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDdfQ1RSTF9DTURfU1RBUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ3X0NUUkxfQ01EX1NUQVJUX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1RYX0VSUl9DTlRfUE9SVDcgICAgMHgwMGUyCisjZGVmaW5lICAgIFJUTDgzNjdDX1RYX0VSUl9DTlRfUE9SVDdfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVFhfRVJSX0NOVF9QT1JUN19NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDdfREEwICAgIDB4MDBlMworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDdfREExICAgIDB4MDBlNAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDdfREEyICAgIDB4MDBlNQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDdfU0EwICAgIDB4MDBlNgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDdfU0ExICAgIDB4MDBlNworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDdfU0EyICAgIDB4MDBlOAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDdfQ09VTlRFUjAgICAgMHgwMGU5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BLVEdFTl9QT1JUN19DT1VOVEVSMSAgICAweDAwZWEKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ3X0NPVU5URVIxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BLVEdFTl9QT1JUN19DT1VOVEVSMV9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEtUR0VOX1BPUlQ3X1RYX0xFTkdUSCAgICAweDAwZWIKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ3X1RYX0xFTkdUSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDdfVFhfTEVOR1RIX01BU0sgICAgMHgzRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BLVEdFTl9QT1JUN19USU1FUiAgICAweDAwZWQKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ3X1RJTUVSX1RJTUVSX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BLVEdFTl9QT1JUN19USU1FUl9USU1FUl9NQVNLICAgIDB4RjAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ3X1RJTUVSX1JYX0RNQV9FUlJfRkxBR19PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDdfVElNRVJfUlhfRE1BX0VSUl9GTEFHX01BU0sgICAgMHg4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQ3X01JU0NfQ0ZHICAgIDB4MDBlZQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19NSVNDX0NGR19TTUFMTF9UQUdfSVBHX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19NSVNDX0NGR19TTUFMTF9UQUdfSVBHX01BU0sgICAgMHg4MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X01JU0NfQ0ZHX1RYX0lURlNQX01PREVfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X01JU0NfQ0ZHX1RYX0lURlNQX01PREVfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfTUlTQ19DRkdfRkxPV0NUUkxfSU5ERVBfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X01JU0NfQ0ZHX0ZMT1dDVFJMX0lOREVQX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X01JU0NfQ0ZHX0RPVDFRX1JFTUFSS19FTkFCTEVfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X01JU0NfQ0ZHX0RPVDFRX1JFTUFSS19FTkFCTEVfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfTUlTQ19DRkdfSU5HUkVTU0JXX0ZMT1dDVFJMX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19NSVNDX0NGR19JTkdSRVNTQldfRkxPV0NUUkxfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19NSVNDX0NGR19JTkdSRVNTQldfSUZHX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19NSVNDX0NGR19JTkdSRVNTQldfSUZHX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfTUlTQ19DRkdfUlhfU1BDX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X01JU0NfQ0ZHX1JYX1NQQ19NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X01JU0NfQ0ZHX0NSQ19TS0lQX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X01JU0NfQ0ZHX0NSQ19TS0lQX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfTUlTQ19DRkdfUEtUR0VOX1RYX0ZJUlNUX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X01JU0NfQ0ZHX1BLVEdFTl9UWF9GSVJTVF9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfTUlTQ19DRkdfTUFDX0xPT1BCQUNLX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X01JU0NfQ0ZHX01BQ19MT09QQkFDS19NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfTUlTQ19DRkdfVkxBTl9FR1JFU1NfTU9ERV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19NSVNDX0NGR19WTEFOX0VHUkVTU19NT0RFX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19NSVNDX0NGR19DT05HRVNUSU9OX1NVU1RBSU5fVElNRV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19NSVNDX0NGR19DT05HRVNUSU9OX1NVU1RBSU5fVElNRV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JTkdSRVNTQldfUE9SVDdfUkFURV9DVFJMMCAgICAweDAwZWYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSU5HUkVTU0JXX1BPUlQ3X1JBVEVfQ1RSTDEgICAgMHgwMGYwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOR1JFU1NCV19QT1JUN19SQVRFX0NUUkwxX0RVTU1ZX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOR1JFU1NCV19QT1JUN19SQVRFX0NUUkwxX0RVTU1ZX01BU0sgICAgMHhGRkY4CisjZGVmaW5lICAgIFJUTDgzNjdDX0lOR1JFU1NCV19QT1JUN19SQVRFX0NUUkwxX0lOR1JFU1NCV19SQVRFMTZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5HUkVTU0JXX1BPUlQ3X1JBVEVfQ1RSTDFfSU5HUkVTU0JXX1JBVEUxNl9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUN19GT1JDRV9SQVRFMCAgICAweDAwZjEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDdfRk9SQ0VfUkFURTEgICAgMHgwMGYyCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQ3X0NVUkVOVF9SQVRFMCAgICAweDAwZjMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDdfQ1VSRU5UX1JBVEUxICAgIDB4MDBmNAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUN19QQUdFX0NPVU5URVIgICAgMHgwMGY1CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X1BBR0VfQ09VTlRFUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19QQUdFX0NPVU5URVJfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BBR0VNRVRFUl9QT1JUN19DVFJMMCAgICAweDAwZjYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEFHRU1FVEVSX1BPUlQ3X0NUUkwxICAgIDB4MDBmNworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUN19FRUVDRkcgICAgMHgwMGY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X0VFRUNGR19FRUVQX0VOQUJMRV9UWF9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfRUVFQ0ZHX0VFRVBfRU5BQkxFX1RYX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X0VFRUNGR19FRUVQX0VOQUJMRV9SWF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfRUVFQ0ZHX0VFRVBfRU5BQkxFX1JYX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X0VFRUNGR19FRUVfRk9SQ0VfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X0VFRUNGR19FRUVfRk9SQ0VfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfRUVFQ0ZHX0VFRV8xMDBNX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19FRUVDRkdfRUVFXzEwME1fTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19FRUVDRkdfRUVFX0dJR0FfNTAwTV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfRUVFQ0ZHX0VFRV9HSUdBXzUwME1fTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19FRUVDRkdfRUVFX1RYX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X0VFRUNGR19FRUVfVFhfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19FRUVDRkdfRUVFX1JYX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X0VFRUNGR19FRUVfUlhfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19FRUVDRkdfRUVFX0RTUF9SWF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19FRUVDRkdfRUVFX0RTUF9SWF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfRUVFQ0ZHX0VFRV9MUElfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfRUVFQ0ZHX0VFRV9MUElfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X0VFRUNGR19FRUVfVFhfTFBJX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X0VFRUNGR19FRUVfVFhfTFBJX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19FRUVDRkdfRUVFX1JYX0xQSV9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19FRUVDRkdfRUVFX1JYX0xQSV9NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19FRUVDRkdfRUVFX1BBVVNFX0lORElDQVRPUl9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19FRUVDRkdfRUVFX1BBVVNFX0lORElDQVRPUl9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19FRUVDRkdfRUVFX1dBS0VfUkVRX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X0VFRUNGR19FRUVfV0FLRV9SRVFfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfRUVFQ0ZHX0VFRV9TTEVFUF9SRVFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfRUVFQ0ZHX0VFRV9TTEVFUF9SRVFfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDdfRUVFVFhNVFIgICAgMHgwMGY5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQ3X0VFRVJYTVRSICAgIDB4MDBmYQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUN19FRUVQVFhNVFIgICAgMHgwMGZiCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQ3X0VFRVBSWE1UUiAgICAweDAwZmMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUFRQX1BPUlQ3X0NGRzEgICAgMHgwMGZlCisjZGVmaW5lICAgIFJUTDgzNjdDX1BUUF9QT1JUN19DRkcxX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1BUUF9QT1JUN19DRkcxX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QN19NU0lDMSAgICAweDAwZmYKKyNkZWZpbmUgICAgUlRMODM2N0NfUDdfTVNJQzFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDdfTVNJQzFfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDhfQ0dTVF9IQUxGX0NGRyAgICAweDAxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfQ0dTVF9IQUxGX0NGR19DT05HRVNUSU9OX1RJTUVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfQ0dTVF9IQUxGX0NGR19DT05HRVNUSU9OX1RJTUVfTUFTSyAgICAweEYwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X0NHU1RfSEFMRl9DRkdfQ09OR0VTVElPTl9TVVNUQUlOX1RJTUVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfQ0dTVF9IQUxGX0NGR19DT05HRVNUSU9OX1NVU1RBSU5fVElNRV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDhfQ1RSTCAgICAweDAxMDEKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ4X0NUUkxfU1RBVFVTX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDhfQ1RSTF9TVEFUVVNfTUFTSyAgICAweDgwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ4X0NUUkxfUEtUR0VOX1NUU19PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ4X0NUUkxfUEtUR0VOX1NUU19NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDhfQ1RSTF9DUkNfTk9fRVJST1JfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ4X0NUUkxfQ1JDX05PX0VSUk9SX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDhfQ1RSTF9DTURfU1RBUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ4X0NUUkxfQ01EX1NUQVJUX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1RYX0VSUl9DTlRfUE9SVDggICAgMHgwMTAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1RYX0VSUl9DTlRfUE9SVDhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVFhfRVJSX0NOVF9QT1JUOF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDhfREEwICAgIDB4MDEwMworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDhfREExICAgIDB4MDEwNAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDhfREEyICAgIDB4MDEwNQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDhfU0EwICAgIDB4MDEwNgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDhfU0ExICAgIDB4MDEwNworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDhfU0EyICAgIDB4MDEwOAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDhfQ09VTlRFUjAgICAgMHgwMTA5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BLVEdFTl9QT1JUOF9DT1VOVEVSMSAgICAweDAxMGEKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ4X0NPVU5URVIxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BLVEdFTl9QT1JUOF9DT1VOVEVSMV9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEtUR0VOX1BPUlQ4X1RYX0xFTkdUSCAgICAweDAxMGIKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ4X1RYX0xFTkdUSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDhfVFhfTEVOR1RIX01BU0sgICAgMHgzRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BLVEdFTl9QT1JUOF9USU1FUiAgICAweDAxMGQKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ4X1RJTUVSX1RJTUVSX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BLVEdFTl9QT1JUOF9USU1FUl9USU1FUl9NQVNLICAgIDB4RjAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ4X1RJTUVSX1JYX0RNQV9FUlJfRkxBR19PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDhfVElNRVJfUlhfRE1BX0VSUl9GTEFHX01BU0sgICAgMHg4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQ4X01JU0NfQ0ZHICAgIDB4MDEwZQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9NSVNDX0NGR19TTUFMTF9UQUdfSVBHX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9NSVNDX0NGR19TTUFMTF9UQUdfSVBHX01BU0sgICAgMHg4MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X01JU0NfQ0ZHX1RYX0lURlNQX01PREVfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X01JU0NfQ0ZHX1RYX0lURlNQX01PREVfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfTUlTQ19DRkdfRkxPV0NUUkxfSU5ERVBfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X01JU0NfQ0ZHX0ZMT1dDVFJMX0lOREVQX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X01JU0NfQ0ZHX0RPVDFRX1JFTUFSS19FTkFCTEVfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X01JU0NfQ0ZHX0RPVDFRX1JFTUFSS19FTkFCTEVfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfTUlTQ19DRkdfSU5HUkVTU0JXX0ZMT1dDVFJMX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9NSVNDX0NGR19JTkdSRVNTQldfRkxPV0NUUkxfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9NSVNDX0NGR19JTkdSRVNTQldfSUZHX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9NSVNDX0NGR19JTkdSRVNTQldfSUZHX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfTUlTQ19DRkdfUlhfU1BDX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X01JU0NfQ0ZHX1JYX1NQQ19NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X01JU0NfQ0ZHX0NSQ19TS0lQX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X01JU0NfQ0ZHX0NSQ19TS0lQX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfTUlTQ19DRkdfUEtUR0VOX1RYX0ZJUlNUX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X01JU0NfQ0ZHX1BLVEdFTl9UWF9GSVJTVF9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfTUlTQ19DRkdfTUFDX0xPT1BCQUNLX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X01JU0NfQ0ZHX01BQ19MT09QQkFDS19NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfTUlTQ19DRkdfVkxBTl9FR1JFU1NfTU9ERV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9NSVNDX0NGR19WTEFOX0VHUkVTU19NT0RFX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9NSVNDX0NGR19DT05HRVNUSU9OX1NVU1RBSU5fVElNRV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9NSVNDX0NGR19DT05HRVNUSU9OX1NVU1RBSU5fVElNRV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JTkdSRVNTQldfUE9SVDhfUkFURV9DVFJMMCAgICAweDAxMGYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSU5HUkVTU0JXX1BPUlQ4X1JBVEVfQ1RSTDEgICAgMHgwMTEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOR1JFU1NCV19QT1JUOF9SQVRFX0NUUkwxX0RVTU1ZX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOR1JFU1NCV19QT1JUOF9SQVRFX0NUUkwxX0RVTU1ZX01BU0sgICAgMHhGRkY4CisjZGVmaW5lICAgIFJUTDgzNjdDX0lOR1JFU1NCV19QT1JUOF9SQVRFX0NUUkwxX0lOR1JFU1NCV19SQVRFMTZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5HUkVTU0JXX1BPUlQ4X1JBVEVfQ1RSTDFfSU5HUkVTU0JXX1JBVEUxNl9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUOF9GT1JDRV9SQVRFMCAgICAweDAxMTEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDhfRk9SQ0VfUkFURTEgICAgMHgwMTEyCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQ4X0NVUkVOVF9SQVRFMCAgICAweDAxMTMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDhfQ1VSRU5UX1JBVEUxICAgIDB4MDExNAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUOF9QQUdFX0NPVU5URVIgICAgMHgwMTE1CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X1BBR0VfQ09VTlRFUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9QQUdFX0NPVU5URVJfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BBR0VNRVRFUl9QT1JUOF9DVFJMMCAgICAweDAxMTYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEFHRU1FVEVSX1BPUlQ4X0NUUkwxICAgIDB4MDExNworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUOF9FRUVDRkcgICAgMHgwMTE4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X0VFRUNGR19FRUVQX0VOQUJMRV9UWF9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfRUVFQ0ZHX0VFRVBfRU5BQkxFX1RYX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X0VFRUNGR19FRUVQX0VOQUJMRV9SWF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfRUVFQ0ZHX0VFRVBfRU5BQkxFX1JYX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X0VFRUNGR19FRUVfRk9SQ0VfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X0VFRUNGR19FRUVfRk9SQ0VfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfRUVFQ0ZHX0VFRV8xMDBNX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9FRUVDRkdfRUVFXzEwME1fTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9FRUVDRkdfRUVFX0dJR0FfNTAwTV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfRUVFQ0ZHX0VFRV9HSUdBXzUwME1fTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9FRUVDRkdfRUVFX1RYX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X0VFRUNGR19FRUVfVFhfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9FRUVDRkdfRUVFX1JYX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X0VFRUNGR19FRUVfUlhfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9FRUVDRkdfRUVFX0RTUF9SWF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9FRUVDRkdfRUVFX0RTUF9SWF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfRUVFQ0ZHX0VFRV9MUElfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfRUVFQ0ZHX0VFRV9MUElfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X0VFRUNGR19FRUVfVFhfTFBJX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X0VFRUNGR19FRUVfVFhfTFBJX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9FRUVDRkdfRUVFX1JYX0xQSV9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9FRUVDRkdfRUVFX1JYX0xQSV9NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9FRUVDRkdfRUVFX1BBVVNFX0lORElDQVRPUl9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9FRUVDRkdfRUVFX1BBVVNFX0lORElDQVRPUl9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9FRUVDRkdfRUVFX1dBS0VfUkVRX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X0VFRUNGR19FRUVfV0FLRV9SRVFfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfRUVFQ0ZHX0VFRV9TTEVFUF9SRVFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfRUVFQ0ZHX0VFRV9TTEVFUF9SRVFfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDhfRUVFVFhNVFIgICAgMHgwMTE5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQ4X0VFRVJYTVRSICAgIDB4MDExYQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUOF9FRUVQVFhNVFIgICAgMHgwMTFiCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQ4X0VFRVBSWE1UUiAgICAweDAxMWMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUFRQX1BPUlQ4X0NGRzEgICAgMHgwMTFlCisjZGVmaW5lICAgIFJUTDgzNjdDX1BUUF9QT1JUOF9DRkcxX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1BUUF9QT1JUOF9DRkcxX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QOF9NU0lDMSAgICAweDAxMWYKKyNkZWZpbmUgICAgUlRMODM2N0NfUDhfTVNJQzFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDhfTVNJQzFfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDlfQ0dTVF9IQUxGX0NGRyAgICAweDAxMjAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfQ0dTVF9IQUxGX0NGR19DT05HRVNUSU9OX1RJTUVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfQ0dTVF9IQUxGX0NGR19DT05HRVNUSU9OX1RJTUVfTUFTSyAgICAweEYwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X0NHU1RfSEFMRl9DRkdfQ09OR0VTVElPTl9TVVNUQUlOX1RJTUVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfQ0dTVF9IQUxGX0NGR19DT05HRVNUSU9OX1NVU1RBSU5fVElNRV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDlfQ1RSTCAgICAweDAxMjEKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ5X0NUUkxfU1RBVFVTX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDlfQ1RSTF9TVEFUVVNfTUFTSyAgICAweDgwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ5X0NUUkxfUEtUR0VOX1NUU19PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ5X0NUUkxfUEtUR0VOX1NUU19NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDlfQ1RSTF9DUkNfTk9fRVJST1JfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ5X0NUUkxfQ1JDX05PX0VSUk9SX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDlfQ1RSTF9DTURfU1RBUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ5X0NUUkxfQ01EX1NUQVJUX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1RYX0VSUl9DTlRfUE9SVDkgICAgMHgwMTIyCisjZGVmaW5lICAgIFJUTDgzNjdDX1RYX0VSUl9DTlRfUE9SVDlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVFhfRVJSX0NOVF9QT1JUOV9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDlfREEwICAgIDB4MDEyMworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDlfREExICAgIDB4MDEyNAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDlfREEyICAgIDB4MDEyNQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDlfU0EwICAgIDB4MDEyNgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDlfU0ExICAgIDB4MDEyNworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDlfU0EyICAgIDB4MDEyOAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDlfQ09VTlRFUjAgICAgMHgwMTI5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BLVEdFTl9QT1JUOV9DT1VOVEVSMSAgICAweDAxMmEKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ5X0NPVU5URVIxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BLVEdFTl9QT1JUOV9DT1VOVEVSMV9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEtUR0VOX1BPUlQ5X1RYX0xFTkdUSCAgICAweDAxMmIKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ5X1RYX0xFTkdUSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDlfVFhfTEVOR1RIX01BU0sgICAgMHgzRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BLVEdFTl9QT1JUOV9USU1FUiAgICAweDAxMmQKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ5X1RJTUVSX1RJTUVSX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BLVEdFTl9QT1JUOV9USU1FUl9USU1FUl9NQVNLICAgIDB4RjAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQ5X1RJTUVSX1JYX0RNQV9FUlJfRkxBR19PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDlfVElNRVJfUlhfRE1BX0VSUl9GTEFHX01BU0sgICAgMHg4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQ5X01JU0NfQ0ZHICAgIDB4MDEyZQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9NSVNDX0NGR19TTUFMTF9UQUdfSVBHX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9NSVNDX0NGR19TTUFMTF9UQUdfSVBHX01BU0sgICAgMHg4MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X01JU0NfQ0ZHX1RYX0lURlNQX01PREVfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X01JU0NfQ0ZHX1RYX0lURlNQX01PREVfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfTUlTQ19DRkdfRkxPV0NUUkxfSU5ERVBfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X01JU0NfQ0ZHX0ZMT1dDVFJMX0lOREVQX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X01JU0NfQ0ZHX0RPVDFRX1JFTUFSS19FTkFCTEVfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X01JU0NfQ0ZHX0RPVDFRX1JFTUFSS19FTkFCTEVfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfTUlTQ19DRkdfSU5HUkVTU0JXX0ZMT1dDVFJMX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9NSVNDX0NGR19JTkdSRVNTQldfRkxPV0NUUkxfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9NSVNDX0NGR19JTkdSRVNTQldfSUZHX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9NSVNDX0NGR19JTkdSRVNTQldfSUZHX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfTUlTQ19DRkdfUlhfU1BDX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X01JU0NfQ0ZHX1JYX1NQQ19NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X01JU0NfQ0ZHX0NSQ19TS0lQX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X01JU0NfQ0ZHX0NSQ19TS0lQX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfTUlTQ19DRkdfUEtUR0VOX1RYX0ZJUlNUX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X01JU0NfQ0ZHX1BLVEdFTl9UWF9GSVJTVF9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfTUlTQ19DRkdfTUFDX0xPT1BCQUNLX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X01JU0NfQ0ZHX01BQ19MT09QQkFDS19NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfTUlTQ19DRkdfVkxBTl9FR1JFU1NfTU9ERV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9NSVNDX0NGR19WTEFOX0VHUkVTU19NT0RFX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9NSVNDX0NGR19DT05HRVNUSU9OX1NVU1RBSU5fVElNRV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9NSVNDX0NGR19DT05HRVNUSU9OX1NVU1RBSU5fVElNRV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JTkdSRVNTQldfUE9SVDlfUkFURV9DVFJMMCAgICAweDAxMmYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSU5HUkVTU0JXX1BPUlQ5X1JBVEVfQ1RSTDEgICAgMHgwMTMwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOR1JFU1NCV19QT1JUOV9SQVRFX0NUUkwxX0RVTU1ZX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOR1JFU1NCV19QT1JUOV9SQVRFX0NUUkwxX0RVTU1ZX01BU0sgICAgMHhGRkY4CisjZGVmaW5lICAgIFJUTDgzNjdDX0lOR1JFU1NCV19QT1JUOV9SQVRFX0NUUkwxX0lOR1JFU1NCV19SQVRFMTZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5HUkVTU0JXX1BPUlQ5X1JBVEVfQ1RSTDFfSU5HUkVTU0JXX1JBVEUxNl9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUOV9GT1JDRV9SQVRFMCAgICAweDAxMzEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDlfRk9SQ0VfUkFURTEgICAgMHgwMTMyCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQ5X0NVUkVOVF9SQVRFMCAgICAweDAxMzMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDlfQ1VSRU5UX1JBVEUxICAgIDB4MDEzNAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUOV9QQUdFX0NPVU5URVIgICAgMHgwMTM1CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X1BBR0VfQ09VTlRFUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9QQUdFX0NPVU5URVJfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BBR0VNRVRFUl9QT1JUOV9DVFJMMCAgICAweDAxMzYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEFHRU1FVEVSX1BPUlQ5X0NUUkwxICAgIDB4MDEzNworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUOV9FRUVDRkcgICAgMHgwMTM4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X0VFRUNGR19FRUVQX0VOQUJMRV9UWF9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfRUVFQ0ZHX0VFRVBfRU5BQkxFX1RYX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X0VFRUNGR19FRUVQX0VOQUJMRV9SWF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfRUVFQ0ZHX0VFRVBfRU5BQkxFX1JYX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X0VFRUNGR19FRUVfRk9SQ0VfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X0VFRUNGR19FRUVfRk9SQ0VfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfRUVFQ0ZHX0VFRV8xMDBNX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9FRUVDRkdfRUVFXzEwME1fTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9FRUVDRkdfRUVFX0dJR0FfNTAwTV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfRUVFQ0ZHX0VFRV9HSUdBXzUwME1fTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9FRUVDRkdfRUVFX1RYX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X0VFRUNGR19FRUVfVFhfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9FRUVDRkdfRUVFX1JYX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X0VFRUNGR19FRUVfUlhfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9FRUVDRkdfRUVFX0RTUF9SWF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9FRUVDRkdfRUVFX0RTUF9SWF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfRUVFQ0ZHX0VFRV9MUElfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfRUVFQ0ZHX0VFRV9MUElfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X0VFRUNGR19FRUVfVFhfTFBJX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X0VFRUNGR19FRUVfVFhfTFBJX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9FRUVDRkdfRUVFX1JYX0xQSV9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9FRUVDRkdfRUVFX1JYX0xQSV9NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9FRUVDRkdfRUVFX1BBVVNFX0lORElDQVRPUl9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9FRUVDRkdfRUVFX1BBVVNFX0lORElDQVRPUl9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9FRUVDRkdfRUVFX1dBS0VfUkVRX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X0VFRUNGR19FRUVfV0FLRV9SRVFfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfRUVFQ0ZHX0VFRV9TTEVFUF9SRVFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfRUVFQ0ZHX0VFRV9TTEVFUF9SRVFfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDlfRUVFVFhNVFIgICAgMHgwMTM5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQ5X0VFRVJYTVRSICAgIDB4MDEzYQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUOV9FRUVQVFhNVFIgICAgMHgwMTNiCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQ5X0VFRVBSWE1UUiAgICAweDAxM2MKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUFRQX1BPUlQ5X0NGRzEgICAgMHgwMTNlCisjZGVmaW5lICAgIFJUTDgzNjdDX1BUUF9QT1JUOV9DRkcxX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1BUUF9QT1JUOV9DRkcxX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QOV9NU0lDMSAgICAweDAxM2YKKyNkZWZpbmUgICAgUlRMODM2N0NfUDlfTVNJQzFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDlfTVNJQzFfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDEwX0NHU1RfSEFMRl9DRkcgICAgMHgwMTQwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9DR1NUX0hBTEZfQ0ZHX0NPTkdFU1RJT05fVElNRV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfQ0dTVF9IQUxGX0NGR19DT05HRVNUSU9OX1RJTUVfTUFTSyAgICAweEYwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9DR1NUX0hBTEZfQ0ZHX0NPTkdFU1RJT05fU1VTVEFJTl9USU1FX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9DR1NUX0hBTEZfQ0ZHX0NPTkdFU1RJT05fU1VTVEFJTl9USU1FX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BLVEdFTl9QT1JUMTBfQ1RSTCAgICAweDAxNDEKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQxMF9DVFJMX1NUQVRVU19PRkZTRVQgICAgMTUKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQxMF9DVFJMX1NUQVRVU19NQVNLICAgIDB4ODAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDEwX0NUUkxfUEtUR0VOX1NUU19PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQxMF9DVFJMX1BLVEdFTl9TVFNfTUFTSyAgICAweDIwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQxMF9DVFJMX0NSQ19OT19FUlJPUl9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDEwX0NUUkxfQ1JDX05PX0VSUk9SX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fUE9SVDEwX0NUUkxfQ01EX1NUQVJUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BLVEdFTl9QT1JUMTBfQ1RSTF9DTURfU1RBUlRfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVFhfRVJSX0NOVF9QT1JUMTAgICAgMHgwMTQyCisjZGVmaW5lICAgIFJUTDgzNjdDX1RYX0VSUl9DTlRfUE9SVDEwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1RYX0VSUl9DTlRfUE9SVDEwX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BLVEdFTl9QT1JUMTBfREEwICAgIDB4MDE0MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDEwX0RBMSAgICAweDAxNDQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEtUR0VOX1BPUlQxMF9EQTIgICAgMHgwMTQ1CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BLVEdFTl9QT1JUMTBfU0EwICAgIDB4MDE0NgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fUE9SVDEwX1NBMSAgICAweDAxNDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEtUR0VOX1BPUlQxMF9TQTIgICAgMHgwMTQ4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BLVEdFTl9QT1JUMTBfQ09VTlRFUjAgICAgMHgwMTQ5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BLVEdFTl9QT1JUMTBfQ09VTlRFUjEgICAgMHgwMTRhCisjZGVmaW5lICAgIFJUTDgzNjdDX1BLVEdFTl9QT1JUMTBfQ09VTlRFUjFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQxMF9DT1VOVEVSMV9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEtUR0VOX1BPUlQxMF9UWF9MRU5HVEggICAgMHgwMTRiCisjZGVmaW5lICAgIFJUTDgzNjdDX1BLVEdFTl9QT1JUMTBfVFhfTEVOR1RIX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BLVEdFTl9QT1JUMTBfVFhfTEVOR1RIX01BU0sgICAgMHgzRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BLVEdFTl9QT1JUMTBfVElNRVIgICAgMHgwMTRkCisjZGVmaW5lICAgIFJUTDgzNjdDX1BLVEdFTl9QT1JUMTBfVElNRVJfVElNRVJfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQxMF9USU1FUl9USU1FUl9NQVNLICAgIDB4RjAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQxMF9USU1FUl9SWF9ETUFfRVJSX0ZMQUdfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1BPUlQxMF9USU1FUl9SWF9ETUFfRVJSX0ZMQUdfTUFTSyAgICAweDgKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDEwX01JU0NfQ0ZHICAgIDB4MDE0ZQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfTUlTQ19DRkdfU01BTExfVEFHX0lQR19PRkZTRVQgICAgMTUKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX01JU0NfQ0ZHX1NNQUxMX1RBR19JUEdfTUFTSyAgICAweDgwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX01JU0NfQ0ZHX1RYX0lURlNQX01PREVfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9NSVNDX0NGR19UWF9JVEZTUF9NT0RFX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9NSVNDX0NGR19GTE9XQ1RSTF9JTkRFUF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX01JU0NfQ0ZHX0ZMT1dDVFJMX0lOREVQX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9NSVNDX0NGR19ET1QxUV9SRU1BUktfRU5BQkxFX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfTUlTQ19DRkdfRE9UMVFfUkVNQVJLX0VOQUJMRV9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfTUlTQ19DRkdfSU5HUkVTU0JXX0ZMT1dDVFJMX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfTUlTQ19DRkdfSU5HUkVTU0JXX0ZMT1dDVFJMX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX01JU0NfQ0ZHX0lOR1JFU1NCV19JRkdfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9NSVNDX0NGR19JTkdSRVNTQldfSUZHX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX01JU0NfQ0ZHX1JYX1NQQ19PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfTUlTQ19DRkdfUlhfU1BDX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX01JU0NfQ0ZHX0NSQ19TS0lQX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9NSVNDX0NGR19DUkNfU0tJUF9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9NSVNDX0NGR19QS1RHRU5fVFhfRklSU1RfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX01JU0NfQ0ZHX1BLVEdFTl9UWF9GSVJTVF9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX01JU0NfQ0ZHX01BQ19MT09QQkFDS19PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfTUlTQ19DRkdfTUFDX0xPT1BCQUNLX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfTUlTQ19DRkdfVkxBTl9FR1JFU1NfTU9ERV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfTUlTQ19DRkdfVkxBTl9FR1JFU1NfTU9ERV9NQVNLICAgIDB4MzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX01JU0NfQ0ZHX0NPTkdFU1RJT05fU1VTVEFJTl9USU1FX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9NSVNDX0NGR19DT05HRVNUSU9OX1NVU1RBSU5fVElNRV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JTkdSRVNTQldfUE9SVDEwX1JBVEVfQ1RSTDAgICAgMHgwMTRmCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lOR1JFU1NCV19QT1JUMTBfUkFURV9DVFJMMSAgICAweDAxNTAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5HUkVTU0JXX1BPUlQxMF9SQVRFX0NUUkwxX0RVTU1ZX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOR1JFU1NCV19QT1JUMTBfUkFURV9DVFJMMV9EVU1NWV9NQVNLICAgIDB4RkZGOAorI2RlZmluZSAgICBSVEw4MzY3Q19JTkdSRVNTQldfUE9SVDEwX1JBVEVfQ1RSTDFfSU5HUkVTU0JXX1JBVEUxNl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JTkdSRVNTQldfUE9SVDEwX1JBVEVfQ1RSTDFfSU5HUkVTU0JXX1JBVEUxNl9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUMTBfRk9SQ0VfUkFURTAgICAgMHgwMTUxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQxMF9GT1JDRV9SQVRFMSAgICAweDAxNTIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDEwX0NVUkVOVF9SQVRFMCAgICAweDAxNTMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDEwX0NVUkVOVF9SQVRFMSAgICAweDAxNTQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDEwX1BBR0VfQ09VTlRFUiAgICAweDAxNTUKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX1BBR0VfQ09VTlRFUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfUEFHRV9DT1VOVEVSX01BU0sgICAgMHg3RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QQUdFTUVURVJfUE9SVDEwX0NUUkwwICAgIDB4MDE1NgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QQUdFTUVURVJfUE9SVDEwX0NUUkwxICAgIDB4MDE1NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUMTBfRUVFQ0ZHICAgIDB4MDE1OAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfRUVFQ0ZHX0VFRVBfRU5BQkxFX1RYX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfRUVFQ0ZHX0VFRVBfRU5BQkxFX1RYX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9FRUVDRkdfRUVFUF9FTkFCTEVfUlhfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9FRUVDRkdfRUVFUF9FTkFCTEVfUlhfTUFTSyAgICAweDIwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX0VFRUNGR19FRUVfRk9SQ0VfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9FRUVDRkdfRUVFX0ZPUkNFX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9FRUVDRkdfRUVFXzEwME1fT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9FRUVDRkdfRUVFXzEwME1fTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfRUVFQ0ZHX0VFRV9HSUdBXzUwME1fT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9FRUVDRkdfRUVFX0dJR0FfNTAwTV9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9FRUVDRkdfRUVFX1RYX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9FRUVDRkdfRUVFX1RYX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX0VFRUNGR19FRUVfUlhfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX0VFRUNGR19FRUVfUlhfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfRUVFQ0ZHX0VFRV9EU1BfUlhfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX0VFRUNGR19FRUVfRFNQX1JYX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfRUVFQ0ZHX0VFRV9MUElfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX0VFRUNGR19FRUVfTFBJX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfRUVFQ0ZHX0VFRV9UWF9MUElfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX0VFRUNGR19FRUVfVFhfTFBJX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfRUVFQ0ZHX0VFRV9SWF9MUElfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX0VFRUNGR19FRUVfUlhfTFBJX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9FRUVDRkdfRUVFX1BBVVNFX0lORElDQVRPUl9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfRUVFQ0ZHX0VFRV9QQVVTRV9JTkRJQ0FUT1JfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX0VFRUNGR19FRUVfV0FLRV9SRVFfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX0VFRUNGR19FRUVfV0FLRV9SRVFfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX0VFRUNGR19FRUVfU0xFRVBfUkVRX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9FRUVDRkdfRUVFX1NMRUVQX1JFUV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUMTBfRUVFVFhNVFIgICAgMHgwMTU5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQxMF9FRUVSWE1UUiAgICAweDAxNWEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDEwX0VFRVBUWE1UUiAgICAweDAxNWIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDEwX0VFRVBSWE1UUiAgICAweDAxNWMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUFRQX1BPUlQxMF9DRkcxICAgIDB4MDE1ZQorI2RlZmluZSAgICBSVEw4MzY3Q19QVFBfUE9SVDEwX0NGRzFfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfUFRQX1BPUlQxMF9DRkcxX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QMTBfTVNJQzEgICAgMHgwMTVmCisjZGVmaW5lICAgIFJUTDgzNjdDX1AxMF9NU0lDMV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QMTBfTVNJQzFfTUFTSyAgICAweDEKKworLyogKDE2J2gwMjAwKW91dHFfcmVnICovCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1FVRVVFMF9EUk9QX09OICAgIDB4MDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRTBfRFJPUF9PTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRTBfRFJPUF9PTl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1FVRVVFMV9EUk9QX09OICAgIDB4MDIwMQorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRTFfRFJPUF9PTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRTFfRFJPUF9PTl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1FVRVVFMl9EUk9QX09OICAgIDB4MDIwMgorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRTJfRFJPUF9PTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRTJfRFJPUF9PTl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1FVRVVFM19EUk9QX09OICAgIDB4MDIwMworI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRTNfRFJPUF9PTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRTNfRFJPUF9PTl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1FVRVVFNF9EUk9QX09OICAgIDB4MDIwNAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRTRfRFJPUF9PTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRTRfRFJPUF9PTl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1FVRVVFNV9EUk9QX09OICAgIDB4MDIwNQorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRTVfRFJPUF9PTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRTVfRFJPUF9PTl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1FVRVVFNl9EUk9QX09OICAgIDB4MDIwNgorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRTZfRFJPUF9PTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRTZfRFJPUF9PTl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1FVRVVFN19EUk9QX09OICAgIDB4MDIwNworI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRTdfRFJPUF9PTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRTdfRFJPUF9PTl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1BPUlQwX0RST1BfT04gICAgMHgwMjA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlQwX0RST1BfT05fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUE9SVDBfRFJPUF9PTl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1BPUlQxX0RST1BfT04gICAgMHgwMjA5CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlQxX0RST1BfT05fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUE9SVDFfRFJPUF9PTl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1BPUlQyX0RST1BfT04gICAgMHgwMjBhCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlQyX0RST1BfT05fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUE9SVDJfRFJPUF9PTl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1BPUlQzX0RST1BfT04gICAgMHgwMjBiCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlQzX0RST1BfT05fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUE9SVDNfRFJPUF9PTl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1BPUlQ0X0RST1BfT04gICAgMHgwMjBjCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlQ0X0RST1BfT05fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUE9SVDRfRFJPUF9PTl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1BPUlQ1X0RST1BfT04gICAgMHgwMjBkCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlQ1X0RST1BfT05fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUE9SVDVfRFJPUF9PTl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1BPUlQ2X0RST1BfT04gICAgMHgwMjBlCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlQ2X0RST1BfT05fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUE9SVDZfRFJPUF9PTl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1BPUlQ3X0RST1BfT04gICAgMHgwMjBmCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlQ3X0RST1BfT05fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUE9SVDdfRFJPUF9PTl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1BPUlQ4X0RST1BfT04gICAgMHgwMjEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlQ4X0RST1BfT05fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUE9SVDhfRFJPUF9PTl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1BPUlQ5X0RST1BfT04gICAgMHgwMjExCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlQ5X0RST1BfT05fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUE9SVDlfRFJPUF9PTl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1BPUlQxMF9EUk9QX09OICAgIDB4MDIxMgorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9QT1JUMTBfRFJPUF9PTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9QT1JUMTBfRFJPUF9PTl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1BPUlRfR0FQICAgIDB4MDIxOAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9QT1JUX0dBUF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9QT1JUX0dBUF9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1FVRVVFX0dBUCAgICAweDAyMTkKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUVVFVUVfR0FQX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1FVRVVFX0dBUF9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlRfUUVNUFRZICAgIDB4MDIyZAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1FFTVBUWV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1FFTVBUWV9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX0RFQlVHX0NUUkwwICAgIDB4MDIyZQorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9ERUJVR19DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9ERUJVR19DVFJMMF9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9ERUJVR19DVFJMMSAgICAweDAyMmYKKyNkZWZpbmUgICAgUlRMODM2N0NfVE9UQUxfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfVE9UQUxfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX01BWF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX01BWF9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FNQVhfTUFTS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19RTUFYX01BU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1FVRVVFMF9QQUdFX0NPVU5UICAgIDB4MDIzMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRTBfUEFHRV9DT1VOVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRTBfUEFHRV9DT1VOVF9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1FVRVVFMV9QQUdFX0NPVU5UICAgIDB4MDIzMQorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRTFfUEFHRV9DT1VOVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRTFfUEFHRV9DT1VOVF9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1FVRVVFMl9QQUdFX0NPVU5UICAgIDB4MDIzMgorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRTJfUEFHRV9DT1VOVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRTJfUEFHRV9DT1VOVF9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1FVRVVFM19QQUdFX0NPVU5UICAgIDB4MDIzMworI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRTNfUEFHRV9DT1VOVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRTNfUEFHRV9DT1VOVF9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1FVRVVFNF9QQUdFX0NPVU5UICAgIDB4MDIzNAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRTRfUEFHRV9DT1VOVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRTRfUEFHRV9DT1VOVF9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1FVRVVFNV9QQUdFX0NPVU5UICAgIDB4MDIzNQorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRTVfUEFHRV9DT1VOVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRTVfUEFHRV9DT1VOVF9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1FVRVVFNl9QQUdFX0NPVU5UICAgIDB4MDIzNgorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRTZfUEFHRV9DT1VOVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRTZfUEFHRV9DT1VOVF9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1FVRVVFN19QQUdFX0NPVU5UICAgIDB4MDIzNworI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRTdfUEFHRV9DT1VOVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRTdfUEFHRV9DT1VOVF9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1BPUlRfUEFHRV9DT1VOVCAgICAweDAyMzgKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUE9SVF9QQUdFX0NPVU5UX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlRfUEFHRV9DT1VOVF9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1FVRVVFMF9NQVhfUEFHRV9DT1VOVCAgICAweDAyMzkKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUVVFVUUwX01BWF9QQUdFX0NPVU5UX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1FVRVVFMF9NQVhfUEFHRV9DT1VOVF9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1FVRVVFMV9NQVhfUEFHRV9DT1VOVCAgICAweDAyM2EKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUVVFVUUxX01BWF9QQUdFX0NPVU5UX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1FVRVVFMV9NQVhfUEFHRV9DT1VOVF9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1FVRVVFMl9NQVhfUEFHRV9DT1VOVCAgICAweDAyM2IKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUVVFVUUyX01BWF9QQUdFX0NPVU5UX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1FVRVVFMl9NQVhfUEFHRV9DT1VOVF9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1FVRVVFM19NQVhfUEFHRV9DT1VOVCAgICAweDAyM2MKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUVVFVUUzX01BWF9QQUdFX0NPVU5UX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1FVRVVFM19NQVhfUEFHRV9DT1VOVF9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1FVRVVFNF9NQVhfUEFHRV9DT1VOVCAgICAweDAyM2QKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUVVFVUU0X01BWF9QQUdFX0NPVU5UX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1FVRVVFNF9NQVhfUEFHRV9DT1VOVF9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1FVRVVFNV9NQVhfUEFHRV9DT1VOVCAgICAweDAyM2UKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUVVFVUU1X01BWF9QQUdFX0NPVU5UX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1FVRVVFNV9NQVhfUEFHRV9DT1VOVF9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1FVRVVFNl9NQVhfUEFHRV9DT1VOVCAgICAweDAyM2YKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUVVFVUU2X01BWF9QQUdFX0NPVU5UX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1FVRVVFNl9NQVhfUEFHRV9DT1VOVF9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1FVRVVFN19NQVhfUEFHRV9DT1VOVCAgICAweDAyNDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUVVFVUU3X01BWF9QQUdFX0NPVU5UX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1FVRVVFN19NQVhfUEFHRV9DT1VOVF9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1BPUlRfTUFYX1BBR0VfQ09VTlQgICAgMHgwMjQxCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlRfTUFYX1BBR0VfQ09VTlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUE9SVF9NQVhfUEFHRV9DT1VOVF9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1RPVEFMX1BBQ0tFVF9DT1VOVCAgICAweDAyNDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSElHSF9RVUVVRV9NQVNLMCAgICAweDAyNDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfSElHSF9RVUVVRV9NQVNLX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX0hJR0hfUVVFVUVfTUFTS19NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9ISUdIX1FVRVVFX01BU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfSElHSF9RVUVVRV9NQVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19ISUdIX1FVRVVFX01BU0sxICAgIDB4MDI0NQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19ISUdIX1FVRVVFX01BU0tfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfSElHSF9RVUVVRV9NQVNLX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX0hJR0hfUVVFVUVfTUFTS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9ISUdIX1FVRVVFX01BU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0hJR0hfUVVFVUVfTUFTSzIgICAgMHgwMjQ2CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X0hJR0hfUVVFVUVfTUFTS19PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9ISUdIX1FVRVVFX01BU0tfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfSElHSF9RVUVVRV9NQVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X0hJR0hfUVVFVUVfTUFTS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSElHSF9RVUVVRV9NQVNLMyAgICAweDAyNDcKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfSElHSF9RVUVVRV9NQVNLX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X0hJR0hfUVVFVUVfTUFTS19NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9ISUdIX1FVRVVFX01BU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfSElHSF9RVUVVRV9NQVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19ISUdIX1FVRVVFX01BU0s0ICAgIDB4MDI0OAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9ISUdIX1FVRVVFX01BU0tfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfSElHSF9RVUVVRV9NQVNLX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X0hJR0hfUVVFVUVfTUFTS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9ISUdIX1FVRVVFX01BU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0hJR0hfUVVFVUVfTUFTSzUgICAgMHgwMjQ5CisjZGVmaW5lICAgIFJUTDgzNjdDX0hJR0hfUVVFVUVfTUFTSzVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSElHSF9RVUVVRV9NQVNLNV9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTE9XX1FVRVVFX1RIICAgIDB4MDI0YworI2RlZmluZSAgICBSVEw4MzY3Q19MT1dfUVVFVUVfVEhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTE9XX1FVRVVFX1RIX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVEhfVFhfUFJFRkVUICAgIDB4MDI1MAorI2RlZmluZSAgICBSVEw4MzY3Q19USF9UWF9QUkVGRVRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVEhfVFhfUFJFRkVUX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19EVU1NWV8wMjUxICAgIDB4MDI1MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19EVU1NWV8wMjUyICAgIDB4MDI1MgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19EVU1NWV8wMjUzICAgIDB4MDI1MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19EVU1NWV8wMjU0ICAgIDB4MDI1NAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19EVU1NWV8wMjU1ICAgIDB4MDI1NQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19EVU1NWV8wMjU2ICAgIDB4MDI1NgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19EVU1NWV8wMjU3ICAgIDB4MDI1NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19EVU1NWV8wMjU4ICAgIDB4MDI1OAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19EVU1NWV8wMjU5ICAgIDB4MDI1OQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19EVU1NWV8wMjVBICAgIDB4MDI1QQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19EVU1NWV8wMjVCICAgIDB4MDI1QgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19EVU1NWV8wMjVDICAgIDB4MDI1QworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RX1RYUEtUX0NOVF9DVEwgICAgMHgwMjVkCisjZGVmaW5lICAgIFJUTDgzNjdDX1FVRVVFX1BLVF9DTlRfQ0xSX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1FVRVVFX1BLVF9DTlRfQ0xSX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX0lEX1FVRVVFX1BLVF9DTlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVF9JRF9RVUVVRV9QS1RfQ05UX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1EwX1RYUEtUX0NOVF9MICAgIDB4MDI1ZQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RMF9UWFBLVF9DTlRfSCAgICAweDAyNWYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUTFfVFhQS1RfQ05UX0wgICAgMHgwMjYwCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ExX1RYUEtUX0NOVF9IICAgIDB4MDI2MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RMl9UWFBLVF9DTlRfTCAgICAweDAyNjIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUTJfVFhQS1RfQ05UX0ggICAgMHgwMjYzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1EzX1RYUEtUX0NOVF9MICAgIDB4MDI2NAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RM19UWFBLVF9DTlRfSCAgICAweDAyNjUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUTRfVFhQS1RfQ05UX0wgICAgMHgwMjY2CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1E0X1RYUEtUX0NOVF9IICAgIDB4MDI2NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RNV9UWFBLVF9DTlRfTCAgICAweDAyNjgKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUTVfVFhQS1RfQ05UX0ggICAgMHgwMjY5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1E2X1RYUEtUX0NOVF9MICAgIDB4MDI2YQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RNl9UWFBLVF9DTlRfSCAgICAweDAyNmIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUTdfVFhQS1RfQ05UX0wgICAgMHgwMjZjCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1E3X1RYUEtUX0NOVF9IICAgIDB4MDI2ZAorCisvKiAoMTYnaDAzMDApc2NoX3JlZyAqLworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9XRlFfQ1RSTCAgICAweDAzMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfV0ZRX0NUUkxfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfV0ZRX0NUUkxfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfV0ZRX0JVUlNUX1NJWkUgICAgMHgwMzAxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1FVRVVFX1RZUEVfQ1RSTDAgICAgMHgwMzAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX1FVRVVFN19UWVBFX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9RVUVVRTdfVFlQRV9NQVNLICAgIDB4ODAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9RVUVVRTZfVFlQRV9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfUVVFVUU2X1RZUEVfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfUVVFVUU1X1RZUEVfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX1FVRVVFNV9UWVBFX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX1FVRVVFNF9UWVBFX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9RVUVVRTRfVFlQRV9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9RVUVVRTNfVFlQRV9PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfUVVFVUUzX1RZUEVfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9RVUVVRTJfVFlQRV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfUVVFVUUyX1RZUEVfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9RVUVVRTFfVFlQRV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9RVUVVRTFfVFlQRV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX1FVRVVFMF9UWVBFX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX1FVRVVFMF9UWVBFX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfUVVFVUU3X1RZUEVfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfUVVFVUU3X1RZUEVfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX1FVRVVFNl9UWVBFX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX1FVRVVFNl9UWVBFX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9RVUVVRTVfVFlQRV9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9RVUVVRTVfVFlQRV9NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfUVVFVUU0X1RZUEVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfUVVFVUU0X1RZUEVfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX1FVRVVFM19UWVBFX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX1FVRVVFM19UWVBFX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX1FVRVVFMl9UWVBFX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX1FVRVVFMl9UWVBFX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX1FVRVVFMV9UWVBFX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX1FVRVVFMV9UWVBFX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX1FVRVVFMF9UWVBFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX1FVRVVFMF9UWVBFX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1FVRVVFX1RZUEVfQ1RSTDEgICAgMHgwMzAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX1FVRVVFN19UWVBFX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19RVUVVRTdfVFlQRV9NQVNLICAgIDB4ODAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19RVUVVRTZfVFlQRV9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfUVVFVUU2X1RZUEVfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfUVVFVUU1X1RZUEVfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX1FVRVVFNV9UWVBFX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX1FVRVVFNF9UWVBFX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19RVUVVRTRfVFlQRV9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19RVUVVRTNfVFlQRV9PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfUVVFVUUzX1RZUEVfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19RVUVVRTJfVFlQRV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfUVVFVUUyX1RZUEVfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19RVUVVRTFfVFlQRV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19RVUVVRTFfVFlQRV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX1FVRVVFMF9UWVBFX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX1FVRVVFMF9UWVBFX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfUVVFVUU3X1RZUEVfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfUVVFVUU3X1RZUEVfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX1FVRVVFNl9UWVBFX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX1FVRVVFNl9UWVBFX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9RVUVVRTVfVFlQRV9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9RVUVVRTVfVFlQRV9NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfUVVFVUU0X1RZUEVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfUVVFVUU0X1RZUEVfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX1FVRVVFM19UWVBFX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX1FVRVVFM19UWVBFX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX1FVRVVFMl9UWVBFX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX1FVRVVFMl9UWVBFX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX1FVRVVFMV9UWVBFX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX1FVRVVFMV9UWVBFX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX1FVRVVFMF9UWVBFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX1FVRVVFMF9UWVBFX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1FVRVVFX1RZUEVfQ1RSTDIgICAgMHgwMzA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X1FVRVVFN19UWVBFX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9RVUVVRTdfVFlQRV9NQVNLICAgIDB4ODAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9RVUVVRTZfVFlQRV9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfUVVFVUU2X1RZUEVfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfUVVFVUU1X1RZUEVfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X1FVRVVFNV9UWVBFX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X1FVRVVFNF9UWVBFX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9RVUVVRTRfVFlQRV9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9RVUVVRTNfVFlQRV9PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfUVVFVUUzX1RZUEVfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9RVUVVRTJfVFlQRV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfUVVFVUUyX1RZUEVfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9RVUVVRTFfVFlQRV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9RVUVVRTFfVFlQRV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X1FVRVVFMF9UWVBFX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X1FVRVVFMF9UWVBFX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfUVVFVUU3X1RZUEVfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfUVVFVUU3X1RZUEVfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X1FVRVVFNl9UWVBFX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X1FVRVVFNl9UWVBFX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9RVUVVRTVfVFlQRV9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9RVUVVRTVfVFlQRV9NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfUVVFVUU0X1RZUEVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfUVVFVUU0X1RZUEVfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X1FVRVVFM19UWVBFX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X1FVRVVFM19UWVBFX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X1FVRVVFMl9UWVBFX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X1FVRVVFMl9UWVBFX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X1FVRVVFMV9UWVBFX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X1FVRVVFMV9UWVBFX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X1FVRVVFMF9UWVBFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X1FVRVVFMF9UWVBFX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1FVRVVFX1RZUEVfQ1RSTDMgICAgMHgwMzA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X1FVRVVFN19UWVBFX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19RVUVVRTdfVFlQRV9NQVNLICAgIDB4ODAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19RVUVVRTZfVFlQRV9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfUVVFVUU2X1RZUEVfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfUVVFVUU1X1RZUEVfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X1FVRVVFNV9UWVBFX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X1FVRVVFNF9UWVBFX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19RVUVVRTRfVFlQRV9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19RVUVVRTNfVFlQRV9PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfUVVFVUUzX1RZUEVfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19RVUVVRTJfVFlQRV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfUVVFVUUyX1RZUEVfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19RVUVVRTFfVFlQRV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19RVUVVRTFfVFlQRV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X1FVRVVFMF9UWVBFX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X1FVRVVFMF9UWVBFX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfUVVFVUU3X1RZUEVfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfUVVFVUU3X1RZUEVfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X1FVRVVFNl9UWVBFX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X1FVRVVFNl9UWVBFX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9RVUVVRTVfVFlQRV9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9RVUVVRTVfVFlQRV9NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfUVVFVUU0X1RZUEVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfUVVFVUU0X1RZUEVfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X1FVRVVFM19UWVBFX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X1FVRVVFM19UWVBFX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X1FVRVVFMl9UWVBFX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X1FVRVVFMl9UWVBFX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X1FVRVVFMV9UWVBFX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X1FVRVVFMV9UWVBFX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1FVRVVFX1RZUEVfQ1RSTDNfUE9SVDZfUVVFVUUwX1RZUEVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUVVFVUVfVFlQRV9DVFJMM19QT1JUNl9RVUVVRTBfVFlQRV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9RVUVVRV9UWVBFX0NUUkw0ICAgIDB4MDMwNgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9RVUVVRTdfVFlQRV9PRkZTRVQgICAgMTUKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfUVVFVUU3X1RZUEVfTUFTSyAgICAweDgwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfUVVFVUU2X1RZUEVfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X1FVRVVFNl9UWVBFX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X1FVRVVFNV9UWVBFX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9RVUVVRTVfVFlQRV9NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9RVUVVRTRfVFlQRV9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfUVVFVUU0X1RZUEVfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfUVVFVUUzX1RZUEVfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X1FVRVVFM19UWVBFX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfUVVFVUUyX1RZUEVfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X1FVRVVFMl9UWVBFX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfUVVFVUUxX1RZUEVfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfUVVFVUUxX1RZUEVfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9RVUVVRTBfVFlQRV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9RVUVVRTBfVFlQRV9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X1FVRVVFN19UWVBFX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X1FVRVVFN19UWVBFX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9RVUVVRTZfVFlQRV9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9RVUVVRTZfVFlQRV9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfUVVFVUU1X1RZUEVfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfUVVFVUU1X1RZUEVfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X1FVRVVFNF9UWVBFX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X1FVRVVFNF9UWVBFX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9RVUVVRTNfVFlQRV9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9RVUVVRTNfVFlQRV9NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9RVUVVRTJfVFlQRV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9RVUVVRTJfVFlQRV9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9RVUVVRTFfVFlQRV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9RVUVVRTFfVFlQRV9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9RVUVVRV9UWVBFX0NUUkw0X1BPUlQ2X1FVRVVFMF9UWVBFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1FVRVVFX1RZUEVfQ1RSTDRfUE9SVDZfUVVFVUUwX1RZUEVfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfUVVFVUVfVFlQRV9DVFJMNSAgICAweDAzMDcKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX1FVRVVFN19UWVBFX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9RVUVVRTdfVFlQRV9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX1FVRVVFNl9UWVBFX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9RVUVVRTZfVFlQRV9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX1FVRVVFNV9UWVBFX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9RVUVVRTVfVFlQRV9NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX1FVRVVFNF9UWVBFX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9RVUVVRTRfVFlQRV9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX1FVRVVFM19UWVBFX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9RVUVVRTNfVFlQRV9NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfUVVFVUUyX1RZUEVfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX1FVRVVFMl9UWVBFX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9RVUVVRTFfVFlQRV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfUVVFVUUxX1RZUEVfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX1FVRVVFMF9UWVBFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9RVUVVRTBfVFlQRV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9BUFJfQ1RSTDAgICAgMHgwMzBhCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9BUFJfRU5BQkxFX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfQVBSX0VOQUJMRV9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X0FQUl9FTkFCTEVfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfQVBSX0VOQUJMRV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X0FQUl9FTkFCTEVfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfQVBSX0VOQUJMRV9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X0FQUl9FTkFCTEVfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfQVBSX0VOQUJMRV9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfQVBSX0VOQUJMRV9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9BUFJfRU5BQkxFX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9BUFJfRU5BQkxFX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X0FQUl9FTkFCTEVfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X0FQUl9FTkFCTEVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfQVBSX0VOQUJMRV9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfQVBSX0VOQUJMRV9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19BUFJfRU5BQkxFX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX0FQUl9FTkFCTEVfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfQVBSX0VOQUJMRV9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9BUFJfRU5BQkxFX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX0FQUl9FTkFCTEVfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfQVBSX0VOQUJMRV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9BUFJfRU5BQkxFX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQwX1FVRVVFMF9XRlFfV0VJR0hUICAgIDB4MDMwYworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUMF9RVUVVRTFfV0ZRX1dFSUdIVCAgICAweDAzMGQKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDBfUVVFVUUxX1dGUV9XRUlHSFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDBfUVVFVUUxX1dGUV9XRUlHSFRfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQwX1FVRVVFMl9XRlFfV0VJR0hUICAgIDB4MDMwZQorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMF9RVUVVRTJfV0ZRX1dFSUdIVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMF9RVUVVRTJfV0ZRX1dFSUdIVF9NQVNLICAgIDB4N0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfUE9SVDBfUVVFVUUzX1dGUV9XRUlHSFQgICAgMHgwMzBmCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQwX1FVRVVFM19XRlFfV0VJR0hUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQwX1FVRVVFM19XRlFfV0VJR0hUX01BU0sgICAgMHg3RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUMF9RVUVVRTRfV0ZRX1dFSUdIVCAgICAweDAzMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDBfUVVFVUU0X1dGUV9XRUlHSFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDBfUVVFVUU0X1dGUV9XRUlHSFRfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQwX1FVRVVFNV9XRlFfV0VJR0hUICAgIDB4MDMxMQorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMF9RVUVVRTVfV0ZRX1dFSUdIVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMF9RVUVVRTVfV0ZRX1dFSUdIVF9NQVNLICAgIDB4N0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfUE9SVDBfUVVFVUU2X1dGUV9XRUlHSFQgICAgMHgwMzEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQwX1FVRVVFNl9XRlFfV0VJR0hUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQwX1FVRVVFNl9XRlFfV0VJR0hUX01BU0sgICAgMHg3RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUMF9RVUVVRTdfV0ZRX1dFSUdIVCAgICAweDAzMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDBfUVVFVUU3X1dGUV9XRUlHSFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDBfUVVFVUU3X1dGUV9XRUlHSFRfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQxX1FVRVVFMF9XRlFfV0VJR0hUICAgIDB4MDMxNAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUMV9RVUVVRTFfV0ZRX1dFSUdIVCAgICAweDAzMTUKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDFfUVVFVUUxX1dGUV9XRUlHSFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDFfUVVFVUUxX1dGUV9XRUlHSFRfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQxX1FVRVVFMl9XRlFfV0VJR0hUICAgIDB4MDMxNgorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMV9RVUVVRTJfV0ZRX1dFSUdIVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMV9RVUVVRTJfV0ZRX1dFSUdIVF9NQVNLICAgIDB4N0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfUE9SVDFfUVVFVUUzX1dGUV9XRUlHSFQgICAgMHgwMzE3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQxX1FVRVVFM19XRlFfV0VJR0hUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQxX1FVRVVFM19XRlFfV0VJR0hUX01BU0sgICAgMHg3RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUMV9RVUVVRTRfV0ZRX1dFSUdIVCAgICAweDAzMTgKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDFfUVVFVUU0X1dGUV9XRUlHSFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDFfUVVFVUU0X1dGUV9XRUlHSFRfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQxX1FVRVVFNV9XRlFfV0VJR0hUICAgIDB4MDMxOQorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMV9RVUVVRTVfV0ZRX1dFSUdIVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMV9RVUVVRTVfV0ZRX1dFSUdIVF9NQVNLICAgIDB4N0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfUE9SVDFfUVVFVUU2X1dGUV9XRUlHSFQgICAgMHgwMzFhCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQxX1FVRVVFNl9XRlFfV0VJR0hUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQxX1FVRVVFNl9XRlFfV0VJR0hUX01BU0sgICAgMHg3RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUMV9RVUVVRTdfV0ZRX1dFSUdIVCAgICAweDAzMWIKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDFfUVVFVUU3X1dGUV9XRUlHSFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDFfUVVFVUU3X1dGUV9XRUlHSFRfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQyX1FVRVVFMF9XRlFfV0VJR0hUICAgIDB4MDMxYworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUMl9RVUVVRTFfV0ZRX1dFSUdIVCAgICAweDAzMWQKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDJfUVVFVUUxX1dGUV9XRUlHSFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDJfUVVFVUUxX1dGUV9XRUlHSFRfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQyX1FVRVVFMl9XRlFfV0VJR0hUICAgIDB4MDMxZQorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMl9RVUVVRTJfV0ZRX1dFSUdIVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMl9RVUVVRTJfV0ZRX1dFSUdIVF9NQVNLICAgIDB4N0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfUE9SVDJfUVVFVUUzX1dGUV9XRUlHSFQgICAgMHgwMzFmCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQyX1FVRVVFM19XRlFfV0VJR0hUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQyX1FVRVVFM19XRlFfV0VJR0hUX01BU0sgICAgMHg3RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUMl9RVUVVRTRfV0ZRX1dFSUdIVCAgICAweDAzMjAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDJfUVVFVUU0X1dGUV9XRUlHSFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDJfUVVFVUU0X1dGUV9XRUlHSFRfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQyX1FVRVVFNV9XRlFfV0VJR0hUICAgIDB4MDMyMQorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMl9RVUVVRTVfV0ZRX1dFSUdIVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMl9RVUVVRTVfV0ZRX1dFSUdIVF9NQVNLICAgIDB4N0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfUE9SVDJfUVVFVUU2X1dGUV9XRUlHSFQgICAgMHgwMzIyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQyX1FVRVVFNl9XRlFfV0VJR0hUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQyX1FVRVVFNl9XRlFfV0VJR0hUX01BU0sgICAgMHg3RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUMl9RVUVVRTdfV0ZRX1dFSUdIVCAgICAweDAzMjMKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDJfUVVFVUU3X1dGUV9XRUlHSFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDJfUVVFVUU3X1dGUV9XRUlHSFRfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQzX1FVRVVFMF9XRlFfV0VJR0hUICAgIDB4MDMyNAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUM19RVUVVRTFfV0ZRX1dFSUdIVCAgICAweDAzMjUKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDNfUVVFVUUxX1dGUV9XRUlHSFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDNfUVVFVUUxX1dGUV9XRUlHSFRfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQzX1FVRVVFMl9XRlFfV0VJR0hUICAgIDB4MDMyNgorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUM19RVUVVRTJfV0ZRX1dFSUdIVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUM19RVUVVRTJfV0ZRX1dFSUdIVF9NQVNLICAgIDB4N0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfUE9SVDNfUVVFVUUzX1dGUV9XRUlHSFQgICAgMHgwMzI3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQzX1FVRVVFM19XRlFfV0VJR0hUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQzX1FVRVVFM19XRlFfV0VJR0hUX01BU0sgICAgMHg3RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUM19RVUVVRTRfV0ZRX1dFSUdIVCAgICAweDAzMjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDNfUVVFVUU0X1dGUV9XRUlHSFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDNfUVVFVUU0X1dGUV9XRUlHSFRfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQzX1FVRVVFNV9XRlFfV0VJR0hUICAgIDB4MDMyOQorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUM19RVUVVRTVfV0ZRX1dFSUdIVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUM19RVUVVRTVfV0ZRX1dFSUdIVF9NQVNLICAgIDB4N0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfUE9SVDNfUVVFVUU2X1dGUV9XRUlHSFQgICAgMHgwMzJhCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQzX1FVRVVFNl9XRlFfV0VJR0hUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQzX1FVRVVFNl9XRlFfV0VJR0hUX01BU0sgICAgMHg3RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUM19RVUVVRTdfV0ZRX1dFSUdIVCAgICAweDAzMmIKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDNfUVVFVUU3X1dGUV9XRUlHSFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDNfUVVFVUU3X1dGUV9XRUlHSFRfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQ0X1FVRVVFMF9XRlFfV0VJR0hUICAgIDB4MDMyYworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUNF9RVUVVRTFfV0ZRX1dFSUdIVCAgICAweDAzMmQKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDRfUVVFVUUxX1dGUV9XRUlHSFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDRfUVVFVUUxX1dGUV9XRUlHSFRfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQ0X1FVRVVFMl9XRlFfV0VJR0hUICAgIDB4MDMyZQorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUNF9RVUVVRTJfV0ZRX1dFSUdIVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUNF9RVUVVRTJfV0ZRX1dFSUdIVF9NQVNLICAgIDB4N0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfUE9SVDRfUVVFVUUzX1dGUV9XRUlHSFQgICAgMHgwMzJmCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ0X1FVRVVFM19XRlFfV0VJR0hUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ0X1FVRVVFM19XRlFfV0VJR0hUX01BU0sgICAgMHg3RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUNF9RVUVVRTRfV0ZRX1dFSUdIVCAgICAweDAzMzAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDRfUVVFVUU0X1dGUV9XRUlHSFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDRfUVVFVUU0X1dGUV9XRUlHSFRfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQ0X1FVRVVFNV9XRlFfV0VJR0hUICAgIDB4MDMzMQorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUNF9RVUVVRTVfV0ZRX1dFSUdIVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUNF9RVUVVRTVfV0ZRX1dFSUdIVF9NQVNLICAgIDB4N0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfUE9SVDRfUVVFVUU2X1dGUV9XRUlHSFQgICAgMHgwMzMyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ0X1FVRVVFNl9XRlFfV0VJR0hUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ0X1FVRVVFNl9XRlFfV0VJR0hUX01BU0sgICAgMHg3RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUNF9RVUVVRTdfV0ZRX1dFSUdIVCAgICAweDAzMzMKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDRfUVVFVUU3X1dGUV9XRUlHSFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDRfUVVFVUU3X1dGUV9XRUlHSFRfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQ1X1FVRVVFMF9XRlFfV0VJR0hUICAgIDB4MDMzNAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUNV9RVUVVRTFfV0ZRX1dFSUdIVCAgICAweDAzMzUKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDVfUVVFVUUxX1dGUV9XRUlHSFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDVfUVVFVUUxX1dGUV9XRUlHSFRfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQ1X1FVRVVFMl9XRlFfV0VJR0hUICAgIDB4MDMzNgorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUNV9RVUVVRTJfV0ZRX1dFSUdIVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUNV9RVUVVRTJfV0ZRX1dFSUdIVF9NQVNLICAgIDB4N0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfUE9SVDVfUVVFVUUzX1dGUV9XRUlHSFQgICAgMHgwMzM3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ1X1FVRVVFM19XRlFfV0VJR0hUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ1X1FVRVVFM19XRlFfV0VJR0hUX01BU0sgICAgMHg3RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUNV9RVUVVRTRfV0ZRX1dFSUdIVCAgICAweDAzMzgKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDVfUVVFVUU0X1dGUV9XRUlHSFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDVfUVVFVUU0X1dGUV9XRUlHSFRfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQ1X1FVRVVFNV9XRlFfV0VJR0hUICAgIDB4MDMzOQorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUNV9RVUVVRTVfV0ZRX1dFSUdIVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUNV9RVUVVRTVfV0ZRX1dFSUdIVF9NQVNLICAgIDB4N0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfUE9SVDVfUVVFVUU2X1dGUV9XRUlHSFQgICAgMHgwMzNhCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ1X1FVRVVFNl9XRlFfV0VJR0hUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ1X1FVRVVFNl9XRlFfV0VJR0hUX01BU0sgICAgMHg3RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUNV9RVUVVRTdfV0ZRX1dFSUdIVCAgICAweDAzM2IKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDVfUVVFVUU3X1dGUV9XRUlHSFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDVfUVVFVUU3X1dGUV9XRUlHSFRfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQ2X1FVRVVFMF9XRlFfV0VJR0hUICAgIDB4MDMzYworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUNl9RVUVVRTFfV0ZRX1dFSUdIVCAgICAweDAzM2QKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDZfUVVFVUUxX1dGUV9XRUlHSFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDZfUVVFVUUxX1dGUV9XRUlHSFRfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQ2X1FVRVVFMl9XRlFfV0VJR0hUICAgIDB4MDMzZQorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUNl9RVUVVRTJfV0ZRX1dFSUdIVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUNl9RVUVVRTJfV0ZRX1dFSUdIVF9NQVNLICAgIDB4N0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfUE9SVDZfUVVFVUUzX1dGUV9XRUlHSFQgICAgMHgwMzNmCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ2X1FVRVVFM19XRlFfV0VJR0hUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ2X1FVRVVFM19XRlFfV0VJR0hUX01BU0sgICAgMHg3RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUNl9RVUVVRTRfV0ZRX1dFSUdIVCAgICAweDAzNDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDZfUVVFVUU0X1dGUV9XRUlHSFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDZfUVVFVUU0X1dGUV9XRUlHSFRfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQ2X1FVRVVFNV9XRlFfV0VJR0hUICAgIDB4MDM0MQorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUNl9RVUVVRTVfV0ZRX1dFSUdIVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUNl9RVUVVRTVfV0ZRX1dFSUdIVF9NQVNLICAgIDB4N0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfUE9SVDZfUVVFVUU2X1dGUV9XRUlHSFQgICAgMHgwMzQyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ2X1FVRVVFNl9XRlFfV0VJR0hUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ2X1FVRVVFNl9XRlFfV0VJR0hUX01BU0sgICAgMHg3RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUNl9RVUVVRTdfV0ZRX1dFSUdIVCAgICAweDAzNDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDZfUVVFVUU3X1dGUV9XRUlHSFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDZfUVVFVUU3X1dGUV9XRUlHSFRfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQ3X1FVRVVFMF9XRlFfV0VJR0hUICAgIDB4MDM0NAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUN19RVUVVRTFfV0ZRX1dFSUdIVCAgICAweDAzNDUKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDdfUVVFVUUxX1dGUV9XRUlHSFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDdfUVVFVUUxX1dGUV9XRUlHSFRfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQ3X1FVRVVFMl9XRlFfV0VJR0hUICAgIDB4MDM0NgorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUN19RVUVVRTJfV0ZRX1dFSUdIVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUN19RVUVVRTJfV0ZRX1dFSUdIVF9NQVNLICAgIDB4N0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfUE9SVDdfUVVFVUUzX1dGUV9XRUlHSFQgICAgMHgwMzQ3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ3X1FVRVVFM19XRlFfV0VJR0hUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ3X1FVRVVFM19XRlFfV0VJR0hUX01BU0sgICAgMHg3RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUN19RVUVVRTRfV0ZRX1dFSUdIVCAgICAweDAzNDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDdfUVVFVUU0X1dGUV9XRUlHSFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDdfUVVFVUU0X1dGUV9XRUlHSFRfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQ3X1FVRVVFNV9XRlFfV0VJR0hUICAgIDB4MDM0OQorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUN19RVUVVRTVfV0ZRX1dFSUdIVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUN19RVUVVRTVfV0ZRX1dFSUdIVF9NQVNLICAgIDB4N0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfUE9SVDdfUVVFVUU2X1dGUV9XRUlHSFQgICAgMHgwMzRhCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ3X1FVRVVFNl9XRlFfV0VJR0hUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ3X1FVRVVFNl9XRlFfV0VJR0hUX01BU0sgICAgMHg3RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUN19RVUVVRTdfV0ZRX1dFSUdIVCAgICAweDAzNGIKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDdfUVVFVUU3X1dGUV9XRUlHSFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDdfUVVFVUU3X1dGUV9XRUlHSFRfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQ4X1FVRVVFMF9XRlFfV0VJR0hUICAgIDB4MDM0YworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUOF9RVUVVRTFfV0ZRX1dFSUdIVCAgICAweDAzNGQKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDhfUVVFVUUxX1dGUV9XRUlHSFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDhfUVVFVUUxX1dGUV9XRUlHSFRfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQ4X1FVRVVFMl9XRlFfV0VJR0hUICAgIDB4MDM0ZQorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUOF9RVUVVRTJfV0ZRX1dFSUdIVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUOF9RVUVVRTJfV0ZRX1dFSUdIVF9NQVNLICAgIDB4N0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfUE9SVDhfUVVFVUUzX1dGUV9XRUlHSFQgICAgMHgwMzRmCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ4X1FVRVVFM19XRlFfV0VJR0hUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ4X1FVRVVFM19XRlFfV0VJR0hUX01BU0sgICAgMHg3RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUOF9RVUVVRTRfV0ZRX1dFSUdIVCAgICAweDAzNTAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDhfUVVFVUU0X1dGUV9XRUlHSFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDhfUVVFVUU0X1dGUV9XRUlHSFRfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQ4X1FVRVVFNV9XRlFfV0VJR0hUICAgIDB4MDM1MQorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUOF9RVUVVRTVfV0ZRX1dFSUdIVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUOF9RVUVVRTVfV0ZRX1dFSUdIVF9NQVNLICAgIDB4N0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfUE9SVDhfUVVFVUU2X1dGUV9XRUlHSFQgICAgMHgwMzUyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ4X1FVRVVFNl9XRlFfV0VJR0hUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ4X1FVRVVFNl9XRlFfV0VJR0hUX01BU0sgICAgMHg3RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUOF9RVUVVRTdfV0ZRX1dFSUdIVCAgICAweDAzNTMKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDhfUVVFVUU3X1dGUV9XRUlHSFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDhfUVVFVUU3X1dGUV9XRUlHSFRfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQ5X1FVRVVFMF9XRlFfV0VJR0hUICAgIDB4MDM1NAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUOV9RVUVVRTFfV0ZRX1dFSUdIVCAgICAweDAzNTUKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDlfUVVFVUUxX1dGUV9XRUlHSFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDlfUVVFVUUxX1dGUV9XRUlHSFRfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQ5X1FVRVVFMl9XRlFfV0VJR0hUICAgIDB4MDM1NgorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUOV9RVUVVRTJfV0ZRX1dFSUdIVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUOV9RVUVVRTJfV0ZRX1dFSUdIVF9NQVNLICAgIDB4N0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfUE9SVDlfUVVFVUUzX1dGUV9XRUlHSFQgICAgMHgwMzU3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ5X1FVRVVFM19XRlFfV0VJR0hUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ5X1FVRVVFM19XRlFfV0VJR0hUX01BU0sgICAgMHg3RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUOV9RVUVVRTRfV0ZRX1dFSUdIVCAgICAweDAzNTgKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDlfUVVFVUU0X1dGUV9XRUlHSFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDlfUVVFVUU0X1dGUV9XRUlHSFRfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQ5X1FVRVVFNV9XRlFfV0VJR0hUICAgIDB4MDM1OQorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUOV9RVUVVRTVfV0ZRX1dFSUdIVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUOV9RVUVVRTVfV0ZRX1dFSUdIVF9NQVNLICAgIDB4N0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfUE9SVDlfUVVFVUU2X1dGUV9XRUlHSFQgICAgMHgwMzVhCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ5X1FVRVVFNl9XRlFfV0VJR0hUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ5X1FVRVVFNl9XRlFfV0VJR0hUX01BU0sgICAgMHg3RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUOV9RVUVVRTdfV0ZRX1dFSUdIVCAgICAweDAzNWIKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDlfUVVFVUU3X1dGUV9XRUlHSFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDlfUVVFVUU3X1dGUV9XRUlHSFRfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQxMF9RVUVVRTBfV0ZRX1dFSUdIVCAgICAweDAzNWMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfUE9SVDEwX1FVRVVFMV9XRlFfV0VJR0hUICAgIDB4MDM1ZAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMTBfUVVFVUUxX1dGUV9XRUlHSFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDEwX1FVRVVFMV9XRlFfV0VJR0hUX01BU0sgICAgMHg3RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUMTBfUVVFVUUyX1dGUV9XRUlHSFQgICAgMHgwMzVlCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQxMF9RVUVVRTJfV0ZRX1dFSUdIVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMTBfUVVFVUUyX1dGUV9XRUlHSFRfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQxMF9RVUVVRTNfV0ZRX1dFSUdIVCAgICAweDAzNWYKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDEwX1FVRVVFM19XRlFfV0VJR0hUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQxMF9RVUVVRTNfV0ZRX1dFSUdIVF9NQVNLICAgIDB4N0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfUE9SVDEwX1FVRVVFNF9XRlFfV0VJR0hUICAgIDB4MDM2MAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMTBfUVVFVUU0X1dGUV9XRUlHSFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDEwX1FVRVVFNF9XRlFfV0VJR0hUX01BU0sgICAgMHg3RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUMTBfUVVFVUU1X1dGUV9XRUlHSFQgICAgMHgwMzYxCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQxMF9RVUVVRTVfV0ZRX1dFSUdIVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMTBfUVVFVUU1X1dGUV9XRUlHSFRfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQxMF9RVUVVRTZfV0ZRX1dFSUdIVCAgICAweDAzNjIKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDEwX1FVRVVFNl9XRlFfV0VJR0hUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQxMF9RVUVVRTZfV0ZRX1dFSUdIVF9NQVNLICAgIDB4N0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfUE9SVDEwX1FVRVVFN19XRlFfV0VJR0hUICAgIDB4MDM2MworI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMTBfUVVFVUU3X1dGUV9XRUlHSFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDEwX1FVRVVFN19XRlFfV0VJR0hUX01BU0sgICAgMHg3RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUMF9FR1JFU1NCV19DVFJMMCAgICAweDAzOGMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDBfRUdSRVNTQldfQ1RSTDEgICAgMHgwMzhkCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX0VHUkVTU0JXX0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX0VHUkVTU0JXX0NUUkwxX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQxX0VHUkVTU0JXX0NUUkwwICAgIDB4MDM4ZQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUMV9FR1JFU1NCV19DVFJMMSAgICAweDAzOGYKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfRUdSRVNTQldfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfRUdSRVNTQldfQ1RSTDFfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDJfRUdSRVNTQldfQ1RSTDAgICAgMHgwMzkwCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQyX0VHUkVTU0JXX0NUUkwxICAgIDB4MDM5MQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9FR1JFU1NCV19DVFJMMV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9FR1JFU1NCV19DVFJMMV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUM19FR1JFU1NCV19DVFJMMCAgICAweDAzOTIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDNfRUdSRVNTQldfQ1RSTDEgICAgMHgwMzkzCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX0VHUkVTU0JXX0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX0VHUkVTU0JXX0NUUkwxX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQ0X0VHUkVTU0JXX0NUUkwwICAgIDB4MDM5NAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUNF9FR1JFU1NCV19DVFJMMSAgICAweDAzOTUKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfRUdSRVNTQldfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfRUdSRVNTQldfQ1RSTDFfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDVfRUdSRVNTQldfQ1RSTDAgICAgMHgwMzk2CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQ1X0VHUkVTU0JXX0NUUkwxICAgIDB4MDM5NworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9FR1JFU1NCV19DVFJMMV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9FR1JFU1NCV19DVFJMMV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUNl9FR1JFU1NCV19DVFJMMCAgICAweDAzOTgKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDZfRUdSRVNTQldfQ1RSTDEgICAgMHgwMzk5CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X0VHUkVTU0JXX0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X0VHUkVTU0JXX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQ3X0VHUkVTU0JXX0NUUkwwICAgIDB4MDM5YQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUN19FR1JFU1NCV19DVFJMMSAgICAweDAzOWIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfRUdSRVNTQldfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfRUdSRVNTQldfQ1RSTDFfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDhfRUdSRVNTQldfQ1RSTDAgICAgMHgwMzljCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQ4X0VHUkVTU0JXX0NUUkwxICAgIDB4MDM5ZAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9FR1JFU1NCV19DVFJMMV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9FR1JFU1NCV19DVFJMMV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUOV9FR1JFU1NCV19DVFJMMCAgICAweDAzOWUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDlfRUdSRVNTQldfQ1RSTDEgICAgMHgwMzlmCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X0VHUkVTU0JXX0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X0VHUkVTU0JXX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQxMF9FR1JFU1NCV19DVFJMMCAgICAweDAzYTAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDEwX0VHUkVTU0JXX0NUUkwxICAgIDB4MDNhMQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfRUdSRVNTQldfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX0VHUkVTU0JXX0NUUkwxX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQwX0FQUl9NRVRFUl9DVFJMMCAgICAweDAzYWMKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDBfQVBSX01FVEVSX0NUUkwwX1FVRVVFNF9BUFJfTUVURVJfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQwX0FQUl9NRVRFUl9DVFJMMF9RVUVVRTRfQVBSX01FVEVSX01BU0sgICAgMHg3MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQwX0FQUl9NRVRFUl9DVFJMMF9RVUVVRTNfQVBSX01FVEVSX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQwX0FQUl9NRVRFUl9DVFJMMF9RVUVVRTNfQVBSX01FVEVSX01BU0sgICAgMHhFMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDBfQVBSX01FVEVSX0NUUkwwX1FVRVVFMl9BUFJfTUVURVJfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDBfQVBSX01FVEVSX0NUUkwwX1FVRVVFMl9BUFJfTUVURVJfTUFTSyAgICAweDFDMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMF9BUFJfTUVURVJfQ1RSTDBfUVVFVUUxX0FQUl9NRVRFUl9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMF9BUFJfTUVURVJfQ1RSTDBfUVVFVUUxX0FQUl9NRVRFUl9NQVNLICAgIDB4MzgKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDBfQVBSX01FVEVSX0NUUkwwX1FVRVVFMF9BUFJfTUVURVJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDBfQVBSX01FVEVSX0NUUkwwX1FVRVVFMF9BUFJfTUVURVJfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfUE9SVDBfQVBSX01FVEVSX0NUUkwxICAgIDB4MDNhZAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMF9BUFJfTUVURVJfQ1RSTDFfUVVFVUU3X0FQUl9NRVRFUl9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMF9BUFJfTUVURVJfQ1RSTDFfUVVFVUU3X0FQUl9NRVRFUl9NQVNLICAgIDB4MUMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQwX0FQUl9NRVRFUl9DVFJMMV9RVUVVRTZfQVBSX01FVEVSX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQwX0FQUl9NRVRFUl9DVFJMMV9RVUVVRTZfQVBSX01FVEVSX01BU0sgICAgMHgzOAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMF9BUFJfTUVURVJfQ1RSTDFfUVVFVUU1X0FQUl9NRVRFUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMF9BUFJfTUVURVJfQ1RSTDFfUVVFVUU1X0FQUl9NRVRFUl9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUMV9BUFJfTUVURVJfQ1RSTDAgICAgMHgwM2IwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQxX0FQUl9NRVRFUl9DVFJMMF9RVUVVRTRfQVBSX01FVEVSX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMV9BUFJfTUVURVJfQ1RSTDBfUVVFVUU0X0FQUl9NRVRFUl9NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMV9BUFJfTUVURVJfQ1RSTDBfUVVFVUUzX0FQUl9NRVRFUl9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMV9BUFJfTUVURVJfQ1RSTDBfUVVFVUUzX0FQUl9NRVRFUl9NQVNLICAgIDB4RTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQxX0FQUl9NRVRFUl9DVFJMMF9RVUVVRTJfQVBSX01FVEVSX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQxX0FQUl9NRVRFUl9DVFJMMF9RVUVVRTJfQVBSX01FVEVSX01BU0sgICAgMHgxQzAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDFfQVBSX01FVEVSX0NUUkwwX1FVRVVFMV9BUFJfTUVURVJfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDFfQVBSX01FVEVSX0NUUkwwX1FVRVVFMV9BUFJfTUVURVJfTUFTSyAgICAweDM4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQxX0FQUl9NRVRFUl9DVFJMMF9RVUVVRTBfQVBSX01FVEVSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQxX0FQUl9NRVRFUl9DVFJMMF9RVUVVRTBfQVBSX01FVEVSX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQxX0FQUl9NRVRFUl9DVFJMMSAgICAweDAzYjEKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDFfQVBSX01FVEVSX0NUUkwxX1FVRVVFN19BUFJfTUVURVJfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDFfQVBSX01FVEVSX0NUUkwxX1FVRVVFN19BUFJfTUVURVJfTUFTSyAgICAweDFDMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMV9BUFJfTUVURVJfQ1RSTDFfUVVFVUU2X0FQUl9NRVRFUl9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMV9BUFJfTUVURVJfQ1RSTDFfUVVFVUU2X0FQUl9NRVRFUl9NQVNLICAgIDB4MzgKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDFfQVBSX01FVEVSX0NUUkwxX1FVRVVFNV9BUFJfTUVURVJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDFfQVBSX01FVEVSX0NUUkwxX1FVRVVFNV9BUFJfTUVURVJfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfUE9SVDJfQVBSX01FVEVSX0NUUkwwICAgIDB4MDNiNAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMl9BUFJfTUVURVJfQ1RSTDBfUVVFVUU0X0FQUl9NRVRFUl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDJfQVBSX01FVEVSX0NUUkwwX1FVRVVFNF9BUFJfTUVURVJfTUFTSyAgICAweDcwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDJfQVBSX01FVEVSX0NUUkwwX1FVRVVFM19BUFJfTUVURVJfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDJfQVBSX01FVEVSX0NUUkwwX1FVRVVFM19BUFJfTUVURVJfTUFTSyAgICAweEUwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMl9BUFJfTUVURVJfQ1RSTDBfUVVFVUUyX0FQUl9NRVRFUl9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMl9BUFJfTUVURVJfQ1RSTDBfUVVFVUUyX0FQUl9NRVRFUl9NQVNLICAgIDB4MUMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQyX0FQUl9NRVRFUl9DVFJMMF9RVUVVRTFfQVBSX01FVEVSX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQyX0FQUl9NRVRFUl9DVFJMMF9RVUVVRTFfQVBSX01FVEVSX01BU0sgICAgMHgzOAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMl9BUFJfTUVURVJfQ1RSTDBfUVVFVUUwX0FQUl9NRVRFUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMl9BUFJfTUVURVJfQ1RSTDBfUVVFVUUwX0FQUl9NRVRFUl9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUMl9BUFJfTUVURVJfQ1RSTDEgICAgMHgwM2I1CisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQyX0FQUl9NRVRFUl9DVFJMMV9RVUVVRTdfQVBSX01FVEVSX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQyX0FQUl9NRVRFUl9DVFJMMV9RVUVVRTdfQVBSX01FVEVSX01BU0sgICAgMHgxQzAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDJfQVBSX01FVEVSX0NUUkwxX1FVRVVFNl9BUFJfTUVURVJfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDJfQVBSX01FVEVSX0NUUkwxX1FVRVVFNl9BUFJfTUVURVJfTUFTSyAgICAweDM4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQyX0FQUl9NRVRFUl9DVFJMMV9RVUVVRTVfQVBSX01FVEVSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQyX0FQUl9NRVRFUl9DVFJMMV9RVUVVRTVfQVBSX01FVEVSX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQzX0FQUl9NRVRFUl9DVFJMMCAgICAweDAzYjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDNfQVBSX01FVEVSX0NUUkwwX1FVRVVFNF9BUFJfTUVURVJfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQzX0FQUl9NRVRFUl9DVFJMMF9RVUVVRTRfQVBSX01FVEVSX01BU0sgICAgMHg3MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQzX0FQUl9NRVRFUl9DVFJMMF9RVUVVRTNfQVBSX01FVEVSX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQzX0FQUl9NRVRFUl9DVFJMMF9RVUVVRTNfQVBSX01FVEVSX01BU0sgICAgMHhFMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDNfQVBSX01FVEVSX0NUUkwwX1FVRVVFMl9BUFJfTUVURVJfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDNfQVBSX01FVEVSX0NUUkwwX1FVRVVFMl9BUFJfTUVURVJfTUFTSyAgICAweDFDMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUM19BUFJfTUVURVJfQ1RSTDBfUVVFVUUxX0FQUl9NRVRFUl9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUM19BUFJfTUVURVJfQ1RSTDBfUVVFVUUxX0FQUl9NRVRFUl9NQVNLICAgIDB4MzgKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDNfQVBSX01FVEVSX0NUUkwwX1FVRVVFMF9BUFJfTUVURVJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDNfQVBSX01FVEVSX0NUUkwwX1FVRVVFMF9BUFJfTUVURVJfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfUE9SVDNfQVBSX01FVEVSX0NUUkwxICAgIDB4MDNiOQorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUM19BUFJfTUVURVJfQ1RSTDFfUVVFVUU3X0FQUl9NRVRFUl9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUM19BUFJfTUVURVJfQ1RSTDFfUVVFVUU3X0FQUl9NRVRFUl9NQVNLICAgIDB4MUMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQzX0FQUl9NRVRFUl9DVFJMMV9RVUVVRTZfQVBSX01FVEVSX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQzX0FQUl9NRVRFUl9DVFJMMV9RVUVVRTZfQVBSX01FVEVSX01BU0sgICAgMHgzOAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUM19BUFJfTUVURVJfQ1RSTDFfUVVFVUU1X0FQUl9NRVRFUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUM19BUFJfTUVURVJfQ1RSTDFfUVVFVUU1X0FQUl9NRVRFUl9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUNF9BUFJfTUVURVJfQ1RSTDAgICAgMHgwM2JjCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ0X0FQUl9NRVRFUl9DVFJMMF9RVUVVRTRfQVBSX01FVEVSX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUNF9BUFJfTUVURVJfQ1RSTDBfUVVFVUU0X0FQUl9NRVRFUl9NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUNF9BUFJfTUVURVJfQ1RSTDBfUVVFVUUzX0FQUl9NRVRFUl9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUNF9BUFJfTUVURVJfQ1RSTDBfUVVFVUUzX0FQUl9NRVRFUl9NQVNLICAgIDB4RTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ0X0FQUl9NRVRFUl9DVFJMMF9RVUVVRTJfQVBSX01FVEVSX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ0X0FQUl9NRVRFUl9DVFJMMF9RVUVVRTJfQVBSX01FVEVSX01BU0sgICAgMHgxQzAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDRfQVBSX01FVEVSX0NUUkwwX1FVRVVFMV9BUFJfTUVURVJfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDRfQVBSX01FVEVSX0NUUkwwX1FVRVVFMV9BUFJfTUVURVJfTUFTSyAgICAweDM4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ0X0FQUl9NRVRFUl9DVFJMMF9RVUVVRTBfQVBSX01FVEVSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ0X0FQUl9NRVRFUl9DVFJMMF9RVUVVRTBfQVBSX01FVEVSX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQ0X0FQUl9NRVRFUl9DVFJMMSAgICAweDAzYmQKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDRfQVBSX01FVEVSX0NUUkwxX1FVRVVFN19BUFJfTUVURVJfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDRfQVBSX01FVEVSX0NUUkwxX1FVRVVFN19BUFJfTUVURVJfTUFTSyAgICAweDFDMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUNF9BUFJfTUVURVJfQ1RSTDFfUVVFVUU2X0FQUl9NRVRFUl9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUNF9BUFJfTUVURVJfQ1RSTDFfUVVFVUU2X0FQUl9NRVRFUl9NQVNLICAgIDB4MzgKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDRfQVBSX01FVEVSX0NUUkwxX1FVRVVFNV9BUFJfTUVURVJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDRfQVBSX01FVEVSX0NUUkwxX1FVRVVFNV9BUFJfTUVURVJfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfUE9SVDVfQVBSX01FVEVSX0NUUkwwICAgIDB4MDNjMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUNV9BUFJfTUVURVJfQ1RSTDBfUVVFVUU0X0FQUl9NRVRFUl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDVfQVBSX01FVEVSX0NUUkwwX1FVRVVFNF9BUFJfTUVURVJfTUFTSyAgICAweDcwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDVfQVBSX01FVEVSX0NUUkwwX1FVRVVFM19BUFJfTUVURVJfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDVfQVBSX01FVEVSX0NUUkwwX1FVRVVFM19BUFJfTUVURVJfTUFTSyAgICAweEUwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUNV9BUFJfTUVURVJfQ1RSTDBfUVVFVUUyX0FQUl9NRVRFUl9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUNV9BUFJfTUVURVJfQ1RSTDBfUVVFVUUyX0FQUl9NRVRFUl9NQVNLICAgIDB4MUMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ1X0FQUl9NRVRFUl9DVFJMMF9RVUVVRTFfQVBSX01FVEVSX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ1X0FQUl9NRVRFUl9DVFJMMF9RVUVVRTFfQVBSX01FVEVSX01BU0sgICAgMHgzOAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUNV9BUFJfTUVURVJfQ1RSTDBfUVVFVUUwX0FQUl9NRVRFUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUNV9BUFJfTUVURVJfQ1RSTDBfUVVFVUUwX0FQUl9NRVRFUl9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUNV9BUFJfTUVURVJfQ1RSTDEgICAgMHgwM2MxCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ1X0FQUl9NRVRFUl9DVFJMMV9RVUVVRTdfQVBSX01FVEVSX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ1X0FQUl9NRVRFUl9DVFJMMV9RVUVVRTdfQVBSX01FVEVSX01BU0sgICAgMHgxQzAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDVfQVBSX01FVEVSX0NUUkwxX1FVRVVFNl9BUFJfTUVURVJfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDVfQVBSX01FVEVSX0NUUkwxX1FVRVVFNl9BUFJfTUVURVJfTUFTSyAgICAweDM4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ1X0FQUl9NRVRFUl9DVFJMMV9RVUVVRTVfQVBSX01FVEVSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ1X0FQUl9NRVRFUl9DVFJMMV9RVUVVRTVfQVBSX01FVEVSX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQ2X0FQUl9NRVRFUl9DVFJMMCAgICAweDAzYzQKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDZfQVBSX01FVEVSX0NUUkwwX1FVRVVFNF9BUFJfTUVURVJfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ2X0FQUl9NRVRFUl9DVFJMMF9RVUVVRTRfQVBSX01FVEVSX01BU0sgICAgMHg3MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ2X0FQUl9NRVRFUl9DVFJMMF9RVUVVRTNfQVBSX01FVEVSX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ2X0FQUl9NRVRFUl9DVFJMMF9RVUVVRTNfQVBSX01FVEVSX01BU0sgICAgMHhFMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDZfQVBSX01FVEVSX0NUUkwwX1FVRVVFMl9BUFJfTUVURVJfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDZfQVBSX01FVEVSX0NUUkwwX1FVRVVFMl9BUFJfTUVURVJfTUFTSyAgICAweDFDMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUNl9BUFJfTUVURVJfQ1RSTDBfUVVFVUUxX0FQUl9NRVRFUl9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUNl9BUFJfTUVURVJfQ1RSTDBfUVVFVUUxX0FQUl9NRVRFUl9NQVNLICAgIDB4MzgKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDZfQVBSX01FVEVSX0NUUkwwX1FVRVVFMF9BUFJfTUVURVJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDZfQVBSX01FVEVSX0NUUkwwX1FVRVVFMF9BUFJfTUVURVJfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfUE9SVDZfQVBSX01FVEVSX0NUUkwxICAgIDB4MDNjNQorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUNl9BUFJfTUVURVJfQ1RSTDFfUVVFVUU3X0FQUl9NRVRFUl9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUNl9BUFJfTUVURVJfQ1RSTDFfUVVFVUU3X0FQUl9NRVRFUl9NQVNLICAgIDB4MUMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ2X0FQUl9NRVRFUl9DVFJMMV9RVUVVRTZfQVBSX01FVEVSX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ2X0FQUl9NRVRFUl9DVFJMMV9RVUVVRTZfQVBSX01FVEVSX01BU0sgICAgMHgzOAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUNl9BUFJfTUVURVJfQ1RSTDFfUVVFVUU1X0FQUl9NRVRFUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUNl9BUFJfTUVURVJfQ1RSTDFfUVVFVUU1X0FQUl9NRVRFUl9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUN19BUFJfTUVURVJfQ1RSTDAgICAgMHgwM2M4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ3X0FQUl9NRVRFUl9DVFJMMF9RVUVVRTRfQVBSX01FVEVSX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUN19BUFJfTUVURVJfQ1RSTDBfUVVFVUU0X0FQUl9NRVRFUl9NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUN19BUFJfTUVURVJfQ1RSTDBfUVVFVUUzX0FQUl9NRVRFUl9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUN19BUFJfTUVURVJfQ1RSTDBfUVVFVUUzX0FQUl9NRVRFUl9NQVNLICAgIDB4RTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ3X0FQUl9NRVRFUl9DVFJMMF9RVUVVRTJfQVBSX01FVEVSX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ3X0FQUl9NRVRFUl9DVFJMMF9RVUVVRTJfQVBSX01FVEVSX01BU0sgICAgMHgxQzAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDdfQVBSX01FVEVSX0NUUkwwX1FVRVVFMV9BUFJfTUVURVJfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDdfQVBSX01FVEVSX0NUUkwwX1FVRVVFMV9BUFJfTUVURVJfTUFTSyAgICAweDM4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ3X0FQUl9NRVRFUl9DVFJMMF9RVUVVRTBfQVBSX01FVEVSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ3X0FQUl9NRVRFUl9DVFJMMF9RVUVVRTBfQVBSX01FVEVSX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQ3X0FQUl9NRVRFUl9DVFJMMSAgICAweDAzYzkKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDdfQVBSX01FVEVSX0NUUkwxX1FVRVVFN19BUFJfTUVURVJfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDdfQVBSX01FVEVSX0NUUkwxX1FVRVVFN19BUFJfTUVURVJfTUFTSyAgICAweDFDMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUN19BUFJfTUVURVJfQ1RSTDFfUVVFVUU2X0FQUl9NRVRFUl9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUN19BUFJfTUVURVJfQ1RSTDFfUVVFVUU2X0FQUl9NRVRFUl9NQVNLICAgIDB4MzgKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDdfQVBSX01FVEVSX0NUUkwxX1FVRVVFNV9BUFJfTUVURVJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDdfQVBSX01FVEVSX0NUUkwxX1FVRVVFNV9BUFJfTUVURVJfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfUE9SVDhfQVBSX01FVEVSX0NUUkwwICAgIDB4MDNjYQorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUOF9BUFJfTUVURVJfQ1RSTDBfUVVFVUU0X0FQUl9NRVRFUl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDhfQVBSX01FVEVSX0NUUkwwX1FVRVVFNF9BUFJfTUVURVJfTUFTSyAgICAweDcwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDhfQVBSX01FVEVSX0NUUkwwX1FVRVVFM19BUFJfTUVURVJfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDhfQVBSX01FVEVSX0NUUkwwX1FVRVVFM19BUFJfTUVURVJfTUFTSyAgICAweEUwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUOF9BUFJfTUVURVJfQ1RSTDBfUVVFVUUyX0FQUl9NRVRFUl9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUOF9BUFJfTUVURVJfQ1RSTDBfUVVFVUUyX0FQUl9NRVRFUl9NQVNLICAgIDB4MUMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ4X0FQUl9NRVRFUl9DVFJMMF9RVUVVRTFfQVBSX01FVEVSX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ4X0FQUl9NRVRFUl9DVFJMMF9RVUVVRTFfQVBSX01FVEVSX01BU0sgICAgMHgzOAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUOF9BUFJfTUVURVJfQ1RSTDBfUVVFVUUwX0FQUl9NRVRFUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUOF9BUFJfTUVURVJfQ1RSTDBfUVVFVUUwX0FQUl9NRVRFUl9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUOF9BUFJfTUVURVJfQ1RSTDEgICAgMHgwM2NiCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ4X0FQUl9NRVRFUl9DVFJMMV9RVUVVRTdfQVBSX01FVEVSX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ4X0FQUl9NRVRFUl9DVFJMMV9RVUVVRTdfQVBSX01FVEVSX01BU0sgICAgMHgxQzAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDhfQVBSX01FVEVSX0NUUkwxX1FVRVVFNl9BUFJfTUVURVJfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDhfQVBSX01FVEVSX0NUUkwxX1FVRVVFNl9BUFJfTUVURVJfTUFTSyAgICAweDM4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ4X0FQUl9NRVRFUl9DVFJMMV9RVUVVRTVfQVBSX01FVEVSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ4X0FQUl9NRVRFUl9DVFJMMV9RVUVVRTVfQVBSX01FVEVSX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQ5X0FQUl9NRVRFUl9DVFJMMCAgICAweDAzY2MKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDlfQVBSX01FVEVSX0NUUkwwX1FVRVVFNF9BUFJfTUVURVJfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ5X0FQUl9NRVRFUl9DVFJMMF9RVUVVRTRfQVBSX01FVEVSX01BU0sgICAgMHg3MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ5X0FQUl9NRVRFUl9DVFJMMF9RVUVVRTNfQVBSX01FVEVSX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ5X0FQUl9NRVRFUl9DVFJMMF9RVUVVRTNfQVBSX01FVEVSX01BU0sgICAgMHhFMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDlfQVBSX01FVEVSX0NUUkwwX1FVRVVFMl9BUFJfTUVURVJfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDlfQVBSX01FVEVSX0NUUkwwX1FVRVVFMl9BUFJfTUVURVJfTUFTSyAgICAweDFDMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUOV9BUFJfTUVURVJfQ1RSTDBfUVVFVUUxX0FQUl9NRVRFUl9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUOV9BUFJfTUVURVJfQ1RSTDBfUVVFVUUxX0FQUl9NRVRFUl9NQVNLICAgIDB4MzgKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDlfQVBSX01FVEVSX0NUUkwwX1FVRVVFMF9BUFJfTUVURVJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDlfQVBSX01FVEVSX0NUUkwwX1FVRVVFMF9BUFJfTUVURVJfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfUE9SVDlfQVBSX01FVEVSX0NUUkwxICAgIDB4MDNjZAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUOV9BUFJfTUVURVJfQ1RSTDFfUVVFVUU3X0FQUl9NRVRFUl9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUOV9BUFJfTUVURVJfQ1RSTDFfUVVFVUU3X0FQUl9NRVRFUl9NQVNLICAgIDB4MUMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ5X0FQUl9NRVRFUl9DVFJMMV9RVUVVRTZfQVBSX01FVEVSX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQ5X0FQUl9NRVRFUl9DVFJMMV9RVUVVRTZfQVBSX01FVEVSX01BU0sgICAgMHgzOAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUOV9BUFJfTUVURVJfQ1RSTDFfUVVFVUU1X0FQUl9NRVRFUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUOV9BUFJfTUVURVJfQ1RSTDFfUVVFVUU1X0FQUl9NRVRFUl9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0hFRFVMRV9QT1JUMTBfQVBSX01FVEVSX0NUUkwwICAgIDB4MDNjZQorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMTBfQVBSX01FVEVSX0NUUkwwX1FVRVVFNF9BUFJfTUVURVJfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQxMF9BUFJfTUVURVJfQ1RSTDBfUVVFVUU0X0FQUl9NRVRFUl9NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMTBfQVBSX01FVEVSX0NUUkwwX1FVRVVFM19BUFJfTUVURVJfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDEwX0FQUl9NRVRFUl9DVFJMMF9RVUVVRTNfQVBSX01FVEVSX01BU0sgICAgMHhFMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDEwX0FQUl9NRVRFUl9DVFJMMF9RVUVVRTJfQVBSX01FVEVSX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQxMF9BUFJfTUVURVJfQ1RSTDBfUVVFVUUyX0FQUl9NRVRFUl9NQVNLICAgIDB4MUMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQxMF9BUFJfTUVURVJfQ1RSTDBfUVVFVUUxX0FQUl9NRVRFUl9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMTBfQVBSX01FVEVSX0NUUkwwX1FVRVVFMV9BUFJfTUVURVJfTUFTSyAgICAweDM4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQxMF9BUFJfTUVURVJfQ1RSTDBfUVVFVUUwX0FQUl9NRVRFUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMTBfQVBSX01FVEVSX0NUUkwwX1FVRVVFMF9BUFJfTUVURVJfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0NIRURVTEVfUE9SVDEwX0FQUl9NRVRFUl9DVFJMMSAgICAweDAzY2YKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NIRURVTEVfUE9SVDEwX0FQUl9NRVRFUl9DVFJMMV9RVUVVRTdfQVBSX01FVEVSX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQxMF9BUFJfTUVURVJfQ1RSTDFfUVVFVUU3X0FQUl9NRVRFUl9NQVNLICAgIDB4MUMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQxMF9BUFJfTUVURVJfQ1RSTDFfUVVFVUU2X0FQUl9NRVRFUl9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMTBfQVBSX01FVEVSX0NUUkwxX1FVRVVFNl9BUFJfTUVURVJfTUFTSyAgICAweDM4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NDSEVEVUxFX1BPUlQxMF9BUFJfTUVURVJfQ1RSTDFfUVVFVUU1X0FQUl9NRVRFUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUMTBfQVBSX01FVEVSX0NUUkwxX1FVRVVFNV9BUFJfTUVURVJfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTElORV9SQVRFXzFHX0wgICAgMHgwM2VjCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0xJTkVfUkFURV8xR19IICAgIDB4MDNlZAorI2RlZmluZSAgICBSVEw4MzY3Q19MSU5FX1JBVEVfMUdfSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19MSU5FX1JBVEVfMUdfSF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19MSU5FX1JBVEVfMTAwX0wgICAgMHgwM2VlCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0xJTkVfUkFURV8xMDBfSCAgICAweDAzZWYKKyNkZWZpbmUgICAgUlRMODM2N0NfTElORV9SQVRFXzEwMF9IX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xJTkVfUkFURV8xMDBfSF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19MSU5FX1JBVEVfMTBfTCAgICAweDAzZjAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTElORV9SQVRFXzEwX0ggICAgMHgwM2YxCisjZGVmaW5lICAgIFJUTDgzNjdDX0xJTkVfUkFURV8xMF9IX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xJTkVfUkFURV8xMF9IX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RVTU1ZXzAzZjIgICAgMHgwM2YyCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RVTU1ZXzAzZjMgICAgMHgwM2YzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RVTU1ZXzAzZjQgICAgMHgwM2Y0CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RVTU1ZXzAzZjUgICAgMHgwM2Y1CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RVTU1ZXzAzZjYgICAgMHgwM2Y2CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0JZUEFTU19MSU5FX1JBVEUgICAgMHgwM2Y3CisjZGVmaW5lICAgIFJUTDgzNjdDX0JZUEFTU19QT1JUMTBfQ09OU1RSQUlOVF9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19CWVBBU1NfUE9SVDEwX0NPTlNUUkFJTlRfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX0JZUEFTU19QT1JUOV9DT05TVFJBSU5UX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0JZUEFTU19QT1JUOV9DT05TVFJBSU5UX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19CWVBBU1NfUE9SVDhfQ09OU1RSQUlOVF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19CWVBBU1NfUE9SVDhfQ09OU1RSQUlOVF9NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19CWVBBU1NfUE9SVDdfQ09OU1RSQUlOVF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19CWVBBU1NfUE9SVDdfQ09OU1RSQUlOVF9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19CWVBBU1NfUE9SVDZfQ09OU1RSQUlOVF9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19CWVBBU1NfUE9SVDZfQ09OU1RSQUlOVF9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19CWVBBU1NfUE9SVDVfQ09OU1RSQUlOVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19CWVBBU1NfUE9SVDVfQ09OU1RSQUlOVF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19MSU5FX1JBVEVfNTAwX0ggICAgMHgwM2Y4CisjZGVmaW5lICAgIFJUTDgzNjdDX0xJTkVfUkFURV81MDBfSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19MSU5FX1JBVEVfNTAwX0hfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTElORV9SQVRFXzUwMF9MICAgIDB4MDNmOQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19MSU5FX1JBVEVfSFNHX0ggICAgMHgwM2ZhCisjZGVmaW5lICAgIFJUTDgzNjdDX0xJTkVfUkFURV9IU0dfSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19MSU5FX1JBVEVfSFNHX0hfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTElORV9SQVRFX0hTR19MICAgIDB4MDNmYgorCisvKiAoMTYnaDA1MDApdGFibGVfcmVnICovCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1RBQkxFX0FDQ0VTU19DVFJMICAgIDB4MDUwMAorI2RlZmluZSAgICBSVEw4MzY3Q19UQUJMRV9BQ0NFU1NfQ1RSTF9TUEFfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVEFCTEVfQUNDRVNTX0NUUkxfU1BBX01BU0sgICAgMHhGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNDRVNTX01FVEhPRF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0NFU1NfTUVUSE9EX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19DT01NQU5EX1RZUEVfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfQ09NTUFORF9UWVBFX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX1RBQkxFX1RZUEVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVEFCTEVfVFlQRV9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19UQUJMRV9BQ0NFU1NfQUREUiAgICAweDA1MDEKKyNkZWZpbmUgICAgUlRMODM2N0NfVEFCTEVfQUNDRVNTX0FERFJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVEFCTEVfQUNDRVNTX0FERFJfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVEFCTEVfTFVUX0FERFIgICAgMHgwNTAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FERFJFU1MyX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19BRERSRVNTMl9NQVNLICAgIDB4NDAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19UQUJMRV9MVVRfQUREUl9CVVNZX0ZMQUdfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1RBQkxFX0xVVF9BRERSX0JVU1lfRkxBR19NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19ISVRfU1RBVFVTX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19ISVRfU1RBVFVTX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1RBQkxFX0xVVF9BRERSX1RZUEVfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX1RBQkxFX0xVVF9BRERSX1RZUEVfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19UQUJMRV9MVVRfQUREUl9BRERSRVNTX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1RBQkxFX0xVVF9BRERSX0FERFJFU1NfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19IU0FfSFNCX0xBVENIICAgIDB4MDUwMworI2RlZmluZSAgICBSVEw4MzY3Q19MQVRDSF9BTFdBWVNfT0ZGU0VUICAgIDE1CisjZGVmaW5lICAgIFJUTDgzNjdDX0xBVENIX0FMV0FZU19NQVNLICAgIDB4ODAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19MQVRDSF9GSVJTVF9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfTEFUQ0hfRklSU1RfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1BBX0VOX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TUEFfRU5fTUFTSyAgICAweDIwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRk9SV0FSRF9FTl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfRk9SV0FSRF9FTl9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19SRUFTT05fRU5fT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFQVNPTl9FTl9NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0hTQV9IU0JfTEFUQ0hfU1BBX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0hTQV9IU0JfTEFUQ0hfU1BBX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRk9SV0FSRF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19GT1JXQVJEX01BU0sgICAgMHhDMAorI2RlZmluZSAgICBSVEw4MzY3Q19SRUFTT05fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVBU09OX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19IU0FfSFNCX0xBVENIMiAgICAweDA1MDQKKyNkZWZpbmUgICAgUlRMODM2N0NfSFNBX0hTQl9MQVRDSDJfUmVzZXJ2ZWRfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfSFNBX0hTQl9MQVRDSDJfUmVzZXJ2ZWRfTUFTSyAgICAweEZGRkUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1BBMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TUEEyX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1RBQkxFX1dSSVRFX0RBVEEwICAgIDB4MDUxMAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19UQUJMRV9XUklURV9EQVRBMSAgICAweDA1MTEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVEFCTEVfV1JJVEVfREFUQTIgICAgMHgwNTEyCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1RBQkxFX1dSSVRFX0RBVEEzICAgIDB4MDUxMworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19UQUJMRV9XUklURV9EQVRBNCAgICAweDA1MTQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVEFCTEVfV1JJVEVfREFUQTUgICAgMHgwNTE1CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1RBQkxFX1dSSVRFX0RBVEE2ICAgIDB4MDUxNgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19UQUJMRV9XUklURV9EQVRBNyAgICAweDA1MTcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVEFCTEVfV1JJVEVfREFUQTggICAgMHgwNTE4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1RBQkxFX1dSSVRFX0RBVEE5ICAgIDB4MDUxOQorI2RlZmluZSAgICBSVEw4MzY3Q19UQUJMRV9XUklURV9EQVRBOV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19UQUJMRV9XUklURV9EQVRBOV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19UQUJMRV9SRUFEX0RBVEEwICAgIDB4MDUyMAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19UQUJMRV9SRUFEX0RBVEExICAgIDB4MDUyMQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19UQUJMRV9SRUFEX0RBVEEyICAgIDB4MDUyMgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19UQUJMRV9SRUFEX0RBVEEzICAgIDB4MDUyMworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19UQUJMRV9SRUFEX0RBVEE0ICAgIDB4MDUyNAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19UQUJMRV9SRUFEX0RBVEE1ICAgIDB4MDUyNQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19UQUJMRV9SRUFEX0RBVEE2ICAgIDB4MDUyNgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19UQUJMRV9SRUFEX0RBVEE3ICAgIDB4MDUyNworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19UQUJMRV9SRUFEX0RBVEE4ICAgIDB4MDUyOAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19UQUJMRV9SRUFEX0RBVEE5ICAgIDB4MDUyOQorI2RlZmluZSAgICBSVEw4MzY3Q19UQUJMRV9SRUFEX0RBVEE5X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1RBQkxFX1JFQURfREFUQTlfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVEJMX0RVTU1ZMDAgICAgMHgwNTUwCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1RCTF9EVU1NWTAxICAgIDB4MDU1MQorCisvKiAoMTYnaDA2MDApYWNsX3JlZyAqLworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfUlVMRV9URU1QTEFURTBfQ1RSTDAgICAgMHgwNjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9SVUxFX1RFTVBMQVRFMF9DVFJMMF9GSUVMRDFfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1JVTEVfVEVNUExBVEUwX0NUUkwwX0ZJRUxEMV9NQVNLICAgIDB4N0YwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfUlVMRV9URU1QTEFURTBfQ1RSTDBfRklFTEQwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9SVUxFX1RFTVBMQVRFMF9DVFJMMF9GSUVMRDBfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9SVUxFX1RFTVBMQVRFMF9DVFJMMSAgICAweDA2MDEKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1JVTEVfVEVNUExBVEUwX0NUUkwxX0ZJRUxEM19PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfUlVMRV9URU1QTEFURTBfQ1RSTDFfRklFTEQzX01BU0sgICAgMHg3RjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9SVUxFX1RFTVBMQVRFMF9DVFJMMV9GSUVMRDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1JVTEVfVEVNUExBVEUwX0NUUkwxX0ZJRUxEMl9NQVNLICAgIDB4N0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX1JVTEVfVEVNUExBVEUwX0NUUkwyICAgIDB4MDYwMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfUlVMRV9URU1QTEFURTBfQ1RSTDJfRklFTEQ1X09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9SVUxFX1RFTVBMQVRFMF9DVFJMMl9GSUVMRDVfTUFTSyAgICAweDdGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1JVTEVfVEVNUExBVEUwX0NUUkwyX0ZJRUxENF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfUlVMRV9URU1QTEFURTBfQ1RSTDJfRklFTEQ0X01BU0sgICAgMHg3RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfUlVMRV9URU1QTEFURTBfQ1RSTDMgICAgMHgwNjAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9SVUxFX1RFTVBMQVRFMF9DVFJMM19GSUVMRDdfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1JVTEVfVEVNUExBVEUwX0NUUkwzX0ZJRUxEN19NQVNLICAgIDB4N0YwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfUlVMRV9URU1QTEFURTBfQ1RSTDNfRklFTEQ2X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9SVUxFX1RFTVBMQVRFMF9DVFJMM19GSUVMRDZfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9SVUxFX1RFTVBMQVRFMV9DVFJMMCAgICAweDA2MDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1JVTEVfVEVNUExBVEUxX0NUUkwwX0ZJRUxEMV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfUlVMRV9URU1QTEFURTFfQ1RSTDBfRklFTEQxX01BU0sgICAgMHg3RjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9SVUxFX1RFTVBMQVRFMV9DVFJMMF9GSUVMRDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1JVTEVfVEVNUExBVEUxX0NUUkwwX0ZJRUxEMF9NQVNLICAgIDB4N0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX1JVTEVfVEVNUExBVEUxX0NUUkwxICAgIDB4MDYwNQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfUlVMRV9URU1QTEFURTFfQ1RSTDFfRklFTEQzX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9SVUxFX1RFTVBMQVRFMV9DVFJMMV9GSUVMRDNfTUFTSyAgICAweDdGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1JVTEVfVEVNUExBVEUxX0NUUkwxX0ZJRUxEMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfUlVMRV9URU1QTEFURTFfQ1RSTDFfRklFTEQyX01BU0sgICAgMHg3RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfUlVMRV9URU1QTEFURTFfQ1RSTDIgICAgMHgwNjA2CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9SVUxFX1RFTVBMQVRFMV9DVFJMMl9GSUVMRDVfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1JVTEVfVEVNUExBVEUxX0NUUkwyX0ZJRUxENV9NQVNLICAgIDB4N0YwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfUlVMRV9URU1QTEFURTFfQ1RSTDJfRklFTEQ0X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9SVUxFX1RFTVBMQVRFMV9DVFJMMl9GSUVMRDRfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9SVUxFX1RFTVBMQVRFMV9DVFJMMyAgICAweDA2MDcKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1JVTEVfVEVNUExBVEUxX0NUUkwzX0ZJRUxEN19PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfUlVMRV9URU1QTEFURTFfQ1RSTDNfRklFTEQ3X01BU0sgICAgMHg3RjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9SVUxFX1RFTVBMQVRFMV9DVFJMM19GSUVMRDZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1JVTEVfVEVNUExBVEUxX0NUUkwzX0ZJRUxENl9NQVNLICAgIDB4N0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX1JVTEVfVEVNUExBVEUyX0NUUkwwICAgIDB4MDYwOAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfUlVMRV9URU1QTEFURTJfQ1RSTDBfRklFTEQxX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9SVUxFX1RFTVBMQVRFMl9DVFJMMF9GSUVMRDFfTUFTSyAgICAweDdGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1JVTEVfVEVNUExBVEUyX0NUUkwwX0ZJRUxEMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfUlVMRV9URU1QTEFURTJfQ1RSTDBfRklFTEQwX01BU0sgICAgMHg3RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfUlVMRV9URU1QTEFURTJfQ1RSTDEgICAgMHgwNjA5CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9SVUxFX1RFTVBMQVRFMl9DVFJMMV9GSUVMRDNfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1JVTEVfVEVNUExBVEUyX0NUUkwxX0ZJRUxEM19NQVNLICAgIDB4N0YwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfUlVMRV9URU1QTEFURTJfQ1RSTDFfRklFTEQyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9SVUxFX1RFTVBMQVRFMl9DVFJMMV9GSUVMRDJfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9SVUxFX1RFTVBMQVRFMl9DVFJMMiAgICAweDA2MGEKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1JVTEVfVEVNUExBVEUyX0NUUkwyX0ZJRUxENV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfUlVMRV9URU1QTEFURTJfQ1RSTDJfRklFTEQ1X01BU0sgICAgMHg3RjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9SVUxFX1RFTVBMQVRFMl9DVFJMMl9GSUVMRDRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1JVTEVfVEVNUExBVEUyX0NUUkwyX0ZJRUxENF9NQVNLICAgIDB4N0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX1JVTEVfVEVNUExBVEUyX0NUUkwzICAgIDB4MDYwYgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfUlVMRV9URU1QTEFURTJfQ1RSTDNfRklFTEQ3X09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9SVUxFX1RFTVBMQVRFMl9DVFJMM19GSUVMRDdfTUFTSyAgICAweDdGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1JVTEVfVEVNUExBVEUyX0NUUkwzX0ZJRUxENl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfUlVMRV9URU1QTEFURTJfQ1RSTDNfRklFTEQ2X01BU0sgICAgMHg3RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfUlVMRV9URU1QTEFURTNfQ1RSTDAgICAgMHgwNjBjCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9SVUxFX1RFTVBMQVRFM19DVFJMMF9GSUVMRDFfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1JVTEVfVEVNUExBVEUzX0NUUkwwX0ZJRUxEMV9NQVNLICAgIDB4N0YwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfUlVMRV9URU1QTEFURTNfQ1RSTDBfRklFTEQwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9SVUxFX1RFTVBMQVRFM19DVFJMMF9GSUVMRDBfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9SVUxFX1RFTVBMQVRFM19DVFJMMSAgICAweDA2MGQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1JVTEVfVEVNUExBVEUzX0NUUkwxX0ZJRUxEM19PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfUlVMRV9URU1QTEFURTNfQ1RSTDFfRklFTEQzX01BU0sgICAgMHg3RjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9SVUxFX1RFTVBMQVRFM19DVFJMMV9GSUVMRDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1JVTEVfVEVNUExBVEUzX0NUUkwxX0ZJRUxEMl9NQVNLICAgIDB4N0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX1JVTEVfVEVNUExBVEUzX0NUUkwyICAgIDB4MDYwZQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfUlVMRV9URU1QTEFURTNfQ1RSTDJfRklFTEQ1X09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9SVUxFX1RFTVBMQVRFM19DVFJMMl9GSUVMRDVfTUFTSyAgICAweDdGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1JVTEVfVEVNUExBVEUzX0NUUkwyX0ZJRUxENF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfUlVMRV9URU1QTEFURTNfQ1RSTDJfRklFTEQ0X01BU0sgICAgMHg3RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfUlVMRV9URU1QTEFURTNfQ1RSTDMgICAgMHgwNjBmCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9SVUxFX1RFTVBMQVRFM19DVFJMM19GSUVMRDdfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1JVTEVfVEVNUExBVEUzX0NUUkwzX0ZJRUxEN19NQVNLICAgIDB4N0YwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfUlVMRV9URU1QTEFURTNfQ1RSTDNfRklFTEQ2X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9SVUxFX1RFTVBMQVRFM19DVFJMM19GSUVMRDZfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9SVUxFX1RFTVBMQVRFNF9DVFJMMCAgICAweDA2MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1JVTEVfVEVNUExBVEU0X0NUUkwwX0ZJRUxEMV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfUlVMRV9URU1QTEFURTRfQ1RSTDBfRklFTEQxX01BU0sgICAgMHg3RjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9SVUxFX1RFTVBMQVRFNF9DVFJMMF9GSUVMRDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1JVTEVfVEVNUExBVEU0X0NUUkwwX0ZJRUxEMF9NQVNLICAgIDB4N0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX1JVTEVfVEVNUExBVEU0X0NUUkwxICAgIDB4MDYxMQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfUlVMRV9URU1QTEFURTRfQ1RSTDFfRklFTEQzX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9SVUxFX1RFTVBMQVRFNF9DVFJMMV9GSUVMRDNfTUFTSyAgICAweDdGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1JVTEVfVEVNUExBVEU0X0NUUkwxX0ZJRUxEMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfUlVMRV9URU1QTEFURTRfQ1RSTDFfRklFTEQyX01BU0sgICAgMHg3RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfUlVMRV9URU1QTEFURTRfQ1RSTDIgICAgMHgwNjEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9SVUxFX1RFTVBMQVRFNF9DVFJMMl9GSUVMRDVfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1JVTEVfVEVNUExBVEU0X0NUUkwyX0ZJRUxENV9NQVNLICAgIDB4N0YwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfUlVMRV9URU1QTEFURTRfQ1RSTDJfRklFTEQ0X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9SVUxFX1RFTVBMQVRFNF9DVFJMMl9GSUVMRDRfTUFTSyAgICAweDdGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9SVUxFX1RFTVBMQVRFNF9DVFJMMyAgICAweDA2MTMKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1JVTEVfVEVNUExBVEU0X0NUUkwzX0ZJRUxEN19PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfUlVMRV9URU1QTEFURTRfQ1RSTDNfRklFTEQ3X01BU0sgICAgMHg3RjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9SVUxFX1RFTVBMQVRFNF9DVFJMM19GSUVMRDZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1JVTEVfVEVNUExBVEU0X0NUUkwzX0ZJRUxENl9NQVNLICAgIDB4N0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0FDVElPTl9DVFJMMCAgICAweDA2MTQKKyNkZWZpbmUgICAgUlRMODM2N0NfT1AxX05PVF9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfT1AxX05PVF9NQVNLICAgIDB4NDAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxX0dQSU9fT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDFfR1BJT19NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxX0ZPUldBUkRfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDFfRk9SV0FSRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxX1BPTElDSU5HX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxX1BPTElDSU5HX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMV9QUklPUklUWV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMV9QUklPUklUWV9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDFfU1ZJRF9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxX1NWSURfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxX0NWSURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMV9DVklEX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfT1AwX05PVF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19PUDBfTk9UX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QwX0dQSU9fT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMF9HUElPX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QwX0ZPUldBUkRfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMF9GT1JXQVJEX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QwX1BPTElDSU5HX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDBfUE9MSUNJTkdfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMF9QUklPUklUWV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QwX1BSSU9SSVRZX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDBfU1ZJRF9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QwX1NWSURfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMF9DVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDBfQ1ZJRF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfQUNUSU9OX0NUUkwxICAgIDB4MDYxNQorI2RlZmluZSAgICBSVEw4MzY3Q19PUDNfTk9UX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDNfTk9UX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDNfR1BJT19PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUM19HUElPX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDNfRk9SV0FSRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUM19GT1JXQVJEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDNfUE9MSUNJTkdfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDNfUE9MSUNJTkdfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzX1BSSU9SSVRZX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzX1BSSU9SSVRZX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUM19TVklEX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDNfU1ZJRF9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDNfQ1ZJRF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzX0NWSURfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDJfTk9UX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX09QMl9OT1RfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDJfR1BJT19PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyX0dQSU9fTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDJfRk9SV0FSRF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyX0ZPUldBUkRfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDJfUE9MSUNJTkdfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMl9QT0xJQ0lOR19NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyX1BSSU9SSVRZX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDJfUFJJT1JJVFlfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMl9TVklEX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDJfU1ZJRF9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyX0NWSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMl9DVklEX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9BQ1RJT05fQ1RSTDIgICAgMHgwNjE2CisjZGVmaW5lICAgIFJUTDgzNjdDX09QNV9OT1RfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX09QNV9OT1RfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNV9HUElPX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1X0dQSU9fTUFTSyAgICAweDIwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNV9GT1JXQVJEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1X0ZPUldBUkRfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNV9QT0xJQ0lOR19PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNV9QT0xJQ0lOR19NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDVfUFJJT1JJVFlfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDVfUFJJT1JJVFlfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1X1NWSURfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNV9TVklEX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNV9DVklEX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDVfQ1ZJRF9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX09QNF9OT1RfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A0X05PVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNF9HUElPX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDRfR1BJT19NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNF9GT1JXQVJEX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDRfRk9SV0FSRF9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNF9QT0xJQ0lOR19PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0X1BPTElDSU5HX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDRfUFJJT1JJVFlfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNF9QUklPUklUWV9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0X1NWSURfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNF9TVklEX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDRfQ1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0X0NWSURfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0FDVElPTl9DVFJMMyAgICAweDA2MTcKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A3X05PVF9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A3X05PVF9NQVNLICAgIDB4NDAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3X0dQSU9fT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDdfR1BJT19NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3X0ZPUldBUkRfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDdfRk9SV0FSRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3X1BPTElDSU5HX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3X1BPTElDSU5HX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUN19QUklPUklUWV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUN19QUklPUklUWV9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDdfU1ZJRF9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3X1NWSURfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3X0NWSURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUN19DVklEX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A2X05PVF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19PUDZfTk9UX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2X0dQSU9fT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNl9HUElPX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2X0ZPUldBUkRfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNl9GT1JXQVJEX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2X1BPTElDSU5HX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDZfUE9MSUNJTkdfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNl9QUklPUklUWV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2X1BSSU9SSVRZX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDZfU1ZJRF9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2X1NWSURfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNl9DVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDZfQ1ZJRF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfQUNUSU9OX0NUUkw0ICAgIDB4MDYxOAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDlfTk9UX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDlfTk9UX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDlfR1BJT19PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUOV9HUElPX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDlfRk9SV0FSRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUOV9GT1JXQVJEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDlfUE9MSUNJTkdfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDlfUE9MSUNJTkdfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q5X1BSSU9SSVRZX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q5X1BSSU9SSVRZX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUOV9TVklEX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDlfU1ZJRF9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDlfQ1ZJRF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q5X0NWSURfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDhfTk9UX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX09QOF9OT1RfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDhfR1BJT19PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4X0dQSU9fTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDhfRk9SV0FSRF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4X0ZPUldBUkRfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDhfUE9MSUNJTkdfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUOF9QT0xJQ0lOR19NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4X1BSSU9SSVRZX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDhfUFJJT1JJVFlfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUOF9TVklEX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDhfU1ZJRF9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4X0NWSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUOF9DVklEX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9BQ1RJT05fQ1RSTDUgICAgMHgwNjE5CisjZGVmaW5lICAgIFJUTDgzNjdDX09QMTFfTk9UX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDExX05PVF9NQVNLICAgIDB4NDAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxMV9HUElPX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxMV9HUElPX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDExX0ZPUldBUkRfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDExX0ZPUldBUkRfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMTFfUE9MSUNJTkdfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDExX1BPTElDSU5HX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMTFfUFJJT1JJVFlfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDExX1BSSU9SSVRZX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMTFfU1ZJRF9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxMV9TVklEX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMTFfQ1ZJRF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxMV9DVklEX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfT1AxMF9OT1RfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfT1AxMF9OT1RfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDEwX0dQSU9fT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMTBfR1BJT19NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMTBfRk9SV0FSRF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxMF9GT1JXQVJEX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxMF9QT0xJQ0lOR19PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxMF9QT0xJQ0lOR19NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxMF9QUklPUklUWV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxMF9QUklPUklUWV9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxMF9TVklEX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDEwX1NWSURfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMTBfQ1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxMF9DVklEX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9BQ1RJT05fQ1RSTDYgICAgMHgwNjFhCisjZGVmaW5lICAgIFJUTDgzNjdDX09QMTNfTk9UX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDEzX05PVF9NQVNLICAgIDB4NDAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxM19HUElPX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxM19HUElPX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDEzX0ZPUldBUkRfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDEzX0ZPUldBUkRfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMTNfUE9MSUNJTkdfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDEzX1BPTElDSU5HX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMTNfUFJJT1JJVFlfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDEzX1BSSU9SSVRZX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMTNfU1ZJRF9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxM19TVklEX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMTNfQ1ZJRF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxM19DVklEX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfT1AxMl9OT1RfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfT1AxMl9OT1RfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDEyX0dQSU9fT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMTJfR1BJT19NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMTJfRk9SV0FSRF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxMl9GT1JXQVJEX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxMl9QT0xJQ0lOR19PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxMl9QT0xJQ0lOR19NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxMl9QUklPUklUWV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxMl9QUklPUklUWV9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxMl9TVklEX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDEyX1NWSURfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMTJfQ1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxMl9DVklEX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9BQ1RJT05fQ1RSTDcgICAgMHgwNjFiCisjZGVmaW5lICAgIFJUTDgzNjdDX09QMTVfTk9UX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDE1X05PVF9NQVNLICAgIDB4NDAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxNV9HUElPX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxNV9HUElPX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDE1X0ZPUldBUkRfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDE1X0ZPUldBUkRfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMTVfUE9MSUNJTkdfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDE1X1BPTElDSU5HX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMTVfUFJJT1JJVFlfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDE1X1BSSU9SSVRZX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMTVfU1ZJRF9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxNV9TVklEX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMTVfQ1ZJRF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxNV9DVklEX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfT1AxNF9OT1RfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfT1AxNF9OT1RfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDE0X0dQSU9fT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMTRfR1BJT19NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMTRfRk9SV0FSRF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxNF9GT1JXQVJEX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxNF9QT0xJQ0lOR19PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxNF9QT0xJQ0lOR19NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxNF9QUklPUklUWV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxNF9QUklPUklUWV9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxNF9TVklEX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDE0X1NWSURfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMTRfQ1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxNF9DVklEX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9BQ1RJT05fQ1RSTDggICAgMHgwNjFjCisjZGVmaW5lICAgIFJUTDgzNjdDX09QMTdfTk9UX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDE3X05PVF9NQVNLICAgIDB4NDAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxN19HUElPX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxN19HUElPX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDE3X0ZPUldBUkRfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDE3X0ZPUldBUkRfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMTdfUE9MSUNJTkdfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDE3X1BPTElDSU5HX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMTdfUFJJT1JJVFlfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDE3X1BSSU9SSVRZX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMTdfU1ZJRF9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxN19TVklEX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMTdfQ1ZJRF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxN19DVklEX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfT1AxNl9OT1RfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfT1AxNl9OT1RfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDE2X0dQSU9fT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMTZfR1BJT19NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMTZfRk9SV0FSRF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxNl9GT1JXQVJEX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxNl9QT0xJQ0lOR19PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxNl9QT0xJQ0lOR19NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxNl9QUklPUklUWV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxNl9QUklPUklUWV9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxNl9TVklEX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDE2X1NWSURfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMTZfQ1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxNl9DVklEX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9BQ1RJT05fQ1RSTDkgICAgMHgwNjFkCisjZGVmaW5lICAgIFJUTDgzNjdDX09QMTlfTk9UX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDE5X05PVF9NQVNLICAgIDB4NDAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxOV9HUElPX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxOV9HUElPX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDE5X0ZPUldBUkRfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDE5X0ZPUldBUkRfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMTlfUE9MSUNJTkdfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDE5X1BPTElDSU5HX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMTlfUFJJT1JJVFlfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDE5X1BSSU9SSVRZX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMTlfU1ZJRF9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxOV9TVklEX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMTlfQ1ZJRF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxOV9DVklEX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfT1AxOF9OT1RfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfT1AxOF9OT1RfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDE4X0dQSU9fT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMThfR1BJT19NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMThfRk9SV0FSRF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxOF9GT1JXQVJEX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxOF9QT0xJQ0lOR19PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxOF9QT0xJQ0lOR19NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxOF9QUklPUklUWV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxOF9QUklPUklUWV9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxOF9TVklEX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDE4X1NWSURfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMThfQ1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QxOF9DVklEX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9BQ1RJT05fQ1RSTDEwICAgIDB4MDYxZQorI2RlZmluZSAgICBSVEw4MzY3Q19PUDIxX05PVF9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfT1AyMV9OT1RfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjFfR1BJT19PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjFfR1BJT19NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyMV9GT1JXQVJEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyMV9GT1JXQVJEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDIxX1BPTElDSU5HX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyMV9QT0xJQ0lOR19NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDIxX1BSSU9SSVRZX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyMV9QUklPUklUWV9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDIxX1NWSURfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjFfU1ZJRF9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDIxX0NWSURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjFfQ1ZJRF9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX09QMjBfTk9UX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX09QMjBfTk9UX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyMF9HUElPX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDIwX0dQSU9fTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDIwX0ZPUldBUkRfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjBfRk9SV0FSRF9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjBfUE9MSUNJTkdfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjBfUE9MSUNJTkdfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjBfUFJJT1JJVFlfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjBfUFJJT1JJVFlfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjBfU1ZJRF9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyMF9TVklEX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDIwX0NWSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjBfQ1ZJRF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfQUNUSU9OX0NUUkwxMSAgICAweDA2MWYKKyNkZWZpbmUgICAgUlRMODM2N0NfT1AyM19OT1RfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX09QMjNfTk9UX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDIzX0dQSU9fT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDIzX0dQSU9fTUFTSyAgICAweDIwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjNfRk9SV0FSRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjNfRk9SV0FSRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyM19QT0xJQ0lOR19PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjNfUE9MSUNJTkdfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyM19QUklPUklUWV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjNfUFJJT1JJVFlfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyM19TVklEX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDIzX1NWSURfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyM19DVklEX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDIzX0NWSURfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDIyX05PVF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19PUDIyX05PVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjJfR1BJT19PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyMl9HUElPX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyMl9GT1JXQVJEX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDIyX0ZPUldBUkRfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDIyX1BPTElDSU5HX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDIyX1BPTElDSU5HX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDIyX1BSSU9SSVRZX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDIyX1BSSU9SSVRZX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDIyX1NWSURfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjJfU1ZJRF9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyMl9DVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDIyX0NWSURfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0FDVElPTl9DVFJMMTIgICAgMHgwNjIwCisjZGVmaW5lICAgIFJUTDgzNjdDX09QMjVfTk9UX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDI1X05PVF9NQVNLICAgIDB4NDAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyNV9HUElPX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyNV9HUElPX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDI1X0ZPUldBUkRfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDI1X0ZPUldBUkRfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjVfUE9MSUNJTkdfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDI1X1BPTElDSU5HX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjVfUFJJT1JJVFlfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDI1X1BSSU9SSVRZX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjVfU1ZJRF9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyNV9TVklEX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjVfQ1ZJRF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyNV9DVklEX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfT1AyNF9OT1RfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfT1AyNF9OT1RfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDI0X0dQSU9fT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjRfR1BJT19NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjRfRk9SV0FSRF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyNF9GT1JXQVJEX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyNF9QT0xJQ0lOR19PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyNF9QT0xJQ0lOR19NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyNF9QUklPUklUWV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyNF9QUklPUklUWV9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyNF9TVklEX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDI0X1NWSURfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjRfQ1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyNF9DVklEX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9BQ1RJT05fQ1RSTDEzICAgIDB4MDYyMQorI2RlZmluZSAgICBSVEw4MzY3Q19PUDI3X05PVF9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfT1AyN19OT1RfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjdfR1BJT19PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjdfR1BJT19NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyN19GT1JXQVJEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyN19GT1JXQVJEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDI3X1BPTElDSU5HX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyN19QT0xJQ0lOR19NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDI3X1BSSU9SSVRZX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyN19QUklPUklUWV9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDI3X1NWSURfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjdfU1ZJRF9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDI3X0NWSURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjdfQ1ZJRF9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX09QMjZfTk9UX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX09QMjZfTk9UX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyNl9HUElPX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDI2X0dQSU9fTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDI2X0ZPUldBUkRfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjZfRk9SV0FSRF9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjZfUE9MSUNJTkdfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjZfUE9MSUNJTkdfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjZfUFJJT1JJVFlfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjZfUFJJT1JJVFlfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjZfU1ZJRF9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyNl9TVklEX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDI2X0NWSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjZfQ1ZJRF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfQUNUSU9OX0NUUkwxNCAgICAweDA2MjIKKyNkZWZpbmUgICAgUlRMODM2N0NfT1AyOV9OT1RfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX09QMjlfTk9UX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDI5X0dQSU9fT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDI5X0dQSU9fTUFTSyAgICAweDIwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjlfRk9SV0FSRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjlfRk9SV0FSRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyOV9QT0xJQ0lOR19PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjlfUE9MSUNJTkdfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyOV9QUklPUklUWV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjlfUFJJT1JJVFlfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyOV9TVklEX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDI5X1NWSURfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyOV9DVklEX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDI5X0NWSURfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDI4X05PVF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19PUDI4X05PVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjhfR1BJT19PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyOF9HUElPX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyOF9GT1JXQVJEX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDI4X0ZPUldBUkRfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDI4X1BPTElDSU5HX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDI4X1BPTElDSU5HX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDI4X1BSSU9SSVRZX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDI4X1BSSU9SSVRZX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDI4X1NWSURfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMjhfU1ZJRF9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QyOF9DVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDI4X0NWSURfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0FDVElPTl9DVFJMMTUgICAgMHgwNjIzCisjZGVmaW5lICAgIFJUTDgzNjdDX09QMzFfTk9UX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDMxX05PVF9NQVNLICAgIDB4NDAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzMV9HUElPX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzMV9HUElPX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDMxX0ZPUldBUkRfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDMxX0ZPUldBUkRfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzFfUE9MSUNJTkdfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDMxX1BPTElDSU5HX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzFfUFJJT1JJVFlfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDMxX1BSSU9SSVRZX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzFfU1ZJRF9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzMV9TVklEX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzFfQ1ZJRF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzMV9DVklEX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfT1AzMF9OT1RfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfT1AzMF9OT1RfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDMwX0dQSU9fT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzBfR1BJT19NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzBfRk9SV0FSRF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzMF9GT1JXQVJEX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzMF9QT0xJQ0lOR19PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzMF9QT0xJQ0lOR19NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzMF9QUklPUklUWV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzMF9QUklPUklUWV9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzMF9TVklEX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDMwX1NWSURfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzBfQ1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzMF9DVklEX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9BQ1RJT05fQ1RSTDE2ICAgIDB4MDYyNAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDMzX05PVF9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfT1AzM19OT1RfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzNfR1BJT19PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzNfR1BJT19NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzM19GT1JXQVJEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzM19GT1JXQVJEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDMzX1BPTElDSU5HX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzM19QT0xJQ0lOR19NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDMzX1BSSU9SSVRZX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzM19QUklPUklUWV9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDMzX1NWSURfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzNfU1ZJRF9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDMzX0NWSURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzNfQ1ZJRF9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX09QMzJfTk9UX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX09QMzJfTk9UX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzMl9HUElPX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDMyX0dQSU9fTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDMyX0ZPUldBUkRfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzJfRk9SV0FSRF9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzJfUE9MSUNJTkdfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzJfUE9MSUNJTkdfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzJfUFJJT1JJVFlfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzJfUFJJT1JJVFlfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzJfU1ZJRF9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzMl9TVklEX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDMyX0NWSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzJfQ1ZJRF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfQUNUSU9OX0NUUkwxNyAgICAweDA2MjUKKyNkZWZpbmUgICAgUlRMODM2N0NfT1AzNV9OT1RfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX09QMzVfTk9UX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDM1X0dQSU9fT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDM1X0dQSU9fTUFTSyAgICAweDIwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzVfRk9SV0FSRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzVfRk9SV0FSRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzNV9QT0xJQ0lOR19PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzVfUE9MSUNJTkdfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzNV9QUklPUklUWV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzVfUFJJT1JJVFlfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzNV9TVklEX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDM1X1NWSURfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzNV9DVklEX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDM1X0NWSURfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDM0X05PVF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19PUDM0X05PVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzRfR1BJT19PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzNF9HUElPX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzNF9GT1JXQVJEX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDM0X0ZPUldBUkRfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDM0X1BPTElDSU5HX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDM0X1BPTElDSU5HX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDM0X1BSSU9SSVRZX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDM0X1BSSU9SSVRZX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDM0X1NWSURfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzRfU1ZJRF9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzNF9DVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDM0X0NWSURfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0FDVElPTl9DVFJMMTggICAgMHgwNjI2CisjZGVmaW5lICAgIFJUTDgzNjdDX09QMzdfTk9UX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDM3X05PVF9NQVNLICAgIDB4NDAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzN19HUElPX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzN19HUElPX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDM3X0ZPUldBUkRfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDM3X0ZPUldBUkRfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzdfUE9MSUNJTkdfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDM3X1BPTElDSU5HX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzdfUFJJT1JJVFlfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDM3X1BSSU9SSVRZX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzdfU1ZJRF9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzN19TVklEX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzdfQ1ZJRF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzN19DVklEX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfT1AzNl9OT1RfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfT1AzNl9OT1RfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDM2X0dQSU9fT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzZfR1BJT19NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzZfRk9SV0FSRF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzNl9GT1JXQVJEX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzNl9QT0xJQ0lOR19PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzNl9QT0xJQ0lOR19NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzNl9QUklPUklUWV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzNl9QUklPUklUWV9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzNl9TVklEX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDM2X1NWSURfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzZfQ1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzNl9DVklEX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9BQ1RJT05fQ1RSTDE5ICAgIDB4MDYyNworI2RlZmluZSAgICBSVEw4MzY3Q19PUDM5X05PVF9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfT1AzOV9OT1RfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzlfR1BJT19PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzlfR1BJT19NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzOV9GT1JXQVJEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzOV9GT1JXQVJEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDM5X1BPTElDSU5HX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzOV9QT0xJQ0lOR19NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDM5X1BSSU9SSVRZX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzOV9QUklPUklUWV9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDM5X1NWSURfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzlfU1ZJRF9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDM5X0NWSURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzlfQ1ZJRF9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX09QMzhfTk9UX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX09QMzhfTk9UX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzOF9HUElPX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDM4X0dQSU9fTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDM4X0ZPUldBUkRfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzhfRk9SV0FSRF9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzhfUE9MSUNJTkdfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzhfUE9MSUNJTkdfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzhfUFJJT1JJVFlfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzhfUFJJT1JJVFlfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzhfU1ZJRF9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1QzOF9TVklEX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDM4X0NWSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUMzhfQ1ZJRF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfQUNUSU9OX0NUUkwyMCAgICAweDA2MjgKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A0MV9OT1RfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX09QNDFfTk9UX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQxX0dQSU9fT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQxX0dQSU9fTUFTSyAgICAweDIwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDFfRk9SV0FSRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDFfRk9SV0FSRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0MV9QT0xJQ0lOR19PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDFfUE9MSUNJTkdfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0MV9QUklPUklUWV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDFfUFJJT1JJVFlfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0MV9TVklEX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQxX1NWSURfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0MV9DVklEX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQxX0NWSURfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDQwX05PVF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19PUDQwX05PVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDBfR1BJT19PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0MF9HUElPX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0MF9GT1JXQVJEX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQwX0ZPUldBUkRfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQwX1BPTElDSU5HX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQwX1BPTElDSU5HX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQwX1BSSU9SSVRZX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQwX1BSSU9SSVRZX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQwX1NWSURfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDBfU1ZJRF9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0MF9DVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQwX0NWSURfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0FDVElPTl9DVFJMMjEgICAgMHgwNjI5CisjZGVmaW5lICAgIFJUTDgzNjdDX09QNDNfTk9UX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDQzX05PVF9NQVNLICAgIDB4NDAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0M19HUElPX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0M19HUElPX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQzX0ZPUldBUkRfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQzX0ZPUldBUkRfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDNfUE9MSUNJTkdfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQzX1BPTElDSU5HX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDNfUFJJT1JJVFlfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQzX1BSSU9SSVRZX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDNfU1ZJRF9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0M19TVklEX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDNfQ1ZJRF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0M19DVklEX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A0Ml9OT1RfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A0Ml9OT1RfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQyX0dQSU9fT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDJfR1BJT19NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDJfRk9SV0FSRF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0Ml9GT1JXQVJEX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0Ml9QT0xJQ0lOR19PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0Ml9QT0xJQ0lOR19NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0Ml9QUklPUklUWV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0Ml9QUklPUklUWV9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0Ml9TVklEX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQyX1NWSURfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDJfQ1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0Ml9DVklEX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9BQ1RJT05fQ1RSTDIyICAgIDB4MDYyYQorI2RlZmluZSAgICBSVEw4MzY3Q19PUDQ1X05PVF9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A0NV9OT1RfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDVfR1BJT19PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDVfR1BJT19NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0NV9GT1JXQVJEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0NV9GT1JXQVJEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQ1X1BPTElDSU5HX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0NV9QT0xJQ0lOR19NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQ1X1BSSU9SSVRZX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0NV9QUklPUklUWV9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQ1X1NWSURfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDVfU1ZJRF9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQ1X0NWSURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDVfQ1ZJRF9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX09QNDRfTk9UX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX09QNDRfTk9UX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0NF9HUElPX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQ0X0dQSU9fTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQ0X0ZPUldBUkRfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDRfRk9SV0FSRF9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDRfUE9MSUNJTkdfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDRfUE9MSUNJTkdfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDRfUFJJT1JJVFlfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDRfUFJJT1JJVFlfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDRfU1ZJRF9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0NF9TVklEX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQ0X0NWSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDRfQ1ZJRF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfQUNUSU9OX0NUUkwyMyAgICAweDA2MmIKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A0N19OT1RfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX09QNDdfTk9UX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQ3X0dQSU9fT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQ3X0dQSU9fTUFTSyAgICAweDIwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDdfRk9SV0FSRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDdfRk9SV0FSRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0N19QT0xJQ0lOR19PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDdfUE9MSUNJTkdfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0N19QUklPUklUWV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDdfUFJJT1JJVFlfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0N19TVklEX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQ3X1NWSURfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0N19DVklEX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQ3X0NWSURfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDQ2X05PVF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19PUDQ2X05PVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDZfR1BJT19PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0Nl9HUElPX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0Nl9GT1JXQVJEX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQ2X0ZPUldBUkRfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQ2X1BPTElDSU5HX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQ2X1BPTElDSU5HX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQ2X1BSSU9SSVRZX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQ2X1BSSU9SSVRZX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQ2X1NWSURfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDZfU1ZJRF9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0Nl9DVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQ2X0NWSURfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0FDVElPTl9DVFJMMjQgICAgMHgwNjJjCisjZGVmaW5lICAgIFJUTDgzNjdDX09QNDlfTk9UX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDQ5X05PVF9NQVNLICAgIDB4NDAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0OV9HUElPX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0OV9HUElPX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQ5X0ZPUldBUkRfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQ5X0ZPUldBUkRfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDlfUE9MSUNJTkdfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQ5X1BPTElDSU5HX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDlfUFJJT1JJVFlfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQ5X1BSSU9SSVRZX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDlfU1ZJRF9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0OV9TVklEX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDlfQ1ZJRF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0OV9DVklEX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A0OF9OT1RfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A0OF9OT1RfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQ4X0dQSU9fT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDhfR1BJT19NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDhfRk9SV0FSRF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0OF9GT1JXQVJEX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0OF9QT0xJQ0lOR19PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0OF9QT0xJQ0lOR19NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0OF9QUklPUklUWV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0OF9QUklPUklUWV9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0OF9TVklEX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDQ4X1NWSURfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNDhfQ1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q0OF9DVklEX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9BQ1RJT05fQ1RSTDI1ICAgIDB4MDYyZAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDUxX05PVF9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A1MV9OT1RfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTFfR1BJT19PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTFfR1BJT19NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1MV9GT1JXQVJEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1MV9GT1JXQVJEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDUxX1BPTElDSU5HX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1MV9QT0xJQ0lOR19NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDUxX1BSSU9SSVRZX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1MV9QUklPUklUWV9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDUxX1NWSURfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTFfU1ZJRF9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDUxX0NWSURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTFfQ1ZJRF9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX09QNTBfTk9UX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX09QNTBfTk9UX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1MF9HUElPX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDUwX0dQSU9fTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDUwX0ZPUldBUkRfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTBfRk9SV0FSRF9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTBfUE9MSUNJTkdfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTBfUE9MSUNJTkdfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTBfUFJJT1JJVFlfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTBfUFJJT1JJVFlfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTBfU1ZJRF9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1MF9TVklEX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDUwX0NWSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTBfQ1ZJRF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfQUNUSU9OX0NUUkwyNiAgICAweDA2MmUKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A1M19OT1RfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX09QNTNfTk9UX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDUzX0dQSU9fT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDUzX0dQSU9fTUFTSyAgICAweDIwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTNfRk9SV0FSRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTNfRk9SV0FSRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1M19QT0xJQ0lOR19PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTNfUE9MSUNJTkdfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1M19QUklPUklUWV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTNfUFJJT1JJVFlfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1M19TVklEX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDUzX1NWSURfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1M19DVklEX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDUzX0NWSURfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDUyX05PVF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19PUDUyX05PVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTJfR1BJT19PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1Ml9HUElPX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1Ml9GT1JXQVJEX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDUyX0ZPUldBUkRfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDUyX1BPTElDSU5HX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDUyX1BPTElDSU5HX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDUyX1BSSU9SSVRZX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDUyX1BSSU9SSVRZX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDUyX1NWSURfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTJfU1ZJRF9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1Ml9DVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDUyX0NWSURfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0FDVElPTl9DVFJMMjcgICAgMHgwNjJmCisjZGVmaW5lICAgIFJUTDgzNjdDX09QNTVfTk9UX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDU1X05PVF9NQVNLICAgIDB4NDAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1NV9HUElPX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1NV9HUElPX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDU1X0ZPUldBUkRfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDU1X0ZPUldBUkRfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTVfUE9MSUNJTkdfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDU1X1BPTElDSU5HX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTVfUFJJT1JJVFlfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDU1X1BSSU9SSVRZX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTVfU1ZJRF9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1NV9TVklEX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTVfQ1ZJRF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1NV9DVklEX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A1NF9OT1RfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A1NF9OT1RfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDU0X0dQSU9fT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTRfR1BJT19NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTRfRk9SV0FSRF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1NF9GT1JXQVJEX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1NF9QT0xJQ0lOR19PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1NF9QT0xJQ0lOR19NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1NF9QUklPUklUWV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1NF9QUklPUklUWV9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1NF9TVklEX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDU0X1NWSURfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTRfQ1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1NF9DVklEX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9BQ1RJT05fQ1RSTDI4ICAgIDB4MDYzMAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDU3X05PVF9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A1N19OT1RfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTdfR1BJT19PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTdfR1BJT19NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1N19GT1JXQVJEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1N19GT1JXQVJEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDU3X1BPTElDSU5HX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1N19QT0xJQ0lOR19NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDU3X1BSSU9SSVRZX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1N19QUklPUklUWV9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDU3X1NWSURfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTdfU1ZJRF9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDU3X0NWSURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTdfQ1ZJRF9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX09QNTZfTk9UX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX09QNTZfTk9UX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1Nl9HUElPX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDU2X0dQSU9fTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDU2X0ZPUldBUkRfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTZfRk9SV0FSRF9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTZfUE9MSUNJTkdfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTZfUE9MSUNJTkdfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTZfUFJJT1JJVFlfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTZfUFJJT1JJVFlfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTZfU1ZJRF9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1Nl9TVklEX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDU2X0NWSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTZfQ1ZJRF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfQUNUSU9OX0NUUkwyOSAgICAweDA2MzEKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A1OV9OT1RfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX09QNTlfTk9UX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDU5X0dQSU9fT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDU5X0dQSU9fTUFTSyAgICAweDIwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTlfRk9SV0FSRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTlfRk9SV0FSRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1OV9QT0xJQ0lOR19PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTlfUE9MSUNJTkdfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1OV9QUklPUklUWV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNTlfUFJJT1JJVFlfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1OV9TVklEX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDU5X1NWSURfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1OV9DVklEX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDU5X0NWSURfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDU4X05PVF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19PUDU4X05PVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNThfR1BJT19PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1OF9HUElPX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1OF9GT1JXQVJEX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDU4X0ZPUldBUkRfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDU4X1BPTElDSU5HX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDU4X1BPTElDSU5HX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDU4X1BSSU9SSVRZX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDU4X1BSSU9SSVRZX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDU4X1NWSURfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNThfU1ZJRF9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q1OF9DVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDU4X0NWSURfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0FDVElPTl9DVFJMMzAgICAgMHgwNjMyCisjZGVmaW5lICAgIFJUTDgzNjdDX09QNjFfTk9UX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDYxX05PVF9NQVNLICAgIDB4NDAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2MV9HUElPX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2MV9HUElPX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDYxX0ZPUldBUkRfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDYxX0ZPUldBUkRfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjFfUE9MSUNJTkdfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDYxX1BPTElDSU5HX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjFfUFJJT1JJVFlfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDYxX1BSSU9SSVRZX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjFfU1ZJRF9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2MV9TVklEX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjFfQ1ZJRF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2MV9DVklEX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A2MF9OT1RfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A2MF9OT1RfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDYwX0dQSU9fT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjBfR1BJT19NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjBfRk9SV0FSRF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2MF9GT1JXQVJEX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2MF9QT0xJQ0lOR19PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2MF9QT0xJQ0lOR19NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2MF9QUklPUklUWV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2MF9QUklPUklUWV9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2MF9TVklEX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDYwX1NWSURfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjBfQ1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2MF9DVklEX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9BQ1RJT05fQ1RSTDMxICAgIDB4MDYzMworI2RlZmluZSAgICBSVEw4MzY3Q19PUDYzX05PVF9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A2M19OT1RfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjNfR1BJT19PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjNfR1BJT19NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2M19GT1JXQVJEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2M19GT1JXQVJEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDYzX1BPTElDSU5HX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2M19QT0xJQ0lOR19NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDYzX1BSSU9SSVRZX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2M19QUklPUklUWV9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDYzX1NWSURfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjNfU1ZJRF9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDYzX0NWSURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjNfQ1ZJRF9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX09QNjJfTk9UX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX09QNjJfTk9UX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2Ml9HUElPX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDYyX0dQSU9fTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDYyX0ZPUldBUkRfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjJfRk9SV0FSRF9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjJfUE9MSUNJTkdfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjJfUE9MSUNJTkdfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjJfUFJJT1JJVFlfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjJfUFJJT1JJVFlfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjJfU1ZJRF9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2Ml9TVklEX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDYyX0NWSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjJfQ1ZJRF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZMF9DVFJMMCAgICAweDA2MzUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX1NEUE9SVF9SQU5HRV9FTlRSWTBfQ1RSTDEgICAgMHgwNjM2CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9TRFBPUlRfUkFOR0VfRU5UUlkwX0NUUkwyICAgIDB4MDYzNworI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZMF9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZMF9DVFJMMl9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZMV9DVFJMMCAgICAweDA2MzgKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX1NEUE9SVF9SQU5HRV9FTlRSWTFfQ1RSTDEgICAgMHgwNjM5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9TRFBPUlRfUkFOR0VfRU5UUlkxX0NUUkwyICAgIDB4MDYzYQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZMV9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZMV9DVFJMMl9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZMl9DVFJMMCAgICAweDA2M2IKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX1NEUE9SVF9SQU5HRV9FTlRSWTJfQ1RSTDEgICAgMHgwNjNjCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9TRFBPUlRfUkFOR0VfRU5UUlkyX0NUUkwyICAgIDB4MDYzZAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZMl9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZMl9DVFJMMl9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZM19DVFJMMCAgICAweDA2M2UKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX1NEUE9SVF9SQU5HRV9FTlRSWTNfQ1RSTDEgICAgMHgwNjNmCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9TRFBPUlRfUkFOR0VfRU5UUlkzX0NUUkwyICAgIDB4MDY0MAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZM19DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZM19DVFJMMl9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZNF9DVFJMMCAgICAweDA2NDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX1NEUE9SVF9SQU5HRV9FTlRSWTRfQ1RSTDEgICAgMHgwNjQyCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9TRFBPUlRfUkFOR0VfRU5UUlk0X0NUUkwyICAgIDB4MDY0MworI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZNF9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZNF9DVFJMMl9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZNV9DVFJMMCAgICAweDA2NDQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX1NEUE9SVF9SQU5HRV9FTlRSWTVfQ1RSTDEgICAgMHgwNjQ1CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9TRFBPUlRfUkFOR0VfRU5UUlk1X0NUUkwyICAgIDB4MDY0NgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZNV9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZNV9DVFJMMl9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZNl9DVFJMMCAgICAweDA2NDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX1NEUE9SVF9SQU5HRV9FTlRSWTZfQ1RSTDEgICAgMHgwNjQ4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9TRFBPUlRfUkFOR0VfRU5UUlk2X0NUUkwyICAgIDB4MDY0OQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZNl9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZNl9DVFJMMl9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZN19DVFJMMCAgICAweDA2NGEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX1NEUE9SVF9SQU5HRV9FTlRSWTdfQ1RSTDEgICAgMHgwNjRiCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9TRFBPUlRfUkFOR0VfRU5UUlk3X0NUUkwyICAgIDB4MDY0YworI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZN19DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZN19DVFJMMl9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZOF9DVFJMMCAgICAweDA2NGQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX1NEUE9SVF9SQU5HRV9FTlRSWThfQ1RSTDEgICAgMHgwNjRlCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9TRFBPUlRfUkFOR0VfRU5UUlk4X0NUUkwyICAgIDB4MDY0ZgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZOF9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZOF9DVFJMMl9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZOV9DVFJMMCAgICAweDA2NTAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX1NEUE9SVF9SQU5HRV9FTlRSWTlfQ1RSTDEgICAgMHgwNjUxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9TRFBPUlRfUkFOR0VfRU5UUlk5X0NUUkwyICAgIDB4MDY1MgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZOV9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZOV9DVFJMMl9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZMTBfQ1RSTDAgICAgMHgwNjUzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9TRFBPUlRfUkFOR0VfRU5UUlkxMF9DVFJMMSAgICAweDA2NTQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX1NEUE9SVF9SQU5HRV9FTlRSWTEwX0NUUkwyICAgIDB4MDY1NQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZMTBfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1NEUE9SVF9SQU5HRV9FTlRSWTEwX0NUUkwyX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9TRFBPUlRfUkFOR0VfRU5UUlkxMV9DVFJMMCAgICAweDA2NTYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX1NEUE9SVF9SQU5HRV9FTlRSWTExX0NUUkwxICAgIDB4MDY1NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZMTFfQ1RSTDIgICAgMHgwNjU4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9TRFBPUlRfUkFOR0VfRU5UUlkxMV9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZMTFfQ1RSTDJfTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX1NEUE9SVF9SQU5HRV9FTlRSWTEyX0NUUkwwICAgIDB4MDY1OQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZMTJfQ1RSTDEgICAgMHgwNjVhCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9TRFBPUlRfUkFOR0VfRU5UUlkxMl9DVFJMMiAgICAweDA2NWIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1NEUE9SVF9SQU5HRV9FTlRSWTEyX0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9TRFBPUlRfUkFOR0VfRU5UUlkxMl9DVFJMMl9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZMTNfQ1RSTDAgICAgMHgwNjVjCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9TRFBPUlRfUkFOR0VfRU5UUlkxM19DVFJMMSAgICAweDA2NWQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX1NEUE9SVF9SQU5HRV9FTlRSWTEzX0NUUkwyICAgIDB4MDY1ZQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZMTNfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1NEUE9SVF9SQU5HRV9FTlRSWTEzX0NUUkwyX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9TRFBPUlRfUkFOR0VfRU5UUlkxNF9DVFJMMCAgICAweDA2NWYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX1NEUE9SVF9SQU5HRV9FTlRSWTE0X0NUUkwxICAgIDB4MDY2MAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZMTRfQ1RSTDIgICAgMHgwNjYxCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9TRFBPUlRfUkFOR0VfRU5UUlkxNF9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZMTRfQ1RSTDJfTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX1NEUE9SVF9SQU5HRV9FTlRSWTE1X0NUUkwwICAgIDB4MDY2MgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZMTVfQ1RSTDEgICAgMHgwNjYzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9TRFBPUlRfUkFOR0VfRU5UUlkxNV9DVFJMMiAgICAweDA2NjQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1NEUE9SVF9SQU5HRV9FTlRSWTE1X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9TRFBPUlRfUkFOR0VfRU5UUlkxNV9DVFJMMl9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfVklEX1JBTkdFX0VOVFJZMF9DVFJMMCAgICAweDA2NjUKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1ZJRF9SQU5HRV9FTlRSWTBfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1ZJRF9SQU5HRV9FTlRSWTBfQ1RSTDBfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfVklEX1JBTkdFX0VOVFJZMF9DVFJMMSAgICAweDA2NjYKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1ZJRF9SQU5HRV9FTlRSWTBfQ1RSTDFfQ0hFQ0swX1RZUEVfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlkwX0NUUkwxX0NIRUNLMF9UWVBFX01BU0sgICAgMHgzMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlkwX0NUUkwxX0NIRUNLMF9ISUdIX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlkwX0NUUkwxX0NIRUNLMF9ISUdIX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX1ZJRF9SQU5HRV9FTlRSWTFfQ1RSTDAgICAgMHgwNjY3CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlkxX0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlkxX0NUUkwwX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX1ZJRF9SQU5HRV9FTlRSWTFfQ1RSTDEgICAgMHgwNjY4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlkxX0NUUkwxX0NIRUNLMV9UWVBFX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfVklEX1JBTkdFX0VOVFJZMV9DVFJMMV9DSEVDSzFfVFlQRV9NQVNLICAgIDB4MzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfVklEX1JBTkdFX0VOVFJZMV9DVFJMMV9DSEVDSzFfSElHSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfVklEX1JBTkdFX0VOVFJZMV9DVFJMMV9DSEVDSzFfSElHSF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9WSURfUkFOR0VfRU5UUlkyX0NUUkwwICAgIDB4MDY2OQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfVklEX1JBTkdFX0VOVFJZMl9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfVklEX1JBTkdFX0VOVFJZMl9DVFJMMF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9WSURfUkFOR0VfRU5UUlkyX0NUUkwxICAgIDB4MDY2YQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfVklEX1JBTkdFX0VOVFJZMl9DVFJMMV9DSEVDSzJfVFlQRV9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1ZJRF9SQU5HRV9FTlRSWTJfQ1RSTDFfQ0hFQ0syX1RZUEVfTUFTSyAgICAweDMwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1ZJRF9SQU5HRV9FTlRSWTJfQ1RSTDFfQ0hFQ0syX0hJR0hfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1ZJRF9SQU5HRV9FTlRSWTJfQ1RSTDFfQ0hFQ0syX0hJR0hfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfVklEX1JBTkdFX0VOVFJZM19DVFJMMCAgICAweDA2NmIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1ZJRF9SQU5HRV9FTlRSWTNfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1ZJRF9SQU5HRV9FTlRSWTNfQ1RSTDBfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfVklEX1JBTkdFX0VOVFJZM19DVFJMMSAgICAweDA2NmMKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1ZJRF9SQU5HRV9FTlRSWTNfQ1RSTDFfQ0hFQ0szX1RZUEVfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlkzX0NUUkwxX0NIRUNLM19UWVBFX01BU0sgICAgMHgzMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlkzX0NUUkwxX0NIRUNLM19ISUdIX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlkzX0NUUkwxX0NIRUNLM19ISUdIX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX1ZJRF9SQU5HRV9FTlRSWTRfQ1RSTDAgICAgMHgwNjZkCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlk0X0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlk0X0NUUkwwX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX1ZJRF9SQU5HRV9FTlRSWTRfQ1RSTDEgICAgMHgwNjZlCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlk0X0NUUkwxX0NIRUNLNF9UWVBFX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfVklEX1JBTkdFX0VOVFJZNF9DVFJMMV9DSEVDSzRfVFlQRV9NQVNLICAgIDB4MzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfVklEX1JBTkdFX0VOVFJZNF9DVFJMMV9DSEVDSzRfSElHSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfVklEX1JBTkdFX0VOVFJZNF9DVFJMMV9DSEVDSzRfSElHSF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9WSURfUkFOR0VfRU5UUlk1X0NUUkwwICAgIDB4MDY2ZgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfVklEX1JBTkdFX0VOVFJZNV9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfVklEX1JBTkdFX0VOVFJZNV9DVFJMMF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9WSURfUkFOR0VfRU5UUlk1X0NUUkwxICAgIDB4MDY3MAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfVklEX1JBTkdFX0VOVFJZNV9DVFJMMV9DSEVDSzVfVFlQRV9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1ZJRF9SQU5HRV9FTlRSWTVfQ1RSTDFfQ0hFQ0s1X1RZUEVfTUFTSyAgICAweDMwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1ZJRF9SQU5HRV9FTlRSWTVfQ1RSTDFfQ0hFQ0s1X0hJR0hfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1ZJRF9SQU5HRV9FTlRSWTVfQ1RSTDFfQ0hFQ0s1X0hJR0hfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfVklEX1JBTkdFX0VOVFJZNl9DVFJMMCAgICAweDA2NzEKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1ZJRF9SQU5HRV9FTlRSWTZfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1ZJRF9SQU5HRV9FTlRSWTZfQ1RSTDBfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfVklEX1JBTkdFX0VOVFJZNl9DVFJMMSAgICAweDA2NzIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1ZJRF9SQU5HRV9FTlRSWTZfQ1RSTDFfQ0hFQ0s2X1RZUEVfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlk2X0NUUkwxX0NIRUNLNl9UWVBFX01BU0sgICAgMHgzMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlk2X0NUUkwxX0NIRUNLNl9ISUdIX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlk2X0NUUkwxX0NIRUNLNl9ISUdIX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX1ZJRF9SQU5HRV9FTlRSWTdfQ1RSTDAgICAgMHgwNjczCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlk3X0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlk3X0NUUkwwX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX1ZJRF9SQU5HRV9FTlRSWTdfQ1RSTDEgICAgMHgwNjc0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlk3X0NUUkwxX0NIRUNLN19UWVBFX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfVklEX1JBTkdFX0VOVFJZN19DVFJMMV9DSEVDSzdfVFlQRV9NQVNLICAgIDB4MzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfVklEX1JBTkdFX0VOVFJZN19DVFJMMV9DSEVDSzdfSElHSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfVklEX1JBTkdFX0VOVFJZN19DVFJMMV9DSEVDSzdfSElHSF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9WSURfUkFOR0VfRU5UUlk4X0NUUkwwICAgIDB4MDY3NQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfVklEX1JBTkdFX0VOVFJZOF9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfVklEX1JBTkdFX0VOVFJZOF9DVFJMMF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9WSURfUkFOR0VfRU5UUlk4X0NUUkwxICAgIDB4MDY3NgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfVklEX1JBTkdFX0VOVFJZOF9DVFJMMV9DSEVDSzhfVFlQRV9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1ZJRF9SQU5HRV9FTlRSWThfQ1RSTDFfQ0hFQ0s4X1RZUEVfTUFTSyAgICAweDMwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1ZJRF9SQU5HRV9FTlRSWThfQ1RSTDFfQ0hFQ0s4X0hJR0hfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1ZJRF9SQU5HRV9FTlRSWThfQ1RSTDFfQ0hFQ0s4X0hJR0hfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfVklEX1JBTkdFX0VOVFJZOV9DVFJMMCAgICAweDA2NzcKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1ZJRF9SQU5HRV9FTlRSWTlfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1ZJRF9SQU5HRV9FTlRSWTlfQ1RSTDBfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfVklEX1JBTkdFX0VOVFJZOV9DVFJMMSAgICAweDA2NzgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1ZJRF9SQU5HRV9FTlRSWTlfQ1RSTDFfQ0hFQ0s5X1RZUEVfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlk5X0NUUkwxX0NIRUNLOV9UWVBFX01BU0sgICAgMHgzMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlk5X0NUUkwxX0NIRUNLOV9ISUdIX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlk5X0NUUkwxX0NIRUNLOV9ISUdIX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX1ZJRF9SQU5HRV9FTlRSWTEwX0NUUkwwICAgIDB4MDY3OQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfVklEX1JBTkdFX0VOVFJZMTBfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1ZJRF9SQU5HRV9FTlRSWTEwX0NUUkwwX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX1ZJRF9SQU5HRV9FTlRSWTEwX0NUUkwxICAgIDB4MDY3YQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfVklEX1JBTkdFX0VOVFJZMTBfQ1RSTDFfQ0hFQ0sxMF9UWVBFX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfVklEX1JBTkdFX0VOVFJZMTBfQ1RSTDFfQ0hFQ0sxMF9UWVBFX01BU0sgICAgMHgzMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlkxMF9DVFJMMV9DSEVDSzEwX0hJR0hfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1ZJRF9SQU5HRV9FTlRSWTEwX0NUUkwxX0NIRUNLMTBfSElHSF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9WSURfUkFOR0VfRU5UUlkxMV9DVFJMMCAgICAweDA2N2IKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1ZJRF9SQU5HRV9FTlRSWTExX0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlkxMV9DVFJMMF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9WSURfUkFOR0VfRU5UUlkxMV9DVFJMMSAgICAweDA2N2MKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1ZJRF9SQU5HRV9FTlRSWTExX0NUUkwxX0NIRUNLMTFfVFlQRV9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1ZJRF9SQU5HRV9FTlRSWTExX0NUUkwxX0NIRUNLMTFfVFlQRV9NQVNLICAgIDB4MzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfVklEX1JBTkdFX0VOVFJZMTFfQ1RSTDFfQ0hFQ0sxMV9ISUdIX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlkxMV9DVFJMMV9DSEVDSzExX0hJR0hfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfVklEX1JBTkdFX0VOVFJZMTJfQ1RSTDAgICAgMHgwNjdkCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlkxMl9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfVklEX1JBTkdFX0VOVFJZMTJfQ1RSTDBfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfVklEX1JBTkdFX0VOVFJZMTJfQ1RSTDEgICAgMHgwNjdlCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlkxMl9DVFJMMV9DSEVDSzEyX1RZUEVfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlkxMl9DVFJMMV9DSEVDSzEyX1RZUEVfTUFTSyAgICAweDMwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1ZJRF9SQU5HRV9FTlRSWTEyX0NUUkwxX0NIRUNLMTJfSElHSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfVklEX1JBTkdFX0VOVFJZMTJfQ1RSTDFfQ0hFQ0sxMl9ISUdIX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX1ZJRF9SQU5HRV9FTlRSWTEzX0NUUkwwICAgIDB4MDY3ZgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfVklEX1JBTkdFX0VOVFJZMTNfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1ZJRF9SQU5HRV9FTlRSWTEzX0NUUkwwX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX1ZJRF9SQU5HRV9FTlRSWTEzX0NUUkwxICAgIDB4MDY4MAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfVklEX1JBTkdFX0VOVFJZMTNfQ1RSTDFfQ0hFQ0sxM19UWVBFX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfVklEX1JBTkdFX0VOVFJZMTNfQ1RSTDFfQ0hFQ0sxM19UWVBFX01BU0sgICAgMHgzMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlkxM19DVFJMMV9DSEVDSzEzX0hJR0hfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1ZJRF9SQU5HRV9FTlRSWTEzX0NUUkwxX0NIRUNLMTNfSElHSF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9WSURfUkFOR0VfRU5UUlkxNF9DVFJMMCAgICAweDA2ODEKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1ZJRF9SQU5HRV9FTlRSWTE0X0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlkxNF9DVFJMMF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9WSURfUkFOR0VfRU5UUlkxNF9DVFJMMSAgICAweDA2ODIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1ZJRF9SQU5HRV9FTlRSWTE0X0NUUkwxX0NIRUNLMTRfVFlQRV9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1ZJRF9SQU5HRV9FTlRSWTE0X0NUUkwxX0NIRUNLMTRfVFlQRV9NQVNLICAgIDB4MzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfVklEX1JBTkdFX0VOVFJZMTRfQ1RSTDFfQ0hFQ0sxNF9ISUdIX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlkxNF9DVFJMMV9DSEVDSzE0X0hJR0hfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfVklEX1JBTkdFX0VOVFJZMTVfQ1RSTDAgICAgMHgwNjgzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlkxNV9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfVklEX1JBTkdFX0VOVFJZMTVfQ1RSTDBfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfVklEX1JBTkdFX0VOVFJZMTVfQ1RSTDEgICAgMHgwNjg0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlkxNV9DVFJMMV9DSEVDSzE1X1RZUEVfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlkxNV9DVFJMMV9DSEVDSzE1X1RZUEVfTUFTSyAgICAweDMwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1ZJRF9SQU5HRV9FTlRSWTE1X0NUUkwxX0NIRUNLMTVfSElHSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfVklEX1JBTkdFX0VOVFJZMTVfQ1RSTDFfQ0hFQ0sxNV9ISUdIX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0lQX1JBTkdFX0VOVFJZMF9DVFJMMCAgICAweDA2ODUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0lQX1JBTkdFX0VOVFJZMF9DVFJMMSAgICAweDA2ODYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0lQX1JBTkdFX0VOVFJZMF9DVFJMMiAgICAweDA2ODcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0lQX1JBTkdFX0VOVFJZMF9DVFJMMyAgICAweDA2ODgKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0lQX1JBTkdFX0VOVFJZMF9DVFJMNCAgICAweDA2ODkKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0lQX1JBTkdFX0VOVFJZMF9DVFJMNF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfSVBfUkFOR0VfRU5UUlkwX0NUUkw0X01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9JUF9SQU5HRV9FTlRSWTFfQ1RSTDAgICAgMHgwNjhhCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9JUF9SQU5HRV9FTlRSWTFfQ1RSTDEgICAgMHgwNjhiCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9JUF9SQU5HRV9FTlRSWTFfQ1RSTDIgICAgMHgwNjhjCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9JUF9SQU5HRV9FTlRSWTFfQ1RSTDMgICAgMHgwNjhkCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9JUF9SQU5HRV9FTlRSWTFfQ1RSTDQgICAgMHgwNjhlCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9JUF9SQU5HRV9FTlRSWTFfQ1RSTDRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0lQX1JBTkdFX0VOVFJZMV9DVFJMNF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfSVBfUkFOR0VfRU5UUlkyX0NUUkwwICAgIDB4MDY4ZgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfSVBfUkFOR0VfRU5UUlkyX0NUUkwxICAgIDB4MDY5MAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfSVBfUkFOR0VfRU5UUlkyX0NUUkwyICAgIDB4MDY5MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfSVBfUkFOR0VfRU5UUlkyX0NUUkwzICAgIDB4MDY5MgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfSVBfUkFOR0VfRU5UUlkyX0NUUkw0ICAgIDB4MDY5MworI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfSVBfUkFOR0VfRU5UUlkyX0NUUkw0X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9JUF9SQU5HRV9FTlRSWTJfQ1RSTDRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0lQX1JBTkdFX0VOVFJZM19DVFJMMCAgICAweDA2OTQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0lQX1JBTkdFX0VOVFJZM19DVFJMMSAgICAweDA2OTUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0lQX1JBTkdFX0VOVFJZM19DVFJMMiAgICAweDA2OTYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0lQX1JBTkdFX0VOVFJZM19DVFJMMyAgICAweDA2OTcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0lQX1JBTkdFX0VOVFJZM19DVFJMNCAgICAweDA2OTgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0lQX1JBTkdFX0VOVFJZM19DVFJMNF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfSVBfUkFOR0VfRU5UUlkzX0NUUkw0X01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9JUF9SQU5HRV9FTlRSWTRfQ1RSTDAgICAgMHgwNjk5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9JUF9SQU5HRV9FTlRSWTRfQ1RSTDEgICAgMHgwNjlhCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9JUF9SQU5HRV9FTlRSWTRfQ1RSTDIgICAgMHgwNjliCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9JUF9SQU5HRV9FTlRSWTRfQ1RSTDMgICAgMHgwNjljCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9JUF9SQU5HRV9FTlRSWTRfQ1RSTDQgICAgMHgwNjlkCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9JUF9SQU5HRV9FTlRSWTRfQ1RSTDRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0lQX1JBTkdFX0VOVFJZNF9DVFJMNF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfSVBfUkFOR0VfRU5UUlk1X0NUUkwwICAgIDB4MDY5ZQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfSVBfUkFOR0VfRU5UUlk1X0NUUkwxICAgIDB4MDY5ZgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfSVBfUkFOR0VfRU5UUlk1X0NUUkwyICAgIDB4MDZhMAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfSVBfUkFOR0VfRU5UUlk1X0NUUkwzICAgIDB4MDZhMQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfSVBfUkFOR0VfRU5UUlk1X0NUUkw0ICAgIDB4MDZhMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfSVBfUkFOR0VfRU5UUlk1X0NUUkw0X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9JUF9SQU5HRV9FTlRSWTVfQ1RSTDRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0lQX1JBTkdFX0VOVFJZNl9DVFJMMCAgICAweDA2YTMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0lQX1JBTkdFX0VOVFJZNl9DVFJMMSAgICAweDA2YTQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0lQX1JBTkdFX0VOVFJZNl9DVFJMMiAgICAweDA2YTUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0lQX1JBTkdFX0VOVFJZNl9DVFJMMyAgICAweDA2YTYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0lQX1JBTkdFX0VOVFJZNl9DVFJMNCAgICAweDA2YTcKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0lQX1JBTkdFX0VOVFJZNl9DVFJMNF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfSVBfUkFOR0VfRU5UUlk2X0NUUkw0X01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9JUF9SQU5HRV9FTlRSWTdfQ1RSTDAgICAgMHgwNmE4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9JUF9SQU5HRV9FTlRSWTdfQ1RSTDEgICAgMHgwNmE5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9JUF9SQU5HRV9FTlRSWTdfQ1RSTDIgICAgMHgwNmFhCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9JUF9SQU5HRV9FTlRSWTdfQ1RSTDMgICAgMHgwNmFiCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9JUF9SQU5HRV9FTlRSWTdfQ1RSTDQgICAgMHgwNmFjCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9JUF9SQU5HRV9FTlRSWTdfQ1RSTDRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0lQX1JBTkdFX0VOVFJZN19DVFJMNF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfSVBfUkFOR0VfRU5UUlk4X0NUUkwwICAgIDB4MDZhZAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfSVBfUkFOR0VfRU5UUlk4X0NUUkwxICAgIDB4MDZhZQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfSVBfUkFOR0VfRU5UUlk4X0NUUkwyICAgIDB4MDZhZgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfSVBfUkFOR0VfRU5UUlk4X0NUUkwzICAgIDB4MDZiMAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfSVBfUkFOR0VfRU5UUlk4X0NUUkw0ICAgIDB4MDZiMQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfSVBfUkFOR0VfRU5UUlk4X0NUUkw0X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9JUF9SQU5HRV9FTlRSWThfQ1RSTDRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0lQX1JBTkdFX0VOVFJZOV9DVFJMMCAgICAweDA2YjIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0lQX1JBTkdFX0VOVFJZOV9DVFJMMSAgICAweDA2YjMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0lQX1JBTkdFX0VOVFJZOV9DVFJMMiAgICAweDA2YjQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0lQX1JBTkdFX0VOVFJZOV9DVFJMMyAgICAweDA2YjUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0lQX1JBTkdFX0VOVFJZOV9DVFJMNCAgICAweDA2YjYKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0lQX1JBTkdFX0VOVFJZOV9DVFJMNF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfSVBfUkFOR0VfRU5UUlk5X0NUUkw0X01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9JUF9SQU5HRV9FTlRSWTEwX0NUUkwwICAgIDB4MDZiNworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfSVBfUkFOR0VfRU5UUlkxMF9DVFJMMSAgICAweDA2YjgKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0lQX1JBTkdFX0VOVFJZMTBfQ1RSTDIgICAgMHgwNmI5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9JUF9SQU5HRV9FTlRSWTEwX0NUUkwzICAgIDB4MDZiYQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfSVBfUkFOR0VfRU5UUlkxMF9DVFJMNCAgICAweDA2YmIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0lQX1JBTkdFX0VOVFJZMTBfQ1RSTDRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0lQX1JBTkdFX0VOVFJZMTBfQ1RSTDRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0lQX1JBTkdFX0VOVFJZMTFfQ1RSTDAgICAgMHgwNmJjCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9JUF9SQU5HRV9FTlRSWTExX0NUUkwxICAgIDB4MDZiZAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfSVBfUkFOR0VfRU5UUlkxMV9DVFJMMiAgICAweDA2YmUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0lQX1JBTkdFX0VOVFJZMTFfQ1RSTDMgICAgMHgwNmJmCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9JUF9SQU5HRV9FTlRSWTExX0NUUkw0ICAgIDB4MDZjMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfSVBfUkFOR0VfRU5UUlkxMV9DVFJMNF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfSVBfUkFOR0VfRU5UUlkxMV9DVFJMNF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfSVBfUkFOR0VfRU5UUlkxMl9DVFJMMCAgICAweDA2YzEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0lQX1JBTkdFX0VOVFJZMTJfQ1RSTDEgICAgMHgwNmMyCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9JUF9SQU5HRV9FTlRSWTEyX0NUUkwyICAgIDB4MDZjMworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfSVBfUkFOR0VfRU5UUlkxMl9DVFJMMyAgICAweDA2YzQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0lQX1JBTkdFX0VOVFJZMTJfQ1RSTDQgICAgMHgwNmM1CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9JUF9SQU5HRV9FTlRSWTEyX0NUUkw0X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9JUF9SQU5HRV9FTlRSWTEyX0NUUkw0X01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9JUF9SQU5HRV9FTlRSWTEzX0NUUkwwICAgIDB4MDZjNgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfSVBfUkFOR0VfRU5UUlkxM19DVFJMMSAgICAweDA2YzcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0lQX1JBTkdFX0VOVFJZMTNfQ1RSTDIgICAgMHgwNmM4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9JUF9SQU5HRV9FTlRSWTEzX0NUUkwzICAgIDB4MDZjOQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfSVBfUkFOR0VfRU5UUlkxM19DVFJMNCAgICAweDA2Y2EKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0lQX1JBTkdFX0VOVFJZMTNfQ1RSTDRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0lQX1JBTkdFX0VOVFJZMTNfQ1RSTDRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0lQX1JBTkdFX0VOVFJZMTRfQ1RSTDAgICAgMHgwNmNiCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9JUF9SQU5HRV9FTlRSWTE0X0NUUkwxICAgIDB4MDZjYworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfSVBfUkFOR0VfRU5UUlkxNF9DVFJMMiAgICAweDA2Y2QKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0lQX1JBTkdFX0VOVFJZMTRfQ1RSTDMgICAgMHgwNmNlCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9JUF9SQU5HRV9FTlRSWTE0X0NUUkw0ICAgIDB4MDZjZgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfSVBfUkFOR0VfRU5UUlkxNF9DVFJMNF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfSVBfUkFOR0VfRU5UUlkxNF9DVFJMNF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfSVBfUkFOR0VfRU5UUlkxNV9DVFJMMCAgICAweDA2ZDAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0lQX1JBTkdFX0VOVFJZMTVfQ1RSTDEgICAgMHgwNmQxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9JUF9SQU5HRV9FTlRSWTE1X0NUUkwyICAgIDB4MDZkMgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfSVBfUkFOR0VfRU5UUlkxNV9DVFJMMyAgICAweDA2ZDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0lQX1JBTkdFX0VOVFJZMTVfQ1RSTDQgICAgMHgwNmQ0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9JUF9SQU5HRV9FTlRSWTE1X0NUUkw0X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9JUF9SQU5HRV9FTlRSWTE1X0NUUkw0X01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9FTkFCTEUgICAgMHgwNmQ1CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9FTkFCTEVfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9FTkFCTEVfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9FTkFCTEVfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfRU5BQkxFX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfRU5BQkxFX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X0VOQUJMRV9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X0VOQUJMRV9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19FTkFCTEVfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X0VOQUJMRV9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9FTkFCTEVfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X0VOQUJMRV9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9FTkFCTEVfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X0VOQUJMRV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9FTkFCTEVfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX0VOQUJMRV9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19FTkFCTEVfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfRU5BQkxFX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX0VOQUJMRV9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9FTkFCTEVfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfRU5BQkxFX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX0VOQUJMRV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9FTkFCTEVfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX1VOTUFUQ0hfUEVSTUlUICAgIDB4MDZkNgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfUEVSTUlUX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfUEVSTUlUX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfUEVSTUlUX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X1BFUk1JVF9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X1BFUk1JVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9QRVJNSVRfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19QRVJNSVRfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfUEVSTUlUX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9QRVJNSVRfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfUEVSTUlUX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9QRVJNSVRfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfUEVSTUlUX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9QRVJNSVRfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfUEVSTUlUX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19QRVJNSVRfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfUEVSTUlUX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX1BFUk1JVF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9QRVJNSVRfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfUEVSTUlUX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX1BFUk1JVF9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9QRVJNSVRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfUEVSTUlUX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9HUElPX1BPTEFSSVRZICAgIDB4MDZkNworI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfR1BJT19QT0xBUklUWV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfR1BJT19QT0xBUklUWV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfTE9HX0NOVF9UWVBFICAgIDB4MDZkOAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfTE9HX0NOVF9UWVBFX0NPVU5URVIxNV9UWVBFX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfTE9HX0NOVF9UWVBFX0NPVU5URVIxNV9UWVBFX01BU0sgICAgMHg4MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9MT0dfQ05UX1RZUEVfQ09VTlRFUjE0X1RZUEVfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9MT0dfQ05UX1RZUEVfQ09VTlRFUjE0X1RZUEVfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0xPR19DTlRfVFlQRV9DT1VOVEVSMTNfVFlQRV9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0xPR19DTlRfVFlQRV9DT1VOVEVSMTNfVFlQRV9NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfTE9HX0NOVF9UWVBFX0NPVU5URVIxMl9UWVBFX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfTE9HX0NOVF9UWVBFX0NPVU5URVIxMl9UWVBFX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9MT0dfQ05UX1RZUEVfQ09VTlRFUjExX1RZUEVfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9MT0dfQ05UX1RZUEVfQ09VTlRFUjExX1RZUEVfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfTE9HX0NOVF9UWVBFX0NPVU5URVIxMF9UWVBFX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfTE9HX0NOVF9UWVBFX0NPVU5URVIxMF9UWVBFX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0xPR19DTlRfVFlQRV9DT1VOVEVSOV9UWVBFX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9MT0dfQ05UX1RZUEVfQ09VTlRFUjlfVFlQRV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9MT0dfQ05UX1RZUEVfQ09VTlRFUjhfVFlQRV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfTE9HX0NOVF9UWVBFX0NPVU5URVI4X1RZUEVfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfTE9HX0NOVF9UWVBFX0NPVU5URVI3X1RZUEVfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0xPR19DTlRfVFlQRV9DT1VOVEVSN19UWVBFX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfTE9HX0NOVF9UWVBFX0NPVU5URVI2X1RZUEVfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0xPR19DTlRfVFlQRV9DT1VOVEVSNl9UWVBFX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfTE9HX0NOVF9UWVBFX0NPVU5URVI1X1RZUEVfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0xPR19DTlRfVFlQRV9DT1VOVEVSNV9UWVBFX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfTE9HX0NOVF9UWVBFX0NPVU5URVI0X1RZUEVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0xPR19DTlRfVFlQRV9DT1VOVEVSNF9UWVBFX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfTE9HX0NOVF9UWVBFX0NPVU5URVIzX1RZUEVfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0xPR19DTlRfVFlQRV9DT1VOVEVSM19UWVBFX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9MT0dfQ05UX1RZUEVfQ09VTlRFUjJfVFlQRV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfTE9HX0NOVF9UWVBFX0NPVU5URVIyX1RZUEVfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0xPR19DTlRfVFlQRV9DT1VOVEVSMV9UWVBFX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9MT0dfQ05UX1RZUEVfQ09VTlRFUjFfVFlQRV9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfTE9HX0NOVF9UWVBFX0NPVU5URVIwX1RZUEVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0xPR19DTlRfVFlQRV9DT1VOVEVSMF9UWVBFX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9SRVNFVF9DRkcgICAgMHgwNmQ5CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9SRVNFVF9DRkdfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX1JFU0VUX0NGR19NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfRFVNTVkwMCAgICAweDA2RTAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0RVTU1ZMDEgICAgMHgwNkUxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9EVU1NWTAyICAgIDB4MDZFMgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfRFVNTVkwMyAgICAweDA2RTMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0RVTU1ZMDQgICAgMHgwNkU0CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9EVU1NWTA1ICAgIDB4MDZFNQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfRFVNTVkwNiAgICAweDA2RTYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0RVTU1ZMDcgICAgMHgwNkU3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9SRUFTT05fMDEgICAgMHgwNkU4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9BQ1RfMV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfQUNUXzFfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0FDVF8wX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9BQ1RfMF9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX1JFQVNPTl8yMyAgICAweDA2RTkKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0FDVF8zX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9BQ1RfM19NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfQUNUXzJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0FDVF8yX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfUkVBU09OXzQ1ICAgIDB4MDZFQQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfQUNUXzVfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0FDVF81X01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9BQ1RfNF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfQUNUXzRfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9BQ0NFU1NfTU9ERSAgICAweDA2RUIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0FDQ0VTU19NT0RFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9BQ0NFU1NfTU9ERV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfQUNUSU9OX0NUUkwzMiAgICAweDA2RjAKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A2NV9OT1RfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX09QNjVfTk9UX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDY1X0dQSU9fT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDY1X0dQSU9fTUFTSyAgICAweDIwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjVfRk9SV0FSRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjVfRk9SV0FSRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2NV9QT0xJQ0lOR19PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjVfUE9MSUNJTkdfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2NV9QUklPUklUWV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjVfUFJJT1JJVFlfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2NV9TVklEX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDY1X1NWSURfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2NV9DVklEX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDY1X0NWSURfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDY0X05PVF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19PUDY0X05PVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjRfR1BJT19PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2NF9HUElPX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2NF9GT1JXQVJEX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDY0X0ZPUldBUkRfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDY0X1BPTElDSU5HX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDY0X1BPTElDSU5HX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDY0X1BSSU9SSVRZX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDY0X1BSSU9SSVRZX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDY0X1NWSURfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjRfU1ZJRF9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2NF9DVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDY0X0NWSURfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0FDVElPTl9DVFJMMzMgICAgMHgwNkYxCisjZGVmaW5lICAgIFJUTDgzNjdDX09QNjdfTk9UX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDY3X05PVF9NQVNLICAgIDB4NDAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2N19HUElPX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2N19HUElPX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDY3X0ZPUldBUkRfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDY3X0ZPUldBUkRfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjdfUE9MSUNJTkdfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDY3X1BPTElDSU5HX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjdfUFJJT1JJVFlfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDY3X1BSSU9SSVRZX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjdfU1ZJRF9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2N19TVklEX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjdfQ1ZJRF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2N19DVklEX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A2Nl9OT1RfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A2Nl9OT1RfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDY2X0dQSU9fT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjZfR1BJT19NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjZfRk9SV0FSRF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2Nl9GT1JXQVJEX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2Nl9QT0xJQ0lOR19PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2Nl9QT0xJQ0lOR19NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2Nl9QUklPUklUWV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2Nl9QUklPUklUWV9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2Nl9TVklEX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDY2X1NWSURfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjZfQ1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2Nl9DVklEX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9BQ1RJT05fQ1RSTDM0ICAgIDB4MDZGMgorI2RlZmluZSAgICBSVEw4MzY3Q19PUDY5X05PVF9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A2OV9OT1RfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjlfR1BJT19PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjlfR1BJT19NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2OV9GT1JXQVJEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2OV9GT1JXQVJEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDY5X1BPTElDSU5HX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2OV9QT0xJQ0lOR19NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDY5X1BSSU9SSVRZX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2OV9QUklPUklUWV9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDY5X1NWSURfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjlfU1ZJRF9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDY5X0NWSURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjlfQ1ZJRF9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX09QNjhfTk9UX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX09QNjhfTk9UX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2OF9HUElPX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDY4X0dQSU9fTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDY4X0ZPUldBUkRfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjhfRk9SV0FSRF9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjhfUE9MSUNJTkdfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjhfUE9MSUNJTkdfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjhfUFJJT1JJVFlfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjhfUFJJT1JJVFlfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjhfU1ZJRF9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q2OF9TVklEX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDY4X0NWSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNjhfQ1ZJRF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfQUNUSU9OX0NUUkwzNSAgICAweDA2RjMKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A3MV9OT1RfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX09QNzFfTk9UX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDcxX0dQSU9fT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDcxX0dQSU9fTUFTSyAgICAweDIwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzFfRk9SV0FSRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzFfRk9SV0FSRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3MV9QT0xJQ0lOR19PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzFfUE9MSUNJTkdfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3MV9QUklPUklUWV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzFfUFJJT1JJVFlfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3MV9TVklEX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDcxX1NWSURfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3MV9DVklEX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDcxX0NWSURfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDcwX05PVF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19PUDcwX05PVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzBfR1BJT19PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3MF9HUElPX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3MF9GT1JXQVJEX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDcwX0ZPUldBUkRfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDcwX1BPTElDSU5HX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDcwX1BPTElDSU5HX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDcwX1BSSU9SSVRZX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDcwX1BSSU9SSVRZX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDcwX1NWSURfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzBfU1ZJRF9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3MF9DVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDcwX0NWSURfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0FDVElPTl9DVFJMMzYgICAgMHgwNkY0CisjZGVmaW5lICAgIFJUTDgzNjdDX09QNzNfTk9UX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDczX05PVF9NQVNLICAgIDB4NDAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3M19HUElPX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3M19HUElPX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDczX0ZPUldBUkRfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDczX0ZPUldBUkRfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzNfUE9MSUNJTkdfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDczX1BPTElDSU5HX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzNfUFJJT1JJVFlfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDczX1BSSU9SSVRZX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzNfU1ZJRF9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3M19TVklEX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzNfQ1ZJRF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3M19DVklEX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A3Ml9OT1RfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A3Ml9OT1RfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDcyX0dQSU9fT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzJfR1BJT19NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzJfRk9SV0FSRF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3Ml9GT1JXQVJEX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3Ml9QT0xJQ0lOR19PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3Ml9QT0xJQ0lOR19NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3Ml9QUklPUklUWV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3Ml9QUklPUklUWV9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3Ml9TVklEX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDcyX1NWSURfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzJfQ1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3Ml9DVklEX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9BQ1RJT05fQ1RSTDM3ICAgIDB4MDZGNQorI2RlZmluZSAgICBSVEw4MzY3Q19PUDc1X05PVF9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A3NV9OT1RfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzVfR1BJT19PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzVfR1BJT19NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3NV9GT1JXQVJEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3NV9GT1JXQVJEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDc1X1BPTElDSU5HX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3NV9QT0xJQ0lOR19NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDc1X1BSSU9SSVRZX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3NV9QUklPUklUWV9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDc1X1NWSURfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzVfU1ZJRF9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDc1X0NWSURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzVfQ1ZJRF9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX09QNzRfTk9UX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX09QNzRfTk9UX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3NF9HUElPX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDc0X0dQSU9fTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDc0X0ZPUldBUkRfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzRfRk9SV0FSRF9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzRfUE9MSUNJTkdfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzRfUE9MSUNJTkdfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzRfUFJJT1JJVFlfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzRfUFJJT1JJVFlfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzRfU1ZJRF9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3NF9TVklEX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDc0X0NWSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzRfQ1ZJRF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfQUNUSU9OX0NUUkwzOCAgICAweDA2RjYKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A3N19OT1RfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX09QNzdfTk9UX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDc3X0dQSU9fT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDc3X0dQSU9fTUFTSyAgICAweDIwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzdfRk9SV0FSRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzdfRk9SV0FSRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3N19QT0xJQ0lOR19PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzdfUE9MSUNJTkdfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3N19QUklPUklUWV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzdfUFJJT1JJVFlfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3N19TVklEX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDc3X1NWSURfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3N19DVklEX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDc3X0NWSURfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDc2X05PVF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19PUDc2X05PVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzZfR1BJT19PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3Nl9HUElPX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3Nl9GT1JXQVJEX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDc2X0ZPUldBUkRfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDc2X1BPTElDSU5HX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDc2X1BPTElDSU5HX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDc2X1BSSU9SSVRZX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDc2X1BSSU9SSVRZX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDc2X1NWSURfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzZfU1ZJRF9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3Nl9DVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDc2X0NWSURfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0FDVElPTl9DVFJMMzkgICAgMHgwNkY3CisjZGVmaW5lICAgIFJUTDgzNjdDX09QNzlfTk9UX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDc5X05PVF9NQVNLICAgIDB4NDAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3OV9HUElPX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3OV9HUElPX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDc5X0ZPUldBUkRfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDc5X0ZPUldBUkRfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzlfUE9MSUNJTkdfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDc5X1BPTElDSU5HX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzlfUFJJT1JJVFlfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDc5X1BSSU9SSVRZX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzlfU1ZJRF9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3OV9TVklEX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzlfQ1ZJRF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3OV9DVklEX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A3OF9OT1RfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A3OF9OT1RfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDc4X0dQSU9fT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzhfR1BJT19NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzhfRk9SV0FSRF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3OF9GT1JXQVJEX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3OF9QT0xJQ0lOR19PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3OF9QT0xJQ0lOR19NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3OF9QUklPUklUWV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3OF9QUklPUklUWV9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3OF9TVklEX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDc4X1NWSURfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUNzhfQ1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q3OF9DVklEX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9BQ1RJT05fQ1RSTDQwICAgIDB4MDZGOAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDgxX05PVF9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A4MV9OT1RfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODFfR1BJT19PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODFfR1BJT19NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4MV9GT1JXQVJEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4MV9GT1JXQVJEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDgxX1BPTElDSU5HX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4MV9QT0xJQ0lOR19NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDgxX1BSSU9SSVRZX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4MV9QUklPUklUWV9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDgxX1NWSURfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODFfU1ZJRF9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDgxX0NWSURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODFfQ1ZJRF9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX09QODBfTk9UX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX09QODBfTk9UX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4MF9HUElPX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDgwX0dQSU9fTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDgwX0ZPUldBUkRfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODBfRk9SV0FSRF9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODBfUE9MSUNJTkdfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODBfUE9MSUNJTkdfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODBfUFJJT1JJVFlfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODBfUFJJT1JJVFlfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODBfU1ZJRF9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4MF9TVklEX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDgwX0NWSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODBfQ1ZJRF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfQUNUSU9OX0NUUkw0MSAgICAweDA2RjkKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A4M19OT1RfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX09QODNfTk9UX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDgzX0dQSU9fT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDgzX0dQSU9fTUFTSyAgICAweDIwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODNfRk9SV0FSRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODNfRk9SV0FSRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4M19QT0xJQ0lOR19PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODNfUE9MSUNJTkdfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4M19QUklPUklUWV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODNfUFJJT1JJVFlfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4M19TVklEX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDgzX1NWSURfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4M19DVklEX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDgzX0NWSURfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDgyX05PVF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19PUDgyX05PVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODJfR1BJT19PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4Ml9HUElPX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4Ml9GT1JXQVJEX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDgyX0ZPUldBUkRfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDgyX1BPTElDSU5HX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDgyX1BPTElDSU5HX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDgyX1BSSU9SSVRZX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDgyX1BSSU9SSVRZX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDgyX1NWSURfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODJfU1ZJRF9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4Ml9DVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDgyX0NWSURfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0FDVElPTl9DVFJMNDIgICAgMHgwNkZBCisjZGVmaW5lICAgIFJUTDgzNjdDX09QODVfTk9UX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDg1X05PVF9NQVNLICAgIDB4NDAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4NV9HUElPX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4NV9HUElPX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDg1X0ZPUldBUkRfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDg1X0ZPUldBUkRfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODVfUE9MSUNJTkdfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDg1X1BPTElDSU5HX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODVfUFJJT1JJVFlfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDg1X1BSSU9SSVRZX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODVfU1ZJRF9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4NV9TVklEX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODVfQ1ZJRF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4NV9DVklEX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A4NF9OT1RfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A4NF9OT1RfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDg0X0dQSU9fT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODRfR1BJT19NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODRfRk9SV0FSRF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4NF9GT1JXQVJEX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4NF9QT0xJQ0lOR19PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4NF9QT0xJQ0lOR19NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4NF9QUklPUklUWV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4NF9QUklPUklUWV9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4NF9TVklEX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDg0X1NWSURfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODRfQ1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4NF9DVklEX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9BQ1RJT05fQ1RSTDQzICAgIDB4MDZGQgorI2RlZmluZSAgICBSVEw4MzY3Q19PUDg3X05PVF9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A4N19OT1RfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODdfR1BJT19PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODdfR1BJT19NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4N19GT1JXQVJEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4N19GT1JXQVJEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDg3X1BPTElDSU5HX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4N19QT0xJQ0lOR19NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDg3X1BSSU9SSVRZX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4N19QUklPUklUWV9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDg3X1NWSURfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODdfU1ZJRF9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDg3X0NWSURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODdfQ1ZJRF9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX09QODZfTk9UX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX09QODZfTk9UX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4Nl9HUElPX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDg2X0dQSU9fTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDg2X0ZPUldBUkRfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODZfRk9SV0FSRF9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODZfUE9MSUNJTkdfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODZfUE9MSUNJTkdfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODZfUFJJT1JJVFlfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODZfUFJJT1JJVFlfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODZfU1ZJRF9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4Nl9TVklEX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDg2X0NWSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODZfQ1ZJRF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfQUNUSU9OX0NUUkw0NCAgICAweDA2RkMKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A4OV9OT1RfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX09QODlfTk9UX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDg5X0dQSU9fT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDg5X0dQSU9fTUFTSyAgICAweDIwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODlfRk9SV0FSRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODlfRk9SV0FSRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4OV9QT0xJQ0lOR19PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODlfUE9MSUNJTkdfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4OV9QUklPUklUWV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODlfUFJJT1JJVFlfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4OV9TVklEX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDg5X1NWSURfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4OV9DVklEX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDg5X0NWSURfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDg4X05PVF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19PUDg4X05PVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODhfR1BJT19PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4OF9HUElPX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4OF9GT1JXQVJEX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDg4X0ZPUldBUkRfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDg4X1BPTElDSU5HX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDg4X1BPTElDSU5HX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDg4X1BSSU9SSVRZX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDg4X1BSSU9SSVRZX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDg4X1NWSURfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUODhfU1ZJRF9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q4OF9DVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDg4X0NWSURfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0FDVElPTl9DVFJMNDUgICAgMHgwNkZECisjZGVmaW5lICAgIFJUTDgzNjdDX09QOTFfTk9UX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDkxX05PVF9NQVNLICAgIDB4NDAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q5MV9HUElPX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q5MV9HUElPX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDkxX0ZPUldBUkRfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDkxX0ZPUldBUkRfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUOTFfUE9MSUNJTkdfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDkxX1BPTElDSU5HX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUOTFfUFJJT1JJVFlfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDkxX1BSSU9SSVRZX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUOTFfU1ZJRF9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q5MV9TVklEX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUOTFfQ1ZJRF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q5MV9DVklEX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A5MF9OT1RfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A5MF9OT1RfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDkwX0dQSU9fT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUOTBfR1BJT19NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUOTBfRk9SV0FSRF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q5MF9GT1JXQVJEX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q5MF9QT0xJQ0lOR19PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q5MF9QT0xJQ0lOR19NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q5MF9QUklPUklUWV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q5MF9QUklPUklUWV9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q5MF9TVklEX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDkwX1NWSURfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUOTBfQ1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q5MF9DVklEX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FDTF9BQ1RJT05fQ1RSTDQ2ICAgIDB4MDZGRQorI2RlZmluZSAgICBSVEw4MzY3Q19PUDkzX05PVF9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A5M19OT1RfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUOTNfR1BJT19PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUOTNfR1BJT19NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q5M19GT1JXQVJEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q5M19GT1JXQVJEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDkzX1BPTElDSU5HX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q5M19QT0xJQ0lOR19NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDkzX1BSSU9SSVRZX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q5M19QUklPUklUWV9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDkzX1NWSURfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUOTNfU1ZJRF9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDkzX0NWSURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUOTNfQ1ZJRF9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX09QOTJfTk9UX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX09QOTJfTk9UX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q5Ml9HUElPX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDkyX0dQSU9fTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDkyX0ZPUldBUkRfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUOTJfRk9SV0FSRF9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUOTJfUE9MSUNJTkdfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUOTJfUE9MSUNJTkdfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUOTJfUFJJT1JJVFlfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUOTJfUFJJT1JJVFlfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUOTJfU1ZJRF9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q5Ml9TVklEX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDkyX0NWSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUOTJfQ1ZJRF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BQ0xfQUNUSU9OX0NUUkw0NyAgICAweDA2RkYKKyNkZWZpbmUgICAgUlRMODM2N0NfT1A5NV9OT1RfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX09QOTVfTk9UX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDk1X0dQSU9fT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDk1X0dQSU9fTUFTSyAgICAweDIwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUOTVfRk9SV0FSRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUOTVfRk9SV0FSRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q5NV9QT0xJQ0lOR19PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUOTVfUE9MSUNJTkdfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q5NV9QUklPUklUWV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUOTVfUFJJT1JJVFlfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q5NV9TVklEX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDk1X1NWSURfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q5NV9DVklEX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDk1X0NWSURfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19PUDk0X05PVF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19PUDk0X05PVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUOTRfR1BJT19PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q5NF9HUElPX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q5NF9GT1JXQVJEX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDk0X0ZPUldBUkRfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDk0X1BPTElDSU5HX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDk0X1BPTElDSU5HX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDk0X1BSSU9SSVRZX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDk0X1BSSU9SSVRZX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDk0X1NWSURfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNUOTRfU1ZJRF9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1Q5NF9DVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDVDk0X0NWSURfTUFTSyAgICAweDEKKworLyogKDE2J2gwNzAwKWN2bGFuX3JlZyAqLworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX1BWSURfQ1RSTDAgICAgMHgwNzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX1ZJRFhfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfVklEWF9NQVNLICAgIDB4MUYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9WSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX1ZJRFhfTUFTSyAgICAweDFGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fUFZJRF9DVFJMMSAgICAweDA3MDEKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfVklEWF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19WSURYX01BU0sgICAgMHgxRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX1ZJRFhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfVklEWF9NQVNLICAgIDB4MUYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9QVklEX0NUUkwyICAgIDB4MDcwMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9WSURYX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X1ZJRFhfTUFTSyAgICAweDFGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfVklEWF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9WSURYX01BU0sgICAgMHgxRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX1BWSURfQ1RSTDMgICAgMHgwNzAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X1ZJRFhfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfVklEWF9NQVNLICAgIDB4MUYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9WSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X1ZJRFhfTUFTSyAgICAweDFGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fUFZJRF9DVFJMNCAgICAweDA3MDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfVklEWF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9WSURYX01BU0sgICAgMHgxRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X1ZJRFhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfVklEWF9NQVNLICAgIDB4MUYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9QVklEX0NUUkw1ICAgIDB4MDcwNQorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BWSURfQ1RSTDVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QVklEX0NUUkw1X01BU0sgICAgMHgxRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX1BQQjBfVkFMSUQgICAgMHgwNzA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCMF9WQUxJRF9WQUxJRF9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIwX1ZBTElEX1ZBTElEX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCMF9WQUxJRF9WQUxJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQjBfVkFMSURfVkFMSURfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fUFBCMF9DVFJMMCAgICAweDA3MDkKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIwX0NUUkwwX1BPUlQyX0lOREVYX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQjBfQ1RSTDBfUE9SVDJfSU5ERVhfTUFTSyAgICAweDdDMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIwX0NUUkwwX1BPUlQxX0lOREVYX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCMF9DVFJMMF9QT1JUMV9JTkRFWF9NQVNLICAgIDB4M0UwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCMF9DVFJMMF9QT1JUMF9JTkRFWF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQjBfQ1RSTDBfUE9SVDBfSU5ERVhfTUFTSyAgICAweDFGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fUFBCMF9DVFJMMSAgICAweDA3MGEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIwX0NUUkwxX1BPUlQ1X0lOREVYX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQjBfQ1RSTDFfUE9SVDVfSU5ERVhfTUFTSyAgICAweDdDMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIwX0NUUkwxX1BPUlQ0X0lOREVYX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCMF9DVFJMMV9QT1JUNF9JTkRFWF9NQVNLICAgIDB4M0UwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCMF9DVFJMMV9QT1JUM19JTkRFWF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQjBfQ1RSTDFfUE9SVDNfSU5ERVhfTUFTSyAgICAweDFGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fUFBCMF9DVFJMMiAgICAweDA3MGIKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIwX0NUUkwyX0ZSQU1FX1RZUEVfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCMF9DVFJMMl9GUkFNRV9UWVBFX01BU0sgICAgMHhDMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIwX0NUUkwyX1BPUlQ3X0lOREVYX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCMF9DVFJMMl9QT1JUN19JTkRFWF9NQVNLICAgIDB4M0UwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCMF9DVFJMMl9QT1JUNl9JTkRFWF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQjBfQ1RSTDJfUE9SVDZfSU5ERVhfTUFTSyAgICAweDFGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fUFBCMF9DVFJMNCAgICAweDA3MGMKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIwX0NUUkw0X1BPUlQxMF9JTkRFWF9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIwX0NUUkw0X1BPUlQxMF9JTkRFWF9NQVNLICAgIDB4N0MwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQjBfQ1RSTDRfUE9SVDlfSU5ERVhfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIwX0NUUkw0X1BPUlQ5X0lOREVYX01BU0sgICAgMHgzRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIwX0NUUkw0X1BPUlQ4X0lOREVYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCMF9DVFJMNF9QT1JUOF9JTkRFWF9NQVNLICAgIDB4MUYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9QUEIwX0NUUkwzICAgIDB4MDcwZgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX1BQQjFfVkFMSUQgICAgMHgwNzEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCMV9WQUxJRF9WQUxJRF9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIxX1ZBTElEX1ZBTElEX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCMV9WQUxJRF9WQUxJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQjFfVkFMSURfVkFMSURfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fUFBCMV9DVFJMMCAgICAweDA3MTEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIxX0NUUkwwX1BPUlQyX0lOREVYX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQjFfQ1RSTDBfUE9SVDJfSU5ERVhfTUFTSyAgICAweDdDMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIxX0NUUkwwX1BPUlQxX0lOREVYX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCMV9DVFJMMF9QT1JUMV9JTkRFWF9NQVNLICAgIDB4M0UwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCMV9DVFJMMF9QT1JUMF9JTkRFWF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQjFfQ1RSTDBfUE9SVDBfSU5ERVhfTUFTSyAgICAweDFGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fUFBCMV9DVFJMMSAgICAweDA3MTIKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIxX0NUUkwxX1BPUlQ1X0lOREVYX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQjFfQ1RSTDFfUE9SVDVfSU5ERVhfTUFTSyAgICAweDdDMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIxX0NUUkwxX1BPUlQ0X0lOREVYX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCMV9DVFJMMV9QT1JUNF9JTkRFWF9NQVNLICAgIDB4M0UwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCMV9DVFJMMV9QT1JUM19JTkRFWF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQjFfQ1RSTDFfUE9SVDNfSU5ERVhfTUFTSyAgICAweDFGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fUFBCMV9DVFJMMiAgICAweDA3MTMKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIxX0NUUkwyX0ZSQU1FX1RZUEVfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCMV9DVFJMMl9GUkFNRV9UWVBFX01BU0sgICAgMHhDMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIxX0NUUkwyX1BPUlQ3X0lOREVYX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCMV9DVFJMMl9QT1JUN19JTkRFWF9NQVNLICAgIDB4M0UwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCMV9DVFJMMl9QT1JUNl9JTkRFWF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQjFfQ1RSTDJfUE9SVDZfSU5ERVhfTUFTSyAgICAweDFGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fUFBCMV9DVFJMNCAgICAweDA3MTQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIxX0NUUkw0X1BPUlQxMF9JTkRFWF9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIxX0NUUkw0X1BPUlQxMF9JTkRFWF9NQVNLICAgIDB4N0MwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQjFfQ1RSTDRfUE9SVDlfSU5ERVhfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIxX0NUUkw0X1BPUlQ5X0lOREVYX01BU0sgICAgMHgzRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIxX0NUUkw0X1BPUlQ4X0lOREVYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCMV9DVFJMNF9QT1JUOF9JTkRFWF9NQVNLICAgIDB4MUYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9QUEIxX0NUUkwzICAgIDB4MDcxNworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX1BQQjJfVkFMSUQgICAgMHgwNzE4CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCMl9WQUxJRF9WQUxJRF9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIyX1ZBTElEX1ZBTElEX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCMl9WQUxJRF9WQUxJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQjJfVkFMSURfVkFMSURfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fUFBCMl9DVFJMMCAgICAweDA3MTkKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIyX0NUUkwwX1BPUlQyX0lOREVYX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQjJfQ1RSTDBfUE9SVDJfSU5ERVhfTUFTSyAgICAweDdDMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIyX0NUUkwwX1BPUlQxX0lOREVYX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCMl9DVFJMMF9QT1JUMV9JTkRFWF9NQVNLICAgIDB4M0UwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCMl9DVFJMMF9QT1JUMF9JTkRFWF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQjJfQ1RSTDBfUE9SVDBfSU5ERVhfTUFTSyAgICAweDFGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fUFBCMl9DVFJMMSAgICAweDA3MWEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIyX0NUUkwxX1BPUlQ1X0lOREVYX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQjJfQ1RSTDFfUE9SVDVfSU5ERVhfTUFTSyAgICAweDdDMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIyX0NUUkwxX1BPUlQ0X0lOREVYX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCMl9DVFJMMV9QT1JUNF9JTkRFWF9NQVNLICAgIDB4M0UwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCMl9DVFJMMV9QT1JUM19JTkRFWF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQjJfQ1RSTDFfUE9SVDNfSU5ERVhfTUFTSyAgICAweDFGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fUFBCMl9DVFJMMiAgICAweDA3MWIKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIyX0NUUkwyX0ZSQU1FX1RZUEVfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCMl9DVFJMMl9GUkFNRV9UWVBFX01BU0sgICAgMHhDMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIyX0NUUkwyX1BPUlQ3X0lOREVYX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCMl9DVFJMMl9QT1JUN19JTkRFWF9NQVNLICAgIDB4M0UwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCMl9DVFJMMl9QT1JUNl9JTkRFWF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQjJfQ1RSTDJfUE9SVDZfSU5ERVhfTUFTSyAgICAweDFGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fUFBCMl9DVFJMNCAgICAweDA3MWMKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIyX0NUUkw0X1BPUlQxMF9JTkRFWF9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIyX0NUUkw0X1BPUlQxMF9JTkRFWF9NQVNLICAgIDB4N0MwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQjJfQ1RSTDRfUE9SVDlfSU5ERVhfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIyX0NUUkw0X1BPUlQ5X0lOREVYX01BU0sgICAgMHgzRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIyX0NUUkw0X1BPUlQ4X0lOREVYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCMl9DVFJMNF9QT1JUOF9JTkRFWF9NQVNLICAgIDB4MUYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9QUEIyX0NUUkwzICAgIDB4MDcxZgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX1BQQjNfVkFMSUQgICAgMHgwNzIwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCM19WQUxJRF9WQUxJRF9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIzX1ZBTElEX1ZBTElEX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCM19WQUxJRF9WQUxJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQjNfVkFMSURfVkFMSURfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fUFBCM19DVFJMMCAgICAweDA3MjEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIzX0NUUkwwX1BPUlQyX0lOREVYX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQjNfQ1RSTDBfUE9SVDJfSU5ERVhfTUFTSyAgICAweDdDMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIzX0NUUkwwX1BPUlQxX0lOREVYX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCM19DVFJMMF9QT1JUMV9JTkRFWF9NQVNLICAgIDB4M0UwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCM19DVFJMMF9QT1JUMF9JTkRFWF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQjNfQ1RSTDBfUE9SVDBfSU5ERVhfTUFTSyAgICAweDFGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fUFBCM19DVFJMMSAgICAweDA3MjIKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIzX0NUUkwxX1BPUlQ1X0lOREVYX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQjNfQ1RSTDFfUE9SVDVfSU5ERVhfTUFTSyAgICAweDdDMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIzX0NUUkwxX1BPUlQ0X0lOREVYX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCM19DVFJMMV9QT1JUNF9JTkRFWF9NQVNLICAgIDB4M0UwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCM19DVFJMMV9QT1JUM19JTkRFWF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQjNfQ1RSTDFfUE9SVDNfSU5ERVhfTUFTSyAgICAweDFGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fUFBCM19DVFJMMiAgICAweDA3MjMKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIzX0NUUkwyX0ZSQU1FX1RZUEVfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCM19DVFJMMl9GUkFNRV9UWVBFX01BU0sgICAgMHhDMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIzX0NUUkwyX1BPUlQ3X0lOREVYX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCM19DVFJMMl9QT1JUN19JTkRFWF9NQVNLICAgIDB4M0UwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCM19DVFJMMl9QT1JUNl9JTkRFWF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQjNfQ1RSTDJfUE9SVDZfSU5ERVhfTUFTSyAgICAweDFGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fUFBCM19DVFJMNCAgICAweDA3MjQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIzX0NUUkw0X1BPUlQxMF9JTkRFWF9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIzX0NUUkw0X1BPUlQxMF9JTkRFWF9NQVNLICAgIDB4N0MwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQjNfQ1RSTDRfUE9SVDlfSU5ERVhfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIzX0NUUkw0X1BPUlQ5X0lOREVYX01BU0sgICAgMHgzRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEIzX0NUUkw0X1BPUlQ4X0lOREVYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCM19DVFJMNF9QT1JUOF9JTkRFWF9NQVNLICAgIDB4MUYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9QUEIzX0NUUkwzICAgIDB4MDcyNworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMF9DVFJMMCAgICAweDA3MjgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjBfQ1RSTDBfTUJSX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMF9DVFJMMF9NQlJfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjBfQ1RSTDBfTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04wX0NUUkwwX01CUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjBfQ1RSTDEgICAgMHgwNzI5CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04wX0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04wX0NUUkwxX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04wX0NUUkwyICAgIDB4MDcyYQorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMF9DVFJMMl9NRVRFUklEWF9FWFRfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04wX0NUUkwyX01FVEVSSURYX0VYVF9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04wX0NUUkwyX01FVEVSSURYX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04wX0NUUkwyX01FVEVSSURYX01BU0sgICAgMHgzRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjBfQ1RSTDJfRU5WTEFOUE9MX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04wX0NUUkwyX0VOVkxBTlBPTF9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjBfQ1RSTDJfVkJQUklfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjBfQ1RSTDJfVkJQUklfTUFTSyAgICAweEUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjBfQ1RSTDJfVkJQRU5fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjBfQ1RSTDJfVkJQRU5fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjBfQ1RSTDMgICAgMHgwNzJiCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04wX0NUUkwzX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04wX0NUUkwzX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xX0NUUkwwICAgIDB4MDcyYworI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMV9DVFJMMF9NQlJfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xX0NUUkwwX01CUl9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMV9DVFJMMF9NQlJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjFfQ1RSTDBfTUJSX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMV9DVFJMMSAgICAweDA3MmQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjFfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjFfQ1RSTDFfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjFfQ1RSTDIgICAgMHgwNzJlCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xX0NUUkwyX01FVEVSSURYX0VYVF9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjFfQ1RSTDJfTUVURVJJRFhfRVhUX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjFfQ1RSTDJfTUVURVJJRFhfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjFfQ1RSTDJfTUVURVJJRFhfTUFTSyAgICAweDNFMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMV9DVFJMMl9FTlZMQU5QT0xfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjFfQ1RSTDJfRU5WTEFOUE9MX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMV9DVFJMMl9WQlBSSV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMV9DVFJMMl9WQlBSSV9NQVNLICAgIDB4RQorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMV9DVFJMMl9WQlBFTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMV9DVFJMMl9WQlBFTl9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMV9DVFJMMyAgICAweDA3MmYKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjFfQ1RSTDNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjFfQ1RSTDNfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjJfQ1RSTDAgICAgMHgwNzMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yX0NUUkwwX01CUl9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjJfQ1RSTDBfTUJSX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yX0NUUkwwX01CUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMl9DVFJMMF9NQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yX0NUUkwxICAgIDB4MDczMQorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMl9DVFJMMV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMl9DVFJMMV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMl9DVFJMMiAgICAweDA3MzIKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjJfQ1RSTDJfTUVURVJJRFhfRVhUX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMl9DVFJMMl9NRVRFUklEWF9FWFRfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMl9DVFJMMl9NRVRFUklEWF9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMl9DVFJMMl9NRVRFUklEWF9NQVNLICAgIDB4M0UwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yX0NUUkwyX0VOVkxBTlBPTF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMl9DVFJMMl9FTlZMQU5QT0xfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yX0NUUkwyX1ZCUFJJX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yX0NUUkwyX1ZCUFJJX01BU0sgICAgMHhFCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yX0NUUkwyX1ZCUEVOX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yX0NUUkwyX1ZCUEVOX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yX0NUUkwzICAgIDB4MDczMworI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMl9DVFJMM19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMl9DVFJMM19NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OM19DVFJMMCAgICAweDA3MzQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjNfQ1RSTDBfTUJSX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OM19DVFJMMF9NQlJfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjNfQ1RSTDBfTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04zX0NUUkwwX01CUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjNfQ1RSTDEgICAgMHgwNzM1CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04zX0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04zX0NUUkwxX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04zX0NUUkwyICAgIDB4MDczNgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OM19DVFJMMl9NRVRFUklEWF9FWFRfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04zX0NUUkwyX01FVEVSSURYX0VYVF9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04zX0NUUkwyX01FVEVSSURYX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04zX0NUUkwyX01FVEVSSURYX01BU0sgICAgMHgzRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjNfQ1RSTDJfRU5WTEFOUE9MX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04zX0NUUkwyX0VOVkxBTlBPTF9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjNfQ1RSTDJfVkJQUklfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjNfQ1RSTDJfVkJQUklfTUFTSyAgICAweEUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjNfQ1RSTDJfVkJQRU5fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjNfQ1RSTDJfVkJQRU5fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjNfQ1RSTDMgICAgMHgwNzM3CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04zX0NUUkwzX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04zX0NUUkwzX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT040X0NUUkwwICAgIDB4MDczOAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9ONF9DVFJMMF9NQlJfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT040X0NUUkwwX01CUl9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9ONF9DVFJMMF9NQlJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjRfQ1RSTDBfTUJSX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9ONF9DVFJMMSAgICAweDA3MzkKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjRfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjRfQ1RSTDFfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjRfQ1RSTDIgICAgMHgwNzNhCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT040X0NUUkwyX01FVEVSSURYX0VYVF9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjRfQ1RSTDJfTUVURVJJRFhfRVhUX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjRfQ1RSTDJfTUVURVJJRFhfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjRfQ1RSTDJfTUVURVJJRFhfTUFTSyAgICAweDNFMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9ONF9DVFJMMl9FTlZMQU5QT0xfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjRfQ1RSTDJfRU5WTEFOUE9MX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9ONF9DVFJMMl9WQlBSSV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9ONF9DVFJMMl9WQlBSSV9NQVNLICAgIDB4RQorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9ONF9DVFJMMl9WQlBFTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9ONF9DVFJMMl9WQlBFTl9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9ONF9DVFJMMyAgICAweDA3M2IKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjRfQ1RSTDNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjRfQ1RSTDNfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjVfQ1RSTDAgICAgMHgwNzNjCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT041X0NUUkwwX01CUl9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjVfQ1RSTDBfTUJSX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT041X0NUUkwwX01CUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9ONV9DVFJMMF9NQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT041X0NUUkwxICAgIDB4MDczZAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9ONV9DVFJMMV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9ONV9DVFJMMV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9ONV9DVFJMMiAgICAweDA3M2UKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjVfQ1RSTDJfTUVURVJJRFhfRVhUX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9ONV9DVFJMMl9NRVRFUklEWF9FWFRfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9ONV9DVFJMMl9NRVRFUklEWF9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9ONV9DVFJMMl9NRVRFUklEWF9NQVNLICAgIDB4M0UwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT041X0NUUkwyX0VOVkxBTlBPTF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9ONV9DVFJMMl9FTlZMQU5QT0xfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT041X0NUUkwyX1ZCUFJJX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT041X0NUUkwyX1ZCUFJJX01BU0sgICAgMHhFCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT041X0NUUkwyX1ZCUEVOX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT041X0NUUkwyX1ZCUEVOX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT041X0NUUkwzICAgIDB4MDczZgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9ONV9DVFJMM19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9ONV9DVFJMM19NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9ONl9DVFJMMCAgICAweDA3NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjZfQ1RSTDBfTUJSX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9ONl9DVFJMMF9NQlJfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjZfQ1RSTDBfTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT042X0NUUkwwX01CUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjZfQ1RSTDEgICAgMHgwNzQxCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT042X0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT042X0NUUkwxX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT042X0NUUkwyICAgIDB4MDc0MgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9ONl9DVFJMMl9NRVRFUklEWF9FWFRfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT042X0NUUkwyX01FVEVSSURYX0VYVF9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT042X0NUUkwyX01FVEVSSURYX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT042X0NUUkwyX01FVEVSSURYX01BU0sgICAgMHgzRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjZfQ1RSTDJfRU5WTEFOUE9MX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT042X0NUUkwyX0VOVkxBTlBPTF9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjZfQ1RSTDJfVkJQUklfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjZfQ1RSTDJfVkJQUklfTUFTSyAgICAweEUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjZfQ1RSTDJfVkJQRU5fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjZfQ1RSTDJfVkJQRU5fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjZfQ1RSTDMgICAgMHgwNzQzCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT042X0NUUkwzX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT042X0NUUkwzX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT043X0NUUkwwICAgIDB4MDc0NAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9ON19DVFJMMF9NQlJfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT043X0NUUkwwX01CUl9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9ON19DVFJMMF9NQlJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjdfQ1RSTDBfTUJSX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9ON19DVFJMMSAgICAweDA3NDUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjdfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjdfQ1RSTDFfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjdfQ1RSTDIgICAgMHgwNzQ2CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT043X0NUUkwyX01FVEVSSURYX0VYVF9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjdfQ1RSTDJfTUVURVJJRFhfRVhUX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjdfQ1RSTDJfTUVURVJJRFhfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjdfQ1RSTDJfTUVURVJJRFhfTUFTSyAgICAweDNFMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9ON19DVFJMMl9FTlZMQU5QT0xfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjdfQ1RSTDJfRU5WTEFOUE9MX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9ON19DVFJMMl9WQlBSSV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9ON19DVFJMMl9WQlBSSV9NQVNLICAgIDB4RQorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9ON19DVFJMMl9WQlBFTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9ON19DVFJMMl9WQlBFTl9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9ON19DVFJMMyAgICAweDA3NDcKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjdfQ1RSTDNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjdfQ1RSTDNfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjhfQ1RSTDAgICAgMHgwNzQ4CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT044X0NUUkwwX01CUl9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjhfQ1RSTDBfTUJSX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT044X0NUUkwwX01CUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OOF9DVFJMMF9NQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT044X0NUUkwxICAgIDB4MDc0OQorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OOF9DVFJMMV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OOF9DVFJMMV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OOF9DVFJMMiAgICAweDA3NGEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjhfQ1RSTDJfTUVURVJJRFhfRVhUX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OOF9DVFJMMl9NRVRFUklEWF9FWFRfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OOF9DVFJMMl9NRVRFUklEWF9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OOF9DVFJMMl9NRVRFUklEWF9NQVNLICAgIDB4M0UwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT044X0NUUkwyX0VOVkxBTlBPTF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OOF9DVFJMMl9FTlZMQU5QT0xfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT044X0NUUkwyX1ZCUFJJX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT044X0NUUkwyX1ZCUFJJX01BU0sgICAgMHhFCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT044X0NUUkwyX1ZCUEVOX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT044X0NUUkwyX1ZCUEVOX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT044X0NUUkwzICAgIDB4MDc0YgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OOF9DVFJMM19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OOF9DVFJMM19NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OOV9DVFJMMCAgICAweDA3NGMKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjlfQ1RSTDBfTUJSX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OOV9DVFJMMF9NQlJfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjlfQ1RSTDBfTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT045X0NUUkwwX01CUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjlfQ1RSTDEgICAgMHgwNzRkCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT045X0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT045X0NUUkwxX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT045X0NUUkwyICAgIDB4MDc0ZQorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OOV9DVFJMMl9NRVRFUklEWF9FWFRfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT045X0NUUkwyX01FVEVSSURYX0VYVF9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT045X0NUUkwyX01FVEVSSURYX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT045X0NUUkwyX01FVEVSSURYX01BU0sgICAgMHgzRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjlfQ1RSTDJfRU5WTEFOUE9MX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT045X0NUUkwyX0VOVkxBTlBPTF9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjlfQ1RSTDJfVkJQUklfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjlfQ1RSTDJfVkJQUklfTUFTSyAgICAweEUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjlfQ1RSTDJfVkJQRU5fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjlfQ1RSTDJfVkJQRU5fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjlfQ1RSTDMgICAgMHgwNzRmCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT045X0NUUkwzX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT045X0NUUkwzX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xMF9DVFJMMCAgICAweDA3NTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjEwX0NUUkwwX01CUl9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjEwX0NUUkwwX01CUl9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTBfQ1RSTDBfTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xMF9DVFJMMF9NQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xMF9DVFJMMSAgICAweDA3NTEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjEwX0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xMF9DVFJMMV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTBfQ1RSTDIgICAgMHgwNzUyCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xMF9DVFJMMl9NRVRFUklEWF9FWFRfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xMF9DVFJMMl9NRVRFUklEWF9FWFRfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTBfQ1RSTDJfTUVURVJJRFhfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjEwX0NUUkwyX01FVEVSSURYX01BU0sgICAgMHgzRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjEwX0NUUkwyX0VOVkxBTlBPTF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTBfQ1RSTDJfRU5WTEFOUE9MX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTBfQ1RSTDJfVkJQUklfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjEwX0NUUkwyX1ZCUFJJX01BU0sgICAgMHhFCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xMF9DVFJMMl9WQlBFTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTBfQ1RSTDJfVkJQRU5fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjEwX0NUUkwzICAgIDB4MDc1MworI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTBfQ1RSTDNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjEwX0NUUkwzX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xMV9DVFJMMCAgICAweDA3NTQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjExX0NUUkwwX01CUl9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjExX0NUUkwwX01CUl9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTFfQ1RSTDBfTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xMV9DVFJMMF9NQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xMV9DVFJMMSAgICAweDA3NTUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjExX0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xMV9DVFJMMV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTFfQ1RSTDIgICAgMHgwNzU2CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xMV9DVFJMMl9NRVRFUklEWF9FWFRfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xMV9DVFJMMl9NRVRFUklEWF9FWFRfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTFfQ1RSTDJfTUVURVJJRFhfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjExX0NUUkwyX01FVEVSSURYX01BU0sgICAgMHgzRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjExX0NUUkwyX0VOVkxBTlBPTF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTFfQ1RSTDJfRU5WTEFOUE9MX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTFfQ1RSTDJfVkJQUklfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjExX0NUUkwyX1ZCUFJJX01BU0sgICAgMHhFCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xMV9DVFJMMl9WQlBFTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTFfQ1RSTDJfVkJQRU5fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjExX0NUUkwzICAgIDB4MDc1NworI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTFfQ1RSTDNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjExX0NUUkwzX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xMl9DVFJMMCAgICAweDA3NTgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjEyX0NUUkwwX01CUl9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjEyX0NUUkwwX01CUl9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTJfQ1RSTDBfTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xMl9DVFJMMF9NQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xMl9DVFJMMSAgICAweDA3NTkKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjEyX0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xMl9DVFJMMV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTJfQ1RSTDIgICAgMHgwNzVhCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xMl9DVFJMMl9NRVRFUklEWF9FWFRfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xMl9DVFJMMl9NRVRFUklEWF9FWFRfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTJfQ1RSTDJfTUVURVJJRFhfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjEyX0NUUkwyX01FVEVSSURYX01BU0sgICAgMHgzRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjEyX0NUUkwyX0VOVkxBTlBPTF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTJfQ1RSTDJfRU5WTEFOUE9MX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTJfQ1RSTDJfVkJQUklfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjEyX0NUUkwyX1ZCUFJJX01BU0sgICAgMHhFCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xMl9DVFJMMl9WQlBFTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTJfQ1RSTDJfVkJQRU5fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjEyX0NUUkwzICAgIDB4MDc1YgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTJfQ1RSTDNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjEyX0NUUkwzX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xM19DVFJMMCAgICAweDA3NWMKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjEzX0NUUkwwX01CUl9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjEzX0NUUkwwX01CUl9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTNfQ1RSTDBfTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xM19DVFJMMF9NQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xM19DVFJMMSAgICAweDA3NWQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjEzX0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xM19DVFJMMV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTNfQ1RSTDIgICAgMHgwNzVlCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xM19DVFJMMl9NRVRFUklEWF9FWFRfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xM19DVFJMMl9NRVRFUklEWF9FWFRfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTNfQ1RSTDJfTUVURVJJRFhfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjEzX0NUUkwyX01FVEVSSURYX01BU0sgICAgMHgzRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjEzX0NUUkwyX0VOVkxBTlBPTF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTNfQ1RSTDJfRU5WTEFOUE9MX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTNfQ1RSTDJfVkJQUklfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjEzX0NUUkwyX1ZCUFJJX01BU0sgICAgMHhFCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xM19DVFJMMl9WQlBFTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTNfQ1RSTDJfVkJQRU5fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjEzX0NUUkwzICAgIDB4MDc1ZgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTNfQ1RSTDNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjEzX0NUUkwzX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xNF9DVFJMMCAgICAweDA3NjAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE0X0NUUkwwX01CUl9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE0X0NUUkwwX01CUl9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTRfQ1RSTDBfTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xNF9DVFJMMF9NQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xNF9DVFJMMSAgICAweDA3NjEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE0X0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xNF9DVFJMMV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTRfQ1RSTDIgICAgMHgwNzYyCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xNF9DVFJMMl9NRVRFUklEWF9FWFRfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xNF9DVFJMMl9NRVRFUklEWF9FWFRfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTRfQ1RSTDJfTUVURVJJRFhfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE0X0NUUkwyX01FVEVSSURYX01BU0sgICAgMHgzRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE0X0NUUkwyX0VOVkxBTlBPTF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTRfQ1RSTDJfRU5WTEFOUE9MX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTRfQ1RSTDJfVkJQUklfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE0X0NUUkwyX1ZCUFJJX01BU0sgICAgMHhFCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xNF9DVFJMMl9WQlBFTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTRfQ1RSTDJfVkJQRU5fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE0X0NUUkwzICAgIDB4MDc2MworI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTRfQ1RSTDNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE0X0NUUkwzX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xNV9DVFJMMCAgICAweDA3NjQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE1X0NUUkwwX01CUl9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE1X0NUUkwwX01CUl9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTVfQ1RSTDBfTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xNV9DVFJMMF9NQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xNV9DVFJMMSAgICAweDA3NjUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE1X0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xNV9DVFJMMV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTVfQ1RSTDIgICAgMHgwNzY2CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xNV9DVFJMMl9NRVRFUklEWF9FWFRfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xNV9DVFJMMl9NRVRFUklEWF9FWFRfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTVfQ1RSTDJfTUVURVJJRFhfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE1X0NUUkwyX01FVEVSSURYX01BU0sgICAgMHgzRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE1X0NUUkwyX0VOVkxBTlBPTF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTVfQ1RSTDJfRU5WTEFOUE9MX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTVfQ1RSTDJfVkJQUklfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE1X0NUUkwyX1ZCUFJJX01BU0sgICAgMHhFCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xNV9DVFJMMl9WQlBFTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTVfQ1RSTDJfVkJQRU5fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE1X0NUUkwzICAgIDB4MDc2NworI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTVfQ1RSTDNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE1X0NUUkwzX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xNl9DVFJMMCAgICAweDA3NjgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE2X0NUUkwwX01CUl9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE2X0NUUkwwX01CUl9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTZfQ1RSTDBfTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xNl9DVFJMMF9NQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xNl9DVFJMMSAgICAweDA3NjkKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE2X0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xNl9DVFJMMV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTZfQ1RSTDIgICAgMHgwNzZhCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xNl9DVFJMMl9NRVRFUklEWF9FWFRfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xNl9DVFJMMl9NRVRFUklEWF9FWFRfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTZfQ1RSTDJfTUVURVJJRFhfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE2X0NUUkwyX01FVEVSSURYX01BU0sgICAgMHgzRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE2X0NUUkwyX0VOVkxBTlBPTF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTZfQ1RSTDJfRU5WTEFOUE9MX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTZfQ1RSTDJfVkJQUklfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE2X0NUUkwyX1ZCUFJJX01BU0sgICAgMHhFCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xNl9DVFJMMl9WQlBFTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTZfQ1RSTDJfVkJQRU5fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE2X0NUUkwzICAgIDB4MDc2YgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTZfQ1RSTDNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE2X0NUUkwzX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xN19DVFJMMCAgICAweDA3NmMKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE3X0NUUkwwX01CUl9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE3X0NUUkwwX01CUl9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTdfQ1RSTDBfTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xN19DVFJMMF9NQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xN19DVFJMMSAgICAweDA3NmQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE3X0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xN19DVFJMMV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTdfQ1RSTDIgICAgMHgwNzZlCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xN19DVFJMMl9NRVRFUklEWF9FWFRfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xN19DVFJMMl9NRVRFUklEWF9FWFRfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTdfQ1RSTDJfTUVURVJJRFhfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE3X0NUUkwyX01FVEVSSURYX01BU0sgICAgMHgzRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE3X0NUUkwyX0VOVkxBTlBPTF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTdfQ1RSTDJfRU5WTEFOUE9MX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTdfQ1RSTDJfVkJQUklfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE3X0NUUkwyX1ZCUFJJX01BU0sgICAgMHhFCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xN19DVFJMMl9WQlBFTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTdfQ1RSTDJfVkJQRU5fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE3X0NUUkwzICAgIDB4MDc2ZgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTdfQ1RSTDNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE3X0NUUkwzX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xOF9DVFJMMCAgICAweDA3NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE4X0NUUkwwX01CUl9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE4X0NUUkwwX01CUl9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMThfQ1RSTDBfTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xOF9DVFJMMF9NQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xOF9DVFJMMSAgICAweDA3NzEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE4X0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xOF9DVFJMMV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMThfQ1RSTDIgICAgMHgwNzcyCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xOF9DVFJMMl9NRVRFUklEWF9FWFRfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xOF9DVFJMMl9NRVRFUklEWF9FWFRfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMThfQ1RSTDJfTUVURVJJRFhfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE4X0NUUkwyX01FVEVSSURYX01BU0sgICAgMHgzRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE4X0NUUkwyX0VOVkxBTlBPTF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMThfQ1RSTDJfRU5WTEFOUE9MX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMThfQ1RSTDJfVkJQUklfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE4X0NUUkwyX1ZCUFJJX01BU0sgICAgMHhFCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xOF9DVFJMMl9WQlBFTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMThfQ1RSTDJfVkJQRU5fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE4X0NUUkwzICAgIDB4MDc3MworI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMThfQ1RSTDNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE4X0NUUkwzX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xOV9DVFJMMCAgICAweDA3NzQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE5X0NUUkwwX01CUl9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE5X0NUUkwwX01CUl9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTlfQ1RSTDBfTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xOV9DVFJMMF9NQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xOV9DVFJMMSAgICAweDA3NzUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE5X0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xOV9DVFJMMV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTlfQ1RSTDIgICAgMHgwNzc2CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xOV9DVFJMMl9NRVRFUklEWF9FWFRfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xOV9DVFJMMl9NRVRFUklEWF9FWFRfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTlfQ1RSTDJfTUVURVJJRFhfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE5X0NUUkwyX01FVEVSSURYX01BU0sgICAgMHgzRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE5X0NUUkwyX0VOVkxBTlBPTF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTlfQ1RSTDJfRU5WTEFOUE9MX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTlfQ1RSTDJfVkJQUklfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE5X0NUUkwyX1ZCUFJJX01BU0sgICAgMHhFCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04xOV9DVFJMMl9WQlBFTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTlfQ1RSTDJfVkJQRU5fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE5X0NUUkwzICAgIDB4MDc3NworI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMTlfQ1RSTDNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjE5X0NUUkwzX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yMF9DVFJMMCAgICAweDA3NzgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjIwX0NUUkwwX01CUl9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjIwX0NUUkwwX01CUl9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjBfQ1RSTDBfTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yMF9DVFJMMF9NQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yMF9DVFJMMSAgICAweDA3NzkKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjIwX0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yMF9DVFJMMV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjBfQ1RSTDIgICAgMHgwNzdhCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yMF9DVFJMMl9NRVRFUklEWF9FWFRfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yMF9DVFJMMl9NRVRFUklEWF9FWFRfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjBfQ1RSTDJfTUVURVJJRFhfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjIwX0NUUkwyX01FVEVSSURYX01BU0sgICAgMHgzRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjIwX0NUUkwyX0VOVkxBTlBPTF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjBfQ1RSTDJfRU5WTEFOUE9MX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjBfQ1RSTDJfVkJQUklfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjIwX0NUUkwyX1ZCUFJJX01BU0sgICAgMHhFCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yMF9DVFJMMl9WQlBFTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjBfQ1RSTDJfVkJQRU5fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjIwX0NUUkwzICAgIDB4MDc3YgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjBfQ1RSTDNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjIwX0NUUkwzX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yMV9DVFJMMCAgICAweDA3N2MKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjIxX0NUUkwwX01CUl9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjIxX0NUUkwwX01CUl9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjFfQ1RSTDBfTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yMV9DVFJMMF9NQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yMV9DVFJMMSAgICAweDA3N2QKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjIxX0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yMV9DVFJMMV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjFfQ1RSTDIgICAgMHgwNzdlCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yMV9DVFJMMl9NRVRFUklEWF9FWFRfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yMV9DVFJMMl9NRVRFUklEWF9FWFRfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjFfQ1RSTDJfTUVURVJJRFhfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjIxX0NUUkwyX01FVEVSSURYX01BU0sgICAgMHgzRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjIxX0NUUkwyX0VOVkxBTlBPTF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjFfQ1RSTDJfRU5WTEFOUE9MX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjFfQ1RSTDJfVkJQUklfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjIxX0NUUkwyX1ZCUFJJX01BU0sgICAgMHhFCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yMV9DVFJMMl9WQlBFTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjFfQ1RSTDJfVkJQRU5fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjIxX0NUUkwzICAgIDB4MDc3ZgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjFfQ1RSTDNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjIxX0NUUkwzX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yMl9DVFJMMCAgICAweDA3ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjIyX0NUUkwwX01CUl9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjIyX0NUUkwwX01CUl9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjJfQ1RSTDBfTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yMl9DVFJMMF9NQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yMl9DVFJMMSAgICAweDA3ODEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjIyX0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yMl9DVFJMMV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjJfQ1RSTDIgICAgMHgwNzgyCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yMl9DVFJMMl9NRVRFUklEWF9FWFRfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yMl9DVFJMMl9NRVRFUklEWF9FWFRfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjJfQ1RSTDJfTUVURVJJRFhfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjIyX0NUUkwyX01FVEVSSURYX01BU0sgICAgMHgzRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjIyX0NUUkwyX0VOVkxBTlBPTF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjJfQ1RSTDJfRU5WTEFOUE9MX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjJfQ1RSTDJfVkJQUklfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjIyX0NUUkwyX1ZCUFJJX01BU0sgICAgMHhFCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yMl9DVFJMMl9WQlBFTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjJfQ1RSTDJfVkJQRU5fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjIyX0NUUkwzICAgIDB4MDc4MworI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjJfQ1RSTDNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjIyX0NUUkwzX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yM19DVFJMMCAgICAweDA3ODQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjIzX0NUUkwwX01CUl9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjIzX0NUUkwwX01CUl9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjNfQ1RSTDBfTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yM19DVFJMMF9NQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yM19DVFJMMSAgICAweDA3ODUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjIzX0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yM19DVFJMMV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjNfQ1RSTDIgICAgMHgwNzg2CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yM19DVFJMMl9NRVRFUklEWF9FWFRfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yM19DVFJMMl9NRVRFUklEWF9FWFRfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjNfQ1RSTDJfTUVURVJJRFhfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjIzX0NUUkwyX01FVEVSSURYX01BU0sgICAgMHgzRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjIzX0NUUkwyX0VOVkxBTlBPTF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjNfQ1RSTDJfRU5WTEFOUE9MX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjNfQ1RSTDJfVkJQUklfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjIzX0NUUkwyX1ZCUFJJX01BU0sgICAgMHhFCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yM19DVFJMMl9WQlBFTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjNfQ1RSTDJfVkJQRU5fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjIzX0NUUkwzICAgIDB4MDc4NworI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjNfQ1RSTDNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjIzX0NUUkwzX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yNF9DVFJMMCAgICAweDA3ODgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI0X0NUUkwwX01CUl9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI0X0NUUkwwX01CUl9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjRfQ1RSTDBfTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yNF9DVFJMMF9NQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yNF9DVFJMMSAgICAweDA3ODkKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI0X0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yNF9DVFJMMV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjRfQ1RSTDIgICAgMHgwNzhhCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yNF9DVFJMMl9NRVRFUklEWF9FWFRfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yNF9DVFJMMl9NRVRFUklEWF9FWFRfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjRfQ1RSTDJfTUVURVJJRFhfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI0X0NUUkwyX01FVEVSSURYX01BU0sgICAgMHgzRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI0X0NUUkwyX0VOVkxBTlBPTF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjRfQ1RSTDJfRU5WTEFOUE9MX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjRfQ1RSTDJfVkJQUklfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI0X0NUUkwyX1ZCUFJJX01BU0sgICAgMHhFCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yNF9DVFJMMl9WQlBFTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjRfQ1RSTDJfVkJQRU5fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI0X0NUUkwzICAgIDB4MDc4YgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjRfQ1RSTDNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI0X0NUUkwzX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yNV9DVFJMMCAgICAweDA3OGMKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI1X0NUUkwwX01CUl9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI1X0NUUkwwX01CUl9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjVfQ1RSTDBfTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yNV9DVFJMMF9NQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yNV9DVFJMMSAgICAweDA3OGQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI1X0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yNV9DVFJMMV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjVfQ1RSTDIgICAgMHgwNzhlCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yNV9DVFJMMl9NRVRFUklEWF9FWFRfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yNV9DVFJMMl9NRVRFUklEWF9FWFRfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjVfQ1RSTDJfTUVURVJJRFhfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI1X0NUUkwyX01FVEVSSURYX01BU0sgICAgMHgzRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI1X0NUUkwyX0VOVkxBTlBPTF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjVfQ1RSTDJfRU5WTEFOUE9MX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjVfQ1RSTDJfVkJQUklfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI1X0NUUkwyX1ZCUFJJX01BU0sgICAgMHhFCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yNV9DVFJMMl9WQlBFTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjVfQ1RSTDJfVkJQRU5fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI1X0NUUkwzICAgIDB4MDc4ZgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjVfQ1RSTDNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI1X0NUUkwzX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yNl9DVFJMMCAgICAweDA3OTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI2X0NUUkwwX01CUl9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI2X0NUUkwwX01CUl9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjZfQ1RSTDBfTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yNl9DVFJMMF9NQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yNl9DVFJMMSAgICAweDA3OTEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI2X0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yNl9DVFJMMV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjZfQ1RSTDIgICAgMHgwNzkyCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yNl9DVFJMMl9NRVRFUklEWF9FWFRfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yNl9DVFJMMl9NRVRFUklEWF9FWFRfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjZfQ1RSTDJfTUVURVJJRFhfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI2X0NUUkwyX01FVEVSSURYX01BU0sgICAgMHgzRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI2X0NUUkwyX0VOVkxBTlBPTF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjZfQ1RSTDJfRU5WTEFOUE9MX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjZfQ1RSTDJfVkJQUklfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI2X0NUUkwyX1ZCUFJJX01BU0sgICAgMHhFCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yNl9DVFJMMl9WQlBFTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjZfQ1RSTDJfVkJQRU5fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI2X0NUUkwzICAgIDB4MDc5MworI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjZfQ1RSTDNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI2X0NUUkwzX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yN19DVFJMMCAgICAweDA3OTQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI3X0NUUkwwX01CUl9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI3X0NUUkwwX01CUl9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjdfQ1RSTDBfTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yN19DVFJMMF9NQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yN19DVFJMMSAgICAweDA3OTUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI3X0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yN19DVFJMMV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjdfQ1RSTDIgICAgMHgwNzk2CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yN19DVFJMMl9NRVRFUklEWF9FWFRfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yN19DVFJMMl9NRVRFUklEWF9FWFRfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjdfQ1RSTDJfTUVURVJJRFhfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI3X0NUUkwyX01FVEVSSURYX01BU0sgICAgMHgzRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI3X0NUUkwyX0VOVkxBTlBPTF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjdfQ1RSTDJfRU5WTEFOUE9MX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjdfQ1RSTDJfVkJQUklfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI3X0NUUkwyX1ZCUFJJX01BU0sgICAgMHhFCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yN19DVFJMMl9WQlBFTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjdfQ1RSTDJfVkJQRU5fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI3X0NUUkwzICAgIDB4MDc5NworI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjdfQ1RSTDNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI3X0NUUkwzX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yOF9DVFJMMCAgICAweDA3OTgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI4X0NUUkwwX01CUl9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI4X0NUUkwwX01CUl9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjhfQ1RSTDBfTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yOF9DVFJMMF9NQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yOF9DVFJMMSAgICAweDA3OTkKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI4X0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yOF9DVFJMMV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjhfQ1RSTDIgICAgMHgwNzlhCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yOF9DVFJMMl9NRVRFUklEWF9FWFRfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yOF9DVFJMMl9NRVRFUklEWF9FWFRfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjhfQ1RSTDJfTUVURVJJRFhfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI4X0NUUkwyX01FVEVSSURYX01BU0sgICAgMHgzRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI4X0NUUkwyX0VOVkxBTlBPTF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjhfQ1RSTDJfRU5WTEFOUE9MX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjhfQ1RSTDJfVkJQUklfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI4X0NUUkwyX1ZCUFJJX01BU0sgICAgMHhFCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yOF9DVFJMMl9WQlBFTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjhfQ1RSTDJfVkJQRU5fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI4X0NUUkwzICAgIDB4MDc5YgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjhfQ1RSTDNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI4X0NUUkwzX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yOV9DVFJMMCAgICAweDA3OWMKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI5X0NUUkwwX01CUl9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI5X0NUUkwwX01CUl9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjlfQ1RSTDBfTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yOV9DVFJMMF9NQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yOV9DVFJMMSAgICAweDA3OWQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI5X0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yOV9DVFJMMV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjlfQ1RSTDIgICAgMHgwNzllCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yOV9DVFJMMl9NRVRFUklEWF9FWFRfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yOV9DVFJMMl9NRVRFUklEWF9FWFRfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjlfQ1RSTDJfTUVURVJJRFhfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI5X0NUUkwyX01FVEVSSURYX01BU0sgICAgMHgzRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI5X0NUUkwyX0VOVkxBTlBPTF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjlfQ1RSTDJfRU5WTEFOUE9MX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjlfQ1RSTDJfVkJQUklfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI5X0NUUkwyX1ZCUFJJX01BU0sgICAgMHhFCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04yOV9DVFJMMl9WQlBFTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjlfQ1RSTDJfVkJQRU5fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI5X0NUUkwzICAgIDB4MDc5ZgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMjlfQ1RSTDNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjI5X0NUUkwzX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04zMF9DVFJMMCAgICAweDA3YTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjMwX0NUUkwwX01CUl9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjMwX0NUUkwwX01CUl9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMzBfQ1RSTDBfTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04zMF9DVFJMMF9NQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04zMF9DVFJMMSAgICAweDA3YTEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjMwX0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04zMF9DVFJMMV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMzBfQ1RSTDIgICAgMHgwN2EyCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04zMF9DVFJMMl9NRVRFUklEWF9FWFRfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04zMF9DVFJMMl9NRVRFUklEWF9FWFRfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMzBfQ1RSTDJfTUVURVJJRFhfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjMwX0NUUkwyX01FVEVSSURYX01BU0sgICAgMHgzRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjMwX0NUUkwyX0VOVkxBTlBPTF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMzBfQ1RSTDJfRU5WTEFOUE9MX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMzBfQ1RSTDJfVkJQUklfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjMwX0NUUkwyX1ZCUFJJX01BU0sgICAgMHhFCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04zMF9DVFJMMl9WQlBFTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMzBfQ1RSTDJfVkJQRU5fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjMwX0NUUkwzICAgIDB4MDdhMworI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMzBfQ1RSTDNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjMwX0NUUkwzX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04zMV9DVFJMMCAgICAweDA3YTQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjMxX0NUUkwwX01CUl9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjMxX0NUUkwwX01CUl9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMzFfQ1RSTDBfTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04zMV9DVFJMMF9NQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04zMV9DVFJMMSAgICAweDA3YTUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjMxX0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04zMV9DVFJMMV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMzFfQ1RSTDIgICAgMHgwN2E2CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04zMV9DVFJMMl9NRVRFUklEWF9FWFRfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04zMV9DVFJMMl9NRVRFUklEWF9FWFRfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMzFfQ1RSTDJfTUVURVJJRFhfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjMxX0NUUkwyX01FVEVSSURYX01BU0sgICAgMHgzRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjMxX0NUUkwyX0VOVkxBTlBPTF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMzFfQ1RSTDJfRU5WTEFOUE9MX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMzFfQ1RSTDJfVkJQUklfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjMxX0NUUkwyX1ZCUFJJX01BU0sgICAgMHhFCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTUVNQkVSX0NPTkZJR1VSQVRJT04zMV9DVFJMMl9WQlBFTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMzFfQ1RSTDJfVkJQRU5fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjMxX0NUUkwzICAgIDB4MDdhNworI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OMzFfQ1RSTDNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NRU1CRVJfQ09ORklHVVJBVElPTjMxX0NUUkwzX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fQ1RSTCAgICAweDA3YTgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9DVFJMX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fQ1RSTF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX0lOR1JFU1MgICAgMHgwN2E5CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fSU5HUkVTU19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX0lOR1JFU1NfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX0FDQ0VQVF9GUkFNRV9UWVBFX0NUUkwwICAgIDB4MDdhYQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19GUkFNRV9UWVBFX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19GUkFNRV9UWVBFX01BU0sgICAgMHhDMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X0ZSQU1FX1RZUEVfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X0ZSQU1FX1RZUEVfTUFTSyAgICAweDMwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfRlJBTUVfVFlQRV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfRlJBTUVfVFlQRV9NQVNLICAgIDB4QzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X0ZSQU1FX1RZUEVfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfRlJBTUVfVFlQRV9NQVNLICAgIDB4MzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX0ZSQU1FX1RZUEVfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfRlJBTUVfVFlQRV9NQVNLICAgIDB4QzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfRlJBTUVfVFlQRV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9GUkFNRV9UWVBFX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9GUkFNRV9UWVBFX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX0ZSQU1FX1RZUEVfTUFTSyAgICAweEMKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfRlJBTUVfVFlQRV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9GUkFNRV9UWVBFX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fQUNDRVBUX0ZSQU1FX1RZUEVfQ1RSTDEgICAgMHgwN2FiCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9GUkFNRV9UWVBFX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9GUkFNRV9UWVBFX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9GUkFNRV9UWVBFX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X0ZSQU1FX1RZUEVfTUFTSyAgICAweEMKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfRlJBTUVfVFlQRV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9GUkFNRV9UWVBFX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlRfUEJGSURFTiAgICAweDA3YWMKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVF9QQkZJREVOX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfUEJGSURFTl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQwX1BCRklEICAgIDB4MDdhZAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9QQkZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9QQkZJRF9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUMV9QQkZJRCAgICAweDA3YWUKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfUEJGSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfUEJGSURfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDJfUEJGSUQgICAgMHgwN2FmCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX1BCRklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX1BCRklEX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQzX1BCRklEICAgIDB4MDdiMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19QQkZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19QQkZJRF9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUNF9QQkZJRCAgICAweDA3YjEKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfUEJGSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfUEJGSURfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDVfUEJGSUQgICAgMHgwN2IyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X1BCRklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X1BCRklEX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQ2X1BCRklEICAgIDB4MDdiMworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9QQkZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9QQkZJRF9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUN19QQkZJRCAgICAweDA3YjQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfUEJGSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfUEJGSURfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9FWFRfQ1RSTCAgICAweDA3YjUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl8xUF9SRU1BUktfQllQQVNTX1JFQUxLRUVQX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fMVBfUkVNQVJLX0JZUEFTU19SRUFMS0VFUF9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1ZJRDQwOTVfVFlQRV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1ZJRDQwOTVfVFlQRV9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1ZJRDBfVFlQRV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1ZJRDBfVFlQRV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX0VYVF9DVFJMMiAgICAweDA3YjYKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9FWFRfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9FWFRfQ1RSTDJfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDhfUEJGSUQgICAgMHgwN2I3CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X1BCRklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X1BCRklEX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQ5X1BCRklEICAgIDB4MDdiOAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9QQkZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9QQkZJRF9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUMTBfUEJGSUQgICAgMHgwN2I5CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9QQkZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfUEJGSURfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQ1ZMQU5fRFVNTVkwMCAgICAweDA3RTAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQ1ZMQU5fRFVNTVkwMSAgICAweDA3RTEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQ1ZMQU5fRFVNTVkwMiAgICAweDA3RTIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQ1ZMQU5fRFVNTVkwMyAgICAweDA3RTMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQ1ZMQU5fRFVNTVkwNCAgICAweDA3RTQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQ1ZMQU5fRFVNTVkwNSAgICAweDA3RTUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQ1ZMQU5fRFVNTVkwNiAgICAweDA3RTYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQ1ZMQU5fRFVNTVkwNyAgICAweDA3RTcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQ1ZMQU5fRFVNTVkwOCAgICAweDA3RTgKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQ1ZMQU5fRFVNTVkwOSAgICAweDA3RTkKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQ1ZMQU5fRFVNTVkxMCAgICAweDA3RUEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQ1ZMQU5fRFVNTVkxMSAgICAweDA3RUIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQ1ZMQU5fRFVNTVkxMiAgICAweDA3RUMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQ1ZMQU5fRFVNTVkxMyAgICAweDA3RUQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQ1ZMQU5fRFVNTVkxNCAgICAweDA3RUUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQ1ZMQU5fRFVNTVkxNSAgICAweDA3RUYKKworLyogKDE2J2gwODAwKWRwbV9yZWcgKi8KKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUk1BX0NUUkwwMCAgICAweDA4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwwMF9PUEVSQVRJT05fT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwwMF9PUEVSQVRJT05fTUFTSyAgICAweDE4MAorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDAwX0RJU0NBUkRfU1RPUk1fRklMVEVSX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMDBfRElTQ0FSRF9TVE9STV9GSUxURVJfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX1RSQVBfUFJJT1JJVFlfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfVFJBUF9QUklPUklUWV9NQVNLICAgIDB4MzgKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwwMF9LRUVQX0ZPUk1BVF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDAwX0tFRVBfRk9STUFUX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMDBfVkxBTl9MRUFLWV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDAwX1ZMQU5fTEVBS1lfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwwMF9QT1JUSVNPX0xFQUtZX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMDBfUE9SVElTT19MRUFLWV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19STUFfQ1RSTDAxICAgIDB4MDgwMQorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDAxX09QRVJBVElPTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDAxX09QRVJBVElPTl9NQVNLICAgIDB4MTgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMDFfRElTQ0FSRF9TVE9STV9GSUxURVJfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwwMV9ESVNDQVJEX1NUT1JNX0ZJTFRFUl9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwwMV9LRUVQX0ZPUk1BVF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDAxX0tFRVBfRk9STUFUX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMDFfVkxBTl9MRUFLWV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDAxX1ZMQU5fTEVBS1lfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwwMV9QT1JUSVNPX0xFQUtZX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMDFfUE9SVElTT19MRUFLWV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19STUFfQ1RSTDAyICAgIDB4MDgwMgorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDAyX09QRVJBVElPTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDAyX09QRVJBVElPTl9NQVNLICAgIDB4MTgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMDJfRElTQ0FSRF9TVE9STV9GSUxURVJfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwwMl9ESVNDQVJEX1NUT1JNX0ZJTFRFUl9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwwMl9LRUVQX0ZPUk1BVF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDAyX0tFRVBfRk9STUFUX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMDJfVkxBTl9MRUFLWV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDAyX1ZMQU5fTEVBS1lfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwwMl9QT1JUSVNPX0xFQUtZX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMDJfUE9SVElTT19MRUFLWV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19STUFfQ1RSTDAzICAgIDB4MDgwMworI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDAzX09QRVJBVElPTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDAzX09QRVJBVElPTl9NQVNLICAgIDB4MTgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMDNfRElTQ0FSRF9TVE9STV9GSUxURVJfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwwM19ESVNDQVJEX1NUT1JNX0ZJTFRFUl9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwwM19LRUVQX0ZPUk1BVF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDAzX0tFRVBfRk9STUFUX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMDNfVkxBTl9MRUFLWV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDAzX1ZMQU5fTEVBS1lfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwwM19QT1JUSVNPX0xFQUtZX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMDNfUE9SVElTT19MRUFLWV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19STUFfQ1RSTDA0ICAgIDB4MDgwNAorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDA0X09QRVJBVElPTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDA0X09QRVJBVElPTl9NQVNLICAgIDB4MTgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMDRfRElTQ0FSRF9TVE9STV9GSUxURVJfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwwNF9ESVNDQVJEX1NUT1JNX0ZJTFRFUl9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwwNF9LRUVQX0ZPUk1BVF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDA0X0tFRVBfRk9STUFUX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMDRfVkxBTl9MRUFLWV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDA0X1ZMQU5fTEVBS1lfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwwNF9QT1JUSVNPX0xFQUtZX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMDRfUE9SVElTT19MRUFLWV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19STUFfQ1RSTDA4ICAgIDB4MDgwOAorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDA4X09QRVJBVElPTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDA4X09QRVJBVElPTl9NQVNLICAgIDB4MTgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMDhfRElTQ0FSRF9TVE9STV9GSUxURVJfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwwOF9ESVNDQVJEX1NUT1JNX0ZJTFRFUl9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwwOF9LRUVQX0ZPUk1BVF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDA4X0tFRVBfRk9STUFUX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMDhfVkxBTl9MRUFLWV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDA4X1ZMQU5fTEVBS1lfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwwOF9QT1JUSVNPX0xFQUtZX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMDhfUE9SVElTT19MRUFLWV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19STUFfQ1RSTDBEICAgIDB4MDgwZAorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDBEX09QRVJBVElPTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDBEX09QRVJBVElPTl9NQVNLICAgIDB4MTgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMERfRElTQ0FSRF9TVE9STV9GSUxURVJfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwwRF9ESVNDQVJEX1NUT1JNX0ZJTFRFUl9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwwRF9LRUVQX0ZPUk1BVF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDBEX0tFRVBfRk9STUFUX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMERfVkxBTl9MRUFLWV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDBEX1ZMQU5fTEVBS1lfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwwRF9QT1JUSVNPX0xFQUtZX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMERfUE9SVElTT19MRUFLWV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19STUFfQ1RSTDBFICAgIDB4MDgwZQorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDBFX09QRVJBVElPTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDBFX09QRVJBVElPTl9NQVNLICAgIDB4MTgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMEVfRElTQ0FSRF9TVE9STV9GSUxURVJfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwwRV9ESVNDQVJEX1NUT1JNX0ZJTFRFUl9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwwRV9LRUVQX0ZPUk1BVF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDBFX0tFRVBfRk9STUFUX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMEVfVkxBTl9MRUFLWV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDBFX1ZMQU5fTEVBS1lfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwwRV9QT1JUSVNPX0xFQUtZX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMEVfUE9SVElTT19MRUFLWV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19STUFfQ1RSTDEwICAgIDB4MDgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDEwX09QRVJBVElPTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDEwX09QRVJBVElPTl9NQVNLICAgIDB4MTgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMTBfRElTQ0FSRF9TVE9STV9GSUxURVJfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwxMF9ESVNDQVJEX1NUT1JNX0ZJTFRFUl9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwxMF9LRUVQX0ZPUk1BVF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDEwX0tFRVBfRk9STUFUX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMTBfVkxBTl9MRUFLWV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDEwX1ZMQU5fTEVBS1lfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwxMF9QT1JUSVNPX0xFQUtZX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMTBfUE9SVElTT19MRUFLWV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19STUFfQ1RSTDExICAgIDB4MDgxMQorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDExX09QRVJBVElPTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDExX09QRVJBVElPTl9NQVNLICAgIDB4MTgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMTFfRElTQ0FSRF9TVE9STV9GSUxURVJfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwxMV9ESVNDQVJEX1NUT1JNX0ZJTFRFUl9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwxMV9LRUVQX0ZPUk1BVF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDExX0tFRVBfRk9STUFUX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMTFfVkxBTl9MRUFLWV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDExX1ZMQU5fTEVBS1lfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwxMV9QT1JUSVNPX0xFQUtZX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMTFfUE9SVElTT19MRUFLWV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19STUFfQ1RSTDEyICAgIDB4MDgxMgorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDEyX09QRVJBVElPTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDEyX09QRVJBVElPTl9NQVNLICAgIDB4MTgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMTJfRElTQ0FSRF9TVE9STV9GSUxURVJfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwxMl9ESVNDQVJEX1NUT1JNX0ZJTFRFUl9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwxMl9LRUVQX0ZPUk1BVF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDEyX0tFRVBfRk9STUFUX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMTJfVkxBTl9MRUFLWV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDEyX1ZMQU5fTEVBS1lfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwxMl9QT1JUSVNPX0xFQUtZX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMTJfUE9SVElTT19MRUFLWV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19STUFfQ1RSTDEzICAgIDB4MDgxMworI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDEzX09QRVJBVElPTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDEzX09QRVJBVElPTl9NQVNLICAgIDB4MTgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMTNfRElTQ0FSRF9TVE9STV9GSUxURVJfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwxM19ESVNDQVJEX1NUT1JNX0ZJTFRFUl9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwxM19LRUVQX0ZPUk1BVF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDEzX0tFRVBfRk9STUFUX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMTNfVkxBTl9MRUFLWV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDEzX1ZMQU5fTEVBS1lfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwxM19QT1JUSVNPX0xFQUtZX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMTNfUE9SVElTT19MRUFLWV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19STUFfQ1RSTDE4ICAgIDB4MDgxOAorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDE4X09QRVJBVElPTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDE4X09QRVJBVElPTl9NQVNLICAgIDB4MTgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMThfRElTQ0FSRF9TVE9STV9GSUxURVJfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwxOF9ESVNDQVJEX1NUT1JNX0ZJTFRFUl9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwxOF9LRUVQX0ZPUk1BVF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDE4X0tFRVBfRk9STUFUX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMThfVkxBTl9MRUFLWV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDE4X1ZMQU5fTEVBS1lfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwxOF9QT1JUSVNPX0xFQUtZX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMThfUE9SVElTT19MRUFLWV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19STUFfQ1RSTDFBICAgIDB4MDgxYQorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDFBX09QRVJBVElPTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDFBX09QRVJBVElPTl9NQVNLICAgIDB4MTgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMUFfRElTQ0FSRF9TVE9STV9GSUxURVJfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwxQV9ESVNDQVJEX1NUT1JNX0ZJTFRFUl9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwxQV9LRUVQX0ZPUk1BVF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDFBX0tFRVBfRk9STUFUX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMUFfVkxBTl9MRUFLWV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDFBX1ZMQU5fTEVBS1lfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwxQV9QT1JUSVNPX0xFQUtZX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMUFfUE9SVElTT19MRUFLWV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19STUFfQ1RSTDIwICAgIDB4MDgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDIwX09QRVJBVElPTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDIwX09QRVJBVElPTl9NQVNLICAgIDB4MTgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMjBfRElTQ0FSRF9TVE9STV9GSUxURVJfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwyMF9ESVNDQVJEX1NUT1JNX0ZJTFRFUl9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwyMF9LRUVQX0ZPUk1BVF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDIwX0tFRVBfRk9STUFUX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMjBfVkxBTl9MRUFLWV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDIwX1ZMQU5fTEVBS1lfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwyMF9QT1JUSVNPX0xFQUtZX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMjBfUE9SVElTT19MRUFLWV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19STUFfQ1RSTDIxICAgIDB4MDgyMQorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDIxX09QRVJBVElPTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDIxX09QRVJBVElPTl9NQVNLICAgIDB4MTgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMjFfRElTQ0FSRF9TVE9STV9GSUxURVJfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwyMV9ESVNDQVJEX1NUT1JNX0ZJTFRFUl9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwyMV9LRUVQX0ZPUk1BVF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDIxX0tFRVBfRk9STUFUX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMjFfVkxBTl9MRUFLWV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDIxX1ZMQU5fTEVBS1lfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwyMV9QT1JUSVNPX0xFQUtZX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMjFfUE9SVElTT19MRUFLWV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19STUFfQ1RSTDIyICAgIDB4MDgyMgorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDIyX09QRVJBVElPTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDIyX09QRVJBVElPTl9NQVNLICAgIDB4MTgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMjJfRElTQ0FSRF9TVE9STV9GSUxURVJfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwyMl9ESVNDQVJEX1NUT1JNX0ZJTFRFUl9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwyMl9LRUVQX0ZPUk1BVF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDIyX0tFRVBfRk9STUFUX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMjJfVkxBTl9MRUFLWV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTDIyX1ZMQU5fTEVBS1lfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkwyMl9QT1JUSVNPX0xFQUtZX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMMjJfUE9SVElTT19MRUFLWV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19STUFfQ1RSTF9DRFAgICAgMHgwODMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMX0NEUF9PUEVSQVRJT05fT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkxfQ0RQX09QRVJBVElPTl9NQVNLICAgIDB4MTgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMX0NEUF9ESVNDQVJEX1NUT1JNX0ZJTFRFUl9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTF9DRFBfRElTQ0FSRF9TVE9STV9GSUxURVJfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMX0NEUF9LRUVQX0ZPUk1BVF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTF9DRFBfS0VFUF9GT1JNQVRfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkxfQ0RQX1ZMQU5fTEVBS1lfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkxfQ0RQX1ZMQU5fTEVBS1lfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkxfQ0RQX1BPUlRJU09fTEVBS1lfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkxfQ0RQX1BPUlRJU09fTEVBS1lfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUk1BX0NUUkxfQ1NTVFAgICAgMHgwODMxCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMX0NTU1RQX09QRVJBVElPTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTF9DU1NUUF9PUEVSQVRJT05fTUFTSyAgICAweDE4MAorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTF9DU1NUUF9ESVNDQVJEX1NUT1JNX0ZJTFRFUl9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTF9DU1NUUF9ESVNDQVJEX1NUT1JNX0ZJTFRFUl9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkxfQ1NTVFBfS0VFUF9GT1JNQVRfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkxfQ1NTVFBfS0VFUF9GT1JNQVRfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkxfQ1NTVFBfVkxBTl9MRUFLWV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTF9DU1NUUF9WTEFOX0xFQUtZX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMX0NTU1RQX1BPUlRJU09fTEVBS1lfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkxfQ1NTVFBfUE9SVElTT19MRUFLWV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19STUFfQ1RSTF9MTERQICAgIDB4MDgzMgorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTF9MTERQX09QRVJBVElPTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTF9MTERQX09QRVJBVElPTl9NQVNLICAgIDB4MTgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMX0xMRFBfRElTQ0FSRF9TVE9STV9GSUxURVJfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkxfTExEUF9ESVNDQVJEX1NUT1JNX0ZJTFRFUl9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkxfTExEUF9LRUVQX0ZPUk1BVF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTF9MTERQX0tFRVBfRk9STUFUX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMX0xMRFBfVkxBTl9MRUFLWV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19STUFfQ1RSTF9MTERQX1ZMQU5fTEVBS1lfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0NUUkxfTExEUF9QT1JUSVNPX0xFQUtZX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JNQV9DVFJMX0xMRFBfUE9SVElTT19MRUFLWV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19STUFfTExEUF9FTiAgICAweDA4MzMKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0xMRFBfRU5fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1BX0xMRFBfRU5fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9QT1JUQkFTRURfUFJJT1JJVFlfQ1RSTDAgICAgMHgwODUxCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUE9SVEJBU0VEX1BSSU9SSVRZX0NUUkwwX1BPUlQzX1BSSU9SSVRZX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BPUlRCQVNFRF9QUklPUklUWV9DVFJMMF9QT1JUM19QUklPUklUWV9NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BPUlRCQVNFRF9QUklPUklUWV9DVFJMMF9QT1JUMl9QUklPUklUWV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BPUlRCQVNFRF9QUklPUklUWV9DVFJMMF9QT1JUMl9QUklPUklUWV9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUE9SVEJBU0VEX1BSSU9SSVRZX0NUUkwwX1BPUlQxX1BSSU9SSVRZX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUE9SVEJBU0VEX1BSSU9SSVRZX0NUUkwwX1BPUlQxX1BSSU9SSVRZX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BPUlRCQVNFRF9QUklPUklUWV9DVFJMMF9QT1JUMF9QUklPUklUWV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BPUlRCQVNFRF9QUklPUklUWV9DVFJMMF9QT1JUMF9QUklPUklUWV9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX1BPUlRCQVNFRF9QUklPUklUWV9DVFJMMSAgICAweDA4NTIKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QT1JUQkFTRURfUFJJT1JJVFlfQ1RSTDFfUE9SVDdfUFJJT1JJVFlfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUE9SVEJBU0VEX1BSSU9SSVRZX0NUUkwxX1BPUlQ3X1BSSU9SSVRZX01BU0sgICAgMHg3MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUE9SVEJBU0VEX1BSSU9SSVRZX0NUUkwxX1BPUlQ2X1BSSU9SSVRZX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUE9SVEJBU0VEX1BSSU9SSVRZX0NUUkwxX1BPUlQ2X1BSSU9SSVRZX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QT1JUQkFTRURfUFJJT1JJVFlfQ1RSTDFfUE9SVDVfUFJJT1JJVFlfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QT1JUQkFTRURfUFJJT1JJVFlfQ1RSTDFfUE9SVDVfUFJJT1JJVFlfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUE9SVEJBU0VEX1BSSU9SSVRZX0NUUkwxX1BPUlQ0X1BSSU9SSVRZX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUE9SVEJBU0VEX1BSSU9SSVRZX0NUUkwxX1BPUlQ0X1BSSU9SSVRZX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fUE9SVEJBU0VEX1BSSU9SSVRZX0NUUkwyICAgIDB4MDg1MworI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BPUlRCQVNFRF9QUklPUklUWV9DVFJMMl9QT1JUMTBfUFJJT1JJVFlfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QT1JUQkFTRURfUFJJT1JJVFlfQ1RSTDJfUE9SVDEwX1BSSU9SSVRZX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QT1JUQkFTRURfUFJJT1JJVFlfQ1RSTDJfUE9SVDlfUFJJT1JJVFlfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QT1JUQkFTRURfUFJJT1JJVFlfQ1RSTDJfUE9SVDlfUFJJT1JJVFlfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUE9SVEJBU0VEX1BSSU9SSVRZX0NUUkwyX1BPUlQ4X1BSSU9SSVRZX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUE9SVEJBU0VEX1BSSU9SSVRZX0NUUkwyX1BPUlQ4X1BSSU9SSVRZX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU0wX0NUUkwwICAgIDB4MDg1NQorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNMF9DVFJMMF9QT1JUM19QUklPUklUWV9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEJfUFJJT1JJVFlfSVRFTTBfQ1RSTDBfUE9SVDNfUFJJT1JJVFlfTUFTSyAgICAweDcwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEJfUFJJT1JJVFlfSVRFTTBfQ1RSTDBfUE9SVDJfUFJJT1JJVFlfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEJfUFJJT1JJVFlfSVRFTTBfQ1RSTDBfUE9SVDJfUFJJT1JJVFlfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNMF9DVFJMMF9QT1JUMV9QUklPUklUWV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNMF9DVFJMMF9QT1JUMV9QUklPUklUWV9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEJfUFJJT1JJVFlfSVRFTTBfQ1RSTDBfUE9SVDBfUFJJT1JJVFlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEJfUFJJT1JJVFlfSVRFTTBfQ1RSTDBfUE9SVDBfUFJJT1JJVFlfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9QUEJfUFJJT1JJVFlfSVRFTTBfQ1RSTDEgICAgMHgwODU2CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU0wX0NUUkwxX1BPUlQ3X1BSSU9SSVRZX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNMF9DVFJMMV9QT1JUN19QUklPUklUWV9NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNMF9DVFJMMV9QT1JUNl9QUklPUklUWV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNMF9DVFJMMV9QT1JUNl9QUklPUklUWV9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU0wX0NUUkwxX1BPUlQ1X1BSSU9SSVRZX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU0wX0NUUkwxX1BPUlQ1X1BSSU9SSVRZX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNMF9DVFJMMV9QT1JUNF9QUklPUklUWV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNMF9DVFJMMV9QT1JUNF9QUklPUklUWV9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX1BQQl9QUklPUklUWV9JVEVNMF9DVFJMMiAgICAweDA4NTcKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEJfUFJJT1JJVFlfSVRFTTBfQ1RSTDJfUE9SVDEwX1BSSU9SSVRZX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU0wX0NUUkwyX1BPUlQxMF9QUklPUklUWV9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU0wX0NUUkwyX1BPUlQ5X1BSSU9SSVRZX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU0wX0NUUkwyX1BPUlQ5X1BSSU9SSVRZX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNMF9DVFJMMl9QT1JUOF9QUklPUklUWV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNMF9DVFJMMl9QT1JUOF9QUklPUklUWV9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX1BQQl9QUklPUklUWV9JVEVNMV9DVFJMMCAgICAweDA4NTkKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEJfUFJJT1JJVFlfSVRFTTFfQ1RSTDBfUE9SVDNfUFJJT1JJVFlfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU0xX0NUUkwwX1BPUlQzX1BSSU9SSVRZX01BU0sgICAgMHg3MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU0xX0NUUkwwX1BPUlQyX1BSSU9SSVRZX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU0xX0NUUkwwX1BPUlQyX1BSSU9SSVRZX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEJfUFJJT1JJVFlfSVRFTTFfQ1RSTDBfUE9SVDFfUFJJT1JJVFlfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEJfUFJJT1JJVFlfSVRFTTFfQ1RSTDBfUE9SVDFfUFJJT1JJVFlfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU0xX0NUUkwwX1BPUlQwX1BSSU9SSVRZX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU0xX0NUUkwwX1BPUlQwX1BSSU9SSVRZX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU0xX0NUUkwxICAgIDB4MDg1YQorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNMV9DVFJMMV9QT1JUN19QUklPUklUWV9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEJfUFJJT1JJVFlfSVRFTTFfQ1RSTDFfUE9SVDdfUFJJT1JJVFlfTUFTSyAgICAweDcwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEJfUFJJT1JJVFlfSVRFTTFfQ1RSTDFfUE9SVDZfUFJJT1JJVFlfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEJfUFJJT1JJVFlfSVRFTTFfQ1RSTDFfUE9SVDZfUFJJT1JJVFlfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNMV9DVFJMMV9QT1JUNV9QUklPUklUWV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNMV9DVFJMMV9QT1JUNV9QUklPUklUWV9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEJfUFJJT1JJVFlfSVRFTTFfQ1RSTDFfUE9SVDRfUFJJT1JJVFlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEJfUFJJT1JJVFlfSVRFTTFfQ1RSTDFfUE9SVDRfUFJJT1JJVFlfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9QUEJfUFJJT1JJVFlfSVRFTTFfQ1RSTDIgICAgMHgwODViCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU0xX0NUUkwyX1BPUlQxMF9QUklPUklUWV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNMV9DVFJMMl9QT1JUMTBfUFJJT1JJVFlfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNMV9DVFJMMl9QT1JUOV9QUklPUklUWV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNMV9DVFJMMl9QT1JUOV9QUklPUklUWV9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEJfUFJJT1JJVFlfSVRFTTFfQ1RSTDJfUE9SVDhfUFJJT1JJVFlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEJfUFJJT1JJVFlfSVRFTTFfQ1RSTDJfUE9SVDhfUFJJT1JJVFlfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9QUEJfUFJJT1JJVFlfSVRFTTJfQ1RSTDAgICAgMHgwODVkCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU0yX0NUUkwwX1BPUlQzX1BSSU9SSVRZX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNMl9DVFJMMF9QT1JUM19QUklPUklUWV9NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNMl9DVFJMMF9QT1JUMl9QUklPUklUWV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNMl9DVFJMMF9QT1JUMl9QUklPUklUWV9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU0yX0NUUkwwX1BPUlQxX1BSSU9SSVRZX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU0yX0NUUkwwX1BPUlQxX1BSSU9SSVRZX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNMl9DVFJMMF9QT1JUMF9QUklPUklUWV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNMl9DVFJMMF9QT1JUMF9QUklPUklUWV9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX1BQQl9QUklPUklUWV9JVEVNMl9DVFJMMSAgICAweDA4NWUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEJfUFJJT1JJVFlfSVRFTTJfQ1RSTDFfUE9SVDdfUFJJT1JJVFlfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU0yX0NUUkwxX1BPUlQ3X1BSSU9SSVRZX01BU0sgICAgMHg3MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU0yX0NUUkwxX1BPUlQ2X1BSSU9SSVRZX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU0yX0NUUkwxX1BPUlQ2X1BSSU9SSVRZX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEJfUFJJT1JJVFlfSVRFTTJfQ1RSTDFfUE9SVDVfUFJJT1JJVFlfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEJfUFJJT1JJVFlfSVRFTTJfQ1RSTDFfUE9SVDVfUFJJT1JJVFlfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU0yX0NUUkwxX1BPUlQ0X1BSSU9SSVRZX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU0yX0NUUkwxX1BPUlQ0X1BSSU9SSVRZX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU0yX0NUUkwyICAgIDB4MDg1ZgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNMl9DVFJMMl9QT1JUMTBfUFJJT1JJVFlfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEJfUFJJT1JJVFlfSVRFTTJfQ1RSTDJfUE9SVDEwX1BSSU9SSVRZX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEJfUFJJT1JJVFlfSVRFTTJfQ1RSTDJfUE9SVDlfUFJJT1JJVFlfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEJfUFJJT1JJVFlfSVRFTTJfQ1RSTDJfUE9SVDlfUFJJT1JJVFlfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU0yX0NUUkwyX1BPUlQ4X1BSSU9SSVRZX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU0yX0NUUkwyX1BPUlQ4X1BSSU9SSVRZX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU0zX0NUUkwwICAgIDB4MDg2MQorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNM19DVFJMMF9QT1JUM19QUklPUklUWV9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEJfUFJJT1JJVFlfSVRFTTNfQ1RSTDBfUE9SVDNfUFJJT1JJVFlfTUFTSyAgICAweDcwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEJfUFJJT1JJVFlfSVRFTTNfQ1RSTDBfUE9SVDJfUFJJT1JJVFlfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEJfUFJJT1JJVFlfSVRFTTNfQ1RSTDBfUE9SVDJfUFJJT1JJVFlfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNM19DVFJMMF9QT1JUMV9QUklPUklUWV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNM19DVFJMMF9QT1JUMV9QUklPUklUWV9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEJfUFJJT1JJVFlfSVRFTTNfQ1RSTDBfUE9SVDBfUFJJT1JJVFlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEJfUFJJT1JJVFlfSVRFTTNfQ1RSTDBfUE9SVDBfUFJJT1JJVFlfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9QUEJfUFJJT1JJVFlfSVRFTTNfQ1RSTDEgICAgMHgwODYyCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU0zX0NUUkwxX1BPUlQ3X1BSSU9SSVRZX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNM19DVFJMMV9QT1JUN19QUklPUklUWV9NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNM19DVFJMMV9QT1JUNl9QUklPUklUWV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNM19DVFJMMV9QT1JUNl9QUklPUklUWV9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU0zX0NUUkwxX1BPUlQ1X1BSSU9SSVRZX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU0zX0NUUkwxX1BPUlQ1X1BSSU9SSVRZX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNM19DVFJMMV9QT1JUNF9QUklPUklUWV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNM19DVFJMMV9QT1JUNF9QUklPUklUWV9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX1BQQl9QUklPUklUWV9JVEVNM19DVFJMMiAgICAweDA4NjMKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9QUEJfUFJJT1JJVFlfSVRFTTNfQ1RSTDJfUE9SVDEwX1BSSU9SSVRZX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU0zX0NUUkwyX1BPUlQxMF9QUklPUklUWV9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU0zX0NUUkwyX1BPUlQ5X1BSSU9SSVRZX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fUFBCX1BSSU9SSVRZX0lURU0zX0NUUkwyX1BPUlQ5X1BSSU9SSVRZX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNM19DVFJMMl9QT1JUOF9QUklPUklUWV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNM19DVFJMMl9QT1JUOF9QUklPUklUWV9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfMVFfUFJJT1JJVFlfUkVNQVBQSU5HX0NUUkwwICAgIDB4MDg2NQorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfMVFfUFJJT1JJVFlfUkVNQVBQSU5HX0NUUkwwX1BSSU9SSVRZM19PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzFRX1BSSU9SSVRZX1JFTUFQUElOR19DVFJMMF9QUklPUklUWTNfTUFTSyAgICAweDcwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzFRX1BSSU9SSVRZX1JFTUFQUElOR19DVFJMMF9QUklPUklUWTJfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzFRX1BSSU9SSVRZX1JFTUFQUElOR19DVFJMMF9QUklPUklUWTJfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfMVFfUFJJT1JJVFlfUkVNQVBQSU5HX0NUUkwwX1BSSU9SSVRZMV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfMVFfUFJJT1JJVFlfUkVNQVBQSU5HX0NUUkwwX1BSSU9SSVRZMV9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzFRX1BSSU9SSVRZX1JFTUFQUElOR19DVFJMMF9QUklPUklUWTBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzFRX1BSSU9SSVRZX1JFTUFQUElOR19DVFJMMF9QUklPUklUWTBfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUU9TXzFRX1BSSU9SSVRZX1JFTUFQUElOR19DVFJMMSAgICAweDA4NjYKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzFRX1BSSU9SSVRZX1JFTUFQUElOR19DVFJMMV9QUklPUklUWTdfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU18xUV9QUklPUklUWV9SRU1BUFBJTkdfQ1RSTDFfUFJJT1JJVFk3X01BU0sgICAgMHg3MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU18xUV9QUklPUklUWV9SRU1BUFBJTkdfQ1RSTDFfUFJJT1JJVFk2X09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU18xUV9QUklPUklUWV9SRU1BUFBJTkdfQ1RSTDFfUFJJT1JJVFk2X01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzFRX1BSSU9SSVRZX1JFTUFQUElOR19DVFJMMV9QUklPUklUWTVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzFRX1BSSU9SSVRZX1JFTUFQUElOR19DVFJMMV9QUklPUklUWTVfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU18xUV9QUklPUklUWV9SRU1BUFBJTkdfQ1RSTDFfUFJJT1JJVFk0X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU18xUV9QUklPUklUWV9SRU1BUFBJTkdfQ1RSTDFfUFJJT1JJVFk0X01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19EU0NQX1RPX1BSSU9SSVRZX0NUUkwwICAgIDB4MDg2NworI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQM19QUklPUklUWV9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDNfUFJJT1JJVFlfTUFTSyAgICAweDcwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDJfUFJJT1JJVFlfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDJfUFJJT1JJVFlfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQMV9QUklPUklUWV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQMV9QUklPUklUWV9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDBfUFJJT1JJVFlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDBfUFJJT1JJVFlfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUU9TX0RTQ1BfVE9fUFJJT1JJVFlfQ1RSTDEgICAgMHgwODY4CisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1A3X1BSSU9SSVRZX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQN19QUklPUklUWV9NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQNl9QUklPUklUWV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQNl9QUklPUklUWV9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1A1X1BSSU9SSVRZX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1A1X1BSSU9SSVRZX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQNF9QUklPUklUWV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQNF9QUklPUklUWV9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfRFNDUF9UT19QUklPUklUWV9DVFJMMiAgICAweDA4NjkKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDExX1BSSU9SSVRZX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQMTFfUFJJT1JJVFlfTUFTSyAgICAweDcwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDEwX1BSSU9SSVRZX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1AxMF9QUklPUklUWV9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1A5X1BSSU9SSVRZX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1A5X1BSSU9SSVRZX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQOF9QUklPUklUWV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQOF9QUklPUklUWV9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfRFNDUF9UT19QUklPUklUWV9DVFJMMyAgICAweDA4NmEKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDE1X1BSSU9SSVRZX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQMTVfUFJJT1JJVFlfTUFTSyAgICAweDcwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDE0X1BSSU9SSVRZX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1AxNF9QUklPUklUWV9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1AxM19QUklPUklUWV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQMTNfUFJJT1JJVFlfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1AxMl9QUklPUklUWV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQMTJfUFJJT1JJVFlfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUU9TX0RTQ1BfVE9fUFJJT1JJVFlfQ1RSTDQgICAgMHgwODZiCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1AxOV9QUklPUklUWV9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDE5X1BSSU9SSVRZX01BU0sgICAgMHg3MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1AxOF9QUklPUklUWV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQMThfUFJJT1JJVFlfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQMTdfUFJJT1JJVFlfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDE3X1BSSU9SSVRZX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQMTZfUFJJT1JJVFlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDE2X1BSSU9SSVRZX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19EU0NQX1RPX1BSSU9SSVRZX0NUUkw1ICAgIDB4MDg2YworI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQMjNfUFJJT1JJVFlfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1AyM19QUklPUklUWV9NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQMjJfUFJJT1JJVFlfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDIyX1BSSU9SSVRZX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDIxX1BSSU9SSVRZX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1AyMV9QUklPUklUWV9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDIwX1BSSU9SSVRZX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1AyMF9QUklPUklUWV9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfRFNDUF9UT19QUklPUklUWV9DVFJMNiAgICAweDA4NmQKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDI3X1BSSU9SSVRZX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQMjdfUFJJT1JJVFlfTUFTSyAgICAweDcwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDI2X1BSSU9SSVRZX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1AyNl9QUklPUklUWV9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1AyNV9QUklPUklUWV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQMjVfUFJJT1JJVFlfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1AyNF9QUklPUklUWV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQMjRfUFJJT1JJVFlfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUU9TX0RTQ1BfVE9fUFJJT1JJVFlfQ1RSTDcgICAgMHgwODZlCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1AzMV9QUklPUklUWV9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDMxX1BSSU9SSVRZX01BU0sgICAgMHg3MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1AzMF9QUklPUklUWV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQMzBfUFJJT1JJVFlfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQMjlfUFJJT1JJVFlfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDI5X1BSSU9SSVRZX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQMjhfUFJJT1JJVFlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDI4X1BSSU9SSVRZX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19EU0NQX1RPX1BSSU9SSVRZX0NUUkw4ICAgIDB4MDg2ZgorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQMzVfUFJJT1JJVFlfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1AzNV9QUklPUklUWV9NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQMzRfUFJJT1JJVFlfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDM0X1BSSU9SSVRZX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDMzX1BSSU9SSVRZX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1AzM19QUklPUklUWV9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDMyX1BSSU9SSVRZX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1AzMl9QUklPUklUWV9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfRFNDUF9UT19QUklPUklUWV9DVFJMOSAgICAweDA4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDM5X1BSSU9SSVRZX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQMzlfUFJJT1JJVFlfTUFTSyAgICAweDcwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDM4X1BSSU9SSVRZX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1AzOF9QUklPUklUWV9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1AzN19QUklPUklUWV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQMzdfUFJJT1JJVFlfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1AzNl9QUklPUklUWV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQMzZfUFJJT1JJVFlfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUU9TX0RTQ1BfVE9fUFJJT1JJVFlfQ1RSTDEwICAgIDB4MDg3MQorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQNDNfUFJJT1JJVFlfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1A0M19QUklPUklUWV9NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQNDJfUFJJT1JJVFlfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDQyX1BSSU9SSVRZX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDQxX1BSSU9SSVRZX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1A0MV9QUklPUklUWV9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDQwX1BSSU9SSVRZX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1A0MF9QUklPUklUWV9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfRFNDUF9UT19QUklPUklUWV9DVFJMMTEgICAgMHgwODcyCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1A0N19QUklPUklUWV9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDQ3X1BSSU9SSVRZX01BU0sgICAgMHg3MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1A0Nl9QUklPUklUWV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQNDZfUFJJT1JJVFlfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQNDVfUFJJT1JJVFlfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDQ1X1BSSU9SSVRZX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQNDRfUFJJT1JJVFlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDQ0X1BSSU9SSVRZX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19EU0NQX1RPX1BSSU9SSVRZX0NUUkwxMiAgICAweDA4NzMKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDUxX1BSSU9SSVRZX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQNTFfUFJJT1JJVFlfTUFTSyAgICAweDcwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDUwX1BSSU9SSVRZX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1A1MF9QUklPUklUWV9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1A0OV9QUklPUklUWV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQNDlfUFJJT1JJVFlfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1A0OF9QUklPUklUWV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQNDhfUFJJT1JJVFlfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUU9TX0RTQ1BfVE9fUFJJT1JJVFlfQ1RSTDEzICAgIDB4MDg3NAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQNTVfUFJJT1JJVFlfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1A1NV9QUklPUklUWV9NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQNTRfUFJJT1JJVFlfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDU0X1BSSU9SSVRZX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDUzX1BSSU9SSVRZX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1A1M19QUklPUklUWV9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDUyX1BSSU9SSVRZX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1A1Ml9QUklPUklUWV9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfRFNDUF9UT19QUklPUklUWV9DVFJMMTQgICAgMHgwODc1CisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1A1OV9QUklPUklUWV9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDU5X1BSSU9SSVRZX01BU0sgICAgMHg3MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1A1OF9QUklPUklUWV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQNThfUFJJT1JJVFlfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQNTdfUFJJT1JJVFlfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDU3X1BSSU9SSVRZX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQNTZfUFJJT1JJVFlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDU2X1BSSU9SSVRZX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19EU0NQX1RPX1BSSU9SSVRZX0NUUkwxNSAgICAweDA4NzYKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDYzX1BSSU9SSVRZX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQNjNfUFJJT1JJVFlfTUFTSyAgICAweDcwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDYyX1BSSU9SSVRZX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1A2Ml9QUklPUklUWV9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1A2MV9QUklPUklUWV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQNjFfUFJJT1JJVFlfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1A2MF9QUklPUklUWV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQNjBfUFJJT1JJVFlfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUU9TX1BPUlRCQVNFRF9QUklPUklUWV9DVFJMMCAgICAweDA4NzcKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX1BPUlRCQVNFRF9QUklPUklUWV9DVFJMMF9QT1JUM19QUklPUklUWV9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX1BPUlRCQVNFRF9QUklPUklUWV9DVFJMMF9QT1JUM19QUklPUklUWV9NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfUE9SVEJBU0VEX1BSSU9SSVRZX0NUUkwwX1BPUlQyX1BSSU9SSVRZX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19QT1JUQkFTRURfUFJJT1JJVFlfQ1RSTDBfUE9SVDJfUFJJT1JJVFlfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfUE9SVEJBU0VEX1BSSU9SSVRZX0NUUkwwX1BPUlQxX1BSSU9SSVRZX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19QT1JUQkFTRURfUFJJT1JJVFlfQ1RSTDBfUE9SVDFfUFJJT1JJVFlfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19QT1JUQkFTRURfUFJJT1JJVFlfQ1RSTDBfUE9SVDBfUFJJT1JJVFlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX1BPUlRCQVNFRF9QUklPUklUWV9DVFJMMF9QT1JUMF9QUklPUklUWV9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfUE9SVEJBU0VEX1BSSU9SSVRZX0NUUkwxICAgIDB4MDg3OAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfUE9SVEJBU0VEX1BSSU9SSVRZX0NUUkwxX1BPUlQ3X1BSSU9SSVRZX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfUE9SVEJBU0VEX1BSSU9SSVRZX0NUUkwxX1BPUlQ3X1BSSU9SSVRZX01BU0sgICAgMHg3MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19QT1JUQkFTRURfUFJJT1JJVFlfQ1RSTDFfUE9SVDZfUFJJT1JJVFlfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX1BPUlRCQVNFRF9QUklPUklUWV9DVFJMMV9QT1JUNl9QUklPUklUWV9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19QT1JUQkFTRURfUFJJT1JJVFlfQ1RSTDFfUE9SVDVfUFJJT1JJVFlfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX1BPUlRCQVNFRF9QUklPUklUWV9DVFJMMV9QT1JUNV9QUklPUklUWV9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX1BPUlRCQVNFRF9QUklPUklUWV9DVFJMMV9QT1JUNF9QUklPUklUWV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfUE9SVEJBU0VEX1BSSU9SSVRZX0NUUkwxX1BPUlQ0X1BSSU9SSVRZX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RVTU1ZMDg3OSAgICAweDA4NzkKKyNkZWZpbmUgICAgUlRMODM2N0NfRFVNTVkwODc5X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RVTU1ZMDg3OV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfUE9SVEJBU0VEX1BSSU9SSVRZX0NUUkwyICAgIDB4MDg3YQorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfUE9SVEJBU0VEX1BSSU9SSVRZX0NUUkwyX1BPUlQxMF9QUklPUklUWV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfUE9SVEJBU0VEX1BSSU9SSVRZX0NUUkwyX1BPUlQxMF9QUklPUklUWV9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19QT1JUQkFTRURfUFJJT1JJVFlfQ1RSTDJfUE9SVDlfUFJJT1JJVFlfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX1BPUlRCQVNFRF9QUklPUklUWV9DVFJMMl9QT1JUOV9QUklPUklUWV9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX1BPUlRCQVNFRF9QUklPUklUWV9DVFJMMl9QT1JUOF9QUklPUklUWV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfUE9SVEJBU0VEX1BSSU9SSVRZX0NUUkwyX1BPUlQ4X1BSSU9SSVRZX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19JTlRFUk5BTF9QUklPUklUWV9ERUNJU0lPTl9DVFJMMCAgICAweDA4N2IKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX0lOVEVSTkFMX1BSSU9SSVRZX0RFQ0lTSU9OX0NUUkwwX1FPU19BQ0xfV0VJR0hUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19JTlRFUk5BTF9QUklPUklUWV9ERUNJU0lPTl9DVFJMMF9RT1NfQUNMX1dFSUdIVF9NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfSU5URVJOQUxfUFJJT1JJVFlfREVDSVNJT05fQ1RSTDBfUU9TX1BPUlRfV0VJR0hUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19JTlRFUk5BTF9QUklPUklUWV9ERUNJU0lPTl9DVFJMMF9RT1NfUE9SVF9XRUlHSFRfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19JTlRFUk5BTF9QUklPUklUWV9ERUNJU0lPTl9DVFJMMSAgICAweDA4N2MKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX0lOVEVSTkFMX1BSSU9SSVRZX0RFQ0lTSU9OX0NUUkwxX1FPU19ET1QxUV9XRUlHSFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX0lOVEVSTkFMX1BSSU9SSVRZX0RFQ0lTSU9OX0NUUkwxX1FPU19ET1QxUV9XRUlHSFRfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX0lOVEVSTkFMX1BSSU9SSVRZX0RFQ0lTSU9OX0NUUkwxX1FPU19EU0NQX1dFSUdIVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfSU5URVJOQUxfUFJJT1JJVFlfREVDSVNJT05fQ1RSTDFfUU9TX0RTQ1BfV0VJR0hUX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfSU5URVJOQUxfUFJJT1JJVFlfREVDSVNJT05fQ1RSTDIgICAgMHgwODdkCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19JTlRFUk5BTF9QUklPUklUWV9ERUNJU0lPTl9DVFJMMl9RT1NfQ1ZMQU5fV0VJR0hUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19JTlRFUk5BTF9QUklPUklUWV9ERUNJU0lPTl9DVFJMMl9RT1NfQ1ZMQU5fV0VJR0hUX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19JTlRFUk5BTF9QUklPUklUWV9ERUNJU0lPTl9DVFJMMl9RT1NfU1ZMQU5fV0VJR0hUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19JTlRFUk5BTF9QUklPUklUWV9ERUNJU0lPTl9DVFJMMl9RT1NfU1ZMQU5fV0VJR0hUX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfSU5URVJOQUxfUFJJT1JJVFlfREVDSVNJT05fQ1RSTDMgICAgMHgwODdlCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19JTlRFUk5BTF9QUklPUklUWV9ERUNJU0lPTl9DVFJMM19RT1NfU0FfV0VJR0hUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19JTlRFUk5BTF9QUklPUklUWV9ERUNJU0lPTl9DVFJMM19RT1NfU0FfV0VJR0hUX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19JTlRFUk5BTF9QUklPUklUWV9ERUNJU0lPTl9DVFJMM19RT1NfTFVURldEX1dFSUdIVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfSU5URVJOQUxfUFJJT1JJVFlfREVDSVNJT05fQ1RSTDNfUU9TX0xVVEZXRF9XRUlHSFRfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19QUklPUklUWV9SRU1BUFBJTkdfSU5fQ1BVX0NUUkwwICAgIDB4MDg3ZgorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfUFJJT1JJVFlfUkVNQVBQSU5HX0lOX0NQVV9DVFJMMF9QUklPUklUWTNfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19QUklPUklUWV9SRU1BUFBJTkdfSU5fQ1BVX0NUUkwwX1BSSU9SSVRZM19NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfUFJJT1JJVFlfUkVNQVBQSU5HX0lOX0NQVV9DVFJMMF9QUklPUklUWTJfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX1BSSU9SSVRZX1JFTUFQUElOR19JTl9DUFVfQ1RSTDBfUFJJT1JJVFkyX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX1BSSU9SSVRZX1JFTUFQUElOR19JTl9DUFVfQ1RSTDBfUFJJT1JJVFkxX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19QUklPUklUWV9SRU1BUFBJTkdfSU5fQ1BVX0NUUkwwX1BSSU9SSVRZMV9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX1BSSU9SSVRZX1JFTUFQUElOR19JTl9DUFVfQ1RSTDBfUFJJT1JJVFkwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19QUklPUklUWV9SRU1BUFBJTkdfSU5fQ1BVX0NUUkwwX1BSSU9SSVRZMF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfUFJJT1JJVFlfUkVNQVBQSU5HX0lOX0NQVV9DVFJMMSAgICAweDA4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX1BSSU9SSVRZX1JFTUFQUElOR19JTl9DUFVfQ1RSTDFfUFJJT1JJVFk3X09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfUFJJT1JJVFlfUkVNQVBQSU5HX0lOX0NQVV9DVFJMMV9QUklPUklUWTdfTUFTSyAgICAweDcwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX1BSSU9SSVRZX1JFTUFQUElOR19JTl9DUFVfQ1RSTDFfUFJJT1JJVFk2X09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19QUklPUklUWV9SRU1BUFBJTkdfSU5fQ1BVX0NUUkwxX1BSSU9SSVRZNl9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19QUklPUklUWV9SRU1BUFBJTkdfSU5fQ1BVX0NUUkwxX1BSSU9SSVRZNV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfUFJJT1JJVFlfUkVNQVBQSU5HX0lOX0NQVV9DVFJMMV9QUklPUklUWTVfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19QUklPUklUWV9SRU1BUFBJTkdfSU5fQ1BVX0NUUkwxX1BSSU9SSVRZNF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfUFJJT1JJVFlfUkVNQVBQSU5HX0lOX0NQVV9DVFJMMV9QUklPUklUWTRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUU9TX1RSQVBfUFJJT1JJVFkwICAgIDB4MDg4MQorI2RlZmluZSAgICBSVEw4MzY3Q19VTktOT1dOX01DX1BSSU9SVFlfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1VOS05PV05fTUNfUFJJT1JUWV9NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9QUklPSVJUWV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9QUklPSVJUWV9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX09BTV9QUklPSVJUWV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19PQU1fUFJJT0lSVFlfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RPVDFYX1BSSU9SVFlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRE9UMVhfUFJJT1JUWV9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfVFJBUF9QUklPUklUWTEgICAgMHgwODgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0RXODA1MV9UUkFQX1BSSV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19EVzgwNTFfVFJBUF9QUklfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRUxMRFBfVFJBUF9QUklfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFTExEUF9UUkFQX1BSSV9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NQVhfTEVOR1RIX0NGRyAgICAweDA4ODMKKyNkZWZpbmUgICAgUlRMODM2N0NfTUFYX0xFTkdUSF9HSUdBX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX01BWF9MRU5HVEhfR0lHQV9NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19NQVhfTEVOR1RIXzEwXzEwME1fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUFYX0xFTkdUSF8xMF8xMDBNX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NQVhfTEVOX1JYX1RYICAgIDB4MDg4NAorI2RlZmluZSAgICBSVEw4MzY3Q19NQVhfTEVOX1JYX1RYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01BWF9MRU5fUlhfVFhfTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUU9TX0lOVEVSTkFMX1BSSU9SSVRZX0RFQ0lTSU9OMl9DVFJMMCAgICAweDA4ODUKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX0lOVEVSTkFMX1BSSU9SSVRZX0RFQ0lTSU9OMl9DVFJMMF9RT1NfQUNMX1dFSUdIVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfSU5URVJOQUxfUFJJT1JJVFlfREVDSVNJT04yX0NUUkwwX1FPU19BQ0xfV0VJR0hUX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19JTlRFUk5BTF9QUklPUklUWV9ERUNJU0lPTjJfQ1RSTDBfUU9TX1BPUlRfV0VJR0hUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19JTlRFUk5BTF9QUklPUklUWV9ERUNJU0lPTjJfQ1RSTDBfUU9TX1BPUlRfV0VJR0hUX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfSU5URVJOQUxfUFJJT1JJVFlfREVDSVNJT04yX0NUUkwxICAgIDB4MDg4NgorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfSU5URVJOQUxfUFJJT1JJVFlfREVDSVNJT04yX0NUUkwxX1FPU19ET1QxUV9XRUlHSFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX0lOVEVSTkFMX1BSSU9SSVRZX0RFQ0lTSU9OMl9DVFJMMV9RT1NfRE9UMVFfV0VJR0hUX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19JTlRFUk5BTF9QUklPUklUWV9ERUNJU0lPTjJfQ1RSTDFfUU9TX0RTQ1BfV0VJR0hUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19JTlRFUk5BTF9QUklPUklUWV9ERUNJU0lPTjJfQ1RSTDFfUU9TX0RTQ1BfV0VJR0hUX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfSU5URVJOQUxfUFJJT1JJVFlfREVDSVNJT04yX0NUUkwyICAgIDB4MDg4NworI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfSU5URVJOQUxfUFJJT1JJVFlfREVDSVNJT04yX0NUUkwyX1FPU19DVkxBTl9XRUlHSFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX0lOVEVSTkFMX1BSSU9SSVRZX0RFQ0lTSU9OMl9DVFJMMl9RT1NfQ1ZMQU5fV0VJR0hUX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19JTlRFUk5BTF9QUklPUklUWV9ERUNJU0lPTjJfQ1RSTDJfUU9TX1NWTEFOX1dFSUdIVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfSU5URVJOQUxfUFJJT1JJVFlfREVDSVNJT04yX0NUUkwyX1FPU19TVkxBTl9XRUlHSFRfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19JTlRFUk5BTF9QUklPUklUWV9ERUNJU0lPTjJfQ1RSTDMgICAgMHgwODg4CisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19JTlRFUk5BTF9QUklPUklUWV9ERUNJU0lPTjJfQ1RSTDNfUU9TX1NBX1dFSUdIVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfSU5URVJOQUxfUFJJT1JJVFlfREVDSVNJT04yX0NUUkwzX1FPU19TQV9XRUlHSFRfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TX0lOVEVSTkFMX1BSSU9SSVRZX0RFQ0lTSU9OMl9DVFJMM19RT1NfTFVURldEX1dFSUdIVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfSU5URVJOQUxfUFJJT1JJVFlfREVDSVNJT04yX0NUUkwzX1FPU19MVVRGV0RfV0VJR0hUX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfSU5URVJOQUxfUFJJT1JJVFlfREVDSVNJT05fSURYICAgIDB4MDg4OQorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfSU5URVJOQUxfUFJJT1JJVFlfREVDSVNJT05fSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU19JTlRFUk5BTF9QUklPUklUWV9ERUNJU0lPTl9JRFhfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NQVhfTEVOR1RIX0NGR19FWFQgICAgMHgwODhhCisjZGVmaW5lICAgIFJUTDgzNjdDX01BWF9MRU5HVEhfR0lHQV9FWFRfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfTUFYX0xFTkdUSF9HSUdBX0VYVF9NQVNLICAgIDB4MzgKKyNkZWZpbmUgICAgUlRMODM2N0NfTUFYX0xFTkdUSF8xMF8xMDBNX0VYVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19NQVhfTEVOR1RIXzEwXzEwME1fRVhUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01BWF9MRU5fUlhfVFhfQ0ZHMCAgICAweDA4OGMKKyNkZWZpbmUgICAgUlRMODM2N0NfTUFYX0xFTl9SWF9UWF9DRkcwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01BWF9MRU5fUlhfVFhfQ0ZHMF9NQVNLICAgIDB4M0ZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NQVhfTEVOX1JYX1RYX0NGRzEgICAgMHgwODhkCisjZGVmaW5lICAgIFJUTDgzNjdDX01BWF9MRU5fUlhfVFhfQ0ZHMV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19NQVhfTEVOX1JYX1RYX0NGRzFfTUFTSyAgICAweDNGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVU5EQV9GTE9PRElOR19QTVNLICAgIDB4MDg5MAorI2RlZmluZSAgICBSVEw4MzY3Q19VTkRBX0ZMT09ESU5HX1BNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVU5EQV9GTE9PRElOR19QTVNLX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVU5NQ0FTVF9GTE9BRElOR19QTVNLICAgIDB4MDg5MQorI2RlZmluZSAgICBSVEw4MzY3Q19VTk1DQVNUX0ZMT0FESU5HX1BNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVU5NQ0FTVF9GTE9BRElOR19QTVNLX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQkNBU1RfRkxPQURJTkdfUE1TSyAgICAweDA4OTIKKyNkZWZpbmUgICAgUlRMODM2N0NfQkNBU1RfRkxPQURJTkdfUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19CQ0FTVF9GTE9BRElOR19QTVNLX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVF9UUlVOS19IQVNIX01BUFBJTkdfQ1RSTDIgICAgMHgwOGEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfVFJVTktfSEFTSF9NQVBQSU5HX0NUUkwyX0hBU0g3X09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0hBU0hfTUFQUElOR19DVFJMMl9IQVNIN19NQVNLICAgIDB4QzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0hBU0hfTUFQUElOR19DVFJMMl9IQVNINl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVF9UUlVOS19IQVNIX01BUFBJTkdfQ1RSTDJfSEFTSDZfTUFTSyAgICAweDMwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVF9UUlVOS19IQVNIX01BUFBJTkdfQ1RSTDJfSEFTSDVfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfVFJVTktfSEFTSF9NQVBQSU5HX0NUUkwyX0hBU0g1X01BU0sgICAgMHhDMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVF9UUlVOS19IQVNIX01BUFBJTkdfQ1RSTDJfSEFTSDRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVF9UUlVOS19IQVNIX01BUFBJTkdfQ1RSTDJfSEFTSDRfTUFTSyAgICAweDMwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0hBU0hfTUFQUElOR19DVFJMMl9IQVNIM19PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0hBU0hfTUFQUElOR19DVFJMMl9IQVNIM19NQVNLICAgIDB4QzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVF9UUlVOS19IQVNIX01BUFBJTkdfQ1RSTDJfSEFTSDJfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVF9UUlVOS19IQVNIX01BUFBJTkdfQ1RSTDJfSEFTSDJfTUFTSyAgICAweDMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfVFJVTktfSEFTSF9NQVBQSU5HX0NUUkwyX0hBU0gxX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfVFJVTktfSEFTSF9NQVBQSU5HX0NUUkwyX0hBU0gxX01BU0sgICAgMHhDCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfVFJVTktfSEFTSF9NQVBQSU5HX0NUUkwyX0hBU0gwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfVFJVTktfSEFTSF9NQVBQSU5HX0NUUkwyX0hBU0gwX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlRfVFJVTktfSEFTSF9NQVBQSU5HX0NUUkwzICAgIDB4MDhhMQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0hBU0hfTUFQUElOR19DVFJMM19IQVNIMTVfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfVFJVTktfSEFTSF9NQVBQSU5HX0NUUkwzX0hBU0gxNV9NQVNLICAgIDB4QzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0hBU0hfTUFQUElOR19DVFJMM19IQVNIMTRfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfVFJVTktfSEFTSF9NQVBQSU5HX0NUUkwzX0hBU0gxNF9NQVNLICAgIDB4MzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0hBU0hfTUFQUElOR19DVFJMM19IQVNIMTNfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfVFJVTktfSEFTSF9NQVBQSU5HX0NUUkwzX0hBU0gxM19NQVNLICAgIDB4QzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfVFJVTktfSEFTSF9NQVBQSU5HX0NUUkwzX0hBU0gxMl9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0hBU0hfTUFQUElOR19DVFJMM19IQVNIMTJfTUFTSyAgICAweDMwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0hBU0hfTUFQUElOR19DVFJMM19IQVNIMTFfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVF9UUlVOS19IQVNIX01BUFBJTkdfQ1RSTDNfSEFTSDExX01BU0sgICAgMHhDMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0hBU0hfTUFQUElOR19DVFJMM19IQVNIMTBfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVF9UUlVOS19IQVNIX01BUFBJTkdfQ1RSTDNfSEFTSDEwX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0hBU0hfTUFQUElOR19DVFJMM19IQVNIOV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0hBU0hfTUFQUElOR19DVFJMM19IQVNIOV9NQVNLICAgIDB4QworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0hBU0hfTUFQUElOR19DVFJMM19IQVNIOF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0hBU0hfTUFQUElOR19DVFJMM19IQVNIOF9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUX0lTT0xBVElPTl9QT1JUMF9NQVNLICAgIDB4MDhhMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX0lTT0xBVElPTl9QT1JUMF9NQVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfSVNPTEFUSU9OX1BPUlQwX01BU0tfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUX0lTT0xBVElPTl9QT1JUMV9NQVNLICAgIDB4MDhhMworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX0lTT0xBVElPTl9QT1JUMV9NQVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfSVNPTEFUSU9OX1BPUlQxX01BU0tfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUX0lTT0xBVElPTl9QT1JUMl9NQVNLICAgIDB4MDhhNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX0lTT0xBVElPTl9QT1JUMl9NQVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfSVNPTEFUSU9OX1BPUlQyX01BU0tfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUX0lTT0xBVElPTl9QT1JUM19NQVNLICAgIDB4MDhhNQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX0lTT0xBVElPTl9QT1JUM19NQVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfSVNPTEFUSU9OX1BPUlQzX01BU0tfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUX0lTT0xBVElPTl9QT1JUNF9NQVNLICAgIDB4MDhhNgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX0lTT0xBVElPTl9QT1JUNF9NQVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfSVNPTEFUSU9OX1BPUlQ0X01BU0tfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUX0lTT0xBVElPTl9QT1JUNV9NQVNLICAgIDB4MDhhNworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX0lTT0xBVElPTl9QT1JUNV9NQVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfSVNPTEFUSU9OX1BPUlQ1X01BU0tfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUX0lTT0xBVElPTl9QT1JUNl9NQVNLICAgIDB4MDhhOAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX0lTT0xBVElPTl9QT1JUNl9NQVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfSVNPTEFUSU9OX1BPUlQ2X01BU0tfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUX0lTT0xBVElPTl9QT1JUN19NQVNLICAgIDB4MDhhOQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX0lTT0xBVElPTl9QT1JUN19NQVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfSVNPTEFUSU9OX1BPUlQ3X01BU0tfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUX0lTT0xBVElPTl9QT1JUOF9NQVNLICAgIDB4MDhhYQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX0lTT0xBVElPTl9QT1JUOF9NQVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfSVNPTEFUSU9OX1BPUlQ4X01BU0tfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUX0lTT0xBVElPTl9QT1JUOV9NQVNLICAgIDB4MDhhYgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX0lTT0xBVElPTl9QT1JUOV9NQVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfSVNPTEFUSU9OX1BPUlQ5X01BU0tfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUX0lTT0xBVElPTl9QT1JUMTBfTUFTSyAgICAweDA4YWMKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVF9JU09MQVRJT05fUE9SVDEwX01BU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVF9JU09MQVRJT05fUE9SVDEwX01BU0tfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GT1JDRV9DVFJMICAgIDB4MDhiNAorI2RlZmluZSAgICBSVEw4MzY3Q19GT1JDRV9DVFJMX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZPUkNFX0NUUkxfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GT1JDRV9QT1JUMF9NQVNLICAgIDB4MDhiNQorI2RlZmluZSAgICBSVEw4MzY3Q19GT1JDRV9QT1JUMF9NQVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZPUkNFX1BPUlQwX01BU0tfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GT1JDRV9QT1JUMV9NQVNLICAgIDB4MDhiNgorI2RlZmluZSAgICBSVEw4MzY3Q19GT1JDRV9QT1JUMV9NQVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZPUkNFX1BPUlQxX01BU0tfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GT1JDRV9QT1JUMl9NQVNLICAgIDB4MDhiNworI2RlZmluZSAgICBSVEw4MzY3Q19GT1JDRV9QT1JUMl9NQVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZPUkNFX1BPUlQyX01BU0tfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GT1JDRV9QT1JUM19NQVNLICAgIDB4MDhiOAorI2RlZmluZSAgICBSVEw4MzY3Q19GT1JDRV9QT1JUM19NQVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZPUkNFX1BPUlQzX01BU0tfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GT1JDRV9QT1JUNF9NQVNLICAgIDB4MDhiOQorI2RlZmluZSAgICBSVEw4MzY3Q19GT1JDRV9QT1JUNF9NQVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZPUkNFX1BPUlQ0X01BU0tfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GT1JDRV9QT1JUNV9NQVNLICAgIDB4MDhiYQorI2RlZmluZSAgICBSVEw4MzY3Q19GT1JDRV9QT1JUNV9NQVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZPUkNFX1BPUlQ1X01BU0tfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GT1JDRV9QT1JUNl9NQVNLICAgIDB4MDhiYgorI2RlZmluZSAgICBSVEw4MzY3Q19GT1JDRV9QT1JUNl9NQVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZPUkNFX1BPUlQ2X01BU0tfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GT1JDRV9QT1JUN19NQVNLICAgIDB4MDhiYworI2RlZmluZSAgICBSVEw4MzY3Q19GT1JDRV9QT1JUN19NQVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZPUkNFX1BPUlQ3X01BU0tfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GT1JDRV9QT1JUOF9NQVNLICAgIDB4MDhiZAorI2RlZmluZSAgICBSVEw4MzY3Q19GT1JDRV9QT1JUOF9NQVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZPUkNFX1BPUlQ4X01BU0tfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GT1JDRV9QT1JUOV9NQVNLICAgIDB4MDhiZQorI2RlZmluZSAgICBSVEw4MzY3Q19GT1JDRV9QT1JUOV9NQVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZPUkNFX1BPUlQ5X01BU0tfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GT1JDRV9QT1JUMTBfTUFTSyAgICAweDA4YmYKKyNkZWZpbmUgICAgUlRMODM2N0NfRk9SQ0VfUE9SVDEwX01BU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRk9SQ0VfUE9SVDEwX01BU0tfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TT1VSQ0VfUE9SVF9QRVJNSVQgICAgMHgwOGM1CisjZGVmaW5lICAgIFJUTDgzNjdDX1NPVVJDRV9QT1JUX1BFUk1JVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TT1VSQ0VfUE9SVF9QRVJNSVRfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DQVNUX1ZMQU5fTEVBS1kgICAgMHgwOGM2CisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNBU1RfVkxBTl9MRUFLWV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DQVNUX1ZMQU5fTEVBS1lfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DQVNUX1BPUlRJU09fTEVBS1kgICAgMHgwOGM3CisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNBU1RfUE9SVElTT19MRUFLWV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DQVNUX1BPUlRJU09fTEVBS1lfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUX1NFQ1VSSVRZX0NUUkwgICAgMHgwOGM4CisjZGVmaW5lICAgIFJUTDgzNjdDX1VOS05PV05fVU5JQ0FTVF9EQV9CRUhBVkVfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfVU5LTk9XTl9VTklDQVNUX0RBX0JFSEFWRV9NQVNLICAgIDB4QzAKKyNkZWZpbmUgICAgUlRMODM2N0NfTFVUX0xFQVJOX09WRVJfQUNUX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0xVVF9MRUFSTl9PVkVSX0FDVF9NQVNLICAgIDB4MzAKKyNkZWZpbmUgICAgUlRMODM2N0NfVU5NQVRDSEVEX1NBX0JFSEFWRV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19VTk1BVENIRURfU0FfQkVIQVZFX01BU0sgICAgMHhDCisjZGVmaW5lICAgIFJUTDgzNjdDX1VOS05PV05fU0FfQkVIQVZFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1VOS05PV05fU0FfQkVIQVZFX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1VOS05PV05fSVBWNF9NVUxUSUNBU1RfQ1RSTDAgICAgMHgwOGM5CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X1VOS05PV05fSVA0X01DQVNUX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19VTktOT1dOX0lQNF9NQ0FTVF9NQVNLICAgIDB4QzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9VTktOT1dOX0lQNF9NQ0FTVF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfVU5LTk9XTl9JUDRfTUNBU1RfTUFTSyAgICAweDMwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfVU5LTk9XTl9JUDRfTUNBU1RfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X1VOS05PV05fSVA0X01DQVNUX01BU0sgICAgMHhDMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfVU5LTk9XTl9JUDRfTUNBU1RfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfVU5LTk9XTl9JUDRfTUNBU1RfTUFTSyAgICAweDMwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19VTktOT1dOX0lQNF9NQ0FTVF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19VTktOT1dOX0lQNF9NQ0FTVF9NQVNLICAgIDB4QzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfVU5LTk9XTl9JUDRfTUNBU1RfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfVU5LTk9XTl9JUDRfTUNBU1RfTUFTSyAgICAweDMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX1VOS05PV05fSVA0X01DQVNUX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX1VOS05PV05fSVA0X01DQVNUX01BU0sgICAgMHhDCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX1VOS05PV05fSVA0X01DQVNUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX1VOS05PV05fSVA0X01DQVNUX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1VOS05PV05fSVBWNF9NVUxUSUNBU1RfQ1RSTDEgICAgMHgwOGNhCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9VTktOT1dOX0lQNF9NQ0FTVF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfVU5LTk9XTl9JUDRfTUNBU1RfTUFTSyAgICAweDMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X1VOS05PV05fSVA0X01DQVNUX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X1VOS05PV05fSVA0X01DQVNUX01BU0sgICAgMHhDCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X1VOS05PV05fSVA0X01DQVNUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X1VOS05PV05fSVA0X01DQVNUX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1VOS05PV05fSVBWNl9NVUxUSUNBU1RfQ1RSTDAgICAgMHgwOGNiCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X1VOS05PV05fSVA2X01DQVNUX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19VTktOT1dOX0lQNl9NQ0FTVF9NQVNLICAgIDB4QzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9VTktOT1dOX0lQNl9NQ0FTVF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfVU5LTk9XTl9JUDZfTUNBU1RfTUFTSyAgICAweDMwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfVU5LTk9XTl9JUDZfTUNBU1RfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X1VOS05PV05fSVA2X01DQVNUX01BU0sgICAgMHhDMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfVU5LTk9XTl9JUDZfTUNBU1RfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfVU5LTk9XTl9JUDZfTUNBU1RfTUFTSyAgICAweDMwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19VTktOT1dOX0lQNl9NQ0FTVF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19VTktOT1dOX0lQNl9NQ0FTVF9NQVNLICAgIDB4QzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfVU5LTk9XTl9JUDZfTUNBU1RfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfVU5LTk9XTl9JUDZfTUNBU1RfTUFTSyAgICAweDMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX1VOS05PV05fSVA2X01DQVNUX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX1VOS05PV05fSVA2X01DQVNUX01BU0sgICAgMHhDCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX1VOS05PV05fSVA2X01DQVNUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX1VOS05PV05fSVA2X01DQVNUX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1VOS05PV05fSVBWNl9NVUxUSUNBU1RfQ1RSTDEgICAgMHgwOGNjCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9VTktOT1dOX0lQNl9NQ0FTVF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfVU5LTk9XTl9JUDZfTUNBU1RfTUFTSyAgICAweDMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X1VOS05PV05fSVA2X01DQVNUX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X1VOS05PV05fSVA2X01DQVNUX01BU0sgICAgMHhDCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X1VOS05PV05fSVA2X01DQVNUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X1VOS05PV05fSVA2X01DQVNUX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1VOS05PV05fTDJfTVVMVElDQVNUX0NUUkwwICAgIDB4MDhjZAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19VTktOT1dOX0wyX01DQVNUX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19VTktOT1dOX0wyX01DQVNUX01BU0sgICAgMHhDMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X1VOS05PV05fTDJfTUNBU1RfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X1VOS05PV05fTDJfTUNBU1RfTUFTSyAgICAweDMwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfVU5LTk9XTl9MMl9NQ0FTVF9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfVU5LTk9XTl9MMl9NQ0FTVF9NQVNLICAgIDB4QzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X1VOS05PV05fTDJfTUNBU1RfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfVU5LTk9XTl9MMl9NQ0FTVF9NQVNLICAgIDB4MzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX1VOS05PV05fTDJfTUNBU1RfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfVU5LTk9XTl9MMl9NQ0FTVF9NQVNLICAgIDB4QzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfVU5LTk9XTl9MMl9NQ0FTVF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9VTktOT1dOX0wyX01DQVNUX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9VTktOT1dOX0wyX01DQVNUX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX1VOS05PV05fTDJfTUNBU1RfTUFTSyAgICAweEMKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfVU5LTk9XTl9MMl9NQ0FTVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9VTktOT1dOX0wyX01DQVNUX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlRfVFJVTktfRFJPUF9DVFJMICAgIDB4MDhjZQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0RST1BfQ1RSTF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0RST1BfQ1RSTF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUX1RSVU5LX0NUUkwgICAgMHgwOGNmCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfVFJVTktfRFVNQl9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0RVTUJfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0ZMT09EX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfVFJVTktfRkxPT0RfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RQT1JUX0hBU0hfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfRFBPUlRfSEFTSF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1BPUlRfSEFTSF9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19TUE9SVF9IQVNIX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19ESVBfSEFTSF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19ESVBfSEFTSF9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0lQX0hBU0hfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU0lQX0hBU0hfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRE1BQ19IQVNIX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0RNQUNfSEFTSF9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19TTUFDX0hBU0hfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfU01BQ19IQVNIX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NQQV9IQVNIX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NQQV9IQVNIX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlRfVFJVTktfR1JPVVBfTUFTSyAgICAweDA4ZDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVF9UUlVOS19HUk9VUDJfTUFTS19PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0dST1VQMl9NQVNLX01BU0sgICAgMHgzMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVF9UUlVOS19HUk9VUDFfTUFTS19PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0dST1VQMV9NQVNLX01BU0sgICAgMHhGMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0dST1VQMF9NQVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfVFJVTktfR1JPVVAwX01BU0tfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVF9UUlVOS19GTE9XQ1RSTCAgICAweDA4ZDEKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fRkxPV0NUUkxfVEcyX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0VOX0ZMT1dDVFJMX1RHMl9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9GTE9XQ1RSTF9URzFfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fRkxPV0NUUkxfVEcxX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0VOX0ZMT1dDVFJMX1RHMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9GTE9XQ1RSTF9URzBfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVF9UUlVOS19IQVNIX01BUFBJTkdfQ1RSTDAgICAgMHgwOGQyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfVFJVTktfSEFTSF9NQVBQSU5HX0NUUkwwX0hBU0g3X09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0hBU0hfTUFQUElOR19DVFJMMF9IQVNIN19NQVNLICAgIDB4QzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0hBU0hfTUFQUElOR19DVFJMMF9IQVNINl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVF9UUlVOS19IQVNIX01BUFBJTkdfQ1RSTDBfSEFTSDZfTUFTSyAgICAweDMwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVF9UUlVOS19IQVNIX01BUFBJTkdfQ1RSTDBfSEFTSDVfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfVFJVTktfSEFTSF9NQVBQSU5HX0NUUkwwX0hBU0g1X01BU0sgICAgMHhDMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVF9UUlVOS19IQVNIX01BUFBJTkdfQ1RSTDBfSEFTSDRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVF9UUlVOS19IQVNIX01BUFBJTkdfQ1RSTDBfSEFTSDRfTUFTSyAgICAweDMwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0hBU0hfTUFQUElOR19DVFJMMF9IQVNIM19PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0hBU0hfTUFQUElOR19DVFJMMF9IQVNIM19NQVNLICAgIDB4QzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVF9UUlVOS19IQVNIX01BUFBJTkdfQ1RSTDBfSEFTSDJfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVF9UUlVOS19IQVNIX01BUFBJTkdfQ1RSTDBfSEFTSDJfTUFTSyAgICAweDMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfVFJVTktfSEFTSF9NQVBQSU5HX0NUUkwwX0hBU0gxX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfVFJVTktfSEFTSF9NQVBQSU5HX0NUUkwwX0hBU0gxX01BU0sgICAgMHhDCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfVFJVTktfSEFTSF9NQVBQSU5HX0NUUkwwX0hBU0gwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfVFJVTktfSEFTSF9NQVBQSU5HX0NUUkwwX0hBU0gwX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlRfVFJVTktfSEFTSF9NQVBQSU5HX0NUUkwxICAgIDB4MDhkMworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0hBU0hfTUFQUElOR19DVFJMMV9IQVNIMTVfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfVFJVTktfSEFTSF9NQVBQSU5HX0NUUkwxX0hBU0gxNV9NQVNLICAgIDB4QzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0hBU0hfTUFQUElOR19DVFJMMV9IQVNIMTRfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfVFJVTktfSEFTSF9NQVBQSU5HX0NUUkwxX0hBU0gxNF9NQVNLICAgIDB4MzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0hBU0hfTUFQUElOR19DVFJMMV9IQVNIMTNfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfVFJVTktfSEFTSF9NQVBQSU5HX0NUUkwxX0hBU0gxM19NQVNLICAgIDB4QzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfVFJVTktfSEFTSF9NQVBQSU5HX0NUUkwxX0hBU0gxMl9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0hBU0hfTUFQUElOR19DVFJMMV9IQVNIMTJfTUFTSyAgICAweDMwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0hBU0hfTUFQUElOR19DVFJMMV9IQVNIMTFfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVF9UUlVOS19IQVNIX01BUFBJTkdfQ1RSTDFfSEFTSDExX01BU0sgICAgMHhDMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0hBU0hfTUFQUElOR19DVFJMMV9IQVNIMTBfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVF9UUlVOS19IQVNIX01BUFBJTkdfQ1RSTDFfSEFTSDEwX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0hBU0hfTUFQUElOR19DVFJMMV9IQVNIOV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0hBU0hfTUFQUElOR19DVFJMMV9IQVNIOV9NQVNLICAgIDB4QworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0hBU0hfTUFQUElOR19DVFJMMV9IQVNIOF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX1RSVU5LX0hBU0hfTUFQUElOR19DVFJMMV9IQVNIOF9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19ET1NfQ0ZHICAgIDB4MDhkNAorI2RlZmluZSAgICBSVEw4MzY3Q19EUk9QX0lDTVBGUkFHTUVOVF9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19EUk9QX0lDTVBGUkFHTUVOVF9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RST1BfVENQRlJBR0VSUk9SX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0RST1BfVENQRlJBR0VSUk9SX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFJPUF9UQ1BTSE9SVEhEUl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19EUk9QX1RDUFNIT1JUSERSX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19EUk9QX1NZTjEwMjRfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfRFJPUF9TWU4xMDI0X01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19EUk9QX05VTExTQ0FOX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0RST1BfTlVMTFNDQU5fTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RST1BfWE1BU0NBTl9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19EUk9QX1hNQVNDQU5fTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RST1BfU1lORklOU0NBTl9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19EUk9QX1NZTkZJTlNDQU5fTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFJPUF9CTEFUQVRUQUNLU19PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19EUk9QX0JMQVRBVFRBQ0tTX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX0RST1BfTEFOREFUVEFDS1NfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfRFJPUF9MQU5EQVRUQUNLU19NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19EUk9QX0RBRVFTQV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19EUk9QX0RBRVFTQV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19VTktOT1dOX0wyX01VTFRJQ0FTVF9DVFJMMSAgICAweDA4ZDUKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX1VOS05PV05fTDJfTUNBU1RfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX1VOS05PV05fTDJfTUNBU1RfTUFTSyAgICAweDMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X1VOS05PV05fTDJfTUNBU1RfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfVU5LTk9XTl9MMl9NQ0FTVF9NQVNLICAgIDB4QworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9VTktOT1dOX0wyX01DQVNUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X1VOS05PV05fTDJfTUNBU1RfTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9FR1JFU1NfS0VFUF9DVFJMNCAgICAweDA4ZDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfVkxBTl9LRUVQX01BU0tfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfVkxBTl9LRUVQX01BU0tfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfVkxBTl9LRUVQX01BU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfVkxBTl9LRUVQX01BU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fRUdSRVNTX0tFRVBfQ1RSTDUgICAgMHgwOGQ3CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fRUdSRVNTX0tFRVBfQ1RSTDVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9FR1JFU1NfS0VFUF9DVFJMNV9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9FR1JFU1NfS0VFUF9DVFJMMF9FWFQgICAgMHgwOGQ4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX1ZMQU5fS0VFUF9NQVNLX0VYVF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9WTEFOX0tFRVBfTUFTS19FWFRfTUFTSyAgICAweDM4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX1ZMQU5fS0VFUF9NQVNLX0VYVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9WTEFOX0tFRVBfTUFTS19FWFRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9FR1JFU1NfS0VFUF9DVFJMMV9FWFQgICAgMHgwOGQ5CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX1ZMQU5fS0VFUF9NQVNLX0VYVF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19WTEFOX0tFRVBfTUFTS19FWFRfTUFTSyAgICAweDM4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX1ZMQU5fS0VFUF9NQVNLX0VYVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9WTEFOX0tFRVBfTUFTS19FWFRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9FR1JFU1NfS0VFUF9DVFJMMl9FWFQgICAgMHgwOGRhCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X1ZMQU5fS0VFUF9NQVNLX0VYVF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9WTEFOX0tFRVBfTUFTS19FWFRfTUFTSyAgICAweDM4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X1ZMQU5fS0VFUF9NQVNLX0VYVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9WTEFOX0tFRVBfTUFTS19FWFRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9FR1JFU1NfS0VFUF9DVFJMM19FWFQgICAgMHgwOGRiCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X1ZMQU5fS0VFUF9NQVNLX0VYVF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19WTEFOX0tFRVBfTUFTS19FWFRfTUFTSyAgICAweDM4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X1ZMQU5fS0VFUF9NQVNLX0VYVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9WTEFOX0tFRVBfTUFTS19FWFRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9FR1JFU1NfS0VFUF9DVFJMNF9FWFQgICAgMHgwOGRjCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X1ZMQU5fS0VFUF9NQVNLX0VYVF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9WTEFOX0tFRVBfTUFTS19FWFRfTUFTSyAgICAweDM4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X1ZMQU5fS0VFUF9NQVNLX0VYVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9WTEFOX0tFRVBfTUFTS19FWFRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9FR1JFU1NfS0VFUF9DVFJMNV9FWFQgICAgMHgwOGRkCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fRUdSRVNTX0tFRVBfQ1RSTDVfRVhUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fRUdSRVNTX0tFRVBfQ1RSTDVfRVhUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fRUdSRVNTX1RSQU5TX0NUUkwxMCAgICAweDA4ZGUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9FR1JFU1NfVFJBTlNfQ1RSTDEwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fRUdSRVNTX1RSQU5TX0NUUkwxMF9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZQR0FfVkVSX0NFTiAgICAweDA4ZTAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRlBHQV9USU1FX0NFTiAgICAweDA4ZTEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRlBHQV9EQVRFX0NFTiAgICAweDA4ZTIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUU9TX1BPUlRfUVVFVUVfTlVNQkVSX0NUUkwwICAgIDB4MDkwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19OVU1CRVJfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX05VTUJFUl9NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9OVU1CRVJfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfTlVNQkVSX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfTlVNQkVSX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX05VTUJFUl9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfTlVNQkVSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX05VTUJFUl9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfUE9SVF9RVUVVRV9OVU1CRVJfQ1RSTDEgICAgMHgwOTAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X05VTUJFUl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfTlVNQkVSX01BU0sgICAgMHg3MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X05VTUJFUl9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9OVU1CRVJfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9OVU1CRVJfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfTlVNQkVSX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9OVU1CRVJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfTlVNQkVSX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19QT1JUX1FVRVVFX05VTUJFUl9DVFJMMiAgICAweDA5MDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX05VTUJFUl9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfTlVNQkVSX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfTlVNQkVSX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X05VTUJFUl9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfTlVNQkVSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X05VTUJFUl9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfMVFfUFJJT1JJVFlfVE9fUUlEX0NUUkwwICAgIDB4MDkwNAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfMVFfUFJJT1JJVFlfVE9fUUlEX0NUUkwwX1BSSU9SSVRZM19UT19RSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU18xUV9QUklPUklUWV9UT19RSURfQ1RSTDBfUFJJT1JJVFkzX1RPX1FJRF9NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfMVFfUFJJT1JJVFlfVE9fUUlEX0NUUkwwX1BSSU9SSVRZMl9UT19RSURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzFRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMF9QUklPUklUWTJfVE9fUUlEX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzFRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMF9QUklPUklUWTFfVE9fUUlEX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU18xUV9QUklPUklUWV9UT19RSURfQ1RSTDBfUFJJT1JJVFkxX1RPX1FJRF9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzFRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMF9QUklPUklUWTBfVE9fUUlEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU18xUV9QUklPUklUWV9UT19RSURfQ1RSTDBfUFJJT1JJVFkwX1RPX1FJRF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfMVFfUFJJT1JJVFlfVE9fUUlEX0NUUkwxICAgIDB4MDkwNQorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfMVFfUFJJT1JJVFlfVE9fUUlEX0NUUkwxX1BSSU9SSVRZN19UT19RSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU18xUV9QUklPUklUWV9UT19RSURfQ1RSTDFfUFJJT1JJVFk3X1RPX1FJRF9NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfMVFfUFJJT1JJVFlfVE9fUUlEX0NUUkwxX1BSSU9SSVRZNl9UT19RSURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzFRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMV9QUklPUklUWTZfVE9fUUlEX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzFRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMV9QUklPUklUWTVfVE9fUUlEX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU18xUV9QUklPUklUWV9UT19RSURfQ1RSTDFfUFJJT1JJVFk1X1RPX1FJRF9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzFRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMV9QUklPUklUWTRfVE9fUUlEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU18xUV9QUklPUklUWV9UT19RSURfQ1RSTDFfUFJJT1JJVFk0X1RPX1FJRF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfMlFfUFJJT1JJVFlfVE9fUUlEX0NUUkwwICAgIDB4MDkwNgorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfMlFfUFJJT1JJVFlfVE9fUUlEX0NUUkwwX1BSSU9SSVRZM19UT19RSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU18yUV9QUklPUklUWV9UT19RSURfQ1RSTDBfUFJJT1JJVFkzX1RPX1FJRF9NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfMlFfUFJJT1JJVFlfVE9fUUlEX0NUUkwwX1BSSU9SSVRZMl9UT19RSURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzJRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMF9QUklPUklUWTJfVE9fUUlEX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzJRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMF9QUklPUklUWTFfVE9fUUlEX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU18yUV9QUklPUklUWV9UT19RSURfQ1RSTDBfUFJJT1JJVFkxX1RPX1FJRF9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzJRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMF9QUklPUklUWTBfVE9fUUlEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU18yUV9QUklPUklUWV9UT19RSURfQ1RSTDBfUFJJT1JJVFkwX1RPX1FJRF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfMlFfUFJJT1JJVFlfVE9fUUlEX0NUUkwxICAgIDB4MDkwNworI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfMlFfUFJJT1JJVFlfVE9fUUlEX0NUUkwxX1BSSU9SSVRZN19UT19RSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU18yUV9QUklPUklUWV9UT19RSURfQ1RSTDFfUFJJT1JJVFk3X1RPX1FJRF9NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfMlFfUFJJT1JJVFlfVE9fUUlEX0NUUkwxX1BSSU9SSVRZNl9UT19RSURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzJRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMV9QUklPUklUWTZfVE9fUUlEX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzJRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMV9QUklPUklUWTVfVE9fUUlEX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU18yUV9QUklPUklUWV9UT19RSURfQ1RSTDFfUFJJT1JJVFk1X1RPX1FJRF9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzJRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMV9QUklPUklUWTRfVE9fUUlEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU18yUV9QUklPUklUWV9UT19RSURfQ1RSTDFfUFJJT1JJVFk0X1RPX1FJRF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfM1FfUFJJT1JJVFlfVE9fUUlEX0NUUkwwICAgIDB4MDkwOAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfM1FfUFJJT1JJVFlfVE9fUUlEX0NUUkwwX1BSSU9SSVRZM19UT19RSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU18zUV9QUklPUklUWV9UT19RSURfQ1RSTDBfUFJJT1JJVFkzX1RPX1FJRF9NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfM1FfUFJJT1JJVFlfVE9fUUlEX0NUUkwwX1BSSU9SSVRZMl9UT19RSURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzNRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMF9QUklPUklUWTJfVE9fUUlEX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzNRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMF9QUklPUklUWTFfVE9fUUlEX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU18zUV9QUklPUklUWV9UT19RSURfQ1RSTDBfUFJJT1JJVFkxX1RPX1FJRF9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzNRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMF9QUklPUklUWTBfVE9fUUlEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU18zUV9QUklPUklUWV9UT19RSURfQ1RSTDBfUFJJT1JJVFkwX1RPX1FJRF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfM1FfUFJJT1JJVFlfVE9fUUlEX0NUUkwxICAgIDB4MDkwOQorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfM1FfUFJJT1JJVFlfVE9fUUlEX0NUUkwxX1BSSU9SSVRZN19UT19RSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU18zUV9QUklPUklUWV9UT19RSURfQ1RSTDFfUFJJT1JJVFk3X1RPX1FJRF9NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfM1FfUFJJT1JJVFlfVE9fUUlEX0NUUkwxX1BSSU9SSVRZNl9UT19RSURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzNRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMV9QUklPUklUWTZfVE9fUUlEX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzNRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMV9QUklPUklUWTVfVE9fUUlEX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU18zUV9QUklPUklUWV9UT19RSURfQ1RSTDFfUFJJT1JJVFk1X1RPX1FJRF9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzNRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMV9QUklPUklUWTRfVE9fUUlEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU18zUV9QUklPUklUWV9UT19RSURfQ1RSTDFfUFJJT1JJVFk0X1RPX1FJRF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfNFFfUFJJT1JJVFlfVE9fUUlEX0NUUkwwICAgIDB4MDkwYQorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfNFFfUFJJT1JJVFlfVE9fUUlEX0NUUkwwX1BSSU9SSVRZM19UT19RSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU180UV9QUklPUklUWV9UT19RSURfQ1RSTDBfUFJJT1JJVFkzX1RPX1FJRF9NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfNFFfUFJJT1JJVFlfVE9fUUlEX0NUUkwwX1BSSU9SSVRZMl9UT19RSURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzRRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMF9QUklPUklUWTJfVE9fUUlEX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzRRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMF9QUklPUklUWTFfVE9fUUlEX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU180UV9QUklPUklUWV9UT19RSURfQ1RSTDBfUFJJT1JJVFkxX1RPX1FJRF9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzRRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMF9QUklPUklUWTBfVE9fUUlEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU180UV9QUklPUklUWV9UT19RSURfQ1RSTDBfUFJJT1JJVFkwX1RPX1FJRF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfNFFfUFJJT1JJVFlfVE9fUUlEX0NUUkwxICAgIDB4MDkwYgorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfNFFfUFJJT1JJVFlfVE9fUUlEX0NUUkwxX1BSSU9SSVRZN19UT19RSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU180UV9QUklPUklUWV9UT19RSURfQ1RSTDFfUFJJT1JJVFk3X1RPX1FJRF9NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfNFFfUFJJT1JJVFlfVE9fUUlEX0NUUkwxX1BSSU9SSVRZNl9UT19RSURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzRRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMV9QUklPUklUWTZfVE9fUUlEX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzRRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMV9QUklPUklUWTVfVE9fUUlEX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU180UV9QUklPUklUWV9UT19RSURfQ1RSTDFfUFJJT1JJVFk1X1RPX1FJRF9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzRRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMV9QUklPUklUWTRfVE9fUUlEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU180UV9QUklPUklUWV9UT19RSURfQ1RSTDFfUFJJT1JJVFk0X1RPX1FJRF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfNVFfUFJJT1JJVFlfVE9fUUlEX0NUUkwwICAgIDB4MDkwYworI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfNVFfUFJJT1JJVFlfVE9fUUlEX0NUUkwwX1BSSU9SSVRZM19UT19RSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU181UV9QUklPUklUWV9UT19RSURfQ1RSTDBfUFJJT1JJVFkzX1RPX1FJRF9NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfNVFfUFJJT1JJVFlfVE9fUUlEX0NUUkwwX1BSSU9SSVRZMl9UT19RSURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzVRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMF9QUklPUklUWTJfVE9fUUlEX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzVRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMF9QUklPUklUWTFfVE9fUUlEX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU181UV9QUklPUklUWV9UT19RSURfQ1RSTDBfUFJJT1JJVFkxX1RPX1FJRF9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzVRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMF9QUklPUklUWTBfVE9fUUlEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU181UV9QUklPUklUWV9UT19RSURfQ1RSTDBfUFJJT1JJVFkwX1RPX1FJRF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfNVFfUFJJT1JJVFlfVE9fUUlEX0NUUkwxICAgIDB4MDkwZAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfNVFfUFJJT1JJVFlfVE9fUUlEX0NUUkwxX1BSSU9SSVRZN19UT19RSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU181UV9QUklPUklUWV9UT19RSURfQ1RSTDFfUFJJT1JJVFk3X1RPX1FJRF9NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfNVFfUFJJT1JJVFlfVE9fUUlEX0NUUkwxX1BSSU9SSVRZNl9UT19RSURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzVRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMV9QUklPUklUWTZfVE9fUUlEX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzVRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMV9QUklPUklUWTVfVE9fUUlEX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU181UV9QUklPUklUWV9UT19RSURfQ1RSTDFfUFJJT1JJVFk1X1RPX1FJRF9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzVRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMV9QUklPUklUWTRfVE9fUUlEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU181UV9QUklPUklUWV9UT19RSURfQ1RSTDFfUFJJT1JJVFk0X1RPX1FJRF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfNlFfUFJJT1JJVFlfVE9fUUlEX0NUUkwwICAgIDB4MDkwZQorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfNlFfUFJJT1JJVFlfVE9fUUlEX0NUUkwwX1BSSU9SSVRZM19UT19RSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU182UV9QUklPUklUWV9UT19RSURfQ1RSTDBfUFJJT1JJVFkzX1RPX1FJRF9NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfNlFfUFJJT1JJVFlfVE9fUUlEX0NUUkwwX1BSSU9SSVRZMl9UT19RSURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzZRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMF9QUklPUklUWTJfVE9fUUlEX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzZRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMF9QUklPUklUWTFfVE9fUUlEX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU182UV9QUklPUklUWV9UT19RSURfQ1RSTDBfUFJJT1JJVFkxX1RPX1FJRF9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzZRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMF9QUklPUklUWTBfVE9fUUlEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU182UV9QUklPUklUWV9UT19RSURfQ1RSTDBfUFJJT1JJVFkwX1RPX1FJRF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfNlFfUFJJT1JJVFlfVE9fUUlEX0NUUkwxICAgIDB4MDkwZgorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfNlFfUFJJT1JJVFlfVE9fUUlEX0NUUkwxX1BSSU9SSVRZN19UT19RSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU182UV9QUklPUklUWV9UT19RSURfQ1RSTDFfUFJJT1JJVFk3X1RPX1FJRF9NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfNlFfUFJJT1JJVFlfVE9fUUlEX0NUUkwxX1BSSU9SSVRZNl9UT19RSURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzZRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMV9QUklPUklUWTZfVE9fUUlEX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzZRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMV9QUklPUklUWTVfVE9fUUlEX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU182UV9QUklPUklUWV9UT19RSURfQ1RSTDFfUFJJT1JJVFk1X1RPX1FJRF9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzZRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMV9QUklPUklUWTRfVE9fUUlEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU182UV9QUklPUklUWV9UT19RSURfQ1RSTDFfUFJJT1JJVFk0X1RPX1FJRF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfN1FfUFJJT1JJVFlfVE9fUUlEX0NUUkwwICAgIDB4MDkxMAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfN1FfUFJJT1JJVFlfVE9fUUlEX0NUUkwwX1BSSU9SSVRZM19UT19RSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU183UV9QUklPUklUWV9UT19RSURfQ1RSTDBfUFJJT1JJVFkzX1RPX1FJRF9NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfN1FfUFJJT1JJVFlfVE9fUUlEX0NUUkwwX1BSSU9SSVRZMl9UT19RSURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzdRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMF9QUklPUklUWTJfVE9fUUlEX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzdRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMF9QUklPUklUWTFfVE9fUUlEX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU183UV9QUklPUklUWV9UT19RSURfQ1RSTDBfUFJJT1JJVFkxX1RPX1FJRF9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzdRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMF9QUklPUklUWTBfVE9fUUlEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU183UV9QUklPUklUWV9UT19RSURfQ1RSTDBfUFJJT1JJVFkwX1RPX1FJRF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfN1FfUFJJT1JJVFlfVE9fUUlEX0NUUkwxICAgIDB4MDkxMQorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfN1FfUFJJT1JJVFlfVE9fUUlEX0NUUkwxX1BSSU9SSVRZN19UT19RSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU183UV9QUklPUklUWV9UT19RSURfQ1RSTDFfUFJJT1JJVFk3X1RPX1FJRF9NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfN1FfUFJJT1JJVFlfVE9fUUlEX0NUUkwxX1BSSU9SSVRZNl9UT19RSURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzdRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMV9QUklPUklUWTZfVE9fUUlEX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzdRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMV9QUklPUklUWTVfVE9fUUlEX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU183UV9QUklPUklUWV9UT19RSURfQ1RSTDFfUFJJT1JJVFk1X1RPX1FJRF9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzdRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMV9QUklPUklUWTRfVE9fUUlEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU183UV9QUklPUklUWV9UT19RSURfQ1RSTDFfUFJJT1JJVFk0X1RPX1FJRF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfOFFfUFJJT1JJVFlfVE9fUUlEX0NUUkwwICAgIDB4MDkxMgorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfOFFfUFJJT1JJVFlfVE9fUUlEX0NUUkwwX1BSSU9SSVRZM19UT19RSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU184UV9QUklPUklUWV9UT19RSURfQ1RSTDBfUFJJT1JJVFkzX1RPX1FJRF9NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfOFFfUFJJT1JJVFlfVE9fUUlEX0NUUkwwX1BSSU9SSVRZMl9UT19RSURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzhRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMF9QUklPUklUWTJfVE9fUUlEX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzhRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMF9QUklPUklUWTFfVE9fUUlEX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU184UV9QUklPUklUWV9UT19RSURfQ1RSTDBfUFJJT1JJVFkxX1RPX1FJRF9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzhRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMF9QUklPUklUWTBfVE9fUUlEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU184UV9QUklPUklUWV9UT19RSURfQ1RSTDBfUFJJT1JJVFkwX1RPX1FJRF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfOFFfUFJJT1JJVFlfVE9fUUlEX0NUUkwxICAgIDB4MDkxMworI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfOFFfUFJJT1JJVFlfVE9fUUlEX0NUUkwxX1BSSU9SSVRZN19UT19RSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU184UV9QUklPUklUWV9UT19RSURfQ1RSTDFfUFJJT1JJVFk3X1RPX1FJRF9NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19RT1NfOFFfUFJJT1JJVFlfVE9fUUlEX0NUUkwxX1BSSU9SSVRZNl9UT19RSURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzhRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMV9QUklPUklUWTZfVE9fUUlEX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzhRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMV9QUklPUklUWTVfVE9fUUlEX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU184UV9QUklPUklUWV9UT19RSURfQ1RSTDFfUFJJT1JJVFk1X1RPX1FJRF9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU9TXzhRX1BSSU9SSVRZX1RPX1FJRF9DVFJMMV9QUklPUklUWTRfVE9fUUlEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1FPU184UV9QUklPUklUWV9UT19RSURfQ1RSTDFfUFJJT1JJVFk0X1RPX1FJRF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19ISUdIUFJJX0lORElDQVRPUiAgICAweDA5MTUKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX0lORElDQVRPUl9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX0lORElDQVRPUl9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X0lORElDQVRPUl9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9JTkRJQ0FUT1JfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9JTkRJQ0FUT1JfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfSU5ESUNBVE9SX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfSU5ESUNBVE9SX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X0lORElDQVRPUl9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfSU5ESUNBVE9SX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X0lORElDQVRPUl9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfSU5ESUNBVE9SX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X0lORElDQVRPUl9NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfSU5ESUNBVE9SX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X0lORElDQVRPUl9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfSU5ESUNBVE9SX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX0lORElDQVRPUl9NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9JTkRJQ0FUT1JfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfSU5ESUNBVE9SX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX0lORElDQVRPUl9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9JTkRJQ0FUT1JfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfSU5ESUNBVE9SX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX0lORElDQVRPUl9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19ISUdIUFJJX0NGRyAgICAweDA5MTYKKyNkZWZpbmUgICAgUlRMODM2N0NfSElHSFBSSV9DRkdfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSElHSFBSSV9DRkdfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlRfREVCVUdfSU5GT19DVFJMMCAgICAweDA5MTcKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfREVCVUdfSU5GT19PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9ERUJVR19JTkZPX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX0RFQlVHX0lORk9fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfREVCVUdfSU5GT19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVF9ERUJVR19JTkZPX0NUUkwxICAgIDB4MDkxOAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19ERUJVR19JTkZPX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX0RFQlVHX0lORk9fTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfREVCVUdfSU5GT19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9ERUJVR19JTkZPX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUX0RFQlVHX0lORk9fQ1RSTDIgICAgMHgwOTE5CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X0RFQlVHX0lORk9fT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfREVCVUdfSU5GT19NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9ERUJVR19JTkZPX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X0RFQlVHX0lORk9fTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlRfREVCVUdfSU5GT19DVFJMMyAgICAweDA5MWEKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfREVCVUdfSU5GT19PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19ERUJVR19JTkZPX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X0RFQlVHX0lORk9fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfREVCVUdfSU5GT19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVF9ERUJVR19JTkZPX0NUUkw0ICAgIDB4MDkxYgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9ERUJVR19JTkZPX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X0RFQlVHX0lORk9fTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfREVCVUdfSU5GT19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9ERUJVR19JTkZPX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUX0RFQlVHX0lORk9fQ1RSTDUgICAgMHgwOTFjCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9ERUJVR19JTkZPX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9ERUJVR19JTkZPX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUX0RFQlVHX0lORk9fQ1RSTDYgICAgMHgwOTFkCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X0RFQlVHX0lORElDQVRPUl9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfREVCVUdfSU5ESUNBVE9SX01BU0sgICAgMHhDMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X0RFQlVHX0lORElDQVRPUl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfREVCVUdfSU5ESUNBVE9SX01BU0sgICAgMHgzMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X0RFQlVHX0lORElDQVRPUl9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfREVCVUdfSU5ESUNBVE9SX01BU0sgICAgMHhDMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfREVCVUdfSU5ESUNBVE9SX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X0RFQlVHX0lORElDQVRPUl9NQVNLICAgIDB4MzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX0RFQlVHX0lORElDQVRPUl9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19ERUJVR19JTkRJQ0FUT1JfTUFTSyAgICAweEMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX0RFQlVHX0lORElDQVRPUl9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9ERUJVR19JTkRJQ0FUT1JfTUFTSyAgICAweDMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX0RFQlVHX0lORElDQVRPUl9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9ERUJVR19JTkRJQ0FUT1JfTUFTSyAgICAweEMKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfREVCVUdfSU5ESUNBVE9SX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX0RFQlVHX0lORElDQVRPUl9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUX0RFQlVHX0lORk9fQ1RSTDcgICAgMHgwOTFlCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9ERUJVR19JTkRJQ0FUT1JfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX0RFQlVHX0lORElDQVRPUl9NQVNLICAgIDB4MzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfREVCVUdfSU5ESUNBVE9SX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X0RFQlVHX0lORElDQVRPUl9NQVNLICAgIDB4QworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9ERUJVR19JTkRJQ0FUT1JfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfREVCVUdfSU5ESUNBVE9SX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDUlRMX0VHUkVTU19RVUVVRV9FTkFCTEVfQ1RSTDAgICAgMHgwOTMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX1FVRVVFX01BU0tfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfUVVFVUVfTUFTS19NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9RVUVVRV9NQVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX1FVRVVFX01BU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDUlRMX0VHUkVTU19RVUVVRV9FTkFCTEVfQ1RSTDEgICAgMHgwOTMxCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX1FVRVVFX01BU0tfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfUVVFVUVfTUFTS19NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9RVUVVRV9NQVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX1FVRVVFX01BU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDUlRMX0VHUkVTU19RVUVVRV9FTkFCTEVfQ1RSTDIgICAgMHgwOTMyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X1FVRVVFX01BU0tfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfUVVFVUVfTUFTS19NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9RVUVVRV9NQVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X1FVRVVFX01BU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDUlRMX0VHUkVTU19RVUVVRV9FTkFCTEVfQ1RSTDMgICAgMHgwOTMzCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X1FVRVVFX01BU0tfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfUVVFVUVfTUFTS19NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9RVUVVRV9NQVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X1FVRVVFX01BU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDUlRMX0VHUkVTU19RVUVVRV9FTkFCTEVfQ1RSTDQgICAgMHgwOTM0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X1FVRVVFX01BU0tfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfUVVFVUVfTUFTS19NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9RVUVVRV9NQVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X1FVRVVFX01BU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDUlRMX0VHUkVTU19RVUVVRV9FTkFCTEVfQ1RSTDUgICAgMHgwOTM1CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDUlRMX0VHUkVTU19RVUVVRV9FTkFCTEVfQ1RSTDVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NSVExfRUdSRVNTX1FVRVVFX0VOQUJMRV9DVFJMNV9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkxPV0NSVExfRUdSRVNTX1BPUlRfRU5BQkxFICAgIDB4MDkzOAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1JUTF9FR1JFU1NfUE9SVF9FTkFCTEVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NSVExfRUdSRVNTX1BPUlRfRU5BQkxFX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FQVZfQ1RSTCAgICAweDA5MzkKKyNkZWZpbmUgICAgUlRMODM2N0NfRUFWX1RSQVBfQ1BVX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0VBVl9UUkFQX0NQVV9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19FQVZfVFJBUF84MDUxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VBVl9UUkFQXzgwNTFfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVU5UQUdfRFNDUF9QUklfQ0ZHICAgIDB4MDkzYQorI2RlZmluZSAgICBSVEw4MzY3Q19VTlRBR19EU0NQX1BSSV9DRkdfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVU5UQUdfRFNDUF9QUklfQ0ZHX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fRUdSRVNTX0tFRVBfQ1RSTDAgICAgMHgwOTNiCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX1ZMQU5fS0VFUF9NQVNLX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX1ZMQU5fS0VFUF9NQVNLX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX1ZMQU5fS0VFUF9NQVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX1ZMQU5fS0VFUF9NQVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX0VHUkVTU19LRUVQX0NUUkwxICAgIDB4MDkzYworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19WTEFOX0tFRVBfTUFTS19PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19WTEFOX0tFRVBfTUFTS19NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9WTEFOX0tFRVBfTUFTS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9WTEFOX0tFRVBfTUFTS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9FR1JFU1NfS0VFUF9DVFJMMiAgICAweDA5M2QKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfVkxBTl9LRUVQX01BU0tfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfVkxBTl9LRUVQX01BU0tfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfVkxBTl9LRUVQX01BU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfVkxBTl9LRUVQX01BU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fRUdSRVNTX0tFRVBfQ1RSTDMgICAgMHgwOTNlCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X1ZMQU5fS0VFUF9NQVNLX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X1ZMQU5fS0VFUF9NQVNLX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X1ZMQU5fS0VFUF9NQVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X1ZMQU5fS0VFUF9NQVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX1RSQU5TUEFSRU5UX0VOX0NGRyAgICAweDA5M2YKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9UUkFOU1BBUkVOVF9FTl9DRkdfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9UUkFOU1BBUkVOVF9FTl9DRkdfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTBfSCAgICAweDA5NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTBfSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZMF9IX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTBfTCAgICAweDA5NDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTFfSCAgICAweDA5NDIKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTFfSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZMV9IX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTFfTCAgICAweDA5NDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTJfSCAgICAweDA5NDQKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTJfSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZMl9IX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTJfTCAgICAweDA5NDUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTNfSCAgICAweDA5NDYKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTNfSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZM19IX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTNfTCAgICAweDA5NDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTRfSCAgICAweDA5NDgKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTRfSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZNF9IX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTRfTCAgICAweDA5NDkKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTVfSCAgICAweDA5NGEKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTVfSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZNV9IX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTVfTCAgICAweDA5NGIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTZfSCAgICAweDA5NGMKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTZfSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZNl9IX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTZfTCAgICAweDA5NGQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTdfSCAgICAweDA5NGUKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTdfSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZN19IX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTdfTCAgICAweDA5NGYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWThfSCAgICAweDA5NTAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWThfSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZOF9IX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWThfTCAgICAweDA5NTEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTlfSCAgICAweDA5NTIKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTlfSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZOV9IX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTlfTCAgICAweDA5NTMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTEwX0ggICAgMHgwOTU0CisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlkxMF9IX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlkxMF9IX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTEwX0wgICAgMHgwOTU1CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlkxMV9IICAgIDB4MDk1NgorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZMTFfSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZMTFfSF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlkxMV9MICAgIDB4MDk1NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZMTJfSCAgICAweDA5NTgKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTEyX0hfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTEyX0hfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZMTJfTCAgICAweDA5NTkKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTEzX0ggICAgMHgwOTVhCisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlkxM19IX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlkxM19IX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTEzX0wgICAgMHgwOTViCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlkxNF9IICAgIDB4MDk1YworI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZMTRfSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZMTRfSF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlkxNF9MICAgIDB4MDk1ZAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZMTVfSCAgICAweDA5NWUKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTE1X0hfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTE1X0hfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZMTVfTCAgICAweDA5NWYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTE2X0ggICAgMHgwOTYwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlkxNl9IX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlkxNl9IX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTE2X0wgICAgMHgwOTYxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlkxN19IICAgIDB4MDk2MgorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZMTdfSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZMTdfSF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlkxN19MICAgIDB4MDk2MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZMThfSCAgICAweDA5NjQKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTE4X0hfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTE4X0hfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZMThfTCAgICAweDA5NjUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTE5X0ggICAgMHgwOTY2CisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlkxOV9IX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlkxOV9IX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTE5X0wgICAgMHgwOTY3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlkyMF9IICAgIDB4MDk2OAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZMjBfSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZMjBfSF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlkyMF9MICAgIDB4MDk2OQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZMjFfSCAgICAweDA5NmEKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTIxX0hfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTIxX0hfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZMjFfTCAgICAweDA5NmIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTIyX0ggICAgMHgwOTZjCisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlkyMl9IX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlkyMl9IX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTIyX0wgICAgMHgwOTZkCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlkyM19IICAgIDB4MDk2ZQorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZMjNfSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZMjNfSF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlkyM19MICAgIDB4MDk2ZgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZMjRfSCAgICAweDA5NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTI0X0hfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTI0X0hfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZMjRfTCAgICAweDA5NzEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTI1X0ggICAgMHgwOTcyCisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlkyNV9IX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlkyNV9IX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTI1X0wgICAgMHgwOTczCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlkyNl9IICAgIDB4MDk3NAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZMjZfSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZMjZfSF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlkyNl9MICAgIDB4MDk3NQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZMjdfSCAgICAweDA5NzYKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTI3X0hfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTI3X0hfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZMjdfTCAgICAweDA5NzcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTI4X0ggICAgMHgwOTc4CisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlkyOF9IX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlkyOF9IX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTI4X0wgICAgMHgwOTc5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlkyOV9IICAgIDB4MDk3YQorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZMjlfSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZMjlfSF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlkyOV9MICAgIDB4MDk3YgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZMzBfSCAgICAweDA5N2MKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTMwX0hfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTMwX0hfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZMzBfTCAgICAweDA5N2QKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTMxX0ggICAgMHgwOTdlCisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlkzMV9IX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlkzMV9IX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTMxX0wgICAgMHgwOTdmCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlkzMl9IICAgIDB4MDk4MAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZMzJfSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZMzJfSF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlkzMl9MICAgIDB4MDk4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZMzNfSCAgICAweDA5ODIKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTMzX0hfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTMzX0hfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZMzNfTCAgICAweDA5ODMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTM0X0ggICAgMHgwOTg0CisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlkzNF9IX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlkzNF9IX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTM0X0wgICAgMHgwOTg1CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlkzNV9IICAgIDB4MDk4NgorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZMzVfSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZMzVfSF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlkzNV9MICAgIDB4MDk4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZMzZfSCAgICAweDA5ODgKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTM2X0hfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTM2X0hfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZMzZfTCAgICAweDA5ODkKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTM3X0ggICAgMHgwOThhCisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlkzN19IX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlkzN19IX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTM3X0wgICAgMHgwOThiCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlkzOF9IICAgIDB4MDk4YworI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZMzhfSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZMzhfSF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlkzOF9MICAgIDB4MDk4ZAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZMzlfSCAgICAweDA5OGUKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTM5X0hfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTM5X0hfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZMzlfTCAgICAweDA5OGYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTQwX0ggICAgMHgwOTkwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlk0MF9IX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlk0MF9IX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTQwX0wgICAgMHgwOTkxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlk0MV9IICAgIDB4MDk5MgorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZNDFfSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZNDFfSF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlk0MV9MICAgIDB4MDk5MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZNDJfSCAgICAweDA5OTQKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTQyX0hfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTQyX0hfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZNDJfTCAgICAweDA5OTUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTQzX0ggICAgMHgwOTk2CisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlk0M19IX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlk0M19IX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTQzX0wgICAgMHgwOTk3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlk0NF9IICAgIDB4MDk5OAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZNDRfSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZNDRfSF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlk0NF9MICAgIDB4MDk5OQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZNDVfSCAgICAweDA5OWEKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTQ1X0hfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTQ1X0hfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZNDVfTCAgICAweDA5OWIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTQ2X0ggICAgMHgwOTljCisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlk0Nl9IX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlk0Nl9IX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTQ2X0wgICAgMHgwOTlkCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlk0N19IICAgIDB4MDk5ZQorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZNDdfSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZNDdfSF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlk0N19MICAgIDB4MDk5ZgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZNDhfSCAgICAweDA5YTAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTQ4X0hfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTQ4X0hfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZNDhfTCAgICAweDA5YTEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTQ5X0ggICAgMHgwOWEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlk0OV9IX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlk0OV9IX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTQ5X0wgICAgMHgwOWEzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlk1MF9IICAgIDB4MDlhNAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZNTBfSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZNTBfSF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlk1MF9MICAgIDB4MDlhNQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZNTFfSCAgICAweDA5YTYKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTUxX0hfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTUxX0hfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZNTFfTCAgICAweDA5YTcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTUyX0ggICAgMHgwOWE4CisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlk1Ml9IX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlk1Ml9IX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTUyX0wgICAgMHgwOWE5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlk1M19IICAgIDB4MDlhYQorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZNTNfSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZNTNfSF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlk1M19MICAgIDB4MDlhYgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZNTRfSCAgICAweDA5YWMKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTU0X0hfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTU0X0hfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZNTRfTCAgICAweDA5YWQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTU1X0ggICAgMHgwOWFlCisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlk1NV9IX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlk1NV9IX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTU1X0wgICAgMHgwOWFmCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlk1Nl9IICAgIDB4MDliMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZNTZfSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZNTZfSF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlk1Nl9MICAgIDB4MDliMQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZNTdfSCAgICAweDA5YjIKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTU3X0hfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTU3X0hfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZNTdfTCAgICAweDA5YjMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTU4X0ggICAgMHgwOWI0CisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlk1OF9IX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlk1OF9IX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTU4X0wgICAgMHgwOWI1CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlk1OV9IICAgIDB4MDliNgorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZNTlfSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZNTlfSF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlk1OV9MICAgIDB4MDliNworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZNjBfSCAgICAweDA5YjgKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTYwX0hfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTYwX0hfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZNjBfTCAgICAweDA5YjkKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTYxX0ggICAgMHgwOWJhCisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlk2MV9IX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lQTUNfR1JPVVBfRU5UUlk2MV9IX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTYxX0wgICAgMHgwOWJiCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlk2Ml9IICAgIDB4MDliYworI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZNjJfSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX0VOVFJZNjJfSF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfRU5UUlk2Ml9MICAgIDB4MDliZAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZNjNfSCAgICAweDA5YmUKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTYzX0hfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9FTlRSWTYzX0hfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX0VOVFJZNjNfTCAgICAweDA5YmYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVU5LTk9XTl9VTklDQVNUX0RBX1BPUlRfQkVIQVZFICAgIDB4MDlDMAorI2RlZmluZSAgICBSVEw4MzY3Q19Qb3J0N19BQ1RJT05fT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BvcnQ3X0FDVElPTl9NQVNLICAgIDB4QzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19Qb3J0Nl9BQ1RJT05fT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BvcnQ2X0FDVElPTl9NQVNLICAgIDB4MzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19Qb3J0NV9BQ1RJT05fT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BvcnQ1X0FDVElPTl9NQVNLICAgIDB4QzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BvcnQ0X0FDVElPTl9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19Qb3J0NF9BQ1RJT05fTUFTSyAgICAweDMwMAorI2RlZmluZSAgICBSVEw4MzY3Q19Qb3J0M19BQ1RJT05fT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUG9ydDNfQUNUSU9OX01BU0sgICAgMHhDMAorI2RlZmluZSAgICBSVEw4MzY3Q19Qb3J0Ml9BQ1RJT05fT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUG9ydDJfQUNUSU9OX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19Qb3J0MV9BQ1RJT05fT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUG9ydDFfQUNUSU9OX01BU0sgICAgMHhDCisjZGVmaW5lICAgIFJUTDgzNjdDX1BvcnQwX0FDVElPTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19Qb3J0MF9BQ1RJT05fTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUlSUk9SX0NUUkwzICAgIDB4MDlDMQorI2RlZmluZSAgICBSVEw4MzY3Q19NSVJST1JfQUNMX09WRVJSSURFX0VOX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX01JUlJPUl9BQ0xfT1ZFUlJJREVfRU5fTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfTUlSUk9SX1RYX09WRVJSSURFX0VOX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX01JUlJPUl9UWF9PVkVSUklERV9FTl9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19NSVJST1JfUlhfT1ZFUlJJREVfRU5fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUlSUk9SX1JYX09WRVJSSURFX0VOX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RQTV9EVU1NWTAyICAgIDB4MDlDMgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19EUE1fRFVNTVkwMyAgICAweDA5QzMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRFBNX0RVTU1ZMDQgICAgMHgwOUM0CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RQTV9EVU1NWTA1ICAgIDB4MDlDNQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19EUE1fRFVNTVkwNiAgICAweDA5QzYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRFBNX0RVTU1ZMDcgICAgMHgwOUM3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RQTV9EVU1NWTA4ICAgIDB4MDlDOAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19EUE1fRFVNTVkwOSAgICAweDA5QzkKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRFBNX0RVTU1ZMTAgICAgMHgwOUNBCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RQTV9EVU1NWTExICAgIDB4MDlDQgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19EUE1fRFVNTVkxMiAgICAweDA5Q0MKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRFBNX0RVTU1ZMTMgICAgMHgwOUNECisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RQTV9EVU1NWTE0ICAgIDB4MDlDRQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19EUE1fRFVNTVkxNSAgICAweDA5Q0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9FR1JFU1NfVFJBTlNfQ1RSTDAgICAgMHgwOUQwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fRUdSRVNTX1RSQU5TX0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fRUdSRVNTX1RSQU5TX0NUUkwwX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9FR1JFU1NfVFJBTlNfQ1RSTDEgICAgMHgwOUQxCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fRUdSRVNTX1RSQU5TX0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fRUdSRVNTX1RSQU5TX0NUUkwxX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9FR1JFU1NfVFJBTlNfQ1RSTDIgICAgMHgwOUQyCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fRUdSRVNTX1RSQU5TX0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fRUdSRVNTX1RSQU5TX0NUUkwyX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9FR1JFU1NfVFJBTlNfQ1RSTDMgICAgMHgwOUQzCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fRUdSRVNTX1RSQU5TX0NUUkwzX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fRUdSRVNTX1RSQU5TX0NUUkwzX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9FR1JFU1NfVFJBTlNfQ1RSTDQgICAgMHgwOUQ0CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fRUdSRVNTX1RSQU5TX0NUUkw0X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fRUdSRVNTX1RSQU5TX0NUUkw0X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9FR1JFU1NfVFJBTlNfQ1RSTDUgICAgMHgwOUQ1CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fRUdSRVNTX1RSQU5TX0NUUkw1X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fRUdSRVNTX1RSQU5TX0NUUkw1X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9FR1JFU1NfVFJBTlNfQ1RSTDYgICAgMHgwOUQ2CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fRUdSRVNTX1RSQU5TX0NUUkw2X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fRUdSRVNTX1RSQU5TX0NUUkw2X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9FR1JFU1NfVFJBTlNfQ1RSTDcgICAgMHgwOUQ3CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fRUdSRVNTX1RSQU5TX0NUUkw3X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fRUdSRVNTX1RSQU5TX0NUUkw3X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9FR1JFU1NfVFJBTlNfQ1RSTDggICAgMHgwOUQ4CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fRUdSRVNTX1RSQU5TX0NUUkw4X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fRUdSRVNTX1RSQU5TX0NUUkw4X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9FR1JFU1NfVFJBTlNfQ1RSTDkgICAgMHgwOUQ5CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fRUdSRVNTX1RSQU5TX0NUUkw5X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fRUdSRVNTX1RSQU5TX0NUUkw5X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUlSUk9SX0NUUkwyICAgIDB4MDlEQQorI2RlZmluZSAgICBSVEw4MzY3Q19NSVJST1JfUkVBTEtFRVBfRU5fT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfTUlSUk9SX1JFQUxLRUVQX0VOX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19NSVJST1JfUlhfSVNPTEFUSU9OX0xFQUtZX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX01JUlJPUl9SWF9JU09MQVRJT05fTEVBS1lfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfTUlSUk9SX1RYX0lTT0xBVElPTl9MRUFLWV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19NSVJST1JfVFhfSVNPTEFUSU9OX0xFQUtZX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX01JUlJPUl9SWF9WTEFOX0xFQUtZX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX01JUlJPUl9SWF9WTEFOX0xFQUtZX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX01JUlJPUl9UWF9WTEFOX0xFQUtZX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01JUlJPUl9UWF9WTEFOX0xFQUtZX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX09VVFBVVF9EUk9QX0NGRyAgICAweDA5REIKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5BQkxFX1BNQVNLX0VYVF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5BQkxFX1BNQVNLX0VYVF9NQVNLICAgIDB4RTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19FTkFCTEVfQkNfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0VOQUJMRV9CQ19NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19FTkFCTEVfTUNfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0VOQUJMRV9NQ19NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VOQUJMRV9VQ19PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5BQkxFX1VDX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5BQkxFX1BNQVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VOQUJMRV9QTUFTS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVU5LTk9XTl9VTklDQVNUX0RBX1BPUlRfQkVIQVZFX0VYVCAgICAweDA5REMKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX0FDVElPTl9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfQUNUSU9OX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9BQ1RJT05fT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfQUNUSU9OX01BU0sgICAgMHhDCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X0FDVElPTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9BQ1RJT05fTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUk1LX0NGR19TRUxfQ1RSTCAgICAweDA5REYKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1LXzFRX0NGR19TRUxfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1LXzFRX0NGR19TRUxfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUk1LX0RTQ1BfQ0ZHX1NFTF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19STUtfRFNDUF9DRkdfU0VMX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19EU0NQX1JFTUFSS19EU0NQX0NUUkwwICAgIDB4MDlFMAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQMV9EU0NQX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1AxX0RTQ1BfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDBfRFNDUF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQMF9EU0NQX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfRFNDUF9SRU1BUktfRFNDUF9DVFJMMSAgICAweDA5RTEKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDNfRFNDUF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQM19EU0NQX01BU0sgICAgMHgzRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1AyX0RTQ1BfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDJfRFNDUF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUU9TX0RTQ1BfUkVNQVJLX0RTQ1BfQ1RSTDIgICAgMHgwOUUyCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1A1X0RTQ1BfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDVfRFNDUF9NQVNLICAgIDB4M0YwMAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQNF9EU0NQX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1A0X0RTQ1BfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19EU0NQX1JFTUFSS19EU0NQX0NUUkwzICAgIDB4MDlFMworI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQN19EU0NQX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1A3X0RTQ1BfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDZfRFNDUF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQNl9EU0NQX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfRFNDUF9SRU1BUktfRFNDUF9DVFJMNCAgICAweDA5RTQKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDlfRFNDUF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQOV9EU0NQX01BU0sgICAgMHgzRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1A4X0RTQ1BfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDhfRFNDUF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUU9TX0RTQ1BfUkVNQVJLX0RTQ1BfQ1RSTDUgICAgMHgwOUU1CisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1AxMV9EU0NQX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1AxMV9EU0NQX01BU0sgICAgMHgzRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1AxMF9EU0NQX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1AxMF9EU0NQX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfRFNDUF9SRU1BUktfRFNDUF9DVFJMNiAgICAweDA5RTYKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDEzX0RTQ1BfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDEzX0RTQ1BfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDEyX0RTQ1BfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDEyX0RTQ1BfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19EU0NQX1JFTUFSS19EU0NQX0NUUkw3ICAgIDB4MDlFNworI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQMTVfRFNDUF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQMTVfRFNDUF9NQVNLICAgIDB4M0YwMAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQMTRfRFNDUF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NQMTRfRFNDUF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUU9TX0RTQ1BfUkVNQVJLX0RTQ1BfQ1RSTDggICAgMHgwOUU4CisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1AxN19EU0NQX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1AxN19EU0NQX01BU0sgICAgMHgzRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1AxNl9EU0NQX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RTQ1AxNl9EU0NQX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfRFNDUF9SRU1BUktfRFNDUF9DVFJMOSAgICAweDA5RTkKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDE5X0RTQ1BfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDE5X0RTQ1BfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDE4X0RTQ1BfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDE4X0RTQ1BfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19EU0NQX1JFTUFSS19EU0NQX0NUUkwxMCAgICAweDA5RUEKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDIxX0RTQ1BfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDIxX0RTQ1BfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDIwX0RTQ1BfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDIwX0RTQ1BfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19EU0NQX1JFTUFSS19EU0NQX0NUUkwxMSAgICAweDA5RUIKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDIzX0RTQ1BfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDIzX0RTQ1BfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDIyX0RTQ1BfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDIyX0RTQ1BfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19EU0NQX1JFTUFSS19EU0NQX0NUUkwxMiAgICAweDA5RUMKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDI1X0RTQ1BfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDI1X0RTQ1BfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDI0X0RTQ1BfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDI0X0RTQ1BfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19EU0NQX1JFTUFSS19EU0NQX0NUUkwxMyAgICAweDA5RUQKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDI3X0RTQ1BfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDI3X0RTQ1BfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDI2X0RTQ1BfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDI2X0RTQ1BfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19EU0NQX1JFTUFSS19EU0NQX0NUUkwxNCAgICAweDA5RUUKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDI5X0RTQ1BfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDI5X0RTQ1BfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDI4X0RTQ1BfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDI4X0RTQ1BfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19EU0NQX1JFTUFSS19EU0NQX0NUUkwxNSAgICAweDA5RUYKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDMxX0RTQ1BfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDMxX0RTQ1BfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDMwX0RTQ1BfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDMwX0RTQ1BfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19EU0NQX1JFTUFSS19EU0NQX0NUUkwxNiAgICAweDA5RjAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDMzX0RTQ1BfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDMzX0RTQ1BfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDMyX0RTQ1BfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDMyX0RTQ1BfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19EU0NQX1JFTUFSS19EU0NQX0NUUkwxNyAgICAweDA5RjEKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDM1X0RTQ1BfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDM1X0RTQ1BfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDM0X0RTQ1BfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDM0X0RTQ1BfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19EU0NQX1JFTUFSS19EU0NQX0NUUkwxOCAgICAweDA5RjIKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDM3X0RTQ1BfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDM3X0RTQ1BfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDM2X0RTQ1BfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDM2X0RTQ1BfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19EU0NQX1JFTUFSS19EU0NQX0NUUkwxOSAgICAweDA5RjMKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDM5X0RTQ1BfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDM5X0RTQ1BfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDM4X0RTQ1BfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDM4X0RTQ1BfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19EU0NQX1JFTUFSS19EU0NQX0NUUkwyMCAgICAweDA5RjQKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDQxX0RTQ1BfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDQxX0RTQ1BfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDQwX0RTQ1BfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDQwX0RTQ1BfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19EU0NQX1JFTUFSS19EU0NQX0NUUkwyMSAgICAweDA5RjUKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDQzX0RTQ1BfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDQzX0RTQ1BfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDQyX0RTQ1BfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDQyX0RTQ1BfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19EU0NQX1JFTUFSS19EU0NQX0NUUkwyMiAgICAweDA5RjYKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDQ1X0RTQ1BfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDQ1X0RTQ1BfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDQ0X0RTQ1BfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDQ0X0RTQ1BfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19EU0NQX1JFTUFSS19EU0NQX0NUUkwyMyAgICAweDA5RjcKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDQ3X0RTQ1BfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDQ3X0RTQ1BfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDQ2X0RTQ1BfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDQ2X0RTQ1BfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19EU0NQX1JFTUFSS19EU0NQX0NUUkwyNCAgICAweDA5RjgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDQ5X0RTQ1BfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDQ5X0RTQ1BfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDQ4X0RTQ1BfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDQ4X0RTQ1BfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19EU0NQX1JFTUFSS19EU0NQX0NUUkwyNSAgICAweDA5RjkKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDUxX0RTQ1BfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDUxX0RTQ1BfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDUwX0RTQ1BfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDUwX0RTQ1BfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19EU0NQX1JFTUFSS19EU0NQX0NUUkwyNiAgICAweDA5RkEKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDUzX0RTQ1BfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDUzX0RTQ1BfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDUyX0RTQ1BfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDUyX0RTQ1BfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19EU0NQX1JFTUFSS19EU0NQX0NUUkwyNyAgICAweDA5RkIKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDU1X0RTQ1BfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDU1X0RTQ1BfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDU0X0RTQ1BfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDU0X0RTQ1BfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19EU0NQX1JFTUFSS19EU0NQX0NUUkwyOCAgICAweDA5RkMKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDU3X0RTQ1BfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDU3X0RTQ1BfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDU2X0RTQ1BfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDU2X0RTQ1BfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19EU0NQX1JFTUFSS19EU0NQX0NUUkwyOSAgICAweDA5RkQKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDU5X0RTQ1BfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDU5X0RTQ1BfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDU4X0RTQ1BfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDU4X0RTQ1BfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19EU0NQX1JFTUFSS19EU0NQX0NUUkwzMCAgICAweDA5RkUKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDYxX0RTQ1BfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDYxX0RTQ1BfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDYwX0RTQ1BfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDYwX0RTQ1BfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19EU0NQX1JFTUFSS19EU0NQX0NUUkwzMSAgICAweDA5RkYKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDYzX0RTQ1BfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDYzX0RTQ1BfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDYyX0RTQ1BfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDUDYyX0RTQ1BfTUFTSyAgICAweDNGCisKKy8qICgxNidoMGEwMClsMl9yZWcgKi8KKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NU1RJMF9DVFJMMCAgICAweDBhMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMF9DVFJMMF9QT1JUN19TVEFURV9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMF9DVFJMMF9QT1JUN19TVEFURV9NQVNLICAgIDB4QzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkwX0NUUkwwX1BPUlQ2X1NUQVRFX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkwX0NUUkwwX1BPUlQ2X1NUQVRFX01BU0sgICAgMHgzMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTBfQ1RSTDBfUE9SVDVfU1RBVEVfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTBfQ1RSTDBfUE9SVDVfU1RBVEVfTUFTSyAgICAweEMwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkwX0NUUkwwX1BPUlQ0X1NUQVRFX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTBfQ1RSTDBfUE9SVDRfU1RBVEVfTUFTSyAgICAweDMwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkwX0NUUkwwX1BPUlQzX1NUQVRFX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTBfQ1RSTDBfUE9SVDNfU1RBVEVfTUFTSyAgICAweEMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTBfQ1RSTDBfUE9SVDJfU1RBVEVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMF9DVFJMMF9QT1JUMl9TVEFURV9NQVNLICAgIDB4MzAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMF9DVFJMMF9QT1JUMV9TVEFURV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkwX0NUUkwwX1BPUlQxX1NUQVRFX01BU0sgICAgMHhDCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTBfQ1RSTDBfUE9SVDBfU1RBVEVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMF9DVFJMMF9QT1JUMF9TVEFURV9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01TVEkwX0NUUkwxICAgIDB4MGEwMQorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkwX0NUUkwxX1BPUlQxMF9TVEFURV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkwX0NUUkwxX1BPUlQxMF9TVEFURV9NQVNLICAgIDB4MzAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMF9DVFJMMV9QT1JUOV9TVEFURV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkwX0NUUkwxX1BPUlQ5X1NUQVRFX01BU0sgICAgMHhDCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTBfQ1RSTDFfUE9SVDhfU1RBVEVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMF9DVFJMMV9QT1JUOF9TVEFURV9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01TVEkxX0NUUkwwICAgIDB4MGEwMgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxX0NUUkwwX1BPUlQ3X1NUQVRFX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxX0NUUkwwX1BPUlQ3X1NUQVRFX01BU0sgICAgMHhDMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTFfQ1RSTDBfUE9SVDZfU1RBVEVfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTFfQ1RSTDBfUE9SVDZfU1RBVEVfTUFTSyAgICAweDMwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMV9DVFJMMF9QT1JUNV9TVEFURV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMV9DVFJMMF9QT1JUNV9TVEFURV9NQVNLICAgIDB4QzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTFfQ1RSTDBfUE9SVDRfU1RBVEVfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMV9DVFJMMF9QT1JUNF9TVEFURV9NQVNLICAgIDB4MzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTFfQ1RSTDBfUE9SVDNfU1RBVEVfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMV9DVFJMMF9QT1JUM19TVEFURV9NQVNLICAgIDB4QzAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMV9DVFJMMF9QT1JUMl9TVEFURV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxX0NUUkwwX1BPUlQyX1NUQVRFX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxX0NUUkwwX1BPUlQxX1NUQVRFX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTFfQ1RSTDBfUE9SVDFfU1RBVEVfTUFTSyAgICAweEMKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMV9DVFJMMF9QT1JUMF9TVEFURV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxX0NUUkwwX1BPUlQwX1NUQVRFX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTVNUSTFfQ1RSTDEgICAgMHgwYTAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTFfQ1RSTDFfUE9SVDEwX1NUQVRFX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTFfQ1RSTDFfUE9SVDEwX1NUQVRFX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxX0NUUkwxX1BPUlQ5X1NUQVRFX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTFfQ1RSTDFfUE9SVDlfU1RBVEVfTUFTSyAgICAweEMKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMV9DVFJMMV9QT1JUOF9TVEFURV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxX0NUUkwxX1BPUlQ4X1NUQVRFX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTVNUSTJfQ1RSTDAgICAgMHgwYTA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTJfQ1RSTDBfUE9SVDdfU1RBVEVfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTJfQ1RSTDBfUE9SVDdfU1RBVEVfTUFTSyAgICAweEMwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMl9DVFJMMF9QT1JUNl9TVEFURV9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMl9DVFJMMF9QT1JUNl9TVEFURV9NQVNLICAgIDB4MzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkyX0NUUkwwX1BPUlQ1X1NUQVRFX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkyX0NUUkwwX1BPUlQ1X1NUQVRFX01BU0sgICAgMHhDMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMl9DVFJMMF9QT1JUNF9TVEFURV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkyX0NUUkwwX1BPUlQ0X1NUQVRFX01BU0sgICAgMHgzMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMl9DVFJMMF9QT1JUM19TVEFURV9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkyX0NUUkwwX1BPUlQzX1NUQVRFX01BU0sgICAgMHhDMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkyX0NUUkwwX1BPUlQyX1NUQVRFX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTJfQ1RSTDBfUE9SVDJfU1RBVEVfTUFTSyAgICAweDMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTJfQ1RSTDBfUE9SVDFfU1RBVEVfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMl9DVFJMMF9QT1JUMV9TVEFURV9NQVNLICAgIDB4QworI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkyX0NUUkwwX1BPUlQwX1NUQVRFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTJfQ1RSTDBfUE9SVDBfU1RBVEVfTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NU1RJMl9DVFJMMSAgICAweDBhMDUKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMl9DVFJMMV9QT1JUMTBfU1RBVEVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMl9DVFJMMV9QT1JUMTBfU1RBVEVfTUFTSyAgICAweDMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTJfQ1RSTDFfUE9SVDlfU1RBVEVfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMl9DVFJMMV9QT1JUOV9TVEFURV9NQVNLICAgIDB4QworI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkyX0NUUkwxX1BPUlQ4X1NUQVRFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTJfQ1RSTDFfUE9SVDhfU1RBVEVfTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NU1RJM19DVFJMMCAgICAweDBhMDYKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJM19DVFJMMF9QT1JUN19TVEFURV9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJM19DVFJMMF9QT1JUN19TVEFURV9NQVNLICAgIDB4QzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkzX0NUUkwwX1BPUlQ2X1NUQVRFX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkzX0NUUkwwX1BPUlQ2X1NUQVRFX01BU0sgICAgMHgzMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTNfQ1RSTDBfUE9SVDVfU1RBVEVfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTNfQ1RSTDBfUE9SVDVfU1RBVEVfTUFTSyAgICAweEMwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkzX0NUUkwwX1BPUlQ0X1NUQVRFX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTNfQ1RSTDBfUE9SVDRfU1RBVEVfTUFTSyAgICAweDMwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkzX0NUUkwwX1BPUlQzX1NUQVRFX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTNfQ1RSTDBfUE9SVDNfU1RBVEVfTUFTSyAgICAweEMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTNfQ1RSTDBfUE9SVDJfU1RBVEVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJM19DVFJMMF9QT1JUMl9TVEFURV9NQVNLICAgIDB4MzAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJM19DVFJMMF9QT1JUMV9TVEFURV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkzX0NUUkwwX1BPUlQxX1NUQVRFX01BU0sgICAgMHhDCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTNfQ1RSTDBfUE9SVDBfU1RBVEVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJM19DVFJMMF9QT1JUMF9TVEFURV9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01TVEkzX0NUUkwxICAgIDB4MGEwNworI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkzX0NUUkwxX1BPUlQxMF9TVEFURV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkzX0NUUkwxX1BPUlQxMF9TVEFURV9NQVNLICAgIDB4MzAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJM19DVFJMMV9QT1JUOV9TVEFURV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkzX0NUUkwxX1BPUlQ5X1NUQVRFX01BU0sgICAgMHhDCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTNfQ1RSTDFfUE9SVDhfU1RBVEVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJM19DVFJMMV9QT1JUOF9TVEFURV9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01TVEk0X0NUUkwwICAgIDB4MGEwOAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk0X0NUUkwwX1BPUlQ3X1NUQVRFX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk0X0NUUkwwX1BPUlQ3X1NUQVRFX01BU0sgICAgMHhDMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTRfQ1RSTDBfUE9SVDZfU1RBVEVfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTRfQ1RSTDBfUE9SVDZfU1RBVEVfTUFTSyAgICAweDMwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJNF9DVFJMMF9QT1JUNV9TVEFURV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJNF9DVFJMMF9QT1JUNV9TVEFURV9NQVNLICAgIDB4QzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTRfQ1RSTDBfUE9SVDRfU1RBVEVfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJNF9DVFJMMF9QT1JUNF9TVEFURV9NQVNLICAgIDB4MzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTRfQ1RSTDBfUE9SVDNfU1RBVEVfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJNF9DVFJMMF9QT1JUM19TVEFURV9NQVNLICAgIDB4QzAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJNF9DVFJMMF9QT1JUMl9TVEFURV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk0X0NUUkwwX1BPUlQyX1NUQVRFX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk0X0NUUkwwX1BPUlQxX1NUQVRFX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTRfQ1RSTDBfUE9SVDFfU1RBVEVfTUFTSyAgICAweEMKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJNF9DVFJMMF9QT1JUMF9TVEFURV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk0X0NUUkwwX1BPUlQwX1NUQVRFX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTVNUSTRfQ1RSTDEgICAgMHgwYTA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTRfQ1RSTDFfUE9SVDEwX1NUQVRFX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTRfQ1RSTDFfUE9SVDEwX1NUQVRFX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk0X0NUUkwxX1BPUlQ5X1NUQVRFX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTRfQ1RSTDFfUE9SVDlfU1RBVEVfTUFTSyAgICAweEMKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJNF9DVFJMMV9QT1JUOF9TVEFURV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk0X0NUUkwxX1BPUlQ4X1NUQVRFX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTVNUSTVfQ1RSTDAgICAgMHgwYTBhCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTVfQ1RSTDBfUE9SVDdfU1RBVEVfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTVfQ1RSTDBfUE9SVDdfU1RBVEVfTUFTSyAgICAweEMwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJNV9DVFJMMF9QT1JUNl9TVEFURV9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJNV9DVFJMMF9QT1JUNl9TVEFURV9NQVNLICAgIDB4MzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk1X0NUUkwwX1BPUlQ1X1NUQVRFX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk1X0NUUkwwX1BPUlQ1X1NUQVRFX01BU0sgICAgMHhDMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJNV9DVFJMMF9QT1JUNF9TVEFURV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk1X0NUUkwwX1BPUlQ0X1NUQVRFX01BU0sgICAgMHgzMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJNV9DVFJMMF9QT1JUM19TVEFURV9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk1X0NUUkwwX1BPUlQzX1NUQVRFX01BU0sgICAgMHhDMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk1X0NUUkwwX1BPUlQyX1NUQVRFX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTVfQ1RSTDBfUE9SVDJfU1RBVEVfTUFTSyAgICAweDMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTVfQ1RSTDBfUE9SVDFfU1RBVEVfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJNV9DVFJMMF9QT1JUMV9TVEFURV9NQVNLICAgIDB4QworI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk1X0NUUkwwX1BPUlQwX1NUQVRFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTVfQ1RSTDBfUE9SVDBfU1RBVEVfTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NU1RJNV9DVFJMMSAgICAweDBhMGIKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJNV9DVFJMMV9QT1JUMTBfU1RBVEVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJNV9DVFJMMV9QT1JUMTBfU1RBVEVfTUFTSyAgICAweDMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTVfQ1RSTDFfUE9SVDlfU1RBVEVfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJNV9DVFJMMV9QT1JUOV9TVEFURV9NQVNLICAgIDB4QworI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk1X0NUUkwxX1BPUlQ4X1NUQVRFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTVfQ1RSTDFfUE9SVDhfU1RBVEVfTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NU1RJNl9DVFJMMCAgICAweDBhMGMKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJNl9DVFJMMF9QT1JUN19TVEFURV9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJNl9DVFJMMF9QT1JUN19TVEFURV9NQVNLICAgIDB4QzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk2X0NUUkwwX1BPUlQ2X1NUQVRFX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk2X0NUUkwwX1BPUlQ2X1NUQVRFX01BU0sgICAgMHgzMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTZfQ1RSTDBfUE9SVDVfU1RBVEVfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTZfQ1RSTDBfUE9SVDVfU1RBVEVfTUFTSyAgICAweEMwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk2X0NUUkwwX1BPUlQ0X1NUQVRFX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTZfQ1RSTDBfUE9SVDRfU1RBVEVfTUFTSyAgICAweDMwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk2X0NUUkwwX1BPUlQzX1NUQVRFX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTZfQ1RSTDBfUE9SVDNfU1RBVEVfTUFTSyAgICAweEMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTZfQ1RSTDBfUE9SVDJfU1RBVEVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJNl9DVFJMMF9QT1JUMl9TVEFURV9NQVNLICAgIDB4MzAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJNl9DVFJMMF9QT1JUMV9TVEFURV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk2X0NUUkwwX1BPUlQxX1NUQVRFX01BU0sgICAgMHhDCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTZfQ1RSTDBfUE9SVDBfU1RBVEVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJNl9DVFJMMF9QT1JUMF9TVEFURV9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01TVEk2X0NUUkwxICAgIDB4MGEwZAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk2X0NUUkwxX1BPUlQxMF9TVEFURV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk2X0NUUkwxX1BPUlQxMF9TVEFURV9NQVNLICAgIDB4MzAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJNl9DVFJMMV9QT1JUOV9TVEFURV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk2X0NUUkwxX1BPUlQ5X1NUQVRFX01BU0sgICAgMHhDCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTZfQ1RSTDFfUE9SVDhfU1RBVEVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJNl9DVFJMMV9QT1JUOF9TVEFURV9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01TVEk3X0NUUkwwICAgIDB4MGEwZQorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk3X0NUUkwwX1BPUlQ3X1NUQVRFX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk3X0NUUkwwX1BPUlQ3X1NUQVRFX01BU0sgICAgMHhDMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTdfQ1RSTDBfUE9SVDZfU1RBVEVfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTdfQ1RSTDBfUE9SVDZfU1RBVEVfTUFTSyAgICAweDMwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJN19DVFJMMF9QT1JUNV9TVEFURV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJN19DVFJMMF9QT1JUNV9TVEFURV9NQVNLICAgIDB4QzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTdfQ1RSTDBfUE9SVDRfU1RBVEVfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJN19DVFJMMF9QT1JUNF9TVEFURV9NQVNLICAgIDB4MzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTdfQ1RSTDBfUE9SVDNfU1RBVEVfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJN19DVFJMMF9QT1JUM19TVEFURV9NQVNLICAgIDB4QzAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJN19DVFJMMF9QT1JUMl9TVEFURV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk3X0NUUkwwX1BPUlQyX1NUQVRFX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk3X0NUUkwwX1BPUlQxX1NUQVRFX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTdfQ1RSTDBfUE9SVDFfU1RBVEVfTUFTSyAgICAweEMKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJN19DVFJMMF9QT1JUMF9TVEFURV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk3X0NUUkwwX1BPUlQwX1NUQVRFX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTVNUSTdfQ1RSTDEgICAgMHgwYTBmCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTdfQ1RSTDFfUE9SVDEwX1NUQVRFX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTdfQ1RSTDFfUE9SVDEwX1NUQVRFX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk3X0NUUkwxX1BPUlQ5X1NUQVRFX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTdfQ1RSTDFfUE9SVDlfU1RBVEVfTUFTSyAgICAweEMKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJN19DVFJMMV9QT1JUOF9TVEFURV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk3X0NUUkwxX1BPUlQ4X1NUQVRFX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTVNUSThfQ1RSTDAgICAgMHgwYTEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSThfQ1RSTDBfUE9SVDdfU1RBVEVfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSThfQ1RSTDBfUE9SVDdfU1RBVEVfTUFTSyAgICAweEMwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJOF9DVFJMMF9QT1JUNl9TVEFURV9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJOF9DVFJMMF9QT1JUNl9TVEFURV9NQVNLICAgIDB4MzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk4X0NUUkwwX1BPUlQ1X1NUQVRFX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk4X0NUUkwwX1BPUlQ1X1NUQVRFX01BU0sgICAgMHhDMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJOF9DVFJMMF9QT1JUNF9TVEFURV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk4X0NUUkwwX1BPUlQ0X1NUQVRFX01BU0sgICAgMHgzMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJOF9DVFJMMF9QT1JUM19TVEFURV9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk4X0NUUkwwX1BPUlQzX1NUQVRFX01BU0sgICAgMHhDMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk4X0NUUkwwX1BPUlQyX1NUQVRFX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSThfQ1RSTDBfUE9SVDJfU1RBVEVfTUFTSyAgICAweDMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSThfQ1RSTDBfUE9SVDFfU1RBVEVfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJOF9DVFJMMF9QT1JUMV9TVEFURV9NQVNLICAgIDB4QworI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk4X0NUUkwwX1BPUlQwX1NUQVRFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSThfQ1RSTDBfUE9SVDBfU1RBVEVfTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NU1RJOF9DVFJMMSAgICAweDBhMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJOF9DVFJMMV9QT1JUMTBfU1RBVEVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJOF9DVFJMMV9QT1JUMTBfU1RBVEVfTUFTSyAgICAweDMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSThfQ1RSTDFfUE9SVDlfU1RBVEVfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJOF9DVFJMMV9QT1JUOV9TVEFURV9NQVNLICAgIDB4QworI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk4X0NUUkwxX1BPUlQ4X1NUQVRFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSThfQ1RSTDFfUE9SVDhfU1RBVEVfTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NU1RJOV9DVFJMMCAgICAweDBhMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJOV9DVFJMMF9QT1JUN19TVEFURV9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJOV9DVFJMMF9QT1JUN19TVEFURV9NQVNLICAgIDB4QzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk5X0NUUkwwX1BPUlQ2X1NUQVRFX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk5X0NUUkwwX1BPUlQ2X1NUQVRFX01BU0sgICAgMHgzMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTlfQ1RSTDBfUE9SVDVfU1RBVEVfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTlfQ1RSTDBfUE9SVDVfU1RBVEVfTUFTSyAgICAweEMwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk5X0NUUkwwX1BPUlQ0X1NUQVRFX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTlfQ1RSTDBfUE9SVDRfU1RBVEVfTUFTSyAgICAweDMwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk5X0NUUkwwX1BPUlQzX1NUQVRFX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTlfQ1RSTDBfUE9SVDNfU1RBVEVfTUFTSyAgICAweEMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTlfQ1RSTDBfUE9SVDJfU1RBVEVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJOV9DVFJMMF9QT1JUMl9TVEFURV9NQVNLICAgIDB4MzAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJOV9DVFJMMF9QT1JUMV9TVEFURV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk5X0NUUkwwX1BPUlQxX1NUQVRFX01BU0sgICAgMHhDCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTlfQ1RSTDBfUE9SVDBfU1RBVEVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJOV9DVFJMMF9QT1JUMF9TVEFURV9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01TVEk5X0NUUkwxICAgIDB4MGExMworI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk5X0NUUkwxX1BPUlQxMF9TVEFURV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk5X0NUUkwxX1BPUlQxMF9TVEFURV9NQVNLICAgIDB4MzAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJOV9DVFJMMV9QT1JUOV9TVEFURV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEk5X0NUUkwxX1BPUlQ5X1NUQVRFX01BU0sgICAgMHhDCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTlfQ1RSTDFfUE9SVDhfU1RBVEVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJOV9DVFJMMV9QT1JUOF9TVEFURV9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01TVEkxMF9DVFJMMCAgICAweDBhMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTBfQ1RSTDBfUE9SVDdfU1RBVEVfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTEwX0NUUkwwX1BPUlQ3X1NUQVRFX01BU0sgICAgMHhDMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTEwX0NUUkwwX1BPUlQ2X1NUQVRFX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxMF9DVFJMMF9QT1JUNl9TVEFURV9NQVNLICAgIDB4MzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxMF9DVFJMMF9QT1JUNV9TVEFURV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTBfQ1RSTDBfUE9SVDVfU1RBVEVfTUFTSyAgICAweEMwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxMF9DVFJMMF9QT1JUNF9TVEFURV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxMF9DVFJMMF9QT1JUNF9TVEFURV9NQVNLICAgIDB4MzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTEwX0NUUkwwX1BPUlQzX1NUQVRFX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTEwX0NUUkwwX1BPUlQzX1NUQVRFX01BU0sgICAgMHhDMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxMF9DVFJMMF9QT1JUMl9TVEFURV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxMF9DVFJMMF9QT1JUMl9TVEFURV9NQVNLICAgIDB4MzAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTBfQ1RSTDBfUE9SVDFfU1RBVEVfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTBfQ1RSTDBfUE9SVDFfU1RBVEVfTUFTSyAgICAweEMKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTBfQ1RSTDBfUE9SVDBfU1RBVEVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTBfQ1RSTDBfUE9SVDBfU1RBVEVfTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NU1RJMTBfQ1RSTDEgICAgMHgwYTE1CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTEwX0NUUkwxX1BPUlQxMF9TVEFURV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxMF9DVFJMMV9QT1JUMTBfU1RBVEVfTUFTSyAgICAweDMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTEwX0NUUkwxX1BPUlQ5X1NUQVRFX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTEwX0NUUkwxX1BPUlQ5X1NUQVRFX01BU0sgICAgMHhDCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTEwX0NUUkwxX1BPUlQ4X1NUQVRFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTEwX0NUUkwxX1BPUlQ4X1NUQVRFX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTVNUSTExX0NUUkwwICAgIDB4MGExNgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxMV9DVFJMMF9QT1JUN19TVEFURV9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTFfQ1RSTDBfUE9SVDdfU1RBVEVfTUFTSyAgICAweEMwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTFfQ1RSTDBfUE9SVDZfU1RBVEVfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTExX0NUUkwwX1BPUlQ2X1NUQVRFX01BU0sgICAgMHgzMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTExX0NUUkwwX1BPUlQ1X1NUQVRFX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxMV9DVFJMMF9QT1JUNV9TVEFURV9NQVNLICAgIDB4QzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTExX0NUUkwwX1BPUlQ0X1NUQVRFX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTExX0NUUkwwX1BPUlQ0X1NUQVRFX01BU0sgICAgMHgzMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTFfQ1RSTDBfUE9SVDNfU1RBVEVfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTFfQ1RSTDBfUE9SVDNfU1RBVEVfTUFTSyAgICAweEMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTExX0NUUkwwX1BPUlQyX1NUQVRFX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTExX0NUUkwwX1BPUlQyX1NUQVRFX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxMV9DVFJMMF9QT1JUMV9TVEFURV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxMV9DVFJMMF9QT1JUMV9TVEFURV9NQVNLICAgIDB4QworI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxMV9DVFJMMF9QT1JUMF9TVEFURV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxMV9DVFJMMF9QT1JUMF9TVEFURV9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01TVEkxMV9DVFJMMSAgICAweDBhMTcKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTFfQ1RSTDFfUE9SVDEwX1NUQVRFX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTExX0NUUkwxX1BPUlQxMF9TVEFURV9NQVNLICAgIDB4MzAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTFfQ1RSTDFfUE9SVDlfU1RBVEVfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTFfQ1RSTDFfUE9SVDlfU1RBVEVfTUFTSyAgICAweEMKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTFfQ1RSTDFfUE9SVDhfU1RBVEVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTFfQ1RSTDFfUE9SVDhfU1RBVEVfTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NU1RJMTJfQ1RSTDAgICAgMHgwYTE4CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTEyX0NUUkwwX1BPUlQ3X1NUQVRFX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxMl9DVFJMMF9QT1JUN19TVEFURV9NQVNLICAgIDB4QzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxMl9DVFJMMF9QT1JUNl9TVEFURV9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTJfQ1RSTDBfUE9SVDZfU1RBVEVfTUFTSyAgICAweDMwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTJfQ1RSTDBfUE9SVDVfU1RBVEVfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTEyX0NUUkwwX1BPUlQ1X1NUQVRFX01BU0sgICAgMHhDMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTJfQ1RSTDBfUE9SVDRfU1RBVEVfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTJfQ1RSTDBfUE9SVDRfU1RBVEVfTUFTSyAgICAweDMwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxMl9DVFJMMF9QT1JUM19TVEFURV9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxMl9DVFJMMF9QT1JUM19TVEFURV9NQVNLICAgIDB4QzAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTJfQ1RSTDBfUE9SVDJfU1RBVEVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTJfQ1RSTDBfUE9SVDJfU1RBVEVfTUFTSyAgICAweDMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTEyX0NUUkwwX1BPUlQxX1NUQVRFX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTEyX0NUUkwwX1BPUlQxX1NUQVRFX01BU0sgICAgMHhDCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTEyX0NUUkwwX1BPUlQwX1NUQVRFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTEyX0NUUkwwX1BPUlQwX1NUQVRFX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTVNUSTEyX0NUUkwxICAgIDB4MGExOQorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxMl9DVFJMMV9QT1JUMTBfU1RBVEVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTJfQ1RSTDFfUE9SVDEwX1NUQVRFX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxMl9DVFJMMV9QT1JUOV9TVEFURV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxMl9DVFJMMV9QT1JUOV9TVEFURV9NQVNLICAgIDB4QworI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxMl9DVFJMMV9QT1JUOF9TVEFURV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxMl9DVFJMMV9QT1JUOF9TVEFURV9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01TVEkxM19DVFJMMCAgICAweDBhMWEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTNfQ1RSTDBfUE9SVDdfU1RBVEVfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTEzX0NUUkwwX1BPUlQ3X1NUQVRFX01BU0sgICAgMHhDMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTEzX0NUUkwwX1BPUlQ2X1NUQVRFX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxM19DVFJMMF9QT1JUNl9TVEFURV9NQVNLICAgIDB4MzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxM19DVFJMMF9QT1JUNV9TVEFURV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTNfQ1RSTDBfUE9SVDVfU1RBVEVfTUFTSyAgICAweEMwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxM19DVFJMMF9QT1JUNF9TVEFURV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxM19DVFJMMF9QT1JUNF9TVEFURV9NQVNLICAgIDB4MzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTEzX0NUUkwwX1BPUlQzX1NUQVRFX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTEzX0NUUkwwX1BPUlQzX1NUQVRFX01BU0sgICAgMHhDMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxM19DVFJMMF9QT1JUMl9TVEFURV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxM19DVFJMMF9QT1JUMl9TVEFURV9NQVNLICAgIDB4MzAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTNfQ1RSTDBfUE9SVDFfU1RBVEVfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTNfQ1RSTDBfUE9SVDFfU1RBVEVfTUFTSyAgICAweEMKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTNfQ1RSTDBfUE9SVDBfU1RBVEVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTNfQ1RSTDBfUE9SVDBfU1RBVEVfTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NU1RJMTNfQ1RSTDEgICAgMHgwYTFiCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTEzX0NUUkwxX1BPUlQxMF9TVEFURV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxM19DVFJMMV9QT1JUMTBfU1RBVEVfTUFTSyAgICAweDMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTEzX0NUUkwxX1BPUlQ5X1NUQVRFX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTEzX0NUUkwxX1BPUlQ5X1NUQVRFX01BU0sgICAgMHhDCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTEzX0NUUkwxX1BPUlQ4X1NUQVRFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTEzX0NUUkwxX1BPUlQ4X1NUQVRFX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTVNUSTE0X0NUUkwwICAgIDB4MGExYworI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxNF9DVFJMMF9QT1JUN19TVEFURV9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTRfQ1RSTDBfUE9SVDdfU1RBVEVfTUFTSyAgICAweEMwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTRfQ1RSTDBfUE9SVDZfU1RBVEVfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTE0X0NUUkwwX1BPUlQ2X1NUQVRFX01BU0sgICAgMHgzMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTE0X0NUUkwwX1BPUlQ1X1NUQVRFX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxNF9DVFJMMF9QT1JUNV9TVEFURV9NQVNLICAgIDB4QzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTE0X0NUUkwwX1BPUlQ0X1NUQVRFX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTE0X0NUUkwwX1BPUlQ0X1NUQVRFX01BU0sgICAgMHgzMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTRfQ1RSTDBfUE9SVDNfU1RBVEVfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTRfQ1RSTDBfUE9SVDNfU1RBVEVfTUFTSyAgICAweEMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTE0X0NUUkwwX1BPUlQyX1NUQVRFX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTE0X0NUUkwwX1BPUlQyX1NUQVRFX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxNF9DVFJMMF9QT1JUMV9TVEFURV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxNF9DVFJMMF9QT1JUMV9TVEFURV9NQVNLICAgIDB4QworI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxNF9DVFJMMF9QT1JUMF9TVEFURV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxNF9DVFJMMF9QT1JUMF9TVEFURV9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19WTEFOX01TVEkxNF9DVFJMMSAgICAweDBhMWQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTRfQ1RSTDFfUE9SVDEwX1NUQVRFX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTE0X0NUUkwxX1BPUlQxMF9TVEFURV9NQVNLICAgIDB4MzAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTRfQ1RSTDFfUE9SVDlfU1RBVEVfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTRfQ1RSTDFfUE9SVDlfU1RBVEVfTUFTSyAgICAweEMKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTRfQ1RSTDFfUE9SVDhfU1RBVEVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTRfQ1RSTDFfUE9SVDhfU1RBVEVfTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVkxBTl9NU1RJMTVfQ1RSTDAgICAgMHgwYTFlCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTE1X0NUUkwwX1BPUlQ3X1NUQVRFX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxNV9DVFJMMF9QT1JUN19TVEFURV9NQVNLICAgIDB4QzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxNV9DVFJMMF9QT1JUNl9TVEFURV9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTVfQ1RSTDBfUE9SVDZfU1RBVEVfTUFTSyAgICAweDMwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTVfQ1RSTDBfUE9SVDVfU1RBVEVfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTE1X0NUUkwwX1BPUlQ1X1NUQVRFX01BU0sgICAgMHhDMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTVfQ1RSTDBfUE9SVDRfU1RBVEVfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTVfQ1RSTDBfUE9SVDRfU1RBVEVfTUFTSyAgICAweDMwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxNV9DVFJMMF9QT1JUM19TVEFURV9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxNV9DVFJMMF9QT1JUM19TVEFURV9NQVNLICAgIDB4QzAKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTVfQ1RSTDBfUE9SVDJfU1RBVEVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTVfQ1RSTDBfUE9SVDJfU1RBVEVfTUFTSyAgICAweDMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTE1X0NUUkwwX1BPUlQxX1NUQVRFX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTE1X0NUUkwwX1BPUlQxX1NUQVRFX01BU0sgICAgMHhDCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTE1X0NUUkwwX1BPUlQwX1NUQVRFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZMQU5fTVNUSTE1X0NUUkwwX1BPUlQwX1NUQVRFX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZMQU5fTVNUSTE1X0NUUkwxICAgIDB4MGExZgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxNV9DVFJMMV9QT1JUMTBfU1RBVEVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfVkxBTl9NU1RJMTVfQ1RSTDFfUE9SVDEwX1NUQVRFX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxNV9DVFJMMV9QT1JUOV9TVEFURV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxNV9DVFJMMV9QT1JUOV9TVEFURV9NQVNLICAgIDB4QworI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxNV9DVFJMMV9QT1JUOF9TVEFURV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WTEFOX01TVEkxNV9DVFJMMV9QT1JUOF9TVEFURV9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19MVVRfUE9SVDBfTEVBUk5fTElNSVROTyAgICAweDBhMjAKKyNkZWZpbmUgICAgUlRMODM2N0NfTFVUX1BPUlQwX0xFQVJOX0xJTUlUTk9fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTFVUX1BPUlQwX0xFQVJOX0xJTUlUTk9fTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTFVUX1BPUlQxX0xFQVJOX0xJTUlUTk8gICAgMHgwYTIxCisjZGVmaW5lICAgIFJUTDgzNjdDX0xVVF9QT1JUMV9MRUFSTl9MSU1JVE5PX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xVVF9QT1JUMV9MRUFSTl9MSU1JVE5PX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0xVVF9QT1JUMl9MRUFSTl9MSU1JVE5PICAgIDB4MGEyMgorI2RlZmluZSAgICBSVEw4MzY3Q19MVVRfUE9SVDJfTEVBUk5fTElNSVROT19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19MVVRfUE9SVDJfTEVBUk5fTElNSVROT19NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19MVVRfUE9SVDNfTEVBUk5fTElNSVROTyAgICAweDBhMjMKKyNkZWZpbmUgICAgUlRMODM2N0NfTFVUX1BPUlQzX0xFQVJOX0xJTUlUTk9fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTFVUX1BPUlQzX0xFQVJOX0xJTUlUTk9fTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTFVUX1BPUlQ0X0xFQVJOX0xJTUlUTk8gICAgMHgwYTI0CisjZGVmaW5lICAgIFJUTDgzNjdDX0xVVF9QT1JUNF9MRUFSTl9MSU1JVE5PX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xVVF9QT1JUNF9MRUFSTl9MSU1JVE5PX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0xVVF9QT1JUNV9MRUFSTl9MSU1JVE5PICAgIDB4MGEyNQorI2RlZmluZSAgICBSVEw4MzY3Q19MVVRfUE9SVDVfTEVBUk5fTElNSVROT19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19MVVRfUE9SVDVfTEVBUk5fTElNSVROT19NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19MVVRfUE9SVDZfTEVBUk5fTElNSVROTyAgICAweDBhMjYKKyNkZWZpbmUgICAgUlRMODM2N0NfTFVUX1BPUlQ2X0xFQVJOX0xJTUlUTk9fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTFVUX1BPUlQ2X0xFQVJOX0xJTUlUTk9fTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTFVUX1BPUlQ3X0xFQVJOX0xJTUlUTk8gICAgMHgwYTI3CisjZGVmaW5lICAgIFJUTDgzNjdDX0xVVF9QT1JUN19MRUFSTl9MSU1JVE5PX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xVVF9QT1JUN19MRUFSTl9MSU1JVE5PX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0xVVF9TWVNfTEVBUk5fTElNSVROTyAgICAweDBhMjgKKyNkZWZpbmUgICAgUlRMODM2N0NfTFVUX1NZU19MRUFSTl9MSU1JVE5PX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xVVF9TWVNfTEVBUk5fTElNSVROT19NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19MVVRfTFJOX1NZU19MTVRfQ1RSTCAgICAweDBhMjkKKyNkZWZpbmUgICAgUlRMODM2N0NfTFVUX1NZU1RFTV9MRUFSTl9QTUFTSzFfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0xVVF9TWVNURU1fTEVBUk5fUE1BU0sxX01BU0sgICAgMHg3MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xVVF9TWVNURU1fTEVBUk5fT1ZFUl9BQ1RfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xVVF9TWVNURU1fTEVBUk5fT1ZFUl9BQ1RfTUFTSyAgICAweEMwMAorI2RlZmluZSAgICBSVEw4MzY3Q19MVVRfU1lTVEVNX0xFQVJOX1BNQVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xVVF9TWVNURU1fTEVBUk5fUE1BU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0xVVF9QT1JUOF9MRUFSTl9MSU1JVE5PICAgIDB4MGEyYQorI2RlZmluZSAgICBSVEw4MzY3Q19MVVRfUE9SVDhfTEVBUk5fTElNSVROT19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19MVVRfUE9SVDhfTEVBUk5fTElNSVROT19NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19MVVRfUE9SVDlfTEVBUk5fTElNSVROTyAgICAweDBhMmIKKyNkZWZpbmUgICAgUlRMODM2N0NfTFVUX1BPUlQ5X0xFQVJOX0xJTUlUTk9fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTFVUX1BPUlQ5X0xFQVJOX0xJTUlUTk9fTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTFVUX1BPUlQxMF9MRUFSTl9MSU1JVE5PICAgIDB4MGEyYworI2RlZmluZSAgICBSVEw4MzY3Q19MVVRfUE9SVDEwX0xFQVJOX0xJTUlUTk9fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTFVUX1BPUlQxMF9MRUFSTl9MSU1JVE5PX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0xVVF9DRkcgICAgMHgwYTMwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FHRV9TUEVFRF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19BR0VfU1BFRURfTUFTSyAgICAweDMwMAorI2RlZmluZSAgICBSVEw4MzY3Q19CQ0FNX0RJU0FCTEVfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfQkNBTV9ESVNBQkxFX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19MSU5LRE9XTl9BR0VPVVRfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfTElOS0RPV05fQUdFT1VUX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19MVVRfSVBNQ19IQVNIX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0xVVF9JUE1DX0hBU0hfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xVVF9JUE1DX0xPT0tVUF9PUF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19MVVRfSVBNQ19MT09LVVBfT1BfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUdFX1RJTUVSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FHRV9USU1FUl9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19MVVRfQUdFT1VUX0NUUkwgICAgMHgwYTMxCisjZGVmaW5lICAgIFJUTDgzNjdDX0xVVF9BR0VPVVRfQ1RSTF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19MVVRfQUdFT1VUX0NUUkxfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUX0VGSURfQ1RSTDAgICAgMHgwYTMyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX0VGSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX0VGSURfTUFTSyAgICAweDcwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfRUZJRF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9FRklEX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfRUZJRF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9FRklEX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9FRklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX0VGSURfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVF9FRklEX0NUUkwxICAgIDB4MGEzMworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19FRklEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19FRklEX01BU0sgICAgMHg3MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X0VGSURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfRUZJRF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X0VGSURfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfRUZJRF9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfRUZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9FRklEX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlRfRUZJRF9DVFJMMiAgICAweDBhMzQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX0VGSURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX0VGSURfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9FRklEX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X0VGSURfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X0VGSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfRUZJRF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GT1JDRV9GTFVTSDEgICAgMHgwYTM1CisjZGVmaW5lICAgIFJUTDgzNjdDX0JVU1lfU1RBVFVTMV9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19CVVNZX1NUQVRVUzFfTUFTSyAgICAweDM4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRNQVNLMV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUTUFTSzFfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRk9SQ0VfRkxVU0ggICAgMHgwYTM2CisjZGVmaW5lICAgIFJUTDgzNjdDX0JVU1lfU1RBVFVTX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0JVU1lfU1RBVFVTX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZPUkNFX0ZMVVNIX1BPUlRNQVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZPUkNFX0ZMVVNIX1BPUlRNQVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19MMl9GTFVTSF9DVFJMMSAgICAweDBhMzcKKyNkZWZpbmUgICAgUlRMODM2N0NfTFVUX0ZMVVNIX0ZJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfTFVUX0ZMVVNIX0ZJRF9NQVNLICAgIDB4RjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19MVVRfRkxVU0hfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xVVF9GTFVTSF9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19MMl9GTFVTSF9DVFJMMiAgICAweDBhMzgKKyNkZWZpbmUgICAgUlRMODM2N0NfTFVUX0ZMVVNIX1RZUEVfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfTFVUX0ZMVVNIX1RZUEVfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfTFVUX0ZMVVNIX01PREVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTFVUX0ZMVVNIX01PREVfTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTDJfRkxVU0hfQ1RSTDMgICAgMHgwYTM5CisjZGVmaW5lICAgIFJUTDgzNjdDX0wyX0ZMVVNIX0NUUkwzX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0wyX0ZMVVNIX0NUUkwzX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0xVVF9DRkcyICAgIDB4MGEzYQorI2RlZmluZSAgICBSVEw4MzY3Q19MVVRfSVBNQ19GV0RfUlBPUlRfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfTFVUX0lQTUNfRldEX1JQT1JUX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0xVVF9JUE1DX1ZJRF9IQVNIX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xVVF9JUE1DX1ZJRF9IQVNIX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMVVNIX1NUQVRVUyAgICAweDBhM2YKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxVU0hfU1RBVFVTX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMVVNIX1NUQVRVU19NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVE9STV9CQ0FTVCAgICAweDBhNDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fQkNBU1RfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fQkNBU1RfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVE9STV9NQ0FTVCAgICAweDBhNDEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fTUNBU1RfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fTUNBU1RfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVE9STV9VTktPV05fVUNBU1QgICAgMHgwYTQyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX1VOS09XTl9VQ0FTVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9VTktPV05fVUNBU1RfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVE9STV9VTktPV05fTUNBU1QgICAgMHgwYTQzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX1VOS09XTl9NQ0FTVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9VTktPV05fTUNBU1RfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVE9STV9CQ0FTVF9NRVRFUl9DVFJMMCAgICAweDBhNDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fQkNBU1RfTUVURVJfQ1RSTDBfUE9SVDFfTUVURVJJRFhfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fQkNBU1RfTUVURVJfQ1RSTDBfUE9SVDFfTUVURVJJRFhfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fQkNBU1RfTUVURVJfQ1RSTDBfUE9SVDBfTUVURVJJRFhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fQkNBU1RfTUVURVJfQ1RSTDBfUE9SVDBfTUVURVJJRFhfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NUT1JNX0JDQVNUX01FVEVSX0NUUkwxICAgIDB4MGE0NQorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9CQ0FTVF9NRVRFUl9DVFJMMV9QT1JUM19NRVRFUklEWF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9CQ0FTVF9NRVRFUl9DVFJMMV9QT1JUM19NRVRFUklEWF9NQVNLICAgIDB4M0YwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9CQ0FTVF9NRVRFUl9DVFJMMV9QT1JUMl9NRVRFUklEWF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9CQ0FTVF9NRVRFUl9DVFJMMV9QT1JUMl9NRVRFUklEWF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1RPUk1fQkNBU1RfTUVURVJfQ1RSTDIgICAgMHgwYTQ2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX0JDQVNUX01FVEVSX0NUUkwyX1BPUlQ1X01FVEVSSURYX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX0JDQVNUX01FVEVSX0NUUkwyX1BPUlQ1X01FVEVSSURYX01BU0sgICAgMHgzRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX0JDQVNUX01FVEVSX0NUUkwyX1BPUlQ0X01FVEVSSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX0JDQVNUX01FVEVSX0NUUkwyX1BPUlQ0X01FVEVSSURYX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVE9STV9CQ0FTVF9NRVRFUl9DVFJMMyAgICAweDBhNDcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fQkNBU1RfTUVURVJfQ1RSTDNfUE9SVDdfTUVURVJJRFhfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fQkNBU1RfTUVURVJfQ1RSTDNfUE9SVDdfTUVURVJJRFhfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fQkNBU1RfTUVURVJfQ1RSTDNfUE9SVDZfTUVURVJJRFhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fQkNBU1RfTUVURVJfQ1RSTDNfUE9SVDZfTUVURVJJRFhfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NUT1JNX0JDQVNUX01FVEVSX0NUUkw0ICAgIDB4MGE0OAorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9CQ0FTVF9NRVRFUl9DVFJMNF9QT1JUOV9NRVRFUklEWF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9CQ0FTVF9NRVRFUl9DVFJMNF9QT1JUOV9NRVRFUklEWF9NQVNLICAgIDB4M0YwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9CQ0FTVF9NRVRFUl9DVFJMNF9QT1JUOF9NRVRFUklEWF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9CQ0FTVF9NRVRFUl9DVFJMNF9QT1JUOF9NRVRFUklEWF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1RPUk1fQkNBU1RfTUVURVJfQ1RSTDUgICAgMHgwYTQ5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX0JDQVNUX01FVEVSX0NUUkw1X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX0JDQVNUX01FVEVSX0NUUkw1X01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVE9STV9NQ0FTVF9NRVRFUl9DVFJMMCAgICAweDBhNGMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fTUNBU1RfTUVURVJfQ1RSTDBfUE9SVDFfTUVURVJJRFhfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fTUNBU1RfTUVURVJfQ1RSTDBfUE9SVDFfTUVURVJJRFhfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fTUNBU1RfTUVURVJfQ1RSTDBfUE9SVDBfTUVURVJJRFhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fTUNBU1RfTUVURVJfQ1RSTDBfUE9SVDBfTUVURVJJRFhfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NUT1JNX01DQVNUX01FVEVSX0NUUkwxICAgIDB4MGE0ZAorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9NQ0FTVF9NRVRFUl9DVFJMMV9QT1JUM19NRVRFUklEWF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9NQ0FTVF9NRVRFUl9DVFJMMV9QT1JUM19NRVRFUklEWF9NQVNLICAgIDB4M0YwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9NQ0FTVF9NRVRFUl9DVFJMMV9QT1JUMl9NRVRFUklEWF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9NQ0FTVF9NRVRFUl9DVFJMMV9QT1JUMl9NRVRFUklEWF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1RPUk1fTUNBU1RfTUVURVJfQ1RSTDIgICAgMHgwYTRlCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX01DQVNUX01FVEVSX0NUUkwyX1BPUlQ1X01FVEVSSURYX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX01DQVNUX01FVEVSX0NUUkwyX1BPUlQ1X01FVEVSSURYX01BU0sgICAgMHgzRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX01DQVNUX01FVEVSX0NUUkwyX1BPUlQ0X01FVEVSSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX01DQVNUX01FVEVSX0NUUkwyX1BPUlQ0X01FVEVSSURYX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVE9STV9NQ0FTVF9NRVRFUl9DVFJMMyAgICAweDBhNGYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fTUNBU1RfTUVURVJfQ1RSTDNfUE9SVDdfTUVURVJJRFhfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fTUNBU1RfTUVURVJfQ1RSTDNfUE9SVDdfTUVURVJJRFhfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fTUNBU1RfTUVURVJfQ1RSTDNfUE9SVDZfTUVURVJJRFhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fTUNBU1RfTUVURVJfQ1RSTDNfUE9SVDZfTUVURVJJRFhfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NUT1JNX01DQVNUX01FVEVSX0NUUkw0ICAgIDB4MGE1MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9NQ0FTVF9NRVRFUl9DVFJMNF9QT1JUOV9NRVRFUklEWF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9NQ0FTVF9NRVRFUl9DVFJMNF9QT1JUOV9NRVRFUklEWF9NQVNLICAgIDB4M0YwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9NQ0FTVF9NRVRFUl9DVFJMNF9QT1JUOF9NRVRFUklEWF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9NQ0FTVF9NRVRFUl9DVFJMNF9QT1JUOF9NRVRFUklEWF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1RPUk1fTUNBU1RfTUVURVJfQ1RSTDUgICAgMHgwYTUxCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX01DQVNUX01FVEVSX0NUUkw1X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX01DQVNUX01FVEVSX0NUUkw1X01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVE9STV9VTkRBX01FVEVSX0NUUkwwICAgIDB4MGE1NAorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9VTkRBX01FVEVSX0NUUkwwX1BPUlQxX01FVEVSSURYX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX1VOREFfTUVURVJfQ1RSTDBfUE9SVDFfTUVURVJJRFhfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fVU5EQV9NRVRFUl9DVFJMMF9QT1JUMF9NRVRFUklEWF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9VTkRBX01FVEVSX0NUUkwwX1BPUlQwX01FVEVSSURYX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVE9STV9VTkRBX01FVEVSX0NUUkwxICAgIDB4MGE1NQorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9VTkRBX01FVEVSX0NUUkwxX1BPUlQzX01FVEVSSURYX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX1VOREFfTUVURVJfQ1RSTDFfUE9SVDNfTUVURVJJRFhfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fVU5EQV9NRVRFUl9DVFJMMV9QT1JUMl9NRVRFUklEWF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9VTkRBX01FVEVSX0NUUkwxX1BPUlQyX01FVEVSSURYX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVE9STV9VTkRBX01FVEVSX0NUUkwyICAgIDB4MGE1NgorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9VTkRBX01FVEVSX0NUUkwyX1BPUlQ1X01FVEVSSURYX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX1VOREFfTUVURVJfQ1RSTDJfUE9SVDVfTUVURVJJRFhfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fVU5EQV9NRVRFUl9DVFJMMl9QT1JUNF9NRVRFUklEWF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9VTkRBX01FVEVSX0NUUkwyX1BPUlQ0X01FVEVSSURYX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVE9STV9VTkRBX01FVEVSX0NUUkwzICAgIDB4MGE1NworI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9VTkRBX01FVEVSX0NUUkwzX1BPUlQ3X01FVEVSSURYX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX1VOREFfTUVURVJfQ1RSTDNfUE9SVDdfTUVURVJJRFhfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fVU5EQV9NRVRFUl9DVFJMM19QT1JUNl9NRVRFUklEWF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9VTkRBX01FVEVSX0NUUkwzX1BPUlQ2X01FVEVSSURYX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVE9STV9VTkRBX01FVEVSX0NUUkw0ICAgIDB4MGE1OAorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9VTkRBX01FVEVSX0NUUkw0X1BPUlQ5X01FVEVSSURYX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX1VOREFfTUVURVJfQ1RSTDRfUE9SVDlfTUVURVJJRFhfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fVU5EQV9NRVRFUl9DVFJMNF9QT1JUOF9NRVRFUklEWF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9VTkRBX01FVEVSX0NUUkw0X1BPUlQ4X01FVEVSSURYX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVE9STV9VTkRBX01FVEVSX0NUUkw1ICAgIDB4MGE1OQorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9VTkRBX01FVEVSX0NUUkw1X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX1VOREFfTUVURVJfQ1RSTDVfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NUT1JNX1VOTUNfTUVURVJfQ1RSTDAgICAgMHgwYTVjCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX1VOTUNfTUVURVJfQ1RSTDBfUE9SVDFfTUVURVJJRFhfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fVU5NQ19NRVRFUl9DVFJMMF9QT1JUMV9NRVRFUklEWF9NQVNLICAgIDB4M0YwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9VTk1DX01FVEVSX0NUUkwwX1BPUlQwX01FVEVSSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX1VOTUNfTUVURVJfQ1RSTDBfUE9SVDBfTUVURVJJRFhfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NUT1JNX1VOTUNfTUVURVJfQ1RSTDEgICAgMHgwYTVkCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX1VOTUNfTUVURVJfQ1RSTDFfUE9SVDNfTUVURVJJRFhfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fVU5NQ19NRVRFUl9DVFJMMV9QT1JUM19NRVRFUklEWF9NQVNLICAgIDB4M0YwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9VTk1DX01FVEVSX0NUUkwxX1BPUlQyX01FVEVSSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX1VOTUNfTUVURVJfQ1RSTDFfUE9SVDJfTUVURVJJRFhfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NUT1JNX1VOTUNfTUVURVJfQ1RSTDIgICAgMHgwYTVlCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX1VOTUNfTUVURVJfQ1RSTDJfUE9SVDVfTUVURVJJRFhfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fVU5NQ19NRVRFUl9DVFJMMl9QT1JUNV9NRVRFUklEWF9NQVNLICAgIDB4M0YwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9VTk1DX01FVEVSX0NUUkwyX1BPUlQ0X01FVEVSSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX1VOTUNfTUVURVJfQ1RSTDJfUE9SVDRfTUVURVJJRFhfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NUT1JNX1VOTUNfTUVURVJfQ1RSTDMgICAgMHgwYTVmCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX1VOTUNfTUVURVJfQ1RSTDNfUE9SVDdfTUVURVJJRFhfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fVU5NQ19NRVRFUl9DVFJMM19QT1JUN19NRVRFUklEWF9NQVNLICAgIDB4M0YwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9VTk1DX01FVEVSX0NUUkwzX1BPUlQ2X01FVEVSSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX1VOTUNfTUVURVJfQ1RSTDNfUE9SVDZfTUVURVJJRFhfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NUT1JNX0VYVF9DRkcgICAgMHgwYTYwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX0VYVF9FTl9QT1JUTUFTS19FWFRfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX0VYVF9FTl9QT1JUTUFTS19FWFRfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fVU5LTk9XTl9NQ0FTVF9FWFRfRU5fT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX1VOS05PV05fTUNBU1RfRVhUX0VOX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX1VOS05PV05fVUNBU1RfRVhUX0VOX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9VTktOT1dOX1VDQVNUX0VYVF9FTl9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9NQ0FTVF9FWFRfRU5fT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX01DQVNUX0VYVF9FTl9NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX0JDQVNUX0VYVF9FTl9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fQkNBU1RfRVhUX0VOX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fRVhUX0VOX1BPUlRNQVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX0VYVF9FTl9QT1JUTUFTS19NQVNLICAgIDB4M0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NUT1JNX0VYVF9NVFJJRFhfQ0ZHMCAgICAweDBhNjEKKyNkZWZpbmUgICAgUlRMODM2N0NfTUNfU1RPUk1fRVhUX01FVEVSSURYX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX01DX1NUT1JNX0VYVF9NRVRFUklEWF9NQVNLICAgIDB4M0YwMAorI2RlZmluZSAgICBSVEw4MzY3Q19CQ19TVE9STV9FWFRfTUVURVJJRFhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQkNfU1RPUk1fRVhUX01FVEVSSURYX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVE9STV9FWFRfTVRSSURYX0NGRzEgICAgMHgwYTYyCisjZGVmaW5lICAgIFJUTDgzNjdDX1VOTUNfU1RPUk1fRVhUX01FVEVSSURYX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1VOTUNfU1RPUk1fRVhUX01FVEVSSURYX01BU0sgICAgMHgzRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1VOVUNfU1RPUk1fRVhUX01FVEVSSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1VOVUNfU1RPUk1fRVhUX01FVEVSSURYX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVE9STV9VTk1DX01FVEVSX0NUUkw0ICAgIDB4MGE2MworI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9VTk1DX01FVEVSX0NUUkw0X1BPUlQ5X01FVEVSSURYX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX1VOTUNfTUVURVJfQ1RSTDRfUE9SVDlfTUVURVJJRFhfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RPUk1fVU5NQ19NRVRFUl9DVFJMNF9QT1JUOF9NRVRFUklEWF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9VTk1DX01FVEVSX0NUUkw0X1BPUlQ4X01FVEVSSURYX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVE9STV9VTk1DX01FVEVSX0NUUkw1ICAgIDB4MGE2NAorI2RlZmluZSAgICBSVEw4MzY3Q19TVE9STV9VTk1DX01FVEVSX0NUUkw1X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUT1JNX1VOTUNfTUVURVJfQ1RSTDVfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX09BTV9QQVJTRVJfQ1RSTDAgICAgMHgwYTcwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X1BBUkFDVF9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfUEFSQUNUX01BU0sgICAgMHhDMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X1BBUkFDVF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfUEFSQUNUX01BU0sgICAgMHgzMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X1BBUkFDVF9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfUEFSQUNUX01BU0sgICAgMHhDMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfUEFSQUNUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X1BBUkFDVF9NQVNLICAgIDB4MzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX1BBUkFDVF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19QQVJBQ1RfTUFTSyAgICAweEMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX1BBUkFDVF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9QQVJBQ1RfTUFTSyAgICAweDMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX1BBUkFDVF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9QQVJBQ1RfTUFTSyAgICAweEMKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfUEFSQUNUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX1BBUkFDVF9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19PQU1fUEFSU0VSX0NUUkwxICAgIDB4MGE3MQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfUEFSQUNUX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9QQVJBQ1RfTUFTSyAgICAweDMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X1BBUkFDVF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9QQVJBQ1RfTUFTSyAgICAweEMKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfUEFSQUNUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X1BBUkFDVF9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19PQU1fTVVMVElQTEVYRVJfQ1RSTDAgICAgMHgwYTcyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X01VTEFDVF9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfTVVMQUNUX01BU0sgICAgMHhDMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X01VTEFDVF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfTVVMQUNUX01BU0sgICAgMHgzMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X01VTEFDVF9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfTVVMQUNUX01BU0sgICAgMHhDMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfTVVMQUNUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X01VTEFDVF9NQVNLICAgIDB4MzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX01VTEFDVF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19NVUxBQ1RfTUFTSyAgICAweEMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX01VTEFDVF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9NVUxBQ1RfTUFTSyAgICAweDMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX01VTEFDVF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9NVUxBQ1RfTUFTSyAgICAweEMKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfTVVMQUNUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX01VTEFDVF9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19PQU1fTVVMVElQTEVYRVJfQ1RSTDEgICAgMHgwYTczCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9NVUxBQ1RfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX01VTEFDVF9NQVNLICAgIDB4MzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfTVVMQUNUX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X01VTEFDVF9NQVNLICAgIDB4QworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9NVUxBQ1RfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfTVVMQUNUX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX09BTV9DVFJMICAgIDB4MGE3NAorI2RlZmluZSAgICBSVEw4MzY3Q19PQU1fQ1RSTF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19PQU1fQ1RSTF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19ET1QxWF9QT1JUX0VOQUJMRSAgICAweDBhODAKKyNkZWZpbmUgICAgUlRMODM2N0NfRE9UMVhfUE9SVF9FTkFCTEVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRE9UMVhfUE9SVF9FTkFCTEVfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19ET1QxWF9NQUNfRU5BQkxFICAgIDB4MGE4MQorI2RlZmluZSAgICBSVEw4MzY3Q19ET1QxWF9NQUNfRU5BQkxFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RPVDFYX01BQ19FTkFCTEVfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19ET1QxWF9QT1JUX0FVVEggICAgMHgwYTgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0RPVDFYX1BPUlRfQVVUSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19ET1QxWF9QT1JUX0FVVEhfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19ET1QxWF9QT1JUX09QRElSICAgIDB4MGE4MworI2RlZmluZSAgICBSVEw4MzY3Q19ET1QxWF9QT1JUX09QRElSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RPVDFYX1BPUlRfT1BESVJfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19ET1QxWF9VTkFVVEhfQUNUX1cwICAgIDB4MGE4NAorI2RlZmluZSAgICBSVEw4MzY3Q19ET1QxWF9QT1JUN19VTkFVVEhCSF9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfRE9UMVhfUE9SVDdfVU5BVVRIQkhfTUFTSyAgICAweEMwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRE9UMVhfUE9SVDZfVU5BVVRIQkhfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0RPVDFYX1BPUlQ2X1VOQVVUSEJIX01BU0sgICAgMHgzMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RPVDFYX1BPUlQ1X1VOQVVUSEJIX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19ET1QxWF9QT1JUNV9VTkFVVEhCSF9NQVNLICAgIDB4QzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RPVDFYX1BPUlQ0X1VOQVVUSEJIX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0RPVDFYX1BPUlQ0X1VOQVVUSEJIX01BU0sgICAgMHgzMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRE9UMVhfUE9SVDNfVU5BVVRIQkhfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfRE9UMVhfUE9SVDNfVU5BVVRIQkhfTUFTSyAgICAweEMwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RPVDFYX1BPUlQyX1VOQVVUSEJIX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0RPVDFYX1BPUlQyX1VOQVVUSEJIX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19ET1QxWF9QT1JUMV9VTkFVVEhCSF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19ET1QxWF9QT1JUMV9VTkFVVEhCSF9NQVNLICAgIDB4QworI2RlZmluZSAgICBSVEw4MzY3Q19ET1QxWF9QT1JUMF9VTkFVVEhCSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19ET1QxWF9QT1JUMF9VTkFVVEhCSF9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19ET1QxWF9VTkFVVEhfQUNUX1cxICAgIDB4MGE4NQorI2RlZmluZSAgICBSVEw4MzY3Q19ET1QxWF9QT1JUMTBfVU5BVVRIQkhfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfRE9UMVhfUE9SVDEwX1VOQVVUSEJIX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19ET1QxWF9QT1JUOV9VTkFVVEhCSF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19ET1QxWF9QT1JUOV9VTkFVVEhCSF9NQVNLICAgIDB4QworI2RlZmluZSAgICBSVEw4MzY3Q19ET1QxWF9QT1JUOF9VTkFVVEhCSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19ET1QxWF9QT1JUOF9VTkFVVEhCSF9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19ET1QxWF9DRkcgICAgMHgwYTg2CisjZGVmaW5lICAgIFJUTDgzNjdDX0RPVDFYX0dWT1BESVJfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfRE9UMVhfR1ZPUERJUl9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRE9UMVhfTUFDX09QRElSX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0RPVDFYX01BQ19PUERJUl9NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfRE9UMVhfR1ZJRFhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRE9UMVhfR1ZJRFhfTUFTSyAgICAweDFGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0wyX0xSTl9DTlRfQ1RSTDAgICAgMHgwYTg3CisjZGVmaW5lICAgIFJUTDgzNjdDX0wyX0xSTl9DTlRfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTDJfTFJOX0NOVF9DVFJMMF9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19MMl9MUk5fQ05UX0NUUkwxICAgIDB4MGE4OAorI2RlZmluZSAgICBSVEw4MzY3Q19MMl9MUk5fQ05UX0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0wyX0xSTl9DTlRfQ1RSTDFfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTDJfTFJOX0NOVF9DVFJMMiAgICAweDBhODkKKyNkZWZpbmUgICAgUlRMODM2N0NfTDJfTFJOX0NOVF9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19MMl9MUk5fQ05UX0NUUkwyX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0wyX0xSTl9DTlRfQ1RSTDMgICAgMHgwYThhCisjZGVmaW5lICAgIFJUTDgzNjdDX0wyX0xSTl9DTlRfQ1RSTDNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTDJfTFJOX0NOVF9DVFJMM19NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19MMl9MUk5fQ05UX0NUUkw0ICAgIDB4MGE4YgorI2RlZmluZSAgICBSVEw4MzY3Q19MMl9MUk5fQ05UX0NUUkw0X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0wyX0xSTl9DTlRfQ1RSTDRfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTDJfTFJOX0NOVF9DVFJMNSAgICAweDBhOGMKKyNkZWZpbmUgICAgUlRMODM2N0NfTDJfTFJOX0NOVF9DVFJMNV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19MMl9MUk5fQ05UX0NUUkw1X01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0wyX0xSTl9DTlRfQ1RSTDYgICAgMHgwYThkCisjZGVmaW5lICAgIFJUTDgzNjdDX0wyX0xSTl9DTlRfQ1RSTDZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTDJfTFJOX0NOVF9DVFJMNl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19MMl9MUk5fQ05UX0NUUkw3ICAgIDB4MGE4ZQorI2RlZmluZSAgICBSVEw4MzY3Q19MMl9MUk5fQ05UX0NUUkw3X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0wyX0xSTl9DTlRfQ1RSTDdfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTDJfTFJOX0NOVF9DVFJMOCAgICAweDBhOGYKKyNkZWZpbmUgICAgUlRMODM2N0NfTDJfTFJOX0NOVF9DVFJMOF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19MMl9MUk5fQ05UX0NUUkw4X01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0wyX0xSTl9DTlRfQ1RSTDkgICAgMHgwYTkwCisjZGVmaW5lICAgIFJUTDgzNjdDX0wyX0xSTl9DTlRfQ1RSTDlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTDJfTFJOX0NOVF9DVFJMOV9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19MMl9MUk5fQ05UX0NUUkwxMCAgICAweDBhOTIKKyNkZWZpbmUgICAgUlRMODM2N0NfTDJfTFJOX0NOVF9DVFJMMTBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTDJfTFJOX0NOVF9DVFJMMTBfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTFVUX0xSTl9VTkRFUl9TVEFUVVMgICAgMHgwYTkxCisjZGVmaW5lICAgIFJUTDgzNjdDX0xVVF9MUk5fVU5ERVJfU1RBVFVTX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xVVF9MUk5fVU5ERVJfU1RBVFVTX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTDJfU0FfTU9WSU5HX0ZPUkJJRCAgICAweDBhYTAKKyNkZWZpbmUgICAgUlRMODM2N0NfTDJfU0FfTU9WSU5HX0ZPUkJJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19MMl9TQV9NT1ZJTkdfRk9SQklEX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRFJQT1JUX0xFQVJOX0NUUkwgICAgMHgwYWExCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZPUkJJRDFfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfRk9SQklEMV9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19GT1JCSUQwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZPUkJJRDBfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTDJfRFVNTVkwMiAgICAweDBhYTIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTDJfRFVNTVkwMyAgICAweDBhYTMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTDJfRFVNTVkwNCAgICAweDBhYTQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTDJfRFVNTVkwNSAgICAweDBhYTUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTDJfRFVNTVkwNiAgICAweDBhYTYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTDJfRFVNTVkwNyAgICAweDBhYTcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzAwICAgIDB4MEFDMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzAwX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzAxICAgIDB4MEFDMQorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzAxX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzAyICAgIDB4MEFDMgorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzAyX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzAzICAgIDB4MEFDMworI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMDNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzAzX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzA0ICAgIDB4MEFDNAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMDRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzA0X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzA1ICAgIDB4MEFDNQorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMDVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzA1X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzA2ICAgIDB4MEFDNgorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMDZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzA2X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzA3ICAgIDB4MEFDNworI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMDdfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzA3X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzA4ICAgIDB4MEFDOAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMDhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzA4X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzA5ICAgIDB4MEFDOQorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMDlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzA5X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzEwICAgIDB4MEFDQQorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMTBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzEwX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzExICAgIDB4MEFDQgorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMTFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzExX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzEyICAgIDB4MEFDQworI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMTJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzEyX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzEzICAgIDB4MEFDRAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMTNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzEzX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzE0ICAgIDB4MEFDRQorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMTRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzE0X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzE1ICAgIDB4MEFDRgorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMTVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzE1X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzE2ICAgIDB4MEFEMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMTZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzE2X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzE3ICAgIDB4MEFEMQorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMTdfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzE3X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzE4ICAgIDB4MEFEMgorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMThfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzE4X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzE5ICAgIDB4MEFEMworI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMTlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzE5X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzIwICAgIDB4MEFENAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMjBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzIwX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzIxICAgIDB4MEFENQorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMjFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzIxX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzIyICAgIDB4MEFENgorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMjJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzIyX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzIzICAgIDB4MEFENworI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMjNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzIzX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzI0ICAgIDB4MEFEOAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMjRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzI0X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzI1ICAgIDB4MEFEOQorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMjVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzI1X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzI2ICAgIDB4MEFEQQorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMjZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzI2X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzI3ICAgIDB4MEFEQgorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMjdfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzI3X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzI4ICAgIDB4MEFEQworI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMjhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzI4X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzI5ICAgIDB4MEFERAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMjlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzI5X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzMwICAgIDB4MEFERQorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMzBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzMwX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzMxICAgIDB4MEFERgorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMzFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzMxX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzMyICAgIDB4MEFFMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMzJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzMyX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzMzICAgIDB4MEFFMQorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMzNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzMzX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzM0ICAgIDB4MEFFMgorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMzRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzM0X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzM1ICAgIDB4MEFFMworI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMzVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzM1X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzM2ICAgIDB4MEFFNAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMzZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzM2X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzM3ICAgIDB4MEFFNQorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMzdfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzM3X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzM4ICAgIDB4MEFFNgorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMzhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzM4X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzM5ICAgIDB4MEFFNworI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfMzlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzM5X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzQwICAgIDB4MEFFOAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfNDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzQwX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzQxICAgIDB4MEFFOQorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfNDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzQxX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzQyICAgIDB4MEFFQQorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfNDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzQyX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzQzICAgIDB4MEFFQgorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfNDNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzQzX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzQ0ICAgIDB4MEFFQworI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfNDRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzQ0X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzQ1ICAgIDB4MEFFRAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfNDVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzQ1X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzQ2ICAgIDB4MEFFRQorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfNDZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzQ2X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzQ3ICAgIDB4MEFFRgorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfNDdfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzQ3X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzQ4ICAgIDB4MEFGMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfNDhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzQ4X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzQ5ICAgIDB4MEFGMQorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfNDlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzQ5X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzUwICAgIDB4MEFGMgorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfNTBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzUwX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzUxICAgIDB4MEFGMworI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfNTFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzUxX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzUyICAgIDB4MEFGNAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfNTJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzUyX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzUzICAgIDB4MEFGNQorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfNTNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzUzX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzU0ICAgIDB4MEFGNgorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfNTRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzU0X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzU1ICAgIDB4MEFGNworI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfNTVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzU1X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzU2ICAgIDB4MEFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfNTZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzU2X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzU3ICAgIDB4MEFGOQorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfNTdfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzU3X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzU4ICAgIDB4MEFGQQorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfNThfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzU4X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzU5ICAgIDB4MEFGQgorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfNTlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzU5X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzYwICAgIDB4MEFGQworI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfNjBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzYwX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzYxICAgIDB4MEFGRAorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfNjFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzYxX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzYyICAgIDB4MEFGRQorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfNjJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzYyX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzYzICAgIDB4MEFGRgorI2RlZmluZSAgICBSVEw4MzY3Q19JUE1DX0dST1VQX1BNU0tfNjNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9QTVNLXzYzX01BU0sgICAgMHg3RkYKKworLyogKDE2J2gwYjAwKW1sdHZsYW5fcmVnICovCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlkwX0NUUkwwICAgIDB4MGIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZMF9DVFJMMF9WQUxJRF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZMF9DVFJMMF9WQUxJRF9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTBfQ1RSTDBfRk9STUFUX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkwX0NUUkwwX0ZPUk1BVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTBfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTBfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlkwX0NUUkwxICAgIDB4MGIwMQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMF9DVFJMMiAgICAweDBiMDIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTBfQ1RSTDMgICAgMHgwYjAzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlkwX0NUUkw0ICAgIDB4MGIwNAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMV9DVFJMMCAgICAweDBiMDUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTFfQ1RSTDBfVkFMSURfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTFfQ1RSTDBfVkFMSURfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkxX0NUUkwwX0ZPUk1BVF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZMV9DVFJMMF9GT1JNQVRfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkxX0NUUkwwX1NWSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkxX0NUUkwwX1NWSURYX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMV9DVFJMMSAgICAweDBiMDYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTFfQ1RSTDIgICAgMHgwYjA3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlkxX0NUUkwzICAgIDB4MGIwOAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMV9DVFJMNCAgICAweDBiMDkKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTJfQ1RSTDAgICAgMHgwYjBhCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkyX0NUUkwwX1ZBTElEX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkyX0NUUkwwX1ZBTElEX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZMl9DVFJMMF9GT1JNQVRfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTJfQ1RSTDBfRk9STUFUX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZMl9DVFJMMF9TVklEWF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZMl9DVFJMMF9TVklEWF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTJfQ1RSTDEgICAgMHgwYjBiCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlkyX0NUUkwyICAgIDB4MGIwYworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMl9DVFJMMyAgICAweDBiMGQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTJfQ1RSTDQgICAgMHgwYjBlCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlkzX0NUUkwwICAgIDB4MGIwZgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZM19DVFJMMF9WQUxJRF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZM19DVFJMMF9WQUxJRF9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTNfQ1RSTDBfRk9STUFUX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkzX0NUUkwwX0ZPUk1BVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTNfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTNfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlkzX0NUUkwxICAgIDB4MGIxMAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZM19DVFJMMiAgICAweDBiMTEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTNfQ1RSTDMgICAgMHgwYjEyCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlkzX0NUUkw0ICAgIDB4MGIxMworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZNF9DVFJMMCAgICAweDBiMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTRfQ1RSTDBfVkFMSURfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTRfQ1RSTDBfVkFMSURfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlk0X0NUUkwwX0ZPUk1BVF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZNF9DVFJMMF9GT1JNQVRfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlk0X0NUUkwwX1NWSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlk0X0NUUkwwX1NWSURYX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZNF9DVFJMMSAgICAweDBiMTUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTRfQ1RSTDIgICAgMHgwYjE2CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlk0X0NUUkwzICAgIDB4MGIxNworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZNF9DVFJMNCAgICAweDBiMTgKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTVfQ1RSTDAgICAgMHgwYjE5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlk1X0NUUkwwX1ZBTElEX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlk1X0NUUkwwX1ZBTElEX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZNV9DVFJMMF9GT1JNQVRfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTVfQ1RSTDBfRk9STUFUX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZNV9DVFJMMF9TVklEWF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZNV9DVFJMMF9TVklEWF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTVfQ1RSTDEgICAgMHgwYjFhCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlk1X0NUUkwyICAgIDB4MGIxYgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZNV9DVFJMMyAgICAweDBiMWMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTVfQ1RSTDQgICAgMHgwYjFkCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlk2X0NUUkwwICAgIDB4MGIxZQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZNl9DVFJMMF9WQUxJRF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZNl9DVFJMMF9WQUxJRF9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTZfQ1RSTDBfRk9STUFUX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlk2X0NUUkwwX0ZPUk1BVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTZfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTZfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlk2X0NUUkwxICAgIDB4MGIxZgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZNl9DVFJMMiAgICAweDBiMjAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTZfQ1RSTDMgICAgMHgwYjIxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlk2X0NUUkw0ICAgIDB4MGIyMgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZN19DVFJMMCAgICAweDBiMjMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTdfQ1RSTDBfVkFMSURfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTdfQ1RSTDBfVkFMSURfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlk3X0NUUkwwX0ZPUk1BVF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZN19DVFJMMF9GT1JNQVRfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlk3X0NUUkwwX1NWSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlk3X0NUUkwwX1NWSURYX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZN19DVFJMMSAgICAweDBiMjQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTdfQ1RSTDIgICAgMHgwYjI1CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlk3X0NUUkwzICAgIDB4MGIyNgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZN19DVFJMNCAgICAweDBiMjcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWThfQ1RSTDAgICAgMHgwYjI4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlk4X0NUUkwwX1ZBTElEX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlk4X0NUUkwwX1ZBTElEX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZOF9DVFJMMF9GT1JNQVRfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWThfQ1RSTDBfRk9STUFUX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZOF9DVFJMMF9TVklEWF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZOF9DVFJMMF9TVklEWF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWThfQ1RSTDEgICAgMHgwYjI5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlk4X0NUUkwyICAgIDB4MGIyYQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZOF9DVFJMMyAgICAweDBiMmIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWThfQ1RSTDQgICAgMHgwYjJjCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlk5X0NUUkwwICAgIDB4MGIyZAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZOV9DVFJMMF9WQUxJRF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZOV9DVFJMMF9WQUxJRF9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTlfQ1RSTDBfRk9STUFUX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlk5X0NUUkwwX0ZPUk1BVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTlfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTlfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlk5X0NUUkwxICAgIDB4MGIyZQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZOV9DVFJMMiAgICAweDBiMmYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTlfQ1RSTDMgICAgMHgwYjMwCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlk5X0NUUkw0ICAgIDB4MGIzMQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMTBfQ1RSTDAgICAgMHgwYjMyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkxMF9DVFJMMF9WQUxJRF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZMTBfQ1RSTDBfVkFMSURfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkxMF9DVFJMMF9GT1JNQVRfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTEwX0NUUkwwX0ZPUk1BVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTEwX0NUUkwwX1NWSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkxMF9DVFJMMF9TVklEWF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTEwX0NUUkwxICAgIDB4MGIzMworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMTBfQ1RSTDIgICAgMHgwYjM0CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlkxMF9DVFJMMyAgICAweDBiMzUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTEwX0NUUkw0ICAgIDB4MGIzNgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMTFfQ1RSTDAgICAgMHgwYjM3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkxMV9DVFJMMF9WQUxJRF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZMTFfQ1RSTDBfVkFMSURfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkxMV9DVFJMMF9GT1JNQVRfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTExX0NUUkwwX0ZPUk1BVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTExX0NUUkwwX1NWSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkxMV9DVFJMMF9TVklEWF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTExX0NUUkwxICAgIDB4MGIzOAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMTFfQ1RSTDIgICAgMHgwYjM5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlkxMV9DVFJMMyAgICAweDBiM2EKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTExX0NUUkw0ICAgIDB4MGIzYgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMTJfQ1RSTDAgICAgMHgwYjNjCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkxMl9DVFJMMF9WQUxJRF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZMTJfQ1RSTDBfVkFMSURfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkxMl9DVFJMMF9GT1JNQVRfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTEyX0NUUkwwX0ZPUk1BVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTEyX0NUUkwwX1NWSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkxMl9DVFJMMF9TVklEWF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTEyX0NUUkwxICAgIDB4MGIzZAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMTJfQ1RSTDIgICAgMHgwYjNlCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlkxMl9DVFJMMyAgICAweDBiM2YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTEyX0NUUkw0ICAgIDB4MGI0MAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMTNfQ1RSTDAgICAgMHgwYjQxCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkxM19DVFJMMF9WQUxJRF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZMTNfQ1RSTDBfVkFMSURfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkxM19DVFJMMF9GT1JNQVRfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTEzX0NUUkwwX0ZPUk1BVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTEzX0NUUkwwX1NWSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkxM19DVFJMMF9TVklEWF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTEzX0NUUkwxICAgIDB4MGI0MgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMTNfQ1RSTDIgICAgMHgwYjQzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlkxM19DVFJMMyAgICAweDBiNDQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTEzX0NUUkw0ICAgIDB4MGI0NQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMTRfQ1RSTDAgICAgMHgwYjQ2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkxNF9DVFJMMF9WQUxJRF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZMTRfQ1RSTDBfVkFMSURfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkxNF9DVFJMMF9GT1JNQVRfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTE0X0NUUkwwX0ZPUk1BVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTE0X0NUUkwwX1NWSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkxNF9DVFJMMF9TVklEWF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTE0X0NUUkwxICAgIDB4MGI0NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMTRfQ1RSTDIgICAgMHgwYjQ4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlkxNF9DVFJMMyAgICAweDBiNDkKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTE0X0NUUkw0ICAgIDB4MGI0YQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMTVfQ1RSTDAgICAgMHgwYjRiCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkxNV9DVFJMMF9WQUxJRF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZMTVfQ1RSTDBfVkFMSURfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkxNV9DVFJMMF9GT1JNQVRfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTE1X0NUUkwwX0ZPUk1BVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTE1X0NUUkwwX1NWSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkxNV9DVFJMMF9TVklEWF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTE1X0NUUkwxICAgIDB4MGI0YworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMTVfQ1RSTDIgICAgMHgwYjRkCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlkxNV9DVFJMMyAgICAweDBiNGUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTE1X0NUUkw0ICAgIDB4MGI0ZgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMTZfQ1RSTDAgICAgMHgwYjUwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkxNl9DVFJMMF9WQUxJRF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZMTZfQ1RSTDBfVkFMSURfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkxNl9DVFJMMF9GT1JNQVRfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTE2X0NUUkwwX0ZPUk1BVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTE2X0NUUkwwX1NWSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkxNl9DVFJMMF9TVklEWF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTE2X0NUUkwxICAgIDB4MGI1MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMTZfQ1RSTDIgICAgMHgwYjUyCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlkxNl9DVFJMMyAgICAweDBiNTMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTE2X0NUUkw0ICAgIDB4MGI1NAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMTdfQ1RSTDAgICAgMHgwYjU1CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkxN19DVFJMMF9WQUxJRF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZMTdfQ1RSTDBfVkFMSURfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkxN19DVFJMMF9GT1JNQVRfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTE3X0NUUkwwX0ZPUk1BVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTE3X0NUUkwwX1NWSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkxN19DVFJMMF9TVklEWF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTE3X0NUUkwxICAgIDB4MGI1NgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMTdfQ1RSTDIgICAgMHgwYjU3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlkxN19DVFJMMyAgICAweDBiNTgKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTE3X0NUUkw0ICAgIDB4MGI1OQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMThfQ1RSTDAgICAgMHgwYjVhCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkxOF9DVFJMMF9WQUxJRF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZMThfQ1RSTDBfVkFMSURfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkxOF9DVFJMMF9GT1JNQVRfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTE4X0NUUkwwX0ZPUk1BVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTE4X0NUUkwwX1NWSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkxOF9DVFJMMF9TVklEWF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTE4X0NUUkwxICAgIDB4MGI1YgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMThfQ1RSTDIgICAgMHgwYjVjCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlkxOF9DVFJMMyAgICAweDBiNWQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTE4X0NUUkw0ICAgIDB4MGI1ZQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMTlfQ1RSTDAgICAgMHgwYjVmCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkxOV9DVFJMMF9WQUxJRF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZMTlfQ1RSTDBfVkFMSURfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkxOV9DVFJMMF9GT1JNQVRfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTE5X0NUUkwwX0ZPUk1BVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTE5X0NUUkwwX1NWSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkxOV9DVFJMMF9TVklEWF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTE5X0NUUkwxICAgIDB4MGI2MAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMTlfQ1RSTDIgICAgMHgwYjYxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlkxOV9DVFJMMyAgICAweDBiNjIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTE5X0NUUkw0ICAgIDB4MGI2MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMjBfQ1RSTDAgICAgMHgwYjY0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkyMF9DVFJMMF9WQUxJRF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZMjBfQ1RSTDBfVkFMSURfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkyMF9DVFJMMF9GT1JNQVRfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTIwX0NUUkwwX0ZPUk1BVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTIwX0NUUkwwX1NWSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkyMF9DVFJMMF9TVklEWF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTIwX0NUUkwxICAgIDB4MGI2NQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMjBfQ1RSTDIgICAgMHgwYjY2CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlkyMF9DVFJMMyAgICAweDBiNjcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTIwX0NUUkw0ICAgIDB4MGI2OAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMjFfQ1RSTDAgICAgMHgwYjY5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkyMV9DVFJMMF9WQUxJRF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZMjFfQ1RSTDBfVkFMSURfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkyMV9DVFJMMF9GT1JNQVRfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTIxX0NUUkwwX0ZPUk1BVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTIxX0NUUkwwX1NWSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkyMV9DVFJMMF9TVklEWF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTIxX0NUUkwxICAgIDB4MGI2YQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMjFfQ1RSTDIgICAgMHgwYjZiCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlkyMV9DVFJMMyAgICAweDBiNmMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTIxX0NUUkw0ICAgIDB4MGI2ZAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMjJfQ1RSTDAgICAgMHgwYjZlCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkyMl9DVFJMMF9WQUxJRF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZMjJfQ1RSTDBfVkFMSURfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkyMl9DVFJMMF9GT1JNQVRfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTIyX0NUUkwwX0ZPUk1BVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTIyX0NUUkwwX1NWSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkyMl9DVFJMMF9TVklEWF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTIyX0NUUkwxICAgIDB4MGI2ZgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMjJfQ1RSTDIgICAgMHgwYjcwCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlkyMl9DVFJMMyAgICAweDBiNzEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTIyX0NUUkw0ICAgIDB4MGI3MgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMjNfQ1RSTDAgICAgMHgwYjczCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkyM19DVFJMMF9WQUxJRF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZMjNfQ1RSTDBfVkFMSURfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkyM19DVFJMMF9GT1JNQVRfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTIzX0NUUkwwX0ZPUk1BVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTIzX0NUUkwwX1NWSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkyM19DVFJMMF9TVklEWF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTIzX0NUUkwxICAgIDB4MGI3NAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMjNfQ1RSTDIgICAgMHgwYjc1CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlkyM19DVFJMMyAgICAweDBiNzYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTIzX0NUUkw0ICAgIDB4MGI3NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMjRfQ1RSTDAgICAgMHgwYjc4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkyNF9DVFJMMF9WQUxJRF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZMjRfQ1RSTDBfVkFMSURfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkyNF9DVFJMMF9GT1JNQVRfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTI0X0NUUkwwX0ZPUk1BVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTI0X0NUUkwwX1NWSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkyNF9DVFJMMF9TVklEWF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTI0X0NUUkwxICAgIDB4MGI3OQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMjRfQ1RSTDIgICAgMHgwYjdhCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlkyNF9DVFJMMyAgICAweDBiN2IKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTI0X0NUUkw0ICAgIDB4MGI3YworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMjVfQ1RSTDAgICAgMHgwYjdkCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkyNV9DVFJMMF9WQUxJRF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZMjVfQ1RSTDBfVkFMSURfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkyNV9DVFJMMF9GT1JNQVRfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTI1X0NUUkwwX0ZPUk1BVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTI1X0NUUkwwX1NWSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkyNV9DVFJMMF9TVklEWF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTI1X0NUUkwxICAgIDB4MGI3ZQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMjVfQ1RSTDIgICAgMHgwYjdmCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlkyNV9DVFJMMyAgICAweDBiODAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTI1X0NUUkw0ICAgIDB4MGI4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMjZfQ1RSTDAgICAgMHgwYjgyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkyNl9DVFJMMF9WQUxJRF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZMjZfQ1RSTDBfVkFMSURfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkyNl9DVFJMMF9GT1JNQVRfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTI2X0NUUkwwX0ZPUk1BVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTI2X0NUUkwwX1NWSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkyNl9DVFJMMF9TVklEWF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTI2X0NUUkwxICAgIDB4MGI4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMjZfQ1RSTDIgICAgMHgwYjg0CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlkyNl9DVFJMMyAgICAweDBiODUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTI2X0NUUkw0ICAgIDB4MGI4NgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMjdfQ1RSTDAgICAgMHgwYjg3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkyN19DVFJMMF9WQUxJRF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZMjdfQ1RSTDBfVkFMSURfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkyN19DVFJMMF9GT1JNQVRfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTI3X0NUUkwwX0ZPUk1BVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTI3X0NUUkwwX1NWSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkyN19DVFJMMF9TVklEWF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTI3X0NUUkwxICAgIDB4MGI4OAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMjdfQ1RSTDIgICAgMHgwYjg5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlkyN19DVFJMMyAgICAweDBiOGEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTI3X0NUUkw0ICAgIDB4MGI4YgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMjhfQ1RSTDAgICAgMHgwYjhjCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkyOF9DVFJMMF9WQUxJRF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZMjhfQ1RSTDBfVkFMSURfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkyOF9DVFJMMF9GT1JNQVRfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTI4X0NUUkwwX0ZPUk1BVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTI4X0NUUkwwX1NWSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkyOF9DVFJMMF9TVklEWF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTI4X0NUUkwxICAgIDB4MGI4ZAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMjhfQ1RSTDIgICAgMHgwYjhlCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlkyOF9DVFJMMyAgICAweDBiOGYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTI4X0NUUkw0ICAgIDB4MGI5MAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMjlfQ1RSTDAgICAgMHgwYjkxCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkyOV9DVFJMMF9WQUxJRF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZMjlfQ1RSTDBfVkFMSURfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkyOV9DVFJMMF9GT1JNQVRfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTI5X0NUUkwwX0ZPUk1BVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTI5X0NUUkwwX1NWSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkyOV9DVFJMMF9TVklEWF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTI5X0NUUkwxICAgIDB4MGI5MgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMjlfQ1RSTDIgICAgMHgwYjkzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlkyOV9DVFJMMyAgICAweDBiOTQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTI5X0NUUkw0ICAgIDB4MGI5NQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMzBfQ1RSTDAgICAgMHgwYjk2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkzMF9DVFJMMF9WQUxJRF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZMzBfQ1RSTDBfVkFMSURfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkzMF9DVFJMMF9GT1JNQVRfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTMwX0NUUkwwX0ZPUk1BVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTMwX0NUUkwwX1NWSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkzMF9DVFJMMF9TVklEWF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTMwX0NUUkwxICAgIDB4MGI5NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMzBfQ1RSTDIgICAgMHgwYjk4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlkzMF9DVFJMMyAgICAweDBiOTkKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTMwX0NUUkw0ICAgIDB4MGI5YQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMzFfQ1RSTDAgICAgMHgwYjliCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkzMV9DVFJMMF9WQUxJRF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NQ0FTVDJTX0VOVFJZMzFfQ1RSTDBfVkFMSURfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkzMV9DVFJMMF9GT1JNQVRfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTMxX0NUUkwwX0ZPUk1BVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWTMxX0NUUkwwX1NWSURYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01DQVNUMlNfRU5UUlkzMV9DVFJMMF9TVklEWF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTMxX0NUUkwxICAgIDB4MGI5YworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NQ0FTVDJTX0VOVFJZMzFfQ1RSTDIgICAgMHgwYjlkCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01DQVNUMlNfRU5UUlkzMV9DVFJMMyAgICAweDBiOWUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUNBU1QyU19FTlRSWTMxX0NUUkw0ICAgIDB4MGI5ZgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NTFRWTEFOX0RVTU1ZXzAgICAgMHgwYmEwCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01MVFZMQU5fRFVNTVlfMSAgICAweDBiYTEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUxUVkxBTl9EVU1NWV8yICAgIDB4MGJhMgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NTFRWTEFOX0RVTU1ZXzMgICAgMHgwYmEzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01MVFZMQU5fRFVNTVlfNCAgICAweDBiYTQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUxUVkxBTl9EVU1NWV81ICAgIDB4MGJhNQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NTFRWTEFOX0RVTU1ZXzYgICAgMHgwYmE2CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01MVFZMQU5fRFVNTVlfNyAgICAweDBiYTcKKworLyogKDE2J2gwYzAwKXN2bGFuX3JlZyAqLworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkcwX0NUUkwxICAgIDB4MGMwMQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcwX0NUUkwxX1ZTX1VOVEFHU0VUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzBfQ1RSTDFfVlNfVU5UQUdTRVRfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMF9DVFJMMV9WU19TTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzBfQ1RSTDFfVlNfU01CUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMF9DVFJMMiAgICAweDBjMDIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMF9DVFJMMl9WU19GSURFTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcwX0NUUkwyX1ZTX0ZJREVOX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcwX0NUUkwyX1ZTX1NQUklfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMF9DVFJMMl9WU19TUFJJX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcwX0NUUkwyX1ZTX0ZJRF9NU1RJX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzBfQ1RSTDJfVlNfRklEX01TVElfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMF9DVFJMMyAgICAweDBjMDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMF9DVFJMM19WU19FRklEX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcwX0NUUkwzX1ZTX0VGSURfTUFTSyAgICAweEUwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMF9DVFJMM19WU19FRklERU5fT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzBfQ1RSTDNfVlNfRUZJREVOX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzBfQ1RSTDNfVlNfU1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcwX0NUUkwzX1ZTX1NWSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkcxX0NUUkwxICAgIDB4MGMwNAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxX0NUUkwxX1ZTX1VOVEFHU0VUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzFfQ1RSTDFfVlNfVU5UQUdTRVRfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMV9DVFJMMV9WU19TTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzFfQ1RSTDFfVlNfU01CUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMV9DVFJMMiAgICAweDBjMDUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMV9DVFJMMl9WU19GSURFTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxX0NUUkwyX1ZTX0ZJREVOX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxX0NUUkwyX1ZTX1NQUklfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMV9DVFJMMl9WU19TUFJJX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxX0NUUkwyX1ZTX0ZJRF9NU1RJX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzFfQ1RSTDJfVlNfRklEX01TVElfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMV9DVFJMMyAgICAweDBjMDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMV9DVFJMM19WU19FRklEX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxX0NUUkwzX1ZTX0VGSURfTUFTSyAgICAweEUwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMV9DVFJMM19WU19FRklERU5fT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzFfQ1RSTDNfVlNfRUZJREVOX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzFfQ1RSTDNfVlNfU1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxX0NUUkwzX1ZTX1NWSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkcyX0NUUkwxICAgIDB4MGMwNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyX0NUUkwxX1ZTX1VOVEFHU0VUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzJfQ1RSTDFfVlNfVU5UQUdTRVRfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMl9DVFJMMV9WU19TTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzJfQ1RSTDFfVlNfU01CUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMl9DVFJMMiAgICAweDBjMDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMl9DVFJMMl9WU19GSURFTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyX0NUUkwyX1ZTX0ZJREVOX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyX0NUUkwyX1ZTX1NQUklfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMl9DVFJMMl9WU19TUFJJX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyX0NUUkwyX1ZTX0ZJRF9NU1RJX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzJfQ1RSTDJfVlNfRklEX01TVElfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMl9DVFJMMyAgICAweDBjMDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMl9DVFJMM19WU19FRklEX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyX0NUUkwzX1ZTX0VGSURfTUFTSyAgICAweEUwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMl9DVFJMM19WU19FRklERU5fT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzJfQ1RSTDNfVlNfRUZJREVOX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzJfQ1RSTDNfVlNfU1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyX0NUUkwzX1ZTX1NWSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkczX0NUUkwxICAgIDB4MGMwYQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczX0NUUkwxX1ZTX1VOVEFHU0VUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzNfQ1RSTDFfVlNfVU5UQUdTRVRfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHM19DVFJMMV9WU19TTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzNfQ1RSTDFfVlNfU01CUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHM19DVFJMMiAgICAweDBjMGIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHM19DVFJMMl9WU19GSURFTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczX0NUUkwyX1ZTX0ZJREVOX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczX0NUUkwyX1ZTX1NQUklfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHM19DVFJMMl9WU19TUFJJX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczX0NUUkwyX1ZTX0ZJRF9NU1RJX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzNfQ1RSTDJfVlNfRklEX01TVElfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHM19DVFJMMyAgICAweDBjMGMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHM19DVFJMM19WU19FRklEX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczX0NUUkwzX1ZTX0VGSURfTUFTSyAgICAweEUwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHM19DVFJMM19WU19FRklERU5fT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzNfQ1RSTDNfVlNfRUZJREVOX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzNfQ1RSTDNfVlNfU1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczX0NUUkwzX1ZTX1NWSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc0X0NUUkwxICAgIDB4MGMwZAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0X0NUUkwxX1ZTX1VOVEFHU0VUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzRfQ1RSTDFfVlNfVU5UQUdTRVRfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNF9DVFJMMV9WU19TTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzRfQ1RSTDFfVlNfU01CUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNF9DVFJMMiAgICAweDBjMGUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNF9DVFJMMl9WU19GSURFTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0X0NUUkwyX1ZTX0ZJREVOX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0X0NUUkwyX1ZTX1NQUklfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNF9DVFJMMl9WU19TUFJJX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0X0NUUkwyX1ZTX0ZJRF9NU1RJX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzRfQ1RSTDJfVlNfRklEX01TVElfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNF9DVFJMMyAgICAweDBjMGYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNF9DVFJMM19WU19FRklEX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0X0NUUkwzX1ZTX0VGSURfTUFTSyAgICAweEUwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNF9DVFJMM19WU19FRklERU5fT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzRfQ1RSTDNfVlNfRUZJREVOX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzRfQ1RSTDNfVlNfU1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0X0NUUkwzX1ZTX1NWSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc1X0NUUkwxICAgIDB4MGMxMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1X0NUUkwxX1ZTX1VOVEFHU0VUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzVfQ1RSTDFfVlNfVU5UQUdTRVRfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNV9DVFJMMV9WU19TTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzVfQ1RSTDFfVlNfU01CUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNV9DVFJMMiAgICAweDBjMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNV9DVFJMMl9WU19GSURFTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1X0NUUkwyX1ZTX0ZJREVOX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1X0NUUkwyX1ZTX1NQUklfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNV9DVFJMMl9WU19TUFJJX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1X0NUUkwyX1ZTX0ZJRF9NU1RJX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzVfQ1RSTDJfVlNfRklEX01TVElfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNV9DVFJMMyAgICAweDBjMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNV9DVFJMM19WU19FRklEX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1X0NUUkwzX1ZTX0VGSURfTUFTSyAgICAweEUwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNV9DVFJMM19WU19FRklERU5fT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzVfQ1RSTDNfVlNfRUZJREVOX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzVfQ1RSTDNfVlNfU1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1X0NUUkwzX1ZTX1NWSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc2X0NUUkwxICAgIDB4MGMxMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2X0NUUkwxX1ZTX1VOVEFHU0VUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzZfQ1RSTDFfVlNfVU5UQUdTRVRfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNl9DVFJMMV9WU19TTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzZfQ1RSTDFfVlNfU01CUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNl9DVFJMMiAgICAweDBjMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNl9DVFJMMl9WU19GSURFTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2X0NUUkwyX1ZTX0ZJREVOX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2X0NUUkwyX1ZTX1NQUklfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNl9DVFJMMl9WU19TUFJJX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2X0NUUkwyX1ZTX0ZJRF9NU1RJX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzZfQ1RSTDJfVlNfRklEX01TVElfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNl9DVFJMMyAgICAweDBjMTUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNl9DVFJMM19WU19FRklEX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2X0NUUkwzX1ZTX0VGSURfTUFTSyAgICAweEUwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNl9DVFJMM19WU19FRklERU5fT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzZfQ1RSTDNfVlNfRUZJREVOX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzZfQ1RSTDNfVlNfU1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2X0NUUkwzX1ZTX1NWSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc3X0NUUkwxICAgIDB4MGMxNgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc3X0NUUkwxX1ZTX1VOVEFHU0VUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzdfQ1RSTDFfVlNfVU5UQUdTRVRfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHN19DVFJMMV9WU19TTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzdfQ1RSTDFfVlNfU01CUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHN19DVFJMMiAgICAweDBjMTcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHN19DVFJMMl9WU19GSURFTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc3X0NUUkwyX1ZTX0ZJREVOX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc3X0NUUkwyX1ZTX1NQUklfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHN19DVFJMMl9WU19TUFJJX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc3X0NUUkwyX1ZTX0ZJRF9NU1RJX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzdfQ1RSTDJfVlNfRklEX01TVElfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHN19DVFJMMyAgICAweDBjMTgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHN19DVFJMM19WU19FRklEX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc3X0NUUkwzX1ZTX0VGSURfTUFTSyAgICAweEUwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHN19DVFJMM19WU19FRklERU5fT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzdfQ1RSTDNfVlNfRUZJREVOX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzdfQ1RSTDNfVlNfU1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc3X0NUUkwzX1ZTX1NWSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc4X0NUUkwxICAgIDB4MGMxOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc4X0NUUkwxX1ZTX1VOVEFHU0VUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzhfQ1RSTDFfVlNfVU5UQUdTRVRfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHOF9DVFJMMV9WU19TTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzhfQ1RSTDFfVlNfU01CUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHOF9DVFJMMiAgICAweDBjMWEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHOF9DVFJMMl9WU19GSURFTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc4X0NUUkwyX1ZTX0ZJREVOX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc4X0NUUkwyX1ZTX1NQUklfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHOF9DVFJMMl9WU19TUFJJX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc4X0NUUkwyX1ZTX0ZJRF9NU1RJX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzhfQ1RSTDJfVlNfRklEX01TVElfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHOF9DVFJMMyAgICAweDBjMWIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHOF9DVFJMM19WU19FRklEX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc4X0NUUkwzX1ZTX0VGSURfTUFTSyAgICAweEUwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHOF9DVFJMM19WU19FRklERU5fT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzhfQ1RSTDNfVlNfRUZJREVOX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzhfQ1RSTDNfVlNfU1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc4X0NUUkwzX1ZTX1NWSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc5X0NUUkwxICAgIDB4MGMxYworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc5X0NUUkwxX1ZTX1VOVEFHU0VUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzlfQ1RSTDFfVlNfVU5UQUdTRVRfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHOV9DVFJMMV9WU19TTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzlfQ1RSTDFfVlNfU01CUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHOV9DVFJMMiAgICAweDBjMWQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHOV9DVFJMMl9WU19GSURFTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc5X0NUUkwyX1ZTX0ZJREVOX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc5X0NUUkwyX1ZTX1NQUklfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHOV9DVFJMMl9WU19TUFJJX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc5X0NUUkwyX1ZTX0ZJRF9NU1RJX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzlfQ1RSTDJfVlNfRklEX01TVElfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHOV9DVFJMMyAgICAweDBjMWUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHOV9DVFJMM19WU19FRklEX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc5X0NUUkwzX1ZTX0VGSURfTUFTSyAgICAweEUwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHOV9DVFJMM19WU19FRklERU5fT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzlfQ1RSTDNfVlNfRUZJREVOX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzlfQ1RSTDNfVlNfU1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc5X0NUUkwzX1ZTX1NWSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkcxMF9DVFJMMSAgICAweDBjMWYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTBfQ1RSTDFfVlNfVU5UQUdTRVRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTBfQ1RSTDFfVlNfVU5UQUdTRVRfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTBfQ1RSTDFfVlNfU01CUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxMF9DVFJMMV9WU19TTUJSX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkcxMF9DVFJMMiAgICAweDBjMjAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTBfQ1RSTDJfVlNfRklERU5fT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTBfQ1RSTDJfVlNfRklERU5fTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzEwX0NUUkwyX1ZTX1NQUklfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTBfQ1RSTDJfVlNfU1BSSV9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTBfQ1RSTDJfVlNfRklEX01TVElfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTBfQ1RSTDJfVlNfRklEX01TVElfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMTBfQ1RSTDMgICAgMHgwYzIxCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzEwX0NUUkwzX1ZTX0VGSURfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzEwX0NUUkwzX1ZTX0VGSURfTUFTSyAgICAweEUwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTBfQ1RSTDNfVlNfRUZJREVOX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxMF9DVFJMM19WU19FRklERU5fTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTBfQ1RSTDNfVlNfU1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxMF9DVFJMM19WU19TVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMTFfQ1RSTDEgICAgMHgwYzIyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzExX0NUUkwxX1ZTX1VOVEFHU0VUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzExX0NUUkwxX1ZTX1VOVEFHU0VUX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzExX0NUUkwxX1ZTX1NNQlJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTFfQ1RSTDFfVlNfU01CUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMTFfQ1RSTDIgICAgMHgwYzIzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzExX0NUUkwyX1ZTX0ZJREVOX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzExX0NUUkwyX1ZTX0ZJREVOX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxMV9DVFJMMl9WU19TUFJJX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzExX0NUUkwyX1ZTX1NQUklfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzExX0NUUkwyX1ZTX0ZJRF9NU1RJX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzExX0NUUkwyX1ZTX0ZJRF9NU1RJX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzExX0NUUkwzICAgIDB4MGMyNAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxMV9DVFJMM19WU19FRklEX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxMV9DVFJMM19WU19FRklEX01BU0sgICAgMHhFMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzExX0NUUkwzX1ZTX0VGSURFTl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTFfQ1RSTDNfVlNfRUZJREVOX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzExX0NUUkwzX1ZTX1NWSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTFfQ1RSTDNfVlNfU1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzEyX0NUUkwxICAgIDB4MGMyNQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxMl9DVFJMMV9WU19VTlRBR1NFVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxMl9DVFJMMV9WU19VTlRBR1NFVF9NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxMl9DVFJMMV9WU19TTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzEyX0NUUkwxX1ZTX1NNQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzEyX0NUUkwyICAgIDB4MGMyNgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxMl9DVFJMMl9WU19GSURFTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxMl9DVFJMMl9WU19GSURFTl9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTJfQ1RSTDJfVlNfU1BSSV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxMl9DVFJMMl9WU19TUFJJX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxMl9DVFJMMl9WU19GSURfTVNUSV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxMl9DVFJMMl9WU19GSURfTVNUSV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkcxMl9DVFJMMyAgICAweDBjMjcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTJfQ1RSTDNfVlNfRUZJRF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTJfQ1RSTDNfVlNfRUZJRF9NQVNLICAgIDB4RTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxMl9DVFJMM19WU19FRklERU5fT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzEyX0NUUkwzX1ZTX0VGSURFTl9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxMl9DVFJMM19WU19TVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzEyX0NUUkwzX1ZTX1NWSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkcxM19DVFJMMSAgICAweDBjMjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTNfQ1RSTDFfVlNfVU5UQUdTRVRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTNfQ1RSTDFfVlNfVU5UQUdTRVRfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTNfQ1RSTDFfVlNfU01CUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxM19DVFJMMV9WU19TTUJSX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkcxM19DVFJMMiAgICAweDBjMjkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTNfQ1RSTDJfVlNfRklERU5fT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTNfQ1RSTDJfVlNfRklERU5fTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzEzX0NUUkwyX1ZTX1NQUklfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTNfQ1RSTDJfVlNfU1BSSV9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTNfQ1RSTDJfVlNfRklEX01TVElfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTNfQ1RSTDJfVlNfRklEX01TVElfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMTNfQ1RSTDMgICAgMHgwYzJhCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzEzX0NUUkwzX1ZTX0VGSURfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzEzX0NUUkwzX1ZTX0VGSURfTUFTSyAgICAweEUwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTNfQ1RSTDNfVlNfRUZJREVOX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxM19DVFJMM19WU19FRklERU5fTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTNfQ1RSTDNfVlNfU1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxM19DVFJMM19WU19TVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMTRfQ1RSTDEgICAgMHgwYzJiCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE0X0NUUkwxX1ZTX1VOVEFHU0VUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE0X0NUUkwxX1ZTX1VOVEFHU0VUX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE0X0NUUkwxX1ZTX1NNQlJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTRfQ1RSTDFfVlNfU01CUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMTRfQ1RSTDIgICAgMHgwYzJjCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE0X0NUUkwyX1ZTX0ZJREVOX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE0X0NUUkwyX1ZTX0ZJREVOX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxNF9DVFJMMl9WU19TUFJJX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE0X0NUUkwyX1ZTX1NQUklfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE0X0NUUkwyX1ZTX0ZJRF9NU1RJX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE0X0NUUkwyX1ZTX0ZJRF9NU1RJX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzE0X0NUUkwzICAgIDB4MGMyZAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxNF9DVFJMM19WU19FRklEX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxNF9DVFJMM19WU19FRklEX01BU0sgICAgMHhFMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE0X0NUUkwzX1ZTX0VGSURFTl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTRfQ1RSTDNfVlNfRUZJREVOX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE0X0NUUkwzX1ZTX1NWSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTRfQ1RSTDNfVlNfU1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzE1X0NUUkwxICAgIDB4MGMyZQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxNV9DVFJMMV9WU19VTlRBR1NFVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxNV9DVFJMMV9WU19VTlRBR1NFVF9NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxNV9DVFJMMV9WU19TTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE1X0NUUkwxX1ZTX1NNQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzE1X0NUUkwyICAgIDB4MGMyZgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxNV9DVFJMMl9WU19GSURFTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxNV9DVFJMMl9WU19GSURFTl9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTVfQ1RSTDJfVlNfU1BSSV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxNV9DVFJMMl9WU19TUFJJX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxNV9DVFJMMl9WU19GSURfTVNUSV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxNV9DVFJMMl9WU19GSURfTVNUSV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkcxNV9DVFJMMyAgICAweDBjMzAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTVfQ1RSTDNfVlNfRUZJRF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTVfQ1RSTDNfVlNfRUZJRF9NQVNLICAgIDB4RTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxNV9DVFJMM19WU19FRklERU5fT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE1X0NUUkwzX1ZTX0VGSURFTl9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxNV9DVFJMM19WU19TVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE1X0NUUkwzX1ZTX1NWSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkcxNl9DVFJMMSAgICAweDBjMzEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTZfQ1RSTDFfVlNfVU5UQUdTRVRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTZfQ1RSTDFfVlNfVU5UQUdTRVRfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTZfQ1RSTDFfVlNfU01CUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxNl9DVFJMMV9WU19TTUJSX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkcxNl9DVFJMMiAgICAweDBjMzIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTZfQ1RSTDJfVlNfRklERU5fT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTZfQ1RSTDJfVlNfRklERU5fTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE2X0NUUkwyX1ZTX1NQUklfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTZfQ1RSTDJfVlNfU1BSSV9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTZfQ1RSTDJfVlNfRklEX01TVElfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTZfQ1RSTDJfVlNfRklEX01TVElfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMTZfQ1RSTDMgICAgMHgwYzMzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE2X0NUUkwzX1ZTX0VGSURfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE2X0NUUkwzX1ZTX0VGSURfTUFTSyAgICAweEUwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTZfQ1RSTDNfVlNfRUZJREVOX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxNl9DVFJMM19WU19FRklERU5fTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTZfQ1RSTDNfVlNfU1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxNl9DVFJMM19WU19TVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMTdfQ1RSTDEgICAgMHgwYzM0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE3X0NUUkwxX1ZTX1VOVEFHU0VUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE3X0NUUkwxX1ZTX1VOVEFHU0VUX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE3X0NUUkwxX1ZTX1NNQlJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTdfQ1RSTDFfVlNfU01CUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMTdfQ1RSTDIgICAgMHgwYzM1CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE3X0NUUkwyX1ZTX0ZJREVOX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE3X0NUUkwyX1ZTX0ZJREVOX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxN19DVFJMMl9WU19TUFJJX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE3X0NUUkwyX1ZTX1NQUklfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE3X0NUUkwyX1ZTX0ZJRF9NU1RJX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE3X0NUUkwyX1ZTX0ZJRF9NU1RJX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzE3X0NUUkwzICAgIDB4MGMzNgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxN19DVFJMM19WU19FRklEX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxN19DVFJMM19WU19FRklEX01BU0sgICAgMHhFMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE3X0NUUkwzX1ZTX0VGSURFTl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTdfQ1RSTDNfVlNfRUZJREVOX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE3X0NUUkwzX1ZTX1NWSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTdfQ1RSTDNfVlNfU1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzE4X0NUUkwxICAgIDB4MGMzNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxOF9DVFJMMV9WU19VTlRBR1NFVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxOF9DVFJMMV9WU19VTlRBR1NFVF9NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxOF9DVFJMMV9WU19TTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE4X0NUUkwxX1ZTX1NNQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzE4X0NUUkwyICAgIDB4MGMzOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxOF9DVFJMMl9WU19GSURFTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxOF9DVFJMMl9WU19GSURFTl9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMThfQ1RSTDJfVlNfU1BSSV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxOF9DVFJMMl9WU19TUFJJX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxOF9DVFJMMl9WU19GSURfTVNUSV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxOF9DVFJMMl9WU19GSURfTVNUSV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkcxOF9DVFJMMyAgICAweDBjMzkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMThfQ1RSTDNfVlNfRUZJRF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMThfQ1RSTDNfVlNfRUZJRF9NQVNLICAgIDB4RTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxOF9DVFJMM19WU19FRklERU5fT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE4X0NUUkwzX1ZTX0VGSURFTl9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxOF9DVFJMM19WU19TVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE4X0NUUkwzX1ZTX1NWSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkcxOV9DVFJMMSAgICAweDBjM2EKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTlfQ1RSTDFfVlNfVU5UQUdTRVRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTlfQ1RSTDFfVlNfVU5UQUdTRVRfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTlfQ1RSTDFfVlNfU01CUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxOV9DVFJMMV9WU19TTUJSX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkcxOV9DVFJMMiAgICAweDBjM2IKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTlfQ1RSTDJfVlNfRklERU5fT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTlfQ1RSTDJfVlNfRklERU5fTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE5X0NUUkwyX1ZTX1NQUklfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTlfQ1RSTDJfVlNfU1BSSV9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTlfQ1RSTDJfVlNfRklEX01TVElfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTlfQ1RSTDJfVlNfRklEX01TVElfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMTlfQ1RSTDMgICAgMHgwYzNjCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE5X0NUUkwzX1ZTX0VGSURfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE5X0NUUkwzX1ZTX0VGSURfTUFTSyAgICAweEUwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTlfQ1RSTDNfVlNfRUZJREVOX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxOV9DVFJMM19WU19FRklERU5fTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTlfQ1RSTDNfVlNfU1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxOV9DVFJMM19WU19TVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMjBfQ1RSTDEgICAgMHgwYzNkCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzIwX0NUUkwxX1ZTX1VOVEFHU0VUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzIwX0NUUkwxX1ZTX1VOVEFHU0VUX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzIwX0NUUkwxX1ZTX1NNQlJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjBfQ1RSTDFfVlNfU01CUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMjBfQ1RSTDIgICAgMHgwYzNlCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzIwX0NUUkwyX1ZTX0ZJREVOX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzIwX0NUUkwyX1ZTX0ZJREVOX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyMF9DVFJMMl9WU19TUFJJX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzIwX0NUUkwyX1ZTX1NQUklfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzIwX0NUUkwyX1ZTX0ZJRF9NU1RJX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzIwX0NUUkwyX1ZTX0ZJRF9NU1RJX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzIwX0NUUkwzICAgIDB4MGMzZgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyMF9DVFJMM19WU19FRklEX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyMF9DVFJMM19WU19FRklEX01BU0sgICAgMHhFMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzIwX0NUUkwzX1ZTX0VGSURFTl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjBfQ1RSTDNfVlNfRUZJREVOX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzIwX0NUUkwzX1ZTX1NWSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjBfQ1RSTDNfVlNfU1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzIxX0NUUkwxICAgIDB4MGM0MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyMV9DVFJMMV9WU19VTlRBR1NFVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyMV9DVFJMMV9WU19VTlRBR1NFVF9NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyMV9DVFJMMV9WU19TTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzIxX0NUUkwxX1ZTX1NNQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzIxX0NUUkwyICAgIDB4MGM0MQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyMV9DVFJMMl9WU19GSURFTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyMV9DVFJMMl9WU19GSURFTl9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjFfQ1RSTDJfVlNfU1BSSV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyMV9DVFJMMl9WU19TUFJJX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyMV9DVFJMMl9WU19GSURfTVNUSV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyMV9DVFJMMl9WU19GSURfTVNUSV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkcyMV9DVFJMMyAgICAweDBjNDIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjFfQ1RSTDNfVlNfRUZJRF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjFfQ1RSTDNfVlNfRUZJRF9NQVNLICAgIDB4RTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyMV9DVFJMM19WU19FRklERU5fT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzIxX0NUUkwzX1ZTX0VGSURFTl9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyMV9DVFJMM19WU19TVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzIxX0NUUkwzX1ZTX1NWSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkcyMl9DVFJMMSAgICAweDBjNDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjJfQ1RSTDFfVlNfVU5UQUdTRVRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjJfQ1RSTDFfVlNfVU5UQUdTRVRfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjJfQ1RSTDFfVlNfU01CUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyMl9DVFJMMV9WU19TTUJSX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkcyMl9DVFJMMiAgICAweDBjNDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjJfQ1RSTDJfVlNfRklERU5fT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjJfQ1RSTDJfVlNfRklERU5fTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzIyX0NUUkwyX1ZTX1NQUklfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjJfQ1RSTDJfVlNfU1BSSV9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjJfQ1RSTDJfVlNfRklEX01TVElfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjJfQ1RSTDJfVlNfRklEX01TVElfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMjJfQ1RSTDMgICAgMHgwYzQ1CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzIyX0NUUkwzX1ZTX0VGSURfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzIyX0NUUkwzX1ZTX0VGSURfTUFTSyAgICAweEUwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjJfQ1RSTDNfVlNfRUZJREVOX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyMl9DVFJMM19WU19FRklERU5fTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjJfQ1RSTDNfVlNfU1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyMl9DVFJMM19WU19TVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMjNfQ1RSTDEgICAgMHgwYzQ2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzIzX0NUUkwxX1ZTX1VOVEFHU0VUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzIzX0NUUkwxX1ZTX1VOVEFHU0VUX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzIzX0NUUkwxX1ZTX1NNQlJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjNfQ1RSTDFfVlNfU01CUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMjNfQ1RSTDIgICAgMHgwYzQ3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzIzX0NUUkwyX1ZTX0ZJREVOX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzIzX0NUUkwyX1ZTX0ZJREVOX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyM19DVFJMMl9WU19TUFJJX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzIzX0NUUkwyX1ZTX1NQUklfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzIzX0NUUkwyX1ZTX0ZJRF9NU1RJX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzIzX0NUUkwyX1ZTX0ZJRF9NU1RJX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzIzX0NUUkwzICAgIDB4MGM0OAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyM19DVFJMM19WU19FRklEX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyM19DVFJMM19WU19FRklEX01BU0sgICAgMHhFMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzIzX0NUUkwzX1ZTX0VGSURFTl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjNfQ1RSTDNfVlNfRUZJREVOX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzIzX0NUUkwzX1ZTX1NWSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjNfQ1RSTDNfVlNfU1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzI0X0NUUkwxICAgIDB4MGM0OQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyNF9DVFJMMV9WU19VTlRBR1NFVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyNF9DVFJMMV9WU19VTlRBR1NFVF9NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyNF9DVFJMMV9WU19TTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI0X0NUUkwxX1ZTX1NNQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzI0X0NUUkwyICAgIDB4MGM0YQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyNF9DVFJMMl9WU19GSURFTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyNF9DVFJMMl9WU19GSURFTl9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjRfQ1RSTDJfVlNfU1BSSV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyNF9DVFJMMl9WU19TUFJJX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyNF9DVFJMMl9WU19GSURfTVNUSV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyNF9DVFJMMl9WU19GSURfTVNUSV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkcyNF9DVFJMMyAgICAweDBjNGIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjRfQ1RSTDNfVlNfRUZJRF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjRfQ1RSTDNfVlNfRUZJRF9NQVNLICAgIDB4RTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyNF9DVFJMM19WU19FRklERU5fT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI0X0NUUkwzX1ZTX0VGSURFTl9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyNF9DVFJMM19WU19TVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI0X0NUUkwzX1ZTX1NWSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkcyNV9DVFJMMSAgICAweDBjNGMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjVfQ1RSTDFfVlNfVU5UQUdTRVRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjVfQ1RSTDFfVlNfVU5UQUdTRVRfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjVfQ1RSTDFfVlNfU01CUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyNV9DVFJMMV9WU19TTUJSX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkcyNV9DVFJMMiAgICAweDBjNGQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjVfQ1RSTDJfVlNfRklERU5fT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjVfQ1RSTDJfVlNfRklERU5fTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI1X0NUUkwyX1ZTX1NQUklfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjVfQ1RSTDJfVlNfU1BSSV9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjVfQ1RSTDJfVlNfRklEX01TVElfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjVfQ1RSTDJfVlNfRklEX01TVElfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMjVfQ1RSTDMgICAgMHgwYzRlCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI1X0NUUkwzX1ZTX0VGSURfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI1X0NUUkwzX1ZTX0VGSURfTUFTSyAgICAweEUwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjVfQ1RSTDNfVlNfRUZJREVOX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyNV9DVFJMM19WU19FRklERU5fTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjVfQ1RSTDNfVlNfU1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyNV9DVFJMM19WU19TVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMjZfQ1RSTDEgICAgMHgwYzRmCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI2X0NUUkwxX1ZTX1VOVEFHU0VUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI2X0NUUkwxX1ZTX1VOVEFHU0VUX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI2X0NUUkwxX1ZTX1NNQlJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjZfQ1RSTDFfVlNfU01CUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMjZfQ1RSTDIgICAgMHgwYzUwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI2X0NUUkwyX1ZTX0ZJREVOX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI2X0NUUkwyX1ZTX0ZJREVOX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyNl9DVFJMMl9WU19TUFJJX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI2X0NUUkwyX1ZTX1NQUklfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI2X0NUUkwyX1ZTX0ZJRF9NU1RJX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI2X0NUUkwyX1ZTX0ZJRF9NU1RJX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzI2X0NUUkwzICAgIDB4MGM1MQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyNl9DVFJMM19WU19FRklEX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyNl9DVFJMM19WU19FRklEX01BU0sgICAgMHhFMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI2X0NUUkwzX1ZTX0VGSURFTl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjZfQ1RSTDNfVlNfRUZJREVOX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI2X0NUUkwzX1ZTX1NWSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjZfQ1RSTDNfVlNfU1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzI3X0NUUkwxICAgIDB4MGM1MgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyN19DVFJMMV9WU19VTlRBR1NFVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyN19DVFJMMV9WU19VTlRBR1NFVF9NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyN19DVFJMMV9WU19TTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI3X0NUUkwxX1ZTX1NNQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzI3X0NUUkwyICAgIDB4MGM1MworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyN19DVFJMMl9WU19GSURFTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyN19DVFJMMl9WU19GSURFTl9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjdfQ1RSTDJfVlNfU1BSSV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyN19DVFJMMl9WU19TUFJJX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyN19DVFJMMl9WU19GSURfTVNUSV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyN19DVFJMMl9WU19GSURfTVNUSV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkcyN19DVFJMMyAgICAweDBjNTQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjdfQ1RSTDNfVlNfRUZJRF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjdfQ1RSTDNfVlNfRUZJRF9NQVNLICAgIDB4RTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyN19DVFJMM19WU19FRklERU5fT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI3X0NUUkwzX1ZTX0VGSURFTl9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyN19DVFJMM19WU19TVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI3X0NUUkwzX1ZTX1NWSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkcyOF9DVFJMMSAgICAweDBjNTUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjhfQ1RSTDFfVlNfVU5UQUdTRVRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjhfQ1RSTDFfVlNfVU5UQUdTRVRfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjhfQ1RSTDFfVlNfU01CUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyOF9DVFJMMV9WU19TTUJSX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkcyOF9DVFJMMiAgICAweDBjNTYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjhfQ1RSTDJfVlNfRklERU5fT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjhfQ1RSTDJfVlNfRklERU5fTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI4X0NUUkwyX1ZTX1NQUklfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjhfQ1RSTDJfVlNfU1BSSV9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjhfQ1RSTDJfVlNfRklEX01TVElfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjhfQ1RSTDJfVlNfRklEX01TVElfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMjhfQ1RSTDMgICAgMHgwYzU3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI4X0NUUkwzX1ZTX0VGSURfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI4X0NUUkwzX1ZTX0VGSURfTUFTSyAgICAweEUwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjhfQ1RSTDNfVlNfRUZJREVOX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyOF9DVFJMM19WU19FRklERU5fTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjhfQ1RSTDNfVlNfU1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyOF9DVFJMM19WU19TVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMjlfQ1RSTDEgICAgMHgwYzU4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI5X0NUUkwxX1ZTX1VOVEFHU0VUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI5X0NUUkwxX1ZTX1VOVEFHU0VUX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI5X0NUUkwxX1ZTX1NNQlJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjlfQ1RSTDFfVlNfU01CUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMjlfQ1RSTDIgICAgMHgwYzU5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI5X0NUUkwyX1ZTX0ZJREVOX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI5X0NUUkwyX1ZTX0ZJREVOX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyOV9DVFJMMl9WU19TUFJJX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI5X0NUUkwyX1ZTX1NQUklfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI5X0NUUkwyX1ZTX0ZJRF9NU1RJX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI5X0NUUkwyX1ZTX0ZJRF9NU1RJX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzI5X0NUUkwzICAgIDB4MGM1YQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyOV9DVFJMM19WU19FRklEX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyOV9DVFJMM19WU19FRklEX01BU0sgICAgMHhFMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI5X0NUUkwzX1ZTX0VGSURFTl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjlfQ1RSTDNfVlNfRUZJREVOX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI5X0NUUkwzX1ZTX1NWSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjlfQ1RSTDNfVlNfU1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzMwX0NUUkwxICAgIDB4MGM1YgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczMF9DVFJMMV9WU19VTlRBR1NFVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczMF9DVFJMMV9WU19VTlRBR1NFVF9NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczMF9DVFJMMV9WU19TTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzMwX0NUUkwxX1ZTX1NNQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzMwX0NUUkwyICAgIDB4MGM1YworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczMF9DVFJMMl9WU19GSURFTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczMF9DVFJMMl9WU19GSURFTl9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzBfQ1RSTDJfVlNfU1BSSV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczMF9DVFJMMl9WU19TUFJJX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczMF9DVFJMMl9WU19GSURfTVNUSV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczMF9DVFJMMl9WU19GSURfTVNUSV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkczMF9DVFJMMyAgICAweDBjNWQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzBfQ1RSTDNfVlNfRUZJRF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzBfQ1RSTDNfVlNfRUZJRF9NQVNLICAgIDB4RTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczMF9DVFJMM19WU19FRklERU5fT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzMwX0NUUkwzX1ZTX0VGSURFTl9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczMF9DVFJMM19WU19TVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzMwX0NUUkwzX1ZTX1NWSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkczMV9DVFJMMSAgICAweDBjNWUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzFfQ1RSTDFfVlNfVU5UQUdTRVRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzFfQ1RSTDFfVlNfVU5UQUdTRVRfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzFfQ1RSTDFfVlNfU01CUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczMV9DVFJMMV9WU19TTUJSX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkczMV9DVFJMMiAgICAweDBjNWYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzFfQ1RSTDJfVlNfRklERU5fT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzFfQ1RSTDJfVlNfRklERU5fTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzMxX0NUUkwyX1ZTX1NQUklfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzFfQ1RSTDJfVlNfU1BSSV9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzFfQ1RSTDJfVlNfRklEX01TVElfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzFfQ1RSTDJfVlNfRklEX01TVElfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMzFfQ1RSTDMgICAgMHgwYzYwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzMxX0NUUkwzX1ZTX0VGSURfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzMxX0NUUkwzX1ZTX0VGSURfTUFTSyAgICAweEUwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzFfQ1RSTDNfVlNfRUZJREVOX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczMV9DVFJMM19WU19FRklERU5fTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzFfQ1RSTDNfVlNfU1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczMV9DVFJMM19WU19TVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMzJfQ1RSTDEgICAgMHgwYzYxCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzMyX0NUUkwxX1ZTX1VOVEFHU0VUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzMyX0NUUkwxX1ZTX1VOVEFHU0VUX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzMyX0NUUkwxX1ZTX1NNQlJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzJfQ1RSTDFfVlNfU01CUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMzJfQ1RSTDIgICAgMHgwYzYyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzMyX0NUUkwyX1ZTX0ZJREVOX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzMyX0NUUkwyX1ZTX0ZJREVOX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczMl9DVFJMMl9WU19TUFJJX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzMyX0NUUkwyX1ZTX1NQUklfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzMyX0NUUkwyX1ZTX0ZJRF9NU1RJX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzMyX0NUUkwyX1ZTX0ZJRF9NU1RJX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzMyX0NUUkwzICAgIDB4MGM2MworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczMl9DVFJMM19WU19FRklEX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczMl9DVFJMM19WU19FRklEX01BU0sgICAgMHhFMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzMyX0NUUkwzX1ZTX0VGSURFTl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzJfQ1RSTDNfVlNfRUZJREVOX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzMyX0NUUkwzX1ZTX1NWSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzJfQ1RSTDNfVlNfU1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzMzX0NUUkwxICAgIDB4MGM2NAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczM19DVFJMMV9WU19VTlRBR1NFVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczM19DVFJMMV9WU19VTlRBR1NFVF9NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczM19DVFJMMV9WU19TTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzMzX0NUUkwxX1ZTX1NNQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzMzX0NUUkwyICAgIDB4MGM2NQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczM19DVFJMMl9WU19GSURFTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczM19DVFJMMl9WU19GSURFTl9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzNfQ1RSTDJfVlNfU1BSSV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczM19DVFJMMl9WU19TUFJJX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczM19DVFJMMl9WU19GSURfTVNUSV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczM19DVFJMMl9WU19GSURfTVNUSV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkczM19DVFJMMyAgICAweDBjNjYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzNfQ1RSTDNfVlNfRUZJRF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzNfQ1RSTDNfVlNfRUZJRF9NQVNLICAgIDB4RTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczM19DVFJMM19WU19FRklERU5fT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzMzX0NUUkwzX1ZTX0VGSURFTl9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczM19DVFJMM19WU19TVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzMzX0NUUkwzX1ZTX1NWSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkczNF9DVFJMMSAgICAweDBjNjcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzRfQ1RSTDFfVlNfVU5UQUdTRVRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzRfQ1RSTDFfVlNfVU5UQUdTRVRfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzRfQ1RSTDFfVlNfU01CUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczNF9DVFJMMV9WU19TTUJSX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkczNF9DVFJMMiAgICAweDBjNjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzRfQ1RSTDJfVlNfRklERU5fT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzRfQ1RSTDJfVlNfRklERU5fTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM0X0NUUkwyX1ZTX1NQUklfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzRfQ1RSTDJfVlNfU1BSSV9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzRfQ1RSTDJfVlNfRklEX01TVElfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzRfQ1RSTDJfVlNfRklEX01TVElfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMzRfQ1RSTDMgICAgMHgwYzY5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM0X0NUUkwzX1ZTX0VGSURfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM0X0NUUkwzX1ZTX0VGSURfTUFTSyAgICAweEUwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzRfQ1RSTDNfVlNfRUZJREVOX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczNF9DVFJMM19WU19FRklERU5fTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzRfQ1RSTDNfVlNfU1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczNF9DVFJMM19WU19TVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMzVfQ1RSTDEgICAgMHgwYzZhCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM1X0NUUkwxX1ZTX1VOVEFHU0VUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM1X0NUUkwxX1ZTX1VOVEFHU0VUX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM1X0NUUkwxX1ZTX1NNQlJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzVfQ1RSTDFfVlNfU01CUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMzVfQ1RSTDIgICAgMHgwYzZiCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM1X0NUUkwyX1ZTX0ZJREVOX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM1X0NUUkwyX1ZTX0ZJREVOX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczNV9DVFJMMl9WU19TUFJJX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM1X0NUUkwyX1ZTX1NQUklfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM1X0NUUkwyX1ZTX0ZJRF9NU1RJX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM1X0NUUkwyX1ZTX0ZJRF9NU1RJX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzM1X0NUUkwzICAgIDB4MGM2YworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczNV9DVFJMM19WU19FRklEX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczNV9DVFJMM19WU19FRklEX01BU0sgICAgMHhFMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM1X0NUUkwzX1ZTX0VGSURFTl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzVfQ1RSTDNfVlNfRUZJREVOX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM1X0NUUkwzX1ZTX1NWSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzVfQ1RSTDNfVlNfU1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzM2X0NUUkwxICAgIDB4MGM2ZAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczNl9DVFJMMV9WU19VTlRBR1NFVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczNl9DVFJMMV9WU19VTlRBR1NFVF9NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczNl9DVFJMMV9WU19TTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM2X0NUUkwxX1ZTX1NNQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzM2X0NUUkwyICAgIDB4MGM2ZQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczNl9DVFJMMl9WU19GSURFTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczNl9DVFJMMl9WU19GSURFTl9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzZfQ1RSTDJfVlNfU1BSSV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczNl9DVFJMMl9WU19TUFJJX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczNl9DVFJMMl9WU19GSURfTVNUSV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczNl9DVFJMMl9WU19GSURfTVNUSV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkczNl9DVFJMMyAgICAweDBjNmYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzZfQ1RSTDNfVlNfRUZJRF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzZfQ1RSTDNfVlNfRUZJRF9NQVNLICAgIDB4RTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczNl9DVFJMM19WU19FRklERU5fT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM2X0NUUkwzX1ZTX0VGSURFTl9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczNl9DVFJMM19WU19TVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM2X0NUUkwzX1ZTX1NWSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkczN19DVFJMMSAgICAweDBjNzAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzdfQ1RSTDFfVlNfVU5UQUdTRVRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzdfQ1RSTDFfVlNfVU5UQUdTRVRfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzdfQ1RSTDFfVlNfU01CUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczN19DVFJMMV9WU19TTUJSX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkczN19DVFJMMiAgICAweDBjNzEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzdfQ1RSTDJfVlNfRklERU5fT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzdfQ1RSTDJfVlNfRklERU5fTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM3X0NUUkwyX1ZTX1NQUklfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzdfQ1RSTDJfVlNfU1BSSV9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzdfQ1RSTDJfVlNfRklEX01TVElfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzdfQ1RSTDJfVlNfRklEX01TVElfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMzdfQ1RSTDMgICAgMHgwYzcyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM3X0NUUkwzX1ZTX0VGSURfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM3X0NUUkwzX1ZTX0VGSURfTUFTSyAgICAweEUwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzdfQ1RSTDNfVlNfRUZJREVOX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczN19DVFJMM19WU19FRklERU5fTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzdfQ1RSTDNfVlNfU1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczN19DVFJMM19WU19TVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMzhfQ1RSTDEgICAgMHgwYzczCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM4X0NUUkwxX1ZTX1VOVEFHU0VUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM4X0NUUkwxX1ZTX1VOVEFHU0VUX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM4X0NUUkwxX1ZTX1NNQlJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzhfQ1RSTDFfVlNfU01CUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMzhfQ1RSTDIgICAgMHgwYzc0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM4X0NUUkwyX1ZTX0ZJREVOX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM4X0NUUkwyX1ZTX0ZJREVOX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczOF9DVFJMMl9WU19TUFJJX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM4X0NUUkwyX1ZTX1NQUklfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM4X0NUUkwyX1ZTX0ZJRF9NU1RJX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM4X0NUUkwyX1ZTX0ZJRF9NU1RJX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzM4X0NUUkwzICAgIDB4MGM3NQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczOF9DVFJMM19WU19FRklEX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczOF9DVFJMM19WU19FRklEX01BU0sgICAgMHhFMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM4X0NUUkwzX1ZTX0VGSURFTl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzhfQ1RSTDNfVlNfRUZJREVOX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM4X0NUUkwzX1ZTX1NWSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzhfQ1RSTDNfVlNfU1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzM5X0NUUkwxICAgIDB4MGM3NgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczOV9DVFJMMV9WU19VTlRBR1NFVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczOV9DVFJMMV9WU19VTlRBR1NFVF9NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczOV9DVFJMMV9WU19TTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM5X0NUUkwxX1ZTX1NNQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzM5X0NUUkwyICAgIDB4MGM3NworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczOV9DVFJMMl9WU19GSURFTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczOV9DVFJMMl9WU19GSURFTl9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzlfQ1RSTDJfVlNfU1BSSV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczOV9DVFJMMl9WU19TUFJJX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczOV9DVFJMMl9WU19GSURfTVNUSV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczOV9DVFJMMl9WU19GSURfTVNUSV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkczOV9DVFJMMyAgICAweDBjNzgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzlfQ1RSTDNfVlNfRUZJRF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzlfQ1RSTDNfVlNfRUZJRF9NQVNLICAgIDB4RTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczOV9DVFJMM19WU19FRklERU5fT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM5X0NUUkwzX1ZTX0VGSURFTl9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczOV9DVFJMM19WU19TVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM5X0NUUkwzX1ZTX1NWSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc0MF9DVFJMMSAgICAweDBjNzkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDBfQ1RSTDFfVlNfVU5UQUdTRVRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDBfQ1RSTDFfVlNfVU5UQUdTRVRfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDBfQ1RSTDFfVlNfU01CUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0MF9DVFJMMV9WU19TTUJSX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc0MF9DVFJMMiAgICAweDBjN2EKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDBfQ1RSTDJfVlNfRklERU5fT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDBfQ1RSTDJfVlNfRklERU5fTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQwX0NUUkwyX1ZTX1NQUklfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDBfQ1RSTDJfVlNfU1BSSV9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDBfQ1RSTDJfVlNfRklEX01TVElfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDBfQ1RSTDJfVlNfRklEX01TVElfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNDBfQ1RSTDMgICAgMHgwYzdiCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQwX0NUUkwzX1ZTX0VGSURfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQwX0NUUkwzX1ZTX0VGSURfTUFTSyAgICAweEUwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDBfQ1RSTDNfVlNfRUZJREVOX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0MF9DVFJMM19WU19FRklERU5fTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDBfQ1RSTDNfVlNfU1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0MF9DVFJMM19WU19TVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNDFfQ1RSTDEgICAgMHgwYzdjCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQxX0NUUkwxX1ZTX1VOVEFHU0VUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQxX0NUUkwxX1ZTX1VOVEFHU0VUX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQxX0NUUkwxX1ZTX1NNQlJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDFfQ1RSTDFfVlNfU01CUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNDFfQ1RSTDIgICAgMHgwYzdkCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQxX0NUUkwyX1ZTX0ZJREVOX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQxX0NUUkwyX1ZTX0ZJREVOX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0MV9DVFJMMl9WU19TUFJJX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQxX0NUUkwyX1ZTX1NQUklfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQxX0NUUkwyX1ZTX0ZJRF9NU1RJX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQxX0NUUkwyX1ZTX0ZJRF9NU1RJX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzQxX0NUUkwzICAgIDB4MGM3ZQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0MV9DVFJMM19WU19FRklEX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0MV9DVFJMM19WU19FRklEX01BU0sgICAgMHhFMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQxX0NUUkwzX1ZTX0VGSURFTl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDFfQ1RSTDNfVlNfRUZJREVOX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQxX0NUUkwzX1ZTX1NWSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDFfQ1RSTDNfVlNfU1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzQyX0NUUkwxICAgIDB4MGM3ZgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0Ml9DVFJMMV9WU19VTlRBR1NFVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0Ml9DVFJMMV9WU19VTlRBR1NFVF9NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0Ml9DVFJMMV9WU19TTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQyX0NUUkwxX1ZTX1NNQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzQyX0NUUkwyICAgIDB4MGM4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0Ml9DVFJMMl9WU19GSURFTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0Ml9DVFJMMl9WU19GSURFTl9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDJfQ1RSTDJfVlNfU1BSSV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0Ml9DVFJMMl9WU19TUFJJX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0Ml9DVFJMMl9WU19GSURfTVNUSV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0Ml9DVFJMMl9WU19GSURfTVNUSV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc0Ml9DVFJMMyAgICAweDBjODEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDJfQ1RSTDNfVlNfRUZJRF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDJfQ1RSTDNfVlNfRUZJRF9NQVNLICAgIDB4RTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0Ml9DVFJMM19WU19FRklERU5fT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQyX0NUUkwzX1ZTX0VGSURFTl9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0Ml9DVFJMM19WU19TVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQyX0NUUkwzX1ZTX1NWSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc0M19DVFJMMSAgICAweDBjODIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDNfQ1RSTDFfVlNfVU5UQUdTRVRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDNfQ1RSTDFfVlNfVU5UQUdTRVRfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDNfQ1RSTDFfVlNfU01CUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0M19DVFJMMV9WU19TTUJSX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc0M19DVFJMMiAgICAweDBjODMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDNfQ1RSTDJfVlNfRklERU5fT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDNfQ1RSTDJfVlNfRklERU5fTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQzX0NUUkwyX1ZTX1NQUklfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDNfQ1RSTDJfVlNfU1BSSV9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDNfQ1RSTDJfVlNfRklEX01TVElfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDNfQ1RSTDJfVlNfRklEX01TVElfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNDNfQ1RSTDMgICAgMHgwYzg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQzX0NUUkwzX1ZTX0VGSURfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQzX0NUUkwzX1ZTX0VGSURfTUFTSyAgICAweEUwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDNfQ1RSTDNfVlNfRUZJREVOX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0M19DVFJMM19WU19FRklERU5fTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDNfQ1RSTDNfVlNfU1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0M19DVFJMM19WU19TVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNDRfQ1RSTDEgICAgMHgwYzg1CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ0X0NUUkwxX1ZTX1VOVEFHU0VUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ0X0NUUkwxX1ZTX1VOVEFHU0VUX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ0X0NUUkwxX1ZTX1NNQlJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDRfQ1RSTDFfVlNfU01CUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNDRfQ1RSTDIgICAgMHgwYzg2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ0X0NUUkwyX1ZTX0ZJREVOX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ0X0NUUkwyX1ZTX0ZJREVOX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0NF9DVFJMMl9WU19TUFJJX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ0X0NUUkwyX1ZTX1NQUklfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ0X0NUUkwyX1ZTX0ZJRF9NU1RJX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ0X0NUUkwyX1ZTX0ZJRF9NU1RJX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzQ0X0NUUkwzICAgIDB4MGM4NworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0NF9DVFJMM19WU19FRklEX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0NF9DVFJMM19WU19FRklEX01BU0sgICAgMHhFMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ0X0NUUkwzX1ZTX0VGSURFTl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDRfQ1RSTDNfVlNfRUZJREVOX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ0X0NUUkwzX1ZTX1NWSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDRfQ1RSTDNfVlNfU1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzQ1X0NUUkwxICAgIDB4MGM4OAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0NV9DVFJMMV9WU19VTlRBR1NFVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0NV9DVFJMMV9WU19VTlRBR1NFVF9NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0NV9DVFJMMV9WU19TTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ1X0NUUkwxX1ZTX1NNQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzQ1X0NUUkwyICAgIDB4MGM4OQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0NV9DVFJMMl9WU19GSURFTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0NV9DVFJMMl9WU19GSURFTl9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDVfQ1RSTDJfVlNfU1BSSV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0NV9DVFJMMl9WU19TUFJJX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0NV9DVFJMMl9WU19GSURfTVNUSV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0NV9DVFJMMl9WU19GSURfTVNUSV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc0NV9DVFJMMyAgICAweDBjOGEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDVfQ1RSTDNfVlNfRUZJRF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDVfQ1RSTDNfVlNfRUZJRF9NQVNLICAgIDB4RTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0NV9DVFJMM19WU19FRklERU5fT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ1X0NUUkwzX1ZTX0VGSURFTl9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0NV9DVFJMM19WU19TVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ1X0NUUkwzX1ZTX1NWSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc0Nl9DVFJMMSAgICAweDBjOGIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDZfQ1RSTDFfVlNfVU5UQUdTRVRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDZfQ1RSTDFfVlNfVU5UQUdTRVRfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDZfQ1RSTDFfVlNfU01CUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0Nl9DVFJMMV9WU19TTUJSX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc0Nl9DVFJMMiAgICAweDBjOGMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDZfQ1RSTDJfVlNfRklERU5fT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDZfQ1RSTDJfVlNfRklERU5fTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ2X0NUUkwyX1ZTX1NQUklfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDZfQ1RSTDJfVlNfU1BSSV9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDZfQ1RSTDJfVlNfRklEX01TVElfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDZfQ1RSTDJfVlNfRklEX01TVElfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNDZfQ1RSTDMgICAgMHgwYzhkCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ2X0NUUkwzX1ZTX0VGSURfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ2X0NUUkwzX1ZTX0VGSURfTUFTSyAgICAweEUwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDZfQ1RSTDNfVlNfRUZJREVOX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0Nl9DVFJMM19WU19FRklERU5fTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDZfQ1RSTDNfVlNfU1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0Nl9DVFJMM19WU19TVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNDdfQ1RSTDEgICAgMHgwYzhlCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ3X0NUUkwxX1ZTX1VOVEFHU0VUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ3X0NUUkwxX1ZTX1VOVEFHU0VUX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ3X0NUUkwxX1ZTX1NNQlJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDdfQ1RSTDFfVlNfU01CUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNDdfQ1RSTDIgICAgMHgwYzhmCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ3X0NUUkwyX1ZTX0ZJREVOX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ3X0NUUkwyX1ZTX0ZJREVOX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0N19DVFJMMl9WU19TUFJJX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ3X0NUUkwyX1ZTX1NQUklfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ3X0NUUkwyX1ZTX0ZJRF9NU1RJX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ3X0NUUkwyX1ZTX0ZJRF9NU1RJX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzQ3X0NUUkwzICAgIDB4MGM5MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0N19DVFJMM19WU19FRklEX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0N19DVFJMM19WU19FRklEX01BU0sgICAgMHhFMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ3X0NUUkwzX1ZTX0VGSURFTl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDdfQ1RSTDNfVlNfRUZJREVOX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ3X0NUUkwzX1ZTX1NWSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDdfQ1RSTDNfVlNfU1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzQ4X0NUUkwxICAgIDB4MGM5MQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0OF9DVFJMMV9WU19VTlRBR1NFVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0OF9DVFJMMV9WU19VTlRBR1NFVF9NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0OF9DVFJMMV9WU19TTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ4X0NUUkwxX1ZTX1NNQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzQ4X0NUUkwyICAgIDB4MGM5MgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0OF9DVFJMMl9WU19GSURFTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0OF9DVFJMMl9WU19GSURFTl9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDhfQ1RSTDJfVlNfU1BSSV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0OF9DVFJMMl9WU19TUFJJX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0OF9DVFJMMl9WU19GSURfTVNUSV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0OF9DVFJMMl9WU19GSURfTVNUSV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc0OF9DVFJMMyAgICAweDBjOTMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDhfQ1RSTDNfVlNfRUZJRF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDhfQ1RSTDNfVlNfRUZJRF9NQVNLICAgIDB4RTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0OF9DVFJMM19WU19FRklERU5fT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ4X0NUUkwzX1ZTX0VGSURFTl9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0OF9DVFJMM19WU19TVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ4X0NUUkwzX1ZTX1NWSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc0OV9DVFJMMSAgICAweDBjOTQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDlfQ1RSTDFfVlNfVU5UQUdTRVRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDlfQ1RSTDFfVlNfVU5UQUdTRVRfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDlfQ1RSTDFfVlNfU01CUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0OV9DVFJMMV9WU19TTUJSX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc0OV9DVFJMMiAgICAweDBjOTUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDlfQ1RSTDJfVlNfRklERU5fT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDlfQ1RSTDJfVlNfRklERU5fTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ5X0NUUkwyX1ZTX1NQUklfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDlfQ1RSTDJfVlNfU1BSSV9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDlfQ1RSTDJfVlNfRklEX01TVElfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDlfQ1RSTDJfVlNfRklEX01TVElfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNDlfQ1RSTDMgICAgMHgwYzk2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ5X0NUUkwzX1ZTX0VGSURfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ5X0NUUkwzX1ZTX0VGSURfTUFTSyAgICAweEUwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDlfQ1RSTDNfVlNfRUZJREVOX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0OV9DVFJMM19WU19FRklERU5fTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDlfQ1RSTDNfVlNfU1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0OV9DVFJMM19WU19TVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNTBfQ1RSTDEgICAgMHgwYzk3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzUwX0NUUkwxX1ZTX1VOVEFHU0VUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzUwX0NUUkwxX1ZTX1VOVEFHU0VUX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzUwX0NUUkwxX1ZTX1NNQlJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTBfQ1RSTDFfVlNfU01CUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNTBfQ1RSTDIgICAgMHgwYzk4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzUwX0NUUkwyX1ZTX0ZJREVOX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzUwX0NUUkwyX1ZTX0ZJREVOX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1MF9DVFJMMl9WU19TUFJJX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzUwX0NUUkwyX1ZTX1NQUklfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzUwX0NUUkwyX1ZTX0ZJRF9NU1RJX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzUwX0NUUkwyX1ZTX0ZJRF9NU1RJX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzUwX0NUUkwzICAgIDB4MGM5OQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1MF9DVFJMM19WU19FRklEX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1MF9DVFJMM19WU19FRklEX01BU0sgICAgMHhFMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzUwX0NUUkwzX1ZTX0VGSURFTl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTBfQ1RSTDNfVlNfRUZJREVOX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzUwX0NUUkwzX1ZTX1NWSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTBfQ1RSTDNfVlNfU1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzUxX0NUUkwxICAgIDB4MGM5YQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1MV9DVFJMMV9WU19VTlRBR1NFVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1MV9DVFJMMV9WU19VTlRBR1NFVF9NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1MV9DVFJMMV9WU19TTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzUxX0NUUkwxX1ZTX1NNQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzUxX0NUUkwyICAgIDB4MGM5YgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1MV9DVFJMMl9WU19GSURFTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1MV9DVFJMMl9WU19GSURFTl9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTFfQ1RSTDJfVlNfU1BSSV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1MV9DVFJMMl9WU19TUFJJX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1MV9DVFJMMl9WU19GSURfTVNUSV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1MV9DVFJMMl9WU19GSURfTVNUSV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc1MV9DVFJMMyAgICAweDBjOWMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTFfQ1RSTDNfVlNfRUZJRF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTFfQ1RSTDNfVlNfRUZJRF9NQVNLICAgIDB4RTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1MV9DVFJMM19WU19FRklERU5fT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzUxX0NUUkwzX1ZTX0VGSURFTl9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1MV9DVFJMM19WU19TVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzUxX0NUUkwzX1ZTX1NWSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc1Ml9DVFJMMSAgICAweDBjOWQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTJfQ1RSTDFfVlNfVU5UQUdTRVRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTJfQ1RSTDFfVlNfVU5UQUdTRVRfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTJfQ1RSTDFfVlNfU01CUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1Ml9DVFJMMV9WU19TTUJSX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc1Ml9DVFJMMiAgICAweDBjOWUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTJfQ1RSTDJfVlNfRklERU5fT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTJfQ1RSTDJfVlNfRklERU5fTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzUyX0NUUkwyX1ZTX1NQUklfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTJfQ1RSTDJfVlNfU1BSSV9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTJfQ1RSTDJfVlNfRklEX01TVElfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTJfQ1RSTDJfVlNfRklEX01TVElfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNTJfQ1RSTDMgICAgMHgwYzlmCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzUyX0NUUkwzX1ZTX0VGSURfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzUyX0NUUkwzX1ZTX0VGSURfTUFTSyAgICAweEUwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTJfQ1RSTDNfVlNfRUZJREVOX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1Ml9DVFJMM19WU19FRklERU5fTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTJfQ1RSTDNfVlNfU1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1Ml9DVFJMM19WU19TVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNTNfQ1RSTDEgICAgMHgwY2EwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzUzX0NUUkwxX1ZTX1VOVEFHU0VUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzUzX0NUUkwxX1ZTX1VOVEFHU0VUX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzUzX0NUUkwxX1ZTX1NNQlJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTNfQ1RSTDFfVlNfU01CUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNTNfQ1RSTDIgICAgMHgwY2ExCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzUzX0NUUkwyX1ZTX0ZJREVOX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzUzX0NUUkwyX1ZTX0ZJREVOX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1M19DVFJMMl9WU19TUFJJX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzUzX0NUUkwyX1ZTX1NQUklfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzUzX0NUUkwyX1ZTX0ZJRF9NU1RJX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzUzX0NUUkwyX1ZTX0ZJRF9NU1RJX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzUzX0NUUkwzICAgIDB4MGNhMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1M19DVFJMM19WU19FRklEX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1M19DVFJMM19WU19FRklEX01BU0sgICAgMHhFMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzUzX0NUUkwzX1ZTX0VGSURFTl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTNfQ1RSTDNfVlNfRUZJREVOX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzUzX0NUUkwzX1ZTX1NWSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTNfQ1RSTDNfVlNfU1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzU0X0NUUkwxICAgIDB4MGNhMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1NF9DVFJMMV9WU19VTlRBR1NFVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1NF9DVFJMMV9WU19VTlRBR1NFVF9NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1NF9DVFJMMV9WU19TTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU0X0NUUkwxX1ZTX1NNQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzU0X0NUUkwyICAgIDB4MGNhNAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1NF9DVFJMMl9WU19GSURFTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1NF9DVFJMMl9WU19GSURFTl9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTRfQ1RSTDJfVlNfU1BSSV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1NF9DVFJMMl9WU19TUFJJX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1NF9DVFJMMl9WU19GSURfTVNUSV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1NF9DVFJMMl9WU19GSURfTVNUSV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc1NF9DVFJMMyAgICAweDBjYTUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTRfQ1RSTDNfVlNfRUZJRF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTRfQ1RSTDNfVlNfRUZJRF9NQVNLICAgIDB4RTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1NF9DVFJMM19WU19FRklERU5fT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU0X0NUUkwzX1ZTX0VGSURFTl9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1NF9DVFJMM19WU19TVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU0X0NUUkwzX1ZTX1NWSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc1NV9DVFJMMSAgICAweDBjYTYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTVfQ1RSTDFfVlNfVU5UQUdTRVRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTVfQ1RSTDFfVlNfVU5UQUdTRVRfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTVfQ1RSTDFfVlNfU01CUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1NV9DVFJMMV9WU19TTUJSX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc1NV9DVFJMMiAgICAweDBjYTcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTVfQ1RSTDJfVlNfRklERU5fT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTVfQ1RSTDJfVlNfRklERU5fTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU1X0NUUkwyX1ZTX1NQUklfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTVfQ1RSTDJfVlNfU1BSSV9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTVfQ1RSTDJfVlNfRklEX01TVElfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTVfQ1RSTDJfVlNfRklEX01TVElfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNTVfQ1RSTDMgICAgMHgwY2E4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU1X0NUUkwzX1ZTX0VGSURfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU1X0NUUkwzX1ZTX0VGSURfTUFTSyAgICAweEUwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTVfQ1RSTDNfVlNfRUZJREVOX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1NV9DVFJMM19WU19FRklERU5fTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTVfQ1RSTDNfVlNfU1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1NV9DVFJMM19WU19TVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNTZfQ1RSTDEgICAgMHgwY2E5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU2X0NUUkwxX1ZTX1VOVEFHU0VUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU2X0NUUkwxX1ZTX1VOVEFHU0VUX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU2X0NUUkwxX1ZTX1NNQlJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTZfQ1RSTDFfVlNfU01CUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNTZfQ1RSTDIgICAgMHgwY2FhCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU2X0NUUkwyX1ZTX0ZJREVOX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU2X0NUUkwyX1ZTX0ZJREVOX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1Nl9DVFJMMl9WU19TUFJJX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU2X0NUUkwyX1ZTX1NQUklfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU2X0NUUkwyX1ZTX0ZJRF9NU1RJX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU2X0NUUkwyX1ZTX0ZJRF9NU1RJX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzU2X0NUUkwzICAgIDB4MGNhYgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1Nl9DVFJMM19WU19FRklEX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1Nl9DVFJMM19WU19FRklEX01BU0sgICAgMHhFMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU2X0NUUkwzX1ZTX0VGSURFTl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTZfQ1RSTDNfVlNfRUZJREVOX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU2X0NUUkwzX1ZTX1NWSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTZfQ1RSTDNfVlNfU1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzU3X0NUUkwxICAgIDB4MGNhYworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1N19DVFJMMV9WU19VTlRBR1NFVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1N19DVFJMMV9WU19VTlRBR1NFVF9NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1N19DVFJMMV9WU19TTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU3X0NUUkwxX1ZTX1NNQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzU3X0NUUkwyICAgIDB4MGNhZAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1N19DVFJMMl9WU19GSURFTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1N19DVFJMMl9WU19GSURFTl9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTdfQ1RSTDJfVlNfU1BSSV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1N19DVFJMMl9WU19TUFJJX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1N19DVFJMMl9WU19GSURfTVNUSV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1N19DVFJMMl9WU19GSURfTVNUSV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc1N19DVFJMMyAgICAweDBjYWUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTdfQ1RSTDNfVlNfRUZJRF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTdfQ1RSTDNfVlNfRUZJRF9NQVNLICAgIDB4RTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1N19DVFJMM19WU19FRklERU5fT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU3X0NUUkwzX1ZTX0VGSURFTl9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1N19DVFJMM19WU19TVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU3X0NUUkwzX1ZTX1NWSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc1OF9DVFJMMSAgICAweDBjYWYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNThfQ1RSTDFfVlNfVU5UQUdTRVRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNThfQ1RSTDFfVlNfVU5UQUdTRVRfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNThfQ1RSTDFfVlNfU01CUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1OF9DVFJMMV9WU19TTUJSX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc1OF9DVFJMMiAgICAweDBjYjAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNThfQ1RSTDJfVlNfRklERU5fT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNThfQ1RSTDJfVlNfRklERU5fTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU4X0NUUkwyX1ZTX1NQUklfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNThfQ1RSTDJfVlNfU1BSSV9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNThfQ1RSTDJfVlNfRklEX01TVElfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNThfQ1RSTDJfVlNfRklEX01TVElfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNThfQ1RSTDMgICAgMHgwY2IxCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU4X0NUUkwzX1ZTX0VGSURfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU4X0NUUkwzX1ZTX0VGSURfTUFTSyAgICAweEUwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNThfQ1RSTDNfVlNfRUZJREVOX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1OF9DVFJMM19WU19FRklERU5fTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNThfQ1RSTDNfVlNfU1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1OF9DVFJMM19WU19TVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNTlfQ1RSTDEgICAgMHgwY2IyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU5X0NUUkwxX1ZTX1VOVEFHU0VUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU5X0NUUkwxX1ZTX1VOVEFHU0VUX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU5X0NUUkwxX1ZTX1NNQlJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTlfQ1RSTDFfVlNfU01CUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNTlfQ1RSTDIgICAgMHgwY2IzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU5X0NUUkwyX1ZTX0ZJREVOX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU5X0NUUkwyX1ZTX0ZJREVOX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1OV9DVFJMMl9WU19TUFJJX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU5X0NUUkwyX1ZTX1NQUklfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU5X0NUUkwyX1ZTX0ZJRF9NU1RJX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU5X0NUUkwyX1ZTX0ZJRF9NU1RJX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzU5X0NUUkwzICAgIDB4MGNiNAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1OV9DVFJMM19WU19FRklEX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1OV9DVFJMM19WU19FRklEX01BU0sgICAgMHhFMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU5X0NUUkwzX1ZTX0VGSURFTl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTlfQ1RSTDNfVlNfRUZJREVOX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU5X0NUUkwzX1ZTX1NWSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTlfQ1RSTDNfVlNfU1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzYwX0NUUkwxICAgIDB4MGNiNQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2MF9DVFJMMV9WU19VTlRBR1NFVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2MF9DVFJMMV9WU19VTlRBR1NFVF9NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2MF9DVFJMMV9WU19TTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzYwX0NUUkwxX1ZTX1NNQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzYwX0NUUkwyICAgIDB4MGNiNgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2MF9DVFJMMl9WU19GSURFTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2MF9DVFJMMl9WU19GSURFTl9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNjBfQ1RSTDJfVlNfU1BSSV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2MF9DVFJMMl9WU19TUFJJX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2MF9DVFJMMl9WU19GSURfTVNUSV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2MF9DVFJMMl9WU19GSURfTVNUSV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc2MF9DVFJMMyAgICAweDBjYjcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNjBfQ1RSTDNfVlNfRUZJRF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNjBfQ1RSTDNfVlNfRUZJRF9NQVNLICAgIDB4RTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2MF9DVFJMM19WU19FRklERU5fT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzYwX0NUUkwzX1ZTX0VGSURFTl9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2MF9DVFJMM19WU19TVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzYwX0NUUkwzX1ZTX1NWSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc2MV9DVFJMMSAgICAweDBjYjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNjFfQ1RSTDFfVlNfVU5UQUdTRVRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNjFfQ1RSTDFfVlNfVU5UQUdTRVRfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNjFfQ1RSTDFfVlNfU01CUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2MV9DVFJMMV9WU19TTUJSX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc2MV9DVFJMMiAgICAweDBjYjkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNjFfQ1RSTDJfVlNfRklERU5fT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNjFfQ1RSTDJfVlNfRklERU5fTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzYxX0NUUkwyX1ZTX1NQUklfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNjFfQ1RSTDJfVlNfU1BSSV9NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNjFfQ1RSTDJfVlNfRklEX01TVElfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNjFfQ1RSTDJfVlNfRklEX01TVElfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNjFfQ1RSTDMgICAgMHgwY2JhCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzYxX0NUUkwzX1ZTX0VGSURfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzYxX0NUUkwzX1ZTX0VGSURfTUFTSyAgICAweEUwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNjFfQ1RSTDNfVlNfRUZJREVOX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2MV9DVFJMM19WU19FRklERU5fTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNjFfQ1RSTDNfVlNfU1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2MV9DVFJMM19WU19TVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNjJfQ1RSTDEgICAgMHgwY2JiCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzYyX0NUUkwxX1ZTX1VOVEFHU0VUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzYyX0NUUkwxX1ZTX1VOVEFHU0VUX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzYyX0NUUkwxX1ZTX1NNQlJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNjJfQ1RSTDFfVlNfU01CUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNjJfQ1RSTDIgICAgMHgwY2JjCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzYyX0NUUkwyX1ZTX0ZJREVOX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzYyX0NUUkwyX1ZTX0ZJREVOX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2Ml9DVFJMMl9WU19TUFJJX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzYyX0NUUkwyX1ZTX1NQUklfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzYyX0NUUkwyX1ZTX0ZJRF9NU1RJX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzYyX0NUUkwyX1ZTX0ZJRF9NU1RJX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzYyX0NUUkwzICAgIDB4MGNiZAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2Ml9DVFJMM19WU19FRklEX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2Ml9DVFJMM19WU19FRklEX01BU0sgICAgMHhFMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzYyX0NUUkwzX1ZTX0VGSURFTl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNjJfQ1RSTDNfVlNfRUZJREVOX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzYyX0NUUkwzX1ZTX1NWSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNjJfQ1RSTDNfVlNfU1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzYzX0NUUkwxICAgIDB4MGNiZQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2M19DVFJMMV9WU19VTlRBR1NFVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2M19DVFJMMV9WU19VTlRBR1NFVF9NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2M19DVFJMMV9WU19TTUJSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzYzX0NUUkwxX1ZTX1NNQlJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzYzX0NUUkwyICAgIDB4MGNiZgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2M19DVFJMMl9WU19GSURFTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2M19DVFJMMl9WU19GSURFTl9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNjNfQ1RSTDJfVlNfU1BSSV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2M19DVFJMMl9WU19TUFJJX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2M19DVFJMMl9WU19GSURfTVNUSV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2M19DVFJMMl9WU19GSURfTVNUSV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc2M19DVFJMMyAgICAweDBjYzAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNjNfQ1RSTDNfVlNfRUZJRF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNjNfQ1RSTDNfVlNfRUZJRF9NQVNLICAgIDB4RTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2M19DVFJMM19WU19FRklERU5fT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzYzX0NUUkwzX1ZTX0VGSURFTl9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2M19DVFJMM19WU19TVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzYzX0NUUkwzX1ZTX1NWSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkcwX0NUUkw0ICAgIDB4MGNjMQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcwX0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcwX0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzBfQ1RSTDRfVlNfU01CUl9FWFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMF9DVFJMNF9WU19TTUJSX0VYVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkcxX0NUUkw0ICAgIDB4MGNjMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxX0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxX0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzFfQ1RSTDRfVlNfU01CUl9FWFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMV9DVFJMNF9WU19TTUJSX0VYVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkcyX0NUUkw0ICAgIDB4MGNjMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyX0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyX0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzJfQ1RSTDRfVlNfU01CUl9FWFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMl9DVFJMNF9WU19TTUJSX0VYVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkczX0NUUkw0ICAgIDB4MGNjNAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczX0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczX0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzNfQ1RSTDRfVlNfU01CUl9FWFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHM19DVFJMNF9WU19TTUJSX0VYVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc0X0NUUkw0ICAgIDB4MGNjNQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0X0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0X0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzRfQ1RSTDRfVlNfU01CUl9FWFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNF9DVFJMNF9WU19TTUJSX0VYVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc1X0NUUkw0ICAgIDB4MGNjNgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1X0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1X0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzVfQ1RSTDRfVlNfU01CUl9FWFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNV9DVFJMNF9WU19TTUJSX0VYVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc2X0NUUkw0ICAgIDB4MGNjNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2X0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2X0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzZfQ1RSTDRfVlNfU01CUl9FWFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNl9DVFJMNF9WU19TTUJSX0VYVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc3X0NUUkw0ICAgIDB4MGNjOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc3X0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc3X0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzdfQ1RSTDRfVlNfU01CUl9FWFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHN19DVFJMNF9WU19TTUJSX0VYVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc4X0NUUkw0ICAgIDB4MGNjOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc4X0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc4X0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzhfQ1RSTDRfVlNfU01CUl9FWFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHOF9DVFJMNF9WU19TTUJSX0VYVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc5X0NUUkw0ICAgIDB4MGNjYQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc5X0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc5X0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzlfQ1RSTDRfVlNfU01CUl9FWFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHOV9DVFJMNF9WU19TTUJSX0VYVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkcxMF9DVFJMNCAgICAweDBjY2IKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTBfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzEwX0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzEwX0NUUkw0X1ZTX1NNQlJfRVhUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzEwX0NUUkw0X1ZTX1NNQlJfRVhUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzExX0NUUkw0ICAgIDB4MGNjYworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxMV9DVFJMNF9WU19VTlRBR1NFVF9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTFfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTFfQ1RSTDRfVlNfU01CUl9FWFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTFfQ1RSTDRfVlNfU01CUl9FWFRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMTJfQ1RSTDQgICAgMHgwY2NkCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzEyX0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxMl9DVFJMNF9WU19VTlRBR1NFVF9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxMl9DVFJMNF9WU19TTUJSX0VYVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxMl9DVFJMNF9WU19TTUJSX0VYVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkcxM19DVFJMNCAgICAweDBjY2UKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTNfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzEzX0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzEzX0NUUkw0X1ZTX1NNQlJfRVhUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzEzX0NUUkw0X1ZTX1NNQlJfRVhUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzE0X0NUUkw0ICAgIDB4MGNjZgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxNF9DVFJMNF9WU19VTlRBR1NFVF9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTRfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTRfQ1RSTDRfVlNfU01CUl9FWFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTRfQ1RSTDRfVlNfU01CUl9FWFRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMTVfQ1RSTDQgICAgMHgwY2QwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE1X0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxNV9DVFJMNF9WU19VTlRBR1NFVF9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxNV9DVFJMNF9WU19TTUJSX0VYVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxNV9DVFJMNF9WU19TTUJSX0VYVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkcxNl9DVFJMNCAgICAweDBjZDEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTZfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE2X0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE2X0NUUkw0X1ZTX1NNQlJfRVhUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE2X0NUUkw0X1ZTX1NNQlJfRVhUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzE3X0NUUkw0ICAgIDB4MGNkMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxN19DVFJMNF9WU19VTlRBR1NFVF9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTdfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTdfQ1RSTDRfVlNfU01CUl9FWFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTdfQ1RSTDRfVlNfU01CUl9FWFRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMThfQ1RSTDQgICAgMHgwY2QzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE4X0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxOF9DVFJMNF9WU19VTlRBR1NFVF9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxOF9DVFJMNF9WU19TTUJSX0VYVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcxOF9DVFJMNF9WU19TTUJSX0VYVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkcxOV9DVFJMNCAgICAweDBjZDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMTlfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE5X0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE5X0NUUkw0X1ZTX1NNQlJfRVhUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzE5X0NUUkw0X1ZTX1NNQlJfRVhUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzIwX0NUUkw0ICAgIDB4MGNkNQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyMF9DVFJMNF9WU19VTlRBR1NFVF9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjBfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjBfQ1RSTDRfVlNfU01CUl9FWFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjBfQ1RSTDRfVlNfU01CUl9FWFRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMjFfQ1RSTDQgICAgMHgwY2Q2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzIxX0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyMV9DVFJMNF9WU19VTlRBR1NFVF9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyMV9DVFJMNF9WU19TTUJSX0VYVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyMV9DVFJMNF9WU19TTUJSX0VYVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkcyMl9DVFJMNCAgICAweDBjZDcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjJfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzIyX0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzIyX0NUUkw0X1ZTX1NNQlJfRVhUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzIyX0NUUkw0X1ZTX1NNQlJfRVhUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzIzX0NUUkw0ICAgIDB4MGNkOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyM19DVFJMNF9WU19VTlRBR1NFVF9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjNfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjNfQ1RSTDRfVlNfU01CUl9FWFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjNfQ1RSTDRfVlNfU01CUl9FWFRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMjRfQ1RSTDQgICAgMHgwY2Q5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI0X0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyNF9DVFJMNF9WU19VTlRBR1NFVF9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyNF9DVFJMNF9WU19TTUJSX0VYVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyNF9DVFJMNF9WU19TTUJSX0VYVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkcyNV9DVFJMNCAgICAweDBjZGEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjVfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI1X0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI1X0NUUkw0X1ZTX1NNQlJfRVhUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI1X0NUUkw0X1ZTX1NNQlJfRVhUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzI2X0NUUkw0ICAgIDB4MGNkYgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyNl9DVFJMNF9WU19VTlRBR1NFVF9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjZfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjZfQ1RSTDRfVlNfU01CUl9FWFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjZfQ1RSTDRfVlNfU01CUl9FWFRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMjdfQ1RSTDQgICAgMHgwY2RjCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI3X0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyN19DVFJMNF9WU19VTlRBR1NFVF9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyN19DVFJMNF9WU19TTUJSX0VYVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyN19DVFJMNF9WU19TTUJSX0VYVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkcyOF9DVFJMNCAgICAweDBjZGQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjhfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI4X0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI4X0NUUkw0X1ZTX1NNQlJfRVhUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzI4X0NUUkw0X1ZTX1NNQlJfRVhUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzI5X0NUUkw0ICAgIDB4MGNkZQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkcyOV9DVFJMNF9WU19VTlRBR1NFVF9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjlfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjlfQ1RSTDRfVlNfU01CUl9FWFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMjlfQ1RSTDRfVlNfU01CUl9FWFRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMzBfQ1RSTDQgICAgMHgwY2RmCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzMwX0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczMF9DVFJMNF9WU19VTlRBR1NFVF9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczMF9DVFJMNF9WU19TTUJSX0VYVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczMF9DVFJMNF9WU19TTUJSX0VYVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkczMV9DVFJMNCAgICAweDBjZTAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzFfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzMxX0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzMxX0NUUkw0X1ZTX1NNQlJfRVhUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzMxX0NUUkw0X1ZTX1NNQlJfRVhUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzMyX0NUUkw0ICAgIDB4MGNlMQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczMl9DVFJMNF9WU19VTlRBR1NFVF9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzJfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzJfQ1RSTDRfVlNfU01CUl9FWFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzJfQ1RSTDRfVlNfU01CUl9FWFRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMzNfQ1RSTDQgICAgMHgwY2UyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzMzX0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczM19DVFJMNF9WU19VTlRBR1NFVF9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczM19DVFJMNF9WU19TTUJSX0VYVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczM19DVFJMNF9WU19TTUJSX0VYVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkczNF9DVFJMNCAgICAweDBjZTMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzRfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM0X0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM0X0NUUkw0X1ZTX1NNQlJfRVhUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM0X0NUUkw0X1ZTX1NNQlJfRVhUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzM1X0NUUkw0ICAgIDB4MGNlNAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczNV9DVFJMNF9WU19VTlRBR1NFVF9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzVfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzVfQ1RSTDRfVlNfU01CUl9FWFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzVfQ1RSTDRfVlNfU01CUl9FWFRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMzZfQ1RSTDQgICAgMHgwY2U1CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM2X0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczNl9DVFJMNF9WU19VTlRBR1NFVF9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczNl9DVFJMNF9WU19TTUJSX0VYVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczNl9DVFJMNF9WU19TTUJSX0VYVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkczN19DVFJMNCAgICAweDBjZTYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzdfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM3X0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM3X0NUUkw0X1ZTX1NNQlJfRVhUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM3X0NUUkw0X1ZTX1NNQlJfRVhUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzM4X0NUUkw0ICAgIDB4MGNlNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczOF9DVFJMNF9WU19VTlRBR1NFVF9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzhfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzhfQ1RSTDRfVlNfU01CUl9FWFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHMzhfQ1RSTDRfVlNfU01CUl9FWFRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMzlfQ1RSTDQgICAgMHgwY2U4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzM5X0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczOV9DVFJMNF9WU19VTlRBR1NFVF9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczOV9DVFJMNF9WU19TTUJSX0VYVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkczOV9DVFJMNF9WU19TTUJSX0VYVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc0MF9DVFJMNCAgICAweDBjZTkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDBfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQwX0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQwX0NUUkw0X1ZTX1NNQlJfRVhUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQwX0NUUkw0X1ZTX1NNQlJfRVhUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzQxX0NUUkw0ICAgIDB4MGNlYQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0MV9DVFJMNF9WU19VTlRBR1NFVF9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDFfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDFfQ1RSTDRfVlNfU01CUl9FWFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDFfQ1RSTDRfVlNfU01CUl9FWFRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNDJfQ1RSTDQgICAgMHgwY2ViCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQyX0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0Ml9DVFJMNF9WU19VTlRBR1NFVF9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0Ml9DVFJMNF9WU19TTUJSX0VYVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0Ml9DVFJMNF9WU19TTUJSX0VYVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc0M19DVFJMNCAgICAweDBjZWMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDNfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQzX0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQzX0NUUkw0X1ZTX1NNQlJfRVhUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQzX0NUUkw0X1ZTX1NNQlJfRVhUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzQ0X0NUUkw0ICAgIDB4MGNlZAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0NF9DVFJMNF9WU19VTlRBR1NFVF9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDRfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDRfQ1RSTDRfVlNfU01CUl9FWFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDRfQ1RSTDRfVlNfU01CUl9FWFRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNDVfQ1RSTDQgICAgMHgwY2VlCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ1X0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0NV9DVFJMNF9WU19VTlRBR1NFVF9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0NV9DVFJMNF9WU19TTUJSX0VYVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0NV9DVFJMNF9WU19TTUJSX0VYVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc0Nl9DVFJMNCAgICAweDBjZWYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDZfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ2X0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ2X0NUUkw0X1ZTX1NNQlJfRVhUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ2X0NUUkw0X1ZTX1NNQlJfRVhUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzQ3X0NUUkw0ICAgIDB4MGNmMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0N19DVFJMNF9WU19VTlRBR1NFVF9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDdfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDdfQ1RSTDRfVlNfU01CUl9FWFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDdfQ1RSTDRfVlNfU01CUl9FWFRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNDhfQ1RSTDQgICAgMHgwY2YxCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ4X0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0OF9DVFJMNF9WU19VTlRBR1NFVF9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0OF9DVFJMNF9WU19TTUJSX0VYVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc0OF9DVFJMNF9WU19TTUJSX0VYVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc0OV9DVFJMNCAgICAweDBjZjIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNDlfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ5X0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ5X0NUUkw0X1ZTX1NNQlJfRVhUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzQ5X0NUUkw0X1ZTX1NNQlJfRVhUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzUwX0NUUkw0ICAgIDB4MGNmMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1MF9DVFJMNF9WU19VTlRBR1NFVF9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTBfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTBfQ1RSTDRfVlNfU01CUl9FWFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTBfQ1RSTDRfVlNfU01CUl9FWFRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNTFfQ1RSTDQgICAgMHgwY2Y0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzUxX0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1MV9DVFJMNF9WU19VTlRBR1NFVF9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1MV9DVFJMNF9WU19TTUJSX0VYVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1MV9DVFJMNF9WU19TTUJSX0VYVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc1Ml9DVFJMNCAgICAweDBjZjUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTJfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzUyX0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzUyX0NUUkw0X1ZTX1NNQlJfRVhUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzUyX0NUUkw0X1ZTX1NNQlJfRVhUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzUzX0NUUkw0ICAgIDB4MGNmNgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1M19DVFJMNF9WU19VTlRBR1NFVF9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTNfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTNfQ1RSTDRfVlNfU01CUl9FWFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTNfQ1RSTDRfVlNfU01CUl9FWFRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNTRfQ1RSTDQgICAgMHgwY2Y3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU0X0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1NF9DVFJMNF9WU19VTlRBR1NFVF9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1NF9DVFJMNF9WU19TTUJSX0VYVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1NF9DVFJMNF9WU19TTUJSX0VYVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc1NV9DVFJMNCAgICAweDBjZjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTVfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU1X0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU1X0NUUkw0X1ZTX1NNQlJfRVhUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU1X0NUUkw0X1ZTX1NNQlJfRVhUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzU2X0NUUkw0ICAgIDB4MGNmOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1Nl9DVFJMNF9WU19VTlRBR1NFVF9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTZfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTZfQ1RSTDRfVlNfU01CUl9FWFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTZfQ1RSTDRfVlNfU01CUl9FWFRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNTdfQ1RSTDQgICAgMHgwY2ZhCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU3X0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1N19DVFJMNF9WU19VTlRBR1NFVF9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1N19DVFJMNF9WU19TTUJSX0VYVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1N19DVFJMNF9WU19TTUJSX0VYVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc1OF9DVFJMNCAgICAweDBjZmIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNThfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU4X0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU4X0NUUkw0X1ZTX1NNQlJfRVhUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzU4X0NUUkw0X1ZTX1NNQlJfRVhUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzU5X0NUUkw0ICAgIDB4MGNmYworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc1OV9DVFJMNF9WU19VTlRBR1NFVF9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTlfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTlfQ1RSTDRfVlNfU01CUl9FWFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNTlfQ1RSTDRfVlNfU01CUl9FWFRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNjBfQ1RSTDQgICAgMHgwY2ZkCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzYwX0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2MF9DVFJMNF9WU19VTlRBR1NFVF9FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2MF9DVFJMNF9WU19TTUJSX0VYVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2MF9DVFJMNF9WU19TTUJSX0VYVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc2MV9DVFJMNCAgICAweDBjZmUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNjFfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzYxX0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzYxX0NUUkw0X1ZTX1NNQlJfRVhUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzYxX0NUUkw0X1ZTX1NNQlJfRVhUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzYyX0NUUkw0ICAgIDB4MGNmZgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkc2Ml9DVFJMNF9WU19VTlRBR1NFVF9FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNjJfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNjJfQ1RSTDRfVlNfU01CUl9FWFRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNjJfQ1RSTDRfVlNfU01CUl9FWFRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHMF9DVFJMMCAgICAweDBkMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMF9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcwX0NUUkwwX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcwX0NUUkwxICAgIDB4MGQwMQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcwX0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMF9DVFJMMV9DMlNFTlBNU0tfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMF9DVFJMMV9DMlNFTlBNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMF9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzBfQ1RSTDIgICAgMHgwZDAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzBfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMF9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxX0NUUkwwICAgIDB4MGQwMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxX0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzFfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzFfQ1RSTDEgICAgMHgwZDA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzFfQ1RSTDFfQzJTRU5QTVNLX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxX0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxX0NUUkwxX0MyU0VOUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxX0NUUkwxX0MyU0VOUE1TS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHMV9DVFJMMiAgICAweDBkMDUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMV9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxX0NUUkwyX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzJfQ1RSTDAgICAgMHgwZDA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzJfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMl9DVFJMMF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHMl9DVFJMMSAgICAweDBkMDcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMl9DVFJMMV9DMlNFTlBNU0tfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzJfQ1RSTDFfQzJTRU5QTVNLX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzJfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzJfQ1RSTDFfQzJTRU5QTVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcyX0NUUkwyICAgIDB4MGQwOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcyX0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzJfQ1RSTDJfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHM19DVFJMMCAgICAweDBkMDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHM19DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkczX0NUUkwwX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkczX0NUUkwxICAgIDB4MGQwYQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkczX0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHM19DVFJMMV9DMlNFTlBNU0tfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHM19DVFJMMV9DMlNFTlBNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHM19DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzNfQ1RSTDIgICAgMHgwZDBiCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzNfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHM19DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc0X0NUUkwwICAgIDB4MGQwYworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc0X0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzRfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzRfQ1RSTDEgICAgMHgwZDBkCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzRfQ1RSTDFfQzJTRU5QTVNLX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc0X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc0X0NUUkwxX0MyU0VOUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc0X0NUUkwxX0MyU0VOUE1TS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNF9DVFJMMiAgICAweDBkMGUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNF9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc0X0NUUkwyX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzVfQ1RSTDAgICAgMHgwZDBmCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzVfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNV9DVFJMMF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNV9DVFJMMSAgICAweDBkMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNV9DVFJMMV9DMlNFTlBNU0tfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzVfQ1RSTDFfQzJTRU5QTVNLX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzVfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzVfQ1RSTDFfQzJTRU5QTVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc1X0NUUkwyICAgIDB4MGQxMQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc1X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzVfQ1RSTDJfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNl9DVFJMMCAgICAweDBkMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNl9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc2X0NUUkwwX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc2X0NUUkwxICAgIDB4MGQxMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc2X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNl9DVFJMMV9DMlNFTlBNU0tfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNl9DVFJMMV9DMlNFTlBNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNl9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzZfQ1RSTDIgICAgMHgwZDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzZfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNl9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc3X0NUUkwwICAgIDB4MGQxNQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc3X0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzdfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzdfQ1RSTDEgICAgMHgwZDE2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzdfQ1RSTDFfQzJTRU5QTVNLX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc3X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc3X0NUUkwxX0MyU0VOUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc3X0NUUkwxX0MyU0VOUE1TS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHN19DVFJMMiAgICAweDBkMTcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHN19DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc3X0NUUkwyX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzhfQ1RSTDAgICAgMHgwZDE4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzhfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHOF9DVFJMMF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHOF9DVFJMMSAgICAweDBkMTkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHOF9DVFJMMV9DMlNFTlBNU0tfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzhfQ1RSTDFfQzJTRU5QTVNLX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzhfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzhfQ1RSTDFfQzJTRU5QTVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc4X0NUUkwyICAgIDB4MGQxYQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc4X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzhfQ1RSTDJfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHOV9DVFJMMCAgICAweDBkMWIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHOV9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc5X0NUUkwwX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc5X0NUUkwxICAgIDB4MGQxYworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc5X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHOV9DVFJMMV9DMlNFTlBNU0tfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHOV9DVFJMMV9DMlNFTlBNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHOV9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzlfQ1RSTDIgICAgMHgwZDFkCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzlfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHOV9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxMF9DVFJMMCAgICAweDBkMWUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTBfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTBfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEwX0NUUkwxICAgIDB4MGQxZgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMF9DVFJMMV9DMlNFTlBNU0tfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEwX0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMF9DVFJMMV9DMlNFTlBNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTBfQ1RSTDFfQzJTRU5QTVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxMF9DVFJMMiAgICAweDBkMjAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTBfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTBfQ1RSTDJfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHMTFfQ1RSTDAgICAgMHgwZDIxCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExX0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExX0NUUkwwX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxMV9DVFJMMSAgICAweDBkMjIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTFfQ1RSTDFfQzJTRU5QTVNLX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMV9DVFJMMV9DMlNFTlBNU0tfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTFfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExX0NUUkwxX0MyU0VOUE1TS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHMTFfQ1RSTDIgICAgMHgwZDIzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExX0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExX0NUUkwyX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEyX0NUUkwwICAgIDB4MGQyNAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMl9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMl9DVFJMMF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHMTJfQ1RSTDEgICAgMHgwZDI1CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEyX0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTJfQ1RSTDFfQzJTRU5QTVNLX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEyX0NUUkwxX0MyU0VOUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMl9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEyX0NUUkwyICAgIDB4MGQyNgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMl9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMl9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxM19DVFJMMCAgICAweDBkMjcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTNfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTNfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEzX0NUUkwxICAgIDB4MGQyOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxM19DVFJMMV9DMlNFTlBNU0tfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEzX0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxM19DVFJMMV9DMlNFTlBNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTNfQ1RSTDFfQzJTRU5QTVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxM19DVFJMMiAgICAweDBkMjkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTNfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTNfQ1RSTDJfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHMTRfQ1RSTDAgICAgMHgwZDJhCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzE0X0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzE0X0NUUkwwX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxNF9DVFJMMSAgICAweDBkMmIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTRfQ1RSTDFfQzJTRU5QTVNLX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxNF9DVFJMMV9DMlNFTlBNU0tfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTRfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzE0X0NUUkwxX0MyU0VOUE1TS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHMTRfQ1RSTDIgICAgMHgwZDJjCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzE0X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzE0X0NUUkwyX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzE1X0NUUkwwICAgIDB4MGQyZAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxNV9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxNV9DVFJMMF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHMTVfQ1RSTDEgICAgMHgwZDJlCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzE1X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTVfQ1RSTDFfQzJTRU5QTVNLX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzE1X0NUUkwxX0MyU0VOUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxNV9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzE1X0NUUkwyICAgIDB4MGQyZgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxNV9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxNV9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxNl9DVFJMMCAgICAweDBkMzAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTZfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTZfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzE2X0NUUkwxICAgIDB4MGQzMQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxNl9DVFJMMV9DMlNFTlBNU0tfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzE2X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxNl9DVFJMMV9DMlNFTlBNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTZfQ1RSTDFfQzJTRU5QTVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxNl9DVFJMMiAgICAweDBkMzIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTZfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTZfQ1RSTDJfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHMTdfQ1RSTDAgICAgMHgwZDMzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzE3X0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzE3X0NUUkwwX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxN19DVFJMMSAgICAweDBkMzQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTdfQ1RSTDFfQzJTRU5QTVNLX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxN19DVFJMMV9DMlNFTlBNU0tfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTdfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzE3X0NUUkwxX0MyU0VOUE1TS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHMTdfQ1RSTDIgICAgMHgwZDM1CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzE3X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzE3X0NUUkwyX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzE4X0NUUkwwICAgIDB4MGQzNgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxOF9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxOF9DVFJMMF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHMThfQ1RSTDEgICAgMHgwZDM3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzE4X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMThfQ1RSTDFfQzJTRU5QTVNLX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzE4X0NUUkwxX0MyU0VOUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxOF9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzE4X0NUUkwyICAgIDB4MGQzOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxOF9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxOF9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxOV9DVFJMMCAgICAweDBkMzkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTlfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTlfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzE5X0NUUkwxICAgIDB4MGQzYQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxOV9DVFJMMV9DMlNFTlBNU0tfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzE5X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxOV9DVFJMMV9DMlNFTlBNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTlfQ1RSTDFfQzJTRU5QTVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxOV9DVFJMMiAgICAweDBkM2IKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTlfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTlfQ1RSTDJfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHMjBfQ1RSTDAgICAgMHgwZDNjCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzIwX0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzIwX0NUUkwwX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcyMF9DVFJMMSAgICAweDBkM2QKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMjBfQ1RSTDFfQzJTRU5QTVNLX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcyMF9DVFJMMV9DMlNFTlBNU0tfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMjBfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzIwX0NUUkwxX0MyU0VOUE1TS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHMjBfQ1RSTDIgICAgMHgwZDNlCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzIwX0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzIwX0NUUkwyX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzIxX0NUUkwwICAgIDB4MGQzZgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcyMV9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcyMV9DVFJMMF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHMjFfQ1RSTDEgICAgMHgwZDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzIxX0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMjFfQ1RSTDFfQzJTRU5QTVNLX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzIxX0NUUkwxX0MyU0VOUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcyMV9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzIxX0NUUkwyICAgIDB4MGQ0MQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcyMV9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcyMV9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcyMl9DVFJMMCAgICAweDBkNDIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMjJfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMjJfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzIyX0NUUkwxICAgIDB4MGQ0MworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcyMl9DVFJMMV9DMlNFTlBNU0tfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzIyX0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcyMl9DVFJMMV9DMlNFTlBNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMjJfQ1RSTDFfQzJTRU5QTVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcyMl9DVFJMMiAgICAweDBkNDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMjJfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMjJfQ1RSTDJfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHMjNfQ1RSTDAgICAgMHgwZDQ1CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzIzX0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzIzX0NUUkwwX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcyM19DVFJMMSAgICAweDBkNDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMjNfQ1RSTDFfQzJTRU5QTVNLX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcyM19DVFJMMV9DMlNFTlBNU0tfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMjNfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzIzX0NUUkwxX0MyU0VOUE1TS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHMjNfQ1RSTDIgICAgMHgwZDQ3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzIzX0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzIzX0NUUkwyX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzI0X0NUUkwwICAgIDB4MGQ0OAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcyNF9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcyNF9DVFJMMF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHMjRfQ1RSTDEgICAgMHgwZDQ5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzI0X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMjRfQ1RSTDFfQzJTRU5QTVNLX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzI0X0NUUkwxX0MyU0VOUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcyNF9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzI0X0NUUkwyICAgIDB4MGQ0YQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcyNF9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcyNF9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcyNV9DVFJMMCAgICAweDBkNGIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMjVfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMjVfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzI1X0NUUkwxICAgIDB4MGQ0YworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcyNV9DVFJMMV9DMlNFTlBNU0tfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzI1X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcyNV9DVFJMMV9DMlNFTlBNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMjVfQ1RSTDFfQzJTRU5QTVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcyNV9DVFJMMiAgICAweDBkNGQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMjVfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMjVfQ1RSTDJfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHMjZfQ1RSTDAgICAgMHgwZDRlCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzI2X0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzI2X0NUUkwwX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcyNl9DVFJMMSAgICAweDBkNGYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMjZfQ1RSTDFfQzJTRU5QTVNLX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcyNl9DVFJMMV9DMlNFTlBNU0tfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMjZfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzI2X0NUUkwxX0MyU0VOUE1TS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHMjZfQ1RSTDIgICAgMHgwZDUwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzI2X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzI2X0NUUkwyX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzI3X0NUUkwwICAgIDB4MGQ1MQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcyN19DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcyN19DVFJMMF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHMjdfQ1RSTDEgICAgMHgwZDUyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzI3X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMjdfQ1RSTDFfQzJTRU5QTVNLX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzI3X0NUUkwxX0MyU0VOUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcyN19DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzI3X0NUUkwyICAgIDB4MGQ1MworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcyN19DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcyN19DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcyOF9DVFJMMCAgICAweDBkNTQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMjhfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMjhfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzI4X0NUUkwxICAgIDB4MGQ1NQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcyOF9DVFJMMV9DMlNFTlBNU0tfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzI4X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcyOF9DVFJMMV9DMlNFTlBNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMjhfQ1RSTDFfQzJTRU5QTVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcyOF9DVFJMMiAgICAweDBkNTYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMjhfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMjhfQ1RSTDJfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHMjlfQ1RSTDAgICAgMHgwZDU3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzI5X0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzI5X0NUUkwwX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcyOV9DVFJMMSAgICAweDBkNTgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMjlfQ1RSTDFfQzJTRU5QTVNLX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcyOV9DVFJMMV9DMlNFTlBNU0tfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMjlfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzI5X0NUUkwxX0MyU0VOUE1TS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHMjlfQ1RSTDIgICAgMHgwZDU5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzI5X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzI5X0NUUkwyX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzMwX0NUUkwwICAgIDB4MGQ1YQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkczMF9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkczMF9DVFJMMF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHMzBfQ1RSTDEgICAgMHgwZDViCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzMwX0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMzBfQ1RSTDFfQzJTRU5QTVNLX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzMwX0NUUkwxX0MyU0VOUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkczMF9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzMwX0NUUkwyICAgIDB4MGQ1YworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkczMF9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkczMF9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkczMV9DVFJMMCAgICAweDBkNWQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMzFfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMzFfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzMxX0NUUkwxICAgIDB4MGQ1ZQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkczMV9DVFJMMV9DMlNFTlBNU0tfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzMxX0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkczMV9DVFJMMV9DMlNFTlBNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMzFfQ1RSTDFfQzJTRU5QTVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkczMV9DVFJMMiAgICAweDBkNWYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMzFfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMzFfQ1RSTDJfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHMzJfQ1RSTDAgICAgMHgwZDYwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzMyX0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzMyX0NUUkwwX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkczMl9DVFJMMSAgICAweDBkNjEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMzJfQ1RSTDFfQzJTRU5QTVNLX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkczMl9DVFJMMV9DMlNFTlBNU0tfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMzJfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzMyX0NUUkwxX0MyU0VOUE1TS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHMzJfQ1RSTDIgICAgMHgwZDYyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzMyX0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzMyX0NUUkwyX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzMzX0NUUkwwICAgIDB4MGQ2MworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkczM19DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkczM19DVFJMMF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHMzNfQ1RSTDEgICAgMHgwZDY0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzMzX0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMzNfQ1RSTDFfQzJTRU5QTVNLX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzMzX0NUUkwxX0MyU0VOUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkczM19DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzMzX0NUUkwyICAgIDB4MGQ2NQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkczM19DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkczM19DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkczNF9DVFJMMCAgICAweDBkNjYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMzRfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMzRfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzM0X0NUUkwxICAgIDB4MGQ2NworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkczNF9DVFJMMV9DMlNFTlBNU0tfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzM0X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkczNF9DVFJMMV9DMlNFTlBNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMzRfQ1RSTDFfQzJTRU5QTVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkczNF9DVFJMMiAgICAweDBkNjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMzRfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMzRfQ1RSTDJfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHMzVfQ1RSTDAgICAgMHgwZDY5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzM1X0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzM1X0NUUkwwX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkczNV9DVFJMMSAgICAweDBkNmEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMzVfQ1RSTDFfQzJTRU5QTVNLX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkczNV9DVFJMMV9DMlNFTlBNU0tfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMzVfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzM1X0NUUkwxX0MyU0VOUE1TS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHMzVfQ1RSTDIgICAgMHgwZDZiCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzM1X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzM1X0NUUkwyX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzM2X0NUUkwwICAgIDB4MGQ2YworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkczNl9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkczNl9DVFJMMF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHMzZfQ1RSTDEgICAgMHgwZDZkCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzM2X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMzZfQ1RSTDFfQzJTRU5QTVNLX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzM2X0NUUkwxX0MyU0VOUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkczNl9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzM2X0NUUkwyICAgIDB4MGQ2ZQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkczNl9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkczNl9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkczN19DVFJMMCAgICAweDBkNmYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMzdfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMzdfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzM3X0NUUkwxICAgIDB4MGQ3MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkczN19DVFJMMV9DMlNFTlBNU0tfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzM3X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkczN19DVFJMMV9DMlNFTlBNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMzdfQ1RSTDFfQzJTRU5QTVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkczN19DVFJMMiAgICAweDBkNzEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMzdfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMzdfQ1RSTDJfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHMzhfQ1RSTDAgICAgMHgwZDcyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzM4X0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzM4X0NUUkwwX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkczOF9DVFJMMSAgICAweDBkNzMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMzhfQ1RSTDFfQzJTRU5QTVNLX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkczOF9DVFJMMV9DMlNFTlBNU0tfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMzhfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzM4X0NUUkwxX0MyU0VOUE1TS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHMzhfQ1RSTDIgICAgMHgwZDc0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzM4X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzM4X0NUUkwyX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzM5X0NUUkwwICAgIDB4MGQ3NQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkczOV9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkczOV9DVFJMMF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHMzlfQ1RSTDEgICAgMHgwZDc2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzM5X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMzlfQ1RSTDFfQzJTRU5QTVNLX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzM5X0NUUkwxX0MyU0VOUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkczOV9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzM5X0NUUkwyICAgIDB4MGQ3NworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkczOV9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkczOV9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc0MF9DVFJMMCAgICAweDBkNzgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNDBfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNDBfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzQwX0NUUkwxICAgIDB4MGQ3OQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc0MF9DVFJMMV9DMlNFTlBNU0tfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzQwX0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc0MF9DVFJMMV9DMlNFTlBNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNDBfQ1RSTDFfQzJTRU5QTVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc0MF9DVFJMMiAgICAweDBkN2EKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNDBfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNDBfQ1RSTDJfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNDFfQ1RSTDAgICAgMHgwZDdiCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzQxX0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzQxX0NUUkwwX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc0MV9DVFJMMSAgICAweDBkN2MKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNDFfQ1RSTDFfQzJTRU5QTVNLX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc0MV9DVFJMMV9DMlNFTlBNU0tfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNDFfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzQxX0NUUkwxX0MyU0VOUE1TS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNDFfQ1RSTDIgICAgMHgwZDdkCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzQxX0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzQxX0NUUkwyX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzQyX0NUUkwwICAgIDB4MGQ3ZQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc0Ml9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc0Ml9DVFJMMF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNDJfQ1RSTDEgICAgMHgwZDdmCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzQyX0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNDJfQ1RSTDFfQzJTRU5QTVNLX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzQyX0NUUkwxX0MyU0VOUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc0Ml9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzQyX0NUUkwyICAgIDB4MGQ4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc0Ml9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc0Ml9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc0M19DVFJMMCAgICAweDBkODEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNDNfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNDNfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzQzX0NUUkwxICAgIDB4MGQ4MgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc0M19DVFJMMV9DMlNFTlBNU0tfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzQzX0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc0M19DVFJMMV9DMlNFTlBNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNDNfQ1RSTDFfQzJTRU5QTVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc0M19DVFJMMiAgICAweDBkODMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNDNfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNDNfQ1RSTDJfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNDRfQ1RSTDAgICAgMHgwZDg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzQ0X0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzQ0X0NUUkwwX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc0NF9DVFJMMSAgICAweDBkODUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNDRfQ1RSTDFfQzJTRU5QTVNLX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc0NF9DVFJMMV9DMlNFTlBNU0tfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNDRfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzQ0X0NUUkwxX0MyU0VOUE1TS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNDRfQ1RSTDIgICAgMHgwZDg2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzQ0X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzQ0X0NUUkwyX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzQ1X0NUUkwwICAgIDB4MGQ4NworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc0NV9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc0NV9DVFJMMF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNDVfQ1RSTDEgICAgMHgwZDg4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzQ1X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNDVfQ1RSTDFfQzJTRU5QTVNLX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzQ1X0NUUkwxX0MyU0VOUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc0NV9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzQ1X0NUUkwyICAgIDB4MGQ4OQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc0NV9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc0NV9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc0Nl9DVFJMMCAgICAweDBkOGEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNDZfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNDZfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzQ2X0NUUkwxICAgIDB4MGQ4YgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc0Nl9DVFJMMV9DMlNFTlBNU0tfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzQ2X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc0Nl9DVFJMMV9DMlNFTlBNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNDZfQ1RSTDFfQzJTRU5QTVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc0Nl9DVFJMMiAgICAweDBkOGMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNDZfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNDZfQ1RSTDJfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNDdfQ1RSTDAgICAgMHgwZDhkCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzQ3X0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzQ3X0NUUkwwX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc0N19DVFJMMSAgICAweDBkOGUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNDdfQ1RSTDFfQzJTRU5QTVNLX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc0N19DVFJMMV9DMlNFTlBNU0tfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNDdfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzQ3X0NUUkwxX0MyU0VOUE1TS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNDdfQ1RSTDIgICAgMHgwZDhmCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzQ3X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzQ3X0NUUkwyX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzQ4X0NUUkwwICAgIDB4MGQ5MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc0OF9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc0OF9DVFJMMF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNDhfQ1RSTDEgICAgMHgwZDkxCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzQ4X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNDhfQ1RSTDFfQzJTRU5QTVNLX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzQ4X0NUUkwxX0MyU0VOUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc0OF9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzQ4X0NUUkwyICAgIDB4MGQ5MgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc0OF9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc0OF9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc0OV9DVFJMMCAgICAweDBkOTMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNDlfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNDlfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzQ5X0NUUkwxICAgIDB4MGQ5NAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc0OV9DVFJMMV9DMlNFTlBNU0tfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzQ5X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc0OV9DVFJMMV9DMlNFTlBNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNDlfQ1RSTDFfQzJTRU5QTVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc0OV9DVFJMMiAgICAweDBkOTUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNDlfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNDlfQ1RSTDJfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNTBfQ1RSTDAgICAgMHgwZDk2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzUwX0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzUwX0NUUkwwX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc1MF9DVFJMMSAgICAweDBkOTcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNTBfQ1RSTDFfQzJTRU5QTVNLX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc1MF9DVFJMMV9DMlNFTlBNU0tfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNTBfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzUwX0NUUkwxX0MyU0VOUE1TS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNTBfQ1RSTDIgICAgMHgwZDk4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzUwX0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzUwX0NUUkwyX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzUxX0NUUkwwICAgIDB4MGQ5OQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc1MV9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc1MV9DVFJMMF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNTFfQ1RSTDEgICAgMHgwZDlhCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzUxX0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNTFfQ1RSTDFfQzJTRU5QTVNLX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzUxX0NUUkwxX0MyU0VOUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc1MV9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzUxX0NUUkwyICAgIDB4MGQ5YgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc1MV9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc1MV9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc1Ml9DVFJMMCAgICAweDBkOWMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNTJfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNTJfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzUyX0NUUkwxICAgIDB4MGQ5ZAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc1Ml9DVFJMMV9DMlNFTlBNU0tfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzUyX0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc1Ml9DVFJMMV9DMlNFTlBNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNTJfQ1RSTDFfQzJTRU5QTVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc1Ml9DVFJMMiAgICAweDBkOWUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNTJfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNTJfQ1RSTDJfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNTNfQ1RSTDAgICAgMHgwZDlmCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzUzX0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzUzX0NUUkwwX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc1M19DVFJMMSAgICAweDBkYTAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNTNfQ1RSTDFfQzJTRU5QTVNLX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc1M19DVFJMMV9DMlNFTlBNU0tfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNTNfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzUzX0NUUkwxX0MyU0VOUE1TS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNTNfQ1RSTDIgICAgMHgwZGExCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzUzX0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzUzX0NUUkwyX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzU0X0NUUkwwICAgIDB4MGRhMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc1NF9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc1NF9DVFJMMF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNTRfQ1RSTDEgICAgMHgwZGEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzU0X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNTRfQ1RSTDFfQzJTRU5QTVNLX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzU0X0NUUkwxX0MyU0VOUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc1NF9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzU0X0NUUkwyICAgIDB4MGRhNAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc1NF9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc1NF9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc1NV9DVFJMMCAgICAweDBkYTUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNTVfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNTVfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzU1X0NUUkwxICAgIDB4MGRhNgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc1NV9DVFJMMV9DMlNFTlBNU0tfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzU1X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc1NV9DVFJMMV9DMlNFTlBNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNTVfQ1RSTDFfQzJTRU5QTVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc1NV9DVFJMMiAgICAweDBkYTcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNTVfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNTVfQ1RSTDJfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNTZfQ1RSTDAgICAgMHgwZGE4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzU2X0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzU2X0NUUkwwX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc1Nl9DVFJMMSAgICAweDBkYTkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNTZfQ1RSTDFfQzJTRU5QTVNLX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc1Nl9DVFJMMV9DMlNFTlBNU0tfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNTZfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzU2X0NUUkwxX0MyU0VOUE1TS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNTZfQ1RSTDIgICAgMHgwZGFhCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzU2X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzU2X0NUUkwyX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzU3X0NUUkwwICAgIDB4MGRhYgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc1N19DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc1N19DVFJMMF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNTdfQ1RSTDEgICAgMHgwZGFjCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzU3X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNTdfQ1RSTDFfQzJTRU5QTVNLX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzU3X0NUUkwxX0MyU0VOUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc1N19DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzU3X0NUUkwyICAgIDB4MGRhZAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc1N19DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc1N19DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc1OF9DVFJMMCAgICAweDBkYWUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNThfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNThfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzU4X0NUUkwxICAgIDB4MGRhZgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc1OF9DVFJMMV9DMlNFTlBNU0tfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzU4X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc1OF9DVFJMMV9DMlNFTlBNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNThfQ1RSTDFfQzJTRU5QTVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc1OF9DVFJMMiAgICAweDBkYjAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNThfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNThfQ1RSTDJfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNTlfQ1RSTDAgICAgMHgwZGIxCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzU5X0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzU5X0NUUkwwX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc1OV9DVFJMMSAgICAweDBkYjIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNTlfQ1RSTDFfQzJTRU5QTVNLX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc1OV9DVFJMMV9DMlNFTlBNU0tfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNTlfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzU5X0NUUkwxX0MyU0VOUE1TS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNTlfQ1RSTDIgICAgMHgwZGIzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzU5X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzU5X0NUUkwyX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzYwX0NUUkwwICAgIDB4MGRiNAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc2MF9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc2MF9DVFJMMF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNjBfQ1RSTDEgICAgMHgwZGI1CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzYwX0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNjBfQ1RSTDFfQzJTRU5QTVNLX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzYwX0NUUkwxX0MyU0VOUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc2MF9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzYwX0NUUkwyICAgIDB4MGRiNgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc2MF9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc2MF9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc2MV9DVFJMMCAgICAweDBkYjcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNjFfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNjFfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzYxX0NUUkwxICAgIDB4MGRiOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc2MV9DVFJMMV9DMlNFTlBNU0tfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzYxX0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc2MV9DVFJMMV9DMlNFTlBNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNjFfQ1RSTDFfQzJTRU5QTVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc2MV9DVFJMMiAgICAweDBkYjkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNjFfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNjFfQ1RSTDJfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNjJfQ1RSTDAgICAgMHgwZGJhCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzYyX0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzYyX0NUUkwwX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc2Ml9DVFJMMSAgICAweDBkYmIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNjJfQ1RSTDFfQzJTRU5QTVNLX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc2Ml9DVFJMMV9DMlNFTlBNU0tfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNjJfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzYyX0NUUkwxX0MyU0VOUE1TS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNjJfQ1RSTDIgICAgMHgwZGJjCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzYyX0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzYyX0NUUkwyX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzYzX0NUUkwwICAgIDB4MGRiZAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc2M19DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc2M19DVFJMMF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNjNfQ1RSTDEgICAgMHgwZGJlCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzYzX0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNjNfQ1RSTDFfQzJTRU5QTVNLX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzYzX0NUUkwxX0MyU0VOUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc2M19DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzYzX0NUUkwyICAgIDB4MGRiZgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc2M19DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc2M19DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc2NF9DVFJMMCAgICAweDBkYzAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNjRfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNjRfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzY0X0NUUkwxICAgIDB4MGRjMQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc2NF9DVFJMMV9DMlNFTlBNU0tfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzY0X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc2NF9DVFJMMV9DMlNFTlBNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNjRfQ1RSTDFfQzJTRU5QTVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc2NF9DVFJMMiAgICAweDBkYzIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNjRfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNjRfQ1RSTDJfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNjVfQ1RSTDAgICAgMHgwZGMzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzY1X0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzY1X0NUUkwwX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc2NV9DVFJMMSAgICAweDBkYzQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNjVfQ1RSTDFfQzJTRU5QTVNLX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc2NV9DVFJMMV9DMlNFTlBNU0tfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNjVfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzY1X0NUUkwxX0MyU0VOUE1TS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNjVfQ1RSTDIgICAgMHgwZGM1CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzY1X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzY1X0NUUkwyX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzY2X0NUUkwwICAgIDB4MGRjNgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc2Nl9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc2Nl9DVFJMMF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNjZfQ1RSTDEgICAgMHgwZGM3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzY2X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNjZfQ1RSTDFfQzJTRU5QTVNLX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzY2X0NUUkwxX0MyU0VOUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc2Nl9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzY2X0NUUkwyICAgIDB4MGRjOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc2Nl9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc2Nl9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc2N19DVFJMMCAgICAweDBkYzkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNjdfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNjdfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzY3X0NUUkwxICAgIDB4MGRjYQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc2N19DVFJMMV9DMlNFTlBNU0tfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzY3X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc2N19DVFJMMV9DMlNFTlBNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNjdfQ1RSTDFfQzJTRU5QTVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc2N19DVFJMMiAgICAweDBkY2IKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNjdfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNjdfQ1RSTDJfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNjhfQ1RSTDAgICAgMHgwZGNjCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzY4X0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzY4X0NUUkwwX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc2OF9DVFJMMSAgICAweDBkY2QKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNjhfQ1RSTDFfQzJTRU5QTVNLX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc2OF9DVFJMMV9DMlNFTlBNU0tfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNjhfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzY4X0NUUkwxX0MyU0VOUE1TS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNjhfQ1RSTDIgICAgMHgwZGNlCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzY4X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzY4X0NUUkwyX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzY5X0NUUkwwICAgIDB4MGRjZgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc2OV9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc2OV9DVFJMMF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNjlfQ1RSTDEgICAgMHgwZGQwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzY5X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNjlfQ1RSTDFfQzJTRU5QTVNLX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzY5X0NUUkwxX0MyU0VOUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc2OV9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzY5X0NUUkwyICAgIDB4MGRkMQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc2OV9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc2OV9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc3MF9DVFJMMCAgICAweDBkZDIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNzBfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNzBfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzcwX0NUUkwxICAgIDB4MGRkMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc3MF9DVFJMMV9DMlNFTlBNU0tfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzcwX0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc3MF9DVFJMMV9DMlNFTlBNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNzBfQ1RSTDFfQzJTRU5QTVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc3MF9DVFJMMiAgICAweDBkZDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNzBfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNzBfQ1RSTDJfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNzFfQ1RSTDAgICAgMHgwZGQ1CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzcxX0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzcxX0NUUkwwX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc3MV9DVFJMMSAgICAweDBkZDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNzFfQ1RSTDFfQzJTRU5QTVNLX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc3MV9DVFJMMV9DMlNFTlBNU0tfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNzFfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzcxX0NUUkwxX0MyU0VOUE1TS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNzFfQ1RSTDIgICAgMHgwZGQ3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzcxX0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzcxX0NUUkwyX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzcyX0NUUkwwICAgIDB4MGRkOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc3Ml9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc3Ml9DVFJMMF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNzJfQ1RSTDEgICAgMHgwZGQ5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzcyX0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNzJfQ1RSTDFfQzJTRU5QTVNLX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzcyX0NUUkwxX0MyU0VOUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc3Ml9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzcyX0NUUkwyICAgIDB4MGRkYQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc3Ml9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc3Ml9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc3M19DVFJMMCAgICAweDBkZGIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNzNfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNzNfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzczX0NUUkwxICAgIDB4MGRkYworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc3M19DVFJMMV9DMlNFTlBNU0tfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzczX0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc3M19DVFJMMV9DMlNFTlBNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNzNfQ1RSTDFfQzJTRU5QTVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc3M19DVFJMMiAgICAweDBkZGQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNzNfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNzNfQ1RSTDJfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNzRfQ1RSTDAgICAgMHgwZGRlCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzc0X0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzc0X0NUUkwwX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc3NF9DVFJMMSAgICAweDBkZGYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNzRfQ1RSTDFfQzJTRU5QTVNLX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc3NF9DVFJMMV9DMlNFTlBNU0tfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNzRfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzc0X0NUUkwxX0MyU0VOUE1TS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNzRfQ1RSTDIgICAgMHgwZGUwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzc0X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzc0X0NUUkwyX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzc1X0NUUkwwICAgIDB4MGRlMQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc3NV9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc3NV9DVFJMMF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNzVfQ1RSTDEgICAgMHgwZGUyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzc1X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNzVfQ1RSTDFfQzJTRU5QTVNLX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzc1X0NUUkwxX0MyU0VOUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc3NV9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzc1X0NUUkwyICAgIDB4MGRlMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc3NV9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc3NV9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc3Nl9DVFJMMCAgICAweDBkZTQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNzZfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNzZfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzc2X0NUUkwxICAgIDB4MGRlNQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc3Nl9DVFJMMV9DMlNFTlBNU0tfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzc2X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc3Nl9DVFJMMV9DMlNFTlBNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNzZfQ1RSTDFfQzJTRU5QTVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc3Nl9DVFJMMiAgICAweDBkZTYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNzZfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNzZfQ1RSTDJfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNzdfQ1RSTDAgICAgMHgwZGU3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzc3X0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzc3X0NUUkwwX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc3N19DVFJMMSAgICAweDBkZTgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNzdfQ1RSTDFfQzJTRU5QTVNLX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc3N19DVFJMMV9DMlNFTlBNU0tfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNzdfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzc3X0NUUkwxX0MyU0VOUE1TS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNzdfQ1RSTDIgICAgMHgwZGU5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzc3X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzc3X0NUUkwyX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzc4X0NUUkwwICAgIDB4MGRlYQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc3OF9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc3OF9DVFJMMF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHNzhfQ1RSTDEgICAgMHgwZGViCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzc4X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNzhfQ1RSTDFfQzJTRU5QTVNLX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzc4X0NUUkwxX0MyU0VOUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc3OF9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzc4X0NUUkwyICAgIDB4MGRlYworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc3OF9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc3OF9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc3OV9DVFJMMCAgICAweDBkZWQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNzlfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNzlfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzc5X0NUUkwxICAgIDB4MGRlZQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc3OV9DVFJMMV9DMlNFTlBNU0tfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzc5X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc3OV9DVFJMMV9DMlNFTlBNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNzlfQ1RSTDFfQzJTRU5QTVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc3OV9DVFJMMiAgICAweDBkZWYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNzlfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHNzlfQ1RSTDJfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHODBfQ1RSTDAgICAgMHgwZGYwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzgwX0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzgwX0NUUkwwX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc4MF9DVFJMMSAgICAweDBkZjEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHODBfQ1RSTDFfQzJTRU5QTVNLX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc4MF9DVFJMMV9DMlNFTlBNU0tfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHODBfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzgwX0NUUkwxX0MyU0VOUE1TS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHODBfQ1RSTDIgICAgMHgwZGYyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzgwX0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzgwX0NUUkwyX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzgxX0NUUkwwICAgIDB4MGRmMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc4MV9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc4MV9DVFJMMF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHODFfQ1RSTDEgICAgMHgwZGY0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzgxX0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHODFfQ1RSTDFfQzJTRU5QTVNLX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzgxX0NUUkwxX0MyU0VOUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc4MV9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzgxX0NUUkwyICAgIDB4MGRmNQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc4MV9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc4MV9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc4Ml9DVFJMMCAgICAweDBkZjYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHODJfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHODJfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzgyX0NUUkwxICAgIDB4MGRmNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc4Ml9DVFJMMV9DMlNFTlBNU0tfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzgyX0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc4Ml9DVFJMMV9DMlNFTlBNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHODJfQ1RSTDFfQzJTRU5QTVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc4Ml9DVFJMMiAgICAweDBkZjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHODJfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHODJfQ1RSTDJfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHODNfQ1RSTDAgICAgMHgwZGY5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzgzX0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzgzX0NUUkwwX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc4M19DVFJMMSAgICAweDBkZmEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHODNfQ1RSTDFfQzJTRU5QTVNLX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc4M19DVFJMMV9DMlNFTlBNU0tfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHODNfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzgzX0NUUkwxX0MyU0VOUE1TS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHODNfQ1RSTDIgICAgMHgwZGZiCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzgzX0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzgzX0NUUkwyX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzg0X0NUUkwwICAgIDB4MGRmYworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc4NF9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc4NF9DVFJMMF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHODRfQ1RSTDEgICAgMHgwZGZkCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzg0X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHODRfQ1RSTDFfQzJTRU5QTVNLX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzg0X0NUUkwxX0MyU0VOUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc4NF9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzg0X0NUUkwyICAgIDB4MGRmZQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc4NF9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc4NF9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc4NV9DVFJMMCAgICAweDBkZmYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHODVfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHODVfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzg1X0NUUkwxICAgIDB4MGUwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc4NV9DVFJMMV9DMlNFTlBNU0tfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzg1X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc4NV9DVFJMMV9DMlNFTlBNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHODVfQ1RSTDFfQzJTRU5QTVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc4NV9DVFJMMiAgICAweDBlMDEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHODVfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHODVfQ1RSTDJfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHODZfQ1RSTDAgICAgMHgwZTAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzg2X0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzg2X0NUUkwwX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc4Nl9DVFJMMSAgICAweDBlMDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHODZfQ1RSTDFfQzJTRU5QTVNLX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc4Nl9DVFJMMV9DMlNFTlBNU0tfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHODZfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzg2X0NUUkwxX0MyU0VOUE1TS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHODZfQ1RSTDIgICAgMHgwZTA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzg2X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzg2X0NUUkwyX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzg3X0NUUkwwICAgIDB4MGUwNQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc4N19DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc4N19DVFJMMF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHODdfQ1RSTDEgICAgMHgwZTA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzg3X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHODdfQ1RSTDFfQzJTRU5QTVNLX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzg3X0NUUkwxX0MyU0VOUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc4N19DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzg3X0NUUkwyICAgIDB4MGUwNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc4N19DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc4N19DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc4OF9DVFJMMCAgICAweDBlMDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHODhfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHODhfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzg4X0NUUkwxICAgIDB4MGUwOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc4OF9DVFJMMV9DMlNFTlBNU0tfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzg4X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc4OF9DVFJMMV9DMlNFTlBNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHODhfQ1RSTDFfQzJTRU5QTVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc4OF9DVFJMMiAgICAweDBlMGEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHODhfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHODhfQ1RSTDJfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHODlfQ1RSTDAgICAgMHgwZTBiCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzg5X0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzg5X0NUUkwwX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc4OV9DVFJMMSAgICAweDBlMGMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHODlfQ1RSTDFfQzJTRU5QTVNLX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc4OV9DVFJMMV9DMlNFTlBNU0tfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHODlfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzg5X0NUUkwxX0MyU0VOUE1TS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHODlfQ1RSTDIgICAgMHgwZTBkCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzg5X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzg5X0NUUkwyX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzkwX0NUUkwwICAgIDB4MGUwZQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc5MF9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc5MF9DVFJMMF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHOTBfQ1RSTDEgICAgMHgwZTBmCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzkwX0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHOTBfQ1RSTDFfQzJTRU5QTVNLX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzkwX0NUUkwxX0MyU0VOUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc5MF9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzkwX0NUUkwyICAgIDB4MGUxMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc5MF9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc5MF9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc5MV9DVFJMMCAgICAweDBlMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHOTFfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHOTFfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzkxX0NUUkwxICAgIDB4MGUxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc5MV9DVFJMMV9DMlNFTlBNU0tfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzkxX0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc5MV9DVFJMMV9DMlNFTlBNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHOTFfQ1RSTDFfQzJTRU5QTVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc5MV9DVFJMMiAgICAweDBlMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHOTFfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHOTFfQ1RSTDJfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHOTJfQ1RSTDAgICAgMHgwZTE0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzkyX0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzkyX0NUUkwwX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc5Ml9DVFJMMSAgICAweDBlMTUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHOTJfQ1RSTDFfQzJTRU5QTVNLX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc5Ml9DVFJMMV9DMlNFTlBNU0tfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHOTJfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzkyX0NUUkwxX0MyU0VOUE1TS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHOTJfQ1RSTDIgICAgMHgwZTE2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzkyX0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzkyX0NUUkwyX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzkzX0NUUkwwICAgIDB4MGUxNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc5M19DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc5M19DVFJMMF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHOTNfQ1RSTDEgICAgMHgwZTE4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzkzX0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHOTNfQ1RSTDFfQzJTRU5QTVNLX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzkzX0NUUkwxX0MyU0VOUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc5M19DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzkzX0NUUkwyICAgIDB4MGUxOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc5M19DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc5M19DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc5NF9DVFJMMCAgICAweDBlMWEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHOTRfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHOTRfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzk0X0NUUkwxICAgIDB4MGUxYgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc5NF9DVFJMMV9DMlNFTlBNU0tfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzk0X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc5NF9DVFJMMV9DMlNFTlBNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHOTRfQ1RSTDFfQzJTRU5QTVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc5NF9DVFJMMiAgICAweDBlMWMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHOTRfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHOTRfQ1RSTDJfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHOTVfQ1RSTDAgICAgMHgwZTFkCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzk1X0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzk1X0NUUkwwX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc5NV9DVFJMMSAgICAweDBlMWUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHOTVfQ1RSTDFfQzJTRU5QTVNLX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc5NV9DVFJMMV9DMlNFTlBNU0tfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHOTVfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzk1X0NUUkwxX0MyU0VOUE1TS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHOTVfQ1RSTDIgICAgMHgwZTFmCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzk1X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzk1X0NUUkwyX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzk2X0NUUkwwICAgIDB4MGUyMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc5Nl9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc5Nl9DVFJMMF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHOTZfQ1RSTDEgICAgMHgwZTIxCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzk2X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHOTZfQ1RSTDFfQzJTRU5QTVNLX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzk2X0NUUkwxX0MyU0VOUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc5Nl9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzk2X0NUUkwyICAgIDB4MGUyMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc5Nl9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc5Nl9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc5N19DVFJMMCAgICAweDBlMjMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHOTdfQ1RSTDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHOTdfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzk3X0NUUkwxICAgIDB4MGUyNAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc5N19DVFJMMV9DMlNFTlBNU0tfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzk3X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc5N19DVFJMMV9DMlNFTlBNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHOTdfQ1RSTDFfQzJTRU5QTVNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc5N19DVFJMMiAgICAweDBlMjUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHOTdfQ1RSTDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHOTdfQ1RSTDJfTUFTSyAgICAweDFGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHOThfQ1RSTDAgICAgMHgwZTI2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzk4X0NUUkwwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzk4X0NUUkwwX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkc5OF9DVFJMMSAgICAweDBlMjcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHOThfQ1RSTDFfQzJTRU5QTVNLX0VYVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc5OF9DVFJMMV9DMlNFTlBNU0tfRVhUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHOThfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzk4X0NUUkwxX0MyU0VOUE1TS19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHOThfQ1RSTDIgICAgMHgwZTI4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzk4X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzk4X0NUUkwyX01BU0sgICAgMHgxRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzk5X0NUUkwwICAgIDB4MGUyOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc5OV9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc5OV9DVFJMMF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQzJTQ0ZHOTlfQ1RSTDEgICAgMHgwZTJhCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzk5X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHOTlfQ1RSTDFfQzJTRU5QTVNLX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzk5X0NUUkwxX0MyU0VOUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc5OV9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzk5X0NUUkwyICAgIDB4MGUyYgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc5OV9DVFJMMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkc5OV9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxMDBfQ1RSTDAgICAgMHgwZTJjCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEwMF9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMDBfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEwMF9DVFJMMSAgICAweDBlMmQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTAwX0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTAwX0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMDBfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEwMF9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEwMF9DVFJMMiAgICAweDBlMmUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTAwX0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEwMF9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxMDFfQ1RSTDAgICAgMHgwZTJmCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEwMV9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMDFfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEwMV9DVFJMMSAgICAweDBlMzAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTAxX0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTAxX0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMDFfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEwMV9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEwMV9DVFJMMiAgICAweDBlMzEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTAxX0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEwMV9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxMDJfQ1RSTDAgICAgMHgwZTMyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEwMl9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMDJfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEwMl9DVFJMMSAgICAweDBlMzMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTAyX0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTAyX0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMDJfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEwMl9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEwMl9DVFJMMiAgICAweDBlMzQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTAyX0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEwMl9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxMDNfQ1RSTDAgICAgMHgwZTM1CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEwM19DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMDNfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEwM19DVFJMMSAgICAweDBlMzYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTAzX0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTAzX0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMDNfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEwM19DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEwM19DVFJMMiAgICAweDBlMzcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTAzX0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEwM19DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxMDRfQ1RSTDAgICAgMHgwZTM4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEwNF9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMDRfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEwNF9DVFJMMSAgICAweDBlMzkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTA0X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTA0X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMDRfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEwNF9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEwNF9DVFJMMiAgICAweDBlM2EKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTA0X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEwNF9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxMDVfQ1RSTDAgICAgMHgwZTNiCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEwNV9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMDVfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEwNV9DVFJMMSAgICAweDBlM2MKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTA1X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTA1X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMDVfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEwNV9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEwNV9DVFJMMiAgICAweDBlM2QKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTA1X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEwNV9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxMDZfQ1RSTDAgICAgMHgwZTNlCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEwNl9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMDZfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEwNl9DVFJMMSAgICAweDBlM2YKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTA2X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTA2X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMDZfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEwNl9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEwNl9DVFJMMiAgICAweDBlNDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTA2X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEwNl9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxMDdfQ1RSTDAgICAgMHgwZTQxCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEwN19DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMDdfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEwN19DVFJMMSAgICAweDBlNDIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTA3X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTA3X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMDdfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEwN19DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEwN19DVFJMMiAgICAweDBlNDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTA3X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEwN19DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxMDhfQ1RSTDAgICAgMHgwZTQ0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEwOF9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMDhfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEwOF9DVFJMMSAgICAweDBlNDUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTA4X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTA4X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMDhfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEwOF9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEwOF9DVFJMMiAgICAweDBlNDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTA4X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEwOF9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxMDlfQ1RSTDAgICAgMHgwZTQ3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEwOV9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMDlfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEwOV9DVFJMMSAgICAweDBlNDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTA5X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTA5X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMDlfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEwOV9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEwOV9DVFJMMiAgICAweDBlNDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTA5X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEwOV9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxMTBfQ1RSTDAgICAgMHgwZTRhCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExMF9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMTBfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzExMF9DVFJMMSAgICAweDBlNGIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTEwX0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTEwX0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMTBfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExMF9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzExMF9DVFJMMiAgICAweDBlNGMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTEwX0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExMF9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxMTFfQ1RSTDAgICAgMHgwZTRkCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExMV9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMTFfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzExMV9DVFJMMSAgICAweDBlNGUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTExX0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTExX0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMTFfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExMV9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzExMV9DVFJMMiAgICAweDBlNGYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTExX0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExMV9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxMTJfQ1RSTDAgICAgMHgwZTUwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExMl9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMTJfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzExMl9DVFJMMSAgICAweDBlNTEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTEyX0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTEyX0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMTJfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExMl9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzExMl9DVFJMMiAgICAweDBlNTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTEyX0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExMl9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxMTNfQ1RSTDAgICAgMHgwZTUzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExM19DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMTNfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzExM19DVFJMMSAgICAweDBlNTQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTEzX0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTEzX0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMTNfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExM19DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzExM19DVFJMMiAgICAweDBlNTUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTEzX0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExM19DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxMTRfQ1RSTDAgICAgMHgwZTU2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExNF9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMTRfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzExNF9DVFJMMSAgICAweDBlNTcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTE0X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTE0X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMTRfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExNF9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzExNF9DVFJMMiAgICAweDBlNTgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTE0X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExNF9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxMTVfQ1RSTDAgICAgMHgwZTU5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExNV9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMTVfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzExNV9DVFJMMSAgICAweDBlNWEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTE1X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTE1X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMTVfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExNV9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzExNV9DVFJMMiAgICAweDBlNWIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTE1X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExNV9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxMTZfQ1RSTDAgICAgMHgwZTVjCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExNl9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMTZfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzExNl9DVFJMMSAgICAweDBlNWQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTE2X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTE2X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMTZfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExNl9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzExNl9DVFJMMiAgICAweDBlNWUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTE2X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExNl9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxMTdfQ1RSTDAgICAgMHgwZTVmCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExN19DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMTdfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzExN19DVFJMMSAgICAweDBlNjAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTE3X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTE3X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMTdfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExN19DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzExN19DVFJMMiAgICAweDBlNjEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTE3X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExN19DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxMThfQ1RSTDAgICAgMHgwZTYyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExOF9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMThfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzExOF9DVFJMMSAgICAweDBlNjMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTE4X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTE4X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMThfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExOF9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzExOF9DVFJMMiAgICAweDBlNjQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTE4X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExOF9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxMTlfQ1RSTDAgICAgMHgwZTY1CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExOV9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMTlfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzExOV9DVFJMMSAgICAweDBlNjYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTE5X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTE5X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMTlfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExOV9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzExOV9DVFJMMiAgICAweDBlNjcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTE5X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzExOV9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxMjBfQ1RSTDAgICAgMHgwZTY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEyMF9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMjBfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEyMF9DVFJMMSAgICAweDBlNjkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTIwX0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTIwX0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMjBfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEyMF9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEyMF9DVFJMMiAgICAweDBlNmEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTIwX0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEyMF9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxMjFfQ1RSTDAgICAgMHgwZTZiCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEyMV9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMjFfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEyMV9DVFJMMSAgICAweDBlNmMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTIxX0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTIxX0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMjFfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEyMV9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEyMV9DVFJMMiAgICAweDBlNmQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTIxX0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEyMV9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxMjJfQ1RSTDAgICAgMHgwZTZlCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEyMl9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMjJfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEyMl9DVFJMMSAgICAweDBlNmYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTIyX0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTIyX0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMjJfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEyMl9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEyMl9DVFJMMiAgICAweDBlNzAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTIyX0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEyMl9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxMjNfQ1RSTDAgICAgMHgwZTcxCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEyM19DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMjNfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEyM19DVFJMMSAgICAweDBlNzIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTIzX0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTIzX0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMjNfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEyM19DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEyM19DVFJMMiAgICAweDBlNzMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTIzX0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEyM19DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxMjRfQ1RSTDAgICAgMHgwZTc0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEyNF9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMjRfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEyNF9DVFJMMSAgICAweDBlNzUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTI0X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTI0X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMjRfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEyNF9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEyNF9DVFJMMiAgICAweDBlNzYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTI0X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEyNF9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxMjVfQ1RSTDAgICAgMHgwZTc3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEyNV9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMjVfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEyNV9DVFJMMSAgICAweDBlNzgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTI1X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTI1X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMjVfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEyNV9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEyNV9DVFJMMiAgICAweDBlNzkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTI1X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEyNV9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxMjZfQ1RSTDAgICAgMHgwZTdhCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEyNl9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMjZfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEyNl9DVFJMMSAgICAweDBlN2IKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTI2X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTI2X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMjZfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEyNl9DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEyNl9DVFJMMiAgICAweDBlN2MKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTI2X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEyNl9DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DMlNDRkcxMjdfQ1RSTDAgICAgMHgwZTdkCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEyN19DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMjdfQ1RSTDBfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEyN19DVFJMMSAgICAweDBlN2UKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTI3X0NUUkwxX0MyU0VOUE1TS19FWFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTI3X0NUUkwxX0MyU0VOUE1TS19FWFRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9DMlNDRkcxMjdfQ1RSTDFfQzJTRU5QTVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEyN19DVFJMMV9DMlNFTlBNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0MyU0NGRzEyN19DVFJMMiAgICAweDBlN2YKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHMTI3X0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX0MyU0NGRzEyN19DVFJMMl9NQVNLICAgIDB4MUZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9DRkcgICAgMHgwZTgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZTX1BPUlQ3X0RNQUNWSURTRUxfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZTX1BPUlQ3X0RNQUNWSURTRUxfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfUE9SVDZfRE1BQ1ZJRFNFTF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfUE9SVDZfRE1BQ1ZJRFNFTF9NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WU19QT1JUNV9ETUFDVklEU0VMX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19WU19QT1JUNV9ETUFDVklEU0VMX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZTX1BPUlQ0X0RNQUNWSURTRUxfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZTX1BPUlQ0X0RNQUNWSURTRUxfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19WU19QT1JUM19ETUFDVklEU0VMX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19WU19QT1JUM19ETUFDVklEU0VMX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfUE9SVDJfRE1BQ1ZJRFNFTF9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19WU19QT1JUMl9ETUFDVklEU0VMX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfUE9SVDFfRE1BQ1ZJRFNFTF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19WU19QT1JUMV9ETUFDVklEU0VMX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfUE9SVDBfRE1BQ1ZJRFNFTF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19WU19QT1JUMF9ETUFDVklEU0VMX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19WU19VSUZTRUdfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfVUlGU0VHX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19WU19VTk1BVF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19WU19VTk1BVF9NQVNLICAgIDB4MzAKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfVU5UQUdfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfVU5UQUdfTUFTSyAgICAweEMKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfU1BSSVNFTF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19WU19TUFJJU0VMX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1BPUlRCQVNFRF9TVklEWF9DVFJMMCAgICAweDBlODEKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfUE9SVDFfU1ZJRFhfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfUE9SVDFfU1ZJRFhfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfUE9SVDBfU1ZJRFhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfUE9SVDBfU1ZJRFhfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1BPUlRCQVNFRF9TVklEWF9DVFJMMSAgICAweDBlODIKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfUE9SVDNfU1ZJRFhfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfUE9SVDNfU1ZJRFhfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfUE9SVDJfU1ZJRFhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfUE9SVDJfU1ZJRFhfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1BPUlRCQVNFRF9TVklEWF9DVFJMMiAgICAweDBlODMKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfUE9SVDVfU1ZJRFhfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfUE9SVDVfU1ZJRFhfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfUE9SVDRfU1ZJRFhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfUE9SVDRfU1ZJRFhfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1BPUlRCQVNFRF9TVklEWF9DVFJMMyAgICAweDBlODQKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfUE9SVDdfU1ZJRFhfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfUE9SVDdfU1ZJRFhfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfUE9SVDZfU1ZJRFhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfUE9SVDZfU1ZJRFhfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1VOVEFHX1VOTUFUX0NGRyAgICAweDBlODUKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfVU5UQUdfU1ZJRFhfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfVU5UQUdfU1ZJRFhfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfVU5NQVRfU1ZJRFhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfVU5NQVRfU1ZJRFhfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0xPT0tVUF9UWVBFICAgIDB4MGU4NgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9MT09LVVBfVFlQRV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9MT09LVVBfVFlQRV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZBTElEXzE1XzAgICAgMHgwZTg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfVkFMSURfMzFfMTYgICAgMHgwZTg4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfVkFMSURfNDdfMzIgICAgMHgwZTg5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lQTUNfR1JPVVBfVkFMSURfNjNfNDggICAgMHgwZThhCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1BPUlRCQVNFRF9TVklEWF9DVFJMNCAgICAweDBlOGIKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfUE9SVDlfU1ZJRFhfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfUE9SVDlfU1ZJRFhfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfUE9SVDhfU1ZJRFhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfUE9SVDhfU1ZJRFhfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1BPUlRCQVNFRF9TVklEWF9DVFJMNSAgICAweDBlOGMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fUE9SVEJBU0VEX1NWSURYX0NUUkw1X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1BPUlRCQVNFRF9TVklEWF9DVFJMNV9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fQ0ZHX0VYVCAgICAweDBlOGQKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfUE9SVDEwX0RNQUNWSURTRUxfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfUE9SVDEwX0RNQUNWSURTRUxfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfUE9SVDlfRE1BQ1ZJRFNFTF9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19WU19QT1JUOV9ETUFDVklEU0VMX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZTX1BPUlQ4X0RNQUNWSURTRUxfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVlNfUE9SVDhfRE1BQ1ZJRFNFTF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkc2M19DVFJMNCAgICAweDBlOGUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHNjNfQ1RSTDRfVlNfVU5UQUdTRVRfRVhUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzYzX0NUUkw0X1ZTX1VOVEFHU0VUX0VYVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzYzX0NUUkw0X1ZTX1NNQlJfRVhUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX01FTUJFUkNGRzYzX0NUUkw0X1ZTX1NNQlJfRVhUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0RVTU1ZXzAgICAgMHgwZTkwCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0RVTU1ZXzEgICAgMHgwZTkxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0RVTU1ZXzIgICAgMHgwZTkyCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0RVTU1ZXzMgICAgMHgwZTkzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0RVTU1ZXzQgICAgMHgwZTk0CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0RVTU1ZXzUgICAgMHgwZTk1CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0RVTU1ZXzYgICAgMHgwZTk2CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0RVTU1ZXzcgICAgMHgwZTk3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0RVTU1ZXzggICAgMHgwZTk4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0RVTU1ZXzkgICAgMHgwZTk5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0RVTU1ZXzEwICAgIDB4MGU5YQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9EVU1NWV8xMSAgICAweDBlOWIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fRFVNTVlfMTIgICAgMHgwZTljCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0RVTU1ZXzEzICAgIDB4MGU5ZAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9EVU1NWV8xNCAgICAweDBlOWUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fRFVNTVlfMTUgICAgMHgwZTlmCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0RVTU1ZXzE2ICAgIDB4MGVhMAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9EVU1NWV8xNyAgICAweDBlYTEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fRFVNTVlfMTggICAgMHgwZWEyCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0RVTU1ZXzE5ICAgIDB4MGVhMworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9EVU1NWV8yMCAgICAweDBlYTQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fRFVNTVlfMjEgICAgMHgwZWE1CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0RVTU1ZXzIyICAgIDB4MGVhNgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9EVU1NWV8yMyAgICAweDBlYTcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fRFVNTVlfMjQgICAgMHgwZWE4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0RVTU1ZXzI1ICAgIDB4MGVhOQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9EVU1NWV8yNiAgICAweDBlYWEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fRFVNTVlfMjcgICAgMHgwZWFiCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0RVTU1ZXzI4ICAgIDB4MGVhYworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9EVU1NWV8yOSAgICAweDBlYWQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fRFVNTVlfMzAgICAgMHgwZWFlCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX0RVTU1ZXzMxICAgIDB4MGVhZgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8wMCAgICAweDBlYjAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMDBfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8wMSAgICAweDBlYjEKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMDFfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8wMiAgICAweDBlYjIKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMDJfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8wMyAgICAweDBlYjMKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMDNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMDNfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8wNCAgICAweDBlYjQKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMDRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMDRfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8wNSAgICAweDBlYjUKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMDVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMDVfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8wNiAgICAweDBlYjYKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMDZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMDZfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8wNyAgICAweDBlYjcKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMDdfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMDdfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8wOCAgICAweDBlYjgKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMDhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMDhfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8wOSAgICAweDBlYjkKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMDlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMDlfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8xMCAgICAweDBlYmEKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMTBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMTBfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8xMSAgICAweDBlYmIKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMTFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMTFfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8xMiAgICAweDBlYmMKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMTJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMTJfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8xMyAgICAweDBlYmQKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMTNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMTNfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8xNCAgICAweDBlYmUKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMTRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMTRfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8xNSAgICAweDBlYmYKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMTVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMTVfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8xNiAgICAweDBlYzAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMTZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMTZfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8xNyAgICAweDBlYzEKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMTdfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMTdfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8xOCAgICAweDBlYzIKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMThfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMThfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8xOSAgICAweDBlYzMKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMTlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMTlfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8yMCAgICAweDBlYzQKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMjBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMjBfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8yMSAgICAweDBlYzUKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMjFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMjFfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8yMiAgICAweDBlYzYKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMjJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMjJfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8yMyAgICAweDBlYzcKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMjNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMjNfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8yNCAgICAweDBlYzgKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMjRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMjRfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8yNSAgICAweDBlYzkKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMjVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMjVfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8yNiAgICAweDBlY2EKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMjZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMjZfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8yNyAgICAweDBlY2IKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMjdfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMjdfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8yOCAgICAweDBlY2MKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMjhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMjhfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8yOSAgICAweDBlY2QKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMjlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMjlfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8zMCAgICAweDBlY2UKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMzBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMzBfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8zMSAgICAweDBlY2YKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMzFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMzFfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8zMiAgICAweDBlZDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMzJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMzJfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8zMyAgICAweDBlZDEKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMzNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMzNfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8zNCAgICAweDBlZDIKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMzRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMzRfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8zNSAgICAweDBlZDMKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMzVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMzVfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8zNiAgICAweDBlZDQKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMzZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMzZfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8zNyAgICAweDBlZDUKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMzdfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMzdfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8zOCAgICAweDBlZDYKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMzhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMzhfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8zOSAgICAweDBlZDcKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMzlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfMzlfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF80MCAgICAweDBlZDgKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNDBfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF80MSAgICAweDBlZDkKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNDFfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF80MiAgICAweDBlZGEKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNDJfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF80MyAgICAweDBlZGIKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNDNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNDNfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF80NCAgICAweDBlZGMKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNDRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNDRfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF80NSAgICAweDBlZGQKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNDVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNDVfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF80NiAgICAweDBlZGUKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNDZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNDZfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF80NyAgICAweDBlZGYKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNDdfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNDdfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF80OCAgICAweDBlZjAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNDhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNDhfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF80OSAgICAweDBlZjEKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNDlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNDlfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF81MCAgICAweDBlZjIKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNTBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNTBfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF81MSAgICAweDBlZjMKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNTFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNTFfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF81MiAgICAweDBlZjQKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNTJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNTJfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF81MyAgICAweDBlZjUKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNTNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNTNfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF81NCAgICAweDBlZjYKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNTRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNTRfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF81NSAgICAweDBlZjcKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNTVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNTVfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF81NiAgICAweDBlZjgKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNTZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNTZfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF81NyAgICAweDBlZjkKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNTdfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNTdfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF81OCAgICAweDBlZmEKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNThfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNThfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF81OSAgICAweDBlZmIKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNTlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNTlfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF82MCAgICAweDBlZmMKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNjBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNjBfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF82MSAgICAweDBlZmQKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNjFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNjFfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF82MiAgICAweDBlZmUKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNjJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNjJfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF82MyAgICAweDBlZmYKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNjNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVBNQ19HUk9VUF9WSURfNjNfTUFTSyAgICAweEZGRgorCisvKiAoMTYnaDBmMDApaHNhY3RybF9yZWcgKi8KKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTBfQ1RSTDAgICAgMHgwZjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkwX0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMF9DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMF9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMF9DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkwX0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkwX0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkwX0NUUkwxICAgIDB4MGYwMQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMF9DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTBfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTBfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkwX0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkxX0NUUkwwICAgIDB4MGYwMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMV9DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTFfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTFfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTFfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMV9DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMV9DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMV9DVFJMMSAgICAweDBmMDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTFfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxX0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxX0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMV9DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMl9DVFJMMCAgICAweDBmMDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTJfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyX0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyX0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyX0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTJfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTJfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTJfQ1RSTDEgICAgMHgwZjA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyX0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMl9DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMl9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTJfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTNfQ1RSTDAgICAgMHgwZjA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzX0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZM19DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZM19DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZM19DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzX0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzX0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkzX0NUUkwxICAgIDB4MGYwNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZM19DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTNfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTNfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzX0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk0X0NUUkwwICAgIDB4MGYwOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNF9DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTRfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTRfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTRfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNF9DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNF9DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZNF9DVFJMMSAgICAweDBmMDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTRfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0X0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0X0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNF9DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZNV9DVFJMMCAgICAweDBmMGEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTVfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1X0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1X0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1X0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTVfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTVfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTVfQ1RSTDEgICAgMHgwZjBiCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1X0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNV9DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNV9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTVfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTZfQ1RSTDAgICAgMHgwZjBjCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2X0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNl9DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNl9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNl9DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2X0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2X0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk2X0NUUkwxICAgIDB4MGYwZAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNl9DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTZfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTZfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2X0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk3X0NUUkwwICAgIDB4MGYwZQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZN19DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTdfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTdfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTdfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZN19DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZN19DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZN19DVFJMMSAgICAweDBmMGYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTdfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3X0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3X0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZN19DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZOF9DVFJMMCAgICAweDBmMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWThfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4X0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4X0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4X0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWThfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWThfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWThfQ1RSTDEgICAgMHgwZjExCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4X0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOF9DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOF9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWThfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTlfQ1RSTDAgICAgMHgwZjEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5X0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOV9DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOV9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOV9DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5X0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5X0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk5X0NUUkwxICAgIDB4MGYxMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOV9DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTlfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTlfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5X0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkxMF9DVFJMMCAgICAweDBmMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwX0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTBfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwX0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMF9DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMF9DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTBfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTEwX0NUUkwxICAgIDB4MGYxNQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTBfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMF9DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTBfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMF9DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMTFfQ1RSTDAgICAgMHgwZjE2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMV9DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExX0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMV9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTFfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTFfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExX0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkxMV9DVFJMMSAgICAweDBmMTcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExX0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTFfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExX0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTFfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTEyX0NUUkwwICAgIDB4MGYxOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTJfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMl9DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTJfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEyX0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEyX0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMl9DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMTJfQ1RSTDEgICAgMHgwZjE5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMl9DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEyX0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMl9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEyX0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkxM19DVFJMMCAgICAweDBmMWEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEzX0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTNfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEzX0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxM19DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxM19DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTNfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTEzX0NUUkwxICAgIDB4MGYxYgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTNfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxM19DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTNfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxM19DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMTRfQ1RSTDAgICAgMHgwZjFjCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxNF9DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTE0X0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxNF9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTRfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTRfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTE0X0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkxNF9DVFJMMSAgICAweDBmMWQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTE0X0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTRfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTE0X0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTRfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTE1X0NUUkwwICAgIDB4MGYxZQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTVfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxNV9DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTVfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTE1X0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTE1X0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxNV9DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMTVfQ1RSTDEgICAgMHgwZjFmCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxNV9DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTE1X0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxNV9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTE1X0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkxNl9DVFJMMCAgICAweDBmMjAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTE2X0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTZfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTE2X0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxNl9DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxNl9DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTZfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTE2X0NUUkwxICAgIDB4MGYyMQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTZfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxNl9DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTZfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxNl9DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMTdfQ1RSTDAgICAgMHgwZjIyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxN19DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTE3X0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxN19DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTdfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTdfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTE3X0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkxN19DVFJMMSAgICAweDBmMjMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTE3X0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTdfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTE3X0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTdfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTE4X0NUUkwwICAgIDB4MGYyNAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMThfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxOF9DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMThfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTE4X0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTE4X0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxOF9DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMThfQ1RSTDEgICAgMHgwZjI1CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxOF9DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTE4X0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxOF9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTE4X0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkxOV9DVFJMMCAgICAweDBmMjYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTE5X0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTlfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTE5X0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxOV9DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxOV9DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTlfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTE5X0NUUkwxICAgIDB4MGYyNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTlfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxOV9DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTlfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxOV9DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMjBfQ1RSTDAgICAgMHgwZjI4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyMF9DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTIwX0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyMF9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMjBfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMjBfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTIwX0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkyMF9DVFJMMSAgICAweDBmMjkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTIwX0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMjBfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTIwX0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMjBfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTIxX0NUUkwwICAgIDB4MGYyYQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMjFfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyMV9DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMjFfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTIxX0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTIxX0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyMV9DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMjFfQ1RSTDEgICAgMHgwZjJiCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyMV9DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTIxX0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyMV9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTIxX0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkyMl9DVFJMMCAgICAweDBmMmMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTIyX0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMjJfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTIyX0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyMl9DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyMl9DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMjJfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTIyX0NUUkwxICAgIDB4MGYyZAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMjJfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyMl9DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMjJfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyMl9DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMjNfQ1RSTDAgICAgMHgwZjJlCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyM19DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTIzX0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyM19DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMjNfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMjNfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTIzX0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkyM19DVFJMMSAgICAweDBmMmYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTIzX0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMjNfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTIzX0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMjNfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTI0X0NUUkwwICAgIDB4MGYzMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMjRfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyNF9DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMjRfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTI0X0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTI0X0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyNF9DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMjRfQ1RSTDEgICAgMHgwZjMxCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyNF9DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTI0X0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyNF9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTI0X0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkyNV9DVFJMMCAgICAweDBmMzIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTI1X0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMjVfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTI1X0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyNV9DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyNV9DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMjVfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTI1X0NUUkwxICAgIDB4MGYzMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMjVfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyNV9DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMjVfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyNV9DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMjZfQ1RSTDAgICAgMHgwZjM0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyNl9DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTI2X0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyNl9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMjZfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMjZfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTI2X0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkyNl9DVFJMMSAgICAweDBmMzUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTI2X0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMjZfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTI2X0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMjZfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTI3X0NUUkwwICAgIDB4MGYzNgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMjdfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyN19DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMjdfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTI3X0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTI3X0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyN19DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMjdfQ1RSTDEgICAgMHgwZjM3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyN19DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTI3X0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyN19DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTI3X0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkyOF9DVFJMMCAgICAweDBmMzgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTI4X0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMjhfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTI4X0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyOF9DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyOF9DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMjhfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTI4X0NUUkwxICAgIDB4MGYzOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMjhfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyOF9DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMjhfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyOF9DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMjlfQ1RSTDAgICAgMHgwZjNhCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyOV9DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTI5X0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkyOV9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMjlfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMjlfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTI5X0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkyOV9DVFJMMSAgICAweDBmM2IKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTI5X0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMjlfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTI5X0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMjlfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTMwX0NUUkwwICAgIDB4MGYzYworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMzBfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzMF9DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMzBfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTMwX0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTMwX0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzMF9DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMzBfQ1RSTDEgICAgMHgwZjNkCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzMF9DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTMwX0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzMF9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTMwX0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkzMV9DVFJMMCAgICAweDBmM2UKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTMxX0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMzFfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTMxX0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzMV9DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzMV9DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMzFfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTMxX0NUUkwxICAgIDB4MGYzZgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMzFfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzMV9DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMzFfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzMV9DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMzJfQ1RSTDAgICAgMHgwZjQwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzMl9DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTMyX0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzMl9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMzJfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMzJfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTMyX0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkzMl9DVFJMMSAgICAweDBmNDEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTMyX0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMzJfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTMyX0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMzJfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTMzX0NUUkwwICAgIDB4MGY0MgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMzNfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzM19DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMzNfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTMzX0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTMzX0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzM19DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMzNfQ1RSTDEgICAgMHgwZjQzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzM19DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTMzX0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzM19DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTMzX0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkzNF9DVFJMMCAgICAweDBmNDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTM0X0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMzRfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTM0X0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzNF9DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzNF9DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMzRfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTM0X0NUUkwxICAgIDB4MGY0NQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMzRfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzNF9DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMzRfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzNF9DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMzVfQ1RSTDAgICAgMHgwZjQ2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzNV9DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTM1X0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzNV9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMzVfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMzVfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTM1X0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkzNV9DVFJMMSAgICAweDBmNDcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTM1X0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMzVfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTM1X0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMzVfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTM2X0NUUkwwICAgIDB4MGY0OAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMzZfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzNl9DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMzZfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTM2X0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTM2X0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzNl9DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMzZfQ1RSTDEgICAgMHgwZjQ5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzNl9DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTM2X0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzNl9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTM2X0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkzN19DVFJMMCAgICAweDBmNGEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTM3X0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMzdfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTM3X0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzN19DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzN19DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMzdfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTM3X0NUUkwxICAgIDB4MGY0YgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMzdfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzN19DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMzdfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzN19DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMzhfQ1RSTDAgICAgMHgwZjRjCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzOF9DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTM4X0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzOF9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMzhfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMzhfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTM4X0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkzOF9DVFJMMSAgICAweDBmNGQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTM4X0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMzhfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTM4X0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMzhfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTM5X0NUUkwwICAgIDB4MGY0ZQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMzlfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzOV9DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMzlfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTM5X0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTM5X0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzOV9DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMzlfQ1RSTDEgICAgMHgwZjRmCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzOV9DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTM5X0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkzOV9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTM5X0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk0MF9DVFJMMCAgICAweDBmNTAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTQwX0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNDBfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTQwX0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0MF9DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0MF9DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNDBfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTQwX0NUUkwxICAgIDB4MGY1MQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNDBfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0MF9DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNDBfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0MF9DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZNDFfQ1RSTDAgICAgMHgwZjUyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0MV9DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTQxX0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0MV9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNDFfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNDFfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTQxX0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk0MV9DVFJMMSAgICAweDBmNTMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTQxX0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNDFfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTQxX0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNDFfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTQyX0NUUkwwICAgIDB4MGY1NAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNDJfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0Ml9DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNDJfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTQyX0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTQyX0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0Ml9DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZNDJfQ1RSTDEgICAgMHgwZjU1CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0Ml9DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTQyX0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0Ml9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTQyX0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk0M19DVFJMMCAgICAweDBmNTYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTQzX0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNDNfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTQzX0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0M19DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0M19DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNDNfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTQzX0NUUkwxICAgIDB4MGY1NworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNDNfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0M19DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNDNfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0M19DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZNDRfQ1RSTDAgICAgMHgwZjU4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0NF9DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTQ0X0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0NF9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNDRfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNDRfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTQ0X0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk0NF9DVFJMMSAgICAweDBmNTkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTQ0X0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNDRfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTQ0X0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNDRfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTQ1X0NUUkwwICAgIDB4MGY1YQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNDVfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0NV9DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNDVfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTQ1X0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTQ1X0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0NV9DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZNDVfQ1RSTDEgICAgMHgwZjViCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0NV9DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTQ1X0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0NV9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTQ1X0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk0Nl9DVFJMMCAgICAweDBmNWMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTQ2X0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNDZfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTQ2X0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0Nl9DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0Nl9DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNDZfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTQ2X0NUUkwxICAgIDB4MGY1ZAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNDZfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0Nl9DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNDZfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0Nl9DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZNDdfQ1RSTDAgICAgMHgwZjVlCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0N19DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTQ3X0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0N19DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNDdfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNDdfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTQ3X0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk0N19DVFJMMSAgICAweDBmNWYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTQ3X0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNDdfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTQ3X0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNDdfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTQ4X0NUUkwwICAgIDB4MGY2MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNDhfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0OF9DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNDhfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTQ4X0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTQ4X0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0OF9DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZNDhfQ1RSTDEgICAgMHgwZjYxCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0OF9DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTQ4X0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0OF9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTQ4X0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk0OV9DVFJMMCAgICAweDBmNjIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTQ5X0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNDlfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTQ5X0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0OV9DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0OV9DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNDlfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTQ5X0NUUkwxICAgIDB4MGY2MworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNDlfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0OV9DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNDlfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk0OV9DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZNTBfQ1RSTDAgICAgMHgwZjY0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1MF9DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTUwX0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1MF9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNTBfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNTBfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTUwX0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk1MF9DVFJMMSAgICAweDBmNjUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTUwX0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNTBfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTUwX0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNTBfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTUxX0NUUkwwICAgIDB4MGY2NgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNTFfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1MV9DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNTFfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTUxX0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTUxX0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1MV9DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZNTFfQ1RSTDEgICAgMHgwZjY3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1MV9DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTUxX0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1MV9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTUxX0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk1Ml9DVFJMMCAgICAweDBmNjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTUyX0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNTJfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTUyX0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1Ml9DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1Ml9DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNTJfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTUyX0NUUkwxICAgIDB4MGY2OQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNTJfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1Ml9DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNTJfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1Ml9DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZNTNfQ1RSTDAgICAgMHgwZjZhCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1M19DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTUzX0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1M19DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNTNfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNTNfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTUzX0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk1M19DVFJMMSAgICAweDBmNmIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTUzX0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNTNfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTUzX0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNTNfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTU0X0NUUkwwICAgIDB4MGY2YworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNTRfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1NF9DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNTRfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTU0X0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTU0X0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1NF9DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZNTRfQ1RSTDEgICAgMHgwZjZkCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1NF9DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTU0X0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1NF9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTU0X0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk1NV9DVFJMMCAgICAweDBmNmUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTU1X0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNTVfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTU1X0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1NV9DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1NV9DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNTVfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTU1X0NUUkwxICAgIDB4MGY2ZgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNTVfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1NV9DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNTVfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1NV9DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZNTZfQ1RSTDAgICAgMHgwZjcwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1Nl9DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTU2X0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1Nl9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNTZfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNTZfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTU2X0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk1Nl9DVFJMMSAgICAweDBmNzEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTU2X0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNTZfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTU2X0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNTZfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTU3X0NUUkwwICAgIDB4MGY3MgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNTdfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1N19DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNTdfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTU3X0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTU3X0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1N19DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZNTdfQ1RSTDEgICAgMHgwZjczCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1N19DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTU3X0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1N19DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTU3X0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk1OF9DVFJMMCAgICAweDBmNzQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTU4X0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNThfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTU4X0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1OF9DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1OF9DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNThfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTU4X0NUUkwxICAgIDB4MGY3NQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNThfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1OF9DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNThfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1OF9DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZNTlfQ1RSTDAgICAgMHgwZjc2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1OV9DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTU5X0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk1OV9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNTlfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNTlfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTU5X0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk1OV9DVFJMMSAgICAweDBmNzcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTU5X0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNTlfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTU5X0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNTlfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTYwX0NUUkwwICAgIDB4MGY3OAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNjBfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2MF9DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNjBfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTYwX0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTYwX0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2MF9DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZNjBfQ1RSTDEgICAgMHgwZjc5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2MF9DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTYwX0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2MF9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTYwX0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk2MV9DVFJMMCAgICAweDBmN2EKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTYxX0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNjFfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTYxX0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2MV9DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2MV9DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNjFfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTYxX0NUUkwxICAgIDB4MGY3YgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNjFfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2MV9DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNjFfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2MV9DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZNjJfQ1RSTDAgICAgMHgwZjdjCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2Ml9DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTYyX0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2Ml9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNjJfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNjJfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTYyX0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk2Ml9DVFJMMSAgICAweDBmN2QKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTYyX0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNjJfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTYyX0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNjJfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTYzX0NUUkwwICAgIDB4MGY3ZQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNjNfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2M19DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNjNfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTYzX0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTYzX0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2M19DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZNjNfQ1RSTDEgICAgMHgwZjdmCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2M19DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTYzX0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2M19DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTYzX0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk2NF9DVFJMMCAgICAweDBmODAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTY0X0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNjRfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTY0X0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2NF9DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2NF9DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNjRfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTY0X0NUUkwxICAgIDB4MGY4MQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNjRfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2NF9DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNjRfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2NF9DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZNjVfQ1RSTDAgICAgMHgwZjgyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2NV9DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTY1X0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2NV9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNjVfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNjVfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTY1X0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk2NV9DVFJMMSAgICAweDBmODMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTY1X0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNjVfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTY1X0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNjVfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTY2X0NUUkwwICAgIDB4MGY4NAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNjZfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2Nl9DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNjZfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTY2X0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTY2X0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2Nl9DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZNjZfQ1RSTDEgICAgMHgwZjg1CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2Nl9DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTY2X0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2Nl9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTY2X0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk2N19DVFJMMCAgICAweDBmODYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTY3X0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNjdfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTY3X0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2N19DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2N19DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNjdfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTY3X0NUUkwxICAgIDB4MGY4NworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNjdfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2N19DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNjdfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2N19DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZNjhfQ1RSTDAgICAgMHgwZjg4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2OF9DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTY4X0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2OF9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNjhfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNjhfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTY4X0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk2OF9DVFJMMSAgICAweDBmODkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTY4X0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNjhfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTY4X0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNjhfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTY5X0NUUkwwICAgIDB4MGY4YQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNjlfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2OV9DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNjlfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTY5X0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTY5X0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2OV9DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZNjlfQ1RSTDEgICAgMHgwZjhiCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2OV9DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTY5X0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk2OV9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTY5X0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk3MF9DVFJMMCAgICAweDBmOGMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTcwX0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNzBfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTcwX0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3MF9DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3MF9DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNzBfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTcwX0NUUkwxICAgIDB4MGY4ZAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNzBfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3MF9DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNzBfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3MF9DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZNzFfQ1RSTDAgICAgMHgwZjhlCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3MV9DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTcxX0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3MV9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNzFfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNzFfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTcxX0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk3MV9DVFJMMSAgICAweDBmOGYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTcxX0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNzFfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTcxX0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNzFfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTcyX0NUUkwwICAgIDB4MGY5MAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNzJfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3Ml9DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNzJfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTcyX0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTcyX0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3Ml9DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZNzJfQ1RSTDEgICAgMHgwZjkxCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3Ml9DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTcyX0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3Ml9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTcyX0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk3M19DVFJMMCAgICAweDBmOTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTczX0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNzNfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTczX0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3M19DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3M19DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNzNfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTczX0NUUkwxICAgIDB4MGY5MworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNzNfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3M19DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNzNfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3M19DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZNzRfQ1RSTDAgICAgMHgwZjk0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3NF9DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTc0X0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3NF9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNzRfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNzRfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTc0X0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk3NF9DVFJMMSAgICAweDBmOTUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTc0X0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNzRfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTc0X0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNzRfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTc1X0NUUkwwICAgIDB4MGY5NgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNzVfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3NV9DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNzVfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTc1X0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTc1X0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3NV9DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZNzVfQ1RSTDEgICAgMHgwZjk3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3NV9DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTc1X0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3NV9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTc1X0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk3Nl9DVFJMMCAgICAweDBmOTgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTc2X0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNzZfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTc2X0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3Nl9DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3Nl9DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNzZfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTc2X0NUUkwxICAgIDB4MGY5OQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNzZfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3Nl9DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNzZfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3Nl9DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZNzdfQ1RSTDAgICAgMHgwZjlhCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3N19DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTc3X0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3N19DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNzdfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNzdfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTc3X0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk3N19DVFJMMSAgICAweDBmOWIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTc3X0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNzdfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTc3X0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNzdfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTc4X0NUUkwwICAgIDB4MGY5YworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNzhfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3OF9DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNzhfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTc4X0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTc4X0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3OF9DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZNzhfQ1RSTDEgICAgMHgwZjlkCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3OF9DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTc4X0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3OF9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTc4X0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk3OV9DVFJMMCAgICAweDBmOWUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTc5X0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNzlfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTc5X0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3OV9DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3OV9DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNzlfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTc5X0NUUkwxICAgIDB4MGY5ZgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNzlfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3OV9DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZNzlfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk3OV9DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZODBfQ1RSTDAgICAgMHgwZmEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4MF9DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTgwX0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4MF9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZODBfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZODBfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTgwX0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk4MF9DVFJMMSAgICAweDBmYTEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTgwX0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZODBfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTgwX0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZODBfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTgxX0NUUkwwICAgIDB4MGZhMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZODFfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4MV9DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZODFfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTgxX0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTgxX0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4MV9DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZODFfQ1RSTDEgICAgMHgwZmEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4MV9DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTgxX0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4MV9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTgxX0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk4Ml9DVFJMMCAgICAweDBmYTQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTgyX0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZODJfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTgyX0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4Ml9DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4Ml9DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZODJfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTgyX0NUUkwxICAgIDB4MGZhNQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZODJfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4Ml9DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZODJfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4Ml9DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZODNfQ1RSTDAgICAgMHgwZmE2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4M19DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTgzX0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4M19DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZODNfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZODNfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTgzX0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk4M19DVFJMMSAgICAweDBmYTcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTgzX0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZODNfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTgzX0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZODNfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTg0X0NUUkwwICAgIDB4MGZhOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZODRfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4NF9DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZODRfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTg0X0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTg0X0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4NF9DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZODRfQ1RSTDEgICAgMHgwZmE5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4NF9DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTg0X0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4NF9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTg0X0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk4NV9DVFJMMCAgICAweDBmYWEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTg1X0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZODVfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTg1X0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4NV9DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4NV9DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZODVfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTg1X0NUUkwxICAgIDB4MGZhYgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZODVfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4NV9DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZODVfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4NV9DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZODZfQ1RSTDAgICAgMHgwZmFjCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4Nl9DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTg2X0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4Nl9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZODZfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZODZfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTg2X0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk4Nl9DVFJMMSAgICAweDBmYWQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTg2X0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZODZfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTg2X0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZODZfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTg3X0NUUkwwICAgIDB4MGZhZQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZODdfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4N19DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZODdfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTg3X0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTg3X0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4N19DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZODdfQ1RSTDEgICAgMHgwZmFmCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4N19DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTg3X0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4N19DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTg3X0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk4OF9DVFJMMCAgICAweDBmYjAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTg4X0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZODhfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTg4X0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4OF9DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4OF9DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZODhfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTg4X0NUUkwxICAgIDB4MGZiMQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZODhfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4OF9DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZODhfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4OF9DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZODlfQ1RSTDAgICAgMHgwZmIyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4OV9DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTg5X0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk4OV9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZODlfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZODlfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTg5X0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk4OV9DVFJMMSAgICAweDBmYjMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTg5X0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZODlfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTg5X0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZODlfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTkwX0NUUkwwICAgIDB4MGZiNAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOTBfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5MF9DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOTBfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTkwX0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTkwX0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5MF9DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZOTBfQ1RSTDEgICAgMHgwZmI1CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5MF9DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTkwX0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5MF9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTkwX0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk5MV9DVFJMMCAgICAweDBmYjYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTkxX0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOTFfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTkxX0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5MV9DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5MV9DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOTFfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTkxX0NUUkwxICAgIDB4MGZiNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOTFfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5MV9DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOTFfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5MV9DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZOTJfQ1RSTDAgICAgMHgwZmI4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5Ml9DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTkyX0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5Ml9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOTJfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOTJfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTkyX0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk5Ml9DVFJMMSAgICAweDBmYjkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTkyX0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOTJfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTkyX0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOTJfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTkzX0NUUkwwICAgIDB4MGZiYQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOTNfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5M19DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOTNfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTkzX0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTkzX0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5M19DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZOTNfQ1RSTDEgICAgMHgwZmJiCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5M19DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTkzX0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5M19DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTkzX0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk5NF9DVFJMMCAgICAweDBmYmMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTk0X0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOTRfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTk0X0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5NF9DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5NF9DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOTRfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTk0X0NUUkwxICAgIDB4MGZiZAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOTRfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5NF9DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOTRfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5NF9DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZOTVfQ1RSTDAgICAgMHgwZmJlCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5NV9DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTk1X0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5NV9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOTVfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOTVfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTk1X0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk5NV9DVFJMMSAgICAweDBmYmYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTk1X0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOTVfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTk1X0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOTVfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTk2X0NUUkwwICAgIDB4MGZjMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOTZfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5Nl9DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOTZfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTk2X0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTk2X0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5Nl9DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZOTZfQ1RSTDEgICAgMHgwZmMxCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5Nl9DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTk2X0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5Nl9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTk2X0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk5N19DVFJMMCAgICAweDBmYzIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTk3X0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOTdfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTk3X0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5N19DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5N19DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOTdfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTk3X0NUUkwxICAgIDB4MGZjMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOTdfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5N19DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOTdfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5N19DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZOThfQ1RSTDAgICAgMHgwZmM0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5OF9DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTk4X0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5OF9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOThfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOThfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTk4X0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlk5OF9DVFJMMSAgICAweDBmYzUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTk4X0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOThfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTk4X0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOThfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTk5X0NUUkwwICAgIDB4MGZjNgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOTlfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5OV9DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZOTlfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTk5X0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTk5X0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5OV9DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZOTlfQ1RSTDEgICAgMHgwZmM3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5OV9DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTk5X0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlk5OV9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTk5X0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkxMDBfQ1RSTDAgICAgMHgwZmM4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMDBfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMDBfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwMF9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTAwX0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwMF9DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTAwX0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkxMDBfQ1RSTDEgICAgMHgwZmM5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMDBfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMDBfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwMF9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwMF9DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMTAxX0NUUkwwICAgIDB4MGZjYQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTAxX0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTAxX0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMDFfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwMV9DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMDFfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwMV9DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMTAxX0NUUkwxICAgIDB4MGZjYgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTAxX0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTAxX0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMDFfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMDFfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTEwMl9DVFJMMCAgICAweDBmY2MKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwMl9DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwMl9DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTAyX0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMDJfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTAyX0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMDJfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTEwMl9DVFJMMSAgICAweDBmY2QKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwMl9DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwMl9DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTAyX0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTAyX0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkxMDNfQ1RSTDAgICAgMHgwZmNlCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMDNfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMDNfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwM19DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTAzX0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwM19DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTAzX0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkxMDNfQ1RSTDEgICAgMHgwZmNmCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMDNfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMDNfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwM19DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwM19DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMTA0X0NUUkwwICAgIDB4MGZkMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTA0X0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTA0X0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMDRfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwNF9DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMDRfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwNF9DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMTA0X0NUUkwxICAgIDB4MGZkMQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTA0X0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTA0X0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMDRfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMDRfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTEwNV9DVFJMMCAgICAweDBmZDIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwNV9DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwNV9DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTA1X0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMDVfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTA1X0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMDVfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTEwNV9DVFJMMSAgICAweDBmZDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwNV9DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwNV9DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTA1X0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTA1X0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkxMDZfQ1RSTDAgICAgMHgwZmQ0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMDZfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMDZfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwNl9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTA2X0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwNl9DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTA2X0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkxMDZfQ1RSTDEgICAgMHgwZmQ1CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMDZfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMDZfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwNl9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwNl9DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMTA3X0NUUkwwICAgIDB4MGZkNgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTA3X0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTA3X0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMDdfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwN19DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMDdfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwN19DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMTA3X0NUUkwxICAgIDB4MGZkNworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTA3X0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTA3X0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMDdfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMDdfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTEwOF9DVFJMMCAgICAweDBmZDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwOF9DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwOF9DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTA4X0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMDhfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTA4X0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMDhfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTEwOF9DVFJMMSAgICAweDBmZDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwOF9DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwOF9DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTA4X0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTA4X0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkxMDlfQ1RSTDAgICAgMHgwZmRhCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMDlfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMDlfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwOV9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTA5X0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwOV9DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTA5X0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkxMDlfQ1RSTDEgICAgMHgwZmRiCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMDlfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMDlfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwOV9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEwOV9DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMTEwX0NUUkwwICAgIDB4MGZkYworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTEwX0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTEwX0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMTBfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExMF9DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMTBfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExMF9DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMTEwX0NUUkwxICAgIDB4MGZkZAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTEwX0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTEwX0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMTBfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMTBfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTExMV9DVFJMMCAgICAweDBmZGUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExMV9DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExMV9DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTExX0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMTFfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTExX0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMTFfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTExMV9DVFJMMSAgICAweDBmZGYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExMV9DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExMV9DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTExX0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTExX0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkxMTJfQ1RSTDAgICAgMHgwZmUwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMTJfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMTJfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExMl9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTEyX0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExMl9DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTEyX0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkxMTJfQ1RSTDEgICAgMHgwZmUxCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMTJfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMTJfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExMl9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExMl9DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMTEzX0NUUkwwICAgIDB4MGZlMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTEzX0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTEzX0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMTNfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExM19DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMTNfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExM19DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMTEzX0NUUkwxICAgIDB4MGZlMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTEzX0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTEzX0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMTNfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMTNfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTExNF9DVFJMMCAgICAweDBmZTQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExNF9DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExNF9DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTE0X0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMTRfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTE0X0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMTRfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTExNF9DVFJMMSAgICAweDBmZTUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExNF9DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExNF9DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTE0X0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTE0X0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkxMTVfQ1RSTDAgICAgMHgwZmU2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMTVfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMTVfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExNV9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTE1X0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExNV9DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTE1X0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkxMTVfQ1RSTDEgICAgMHgwZmU3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMTVfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMTVfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExNV9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExNV9DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMTE2X0NUUkwwICAgIDB4MGZlOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTE2X0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTE2X0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMTZfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExNl9DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMTZfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExNl9DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMTE2X0NUUkwxICAgIDB4MGZlOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTE2X0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTE2X0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMTZfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMTZfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTExN19DVFJMMCAgICAweDBmZWEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExN19DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExN19DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTE3X0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMTdfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTE3X0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMTdfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTExN19DVFJMMSAgICAweDBmZWIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExN19DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExN19DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTE3X0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTE3X0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkxMThfQ1RSTDAgICAgMHgwZmVjCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMThfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMThfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExOF9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTE4X0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExOF9DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTE4X0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkxMThfQ1RSTDEgICAgMHgwZmVkCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMThfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMThfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExOF9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExOF9DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMTE5X0NUUkwwICAgIDB4MGZlZQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTE5X0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTE5X0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMTlfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExOV9DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMTlfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTExOV9DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMTE5X0NUUkwxICAgIDB4MGZlZgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTE5X0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTE5X0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMTlfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMTlfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTEyMF9DVFJMMCAgICAweDBmZjAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEyMF9DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEyMF9DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTIwX0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMjBfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTIwX0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMjBfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTEyMF9DVFJMMSAgICAweDBmZjEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEyMF9DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEyMF9DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTIwX0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTIwX0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkxMjFfQ1RSTDAgICAgMHgwZmYyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMjFfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMjFfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEyMV9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTIxX0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEyMV9DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTIxX0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkxMjFfQ1RSTDEgICAgMHgwZmYzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMjFfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMjFfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEyMV9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEyMV9DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMTIyX0NUUkwwICAgIDB4MGZmNAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTIyX0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTIyX0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMjJfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEyMl9DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMjJfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEyMl9DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMTIyX0NUUkwxICAgIDB4MGZmNQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTIyX0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTIyX0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMjJfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMjJfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTEyM19DVFJMMCAgICAweDBmZjYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEyM19DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEyM19DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTIzX0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMjNfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTIzX0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMjNfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTEyM19DVFJMMSAgICAweDBmZjcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEyM19DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEyM19DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTIzX0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTIzX0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkxMjRfQ1RSTDAgICAgMHgwZmY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMjRfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMjRfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEyNF9DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTI0X0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEyNF9DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTI0X0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkxMjRfQ1RSTDEgICAgMHgwZmY5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMjRfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMjRfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEyNF9DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEyNF9DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMTI1X0NUUkwwICAgIDB4MGZmYQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTI1X0NUUkwwX0RTVF9QT1JUMV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTI1X0NUUkwwX0RTVF9QT1JUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMjVfQ1RSTDBfU1ZJRFhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEyNV9DVFJMMF9TVklEWF9NQVNLICAgIDB4MUY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMjVfQ1RSTDBfRFNUX1BPUlRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEyNV9DVFJMMF9EU1RfUE9SVF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9TUDJDX0VOVFJZMTI1X0NUUkwxICAgIDB4MGZmYgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTI1X0NUUkwxX1ZBTElEX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTI1X0NUUkwxX1ZBTElEX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMjVfQ1RSTDFfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMjVfQ1RSTDFfVklEX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTEyNl9DVFJMMCAgICAweDBmZmMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEyNl9DVFJMMF9EU1RfUE9SVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEyNl9DVFJMMF9EU1RfUE9SVDFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTI2X0NUUkwwX1NWSURYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMjZfQ1RSTDBfU1ZJRFhfTUFTSyAgICAweDFGOAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTI2X0NUUkwwX0RTVF9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMjZfQ1RSTDBfRFNUX1BPUlRfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1ZMQU5fU1AyQ19FTlRSWTEyNl9DVFJMMSAgICAweDBmZmQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEyNl9DVFJMMV9WQUxJRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEyNl9DVFJMMV9WQUxJRF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTI2X0NUUkwxX1ZJRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTI2X0NUUkwxX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkxMjdfQ1RSTDAgICAgMHgwZmZlCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMjdfQ1RSTDBfRFNUX1BPUlQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMjdfQ1RSTDBfRFNUX1BPUlQxX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEyN19DVFJMMF9TVklEWF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTI3X0NUUkwwX1NWSURYX01BU0sgICAgMHgxRjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEyN19DVFJMMF9EU1RfUE9SVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9TUDJDX0VOVFJZMTI3X0NUUkwwX0RTVF9QT1JUX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NWTEFOX1NQMkNfRU5UUlkxMjdfQ1RSTDEgICAgMHgwZmZmCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMjdfQ1RSTDFfVkFMSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1NQMkNfRU5UUlkxMjdfQ1RSTDFfVkFMSURfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEyN19DVFJMMV9WSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1ZMQU5fU1AyQ19FTlRSWTEyN19DVFJMMV9WSURfTUFTSyAgICAweEZGRgorCisvKiAoMTYnaDEwMDApbWliX3JlZyAqLworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NSUJfQ09VTlRFUjAgICAgMHgxMDAwCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01JQl9DT1VOVEVSMSAgICAweDEwMDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUlCX0NPVU5URVIyICAgIDB4MTAwMgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NSUJfQ09VTlRFUjMgICAgMHgxMDAzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01JQl9BRERSRVNTICAgIDB4MTAwNAorI2RlZmluZSAgICBSVEw4MzY3Q19NSUJfQUREUkVTU19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19NSUJfQUREUkVTU19NQVNLICAgIDB4MUZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01JQl9DVFJMMCAgICAweDEwMDUKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX1JFU0VUX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfUkVTRVRfTUFTSyAgICAweDgwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfUkVTRVRfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X1JFU0VUX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X1JFU0VUX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9SRVNFVF9NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19SRVNFVF9WQUxVRV9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVTRVRfVkFMVUVfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfR0xPQkFMX1JFU0VUX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19HTE9CQUxfUkVTRVRfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19RTV9SRVNFVF9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUU1fUkVTRVRfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19SRVNFVF9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19SRVNFVF9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X1JFU0VUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X1JFU0VUX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfUkVTRVRfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfUkVTRVRfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X1JFU0VUX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X1JFU0VUX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19SRVNFVF9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19SRVNFVF9NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfUkVTRVRfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfUkVTRVRfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX1JFU0VUX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX1JFU0VUX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX1JFU0VUX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX1JFU0VUX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1JFU0VUX0ZMQUdfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVTRVRfRkxBR19NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19NSUJfQ1RSTDBfQlVTWV9GTEFHX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01JQl9DVFJMMF9CVVNZX0ZMQUdfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUlCX0NUUkwxICAgIDB4MTAwNworI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSMTVfUkVTRVRfT0ZGU0VUICAgIDE1CisjZGVmaW5lICAgIFJUTDgzNjdDX0NPVU5URVIxNV9SRVNFVF9NQVNLICAgIDB4ODAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSMTRfUkVTRVRfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX0NPVU5URVIxNF9SRVNFVF9NQVNLICAgIDB4NDAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSMTNfUkVTRVRfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX0NPVU5URVIxM19SRVNFVF9NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSMTJfUkVTRVRfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0NPVU5URVIxMl9SRVNFVF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSMTFfUkVTRVRfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0NPVU5URVIxMV9SRVNFVF9NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NPVU5URVIxMF9SRVNFVF9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ09VTlRFUjEwX1JFU0VUX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ09VTlRFUjlfUkVTRVRfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfQ09VTlRFUjlfUkVTRVRfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSOF9SRVNFVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSOF9SRVNFVF9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NPVU5URVI3X1JFU0VUX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX0NPVU5URVI3X1JFU0VUX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSNl9SRVNFVF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSNl9SRVNFVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ09VTlRFUjVfUkVTRVRfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfQ09VTlRFUjVfUkVTRVRfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NPVU5URVI0X1JFU0VUX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0NPVU5URVI0X1JFU0VUX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSM19SRVNFVF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSM19SRVNFVF9NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSMl9SRVNFVF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSMl9SRVNFVF9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSMV9SRVNFVF9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSMV9SRVNFVF9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSMF9SRVNFVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSMF9SRVNFVF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NSUJfQ1RSTDIgICAgMHgxMDA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0NPVU5URVIzMV9SRVNFVF9PRkZTRVQgICAgMTUKKyNkZWZpbmUgICAgUlRMODM2N0NfQ09VTlRFUjMxX1JFU0VUX01BU0sgICAgMHg4MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NPVU5URVIzMF9SRVNFVF9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfQ09VTlRFUjMwX1JFU0VUX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NPVU5URVIyOV9SRVNFVF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfQ09VTlRFUjI5X1JFU0VUX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NPVU5URVIyOF9SRVNFVF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfQ09VTlRFUjI4X1JFU0VUX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NPVU5URVIyN19SRVNFVF9PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfQ09VTlRFUjI3X1JFU0VUX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ09VTlRFUjI2X1JFU0VUX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSMjZfUkVTRVRfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSMjVfUkVTRVRfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfQ09VTlRFUjI1X1JFU0VUX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ09VTlRFUjI0X1JFU0VUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0NPVU5URVIyNF9SRVNFVF9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NPVU5URVIyM19SRVNFVF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSMjNfUkVTRVRfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NPVU5URVIyMl9SRVNFVF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSMjJfUkVTRVRfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NPVU5URVIyMV9SRVNFVF9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSMjFfUkVTRVRfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NPVU5URVIyMF9SRVNFVF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSMjBfUkVTRVRfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NPVU5URVIxOV9SRVNFVF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSMTlfUkVTRVRfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQ09VTlRFUjE4X1JFU0VUX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0NPVU5URVIxOF9SRVNFVF9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSMTdfUkVTRVRfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfQ09VTlRFUjE3X1JFU0VUX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0NPVU5URVIxNl9SRVNFVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSMTZfUkVTRVRfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUlCX0NUUkwzICAgIDB4MTAwOQorI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSMTVfTU9ERV9PRkZTRVQgICAgMTUKKyNkZWZpbmUgICAgUlRMODM2N0NfQ09VTlRFUjE1X01PREVfTUFTSyAgICAweDgwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ09VTlRFUjE0X01PREVfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX0NPVU5URVIxNF9NT0RFX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NPVU5URVIxM19NT0RFX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSMTNfTU9ERV9NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSMTJfTU9ERV9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfQ09VTlRFUjEyX01PREVfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ09VTlRFUjExX01PREVfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0NPVU5URVIxMV9NT0RFX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ09VTlRFUjEwX01PREVfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NPVU5URVIxMF9NT0RFX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ09VTlRFUjlfTU9ERV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSOV9NT0RFX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ09VTlRFUjhfTU9ERV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSOF9NT0RFX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ09VTlRFUjdfTU9ERV9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSN19NT0RFX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSNl9NT0RFX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX0NPVU5URVI2X01PREVfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NPVU5URVI1X01PREVfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfQ09VTlRFUjVfTU9ERV9NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ09VTlRFUjRfTU9ERV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSNF9NT0RFX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSM19NT0RFX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0NPVU5URVIzX01PREVfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQ09VTlRFUjJfTU9ERV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSMl9NT0RFX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX0NPVU5URVIxX01PREVfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfQ09VTlRFUjFfTU9ERV9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19DT1VOVEVSMF9NT0RFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NPVU5URVIwX01PREVfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUlCX0NUUkw0ICAgIDB4MTAwYQorI2RlZmluZSAgICBSVEw4MzY3Q19NSUJfVVNBR0VfTU9ERV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19NSUJfVVNBR0VfTU9ERV9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01JQl9USU1FUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19NSUJfVElNRVJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01JQl9DVFJMNSAgICAweDEwMGIKKyNkZWZpbmUgICAgUlRMODM2N0NfTUlCX0NUUkw1X0NPVU5URVIxNV9UWVBFX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19NSUJfQ1RSTDVfQ09VTlRFUjE1X1RZUEVfTUFTSyAgICAweDgwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUlCX0NUUkw1X0NPVU5URVIxNF9UWVBFX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19NSUJfQ1RSTDVfQ09VTlRFUjE0X1RZUEVfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUlCX0NUUkw1X0NPVU5URVIxM19UWVBFX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19NSUJfQ1RSTDVfQ09VTlRFUjEzX1RZUEVfTUFTSyAgICAweDIwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUlCX0NUUkw1X0NPVU5URVIxMl9UWVBFX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19NSUJfQ1RSTDVfQ09VTlRFUjEyX1RZUEVfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUlCX0NUUkw1X0NPVU5URVIxMV9UWVBFX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19NSUJfQ1RSTDVfQ09VTlRFUjExX1RZUEVfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19NSUJfQ1RSTDVfQ09VTlRFUjEwX1RZUEVfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX01JQl9DVFJMNV9DT1VOVEVSMTBfVFlQRV9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01JQl9DVFJMNV9DT1VOVEVSOV9UWVBFX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX01JQl9DVFJMNV9DT1VOVEVSOV9UWVBFX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUlCX0NUUkw1X0NPVU5URVI4X1RZUEVfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfTUlCX0NUUkw1X0NPVU5URVI4X1RZUEVfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19NSUJfQ1RSTDVfQ09VTlRFUjdfVFlQRV9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19NSUJfQ1RSTDVfQ09VTlRFUjdfVFlQRV9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUlCX0NUUkw1X0NPVU5URVI2X1RZUEVfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfTUlCX0NUUkw1X0NPVU5URVI2X1RZUEVfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX01JQl9DVFJMNV9DT1VOVEVSNV9UWVBFX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX01JQl9DVFJMNV9DT1VOVEVSNV9UWVBFX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19NSUJfQ1RSTDVfQ09VTlRFUjRfVFlQRV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19NSUJfQ1RSTDVfQ09VTlRFUjRfVFlQRV9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUlCX0NUUkw1X0NPVU5URVIzX1RZUEVfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfTUlCX0NUUkw1X0NPVU5URVIzX1RZUEVfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfTUlCX0NUUkw1X0NPVU5URVIyX1RZUEVfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfTUlCX0NUUkw1X0NPVU5URVIyX1RZUEVfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfTUlCX0NUUkw1X0NPVU5URVIxX1RZUEVfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfTUlCX0NUUkw1X0NPVU5URVIxX1RZUEVfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfTUlCX0NUUkw1X0NPVU5URVIwX1RZUEVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUlCX0NUUkw1X0NPVU5URVIwX1RZUEVfTUFTSyAgICAweDEKKworLyogKDE2J2gxMTAwKWludHJwdF9yZWcgKi8KKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSU5UUl9DVFJMICAgIDB4MTEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0NUUkxfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUl9DVFJMX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lOVFJfSU1SICAgIDB4MTEwMQorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNUl9TTElFTlRfU1RBUlRfMl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUl9JTVJfU0xJRU5UX1NUQVJUXzJfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUl9JTVJfU0xJRU5UX1NUQVJUX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNUl9TTElFTlRfU1RBUlRfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNUl9BQ0xfQUNUSU9OX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1SX0FDTF9BQ1RJT05fTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNUl9DQUJMRV9ESUFHX0ZJTl9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNUl9DQUJMRV9ESUFHX0ZJTl9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1SX0lOVEVSUlVQVF84MDUxX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1SX0lOVEVSUlVQVF84MDUxX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNUl9MT09QX0RFVEVDVElPTl9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNUl9MT09QX0RFVEVDVElPTl9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUl9JTVJfR1JFRU5fVElNRVJfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUl9JTVJfR1JFRU5fVElNRVJfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1SX1NQRUNJQUxfQ09OR0VTVF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNUl9TUEVDSUFMX0NPTkdFU1RfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1SX1NQRUVEX0NIQU5HRV9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNUl9TUEVFRF9DSEFOR0VfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUl9JTVJfTEVBUk5fT1ZFUl9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNUl9MRUFSTl9PVkVSX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1SX01FVEVSX0VYQ0VFREVEX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1SX01FVEVSX0VYQ0VFREVEX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1SX0xJTktfQ0hBTkdFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1SX0xJTktfQ0hBTkdFX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lOVFJfSU1TICAgIDB4MTEwMgorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNU19TTElFTlRfU1RBUlRfMl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUl9JTVNfU0xJRU5UX1NUQVJUXzJfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUl9JTVNfU0xJRU5UX1NUQVJUX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNU19TTElFTlRfU1RBUlRfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNU19BQ0xfQUNUSU9OX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1TX0FDTF9BQ1RJT05fTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNU19DQUJMRV9ESUFHX0ZJTl9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNU19DQUJMRV9ESUFHX0ZJTl9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1TX0lOVEVSUlVQVF84MDUxX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1TX0lOVEVSUlVQVF84MDUxX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNU19MT09QX0RFVEVDVElPTl9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNU19MT09QX0RFVEVDVElPTl9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUl9JTVNfR1JFRU5fVElNRVJfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUl9JTVNfR1JFRU5fVElNRVJfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1TX1NQRUNJQUxfQ09OR0VTVF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNU19TUEVDSUFMX0NPTkdFU1RfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1TX1NQRUVEX0NIQU5HRV9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNU19TUEVFRF9DSEFOR0VfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUl9JTVNfTEVBUk5fT1ZFUl9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNU19MRUFSTl9PVkVSX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1TX01FVEVSX0VYQ0VFREVEX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1TX01FVEVSX0VYQ0VFREVEX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1TX0xJTktfQ0hBTkdFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1TX0xJTktfQ0hBTkdFX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0xFQVJOX09WRVJfSU5ESUNBVE9SICAgIDB4MTEwMworI2RlZmluZSAgICBSVEw4MzY3Q19MRUFSTl9PVkVSX0lORElDQVRPUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19MRUFSTl9PVkVSX0lORElDQVRPUl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NQRUVEX0NIQU5HRV9JTkRJQ0FUT1IgICAgMHgxMTA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NQRUVEX0NIQU5HRV9JTkRJQ0FUT1JfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1BFRURfQ0hBTkdFX0lORElDQVRPUl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NQRUNJQUxfQ09OR0VTVF9JTkRJQ0FUT1IgICAgMHgxMTA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1NQRUNJQUxfQ09OR0VTVF9JTkRJQ0FUT1JfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1BFQ0lBTF9DT05HRVNUX0lORElDQVRPUl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlRfTElOS0RPV05fSU5ESUNBVE9SICAgIDB4MTEwNgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX0xJTktET1dOX0lORElDQVRPUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX0xJTktET1dOX0lORElDQVRPUl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlRfTElOS1VQX0lORElDQVRPUiAgICAweDExMDcKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVF9MSU5LVVBfSU5ESUNBVE9SX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfTElOS1VQX0lORElDQVRPUl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NZU1RFTV9MRUFSTl9PVkVSX0lORElDQVRPUiAgICAweDExMDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1lTVEVNX0xFQVJOX09WRVJfSU5ESUNBVE9SX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NZU1RFTV9MRUFSTl9PVkVSX0lORElDQVRPUl9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JTlRSX0lNUl84MDUxICAgIDB4MTExOAorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNUl84MDUxX1NMSUVOVF9TVEFSVF8yX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNUl84MDUxX1NMSUVOVF9TVEFSVF8yX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1SXzgwNTFfU0xJRU5UX1NUQVJUX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNUl84MDUxX1NMSUVOVF9TVEFSVF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNUl84MDUxX0FDTF9BQ1RJT05fT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1SXzgwNTFfQUNMX0FDVElPTl9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1SXzgwNTFfU0FNT1ZJTkdfODA1MV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNUl84MDUxX1NBTU9WSU5HXzgwNTFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNUl84MDUxX0NBQkxFX0RJQUdfRklOXzgwNTFfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUl9JTVJfODA1MV9DQUJMRV9ESUFHX0ZJTl84MDUxX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUl9JTVJfODA1MV9FRUVMTERQXzgwNTFfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUl9JTVJfODA1MV9FRUVMTERQXzgwNTFfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1SXzgwNTFfTE9PUF9ERVRFQ1RJT05fODA1MV9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNUl84MDUxX0xPT1BfREVURUNUSU9OXzgwNTFfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1SXzgwNTFfR1JFRU5fVElNRVJfODA1MV9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNUl84MDUxX0dSRUVOX1RJTUVSXzgwNTFfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1SXzgwNTFfU1BFQ0lBTF9DT05HRVNUXzgwNTFfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUl9JTVJfODA1MV9TUEVDSUFMX0NPTkdFU1RfODA1MV9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUl9JTVJfODA1MV9TUEVFRF9DSEFOR0VfODA1MV9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNUl84MDUxX1NQRUVEX0NIQU5HRV84MDUxX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1SXzgwNTFfTEVBUk5fT1ZFUl84MDUxX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1SXzgwNTFfTEVBUk5fT1ZFUl84MDUxX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1SXzgwNTFfTUVURVJfRVhDRUVERURfODA1MV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNUl84MDUxX01FVEVSX0VYQ0VFREVEXzgwNTFfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUl9JTVJfODA1MV9MSU5LX0NIQU5HRV84MDUxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1SXzgwNTFfTElOS19DSEFOR0VfODA1MV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JTlRSX0lNU184MDUxICAgIDB4MTExOQorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNU184MDUxX1NMSUVOVF9TVEFSVF8yX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNU184MDUxX1NMSUVOVF9TVEFSVF8yX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1TXzgwNTFfU0xJRU5UX1NUQVJUX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNU184MDUxX1NMSUVOVF9TVEFSVF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNU184MDUxX0FDTF9BQ1RJT05fT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1TXzgwNTFfQUNMX0FDVElPTl9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1TXzgwNTFfU0FNT1ZJTkdfODA1MV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNU184MDUxX1NBTU9WSU5HXzgwNTFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNU184MDUxX0NBQkxFX0RJQUdfRklOXzgwNTFfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUl9JTVNfODA1MV9DQUJMRV9ESUFHX0ZJTl84MDUxX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUl9JTVNfODA1MV9FRUVMTERQXzgwNTFfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUl9JTVNfODA1MV9FRUVMTERQXzgwNTFfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1TXzgwNTFfTE9PUF9ERVRFQ1RJT05fODA1MV9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNU184MDUxX0xPT1BfREVURUNUSU9OXzgwNTFfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1TXzgwNTFfR1JFRU5fVElNRVJfODA1MV9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNU184MDUxX0dSRUVOX1RJTUVSXzgwNTFfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1TXzgwNTFfU1BFQ0lBTF9DT05HRVNUXzgwNTFfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUl9JTVNfODA1MV9TUEVDSUFMX0NPTkdFU1RfODA1MV9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUl9JTVNfODA1MV9TUEVFRF9DSEFOR0VfODA1MV9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNU184MDUxX1NQRUVEX0NIQU5HRV84MDUxX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1TXzgwNTFfTEVBUk5fT1ZFUl84MDUxX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1TXzgwNTFfTEVBUk5fT1ZFUl84MDUxX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1TXzgwNTFfTUVURVJfRVhDRUVERURfODA1MV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNU184MDUxX01FVEVSX0VYQ0VFREVEXzgwNTFfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUl9JTVNfODA1MV9MSU5LX0NIQU5HRV84MDUxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1TXzgwNTFfTElOS19DSEFOR0VfODA1MV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19EVzgwNTFfSU5UX0NQVSAgICAweDExMWEKKyNkZWZpbmUgICAgUlRMODM2N0NfRFc4MDUxX0lOVF9DUFVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFc4MDUxX0lOVF9DUFVfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTEVBUk5fT1ZFUl9JTkRJQ0FUT1JfODA1MSAgICAweDExMjAKKyNkZWZpbmUgICAgUlRMODM2N0NfTEVBUk5fT1ZFUl9JTkRJQ0FUT1JfODA1MV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19MRUFSTl9PVkVSX0lORElDQVRPUl84MDUxX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1BFRURfQ0hBTkdFX0lORElDQVRPUl84MDUxICAgIDB4MTEyMQorI2RlZmluZSAgICBSVEw4MzY3Q19TUEVFRF9DSEFOR0VfSU5ESUNBVE9SXzgwNTFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1BFRURfQ0hBTkdFX0lORElDQVRPUl84MDUxX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1BFQ0lBTF9DT05HRVNUX0lORElDQVRPUl84MDUxICAgIDB4MTEyMgorI2RlZmluZSAgICBSVEw4MzY3Q19TUEVDSUFMX0NPTkdFU1RfSU5ESUNBVE9SXzgwNTFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1BFQ0lBTF9DT05HRVNUX0lORElDQVRPUl84MDUxX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVF9MSU5LRE9XTl9JTkRJQ0FUT1JfODA1MSAgICAweDExMjMKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVF9MSU5LRE9XTl9JTkRJQ0FUT1JfODA1MV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUX0xJTktET1dOX0lORElDQVRPUl84MDUxX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVF9MSU5LVVBfSU5ESUNBVE9SXzgwNTEgICAgMHgxMTI0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfTElOS1VQX0lORElDQVRPUl84MDUxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlRfTElOS1VQX0lORElDQVRPUl84MDUxX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRFVNTVlfMTEyNSAgICAweDExMjUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRFVNTVlfMTEyNiAgICAweDExMjYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRFVNTVlfMTEyNyAgICAweDExMjcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRFVNTVlfMTEyOCAgICAweDExMjgKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRFVNTVlfMTEyOSAgICAweDExMjkKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSU5UUl9JTVNfQlVGRkVSX1JFU0VUICAgIDB4MTEyYQorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRSX0lNU19CVUZGRVJfUkVTRVRfSU1SX0JVRkZfUkVTRVRfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUl9JTVNfQlVGRkVSX1JFU0VUX0lNUl9CVUZGX1JFU0VUX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1TX0JVRkZFUl9SRVNFVF9CVUZGRVJfUkVTRVRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUl9JTVNfQlVGRkVSX1JFU0VUX0JVRkZFUl9SRVNFVF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JTlRSX0lNU184MDUxX0JVRkZFUl9SRVNFVCAgICAweDExMmIKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUl9JTVNfODA1MV9CVUZGRVJfUkVTRVRfSU1SX0JVRkZfUkVTRVRfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUl9JTVNfODA1MV9CVUZGRVJfUkVTRVRfSU1SX0JVRkZfUkVTRVRfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUl9JTVNfODA1MV9CVUZGRVJfUkVTRVRfQlVGRkVSX1JFU0VUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFJfSU1TXzgwNTFfQlVGRkVSX1JFU0VUX0JVRkZFUl9SRVNFVF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19HUEhZX0lOVFJQVF84MDUxICAgIDB4MTEyYworI2RlZmluZSAgICBSVEw4MzY3Q19JTVNfR1BIWV84MDUxX0hfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX0lNU19HUEhZXzgwNTFfSF9NQVNLICAgIDB4RTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JTVJfR1BIWV84MDUxX0hfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lNUl9HUEhZXzgwNTFfSF9NQVNLICAgIDB4MUMwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JTVNfR1BIWV84MDUxX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0lNU19HUEhZXzgwNTFfTUFTSyAgICAweDNFMAorI2RlZmluZSAgICBSVEw4MzY3Q19JTVJfR1BIWV84MDUxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lNUl9HUEhZXzgwNTFfTUFTSyAgICAweDFGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0dQSFlfSU5UUlBUICAgIDB4MTEyZAorI2RlZmluZSAgICBSVEw4MzY3Q19JTVNfR1BIWV9IX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19JTVNfR1BIWV9IX01BU0sgICAgMHhFMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lNUl9HUEhZX0hfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lNUl9HUEhZX0hfTUFTSyAgICAweDFDMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1TX0dQSFlfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1TX0dQSFlfTUFTSyAgICAweDNFMAorI2RlZmluZSAgICBSVEw4MzY3Q19JTVJfR1BIWV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JTVJfR1BIWV9NQVNLICAgIDB4MUYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVEhFUk1BTF9JTlRSUFQgICAgMHgxMTJlCisjZGVmaW5lICAgIFJUTDgzNjdDX0lNU19UTV9ISUdIX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0lNU19UTV9ISUdIX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX0lNUl9UTV9ISUdIX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0lNUl9UTV9ISUdIX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX0lNU19UTV9MT1dfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1TX1RNX0xPV19NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19JTVJfVE1fTE9XX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lNUl9UTV9MT1dfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVEhFUk1BTF9JTlRSUFRfODA1MSAgICAweDExMmYKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1TX1RNX0hJR0hfODA1MV9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19JTVNfVE1fSElHSF84MDUxX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX0lNUl9UTV9ISUdIXzgwNTFfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1SX1RNX0hJR0hfODA1MV9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19JTVNfVE1fTE9XXzgwNTFfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1TX1RNX0xPV184MDUxX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0lNUl9UTV9MT1dfODA1MV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JTVJfVE1fTE9XXzgwNTFfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0RTX0xJTktfQ0hHX0lOVCAgICAweDExMzAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1TX1NEU19MSU5LX1NUU19DN19PRkZTRVQgICAgMTUKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1TX1NEU19MSU5LX1NUU19DN19NQVNLICAgIDB4ODAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JTVNfU0RTX0xJTktfU1RTX0M2X09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19JTVNfU0RTX0xJTktfU1RTX0M2X01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lNU19TRFNfTElOS19TVFNfQzVfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX0lNU19TRFNfTElOS19TVFNfQzVfTUFTSyAgICAweDIwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1TX1NEU19MSU5LX1NUU19DNF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1TX1NEU19MSU5LX1NUU19DNF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JTVNfU0RTX0xJTktfU1RTX0MzX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19JTVNfU0RTX0xJTktfU1RTX0MzX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1TX1NEU19MSU5LX1NUU19DMl9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1TX1NEU19MSU5LX1NUU19DMl9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lNU19TRFNfTElOS19TVFNfQzFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1TX1NEU19MSU5LX1NUU19DMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lNU19TRFNfTElOS19TVFNfQzBfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1TX1NEU19MSU5LX1NUU19DMF9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lNUl9TRFNfTElOS19TVFNfQzdfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1SX1NEU19MSU5LX1NUU19DN19NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1SX1NEU19MSU5LX1NUU19DNl9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19JTVJfU0RTX0xJTktfU1RTX0M2X01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19JTVJfU0RTX0xJTktfU1RTX0M1X09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0lNUl9TRFNfTElOS19TVFNfQzVfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lNUl9TRFNfTElOS19TVFNfQzRfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1SX1NEU19MSU5LX1NUU19DNF9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1SX1NEU19MSU5LX1NUU19DM19PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19JTVJfU0RTX0xJTktfU1RTX0MzX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX0lNUl9TRFNfTElOS19TVFNfQzJfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1SX1NEU19MSU5LX1NUU19DMl9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19JTVJfU0RTX0xJTktfU1RTX0MxX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0lNUl9TRFNfTElOS19TVFNfQzFfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1SX1NEU19MSU5LX1NUU19DMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JTVJfU0RTX0xJTktfU1RTX0MwX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NEU19MSU5LX0NIR19JTlRfODA1MSAgICAweDExMzEKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1TX1NEU19MSU5LX1NUU19DN184MDUxX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19JTVNfU0RTX0xJTktfU1RTX0M3XzgwNTFfTUFTSyAgICAweDgwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1TX1NEU19MSU5LX1NUU19DNl84MDUxX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19JTVNfU0RTX0xJTktfU1RTX0M2XzgwNTFfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1TX1NEU19MSU5LX1NUU19DNV84MDUxX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19JTVNfU0RTX0xJTktfU1RTX0M1XzgwNTFfTUFTSyAgICAweDIwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1TX1NEU19MSU5LX1NUU19DNF84MDUxX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19JTVNfU0RTX0xJTktfU1RTX0M0XzgwNTFfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1TX1NEU19MSU5LX1NUU19DM184MDUxX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19JTVNfU0RTX0xJTktfU1RTX0MzXzgwNTFfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JTVNfU0RTX0xJTktfU1RTX0MyXzgwNTFfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lNU19TRFNfTElOS19TVFNfQzJfODA1MV9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lNU19TRFNfTElOS19TVFNfQzFfODA1MV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19JTVNfU0RTX0xJTktfU1RTX0MxXzgwNTFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JTVNfU0RTX0xJTktfU1RTX0MwXzgwNTFfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1TX1NEU19MSU5LX1NUU19DMF84MDUxX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1SX1NEU19MSU5LX1NUU19DN184MDUxX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX0lNUl9TRFNfTElOS19TVFNfQzdfODA1MV9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1SX1NEU19MSU5LX1NUU19DNl84MDUxX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX0lNUl9TRFNfTElOS19TVFNfQzZfODA1MV9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1SX1NEU19MSU5LX1NUU19DNV84MDUxX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0lNUl9TRFNfTElOS19TVFNfQzVfODA1MV9NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1SX1NEU19MSU5LX1NUU19DNF84MDUxX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0lNUl9TRFNfTElOS19TVFNfQzRfODA1MV9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1SX1NEU19MSU5LX1NUU19DM184MDUxX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0lNUl9TRFNfTElOS19TVFNfQzNfODA1MV9NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19JTVJfU0RTX0xJTktfU1RTX0MyXzgwNTFfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1SX1NEU19MSU5LX1NUU19DMl84MDUxX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX0lNUl9TRFNfTElOS19TVFNfQzFfODA1MV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19JTVJfU0RTX0xJTktfU1RTX0MxXzgwNTFfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1SX1NEU19MSU5LX1NUU19DMF84MDUxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lNUl9TRFNfTElOS19TVFNfQzBfODA1MV9NQVNLICAgIDB4MQorCisvKiAoMTYnaDEyMDApc3djb3JlX3JlZyAqLworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NQVhfTEVOR1RIX0xJTUlOVF9JUEcgICAgMHgxMjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01BWF9MRU5USF9DVFJMX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19NQVhfTEVOVEhfQ1RSTF9NQVNLICAgIDB4NjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QQUdFU19CRUZPUkVfRkNEUk9QX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1BBR0VTX0JFRk9SRV9GQ0RST1BfTUFTSyAgICAweDFGQzAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0hFQ0tfTUlOX0lQR19SWERWX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0NIRUNLX01JTl9JUEdfUlhEVl9NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfTElNSVRfSVBHX0NGR19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19MSU1JVF9JUEdfQ0ZHX01BU0sgICAgMHgxRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JT0xfUlhEUk9QX0NGRyAgICAweDEyMDEKKyNkZWZpbmUgICAgUlRMODM2N0NfUlhfSU9MX01BWF9MRU5HVEhfQ0ZHX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19SWF9JT0xfTUFYX0xFTkdUSF9DRkdfTUFTSyAgICAweDIwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUlhfSU9MX0VSUk9SX0xFTkdUSF9DRkdfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1JYX0lPTF9FUlJPUl9MRU5HVEhfQ0ZHX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JYX05PRFJPUF9QQVVTRV9DRkdfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUlhfTk9EUk9QX1BBVVNFX0NGR19NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JYX0RWX0NOVF9DRkdfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUlhfRFZfQ05UX0NGR19NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVlNfVFBJRCAgICAweDEyMDIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSU5CV19CT1VORCAgICAweDEyMDMKKyNkZWZpbmUgICAgUlRMODM2N0NfTEJPVU5EX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0xCT1VORF9NQVNLICAgIDB4RjAKKyNkZWZpbmUgICAgUlRMODM2N0NfSEJPVU5EX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0hCT1VORF9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19DRkdfVFhfSVRGU1BfT1AgICAgMHgxMjA0CisjZGVmaW5lICAgIFJUTDgzNjdDX01BU0tfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfTUFTS19NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19PUF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19PUF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JTkJXX0JPVU5EMiAgICAweDEyMDUKKyNkZWZpbmUgICAgUlRMODM2N0NfTEJPVU5EMl9IX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX0xCT1VORDJfSF9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0hCT1VORDJfSF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19IQk9VTkQyX0hfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19MQk9VTkQyX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0xCT1VORDJfTUFTSyAgICAweEYwCisjZGVmaW5lICAgIFJUTDgzNjdDX0hCT1VORDJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSEJPVU5EMl9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19DRkdfNDhQQVNTMV9EUk9QICAgIDB4MTIwNgorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfNDhQQVNTMV9EUk9QX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR180OFBBU1MxX0RST1BfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQ0ZHX0JBQ0tQUkVTU1VSRSAgICAweDEyMDcKKyNkZWZpbmUgICAgUlRMODM2N0NfTE9OR1RYRV9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfTE9OR1RYRV9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9CWVBBU1NfRVJST1JfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fQllQQVNTX0VSUk9SX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fQkFDS1BSRVNTVVJFX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0VOX0JBQ0tQUkVTU1VSRV9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fNDhfUEFTU18xX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VOXzQ4X1BBU1NfMV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19DRkdfVU5ISU9MICAgIDB4MTIwOAorI2RlZmluZSAgICBSVEw4MzY3Q19JT0xfQkFDS09GRl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfSU9MX0JBQ0tPRkZfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQkFDS09GRl9SQU5ET01fVElNRV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19CQUNLT0ZGX1JBTkRPTV9USU1FX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRElTQUJMRV9CQUNLX09GRl9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19ESVNBQkxFX0JBQ0tfT0ZGX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19JUEdfQ09NUEVOU0FUSU9OX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lQR19DT01QRU5TQVRJT05fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1dJVENIX01BQzAgICAgMHgxMjA5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NXSVRDSF9NQUMxICAgIDB4MTIwYQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TV0lUQ0hfTUFDMiAgICAweDEyMGIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1dJVENIX0NUUkwwICAgIDB4MTIwYworI2RlZmluZSAgICBSVEw4MzY3Q19SRU1BUktJTkdfRFNDUF9FTkFCTEVfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVNQVJLSU5HX0RTQ1BfRU5BQkxFX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0hPUlRfSVBHX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NIT1JUX0lQR19NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEFVU0VfTUFYMTI4X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BBVVNFX01BWDEyOF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfRFNDUF9SRU1BUktfQ1RSTDAgICAgMHgxMjBkCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFBSSTFfRFNDUF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRQUkkxX0RTQ1BfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUFJJMF9EU0NQX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFBSSTBfRFNDUF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUU9TX0RTQ1BfUkVNQVJLX0NUUkwxICAgIDB4MTIwZQorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRQUkkzX0RTQ1BfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUFJJM19EU0NQX01BU0sgICAgMHgzRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFBSSTJfRFNDUF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRQUkkyX0RTQ1BfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU19EU0NQX1JFTUFSS19DVFJMMiAgICAweDEyMGYKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUFJJNV9EU0NQX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFBSSTVfRFNDUF9NQVNLICAgIDB4M0YwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRQUkk0X0RTQ1BfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUFJJNF9EU0NQX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19RT1NfRFNDUF9SRU1BUktfQ1RSTDMgICAgMHgxMjEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFBSSTdfRFNDUF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRQUkk3X0RTQ1BfTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUFJJNl9EU0NQX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFBSSTZfRFNDUF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUU9TXzFRX1JFTUFSS19DVFJMMCAgICAweDEyMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUFJJM19QUklfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFBSSTNfUFJJX01BU0sgICAgMHg3MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFBSSTJfUFJJX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFBSSTJfUFJJX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUFJJMV9QUklfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUFJJMV9QUklfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFBSSTBfUFJJX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFBSSTBfUFJJX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1FPU18xUV9SRU1BUktfQ1RSTDEgICAgMHgxMjEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFBSSTdfUFJJX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRQUkk3X1BSSV9NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRQUkk2X1BSSV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRQUkk2X1BSSV9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFBSSTVfUFJJX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFBSSTVfUFJJX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRQUkk0X1BSSV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRQUkk0X1BSSV9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QS1RHRU5fQ09NTUFORCAgICAweDEyMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1NUT1BfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1NUT1BfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fU1RBUlRfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUR0VOX1NUQVJUX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RHRU5fQllQQVNTX0ZMT1dDT05UUk9MX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BLVEdFTl9CWVBBU1NfRkxPV0NPTlRST0xfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1dfRFVNTVkwICAgIDB4MTIxNAorI2RlZmluZSAgICBSVEw4MzY3Q19TV19EVU1NWTBfRFVNTVlfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1dfRFVNTVkwX0RVTU1ZX01BU0sgICAgMHhGRkYwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRV9ERUZFUl9UWExQSV9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19FRUVfREVGRVJfVFhMUElfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5HUkVTU0JXX0JZUEFTU19FTl9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19JTkdSRVNTQldfQllQQVNTX0VOX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19SWF9NSU5fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1JYX01JTl9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TV19EVU1NWTEgICAgMHgxMjE1CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BLVEdFTl9QQVVTRV9USU1FICAgIDB4MTIxNgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVkxBTl9VUExJTktfUE9SVE1BU0sgICAgMHgxMjE4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NWTEFOX1VQTElOS19QT1JUTUFTS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVkxBTl9VUExJTktfUE9SVE1BU0tfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19DUFVfUE9SVF9NQVNLICAgIDB4MTIxOQorI2RlZmluZSAgICBSVEw4MzY3Q19DUFVfUE9SVF9NQVNLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NQVV9QT1JUX01BU0tfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19DUFVfQ1RSTCAgICAweDEyMWEKKyNkZWZpbmUgICAgUlRMODM2N0NfQ1BVX1RSQVBfUE9SVF9FWFRfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NQVV9UUkFQX1BPUlRfRVhUX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ1BVX1RBR19GT1JNQVRfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfQ1BVX1RBR19GT1JNQVRfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JT0xfMTZEUk9QX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0lPTF8xNkRST1BfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19DUFVfVEFHX1JYQllURUNPVU5UX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX0NQVV9UQUdfUlhCWVRFQ09VTlRfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NQVV9UQUdfUE9TSVRJT05fT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfQ1BVX1RBR19QT1NJVElPTl9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ1BVX1RSQVBfUE9SVF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19DUFVfVFJBUF9QT1JUX01BU0sgICAgMHgzOAorI2RlZmluZSAgICBSVEw4MzY3Q19DUFVfSU5TRVJUTU9ERV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19DUFVfSU5TRVJUTU9ERV9NQVNLICAgIDB4NgorI2RlZmluZSAgICBSVEw4MzY3Q19DUFVfRU5fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ1BVX0VOX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01JUlJPUl9DVFJMICAgIDB4MTIxYworI2RlZmluZSAgICBSVEw4MzY3Q19NSVJST1JfQ1RSTF9EVU1NWV9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfTUlSUk9SX0NUUkxfRFVNTVlfTUFTSyAgICAweEYwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUlSUk9SX0lTT19PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfTUlSUk9SX0lTT19NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01JUlJPUl9UWF9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUlSUk9SX1RYX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUlSUk9SX1JYX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX01JUlJPUl9SWF9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01JUlJPUl9NT05JVE9SX1BPUlRfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfTUlSUk9SX01PTklUT1JfUE9SVF9NQVNLICAgIDB4RjAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUlSUk9SX1NPVVJDRV9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01JUlJPUl9TT1VSQ0VfUE9SVF9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9DVFJMMCAgICAweDEyMWQKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfVFlQRV9PRkZTRVQgICAgMTUKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfVFlQRV9NQVNLICAgIDB4ODAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19EUk9QX0FMTF9USFJFU0hPTERfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfRFJPUF9BTExfVEhSRVNIT0xEX01BU0sgICAgMHg3RkUwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RST1BfQUxMX1RIUkVTSE9MRF9NU0JfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfRFJPUF9BTExfVEhSRVNIT0xEX01TQl9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfSVRGU1BfUkVHX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lURlNQX1JFR19NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9BTExfT04gICAgMHgxMjFlCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19STERQQUNUX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUkxEUEFDVF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9BTExfT05fVEhSRVNIT0xEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX0FMTF9PTl9USFJFU0hPTERfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9TWVNfT04gICAgMHgxMjFmCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1NZU19PTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9TWVNfT05fTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9TWVNfT0ZGICAgIDB4MTIyMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9TWVNfT0ZGX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1NZU19PRkZfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9TSEFSRV9PTiAgICAweDEyMjEKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfU0hBUkVfT05fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfU0hBUkVfT05fTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9TSEFSRV9PRkYgICAgMHgxMjIyCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1NIQVJFX09GRl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9TSEFSRV9PRkZfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9GQ09GRl9TWVNfT04gICAgMHgxMjIzCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX0ZDT0ZGX1NZU19PTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9GQ09GRl9TWVNfT05fTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9GQ09GRl9TWVNfT0ZGICAgIDB4MTIyNAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9GQ09GRl9TWVNfT0ZGX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX0ZDT0ZGX1NZU19PRkZfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9GQ09GRl9TSEFSRV9PTiAgICAweDEyMjUKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfRkNPRkZfU0hBUkVfT05fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfRkNPRkZfU0hBUkVfT05fTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9GQ09GRl9TSEFSRV9PRkYgICAgMHgxMjI2CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX0ZDT0ZGX1NIQVJFX09GRl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9GQ09GRl9TSEFSRV9PRkZfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9QT1JUX09OICAgIDB4MTIyNworI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9QT1JUX09OX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlRfT05fTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9QT1JUX09GRiAgICAweDEyMjgKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUE9SVF9PRkZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUE9SVF9PRkZfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9QT1JUX1BSSVZBVEVfT04gICAgMHgxMjI5CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlRfUFJJVkFURV9PTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9QT1JUX1BSSVZBVEVfT05fTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9QT1JUX1BSSVZBVEVfT0ZGICAgIDB4MTIyYQorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9QT1JUX1BSSVZBVEVfT0ZGX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlRfUFJJVkFURV9PRkZfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19SUkNQX0NUUkwwICAgIDB4MTIyYgorI2RlZmluZSAgICBSVEw4MzY3Q19DT0xfU0VMX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19DT0xfU0VMX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NSU19TRUxfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX0NSU19TRUxfTUFTSyAgICAweDIwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUlJDUF9QQlZMQU5fRU5fT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX1JSQ1BfUEJWTEFOX0VOX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUlJDUFYzX1NFQ1VSSVRZX0NSQ19PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUlJDUFYzX1NFQ1VSSVRZX0NSQ19NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JSQ1BWM19IQU5ETEVfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUlJDUFYzX0hBTkRMRV9NQVNLICAgIDB4MzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JSQ1BWMV9NQUxGT1JNRURfQUNUX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1JSQ1BWMV9NQUxGT1JNRURfQUNUX01BU0sgICAgMHg2MAorI2RlZmluZSAgICBSVEw4MzY3Q19SUkNQX1ZMQU5MRUFLWV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19SUkNQX1ZMQU5MRUFLWV9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUlJDUFYxX1NFQ1VSSVRZX0NSQ19HRVRfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfUlJDUFYxX1NFQ1VSSVRZX0NSQ19HRVRfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUlJDUFYxX1NFQ1VSSVRZX0NSQ19TRVRfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUlJDUFYxX1NFQ1VSSVRZX0NSQ19TRVRfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUlJDUFYxX0hBTkRMRV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19SUkNQVjFfSEFORExFX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX1JSQ1BfRU5BQkxFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JSQ1BfRU5BQkxFX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1JSQ1BfQ1RSTDEgICAgMHgxMjJjCisjZGVmaW5lICAgIFJUTDgzNjdDX1JSQ1BfQURNSU5fUE1TS19PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19SUkNQX0FETUlOX1BNU0tfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUlJDUF9BVVRIX1BNU0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUlJDUF9BVVRIX1BNU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1JSQ1BfQ1RSTDIgICAgMHgxMjJkCisjZGVmaW5lICAgIFJUTDgzNjdDX1JSQ1BWMV9IRUxMT0ZXRF9UQUdfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfUlJDUFYxX0hFTExPRldEX1RBR19NQVNLICAgIDB4NjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JSQ1BfRldEX1RBR19PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19SUkNQX0ZXRF9UQUdfTUFTSyAgICAweDE4MAorI2RlZmluZSAgICBSVEw4MzY3Q19SUkNQVjFfUkVQTFlfVEFHX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1JSQ1BWMV9SRVBMWV9UQUdfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JSQ1BWMV9IRUxMT19DT1VOVF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19SUkNQVjFfSEVMTE9fQ09VTlRfTUFTSyAgICAweDM4CisjZGVmaW5lICAgIFJUTDgzNjdDX1JSQ1BWMV9IRUxMT19QRURJT0RfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUlJDUFYxX0hFTExPX1BFRElPRF9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19SUkNQX0NUUkwzICAgIDB4MTIyZQorI2RlZmluZSAgICBSVEw4MzY3Q19SUkNQX1RBR19QUklPUklUWV9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfUlJDUF9UQUdfUFJJT1JJVFlfTUFTSyAgICAweEUwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUlJDUF9UQUdfVklEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JSQ1BfVEFHX1ZJRF9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX0ZDT0ZGX1BPUlRfT04gICAgMHgxMjJmCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX0ZDT0ZGX1BPUlRfT05fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfRkNPRkZfUE9SVF9PTl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX0ZDT0ZGX1BPUlRfT0ZGICAgIDB4MTIzMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9GQ09GRl9QT1JUX09GRl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9GQ09GRl9QT1JUX09GRl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX0ZDT0ZGX1BPUlRfUFJJVkFURV9PTiAgICAweDEyMzEKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfRkNPRkZfUE9SVF9QUklWQVRFX09OX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX0ZDT0ZGX1BPUlRfUFJJVkFURV9PTl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX0ZDT0ZGX1BPUlRfUFJJVkFURV9PRkYgICAgMHgxMjMyCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX0ZDT0ZGX1BPUlRfUFJJVkFURV9PRkZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfRkNPRkZfUE9SVF9QUklWQVRFX09GRl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX0pVTUJPX1NZU19PTiAgICAweDEyMzMKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfSlVNQk9fU1lTX09OX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX0pVTUJPX1NZU19PTl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX0pVTUJPX1NZU19PRkYgICAgMHgxMjM0CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX0pVTUJPX1NZU19PRkZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfSlVNQk9fU1lTX09GRl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX0pVTUJPX1NIQVJFX09OICAgIDB4MTIzNQorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9KVU1CT19TSEFSRV9PTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9KVU1CT19TSEFSRV9PTl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX0pVTUJPX1NIQVJFX09GRiAgICAweDEyMzYKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfSlVNQk9fU0hBUkVfT0ZGX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX0pVTUJPX1NIQVJFX09GRl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX0pVTUJPX1BPUlRfT04gICAgMHgxMjM3CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX0pVTUJPX1BPUlRfT05fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfSlVNQk9fUE9SVF9PTl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX0pVTUJPX1BPUlRfT0ZGICAgIDB4MTIzOAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9KVU1CT19QT1JUX09GRl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9KVU1CT19QT1JUX09GRl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX0pVTUJPX1BPUlRfUFJJVkFURV9PTiAgICAweDEyMzkKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfSlVNQk9fUE9SVF9QUklWQVRFX09OX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX0pVTUJPX1BPUlRfUFJJVkFURV9PTl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX0pVTUJPX1BPUlRfUFJJVkFURV9PRkYgICAgMHgxMjNhCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX0pVTUJPX1BPUlRfUFJJVkFURV9PRkZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfSlVNQk9fUE9SVF9QUklWQVRFX09GRl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX0pVTUJPX1NJWkUgICAgMHgxMjNiCisjZGVmaW5lICAgIFJUTDgzNjdDX0pVTUJPX01PREVfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfSlVNQk9fTU9ERV9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19KVU1CT19TSVpFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0pVTUJPX1NJWkVfTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkxPV0NUUkxfVE9UQUxfUEFHRV9DT1VOVEVSICAgIDB4MTI0YworI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9UT1RBTF9QQUdFX0NPVU5URVJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfVE9UQUxfUEFHRV9DT1VOVEVSX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkxPV0NUUkxfUFVCTElDX1BBR0VfQ09VTlRFUiAgICAweDEyNGQKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUFVCTElDX1BBR0VfQ09VTlRFUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9QVUJMSUNfUEFHRV9DT1VOVEVSX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkxPV0NUUkxfVE9UQUxfUEFHRV9NQVggICAgMHgxMjRlCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1RPVEFMX1BBR0VfTUFYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1RPVEFMX1BBR0VfTUFYX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkxPV0NUUkxfUFVCTElDX1BBR0VfTUFYICAgIDB4MTI0ZgorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9QVUJMSUNfUEFHRV9NQVhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUFVCTElDX1BBR0VfTUFYX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkxPV0NUUkxfUE9SVDBfUEFHRV9DT1VOVEVSICAgIDB4MTI1MAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9QT1JUMF9QQUdFX0NPVU5URVJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUE9SVDBfUEFHRV9DT1VOVEVSX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkxPV0NUUkxfUE9SVDFfUEFHRV9DT1VOVEVSICAgIDB4MTI1MQorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9QT1JUMV9QQUdFX0NPVU5URVJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUE9SVDFfUEFHRV9DT1VOVEVSX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkxPV0NUUkxfUE9SVDJfUEFHRV9DT1VOVEVSICAgIDB4MTI1MgorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9QT1JUMl9QQUdFX0NPVU5URVJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUE9SVDJfUEFHRV9DT1VOVEVSX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkxPV0NUUkxfUE9SVDNfUEFHRV9DT1VOVEVSICAgIDB4MTI1MworI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9QT1JUM19QQUdFX0NPVU5URVJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUE9SVDNfUEFHRV9DT1VOVEVSX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkxPV0NUUkxfUE9SVDRfUEFHRV9DT1VOVEVSICAgIDB4MTI1NAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9QT1JUNF9QQUdFX0NPVU5URVJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUE9SVDRfUEFHRV9DT1VOVEVSX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkxPV0NUUkxfUE9SVDVfUEFHRV9DT1VOVEVSICAgIDB4MTI1NQorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9QT1JUNV9QQUdFX0NPVU5URVJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUE9SVDVfUEFHRV9DT1VOVEVSX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkxPV0NUUkxfUE9SVDZfUEFHRV9DT1VOVEVSICAgIDB4MTI1NgorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9QT1JUNl9QQUdFX0NPVU5URVJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUE9SVDZfUEFHRV9DT1VOVEVSX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkxPV0NUUkxfUE9SVDdfUEFHRV9DT1VOVEVSICAgIDB4MTI1NworI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9QT1JUN19QQUdFX0NPVU5URVJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUE9SVDdfUEFHRV9DT1VOVEVSX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkxPV0NUUkxfUFVCTElDX0ZDT0ZGX1BBR0VfQ09VTlRFUiAgICAweDEyNTgKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUFVCTElDX0ZDT0ZGX1BBR0VfQ09VTlRFUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9QVUJMSUNfRkNPRkZfUEFHRV9DT1VOVEVSX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkxPV0NUUkxfUFVCTElDX0pVTUJPX1BBR0VfQ09VTlRFUiAgICAweDEyNTkKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUFVCTElDX0pVTUJPX1BBR0VfQ09VTlRFUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9QVUJMSUNfSlVNQk9fUEFHRV9DT1VOVEVSX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkxPV0NUUkxfTUFYX1BVQkxJQ19GQ09GRl9QQUdFX0NPVU5URVIgICAgMHgxMjVhCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX01BWF9QVUJMSUNfRkNPRkZfUEFHRV9DT1VOVEVSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX01BWF9QVUJMSUNfRkNPRkZfUEFHRV9DT1VOVEVSX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkxPV0NUUkxfTUFYX1BVQkxJQ19KVU1CT19QQUdFX0NPVU5URVIgICAgMHgxMjViCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX01BWF9QVUJMSUNfSlVNQk9fUEFHRV9DT1VOVEVSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX01BWF9QVUJMSUNfSlVNQk9fUEFHRV9DT1VOVEVSX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkxPV0NUUkxfUE9SVDBfUEFHRV9NQVggICAgMHgxMjYwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlQwX1BBR0VfTUFYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlQwX1BBR0VfTUFYX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkxPV0NUUkxfUE9SVDFfUEFHRV9NQVggICAgMHgxMjYxCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlQxX1BBR0VfTUFYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlQxX1BBR0VfTUFYX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkxPV0NUUkxfUE9SVDJfUEFHRV9NQVggICAgMHgxMjYyCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlQyX1BBR0VfTUFYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlQyX1BBR0VfTUFYX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkxPV0NUUkxfUE9SVDNfUEFHRV9NQVggICAgMHgxMjYzCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlQzX1BBR0VfTUFYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlQzX1BBR0VfTUFYX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkxPV0NUUkxfUE9SVDRfUEFHRV9NQVggICAgMHgxMjY0CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlQ0X1BBR0VfTUFYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlQ0X1BBR0VfTUFYX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkxPV0NUUkxfUE9SVDVfUEFHRV9NQVggICAgMHgxMjY1CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlQ1X1BBR0VfTUFYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlQ1X1BBR0VfTUFYX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkxPV0NUUkxfUE9SVDZfUEFHRV9NQVggICAgMHgxMjY2CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlQ2X1BBR0VfTUFYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlQ2X1BBR0VfTUFYX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkxPV0NUUkxfUE9SVDdfUEFHRV9NQVggICAgMHgxMjY3CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlQ3X1BBR0VfTUFYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlQ3X1BBR0VfTUFYX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkxPV0NUUkxfUEFHRV9DT1VOVF9DTEVBUiAgICAweDEyNjgKKyNkZWZpbmUgICAgUlRMODM2N0NfRElTX1NLSVBfRlBfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfRElTX1NLSVBfRlBfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUEFHRV9DT1VOVF9DTEVBUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QQUdFX0NPVU5UX0NMRUFSX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1BPUlQ4X1BBR0VfTUFYICAgIDB4MTI2OQorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9QT1JUOF9QQUdFX01BWF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9QT1JUOF9QQUdFX01BWF9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1BPUlQ5X1BBR0VfTUFYICAgIDB4MTI2YQorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9QT1JUOV9QQUdFX01BWF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GTE9XQ1RSTF9QT1JUOV9QQUdFX01BWF9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1BPUlQxMF9QQUdFX01BWCAgICAweDEyNmIKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUE9SVDEwX1BBR0VfTUFYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlQxMF9QQUdFX01BWF9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1BPUlQ4X1BBR0VfQ09VTlRFUiAgICAweDEyNmMKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUE9SVDhfUEFHRV9DT1VOVEVSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlQ4X1BBR0VfQ09VTlRFUl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1BPUlQ5X1BBR0VfQ09VTlRFUiAgICAweDEyNmQKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUE9SVDlfUEFHRV9DT1VOVEVSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlQ5X1BBR0VfQ09VTlRFUl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1BPUlQxMF9QQUdFX0NPVU5URVIgICAgMHgxMjZlCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlQxMF9QQUdFX0NPVU5URVJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxPV0NUUkxfUE9SVDEwX1BBR0VfQ09VTlRFUl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1JSQ1BfQ1RSTDFfSCAgICAweDEyNmYKKyNkZWZpbmUgICAgUlRMODM2N0NfUlJDUF9BRE1JTl9QTVNLX1AxMF84X09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1JSQ1BfQURNSU5fUE1TS19QMTBfOF9NQVNLICAgIDB4MzgKKyNkZWZpbmUgICAgUlRMODM2N0NfUlJDUF9BVVRIX1BNU0tfUDEwXzhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUlJDUF9BVVRIX1BNU0tfUDEwXzhfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRU1BX0NUUkwwICAgIDB4MTI3MAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfRFZTRV9WSUFST01fT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19EVlNFX1ZJQVJPTV9NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfRFZTRV9NSUJSQU1fT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19EVlNFX01JQlJBTV9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfRFZTRV9JUk9NX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfRFZTRV9JUk9NX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0RWU0VfRVJBTV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0RWU0VfRVJBTV9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19EVlNFX0lSQU1fT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0RWU0VfSVJBTV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19EVlNFX05JQ1JBTV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfRFZTRV9OSUNSQU1fTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfRFZTRV9DVkxBTlJBTV9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfRFZTRV9DVkxBTlJBTV9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0RWU0VfQUNUUkFNX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19EVlNFX0FDVFJBTV9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0RWU0VfSU5RUkFNX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19EVlNFX0lOUVJBTV9NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0RWU0VfSFNBUkFNX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19EVlNFX0hTQVJBTV9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0RWU0VfT1VUUVJBTV9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfRFZTRV9PVVRRUkFNX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19EVlNFX0hUUkFNX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19EVlNFX0hUUkFNX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19EVlNFX1BCUkFNX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19EVlNFX1BCUkFNX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19EVlNFX0wyUkFNX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19EVlNFX0wyUkFNX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VNQV9DVFJMMSAgICAweDEyNzEKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0RWU19PVVRRUkFNX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfRFZTX09VVFFSQU1fTUFTSyAgICAweEYwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0RWU19IVFJBTV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfRFZTX0hUUkFNX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0RWU19QQlJBTV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfRFZTX1BCUkFNX01BU0sgICAgMHhGMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfRFZTX0wyUkFNX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19EVlNfTDJSQU1fTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRU1BX0NUUkwyICAgIDB4MTI3MgorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfRFZTX0NWTEFOUkFNX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfRFZTX0NWTEFOUkFNX01BU0sgICAgMHhGMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19EVlNfQUNUUkFNX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19EVlNfQUNUUkFNX01BU0sgICAgMHhGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0RWU19JTlFSQU1fT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0RWU19JTlFSQU1fTUFTSyAgICAweEYwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19EVlNfSFNBUkFNX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19EVlNfSFNBUkFNX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VNQV9DVFJMMyAgICAweDEyNzMKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0RWU19JUk9NX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfRFZTX0lST01fTUFTSyAgICAweEYwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0RWU19FUkFNX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19EVlNfRVJBTV9NQVNLICAgIDB4RjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19EVlNfSVJBTV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfRFZTX0lSQU1fTUFTSyAgICAweEYwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19EVlNfTklDUkFNX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19EVlNfTklDUkFNX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VNQV9DVFJMNCAgICAweDEyNzQKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0RWU19WSUFST01fT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0RWU19WSUFST01fTUFTSyAgICAweEYwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19EVlNfTUlCUkFNX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19EVlNfTUlCUkFNX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RJQUdfTU9ERSAgICAweDEyNzUKKyNkZWZpbmUgICAgUlRMODM2N0NfRElBR19NT0RFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RJQUdfTU9ERV9NQVNLICAgIDB4MUYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQklTVF9NT0RFICAgIDB4MTI3NgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVFNfQklTVF9ET05FICAgIDB4MTI3NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVFNfQklTVF9STFQwICAgIDB4MTI3OAorI2RlZmluZSAgICBSVEw4MzY3Q19TVFNfQklTVF9STFQwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUU19CSVNUX1JMVDBfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1RTX0JJU1RfUkxUMSAgICAweDEyNzkKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1RTX0JJU1RfUkxUMiAgICAweDEyN2EKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1RTX0JJU1RfUkxUMyAgICAweDEyN2IKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RTX0JJU1RfUkxUM19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVFNfQklTVF9STFQzX01BU0sgICAgMHgzRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1RTX0JJU1RfUkxUNCAgICAweDEyN2MKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RTX0JJU1RfUkxUNF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVFNfQklTVF9STFQ0X01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1ZJQVJPTV9NSVNSICAgIDB4MTI3ZAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19EUkZfQklTVF9NT0RFICAgIDB4MTI4MAorI2RlZmluZSAgICBSVEw4MzY3Q19EUkZfVENBTURFTF9PRkZTRVQgICAgMTUKKyNkZWZpbmUgICAgUlRMODM2N0NfRFJGX1RDQU1ERUxfTUFTSyAgICAweDgwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0RSRl9CSVNUX01PREVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0RSRl9CSVNUX01PREVfTUFTSyAgICAweDdGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1RTX0RSRl9CSVNUICAgIDB4MTI4MQorI2RlZmluZSAgICBSVEw4MzY3Q19TVFNfRFJGX0JJU1RfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1RTX0RSRl9CSVNUX01BU0sgICAgMHg3RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NUU19EUkZfQklTVF9STFQwICAgIDB4MTI4MgorI2RlZmluZSAgICBSVEw4MzY3Q19TVFNfRFJGX0JJU1RfUkxUMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVFNfRFJGX0JJU1RfUkxUMF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TVFNfRFJGX0JJU1RfUkxUMSAgICAweDEyODMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1RTX0RSRl9CSVNUX1JMVDIgICAgMHgxMjg0CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NUU19EUkZfQklTVF9STFQzICAgIDB4MTI4NQorI2RlZmluZSAgICBSVEw4MzY3Q19TVFNfRFJGX0JJU1RfUkxUM19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVFNfRFJGX0JJU1RfUkxUM19NQVNLICAgIDB4M0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NUU19EUkZfQklTVF9STFQ0ICAgIDB4MTI4NgorI2RlZmluZSAgICBSVEw4MzY3Q19TVFNfRFJGX0JJU1RfUkxUNF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TVFNfRFJGX0JJU1RfUkxUNF9NQVNLICAgIDB4N0ZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19SQU1fRFJGX0NUUkwgICAgMHgxMjg5CisjZGVmaW5lICAgIFJUTDgzNjdDX1JBTV9EUkZfQ1RSTF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19SQU1fRFJGX0NUUkxfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUlCX1JNT05fTEVOX0NUUkwgICAgMHgxMjhhCisjZGVmaW5lICAgIFJUTDgzNjdDX1JYX0xFTkdUSF9DVFJMX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1JYX0xFTkdUSF9DVFJMX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX1RYX0xFTkdUSF9DVFJMX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1RYX0xFTkdUSF9DVFJMX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0NPTkQwX0JJU1JfT1VUMCAgICAweDEyOTAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQ09ORDBfQklTUl9PVVQxICAgIDB4MTI5MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19DT05EMF9CSVNSX09VVDIgICAgMHgxMjkyCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0NPTkQwX0JJU1JfT1VUMyAgICAweDEyOTMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQ09ORDBfQklTUl9PVVQ0ICAgIDB4MTI5NAorI2RlZmluZSAgICBSVEw4MzY3Q19DT05EMF9CSVNSX09VVDRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ09ORDBfQklTUl9PVVQ0X01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19DT05EMF9CSVNSX09VVDUgICAgMHgxMjk1CisjZGVmaW5lICAgIFJUTDgzNjdDX0NPTkQwX0JJU1JfT1VUNV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19DT05EMF9CSVNSX09VVDVfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQ0hHX0RVUExFWF9DRkcgICAgMHgxMjk2CisjZGVmaW5lICAgIFJUTDgzNjdDX0NIR19DT0xfQ05UX1BPUlRfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX0NIR19DT0xfQ05UX1BPUlRfTUFTSyAgICAweEUwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0hHX0NPTF9DTlRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0hHX0NPTF9DTlRfTUFTSyAgICAweDFGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0NIR19EVVBfRU5fT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0NIR19EVVBfRU5fTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19DSEdfRFVQX1RIUl9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfQ0hHX0RVUF9USFJfTUFTSyAgICAweDdDCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19DSEdfRFVQX0NPTkdFU1RfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0NIR19EVVBfQ09OR0VTVF9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfQ0hHX0RVUF9SRUZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0NIR19EVVBfUkVGX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0NPTkQwX0JJU1RfUEFTUyAgICAweDEyOTcKKyNkZWZpbmUgICAgUlRMODM2N0NfQ09ORDBfRFJGX0JJU1RfTk9GQUlMX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0NPTkQwX0RSRl9CSVNUX05PRkFJTF9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19DT05EMF9CSVNUX05PRkFJTF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19DT05EMF9CSVNUX05PRkFJTF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19DT05EMV9CSVNSX09VVDAgICAgMHgxMjk4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0NPTkQxX0JJU1JfT1VUMSAgICAweDEyOTkKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQ09ORDFfQklTUl9PVVQyICAgIDB4MTI5YQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19DT05EMV9CSVNSX09VVDMgICAgMHgxMjliCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0NPTkQxX0JJU1JfT1VUNCAgICAweDEyOWMKKyNkZWZpbmUgICAgUlRMODM2N0NfQ09ORDFfQklTUl9PVVQ0X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NPTkQxX0JJU1JfT1VUNF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQ09ORDFfQklTUl9PVVQ1ICAgIDB4MTI5ZAorI2RlZmluZSAgICBSVEw4MzY3Q19DT05EMV9CSVNSX09VVDVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ09ORDFfQklTUl9PVVQ1X01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0NPTkQxX0JJU1RfUEFTUyAgICAweDEyOWYKKyNkZWZpbmUgICAgUlRMODM2N0NfQ09ORDFfRFJGX0JJU1RfTk9GQUlMX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0NPTkQxX0RSRl9CSVNUX05PRkFJTF9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19DT05EMV9CSVNUX05PRkFJTF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19DT05EMV9CSVNUX05PRkFJTF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVfVFhfVEhSX0dpZ2FfNTAwTSAgICAweDEyYTAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFX1RYX1RIUl9GRSAgICAweDEyYTEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFX01JU0MgICAgMHgxMmEzCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRV9SRVFfU0VUMV9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFX1JFUV9TRVQxX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRV9SRVFfU0VUMF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFX1JFUV9TRVQwX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRV9XQUtFX1NFVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFX1dBS0VfU0VUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRV9XYWtlX1NFVDBfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFX1dha2VfU0VUMF9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRV9UVV9HSUdBXzUwME1fT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFX1RVX0dJR0FfNTAwTV9NQVNLICAgIDB4MzAKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFX1RVXzEwME1fT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFX1RVXzEwME1fTUFTSyAgICAweEMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFX0dJR0FfQ1RSTDAgICAgMHgxMmE0CisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRV9UV19HSUdBX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRV9UV19HSUdBX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRV9UUl9HSUdBXzUwME1fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFX1RSX0dJR0FfNTAwTV9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFX0dJR0FfQ1RSTDEgICAgMHgxMmE1CisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRV9URF9HSUdBXzUwME1fT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFX1REX0dJR0FfNTAwTV9NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVfVFBfR0lHQV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVfVFBfR0lHQV9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFXzEwME1fQ1RSTDAgICAgMHgxMmE2CisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRV9UV18xMDBNX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRV9UV18xMDBNX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRV9UUl8xMDBNX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRV9UUl8xMDBNX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVfMTAwTV9DVFJMMSAgICAweDEyYTcKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFX1REXzEwME1fT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFX1REXzEwME1fTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFX1RQXzEwME1fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFX1RQXzEwME1fTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1JYX0ZDX1JFRyAgICAweDEyYWEKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fRUVFX0hBTEZfRFVQX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0VOX0VFRV9IQUxGX0RVUF9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JYX1BHQ05UX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JYX1BHQ05UX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NQVhfRklGT19TSVpFICAgIDB4MTJhZgorI2RlZmluZSAgICBSVEw4MzY3Q19NQVhfRklGT19TSVpFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01BWF9GSUZPX1NJWkVfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFUF9SWF9SQVRFX0dJR0EgICAgMHgxMmIwCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRVBfUlhfUkFURV8xMDBNICAgIDB4MTJiMQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19EVU1NWV9SRUdfMTJfMiAgICAweDEyYjIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFUF9UWF9SQVRFX0dJR0EgICAgMHgxMmIzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRVBfVFhfUkFURV8xMDBNICAgIDB4MTJiNAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19EVU1NWV9SRUdfMTJfMyAgICAweDEyYjUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFUF9HSUdBX0NUUkwwICAgIDB4MTJiNgorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVQX1RSX0dJR0FfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFUF9UUl9HSUdBX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRVBfUldfR0lHQV9NU1RfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFUF9SV19HSUdBX01TVF9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFUF9HSUdBX0NUUkwxICAgIDB4MTJiNworI2RlZmluZSAgICBSVEw4MzY3Q19FRUVQX1RXX0dJR0FfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFUF9UV19HSUdBX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRVBfVFBfR0lHQV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVQX1RQX0dJR0FfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRVBfR0lHQV9DVFJMMiAgICAweDEyYjgKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFUF9UWEVOX0dJR0FfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRVBfVFhFTl9HSUdBX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRVBfVFVfR0lHQV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVQX1RVX0dJR0FfTUFTSyAgICAweDMwMAorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVQX1RTX0dJR0FfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFUF9UU19HSUdBX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVQXzEwME1fQ1RSTDAgICAgMHgxMmI5CisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRVBfVFJfMTAwTV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVQX1RSXzEwME1fTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFUF9SV18xMDBNX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRVBfUldfMTAwTV9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFUF8xMDBNX0NUUkwxICAgIDB4MTJiYQorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVQX1RXXzEwME1fT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFUF9UV18xMDBNX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRVBfVFBfMTAwTV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVQX1RQXzEwME1fTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRVBfMTAwTV9DVFJMMiAgICAweDEyYmIKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFUF9UWEVOXzEwME1fT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRVBfVFhFTl8xMDBNX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRVBfVFVfMTAwTV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVQX1RVXzEwME1fTUFTSyAgICAweDMwMAorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVQX1RTXzEwME1fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFUF9UU18xMDBNX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVQX0NUUkwwICAgIDB4MTJiYworI2RlZmluZSAgICBSVEw4MzY3Q19FRUVQX0NUUkwwX0RVTU1ZX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRVBfQ1RSTDBfRFVNTVlfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFUF9TTEVFUF9TVEVQX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRVBfU0xFRVBfU1RFUF9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFUF9DVFJMMSAgICAweDEyYmQKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFUF9UWFJfR0lHQV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVQX1RYUl9HSUdBX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRVBfVFhSXzEwME1fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFUF9UWFJfMTAwTV9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQkFDS19QUkVTU1VSRV9JUEcgICAgMHgxMmJlCisjZGVmaW5lICAgIFJUTDgzNjdDX0JBQ0tfUFJFU1NVUkVfSVBHX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0JBQ0tfUFJFU1NVUkVfSVBHX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1RYX0VTRF9MRVZFTCAgICAweDEyYmYKKyNkZWZpbmUgICAgUlRMODM2N0NfVFhfRVNEX0xFVkVMX01PREVfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVFhfRVNEX0xFVkVMX01PREVfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19MRVZFTF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19MRVZFTF9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUlJDUF9DVFJMNCAgICAweDEyZTAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUlJDUF9DVFJMNSAgICAweDEyZTEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUlJDUF9DVFJMNiAgICAweDEyZTIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUlJDUF9DVFJMNyAgICAweDEyZTMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUlJDUF9DVFJMOCAgICAweDEyZTQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUlJDUF9DVFJMOSAgICAweDEyZTUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUlJDUF9DVFJMMTAgICAgMHgxMmU2CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZJRUxEX1NFTEVDVE9SMCAgICAweDEyZTcKKyNkZWZpbmUgICAgUlRMODM2N0NfRklFTERfU0VMRUNUT1IwX0ZPUk1BVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUVMRF9TRUxFQ1RPUjBfRk9STUFUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRklFTERfU0VMRUNUT1IwX09GRlNFVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUVMRF9TRUxFQ1RPUjBfT0ZGU0VUX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GSUVMRF9TRUxFQ1RPUjEgICAgMHgxMmU4CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJRUxEX1NFTEVDVE9SMV9GT1JNQVRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRklFTERfU0VMRUNUT1IxX0ZPUk1BVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJRUxEX1NFTEVDVE9SMV9PRkZTRVRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRklFTERfU0VMRUNUT1IxX09GRlNFVF9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRklFTERfU0VMRUNUT1IyICAgIDB4MTJlOQorI2RlZmluZSAgICBSVEw4MzY3Q19GSUVMRF9TRUxFQ1RPUjJfRk9STUFUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJRUxEX1NFTEVDVE9SMl9GT1JNQVRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUVMRF9TRUxFQ1RPUjJfT0ZGU0VUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJRUxEX1NFTEVDVE9SMl9PRkZTRVRfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZJRUxEX1NFTEVDVE9SMyAgICAweDEyZWEKKyNkZWZpbmUgICAgUlRMODM2N0NfRklFTERfU0VMRUNUT1IzX0ZPUk1BVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUVMRF9TRUxFQ1RPUjNfRk9STUFUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRklFTERfU0VMRUNUT1IzX09GRlNFVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUVMRF9TRUxFQ1RPUjNfT0ZGU0VUX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GSUVMRF9TRUxFQ1RPUjQgICAgMHgxMmViCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJRUxEX1NFTEVDVE9SNF9GT1JNQVRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRklFTERfU0VMRUNUT1I0X0ZPUk1BVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJRUxEX1NFTEVDVE9SNF9PRkZTRVRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRklFTERfU0VMRUNUT1I0X09GRlNFVF9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRklFTERfU0VMRUNUT1I1ICAgIDB4MTJlYworI2RlZmluZSAgICBSVEw4MzY3Q19GSUVMRF9TRUxFQ1RPUjVfRk9STUFUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJRUxEX1NFTEVDVE9SNV9GT1JNQVRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUVMRF9TRUxFQ1RPUjVfT0ZGU0VUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJRUxEX1NFTEVDVE9SNV9PRkZTRVRfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZJRUxEX1NFTEVDVE9SNiAgICAweDEyZWQKKyNkZWZpbmUgICAgUlRMODM2N0NfRklFTERfU0VMRUNUT1I2X0ZPUk1BVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUVMRF9TRUxFQ1RPUjZfRk9STUFUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRklFTERfU0VMRUNUT1I2X09GRlNFVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUVMRF9TRUxFQ1RPUjZfT0ZGU0VUX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GSUVMRF9TRUxFQ1RPUjcgICAgMHgxMmVlCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJRUxEX1NFTEVDVE9SN19GT1JNQVRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRklFTERfU0VMRUNUT1I3X0ZPUk1BVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJRUxEX1NFTEVDVE9SN19PRkZTRVRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRklFTERfU0VMRUNUT1I3X09GRlNFVF9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRklFTERfU0VMRUNUT1I4ICAgIDB4MTJlZgorI2RlZmluZSAgICBSVEw4MzY3Q19GSUVMRF9TRUxFQ1RPUjhfRk9STUFUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJRUxEX1NFTEVDVE9SOF9GT1JNQVRfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUVMRF9TRUxFQ1RPUjhfT0ZGU0VUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJRUxEX1NFTEVDVE9SOF9PRkZTRVRfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZJRUxEX1NFTEVDVE9SOSAgICAweDEyZjAKKyNkZWZpbmUgICAgUlRMODM2N0NfRklFTERfU0VMRUNUT1I5X0ZPUk1BVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUVMRF9TRUxFQ1RPUjlfRk9STUFUX01BU0sgICAgMHg3MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRklFTERfU0VMRUNUT1I5X09GRlNFVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUVMRF9TRUxFQ1RPUjlfT0ZGU0VUX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GSUVMRF9TRUxFQ1RPUjEwICAgIDB4MTJmMQorI2RlZmluZSAgICBSVEw4MzY3Q19GSUVMRF9TRUxFQ1RPUjEwX0ZPUk1BVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUVMRF9TRUxFQ1RPUjEwX0ZPUk1BVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJRUxEX1NFTEVDVE9SMTBfT0ZGU0VUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJRUxEX1NFTEVDVE9SMTBfT0ZGU0VUX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GSUVMRF9TRUxFQ1RPUjExICAgIDB4MTJmMgorI2RlZmluZSAgICBSVEw4MzY3Q19GSUVMRF9TRUxFQ1RPUjExX0ZPUk1BVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUVMRF9TRUxFQ1RPUjExX0ZPUk1BVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJRUxEX1NFTEVDVE9SMTFfT0ZGU0VUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJRUxEX1NFTEVDVE9SMTFfT0ZGU0VUX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GSUVMRF9TRUxFQ1RPUjEyICAgIDB4MTJmMworI2RlZmluZSAgICBSVEw4MzY3Q19GSUVMRF9TRUxFQ1RPUjEyX0ZPUk1BVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUVMRF9TRUxFQ1RPUjEyX0ZPUk1BVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJRUxEX1NFTEVDVE9SMTJfT0ZGU0VUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJRUxEX1NFTEVDVE9SMTJfT0ZGU0VUX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GSUVMRF9TRUxFQ1RPUjEzICAgIDB4MTJmNAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUVMRF9TRUxFQ1RPUjEzX0ZPUk1BVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUVMRF9TRUxFQ1RPUjEzX0ZPUk1BVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJRUxEX1NFTEVDVE9SMTNfT0ZGU0VUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJRUxEX1NFTEVDVE9SMTNfT0ZGU0VUX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GSUVMRF9TRUxFQ1RPUjE0ICAgIDB4MTJmNQorI2RlZmluZSAgICBSVEw4MzY3Q19GSUVMRF9TRUxFQ1RPUjE0X0ZPUk1BVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUVMRF9TRUxFQ1RPUjE0X0ZPUk1BVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJRUxEX1NFTEVDVE9SMTRfT0ZGU0VUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJRUxEX1NFTEVDVE9SMTRfT0ZGU0VUX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GSUVMRF9TRUxFQ1RPUjE1ICAgIDB4MTJmNgorI2RlZmluZSAgICBSVEw4MzY3Q19GSUVMRF9TRUxFQ1RPUjE1X0ZPUk1BVF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUVMRF9TRUxFQ1RPUjE1X0ZPUk1BVF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJRUxEX1NFTEVDVE9SMTVfT0ZGU0VUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJRUxEX1NFTEVDVE9SMTVfT0ZGU0VUX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19IV1BLVF9HRU5fTUlTQ19IICAgIDB4MTJmNworI2RlZmluZSAgICBSVEw4MzY3Q19QS1RfR0VOX1NVU1BFTkRfUDEwXzhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUX0dFTl9TVVNQRU5EX1AxMF84X01BU0sgICAgMHgzOAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RfR0VOX1NUQVRVU19QMTBfOF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RfR0VOX1NUQVRVU19QMTBfOF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NSVJST1JfU1JDX1BNU0sgICAgMHgxMmZiCisjZGVmaW5lICAgIFJUTDgzNjdDX01JUlJPUl9TUkNfUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19NSVJST1JfU1JDX1BNU0tfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVfQlVSU1RTSVpFICAgIDB4MTJmYworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVfSUZHX0NGRyAgICAweDEyZmQKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFX0lGR19DRkdfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFX0lGR19DRkdfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRlBHQV9WRVJfTUFDICAgIDB4MTJmZQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19IV1BLVF9HRU5fTUlTQyAgICAweDEyZmYKKyNkZWZpbmUgICAgUlRMODM2N0NfUEtUX0dFTl9TVVNQRU5EX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BLVF9HRU5fU1VTUEVORF9NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RfR0VOX1NUQVRVU19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QS1RfR0VOX1NUQVRVU19NQVNLICAgIDB4RkYKKworLyogKDE2J2gxMzAwKWNoaXBfcmVnICovCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0NISVBfTlVNQkVSICAgIDB4MTMwMAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19DSElQX1ZFUiAgICAweDEzMDEKKyNkZWZpbmUgICAgUlRMODM2N0NfVkVSSURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1ZFUklEX01BU0sgICAgMHhGMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01DSURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfTUNJRF9NQVNLICAgIDB4RjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01PREVMX0lEX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX01PREVMX0lEX01BU0sgICAgMHhGMAorI2RlZmluZSAgICBSVEw4MzY3Q19BRkVfVkVSU0lPTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19BRkVfVkVSU0lPTl9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19DSElQX0RFQlVHMCAgICAweDEzMDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU0VMMzNfRVhUMl9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0VMMzNfRVhUMl9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NFTDMzX0VYVDFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU0VMMzNfRVhUMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NFTDMzX0VYVDBfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU0VMMzNfRVhUMF9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RSSV9PVEhFUl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19EUklfT1RIRVJfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RSSV9FWFQxX1JHX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX0RSSV9FWFQxX1JHX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19EUklfRVhUMF9SR19PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19EUklfRVhUMF9SR19NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFJJX0VYVDFfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfRFJJX0VYVDFfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RSSV9FWFQwX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0RSSV9FWFQwX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NMUl9PVEhFUl9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19TTFJfT1RIRVJfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU0xSX0VYVDFfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfU0xSX0VYVDFfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfU0xSX0VYVDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0xSX0VYVDBfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQ0hJUF9ERUJVRzEgICAgMHgxMzA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1JHMV9ETl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfUkcxX0ROX01BU0sgICAgMHg3MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JHMV9EUF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19SRzFfRFBfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19SRzBfRE5fT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUkcwX0ROX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19SRzBfRFBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUkcwX0RQX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RJR0lUQUxfSU5URVJGQUNFX1NFTEVDVCAgICAweDEzMDUKKyNkZWZpbmUgICAgUlRMODM2N0NfT1JHX0NPTF9PRkZTRVQgICAgMTUKKyNkZWZpbmUgICAgUlRMODM2N0NfT1JHX0NPTF9NQVNLICAgIDB4ODAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19PUkdfQ1JTX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19PUkdfQ1JTX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NLSVBfTUlJXzFfUlhFUl9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfU0tJUF9NSUlfMV9SWEVSX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NLSVBfTUlJXzBfUlhFUl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU0tJUF9NSUlfMF9SWEVSX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NFTEVDVF9HTUlJXzFfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU0VMRUNUX0dNSUlfMV9NQVNLICAgIDB4RjAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0VMRUNUX0dNSUlfMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TRUxFQ1RfR01JSV8wX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VYVDBfUkdNWEYgICAgMHgxMzA2CisjZGVmaW5lICAgIFJUTDgzNjdDX0VYVDBfUkdUWF9JTlZfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfRVhUMF9SR1RYX0lOVl9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRVhUMF9SR1JYX0lOVl9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19FWFQwX1JHUlhfSU5WX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19FWFQwX1JHTVhGX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VYVDBfUkdNWEZfTUFTSyAgICAweDFGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VYVDFfUkdNWEYgICAgMHgxMzA3CisjZGVmaW5lICAgIFJUTDgzNjdDX0VYVDFfUkdUWF9JTlZfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfRVhUMV9SR1RYX0lOVl9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRVhUMV9SR1JYX0lOVl9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19FWFQxX1JHUlhfSU5WX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19FWFQxX1JHTVhGX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VYVDFfUkdNWEZfTUFTSyAgICAweDFGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0JJU1JfQ1RSTCAgICAweDEzMDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQklTUl9DVFJMX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0JJU1JfQ1RSTF9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TTEZfSUYgICAgMHgxMzA5CisjZGVmaW5lICAgIFJUTDgzNjdDX0xJTktfRE9XTl9DTFJfRklGT19PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19MSU5LX0RPV05fQ0xSX0ZJRk9fTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xPT1BCQUNLX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX0xPT1BCQUNLX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19XQVRFUl9MRVZFTF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19XQVRFUl9MRVZFTF9NQVNLICAgIDB4MzAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0xGX0lGX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NMRl9JRl9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JMkNfQ0xPQ0tfRElWICAgIDB4MTMwYQorI2RlZmluZSAgICBSVEw4MzY3Q19JMkNfQ0xPQ0tfRElWX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0kyQ19DTE9DS19ESVZfTUFTSyAgICAweDNGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NRFhfTURDX0RJViAgICAweDEzMGIKKyNkZWZpbmUgICAgUlRMODM2N0NfTURYX01EQ19ESVZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTURYX01EQ19ESVZfTUFTSyAgICAweDNGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NSVNDRUxMQU5FT1VTX0NPTkZJR1VSRTAgICAgMHgxMzBjCisjZGVmaW5lICAgIFJUTDgzNjdDX0FEQ0NLSV9GUk9NX1BBRF9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfQURDQ0tJX0ZST01fUEFEX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FEQ0NLSV9FTl9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfQURDQ0tJX0VOX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZMQVNIX0VOQUJMRV9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfRkxBU0hfRU5BQkxFX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRV9FTkFCTEVfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRV9FTkFCTEVfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfRU5BQkxFX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfRU5BQkxFX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRlRfRU5BQkxFX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZUX0VOQUJMRV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX09MVF9FTkFCTEVfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfT0xUX0VOQUJMRV9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JUQ1RfRU5fT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfUlRDVF9FTl9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9OX0xJR0hUX0VOX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPTl9MSUdIVF9FTl9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFc4MDUxX0VOX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0RXODA1MV9FTl9NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfQVVUT0xPQURfRU5fT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQVVUT0xPQURfRU5fTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX05SRVNUT1JFX0VOX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX05SRVNUT1JFX0VOX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX0RJU19QT05fVEFCTEVfSU5JVF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19ESVNfUE9OX1RBQkxFX0lOSVRfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfRElTX1BPTl9CSVNUX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0RJU19QT05fQklTVF9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19FRlVTRV9FTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19FRlVTRV9FTl9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NSVNDRUxMQU5FT1VTX0NPTkZJR1VSRTEgICAgMHgxMzBkCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFUFJPTV9ERVZfQURSX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0VFUFJPTV9ERVZfQURSX01BU0sgICAgMHg3RjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFUFJPTV9NU0JfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVQUk9NX01TQl9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVQUk9NX0FERFJFU1NfMTZCX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX0VFUFJPTV9BRERSRVNTXzE2Ql9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVQUk9NX0RXT05MT0FEX0NPTVBMRVRFX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFUFJPTV9EV09OTE9BRF9DT01QTEVURV9NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19TUElfU0xBVkVfRU5fT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1BJX1NMQVZFX0VOX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NNSV9TRUxfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU01JX1NFTF9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QSFlfQUQgICAgMHgxMzBmCisjZGVmaW5lICAgIFJUTDgzNjdDX0VOX1BIWV9NQVhfUE9XRVJfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX0VOX1BIWV9NQVhfUE9XRVJfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fUEhZX1NFTF9ERUdfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX0VOX1BIWV9TRUxfREVHX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VYVFBIWV9BRF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19FWFRQSFlfQURfTUFTSyAgICAweDFGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fUEhZX0xPV19QT1dFUl9NT0RFX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX0VOX1BIWV9MT1dfUE9XRVJfTU9ERV9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fUEhZX0dSRUVOX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX0VOX1BIWV9HUkVFTl9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEROUEhZX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1BETlBIWV9NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UUEhZX0FEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVFBIWV9BRF9NQVNLICAgIDB4MUYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRElHSVRBTF9JTlRFUkZBQ0UwX0ZPUkNFICAgIDB4MTMxMAorI2RlZmluZSAgICBSVEw4MzY3Q19HTUlJXzBfRk9SQ0VfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0dNSUlfMF9GT1JDRV9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19SR01JSV8wX0ZPUkNFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JHTUlJXzBfRk9SQ0VfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19ESUdJVEFMX0lOVEVSRkFDRTFfRk9SQ0UgICAgMHgxMzExCisjZGVmaW5lICAgIFJUTDgzNjdDX0dNSUlfMV9GT1JDRV9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfR01JSV8xX0ZPUkNFX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JHTUlJXzFfRk9SQ0VfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUkdNSUlfMV9GT1JDRV9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01BQzBfRk9SQ0VfU0VMRUNUICAgIDB4MTMxMgorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9NQUMwX0ZPUkNFX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9NQUMwX0ZPUkNFX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01BQzBfRk9SQ0VfQUJMVFlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUFDMF9GT1JDRV9BQkxUWV9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01BQzFfRk9SQ0VfU0VMRUNUICAgIDB4MTMxMworI2RlZmluZSAgICBSVEw4MzY3Q19FTl9NQUMxX0ZPUkNFX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9NQUMxX0ZPUkNFX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01BQzFfRk9SQ0VfQUJMVFlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUFDMV9GT1JDRV9BQkxUWV9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01BQzJfRk9SQ0VfU0VMRUNUICAgIDB4MTMxNAorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9NQUMyX0ZPUkNFX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9NQUMyX0ZPUkNFX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01BQzJfRk9SQ0VfQUJMVFlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUFDMl9GT1JDRV9BQkxUWV9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01BQzNfRk9SQ0VfU0VMRUNUICAgIDB4MTMxNQorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9NQUMzX0ZPUkNFX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9NQUMzX0ZPUkNFX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01BQzNfRk9SQ0VfQUJMVFlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUFDM19GT1JDRV9BQkxUWV9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01BQzRfRk9SQ0VfU0VMRUNUICAgIDB4MTMxNgorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9NQUM0X0ZPUkNFX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9NQUM0X0ZPUkNFX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01BQzRfRk9SQ0VfQUJMVFlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUFDNF9GT1JDRV9BQkxUWV9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01BQzVfRk9SQ0VfU0VMRUNUICAgIDB4MTMxNworI2RlZmluZSAgICBSVEw4MzY3Q19FTl9NQUM1X0ZPUkNFX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9NQUM1X0ZPUkNFX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01BQzVfRk9SQ0VfQUJMVFlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUFDNV9GT1JDRV9BQkxUWV9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01BQzZfRk9SQ0VfU0VMRUNUICAgIDB4MTMxOAorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9NQUM2X0ZPUkNFX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9NQUM2X0ZPUkNFX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01BQzZfRk9SQ0VfQUJMVFlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUFDNl9GT1JDRV9BQkxUWV9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01BQzdfRk9SQ0VfU0VMRUNUICAgIDB4MTMxOQorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9NQUM3X0ZPUkNFX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9NQUM3X0ZPUkNFX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01BQzdfRk9SQ0VfQUJMVFlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUFDN19GT1JDRV9BQkxUWV9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX00xMF9GT1JDRV9TRUxFQ1QgICAgMHgxMzFjCisjZGVmaW5lICAgIFJUTDgzNjdDX0VOX00xMF9GT1JDRV9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fTTEwX0ZPUkNFX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX00xMF9GT1JDRV9BQkxUWV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19NMTBfRk9SQ0VfQUJMVFlfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19DSElQX1JFU0VUICAgIDB4MTMyMgorI2RlZmluZSAgICBSVEw4MzY3Q19HUEhZX1JFU0VUX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX0dQSFlfUkVTRVRfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19SU1RfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1JTVF9NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFc4MDUxX1JTVF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19EVzgwNTFfUlNUX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19TRFNfUlNUX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NEU19SU1RfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQ09ORklHX1JTVF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19DT05GSUdfUlNUX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NXX1JTVF9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19TV19SU1RfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0hJUF9SU1RfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0hJUF9SU1RfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRElHSVRBTF9ERUJVR18wICAgIDB4MTMyMworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19ESUdJVEFMX0RFQlVHXzEgICAgMHgxMzI0CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lOVEVSTkFMX1BIWV9NRENfRFJJVkVSICAgIDB4MTMyNQorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRFUk5BTF9QSFlfTURDX0RSSVZFUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JTlRFUk5BTF9QSFlfTURDX0RSSVZFUl9NQVNLICAgIDB4M0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0xJTktET1dOX1RJTUVfQ1RSTCAgICAweDEzMjYKKyNkZWZpbmUgICAgUlRMODM2N0NfTElOS0RPV05fVElNRV9DRkdfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfTElOS0RPV05fVElNRV9DRkdfTUFTSyAgICAweDdFMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTElOS0RPV05fVElNRV9FTkFCTEVfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfTElOS0RPV05fVElNRV9FTkFCTEVfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19MSU5LRE9XTl9USU1FX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xJTktET1dOX1RJTUVfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BIWUFDS19USU1FT1VUICAgIDB4MTMzMQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NRFhBQ0tfVElNRU9VVCAgICAweDEzMzMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRFc4MDUxX1JEWSAgICAweDEzMzYKKyNkZWZpbmUgICAgUlRMODM2N0NfVklBUk9NX1dSSVRFX0VOX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1ZJQVJPTV9XUklURV9FTl9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NQSUZfQ0syX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NQSUZfQ0syX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUlJDUF9NRE9FX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1JSQ1BfTURPRV9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFc4MDUxX1JBVEVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfRFc4MDUxX1JBVEVfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lST01fTVNCX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0lST01fTVNCX01BU0sgICAgMHhDCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDU19JUk9NX0VOQUJMRV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ1NfSVJPTV9FTkFCTEVfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfRFc4MDUxX1JFQURZX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RXODA1MV9SRUFEWV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19CSVNUX0NUUkwgICAgMHgxMzNjCisjZGVmaW5lICAgIFJUTDgzNjdDX0RSRl9CSVNUX0RPTkVfQUxMX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0RSRl9CSVNUX0RPTkVfQUxMX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19EUkZfQklTVF9QQVVTRV9BTExfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfRFJGX0JJU1RfUEFVU0VfQUxMX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19CSVNUX0RPQU5fQUxMX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0JJU1RfRE9BTl9BTExfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQklTVF9QQVNTX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0JJU1RfUEFTU19NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19ESUFHX01PREUyICAgIDB4MTMzZAorI2RlZmluZSAgICBSVEw4MzY3Q19ESUFHX01PREUyX0FDVFJBTV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19ESUFHX01PREUyX0FDVFJBTV9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19ESUFHX01PREUyX0JDQU1fQUNUSU9OX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RJQUdfTU9ERTJfQkNBTV9BQ1RJT05fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTURYX1BIWV9SRUcwICAgIDB4MTMzZQorI2RlZmluZSAgICBSVEw4MzY3Q19QSFlfQlJEX01BU0tfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUEhZX0JSRF9NQVNLX01BU0sgICAgMHgxRjAKKyNkZWZpbmUgICAgUlRMODM2N0NfTURYX0lOREFDQ19QQUdFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01EWF9JTkRBQ0NfUEFHRV9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NRFhfUEhZX1JFRzEgICAgMHgxMzNmCisjZGVmaW5lICAgIFJUTDgzNjdDX1BIWV9CUkRfTU9ERV9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19QSFlfQlJEX01PREVfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX0JSRF9QSFlBRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19CUkRfUEhZQURfTUFTSyAgICAweDFGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RFQlVHX1NJR05BTF9TRUxFQ1RfU1cgICAgMHgxMzQwCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RFQlVHX1NJR05BTF9TRUxFQ1RfQiAgICAweDEzNDEKKyNkZWZpbmUgICAgUlRMODM2N0NfREVCVUdfTVhfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfREVCVUdfTVhfTUFTSyAgICAweEUwMAorI2RlZmluZSAgICBSVEw4MzY3Q19ERUJVR19TSElGVF9NSVNDX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX0RFQlVHX1NISUZUX01JU0NfTUFTSyAgICAweDFDMAorI2RlZmluZSAgICBSVEw4MzY3Q19ERUJVR19TSElGVF9TV19PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19ERUJVR19TSElGVF9TV19NQVNLICAgIDB4MzgKKyNkZWZpbmUgICAgUlRMODM2N0NfREVCVUdfU0hJRlRfR1BIWV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19ERUJVR19TSElGVF9HUEhZX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RFQlVHX1NJR05BTF9JICAgIDB4MTM0MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19ERUJVR19TSUdOQUxfSCAgICAweDEzNDQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfREJHT19TRUxfR1BIWSAgICAweDEzNDUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfREJHT19TRUxfTUlTQyAgICAweDEzNDYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQllQQVNTX0FCTFRZX0xPQ0sgICAgMHgxMzQ5CisjZGVmaW5lICAgIFJUTDgzNjdDX0JZUEFTU19BQkxUWV9MT0NLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0JZUEFTU19BQkxUWV9MT0NLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19CWVBBU1NfQUJMVFlfTE9DS19FWFQgICAgMHgxMzRhCisjZGVmaW5lICAgIFJUTDgzNjdDX0JZUEFTU19QMTBfQUJJTElJVFlfTE9DS19PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19CWVBBU1NfUDEwX0FCSUxJSVRZX0xPQ0tfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQllQQVNTX0VYVF9BQklMSVRZX0xPQ0tfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQllQQVNTX0VYVF9BQklMSVRZX0xPQ0tfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUNMX0dQSU8gICAgMHgxMzRmCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9HUElPXzEzX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfR1BJT18xM19NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfR1BJT18xMl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0dQSU9fMTJfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0dQSU9fMTFfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9HUElPXzExX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0dQSU9fMTBfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9HUElPXzEwX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0dQSU9fOV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfR1BJT185X01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0dQSU9fOF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfR1BJT184X01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0dQSU9fN19PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfR1BJT183X01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfR1BJT182X09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9HUElPXzZfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9HUElPXzVfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0dQSU9fNV9NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0dQSU9fNF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfR1BJT180X01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfR1BJT18zX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9HUElPXzNfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0dQSU9fMl9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfR1BJT18yX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9HUElPXzFfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfQUNMX0dQSU9fMV9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19BQ0xfR1BJT18wX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FDTF9HUElPXzBfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRU5fR1BJTyAgICAweDEzNTAKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fR1BJT18xM19PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fR1BJT18xM19NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9HUElPXzEyX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9HUElPXzEyX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VOX0dQSU9fMTFfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0VOX0dQSU9fMTFfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9HUElPXzEwX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9HUElPXzEwX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fR1BJT185X09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX0VOX0dQSU9fOV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VOX0dQSU9fOF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9HUElPXzhfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9HUElPXzdfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fR1BJT183X01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9HUElPXzZfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fR1BJT182X01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9HUElPXzVfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fR1BJT181X01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9HUElPXzRfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fR1BJT180X01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9HUElPXzNfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fR1BJT18zX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX0VOX0dQSU9fMl9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9HUElPXzJfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fR1BJT18xX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0VOX0dQSU9fMV9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9HUElPXzBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fR1BJT18wX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0NGR19NVUxUSV9QSU4gICAgMHgxMzUxCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19NVUxUSV9QSU5fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX01VTFRJX1BJTl9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUMF9TVEFUVVMgICAgMHgxMzUyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX1NUQVRVU19FTl8xMDAwX0xQSV9PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfU1RBVFVTX0VOXzEwMDBfTFBJX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfU1RBVFVTX0VOXzEwMF9MUElfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX1NUQVRVU19FTl8xMDBfTFBJX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfU1RBVFVTX05XQVlfRkFVTFRfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfU1RBVFVTX05XQVlfRkFVTFRfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9TVEFUVVNfTElOS19PTl9NQVNURVJfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfU1RBVFVTX0xJTktfT05fTUFTVEVSX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfU1RBVFVTX05XQVlfQ0FQX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX1NUQVRVU19OV0FZX0NBUF9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfU1RBVFVTX1RYX0ZMT1dDVFJMX0NBUF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9TVEFUVVNfVFhfRkxPV0NUUkxfQ0FQX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9TVEFUVVNfUlhfRkxPV0NUUkxfQ0FQX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX1NUQVRVU19SWF9GTE9XQ1RSTF9DQVBfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX1NUQVRVU19MSU5LX1NUQVRFX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX1NUQVRVU19MSU5LX1NUQVRFX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9TVEFUVVNfRlVMTF9EVVBMVVhfQ0FQX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX1NUQVRVU19GVUxMX0RVUExVWF9DQVBfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfU1RBVFVTX0xJTktfU1BFRURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfU1RBVFVTX0xJTktfU1BFRURfTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDFfU1RBVFVTICAgIDB4MTM1MworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9TVEFUVVNfRU5fMTAwMF9MUElfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX1NUQVRVU19FTl8xMDAwX0xQSV9NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX1NUQVRVU19FTl8xMDBfTFBJX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9TVEFUVVNfRU5fMTAwX0xQSV9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX1NUQVRVU19OV0FZX0ZBVUxUX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX1NUQVRVU19OV0FZX0ZBVUxUX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfU1RBVFVTX0xJTktfT05fTUFTVEVSX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX1NUQVRVU19MSU5LX09OX01BU1RFUl9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX1NUQVRVU19OV0FZX0NBUF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9TVEFUVVNfTldBWV9DQVBfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX1NUQVRVU19UWF9GTE9XQ1RSTF9DQVBfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfU1RBVFVTX1RYX0ZMT1dDVFJMX0NBUF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfU1RBVFVTX1JYX0ZMT1dDVFJMX0NBUF9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9TVEFUVVNfUlhfRkxPV0NUUkxfQ0FQX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9TVEFUVVNfTElOS19TVEFURV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9TVEFUVVNfTElOS19TVEFURV9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfU1RBVFVTX0ZVTExfRFVQTFVYX0NBUF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9TVEFUVVNfRlVMTF9EVVBMVVhfQ0FQX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX1NUQVRVU19MSU5LX1NQRUVEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX1NUQVRVU19MSU5LX1NQRUVEX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQyX1NUQVRVUyAgICAweDEzNTQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfU1RBVFVTX0VOXzEwMDBfTFBJX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9TVEFUVVNfRU5fMTAwMF9MUElfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9TVEFUVVNfRU5fMTAwX0xQSV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfU1RBVFVTX0VOXzEwMF9MUElfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9TVEFUVVNfTldBWV9GQVVMVF9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9TVEFUVVNfTldBWV9GQVVMVF9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX1NUQVRVU19MSU5LX09OX01BU1RFUl9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9TVEFUVVNfTElOS19PTl9NQVNURVJfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9TVEFUVVNfTldBWV9DQVBfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfU1RBVFVTX05XQVlfQ0FQX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9TVEFUVVNfVFhfRkxPV0NUUkxfQ0FQX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX1NUQVRVU19UWF9GTE9XQ1RSTF9DQVBfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX1NUQVRVU19SWF9GTE9XQ1RSTF9DQVBfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfU1RBVFVTX1JYX0ZMT1dDVFJMX0NBUF9NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfU1RBVFVTX0xJTktfU1RBVEVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfU1RBVFVTX0xJTktfU1RBVEVfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX1NUQVRVU19GVUxMX0RVUExVWF9DQVBfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfU1RBVFVTX0ZVTExfRFVQTFVYX0NBUF9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9TVEFUVVNfTElOS19TUEVFRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9TVEFUVVNfTElOS19TUEVFRF9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUM19TVEFUVVMgICAgMHgxMzU1CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX1NUQVRVU19FTl8xMDAwX0xQSV9PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfU1RBVFVTX0VOXzEwMDBfTFBJX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfU1RBVFVTX0VOXzEwMF9MUElfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX1NUQVRVU19FTl8xMDBfTFBJX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfU1RBVFVTX05XQVlfRkFVTFRfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfU1RBVFVTX05XQVlfRkFVTFRfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19TVEFUVVNfTElOS19PTl9NQVNURVJfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfU1RBVFVTX0xJTktfT05fTUFTVEVSX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfU1RBVFVTX05XQVlfQ0FQX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX1NUQVRVU19OV0FZX0NBUF9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfU1RBVFVTX1RYX0ZMT1dDVFJMX0NBUF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19TVEFUVVNfVFhfRkxPV0NUUkxfQ0FQX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19TVEFUVVNfUlhfRkxPV0NUUkxfQ0FQX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX1NUQVRVU19SWF9GTE9XQ1RSTF9DQVBfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX1NUQVRVU19MSU5LX1NUQVRFX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX1NUQVRVU19MSU5LX1NUQVRFX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19TVEFUVVNfRlVMTF9EVVBMVVhfQ0FQX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX1NUQVRVU19GVUxMX0RVUExVWF9DQVBfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfU1RBVFVTX0xJTktfU1BFRURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfU1RBVFVTX0xJTktfU1BFRURfTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDRfU1RBVFVTICAgIDB4MTM1NgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9TVEFUVVNfRU5fMTAwMF9MUElfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X1NUQVRVU19FTl8xMDAwX0xQSV9NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X1NUQVRVU19FTl8xMDBfTFBJX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9TVEFUVVNfRU5fMTAwX0xQSV9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X1NUQVRVU19OV0FZX0ZBVUxUX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X1NUQVRVU19OV0FZX0ZBVUxUX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfU1RBVFVTX0xJTktfT05fTUFTVEVSX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X1NUQVRVU19MSU5LX09OX01BU1RFUl9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X1NUQVRVU19OV0FZX0NBUF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9TVEFUVVNfTldBWV9DQVBfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X1NUQVRVU19UWF9GTE9XQ1RSTF9DQVBfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfU1RBVFVTX1RYX0ZMT1dDVFJMX0NBUF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfU1RBVFVTX1JYX0ZMT1dDVFJMX0NBUF9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9TVEFUVVNfUlhfRkxPV0NUUkxfQ0FQX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9TVEFUVVNfTElOS19TVEFURV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9TVEFUVVNfTElOS19TVEFURV9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfU1RBVFVTX0ZVTExfRFVQTFVYX0NBUF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9TVEFUVVNfRlVMTF9EVVBMVVhfQ0FQX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X1NUQVRVU19MSU5LX1NQRUVEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X1NUQVRVU19MSU5LX1NQRUVEX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQ1X1NUQVRVUyAgICAweDEzNTcKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfU1RBVFVTX0VOXzEwMDBfTFBJX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9TVEFUVVNfRU5fMTAwMF9MUElfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9TVEFUVVNfRU5fMTAwX0xQSV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfU1RBVFVTX0VOXzEwMF9MUElfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9TVEFUVVNfTldBWV9GQVVMVF9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9TVEFUVVNfTldBWV9GQVVMVF9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X1NUQVRVU19MSU5LX09OX01BU1RFUl9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9TVEFUVVNfTElOS19PTl9NQVNURVJfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9TVEFUVVNfTldBWV9DQVBfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfU1RBVFVTX05XQVlfQ0FQX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9TVEFUVVNfVFhfRkxPV0NUUkxfQ0FQX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X1NUQVRVU19UWF9GTE9XQ1RSTF9DQVBfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X1NUQVRVU19SWF9GTE9XQ1RSTF9DQVBfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfU1RBVFVTX1JYX0ZMT1dDVFJMX0NBUF9NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfU1RBVFVTX0xJTktfU1RBVEVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfU1RBVFVTX0xJTktfU1RBVEVfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X1NUQVRVU19GVUxMX0RVUExVWF9DQVBfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfU1RBVFVTX0ZVTExfRFVQTFVYX0NBUF9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9TVEFUVVNfTElOS19TUEVFRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9TVEFUVVNfTElOS19TUEVFRF9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUNl9TVEFUVVMgICAgMHgxMzU4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X1NUQVRVU19FTl8xMDAwX0xQSV9PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfU1RBVFVTX0VOXzEwMDBfTFBJX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfU1RBVFVTX0VOXzEwMF9MUElfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X1NUQVRVU19FTl8xMDBfTFBJX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfU1RBVFVTX05XQVlfRkFVTFRfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfU1RBVFVTX05XQVlfRkFVTFRfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9TVEFUVVNfTElOS19PTl9NQVNURVJfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfU1RBVFVTX0xJTktfT05fTUFTVEVSX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfU1RBVFVTX05XQVlfQ0FQX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X1NUQVRVU19OV0FZX0NBUF9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfU1RBVFVTX1RYX0ZMT1dDVFJMX0NBUF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9TVEFUVVNfVFhfRkxPV0NUUkxfQ0FQX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9TVEFUVVNfUlhfRkxPV0NUUkxfQ0FQX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X1NUQVRVU19SWF9GTE9XQ1RSTF9DQVBfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X1NUQVRVU19MSU5LX1NUQVRFX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X1NUQVRVU19MSU5LX1NUQVRFX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9TVEFUVVNfRlVMTF9EVVBMVVhfQ0FQX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X1NUQVRVU19GVUxMX0RVUExVWF9DQVBfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfU1RBVFVTX0xJTktfU1BFRURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfU1RBVFVTX0xJTktfU1BFRURfTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDdfU1RBVFVTICAgIDB4MTM1OQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19TVEFUVVNfRU5fMTAwMF9MUElfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X1NUQVRVU19FTl8xMDAwX0xQSV9NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X1NUQVRVU19FTl8xMDBfTFBJX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19TVEFUVVNfRU5fMTAwX0xQSV9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X1NUQVRVU19OV0FZX0ZBVUxUX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X1NUQVRVU19OV0FZX0ZBVUxUX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfU1RBVFVTX0xJTktfT05fTUFTVEVSX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X1NUQVRVU19MSU5LX09OX01BU1RFUl9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X1NUQVRVU19OV0FZX0NBUF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19TVEFUVVNfTldBWV9DQVBfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X1NUQVRVU19UWF9GTE9XQ1RSTF9DQVBfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfU1RBVFVTX1RYX0ZMT1dDVFJMX0NBUF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfU1RBVFVTX1JYX0ZMT1dDVFJMX0NBUF9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19TVEFUVVNfUlhfRkxPV0NUUkxfQ0FQX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19TVEFUVVNfTElOS19TVEFURV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19TVEFUVVNfTElOS19TVEFURV9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfU1RBVFVTX0ZVTExfRFVQTFVYX0NBUF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19TVEFUVVNfRlVMTF9EVVBMVVhfQ0FQX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X1NUQVRVU19MSU5LX1NQRUVEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X1NUQVRVU19MSU5LX1NQRUVEX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BPUlQ4X1NUQVRVUyAgICAweDEzNWEKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfU1RBVFVTX0VOXzEwMDBfTFBJX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9TVEFUVVNfRU5fMTAwMF9MUElfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9TVEFUVVNfRU5fMTAwX0xQSV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfU1RBVFVTX0VOXzEwMF9MUElfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9TVEFUVVNfTldBWV9GQVVMVF9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9TVEFUVVNfTldBWV9GQVVMVF9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X1NUQVRVU19MSU5LX09OX01BU1RFUl9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9TVEFUVVNfTElOS19PTl9NQVNURVJfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9TVEFUVVNfTldBWV9DQVBfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfU1RBVFVTX05XQVlfQ0FQX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9TVEFUVVNfVFhfRkxPV0NUUkxfQ0FQX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X1NUQVRVU19UWF9GTE9XQ1RSTF9DQVBfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X1NUQVRVU19SWF9GTE9XQ1RSTF9DQVBfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfU1RBVFVTX1JYX0ZMT1dDVFJMX0NBUF9NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfU1RBVFVTX0xJTktfU1RBVEVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfU1RBVFVTX0xJTktfU1RBVEVfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X1NUQVRVU19GVUxMX0RVUExVWF9DQVBfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfU1RBVFVTX0ZVTExfRFVQTFVYX0NBUF9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9TVEFUVVNfTElOS19TUEVFRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9TVEFUVVNfTElOS19TUEVFRF9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QT1JUOV9TVEFUVVMgICAgMHgxMzViCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X1NUQVRVU19FTl8xMDAwX0xQSV9PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfU1RBVFVTX0VOXzEwMDBfTFBJX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfU1RBVFVTX0VOXzEwMF9MUElfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X1NUQVRVU19FTl8xMDBfTFBJX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfU1RBVFVTX05XQVlfRkFVTFRfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfU1RBVFVTX05XQVlfRkFVTFRfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9TVEFUVVNfTElOS19PTl9NQVNURVJfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfU1RBVFVTX0xJTktfT05fTUFTVEVSX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfU1RBVFVTX05XQVlfQ0FQX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X1NUQVRVU19OV0FZX0NBUF9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfU1RBVFVTX1RYX0ZMT1dDVFJMX0NBUF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9TVEFUVVNfVFhfRkxPV0NUUkxfQ0FQX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9TVEFUVVNfUlhfRkxPV0NUUkxfQ0FQX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X1NUQVRVU19SWF9GTE9XQ1RSTF9DQVBfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X1NUQVRVU19MSU5LX1NUQVRFX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X1NUQVRVU19MSU5LX1NUQVRFX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9TVEFUVVNfRlVMTF9EVVBMVVhfQ0FQX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X1NUQVRVU19GVUxMX0RVUExVWF9DQVBfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfU1RBVFVTX0xJTktfU1BFRURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfU1RBVFVTX0xJTktfU1BFRURfTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUE9SVDEwX1NUQVRVUyAgICAweDEzNWMKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX1NUQVRVU19FTl8xMDAwX0xQSV9PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX1NUQVRVU19FTl8xMDAwX0xQSV9NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9TVEFUVVNfRU5fMTAwX0xQSV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX1NUQVRVU19FTl8xMDBfTFBJX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX1NUQVRVU19OV0FZX0ZBVUxUX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9TVEFUVVNfTldBWV9GQVVMVF9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9TVEFUVVNfTElOS19PTl9NQVNURVJfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX1NUQVRVU19MSU5LX09OX01BU1RFUl9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9TVEFUVVNfTldBWV9DQVBfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX1NUQVRVU19OV0FZX0NBUF9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX1NUQVRVU19UWF9GTE9XQ1RSTF9DQVBfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX1NUQVRVU19UWF9GTE9XQ1RSTF9DQVBfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9TVEFUVVNfUlhfRkxPV0NUUkxfQ0FQX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxMF9TVEFUVVNfUlhfRkxPV0NUUkxfQ0FQX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfU1RBVFVTX0xJTktfU1RBVEVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX1NUQVRVU19MSU5LX1NUQVRFX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfU1RBVFVTX0ZVTExfRFVQTFVYX0NBUF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfU1RBVFVTX0ZVTExfRFVQTFVYX0NBUF9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMTBfU1RBVFVTX0xJTktfU1BFRURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDEwX1NUQVRVU19MSU5LX1NQRUVEX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1VQU19DVFJMMCAgICAweDEzNjIKKyNkZWZpbmUgICAgUlRMODM2N0NfUDNfUkVGX1NEX0JJVDBfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUDNfUkVGX1NEX0JJVDBfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDJfUkVGX1NEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1AyX1JFRl9TRF9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVVBTX0NUUkwxICAgIDB4MTM2MworI2RlZmluZSAgICBSVEw4MzY3Q19VUFNfT1VUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1VQU19PVVRfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVVBTX1dSSVRFX1BVTFNFX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1VQU19XUklURV9QVUxTRV9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19VUFNfRU5fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVVBTX0VOX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1VQU19DVFJMMiAgICAweDEzNjQKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdOT0VfTUFDOF9MSU5LX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19JR05PRV9NQUM4X0xJTktfTUFTSyAgICAweDgwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQUdSRUVfU0xFRVBfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FHUkVFX1NMRUVQX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1dBSVRfRk9SX0FHUkVFTUVOVF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfV0FJVF9GT1JfQUdSRUVNRU5UX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1dBS0VfVVBfQllfTElOS19PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfV0FLRV9VUF9CWV9MSU5LX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1dBS0VfVVBfQllfUEhZX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19XQUtFX1VQX0JZX1BIWV9NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NMT1dfQ0xLX1RHTF9SQVRFX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NMT1dfQ0xLX1RHTF9SQVRFX01BU0sgICAgMHg3ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfUExMX0cxX0NUUkxfRU5fT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUExMX0cxX0NUUkxfRU5fTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BMTF9HMF9DVFJMX0VOX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1BMTF9HMF9DVFJMX0VOX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19TTE9XX0RPV05fUExMX0VOX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NMT1dfRE9XTl9QTExfRU5fTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NMT1dfRE9XTl9DTEtfRU5fT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU0xPV19ET1dOX0NMS19FTl9NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19HQVRJTkdfQ0xLX1NEU19FTl9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19HQVRJTkdfQ0xLX1NEU19FTl9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19HQVRJTkdfQ0xLX0NISVBfRU5fT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfR0FUSU5HX0NMS19DSElQX0VOX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0dBVElOR19TV19FTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19HQVRJTkdfU1dfRU5fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfR0FUSU5HX0NMS18xICAgIDB4MTM2NQorI2RlZmluZSAgICBSVEw4MzY3Q19BTERQU19NT0RFXzRfT0ZGU0VUICAgIDE1CisjZGVmaW5lICAgIFJUTDgzNjdDX0FMRFBTX01PREVfNF9NQVNLICAgIDB4ODAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BTERQU19NT0RFXzNfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX0FMRFBTX01PREVfM19NQVNLICAgIDB4NDAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BTERQU19NT0RFXzJfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FMRFBTX01PREVfMl9NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BTERQU19NT0RFXzFfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0FMRFBTX01PREVfMV9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19BTERQU19NT0RFXzBfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0FMRFBTX01PREVfMF9NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1VQU19EQkdPX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19VUFNfREJHT19NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lGTVhfQUZGX05PVF9GRl9PVVRfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfSUZNWF9BRkZfTk9UX0ZGX09VVF9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1dBVEVSX0xFVkVMX0ZEX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1dBVEVSX0xFVkVMX0ZEX01BU0sgICAgMHgxQzAKKyNkZWZpbmUgICAgUlRMODM2N0NfV0FURVJfTEVWRUxfWTJYX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1dBVEVSX0xFVkVMX1kyWF9NQVNLICAgIDB4MzgKKyNkZWZpbmUgICAgUlRMODM2N0NfV0FURVJfTEVWRUxfWDJZXzJfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfV0FURVJfTEVWRUxfWDJZXzJfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdOT0VfTUFDMTBfTElOS19PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19JR05PRV9NQUMxMF9MSU5LX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTk9FX01BQzlfTElOS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR05PRV9NQUM5X0xJTktfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVVBTX0NUUkw0ICAgIDB4MTM2NgorI2RlZmluZSAgICBSVEw4MzY3Q19QUk9CX0VOX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1BST0JfRU5fTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BMTF9ET1dOX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1BMTF9ET1dOX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX1hUQUxfRE9XTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19YVEFMX0RPV05fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVVBTX0NUUkw1ICAgIDB4MTM2NworI2RlZmluZSAgICBSVEw4MzY3Q19GUkNfQ1BVX0FDUFRfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfRlJDX0NQVV9BQ1BUX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX1VQU19DUFVfQUNQVF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19VUFNfQ1BVX0FDUFRfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfVVBTX0RCR180X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1VQU19EQkdfNF9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19VUFNfQ1RSTDYgICAgMHgxMzY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1VQU19DVFJMNl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19VUFNfQ1RSTDZfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUZVU0VfQ01EXzcwQiAgICAweDEzNjkKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUZVU0VfQ01EICAgIDB4MTM3MAorI2RlZmluZSAgICBSVEw4MzY3Q19FRlVTRV9USU1FX09VVF9GTEFHX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0VGVVNFX1RJTUVfT1VUX0ZMQUdfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRUZVU0VfQUNDRVNTX0JVU1lfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfRUZVU0VfQUNDRVNTX0JVU1lfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfRUZVU0VfQ09NTUFORF9FTl9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19FRlVTRV9DT01NQU5EX0VOX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0VGVVNFX1dSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VGVVNFX1dSX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VGVVNFX0FEUiAgICAweDEzNzEKKyNkZWZpbmUgICAgUlRMODM2N0NfRFVNTVlfMTVfMTBfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFVNTVlfMTVfMTBfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRUZVU0VfQUREUkVTU19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19FRlVTRV9BRERSRVNTX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRlVTRV9XREFUICAgIDB4MTM3MgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRlVTRV9SREFUICAgIDB4MTM3MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JMkNfQ1RSTCAgICAweDEzNzQKKyNkZWZpbmUgICAgUlRMODM2N0NfTURYX01TVF9GQUlMX0xBVF9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19NRFhfTVNUX0ZBSUxfTEFUX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX01EWF9NU1RfRkFJTF9DTFJQU19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19NRFhfTVNUX0ZBSUxfQ0xSUFNfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFX0NGRyAgICAweDEzNzUKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0JZUEFTU19HQVRFTFBURF9PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0JZUEFTU19HQVRFTFBURF9NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRV9BQlRfQUREUjJfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFX0FCVF9BRERSMl9NQVNLICAgIDB4N0MwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRV9BQlRfQUREUjFfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFX0FCVF9BRERSMV9NQVNLICAgIDB4M0UKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFX1BPTExfRU5fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFX1BPTExfRU5fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFX1BBR0UgICAgMHgxMzc2CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRV9FWFRfUEFHRSAgICAweDEzNzcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFX0VOX1NQRDEwMDAgICAgMHgxMzc4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRV9FTl9TUEQxMDAgICAgMHgxMzc5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRV9MUF9TUEQxMDAwICAgIDB4MTM3YQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVfTFBfU1BEMTAwICAgIDB4MTM3YgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19EVzgwNTFfUFJPX1JFRzAgICAgMHgxM2EwCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RXODA1MV9QUk9fUkVHMSAgICAweDEzYTEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRFc4MDUxX1BST19SRUcyICAgIDB4MTNhMgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19EVzgwNTFfUFJPX1JFRzMgICAgMHgxM2EzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RXODA1MV9QUk9fUkVHNCAgICAweDEzYTQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRFc4MDUxX1BST19SRUc1ICAgIDB4MTNhNQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19EVzgwNTFfUFJPX1JFRzYgICAgMHgxM2E2CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RXODA1MV9QUk9fUkVHNyAgICAweDEzYTcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUFJPVEVDVF9JRCAgICAweDEzYzAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQ0hJUF9WRVJfSU5UTCAgICAweDEzYzEKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0hJUF9WRVJfSU5UTF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19DSElQX1ZFUl9JTlRMX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01BR0lDX0lEICAgIDB4MTNjMgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19ESUdJVEFMX0lOVEVSRkFDRV9TRUxFQ1RfMSAgICAweDEzYzMKKyNkZWZpbmUgICAgUlRMODM2N0NfU0tJUF9NSUlfMl9SWEVSX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NLSVBfTUlJXzJfUlhFUl9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0VMRUNUX0dNSUlfMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TRUxFQ1RfR01JSV8yX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RJR0lUQUxfSU5URVJGQUNFMl9GT1JDRSAgICAweDEzYzQKKyNkZWZpbmUgICAgUlRMODM2N0NfR01JSV8yX0ZPUkNFX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19HTUlJXzJfRk9SQ0VfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUkdNSUlfMl9GT1JDRV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19SR01JSV8yX0ZPUkNFX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRVhUMl9SR01YRiAgICAweDEzYzUKKyNkZWZpbmUgICAgUlRMODM2N0NfRVhUMl9SR1RYX0lOVl9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19FWFQyX1JHVFhfSU5WX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19FWFQyX1JHUlhfSU5WX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0VYVDJfUkdSWF9JTlZfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VYVDJfUkdNWEZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRVhUMl9SR01YRl9NQVNLICAgIDB4MUYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUk9VVEVSX1VQU19DRkcgICAgMHgxM2M2CisjZGVmaW5lICAgIFJUTDgzNjdDX1VQU19TdGF0dXNfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfVVBTX1N0YXR1c19NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19Tb2Z0U3RhcnRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU29mdFN0YXJ0X01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0NUUkxfR1BJTyAgICAweDEzYzcKKyNkZWZpbmUgICAgUlRMODM2N0NfQ1RSTF9HUElPXzEzX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19DVFJMX0dQSU9fMTNfTUFTSyAgICAweDIwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ1RSTF9HUElPXzEyX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19DVFJMX0dQSU9fMTJfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ1RSTF9HUElPXzExX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19DVFJMX0dQSU9fMTFfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19DVFJMX0dQSU9fMTBfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NUUkxfR1BJT18xMF9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NUUkxfR1BJT185X09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX0NUUkxfR1BJT185X01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ1RSTF9HUElPXzhfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQ1RSTF9HUElPXzhfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19DVFJMX0dQSU9fN19PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19DVFJMX0dQSU9fN19NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ1RSTF9HUElPXzZfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfQ1RSTF9HUElPXzZfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NUUkxfR1BJT181X09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0NUUkxfR1BJT181X01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19DVFJMX0dQSU9fNF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19DVFJMX0dQSU9fNF9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ1RSTF9HUElPXzNfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfQ1RSTF9HUElPXzNfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQ1RSTF9HUElPXzJfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQ1RSTF9HUElPXzJfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQ1RSTF9HUElPXzFfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfQ1RSTF9HUElPXzFfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQ1RSTF9HUElPXzBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ1RSTF9HUElPXzBfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0VMX0dQSU8gICAgMHgxM2M4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NFTF9HUElPXzEzX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TRUxfR1BJT18xM19NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TRUxfR1BJT18xMl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU0VMX0dQSU9fMTJfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0VMX0dQSU9fMTFfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX1NFTF9HUElPXzExX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0VMX0dQSU9fMTBfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NFTF9HUElPXzEwX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0VMX0dQSU9fOV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TRUxfR1BJT185X01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0VMX0dQSU9fOF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TRUxfR1BJT184X01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0VMX0dQSU9fN19PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TRUxfR1BJT183X01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TRUxfR1BJT182X09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NFTF9HUElPXzZfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NFTF9HUElPXzVfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfU0VMX0dQSU9fNV9NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0VMX0dQSU9fNF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19TRUxfR1BJT180X01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19TRUxfR1BJT18zX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NFTF9HUElPXzNfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU0VMX0dQSU9fMl9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19TRUxfR1BJT18yX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NFTF9HUElPXzFfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfU0VMX0dQSU9fMV9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19TRUxfR1BJT18wX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NFTF9HUElPXzBfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1RBVFVTX0dQSU8gICAgMHgxM2M5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NUQVRVU19HUElPX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NUQVRVU19HUElPX01BU0sgICAgMHgzRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NZTkNfRVRIX0NGRyAgICAweDEzZTAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFVNTVkyX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX0RVTU1ZMl9NQVNLICAgIDB4RkUwMAorI2RlZmluZSAgICBSVEw4MzY3Q19SRkMyODE5X1RZUEVfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUkZDMjgxOV9UWVBFX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFVNTVkxX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX0RVTU1ZMV9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCRVJfU1lOQ0UxMjVfTF9TRUxfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCRVJfU1lOQ0UxMjVfTF9TRUxfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NZTkNfRVRIX0VOX1JUVDJfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1lOQ19FVEhfRU5fUlRUMl9NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1lOQ19FVEhfRU5fUlRUMV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19TWU5DX0VUSF9FTl9SVFQxX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19TWU5DX0VUSF9TRUxfRFBMTF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TWU5DX0VUSF9TRUxfRFBMTF9NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19TWU5DX0VUSF9TRUxfUEhZUkVGX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NZTkNfRVRIX1NFTF9QSFlSRUZfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1lOQ19FVEhfU0VMX1hUQUxfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1lOQ19FVEhfU0VMX1hUQUxfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfRFVNTVkwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RVTU1ZMF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19MRURfRFJJX0NGRyAgICAweDEzZTEKKyNkZWZpbmUgICAgUlRMODM2N0NfTEVEX0RSSV9DRkdfRFVNTVlfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfTEVEX0RSSV9DRkdfRFVNTVlfTUFTSyAgICAweEZGRkUKKyNkZWZpbmUgICAgUlRMODM2N0NfTEVEX0RSSVZJTkdfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTEVEX0RSSVZJTkdfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQ0hJUF9ERUJVRzIgICAgMHgxM2UyCisjZGVmaW5lICAgIFJUTDgzNjdDX1JHMl9ETl9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19SRzJfRE5fTUFTSyAgICAweDFDMAorI2RlZmluZSAgICBSVEw4MzY3Q19SRzJfRFBfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfUkcyX0RQX01BU0sgICAgMHgzOAorI2RlZmluZSAgICBSVEw4MzY3Q19EUklfRVhUMl9SR19PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19EUklfRVhUMl9SR19NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19EUklfRVhUMl9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19EUklfRVhUMl9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19TTFJfRVhUMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TTFJfRVhUMl9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19ESUdJVEFMX0RFQlVHXzIgICAgMHgxM2UzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZJQkVSX1JUTF9PVUlfQ0ZHMCAgICAweDEzZTQKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCRVJfUlRMX09VSV9DRkcwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQkVSX1JUTF9PVUlfQ0ZHMF9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRklCRVJfUlRMX09VSV9DRkcxICAgIDB4MTNlNQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GSUJFUl9DRkdfMCAgICAweDEzZTYKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVWX05VTV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19SRVZfTlVNX01BU0sgICAgMHhGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTU9ERUxfTlVNX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01PREVMX05VTV9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRklCRVJfQ0ZHXzEgICAgMHgxM2U3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NEU19GUkNfUkVHNF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfU0RTX0ZSQ19SRUc0X01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NEU19GUkNfUkVHNF9GSUIxMDBfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX1NEU19GUkNfUkVHNF9GSUIxMDBfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TRUxfTUFTS19PTkxfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfU0VMX01BU0tfT05MX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19ESVNfUVVBTElUWV9JTl9NQVNLX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0RJU19RVUFMSVRZX0lOX01BU0tfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NEU19GUkNfTU9ERV9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TRFNfRlJDX01PREVfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU0RTX01PREVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0RTX01PREVfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRklCRVJfQ0ZHXzIgICAgMHgxM2U4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NFTF9TREVUX1BTX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TRUxfU0RFVF9QU19NQVNLICAgIDB4RjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19VVFBfRElTX1JYX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19VVFBfRElTX1JYX01BU0sgICAgMHhDMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVVRQX0ZSQ19MRF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19VVFBfRlJDX0xEX01BU0sgICAgMHgzMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0RTX1JYX0RJU0FCTEVfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU0RTX1JYX0RJU0FCTEVfTUFTSyAgICAweEMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NEU19UWF9ESVNBQkxFX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NEU19UWF9ESVNBQkxFX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUJFUl9DRkdfMl9TRFNfUFdSX0lTT19PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19GSUJFUl9DRkdfMl9TRFNfUFdSX0lTT19NQVNLICAgIDB4QworI2RlZmluZSAgICBSVEw4MzY3Q19TRFNfRlJDX0xEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NEU19GUkNfTERfTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRklCRVJfQ0ZHXzMgICAgMHgxM2U5CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQkVSX0NGR18zX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQkVSX0NGR18zX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRklCRVJfQ0ZHXzQgICAgMHgxM2VhCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1VUUF9GSUJfREVUICAgIDB4MTNlYgorI2RlZmluZSAgICBSVEw4MzY3Q19GT1JDRV9TRUxfRklCRVJfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZPUkNFX1NFTF9GSUJFUl9NQVNLICAgIDB4QzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUJfRklOQUxfVElNRVJfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQl9GSU5BTF9USU1FUl9NQVNLICAgIDB4MzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUJfTElOS19USU1FUl9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCX0xJTktfVElNRVJfTUFTSyAgICAweEMwMAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUJfU0RFVF9USU1FUl9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUJfU0RFVF9USU1FUl9NQVNLICAgIDB4MzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1VUUF9MSU5LX1RJTUVSX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1VUUF9MSU5LX1RJTUVSX01BU0sgICAgMHhDMAorI2RlZmluZSAgICBSVEw4MzY3Q19VVFBfU0RFVF9USU1FUl9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19VVFBfU0RFVF9USU1FUl9NQVNLICAgIDB4MzAKKyNkZWZpbmUgICAgUlRMODM2N0NfRk9SQ0VfQVVUT0RFVF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19GT1JDRV9BVVRPREVUX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FVVE9ERVRfRlNNX0NMUl9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19BVVRPREVUX0ZTTV9DTFJfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfVVRQX0ZJUlNUX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1VUUF9GSVJTVF9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19VVFBfRklCX0RJU0FVVE9ERVRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVVRQX0ZJQl9ESVNBVVRPREVUX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX05SRVNUT1JFX01BR0lDX05VTSAgICAweDEzZWMKKyNkZWZpbmUgICAgUlRMODM2N0NfTlJFU1RPUkVfTUFHSUNfTlVNX01BU0sgICAgMHhGRkZGCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFUFJPTV9QUk9HUkFNX0NZQ0xFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFUFJPTV9QUk9HUkFNX0NZQ0xFX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01BQ19BQ1RJVkUgICAgMHgxM2VlCisjZGVmaW5lICAgIFJUTDgzNjdDX01BQ19BQ1RJVkVfSF9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19NQUNfQUNUSVZFX0hfTUFTSyAgICAweEUwMAorI2RlZmluZSAgICBSVEw4MzY3Q19GT1JDRV9NQUNfQUNUSVZFX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZPUkNFX01BQ19BQ1RJVkVfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19NQUNfQUNUSVZFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01BQ19BQ1RJVkVfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NFUkRFU19SRVNVTFQgICAgMHgxM2VmCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQjEwMF9ERVRfMV9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMTAwX0RFVF8xX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQl9JU09fMV9PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCX0lTT18xX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0RTX0FORkFVTFRfMV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0RTX0FORkFVTFRfMV9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NEU19JTlRCXzFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU0RTX0lOVEJfMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NEU19MSU5LX09LXzFfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU0RTX0xJTktfT0tfMV9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQjEwMF9ERVRfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMTAwX0RFVF9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCX0lTT19PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19GSUJfSVNPX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NEU19BTkZBVUxUX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NEU19BTkZBVUxUX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NEU19JTlRCX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1NEU19JTlRCX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NEU19MSU5LX09LX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NEU19MSU5LX09LX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0NISVBfRUNPICAgIDB4MTNmMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfQ0hJUF9FQ09fT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0NISVBfRUNPX01BU0sgICAgMHhGRkZFCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19DS09VVEVOX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19DS09VVEVOX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1dBS0VMUElfU0xPVF9QUkQgICAgMHgxM2YxCisjZGVmaW5lICAgIFJUTDgzNjdDX1dBS0VMUElfU0xPVF9QUkRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfV0FLRUxQSV9TTE9UX1BSRF9NQVNLICAgIDB4MUYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfV0FLRUxQSV9TTE9UX1BHMCAgICAweDEzZjIKKyNkZWZpbmUgICAgUlRMODM2N0NfV0FLRUxQSV9TTE9UX1AxX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1dBS0VMUElfU0xPVF9QMV9NQVNLICAgIDB4MUYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19XQUtFTFBJX1NMT1RfUDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfV0FLRUxQSV9TTE9UX1AwX01BU0sgICAgMHgxRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19XQUtFTFBJX1NMT1RfUEcxICAgIDB4MTNmMworI2RlZmluZSAgICBSVEw4MzY3Q19XQUtFTFBJX1NMT1RfUDNfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfV0FLRUxQSV9TTE9UX1AzX01BU0sgICAgMHgxRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1dBS0VMUElfU0xPVF9QMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19XQUtFTFBJX1NMT1RfUDJfTUFTSyAgICAweDFGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1dBS0VMUElfU0xPVF9QRzIgICAgMHgxM2Y0CisjZGVmaW5lICAgIFJUTDgzNjdDX1dBS0VMUElfU0xPVF9QNV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19XQUtFTFBJX1NMT1RfUDVfTUFTSyAgICAweDFGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfV0FLRUxQSV9TTE9UX1A0X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1dBS0VMUElfU0xPVF9QNF9NQVNLICAgIDB4MUYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfV0FLRUxQSV9TTE9UX1BHMyAgICAweDEzZjUKKyNkZWZpbmUgICAgUlRMODM2N0NfV0FLRUxQSV9TTE9UX1A3X09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1dBS0VMUElfU0xPVF9QN19NQVNLICAgIDB4MUYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19XQUtFTFBJX1NMT1RfUDZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfV0FLRUxQSV9TTE9UX1A2X01BU0sgICAgMHgxRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TWU5DX0ZJRk9fMCAgICAweDEzZjYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1lOQ19GSUZPX1RYX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NZTkNfRklGT19UWF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NZTkNfRklGT19SWF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TWU5DX0ZJRk9fUlhfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NZTkNfRklGT18xICAgIDB4MTNmNworI2RlZmluZSAgICBSVEw4MzY3Q19TWU5DX0ZJRk9fUlhfRVJSX1AxMF84X09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19TWU5DX0ZJRk9fUlhfRVJSX1AxMF84X01BU0sgICAgMHgzODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NZTkNfRklGT19UWF9FUlJfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1lOQ19GSUZPX1RYX0VSUl9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NZTkNfRklGT19SWF9FUlJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1lOQ19GSUZPX1JYX0VSUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUkdNX0VFRSAgICAweDEzZjgKKyNkZWZpbmUgICAgUlRMODM2N0NfRVhUMl9QQURfU1RPUF9FTl9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfRVhUMl9QQURfU1RPUF9FTl9NQVNLICAgIDB4NDAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19FWFQxX1BBRF9TVE9QX0VOX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19FWFQxX1BBRF9TVE9QX0VOX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VYVDBfUEFEX1NUT1BfRU5fT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0VYVDBfUEFEX1NUT1BfRU5fTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRVhUMl9DWUNMRV9QQURfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRVhUMl9DWUNMRV9QQURfTUFTSyAgICAweEYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19FWFQxX0NZQ0xFX1BBRF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19FWFQxX0NZQ0xFX1BBRF9NQVNLICAgIDB4RjAKKyNkZWZpbmUgICAgUlRMODM2N0NfRVhUMF9DWUNMRV9QQURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRVhUMF9DWUNMRV9QQURfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRVhUX1RYQ19ETFkgICAgMHgxM2Y5CisjZGVmaW5lICAgIFJUTDgzNjdDX0VYVDFfR01JSV9UWF9ERUxBWV9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfRVhUMV9HTUlJX1RYX0RFTEFZX01BU0sgICAgMHg3MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VYVDBfR01JSV9UWF9ERUxBWV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19FWFQwX0dNSUlfVFhfREVMQVlfTUFTSyAgICAweEUwMAorI2RlZmluZSAgICBSVEw4MzY3Q19FWFQyX1JHTUlJX1RYX0RFTEFZX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX0VYVDJfUkdNSUlfVFhfREVMQVlfTUFTSyAgICAweDFDMAorI2RlZmluZSAgICBSVEw4MzY3Q19FWFQxX1JHTUlJX1RYX0RFTEFZX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0VYVDFfUkdNSUlfVFhfREVMQVlfTUFTSyAgICAweDM4CisjZGVmaW5lICAgIFJUTDgzNjdDX0VYVDBfUkdNSUlfVFhfREVMQVlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRVhUMF9SR01JSV9UWF9ERUxBWV9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JT19NSVNDX0NUUkwgICAgMHgxM2ZhCisjZGVmaW5lICAgIFJUTDgzNjdDX0lPX0JVWlpFUl9FTl9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19JT19CVVpaRVJfRU5fTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfSU9fSU5UUlBUX0VOX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0lPX0lOVFJQVF9FTl9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19JT19OUkVTVE9SRV9FTl9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19JT19OUkVTVE9SRV9FTl9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19JT19VQVJUX0VOX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lPX1VBUlRfRU5fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQ0hJUF9EVU1NWV9OTyAgICAweDEzZmIKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0hJUF9EVU1NWV9OT19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19DSElQX0RVTU1ZX05PX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1JDX0NBTElCX0NGRyAgICAweDEzZmMKKyNkZWZpbmUgICAgUlRMODM2N0NfVFJJR19CVVJOX0VGVVNFX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1RSSUdfQlVSTl9FRlVTRV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FNUF9DQUxJQl9GQUlMX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0FNUF9DQUxJQl9GQUlMX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUl9DQUxJQl9GQUlMX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1JfQ0FMSUJfRkFJTF9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0NBTElCX01PREVfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0NBTElCX01PREVfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NFTlRFUl9QT1JUX1NFTF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19DRU5URVJfUE9SVF9TRUxfTUFTSyAgICAweDM4CisjZGVmaW5lICAgIFJUTDgzNjdDX0NBTElCX0ZJTklTSF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19DQUxJQl9GSU5JU0hfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0NBTElCX09QVElPTl9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfQ0FMSUJfT1BUSU9OX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19DQUxJQl9FTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfQ0FMSUJfRU5fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfV0FLRUxQSV9TTE9UX1BHNCAgICAweDEzZmQKKyNkZWZpbmUgICAgUlRMODM2N0NfV0FLRUxQSV9TTE9UX1A5X09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1dBS0VMUElfU0xPVF9QOV9NQVNLICAgIDB4MUYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19XQUtFTFBJX1NMT1RfUDhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfV0FLRUxQSV9TTE9UX1A4X01BU0sgICAgMHgxRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19XQUtFTFBJX1NMT1RfUEc1ICAgIDB4MTNmZQorI2RlZmluZSAgICBSVEw4MzY3Q19XQUtFTFBJX1NMT1RfUEc1X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1dBS0VMUElfU0xPVF9QRzVfTUFTSyAgICAweDFGCisKKy8qICgxNidoMTQwMCltdHJwb29sX3JlZyAqLworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NRVRFUjBfUkFURV9DVFJMMCAgICAweDE0MDAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIwX1JBVEVfQ1RSTDEgICAgMHgxNDAxCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSMF9SQVRFX0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSMF9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMV9SQVRFX0NUUkwwICAgIDB4MTQwMgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NRVRFUjFfUkFURV9DVFJMMSAgICAweDE0MDMKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIxX1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIxX1JBVEVfQ1RSTDFfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIyX1JBVEVfQ1RSTDAgICAgMHgxNDA0CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMl9SQVRFX0NUUkwxICAgIDB4MTQwNQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjJfUkFURV9DVFJMMV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjJfUkFURV9DVFJMMV9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NRVRFUjNfUkFURV9DVFJMMCAgICAweDE0MDYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIzX1JBVEVfQ1RSTDEgICAgMHgxNDA3CisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSM19SQVRFX0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSM19SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNF9SQVRFX0NUUkwwICAgIDB4MTQwOAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NRVRFUjRfUkFURV9DVFJMMSAgICAweDE0MDkKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI0X1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI0X1JBVEVfQ1RSTDFfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVI1X1JBVEVfQ1RSTDAgICAgMHgxNDBhCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNV9SQVRFX0NUUkwxICAgIDB4MTQwYgorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjVfUkFURV9DVFJMMV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjVfUkFURV9DVFJMMV9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NRVRFUjZfUkFURV9DVFJMMCAgICAweDE0MGMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVI2X1JBVEVfQ1RSTDEgICAgMHgxNDBkCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSNl9SQVRFX0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSNl9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSN19SQVRFX0NUUkwwICAgIDB4MTQwZQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NRVRFUjdfUkFURV9DVFJMMSAgICAweDE0MGYKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI3X1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI3X1JBVEVfQ1RSTDFfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVI4X1JBVEVfQ1RSTDAgICAgMHgxNDEwCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSOF9SQVRFX0NUUkwxICAgIDB4MTQxMQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjhfUkFURV9DVFJMMV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjhfUkFURV9DVFJMMV9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NRVRFUjlfUkFURV9DVFJMMCAgICAweDE0MTIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVI5X1JBVEVfQ1RSTDEgICAgMHgxNDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSOV9SQVRFX0NUUkwxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSOV9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMTBfUkFURV9DVFJMMCAgICAweDE0MTQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIxMF9SQVRFX0NUUkwxICAgIDB4MTQxNQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjEwX1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIxMF9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMTFfUkFURV9DVFJMMCAgICAweDE0MTYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIxMV9SQVRFX0NUUkwxICAgIDB4MTQxNworI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjExX1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIxMV9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMTJfUkFURV9DVFJMMCAgICAweDE0MTgKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIxMl9SQVRFX0NUUkwxICAgIDB4MTQxOQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjEyX1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIxMl9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMTNfUkFURV9DVFJMMCAgICAweDE0MWEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIxM19SQVRFX0NUUkwxICAgIDB4MTQxYgorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjEzX1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIxM19SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMTRfUkFURV9DVFJMMCAgICAweDE0MWMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIxNF9SQVRFX0NUUkwxICAgIDB4MTQxZAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjE0X1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIxNF9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMTVfUkFURV9DVFJMMCAgICAweDE0MWUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIxNV9SQVRFX0NUUkwxICAgIDB4MTQxZgorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjE1X1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIxNV9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMTZfUkFURV9DVFJMMCAgICAweDE0MjAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIxNl9SQVRFX0NUUkwxICAgIDB4MTQyMQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjE2X1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIxNl9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMTdfUkFURV9DVFJMMCAgICAweDE0MjIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIxN19SQVRFX0NUUkwxICAgIDB4MTQyMworI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjE3X1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIxN19SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMThfUkFURV9DVFJMMCAgICAweDE0MjQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIxOF9SQVRFX0NUUkwxICAgIDB4MTQyNQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjE4X1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIxOF9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMTlfUkFURV9DVFJMMCAgICAweDE0MjYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIxOV9SQVRFX0NUUkwxICAgIDB4MTQyNworI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjE5X1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIxOV9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMjBfUkFURV9DVFJMMCAgICAweDE0MjgKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIyMF9SQVRFX0NUUkwxICAgIDB4MTQyOQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjIwX1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIyMF9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMjFfUkFURV9DVFJMMCAgICAweDE0MmEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIyMV9SQVRFX0NUUkwxICAgIDB4MTQyYgorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjIxX1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIyMV9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMjJfUkFURV9DVFJMMCAgICAweDE0MmMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIyMl9SQVRFX0NUUkwxICAgIDB4MTQyZAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjIyX1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIyMl9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMjNfUkFURV9DVFJMMCAgICAweDE0MmUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIyM19SQVRFX0NUUkwxICAgIDB4MTQyZgorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjIzX1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIyM19SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMjRfUkFURV9DVFJMMCAgICAweDE0MzAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIyNF9SQVRFX0NUUkwxICAgIDB4MTQzMQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjI0X1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIyNF9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMjVfUkFURV9DVFJMMCAgICAweDE0MzIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIyNV9SQVRFX0NUUkwxICAgIDB4MTQzMworI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjI1X1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIyNV9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMjZfUkFURV9DVFJMMCAgICAweDE0MzQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIyNl9SQVRFX0NUUkwxICAgIDB4MTQzNQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjI2X1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIyNl9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMjdfUkFURV9DVFJMMCAgICAweDE0MzYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIyN19SQVRFX0NUUkwxICAgIDB4MTQzNworI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjI3X1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIyN19SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMjhfUkFURV9DVFJMMCAgICAweDE0MzgKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIyOF9SQVRFX0NUUkwxICAgIDB4MTQzOQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjI4X1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIyOF9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMjlfUkFURV9DVFJMMCAgICAweDE0M2EKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIyOV9SQVRFX0NUUkwxICAgIDB4MTQzYgorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjI5X1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIyOV9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMzBfUkFURV9DVFJMMCAgICAweDE0M2MKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIzMF9SQVRFX0NUUkwxICAgIDB4MTQzZAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjMwX1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIzMF9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMzFfUkFURV9DVFJMMCAgICAweDE0M2UKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIzMV9SQVRFX0NUUkwxICAgIDB4MTQzZgorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjMxX1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIzMV9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSX01PREVfU0VUVElORzAgICAgMHgxNDQwCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSX01PREVfU0VUVElORzEgICAgMHgxNDQxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSX01PREVfVE9LRU5fQ0ZHICAgIDB4MTQ0MgorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUl9NT0RFX1RPS0VOX0NGR19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUl9NT0RFX1RPS0VOX0NGR19NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMF9CVUNLRVRfU0laRSAgICAweDE2MDAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIxX0JVQ0tFVF9TSVpFICAgIDB4MTYwMQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NRVRFUjJfQlVDS0VUX1NJWkUgICAgMHgxNjAyCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSM19CVUNLRVRfU0laRSAgICAweDE2MDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVI0X0JVQ0tFVF9TSVpFICAgIDB4MTYwNAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NRVRFUjVfQlVDS0VUX1NJWkUgICAgMHgxNjA1CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNl9CVUNLRVRfU0laRSAgICAweDE2MDYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVI3X0JVQ0tFVF9TSVpFICAgIDB4MTYwNworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NRVRFUjhfQlVDS0VUX1NJWkUgICAgMHgxNjA4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSOV9CVUNLRVRfU0laRSAgICAweDE2MDkKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIxMF9CVUNLRVRfU0laRSAgICAweDE2MGEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIxMV9CVUNLRVRfU0laRSAgICAweDE2MGIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIxMl9CVUNLRVRfU0laRSAgICAweDE2MGMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIxM19CVUNLRVRfU0laRSAgICAweDE2MGQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIxNF9CVUNLRVRfU0laRSAgICAweDE2MGUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIxNV9CVUNLRVRfU0laRSAgICAweDE2MGYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIxNl9CVUNLRVRfU0laRSAgICAweDE2MTAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIxN19CVUNLRVRfU0laRSAgICAweDE2MTEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIxOF9CVUNLRVRfU0laRSAgICAweDE2MTIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIxOV9CVUNLRVRfU0laRSAgICAweDE2MTMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIyMF9CVUNLRVRfU0laRSAgICAweDE2MTQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIyMV9CVUNLRVRfU0laRSAgICAweDE2MTUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIyMl9CVUNLRVRfU0laRSAgICAweDE2MTYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIyM19CVUNLRVRfU0laRSAgICAweDE2MTcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIyNF9CVUNLRVRfU0laRSAgICAweDE2MTgKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIyNV9CVUNLRVRfU0laRSAgICAweDE2MTkKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIyNl9CVUNLRVRfU0laRSAgICAweDE2MWEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIyN19CVUNLRVRfU0laRSAgICAweDE2MWIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIyOF9CVUNLRVRfU0laRSAgICAweDE2MWMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIyOV9CVUNLRVRfU0laRSAgICAweDE2MWQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIzMF9CVUNLRVRfU0laRSAgICAweDE2MWUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIzMV9CVUNLRVRfU0laRSAgICAweDE2MWYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVJfQ1RSTDAgICAgMHgxNzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSX09QX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSX09QX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVJfVElDS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUl9USUNLX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NRVRFUl9DVFJMMSAgICAweDE3MDEKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVJfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVJfQ1RSTDFfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSX09WRVJSQVRFX0lORElDQVRPUjAgICAgMHgxNzAyCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSX09WRVJSQVRFX0lORElDQVRPUjEgICAgMHgxNzAzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSX09WRVJSQVRFX0lORElDQVRPUjBfODA1MSAgICAweDE3MDQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVJfT1ZFUlJBVEVfSU5ESUNBVE9SMV84MDUxICAgIDB4MTcwNQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NRVRFUl9JRkdfQ1RSTDAgICAgMHgxNzEyCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSMTVfSUZHX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjE1X0lGR19NQVNLICAgIDB4ODAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjE0X0lGR19PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIxNF9JRkdfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIxM19JRkdfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSMTNfSUZHX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSMTJfSUZHX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjEyX0lGR19NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjExX0lGR19PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIxMV9JRkdfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjEwX0lGR19PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIxMF9JRkdfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjlfSUZHX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSOV9JRkdfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjhfSUZHX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSOF9JRkdfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjdfSUZHX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSN19JRkdfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSNl9JRkdfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI2X0lGR19NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI1X0lGR19PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjVfSUZHX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjRfSUZHX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSNF9JRkdfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSM19JRkdfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIzX0lGR19NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjJfSUZHX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSMl9JRkdfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIxX0lGR19PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjFfSUZHX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSMF9JRkdfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIwX0lGR19NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NRVRFUl9JRkdfQ1RSTDEgICAgMHgxNzEzCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSMzFfSUZHX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjMxX0lGR19NQVNLICAgIDB4ODAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjMwX0lGR19PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIzMF9JRkdfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIyOV9JRkdfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSMjlfSUZHX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSMjhfSUZHX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjI4X0lGR19NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjI3X0lGR19PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIyN19JRkdfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjI2X0lGR19PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIyNl9JRkdfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjI1X0lGR19PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjI1X0lGR19NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSMjRfSUZHX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSMjRfSUZHX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIyM19JRkdfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIyM19JRkdfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSMjJfSUZHX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSMjJfSUZHX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjIxX0lGR19PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjIxX0lGR19NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIyMF9JRkdfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIyMF9JRkdfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSMTlfSUZHX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSMTlfSUZHX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSMThfSUZHX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSMThfSUZHX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSMTdfSUZHX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSMTdfSUZHX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSMTZfSUZHX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSMTZfSUZHX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSX0NUUkwyICAgIDB4MTcyMgorI2RlZmluZSAgICBSVEw4MzY3Q19jZmdfbXRyX3RpY2tfOGdfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfY2ZnX210cl90aWNrXzhnX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX2NmZ19tdHJfZGVjX2NudF84Z19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19jZmdfbXRyX2RlY19jbnRfOGdfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RVTU1ZXzE3MjMgICAgMHgxNzIzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RVTU1ZXzE3MjQgICAgMHgxNzI0CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RVTU1ZXzE3MjUgICAgMHgxNzI1CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RVTU1ZXzE3MjYgICAgMHgxNzI2CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RVTU1ZXzE3MjcgICAgMHgxNzI3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RVTU1ZXzE3MjggICAgMHgxNzI4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RVTU1ZXzE3MjkgICAgMHgxNzI5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RVTU1ZXzE3MkEgICAgMHgxNzJhCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RVTU1ZXzE3MkIgICAgMHgxNzJiCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RVTU1ZXzE3MkMgICAgMHgxNzJjCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RVTU1ZXzE3MkQgICAgMHgxNzJkCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RVTU1ZXzE3MkUgICAgMHgxNzJlCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RVTU1ZXzE3MkYgICAgMHgxNzJmCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RVTU1ZXzE3MzAgICAgMHgxNzMwCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0RVTU1ZXzE3MzEgICAgMHgxNzMxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMzJfUkFURV9DVFJMMCAgICAweDE3NDAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIzMl9SQVRFX0NUUkwxICAgIDB4MTc0MQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjMyX1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIzMl9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMzNfUkFURV9DVFJMMCAgICAweDE3NDIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIzM19SQVRFX0NUUkwxICAgIDB4MTc0MworI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjMzX1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIzM19SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMzRfUkFURV9DVFJMMCAgICAweDE3NDQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIzNF9SQVRFX0NUUkwxICAgIDB4MTc0NQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjM0X1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIzNF9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMzVfUkFURV9DVFJMMCAgICAweDE3NDYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIzNV9SQVRFX0NUUkwxICAgIDB4MTc0NworI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjM1X1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIzNV9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMzZfUkFURV9DVFJMMCAgICAweDE3NDgKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIzNl9SQVRFX0NUUkwxICAgIDB4MTc0OQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjM2X1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIzNl9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMzdfUkFURV9DVFJMMCAgICAweDE3NGEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIzN19SQVRFX0NUUkwxICAgIDB4MTc0YgorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjM3X1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIzN19SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMzhfUkFURV9DVFJMMCAgICAweDE3NGMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIzOF9SQVRFX0NUUkwxICAgIDB4MTc0ZAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjM4X1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIzOF9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMzlfUkFURV9DVFJMMCAgICAweDE3NGUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVIzOV9SQVRFX0NUUkwxICAgIDB4MTc0ZgorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjM5X1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIzOV9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNDBfUkFURV9DVFJMMCAgICAweDE3NTAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVI0MF9SQVRFX0NUUkwxICAgIDB4MTc1MQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjQwX1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI0MF9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNDFfUkFURV9DVFJMMCAgICAweDE3NTIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVI0MV9SQVRFX0NUUkwxICAgIDB4MTc1MworI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjQxX1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI0MV9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNDJfUkFURV9DVFJMMCAgICAweDE3NTQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVI0Ml9SQVRFX0NUUkwxICAgIDB4MTc1NQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjQyX1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI0Ml9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNDNfUkFURV9DVFJMMCAgICAweDE3NTYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVI0M19SQVRFX0NUUkwxICAgIDB4MTc1NworI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjQzX1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI0M19SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNDRfUkFURV9DVFJMMCAgICAweDE3NTgKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVI0NF9SQVRFX0NUUkwxICAgIDB4MTc1OQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjQ0X1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI0NF9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNDVfUkFURV9DVFJMMCAgICAweDE3NWEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVI0NV9SQVRFX0NUUkwxICAgIDB4MTc1YgorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjQ1X1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI0NV9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNDZfUkFURV9DVFJMMCAgICAweDE3NWMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVI0Nl9SQVRFX0NUUkwxICAgIDB4MTc1ZAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjQ2X1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI0Nl9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNDdfUkFURV9DVFJMMCAgICAweDE3NWUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVI0N19SQVRFX0NUUkwxICAgIDB4MTc1ZgorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjQ3X1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI0N19SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNDhfUkFURV9DVFJMMCAgICAweDE3NjAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVI0OF9SQVRFX0NUUkwxICAgIDB4MTc2MQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjQ4X1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI0OF9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNDlfUkFURV9DVFJMMCAgICAweDE3NjIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVI0OV9SQVRFX0NUUkwxICAgIDB4MTc2MworI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjQ5X1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI0OV9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNTBfUkFURV9DVFJMMCAgICAweDE3NjQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVI1MF9SQVRFX0NUUkwxICAgIDB4MTc2NQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjUwX1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI1MF9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNTFfUkFURV9DVFJMMCAgICAweDE3NjYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVI1MV9SQVRFX0NUUkwxICAgIDB4MTc2NworI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjUxX1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI1MV9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNTJfUkFURV9DVFJMMCAgICAweDE3NjgKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVI1Ml9SQVRFX0NUUkwxICAgIDB4MTc2OQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjUyX1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI1Ml9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNTNfUkFURV9DVFJMMCAgICAweDE3NmEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVI1M19SQVRFX0NUUkwxICAgIDB4MTc2YgorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjUzX1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI1M19SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNTRfUkFURV9DVFJMMCAgICAweDE3NmMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVI1NF9SQVRFX0NUUkwxICAgIDB4MTc2ZAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjU0X1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI1NF9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNTVfUkFURV9DVFJMMCAgICAweDE3NmUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVI1NV9SQVRFX0NUUkwxICAgIDB4MTc2ZgorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjU1X1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI1NV9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNTZfUkFURV9DVFJMMCAgICAweDE3NzAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVI1Nl9SQVRFX0NUUkwxICAgIDB4MTc3MQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjU2X1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI1Nl9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNTdfUkFURV9DVFJMMCAgICAweDE3NzIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVI1N19SQVRFX0NUUkwxICAgIDB4MTc3MworI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjU3X1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI1N19SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNThfUkFURV9DVFJMMCAgICAweDE3NzQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVI1OF9SQVRFX0NUUkwxICAgIDB4MTc3NQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjU4X1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI1OF9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNTlfUkFURV9DVFJMMCAgICAweDE3NzYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVI1OV9SQVRFX0NUUkwxICAgIDB4MTc3NworI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjU5X1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI1OV9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNjBfUkFURV9DVFJMMCAgICAweDE3NzgKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVI2MF9SQVRFX0NUUkwxICAgIDB4MTc3OQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjYwX1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI2MF9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNjFfUkFURV9DVFJMMCAgICAweDE3N2EKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVI2MV9SQVRFX0NUUkwxICAgIDB4MTc3YgorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjYxX1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI2MV9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNjJfUkFURV9DVFJMMCAgICAweDE3N2MKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVI2Ml9SQVRFX0NUUkwxICAgIDB4MTc3ZAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjYyX1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI2Ml9SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNjNfUkFURV9DVFJMMCAgICAweDE3N2UKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVI2M19SQVRFX0NUUkwxICAgIDB4MTc3ZgorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjYzX1JBVEVfQ1RSTDFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI2M19SQVRFX0NUUkwxX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSX01PREVfU0VUVElORzIgICAgMHgxNzgwCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSX01PREVfU0VUVElORzMgICAgMHgxNzgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMzJfQlVDS0VUX1NJWkUgICAgMHgxNzkwCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMzNfQlVDS0VUX1NJWkUgICAgMHgxNzkxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMzRfQlVDS0VUX1NJWkUgICAgMHgxNzkyCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMzVfQlVDS0VUX1NJWkUgICAgMHgxNzkzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMzZfQlVDS0VUX1NJWkUgICAgMHgxNzk0CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMzdfQlVDS0VUX1NJWkUgICAgMHgxNzk1CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMzhfQlVDS0VUX1NJWkUgICAgMHgxNzk2CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSMzlfQlVDS0VUX1NJWkUgICAgMHgxNzk3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNDBfQlVDS0VUX1NJWkUgICAgMHgxNzk4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNDFfQlVDS0VUX1NJWkUgICAgMHgxNzk5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNDJfQlVDS0VUX1NJWkUgICAgMHgxNzlhCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNDNfQlVDS0VUX1NJWkUgICAgMHgxNzliCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNDRfQlVDS0VUX1NJWkUgICAgMHgxNzljCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNDVfQlVDS0VUX1NJWkUgICAgMHgxNzlkCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNDZfQlVDS0VUX1NJWkUgICAgMHgxNzllCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNDdfQlVDS0VUX1NJWkUgICAgMHgxNzlmCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNDhfQlVDS0VUX1NJWkUgICAgMHgxN2EwCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNDlfQlVDS0VUX1NJWkUgICAgMHgxN2ExCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNTBfQlVDS0VUX1NJWkUgICAgMHgxN2EyCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNTFfQlVDS0VUX1NJWkUgICAgMHgxN2EzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNTJfQlVDS0VUX1NJWkUgICAgMHgxN2E0CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNTNfQlVDS0VUX1NJWkUgICAgMHgxN2E1CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNTRfQlVDS0VUX1NJWkUgICAgMHgxN2E2CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNTVfQlVDS0VUX1NJWkUgICAgMHgxN2E3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNTZfQlVDS0VUX1NJWkUgICAgMHgxN2E4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNTdfQlVDS0VUX1NJWkUgICAgMHgxN2E5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNThfQlVDS0VUX1NJWkUgICAgMHgxN2FhCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNTlfQlVDS0VUX1NJWkUgICAgMHgxN2FiCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNjBfQlVDS0VUX1NJWkUgICAgMHgxN2FjCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNjFfQlVDS0VUX1NJWkUgICAgMHgxN2FkCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNjJfQlVDS0VUX1NJWkUgICAgMHgxN2FlCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSNjNfQlVDS0VUX1NJWkUgICAgMHgxN2FmCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSX09WRVJSQVRFX0lORElDQVRPUjIgICAgMHgxN2IwCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSX09WRVJSQVRFX0lORElDQVRPUjMgICAgMHgxN2IxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSX09WRVJSQVRFX0lORElDQVRPUjJfODA1MSAgICAweDE3YjIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVJfT1ZFUlJBVEVfSU5ESUNBVE9SM184MDUxICAgIDB4MTdiMworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NRVRFUl9JRkdfQ1RSTDIgICAgMHgxN2I0CisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSNDdfSUZHX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjQ3X0lGR19NQVNLICAgIDB4ODAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjQ2X0lGR19PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI0Nl9JRkdfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI0NV9JRkdfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSNDVfSUZHX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSNDRfSUZHX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjQ0X0lGR19NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjQzX0lGR19PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI0M19JRkdfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjQyX0lGR19PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI0Ml9JRkdfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjQxX0lGR19PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjQxX0lGR19NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSNDBfSUZHX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSNDBfSUZHX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIzOV9JRkdfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIzOV9JRkdfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSMzhfSUZHX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSMzhfSUZHX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjM3X0lGR19PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjM3X0lGR19NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIzNl9JRkdfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVIzNl9JRkdfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSMzVfSUZHX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSMzVfSUZHX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSMzRfSUZHX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSMzRfSUZHX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSMzNfSUZHX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSMzNfSUZHX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSMzJfSUZHX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSMzJfSUZHX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01FVEVSX0lGR19DVFJMMyAgICAweDE3YjUKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI2M19JRkdfT0ZGU0VUICAgIDE1CisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSNjNfSUZHX01BU0sgICAgMHg4MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSNjJfSUZHX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjYyX0lGR19NQVNLICAgIDB4NDAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjYxX0lGR19PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI2MV9JRkdfTUFTSyAgICAweDIwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI2MF9JRkdfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSNjBfSUZHX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSNTlfSUZHX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjU5X0lGR19NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSNThfSUZHX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjU4X0lGR19NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSNTdfSUZHX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSNTdfSUZHX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI1Nl9JRkdfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI1Nl9JRkdfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjU1X0lGR19PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjU1X0lGR19NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI1NF9JRkdfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI1NF9JRkdfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSNTNfSUZHX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX01FVEVSNTNfSUZHX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjUyX0lGR19PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUjUyX0lGR19NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI1MV9JRkdfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI1MV9JRkdfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI1MF9JRkdfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI1MF9JRkdfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI0OV9JRkdfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI0OV9JRkdfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI0OF9JRkdfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVI0OF9JRkdfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTUVURVJfTUlTQyAgICAweDE3YjYKKyNkZWZpbmUgICAgUlRMODM2N0NfTUVURVJfTUlTQ19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19NRVRFUl9NSVNDX01BU0sgICAgMHgxCisKKy8qICgxNidoMTgwMCk4MDUxX1JMRFBfRUVFX3JlZyAqLworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX0NUUkwwICAgIDB4MTgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVMTERQX1NVQlRZUEVfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFTExEUF9TVUJUWVBFX01BU0sgICAgMHgzRkMwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRUxMRFBfVFJBUF84MDUxX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRUxMRFBfVFJBUF84MDUxX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRUxMRFBfVFJBUF9DUFVfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFTExEUF9UUkFQX0NQVV9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVMTERQX0VOQUJMRV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVMTERQX0VOQUJMRV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX1BNU0sgICAgMHgxODIyCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRUxMRFBfUE1TS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVMTERQX1BNU0tfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX1JYX1ZBTFVFX1AwMF8wOCAgICAweDE4NDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9SWF9WQUxVRV9QMDBfMDcgICAgMHgxODQ0CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUlhfVkFMVUVfUDAwXzA2ICAgIDB4MTg0NQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX1JYX1ZBTFVFX1AwMF8wNSAgICAweDE4NDYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9SWF9WQUxVRV9QMDBfMDQgICAgMHgxODQ3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUlhfVkFMVUVfUDAwXzAzICAgIDB4MTg0OAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX1JYX1ZBTFVFX1AwMF8wMiAgICAweDE4NDkKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9SWF9WQUxVRV9QMDBfMDEgICAgMHgxODRhCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUlhfVkFMVUVfUDAwXzAwICAgIDB4MTg0YgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX1JYX1ZBTFVFX1AwMV8wOCAgICAweDE4NGMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9SWF9WQUxVRV9QMDFfMDcgICAgMHgxODRkCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUlhfVkFMVUVfUDAxXzA2ICAgIDB4MTg0ZQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX1JYX1ZBTFVFX1AwMV8wNSAgICAweDE4NGYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9SWF9WQUxVRV9QMDFfMDQgICAgMHgxODUwCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUlhfVkFMVUVfUDAxXzAzICAgIDB4MTg1MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX1JYX1ZBTFVFX1AwMV8wMiAgICAweDE4NTIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9SWF9WQUxVRV9QMDFfMDEgICAgMHgxODUzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUlhfVkFMVUVfUDAxXzAwICAgIDB4MTg1NAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX1JYX1ZBTFVFX1AwMl8wOCAgICAweDE4NTUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9SWF9WQUxVRV9QMDJfMDcgICAgMHgxODU2CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUlhfVkFMVUVfUDAyXzA2ICAgIDB4MTg1NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX1JYX1ZBTFVFX1AwMl8wNSAgICAweDE4NTgKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9SWF9WQUxVRV9QMDJfMDQgICAgMHgxODU5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUlhfVkFMVUVfUDAyXzAzICAgIDB4MTg1YQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX1JYX1ZBTFVFX1AwMl8wMiAgICAweDE4NWIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9SWF9WQUxVRV9QMDJfMDEgICAgMHgxODVjCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUlhfVkFMVUVfUDAyXzAwICAgIDB4MTg1ZAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX1JYX1ZBTFVFX1AwM18wOCAgICAweDE4NWUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9SWF9WQUxVRV9QMDNfMDcgICAgMHgxODVmCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUlhfVkFMVUVfUDAzXzA2ICAgIDB4MTg2MAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX1JYX1ZBTFVFX1AwM18wNSAgICAweDE4NjEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9SWF9WQUxVRV9QMDNfMDQgICAgMHgxODYyCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUlhfVkFMVUVfUDAzXzAzICAgIDB4MTg2MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX1JYX1ZBTFVFX1AwM18wMiAgICAweDE4NjQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9SWF9WQUxVRV9QMDNfMDEgICAgMHgxODY1CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUlhfVkFMVUVfUDAzXzAwICAgIDB4MTg2NgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX1JYX1ZBTFVFX1AwNF8wOCAgICAweDE4NjcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9SWF9WQUxVRV9QMDRfMDcgICAgMHgxODY4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUlhfVkFMVUVfUDA0XzA2ICAgIDB4MTg2OQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX1JYX1ZBTFVFX1AwNF8wNSAgICAweDE4NmEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9SWF9WQUxVRV9QMDRfMDQgICAgMHgxODZiCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUlhfVkFMVUVfUDA0XzAzICAgIDB4MTg2YworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX1JYX1ZBTFVFX1AwNF8wMiAgICAweDE4NmQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9SWF9WQUxVRV9QMDRfMDEgICAgMHgxODZlCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUlhfVkFMVUVfUDA0XzAwICAgIDB4MTg2ZgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX1JYX1ZBTFVFX1AwNV8wOCAgICAweDE4NzAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9SWF9WQUxVRV9QMDVfMDcgICAgMHgxODcxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUlhfVkFMVUVfUDA1XzA2ICAgIDB4MTg3MgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX1JYX1ZBTFVFX1AwNV8wNSAgICAweDE4NzMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9SWF9WQUxVRV9QMDVfMDQgICAgMHgxODc0CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUlhfVkFMVUVfUDA1XzAzICAgIDB4MTg3NQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX1JYX1ZBTFVFX1AwNV8wMiAgICAweDE4NzYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9SWF9WQUxVRV9QMDVfMDEgICAgMHgxODc3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUlhfVkFMVUVfUDA1XzAwICAgIDB4MTg3OAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX1JYX1ZBTFVFX1AwNl8wOCAgICAweDE4NzkKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9SWF9WQUxVRV9QMDZfMDcgICAgMHgxODdhCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUlhfVkFMVUVfUDA2XzA2ICAgIDB4MTg3YgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX1JYX1ZBTFVFX1AwNl8wNSAgICAweDE4N2MKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9SWF9WQUxVRV9QMDZfMDQgICAgMHgxODdkCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUlhfVkFMVUVfUDA2XzAzICAgIDB4MTg3ZQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX1JYX1ZBTFVFX1AwNl8wMiAgICAweDE4N2YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9SWF9WQUxVRV9QMDZfMDEgICAgMHgxODgwCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUlhfVkFMVUVfUDA2XzAwICAgIDB4MTg4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX1JYX1ZBTFVFX1AwN18wOCAgICAweDE4ODIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9SWF9WQUxVRV9QMDdfMDcgICAgMHgxODgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUlhfVkFMVUVfUDA3XzA2ICAgIDB4MTg4NAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX1JYX1ZBTFVFX1AwN18wNSAgICAweDE4ODUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9SWF9WQUxVRV9QMDdfMDQgICAgMHgxODg2CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUlhfVkFMVUVfUDA3XzAzICAgIDB4MTg4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX1JYX1ZBTFVFX1AwN18wMiAgICAweDE4ODgKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9SWF9WQUxVRV9QMDdfMDEgICAgMHgxODg5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUlhfVkFMVUVfUDA3XzAwICAgIDB4MTg4YQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX1JYX1ZBTFVFX1AwOF8wOCAgICAweDE4OGIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9SWF9WQUxVRV9QMDhfMDcgICAgMHgxODhjCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUlhfVkFMVUVfUDA4XzA2ICAgIDB4MTg4ZAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX1JYX1ZBTFVFX1AwOF8wNSAgICAweDE4OGUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9SWF9WQUxVRV9QMDhfMDQgICAgMHgxODhmCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUlhfVkFMVUVfUDA4XzAzICAgIDB4MTg5MAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX1JYX1ZBTFVFX1AwOF8wMiAgICAweDE4OTEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9SWF9WQUxVRV9QMDhfMDEgICAgMHgxODkyCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUlhfVkFMVUVfUDA4XzAwICAgIDB4MTg5MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX1JYX1ZBTFVFX1AwOV8wOCAgICAweDE4OTQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9SWF9WQUxVRV9QMDlfMDcgICAgMHgxODk1CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUlhfVkFMVUVfUDA5XzA2ICAgIDB4MTg5NgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX1JYX1ZBTFVFX1AwOV8wNSAgICAweDE4OTcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9SWF9WQUxVRV9QMDlfMDQgICAgMHgxODk4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUlhfVkFMVUVfUDA5XzAzICAgIDB4MTg5OQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX1JYX1ZBTFVFX1AwOV8wMiAgICAweDE4OWEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9SWF9WQUxVRV9QMDlfMDEgICAgMHgxODliCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUlhfVkFMVUVfUDA5XzAwICAgIDB4MTg5YworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX1JYX1ZBTFVFX1AxMF8wOCAgICAweDE4OWQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9SWF9WQUxVRV9QMTBfMDcgICAgMHgxODllCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUlhfVkFMVUVfUDEwXzA2ICAgIDB4MTg5ZgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX1JYX1ZBTFVFX1AxMF8wNSAgICAweDE4YTAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9SWF9WQUxVRV9QMTBfMDQgICAgMHgxOGExCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUlhfVkFMVUVfUDEwXzAzICAgIDB4MThhMgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVMTERQX1JYX1ZBTFVFX1AxMF8wMiAgICAweDE4YTMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFTExEUF9SWF9WQUxVRV9QMTBfMDEgICAgMHgxOGE0CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRUxMRFBfUlhfVkFMVUVfUDEwXzAwICAgIDB4MThhNQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19STERQX0NUUkwwICAgIDB4MThlMAorI2RlZmluZSAgICBSVEw4MzY3Q19STERQX1RSSUdHRVJfTU9ERV9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfUkxEUF9UUklHR0VSX01PREVfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUkxEUF84MDUxX0xPT1BfUE9SVE1TS19PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19STERQXzgwNTFfTE9PUF9QT1JUTVNLX01BU0sgICAgMHgzRkMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JMUFBfODA1MV9UUkFQX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1JMUFBfODA1MV9UUkFQX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19STERQX0lORElDQVRPUl9TT1VSQ0VfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUkxEUF9JTkRJQ0FUT1JfU09VUkNFX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19STERQX0dFTl9SQU5ET01fT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfUkxEUF9HRU5fUkFORE9NX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX1JMRFBfQ09NUF9JRF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19STERQX0NPTVBfSURfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUkxEUF84MDUxX0VOQUJMRV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19STERQXzgwNTFfRU5BQkxFX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX1JMRFBfRU5BQkxFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JMRFBfRU5BQkxFX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1JMRFBfQ1RSTDEgICAgMHgxOGUxCisjZGVmaW5lICAgIFJUTDgzNjdDX1JMRFBfUkVUUllfQ09VTlRfTE9PUFNUQVRFX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1JMRFBfUkVUUllfQ09VTlRfTE9PUFNUQVRFX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JMRFBfUkVUUllfQ09VTlRfQ0hLU1RBVEVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUkxEUF9SRVRSWV9DT1VOVF9DSEtTVEFURV9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUkxEUF9DVFJMMiAgICAweDE4ZTIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUkxEUF9DVFJMMyAgICAweDE4ZTMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUkxEUF9DVFJMNCAgICAweDE4ZTQKKyNkZWZpbmUgICAgUlRMODM2N0NfUkxEUF9DVFJMNF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19STERQX0NUUkw0X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUkxEUF9SQU5EX05VTTAgICAgMHgxOGU1CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1JMRFBfUkFORF9OVU0xICAgIDB4MThlNgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19STERQX1JBTkRfTlVNMiAgICAweDE4ZTcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUkxEUF9NQUdJQ19OVU0wICAgIDB4MThlOAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19STERQX01BR0lDX05VTTEgICAgMHgxOGU5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1JMRFBfTUFHSUNfTlVNMiAgICAweDE4ZWEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUkxEUF9MT09QRURfSU5ESUNBVE9SICAgIDB4MThlYgorI2RlZmluZSAgICBSVEw4MzY3Q19STERQX0xPT1BFRF9JTkRJQ0FUT1JfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUkxEUF9MT09QRURfSU5ESUNBVE9SX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUkxEUF9MT09QX1BPUlRfUkVHMCAgICAweDE4ZWMKKyNkZWZpbmUgICAgUlRMODM2N0NfUkxEUF9MT09QX1BPUlRfMDFfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUkxEUF9MT09QX1BPUlRfMDFfTUFTSyAgICAweEYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19STERQX0xPT1BfUE9SVF8wMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19STERQX0xPT1BfUE9SVF8wMF9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19STERQX0xPT1BfUE9SVF9SRUcxICAgIDB4MThlZAorI2RlZmluZSAgICBSVEw4MzY3Q19STERQX0xPT1BfUE9SVF8wM19PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19STERQX0xPT1BfUE9SVF8wM19NQVNLICAgIDB4RjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JMRFBfTE9PUF9QT1JUXzAyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JMRFBfTE9PUF9QT1JUXzAyX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1JMRFBfTE9PUF9QT1JUX1JFRzIgICAgMHgxOGVlCisjZGVmaW5lICAgIFJUTDgzNjdDX1JMRFBfTE9PUF9QT1JUXzA1X09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1JMRFBfTE9PUF9QT1JUXzA1X01BU0sgICAgMHhGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUkxEUF9MT09QX1BPUlRfMDRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUkxEUF9MT09QX1BPUlRfMDRfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUkxEUF9MT09QX1BPUlRfUkVHMyAgICAweDE4ZWYKKyNkZWZpbmUgICAgUlRMODM2N0NfUkxEUF9MT09QX1BPUlRfMDdfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUkxEUF9MT09QX1BPUlRfMDdfTUFTSyAgICAweEYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19STERQX0xPT1BfUE9SVF8wNl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19STERQX0xPT1BfUE9SVF8wNl9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19STERQX1JFTEVBU0VEX0lORElDQVRPUiAgICAweDE4ZjAKKyNkZWZpbmUgICAgUlRMODM2N0NfUkxEUF9SRUxFQVNFRF9JTkRJQ0FUT1JfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUkxEUF9SRUxFQVNFRF9JTkRJQ0FUT1JfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19STERQX0xPT1BTVEFUVVNfSU5ESUNBVE9SICAgIDB4MThmMQorI2RlZmluZSAgICBSVEw4MzY3Q19STERQX0xPT1BTVEFUVVNfSU5ESUNBVE9SX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JMRFBfTE9PUFNUQVRVU19JTkRJQ0FUT1JfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19STERQX0xPT1BfUE9SVF9SRUc0ICAgIDB4MThmMgorI2RlZmluZSAgICBSVEw4MzY3Q19STERQX0xPT1BfUE9SVF85X09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1JMRFBfTE9PUF9QT1JUXzlfTUFTSyAgICAweEYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19STERQX0xPT1BfUE9SVF84X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JMRFBfTE9PUF9QT1JUXzhfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUkxEUF9MT09QX1BPUlRfUkVHNSAgICAweDE4ZjMKKyNkZWZpbmUgICAgUlRMODM2N0NfUkxEUF9MT09QX1BPUlRfUkVHNV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19STERQX0xPT1BfUE9SVF9SRUc1X01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1JMRFBfQ1RSTDUgICAgMHgxOGY0CisjZGVmaW5lICAgIFJUTDgzNjdDX1JMRFBfQ1RSTDVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUkxEUF9DVFJMNV9NQVNLICAgIDB4NworCisvKiAoMTYnaDE5MDApRUVFX0VFRVBfcmVnICovCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRV81MDBNX0NUUkwwICAgIDB4MTkwMAorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVfNTAwTV9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVfNTAwTV9DVFJMMF9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFX1JYSURMRV9HSUdBX0NUUkwgICAgMHgxOTAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRV9SWElETEVfR0lHQV9FTl9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVfUlhJRExFX0dJR0FfRU5fTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVfUlhJRExFX0dJR0FfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFX1JYSURMRV9HSUdBX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVfUlhJRExFXzUwME1fQ1RSTCAgICAweDE5MDIKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFX1JYSURMRV81MDBNX0VOX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRV9SWElETEVfNTAwTV9FTl9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRV9SWElETEVfNTAwTV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVfUlhJRExFXzUwME1fTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRV9ERUNJU0lPTl9HSUdBXzUwME0gICAgMHgxOTAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRV9ERUNJU0lPTl9HSUdBX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRV9ERUNJU0lPTl9HSUdBX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRV9ERUNJU0lPTl81MDBNX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRV9ERUNJU0lPTl81MDBNX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVfREVDSVNJT05fMTAwTSAgICAweDE5MDQKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFX0RFQ0lTSU9OXzEwME1fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFX0RFQ0lTSU9OXzEwME1fTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRVBfREVGRVJfVFhMUEkgICAgMHgxOTA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRVBfREVGRVJfVFhMUElfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFUF9ERUZFUl9UWExQSV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVQX0VOICAgIDB4MTkwNgorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVQX1NMQVZFX0VOX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRVBfU0xBVkVfRU5fTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFUF8xMDBNX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRVBfMTAwTV9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVQXzUwME1fT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFUF81MDBNX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRVBfR0lHQV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVQX0dJR0FfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFUF9USV9HSUdBXzUwME0gICAgMHgxOTA3CisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRVBfVElfR0lHQV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVQX1RJX0dJR0FfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFUF9USV81MDBNX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRVBfVElfNTAwTV9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFUF9USV8xMDBNICAgIDB4MTkwOAorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVQX1RJXzEwME1fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFUF9USV8xMDBNX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVQX0NUUkwyICAgIDB4MTkwOQorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVQX0NUUkwyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRVBfQ1RSTDJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRVBfUlhfUkFURV81MDBNICAgIDB4MTkwYgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVQX1JXX0dJR0FfU0xWICAgIDB4MTkwYworI2RlZmluZSAgICBSVEw4MzY3Q19FRUVQX1JXX0dJR0FfU0xWX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRVBfUldfR0lHQV9TTFZfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRVBfVE1SX0dJR0EgICAgMHgxOTBkCisjZGVmaW5lICAgIFJUTDgzNjdDX1JYX0lETEVfRUVFUF9HSUdBX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1JYX0lETEVfRUVFUF9HSUdBX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JYX01JTl9TTFBfVE1SX0dJR0FfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUlhfTUlOX1NMUF9UTVJfR0lHQV9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFUF9UTVJfNTAwTSAgICAweDE5MGUKKyNkZWZpbmUgICAgUlRMODM2N0NfUlhfSURMRV9FRUVQXzUwME1fT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUlhfSURMRV9FRUVQXzUwME1fTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUlhfTUlOX1NMUF9UTVJfNTAwTV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19SWF9NSU5fU0xQX1RNUl81MDBNX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVQX1RNUl8xMDBNICAgIDB4MTkwZgorI2RlZmluZSAgICBSVEw4MzY3Q19SWF9JRExFX0VFRVBfMTAwTV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19SWF9JRExFX0VFRVBfMTAwTV9NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19SWF9NSU5fU0xQX1RNUl8xMDBNX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JYX01JTl9TTFBfVE1SXzEwME1fTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRVBfUldfNTAwTV9NU1RfU0xWICAgIDB4MTkxMAorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVQX1JXXzUwME1fTVNUX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRVBfUldfNTAwTV9NU1RfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFUF9SV181MDBNX1NMVl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVQX1JXXzUwME1fU0xWX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVQXzUwME1fQ1RSTDAgICAgMHgxOTExCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRVBfNTAwTV9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVQXzUwME1fQ1RSTDBfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRVBfNTAwTV9DVFJMMSAgICAweDE5MTIKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFUF9UV181MDBNX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRVBfVFdfNTAwTV9NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVQX1RQXzUwME1fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFUF9UUF81MDBNX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVQXzUwME1fQ1RSTDIgICAgMHgxOTEzCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRVBfVFhFTl81MDBNX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVQX1RYRU5fNTAwTV9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVQX1RVXzUwME1fT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFUF9UVV81MDBNX01BU0sgICAgMHgzMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFUF9UU181MDBNX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRVBfVFNfNTAwTV9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFX05FV19DVFJMMCAgICAweDE5MTQKKyNkZWZpbmUgICAgUlRMODM2N0NfTElOS19VUF9ERUxBWV9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19MSU5LX1VQX0RFTEFZX01BU0sgICAgMHgxOAorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVfVFhMUElfT1JJX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRV9UWExQSV9PUklfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVBTFRYX1NFTF9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19SRUFMVFhfU0VMX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0VOX0ZDX0VGQ1RfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fRkNfRUZDVF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVfTE9OR0lETEVfMTAwTSAgICAweDE5MTUKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFX0xPTkdJRExFXzEwME1fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFX0xPTkdJRExFXzEwME1fTUFTSyAgICAweDNGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVfTE9OR0lETEVfNTAwTSAgICAweDE5MTYKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFX0xPTkdJRExFXzUwME1fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFX0xPTkdJRExFXzUwME1fTUFTSyAgICAweDNGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVfTE9OR0lETEVfR0lHQSAgICAweDE5MTcKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFX0xPTkdJRExFX0dJR0FfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFX0xPTkdJRExFX0dJR0FfTUFTSyAgICAweDNGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVfTUlOSVBHXzEwME0gICAgMHgxOTE4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRV9NSU5JUEdfNTAwTSAgICAweDE5MTkKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFX01JTklQR19HSUdBICAgIDB4MTkxQQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRUVfTE9OR0lETEVfQ1RSTDAgICAgMHgxOTFCCisjZGVmaW5lICAgIFJUTDgzNjdDX1RYX0lETEVOX1JFUV8xMDBNX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19UWF9JRExFTl9SRVFfMTAwTV9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1RYX0lETEVOX1JFUV81MDBNX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1RYX0lETEVOX1JFUV81MDBNX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVFhfSURMRU5fUkVRX0dJR0FfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVFhfSURMRU5fUkVRX0dJR0FfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVfTE9OR0lETEVfQ1RSTDBfVFhfTFBJX01JTklQR18xMDBNX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRV9MT05HSURMRV9DVFJMMF9UWF9MUElfTUlOSVBHXzEwME1fTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRV9MT05HSURMRV9DVFJMMSAgICAweDE5MUMKKyNkZWZpbmUgICAgUlRMODM2N0NfRUVFX0xPTkdJRExFX0NUUkwxX1RYX0xQSV9NSU5JUEdfR0VMSVRFX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRV9MT05HSURMRV9DVFJMMV9UWF9MUElfTUlOSVBHX0dFTElURV9NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19FRUVfTE9OR0lETEVfQ1RSTDFfVFhfTFBJX01JTklQR19HSUdBX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VFRV9MT05HSURMRV9DVFJMMV9UWF9MUElfTUlOSVBHX0dJR0FfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VFRV9URF9DVFJMX0ggICAgMHgxOTFkCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFRl9SWExQSV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19SRUZfUlhMUElfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19MT1dfUV9UWF9ERUxBWV9HRV81MDBNX0hfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfTE9XX1FfVFhfREVMQVlfR0VfNTAwTV9IX01BU0sgICAgMHhGMAorI2RlZmluZSAgICBSVEw4MzY3Q19MT1dfUV9UWF9ERUxBWV9GRV9IX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xPV19RX1RYX0RFTEFZX0ZFX0hfTUFTSyAgICAweEYKKworLyogKDE2J2gxYTAwKW5pY19yZWcgKi8KKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTklDX1JYUkRSTCAgICAweDFhMDQKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1JYUkRSTF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfUlhSRFJMX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19OSUNfUlhSRFJIICAgIDB4MWEwNQorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfUlhSRFJIX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19SWFJEUkhfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX05JQ19UWEFTUkwgICAgMHgxYTA4CisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19UWEFTUkxfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1RYQVNSTF9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTklDX1RYQVNSSCAgICAweDFhMDkKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1RYQVNSSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfVFhBU1JIX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19OSUNfUlhDTURSICAgIDB4MWEwYworI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfUlhDTURSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19SWENNRFJfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTklDX1RYQ01EUiAgICAweDFhMGQKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1RYQ01EUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfVFhDTURSX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX05JQ19JTVMgICAgMHgxYTBlCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19SWElTX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19SWElTX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfVFhJU19PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfVFhJU19NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1RYRVNfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1RYRVNfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19JTVNfRE1ZX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19JTVNfRE1ZX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfUlhCVVNfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1JYQlVTX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19UWEJPU19PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfVFhCT1NfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1JYTUlTX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19SWE1JU19NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfVFhOTFNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1RYTkxTX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX05JQ19JTVIgICAgMHgxYTBmCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19SWElFX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19SWElFX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfVFhJRV9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfVFhJRV9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1RYRUVfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1RYRUVfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19JTVJfRE1ZX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19JTVJfRE1ZX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfUlhCVUVfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1JYQlVFX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19UWEJPRV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfVFhCT0VfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1JYTUlFX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19SWE1JRV9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfVFhOTEVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1RYTkxFX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX05JQ19SWENSMCAgICAweDFhMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX0hGUFBFX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19IRlBQRV9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX0hGTVBFX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19IRk1QRV9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1JYQlBFX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19SWEJQRV9NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1JYTVBFX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19SWE1QRV9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1JYUFBTX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19SWFBQU19NQVNLICAgIDB4QworI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfUlhBUEVfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1JYQVBFX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19BUlBQRV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfQVJQUEVfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTklDX1JYQ1IxICAgIDB4MWExNQorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfUkw0Q0VQRV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfUkw0Q0VQRV9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1JMM0NFUEVfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1JMM0NFUEVfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1JDUkNFUEVfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1JDUkNFUEVfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1JNQ1JDX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19STUNSQ19NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfUlhFTkFCTEVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1JYRU5BQkxFX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX05JQ19UWENSICAgIDB4MWExNgorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfTEJFX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19MQkVfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1RYTUZNX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19UWE1GTV9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfVFhFTkFCTEVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1RYRU5BQkxFX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX05JQ19HQ1IgICAgMHgxYTE3CisjZGVmaW5lICAgIFJUTDgzNjdDX0RVTU1ZXzdfNl9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19EVU1NWV83XzZfTUFTSyAgICAweEMwCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19SWE1UVV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfUlhNVFVfTUFTSyAgICAweDMwCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19HQ1JfRFVNTVlfMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfR0NSX0RVTU1ZXzBfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTklDX01IUjAgICAgMHgxYTI0CisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19NSFIwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19NSFIwX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19OSUNfTUhSMSAgICAweDFhMjUKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX01IUjFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX01IUjFfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX05JQ19NSFIyICAgIDB4MWEyNgorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfTUhSMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfTUhSMl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTklDX01IUjMgICAgMHgxYTI3CisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19NSFIzX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19NSFIzX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19OSUNfTUhSNCAgICAweDFhMjgKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX01IUjRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX01IUjRfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX05JQ19NSFI1ICAgIDB4MWEyOQorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfTUhSNV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfTUhSNV9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTklDX01IUjYgICAgMHgxYTJhCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19NSFI2X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19NSFI2X01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19OSUNfTUhSNyAgICAweDFhMmIKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX01IUjdfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX01IUjdfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX05JQ19QQUhSMCAgICAweDFhMmMKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1BBSFIwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19QQUhSMF9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTklDX1BBSFIxICAgIDB4MWEyZAorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfUEFIUjFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1BBSFIxX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19OSUNfUEFIUjIgICAgMHgxYTJlCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19QQUhSMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfUEFIUjJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX05JQ19QQUhSMyAgICAweDFhMmYKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1BBSFIzX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19QQUhSM19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTklDX1BBSFI0ICAgIDB4MWEzMAorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfUEFIUjRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1BBSFI0X01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19OSUNfUEFIUjUgICAgMHgxYTMxCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19QQUhSNV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfUEFIUjVfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX05JQ19QQUhSNiAgICAweDFhMzIKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1BBSFI2X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19QQUhSNl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTklDX1BBSFI3ICAgIDB4MWEzMworI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfUEFIUjdfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1BBSFI3X01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19OSUNfVFhTVE9QUkwgICAgMHgxYTQ0CisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19UWFNUT1BSTF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfVFhTVE9QUkxfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX05JQ19UWFNUT1BSSCAgICAweDFhNDUKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1RYU1RPUFJIX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19UWFNUT1BSSF9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19OSUNfUlhTVE9QUkwgICAgMHgxYTQ2CisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19SWFNUT1BSTF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfUlhTVE9QUkxfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX05JQ19SWFNUT1BSSCAgICAweDFhNDcKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1JYU1RPUFJIX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19SWFNUT1BSSF9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19OSUNfUlhGU1RSICAgIDB4MWE0OAorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfUlhGU1RSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19SWEZTVFJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX05JQ19SWE1CVFJMICAgIDB4MWE0YworI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfUlhNQlRSTF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfUlhNQlRSTF9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTklDX1JYTUJUUkggICAgMHgxYTRkCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19SWE1CVFJIX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19SWE1CVFJIX01BU0sgICAgMHg3RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19OSUNfUlhNUFRSICAgIDB4MWE0ZQorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfUlhNUFRSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19SWE1QVFJfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX05JQ19UMFRSICAgIDB4MWE0ZgorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfVDBUUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfVDBUUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTklDX0NSWENQUkwgICAgMHgxYTUwCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19DUlhDUFJMX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19DUlhDUFJMX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19OSUNfQ1JYQ1BSSCAgICAweDFhNTEKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX0NSWENQUkhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX0NSWENQUkhfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX05JQ19DVFhDUFJMICAgIDB4MWE1MgorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfQ1RYQ1BSTF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfQ1RYQ1BSTF9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTklDX0NUWFBDUkggICAgMHgxYTUzCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19DVFhQQ1JIX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19DVFhQQ1JIX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19OSUNfU1JYQ1VSUEtUUkwgICAgMHgxYTU0CisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19TUlhDVVJQS1RSTF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfU1JYQ1VSUEtUUkxfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX05JQ19TUlhDVVJQS1RSSCAgICAweDFhNTUKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1NSWENVUlBLVFJIX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19TUlhDVVJQS1RSSF9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTklDX1NUWENVUlBLVFJMICAgIDB4MWE1NgorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfU1RYQ1VSUEtUUkxfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1NUWENVUlBLVFJMX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19OSUNfU1RYQ1VSUEtUUkggICAgMHgxYTU3CisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19TVFhDVVJQS1RSSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfU1RYQ1VSUEtUUkhfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX05JQ19TVFhQS1RMRU5STCAgICAweDFhNTgKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1NUWFBLVExFTlJMX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19TVFhQS1RMRU5STF9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTklDX1NUWFBLVExFTlJIICAgIDB4MWE1OQorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfU1RYUEtUTEVOUkhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1NUWFBLVExFTlJIX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19OSUNfU1RYQ1VSVU5JVFJMICAgIDB4MWE1YQorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfU1RYQ1VSVU5JVFJMX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19TVFhDVVJVTklUUkxfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX05JQ19TVFhDVVJVTklUUkggICAgMHgxYTViCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19TVFhDVVJVTklUUkhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1NUWENVUlVOSVRSSF9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTklDX0RST1BfTU9ERSAgICAweDFhNWMKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX1JYRFZfTU9ERV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19OSUNfUlhEVl9NT0RFX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX05JQ19EUk9QX01PREVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTklDX0RST1BfTU9ERV9NQVNLICAgIDB4MQorCisvKiAoMTYnaDFiMDApTEVEICovCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0xFRF9TWVNfQ09ORklHICAgIDB4MWIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19MRURfU1lTX0NPTkZJR19EVU1NWV8xNV9PRkZTRVQgICAgMTUKKyNkZWZpbmUgICAgUlRMODM2N0NfTEVEX1NZU19DT05GSUdfRFVNTVlfMTVfTUFTSyAgICAweDgwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTEVEX1NFUklBTF9PVVRfTU9ERV9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfTEVEX1NFUklBTF9PVVRfTU9ERV9NQVNLICAgIDB4NDAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19MRURfRUVFX0xQSV9NT0RFX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19MRURfRUVFX0xQSV9NT0RFX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xFRF9FRUVfTFBJX0VOX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19MRURfRUVFX0xQSV9FTl9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19MRURfRUVFX0xQSV8xMF9PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfTEVEX0VFRV9MUElfMTBfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19MRURfRUVFX0NBUF8xMF9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfTEVEX0VFRV9DQVBfMTBfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19MRURfTFBJX1NFTF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19MRURfTFBJX1NFTF9NQVNLICAgIDB4MzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NFUklfTEVEX0FDVF9MT1dfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfU0VSSV9MRURfQUNUX0xPV19NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfTEVEX1BPV0VST05fMl9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19MRURfUE9XRVJPTl8yX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19MRURfUE9XRVJPTl8xX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0xFRF9QT1dFUk9OXzFfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xFRF9QT1dFUk9OXzBfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfTEVEX1BPV0VST05fMF9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfTEVEX0lPX0RJU0FCTEVfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfTEVEX0lPX0RJU0FCTEVfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFVNTVlfMl8yX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0RVTU1ZXzJfMl9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19MRURfU0VMRUNUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xFRF9TRUxFQ1RfTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTEVEX1NZU19DT05GSUcyICAgIDB4MWIwMQorI2RlZmluZSAgICBSVEw4MzY3Q19MRURfU1lTX0NPTkZJRzJfRFVNTVlfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfTEVEX1NZU19DT05GSUcyX0RVTU1ZX01BU0sgICAgMHhGRkZDCisjZGVmaW5lICAgIFJUTDgzNjdDX0dBVEVfTFBURF9CWVBBU1NfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfR0FURV9MUFREX0JZUEFTU19NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19MRURfU1BEX01PREVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTEVEX1NQRF9NT0RFX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0xFRF9NT0RFICAgIDB4MWIwMgorI2RlZmluZSAgICBSVEw4MzY3Q19ETElOS19USU1FX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19ETElOS19USU1FX01BU0sgICAgMHg4MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xFRF9CVVpaX0RVVFlfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX0xFRF9CVVpaX0RVVFlfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQlVaWkVSX1JBVEVfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0JVWlpFUl9SQVRFX01BU0sgICAgMHgzMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xPT1BfREVURUNUX01PREVfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0xPT1BfREVURUNUX01PREVfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TRUxfUFdST05fVElNRV9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TRUxfUFdST05fVElNRV9NQVNLICAgIDB4NjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VOX0RMSU5LX0xFRF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9ETElOS19MRURfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19MT09QX0RFVEVDVF9SQVRFX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX0xPT1BfREVURUNUX1JBVEVfTUFTSyAgICAweEMwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZPUkNFX1JBVEVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfRk9SQ0VfUkFURV9NQVNLICAgIDB4MzAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0VMX0xFRFJBVEVfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfU0VMX0xFRFJBVEVfTUFTSyAgICAweEUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1BFRURfVVBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1BFRURfVVBfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTEVEX0NPTkZJR1VSQVRJT04gICAgMHgxYjAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0xFRF9DT05GSUdVUkFUSU9OX0RVTU1ZX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19MRURfQ09ORklHVVJBVElPTl9EVU1NWV9NQVNLICAgIDB4ODAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19MRURfQ09ORklHX1NFTF9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfTEVEX0NPTkZJR19TRUxfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfREFUQV9MRURfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0RBVEFfTEVEX01BU0sgICAgMHgzMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xFRDJfQ0ZHX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0xFRDJfQ0ZHX01BU0sgICAgMHhGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTEVEMV9DRkdfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfTEVEMV9DRkdfTUFTSyAgICAweEYwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xFRDBfQ0ZHX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xFRDBfQ0ZHX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1JUQ1RfUkVTVUxUU19DRkcgICAgMHgxYjA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1JUQ1RfMlBBSVJfRlRUX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19SVENUXzJQQUlSX0ZUVF9NQVNLICAgIDB4ODAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19SVENUXzJQQUlSX01PREVfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX1JUQ1RfMlBBSVJfTU9ERV9NQVNLICAgIDB4NDAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19CTElOS19FTl9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfQkxJTktfRU5fTUFTSyAgICAweDIwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVElNRU9VVF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfVElNRU9VVF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9DRF9TQU1FX1NIT1JUX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9DRF9TQU1FX1NIT1JUX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fQ0RfU0FNRV9PUEVOX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9DRF9TQU1FX09QRU5fTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9DRF9TQU1FX0xJTkVEUklWRVJfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fQ0RfU0FNRV9MSU5FRFJJVkVSX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fQ0RfU0FNRV9NSVNNQVRDSF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9DRF9TQU1FX01JU01BVENIX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fQ0RfU0hPUlRfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fQ0RfU0hPUlRfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VOX0FCX1NIT1JUX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX0VOX0FCX1NIT1JUX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9DRF9PUEVOX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0VOX0NEX09QRU5fTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VOX0FCX09QRU5fT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fQUJfT1BFTl9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fQ0RfTUlTTUFUQ0hfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fQ0RfTUlTTUFUQ0hfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fQUJfTUlTTUFUQ0hfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fQUJfTUlTTUFUQ0hfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fQ0RfTElORURSSVZFUl9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9DRF9MSU5FRFJJVkVSX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0VOX0FCX0xJTkVEUklWRVJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fQUJfTElORURSSVZFUl9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19SVENUX0xFRCAgICAweDFiMDUKKyNkZWZpbmUgICAgUlRMODM2N0NfRFVNTVlfMWIwNWFfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0RVTU1ZXzFiMDVhX01BU0sgICAgMHhGMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JUQ1RfTEVEMl9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19SVENUX0xFRDJfTUFTSyAgICAweEYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19SVENUX0xFRDFfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUlRDVF9MRUQxX01BU0sgICAgMHhGMAorI2RlZmluZSAgICBSVEw4MzY3Q19SVENUX0xFRDBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUlRDVF9MRUQwX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0NQVV9GT1JDRV9MRURfQ0ZHICAgIDB4MWIwNworI2RlZmluZSAgICBSVEw4MzY3Q19EVU1NWV8xYjA3YV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19EVU1NWV8xYjA3YV9NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19MRURfRk9SQ0VfTU9ERV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19MRURfRk9SQ0VfTU9ERV9NQVNLICAgIDB4RkMKKyNkZWZpbmUgICAgUlRMODM2N0NfRk9SQ0VfTU9ERV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GT1JDRV9NT0RFX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0NQVV9GT1JDRV9MRUQwX0NGRzAgICAgMHgxYjA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X0xFRDBfTU9ERV9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfTEVEMF9NT0RFX01BU0sgICAgMHhDMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X0xFRDBfTU9ERV9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfTEVEMF9NT0RFX01BU0sgICAgMHgzMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X0xFRDBfTU9ERV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfTEVEMF9NT0RFX01BU0sgICAgMHhDMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfTEVEMF9NT0RFX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X0xFRDBfTU9ERV9NQVNLICAgIDB4MzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX0xFRDBfTU9ERV9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19MRUQwX01PREVfTUFTSyAgICAweEMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX0xFRDBfTU9ERV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9MRUQwX01PREVfTUFTSyAgICAweDMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX0xFRDBfTU9ERV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9MRUQwX01PREVfTUFTSyAgICAweEMKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfTEVEMF9NT0RFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX0xFRDBfTU9ERV9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19DUFVfRk9SQ0VfTEVEMF9DRkcxICAgIDB4MWIwOQorI2RlZmluZSAgICBSVEw4MzY3Q19EVU1NWV8xYjA5YV9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19EVU1NWV8xYjA5YV9NQVNLICAgIDB4RkZGMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9MRUQwX01PREVfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfTEVEMF9NT0RFX01BU0sgICAgMHhDCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X0xFRDBfTU9ERV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9MRUQwX01PREVfTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQ1BVX0ZPUkNFX0xFRDFfQ0ZHMCAgICAweDFiMGEKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfTEVEMV9NT0RFX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19MRUQxX01PREVfTUFTSyAgICAweEMwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfTEVEMV9NT0RFX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9MRUQxX01PREVfTUFTSyAgICAweDMwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfTEVEMV9NT0RFX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9MRUQxX01PREVfTUFTSyAgICAweEMwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9MRUQxX01PREVfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfTEVEMV9NT0RFX01BU0sgICAgMHgzMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfTEVEMV9NT0RFX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX0xFRDFfTU9ERV9NQVNLICAgIDB4QzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfTEVEMV9NT0RFX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX0xFRDFfTU9ERV9NQVNLICAgIDB4MzAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfTEVEMV9NT0RFX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX0xFRDFfTU9ERV9NQVNLICAgIDB4QworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9MRUQxX01PREVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfTEVEMV9NT0RFX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0NQVV9GT1JDRV9MRUQxX0NGRzEgICAgMHgxYjBiCisjZGVmaW5lICAgIFJUTDgzNjdDX0RVTU1ZXzFiMGJhX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0RVTU1ZXzFiMGJhX01BU0sgICAgMHhGRkYwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X0xFRDFfTU9ERV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOV9MRUQxX01PREVfTUFTSyAgICAweEMKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfTEVEMV9NT0RFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X0xFRDFfTU9ERV9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19DUFVfRk9SQ0VfTEVEMl9DRkcwICAgIDB4MWIwYworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19MRUQyX01PREVfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X0xFRDJfTU9ERV9NQVNLICAgIDB4QzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNl9MRUQyX01PREVfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X0xFRDJfTU9ERV9NQVNLICAgIDB4MzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9MRUQyX01PREVfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X0xFRDJfTU9ERV9NQVNLICAgIDB4QzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X0xFRDJfTU9ERV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9MRUQyX01PREVfTUFTSyAgICAweDMwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19MRUQyX01PREVfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfTEVEMl9NT0RFX01BU0sgICAgMHhDMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9MRUQyX01PREVfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfTEVEMl9NT0RFX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9MRUQyX01PREVfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfTEVEMl9NT0RFX01BU0sgICAgMHhDCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX0xFRDJfTU9ERV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9MRUQyX01PREVfTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQ1BVX0ZPUkNFX0xFRDJfQ0ZHMSAgICAweDFiMGQKKyNkZWZpbmUgICAgUlRMODM2N0NfRFVNTVlfMWIwZGFfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfRFVNTVlfMWIwZGFfTUFTSyAgICAweEZGRjAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfTEVEMl9NT0RFX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X0xFRDJfTU9ERV9NQVNLICAgIDB4QworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9MRUQyX01PREVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfTEVEMl9NT0RFX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0xFRF9BQ1RJVkVfTE9XX0NGRzAgICAgMHgxYjBlCisjZGVmaW5lICAgIFJUTDgzNjdDX0xFRF9BQ1RJVkVfTE9XX0NGRzBfRFVNTVlfMTVfT0ZGU0VUICAgIDE1CisjZGVmaW5lICAgIFJUTDgzNjdDX0xFRF9BQ1RJVkVfTE9XX0NGRzBfRFVNTVlfMTVfTUFTSyAgICAweDgwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfTEVEX0FDVElWRV9MT1dfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX0xFRF9BQ1RJVkVfTE9XX01BU0sgICAgMHg3MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xFRF9BQ1RJVkVfTE9XX0NGRzBfRFVNTVlfMTFfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0xFRF9BQ1RJVkVfTE9XX0NGRzBfRFVNTVlfMTFfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9MRURfQUNUSVZFX0xPV19PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9MRURfQUNUSVZFX0xPV19NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RVTU1ZXzdfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfRFVNTVlfN19NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfTEVEX0FDVElWRV9MT1dfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfTEVEX0FDVElWRV9MT1dfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RVTU1ZXzNfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfRFVNTVlfM19NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9MRURfQUNUSVZFX0xPV19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9MRURfQUNUSVZFX0xPV19NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19MRURfQUNUSVZFX0xPV19DRkcxICAgIDB4MWIwZgorI2RlZmluZSAgICBSVEw4MzY3Q19MRURfQUNUSVZFX0xPV19DRkcxX0RVTU1ZXzE1X09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19MRURfQUNUSVZFX0xPV19DRkcxX0RVTU1ZXzE1X01BU0sgICAgMHg4MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X0xFRF9BQ1RJVkVfTE9XX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19MRURfQUNUSVZFX0xPV19NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19MRURfQUNUSVZFX0xPV19DRkcxX0RVTU1ZXzExX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19MRURfQUNUSVZFX0xPV19DRkcxX0RVTU1ZXzExX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfTEVEX0FDVElWRV9MT1dfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfTEVEX0FDVElWRV9MT1dfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19EVU1NWV8xYjBmX2JfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfRFVNTVlfMWIwZl9iX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9MRURfQUNUSVZFX0xPV19PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9MRURfQUNUSVZFX0xPV19NQVNLICAgIDB4NzAKKyNkZWZpbmUgICAgUlRMODM2N0NfRFVNTVlfMWIwZl9hX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0RVTU1ZXzFiMGZfYV9NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9MRURfQUNUSVZFX0xPV19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9MRURfQUNUSVZFX0xPV19NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19MRURfQUNUSVZFX0xPV19DRkcyICAgIDB4MWIxMAorI2RlZmluZSAgICBSVEw4MzY3Q19EVU1NWV8xYjEwX2JfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfRFVNTVlfMWIxMF9iX01BU0sgICAgMHhGRjgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X0xFRF9BQ1RJVkVfTE9XX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X0xFRF9BQ1RJVkVfTE9XX01BU0sgICAgMHg3MAorI2RlZmluZSAgICBSVEw4MzY3Q19EVU1NWV8xYjEwX2FfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfRFVNTVlfMWIxMF9hX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X0xFRF9BQ1RJVkVfTE9XX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X0xFRF9BQ1RJVkVfTE9XX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NFTF9SVENUX1BBUkEgICAgMHgxYjIxCisjZGVmaW5lICAgIFJUTDgzNjdDX0RPX1JUQ1RfQ09NTUFORF9PRkZTRVQgICAgMTUKKyNkZWZpbmUgICAgUlRMODM2N0NfRE9fUlRDVF9DT01NQU5EX01BU0sgICAgMHg4MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NFTF9SVENUX1BBUkFfRFVNTVlfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NFTF9SVENUX1BBUkFfRFVNTVlfTUFTSyAgICAweDcwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0VMX1JUQ1RfUkxTVExFRF9USU1FX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19TRUxfUlRDVF9STFNUTEVEX1RJTUVfTUFTSyAgICAweEMwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TRUxfUlRDVF9URVNUX0xFRF9USU1FX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NFTF9SVENUX1RFU1RfTEVEX1RJTUVfTUFTSyAgICAweDMwMAorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9TQ0FOX1JUQ1RfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fU0NBTl9SVENUX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9SVENUX1RJTU9VVF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19FTl9SVENUX1RJTU9VVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fQUxMX1JUQ1RfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfRU5fQUxMX1JUQ1RfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NFTF9SVENUX1BMRV9XSURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0VMX1JUQ1RfUExFX1dJRF9NQVNLICAgIDB4MUYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUlRDVF9FTkFCTEUgICAgMHgxYjIyCisjZGVmaW5lICAgIFJUTDgzNjdDX1JUQ1RfRU5BQkxFX0RVTU1ZX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1JUQ1RfRU5BQkxFX0RVTU1ZX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JUQ1RfRU5BQkxFX1BPUlRfTUFTS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19SVENUX0VOQUJMRV9QT1JUX01BU0tfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1JUQ1RfVElNRU9VVCAgICAweDFiMjMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEFSQV9MRURfSU9fRU4xICAgIDB4MWIyNAorI2RlZmluZSAgICBSVEw4MzY3Q19MRUQxX1BBUkFfUDA3XzAwX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0xFRDFfUEFSQV9QMDdfMDBfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTEVEMF9QQVJBX1AwN18wMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19MRUQwX1BBUkFfUDA3XzAwX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QQVJBX0xFRF9JT19FTjIgICAgMHgxYjI1CisjZGVmaW5lICAgIFJUTDgzNjdDX0RVTU1ZXzE1XzhfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRFVNTVlfMTVfOF9NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19MRUQyX1BBUkFfUDA3XzAwX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xFRDJfUEFSQV9QMDdfMDBfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NDQU4wX0xFRF9JT19FTjEgICAgMHgxYjI2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NDQU4wX0xFRF9JT19FTjFfRFVNTVlfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NBTjBfTEVEX0lPX0VOMV9EVU1NWV9NQVNLICAgIDB4RkZGOAorI2RlZmluZSAgICBSVEw4MzY3Q19MRURfTE9PUF9ERVRfQlVaWkVSX0VOX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0xFRF9MT09QX0RFVF9CVVpaRVJfRU5fTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfTEVEX1NFUklfREFUQV9FTl9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19MRURfU0VSSV9EQVRBX0VOX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0xFRF9TRVJJX0NMS19FTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19MRURfU0VSSV9DTEtfRU5fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0NBTjFfTEVEX0lPX0VOMiAgICAweDFiMjcKKyNkZWZpbmUgICAgUlRMODM2N0NfTEVEX1NDQU4xX0JJX1BPUlRfRU5fT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfTEVEX1NDQU4xX0JJX1BPUlRfRU5fTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTEVEX1NDQU4xX0JJX1NUQV9FTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19MRURfU0NBTjFfQklfU1RBX0VOX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TQ0FOMV9MRURfSU9fRU4yX0RVTU1ZXzBfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU0NBTjFfTEVEX0lPX0VOMl9EVU1NWV8wX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19MRURfU0NBTjFfU0lfUE9SVF9FTl9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19MRURfU0NBTjFfU0lfUE9SVF9FTl9NQVNLICAgIDB4M0MKKyNkZWZpbmUgICAgUlRMODM2N0NfTEVEX1NDQU4xX1NJX1NUQV9FTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19MRURfU0NBTjFfU0lfU1RBX0VOX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0xQSV9MRURfT1BUMSAgICAweDFiMjgKKyNkZWZpbmUgICAgUlRMODM2N0NfTFBJX1RBRzRfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0xQSV9UQUc0X01BU0sgICAgMHhGMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xQSV9UQUczX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0xQSV9UQUczX01BU0sgICAgMHhGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTFBJX1RBRzJfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfTFBJX1RBRzJfTUFTSyAgICAweEYwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xQSV9UQUcxX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xQSV9UQUcxX01BU0sgICAgMHhGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0xQSV9MRURfT1BUMiAgICAweDFiMjkKKyNkZWZpbmUgICAgUlRMODM2N0NfTFBJX0xFRF9PUFQyX0RVTU1ZX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19MUElfTEVEX09QVDJfRFVNTVlfTUFTSyAgICAweDgwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTFBJX0xFRDJfV0VBS19PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfTFBJX0xFRDJfV0VBS19NQVNLICAgIDB4NDAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19MUElfTEVEMV9XRUFLX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19MUElfTEVEMV9XRUFLX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xQSV9MRUQwX1dFQUtfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0xQSV9MRUQwX1dFQUtfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTFBJX0xFRDJfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0xQSV9MRUQyX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTFBJX0xFRDFfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xQSV9MRUQxX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTFBJX0xFRDBfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfTFBJX0xFRDBfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19MUElfVEFHOF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19MUElfVEFHOF9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xQSV9UQUc3X09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX0xQSV9UQUc3X01BU0sgICAgMHhDMAorI2RlZmluZSAgICBSVEw4MzY3Q19MUElfVEFHNl9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19MUElfVEFHNl9NQVNLICAgIDB4MzAKKyNkZWZpbmUgICAgUlRMODM2N0NfTFBJX1RBRzVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTFBJX1RBRzVfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTFBJX0xFRF9PUFQzICAgIDB4MWIyYQorI2RlZmluZSAgICBSVEw4MzY3Q19MUElfTEVEX09QVDNfRFVNTVlfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfTFBJX0xFRF9PUFQzX0RVTU1ZX01BU0sgICAgMHhGRkY4CisjZGVmaW5lICAgIFJUTDgzNjdDX1JFU1RPUkVfTEVEX1JBVEVfU0VMX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFU1RPUkVfTEVEX1JBVEVfU0VMX01BU0sgICAgMHg2CisjZGVmaW5lICAgIFJUTDgzNjdDX1JFU1RPUkVfTEVEX1NFTF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19SRVNUT1JFX0xFRF9TRUxfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDBfTEVEX01VWCAgICAweDFiMmIKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1AwX0xFRDJfTVVYX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUDBfTEVEMl9NVVhfTUFTSyAgICAweDdDMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1AwX0xFRDFfTVVYX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19QMF9MRUQxX01VWF9NQVNLICAgIDB4M0UwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19QMF9MRUQwX01VWF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUDBfTEVEMF9NVVhfTUFTSyAgICAweDFGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1AxX0xFRF9NVVggICAgMHgxYjJjCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19QMV9MRUQyX01VWF9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1AxX0xFRDJfTVVYX01BU0sgICAgMHg3QzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19QMV9MRUQxX01VWF9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUDFfTEVEMV9NVVhfTUFTSyAgICAweDNFMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUDFfTEVEMF9NVVhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1AxX0xFRDBfTVVYX01BU0sgICAgMHgxRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QMl9MRURfTVVYICAgIDB4MWIyZAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUDJfTEVEMl9NVVhfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19QMl9MRUQyX01VWF9NQVNLICAgIDB4N0MwMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUDJfTEVEMV9NVVhfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1AyX0xFRDFfTVVYX01BU0sgICAgMHgzRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1AyX0xFRDBfTVVYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19QMl9MRUQwX01VWF9NQVNLICAgIDB4MUYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDNfTEVEX01VWCAgICAweDFiMmUKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1AzX0xFRDJfTVVYX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUDNfTEVEMl9NVVhfTUFTSyAgICAweDdDMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1AzX0xFRDFfTVVYX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19QM19MRUQxX01VWF9NQVNLICAgIDB4M0UwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19QM19MRUQwX01VWF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUDNfTEVEMF9NVVhfTUFTSyAgICAweDFGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1A0X0xFRF9NVVggICAgMHgxYjJmCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19QNF9MRUQyX01VWF9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1A0X0xFRDJfTVVYX01BU0sgICAgMHg3QzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19QNF9MRUQxX01VWF9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUDRfTEVEMV9NVVhfTUFTSyAgICAweDNFMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUDRfTEVEMF9NVVhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1A0X0xFRDBfTVVYX01BU0sgICAgMHgxRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19MRUQwX0RBVEFfQ1RSTCAgICAweDFiMzAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0RBVEFfTEVEMF9TRUxfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0RBVEFfTEVEMF9TRUxfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19EQVRBX0xFRDBfQUNUX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19EQVRBX0xFRDBfQUNUX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfREFUQV9MRUQwX1NQRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfREFUQV9MRUQwX1NQRF9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19MRUQxX0RBVEFfQ1RSTCAgICAweDFiMzEKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0RBVEFfTEVEMV9TRUxfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0RBVEFfTEVEMV9TRUxfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19EQVRBX0xFRDFfQUNUX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19EQVRBX0xFRDFfQUNUX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfREFUQV9MRUQxX1NQRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfREFUQV9MRUQxX1NQRF9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19MRUQyX0RBVEFfQ1RSTCAgICAweDFiMzIKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0RBVEFfTEVEMl9TRUxfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0RBVEFfTEVEMl9TRUxfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19EQVRBX0xFRDJfQUNUX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19EQVRBX0xFRDJfQUNUX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfREFUQV9MRUQyX1NQRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfREFUQV9MRUQyX1NQRF9NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QQVJBX0xFRF9JT19FTjMgICAgMHgxYjMzCisjZGVmaW5lICAgIFJUTDgzNjdDX2R1bW15XzFiMzNhX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX2R1bW15XzFiMzNhX01BU0sgICAgMHhGRkMwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xFRDJfUEFSQV9QMDlfMDhfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfTEVEMl9QQVJBX1AwOV8wOF9NQVNLICAgIDB4MzAKKyNkZWZpbmUgICAgUlRMODM2N0NfTEVEMV9QQVJBX1AwOV8wOF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19MRUQxX1BBUkFfUDA5XzA4X01BU0sgICAgMHhDCisjZGVmaW5lICAgIFJUTDgzNjdDX0xFRDBfUEFSQV9QMDlfMDhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTEVEMF9QQVJBX1AwOV8wOF9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TQ0FOMV9MRURfSU9fRU4zICAgIDB4MWIzNAorI2RlZmluZSAgICBSVEw4MzY3Q19kdW1teV8xYjM0YV9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19kdW1teV8xYjM0YV9NQVNLICAgIDB4RkZGOAorI2RlZmluZSAgICBSVEw4MzY3Q19MRURfU0NBTjFfQklfUE9SVDlfOF9FTl9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19MRURfU0NBTjFfQklfUE9SVDlfOF9FTl9NQVNLICAgIDB4NgorI2RlZmluZSAgICBSVEw4MzY3Q19MRURfU0NBTjFfU0lfUE9SVDlfOF9FTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19MRURfU0NBTjFfU0lfUE9SVDlfOF9FTl9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QNV9MRURfTVVYICAgIDB4MWIzNQorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUDVfTEVEMl9NVVhfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19QNV9MRUQyX01VWF9NQVNLICAgIDB4N0MwMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUDVfTEVEMV9NVVhfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1A1X0xFRDFfTVVYX01BU0sgICAgMHgzRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1A1X0xFRDBfTVVYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19QNV9MRUQwX01VWF9NQVNLICAgIDB4MUYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDZfTEVEX01VWCAgICAweDFiMzYKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1A2X0xFRDJfTVVYX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUDZfTEVEMl9NVVhfTUFTSyAgICAweDdDMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1A2X0xFRDFfTVVYX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19QNl9MRUQxX01VWF9NQVNLICAgIDB4M0UwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19QNl9MRUQwX01VWF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUDZfTEVEMF9NVVhfTUFTSyAgICAweDFGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1A3X0xFRF9NVVggICAgMHgxYjM3CisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19QN19MRUQyX01VWF9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1A3X0xFRDJfTVVYX01BU0sgICAgMHg3QzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19QN19MRUQxX01VWF9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUDdfTEVEMV9NVVhfTUFTSyAgICAweDNFMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUDdfTEVEMF9NVVhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1A3X0xFRDBfTVVYX01BU0sgICAgMHgxRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QOF9MRURfTVVYICAgIDB4MWIzOAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUDhfTEVEMl9NVVhfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19QOF9MRUQyX01VWF9NQVNLICAgIDB4N0MwMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUDhfTEVEMV9NVVhfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1A4X0xFRDFfTVVYX01BU0sgICAgMHgzRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1A4X0xFRDBfTVVYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19QOF9MRUQwX01VWF9NQVNLICAgIDB4MUYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDlfTEVEX01VWCAgICAweDFiMzkKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1A5X0xFRDJfTVVYX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUDlfTEVEMl9NVVhfTUFTSyAgICAweDdDMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1A5X0xFRDFfTVVYX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19QOV9MRUQxX01VWF9NQVNLICAgIDB4M0UwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19QOV9MRUQwX01VWF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUDlfTEVEMF9NVVhfTUFTSyAgICAweDFGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NFUklBTF9MRURfQ1RSTCAgICAweDFiM2EKKyNkZWZpbmUgICAgUlRMODM2N0NfU0VSSUFMX0xFRF9TSElGVF9TRVFVRU5DRV9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfU0VSSUFMX0xFRF9TSElGVF9TRVFVRU5DRV9NQVNLICAgIDB4NjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TRVJJQUxfTEVEX1NISUZUX1NFUVVFTkNFX0VOX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TRVJJQUxfTEVEX1NISUZUX1NFUVVFTkNFX0VOX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NFUklBTF9MRURfR1JPVVBfTlVNX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19TRVJJQUxfTEVEX0dST1VQX05VTV9NQVNLICAgIDB4QzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NFUklBTF9MRURfUE9SVF9FTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TRVJJQUxfTEVEX1BPUlRfRU5fTUFTSyAgICAweDNGRgorCisvKiAoMTYnaDFjMDApSUdNUF9FQVYgKi8KKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSUdNUF9NTERfQ0ZHMCAgICAweDFjMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9NTERfUE9SVElTT19MRUFLWV9PRkZTRVQgICAgMTUKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9NTERfUE9SVElTT19MRUFLWV9NQVNLICAgIDB4ODAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX01MRF9WTEFOX0xFQUtZX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX01MRF9WTEFOX0xFQUtZX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfTUxEX0RJU0NBUkRfU1RPUk1fRklMVEVSX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX01MRF9ESVNDQVJEX1NUT1JNX0ZJTFRFUl9NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19SRVBPUlRfRk9SV0FSRF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVQT1JUX0ZPUldBUkRfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUk9CVVJTVE5FU1NfVkFSX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1JPQlVSU1RORVNTX1ZBUl9NQVNLICAgIDB4RTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xFQVZFX1NVUFBSRVNTSU9OX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0xFQVZFX1NVUFBSRVNTSU9OX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVQT1JUX1NVUFBSRVNTSU9OX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1JFUE9SVF9TVVBQUkVTU0lPTl9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfTEVBVkVfVElNRVJfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfTEVBVkVfVElNRVJfTUFTSyAgICAweDcwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZBU1RfTEVBVkVfRU5fT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfRkFTVF9MRUFWRV9FTl9NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19DS1NfRVJSX09QX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0NLU19FUlJfT1BfTUFTSyAgICAweDYKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9NTERfRU5fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9NTERfRU5fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSUdNUF9NTERfQ0ZHMSAgICAweDFjMDEKKyNkZWZpbmUgICAgUlRMODM2N0NfRFJPUF9MRUFWRV9aRVJPX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0RST1BfTEVBVkVfWkVST19NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19UQUJMRV9GVUxMX09QX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1RBQkxFX0ZVTExfT1BfTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSUdNUF9NTERfQ0ZHMiAgICAweDFjMDIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSUdNUF9EWU5BTUlDX1JPVVRFUl9QT1JUICAgIDB4MWMwMworI2RlZmluZSAgICBSVEw4MzY3Q19EX1JPVVRFUl9QT1JUXzJfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0RfUk9VVEVSX1BPUlRfMl9NQVNLICAgIDB4NzgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19EX1JPVVRFUl9QT1JUX1RNUl8yX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0RfUk9VVEVSX1BPUlRfVE1SXzJfTUFTSyAgICAweDcwMAorI2RlZmluZSAgICBSVEw4MzY3Q19EX1JPVVRFUl9QT1JUXzFfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfRF9ST1VURVJfUE9SVF8xX01BU0sgICAgMHg3OAorI2RlZmluZSAgICBSVEw4MzY3Q19EX1JPVVRFUl9QT1JUX1RNUl8xX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RfUk9VVEVSX1BPUlRfVE1SXzFfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSUdNUF9TVEFUSUNfUk9VVEVSX1BPUlQgICAgMHgxYzA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfU1RBVElDX1JPVVRFUl9QT1JUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfU1RBVElDX1JPVVRFUl9QT1JUX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSUdNUF9QT1JUMF9DT05UUk9MICAgIDB4MWMwNQorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQwX0NPTlRST0xfQUxMT1dfUVVFUllfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDBfQ09OVFJPTF9BTExPV19RVUVSWV9NQVNLICAgIDB4NDAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQwX0NPTlRST0xfQUxMT1dfUkVQT1JUX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQwX0NPTlRST0xfQUxMT1dfUkVQT1JUX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDBfQ09OVFJPTF9BTExPV19MRUFWRV9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUMF9DT05UUk9MX0FMTE9XX0xFQVZFX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDBfQ09OVFJPTF9BTExPV19NUlBfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDBfQ09OVFJPTF9BTExPV19NUlBfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQwX0NPTlRST0xfQUxMT1dfTUNfREFUQV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUMF9DT05UUk9MX0FMTE9XX01DX0RBVEFfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQwX0NPTlRST0xfTUxEdjJfT1BfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUMF9DT05UUk9MX01MRHYyX09QX01BU0sgICAgMHgzMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUMF9DT05UUk9MX01MRHYxX09QX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDBfQ09OVFJPTF9NTER2MV9PUF9NQVNLICAgIDB4QzAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUMF9DT05UUk9MX0lHTVBWM19PUF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQwX0NPTlRST0xfSUdNUFYzX09QX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQwX0NPTlRST0xfSUdNUFYyX09QX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDBfQ09OVFJPTF9JR01QVjJfT1BfTUFTSyAgICAweEMKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUMF9DT05UUk9MX0lHTVBWMV9PUF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQwX0NPTlRST0xfSUdNUFYxX09QX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lHTVBfUE9SVDFfQ09OVFJPTCAgICAweDFjMDYKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUMV9DT05UUk9MX0FMTE9XX1FVRVJZX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQxX0NPTlRST0xfQUxMT1dfUVVFUllfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUMV9DT05UUk9MX0FMTE9XX1JFUE9SVF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUMV9DT05UUk9MX0FMTE9XX1JFUE9SVF9NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQxX0NPTlRST0xfQUxMT1dfTEVBVkVfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDFfQ09OVFJPTF9BTExPV19MRUFWRV9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQxX0NPTlRST0xfQUxMT1dfTVJQX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQxX0NPTlRST0xfQUxMT1dfTVJQX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUMV9DT05UUk9MX0FMTE9XX01DX0RBVEFfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDFfQ09OVFJPTF9BTExPV19NQ19EQVRBX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUMV9DT05UUk9MX01MRHYyX09QX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDFfQ09OVFJPTF9NTER2Ml9PUF9NQVNLICAgIDB4MzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDFfQ09OVFJPTF9NTER2MV9PUF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQxX0NPTlRST0xfTUxEdjFfT1BfTUFTSyAgICAweEMwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDFfQ09OVFJPTF9JR01QVjNfT1BfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUMV9DT05UUk9MX0lHTVBWM19PUF9NQVNLICAgIDB4MzAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUMV9DT05UUk9MX0lHTVBWMl9PUF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQxX0NPTlRST0xfSUdNUFYyX09QX01BU0sgICAgMHhDCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDFfQ09OVFJPTF9JR01QVjFfT1BfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUMV9DT05UUk9MX0lHTVBWMV9PUF9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JR01QX1BPUlQyX0NPTlRST0wgICAgMHgxYzA3CisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDJfQ09OVFJPTF9BTExPV19RVUVSWV9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUMl9DT05UUk9MX0FMTE9XX1FVRVJZX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDJfQ09OVFJPTF9BTExPV19SRVBPUlRfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDJfQ09OVFJPTF9BTExPV19SRVBPUlRfTUFTSyAgICAweDIwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUMl9DT05UUk9MX0FMTE9XX0xFQVZFX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQyX0NPTlRST0xfQUxMT1dfTEVBVkVfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUMl9DT05UUk9MX0FMTE9XX01SUF9PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUMl9DT05UUk9MX0FMTE9XX01SUF9NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDJfQ09OVFJPTF9BTExPV19NQ19EQVRBX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQyX0NPTlRST0xfQUxMT1dfTUNfREFUQV9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDJfQ09OVFJPTF9NTER2Ml9PUF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQyX0NPTlRST0xfTUxEdjJfT1BfTUFTSyAgICAweDMwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQyX0NPTlRST0xfTUxEdjFfT1BfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUMl9DT05UUk9MX01MRHYxX09QX01BU0sgICAgMHhDMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQyX0NPTlRST0xfSUdNUFYzX09QX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDJfQ09OVFJPTF9JR01QVjNfT1BfTUFTSyAgICAweDMwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDJfQ09OVFJPTF9JR01QVjJfT1BfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUMl9DT05UUk9MX0lHTVBWMl9PUF9NQVNLICAgIDB4QworI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQyX0NPTlRST0xfSUdNUFYxX09QX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDJfQ09OVFJPTF9JR01QVjFfT1BfTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSUdNUF9QT1JUM19DT05UUk9MICAgIDB4MWMwOAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQzX0NPTlRST0xfQUxMT1dfUVVFUllfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDNfQ09OVFJPTF9BTExPV19RVUVSWV9NQVNLICAgIDB4NDAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQzX0NPTlRST0xfQUxMT1dfUkVQT1JUX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQzX0NPTlRST0xfQUxMT1dfUkVQT1JUX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDNfQ09OVFJPTF9BTExPV19MRUFWRV9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUM19DT05UUk9MX0FMTE9XX0xFQVZFX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDNfQ09OVFJPTF9BTExPV19NUlBfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDNfQ09OVFJPTF9BTExPV19NUlBfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQzX0NPTlRST0xfQUxMT1dfTUNfREFUQV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUM19DT05UUk9MX0FMTE9XX01DX0RBVEFfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQzX0NPTlRST0xfTUxEdjJfT1BfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUM19DT05UUk9MX01MRHYyX09QX01BU0sgICAgMHgzMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUM19DT05UUk9MX01MRHYxX09QX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDNfQ09OVFJPTF9NTER2MV9PUF9NQVNLICAgIDB4QzAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUM19DT05UUk9MX0lHTVBWM19PUF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQzX0NPTlRST0xfSUdNUFYzX09QX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQzX0NPTlRST0xfSUdNUFYyX09QX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDNfQ09OVFJPTF9JR01QVjJfT1BfTUFTSyAgICAweEMKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUM19DT05UUk9MX0lHTVBWMV9PUF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQzX0NPTlRST0xfSUdNUFYxX09QX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lHTVBfUE9SVDRfQ09OVFJPTCAgICAweDFjMDkKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUNF9DT05UUk9MX0FMTE9XX1FVRVJZX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ0X0NPTlRST0xfQUxMT1dfUVVFUllfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUNF9DT05UUk9MX0FMTE9XX1JFUE9SVF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUNF9DT05UUk9MX0FMTE9XX1JFUE9SVF9NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ0X0NPTlRST0xfQUxMT1dfTEVBVkVfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDRfQ09OVFJPTF9BTExPV19MRUFWRV9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ0X0NPTlRST0xfQUxMT1dfTVJQX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ0X0NPTlRST0xfQUxMT1dfTVJQX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUNF9DT05UUk9MX0FMTE9XX01DX0RBVEFfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDRfQ09OVFJPTF9BTExPV19NQ19EQVRBX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUNF9DT05UUk9MX01MRHYyX09QX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDRfQ09OVFJPTF9NTER2Ml9PUF9NQVNLICAgIDB4MzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDRfQ09OVFJPTF9NTER2MV9PUF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ0X0NPTlRST0xfTUxEdjFfT1BfTUFTSyAgICAweEMwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDRfQ09OVFJPTF9JR01QVjNfT1BfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUNF9DT05UUk9MX0lHTVBWM19PUF9NQVNLICAgIDB4MzAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUNF9DT05UUk9MX0lHTVBWMl9PUF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ0X0NPTlRST0xfSUdNUFYyX09QX01BU0sgICAgMHhDCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDRfQ09OVFJPTF9JR01QVjFfT1BfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUNF9DT05UUk9MX0lHTVBWMV9PUF9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JR01QX1BPUlQ1X0NPTlRST0wgICAgMHgxYzBhCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDVfQ09OVFJPTF9BTExPV19RVUVSWV9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUNV9DT05UUk9MX0FMTE9XX1FVRVJZX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDVfQ09OVFJPTF9BTExPV19SRVBPUlRfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDVfQ09OVFJPTF9BTExPV19SRVBPUlRfTUFTSyAgICAweDIwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUNV9DT05UUk9MX0FMTE9XX0xFQVZFX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ1X0NPTlRST0xfQUxMT1dfTEVBVkVfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUNV9DT05UUk9MX0FMTE9XX01SUF9PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUNV9DT05UUk9MX0FMTE9XX01SUF9NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDVfQ09OVFJPTF9BTExPV19NQ19EQVRBX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ1X0NPTlRST0xfQUxMT1dfTUNfREFUQV9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDVfQ09OVFJPTF9NTER2Ml9PUF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ1X0NPTlRST0xfTUxEdjJfT1BfTUFTSyAgICAweDMwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ1X0NPTlRST0xfTUxEdjFfT1BfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUNV9DT05UUk9MX01MRHYxX09QX01BU0sgICAgMHhDMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ1X0NPTlRST0xfSUdNUFYzX09QX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDVfQ09OVFJPTF9JR01QVjNfT1BfTUFTSyAgICAweDMwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDVfQ09OVFJPTF9JR01QVjJfT1BfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUNV9DT05UUk9MX0lHTVBWMl9PUF9NQVNLICAgIDB4QworI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ1X0NPTlRST0xfSUdNUFYxX09QX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDVfQ09OVFJPTF9JR01QVjFfT1BfTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSUdNUF9QT1JUNl9DT05UUk9MICAgIDB4MWMwYgorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ2X0NPTlRST0xfQUxMT1dfUVVFUllfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDZfQ09OVFJPTF9BTExPV19RVUVSWV9NQVNLICAgIDB4NDAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ2X0NPTlRST0xfQUxMT1dfUkVQT1JUX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ2X0NPTlRST0xfQUxMT1dfUkVQT1JUX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDZfQ09OVFJPTF9BTExPV19MRUFWRV9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUNl9DT05UUk9MX0FMTE9XX0xFQVZFX01BU0sgICAgMHgxMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDZfQ09OVFJPTF9BTExPV19NUlBfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDZfQ09OVFJPTF9BTExPV19NUlBfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ2X0NPTlRST0xfQUxMT1dfTUNfREFUQV9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUNl9DT05UUk9MX0FMTE9XX01DX0RBVEFfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ2X0NPTlRST0xfTUxEdjJfT1BfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUNl9DT05UUk9MX01MRHYyX09QX01BU0sgICAgMHgzMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUNl9DT05UUk9MX01MRHYxX09QX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDZfQ09OVFJPTF9NTER2MV9PUF9NQVNLICAgIDB4QzAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUNl9DT05UUk9MX0lHTVBWM19PUF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ2X0NPTlRST0xfSUdNUFYzX09QX01BU0sgICAgMHgzMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ2X0NPTlRST0xfSUdNUFYyX09QX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDZfQ09OVFJPTF9JR01QVjJfT1BfTUFTSyAgICAweEMKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUNl9DT05UUk9MX0lHTVBWMV9PUF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ2X0NPTlRST0xfSUdNUFYxX09QX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lHTVBfUE9SVDdfQ09OVFJPTCAgICAweDFjMGMKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUN19DT05UUk9MX0FMTE9XX1FVRVJZX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ3X0NPTlRST0xfQUxMT1dfUVVFUllfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUN19DT05UUk9MX0FMTE9XX1JFUE9SVF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUN19DT05UUk9MX0FMTE9XX1JFUE9SVF9NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ3X0NPTlRST0xfQUxMT1dfTEVBVkVfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDdfQ09OVFJPTF9BTExPV19MRUFWRV9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ3X0NPTlRST0xfQUxMT1dfTVJQX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ3X0NPTlRST0xfQUxMT1dfTVJQX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUN19DT05UUk9MX0FMTE9XX01DX0RBVEFfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDdfQ09OVFJPTF9BTExPV19NQ19EQVRBX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUN19DT05UUk9MX01MRHYyX09QX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDdfQ09OVFJPTF9NTER2Ml9PUF9NQVNLICAgIDB4MzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDdfQ09OVFJPTF9NTER2MV9PUF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ3X0NPTlRST0xfTUxEdjFfT1BfTUFTSyAgICAweEMwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDdfQ09OVFJPTF9JR01QVjNfT1BfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUN19DT05UUk9MX0lHTVBWM19PUF9NQVNLICAgIDB4MzAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUN19DT05UUk9MX0lHTVBWMl9PUF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ3X0NPTlRST0xfSUdNUFYyX09QX01BU0sgICAgMHhDCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDdfQ09OVFJPTF9JR01QVjFfT1BfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUN19DT05UUk9MX0lHTVBWMV9PUF9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JR01QX1BPUlQwMV9NQVhfR1JPVVAgICAgMHgxYzBkCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQxX01BWF9HUk9VUF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9NQVhfR1JPVVBfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfTUFYX0dST1VQX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX01BWF9HUk9VUF9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSUdNUF9QT1JUMjNfTUFYX0dST1VQICAgIDB4MWMwZQorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19NQVhfR1JPVVBfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfTUFYX0dST1VQX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX01BWF9HUk9VUF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMl9NQVhfR1JPVVBfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lHTVBfUE9SVDQ1X01BWF9HUk9VUCAgICAweDFjMGYKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfTUFYX0dST1VQX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ1X01BWF9HUk9VUF9NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9NQVhfR1JPVVBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfTUFYX0dST1VQX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JR01QX1BPUlQ2N19NQVhfR1JPVVAgICAgMHgxYzEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ3X01BWF9HUk9VUF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19NQVhfR1JPVVBfTUFTSyAgICAweEZGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfTUFYX0dST1VQX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X01BWF9HUk9VUF9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSUdNUF9QT1JUMDFfQ1VSUkVOVF9HUk9VUCAgICAweDFjMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfQ1VSUkVOVF9HUk9VUF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9DVVJSRU5UX0dST1VQX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX0NVUlJFTlRfR1JPVVBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDBfQ1VSUkVOVF9HUk9VUF9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSUdNUF9QT1JUMjNfQ1VSUkVOVF9HUk9VUCAgICAweDFjMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDNfQ1VSUkVOVF9HUk9VUF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19DVVJSRU5UX0dST1VQX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX0NVUlJFTlRfR1JPVVBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfQ1VSUkVOVF9HUk9VUF9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSUdNUF9QT1JUNDVfQ1VSUkVOVF9HUk9VUCAgICAweDFjMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDVfQ1VSUkVOVF9HUk9VUF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNV9DVVJSRU5UX0dST1VQX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X0NVUlJFTlRfR1JPVVBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDRfQ1VSUkVOVF9HUk9VUF9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSUdNUF9QT1JUNjdfQ1VSUkVOVF9HUk9VUCAgICAweDFjMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDdfQ1VSUkVOVF9HUk9VUF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUN19DVVJSRU5UX0dST1VQX01BU0sgICAgMHhGRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ2X0NVUlJFTlRfR1JPVVBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDZfQ1VSUkVOVF9HUk9VUF9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSUdNUF9NTERfQ0ZHMyAgICAweDFjMTUKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9NTERfSVA2X0JZUEFTU19PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX01MRF9JUDZfQllQQVNTX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX01MRF9JUDRfQllQQVNTXzIzOV8yNTVfMjU1X09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfTUxEX0lQNF9CWVBBU1NfMjM5XzI1NV8yNTVfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfTUxEX0lQNF9CWVBBU1NfMjI0XzBfMV9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX01MRF9JUDRfQllQQVNTXzIyNF8wXzFfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9NTERfSVA0X0JZUEFTU18yMjRfMF8wX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfTUxEX0lQNF9CWVBBU1NfMjI0XzBfMF9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19SRVBPUlRfTEVBVkVfRk9SV0FSRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19SRVBPUlRfTEVBVkVfRk9SV0FSRF9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JR01QX01MRF9DRkc0ICAgIDB4MWMxNgorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX01MRF9DRkc0X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfTUxEX0NGRzRfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JR01QX0dST1VQX1VTQUdFX0xJU1QwICAgIDB4MWMyMAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JR01QX0dST1VQX1VTQUdFX0xJU1QxICAgIDB4MWMyMQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JR01QX0dST1VQX1VTQUdFX0xJU1QyICAgIDB4MWMyMgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JR01QX0dST1VQX1VTQUdFX0xJU1QzICAgIDB4MWMyMworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JR01QX0dST1VQX1VTQUdFX0xJU1Q0ICAgIDB4MWMyNAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JR01QX0dST1VQX1VTQUdFX0xJU1Q1ICAgIDB4MWMyNQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JR01QX0dST1VQX1VTQUdFX0xJU1Q2ICAgIDB4MWMyNgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JR01QX0dST1VQX1VTQUdFX0xJU1Q3ICAgIDB4MWMyNworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JR01QX0dST1VQX1VTQUdFX0xJU1Q4ICAgIDB4MWMyOAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JR01QX0dST1VQX1VTQUdFX0xJU1Q5ICAgIDB4MWMyOQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JR01QX0dST1VQX1VTQUdFX0xJU1QxMCAgICAweDFjMmEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSUdNUF9HUk9VUF9VU0FHRV9MSVNUMTEgICAgMHgxYzJiCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lHTVBfR1JPVVBfVVNBR0VfTElTVDEyICAgIDB4MWMyYworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JR01QX0dST1VQX1VTQUdFX0xJU1QxMyAgICAweDFjMmQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSUdNUF9HUk9VUF9VU0FHRV9MSVNUMTQgICAgMHgxYzJlCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lHTVBfR1JPVVBfVVNBR0VfTElTVDE1ICAgIDB4MWMyZgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FQVZfQ1RSTDAgICAgMHgxYzMwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VBVl9DVFJMMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19FQVZfQ1RSTDBfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VBVl9DVFJMMSAgICAweDFjMzEKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVNQVBfRUFWX1BSSTNfUkVHRU5fT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVNQVBfRUFWX1BSSTNfUkVHRU5fTUFTSyAgICAweEUwMAorI2RlZmluZSAgICBSVEw4MzY3Q19SRU1BUF9FQVZfUFJJMl9SRUdFTl9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19SRU1BUF9FQVZfUFJJMl9SRUdFTl9NQVNLICAgIDB4MUMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFTUFQX0VBVl9QUkkxX1JFR0VOX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFTUFQX0VBVl9QUkkxX1JFR0VOX01BU0sgICAgMHgzOAorI2RlZmluZSAgICBSVEw4MzY3Q19SRU1BUF9FQVZfUFJJMF9SRUdFTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19SRU1BUF9FQVZfUFJJMF9SRUdFTl9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FQVZfQ1RSTDIgICAgMHgxYzMyCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFTUFQX0VBVl9QUkk3X1JFR0VOX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1JFTUFQX0VBVl9QUkk3X1JFR0VOX01BU0sgICAgMHhFMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVNQVBfRUFWX1BSSTZfUkVHRU5fT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVNQVBfRUFWX1BSSTZfUkVHRU5fTUFTSyAgICAweDFDMAorI2RlZmluZSAgICBSVEw4MzY3Q19SRU1BUF9FQVZfUFJJNV9SRUdFTl9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19SRU1BUF9FQVZfUFJJNV9SRUdFTl9NQVNLICAgIDB4MzgKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVNQVBfRUFWX1BSSTRfUkVHRU5fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVNQVBfRUFWX1BSSTRfUkVHRU5fTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1lTX1RJTUVfRlJFUSAgICAweDFjNDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1lTX1RJTUVfT0ZGU0VUX0wgICAgMHgxYzQ0CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NZU19USU1FX09GRlNFVF9IICAgIDB4MWM0NQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TWVNfVElNRV9PRkZTRVRfNTEyTlNfTCAgICAweDFjNDYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1lTX1RJTUVfT0ZGU0VUXzUxMk5TX0ggICAgMHgxYzQ3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NZU19USU1FX09GRlNFVF9UVU5FX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1NZU19USU1FX09GRlNFVF9UVU5FX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19TWVNfVElNRV9PRkZTRVRfNTEyTlNfSF9TWVNfVElNRV9PRkZTRVRfNTEyTlNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1lTX1RJTUVfT0ZGU0VUXzUxMk5TX0hfU1lTX1RJTUVfT0ZGU0VUXzUxMk5TX01BU0sgICAgMHgxRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TWVNfVElNRV9TRUNfVFJBTlNJVCAgICAweDFjNDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1lTX1RJTUVfU0VDX1RSQU5TSVRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1lTX1RJTUVfU0VDX1RSQU5TSVRfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1lTX1RJTUVfU0VDX0hJR0hfTCAgICAweDFjNDkKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1lTX1RJTUVfU0VDX0hJR0hfSCAgICAweDFjNGEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1lTX1RJTUVfNTEyTlNfTCAgICAweDFjNGIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1lTX1RJTUVfNTEyTlNfSCAgICAweDFjNGMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1lTX1RJTUVfNTEyTlNfSF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TWVNfVElNRV81MTJOU19IX01BU0sgICAgMHgxRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GQUxMQkFDS19DVFJMICAgIDB4MWM3MAorI2RlZmluZSAgICBSVEw4MzY3Q19GQUxMQkFDS19QTF9ERUNfRU5fT0ZGU0VUICAgIDE1CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZBTExCQUNLX1BMX0RFQ19FTl9NQVNLICAgIDB4ODAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19GQUxMQkFDS19NT05JVE9SX1RJTUVPVVRfSUdOT1JFX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19GQUxMQkFDS19NT05JVE9SX1RJTUVPVVRfSUdOT1JFX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZBTExCQUNLX0VSUk9SX1JBVElPX1RIUkVTSE9MRF9PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfRkFMTEJBQ0tfRVJST1JfUkFUSU9fVEhSRVNIT0xEX01BU0sgICAgMHgzODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZBTExCQUNLX01PTklUT1JNQVhfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRkFMTEJBQ0tfTU9OSVRPUk1BWF9NQVNLICAgIDB4NzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZBTExCQUNLX01PTklUT1JfVElNRU9VVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GQUxMQkFDS19NT05JVE9SX1RJTUVPVVRfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZBTExCQUNLX1BPUlQwX0NGRzAgICAgMHgxYzcxCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZBTExCQUNLX1BPUlQwX0NGRzBfUkVTRVRfUE9XRVJfTEVWRUxfT0ZGU0VUICAgIDE1CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZBTExCQUNLX1BPUlQwX0NGRzBfUkVTRVRfUE9XRVJfTEVWRUxfTUFTSyAgICAweDgwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkFMTEJBQ0tfUE9SVDBfQ0ZHMF9FTkFCTEVfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZBTExCQUNLX1BPUlQwX0NGRzBfRU5BQkxFX01BU0sgICAgMHg0MDAwCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZBTExCQUNLX1BPUlQwX0NGRzEgICAgMHgxYzcyCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZBTExCQUNLX1BPUlQwX0NGRzIgICAgMHgxYzczCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZBTExCQUNLX1BPUlQwX0NGRzJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkFMTEJBQ0tfUE9SVDBfQ0ZHMl9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZBTExCQUNLX1BPUlQwX0NGRzMgICAgMHgxYzc0CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZBTExCQUNLX1BPUlQwX0NGRzNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkFMTEJBQ0tfUE9SVDBfQ0ZHM19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkFMTEJBQ0tfUE9SVDFfQ0ZHMCAgICAweDFjNzUKKyNkZWZpbmUgICAgUlRMODM2N0NfRkFMTEJBQ0tfUE9SVDFfQ0ZHMF9SRVNFVF9QT1dFUl9MRVZFTF9PRkZTRVQgICAgMTUKKyNkZWZpbmUgICAgUlRMODM2N0NfRkFMTEJBQ0tfUE9SVDFfQ0ZHMF9SRVNFVF9QT1dFUl9MRVZFTF9NQVNLICAgIDB4ODAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19GQUxMQkFDS19QT1JUMV9DRkcwX0VOQUJMRV9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfRkFMTEJBQ0tfUE9SVDFfQ0ZHMF9FTkFCTEVfTUFTSyAgICAweDQwMDAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkFMTEJBQ0tfUE9SVDFfQ0ZHMSAgICAweDFjNzYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkFMTEJBQ0tfUE9SVDFfQ0ZHMiAgICAweDFjNzcKKyNkZWZpbmUgICAgUlRMODM2N0NfRkFMTEJBQ0tfUE9SVDFfQ0ZHMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GQUxMQkFDS19QT1JUMV9DRkcyX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkFMTEJBQ0tfUE9SVDFfQ0ZHMyAgICAweDFjNzgKKyNkZWZpbmUgICAgUlRMODM2N0NfRkFMTEJBQ0tfUE9SVDFfQ0ZHM19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GQUxMQkFDS19QT1JUMV9DRkczX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GQUxMQkFDS19QT1JUMl9DRkcwICAgIDB4MWM3OQorI2RlZmluZSAgICBSVEw4MzY3Q19GQUxMQkFDS19QT1JUMl9DRkcwX1JFU0VUX1BPV0VSX0xFVkVMX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19GQUxMQkFDS19QT1JUMl9DRkcwX1JFU0VUX1BPV0VSX0xFVkVMX01BU0sgICAgMHg4MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZBTExCQUNLX1BPUlQyX0NGRzBfRU5BQkxFX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19GQUxMQkFDS19QT1JUMl9DRkcwX0VOQUJMRV9NQVNLICAgIDB4NDAwMAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GQUxMQkFDS19QT1JUMl9DRkcxICAgIDB4MWM3YQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GQUxMQkFDS19QT1JUMl9DRkcyICAgIDB4MWM3YgorI2RlZmluZSAgICBSVEw4MzY3Q19GQUxMQkFDS19QT1JUMl9DRkcyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZBTExCQUNLX1BPUlQyX0NGRzJfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GQUxMQkFDS19QT1JUMl9DRkczICAgIDB4MWM3YworI2RlZmluZSAgICBSVEw4MzY3Q19GQUxMQkFDS19QT1JUMl9DRkczX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZBTExCQUNLX1BPUlQyX0NGRzNfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZBTExCQUNLX1BPUlQzX0NGRzAgICAgMHgxYzdkCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZBTExCQUNLX1BPUlQzX0NGRzBfUkVTRVRfUE9XRVJfTEVWRUxfT0ZGU0VUICAgIDE1CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZBTExCQUNLX1BPUlQzX0NGRzBfUkVTRVRfUE9XRVJfTEVWRUxfTUFTSyAgICAweDgwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkFMTEJBQ0tfUE9SVDNfQ0ZHMF9FTkFCTEVfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZBTExCQUNLX1BPUlQzX0NGRzBfRU5BQkxFX01BU0sgICAgMHg0MDAwCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZBTExCQUNLX1BPUlQzX0NGRzEgICAgMHgxYzdlCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZBTExCQUNLX1BPUlQzX0NGRzIgICAgMHgxYzdmCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZBTExCQUNLX1BPUlQzX0NGRzJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkFMTEJBQ0tfUE9SVDNfQ0ZHMl9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZBTExCQUNLX1BPUlQzX0NGRzMgICAgMHgxYzgwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZBTExCQUNLX1BPUlQzX0NGRzNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkFMTEJBQ0tfUE9SVDNfQ0ZHM19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkFMTEJBQ0tfUE9SVDRfQ0ZHMCAgICAweDFjODEKKyNkZWZpbmUgICAgUlRMODM2N0NfRkFMTEJBQ0tfUE9SVDRfQ0ZHMF9SRVNFVF9QT1dFUl9MRVZFTF9PRkZTRVQgICAgMTUKKyNkZWZpbmUgICAgUlRMODM2N0NfRkFMTEJBQ0tfUE9SVDRfQ0ZHMF9SRVNFVF9QT1dFUl9MRVZFTF9NQVNLICAgIDB4ODAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19GQUxMQkFDS19QT1JUNF9DRkcwX0VOQUJMRV9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfRkFMTEJBQ0tfUE9SVDRfQ0ZHMF9FTkFCTEVfTUFTSyAgICAweDQwMDAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkFMTEJBQ0tfUE9SVDRfQ0ZHMSAgICAweDFjODIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkFMTEJBQ0tfUE9SVDRfQ0ZHMiAgICAweDFjODMKKyNkZWZpbmUgICAgUlRMODM2N0NfRkFMTEJBQ0tfUE9SVDRfQ0ZHMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GQUxMQkFDS19QT1JUNF9DRkcyX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkFMTEJBQ0tfUE9SVDRfQ0ZHMyAgICAweDFjODQKKyNkZWZpbmUgICAgUlRMODM2N0NfRkFMTEJBQ0tfUE9SVDRfQ0ZHM19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GQUxMQkFDS19QT1JUNF9DRkczX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GQUxMQkFDS19DVFJMMSAgICAweDFjODUKKyNkZWZpbmUgICAgUlRMODM2N0NfRkFMTEJBQ0tfVkFMSURGTE9XX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZBTExCQUNLX1ZBTElERkxPV19NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19GQUxMQkFDS19TVE9QX1RNUl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GQUxMQkFDS19TVE9QX1RNUl9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GQUxMQkFDS19DUEwgICAgMHgxYzg2CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ0X0NQTF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUNF9DUExfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQzX0NQTF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUM19DUExfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDJfQ1BMX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQyX0NQTF9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMV9DUExfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDFfQ1BMX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQwX0NQTF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUMF9DUExfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkFMTEJBQ0tfUEhZX1BBR0UgICAgMHgxYzg3CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZBTExCQUNLX1BIWV9QQUdFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZBTExCQUNLX1BIWV9QQUdFX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkFMTEJBQ0tfUEhZX1JFRyAgICAweDFjODgKKyNkZWZpbmUgICAgUlRMODM2N0NfRkFMTEJBQ0tfUEhZX1JFR19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GQUxMQkFDS19QSFlfUkVHX01BU0sgICAgMHgxRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BRkJLX0lORk9fWDAgICAgMHgxYzg5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FGQktfSU5GT19YMSAgICAweDFjOGEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUZCS19JTkZPX1gyICAgIDB4MWM4YgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BRkJLX0lORk9fWDMgICAgMHgxYzhjCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FGQktfSU5GT19YNCAgICAweDFjOGQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUZCS19JTkZPX1g1ICAgIDB4MWM4ZQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BRkJLX0lORk9fWDYgICAgMHgxYzhmCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FGQktfSU5GT19YNyAgICAweDFjOTAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQUZCS19JTkZPX1g4ICAgIDB4MWM5MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19BRkJLX0lORk9fWDkgICAgMHgxYzkyCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FGQktfSU5GT19YMTAgICAgMHgxYzkzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FGQktfSU5GT19YMTEgICAgMHgxYzk0CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZBTExCQUNLX1BPUlQ1X0NGRzAgICAgMHgxY2EwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZBTExCQUNLX1BPUlQ1X0NGRzBfUkVTRVRfUE9XRVJfTEVWRUxfT0ZGU0VUICAgIDE1CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZBTExCQUNLX1BPUlQ1X0NGRzBfUkVTRVRfUE9XRVJfTEVWRUxfTUFTSyAgICAweDgwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkFMTEJBQ0tfUE9SVDVfQ0ZHMF9FTkFCTEVfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZBTExCQUNLX1BPUlQ1X0NGRzBfRU5BQkxFX01BU0sgICAgMHg0MDAwCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZBTExCQUNLX1BPUlQ1X0NGRzEgICAgMHgxY2ExCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZBTExCQUNLX1BPUlQ1X0NGRzIgICAgMHgxY2EyCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZBTExCQUNLX1BPUlQ1X0NGRzJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkFMTEJBQ0tfUE9SVDVfQ0ZHMl9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZBTExCQUNLX1BPUlQ1X0NGRzMgICAgMHgxY2EzCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZBTExCQUNLX1BPUlQ1X0NGRzNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRkFMTEJBQ0tfUE9SVDVfQ0ZHM19NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkFMTEJBQ0tfUE9SVDZfQ0ZHMCAgICAweDFjYTQKKyNkZWZpbmUgICAgUlRMODM2N0NfRkFMTEJBQ0tfUE9SVDZfQ0ZHMF9SRVNFVF9QT1dFUl9MRVZFTF9PRkZTRVQgICAgMTUKKyNkZWZpbmUgICAgUlRMODM2N0NfRkFMTEJBQ0tfUE9SVDZfQ0ZHMF9SRVNFVF9QT1dFUl9MRVZFTF9NQVNLICAgIDB4ODAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19GQUxMQkFDS19QT1JUNl9DRkcwX0VOQUJMRV9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfRkFMTEJBQ0tfUE9SVDZfQ0ZHMF9FTkFCTEVfTUFTSyAgICAweDQwMDAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkFMTEJBQ0tfUE9SVDZfQ0ZHMSAgICAweDFjYTUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkFMTEJBQ0tfUE9SVDZfQ0ZHMiAgICAweDFjYTYKKyNkZWZpbmUgICAgUlRMODM2N0NfRkFMTEJBQ0tfUE9SVDZfQ0ZHMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GQUxMQkFDS19QT1JUNl9DRkcyX01BU0sgICAgMHhGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRkFMTEJBQ0tfUE9SVDZfQ0ZHMyAgICAweDFjYTcKKyNkZWZpbmUgICAgUlRMODM2N0NfRkFMTEJBQ0tfUE9SVDZfQ0ZHM19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GQUxMQkFDS19QT1JUNl9DRkczX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GQUxMQkFDS19QT1JUN19DRkcwICAgIDB4MWNhOAorI2RlZmluZSAgICBSVEw4MzY3Q19GQUxMQkFDS19QT1JUN19DRkcwX1JFU0VUX1BPV0VSX0xFVkVMX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19GQUxMQkFDS19QT1JUN19DRkcwX1JFU0VUX1BPV0VSX0xFVkVMX01BU0sgICAgMHg4MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZBTExCQUNLX1BPUlQ3X0NGRzBfRU5BQkxFX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19GQUxMQkFDS19QT1JUN19DRkcwX0VOQUJMRV9NQVNLICAgIDB4NDAwMAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GQUxMQkFDS19QT1JUN19DRkcxICAgIDB4MWNhOQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GQUxMQkFDS19QT1JUN19DRkcyICAgIDB4MWNhYQorI2RlZmluZSAgICBSVEw4MzY3Q19GQUxMQkFDS19QT1JUN19DRkcyX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZBTExCQUNLX1BPUlQ3X0NGRzJfTUFTSyAgICAweEZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GQUxMQkFDS19QT1JUN19DRkczICAgIDB4MWNhYgorI2RlZmluZSAgICBSVEw4MzY3Q19GQUxMQkFDS19QT1JUN19DRkczX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZBTExCQUNLX1BPUlQ3X0NGRzNfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lHTVBfUE9SVDhfQ09OVFJPTCAgICAweDFjYjAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUOF9DT05UUk9MX0FMTE9XX1FVRVJZX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ4X0NPTlRST0xfQUxMT1dfUVVFUllfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUOF9DT05UUk9MX0FMTE9XX1JFUE9SVF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUOF9DT05UUk9MX0FMTE9XX1JFUE9SVF9NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ4X0NPTlRST0xfQUxMT1dfTEVBVkVfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDhfQ09OVFJPTF9BTExPV19MRUFWRV9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ4X0NPTlRST0xfQUxMT1dfTVJQX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ4X0NPTlRST0xfQUxMT1dfTVJQX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUOF9DT05UUk9MX0FMTE9XX01DX0RBVEFfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDhfQ09OVFJPTF9BTExPV19NQ19EQVRBX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUOF9DT05UUk9MX01MRHYyX09QX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDhfQ09OVFJPTF9NTER2Ml9PUF9NQVNLICAgIDB4MzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDhfQ09OVFJPTF9NTER2MV9PUF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ4X0NPTlRST0xfTUxEdjFfT1BfTUFTSyAgICAweEMwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDhfQ09OVFJPTF9JR01QVjNfT1BfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUOF9DT05UUk9MX0lHTVBWM19PUF9NQVNLICAgIDB4MzAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUOF9DT05UUk9MX0lHTVBWMl9PUF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ4X0NPTlRST0xfSUdNUFYyX09QX01BU0sgICAgMHhDCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDhfQ09OVFJPTF9JR01QVjFfT1BfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUOF9DT05UUk9MX0lHTVBWMV9PUF9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JR01QX1BPUlQ5X0NPTlRST0wgICAgMHgxY2IxCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDlfQ09OVFJPTF9BTExPV19RVUVSWV9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUOV9DT05UUk9MX0FMTE9XX1FVRVJZX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDlfQ09OVFJPTF9BTExPV19SRVBPUlRfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDlfQ09OVFJPTF9BTExPV19SRVBPUlRfTUFTSyAgICAweDIwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUOV9DT05UUk9MX0FMTE9XX0xFQVZFX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ5X0NPTlRST0xfQUxMT1dfTEVBVkVfTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUOV9DT05UUk9MX0FMTE9XX01SUF9PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUOV9DT05UUk9MX0FMTE9XX01SUF9NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDlfQ09OVFJPTF9BTExPV19NQ19EQVRBX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ5X0NPTlRST0xfQUxMT1dfTUNfREFUQV9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDlfQ09OVFJPTF9NTER2Ml9PUF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ5X0NPTlRST0xfTUxEdjJfT1BfTUFTSyAgICAweDMwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ5X0NPTlRST0xfTUxEdjFfT1BfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUOV9DT05UUk9MX01MRHYxX09QX01BU0sgICAgMHhDMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ5X0NPTlRST0xfSUdNUFYzX09QX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDlfQ09OVFJPTF9JR01QVjNfT1BfTUFTSyAgICAweDMwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDlfQ09OVFJPTF9JR01QVjJfT1BfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUOV9DT05UUk9MX0lHTVBWMl9PUF9NQVNLICAgIDB4QworI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQ5X0NPTlRST0xfSUdNUFYxX09QX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDlfQ09OVFJPTF9JR01QVjFfT1BfTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSUdNUF9QT1JUMTBfQ09OVFJPTCAgICAweDFjYjIKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUMTBfQ09OVFJPTF9BTExPV19RVUVSWV9PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUMTBfQ09OVFJPTF9BTExPV19RVUVSWV9NQVNLICAgIDB4NDAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQxMF9DT05UUk9MX0FMTE9XX1JFUE9SVF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUMTBfQ09OVFJPTF9BTExPV19SRVBPUlRfTUFTSyAgICAweDIwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUMTBfQ09OVFJPTF9BTExPV19MRUFWRV9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUMTBfQ09OVFJPTF9BTExPV19MRUFWRV9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQxMF9DT05UUk9MX0FMTE9XX01SUF9PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUMTBfQ09OVFJPTF9BTExPV19NUlBfTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQxMF9DT05UUk9MX0FMTE9XX01DX0RBVEFfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDEwX0NPTlRST0xfQUxMT1dfTUNfREFUQV9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDEwX0NPTlRST0xfTUxEdjJfT1BfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUMTBfQ09OVFJPTF9NTER2Ml9PUF9NQVNLICAgIDB4MzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDEwX0NPTlRST0xfTUxEdjFfT1BfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUMTBfQ09OVFJPTF9NTER2MV9PUF9NQVNLICAgIDB4QzAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUMTBfQ09OVFJPTF9JR01QVjNfT1BfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUMTBfQ09OVFJPTF9JR01QVjNfT1BfTUFTSyAgICAweDMwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDEwX0NPTlRST0xfSUdNUFYyX09QX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDEwX0NPTlRST0xfSUdNUFYyX09QX01BU0sgICAgMHhDCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDEwX0NPTlRST0xfSUdNUFYxX09QX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDEwX0NPTlRST0xfSUdNUFYxX09QX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lHTVBfUE9SVDg5X01BWF9HUk9VUCAgICAweDFjYjMKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfTUFYX0dST1VQX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X01BWF9HUk9VUF9NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9NQVhfR1JPVVBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDhfTUFYX0dST1VQX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JR01QX1BPUlQxMF9NQVhfR1JPVVAgICAgMHgxY2I0CisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDEwX01BWF9HUk9VUF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX1BPUlQxMF9NQVhfR1JPVVBfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lHTVBfUE9SVDg5X0NVUlJFTlRfR1JPVVAgICAgMHgxY2I1CisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ5X0NVUlJFTlRfR1JPVVBfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUE9SVDlfQ1VSUkVOVF9HUk9VUF9NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QT1JUOF9DVVJSRU5UX0dST1VQX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BPUlQ4X0NVUlJFTlRfR1JPVVBfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0lHTVBfUE9SVDEwX0NVUlJFTlRfR1JPVVAgICAgMHgxY2I2CisjZGVmaW5lICAgIFJUTDgzNjdDX0lHTVBfUE9SVDEwX0NVUlJFTlRfR1JPVVBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9QT1JUMTBfQ1VSUkVOVF9HUk9VUF9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSUdNUF9MM19DSEVDS1NVTV9DSEVDSyAgICAweDFjYjcKKyNkZWZpbmUgICAgUlRMODM2N0NfSUdNUF9MM19DSEVDS1NVTV9DSEVDS19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JR01QX0wzX0NIRUNLU1VNX0NIRUNLX01BU0sgICAgMHgxCisKKy8qICgxNidoMWQwMCljaGlwXzcwYl9yZWcgKi8KKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUENTWEZfQ0ZHICAgIDB4MWQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QQ1NYRl9DRkdfUmVzZXJ2ZWRfT0ZGU0VUICAgIDE1CisjZGVmaW5lICAgIFJUTDgzNjdDX1BDU1hGX0NGR19SZXNlcnZlZF9NQVNLICAgIDB4ODAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUlNUX1JYRklGT19QN181X09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUlNUX1JYRklGT19QN181X01BU0sgICAgMHg3MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19QQ1NYRl9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUENTWEZfTUFTSyAgICAweEYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUlNUX1JYRklGT19PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUlNUX1JYRklGT19NQVNLICAgIDB4RjgKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0NPTDJSWERWX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19DT0wyUlhEVl9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUEhZX1NERVRfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1BIWV9TREVUX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BIWUlEX0NGRzAgICAgMHgxZDAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19QSFlfQlJEX01PREVfUDdfNV9PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1BIWV9CUkRfTU9ERV9QN181X01BU0sgICAgMHgzODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19QSFlBRF8xNENfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19QSFlBRF8xNENfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUEhZX0JSRF9NT0RFX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19QSFlfQlJEX01PREVfTUFTSyAgICAweDNFMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfQlJEX1BIWUFEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19CUkRfUEhZQURfTUFTSyAgICAweDFGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BIWUlEX0NGRzEgICAgMHgxZDAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19NU0tfTURJX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19NU0tfTURJX01BU0sgICAgMHgxRkUwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19CQVNFX1BIWUFEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19CQVNFX1BIWUFEX01BU0sgICAgMHgxRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QSFlfUE9MTF9DRkcwICAgIDB4MWQwMworI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfSE9UQ01EX1BSRF9FTl9PRkZTRVQgICAgMTUKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0hPVENNRF9QUkRfRU5fTUFTSyAgICAweDgwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0hPVENNRF9FTl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0hPVENNRF9FTl9NQVNLICAgIDB4NzAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUE9MTF9QRVJJT0RfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1BPTExfUEVSSU9EX01BU0sgICAgMHhGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1BFUklfQ01EU19SRF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUEVSSV9DTURTX1JEX01BU0sgICAgMHhGMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUEVSSV9DTURTX1dSX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19QRVJJX0NNRFNfV1JfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEhZX1BPTExfQ0ZHMSAgICAweDFkMDQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEhZX1BPTExfQ0ZHMiAgICAweDFkMDUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEhZX1BPTExfQ0ZHMyAgICAweDFkMDYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEhZX1BPTExfQ0ZHNCAgICAweDFkMDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEhZX1BPTExfQ0ZHNSAgICAweDFkMDgKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEhZX1BPTExfQ0ZHNiAgICAweDFkMDkKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEhZX1BPTExfQ0ZHNyAgICAweDFkMGEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEhZX1BPTExfQ0ZHOCAgICAweDFkMGIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEhZX1BPTExfQ0ZHOSAgICAweDFkMGMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEhZX1BPTExfQ0ZHMTAgICAgMHgxZDBkCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BIWV9QT0xMX0NGRzExICAgIDB4MWQwZQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QSFlfUE9MTF9DRkcxMiAgICAweDFkMGYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUZVU0VfTUlTQyAgICAweDFkMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1NBX1NFTF9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfU0FfU0VMX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUEhZQUQwMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUEhZQUQwMF9NQVNLICAgIDB4MUYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0RTX01JU0MgICAgMHgxZDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19TR01JSV9SWEZDX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfU0dNSUlfUlhGQ19NQVNLICAgIDB4NDAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfU0dNSUlfVFhGQ19PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1NHTUlJX1RYRkNfTUFTSyAgICAweDIwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5CX0FSQl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5CX0FSQl9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfTUFDOF9TRUxfSFNHTUlJX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfTUFDOF9TRUxfSFNHTUlJX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1NHTUlJX0ZEVVBfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19TR01JSV9GRFVQX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1NHTUlJX0xJTktfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1NHTUlJX0xJTktfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfU0dNSUlfU1BEX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19TR01JSV9TUERfTUFTSyAgICAweDE4MAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfTUFDOF9TRUxfU0dNSUlfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX01BQzhfU0VMX1NHTUlJX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfSU5CX1NFTF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfSU5CX1NFTF9NQVNLICAgIDB4MzgKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1NEU19NT0RFXzE4Q19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfU0RTX01PREVfMThDX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZJRk9fQ1RSTCAgICAweDFkMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0xJTktfRE9XTl9DTFJfRklGT19PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0xJTktfRE9XTl9DTFJfRklGT19NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19MUEJLX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfTFBCS19NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19OT1RfRkZfT1VUX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19OT1RfRkZfT1VUX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1dBVEVSX0xFVkVMX0ZEX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19XQVRFUl9MRVZFTF9GRF9NQVNLICAgIDB4MUMwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19XQVRFUl9MRVZFTF9ZMlhfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1dBVEVSX0xFVkVMX1kyWF9NQVNLICAgIDB4MzgKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1dBVEVSX0xFVkVMX1gyWV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfV0FURVJfTEVWRUxfWDJZX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0JDQU1fU0VUVElORyAgICAweDFkMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0JDQU1fTURTX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19CQ0FNX01EU19NQVNLICAgIDB4MTgKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0JDQU1fUkRTX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19CQ0FNX1JEU19NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19HUEhZX0FDU19NSVNDICAgIDB4MWQxNAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfU0VMX0dQSFlfU01JX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19TRUxfR1BIWV9TTUlfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0JSRF9QSFlJRFhfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0JSRF9QSFlJRFhfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfR1BIWV9PQ1BfTVNCXzAgICAgMHgxZDE1CisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19DUFVfT0NQQURSX01TQl9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfQ1BVX09DUEFEUl9NU0JfTUFTSyAgICAweEZDMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfRFc4MDUxX09DUEFEUl9NU0JfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0RXODA1MV9PQ1BBRFJfTVNCX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19HUEhZX09DUF9NU0JfMSAgICAweDFkMTYKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1BBVENIX09DUEFEUl9NU0JfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1BBVENIX09DUEFEUl9NU0JfTUFTSyAgICAweEZDMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUEhZU1RTX09DUEFEUl9NU0JfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1BIWVNUU19PQ1BBRFJfTVNCX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19HUEhZX09DUF9NU0JfMiAgICAweDFkMTcKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1JSQ1BfT0NQQURSX01TQl9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUlJDUF9PQ1BBRFJfTVNCX01BU0sgICAgMHhGQzAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1JUQ1RfT0NQQURSX01TQl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUlRDVF9PQ1BBRFJfTVNCX01BU0sgICAgMHgzRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19HUEhZX09DUF9NU0JfMyAgICAweDFkMTgKKyNkZWZpbmUgICAgUlRMODM2N0NfR1BIWV9PQ1BfTVNCXzNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfR1BIWV9PQ1BfTVNCXzNfTUFTSyAgICAweDNGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0dQSU9fNjdDX0lfWDAgICAgMHgxZDE5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0dQSU9fNjdDX0lfWDEgICAgMHgxZDFhCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0dQSU9fNjdDX0lfWDIgICAgMHgxZDFiCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0dQSU9fNjdDX0lfWDMgICAgMHgxZDFjCisjZGVmaW5lICAgIFJUTDgzNjdDX0dQSU9fNjdDX0lfWDNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfR1BJT182N0NfSV9YM19NQVNLICAgIDB4M0ZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19HUElPXzY3Q19PX1gwICAgIDB4MWQxZAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19HUElPXzY3Q19PX1gxICAgIDB4MWQxZQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19HUElPXzY3Q19PX1gyICAgIDB4MWQxZgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19HUElPXzY3Q19PX1gzICAgIDB4MWQyMAorI2RlZmluZSAgICBSVEw4MzY3Q19HUElPXzY3Q19PX1gzX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0dQSU9fNjdDX09fWDNfTUFTSyAgICAweDNGRkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfR1BJT182N0NfT0VfWDAgICAgMHgxZDIxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0dQSU9fNjdDX09FX1gxICAgIDB4MWQyMgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19HUElPXzY3Q19PRV9YMiAgICAweDFkMjMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfR1BJT182N0NfT0VfWDMgICAgMHgxZDI0CisjZGVmaW5lICAgIFJUTDgzNjdDX0dQSU9fNjdDX09FX1gzX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0dQSU9fNjdDX09FX1gzX01BU0sgICAgMHgzRkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0dQSU9fTU9ERV82N0NfWDAgICAgMHgxZDI1CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0dQSU9fTU9ERV82N0NfWDEgICAgMHgxZDI2CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0dQSU9fTU9ERV82N0NfWDIgICAgMHgxZDI3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0dQSU9fTU9ERV82N0NfWDMgICAgMHgxZDI4CisjZGVmaW5lICAgIFJUTDgzNjdDX0dQSU9fTU9ERV82N0NfWDNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfR1BJT19NT0RFXzY3Q19YM19NQVNLICAgIDB4M0ZGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19XR1BIWV9NSVNDXzAgICAgMHgxZDI5CisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19JTklQSFlfRElTR0lHQV9QN181X09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfSU5JUEhZX0RJU0dJR0FfUDdfNV9NQVNLICAgIDB4RTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfSU5JUEhZX1BXUlVQX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19JTklQSFlfUFdSVVBfTUFTSyAgICAweDFGRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0lOSVBIWV9ESVNHSUdBX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19JTklQSFlfRElTR0lHQV9NQVNLICAgIDB4MUYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfV0dQSFlfTUlTQ18xICAgIDB4MWQyYQorI2RlZmluZSAgICBSVEw4MzY3Q19XR1BIWV9NSVNDXzFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfV0dQSFlfTUlTQ18xX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19XR1BIWV9NSVNDXzIgICAgMHgxZDJiCisjZGVmaW5lICAgIFJUTDgzNjdDX1dHUEhZX01JU0NfMl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19XR1BIWV9NSVNDXzJfTUFTSyAgICAweDNGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19DRkdfQUZCS19HUEhZXzAgICAgMHgxZDJjCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19BRkJLX0dQSFlfMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfQUZCS19HUEhZXzBfTUFTSyAgICAweDFGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0NGR19BRkJLX0dQSFlfMSAgICAweDFkMmQKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0FGQktfR1BIWV8xX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19BRkJLX0dQSFlfMV9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0VGX1NMVl9DVFJMXzAgICAgMHgxZDJlCisjZGVmaW5lICAgIFJUTDgzNjdDX0VGX1NMVl9CVVNZX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19FRl9TTFZfQlVTWV9NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VGX1NMVl9BQ0tfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VGX1NMVl9BQ0tfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19FRl9TTFZfQV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19FRl9TTFZfQV9NQVNLICAgIDB4M0ZDCisjZGVmaW5lICAgIFJUTDgzNjdDX0VGX1NMVl9XRV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19FRl9TTFZfV0VfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfRUZfU0xWX0NFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VGX1NMVl9DRV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRl9TTFZfQ1RSTF8xICAgIDB4MWQyZgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRl9TTFZfQ1RSTF8yICAgIDB4MWQzMAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRlVTRV9NSVNDXzEgICAgMHgxZDMxCisjZGVmaW5lICAgIFJUTDgzNjdDX0VGX0VOX0VGVVNFX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19FRl9FTl9FRlVTRV9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VGX01PREVMX0lEX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX0VGX01PREVMX0lEX01BU0sgICAgMHgzQzAKKyNkZWZpbmUgICAgUlRMODM2N0NfRUZfUlNWRF9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19FRl9SU1ZEX01BU0sgICAgMHgzQworI2RlZmluZSAgICBSVEw4MzY3Q19FRl9TWVNfQ0xLX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VGX1NZU19DTEtfTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSU9fTUlTQ19GVU5DICAgIDB4MWQzMgorI2RlZmluZSAgICBSVEw4MzY3Q19UU1RfTU9ERV9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19UU1RfTU9ERV9NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19VQVJUX0VOX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1VBUlRfRU5fTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5UX0VOX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0lOVF9FTl9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19CVVpfRU5fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQlVaX0VOX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0hUUkFNX0RWUyAgICAweDFkMzMKKyNkZWZpbmUgICAgUlRMODM2N0NfSFRSQU1fRFZTX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0hUUkFNX0RWU19NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19FRl9TTFZfQ1RSTF8zICAgIDB4MWQzNAorI2RlZmluZSAgICBSVEw4MzY3Q19FRl9TTFZfQ1RSTF8zX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0VGX1NMVl9DVFJMXzNfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSU5CQU5EX0VOMTRDICAgIDB4MWQzNQorI2RlZmluZSAgICBSVEw4MzY3Q19JTkJBTkRfRU4xNENfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5CQU5EX0VOMTRDX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0NGR19TV1JfTCAgICAweDFkMzYKKyNkZWZpbmUgICAgUlRMODM2N0NfQU5BUkdfUkRZX1NXUl9MX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19BTkFSR19SRFlfU1dSX0xfTUFTSyAgICAweDQwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQU5BUkdfVkFMSURfU1dSX0xfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX0FOQVJHX1ZBTElEX1NXUl9MX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NBV19TV1JfTF9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19TQVdfU1dSX0xfTUFTSyAgICAweDFFMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0FXX1ZBTElEX1NXUl9MX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NBV19WQUxJRF9TV1JfTF9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1VQU19EQkdPX0xfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfVVBTX0RCR09fTF9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQlRDQU1fQ1RSTCAgICAweDFkMzcKKyNkZWZpbmUgICAgUlRMODM2N0NfVENBTV9SRFNfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfVENBTV9SRFNfTUFTSyAgICAweDFDCisjZGVmaW5lICAgIFJUTDgzNjdDX1RDQU1fTURTX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1RDQU1fTURTX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BCUkFNX0JJU1JfQ1RSTCAgICAweDFkMzgKKyNkZWZpbmUgICAgUlRMODM2N0NfSEFTX0hMRFJNUF9NRF9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19IQVNfSExEUk1QX01EX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEJfSExEUk1QX01EX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BCX0hMRFJNUF9NRF9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0hBU19CSVNSX0JJUlNUTl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19IQVNfQklTUl9CSVJTVE5fTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NFQ19SVU5fSFNBX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NFQ19SVU5fSFNBX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19IQVNfSExEUk1QX1ZBTF9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19IQVNfSExEUk1QX1ZBTF9NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfSEFTX0JJU1JfUFdSU1ROX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0hBU19CSVNSX1BXUlNUTl9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0VDX1JVTl9QQl9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19TRUNfUlVOX1BCX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX1BCX0hMRFJNUF9WQUxfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUEJfSExEUk1QX1ZBTF9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19QQl9CSVNSX0JJUlNUTl9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19QQl9CSVNSX0JJUlNUTl9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19QQl9CSVNSX1BXUlNUTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QQl9CSVNSX1BXUlNUTl9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19DVkxBTlJBTV9CSVNSX0NUUkwgICAgMHgxZDM5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NFQ19SVU5fQ1ZMQU5fT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU0VDX1JVTl9DVkxBTl9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ1ZBTE5fSExEUk1QX01EX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX0NWQUxOX0hMRFJNUF9NRF9NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19DVkFMTl9ITERSTVBfVkFMX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0NWQUxOX0hMRFJNUF9WQUxfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQ1ZMQU5fQklTUl9CSVJTVE5fT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfQ1ZMQU5fQklTUl9CSVJTVE5fTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQ1ZMQU5fQklTUl9QV1JTVE5fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ1ZMQU5fQklTUl9QV1JTVE5fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfQ0ZHXzE1ODhfVElNRVJfRU5fR1BJICAgIDB4MWQzYQorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfMTU4OF9USU1FUl9FTl9HUElfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHXzE1ODhfVElNRVJfRU5fR1BJX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01ESU9fUFJNQl9TVVBQICAgIDB4MWQzYgorI2RlZmluZSAgICBSVEw4MzY3Q19GSUJfSElQUklfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQl9ISVBSSV9NQVNLICAgIDB4NDAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TTVRfRU5fT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NNVF9FTl9NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QNF9GQl9DUExfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX1A0X0ZCX0NQTF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QM19GQl9DUExfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX1AzX0ZCX0NQTF9NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1AyX0ZCX0NQTF9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDJfRkJfQ1BMX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDFfRkJfQ1BMX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1AxX0ZCX0NQTF9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1AwX0ZCX0NQTF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19QMF9GQl9DUExfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19EQkdfUEtHXzgzNjdOX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX0RCR19QS0dfODM2N05fTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX0RCR19QS0dfODM2N1ZCX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX0RCR19QS0dfODM2N1ZCX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfREVCVUdfRU5fT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0RFQlVHX0VOX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfVE1SX0FDS19PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfVE1SX0FDS19NQVNLICAgIDB4MUUKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1BSTUJfU1VQUF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfUFJNQl9TVVBQX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0JPTkQ0UkVBRCAgICAweDFkM2MKKyNkZWZpbmUgICAgUlRMODM2N0NfQk9ORF9CT0lEMF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19CT05EX0JPSUQwX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQk9ORF9TWVNDTEtfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfQk9ORF9TWVNDTEtfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX0JPTkRfUEhZTU9ERV9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19CT05EX1BIWU1PREVfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX0JPTkRfRElTX1BPTl9CSVNUX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0JPTkRfRElTX1BPTl9CSVNUX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19CT05EX0RJU19UQUJMRV9JTklUX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0JPTkRfRElTX1RBQkxFX0lOSVRfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0JPTkRfQllQX0FGRV9QTExfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfQk9ORF9CWVBfQUZFX1BMTF9NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19CT05EX0JZUF9BRkVfUE9SX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0JPTkRfQllQX0FGRV9QT1JfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQk9ORF9CSVNSX0NPTkRfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfQk9ORF9CSVNSX0NPTkRfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQk9ORF9FRl9FTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19CT05EX0VGX0VOX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1JFR19UT19FQ08wICAgIDB4MWQzZAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19SRUdfVE9fRUNPMSAgICAweDFkM2UKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUkVHX1RPX0VDTzIgICAgMHgxZDNmCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1JFR19UT19FQ08zICAgIDB4MWQ0MAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19SRUdfVE9fRUNPNCAgICAweDFkNDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEhZU1RTX0NUUkwwICAgIDB4MWQ0MgorI2RlZmluZSAgICBSVEw4MzY3Q19NQUNSWF9EVVBERVRfRU5fT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfTUFDUlhfRFVQREVUX0VOX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19MTktVUF9ETFlfRU5fT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfTE5LVVBfRExZX0VOX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19HRV8xMDBNX0xOS1VQX0RMWV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19HRV8xMDBNX0xOS1VQX0RMWV9NQVNLICAgIDB4QworI2RlZmluZSAgICBSVEw4MzY3Q19QSFlTVFNfMTBNX0xOS1VQX0RMWV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QSFlTVFNfMTBNX0xOS1VQX0RMWV9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TU0NfQ1RSTDBfMCAgICAweDFkNDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwwXzBfU1NDX1RZUEVfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMMF8wX1NTQ19UWVBFX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMMF8wX1BIQVNFX0xJTV9TRUxfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwwXzBfUEhBU0VfTElNX1NFTF9NQVNLICAgIDB4MUZFMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDBfMF9QSEFTRV9MSU1fRU5fT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwwXzBfUEhBU0VfTElNX0VOX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDBfMF9ETExfTU9ERV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDBfMF9ETExfTU9ERV9NQVNLICAgIDB4QworI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDBfMF9TU0NfRU5fT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwwXzBfU1NDX0VOX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMMF8wX1NTQ19NT0RFX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMMF8wX1NTQ19NT0RFX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NTQ19SRE1fU0VFRCAgICAweDFkNDUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1NDX1BOX1BPTFlfU0VMICAgIDB4MWQ0NgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TU0NfQ1RSTDBfMyAgICAweDFkNDcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwwXzNfUEhTRlRfQ05UX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMMF8zX1BIU0ZUX0NOVF9NQVNLICAgIDB4N0YwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDBfM19QSFNGVF9BX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMMF8zX1BIU0ZUX0FfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMMF8zX1BIU0ZUX0JfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwwXzNfUEhTRlRfQl9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwwXzNfUEhTRlRfVVBETl9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDBfM19QSFNGVF9VUEROX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDBfM19QSFNGVF9QUkRfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwwXzNfUEhTRlRfUFJEX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDBfM19QTl9QT0xZX0RFR19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDBfM19QTl9QT0xZX0RFR19NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TU0NfQ1RSTDBfNCAgICAweDFkNDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwwXzRfU1NDX1VQMUROMF9PRkZTRVQgICAgMTUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwwXzRfU1NDX1VQMUROMF9NQVNLICAgIDB4ODAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDBfNF9TU0NfUEVSSU9EX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMMF80X1NTQ19QRVJJT0RfTUFTSyAgICAweDdGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwwXzRfU1NDX09GRlNFVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDBfNF9TU0NfT0ZGU0VUX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TU0NfQ1RSTDBfNSAgICAweDFkNDkKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwwXzVfUEhfT0ZTX1RPR19PRkZTRVQgICAgMTUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwwXzVfUEhfT0ZTX1RPR19NQVNLICAgIDB4ODAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDBfNV9QSF9PRlNfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMMF81X1BIX09GU19NQVNLICAgIDB4N0MwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDBfNV9TU0NfU1RFUF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDBfNV9TU0NfU1RFUF9NQVNLICAgIDB4M0YwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMMF81X1NTQ19URVNUX01PREVfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwwXzVfU1NDX1RFU1RfTU9ERV9NQVNLICAgIDB4QworI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDBfNV9TU0NfUEhfQ0ZHX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMMF81X1NTQ19QSF9DRkdfTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1NDX1NUUzAgICAgMHgxZDRhCisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19TVFMwX09GU19CVVNZX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfU1RTMF9PRlNfQlVTWV9NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfU1RTMF9PRlNfVE9UQUxfUl9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfU1RTMF9PRlNfVE9UQUxfUl9NQVNLICAgIDB4MUYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfU1RTMF9DTlRfR1JZMF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfU1RTMF9DTlRfR1JZMF9NQVNLICAgIDB4RjAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX1NUUzBfT0ZTX0dSWTBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX1NUUzBfT0ZTX0dSWTBfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1NDX0NUUkwxXzAgICAgMHgxZDRiCisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMMV8wX1NTQ19UWVBFX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDFfMF9TU0NfVFlQRV9NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDFfMF9QSEFTRV9MSU1fU0VMX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMMV8wX1BIQVNFX0xJTV9TRUxfTUFTSyAgICAweDFGRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwxXzBfUEhBU0VfTElNX0VOX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMMV8wX1BIQVNFX0xJTV9FTl9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwxXzBfRExMX01PREVfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwxXzBfRExMX01PREVfTUFTSyAgICAweEMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwxXzBfU1NDX0VOX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMMV8wX1NTQ19FTl9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDFfMF9TU0NfTU9ERV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDFfMF9TU0NfTU9ERV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TU0NfUkRNX1NFRUQxICAgIDB4MWQ0YworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TU0NfUE5fUE9MWV9TRUwxICAgIDB4MWQ0ZAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TU0NfQ1RSTDFfMyAgICAweDFkNGUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwxXzNfUEhTRlRfQ05UX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMMV8zX1BIU0ZUX0NOVF9NQVNLICAgIDB4N0YwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDFfM19QSFNGVF9BX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMMV8zX1BIU0ZUX0FfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMMV8zX1BIU0ZUX0JfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwxXzNfUEhTRlRfQl9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwxXzNfUEhTRlRfVVBETl9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDFfM19QSFNGVF9VUEROX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDFfM19QSFNGVF9QUkRfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwxXzNfUEhTRlRfUFJEX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDFfM19QTl9QT0xZX0RFR19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDFfM19QTl9QT0xZX0RFR19NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TU0NfQ1RSTDFfNCAgICAweDFkNGYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwxXzRfU1NDX1VQMUROMF9PRkZTRVQgICAgMTUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwxXzRfU1NDX1VQMUROMF9NQVNLICAgIDB4ODAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDFfNF9TU0NfUEVSSU9EX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMMV80X1NTQ19QRVJJT0RfTUFTSyAgICAweDdGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwxXzRfU1NDX09GRlNFVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDFfNF9TU0NfT0ZGU0VUX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TU0NfQ1RSTDFfNSAgICAweDFkNTAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwxXzVfUEhfT0ZTX1RPR19PRkZTRVQgICAgMTUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwxXzVfUEhfT0ZTX1RPR19NQVNLICAgIDB4ODAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDFfNV9QSF9PRlNfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMMV81X1BIX09GU19NQVNLICAgIDB4N0MwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDFfNV9TU0NfU1RFUF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDFfNV9TU0NfU1RFUF9NQVNLICAgIDB4M0YwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMMV81X1NTQ19URVNUX01PREVfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwxXzVfU1NDX1RFU1RfTU9ERV9NQVNLICAgIDB4QworI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDFfNV9TU0NfUEhfQ0ZHX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMMV81X1NTQ19QSF9DRkdfTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1NDX1NUUzEgICAgMHgxZDUxCisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19TVFMxX09GU19CVVNZX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfU1RTMV9PRlNfQlVTWV9NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfU1RTMV9PRlNfVE9UQUxfUl9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfU1RTMV9PRlNfVE9UQUxfUl9NQVNLICAgIDB4MUYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfU1RTMV9DTlRfR1JZMF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfU1RTMV9DTlRfR1JZMF9NQVNLICAgIDB4RjAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX1NUUzFfT0ZTX0dSWTBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX1NUUzFfT0ZTX0dSWTBfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1NDX0NUUkwyXzAgICAgMHgxZDUyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMMl8wX1NTQ19UWVBFX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDJfMF9TU0NfVFlQRV9NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDJfMF9QSEFTRV9MSU1fU0VMX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMMl8wX1BIQVNFX0xJTV9TRUxfTUFTSyAgICAweDFGRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwyXzBfUEhBU0VfTElNX0VOX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMMl8wX1BIQVNFX0xJTV9FTl9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwyXzBfRExMX01PREVfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwyXzBfRExMX01PREVfTUFTSyAgICAweEMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwyXzBfU1NDX0VOX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMMl8wX1NTQ19FTl9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDJfMF9TU0NfTU9ERV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDJfMF9TU0NfTU9ERV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TU0NfUkRNX1NFRUQyICAgIDB4MWQ1MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TU0NfUE5fUE9MWV9TRUwyICAgIDB4MWQ1NAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TU0NfQ1RSTDJfMyAgICAweDFkNTUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwyXzNfUEhTRlRfQ05UX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMMl8zX1BIU0ZUX0NOVF9NQVNLICAgIDB4N0YwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDJfM19QSFNGVF9BX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMMl8zX1BIU0ZUX0FfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMMl8zX1BIU0ZUX0JfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwyXzNfUEhTRlRfQl9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwyXzNfUEhTRlRfVVBETl9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDJfM19QSFNGVF9VUEROX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDJfM19QSFNGVF9QUkRfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwyXzNfUEhTRlRfUFJEX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDJfM19QTl9QT0xZX0RFR19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDJfM19QTl9QT0xZX0RFR19NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TU0NfQ1RSTDJfNCAgICAweDFkNTYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwyXzRfU1NDX1VQMUROMF9PRkZTRVQgICAgMTUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwyXzRfU1NDX1VQMUROMF9NQVNLICAgIDB4ODAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDJfNF9TU0NfUEVSSU9EX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMMl80X1NTQ19QRVJJT0RfTUFTSyAgICAweDdGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwyXzRfU1NDX09GRlNFVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDJfNF9TU0NfT0ZGU0VUX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TU0NfQ1RSTDJfNSAgICAweDFkNTcKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwyXzVfUEhfT0ZTX1RPR19PRkZTRVQgICAgMTUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwyXzVfUEhfT0ZTX1RPR19NQVNLICAgIDB4ODAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDJfNV9QSF9PRlNfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMMl81X1BIX09GU19NQVNLICAgIDB4N0MwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDJfNV9TU0NfU1RFUF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDJfNV9TU0NfU1RFUF9NQVNLICAgIDB4M0YwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMMl81X1NTQ19URVNUX01PREVfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwyXzVfU1NDX1RFU1RfTU9ERV9NQVNLICAgIDB4QworI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDJfNV9TU0NfUEhfQ0ZHX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMMl81X1NTQ19QSF9DRkdfTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1NDX1NUUzIgICAgMHgxZDU4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19TVFMyX09GU19CVVNZX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfU1RTMl9PRlNfQlVTWV9NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfU1RTMl9PRlNfVE9UQUxfUl9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfU1RTMl9PRlNfVE9UQUxfUl9NQVNLICAgIDB4MUYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfU1RTMl9DTlRfR1JZMF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfU1RTMl9DTlRfR1JZMF9NQVNLICAgIDB4RjAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX1NUUzJfT0ZTX0dSWTBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX1NUUzJfT0ZTX0dSWTBfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1NDX0NUUkwzXzAgICAgMHgxZDU5CisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMM18wX1NTQ19UWVBFX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDNfMF9TU0NfVFlQRV9NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDNfMF9QSEFTRV9MSU1fU0VMX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMM18wX1BIQVNFX0xJTV9TRUxfTUFTSyAgICAweDFGRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwzXzBfUEhBU0VfTElNX0VOX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMM18wX1BIQVNFX0xJTV9FTl9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwzXzBfRExMX01PREVfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwzXzBfRExMX01PREVfTUFTSyAgICAweEMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwzXzBfU1NDX0VOX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMM18wX1NTQ19FTl9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDNfMF9TU0NfTU9ERV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDNfMF9TU0NfTU9ERV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TU0NfUkRNX1NFRUQzICAgIDB4MWQ1YQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TU0NfUE5fUE9MWV9TRUwzICAgIDB4MWQ1YgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TU0NfQ1RSTDNfMyAgICAweDFkNWMKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwzXzNfUEhTRlRfQ05UX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMM18zX1BIU0ZUX0NOVF9NQVNLICAgIDB4N0YwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDNfM19QSFNGVF9BX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMM18zX1BIU0ZUX0FfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMM18zX1BIU0ZUX0JfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwzXzNfUEhTRlRfQl9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwzXzNfUEhTRlRfVVBETl9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDNfM19QSFNGVF9VUEROX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDNfM19QSFNGVF9QUkRfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwzXzNfUEhTRlRfUFJEX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDNfM19QTl9QT0xZX0RFR19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDNfM19QTl9QT0xZX0RFR19NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TU0NfQ1RSTDNfNCAgICAweDFkNWQKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwzXzRfU1NDX1VQMUROMF9PRkZTRVQgICAgMTUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwzXzRfU1NDX1VQMUROMF9NQVNLICAgIDB4ODAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDNfNF9TU0NfUEVSSU9EX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMM180X1NTQ19QRVJJT0RfTUFTSyAgICAweDdGMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwzXzRfU1NDX09GRlNFVF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDNfNF9TU0NfT0ZGU0VUX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TU0NfQ1RSTDNfNSAgICAweDFkNWUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwzXzVfUEhfT0ZTX1RPR19PRkZTRVQgICAgMTUKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwzXzVfUEhfT0ZTX1RPR19NQVNLICAgIDB4ODAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDNfNV9QSF9PRlNfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMM181X1BIX09GU19NQVNLICAgIDB4N0MwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDNfNV9TU0NfU1RFUF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDNfNV9TU0NfU1RFUF9NQVNLICAgIDB4M0YwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMM181X1NTQ19URVNUX01PREVfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX0NUUkwzXzVfU1NDX1RFU1RfTU9ERV9NQVNLICAgIDB4QworI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfQ1RSTDNfNV9TU0NfUEhfQ0ZHX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19DVFJMM181X1NTQ19QSF9DRkdfTUFTSyAgICAweDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU1NDX1NUUzMgICAgMHgxZDVmCisjZGVmaW5lICAgIFJUTDgzNjdDX1NTQ19TVFMzX09GU19CVVNZX09GRlNFVCAgICAxMworI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfU1RTM19PRlNfQlVTWV9NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfU1RTM19PRlNfVE9UQUxfUl9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfU1RTM19PRlNfVE9UQUxfUl9NQVNLICAgIDB4MUYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfU1RTM19DTlRfR1JZMF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19TU0NfU1RTM19DTlRfR1JZMF9NQVNLICAgIDB4RjAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX1NUUzNfT0ZTX0dSWTBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1NDX1NUUzNfT0ZTX0dSWTBfTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUEhZX1BPTExfQ0ZHMTMgICAgMHgxZDYwCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BIWV9QT0xMX0NGRzE0ICAgIDB4MWQ2MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GUkNfU1lTX0NMSyAgICAweDFkNjIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1lTQ0xLX0ZSQ19NRF9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19TWVNDTEtfRlJDX01EX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX1NZU0NMS19GUkNfVkFMX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NZU0NMS19GUkNfVkFMX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0FGRV9TU0NfQ1RSTCAgICAweDFkNjMKKyNkZWZpbmUgICAgUlRMODM2N0NfUEhfUlNUQl9UWEQxX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX1BIX1JTVEJfVFhEMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BIX1JTVEJfVFhDMV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19QSF9SU1RCX1RYQzFfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QSF9SU1RCX1RYRDBfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfUEhfUlNUQl9UWEQwX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19QSF9SU1RCX1RYQzBfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUEhfUlNUQl9UWEMwX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19QSF9SU1RCU1lTX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1BIX1JTVEJTWVNfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BIX1JTVEI4MDUxX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1BIX1JTVEI4MDUxX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19PUkVHX1NTQ19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19PUkVHX1NTQ19NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19CVUZGX1JTVF9DVFJMMCAgICAweDFkNjQKKyNkZWZpbmUgICAgUlRMODM2N0NfQlVGRlJTVF9UWEVTRF9FTl9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfQlVGRlJTVF9UWEVTRF9FTl9NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19CVUZGX1JTVF9USU1FX0xPTkdfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfQlVGRl9SU1RfVElNRV9MT05HX01BU0sgICAgMHgxRjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0JVRkZfUlNUX1RJTUVfU0hPUlRfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfQlVGRl9SU1RfVElNRV9TSE9SVF9NQVNLICAgIDB4RjgKKyNkZWZpbmUgICAgUlRMODM2N0NfU1dfQlVGRl9SU1RfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1dfQlVGRl9SU1RfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1TX0JVRkZfUlNUX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0lNU19CVUZGX1JTVF9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19JTVJfQlVGRl9SU1RfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU1SX0JVRkZfUlNUX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0JVRkZfUlNUX0NUUkwxICAgIDB4MWQ2NQorI2RlZmluZSAgICBSVEw4MzY3Q19CVUZGUlNUX1NZU09WRVJfRU5fT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0JVRkZSU1RfU1lTT1ZFUl9FTl9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0JVRkZSU1RfU1lTT1ZFUl9USFJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQlVGRlJTVF9TWVNPVkVSX1RIUl9NQVNLICAgIDB4M0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0JVRkZfUlNUX0NUUkwyICAgIDB4MWQ2NgorI2RlZmluZSAgICBSVEw4MzY3Q19CVUZGUlNUX1FPVkVSX0VOX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19CVUZGUlNUX1FPVkVSX0VOX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQlVGRlJTVF9RT1ZFUl9USFJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQlVGRlJTVF9RT1ZFUl9USFJfTUFTSyAgICAweDNGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19CVUZGX1JTVF9DVFJMMyAgICAweDFkNjcKKyNkZWZpbmUgICAgUlRMODM2N0NfRFNDX1RJTUVSX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19EU0NfVElNRVJfTUFTSyAgICAweDc4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQlVGRlJTVF9EU0NPVkVSX1RIUl9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19CVUZGUlNUX0RTQ09WRVJfVEhSX01BU0sgICAgMHg3RkUKKyNkZWZpbmUgICAgUlRMODM2N0NfQlVGRlJTVF9EU0NPVkVSX0VOX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0JVRkZSU1RfRFNDT1ZFUl9FTl9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19CVUZGX1JTVF9DVFJMNCAgICAweDFkNjgKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5EU0NfVElNRVJfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0lORFNDX1RJTUVSX01BU0sgICAgMHg3ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0JVRkZSU1RfSU5EU0NPVkVSX1RIUl9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19CVUZGUlNUX0lORFNDT1ZFUl9USFJfTUFTSyAgICAweDdGRQorI2RlZmluZSAgICBSVEw4MzY3Q19CVUZGUlNUX0lORFNDT1ZFUl9FTl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19CVUZGUlNUX0lORFNDT1ZFUl9FTl9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19CVUZGX1JTVF9DVFJMNSAgICAweDFkNjkKKyNkZWZpbmUgICAgUlRMODM2N0NfVFhfRVNEX01PREVfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVFhfRVNEX01PREVfTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19UWF9FU0RfTFZMX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1RYX0VTRF9MVkxfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1RPUF9DT04wICAgIDB4MWQ3MAorI2RlZmluZSAgICBSVEw4MzY3Q19UT1BfQ09OMF9TRFNfUFdSX0lTT18xX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19UT1BfQ09OMF9TRFNfUFdSX0lTT18xX01BU0sgICAgMHg4MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX09DUF9USU1FT1VUX1A3XzVfT0ZGU0VUICAgIDEyCisjZGVmaW5lICAgIFJUTDgzNjdDX09DUF9USU1FT1VUX1A3XzVfTUFTSyAgICAweDcwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCX0VFRV9BQl9PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCX0VFRV9BQl9NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0FEQ0NLSUVOX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19BRENDS0lFTl9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX09DUF9USU1FT1VUX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX09DUF9USU1FT1VUX01BU0sgICAgMHgzRTAKKyNkZWZpbmUgICAgUlRMODM2N0NfVE9QX0NPTjBfU0RTX1BXUl9JU09fT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfVE9QX0NPTjBfU0RTX1BXUl9JU09fTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1JHMl9UWENfU0VMX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1JHMl9UWENfU0VMX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX1JHMVRYQ19TRUxfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUkcxVFhDX1NFTF9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19TWU5DXzE1ODhfRU5fT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfU1lOQ18xNTg4X0VOX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0xTX01PREVfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTFNfTU9ERV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19UT1BfQ09OMSAgICAweDFkNzEKKyNkZWZpbmUgICAgUlRMODM2N0NfVEFfQ0hLX0VOX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1RBX0NIS19FTl9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19TTFZfRUdfU0VMX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1NMVl9FR19TRUxfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfSUlDX09QX0RSQUlOX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0lJQ19PUF9EUkFJTl9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TV1JfRlBXTSAgICAweDFkNzIKKyNkZWZpbmUgICAgUlRMODM2N0NfU1dSX0ZQV01fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU1dSX0ZQV01fTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRUVFUF9DVFJMXzUwME0gICAgMHgxZDczCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NIT1JUX1BSTUIgICAgMHgxZDc0CisjZGVmaW5lICAgIFJUTDgzNjdDX1NIT1JUX1BSTUJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0hPUlRfUFJNQl9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JTkRTQ19USFJfQ1RSTCAgICAweDFkNzUKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5EU0NfVEhSX0NUUkxfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSU5EU0NfVEhSX0NUUkxfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TRVRfUEFEX0NUUkxfTkVXICAgIDB4MWQ4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TRVRfUEFEX0NUUkxfTkVXX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NFVF9QQURfQ1RSTF9ORVdfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0VUX1BBRF9EUklfMCAgICAweDFkODEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0VUX1BBRF9EUklfMSAgICAweDFkODIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0VUX1BBRF9EUklfMiAgICAweDFkODMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0VUX1BBRF9TTEVXXzAgICAgMHgxZDg0CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NFVF9QQURfU0xFV18xICAgIDB4MWQ4NQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TRVRfUEFEX1NMRVdfMiAgICAweDFkODYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0VUX1BBRF9TTVRfMCAgICAweDFkODcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0VUX1BBRF9TTVRfMSAgICAweDFkODgKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0VUX1BBRF9TTVRfMiAgICAweDFkODkKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTV9JMkNfQ1RMX1NUQV9SRUcgICAgMHgxZDhhCisjZGVmaW5lICAgIFJUTDgzNjdDX1RYX1JYX0RBVEFfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfVFhfUlhfREFUQV9NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19EVU1CX1JXX0VSUl9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19EVU1CX1JXX0VSUl9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0xWX0FDS19GTEFHX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NMVl9BQ0tfRkxBR19NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTV9JMkNfQlVTX0lETEVfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfTV9JMkNfQlVTX0lETEVfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX0kyQ19DTURfVFlQRV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19JMkNfQ01EX1RZUEVfTUFTSyAgICAweDFFCisjZGVmaW5lICAgIFJUTDgzNjdDX0kyQ19DTURfRVhFQ19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19JMkNfQ01EX0VYRUNfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTV9JMkNfRFVNQl9SV19BRERSXzAgICAgMHgxZDhiCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01fSTJDX0RVTUJfUldfQUREUl8xICAgIDB4MWQ4YworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NX0kyQ19EVU1CX1JXX0RBVEFfMCAgICAweDFkOGQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfTV9JMkNfRFVNQl9SV19EQVRBXzEgICAgMHgxZDhlCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01fSTJDX0RVTUJfUldfQ1RMICAgIDB4MWQ4ZgorI2RlZmluZSAgICBSVEw4MzY3Q19EVU1CX0kyQ19DVExfQ09ERV9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19EVU1CX0kyQ19DVExfQ09ERV9NQVNLICAgIDB4N0YwMAorI2RlZmluZSAgICBSVEw4MzY3Q19EVU1CX1JXX0kyQ19GT1JNQVRfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfRFVNQl9SV19JMkNfRk9STUFUX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19EVU1CX1JXX0RBVEFfTU9ERV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19EVU1CX1JXX0RBVEFfTU9ERV9NQVNLICAgIDB4QworI2RlZmluZSAgICBSVEw4MzY3Q19EVU1CX1JXX0FERFJfTU9ERV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19EVU1CX1JXX0FERFJfTU9ERV9NQVNLICAgIDB4MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NX0kyQ19TWVNfQ1RMICAgIDB4MWQ5MAorI2RlZmluZSAgICBSVEw4MzY3Q19NX0kyQ19TQ0xfSU9fTVVYX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19NX0kyQ19TQ0xfSU9fTVVYX01BU0sgICAgMHgzMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01fSTJDX1NEQV9JT19NVVhfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX01fSTJDX1NEQV9JT19NVVhfTUFTSyAgICAweEMwMAorI2RlZmluZSAgICBSVEw4MzY3Q19NX0kyQ19TREFfT0RfRU5fT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfTV9JMkNfU0RBX09EX0VOX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTV9JMkNfU0NMX09EX0VOX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX01fSTJDX1NDTF9PRF9FTl9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX01fSTJDX1NDTF9GX0RJVl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19NX0kyQ19TQ0xfRl9ESVZfTUFTSyAgICAweEZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0hUX1BCX1NSQU1fQ1RSTCAgICAweDFkYTAKKyNkZWZpbmUgICAgUlRMODM2N0NfSFRQQl9SV19PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19IVFBCX1JXX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX0hUUEJfU0VMX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0hUUEJfU0VMX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0hUUEJfQ0VfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfSFRQQl9DRV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19IVF9QQl9TUkFNX0FERFIgICAgMHgxZGExCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0hUX1BCX1NSQU1fRElOMCAgICAweDFkYTIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSFRfUEJfU1JBTV9ESU4xICAgIDB4MWRhMworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19IVF9QQl9TUkFNX0RPVVQwICAgIDB4MWRhNAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19IVF9QQl9TUkFNX0RPVVQxICAgIDB4MWRhNQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QSFlfU1RBVF8wICAgIDB4MWRiMAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QSFlfU1RBVF8xICAgIDB4MWRiMQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QSFlfU1RBVF8yICAgIDB4MWRiMgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QSFlfU1RBVF8zICAgIDB4MWRiMworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QSFlfU1RBVF80ICAgIDB4MWRiNAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QSFlfU1RBVF81ICAgIDB4MWRiNQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QSFlfU1RBVF82ICAgIDB4MWRiNgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QSFlfU1RBVF83ICAgIDB4MWRiNworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TRFNfU1RBVF8wICAgIDB4MWRiOAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TRFNfU1RBVF8xICAgIDB4MWRiOQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NQUNfTElOS19TVEFUXzAgICAgMHgxZGJhCisjZGVmaW5lICAgIFJUTDgzNjdDX01BQ19MSU5LX1NUQVRfQ1VSXzBfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfTUFDX0xJTktfU1RBVF9DVVJfMF9NQVNLICAgIDB4RkYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19NQUNfTElOS19TVEFUX0xBVENIXzBfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUFDX0xJTktfU1RBVF9MQVRDSF8wX01BU0sgICAgMHhGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NQUNfTElOS19TVEFUXzEgICAgMHgxZGJiCisjZGVmaW5lICAgIFJUTDgzNjdDX01BQ19MSU5LX1NUQVRfMV9SZXNlcnZlZF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19NQUNfTElOS19TVEFUXzFfUmVzZXJ2ZWRfTUFTSyAgICAweEZGQzAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUFDX0xJTktfU1RBVF9DVVJfMV9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19NQUNfTElOS19TVEFUX0NVUl8xX01BU0sgICAgMHgzOAorI2RlZmluZSAgICBSVEw4MzY3Q19NQUNfTElOS19TVEFUX0xBVENIXzFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfTUFDX0xJTktfU1RBVF9MQVRDSF8xX01BU0sgICAgMHg3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX01JU0NfQ09OVFJPTF8xICAgIDB4MWRjMAorI2RlZmluZSAgICBSVEw4MzY3Q19QN19GQl9DUExfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUDdfRkJfQ1BMX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1A2X0ZCX0NQTF9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19QNl9GQl9DUExfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUDVfRkJfQ1BMX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1A1X0ZCX0NQTF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19TRFNfTUlTQ18xICAgIDB4MWRjMQorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfU0dNSUlfUlhGQ18xX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfU0dNSUlfUlhGQ18xX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19TR01JSV9UWEZDXzFfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19TR01JSV9UWEZDXzFfTUFTSyAgICAweDIwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX01BQzlfU0VMX0hTR01JSV9PRkZTRVQgICAgMTEKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX01BQzlfU0VMX0hTR01JSV9NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19TR01JSV9GRFVQXzFfT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19TR01JSV9GRFVQXzFfTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfU0dNSUlfTElOS18xX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19TR01JSV9MSU5LXzFfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfU0dNSUlfU1BEXzFfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1NHTUlJX1NQRF8xX01BU0sgICAgMHgxODAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX01BQzlfU0VMX1NHTUlJX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19NQUM5X1NFTF9TR01JSV9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1NEU19NT0RFXzE0Q18xX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19TRFNfTU9ERV8xNENfMV9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GSUJFUl9DRkdfMl8xICAgIDB4MWRjMgorI2RlZmluZSAgICBSVEw4MzY3Q19TRFNfUlhfRElTQUJMRV8xX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1NEU19SWF9ESVNBQkxFXzFfTUFTSyAgICAweEMwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NEU19UWF9ESVNBQkxFXzFfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfU0RTX1RYX0RJU0FCTEVfMV9NQVNLICAgIDB4MzAKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCRVJfQ0ZHXzJfMV9TRFNfUFdSX0lTT18xX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQkVSX0NGR18yXzFfU0RTX1BXUl9JU09fMV9NQVNLICAgIDB4QworI2RlZmluZSAgICBSVEw4MzY3Q19TRFNfRlJDX0xEXzFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0RTX0ZSQ19MRF8xX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZJQkVSX0NGR18xXzEgICAgMHgxZGMzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NEU19GUkNfUkVHNF8xX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19TRFNfRlJDX1JFRzRfMV9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TRFNfRlJDX1JFRzRfRklCMTAwXzFfT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX1NEU19GUkNfUkVHNF9GSUIxMDBfMV9NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NEU19GUkNfTU9ERV8xX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1NEU19GUkNfTU9ERV8xX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX1NEU19NT0RFXzFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0RTX01PREVfMV9NQVNLICAgIDB4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QSFlTVFNfQ1RSTDBfMSAgICAweDFkYzQKKyNkZWZpbmUgICAgUlRMODM2N0NfTE5LVVBfRExZX0VOX0VYVDJfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfTE5LVVBfRExZX0VOX0VYVDJfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19HRV8xMDBNX0xOS1VQX0RMWV9FWFQyX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX0dFXzEwME1fTE5LVVBfRExZX0VYVDJfTUFTSyAgICAweDE4MAorI2RlZmluZSAgICBSVEw4MzY3Q19QSFlTVFNfMTBNX0xOS1VQX0RMWV9FWFQyX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1BIWVNUU18xME1fTE5LVVBfRExZX0VYVDJfTUFTSyAgICAweDYwCisjZGVmaW5lICAgIFJUTDgzNjdDX0xOS1VQX0RMWV9FTl9FWFQxX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0xOS1VQX0RMWV9FTl9FWFQxX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19HRV8xMDBNX0xOS1VQX0RMWV9FWFQxX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0dFXzEwME1fTE5LVVBfRExZX0VYVDFfTUFTSyAgICAweEMKKyNkZWZpbmUgICAgUlRMODM2N0NfUEhZU1RTXzEwTV9MTktVUF9ETFlfRVhUMV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QSFlTVFNfMTBNX0xOS1VQX0RMWV9FWFQxX01BU0sgICAgMHgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZJQkVSX0NGR18zXzEgICAgMHgxZGM1CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQkVSX0NGR18zXzFfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCRVJfQ0ZHXzNfMV9NQVNLICAgIDB4RkZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZJQkVSX0NGR180XzEgICAgMHgxZGM2CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0JVRkZfUlNUX0NUUkwyXzIgICAgMHgxZGM3CisjZGVmaW5lICAgIFJUTDgzNjdDX0NmZ19idWZmcnN0X3N5c292ZXJfdGhyXzFfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfQ2ZnX2J1ZmZyc3Rfc3lzb3Zlcl90aHJfMV9NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19DZmdfYnVmZnJzdF9xb3Zlcl90aHJfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQ2ZnX2J1ZmZyc3RfcW92ZXJfdGhyX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX0NmZ19idWZmcnN0X2luZHNjb3Zlcl90aHJfMV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19DZmdfYnVmZnJzdF9pbmRzY292ZXJfdGhyXzFfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQ2ZnX2J1ZmZyc3RfZHNjb3Zlcl90aHJfMV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19DZmdfYnVmZnJzdF9kc2NvdmVyX3Rocl8xX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BIWV9ERUJVR19DTlRfQ1RSTCAgICAweDFkYzgKKyNkZWZpbmUgICAgUlRMODM2N0NfUEhZX01JQl9SU1RfN19PRkZTRVQgICAgMTUKKyNkZWZpbmUgICAgUlRMODM2N0NfUEhZX01JQl9SU1RfN19NQVNLICAgIDB4ODAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QSFlfTUlCX1JTVF82X09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19QSFlfTUlCX1JTVF82X01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BIWV9NSUJfUlNUXzVfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX1BIWV9NSUJfUlNUXzVfTUFTSyAgICAweDIwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEhZX01JQl9SU1RfNF9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfUEhZX01JQl9SU1RfNF9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QSFlfTUlCX1JTVF8zX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19QSFlfTUlCX1JTVF8zX01BU0sgICAgMHg4MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEhZX01JQl9SU1RfMl9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUEhZX01JQl9SU1RfMl9NQVNLICAgIDB4NDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BIWV9NSUJfUlNUXzFfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfUEhZX01JQl9SU1RfMV9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BIWV9NSUJfUlNUXzBfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUEhZX01JQl9SU1RfMF9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BIWV9NSUJfRU5fN19PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19QSFlfTUlCX0VOXzdfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BIWV9NSUJfRU5fNl9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19QSFlfTUlCX0VOXzZfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BIWV9NSUJfRU5fNV9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19QSFlfTUlCX0VOXzVfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BIWV9NSUJfRU5fNF9PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QSFlfTUlCX0VOXzRfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BIWV9NSUJfRU5fM19PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19QSFlfTUlCX0VOXzNfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUEhZX01JQl9FTl8yX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BIWV9NSUJfRU5fMl9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19QSFlfTUlCX0VOXzFfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfUEhZX01JQl9FTl8xX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX1BIWV9NSUJfRU5fMF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QSFlfTUlCX0VOXzBfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVFhQS1RfQ05UX0xfMCAgICAweDFkYzkKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVFhQS1RfQ05UX0hfMCAgICAweDFkY2EKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUlhQS1RfQ05UX0xfMCAgICAweDFkY2IKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUlhQS1RfQ05UX0hfMCAgICAweDFkY2MKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVFhfQ1JDXzAgICAgMHgxZGNkCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1JYX0NSQ18wICAgIDB4MWRjZQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19UWFBLVF9DTlRfTF8xICAgIDB4MWRjZgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19UWFBLVF9DTlRfSF8xICAgIDB4MWRkMAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19SWFBLVF9DTlRfTF8xICAgIDB4MWRkMQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19SWFBLVF9DTlRfSF8xICAgIDB4MWRkMgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19UWF9DUkNfMSAgICAweDFkZDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUlhfQ1JDXzEgICAgMHgxZGQ0CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1RYUEtUX0NOVF9MXzIgICAgMHgxZGQ1CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1RYUEtUX0NOVF9IXzIgICAgMHgxZGQ2CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1JYUEtUX0NOVF9MXzIgICAgMHgxZGQ3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1JYUEtUX0NOVF9IXzIgICAgMHgxZGQ4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1RYX0NSQ18yICAgIDB4MWRkOQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19SWF9DUkNfMiAgICAweDFkZGEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVFhQS1RfQ05UX0xfMyAgICAweDFkZGIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVFhQS1RfQ05UX0hfMyAgICAweDFkZGMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUlhQS1RfQ05UX0xfMyAgICAweDFkZGQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUlhQS1RfQ05UX0hfMyAgICAweDFkZGUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVFhfQ1JDXzMgICAgMHgxZGRmCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1JYX0NSQ18zICAgIDB4MWRlMAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19UWFBLVF9DTlRfTF80ICAgIDB4MWRlMQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19UWFBLVF9DTlRfSF80ICAgIDB4MWRlMgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19SWFBLVF9DTlRfTF80ICAgIDB4MWRlMworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19SWFBLVF9DTlRfSF80ICAgIDB4MWRlNAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19UWF9DUkNfNCAgICAweDFkZTUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUlhfQ1JDXzQgICAgMHgxZGU2CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1RYUEtUX0NOVF9MXzUgICAgMHgxZGU3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1RYUEtUX0NOVF9IXzUgICAgMHgxZGU4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1JYUEtUX0NOVF9MXzUgICAgMHgxZGU5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1JYUEtUX0NOVF9IXzUgICAgMHgxZGVhCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1RYX0NSQ181ICAgIDB4MWRlYgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19SWF9DUkNfNSAgICAweDFkZWMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVFhQS1RfQ05UX0xfNiAgICAweDFkZWQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVFhQS1RfQ05UX0hfNiAgICAweDFkZWUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUlhQS1RfQ05UX0xfNiAgICAweDFkZWYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUlhQS1RfQ05UX0hfNiAgICAweDFkZjAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfVFhfQ1JDXzYgICAgMHgxZGYxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1JYX0NSQ182ICAgIDB4MWRmMgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19UWFBLVF9DTlRfTF83ICAgIDB4MWRmMworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19UWFBLVF9DTlRfSF83ICAgIDB4MWRmNAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19SWFBLVF9DTlRfTF83ICAgIDB4MWRmNQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19SWFBLVF9DTlRfSF83ICAgIDB4MWRmNgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19UWF9DUkNfNyAgICAweDFkZjcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUlhfQ1JDXzcgICAgMHgxZGY4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0JPTkRfREJHXzAgICAgMHgxZGY5CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0JPTkRfREJHXzEgICAgMHgxZGZhCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NUUlBfREJHXzAgICAgMHgxZGZiCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NUUlBfREJHXzEgICAgMHgxZGZjCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NUUlBfREJHXzIgICAgMHgxZGZkCisKKy8qICgxNidoMWYwMClwYXRjaF9yZWcgKi8KKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSU5EUkVDVF9BQ0NFU1NfQ1RSTCAgICAweDFmMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUldfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfUldfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfQ01EX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NNRF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19JTkRSRUNUX0FDQ0VTU19TVEFUVVMgICAgMHgxZjAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0lORFJFQ1RfQUNDRVNTX1NUQVRVU19PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19JTkRSRUNUX0FDQ0VTU19TVEFUVVNfTUFTSyAgICAweDcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSU5EUkVDVF9BQ0NFU1NfQUREUkVTUyAgICAweDFmMDIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSU5EUkVDVF9BQ0NFU1NfV1JJVEVfREFUQSAgICAweDFmMDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSU5EUkVDVF9BQ0NFU1NfUkVBRF9EQVRBICAgIDB4MWYwNAorCisvKiAoMTYnaDYyMDApZmliX3BhZ2UgKi8KKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRklCMF9DRkcwMCAgICAweDYyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMF9DRkcwMF9DRkdfRklCX1JTVF9PRkZTRVQgICAgMTUKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMF9DRkcwMF9DRkdfRklCX1JTVF9NQVNLICAgIDB4ODAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUIwX0NGRzAwX0NGR19GSUJfTFBLX09GRlNFVCAgICAxNAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUIwX0NGRzAwX0NGR19GSUJfTFBLX01BU0sgICAgMHg0MDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQjBfQ0ZHMDBfQ0ZHX0ZJQl9TUERfUkRfMF9PRkZTRVQgICAgMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMF9DRkcwMF9DRkdfRklCX1NQRF9SRF8wX01BU0sgICAgMHgyMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQjBfQ0ZHMDBfQ0ZHX0ZJQl9BTkVOX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19GSUIwX0NGRzAwX0NGR19GSUJfQU5FTl9NQVNLICAgIDB4MTAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUIwX0NGRzAwX0NGR19GSUJfUERPV05fT0ZGU0VUICAgIDExCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQjBfQ0ZHMDBfQ0ZHX0ZJQl9QRE9XTl9NQVNLICAgIDB4ODAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQjBfQ0ZHMDBfQ0ZHX0ZJQl9JU09fT0ZGU0VUICAgIDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQjBfQ0ZHMDBfQ0ZHX0ZJQl9JU09fTUFTSyAgICAweDQwMAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUIwX0NGRzAwX0NGR19GSUJfUkVTVEFSVF9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19GSUIwX0NGRzAwX0NGR19GSUJfUkVTVEFSVF9NQVNLICAgIDB4MjAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQjBfQ0ZHMDBfQ0ZHX0ZJQl9GVUxMRFVQX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQjBfQ0ZHMDBfQ0ZHX0ZJQl9GVUxMRFVQX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMF9DRkcwMF9DRkdfRklCX1NQRF9SRF8xX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQjBfQ0ZHMDBfQ0ZHX0ZJQl9TUERfUkRfMV9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMF9DRkcwMF9DRkdfRklCX0ZSQ1RYX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQjBfQ0ZHMDBfQ0ZHX0ZJQl9GUkNUWF9NQVNLICAgIDB4MjAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRklCMF9DRkcwMSAgICAweDYyMDEKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMF9DRkcwMV9DQVBCSUxJVFlfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMF9DRkcwMV9DQVBCSUxJVFlfTUFTSyAgICAweEZGQzAKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMF9DRkcwMV9BTl9DT01QTEVURV9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19GSUIwX0NGRzAxX0FOX0NPTVBMRVRFX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUIwX0NGRzAxX1JfRkFVTFRfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMF9DRkcwMV9SX0ZBVUxUX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUIwX0NGRzAxX05XQVlfQUJJTElUWV9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19GSUIwX0NGRzAxX05XQVlfQUJJTElUWV9NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUIwX0NGRzAxX0xJTktfU1RBVFVTX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQjBfQ0ZHMDFfTElOS19TVEFUVVNfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMF9DRkcwMV9KQUJCRVJfREVURUNUX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQjBfQ0ZHMDFfSkFCQkVSX0RFVEVDVF9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19GSUIwX0NGRzAxX0VYVEVOREVEX0NBUEJJTElUWV9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUIwX0NGRzAxX0VYVEVOREVEX0NBUEJJTElUWV9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GSUIwX0NGRzAyICAgIDB4NjIwMgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GSUIwX0NGRzAzICAgIDB4NjIwMworI2RlZmluZSAgICBSVEw4MzY3Q19GSUIwX0NGRzAzX1JFQUxURUtfT1VJNV8wX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUIwX0NGRzAzX1JFQUxURUtfT1VJNV8wX01BU0sgICAgMHhGQzAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQjBfQ0ZHMDNfTU9ERUxfTk9fT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMF9DRkcwM19NT0RFTF9OT19NQVNLICAgIDB4M0YwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQjBfQ0ZHMDNfUkVWSVNJT05fTk9fT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMF9DRkcwM19SRVZJU0lPTl9OT19NQVNLICAgIDB4RgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GSUIwX0NGRzA0ICAgIDB4NjIwNAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GSUIwX0NGRzA1ICAgIDB4NjIwNQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GSUIwX0NGRzA2ICAgIDB4NjIwNgorI2RlZmluZSAgICBSVEw4MzY3Q19GSUIwX0NGRzA2X0ZJQl9OUF9FTl9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19GSUIwX0NGRzA2X0ZJQl9OUF9FTl9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUIwX0NGRzA2X1JYUEFHRV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19GSUIwX0NGRzA2X1JYUEFHRV9NQVNLICAgIDB4MgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GSUIwX0NGRzA3ICAgIDB4NjIwNworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GSUIwX0NGRzA4ICAgIDB4NjIwOAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GSUIwX0NGRzA5ICAgIDB4NjIwOQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GSUIwX0NGRzEwICAgIDB4NjIwYQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GSUIwX0NGRzExICAgIDB4NjIwYgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GSUIwX0NGRzEyICAgIDB4NjIwYworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GSUIwX0NGRzEzICAgIDB4NjIwZAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUIwX0NGRzEzX0lORFJfRlVOQ19PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMF9DRkcxM19JTkRSX0ZVTkNfTUFTSyAgICAweEMwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMF9DRkcxM19EVU1NWV9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19GSUIwX0NGRzEzX0RVTU1ZX01BU0sgICAgMHgzRkUwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQjBfQ0ZHMTNfSU5EUl9ERVZBRF9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUIwX0NGRzEzX0lORFJfREVWQURfTUFTSyAgICAweDFGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZJQjBfQ0ZHMTQgICAgMHg2MjBlCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZJQjBfQ0ZHMTUgICAgMHg2MjBmCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZJQjFfQ0ZHMDAgICAgMHg2MjEwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQjFfQ0ZHMDBfQ0ZHX0ZJQl9SU1RfT0ZGU0VUICAgIDE1CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQjFfQ0ZHMDBfQ0ZHX0ZJQl9SU1RfTUFTSyAgICAweDgwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMV9DRkcwMF9DRkdfRklCX0xQS19PRkZTRVQgICAgMTQKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMV9DRkcwMF9DRkdfRklCX0xQS19NQVNLICAgIDB4NDAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUIxX0NGRzAwX0NGR19GSUJfU1BEX1JEXzBfT0ZGU0VUICAgIDEzCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQjFfQ0ZHMDBfQ0ZHX0ZJQl9TUERfUkRfMF9NQVNLICAgIDB4MjAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUIxX0NGRzAwX0NGR19GSUJfQU5FTl9PRkZTRVQgICAgMTIKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMV9DRkcwMF9DRkdfRklCX0FORU5fTUFTSyAgICAweDEwMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMV9DRkcwMF9DRkdfRklCX1BET1dOX09GRlNFVCAgICAxMQorI2RlZmluZSAgICBSVEw4MzY3Q19GSUIxX0NGRzAwX0NGR19GSUJfUERPV05fTUFTSyAgICAweDgwMAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUIxX0NGRzAwX0NGR19GSUJfSVNPX09GRlNFVCAgICAxMAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUIxX0NGRzAwX0NGR19GSUJfSVNPX01BU0sgICAgMHg0MDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMV9DRkcwMF9DRkdfRklCX1JFU1RBUlRfT0ZGU0VUICAgIDkKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMV9DRkcwMF9DRkdfRklCX1JFU1RBUlRfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUIxX0NGRzAwX0NGR19GSUJfRlVMTERVUF9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUIxX0NGRzAwX0NGR19GSUJfRlVMTERVUF9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQjFfQ0ZHMDBfQ0ZHX0ZJQl9TUERfUkRfMV9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19GSUIxX0NGRzAwX0NGR19GSUJfU1BEX1JEXzFfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQjFfQ0ZHMDBfQ0ZHX0ZJQl9GUkNUWF9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19GSUIxX0NGRzAwX0NGR19GSUJfRlJDVFhfTUFTSyAgICAweDIwCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX0ZJQjFfQ0ZHMDEgICAgMHg2MjExCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQjFfQ0ZHMDFfQ0FQQklMSVRZX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQjFfQ0ZHMDFfQ0FQQklMSVRZX01BU0sgICAgMHhGRkMwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQjFfQ0ZHMDFfQU5fQ09NUExFVEVfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMV9DRkcwMV9BTl9DT01QTEVURV9NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMV9DRkcwMV9SX0ZBVUxUX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQjFfQ0ZHMDFfUl9GQVVMVF9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMV9DRkcwMV9OV0FZX0FCSUxJVFlfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMV9DRkcwMV9OV0FZX0FCSUxJVFlfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMV9DRkcwMV9MSU5LX1NUQVRVU19PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19GSUIxX0NGRzAxX0xJTktfU1RBVFVTX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQjFfQ0ZHMDFfSkFCQkVSX0RFVEVDVF9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19GSUIxX0NGRzAxX0pBQkJFUl9ERVRFQ1RfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMV9DRkcwMV9FWFRFTkRFRF9DQVBCSUxJVFlfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMV9DRkcwMV9FWFRFTkRFRF9DQVBCSUxJVFlfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRklCMV9DRkcwMiAgICAweDYyMTIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRklCMV9DRkcwMyAgICAweDYyMTMKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMV9DRkcwM19SRUFMVEVLX09VSTVfMF9PRkZTRVQgICAgMTAKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMV9DRkcwM19SRUFMVEVLX09VSTVfMF9NQVNLICAgIDB4RkMwMAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUIxX0NGRzAzX01PREVMX05PX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQjFfQ0ZHMDNfTU9ERUxfTk9fTUFTSyAgICAweDNGMAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUIxX0NGRzAzX1JFVklTSU9OX05PX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQjFfQ0ZHMDNfUkVWSVNJT05fTk9fTUFTSyAgICAweEYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRklCMV9DRkcwNCAgICAweDYyMTQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRklCMV9DRkcwNSAgICAweDYyMTUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRklCMV9DRkcwNiAgICAweDYyMTYKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMV9DRkcwNl9GSUJfTlBfRU5fT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMV9DRkcwNl9GSUJfTlBfRU5fTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMV9DRkcwNl9SWFBBR0VfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMV9DRkcwNl9SWFBBR0VfTUFTSyAgICAweDIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRklCMV9DRkcwNyAgICAweDYyMTcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRklCMV9DRkcwOCAgICAweDYyMTgKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRklCMV9DRkcwOSAgICAweDYyMTkKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRklCMV9DRkcxMCAgICAweDYyMWEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRklCMV9DRkcxMSAgICAweDYyMWIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRklCMV9DRkcxMiAgICAweDYyMWMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfRklCMV9DRkcxMyAgICAweDYyMWQKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMV9DRkcxM19JTkRSX0ZVTkNfT0ZGU0VUICAgIDE0CisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQjFfQ0ZHMTNfSU5EUl9GVU5DX01BU0sgICAgMHhDMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0ZJQjFfQ0ZHMTNfRFVNTVlfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMV9DRkcxM19EVU1NWV9NQVNLICAgIDB4M0ZFMAorI2RlZmluZSAgICBSVEw4MzY3Q19GSUIxX0NGRzEzX0lORFJfREVWQURfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfRklCMV9DRkcxM19JTkRSX0RFVkFEX01BU0sgICAgMHgxRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GSUIxX0NGRzE0ICAgIDB4NjIxZQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19GSUIxX0NGRzE1ICAgIDB4NjIxZgorCisvKiAoMTYnaDY0MDApdGltZXJfMTU4OCAqLworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QVFBfVElNRV9OU0VDX0xfTlNFQyAgICAweDY0MDAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUFRQX1RJTUVfTlNFQ19IX05TRUMgICAgMHg2NDAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1BUUF9USU1FX05TRUNfSF9FWEVDX09GRlNFVCAgICAxNQorI2RlZmluZSAgICBSVEw4MzY3Q19QVFBfVElNRV9OU0VDX0hfRVhFQ19NQVNLICAgIDB4ODAwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QVFBfVElNRV9OU0VDX0hfQ01EX09GRlNFVCAgICAxMgorI2RlZmluZSAgICBSVEw4MzY3Q19QVFBfVElNRV9OU0VDX0hfQ01EX01BU0sgICAgMHgzMDAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BUUF9USU1FX05TRUNfSF9OU0VDX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BUUF9USU1FX05TRUNfSF9OU0VDX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUFRQX1RJTUVfU0VDX0xfU0VDICAgIDB4NjQwMgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QVFBfVElNRV9TRUNfSF9TRUMgICAgMHg2NDAzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BUUF9USU1FX0NGRyAgICAweDY0MDQKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1RJTUVSX0VOX0ZSQ19PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19DRkdfVElNRVJfRU5fRlJDX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19USU1FUl8xNTg4X0VOX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19USU1FUl8xNTg4X0VOX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19DTEtfU1JDX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19DTEtfU1JDX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX09UQUdfVFBJRCAgICAweDY0MDUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfSVRBR19UUElEICAgIDB4NjQwNgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NQUNfQUREUl9MICAgIDB4NjQwNworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NQUNfQUREUl9NICAgIDB4NjQwOAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19NQUNfQUREUl9IICAgIDB4NjQwOQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QVFBfVElNRV9OU0VDX0xfTlNFQ19SRCAgICAweDY0MGEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUFRQX1RJTUVfTlNFQ19IX05TRUNfUkQgICAgMHg2NDBiCisjZGVmaW5lICAgIFJUTDgzNjdDX1BUUF9USU1FX05TRUNfSF9OU0VDX1JEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1BUUF9USU1FX05TRUNfSF9OU0VDX1JEX01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUFRQX1RJTUVfU0VDX0xfU0VDX1JEICAgIDB4NjQwYworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QVFBfVElNRV9TRUNfSF9TRUNfUkQgICAgMHg2NDBkCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1BUUF9USU1FX0NGRzIgICAgMHg2NDBlCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19FTl9PRkZMT0FEX09GRlNFVCAgICA5CisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19FTl9PRkZMT0FEX01BU0sgICAgMHgyMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX1NBVkVfT0ZGX1RTX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19TQVZFX09GRl9UU19NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX0NGR19JTVJfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfQ0ZHX0lNUl9NQVNLICAgIDB4RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUFRQX0lOVEVSUlVQVF9DRkcgICAgMHg2NDBmCisjZGVmaW5lICAgIFJUTDgzNjdDX1A5X0lOVEVSUlVQVF9PRkZTRVQgICAgOQorI2RlZmluZSAgICBSVEw4MzY3Q19QOV9JTlRFUlJVUFRfTUFTSyAgICAweDIwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QOF9JTlRFUlJVUFRfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUDhfSU5URVJSVVBUX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDdfSU5URVJSVVBUX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1A3X0lOVEVSUlVQVF9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDZfSU5URVJSVVBUX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1A2X0lOVEVSUlVQVF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDVfSU5URVJSVVBUX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1A1X0lOVEVSUlVQVF9NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDRfSU5URVJSVVBUX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1A0X0lOVEVSUlVQVF9NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDNfSU5URVJSVVBUX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1AzX0lOVEVSUlVQVF9NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19QMl9JTlRFUlJVUFRfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUDJfSU5URVJSVVBUX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1AxX0lOVEVSUlVQVF9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19QMV9JTlRFUlJVUFRfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUDBfSU5URVJSVVBUX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1AwX0lOVEVSUlVQVF9NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QMF9UWF9TWU5DX1NFUV9JRCAgICAweDY0MTAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDBfVFhfREVMQVlfUkVRX1NFUV9JRCAgICAweDY0MTEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDBfVFhfUERFTEFZX1JFUV9TRVFfSUQgICAgMHg2NDEyCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1AwX1RYX1BERUxBWV9SRVNQX1NFUV9JRCAgICAweDY0MTMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDBfUlhfU1lOQ19TRVFfSUQgICAgMHg2NDE0CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1AwX1JYX0RFTEFZX1JFUV9TRVFfSUQgICAgMHg2NDE1CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1AwX1JYX1BERUxBWV9SRVFfU0VRX0lEICAgIDB4NjQxNgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QMF9SWF9QREVMQVlfUkVTUF9TRVFfSUQgICAgMHg2NDE3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1AwX1BPUlRfTlNFQ18xNV8wICAgIDB4NjQxOAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QMF9QT1JUX05TRUNfMjZfMTYgICAgMHg2NDE5CisjZGVmaW5lICAgIFJUTDgzNjdDX1AwX1BPUlRfTlNFQ18yNl8xNl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QMF9QT1JUX05TRUNfMjZfMTZfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QMF9QT1JUX1NFQ18xNV8wICAgIDB4NjQxYQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QMF9QT1JUX1NFQ18zMV8xNiAgICAweDY0MWIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDBfRUFWX0NGRyAgICAweDY0MWMKKyNkZWZpbmUgICAgUlRMODM2N0NfUDBfRUFWX0NGR19QVFBfUEhZX0VOX0VOX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1AwX0VBVl9DRkdfUFRQX1BIWV9FTl9FTl9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1AwX0VBVl9DRkdfUlhfUERFTEFZX1JFU1BfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfUDBfRUFWX0NGR19SWF9QREVMQVlfUkVTUF9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDBfRUFWX0NGR19SWF9QREVMQVlfUkVRX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1AwX0VBVl9DRkdfUlhfUERFTEFZX1JFUV9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDBfRUFWX0NGR19SWF9ERUxBWV9SRVFfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfUDBfRUFWX0NGR19SWF9ERUxBWV9SRVFfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX1AwX0VBVl9DRkdfUlhfU1lOQ19PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QMF9FQVZfQ0ZHX1JYX1NZTkNfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1AwX0VBVl9DRkdfVFhfUERFTEFZX1JFU1BfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfUDBfRUFWX0NGR19UWF9QREVMQVlfUkVTUF9NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19QMF9FQVZfQ0ZHX1RYX1BERUxBWV9SRVFfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUDBfRUFWX0NGR19UWF9QREVMQVlfUkVRX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1AwX0VBVl9DRkdfVFhfREVMQVlfUkVRX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1AwX0VBVl9DRkdfVFhfREVMQVlfUkVRX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX1AwX0VBVl9DRkdfVFhfU1lOQ19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QMF9FQVZfQ0ZHX1RYX1NZTkNfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDFfVFhfU1lOQ19TRVFfSUQgICAgMHg2NDIwCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1AxX1RYX0RFTEFZX1JFUV9TRVFfSUQgICAgMHg2NDIxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1AxX1RYX1BERUxBWV9SRVFfU0VRX0lEICAgIDB4NjQyMgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QMV9UWF9QREVMQVlfUkVTUF9TRVFfSUQgICAgMHg2NDIzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1AxX1JYX1NZTkNfU0VRX0lEICAgIDB4NjQyNAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QMV9SWF9ERUxBWV9SRVFfU0VRX0lEICAgIDB4NjQyNQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QMV9SWF9QREVMQVlfUkVRX1NFUV9JRCAgICAweDY0MjYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDFfUlhfUERFTEFZX1JFU1BfU0VRX0lEICAgIDB4NjQyNworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QMV9QT1JUX05TRUNfMTVfMCAgICAweDY0MjgKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDFfUE9SVF9OU0VDXzI2XzE2ICAgIDB4NjQyOQorI2RlZmluZSAgICBSVEw4MzY3Q19QMV9QT1JUX05TRUNfMjZfMTZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDFfUE9SVF9OU0VDXzI2XzE2X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDFfUE9SVF9TRUNfMTVfMCAgICAweDY0MmEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDFfUE9SVF9TRUNfMzFfMTYgICAgMHg2NDJiCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1AxX0VBVl9DRkcgICAgMHg2NDJjCisjZGVmaW5lICAgIFJUTDgzNjdDX1AxX0VBVl9DRkdfUFRQX1BIWV9FTl9FTl9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19QMV9FQVZfQ0ZHX1BUUF9QSFlfRU5fRU5fTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QMV9FQVZfQ0ZHX1JYX1BERUxBWV9SRVNQX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1AxX0VBVl9DRkdfUlhfUERFTEFZX1JFU1BfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1AxX0VBVl9DRkdfUlhfUERFTEFZX1JFUV9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19QMV9FQVZfQ0ZHX1JYX1BERUxBWV9SRVFfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX1AxX0VBVl9DRkdfUlhfREVMQVlfUkVRX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1AxX0VBVl9DRkdfUlhfREVMQVlfUkVRX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19QMV9FQVZfQ0ZHX1JYX1NZTkNfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUDFfRUFWX0NGR19SWF9TWU5DX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QMV9FQVZfQ0ZHX1RYX1BERUxBWV9SRVNQX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1AxX0VBVl9DRkdfVFhfUERFTEFZX1JFU1BfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUDFfRUFWX0NGR19UWF9QREVMQVlfUkVRX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1AxX0VBVl9DRkdfVFhfUERFTEFZX1JFUV9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19QMV9FQVZfQ0ZHX1RYX0RFTEFZX1JFUV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19QMV9FQVZfQ0ZHX1RYX0RFTEFZX1JFUV9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19QMV9FQVZfQ0ZHX1RYX1NZTkNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDFfRUFWX0NGR19UWF9TWU5DX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1AyX1RYX1NZTkNfU0VRX0lEICAgIDB4NjQzMAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QMl9UWF9ERUxBWV9SRVFfU0VRX0lEICAgIDB4NjQzMQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QMl9UWF9QREVMQVlfUkVRX1NFUV9JRCAgICAweDY0MzIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDJfVFhfUERFTEFZX1JFU1BfU0VRX0lEICAgIDB4NjQzMworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QMl9SWF9TWU5DX1NFUV9JRCAgICAweDY0MzQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDJfUlhfREVMQVlfUkVRX1NFUV9JRCAgICAweDY0MzUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDJfUlhfUERFTEFZX1JFUV9TRVFfSUQgICAgMHg2NDM2CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1AyX1JYX1BERUxBWV9SRVNQX1NFUV9JRCAgICAweDY0MzcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDJfUE9SVF9OU0VDXzE1XzAgICAgMHg2NDM4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1AyX1BPUlRfTlNFQ18yNl8xNiAgICAweDY0MzkKKyNkZWZpbmUgICAgUlRMODM2N0NfUDJfUE9SVF9OU0VDXzI2XzE2X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1AyX1BPUlRfTlNFQ18yNl8xNl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1AyX1BPUlRfU0VDXzE1XzAgICAgMHg2NDNhCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1AyX1BPUlRfU0VDXzMxXzE2ICAgIDB4NjQzYgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QMl9FQVZfQ0ZHICAgIDB4NjQzYworI2RlZmluZSAgICBSVEw4MzY3Q19QMl9FQVZfQ0ZHX1BUUF9QSFlfRU5fRU5fT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUDJfRUFWX0NGR19QVFBfUEhZX0VOX0VOX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDJfRUFWX0NGR19SWF9QREVMQVlfUkVTUF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19QMl9FQVZfQ0ZHX1JYX1BERUxBWV9SRVNQX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19QMl9FQVZfQ0ZHX1JYX1BERUxBWV9SRVFfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUDJfRUFWX0NGR19SWF9QREVMQVlfUkVRX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19QMl9FQVZfQ0ZHX1JYX0RFTEFZX1JFUV9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19QMl9FQVZfQ0ZHX1JYX0RFTEFZX1JFUV9NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDJfRUFWX0NGR19SWF9TWU5DX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1AyX0VBVl9DRkdfUlhfU1lOQ19NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDJfRUFWX0NGR19UWF9QREVMQVlfUkVTUF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19QMl9FQVZfQ0ZHX1RYX1BERUxBWV9SRVNQX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX1AyX0VBVl9DRkdfVFhfUERFTEFZX1JFUV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19QMl9FQVZfQ0ZHX1RYX1BERUxBWV9SRVFfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUDJfRUFWX0NGR19UWF9ERUxBWV9SRVFfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfUDJfRUFWX0NGR19UWF9ERUxBWV9SRVFfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUDJfRUFWX0NGR19UWF9TWU5DX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1AyX0VBVl9DRkdfVFhfU1lOQ19NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QM19UWF9TWU5DX1NFUV9JRCAgICAweDY0NDAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDNfVFhfREVMQVlfUkVRX1NFUV9JRCAgICAweDY0NDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDNfVFhfUERFTEFZX1JFUV9TRVFfSUQgICAgMHg2NDQyCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1AzX1RYX1BERUxBWV9SRVNQX1NFUV9JRCAgICAweDY0NDMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDNfUlhfU1lOQ19TRVFfSUQgICAgMHg2NDQ0CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1AzX1JYX0RFTEFZX1JFUV9TRVFfSUQgICAgMHg2NDQ1CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1AzX1JYX1BERUxBWV9SRVFfU0VRX0lEICAgIDB4NjQ0NgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QM19SWF9QREVMQVlfUkVTUF9TRVFfSUQgICAgMHg2NDQ3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1AzX1BPUlRfTlNFQ18xNV8wICAgIDB4NjQ0OAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QM19QT1JUX05TRUNfMjZfMTYgICAgMHg2NDQ5CisjZGVmaW5lICAgIFJUTDgzNjdDX1AzX1BPUlRfTlNFQ18yNl8xNl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QM19QT1JUX05TRUNfMjZfMTZfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QM19QT1JUX1NFQ18xNV8wICAgIDB4NjQ0YQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QM19QT1JUX1NFQ18zMV8xNiAgICAweDY0NGIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDNfRUFWX0NGRyAgICAweDY0NGMKKyNkZWZpbmUgICAgUlRMODM2N0NfUDNfRUFWX0NGR19QVFBfUEhZX0VOX0VOX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1AzX0VBVl9DRkdfUFRQX1BIWV9FTl9FTl9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1AzX0VBVl9DRkdfUlhfUERFTEFZX1JFU1BfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfUDNfRUFWX0NGR19SWF9QREVMQVlfUkVTUF9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDNfRUFWX0NGR19SWF9QREVMQVlfUkVRX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1AzX0VBVl9DRkdfUlhfUERFTEFZX1JFUV9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDNfRUFWX0NGR19SWF9ERUxBWV9SRVFfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfUDNfRUFWX0NGR19SWF9ERUxBWV9SRVFfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX1AzX0VBVl9DRkdfUlhfU1lOQ19PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QM19FQVZfQ0ZHX1JYX1NZTkNfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1AzX0VBVl9DRkdfVFhfUERFTEFZX1JFU1BfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfUDNfRUFWX0NGR19UWF9QREVMQVlfUkVTUF9NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19QM19FQVZfQ0ZHX1RYX1BERUxBWV9SRVFfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUDNfRUFWX0NGR19UWF9QREVMQVlfUkVRX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1AzX0VBVl9DRkdfVFhfREVMQVlfUkVRX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1AzX0VBVl9DRkdfVFhfREVMQVlfUkVRX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX1AzX0VBVl9DRkdfVFhfU1lOQ19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QM19FQVZfQ0ZHX1RYX1NZTkNfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDRfVFhfU1lOQ19TRVFfSUQgICAgMHg2NDUwCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1A0X1RYX0RFTEFZX1JFUV9TRVFfSUQgICAgMHg2NDUxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1A0X1RYX1BERUxBWV9SRVFfU0VRX0lEICAgIDB4NjQ1MgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QNF9UWF9QREVMQVlfUkVTUF9TRVFfSUQgICAgMHg2NDUzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1A0X1JYX1NZTkNfU0VRX0lEICAgIDB4NjQ1NAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QNF9SWF9ERUxBWV9SRVFfU0VRX0lEICAgIDB4NjQ1NQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QNF9SWF9QREVMQVlfUkVRX1NFUV9JRCAgICAweDY0NTYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDRfUlhfUERFTEFZX1JFU1BfU0VRX0lEICAgIDB4NjQ1NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QNF9QT1JUX05TRUNfMTVfMCAgICAweDY0NTgKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDRfUE9SVF9OU0VDXzI2XzE2ICAgIDB4NjQ1OQorI2RlZmluZSAgICBSVEw4MzY3Q19QNF9QT1JUX05TRUNfMjZfMTZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDRfUE9SVF9OU0VDXzI2XzE2X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDRfUE9SVF9TRUNfMTVfMCAgICAweDY0NWEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDRfUE9SVF9TRUNfMzFfMTYgICAgMHg2NDViCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1A0X0VBVl9DRkcgICAgMHg2NDVjCisjZGVmaW5lICAgIFJUTDgzNjdDX1A0X0VBVl9DRkdfUFRQX1BIWV9FTl9FTl9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19QNF9FQVZfQ0ZHX1BUUF9QSFlfRU5fRU5fTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QNF9FQVZfQ0ZHX1JYX1BERUxBWV9SRVNQX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1A0X0VBVl9DRkdfUlhfUERFTEFZX1JFU1BfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1A0X0VBVl9DRkdfUlhfUERFTEFZX1JFUV9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19QNF9FQVZfQ0ZHX1JYX1BERUxBWV9SRVFfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX1A0X0VBVl9DRkdfUlhfREVMQVlfUkVRX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1A0X0VBVl9DRkdfUlhfREVMQVlfUkVRX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19QNF9FQVZfQ0ZHX1JYX1NZTkNfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUDRfRUFWX0NGR19SWF9TWU5DX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QNF9FQVZfQ0ZHX1RYX1BERUxBWV9SRVNQX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1A0X0VBVl9DRkdfVFhfUERFTEFZX1JFU1BfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUDRfRUFWX0NGR19UWF9QREVMQVlfUkVRX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1A0X0VBVl9DRkdfVFhfUERFTEFZX1JFUV9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19QNF9FQVZfQ0ZHX1RYX0RFTEFZX1JFUV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19QNF9FQVZfQ0ZHX1RYX0RFTEFZX1JFUV9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19QNF9FQVZfQ0ZHX1RYX1NZTkNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDRfRUFWX0NGR19UWF9TWU5DX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1A2X1RYX1NZTkNfU0VRX0lEICAgIDB4NjQ2MAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QNl9UWF9ERUxBWV9SRVFfU0VRX0lEICAgIDB4NjQ2MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QNl9UWF9QREVMQVlfUkVRX1NFUV9JRCAgICAweDY0NjIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDZfVFhfUERFTEFZX1JFU1BfU0VRX0lEICAgIDB4NjQ2MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QNl9SWF9TWU5DX1NFUV9JRCAgICAweDY0NjQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDZfUlhfREVMQVlfUkVRX1NFUV9JRCAgICAweDY0NjUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDZfUlhfUERFTEFZX1JFUV9TRVFfSUQgICAgMHg2NDY2CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1A2X1JYX1BERUxBWV9SRVNQX1NFUV9JRCAgICAweDY0NjcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDZfUE9SVF9OU0VDXzE1XzAgICAgMHg2NDY4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1A2X1BPUlRfTlNFQ18yNl8xNiAgICAweDY0NjkKKyNkZWZpbmUgICAgUlRMODM2N0NfUDZfUE9SVF9OU0VDXzI2XzE2X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1A2X1BPUlRfTlNFQ18yNl8xNl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1A2X1BPUlRfU0VDXzE1XzAgICAgMHg2NDZhCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1A2X1BPUlRfU0VDXzMxXzE2ICAgIDB4NjQ2YgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QNl9FQVZfQ0ZHICAgIDB4NjQ2YworI2RlZmluZSAgICBSVEw4MzY3Q19QNl9FQVZfQ0ZHX1BUUF9QSFlfRU5fRU5fT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUDZfRUFWX0NGR19QVFBfUEhZX0VOX0VOX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDZfRUFWX0NGR19SWF9QREVMQVlfUkVTUF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19QNl9FQVZfQ0ZHX1JYX1BERUxBWV9SRVNQX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19QNl9FQVZfQ0ZHX1JYX1BERUxBWV9SRVFfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUDZfRUFWX0NGR19SWF9QREVMQVlfUkVRX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19QNl9FQVZfQ0ZHX1JYX0RFTEFZX1JFUV9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19QNl9FQVZfQ0ZHX1JYX0RFTEFZX1JFUV9NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDZfRUFWX0NGR19SWF9TWU5DX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1A2X0VBVl9DRkdfUlhfU1lOQ19NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDZfRUFWX0NGR19UWF9QREVMQVlfUkVTUF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19QNl9FQVZfQ0ZHX1RYX1BERUxBWV9SRVNQX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX1A2X0VBVl9DRkdfVFhfUERFTEFZX1JFUV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19QNl9FQVZfQ0ZHX1RYX1BERUxBWV9SRVFfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUDZfRUFWX0NGR19UWF9ERUxBWV9SRVFfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfUDZfRUFWX0NGR19UWF9ERUxBWV9SRVFfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUDZfRUFWX0NGR19UWF9TWU5DX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1A2X0VBVl9DRkdfVFhfU1lOQ19NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QN19UWF9TWU5DX1NFUV9JRCAgICAweDY0NzAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDdfVFhfREVMQVlfUkVRX1NFUV9JRCAgICAweDY0NzEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDdfVFhfUERFTEFZX1JFUV9TRVFfSUQgICAgMHg2NDcyCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1A3X1RYX1BERUxBWV9SRVNQX1NFUV9JRCAgICAweDY0NzMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDdfUlhfU1lOQ19TRVFfSUQgICAgMHg2NDc0CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1A3X1JYX0RFTEFZX1JFUV9TRVFfSUQgICAgMHg2NDc1CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1A3X1JYX1BERUxBWV9SRVFfU0VRX0lEICAgIDB4NjQ3NgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QN19SWF9QREVMQVlfUkVTUF9TRVFfSUQgICAgMHg2NDc3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1A3X1BPUlRfTlNFQ18xNV8wICAgIDB4NjQ3OAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QN19QT1JUX05TRUNfMjZfMTYgICAgMHg2NDc5CisjZGVmaW5lICAgIFJUTDgzNjdDX1A3X1BPUlRfTlNFQ18yNl8xNl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QN19QT1JUX05TRUNfMjZfMTZfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QN19QT1JUX1NFQ18xNV8wICAgIDB4NjQ3YQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QN19QT1JUX1NFQ18zMV8xNiAgICAweDY0N2IKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDdfRUFWX0NGRyAgICAweDY0N2MKKyNkZWZpbmUgICAgUlRMODM2N0NfUDdfRUFWX0NGR19QVFBfUEhZX0VOX0VOX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1A3X0VBVl9DRkdfUFRQX1BIWV9FTl9FTl9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1A3X0VBVl9DRkdfUlhfUERFTEFZX1JFU1BfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfUDdfRUFWX0NGR19SWF9QREVMQVlfUkVTUF9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDdfRUFWX0NGR19SWF9QREVMQVlfUkVRX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1A3X0VBVl9DRkdfUlhfUERFTEFZX1JFUV9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDdfRUFWX0NGR19SWF9ERUxBWV9SRVFfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfUDdfRUFWX0NGR19SWF9ERUxBWV9SRVFfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX1A3X0VBVl9DRkdfUlhfU1lOQ19PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QN19FQVZfQ0ZHX1JYX1NZTkNfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1A3X0VBVl9DRkdfVFhfUERFTEFZX1JFU1BfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfUDdfRUFWX0NGR19UWF9QREVMQVlfUkVTUF9NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19QN19FQVZfQ0ZHX1RYX1BERUxBWV9SRVFfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUDdfRUFWX0NGR19UWF9QREVMQVlfUkVRX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1A3X0VBVl9DRkdfVFhfREVMQVlfUkVRX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1A3X0VBVl9DRkdfVFhfREVMQVlfUkVRX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX1A3X0VBVl9DRkdfVFhfU1lOQ19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QN19FQVZfQ0ZHX1RYX1NZTkNfTUFTSyAgICAweDEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDVfVFhfU1lOQ19TRVFfSUQgICAgMHg2NDgwCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1A1X1RYX0RFTEFZX1JFUV9TRVFfSUQgICAgMHg2NDgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1A1X1RYX1BERUxBWV9SRVFfU0VRX0lEICAgIDB4NjQ4MgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QNV9UWF9QREVMQVlfUkVTUF9TRVFfSUQgICAgMHg2NDgzCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1A1X1JYX1NZTkNfU0VRX0lEICAgIDB4NjQ4NAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QNV9SWF9ERUxBWV9SRVFfU0VRX0lEICAgIDB4NjQ4NQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QNV9SWF9QREVMQVlfUkVRX1NFUV9JRCAgICAweDY0ODYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDVfUlhfUERFTEFZX1JFU1BfU0VRX0lEICAgIDB4NjQ4NworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QNV9QT1JUX05TRUNfMTVfMCAgICAweDY0ODgKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDVfUE9SVF9OU0VDXzI2XzE2ICAgIDB4NjQ4OQorI2RlZmluZSAgICBSVEw4MzY3Q19QNV9QT1JUX05TRUNfMjZfMTZfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDVfUE9SVF9OU0VDXzI2XzE2X01BU0sgICAgMHg3RkYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDVfUE9SVF9TRUNfMTVfMCAgICAweDY0OGEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDVfUE9SVF9TRUNfMzFfMTYgICAgMHg2NDhiCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1A1X0VBVl9DRkcgICAgMHg2NDhjCisjZGVmaW5lICAgIFJUTDgzNjdDX1A1X0VBVl9DRkdfUFRQX1BIWV9FTl9FTl9PRkZTRVQgICAgOAorI2RlZmluZSAgICBSVEw4MzY3Q19QNV9FQVZfQ0ZHX1BUUF9QSFlfRU5fRU5fTUFTSyAgICAweDEwMAorI2RlZmluZSAgICBSVEw4MzY3Q19QNV9FQVZfQ0ZHX1JYX1BERUxBWV9SRVNQX09GRlNFVCAgICA3CisjZGVmaW5lICAgIFJUTDgzNjdDX1A1X0VBVl9DRkdfUlhfUERFTEFZX1JFU1BfTUFTSyAgICAweDgwCisjZGVmaW5lICAgIFJUTDgzNjdDX1A1X0VBVl9DRkdfUlhfUERFTEFZX1JFUV9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19QNV9FQVZfQ0ZHX1JYX1BERUxBWV9SRVFfTUFTSyAgICAweDQwCisjZGVmaW5lICAgIFJUTDgzNjdDX1A1X0VBVl9DRkdfUlhfREVMQVlfUkVRX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1A1X0VBVl9DRkdfUlhfREVMQVlfUkVRX01BU0sgICAgMHgyMAorI2RlZmluZSAgICBSVEw4MzY3Q19QNV9FQVZfQ0ZHX1JYX1NZTkNfT0ZGU0VUICAgIDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUDVfRUFWX0NGR19SWF9TWU5DX01BU0sgICAgMHgxMAorI2RlZmluZSAgICBSVEw4MzY3Q19QNV9FQVZfQ0ZHX1RYX1BERUxBWV9SRVNQX09GRlNFVCAgICAzCisjZGVmaW5lICAgIFJUTDgzNjdDX1A1X0VBVl9DRkdfVFhfUERFTEFZX1JFU1BfTUFTSyAgICAweDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUDVfRUFWX0NGR19UWF9QREVMQVlfUkVRX09GRlNFVCAgICAyCisjZGVmaW5lICAgIFJUTDgzNjdDX1A1X0VBVl9DRkdfVFhfUERFTEFZX1JFUV9NQVNLICAgIDB4NAorI2RlZmluZSAgICBSVEw4MzY3Q19QNV9FQVZfQ0ZHX1RYX0RFTEFZX1JFUV9PRkZTRVQgICAgMQorI2RlZmluZSAgICBSVEw4MzY3Q19QNV9FQVZfQ0ZHX1RYX0RFTEFZX1JFUV9NQVNLICAgIDB4MgorI2RlZmluZSAgICBSVEw4MzY3Q19QNV9FQVZfQ0ZHX1RYX1NZTkNfT0ZGU0VUICAgIDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDVfRUFWX0NGR19UWF9TWU5DX01BU0sgICAgMHgxCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1A4X1RYX1NZTkNfU0VRX0lEICAgIDB4NjQ5MAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QOF9UWF9ERUxBWV9SRVFfU0VRX0lEICAgIDB4NjQ5MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QOF9UWF9QREVMQVlfUkVRX1NFUV9JRCAgICAweDY0OTIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDhfVFhfUERFTEFZX1JFU1BfU0VRX0lEICAgIDB4NjQ5MworCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QOF9SWF9TWU5DX1NFUV9JRCAgICAweDY0OTQKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDhfUlhfREVMQVlfUkVRX1NFUV9JRCAgICAweDY0OTUKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDhfUlhfUERFTEFZX1JFUV9TRVFfSUQgICAgMHg2NDk2CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1A4X1JYX1BERUxBWV9SRVNQX1NFUV9JRCAgICAweDY0OTcKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDhfUE9SVF9OU0VDXzE1XzAgICAgMHg2NDk4CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1A4X1BPUlRfTlNFQ18yNl8xNiAgICAweDY0OTkKKyNkZWZpbmUgICAgUlRMODM2N0NfUDhfUE9SVF9OU0VDXzI2XzE2X09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1A4X1BPUlRfTlNFQ18yNl8xNl9NQVNLICAgIDB4N0ZGCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1A4X1BPUlRfU0VDXzE1XzAgICAgMHg2NDlhCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1A4X1BPUlRfU0VDXzMxXzE2ICAgIDB4NjQ5YgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QOF9FQVZfQ0ZHICAgIDB4NjQ5YworI2RlZmluZSAgICBSVEw4MzY3Q19QOF9FQVZfQ0ZHX1BUUF9QSFlfRU5fRU5fT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfUDhfRUFWX0NGR19QVFBfUEhZX0VOX0VOX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDhfRUFWX0NGR19SWF9QREVMQVlfUkVTUF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19QOF9FQVZfQ0ZHX1JYX1BERUxBWV9SRVNQX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19QOF9FQVZfQ0ZHX1JYX1BERUxBWV9SRVFfT0ZGU0VUICAgIDYKKyNkZWZpbmUgICAgUlRMODM2N0NfUDhfRUFWX0NGR19SWF9QREVMQVlfUkVRX01BU0sgICAgMHg0MAorI2RlZmluZSAgICBSVEw4MzY3Q19QOF9FQVZfQ0ZHX1JYX0RFTEFZX1JFUV9PRkZTRVQgICAgNQorI2RlZmluZSAgICBSVEw4MzY3Q19QOF9FQVZfQ0ZHX1JYX0RFTEFZX1JFUV9NQVNLICAgIDB4MjAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDhfRUFWX0NGR19SWF9TWU5DX09GRlNFVCAgICA0CisjZGVmaW5lICAgIFJUTDgzNjdDX1A4X0VBVl9DRkdfUlhfU1lOQ19NQVNLICAgIDB4MTAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDhfRUFWX0NGR19UWF9QREVMQVlfUkVTUF9PRkZTRVQgICAgMworI2RlZmluZSAgICBSVEw4MzY3Q19QOF9FQVZfQ0ZHX1RYX1BERUxBWV9SRVNQX01BU0sgICAgMHg4CisjZGVmaW5lICAgIFJUTDgzNjdDX1A4X0VBVl9DRkdfVFhfUERFTEFZX1JFUV9PRkZTRVQgICAgMgorI2RlZmluZSAgICBSVEw4MzY3Q19QOF9FQVZfQ0ZHX1RYX1BERUxBWV9SRVFfTUFTSyAgICAweDQKKyNkZWZpbmUgICAgUlRMODM2N0NfUDhfRUFWX0NGR19UWF9ERUxBWV9SRVFfT0ZGU0VUICAgIDEKKyNkZWZpbmUgICAgUlRMODM2N0NfUDhfRUFWX0NGR19UWF9ERUxBWV9SRVFfTUFTSyAgICAweDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUDhfRUFWX0NGR19UWF9TWU5DX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1A4X0VBVl9DRkdfVFhfU1lOQ19NQVNLICAgIDB4MQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QOV9UWF9TWU5DX1NFUV9JRCAgICAweDY0YTAKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDlfVFhfREVMQVlfUkVRX1NFUV9JRCAgICAweDY0YTEKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDlfVFhfUERFTEFZX1JFUV9TRVFfSUQgICAgMHg2NGEyCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1A5X1RYX1BERUxBWV9SRVNQX1NFUV9JRCAgICAweDY0YTMKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDlfUlhfU1lOQ19TRVFfSUQgICAgMHg2NGE0CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1A5X1JYX0RFTEFZX1JFUV9TRVFfSUQgICAgMHg2NGE1CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1A5X1JYX1BERUxBWV9SRVFfU0VRX0lEICAgIDB4NjRhNgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QOV9SWF9QREVMQVlfUkVTUF9TRVFfSUQgICAgMHg2NGE3CisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1A5X1BPUlRfTlNFQ18xNV8wICAgIDB4NjRhOAorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QOV9QT1JUX05TRUNfMjZfMTYgICAgMHg2NGE5CisjZGVmaW5lICAgIFJUTDgzNjdDX1A5X1BPUlRfTlNFQ18yNl8xNl9PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QOV9QT1JUX05TRUNfMjZfMTZfTUFTSyAgICAweDdGRgorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QOV9QT1JUX1NFQ18xNV8wICAgIDB4NjRhYQorCisjZGVmaW5lICAgIFJUTDgzNjdDX1JFR19QOV9QT1JUX1NFQ18zMV8xNiAgICAweDY0YWIKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfUDlfRUFWX0NGRyAgICAweDY0YWMKKyNkZWZpbmUgICAgUlRMODM2N0NfUDlfRUFWX0NGR19QVFBfUEhZX0VOX0VOX09GRlNFVCAgICA4CisjZGVmaW5lICAgIFJUTDgzNjdDX1A5X0VBVl9DRkdfUFRQX1BIWV9FTl9FTl9NQVNLICAgIDB4MTAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1A5X0VBVl9DRkdfUlhfUERFTEFZX1JFU1BfT0ZGU0VUICAgIDcKKyNkZWZpbmUgICAgUlRMODM2N0NfUDlfRUFWX0NGR19SWF9QREVMQVlfUkVTUF9NQVNLICAgIDB4ODAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDlfRUFWX0NGR19SWF9QREVMQVlfUkVRX09GRlNFVCAgICA2CisjZGVmaW5lICAgIFJUTDgzNjdDX1A5X0VBVl9DRkdfUlhfUERFTEFZX1JFUV9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfUDlfRUFWX0NGR19SWF9ERUxBWV9SRVFfT0ZGU0VUICAgIDUKKyNkZWZpbmUgICAgUlRMODM2N0NfUDlfRUFWX0NGR19SWF9ERUxBWV9SRVFfTUFTSyAgICAweDIwCisjZGVmaW5lICAgIFJUTDgzNjdDX1A5X0VBVl9DRkdfUlhfU1lOQ19PRkZTRVQgICAgNAorI2RlZmluZSAgICBSVEw4MzY3Q19QOV9FQVZfQ0ZHX1JYX1NZTkNfTUFTSyAgICAweDEwCisjZGVmaW5lICAgIFJUTDgzNjdDX1A5X0VBVl9DRkdfVFhfUERFTEFZX1JFU1BfT0ZGU0VUICAgIDMKKyNkZWZpbmUgICAgUlRMODM2N0NfUDlfRUFWX0NGR19UWF9QREVMQVlfUkVTUF9NQVNLICAgIDB4OAorI2RlZmluZSAgICBSVEw4MzY3Q19QOV9FQVZfQ0ZHX1RYX1BERUxBWV9SRVFfT0ZGU0VUICAgIDIKKyNkZWZpbmUgICAgUlRMODM2N0NfUDlfRUFWX0NGR19UWF9QREVMQVlfUkVRX01BU0sgICAgMHg0CisjZGVmaW5lICAgIFJUTDgzNjdDX1A5X0VBVl9DRkdfVFhfREVMQVlfUkVRX09GRlNFVCAgICAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1A5X0VBVl9DRkdfVFhfREVMQVlfUkVRX01BU0sgICAgMHgyCisjZGVmaW5lICAgIFJUTDgzNjdDX1A5X0VBVl9DRkdfVFhfU1lOQ19PRkZTRVQgICAgMAorI2RlZmluZSAgICBSVEw4MzY3Q19QOV9FQVZfQ0ZHX1RYX1NZTkNfTUFTSyAgICAweDEKKworLyogKDE2J2g2NjAwKXNkc19pbmRhY3NfcmVnICovCisKKyNkZWZpbmUgICAgUlRMODM2N0NfUkVHX1NEU19JTkRBQ1NfQ01EICAgIDB4NjYwMAorI2RlZmluZSAgICBSVEw4MzY3Q19TRFNfQ01EX0JVU1lfT0ZGU0VUICAgIDgKKyNkZWZpbmUgICAgUlRMODM2N0NfU0RTX0NNRF9CVVNZX01BU0sgICAgMHgxMDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0RTX0NNRF9PRkZTRVQgICAgNworI2RlZmluZSAgICBSVEw4MzY3Q19TRFNfQ01EX01BU0sgICAgMHg4MAorI2RlZmluZSAgICBSVEw4MzY3Q19TRFNfUldPUF9PRkZTRVQgICAgNgorI2RlZmluZSAgICBSVEw4MzY3Q19TRFNfUldPUF9NQVNLICAgIDB4NDAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0RTX0lOREVYX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NEU19JTkRFWF9NQVNLICAgIDB4M0YKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0RTX0lOREFDU19BRFIgICAgMHg2NjAxCisjZGVmaW5lICAgIFJUTDgzNjdDX1NEU19QQUdFX09GRlNFVCAgICA1CisjZGVmaW5lICAgIFJUTDgzNjdDX1NEU19QQUdFX01BU0sgICAgMHg3RTAKKyNkZWZpbmUgICAgUlRMODM2N0NfU0RTX1JFR0FEX09GRlNFVCAgICAwCisjZGVmaW5lICAgIFJUTDgzNjdDX1NEU19SRUdBRF9NQVNLICAgIDB4MUYKKworI2RlZmluZSAgICBSVEw4MzY3Q19SRUdfU0RTX0lOREFDU19EQVRBICAgIDB4NjYwMgorCisKKyNlbmRpZiAvKiNpZm5kZWYgX1JUTDgzNjdDX1JFR19IXyovCisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3NtaS5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvc21pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc3ZDc2MAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3NtaS5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogUHVycG9zZSA6IFJUTDgzNjdDIHN3aXRjaCBsb3ctbGV2ZWwgZnVuY3Rpb24gZm9yIGFjY2VzcyByZWdpc3RlcgorICogRmVhdHVyZSA6IFNNSSByZWxhdGVkIGZ1bmN0aW9ucworICoKKyAqLworCisjaWZuZGVmIF9fU01JX0hfXworI2RlZmluZSBfX1NNSV9IX18KKworI2luY2x1ZGUgPHJ0a190eXBlcy5oPgorI2luY2x1ZGUgInJ0a19lcnJvci5oIgorCisjZGVmaW5lIE1EQ19NRElPX0NUUkwwX1JFRyAgICAgICAgICAzMQorI2RlZmluZSBNRENfTURJT19TVEFSVF9SRUcgICAgICAgICAgMjkKKyNkZWZpbmUgTURDX01ESU9fQ1RSTDFfUkVHICAgICAgICAgIDIxCisjZGVmaW5lIE1EQ19NRElPX0FERFJFU1NfUkVHICAgICAgICAyMworI2RlZmluZSBNRENfTURJT19EQVRBX1dSSVRFX1JFRyAgICAgMjQKKyNkZWZpbmUgTURDX01ESU9fREFUQV9SRUFEX1JFRyAgICAgIDI1CisjZGVmaW5lIE1EQ19NRElPX1BSRUFNQkxFX0xFTiAgICAgICAzMgorCisjZGVmaW5lIE1EQ19NRElPX1NUQVJUX09QICAgICAgICAgIDB4RkZGRgorI2RlZmluZSBNRENfTURJT19BRERSX09QICAgICAgICAgICAweDAwMEUKKyNkZWZpbmUgTURDX01ESU9fUkVBRF9PUCAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIE1EQ19NRElPX1dSSVRFX09QICAgICAgICAgIDB4MDAwMworCisjZGVmaW5lIFNQSV9SRUFEX09QICAgICAgICAgICAgICAgICAweDMKKyNkZWZpbmUgU1BJX1dSSVRFX09QICAgICAgICAgICAgICAgIDB4MgorI2RlZmluZSBTUElfUkVBRF9PUF9MRU4gICAgICAgICAgICAgMHg4CisjZGVmaW5lIFNQSV9XUklURV9PUF9MRU4gICAgICAgICAgICAweDgKKyNkZWZpbmUgU1BJX1JFR19MRU4gICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIFNQSV9EQVRBX0xFTiAgICAgICAgICAgICAgICAxNgorCisjZGVmaW5lIEdQSU9fRElSX0lOICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEdQSU9fRElSX09VVCAgICAgICAgICAgICAgICAwCisKKyNkZWZpbmUgYWNrX3RpbWVyICAgICAgICAgICAgICAgICAgIDUKKworI2RlZmluZSBERUxBWSAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwCisjZGVmaW5lIENMS19EVVJBVElPTihjbGspICAgICAgICAgICAgeyBpbnQgaTsgZm9yKGk9MDsgaTxjbGs7IGkrKyk7IH0KKworcnRrX2ludDMyIHNtaV9yZWFkKHJ0a191aW50MzIgbUFkZHJzLCBydGtfdWludDMyICpyRGF0YSk7CitydGtfaW50MzIgc21pX3dyaXRlKHJ0a191aW50MzIgbUFkZHJzLCBydGtfdWludDMyIHJEYXRhKTsKKworI2VuZGlmIC8qIF9fU01JX0hfXyAqLworCisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3N0YXQuaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3N0YXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzM1NzYzCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvc3RhdC5oCkBAIC0wLDAgKzEsNDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqIFB1cnBvc2UgOiBSVEw4MzY3L1JUTDgzNjdDIHN3aXRjaCBoaWdoLWxldmVsIEFQSQorICoKKyAqIEZlYXR1cmUgOiBUaGUgZmlsZSBpbmNsdWRlcyBNSUIgbW9kdWxlIGhpZ2gtbGF5ZXIgQVBJIGRlZmluYXRpb24KKyAqCisgKi8KKworI2lmbmRlZiBfX1JUS19BUElfU1RBVF9IX18KKyNkZWZpbmUgX19SVEtfQVBJX1NUQVRfSF9fCisKKy8qCisgKiBEYXRhIFR5cGUgRGVjbGFyYXRpb24KKyAqLwordHlwZWRlZiBydGtfdV9sb25nX3QgcnRrX3N0YXRfY291bnRlcl90OworCisvKiBnbG9iYWwgc3RhdGlzdGljIGNvdW50ZXIgc3RydWN0dXJlICovCit0eXBlZGVmIHN0cnVjdCBydGtfc3RhdF9nbG9iYWxfY250cl9zCit7CisgICAgcnRrX3VpbnQ2NCBkb3QxZFRwTGVhcm5lZEVudHJ5RGlzY2FyZHM7Cit9cnRrX3N0YXRfZ2xvYmFsX2NudHJfdDsKKwordHlwZWRlZiBlbnVtIHJ0a19zdGF0X2dsb2JhbF90eXBlX2UKK3sKKyAgICBET1QxRF9UUF9MRUFSTkVEX0VOVFJZX0RJU0NBUkRTX0lOREVYID0gNTgsCisgICAgTUlCX0dMT0JBTF9DTlRSX0VORAorfXJ0a19zdGF0X2dsb2JhbF90eXBlX3Q7CisKKy8qIHBvcnQgc3RhdGlzdGljIGNvdW50ZXIgc3RydWN0dXJlICovCit0eXBlZGVmIHN0cnVjdCBydGtfc3RhdF9wb3J0X2NudHJfcworeworICAgIHJ0a191aW50NjQgaWZJbk9jdGV0czsKKyAgICBydGtfdWludDMyIGRvdDNTdGF0c0ZDU0Vycm9yczsKKyAgICBydGtfdWludDMyIGRvdDNTdGF0c1N5bWJvbEVycm9yczsKKyAgICBydGtfdWludDMyIGRvdDNJblBhdXNlRnJhbWVzOworICAgIHJ0a191aW50MzIgZG90M0NvbnRyb2xJblVua25vd25PcGNvZGVzOworICAgIHJ0a191aW50MzIgZXRoZXJTdGF0c0ZyYWdtZW50czsKKyAgICBydGtfdWludDMyIGV0aGVyU3RhdHNKYWJiZXJzOworICAgIHJ0a191aW50MzIgaWZJblVjYXN0UGt0czsKKyAgICBydGtfdWludDMyIGV0aGVyU3RhdHNEcm9wRXZlbnRzOworICAgIHJ0a191aW50NjQgZXRoZXJTdGF0c09jdGV0czsKKyAgICBydGtfdWludDMyIGV0aGVyU3RhdHNVbmRlcnNpemVQa3RzOworICAgIHJ0a191aW50MzIgZXRoZXJTdGF0c092ZXJzaXplUGt0czsKKyAgICBydGtfdWludDMyIGV0aGVyU3RhdHNQa3RzNjRPY3RldHM7CisgICAgcnRrX3VpbnQzMiBldGhlclN0YXRzUGt0czY1dG8xMjdPY3RldHM7CisgICAgcnRrX3VpbnQzMiBldGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzOworICAgIHJ0a191aW50MzIgZXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0czsKKyAgICBydGtfdWludDMyIGV0aGVyU3RhdHNQa3RzNTEydG8xMDIzT2N0ZXRzOworICAgIHJ0a191aW50MzIgZXRoZXJTdGF0c1BrdHMxMDI0dG9NYXhPY3RldHM7CisgICAgcnRrX3VpbnQzMiBldGhlclN0YXRzTWNhc3RQa3RzOworICAgIHJ0a191aW50MzIgZXRoZXJTdGF0c0JjYXN0UGt0czsKKyAgICBydGtfdWludDY0IGlmT3V0T2N0ZXRzOworICAgIHJ0a191aW50MzIgZG90M1N0YXRzU2luZ2xlQ29sbGlzaW9uRnJhbWVzOworICAgIHJ0a191aW50MzIgZG90M1N0YXRzTXVsdGlwbGVDb2xsaXNpb25GcmFtZXM7CisgICAgcnRrX3VpbnQzMiBkb3QzU3RhdHNEZWZlcnJlZFRyYW5zbWlzc2lvbnM7CisgICAgcnRrX3VpbnQzMiBkb3QzU3RhdHNMYXRlQ29sbGlzaW9uczsKKyAgICBydGtfdWludDMyIGV0aGVyU3RhdHNDb2xsaXNpb25zOworICAgIHJ0a191aW50MzIgZG90M1N0YXRzRXhjZXNzaXZlQ29sbGlzaW9uczsKKyAgICBydGtfdWludDMyIGRvdDNPdXRQYXVzZUZyYW1lczsKKyAgICBydGtfdWludDMyIGRvdDFkQmFzZVBvcnREZWxheUV4Y2VlZGVkRGlzY2FyZHM7CisgICAgcnRrX3VpbnQzMiBkb3QxZFRwUG9ydEluRGlzY2FyZHM7CisgICAgcnRrX3VpbnQzMiBpZk91dFVjYXN0UGt0czsKKyAgICBydGtfdWludDMyIGlmT3V0TXVsdGljYXN0UGt0czsKKyAgICBydGtfdWludDMyIGlmT3V0QnJvY2FzdFBrdHM7CisgICAgcnRrX3VpbnQzMiBvdXRPYW1wZHVQa3RzOworICAgIHJ0a191aW50MzIgaW5PYW1wZHVQa3RzOworICAgIHJ0a191aW50MzIgcGt0Z2VuUGt0czsKKyAgICBydGtfdWludDMyIGluTWxkQ2hlY2tzdW1FcnJvcjsKKyAgICBydGtfdWludDMyIGluSWdtcENoZWNrc3VtRXJyb3I7CisgICAgcnRrX3VpbnQzMiBpbk1sZFNwZWNpZmljUXVlcnk7CisgICAgcnRrX3VpbnQzMiBpbk1sZEdlbmVyYWxRdWVyeTsKKyAgICBydGtfdWludDMyIGluSWdtcFNwZWNpZmljUXVlcnk7CisgICAgcnRrX3VpbnQzMiBpbklnbXBHZW5lcmFsUXVlcnk7CisgICAgcnRrX3VpbnQzMiBpbk1sZExlYXZlczsKKyAgICBydGtfdWludDMyIGluSWdtcExlYXZlczsKKyAgICBydGtfdWludDMyIGluSWdtcEpvaW5zU3VjY2VzczsKKyAgICBydGtfdWludDMyIGluSWdtcEpvaW5zRmFpbDsKKyAgICBydGtfdWludDMyIGluTWxkSm9pbnNTdWNjZXNzOworICAgIHJ0a191aW50MzIgaW5NbGRKb2luc0ZhaWw7CisgICAgcnRrX3VpbnQzMiBpblJlcG9ydFN1cHByZXNzaW9uRHJvcDsKKyAgICBydGtfdWludDMyIGluTGVhdmVTdXBwcmVzc2lvbkRyb3A7CisgICAgcnRrX3VpbnQzMiBvdXRJZ21wUmVwb3J0czsKKyAgICBydGtfdWludDMyIG91dElnbXBMZWF2ZXM7CisgICAgcnRrX3VpbnQzMiBvdXRJZ21wR2VuZXJhbFF1ZXJ5OworICAgIHJ0a191aW50MzIgb3V0SWdtcFNwZWNpZmljUXVlcnk7CisgICAgcnRrX3VpbnQzMiBvdXRNbGRSZXBvcnRzOworICAgIHJ0a191aW50MzIgb3V0TWxkTGVhdmVzOworICAgIHJ0a191aW50MzIgb3V0TWxkR2VuZXJhbFF1ZXJ5OworICAgIHJ0a191aW50MzIgb3V0TWxkU3BlY2lmaWNRdWVyeTsKKyAgICBydGtfdWludDMyIGluS25vd25NdWx0aWNhc3RQa3RzOworICAgIHJ0a191aW50MzIgaWZJbk11bHRpY2FzdFBrdHM7CisgICAgcnRrX3VpbnQzMiBpZkluQnJvYWRjYXN0UGt0czsKKyAgICBydGtfdWludDMyIGlmT3V0RGlzY2FyZHM7Cit9cnRrX3N0YXRfcG9ydF9jbnRyX3Q7CisKKy8qIHBvcnQgc3RhdGlzdGljIGNvdW50ZXIgaW5kZXggKi8KK3R5cGVkZWYgZW51bSBydGtfc3RhdF9wb3J0X3R5cGVfZQoreworICAgIFNUQVRfSWZJbk9jdGV0cyA9IDAsCisgICAgU1RBVF9Eb3QzU3RhdHNGQ1NFcnJvcnMsCisgICAgU1RBVF9Eb3QzU3RhdHNTeW1ib2xFcnJvcnMsCisgICAgU1RBVF9Eb3QzSW5QYXVzZUZyYW1lcywKKyAgICBTVEFUX0RvdDNDb250cm9sSW5Vbmtub3duT3Bjb2RlcywKKyAgICBTVEFUX0V0aGVyU3RhdHNGcmFnbWVudHMsCisgICAgU1RBVF9FdGhlclN0YXRzSmFiYmVycywKKyAgICBTVEFUX0lmSW5VY2FzdFBrdHMsCisgICAgU1RBVF9FdGhlclN0YXRzRHJvcEV2ZW50cywKKyAgICBTVEFUX0V0aGVyU3RhdHNPY3RldHMsCisgICAgU1RBVF9FdGhlclN0YXRzVW5kZXJTaXplUGt0cywKKyAgICBTVEFUX0V0aGVyT3ZlcnNpemVTdGF0cywKKyAgICBTVEFUX0V0aGVyU3RhdHNQa3RzNjRPY3RldHMsCisgICAgU1RBVF9FdGhlclN0YXRzUGt0czY1dG8xMjdPY3RldHMsCisgICAgU1RBVF9FdGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzLAorICAgIFNUQVRfRXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0cywKKyAgICBTVEFUX0V0aGVyU3RhdHNQa3RzNTEydG8xMDIzT2N0ZXRzLAorICAgIFNUQVRfRXRoZXJTdGF0c1BrdHMxMDI0dG8xNTE4T2N0ZXRzLAorICAgIFNUQVRfRXRoZXJTdGF0c011bHRpY2FzdFBrdHMsCisgICAgU1RBVF9FdGhlclN0YXRzQnJvYWRjYXN0UGt0cywKKyAgICBTVEFUX0lmT3V0T2N0ZXRzLAorICAgIFNUQVRfRG90M1N0YXRzU2luZ2xlQ29sbGlzaW9uRnJhbWVzLAorICAgIFNUQVRfRG90M1N0YXRzTXVsdGlwbGVDb2xsaXNpb25GcmFtZXMsCisgICAgU1RBVF9Eb3QzU3RhdHNEZWZlcnJlZFRyYW5zbWlzc2lvbnMsCisgICAgU1RBVF9Eb3QzU3RhdHNMYXRlQ29sbGlzaW9ucywKKyAgICBTVEFUX0V0aGVyU3RhdHNDb2xsaXNpb25zLAorICAgIFNUQVRfRG90M1N0YXRzRXhjZXNzaXZlQ29sbGlzaW9ucywKKyAgICBTVEFUX0RvdDNPdXRQYXVzZUZyYW1lcywKKyAgICBTVEFUX0RvdDFkQmFzZVBvcnREZWxheUV4Y2VlZGVkRGlzY2FyZHMsCisgICAgU1RBVF9Eb3QxZFRwUG9ydEluRGlzY2FyZHMsCisgICAgU1RBVF9JZk91dFVjYXN0UGt0cywKKyAgICBTVEFUX0lmT3V0TXVsdGljYXN0UGt0cywKKyAgICBTVEFUX0lmT3V0QnJvYWRjYXN0UGt0cywKKyAgICBTVEFUX091dE9hbXBkdVBrdHMsCisgICAgU1RBVF9Jbk9hbXBkdVBrdHMsCisgICAgU1RBVF9Qa3RnZW5Qa3RzLAorICAgIFNUQVRfSW5NbGRDaGVja3N1bUVycm9yLAorICAgIFNUQVRfSW5JZ21wQ2hlY2tzdW1FcnJvciwKKyAgICBTVEFUX0luTWxkU3BlY2lmaWNRdWVyeSwKKyAgICBTVEFUX0luTWxkR2VuZXJhbFF1ZXJ5LAorICAgIFNUQVRfSW5JZ21wU3BlY2lmaWNRdWVyeSwKKyAgICBTVEFUX0luSWdtcEdlbmVyYWxRdWVyeSwKKyAgICBTVEFUX0luTWxkTGVhdmVzLAorICAgIFNUQVRfSW5JZ21wSW50ZXJmYWNlTGVhdmVzLAorICAgIFNUQVRfSW5JZ21wSm9pbnNTdWNjZXNzLAorICAgIFNUQVRfSW5JZ21wSm9pbnNGYWlsLAorICAgIFNUQVRfSW5NbGRKb2luc1N1Y2Nlc3MsCisgICAgU1RBVF9Jbk1sZEpvaW5zRmFpbCwKKyAgICBTVEFUX0luUmVwb3J0U3VwcHJlc3Npb25Ecm9wLAorICAgIFNUQVRfSW5MZWF2ZVN1cHByZXNzaW9uRHJvcCwKKyAgICBTVEFUX091dElnbXBSZXBvcnRzLAorICAgIFNUQVRfT3V0SWdtcExlYXZlcywKKyAgICBTVEFUX091dElnbXBHZW5lcmFsUXVlcnksCisgICAgU1RBVF9PdXRJZ21wU3BlY2lmaWNRdWVyeSwKKyAgICBTVEFUX091dE1sZFJlcG9ydHMsCisgICAgU1RBVF9PdXRNbGRMZWF2ZXMsCisgICAgU1RBVF9PdXRNbGRHZW5lcmFsUXVlcnksCisgICAgU1RBVF9PdXRNbGRTcGVjaWZpY1F1ZXJ5LAorICAgIFNUQVRfSW5Lbm93bk11bHRpY2FzdFBrdHMsCisgICAgU1RBVF9JZkluTXVsdGljYXN0UGt0cywKKyAgICBTVEFUX0lmSW5Ccm9hZGNhc3RQa3RzLAorICAgIFNUQVRfSWZPdXREaXNjYXJkcywKKyAgICBTVEFUX1BPUlRfQ05UUl9FTkQKK31ydGtfc3RhdF9wb3J0X3R5cGVfdDsKKwordHlwZWRlZiBlbnVtIHJ0a19sb2dnaW5nX2NvdW50ZXJfbW9kZV9lCit7CisgICAgTE9HR0lOR19NT0RFXzMyQklUID0gMCwKKyAgICBMT0dHSU5HX01PREVfNjRCSVQsCisgICAgTE9HR0lOR19NT0RFX0VORAorfXJ0a19sb2dnaW5nX2NvdW50ZXJfbW9kZV90OworCit0eXBlZGVmIGVudW0gcnRrX2xvZ2dpbmdfY291bnRlcl90eXBlX2UKK3sKKyAgICBMT0dHSU5HX1RZUEVfUEFDS0VUID0gMCwKKyAgICBMT0dHSU5HX1RZUEVfQllURSwKKyAgICBMT0dHSU5HX1RZUEVfRU5ECit9cnRrX2xvZ2dpbmdfY291bnRlcl90eXBlX3Q7CisKK3R5cGVkZWYgZW51bSBydGtfc3RhdF9sZW5ndGhNb2RlX2UKK3sKKyAgICBMRU5HVEhfTU9ERV9FWENfVEFHID0gMCwKKyAgICBMRU5HVEhfTU9ERV9JTkNfVEFHLAorICAgIExFTkdUSF9NT0RFX0VORAorfXJ0a19zdGF0X2xlbmd0aE1vZGVfdDsKKworCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdGF0X2dsb2JhbF9yZXNldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFJlc2V0IGdsb2JhbCBNSUIgY291bnRlci4KKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIFJlc2V0IE1JQiBjb3VudGVyIG9mIHBvcnRzLiBBUEkgd2lsbCB1c2UgZ2xvYmFsIHJlc2V0IHdoaWxlIHBvcnQgbWFzayBpcyBhbGwtcG9ydHMuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19zdGF0X2dsb2JhbF9yZXNldCh2b2lkKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N0YXRfcG9ydF9yZXNldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFJlc2V0IHBlciBwb3J0IE1JQiBjb3VudGVyIGJ5IHBvcnQuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIHBvcnQgaWQuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfc3RhdF9wb3J0X3Jlc2V0KHJ0a19wb3J0X3QgcG9ydCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdGF0X3F1ZXVlTWFuYWdlX3Jlc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgUmVzZXQgcXVldWUgbWFuYWdlIE1JQiBjb3VudGVyLgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19zdGF0X3F1ZXVlTWFuYWdlX3Jlc2V0KHZvaWQpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3RhdF9nbG9iYWxfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGdsb2JhbCBNSUIgY291bnRlcgorICogSW5wdXQ6CisgKiAgICAgIGNudHJfaWR4IC0gZ2xvYmFsIGNvdW50ZXIgaW5kZXguCisgKiBPdXRwdXQ6CisgKiAgICAgIHBDbnRyIC0gZ2xvYmFsIGNvdW50ZXIgdmFsdWUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBHZXQgZ2xvYmFsIE1JQiBjb3VudGVyIGJ5IGluZGV4IGRlZmluaXRpb24uCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19zdGF0X2dsb2JhbF9nZXQocnRrX3N0YXRfZ2xvYmFsX3R5cGVfdCBjbnRyX2lkeCwgcnRrX3N0YXRfY291bnRlcl90ICpwQ250cik7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdGF0X2dsb2JhbF9nZXRBbGwKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgYWxsIGdsb2JhbCBNSUIgY291bnRlcgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcEdsb2JhbF9jbnRycyAtIGdsb2JhbCBjb3VudGVyIHN0cnVjdHVyZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIEdldCBhbGwgZ2xvYmFsIE1JQiBjb3VudGVyIGJ5IGluZGV4IGRlZmluaXRpb24uCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19zdGF0X2dsb2JhbF9nZXRBbGwocnRrX3N0YXRfZ2xvYmFsX2NudHJfdCAqcEdsb2JhbF9jbnRycyk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdGF0X3BvcnRfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHBlciBwb3J0IE1JQiBjb3VudGVyIGJ5IGluZGV4CisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBwb3J0IGlkLgorICogICAgICBjbnRyX2lkeCAgICAtIHBvcnQgY291bnRlciBpbmRleC4KKyAqIE91dHB1dDoKKyAqICAgICAgcENudHIgLSBNSUIgcmV0cml2ZWQgY291bnRlci4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIEdldCBwZXIgcG9ydCBNSUIgY291bnRlciBieSBpbmRleCBkZWZpbml0aW9uLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfc3RhdF9wb3J0X2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19zdGF0X3BvcnRfdHlwZV90IGNudHJfaWR4LCBydGtfc3RhdF9jb3VudGVyX3QgKnBDbnRyKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N0YXRfcG9ydF9nZXRBbGwKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgYWxsIGNvdW50ZXJzIG9mIG9uZSBzcGVjaWZpZWQgcG9ydCBpbiB0aGUgc3BlY2lmaWVkIGRldmljZS4KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gcG9ydCBpZC4KKyAqIE91dHB1dDoKKyAqICAgICAgcFBvcnRfY250cnMgLSBidWZmZXIgcG9pbnRlciBvZiBjb3VudGVyIHZhbHVlLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgR2V0IGFsbCBNSUIgY291bnRlcnMgb2Ygb25lIHBvcnQuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19zdGF0X3BvcnRfZ2V0QWxsKHJ0a19wb3J0X3QgcG9ydCwgcnRrX3N0YXRfcG9ydF9jbnRyX3QgKnBQb3J0X2NudHJzKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N0YXRfbG9nZ2luZ19jb3VudGVyQ2ZnX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCB0aGUgdHlwZSBhbmQgbW9kZSBvZiBMb2dnaW5nIENvdW50ZXIKKyAqIElucHV0OgorICogICAgICBpZHggICAgIC0gVGhlIGluZGV4IG9mIExvZ2dpbmcgQ291bnRlci4gU2hvdWxkIGJlIGV2ZW4gbnVtYmVyIG9ubHkuKDAsMiw0LDYsOC4uLi4uMzApCisgKiAgICAgIG1vZGUgICAgLSAzMiBiaXRzIG9yIDY0IGJpdHMgbW9kZQorICogICAgICB0eXBlICAgIC0gUGFja2V0IGNvdW50ZXIgb3IgYnl0ZSBjb3VudGVyCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gT3V0IG9mIHJhbmdlLgorICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBTZXQgdGhlIHR5cGUgYW5kIG1vZGUgb2YgTG9nZ2luZyBDb3VudGVyLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfc3RhdF9sb2dnaW5nX2NvdW50ZXJDZmdfc2V0KHJ0a191aW50MzIgaWR4LCBydGtfbG9nZ2luZ19jb3VudGVyX21vZGVfdCBtb2RlLCBydGtfbG9nZ2luZ19jb3VudGVyX3R5cGVfdCB0eXBlKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N0YXRfbG9nZ2luZ19jb3VudGVyQ2ZnX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCB0aGUgdHlwZSBhbmQgbW9kZSBvZiBMb2dnaW5nIENvdW50ZXIKKyAqIElucHV0OgorICogICAgICBpZHggICAgIC0gVGhlIGluZGV4IG9mIExvZ2dpbmcgQ291bnRlci4gU2hvdWxkIGJlIGV2ZW4gbnVtYmVyIG9ubHkuKDAsMiw0LDYsOC4uLi4uMzApCisgKiBPdXRwdXQ6CisgKiAgICAgIHBNb2RlICAgLSAzMiBiaXRzIG9yIDY0IGJpdHMgbW9kZQorICogICAgICBwVHlwZSAgIC0gUGFja2V0IGNvdW50ZXIgb3IgYnl0ZSBjb3VudGVyCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gT3V0IG9mIHJhbmdlLgorICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgLSBOVUxMIFBvaW50ZXIKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIEdldCB0aGUgdHlwZSBhbmQgbW9kZSBvZiBMb2dnaW5nIENvdW50ZXIuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19zdGF0X2xvZ2dpbmdfY291bnRlckNmZ19nZXQocnRrX3VpbnQzMiBpZHgsIHJ0a19sb2dnaW5nX2NvdW50ZXJfbW9kZV90ICpwTW9kZSwgcnRrX2xvZ2dpbmdfY291bnRlcl90eXBlX3QgKnBUeXBlKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N0YXRfbG9nZ2luZ19jb3VudGVyX3Jlc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgUmVzZXQgTG9nZ2luZyBDb3VudGVyCisgKiBJbnB1dDoKKyAqICAgICAgaWR4ICAgICAtIFRoZSBpbmRleCBvZiBMb2dnaW5nIENvdW50ZXIuICgwfjMxKQorICogT3V0cHV0OgorICogICAgICBOb25lLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAtIE91dCBvZiByYW5nZS4KKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgUmVzZXQgTG9nZ2luZyBDb3VudGVyLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfc3RhdF9sb2dnaW5nX2NvdW50ZXJfcmVzZXQocnRrX3VpbnQzMiBpZHgpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3RhdF9sb2dnaW5nX2NvdW50ZXJfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IExvZ2dpbmcgQ291bnRlcgorICogSW5wdXQ6CisgKiAgICAgIGlkeCAgICAgLSBUaGUgaW5kZXggb2YgTG9nZ2luZyBDb3VudGVyLiAoMH4zMSkKKyAqIE91dHB1dDoKKyAqICAgICAgcENudCAgICAtIExvZ2dpbmcgY291bnRlciB2YWx1ZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAtIE91dCBvZiByYW5nZS4KKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgR2V0IExvZ2dpbmcgQ291bnRlci4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3N0YXRfbG9nZ2luZ19jb3VudGVyX2dldChydGtfdWludDMyIGlkeCwgcnRrX3VpbnQzMiAqcENudCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdGF0X2xlbmd0aE1vZGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IExlZ250aCBtb2RlLgorICogSW5wdXQ6CisgKiAgICAgIHR4TW9kZSAgICAgLSBUaGUgbGVuZ3RoIGNvdW50aW5nIG1vZGUKKyAqICAgICAgcnhNb2RlICAgICAtIFRoZSBsZW5ndGggY291bnRpbmcgbW9kZQorICogT3V0cHV0OgorICogICAgICBOb25lLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIE91dCBvZiByYW5nZS4KKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19zdGF0X2xlbmd0aE1vZGVfc2V0KHJ0a19zdGF0X2xlbmd0aE1vZGVfdCB0eE1vZGUsIHJ0a19zdGF0X2xlbmd0aE1vZGVfdCByeE1vZGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3RhdF9sZW5ndGhNb2RlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBMZWdudGggbW9kZS4KKyAqIElucHV0OgorICogICAgICBOb25lLgorICogT3V0cHV0OgorICogICAgICBwVHhNb2RlICAgICAgIC0gVGhlIGxlbmd0aCBjb3VudGluZyBtb2RlCisgKiAgICAgIHBSeE1vZGUgICAgICAgLSBUaGUgbGVuZ3RoIGNvdW50aW5nIG1vZGUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBPdXQgb2YgcmFuZ2UuCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19zdGF0X2xlbmd0aE1vZGVfZ2V0KHJ0a19zdGF0X2xlbmd0aE1vZGVfdCAqcFR4TW9kZSwgcnRrX3N0YXRfbGVuZ3RoTW9kZV90ICpwUnhNb2RlKTsKKworI2VuZGlmIC8qIF9fUlRLX0FQSV9TVEFUX0hfXyAqLworCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS9zdG9ybS5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvc3Rvcm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWE1MGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvc3Rvcm0uaApAQCAtMCwwICsxLDQyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiBQdXJwb3NlIDogUlRMODM2Ny9SVEw4MzY3QyBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkKKyAqCisgKiBGZWF0dXJlIDogVGhlIGZpbGUgaW5jbHVkZXMgU3Rvcm0gbW9kdWxlIGhpZ2gtbGF5ZXIgQVBJIGRlZmluYXRpb24KKyAqCisgKi8KKworI2lmbmRlZiBfX1JUS19BUElfU1RPUk1fSF9fCisjZGVmaW5lIF9fUlRLX0FQSV9TVE9STV9IX18KKworI2RlZmluZSBTVE9STV9VTlVDX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIFNUT1JNX1VOTUNfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgICAgMjkKKyNkZWZpbmUgU1RPUk1fTUNfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBTVE9STV9CQ19JTkRFWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMxCisKK3R5cGVkZWYgZW51bSBydGtfcmF0ZV9zdG9ybV9ncm91cF9lCit7CisgICAgU1RPUk1fR1JPVVBfVU5LTk9XTl9VTklDQVNUID0gMCwKKyAgICBTVE9STV9HUk9VUF9VTktOT1dOX01VTFRJQ0FTVCwKKyAgICBTVE9STV9HUk9VUF9NVUxUSUNBU1QsCisgICAgU1RPUk1fR1JPVVBfQlJPQURDQVNULAorICAgIFNUT1JNX0dST1VQX0VORAorfSBydGtfcmF0ZV9zdG9ybV9ncm91cF90OworCit0eXBlZGVmIGVudW0gcnRrX3N0b3JtX2J5cGFzc19lCit7CisgICAgQllQQVNTX0JSR19HUk9VUCA9IDAsCisgICAgQllQQVNTX0ZEX1BBVVNFLAorICAgIEJZUEFTU19TUF9NQ0FTVCwKKyAgICBCWVBBU1NfMVhfUEFFLAorICAgIEJZUEFTU19VTkRFRl9CUkdfMDQsCisgICAgQllQQVNTX1VOREVGX0JSR18wNSwKKyAgICBCWVBBU1NfVU5ERUZfQlJHXzA2LAorICAgIEJZUEFTU19VTkRFRl9CUkdfMDcsCisgICAgQllQQVNTX1BST1ZJREVSX0JSSURHRV9HUk9VUF9BRERSRVNTLAorICAgIEJZUEFTU19VTkRFRl9CUkdfMDksCisgICAgQllQQVNTX1VOREVGX0JSR18wQSwKKyAgICBCWVBBU1NfVU5ERUZfQlJHXzBCLAorICAgIEJZUEFTU19VTkRFRl9CUkdfMEMsCisgICAgQllQQVNTX1BST1ZJREVSX0JSSURHRV9HVlJQX0FERFJFU1MsCisgICAgQllQQVNTXzgwMjFBQiwKKyAgICBCWVBBU1NfVU5ERUZfQlJHXzBGLAorICAgIEJZUEFTU19CUkdfTU5HRU1FTlQsCisgICAgQllQQVNTX1VOREVGSU5FRF8xMSwKKyAgICBCWVBBU1NfVU5ERUZJTkVEXzEyLAorICAgIEJZUEFTU19VTkRFRklORURfMTMsCisgICAgQllQQVNTX1VOREVGSU5FRF8xNCwKKyAgICBCWVBBU1NfVU5ERUZJTkVEXzE1LAorICAgIEJZUEFTU19VTkRFRklORURfMTYsCisgICAgQllQQVNTX1VOREVGSU5FRF8xNywKKyAgICBCWVBBU1NfVU5ERUZJTkVEXzE4LAorICAgIEJZUEFTU19VTkRFRklORURfMTksCisgICAgQllQQVNTX1VOREVGSU5FRF8xQSwKKyAgICBCWVBBU1NfVU5ERUZJTkVEXzFCLAorICAgIEJZUEFTU19VTkRFRklORURfMUMsCisgICAgQllQQVNTX1VOREVGSU5FRF8xRCwKKyAgICBCWVBBU1NfVU5ERUZJTkVEXzFFLAorICAgIEJZUEFTU19VTkRFRklORURfMUYsCisgICAgQllQQVNTX0dNUlAsCisgICAgQllQQVNTX0dWUlAsCisgICAgQllQQVNTX1VOREVGX0dBUlBfMjIsCisgICAgQllQQVNTX1VOREVGX0dBUlBfMjMsCisgICAgQllQQVNTX1VOREVGX0dBUlBfMjQsCisgICAgQllQQVNTX1VOREVGX0dBUlBfMjUsCisgICAgQllQQVNTX1VOREVGX0dBUlBfMjYsCisgICAgQllQQVNTX1VOREVGX0dBUlBfMjcsCisgICAgQllQQVNTX1VOREVGX0dBUlBfMjgsCisgICAgQllQQVNTX1VOREVGX0dBUlBfMjksCisgICAgQllQQVNTX1VOREVGX0dBUlBfMkEsCisgICAgQllQQVNTX1VOREVGX0dBUlBfMkIsCisgICAgQllQQVNTX1VOREVGX0dBUlBfMkMsCisgICAgQllQQVNTX1VOREVGX0dBUlBfMkQsCisgICAgQllQQVNTX1VOREVGX0dBUlBfMkUsCisgICAgQllQQVNTX1VOREVGX0dBUlBfMkYsCisgICAgQllQQVNTX0lHTVAsCisgICAgQllQQVNTX0NEUCwKKyAgICBCWVBBU1NfQ1NTVFAsCisgICAgQllQQVNTX0xMRFAsCisgICAgQllQQVNTX0VORCwKK31ydGtfc3Rvcm1fYnlwYXNzX3Q7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19yYXRlX3N0b3JtQ29udHJvbE1ldGVySWR4X3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCB0aGUgc3Rvcm0gY29udHJvbCBtZXRlciBpbmRleC4KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgIC0gcG9ydCBpZAorICogICAgICBzdG9ybV90eXBlIC0gc3Rvcm0gZ3JvdXAgdHlwZQorICogICAgICBpbmRleCAgICAgICAtIHN0b3JtIGNvbnRyb2wgbWV0ZXIgaW5kZXguCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiAgICAgIFJUX0VSUl9QT1JUX0lEIC0gSW52YWxpZCBwb3J0IGlkCisgKiAgICAgIFJUX0VSUl9GSUxURVJfTUVURVJfSUQgIC0gSW52YWxpZCBtZXRlcgorICogTm90ZToKKyAqCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19yYXRlX3N0b3JtQ29udHJvbE1ldGVySWR4X3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19yYXRlX3N0b3JtX2dyb3VwX3Qgc3Rvcm1UeXBlLCBydGtfdWludDMyIGluZGV4KTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3JhdGVfc3Rvcm1Db250cm9sTWV0ZXJJZHhfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHRoZSBzdG9ybSBjb250cm9sIG1ldGVyIGluZGV4LgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgLSBwb3J0IGlkCisgKiAgICAgIHN0b3JtX3R5cGUgLSBzdG9ybSBncm91cCB0eXBlCisgKiBPdXRwdXQ6CisgKiAgICAgIHBJbmRleCAgICAgLSBzdG9ybSBjb250cm9sIG1ldGVyIGluZGV4LgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfUE9SVF9JRCAtIEludmFsaWQgcG9ydCBpZAorICogICAgICBSVF9FUlJfRklMVEVSX01FVEVSX0lEICAtIEludmFsaWQgbWV0ZXIKKyAqIE5vdGU6CisgKgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcmF0ZV9zdG9ybUNvbnRyb2xNZXRlcklkeF9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfcmF0ZV9zdG9ybV9ncm91cF90IHN0b3JtVHlwZSwgcnRrX3VpbnQzMiAqcEluZGV4KTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3JhdGVfc3Rvcm1Db250cm9sUG9ydEVuYWJsZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgZW5hYmxlIHN0YXR1cyBvZiBzdG9ybSBjb250cm9sIG9uIHNwZWNpZmllZCBwb3J0LgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgLSBwb3J0IGlkCisgKiAgICAgIHN0b3JtVHlwZSAgLSBzdG9ybSBncm91cCB0eXBlCisgKiAgICAgIGVuYWJsZSAgICAgLSBlbmFibGUgc3RhdHVzIG9mIHN0b3JtIGNvbnRyb2wKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfTk9UX0lOSVQgICAgICAgICAgLSBUaGUgbW9kdWxlIGlzIG5vdCBpbml0aWFsCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgICAtIGludmFsaWQgcG9ydCBpZAorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAgLSBpbnZhbGlkIGlucHV0IHBhcmFtZXRlcgorICogTm90ZToKKyAqCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19yYXRlX3N0b3JtQ29udHJvbFBvcnRFbmFibGVfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3JhdGVfc3Rvcm1fZ3JvdXBfdCBzdG9ybVR5cGUsIHJ0a19lbmFibGVfdCBlbmFibGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcmF0ZV9zdG9ybUNvbnRyb2xQb3J0RW5hYmxlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBlbmFibGUgc3RhdHVzIG9mIHN0b3JtIGNvbnRyb2wgb24gc3BlY2lmaWVkIHBvcnQuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAtIHBvcnQgaWQKKyAqICAgICAgc3Rvcm1UeXBlICAtIHN0b3JtIGdyb3VwIHR5cGUKKyAqIE91dHB1dDoKKyAqICAgICAgcEVuYWJsZSAgICAgLSBlbmFibGUgc3RhdHVzIG9mIHN0b3JtIGNvbnRyb2wKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX05PVF9JTklUICAgICAgICAgIC0gVGhlIG1vZHVsZSBpcyBub3QgaW5pdGlhbAorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAgLSBpbnZhbGlkIHBvcnQgaWQKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgIC0gaW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIKKyAqIE5vdGU6CisgKgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcmF0ZV9zdG9ybUNvbnRyb2xQb3J0RW5hYmxlX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19yYXRlX3N0b3JtX2dyb3VwX3Qgc3Rvcm1UeXBlLCBydGtfZW5hYmxlX3QgKnBFbmFibGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3Rvcm1fYnlwYXNzX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBieXBhc3Mgc3Rvcm0gZmlsdGVyIGNvbnRyb2wgY29uZmlndXJhdGlvbi4KKyAqIElucHV0OgorICogICAgICB0eXBlICAgIC0gQnlwYXNzIHN0b3JtIGZpbHRlciBjb250cm9sIHR5cGUuCisgKiAgICAgIGVuYWJsZSAgLSBCeXBhc3Mgc3RhdHVzLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiAgICAgIFJUX0VSUl9FTkFCTEUgICAgICAgLSBJbnZhbGlkIElGRyBwYXJhbWV0ZXIKKyAqIE5vdGU6CisgKgorICogICAgICBUaGlzIEFQSSBjYW4gc2V0IHBlci1wb3J0IGJ5cGFzcyBzdG9tciBmaWx0ZXIgY29udHJvbCBmcmFtZSB0eXBlIGluY2x1ZGluZyBSTUEgYW5kIGlnbXAuCisgKiAgICAgIFRoZSBieXBhc3MgZnJhbWUgdHlwZSBpcyBhcyBmb2xsb3dpbmc6CisgKiAgICAgIC0gQllQQVNTX0JSR19HUk9VUCwKKyAqICAgICAgLSBCWVBBU1NfRkRfUEFVU0UsCisgKiAgICAgIC0gQllQQVNTX1NQX01DQVNULAorICogICAgICAtIEJZUEFTU18xWF9QQUUsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0JSR18wNCwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZfQlJHXzA1LAorICogICAgICAtIEJZUEFTU19VTkRFRl9CUkdfMDYsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0JSR18wNywKKyAqICAgICAgLSBCWVBBU1NfUFJPVklERVJfQlJJREdFX0dST1VQX0FERFJFU1MsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0JSR18wOSwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZfQlJHXzBBLAorICogICAgICAtIEJZUEFTU19VTkRFRl9CUkdfMEIsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0JSR18wQywKKyAqICAgICAgLSBCWVBBU1NfUFJPVklERVJfQlJJREdFX0dWUlBfQUREUkVTUywKKyAqICAgICAgLSBCWVBBU1NfODAyMUFCLAorICogICAgICAtIEJZUEFTU19VTkRFRl9CUkdfMEYsCisgKiAgICAgIC0gQllQQVNTX0JSR19NTkdFTUVOVCwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZJTkVEXzExLAorICogICAgICAtIEJZUEFTU19VTkRFRklORURfMTIsCisgKiAgICAgIC0gQllQQVNTX1VOREVGSU5FRF8xMywKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZJTkVEXzE0LAorICogICAgICAtIEJZUEFTU19VTkRFRklORURfMTUsCisgKiAgICAgIC0gQllQQVNTX1VOREVGSU5FRF8xNiwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZJTkVEXzE3LAorICogICAgICAtIEJZUEFTU19VTkRFRklORURfMTgsCisgKiAgICAgIC0gQllQQVNTX1VOREVGSU5FRF8xOSwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZJTkVEXzFBLAorICogICAgICAtIEJZUEFTU19VTkRFRklORURfMUIsCisgKiAgICAgIC0gQllQQVNTX1VOREVGSU5FRF8xQywKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZJTkVEXzFELAorICogICAgICAtIEJZUEFTU19VTkRFRklORURfMUUsCisgKiAgICAgIC0gQllQQVNTX1VOREVGSU5FRF8xRiwKKyAqICAgICAgLSBCWVBBU1NfR01SUCwKKyAqICAgICAgLSBCWVBBU1NfR1ZSUCwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZfR0FSUF8yMiwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZfR0FSUF8yMywKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZfR0FSUF8yNCwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZfR0FSUF8yNSwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZfR0FSUF8yNiwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZfR0FSUF8yNywKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZfR0FSUF8yOCwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZfR0FSUF8yOSwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZfR0FSUF8yQSwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZfR0FSUF8yQiwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZfR0FSUF8yQywKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZfR0FSUF8yRCwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZfR0FSUF8yRSwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZfR0FSUF8yRiwKKyAqICAgICAgLSBCWVBBU1NfSUdNUC4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3N0b3JtX2J5cGFzc19zZXQocnRrX3N0b3JtX2J5cGFzc190IHR5cGUsIHJ0a19lbmFibGVfdCBlbmFibGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3Rvcm1fYnlwYXNzX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBieXBhc3Mgc3Rvcm0gZmlsdGVyIGNvbnRyb2wgY29uZmlndXJhdGlvbi4KKyAqIElucHV0OgorICogICAgICB0eXBlIC0gQnlwYXNzIHN0b3JtIGZpbHRlciBjb250cm9sIHR5cGUuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBFbmFibGUgLSBCeXBhc3Mgc3RhdHVzLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgY2FuIGdldCBwZXItcG9ydCBieXBhc3Mgc3RvbXIgZmlsdGVyIGNvbnRyb2wgZnJhbWUgdHlwZSBpbmNsdWRpbmcgUk1BIGFuZCBpZ21wLgorICogICAgICBUaGUgYnlwYXNzIGZyYW1lIHR5cGUgaXMgYXMgZm9sbG93aW5nOgorICogICAgICAtIEJZUEFTU19CUkdfR1JPVVAsCisgKiAgICAgIC0gQllQQVNTX0ZEX1BBVVNFLAorICogICAgICAtIEJZUEFTU19TUF9NQ0FTVCwKKyAqICAgICAgLSBCWVBBU1NfMVhfUEFFLAorICogICAgICAtIEJZUEFTU19VTkRFRl9CUkdfMDQsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0JSR18wNSwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZfQlJHXzA2LAorICogICAgICAtIEJZUEFTU19VTkRFRl9CUkdfMDcsCisgKiAgICAgIC0gQllQQVNTX1BST1ZJREVSX0JSSURHRV9HUk9VUF9BRERSRVNTLAorICogICAgICAtIEJZUEFTU19VTkRFRl9CUkdfMDksCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0JSR18wQSwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZfQlJHXzBCLAorICogICAgICAtIEJZUEFTU19VTkRFRl9CUkdfMEMsCisgKiAgICAgIC0gQllQQVNTX1BST1ZJREVSX0JSSURHRV9HVlJQX0FERFJFU1MsCisgKiAgICAgIC0gQllQQVNTXzgwMjFBQiwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZfQlJHXzBGLAorICogICAgICAtIEJZUEFTU19CUkdfTU5HRU1FTlQsCisgKiAgICAgIC0gQllQQVNTX1VOREVGSU5FRF8xMSwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZJTkVEXzEyLAorICogICAgICAtIEJZUEFTU19VTkRFRklORURfMTMsCisgKiAgICAgIC0gQllQQVNTX1VOREVGSU5FRF8xNCwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZJTkVEXzE1LAorICogICAgICAtIEJZUEFTU19VTkRFRklORURfMTYsCisgKiAgICAgIC0gQllQQVNTX1VOREVGSU5FRF8xNywKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZJTkVEXzE4LAorICogICAgICAtIEJZUEFTU19VTkRFRklORURfMTksCisgKiAgICAgIC0gQllQQVNTX1VOREVGSU5FRF8xQSwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZJTkVEXzFCLAorICogICAgICAtIEJZUEFTU19VTkRFRklORURfMUMsCisgKiAgICAgIC0gQllQQVNTX1VOREVGSU5FRF8xRCwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZJTkVEXzFFLAorICogICAgICAtIEJZUEFTU19VTkRFRklORURfMUYsCisgKiAgICAgIC0gQllQQVNTX0dNUlAsCisgKiAgICAgIC0gQllQQVNTX0dWUlAsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0dBUlBfMjIsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0dBUlBfMjMsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0dBUlBfMjQsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0dBUlBfMjUsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0dBUlBfMjYsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0dBUlBfMjcsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0dBUlBfMjgsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0dBUlBfMjksCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0dBUlBfMkEsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0dBUlBfMkIsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0dBUlBfMkMsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0dBUlBfMkQsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0dBUlBfMkUsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0dBUlBfMkYsCisgKiAgICAgIC0gQllQQVNTX0lHTVAuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19zdG9ybV9ieXBhc3NfZ2V0KHJ0a19zdG9ybV9ieXBhc3NfdCB0eXBlLCBydGtfZW5hYmxlX3QgKnBFbmFibGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcmF0ZV9zdG9ybUNvbnRyb2xFeHRQb3J0bWFza19zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgZXh0ZXJuc2lvbiBzdG9ybSBjb250cm9sIHBvcnQgbWFzaworICogSW5wdXQ6CisgKiAgICAgIHBQb3J0bWFzayAgLSBwb3J0IG1hc2sKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfTk9UX0lOSVQgICAgICAgICAgLSBUaGUgbW9kdWxlIGlzIG5vdCBpbml0aWFsCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICAtIGludmFsaWQgaW5wdXQgcGFyYW1ldGVyCisgKiBOb3RlOgorICoKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3JhdGVfc3Rvcm1Db250cm9sRXh0UG9ydG1hc2tfc2V0KHJ0a19wb3J0bWFza190ICpwUG9ydG1hc2spOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcmF0ZV9zdG9ybUNvbnRyb2xFeHRQb3J0bWFza19nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgZXh0ZXJuc2lvbiBzdG9ybSBjb250cm9sIHBvcnQgbWFzaworICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcFBvcnRtYXNrICAtIHBvcnQgbWFzaworICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfTk9UX0lOSVQgICAgICAgICAgLSBUaGUgbW9kdWxlIGlzIG5vdCBpbml0aWFsCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICAtIGludmFsaWQgaW5wdXQgcGFyYW1ldGVyCisgKiBOb3RlOgorICoKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3JhdGVfc3Rvcm1Db250cm9sRXh0UG9ydG1hc2tfZ2V0KHJ0a19wb3J0bWFza190ICpwUG9ydG1hc2spOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcmF0ZV9zdG9ybUNvbnRyb2xFeHRFbmFibGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IGV4dGVybnNpb24gc3Rvcm0gY29udHJvbCBzdGF0ZQorICogSW5wdXQ6CisgKiAgICAgIHN0b3JtVHlwZSAgIC0gc3Rvcm0gZ3JvdXAgdHlwZQorICogICAgICBlbmFibGUgICAgICAtIGV4dGVybnNpb24gc3Rvcm0gY29udHJvbCBzdGF0ZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiAgICAgIFJUX0VSUl9OT1RfSU5JVCAgICAgICAgICAtIFRoZSBtb2R1bGUgaXMgbm90IGluaXRpYWwKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgIC0gaW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIKKyAqIE5vdGU6CisgKgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcmF0ZV9zdG9ybUNvbnRyb2xFeHRFbmFibGVfc2V0KHJ0a19yYXRlX3N0b3JtX2dyb3VwX3Qgc3Rvcm1UeXBlLCBydGtfZW5hYmxlX3QgZW5hYmxlKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3JhdGVfc3Rvcm1Db250cm9sRXh0RW5hYmxlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBleHRlcm5zaW9uIHN0b3JtIGNvbnRyb2wgc3RhdGUKKyAqIElucHV0OgorICogICAgICBzdG9ybVR5cGUgICAtIHN0b3JtIGdyb3VwIHR5cGUKKyAqIE91dHB1dDoKKyAqICAgICAgcEVuYWJsZSAgICAgLSBleHRlcm5zaW9uIHN0b3JtIGNvbnRyb2wgc3RhdGUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX05PVF9JTklUICAgICAgICAgIC0gVGhlIG1vZHVsZSBpcyBub3QgaW5pdGlhbAorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAgLSBpbnZhbGlkIGlucHV0IHBhcmFtZXRlcgorICogTm90ZToKKyAqCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19yYXRlX3N0b3JtQ29udHJvbEV4dEVuYWJsZV9nZXQocnRrX3JhdGVfc3Rvcm1fZ3JvdXBfdCBzdG9ybVR5cGUsIHJ0a19lbmFibGVfdCAqcEVuYWJsZSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19yYXRlX3N0b3JtQ29udHJvbEV4dE1ldGVySWR4X3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBleHRlcm5zaW9uIHN0b3JtIGNvbnRyb2wgbWV0ZXIgaW5kZXgKKyAqIElucHV0OgorICogICAgICBzdG9ybVR5cGUgICAtIHN0b3JtIGdyb3VwIHR5cGUKKyAqICAgICAgaW5kZXggICAgICAgLSBleHRlcm5zaW9uIHN0b3JtIGNvbnRyb2wgc3RhdGUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfTk9UX0lOSVQgICAgICAgICAgLSBUaGUgbW9kdWxlIGlzIG5vdCBpbml0aWFsCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICAtIGludmFsaWQgaW5wdXQgcGFyYW1ldGVyCisgKiBOb3RlOgorICoKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3JhdGVfc3Rvcm1Db250cm9sRXh0TWV0ZXJJZHhfc2V0KHJ0a19yYXRlX3N0b3JtX2dyb3VwX3Qgc3Rvcm1UeXBlLCBydGtfdWludDMyIGluZGV4KTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3JhdGVfc3Rvcm1Db250cm9sRXh0TWV0ZXJJZHhfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGV4dGVybnNpb24gc3Rvcm0gY29udHJvbCBtZXRlciBpbmRleAorICogSW5wdXQ6CisgKiAgICAgIHN0b3JtVHlwZSAgIC0gc3Rvcm0gZ3JvdXAgdHlwZQorICogICAgICBwSW5kZXggICAgICAtIGV4dGVybnNpb24gc3Rvcm0gY29udHJvbCBzdGF0ZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiAgICAgIFJUX0VSUl9OT1RfSU5JVCAgICAgICAgICAtIFRoZSBtb2R1bGUgaXMgbm90IGluaXRpYWwKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgIC0gaW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIKKyAqIE5vdGU6CisgKgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfcmF0ZV9zdG9ybUNvbnRyb2xFeHRNZXRlcklkeF9nZXQocnRrX3JhdGVfc3Rvcm1fZ3JvdXBfdCBzdG9ybVR5cGUsIHJ0a191aW50MzIgKnBJbmRleCk7CisKKworCisjZW5kaWYgLyogX19SVEtfQVBJX1NUT1JNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvc3ZsYW4uaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3N2bGFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNkYjAyZgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3N2bGFuLmgKQEAgLTAsMCArMSw4OTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogUHVycG9zZSA6IFJUTDgzNjcvUlRMODM2N0Mgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJCisgKgorICogRmVhdHVyZSA6IFRoZSBmaWxlIGluY2x1ZGVzIFNWTEFOIG1vZHVsZSBoaWdoLWxheWVyIEFQSSBkZWZpbmF0aW9uCisgKgorICovCisKKyNpZm5kZWYgX19SVEtfQVBJX1NWTEFOX0hfXworI2RlZmluZSBfX1JUS19BUElfU1ZMQU5fSF9fCisKK3R5cGVkZWYgcnRrX3VpbnQzMiBydGtfc3ZsYW5faW5kZXhfdDsKKwordHlwZWRlZiBzdHJ1Y3QgcnRrX3N2bGFuX21lbWJlckNmZ19zeworICAgIHJ0a191aW50MzIgc3ZpZDsKKyAgICBydGtfcG9ydG1hc2tfdCBtZW1iZXJwb3J0OworICAgIHJ0a19wb3J0bWFza190IHVudGFncG9ydDsKKyAgICBydGtfdWludDMyIGZpZGVuOworICAgIHJ0a191aW50MzIgZmlkOworICAgIHJ0a191aW50MzIgcHJpb3JpdHk7CisgICAgcnRrX3VpbnQzMiBlZmlkZW47CisgICAgcnRrX3VpbnQzMiBlZmlkOworfXJ0a19zdmxhbl9tZW1iZXJDZmdfdDsKKwordHlwZWRlZiBlbnVtIHJ0a19zdmxhbl9wcmlfcmVmX2UKK3sKKyAgICBSRUZfSU5URVJOQUxfUFJJID0gMCwKKyAgICBSRUZfQ1RBR19QUkksCisgICAgUkVGX1NWTEFOX1BSSSwKKyAgICBSRUZfUEJfUFJJLAorICAgIFJFRl9QUklfRU5ECit9IHJ0a19zdmxhbl9wcmlfcmVmX3Q7CisKKwordHlwZWRlZiBydGtfdWludDMyIHJ0a19zdmxhbl90cGlkX3Q7CisKK3R5cGVkZWYgZW51bSBydGtfc3ZsYW5fdW50YWdfYWN0aW9uX2UKK3sKKyAgICBVTlRBR19EUk9QID0gMCwKKyAgICBVTlRBR19UUkFQLAorICAgIFVOVEFHX0FTU0lHTiwKKyAgICBVTlRBR19FTkQKK30gcnRrX3N2bGFuX3VudGFnX2FjdGlvbl90OworCit0eXBlZGVmIGVudW0gcnRrX3N2bGFuX3VubWF0Y2hfYWN0aW9uX2UKK3sKKyAgICBVTk1BVENIX0RST1AgPSAwLAorICAgIFVOTUFUQ0hfVFJBUCwKKyAgICBVTk1BVENIX0FTU0lHTiwKKyAgICBVTk1BVENIX0VORAorfSBydGtfc3ZsYW5fdW5tYXRjaF9hY3Rpb25fdDsKKwordHlwZWRlZiBlbnVtIHJ0a19zdmxhbl91bmFzc2lnbl9hY3Rpb25fZQoreworICAgIFVOQVNTSUdOX1BCU1ZJRCA9IDAsCisgICAgVU5BU1NJR05fVFJBUCwKKyAgICBVTkFTU0lHTl9FTkQKK30gcnRrX3N2bGFuX3VuYXNzaWduX2FjdGlvbl90OworCisKK3R5cGVkZWYgZW51bSBydGtfc3ZsYW5fbG9va3VwVHlwZV9lCit7CisgICAgU1ZMQU5fTE9PS1VQX1M2NE1CUkNHRiAgPSAwLAorICAgIFNWTEFOX0xPT0tVUF9DNEtWTEFOLAorICAgIFNWTEFOX0xPT0tVUF9FTkQsCisKK30gcnRrX3N2bGFuX2xvb2t1cFR5cGVfdDsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N2bGFuX2luaXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBJbml0aWFsaXplIFNWTEFOIENvbmZpZ3VyYXRpb24KKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIEV0aGVyIHR5cGUgb2YgUy10YWcgaW4gODAyLjFhZCBpcyAweDg4YTggYW5kIHRoZXJlIGFyZSBleGlzdGVkIGV0aGVyIHR5cGUgMHg5MTAwIGFuZCAweDkyMDAgZm9yIFEtaW4tUSBTTEFOIGRlc2lnbi4KKyAqICAgICAgVXNlciBjYW4gc2V0IG1hdGhjZWQgZXRoZXIgdHlwZSBhcyBzZXJ2aWNlIHByb3ZpZGVyIHN1cHBvcnRlZCBwcm90b2NvbC4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3N2bGFuX2luaXQodm9pZCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdmxhbl9zZXJ2aWNlUG9ydF9hZGQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBBZGQgb25lIHNlcnZpY2UgcG9ydCBpbiB0aGUgc3BlY2lmaWVkIGRldmljZQorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBQb3J0IGlkLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgaXMgc2V0dGluZyB3aGljaCBwb3J0IGlzIGNvbm5lY3RlZCB0byBwcm92aWRlciBzd2l0Y2guIEFsbCBmcmFtZXMgcmVjZWl2aW5nIGZyb20gdGhpcyBwb3J0IG11c3QKKyAqICAgICAgY29udGFpbiBhY2NlcHQgU1ZJRCBpbiBTLXRhZyBmaWVsZC4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3N2bGFuX3NlcnZpY2VQb3J0X2FkZChydGtfcG9ydF90IHBvcnQpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3ZsYW5fc2VydmljZVBvcnRfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHNlcnZpY2UgcG9ydHMgaW4gdGhlIHNwZWNpZmllZCBkZXZpY2UuCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwU3ZsYW5fcG9ydG1hc2sgLSBwb2ludGVyIGJ1ZmZlciBvZiBzdmxhbiBwb3J0cy4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGlzIHNldHRpbmcgd2hpY2ggcG9ydCBpcyBjb25uZWN0ZWQgdG8gcHJvdmlkZXIgc3dpdGNoLiBBbGwgZnJhbWVzIHJlY2VpdmluZyBmcm9tIHRoaXMgcG9ydCBtdXN0CisgKiAgICAgIGNvbnRhaW4gYWNjZXB0IFNWSUQgaW4gUy10YWcgZmllbGQuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19zdmxhbl9zZXJ2aWNlUG9ydF9nZXQocnRrX3BvcnRtYXNrX3QgKnBTdmxhbl9wb3J0bWFzayk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdmxhbl9zZXJ2aWNlUG9ydF9kZWwKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBEZWxldGUgb25lIHNlcnZpY2UgcG9ydCBpbiB0aGUgc3BlY2lmaWVkIGRldmljZQorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBQb3J0IGlkLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgaXMgcmVtb3ZpbmcgU1ZMQU4gc2VydmljZSBwb3J0IGluIHRoZSBzcGVjaWZpZWQgZGV2aWNlLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfc3ZsYW5fc2VydmljZVBvcnRfZGVsKHJ0a19wb3J0X3QgcG9ydCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdmxhbl90cGlkRW50cnlfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQ29uZmlndXJlIGFjY2VwdGVkIFMtVkxBTiBldGhlciB0eXBlLgorICogSW5wdXQ6CisgKiAgICAgIHN2bGFuX3RhZ19pZCAtIEV0aGVyIHR5cGUgb2YgUy10YWcgZnJhbWUgcGFyc2luZyBpbiB1cGxpbmsgcG9ydHMuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVyLgorICogTm90ZToKKyAqICAgICAgRXRoZXIgdHlwZSBvZiBTLXRhZyBpbiA4MDIuMWFkIGlzIDB4ODhhOCBhbmQgdGhlcmUgYXJlIGV4aXN0ZWQgZXRoZXIgdHlwZSAweDkxMDAgYW5kIDB4OTIwMCBmb3IgUS1pbi1RIFNMQU4gZGVzaWduLgorICogICAgICBVc2VyIGNhbiBzZXQgbWF0aGNlZCBldGhlciB0eXBlIGFzIHNlcnZpY2UgcHJvdmlkZXIgc3VwcG9ydGVkIHByb3RvY29sLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfc3ZsYW5fdHBpZEVudHJ5X3NldChydGtfdWludDMyIHN2bGFuX3RhZ19pZCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdmxhbl90cGlkRW50cnlfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGFjY2VwdGVkIFMtVkxBTiBldGhlciB0eXBlIHNldHRpbmcuCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwU3ZsYW5fdGFnX2lkIC0gIEV0aGVyIHR5cGUgb2YgUy10YWcgZnJhbWUgcGFyc2luZyBpbiB1cGxpbmsgcG9ydHMuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBpcyBzZXR0aW5nIHdoaWNoIHBvcnQgaXMgY29ubmVjdGVkIHRvIHByb3ZpZGVyIHN3aXRjaC4gQWxsIGZyYW1lcyByZWNlaXZpbmcgZnJvbSB0aGlzIHBvcnQgbXVzdAorICogICAgICBjb250YWluIGFjY2VwdCBTVklEIGluIFMtdGFnIGZpZWxkLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfc3ZsYW5fdHBpZEVudHJ5X2dldChydGtfdWludDMyICpwU3ZsYW5fdGFnX2lkKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N2bGFuX3ByaW9yaXR5UmVmX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBTLVZMQU4gdXBzdHJlYW0gcHJpb3JpdHkgcmVmZXJlbmNlIHNldHRpbmcuCisgKiBJbnB1dDoKKyAqICAgICAgcmVmIC0gcmVmZXJlbmNlIHNlbGVjdGlvbiBwYXJhbWV0ZXIuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVyLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gc2V0IHRoZSB1cHN0cmVhbSBTVkxBTiB0YWcgcHJpb3JpdHkgcmVmZXJlbmNlIHNvdXJjZS4gVGhlIHJlbGF0ZWQgcHJpb3JpdHkKKyAqICAgICAgc291cmNlcyBhcmUgYXMgZm9sbG93aW5nOgorICogICAgICAtIFJFRl9JTlRFUk5BTF9QUkksCisgKiAgICAgIC0gUkVGX0NUQUdfUFJJLAorICogICAgICAtIFJFRl9TVkxBTl9QUkksCisgKiAgICAgIC0gUkVGX1BCX1BSSS4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3N2bGFuX3ByaW9yaXR5UmVmX3NldChydGtfc3ZsYW5fcHJpX3JlZl90IHJlZik7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdmxhbl9wcmlvcml0eVJlZl9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgUy1WTEFOIHVwc3RyZWFtIHByaW9yaXR5IHJlZmVyZW5jZSBzZXR0aW5nLgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcFJlZiAtIHJlZmVyZW5jZSBzZWxlY3Rpb24gcGFyYW1ldGVyLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IHRoZSB1cHN0cmVhbSBTVkxBTiB0YWcgcHJpb3JpdHkgcmVmZXJlbmNlIHNvdXJjZS4gVGhlIHJlbGF0ZWQgcHJpb3JpdHkKKyAqICAgICAgc291cmNlcyBhcmUgYXMgZm9sbG93aW5nOgorICogICAgICAtIFJFRl9JTlRFUk5BTF9QUkksCisgKiAgICAgIC0gUkVGX0NUQUdfUFJJLAorICogICAgICAtIFJFRl9TVkxBTl9QUkksCisgKiAgICAgIC0gUkVGX1BCX1BSSQorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfc3ZsYW5fcHJpb3JpdHlSZWZfZ2V0KHJ0a19zdmxhbl9wcmlfcmVmX3QgKnBSZWYpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3ZsYW5fbWVtYmVyUG9ydEVudHJ5X3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIENvbmZpZ3VyZSBzeXN0ZW0gU1ZMQU4gbWVtYmVyIGNvbnRlbnQKKyAqIElucHV0OgorICogICAgICBzdmlkIC0gU1ZMQU4gaWQKKyAqICAgICAgcHN2bGFuX2NmZyAtIFNWTEFOIG1lbWJlciBjb25maWd1cmF0aW9uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlci4KKyAqICAgICAgUlRfRVJSX1NWTEFOX1ZJRCAgICAgICAgLSBJbnZhbGlkIFNWTEFOIFZJRCBwYXJhbWV0ZXIuCisgKiAgICAgIFJUX0VSUl9QT1JUX01BU0sgICAgICAgIC0gSW52YWxpZCBwb3J0bWFzay4KKyAqICAgICAgUlRfRVJSX1NWTEFOX1RBQkxFX0ZVTEwgLSBTVkxBTiBjb25maWd1cmF0aW9uIGlzIGZ1bGwuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBzZXQgc3lzdGVtIDY0IGFjY2VwdGVkIHMtdGFnIGZyYW1lIGZvcm1hdC4gT25seSA2NCBTVklEIFMtdGFnIGZyYW1lIHdpbGwgYmUgYWNjcGV0ZWQKKyAqICAgICAgdG8gcmVjZWl2aW5nIGZyb20gdXBsaW5rIHBvcnRzLiBPdGhlciBTVklEIFMtdGFnIGZyYW1lIG9yIFMtdW50YWdnZWQgZnJhbWUgd2lsbCBiZSBkcm9wZWQgYnkgZGVmYXVsdCBzZXR1cC4KKyAqICAgICAgLSBydGtfc3ZsYW5fbWVtYmVyQ2ZnX3QtPnN2aWQgaXMgU1ZJRCBvZiBTVkxBTiBtZW1iZXIgY29uZmlndXJhdGlvbi4KKyAqICAgICAgLSBydGtfc3ZsYW5fbWVtYmVyQ2ZnX3QtPm1lbWJlcnBvcnQgaXMgbWVtYmVyIHBvcnQgbWFzayBvZiBTVkxBTiBtZW1iZXIgY29uZmlndXJhdGlvbi4KKyAqICAgICAgLSBydGtfc3ZsYW5fbWVtYmVyQ2ZnX3QtPmZpZCBpcyBmaWx0ZXJpbmcgZGF0YWJhc2Ugb2YgU1ZMQU4gbWVtYmVyIGNvbmZpZ3VyYXRpb24uCisgKiAgICAgIC0gcnRrX3N2bGFuX21lbWJlckNmZ190LT5wcmlvcml0eSBpcyBwcmlvcml0eSBvZiBTVkxBTiBtZW1iZXIgY29uZmlndXJhdGlvbi4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3N2bGFuX21lbWJlclBvcnRFbnRyeV9zZXQocnRrX3VpbnQzMiBzdmlkX2lkeCwgcnRrX3N2bGFuX21lbWJlckNmZ190ICpwc3ZsYW5fY2ZnKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N2bGFuX21lbWJlclBvcnRFbnRyeV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgU1ZMQU4gbWVtYmVyIENvbmZpZ3VyZS4KKyAqIElucHV0OgorICogICAgICBzdmlkIC0gU1ZMQU4gaWQKKyAqIE91dHB1dDoKKyAqICAgICAgcFN2bGFuX2NmZyAtIFNWTEFOIG1lbWJlciBjb25maWd1cmF0aW9uCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9TVkxBTl9FTlRSWV9OT1RfRk9VTkQgICAgLSBzcGVjaWZpZWQgc3ZsYW4gZW50cnkgbm90IGZvdW5kLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IHN5c3RlbSA2NCBhY2NlcHRlZCBzLXRhZyBmcmFtZSBmb3JtYXQuIE9ubHkgNjQgU1ZJRCBTLXRhZyBmcmFtZSB3aWxsIGJlIGFjY3BldGVkCisgKiAgICAgIHRvIHJlY2VpdmluZyBmcm9tIHVwbGluayBwb3J0cy4gT3RoZXIgU1ZJRCBTLXRhZyBmcmFtZSBvciBTLXVudGFnZ2VkIGZyYW1lIHdpbGwgYmUgZHJvcGVkLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfc3ZsYW5fbWVtYmVyUG9ydEVudHJ5X2dldChydGtfdWludDMyIHN2aWRfaWR4LCBydGtfc3ZsYW5fbWVtYmVyQ2ZnX3QgKnBTdmxhbl9jZmcpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3ZsYW5fbWVtYmVyUG9ydEVudHJ5X2Fkdl9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBDb25maWd1cmUgc3lzdGVtIFNWTEFOIG1lbWJlciBieSBpbmRleAorICogSW5wdXQ6CisgKiAgICAgIGlkeCAgICAgICAgIC0gSW5kZXggKDAgfiA2MykKKyAqICAgICAgcHN2bGFuX2NmZyAgLSBTVkxBTiBtZW1iZXIgY29uZmlndXJhdGlvbgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIuCisgKiAgICAgIFJUX0VSUl9TVkxBTl9WSUQgICAgICAgIC0gSW52YWxpZCBTVkxBTiBWSUQgcGFyYW1ldGVyLgorICogICAgICBSVF9FUlJfUE9SVF9NQVNLICAgICAgICAtIEludmFsaWQgcG9ydG1hc2suCisgKiAgICAgIFJUX0VSUl9TVkxBTl9UQUJMRV9GVUxMIC0gU1ZMQU4gY29uZmlndXJhdGlvbiBpcyBmdWxsLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gc2V0IHN5c3RlbSA2NCBhY2NlcHRlZCBzLXRhZyBmcmFtZSBmb3JtYXQgYnkgaW5kZXguCisgKiAgICAgIC0gcnRrX3N2bGFuX21lbWJlckNmZ190LT5zdmlkIGlzIFNWSUQgb2YgU1ZMQU4gbWVtYmVyIGNvbmZpZ3VyYXRpb24uCisgKiAgICAgIC0gcnRrX3N2bGFuX21lbWJlckNmZ190LT5tZW1iZXJwb3J0IGlzIG1lbWJlciBwb3J0IG1hc2sgb2YgU1ZMQU4gbWVtYmVyIGNvbmZpZ3VyYXRpb24uCisgKiAgICAgIC0gcnRrX3N2bGFuX21lbWJlckNmZ190LT5maWQgaXMgZmlsdGVyaW5nIGRhdGFiYXNlIG9mIFNWTEFOIG1lbWJlciBjb25maWd1cmF0aW9uLgorICogICAgICAtIHJ0a19zdmxhbl9tZW1iZXJDZmdfdC0+cHJpb3JpdHkgaXMgcHJpb3JpdHkgb2YgU1ZMQU4gbWVtYmVyIGNvbmZpZ3VyYXRpb24uCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19zdmxhbl9tZW1iZXJQb3J0RW50cnlfYWR2X3NldChydGtfdWludDMyIGlkeCwgcnRrX3N2bGFuX21lbWJlckNmZ190ICpwU3ZsYW5fY2ZnKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N2bGFuX21lbWJlclBvcnRFbnRyeV9hZHZfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFNWTEFOIG1lbWJlciBDb25maWd1cmUgYnkgaW5kZXguCisgKiBJbnB1dDoKKyAqICAgICAgaWR4ICAgICAgICAgLSBJbmRleCAoMCB+IDYzKQorICogT3V0cHV0OgorICogICAgICBwU3ZsYW5fY2ZnICAtIFNWTEFOIG1lbWJlciBjb25maWd1cmF0aW9uCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9TVkxBTl9FTlRSWV9OT1RfRk9VTkQgICAgLSBzcGVjaWZpZWQgc3ZsYW4gZW50cnkgbm90IGZvdW5kLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IHN5c3RlbSA2NCBhY2NlcHRlZCBzLXRhZyBmcmFtZSBmb3JtYXQuIE9ubHkgNjQgU1ZJRCBTLXRhZyBmcmFtZSB3aWxsIGJlIGFjY3BldGVkCisgKiAgICAgIHRvIHJlY2VpdmluZyBmcm9tIHVwbGluayBwb3J0cy4gT3RoZXIgU1ZJRCBTLXRhZyBmcmFtZSBvciBTLXVudGFnZ2VkIGZyYW1lIHdpbGwgYmUgZHJvcGVkLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfc3ZsYW5fbWVtYmVyUG9ydEVudHJ5X2Fkdl9nZXQocnRrX3VpbnQzMiBpZHgsIHJ0a19zdmxhbl9tZW1iZXJDZmdfdCAqcFN2bGFuX2NmZyk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdmxhbl9kZWZhdWx0U3ZsYW5fc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQ29uZmlndXJlIGRlZmF1bHQgZWdyZXNzIFNWTEFOLgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBTb3VyY2UgcG9ydAorICogICAgICBzdmlkIC0gU1ZMQU4gaWQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIuCisgKiAgICAgIFJUX0VSUl9TVkxBTl9WSUQgICAgICAgICAgICAgICAgLSBJbnZhbGlkIFNWTEFOIFZJRCBwYXJhbWV0ZXIuCisgKiAgICAgIFJUX0VSUl9TVkxBTl9FTlRSWV9OT1RfRk9VTkQgICAgLSBzcGVjaWZpZWQgc3ZsYW4gZW50cnkgbm90IGZvdW5kLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gc2V0IHBvcnQgbiBTLXRhZyBmb3JtYXQgaW5kZXggd2hpbGUgcmVjZWl2aW5nIGZyYW1lIGZyb20gcG9ydCBuCisgKiAgICAgIGlzIHRyYW5zbWl0IHRocm91Z2ggdXBsaW5rIHBvcnQgd2l0aCBzLXRhZyBmaWVsZAorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfc3ZsYW5fZGVmYXVsdFN2bGFuX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a192bGFuX3Qgc3ZpZCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdmxhbl9kZWZhdWx0U3ZsYW5fZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHRoZSBjb25maWd1cmUgZGVmYXVsdCBlZ3Jlc3MgU1ZMQU4uCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFNvdXJjZSBwb3J0CisgKiBPdXRwdXQ6CisgKiAgICAgIHBTdmlkIC0gU1ZMQU4gVklECisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBnZXQgcG9ydCBuIFMtdGFnIGZvcm1hdCBpbmRleCB3aGlsZSByZWNlaXZpbmcgZnJhbWUgZnJvbSBwb3J0IG4KKyAqICAgICAgaXMgdHJhbnNtaXQgdGhyb3VnaCB1cGxpbmsgcG9ydCB3aXRoIHMtdGFnIGZpZWxkCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19zdmxhbl9kZWZhdWx0U3ZsYW5fZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3ZsYW5fdCAqcFN2aWQpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3ZsYW5fYzJzX2FkZAorICogRGVzY3JpcHRpb246CisgKiAgICAgIENvbmZpZ3VyZSBTVkxBTiBDMlMgdGFibGUKKyAqIElucHV0OgorICogICAgICB2aWQgLSBWTEFOIElECisgKiAgICAgIHNyY19wb3J0IC0gSW5ncmVzcyBQb3J0CisgKiAgICAgIHN2aWQgLSBTVkxBTiBWSUQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IElELgorICogICAgICBSVF9FUlJfU1ZMQU5fVklEICAgIC0gSW52YWxpZCBTVkxBTiBWSUQgcGFyYW1ldGVyLgorICogICAgICBSVF9FUlJfVkxBTl9WSUQgICAgIC0gSW52YWxpZCBWSUQgcGFyYW1ldGVyLgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gaW5wdXQgb3V0IG9mIHJhbmdlLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gc2V0IHN5c3RlbSBDMlMgY29uZmlndXJhdGlvbi4gQVNJQyB3aWxsIGNoZWNrIHVwc3RyZWFtJ3MgVklEIGFuZCBhc3NpZ24gcmVsYXRlZAorICogICAgICBTVklEIHRvIG1hdGhlZCBwYWNrZXQuIFRoZXJlIGFyZSAxMjggU1ZMQU4gQzJTIGNvbmZpZ3VyYXRpb25zLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfc3ZsYW5fYzJzX2FkZChydGtfdmxhbl90IHZpZCwgcnRrX3BvcnRfdCBzcmNfcG9ydCwgcnRrX3ZsYW5fdCBzdmlkKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N2bGFuX2Myc19kZWwKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBEZWxldGUgb25lIEMyUyBlbnRyeQorICogSW5wdXQ6CisgKiAgICAgIHZpZCAtIFZMQU4gSUQKKyAqICAgICAgc3JjX3BvcnQgLSBJbmdyZXNzIFBvcnQKKyAqICAgICAgc3ZpZCAtIFNWTEFOIFZJRAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9WTEFOX1ZJRCAgICAgICAgIC0gSW52YWxpZCBWSUQgcGFyYW1ldGVyLgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAtIEludmFsaWQgcG9ydCBJRC4KKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAgICAgLSBpbnB1dCBvdXQgb2YgcmFuZ2UuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBkZWxldGUgc3lzdGVtIEMyUyBjb25maWd1cmF0aW9uLiBUaGVyZSBhcmUgMTI4IFNWTEFOIEMyUyBjb25maWd1cmF0aW9ucy4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3N2bGFuX2Myc19kZWwocnRrX3ZsYW5fdCB2aWQsIHJ0a19wb3J0X3Qgc3JjX3BvcnQpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3ZsYW5fYzJzX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBjb25maWd1cmUgU1ZMQU4gQzJTIHRhYmxlCisgKiBJbnB1dDoKKyAqICAgICAgdmlkIC0gVkxBTiBJRAorICogICAgICBzcmNfcG9ydCAtIEluZ3Jlc3MgUG9ydAorICogT3V0cHV0OgorICogICAgICBwU3ZpZCAtIFNWTEFOIElECisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgSUQuCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgLSBpbnB1dCBvdXQgb2YgcmFuZ2UuCisgKiBOb3RlOgorICogICAgIFRoZSBBUEkgY2FuIGdldCBzeXN0ZW0gQzJTIGNvbmZpZ3VyYXRpb24uIFRoZXJlIGFyZSAxMjggU1ZMQU4gQzJTIGNvbmZpZ3VyYXRpb25zLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfc3ZsYW5fYzJzX2dldChydGtfdmxhbl90IHZpZCwgcnRrX3BvcnRfdCBzcmNfcG9ydCwgcnRrX3ZsYW5fdCAqcFN2aWQpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3ZsYW5fdW50YWdfYWN0aW9uX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIENvbmZpZ3VyZSBBY3Rpb24gb2YgZG93bnN0cmVhbSBVbi1TdGFnIHBhY2tldAorICogSW5wdXQ6CisgKiAgICAgIGFjdGlvbiAgLSBBY3Rpb24gZm9yIFVuU3RhZworICogICAgICBzdmlkICAgIC0gVGhlIFNWSUQgYXNzaWduZWQgdG8gVW5TdGFnIHBhY2tldAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9TVkxBTl9WSUQgICAgICAgICAgICAgICAgLSBJbnZhbGlkIFNWTEFOIFZJRCBwYXJhbWV0ZXIuCisgKiAgICAgIFJUX0VSUl9TVkxBTl9FTlRSWV9OT1RfRk9VTkQgICAgLSBzcGVjaWZpZWQgc3ZsYW4gZW50cnkgbm90IGZvdW5kLgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFICAgICAgICAgICAgIC0gaW5wdXQgb3V0IG9mIHJhbmdlLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gY29uZmlndXJlIGFjdGlvbiBvZiBkb3duc3RyZWFtIFVuLVN0YWcgcGFja2V0LiBBIFNWSUQgYXNzaWduZWQKKyAqICAgICAgdG8gdGhlIHVuLXN0YWcgaXMgYWxzbyBzdXBwb3J0ZWQgYnkgdGhpcyBBUEkuIFRoZSBwYXJhbWV0ZXIgb2Ygc3ZpZCBpcworICogICAgICBvbmx5IHJlZmVyZW5jZWQgd2hlbiB0aGUgYWN0aW9uIGlzIHNldCB0byBVTlRBR19BU1NJR04KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3N2bGFuX3VudGFnX2FjdGlvbl9zZXQocnRrX3N2bGFuX3VudGFnX2FjdGlvbl90IGFjdGlvbiwgcnRrX3ZsYW5fdCBzdmlkKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N2bGFuX3VudGFnX2FjdGlvbl9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgQWN0aW9uIG9mIGRvd25zdHJlYW0gVW4tU3RhZyBwYWNrZXQKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBBY3Rpb24gIC0gQWN0aW9uIGZvciBVblN0YWcKKyAqICAgICAgcFN2aWQgICAgLSBUaGUgU1ZJRCBhc3NpZ25lZCB0byBVblN0YWcgcGFja2V0CisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9TVkxBTl9WSUQgICAgICAgICAgICAgICAgLSBJbnZhbGlkIFNWTEFOIFZJRCBwYXJhbWV0ZXIuCisgKiAgICAgIFJUX0VSUl9TVkxBTl9FTlRSWV9OT1RfRk9VTkQgICAgLSBzcGVjaWZpZWQgc3ZsYW4gZW50cnkgbm90IGZvdW5kLgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFICAgICAgICAgICAgIC0gaW5wdXQgb3V0IG9mIHJhbmdlLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gR2V0IGFjdGlvbiBvZiBkb3duc3RyZWFtIFVuLVN0YWcgcGFja2V0LiBBIFNWSUQgYXNzaWduZWQKKyAqICAgICAgdG8gdGhlIHVuLXN0YWcgaXMgYWxzbyByZXRyaWV2ZWQgYnkgdGhpcyBBUEkuIFRoZSBwYXJhbWV0ZXIgcFN2aWQgaXMKKyAqICAgICAgb25seSByZWZlcm5jZWQgd2hlbiB0aGUgYWN0aW9uIGlzIFVOVEFHX0FTU0lHTgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfc3ZsYW5fdW50YWdfYWN0aW9uX2dldChydGtfc3ZsYW5fdW50YWdfYWN0aW9uX3QgKnBBY3Rpb24sIHJ0a192bGFuX3QgKnBTdmlkKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N2bGFuX3VubWF0Y2hfYWN0aW9uX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIENvbmZpZ3VyZSBBY3Rpb24gb2YgZG93bnN0cmVhbSBVbm1hdGNoIHBhY2tldAorICogSW5wdXQ6CisgKiAgICAgIGFjdGlvbiAgLSBBY3Rpb24gZm9yIFVubWF0Y2gKKyAqICAgICAgc3ZpZCAgICAtIFRoZSBTVklEIGFzc2lnbmVkIHRvIFVubWF0Y2ggcGFja2V0CisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1NWTEFOX1ZJRCAgICAgICAgICAgICAgICAtIEludmFsaWQgU1ZMQU4gVklEIHBhcmFtZXRlci4KKyAqICAgICAgUlRfRVJSX1NWTEFOX0VOVFJZX05PVF9GT1VORCAgICAtIHNwZWNpZmllZCBzdmxhbiBlbnRyeSBub3QgZm91bmQuCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgICAgICAgICAgICAgLSBpbnB1dCBvdXQgb2YgcmFuZ2UuCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBjb25maWd1cmUgYWN0aW9uIG9mIGRvd25zdHJlYW0gVW4tbWF0Y2ggcGFja2V0LiBBIFNWSUQgYXNzaWduZWQKKyAqICAgICAgdG8gdGhlIHVuLW1hdGNoIGlzIGFsc28gc3VwcG9ydGVkIGJ5IHRoaXMgQVBJLiBUaGUgcGFyYW1ldGVyIG9kIHN2aWQgaXMKKyAqICAgICAgb25seSByZWZlcm5jZWQgd2hlbiB0aGUgYWN0aW9uIGlzIHNldCB0byBVTk1BVENIX0FTU0lHTgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfc3ZsYW5fdW5tYXRjaF9hY3Rpb25fc2V0KHJ0a19zdmxhbl91bm1hdGNoX2FjdGlvbl90IGFjdGlvbiwgcnRrX3ZsYW5fdCBzdmlkKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N2bGFuX3VubWF0Y2hfYWN0aW9uX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBBY3Rpb24gb2YgZG93bnN0cmVhbSBVbm1hdGNoIHBhY2tldAorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcEFjdGlvbiAgLSBBY3Rpb24gZm9yIFVubWF0Y2gKKyAqICAgICAgcFN2aWQgICAgLSBUaGUgU1ZJRCBhc3NpZ25lZCB0byBVbm1hdGNoIHBhY2tldAorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfU1ZMQU5fVklEICAgICAgICAgICAgICAgIC0gSW52YWxpZCBTVkxBTiBWSUQgcGFyYW1ldGVyLgorICogICAgICBSVF9FUlJfU1ZMQU5fRU5UUllfTk9UX0ZPVU5EICAgIC0gc3BlY2lmaWVkIHN2bGFuIGVudHJ5IG5vdCBmb3VuZC4KKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAgICAgICAgICAgICAtIGlucHV0IG91dCBvZiByYW5nZS4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIEdldCBhY3Rpb24gb2YgZG93bnN0cmVhbSBVbi1tYXRjaCBwYWNrZXQuIEEgU1ZJRCBhc3NpZ25lZAorICogICAgICB0byB0aGUgdW4tbWF0Y2ggaXMgYWxzbyByZXRyaWV2ZWQgYnkgdGhpcyBBUEkuIFRoZSBwYXJhbWV0ZXIgcFN2aWQgaXMKKyAqICAgICAgb25seSByZWZlcm5jZWQgd2hlbiB0aGUgYWN0aW9uIGlzIFVOTUFUQ0hfQVNTSUdOCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19zdmxhbl91bm1hdGNoX2FjdGlvbl9nZXQocnRrX3N2bGFuX3VubWF0Y2hfYWN0aW9uX3QgKnBBY3Rpb24sIHJ0a192bGFuX3QgKnBTdmlkKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N2bGFuX2RtYWNfdmlkc2VsX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBETUFDIENWSUQgc2VsZWN0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIFBvcnQKKyAqICAgICAgZW5hYmxlICAtIHN0YXRlIG9mIERNQUMgQ1ZJRCBTZWxlY3Rpb24KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1NWTEFOX1ZJRCAgICAgICAgICAgICAgICAtIEludmFsaWQgU1ZMQU4gVklEIHBhcmFtZXRlci4KKyAqICAgICAgUlRfRVJSX1NWTEFOX0VOVFJZX05PVF9GT1VORCAgICAtIHNwZWNpZmllZCBzdmxhbiBlbnRyeSBub3QgZm91bmQuCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgICAgICAgICAgICAgLSBpbnB1dCBvdXQgb2YgcmFuZ2UuCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBjYW4gc2V0IERNQUMgQ1ZJRCBTZWxlY3Rpb24gc3RhdGUKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3N2bGFuX2RtYWNfdmlkc2VsX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19lbmFibGVfdCBlbmFibGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3ZsYW5fZG1hY192aWRzZWxfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IERNQUMgQ1ZJRCBzZWxlY3Rpb24KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUG9ydAorICogT3V0cHV0OgorICogICAgICBwRW5hYmxlIC0gc3RhdGUgb2YgRE1BQyBDVklEIFNlbGVjdGlvbgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfU1ZMQU5fVklEICAgICAgICAgICAgICAgIC0gSW52YWxpZCBTVkxBTiBWSUQgcGFyYW1ldGVyLgorICogICAgICBSVF9FUlJfU1ZMQU5fRU5UUllfTk9UX0ZPVU5EICAgIC0gc3BlY2lmaWVkIHN2bGFuIGVudHJ5IG5vdCBmb3VuZC4KKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAgICAgICAgICAgICAtIGlucHV0IG91dCBvZiByYW5nZS4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBnZXQgRE1BQyBDVklEIFNlbGVjdGlvbiBzdGF0ZQorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfc3ZsYW5fZG1hY192aWRzZWxfZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2VuYWJsZV90ICpwRW5hYmxlKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N2bGFuX2lwbWMyc19hZGQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBhZGQgaXAgbXVsdGljYXN0IGFkZHJlc3MgdG8gU1ZMQU4KKyAqIElucHV0OgorICogICAgICBzdmlkICAgIC0gU1ZMQU4gVklECisgKiAgICAgIGlwbWMgICAgLSBpcCBtdWx0aWNhc3QgYWRkcmVzcworICogICAgICBpcG1jTXNrIC0gaXAgbXVsdGljYXN0IG1hc2sKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfU1ZMQU5fVklEICAgICAgICAgICAgICAgIC0gSW52YWxpZCBTVkxBTiBWSUQgcGFyYW1ldGVyLgorICogICAgICBSVF9FUlJfU1ZMQU5fRU5UUllfTk9UX0ZPVU5EICAgIC0gc3BlY2lmaWVkIHN2bGFuIGVudHJ5IG5vdCBmb3VuZC4KKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAgICAgICAgICAgICAtIGlucHV0IG91dCBvZiByYW5nZS4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIHNldCBJUCBtdXRsaWNhc3QgdG8gU1ZJRCBjb25maWd1cmF0aW9uLiBJZiB1cHN0cmVhbSBwYWNrZXQgaXMgSVB2NCBtdWx0aWNhc3QKKyAqICAgICAgcGFja2V0IGFuZCBESVAgaXMgbWF0Y2hlZCBNQzJTIGNvbmZpZ3VyYXRpb24sIEFTSUMgd2lsbCBhc3NpZ24gZWdyZXNzIFNWSUQgdG8gdGhlIHBhY2tldC4KKyAqICAgICAgVGhlcmUgYXJlIDMyIFNWTEFOIG11bHRpY2FzdCBjb25maWd1cmF0aW9ucyBmb3IgSVAgYW5kIEwyIG11bHRpY2FzdC4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3N2bGFuX2lwbWMyc19hZGQoaXBhZGRyX3QgaXBtYywgaXBhZGRyX3QgaXBtY01zaywgcnRrX3ZsYW5fdCBzdmlkKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N2bGFuX2lwbWMyc19kZWwKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBkZWxldGUgaXAgbXVsdGljYXN0IGFkZHJlc3MgdG8gU1ZMQU4KKyAqIElucHV0OgorICogICAgICBpcG1jICAgIC0gaXAgbXVsdGljYXN0IGFkZHJlc3MKKyAqICAgICAgaXBtY01zayAtIGlwIG11bHRpY2FzdCBtYXNrCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1NWTEFOX1ZJRCAgICAgICAgLSBJbnZhbGlkIFNWTEFOIFZJRCBwYXJhbWV0ZXIuCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgICAgIC0gaW5wdXQgb3V0IG9mIHJhbmdlLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZGVsZXRlIElQIG11dGxpY2FzdCB0byBTVklEIGNvbmZpZ3VyYXRpb24uIFRoZXJlIGFyZSAzMiBTVkxBTiBtdWx0aWNhc3QgY29uZmlndXJhdGlvbnMgZm9yIElQIGFuZCBMMiBtdWx0aWNhc3QuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19zdmxhbl9pcG1jMnNfZGVsKGlwYWRkcl90IGlwbWMsIGlwYWRkcl90IGlwbWNNc2spOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3ZsYW5faXBtYzJzX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBpcCBtdWx0aWNhc3QgYWRkcmVzcyB0byBTVkxBTgorICogSW5wdXQ6CisgKiAgICAgIGlwbWMgICAgLSBpcCBtdWx0aWNhc3QgYWRkcmVzcworICogICAgICBpcG1jTXNrIC0gaXAgbXVsdGljYXN0IG1hc2sKKyAqIE91dHB1dDoKKyAqICAgICAgcFN2aWQgLSBTVkxBTiBWSUQKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAtIGlucHV0IG91dCBvZiByYW5nZS4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGdldCBJUCBtdXRsaWNhc3QgdG8gU1ZJRCBjb25maWd1cmF0aW9uLiBUaGVyZSBhcmUgMzIgU1ZMQU4gbXVsdGljYXN0IGNvbmZpZ3VyYXRpb25zIGZvciBJUCBhbmQgTDIgbXVsdGljYXN0LgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfc3ZsYW5faXBtYzJzX2dldChpcGFkZHJfdCBpcG1jLCBpcGFkZHJfdCBpcG1jTXNrLCBydGtfdmxhbl90ICpwU3ZpZCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdmxhbl9sMm1jMnNfYWRkCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQWRkIEwyIG11bHRpY2FzdCBhZGRyZXNzIHRvIFNWTEFOCisgKiBJbnB1dDoKKyAqICAgICAgbWFjICAgICAtIEwyIG11bHRpY2FzdCBhZGRyZXNzCisgKiAgICAgIG1hY01zayAgLSBMMiBtdWx0aWNhc3QgYWRkcmVzcyBtYXNrCisgKiAgICAgIHN2aWQgICAgLSBTVkxBTiBWSUQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfU1ZMQU5fVklEICAgICAgICAgICAgICAgIC0gSW52YWxpZCBTVkxBTiBWSUQgcGFyYW1ldGVyLgorICogICAgICBSVF9FUlJfU1ZMQU5fRU5UUllfTk9UX0ZPVU5EICAgIC0gc3BlY2lmaWVkIHN2bGFuIGVudHJ5IG5vdCBmb3VuZC4KKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAgICAgICAgICAgICAtIGlucHV0IG91dCBvZiByYW5nZS4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIHNldCBMMiBNdXRsaWNhc3QgdG8gU1ZJRCBjb25maWd1cmF0aW9uLiBJZiB1cHN0cmVhbSBwYWNrZXQgaXMgTDIgbXVsdGljYXN0CisgKiAgICAgIHBhY2tldCBhbmQgRE1BQyBpcyBtYXRjaGVkLCBBU0lDIHdpbGwgYXNzaWduIGVncmVzcyBTVklEIHRvIHRoZSBwYWNrZXQuIFRoZXJlIGFyZSAzMgorICogICAgICBTVkxBTiBtdWx0aWNhc3QgY29uZmlndXJhdGlvbnMgZm9yIElQIGFuZCBMMiBtdWx0aWNhc3QuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19zdmxhbl9sMm1jMnNfYWRkKHJ0a19tYWNfdCBtYWMsIHJ0a19tYWNfdCBtYWNNc2ssIHJ0a192bGFuX3Qgc3ZpZCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdmxhbl9sMm1jMnNfZGVsCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgZGVsZXRlIEwyIG11bHRpY2FzdCBhZGRyZXNzIHRvIFNWTEFOCisgKiBJbnB1dDoKKyAqICAgICAgbWFjICAgICAtIEwyIG11bHRpY2FzdCBhZGRyZXNzCisgKiAgICAgIG1hY01zayAgLSBMMiBtdWx0aWNhc3QgYWRkcmVzcyBtYXNrCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1NWTEFOX1ZJRCAgICAgICAgLSBJbnZhbGlkIFNWTEFOIFZJRCBwYXJhbWV0ZXIuCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgICAgIC0gaW5wdXQgb3V0IG9mIHJhbmdlLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZGVsZXRlIE11dGxpY2FzdCB0byBTVklEIGNvbmZpZ3VyYXRpb24uIFRoZXJlIGFyZSAzMiBTVkxBTiBtdWx0aWNhc3QgY29uZmlndXJhdGlvbnMgZm9yIElQIGFuZCBMMiBtdWx0aWNhc3QuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19zdmxhbl9sMm1jMnNfZGVsKHJ0a19tYWNfdCBtYWMsIHJ0a19tYWNfdCBtYWNNc2spOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3ZsYW5fbDJtYzJzX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBMMiBtdWx0aWNhc3QgYWRkcmVzcyB0byBTVkxBTgorICogSW5wdXQ6CisgKiAgICAgIG1hYyAgICAgLSBMMiBtdWx0aWNhc3QgYWRkcmVzcworICogICAgICBtYWNNc2sgIC0gTDIgbXVsdGljYXN0IGFkZHJlc3MgbWFzaworICogT3V0cHV0OgorICogICAgICBwU3ZpZCAgIC0gU1ZMQU4gVklECisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFICAgICAtIGlucHV0IG91dCBvZiByYW5nZS4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGdldCBMMiBtdXRsaWNhc3QgdG8gU1ZJRCBjb25maWd1cmF0aW9uLiBUaGVyZSBhcmUgMzIgU1ZMQU4gbXVsdGljYXN0IGNvbmZpZ3VyYXRpb25zIGZvciBJUCBhbmQgTDIgbXVsdGljYXN0LgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfc3ZsYW5fbDJtYzJzX2dldChydGtfbWFjX3QgbWFjLCBydGtfbWFjX3QgbWFjTXNrLCBydGtfdmxhbl90ICpwU3ZpZCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdmxhbl9zcDJjX2FkZAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEFkZCBzeXN0ZW0gU1AyQyBjb25maWd1cmF0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgY3ZpZCAgICAgICAgLSBWTEFOIElECisgKiAgICAgIGRzdF9wb3J0ICAgIC0gRGVzdGluYXRpb24gcG9ydCBvZiBTVkxBTiB0byBDVkxBTiBjb25maWd1cmF0aW9uCisgKiAgICAgIHN2aWQgICAgICAgIC0gU1ZMQU4gVklECisgKgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfU1ZMQU5fVklEICAgIC0gSW52YWxpZCBTVkxBTiBWSUQgcGFyYW1ldGVyLgorICogICAgICBSVF9FUlJfVkxBTl9WSUQgICAgIC0gSW52YWxpZCBWSUQgcGFyYW1ldGVyLgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gaW5wdXQgb3V0IG9mIHJhbmdlLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gYWRkIFNWSUQgJiBEZXN0aW5hdGlvbiBQb3J0IHRvIENWTEFOIGNvbmZpZ3VyYXRpb24uIFRoZSBkb3duc3RyZWFtIGZyYW1lcyB3aXRoIGFzc2lnbmVkCisgKiAgICAgIFNWSUQgd2lsbCBiZSBhZGQgQy10YWcgd2l0aCBhc3NpZ25lZCBDVklEIGlmIHRoZSBvdXRwdXQgcG9ydCBpcyB0aGUgYXNzaWduZWQgZGVzdGluYXRpb24gcG9ydC4KKyAqICAgICAgVGhlcmUgYXJlIDEyOCBTUDJDIGNvbmZpZ3VyYXRpb25zLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfc3ZsYW5fc3AyY19hZGQocnRrX3ZsYW5fdCBzdmlkLCBydGtfcG9ydF90IGRzdF9wb3J0LCBydGtfdmxhbl90IGN2aWQpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3ZsYW5fc3AyY19nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgY29uZmlndXJlIHN5c3RlbSBTUDJDIGNvbnRlbnQKKyAqIElucHV0OgorICogICAgICBzdmlkICAgICAgICAtIFNWTEFOIFZJRAorICogICAgICBkc3RfcG9ydCAgICAtIERlc3RpbmF0aW9uIHBvcnQgb2YgU1ZMQU4gdG8gQ1ZMQU4gY29uZmlndXJhdGlvbgorICogT3V0cHV0OgorICogICAgICBwQ3ZpZCAtIFZMQU4gSUQKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAtIGlucHV0IG91dCBvZiByYW5nZS4KKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9TVkxBTl9WSUQgICAgLSBJbnZhbGlkIFNWTEFOIFZJRCBwYXJhbWV0ZXIuCisgKiBOb3RlOgorICogICAgIFRoZSBBUEkgY2FuIGdldCBTVklEICYgRGVzdGluYXRpb24gUG9ydCB0byBDVkxBTiBjb25maWd1cmF0aW9uLiBUaGVyZSBhcmUgMTI4IFNQMkMgY29uZmlndXJhdGlvbnMuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19zdmxhbl9zcDJjX2dldChydGtfdmxhbl90IHN2aWQsIHJ0a19wb3J0X3QgZHN0X3BvcnQsIHJ0a192bGFuX3QgKnBDdmlkKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N2bGFuX3NwMmNfZGVsCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgRGVsZXRlIHN5c3RlbSBTUDJDIGNvbmZpZ3VyYXRpb24KKyAqIElucHV0OgorICogICAgICBzdmlkICAgICAgICAtIFNWTEFOIFZJRAorICogICAgICBkc3RfcG9ydCAgICAtIERlc3RpbmF0aW9uIHBvcnQgb2YgU1ZMQU4gdG8gQ1ZMQU4gY29uZmlndXJhdGlvbgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfU1ZMQU5fVklEICAgIC0gSW52YWxpZCBTVkxBTiBWSUQgcGFyYW1ldGVyLgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gaW5wdXQgb3V0IG9mIHJhbmdlLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZGVsZXRlIFNWSUQgJiBEZXN0aW5hdGlvbiBQb3J0IHRvIENWTEFOIGNvbmZpZ3VyYXRpb24uIFRoZXJlIGFyZSAxMjggU1AyQyBjb25maWd1cmF0aW9ucy4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3N2bGFuX3NwMmNfZGVsKHJ0a192bGFuX3Qgc3ZpZCwgcnRrX3BvcnRfdCBkc3RfcG9ydCk7CisKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N2bGFuX2xvb2t1cFR5cGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IGxvb2t1cCB0eXBlIG9mIFNWTEFOCisgKiBJbnB1dDoKKyAqICAgICAgdHlwZSAgICAgICAgLSBsb29rdXAgdHlwZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiBOb3RlOgorICogICAgICBub25lCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19zdmxhbl9sb29rdXBUeXBlX3NldChydGtfc3ZsYW5fbG9va3VwVHlwZV90IHR5cGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3ZsYW5fbG9va3VwVHlwZV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgbG9va3VwIHR5cGUgb2YgU1ZMQU4KKyAqIElucHV0OgorICogICAgICBwVHlwZSAgICAgICAtIGxvb2t1cCB0eXBlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqIE5vdGU6CisgKiAgICAgIG5vbmUKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3N2bGFuX2xvb2t1cFR5cGVfZ2V0KHJ0a19zdmxhbl9sb29rdXBUeXBlX3QgKnBUeXBlKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N2bGFuX3RyYXBQcmlfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHN2bGFuIHRyYXAgcHJpb3JpdHkKKyAqIElucHV0OgorICogICAgICBwcmlvcml0eSAtIHByaW9yaXR5IGZvciB0cmFwIHBhY2tldHMKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfUU9TX0lOVF9QUklPUklUWQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfc3ZsYW5fdHJhcFByaV9zZXQocnRrX3ByaV90IHByaW9yaXR5KTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N2bGFuX3RyYXBQcmlfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHN2bGFuIHRyYXAgcHJpb3JpdHkKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBQcmlvcml0eSAtIHByaW9yaXR5IGZvciB0cmFwIHBhY2tldHMKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAtIGlucHV0IHBhcmFtZXRlciBtYXkgYmUgbnVsbCBwb2ludGVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19zdmxhbl90cmFwUHJpX2dldChydGtfcHJpX3QgKnBQcmlvcml0eSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdmxhbl91bmFzc2lnbl9hY3Rpb25fc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQ29uZmlndXJlIEFjdGlvbiBvZiB1cHN0cmVhbSB3aXRob3V0IHN2aWQgYXNzaWduIGFjdGlvbgorICogSW5wdXQ6CisgKiAgICAgIGFjdGlvbiAgLSBBY3Rpb24gZm9yIFVuLWFzc2lnbgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgICAgICAgICAgICAgLSBpbnB1dCBvdXQgb2YgcmFuZ2UuCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBjb25maWd1cmUgYWN0aW9uIG9mIHVwc3RyZWFtIFVuLWFzc2lnbiBzdmlkIHBhY2tldC4gSWYgYWN0aW9uIGlzIG5vdAorICogICAgICB0cmFwIHRvIENQVSwgdGhlIHBvcnQtYmFzZWQgU1ZJRCBzdXJlIGJlIGFzc2lnbiBhcyBzeXN0ZW0gbmVlZAorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfc3ZsYW5fdW5hc3NpZ25fYWN0aW9uX3NldChydGtfc3ZsYW5fdW5hc3NpZ25fYWN0aW9uX3QgYWN0aW9uKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N2bGFuX3VuYXNzaWduX2FjdGlvbl9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgYWN0aW9uIG9mIHVwc3RyZWFtIHdpdGhvdXQgc3ZpZCBhc3NpZ25tZW50CisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwQWN0aW9uICAtIEFjdGlvbiBmb3IgVW4tYXNzaWduCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19zdmxhbl91bmFzc2lnbl9hY3Rpb25fZ2V0KHJ0a19zdmxhbl91bmFzc2lnbl9hY3Rpb25fdCAqcEFjdGlvbik7CisKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N2bGFuX2NoZWNrQW5kQ3JlYXRlTWJyCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQ2hlY2sgYW5kIGNyZWF0ZSBNZW1iZXIgY29uZmlndXJhdGlvbiBhbmQgcmV0dXJuIGluZGV4CisgKiBJbnB1dDoKKyAqICAgICAgdmlkICAtIFZMQU4gaWQuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBJbmRleCAgLSBNZW1iZXIgY29uZmlndXJhdGlvbiBpbmRleAorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfVkxBTl9WSUQgICAgIC0gSW52YWxpZCBWTEFOIElELgorICogICAgICBSVF9FUlJfVEJMX0ZVTEwgICAgIC0gTWVtYmVyIENvbmZpZ3VyYXRpb24gdGFibGUgZnVsbAorICogTm90ZToKKyAqCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a19zdmxhbl9jaGVja0FuZENyZWF0ZU1icihydGtfdmxhbl90IHZpZCwgcnRrX3VpbnQzMiAqcEluZGV4KTsKKworCisjZW5kaWYgLyogX19SVEtfQVBJX1NWTEFOX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvdHJhcC5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvdHJhcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjZGI2NGEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS90cmFwLmgKQEAgLTAsMCArMSw3NTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogUHVycG9zZSA6IFJUTDgzNjcvUlRMODM2N0Mgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJCisgKgorICogRmVhdHVyZSA6IFRoZSBmaWxlIGluY2x1ZGVzIFRyYXAgbW9kdWxlIGhpZ2gtbGF5ZXIgQVBJIGRlZmluYXRpb24KKyAqCisgKi8KKworI2lmbmRlZiBfX1JUS19BUElfVFJBUF9IX18KKyNkZWZpbmUgX19SVEtfQVBJX1RSQVBfSF9fCisKKwordHlwZWRlZiBlbnVtIHJ0a190cmFwX3R5cGVfZQoreworICAgIFRSQVBfQlJHX0dST1VQID0gMCwKKyAgICBUUkFQX0ZEX1BBVVNFLAorICAgIFRSQVBfU1BfTUNBU1QsCisgICAgVFJBUF8xWF9QQUUsCisgICAgVFJBUF9VTkRFRl9CUkdfMDQsCisgICAgVFJBUF9VTkRFRl9CUkdfMDUsCisgICAgVFJBUF9VTkRFRl9CUkdfMDYsCisgICAgVFJBUF9VTkRFRl9CUkdfMDcsCisgICAgVFJBUF9QUk9WSURFUl9CUklER0VfR1JPVVBfQUREUkVTUywKKyAgICBUUkFQX1VOREVGX0JSR18wOSwKKyAgICBUUkFQX1VOREVGX0JSR18wQSwKKyAgICBUUkFQX1VOREVGX0JSR18wQiwKKyAgICBUUkFQX1VOREVGX0JSR18wQywKKyAgICBUUkFQX1BST1ZJREVSX0JSSURHRV9HVlJQX0FERFJFU1MsCisgICAgVFJBUF84MDIxQUIsCisgICAgVFJBUF9VTkRFRl9CUkdfMEYsCisgICAgVFJBUF9CUkdfTU5HRU1FTlQsCisgICAgVFJBUF9VTkRFRklORURfMTEsCisgICAgVFJBUF9VTkRFRklORURfMTIsCisgICAgVFJBUF9VTkRFRklORURfMTMsCisgICAgVFJBUF9VTkRFRklORURfMTQsCisgICAgVFJBUF9VTkRFRklORURfMTUsCisgICAgVFJBUF9VTkRFRklORURfMTYsCisgICAgVFJBUF9VTkRFRklORURfMTcsCisgICAgVFJBUF9VTkRFRklORURfMTgsCisgICAgVFJBUF9VTkRFRklORURfMTksCisgICAgVFJBUF9VTkRFRklORURfMUEsCisgICAgVFJBUF9VTkRFRklORURfMUIsCisgICAgVFJBUF9VTkRFRklORURfMUMsCisgICAgVFJBUF9VTkRFRklORURfMUQsCisgICAgVFJBUF9VTkRFRklORURfMUUsCisgICAgVFJBUF9VTkRFRklORURfMUYsCisgICAgVFJBUF9HTVJQLAorICAgIFRSQVBfR1ZSUCwKKyAgICBUUkFQX1VOREVGX0dBUlBfMjIsCisgICAgVFJBUF9VTkRFRl9HQVJQXzIzLAorICAgIFRSQVBfVU5ERUZfR0FSUF8yNCwKKyAgICBUUkFQX1VOREVGX0dBUlBfMjUsCisgICAgVFJBUF9VTkRFRl9HQVJQXzI2LAorICAgIFRSQVBfVU5ERUZfR0FSUF8yNywKKyAgICBUUkFQX1VOREVGX0dBUlBfMjgsCisgICAgVFJBUF9VTkRFRl9HQVJQXzI5LAorICAgIFRSQVBfVU5ERUZfR0FSUF8yQSwKKyAgICBUUkFQX1VOREVGX0dBUlBfMkIsCisgICAgVFJBUF9VTkRFRl9HQVJQXzJDLAorICAgIFRSQVBfVU5ERUZfR0FSUF8yRCwKKyAgICBUUkFQX1VOREVGX0dBUlBfMkUsCisgICAgVFJBUF9VTkRFRl9HQVJQXzJGLAorICAgIFRSQVBfQ0RQLAorICAgIFRSQVBfQ1NTVFAsCisgICAgVFJBUF9MTERQLAorICAgIFRSQVBfRU5ELAorfXJ0a190cmFwX3R5cGVfdDsKKworCit0eXBlZGVmIGVudW0gcnRrX21jYXN0X3R5cGVfZQoreworICAgIE1DQVNUX0wyID0gMCwKKyAgICBNQ0FTVF9JUFY0LAorICAgIE1DQVNUX0lQVjYsCisgICAgTUNBU1RfRU5ECit9IHJ0a19tY2FzdF90eXBlX3Q7CisKK3R5cGVkZWYgZW51bSBydGtfdHJhcF9tY2FzdF9hY3Rpb25fZQoreworICAgIE1DQVNUX0FDVElPTl9GT1JXQVJEID0gMCwKKyAgICBNQ0FTVF9BQ1RJT05fRFJPUCwKKyAgICBNQ0FTVF9BQ1RJT05fVFJBUDJDUFUsCisgICAgTUNBU1RfQUNUSU9OX1JPVVRFUl9QT1JULAorICAgIE1DQVNUX0FDVElPTl9EUk9QX0VYX1JNQSwKKyAgICBNQ0FTVF9BQ1RJT05fRU5ECit9IHJ0a190cmFwX21jYXN0X2FjdGlvbl90OworCit0eXBlZGVmIGVudW0gcnRrX3RyYXBfcm1hX2FjdGlvbl9lCit7CisgICAgUk1BX0FDVElPTl9GT1JXQVJEID0gMCwKKyAgICBSTUFfQUNUSU9OX1RSQVAyQ1BVLAorICAgIFJNQV9BQ1RJT05fRFJPUCwKKyAgICBSTUFfQUNUSU9OX0ZPUldBUkRfRVhDTFVERV9DUFUsCisgICAgUk1BX0FDVElPTl9FTkQKK30gcnRrX3RyYXBfcm1hX2FjdGlvbl90OworCit0eXBlZGVmIGVudW0gcnRrX3RyYXBfdWNhc3RfYWN0aW9uX2UKK3sKKyAgICBVQ0FTVF9BQ1RJT05fRk9SV0FSRF9QTUFTSyA9IDAsCisgICAgVUNBU1RfQUNUSU9OX0RST1AsCisgICAgVUNBU1RfQUNUSU9OX1RSQVAyQ1BVLAorICAgIFVDQVNUX0FDVElPTl9GTE9PRElORywKKyAgICBVQ0FTVF9BQ1RJT05fRU5ECit9IHJ0a190cmFwX3VjYXN0X2FjdGlvbl90OworCit0eXBlZGVmIGVudW0gcnRrX3RyYXBfdWNhc3RfdHlwZV9lCit7CisgICAgVUNBU1RfVU5LTk9XTkRBID0gMCwKKyAgICBVQ0FTVF9VTktOT1dOU0EsCisgICAgVUNBU1RfVU5NQVRDSFNBLAorICAgIFVDQVNUX0VORAorfSBydGtfdHJhcF91Y2FzdF90eXBlX3Q7CisKK3R5cGVkZWYgZW51bSBydGtfdHJhcF9yZWFzb25fdHlwZV9lCit7CisgICAgVFJBUF9SRUFTT05fUk1BID0gMCwKKyAgICBUUkFQX1JFQVNPTl9PQU0sCisgICAgVFJBUF9SRUFTT05fMVhVTkFVVEgsCisgICAgVFJBUF9SRUFTT05fVkxBTlNUQUNLLAorICAgIFRSQVBfUkVBU09OX1VOS05PV05NQywKKyAgICBUUkFQX1JFQVNPTl9FTkQsCit9IHJ0a190cmFwX3JlYXNvbl90eXBlX3Q7CisKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3RyYXBfdW5rbm93blVuaWNhc3RQa3RBY3Rpb25fc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHVua25vd24gdW5pY2FzdCBwYWNrZXQgYWN0aW9uIGNvbmZpZ3VyYXRpb24uCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgICAgIC0gaW5ncmVzcyBwb3J0IElEIGZvciB1bmtub3duIHVuaWNhc3QgcGFja2V0CisgKiAgICAgIHVjYXN0X2FjdGlvbiAgICAtIFVua25vd24gdW5pY2FzdCBhY3Rpb24uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX05PVF9BTExPV0VEICAgICAgICAgLSBJbnZhbGlkIGFjdGlvbi4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBjYW4gc2V0IHVua25vd24gdW5pY2FzdCBwYWNrZXQgYWN0aW9uIGNvbmZpZ3VyYXRpb24uCisgKiAgICAgIFRoZSB1bmtub3duIHVuaWNhc3QgYWN0aW9uIGlzIGFzIGZvbGxvd2luZzoKKyAqICAgICAgICAgIC0gVUNBU1RfQUNUSU9OX0ZPUldBUkRfUE1BU0sKKyAqICAgICAgICAgIC0gVUNBU1RfQUNUSU9OX0RST1AKKyAqICAgICAgICAgIC0gVUNBU1RfQUNUSU9OX1RSQVAyQ1BVCisgKiAgICAgICAgICAtIFVDQVNUX0FDVElPTl9GTE9PRElORworICovCitydGtfYXBpX3JldF90IHJ0a190cmFwX3Vua25vd25VbmljYXN0UGt0QWN0aW9uX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a190cmFwX3VjYXN0X2FjdGlvbl90IHVjYXN0X2FjdGlvbik7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a190cmFwX3Vua25vd25VbmljYXN0UGt0QWN0aW9uX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCB1bmtub3duIHVuaWNhc3QgcGFja2V0IGFjdGlvbiBjb25maWd1cmF0aW9uLgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgICAgICAtIGluZ3Jlc3MgcG9ydCBJRCBmb3IgdW5rbm93biB1bmljYXN0IHBhY2tldAorICogT3V0cHV0OgorICogICAgICBwVWNhc3RfYWN0aW9uICAgLSBVbmtub3duIHVuaWNhc3QgYWN0aW9uLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfTk9UX0FMTE9XRUQgICAgICAgICAtIEludmFsaWQgYWN0aW9uLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAgICAgICAgLSBOdWxsIHBvaW50ZXIKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBnZXQgdW5rbm93biB1bmljYXN0IHBhY2tldCBhY3Rpb24gY29uZmlndXJhdGlvbi4KKyAqICAgICAgVGhlIHVua25vd24gdW5pY2FzdCBhY3Rpb24gaXMgYXMgZm9sbG93aW5nOgorICogICAgICAgICAgLSBVQ0FTVF9BQ1RJT05fRk9SV0FSRF9QTUFTSworICogICAgICAgICAgLSBVQ0FTVF9BQ1RJT05fRFJPUAorICogICAgICAgICAgLSBVQ0FTVF9BQ1RJT05fVFJBUDJDUFUKKyAqICAgICAgICAgIC0gVUNBU1RfQUNUSU9OX0ZMT09ESU5HCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3RyYXBfdW5rbm93blVuaWNhc3RQa3RBY3Rpb25fZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3RyYXBfdWNhc3RfYWN0aW9uX3QgKnBVY2FzdF9hY3Rpb24pOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdHJhcF91bmtub3duTWFjUGt0QWN0aW9uX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCB1bmtub3duIHNvdXJjZSBNQUMgcGFja2V0IGFjdGlvbiBjb25maWd1cmF0aW9uLgorICogSW5wdXQ6CisgKiAgICAgIHVjYXN0X2FjdGlvbiAgICAtIFVua25vd24gc291cmNlIE1BQyBhY3Rpb24uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX05PVF9BTExPV0VEICAgICAgICAgLSBJbnZhbGlkIGFjdGlvbi4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBjYW4gc2V0IHVua25vd24gdW5pY2FzdCBwYWNrZXQgYWN0aW9uIGNvbmZpZ3VyYXRpb24uCisgKiAgICAgIFRoZSB1bmtub3duIHVuaWNhc3QgYWN0aW9uIGlzIGFzIGZvbGxvd2luZzoKKyAqICAgICAgICAgIC0gVUNBU1RfQUNUSU9OX0ZPUldBUkRfUE1BU0sKKyAqICAgICAgICAgIC0gVUNBU1RfQUNUSU9OX0RST1AKKyAqICAgICAgICAgIC0gVUNBU1RfQUNUSU9OX1RSQVAyQ1BVCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a190cmFwX3Vua25vd25NYWNQa3RBY3Rpb25fc2V0KHJ0a190cmFwX3VjYXN0X2FjdGlvbl90IHVjYXN0X2FjdGlvbik7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a190cmFwX3Vua25vd25NYWNQa3RBY3Rpb25fZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHVua25vd24gc291cmNlIE1BQyBwYWNrZXQgYWN0aW9uIGNvbmZpZ3VyYXRpb24uCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZS4KKyAqIE91dHB1dDoKKyAqICAgICAgcFVjYXN0X2FjdGlvbiAgIC0gVW5rbm93biBzb3VyY2UgTUFDIGFjdGlvbi4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAgICAgICAgLSBOdWxsIFBvaW50ZXIuCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a190cmFwX3Vua25vd25NYWNQa3RBY3Rpb25fZ2V0KHJ0a190cmFwX3VjYXN0X2FjdGlvbl90ICpwVWNhc3RfYWN0aW9uKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3RyYXBfdW5tYXRjaE1hY1BrdEFjdGlvbl9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgdW5tYXRjaCBzb3VyY2UgTUFDIHBhY2tldCBhY3Rpb24gY29uZmlndXJhdGlvbi4KKyAqIElucHV0OgorICogICAgICB1Y2FzdF9hY3Rpb24gICAgLSBVbmtub3duIHNvdXJjZSBNQUMgYWN0aW9uLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9OT1RfQUxMT1dFRCAgICAgICAgIC0gSW52YWxpZCBhY3Rpb24uCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgY2FuIHNldCB1bmtub3duIHVuaWNhc3QgcGFja2V0IGFjdGlvbiBjb25maWd1cmF0aW9uLgorICogICAgICBUaGUgdW5rbm93biB1bmljYXN0IGFjdGlvbiBpcyBhcyBmb2xsb3dpbmc6CisgKiAgICAgICAgICAtIFVDQVNUX0FDVElPTl9GT1JXQVJEX1BNQVNLCisgKiAgICAgICAgICAtIFVDQVNUX0FDVElPTl9EUk9QCisgKiAgICAgICAgICAtIFVDQVNUX0FDVElPTl9UUkFQMkNQVQorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfdHJhcF91bm1hdGNoTWFjUGt0QWN0aW9uX3NldChydGtfdHJhcF91Y2FzdF9hY3Rpb25fdCB1Y2FzdF9hY3Rpb24pOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdHJhcF91bm1hdGNoTWFjUGt0QWN0aW9uX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCB1bm1hdGNoIHNvdXJjZSBNQUMgcGFja2V0IGFjdGlvbiBjb25maWd1cmF0aW9uLgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBVY2FzdF9hY3Rpb24gICAtIFVua25vd24gc291cmNlIE1BQyBhY3Rpb24uCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9OT1RfQUxMT1dFRCAgICAgICAgIC0gSW52YWxpZCBhY3Rpb24uCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgY2FuIHNldCB1bmtub3duIHVuaWNhc3QgcGFja2V0IGFjdGlvbiBjb25maWd1cmF0aW9uLgorICogICAgICBUaGUgdW5rbm93biB1bmljYXN0IGFjdGlvbiBpcyBhcyBmb2xsb3dpbmc6CisgKiAgICAgICAgICAtIFVDQVNUX0FDVElPTl9GT1JXQVJEX1BNQVNLCisgKiAgICAgICAgICAtIFVDQVNUX0FDVElPTl9EUk9QCisgKiAgICAgICAgICAtIFVDQVNUX0FDVElPTl9UUkFQMkNQVQorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfdHJhcF91bm1hdGNoTWFjUGt0QWN0aW9uX2dldChydGtfdHJhcF91Y2FzdF9hY3Rpb25fdCAqcFVjYXN0X2FjdGlvbik7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a190cmFwX3VubWF0Y2hNYWNNb3Zpbmdfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHVubWF0Y2ggc291cmNlIE1BQyBwYWNrZXQgbW92aW5nIHN0YXRlLgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgIC0gUG9ydCBJRC4KKyAqICAgICAgZW5hYmxlICAgICAgLSBFTkFCTEVEOiBhbGxvdyBTQSBtb3ZpbmcsIERJU0FCTEU6IGRvbid0IGFsbG93IFNBIG1vdmluZy4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfTk9UX0FMTE9XRUQgICAgICAgICAtIEludmFsaWQgYWN0aW9uLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a190cmFwX3VubWF0Y2hNYWNNb3Zpbmdfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2VuYWJsZV90IGVuYWJsZSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a190cmFwX3VubWF0Y2hNYWNNb3ZpbmdfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHVubWF0Y2ggc291cmNlIE1BQyBwYWNrZXQgbW92aW5nIHN0YXRlLgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgIC0gUG9ydCBJRC4KKyAqIE91dHB1dDoKKyAqICAgICAgcEVuYWJsZSAgICAgLSBFTkFCTEVEOiBhbGxvdyBTQSBtb3ZpbmcsIERJU0FCTEU6IGRvbid0IGFsbG93IFNBIG1vdmluZy4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX05PVF9BTExPV0VEICAgICAgICAgLSBJbnZhbGlkIGFjdGlvbi4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfdHJhcF91bm1hdGNoTWFjTW92aW5nX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19lbmFibGVfdCAqcEVuYWJsZSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a190cmFwX3Vua25vd25NY2FzdFBrdEFjdGlvbl9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgYmVoYXZpb3Igb2YgdW5rbm93biBtdWx0aWNhc3QKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAgICAgLSBQb3J0IGlkLgorICogICAgICB0eXBlICAgICAgICAgICAgLSB1bmtub3duIG11bHRpY2FzdCBwYWNrZXQgdHlwZS4KKyAqICAgICAgbWNhc3RfYWN0aW9uICAgIC0gdW5rbm93biBtdWx0aWNhc3QgYWN0aW9uLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfTk9UX0FMTE9XRUQgIC0gSW52YWxpZCBhY3Rpb24uCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBXaGVuIHJlY2VpdmVzIGFuIHVua25vd24gbXVsdGljYXN0IHBhY2tldCwgc3dpdGNoIG1heSB0cmFwLCBkcm9wIG9yIGZsb29kIHRoaXMgcGFja2V0CisgKiAgICAgICgxKSBUaGUgdW5rbm93biBtdWx0aWNhc3QgcGFja2V0IHR5cGUgaXMgYXMgZm9sbG93aW5nOgorICogICAgICAgICAgLSBNQ0FTVF9MMgorICogICAgICAgICAgLSBNQ0FTVF9JUFY0CisgKiAgICAgICAgICAtIE1DQVNUX0lQVjYKKyAqICAgICAgKDIpIFRoZSB1bmtub3duIG11bHRpY2FzdCBhY3Rpb24gaXMgYXMgZm9sbG93aW5nOgorICogICAgICAgICAgLSBNQ0FTVF9BQ1RJT05fRk9SV0FSRAorICogICAgICAgICAgLSBNQ0FTVF9BQ1RJT05fRFJPUAorICogICAgICAgICAgLSBNQ0FTVF9BQ1RJT05fVFJBUDJDUFUKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3RyYXBfdW5rbm93bk1jYXN0UGt0QWN0aW9uX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19tY2FzdF90eXBlX3QgdHlwZSwgcnRrX3RyYXBfbWNhc3RfYWN0aW9uX3QgbWNhc3RfYWN0aW9uKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3RyYXBfdW5rbm93bk1jYXN0UGt0QWN0aW9uX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBiZWhhdmlvciBvZiB1bmtub3duIG11bHRpY2FzdAorICogSW5wdXQ6CisgKiAgICAgIHR5cGUgLSB1bmtub3duIG11bHRpY2FzdCBwYWNrZXQgdHlwZS4KKyAqIE91dHB1dDoKKyAqICAgICAgcE1jYXN0X2FjdGlvbiAtIHVua25vd24gbXVsdGljYXN0IGFjdGlvbi4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfTk9UX0FMTE9XRUQgICAgICAtIEludmFsaWQgb3BlcmF0aW9uLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFdoZW4gcmVjZWl2ZXMgYW4gdW5rbm93biBtdWx0aWNhc3QgcGFja2V0LCBzd2l0Y2ggbWF5IHRyYXAsIGRyb3Agb3IgZmxvb2QgdGhpcyBwYWNrZXQKKyAqICAgICAgKDEpIFRoZSB1bmtub3duIG11bHRpY2FzdCBwYWNrZXQgdHlwZSBpcyBhcyBmb2xsb3dpbmc6CisgKiAgICAgICAgICAtIE1DQVNUX0wyCisgKiAgICAgICAgICAtIE1DQVNUX0lQVjQKKyAqICAgICAgICAgIC0gTUNBU1RfSVBWNgorICogICAgICAoMikgVGhlIHVua25vd24gbXVsdGljYXN0IGFjdGlvbiBpcyBhcyBmb2xsb3dpbmc6CisgKiAgICAgICAgICAtIE1DQVNUX0FDVElPTl9GT1JXQVJECisgKiAgICAgICAgICAtIE1DQVNUX0FDVElPTl9EUk9QCisgKiAgICAgICAgICAtIE1DQVNUX0FDVElPTl9UUkFQMkNQVQorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfdHJhcF91bmtub3duTWNhc3RQa3RBY3Rpb25fZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX21jYXN0X3R5cGVfdCB0eXBlLCBydGtfdHJhcF9tY2FzdF9hY3Rpb25fdCAqcE1jYXN0X2FjdGlvbik7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a190cmFwX2xsZHBFbmFibGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IExMRFAgZW5hYmxlLgorICogSW5wdXQ6CisgKiAgICAgIGVuYWJsZWQgLSBMTERQIGVuYWJsZSwgMDogZm9sbG93IFJNQSwgMTogdXNlIExMRFAgYWN0aW9uLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9OT1RfQUxMT1dFRCAgICAgIC0gSW52YWxpZCBhY3Rpb24uCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgLSBETUFDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc2lnbm1lbnQKKyAqICAgICAgLSAwMTo4MDpjMjowMDowMDowZSBldGhlcnR5cGUgPSAweDg4Q0MgICAgTExEUAorICogICAgICAtIDAxOjgwOmMyOjAwOjAwOjAzIGV0aGVydHlwZSA9IDB4ODhDQworICogICAgICAtIDAxOjgwOmMyOjAwOjAwOjAwIGV0aGVydHlwZSA9IDB4ODhDQworCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a190cmFwX2xsZHBFbmFibGVfc2V0KHJ0a19lbmFibGVfdCBlbmFibGVkKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3RyYXBfbGxkcEVuYWJsZV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgTExEUCBzdGF0dXMuCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwRW5hYmxlZCAtIExMRFAgZW5hYmxlLCAwOiBmb2xsb3cgUk1BLCAxOiB1c2UgTExEUCBhY3Rpb24uCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBMTERQIGlzIGFzIGZvbGxvd2luZyBkZWZpbml0aW9uLgorICogICAgICAtIERNQUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzaWdubWVudAorICogICAgICAtIDAxOjgwOmMyOjAwOjAwOjBlIGV0aGVydHlwZSA9IDB4ODhDQyAgICBMTERQCisgKiAgICAgIC0gMDE6ODA6YzI6MDA6MDA6MDMgZXRoZXJ0eXBlID0gMHg4OENDCisgKiAgICAgIC0gMDE6ODA6YzI6MDA6MDA6MDAgZXRoZXJ0eXBlID0gMHg4OENDCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a190cmFwX2xsZHBFbmFibGVfZ2V0KHJ0a19lbmFibGVfdCAqcEVuYWJsZWQpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdHJhcF9yZWFzb25UcmFwVG9DcHVQcmlvcml0eV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgcHJpb3JpdHkgdmFsdWUgb2YgYSBwYWNrZXQgdGhhdCB0cmFwcGVkIHRvIENQVSBwb3J0IGFjY29yZGluZyB0byBzcGVjaWZpYyByZWFzb24uCisgKiBJbnB1dDoKKyAqICAgICAgdHlwZSAgICAgLSByZWFzb24gdGhhdCB0cmFwIHRvIENQVSBwb3J0LgorICogICAgICBwcmlvcml0eSAtIGludGVybmFsIHByaW9yaXR5IHRoYXQgaXMgZ29pbmcgdG8gYmUgc2V0IGZvciBzcGVjaWZpYyB0cmFwIHJlYXNvbi4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX05PVF9JTklUIC0gVGhlIG1vZHVsZSBpcyBub3QgaW5pdGlhbAorICogICAgICBSVF9FUlJfSU5QVVQgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcgorICogTm90ZToKKyAqICAgICAgQ3VycmVudGx5IHRoZSB0cmFwIHJlYXNvbiB0aGF0IHN1cHBvcnRlZCBhcmUgbGlzdGVkIGFzIGZvbGxvd3M6CisgKiAgICAgIC0gVFJBUF9SRUFTT05fUk1BCisgKiAgICAgIC0gVFJBUF9SRUFTT05fT0FNCisgKiAgICAgIC0gVFJBUF9SRUFTT05fMVhVTkFVVEgKKyAqICAgICAgLSBUUkFQX1JFQVNPTl9WTEFOU1RBQ0sKKyAqICAgICAgLSBUUkFQX1JFQVNPTl9VTktOT1dOTUMKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3RyYXBfcmVhc29uVHJhcFRvQ3B1UHJpb3JpdHlfc2V0KHJ0a190cmFwX3JlYXNvbl90eXBlX3QgdHlwZSwgcnRrX3ByaV90IHByaW9yaXR5KTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3RyYXBfcmVhc29uVHJhcFRvQ3B1UHJpb3JpdHlfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHByaW9yaXR5IHZhbHVlIG9mIGEgcGFja2V0IHRoYXQgdHJhcHBlZCB0byBDUFUgcG9ydCBhY2NvcmRpbmcgdG8gc3BlY2lmaWMgcmVhc29uLgorICogSW5wdXQ6CisgKiAgICAgIHR5cGUgICAgICAtIHJlYXNvbiB0aGF0IHRyYXAgdG8gQ1BVIHBvcnQuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBQcmlvcml0eSAtIGNvbmZpZ3VyZWQgaW50ZXJuYWwgcHJpb3JpdHkgZm9yIHN1Y2ggcmVhc29uLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfTk9UX0lOSVQgICAgIC0gVGhlIG1vZHVsZSBpcyBub3QgaW5pdGlhbAorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAtIE5VTEwgcG9pbnRlcgorICogTm90ZToKKyAqICAgICAgQ3VycmVudGx5IHRoZSB0cmFwIHJlYXNvbiB0aGF0IHN1cHBvcnRlZCBhcmUgbGlzdGVkIGFzIGZvbGxvd3M6CisgKiAgICAgIC0gVFJBUF9SRUFTT05fUk1BCisgKiAgICAgIC0gVFJBUF9SRUFTT05fT0FNCisgKiAgICAgIC0gVFJBUF9SRUFTT05fMVhVTkFVVEgKKyAqICAgICAgLSBUUkFQX1JFQVNPTl9WTEFOU1RBQ0sKKyAqICAgICAgLSBUUkFQX1JFQVNPTl9VTktOT1dOTUMKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3RyYXBfcmVhc29uVHJhcFRvQ3B1UHJpb3JpdHlfZ2V0KHJ0a190cmFwX3JlYXNvbl90eXBlX3QgdHlwZSwgcnRrX3ByaV90ICpwUHJpb3JpdHkpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdHJhcF9ybWFBY3Rpb25fc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IFJlc2VydmVkIG11bHRpY2FzdCBhZGRyZXNzIGFjdGlvbiBjb25maWd1cmF0aW9uLgorICogSW5wdXQ6CisgKiAgICAgIHR5cGUgICAgLSBybWEgdHlwZS4KKyAqICAgICAgcm1hX2FjdGlvbiAtIFJNQSBhY3Rpb24uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX0VOQUJMRSAgICAgICAtIEludmFsaWQgSUZHIHBhcmFtZXRlcgorICogTm90ZToKKyAqCisgKiAgICAgIFRoZXJlIGFyZSA0OCB0eXBlcyBvZiBSZXNlcnZlZCBNdWx0aWNhc3QgQWRkcmVzcyBmcmFtZSBmb3IgYXBwbGljYXRpb24gdXNhZ2UuCisgKiAgICAgICgxKVRoZXkgYXJlIGFzIGZvbGxvd2luZyBkZWZpbml0aW9uLgorICogICAgICAtIFRSQVBfQlJHX0dST1VQLAorICogICAgICAtIFRSQVBfRkRfUEFVU0UsCisgKiAgICAgIC0gVFJBUF9TUF9NQ0FTVCwKKyAqICAgICAgLSBUUkFQXzFYX1BBRSwKKyAqICAgICAgLSBUUkFQX1VOREVGX0JSR18wNCwKKyAqICAgICAgLSBUUkFQX1VOREVGX0JSR18wNSwKKyAqICAgICAgLSBUUkFQX1VOREVGX0JSR18wNiwKKyAqICAgICAgLSBUUkFQX1VOREVGX0JSR18wNywKKyAqICAgICAgLSBUUkFQX1BST1ZJREVSX0JSSURHRV9HUk9VUF9BRERSRVNTLAorICogICAgICAtIFRSQVBfVU5ERUZfQlJHXzA5LAorICogICAgICAtIFRSQVBfVU5ERUZfQlJHXzBBLAorICogICAgICAtIFRSQVBfVU5ERUZfQlJHXzBCLAorICogICAgICAtIFRSQVBfVU5ERUZfQlJHXzBDLAorICogICAgICAtIFRSQVBfUFJPVklERVJfQlJJREdFX0dWUlBfQUREUkVTUywKKyAqICAgICAgLSBUUkFQXzgwMjFBQiwKKyAqICAgICAgLSBUUkFQX1VOREVGX0JSR18wRiwKKyAqICAgICAgLSBUUkFQX0JSR19NTkdFTUVOVCwKKyAqICAgICAgLSBUUkFQX1VOREVGSU5FRF8xMSwKKyAqICAgICAgLSBUUkFQX1VOREVGSU5FRF8xMiwKKyAqICAgICAgLSBUUkFQX1VOREVGSU5FRF8xMywKKyAqICAgICAgLSBUUkFQX1VOREVGSU5FRF8xNCwKKyAqICAgICAgLSBUUkFQX1VOREVGSU5FRF8xNSwKKyAqICAgICAgLSBUUkFQX1VOREVGSU5FRF8xNiwKKyAqICAgICAgLSBUUkFQX1VOREVGSU5FRF8xNywKKyAqICAgICAgLSBUUkFQX1VOREVGSU5FRF8xOCwKKyAqICAgICAgLSBUUkFQX1VOREVGSU5FRF8xOSwKKyAqICAgICAgLSBUUkFQX1VOREVGSU5FRF8xQSwKKyAqICAgICAgLSBUUkFQX1VOREVGSU5FRF8xQiwKKyAqICAgICAgLSBUUkFQX1VOREVGSU5FRF8xQywKKyAqICAgICAgLSBUUkFQX1VOREVGSU5FRF8xRCwKKyAqICAgICAgLSBUUkFQX1VOREVGSU5FRF8xRSwKKyAqICAgICAgLSBUUkFQX1VOREVGSU5FRF8xRiwKKyAqICAgICAgLSBUUkFQX0dNUlAsCisgKiAgICAgIC0gVFJBUF9HVlJQLAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yMiwKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMjMsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzI0LAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yNSwKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMjYsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzI3LAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yOCwKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMjksCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzJBLAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yQiwKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMkMsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzJELAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yRSwKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMkYsCisgKiAgICAgIC0gVFJBUF9DRFAuCisgKiAgICAgIC0gVFJBUF9DU1NUUC4KKyAqICAgICAgLSBUUkFQX0xMRFAuCisgKiAgICAgICgyKSBUaGUgUk1BIGFjdGlvbiBpcyBhcyBmb2xsb3dpbmc6CisgKiAgICAgIC0gUk1BX0FDVElPTl9GT1JXQVJECisgKiAgICAgIC0gUk1BX0FDVElPTl9UUkFQMkNQVQorICogICAgICAtIFJNQV9BQ1RJT05fRFJPUAorICogICAgICAtIFJNQV9BQ1RJT05fRk9SV0FSRF9FWENMVURFX0NQVQorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfdHJhcF9ybWFBY3Rpb25fc2V0KHJ0a190cmFwX3R5cGVfdCB0eXBlLCBydGtfdHJhcF9ybWFfYWN0aW9uX3Qgcm1hX2FjdGlvbik7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a190cmFwX3JtYUFjdGlvbl9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgUmVzZXJ2ZWQgbXVsdGljYXN0IGFkZHJlc3MgYWN0aW9uIGNvbmZpZ3VyYXRpb24uCisgKiBJbnB1dDoKKyAqICAgICAgdHlwZSAtIHJtYSB0eXBlLgorICogT3V0cHV0OgorICogICAgICBwUm1hX2FjdGlvbiAtIFJNQSBhY3Rpb24uCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGVyZSBhcmUgNDggdHlwZXMgb2YgUmVzZXJ2ZWQgTXVsdGljYXN0IEFkZHJlc3MgZnJhbWUgZm9yIGFwcGxpY2F0aW9uIHVzYWdlLgorICogICAgICAoMSlUaGV5IGFyZSBhcyBmb2xsb3dpbmcgZGVmaW5pdGlvbi4KKyAqICAgICAgLSBUUkFQX0JSR19HUk9VUCwKKyAqICAgICAgLSBUUkFQX0ZEX1BBVVNFLAorICogICAgICAtIFRSQVBfU1BfTUNBU1QsCisgKiAgICAgIC0gVFJBUF8xWF9QQUUsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9CUkdfMDQsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9CUkdfMDUsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9CUkdfMDYsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9CUkdfMDcsCisgKiAgICAgIC0gVFJBUF9QUk9WSURFUl9CUklER0VfR1JPVVBfQUREUkVTUywKKyAqICAgICAgLSBUUkFQX1VOREVGX0JSR18wOSwKKyAqICAgICAgLSBUUkFQX1VOREVGX0JSR18wQSwKKyAqICAgICAgLSBUUkFQX1VOREVGX0JSR18wQiwKKyAqICAgICAgLSBUUkFQX1VOREVGX0JSR18wQywKKyAqICAgICAgLSBUUkFQX1BST1ZJREVSX0JSSURHRV9HVlJQX0FERFJFU1MsCisgKiAgICAgIC0gVFJBUF84MDIxQUIsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9CUkdfMEYsCisgKiAgICAgIC0gVFJBUF9CUkdfTU5HRU1FTlQsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTEsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTIsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTMsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTQsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTUsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTYsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTcsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTgsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTksCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMUEsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMUIsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMUMsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMUQsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMUUsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMUYsCisgKiAgICAgIC0gVFJBUF9HTVJQLAorICogICAgICAtIFRSQVBfR1ZSUCwKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMjIsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzIzLAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yNCwKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMjUsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzI2LAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yNywKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMjgsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzI5LAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yQSwKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMkIsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzJDLAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yRCwKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMkUsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzJGLAorICogICAgICAtIFRSQVBfQ0RQLgorICogICAgICAtIFRSQVBfQ1NTVFAuCisgKiAgICAgIC0gVFJBUF9MTERQLgorICogICAgICAoMikgVGhlIFJNQSBhY3Rpb24gaXMgYXMgZm9sbG93aW5nOgorICogICAgICAtIFJNQV9BQ1RJT05fRk9SV0FSRAorICogICAgICAtIFJNQV9BQ1RJT05fVFJBUDJDUFUKKyAqICAgICAgLSBSTUFfQUNUSU9OX0RST1AKKyAqICAgICAgLSBSTUFfQUNUSU9OX0ZPUldBUkRfRVhDTFVERV9DUFUKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3RyYXBfcm1hQWN0aW9uX2dldChydGtfdHJhcF90eXBlX3QgdHlwZSwgcnRrX3RyYXBfcm1hX2FjdGlvbl90ICpwUm1hX2FjdGlvbik7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a190cmFwX3JtYUtlZXBGb3JtYXRfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IFJlc2VydmVkIG11bHRpY2FzdCBhZGRyZXNzIGtlZXAgZm9ybWF0IGNvbmZpZ3VyYXRpb24uCisgKiBJbnB1dDoKKyAqICAgICAgdHlwZSAgICAtIHJtYSB0eXBlLgorICogICAgICBlbmFibGUgLSBlbmFibGUga2VlcCBmb3JtYXQuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX0VOQUJMRSAgICAgICAtIEludmFsaWQgSUZHIHBhcmFtZXRlcgorICogTm90ZToKKyAqCisgKiAgICAgIFRoZXJlIGFyZSA0OCB0eXBlcyBvZiBSZXNlcnZlZCBNdWx0aWNhc3QgQWRkcmVzcyBmcmFtZSBmb3IgYXBwbGljYXRpb24gdXNhZ2UuCisgKiAgICAgIFRoZXkgYXJlIGFzIGZvbGxvd2luZyBkZWZpbml0aW9uLgorICogICAgICAtIFRSQVBfQlJHX0dST1VQLAorICogICAgICAtIFRSQVBfRkRfUEFVU0UsCisgKiAgICAgIC0gVFJBUF9TUF9NQ0FTVCwKKyAqICAgICAgLSBUUkFQXzFYX1BBRSwKKyAqICAgICAgLSBUUkFQX1VOREVGX0JSR18wNCwKKyAqICAgICAgLSBUUkFQX1VOREVGX0JSR18wNSwKKyAqICAgICAgLSBUUkFQX1VOREVGX0JSR18wNiwKKyAqICAgICAgLSBUUkFQX1VOREVGX0JSR18wNywKKyAqICAgICAgLSBUUkFQX1BST1ZJREVSX0JSSURHRV9HUk9VUF9BRERSRVNTLAorICogICAgICAtIFRSQVBfVU5ERUZfQlJHXzA5LAorICogICAgICAtIFRSQVBfVU5ERUZfQlJHXzBBLAorICogICAgICAtIFRSQVBfVU5ERUZfQlJHXzBCLAorICogICAgICAtIFRSQVBfVU5ERUZfQlJHXzBDLAorICogICAgICAtIFRSQVBfUFJPVklERVJfQlJJREdFX0dWUlBfQUREUkVTUywKKyAqICAgICAgLSBUUkFQXzgwMjFBQiwKKyAqICAgICAgLSBUUkFQX1VOREVGX0JSR18wRiwKKyAqICAgICAgLSBUUkFQX0JSR19NTkdFTUVOVCwKKyAqICAgICAgLSBUUkFQX1VOREVGSU5FRF8xMSwKKyAqICAgICAgLSBUUkFQX1VOREVGSU5FRF8xMiwKKyAqICAgICAgLSBUUkFQX1VOREVGSU5FRF8xMywKKyAqICAgICAgLSBUUkFQX1VOREVGSU5FRF8xNCwKKyAqICAgICAgLSBUUkFQX1VOREVGSU5FRF8xNSwKKyAqICAgICAgLSBUUkFQX1VOREVGSU5FRF8xNiwKKyAqICAgICAgLSBUUkFQX1VOREVGSU5FRF8xNywKKyAqICAgICAgLSBUUkFQX1VOREVGSU5FRF8xOCwKKyAqICAgICAgLSBUUkFQX1VOREVGSU5FRF8xOSwKKyAqICAgICAgLSBUUkFQX1VOREVGSU5FRF8xQSwKKyAqICAgICAgLSBUUkFQX1VOREVGSU5FRF8xQiwKKyAqICAgICAgLSBUUkFQX1VOREVGSU5FRF8xQywKKyAqICAgICAgLSBUUkFQX1VOREVGSU5FRF8xRCwKKyAqICAgICAgLSBUUkFQX1VOREVGSU5FRF8xRSwKKyAqICAgICAgLSBUUkFQX1VOREVGSU5FRF8xRiwKKyAqICAgICAgLSBUUkFQX0dNUlAsCisgKiAgICAgIC0gVFJBUF9HVlJQLAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yMiwKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMjMsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzI0LAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yNSwKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMjYsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzI3LAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yOCwKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMjksCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzJBLAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yQiwKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMkMsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzJELAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yRSwKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMkYsCisgKiAgICAgIC0gVFJBUF9DRFAuCisgKiAgICAgIC0gVFJBUF9DU1NUUC4KKyAqICAgICAgLSBUUkFQX0xMRFAuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a190cmFwX3JtYUtlZXBGb3JtYXRfc2V0KHJ0a190cmFwX3R5cGVfdCB0eXBlLCBydGtfZW5hYmxlX3QgZW5hYmxlKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3RyYXBfcm1hS2VlcEZvcm1hdF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgUmVzZXJ2ZWQgbXVsdGljYXN0IGFkZHJlc3MgYWN0aW9uIGNvbmZpZ3VyYXRpb24uCisgKiBJbnB1dDoKKyAqICAgICAgdHlwZSAtIHJtYSB0eXBlLgorICogT3V0cHV0OgorICogICAgICBwRW5hYmxlIC0ga2VlcCBmb3JtYXQgc3RhdHVzLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhlcmUgYXJlIDQ4IHR5cGVzIG9mIFJlc2VydmVkIE11bHRpY2FzdCBBZGRyZXNzIGZyYW1lIGZvciBhcHBsaWNhdGlvbiB1c2FnZS4KKyAqICAgICAgVGhleSBhcmUgYXMgZm9sbG93aW5nIGRlZmluaXRpb24uCisgKiAgICAgIC0gVFJBUF9CUkdfR1JPVVAsCisgKiAgICAgIC0gVFJBUF9GRF9QQVVTRSwKKyAqICAgICAgLSBUUkFQX1NQX01DQVNULAorICogICAgICAtIFRSQVBfMVhfUEFFLAorICogICAgICAtIFRSQVBfVU5ERUZfQlJHXzA0LAorICogICAgICAtIFRSQVBfVU5ERUZfQlJHXzA1LAorICogICAgICAtIFRSQVBfVU5ERUZfQlJHXzA2LAorICogICAgICAtIFRSQVBfVU5ERUZfQlJHXzA3LAorICogICAgICAtIFRSQVBfUFJPVklERVJfQlJJREdFX0dST1VQX0FERFJFU1MsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9CUkdfMDksCisgKiAgICAgIC0gVFJBUF9VTkRFRl9CUkdfMEEsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9CUkdfMEIsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9CUkdfMEMsCisgKiAgICAgIC0gVFJBUF9QUk9WSURFUl9CUklER0VfR1ZSUF9BRERSRVNTLAorICogICAgICAtIFRSQVBfODAyMUFCLAorICogICAgICAtIFRSQVBfVU5ERUZfQlJHXzBGLAorICogICAgICAtIFRSQVBfQlJHX01OR0VNRU5ULAorICogICAgICAtIFRSQVBfVU5ERUZJTkVEXzExLAorICogICAgICAtIFRSQVBfVU5ERUZJTkVEXzEyLAorICogICAgICAtIFRSQVBfVU5ERUZJTkVEXzEzLAorICogICAgICAtIFRSQVBfVU5ERUZJTkVEXzE0LAorICogICAgICAtIFRSQVBfVU5ERUZJTkVEXzE1LAorICogICAgICAtIFRSQVBfVU5ERUZJTkVEXzE2LAorICogICAgICAtIFRSQVBfVU5ERUZJTkVEXzE3LAorICogICAgICAtIFRSQVBfVU5ERUZJTkVEXzE4LAorICogICAgICAtIFRSQVBfVU5ERUZJTkVEXzE5LAorICogICAgICAtIFRSQVBfVU5ERUZJTkVEXzFBLAorICogICAgICAtIFRSQVBfVU5ERUZJTkVEXzFCLAorICogICAgICAtIFRSQVBfVU5ERUZJTkVEXzFDLAorICogICAgICAtIFRSQVBfVU5ERUZJTkVEXzFELAorICogICAgICAtIFRSQVBfVU5ERUZJTkVEXzFFLAorICogICAgICAtIFRSQVBfVU5ERUZJTkVEXzFGLAorICogICAgICAtIFRSQVBfR01SUCwKKyAqICAgICAgLSBUUkFQX0dWUlAsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzIyLAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yMywKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMjQsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzI1LAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yNiwKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMjcsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzI4LAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yOSwKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMkEsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzJCLAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yQywKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMkQsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzJFLAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yRiwKKyAqICAgICAgLSBUUkFQX0NEUC4KKyAqICAgICAgLSBUUkFQX0NTU1RQLgorICogICAgICAtIFRSQVBfTExEUC4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3RyYXBfcm1hS2VlcEZvcm1hdF9nZXQocnRrX3RyYXBfdHlwZV90IHR5cGUsIHJ0a19lbmFibGVfdCAqcEVuYWJsZSk7CisKKworI2VuZGlmIC8qIF9fUlRLX0FQSV9UUkFQX0hfXyAqLworCisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3RydW5rLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS90cnVuay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmZjYxNzYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW5jbHVkZS90cnVuay5oCkBAIC0wLDAgKzEsMzI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqIFB1cnBvc2UgOiBSVEw4MzY3L1JUTDgzNjdDIHN3aXRjaCBoaWdoLWxldmVsIEFQSQorICoKKyAqIEZlYXR1cmUgOiBUaGUgZmlsZSBpbmNsdWRlcyBUcnVuayBtb2R1bGUgaGlnaC1sYXllciBUUlVOSyBkZWZpbmF0aW9uCisgKgorICovCisKKyNpZm5kZWYgX19SVEtfQVBJX1RSVU5LX0hfXworI2RlZmluZSBfX1JUS19BUElfVFJVTktfSF9fCisKKy8qCisgKiBEYXRhIFR5cGUgRGVjbGFyYXRpb24KKyAqLworI2RlZmluZSAgICBSVEtfVFJVTktfRFBPUlRfSEFTSF9NQVNLICAgICAweDQwCisjZGVmaW5lICAgIFJUS19UUlVOS19TUE9SVF9IQVNIX01BU0sgICAgIDB4MjAKKyNkZWZpbmUgICAgUlRLX1RSVU5LX0RJUF9IQVNIX01BU0sgICAgICAgMHgxMAorI2RlZmluZSAgICBSVEtfVFJVTktfU0lQX0hBU0hfTUFTSyAgICAgICAweDgKKyNkZWZpbmUgICAgUlRLX1RSVU5LX0RNQUNfSEFTSF9NQVNLICAgICAgMHg0CisjZGVmaW5lICAgIFJUS19UUlVOS19TTUFDX0hBU0hfTUFTSyAgICAgIDB4MgorI2RlZmluZSAgICBSVEtfVFJVTktfU1BBX0hBU0hfTUFTSyAgICAgICAweDEKKworCisjZGVmaW5lIFJUS19NQVhfTlVNX09GX1RSVU5LX0hBU0hfVkFMICAgICAgICAgICAgICAgMTYKKwordHlwZWRlZiBzdHJ1Y3QgIHJ0a190cnVua19oYXNoVmFsMlBvcnRfcworeworICAgIHJ0a191aW50OCB2YWx1ZVtSVEtfTUFYX05VTV9PRl9UUlVOS19IQVNIX1ZBTF07Cit9IHJ0a190cnVua19oYXNoVmFsMlBvcnRfdDsKKwordHlwZWRlZiBlbnVtIHJ0a190cnVua19ncm91cF9lCit7CisgICAgVFJVTktfR1JPVVAwID0gMCwKKyAgICBUUlVOS19HUk9VUDEsCisgICAgVFJVTktfR1JPVVAyLAorICAgIFRSVU5LX0dST1VQMywKKyAgICBUUlVOS19HUk9VUF9FTkQKK30gcnRrX3RydW5rX2dyb3VwX3Q7CisKK3R5cGVkZWYgZW51bSBydGtfdHJ1bmtfc2VwYXJhdGVUeXBlX2UKK3sKKyAgICBTRVBBUkFURV9OT05FID0gMCwKKyAgICBTRVBBUkFURV9GTE9PRCwKKyAgICBTRVBBUkFURV9FTkQKKworfSBydGtfdHJ1bmtfc2VwYXJhdGVUeXBlX3Q7CisKK3R5cGVkZWYgZW51bSBydGtfdHJ1bmtfbW9kZV9lCit7CisgICAgVFJVTktfTU9ERV9OT1JNQUwgPSAwLAorICAgIFRSVU5LX01PREVfRFVNQiwKKyAgICBUUlVOS19NT0RFX0VORAorfSBydGtfdHJ1bmtfbW9kZV90OworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdHJ1bmtfcG9ydF9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgdHJ1bmtpbmcgZ3JvdXAgYXZhaWxhYmxlIHBvcnQgbWFzaworICogSW5wdXQ6CisgKiAgICAgIHRya19naWQgICAgICAgICAgICAgICAgIC0gdHJ1bmsgZ3JvdXAgaWQKKyAqICAgICAgcFRydW5rX21lbWJlcl9wb3J0bWFzayAgLSBMb2dpYyB0cnVua2luZyBtZW1iZXIgcG9ydCBtYXNrCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0xBX1RSVU5LX0lEICAtIEludmFsaWQgdHJ1bmtpbmcgZ3JvdXAKKyAqICAgICAgUlRfRVJSX1BPUlRfTUFTSyAgICAtIEludmFsaWQgcG9ydG1hc2suCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBzZXQgcG9ydCB0cnVua2luZyBncm91cCBwb3J0IG1hc2suIEVhY2ggcG9ydCB0cnVua2luZyBncm91cCBoYXMgbWF4IDQgcG9ydHMuCisgKiAgICAgIElmIGVuYWJsZWQgcG9ydCBtYXNrIGhhcyBsZXNzIHRoYW4gMiBwb3J0cyBhdmFpbGFibGUgc2V0dGluZywgdGhlbiB0aGlzIHRydW5raW5nIGdyb3VwIGZ1bmN0aW9uIGlzIGRpc2FibGVkLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfdHJ1bmtfcG9ydF9zZXQocnRrX3RydW5rX2dyb3VwX3QgdHJrX2dpZCwgcnRrX3BvcnRtYXNrX3QgKnBUcnVua19tZW1iZXJfcG9ydG1hc2spOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdHJ1bmtfcG9ydF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgdHJ1bmtpbmcgZ3JvdXAgYXZhaWxhYmxlIHBvcnQgbWFzaworICogSW5wdXQ6CisgKiAgICAgIHRya19naWQgLSB0cnVuayBncm91cCBpZAorICogT3V0cHV0OgorICogICAgICBwVHJ1bmtfbWVtYmVyX3BvcnRtYXNrIC0gTG9naWMgdHJ1bmtpbmcgbWVtYmVyIHBvcnQgbWFzaworICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfTEFfVFJVTktfSUQgIC0gSW52YWxpZCB0cnVua2luZyBncm91cAorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IDIgcG9ydCB0cnVua2luZyBncm91cC4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3RydW5rX3BvcnRfZ2V0KHJ0a190cnVua19ncm91cF90IHRya19naWQsIHJ0a19wb3J0bWFza190ICpwVHJ1bmtfbWVtYmVyX3BvcnRtYXNrKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3RydW5rX2Rpc3RyaWJ1dGlvbkFsZ29yaXRobV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgcG9ydCB0cnVua2luZyBoYXNoIHNlbGVjdCBzb3VyY2VzCisgKiBJbnB1dDoKKyAqICAgICAgdHJrX2dpZCAgICAgICAgIC0gdHJ1bmsgZ3JvdXAgaWQKKyAqICAgICAgYWxnb19iaXRtYXNrICAgIC0gQml0bWFzayBvZiB0aGUgZGlzdHJpYnV0aW9uIGFsZ29yaXRobQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9MQV9UUlVOS19JRCAgLSBJbnZhbGlkIHRydW5raW5nIGdyb3VwCisgKiAgICAgIFJUX0VSUl9MQV9IQVNITUFTSyAgLSBIYXNoIGFsZ29yaXRobSBzZWxlY3Rpb24gZXJyb3IuCisgKiAgICAgIFJUX0VSUl9QT1JUX01BU0sgICAgLSBJbnZhbGlkIHBvcnRtYXNrLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gc2V0IHBvcnQgdHJ1bmtpbmcgaGFzaCBhbGdvcml0aG0gc291cmNlcy4KKyAqICAgICAgNyBiaXRzIG1hc2sgZm9yIGxpbmsgYWdncmVnYXRpb24gZ3JvdXAwIGhhc2ggcGFyYW1ldGVyIHNlbGVjdGlvbiB7RElQLCBTSVAsIERNQUMsIFNNQUMsIFNQQX0KKyAqICAgICAgLSAwYjAwMDAwMDE6IFNQQQorICogICAgICAtIDBiMDAwMDAxMDogU01BQworICogICAgICAtIDBiMDAwMDEwMDogRE1BQworICogICAgICAtIDBiMDAwMTAwMDogU0lQCisgKiAgICAgIC0gMGIwMDEwMDAwOiBESVAKKyAqICAgICAgLSAwYjAxMDAwMDA6IFRDUC9VRFAgU291cmNlIFBvcnQKKyAqICAgICAgLSAwYjEwMDAwMDA6IFRDUC9VRFAgRGVzdGluYXRpb24gUG9ydAorICogICAgICBFeGFtcGxlOgorICogICAgICAtIDBiMDAwMDAxMTogU01BQyAmIFNQQQorICogICAgICAtIE5vdGUgdGhhdCBpdCBjb3VsZCBiZSBhbiBhcmJpdHJhcnkgY29tYmluYXRpb24gb3IgaW5kZXBlbmRlbnQgc2V0CisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a190cnVua19kaXN0cmlidXRpb25BbGdvcml0aG1fc2V0KHJ0a190cnVua19ncm91cF90IHRya19naWQsIHJ0a191aW50MzIgYWxnb19iaXRtYXNrKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3RydW5rX2Rpc3RyaWJ1dGlvbkFsZ29yaXRobV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcG9ydCB0cnVua2luZyBoYXNoIHNlbGVjdCBzb3VyY2VzCisgKiBJbnB1dDoKKyAqICAgICAgdHJrX2dpZCAtIHRydW5rIGdyb3VwIGlkCisgKiBPdXRwdXQ6CisgKiAgICAgIHBBbGdvX2JpdG1hc2sgLSAgQml0bWFzayBvZiB0aGUgZGlzdHJpYnV0aW9uIGFsZ29yaXRobQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfTEFfVFJVTktfSUQgIC0gSW52YWxpZCB0cnVua2luZyBncm91cAorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IHBvcnQgdHJ1bmtpbmcgaGFzaCBhbGdvcml0aG0gc291cmNlcy4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3RydW5rX2Rpc3RyaWJ1dGlvbkFsZ29yaXRobV9nZXQocnRrX3RydW5rX2dyb3VwX3QgdHJrX2dpZCwgcnRrX3VpbnQzMiAqcEFsZ29fYml0bWFzayk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a190cnVua190cmFmZmljU2VwYXJhdGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHRoZSB0cmFmZmljIHNlcGFyYXRpb24gc2V0dGluZyBvZiBhIHRydW5rIGdyb3VwIGZyb20gdGhlIHNwZWNpZmllZCBkZXZpY2UuCisgKiBJbnB1dDoKKyAqICAgICAgdHJrX2dpZCAgICAgIC0gdHJ1bmsgZ3JvdXAgaWQKKyAqICAgICAgc2VwYXJhdGVUeXBlICAgICAtIHRyYWZmaWMgc2VwYXJhdGlvbiBzZXR0aW5nCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX1VOSVRfSUQgICAgIC0gaW52YWxpZCB1bml0IGlkCisgKiAgICAgIFJUX0VSUl9MQV9UUlVOS19JRCAtIGludmFsaWQgdHJ1bmsgSUQKKyAqICAgICAgUlRfRVJSX0xBX0hBU0hNQVNLIC0gaW52YWxpZCBoYXNoIG1hc2sKKyAqIE5vdGU6CisgKiAgICAgIFNFUEFSQVRFX05PTkU6IGRpc2FibGUgdHJhZmZpYyBzZXBhcmF0aW9uCisgKiAgICAgIFNFUEFSQVRFX0ZMT09EOiB0cnVuayBNU0IgbGluayB1cCBwb3J0IGlzIGRlZGljYXRlZCB0byBUWCBmbG9vZGluZyAoTDIgbG9va3VwIG1pc3MpIHRyYWZmaWMKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3RydW5rX3RyYWZmaWNTZXBhcmF0ZV9zZXQocnRrX3RydW5rX2dyb3VwX3QgdHJrX2dpZCwgcnRrX3RydW5rX3NlcGFyYXRlVHlwZV90IHNlcGFyYXRlVHlwZSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a190cnVua190cmFmZmljU2VwYXJhdGVfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHRoZSB0cmFmZmljIHNlcGFyYXRpb24gc2V0dGluZyBvZiBhIHRydW5rIGdyb3VwIGZyb20gdGhlIHNwZWNpZmllZCBkZXZpY2UuCisgKiBJbnB1dDoKKyAqICAgICAgdHJrX2dpZCAgICAgICAgLSB0cnVuayBncm91cCBpZAorICogT3V0cHV0OgorICogICAgICBwU2VwYXJhdGVUeXBlICAgLSBwb2ludGVyIHNlcGFyYXRlZCB0cmFmZmljIHR5cGUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX1VOSVRfSUQgICAgICAtIGludmFsaWQgdW5pdCBpZAorICogICAgICBSVF9FUlJfTEFfVFJVTktfSUQgIC0gaW52YWxpZCB0cnVuayBJRAorICogICAgICBSVF9FUlJfTlVMTF9QT0lOVEVSIC0gaW5wdXQgcGFyYW1ldGVyIG1heSBiZSBudWxsIHBvaW50ZXIKKyAqIE5vdGU6CisgKiAgICAgIFNFUEFSQVRFX05PTkU6IGRpc2FibGUgdHJhZmZpYyBzZXBhcmF0aW9uCisgKiAgICAgIFNFUEFSQVRFX0ZMT09EOiB0cnVuayBNU0IgbGluayB1cCBwb3J0IGlzIGRlZGljYXRlZCB0byBUWCBmbG9vZGluZyAoTDIgbG9va3VwIG1pc3MpIHRyYWZmaWMKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3RydW5rX3RyYWZmaWNTZXBhcmF0ZV9nZXQocnRrX3RydW5rX2dyb3VwX3QgdHJrX2dpZCwgcnRrX3RydW5rX3NlcGFyYXRlVHlwZV90ICpwU2VwYXJhdGVUeXBlKTsKKworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdHJ1bmtfbW9kZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgdGhlIHRydW5rIG1vZGUgdG8gdGhlIHNwZWNpZmllZCBkZXZpY2UuCisgKiBJbnB1dDoKKyAqICAgICAgbW9kZSAtIHRydW5rIG1vZGUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfSU5QVVQgICAtIGludmFsaWQgaW5wdXQgcGFyYW1ldGVyCisgKiBOb3RlOgorICogICAgICBUaGUgZW51bSBvZiB0aGUgdHJ1bmsgbW9kZSBhcyBmb2xsb3dpbmcKKyAqICAgICAgLSBUUlVOS19NT0RFX05PUk1BTAorICogICAgICAtIFRSVU5LX01PREVfRFVNQgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfdHJ1bmtfbW9kZV9zZXQocnRrX3RydW5rX21vZGVfdCBtb2RlKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3RydW5rX21vZGVfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHRoZSB0cnVuayBtb2RlIGZyb20gdGhlIHNwZWNpZmllZCBkZXZpY2UuCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwTW9kZSAtIHBvaW50ZXIgYnVmZmVyIG9mIHRydW5rIG1vZGUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAtIGlucHV0IHBhcmFtZXRlciBtYXkgYmUgbnVsbCBwb2ludGVyCisgKiBOb3RlOgorICogICAgICBUaGUgZW51bSBvZiB0aGUgdHJ1bmsgbW9kZSBhcyBmb2xsb3dpbmcKKyAqICAgICAgLSBUUlVOS19NT0RFX05PUk1BTAorICogICAgICAtIFRSVU5LX01PREVfRFVNQgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfdHJ1bmtfbW9kZV9nZXQocnRrX3RydW5rX21vZGVfdCAqcE1vZGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdHJ1bmtfdHJhZmZpY1BhdXNlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCB0aGUgdHJhZmZpYyBwYXVzZSBzZXR0aW5nIG9mIGEgdHJ1bmsgZ3JvdXAuCisgKiBJbnB1dDoKKyAqICAgICAgdHJrX2dpZCAgICAgIC0gdHJ1bmsgZ3JvdXAgaWQKKyAqICAgICAgZW5hYmxlICAgICAgIC0gdHJhZmZpYyBwYXVzZSBzdGF0ZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiAgICAgIFJUX0VSUl9MQV9UUlVOS19JRCAtIGludmFsaWQgdHJ1bmsgSUQKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a190cnVua190cmFmZmljUGF1c2Vfc2V0KHJ0a190cnVua19ncm91cF90IHRya19naWQsIHJ0a19lbmFibGVfdCBlbmFibGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdHJ1bmtfdHJhZmZpY1BhdXNlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCB0aGUgdHJhZmZpYyBwYXVzZSBzZXR0aW5nIG9mIGEgdHJ1bmsgZ3JvdXAuCisgKiBJbnB1dDoKKyAqICAgICAgdHJrX2dpZCAgICAgICAgLSB0cnVuayBncm91cCBpZAorICogT3V0cHV0OgorICogICAgICBwRW5hYmxlICAgICAgICAtIHBvaW50ZXIgb2YgdHJhZmZpYyBwYXVzZSBzdGF0ZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX0xBX1RSVU5LX0lEICAtIGludmFsaWQgdHJ1bmsgSUQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAtIGlucHV0IHBhcmFtZXRlciBtYXkgYmUgbnVsbCBwb2ludGVyCisgKiBOb3RlOgorICogICAgICBOb25lLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfdHJ1bmtfdHJhZmZpY1BhdXNlX2dldChydGtfdHJ1bmtfZ3JvdXBfdCB0cmtfZ2lkLCBydGtfZW5hYmxlX3QgKnBFbmFibGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdHJ1bmtfaGFzaE1hcHBpbmdUYWJsZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgaGFzaCB2YWx1ZSB0byBwb3J0IGFycmF5IGluIHRoZSB0cnVuayBncm91cCBpZCBmcm9tIHRoZSBzcGVjaWZpZWQgZGV2aWNlLgorICogSW5wdXQ6CisgKiAgICAgIHRya19naWQgICAgICAgICAgLSB0cnVuayBncm91cCBpZAorICogICAgICBwSGFzaDJQb3J0X2FycmF5IC0gcG9ydHMgYXNzb2NpYXRlIHdpdGggdGhlIGhhc2ggdmFsdWUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfVU5JVF9JRCAgICAgICAgICAgIC0gaW52YWxpZCB1bml0IGlkCisgKiAgICAgIFJUX0VSUl9MQV9UUlVOS19JRCAgICAgICAgLSBpbnZhbGlkIHRydW5rIElECisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgICAgICAgLSBpbnB1dCBwYXJhbWV0ZXIgbWF5IGJlIG51bGwgcG9pbnRlcgorICogICAgICBSVF9FUlJfTEFfVFJVTktfTk9UX0VYSVNUIC0gdGhlIHRydW5rIGRvZXNuJ3QgZXhpc3QKKyAqICAgICAgUlRfRVJSX0xBX05PVF9NRU1CRVJfUE9SVCAtIHRoZSBwb3J0IGlzIG5vdCBhIG1lbWJlciBwb3J0IG9mIHRoZSB0cnVuaworICogICAgICBSVF9FUlJfTEFfQ1BVUE9SVCAgICAgICAgIC0gQ1BVIHBvcnQgY2FuIG5vdCBiZSBhZ2dyZWdhdGVkIHBvcnQKKyAqIE5vdGU6CisgKiAgICAgIFRydW5rIGdyb3VwIDAgJiAxIHNoYXJlcyB0aGUgc2FtZSBoYXNoIG1hcHBpbmcgdGFibGUuCisgKiAgICAgIFRydW5rIGdyb3VwIDIgdXNlcyBhIGluZGVwZW5kZW50IHRhYmxlLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfdHJ1bmtfaGFzaE1hcHBpbmdUYWJsZV9zZXQocnRrX3RydW5rX2dyb3VwX3QgdHJrX2dpZCwgcnRrX3RydW5rX2hhc2hWYWwyUG9ydF90ICpwSGFzaDJQb3J0X2FycmF5KTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3RydW5rX2hhc2hNYXBwaW5nVGFibGVfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGhhc2ggdmFsdWUgdG8gcG9ydCBhcnJheSBpbiB0aGUgdHJ1bmsgZ3JvdXAgaWQgZnJvbSB0aGUgc3BlY2lmaWVkIGRldmljZS4KKyAqIElucHV0OgorICogICAgICB0cmtfZ2lkICAgICAgICAgIC0gdHJ1bmsgZ3JvdXAgaWQKKyAqIE91dHB1dDoKKyAqICAgICAgcEhhc2gyUG9ydF9hcnJheSAtIHBvaW50ZXIgYnVmZmVyIG9mIHBvcnRzIGFzc29jaWF0ZSB3aXRoIHRoZSBoYXNoIHZhbHVlCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiAgICAgIFJUX0VSUl9VTklUX0lEICAgICAgLSBpbnZhbGlkIHVuaXQgaWQKKyAqICAgICAgUlRfRVJSX0xBX1RSVU5LX0lEICAtIGludmFsaWQgdHJ1bmsgSUQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAtIGlucHV0IHBhcmFtZXRlciBtYXkgYmUgbnVsbCBwb2ludGVyCisgKiBOb3RlOgorICogICAgICBUcnVuayBncm91cCAwICYgMSBzaGFyZXMgdGhlIHNhbWUgaGFzaCBtYXBwaW5nIHRhYmxlLgorICogICAgICBUcnVuayBncm91cCAyIHVzZXMgYSBpbmRlcGVuZGVudCB0YWJsZS4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3RydW5rX2hhc2hNYXBwaW5nVGFibGVfZ2V0KHJ0a190cnVua19ncm91cF90IHRya19naWQsIHJ0a190cnVua19oYXNoVmFsMlBvcnRfdCAqcEhhc2gyUG9ydF9hcnJheSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a190cnVua19wb3J0UXVldWVFbXB0eV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgdGhlIHBvcnQgbWFzayB3aGljaCBhbGwgcXVldWVzIGFyZSBlbXB0eS4KKyAqIElucHV0OgorICogICAgICBOb25lLgorICogT3V0cHV0OgorICogICAgICBwRW1wdHlfcG9ydG1hc2sgICAtIHBvaW50ZXIgZW1wdHkgcG9ydCBtYXNrCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgLSBpbnB1dCBwYXJhbWV0ZXIgbWF5IGJlIG51bGwgcG9pbnRlcgorICogTm90ZToKKyAqICAgICAgTm9uZS4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3RydW5rX3BvcnRRdWV1ZUVtcHR5X2dldChydGtfcG9ydG1hc2tfdCAqcEVtcHR5X3BvcnRtYXNrKTsKKworI2VuZGlmIC8qIF9fUlRLX0FQSV9UUlVOS19IX18gKi8KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3ZsYW4uaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9pbmNsdWRlL3ZsYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTY5ZmMwCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2luY2x1ZGUvdmxhbi5oCkBAIC0wLDAgKzEsODkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqIFB1cnBvc2UgOiBSVEw4MzY3L1JUTDgzNjdDIHN3aXRjaCBoaWdoLWxldmVsIEFQSQorICoKKyAqIEZlYXR1cmUgOiBUaGUgZmlsZSBpbmNsdWRlcyBUcmFwIG1vZHVsZSBoaWdoLWxheWVyIFZMQU4gZGVmaW5hdGlvbgorICoKKyAqLworCisjaWZuZGVmIF9fUlRLX0FQSV9WTEFOX0hfXworI2RlZmluZSBfX1JUS19BUElfVkxBTl9IX18KKworCisvKgorICogRGF0YSBUeXBlIERlY2xhcmF0aW9uCisgKi8KKyNkZWZpbmUgUlRLX01BWF9OVU1fT0ZfUFJPVE9fVFlQRSAgICAgICAgICAgICAgICAgICAweEZGRkYKKyNkZWZpbmUgUlRLX01BWF9OVU1fT0ZfTVNUSSAgICAgICAgICAgICAgICAgICAgICAgICAweEYKKyNkZWZpbmUgUlRLX0ZJRF9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEYKKwordHlwZWRlZiBzdHJ1Y3QgIHJ0a192bGFuX2NmZ19zCit7CisgICAgcnRrX3BvcnRtYXNrX3QgIG1icjsKKyAgICBydGtfcG9ydG1hc2tfdCAgdW50YWc7CisgICAgcnRrX3VpbnQxNiAgICAgIGl2bF9lbjsKKyAgICBydGtfdWludDE2ICAgICAgZmlkX21zdGk7CisgICAgcnRrX3VpbnQxNiAgICAgIGVudmxhbnBvbDsKKyAgICBydGtfdWludDE2ICAgICAgbWV0ZXJpZHg7CisgICAgcnRrX3VpbnQxNiAgICAgIHZicGVuOworICAgIHJ0a191aW50MTYgICAgICB2YnByaTsKK31ydGtfdmxhbl9jZmdfdDsKKwordHlwZWRlZiBzdHJ1Y3QgIHJ0a192bGFuX21icmNmZ19zCit7CisgICAgcnRrX3VpbnQxNiAgICAgIGV2aWQ7CisgICAgcnRrX3BvcnRtYXNrX3QgIG1icjsKKyAgICBydGtfdWludDE2ICAgICAgZmlkX21zdGk7CisgICAgcnRrX3VpbnQxNiAgICAgIGVudmxhbnBvbDsKKyAgICBydGtfdWludDE2ICAgICAgbWV0ZXJpZHg7CisgICAgcnRrX3VpbnQxNiAgICAgIHZicGVuOworICAgIHJ0a191aW50MTYgICAgICB2YnByaTsKK31ydGtfdmxhbl9tYnJjZmdfdDsKKwordHlwZWRlZiBydGtfdWludDMyICBydGtfc3RwX21zdGlfaWRfdDsgICAgIC8qIE1TVEkgSUQgICovCisKK3R5cGVkZWYgZW51bSBydGtfc3RwX3N0YXRlX2UKK3sKKyAgICBTVFBfU1RBVEVfRElTQUJMRUQgPSAwLAorICAgIFNUUF9TVEFURV9CTE9DS0lORywKKyAgICBTVFBfU1RBVEVfTEVBUk5JTkcsCisgICAgU1RQX1NUQVRFX0ZPUldBUkRJTkcsCisgICAgU1RQX1NUQVRFX0VORAorfSBydGtfc3RwX3N0YXRlX3Q7CisKK3R5cGVkZWYgcnRrX3VpbnQzMiAgcnRrX3ZsYW5fcHJvdG9fdHlwZV90OyAgICAgLyogcHJvdG9jb2wgYW5kIHBvcnQgYmFzZWQgVkxBTiBwcm90b2NvbCB0eXBlICAqLworCisKK3R5cGVkZWYgZW51bSBydGtfdmxhbl9hY2NlcHRGcmFtZVR5cGVfZQoreworICAgIEFDQ0VQVF9GUkFNRV9UWVBFX0FMTCA9IDAsICAgICAgICAgICAgIC8qIHVudGFnZ2VkLCBwcmlvcml0eS10YWdnZWQgYW5kIHRhZ2dlZCAqLworICAgIEFDQ0VQVF9GUkFNRV9UWVBFX1RBR19PTkxZLCAgICAgICAgIC8qIHRhZ2dlZCAqLworICAgIEFDQ0VQVF9GUkFNRV9UWVBFX1VOVEFHX09OTFksICAgICAvKiB1bnRhZ2dlZCBhbmQgcHJpb3JpdHktdGFnZ2VkICovCisgICAgQUNDRVBUX0ZSQU1FX1RZUEVfRU5ECit9IHJ0a192bGFuX2FjY2VwdEZyYW1lVHlwZV90OworCisKKy8qIGZyYW1lIHR5cGUgb2YgcHJvdG9jb2wgdmxhbiAtIHJlZmVyZW5jZSA4MDIuMXYgc3RhbmRhcmQgKi8KK3R5cGVkZWYgZW51bSBydGtfdmxhbl9wcm90b1ZsYW5fZnJhbWVUeXBlX2UKK3sKKyAgICBGUkFNRV9UWVBFX0VUSEVSTkVUID0gMCwKKyAgICBGUkFNRV9UWVBFX0xMQ09USEVSLAorICAgIEZSQU1FX1RZUEVfUkZDMTA0MiwKKyAgICBGUkFNRV9UWVBFX0VORAorfSBydGtfdmxhbl9wcm90b1ZsYW5fZnJhbWVUeXBlX3Q7CisKKy8qIFByb3RvY29sLWFuZC1wb3J0LWJhc2VkIFZsYW4gc3RydWN0dXJlICovCit0eXBlZGVmIHN0cnVjdCBydGtfdmxhbl9wcm90b0FuZFBvcnRJbmZvX3MKK3sKKyAgICBydGtfdWludDMyICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvX3R5cGU7CisgICAgcnRrX3ZsYW5fcHJvdG9WbGFuX2ZyYW1lVHlwZV90IGZyYW1lX3R5cGU7CisgICAgcnRrX3ZsYW5fdCAgICAgICAgICAgICAgICAgICAgIGN2aWQ7CisgICAgcnRrX3ByaV90ICAgICAgICAgICAgICAgICAgICAgY3ByaTsKK31ydGtfdmxhbl9wcm90b0FuZFBvcnRJbmZvX3Q7CisKKy8qIHRhZ2dlZCBtb2RlIG9mIFZMQU4gLSByZWZlcmVuY2UgcmVhbHRlayBwcml2YXRlIHNwZWNpZmljYXRpb24gKi8KK3R5cGVkZWYgZW51bSBydGtfdmxhbl90YWdNb2RlX2UKK3sKKyAgICBWTEFOX1RBR19NT0RFX09SSUdJTkFMID0gMCwKKyAgICBWTEFOX1RBR19NT0RFX0tFRVBfRk9STUFULAorICAgIFZMQU5fVEFHX01PREVfUFJJLAorICAgIFZMQU5fVEFHX01PREVfUkVBTF9LRUVQX0ZPUk1BVCwKKyAgICBWTEFOX1RBR19NT0RFX0VORAorfSBydGtfdmxhbl90YWdNb2RlX3Q7CisKK3R5cGVkZWYgZW51bSBydGtfdmxhbl9yZXNWaWRBY3Rpb25fZQoreworICAgIFJFU1ZJRF9BQ1RJT05fVU5UQUcgPSAwLAorICAgIFJFU1ZJRF9BQ1RJT05fVEFHLAorICAgIFJFU1ZJRF9BQ1RJT05fRU5ECit9CitydGtfdmxhbl9yZXNWaWRBY3Rpb25fdDsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3ZsYW5faW5pdAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEluaXRpYWxpemUgVkxBTi4KKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIFZMQU4gaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gVXNlciBoYXMgdG8gY2FsbCB0aGlzIEFQSSB0byBlbmFibGUgVkxBTiBiZWZvcmUKKyAqICAgICAgdXNpbmcgaXQuIEFuZCBJdCB3aWxsIHNldCBhIGRlZmF1bHQgVkxBTih2aWQgMSkgaW5jbHVkaW5nIGFsbCBwb3J0cyBhbmQgc2V0CisgKiAgICAgIGFsbCBwb3J0cyBQVklEIHRvIHRoZSBkZWZhdWx0IFZMQU4uCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a192bGFuX2luaXQodm9pZCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a192bGFuX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBhIFZMQU4gZW50cnkuCisgKiBJbnB1dDoKKyAqICAgICAgdmlkIC0gVkxBTiBJRCB0byBjb25maWd1cmUuCisgKiAgICAgIHBWbGFuQ2ZnIC0gVkxBTiBDb25maWd1cmF0aW9uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogICAgICBSVF9FUlJfTDJfRklEICAgICAgICAgICAgICAgLSBJbnZhbGlkIEZJRC4KKyAqICAgICAgUlRfRVJSX1ZMQU5fUE9SVF9NQlJfRVhJU1QgIC0gSW52YWxpZCBtZW1iZXIgcG9ydCBtYXNrLgorICogICAgICBSVF9FUlJfVkxBTl9WSUQgICAgICAgICAgICAgLSBJbnZhbGlkIFZJRCBwYXJhbWV0ZXIuCisgKiBOb3RlOgorICoKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3ZsYW5fc2V0KHJ0a192bGFuX3QgdmlkLCBydGtfdmxhbl9jZmdfdCAqcFZsYW5DZmcpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdmxhbl9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgYSBWTEFOIGVudHJ5LgorICogSW5wdXQ6CisgKiAgICAgIHZpZCAtIFZMQU4gSUQgdG8gY29uZmlndXJlLgorICogT3V0cHV0OgorICogICAgICBwVmxhbkNmZyAtIFZMQU4gQ29uZmlndXJhdGlvbgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogICAgICBSVF9FUlJfVkxBTl9WSUQgICAgIC0gSW52YWxpZCBWSUQgcGFyYW1ldGVyLgorICogTm90ZToKKyAqCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a192bGFuX2dldChydGtfdmxhbl90IHZpZCwgcnRrX3ZsYW5fY2ZnX3QgKnBWbGFuQ2ZnKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3ZsYW5fZWdyRmlsdGVyRW5hYmxlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBWTEFOIGVncmVzcyBmaWx0ZXIuCisgKiBJbnB1dDoKKyAqICAgICAgZWdyRmlsdGVyIC0gRWdyZXNzIGZpbHRlcmluZworICogT3V0cHV0OgorICogICAgICBOb25lLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfRU5BQkxFICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a192bGFuX2VnckZpbHRlckVuYWJsZV9zZXQocnRrX2VuYWJsZV90IGVnckZpbHRlcik7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a192bGFuX2VnckZpbHRlckVuYWJsZV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgVkxBTiBlZ3Jlc3MgZmlsdGVyLgorICogSW5wdXQ6CisgKiAgICAgIHBFZ3JGaWx0ZXIgLSBFZ3Jlc3MgZmlsdGVyaW5nCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgLSBOVUxMIFBvaW50ZXIuCisgKiBOb3RlOgorICoKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3ZsYW5fZWdyRmlsdGVyRW5hYmxlX2dldChydGtfZW5hYmxlX3QgKnBFZ3JGaWx0ZXIpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdmxhbl9tYnJDZmdfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IGEgVkxBTiBNZW1iZXIgQ29uZmlndXJhdGlvbiBlbnRyeSBieSBpbmRleC4KKyAqIElucHV0OgorICogICAgICBpZHggICAgIC0gSW5kZXggb2YgVkxBTiBNZW1iZXIgQ29uZmlndXJhdGlvbi4KKyAqICAgICAgcE1icmNmZyAtIFZMQU4gbWVtYmVyIENvbmZpZ3VyYXRpb24uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiAgICAgIFJUX0VSUl9WTEFOX1ZJRCAgICAgLSBJbnZhbGlkIFZJRCBwYXJhbWV0ZXIuCisgKiBOb3RlOgorICogICAgIFNldCBhIFZMQU4gTWVtYmVyIENvbmZpZ3VyYXRpb24gZW50cnkgYnkgaW5kZXguCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a192bGFuX21ickNmZ19zZXQocnRrX3VpbnQzMiBpZHgsIHJ0a192bGFuX21icmNmZ190ICpwTWJyY2ZnKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3ZsYW5fbWJyQ2ZnX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBhIFZMQU4gTWVtYmVyIENvbmZpZ3VyYXRpb24gZW50cnkgYnkgaW5kZXguCisgKiBJbnB1dDoKKyAqICAgICAgaWR4IC0gSW5kZXggb2YgVkxBTiBNZW1iZXIgQ29uZmlndXJhdGlvbi4KKyAqIE91dHB1dDoKKyAqICAgICAgcE1icmNmZyAtIFZMQU4gbWVtYmVyIENvbmZpZ3VyYXRpb24uCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiAgICAgIFJUX0VSUl9WTEFOX1ZJRCAgICAgLSBJbnZhbGlkIFZJRCBwYXJhbWV0ZXIuCisgKiBOb3RlOgorICogICAgIEdldCBhIFZMQU4gTWVtYmVyIENvbmZpZ3VyYXRpb24gZW50cnkgYnkgaW5kZXguCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a192bGFuX21ickNmZ19nZXQocnRrX3VpbnQzMiBpZHgsIHJ0a192bGFuX21icmNmZ190ICpwTWJyY2ZnKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICBydGtfdmxhbl9wb3J0UHZpZF9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgcG9ydCB0byBzcGVjaWZpZWQgVkxBTiBJRChQVklEKS4KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqICAgICAgcHZpZCAtIFNwZWNpZmllZCBWTEFOIElELgorICogICAgICBwcmlvcml0eSAtIDgwMi4xcCBwcmlvcml0eSBmb3IgdGhlIFBWSUQuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqICAgICAgUlRfRVJSX1ZMQU5fUFJJT1JJVFkgICAgICAgIC0gSW52YWxpZCBwcmlvcml0eS4KKyAqICAgICAgUlRfRVJSX1ZMQU5fRU5UUllfTk9UX0ZPVU5EIC0gVkxBTiBlbnRyeSBub3QgZm91bmQuCisgKiAgICAgIFJUX0VSUl9WTEFOX1ZJRCAgICAgICAgICAgICAtIEludmFsaWQgVklEIHBhcmFtZXRlci4KKyAqIE5vdGU6CisgKiAgICAgICBUaGUgQVBJIGlzIHVzZWQgZm9yIFBvcnQtYmFzZWQgVkxBTi4gVGhlIHVudGFnZ2VkIGZyYW1lIHJlY2VpdmVkIGZyb20gdGhlCisgKiAgICAgICBwb3J0IHdpbGwgYmUgY2xhc3NpZmllZCB0byB0aGUgc3BlY2lmaWVkIFZMQU4gYW5kIGFzc2lnbmVkIHRvIHRoZSBzcGVjaWZpZWQgcHJpb3JpdHkuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a192bGFuX3BvcnRQdmlkX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a192bGFuX3QgcHZpZCwgcnRrX3ByaV90IHByaW9yaXR5KTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3ZsYW5fcG9ydFB2aWRfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFZMQU4gSUQoUFZJRCkgb24gc3BlY2lmaWVkIHBvcnQuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBQdmlkIC0gU3BlY2lmaWVkIFZMQU4gSUQuCisgKiAgICAgIHBQcmlvcml0eSAtIDgwMi4xcCBwcmlvcml0eSBmb3IgdGhlIFBWSUQuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogTm90ZToKKyAqICAgICBUaGUgQVBJIGNhbiBnZXQgdGhlIFBWSUQgYW5kIDgwMi4xcCBwcmlvcml0eSBmb3IgdGhlIFBWSUQgb2YgUG9ydC1iYXNlZCBWTEFOLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfdmxhbl9wb3J0UHZpZF9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfdmxhbl90ICpwUHZpZCwgcnRrX3ByaV90ICpwUHJpb3JpdHkpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdmxhbl9wb3J0SWdyRmlsdGVyRW5hYmxlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBWTEFOIGluZ3Jlc3MgZm9yIGVhY2ggcG9ydC4KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqICAgICAgaWdyX2ZpbHRlciAtIFZMQU4gaW5ncmVzcyBmdW5jdGlvbiBlbmFibGUgc3RhdHVzLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiAgICAgIFJUX0VSUl9FTkFCTEUgICAgICAgLSBJbnZhbGlkIGVuYWJsZSBpbnB1dAorICogTm90ZToKKyAqICAgICAgVGhlIHN0YXR1cyBvZiB2bGFuIGluZ3Jlc3MgZmlsdGVyIGlzIGFzIGZvbGxvd2luZzoKKyAqICAgICAgLSBESVNBQkxFRAorICogICAgICAtIEVOQUJMRUQKKyAqICAgICAgV2hpbGUgVkxBTiBmdW5jdGlvbiBpcyBlbmFibGVkLCBBU0lDIHdpbGwgZGVjaWRlIFZMQU4gSUQgZm9yIGVhY2ggcmVjZWl2ZWQgZnJhbWUgYW5kIGdldCBiZWxvbmdlZCBtZW1iZXIKKyAqICAgICAgcG9ydHMgZnJvbSBWTEFOIHRhYmxlLiBJZiByZWNlaXZlZCBwb3J0IGlzIG5vdCBiZWxvbmdlZCB0byBWTEFOIG1lbWJlciBwb3J0cywgQVNJQyB3aWxsIGRyb3AgcmVjZWl2ZWQgZnJhbWUgaWYgVkxBTiBpbmdyZXNzIGZ1bmN0aW9uIGlzIGVuYWJsZWQuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a192bGFuX3BvcnRJZ3JGaWx0ZXJFbmFibGVfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2VuYWJsZV90IGlncl9maWx0ZXIpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdmxhbl9wb3J0SWdyRmlsdGVyRW5hYmxlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBWTEFOIEluZ3Jlc3MgRmlsdGVyCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQb3J0IGlkLgorICogT3V0cHV0OgorICogICAgICBwSWdyX2ZpbHRlciAtIFZMQU4gaW5ncmVzcyBmdW5jdGlvbiBlbmFibGUgc3RhdHVzLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqIE5vdGU6CisgKiAgICAgVGhlIEFQSSBjYW4gR2V0IHRoZSBWTEFOIGluZ3Jlc3MgZmlsdGVyIHN0YXR1cy4KKyAqICAgICBUaGUgc3RhdHVzIG9mIHZsYW4gaW5ncmVzcyBmaWx0ZXIgaXMgYXMgZm9sbG93aW5nOgorICogICAgIC0gRElTQUJMRUQKKyAqICAgICAtIEVOQUJMRUQKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3ZsYW5fcG9ydElnckZpbHRlckVuYWJsZV9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfZW5hYmxlX3QgKnBJZ3JfZmlsdGVyKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3ZsYW5fcG9ydEFjY2VwdEZyYW1lVHlwZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgVkxBTiBhY2NlcHRfZnJhbWVfdHlwZQorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgICAgICAgICAgLSBQb3J0IGlkLgorICogICAgICBhY2NlcHRfZnJhbWVfdHlwZSAgIC0gYWNjZXB0IGZyYW1lIHR5cGUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAgICAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqICAgICAgUlRfRVJSX1ZMQU5fQUNDRVBUX0ZSQU1FX1RZUEUgICAtIEludmFsaWQgZnJhbWUgdHlwZS4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgaXMgdXNlZCBmb3IgY2hlY2tpbmcgODAyLjFRIHRhZ2dlZCBmcmFtZXMuCisgKiAgICAgIFRoZSBhY2NlcHQgZnJhbWUgdHlwZSBhcyBmb2xsb3dpbmc6CisgKiAgICAgIC0gQUNDRVBUX0ZSQU1FX1RZUEVfQUxMCisgKiAgICAgIC0gQUNDRVBUX0ZSQU1FX1RZUEVfVEFHX09OTFkKKyAqICAgICAgLSBBQ0NFUFRfRlJBTUVfVFlQRV9VTlRBR19PTkxZCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a192bGFuX3BvcnRBY2NlcHRGcmFtZVR5cGVfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3ZsYW5fYWNjZXB0RnJhbWVUeXBlX3QgYWNjZXB0X2ZyYW1lX3R5cGUpOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdmxhbl9wb3J0QWNjZXB0RnJhbWVUeXBlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBWTEFOIGFjY2VwdF9mcmFtZV90eXBlCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBBY2NlcHRfZnJhbWVfdHlwZSAtIGFjY2VwdCBmcmFtZSB0eXBlCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogTm90ZToKKyAqICAgICBUaGUgQVBJIGNhbiBHZXQgdGhlIFZMQU4gaW5ncmVzcyBmaWx0ZXIuCisgKiAgICAgVGhlIGFjY2VwdCBmcmFtZSB0eXBlIGFzIGZvbGxvd2luZzoKKyAqICAgICAtIEFDQ0VQVF9GUkFNRV9UWVBFX0FMTAorICogICAgIC0gQUNDRVBUX0ZSQU1FX1RZUEVfVEFHX09OTFkKKyAqICAgICAtIEFDQ0VQVF9GUkFNRV9UWVBFX1VOVEFHX09OTFkKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3ZsYW5fcG9ydEFjY2VwdEZyYW1lVHlwZV9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfdmxhbl9hY2NlcHRGcmFtZVR5cGVfdCAqcEFjY2VwdF9mcmFtZV90eXBlKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3ZsYW5fdGFnTW9kZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgQ1ZMQU4gZWdyZXNzIHRhZyBtb2RlCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQb3J0IGlkLgorICogICAgICB0YWdfbW9kZSAgICAtIFRoZSBlZ3Jlc3MgdGFnIG1vZGUuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlci4KKyAqICAgICAgUlRfRVJSX0VOQUJMRSAgICAgICAtIEludmFsaWQgZW5hYmxlIGlucHV0LgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gc2V0IEVncmVzcyB0YWcgbW9kZS4gVGhlcmUgYXJlIDQgbW9kZSBmb3IgZWdyZXNzIHRhZzoKKyAqICAgICAgLSBWTEFOX1RBR19NT0RFX09SSUdJTkFMLAorICogICAgICAtIFZMQU5fVEFHX01PREVfS0VFUF9GT1JNQVQsCisgKiAgICAgIC0gVkxBTl9UQUdfTU9ERV9QUkkuCisgKiAgICAgIC0gVkxBTl9UQUdfTU9ERV9SRUFMX0tFRVBfRk9STUFULAorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfdmxhbl90YWdNb2RlX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a192bGFuX3RhZ01vZGVfdCB0YWdfbW9kZSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a192bGFuX3RhZ01vZGVfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IENWTEFOIGVncmVzcyB0YWcgbW9kZQorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBQb3J0IGlkLgorICogT3V0cHV0OgorICogICAgICBwVGFnX21vZGUgLSBUaGUgZWdyZXNzIHRhZyBtb2RlLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGdldCBFZ3Jlc3MgdGFnIG1vZGUuIFRoZXJlIGFyZSA0IG1vZGUgZm9yIGVncmVzcyB0YWc6CisgKiAgICAgIC0gVkxBTl9UQUdfTU9ERV9PUklHSU5BTCwKKyAqICAgICAgLSBWTEFOX1RBR19NT0RFX0tFRVBfRk9STUFULAorICogICAgICAtIFZMQU5fVEFHX01PREVfUFJJLgorICogICAgICAtIFZMQU5fVEFHX01PREVfUkVBTF9LRUVQX0ZPUk1BVCwKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3ZsYW5fdGFnTW9kZV9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfdmxhbl90YWdNb2RlX3QgKnBUYWdfbW9kZSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a192bGFuX3RyYW5zcGFyZW50X3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBWTEFOIHRyYW5zcGFyZW50IG1vZGUKKyAqIElucHV0OgorICogICAgICBlZ3JfcG9ydCAgICAgICAgLSBFZ3Jlc3MgUG9ydCBpZC4KKyAqICAgICAgcElncl9wbWFzayAgICAgIC0gSW5ncmVzcyBQb3J0IE1hc2suCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogTm90ZToKKyAqICAgICAgTm9uZS4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3ZsYW5fdHJhbnNwYXJlbnRfc2V0KHJ0a19wb3J0X3QgZWdyX3BvcnQsIHJ0a19wb3J0bWFza190ICpwSWdyX3BtYXNrKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3ZsYW5fdHJhbnNwYXJlbnRfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFZMQU4gdHJhbnNwYXJlbnQgbW9kZQorICogSW5wdXQ6CisgKiAgICAgIGVncl9wb3J0ICAgICAgICAtIEVncmVzcyBQb3J0IGlkLgorICogT3V0cHV0OgorICogICAgICBwSWdyX3BtYXNrICAgICAgLSBJbmdyZXNzIFBvcnQgTWFzaworICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqIE5vdGU6CisgKiAgICAgIE5vbmUuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a192bGFuX3RyYW5zcGFyZW50X2dldChydGtfcG9ydF90IGVncl9wb3J0LCBydGtfcG9ydG1hc2tfdCAqcElncl9wbWFzayk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a192bGFuX2tlZXBfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IFZMQU4gZWdyZXNzIGtlZXAgbW9kZQorICogSW5wdXQ6CisgKiAgICAgIGVncl9wb3J0ICAgICAgICAtIEVncmVzcyBQb3J0IGlkLgorICogICAgICBwSWdyX3BtYXNrICAgICAgLSBJbmdyZXNzIFBvcnQgTWFzay4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiBOb3RlOgorICogICAgICBOb25lLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfdmxhbl9rZWVwX3NldChydGtfcG9ydF90IGVncl9wb3J0LCBydGtfcG9ydG1hc2tfdCAqcElncl9wbWFzayk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a192bGFuX2tlZXBfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFZMQU4gZWdyZXNzIGtlZXAgbW9kZQorICogSW5wdXQ6CisgKiAgICAgIGVncl9wb3J0ICAgICAgICAtIEVncmVzcyBQb3J0IGlkLgorICogT3V0cHV0OgorICogICAgICBwSWdyX3BtYXNrICAgICAgLSBJbmdyZXNzIFBvcnQgTWFzaworICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqIE5vdGU6CisgKiAgICAgIE5vbmUuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a192bGFuX2tlZXBfZ2V0KHJ0a19wb3J0X3QgZWdyX3BvcnQsIHJ0a19wb3J0bWFza190ICpwSWdyX3BtYXNrKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3ZsYW5fc3RnX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBzcGFubmluZyB0cmVlIGdyb3VwIGluc3RhbmNlIG9mIHRoZSB2bGFuIHRvIHRoZSBzcGVjaWZpZWQgZGV2aWNlCisgKiBJbnB1dDoKKyAqICAgICAgdmlkIC0gU3BlY2lmaWVkIFZMQU4gSUQuCisgKiAgICAgIHN0ZyAtIHNwYW5uaW5nIHRyZWUgZ3JvdXAgaW5zdGFuY2UuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX01TVEkgICAgICAgICAtIEludmFsaWQgbXN0aSBwYXJhbWV0ZXIKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVyLgorICogICAgICBSVF9FUlJfVkxBTl9WSUQgICAgIC0gSW52YWxpZCBWSUQgcGFyYW1ldGVyLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gc2V0IHNwYW5uaW5nIHRyZWUgZ3JvdXAgaW5zdGFuY2Ugb2YgdGhlIHZsYW4gdG8gdGhlIHNwZWNpZmllZCBkZXZpY2UuCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a192bGFuX3N0Z19zZXQocnRrX3ZsYW5fdCB2aWQsIHJ0a19zdHBfbXN0aV9pZF90IHN0Zyk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a192bGFuX3N0Z19nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgc3Bhbm5pbmcgdHJlZSBncm91cCBpbnN0YW5jZSBvZiB0aGUgdmxhbiB0byB0aGUgc3BlY2lmaWVkIGRldmljZQorICogSW5wdXQ6CisgKiAgICAgIHZpZCAtIFNwZWNpZmllZCBWTEFOIElELgorICogT3V0cHV0OgorICogICAgICBwU3RnIC0gc3Bhbm5pbmcgdHJlZSBncm91cCBpbnN0YW5jZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX1ZMQU5fVklEICAgICAtIEludmFsaWQgVklEIHBhcmFtZXRlci4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGdldCBzcGFubmluZyB0cmVlIGdyb3VwIGluc3RhbmNlIG9mIHRoZSB2bGFuIHRvIHRoZSBzcGVjaWZpZWQgZGV2aWNlLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfdmxhbl9zdGdfZ2V0KHJ0a192bGFuX3QgdmlkLCBydGtfc3RwX21zdGlfaWRfdCAqcFN0Zyk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a192bGFuX3Byb3RvQW5kUG9ydEJhc2VkVmxhbl9hZGQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBBZGQgdGhlIHByb3RvY29sLWFuZC1wb3J0LWJhc2VkIHZsYW4gdG8gdGhlIHNwZWNpZmllZCBwb3J0IG9mIGRldmljZS4KKyAqIElucHV0OgorICogICAgICBwb3J0ICAtIFBvcnQgaWQuCisgKiAgICAgIHBJbmZvIC0gUHJvdG9jb2wgYW5kIHBvcnQgYmFzZWQgVkxBTiBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqICAgICAgUlRfRVJSX1ZMQU5fVklEICAgICAgICAgLSBJbnZhbGlkIFZJRCBwYXJhbWV0ZXIuCisgKiAgICAgIFJUX0VSUl9WTEFOX1BSSU9SSVRZICAgIC0gSW52YWxpZCBwcmlvcml0eS4KKyAqICAgICAgUlRfRVJSX1RCTF9GVUxMICAgICAgICAgLSBUYWJsZSBpcyBmdWxsLgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFICAgICAtIGlucHV0IG91dCBvZiByYW5nZS4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBpbmNvbWluZyBwYWNrZXQgd2hpY2ggbWF0Y2ggdGhlIHByb3RvY29sLWFuZC1wb3J0LWJhc2VkIHZsYW4gd2lsbCB1c2UgdGhlIGNvbmZpZ3VyZSB2aWQgZm9yIGluZ3Jlc3MgcGlwZWxpbmUKKyAqICAgICAgVGhlIGZyYW1lIHR5cGUgaXMgc2hvd24gaW4gdGhlIGZvbGxvd2luZzoKKyAqICAgICAgLSBGUkFNRV9UWVBFX0VUSEVSTkVUCisgKiAgICAgIC0gRlJBTUVfVFlQRV9SRkMxMDQyCisgKiAgICAgIC0gRlJBTUVfVFlQRV9MTENPVEhFUgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfdmxhbl9wcm90b0FuZFBvcnRCYXNlZFZsYW5fYWRkKHJ0a19wb3J0X3QgcG9ydCwgcnRrX3ZsYW5fcHJvdG9BbmRQb3J0SW5mb190ICpwSW5mbyk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a192bGFuX3Byb3RvQW5kUG9ydEJhc2VkVmxhbl9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgdGhlIHByb3RvY29sLWFuZC1wb3J0LWJhc2VkIHZsYW4gdG8gdGhlIHNwZWNpZmllZCBwb3J0IG9mIGRldmljZS4KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqICAgICAgcHJvdG9fdHlwZSAtIHByb3RvY29sLWFuZC1wb3J0LWJhc2VkIHZsYW4gcHJvdG9jb2wgdHlwZS4KKyAqICAgICAgZnJhbWVfdHlwZSAtIHByb3RvY29sLWFuZC1wb3J0LWJhc2VkIHZsYW4gZnJhbWUgdHlwZS4KKyAqIE91dHB1dDoKKyAqICAgICAgcEluZm8gLSBQcm90b2NvbCBhbmQgcG9ydCBiYXNlZCBWTEFOIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAgICAgLSBpbnB1dCBvdXQgb2YgcmFuZ2UuCisgKiAgICAgIFJUX0VSUl9UQkxfRlVMTCAgICAgICAgIC0gVGFibGUgaXMgZnVsbC4KKyAqIE5vdGU6CisgKiAgICAgVGhlIGluY29taW5nIHBhY2tldCB3aGljaCBtYXRjaCB0aGUgcHJvdG9jb2wtYW5kLXBvcnQtYmFzZWQgdmxhbiB3aWxsIHVzZSB0aGUgY29uZmlndXJlIHZpZCBmb3IgaW5ncmVzcyBwaXBlbGluZQorICogICAgIFRoZSBmcmFtZSB0eXBlIGlzIHNob3duIGluIHRoZSBmb2xsb3dpbmc6CisgKiAgICAgIC0gRlJBTUVfVFlQRV9FVEhFUk5FVAorICogICAgICAtIEZSQU1FX1RZUEVfUkZDMTA0MgorICogICAgICAtIEZSQU1FX1RZUEVfTExDT1RIRVIKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3ZsYW5fcHJvdG9BbmRQb3J0QmFzZWRWbGFuX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a192bGFuX3Byb3RvX3R5cGVfdCBwcm90b190eXBlLCBydGtfdmxhbl9wcm90b1ZsYW5fZnJhbWVUeXBlX3QgZnJhbWVfdHlwZSwgcnRrX3ZsYW5fcHJvdG9BbmRQb3J0SW5mb190ICpwSW5mbyk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a192bGFuX3Byb3RvQW5kUG9ydEJhc2VkVmxhbl9kZWwKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBEZWxldGUgdGhlIHByb3RvY29sLWFuZC1wb3J0LWJhc2VkIHZsYW4gZnJvbSB0aGUgc3BlY2lmaWVkIHBvcnQgb2YgZGV2aWNlLgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgIC0gUG9ydCBpZC4KKyAqICAgICAgcHJvdG9fdHlwZSAgLSBwcm90b2NvbC1hbmQtcG9ydC1iYXNlZCB2bGFuIHByb3RvY29sIHR5cGUuCisgKiAgICAgIGZyYW1lX3R5cGUgIC0gcHJvdG9jb2wtYW5kLXBvcnQtYmFzZWQgdmxhbiBmcmFtZSB0eXBlLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAgICAgLSBpbnB1dCBvdXQgb2YgcmFuZ2UuCisgKiAgICAgIFJUX0VSUl9UQkxfRlVMTCAgICAgICAgIC0gVGFibGUgaXMgZnVsbC4KKyAqIE5vdGU6CisgKiAgICAgVGhlIGluY29taW5nIHBhY2tldCB3aGljaCBtYXRjaCB0aGUgcHJvdG9jb2wtYW5kLXBvcnQtYmFzZWQgdmxhbiB3aWxsIHVzZSB0aGUgY29uZmlndXJlIHZpZCBmb3IgaW5ncmVzcyBwaXBlbGluZQorICogICAgIFRoZSBmcmFtZSB0eXBlIGlzIHNob3duIGluIHRoZSBmb2xsb3dpbmc6CisgKiAgICAgIC0gRlJBTUVfVFlQRV9FVEhFUk5FVAorICogICAgICAtIEZSQU1FX1RZUEVfUkZDMTA0MgorICogICAgICAtIEZSQU1FX1RZUEVfTExDT1RIRVIKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3ZsYW5fcHJvdG9BbmRQb3J0QmFzZWRWbGFuX2RlbChydGtfcG9ydF90IHBvcnQsIHJ0a192bGFuX3Byb3RvX3R5cGVfdCBwcm90b190eXBlLCBydGtfdmxhbl9wcm90b1ZsYW5fZnJhbWVUeXBlX3QgZnJhbWVfdHlwZSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a192bGFuX3Byb3RvQW5kUG9ydEJhc2VkVmxhbl9kZWxBbGwKKyAqIERlc2NyaXB0aW9uOgorICogICAgIERlbGV0ZSBhbGwgcHJvdG9jb2wtYW5kLXBvcnQtYmFzZWQgdmxhbnMgZnJvbSB0aGUgc3BlY2lmaWVkIHBvcnQgb2YgZGV2aWNlLgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBQb3J0IGlkLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAgICAgLSBpbnB1dCBvdXQgb2YgcmFuZ2UuCisgKiBOb3RlOgorICogICAgIFRoZSBpbmNvbWluZyBwYWNrZXQgd2hpY2ggbWF0Y2ggdGhlIHByb3RvY29sLWFuZC1wb3J0LWJhc2VkIHZsYW4gd2lsbCB1c2UgdGhlIGNvbmZpZ3VyZSB2aWQgZm9yIGluZ3Jlc3MgcGlwZWxpbmUKKyAqICAgICBEZWxldGUgYWxsIGZsb3cgdGFibGUgcHJvdG9jb2wtYW5kLXBvcnQtYmFzZWQgdmxhbiBlbnRyaWVzLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfdmxhbl9wcm90b0FuZFBvcnRCYXNlZFZsYW5fZGVsQWxsKHJ0a19wb3J0X3QgcG9ydCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a192bGFuX3BvcnRGaWRfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHBvcnQtYmFzZWQgZmlsdGVyaW5nIGRhdGFiYXNlCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiAgICAgIGVuYWJsZSAtIGViYWJsZSBwb3J0LWJhc2VkIEZJRAorICogICAgICBmaWQgLSBTcGVjaWZpZWQgZmlsdGVyaW5nIGRhdGFiYXNlLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9MMl9GSUQgLSBJbnZhbGlkIGZpZC4KKyAqICAgICAgUlRfRVJSX0lOUFVUIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIuCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEIC0gSW52YWxpZCBwb3J0IElELgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gc2V0IHBvcnQtYmFzZWQgZmlsdGVyaW5nIGRhdGFiYXNlLiBJZiB0aGUgZnVuY3Rpb24gaXMgZW5hYmxlZCwgYWxsIGlucHV0CisgKiAgICAgIHBhY2tldHMgd2lsbCBiZSBhc3NpZ25lZCB0byB0aGUgcG9ydC1iYXNlZCBmaWQgcmVnYXJkbGVzcyB2bGFuIHRhZy4KKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3ZsYW5fcG9ydEZpZF9zZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfZW5hYmxlX3QgZW5hYmxlLCBydGtfZmlkX3QgZmlkKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3ZsYW5fcG9ydEZpZF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcG9ydC1iYXNlZCBmaWx0ZXJpbmcgZGF0YWJhc2UKKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqIE91dHB1dDoKKyAqICAgICAgcEVuYWJsZSAtIGViYWJsZSBwb3J0LWJhc2VkIEZJRAorICogICAgICBwRmlkIC0gU3BlY2lmaWVkIGZpbHRlcmluZyBkYXRhYmFzZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogICAgICBSVF9FUlJfUE9SVF9JRCAtIEludmFsaWQgcG9ydCBJRC4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGdldCBwb3J0LWJhc2VkIGZpbHRlcmluZyBkYXRhYmFzZSBzdGF0dXMuIElmIHRoZSBmdW5jdGlvbiBpcyBlbmFibGVkLCBhbGwgaW5wdXQKKyAqICAgICAgcGFja2V0cyB3aWxsIGJlIGFzc2lnbmVkIHRvIHRoZSBwb3J0LWJhc2VkIGZpZCByZWdhcmRsZXNzIHZsYW4gdGFnLgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfdmxhbl9wb3J0RmlkX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19lbmFibGVfdCAqcEVuYWJsZSwgcnRrX2ZpZF90ICpwRmlkKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3ZsYW5fVW50YWdEc2NwUHJpb3JpdHlFbmFibGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IFVudGFnIERTQ1AgcHJpb3JpdHkgYXNzaWduCisgKiBJbnB1dDoKKyAqICAgICAgZW5hYmxlIC0gc3RhdGUgb2YgVW50YWcgRFNDUCBwcmlvcml0eSBhc3NpZ24KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfRU5BQkxFICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a192bGFuX1VudGFnRHNjcFByaW9yaXR5RW5hYmxlX3NldChydGtfZW5hYmxlX3QgZW5hYmxlKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3ZsYW5fVW50YWdEc2NwUHJpb3JpdHlFbmFibGVfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFVudGFnIERTQ1AgcHJpb3JpdHkgYXNzaWduCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwRW5hYmxlIC0gc3RhdGUgb2YgVW50YWcgRFNDUCBwcmlvcml0eSBhc3NpZ24KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAgICAtIE51bGwgcG9pbnRlcgorICogTm90ZToKKyAqCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a192bGFuX1VudGFnRHNjcFByaW9yaXR5RW5hYmxlX2dldChydGtfZW5hYmxlX3QgKnBFbmFibGUpOworCisKKy8qU3Bhbm5pbmcgVHJlZSovCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3RwX21zdHBTdGF0ZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBDb25maWd1cmUgc3Bhbm5pbmcgdHJlZSBzdGF0ZSBwZXIgZWFjaCBwb3J0LgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBQb3J0IGlkCisgKiAgICAgIG1zdGkgLSBNdWx0aXBsZSBzcGFubmluZyB0cmVlIGluc3RhbmNlLgorICogICAgICBzdHBfc3RhdGUgLSBTcGFubmluZyB0cmVlIHN0YXRlIGZvciBtc3RpCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9NU1RJICAgICAgICAgLSBJbnZhbGlkIG1zdGkgcGFyYW1ldGVyLgorICogICAgICBSVF9FUlJfTVNUUF9TVEFURSAgIC0gSW52YWxpZCBTVFAgc3RhdGUuCisgKiBOb3RlOgorICogICAgICBTeXN0ZW0gc3VwcG9ydHMgcGVyLXBvcnQgbXVsdGlwbGUgc3Bhbm5pbmcgdHJlZSBzdGF0ZSBmb3IgZWFjaCBtc3RpLgorICogICAgICBUaGVyZSBhcmUgZm91ciBzdGF0ZXMgc3VwcG9ydGVkIGJ5IEFTSUMuCisgKiAgICAgIC0gU1RQX1NUQVRFX0RJU0FCTEVECisgKiAgICAgIC0gU1RQX1NUQVRFX0JMT0NLSU5HCisgKiAgICAgIC0gU1RQX1NUQVRFX0xFQVJOSU5HCisgKiAgICAgIC0gU1RQX1NUQVRFX0ZPUldBUkRJTkcKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3N0cF9tc3RwU3RhdGVfc2V0KHJ0a19zdHBfbXN0aV9pZF90IG1zdGksIHJ0a19wb3J0X3QgcG9ydCwgcnRrX3N0cF9zdGF0ZV90IHN0cF9zdGF0ZSk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdHBfbXN0cFN0YXRlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBzcGFubmluZyB0cmVlIHN0YXRlIHBlciBlYWNoIHBvcnQuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiAgICAgIG1zdGkgLSBNdWx0aXBsZSBzcGFubmluZyB0cmVlIGluc3RhbmNlLgorICogT3V0cHV0OgorICogICAgICBwU3RwX3N0YXRlIC0gU3Bhbm5pbmcgdHJlZSBzdGF0ZSBmb3IgbXN0aQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqICAgICAgUlRfRVJSX01TVEkgICAgICAgICAtIEludmFsaWQgbXN0aSBwYXJhbWV0ZXIuCisgKiBOb3RlOgorICogICAgICBTeXN0ZW0gc3VwcG9ydHMgcGVyLXBvcnQgbXVsdGlwbGUgc3Bhbm5pbmcgdHJlZSBzdGF0ZSBmb3IgZWFjaCBtc3RpLgorICogICAgICBUaGVyZSBhcmUgZm91ciBzdGF0ZXMgc3VwcG9ydGVkIGJ5IEFTSUMuCisgKiAgICAgIC0gU1RQX1NUQVRFX0RJU0FCTEVECisgKiAgICAgIC0gU1RQX1NUQVRFX0JMT0NLSU5HCisgKiAgICAgIC0gU1RQX1NUQVRFX0xFQVJOSU5HCisgKiAgICAgIC0gU1RQX1NUQVRFX0ZPUldBUkRJTkcKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3N0cF9tc3RwU3RhdGVfZ2V0KHJ0a19zdHBfbXN0aV9pZF90IG1zdGksIHJ0a19wb3J0X3QgcG9ydCwgcnRrX3N0cF9zdGF0ZV90ICpwU3RwX3N0YXRlKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3ZsYW5fY2hlY2tBbmRDcmVhdGVNYnIKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBDaGVjayBhbmQgY3JlYXRlIE1lbWJlciBjb25maWd1cmF0aW9uIGFuZCByZXR1cm4gaW5kZXgKKyAqIElucHV0OgorICogICAgICB2aWQgIC0gVkxBTiBpZC4KKyAqIE91dHB1dDoKKyAqICAgICAgcEluZGV4ICAtIE1lbWJlciBjb25maWd1cmF0aW9uIGluZGV4CisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9WTEFOX1ZJRCAgICAgLSBJbnZhbGlkIFZMQU4gSUQuCisgKiAgICAgIFJUX0VSUl9WTEFOX0VOVFJZX05PVF9GT1VORCAtIFZMQU4gbm90IGZvdW5kCisgKiAgICAgIFJUX0VSUl9UQkxfRlVMTCAgICAgLSBNZW1iZXIgQ29uZmlndXJhdGlvbiB0YWJsZSBmdWxsCisgKiBOb3RlOgorICoKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3ZsYW5fY2hlY2tBbmRDcmVhdGVNYnIocnRrX3ZsYW5fdCB2aWQsIHJ0a191aW50MzIgKnBJbmRleCk7CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a192bGFuX3Jlc2VydmVkVmlkQWN0aW9uX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBBY3Rpb24gb2YgVkxBTiBJRCA9IDAgJiA0MDk1IHRhZ2dlZCBwYWNrZXQKKyAqIElucHV0OgorICogICAgICBhY3Rpb25fdmlkMCAgICAgLSBBY3Rpb24gZm9yIFZJRCAwLgorICogICAgICBhY3Rpb25fdmlkNDA5NSAgLSBBY3Rpb24gZm9yIFZJRCA0MDk1LgorICogT3V0cHV0OgorICogICAgICBOb25lLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gRXJyb3IgSW5wdXQKKyAqIE5vdGU6CisgKgorICovCitleHRlcm4gcnRrX2FwaV9yZXRfdCBydGtfdmxhbl9yZXNlcnZlZFZpZEFjdGlvbl9zZXQocnRrX3ZsYW5fcmVzVmlkQWN0aW9uX3QgYWN0aW9uX3ZpZDAsIHJ0a192bGFuX3Jlc1ZpZEFjdGlvbl90IGFjdGlvbl92aWQ0MDk1KTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3ZsYW5fcmVzZXJ2ZWRWaWRBY3Rpb25fZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IEFjdGlvbiBvZiBWTEFOIElEID0gMCAmIDQwOTUgdGFnZ2VkIHBhY2tldAorICogSW5wdXQ6CisgKiAgICAgIHBBY3Rpb25fdmlkMCAgICAgLSBBY3Rpb24gZm9yIFZJRCAwLgorICogICAgICBwQWN0aW9uX3ZpZDQwOTUgIC0gQWN0aW9uIGZvciBWSUQgNDA5NS4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAtIE5VTEwgUG9pbnRlcgorICogTm90ZToKKyAqCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a192bGFuX3Jlc2VydmVkVmlkQWN0aW9uX2dldChydGtfdmxhbl9yZXNWaWRBY3Rpb25fdCAqcEFjdGlvbl92aWQwLCBydGtfdmxhbl9yZXNWaWRBY3Rpb25fdCAqcEFjdGlvbl92aWQ0MDk1KTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3ZsYW5fcmVhbEtlZXBSZW1hcmtFbmFibGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IFJlYWwga2VlcCAxcCByZW1hcmtpbmcgZmVhdHVyZQorICogSW5wdXQ6CisgKiAgICAgIGVuYWJsZWQgICAgIC0gU3RhdGUgb2YgMXAgcmVtYXJraW5nIGF0IHJlYWwga2VlcCBwYWNrZXQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEVycm9yIElucHV0CisgKiBOb3RlOgorICoKKyAqLworZXh0ZXJuIHJ0a19hcGlfcmV0X3QgcnRrX3ZsYW5fcmVhbEtlZXBSZW1hcmtFbmFibGVfc2V0KHJ0a19lbmFibGVfdCBlbmFibGVkKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3ZsYW5fcmVhbEtlZXBSZW1hcmtFbmFibGVfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFJlYWwga2VlcCAxcCByZW1hcmtpbmcgZmVhdHVyZQorICogSW5wdXQ6CisgKiAgICAgIE5vbmUuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBFbmFibGVkICAgICAtIFN0YXRlIG9mIDFwIHJlbWFya2luZyBhdCByZWFsIGtlZXAgcGFja2V0CisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBFcnJvciBJbnB1dAorICogTm90ZToKKyAqCisgKi8KK2V4dGVybiBydGtfYXBpX3JldF90IHJ0a192bGFuX3JlYWxLZWVwUmVtYXJrRW5hYmxlX2dldChydGtfZW5hYmxlX3QgKnBFbmFibGVkKTsKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3ZsYW5fcmVzZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBSZXNldCBWTEFOCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZS4KKyAqIE91dHB1dDoKKyAqICAgICAgcEVuYWJsZWQgICAgIC0gU3RhdGUgb2YgMXAgcmVtYXJraW5nIGF0IHJlYWwga2VlcCBwYWNrZXQKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEVycm9yIElucHV0CisgKiBOb3RlOgorICoKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfdmxhbl9yZXNldCh2b2lkKTsKKworI2VuZGlmIC8qIF9fUlRLX0FQSV9WTEFOX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2ludGVycnVwdC5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2ludGVycnVwdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NWVlNDEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvaW50ZXJydXB0LmMKQEAgLTAsMCArMSw0MzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogJFJldmlzaW9uOiA3NjMwNiAkCisgKiAkRGF0ZTogMjAxNy0wMy0wOCAxNToxMzo1OCArMDgwMCAo6YCx5LiJLCAwOCDkuInmnIggMjAxNykgJAorICoKKyAqIFB1cnBvc2UgOiBSVEsgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJIGZvciBSVEw4MzY3L1JUTDgzNjdDCisgKiBGZWF0dXJlIDogSGVyZSBpcyBhIGxpc3Qgb2YgYWxsIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIGluIEludGVycnVwdCBtb2R1bGUuCisgKgorICovCisKKyNpbmNsdWRlIDxydGtfc3dpdGNoLmg+CisjaW5jbHVkZSA8cnRrX2Vycm9yLmg+CisjaW5jbHVkZSA8aW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2Lmg+CisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl9pbnRlcnJ1cHQuaD4KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2ludF9wb2xhcml0eV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgaW50ZXJydXB0IHBvbGFyaXR5IGNvbmZpZ3VyYXRpb24uCisgKiBJbnB1dDoKKyAqICAgICAgdHlwZSAtIEludGVycnVwdHBvbGFyaXR5IHR5cGUuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIHNldCBpbnRlcnJ1cHQgcG9sYXJpdHkgY29uZmlndXJhdGlvbi4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfaW50X3BvbGFyaXR5X3NldChydGtfaW50X3BvbGFyaXR5X3QgdHlwZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZih0eXBlID49IElOVF9QT0xBUl9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNJbnRlcnJ1cHRQb2xhcml0eSh0eXBlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2ludF9wb2xhcml0eV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgaW50ZXJydXB0IHBvbGFyaXR5IGNvbmZpZ3VyYXRpb24uCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwVHlwZSAtIEludGVycnVwdHBvbGFyaXR5IHR5cGUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBnZXQgaW50ZXJydXB0IHBvbGFyaXR5IGNvbmZpZ3VyYXRpb24uCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2ludF9wb2xhcml0eV9nZXQocnRrX2ludF9wb2xhcml0eV90ICpwVHlwZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBUeXBlKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0ludGVycnVwdFBvbGFyaXR5KHBUeXBlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2ludF9jb250cm9sX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBpbnRlcnJ1cHQgdHJpZ2dlciBzdGF0dXMgY29uZmlndXJhdGlvbi4KKyAqIElucHV0OgorICogICAgICB0eXBlIC0gSW50ZXJydXB0IHR5cGUuCisgKiAgICAgIGVuYWJsZSAtIEludGVycnVwdCBzdGF0dXMuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX0VOQUJMRSAgICAgICAtIEludmFsaWQgZW5hYmxlIGlucHV0LgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gc2V0IGludGVycnVwdCBzdGF0dXMgY29uZmlndXJhdGlvbi4KKyAqICAgICAgVGhlIGludGVycnVwdCB0cmlnZ2VyIHN0YXR1cyBpcyBzaG93biBpbiB0aGUgZm9sbG93aW5nOgorICogICAgICAtIElOVF9UWVBFX0xJTktfU1RBVFVTCisgKiAgICAgIC0gSU5UX1RZUEVfTUVURVJfRVhDRUVECisgKiAgICAgIC0gSU5UX1RZUEVfTEVBUk5fTElNSVQKKyAqICAgICAgLSBJTlRfVFlQRV9MSU5LX1NQRUVECisgKiAgICAgIC0gSU5UX1RZUEVfQ09OR0VTVAorICogICAgICAtIElOVF9UWVBFX0dSRUVOX0ZFQVRVUkUKKyAqICAgICAgLSBJTlRfVFlQRV9MT09QX0RFVEVDVAorICogICAgICAtIElOVF9UWVBFXzgwNTEsCisgKiAgICAgIC0gSU5UX1RZUEVfQ0FCTEVfRElBRywKKyAqICAgICAgLSBJTlRfVFlQRV9BQ0wsCisgKiAgICAgIC0gSU5UX1RZUEVfU0xJRU5UCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2ludF9jb250cm9sX3NldChydGtfaW50X3R5cGVfdCB0eXBlLCBydGtfZW5hYmxlX3QgZW5hYmxlKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgbWFzazsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAodHlwZSA+PSBJTlRfVFlQRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZiAodHlwZSA9PSBJTlRfVFlQRV9SRVNFUlZFRCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0ludGVycnVwdE1hc2soJm1hc2spKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoRU5BQkxFRCA9PSBlbmFibGUpCisgICAgICAgIG1hc2sgPSBtYXNrIHwgKDE8PHR5cGUpOworICAgIGVsc2UgaWYgKERJU0FCTEVEID09IGVuYWJsZSkKKyAgICAgICAgbWFzayA9IG1hc2sgJiB+KDE8PHR5cGUpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0ludGVycnVwdE1hc2sobWFzaykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2ludF9jb250cm9sX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBpbnRlcnJ1cHQgdHJpZ2dlciBzdGF0dXMgY29uZmlndXJhdGlvbi4KKyAqIElucHV0OgorICogICAgICB0eXBlIC0gSW50ZXJydXB0IHR5cGUuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBFbmFibGUgLSBJbnRlcnJ1cHQgc3RhdHVzLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IGludGVycnVwdCBzdGF0dXMgY29uZmlndXJhdGlvbi4KKyAqICAgICAgVGhlIGludGVycnVwdCB0cmlnZ2VyIHN0YXR1cyBpcyBzaG93biBpbiB0aGUgZm9sbG93aW5nOgorICogICAgICAtIElOVF9UWVBFX0xJTktfU1RBVFVTCisgKiAgICAgIC0gSU5UX1RZUEVfTUVURVJfRVhDRUVECisgKiAgICAgIC0gSU5UX1RZUEVfTEVBUk5fTElNSVQKKyAqICAgICAgLSBJTlRfVFlQRV9MSU5LX1NQRUVECisgKiAgICAgIC0gSU5UX1RZUEVfQ09OR0VTVAorICogICAgICAtIElOVF9UWVBFX0dSRUVOX0ZFQVRVUkUKKyAqICAgICAgLSBJTlRfVFlQRV9MT09QX0RFVEVDVAorICogICAgICAtIElOVF9UWVBFXzgwNTEsCisgKiAgICAgIC0gSU5UX1RZUEVfQ0FCTEVfRElBRywKKyAqICAgICAgLSBJTlRfVFlQRV9BQ0wsCisgKiAgICAgIC0gSU5UX1RZUEVfVVBTLAorICogICAgICAtIElOVF9UWVBFX1NMSUVOVAorICovCitydGtfYXBpX3JldF90IHJ0a19pbnRfY29udHJvbF9nZXQocnRrX2ludF90eXBlX3QgdHlwZSwgcnRrX2VuYWJsZV90ICpwRW5hYmxlKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgbWFzazsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBFbmFibGUpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljSW50ZXJydXB0TWFzaygmbWFzaykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgwID09IChtYXNrJigxPDx0eXBlKSkpCisgICAgICAgICpwRW5hYmxlPURJU0FCTEVEOworICAgIGVsc2UKKyAgICAgICAgKnBFbmFibGU9RU5BQkxFRDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19pbnRfc3RhdHVzX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBpbnRlcnJ1cHQgdHJpZ2dlciBzdGF0dXMgdG8gY2xlYW4uCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwU3RhdHVzTWFzayAtIEludGVycnVwdCBzdGF0dXMgYml0IG1hc2suCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGNsZWFuIGludGVycnVwdCB0cmlnZ2VyIHN0YXR1cyB3aGVuIGludGVycnVwdCBoYXBwZW5lZC4KKyAqICAgICAgVGhlIGludGVycnVwdCB0cmlnZ2VyIHN0YXR1cyBpcyBzaG93biBpbiB0aGUgZm9sbG93aW5nOgorICogICAgICAtIElOVF9UWVBFX0xJTktfU1RBVFVTICAgICh2YWx1ZVswXSAoQml0MCkpCisgKiAgICAgIC0gSU5UX1RZUEVfTUVURVJfRVhDRUVEICAgKHZhbHVlWzBdIChCaXQxKSkKKyAqICAgICAgLSBJTlRfVFlQRV9MRUFSTl9MSU1JVCAgICAodmFsdWVbMF0gKEJpdDIpKQorICogICAgICAtIElOVF9UWVBFX0xJTktfU1BFRUQgICAgICh2YWx1ZVswXSAoQml0MykpCisgKiAgICAgIC0gSU5UX1RZUEVfQ09OR0VTVCAgICAgICAgKHZhbHVlWzBdIChCaXQ0KSkKKyAqICAgICAgLSBJTlRfVFlQRV9HUkVFTl9GRUFUVVJFICAodmFsdWVbMF0gKEJpdDUpKQorICogICAgICAtIElOVF9UWVBFX0xPT1BfREVURUNUICAgICh2YWx1ZVswXSAoQml0NikpCisgKiAgICAgIC0gSU5UX1RZUEVfODA1MSAgICAgICAgICAgKHZhbHVlWzBdIChCaXQ3KSkKKyAqICAgICAgLSBJTlRfVFlQRV9DQUJMRV9ESUFHICAgICAodmFsdWVbMF0gKEJpdDgpKQorICogICAgICAtIElOVF9UWVBFX0FDTCAgICAgICAgICAgICh2YWx1ZVswXSAoQml0OSkpCisgKiAgICAgIC0gSU5UX1RZUEVfU0xJRU5UICAgICAgICAgKHZhbHVlWzBdIChCaXQxMSkpCisgKiAgICAgIFRoZSBzdGF0dXMgd2lsbCBiZSBjbGVhcmVkIGFmdGVyIGV4ZWN1dGUgdGhpcyBBUEkuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2ludF9zdGF0dXNfc2V0KHJ0a19pbnRfc3RhdHVzX3QgKnBTdGF0dXNNYXNrKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKE5VTEwgPT0gcFN0YXR1c01hc2spCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYocFN0YXR1c01hc2stPnZhbHVlWzBdICYgKDB4MDAwMSA8PCBJTlRfVFlQRV9SRVNFUlZFRCkpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZihwU3RhdHVzTWFzay0+dmFsdWVbMF0gPj0gKDB4MDAwMSA8PCBJTlRfVFlQRV9FTkQpKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljSW50ZXJydXB0U3RhdHVzKChydGtfdWludDMyKXBTdGF0dXNNYXNrLT52YWx1ZVswXSkpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfaW50X3N0YXR1c19nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgaW50ZXJydXB0IHRyaWdnZXIgc3RhdHVzLgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcFN0YXR1c01hc2sgLSBJbnRlcnJ1cHQgc3RhdHVzIGJpdCBtYXNrLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IGludGVycnVwdCB0cmlnZ2VyIHN0YXR1cyB3aGVuIGludGVycnVwdCBoYXBwZW5lZC4KKyAqICAgICAgVGhlIGludGVycnVwdCB0cmlnZ2VyIHN0YXR1cyBpcyBzaG93biBpbiB0aGUgZm9sbG93aW5nOgorICogICAgICAtIElOVF9UWVBFX0xJTktfU1RBVFVTICAgICh2YWx1ZVswXSAoQml0MCkpCisgKiAgICAgIC0gSU5UX1RZUEVfTUVURVJfRVhDRUVEICAgKHZhbHVlWzBdIChCaXQxKSkKKyAqICAgICAgLSBJTlRfVFlQRV9MRUFSTl9MSU1JVCAgICAodmFsdWVbMF0gKEJpdDIpKQorICogICAgICAtIElOVF9UWVBFX0xJTktfU1BFRUQgICAgICh2YWx1ZVswXSAoQml0MykpCisgKiAgICAgIC0gSU5UX1RZUEVfQ09OR0VTVCAgICAgICAgKHZhbHVlWzBdIChCaXQ0KSkKKyAqICAgICAgLSBJTlRfVFlQRV9HUkVFTl9GRUFUVVJFICAodmFsdWVbMF0gKEJpdDUpKQorICogICAgICAtIElOVF9UWVBFX0xPT1BfREVURUNUICAgICh2YWx1ZVswXSAoQml0NikpCisgKiAgICAgIC0gSU5UX1RZUEVfODA1MSAgICAgICAgICAgKHZhbHVlWzBdIChCaXQ3KSkKKyAqICAgICAgLSBJTlRfVFlQRV9DQUJMRV9ESUFHICAgICAodmFsdWVbMF0gKEJpdDgpKQorICogICAgICAtIElOVF9UWVBFX0FDTCAgICAgICAgICAgICh2YWx1ZVswXSAoQml0OSkpCisgKiAgICAgIC0gSU5UX1RZUEVfU0xJRU5UICAgICAgICAgKHZhbHVlWzBdIChCaXQxMSkpCisgKgorICovCitydGtfYXBpX3JldF90IHJ0a19pbnRfc3RhdHVzX2dldChydGtfaW50X3N0YXR1c190KiBwU3RhdHVzTWFzaykKK3sKKyAgICBydGtfYXBpX3JldF90ICAgcmV0VmFsOworICAgIHJ0a191aW50MzIgICAgICAgICAgaW1zX21hc2s7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoTlVMTCA9PSBwU3RhdHVzTWFzaykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNJbnRlcnJ1cHRTdGF0dXMoJmltc19tYXNrKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcFN0YXR1c01hc2stPnZhbHVlWzBdID0gKGltc19tYXNrICYgMHgwMDAwMEZGRik7CisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworI2RlZmluZSBBRFZfTk9UX1NVUFBPUlQgKDB4RkZGRikKK3N0YXRpYyBydGtfYXBpX3JldF90IF9ydGtfaW50X0FkdmlkeF9nZXQocnRrX2ludF9hZHZUeXBlX3QgYWR2X3R5cGUsIHJ0a191aW50MzIgKnBBc2ljX2lkeCkKK3sKKyAgICBydGtfdWludDMyIGFzaWNfaWR4W0FEVl9FTkRdID0KKyAgICB7CisgICAgICAgIElOVFJTVF9MMl9MRUFSTiwKKyAgICAgICAgSU5UUlNUX1NQRUVEX0NIQU5HRSwKKyAgICAgICAgSU5UUlNUX1NQRUNJQUxfQ09OR0VTVElPTiwKKyAgICAgICAgSU5UUlNUX1BPUlRfTElOS0RPV04sCisgICAgICAgIElOVFJTVF9QT1JUX0xJTktVUCwKKyAgICAgICAgQURWX05PVF9TVVBQT1JULAorICAgICAgICBJTlRSU1RfUkxEUF9MT09QRUQsCisgICAgICAgIElOVFJTVF9STERQX1JFTEVBU0VELAorICAgIH07CisKKyAgICBpZihhZHZfdHlwZSA+PSBBRFZfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYoYXNpY19pZHhbYWR2X3R5cGVdID09IEFEVl9OT1RfU1VQUE9SVCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9DSElQX05PVF9TVVBQT1JURUQ7CisKKyAgICAqcEFzaWNfaWR4ID0gYXNpY19pZHhbYWR2X3R5cGVdOworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19pbnRfYWR2YW5jZUluZm9fZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGludGVycnVwdCBhZHZhbmNlZCBpbmZvcm1hdGlvbi4KKyAqIElucHV0OgorICogICAgICBhZHZfdHlwZSAtIEFkdmFuY2VkIGludGVycnVwdCB0eXBlLgorICogT3V0cHV0OgorICogICAgICBpbmZvIC0gSW5mb3JtYXRpb24gcGVyIHR5cGUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBjYW4gZ2V0IGFkdmFuY2VkIGluZm9ybWF0aW9uIHdoZW4gaW50ZXJydXB0IGhhcHBlbmVkLgorICogICAgICBUaGUgc3RhdHVzIHdpbGwgYmUgY2xlYXJlZCBhZnRlciBleGVjdXRlIHRoaXMgQVBJLgorICovCitydGtfYXBpX3JldF90IHJ0a19pbnRfYWR2YW5jZUluZm9fZ2V0KHJ0a19pbnRfYWR2VHlwZV90IGFkdl90eXBlLCBydGtfaW50X2luZm9fdCAqcEluZm8pCit7CisgICAgcnRrX2FwaV9yZXRfdCAgIHJldFZhbDsKKyAgICBydGtfdWludDMyICAgICAgZGF0YTsKKyAgICBydGtfdWludDMyICAgICAgaW50QWR2VHlwZTsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihhZHZfdHlwZSA+PSBBRFZfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYoTlVMTCA9PSBwSW5mbykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZihhZHZfdHlwZSAhPSBBRFZfTUVURVJfRVhDRUVEX01BU0spCisgICAgeworICAgICAgICBpZigocmV0VmFsID0gX3J0a19pbnRfQWR2aWR4X2dldChhZHZfdHlwZSwgJmludEFkdlR5cGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKworICAgIHN3aXRjaChhZHZfdHlwZSkKKyAgICB7CisgICAgICAgIGNhc2UgQURWX0wyX0xFQVJOX1BPUlRfTUFTSzoKKyAgICAgICAgICAgIC8qIEdldCBwaHlzaWNhbCBwb3J0bWFzayAqLworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNJbnRlcnJ1cHRSZWxhdGVkU3RhdHVzKGludEFkdlR5cGUsICZkYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIC8qIENsZWFyIEFkdmFuY2VkIEluZm8gKi8KKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljSW50ZXJydXB0UmVsYXRlZFN0YXR1cyhpbnRBZHZUeXBlLCAweEZGRkYpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgLyogVHJhbnNsYXRlIHRvIGxvZ2ljYWwgcG9ydG1hc2sgKi8KKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGtfc3dpdGNoX3BvcnRtYXNrX1AyTF9nZXQoZGF0YSwgJihwSW5mby0+cG9ydE1hc2spKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIC8qIEdldCBzeXN0ZW0gbGVhcm4gKi8KKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljSW50ZXJydXB0UmVsYXRlZFN0YXR1cyhJTlRSU1RfU1lTX0xFQVJOLCAmZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAvKiBDbGVhciBzeXN0ZW0gbGVhcm4gKi8KKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljSW50ZXJydXB0UmVsYXRlZFN0YXR1cyhJTlRSU1RfU1lTX0xFQVJOLCAweDAwMDEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgcEluZm8tPnN5c3RlbUxlYXJuT3ZlciA9IGRhdGE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBRFZfU1BFRURfQ0hBTkdFX1BPUlRfTUFTSzoKKyAgICAgICAgY2FzZSBBRFZfU1BFQ0lBTF9DT05HRVNUSU9OX1BPUlRfTUFTSzoKKyAgICAgICAgY2FzZSBBRFZfUE9SVF9MSU5LRE9XTl9QT1JUX01BU0s6CisgICAgICAgIGNhc2UgQURWX1BPUlRfTElOS1VQX1BPUlRfTUFTSzoKKyAgICAgICAgY2FzZSBBRFZfUkxEUF9MT09QRUQ6CisgICAgICAgIGNhc2UgQURWX1JMRFBfUkVMRUFTRUQ6CisgICAgICAgICAgICAvKiBHZXQgcGh5c2ljYWwgcG9ydG1hc2sgKi8KKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljSW50ZXJydXB0UmVsYXRlZFN0YXR1cyhpbnRBZHZUeXBlLCAmZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAvKiBDbGVhciBBZHZhbmNlZCBJbmZvICovCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0ludGVycnVwdFJlbGF0ZWRTdGF0dXMoaW50QWR2VHlwZSwgMHhGRkZGKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIC8qIFRyYW5zbGF0ZSB0byBsb2dpY2FsIHBvcnRtYXNrICovCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRrX3N3aXRjaF9wb3J0bWFza19QMkxfZ2V0KGRhdGEsICYocEluZm8tPnBvcnRNYXNrKSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBRFZfTUVURVJfRVhDRUVEX01BU0s6CisgICAgICAgICAgICAvKiBHZXQgTWV0ZXIgTWFzayAqLworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNJbnRlcnJ1cHRSZWxhdGVkU3RhdHVzKElOVFJTVF9NRVRFUjBfMTUsICZkYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIC8qIENsZWFyIEFkdmFuY2VkIEluZm8gKi8KKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljSW50ZXJydXB0UmVsYXRlZFN0YXR1cyhJTlRSU1RfTUVURVIwXzE1LCAweEZGRkYpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgcEluZm8tPm1ldGVyTWFzayA9IGRhdGEgJiAweEZGRkY7CisKKyAgICAgICAgICAgIC8qIEdldCBNZXRlciBNYXNrICovCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0ludGVycnVwdFJlbGF0ZWRTdGF0dXMoSU5UUlNUX01FVEVSMTZfMzEsICZkYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIC8qIENsZWFyIEFkdmFuY2VkIEluZm8gKi8KKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljSW50ZXJydXB0UmVsYXRlZFN0YXR1cyhJTlRSU1RfTUVURVIxNl8zMSwgMHhGRkZGKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIHBJbmZvLT5tZXRlck1hc2sgPSBwSW5mby0+bWV0ZXJNYXNrIHwgKChkYXRhIDw8IDE2KSAmIDB4RkZGRjAwMDApOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2wyLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvbDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWZmMGIyCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2wyLmMKQEAgLTAsMCArMSwyOTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNzYzMDYgJAorICogJERhdGU6IDIwMTctMDMtMDggMTU6MTM6NTggKzA4MDAgKOmAseS4iSwgMDgg5LiJ5pyIIDIwMTcpICQKKyAqCisgKiBQdXJwb3NlIDogUlRLIHN3aXRjaCBoaWdoLWxldmVsIEFQSSBmb3IgUlRMODM2Ny9SVEw4MzY3QworICogRmVhdHVyZSA6IEhlcmUgaXMgYSBsaXN0IG9mIGFsbCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBpbiBMMiBtb2R1bGUuCisgKgorICovCisKKyNpbmNsdWRlIDxydGtfc3dpdGNoLmg+CisjaW5jbHVkZSA8cnRrX2Vycm9yLmg+CisjaW5jbHVkZSA8bDIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnYuaD4KKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2X2x1dC5oPgorI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnZfcG9ydC5oPgorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbDJfaW5pdAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEluaXRpYWxpemUgbDIgbW9kdWxlIG9mIHRoZSBzcGVjaWZpZWQgZGV2aWNlLgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgSW5pdGlhbGl6ZSBsMiBtb2R1bGUgYmVmb3JlIGNhbGxpbmcgYW55IGwyIEFQSXMuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2wyX2luaXQodm9pZCkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHBvcnQ7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljTHV0SXBNdWx0aWNhc3RMb29rdXAoRElTQUJMRUQpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAvKkVuYWJsZSBDQU0gVXNhZ2UqLworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0x1dENhbVRiVXNhZ2UoRU5BQkxFRCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0x1dEFnZVRpbWVyU3BlZWQoNiwyKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgUlRLX1NDQU5fQUxMX0xPR19QT1JUKHBvcnQpCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNMdXRMZWFybkxpbWl0Tm8ocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIHJ0a19zd2l0Y2hfbWF4THV0QWRkck51bWJlcl9nZXQoKSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbDJfYWRkcl9hZGQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBBZGQgTFVUIHVuaWNhc3QgZW50cnkuCisgKiBJbnB1dDoKKyAqICAgICAgcE1hYyAtIDYgYnl0ZXMgdW5pY2FzdChJL0cgYml0IGlzIDApIG1hYyBhZGRyZXNzIHRvIGJlIHdyaXR0ZW4gaW50byBMVVQuCisgKiAgICAgIHBMMl9kYXRhIC0gVW5pY2FzdCBlbnRyeSBwYXJhbWV0ZXIKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9NQUMgICAgICAgICAgICAgIC0gSW52YWxpZCBNQUMgYWRkcmVzcy4KKyAqICAgICAgUlRfRVJSX0wyX0ZJRCAgICAgICAgICAgLSBJbnZhbGlkIEZJRCAuCisgKiAgICAgIFJUX0VSUl9MMl9JTkRFWFRCTF9GVUxMIC0gaGFzaGVkIGluZGV4IGlzIGZ1bGwgb2YgZW50cmllcy4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBJZiB0aGUgdW5pY2FzdCBtYWMgYWRkcmVzcyBhbHJlYWR5IGV4aXN0ZWQgaW4gTFVULCBpdCB3aWxsIHVkcGF0ZSB0aGUgc3RhdHVzIG9mIHRoZSBlbnRyeS4KKyAqICAgICAgT3RoZXJ3aXNlLCBpdCB3aWxsIGZpbmQgYW4gZW1wdHkgb3IgYXNpYyBhdXRvIGxlYXJuZWQgZW50cnkgdG8gd3JpdGUuIElmIGFsbCB0aGUgZW50cmllcworICogICAgICB3aXRoIHRoZSBzYW1lIGhhc2ggdmFsdWUgY2FuJ3QgYmUgcmVwbGFjZWQsIEFTSUMgd2lsbCByZXR1cm4gYSBSVF9FUlJfTDJfSU5ERVhUQkxfRlVMTCBlcnJvci4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfbDJfYWRkcl9hZGQocnRrX21hY190ICpwTWFjLCBydGtfbDJfdWNhc3RBZGRyX3QgKnBMMl9kYXRhKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgbWV0aG9kOworICAgIHJ0bDgzNjdjX2x1dHRiIGwyVGFibGU7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogbXVzdCBiZSB1bmljYXN0IGFkZHJlc3MgKi8KKyAgICBpZiAoKHBNYWMgPT0gTlVMTCkgfHwgKHBNYWMtPm9jdGV0WzBdICYgMHgxKSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9NQUM7CisKKyAgICBpZihwTDJfZGF0YSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gUlRfRVJSX01BQzsKKworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwTDJfZGF0YS0+cG9ydCk7CisKKyAgICBpZiAocEwyX2RhdGEtPml2bCA+PSBSVEtfRU5BQkxFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmIChwTDJfZGF0YS0+Y3ZpZCA+IFJUTDgzNjdDX1ZJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9MMl9WSUQ7CisKKyAgICBpZiAocEwyX2RhdGEtPmZpZCA+IFJUTDgzNjdDX0ZJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9MMl9GSUQ7CisKKyAgICBpZiAocEwyX2RhdGEtPmlzX3N0YXRpYz49IFJUS19FTkFCTEVfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYgKHBMMl9kYXRhLT5zYV9ibG9jaz49IFJUS19FTkFCTEVfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYgKHBMMl9kYXRhLT5kYV9ibG9jaz49IFJUS19FTkFCTEVfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYgKHBMMl9kYXRhLT5hdXRoPj0gUlRLX0VOQUJMRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZiAocEwyX2RhdGEtPmVmaWQ+IFJUTDgzNjdDX0VGSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZiAocEwyX2RhdGEtPnByaW9yaXR5ID4gUlRMODM2N0NfUFJJTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYgKHBMMl9kYXRhLT5zYV9wcmlfZW4gPj0gUlRLX0VOQUJMRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZiAocEwyX2RhdGEtPmZ3ZF9wcmlfZW4gPj0gUlRLX0VOQUJMRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBtZW1zZXQoJmwyVGFibGUsIDAsIHNpemVvZihydGw4MzY3Y19sdXR0YikpOworCisgICAgLyogZmlsbCBrZXkgKE1BQyxGSUQpIHRvIGdldCBMMiBlbnRyeSAqLworICAgIG1lbWNweShsMlRhYmxlLm1hYy5vY3RldCwgcE1hYy0+b2N0ZXQsIEVUSEVSX0FERFJfTEVOKTsKKyAgICBsMlRhYmxlLml2bF9zdmwgICAgID0gcEwyX2RhdGEtPml2bDsKKyAgICBsMlRhYmxlLmZpZCAgICAgICAgID0gcEwyX2RhdGEtPmZpZDsKKyAgICBsMlRhYmxlLmN2aWRfZmlkICAgID0gcEwyX2RhdGEtPmN2aWQ7CisgICAgbDJUYWJsZS5lZmlkICAgICAgICA9IHBMMl9kYXRhLT5lZmlkOworICAgIG1ldGhvZCA9IExVVFJFQURNRVRIT0RfTUFDOworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNMMkxvb2t1cFRiKG1ldGhvZCwgJmwyVGFibGUpOworICAgIGlmIChSVF9FUlJfT0sgPT0gcmV0VmFsICkKKyAgICB7CisgICAgICAgIG1lbWNweShsMlRhYmxlLm1hYy5vY3RldCwgcE1hYy0+b2N0ZXQsIEVUSEVSX0FERFJfTEVOKTsKKyAgICAgICAgbDJUYWJsZS5pdmxfc3ZsICAgICA9IHBMMl9kYXRhLT5pdmw7CisgICAgICAgIGwyVGFibGUuY3ZpZF9maWQgICAgPSBwTDJfZGF0YS0+Y3ZpZDsKKyAgICAgICAgbDJUYWJsZS5maWQgICAgICAgICA9IHBMMl9kYXRhLT5maWQ7CisgICAgICAgIGwyVGFibGUuZWZpZCAgICAgICAgPSBwTDJfZGF0YS0+ZWZpZDsKKyAgICAgICAgbDJUYWJsZS5zcGEgICAgICAgICA9IHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBMMl9kYXRhLT5wb3J0KTsKKyAgICAgICAgbDJUYWJsZS5ub3NhbGVhcm4gICA9IHBMMl9kYXRhLT5pc19zdGF0aWM7CisgICAgICAgIGwyVGFibGUuc2FfYmxvY2sgICAgPSBwTDJfZGF0YS0+c2FfYmxvY2s7CisgICAgICAgIGwyVGFibGUuZGFfYmxvY2sgICAgPSBwTDJfZGF0YS0+ZGFfYmxvY2s7CisgICAgICAgIGwyVGFibGUubDNsb29rdXAgICAgPSAwOworICAgICAgICBsMlRhYmxlLmF1dGggICAgICAgID0gcEwyX2RhdGEtPmF1dGg7CisgICAgICAgIGwyVGFibGUuYWdlICAgICAgICAgPSA2OworICAgICAgICBsMlRhYmxlLmx1dF9wcmkgICAgID0gcEwyX2RhdGEtPnByaW9yaXR5OworICAgICAgICBsMlRhYmxlLnNhX2VuICAgICAgID0gcEwyX2RhdGEtPnNhX3ByaV9lbjsKKyAgICAgICAgbDJUYWJsZS5md2RfZW4gICAgICA9IHBMMl9kYXRhLT5md2RfcHJpX2VuOworICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0wyTG9va3VwVGIoJmwyVGFibGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIHBMMl9kYXRhLT5hZGRyZXNzID0gbDJUYWJsZS5hZGRyZXNzOworICAgICAgICByZXR1cm4gUlRfRVJSX09LOworICAgIH0KKyAgICBlbHNlIGlmIChSVF9FUlJfTDJfRU5UUllfTk9URk9VTkQgPT0gcmV0VmFsICkKKyAgICB7CisgICAgICAgIG1lbXNldCgmbDJUYWJsZSwgMCwgc2l6ZW9mKHJ0bDgzNjdjX2x1dHRiKSk7CisgICAgICAgIG1lbWNweShsMlRhYmxlLm1hYy5vY3RldCwgcE1hYy0+b2N0ZXQsIEVUSEVSX0FERFJfTEVOKTsKKyAgICAgICAgbDJUYWJsZS5pdmxfc3ZsICAgICA9IHBMMl9kYXRhLT5pdmw7CisgICAgICAgIGwyVGFibGUuY3ZpZF9maWQgICAgPSBwTDJfZGF0YS0+Y3ZpZDsKKyAgICAgICAgbDJUYWJsZS5maWQgICAgICAgICA9IHBMMl9kYXRhLT5maWQ7CisgICAgICAgIGwyVGFibGUuZWZpZCAgICAgICAgPSBwTDJfZGF0YS0+ZWZpZDsKKyAgICAgICAgbDJUYWJsZS5zcGEgICAgICAgICA9IHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBMMl9kYXRhLT5wb3J0KTsKKyAgICAgICAgbDJUYWJsZS5ub3NhbGVhcm4gICA9IHBMMl9kYXRhLT5pc19zdGF0aWM7CisgICAgICAgIGwyVGFibGUuc2FfYmxvY2sgICAgPSBwTDJfZGF0YS0+c2FfYmxvY2s7CisgICAgICAgIGwyVGFibGUuZGFfYmxvY2sgICAgPSBwTDJfZGF0YS0+ZGFfYmxvY2s7CisgICAgICAgIGwyVGFibGUubDNsb29rdXAgICAgPSAwOworICAgICAgICBsMlRhYmxlLmF1dGggICAgICAgID0gcEwyX2RhdGEtPmF1dGg7CisgICAgICAgIGwyVGFibGUuYWdlICAgICAgICAgPSA2OworICAgICAgICBsMlRhYmxlLmx1dF9wcmkgICAgID0gcEwyX2RhdGEtPnByaW9yaXR5OworICAgICAgICBsMlRhYmxlLnNhX2VuICAgICAgID0gcEwyX2RhdGEtPnNhX3ByaV9lbjsKKyAgICAgICAgbDJUYWJsZS5md2RfZW4gICAgICA9IHBMMl9kYXRhLT5md2RfcHJpX2VuOworCisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0wyTG9va3VwVGIoJmwyVGFibGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIHBMMl9kYXRhLT5hZGRyZXNzID0gbDJUYWJsZS5hZGRyZXNzOworCisgICAgICAgIG1ldGhvZCA9IExVVFJFQURNRVRIT0RfTUFDOworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljTDJMb29rdXBUYihtZXRob2QsICZsMlRhYmxlKTsKKyAgICAgICAgaWYgKFJUX0VSUl9MMl9FTlRSWV9OT1RGT1VORCA9PSByZXRWYWwgKQorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9MMl9JTkRFWFRCTF9GVUxMOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHVybiByZXRWYWw7CisKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2FkZHJfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IExVVCB1bmljYXN0IGVudHJ5LgorICogSW5wdXQ6CisgKiAgICAgIHBNYWMgICAgLSA2IGJ5dGVzIHVuaWNhc3QoSS9HIGJpdCBpcyAwKSBtYWMgYWRkcmVzcyB0byBiZSB3cml0dGVuIGludG8gTFVULgorICogT3V0cHV0OgorICogICAgICBwTDJfZGF0YSAtIFVuaWNhc3QgZW50cnkgcGFyYW1ldGVyCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9NQUMgICAgICAgICAgICAgICAgICAtIEludmFsaWQgTUFDIGFkZHJlc3MuCisgKiAgICAgIFJUX0VSUl9MMl9GSUQgICAgICAgICAgICAgICAtIEludmFsaWQgRklEIC4KKyAqICAgICAgUlRfRVJSX0wyX0VOVFJZX05PVEZPVU5EICAgIC0gTm8gc3VjaCBMVVQgZW50cnkuCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIElmIHRoZSB1bmljYXN0IG1hYyBhZGRyZXNzIGV4aXN0ZWQgaW4gTFVULCBpdCB3aWxsIHJldHVybiB0aGUgcG9ydCBhbmQgZmlkIHdoZXJlCisgKiAgICAgIHRoZSBtYWMgaXMgbGVhcm5lZC4gT3RoZXJ3aXNlLCBpdCB3aWxsIHJldHVybiBhIFJUX0VSUl9MMl9FTlRSWV9OT1RGT1VORCBlcnJvci4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfbDJfYWRkcl9nZXQocnRrX21hY190ICpwTWFjLCBydGtfbDJfdWNhc3RBZGRyX3QgKnBMMl9kYXRhKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgbWV0aG9kOworICAgIHJ0bDgzNjdjX2x1dHRiIGwyVGFibGU7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogbXVzdCBiZSB1bmljYXN0IGFkZHJlc3MgKi8KKyAgICBpZiAoKHBNYWMgPT0gTlVMTCkgfHwgKHBNYWMtPm9jdGV0WzBdICYgMHgxKSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9NQUM7CisKKyAgICBpZiAocEwyX2RhdGEtPmZpZCA+IFJUTDgzNjdDX0ZJRE1BWCB8fCBwTDJfZGF0YS0+ZWZpZCA+IFJUTDgzNjdDX0VGSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfTDJfRklEOworCisgICAgbWVtc2V0KCZsMlRhYmxlLCAwLCBzaXplb2YocnRsODM2N2NfbHV0dGIpKTsKKworICAgIG1lbWNweShsMlRhYmxlLm1hYy5vY3RldCwgcE1hYy0+b2N0ZXQsIEVUSEVSX0FERFJfTEVOKTsKKyAgICBsMlRhYmxlLml2bF9zdmwgICAgID0gcEwyX2RhdGEtPml2bDsKKyAgICBsMlRhYmxlLmN2aWRfZmlkICAgID0gcEwyX2RhdGEtPmN2aWQ7CisgICAgbDJUYWJsZS5maWQgICAgICAgICA9IHBMMl9kYXRhLT5maWQ7CisgICAgbDJUYWJsZS5lZmlkICAgICAgICA9IHBMMl9kYXRhLT5lZmlkOworICAgIG1ldGhvZCA9IExVVFJFQURNRVRIT0RfTUFDOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljTDJMb29rdXBUYihtZXRob2QsICZsMlRhYmxlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgbWVtY3B5KHBMMl9kYXRhLT5tYWMub2N0ZXQsIHBNYWMtPm9jdGV0LEVUSEVSX0FERFJfTEVOKTsKKyAgICBwTDJfZGF0YS0+cG9ydCAgICAgID0gcnRrX3N3aXRjaF9wb3J0X1AyTF9nZXQobDJUYWJsZS5zcGEpOworICAgIHBMMl9kYXRhLT5maWQgICAgICAgPSBsMlRhYmxlLmZpZDsKKyAgICBwTDJfZGF0YS0+ZWZpZCAgICAgID0gbDJUYWJsZS5lZmlkOworICAgIHBMMl9kYXRhLT5pdmwgICAgICAgPSBsMlRhYmxlLml2bF9zdmw7CisgICAgcEwyX2RhdGEtPmN2aWQgICAgICA9IGwyVGFibGUuY3ZpZF9maWQ7CisgICAgcEwyX2RhdGEtPmlzX3N0YXRpYyA9IGwyVGFibGUubm9zYWxlYXJuOworICAgIHBMMl9kYXRhLT5hdXRoICAgICAgPSBsMlRhYmxlLmF1dGg7CisgICAgcEwyX2RhdGEtPnNhX2Jsb2NrICA9IGwyVGFibGUuc2FfYmxvY2s7CisgICAgcEwyX2RhdGEtPmRhX2Jsb2NrICA9IGwyVGFibGUuZGFfYmxvY2s7CisgICAgcEwyX2RhdGEtPnByaW9yaXR5ICA9IGwyVGFibGUubHV0X3ByaTsKKyAgICBwTDJfZGF0YS0+c2FfcHJpX2VuID0gbDJUYWJsZS5zYV9lbjsKKyAgICBwTDJfZGF0YS0+ZndkX3ByaV9lbj0gbDJUYWJsZS5md2RfZW47CisgICAgcEwyX2RhdGEtPmFkZHJlc3MgICA9IGwyVGFibGUuYWRkcmVzczsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sMl9hZGRyX25leHRfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IE5leHQgTFVUIHVuaWNhc3QgZW50cnkuCisgKiBJbnB1dDoKKyAqICAgICAgcmVhZF9tZXRob2QgICAgIC0gVGhlIHJlYWRpbmcgbWV0aG9kLgorICogICAgICBwb3J0ICAgICAgICAgICAgLSBUaGUgcG9ydCBudW1iZXIgaWYgdGhlIHJlYWRfbWV0b2hkIGlzIFJFQURNRVRIT0RfTkVYVF9MMlVDU1BBCisgKiAgICAgIHBBZGRyZXNzICAgICAgICAtIFRoZSBBZGRyZXNzIElECisgKiBPdXRwdXQ6CisgKiAgICAgIHBMMl9kYXRhIC0gVW5pY2FzdCBlbnRyeSBwYXJhbWV0ZXIKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqICAgICAgUlRfRVJSX01BQyAgICAgICAgICAgICAgICAgIC0gSW52YWxpZCBNQUMgYWRkcmVzcy4KKyAqICAgICAgUlRfRVJSX0wyX0ZJRCAgICAgICAgICAgICAgIC0gSW52YWxpZCBGSUQgLgorICogICAgICBSVF9FUlJfTDJfRU5UUllfTk9URk9VTkQgICAgLSBObyBzdWNoIExVVCBlbnRyeS4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgR2V0IHRoZSBuZXh0IHVuaWNhc3QgZW50cnkgYWZ0ZXIgdGhlIGN1cnJlbnQgZW50cnkgcG9pbnRlZCBieSBwQWRkcmVzcy4KKyAqICAgICAgVGhlIGFkZHJlc3Mgb2YgbmV4dCBlbnRyeSBpcyByZXR1cm5lZCBieSBwQWRkcmVzcy4gVXNlciBjYW4gdXNlIChhZGRyZXNzICsgMSkKKyAqICAgICAgYXMgcEFkZHJlc3MgdG8gY2FsbCB0aGlzIEFQSSBhZ2FpbiBmb3IgZHVtcGluZyBhbGwgZW50cmllcyBpcyBMVVQuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2wyX2FkZHJfbmV4dF9nZXQocnRrX2wyX3JlYWRfbWV0aG9kX3QgcmVhZF9tZXRob2QsIHJ0a19wb3J0X3QgcG9ydCwgcnRrX3VpbnQzMiAqcEFkZHJlc3MsIHJ0a19sMl91Y2FzdEFkZHJfdCAqcEwyX2RhdGEpCit7CisgICAgcnRrX2FwaV9yZXRfdCAgIHJldFZhbDsKKyAgICBydGtfdWludDMyICAgICAgbWV0aG9kOworICAgIHJ0bDgzNjdjX2x1dHRiICBsMlRhYmxlOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIEVycm9yIENoZWNraW5nICovCisgICAgaWYgKChwTDJfZGF0YSA9PSBOVUxMKSB8fCAocEFkZHJlc3MgPT0gTlVMTCkpCisgICAgICAgIHJldHVybiBSVF9FUlJfTUFDOworCisgICAgaWYocmVhZF9tZXRob2QgPT0gUkVBRE1FVEhPRF9ORVhUX0wyVUMpCisgICAgICAgIG1ldGhvZCA9IExVVFJFQURNRVRIT0RfTkVYVF9MMlVDOworICAgIGVsc2UgaWYocmVhZF9tZXRob2QgPT0gUkVBRE1FVEhPRF9ORVhUX0wyVUNTUEEpCisgICAgICAgIG1ldGhvZCA9IExVVFJFQURNRVRIT0RfTkVYVF9MMlVDU1BBOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIC8qIENoZWNrIFBvcnQgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQocG9ydCk7CisKKyAgICBpZigqcEFkZHJlc3MgPiBSVEtfTUFYX0xVVF9BRERSX0lEICkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9MMl9MMlVOSV9QQVJBTTsKKworICAgIG1lbXNldCgmbDJUYWJsZSwgMCwgc2l6ZW9mKHJ0bDgzNjdjX2x1dHRiKSk7CisgICAgbDJUYWJsZS5hZGRyZXNzID0gKnBBZGRyZXNzOworCisgICAgaWYocmVhZF9tZXRob2QgPT0gUkVBRE1FVEhPRF9ORVhUX0wyVUNTUEEpCisgICAgICAgIGwyVGFibGUuc3BhID0gcnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCk7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNMMkxvb2t1cFRiKG1ldGhvZCwgJmwyVGFibGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZihsMlRhYmxlLmFkZHJlc3MgPCAqcEFkZHJlc3MpCisgICAgICAgIHJldHVybiBSVF9FUlJfTDJfRU5UUllfTk9URk9VTkQ7CisKKyAgICBtZW1jcHkocEwyX2RhdGEtPm1hYy5vY3RldCwgbDJUYWJsZS5tYWMub2N0ZXQsIEVUSEVSX0FERFJfTEVOKTsKKyAgICBwTDJfZGF0YS0+cG9ydCAgICAgID0gcnRrX3N3aXRjaF9wb3J0X1AyTF9nZXQobDJUYWJsZS5zcGEpOworICAgIHBMMl9kYXRhLT5maWQgICAgICAgPSBsMlRhYmxlLmZpZDsKKyAgICBwTDJfZGF0YS0+ZWZpZCAgICAgID0gbDJUYWJsZS5lZmlkOworICAgIHBMMl9kYXRhLT5pdmwgICAgICAgPSBsMlRhYmxlLml2bF9zdmw7CisgICAgcEwyX2RhdGEtPmN2aWQgICAgICA9IGwyVGFibGUuY3ZpZF9maWQ7CisgICAgcEwyX2RhdGEtPmlzX3N0YXRpYyA9IGwyVGFibGUubm9zYWxlYXJuOworICAgIHBMMl9kYXRhLT5hdXRoICAgICAgPSBsMlRhYmxlLmF1dGg7CisgICAgcEwyX2RhdGEtPnNhX2Jsb2NrICA9IGwyVGFibGUuc2FfYmxvY2s7CisgICAgcEwyX2RhdGEtPmRhX2Jsb2NrICA9IGwyVGFibGUuZGFfYmxvY2s7CisgICAgcEwyX2RhdGEtPnByaW9yaXR5ICA9IGwyVGFibGUubHV0X3ByaTsKKyAgICBwTDJfZGF0YS0+c2FfcHJpX2VuID0gbDJUYWJsZS5zYV9lbjsKKyAgICBwTDJfZGF0YS0+ZndkX3ByaV9lbj0gbDJUYWJsZS5md2RfZW47CisgICAgcEwyX2RhdGEtPmFkZHJlc3MgICA9IGwyVGFibGUuYWRkcmVzczsKKworICAgICpwQWRkcmVzcyA9IGwyVGFibGUuYWRkcmVzczsKKworICAgIHJldHVybiBSVF9FUlJfT0s7CisKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2FkZHJfZGVsCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgRGVsZXRlIExVVCB1bmljYXN0IGVudHJ5LgorICogSW5wdXQ6CisgKiAgICAgIHBNYWMgLSA2IGJ5dGVzIHVuaWNhc3QoSS9HIGJpdCBpcyAwKSBtYWMgYWRkcmVzcyB0byBiZSB3cml0dGVuIGludG8gTFVULgorICogICAgICBmaWQgLSBGaWx0ZXJpbmcgZGF0YWJhc2UKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfTUFDICAgICAgICAgICAgICAgICAgLSBJbnZhbGlkIE1BQyBhZGRyZXNzLgorICogICAgICBSVF9FUlJfTDJfRklEICAgICAgICAgICAgICAgLSBJbnZhbGlkIEZJRCAuCisgKiAgICAgIFJUX0VSUl9MMl9FTlRSWV9OT1RGT1VORCAgICAtIE5vIHN1Y2ggTFVUIGVudHJ5LgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBJZiB0aGUgbWFjIGhhcyBleGlzdGVkIGluIHRoZSBMVVQsIGl0IHdpbGwgYmUgZGVsZXRlZC4gT3RoZXJ3aXNlLCBpdCB3aWxsIHJldHVybiBSVF9FUlJfTDJfRU5UUllfTk9URk9VTkQuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2wyX2FkZHJfZGVsKHJ0a19tYWNfdCAqcE1hYywgcnRrX2wyX3VjYXN0QWRkcl90ICpwTDJfZGF0YSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIG1ldGhvZDsKKyAgICBydGw4MzY3Y19sdXR0YiBsMlRhYmxlOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIG11c3QgYmUgdW5pY2FzdCBhZGRyZXNzICovCisgICAgaWYgKChwTWFjID09IE5VTEwpIHx8IChwTWFjLT5vY3RldFswXSAmIDB4MSkpCisgICAgICAgIHJldHVybiBSVF9FUlJfTUFDOworCisgICAgaWYgKHBMMl9kYXRhLT5maWQgPiBSVEw4MzY3Q19GSURNQVggfHwgcEwyX2RhdGEtPmVmaWQgPiBSVEw4MzY3Q19FRklETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX0wyX0ZJRDsKKworICAgIG1lbXNldCgmbDJUYWJsZSwgMCwgc2l6ZW9mKHJ0bDgzNjdjX2x1dHRiKSk7CisKKyAgICAvKiBmaWxsIGtleSAoTUFDLEZJRCkgdG8gZ2V0IEwyIGVudHJ5ICovCisgICAgbWVtY3B5KGwyVGFibGUubWFjLm9jdGV0LCBwTWFjLT5vY3RldCwgRVRIRVJfQUREUl9MRU4pOworICAgIGwyVGFibGUuaXZsX3N2bCAgICAgPSBwTDJfZGF0YS0+aXZsOworICAgIGwyVGFibGUuY3ZpZF9maWQgICAgPSBwTDJfZGF0YS0+Y3ZpZDsKKyAgICBsMlRhYmxlLmZpZCAgICAgICAgID0gcEwyX2RhdGEtPmZpZDsKKyAgICBsMlRhYmxlLmVmaWQgICAgICAgID0gcEwyX2RhdGEtPmVmaWQ7CisgICAgbWV0aG9kID0gTFVUUkVBRE1FVEhPRF9NQUM7CisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0wyTG9va3VwVGIobWV0aG9kLCAmbDJUYWJsZSk7CisgICAgaWYgKFJUX0VSUl9PSyA9PSAgcmV0VmFsKQorICAgIHsKKyAgICAgICAgbWVtY3B5KGwyVGFibGUubWFjLm9jdGV0LCBwTWFjLT5vY3RldCwgRVRIRVJfQUREUl9MRU4pOworICAgICAgICBsMlRhYmxlLml2bF9zdmwgICAgID0gcEwyX2RhdGEtPml2bDsKKyAgICAgICAgbDJUYWJsZS5jdmlkX2ZpZCAgICA9IHBMMl9kYXRhLT5jdmlkOworICAgICAgICBsMlRhYmxlLmZpZCA9IHBMMl9kYXRhLT5maWQ7CisgICAgICAgIGwyVGFibGUuZWZpZCA9IHBMMl9kYXRhLT5lZmlkOworICAgICAgICBsMlRhYmxlLnNwYSA9IDA7CisgICAgICAgIGwyVGFibGUubm9zYWxlYXJuID0gMDsKKyAgICAgICAgbDJUYWJsZS5zYV9ibG9jayA9IDA7CisgICAgICAgIGwyVGFibGUuZGFfYmxvY2sgPSAwOworICAgICAgICBsMlRhYmxlLmF1dGggPSAwOworICAgICAgICBsMlRhYmxlLmFnZSA9IDA7CisgICAgICAgIGwyVGFibGUubHV0X3ByaSA9IDA7CisgICAgICAgIGwyVGFibGUuc2FfZW4gPSAwOworICAgICAgICBsMlRhYmxlLmZ3ZF9lbiA9IDA7CisgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljTDJMb29rdXBUYigmbDJUYWJsZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgcEwyX2RhdGEtPmFkZHJlc3MgPSBsMlRhYmxlLmFkZHJlc3M7CisgICAgICAgIHJldHVybiBSVF9FUlJfT0s7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX21jYXN0QWRkcl9hZGQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBBZGQgTFVUIG11bHRpY2FzdCBlbnRyeS4KKyAqIElucHV0OgorICogICAgICBwTWNhc3RBZGRyICAtIEwyIG11bHRpY2FzdCBlbnRyeSBzdHJ1Y3R1cmUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9NQUMgICAgICAgICAgICAgIC0gSW52YWxpZCBNQUMgYWRkcmVzcy4KKyAqICAgICAgUlRfRVJSX0wyX0ZJRCAgICAgICAgICAgLSBJbnZhbGlkIEZJRCAuCisgKiAgICAgIFJUX0VSUl9MMl9WSUQgICAgICAgICAgIC0gSW52YWxpZCBWSUQgLgorICogICAgICBSVF9FUlJfTDJfSU5ERVhUQkxfRlVMTCAtIGhhc2hlZCBpbmRleCBpcyBmdWxsIG9mIGVudHJpZXMuCisgKiAgICAgIFJUX0VSUl9QT1JUX01BU0sgICAgICAgIC0gSW52YWxpZCBwb3J0bWFzay4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBJZiB0aGUgbXVsdGljYXN0IG1hYyBhZGRyZXNzIGFscmVhZHkgZXhpc3RlZCBpbiB0aGUgTFVULCBpdCB3aWxsIHVkcGF0ZSB0aGUKKyAqICAgICAgcG9ydCBtYXNrIG9mIHRoZSBlbnRyeS4gT3RoZXJ3aXNlLCBpdCB3aWxsIGZpbmQgYW4gZW1wdHkgb3IgYXNpYyBhdXRvIGxlYXJuZWQKKyAqICAgICAgZW50cnkgdG8gd3JpdGUuIElmIGFsbCB0aGUgZW50cmllcyB3aXRoIHRoZSBzYW1lIGhhc2ggdmFsdWUgY2FuJ3QgYmUgcmVwbGFjZWQsCisgKiAgICAgIEFTSUMgd2lsbCByZXR1cm4gYSBSVF9FUlJfTDJfSU5ERVhUQkxfRlVMTCBlcnJvci4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfbDJfbWNhc3RBZGRyX2FkZChydGtfbDJfbWNhc3RBZGRyX3QgKnBNY2FzdEFkZHIpCit7CisgICAgcnRrX2FwaV9yZXRfdCAgIHJldFZhbDsKKyAgICBydGtfdWludDMyICAgICAgbWV0aG9kOworICAgIHJ0bDgzNjdjX2x1dHRiICBsMlRhYmxlOworICAgIHJ0a191aW50MzIgICAgICBwbWFzazsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBNY2FzdEFkZHIpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgLyogbXVzdCBiZSBMMiBtdWx0aWNhc3QgYWRkcmVzcyAqLworICAgIGlmKCAocE1jYXN0QWRkci0+bWFjLm9jdGV0WzBdICYgMHgwMSkgIT0gMHgwMSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9NQUM7CisKKyAgICBSVEtfQ0hLX1BPUlRNQVNLX1ZBTElEKCZwTWNhc3RBZGRyLT5wb3J0bWFzayk7CisKKyAgICBpZihwTWNhc3RBZGRyLT5pdmwgPT0gMSkKKyAgICB7CisgICAgICAgIGlmIChwTWNhc3RBZGRyLT52aWQgPiBSVEw4MzY3Q19WSURNQVgpCisgICAgICAgICAgICByZXR1cm4gUlRfRVJSX0wyX1ZJRDsKKyAgICB9CisgICAgZWxzZSBpZihwTWNhc3RBZGRyLT5pdmwgPT0gMCkKKyAgICB7CisgICAgICAgIGlmIChwTWNhc3RBZGRyLT5maWQgPiBSVEw4MzY3Q19GSURNQVgpCisgICAgICAgICAgICByZXR1cm4gUlRfRVJSX0wyX0ZJRDsKKyAgICB9CisgICAgZWxzZQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYocE1jYXN0QWRkci0+ZndkX3ByaV9lbiA+PSBSVEtfRU5BQkxFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmKHBNY2FzdEFkZHItPnByaW9yaXR5ID4gUlRMODM2N0NfUFJJTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgLyogR2V0IHBoeXNpY2FsIHBvcnQgbWFzayAqLworICAgIGlmICgocmV0VmFsID0gcnRrX3N3aXRjaF9wb3J0bWFza19MMlBfZ2V0KCZwTWNhc3RBZGRyLT5wb3J0bWFzaywgJnBtYXNrKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgbWVtc2V0KCZsMlRhYmxlLCAwLCBzaXplb2YocnRsODM2N2NfbHV0dGIpKTsKKworICAgIC8qIGZpbGwga2V5IChNQUMsRklEKSB0byBnZXQgTDIgZW50cnkgKi8KKyAgICBtZW1jcHkobDJUYWJsZS5tYWMub2N0ZXQsIHBNY2FzdEFkZHItPm1hYy5vY3RldCwgRVRIRVJfQUREUl9MRU4pOworICAgIGwyVGFibGUuaXZsX3N2bCAgICAgPSBwTWNhc3RBZGRyLT5pdmw7CisKKyAgICBpZihwTWNhc3RBZGRyLT5pdmwpCisgICAgICAgIGwyVGFibGUuY3ZpZF9maWQgICAgPSBwTWNhc3RBZGRyLT52aWQ7CisgICAgZWxzZQorICAgICAgICBsMlRhYmxlLmN2aWRfZmlkICAgID0gcE1jYXN0QWRkci0+ZmlkOworCisgICAgbWV0aG9kID0gTFVUUkVBRE1FVEhPRF9NQUM7CisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0wyTG9va3VwVGIobWV0aG9kLCAmbDJUYWJsZSk7CisgICAgaWYgKFJUX0VSUl9PSyA9PSByZXRWYWwpCisgICAgeworICAgICAgICBtZW1jcHkobDJUYWJsZS5tYWMub2N0ZXQsIHBNY2FzdEFkZHItPm1hYy5vY3RldCwgRVRIRVJfQUREUl9MRU4pOworICAgICAgICBsMlRhYmxlLml2bF9zdmwgICAgID0gcE1jYXN0QWRkci0+aXZsOworCisgICAgICAgIGlmKHBNY2FzdEFkZHItPml2bCkKKyAgICAgICAgICAgIGwyVGFibGUuY3ZpZF9maWQgICAgPSBwTWNhc3RBZGRyLT52aWQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGwyVGFibGUuY3ZpZF9maWQgICAgPSBwTWNhc3RBZGRyLT5maWQ7CisKKyAgICAgICAgbDJUYWJsZS5tYnIgICAgICAgICA9IHBtYXNrOworICAgICAgICBsMlRhYmxlLm5vc2FsZWFybiAgID0gMTsKKyAgICAgICAgbDJUYWJsZS5sM2xvb2t1cCAgICA9IDA7CisgICAgICAgIGwyVGFibGUubHV0X3ByaSAgICAgPSBwTWNhc3RBZGRyLT5wcmlvcml0eTsKKyAgICAgICAgbDJUYWJsZS5md2RfZW4gICAgICA9IHBNY2FzdEFkZHItPmZ3ZF9wcmlfZW47CisgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljTDJMb29rdXBUYigmbDJUYWJsZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgcE1jYXN0QWRkci0+YWRkcmVzcyA9IGwyVGFibGUuYWRkcmVzczsKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PSzsKKyAgICB9CisgICAgZWxzZSBpZiAoUlRfRVJSX0wyX0VOVFJZX05PVEZPVU5EID09IHJldFZhbCkKKyAgICB7CisgICAgICAgIG1lbXNldCgmbDJUYWJsZSwgMCwgc2l6ZW9mKHJ0bDgzNjdjX2x1dHRiKSk7CisgICAgICAgIG1lbWNweShsMlRhYmxlLm1hYy5vY3RldCwgcE1jYXN0QWRkci0+bWFjLm9jdGV0LCBFVEhFUl9BRERSX0xFTik7CisgICAgICAgIGwyVGFibGUuaXZsX3N2bCAgICAgPSBwTWNhc3RBZGRyLT5pdmw7CisgICAgICAgIGlmKHBNY2FzdEFkZHItPml2bCkKKyAgICAgICAgICAgIGwyVGFibGUuY3ZpZF9maWQgICAgPSBwTWNhc3RBZGRyLT52aWQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGwyVGFibGUuY3ZpZF9maWQgICAgPSBwTWNhc3RBZGRyLT5maWQ7CisKKyAgICAgICAgbDJUYWJsZS5tYnIgICAgICAgICA9IHBtYXNrOworICAgICAgICBsMlRhYmxlLm5vc2FsZWFybiAgID0gMTsKKyAgICAgICAgbDJUYWJsZS5sM2xvb2t1cCAgICA9IDA7CisgICAgICAgIGwyVGFibGUubHV0X3ByaSAgICAgPSBwTWNhc3RBZGRyLT5wcmlvcml0eTsKKyAgICAgICAgbDJUYWJsZS5md2RfZW4gICAgICA9IHBNY2FzdEFkZHItPmZ3ZF9wcmlfZW47CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0wyTG9va3VwVGIoJmwyVGFibGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIHBNY2FzdEFkZHItPmFkZHJlc3MgPSBsMlRhYmxlLmFkZHJlc3M7CisKKyAgICAgICAgbWV0aG9kID0gTFVUUkVBRE1FVEhPRF9NQUM7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNMMkxvb2t1cFRiKG1ldGhvZCwgJmwyVGFibGUpOworICAgICAgICBpZiAoUlRfRVJSX0wyX0VOVFJZX05PVEZPVU5EID09IHJldFZhbCkKKyAgICAgICAgICAgIHJldHVybiAgICAgUlRfRVJSX0wyX0lOREVYVEJMX0ZVTEw7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbDJfbWNhc3RBZGRyX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBMVVQgbXVsdGljYXN0IGVudHJ5LgorICogSW5wdXQ6CisgKiAgICAgIHBNY2FzdEFkZHIgIC0gTDIgbXVsdGljYXN0IGVudHJ5IHN0cnVjdHVyZQorICogT3V0cHV0OgorICogICAgICBwTWNhc3RBZGRyICAtIEwyIG11bHRpY2FzdCBlbnRyeSBzdHJ1Y3R1cmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX01BQyAgICAgICAgICAgICAgICAgIC0gSW52YWxpZCBNQUMgYWRkcmVzcy4KKyAqICAgICAgUlRfRVJSX0wyX0ZJRCAgICAgICAgICAgICAgIC0gSW52YWxpZCBGSUQgLgorICogICAgICBSVF9FUlJfTDJfVklEICAgICAgICAgICAgICAgLSBJbnZhbGlkIFZJRCAuCisgKiAgICAgIFJUX0VSUl9MMl9FTlRSWV9OT1RGT1VORCAgICAtIE5vIHN1Y2ggTFVUIGVudHJ5LgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBJZiB0aGUgbXVsdGljYXN0IG1hYyBhZGRyZXNzIGV4aXN0ZWQgaW4gdGhlIExVVCwgaXQgd2lsbCByZXR1cm4gdGhlIHBvcnQgd2hlcmUKKyAqICAgICAgdGhlIG1hYyBpcyBsZWFybmVkLiBPdGhlcndpc2UsIGl0IHdpbGwgcmV0dXJuIGEgUlRfRVJSX0wyX0VOVFJZX05PVEZPVU5EIGVycm9yLgorICovCitydGtfYXBpX3JldF90IHJ0a19sMl9tY2FzdEFkZHJfZ2V0KHJ0a19sMl9tY2FzdEFkZHJfdCAqcE1jYXN0QWRkcikKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIG1ldGhvZDsKKyAgICBydGw4MzY3Y19sdXR0YiBsMlRhYmxlOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKE5VTEwgPT0gcE1jYXN0QWRkcikKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICAvKiBtdXN0IGJlIEwyIG11bHRpY2FzdCBhZGRyZXNzICovCisgICAgaWYoIChwTWNhc3RBZGRyLT5tYWMub2N0ZXRbMF0gJiAweDAxKSAhPSAweDAxKQorICAgICAgICByZXR1cm4gUlRfRVJSX01BQzsKKworICAgIGlmKHBNY2FzdEFkZHItPml2bCA9PSAxKQorICAgIHsKKyAgICAgICAgaWYgKHBNY2FzdEFkZHItPnZpZCA+IFJUTDgzNjdDX1ZJRE1BWCkKKyAgICAgICAgICAgIHJldHVybiBSVF9FUlJfTDJfVklEOworICAgIH0KKyAgICBlbHNlIGlmKHBNY2FzdEFkZHItPml2bCA9PSAwKQorICAgIHsKKyAgICAgICAgaWYgKHBNY2FzdEFkZHItPmZpZCA+IFJUTDgzNjdDX0ZJRE1BWCkKKyAgICAgICAgICAgIHJldHVybiBSVF9FUlJfTDJfRklEOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBtZW1zZXQoJmwyVGFibGUsIDAsIHNpemVvZihydGw4MzY3Y19sdXR0YikpOworICAgIG1lbWNweShsMlRhYmxlLm1hYy5vY3RldCwgcE1jYXN0QWRkci0+bWFjLm9jdGV0LCBFVEhFUl9BRERSX0xFTik7CisgICAgbDJUYWJsZS5pdmxfc3ZsICAgICA9IHBNY2FzdEFkZHItPml2bDsKKworICAgIGlmKHBNY2FzdEFkZHItPml2bCkKKyAgICAgICAgbDJUYWJsZS5jdmlkX2ZpZCAgICA9IHBNY2FzdEFkZHItPnZpZDsKKyAgICBlbHNlCisgICAgICAgIGwyVGFibGUuY3ZpZF9maWQgICAgPSBwTWNhc3RBZGRyLT5maWQ7CisKKyAgICBtZXRob2QgPSBMVVRSRUFETUVUSE9EX01BQzsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0wyTG9va3VwVGIobWV0aG9kLCAmbDJUYWJsZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHBNY2FzdEFkZHItPnByaW9yaXR5ICAgID0gbDJUYWJsZS5sdXRfcHJpOworICAgIHBNY2FzdEFkZHItPmZ3ZF9wcmlfZW4gID0gbDJUYWJsZS5md2RfZW47CisgICAgcE1jYXN0QWRkci0+aWdtcF9hc2ljICAgPSBsMlRhYmxlLmlnbXBfYXNpYzsKKyAgICBwTWNhc3RBZGRyLT5pZ21wX2luZGV4ICA9IGwyVGFibGUuaWdtcGlkeDsKKyAgICBwTWNhc3RBZGRyLT5hZGRyZXNzICAgICA9IGwyVGFibGUuYWRkcmVzczsKKworICAgIC8qIEdldCBMb2dpY2FsIHBvcnQgbWFzayAqLworICAgIGlmICgocmV0VmFsID0gcnRrX3N3aXRjaF9wb3J0bWFza19QMkxfZ2V0KGwyVGFibGUubWJyLCAmcE1jYXN0QWRkci0+cG9ydG1hc2spKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbDJfbWNhc3RBZGRyX25leHRfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IE5leHQgTDIgTXVsdGljYXN0IGVudHJ5LgorICogSW5wdXQ6CisgKiAgICAgIHBBZGRyZXNzICAgICAgICAtIFRoZSBBZGRyZXNzIElECisgKiBPdXRwdXQ6CisgKiAgICAgIHBNY2FzdEFkZHIgIC0gTDIgbXVsdGljYXN0IGVudHJ5IHN0cnVjdHVyZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfTDJfRU5UUllfTk9URk9VTkQgICAgLSBObyBzdWNoIExVVCBlbnRyeS4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgR2V0IHRoZSBuZXh0IEwyIG11bHRpY2FzdCBlbnRyeSBhZnRlciB0aGUgY3VycmVudCBlbnRyeSBwb2ludGVkIGJ5IHBBZGRyZXNzLgorICogICAgICBUaGUgYWRkcmVzcyBvZiBuZXh0IGVudHJ5IGlzIHJldHVybmVkIGJ5IHBBZGRyZXNzLiBVc2VyIGNhbiB1c2UgKGFkZHJlc3MgKyAxKQorICogICAgICBhcyBwQWRkcmVzcyB0byBjYWxsIHRoaXMgQVBJIGFnYWluIGZvciBkdW1waW5nIGFsbCBtdWx0aWNhc3QgZW50cmllcyBpcyBMVVQuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2wyX21jYXN0QWRkcl9uZXh0X2dldChydGtfdWludDMyICpwQWRkcmVzcywgcnRrX2wyX21jYXN0QWRkcl90ICpwTWNhc3RBZGRyKQoreworICAgIHJ0a19hcGlfcmV0X3QgICByZXRWYWw7CisgICAgcnRsODM2N2NfbHV0dGIgIGwyVGFibGU7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogRXJyb3IgQ2hlY2tpbmcgKi8KKyAgICBpZiAoKHBBZGRyZXNzID09IE5VTEwpIHx8IChwTWNhc3RBZGRyID09IE5VTEwpKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYoKnBBZGRyZXNzID4gUlRLX01BWF9MVVRfQUREUl9JRCApCisgICAgICAgIHJldHVybiBSVF9FUlJfTDJfTDJVTklfUEFSQU07CisKKyAgICBtZW1zZXQoJmwyVGFibGUsIDAsIHNpemVvZihydGw4MzY3Y19sdXR0YikpOworICAgIGwyVGFibGUuYWRkcmVzcyA9ICpwQWRkcmVzczsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0wyTG9va3VwVGIoTFVUUkVBRE1FVEhPRF9ORVhUX0wyTUMsICZsMlRhYmxlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYobDJUYWJsZS5hZGRyZXNzIDwgKnBBZGRyZXNzKQorICAgICAgICByZXR1cm4gUlRfRVJSX0wyX0VOVFJZX05PVEZPVU5EOworCisgICAgbWVtY3B5KHBNY2FzdEFkZHItPm1hYy5vY3RldCwgbDJUYWJsZS5tYWMub2N0ZXQsIEVUSEVSX0FERFJfTEVOKTsKKyAgICBwTWNhc3RBZGRyLT5pdmwgICAgID0gbDJUYWJsZS5pdmxfc3ZsOworCisgICAgaWYocE1jYXN0QWRkci0+aXZsKQorICAgICAgICBwTWNhc3RBZGRyLT52aWQgPSBsMlRhYmxlLmN2aWRfZmlkOworICAgIGVsc2UKKyAgICAgICAgcE1jYXN0QWRkci0+ZmlkID0gbDJUYWJsZS5jdmlkX2ZpZDsKKworICAgIHBNY2FzdEFkZHItPnByaW9yaXR5ICAgID0gbDJUYWJsZS5sdXRfcHJpOworICAgIHBNY2FzdEFkZHItPmZ3ZF9wcmlfZW4gID0gbDJUYWJsZS5md2RfZW47CisgICAgcE1jYXN0QWRkci0+aWdtcF9hc2ljICAgPSBsMlRhYmxlLmlnbXBfYXNpYzsKKyAgICBwTWNhc3RBZGRyLT5pZ21wX2luZGV4ICA9IGwyVGFibGUuaWdtcGlkeDsKKyAgICBwTWNhc3RBZGRyLT5hZGRyZXNzICAgICA9IGwyVGFibGUuYWRkcmVzczsKKworICAgIC8qIEdldCBMb2dpY2FsIHBvcnQgbWFzayAqLworICAgIGlmICgocmV0VmFsID0gcnRrX3N3aXRjaF9wb3J0bWFza19QMkxfZ2V0KGwyVGFibGUubWJyLCAmcE1jYXN0QWRkci0+cG9ydG1hc2spKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAqcEFkZHJlc3MgPSBsMlRhYmxlLmFkZHJlc3M7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbDJfbWNhc3RBZGRyX2RlbAorICogRGVzY3JpcHRpb246CisgKiAgICAgIERlbGV0ZSBMVVQgbXVsdGljYXN0IGVudHJ5LgorICogSW5wdXQ6CisgKiAgICAgIHBNY2FzdEFkZHIgIC0gTDIgbXVsdGljYXN0IGVudHJ5IHN0cnVjdHVyZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9NQUMgICAgICAgICAgICAgICAgICAtIEludmFsaWQgTUFDIGFkZHJlc3MuCisgKiAgICAgIFJUX0VSUl9MMl9GSUQgICAgICAgICAgICAgICAtIEludmFsaWQgRklEIC4KKyAqICAgICAgUlRfRVJSX0wyX1ZJRCAgICAgICAgICAgICAgIC0gSW52YWxpZCBWSUQgLgorICogICAgICBSVF9FUlJfTDJfRU5UUllfTk9URk9VTkQgICAgLSBObyBzdWNoIExVVCBlbnRyeS4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgSWYgdGhlIG1hYyBoYXMgZXhpc3RlZCBpbiB0aGUgTFVULCBpdCB3aWxsIGJlIGRlbGV0ZWQuIE90aGVyd2lzZSwgaXQgd2lsbCByZXR1cm4gUlRfRVJSX0wyX0VOVFJZX05PVEZPVU5ELgorICovCitydGtfYXBpX3JldF90IHJ0a19sMl9tY2FzdEFkZHJfZGVsKHJ0a19sMl9tY2FzdEFkZHJfdCAqcE1jYXN0QWRkcikKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIG1ldGhvZDsKKyAgICBydGw4MzY3Y19sdXR0YiBsMlRhYmxlOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKE5VTEwgPT0gcE1jYXN0QWRkcikKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICAvKiBtdXN0IGJlIEwyIG11bHRpY2FzdCBhZGRyZXNzICovCisgICAgaWYoIChwTWNhc3RBZGRyLT5tYWMub2N0ZXRbMF0gJiAweDAxKSAhPSAweDAxKQorICAgICAgICByZXR1cm4gUlRfRVJSX01BQzsKKworICAgIGlmKHBNY2FzdEFkZHItPml2bCA9PSAxKQorICAgIHsKKyAgICAgICAgaWYgKHBNY2FzdEFkZHItPnZpZCA+IFJUTDgzNjdDX1ZJRE1BWCkKKyAgICAgICAgICAgIHJldHVybiBSVF9FUlJfTDJfVklEOworICAgIH0KKyAgICBlbHNlIGlmKHBNY2FzdEFkZHItPml2bCA9PSAwKQorICAgIHsKKyAgICAgICAgaWYgKHBNY2FzdEFkZHItPmZpZCA+IFJUTDgzNjdDX0ZJRE1BWCkKKyAgICAgICAgICAgIHJldHVybiBSVF9FUlJfTDJfRklEOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBtZW1zZXQoJmwyVGFibGUsIDAsIHNpemVvZihydGw4MzY3Y19sdXR0YikpOworCisgICAgLyogZmlsbCBrZXkgKE1BQyxGSUQpIHRvIGdldCBMMiBlbnRyeSAqLworICAgIG1lbWNweShsMlRhYmxlLm1hYy5vY3RldCwgcE1jYXN0QWRkci0+bWFjLm9jdGV0LCBFVEhFUl9BRERSX0xFTik7CisgICAgbDJUYWJsZS5pdmxfc3ZsICAgICA9IHBNY2FzdEFkZHItPml2bDsKKworICAgIGlmKHBNY2FzdEFkZHItPml2bCkKKyAgICAgICAgbDJUYWJsZS5jdmlkX2ZpZCAgICA9IHBNY2FzdEFkZHItPnZpZDsKKyAgICBlbHNlCisgICAgICAgIGwyVGFibGUuY3ZpZF9maWQgICAgPSBwTWNhc3RBZGRyLT5maWQ7CisKKyAgICBtZXRob2QgPSBMVVRSRUFETUVUSE9EX01BQzsKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljTDJMb29rdXBUYihtZXRob2QsICZsMlRhYmxlKTsKKyAgICBpZiAoUlRfRVJSX09LID09IHJldFZhbCkKKyAgICB7CisgICAgICAgIG1lbWNweShsMlRhYmxlLm1hYy5vY3RldCwgcE1jYXN0QWRkci0+bWFjLm9jdGV0LCBFVEhFUl9BRERSX0xFTik7CisgICAgICAgIGwyVGFibGUuaXZsX3N2bCAgICAgPSBwTWNhc3RBZGRyLT5pdmw7CisKKyAgICAgICAgaWYocE1jYXN0QWRkci0+aXZsKQorICAgICAgICAgICAgbDJUYWJsZS5jdmlkX2ZpZCAgICA9IHBNY2FzdEFkZHItPnZpZDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbDJUYWJsZS5jdmlkX2ZpZCAgICA9IHBNY2FzdEFkZHItPmZpZDsKKworICAgICAgICBsMlRhYmxlLm1iciAgICAgICAgID0gMDsKKyAgICAgICAgbDJUYWJsZS5ub3NhbGVhcm4gICA9IDA7CisgICAgICAgIGwyVGFibGUuc2FfYmxvY2sgICAgPSAwOworICAgICAgICBsMlRhYmxlLmwzbG9va3VwICAgID0gMDsKKyAgICAgICAgbDJUYWJsZS5sdXRfcHJpICAgICA9IDA7CisgICAgICAgIGwyVGFibGUuZndkX2VuICAgICAgPSAwOworICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0wyTG9va3VwVGIoJmwyVGFibGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIHBNY2FzdEFkZHItPmFkZHJlc3MgPSBsMlRhYmxlLmFkZHJlc3M7CisgICAgICAgIHJldHVybiBSVF9FUlJfT0s7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2lwTWNhc3RBZGRyX2FkZAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEFkZCBMdXQgSVAgbXVsdGljYXN0IGVudHJ5CisgKiBJbnB1dDoKKyAqICAgICAgcElwTWNhc3RBZGRyICAgIC0gSVAgTXVsdGljYXN0IGVudHJ5CisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfTDJfSU5ERVhUQkxfRlVMTCAtIGhhc2hlZCBpbmRleCBpcyBmdWxsIG9mIGVudHJpZXMuCisgKiAgICAgIFJUX0VSUl9QT1JUX01BU0sgICAgICAgIC0gSW52YWxpZCBwb3J0bWFzay4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBTeXN0ZW0gc3VwcG9ydHMgTDIgZW50cnkgd2l0aCBJUCBtdWx0aWNhc3QgRElQL1NJUCB0byBmb3J3YXJkIElQIG11bHRpY2FzdGluZyBmcmFtZSBhcyB1c2VyCisgKiAgICAgIGRlc2lyZWQuIElmIHRoaXMgZnVuY3Rpb24gaXMgZW5hYmxlZCwgdGhlbiBzeXN0ZW0gd2lsbCBiZSBsb29rZWQgdXAgTDIgSVAgbXVsdGljYXN0IGVudHJ5IHRvCisgKiAgICAgIGZvcndhcmQgSVAgbXVsdGljYXN0IGZyYW1lIGRpcmVjdGx5IHdpdGhvdXQgZmxvb2RpbmcuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2wyX2lwTWNhc3RBZGRyX2FkZChydGtfbDJfaXBNY2FzdEFkZHJfdCAqcElwTWNhc3RBZGRyKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgbWV0aG9kOworICAgIHJ0bDgzNjdjX2x1dHRiIGwyVGFibGU7CisgICAgcnRrX3VpbnQzMiBwbWFzazsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBJcE1jYXN0QWRkcikKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICAvKiBjaGVjayBwb3J0IG1hc2sgKi8KKyAgICBSVEtfQ0hLX1BPUlRNQVNLX1ZBTElEKCZwSXBNY2FzdEFkZHItPnBvcnRtYXNrKTsKKworICAgIGlmKCAocElwTWNhc3RBZGRyLT5kaXAgJiAweEYwMDAwMDAwKSAhPSAweEUwMDAwMDAwKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYocElwTWNhc3RBZGRyLT5md2RfcHJpX2VuID49IFJUS19FTkFCTEVfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0VOQUJMRTsKKworICAgIGlmKHBJcE1jYXN0QWRkci0+cHJpb3JpdHkgPiBSVEw4MzY3Q19QUklNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICAvKiBHZXQgUGh5c2ljYWwgcG9ydCBtYXNrICovCisgICAgaWYgKChyZXRWYWwgPSBydGtfc3dpdGNoX3BvcnRtYXNrX0wyUF9nZXQoJnBJcE1jYXN0QWRkci0+cG9ydG1hc2ssICZwbWFzaykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIG1lbXNldCgmbDJUYWJsZSwgMHgwMCwgc2l6ZW9mKHJ0bDgzNjdjX2x1dHRiKSk7CisgICAgbDJUYWJsZS5zaXAgPSBwSXBNY2FzdEFkZHItPnNpcDsKKyAgICBsMlRhYmxlLmRpcCA9IHBJcE1jYXN0QWRkci0+ZGlwOworICAgIGwyVGFibGUubDNsb29rdXAgPSAxOworICAgIGwyVGFibGUubDN2aWRsb29rdXAgPSAwOworICAgIG1ldGhvZCA9IExVVFJFQURNRVRIT0RfTUFDOworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNMMkxvb2t1cFRiKG1ldGhvZCwgJmwyVGFibGUpOworICAgIGlmIChSVF9FUlJfT0sgPT0gcmV0VmFsKQorICAgIHsKKyAgICAgICAgbDJUYWJsZS5zaXAgPSBwSXBNY2FzdEFkZHItPnNpcDsKKyAgICAgICAgbDJUYWJsZS5kaXAgPSBwSXBNY2FzdEFkZHItPmRpcDsKKyAgICAgICAgbDJUYWJsZS5tYnIgPSBwbWFzazsKKyAgICAgICAgbDJUYWJsZS5ub3NhbGVhcm4gPSAxOworICAgICAgICBsMlRhYmxlLmwzbG9va3VwID0gMTsKKyAgICAgICAgbDJUYWJsZS5sM3ZpZGxvb2t1cCA9IDA7CisgICAgICAgIGwyVGFibGUubHV0X3ByaSA9IHBJcE1jYXN0QWRkci0+cHJpb3JpdHk7CisgICAgICAgIGwyVGFibGUuZndkX2VuICA9IHBJcE1jYXN0QWRkci0+ZndkX3ByaV9lbjsKKyAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNMMkxvb2t1cFRiKCZsMlRhYmxlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBwSXBNY2FzdEFkZHItPmFkZHJlc3MgPSBsMlRhYmxlLmFkZHJlc3M7CisgICAgICAgIHJldHVybiBSVF9FUlJfT0s7CisgICAgfQorICAgIGVsc2UgaWYgKFJUX0VSUl9MMl9FTlRSWV9OT1RGT1VORCA9PSByZXRWYWwpCisgICAgeworICAgICAgICBtZW1zZXQoJmwyVGFibGUsIDAsIHNpemVvZihydGw4MzY3Y19sdXR0YikpOworICAgICAgICBsMlRhYmxlLnNpcCA9IHBJcE1jYXN0QWRkci0+c2lwOworICAgICAgICBsMlRhYmxlLmRpcCA9IHBJcE1jYXN0QWRkci0+ZGlwOworICAgICAgICBsMlRhYmxlLm1iciA9IHBtYXNrOworICAgICAgICBsMlRhYmxlLm5vc2FsZWFybiA9IDE7CisgICAgICAgIGwyVGFibGUubDNsb29rdXAgPSAxOworICAgICAgICBsMlRhYmxlLmwzdmlkbG9va3VwID0gMDsKKyAgICAgICAgbDJUYWJsZS5sdXRfcHJpID0gcElwTWNhc3RBZGRyLT5wcmlvcml0eTsKKyAgICAgICAgbDJUYWJsZS5md2RfZW4gID0gcElwTWNhc3RBZGRyLT5md2RfcHJpX2VuOworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNMMkxvb2t1cFRiKCZsMlRhYmxlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBwSXBNY2FzdEFkZHItPmFkZHJlc3MgPSBsMlRhYmxlLmFkZHJlc3M7CisKKyAgICAgICAgbWV0aG9kID0gTFVUUkVBRE1FVEhPRF9NQUM7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNMMkxvb2t1cFRiKG1ldGhvZCwgJmwyVGFibGUpOworICAgICAgICBpZiAoUlRfRVJSX0wyX0VOVFJZX05PVEZPVU5EID09IHJldFZhbCkKKyAgICAgICAgICAgIHJldHVybiAgICAgUlRfRVJSX0wyX0lOREVYVEJMX0ZVTEw7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICB9CisgICAgZWxzZQorICAgICAgICByZXR1cm4gcmV0VmFsOworCit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sMl9pcE1jYXN0QWRkcl9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgTFVUIElQIG11bHRpY2FzdCBlbnRyeS4KKyAqIElucHV0OgorICogICAgICBwSXBNY2FzdEFkZHIgICAgLSBJUCBNdWx0aWNhc3QgZW50cnkKKyAqIE91dHB1dDoKKyAqICAgICAgcElwTWNhc3RBZGRyICAgIC0gSVAgTXVsdGljYXN0IGVudHJ5CisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9MMl9FTlRSWV9OT1RGT1VORCAgICAtIE5vIHN1Y2ggTFVUIGVudHJ5LgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBnZXQgTHV0IHRhYmxlIG9mIElQIG11bHRpY2FzdCBlbnRyeS4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfbDJfaXBNY2FzdEFkZHJfZ2V0KHJ0a19sMl9pcE1jYXN0QWRkcl90ICpwSXBNY2FzdEFkZHIpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBtZXRob2Q7CisgICAgcnRsODM2N2NfbHV0dGIgbDJUYWJsZTsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBJcE1jYXN0QWRkcikKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiggKHBJcE1jYXN0QWRkci0+ZGlwICYgMHhGMDAwMDAwMCkgIT0gMHhFMDAwMDAwMCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIG1lbXNldCgmbDJUYWJsZSwgMHgwMCwgc2l6ZW9mKHJ0bDgzNjdjX2x1dHRiKSk7CisgICAgbDJUYWJsZS5zaXAgPSBwSXBNY2FzdEFkZHItPnNpcDsKKyAgICBsMlRhYmxlLmRpcCA9IHBJcE1jYXN0QWRkci0+ZGlwOworICAgIGwyVGFibGUubDNsb29rdXAgPSAxOworICAgIGwyVGFibGUubDN2aWRsb29rdXAgPSAwOworICAgIG1ldGhvZCA9IExVVFJFQURNRVRIT0RfTUFDOworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0wyTG9va3VwVGIobWV0aG9kLCAmbDJUYWJsZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIC8qIEdldCBMb2dpY2FsIHBvcnQgbWFzayAqLworICAgIGlmICgocmV0VmFsID0gcnRrX3N3aXRjaF9wb3J0bWFza19QMkxfZ2V0KGwyVGFibGUubWJyLCAmcElwTWNhc3RBZGRyLT5wb3J0bWFzaykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHBJcE1jYXN0QWRkci0+cHJpb3JpdHkgICAgICA9IGwyVGFibGUubHV0X3ByaTsKKyAgICBwSXBNY2FzdEFkZHItPmZ3ZF9wcmlfZW4gICAgPSBsMlRhYmxlLmZ3ZF9lbjsKKyAgICBwSXBNY2FzdEFkZHItPmlnbXBfYXNpYyAgICAgPSBsMlRhYmxlLmlnbXBfYXNpYzsKKyAgICBwSXBNY2FzdEFkZHItPmlnbXBfaW5kZXggICAgPSBsMlRhYmxlLmlnbXBpZHg7CisgICAgcElwTWNhc3RBZGRyLT5hZGRyZXNzICAgICAgID0gbDJUYWJsZS5hZGRyZXNzOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2lwTWNhc3RBZGRyX25leHRfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IE5leHQgSVAgTXVsdGljYXN0IGVudHJ5LgorICogSW5wdXQ6CisgKiAgICAgIHBBZGRyZXNzICAgICAgICAtIFRoZSBBZGRyZXNzIElECisgKiBPdXRwdXQ6CisgKiAgICAgIHBJcE1jYXN0QWRkciAgICAtIElQIE11bHRpY2FzdCBlbnRyeQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfTDJfRU5UUllfTk9URk9VTkQgICAgLSBObyBzdWNoIExVVCBlbnRyeS4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgR2V0IHRoZSBuZXh0IElQIG11bHRpY2FzdCBlbnRyeSBhZnRlciB0aGUgY3VycmVudCBlbnRyeSBwb2ludGVkIGJ5IHBBZGRyZXNzLgorICogICAgICBUaGUgYWRkcmVzcyBvZiBuZXh0IGVudHJ5IGlzIHJldHVybmVkIGJ5IHBBZGRyZXNzLiBVc2VyIGNhbiB1c2UgKGFkZHJlc3MgKyAxKQorICogICAgICBhcyBwQWRkcmVzcyB0byBjYWxsIHRoaXMgQVBJIGFnYWluIGZvciBkdW1waW5nIGFsbCBJUCBtdWx0aWNhc3QgZW50cmllcyBpcyBMVVQuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2wyX2lwTWNhc3RBZGRyX25leHRfZ2V0KHJ0a191aW50MzIgKnBBZGRyZXNzLCBydGtfbDJfaXBNY2FzdEFkZHJfdCAqcElwTWNhc3RBZGRyKQoreworICAgIHJ0a19hcGlfcmV0X3QgICByZXRWYWw7CisgICAgcnRsODM2N2NfbHV0dGIgIGwyVGFibGU7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogRXJyb3IgQ2hlY2tpbmcgKi8KKyAgICBpZiAoKHBBZGRyZXNzID09IE5VTEwpIHx8IChwSXBNY2FzdEFkZHIgPT0gTlVMTCkgKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYoKnBBZGRyZXNzID4gUlRLX01BWF9MVVRfQUREUl9JRCApCisgICAgICAgIHJldHVybiBSVF9FUlJfTDJfTDJVTklfUEFSQU07CisKKyAgICBtZW1zZXQoJmwyVGFibGUsIDAsIHNpemVvZihydGw4MzY3Y19sdXR0YikpOworICAgIGwyVGFibGUuYWRkcmVzcyA9ICpwQWRkcmVzczsKKworICAgIGRvCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNMMkxvb2t1cFRiKExVVFJFQURNRVRIT0RfTkVYVF9MM01DLCAmbDJUYWJsZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgaWYobDJUYWJsZS5hZGRyZXNzIDwgKnBBZGRyZXNzKQorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9MMl9FTlRSWV9OT1RGT1VORDsKKworICAgIH13aGlsZShsMlRhYmxlLmwzdmlkbG9va3VwID09IDEpOworCisgICAgcElwTWNhc3RBZGRyLT5zaXAgPSBsMlRhYmxlLnNpcDsKKyAgICBwSXBNY2FzdEFkZHItPmRpcCA9IGwyVGFibGUuZGlwOworCisgICAgLyogR2V0IExvZ2ljYWwgcG9ydCBtYXNrICovCisgICAgaWYgKChyZXRWYWwgPSBydGtfc3dpdGNoX3BvcnRtYXNrX1AyTF9nZXQobDJUYWJsZS5tYnIsICZwSXBNY2FzdEFkZHItPnBvcnRtYXNrKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcElwTWNhc3RBZGRyLT5wcmlvcml0eSAgICAgID0gbDJUYWJsZS5sdXRfcHJpOworICAgIHBJcE1jYXN0QWRkci0+ZndkX3ByaV9lbiAgICA9IGwyVGFibGUuZndkX2VuOworICAgIHBJcE1jYXN0QWRkci0+aWdtcF9hc2ljICAgICA9IGwyVGFibGUuaWdtcF9hc2ljOworICAgIHBJcE1jYXN0QWRkci0+aWdtcF9pbmRleCAgICA9IGwyVGFibGUuaWdtcGlkeDsKKyAgICBwSXBNY2FzdEFkZHItPmFkZHJlc3MgICAgICAgPSBsMlRhYmxlLmFkZHJlc3M7CisgICAgKnBBZGRyZXNzID0gbDJUYWJsZS5hZGRyZXNzOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2lwTWNhc3RBZGRyX2RlbAorICogRGVzY3JpcHRpb246CisgKiAgICAgIERlbGV0ZSBhIGlwIG11bHRpY2FzdCBhZGRyZXNzIGVudHJ5IGZyb20gdGhlIHNwZWNpZmllZCBkZXZpY2UuCisgKiBJbnB1dDoKKyAqICAgICAgcElwTWNhc3RBZGRyICAgIC0gSVAgTXVsdGljYXN0IGVudHJ5CisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0wyX0VOVFJZX05PVEZPVU5EICAgIC0gTm8gc3VjaCBMVVQgZW50cnkuCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGRlbGV0ZSBhIElQIG11bHRpY2FzdCBhZGRyZXNzIGVudHJ5IGZyb20gdGhlIHNwZWNpZmllZCBkZXZpY2UuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2wyX2lwTWNhc3RBZGRyX2RlbChydGtfbDJfaXBNY2FzdEFkZHJfdCAqcElwTWNhc3RBZGRyKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgbWV0aG9kOworICAgIHJ0bDgzNjdjX2x1dHRiIGwyVGFibGU7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogRXJyb3IgQ2hlY2tpbmcgKi8KKyAgICBpZiAocElwTWNhc3RBZGRyID09IE5VTEwpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZiggKHBJcE1jYXN0QWRkci0+ZGlwICYgMHhGMDAwMDAwMCkgIT0gMHhFMDAwMDAwMCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIG1lbXNldCgmbDJUYWJsZSwgMHgwMCwgc2l6ZW9mKHJ0bDgzNjdjX2x1dHRiKSk7CisgICAgbDJUYWJsZS5zaXAgPSBwSXBNY2FzdEFkZHItPnNpcDsKKyAgICBsMlRhYmxlLmRpcCA9IHBJcE1jYXN0QWRkci0+ZGlwOworICAgIGwyVGFibGUubDNsb29rdXAgPSAxOworICAgIGwyVGFibGUubDN2aWRsb29rdXAgPSAwOworICAgIG1ldGhvZCA9IExVVFJFQURNRVRIT0RfTUFDOworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNMMkxvb2t1cFRiKG1ldGhvZCwgJmwyVGFibGUpOworICAgIGlmIChSVF9FUlJfT0sgPT0gcmV0VmFsKQorICAgIHsKKyAgICAgICAgbDJUYWJsZS5zaXAgPSBwSXBNY2FzdEFkZHItPnNpcDsKKyAgICAgICAgbDJUYWJsZS5kaXAgPSBwSXBNY2FzdEFkZHItPmRpcDsKKyAgICAgICAgbDJUYWJsZS5tYnIgPSAwOworICAgICAgICBsMlRhYmxlLm5vc2FsZWFybiA9IDA7CisgICAgICAgIGwyVGFibGUubDNsb29rdXAgPSAxOworICAgICAgICBsMlRhYmxlLmwzdmlkbG9va3VwID0gMDsKKyAgICAgICAgbDJUYWJsZS5sdXRfcHJpID0gMDsKKyAgICAgICAgbDJUYWJsZS5md2RfZW4gID0gMDsKKyAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNMMkxvb2t1cFRiKCZsMlRhYmxlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBwSXBNY2FzdEFkZHItPmFkZHJlc3MgPSBsMlRhYmxlLmFkZHJlc3M7CisgICAgICAgIHJldHVybiBSVF9FUlJfT0s7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2lwVmlkTWNhc3RBZGRyX2FkZAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEFkZCBMdXQgSVAgbXVsdGljYXN0K1ZJRCBlbnRyeQorICogSW5wdXQ6CisgKiAgICAgIHBJcFZpZE1jYXN0QWRkciAtIElQICYgVklEIG11bHRpY2FzdCBFbnRyeQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqICAgICAgUlRfRVJSX0wyX0lOREVYVEJMX0ZVTEwgLSBoYXNoZWQgaW5kZXggaXMgZnVsbCBvZiBlbnRyaWVzLgorICogICAgICBSVF9FUlJfUE9SVF9NQVNLICAgICAgICAtIEludmFsaWQgcG9ydG1hc2suCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2wyX2lwVmlkTWNhc3RBZGRyX2FkZChydGtfbDJfaXBWaWRNY2FzdEFkZHJfdCAqcElwVmlkTWNhc3RBZGRyKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgbWV0aG9kOworICAgIHJ0bDgzNjdjX2x1dHRiIGwyVGFibGU7CisgICAgcnRrX3VpbnQzMiBwbWFzazsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBJcFZpZE1jYXN0QWRkcikKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICAvKiBjaGVjayBwb3J0IG1hc2sgKi8KKyAgICBSVEtfQ0hLX1BPUlRNQVNLX1ZBTElEKCZwSXBWaWRNY2FzdEFkZHItPnBvcnRtYXNrKTsKKworICAgIGlmIChwSXBWaWRNY2FzdEFkZHItPnZpZCA+IFJUTDgzNjdDX1ZJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9MMl9WSUQ7CisKKyAgICBpZiggKHBJcFZpZE1jYXN0QWRkci0+ZGlwICYgMHhGMDAwMDAwMCkgIT0gMHhFMDAwMDAwMCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIC8qIEdldCBQaHlzaWNhbCBwb3J0IG1hc2sgKi8KKyAgICBpZiAoKHJldFZhbCA9IHJ0a19zd2l0Y2hfcG9ydG1hc2tfTDJQX2dldCgmcElwVmlkTWNhc3RBZGRyLT5wb3J0bWFzaywgJnBtYXNrKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgbWVtc2V0KCZsMlRhYmxlLCAweDAwLCBzaXplb2YocnRsODM2N2NfbHV0dGIpKTsKKyAgICBsMlRhYmxlLnNpcCA9IHBJcFZpZE1jYXN0QWRkci0+c2lwOworICAgIGwyVGFibGUuZGlwID0gcElwVmlkTWNhc3RBZGRyLT5kaXA7CisgICAgbDJUYWJsZS5sM2xvb2t1cCA9IDE7CisgICAgbDJUYWJsZS5sM3ZpZGxvb2t1cCA9IDE7CisgICAgbDJUYWJsZS5sM192aWQgPSBwSXBWaWRNY2FzdEFkZHItPnZpZDsKKyAgICBtZXRob2QgPSBMVVRSRUFETUVUSE9EX01BQzsKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljTDJMb29rdXBUYihtZXRob2QsICZsMlRhYmxlKTsKKyAgICBpZiAoUlRfRVJSX09LID09IHJldFZhbCkKKyAgICB7CisgICAgICAgIGwyVGFibGUuc2lwID0gcElwVmlkTWNhc3RBZGRyLT5zaXA7CisgICAgICAgIGwyVGFibGUuZGlwID0gcElwVmlkTWNhc3RBZGRyLT5kaXA7CisgICAgICAgIGwyVGFibGUubWJyID0gcG1hc2s7CisgICAgICAgIGwyVGFibGUubm9zYWxlYXJuID0gMTsKKyAgICAgICAgbDJUYWJsZS5sM2xvb2t1cCA9IDE7CisgICAgICAgIGwyVGFibGUubDN2aWRsb29rdXAgPSAxOworICAgICAgICBsMlRhYmxlLmwzX3ZpZCA9IHBJcFZpZE1jYXN0QWRkci0+dmlkOworICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0wyTG9va3VwVGIoJmwyVGFibGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIHBJcFZpZE1jYXN0QWRkci0+YWRkcmVzcyA9IGwyVGFibGUuYWRkcmVzczsKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PSzsKKyAgICB9CisgICAgZWxzZSBpZiAoUlRfRVJSX0wyX0VOVFJZX05PVEZPVU5EID09IHJldFZhbCkKKyAgICB7CisgICAgICAgIG1lbXNldCgmbDJUYWJsZSwgMCwgc2l6ZW9mKHJ0bDgzNjdjX2x1dHRiKSk7CisgICAgICAgIGwyVGFibGUuc2lwID0gcElwVmlkTWNhc3RBZGRyLT5zaXA7CisgICAgICAgIGwyVGFibGUuZGlwID0gcElwVmlkTWNhc3RBZGRyLT5kaXA7CisgICAgICAgIGwyVGFibGUubWJyID0gcG1hc2s7CisgICAgICAgIGwyVGFibGUubm9zYWxlYXJuID0gMTsKKyAgICAgICAgbDJUYWJsZS5sM2xvb2t1cCA9IDE7CisgICAgICAgIGwyVGFibGUubDN2aWRsb29rdXAgPSAxOworICAgICAgICBsMlRhYmxlLmwzX3ZpZCA9IHBJcFZpZE1jYXN0QWRkci0+dmlkOworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNMMkxvb2t1cFRiKCZsMlRhYmxlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBwSXBWaWRNY2FzdEFkZHItPmFkZHJlc3MgPSBsMlRhYmxlLmFkZHJlc3M7CisKKyAgICAgICAgbWV0aG9kID0gTFVUUkVBRE1FVEhPRF9NQUM7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNMMkxvb2t1cFRiKG1ldGhvZCwgJmwyVGFibGUpOworICAgICAgICBpZiAoUlRfRVJSX0wyX0VOVFJZX05PVEZPVU5EID09IHJldFZhbCkKKyAgICAgICAgICAgIHJldHVybiAgICAgUlRfRVJSX0wyX0lOREVYVEJMX0ZVTEw7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICB9CisgICAgZWxzZQorICAgICAgICByZXR1cm4gcmV0VmFsOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbDJfaXBWaWRNY2FzdEFkZHJfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IExVVCBJUCBtdWx0aWNhc3QrVklEIGVudHJ5LgorICogSW5wdXQ6CisgKiAgICAgIHBJcFZpZE1jYXN0QWRkciAtIElQICYgVklEIG11bHRpY2FzdCBFbnRyeQorICogT3V0cHV0OgorICogICAgICBwSXBWaWRNY2FzdEFkZHIgLSBJUCAmIFZJRCBtdWx0aWNhc3QgRW50cnkKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0wyX0VOVFJZX05PVEZPVU5EICAgIC0gTm8gc3VjaCBMVVQgZW50cnkuCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKgorICovCitydGtfYXBpX3JldF90IHJ0a19sMl9pcFZpZE1jYXN0QWRkcl9nZXQocnRrX2wyX2lwVmlkTWNhc3RBZGRyX3QgKnBJcFZpZE1jYXN0QWRkcikKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIG1ldGhvZDsKKyAgICBydGw4MzY3Y19sdXR0YiBsMlRhYmxlOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKE5VTEwgPT0gcElwVmlkTWNhc3RBZGRyKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmIChwSXBWaWRNY2FzdEFkZHItPnZpZCA+IFJUTDgzNjdDX1ZJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9MMl9WSUQ7CisKKyAgICBpZiggKHBJcFZpZE1jYXN0QWRkci0+ZGlwICYgMHhGMDAwMDAwMCkgIT0gMHhFMDAwMDAwMCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIG1lbXNldCgmbDJUYWJsZSwgMHgwMCwgc2l6ZW9mKHJ0bDgzNjdjX2x1dHRiKSk7CisgICAgbDJUYWJsZS5zaXAgPSBwSXBWaWRNY2FzdEFkZHItPnNpcDsKKyAgICBsMlRhYmxlLmRpcCA9IHBJcFZpZE1jYXN0QWRkci0+ZGlwOworICAgIGwyVGFibGUubDNsb29rdXAgPSAxOworICAgIGwyVGFibGUubDN2aWRsb29rdXAgPSAxOworICAgIGwyVGFibGUubDNfdmlkID0gcElwVmlkTWNhc3RBZGRyLT52aWQ7CisgICAgbWV0aG9kID0gTFVUUkVBRE1FVEhPRF9NQUM7CisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljTDJMb29rdXBUYihtZXRob2QsICZsMlRhYmxlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcElwVmlkTWNhc3RBZGRyLT5hZGRyZXNzID0gbDJUYWJsZS5hZGRyZXNzOworCisgICAgIC8qIEdldCBMb2dpY2FsIHBvcnQgbWFzayAqLworICAgIGlmICgocmV0VmFsID0gcnRrX3N3aXRjaF9wb3J0bWFza19QMkxfZ2V0KGwyVGFibGUubWJyLCAmcElwVmlkTWNhc3RBZGRyLT5wb3J0bWFzaykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sMl9pcFZpZE1jYXN0QWRkcl9uZXh0X2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBOZXh0IElQIE11bHRpY2FzdCtWSUQgZW50cnkuCisgKiBJbnB1dDoKKyAqICAgICAgcEFkZHJlc3MgICAgICAgIC0gVGhlIEFkZHJlc3MgSUQKKyAqIE91dHB1dDoKKyAqICAgICAgcElwVmlkTWNhc3RBZGRyIC0gSVAgJiBWSUQgbXVsdGljYXN0IEVudHJ5CisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9MMl9FTlRSWV9OT1RGT1VORCAgICAtIE5vIHN1Y2ggTFVUIGVudHJ5LgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBHZXQgdGhlIG5leHQgSVAgbXVsdGljYXN0IGVudHJ5IGFmdGVyIHRoZSBjdXJyZW50IGVudHJ5IHBvaW50ZWQgYnkgcEFkZHJlc3MuCisgKiAgICAgIFRoZSBhZGRyZXNzIG9mIG5leHQgZW50cnkgaXMgcmV0dXJuZWQgYnkgcEFkZHJlc3MuIFVzZXIgY2FuIHVzZSAoYWRkcmVzcyArIDEpCisgKiAgICAgIGFzIHBBZGRyZXNzIHRvIGNhbGwgdGhpcyBBUEkgYWdhaW4gZm9yIGR1bXBpbmcgYWxsIElQIG11bHRpY2FzdCBlbnRyaWVzIGlzIExVVC4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfbDJfaXBWaWRNY2FzdEFkZHJfbmV4dF9nZXQocnRrX3VpbnQzMiAqcEFkZHJlc3MsIHJ0a19sMl9pcFZpZE1jYXN0QWRkcl90ICpwSXBWaWRNY2FzdEFkZHIpCit7CisgICAgcnRrX2FwaV9yZXRfdCAgIHJldFZhbDsKKyAgICBydGw4MzY3Y19sdXR0YiAgbDJUYWJsZTsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBFcnJvciBDaGVja2luZyAqLworICAgIGlmICgocEFkZHJlc3MgPT0gTlVMTCkgfHwgKHBJcFZpZE1jYXN0QWRkciA9PSBOVUxMKSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmKCpwQWRkcmVzcyA+IFJUS19NQVhfTFVUX0FERFJfSUQgKQorICAgICAgICByZXR1cm4gUlRfRVJSX0wyX0wyVU5JX1BBUkFNOworCisgICAgbWVtc2V0KCZsMlRhYmxlLCAwLCBzaXplb2YocnRsODM2N2NfbHV0dGIpKTsKKyAgICBsMlRhYmxlLmFkZHJlc3MgPSAqcEFkZHJlc3M7CisKKyAgICBkbworICAgIHsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljTDJMb29rdXBUYihMVVRSRUFETUVUSE9EX05FWFRfTDNNQywgJmwyVGFibGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIGlmKGwyVGFibGUuYWRkcmVzcyA8ICpwQWRkcmVzcykKKyAgICAgICAgICAgIHJldHVybiBSVF9FUlJfTDJfRU5UUllfTk9URk9VTkQ7CisKKyAgICB9d2hpbGUobDJUYWJsZS5sM3ZpZGxvb2t1cCA9PSAwKTsKKworICAgIHBJcFZpZE1jYXN0QWRkci0+c2lwICAgICAgICA9IGwyVGFibGUuc2lwOworICAgIHBJcFZpZE1jYXN0QWRkci0+ZGlwICAgICAgICA9IGwyVGFibGUuZGlwOworICAgIHBJcFZpZE1jYXN0QWRkci0+dmlkICAgICAgICA9IGwyVGFibGUubDNfdmlkOworICAgIHBJcFZpZE1jYXN0QWRkci0+YWRkcmVzcyAgICA9IGwyVGFibGUuYWRkcmVzczsKKworICAgIC8qIEdldCBMb2dpY2FsIHBvcnQgbWFzayAqLworICAgIGlmICgocmV0VmFsID0gcnRrX3N3aXRjaF9wb3J0bWFza19QMkxfZ2V0KGwyVGFibGUubWJyLCAmcElwVmlkTWNhc3RBZGRyLT5wb3J0bWFzaykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICpwQWRkcmVzcyA9IGwyVGFibGUuYWRkcmVzczsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sMl9pcFZpZE1jYXN0QWRkcl9kZWwKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBEZWxldGUgYSBpcCBtdWx0aWNhc3QrVklEIGFkZHJlc3MgZW50cnkgZnJvbSB0aGUgc3BlY2lmaWVkIGRldmljZS4KKyAqIElucHV0OgorICogICAgICBwSXBWaWRNY2FzdEFkZHIgLSBJUCAmIFZJRCBtdWx0aWNhc3QgRW50cnkKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfTDJfRU5UUllfTk9URk9VTkQgICAgLSBObyBzdWNoIExVVCBlbnRyeS4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2wyX2lwVmlkTWNhc3RBZGRyX2RlbChydGtfbDJfaXBWaWRNY2FzdEFkZHJfdCAqcElwVmlkTWNhc3RBZGRyKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgbWV0aG9kOworICAgIHJ0bDgzNjdjX2x1dHRiIGwyVGFibGU7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoTlVMTCA9PSBwSXBWaWRNY2FzdEFkZHIpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKHBJcFZpZE1jYXN0QWRkci0+dmlkID4gUlRMODM2N0NfVklETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX0wyX1ZJRDsKKworICAgIGlmKCAocElwVmlkTWNhc3RBZGRyLT5kaXAgJiAweEYwMDAwMDAwKSAhPSAweEUwMDAwMDAwKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgbWVtc2V0KCZsMlRhYmxlLCAweDAwLCBzaXplb2YocnRsODM2N2NfbHV0dGIpKTsKKyAgICBsMlRhYmxlLnNpcCA9IHBJcFZpZE1jYXN0QWRkci0+c2lwOworICAgIGwyVGFibGUuZGlwID0gcElwVmlkTWNhc3RBZGRyLT5kaXA7CisgICAgbDJUYWJsZS5sM2xvb2t1cCA9IDE7CisgICAgbDJUYWJsZS5sM3ZpZGxvb2t1cCA9IDE7CisgICAgbDJUYWJsZS5sM192aWQgPSBwSXBWaWRNY2FzdEFkZHItPnZpZDsKKyAgICBtZXRob2QgPSBMVVRSRUFETUVUSE9EX01BQzsKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljTDJMb29rdXBUYihtZXRob2QsICZsMlRhYmxlKTsKKyAgICBpZiAoUlRfRVJSX09LID09IHJldFZhbCkKKyAgICB7CisgICAgICAgIGwyVGFibGUuc2lwID0gcElwVmlkTWNhc3RBZGRyLT5zaXA7CisgICAgICAgIGwyVGFibGUuZGlwID0gcElwVmlkTWNhc3RBZGRyLT5kaXA7CisgICAgICAgIGwyVGFibGUubWJyPSAwOworICAgICAgICBsMlRhYmxlLm5vc2FsZWFybiA9IDA7CisgICAgICAgIGwyVGFibGUubDNsb29rdXAgPSAxOworICAgICAgICBsMlRhYmxlLmwzdmlkbG9va3VwID0gMTsKKyAgICAgICAgbDJUYWJsZS5sM192aWQgPSBwSXBWaWRNY2FzdEFkZHItPnZpZDsKKyAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNMMkxvb2t1cFRiKCZsMlRhYmxlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBwSXBWaWRNY2FzdEFkZHItPmFkZHJlc3MgPSBsMlRhYmxlLmFkZHJlc3M7CisgICAgICAgIHJldHVybiBSVF9FUlJfT0s7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX3VjYXN0QWRkcl9mbHVzaAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEZsdXNoIEwyIG1hYyBhZGRyZXNzIGJ5IHR5cGUgaW4gdGhlIHNwZWNpZmllZCBkZXZpY2UgKGJvdGggZHluYW1pYyBhbmQgc3RhdGljKS4KKyAqIElucHV0OgorICogICAgICBwQ29uZmlnIC0gZmx1c2ggY29uZmlndXJhdGlvbgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfVkxBTl9WSUQgICAgIC0gSW52YWxpZCBWSUQgcGFyYW1ldGVyLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgZmx1c2hCeVZpZCAgICAgICAgICAtIDE6IEZsdXNoIGJ5IFZJRCwgMDogRG9uJ3QgZmx1c2ggYnkgVklECisgKiAgICAgIHZpZCAgICAgICAgICAgICAgICAgLSBWSUQgKDAgfiA0MDk1KQorICogICAgICBmbHVzaEJ5RmlkICAgICAgICAgIC0gMTogRmx1c2ggYnkgRklELCAwOiBEb24ndCBmbHVzaCBieSBGSUQKKyAqICAgICAgZmlkICAgICAgICAgICAgICAgICAtIEZJRCAoMCB+IDE1KQorICogICAgICBmbHVzaEJ5UG9ydCAgICAgICAgIC0gMTogRmx1c2ggYnkgUG9ydCwgMDogRG9uJ3QgZmx1c2ggYnkgUG9ydAorICogICAgICBwb3J0ICAgICAgICAgICAgICAgIC0gUG9ydCBJRAorICogICAgICBmbHVzaEJ5TWFjICAgICAgICAgIC0gTm90IFN1cHBvcnRlZAorICogICAgICB1Y2FzdEFkZHIgICAgICAgICAgIC0gTm90IFN1cHBvcnRlZAorICogICAgICBmbHVzaFN0YXRpY0FkZHIgICAgIC0gMTogRmx1c2ggYm90aCBTdGF0aWMgYW5kIER5bmFtaWMgZW50cmllcywgMDogRmx1c2ggb25seSBEeW5hbWljIGVudHJpZXMKKyAqICAgICAgZmx1c2hBZGRyT25BbGxQb3J0cyAtIDE6IEZsdXNoIFZJRC1tYXRjaGVkIGVudHJpZXMgYXQgYWxsIHBvcnRzLCAwOiBGbHVzaCBWSUQtbWF0Y2hlZCBlbnRyaWVzIHBlciBwb3J0LgorICovCitydGtfYXBpX3JldF90IHJ0a19sMl91Y2FzdEFkZHJfZmx1c2gocnRrX2wyX2ZsdXNoQ2ZnX3QgKnBDb25maWcpCit7CisgICAgcnRrX2FwaV9yZXRfdCAgIHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihwQ29uZmlnID09IE5VTEwpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYocENvbmZpZy0+Zmx1c2hCeVZpZCA+PSBSVEtfRU5BQkxFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9FTkFCTEU7CisKKyAgICBpZihwQ29uZmlnLT5mbHVzaEJ5RmlkID49IFJUS19FTkFCTEVfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0VOQUJMRTsKKworICAgIGlmKHBDb25maWctPmZsdXNoQnlQb3J0ID49IFJUS19FTkFCTEVfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0VOQUJMRTsKKworICAgIGlmKHBDb25maWctPmZsdXNoQnlNYWMgPj0gUlRLX0VOQUJMRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfRU5BQkxFOworCisgICAgaWYocENvbmZpZy0+Zmx1c2hTdGF0aWNBZGRyID49IFJUS19FTkFCTEVfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0VOQUJMRTsKKworICAgIGlmKHBDb25maWctPmZsdXNoQWRkck9uQWxsUG9ydHMgPj0gUlRLX0VOQUJMRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfRU5BQkxFOworCisgICAgaWYocENvbmZpZy0+dmlkID4gUlRMODM2N0NfVklETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1ZMQU5fVklEOworCisgICAgaWYocENvbmZpZy0+ZmlkID4gUlRMODM2N0NfRklETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgLyogY2hlY2sgcG9ydCB2YWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwQ29uZmlnLT5wb3J0KTsKKworICAgIGlmKHBDb25maWctPmZsdXNoQnlWaWQgPT0gRU5BQkxFRCkKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0x1dEZsdXNoTW9kZShGTFVTSE1ET0VfVklEKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNMdXRGbHVzaFZpZChwQ29uZmlnLT52aWQpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNMdXRGbHVzaFR5cGUoKHBDb25maWctPmZsdXNoU3RhdGljQWRkciA9PSBFTkFCTEVEKSA/IEZMVVNIVFlQRV9CT1RIIDogRkxVU0hUWVBFX0RZTkFNSUMpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIGlmKHBDb25maWctPmZsdXNoQWRkck9uQWxsUG9ydHMgPT0gRU5BQkxFRCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljTHV0Rm9yY2VGbHVzaChSVEw4MzY3Q19QT1JUTUFTSykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYocENvbmZpZy0+Zmx1c2hCeVBvcnQgPT0gRU5BQkxFRCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljTHV0Rm9yY2VGbHVzaCgxIDw8IHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBDb25maWctPnBvcnQpKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKyAgICB9CisgICAgZWxzZSBpZihwQ29uZmlnLT5mbHVzaEJ5RmlkID09IEVOQUJMRUQpCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNMdXRGbHVzaE1vZGUoRkxVU0hNRE9FX0ZJRCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljTHV0Rmx1c2hGaWQocENvbmZpZy0+ZmlkKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljTHV0Rmx1c2hUeXBlKChwQ29uZmlnLT5mbHVzaFN0YXRpY0FkZHIgPT0gRU5BQkxFRCkgPyBGTFVTSFRZUEVfQk9USCA6IEZMVVNIVFlQRV9EWU5BTUlDKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZihwQ29uZmlnLT5mbHVzaEFkZHJPbkFsbFBvcnRzID09IEVOQUJMRUQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0x1dEZvcmNlRmx1c2goUlRMODM2N0NfUE9SVE1BU0spKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKHBDb25maWctPmZsdXNoQnlQb3J0ID09IEVOQUJMRUQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0x1dEZvcmNlRmx1c2goMSA8PCBydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwQ29uZmlnLT5wb3J0KSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisgICAgfQorICAgIGVsc2UgaWYocENvbmZpZy0+Zmx1c2hCeVBvcnQgPT0gRU5BQkxFRCkKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0x1dEZsdXNoVHlwZSgocENvbmZpZy0+Zmx1c2hTdGF0aWNBZGRyID09IEVOQUJMRUQpID8gRkxVU0hUWVBFX0JPVEggOiBGTFVTSFRZUEVfRFlOQU1JQykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljTHV0Rmx1c2hNb2RlKEZMVVNITURPRV9QT1JUKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNMdXRGb3JjZUZsdXNoKDEgPDwgcnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocENvbmZpZy0+cG9ydCkpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKyAgICBlbHNlIGlmKHBDb25maWctPmZsdXNoQnlNYWMgPT0gRU5BQkxFRCkKKyAgICB7CisgICAgICAgIC8qIFNob3VsZCB1c2UgQVBJICJydGtfbDJfYWRkcl9kZWwiIHRvIHJlbW92ZSBhIHNwZWNpZmllZCBlbnRyeSovCisgICAgICAgIHJldHVybiBSVF9FUlJfQ0hJUF9OT1RfU1VQUE9SVEVEOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbDJfdGFibGVfY2xlYXIKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBGbHVzaCBhbGwgc3RhdGljICYgZHluYW1pYyBlbnRyaWVzIGluIExVVC4KKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKgorICovCitydGtfYXBpX3JldF90IHJ0a19sMl90YWJsZV9jbGVhcih2b2lkKQoreworICAgIHJ0a19hcGlfcmV0X3QgICByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljTHV0Rmx1c2hBbGwoKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX3RhYmxlX2NsZWFyU3RhdHVzX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCB0YWJsZSBjbGVhciBzdGF0dXMKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBTdGF0dXMgLSBDbGVhciBzdGF0dXMsIDE6QnVzeSwgMDpmaW5pc2gKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKgorICovCitydGtfYXBpX3JldF90IHJ0a19sMl90YWJsZV9jbGVhclN0YXR1c19nZXQocnRrX2wyX2NsZWFyU3RhdHVzX3QgKnBTdGF0dXMpCit7CisgICAgcnRrX2FwaV9yZXRfdCAgIHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBTdGF0dXMpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljTHV0Rmx1c2hBbGxTdGF0dXMoKHJ0a191aW50MzIgKilwU3RhdHVzKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2ZsdXNoTGlua0Rvd25Qb3J0QWRkckVuYWJsZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgSFcgZmx1c2ggbGlua2Rvd24gcG9ydCBtYWMgY29uZmlndXJhdGlvbiBvZiB0aGUgc3BlY2lmaWVkIGRldmljZS4KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqICAgICAgZW5hYmxlIC0gbGluayBkb3duIGZsdXNoIHN0YXR1cworICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfRU5BQkxFICAgICAgIC0gSW52YWxpZCBlbmFibGUgaW5wdXQuCisgKiBOb3RlOgorICogICAgICBUaGUgc3RhdHVzIG9mIGZsdXNoIGxpbmtkb3duIHBvcnQgYWRkcmVzcyBpcyBhcyBmb2xsb3dpbmc6CisgKiAgICAgIC0gRElTQUJMRUQKKyAqICAgICAgLSBFTkFCTEVECisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2wyX2ZsdXNoTGlua0Rvd25Qb3J0QWRkckVuYWJsZV9zZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfZW5hYmxlX3QgZW5hYmxlKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmIChwb3J0ICE9IFJUS19XSE9MRV9TWVNURU0pCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIGlmIChlbmFibGUgPj0gUlRLX0VOQUJMRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfRU5BQkxFOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljTHV0TGlua0Rvd25Gb3JjZUFnaW5nKGVuYWJsZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2ZsdXNoTGlua0Rvd25Qb3J0QWRkckVuYWJsZV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgSFcgZmx1c2ggbGlua2Rvd24gcG9ydCBtYWMgY29uZmlndXJhdGlvbiBvZiB0aGUgc3BlY2lmaWVkIGRldmljZS4KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqIE91dHB1dDoKKyAqICAgICAgcEVuYWJsZSAtIGxpbmsgZG93biBmbHVzaCBzdGF0dXMKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiBOb3RlOgorICogICAgICBUaGUgc3RhdHVzIG9mIGZsdXNoIGxpbmtkb3duIHBvcnQgYWRkcmVzcyBpcyBhcyBmb2xsb3dpbmc6CisgKiAgICAgIC0gRElTQUJMRUQKKyAqICAgICAgLSBFTkFCTEVECisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2wyX2ZsdXNoTGlua0Rvd25Qb3J0QWRkckVuYWJsZV9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfZW5hYmxlX3QgKnBFbmFibGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKHBvcnQgIT0gUlRLX1dIT0xFX1NZU1RFTSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgaWYoTlVMTCA9PSBwRW5hYmxlKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0x1dExpbmtEb3duRm9yY2VBZ2luZyhwRW5hYmxlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2FnaW5nRW5hYmxlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBMMiBMVVQgYWdpbmcgc3RhdHVzIHBlciBwb3J0IHNldHRpbmcuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIFBvcnQgaWQuCisgKiAgICAgIGVuYWJsZSAgLSBBZ2luZyBzdGF0dXMKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqICAgICAgUlRfRVJSX0VOQUJMRSAgICAgICAtIEludmFsaWQgZW5hYmxlIGlucHV0LgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgY2FuIGJlIHVzZWQgdG8gc2V0IEwyIExVVCBhZ2luZyBzdGF0dXMgcGVyIHBvcnQuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2wyX2FnaW5nRW5hYmxlX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19lbmFibGVfdCBlbmFibGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogY2hlY2sgcG9ydCB2YWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwb3J0KTsKKworICAgIGlmIChlbmFibGUgPj0gUlRLX0VOQUJMRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfRU5BQkxFOworCisgICAgaWYoZW5hYmxlID09IDEpCisgICAgICAgIGVuYWJsZSA9IDA7CisgICAgZWxzZQorICAgICAgICBlbmFibGUgPSAxOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljTHV0RGlzYWJsZUFnaW5nKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCBlbmFibGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbDJfYWdpbmdFbmFibGVfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IEwyIExVVCBhZ2luZyBzdGF0dXMgcGVyIHBvcnQgc2V0dGluZy4KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqIE91dHB1dDoKKyAqICAgICAgcEVuYWJsZSAtIEFnaW5nIHN0YXR1cworICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBiZSB1c2VkIHRvIGdldCBMMiBMVVQgYWdpbmcgZnVuY3Rpb24gcGVyIHBvcnQuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2wyX2FnaW5nRW5hYmxlX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19lbmFibGVfdCAqcEVuYWJsZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBjaGVjayBwb3J0IHZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgaWYoTlVMTCA9PSBwRW5hYmxlKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0x1dERpc2FibGVBZ2luZyhydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgcEVuYWJsZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmKCpwRW5hYmxlID09IDEpCisgICAgICAgICpwRW5hYmxlID0gMDsKKyAgICBlbHNlCisgICAgICAgICpwRW5hYmxlID0gMTsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sMl9saW1pdExlYXJuaW5nQ250X3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwZXItUG9ydCBhdXRvIGxlYXJuaW5nIGxpbWl0IG51bWJlcgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBQb3J0IGlkLgorICogICAgICBtYWNfY250IC0gQXV0byBsZWFybmluZyBlbnRyaWVzIGxpbWl0IG51bWJlcgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9MSU1JVEVEX0wyRU5UUllfTlVNICAtIEludmFsaWQgYXV0byBsZWFybmluZyBsaW1pdCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIHNldCBwZXItcG9ydCBBU0lDIGF1dG8gbGVhcm5pbmcgbGltaXQgbnVtYmVyIGZyb20gMChkaXNhYmxlIGxlYXJuaW5nKQorICogICAgICB0byAyMTEyLgorICovCitydGtfYXBpX3JldF90IHJ0a19sMl9saW1pdExlYXJuaW5nQ250X3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19tYWNfY250X3QgbWFjX2NudCkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBjaGVjayBwb3J0IHZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgaWYgKG1hY19jbnQgPiBydGtfc3dpdGNoX21heEx1dEFkZHJOdW1iZXJfZ2V0KCkpCisgICAgICAgIHJldHVybiBSVF9FUlJfTElNSVRFRF9MMkVOVFJZX05VTTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0x1dExlYXJuTGltaXRObyhydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgbWFjX2NudCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sMl9saW1pdExlYXJuaW5nQ250X2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwZXItUG9ydCBhdXRvIGxlYXJuaW5nIGxpbWl0IG51bWJlcgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBQb3J0IGlkLgorICogT3V0cHV0OgorICogICAgICBwTWFjX2NudCAtIEF1dG8gbGVhcm5pbmcgZW50cmllcyBsaW1pdCBudW1iZXIKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBnZXQgcGVyLXBvcnQgQVNJQyBhdXRvIGxlYXJuaW5nIGxpbWl0IG51bWJlci4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfbDJfbGltaXRMZWFybmluZ0NudF9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfbWFjX2NudF90ICpwTWFjX2NudCkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBjaGVjayBwb3J0IHZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgaWYoTlVMTCA9PSBwTWFjX2NudCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNMdXRMZWFybkxpbWl0Tm8ocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIHBNYWNfY250KSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2xpbWl0U3lzdGVtTGVhcm5pbmdDbnRfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IFN5c3RlbSBhdXRvIGxlYXJuaW5nIGxpbWl0IG51bWJlcgorICogSW5wdXQ6CisgKiAgICAgIG1hY19jbnQgLSBBdXRvIGxlYXJuaW5nIGVudHJpZXMgbGltaXQgbnVtYmVyCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0xJTUlURURfTDJFTlRSWV9OVU0gIC0gSW52YWxpZCBhdXRvIGxlYXJuaW5nIGxpbWl0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gc2V0IHN5c3RlbSBBU0lDIGF1dG8gbGVhcm5pbmcgbGltaXQgbnVtYmVyIGZyb20gMChkaXNhYmxlIGxlYXJuaW5nKQorICogICAgICB0byAyMTEyLgorICovCitydGtfYXBpX3JldF90IHJ0a19sMl9saW1pdFN5c3RlbUxlYXJuaW5nQ250X3NldChydGtfbWFjX2NudF90IG1hY19jbnQpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKG1hY19jbnQgPiBydGtfc3dpdGNoX21heEx1dEFkZHJOdW1iZXJfZ2V0KCkpCisgICAgICAgIHJldHVybiBSVF9FUlJfTElNSVRFRF9MMkVOVFJZX05VTTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1N5c3RlbUx1dExlYXJuTGltaXRObyhtYWNfY250KSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2xpbWl0U3lzdGVtTGVhcm5pbmdDbnRfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFN5c3RlbSBhdXRvIGxlYXJuaW5nIGxpbWl0IG51bWJlcgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcE1hY19jbnQgLSBBdXRvIGxlYXJuaW5nIGVudHJpZXMgbGltaXQgbnVtYmVyCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IHN5c3RlbSBBU0lDIGF1dG8gbGVhcm5pbmcgbGltaXQgbnVtYmVyLgorICovCitydGtfYXBpX3JldF90IHJ0a19sMl9saW1pdFN5c3RlbUxlYXJuaW5nQ250X2dldChydGtfbWFjX2NudF90ICpwTWFjX2NudCkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBNYWNfY250KQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1N5c3RlbUx1dExlYXJuTGltaXRObyhwTWFjX2NudCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sMl9saW1pdExlYXJuaW5nQ250QWN0aW9uX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIENvbmZpZ3VyZSBhdXRvIGxlYXJuIG92ZXIgbGltaXQgbnVtYmVyIGFjdGlvbi4KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqICAgICAgYWN0aW9uIC0gQXV0byBsZWFybmluZyBlbnRyaWVzIGxpbWl0IG51bWJlcgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfTk9UX0FMTE9XRUQgIC0gSW52YWxpZCBsZWFybiBvdmVyIGFjdGlvbgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gc2V0IFNBIHVua25vd24gcGFja2V0IGFjdGlvbiB3aGlsZSBhdXRvIGxlYXJuIGxpbWl0IG51bWJlciBpcyBvdmVyCisgKiAgICAgIFRoZSBhY3Rpb24gc3ltYm9sIGFzIGZvbGxvd2luZzoKKyAqICAgICAgLSBMSU1JVF9MRUFSTl9DTlRfQUNUSU9OX0RST1AsCisgKiAgICAgIC0gTElNSVRfTEVBUk5fQ05UX0FDVElPTl9GT1JXQVJELAorICogICAgICAtIExJTUlUX0xFQVJOX0NOVF9BQ1RJT05fVE9fQ1BVLAorICovCitydGtfYXBpX3JldF90IHJ0a19sMl9saW1pdExlYXJuaW5nQ250QWN0aW9uX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19sMl9saW1pdExlYXJuQ250QWN0aW9uX3QgYWN0aW9uKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgZGF0YTsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAocG9ydCAhPSBSVEtfV0hPTEVfU1lTVEVNKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICBpZiAoIExJTUlUX0xFQVJOX0NOVF9BQ1RJT05fRFJPUCA9PSBhY3Rpb24gKQorICAgICAgICBkYXRhID0gMTsKKyAgICBlbHNlIGlmICggTElNSVRfTEVBUk5fQ05UX0FDVElPTl9GT1JXQVJEID09IGFjdGlvbiApCisgICAgICAgIGRhdGEgPSAwOworICAgIGVsc2UgaWYgKCBMSU1JVF9MRUFSTl9DTlRfQUNUSU9OX1RPX0NQVSA9PSBhY3Rpb24gKQorICAgICAgICBkYXRhID0gMjsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBSVF9FUlJfTk9UX0FMTE9XRUQ7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNMdXRMZWFybk92ZXJBY3QoZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sMl9saW1pdExlYXJuaW5nQ250QWN0aW9uX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBhdXRvIGxlYXJuIG92ZXIgbGltaXQgbnVtYmVyIGFjdGlvbi4KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqIE91dHB1dDoKKyAqICAgICAgcEFjdGlvbiAtIExlYXJuIG92ZXIgYWN0aW9uCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IFNBIHVua25vd24gcGFja2V0IGFjdGlvbiB3aGlsZSBhdXRvIGxlYXJuIGxpbWl0IG51bWJlciBpcyBvdmVyCisgKiAgICAgIFRoZSBhY3Rpb24gc3ltYm9sIGFzIGZvbGxvd2luZzoKKyAqICAgICAgLSBMSU1JVF9MRUFSTl9DTlRfQUNUSU9OX0RST1AsCisgKiAgICAgIC0gTElNSVRfTEVBUk5fQ05UX0FDVElPTl9GT1JXQVJELAorICogICAgICAtIExJTUlUX0xFQVJOX0NOVF9BQ1RJT05fVE9fQ1BVLAorICovCitydGtfYXBpX3JldF90IHJ0a19sMl9saW1pdExlYXJuaW5nQ250QWN0aW9uX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19sMl9saW1pdExlYXJuQ250QWN0aW9uX3QgKnBBY3Rpb24pCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBhY3Rpb247CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKHBvcnQgIT0gUlRLX1dIT0xFX1NZU1RFTSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgaWYoTlVMTCA9PSBwQWN0aW9uKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0x1dExlYXJuT3ZlckFjdCgmYWN0aW9uKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKCAxID09IGFjdGlvbiApCisgICAgICAgICpwQWN0aW9uID0gTElNSVRfTEVBUk5fQ05UX0FDVElPTl9EUk9QOworICAgIGVsc2UgaWYgKCAwID09IGFjdGlvbiApCisgICAgICAgICpwQWN0aW9uID0gTElNSVRfTEVBUk5fQ05UX0FDVElPTl9GT1JXQVJEOworICAgIGVsc2UgaWYgKCAyID09IGFjdGlvbiApCisgICAgICAgICpwQWN0aW9uID0gTElNSVRfTEVBUk5fQ05UX0FDVElPTl9UT19DUFU7CisgICAgZWxzZQorICAgICpwQWN0aW9uID0gYWN0aW9uOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2xpbWl0U3lzdGVtTGVhcm5pbmdDbnRBY3Rpb25fc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQ29uZmlndXJlIHN5c3RlbSBhdXRvIGxlYXJuIG92ZXIgbGltaXQgbnVtYmVyIGFjdGlvbi4KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqICAgICAgYWN0aW9uIC0gQXV0byBsZWFybmluZyBlbnRyaWVzIGxpbWl0IG51bWJlcgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfTk9UX0FMTE9XRUQgIC0gSW52YWxpZCBsZWFybiBvdmVyIGFjdGlvbgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gc2V0IFNBIHVua25vd24gcGFja2V0IGFjdGlvbiB3aGlsZSBhdXRvIGxlYXJuIGxpbWl0IG51bWJlciBpcyBvdmVyCisgKiAgICAgIFRoZSBhY3Rpb24gc3ltYm9sIGFzIGZvbGxvd2luZzoKKyAqICAgICAgLSBMSU1JVF9MRUFSTl9DTlRfQUNUSU9OX0RST1AsCisgKiAgICAgIC0gTElNSVRfTEVBUk5fQ05UX0FDVElPTl9GT1JXQVJELAorICogICAgICAtIExJTUlUX0xFQVJOX0NOVF9BQ1RJT05fVE9fQ1BVLAorICovCitydGtfYXBpX3JldF90IHJ0a19sMl9saW1pdFN5c3RlbUxlYXJuaW5nQ250QWN0aW9uX3NldChydGtfbDJfbGltaXRMZWFybkNudEFjdGlvbl90IGFjdGlvbikKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIGRhdGE7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKCBMSU1JVF9MRUFSTl9DTlRfQUNUSU9OX0RST1AgPT0gYWN0aW9uICkKKyAgICAgICAgZGF0YSA9IDE7CisgICAgZWxzZSBpZiAoIExJTUlUX0xFQVJOX0NOVF9BQ1RJT05fRk9SV0FSRCA9PSBhY3Rpb24gKQorICAgICAgICBkYXRhID0gMDsKKyAgICBlbHNlIGlmICggTElNSVRfTEVBUk5fQ05UX0FDVElPTl9UT19DUFUgPT0gYWN0aW9uICkKKyAgICAgICAgZGF0YSA9IDI7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gUlRfRVJSX05PVF9BTExPV0VEOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU3lzdGVtTHV0TGVhcm5PdmVyQWN0KGRhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbDJfbGltaXRTeXN0ZW1MZWFybmluZ0NudEFjdGlvbl9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgc3lzdGVtIGF1dG8gbGVhcm4gb3ZlciBsaW1pdCBudW1iZXIgYWN0aW9uLgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBBY3Rpb24gLSBMZWFybiBvdmVyIGFjdGlvbgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGdldCBTQSB1bmtub3duIHBhY2tldCBhY3Rpb24gd2hpbGUgYXV0byBsZWFybiBsaW1pdCBudW1iZXIgaXMgb3ZlcgorICogICAgICBUaGUgYWN0aW9uIHN5bWJvbCBhcyBmb2xsb3dpbmc6CisgKiAgICAgIC0gTElNSVRfTEVBUk5fQ05UX0FDVElPTl9EUk9QLAorICogICAgICAtIExJTUlUX0xFQVJOX0NOVF9BQ1RJT05fRk9SV0FSRCwKKyAqICAgICAgLSBMSU1JVF9MRUFSTl9DTlRfQUNUSU9OX1RPX0NQVSwKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfbDJfbGltaXRTeXN0ZW1MZWFybmluZ0NudEFjdGlvbl9nZXQocnRrX2wyX2xpbWl0TGVhcm5DbnRBY3Rpb25fdCAqcEFjdGlvbikKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIGFjdGlvbjsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBBY3Rpb24pCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU3lzdGVtTHV0TGVhcm5PdmVyQWN0KCZhY3Rpb24pKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoIDEgPT0gYWN0aW9uICkKKyAgICAgICAgKnBBY3Rpb24gPSBMSU1JVF9MRUFSTl9DTlRfQUNUSU9OX0RST1A7CisgICAgZWxzZSBpZiAoIDAgPT0gYWN0aW9uICkKKyAgICAgICAgKnBBY3Rpb24gPSBMSU1JVF9MRUFSTl9DTlRfQUNUSU9OX0ZPUldBUkQ7CisgICAgZWxzZSBpZiAoIDIgPT0gYWN0aW9uICkKKyAgICAgICAgKnBBY3Rpb24gPSBMSU1JVF9MRUFSTl9DTlRfQUNUSU9OX1RPX0NQVTsKKyAgICBlbHNlCisgICAgKnBBY3Rpb24gPSBhY3Rpb247CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbDJfbGltaXRTeXN0ZW1MZWFybmluZ0NudFBvcnRNYXNrX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIENvbmZpZ3VyZSBzeXN0ZW0gYXV0byBsZWFybiBwb3J0bWFzaworICogSW5wdXQ6CisgKiAgICAgIHBQb3J0bWFzayAtIFBvcnQgTWFzaworICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX01BU0sgICAgLSBJbnZhbGlkIHBvcnQgbWFzay4KKyAqIE5vdGU6CisgKgorICovCitydGtfYXBpX3JldF90IHJ0a19sMl9saW1pdFN5c3RlbUxlYXJuaW5nQ250UG9ydE1hc2tfc2V0KHJ0a19wb3J0bWFza190ICpwUG9ydG1hc2spCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBwbWFzazsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBQb3J0bWFzaykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICAvKiBDaGVjayBwb3J0IG1hc2sgKi8KKyAgICBSVEtfQ0hLX1BPUlRNQVNLX1ZBTElEKHBQb3J0bWFzayk7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0a19zd2l0Y2hfcG9ydG1hc2tfTDJQX2dldChwUG9ydG1hc2ssICZwbWFzaykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1N5c3RlbUx1dExlYXJuUG9ydE1hc2socG1hc2spKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbDJfbGltaXRTeXN0ZW1MZWFybmluZ0NudFBvcnRNYXNrX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIGdldCBzeXN0ZW0gYXV0byBsZWFybiBwb3J0bWFzaworICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcFBvcnRtYXNrIC0gUG9ydCBNYXNrCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgLSBOdWxsIHBvaW50ZXIuCisgKiBOb3RlOgorICoKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfbDJfbGltaXRTeXN0ZW1MZWFybmluZ0NudFBvcnRNYXNrX2dldChydGtfcG9ydG1hc2tfdCAqcFBvcnRtYXNrKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcG1hc2s7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoTlVMTCA9PSBwUG9ydG1hc2spCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU3lzdGVtTHV0TGVhcm5Qb3J0TWFzaygmcG1hc2spKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0a19zd2l0Y2hfcG9ydG1hc2tfUDJMX2dldChwbWFzaywgcFBvcnRtYXNrKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2xlYXJuaW5nQ250X2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwZXItUG9ydCBjdXJyZW50IGF1dG8gbGVhcm5pbmcgbnVtYmVyCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBNYWNfY250IC0gQVNJQyBhdXRvIGxlYXJuaW5nIGVudHJpZXMgbnVtYmVyCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IHBlci1wb3J0IEFTSUMgYXV0byBsZWFybmluZyBudW1iZXIKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfbDJfbGVhcm5pbmdDbnRfZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX21hY19jbnRfdCAqcE1hY19jbnQpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogY2hlY2sgcG9ydCB2YWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwb3J0KTsKKworICAgIGlmKE5VTEwgPT0gcE1hY19jbnQpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljTHV0TGVhcm5ObyhydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgcE1hY19jbnQpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbDJfZmxvb2RQb3J0TWFza19zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgZmxvb2RpbmcgcG9ydG1hc2sKKyAqIElucHV0OgorICogICAgICB0eXBlIC0gZmxvb2RpbmcgdHlwZS4KKyAqICAgICAgcEZsb29kX3BvcnRtYXNrIC0gZmxvb2RpbmcgcG9ya21hc2sKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9NQVNLICAgIC0gSW52YWxpZCBwb3J0bWFzay4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBzZXQgdGhlIGZsb29kaW5nIG1hc2suCisgKiAgICAgIFRoZSBmbG9vZGluZyB0eXBlIGlzIGFzIGZvbGxvd2luZzoKKyAqICAgICAgLSBGTE9PRF9VTktOT1dOREEKKyAqICAgICAgLSBGTE9PRF9VTktOT1dOTUMKKyAqICAgICAgLSBGTE9PRF9CQworICovCitydGtfYXBpX3JldF90IHJ0a19sMl9mbG9vZFBvcnRNYXNrX3NldChydGtfbDJfZmxvb2RfdHlwZV90IGZsb29vZF90eXBlLCBydGtfcG9ydG1hc2tfdCAqcEZsb29kX3BvcnRtYXNrKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcG1hc2s7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKGZsb29vZF90eXBlID49IEZMT09EX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIC8qIGNoZWNrIHBvcnQgdmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRNQVNLX1ZBTElEKHBGbG9vZF9wb3J0bWFzayk7CisKKyAgICAvKiBHZXQgUGh5c2ljYWwgcG9ydCBtYXNrICovCisgICAgaWYgKChyZXRWYWwgPSBydGtfc3dpdGNoX3BvcnRtYXNrX0wyUF9nZXQocEZsb29kX3BvcnRtYXNrLCAmcG1hc2spKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgc3dpdGNoIChmbG9vb2RfdHlwZSkKKyAgICB7CisgICAgICAgIGNhc2UgRkxPT0RfVU5LTk9XTkRBOgorICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUG9ydFVua25vd25EYUZsb29kaW5nUG9ydG1hc2socG1hc2spKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZMT09EX1VOS05PV05NQzoKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BvcnRVbmtub3duTXVsdGljYXN0Rmxvb2RpbmdQb3J0bWFzayhwbWFzaykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRkxPT0RfQkM6CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQb3J0QmNhc3RGbG9vZGluZ1BvcnRtYXNrKHBtYXNrKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbDJfZmxvb2RQb3J0TWFza19nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgZmxvb2RpbmcgcG9ydG1hc2sKKyAqIElucHV0OgorICogICAgICB0eXBlIC0gZmxvb2RpbmcgdHlwZS4KKyAqIE91dHB1dDoKKyAqICAgICAgcEZsb29kX3BvcnRtYXNrIC0gZmxvb2RpbmcgcG9ya21hc2sKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBjYW4gZ2V0IHRoZSBmbG9vZGluZyBtYXNrLgorICogICAgICBUaGUgZmxvb2RpbmcgdHlwZSBpcyBhcyBmb2xsb3dpbmc6CisgKiAgICAgIC0gRkxPT0RfVU5LTk9XTkRBCisgKiAgICAgIC0gRkxPT0RfVU5LTk9XTk1DCisgKiAgICAgIC0gRkxPT0RfQkMKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfbDJfZmxvb2RQb3J0TWFza19nZXQocnRrX2wyX2Zsb29kX3R5cGVfdCBmbG9vb2RfdHlwZSwgcnRrX3BvcnRtYXNrX3QgKnBGbG9vZF9wb3J0bWFzaykKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHBtYXNrOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmIChmbG9vb2RfdHlwZSA+PSBGTE9PRF9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZihOVUxMID09IHBGbG9vZF9wb3J0bWFzaykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBzd2l0Y2ggKGZsb29vZF90eXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBGTE9PRF9VTktOT1dOREE6CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQb3J0VW5rbm93bkRhRmxvb2RpbmdQb3J0bWFzaygmcG1hc2spKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZMT09EX1VOS05PV05NQzoKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BvcnRVbmtub3duTXVsdGljYXN0Rmxvb2RpbmdQb3J0bWFzaygmcG1hc2spKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZMT09EX0JDOgorICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUG9ydEJjYXN0Rmxvb2RpbmdQb3J0bWFzaygmcG1hc2spKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLyogR2V0IExvZ2ljYWwgcG9ydCBtYXNrICovCisgICAgaWYgKChyZXRWYWwgPSBydGtfc3dpdGNoX3BvcnRtYXNrX1AyTF9nZXQocG1hc2ssIHBGbG9vZF9wb3J0bWFzaykpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbDJfbG9jYWxQa3RQZXJtaXRfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHBlcm1pdHRpb24gb2YgZnJhbWVzIGlmIHNvdXJjZSBwb3J0IGFuZCBkZXN0aW5hdGlvbiBwb3J0IGFyZSB0aGUgc2FtZS4KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqICAgICAgcGVybWl0IC0gcGVybWl0dGlvbiBzdGF0dXMKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqICAgICAgUlRfRVJSX0VOQUJMRSAgICAgICAtIEludmFsaWQgcGVybWl0IHZhbHVlLgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgaXMgc2V0dGVkIHRvIHBlcm1pdCBmcmFtZSBpZiBpdHMgc291cmNlIHBvcnQgaXMgZXF1YWwgdG8gZGVzdGluYXRpb24gcG9ydC4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfbDJfbG9jYWxQa3RQZXJtaXRfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2VuYWJsZV90IHBlcm1pdCkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBjaGVjayBwb3J0IHZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgaWYgKHBlcm1pdCA+PSBSVEtfRU5BQkxFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9FTkFCTEU7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQb3J0QmxvY2tTcGEocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIHBlcm1pdCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sMl9sb2NhbFBrdFBlcm1pdF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcGVybWl0dGlvbiBvZiBmcmFtZXMgaWYgc291cmNlIHBvcnQgYW5kIGRlc3RpbmF0aW9uIHBvcnQgYXJlIHRoZSBzYW1lLgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBQb3J0IGlkLgorICogT3V0cHV0OgorICogICAgICBwUGVybWl0IC0gcGVybWl0dGlvbiBzdGF0dXMKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBpcyB0byBnZXQgcGVybWl0dGlvbiBzdGF0dXMgZm9yIGZyYW1lcyBpZiBpdHMgc291cmNlIHBvcnQgaXMgZXF1YWwgdG8gZGVzdGluYXRpb24gcG9ydC4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfbDJfbG9jYWxQa3RQZXJtaXRfZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2VuYWJsZV90ICpwUGVybWl0KQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIGNoZWNrIHBvcnQgdmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQocG9ydCk7CisKKyAgICBpZihOVUxMID09IHBQZXJtaXQpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUG9ydEJsb2NrU3BhKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCBwUGVybWl0KSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2FnaW5nX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBMVVQgYWdnaW5nIG91dCBzcGVlZAorICogSW5wdXQ6CisgKiAgICAgIGFnaW5nX3RpbWUgLSBBZ2dpbmcgb3V0IHRpbWUuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAgICAgLSBpbnB1dCBvdXQgb2YgcmFuZ2UuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBzZXQgTFVUIGFnZ2luZyBvdXQgcGVyaW9kIGZvciBlYWNoIGVudHJ5IGFuZCB0aGUgcmFuZ2UgaXMgZnJvbSA0NXMgdG8gNDU4cy4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfbDJfYWdpbmdfc2V0KHJ0a19sMl9hZ2VfdGltZV90IGFnaW5nX3RpbWUpCit7CisgICAgcnRrX3VpbnQzMiBpOworICAgIENPTlNUX1QgcnRrX3VpbnQzMiBhZ2VQYXJhWzEwXVszXSA9IHsKKyAgICAgICAgezQ1LCAwLCAxfSwgezg4LCAwLCAyfSwgezEzMywgMCwgM30sIHsxNzcsIDAsIDR9LCB7MjIxLCAwLCA1fSwgezI2NiwgMCwgNn0sIHszMTAsIDAsIDd9LAorICAgICAgICB7MzU0LCAyLCA2fSwgezQxMywgMiwgN30sIHs0NTgsIDMsIDd9fTsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAoYWdpbmdfdGltZT5hZ2VQYXJhWzldWzBdKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIGZvciAoaSA9IDA7IGk8MTA7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChhZ2luZ190aW1lPD1hZ2VQYXJhW2ldWzBdKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY0x1dEFnZVRpbWVyU3BlZWQoYWdlUGFyYVtpXVsyXSwgYWdlUGFyYVtpXVsxXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2FnaW5nX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBMVVQgYWdnaW5nIG91dCB0aW1lCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwRW5hYmxlIC0gQWdpbmcgc3RhdHVzCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IExVVCBhZ2dpbmcgb3V0IHBlcmlvZCBmb3IgZWFjaCBlbnRyeS4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfbDJfYWdpbmdfZ2V0KHJ0a19sMl9hZ2VfdGltZV90ICpwQWdpbmdfdGltZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIGksdGltZSwgc3BlZWQ7CisgICAgQ09OU1RfVCBydGtfdWludDMyIGFnZVBhcmFbMTBdWzNdID0geworICAgICAgICB7NDUsIDAsIDF9LCB7ODgsIDAsIDJ9LCB7MTMzLCAwLCAzfSwgezE3NywgMCwgNH0sIHsyMjEsIDAsIDV9LCB7MjY2LCAwLCA2fSwgezMxMCwgMCwgN30sCisgICAgICAgIHszNTQsIDIsIDZ9LCB7NDEzLCAyLCA3fSwgezQ1OCwgMywgN319OworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKE5VTEwgPT0gcEFnaW5nX3RpbWUpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljTHV0QWdlVGltZXJTcGVlZCgmdGltZSwgJnNwZWVkKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgZm9yIChpID0gMDsgaTwxMDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKHRpbWU9PWFnZVBhcmFbaV1bMl0mJnNwZWVkPT1hZ2VQYXJhW2ldWzFdKQorICAgICAgICB7CisgICAgICAgICAgICAqcEFnaW5nX3RpbWUgPSBhZ2VQYXJhW2ldWzBdOworICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9PSzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfRkFJTEVEOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbDJfaXBNY2FzdEFkZHJMb29rdXBfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IEx1dCBJUCBtdWx0aWNhc3QgbG9va3VwIGZ1bmN0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgdHlwZSAtIExvb2t1cCB0eXBlIGZvciBJUE1DIHBhY2tldC4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIExPT0tVUF9NQUMgICAgICAtIExvb2t1cCBieSBNQUMgYWRkcmVzcworICogICAgICBMT09LVVBfSVAgICAgICAgLSBMb29rdXAgYnkgSVAgYWRkcmVzcworICogICAgICBMT09LVVBfSVBfVklEICAgLSBMb29rdXAgYnkgSVAgYWRkcmVzcyAmIFZMQU4gSUQKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfbDJfaXBNY2FzdEFkZHJMb29rdXBfc2V0KHJ0a19sMl9pcG1jX2xvb2t1cF90eXBlX3QgdHlwZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZih0eXBlID09IExPT0tVUF9NQUMpCisgICAgeworICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0x1dElwTXVsdGljYXN0TG9va3VwKERJU0FCTEVEKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisgICAgZWxzZSBpZih0eXBlID09IExPT0tVUF9JUCkKKyAgICB7CisgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljTHV0SXBNdWx0aWNhc3RMb29rdXAoRU5BQkxFRCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljTHV0SXBNdWx0aWNhc3RWaWRMb29rdXAoRElTQUJMRUQpKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNMdXRJcExvb2t1cE1ldGhvZCgxKSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorICAgIGVsc2UgaWYodHlwZSA9PSBMT09LVVBfSVBfVklEKQorICAgIHsKKyAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNMdXRJcE11bHRpY2FzdExvb2t1cChFTkFCTEVEKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNMdXRJcE11bHRpY2FzdFZpZExvb2t1cChFTkFCTEVEKSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljTHV0SXBMb29rdXBNZXRob2QoMSkpIT1SVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbDJfaXBNY2FzdEFkZHJMb29rdXBfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IEx1dCBJUCBtdWx0aWNhc3QgbG9va3VwIGZ1bmN0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZS4KKyAqIE91dHB1dDoKKyAqICAgICAgcFR5cGUgLSBMb29rdXAgdHlwZSBmb3IgSVBNQyBwYWNrZXQuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lLgorICovCitydGtfYXBpX3JldF90IHJ0a19sMl9pcE1jYXN0QWRkckxvb2t1cF9nZXQocnRrX2wyX2lwbWNfbG9va3VwX3R5cGVfdCAqcFR5cGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCAgICAgICByZXRWYWw7CisgICAgcnRrX3VpbnQzMiAgICAgICAgICBlbmFibGVkLCB2aWRfbG9va3VwOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKE5VTEwgPT0gcFR5cGUpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNMdXRJcE11bHRpY2FzdExvb2t1cCgmZW5hYmxlZCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0x1dElwTXVsdGljYXN0VmlkTG9va3VwKCZ2aWRfbG9va3VwKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmKGVuYWJsZWQgPT0gRU5BQkxFRCkKKyAgICB7CisgICAgICAgIGlmKHZpZF9sb29rdXAgPT0gRU5BQkxFRCkKKyAgICAgICAgICAgICpwVHlwZSA9IExPT0tVUF9JUF9WSUQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpwVHlwZSA9IExPT0tVUF9JUDsKKyAgICB9CisgICAgZWxzZQorICAgICAgICAqcFR5cGUgPSBMT09LVVBfTUFDOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2lwTWNhc3RGb3J3YXJkUm91dGVyUG9ydF9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgSVBNQyBwYWNrZXQgZm9yd2FyZCB0byByb3VudGVyIHBvcnQgYWxzbyBvciBub3QKKyAqIElucHV0OgorICogICAgICBlbmFibGVkIC0gMTogSW5sY3VkZSByb3V0ZXIgcG9ydCwgMCwgZXhjbHVkZSByb3V0ZXIgcG9ydAorICogT3V0cHV0OgorICogICAgICBOb25lLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2wyX2lwTWNhc3RGb3J3YXJkUm91dGVyUG9ydF9zZXQocnRrX2VuYWJsZV90IGVuYWJsZWQpCit7CisgICAgcnRrX2FwaV9yZXRfdCAgICAgICByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKGVuYWJsZWQgPj0gUlRLX0VOQUJMRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfRU5BQkxFOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNMdXRJcG1jRndkUm91dGVyUG9ydChlbmFibGVkKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2lwTWNhc3RGb3J3YXJkUm91dGVyUG9ydF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgSVBNQyBwYWNrZXQgZm9yd2FyZCB0byByb3VudGVyIHBvcnQgYWxzbyBvciBub3QKKyAqIElucHV0OgorICogICAgICBOb25lLgorICogT3V0cHV0OgorICogICAgICBwRW5hYmxlZCAgICAtIDE6IElubGN1ZGUgcm91dGVyIHBvcnQsIDAsIGV4Y2x1ZGUgcm91dGVyIHBvcnQKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAtIE51bGwgcG9pbnRlcgorICogTm90ZToKKyAqCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2wyX2lwTWNhc3RGb3J3YXJkUm91dGVyUG9ydF9nZXQocnRrX2VuYWJsZV90ICpwRW5hYmxlZCkKK3sKKyAgICBydGtfYXBpX3JldF90ICAgICAgIHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAoTlVMTCA9PSBwRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0x1dElwbWNGd2RSb3V0ZXJQb3J0KHBFbmFibGVkKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2lwTWNhc3RHcm91cEVudHJ5X2FkZAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEFkZCBhbiBJUCBNdWx0aWNhc3QgZW50cnkgdG8gZ3JvdXAgdGFibGUKKyAqIElucHV0OgorICogICAgICBpcF9hZGRyICAgICAtIElQIGFkZHJlc3MKKyAqICAgICAgdmlkICAgICAgICAgLSBWTEFOIElECisgKiAgICAgIHBQb3J0bWFzayAgIC0gcG9ydG1hc2sKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1RCTF9GVUxMICAgIC0gVGFibGUgRnVsbAorICogTm90ZToKKyAqICAgICAgQWRkIGFuIGVudHJ5IHRvIElQIE11bHRpY2FzdCBHcm91cCB0YWJsZS4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfbDJfaXBNY2FzdEdyb3VwRW50cnlfYWRkKGlwYWRkcl90IGlwX2FkZHIsIHJ0a191aW50MzIgdmlkLCBydGtfcG9ydG1hc2tfdCAqcFBvcnRtYXNrKQoreworICAgIHJ0a191aW50MzIgICAgICBlbXB0eV9pZHggPSAweEZGRkY7CisgICAgcnRrX2ludDMyICAgICAgIGluZGV4OworICAgIGlwYWRkcl90ICAgICAgICBncm91cF9hZGRyOworICAgIHJ0a191aW50MzIgICAgICBncm91cF92aWQ7CisgICAgcnRrX3VpbnQzMiAgICAgIHBtYXNrOworICAgIHJ0a191aW50MzIgICAgICB2YWxpZDsKKyAgICBydGtfdWludDMyICAgICAgcGh5c2ljYWxQb3J0bWFzazsKKyAgICBydGtfYXBpX3JldF90ICAgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmICh2aWQgPiBSVEw4MzY3Q19WSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfTDJfVklEOworCisgICAgaWYoTlVMTCA9PSBwUG9ydG1hc2spCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYoKGlwX2FkZHIgJiAweEYwMDAwMDAwKSAhPSAweEUwMDAwMDAwKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgLyogR2V0IFBoeXNpY2FsIHBvcnQgbWFzayAqLworICAgIGlmICgocmV0VmFsID0gcnRrX3N3aXRjaF9wb3J0bWFza19MMlBfZ2V0KHBQb3J0bWFzaywgJnBoeXNpY2FsUG9ydG1hc2spKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgZm9yKGluZGV4ID0gMDsgaW5kZXggPD0gUlRMODM2N0NfTFVUX0lQTUNHUlBfVEFCTEVfTUFYOyBpbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljTHV0SVBNQ0dyb3VwKChydGtfdWludDMyKWluZGV4LCAmZ3JvdXBfYWRkciwgJmdyb3VwX3ZpZCwgJnBtYXNrLCAmdmFsaWQpKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZiggKHZhbGlkID09IEVOQUJMRUQpICYmIChncm91cF9hZGRyID09IGlwX2FkZHIpICYmIChncm91cF92aWQgPT0gdmlkKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKHBtYXNrICE9IHBoeXNpY2FsUG9ydG1hc2spCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcG1hc2sgPSBwaHlzaWNhbFBvcnRtYXNrOworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0x1dElQTUNHcm91cChpbmRleCwgaXBfYWRkciwgdmlkLCBwbWFzaywgdmFsaWQpKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gUlRfRVJSX09LOworICAgICAgICB9CisKKyAgICAgICAgaWYoICh2YWxpZCA9PSBESVNBQkxFRCkgJiYgKGVtcHR5X2lkeCA9PSAweEZGRkYpICkgLyogVW51c2VkICovCisgICAgICAgICAgICBlbXB0eV9pZHggPSAocnRrX3VpbnQzMilpbmRleDsKKyAgICB9CisKKyAgICBpZihlbXB0eV9pZHggPT0gMHhGRkZGKQorICAgICAgICByZXR1cm4gUlRfRVJSX1RCTF9GVUxMOworCisgICAgcG1hc2sgPSBwaHlzaWNhbFBvcnRtYXNrOworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0x1dElQTUNHcm91cChlbXB0eV9pZHgsIGlwX2FkZHIsIHZpZCwgcG1hc2ssIEVOQUJMRUQpKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2lwTWNhc3RHcm91cEVudHJ5X2RlbAorICogRGVzY3JpcHRpb246CisgKiAgICAgIERlbGV0ZSBhbiBlbnRyeSBmcm9tIElQIE11bHRpY2FzdCBncm91cCB0YWJsZQorICogSW5wdXQ6CisgKiAgICAgIGlwX2FkZHIgICAgIC0gSVAgYWRkcmVzcworICogICAgICB2aWQgICAgICAgICAtIFZMQU4gSUQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1RCTF9GVUxMICAgIC0gVGFibGUgRnVsbAorICogTm90ZToKKyAqICAgICAgRGVsZXRlIGFuIGVudHJ5IGZyb20gSVAgTXVsdGljYXN0IGdyb3VwIHRhYmxlLgorICovCitydGtfYXBpX3JldF90IHJ0a19sMl9pcE1jYXN0R3JvdXBFbnRyeV9kZWwoaXBhZGRyX3QgaXBfYWRkciwgcnRrX3VpbnQzMiB2aWQpCit7CisgICAgcnRrX2ludDMyICAgICAgIGluZGV4OworICAgIGlwYWRkcl90ICAgICAgICBncm91cF9hZGRyOworICAgIHJ0a191aW50MzIgICAgICBncm91cF92aWQ7CisgICAgcnRrX3VpbnQzMiAgICAgIHBtYXNrOworICAgIHJ0a191aW50MzIgICAgICB2YWxpZDsKKyAgICBydGtfYXBpX3JldF90ICAgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmICh2aWQgPiBSVEw4MzY3Q19WSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfTDJfVklEOworCisgICAgaWYoKGlwX2FkZHIgJiAweEYwMDAwMDAwKSAhPSAweEUwMDAwMDAwKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgZm9yKGluZGV4ID0gMDsgaW5kZXggPD0gUlRMODM2N0NfTFVUX0lQTUNHUlBfVEFCTEVfTUFYOyBpbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljTHV0SVBNQ0dyb3VwKChydGtfdWludDMyKWluZGV4LCAmZ3JvdXBfYWRkciwgJmdyb3VwX3ZpZCwgJnBtYXNrLCAmdmFsaWQpKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZiggKHZhbGlkID09IEVOQUJMRUQpICYmIChncm91cF9hZGRyID09IGlwX2FkZHIpICYmIChncm91cF92aWQgPT0gdmlkKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGdyb3VwX2FkZHIgPSAweEUwMDAwMDAwOworICAgICAgICAgICAgZ3JvdXBfdmlkID0gMDsKKyAgICAgICAgICAgIHBtYXNrID0gMDsKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0x1dElQTUNHcm91cChpbmRleCwgZ3JvdXBfYWRkciwgZ3JvdXBfdmlkLCBwbWFzaywgRElTQUJMRUQpKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIHJldHVybiBSVF9FUlJfT0s7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2wyX2lwTWNhc3RHcm91cEVudHJ5X2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIGdldCBhbiBlbnRyeSBmcm9tIElQIE11bHRpY2FzdCBncm91cCB0YWJsZQorICogSW5wdXQ6CisgKiAgICAgIGlwX2FkZHIgICAgIC0gSVAgYWRkcmVzcworICogICAgICB2aWQgICAgICAgICAtIFZMQU4gSUQKKyAqIE91dHB1dDoKKyAqICAgICAgcFBvcnRtYXNrICAgLSBtZW1iZXIgcG9ydCBtYXNrCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9UQkxfRlVMTCAgICAtIFRhYmxlIEZ1bGwKKyAqIE5vdGU6CisgKiAgICAgIERlbGV0ZSBhbiBlbnRyeSBmcm9tIElQIE11bHRpY2FzdCBncm91cCB0YWJsZS4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfbDJfaXBNY2FzdEdyb3VwRW50cnlfZ2V0KGlwYWRkcl90IGlwX2FkZHIsIHJ0a191aW50MzIgdmlkLCBydGtfcG9ydG1hc2tfdCAqcFBvcnRtYXNrKQoreworICAgIHJ0a19pbnQzMiAgICAgICBpbmRleDsKKyAgICBpcGFkZHJfdCAgICAgICAgZ3JvdXBfYWRkcjsKKyAgICBydGtfdWludDMyICAgICAgZ3JvdXBfdmlkOworICAgIHJ0a191aW50MzIgICAgICB2YWxpZDsKKyAgICBydGtfdWludDMyICAgICAgcG1hc2s7CisgICAgcnRrX2FwaV9yZXRfdCAgIHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZigoaXBfYWRkciAmIDB4RjAwMDAwMDApICE9IDB4RTAwMDAwMDApCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZiAodmlkID4gUlRMODM2N0NfVklETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX0wyX1ZJRDsKKworICAgIGlmKE5VTEwgPT0gcFBvcnRtYXNrKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGZvcihpbmRleCA9IDA7IGluZGV4IDw9IFJUTDgzNjdDX0xVVF9JUE1DR1JQX1RBQkxFX01BWDsgaW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0x1dElQTUNHcm91cCgocnRrX3VpbnQzMilpbmRleCwgJmdyb3VwX2FkZHIsICZncm91cF92aWQsICZwbWFzaywgJnZhbGlkKSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgaWYoICh2YWxpZCA9PSBFTkFCTEVEKSAmJiAoZ3JvdXBfYWRkciA9PSBpcF9hZGRyKSAmJiAoZ3JvdXBfdmlkID09IHZpZCkgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0a19zd2l0Y2hfcG9ydG1hc2tfUDJMX2dldChwbWFzaywgcFBvcnRtYXNrKSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICByZXR1cm4gUlRfRVJSX09LOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9GQUlMRUQ7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sMl9lbnRyeV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgTFVUIHVuaWNhc3QgZW50cnkuCisgKiBJbnB1dDoKKyAqICAgICAgcEwyX2VudHJ5IC0gSW5kZXggZmllbGQgaW4gdGhlIHN0cnVjdHVyZS4KKyAqIE91dHB1dDoKKyAqICAgICAgcEwyX2VudHJ5IC0gb3RoZXIgZmllbGRzIHN1Y2ggYXMgTUFDLCBwb3J0LCBhZ2UuLi4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0wyX0VNUFRZX0VOVFJZICAgLSBFbXB0eSBMVVQgZW50cnkuCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgaXMgdXNlZCB0byBnZXQgYWRkcmVzcyBieSBpbmRleCBmcm9tIDB+MjExMS4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfbDJfZW50cnlfZ2V0KHJ0a19sMl9hZGRyX3RhYmxlX3QgKnBMMl9lbnRyeSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIG1ldGhvZDsKKyAgICBydGw4MzY3Y19sdXR0YiBsMlRhYmxlOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmIChwTDJfZW50cnktPmluZGV4ID49IHJ0a19zd2l0Y2hfbWF4THV0QWRkck51bWJlcl9nZXQoKSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIG1lbXNldCgmbDJUYWJsZSwgMHgwMCwgc2l6ZW9mKHJ0bDgzNjdjX2x1dHRiKSk7CisgICAgbDJUYWJsZS5hZGRyZXNzPSBwTDJfZW50cnktPmluZGV4OworICAgIG1ldGhvZCA9IExVVFJFQURNRVRIT0RfQUREUkVTUzsKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNMMkxvb2t1cFRiKG1ldGhvZCwgJmwyVGFibGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHBMMl9lbnRyeS0+aW5kZXg+MHg4MDApJiYobDJUYWJsZS5sb29rdXBfaGl0PT0wKSkKKyAgICAgICAgIHJldHVybiBSVF9FUlJfTDJfRU1QVFlfRU5UUlk7CisKKyAgICBpZihsMlRhYmxlLmwzbG9va3VwKQorICAgIHsKKyAgICAgICAgaWYobDJUYWJsZS5sM3ZpZGxvb2t1cCkKKyAgICAgICAgeworICAgICAgICAgICAgbWVtc2V0KCZwTDJfZW50cnktPm1hYywgMCwgc2l6ZW9mKHJ0a19tYWNfdCkpOworICAgICAgICAgICAgcEwyX2VudHJ5LT5pc19pcG11bCAgPSBsMlRhYmxlLmwzbG9va3VwOworICAgICAgICAgICAgcEwyX2VudHJ5LT5zaXAgICAgICAgPSBsMlRhYmxlLnNpcDsKKyAgICAgICAgICAgIHBMMl9lbnRyeS0+ZGlwICAgICAgID0gbDJUYWJsZS5kaXA7CisgICAgICAgICAgICBwTDJfZW50cnktPmlzX3N0YXRpYyA9IGwyVGFibGUubm9zYWxlYXJuOworCisgICAgICAgICAgICAvKiBHZXQgTG9naWNhbCBwb3J0IG1hc2sgKi8KKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRrX3N3aXRjaF9wb3J0bWFza19QMkxfZ2V0KGwyVGFibGUubWJyLCAmKHBMMl9lbnRyeS0+cG9ydG1hc2spKSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBwTDJfZW50cnktPmZpZCAgICAgICA9IDA7CisgICAgICAgICAgICBwTDJfZW50cnktPmFnZSAgICAgICA9IDA7CisgICAgICAgICAgICBwTDJfZW50cnktPmF1dGggICAgICA9IDA7CisgICAgICAgICAgICBwTDJfZW50cnktPnNhX2Jsb2NrICA9IDA7CisgICAgICAgICAgICBwTDJfZW50cnktPmlzX2lwdmlkbXVsID0gMTsKKyAgICAgICAgICAgIHBMMl9lbnRyeS0+bDNfdmlkICAgICAgPSBsMlRhYmxlLmwzX3ZpZDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbXNldCgmcEwyX2VudHJ5LT5tYWMsIDAsIHNpemVvZihydGtfbWFjX3QpKTsKKyAgICAgICAgICAgIHBMMl9lbnRyeS0+aXNfaXBtdWwgID0gbDJUYWJsZS5sM2xvb2t1cDsKKyAgICAgICAgICAgIHBMMl9lbnRyeS0+c2lwICAgICAgID0gbDJUYWJsZS5zaXA7CisgICAgICAgICAgICBwTDJfZW50cnktPmRpcCAgICAgICA9IGwyVGFibGUuZGlwOworICAgICAgICAgICAgcEwyX2VudHJ5LT5pc19zdGF0aWMgPSBsMlRhYmxlLm5vc2FsZWFybjsKKworICAgICAgICAgICAgLyogR2V0IExvZ2ljYWwgcG9ydCBtYXNrICovCisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0a19zd2l0Y2hfcG9ydG1hc2tfUDJMX2dldChsMlRhYmxlLm1iciwgJihwTDJfZW50cnktPnBvcnRtYXNrKSkpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgcEwyX2VudHJ5LT5maWQgICAgICAgPSAwOworICAgICAgICAgICAgcEwyX2VudHJ5LT5hZ2UgICAgICAgPSAwOworICAgICAgICAgICAgcEwyX2VudHJ5LT5hdXRoICAgICAgPSAwOworICAgICAgICAgICAgcEwyX2VudHJ5LT5zYV9ibG9jayAgPSAwOworICAgICAgICAgICAgcEwyX2VudHJ5LT5pc19pcHZpZG11bCA9IDA7CisgICAgICAgICAgICBwTDJfZW50cnktPmwzX3ZpZCAgICAgID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmKGwyVGFibGUubWFjLm9jdGV0WzBdJjB4MDEpCisgICAgeworICAgICAgICBtZW1zZXQoJnBMMl9lbnRyeS0+c2lwLCAwLCBzaXplb2YoaXBhZGRyX3QpKTsKKyAgICAgICAgbWVtc2V0KCZwTDJfZW50cnktPmRpcCwgMCwgc2l6ZW9mKGlwYWRkcl90KSk7CisgICAgICAgIHBMMl9lbnRyeS0+bWFjLm9jdGV0WzBdID0gbDJUYWJsZS5tYWMub2N0ZXRbMF07CisgICAgICAgIHBMMl9lbnRyeS0+bWFjLm9jdGV0WzFdID0gbDJUYWJsZS5tYWMub2N0ZXRbMV07CisgICAgICAgIHBMMl9lbnRyeS0+bWFjLm9jdGV0WzJdID0gbDJUYWJsZS5tYWMub2N0ZXRbMl07CisgICAgICAgIHBMMl9lbnRyeS0+bWFjLm9jdGV0WzNdID0gbDJUYWJsZS5tYWMub2N0ZXRbM107CisgICAgICAgIHBMMl9lbnRyeS0+bWFjLm9jdGV0WzRdID0gbDJUYWJsZS5tYWMub2N0ZXRbNF07CisgICAgICAgIHBMMl9lbnRyeS0+bWFjLm9jdGV0WzVdID0gbDJUYWJsZS5tYWMub2N0ZXRbNV07CisgICAgICAgIHBMMl9lbnRyeS0+aXNfaXBtdWwgID0gbDJUYWJsZS5sM2xvb2t1cDsKKyAgICAgICAgcEwyX2VudHJ5LT5pc19zdGF0aWMgPSBsMlRhYmxlLm5vc2FsZWFybjsKKworICAgICAgICAvKiBHZXQgTG9naWNhbCBwb3J0IG1hc2sgKi8KKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGtfc3dpdGNoX3BvcnRtYXNrX1AyTF9nZXQobDJUYWJsZS5tYnIsICYocEwyX2VudHJ5LT5wb3J0bWFzaykpKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBwTDJfZW50cnktPml2bCAgICAgICA9IGwyVGFibGUuaXZsX3N2bDsKKyAgICAgICAgaWYobDJUYWJsZS5pdmxfc3ZsID09IDEpIC8qIElWTCAqLworICAgICAgICB7CisgICAgICAgICAgICBwTDJfZW50cnktPmN2aWQgICAgICA9IGwyVGFibGUuY3ZpZF9maWQ7CisgICAgICAgICAgICBwTDJfZW50cnktPmZpZCAgICAgICA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSAvKiBTVkwqLworICAgICAgICB7CisgICAgICAgICAgICBwTDJfZW50cnktPmN2aWQgICAgICA9IDA7CisgICAgICAgICAgICBwTDJfZW50cnktPmZpZCAgICAgICA9IGwyVGFibGUuY3ZpZF9maWQ7CisgICAgICAgIH0KKyAgICAgICAgcEwyX2VudHJ5LT5hdXRoICAgICAgPSBsMlRhYmxlLmF1dGg7CisgICAgICAgIHBMMl9lbnRyeS0+c2FfYmxvY2sgID0gbDJUYWJsZS5zYV9ibG9jazsKKyAgICAgICAgcEwyX2VudHJ5LT5hZ2UgICAgICAgPSAwOworICAgICAgICBwTDJfZW50cnktPmlzX2lwdmlkbXVsID0gMDsKKyAgICAgICAgcEwyX2VudHJ5LT5sM192aWQgICAgICA9IDA7CisgICAgfQorICAgIGVsc2UgaWYoKGwyVGFibGUuYWdlICE9IDApfHwobDJUYWJsZS5ub3NhbGVhcm4gPT0gMSkpCisgICAgeworICAgICAgICBtZW1zZXQoJnBMMl9lbnRyeS0+c2lwLCAwLCBzaXplb2YoaXBhZGRyX3QpKTsKKyAgICAgICAgbWVtc2V0KCZwTDJfZW50cnktPmRpcCwgMCwgc2l6ZW9mKGlwYWRkcl90KSk7CisgICAgICAgIHBMMl9lbnRyeS0+bWFjLm9jdGV0WzBdID0gbDJUYWJsZS5tYWMub2N0ZXRbMF07CisgICAgICAgIHBMMl9lbnRyeS0+bWFjLm9jdGV0WzFdID0gbDJUYWJsZS5tYWMub2N0ZXRbMV07CisgICAgICAgIHBMMl9lbnRyeS0+bWFjLm9jdGV0WzJdID0gbDJUYWJsZS5tYWMub2N0ZXRbMl07CisgICAgICAgIHBMMl9lbnRyeS0+bWFjLm9jdGV0WzNdID0gbDJUYWJsZS5tYWMub2N0ZXRbM107CisgICAgICAgIHBMMl9lbnRyeS0+bWFjLm9jdGV0WzRdID0gbDJUYWJsZS5tYWMub2N0ZXRbNF07CisgICAgICAgIHBMMl9lbnRyeS0+bWFjLm9jdGV0WzVdID0gbDJUYWJsZS5tYWMub2N0ZXRbNV07CisgICAgICAgIHBMMl9lbnRyeS0+aXNfaXBtdWwgID0gbDJUYWJsZS5sM2xvb2t1cDsKKyAgICAgICAgcEwyX2VudHJ5LT5pc19zdGF0aWMgPSBsMlRhYmxlLm5vc2FsZWFybjsKKworICAgICAgICAvKiBHZXQgTG9naWNhbCBwb3J0IG1hc2sgKi8KKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGtfc3dpdGNoX3BvcnRtYXNrX1AyTF9nZXQoMTw8KGwyVGFibGUuc3BhKSwgJihwTDJfZW50cnktPnBvcnRtYXNrKSkpIT1SVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIHBMMl9lbnRyeS0+aXZsICAgICAgID0gbDJUYWJsZS5pdmxfc3ZsOworICAgICAgICBwTDJfZW50cnktPmN2aWQgICAgICA9IGwyVGFibGUuY3ZpZF9maWQ7CisgICAgICAgIHBMMl9lbnRyeS0+ZmlkICAgICAgID0gbDJUYWJsZS5maWQ7CisgICAgICAgIHBMMl9lbnRyeS0+YXV0aCAgICAgID0gbDJUYWJsZS5hdXRoOworICAgICAgICBwTDJfZW50cnktPnNhX2Jsb2NrICA9IGwyVGFibGUuc2FfYmxvY2s7CisgICAgICAgIHBMMl9lbnRyeS0+YWdlICAgICAgID0gbDJUYWJsZS5hZ2U7CisgICAgICAgIHBMMl9lbnRyeS0+aXNfaXB2aWRtdWwgPSAwOworICAgICAgICBwTDJfZW50cnktPmwzX3ZpZCAgICAgID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgICAgIHJldHVybiBSVF9FUlJfTDJfRU1QVFlfRU5UUlk7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9sZWFreS5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL2xlYWt5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI3ZDUwYQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9sZWFreS5jCkBAIC0wLDAgKzEsNTkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNzYzMDYgJAorICogJERhdGU6IDIwMTctMDMtMDggMTU6MTM6NTggKzA4MDAgKOmAseS4iSwgMDgg5LiJ5pyIIDIwMTcpICQKKyAqCisgKiBQdXJwb3NlIDogUlRLIHN3aXRjaCBoaWdoLWxldmVsIEFQSSBmb3IgUlRMODM2Ny9SVEw4MzY3QworICogRmVhdHVyZSA6IEhlcmUgaXMgYSBsaXN0IG9mIGFsbCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBpbiBMZWFreSBtb2R1bGUuCisgKgorICovCisKKyNpbmNsdWRlIDxydGtfc3dpdGNoLmg+CisjaW5jbHVkZSA8cnRrX2Vycm9yLmg+CisjaW5jbHVkZSA8bGVha3kuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnYuaD4KKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2X3BvcnRJc29sYXRpb24uaD4KKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2X3JtYS5oPgorI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnZfaWdtcC5oPgorCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sZWFreV92bGFuX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBWTEFOIGxlYWt5LgorICogSW5wdXQ6CisgKiAgICAgIHR5cGUgLSBQYWNrZXQgdHlwZSBmb3IgVkxBTiBsZWFreS4KKyAqICAgICAgZW5hYmxlIC0gTGVha3kgc3RhdHVzLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiAgICAgIFJUX0VSUl9FTkFCTEUgICAgICAgLSBJbnZhbGlkIGVuYWJsZSBpbnB1dAorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgY2FuIHNldCBWTEFOIGxlYWt5IGZvciBSTUEgLElHTVAvTUxELCBDRFAsIENTU1RQLCBhbmQgTExEUCBwYWNrZXRzLgorICogICAgICBUaGUgbGVha3kgZnJhbWUgdHlwZXMgYXJlIGFzIGZvbGxvd2luZzoKKyAqICAgICAgLSBMRUFLWV9CUkdfR1JPVVAsCisgKiAgICAgIC0gTEVBS1lfRkRfUEFVU0UsCisgKiAgICAgIC0gTEVBS1lfU1BfTUNBU1QsCisgKiAgICAgIC0gTEVBS1lfMVhfUEFFLAorICogICAgICAtIExFQUtZX1VOREVGX0JSR18wNCwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9CUkdfMDUsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfQlJHXzA2LAorICogICAgICAtIExFQUtZX1VOREVGX0JSR18wNywKKyAqICAgICAgLSBMRUFLWV9QUk9WSURFUl9CUklER0VfR1JPVVBfQUREUkVTUywKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9CUkdfMDksCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfQlJHXzBBLAorICogICAgICAtIExFQUtZX1VOREVGX0JSR18wQiwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9CUkdfMEMsCisgKiAgICAgIC0gTEVBS1lfUFJPVklERVJfQlJJREdFX0dWUlBfQUREUkVTUywKKyAqICAgICAgLSBMRUFLWV84MDIxQUIsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfQlJHXzBGLAorICogICAgICAtIExFQUtZX0JSR19NTkdFTUVOVCwKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMTEsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzEyLAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xMywKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMTQsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzE1LAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xNiwKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMTcsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzE4LAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xOSwKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMUEsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzFCLAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xQywKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMUQsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzFFLAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xRiwKKyAqICAgICAgLSBMRUFLWV9HTVJQLAorICogICAgICAtIExFQUtZX0dWUlAsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yMiwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzIzLAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMjQsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yNSwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzI2LAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMjcsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yOCwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzI5LAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMkEsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yQiwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzJDLAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMkQsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yRSwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzJGLAorICogICAgICAtIExFQUtZX0lHTVAsCisgKiAgICAgIC0gTEVBS1lfSVBNVUxUSUNBU1QuCisgKiAgICAgIC0gTEVBS1lfQ0RQLAorICogICAgICAtIExFQUtZX0NTU1RQLAorICogICAgICAtIExFQUtZX0xMRFAuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2xlYWt5X3ZsYW5fc2V0KHJ0a19sZWFreV90eXBlX3QgdHlwZSwgcnRrX2VuYWJsZV90IGVuYWJsZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHBvcnQ7CisgICAgcnRsODM2N2Nfcm1hX3Qgcm1hY2ZnOworICAgIHJ0a191aW50MzIgdG1wOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmICh0eXBlID49IExFQUtZX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmIChlbmFibGUgPj0gUlRLX0VOQUJMRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZiAodHlwZSA+PSAwICYmIHR5cGUgPD0gTEVBS1lfVU5ERUZfR0FSUF8yRikKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JtYSh0eXBlLCAmcm1hY2ZnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBybWFjZmcudmxhbl9sZWFreSA9IGVuYWJsZTsKKworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSbWEodHlwZSwgJnJtYWNmZykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorICAgIGVsc2UgaWYgKExFQUtZX0lQTVVMVElDQVNUID09IHR5cGUpCisgICAgeworICAgICAgICBmb3IgKHBvcnQgPSAwOyBwb3J0IDw9IFJUS19QT1JUX0lEX01BWDsgcG9ydCsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNJcE11bHRpY2FzdFZsYW5MZWFreShwb3J0LGVuYWJsZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKExFQUtZX0lHTVAgPT0gdHlwZSkKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0lHTVBWTEFOTGVha3koZW5hYmxlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisgICAgZWxzZSBpZiAoTEVBS1lfQ0RQID09IHR5cGUpCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSbWFDZHAoJnJtYWNmZykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgcm1hY2ZnLnZsYW5fbGVha3kgPSBlbmFibGU7CisKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUm1hQ2RwKCZybWFjZmcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKyAgICBlbHNlIGlmIChMRUFLWV9DU1NUUCA9PSB0eXBlKQorICAgIHsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUm1hQ3NzdHAoJnJtYWNmZykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgcm1hY2ZnLnZsYW5fbGVha3kgPSBlbmFibGU7CisKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUm1hQ3NzdHAoJnJtYWNmZykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorICAgIGVsc2UgaWYgKExFQUtZX0xMRFAgPT0gdHlwZSkKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JtYUxsZHAoJnRtcCwmcm1hY2ZnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBybWFjZmcudmxhbl9sZWFreSA9IGVuYWJsZTsKKworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSbWFMbGRwKHRtcCwgJnJtYWNmZykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2xlYWt5X3ZsYW5fZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFZMQU4gbGVha3kuCisgKiBJbnB1dDoKKyAqICAgICAgdHlwZSAtIFBhY2tldCB0eXBlIGZvciBWTEFOIGxlYWt5LgorICogT3V0cHV0OgorICogICAgICBwRW5hYmxlIC0gTGVha3kgc3RhdHVzLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgY2FuIGdldCBWTEFOIGxlYWt5IHN0YXR1cyBmb3IgUk1BICxJR01QL01MRCwgQ0RQLCBDU1NUUCwgYW5kIExMRFAgIHBhY2tldHMuCisgKiAgICAgIFRoZSBsZWFreSBmcmFtZSB0eXBlcyBhcmUgYXMgZm9sbG93aW5nOgorICogICAgICAtIExFQUtZX0JSR19HUk9VUCwKKyAqICAgICAgLSBMRUFLWV9GRF9QQVVTRSwKKyAqICAgICAgLSBMRUFLWV9TUF9NQ0FTVCwKKyAqICAgICAgLSBMRUFLWV8xWF9QQUUsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfQlJHXzA0LAorICogICAgICAtIExFQUtZX1VOREVGX0JSR18wNSwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9CUkdfMDYsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfQlJHXzA3LAorICogICAgICAtIExFQUtZX1BST1ZJREVSX0JSSURHRV9HUk9VUF9BRERSRVNTLAorICogICAgICAtIExFQUtZX1VOREVGX0JSR18wOSwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9CUkdfMEEsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfQlJHXzBCLAorICogICAgICAtIExFQUtZX1VOREVGX0JSR18wQywKKyAqICAgICAgLSBMRUFLWV9QUk9WSURFUl9CUklER0VfR1ZSUF9BRERSRVNTLAorICogICAgICAtIExFQUtZXzgwMjFBQiwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9CUkdfMEYsCisgKiAgICAgIC0gTEVBS1lfQlJHX01OR0VNRU5ULAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xMSwKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMTIsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzEzLAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xNCwKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMTUsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzE2LAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xNywKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMTgsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzE5LAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xQSwKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMUIsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzFDLAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xRCwKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMUUsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzFGLAorICogICAgICAtIExFQUtZX0dNUlAsCisgKiAgICAgIC0gTEVBS1lfR1ZSUCwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzIyLAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMjMsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yNCwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzI1LAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMjYsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yNywKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzI4LAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMjksCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yQSwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzJCLAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMkMsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yRCwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzJFLAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMkYsCisgKiAgICAgIC0gTEVBS1lfSUdNUCwKKyAqICAgICAgLSBMRUFLWV9JUE1VTFRJQ0FTVC4KKyAqICAgICAgLSBMRUFLWV9DRFAsCisgKiAgICAgIC0gTEVBS1lfQ1NTVFAsCisgKiAgICAgIC0gTEVBS1lfTExEUC4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfbGVha3lfdmxhbl9nZXQocnRrX2xlYWt5X3R5cGVfdCB0eXBlLCBydGtfZW5hYmxlX3QgKnBFbmFibGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBwb3J0LHRtcDsKKyAgICBydGw4MzY3Y19ybWFfdCBybWFjZmc7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKHR5cGUgPj0gTEVBS1lfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYoTlVMTCA9PSBwRW5hYmxlKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICh0eXBlID49IDAgJiYgdHlwZSA8PSBMRUFLWV9VTkRFRl9HQVJQXzJGKQorICAgIHsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUm1hKHR5cGUsICZybWFjZmcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICpwRW5hYmxlID0gcm1hY2ZnLnZsYW5fbGVha3k7CisKKyAgICB9CisgICAgZWxzZSBpZiAoTEVBS1lfSVBNVUxUSUNBU1QgPT0gdHlwZSkKKyAgICB7CisgICAgICAgIGZvciAocG9ydCA9IDA7IHBvcnQgPD0gUlRLX1BPUlRfSURfTUFYOyBwb3J0KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0lwTXVsdGljYXN0VmxhbkxlYWt5KHBvcnQsICZ0bXApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIGlmIChwb3J0PjAmJih0bXAhPSpwRW5hYmxlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKKyAgICAgICAgICAgICpwRW5hYmxlID0gdG1wOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKExFQUtZX0lHTVAgPT0gdHlwZSkKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0lHTVBWTEFOTGVha3koJnRtcCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgKnBFbmFibGUgPSB0bXA7CisgICAgfQorICAgIGVsc2UgaWYgKExFQUtZX0NEUCA9PSB0eXBlKQorICAgIHsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUm1hQ2RwKCZybWFjZmcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICpwRW5hYmxlID0gcm1hY2ZnLnZsYW5fbGVha3k7CisgICAgfQorICAgIGVsc2UgaWYgKExFQUtZX0NTU1RQID09IHR5cGUpCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSbWFDc3N0cCgmcm1hY2ZnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAqcEVuYWJsZSA9IHJtYWNmZy52bGFuX2xlYWt5OworICAgIH0KKyAgICBlbHNlIGlmIChMRUFLWV9MTERQID09IHR5cGUpCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSbWFMbGRwKCZ0bXAsICZybWFjZmcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICpwRW5hYmxlID0gcm1hY2ZnLnZsYW5fbGVha3k7CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2xlYWt5X3BvcnRJc29sYXRpb25fc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHBvcnQgaXNvbGF0aW9uIGxlYWt5LgorICogSW5wdXQ6CisgKiAgICAgIHR5cGUgLSBQYWNrZXQgdHlwZSBmb3IgcG9ydCBpc29sYXRpb24gbGVha3kuCisgKiAgICAgIGVuYWJsZSAtIExlYWt5IHN0YXR1cy4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogICAgICBSVF9FUlJfRU5BQkxFICAgICAgIC0gSW52YWxpZCBlbmFibGUgaW5wdXQKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBzZXQgcG9ydCBpc29sYXRpb24gbGVha3kgZm9yIFJNQSAsSUdNUC9NTEQsIENEUCwgQ1NTVFAsIGFuZCBMTERQICBwYWNrZXRzLgorICogICAgICBUaGUgbGVha3kgZnJhbWUgdHlwZXMgYXJlIGFzIGZvbGxvd2luZzoKKyAqICAgICAgLSBMRUFLWV9CUkdfR1JPVVAsCisgKiAgICAgIC0gTEVBS1lfRkRfUEFVU0UsCisgKiAgICAgIC0gTEVBS1lfU1BfTUNBU1QsCisgKiAgICAgIC0gTEVBS1lfMVhfUEFFLAorICogICAgICAtIExFQUtZX1VOREVGX0JSR18wNCwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9CUkdfMDUsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfQlJHXzA2LAorICogICAgICAtIExFQUtZX1VOREVGX0JSR18wNywKKyAqICAgICAgLSBMRUFLWV9QUk9WSURFUl9CUklER0VfR1JPVVBfQUREUkVTUywKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9CUkdfMDksCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfQlJHXzBBLAorICogICAgICAtIExFQUtZX1VOREVGX0JSR18wQiwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9CUkdfMEMsCisgKiAgICAgIC0gTEVBS1lfUFJPVklERVJfQlJJREdFX0dWUlBfQUREUkVTUywKKyAqICAgICAgLSBMRUFLWV84MDIxQUIsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfQlJHXzBGLAorICogICAgICAtIExFQUtZX0JSR19NTkdFTUVOVCwKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMTEsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzEyLAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xMywKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMTQsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzE1LAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xNiwKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMTcsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzE4LAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xOSwKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMUEsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzFCLAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xQywKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMUQsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzFFLAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xRiwKKyAqICAgICAgLSBMRUFLWV9HTVJQLAorICogICAgICAtIExFQUtZX0dWUlAsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yMiwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzIzLAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMjQsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yNSwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzI2LAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMjcsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yOCwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzI5LAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMkEsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yQiwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzJDLAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMkQsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yRSwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzJGLAorICogICAgICAtIExFQUtZX0lHTVAsCisgKiAgICAgIC0gTEVBS1lfSVBNVUxUSUNBU1QuCisgKiAgICAgIC0gTEVBS1lfQ0RQLAorICogICAgICAtIExFQUtZX0NTU1RQLAorICogICAgICAtIExFQUtZX0xMRFAuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2xlYWt5X3BvcnRJc29sYXRpb25fc2V0KHJ0a19sZWFreV90eXBlX3QgdHlwZSwgcnRrX2VuYWJsZV90IGVuYWJsZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHBvcnQ7CisgICAgcnRsODM2N2Nfcm1hX3Qgcm1hY2ZnOworICAgIHJ0a191aW50MzIgdG1wOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmICh0eXBlID49IExFQUtZX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmIChlbmFibGUgPj0gUlRLX0VOQUJMRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZiAodHlwZSA+PSAwICYmIHR5cGUgPD0gTEVBS1lfVU5ERUZfR0FSUF8yRikKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JtYSh0eXBlLCAmcm1hY2ZnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBybWFjZmcucG9ydGlzb19sZWFreSA9IGVuYWJsZTsKKworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSbWEodHlwZSwgJnJtYWNmZykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorICAgIGVsc2UgaWYgKExFQUtZX0lQTVVMVElDQVNUID09IHR5cGUpCisgICAgeworICAgICAgICBmb3IgKHBvcnQgPSAwOyBwb3J0IDwgUlRLX01BWF9OVU1fT0ZfUE9SVDsgcG9ydCsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNJcE11bHRpY2FzdFBvcnRJc29MZWFreShwb3J0LGVuYWJsZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKExFQUtZX0lHTVAgPT0gdHlwZSkKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0lHTVBJc29MZWFreShlbmFibGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKyAgICBlbHNlIGlmIChMRUFLWV9DRFAgPT0gdHlwZSkKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JtYUNkcCgmcm1hY2ZnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBybWFjZmcucG9ydGlzb19sZWFreSA9IGVuYWJsZTsKKworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSbWFDZHAoJnJtYWNmZykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorICAgIGVsc2UgaWYgKExFQUtZX0NTU1RQID09IHR5cGUpCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSbWFDc3N0cCgmcm1hY2ZnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBybWFjZmcucG9ydGlzb19sZWFreSA9IGVuYWJsZTsKKworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSbWFDc3N0cCgmcm1hY2ZnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisgICAgZWxzZSBpZiAoTEVBS1lfTExEUCA9PSB0eXBlKQorICAgIHsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUm1hTGxkcCgmdG1wLCAmcm1hY2ZnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBybWFjZmcucG9ydGlzb19sZWFreSA9IGVuYWJsZTsKKworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSbWFMbGRwKHRtcCwgJnJtYWNmZykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2xlYWt5X3BvcnRJc29sYXRpb25fZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHBvcnQgaXNvbGF0aW9uIGxlYWt5LgorICogSW5wdXQ6CisgKiAgICAgIHR5cGUgLSBQYWNrZXQgdHlwZSBmb3IgcG9ydCBpc29sYXRpb24gbGVha3kuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBFbmFibGUgLSBMZWFreSBzdGF0dXMuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBjYW4gZ2V0IHBvcnQgaXNvbGF0aW9uIGxlYWt5IHN0YXR1cyBmb3IgUk1BICxJR01QL01MRCwgQ0RQLCBDU1NUUCwgYW5kIExMRFAgIHBhY2tldHMuCisgKiAgICAgIFRoZSBsZWFreSBmcmFtZSB0eXBlcyBhcmUgYXMgZm9sbG93aW5nOgorICogICAgICAtIExFQUtZX0JSR19HUk9VUCwKKyAqICAgICAgLSBMRUFLWV9GRF9QQVVTRSwKKyAqICAgICAgLSBMRUFLWV9TUF9NQ0FTVCwKKyAqICAgICAgLSBMRUFLWV8xWF9QQUUsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfQlJHXzA0LAorICogICAgICAtIExFQUtZX1VOREVGX0JSR18wNSwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9CUkdfMDYsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfQlJHXzA3LAorICogICAgICAtIExFQUtZX1BST1ZJREVSX0JSSURHRV9HUk9VUF9BRERSRVNTLAorICogICAgICAtIExFQUtZX1VOREVGX0JSR18wOSwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9CUkdfMEEsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfQlJHXzBCLAorICogICAgICAtIExFQUtZX1VOREVGX0JSR18wQywKKyAqICAgICAgLSBMRUFLWV9QUk9WSURFUl9CUklER0VfR1ZSUF9BRERSRVNTLAorICogICAgICAtIExFQUtZXzgwMjFBQiwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9CUkdfMEYsCisgKiAgICAgIC0gTEVBS1lfQlJHX01OR0VNRU5ULAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xMSwKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMTIsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzEzLAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xNCwKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMTUsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzE2LAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xNywKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMTgsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzE5LAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xQSwKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMUIsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzFDLAorICogICAgICAtIExFQUtZX1VOREVGSU5FRF8xRCwKKyAqICAgICAgLSBMRUFLWV9VTkRFRklORURfMUUsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZJTkVEXzFGLAorICogICAgICAtIExFQUtZX0dNUlAsCisgKiAgICAgIC0gTEVBS1lfR1ZSUCwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzIyLAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMjMsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yNCwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzI1LAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMjYsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yNywKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzI4LAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMjksCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yQSwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzJCLAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMkMsCisgKiAgICAgIC0gTEVBS1lfVU5ERUZfR0FSUF8yRCwKKyAqICAgICAgLSBMRUFLWV9VTkRFRl9HQVJQXzJFLAorICogICAgICAtIExFQUtZX1VOREVGX0dBUlBfMkYsCisgKiAgICAgIC0gTEVBS1lfSUdNUCwKKyAqICAgICAgLSBMRUFLWV9JUE1VTFRJQ0FTVC4KKyAqICAgICAgLSBMRUFLWV9DRFAsCisgKiAgICAgIC0gTEVBS1lfQ1NTVFAsCisgKiAgICAgIC0gTEVBS1lfTExEUC4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfbGVha3lfcG9ydElzb2xhdGlvbl9nZXQocnRrX2xlYWt5X3R5cGVfdCB0eXBlLCBydGtfZW5hYmxlX3QgKnBFbmFibGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBwb3J0LCB0bXA7CisgICAgcnRsODM2N2Nfcm1hX3Qgcm1hY2ZnOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmICh0eXBlID49IExFQUtZX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmKE5VTEwgPT0gcEVuYWJsZSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAodHlwZSA+PSAwICYmIHR5cGUgPD0gTEVBS1lfVU5ERUZfR0FSUF8yRikKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JtYSh0eXBlLCAmcm1hY2ZnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAqcEVuYWJsZSA9IHJtYWNmZy5wb3J0aXNvX2xlYWt5OworCisgICAgfQorICAgIGVsc2UgaWYgKExFQUtZX0lQTVVMVElDQVNUID09IHR5cGUpCisgICAgeworICAgICAgICBmb3IgKHBvcnQgPSAwOyBwb3J0IDwgUlRLX01BWF9OVU1fT0ZfUE9SVDsgcG9ydCsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNJcE11bHRpY2FzdFBvcnRJc29MZWFreShwb3J0LCAmdG1wKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICBpZiAocG9ydCA+IDAgJiYodG1wICE9ICpwRW5hYmxlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKKyAgICAgICAgICAgICpwRW5hYmxlID0gdG1wOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKExFQUtZX0lHTVAgPT0gdHlwZSkKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0lHTVBJc29MZWFreSgmdG1wKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAqcEVuYWJsZSA9IHRtcDsKKyAgICB9CisgICAgZWxzZSBpZiAoTEVBS1lfQ0RQID09IHR5cGUpCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSbWFDZHAoJnJtYWNmZykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgKnBFbmFibGUgPSBybWFjZmcucG9ydGlzb19sZWFreTsKKyAgICB9CisgICAgZWxzZSBpZiAoTEVBS1lfQ1NTVFAgPT0gdHlwZSkKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JtYUNzc3RwKCZybWFjZmcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICpwRW5hYmxlID0gcm1hY2ZnLnBvcnRpc29fbGVha3k7CisgICAgfQorICAgIGVsc2UgaWYgKExFQUtZX0xMRFAgPT0gdHlwZSkKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JtYUxsZHAoJnRtcCwgJnJtYWNmZykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgKnBFbmFibGUgPSBybWFjZmcucG9ydGlzb19sZWFreTsKKyAgICB9CisKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvbGVkLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvbGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAwYzMzMQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9sZWQuYwpAQCAtMCwwICsxLDc5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiAkUmV2aXNpb246IDc2MzA2ICQKKyAqICREYXRlOiAyMDE3LTAzLTA4IDE1OjEzOjU4ICswODAwICjpgLHkuIksIDA4IOS4ieaciCAyMDE3KSAkCisgKgorICogUHVycG9zZSA6IFJUSyBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkgZm9yIFJUTDgzNjcvUlRMODM2N0MKKyAqIEZlYXR1cmUgOiBIZXJlIGlzIGEgbGlzdCBvZiBhbGwgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgaW4gTEVEIG1vZHVsZS4KKyAqCisgKi8KKworI2luY2x1ZGUgPHJ0a19zd2l0Y2guaD4KKyNpbmNsdWRlIDxydGtfZXJyb3IuaD4KKyNpbmNsdWRlIDxsZWQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnYuaD4KKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2X2xlZC5oPgorCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sZWRfZW5hYmxlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBMZWQgZW5hYmxlIGNvbmdpdXJhdGlvbgorICogSW5wdXQ6CisgKiAgICAgIGdyb3VwICAgICAgIC0gTEVEIGdyb3VwIGlkLgorICogICAgICBwUG9ydG1hc2sgICAtIExFRCBlbmFibGUgcG9ydCBtYXNrLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiAgICAgIFJUX0VSUl9QT1JUX01BU0sgICAgLSBFcnJvciBwb3J0bWFzaworICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gYmUgdXNlZCB0byBlbmFibGUgTEVEIHBlciBwb3J0IHBlciBncm91cC4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfbGVkX2VuYWJsZV9zZXQocnRrX2xlZF9ncm91cF90IGdyb3VwLCBydGtfcG9ydG1hc2tfdCAqcFBvcnRtYXNrKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcG1hc2s7CisgICAgcnRrX3BvcnRfdCBwb3J0OworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmIChncm91cCA+PSBMRURfR1JPVVBfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgUlRLX0NIS19QT1JUTUFTS19WQUxJRChwUG9ydG1hc2spOworCisgICAgUlRLX1BPUlRNQVNLX1NDQU4oKCpwUG9ydG1hc2spLCBwb3J0KQorICAgIHsKKyAgICAgICAgaWYocnRrX3N3aXRjaF9pc0NQVVBvcnQocG9ydCkgPT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX01BU0s7CisgICAgfQorCisgICAgaWYoKHJldFZhbCA9IHJ0a19zd2l0Y2hfcG9ydG1hc2tfTDJQX2dldChwUG9ydG1hc2ssICZwbWFzaykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0xlZEdyb3VwRW5hYmxlKGdyb3VwLCBwbWFzaykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sZWRfZW5hYmxlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBMZWQgZW5hYmxlIGNvbmdpdXJhdGlvbgorICogSW5wdXQ6CisgKiAgICAgIGdyb3VwIC0gTEVEIGdyb3VwIGlkLgorICogT3V0cHV0OgorICogICAgICBwUG9ydG1hc2sgLSBMRUQgZW5hYmxlIHBvcnQgbWFzay4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGJlIHVzZWQgdG8gZ2V0IExFRCBlbmFibGUgc3RhdHVzLgorICovCitydGtfYXBpX3JldF90IHJ0a19sZWRfZW5hYmxlX2dldChydGtfbGVkX2dyb3VwX3QgZ3JvdXAsIHJ0a19wb3J0bWFza190ICpwUG9ydG1hc2spCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBwbWFzazsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAoZ3JvdXAgPj0gTEVEX0dST1VQX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0xlZEdyb3VwRW5hYmxlKGdyb3VwLCAmcG1hc2spKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZigocmV0VmFsID0gcnRrX3N3aXRjaF9wb3J0bWFza19QMkxfZ2V0KHBtYXNrLCBwUG9ydG1hc2spKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworCit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sZWRfb3BlcmF0aW9uX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBMZWQgb3BlcmF0aW9uIG1vZGUKKyAqIElucHV0OgorICogICAgICBtb2RlIC0gTEVEIG9wZXJhdGlvbiBtb2RlLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBzZXQgTGVkIG9wZXJhdGlvbiBtb2RlLgorICogICAgICBUaGUgbW9kZXMgdGhhdCBjYW4gYmUgc2V0IGFyZSBhcyBmb2xsb3dpbmc6CisgKiAgICAgIC0gTEVEX09QX1NDQU4sCisgKiAgICAgIC0gTEVEX09QX1BBUkFMTEVMLAorICogICAgICAtIExFRF9PUF9TRVJJQUwsCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2xlZF9vcGVyYXRpb25fc2V0KHJ0a19sZWRfb3BlcmF0aW9uX3QgbW9kZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHJlZ0RhdGE7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKCBtb2RlID49IExFRF9PUF9FTkQpCisgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgc3dpdGNoIChtb2RlKQorICAgIHsKKyAgICAgICAgY2FzZSBMRURfT1BfUEFSQUxMRUw6CisgICAgICAgICAgICByZWdEYXRhID0gTEVET1BfUEFSQUxMRUw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMRURfT1BfU0VSSUFMOgorICAgICAgICAgICAgcmVnRGF0YSA9IExFRE9QX1NFUklBTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9DSElQX05PVF9TVVBQT1JURUQ7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNMZWRPcGVyYXRpb25Nb2RlKHJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbGVkX29wZXJhdGlvbl9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgTGVkIG9wZXJhdGlvbiBtb2RlCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwTW9kZSAtIFN1cHBvcnQgTEVEIG9wZXJhdGlvbiBtb2RlLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IExlZCBvcGVyYXRpb24gbW9kZS4KKyAqICAgICAgVGhlIG1vZGVzIHRoYXQgY2FuIGJlIHNldCBhcmUgYXMgZm9sbG93aW5nOgorICogICAgICAtIExFRF9PUF9TQ0FOLAorICogICAgICAtIExFRF9PUF9QQVJBTExFTCwKKyAqICAgICAgLSBMRURfT1BfU0VSSUFMLAorICovCitydGtfYXBpX3JldF90IHJ0a19sZWRfb3BlcmF0aW9uX2dldChydGtfbGVkX29wZXJhdGlvbl90ICpwTW9kZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHJlZ0RhdGE7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoTlVMTCA9PSBwTW9kZSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNMZWRPcGVyYXRpb25Nb2RlKCZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKHJlZ0RhdGEgPT0gTEVET1BfU0VSSUFMKQorICAgICAgICAqcE1vZGUgPSBMRURfT1BfU0VSSUFMOworICAgIGVsc2UgaWYgKHJlZ0RhdGEgPT1MRURPUF9QQVJBTExFTCkKKyAgICAgICAgKnBNb2RlID0gTEVEX09QX1BBUkFMTEVMOworICAgIGVsc2UKKyAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sZWRfbW9kZUZvcmNlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBMZWQgZ3JvdXAgdG8gY29uZ2l1cmF0aW9uIGZvcmNlIG1vZGUKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gcG9ydCBJRAorICogICAgICBncm91cCAgIC0gU3VwcG9ydCBMRUQgZ3JvdXAgaWQuCisgKiAgICAgIG1vZGUgICAgLSBTdXBwb3J0IExFRCBmb3JjZSBtb2RlLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBFcnJvciBQb3J0IElECisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBmb3JjZSB0byBvbmUgZm9yY2UgbW9kZS4KKyAqICAgICAgVGhlIGZvcmNlIG1vZGVzIHRoYXQgY2FuIGJlIHNldCBhcmUgYXMgZm9sbG93aW5nOgorICogICAgICAtIExFRF9GT1JDRV9OT1JNQUwsCisgKiAgICAgIC0gTEVEX0ZPUkNFX0JMSU5LLAorICogICAgICAtIExFRF9GT1JDRV9PRkYsCisgKiAgICAgIC0gTEVEX0ZPUkNFX09OLgorICovCitydGtfYXBpX3JldF90IHJ0a19sZWRfbW9kZUZvcmNlX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19sZWRfZ3JvdXBfdCBncm91cCwgcnRrX2xlZF9mb3JjZV9tb2RlX3QgbW9kZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBQb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgLyogTm8gTEVEIGZvciBDUFUgcG9ydCAqLworICAgIGlmKHJ0a19zd2l0Y2hfaXNDUFVQb3J0KHBvcnQpID09IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgaWYgKGdyb3VwID49IExFRF9HUk9VUF9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZiAobW9kZSA+PSBMRURfRk9SQ0VfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX05PVF9BTExPV0VEOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljRm9yY2VMZWQocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIGdyb3VwLCBtb2RlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2xlZF9tb2RlRm9yY2VfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IExlZCBncm91cCB0byBjb25naXVyYXRpb24gZm9yY2UgbW9kZQorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgIC0gcG9ydCBJRAorICogICAgICBncm91cCAtIFN1cHBvcnQgTEVEIGdyb3VwIGlkLgorICogICAgICBwTW9kZSAtIFN1cHBvcnQgTEVEIGZvcmNlIG1vZGUuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEVycm9yIFBvcnQgSUQKKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGdldCBmb3JjZWQgTGVkIGdyb3VwIG1vZGUuCisgKiAgICAgIFRoZSBmb3JjZSBtb2RlcyB0aGF0IGNhbiBiZSBzZXQgYXJlIGFzIGZvbGxvd2luZzoKKyAqICAgICAgLSBMRURfRk9SQ0VfTk9STUFMLAorICogICAgICAtIExFRF9GT1JDRV9CTElOSywKKyAqICAgICAgLSBMRURfRk9SQ0VfT0ZGLAorICogICAgICAtIExFRF9GT1JDRV9PTi4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfbGVkX21vZGVGb3JjZV9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfbGVkX2dyb3VwX3QgZ3JvdXAsIHJ0a19sZWRfZm9yY2VfbW9kZV90ICpwTW9kZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBQb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgLyogTm8gTEVEIGZvciBDUFUgcG9ydCAqLworICAgIGlmKHJ0a19zd2l0Y2hfaXNDUFVQb3J0KHBvcnQpID09IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgaWYgKGdyb3VwID49IExFRF9HUk9VUF9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZiAoTlVMTCA9PSBwTW9kZSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNGb3JjZUxlZChydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgZ3JvdXAsIHBNb2RlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2xlZF9ibGlua1JhdGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IExFRCBibGlua2luZyByYXRlCisgKiBJbnB1dDoKKyAqICAgICAgYmxpbmtSYXRlIC0gYmxpbmtpbmcgcmF0ZS4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgQVNJQyBzdXBwb3J0IDYgdHlwZXMgb2YgTEVEIGJsaW5raW5nIHJhdGVzIGF0IDQzbXMsIDg0bXMsIDEyMG1zLCAxNzBtcywgMzQwbXMgYW5kIDY3MG1zLgorICovCitydGtfYXBpX3JldF90IHJ0a19sZWRfYmxpbmtSYXRlX3NldChydGtfbGVkX2JsaW5rX3JhdGVfdCBibGlua1JhdGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKGJsaW5rUmF0ZSA+PSBMRURfQkxJTktSQVRFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9GQUlMRUQ7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNMZWRCbGlua1JhdGUoYmxpbmtSYXRlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2xlZF9ibGlua1JhdGVfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IExFRCBibGlua2luZyByYXRlIGF0IG1vZGUgMCB0byBtb2RlIDMKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBCbGlua1JhdGUgLSBibGlua2luZyByYXRlLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhlcmUgYXJlICA2IHR5cGVzIG9mIExFRCBibGlua2luZyByYXRlcyBhdCA0M21zLCA4NG1zLCAxMjBtcywgMTcwbXMsIDM0MG1zIGFuZCA2NzBtcy4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfbGVkX2JsaW5rUmF0ZV9nZXQocnRrX2xlZF9ibGlua19yYXRlX3QgKnBCbGlua1JhdGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoTlVMTCA9PSBwQmxpbmtSYXRlKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0xlZEJsaW5rUmF0ZShwQmxpbmtSYXRlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2xlZF9ncm91cENvbmZpZ19zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgcGVyIGdyb3VwIExlZCB0byBjb25naXVyYXRpb24gbW9kZQorICogSW5wdXQ6CisgKiAgICAgIGdyb3VwICAgLSBMRUQgZ3JvdXAuCisgKiAgICAgIGNvbmZpZyAgLSBMRUQgY29uZmlndXJhdGlvbgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBzZXQgTEVEIGluZGljYXRlZCBpbmZvcm1hdGlvbiBjb25maWd1cmF0aW9uIGZvciBlYWNoIExFRCBncm91cCB3aXRoIDEgdG8gMSBsZWQgbWFwcGluZyB0byBlYWNoIHBvcnQuCisgKiAgICAgIC0gRGVmaW5pdGlvbiAgTEVEIFN0YXR1c2VzICAgICAgRGVzY3JpcHRpb24KKyAqICAgICAgLSAwMDAwICAgICAgICBMRURfT2ZmICAgICAgICAgICBMRUQgcGluIFRyaS1TdGF0ZS4KKyAqICAgICAgLSAwMDAxICAgICAgICBEdXAvQ29sICAgICAgICAgICBDb2xsaXNpb24sIEZ1bGwgZHVwbGV4IEluZGljYXRvci4KKyAqICAgICAgLSAwMDEwICAgICAgICBMaW5rL0FjdCAgICAgICAgICBMaW5rLCBBY3Rpdml0eSBJbmRpY2F0b3IuCisgKiAgICAgIC0gMDAxMSAgICAgICAgU3BkMTAwMCAgICAgICAgICAgMTAwME1iL3MgU3BlZWQgSW5kaWNhdG9yLgorICogICAgICAtIDAxMDAgICAgICAgIFNwZDEwMCAgICAgICAgICAgIDEwME1iL3MgU3BlZWQgSW5kaWNhdG9yLgorICogICAgICAtIDAxMDEgICAgICAgIFNwZDEwICAgICAgICAgICAgIDEwTWIvcyBTcGVlZCBJbmRpY2F0b3IuCisgKiAgICAgIC0gMDExMCAgICAgICAgU3BkMTAwMC9BY3QgICAgICAgMTAwME1iL3MgU3BlZWQvQWN0aXZpdHkgSW5kaWNhdG9yLgorICogICAgICAtIDAxMTEgICAgICAgIFNwZDEwMC9BY3QgICAgICAgIDEwME1iL3MgU3BlZWQvQWN0aXZpdHkgSW5kaWNhdG9yLgorICogICAgICAtIDEwMDAgICAgICAgIFNwZDEwL0FjdCAgICAgICAgIDEwTWIvcyBTcGVlZC9BY3Rpdml0eSBJbmRpY2F0b3IuCisgKiAgICAgIC0gMTAwMSAgICAgICAgU3BkMTAwICgxMCkvQWN0ICAgMTAvMTAwTWIvcyBTcGVlZC9BY3Rpdml0eSBJbmRpY2F0b3IuCisgKiAgICAgIC0gMTAxMCAgICAgICAgTG9vcERldGVjdCAgICAgICAgTG9vcERldGVjdCBJbmRpY2F0b3IuCisgKiAgICAgIC0gMTAxMSAgICAgICAgRUVFICAgICAgICAgICAgICAgRUVFIEluZGljYXRvci4KKyAqICAgICAgLSAxMTAwICAgICAgICBMaW5rL1J4ICAgICAgICAgICBMaW5rLCBBY3Rpdml0eSBJbmRpY2F0b3IuCisgKiAgICAgIC0gMTEwMSAgICAgICAgTGluay9UeCAgICAgICAgICAgTGluaywgQWN0aXZpdHkgSW5kaWNhdG9yLgorICogICAgICAtIDExMTAgICAgICAgIE1hc3RlciAgICAgICAgICAgIExpbmsgb24gTWFzdGVyIEluZGljYXRvci4KKyAqICAgICAgLSAxMTExICAgICAgICBBY3QgICAgICAgICAgICAgICBBY3Rpdml0eSBJbmRpY2F0b3IuIExvdyBmb3IgbGluayBlc3RhYmxpc2hlZC4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfbGVkX2dyb3VwQ29uZmlnX3NldChydGtfbGVkX2dyb3VwX3QgZ3JvdXAsIHJ0a19sZWRfY29uZ2lnX3QgY29uZmlnKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmIChMRURfR1JPVVBfRU5EIDw9IGdyb3VwKQorICAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKKworICAgIGlmIChMRURfQ09ORklHX0VORCA8PSBjb25maWcpCisgICAgICAgIHJldHVybiBSVF9FUlJfRkFJTEVEOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljTGVkSW5kaWNhdGVJbmZvQ29uZmlnKGdyb3VwLCBjb25maWcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbGVkX2dyb3VwQ29uZmlnX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBMZWQgZ3JvdXAgY29uZ2l1cmF0aW9uIG1vZGUKKyAqIElucHV0OgorICogICAgICBncm91cCAtIExFRCBncm91cC4KKyAqIE91dHB1dDoKKyAqICAgICAgcENvbmZpZyAtIExFRCBjb25maWd1cmF0aW9uLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgIFRoZSBBUEkgY2FuIGdldCBMRUQgaW5kaWNhdGVkIGluZm9ybWF0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIGVhY2ggTEVEIGdyb3VwLgorICovCitydGtfYXBpX3JldF90IHJ0a19sZWRfZ3JvdXBDb25maWdfZ2V0KHJ0a19sZWRfZ3JvdXBfdCBncm91cCwgcnRrX2xlZF9jb25naWdfdCAqcENvbmZpZykKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAoTEVEX0dST1VQX0VORCA8PSBncm91cCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9GQUlMRUQ7CisKKyAgICBpZihOVUxMID09IHBDb25maWcpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljTGVkSW5kaWNhdGVJbmZvQ29uZmlnKGdyb3VwLCBwQ29uZmlnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2xlZF9ncm91cEFiaWxpdHlfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQ29uZmlndXJlIHBlciBncm91cCBMZWQgYWJpbGl0eQorICogSW5wdXQ6CisgKiAgICAgIGdyb3VwICAgIC0gTEVEIGdyb3VwLgorICogICAgICBwQWJpbGl0eSAtIExFRCBhYmlsaXR5CisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIE5vbmUuCisgKi8KKworcnRrX2FwaV9yZXRfdCBydGtfbGVkX2dyb3VwQWJpbGl0eV9zZXQocnRrX2xlZF9ncm91cF90IGdyb3VwLCBydGtfbGVkX2FiaWxpdHlfdCAqcEFiaWxpdHkpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiByZWdEYXRhOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmIChMRURfR1JPVVBfRU5EIDw9IGdyb3VwKQorICAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKKworICAgIGlmKHBBYmlsaXR5ID09IE5VTEwpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYoIChwQWJpbGl0eS0+bGlua18xMG0gPj0gUlRLX0VOQUJMRV9FTkQpIHx8IChwQWJpbGl0eS0+bGlua18xMDBtID49IFJUS19FTkFCTEVfRU5EKXx8CisgICAgICAgIChwQWJpbGl0eS0+bGlua181MDBtID49IFJUS19FTkFCTEVfRU5EKSB8fCAocEFiaWxpdHktPmxpbmtfMTAwMG0gPj0gUlRLX0VOQUJMRV9FTkQpfHwKKyAgICAgICAgKHBBYmlsaXR5LT5hY3RfcnggPj0gUlRLX0VOQUJMRV9FTkQpIHx8IChwQWJpbGl0eS0+YWN0X3R4ID49IFJUS19FTkFCTEVfRU5EKSApCisgICAgeworICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworICAgIH0KKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfTEVEMF9EQVRBX0NUUkwgKyAocnRrX3VpbnQzMilncm91cCwgJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZihwQWJpbGl0eS0+bGlua18xMG0gPT0gRU5BQkxFRCkKKyAgICAgICAgcmVnRGF0YSB8PSAweDAwMDE7CisgICAgZWxzZQorICAgICAgICByZWdEYXRhICY9IH4weDAwMDE7CisKKyAgICBpZihwQWJpbGl0eS0+bGlua18xMDBtID09IEVOQUJMRUQpCisgICAgICAgIHJlZ0RhdGEgfD0gMHgwMDAyOworICAgIGVsc2UKKyAgICAgICAgcmVnRGF0YSAmPSB+MHgwMDAyOworCisgICAgaWYocEFiaWxpdHktPmxpbmtfNTAwbSA9PSBFTkFCTEVEKQorICAgICAgICByZWdEYXRhIHw9IDB4MDAwNDsKKyAgICBlbHNlCisgICAgICAgIHJlZ0RhdGEgJj0gfjB4MDAwNDsKKworICAgIGlmKHBBYmlsaXR5LT5saW5rXzEwMDBtID09IEVOQUJMRUQpCisgICAgICAgIHJlZ0RhdGEgfD0gMHgwMDA4OworICAgIGVsc2UKKyAgICAgICAgcmVnRGF0YSAmPSB+MHgwMDA4OworCisgICAgaWYocEFiaWxpdHktPmFjdF9yeCA9PSBFTkFCTEVEKQorICAgICAgICByZWdEYXRhIHw9IDB4MDAxMDsKKyAgICBlbHNlCisgICAgICAgIHJlZ0RhdGEgJj0gfjB4MDAxMDsKKworICAgIGlmKHBBYmlsaXR5LT5hY3RfdHggPT0gRU5BQkxFRCkKKyAgICAgICAgcmVnRGF0YSB8PSAweDAwMjA7CisgICAgZWxzZQorICAgICAgICByZWdEYXRhICY9IH4weDAwMjA7CisKKyAgICByZWdEYXRhIHw9ICgweDAwMDEgPDwgNik7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX0xFRDBfREFUQV9DVFJMICsgKHJ0a191aW50MzIpZ3JvdXAsIHJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbGVkX2dyb3VwQWJpbGl0eV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcGVyIGdyb3VwIExlZCBhYmlsaXR5CisgKiBJbnB1dDoKKyAqICAgICAgZ3JvdXAgICAgLSBMRUQgZ3JvdXAuCisgKiAgICAgIHBBYmlsaXR5IC0gTEVEIGFiaWxpdHkKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgTm9uZS4KKyAqLworCitydGtfYXBpX3JldF90IHJ0a19sZWRfZ3JvdXBBYmlsaXR5X2dldChydGtfbGVkX2dyb3VwX3QgZ3JvdXAsIHJ0a19sZWRfYWJpbGl0eV90ICpwQWJpbGl0eSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHJlZ0RhdGE7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKExFRF9HUk9VUF9FTkQgPD0gZ3JvdXApCisgICAgICAgIHJldHVybiBSVF9FUlJfRkFJTEVEOworCisgICAgaWYocEFiaWxpdHkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfUkVHX0xFRDBfREFUQV9DVFJMICsgKHJ0a191aW50MzIpZ3JvdXAsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcEFiaWxpdHktPmxpbmtfMTBtID0gKHJlZ0RhdGEgJiAweDAwMDEpID8gRU5BQkxFRCA6IERJU0FCTEVEOworICAgIHBBYmlsaXR5LT5saW5rXzEwMG0gPSAocmVnRGF0YSAmIDB4MDAwMikgPyBFTkFCTEVEIDogRElTQUJMRUQ7CisgICAgcEFiaWxpdHktPmxpbmtfNTAwbSA9IChyZWdEYXRhICYgMHgwMDA0KSA/IEVOQUJMRUQgOiBESVNBQkxFRDsKKyAgICBwQWJpbGl0eS0+bGlua18xMDAwbSA9IChyZWdEYXRhICYgMHgwMDA4KSA/IEVOQUJMRUQgOiBESVNBQkxFRDsKKyAgICBwQWJpbGl0eS0+YWN0X3J4ID0gKHJlZ0RhdGEgJiAweDAwMTApID8gRU5BQkxFRCA6IERJU0FCTEVEOworICAgIHBBYmlsaXR5LT5hY3RfdHggPSAocmVnRGF0YSAmIDB4MDAyMCkgPyBFTkFCTEVEIDogRElTQUJMRUQ7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sZWRfc2VyaWFsTW9kZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgTGVkIHNlcmlhbCBtb2RlIGFjdGl2ZSBjb25naXVyYXRpb24KKyAqIElucHV0OgorICogICAgICBhY3RpdmUgLSBMRUQgZ3JvdXAuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIHNldCBMRUQgc2VyaWFsIG1vZGUgYWN0aXZlIGNvbmdpdXJhdGlvbi4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfbGVkX3NlcmlhbE1vZGVfc2V0KHJ0a19sZWRfYWN0aXZlX3QgYWN0aXZlKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmICggYWN0aXZlID49IExFRF9BQ1RJVkVfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0xlZFNlcmlhbE1vZGVDb25maWcoYWN0aXZlLDEpKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2xlZF9zZXJpYWxNb2RlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBMZWQgZ3JvdXAgY29uZ2l1cmF0aW9uIG1vZGUKKyAqIElucHV0OgorICogICAgICBncm91cCAtIExFRCBncm91cC4KKyAqIE91dHB1dDoKKyAqICAgICAgcENvbmZpZyAtIExFRCBjb25maWd1cmF0aW9uLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgIFRoZSBBUEkgY2FuIGdldCBMRUQgc2VyaWFsIG1vZGUgYWN0aXZlIGNvbmZpZ3VyYXRpb24uCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2xlZF9zZXJpYWxNb2RlX2dldChydGtfbGVkX2FjdGl2ZV90ICpwQWN0aXZlKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcmVnRGF0YTsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBBY3RpdmUpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljTGVkU2VyaWFsTW9kZUNvbmZpZyhwQWN0aXZlLCZyZWdEYXRhKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sZWRfT3V0cHV0RW5hYmxlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFRoaXMgQVBJIHNldCBMRUQgSS9PIHN0YXRlLgorICogSW5wdXQ6CisgKiAgICAgIGVuYWJsZWQgICAgIC0gTEVEIEkvTyBzdGF0ZQorICogT3V0cHV0OgorICogICAgICBOb25lLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgIC0gRXJyb3IgcGFyYW1ldGVyCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBzZXQgTEVEIEkvTyBzdGF0ZS4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfbGVkX091dHB1dEVuYWJsZV9zZXQocnRrX2VuYWJsZV90IHN0YXRlKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmIChzdGF0ZSA+PSBSVEtfRU5BQkxFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0xlZE91dHB1dEVuYWJsZShzdGF0ZSkpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbGVkX091dHB1dEVuYWJsZV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBUaGlzIEFQSSBnZXQgTEVEIEkvTyBzdGF0ZS4KKyAqIElucHV0OgorICogICAgICBOb25lLgorICogT3V0cHV0OgorICogICAgICBwRW5hYmxlZCAgICAgICAgLSBMRUQgSS9PIHN0YXRlCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgLSBFcnJvciBwYXJhbWV0ZXIKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIHNldCBjdXJyZW50IExFRCBJL08gIHN0YXRlLgorICovCitydGtfYXBpX3JldF90IHJ0a19sZWRfT3V0cHV0RW5hYmxlX2dldChydGtfZW5hYmxlX3QgKnBTdGF0ZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihwU3RhdGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNMZWRPdXRwdXRFbmFibGUocFN0YXRlKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7CisKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX2xlZF9zZXJpYWxNb2RlUG9ydG1hc2tfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgVGhpcyBBUEkgY29uZmlndXJlIFNlcmlhbCBMRUQgb3V0cHV0IEdyb3VwIGFuZCBwb3J0bWFzaworICogSW5wdXQ6CisgKiAgICAgIG91dHB1dCAgICAgICAgICAtIG91dHB1dCBncm91cAorICogICAgICBwUG9ydG1hc2sgICAgICAgLSBvdXRwdXQgcG9ydG1hc2sKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAtIEVycm9yIHBhcmFtZXRlcgorICogTm90ZToKKyAqICAgICAgTm9uZS4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfbGVkX3NlcmlhbE1vZGVQb3J0bWFza19zZXQocnRrX2xlZF9zZXJpYWxPdXRwdXRfdCBvdXRwdXQsIHJ0a19wb3J0bWFza190ICpwUG9ydG1hc2spCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBwbWFzazsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihvdXRwdXQgPj0gU0VSSUFMX0xFRF9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZihwUG9ydG1hc2sgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0a19zd2l0Y2hfcG9ydG1hc2tfTDJQX2dldChwUG9ydG1hc2ssICZwbWFzaykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0xlZFNlcmlhbE91dHB1dCgocnRrX3VpbnQzMilvdXRwdXQsIHBtYXNrKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19sZWRfc2VyaWFsTW9kZVBvcnRtYXNrX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFRoaXMgQVBJIGdldCBTZXJpYWwgTEVEIG91dHB1dCBHcm91cCBhbmQgcG9ydG1hc2sKKyAqIElucHV0OgorICogICAgICBOb25lLgorICogT3V0cHV0OgorICogICAgICBwT3V0cHV0ICAgICAgICAgLSBvdXRwdXQgZ3JvdXAKKyAqICAgICAgcFBvcnRtYXNrICAgICAgIC0gb3V0cHV0IHBvcnRtYXNrCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgLSBFcnJvciBwYXJhbWV0ZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX2xlZF9zZXJpYWxNb2RlUG9ydG1hc2tfZ2V0KHJ0a19sZWRfc2VyaWFsT3V0cHV0X3QgKnBPdXRwdXQsIHJ0a19wb3J0bWFza190ICpwUG9ydG1hc2spCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBwbWFzazsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihwT3V0cHV0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYocFBvcnRtYXNrID09IE5VTEwpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljTGVkU2VyaWFsT3V0cHV0KChydGtfdWludDMyICopcE91dHB1dCwgJnBtYXNrKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmKChyZXRWYWwgPSBydGtfc3dpdGNoX3BvcnRtYXNrX1AyTF9nZXQocG1hc2ssIHBQb3J0bWFzaykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9taXJyb3IuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9taXJyb3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTIxZDFhCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL21pcnJvci5jCkBAIC0wLDAgKzEsNTQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNzYzMDYgJAorICogJERhdGU6IDIwMTctMDMtMDggMTU6MTM6NTggKzA4MDAgKOmAseS4iSwgMDgg5LiJ5pyIIDIwMTcpICQKKyAqCisgKiBQdXJwb3NlIDogUlRLIHN3aXRjaCBoaWdoLWxldmVsIEFQSSBmb3IgUlRMODM2Ny9SVEw4MzY3QworICogRmVhdHVyZSA6IEhlcmUgaXMgYSBsaXN0IG9mIGFsbCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBpbiBNaXJyb3IgbW9kdWxlLgorICoKKyAqLworCisjaW5jbHVkZSA8cnRrX3N3aXRjaC5oPgorI2luY2x1ZGUgPHJ0a19lcnJvci5oPgorI2luY2x1ZGUgPG1pcnJvci5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnYuaD4KKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2X21pcnJvci5oPgorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbWlycm9yX3BvcnRCYXNlZF9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgcG9ydCBtaXJyb3IgZnVuY3Rpb24uCisgKiBJbnB1dDoKKyAqICAgICAgbWlycm9yaW5nX3BvcnQgICAgICAgICAgLSBNb25pdG9yIHBvcnQuCisgKiAgICAgIHBNaXJyb3JlZF9yeF9wb3J0bWFzayAgIC0gUnggbWlycm9yIHBvcnQgbWFzay4KKyAqICAgICAgcE1pcnJvcmVkX3R4X3BvcnRtYXNrICAgLSBUeCBtaXJyb3IgcG9ydCBtYXNrLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiAgICAgIFJUX0VSUl9QT1JUX01BU0sgICAgLSBJbnZhbGlkIHBvcnRtYXNrLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBpcyB0byBzZXQgbWlycm9yIGZ1bmN0aW9uIG9mIHNvdXJjZSBwb3J0IGFuZCBtaXJyb3IgcG9ydC4KKyAqICAgICAgVGhlIG1pcnJvciBwb3J0IGNhbiBvbmx5IGJlIHNldCB0byBvbmUgcG9ydCBhbmQgdGhlIFRYIGFuZCBSWCBtaXJyb3IgcG9ydHMKKyAqICAgICAgc2hvdWxkIGJlIGlkZW50aWNhbC4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfbWlycm9yX3BvcnRCYXNlZF9zZXQocnRrX3BvcnRfdCBtaXJyb3JpbmdfcG9ydCwgcnRrX3BvcnRtYXNrX3QgKnBNaXJyb3JlZF9yeF9wb3J0bWFzaywgcnRrX3BvcnRtYXNrX3QgKnBNaXJyb3JlZF90eF9wb3J0bWFzaykKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfZW5hYmxlX3QgbWlyUngsIG1pclR4OworICAgIHJ0a191aW50MzIgaSwgcG1hc2s7CisgICAgcnRrX3BvcnRfdCBzb3VyY2VfcG9ydDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBwb3J0IHZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKG1pcnJvcmluZ19wb3J0KTsKKworICAgIGlmKE5VTEwgPT0gcE1pcnJvcmVkX3J4X3BvcnRtYXNrKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmKE5VTEwgPT0gcE1pcnJvcmVkX3R4X3BvcnRtYXNrKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIFJUS19DSEtfUE9SVE1BU0tfVkFMSUQocE1pcnJvcmVkX3J4X3BvcnRtYXNrKTsKKworICAgIFJUS19DSEtfUE9SVE1BU0tfVkFMSUQocE1pcnJvcmVkX3R4X3BvcnRtYXNrKTsKKworICAgIC8qTWlycm9yIFNvcmNlIFBvcnQgTWFzayBDaGVjayovCisgICAgaWYgKHBNaXJyb3JlZF90eF9wb3J0bWFzay0+Yml0c1swXSE9cE1pcnJvcmVkX3J4X3BvcnRtYXNrLT5iaXRzWzBdJiZwTWlycm9yZWRfdHhfcG9ydG1hc2stPmJpdHNbMF0hPTAmJnBNaXJyb3JlZF9yeF9wb3J0bWFzay0+Yml0c1swXSE9MCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX01BU0s7CisKKyAgICAgLyptaXJyb3IgcG9ydCAhPSBzb3VyY2UgcG9ydCovCisgICAgaWYoUlRLX1BPUlRNQVNLX0lTX1BPUlRfU0VUKCgqcE1pcnJvcmVkX3R4X3BvcnRtYXNrKSwgbWlycm9yaW5nX3BvcnQpIHx8IFJUS19QT1JUTUFTS19JU19QT1JUX1NFVCgoKnBNaXJyb3JlZF9yeF9wb3J0bWFzayksIG1pcnJvcmluZ19wb3J0KSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX01BU0s7CisKKyAgICBzb3VyY2VfcG9ydCA9IHJ0a19zd2l0Y2hfbWF4TG9naWNhbFBvcnRfZ2V0KCk7CisKKyAgICBSVEtfU0NBTl9BTExfTE9HX1BPUlQoaSkKKyAgICB7CisgICAgICAgIGlmIChwTWlycm9yZWRfdHhfcG9ydG1hc2stPmJpdHNbMF0mKDE8PGkpKQorICAgICAgICB7CisgICAgICAgICAgICBzb3VyY2VfcG9ydCA9IGk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwTWlycm9yZWRfcnhfcG9ydG1hc2stPmJpdHNbMF0mKDE8PGkpKQorICAgICAgICB7CisgICAgICAgICAgICBzb3VyY2VfcG9ydCA9IGk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BvcnRNaXJyb3IocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQoc291cmNlX3BvcnQpLCBydGtfc3dpdGNoX3BvcnRfTDJQX2dldChtaXJyb3JpbmdfcG9ydCkpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgaWYocE1pcnJvcmVkX3J4X3BvcnRtYXNrLT5iaXRzWzBdICE9IDApCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0a19zd2l0Y2hfcG9ydG1hc2tfTDJQX2dldChwTWlycm9yZWRfcnhfcG9ydG1hc2ssICZwbWFzaykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BvcnRNaXJyb3JNYXNrKHBtYXNrKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGtfc3dpdGNoX3BvcnRtYXNrX0wyUF9nZXQocE1pcnJvcmVkX3R4X3BvcnRtYXNrLCAmcG1hc2spKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQb3J0TWlycm9yTWFzayhwbWFzaykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorCisKKyAgICBpZiAocE1pcnJvcmVkX3J4X3BvcnRtYXNrLT5iaXRzWzBdKQorICAgICAgICBtaXJSeCA9IEVOQUJMRUQ7CisgICAgZWxzZQorICAgICAgICBtaXJSeCA9IERJU0FCTEVEOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUG9ydE1pcnJvclJ4RnVuY3Rpb24obWlyUngpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAocE1pcnJvcmVkX3R4X3BvcnRtYXNrLT5iaXRzWzBdKQorICAgICAgICBtaXJUeCA9IEVOQUJMRUQ7CisgICAgZWxzZQorICAgICAgICBtaXJUeCA9IERJU0FCTEVEOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUG9ydE1pcnJvclR4RnVuY3Rpb24obWlyVHgpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworCit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19taXJyb3JfcG9ydEJhc2VkX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwb3J0IG1pcnJvciBmdW5jdGlvbi4KKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBNaXJyb3JpbmdfcG9ydCAgICAgICAgIC0gTW9uaXRvciBwb3J0LgorICogICAgICBwTWlycm9yZWRfcnhfcG9ydG1hc2sgICAtIFJ4IG1pcnJvciBwb3J0IG1hc2suCisgKiAgICAgIHBNaXJyb3JlZF90eF9wb3J0bWFzayAgIC0gVHggbWlycm9yIHBvcnQgbWFzay4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgaXMgdG8gZ2V0IG1pcnJvciBmdW5jdGlvbiBvZiBzb3VyY2UgcG9ydCBhbmQgbWlycm9yIHBvcnQuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX21pcnJvcl9wb3J0QmFzZWRfZ2V0KHJ0a19wb3J0X3QgKnBNaXJyb3JpbmdfcG9ydCwgcnRrX3BvcnRtYXNrX3QgKnBNaXJyb3JlZF9yeF9wb3J0bWFzaywgcnRrX3BvcnRtYXNrX3QgKnBNaXJyb3JlZF90eF9wb3J0bWFzaykKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfcG9ydF90IHNvdXJjZV9wb3J0OworICAgIHJ0a19lbmFibGVfdCBtaXJSeCwgbWlyVHg7CisgICAgcnRrX3VpbnQzMiBzcG9ydCwgbXBvcnQsIHBtYXNrOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKE5VTEwgPT0gcE1pcnJvcmVkX3J4X3BvcnRtYXNrKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmKE5VTEwgPT0gcE1pcnJvcmVkX3R4X3BvcnRtYXNrKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmKE5VTEwgPT0gcE1pcnJvcmluZ19wb3J0KQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BvcnRNaXJyb3IoJnNwb3J0LCAmbXBvcnQpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgc291cmNlX3BvcnQgPSBydGtfc3dpdGNoX3BvcnRfUDJMX2dldChzcG9ydCk7CisgICAgKnBNaXJyb3JpbmdfcG9ydCA9IHJ0a19zd2l0Y2hfcG9ydF9QMkxfZ2V0KG1wb3J0KTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BvcnRNaXJyb3JSeEZ1bmN0aW9uKChydGtfdWludDMyKikmbWlyUngpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQb3J0TWlycm9yVHhGdW5jdGlvbigocnRrX3VpbnQzMiopJm1pclR4KSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUG9ydE1pcnJvck1hc2soJnBtYXNrKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKERJU0FCTEVEID09IG1pclJ4KQorICAgICAgICBwTWlycm9yZWRfcnhfcG9ydG1hc2stPmJpdHNbMF09MDsKKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0a19zd2l0Y2hfcG9ydG1hc2tfUDJMX2dldChwbWFzaywgcE1pcnJvcmVkX3J4X3BvcnRtYXNrKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgcE1pcnJvcmVkX3J4X3BvcnRtYXNrLT5iaXRzWzBdIHw9IDE8PHNvdXJjZV9wb3J0OworICAgIH0KKworICAgICBpZiAoRElTQUJMRUQgPT0gbWlyVHgpCisgICAgICAgIHBNaXJyb3JlZF90eF9wb3J0bWFzay0+Yml0c1swXT0wOworICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRrX3N3aXRjaF9wb3J0bWFza19QMkxfZ2V0KHBtYXNrLCBwTWlycm9yZWRfdHhfcG9ydG1hc2spKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICBwTWlycm9yZWRfdHhfcG9ydG1hc2stPmJpdHNbMF0gfD0gMTw8c291cmNlX3BvcnQ7CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKKworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbWlycm9yX3BvcnRJc29fc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IG1pcnJvciBwb3J0IGlzb2xhdGlvbi4KKyAqIElucHV0OgorICogICAgICBlbmFibGUgfE1pcnJvciBpc29sYXRpb24gc3RhdHVzLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9FTkFCTEUgICAgICAgLSBJbnZhbGlkIGVuYWJsZSBpbnB1dAorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBpcyB0byBzZXQgbWlycm9yIGlzb2xhdGlvbiBmdW5jdGlvbiB0aGF0IHByZXZlbnQgbm9ybWFsIGZvcndhcmRpbmcgcGFja2V0cyB0byBtaXJvciBwb3J0LgorICovCitydGtfYXBpX3JldF90IHJ0a19taXJyb3JfcG9ydElzb19zZXQocnRrX2VuYWJsZV90IGVuYWJsZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAoZW5hYmxlID49IFJUS19FTkFCTEVfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0VOQUJMRTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BvcnRNaXJyb3JJc29sYXRpb24oZW5hYmxlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX21pcnJvcl9wb3J0SXNvX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBtaXJyb3IgcG9ydCBpc29sYXRpb24uCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwRW5hYmxlIHxNaXJyb3IgaXNvbGF0aW9uIHN0YXR1cy4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgaXMgdG8gZ2V0IG1pcnJvciBpc29sYXRpb24gc3RhdHVzLgorICovCitydGtfYXBpX3JldF90IHJ0a19taXJyb3JfcG9ydElzb19nZXQocnRrX2VuYWJsZV90ICpwRW5hYmxlKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKE5VTEwgPT0gcEVuYWJsZSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQb3J0TWlycm9ySXNvbGF0aW9uKHBFbmFibGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbWlycm9yX3ZsYW5MZWFreV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgbWlycm9yIFZMQU4gbGVha3kuCisgKiBJbnB1dDoKKyAqICAgICAgdHhlbmFibGUgLVRYIGxlYWt5IGVuYWJsZS4KKyAqICAgICAgcnhlbmFibGUgLSBSWCBsZWFreSBlbmFibGUuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0VOQUJMRSAgICAgICAtIEludmFsaWQgZW5hYmxlIGlucHV0CisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGlzIHRvIHNldCBtaXJyb3IgVkxBTiBsZWFreSBmdW5jdGlvbiBmb3J3YXJkaW5nIHBhY2tldHMgdG8gbWlyb3IgcG9ydC4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfbWlycm9yX3ZsYW5MZWFreV9zZXQocnRrX2VuYWJsZV90IHR4ZW5hYmxlLCBydGtfZW5hYmxlX3QgcnhlbmFibGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKCh0eGVuYWJsZSA+PSBSVEtfRU5BQkxFX0VORCkgfHwocnhlbmFibGUgPj0gUlRLX0VOQUJMRV9FTkQpKQorICAgICAgICByZXR1cm4gUlRfRVJSX0VOQUJMRTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BvcnRNaXJyb3JWbGFuVHhMZWFreSh0eGVuYWJsZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BvcnRNaXJyb3JWbGFuUnhMZWFreShyeGVuYWJsZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19taXJyb3JfdmxhbkxlYWt5X2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBtaXJyb3IgVkxBTiBsZWFreS4KKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBUeGVuYWJsZSAtIFRYIGxlYWt5IGVuYWJsZS4KKyAqICAgICAgcFJ4ZW5hYmxlIC0gUlggbGVha3kgZW5hYmxlLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBpcyB0byBnZXQgbWlycm9yIFZMQU4gbGVha3kgc3RhdHVzLgorICovCitydGtfYXBpX3JldF90IHJ0a19taXJyb3JfdmxhbkxlYWt5X2dldChydGtfZW5hYmxlX3QgKnBUeGVuYWJsZSwgcnRrX2VuYWJsZV90ICpwUnhlbmFibGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoIChOVUxMID09IHBUeGVuYWJsZSkgfHwgKE5VTEwgPT0gcFJ4ZW5hYmxlKSApCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUG9ydE1pcnJvclZsYW5UeExlYWt5KHBUeGVuYWJsZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BvcnRNaXJyb3JWbGFuUnhMZWFreShwUnhlbmFibGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbWlycm9yX2lzb2xhdGlvbkxlYWt5X3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBtaXJyb3IgSXNvbGF0aW9uIGxlYWt5LgorICogSW5wdXQ6CisgKiAgICAgIHR4ZW5hYmxlIC1UWCBsZWFreSBlbmFibGUuCisgKiAgICAgIHJ4ZW5hYmxlIC0gUlggbGVha3kgZW5hYmxlLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9FTkFCTEUgICAgICAgLSBJbnZhbGlkIGVuYWJsZSBpbnB1dAorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBpcyB0byBzZXQgbWlycm9yIFZMQU4gbGVha3kgZnVuY3Rpb24gZm9yd2FyZGluZyBwYWNrZXRzIHRvIG1pcm9yIHBvcnQuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX21pcnJvcl9pc29sYXRpb25MZWFreV9zZXQocnRrX2VuYWJsZV90IHR4ZW5hYmxlLCBydGtfZW5hYmxlX3QgcnhlbmFibGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKCh0eGVuYWJsZSA+PSBSVEtfRU5BQkxFX0VORCkgfHwocnhlbmFibGUgPj0gUlRLX0VOQUJMRV9FTkQpKQorICAgICAgICByZXR1cm4gUlRfRVJSX0VOQUJMRTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BvcnRNaXJyb3JJc29sYXRpb25UeExlYWt5KHR4ZW5hYmxlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUG9ydE1pcnJvcklzb2xhdGlvblJ4TGVha3kocnhlbmFibGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfbWlycm9yX2lzb2xhdGlvbkxlYWt5X2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBtaXJyb3IgaXNvbGF0aW9uIGxlYWt5LgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcFR4ZW5hYmxlIC0gVFggbGVha3kgZW5hYmxlLgorICogICAgICBwUnhlbmFibGUgLSBSWCBsZWFreSBlbmFibGUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGlzIHRvIGdldCBtaXJyb3IgaXNvbGF0aW9uIGxlYWt5IHN0YXR1cy4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfbWlycm9yX2lzb2xhdGlvbkxlYWt5X2dldChydGtfZW5hYmxlX3QgKnBUeGVuYWJsZSwgcnRrX2VuYWJsZV90ICpwUnhlbmFibGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoIChOVUxMID09IHBUeGVuYWJsZSkgfHwgKE5VTEwgPT0gcFJ4ZW5hYmxlKSApCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUG9ydE1pcnJvcklzb2xhdGlvblR4TGVha3kocFR4ZW5hYmxlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUG9ydE1pcnJvcklzb2xhdGlvblJ4TGVha3kocFJ4ZW5hYmxlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX21pcnJvcl9rZWVwX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBtaXJyb3IgcGFja2V0IGZvcm1hdCBrZWVwLgorICogSW5wdXQ6CisgKiAgICAgIG1vZGUgLSAtbWlycm9yIGtlZXAgbW9kZS4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfRU5BQkxFICAgICAgIC0gSW52YWxpZCBlbmFibGUgaW5wdXQKKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgaXMgdG8gc2V0ICAtbWlycm9yIGtlZXAgbW9kZS4KKyAqICAgICAgVGhlIG1pcnJvciBrZWVwIG1vZGUgaXMgYXMgZm9sbG93aW5nOgorICogICAgICAtIE1JUlJPUl9GT0xMT1dfVkxBTgorICogICAgICAtIE1JUlJPUl9LRUVQX09SSUdJTkFMCisgKiAgICAgIC0gTUlSUk9SX0tFRVBfRU5ECisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX21pcnJvcl9rZWVwX3NldChydGtfbWlycm9yX2tlZXBfdCBtb2RlKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmIChtb2RlID49IE1JUlJPUl9LRUVQX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9FTkFCTEU7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQb3J0TWlycm9yUmVhbEtlZXAobW9kZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19taXJyb3Jfa2VlcF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgbWlycm9yIHBhY2tldCBmb3JtYXQga2VlcC4KKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBNb2RlIC1taXJyb3Iga2VlcCBtb2RlLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBpcyB0byBnZXQgbWlycm9yIGtlZXAgbW9kZS4KKyAgKiAgICAgIFRoZSBtaXJyb3Iga2VlcCBtb2RlIGlzIGFzIGZvbGxvd2luZzoKKyAqICAgICAgLSBNSVJST1JfRk9MTE9XX1ZMQU4KKyAqICAgICAgLSBNSVJST1JfS0VFUF9PUklHSU5BTAorICogICAgICAtIE1JUlJPUl9LRUVQX0VORAorICovCitydGtfYXBpX3JldF90IHJ0a19taXJyb3Jfa2VlcF9nZXQocnRrX21pcnJvcl9rZWVwX3QgKnBNb2RlKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKE5VTEwgPT0gcE1vZGUpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUG9ydE1pcnJvclJlYWxLZWVwKHBNb2RlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX21pcnJvcl9vdmVycmlkZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgcG9ydCBtaXJyb3Igb3ZlcnJpZGUgZnVuY3Rpb24uCisgKiBJbnB1dDoKKyAqICAgICAgcnhNaXJyb3IgICAgICAgIC0gMTogb3V0cHV0IG1pcnJvcmVkIHBhY2tldCwgMDogb3V0cHV0IG5vcm1hbCBmb3J3YXJkIHBhY2tldAorICogICAgICB0eE1pcnJvciAgICAgICAgLSAxOiBvdXRwdXQgbWlycm9yZWQgcGFja2V0LCAwOiBvdXRwdXQgbm9ybWFsIGZvcndhcmQgcGFja2V0CisgKiAgICAgIGFjbE1pcnJvciAgICAgICAtIDE6IG91dHB1dCBtaXJyb3JlZCBwYWNrZXQsIDA6IG91dHB1dCBub3JtYWwgZm9yd2FyZCBwYWNrZXQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBpcyB0byBzZXQgbWlycm9yIG92ZXJyaWRlIGZ1bmN0aW9uLgorICogICAgICBUaGlzIGZ1bmN0aW9uIGNvbnRyb2wgdGhlIG91dHB1dCBmb3JtYXQgd2hlbiBhIHBvcnQgb3V0cHV0CisgKiAgICAgIG5vcm1hbCBmb3J3YXJkICYgbWlycm9yZWQgcGFja2V0IGF0IHRoZSBzYW1lIHRpbWUuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX21pcnJvcl9vdmVycmlkZV9zZXQocnRrX2VuYWJsZV90IHJ4TWlycm9yLCBydGtfZW5hYmxlX3QgdHhNaXJyb3IsIHJ0a19lbmFibGVfdCBhY2xNaXJyb3IpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICBpZiggKHJ4TWlycm9yID49IFJUS19FTkFCTEVfRU5EKSB8fCAodHhNaXJyb3IgPj0gUlRLX0VOQUJMRV9FTkQpIHx8IChhY2xNaXJyb3IgPj0gUlRLX0VOQUJMRV9FTkQpKQorICAgICAgICByZXR1cm4gUlRfRVJSX0VOQUJMRTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BvcnRNaXJyb3JPdmVycmlkZSgocnRrX3VpbnQzMilyeE1pcnJvciwgKHJ0a191aW50MzIpdHhNaXJyb3IsIChydGtfdWludDMyKWFjbE1pcnJvcikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19taXJyb3Jfb3ZlcnJpZGVfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHBvcnQgbWlycm9yIG92ZXJyaWRlIGZ1bmN0aW9uLgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcFJ4TWlycm9yICAgICAgIC0gMTogb3V0cHV0IG1pcnJvcmVkIHBhY2tldCwgMDogb3V0cHV0IG5vcm1hbCBmb3J3YXJkIHBhY2tldAorICogICAgICBwVHhNaXJyb3IgICAgICAgLSAxOiBvdXRwdXQgbWlycm9yZWQgcGFja2V0LCAwOiBvdXRwdXQgbm9ybWFsIGZvcndhcmQgcGFja2V0CisgKiAgICAgIHBBY2xNaXJyb3IgICAgICAtIDE6IG91dHB1dCBtaXJyb3JlZCBwYWNrZXQsIDA6IG91dHB1dCBub3JtYWwgZm9yd2FyZCBwYWNrZXQKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAtIE51bGwgUG9pbnRlcgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBpcyB0byBHZXQgbWlycm9yIG92ZXJyaWRlIGZ1bmN0aW9uLgorICogICAgICBUaGlzIGZ1bmN0aW9uIGNvbnRyb2wgdGhlIG91dHB1dCBmb3JtYXQgd2hlbiBhIHBvcnQgb3V0cHV0CisgKiAgICAgIG5vcm1hbCBmb3J3YXJkICYgbWlycm9yZWQgcGFja2V0IGF0IHRoZSBzYW1lIHRpbWUuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX21pcnJvcl9vdmVycmlkZV9nZXQocnRrX2VuYWJsZV90ICpwUnhNaXJyb3IsIHJ0a19lbmFibGVfdCAqcFR4TWlycm9yLCBydGtfZW5hYmxlX3QgKnBBY2xNaXJyb3IpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICBpZiggKHBSeE1pcnJvciA9PSBOVUxMKSB8fCAocFR4TWlycm9yID09IE5VTEwpIHx8IChwQWNsTWlycm9yID09IE5VTEwpKQorICAgICAgICByZXR1cm4gUlRfRVJSX0VOQUJMRTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BvcnRNaXJyb3JPdmVycmlkZSgocnRrX3VpbnQzMiAqKXBSeE1pcnJvciwgKHJ0a191aW50MzIgKilwVHhNaXJyb3IsIChydGtfdWludDMyICopcEFjbE1pcnJvcikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2Mvb2FtLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2Mvb2FtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMxNTU5YQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9vYW0uYwpAQCAtMCwwICsxLDI0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiAkUmV2aXNpb246IDc2MzA2ICQKKyAqICREYXRlOiAyMDE3LTAzLTA4IDE1OjEzOjU4ICswODAwICjpgLHkuIksIDA4IOS4ieaciCAyMDE3KSAkCisgKgorICogUHVycG9zZSA6IFJUSyBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkgZm9yIFJUTDgzNjcvUlRMODM2N0MKKyAqIEZlYXR1cmUgOiBIZXJlIGlzIGEgbGlzdCBvZiBhbGwgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgaW4gT0FNKDgwMi4zYWgpICBtb2R1bGUuCisgKgorICovCisKKyNpbmNsdWRlIDxydGtfc3dpdGNoLmg+CisjaW5jbHVkZSA8cnRrX2Vycm9yLmg+CisjaW5jbHVkZSA8b2FtLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2Lmg+CisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl9vYW0uaD4KKworCisvKiBNb2R1bGUgTmFtZSA6IE9BTSAqLworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfb2FtX2luaXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBJbml0aWFsaXplIG9hbSBtb2R1bGUuCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiBOb3RlOgorICogICAgICBNdXN0IGluaXRpYWxpemUgb2FtIG1vZHVsZSBiZWZvcmUgY2FsbGluZyBhbnkgb2FtIEFQSXMuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX29hbV9pbml0KHZvaWQpCit7CisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30gLyogZW5kIG9mIHJ0a19vYW1faW5pdCAqLworCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19vYW1fc3RhdGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgVGhpcyBBUEkgc2V0IE9BTSBzdGF0ZS4KKyAqIElucHV0OgorICogICAgICBlbmFibGVkICAgICAtT0FNc3RhdGUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAtIEVycm9yIHBhcmFtZXRlcgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgc2V0IE9BTSBzdGF0ZS4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfb2FtX3N0YXRlX3NldChydGtfZW5hYmxlX3QgZW5hYmxlZCkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAoZW5hYmxlZCA+PSBSVEtfRU5BQkxFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY09hbUVuYWJsZShlbmFibGVkKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19vYW1fc3RhdGVfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgVGhpcyBBUEkgZ2V0IE9BTSBzdGF0ZS4KKyAqIElucHV0OgorICogICAgICBOb25lLgorICogT3V0cHV0OgorICogICAgICBwRW5hYmxlZCAgICAgICAgLSBIL1cgSUdNUCBzdGF0ZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgIC0gRXJyb3IgcGFyYW1ldGVyCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBzZXQgY3VycmVudCBPQU0gc3RhdGUuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX29hbV9zdGF0ZV9nZXQocnRrX2VuYWJsZV90ICpwRW5hYmxlZCkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNPYW1FbmFibGUocEVuYWJsZWQpKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19vYW1fcGFyc2VyQWN0aW9uX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBPQU0gcGFyc2VyIGFjdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBwb3J0IGlkCisgKiAgICAgIGFjdGlvbiAgLSBwYXJzZXIgYWN0aW9uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIGludmFsaWQgcG9ydCBpZAorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCitydGtfYXBpX3JldF90ICBydGtfb2FtX3BhcnNlckFjdGlvbl9zZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfb2FtX3BhcnNlcl9hY3RfdCBhY3Rpb24pCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgUG9ydCBWYWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwb3J0KTsKKworICAgIGlmIChhY3Rpb24gPj0gT0FNX1BBUlNFUl9BQ1RJT05fRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljT2FtUGFyc2VyKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCBhY3Rpb24pKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX29hbV9wYXJzZXJBY3Rpb25fc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IE9BTSBwYXJzZXIgYWN0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIHBvcnQgaWQKKyAqIE91dHB1dDoKKyAqICAgICAgcEFjdGlvbiAgLSBwYXJzZXIgYWN0aW9uCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBpbnZhbGlkIHBvcnQgaWQKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcnRrX2FwaV9yZXRfdCAgcnRrX29hbV9wYXJzZXJBY3Rpb25fZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX29hbV9wYXJzZXJfYWN0X3QgKnBBY3Rpb24pCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgUG9ydCBWYWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwb3J0KTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY09hbVBhcnNlcihydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgcEFjdGlvbikpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19vYW1fbXVsdGlwbGV4ZXJBY3Rpb25fc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IE9BTSBtdWx0aXBsZXhlciBhY3Rpb24KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gcG9ydCBpZAorICogICAgICBhY3Rpb24gIC0gcGFyc2VyIGFjdGlvbgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBpbnZhbGlkIHBvcnQgaWQKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcnRrX2FwaV9yZXRfdCAgcnRrX29hbV9tdWx0aXBsZXhlckFjdGlvbl9zZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfb2FtX211bHRpcGxleGVyX2FjdF90IGFjdGlvbikKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBQb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgaWYgKGFjdGlvbiA+PSBPQU1fTVVMVElQTEVYRVJfQUNUSU9OX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY09hbU11bHRpcGxleGVyKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCBhY3Rpb24pKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX29hbV9wYXJzZXJBY3Rpb25fc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IE9BTSBtdWx0aXBsZXhlciBhY3Rpb24KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gcG9ydCBpZAorICogT3V0cHV0OgorICogICAgICBwQWN0aW9uICAtIHBhcnNlciBhY3Rpb24KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIGludmFsaWQgcG9ydCBpZAorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCitydGtfYXBpX3JldF90ICBydGtfb2FtX211bHRpcGxleGVyQWN0aW9uX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19vYW1fbXVsdGlwbGV4ZXJfYWN0X3QgKnBBY3Rpb24pCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgUG9ydCBWYWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwb3J0KTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY09hbU11bHRpcGxleGVyKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCBwQWN0aW9uKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3BvcnQuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9wb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY5OWQxYgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9wb3J0LmMKQEAgLTAsMCArMSwyNDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNzYzMDYgJAorICogJERhdGU6IDIwMTctMDMtMDggMTU6MTM6NTggKzA4MDAgKOmAseS4iSwgMDgg5LiJ5pyIIDIwMTcpICQKKyAqCisgKiBQdXJwb3NlIDogUlRLIHN3aXRjaCBoaWdoLWxldmVsIEFQSSBmb3IgUlRMODM2Ny9SVEw4MzY3QworICogRmVhdHVyZSA6IEhlcmUgaXMgYSBsaXN0IG9mIGFsbCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBpbiBQb3J0IG1vZHVsZS4KKyAqCisgKi8KKworI2luY2x1ZGUgPHJ0a19zd2l0Y2guaD4KKyNpbmNsdWRlIDxydGtfZXJyb3IuaD4KKyNpbmNsdWRlIDxwb3J0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2Lmg+CisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl9wb3J0Lmg+CisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl9taXNjLmg+CisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl9wb3J0SXNvbGF0aW9uLmg+CisKKyNkZWZpbmUgRklCRVJfSU5JVF9TSVpFIDE1MDcKK0NPTlNUX1QgcnRrX3VpbnQ4IEZpYmVyW0ZJQkVSX0lOSVRfU0laRV0gPSB7CisweDAyLDB4MDQsMHg0MSwweEU0LDB4RjUsMHhBOCwweEQyLDB4QUYsCisweDIyLDB4MDAsMHgwMCwweDAyLDB4MDUsMHgyRCwweEU0LDB4OTAsCisweDA2LDB4MkEsMHhGMCwweEZELDB4N0MsMHgwMSwweDdGLDB4M0YsCisweDdFLDB4MUQsMHgxMiwweDA1LDB4QUYsMHg3RCwweDQwLDB4MTIsCisweDAyLDB4NUYsMHhFNCwweEZGLDB4RkUsMHhGRCwweDgwLDB4MDgsCisweDEyLDB4MDUsMHg5RSwweDUwLDB4MEMsMHgxMiwweDA1LDB4OEIsCisweEZDLDB4OTAsMHgwNiwweDI0LDB4MTIsMHgwMywweDc2LDB4ODAsCisweEVGLDB4RTQsMHhGNSwweEE4LDB4RDIsMHhBRiwweDdELDB4MUYsCisweEZDLDB4N0YsMHg0OSwweDdFLDB4MTMsMHgxMiwweDA1LDB4QUYsCisweDEyLDB4MDUsMHhENiwweDdELDB4RDcsMHgxMiwweDAyLDB4MUUsCisweDdELDB4ODAsMHgxMiwweDAxLDB4Q0EsMHg3RCwweDk0LDB4N0MsCisweEY5LDB4MTIsMHgwMiwweDNCLDB4N0QsMHg4MSwweDEyLDB4MDEsCisweENBLDB4N0QsMHhBMiwweDdDLDB4MzEsMHgxMiwweDAyLDB4M0IsCisweDdELDB4ODIsMHgxMiwweDAxLDB4REYsMHg3RCwweDYwLDB4N0MsCisweDY5LDB4MTIsMHgwMiwweDQzLDB4N0QsMHg4MywweDEyLDB4MDEsCisweERGLDB4N0QsMHgyOCwweDdDLDB4OTcsMHgxMiwweDAyLDB4NDMsCisweDdELDB4ODQsMHgxMiwweDAxLDB4RjQsMHg3RCwweDg1LDB4N0MsCisweDlELDB4MTIsMHgwMiwweDU3LDB4N0QsMHgyMywweDEyLDB4MDEsCisweEY0LDB4N0QsMHgxMCwweDdDLDB4RDgsMHgxMiwweDAyLDB4NTcsCisweDdELDB4MjQsMHg3QywweDA0LDB4MTIsMHgwMiwweDI4LDB4N0QsCisweDAwLDB4MTIsMHgwMiwweDFFLDB4N0QsMHgyRiwweDEyLDB4MDIsCisweDA5LDB4N0QsMHgyMCwweDdDLDB4MEYsMHg3RiwweDAyLDB4N0UsCisweDY2LDB4MTIsMHgwNSwweEFGLDB4N0QsMHgwMSwweDEyLDB4MDIsCisweDA5LDB4N0QsMHgwNCwweDdDLDB4MDAsMHg3RiwweDAxLDB4N0UsCisweDY2LDB4MTIsMHgwNSwweEFGLDB4N0QsMHg4MCwweDdDLDB4MDAsCisweDdGLDB4MDAsMHg3RSwweDY2LDB4MTIsMHgwNSwweEFGLDB4N0YsCisweDAyLDB4N0UsMHg2NiwweDEyLDB4MDIsMHg0QiwweDQ0LDB4MDIsCisweEZGLDB4OTAsMHgwNiwweDI4LDB4RUUsMHhGMCwweEEzLDB4RUYsCisweEYwLDB4NDQsMHgwNCwweEZGLDB4OTAsMHgwNiwweDI4LDB4RUUsCisweEYwLDB4RkMsMHhBMywweEVGLDB4RjAsMHhGRCwweDdGLDB4MDIsCisweDdFLDB4NjYsMHgxMiwweDA1LDB4QUYsMHg3RCwweDA0LDB4N0MsCisweDAwLDB4MTIsMHgwMiwweDI4LDB4N0QsMHhCOSwweDdDLDB4MTUsCisweDdGLDB4RUIsMHg3RSwweDEzLDB4MTIsMHgwNSwweEFGLDB4N0QsCisweDA3LDB4N0MsMHgwMCwweDdGLDB4RTcsMHg3RSwweDEzLDB4MTIsCisweDA1LDB4QUYsMHg3RCwweDQwLDB4N0MsMHgxMSwweDdGLDB4MDAsCisweDdFLDB4NjIsMHgxMiwweDA1LDB4QUYsMHgxMiwweDAzLDB4ODIsCisweDdELDB4NDEsMHgxMiwweDAyLDB4NUYsMHhFNCwweEZGLDB4RkUsCisweEZELDB4ODAsMHgwOCwweDEyLDB4MDUsMHg5RSwweDUwLDB4MEMsCisweDEyLDB4MDUsMHg4QiwweEZDLDB4OTAsMHgwNiwweDI0LDB4MTIsCisweDAzLDB4NzYsMHg4MCwweEVGLDB4QzIsMHgwMCwweEMyLDB4MDEsCisweEQyLDB4QTksMHhEMiwweDhDLDB4N0YsMHgwMSwweDdFLDB4NjIsCisweDEyLDB4MDIsMHg0QiwweDMwLDB4RTIsMHgwNSwweEU0LDB4QTMsCisweEYwLDB4ODAsMHhGMSwweDkwLDB4MDYsMHgyQSwweEUwLDB4NzAsCisweDEyLDB4MTIsMHgwMSwweDg5LDB4OTAsMHgwNiwweDJBLDB4NzQsCisweDAxLDB4RjAsMHhFNCwweDkwLDB4MDYsMHgyRCwweEYwLDB4QTMsCisweEYwLDB4ODAsMHhEOSwweEMzLDB4OTAsMHgwNiwweDJFLDB4RTAsCisweDk0LDB4NjQsMHg5MCwweDA2LDB4MkQsMHhFMCwweDk0LDB4MDAsCisweDQwLDB4Q0EsMHhFNCwweEYwLDB4QTMsMHhGMCwweDEyLDB4MDEsCisweDg5LDB4OTAsMHgwNiwweDJBLDB4NzQsMHgwMSwweEYwLDB4ODAsCisweEJCLDB4N0QsMHgwNCwweEZDLDB4N0YsMHgwMiwweDdFLDB4NjYsCisweDEyLDB4MDUsMHhBRiwweDdELDB4MDAsMHg3QywweDA0LDB4N0YsCisweDAxLDB4N0UsMHg2NiwweDEyLDB4MDUsMHhBRiwweDdELDB4QzAsCisweDdDLDB4MDAsMHg3RiwweDAwLDB4N0UsMHg2NiwweDEyLDB4MDUsCisweEFGLDB4RTQsMHhGRCwweEZDLDB4N0YsMHgwMiwweDdFLDB4NjYsCisweDEyLDB4MDUsMHhBRiwweDdELDB4MDAsMHg3QywweDA0LDB4N0YsCisweDAxLDB4N0UsMHg2NiwweDEyLDB4MDUsMHhBRiwweDdELDB4QzAsCisweDdDLDB4MDAsMHg3RiwweDAwLDB4N0UsMHg2NiwweDEyLDB4MDUsCisweEFGLDB4MjIsMHg3QywweDA0LDB4N0YsMHgwMSwweDdFLDB4NjYsCisweDEyLDB4MDUsMHhBRiwweDdELDB4QzAsMHg3QywweDAwLDB4N0YsCisweDAwLDB4N0UsMHg2NiwweDEyLDB4MDUsMHhBRiwweDIyLDB4N0MsCisweDA0LDB4N0YsMHgwMSwweDdFLDB4NjYsMHgxMiwweDA1LDB4QUYsCisweDdELDB4QzAsMHg3QywweDAwLDB4N0YsMHgwMCwweDdFLDB4NjYsCisweDEyLDB4MDUsMHhBRiwweDIyLDB4N0MsMHgwNCwweDdGLDB4MDEsCisweDdFLDB4NjYsMHgxMiwweDA1LDB4QUYsMHg3RCwweEMwLDB4N0MsCisweDAwLDB4N0YsMHgwMCwweDdFLDB4NjYsMHgxMiwweDA1LDB4QUYsCisweDIyLDB4N0MsMHgwMCwweDdGLDB4MDEsMHg3RSwweDY2LDB4MTIsCisweDA1LDB4QUYsMHg3RCwweEMwLDB4N0MsMHgwMCwweDdGLDB4MDAsCisweDdFLDB4NjYsMHgxMiwweDA1LDB4QUYsMHgyMiwweDdDLDB4MDQsCisweDdGLDB4MDIsMHg3RSwweDY2LDB4MTIsMHgwNSwweEFGLDB4MjIsCisweDdGLDB4MDEsMHg3RSwweDY2LDB4MTIsMHgwNSwweEFGLDB4N0QsCisweEMwLDB4N0MsMHgwMCwweDdGLDB4MDAsMHg3RSwweDY2LDB4MTIsCisweDA1LDB4QUYsMHgyMiwweDdGLDB4MDIsMHg3RSwweDY2LDB4MTIsCisweDA1LDB4QUYsMHgyMiwweDdGLDB4MDIsMHg3RSwweDY2LDB4MTIsCisweDA1LDB4QUYsMHgyMiwweDEyLDB4MDUsMHg2NywweDkwLDB4MDYsCisweDI4LDB4RUUsMHhGMCwweEEzLDB4RUYsMHhGMCwweDIyLDB4N0YsCisweDAyLDB4N0UsMHg2NiwweDEyLDB4MDUsMHhBRiwweDIyLDB4N0MsCisweDAwLDB4N0YsMHgzNiwweDdFLDB4MTMsMHgxMiwweDA1LDB4QUYsCisweDIyLDB4QzUsMHhGMCwweEY4LDB4QTMsMHhFMCwweDI4LDB4RjAsCisweEM1LDB4RjAsMHhGOCwweEU1LDB4ODIsMHgxNSwweDgyLDB4NzAsCisweDAyLDB4MTUsMHg4MywweEUwLDB4MzgsMHhGMCwweDIyLDB4NzUsCisweEYwLDB4MDgsMHg3NSwweDgyLDB4MDAsMHhFRiwweDJGLDB4RkYsCisweEVFLDB4MzMsMHhGRSwweENELDB4MzMsMHhDRCwweENDLDB4MzMsCisweENDLDB4QzUsMHg4MiwweDMzLDB4QzUsMHg4MiwweDlCLDB4RUQsCisweDlBLDB4RUMsMHg5OSwweEU1LDB4ODIsMHg5OCwweDQwLDB4MEMsCisweEY1LDB4ODIsMHhFRSwweDlCLDB4RkUsMHhFRCwweDlBLDB4RkQsCisweEVDLDB4OTksMHhGQywweDBGLDB4RDUsMHhGMCwweEQ2LDB4RTQsCisweENFLDB4RkIsMHhFNCwweENELDB4RkEsMHhFNCwweENDLDB4RjksCisweEE4LDB4ODIsMHgyMiwweEI4LDB4MDAsMHhDMSwweEI5LDB4MDAsCisweDU5LDB4QkEsMHgwMCwweDJELDB4RUMsMHg4QiwweEYwLDB4ODQsCisweENGLDB4Q0UsMHhDRCwweEZDLDB4RTUsMHhGMCwweENCLDB4RjksCisweDc4LDB4MTgsMHhFRiwweDJGLDB4RkYsMHhFRSwweDMzLDB4RkUsCisweEVELDB4MzMsMHhGRCwweEVDLDB4MzMsMHhGQywweEVCLDB4MzMsCisweEZCLDB4MTAsMHhENywweDAzLDB4OTksMHg0MCwweDA0LDB4RUIsCisweDk5LDB4RkIsMHgwRiwweEQ4LDB4RTUsMHhFNCwweEY5LDB4RkEsCisweDIyLDB4NzgsMHgxOCwweEVGLDB4MkYsMHhGRiwweEVFLDB4MzMsCisweEZFLDB4RUQsMHgzMywweEZELDB4RUMsMHgzMywweEZDLDB4QzksCisweDMzLDB4QzksMHgxMCwweEQ3LDB4MDUsMHg5QiwweEU5LDB4OUEsCisweDQwLDB4MDcsMHhFQywweDlCLDB4RkMsMHhFOSwweDlBLDB4RjksCisweDBGLDB4RDgsMHhFMCwweEU0LDB4QzksMHhGQSwweEU0LDB4Q0MsCisweEZCLDB4MjIsMHg3NSwweEYwLDB4MTAsMHhFRiwweDJGLDB4RkYsCisweEVFLDB4MzMsMHhGRSwweEVELDB4MzMsMHhGRCwweENDLDB4MzMsCisweENDLDB4QzgsMHgzMywweEM4LDB4MTAsMHhENywweDA3LDB4OUIsCisweEVDLDB4OUEsMHhFOCwweDk5LDB4NDAsMHgwQSwweEVELDB4OUIsCisweEZELDB4RUMsMHg5QSwweEZDLDB4RTgsMHg5OSwweEY4LDB4MEYsCisweEQ1LDB4RjAsMHhEQSwweEU0LDB4Q0QsMHhGQiwweEU0LDB4Q0MsCisweEZBLDB4RTQsMHhDOCwweEY5LDB4MjIsMHhFQiwweDlGLDB4RjUsCisweEYwLDB4RUEsMHg5RSwweDQyLDB4RjAsMHhFOSwweDlELDB4NDIsCisweEYwLDB4RTgsMHg5QywweDQ1LDB4RjAsMHgyMiwweEUwLDB4RkMsCisweEEzLDB4RTAsMHhGRCwweEEzLDB4RTAsMHhGRSwweEEzLDB4RTAsCisweEZGLDB4MjIsMHhFMCwweEY4LDB4QTMsMHhFMCwweEY5LDB4QTMsCisweEUwLDB4RkEsMHhBMywweEUwLDB4RkIsMHgyMiwweEVDLDB4RjAsCisweEEzLDB4RUQsMHhGMCwweEEzLDB4RUUsMHhGMCwweEEzLDB4RUYsCisweEYwLDB4MjIsMHgxMiwweDAzLDB4RjgsMHgxMiwweDA0LDB4MUEsCisweDQ0LDB4NDAsMHgxMiwweDA0LDB4MEYsMHg3RCwweDAzLDB4N0MsCisweDAwLDB4MTIsMHgwNCwweDIzLDB4MTIsMHgwNSwweEFGLDB4MTIsCisweDAzLDB4RjgsMHgxMiwweDA0LDB4MUEsMHg1NCwweEJGLDB4MTIsCisweDA0LDB4MEYsMHg3RCwweDAzLDB4N0MsMHgwMCwweDEyLDB4MDMsCisweEQwLDB4N0YsMHgwMiwweDdFLDB4NjYsMHgxMiwweDA1LDB4NjcsCisweEVGLDB4NTQsMHhGRCwweDU0LDB4RkUsMHgxMiwweDA0LDB4MzMsCisweDEyLDB4MDMsMHhEMCwweDdGLDB4MDIsMHg3RSwweDY2LDB4MTIsCisweDA1LDB4NjcsMHhFRiwweDQ0LDB4MDIsMHg0NCwweDAxLDB4MTIsCisweDA0LDB4MzMsMHgxMiwweDA0LDB4MjMsMHgwMiwweDA1LDB4QUYsCisweDdGLDB4MDEsMHg3RSwweDY2LDB4MTIsMHgwNSwweEFGLDB4N0QsCisweEMwLDB4N0MsMHgwMCwweDdGLDB4MDAsMHg3RSwweDY2LDB4MTIsCisweDA1LDB4QUYsMHhFNCwweEZELDB4RkMsMHg3RiwweDAxLDB4N0UsCisweDY2LDB4MTIsMHgwNSwweEFGLDB4N0QsMHg4MCwweDdDLDB4MDAsCisweDdGLDB4MDAsMHg3RSwweDY2LDB4MTIsMHgwNSwweEFGLDB4MjIsCisweDdELDB4MDMsMHg3QywweDAwLDB4N0YsMHgwMSwweDdFLDB4NjYsCisweDEyLDB4MDUsMHhBRiwweDdELDB4ODAsMHg3QywweDAwLDB4N0YsCisweDAwLDB4N0UsMHg2NiwweDEyLDB4MDUsMHhBRiwweDIyLDB4RkQsCisweEFDLDB4MDYsMHg3RiwweDAyLDB4N0UsMHg2NiwweDEyLDB4MDUsCisweEFGLDB4MjIsMHg3RiwweDAyLDB4N0UsMHg2NiwweDEyLDB4MDUsCisweDY3LDB4RUYsMHgyMiwweDdGLDB4MDEsMHg3RSwweDY2LDB4MTIsCisweDA1LDB4QUYsMHg3RCwweEMwLDB4N0MsMHgwMCwweDdGLDB4MDAsCisweDdFLDB4NjYsMHgyMiwweEZELDB4QUMsMHgwNiwweDdGLDB4MDIsCisweDdFLDB4NjYsMHgxMiwweDA1LDB4QUYsMHhFNCwweEZELDB4RkMsCisweDIyLDB4NzgsMHg3RiwweEU0LDB4RjYsMHhEOCwweEZELDB4NzUsCisweDgxLDB4M0MsMHgwMiwweDA0LDB4ODgsMHgwMiwweDAwLDB4MEUsCisweEU0LDB4OTMsMHhBMywweEY4LDB4RTQsMHg5MywweEEzLDB4NDAsCisweDAzLDB4RjYsMHg4MCwweDAxLDB4RjIsMHgwOCwweERGLDB4RjQsCisweDgwLDB4MjksMHhFNCwweDkzLDB4QTMsMHhGOCwweDU0LDB4MDcsCisweDI0LDB4MEMsMHhDOCwweEMzLDB4MzMsMHhDNCwweDU0LDB4MEYsCisweDQ0LDB4MjAsMHhDOCwweDgzLDB4NDAsMHgwNCwweEY0LDB4NTYsCisweDgwLDB4MDEsMHg0NiwweEY2LDB4REYsMHhFNCwweDgwLDB4MEIsCisweDAxLDB4MDIsMHgwNCwweDA4LDB4MTAsMHgyMCwweDQwLDB4ODAsCisweDkwLDB4MDUsMHhDQiwweEU0LDB4N0UsMHgwMSwweDkzLDB4NjAsCisweEJDLDB4QTMsMHhGRiwweDU0LDB4M0YsMHgzMCwweEU1LDB4MDksCisweDU0LDB4MUYsMHhGRSwweEU0LDB4OTMsMHhBMywweDYwLDB4MDEsCisweDBFLDB4Q0YsMHg1NCwweEMwLDB4MjUsMHhFMCwweDYwLDB4QTgsCisweDQwLDB4QjgsMHhFNCwweDkzLDB4QTMsMHhGQSwweEU0LDB4OTMsCisweEEzLDB4RjgsMHhFNCwweDkzLDB4QTMsMHhDOCwweEM1LDB4ODIsCisweEM4LDB4Q0EsMHhDNSwweDgzLDB4Q0EsMHhGMCwweEEzLDB4QzgsCisweEM1LDB4ODIsMHhDOCwweENBLDB4QzUsMHg4MywweENBLDB4REYsCisweEU5LDB4REUsMHhFNywweDgwLDB4QkUsMHg3NSwweDBGLDB4ODAsCisweDc1LDB4MEUsMHg3RSwweDc1LDB4MEQsMHhBQSwweDc1LDB4MEMsCisweDgzLDB4RTQsMHhGNSwweDEwLDB4NzUsMHgwQiwweEEwLDB4NzUsCisweDBBLDB4QUMsMHg3NSwweDA5LDB4QjksMHg3NSwweDA4LDB4MDMsCisweDc1LDB4ODksMHgxMSwweDdCLDB4NjAsMHg3QSwweDA5LDB4RjksCisweEY4LDB4QUYsMHgwQiwweEFFLDB4MEEsMHhBRCwweDA5LDB4QUMsCisweDA4LDB4MTIsMHgwMiwweEJCLDB4QUQsMHgwNywweEFDLDB4MDYsCisweEMzLDB4RTQsMHg5RCwweEZELDB4RTQsMHg5QywweEZDLDB4NzgsCisweDE3LDB4RjYsMHhBRiwweDA1LDB4RUYsMHgwOCwweEY2LDB4MTgsCisweEU2LDB4RjUsMHg4QywweDA4LDB4RTYsMHhGNSwweDhBLDB4NzQsCisweDBELDB4MkQsMHhGRCwweEU0LDB4M0MsMHgxOCwweEY2LDB4QUYsCisweDA1LDB4RUYsMHgwOCwweEY2LDB4NzUsMHg4OCwweDEwLDB4NTMsCisweDhFLDB4QzcsMHhEMiwweEE5LDB4MjIsMHhDMCwweEUwLDB4QzAsCisweEYwLDB4QzAsMHg4MywweEMwLDB4ODIsMHhDMCwweEQwLDB4NzUsCisweEQwLDB4MDAsMHhDMCwweDAwLDB4NzgsMHgxNywweEU2LDB4RjUsCisweDhDLDB4NzgsMHgxOCwweEU2LDB4RjUsMHg4QSwweDkwLDB4MDYsCisweDJCLDB4RTQsMHg3NSwweEYwLDB4MDEsMHgxMiwweDAyLDB4NjksCisweDkwLDB4MDYsMHgyRCwweEU0LDB4NzUsMHhGMCwweDAxLDB4MTIsCisweDAyLDB4NjksMHhEMCwweDAwLDB4RDAsMHhEMCwweEQwLDB4ODIsCisweEQwLDB4ODMsMHhEMCwweEYwLDB4RDAsMHhFMCwweDMyLDB4QzIsCisweEFGLDB4QUQsMHgwNywweEFDLDB4MDYsMHg4QywweEEyLDB4OEQsCisweEEzLDB4NzUsMHhBMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4QUUsCisweEExLDB4QkUsMHgwMCwweEYwLDB4QUUsMHhBNiwweEFGLDB4QTcsCisweEQyLDB4QUYsMHgyMiwweDkwLDB4MDYsMHgyNCwweDEyLDB4MDMsCisweDVFLDB4RUYsMHgyNCwweDAxLDB4RkYsMHhFNCwweDNFLDB4RkUsCisweEU0LDB4M0QsMHhGRCwweEU0LDB4M0MsMHgyMiwweEU0LDB4N0YsCisweDIwLDB4N0UsMHg0RSwweEZELDB4RkMsMHg5MCwweDA2LDB4MjQsCisweDEyLDB4MDMsMHg2QSwweEMzLDB4MDIsMHgwMywweDRELDB4QzIsCisweEFGLDB4QUIsMHgwNywweEFBLDB4MDYsMHg4QSwweEEyLDB4OEIsCisweEEzLDB4OEMsMHhBNCwweDhELDB4QTUsMHg3NSwweEEwLDB4MDMsCisweDAwLDB4MDAsMHgwMCwweEFBLDB4QTEsMHhCQSwweDAwLDB4RjgsCisweEQyLDB4QUYsMHgyMiwweDQyLDB4MDYsMHgyRCwweDAwLDB4MDAsCisweDQyLDB4MDYsMHgyQiwweDAwLDB4MDAsMHgwMCwweDEyLDB4MDUsCisweERGLDB4MTIsMHgwNCwweENELDB4MDIsMHgwMCwweDAzLDB4RTQsCisweEY1LDB4OEUsMHgyMn07CisKK3N0YXRpYyBydGtfYXBpX3JldF90IF9ydGtfcG9ydF9GaWJlck1vZGVBYmlsaXR5X3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19wb3J0X3BoeV9hYmlsaXR5X3QgKnBBYmlsaXR5KQoreworICAgIHJ0a19hcGlfcmV0X3QgICByZXRWYWw7CisgICAgcnRrX3VpbnQzMiAgICAgIHJlZ0RhdGE7CisKKyAgICAvKiBDaGVjayBDb21ibyBwb3J0IG9yIG5vdCAqLworICAgIFJUS19DSEtfUE9SVF9JU19DT01CTyhwb3J0KTsKKworICAgIC8qIEZsb3cgQ29udHJvbCAqLworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfRklCMF9DRkcwNCwgJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAocEFiaWxpdHktPkFzeUZDID09IDEpCisgICAgICAgIHJlZ0RhdGEgfD0gKDB4MDAwMSA8PCA4KTsKKyAgICBlbHNlCisgICAgICAgIHJlZ0RhdGEgJj0gfigweDAwMDEgPDwgOCk7CisKKyAgICBpZiAocEFiaWxpdHktPkZDID09IDEpCisgICAgICAgIHJlZ0RhdGEgfD0gKDB4MDAwMSA8PCA3KTsKKyAgICBlbHNlCisgICAgICAgIHJlZ0RhdGEgJj0gfigweDAwMDEgPDwgNyk7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX0ZJQjBfQ0ZHMDQsIHJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAvKiBTcGVlZCBhYmlsaXR5ICovCisgICAgaWYoIChwQWJpbGl0eS0+RnVsbF8xMDAwID09IDEpICYmIChwQWJpbGl0eS0+RnVsbF8xMDAgPT0gMSkgJiYgKHBBYmlsaXR5LT5BdXRvTmVnb3RpYXRpb24gPT0gMSkgKQorICAgIHsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19GSUJFUl9DRkdfMSwgUlRMODM2N0NfU0RTX0ZSQ19NT0RFX09GRlNFVCwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfRklCRVJfQ0ZHXzEsIFJUTDgzNjdDX1NEU19NT0RFX01BU0ssIDcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfRklCMF9DRkcwMCwgMHgxMTQwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisgICAgZWxzZSBpZihwQWJpbGl0eS0+RnVsbF8xMDAwID09IDEpCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0ZJQkVSX0NGR18xLCBSVEw4MzY3Q19TRFNfRlJDX01PREVfT0ZGU0VULCAxKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19GSUJFUl9DRkdfMSwgUlRMODM2N0NfU0RTX01PREVfTUFTSywgNCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgaWYocEFiaWxpdHktPkF1dG9OZWdvdGlhdGlvbiA9PSAxKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX0ZJQjBfQ0ZHMDAsIDB4MTE0MCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19GSUIwX0NGRzAwLCAweDAxNDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmKHBBYmlsaXR5LT5GdWxsXzEwMCA9PSAxKQorICAgIHsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19GSUJFUl9DRkdfMSwgUlRMODM2N0NfU0RTX0ZSQ19NT0RFX09GRlNFVCwgMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfRklCRVJfQ0ZHXzEsIFJUTDgzNjdDX1NEU19NT0RFX01BU0ssIDUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfRklCMF9DRkcwMCwgMHgyMTAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisKKyAgICAvKiBEaWdpdGFsIHNvZnR3YXJlIHJlc2V0ICovCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19TRFNfSU5EQUNTX0FEUiwgMHgwMDAzKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19TRFNfSU5EQUNTX0NNRCwgMHgwMDgwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19TRFNfSU5EQUNTX0RBVEEsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmVnRGF0YSB8PSAoMHgwMDAxIDw8IDYpOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19TRFNfSU5EQUNTX0RBVEEsIHJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX1NEU19JTkRBQ1NfQURSLCAweDAwMDMpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX1NEU19JTkRBQ1NfQ01ELCAweDAwQzApKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZWdEYXRhICY9IH4oMHgwMDAxIDw8IDYpOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19TRFNfSU5EQUNTX0RBVEEsIHJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX1NEU19JTkRBQ1NfQURSLCAweDAwMDMpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX1NEU19JTkRBQ1NfQ01ELCAweDAwQzApKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAvKiBDRFIgcmVzZXQgKi8KKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX1NEU19JTkRBQ1NfREFUQSwgMHgxNDAxKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfU0RTX0lOREFDU19BRFIsIDB4MDAwMCkpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX1NEU19JTkRBQ1NfQ01ELCAweDAwQzApKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19TRFNfSU5EQUNTX0RBVEEsIDB4MTQwMykpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX1NEU19JTkRBQ1NfQURSLCAweDAwMDApKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19TRFNfSU5EQUNTX0NNRCwgMHgwMEMwKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKK3N0YXRpYyBydGtfYXBpX3JldF90IF9ydGtfcG9ydF9GaWJlck1vZGVBYmlsaXR5X2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19wb3J0X3BoeV9hYmlsaXR5X3QgKnBBYmlsaXR5KQoreworICAgIHJ0a19hcGlfcmV0X3QgICByZXRWYWw7CisgICAgcnRrX3VpbnQzMiAgICAgIGRhdGEsIHJlZ0RhdGE7CisKKyAgICAvKiBDaGVjayBDb21ibyBwb3J0IG9yIG5vdCAqLworICAgIFJUS19DSEtfUE9SVF9JU19DT01CTyhwb3J0KTsKKworICAgIG1lbXNldChwQWJpbGl0eSwgMHgwMCwgc2l6ZW9mKHJ0a19wb3J0X3BoeV9hYmlsaXR5X3QpKTsKKworICAgIC8qIEZsb3cgQ29udHJvbCAqLworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfRklCRVJfQ0ZHXzEsIFJUTDgzNjdDX1NEU19GUkNfUkVHNF9PRkZTRVQsIDEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0ZJQkVSX0NGR18xLCBSVEw4MzY3Q19TRFNfRlJDX1JFRzRfRklCMTAwX09GRlNFVCwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfU0RTX0lOREFDU19BRFIsIDB4MDA0NCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfU0RTX0lOREFDU19DTUQsIDB4MDA4MCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfU0RTX0lOREFDU19EQVRBLCAmcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmKHJlZ0RhdGEgJiAoMHgwMDAxIDw8IDgpKQorICAgICAgICBwQWJpbGl0eS0+QXN5RkMgPSAxOworCisgICAgaWYocmVnRGF0YSAmICgweDAwMDEgPDwgNykpCisgICAgICAgIHBBYmlsaXR5LT5GQyA9IDE7CisKKyAgICAvKiBTcGVlZCBhYmlsaXR5ICovCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19GSUJFUl9DRkdfMSwgUlRMODM2N0NfU0RTX0ZSQ19NT0RFX09GRlNFVCwgJmRhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYoZGF0YSA9PSAwKQorICAgIHsKKyAgICAgICAgcEFiaWxpdHktPkF1dG9OZWdvdGlhdGlvbiA9IDE7CisgICAgICAgIHBBYmlsaXR5LT5GdWxsXzEwMDAgPSAxOworICAgICAgICBwQWJpbGl0eS0+RnVsbF8xMDAgPSAxOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19GSUJFUl9DRkdfMSwgUlRMODM2N0NfU0RTX01PREVfTUFTSywgJmRhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIGlmKGRhdGEgPT0gNCkKKyAgICAgICAgeworICAgICAgICAgICAgcEFiaWxpdHktPkZ1bGxfMTAwMCA9IDE7CisKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfRklCMF9DRkcwMCwgJmRhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgaWYoZGF0YSAmIDB4MTAwMCkKKyAgICAgICAgICAgICAgICBwQWJpbGl0eS0+QXV0b05lZ290aWF0aW9uID0gMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwQWJpbGl0eS0+QXV0b05lZ290aWF0aW9uID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKGRhdGEgPT0gNSkKKyAgICAgICAgICAgIHBBYmlsaXR5LT5GdWxsXzEwMCA9IDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBSVF9FUlJfRkFJTEVEOworICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wb3J0X3BoeUF1dG9OZWdvQWJpbGl0eV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgZXRoZXJuZXQgUEhZIGF1dG8tbmVnb3RpYXRpb24gZGVzaXJlZCBhYmlsaXR5LgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgIC0gcG9ydCBpZC4KKyAqICAgICAgcEFiaWxpdHkgICAgLSBBYmlsaXR5IHN0cnVjdHVyZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqICAgICAgUlRfRVJSX1BIWV9SRUdfSUQgICAgICAgLSBJbnZhbGlkIFBIWSBhZGRyZXNzCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogICAgICBSVF9FUlJfQlVTWVdBSVRfVElNRU9VVCAtIFBIWSBhY2Nlc3MgYnVzeQorICogTm90ZToKKyAqICAgICAgSWYgRnVsbF8xMDAwIGJpdCBpcyBzZXQgdG8gMSwgdGhlIEF1dG9OZWdvdGlhdGlvbiB3aWxsIGJlIGF1dG9tYXRpYyBzZXQgdG8gMS4gV2hpbGUgYm90aCBBdXRvTmVnb3RpYXRpb24gYW5kIEZ1bGxfMTAwMCBhcmUgc2V0IHRvIDAsIHRoZSBQSFkgc3BlZWQgYW5kIGR1cGxleCBzZWxlY3Rpb24gd2lsbAorICogICAgICBiZSBzZXQgYXMgZm9sbG93aW5nIDEwMEYgPiAxMDBIID4gMTBGID4gMTBIIHByaW9yaXR5IHNlcXVlbmNlLgorICovCitydGtfYXBpX3JldF90IHJ0a19wb3J0X3BoeUF1dG9OZWdvQWJpbGl0eV9zZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfcG9ydF9waHlfYWJpbGl0eV90ICpwQWJpbGl0eSkKK3sKKyAgICBydGtfYXBpX3JldF90ICAgICAgIHJldFZhbDsKKyAgICBydGtfdWludDMyICAgICAgICAgIHBoeURhdGE7CisgICAgcnRrX3VpbnQzMiAgICAgICAgICBwaHlFbk1zazA7CisgICAgcnRrX3VpbnQzMiAgICAgICAgICBwaHlFbk1zazQ7CisgICAgcnRrX3VpbnQzMiAgICAgICAgICBwaHlFbk1zazk7CisgICAgcnRrX3BvcnRfbWVkaWFfdCAgICBtZWRpYV90eXBlOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIENoZWNrIFBvcnQgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfSVNfVVRQKHBvcnQpOworCisgICAgaWYoTlVMTCA9PSBwQWJpbGl0eSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAocEFiaWxpdHktPkhhbGZfMTAgPj0gUlRLX0VOQUJMRV9FTkQgfHwgcEFiaWxpdHktPkZ1bGxfMTAgPj0gUlRLX0VOQUJMRV9FTkQgfHwKKyAgICAgICBwQWJpbGl0eS0+SGFsZl8xMDAgPj0gUlRLX0VOQUJMRV9FTkQgfHwgcEFiaWxpdHktPkZ1bGxfMTAwID49IFJUS19FTkFCTEVfRU5EIHx8CisgICAgICAgcEFiaWxpdHktPkZ1bGxfMTAwMCA+PSBSVEtfRU5BQkxFX0VORCB8fCBwQWJpbGl0eS0+QXV0b05lZ290aWF0aW9uID49IFJUS19FTkFCTEVfRU5EIHx8CisgICAgICAgcEFiaWxpdHktPkFzeUZDID49IFJUS19FTkFCTEVfRU5EIHx8IHBBYmlsaXR5LT5GQyA+PSBSVEtfRU5BQkxFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmIChydGtfc3dpdGNoX2lzQ29tYm9Qb3J0KHBvcnQpID09IFJUX0VSUl9PSykKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRrX3BvcnRfcGh5Q29tYm9Qb3J0TWVkaWFfZ2V0KHBvcnQsICZtZWRpYV90eXBlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZihtZWRpYV90eXBlID09IFBPUlRfTUVESUFfRklCRVIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfcnRrX3BvcnRfRmliZXJNb2RlQWJpbGl0eV9zZXQocG9ydCwgcEFiaWxpdHkpOworICAgICAgICB9CisgICAgfQorCisgICAgLypmb3IgUEhZIGF1dG8gbW9kZSBzZXR1cCovCisgICAgcEFiaWxpdHktPkF1dG9OZWdvdGlhdGlvbiA9IDE7CisKKyAgICBwaHlFbk1zazAgPSAwOworICAgIHBoeUVuTXNrNCA9IDA7CisgICAgcGh5RW5Nc2s5ID0gMDsKKworICAgIGlmICgxID09IHBBYmlsaXR5LT5IYWxmXzEwKQorICAgIHsKKyAgICAgICAgLyoxMEJBU0UtVFggaGFsZiBkdXBsZXggY2FwYWJsZSBpbiByZWcgNC41Ki8KKyAgICAgICAgcGh5RW5Nc2s0ID0gcGh5RW5Nc2s0IHwgKDEgPDwgNSk7CisKKyAgICAgICAgLypTcGVlZCBzZWxlY3Rpb24gWzE6MF0gKi8KKyAgICAgICAgLyogMTE9UmVzZXJ2ZWQqLworICAgICAgICAvKiAxMD0gMTAwME1wYnMqLworICAgICAgICAvKiAwMT0gMTAwTXBicyovCisgICAgICAgIC8qIDAwPSAxME1wYnMqLworICAgICAgICBwaHlFbk1zazAgPSBwaHlFbk1zazAgJiAofigxIDw8IDYpKTsKKyAgICAgICAgcGh5RW5Nc2swID0gcGh5RW5Nc2swICYgKH4oMSA8PCAxMykpOworICAgIH0KKworICAgIGlmICgxID09IHBBYmlsaXR5LT5GdWxsXzEwKQorICAgIHsKKyAgICAgICAgLyoxMEJBU0UtVFggZnVsbCBkdXBsZXggY2FwYWJsZSBpbiByZWcgNC42Ki8KKyAgICAgICAgcGh5RW5Nc2s0ID0gcGh5RW5Nc2s0IHwgKDEgPDwgNik7CisgICAgICAgIC8qU3BlZWQgc2VsZWN0aW9uIFsxOjBdICovCisgICAgICAgIC8qIDExPVJlc2VydmVkKi8KKyAgICAgICAgLyogMTA9IDEwMDBNcGJzKi8KKyAgICAgICAgLyogMDE9IDEwME1wYnMqLworICAgICAgICAvKiAwMD0gMTBNcGJzKi8KKyAgICAgICAgcGh5RW5Nc2swID0gcGh5RW5Nc2swICYgKH4oMSA8PCA2KSk7CisgICAgICAgIHBoeUVuTXNrMCA9IHBoeUVuTXNrMCAmICh+KDEgPDwgMTMpKTsKKworICAgICAgICAvKkZ1bGwgZHVwbGV4IG1vZGUgaW4gcmVnIDAuOCovCisgICAgICAgIHBoeUVuTXNrMCA9IHBoeUVuTXNrMCB8ICgxIDw8IDgpOworCisgICAgfQorCisgICAgaWYgKDEgPT0gcEFiaWxpdHktPkhhbGZfMTAwKQorICAgIHsKKyAgICAgICAgLyoxMDBCQVNFLVRYIGhhbGYgZHVwbGV4IGNhcGFibGUgaW4gcmVnIDQuNyovCisgICAgICAgIHBoeUVuTXNrNCA9IHBoeUVuTXNrNCB8ICgxIDw8IDcpOworICAgICAgICAvKlNwZWVkIHNlbGVjdGlvbiBbMTowXSAqLworICAgICAgICAvKiAxMT1SZXNlcnZlZCovCisgICAgICAgIC8qIDEwPSAxMDAwTXBicyovCisgICAgICAgIC8qIDAxPSAxMDBNcGJzKi8KKyAgICAgICAgLyogMDA9IDEwTXBicyovCisgICAgICAgIHBoeUVuTXNrMCA9IHBoeUVuTXNrMCAmICh+KDEgPDwgNikpOworICAgICAgICBwaHlFbk1zazAgPSBwaHlFbk1zazAgfCAoMSA8PCAxMyk7CisgICAgfQorCisKKyAgICBpZiAoMSA9PSBwQWJpbGl0eS0+RnVsbF8xMDApCisgICAgeworICAgICAgICAvKjEwMEJBU0UtVFggZnVsbCBkdXBsZXggY2FwYWJsZSBpbiByZWcgNC44Ki8KKyAgICAgICAgcGh5RW5Nc2s0ID0gcGh5RW5Nc2s0IHwgKDEgPDwgOCk7CisgICAgICAgIC8qU3BlZWQgc2VsZWN0aW9uIFsxOjBdICovCisgICAgICAgIC8qIDExPVJlc2VydmVkKi8KKyAgICAgICAgLyogMTA9IDEwMDBNcGJzKi8KKyAgICAgICAgLyogMDE9IDEwME1wYnMqLworICAgICAgICAvKiAwMD0gMTBNcGJzKi8KKyAgICAgICAgcGh5RW5Nc2swID0gcGh5RW5Nc2swICYgKH4oMSA8PCA2KSk7CisgICAgICAgIHBoeUVuTXNrMCA9IHBoeUVuTXNrMCB8ICgxIDw8IDEzKTsKKyAgICAgICAgLypGdWxsIGR1cGxleCBtb2RlIGluIHJlZyAwLjgqLworICAgICAgICBwaHlFbk1zazAgPSBwaHlFbk1zazAgfCAoMSA8PCA4KTsKKyAgICB9CisKKworICAgIGlmICgxID09IHBBYmlsaXR5LT5GdWxsXzEwMDApCisgICAgeworICAgICAgICAvKjEwMDAgQkFTRS1UIEZVTEwgZHVwbGV4IGNhcGFibGUgc2V0dGluZyBpbiByZWcgOS45Ki8KKyAgICAgICAgcGh5RW5Nc2s5ID0gcGh5RW5Nc2s5IHwgKDEgPDwgOSk7CisKKyAgICAgICAgLypTcGVlZCBzZWxlY3Rpb24gWzE6MF0gKi8KKyAgICAgICAgLyogMTE9UmVzZXJ2ZWQqLworICAgICAgICAvKiAxMD0gMTAwME1wYnMqLworICAgICAgICAvKiAwMT0gMTAwTXBicyovCisgICAgICAgIC8qIDAwPSAxME1wYnMqLworICAgICAgICBwaHlFbk1zazAgPSBwaHlFbk1zazAgfCAoMSA8PCA2KTsKKyAgICAgICAgcGh5RW5Nc2swID0gcGh5RW5Nc2swICYgKH4oMSA8PCAxMykpOworCisKKyAgICAgICAgLypBdXRvLU5lZ290aWF0aW9uIHNldHRpbmcgaW4gcmVnIDAuMTIqLworICAgICAgICBwaHlFbk1zazAgPSBwaHlFbk1zazAgfCAoMSA8PCAxMik7CisKKyAgICAgfQorCisgICAgaWYgKDEgPT0gcEFiaWxpdHktPkF1dG9OZWdvdGlhdGlvbikKKyAgICB7CisgICAgICAgIC8qQXV0by1OZWdvdGlhdGlvbiBzZXR0aW5nIGluIHJlZyAwLjEyKi8KKyAgICAgICAgcGh5RW5Nc2swID0gcGh5RW5Nc2swIHwgKDEgPDwgMTIpOworICAgIH0KKworICAgIGlmICgxID09IHBBYmlsaXR5LT5Bc3lGQykKKyAgICB7CisgICAgICAgIC8qQXN5bWV0cmljIGZsb3cgY29udHJvbCBpbiByZWcgNC4xMSovCisgICAgICAgIHBoeUVuTXNrNCA9IHBoeUVuTXNrNCB8ICgxIDw8IDExKTsKKyAgICB9CisgICAgaWYgKDEgPT0gcEFiaWxpdHktPkZDKQorICAgIHsKKyAgICAgICAgLypGbG93IGNvbnRyb2wgaW4gcmVnIDQuMTAqLworICAgICAgICBwaHlFbk1zazQgPSBwaHlFbk1zazQgfCAoMSA8PCAxMCk7CisgICAgfQorCisgICAgLyoxMDAwIEJBU0UtVCBjb250cm9sIHJlZ2lzdGVyIHNldHRpbmcqLworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BIWVJlZyhydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgUEhZXzEwMDBfQkFTRVRfQ09OVFJPTF9SRUcsICZwaHlEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcGh5RGF0YSA9IChwaHlEYXRhICYgKH4weDAyMDApKSB8IHBoeUVuTXNrOSA7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQSFlSZWcocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIFBIWV8xMDAwX0JBU0VUX0NPTlRST0xfUkVHLCBwaHlEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgLypBdXRvLU5lZ290aWF0aW9uIGNvbnRyb2wgcmVnaXN0ZXIgc2V0dGluZyovCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUEhZUmVnKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCBQSFlfQU5fQURWRVJUSVNFTUVOVF9SRUcsICZwaHlEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcGh5RGF0YSA9IChwaHlEYXRhICYgKH4weDBERTApKSB8IHBoeUVuTXNrNDsKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQSFlSZWcocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIFBIWV9BTl9BRFZFUlRJU0VNRU5UX1JFRywgcGh5RGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIC8qQ29udHJvbCByZWdpc3RlciBzZXR0aW5nIGFuZCByZXN0YXJ0IGF1dG8qLworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BIWVJlZyhydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgUEhZX0NPTlRST0xfUkVHLCAmcGh5RGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHBoeURhdGEgPSAocGh5RGF0YSAmICh+MHgzMTQwKSkgfCBwaHlFbk1zazA7CisgICAgLypJZiBoYXZlIGF1dG8tbmVnb3RpYXRpb24gY2FwYWJsZSwgdGhlbiByZXN0YXJ0IGF1dG8gbmVnb3RpYXRpb24qLworICAgIGlmICgxID09IHBBYmlsaXR5LT5BdXRvTmVnb3RpYXRpb24pCisgICAgeworICAgICAgICBwaHlEYXRhID0gcGh5RGF0YSB8ICgxIDw8IDkpOworICAgIH0KKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BIWVJlZyhydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgUEhZX0NPTlRST0xfUkVHLCBwaHlEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3BvcnRfcGh5QXV0b05lZ29BYmlsaXR5X2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBQSFkgYWJpbGl0eSB0aHJvdWdoIFBIWSByZWdpc3RlcnMuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBBYmlsaXR5IC0gQWJpbGl0eSBzdHJ1Y3R1cmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfUEhZX1JFR19JRCAgICAgICAtIEludmFsaWQgUEhZIGFkZHJlc3MKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiAgICAgIFJUX0VSUl9CVVNZV0FJVF9USU1FT1VUIC0gUEhZIGFjY2VzcyBidXN5CisgKiBOb3RlOgorICogICAgICBHZXQgdGhlIGNhcGFibGl0eSBvZiBzcGVjaWZpZWQgUEhZLgorICovCitydGtfYXBpX3JldF90IHJ0a19wb3J0X3BoeUF1dG9OZWdvQWJpbGl0eV9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfcG9ydF9waHlfYWJpbGl0eV90ICpwQWJpbGl0eSkKK3sKKyAgICBydGtfYXBpX3JldF90ICAgICAgIHJldFZhbDsKKyAgICBydGtfdWludDMyICAgICAgICAgIHBoeURhdGEwOworICAgIHJ0a191aW50MzIgICAgICAgICAgcGh5RGF0YTQ7CisgICAgcnRrX3VpbnQzMiAgICAgICAgICBwaHlEYXRhOTsKKyAgICBydGtfcG9ydF9tZWRpYV90ICAgIG1lZGlhX3R5cGU7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgUG9ydCBWYWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9JU19VVFAocG9ydCk7CisKKyAgICBpZihOVUxMID09IHBBYmlsaXR5KQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmIChydGtfc3dpdGNoX2lzQ29tYm9Qb3J0KHBvcnQpID09IFJUX0VSUl9PSykKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRrX3BvcnRfcGh5Q29tYm9Qb3J0TWVkaWFfZ2V0KHBvcnQsICZtZWRpYV90eXBlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZihtZWRpYV90eXBlID09IFBPUlRfTUVESUFfRklCRVIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfcnRrX3BvcnRfRmliZXJNb2RlQWJpbGl0eV9nZXQocG9ydCwgcEFiaWxpdHkpOworICAgICAgICB9CisgICAgfQorCisgICAgLypDb250cm9sIHJlZ2lzdGVyIHNldHRpbmcgYW5kIHJlc3RhcnQgYXV0byovCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUEhZUmVnKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCBQSFlfQ09OVFJPTF9SRUcsICZwaHlEYXRhMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIC8qQXV0by1OZWdvdGlhdGlvbiBjb250cm9sIHJlZ2lzdGVyIHNldHRpbmcqLworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BIWVJlZyhydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgUEhZX0FOX0FEVkVSVElTRU1FTlRfUkVHLCAmcGh5RGF0YTQpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAvKjEwMDAgQkFTRS1UIGNvbnRyb2wgcmVnaXN0ZXIgc2V0dGluZyovCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUEhZUmVnKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCBQSFlfMTAwMF9CQVNFVF9DT05UUk9MX1JFRywgJnBoeURhdGE5KSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKHBoeURhdGE5ICYgKDEgPDwgOSkpCisgICAgICAgIHBBYmlsaXR5LT5GdWxsXzEwMDAgPSAxOworICAgIGVsc2UKKyAgICAgICAgcEFiaWxpdHktPkZ1bGxfMTAwMCA9IDA7CisKKyAgICBpZiAocGh5RGF0YTQgJiAoMSA8PCAxMSkpCisgICAgICAgIHBBYmlsaXR5LT5Bc3lGQyA9IDE7CisgICAgZWxzZQorICAgICAgICBwQWJpbGl0eS0+QXN5RkMgPSAwOworCisgICAgaWYgKHBoeURhdGE0ICYgKDEgPDwgMTApKQorICAgICAgICBwQWJpbGl0eS0+RkMgPSAxOworICAgIGVsc2UKKyAgICAgICAgcEFiaWxpdHktPkZDID0gMDsKKworCisgICAgaWYgKHBoeURhdGE0ICYgKDEgPDwgOCkpCisgICAgICAgIHBBYmlsaXR5LT5GdWxsXzEwMCA9IDE7CisgICAgZWxzZQorICAgICAgICBwQWJpbGl0eS0+RnVsbF8xMDAgPSAwOworCisgICAgaWYgKHBoeURhdGE0ICYgKDEgPDwgNykpCisgICAgICAgIHBBYmlsaXR5LT5IYWxmXzEwMCA9IDE7CisgICAgZWxzZQorICAgICAgICBwQWJpbGl0eS0+SGFsZl8xMDAgPSAwOworCisgICAgaWYgKHBoeURhdGE0ICYgKDEgPDwgNikpCisgICAgICAgIHBBYmlsaXR5LT5GdWxsXzEwID0gMTsKKyAgICBlbHNlCisgICAgICAgIHBBYmlsaXR5LT5GdWxsXzEwID0gMDsKKworICAgIGlmIChwaHlEYXRhNCAmICgxIDw8IDUpKQorICAgICAgICBwQWJpbGl0eS0+SGFsZl8xMCA9IDE7CisgICAgZWxzZQorICAgICAgICBwQWJpbGl0eS0+SGFsZl8xMCA9IDA7CisKKworICAgIGlmIChwaHlEYXRhMCAmICgxIDw8IDEyKSkKKyAgICAgICAgcEFiaWxpdHktPkF1dG9OZWdvdGlhdGlvbiA9IDE7CisgICAgZWxzZQorICAgICAgICBwQWJpbGl0eS0+QXV0b05lZ290aWF0aW9uID0gMDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wb3J0X3BoeUZvcmNlTW9kZUFiaWxpdHlfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHRoZSBwb3J0IHNwZWVkL2R1cGxleCBtb2RlL3BhdXNlL2FzeV9wYXVzZSBpbiB0aGUgUEhZIGZvcmNlIG1vZGUuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBwb3J0IGlkLgorICogICAgICBwQWJpbGl0eSAgICAtIEFiaWxpdHkgc3RydWN0dXJlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfUEhZX1JFR19JRCAgICAgICAtIEludmFsaWQgUEhZIGFkZHJlc3MKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiAgICAgIFJUX0VSUl9CVVNZV0FJVF9USU1FT1VUIC0gUEhZIGFjY2VzcyBidXN5CisgKiBOb3RlOgorICogICAgICBXaGlsZSBib3RoIEF1dG9OZWdvdGlhdGlvbiBhbmQgRnVsbF8xMDAwIGFyZSBzZXQgdG8gMCwgdGhlIFBIWSBzcGVlZCBhbmQgZHVwbGV4IHNlbGVjdGlvbiB3aWxsCisgKiAgICAgIGJlIHNldCBhcyBmb2xsb3dpbmcgMTAwRiA+IDEwMEggPiAxMEYgPiAxMEggcHJpb3JpdHkgc2VxdWVuY2UuCisgKiAgICAgIFRoaXMgQVBJIGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSBjb21ibyBwb3J0IGluIGZpYmVyIG1vZGUuCisgKiAgICAgIFRoZSBwb3NzaWJsZSBwYXJhbWV0ZXJzIGluIGZpYmVyIG1vZGUgYXJlIEZ1bGxfMTAwMCBhbmQgRnVsbCAxMDAuCisgKiAgICAgIEFsbCB0aGUgb3RoZXIgZmllbGRzIGluIHJ0a19wb3J0X3BoeV9hYmlsaXR5X3Qgd2lsbCBiZSBpZ25vcmVkIGluIGZpYmVyIHBvcnQuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3BvcnRfcGh5Rm9yY2VNb2RlQWJpbGl0eV9zZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfcG9ydF9waHlfYWJpbGl0eV90ICpwQWJpbGl0eSkKK3sKKyAgICAgcnRrX2FwaV9yZXRfdCAgICAgIHJldFZhbDsKKyAgICAgcnRrX3VpbnQzMiAgICAgICAgIHBoeURhdGE7CisgICAgIHJ0a191aW50MzIgICAgICAgICBwaHlFbk1zazA7CisgICAgIHJ0a191aW50MzIgICAgICAgICBwaHlFbk1zazQ7CisgICAgIHJ0a191aW50MzIgICAgICAgICBwaHlFbk1zazk7CisgICAgIHJ0a19wb3J0X21lZGlhX3QgICBtZWRpYV90eXBlOworCisgICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgIC8qIENoZWNrIFBvcnQgVmFsaWQgKi8KKyAgICAgUlRLX0NIS19QT1JUX0lTX1VUUChwb3J0KTsKKworICAgICBpZihOVUxMID09IHBBYmlsaXR5KQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgICBpZiAocEFiaWxpdHktPkhhbGZfMTAgPj0gUlRLX0VOQUJMRV9FTkQgfHwgcEFiaWxpdHktPkZ1bGxfMTAgPj0gUlRLX0VOQUJMRV9FTkQgfHwKKyAgICAgICAgcEFiaWxpdHktPkhhbGZfMTAwID49IFJUS19FTkFCTEVfRU5EIHx8IHBBYmlsaXR5LT5GdWxsXzEwMCA+PSBSVEtfRU5BQkxFX0VORCB8fAorICAgICAgICBwQWJpbGl0eS0+RnVsbF8xMDAwID49IFJUS19FTkFCTEVfRU5EIHx8IHBBYmlsaXR5LT5BdXRvTmVnb3RpYXRpb24gPj0gUlRLX0VOQUJMRV9FTkQgfHwKKyAgICAgICAgcEFiaWxpdHktPkFzeUZDID49IFJUS19FTkFCTEVfRU5EIHx8IHBBYmlsaXR5LT5GQyA+PSBSVEtfRU5BQkxFX0VORCkKKyAgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICAgaWYgKHJ0a19zd2l0Y2hfaXNDb21ib1BvcnQocG9ydCkgPT0gUlRfRVJSX09LKQorICAgICB7CisgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0a19wb3J0X3BoeUNvbWJvUG9ydE1lZGlhX2dldChwb3J0LCAmbWVkaWFfdHlwZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICBpZihtZWRpYV90eXBlID09IFBPUlRfTUVESUFfRklCRVIpCisgICAgICAgICB7CisgICAgICAgICAgICAgcmV0dXJuIF9ydGtfcG9ydF9GaWJlck1vZGVBYmlsaXR5X3NldChwb3J0LCBwQWJpbGl0eSk7CisgICAgICAgICB9CisgICAgIH0KKworICAgICBpZiAoMSA9PSBwQWJpbGl0eS0+RnVsbF8xMDAwKQorICAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgICAvKmZvciBQSFkgZm9yY2UgbW9kZSBzZXR1cCovCisgICAgIHBBYmlsaXR5LT5BdXRvTmVnb3RpYXRpb24gPSAwOworCisgICAgIHBoeUVuTXNrMCA9IDA7CisgICAgIHBoeUVuTXNrNCA9IDA7CisgICAgIHBoeUVuTXNrOSA9IDA7CisKKyAgICAgaWYgKDEgPT0gcEFiaWxpdHktPkhhbGZfMTApCisgICAgIHsKKyAgICAgICAgIC8qMTBCQVNFLVRYIGhhbGYgZHVwbGV4IGNhcGFibGUgaW4gcmVnIDQuNSovCisgICAgICAgICBwaHlFbk1zazQgPSBwaHlFbk1zazQgfCAoMSA8PCA1KTsKKworICAgICAgICAgLypTcGVlZCBzZWxlY3Rpb24gWzE6MF0gKi8KKyAgICAgICAgIC8qIDExPVJlc2VydmVkKi8KKyAgICAgICAgIC8qIDEwPSAxMDAwTXBicyovCisgICAgICAgICAvKiAwMT0gMTAwTXBicyovCisgICAgICAgICAvKiAwMD0gMTBNcGJzKi8KKyAgICAgICAgIHBoeUVuTXNrMCA9IHBoeUVuTXNrMCAmICh+KDEgPDwgNikpOworICAgICAgICAgcGh5RW5Nc2swID0gcGh5RW5Nc2swICYgKH4oMSA8PCAxMykpOworICAgICB9CisKKyAgICAgaWYgKDEgPT0gcEFiaWxpdHktPkZ1bGxfMTApCisgICAgIHsKKyAgICAgICAgIC8qMTBCQVNFLVRYIGZ1bGwgZHVwbGV4IGNhcGFibGUgaW4gcmVnIDQuNiovCisgICAgICAgICBwaHlFbk1zazQgPSBwaHlFbk1zazQgfCAoMSA8PCA2KTsKKyAgICAgICAgIC8qU3BlZWQgc2VsZWN0aW9uIFsxOjBdICovCisgICAgICAgICAvKiAxMT1SZXNlcnZlZCovCisgICAgICAgICAvKiAxMD0gMTAwME1wYnMqLworICAgICAgICAgLyogMDE9IDEwME1wYnMqLworICAgICAgICAgLyogMDA9IDEwTXBicyovCisgICAgICAgICBwaHlFbk1zazAgPSBwaHlFbk1zazAgJiAofigxIDw8IDYpKTsKKyAgICAgICAgIHBoeUVuTXNrMCA9IHBoeUVuTXNrMCAmICh+KDEgPDwgMTMpKTsKKworICAgICAgICAgLypGdWxsIGR1cGxleCBtb2RlIGluIHJlZyAwLjgqLworICAgICAgICAgcGh5RW5Nc2swID0gcGh5RW5Nc2swIHwgKDEgPDwgOCk7CisKKyAgICAgfQorCisgICAgIGlmICgxID09IHBBYmlsaXR5LT5IYWxmXzEwMCkKKyAgICAgeworICAgICAgICAgLyoxMDBCQVNFLVRYIGhhbGYgZHVwbGV4IGNhcGFibGUgaW4gcmVnIDQuNyovCisgICAgICAgICBwaHlFbk1zazQgPSBwaHlFbk1zazQgfCAoMSA8PCA3KTsKKyAgICAgICAgIC8qU3BlZWQgc2VsZWN0aW9uIFsxOjBdICovCisgICAgICAgICAvKiAxMT1SZXNlcnZlZCovCisgICAgICAgICAvKiAxMD0gMTAwME1wYnMqLworICAgICAgICAgLyogMDE9IDEwME1wYnMqLworICAgICAgICAgLyogMDA9IDEwTXBicyovCisgICAgICAgICBwaHlFbk1zazAgPSBwaHlFbk1zazAgJiAofigxIDw8IDYpKTsKKyAgICAgICAgIHBoeUVuTXNrMCA9IHBoeUVuTXNrMCB8ICgxIDw8IDEzKTsKKyAgICAgfQorCisKKyAgICAgaWYgKDEgPT0gcEFiaWxpdHktPkZ1bGxfMTAwKQorICAgICB7CisgICAgICAgICAvKjEwMEJBU0UtVFggZnVsbCBkdXBsZXggY2FwYWJsZSBpbiByZWcgNC44Ki8KKyAgICAgICAgIHBoeUVuTXNrNCA9IHBoeUVuTXNrNCB8ICgxIDw8IDgpOworICAgICAgICAgLypTcGVlZCBzZWxlY3Rpb24gWzE6MF0gKi8KKyAgICAgICAgIC8qIDExPVJlc2VydmVkKi8KKyAgICAgICAgIC8qIDEwPSAxMDAwTXBicyovCisgICAgICAgICAvKiAwMT0gMTAwTXBicyovCisgICAgICAgICAvKiAwMD0gMTBNcGJzKi8KKyAgICAgICAgIHBoeUVuTXNrMCA9IHBoeUVuTXNrMCAmICh+KDEgPDwgNikpOworICAgICAgICAgcGh5RW5Nc2swID0gcGh5RW5Nc2swIHwgKDEgPDwgMTMpOworICAgICAgICAgLypGdWxsIGR1cGxleCBtb2RlIGluIHJlZyAwLjgqLworICAgICAgICAgcGh5RW5Nc2swID0gcGh5RW5Nc2swIHwgKDEgPDwgOCk7CisgICAgIH0KKworICAgICBpZiAoMSA9PSBwQWJpbGl0eS0+QXN5RkMpCisgICAgIHsKKyAgICAgICAgIC8qQXN5bWV0cmljIGZsb3cgY29udHJvbCBpbiByZWcgNC4xMSovCisgICAgICAgICBwaHlFbk1zazQgPSBwaHlFbk1zazQgfCAoMSA8PCAxMSk7CisgICAgIH0KKyAgICAgaWYgKDEgPT0gcEFiaWxpdHktPkZDKQorICAgICB7CisgICAgICAgICAvKkZsb3cgY29udHJvbCBpbiByZWcgNC4xMCovCisgICAgICAgICBwaHlFbk1zazQgPSBwaHlFbk1zazQgfCAoKDEgPDwgMTApKTsKKyAgICAgfQorCisgICAgIC8qMTAwMCBCQVNFLVQgY29udHJvbCByZWdpc3RlciBzZXR0aW5nKi8KKyAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUEhZUmVnKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCBQSFlfMTAwMF9CQVNFVF9DT05UUk9MX1JFRywgJnBoeURhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgIHBoeURhdGEgPSAocGh5RGF0YSAmICh+MHgwMjAwKSkgfCBwaHlFbk1zazkgOworCisgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BIWVJlZyhydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgUEhZXzEwMDBfQkFTRVRfQ09OVFJPTF9SRUcsIHBoeURhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgIC8qQXV0by1OZWdvdGlhdGlvbiBjb250cm9sIHJlZ2lzdGVyIHNldHRpbmcqLworICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQSFlSZWcocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIFBIWV9BTl9BRFZFUlRJU0VNRU5UX1JFRywgJnBoeURhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgIHBoeURhdGEgPSAocGh5RGF0YSAmICh+MHgwREUwKSkgfCBwaHlFbk1zazQ7CisgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BIWVJlZyhydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgUEhZX0FOX0FEVkVSVElTRU1FTlRfUkVHLCBwaHlEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAvKkNvbnRyb2wgcmVnaXN0ZXIgc2V0dGluZyBhbmQgcG93ZXIgb2ZmL29uKi8KKyAgICAgcGh5RGF0YSA9IHBoeUVuTXNrMCAmICh+KDEgPDwgMTIpKTsKKyAgICAgcGh5RGF0YSB8PSAoMSA8PCAxMSk7ICAgLyogcG93ZXIgZG93biBQSFksIGJpdCAxMSBzaG91bGQgYmUgc2V0IHRvIDEgKi8KKyAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUEhZUmVnKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCBQSFlfQ09OVFJPTF9SRUcsIHBoeURhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgIHBoeURhdGEgPSBwaHlEYXRhICYgKH4oMSA8PCAxMSkpOyAgIC8qIHBvd2VyIG9uIFBIWSwgYml0IDExIHNob3VsZCBiZSBzZXQgdG8gMCovCisgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BIWVJlZyhydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgUEhZX0NPTlRST0xfUkVHLCBwaHlEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcG9ydF9waHlGb3JjZU1vZGVBYmlsaXR5X2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBQSFkgYWJpbGl0eSB0aHJvdWdoIFBIWSByZWdpc3RlcnMuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBBYmlsaXR5IC0gQWJpbGl0eSBzdHJ1Y3R1cmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfUEhZX1JFR19JRCAgICAgICAtIEludmFsaWQgUEhZIGFkZHJlc3MKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiAgICAgIFJUX0VSUl9CVVNZV0FJVF9USU1FT1VUIC0gUEhZIGFjY2VzcyBidXN5CisgKiBOb3RlOgorICogICAgICBHZXQgdGhlIGNhcGFibGl0eSBvZiBzcGVjaWZpZWQgUEhZLgorICovCitydGtfYXBpX3JldF90IHJ0a19wb3J0X3BoeUZvcmNlTW9kZUFiaWxpdHlfZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3BvcnRfcGh5X2FiaWxpdHlfdCAqcEFiaWxpdHkpCit7CisgICAgcnRrX2FwaV9yZXRfdCAgICAgICByZXRWYWw7CisgICAgcnRrX3VpbnQzMiAgICAgICAgICBwaHlEYXRhMDsKKyAgICBydGtfdWludDMyICAgICAgICAgIHBoeURhdGE0OworICAgIHJ0a191aW50MzIgICAgICAgICAgcGh5RGF0YTk7CisgICAgcnRrX3BvcnRfbWVkaWFfdCAgICBtZWRpYV90eXBlOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIENoZWNrIFBvcnQgVmFsaWQgKi8KKyAgICAgUlRLX0NIS19QT1JUX0lTX1VUUChwb3J0KTsKKworICAgICBpZihOVUxMID09IHBBYmlsaXR5KQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgICBpZiAocnRrX3N3aXRjaF9pc0NvbWJvUG9ydChwb3J0KSA9PSBSVF9FUlJfT0spCisgICAgIHsKKyAgICAgICAgIGlmICgocmV0VmFsID0gcnRrX3BvcnRfcGh5Q29tYm9Qb3J0TWVkaWFfZ2V0KHBvcnQsICZtZWRpYV90eXBlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgIGlmKG1lZGlhX3R5cGUgPT0gUE9SVF9NRURJQV9GSUJFUikKKyAgICAgICAgIHsKKyAgICAgICAgICAgICByZXR1cm4gX3J0a19wb3J0X0ZpYmVyTW9kZUFiaWxpdHlfZ2V0KHBvcnQsIHBBYmlsaXR5KTsKKyAgICAgICAgIH0KKyAgICAgfQorCisgICAgLypDb250cm9sIHJlZ2lzdGVyIHNldHRpbmcgYW5kIHJlc3RhcnQgYXV0byovCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUEhZUmVnKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCBQSFlfQ09OVFJPTF9SRUcsICZwaHlEYXRhMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIC8qQXV0by1OZWdvdGlhdGlvbiBjb250cm9sIHJlZ2lzdGVyIHNldHRpbmcqLworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BIWVJlZyhydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgUEhZX0FOX0FEVkVSVElTRU1FTlRfUkVHLCAmcGh5RGF0YTQpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAvKjEwMDAgQkFTRS1UIGNvbnRyb2wgcmVnaXN0ZXIgc2V0dGluZyovCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUEhZUmVnKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCBQSFlfMTAwMF9CQVNFVF9DT05UUk9MX1JFRywgJnBoeURhdGE5KSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKHBoeURhdGE5ICYgKDEgPDwgOSkpCisgICAgICAgIHBBYmlsaXR5LT5GdWxsXzEwMDAgPSAxOworICAgIGVsc2UKKyAgICAgICAgcEFiaWxpdHktPkZ1bGxfMTAwMCA9IDA7CisKKyAgICBpZiAocGh5RGF0YTQgJiAoMSA8PCAxMSkpCisgICAgICAgIHBBYmlsaXR5LT5Bc3lGQyA9IDE7CisgICAgZWxzZQorICAgICAgICBwQWJpbGl0eS0+QXN5RkMgPSAwOworCisgICAgaWYgKHBoeURhdGE0ICYgKCgxIDw8IDEwKSkpCisgICAgICAgIHBBYmlsaXR5LT5GQyA9IDE7CisgICAgZWxzZQorICAgICAgICBwQWJpbGl0eS0+RkMgPSAwOworCisKKyAgICBpZiAocGh5RGF0YTQgJiAoMSA8PCA4KSkKKyAgICAgICAgcEFiaWxpdHktPkZ1bGxfMTAwID0gMTsKKyAgICBlbHNlCisgICAgICAgIHBBYmlsaXR5LT5GdWxsXzEwMCA9IDA7CisKKyAgICBpZiAocGh5RGF0YTQgJiAoMSA8PCA3KSkKKyAgICAgICAgcEFiaWxpdHktPkhhbGZfMTAwID0gMTsKKyAgICBlbHNlCisgICAgICAgIHBBYmlsaXR5LT5IYWxmXzEwMCA9IDA7CisKKyAgICBpZiAocGh5RGF0YTQgJiAoMSA8PCA2KSkKKyAgICAgICAgcEFiaWxpdHktPkZ1bGxfMTAgPSAxOworICAgIGVsc2UKKyAgICAgICAgcEFiaWxpdHktPkZ1bGxfMTAgPSAwOworCisgICAgaWYgKHBoeURhdGE0ICYgKDEgPDwgNSkpCisgICAgICAgIHBBYmlsaXR5LT5IYWxmXzEwID0gMTsKKyAgICBlbHNlCisgICAgICAgIHBBYmlsaXR5LT5IYWxmXzEwID0gMDsKKworCisgICAgaWYgKHBoeURhdGEwICYgKDEgPDwgMTIpKQorICAgICAgICBwQWJpbGl0eS0+QXV0b05lZ290aWF0aW9uID0gMTsKKyAgICBlbHNlCisgICAgICAgIHBBYmlsaXR5LT5BdXRvTmVnb3RpYXRpb24gPSAwOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3BvcnRfcGh5U3RhdHVzX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBldGhlcm5ldCBQSFkgbGlua2luZyBzdGF0dXMKKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqIE91dHB1dDoKKyAqICAgICAgbGlua1N0YXR1cyAgLSBQSFkgbGluayBzdGF0dXMKKyAqICAgICAgc3BlZWQgICAgICAgLSBQSFkgbGluayBzcGVlZAorICogICAgICBkdXBsZXggICAgICAtIFBIWSBkdXBsZXggbW9kZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9QSFlfUkVHX0lEICAgICAgIC0gSW52YWxpZCBQSFkgYWRkcmVzcworICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX0JVU1lXQUlUX1RJTUVPVVQgLSBQSFkgYWNjZXNzIGJ1c3kKKyAqIE5vdGU6CisgKiAgICAgIEFQSSB3aWxsIHJldHVybiBhdXRvIG5lZ290aWF0aW9uIHN0YXR1cyBvZiBwaHkuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3BvcnRfcGh5U3RhdHVzX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19wb3J0X2xpbmtTdGF0dXNfdCAqcExpbmtTdGF0dXMsIHJ0a19wb3J0X3NwZWVkX3QgKnBTcGVlZCwgcnRrX3BvcnRfZHVwbGV4X3QgKnBEdXBsZXgpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBwaHlEYXRhOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIENoZWNrIFBvcnQgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfSVNfVVRQKHBvcnQpOworCisgICAgaWYoIChOVUxMID09IHBMaW5rU3RhdHVzKSB8fCAoTlVMTCA9PSBwU3BlZWQpIHx8IChOVUxMID09IHBEdXBsZXgpICkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICAvKkdldCBQSFkgcmVzb2x2ZWQgcmVnaXN0ZXIqLworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BIWVJlZyhydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgUEhZX1JFU09MVkVEX1JFRywgJnBoeURhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAvKmNoZWNrIGxpbmsgc3RhdHVzKi8KKyAgICBpZiAocGh5RGF0YSAmICgxPDwyKSkKKyAgICB7CisgICAgICAgICpwTGlua1N0YXR1cyA9IDE7CisKKyAgICAgICAgLypjaGVjayBsaW5rIHNwZWVkKi8KKyAgICAgICAgKnBTcGVlZCA9IChwaHlEYXRhJjB4MDAzMCkgPj4gNDsKKworICAgICAgICAvKmNoZWNrIGxpbmsgZHVwbGV4Ki8KKyAgICAgICAgKnBEdXBsZXggPSAocGh5RGF0YSYweDAwMDgpID4+IDM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpwTGlua1N0YXR1cyA9IDA7CisgICAgICAgICpwU3BlZWQgPSAwOworICAgICAgICAqcER1cGxleCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3BvcnRfbWFjRm9yY2VMaW5rX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwb3J0IGZvcmNlIGxpbmtpbmcgY29uZmlndXJhdGlvbi4KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAgICAgLSBwb3J0IGlkLgorICogICAgICBwUG9ydGFiaWxpdHkgICAgLSBwb3J0IGFiaWxpdHkgY29uZmlndXJhdGlvbgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgY2FuIHNldCBQb3J0L01BQyBmb3JjZSBtb2RlIHByb3BlcnRpZXMuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3BvcnRfbWFjRm9yY2VMaW5rX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19wb3J0X21hY19hYmlsaXR5X3QgKnBQb3J0YWJpbGl0eSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGw4MzY3Y19wb3J0X2FiaWxpdHlfdCBhYmlsaXR5OworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIENoZWNrIFBvcnQgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfSVNfVVRQKHBvcnQpOworCisgICAgaWYoTlVMTCA9PSBwUG9ydGFiaWxpdHkpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKHBQb3J0YWJpbGl0eS0+Zm9yY2Vtb2RlID4xfHwgcFBvcnRhYmlsaXR5LT5zcGVlZCA+IDIgfHwgcFBvcnRhYmlsaXR5LT5kdXBsZXggPiAxIHx8CisgICAgICAgcFBvcnRhYmlsaXR5LT5saW5rID4gMSB8fCBwUG9ydGFiaWxpdHktPm53YXkgPiAxIHx8IHBQb3J0YWJpbGl0eS0+dHhwYXVzZSA+IDEgfHwgcFBvcnRhYmlsaXR5LT5yeHBhdXNlID4gMSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BvcnRGb3JjZUxpbmsocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksICZhYmlsaXR5KSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgYWJpbGl0eS5mb3JjZW1vZGUgPSBwUG9ydGFiaWxpdHktPmZvcmNlbW9kZTsKKyAgICBhYmlsaXR5LnNwZWVkICAgICA9IHBQb3J0YWJpbGl0eS0+c3BlZWQ7CisgICAgYWJpbGl0eS5kdXBsZXggICAgPSBwUG9ydGFiaWxpdHktPmR1cGxleDsKKyAgICBhYmlsaXR5LmxpbmsgICAgICA9IHBQb3J0YWJpbGl0eS0+bGluazsKKyAgICBhYmlsaXR5Lm53YXkgICAgICA9IHBQb3J0YWJpbGl0eS0+bndheTsKKyAgICBhYmlsaXR5LnR4cGF1c2UgICA9IHBQb3J0YWJpbGl0eS0+dHhwYXVzZTsKKyAgICBhYmlsaXR5LnJ4cGF1c2UgICA9IHBQb3J0YWJpbGl0eS0+cnhwYXVzZTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BvcnRGb3JjZUxpbmsocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksICZhYmlsaXR5KSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3BvcnRfbWFjRm9yY2VMaW5rX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwb3J0IGZvcmNlIGxpbmtpbmcgY29uZmlndXJhdGlvbi4KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqIE91dHB1dDoKKyAqICAgICAgcFBvcnRhYmlsaXR5IC0gcG9ydCBhYmlsaXR5IGNvbmZpZ3VyYXRpb24KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBjYW4gZ2V0IFBvcnQvTUFDIGZvcmNlIG1vZGUgcHJvcGVydGllcy4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfcG9ydF9tYWNGb3JjZUxpbmtfZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3BvcnRfbWFjX2FiaWxpdHlfdCAqcFBvcnRhYmlsaXR5KQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0bDgzNjdjX3BvcnRfYWJpbGl0eV90IGFiaWxpdHk7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgUG9ydCBWYWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9JU19VVFAocG9ydCk7CisKKyAgICBpZihOVUxMID09IHBQb3J0YWJpbGl0eSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQb3J0Rm9yY2VMaW5rKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCAmYWJpbGl0eSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHBQb3J0YWJpbGl0eS0+Zm9yY2Vtb2RlID0gYWJpbGl0eS5mb3JjZW1vZGU7CisgICAgcFBvcnRhYmlsaXR5LT5zcGVlZCAgICAgPSBhYmlsaXR5LnNwZWVkOworICAgIHBQb3J0YWJpbGl0eS0+ZHVwbGV4ICAgID0gYWJpbGl0eS5kdXBsZXg7CisgICAgcFBvcnRhYmlsaXR5LT5saW5rICAgICAgPSBhYmlsaXR5Lmxpbms7CisgICAgcFBvcnRhYmlsaXR5LT5ud2F5ICAgICAgPSBhYmlsaXR5Lm53YXk7CisgICAgcFBvcnRhYmlsaXR5LT50eHBhdXNlICAgPSBhYmlsaXR5LnR4cGF1c2U7CisgICAgcFBvcnRhYmlsaXR5LT5yeHBhdXNlICAgPSBhYmlsaXR5LnJ4cGF1c2U7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcG9ydF9tYWNGb3JjZUxpbmtFeHRfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IGV4dGVybmFsIGludGVyZmFjZSBmb3JjZSBsaW5raW5nIGNvbmZpZ3VyYXRpb24uCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgICAgIC0gZXh0ZXJuYWwgcG9ydCBJRAorICogICAgICBtb2RlICAgICAgICAgICAgLSBleHRlcm5hbCBpbnRlcmZhY2UgbW9kZQorICogICAgICBwUG9ydGFiaWxpdHkgICAgLSBwb3J0IGFiaWxpdHkgY29uZmlndXJhdGlvbgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBjYW4gc2V0IGV4dGVybmFsIGludGVyZmFjZSBmb3JjZSBtb2RlIHByb3BlcnRpZXMuCisgKiAgICAgIFRoZSBleHRlcm5hbCBpbnRlcmZhY2UgY2FuIGJlIHNldCB0bzoKKyAqICAgICAgLSBNT0RFX0VYVF9ESVNBQkxFLAorICogICAgICAtIE1PREVfRVhUX1JHTUlJLAorICogICAgICAtIE1PREVfRVhUX01JSV9NQUMsCisgKiAgICAgIC0gTU9ERV9FWFRfTUlJX1BIWSwKKyAqICAgICAgLSBNT0RFX0VYVF9UTUlJX01BQywKKyAqICAgICAgLSBNT0RFX0VYVF9UTUlJX1BIWSwKKyAqICAgICAgLSBNT0RFX0VYVF9HTUlJLAorICogICAgICAtIE1PREVfRVhUX1JNSUlfTUFDLAorICogICAgICAtIE1PREVfRVhUX1JNSUlfUEhZLAorICogICAgICAtIE1PREVfRVhUX1NHTUlJLAorICogICAgICAtIE1PREVfRVhUX0hTR01JSSwKKyAqICAgICAgLSBNT0RFX0VYVF8xMDAwWF8xMDBGWCwKKyAqICAgICAgLSBNT0RFX0VYVF8xMDAwWCwKKyAqICAgICAgLSBNT0RFX0VYVF8xMDBGWCwKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfcG9ydF9tYWNGb3JjZUxpbmtFeHRfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX21vZGVfZXh0X3QgbW9kZSwgcnRrX3BvcnRfbWFjX2FiaWxpdHlfdCAqcFBvcnRhYmlsaXR5KQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0bDgzNjdjX3BvcnRfYWJpbGl0eV90IGFiaWxpdHk7CisgICAgcnRrX3VpbnQzMiBleHRfaWQ7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgUG9ydCBWYWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9JU19FWFQocG9ydCk7CisKKyAgICBpZihOVUxMID09IHBQb3J0YWJpbGl0eSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAobW9kZSA+PU1PREVfRVhUX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmKG1vZGUgPT0gTU9ERV9FWFRfSFNHTUlJKQorICAgIHsKKyAgICAgICAgaWYgKHBQb3J0YWJpbGl0eS0+Zm9yY2Vtb2RlID4gMSB8fCBwUG9ydGFiaWxpdHktPnNwZWVkICE9IFBPUlRfU1BFRURfMjUwME0gfHwgcFBvcnRhYmlsaXR5LT5kdXBsZXggIT0gUE9SVF9GVUxMX0RVUExFWCB8fAorICAgICAgICAgICBwUG9ydGFiaWxpdHktPmxpbmsgPj0gUE9SVF9MSU5LU1RBVFVTX0VORCB8fCBwUG9ydGFiaWxpdHktPm53YXkgPiAxIHx8IHBQb3J0YWJpbGl0eS0+dHhwYXVzZSA+IDEgfHwgcFBvcnRhYmlsaXR5LT5yeHBhdXNlID4gMSkKKyAgICAgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICAgICAgaWYocnRrX3N3aXRjaF9pc0hzZ1BvcnQocG9ydCkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAocFBvcnRhYmlsaXR5LT5mb3JjZW1vZGUgPiAxIHx8IHBQb3J0YWJpbGl0eS0+c3BlZWQgPiBQT1JUX1NQRUVEXzEwMDBNIHx8IHBQb3J0YWJpbGl0eS0+ZHVwbGV4ID49IFBPUlRfRFVQTEVYX0VORCB8fAorICAgICAgICAgICBwUG9ydGFiaWxpdHktPmxpbmsgPj0gUE9SVF9MSU5LU1RBVFVTX0VORCB8fCBwUG9ydGFiaWxpdHktPm53YXkgPiAxIHx8IHBQb3J0YWJpbGl0eS0+dHhwYXVzZSA+IDEgfHwgcFBvcnRhYmlsaXR5LT5yeHBhdXNlID4gMSkKKyAgICAgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisgICAgfQorCisgICAgZXh0X2lkID0gcG9ydCAtIDE1OworCisgICAgaWYobW9kZSA9PSBNT0RFX0VYVF9ESVNBQkxFKQorICAgIHsKKyAgICAgICAgbWVtc2V0KCZhYmlsaXR5LCAweDAwLCBzaXplb2YocnRsODM2N2NfcG9ydF9hYmlsaXR5X3QpKTsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUG9ydEZvcmNlTGlua0V4dChleHRfaWQsICZhYmlsaXR5KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQb3J0RXh0TW9kZShleHRfaWQsIG1vZGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQb3J0RXh0TW9kZShleHRfaWQsIG1vZGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BvcnRGb3JjZUxpbmtFeHQoZXh0X2lkLCAmYWJpbGl0eSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgYWJpbGl0eS5mb3JjZW1vZGUgPSBwUG9ydGFiaWxpdHktPmZvcmNlbW9kZTsKKyAgICAgICAgYWJpbGl0eS5zcGVlZCAgICAgPSAobW9kZSA9PSBNT0RFX0VYVF9IU0dNSUkpID8gUE9SVF9TUEVFRF8xMDAwTSA6IHBQb3J0YWJpbGl0eS0+c3BlZWQ7CisgICAgICAgIGFiaWxpdHkuZHVwbGV4ICAgID0gcFBvcnRhYmlsaXR5LT5kdXBsZXg7CisgICAgICAgIGFiaWxpdHkubGluayAgICAgID0gcFBvcnRhYmlsaXR5LT5saW5rOworICAgICAgICBhYmlsaXR5Lm53YXkgICAgICA9IHBQb3J0YWJpbGl0eS0+bndheTsKKyAgICAgICAgYWJpbGl0eS50eHBhdXNlICAgPSBwUG9ydGFiaWxpdHktPnR4cGF1c2U7CisgICAgICAgIGFiaWxpdHkucnhwYXVzZSAgID0gcFBvcnRhYmlsaXR5LT5yeHBhdXNlOworCisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BvcnRGb3JjZUxpbmtFeHQoZXh0X2lkLCAmYWJpbGl0eSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3BvcnRfbWFjRm9yY2VMaW5rRXh0X2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBleHRlcm5hbCBpbnRlcmZhY2UgZm9yY2UgbGlua2luZyBjb25maWd1cmF0aW9uLgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgICAgICAtIGV4dGVybmFsIHBvcnQgSUQKKyAqIE91dHB1dDoKKyAqICAgICAgcE1vZGUgICAgICAgICAgIC0gZXh0ZXJuYWwgaW50ZXJmYWNlIG1vZGUKKyAqICAgICAgcFBvcnRhYmlsaXR5ICAgIC0gcG9ydCBhYmlsaXR5IGNvbmZpZ3VyYXRpb24KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBnZXQgZXh0ZXJuYWwgaW50ZXJmYWNlIGZvcmNlIG1vZGUgcHJvcGVydGllcy4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfcG9ydF9tYWNGb3JjZUxpbmtFeHRfZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX21vZGVfZXh0X3QgKnBNb2RlLCBydGtfcG9ydF9tYWNfYWJpbGl0eV90ICpwUG9ydGFiaWxpdHkpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRsODM2N2NfcG9ydF9hYmlsaXR5X3QgYWJpbGl0eTsKKyAgICBydGtfdWludDMyIGV4dF9pZDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBQb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX0lTX0VYVChwb3J0KTsKKworICAgIGlmKE5VTEwgPT0gcE1vZGUpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYoTlVMTCA9PSBwUG9ydGFiaWxpdHkpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgZXh0X2lkID0gcG9ydCAtIDE1OworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUG9ydEV4dE1vZGUoZXh0X2lkLCAocnRrX3VpbnQzMiAqKXBNb2RlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUG9ydEZvcmNlTGlua0V4dChleHRfaWQsICZhYmlsaXR5KSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcFBvcnRhYmlsaXR5LT5mb3JjZW1vZGUgPSBhYmlsaXR5LmZvcmNlbW9kZTsKKyAgICBwUG9ydGFiaWxpdHktPnNwZWVkICAgICA9ICgqcE1vZGUgPT0gTU9ERV9FWFRfSFNHTUlJKSA/IFBPUlRfU1BFRURfMjUwME0gOiBhYmlsaXR5LnNwZWVkOworICAgIHBQb3J0YWJpbGl0eS0+ZHVwbGV4ICAgID0gYWJpbGl0eS5kdXBsZXg7CisgICAgcFBvcnRhYmlsaXR5LT5saW5rICAgICAgPSBhYmlsaXR5Lmxpbms7CisgICAgcFBvcnRhYmlsaXR5LT5ud2F5ICAgICAgPSBhYmlsaXR5Lm53YXk7CisgICAgcFBvcnRhYmlsaXR5LT50eHBhdXNlICAgPSBhYmlsaXR5LnR4cGF1c2U7CisgICAgcFBvcnRhYmlsaXR5LT5yeHBhdXNlICAgPSBhYmlsaXR5LnJ4cGF1c2U7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworCit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wb3J0X21hY1N0YXR1c19nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcG9ydCBsaW5rIHN0YXR1cy4KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqIE91dHB1dDoKKyAqICAgICAgcFBvcnRzdGF0dXMgLSBwb3J0IGFiaWxpdHkgY29uZmlndXJhdGlvbgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBnZXQgUG9ydC9QSFkgcHJvcGVydGllcy4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfcG9ydF9tYWNTdGF0dXNfZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3BvcnRfbWFjX2FiaWxpdHlfdCAqcFBvcnRzdGF0dXMpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRsODM2N2NfcG9ydF9zdGF0dXNfdCBzdGF0dXM7CisgICAgcnRrX3VpbnQzMiBoc2dzZWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgUG9ydCBWYWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwb3J0KTsKKworICAgIGlmKE5VTEwgPT0gcFBvcnRzdGF0dXMpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUG9ydFN0YXR1cyhydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgJnN0YXR1cykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworCisgICAgcFBvcnRzdGF0dXMtPmR1cGxleCAgICA9IHN0YXR1cy5kdXBsZXg7CisgICAgcFBvcnRzdGF0dXMtPmxpbmsgICAgICA9IHN0YXR1cy5saW5rOworICAgIHBQb3J0c3RhdHVzLT5ud2F5ICAgICAgPSBzdGF0dXMubndheTsKKyAgICBwUG9ydHN0YXR1cy0+dHhwYXVzZSAgID0gc3RhdHVzLnR4cGF1c2U7CisgICAgcFBvcnRzdGF0dXMtPnJ4cGF1c2UgICA9IHN0YXR1cy5yeHBhdXNlOworCisgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19TRFNfTUlTQywgUlRMODM2N0NfQ0ZHX01BQzhfU0VMX0hTR01JSV9PRkZTRVQsICZoc2dzZWwpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYoIChydGtfc3dpdGNoX2lzSHNnUG9ydChwb3J0KSA9PSBSVF9FUlJfT0spICYmIChoc2dzZWwgPT0gMSkgKQorICAgICAgICBwUG9ydHN0YXR1cy0+c3BlZWQgPSBQT1JUX1NQRUVEXzI1MDBNOworICAgIGVsc2UKKyAgICAgICAgcFBvcnRzdGF0dXMtPnNwZWVkID0gc3RhdHVzLnNwZWVkOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3BvcnRfbWFjTG9jYWxMb29wYmFja0VuYWJsZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgUG9ydCBMb2NhbCBMb29wYmFjay4gKFJlZGlyZWN0IFRYIHRvIFJYLikKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUG9ydCBpZC4KKyAqICAgICAgZW5hYmxlICAtIExvb3BiYWNrIHN0YXRlLCAwOmRpc2FibGUsIDE6ZW5hYmxlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgY2FuIGVuYWJsZS9kaXNhYmxlIExvY2FsIGxvb3BiYWNrIGluIE1BQy4KKyAqICAgICAgRm9yIFVUUCBwb3J0LCBUaGlzIEFQSSB3aWxsIGFsc28gZW5hYmxlIHRoZSBkaWdpdGFsCisgKiAgICAgIGxvb3BiYWNrIGJpdCBpbiBQSFkgcmVnaXN0ZXIgZm9yIHN5bmMgb2Ygc3BlZWQgYmV0d2VlbgorICogICAgICBQSFkgYW5kIE1BQy4gRm9yIEVYVCBwb3J0LCB1c2VycyBuZWVkIHRvIGZvcmNlIHRoZQorICogICAgICBsaW5rIHN0YXRlIGJ5IHRoZW1zZWxmLgorICovCitydGtfYXBpX3JldF90IHJ0a19wb3J0X21hY0xvY2FsTG9vcGJhY2tFbmFibGVfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2VuYWJsZV90IGVuYWJsZSkKK3sKKyAgICBydGtfYXBpX3JldF90ICAgcmV0VmFsOworICAgIHJ0a191aW50MzIgICAgICBkYXRhOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIENoZWNrIFBvcnQgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQocG9ydCk7CisKKyAgICBpZihlbmFibGUgPj0gUlRLX0VOQUJMRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQb3J0TG9vcGJhY2socnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIGVuYWJsZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmKHJ0a19zd2l0Y2hfaXNVdHBQb3J0KHBvcnQpID09IFJUX0VSUl9PSykKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BIWVJlZyhydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgUEhZX0NPTlRST0xfUkVHLCAmZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgaWYoZW5hYmxlID09IEVOQUJMRUQpCisgICAgICAgICAgICBkYXRhIHw9ICgweDAwMDEgPDwgMTQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkYXRhICY9IH4oMHgwMDAxIDw8IDE0KTsKKworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQSFlSZWcocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIFBIWV9DT05UUk9MX1JFRywgZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3BvcnRfbWFjTG9jYWxMb29wYmFja0VuYWJsZV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgUG9ydCBMb2NhbCBMb29wYmFjay4gKFJlZGlyZWN0IFRYIHRvIFJYLikKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUG9ydCBpZC4KKyAqIE91dHB1dDoKKyAqICAgICAgcEVuYWJsZSAgLSBMb29wYmFjayBzdGF0ZSwgMDpkaXNhYmxlLCAxOmVuYWJsZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqIE5vdGU6CisgKiAgICAgIE5vbmUuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3BvcnRfbWFjTG9jYWxMb29wYmFja0VuYWJsZV9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfZW5hYmxlX3QgKnBFbmFibGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgUG9ydCBWYWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwb3J0KTsKKworICAgIGlmKE5VTEwgPT0gcEVuYWJsZSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQb3J0TG9vcGJhY2socnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIHBFbmFibGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcG9ydF9waHlSZWdfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IFBIWSByZWdpc3RlciBkYXRhIG9mIHRoZSBzcGVjaWZpYyBwb3J0LgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBwb3J0IGlkLgorICogICAgICByZWcgICAgIC0gUmVnaXN0ZXIgaWQKKyAqICAgICAgcmVnRGF0YSAtIFJlZ2lzdGVyIGRhdGEKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9QSFlfUkVHX0lEICAgICAgIC0gSW52YWxpZCBQSFkgYWRkcmVzcworICogICAgICBSVF9FUlJfQlVTWVdBSVRfVElNRU9VVCAtIFBIWSBhY2Nlc3MgYnVzeQorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgY2FuIHNldCBQSFkgcmVnaXN0ZXIgZGF0YSBvZiB0aGUgc3BlY2lmaWMgcG9ydC4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfcG9ydF9waHlSZWdfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3BvcnRfcGh5X3JlZ190IHJlZywgcnRrX3BvcnRfcGh5X2RhdGFfdCByZWdEYXRhKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIENoZWNrIFBvcnQgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfSVNfVVRQKHBvcnQpOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUEhZUmVnKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCByZWcsIHJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcG9ydF9waHlSZWdfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFBIWSByZWdpc3RlciBkYXRhIG9mIHRoZSBzcGVjaWZpYyBwb3J0LgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBQb3J0IGlkLgorICogICAgICByZWcgICAgIC0gUmVnaXN0ZXIgaWQKKyAqIE91dHB1dDoKKyAqICAgICAgcERhdGEgICAtIFJlZ2lzdGVyIGRhdGEKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfUEhZX1JFR19JRCAgICAgICAtIEludmFsaWQgUEhZIGFkZHJlc3MKKyAqICAgICAgUlRfRVJSX0JVU1lXQUlUX1RJTUVPVVQgLSBQSFkgYWNjZXNzIGJ1c3kKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBnZXQgUEhZIHJlZ2lzdGVyIGRhdGEgb2YgdGhlIHNwZWNpZmljIHBvcnQuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3BvcnRfcGh5UmVnX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19wb3J0X3BoeV9yZWdfdCByZWcsIHJ0a19wb3J0X3BoeV9kYXRhX3QgKnBEYXRhKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIENoZWNrIFBvcnQgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfSVNfVVRQKHBvcnQpOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUEhZUmVnKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCByZWcsIHBEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3BvcnRfYmFja3ByZXNzdXJlRW5hYmxlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCB0aGUgaGFsZiBkdXBsZXggYmFja3ByZXNzdXJlIGVuYWJsZSBzdGF0dXMgb2YgdGhlIHNwZWNpZmljIHBvcnQuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIHBvcnQgaWQuCisgKiAgICAgIGVuYWJsZSAgLSBCYWNrIHByZXNzdXJlIHN0YXR1cy4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqICAgICAgUlRfRVJSX0VOQUJMRSAgICAgICAtIEludmFsaWQgZW5hYmxlIGlucHV0LgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgY2FuIHNldCB0aGUgaGFsZiBkdXBsZXggYmFja3ByZXNzdXJlIGVuYWJsZSBzdGF0dXMgb2YgdGhlIHNwZWNpZmljIHBvcnQuCisgKiAgICAgIFRoZSBoYWxmIGR1cGxleCBiYWNrcHJlc3N1cmUgZW5hYmxlIHN0YXR1cyBvZiB0aGUgcG9ydCBpcyBhcyBmb2xsb3dpbmc6CisgKiAgICAgIC0gRElTQUJMRShEZWZlcikKKyAqICAgICAgLSBFTkFCTEUgKEJhY2twcmVzc3VyZSkKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfcG9ydF9iYWNrcHJlc3N1cmVFbmFibGVfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2VuYWJsZV90IGVuYWJsZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAocG9ydCAhPSBSVEtfV0hPTEVfU1lTVEVNKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICBpZiAoZW5hYmxlID49IFJUS19FTkFCTEVfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUG9ydEphbU1vZGUoIWVuYWJsZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wb3J0X2JhY2twcmVzc3VyZUVuYWJsZV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgdGhlIGhhbGYgZHVwbGV4IGJhY2twcmVzc3VyZSBlbmFibGUgc3RhdHVzIG9mIHRoZSBzcGVjaWZpYyBwb3J0LgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBQb3J0IGlkLgorICogT3V0cHV0OgorICogICAgICBwRW5hYmxlIC0gQmFjayBwcmVzc3VyZSBzdGF0dXMuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgY2FuIGdldCB0aGUgaGFsZiBkdXBsZXggYmFja3ByZXNzdXJlIGVuYWJsZSBzdGF0dXMgb2YgdGhlIHNwZWNpZmljIHBvcnQuCisgKiAgICAgIFRoZSBoYWxmIGR1cGxleCBiYWNrcHJlc3N1cmUgZW5hYmxlIHN0YXR1cyBvZiB0aGUgcG9ydCBpcyBhcyBmb2xsb3dpbmc6CisgKiAgICAgIC0gRElTQUJMRShEZWZlcikKKyAqICAgICAgLSBFTkFCTEUgKEJhY2twcmVzc3VyZSkKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfcG9ydF9iYWNrcHJlc3N1cmVFbmFibGVfZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2VuYWJsZV90ICpwRW5hYmxlKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcmVnRGF0YTsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAocG9ydCAhPSBSVEtfV0hPTEVfU1lTVEVNKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICBpZihOVUxMID09IHBFbmFibGUpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUG9ydEphbU1vZGUoJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAqcEVuYWJsZSA9ICFyZWdEYXRhOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3BvcnRfYWRtaW5FbmFibGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHBvcnQgYWRtaW4gY29uZmlndXJhdGlvbiBvZiB0aGUgc3BlY2lmaWMgcG9ydC4KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gcG9ydCBpZC4KKyAqICAgICAgZW5hYmxlICAtIEJhY2sgcHJlc3N1cmUgc3RhdHVzLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfRU5BQkxFICAgICAgIC0gSW52YWxpZCBlbmFibGUgaW5wdXQuCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBjYW4gc2V0IHBvcnQgYWRtaW4gY29uZmlndXJhdGlvbiBvZiB0aGUgc3BlY2lmaWMgcG9ydC4KKyAqICAgICAgVGhlIHBvcnQgYWRtaW4gY29uZmlndXJhdGlvbiBvZiB0aGUgcG9ydCBpcyBhcyBmb2xsb3dpbmc6CisgKiAgICAgIC0gRElTQUJMRQorICogICAgICAtIEVOQUJMRQorICovCitydGtfYXBpX3JldF90IHJ0a19wb3J0X2FkbWluRW5hYmxlX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19lbmFibGVfdCBlbmFibGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiAgICAgIGRhdGE7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgUG9ydCBWYWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9JU19VVFAocG9ydCk7CisKKyAgICBpZiAoZW5hYmxlID49IFJUS19FTkFCTEVfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYgKChyZXRWYWwgPSBydGtfcG9ydF9waHlSZWdfZ2V0KHBvcnQsIFBIWV9DT05UUk9MX1JFRywgJmRhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoRU5BQkxFRCA9PSBlbmFibGUpCisgICAgeworICAgICAgICBkYXRhICY9IDB4RjdGRjsKKyAgICAgICAgZGF0YSB8PSAweDAyMDA7CisgICAgfQorICAgIGVsc2UgaWYgKERJU0FCTEVEID09IGVuYWJsZSkKKyAgICB7CisgICAgICAgIGRhdGEgfD0gMHgwODAwOworICAgIH0KKworICAgIGlmICgocmV0VmFsID0gcnRrX3BvcnRfcGh5UmVnX3NldChwb3J0LCBQSFlfQ09OVFJPTF9SRUcsIGRhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcG9ydF9hZG1pbkVuYWJsZV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcG9ydCBhZG1pbiBjb25maWd1cmF0aW9ub2YgdGhlIHNwZWNpZmljIHBvcnQuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBFbmFibGUgLSBCYWNrIHByZXNzdXJlIHN0YXR1cy4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBjYW4gZ2V0IHBvcnQgYWRtaW4gY29uZmlndXJhdGlvbiBvZiB0aGUgc3BlY2lmaWMgcG9ydC4KKyAqICAgICAgVGhlIHBvcnQgYWRtaW4gY29uZmlndXJhdGlvbiBvZiB0aGUgcG9ydCBpcyBhcyBmb2xsb3dpbmc6CisgKiAgICAgIC0gRElTQUJMRQorICogICAgICAtIEVOQUJMRQorICovCitydGtfYXBpX3JldF90IHJ0a19wb3J0X2FkbWluRW5hYmxlX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19lbmFibGVfdCAqcEVuYWJsZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyICAgICAgZGF0YTsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBQb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX0lTX1VUUChwb3J0KTsKKworICAgIGlmKE5VTEwgPT0gcEVuYWJsZSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0a19wb3J0X3BoeVJlZ19nZXQocG9ydCwgUEhZX0NPTlRST0xfUkVHLCAmZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICggKGRhdGEgJiAweDA4MDApID09IDB4MDgwMCkKKyAgICB7CisgICAgICAgICpwRW5hYmxlID0gRElTQUJMRUQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpwRW5hYmxlID0gRU5BQkxFRDsKKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcG9ydF9pc29sYXRpb25fc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHBlcm1pdHRlZCBwb3J0IGlzb2xhdGlvbiBwb3J0bWFzaworICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgICAtIHBvcnQgaWQuCisgKiAgICAgIHBQb3J0bWFzayAgICAtIFBlcm1pdCBwb3J0IG1hc2sKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqICAgICAgUlRfRVJSX1BPUlRfTUFTSyAgICAtIEludmFsaWQgcG9ydG1hc2suCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBzZXQgdGhlIHBvcnQgbWFzayB0aGF0IGEgcG9ydCBjYW4gdHJhc21pdCBwYWNrZXQgdG8gb2YgZWFjaCBwb3J0CisgKiAgICAgIEEgcG9ydCBjYW4gb25seSB0cmFuc21pdCBwYWNrZXQgdG8gcG9ydHMgaW5jbHVkZWQgaW4gcGVybWl0dGVkIHBvcnRtYXNrCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3BvcnRfaXNvbGF0aW9uX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19wb3J0bWFza190ICpwUG9ydG1hc2spCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBwbWFzazsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBQb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgaWYoTlVMTCA9PSBwUG9ydG1hc2spCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgLyogY2hlY2sgcG9ydCBtYXNrICovCisgICAgUlRLX0NIS19QT1JUTUFTS19WQUxJRChwUG9ydG1hc2spOworCisgICAgaWYgKChyZXRWYWwgPSBydGtfc3dpdGNoX3BvcnRtYXNrX0wyUF9nZXQocFBvcnRtYXNrLCAmcG1hc2spKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQb3J0SXNvbGF0aW9uUGVybWl0dGVkUG9ydG1hc2socnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIHBtYXNrKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3BvcnRfaXNvbGF0aW9uX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwZXJtaXR0ZWQgcG9ydCBpc29sYXRpb24gcG9ydG1hc2sKKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqIE91dHB1dDoKKyAqICAgICAgcFBvcnRtYXNrIC0gUGVybWl0IHBvcnQgbWFzaworICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGdldCB0aGUgcG9ydCBtYXNrIHRoYXQgYSBwb3J0IGNhbiB0cmFzbWl0IHBhY2tldCB0byBvZiBlYWNoIHBvcnQKKyAqICAgICAgQSBwb3J0IGNhbiBvbmx5IHRyYW5zbWl0IHBhY2tldCB0byBwb3J0cyBpbmNsdWRlZCBpbiBwZXJtaXR0ZWQgcG9ydG1hc2sKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfcG9ydF9pc29sYXRpb25fZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3BvcnRtYXNrX3QgKnBQb3J0bWFzaykKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHBtYXNrOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIENoZWNrIFBvcnQgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQocG9ydCk7CisKKyAgICBpZihOVUxMID09IHBQb3J0bWFzaykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQb3J0SXNvbGF0aW9uUGVybWl0dGVkUG9ydG1hc2socnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksICZwbWFzaykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRrX3N3aXRjaF9wb3J0bWFza19QMkxfZ2V0KHBtYXNrLCBwUG9ydG1hc2spKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcG9ydF9yZ21paURlbGF5RXh0X3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBSR01JSSBpbnRlcmZhY2UgZGVsYXkgdmFsdWUgZm9yIFRYIGFuZCBSWC4KKyAqIElucHV0OgorICogICAgICB0eERlbGF5IC0gVFggZGVsYXkgdmFsdWUsIDEgZm9yIGRlbGF5IDJucyBhbmQgMCBmb3Igbm8tZGVsYXkKKyAqICAgICAgcnhEZWxheSAtIFJYIGRlbGF5IHZhbHVlLCAwfjcgZm9yIGRlbGF5IHNldHVwLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBjYW4gc2V0IGV4dGVybmFsIGludGVyZmFjZSAyIFJHTUlJIGRlbGF5LgorICogICAgICBJbiBUWCBkZWxheSwgdGhlcmUgYXJlIDIgc2VsZWN0aW9uOiBuby1kZWxheSBhbmQgMm5zIGRlbGF5LgorICogICAgICBJbiBSWCBkZWtheSwgdGhlcmUgYXJlIDggc3RlcHMgZm9yIGRlbGF5IHR1bm5pbmcuIDAgZm9yIG5vLWRlbGF5LCBhbmQgNyBmb3IgbWF4aW11bSBkZWxheS4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfcG9ydF9yZ21paURlbGF5RXh0X3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19kYXRhX3QgdHhEZWxheSwgcnRrX2RhdGFfdCByeERlbGF5KQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcmVnQWRkciwgcmVnRGF0YTsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBQb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX0lTX0VYVChwb3J0KTsKKworICAgIGlmICgodHhEZWxheSA+IDEpIHx8IChyeERlbGF5ID4gNykpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZihwb3J0ID09IEVYVF9QT1JUMCkKKyAgICAgICAgcmVnQWRkciA9IFJUTDgzNjdDX1JFR19FWFQxX1JHTVhGOworICAgIGVsc2UgaWYocG9ydCA9PSBFWFRfUE9SVDEpCisgICAgICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19SRUdfRVhUMl9SR01YRjsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcocmVnQWRkciwgJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZWdEYXRhID0gKHJlZ0RhdGEgJiAweEZGRjApIHwgKCh0eERlbGF5IDw8IDMpICYgMHgwMDA4KSB8IChyeERlbGF5ICYgMHgwMDA3KTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhyZWdBZGRyLCByZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3BvcnRfcmdtaWlEZWxheUV4dF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgUkdNSUkgaW50ZXJmYWNlIGRlbGF5IHZhbHVlIGZvciBUWCBhbmQgUlguCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwVHhEZWxheSAtIFRYIGRlbGF5IHZhbHVlCisgKiAgICAgIHBSeERlbGF5IC0gUlggZGVsYXkgdmFsdWUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBzZXQgZXh0ZXJuYWwgaW50ZXJmYWNlIDIgUkdNSUkgZGVsYXkuCisgKiAgICAgIEluIFRYIGRlbGF5LCB0aGVyZSBhcmUgMiBzZWxlY3Rpb246IG5vLWRlbGF5IGFuZCAybnMgZGVsYXkuCisgKiAgICAgIEluIFJYIGRla2F5LCB0aGVyZSBhcmUgOCBzdGVwcyBmb3IgZGVsYXkgdHVubmluZy4gMCBmb3IgbjAtZGVsYXksIGFuZCA3IGZvciBtYXhpbXVtIGRlbGF5LgorICovCitydGtfYXBpX3JldF90IHJ0a19wb3J0X3JnbWlpRGVsYXlFeHRfZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2RhdGFfdCAqcFR4RGVsYXksIHJ0a19kYXRhX3QgKnBSeERlbGF5KQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcmVnQWRkciwgcmVnRGF0YTsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBQb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX0lTX0VYVChwb3J0KTsKKworICAgIGlmKCAoTlVMTCA9PSBwVHhEZWxheSkgfHwgKE5VTEwgPT0gcFJ4RGVsYXkpICkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZihwb3J0ID09IEVYVF9QT1JUMCkKKyAgICAgICAgcmVnQWRkciA9IFJUTDgzNjdDX1JFR19FWFQxX1JHTVhGOworICAgIGVsc2UgaWYocG9ydCA9PSBFWFRfUE9SVDEpCisgICAgICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19SRUdfRVhUMl9SR01YRjsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcocmVnQWRkciwgJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAqcFR4RGVsYXkgPSAocmVnRGF0YSAmIDB4MDAwOCkgPj4gMzsKKyAgICAqcFJ4RGVsYXkgPSByZWdEYXRhICYgMHgwMDA3OworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3BvcnRfcGh5RW5hYmxlQWxsX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBhbGwgUEhZIGVuYWJsZSBzdGF0dXMuCisgKiBJbnB1dDoKKyAqICAgICAgZW5hYmxlIC0gUEhZIEVuYWJsZSBTdGF0ZS4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfRU5BQkxFICAgICAgIC0gSW52YWxpZCBlbmFibGUgaW5wdXQuCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBjYW4gc2V0IGFsbCBQSFkgc3RhdHVzLgorICogICAgICBUaGUgY29uZmlndXJhdGlvbiBvZiBhbGwgUEhZIGlzIGFzIGZvbGxvd2luZzoKKyAqICAgICAgLSBESVNBQkxFCisgKiAgICAgIC0gRU5BQkxFCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3BvcnRfcGh5RW5hYmxlQWxsX3NldChydGtfZW5hYmxlX3QgZW5hYmxlKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgZGF0YTsKKyAgICBydGtfdWludDMyIHBvcnQ7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKGVuYWJsZSA+PSBSVEtfRU5BQkxFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9FTkFCTEU7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQb3J0RW5hYmxlQWxsKGVuYWJsZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIFJUS19TQ0FOX0FMTF9MT0dfUE9SVChwb3J0KQorICAgIHsKKyAgICAgICAgaWYocnRrX3N3aXRjaF9pc1V0cFBvcnQocG9ydCkgPT0gUlRfRVJSX09LKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0a19wb3J0X3BoeVJlZ19nZXQocG9ydCwgUEhZX0NPTlRST0xfUkVHLCAmZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZiAoRU5BQkxFRCA9PSBlbmFibGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGF0YSAmPSAweEY3RkY7CisgICAgICAgICAgICAgICAgZGF0YSB8PSAweDAyMDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGF0YSB8PSAweDA4MDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRrX3BvcnRfcGh5UmVnX3NldChwb3J0LCBQSFlfQ09OVFJPTF9SRUcsIGRhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT0s7CisKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3BvcnRfcGh5RW5hYmxlQWxsX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBhbGwgUEhZIGVuYWJsZSBzdGF0dXMuCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwRW5hYmxlIC0gUEhZIEVuYWJsZSBTdGF0ZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBzZXQgYWxsIFBIWSBzdGF0dXMuCisgKiAgICAgIFRoZSBjb25maWd1cmF0aW9uIG9mIGFsbCBQSFkgaXMgYXMgZm9sbG93aW5nOgorICogICAgICAtIERJU0FCTEUKKyAqICAgICAgLSBFTkFCTEUKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfcG9ydF9waHlFbmFibGVBbGxfZ2V0KHJ0a19lbmFibGVfdCAqcEVuYWJsZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBFbmFibGUpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUG9ydEVuYWJsZUFsbChwRW5hYmxlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3BvcnRfZWZpZF9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgcG9ydC1iYXNlZCBlbmhhbmNlZCBmaWx0ZXJpbmcgZGF0YWJhc2UKKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqICAgICAgZWZpZCAtIFNwZWNpZmllZCBlbmhhbmNlZCBmaWx0ZXJpbmcgZGF0YWJhc2UuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0wyX0ZJRCAtIEludmFsaWQgZmlkLgorICogICAgICBSVF9FUlJfSU5QVVQgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlci4KKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgLSBJbnZhbGlkIHBvcnQgSUQuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBzZXQgcG9ydC1iYXNlZCBlbmhhbmNlZCBmaWx0ZXJpbmcgZGF0YWJhc2UuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3BvcnRfZWZpZF9zZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfZGF0YV90IGVmaWQpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgUG9ydCBWYWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwb3J0KTsKKworICAgIC8qIGVmaWQgbXVzdCBiZSAwfjcgKi8KKyAgICBpZiAoZWZpZCA+IFJUS19FRklEX01BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BvcnRJc29sYXRpb25FZmlkKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCBlZmlkKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wb3J0X2VmaWRfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHBvcnQtYmFzZWQgZW5oYW5jZWQgZmlsdGVyaW5nIGRhdGFiYXNlCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBFZmlkIC0gU3BlY2lmaWVkIGVuaGFuY2VkIGZpbHRlcmluZyBkYXRhYmFzZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogICAgICBSVF9FUlJfUE9SVF9JRCAtIEludmFsaWQgcG9ydCBJRC4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGdldCBwb3J0LWJhc2VkIGVuaGFuY2VkIGZpbHRlcmluZyBkYXRhYmFzZSBzdGF0dXMuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3BvcnRfZWZpZF9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfZGF0YV90ICpwRWZpZCkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBQb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgaWYoTlVMTCA9PSBwRWZpZCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQb3J0SXNvbGF0aW9uRWZpZChydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgcEVmaWQpKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3BvcnRfcGh5Q29tYm9Qb3J0TWVkaWFfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IENvbWJvIHBvcnQgbWVkaWEgdHlwZQorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBQb3J0IGlkLgorICogICAgICBtZWRpYSAgIC0gTWVkaWEgKENPUFBFUiBvciBGSUJFUikKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgIC0gSW52YWxpZCBwb3J0IElELgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gU2V0IENvbWJvIHBvcnQgbWVkaWEgdHlwZS4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfcG9ydF9waHlDb21ib1BvcnRNZWRpYV9zZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfcG9ydF9tZWRpYV90IG1lZGlhKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcmVnRGF0YTsKKyAgICBydGtfdWludDMyIGlkeDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBQb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX0lTX1VUUChwb3J0KTsKKworICAgIC8qIENoZWNrIENvbWJvIFBvcnQgSUQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfSVNfQ09NQk8ocG9ydCk7CisKKyAgICBpZiAobWVkaWEgPj0gUE9SVF9NRURJQV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDEzQzIsIDB4MDI0OSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKDB4MTMwMCwgJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDEzQzIsIDB4MDAwMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmKHJlZ0RhdGEgIT0gMHg2MzY3KQorICAgICAgICByZXR1cm4gUlRfRVJSX0NISVBfTk9UX1NVUFBPUlRFRDsKKworICAgIGlmKG1lZGlhID09IFBPUlRfTUVESUFfRklCRVIpCisgICAgeworICAgICAgICAvKiBzb2Z0d2FyZSBpbml0ICovCisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfQ0hJUF9SRVNFVCwgUlRMODM2N0NfRFc4MDUxX1JTVF9PRkZTRVQsIDEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfTUlTQ0VMTEFORU9VU19DT05GSUdVUkUwLCBSVEw4MzY3Q19EVzgwNTFfRU5fT0ZGU0VULCAxKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0RXODA1MV9SRFksIFJUTDgzNjdDX0FDU19JUk9NX0VOQUJMRV9PRkZTRVQsIDEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfRFc4MDUxX1JEWSwgUlRMODM2N0NfSVJPTV9NU0JfT0ZGU0VULCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBmb3IoaWR4ID0gMDsgaWR4IDwgRklCRVJfSU5JVF9TSVpFOyBpZHgrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4RTAwMCArIGlkeCwgKHJ0a191aW50MzIpRmliZXJbaWR4XSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19EVzgwNTFfUkRZLCBSVEw4MzY3Q19JUk9NX01TQl9PRkZTRVQsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfRFc4MDUxX1JEWSwgUlRMODM2N0NfQUNTX0lST01fRU5BQkxFX09GRlNFVCwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19DSElQX1JFU0VULCBSVEw4MzY3Q19EVzgwNTFfUlNUX09GRlNFVCwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfVVRQX0ZJQl9ERVQsIFJUTDgzNjdDX1VUUF9GSVJTVF9PRkZTRVQsIDEpKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0RXODA1MV9SRFksIFJUTDgzNjdDX0RXODA1MV9SRUFEWV9PRkZTRVQsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wb3J0X3BoeUNvbWJvUG9ydE1lZGlhX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBDb21ibyBwb3J0IG1lZGlhIHR5cGUKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUG9ydCBpZC4KKyAqIE91dHB1dDoKKyAqICAgICAgcE1lZGlhICAtIE1lZGlhIChDT1BQRVIgb3IgRklCRVIpCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAtIEludmFsaWQgcG9ydCBJRC4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIFNldCBDb21ibyBwb3J0IG1lZGlhIHR5cGUuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3BvcnRfcGh5Q29tYm9Qb3J0TWVkaWFfZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3BvcnRfbWVkaWFfdCAqcE1lZGlhKQoreworICAgIHJ0a19hcGlfcmV0X3QgICByZXRWYWw7CisgICAgcnRrX3VpbnQzMiAgICAgIHJlZ0RhdGE7CisgICAgcnRrX3VpbnQzMiAgICAgIGRhdGE7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgUG9ydCBWYWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9JU19VVFAocG9ydCk7CisKKyAgICAvKiBDaGVjayBDb21ibyBQb3J0IElEICovCisgICAgUlRLX0NIS19QT1JUX0lTX0NPTUJPKHBvcnQpOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHgxM0MyLCAweDAyNDkpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZygweDEzMDAsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHgxM0MyLCAweDAwMDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZihyZWdEYXRhICE9IDB4NjM2NykKKyAgICB7CisgICAgICAgICpwTWVkaWEgPSBQT1JUX01FRElBX0NPUFBFUjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19VVFBfRklCX0RFVCwgUlRMODM2N0NfVVRQX0ZJUlNUX09GRlNFVCwgJmRhdGEpKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgaWYoZGF0YSA9PSAxKQorICAgICAgICAgICAgKnBNZWRpYSA9IFBPUlRfTUVESUFfQ09QUEVSOworICAgICAgICBlbHNlCisgICAgICAgICAgICAqcE1lZGlhID0gUE9SVF9NRURJQV9GSUJFUjsKKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcG9ydF9ydGN0RW5hYmxlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEVuYWJsZSBSVENUIHRlc3QKKyAqIElucHV0OgorICogICAgICBwUG9ydG1hc2sgICAgLSBQb3J0IG1hc2sgb2YgUlRDVCBlbmFibGVkIHBvcnQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9NQVNLICAgICAgICAtIEludmFsaWQgcG9ydCBtYXNrLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZW5hYmxlIFJUQ1QgVGVzdAorICovCitydGtfYXBpX3JldF90IHJ0a19wb3J0X3J0Y3RFbmFibGVfc2V0KHJ0a19wb3J0bWFza190ICpwUG9ydG1hc2spCit7CisgICAgcnRrX2FwaV9yZXRfdCAgIHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBQb3J0IE1hc2sgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRNQVNLX1ZBTElEX09OTFlfVVRQKHBQb3J0bWFzayk7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQb3J0UlRDVEVuYWJsZShwUG9ydG1hc2stPmJpdHNbMF0pKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3BvcnRfcnRjdERpc2FibGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgRGlzYWJsZSBSVENUIHRlc3QKKyAqIElucHV0OgorICogICAgICBwUG9ydG1hc2sgICAgLSBQb3J0IG1hc2sgb2YgUlRDVCBkaXNhYmxlZCBwb3J0CisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfTUFTSyAgICAgICAgLSBJbnZhbGlkIHBvcnQgbWFzay4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGRpc2FibGUgUlRDVCBUZXN0CisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3BvcnRfcnRjdERpc2FibGVfc2V0KHJ0a19wb3J0bWFza190ICpwUG9ydG1hc2spCit7CisgICAgcnRrX2FwaV9yZXRfdCAgIHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBQb3J0IE1hc2sgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRNQVNLX1ZBTElEX09OTFlfVVRQKHBQb3J0bWFzayk7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQb3J0UlRDVERpc2FibGUocFBvcnRtYXNrLT5iaXRzWzBdKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3BvcnRfcnRjdFJlc3VsdF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgdGhlIHJlc3VsdCBvZiBSVENUIHRlc3QKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAtIFBvcnQgSUQKKyAqIE91dHB1dDoKKyAqICAgICAgcFJ0Y3RSZXN1bHQgLSBUaGUgcmVzdWx0IG9mIFJUQ1QgcmVzdWx0CisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgICAgICAtIEludmFsaWQgcG9ydCBJRC4KKyAqICAgICAgUlRfRVJSX1BIWV9SVENUX05PVF9GSU5JU0ggIC0gVGVzdGluZyBkb2VzIG5vdCBmaW5pc2guCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBnZXQgUlRDVCB0ZXN0IHJlc3VsdC4KKyAqICAgICAgUlRDVCB0ZXN0IG1heSB0YWtlcyA0Ljggc2Vjb25kcyB0byBmaW5pc2ggaXRzIHRlc3QgYXQgbW9zdC4KKyAqICAgICAgVGh1cywgaWYgdGhpcyBBUEkgcmV0dXJuIFJUX0VSUl9QSFlfUlRDVF9OT1RfRklOSVNIIG9yCisgKiAgICAgIG90aGVyIGVycm9yIGNvZGUsIHRoZSByZXN1bHQgY2FuIG5vdCBiZSByZWZlcmVuY2VkIGFuZAorICogICAgICB1c2VyIHNob3VsZCBjYWxsIHRoaXMgQVBJIGFnYWluIHVudGlsIHRoaXMgQVBJIHJldHVybnMKKyAqICAgICAgYSBSVF9FUlJfT0suCisgKiAgICAgIFRoZSByZXN1bHQgaXMgc3RvcmVkIGF0IHBSdGN0UmVzdWx0LT5nZV9yZXN1bHQKKyAqICAgICAgcFJ0Y3RSZXN1bHQtPmxpbmtUeXBlIGlzIHVudXNlZC4KKyAqICAgICAgVGhlIHVuaXQgb2YgY2hhbm5lbCBsZW5ndGggaXMgMi41Y20uIEV4LiAzMDAgbWVhbnMgMzAwICogMi41ID0gNzUwY20gPSA3LjVNCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3BvcnRfcnRjdFJlc3VsdF9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfcnRjdFJlc3VsdF90ICpwUnRjdFJlc3VsdCkKK3sKKyAgICBydGtfYXBpX3JldF90ICAgICAgICAgICAgICAgcmV0VmFsOworICAgIHJ0bDgzNjdjX3BvcnRfcnRjdF9yZXN1bHRfdCByZXN1bHQ7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgUG9ydCBWYWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9JU19VVFAocG9ydCk7CisKKyAgICBtZW1zZXQocFJ0Y3RSZXN1bHQsIDB4MDAsIHNpemVvZihydGtfcnRjdFJlc3VsdF90KSk7CisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUG9ydFJUQ1RSZXN1bHQocG9ydCwgJnJlc3VsdCkpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBwUnRjdFJlc3VsdC0+cmVzdWx0LmdlX3Jlc3VsdC5jaGFubmVsQUxlbiA9IHJlc3VsdC5jaGFubmVsQUxlbjsKKyAgICBwUnRjdFJlc3VsdC0+cmVzdWx0LmdlX3Jlc3VsdC5jaGFubmVsQkxlbiA9IHJlc3VsdC5jaGFubmVsQkxlbjsKKyAgICBwUnRjdFJlc3VsdC0+cmVzdWx0LmdlX3Jlc3VsdC5jaGFubmVsQ0xlbiA9IHJlc3VsdC5jaGFubmVsQ0xlbjsKKyAgICBwUnRjdFJlc3VsdC0+cmVzdWx0LmdlX3Jlc3VsdC5jaGFubmVsRExlbiA9IHJlc3VsdC5jaGFubmVsRExlbjsKKworICAgIHBSdGN0UmVzdWx0LT5yZXN1bHQuZ2VfcmVzdWx0LmNoYW5uZWxBTGluZWRyaXZlciA9IHJlc3VsdC5jaGFubmVsQUxpbmVkcml2ZXI7CisgICAgcFJ0Y3RSZXN1bHQtPnJlc3VsdC5nZV9yZXN1bHQuY2hhbm5lbEJMaW5lZHJpdmVyID0gcmVzdWx0LmNoYW5uZWxCTGluZWRyaXZlcjsKKyAgICBwUnRjdFJlc3VsdC0+cmVzdWx0LmdlX3Jlc3VsdC5jaGFubmVsQ0xpbmVkcml2ZXIgPSByZXN1bHQuY2hhbm5lbENMaW5lZHJpdmVyOworICAgIHBSdGN0UmVzdWx0LT5yZXN1bHQuZ2VfcmVzdWx0LmNoYW5uZWxETGluZWRyaXZlciA9IHJlc3VsdC5jaGFubmVsRExpbmVkcml2ZXI7CisKKyAgICBwUnRjdFJlc3VsdC0+cmVzdWx0LmdlX3Jlc3VsdC5jaGFubmVsQU1pc21hdGNoID0gcmVzdWx0LmNoYW5uZWxBTWlzbWF0Y2g7CisgICAgcFJ0Y3RSZXN1bHQtPnJlc3VsdC5nZV9yZXN1bHQuY2hhbm5lbEJNaXNtYXRjaCA9IHJlc3VsdC5jaGFubmVsQk1pc21hdGNoOworICAgIHBSdGN0UmVzdWx0LT5yZXN1bHQuZ2VfcmVzdWx0LmNoYW5uZWxDTWlzbWF0Y2ggPSByZXN1bHQuY2hhbm5lbENNaXNtYXRjaDsKKyAgICBwUnRjdFJlc3VsdC0+cmVzdWx0LmdlX3Jlc3VsdC5jaGFubmVsRE1pc21hdGNoID0gcmVzdWx0LmNoYW5uZWxETWlzbWF0Y2g7CisKKyAgICBwUnRjdFJlc3VsdC0+cmVzdWx0LmdlX3Jlc3VsdC5jaGFubmVsQU9wZW4gPSByZXN1bHQuY2hhbm5lbEFPcGVuOworICAgIHBSdGN0UmVzdWx0LT5yZXN1bHQuZ2VfcmVzdWx0LmNoYW5uZWxCT3BlbiA9IHJlc3VsdC5jaGFubmVsQk9wZW47CisgICAgcFJ0Y3RSZXN1bHQtPnJlc3VsdC5nZV9yZXN1bHQuY2hhbm5lbENPcGVuID0gcmVzdWx0LmNoYW5uZWxDT3BlbjsKKyAgICBwUnRjdFJlc3VsdC0+cmVzdWx0LmdlX3Jlc3VsdC5jaGFubmVsRE9wZW4gPSByZXN1bHQuY2hhbm5lbERPcGVuOworCisgICAgcFJ0Y3RSZXN1bHQtPnJlc3VsdC5nZV9yZXN1bHQuY2hhbm5lbEFTaG9ydCA9IHJlc3VsdC5jaGFubmVsQVNob3J0OworICAgIHBSdGN0UmVzdWx0LT5yZXN1bHQuZ2VfcmVzdWx0LmNoYW5uZWxCU2hvcnQgPSByZXN1bHQuY2hhbm5lbEJTaG9ydDsKKyAgICBwUnRjdFJlc3VsdC0+cmVzdWx0LmdlX3Jlc3VsdC5jaGFubmVsQ1Nob3J0ID0gcmVzdWx0LmNoYW5uZWxDU2hvcnQ7CisgICAgcFJ0Y3RSZXN1bHQtPnJlc3VsdC5nZV9yZXN1bHQuY2hhbm5lbERTaG9ydCA9IHJlc3VsdC5jaGFubmVsRFNob3J0OworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3BvcnRfc2RzX3Jlc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgUmVzZXQgU2VyZGVzCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQb3J0IElECisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgICAgICAtIEludmFsaWQgcG9ydCBJRC4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIHJlc2V0IFNlcmRlcworICovCitydGtfYXBpX3JldF90IHJ0a19wb3J0X3Nkc19yZXNldChydGtfcG9ydF90IHBvcnQpCit7CisgICAgcnRrX3VpbnQzMiBleHRfaWQ7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgUG9ydCBWYWxpZCAqLworICAgIGlmKHJ0a19zd2l0Y2hfaXNTZ21paVBvcnQocG9ydCkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICBleHRfaWQgPSBwb3J0IC0gMTU7CisgICAgcmV0dXJuIHJ0bDgzNjdjX3Nkc1Jlc2V0KGV4dF9pZCk7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wb3J0X3NnbWlpTGlua1N0YXR1c19nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgU0dNSUkgc3RhdHVzCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQb3J0IElECisgKiBPdXRwdXQ6CisgKiAgICAgIHBTaWduYWxEZXRlY3QgICAtIFNpZ25hbCBkZXRlY3QKKyAqICAgICAgcFN5bmMgICAgICAgICAgIC0gU3luYworICogICAgICBwTGluayAgICAgICAgICAgLSBMaW5rCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgICAgICAtIEludmFsaWQgcG9ydCBJRC4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIHJlc2V0IFNlcmRlcworICovCitydGtfYXBpX3JldF90IHJ0a19wb3J0X3NnbWlpTGlua1N0YXR1c19nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfZGF0YV90ICpwU2lnbmFsRGV0ZWN0LCBydGtfZGF0YV90ICpwU3luYywgcnRrX3BvcnRfbGlua1N0YXR1c190ICpwTGluaykKK3sKKyAgICBydGtfdWludDMyIGV4dF9pZDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBQb3J0IFZhbGlkICovCisgICAgaWYocnRrX3N3aXRjaF9pc1NnbWlpUG9ydChwb3J0KSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIGlmKE5VTEwgPT0gcFNpZ25hbERldGVjdCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZihOVUxMID09IHBTeW5jKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmKE5VTEwgPT0gcExpbmspCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgZXh0X2lkID0gcG9ydCAtIDE1OworICAgIHJldHVybiBydGw4MzY3Y19nZXRTZHNMaW5rU3RhdHVzKGV4dF9pZCwgKHJ0a191aW50MzIgKilwU2lnbmFsRGV0ZWN0LCAocnRrX3VpbnQzMiAqKXBTeW5jLCAocnRrX3VpbnQzMiAqKXBMaW5rKTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3BvcnRfc2dtaWlOd2F5X3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIENvbmZpZ3VyZSBTR01JSS9IU0dNSUkgcG9ydCBOd2F5IHN0YXRlCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQb3J0IElECisgKiAgICAgIHN0YXRlICAgICAgIC0gTndheSBzdGF0ZQorICogT3V0cHV0OgorICogICAgICBOb25lLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgSUQuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNvbmZpZ3VyZSBTR01JSS9IU0dNSUkgcG9ydCBOd2F5IHN0YXRlCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3BvcnRfc2dtaWlOd2F5X3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19lbmFibGVfdCBzdGF0ZSkKK3sKKyAgICBydGtfdWludDMyIGV4dF9pZDsKKworICAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgUG9ydCBWYWxpZCAqLworICAgIGlmKHJ0a19zd2l0Y2hfaXNTZ21paVBvcnQocG9ydCkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICBpZihzdGF0ZSA+PSBSVEtfRU5BQkxFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGV4dF9pZCA9IHBvcnQgLSAxNTsKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0U2dtaWlOd2F5KGV4dF9pZCwgKHJ0a191aW50MzIpc3RhdGUpOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcG9ydF9zZ21paU53YXlfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFNHTUlJL0hTR01JSSBwb3J0IE53YXkgc3RhdGUKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAtIFBvcnQgSUQKKyAqIE91dHB1dDoKKyAqICAgICAgcFN0YXRlICAgICAgLSBOd2F5IHN0YXRlCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgICAgICAtIEludmFsaWQgcG9ydCBJRC4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGdldCBTR01JSS9IU0dNSUkgcG9ydCBOd2F5IHN0YXRlCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3BvcnRfc2dtaWlOd2F5X2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19lbmFibGVfdCAqcFN0YXRlKQoreworICAgIHJ0a191aW50MzIgZXh0X2lkOworCisgICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBQb3J0IFZhbGlkICovCisgICAgaWYocnRrX3N3aXRjaF9pc1NnbWlpUG9ydChwb3J0KSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIGlmKE5VTEwgPT0gcFN0YXRlKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGV4dF9pZCA9IHBvcnQgLSAxNTsKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0U2dtaWlOd2F5KGV4dF9pZCwgKHJ0a191aW50MzIgKilwU3RhdGUpOworfQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3B0cC5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3B0cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwOTYyYTAKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvcHRwLmMKQEAgLTAsMCArMSw3NTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogJFJldmlzaW9uOiAzOTU4MyAkCisgKiAkRGF0ZTogMjAxMy0wNS0yMCAxNjo1OToyMyArMDgwMCAo5pif5pyf5LiALCAyMCDkupTmnIggMjAxMykgJAorICoKKyAqIFB1cnBvc2UgOiBSVEsgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJIGZvciBSVEw4MzY3L1JUTDgzNjdDCisgKiBGZWF0dXJlIDogSGVyZSBpcyBhIGxpc3Qgb2YgYWxsIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIGluIHRpbWUgbW9kdWxlLgorICoKKyAqLworCisjaW5jbHVkZSA8cnRrX3N3aXRjaC5oPgorI2luY2x1ZGUgPHJ0a19lcnJvci5oPgorI2luY2x1ZGUgPHB0cC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydi5oPgorI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnZfZWF2Lmg+CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wdHBfaW5pdAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFBUUCBmdW5jdGlvbiBpbml0aWFsaXphdGlvbi4KKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSBQVFAgc3RhdHVzLgorICovCitydGtfYXBpX3JldF90IHJ0a19wdHBfaW5pdCh2b2lkKQoreworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wdHBfbWFjX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIENvbmZpZ3VyZSBQVFAgbWFjIGFkZHJlc3MuCisgKiBJbnB1dDoKKyAqICAgICAgbWFjIC0gbWFjIGFkZHJlc3MgdG8gcGFyc2VyIFBUUCBwYWNrZXRzLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlci4KKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfcHRwX21hY19zZXQocnRrX21hY190IG1hYykKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBldGhlcl9hZGRyX3Qgc3dfbWFjOworCisgICAgbWVtY3B5KHN3X21hYy5vY3RldCwgbWFjLm9jdGV0LCBFVEhFUl9BRERSX0xFTik7CisKKyAgICBpZigocmV0VmFsPXJ0bDgzNjdjX3NldEFzaWNFYXZNYWNBZGRyZXNzKHN3X21hYykpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcHRwX21hY19nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgUFRQIG1hYyBhZGRyZXNzLgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcE1hYyAtIG1hYyBhZGRyZXNzIHRvIHBhcnNlciBQVFAgcGFja2V0cy4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVyLgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCitydGtfYXBpX3JldF90IHJ0a19wdHBfbWFjX2dldChydGtfbWFjX3QgKnBNYWMpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgZXRoZXJfYWRkcl90IHN3X21hYzsKKworICAgIGlmKChyZXRWYWw9cnRsODM2N2NfZ2V0QXNpY0Vhdk1hY0FkZHJlc3MoJnN3X21hYykpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBtZW1jcHkocE1hYy0+b2N0ZXQsIHN3X21hYy5vY3RldCwgRVRIRVJfQUREUl9MRU4pOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3B0cF90cGlkX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIENvbmZpZ3VyZSBQVFAgYWNjZXB0ZWQgb3V0ZXIgJiBpbm5lciB0YWcgVFBJRC4KKyAqIElucHV0OgorICogICAgICBvdXRlcklkIC0gRXRoZXIgdHlwZSBvZiBTLXRhZyBmcmFtZSBwYXJzaW5nIGluIFBUUCBwb3J0cy4KKyAqICAgICAgaW5uZXJJZCAtIEV0aGVyIHR5cGUgb2YgQy10YWcgZnJhbWUgcGFyc2luZyBpbiBQVFAgcG9ydHMuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVyLgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCitydGtfYXBpX3JldF90IHJ0a19wdHBfdHBpZF9zZXQocnRrX3B0cF90cGlkX3Qgb3V0ZXJJZCwgcnRrX3B0cF90cGlkX3QgaW5uZXJJZCkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAoKG91dGVySWQ+UlRLX01BWF9OVU1fT0ZfVFBJRCkgfHwoaW5uZXJJZD5SVEtfTUFYX05VTV9PRl9UUElEKSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0VhdlRwaWQob3V0ZXJJZCwgaW5uZXJJZCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wdHBfdHBpZF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgUFRQIGFjY2VwdGVkIG91dGVyICYgaW5uZXIgdGFnIFRQSUQuCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwT3V0ZXJJZCAtIEV0aGVyIHR5cGUgb2YgUy10YWcgZnJhbWUgcGFyc2luZyBpbiBQVFAgcG9ydHMuCisgKiAgICAgIHBJbm5lcklkIC0gRXRoZXIgdHlwZSBvZiBDLXRhZyBmcmFtZSBwYXJzaW5nIGluIFBUUCBwb3J0cy4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfcHRwX3RwaWRfZ2V0KHJ0a19wdHBfdHBpZF90ICpwT3V0ZXJJZCwgcnRrX3B0cF90cGlkX3QgKnBJbm5lcklkKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0VhdlRwaWQocE91dGVySWQsIHBJbm5lcklkKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3B0cF9yZWZUaW1lX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCB0aGUgcmVmZXJlbmNlIHRpbWUgb2YgdGhlIHNwZWNpZmllZCBkZXZpY2UuCisgKiBJbnB1dDoKKyAqICAgICAgdGltZVN0YW1wIC0gcmVmZXJlbmNlIHRpbWVzdGFtcCB2YWx1ZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAtIGludmFsaWQgaW5wdXQgcGFyYW1ldGVyCisgKiBBcHBsaWNhYmxlOgorICogICAgICA4MzkwLCA4MzgwCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3B0cF9yZWZUaW1lX3NldChydGtfcHRwX3RpbWVTdGFtcF90IHRpbWVTdGFtcCkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAodGltZVN0YW1wLm5zZWMgPiBSVEtfTUFYX05VTV9PRl9OQU5PX1NFQ09ORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0VhdlN5c1RpbWUodGltZVN0YW1wLnNlYywgdGltZVN0YW1wLm5zZWMpKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3B0cF9yZWZUaW1lX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCB0aGUgcmVmZXJlbmNlIHRpbWUgb2YgdGhlIHNwZWNpZmllZCBkZXZpY2UuCisgKiBJbnB1dDoKKyAqIE91dHB1dDoKKyAqICAgICAgcFRpbWVTdGFtcCAtIHBvaW50ZXIgYnVmZmVyIG9mIHRoZSByZWZlcmVuY2UgdGltZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfVU5JVF9JRCAgICAgIC0gaW52YWxpZCB1bml0IGlkCisgKiAgICAgIFJUX0VSUl9OT1RfSU5JVCAgICAgLSBUaGUgbW9kdWxlIGlzIG5vdCBpbml0aWFsCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgLSBpbnB1dCBwYXJhbWV0ZXIgbWF5IGJlIG51bGwgcG9pbnRlcgorICogQXBwbGljYWJsZToKKyAqICAgICAgODM5MCwgODM4MAorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCitydGtfYXBpX3JldF90IHJ0a19wdHBfcmVmVGltZV9nZXQocnRrX3B0cF90aW1lU3RhbXBfdCAqcFRpbWVTdGFtcCkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNFYXZTeXNUaW1lKCZwVGltZVN0YW1wLT5zZWMsICZwVGltZVN0YW1wLT5uc2VjKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wdHBfcmVmVGltZUFkanVzdF9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBBZGp1c3QgdGhlIHJlZmVyZW5jZSB0aW1lLgorICogSW5wdXQ6CisgKiAgICAgIHVuaXQgICAgICAtIHVuaXQgaWQKKyAqICAgICAgc2lnbiAgICAgIC0gc2lnbmlmaWNhbnQKKyAqICAgICAgdGltZVN0YW1wIC0gcmVmZXJlbmNlIHRpbWVzdGFtcCB2YWx1ZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiAgICAgIFJUX0VSUl9VTklUX0lEICAtIGludmFsaWQgdW5pdCBpZAorICogICAgICBSVF9FUlJfTk9UX0lOSVQgLSBUaGUgbW9kdWxlIGlzIG5vdCBpbml0aWFsCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAtIGludmFsaWQgaW5wdXQgcGFyYW1ldGVyCisgKiBOb3RlOgorICogICAgICBzaWduPTAgZm9yIHBvc2l0aXZlIGFkanVzdG1lbnQsIHNpZ249MSBmb3IgbmVnYXRpdmUgYWRqdXN0bWVudC4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfcHRwX3JlZlRpbWVBZGp1c3Rfc2V0KHJ0a19wdHBfc3lzX2FkanVzdF90IHNpZ24sIHJ0a19wdHBfdGltZVN0YW1wX3QgdGltZVN0YW1wKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmICh0aW1lU3RhbXAubnNlYyA+IFJUS19NQVhfTlVNX09GX05BTk9fU0VDT05EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljRWF2U3lzVGltZUFkanVzdChzaWduLCB0aW1lU3RhbXAuc2VjLCB0aW1lU3RhbXAubnNlYykpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wdHBfcmVmVGltZUVuYWJsZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgdGhlIGVuYWJsZSBzdGF0ZSBvZiByZWZlcmVuY2UgdGltZSBvZiB0aGUgc3BlY2lmaWVkIGRldmljZS4KKyAqIElucHV0OgorICogICAgICBlbmFibGUgLSBzdGF0dXMKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfSU5QVVQgICAgLSBpbnZhbGlkIGlucHV0IHBhcmFtZXRlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCitydGtfYXBpX3JldF90IHJ0a19wdHBfcmVmVGltZUVuYWJsZV9zZXQocnRrX2VuYWJsZV90IGVuYWJsZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAoZW5hYmxlID49IFJUS19FTkFCTEVfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0VOQUJMRTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0VhdlN5c1RpbWVDdHJsKGVuYWJsZSkpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcHRwX3JlZlRpbWVFbmFibGVfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHRoZSBlbmFibGUgc3RhdGUgb2YgcmVmZXJlbmNlIHRpbWUgb2YgdGhlIHNwZWNpZmllZCBkZXZpY2UuCisgKiBJbnB1dDoKKyAqIE91dHB1dDoKKyAqICAgICAgcEVuYWJsZSAtIHN0YXR1cworICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfVU5JVF9JRCAgICAgIC0gaW52YWxpZCB1bml0IGlkCisgKiAgICAgIFJUX0VSUl9OT1RfSU5JVCAgICAgLSBUaGUgbW9kdWxlIGlzIG5vdCBpbml0aWFsCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgLSBpbnB1dCBwYXJhbWV0ZXIgbWF5IGJlIG51bGwgcG9pbnRlcgorICogQXBwbGljYWJsZToKKyAqICAgICAgODM5MCwgODM4MAorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCitydGtfYXBpX3JldF90IHJ0a19wdHBfcmVmVGltZUVuYWJsZV9nZXQocnRrX2VuYWJsZV90ICpwRW5hYmxlKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0VhdlN5c1RpbWVDdHJsKHBFbmFibGUpKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3B0cF9wb3J0RW5hYmxlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBQVFAgc3RhdHVzIG9mIHRoZSBzcGVjaWZpZWQgcG9ydC4KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgLSBwb3J0IGlkCisgKiAgICAgIGVuYWJsZSAtIHN0YXR1cworICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiAgICAgIFJUX0VSUl9QT1JUICAgICAtIGludmFsaWQgcG9ydCBpZAorICogICAgICBSVF9FUlJfSU5QVVQgICAgLSBpbnZhbGlkIGlucHV0IHBhcmFtZXRlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCitydGtfYXBpX3JldF90IHJ0a19wdHBfcG9ydEVuYWJsZV9zZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfZW5hYmxlX3QgZW5hYmxlKQoreworICAgIHJ0a19hcGlfcmV0X3QgICByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgcG9ydCBpcyBQVFAgcG9ydCAqLworICAgIFJUS19DSEtfUE9SVF9JU19QVFAocG9ydCk7CisKKyAgICBpZiAoZW5hYmxlPj1SVEtfRU5BQkxFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0VhdlBvcnRFbmFibGUocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIGVuYWJsZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wdHBfcG9ydEVuYWJsZV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgUFRQIHN0YXR1cyBvZiB0aGUgc3BlY2lmaWVkIHBvcnQuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIHBvcnQgaWQKKyAqIE91dHB1dDoKKyAqICAgICAgcEVuYWJsZSAtIHN0YXR1cworICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfUE9SVCAgICAgICAgIC0gaW52YWxpZCBwb3J0IGlkCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgLSBpbnB1dCBwYXJhbWV0ZXIgbWF5IGJlIG51bGwgcG9pbnRlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCitydGtfYXBpX3JldF90IHJ0a19wdHBfcG9ydEVuYWJsZV9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfZW5hYmxlX3QgKnBFbmFibGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgcG9ydCBpcyBQVFAgcG9ydCAqLworICAgIFJUS19DSEtfUE9SVF9JU19QVFAocG9ydCk7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNFYXZQb3J0RW5hYmxlKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCBwRW5hYmxlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcHRwX3BvcnRUaW1lc3RhbXBfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFBUUCB0aW1zdGFtcCBhY2NvcmRpbmcgdG8gdGhlIFBUUCBpZGVudGlmaWVyIG9uIHRoZSBkZWRpY2F0ZWQgcG9ydCBmcm9tIHRoZSBzcGVjaWZpZWQgZGV2aWNlLgorICogSW5wdXQ6CisgKiAgICAgIHVuaXQgICAgICAgLSB1bml0IGlkCisgKiAgICAgIHBvcnQgICAgICAgLSBwb3J0IGlkCisgKiAgICAgIHR5cGUgICAgICAgLSBQVFAgbWVzc2FnZSB0eXBlCisgKiBPdXRwdXQ6CisgKiAgICAgIHBJbmZvICAgICAgLSBwb2ludGVyIGJ1ZmZlciBvZiBzZXF1ZW5jZSBJRCBhbmQgdGltZXN0YW1wCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBpbnZhbGlkIHBvcnQgaWQKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIGludmFsaWQgaW5wdXQgcGFyYW1ldGVyCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgLSBpbnB1dCBwYXJhbWV0ZXIgbWF5IGJlIG51bGwgcG9pbnRlcgorICogQXBwbGljYWJsZToKKyAqICAgICAgODM5MCwgODM4MAorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCitydGtfYXBpX3JldF90IHJ0a19wdHBfcG9ydFRpbWVzdGFtcF9nZXQoIHJ0a19wb3J0X3QgcG9ydCwgcnRrX3B0cF9tc2dUeXBlX3QgdHlwZSwgcnRrX3B0cF9pbmZvX3QgKnBJbmZvKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0bDgzNjdjX3B0cF90aW1lX3N0YW1wX3QgdGltZTsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBwb3J0IGlzIFBUUCBwb3J0ICovCisgICAgUlRLX0NIS19QT1JUX0lTX1BUUChwb3J0KTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0VhdlBvcnRUaW1lU3RhbXAocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIHR5cGUsICZ0aW1lKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcEluZm8tPnNlcXVlbmNlSWQgPSB0aW1lLnNlcXVlbmNlX2lkOworICAgIHBJbmZvLT50aW1lU3RhbXAuc2VjID0gdGltZS5zZWNvbmQ7CisgICAgcEluZm8tPnRpbWVTdGFtcC5uc2VjID0gdGltZS5uYW5vX3NlY29uZDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wdHBfaW50Q29udHJvbF9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgUFRQIGludGVycnVwdCB0cmlnZ2VyIHN0YXR1cyBjb25maWd1cmF0aW9uLgorICogSW5wdXQ6CisgKiAgICAgIHR5cGUgLSBJbnRlcnJ1cHQgdHlwZS4KKyAqICAgICAgZW5hYmxlIC0gSW50ZXJydXB0IHN0YXR1cy4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogICAgICBSVF9FUlJfRU5BQkxFICAgICAgIC0gSW52YWxpZCBlbmFibGUgaW5wdXQuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBzZXQgUFRQIGludGVycnVwdCBzdGF0dXMgY29uZmlndXJhdGlvbi4KKyAqICAgICAgVGhlIGludGVycnVwdCB0cmlnZ2VyIHN0YXR1cyBpcyBzaG93biBpbiB0aGUgZm9sbG93aW5nOgorICogICAgICAgICAgUFRQX0lOVF9UWVBFX1RYX1NZTkMgPSAwLAorICogICAgICAgICAgUFRQX0lOVF9UWVBFX1RYX0RFTEFZX1JFUSwKKyAqICAgICAgICAgIFBUUF9JTlRfVFlQRV9UWF9QREVMQVlfUkVRLAorICogICAgICAgICAgUFRQX0lOVF9UWVBFX1RYX1BERUxBWV9SRVNQLAorICogICAgICAgICAgUFRQX0lOVF9UWVBFX1JYX1NZTkMsCisgKiAgICAgICAgICBQVFBfSU5UX1RZUEVfUlhfREVMQVlfUkVRLAorICogICAgICAgICAgUFRQX0lOVF9UWVBFX1JYX1BERUxBWV9SRVEsCisgKiAgICAgICAgICBQVFBfSU5UX1RZUEVfUlhfUERFTEFZX1JFU1AsCisgKiAgICAgICAgICBQVFBfSU5UX1RZUEVfQUxMLAorICovCitydGtfYXBpX3JldF90IHJ0a19wdHBfaW50Q29udHJvbF9zZXQocnRrX3B0cF9pbnRUeXBlX3QgdHlwZSwgcnRrX2VuYWJsZV90IGVuYWJsZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIG1hc2s7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKHR5cGU+PVBUUF9JTlRfVFlQRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZiAoUFRQX0lOVF9UWVBFX0FMTCE9dHlwZSkKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0VhdkludGVycnVwdE1hc2soJm1hc2spKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIGlmIChFTkFCTEVEID09IGVuYWJsZSkKKyAgICAgICAgICAgIG1hc2sgPSBtYXNrIHwgKDE8PHR5cGUpOworICAgICAgICBlbHNlIGlmIChESVNBQkxFRCA9PSBlbmFibGUpCisgICAgICAgICAgICBtYXNrID0gbWFzayAmIH4oMTw8dHlwZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljRWF2SW50ZXJydXB0TWFzayhtYXNrKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKEVOQUJMRUQgPT0gZW5hYmxlKQorICAgICAgICAgICAgbWFzayA9IFJUS19QVFBfSU5UUl9NQVNLOworICAgICAgICBlbHNlIGlmIChESVNBQkxFRCA9PSBlbmFibGUpCisgICAgICAgICAgICBtYXNrID0gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNFYXZJbnRlcnJ1cHRNYXNrKG1hc2spKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wdHBfaW50Q29udHJvbF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgUFRQIGludGVycnVwdCB0cmlnZ2VyIHN0YXR1cyBjb25maWd1cmF0aW9uLgorICogSW5wdXQ6CisgKiAgICAgIHR5cGUgLSBJbnRlcnJ1cHQgdHlwZS4KKyAqIE91dHB1dDoKKyAqICAgICAgcEVuYWJsZSAtIEludGVycnVwdCBzdGF0dXMuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBnZXQgaW50ZXJydXB0IHN0YXR1cyBjb25maWd1cmF0aW9uLgorICogICAgICBUaGUgaW50ZXJydXB0IHRyaWdnZXIgc3RhdHVzIGlzIHNob3duIGluIHRoZSBmb2xsb3dpbmc6CisgKiAgICAgICAgICBQVFBfSU5UX1RZUEVfVFhfU1lOQyA9IDAsCisgKiAgICAgICAgICBQVFBfSU5UX1RZUEVfVFhfREVMQVlfUkVRLAorICogICAgICAgICAgUFRQX0lOVF9UWVBFX1RYX1BERUxBWV9SRVEsCisgKiAgICAgICAgICBQVFBfSU5UX1RZUEVfVFhfUERFTEFZX1JFU1AsCisgKiAgICAgICAgICBQVFBfSU5UX1RZUEVfUlhfU1lOQywKKyAqICAgICAgICAgIFBUUF9JTlRfVFlQRV9SWF9ERUxBWV9SRVEsCisgKiAgICAgICAgICBQVFBfSU5UX1RZUEVfUlhfUERFTEFZX1JFUSwKKyAqICAgICAgICAgIFBUUF9JTlRfVFlQRV9SWF9QREVMQVlfUkVTUCwKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfcHRwX2ludENvbnRyb2xfZ2V0KHJ0a19wdHBfaW50VHlwZV90IHR5cGUsIHJ0a19lbmFibGVfdCAqcEVuYWJsZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIG1hc2s7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKHR5cGU+PVBUUF9JTlRfVFlQRV9BTEwpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNFYXZJbnRlcnJ1cHRNYXNrKCZtYXNrKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKDAgPT0gKG1hc2smKDE8PHR5cGUpKSkKKyAgICAgICAgKnBFbmFibGU9RElTQUJMRUQ7CisgICAgZWxzZQorICAgICAgICAqcEVuYWJsZT1FTkFCTEVEOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3B0cF9pbnRTdGF0dXNfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFBUUCBwb3J0IGludGVycnVwdCB0cmlnZ2VyIHN0YXR1cy4KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAgICAtIHBoeXNpY2FsIHBvcnQKKyAqIE91dHB1dDoKKyAqICAgICAgcFN0YXR1c01hc2sgLSBJbnRlcnJ1cHQgc3RhdHVzIGJpdCBtYXNrLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IGludGVycnVwdCB0cmlnZ2VyIHN0YXR1cyB3aGVuIGludGVycnVwdCBoYXBwZW5lZC4KKyAqICAgICAgVGhlIGludGVycnVwdCB0cmlnZ2VyIHN0YXR1cyBpcyBzaG93biBpbiB0aGUgZm9sbG93aW5nOgorICogICAgICAtIFBPUlQgMCAgSU5UICAgICh2YWx1ZVswXSAoQml0MCkpCisgKiAgICAgIC0gUE9SVCAxICBJTlQgICAgKHZhbHVlWzBdIChCaXQxKSkKKyAqICAgICAgLSBQT1JUIDIgIElOVCAgICAodmFsdWVbMF0gKEJpdDIpKQorICogICAgICAtIFBPUlQgMyAgSU5UICAgICh2YWx1ZVswXSAoQml0MykpCisgKiAgICAgIC0gUE9SVCA0ICBJTlQgICAodmFsdWVbMF0gKEJpdDQpKQorCisgKgorICovCitydGtfYXBpX3JldF90IHJ0a19wdHBfaW50U3RhdHVzX2dldChydGtfcHRwX2ludFN0YXR1c190ICpwU3RhdHVzTWFzaykKK3sKKyAgICBydGtfYXBpX3JldF90ICAgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKE5VTEwgPT0gcFN0YXR1c01hc2spCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljRWF2SW50ZXJydXB0U3RhdHVzKHBTdGF0dXNNYXNrKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wdHBfcG9ydEludFN0YXR1c19zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgUFRQIHBvcnQgaW50ZXJydXB0IHRyaWdnZXIgc3RhdHVzIHRvIGNsZWFuLgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgICAgIC0gcGh5c2ljYWwgcG9ydAorICogICAgICBzdGF0dXNNYXNrIC0gSW50ZXJydXB0IHN0YXR1cyBiaXQgbWFzay4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBjbGVhbiBpbnRlcnJ1cHQgdHJpZ2dlciBzdGF0dXMgd2hlbiBpbnRlcnJ1cHQgaGFwcGVuZWQuCisgKiAgICAgIFRoZSBpbnRlcnJ1cHQgdHJpZ2dlciBzdGF0dXMgaXMgc2hvd24gaW4gdGhlIGZvbGxvd2luZzoKKyAqICAgICAgLSBQVFBfSU5UX1RZUEVfVFhfU1lOQyAgICAgICAgICAgICAgKHZhbHVlWzBdIChCaXQwKSkKKyAqICAgICAgLSBQVFBfSU5UX1RZUEVfVFhfREVMQVlfUkVRICAgICAgKHZhbHVlWzBdIChCaXQxKSkKKyAqICAgICAgLSBQVFBfSU5UX1RZUEVfVFhfUERFTEFZX1JFUSAgICAodmFsdWVbMF0gKEJpdDIpKQorICogICAgICAtIFBUUF9JTlRfVFlQRV9UWF9QREVMQVlfUkVTUCAgICh2YWx1ZVswXSAoQml0MykpCisgKiAgICAgIC0gUFRQX0lOVF9UWVBFX1JYX1NZTkMgICAgICAgICAgICAgICh2YWx1ZVswXSAoQml0NCkpCisgKiAgICAgIC0gUFRQX0lOVF9UWVBFX1JYX0RFTEFZX1JFUSAgICAgICh2YWx1ZVswXSAoQml0NSkpCisgKiAgICAgIC0gUFRQX0lOVF9UWVBFX1JYX1BERUxBWV9SRVEgICAgKHZhbHVlWzBdIChCaXQ2KSkKKyAqICAgICAgLSBQVFBfSU5UX1RZUEVfUlhfUERFTEFZX1JFU1AgICAodmFsdWVbMF0gKEJpdDcpKQorICogICAgICBUaGUgc3RhdHVzIHdpbGwgYmUgY2xlYXJlZCBhZnRlciBleGVjdXRlIHRoaXMgQVBJLgorICovCitydGtfYXBpX3JldF90IHJ0a19wdHBfcG9ydEludFN0YXR1c19zZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfcHRwX2ludFN0YXR1c190IHN0YXR1c01hc2spCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgcG9ydCBpcyBQVFAgcG9ydCAqLworICAgIFJUS19DSEtfUE9SVF9JU19QVFAocG9ydCk7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNFYXZQb3J0SW50ZXJydXB0U3RhdHVzKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCBzdGF0dXNNYXNrKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wdHBfcG9ydEludFN0YXR1c19nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgUFRQIHBvcnQgaW50ZXJydXB0IHRyaWdnZXIgc3RhdHVzLgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgICAgIC0gcGh5c2ljYWwgcG9ydAorICogT3V0cHV0OgorICogICAgICBwU3RhdHVzTWFzayAtIEludGVycnVwdCBzdGF0dXMgYml0IG1hc2suCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBnZXQgaW50ZXJydXB0IHRyaWdnZXIgc3RhdHVzIHdoZW4gaW50ZXJydXB0IGhhcHBlbmVkLgorICogICAgICBUaGUgaW50ZXJydXB0IHRyaWdnZXIgc3RhdHVzIGlzIHNob3duIGluIHRoZSBmb2xsb3dpbmc6CisgKiAgICAgIC0gUFRQX0lOVF9UWVBFX1RYX1NZTkMgICAgICAgICAgICAgICh2YWx1ZVswXSAoQml0MCkpCisgKiAgICAgIC0gUFRQX0lOVF9UWVBFX1RYX0RFTEFZX1JFUSAgICAgICh2YWx1ZVswXSAoQml0MSkpCisgKiAgICAgIC0gUFRQX0lOVF9UWVBFX1RYX1BERUxBWV9SRVEgICAgKHZhbHVlWzBdIChCaXQyKSkKKyAqICAgICAgLSBQVFBfSU5UX1RZUEVfVFhfUERFTEFZX1JFU1AgICAodmFsdWVbMF0gKEJpdDMpKQorICogICAgICAtIFBUUF9JTlRfVFlQRV9SWF9TWU5DICAgICAgICAgICAgICAodmFsdWVbMF0gKEJpdDQpKQorICogICAgICAtIFBUUF9JTlRfVFlQRV9SWF9ERUxBWV9SRVEgICAgICAodmFsdWVbMF0gKEJpdDUpKQorICogICAgICAtIFBUUF9JTlRfVFlQRV9SWF9QREVMQVlfUkVRICAgICh2YWx1ZVswXSAoQml0NikpCisgKiAgICAgIC0gUFRQX0lOVF9UWVBFX1JYX1BERUxBWV9SRVNQICAgKHZhbHVlWzBdIChCaXQ3KSkKKyAqCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3B0cF9wb3J0SW50U3RhdHVzX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19wdHBfaW50U3RhdHVzX3QgKnBTdGF0dXNNYXNrKQoreworICAgIHJ0a19hcGlfcmV0X3QgICByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgcG9ydCBpcyBQVFAgcG9ydCAqLworICAgIFJUS19DSEtfUE9SVF9JU19QVFAocG9ydCk7CisKKyAgICBpZihOVUxMID09IHBTdGF0dXNNYXNrKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0VhdlBvcnRJbnRlcnJ1cHRTdGF0dXMocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIHBTdGF0dXNNYXNrKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3B0cF9wb3J0UHRwVHJhcF9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgUFRQIHBhY2tldCB0cmFwIG9mIHRoZSBzcGVjaWZpZWQgcG9ydC4KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgLSBwb3J0IGlkCisgKiAgICAgIGVuYWJsZSAtIHN0YXR1cworICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiAgICAgIFJUX0VSUl9QT1JUICAgICAtIGludmFsaWQgcG9ydCBpZAorICogICAgICBSVF9FUlJfSU5QVVQgICAgLSBpbnZhbGlkIGlucHV0IHBhcmFtZXRlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCitydGtfYXBpX3JldF90IHJ0a19wdHBfcG9ydFRyYXBfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2VuYWJsZV90IGVuYWJsZSkKK3sKKyAgICBydGtfYXBpX3JldF90ICAgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIENoZWNrIFBvcnQgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQocG9ydCk7CisKKyAgICBpZiAoZW5hYmxlPj1SVEtfRU5BQkxFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0VhdlRyYXAocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIGVuYWJsZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19wdHBfcG9ydFB0cEVuYWJsZV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgUFRQIHBhY2tldCB0cmFwIG9mIHRoZSBzcGVjaWZpZWQgcG9ydC4KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gcG9ydCBpZAorICogT3V0cHV0OgorICogICAgICBwRW5hYmxlIC0gc3RhdHVzCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiAgICAgIFJUX0VSUl9QT1JUICAgICAgICAgLSBpbnZhbGlkIHBvcnQgaWQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAtIGlucHV0IHBhcmFtZXRlciBtYXkgYmUgbnVsbCBwb2ludGVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3B0cF9wb3J0VHJhcF9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfZW5hYmxlX3QgKnBFbmFibGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgUG9ydCBWYWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwb3J0KTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0VhdlRyYXAocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIHBFbmFibGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisKKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3Fvcy5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3Fvcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMDY3YTMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvcW9zLmMKQEAgLTAsMCArMSwxNDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNzYzMDYgJAorICogJERhdGU6IDIwMTctMDMtMDggMTU6MTM6NTggKzA4MDAgKOmAseS4iSwgMDgg5LiJ5pyIIDIwMTcpICQKKyAqCisgKiBQdXJwb3NlIDogUlRLIHN3aXRjaCBoaWdoLWxldmVsIEFQSSBmb3IgUlRMODM2Ny9SVEw4MzY3QworICogRmVhdHVyZSA6IEhlcmUgaXMgYSBsaXN0IG9mIGFsbCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBpbiBRb1MgbW9kdWxlLgorICoKKyAqLworCisjaW5jbHVkZSA8cnRrX3N3aXRjaC5oPgorI2luY2x1ZGUgPHJ0a19lcnJvci5oPgorI2luY2x1ZGUgPHFvcy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydi5oPgorI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnZfcW9zLmg+CisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl9mYy5oPgorI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnZfc2NoZWR1bGluZy5oPgorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcW9zX2luaXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBDb25maWd1cmUgUW9zIGRlZmF1bHQgc2V0dGluZ3Mgd2l0aCBxdWV1ZSBudW1iZXIgYXNzaWdtZW50IHRvIGVhY2ggcG9ydC4KKyAqIElucHV0OgorICogICAgICBxdWV1ZU51bSAtIFF1ZXVlIG51bWJlciBvZiBlYWNoIHBvcnQuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1FVRVVFX05VTSAgICAtIEludmFsaWQgcXVldWUgbnVtYmVyLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgd2lsbCBpbml0aWFsaXplIHJlbGF0ZWQgUW9zIHNldHRpbmcgd2l0aCBxdWV1ZSBudW1iZXIgYXNzaWdtZW50LgorICogICAgICBUaGUgcXVldWUgbnVtYmVyIGlzIGZyb20gMSB0byA4LgorICovCitydGtfYXBpX3JldF90IHJ0a19xb3NfaW5pdChydGtfcXVldWVfbnVtX3QgcXVldWVOdW0pCit7CisgICAgQ09OU1RfVCBydGtfdWludDE2IGdfcHJpb3JpdHl0VG9RaWRbOF1bOF09IHsKKyAgICAgICAgICAgIHswLCAwLDAsMCwwLDAsMCwwfSwKKyAgICAgICAgICAgIHswLCAwLDAsMCw3LDcsNyw3fSwKKyAgICAgICAgICAgIHswLCAwLDAsMCwxLDEsNyw3fSwKKyAgICAgICAgICAgIHswLCAwLDEsMSwyLDIsNyw3fSwKKyAgICAgICAgICAgIHswLCAwLDEsMSwyLDMsNyw3fSwKKyAgICAgICAgICAgIHswLCAwLDEsMiwzLDQsNyw3fSwKKyAgICAgICAgICAgIHswLCAwLDEsMiwzLDQsNSw3fSwKKyAgICAgICAgICAgIHswLDEsMiwzLDQsNSw2LDd9CisgICAgfTsKKworICAgIENPTlNUX1QgcnRrX3VpbnQzMiBnX3ByaW9yaXR5RGVjaXNpb25bOF0gPSB7MHgwMSwgMHg4MCwweDA0LDB4MDIsMHgyMCwweDQwLDB4MTAsMHgwOH07CisgICAgQ09OU1RfVCBydGtfdWludDMyIGdfcHJpb3JpdHl0UmVtYXBbOF0gPSB7MCwxLDIsMyw0LDUsNiw3fTsKKworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcW1hcGlkeDsKKyAgICBydGtfdWludDMyIHByaW9yaXR5OworICAgIHJ0a191aW50MzIgcHJpRGVjOworICAgIHJ0a191aW50MzIgcG9ydDsKKyAgICBydGtfdWludDMyIGRzY3A7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKHF1ZXVlTnVtIDw9IDAgfHwgcXVldWVOdW0gPiBSVEtfTUFYX05VTV9PRl9RVUVVRSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9RVUVVRV9OVU07CisKKyAgICAvKlNldCBPdXRwdXQgUXVldWUgTnVtYmVyKi8KKyAgICBpZiAoUlRLX01BWF9OVU1fT0ZfUVVFVUUgPT0gcXVldWVOdW0pCisgICAgICAgIHFtYXBpZHggPSAwOworICAgIGVsc2UKKyAgICAgICAgcW1hcGlkeCA9IHF1ZXVlTnVtOworCisgICAgUlRLX1NDQU5fQUxMX1BIWV9QT1JUTUFTSyhwb3J0KQorICAgIHsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljT3V0cHV0UXVldWVNYXBwaW5nSW5kZXgocG9ydCwgcW1hcGlkeCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorCisgICAgLypTZXQgUHJpb3JpdHkgdG8gUWlkKi8KKyAgICBmb3IgKHByaW9yaXR5ID0gMDsgcHJpb3JpdHkgPD0gUlRLX1BSSU1BWDsgcHJpb3JpdHkrKykKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1ByaW9yaXR5VG9RSURNYXBwaW5nVGFibGUocXVldWVOdW0gLSAxLCBwcmlvcml0eSwgZ19wcmlvcml0eXRUb1FpZFtxdWV1ZU51bSAtIDFdW3ByaW9yaXR5XSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorCisgICAgLypTZXQgRmxvdyBDb250cm9sIFR5cGUgdG8gSW5ncmVzcyBGbG93IENvbnRyb2wqLworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY0Zsb3dDb250cm9sU2VsZWN0KEZDX0lOR1JFU1MpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKworICAgIC8qUHJpb3JpdHkgRGVjaXNpb24gT3JkZXIqLworICAgIGZvciAocHJpRGVjID0gMDtwcmlEZWMgPCBQUklERUNfRU5EO3ByaURlYysrKQorICAgIHsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUHJpb3JpdHlEZWNpc2lvbihQUklERUNUQkxfSURYMCwgcHJpRGVjLCBnX3ByaW9yaXR5RGVjaXNpb25bcHJpRGVjXSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1ByaW9yaXR5RGVjaXNpb24oUFJJREVDVEJMX0lEWDEsIHByaURlYywgZ19wcmlvcml0eURlY2lzaW9uW3ByaURlY10pKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKworICAgIC8qU2V0IFBvcnQtYmFzZWQgUHJpb3JpdHkgdG8gMCovCisgICAgUlRLX1NDQU5fQUxMX1BIWV9QT1JUTUFTSyhwb3J0KQorICAgIHsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUHJpb3JpdHlQb3J0QmFzZWQocG9ydCwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorCisgICAgLypEaXNhYmxlIDFwIFJlbWFya2luZyovCisgICAgUlRLX1NDQU5fQUxMX1BIWV9QT1JUTUFTSyhwb3J0KQorICAgIHsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVtYXJraW5nRG90MXBBYmlsaXR5KHBvcnQsIERJU0FCTEVEKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisKKyAgICAvKkRpc2FibGUgRFNDUCBSZW1hcmtpbmcqLworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlbWFya2luZ0RzY3BBYmlsaXR5KERJU0FCTEVEKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgLypTZXQgMXAgJiBEU0NQICBQcmlvcml0eSBSZW1hcHBpbmcgJiBSZW1hcmtpbmcqLworICAgIGZvciAocHJpb3JpdHkgPSAwOyBwcmlvcml0eSA8PSBSVEw4MzY3Q19QUklNQVg7IHByaW9yaXR5KyspCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQcmlvcml0eURvdDFxUmVtYXBwaW5nKHByaW9yaXR5LCBnX3ByaW9yaXR5dFJlbWFwW3ByaW9yaXR5XSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVtYXJraW5nRG90MXBQYXJhbWV0ZXIocHJpb3JpdHksIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlbWFya2luZ0RzY3BQYXJhbWV0ZXIocHJpb3JpdHksIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKworICAgIC8qU2V0IERTQ1AgUHJpb3JpdHkqLworICAgIGZvciAoZHNjcCA9IDA7IGRzY3AgPD0gNjM7IGRzY3ArKykKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1ByaW9yaXR5RHNjcEJhc2VkKGRzY3AsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKworICAgIC8qIEZpbmV0dW5lIEIvVCB2YWx1ZSAqLworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4MTcyMiwgMHgxMTU4KSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3Fvc19wcmlTZWxfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQ29uZmlndXJlIHRoZSBwcmlvcml0eSBvcmRlciBhbW9uZyBkaWZmZXJlbnQgcHJpb3JpdHkgbWVjaGFuaXNtLgorICogSW5wdXQ6CisgKiAgICAgIGluZGV4IC0gUHJpb3JpdHkgZGVjaXNpb24gdGFibGUgaW5kZXggKDB+MSkKKyAqICAgICAgcFByaURlYyAtIFByaW9yaXR5IGFzc2lnbiBmb3IgcG9ydCwgZHNjcCwgODAyLjFwLCBjdmxhbiwgc3ZsYW4sIGFjbCBiYXNlZCBwcmlvcml0eSBkZWNpc2lvbi4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUU9TX1NFTF9QUklfU09VUkNFICAgLSBJbnZhbGlkIHByaW9yaXR5IGRlY2lzaW9uIHNvdXJjZSBwYXJhbWV0ZXIuCisgKiBOb3RlOgorICogICAgICBBU0lDIHdpbGwgZm9sbG93IHVzZXIgcHJpb3JpdHkgc2V0dGluZyBvZiBtZWNoYW5pc21zIHRvIHNlbGVjdCBtYXBwZWQgcXVldWUgcHJpb3JpdHkgZm9yIHJlY2VpdmluZyBmcmFtZS4KKyAqICAgICAgSWYgdHdvIHByaW9yaXR5IG1lY2hhbmlzbXMgYXJlIHRoZSBzYW1lLCB0aGUgQVNJQyB3aWxsIGNob3NlIHRoZSBoaWdoZXN0IHByaW9yaXR5IGZyb20gbWVjaGFuaXNtcyB0bworICogICAgICBhc3NpZ24gcXVldWUgcHJpb3JpdHkgdG8gcmVjZWl2aW5nIGZyYW1lLgorICogICAgICBUaGUgcHJpb3JpdHkgc291cmNlcyBhcmU6CisgKiAgICAgIC0gUFJJREVDX1BPUlQKKyAqICAgICAgLSBQUklERUNfQUNMCisgKiAgICAgIC0gUFJJREVDX0RTQ1AKKyAqICAgICAgLSBQUklERUNfMVEKKyAqICAgICAgLSBQUklERUNfMUFECisgKiAgICAgIC0gUFJJREVDX0NWTEFOCisgKiAgICAgIC0gUFJJREVDX0RBCisgKiAgICAgIC0gUFJJREVDX1NBCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3Fvc19wcmlTZWxfc2V0KHJ0a19xb3NfcHJpRGVjVGJsX3QgaW5kZXgsIHJ0a19wcmlvcml0eV9zZWxlY3RfdCAqcFByaURlYykKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHBvcnRfcG93OworICAgIHJ0a191aW50MzIgZG90MXFfcG93OworICAgIHJ0a191aW50MzIgZHNjcF9wb3c7CisgICAgcnRrX3VpbnQzMiBhY2xfcG93OworICAgIHJ0a191aW50MzIgc3ZsYW5fcG93OworICAgIHJ0a191aW50MzIgY3ZsYW5fcG93OworICAgIHJ0a191aW50MzIgc21hY19wb3c7CisgICAgcnRrX3VpbnQzMiBkbWFjX3BvdzsKKyAgICBydGtfdWludDMyIGk7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBQUklERUNUQkxfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0VOVFJZX0lOREVYOworCisgICAgaWYgKHBQcmlEZWMtPnBvcnRfcHJpID49IDggfHwgcFByaURlYy0+ZG90MXFfcHJpID49IDggfHwgcFByaURlYy0+YWNsX3ByaSA+PSA4IHx8IHBQcmlEZWMtPmRzY3BfcHJpID49IDggfHwKKyAgICAgICBwUHJpRGVjLT5jdmxhbl9wcmkgPj0gOCB8fCBwUHJpRGVjLT5zdmxhbl9wcmkgPj0gOCB8fCBwUHJpRGVjLT5kbWFjX3ByaSA+PSA4IHx8IHBQcmlEZWMtPnNtYWNfcHJpID49IDgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUU9TX1NFTF9QUklfU09VUkNFOworCisgICAgcG9ydF9wb3cgPSAxOworICAgIGZvciAoaSA9IHBQcmlEZWMtPnBvcnRfcHJpOyBpID4gMDsgaS0tKQorICAgICAgICBwb3J0X3BvdyA9IChwb3J0X3BvdykqMjsKKworICAgIGRvdDFxX3BvdyA9IDE7CisgICAgZm9yIChpID0gcFByaURlYy0+ZG90MXFfcHJpOyBpID4gMDsgaS0tKQorICAgICAgICBkb3QxcV9wb3cgPSAoZG90MXFfcG93KSoyOworCisgICAgYWNsX3BvdyA9IDE7CisgICAgZm9yIChpID0gcFByaURlYy0+YWNsX3ByaTsgaSA+IDA7IGktLSkKKyAgICAgICAgYWNsX3BvdyA9IChhY2xfcG93KSoyOworCisgICAgZHNjcF9wb3cgPSAxOworICAgIGZvciAoaSA9IHBQcmlEZWMtPmRzY3BfcHJpOyBpID4gMDsgaS0tKQorICAgICAgICBkc2NwX3BvdyA9IChkc2NwX3BvdykqMjsKKworICAgIHN2bGFuX3BvdyA9IDE7CisgICAgZm9yIChpID0gcFByaURlYy0+c3ZsYW5fcHJpOyBpID4gMDsgaS0tKQorICAgICAgICBzdmxhbl9wb3cgPSAoc3ZsYW5fcG93KSoyOworCisgICAgY3ZsYW5fcG93ID0gMTsKKyAgICBmb3IgKGkgPSBwUHJpRGVjLT5jdmxhbl9wcmk7IGkgPiAwOyBpLS0pCisgICAgICAgIGN2bGFuX3BvdyA9IChjdmxhbl9wb3cpKjI7CisKKyAgICBkbWFjX3BvdyA9IDE7CisgICAgZm9yIChpID0gcFByaURlYy0+ZG1hY19wcmk7IGkgPiAwOyBpLS0pCisgICAgICAgIGRtYWNfcG93ID0gKGRtYWNfcG93KSoyOworCisgICAgc21hY19wb3cgPSAxOworICAgIGZvciAoaSA9IHBQcmlEZWMtPnNtYWNfcHJpOyBpID4gMDsgaS0tKQorICAgICAgICBzbWFjX3BvdyA9IChzbWFjX3BvdykqMjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1ByaW9yaXR5RGVjaXNpb24oaW5kZXgsIFBSSURFQ19QT1JULCBwb3J0X3BvdykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1ByaW9yaXR5RGVjaXNpb24oaW5kZXgsIFBSSURFQ19BQ0wsIGFjbF9wb3cpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQcmlvcml0eURlY2lzaW9uKGluZGV4LCBQUklERUNfRFNDUCwgZHNjcF9wb3cpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQcmlvcml0eURlY2lzaW9uKGluZGV4LCBQUklERUNfMVEsIGRvdDFxX3BvdykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1ByaW9yaXR5RGVjaXNpb24oaW5kZXgsIFBSSURFQ18xQUQsIHN2bGFuX3BvdykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1ByaW9yaXR5RGVjaXNpb24oaW5kZXgsIFBSSURFQ19DVkxBTiwgY3ZsYW5fcG93KSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUHJpb3JpdHlEZWNpc2lvbihpbmRleCwgUFJJREVDX0RBLCBkbWFjX3BvdykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1ByaW9yaXR5RGVjaXNpb24oaW5kZXgsIFBSSURFQ19TQSwgc21hY19wb3cpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcW9zX3ByaVNlbF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgdGhlIHByaW9yaXR5IG9yZGVyIGNvbmZpZ3VyYXRpb24gYW1vbmcgZGlmZmVyZW50IHByaW9yaXR5IG1lY2hhbmlzbS4KKyAqIElucHV0OgorICogICAgICBpbmRleCAtIFByaW9yaXR5IGRlY2lzaW9uIHRhYmxlIGluZGV4ICgwfjEpCisgKiBPdXRwdXQ6CisgKiAgICAgIHBQcmlEZWMgLSBQcmlvcml0eSBhc3NpZ24gZm9yIHBvcnQsIGRzY3AsIDgwMi4xcCwgY3ZsYW4sIHN2bGFuLCBhY2wgYmFzZWQgcHJpb3JpdHkgZGVjaXNpb24gLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgQVNJQyB3aWxsIGZvbGxvdyB1c2VyIHByaW9yaXR5IHNldHRpbmcgb2YgbWVjaGFuaXNtcyB0byBzZWxlY3QgbWFwcGVkIHF1ZXVlIHByaW9yaXR5IGZvciByZWNlaXZpbmcgZnJhbWUuCisgKiAgICAgIElmIHR3byBwcmlvcml0eSBtZWNoYW5pc21zIGFyZSB0aGUgc2FtZSwgdGhlIEFTSUMgd2lsbCBjaG9zZSB0aGUgaGlnaGVzdCBwcmlvcml0eSBmcm9tIG1lY2hhbmlzbXMgdG8KKyAqICAgICAgYXNzaWduIHF1ZXVlIHByaW9yaXR5IHRvIHJlY2VpdmluZyBmcmFtZS4KKyAqICAgICAgVGhlIHByaW9yaXR5IHNvdXJjZXMgYXJlOgorICogICAgICAtIFBSSURFQ19QT1JULAorICogICAgICAtIFBSSURFQ19BQ0wsCisgKiAgICAgIC0gUFJJREVDX0RTQ1AsCisgKiAgICAgIC0gUFJJREVDXzFRLAorICogICAgICAtIFBSSURFQ18xQUQsCisgKiAgICAgIC0gUFJJREVDX0NWTEFOLAorICogICAgICAtIFBSSURFQ19EQSwKKyAqICAgICAgLSBQUklERUNfU0EsCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3Fvc19wcmlTZWxfZ2V0KHJ0a19xb3NfcHJpRGVjVGJsX3QgaW5kZXgsIHJ0a19wcmlvcml0eV9zZWxlY3RfdCAqcFByaURlYykKK3sKKworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a19pbnQzMiBpOworICAgIHJ0a191aW50MzIgcG9ydF9wb3c7CisgICAgcnRrX3VpbnQzMiBkb3QxcV9wb3c7CisgICAgcnRrX3VpbnQzMiBkc2NwX3BvdzsKKyAgICBydGtfdWludDMyIGFjbF9wb3c7CisgICAgcnRrX3VpbnQzMiBzdmxhbl9wb3c7CisgICAgcnRrX3VpbnQzMiBjdmxhbl9wb3c7CisgICAgcnRrX3VpbnQzMiBzbWFjX3BvdzsKKyAgICBydGtfdWludDMyIGRtYWNfcG93OworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gUFJJREVDVEJMX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9FTlRSWV9JTkRFWDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1ByaW9yaXR5RGVjaXNpb24oaW5kZXgsIFBSSURFQ19QT1JULCAmcG9ydF9wb3cpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQcmlvcml0eURlY2lzaW9uKGluZGV4LCBQUklERUNfQUNMLCAmYWNsX3BvdykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1ByaW9yaXR5RGVjaXNpb24oaW5kZXgsIFBSSURFQ19EU0NQLCAmZHNjcF9wb3cpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQcmlvcml0eURlY2lzaW9uKGluZGV4LCBQUklERUNfMVEsICZkb3QxcV9wb3cpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQcmlvcml0eURlY2lzaW9uKGluZGV4LCBQUklERUNfMUFELCAmc3ZsYW5fcG93KSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUHJpb3JpdHlEZWNpc2lvbihpbmRleCwgUFJJREVDX0NWTEFOLCAmY3ZsYW5fcG93KSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUHJpb3JpdHlEZWNpc2lvbihpbmRleCwgUFJJREVDX0RBLCAmZG1hY19wb3cpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQcmlvcml0eURlY2lzaW9uKGluZGV4LCBQUklERUNfU0EsICZzbWFjX3BvdykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGZvciAoaSA9IDMxOyBpID49IDA7IGktLSkKKyAgICB7CisgICAgICAgIGlmIChwb3J0X3BvdyAmICgxIDw8IGkpKQorICAgICAgICB7CisgICAgICAgICAgICBwUHJpRGVjLT5wb3J0X3ByaSA9IGk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoaSA9IDMxOyBpID49IDA7IGktLSkKKyAgICB7CisgICAgICAgIGlmIChkb3QxcV9wb3cgJiAoMSA8PCBpKSkKKyAgICAgICAgeworICAgICAgICAgICAgcFByaURlYy0+ZG90MXFfcHJpID0gaTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChpID0gMzE7IGkgPj0gMDsgaS0tKQorICAgIHsKKyAgICAgICAgaWYgKGFjbF9wb3cgJiAoMSA8PCBpKSkKKyAgICAgICAgeworICAgICAgICAgICAgcFByaURlYy0+YWNsX3ByaSA9IGk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoaSA9IDMxOyBpID49IDA7IGktLSkKKyAgICB7CisgICAgICAgIGlmIChkc2NwX3BvdyAmICgxIDw8IGkpKQorICAgICAgICB7CisgICAgICAgICAgICBwUHJpRGVjLT5kc2NwX3ByaSA9IGk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoaSA9IDMxOyBpID49IDA7IGktLSkKKyAgICB7CisgICAgICAgIGlmIChzdmxhbl9wb3cgJiAoMSA8PCBpKSkKKyAgICAgICAgeworICAgICAgICAgICAgcFByaURlYy0+c3ZsYW5fcHJpID0gaTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChpID0gMzE7aSAgPj0gMDsgaS0tKQorICAgIHsKKyAgICAgICAgaWYgKGN2bGFuX3BvdyAmICgxIDw8IGkpKQorICAgICAgICB7CisgICAgICAgICAgICBwUHJpRGVjLT5jdmxhbl9wcmkgPSBpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGkgPSAzMTsgaSA+PSAwOyBpLS0pCisgICAgeworICAgICAgICBpZiAoZG1hY19wb3cmKDE8PGkpKQorICAgICAgICB7CisgICAgICAgICAgICBwUHJpRGVjLT5kbWFjX3ByaSA9IGk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoaSA9IDMxOyBpID49IDA7IGktLSkKKyAgICB7CisgICAgICAgIGlmIChzbWFjX3BvdyAmICgxIDw8IGkpKQorICAgICAgICB7CisgICAgICAgICAgICBwUHJpRGVjLT5zbWFjX3ByaSA9IGk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19xb3NfMXBQcmlSZW1hcF9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBDb25maWd1cmUgMVEgcHJpb3JpdGllcyBtYXBwaW5nIHRvIGludGVybmFsIGFic29sdXRlIHByaW9yaXR5LgorICogSW5wdXQ6CisgKiAgICAgIGRvdDFwX3ByaSAgIC0gODAyLjFwIHByaW9yaXR5IHZhbHVlLgorICogICAgICBpbnRfcHJpICAgICAtIGludGVybmFsIHByaW9yaXR5IHZhbHVlLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogICAgICBSVF9FUlJfVkxBTl9QUklPUklUWSAgICAtIEludmFsaWQgMXAgcHJpb3JpdHkuCisgKiAgICAgIFJUX0VSUl9RT1NfSU5UX1BSSU9SSVRZIC0gSW52YWxpZCBwcmlvcml0eS4KKyAqIE5vdGU6CisgKiAgICAgIFByaW9yaXR5IG9mIDgwMi4xUSBhc3NpZ25tZW50IGZvciBpbnRlcm5hbCBhc2ljIHByaW9yaXR5LCBhbmQgaXQgaXMgdXNlZCBmb3IgcXVldWUgdXNhZ2UgYW5kIHBhY2tldCBzY2hlZHVsaW5nLgorICovCitydGtfYXBpX3JldF90IHJ0a19xb3NfMXBQcmlSZW1hcF9zZXQocnRrX3ByaV90IGRvdDFwX3ByaSwgcnRrX3ByaV90IGludF9wcmkpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKGRvdDFwX3ByaSA+IFJUTDgzNjdDX1BSSU1BWCB8fCBpbnRfcHJpID4gUlRMODM2N0NfUFJJTUFYKQorICAgICAgICByZXR1cm4gIFJUX0VSUl9WTEFOX1BSSU9SSVRZOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUHJpb3JpdHlEb3QxcVJlbWFwcGluZyhkb3QxcF9wcmksIGludF9wcmkpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcW9zXzFwUHJpUmVtYXBfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IDFRIHByaW9yaXRpZXMgbWFwcGluZyB0byBpbnRlcm5hbCBhYnNvbHV0ZSBwcmlvcml0eS4KKyAqIElucHV0OgorICogICAgICBkb3QxcF9wcmkgLSA4MDIuMXAgcHJpb3JpdHkgdmFsdWUgLgorICogT3V0cHV0OgorICogICAgICBwSW50X3ByaSAtIGludGVybmFsIHByaW9yaXR5IHZhbHVlLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfVkxBTl9QUklPUklUWSAgICAtIEludmFsaWQgcHJpb3JpdHkuCisgKiAgICAgIFJUX0VSUl9RT1NfSU5UX1BSSU9SSVRZIC0gSW52YWxpZCBwcmlvcml0eS4KKyAqIE5vdGU6CisgKiAgICAgIFByaW9yaXR5IG9mIDgwMi4xUSBhc3NpZ21lbnQgZm9yIGludGVybmFsIGFzaWMgcHJpb3JpdHksIGFuZCBpdCBpcyB1ZXNlZCBmb3IgcXVldWUgdXNhZ2UgYW5kIHBhY2tldCBzY2hlZHVsaW5nLgorICovCitydGtfYXBpX3JldF90IHJ0a19xb3NfMXBQcmlSZW1hcF9nZXQocnRrX3ByaV90IGRvdDFwX3ByaSwgcnRrX3ByaV90ICpwSW50X3ByaSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAoZG90MXBfcHJpID4gUlRMODM2N0NfUFJJTUFYKQorICAgICAgICByZXR1cm4gIFJUX0VSUl9RT1NfSU5UX1BSSU9SSVRZOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUHJpb3JpdHlEb3QxcVJlbWFwcGluZyhkb3QxcF9wcmksIHBJbnRfcHJpKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3Fvc19kc2NwUHJpUmVtYXBfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgTWFwIGRzY3AgdmFsdWUgdG8gaW50ZXJuYWwgcHJpb3JpdHkuCisgKiBJbnB1dDoKKyAqICAgICAgZHNjcCAgICAtIERzY3AgdmFsdWUgb2YgcmVjZWl2aW5nIGZyYW1lCisgKiAgICAgIGludF9wcmkgLSBpbnRlcm5hbCBwcmlvcml0eSB2YWx1ZSAuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiAgICAgIFJUX0VSUl9RT1NfRFNDUF9WQUxVRSAgIC0gSW52YWxpZCBEU0NQIHZhbHVlLgorICogICAgICBSVF9FUlJfUU9TX0lOVF9QUklPUklUWSAtIEludmFsaWQgcHJpb3JpdHkuCisgKiBOb3RlOgorICogICAgICBUaGUgRGlmZmVyZW50aWF0ZWQgU2VydmljZSBDb2RlIFBvaW50IGlzIGEgc2VsZWN0b3IgZm9yIHJvdXRlcidzIHBlci1ob3AgYmVoYXZpb3JzLiBBcyBhIHNlbGVjdG9yLCB0aGVyZSBpcyBubyBpbXBsaWNhdGlvbiB0aGF0IGEgbnVtZXJpY2FsbHkKKyAqICAgICAgZ3JlYXRlciBEU0NQIGltcGxpZXMgYSBiZXR0ZXIgbmV0d29yayBzZXJ2aWNlLiBBcyBjYW4gYmUgc2VlbiwgdGhlIERTQ1AgdG90YWxseSBvdmVybGFwcyB0aGUgb2xkIHByZWNlZGVuY2UgZmllbGQgb2YgVE9TLiBTbyBpZiB2YWx1ZXMgb2YKKyAqICAgICAgRFNDUCBhcmUgY2FyZWZ1bGx5IGNob3NlbiB0aGVuIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgY2FuIGJlIGFjaGlldmVkLgorICovCitydGtfYXBpX3JldF90IHJ0a19xb3NfZHNjcFByaVJlbWFwX3NldChydGtfZHNjcF90IGRzY3AsIHJ0a19wcmlfdCBpbnRfcHJpKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmIChpbnRfcHJpID4gUlRMODM2N0NfUFJJTUFYICkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9RT1NfSU5UX1BSSU9SSVRZOworCisgICAgaWYgKGRzY3AgPiBSVEw4MzY3Q19EU0NQTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1FPU19EU0NQX1ZBTFVFOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUHJpb3JpdHlEc2NwQmFzZWQoZHNjcCwgaW50X3ByaSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19xb3NfZHNjcFByaVJlbWFwX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBkc2NwIHZhbHVlIHRvIGludGVybmFsIHByaW9yaXR5LgorICogSW5wdXQ6CisgKiAgICAgIGRzY3AgLSBEc2NwIHZhbHVlIG9mIHJlY2VpdmluZyBmcmFtZQorICogT3V0cHV0OgorICogICAgICBwSW50X3ByaSAtIGludGVybmFsIHByaW9yaXR5IHZhbHVlLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUU9TX0RTQ1BfVkFMVUUgICAtIEludmFsaWQgRFNDUCB2YWx1ZS4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBEaWZmZXJlbnRpYXRlZCBTZXJ2aWNlIENvZGUgUG9pbnQgaXMgYSBzZWxlY3RvciBmb3Igcm91dGVyJ3MgcGVyLWhvcCBiZWhhdmlvcnMuIEFzIGEgc2VsZWN0b3IsIHRoZXJlIGlzIG5vIGltcGxpY2F0aW9uIHRoYXQgYSBudW1lcmljYWxseQorICogICAgICBncmVhdGVyIERTQ1AgaW1wbGllcyBhIGJldHRlciBuZXR3b3JrIHNlcnZpY2UuIEFzIGNhbiBiZSBzZWVuLCB0aGUgRFNDUCB0b3RhbGx5IG92ZXJsYXBzIHRoZSBvbGQgcHJlY2VkZW5jZSBmaWVsZCBvZiBUT1MuIFNvIGlmIHZhbHVlcyBvZgorICogICAgICBEU0NQIGFyZSBjYXJlZnVsbHkgY2hvc2VuIHRoZW4gYmFja3dhcmQgY29tcGF0aWJpbGl0eSBjYW4gYmUgYWNoaWV2ZWQuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3Fvc19kc2NwUHJpUmVtYXBfZ2V0KHJ0a19kc2NwX3QgZHNjcCwgcnRrX3ByaV90ICpwSW50X3ByaSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAoZHNjcCA+IFJUTDgzNjdDX0RTQ1BNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUU9TX0RTQ1BfVkFMVUU7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQcmlvcml0eURzY3BCYXNlZChkc2NwLCBwSW50X3ByaSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19xb3NfcG9ydFByaV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBDb25maWd1cmUgcHJpb3JpdHkgdXNhZ2UgdG8gZWFjaCBwb3J0LgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBQb3J0IGlkLgorICogICAgICBpbnRfcHJpIC0gaW50ZXJuYWwgcHJpb3JpdHkgdmFsdWUuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfUU9TX1NFTF9QT1JUX1BSSSAtIEludmFsaWQgcG9ydCBwcmlvcml0eS4KKyAqICAgICAgUlRfRVJSX1FPU19JTlRfUFJJT1JJVFkgLSBJbnZhbGlkIHByaW9yaXR5LgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gc2V0IHByaW9yaXR5IG9mIHBvcnQgYXNzaWdubWVudHMgZm9yIHF1ZXVlIHVzYWdlIGFuZCBwYWNrZXQgc2NoZWR1bGluZy4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfcW9zX3BvcnRQcmlfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3ByaV90IGludF9wcmkpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgUG9ydCBWYWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwb3J0KTsKKworICAgIGlmIChpbnRfcHJpID4gUlRMODM2N0NfUFJJTUFYICkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9RT1NfSU5UX1BSSU9SSVRZOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUHJpb3JpdHlQb3J0QmFzZWQocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIGludF9wcmkpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcW9zX3BvcnRQcmlfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHByaW9yaXR5IHVzYWdlIHRvIGVhY2ggcG9ydC4KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqIE91dHB1dDoKKyAqICAgICAgcEludF9wcmkgLSBpbnRlcm5hbCBwcmlvcml0eSB2YWx1ZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBnZXQgcHJpb3JpdHkgb2YgcG9ydCBhc3NpZ25tZW50cyBmb3IgcXVldWUgdXNhZ2UgYW5kIHBhY2tldCBzY2hlZHVsaW5nLgorICovCitydGtfYXBpX3JldF90IHJ0a19xb3NfcG9ydFByaV9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfcHJpX3QgKnBJbnRfcHJpKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIENoZWNrIFBvcnQgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQocG9ydCk7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQcmlvcml0eVBvcnRCYXNlZChydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgcEludF9wcmkpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19xb3NfcXVldWVOdW1fc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IG91dHB1dCBxdWV1ZSBudW1iZXIgZm9yIGVhY2ggcG9ydC4KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUG9ydCBpZC4KKyAqICAgICAgaW5kZXggICAtIE1hcHBpbmcgcXVldWUgbnVtYmVyICgxfjgpCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9RVUVVRV9OVU0gICAgLSBJbnZhbGlkIHF1ZXVlIG51bWJlci4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIHNldCB0aGUgb3V0cHV0IHF1ZXVlIG51bWJlciBvZiB0aGUgc3BlY2lmaWVkIHBvcnQuIFRoZSBxdWV1ZSBudW1iZXIgaXMgZnJvbSAxIHRvIDguCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3Fvc19xdWV1ZU51bV9zZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfcXVldWVfbnVtX3QgcXVldWVfbnVtKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIENoZWNrIFBvcnQgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQocG9ydCk7CisKKyAgICBpZiAoKDAgPT0gcXVldWVfbnVtKSB8fCAocXVldWVfbnVtID4gUlRLX01BWF9OVU1fT0ZfUVVFVUUpKQorICAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKKworICAgIGlmIChSVEtfTUFYX05VTV9PRl9RVUVVRSA9PSBxdWV1ZV9udW0pCisgICAgICAgIHF1ZXVlX251bSA9IDA7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNPdXRwdXRRdWV1ZU1hcHBpbmdJbmRleChydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgcXVldWVfbnVtKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3Fvc19xdWV1ZU51bV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgb3V0cHV0IHF1ZXVlIG51bWJlci4KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqIE91dHB1dDoKKyAqICAgICAgcFF1ZXVlX251bSAtIE1hcHBpbmcgcXVldWUgbnVtYmVyCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSB3aWxsIHJldHVybiB0aGUgb3V0cHV0IHF1ZXVlIG51bWJlciBvZiB0aGUgc3BlY2lmaWVkIHBvcnQuIFRoZSBxdWV1ZSBudW1iZXIgaXMgZnJvbSAxIHRvIDguCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3Fvc19xdWV1ZU51bV9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfcXVldWVfbnVtX3QgKnBRdWV1ZV9udW0pCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBxaWR4OworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIENoZWNrIFBvcnQgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQocG9ydCk7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNPdXRwdXRRdWV1ZU1hcHBpbmdJbmRleChydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgJnFpZHgpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoMCA9PSBxaWR4KQorICAgICAgICAqcFF1ZXVlX251bSA9IDg7CisgICAgZWxzZQorICAgICAgICAqcFF1ZXVlX251bSA9IHFpZHg7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcW9zX3ByaU1hcF9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgb3V0cHV0IHF1ZXVlIG51bWJlciBmb3IgZWFjaCBwb3J0LgorICogSW5wdXQ6CisgKiAgICAgIHF1ZXVlX251bSAgIC0gUXVldWUgbnVtYmVyIHVzYWdlLgorICogICAgICBwUHJpMnFpZCAgICAtIFByaW9yaXR5IG1hcHBpbmcgdG8gcXVldWUgSUQuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiAgICAgIFJUX0VSUl9RVUVVRV9OVU0gICAgICAgIC0gSW52YWxpZCBxdWV1ZSBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9RVUVVRV9JRCAgICAgICAgIC0gSW52YWxpZCBxdWV1ZSBpZC4KKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfUU9TX0lOVF9QUklPUklUWSAtIEludmFsaWQgcHJpb3JpdHkuCisgKiBOb3RlOgorICogICAgICBBU0lDIHN1cHBvcnRzIHByaW9yaXR5IG1hcHBpbmcgdG8gcXVldWUgd2l0aCBkaWZmZXJlbnQgcXVldWUgbnVtYmVyIGZyb20gMSB0byA4LgorICogICAgICBGb3IgZGlmZmVyZW50IHF1ZXVlIG51bWJlcnMgdXNhZ2UsIEFTSUMgc3VwcG9ydHMgZGlmZmVyZW50IGludGVybmFsIGF2YWlsYWJsZSBxdWV1ZSBJRHMuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3Fvc19wcmlNYXBfc2V0KHJ0a19xdWV1ZV9udW1fdCBxdWV1ZV9udW0sIHJ0a19xb3NfcHJpMnF1ZXVlX3QgKnBQcmkycWlkKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcHJpOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmICgoMCA9PSBxdWV1ZV9udW0pIHx8IChxdWV1ZV9udW0gPiBSVEtfTUFYX05VTV9PRl9RVUVVRSkpCisgICAgICAgIHJldHVybiBSVF9FUlJfUVVFVUVfTlVNOworCisgICAgZm9yIChwcmkgPSAwOyBwcmkgPD0gUlRLX1BSSU1BWDsgcHJpKyspCisgICAgeworICAgICAgICBpZiAocFByaTJxaWQtPnByaTJxdWV1ZVtwcmldID4gUlRLX1FJRE1BWCkKKyAgICAgICAgICAgIHJldHVybiBSVF9FUlJfUVVFVUVfSUQ7CisKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUHJpb3JpdHlUb1FJRE1hcHBpbmdUYWJsZShxdWV1ZV9udW0gLSAxLCBwcmksIHBQcmkycWlkLT5wcmkycXVldWVbcHJpXSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3Fvc19wcmlNYXBfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHByaW9yaXR5IHRvIHF1ZXVlIElEIG1hcHBpbmcgdGFibGUgcGFyYW1ldGVycy4KKyAqIElucHV0OgorICogICAgICBxdWV1ZV9udW0gLSBRdWV1ZSBudW1iZXIgdXNhZ2UuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBQcmkycWlkIC0gUHJpb3JpdHkgbWFwcGluZyB0byBxdWV1ZSBJRC4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX1FVRVVFX05VTSAgICAtIEludmFsaWQgcXVldWUgbnVtYmVyLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gcmV0dXJuIHRoZSBtYXBwaW5nIHF1ZXVlIGlkIG9mIHRoZSBzcGVjaWZpZWQgcHJpb3JpdHkgYW5kIHF1ZXVlIG51bWJlci4KKyAqICAgICAgVGhlIHF1ZXVlIG51bWJlciBpcyBmcm9tIDEgdG8gOC4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfcW9zX3ByaU1hcF9nZXQocnRrX3F1ZXVlX251bV90IHF1ZXVlX251bSwgcnRrX3Fvc19wcmkycXVldWVfdCAqcFByaTJxaWQpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBwcmk7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKCgwID09IHF1ZXVlX251bSkgfHwgKHF1ZXVlX251bSA+IFJUS19NQVhfTlVNX09GX1FVRVVFKSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9RVUVVRV9OVU07CisKKyAgICBmb3IgKHByaSA9IDA7IHByaSA8PSBSVEtfUFJJTUFYOyBwcmkrKykKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1ByaW9yaXR5VG9RSURNYXBwaW5nVGFibGUocXVldWVfbnVtLTEsIHByaSwgJnBQcmkycWlkLT5wcmkycXVldWVbcHJpXSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3Fvc19zY2hlZHVsaW5nUXVldWVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHdlaWdodCBhbmQgdHlwZSBvZiBxdWV1ZXMgaW4gZGVkaWNhdGVkIHBvcnQuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQb3J0IGlkLgorICogICAgICBwUXdlaWdodHMgICAtIFRoZSBhcnJheSBvZiB3ZWlnaHRzIGZvciBXUlIvV0ZRIHF1ZXVlICgwIGZvciBTVFJJQ1RfUFJJT1JJVFkgcXVldWUpLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqICAgICAgUlRfRVJSX1FPU19RVUVVRV9XRUlHSFQgLSBJbnZhbGlkIHF1ZXVlIHdlaWdodC4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIHNldCB3ZWlnaHQgYW5kIHR5cGUsIHN0cmljdCBwcmlvcml0eSBvciB3ZWlnaHQgZmFpciBxdWV1ZSAoV0ZRKSBmb3IKKyAqICAgICAgZGVkaWNhdGVkIHBvcnQgZm9yIHVzaW5nIHF1ZXVlcy4gSWYgcXVldWUgaWQgaXMgbm90IGluY2x1ZGVkIGluIHF1ZXVlIHVzYWdlLAorICogICAgICB0aGVuIGl0cyB0eXBlIGFuZCB3ZWlnaHQgc2V0dGluZyBpbiBkdW1teSBmb3Igc2V0dGluZy4gVGhlcmUgYXJlIHByaW9yaXRpZXMKKyAqICAgICAgYXMgcXVldWUgaWQgaW4gc3RyaWN0IHF1ZXVlcy4gSXQgbWVhbnMgc3RyaWN0IHF1ZXVlIGlkIDUgY2FycnlpbmcgaGlnaGVyIHByaW9yaXR5CisgKiAgICAgIHRoYW4gc3RyaWN0IHF1ZXVlIGlkIDQuIFRoZSBXRlEgcXVldWUgd2VpZ2h0IGlzIGZyb20gMSB0byAxMjcsIGFuZCB3ZWlnaHQgMCBpcworICogICAgICBmb3Igc3RyaWN0IHByaW9yaXR5IHF1ZXVlIHR5cGUuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3Fvc19zY2hlZHVsaW5nUXVldWVfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3Fvc19xdWV1ZV93ZWlnaHRzX3QgKnBRd2VpZ2h0cykKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHFpZDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBQb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgZm9yIChxaWQgPSAwOyBxaWQgPCBSVEw4MzY3Q19RVUVVRU5POyBxaWQgKyspCisgICAgeworCisgICAgICAgIGlmIChwUXdlaWdodHMtPndlaWdodHNbcWlkXSA+IFFPU19XRUlHSFRfTUFYKQorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9RT1NfUVVFVUVfV0VJR0hUOworCisgICAgICAgIGlmICgwID09IHBRd2VpZ2h0cy0+d2VpZ2h0c1txaWRdKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNRdWV1ZVR5cGUocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIHFpZCwgUVRZUEVfU1RSSUNUKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNRdWV1ZVR5cGUocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIHFpZCwgUVRZUEVfV0ZRKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1dGUVdlaWdodChydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSxxaWQsIHBRd2VpZ2h0cy0+d2VpZ2h0c1txaWRdKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcW9zX3NjaGVkdWxpbmdRdWV1ZV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgd2VpZ2h0IGFuZCB0eXBlIG9mIHF1ZXVlcyBpbiBkZWRpY2F0ZWQgcG9ydC4KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqIE91dHB1dDoKKyAqICAgICAgcFF3ZWlnaHRzIC0gVGhlIGFycmF5IG9mIHdlaWdodHMgZm9yIFdSUi9XRlEgcXVldWUgKDAgZm9yIFNUUklDVF9QUklPUklUWSBxdWV1ZSkuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IHdlaWdodCBhbmQgdHlwZSwgc3RyaWN0IHByaW9yaXR5IG9yIHdlaWdodCBmYWlyIHF1ZXVlIChXRlEpIGZvciBkZWRpY2F0ZWQgcG9ydCBmb3IgdXNpbmcgcXVldWVzLgorICogICAgICBUaGUgV0ZRIHF1ZXVlIHdlaWdodCBpcyBmcm9tIDEgdG8gMTI3LCBhbmQgd2VpZ2h0IDAgaXMgZm9yIHN0cmljdCBwcmlvcml0eSBxdWV1ZSB0eXBlLgorICovCitydGtfYXBpX3JldF90IHJ0a19xb3Nfc2NoZWR1bGluZ1F1ZXVlX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19xb3NfcXVldWVfd2VpZ2h0c190ICpwUXdlaWdodHMpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBxaWQscXR5cGUscXdlaWdodDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBQb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgZm9yIChxaWQgPSAwOyBxaWQgPCBSVEw4MzY3Q19RVUVVRU5POyBxaWQrKykKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1F1ZXVlVHlwZShydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgcWlkLCAmcXR5cGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIGlmIChRVFlQRV9TVFJJQ1QgPT0gcXR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBRd2VpZ2h0cy0+d2VpZ2h0c1txaWRdID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChRVFlQRV9XRlEgPT0gcXR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1dGUVdlaWdodChydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgcWlkLCAmcXdlaWdodCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgcFF3ZWlnaHRzLT53ZWlnaHRzW3FpZF0gPSBxd2VpZ2h0OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19xb3NfMXBSZW1hcmtFbmFibGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IDFwIFJlbWFya2luZyBzdGF0ZQorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgIC0gUG9ydCBpZC4KKyAqICAgICAgZW5hYmxlICAgICAgLSBTdGF0ZSBvZiBwZXItcG9ydCAxcCBSZW1hcmtpbmcKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqICAgICAgUlRfRVJSX0VOQUJMRSAgICAgICAtIEludmFsaWQgZW5hYmxlIHBhcmFtZXRlci4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGVuYWJsZSBvciBkaXNhYmxlIDgwMi4xcCByZW1hcmtpbmcgYWJpbGl0eSBmb3Igd2hvbGUgc3lzdGVtLgorICogICAgICBUaGUgc3RhdHVzIG9mIDgwMi4xcCByZW1hcms6CisgKiAgICAgIC0gRElTQUJMRUQKKyAqICAgICAgLSBFTkFCTEVECisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3Fvc18xcFJlbWFya0VuYWJsZV9zZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfZW5hYmxlX3QgZW5hYmxlKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIENoZWNrIFBvcnQgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQocG9ydCk7CisKKyAgICBpZiAoZW5hYmxlID49IFJUS19FTkFCTEVfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVtYXJraW5nRG90MXBBYmlsaXR5KHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCBlbmFibGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcW9zXzFwUmVtYXJrRW5hYmxlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCA4MDIuMXAgcmVtYXJraW5nIGFiaWxpdHkuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBFbmFibGUgLSBTdGF0dXMgb2YgODAyLjFwIHJlbWFyay4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBnZXQgODAyLjFwIHJlbWFya2luZyBhYmlsaXR5LgorICogICAgICBUaGUgc3RhdHVzIG9mIDgwMi4xcCByZW1hcms6CisgKiAgICAgIC0gRElTQUJMRUQKKyAqICAgICAgLSBFTkFCTEVECisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3Fvc18xcFJlbWFya0VuYWJsZV9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfZW5hYmxlX3QgKnBFbmFibGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgUG9ydCBWYWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwb3J0KTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlbWFya2luZ0RvdDFwQWJpbGl0eShydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgcEVuYWJsZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19xb3NfMXBSZW1hcmtfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IDgwMi4xcCByZW1hcmtpbmcgcGFyYW1ldGVyLgorICogSW5wdXQ6CisgKiAgICAgIGludF9wcmkgICAgIC0gSW50ZXJuYWwgcHJpb3JpdHkgdmFsdWUuCisgKiAgICAgIGRvdDFwX3ByaSAgIC0gODAyLjFwIHByaW9yaXR5IHZhbHVlLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9WTEFOX1BSSU9SSVRZICAgIC0gSW52YWxpZCAxcCBwcmlvcml0eS4KKyAqICAgICAgUlRfRVJSX1FPU19JTlRfUFJJT1JJVFkgLSBJbnZhbGlkIHByaW9yaXR5LgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gc2V0IDgwMi4xcCBwYXJhbWV0ZXJzIHNvdXJjZSBwcmlvcml0eSBhbmQgbmV3IHByaW9yaXR5LgorICovCitydGtfYXBpX3JldF90IHJ0a19xb3NfMXBSZW1hcmtfc2V0KHJ0a19wcmlfdCBpbnRfcHJpLCBydGtfcHJpX3QgZG90MXBfcHJpKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmIChpbnRfcHJpID4gUlRMODM2N0NfUFJJTUFYICkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9RT1NfSU5UX1BSSU9SSVRZOworCisgICAgaWYgKGRvdDFwX3ByaSA+IFJUTDgzNjdDX1BSSU1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9WTEFOX1BSSU9SSVRZOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVtYXJraW5nRG90MXBQYXJhbWV0ZXIoaW50X3ByaSwgZG90MXBfcHJpKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3Fvc18xcFJlbWFya19nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgODAyLjFwIHJlbWFya2luZyBwYXJhbWV0ZXIuCisgKiBJbnB1dDoKKyAqICAgICAgaW50X3ByaSAtIEludGVybmFsIHByaW9yaXR5IHZhbHVlLgorICogT3V0cHV0OgorICogICAgICBwRG90MXBfcHJpIC0gODAyLjFwIHByaW9yaXR5IHZhbHVlLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUU9TX0lOVF9QUklPUklUWSAtIEludmFsaWQgcHJpb3JpdHkuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBnZXQgODAyLjFwIHJlbWFya2luZyBwYXJhbWV0ZXJzLiBJdCB3b3VsZCByZXR1cm4gbmV3IHByaW9yaXR5IG9mIGluZ3Jlc3MgcHJpb3JpdHkuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3Fvc18xcFJlbWFya19nZXQocnRrX3ByaV90IGludF9wcmksIHJ0a19wcmlfdCAqcERvdDFwX3ByaSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAoaW50X3ByaSA+IFJUTDgzNjdDX1BSSU1BWCApCisgICAgICAgIHJldHVybiBSVF9FUlJfUU9TX0lOVF9QUklPUklUWTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlbWFya2luZ0RvdDFwUGFyYW1ldGVyKGludF9wcmksIHBEb3QxcF9wcmkpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcW9zXzFwUmVtYXJrU3JjU2VsX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCByZW1hcmtpbmcgc291cmNlIG9mIDgwMi4xcCByZW1hcmtpbmcuCisgKiBJbnB1dDoKKyAqICAgICAgdHlwZSAgICAgIC0gcmVtYXJraW5nIHNvdXJjZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiAgICAgIFJUX0VSUl9OT1RfSU5JVCAgICAgICAgIC0gVGhlIG1vZHVsZSBpcyBub3QgaW5pdGlhbAorICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBpbnZhbGlkIHBvcnQgaWQKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgLSBpbnZhbGlkIGlucHV0IHBhcmFtZXRlcgorCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBjb25maWd1cmUgODAyLjFwIHJlbWFyayBmdW5jdGlvbmFsaXR5IHRvIG1hcCBvcmlnaW5hbCA4MDIuMXAgdmFsdWUgb3IgaW50ZXJuYWwKKyAqICAgICAgcHJpb3JpdHkgdG8gVFggRFNDUCB2YWx1ZS4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfcW9zXzFwUmVtYXJrU3JjU2VsX3NldChydGtfcW9zXzFwUm1rU3JjX3QgdHlwZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAodHlwZSA+PSBET1QxUF9STUtfU1JDX0VORCApCisgICAgICAgIHJldHVybiBSVF9FUlJfUU9TX0lOVF9QUklPUklUWTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlbWFya2luZ0RvdDFwU3JjKHR5cGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcW9zXzFwUmVtYXJrU3JjU2VsX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCByZW1hcmtpbmcgc291cmNlIG9mIDgwMi4xcCByZW1hcmtpbmcuCisgKiBJbnB1dDoKKyAqICAgICAgbm9uZQorICogT3V0cHV0OgorICogICAgICBwVHlwZSAgICAgIC0gcmVtYXJraW5nIHNvdXJjZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfTk9UX0lOSVQgICAgICAgICAtIFRoZSBtb2R1bGUgaXMgbm90IGluaXRpYWwKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgLSBpbnZhbGlkIHBvcnQgaWQKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgLSBpbnZhbGlkIGlucHV0IHBhcmFtZXRlcgorICogICAgICBSVF9FUlJfTlVMTF9QT0lOVEVSICAgICAtIGlucHV0IHBhcmFtZXRlciBtYXkgYmUgbnVsbCBwb2ludGVyCisKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfcW9zXzFwUmVtYXJrU3JjU2VsX2dldChydGtfcW9zXzFwUm1rU3JjX3QgKnBUeXBlKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlbWFya2luZ0RvdDFwU3JjKHBUeXBlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcW9zX2RzY3BSZW1hcmtFbmFibGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IERTQ1AgcmVtYXJraW5nIGFiaWxpdHkuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIFBvcnQgaWQuCisgKiAgICAgIGVuYWJsZSAgLSBzdGF0dXMgb2YgRFNDUCByZW1hcmsuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfUU9TX0lOVF9QUklPUklUWSAtIEludmFsaWQgcHJpb3JpdHkuCisgKiAgICAgIFJUX0VSUl9FTkFCTEUgICAgICAgICAgIC0gSW52YWxpZCBlbmFibGUgcGFyYW1ldGVyLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZW5hYmxlIG9yIGRpc2FibGUgRFNDUCByZW1hcmtpbmcgYWJpbGl0eSBmb3Igd2hvbGUgc3lzdGVtLgorICogICAgICBUaGUgc3RhdHVzIG9mIERTQ1AgcmVtYXJrOgorICogICAgICAtIERJU0FCTEVECisgKiAgICAgIC0gRU5BQkxFRAorICovCitydGtfYXBpX3JldF90IHJ0a19xb3NfZHNjcFJlbWFya0VuYWJsZV9zZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfZW5hYmxlX3QgZW5hYmxlKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qZm9yIHdob2xlIHN5c3RlbSBmdW5jdGlvbiwgdGhlIHBvcnQgdmFsdWUgc2hvdWxkIGJlIDB4RkYqLworICAgIGlmIChwb3J0ICE9IFJUS19XSE9MRV9TWVNURU0pCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIGlmIChlbmFibGUgPj0gUlRLX0VOQUJMRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZW1hcmtpbmdEc2NwQWJpbGl0eShlbmFibGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcW9zX2RzY3BSZW1hcmtFbmFibGVfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IERTQ1AgcmVtYXJraW5nIGFiaWxpdHkuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBFbmFibGUgLSBzdGF0dXMgb2YgRFNDUCByZW1hcmtpbmcuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IERTQ1AgcmVtYXJraW5nIGFiaWxpdHkuCisgKiAgICAgIFRoZSBzdGF0dXMgb2YgRFNDUCByZW1hcms6CisgKiAgICAgIC0gRElTQUJMRUQKKyAqICAgICAgLSBFTkFCTEVECisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3Fvc19kc2NwUmVtYXJrRW5hYmxlX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19lbmFibGVfdCAqcEVuYWJsZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKmZvciB3aG9sZSBzeXN0ZW0gZnVuY3Rpb24sIHRoZSBwb3J0IHZhbHVlIHNob3VsZCBiZSAweEZGKi8KKyAgICBpZiAocG9ydCAhPSBSVEtfV0hPTEVfU1lTVEVNKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZW1hcmtpbmdEc2NwQWJpbGl0eShwRW5hYmxlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3Fvc19kc2NwUmVtYXJrX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBEU0NQIHJlbWFya2luZyBwYXJhbWV0ZXIuCisgKiBJbnB1dDoKKyAqICAgICAgaW50X3ByaSAtIEludGVybmFsIHByaW9yaXR5IHZhbHVlLgorICogICAgICBkc2NwICAgIC0gRFNDUCB2YWx1ZS4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUU9TX0lOVF9QUklPUklUWSAtIEludmFsaWQgcHJpb3JpdHkuCisgKiAgICAgIFJUX0VSUl9RT1NfRFNDUF9WQUxVRSAgIC0gSW52YWxpZCBEU0NQIHZhbHVlLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gc2V0IERTQ1AgdmFsdWUgYW5kIG1hcHBpbmcgcHJpb3JpdHkuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3Fvc19kc2NwUmVtYXJrX3NldChydGtfcHJpX3QgaW50X3ByaSwgcnRrX2RzY3BfdCBkc2NwKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmIChpbnRfcHJpID4gUlRLX1BSSU1BWCApCisgICAgICAgIHJldHVybiBSVF9FUlJfUU9TX0lOVF9QUklPUklUWTsKKworICAgIGlmIChkc2NwID4gUlRLX0RTQ1BNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUU9TX0RTQ1BfVkFMVUU7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZW1hcmtpbmdEc2NwUGFyYW1ldGVyKGludF9wcmksIGRzY3ApKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19xb3NfZHNjcFJlbWFya19nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgRFNDUCByZW1hcmtpbmcgcGFyYW1ldGVyLgorICogSW5wdXQ6CisgKiAgICAgIGludF9wcmkgLSBJbnRlcm5hbCBwcmlvcml0eSB2YWx1ZS4KKyAqIE91dHB1dDoKKyAqICAgICAgRHNjcCAtIERTQ1AgdmFsdWUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9RT1NfSU5UX1BSSU9SSVRZIC0gSW52YWxpZCBwcmlvcml0eS4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGdldCBEU0NQIHBhcmFtZXRlcnMuIEl0IHdvdWxkIHJldHVybiBEU0NQIHZhbHVlIGZvciBtYXBwaW5nIHByaW9yaXR5LgorICovCitydGtfYXBpX3JldF90IHJ0a19xb3NfZHNjcFJlbWFya19nZXQocnRrX3ByaV90IGludF9wcmksIHJ0a19kc2NwX3QgKnBEc2NwKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmIChpbnRfcHJpID4gUlRLX1BSSU1BWCApCisgICAgICAgIHJldHVybiBSVF9FUlJfUU9TX0lOVF9QUklPUklUWTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlbWFya2luZ0RzY3BQYXJhbWV0ZXIoaW50X3ByaSwgcERzY3ApKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcW9zX2RzY3BSZW1hcmtTcmNTZWxfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHJlbWFya2luZyBzb3VyY2Ugb2YgRFNDUCByZW1hcmtpbmcuCisgKiBJbnB1dDoKKyAqICAgICAgdHlwZSAgICAgIC0gcmVtYXJraW5nIHNvdXJjZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiAgICAgIFJUX0VSUl9OT1RfSU5JVCAgICAgICAgIC0gVGhlIG1vZHVsZSBpcyBub3QgaW5pdGlhbAorICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBpbnZhbGlkIHBvcnQgaWQKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgLSBpbnZhbGlkIGlucHV0IHBhcmFtZXRlcgorCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBjb25maWd1cmUgRFNDUCByZW1hcmsgZnVuY3Rpb25hbGl0eSB0byBtYXAgb3JpZ2luYWwgRFNDUCB2YWx1ZSBvciBpbnRlcm5hbAorICogICAgICBwcmlvcml0eSB0byBUWCBEU0NQIHZhbHVlLgorICovCitydGtfYXBpX3JldF90IHJ0a19xb3NfZHNjcFJlbWFya1NyY1NlbF9zZXQocnRrX3Fvc19kc2NwUm1rU3JjX3QgdHlwZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAodHlwZSA+PSBEU0NQX1JNS19TUkNfRU5EICkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9RT1NfSU5UX1BSSU9SSVRZOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVtYXJraW5nRHNjcFNyYyh0eXBlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3Fvc19kY3BSZW1hcmtTcmNTZWxfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHJlbWFya2luZyBzb3VyY2Ugb2YgRFNDUCByZW1hcmtpbmcuCisgKiBJbnB1dDoKKyAqICAgICAgbm9uZQorICogT3V0cHV0OgorICogICAgICBwVHlwZSAgICAgIC0gcmVtYXJraW5nIHNvdXJjZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfTk9UX0lOSVQgICAgICAgICAtIFRoZSBtb2R1bGUgaXMgbm90IGluaXRpYWwKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgLSBpbnZhbGlkIHBvcnQgaWQKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgLSBpbnZhbGlkIGlucHV0IHBhcmFtZXRlcgorICogICAgICBSVF9FUlJfTlVMTF9QT0lOVEVSICAgICAtIGlucHV0IHBhcmFtZXRlciBtYXkgYmUgbnVsbCBwb2ludGVyCisKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfcW9zX2RzY3BSZW1hcmtTcmNTZWxfZ2V0KHJ0a19xb3NfZHNjcFJta1NyY190ICpwVHlwZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZW1hcmtpbmdEc2NwU3JjKHBUeXBlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3Fvc19kc2NwUmVtYXJrMkRzY3Bfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IERTQ1AgdG8gcmVtYXJrZWQgRFNDUCBtYXBwaW5nLgorICogSW5wdXQ6CisgKiAgICAgIGRzY3AgICAgLSBEU0NQIHZhbHVlCisgKiAgICAgIHJta0RzY3AgLSByZW1hcmtlZCBEU0NQIHZhbHVlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiAgICAgIFJUX0VSUl9RT1NfRFNDUF9WQUxVRSAgIC0gSW52YWxpZCBkc2NwIHZhbHVlCisgKiBOb3RlOgorICogICAgICBkc2NwIHBhcmFtZXRlciBjYW4gYmUgRFNDUCB2YWx1ZSBvciBpbnRlcm5hbCBwcmlvcml0eSBhY2NvcmRpbmcgdG8gY29uZmlndXJhdGlvbiBvZiBBUEkKKyAqICAgICAgZGFsX2Fwb2xsb21wX3Fvc19kc2NwUmVtYXJrU3JjU2VsX3NldCgpLCBiZWNhdXNlIERTQ1AgcmVtYXJrIGZ1bmN0aW9uYWxpdHkgY2FuIG1hcCBvcmlnaW5hbCBEU0NQCisgKiAgICAgIHZhbHVlIG9yIGludGVybmFsIHByaW9yaXR5IHRvIFRYIERTQ1AgdmFsdWUuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3Fvc19kc2NwUmVtYXJrMkRzY3Bfc2V0KHJ0a19kc2NwX3QgZHNjcCwgcnRrX2RzY3BfdCBybWtEc2NwKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmICgoZHNjcCA+IFJUS19EU0NQTUFYKSB8fCAocm1rRHNjcCA+IFJUS19EU0NQTUFYKSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9RT1NfRFNDUF9WQUxVRTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlbWFya2luZ0RzY3AyRHNjcChkc2NwLCBybWtEc2NwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3Fvc19kc2NwUmVtYXJrMkRzY3BfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IERTQ1AgdG8gcmVtYXJrZWQgRFNDUCBtYXBwaW5nLgorICogSW5wdXQ6CisgKiAgICAgIGRzY3AgICAgLSBEU0NQIHZhbHVlCisgKiBPdXRwdXQ6CisgKiAgICAgIHBEc2NwICAgLSByZW1hcmtlZCBEU0NQIHZhbHVlCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiAgICAgIFJUX0VSUl9RT1NfRFNDUF9WQUxVRSAgIC0gSW52YWxpZCBkc2NwIHZhbHVlCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgICAgIC0gTlVMTCBwb2ludGVyCisgKiBOb3RlOgorICogICAgICBOb25lLgorICovCitydGtfYXBpX3JldF90IHJ0a19xb3NfZHNjcFJlbWFyazJEc2NwX2dldChydGtfZHNjcF90IGRzY3AsIHJ0a19kc2NwX3QgKnBEc2NwKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmIChkc2NwID4gUlRLX0RTQ1BNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUU9TX0RTQ1BfVkFMVUU7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZW1hcmtpbmdEc2NwMkRzY3AoZHNjcCwgcERzY3ApKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcW9zX3BvcnRQcmlTZWxJbmRleF9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBDb25maWd1cmUgcHJpb3JpdHkgZGVjaXNpb24gaW5kZXggdG8gZWFjaCBwb3J0LgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBQb3J0IGlkLgorICogICAgICBpbmRleCAtIHByaW9yaXR5IGRlY2lzaW9uIGluZGV4LgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqICAgICAgUlRfRVJSX0VOVFJZX0lOREVYIC0gSW52YWxpZCBlbnRyeSBpbmRleC4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIHNldCBwcmlvcml0eSBvZiBwb3J0IGFzc2lnbm1lbnRzIGZvciBxdWV1ZSB1c2FnZSBhbmQgcGFja2V0IHNjaGVkdWxpbmcuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3Fvc19wb3J0UHJpU2VsSW5kZXhfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3Fvc19wcmlEZWNUYmxfdCBpbmRleCkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBQb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgaWYgKGluZGV4ID49IFBSSURFQ1RCTF9FTkQgKQorICAgICAgICByZXR1cm4gUlRfRVJSX0VOVFJZX0lOREVYOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUG9ydFByaW9yaXR5RGVjaXNpb25JbmRleChydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgaW5kZXgpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcW9zX3BvcnRQcmlTZWxJbmRleF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcHJpb3JpdHkgZGVjaXNpb24gaW5kZXggZnJvbSBlYWNoIHBvcnQuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBJbmRleCAtIHByaW9yaXR5IGRlY2lzaW9uIGluZGV4LgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGdldCBwcmlvcml0eSBvZiBwb3J0IGFzc2lnbm1lbnRzIGZvciBxdWV1ZSB1c2FnZSBhbmQgcGFja2V0IHNjaGVkdWxpbmcuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3Fvc19wb3J0UHJpU2VsSW5kZXhfZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3Fvc19wcmlEZWNUYmxfdCAqcEluZGV4KQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIENoZWNrIFBvcnQgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQocG9ydCk7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQb3J0UHJpb3JpdHlEZWNpc2lvbkluZGV4KHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCBwSW5kZXgpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisKKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3JhdGUuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9yYXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA3N2UwYwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9yYXRlLmMKQEAgLTAsMCArMSw2MDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogJFJldmlzaW9uOiA3NjMwNiAkCisgKiAkRGF0ZTogMjAxNy0wMy0wOCAxNToxMzo1OCArMDgwMCAo6YCx5LiJLCAwOCDkuInmnIggMjAxNykgJAorICoKKyAqIFB1cnBvc2UgOiBSVEsgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJIGZvciBSVEw4MzY3L1JUTDgzNjdDCisgKiBGZWF0dXJlIDogSGVyZSBpcyBhIGxpc3Qgb2YgYWxsIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIGluIHJhdGUgbW9kdWxlLgorICoKKyAqLworCisjaW5jbHVkZSA8cnRrX3N3aXRjaC5oPgorI2luY2x1ZGUgPHJ0a19lcnJvci5oPgorI2luY2x1ZGUgPHJhdGUuaD4KKyNpbmNsdWRlIDxxb3MuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnYuaD4KKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2X21ldGVyLmg+CisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl9pbmJ3Y3RybC5oPgorI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnZfc2NoZWR1bGluZy5oPgorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcmF0ZV9zaGFyZU1ldGVyX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBtZXRlciBjb25maWd1cmF0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgaW5kZXggICAgICAgLSBzaGFyZWQgbWV0ZXIgaW5kZXgKKyAqICAgICAgdHlwZSAgICAgICAgLSBzaGFyZWQgbWV0ZXIgdHlwZQorICogICAgICByYXRlICAgICAgICAtIHJhdGUgb2Ygc2hhcmUgbWV0ZXIKKyAqICAgICAgaWZnX2luY2x1ZGUgLSBpbmNsdWRlIElGRyBvciBub3QsIEVOQUJMRTppbmNsdWRlIERJU0FCTEU6ZXhjbHVkZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9GSUxURVJfTUVURVJfSUQgIC0gSW52YWxpZCBtZXRlcgorICogICAgICBSVF9FUlJfUkFURSAgICAgICAgICAgICAtIEludmFsaWQgcmF0ZQorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycworICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gc2V0IHNoYXJlZCBtZXRlciByYXRlIGFuZCBpZmcgaW5jbHVkZSBmb3IgZWFjaCBtZXRlci4KKyAqICAgICAgVGhlIHJhdGUgdW5pdCBpcyAxIGticHMgYW5kIHRoZSByYW5nZSBpcyBmcm9tIDhrIHRvIDEwNDg1NjhrIGlmIHR5cGUgaXMgTUVURVJfVFlQRV9LQlBTIGFuZAorICogICAgICB0aGUgZ3JhbnVsYXJpdHkgb2YgcmF0ZSBpcyA4IGticHMuCisgKiAgICAgIFRoZSByYXRlIHVuaXQgaXMgcGFja2V0cyBwZXIgc2Vjb25kIGFuZCB0aGUgcmFuZ2UgaXMgMSB+IDB4MUZGRiBpZiB0eXBlIGlzIE1FVEVSX1RZUEVfUFBTLgorICogICAgICBUaGUgaWZnX2luY2x1ZGUgcGFyYW1ldGVyIGlzIHVzZWQKKyAqICAgICAgZm9yIHJhdGUgY2FsY3VsYXRpb24gd2l0aC93aXRob3V0IGludGVyLWZyYW1lLWdhcCBhbmQgcHJlYW1ibGUuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3JhdGVfc2hhcmVNZXRlcl9zZXQocnRrX21ldGVyX2lkX3QgaW5kZXgsIHJ0a19tZXRlcl90eXBlX3QgdHlwZSwgcnRrX3JhdGVfdCByYXRlLCBydGtfZW5hYmxlX3QgaWZnX2luY2x1ZGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKGluZGV4ID4gUlRLX01BWF9NRVRFUl9JRCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9GSUxURVJfTUVURVJfSUQ7CisKKyAgICBpZiAodHlwZSA+PSBNRVRFUl9UWVBFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmIChpZmdfaW5jbHVkZSA+PSBSVEtfRU5BQkxFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICAgIGNhc2UgTUVURVJfVFlQRV9LQlBTOgorICAgICAgICAgICAgaWYgKHJhdGUgPiBSVEw4MzY3Q19RT1NfUkFURV9JTlBVVF9NQVhfSFNHIHx8IHJhdGUgPCBSVEw4MzY3Q19RT1NfUkFURV9JTlBVVF9NSU4pCisgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9SQVRFIDsKKworICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU2hhcmVNZXRlcihpbmRleCwgcmF0ZSA+PiAzLCBpZmdfaW5jbHVkZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNRVRFUl9UWVBFX1BQUzoKKyAgICAgICAgICAgIGlmIChyYXRlID4gUlRMODM2N0NfUU9TX1BQU19JTlBVVF9NQVggfHwgcmF0ZSA8IFJUTDgzNjdDX1FPU19QUFNfSU5QVVRfTUlOKQorICAgICAgICAgICAgICAgIHJldHVybiBSVF9FUlJfUkFURSA7CisKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1NoYXJlTWV0ZXIoaW5kZXgsIHJhdGUsIGlmZ19pbmNsdWRlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKyAgICB9CisKKyAgICAvKiBTZXQgVHlwZSAqLworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1NoYXJlTWV0ZXJUeXBlKGluZGV4LCAocnRrX3VpbnQzMil0eXBlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3JhdGVfc2hhcmVNZXRlcl9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgbWV0ZXIgY29uZmlndXJhdGlvbgorICogSW5wdXQ6CisgKiAgICAgIGluZGV4ICAgICAgICAtIHNoYXJlZCBtZXRlciBpbmRleAorICogT3V0cHV0OgorICogICAgICBwVHlwZSAgICAgICAgLSBNZXRlciBUeXBlCisgKiAgICAgIHBSYXRlICAgICAgICAtIHBvaW50ZXIgb2YgcmF0ZSBvZiBzaGFyZSBtZXRlcgorICogICAgICBwSWZnX2luY2x1ZGUgLSBpbmNsdWRlIElGRyBvciBub3QsIEVOQUJMRTppbmNsdWRlIERJU0FCTEU6ZXhjbHVkZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfRklMVEVSX01FVEVSX0lEICAtIEludmFsaWQgbWV0ZXIKKyAqIE5vdGU6CisgKgorICovCitydGtfYXBpX3JldF90IHJ0a19yYXRlX3NoYXJlTWV0ZXJfZ2V0KHJ0a19tZXRlcl9pZF90IGluZGV4LCBydGtfbWV0ZXJfdHlwZV90ICpwVHlwZSwgcnRrX3JhdGVfdCAqcFJhdGUsIHJ0a19lbmFibGVfdCAqcElmZ19pbmNsdWRlKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcmVnRGF0YTsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAoaW5kZXggPiBSVEtfTUFYX01FVEVSX0lEKQorICAgICAgICByZXR1cm4gUlRfRVJSX0ZJTFRFUl9NRVRFUl9JRDsKKworICAgIGlmKE5VTEwgPT0gcFR5cGUpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYoTlVMTCA9PSBwUmF0ZSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZihOVUxMID09IHBJZmdfaW5jbHVkZSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTaGFyZU1ldGVyKGluZGV4LCAmcmVnRGF0YSwgcElmZ19pbmNsdWRlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU2hhcmVNZXRlclR5cGUoaW5kZXgsIChydGtfdWludDMyICopcFR5cGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZigqcFR5cGUgPT0gTUVURVJfVFlQRV9LQlBTKQorICAgICAgICAqcFJhdGUgPSByZWdEYXRhPDwzOworICAgIGVsc2UKKyAgICAgICAgKnBSYXRlID0gcmVnRGF0YTsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19yYXRlX3NoYXJlTWV0ZXJCdWNrZXRfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IG1ldGVyIEJ1Y2tldCBTaXplCisgKiBJbnB1dDoKKyAqICAgICAgaW5kZXggICAgICAgIC0gc2hhcmVkIG1ldGVyIGluZGV4CisgKiAgICAgIGJ1Y2tldF9zaXplICAtIEJ1Y2tldCBTaXplCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgLSBFcnJvciBJbnB1dAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0ZJTFRFUl9NRVRFUl9JRCAgLSBJbnZhbGlkIG1ldGVyCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBzZXQgc2hhcmVkIG1ldGVyIGJ1Y2tldCBzaXplLgorICovCitydGtfYXBpX3JldF90IHJ0a19yYXRlX3NoYXJlTWV0ZXJCdWNrZXRfc2V0KHJ0a19tZXRlcl9pZF90IGluZGV4LCBydGtfdWludDMyIGJ1Y2tldF9zaXplKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmIChpbmRleCA+IFJUS19NQVhfTUVURVJfSUQpCisgICAgICAgIHJldHVybiBSVF9FUlJfRklMVEVSX01FVEVSX0lEOworCisgICAgaWYoYnVja2V0X3NpemUgPiBSVEw4MzY3Q19NRVRFUkJVQ0tFVFNJWkVNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTaGFyZU1ldGVyQnVja2V0U2l6ZShpbmRleCwgYnVja2V0X3NpemUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcmF0ZV9zaGFyZU1ldGVyQnVja2V0X2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBtZXRlciBCdWNrZXQgU2l6ZQorICogSW5wdXQ6CisgKiAgICAgIGluZGV4ICAgICAgICAtIHNoYXJlZCBtZXRlciBpbmRleAorICogT3V0cHV0OgorICogICAgICBwQnVja2V0X3NpemUgLSBCdWNrZXQgU2l6ZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfRklMVEVSX01FVEVSX0lEICAtIEludmFsaWQgbWV0ZXIKKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGdldCBzaGFyZWQgbWV0ZXIgYnVja2V0IHNpemUuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3JhdGVfc2hhcmVNZXRlckJ1Y2tldF9nZXQocnRrX21ldGVyX2lkX3QgaW5kZXgsIHJ0a191aW50MzIgKnBCdWNrZXRfc2l6ZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAoaW5kZXggPiBSVEtfTUFYX01FVEVSX0lEKQorICAgICAgICByZXR1cm4gUlRfRVJSX0ZJTFRFUl9NRVRFUl9JRDsKKworICAgIGlmKE5VTEwgPT0gcEJ1Y2tldF9zaXplKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1NoYXJlTWV0ZXJCdWNrZXRTaXplKGluZGV4LCBwQnVja2V0X3NpemUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcmF0ZV9pZ3JCYW5kd2lkdGhDdHJsUmF0ZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgcG9ydCBpbmdyZXNzIGJhbmR3aWR0aCBjb250cm9sCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQb3J0IGlkCisgKiAgICAgIHJhdGUgICAgICAgIC0gUmF0ZSBvZiBzaGFyZSBtZXRlcgorICogICAgICBpZmdfaW5jbHVkZSAtIGluY2x1ZGUgSUZHIG9yIG5vdCwgRU5BQkxFOmluY2x1ZGUgRElTQUJMRTpleGNsdWRlCisgKiAgICAgIGZjX2VuYWJsZSAgIC0gZW5hYmxlIGZsb3cgY29udHJvbCBvciBub3QsIEVOQUJMRTp1c2UgZmxvdyBjb250cm9sIERJU0FCTEU6ZHJvcAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfRU5BQkxFICAgICAgIC0gSW52YWxpZCBJRkcgcGFyYW1ldGVyLgorICogICAgICBSVF9FUlJfSU5CV19SQVRFICAgIC0gSW52YWxpZCBpbmdyZXNzIHJhdGUgcGFyYW1ldGVyLgorICogTm90ZToKKyAqICAgICAgVGhlIHJhdGUgdW5pdCBpcyAxIGticHMgYW5kIHRoZSByYW5nZSBpcyBmcm9tIDhrIHRvIDEwNDg1NjhrLiBUaGUgZ3JhbnVsYXJpdHkgb2YgcmF0ZSBpcyA4IGticHMuCisgKiAgICAgIFRoZSBpZmdfaW5jbHVkZSBwYXJhbWV0ZXIgaXMgdXNlZCBmb3IgcmF0ZSBjYWxjdWxhdGlvbiB3aXRoL3dpdGhvdXQgaW50ZXItZnJhbWUtZ2FwIGFuZCBwcmVhbWJsZS4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfcmF0ZV9pZ3JCYW5kd2lkdGhDdHJsUmF0ZV9zZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfcmF0ZV90IHJhdGUsIHJ0a19lbmFibGVfdCBpZmdfaW5jbHVkZSwgcnRrX2VuYWJsZV90IGZjX2VuYWJsZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBQb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgaWYoaWZnX2luY2x1ZGUgPj0gUlRLX0VOQUJMRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZihmY19lbmFibGUgPj0gUlRLX0VOQUJMRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZihydGtfc3dpdGNoX2lzSHNnUG9ydChwb3J0KSA9PSBSVF9FUlJfT0spCisgICAgeworICAgICAgICBpZiAoKHJhdGUgPiBSVEw4MzY3Q19RT1NfUkFURV9JTlBVVF9NQVhfSFNHKSB8fCAocmF0ZSA8IFJUTDgzNjdDX1FPU19SQVRFX0lOUFVUX01JTikpCisgICAgICAgICAgICByZXR1cm4gUlRfRVJSX1FPU19FQldfUkFURSA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmICgocmF0ZSA+IFJUTDgzNjdDX1FPU19SQVRFX0lOUFVUX01BWCkgfHwgKHJhdGUgPCBSVEw4MzY3Q19RT1NfUkFURV9JTlBVVF9NSU4pKQorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9RT1NfRUJXX1JBVEUgOworICAgIH0KKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BvcnRJbmdyZXNzQmFuZHdpZHRoKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCByYXRlPj4zLCBpZmdfaW5jbHVkZSxmY19lbmFibGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcmF0ZV9pZ3JCYW5kd2lkdGhDdHJsUmF0ZV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcG9ydCBpbmdyZXNzIGJhbmR3aWR0aCBjb250cm9sCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQKKyAqIE91dHB1dDoKKyAqICAgICAgcFJhdGUgICAgICAgICAgIC0gUmF0ZSBvZiBzaGFyZSBtZXRlcgorICogICAgICBwSWZnX2luY2x1ZGUgICAgLSBSYXRlJ3MgY2FsY3VsYXRpb24gaW5jbHVkaW5nIElGRywgRU5BQkxFOmluY2x1ZGUgRElTQUJMRTpleGNsdWRlCisgKiAgICAgIHBGY19lbmFibGUgICAgICAtIGVuYWJsZSBmbG93IGNvbnRyb2wgb3Igbm90LCBFTkFCTEU6dXNlIGZsb3cgY29udHJvbCBESVNBQkxFOmRyb3AKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgIFRoZSByYXRlIHVuaXQgaXMgMSBrYnBzIGFuZCB0aGUgcmFuZ2UgaXMgZnJvbSA4ayB0byAxMDQ4NTY4ay4gVGhlIGdyYW51bGFyaXR5IG9mIHJhdGUgaXMgOCBrYnBzLgorICogICAgIFRoZSBpZmdfaW5jbHVkZSBwYXJhbWV0ZXIgaXMgdXNlZCBmb3IgcmF0ZSBjYWxjdWxhdGlvbiB3aXRoL3dpdGhvdXQgaW50ZXItZnJhbWUtZ2FwIGFuZCBwcmVhbWJsZS4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfcmF0ZV9pZ3JCYW5kd2lkdGhDdHJsUmF0ZV9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfcmF0ZV90ICpwUmF0ZSwgcnRrX2VuYWJsZV90ICpwSWZnX2luY2x1ZGUsIHJ0a19lbmFibGVfdCAqcEZjX2VuYWJsZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHJlZ0RhdGE7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgUG9ydCBWYWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwb3J0KTsKKworICAgIGlmKE5VTEwgPT0gcElmZ19pbmNsdWRlKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmKE5VTEwgPT0gcEZjX2VuYWJsZSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQb3J0SW5ncmVzc0JhbmR3aWR0aChydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgJnJlZ0RhdGEsIHBJZmdfaW5jbHVkZSwgcEZjX2VuYWJsZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICpwUmF0ZSA9IHJlZ0RhdGE8PDM7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcmF0ZV9lZ3JCYW5kd2lkdGhDdHJsUmF0ZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgcG9ydCBlZ3Jlc3MgYmFuZHdpZHRoIGNvbnRyb2wKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAtIFBvcnQgaWQKKyAqICAgICAgcmF0ZSAgICAgICAgLSBSYXRlIG9mIGVncmVzcyBiYW5kd2lkdGgKKyAqICAgICAgaWZnX2luY2x1ZGUgLSBpbmNsdWRlIElGRyBvciBub3QsIEVOQUJMRTppbmNsdWRlIERJU0FCTEU6ZXhjbHVkZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogICAgICBSVF9FUlJfUU9TX0VCV19SQVRFIC0gSW52YWxpZCBlZ3Jlc3MgYmFuZHdpZHRoL3JhdGUKKyAqIE5vdGU6CisgKiAgICAgVGhlIHJhdGUgdW5pdCBpcyAxIGticHMgYW5kIHRoZSByYW5nZSBpcyBmcm9tIDhrIHRvIDEwNDg1NjhrLiBUaGUgZ3JhbnVsYXJpdHkgb2YgcmF0ZSBpcyA4IGticHMuCisgKiAgICAgVGhlIGlmZ19pbmNsdWRlIHBhcmFtZXRlciBpcyB1c2VkIGZvciByYXRlIGNhbGN1bGF0aW9uIHdpdGgvd2l0aG91dCBpbnRlci1mcmFtZS1nYXAgYW5kIHByZWFtYmxlLgorICovCitydGtfYXBpX3JldF90IHJ0a19yYXRlX2VnckJhbmR3aWR0aEN0cmxSYXRlX3NldCggcnRrX3BvcnRfdCBwb3J0LCBydGtfcmF0ZV90IHJhdGUsICBydGtfZW5hYmxlX3QgaWZnX2luY2x1ZGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgUG9ydCBWYWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwb3J0KTsKKworICAgIGlmKHJ0a19zd2l0Y2hfaXNIc2dQb3J0KHBvcnQpID09IFJUX0VSUl9PSykKKyAgICB7CisgICAgICAgIGlmICgocmF0ZSA+IFJUTDgzNjdDX1FPU19SQVRFX0lOUFVUX01BWF9IU0cpIHx8IChyYXRlIDwgUlRMODM2N0NfUU9TX1JBVEVfSU5QVVRfTUlOKSkKKyAgICAgICAgICAgIHJldHVybiBSVF9FUlJfUU9TX0VCV19SQVRFIDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKChyYXRlID4gUlRMODM2N0NfUU9TX1JBVEVfSU5QVVRfTUFYKSB8fCAocmF0ZSA8IFJUTDgzNjdDX1FPU19SQVRFX0lOUFVUX01JTikpCisgICAgICAgICAgICByZXR1cm4gUlRfRVJSX1FPU19FQldfUkFURSA7CisgICAgfQorCisgICAgaWYgKGlmZ19pbmNsdWRlID49IFJUS19FTkFCTEVfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0VOQUJMRTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BvcnRFZ3Jlc3NSYXRlKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCByYXRlPj4zKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUG9ydEVncmVzc1JhdGVJZmcoaWZnX2luY2x1ZGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcmF0ZV9lZ3JCYW5kd2lkdGhDdHJsUmF0ZV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcG9ydCBlZ3Jlc3MgYmFuZHdpZHRoIGNvbnRyb2wKKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZAorICogT3V0cHV0OgorICogICAgICBwUmF0ZSAgICAgICAgICAgLSBSYXRlIG9mIGVncmVzcyBiYW5kd2lkdGgKKyAqICAgICAgcElmZ19pbmNsdWRlICAgIC0gUmF0ZSdzIGNhbGN1bGF0aW9uIGluY2x1ZGluZyBJRkcsIEVOQUJMRTppbmNsdWRlIERJU0FCTEU6ZXhjbHVkZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgVGhlIHJhdGUgdW5pdCBpcyAxIGticHMgYW5kIHRoZSByYW5nZSBpcyBmcm9tIDhrIHRvIDEwNDg1NjhrLiBUaGUgZ3JhbnVsYXJpdHkgb2YgcmF0ZSBpcyA4IGticHMuCisgKiAgICAgVGhlIGlmZ19pbmNsdWRlIHBhcmFtZXRlciBpcyB1c2VkIGZvciByYXRlIGNhbGN1bGF0aW9uIHdpdGgvd2l0aG91dCBpbnRlci1mcmFtZS1nYXAgYW5kIHByZWFtYmxlLgorICovCitydGtfYXBpX3JldF90IHJ0a19yYXRlX2VnckJhbmR3aWR0aEN0cmxSYXRlX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19yYXRlX3QgKnBSYXRlLCBydGtfZW5hYmxlX3QgKnBJZmdfaW5jbHVkZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHJlZ0RhdGE7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgUG9ydCBWYWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwb3J0KTsKKworICAgIGlmKE5VTEwgPT0gcFJhdGUpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYoTlVMTCA9PSBwSWZnX2luY2x1ZGUpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUG9ydEVncmVzc1JhdGUocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgKnBSYXRlID0gcmVnRGF0YSA8PCAzOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUG9ydEVncmVzc1JhdGVJZmcoKHJ0a191aW50MzIqKXBJZmdfaW5jbHVkZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3JhdGVfZWdyUXVldWVCd0N0cmxFbmFibGVfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGVuYWJsZSBzdGF0dXMgb2YgZWdyZXNzIGJhbmR3aWR0aCBjb250cm9sIG9uIHNwZWNpZmllZCBxdWV1ZS4KKyAqIElucHV0OgorICogICAgICB1bml0ICAgIC0gdW5pdCBpZAorICogICAgICBwb3J0ICAgIC0gcG9ydCBpZAorICogICAgICBxdWV1ZSAgIC0gcXVldWUgaWQKKyAqIE91dHB1dDoKKyAqICAgICAgcEVuYWJsZSAtIFBvaW50ZXIgdG8gZW5hYmxlIHN0YXR1cyBvZiBlZ3Jlc3MgcXVldWUgYmFuZHdpZHRoIGNvbnRyb2wKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgLSBpbnZhbGlkIHBvcnQgaWQKKyAqICAgICAgUlRfRVJSX1FVRVVFX0lEICAgICAgICAgLSBpbnZhbGlkIHF1ZXVlIGlkCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgICAgIC0gaW5wdXQgcGFyYW1ldGVyIG1heSBiZSBudWxsIHBvaW50ZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfcmF0ZV9lZ3JRdWV1ZUJ3Q3RybEVuYWJsZV9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfcWlkX3QgcXVldWUsIHJ0a19lbmFibGVfdCAqcEVuYWJsZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBQb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgLypmb3Igd2hvbGUgcG9ydCBmdW5jdGlvbiwgdGhlIHF1ZXVlIHZhbHVlIHNob3VsZCBiZSAweEZGKi8KKyAgICBpZiAocXVldWUgIT0gUlRLX1dIT0xFX1NZU1RFTSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9RVUVVRV9JRDsKKworICAgIGlmKE5VTEwgPT0gcEVuYWJsZSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNBcHJFbmFibGUocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCkscEVuYWJsZSkpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcmF0ZV9lZ3JRdWV1ZUJ3Q3RybEVuYWJsZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgZW5hYmxlIHN0YXR1cyBvZiBlZ3Jlc3MgYmFuZHdpZHRoIGNvbnRyb2wgb24gc3BlY2lmaWVkIHF1ZXVlLgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAtIHBvcnQgaWQKKyAqICAgICAgcXVldWUgIC0gcXVldWUgaWQKKyAqICAgICAgZW5hYmxlIC0gZW5hYmxlIHN0YXR1cyBvZiBlZ3Jlc3MgcXVldWUgYmFuZHdpZHRoIGNvbnRyb2wKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAtIGludmFsaWQgcG9ydCBpZAorICogICAgICBSVF9FUlJfUVVFVUVfSUQgICAgICAgICAtIGludmFsaWQgcXVldWUgaWQKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgLSBpbnZhbGlkIGlucHV0IHBhcmFtZXRlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCitydGtfYXBpX3JldF90IHJ0a19yYXRlX2VnclF1ZXVlQndDdHJsRW5hYmxlX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19xaWRfdCBxdWV1ZSwgcnRrX2VuYWJsZV90IGVuYWJsZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBQb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgLypmb3Igd2hvbGUgcG9ydCBmdW5jdGlvbiwgdGhlIHF1ZXVlIHZhbHVlIHNob3VsZCBiZSAweEZGKi8KKyAgICBpZiAocXVldWUgIT0gUlRLX1dIT0xFX1NZU1RFTSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9RVUVVRV9JRDsKKworICAgIGlmIChlbmFibGU+PVJUS19FTkFCTEVfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljQXByRW5hYmxlKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCBlbmFibGUpKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3JhdGVfZWdyUXVldWVCd0N0cmxSYXRlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCByYXRlIG9mIGVncmVzcyBiYW5kd2lkdGggY29udHJvbCBvbiBzcGVjaWZpZWQgcXVldWUuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgLSBwb3J0IGlkCisgKiAgICAgIHF1ZXVlIC0gcXVldWUgaWQKKyAqICAgICAgcEluZGV4IC0gc2hhcmVkIG1ldGVyIGluZGV4CisgKiBPdXRwdXQ6CisgKiAgICAgIHBSYXRlIC0gcG9pbnRlciB0byByYXRlIG9mIGVncmVzcyBxdWV1ZSBiYW5kd2lkdGggY29udHJvbAorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAtIGludmFsaWQgcG9ydCBpZAorICogICAgICBSVF9FUlJfUVVFVUVfSUQgICAgICAgICAtIGludmFsaWQgcXVldWUgaWQKKyAqICAgICAgUlRfRVJSX0ZJTFRFUl9NRVRFUl9JRCAgLSBJbnZhbGlkIG1ldGVyIGlkCisgKiBOb3RlOgorICogICAgVGhlIGFjdHVhbCByYXRlIGNvbnRyb2wgaXMgc2V0IGluIHNoYXJlZCBtZXRlcnMuCisgKiAgICBUaGUgdW5pdCBvZiBncmFudWxhcml0eSBpcyA4S2Jwcy4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfcmF0ZV9lZ3JRdWV1ZUJ3Q3RybFJhdGVfZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3FpZF90IHF1ZXVlLCBydGtfbWV0ZXJfaWRfdCAqcEluZGV4KQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgb2Zmc2V0X2lkeDsKKyAgICBydGtfdWludDMyIHBoeV9wb3J0OworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIENoZWNrIFBvcnQgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQocG9ydCk7CisKKyAgICBpZiAocXVldWUgPj0gUlRLX01BWF9OVU1fT0ZfUVVFVUUpCisgICAgICAgIHJldHVybiBSVF9FUlJfUVVFVUVfSUQ7CisKKyAgICBpZihOVUxMID09IHBJbmRleCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBwaHlfcG9ydCA9IHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpOworICAgIGlmICgocmV0VmFsPXJ0bDgzNjdjX2dldEFzaWNBcHJNZXRlcihwaHlfcG9ydCwgcXVldWUsJm9mZnNldF9pZHgpKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgKnBJbmRleCA9IG9mZnNldF9pZHggKyAoKHBoeV9wb3J0JTQpKjgpOworCisgICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3JhdGVfZWdyUXVldWVCd0N0cmxSYXRlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCByYXRlIG9mIGVncmVzcyBiYW5kd2lkdGggY29udHJvbCBvbiBzcGVjaWZpZWQgcXVldWUuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgLSBwb3J0IGlkCisgKiAgICAgIHF1ZXVlIC0gcXVldWUgaWQKKyAqICAgICAgaW5kZXggLSBzaGFyZWQgbWV0ZXIgaW5kZXgKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAtIGludmFsaWQgcG9ydCBpZAorICogICAgICBSVF9FUlJfUVVFVUVfSUQgICAgICAgICAtIGludmFsaWQgcXVldWUgaWQKKyAqICAgICAgUlRfRVJSX0ZJTFRFUl9NRVRFUl9JRCAgLSBJbnZhbGlkIG1ldGVyIGlkCisgKiBOb3RlOgorICogICAgVGhlIGFjdHVhbCByYXRlIGNvbnRyb2wgaXMgc2V0IGluIHNoYXJlZCBtZXRlcnMuCisgKiAgICBUaGUgdW5pdCBvZiBncmFudWxhcml0eSBpcyA4S2Jwcy4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfcmF0ZV9lZ3JRdWV1ZUJ3Q3RybFJhdGVfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3FpZF90IHF1ZXVlLCBydGtfbWV0ZXJfaWRfdCBpbmRleCkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIG9mZnNldF9pZHg7CisgICAgcnRrX3VpbnQzMiBwaHlfcG9ydDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBQb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgaWYgKHF1ZXVlID49IFJUS19NQVhfTlVNX09GX1FVRVVFKQorICAgICAgICByZXR1cm4gUlRfRVJSX1FVRVVFX0lEOworCisgICAgaWYgKGluZGV4ID4gUlRLX01BWF9NRVRFUl9JRCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9GSUxURVJfTUVURVJfSUQ7CisKKyAgICBwaHlfcG9ydCA9IHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpOworICAgIGlmIChpbmRleCA8ICgocGh5X3BvcnQlNCkqOCkgfHwgIGluZGV4ID4gKDcgKyAocGh5X3BvcnQlNCkqOCkpCisgICAgICAgIHJldHVybiBSVF9FUlJfRklMVEVSX01FVEVSX0lEOworCisgICAgb2Zmc2V0X2lkeCA9IGluZGV4IC0gKChwaHlfcG9ydCU0KSo4KTsKKworICAgIGlmICgocmV0VmFsPXJ0bDgzNjdjX3NldEFzaWNBcHJNZXRlcihwaHlfcG9ydCxxdWV1ZSxvZmZzZXRfaWR4KSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ybGRwLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvcmxkcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzY2EwMjkKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvcmxkcC5jCkBAIC0wLDAgKzEsNDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNzYzMDYgJAorICogJERhdGU6IDIwMTctMDMtMDggMTU6MTM6NTggKzA4MDAgKLZnpFQsIDA4IKRUpOsgMjAxNykgJAorICoKKyAqIFB1cnBvc2UgOiBEZWNsYXJhdGlvbiBvZiBSTERQIGFuZCBSTFBQIEFQSQorICoKKyAqIEZlYXR1cmUgOiBUaGUgZmlsZSBoYXZlIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBtb2R1bGUgYW5kIHN1Yi1tb2R1bGVzCisgKiAgICAgICAgICAgMSkgUkxEUCBhbmQgUkxQUCBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXMKKyAqCisgKi8KKworCisvKgorICogSW5jbHVkZSBGaWxlcworICovCisjaW5jbHVkZSA8cnRrX3N3aXRjaC5oPgorI2luY2x1ZGUgPHJ0a19lcnJvci5oPgorLy8jaW5jbHVkZSA8cnRrX3R5cGVzLmg+CisjaW5jbHVkZSA8cmxkcC5oPgorCisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydi5oPgorI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnZfcmxkcC5oPgorCisvKgorICogU3ltYm9sIERlZmluaXRpb24KKyAqLworCisKKy8qCisgKiBEYXRhIERlY2xhcmF0aW9uCisgKi8KKworCisvKgorICogTWFjcm8gRGVjbGFyYXRpb24KKyAqLworCisKKy8qCisgKiBGdW5jdGlvbiBEZWNsYXJhdGlvbgorICovCisKKy8qIE1vZHVsZSBOYW1lIDogUkxEUCAqLworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcmxkcF9jb25maWdfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IFJMRFAgbW9kdWxlIGNvbmZpZ3VyYXRpb24KKyAqIElucHV0OgorICogICAgICBwQ29uZmlnIC0gY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgb2YgUkxEUAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiAgICAgIFJUX0VSUl9JTlBVVAorICogICAgICBSVF9FUlJfTlVMTF9QT0lOVEVSCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3JsZHBfY29uZmlnX3NldChydGtfcmxkcF9jb25maWdfdCAqcENvbmZpZykKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBldGhlcl9hZGRyX3QgbWFnaWM7CisgICAgcnRrX3VpbnQzMiBwbXNrOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmIChwQ29uZmlnLT5ybGRwX2VuYWJsZSA+PSBSVEtfRU5BQkxFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmIChwQ29uZmlnLT50cmlnZ2VyX21vZGUgPj0gUlRLX1JMRFBfVFJJR0dFUl9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZiAocENvbmZpZy0+Y29tcGFyZV90eXBlID49IFJUS19STERQX0NNUFRZUEVfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYgKHBDb25maWctPm51bV9jaGVjayA+PSBSVEtfUkxEUF9OVU1fTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYgKHBDb25maWctPmludGVydmFsX2NoZWNrID49IFJUS19STERQX0lOVEVSVkFMX01BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmIChwQ29uZmlnLT5udW1fbG9vcCA+PSBSVEtfUkxEUF9OVU1fTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYgKHBDb25maWctPmludGVydmFsX2xvb3AgPj0gUlRLX1JMRFBfSU5URVJWQUxfTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmxkcFR4UG9ydG1hc2soJnBtc2spKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmxkcFR4UG9ydG1hc2soMHgwMCkpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSbGRwVHhQb3J0bWFzayhwbXNrKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JsZHAocENvbmZpZy0+cmxkcF9lbmFibGUpKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmxkcFRyaWdnZXJNb2RlKHBDb25maWctPnRyaWdnZXJfbW9kZSkpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBtZW1jcHkoJm1hZ2ljLCAmcENvbmZpZy0+bWFnaWMsIHNpemVvZihldGhlcl9hZGRyX3QpKTsKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSbGRwTWFnaWNOdW0obWFnaWMpKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmxkcENvbXBhcmVSYW5kb21OdW1iZXIocENvbmZpZy0+Y29tcGFyZV90eXBlKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JsZHBDb21wYXJlUmFuZG9tTnVtYmVyKHBDb25maWctPmNvbXBhcmVfdHlwZSkpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSbGRwQ2hlY2tpbmdTdGF0ZVBhcmEocENvbmZpZy0+bnVtX2NoZWNrLCBwQ29uZmlnLT5pbnRlcnZhbF9jaGVjaykpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSbGRwTG9vcFN0YXRlUGFyYShwQ29uZmlnLT5udW1fbG9vcCwgcENvbmZpZy0+aW50ZXJ2YWxfbG9vcCkpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19ybGRwX2NvbmZpZ19nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgUkxEUCBtb2R1bGUgY29uZmlndXJhdGlvbgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcENvbmZpZyAtIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIG9mIFJMRFAKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX0lOUFVUCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfcmxkcF9jb25maWdfZ2V0KHJ0a19ybGRwX2NvbmZpZ190ICpwQ29uZmlnKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIGV0aGVyX2FkZHJfdCBtYWdpYzsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSbGRwKCZwQ29uZmlnLT5ybGRwX2VuYWJsZSkpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSbGRwVHJpZ2dlck1vZGUoJnBDb25maWctPnRyaWdnZXJfbW9kZSkpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSbGRwTWFnaWNOdW0oJm1hZ2ljKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICBtZW1jcHkoJnBDb25maWctPm1hZ2ljLCAmbWFnaWMsIHNpemVvZihldGhlcl9hZGRyX3QpKTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JsZHBDb21wYXJlUmFuZG9tTnVtYmVyKCZwQ29uZmlnLT5jb21wYXJlX3R5cGUpKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmxkcENvbXBhcmVSYW5kb21OdW1iZXIoJnBDb25maWctPmNvbXBhcmVfdHlwZSkpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSbGRwQ2hlY2tpbmdTdGF0ZVBhcmEoJnBDb25maWctPm51bV9jaGVjaywgJnBDb25maWctPmludGVydmFsX2NoZWNrKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JsZHBMb29wU3RhdGVQYXJhKCZwQ29uZmlnLT5udW1fbG9vcCwgJnBDb25maWctPmludGVydmFsX2xvb3ApKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcmxkcF9wb3J0Q29uZmlnX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwZXIgcG9ydCBSTERQIG1vZHVsZSBjb25maWd1cmF0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgIC0gcG9ydCBudW1iZXIgdG8gYmUgY29uZmlndXJlZAorICogICAgICBwUG9ydENvbmZpZyAtIHBlciBwb3J0IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIG9mIFJMRFAKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfSU5QVVQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCitydGtfYXBpX3JldF90IHJ0a19ybGRwX3BvcnRDb25maWdfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3JsZHBfcG9ydENvbmZpZ190ICpwUG9ydENvbmZpZykKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHBtc2s7CisgICAgcnRrX3VpbnQzMiBwaHlfcG9ydDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBQb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgaWYgKHBQb3J0Q29uZmlnLT50eF9lbmFibGU+PSBSVEtfRU5BQkxFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIHBoeV9wb3J0ID0gcnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCk7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSbGRwVHhQb3J0bWFzaygmcG1zaykpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAocFBvcnRDb25maWctPnR4X2VuYWJsZSkKKyAgICB7CisgICAgICAgICBwbXNrIHw9KDE8PHBoeV9wb3J0KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgIHBtc2sgJj0gfigxPDxwaHlfcG9ydCk7CisgICAgfQorCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmxkcFR4UG9ydG1hc2socG1zaykpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworCit9IC8qIGVuZCBvZiBydGtfcmxkcF9wb3J0Q29uZmlnX3NldCAqLworCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19ybGRwX3BvcnRDb25maWdfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHBlciBwb3J0IFJMRFAgbW9kdWxlIGNvbmZpZ3VyYXRpb24KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gcG9ydCBudW1iZXIgdG8gYmUgZ2V0CisgKiBPdXRwdXQ6CisgKiAgICAgIHBQb3J0Q29uZmlnIC0gcGVyIHBvcnQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgb2YgUkxEUAorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfSU5QVVQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCitydGtfYXBpX3JldF90IHJ0a19ybGRwX3BvcnRDb25maWdfZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3JsZHBfcG9ydENvbmZpZ190ICpwUG9ydENvbmZpZykKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHBtc2s7CisgICAgcnRrX3BvcnRtYXNrX3QgbG9naWNhbFBtYXNrOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIENoZWNrIFBvcnQgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQocG9ydCk7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSbGRwVHhQb3J0bWFzaygmcG1zaykpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0a19zd2l0Y2hfcG9ydG1hc2tfUDJMX2dldChwbXNrLCAmbG9naWNhbFBtYXNrKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisKKyAgICBpZiAobG9naWNhbFBtYXNrLmJpdHNbMF0gJiAoMTw8cG9ydCkpCisgICAgeworICAgICAgICAgcFBvcnRDb25maWctPnR4X2VuYWJsZSA9IEVOQUJMRUQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICBwUG9ydENvbmZpZy0+dHhfZW5hYmxlID0gRElTQUJMRUQ7CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30gLyogZW5kIG9mIHJ0a19ybGRwX3BvcnRDb25maWdfZ2V0ICovCisKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3JsZHBfc3RhdHVzX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBSTERQIG1vZHVsZSBzdGF0dXMKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBTdGF0dXMgLSBzdGF0dXMgc3RydWN0dXJlIG9mIFJMRFAKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCitydGtfYXBpX3JldF90IHJ0a19ybGRwX3N0YXR1c19nZXQocnRrX3JsZHBfc3RhdHVzX3QgKnBTdGF0dXMpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgZXRoZXJfYWRkcl90IHNlZWQ7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmxkcFJhbmRvbU51bWJlcigmc2VlZCkpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgbWVtY3B5KCZwU3RhdHVzLT5pZCwgJnNlZWQsIHNpemVvZihldGhlcl9hZGRyX3QpKTsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9IC8qIGVuZCBvZiBydGtfcmxkcF9zdGF0dXNfZ2V0ICovCisKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3JsZHBfcG9ydFN0YXR1c19nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgUkxEUCBtb2R1bGUgc3RhdHVzCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIHBvcnQgbnVtYmVyIHRvIGJlIGdldAorICogT3V0cHV0OgorICogICAgICBwUG9ydFN0YXR1cyAtIHBlciBwb3J0IHN0YXR1cyBzdHJ1Y3R1cmUgb2YgUkxEUAorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfSU5QVVQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCitydGtfYXBpX3JldF90IHJ0a19ybGRwX3BvcnRTdGF0dXNfZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3JsZHBfcG9ydFN0YXR1c190ICpwUG9ydFN0YXR1cykKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHBtc2s7CisgICAgcnRrX3BvcnRtYXNrX3QgbG9naWNhbFBtYXNrOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIENoZWNrIFBvcnQgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQocG9ydCk7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSbGRwTG9vcGVkUG9ydG1hc2soJnBtc2spKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIGlmICgocmV0VmFsID0gcnRrX3N3aXRjaF9wb3J0bWFza19QMkxfZ2V0KHBtc2ssICZsb2dpY2FsUG1hc2spKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAobG9naWNhbFBtYXNrLmJpdHNbMF0gJiAoMTw8cG9ydCkpCisgICAgeworICAgICAgICAgcFBvcnRTdGF0dXMtPmxvb3Bfc3RhdHVzID0gUlRLX1JMRFBfTE9PUFNUU19MT09QSU5HOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAgcFBvcnRTdGF0dXMtPmxvb3Bfc3RhdHVzICA9IFJUS19STERQX0xPT1BTVFNfTk9ORTsKKyAgICB9CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSbGRwRW50ZXJMb29wZWRQb3J0bWFzaygmcG1zaykpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgaWYgKChyZXRWYWwgPSBydGtfc3dpdGNoX3BvcnRtYXNrX1AyTF9nZXQocG1zaywgJmxvZ2ljYWxQbWFzaykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmIChsb2dpY2FsUG1hc2suYml0c1swXSAmICgxPDxwb3J0KSkKKyAgICB7CisgICAgICAgICBwUG9ydFN0YXR1cy0+bG9vcF9lbnRlciA9IFJUS19STERQX0xPT1BTVFNfTE9PUElORzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgIHBQb3J0U3RhdHVzLT5sb29wX2VudGVyICA9IFJUS19STERQX0xPT1BTVFNfTk9ORTsKKyAgICB9CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSbGRwTGVhdmVMb29wZWRQb3J0bWFzaygmcG1zaykpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgaWYgKChyZXRWYWwgPSBydGtfc3dpdGNoX3BvcnRtYXNrX1AyTF9nZXQocG1zaywgJmxvZ2ljYWxQbWFzaykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmIChsb2dpY2FsUG1hc2suYml0c1swXSAmICgxPDxwb3J0KSkKKyAgICB7CisgICAgICAgICBwUG9ydFN0YXR1cy0+bG9vcF9sZWF2ZSA9IFJUS19STERQX0xPT1BTVFNfTE9PUElORzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgIHBQb3J0U3RhdHVzLT5sb29wX2xlYXZlICA9IFJUS19STERQX0xPT1BTVFNfTk9ORTsKKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19ybGRwX3BvcnRTdGF0dXNfY2xlYXIKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBDbGVhciBSTERQIG1vZHVsZSBzdGF0dXMKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gcG9ydCBudW1iZXIgdG8gYmUgY2xlYXIKKyAqICAgICAgcFBvcnRTdGF0dXMgLSBwZXIgcG9ydCBzdGF0dXMgc3RydWN0dXJlIG9mIFJMRFAKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfSU5QVVQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUgorICogTm90ZToKKyAqICAgICAgQ2xlYXIgb3BlcmF0aW9uIGVmZmVjdCBsb29wX2VudGVyIGFuZCBsb29wX2xlYXZlIG9ubHksIG90aGVyIGZpZWxkIGluCisgKiAgICAgIHRoZSBzdHJ1Y3R1cmUgYXJlIGRvbid0IGNhcmUuIExvb3Agc3RhdHVzIGNhYid0IGJlIGNsZWFuLgorICovCitydGtfYXBpX3JldF90IHJ0a19ybGRwX3BvcnRTdGF0dXNfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3JsZHBfcG9ydFN0YXR1c190ICpwUG9ydFN0YXR1cykKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHBtc2s7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgUG9ydCBWYWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwb3J0KTsKKworICAgIHBtc2sgPSAocFBvcnRTdGF0dXMtPmxvb3BfZW50ZXIpPDxydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KTsKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSbGRwRW50ZXJMb29wZWRQb3J0bWFzayhwbXNrKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHBtc2sgPSAocFBvcnRTdGF0dXMtPmxvb3BfbGVhdmUpPDxydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KTsKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSbGRwTGVhdmVMb29wZWRQb3J0bWFzayhwbXNrKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19ybGRwX3BvcnRMb29wUGFpcl9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgUkxEUCBwb3J0IGxvb3AgcGFpcnMKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gcG9ydCBudW1iZXIgdG8gYmUgZ2V0CisgKiBPdXRwdXQ6CisgKiAgICAgIHBQb3J0bWFzayAtIHBlciBwb3J0IHJlbGF0ZWQgbG9vcCBwb3J0cworICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfSU5QVVQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCitydGtfYXBpX3JldF90IHJ0a19ybGRwX3BvcnRMb29wUGFpcl9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfcG9ydG1hc2tfdCAqcFBvcnRtYXNrKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcG1zazsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBQb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmxkcExvb3BlZFBvcnRQYWlyKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCAmcG1zaykpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0a19zd2l0Y2hfcG9ydG1hc2tfUDJMX2dldChwbXNrLCBwUG9ydG1hc2spKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisKKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3J0a19oYWwuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGtfaGFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkzNzM0OQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGtfaGFsLmMKQEAgLTAsMCArMSw4MzkgQEAKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgICIuL2luY2x1ZGUvcnRrX3N3aXRjaC5oIgorI2luY2x1ZGUgICIuL2luY2x1ZGUvdmxhbi5oIgorI2luY2x1ZGUgICIuL2luY2x1ZGUvcG9ydC5oIgorI2luY2x1ZGUgICIuL2luY2x1ZGUvcmF0ZS5oIgorI2luY2x1ZGUgICIuL2luY2x1ZGUvcnRrX2hhbC5oIgorI2luY2x1ZGUgICIuL2luY2x1ZGUvbDIuaCIKKyNpbmNsdWRlICAiLi9pbmNsdWRlL3N0YXQuaCIKKyNpbmNsdWRlICAiLi9pbmNsdWRlL2lnbXAuaCIKKyNpbmNsdWRlICAiLi9pbmNsdWRlL3RyYXAuaCIKKyNpbmNsdWRlICAiLi9pbmNsdWRlL2xlYWt5LmgiCisjaW5jbHVkZSAgIi4vaW5jbHVkZS9taXJyb3IuaCIKKyNpbmNsdWRlICAiLi9pbmNsdWRlL3J0bDgzNjdjX2FzaWNkcnZfcG9ydC5oIgorI2luY2x1ZGUgICIuL2luY2x1ZGUvcnRsODM2N2NfYXNpY2Rydl9taWIuaCIKKyNpbmNsdWRlICAiLi9pbmNsdWRlL3NtaS5oIgorI2luY2x1ZGUgICIuL2luY2x1ZGUvcW9zLmgiCisjaW5jbHVkZSAgIi4vaW5jbHVkZS90cnVuay5oIgorCit2b2lkIHJ0a19oYWxfc3dpdGNoX2luaXQodm9pZCkKK3sKKwlpZihydGtfc3dpdGNoX2luaXQoKSAhPSAwKQorICAgICAgICBwcmludGsoInJ0a19zd2l0Y2hfaW5pdCBmYWlsZWRcbiIpOworCW1kZWxheSg1MDApOworCS8qdmxhbiBpbml0ICovCisJaWYgKHJ0a192bGFuX2luaXQoKSAhPSAwKQorICAgICAgICBwcmludGsoInJ0a192bGFuX2luaXQgZmFpbGVkXG4iKTsKK30KKwordm9pZCBydGtfaGFsX2R1bXBfZnVsbF9taWIodm9pZCkKK3sKKwlydGtfcG9ydF90IHBvcnQ7CisJcnRrX3N0YXRfY291bnRlcl90IENudHI7CisJcnRrX3N0YXRfcG9ydF90eXBlX3QgY250cl9pZHg7CisKKwlmb3IgKHBvcnQgPSBVVFBfUE9SVDA7IHBvcnQgPCAoVVRQX1BPUlQwICsgNSk7IHBvcnQrKykgeworCQlwcmludGsoIlxuUG9ydCVkXG4iLCBwb3J0KTsKKwkJZm9yIChjbnRyX2lkeCA9IFNUQVRfSWZJbk9jdGV0czsgY250cl9pZHggPCBTVEFUX1BPUlRfQ05UUl9FTkQ7IGNudHJfaWR4ICsrKSB7CisJCQlydGtfc3RhdF9wb3J0X2dldChwb3J0LCBjbnRyX2lkeCwgJkNudHIpOworCQkJcHJpbnRrKCIlOGxsdSAiLCBDbnRyKTsKKwkJCWlmICgoKGNudHJfaWR4JTEwKSA9PSA5KSkKKwkJCQlwcmludGsoIlxuIik7CisJCX0KKwl9CisKKwlmb3IgKHBvcnQgPSBFWFRfUE9SVDA7IHBvcnQgPCAoRVhUX1BPUlQwICsgMik7IHBvcnQrKykgeworCQlwcmludGsoIlxuUG9ydCVkXG4iLCBwb3J0KTsKKwkJZm9yIChjbnRyX2lkeCA9IFNUQVRfSWZJbk9jdGV0czsgY250cl9pZHggPCBTVEFUX1BPUlRfQ05UUl9FTkQ7IGNudHJfaWR4ICsrKSB7CisJCQlydGtfc3RhdF9wb3J0X2dldChwb3J0LCBjbnRyX2lkeCwgJkNudHIpOworCQkJcHJpbnRrKCIlOGxsdSAiLCBDbnRyKTsKKwkJCWlmICgoKGNudHJfaWR4JTEwKSA9PSA5KSkKKwkJCQlwcmludGsoIlxuIik7CisJCX0KKwl9CisJcnRrX3N0YXRfZ2xvYmFsX3Jlc2V0KCk7Cit9Cit2b2lkIHJ0a19kdW1wX21pYl90eXBlKHJ0a19zdGF0X3BvcnRfdHlwZV90IGNudHJfaWR4KQoreworCXJ0a19wb3J0X3QgcG9ydDsKKwlydGtfc3RhdF9jb3VudGVyX3QgQ250cjsKKworCWZvciAocG9ydCA9IFVUUF9QT1JUMDsgcG9ydCA8IChVVFBfUE9SVDAgKyA1KTsgcG9ydCsrKSB7CisJCXJ0a19zdGF0X3BvcnRfZ2V0KHBvcnQsIGNudHJfaWR4LCAmQ250cik7CisJCXByaW50aygiJThsbHUiLCBDbnRyKTsKKwl9CisJZm9yIChwb3J0ID0gRVhUX1BPUlQwOyBwb3J0IDwgKEVYVF9QT1JUMCArIDIpOyBwb3J0KyspIHsKKwkJcnRrX3N0YXRfcG9ydF9nZXQocG9ydCwgY250cl9pZHgsICZDbnRyKTsKKwkJcHJpbnRrKCIlOGxsdSIsIENudHIpOworCX0KKwlwcmludGsoIlxuIik7Cit9CisKK3ZvaWQgcnRrX2hhbF9kdW1wX21pYih2b2lkKQoreworCisJcHJpbnRrKCI9PT09PT09PT09PT09PT09PT0lOHMlOHMlOHMlOHMlOHMlOHMlOHNcbiIsICJQb3J0MCIsICJQb3J0MSIsCisJICAgICAgICJQb3J0MiIsICJQb3J0MyIsICJQb3J0NCIsICJQb3J0MTYiLCAiUG9ydDE3Iik7CisJLyogR2V0IFRYIFVuaWNhc3QgUGt0cyAqLworCXByaW50aygiVFggVW5pY2FzdCBQa3RzICA6Iik7CisJcnRrX2R1bXBfbWliX3R5cGUoU1RBVF9JZk91dFVjYXN0UGt0cyk7CisJLyogR2V0IFRYIE11bHRpY2FzdCBQa3RzICovCisJcHJpbnRrKCJUWCBNdWx0aWNhc3QgUGt0czoiKTsKKwlydGtfZHVtcF9taWJfdHlwZShTVEFUX0lmT3V0TXVsdGljYXN0UGt0cyk7CisJLyogR2V0IFRYIEJyb2FkQ2FzdCBQa3RzICovCisJcHJpbnRrKCJUWCBCcm9hZENhc3QgUGt0czoiKTsKKwlydGtfZHVtcF9taWJfdHlwZShTVEFUX0lmT3V0QnJvYWRjYXN0UGt0cyk7CisJLyogR2V0IFRYIENvbGxpc2lvbnMgKi8KKwkvKiBHZXQgVFggUHVhc2UgRnJhbWVzICovCisJcHJpbnRrKCJUWCBQYXVzZSBGcmFtZXMgIDoiKTsKKwlydGtfZHVtcF9taWJfdHlwZShTVEFUX0RvdDNPdXRQYXVzZUZyYW1lcyk7CisJLyogR2V0IFRYIERyb3AgRXZlbnRzICovCisJLyogR2V0IFJYIFVuaWNhc3QgUGt0cyAqLworCXByaW50aygiUlggVW5pY2FzdCBQa3RzICA6Iik7CisJcnRrX2R1bXBfbWliX3R5cGUoU1RBVF9JZkluVWNhc3RQa3RzKTsKKwkvKiBHZXQgUlggTXVsdGljYXN0IFBrdHMgKi8KKwlwcmludGsoIlJYIE11bHRpY2FzdCBQa3RzOiIpOworCXJ0a19kdW1wX21pYl90eXBlKFNUQVRfSWZJbk11bHRpY2FzdFBrdHMpOworCS8qIEdldCBSWCBCcm9hZGNhc3QgUGt0cyAqLworCXByaW50aygiUlggQnJvYWRjYXN0IFBrdHM6Iik7CisJcnRrX2R1bXBfbWliX3R5cGUoU1RBVF9JZkluQnJvYWRjYXN0UGt0cyk7CisJLyogR2V0IFJYIEZDUyBFcnJvcyAqLworCXByaW50aygiUlggRkNTIEVycm9ycyAgICA6Iik7CisJcnRrX2R1bXBfbWliX3R5cGUoU1RBVF9Eb3QzU3RhdHNGQ1NFcnJvcnMpOworCS8qIEdldCBSWCBVbmRlcnNpemUgUGt0cyAqLworCXByaW50aygiUlggVW5kZXJzaXplIFBrdHM6Iik7CisJcnRrX2R1bXBfbWliX3R5cGUoU1RBVF9FdGhlclN0YXRzVW5kZXJTaXplUGt0cyk7CisJLyogR2V0IFJYIERpc2NhcmQgUGt0cyAqLworCXByaW50aygiUlggRGlzY2FyZCBQa3RzICA6Iik7CisJcnRrX2R1bXBfbWliX3R5cGUoU1RBVF9Eb3QxZFRwUG9ydEluRGlzY2FyZHMpOworCS8qIEdldCBSWCBGcmFnbWVudHMgKi8KKwlwcmludGsoIlJYIEZyYWdtZW50cyAgICAgOiIpOworCXJ0a19kdW1wX21pYl90eXBlKFNUQVRfRXRoZXJTdGF0c0ZyYWdtZW50cyk7CisJLyogR2V0IFJYIE92ZXJzaXplIFBrdHMgKi8KKwlwcmludGsoIlJYIE92ZXJzaXplIFBrdHMgOiIpOworCXJ0a19kdW1wX21pYl90eXBlKFNUQVRfRXRoZXJPdmVyc2l6ZVN0YXRzKTsKKwkvKiBHZXQgUlggSmFiYmVycyAqLworCXByaW50aygiUlggSmFiYmVycyAgICAgICA6Iik7CisJcnRrX2R1bXBfbWliX3R5cGUoU1RBVF9FdGhlclN0YXRzSmFiYmVycyk7CisJLyogR2V0IFJYIFBhdXNlIEZyYW1lcyAqLworCXByaW50aygiUlggUGF1c2UgRnJhbWVzICA6Iik7CisJcnRrX2R1bXBfbWliX3R5cGUoU1RBVF9Eb3QzSW5QYXVzZUZyYW1lcyk7CisJLyogY2xlYXIgTUlCICovCisJcnRrX3N0YXRfZ2xvYmFsX3Jlc2V0KCk7Cit9CitFWFBPUlRfU1lNQk9MKHJ0a19oYWxfZHVtcF9taWIpOworCitpbnQgcnRrX2hhbF9kdW1wX3ZsYW4odm9pZCkKK3sKKwlydGtfdmxhbl9jZmdfdCB2bGFuOworCWludCBpOworCisJcHJpbnRrKCJ2aWQgICAgcG9ydG1hcFxuIik7CisJZm9yIChpID0gMDsgaSA8IFJUS19TV19WSURfUkFOR0U7IGkrKykgeworCQlydGtfdmxhbl9nZXQoaSwgJnZsYW4pOworCQlwcmludGsoIiUzZCAgICAiLCBpKTsKKwkJcHJpbnRrKCIlYyIsCisJCSAgICAgICBSVEtfUE9SVE1BU0tfSVNfUE9SVF9TRVQodmxhbi5tYnIsCisJCQkJCQlVVFBfUE9SVDApID8gJzEnIDogJy0nKTsKKwkJcHJpbnRrKCIlYyIsCisJCSAgICAgICBSVEtfUE9SVE1BU0tfSVNfUE9SVF9TRVQodmxhbi5tYnIsCisJCQkJCQlVVFBfUE9SVDEpID8gJzEnIDogJy0nKTsKKwkJcHJpbnRrKCIlYyIsCisJCSAgICAgICBSVEtfUE9SVE1BU0tfSVNfUE9SVF9TRVQodmxhbi5tYnIsCisJCQkJCQlVVFBfUE9SVDIpID8gJzEnIDogJy0nKTsKKwkJcHJpbnRrKCIlYyIsCisJCSAgICAgICBSVEtfUE9SVE1BU0tfSVNfUE9SVF9TRVQodmxhbi5tYnIsCisJCQkJCQlVVFBfUE9SVDMpID8gJzEnIDogJy0nKTsKKwkJcHJpbnRrKCIlYyIsCisJCSAgICAgICBSVEtfUE9SVE1BU0tfSVNfUE9SVF9TRVQodmxhbi5tYnIsCisJCQkJCQlVVFBfUE9SVDQpID8gJzEnIDogJy0nKTsKKwkJcHJpbnRrKCIlYyIsCisJCSAgICAgICBSVEtfUE9SVE1BU0tfSVNfUE9SVF9TRVQodmxhbi5tYnIsCisJCQkJCQlFWFRfUE9SVDApID8gJzEnIDogJy0nKTsKKwkJcHJpbnRrKCIlYyIsCisJCSAgICAgICBSVEtfUE9SVE1BU0tfSVNfUE9SVF9TRVQodmxhbi5tYnIsCisJCQkJCQlFWFRfUE9SVDEpID8gJzEnIDogJy0nKTsKKwkJcHJpbnRrKCJcbiIpOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCBydGtfaGFsX2NsZWFyX3ZsYW4odm9pZCkKK3sKKwlydGtfYXBpX3JldF90IHJldDsKKworCXJldCA9ICBydGtfdmxhbl9yZXNldCgpOworICAgIGlmIChyZXQgIT0gUlRfRVJSX09LKQorICAgICAgICBwcmludGsoInJ0a192bGFuX3Jlc2V0IGZhaWxlZFxuIik7Cit9CisKK2ludCBydGtfaGFsX3NldF92bGFuKHN0cnVjdCByYV9zd2l0Y2hfaW9jdGxfZGF0YSAqZGF0YSkKK3sKKwlydGtfdmxhbl9jZmdfdCB2bGFuOworCXJ0a19hcGlfcmV0X3QgcmV0OworCWludCBpOworCisJLyogY2xlYXIgdmxhbiBlbnRyeSBmaXJzdCAqLworCW1lbXNldCgmdmxhbiwgMHgwMCwgc2l6ZW9mKHJ0a192bGFuX2NmZ190KSk7CisJUlRLX1BPUlRNQVNLX0NMRUFSKHZsYW4ubWJyKTsKKwlSVEtfUE9SVE1BU0tfQ0xFQVIodmxhbi51bnRhZyk7CisJcnRrX3ZsYW5fc2V0KGRhdGEtPnZpZCwgJnZsYW4pOworCisJbWVtc2V0KCZ2bGFuLCAweDAwLCBzaXplb2YocnRrX3ZsYW5fY2ZnX3QpKTsKKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJCWlmIChkYXRhLT5wb3J0X21hcCAmICgxIDw8IGkpKSB7CisJCQlSVEtfUE9SVE1BU0tfUE9SVF9TRVQodmxhbi5tYnIsIGkpOworCQkJUlRLX1BPUlRNQVNLX1BPUlRfU0VUKHZsYW4udW50YWcsIGkpOworCQkJcnRrX3ZsYW5fcG9ydFB2aWRfc2V0KGksIGRhdGEtPnZpZCwgMCk7CisJCX0KKwl9CisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlpZiAoZGF0YS0+cG9ydF9tYXAgJiAoMSA8PCAoaSArIDUpKSkgeworCQkJUlRLX1BPUlRNQVNLX1BPUlRfU0VUKHZsYW4ubWJyLCAoaSArIEVYVF9QT1JUMCkpOworCQkJUlRLX1BPUlRNQVNLX1BPUlRfU0VUKHZsYW4udW50YWcsIChpICsgRVhUX1BPUlQwKSk7CisJCQlydGtfdmxhbl9wb3J0UHZpZF9zZXQoKGkgKyBFWFRfUE9SVDApLCBkYXRhLT52aWQsIDApOworCQl9CisJfQorCXZsYW4uaXZsX2VuID0gMTsKKwlyZXQgPSBydGtfdmxhbl9zZXQoZGF0YS0+dmlkLCAmdmxhbik7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBydGtfaGFsX3ZsYW5fcG9ydHB2aWRfc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3ZsYW5fdCBwdmlkLCBydGtfcHJpX3QgcHJpb3JpdHkpCit7CisJcnRrX3ZsYW5fcG9ydFB2aWRfc2V0KHBvcnQsIHB2aWQsIHByaW9yaXR5KTsKK30KKworaW50IHJ0a19oYWxfc2V0X2luZ3Jlc3NfcmF0ZShzdHJ1Y3QgcmFfc3dpdGNoX2lvY3RsX2RhdGEgKmRhdGEpCit7CisJcnRrX2FwaV9yZXRfdCByZXQ7CisKKwlpZiAoZGF0YS0+b25fb2ZmID09IDEpCisJCXJldCA9CisJCSAgICBydGtfcmF0ZV9pZ3JCYW5kd2lkdGhDdHJsUmF0ZV9zZXQoZGF0YS0+cG9ydCwgZGF0YS0+YncsIDAsCisJCQkJCQkgICAgICAxKTsKKwllbHNlCisJCXJldCA9CisJCSAgICBydGtfcmF0ZV9pZ3JCYW5kd2lkdGhDdHJsUmF0ZV9zZXQoZGF0YS0+cG9ydCwgMTA0ODU2OCwgMCwKKwkJCQkJCSAgICAgIDEpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IHJ0a19oYWxfc2V0X2VncmVzc19yYXRlKHN0cnVjdCByYV9zd2l0Y2hfaW9jdGxfZGF0YSAqZGF0YSkKK3sKKwlydGtfYXBpX3JldF90IHJldDsKKworCWlmIChkYXRhLT5vbl9vZmYgPT0gMSkKKwkJcmV0ID0KKwkJICAgIHJ0a19yYXRlX2VnckJhbmR3aWR0aEN0cmxSYXRlX3NldChkYXRhLT5wb3J0LCBkYXRhLT5idywgMSk7CisJZWxzZQorCQlyZXQgPSBydGtfcmF0ZV9lZ3JCYW5kd2lkdGhDdHJsUmF0ZV9zZXQoZGF0YS0+cG9ydCwgMTA0ODU2OCwgMSk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHJ0a19oYWxfZHVtcF90YWJsZSh2b2lkKQoreworCXJ0a191aW50MzIgaTsKKwlydGtfdWludDMyIGFkZHJlc3MgPSAwOworCXJ0a19sMl91Y2FzdEFkZHJfdCBsMl9kYXRhOworCXJ0a19sMl9pcE1jYXN0QWRkcl90IGlwTWNhc3RBZGRyOworCisJcHJpbnRrKCJoYXNoICBwb3J0KDA6MTcpICAgZmlkICAgdmlkICBtYWMtYWRkcmVzc1xuIik7CisJd2hpbGUgKDEpIHsKKwkJaWYgKHJ0a19sMl9hZGRyX25leHRfZ2V0KFJFQURNRVRIT0RfTkVYVF9MMlVDLCBVVFBfUE9SVDAsICZhZGRyZXNzLCAmbDJfZGF0YSkgIT0gUlRfRVJSX09LKSB7CisJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCXByaW50aygiJTAzeCAgICIsIGwyX2RhdGEuYWRkcmVzcyk7CisJCQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQorCQkJCWlmICggbDJfZGF0YS5wb3J0ID09IGkpCisJCQkJCXByaW50aygiMSIpOworCQkJCWVsc2UKKwkJCQkJcHJpbnRrKCItIik7CisJCQlmb3IgKGkgPSAxNjsgaSA8IDE4OyBpKyspCisJCQkJaWYgKCBsMl9kYXRhLnBvcnQgPT0gaSkKKwkJCQkJcHJpbnRrKCIxIik7CisJCQkJZWxzZQorCQkJCQlwcmludGsoIi0iKTsKKworCQkJcHJpbnRrKCIgICAgICAlMmQiLCBsMl9kYXRhLmZpZCk7CisJCQlwcmludGsoIiAgJTRkIiwgbDJfZGF0YS5jdmlkKTsKKwkJCXByaW50aygiICAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsIGwyX2RhdGEubWFjLm9jdGV0WzBdLAorCQkJbDJfZGF0YS5tYWMub2N0ZXRbMV0sIGwyX2RhdGEubWFjLm9jdGV0WzJdLCBsMl9kYXRhLm1hYy5vY3RldFszXSwgCisJCQlsMl9kYXRhLm1hYy5vY3RldFs0XSwgbDJfZGF0YS5tYWMub2N0ZXRbNV0pOworCQkJYWRkcmVzcyArKzsKKwkJCX0KKwl9CisKKwlhZGRyZXNzID0gMDsKKwl3aGlsZSAoMSkgeworICAgICAgICBpZiAocnRrX2wyX2lwTWNhc3RBZGRyX25leHRfZ2V0KCZhZGRyZXNzLCAmaXBNY2FzdEFkZHIpICE9IFJUX0VSUl9PSykgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcmludGsoIiUwM3ggICAiLCBpcE1jYXN0QWRkci5hZGRyZXNzKTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisgICAgICAgICAgICAgICAgcHJpbnRrKCIlYyIsIFJUS19QT1JUTUFTS19JU19QT1JUX1NFVChpcE1jYXN0QWRkci5wb3J0bWFzaywgaSkgPyAnMScgOiAnLScpOworICAgICAgICAgICAgZm9yIChpID0gMTY7IGkgPCAxODsgaSsrKQorICAgICAgICAgICAgICAgIHByaW50aygiJWMiLCBSVEtfUE9SVE1BU0tfSVNfUE9SVF9TRVQoaXBNY2FzdEFkZHIucG9ydG1hc2ssIGkpID8gJzEnIDogJy0nKTsKKwkJCXByaW50aygiICAgICAgICAgICAgICAgICIpOworCQkJcHJpbnRrKCIwMTAwNUUlMDZ4XG4iLCAoaXBNY2FzdEFkZHIuZGlwICYgMHhlZmZmZmYpKTsKKyAgICAgICAgICAgIGFkZHJlc3MgKys7CisgICAgICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHJ0a19oYWxfY2xlYXJfdGFibGUodm9pZCkKK3sKKwlydGtfYXBpX3JldF90IHJldDsKKworCXJldCA9IHJ0a19sMl90YWJsZV9jbGVhcigpOworCWlmIChyZXQgIT0gUlRfRVJSX09LKQorCQlwcmludGsoInJ0a19sMl90YWJsZV9jbGVhciBmYWlsZWRcbiIpOworfQorCit2b2lkIHJ0a19oYWxfYWRkX3RhYmxlKHN0cnVjdCByYV9zd2l0Y2hfaW9jdGxfZGF0YSAqZGF0YSkKK3sKKwlydGtfYXBpX3JldF90IHJldDsKKwlydGtfbDJfdWNhc3RBZGRyX3QgbDJfZW50cnk7CisJcnRrX21hY190IG1hYzsKKworCW1hYy5vY3RldFswXSA9ZGF0YS0+bWFjWzBdOworCW1hYy5vY3RldFsxXSA9ZGF0YS0+bWFjWzFdOworCW1hYy5vY3RldFsyXSA9ZGF0YS0+bWFjWzJdOworCW1hYy5vY3RldFszXSA9ZGF0YS0+bWFjWzNdOworCW1hYy5vY3RldFs0XSA9ZGF0YS0+bWFjWzRdOworCW1hYy5vY3RldFs1XSA9ZGF0YS0+bWFjWzVdOworCisJbWVtc2V0KCZsMl9lbnRyeSwgMHgwMCwgc2l6ZW9mKHJ0a19sMl91Y2FzdEFkZHJfdCkpOworCWwyX2VudHJ5LnBvcnQgPSBkYXRhLT5wb3J0OworCWwyX2VudHJ5Lml2bCA9IDE7CisJbDJfZW50cnkuY3ZpZCA9IGRhdGEtPnZpZDsKKwlsMl9lbnRyeS5maWQgPSAwOworCWwyX2VudHJ5LmVmaWQgPSAwOworCWwyX2VudHJ5LmlzX3N0YXRpYyA9IDE7CisJcmV0ID0gcnRrX2wyX2FkZHJfYWRkKCZtYWMsICZsMl9lbnRyeSk7CisJaWYgKHJldCAhPSBSVF9FUlJfT0spCisJCXByaW50aygicnRrX2hhbF9hZGRfdGFibGUgZmFpbGVkXG4iKTsKK30KKwordm9pZCBydGtfaGFsX2RlbF90YWJsZShzdHJ1Y3QgcmFfc3dpdGNoX2lvY3RsX2RhdGEgKmRhdGEpCit7CisJcnRrX2FwaV9yZXRfdCByZXQ7CisJcnRrX2wyX3VjYXN0QWRkcl90IGwyX2VudHJ5OworCXJ0a19tYWNfdCBtYWM7CisKKwltYWMub2N0ZXRbMF0gPWRhdGEtPm1hY1swXTsKKwltYWMub2N0ZXRbMV0gPWRhdGEtPm1hY1sxXTsKKwltYWMub2N0ZXRbMl0gPWRhdGEtPm1hY1syXTsKKwltYWMub2N0ZXRbM10gPWRhdGEtPm1hY1szXTsKKwltYWMub2N0ZXRbNF0gPWRhdGEtPm1hY1s0XTsKKwltYWMub2N0ZXRbNV0gPWRhdGEtPm1hY1s1XTsKKworCW1lbXNldCgmbDJfZW50cnksIDB4MDAsIHNpemVvZihydGtfbDJfdWNhc3RBZGRyX3QpKTsKKwlsMl9lbnRyeS5wb3J0ID0gZGF0YS0+cG9ydDsKKwlsMl9lbnRyeS5pdmwgPSAxOworCWwyX2VudHJ5LmN2aWQgPSBkYXRhLT52aWQ7CisJbDJfZW50cnkuZmlkID0gMDsKKwlsMl9lbnRyeS5lZmlkID0gMDsKKwlyZXQgPSBydGtfbDJfYWRkcl9kZWwoJm1hYywgJmwyX2VudHJ5KTsKKwlpZiAocmV0ICE9IFJUX0VSUl9PSykKKwkJcHJpbnRrKCJydGtfaGFsX2FkZF90YWJsZSBmYWlsZWRcbiIpOworfQordm9pZCBydGtfaGFsX2dldF9waHlfc3RhdHVzKHN0cnVjdCByYV9zd2l0Y2hfaW9jdGxfZGF0YSAqZGF0YSkKK3sKKwlydGtfcG9ydF9saW5rU3RhdHVzX3QgbGlua1N0YXR1czsKKwlydGtfcG9ydF9zcGVlZF90IHNwZWVkOworCXJ0a19wb3J0X2R1cGxleF90IGR1cGxleDsKKworICAgIHJ0a19wb3J0X3BoeVN0YXR1c19nZXQoZGF0YS0+cG9ydCwgJmxpbmtTdGF0dXMsICZzcGVlZCwgJmR1cGxleCk7CisgICAgcHJpbnRrKCJQb3J0JWQgU3RhdHVzOlxuIiwgZGF0YS0+cG9ydCk7CisJaWYgKGxpbmtTdGF0dXMgPT0gMSkgeworICAgICAgICBwcmludGsoIkxpbmsgVXAiKTsKKyAgICAgICAgaWYgKHNwZWVkID09IDApCisJCQlwcmludGsoIiAxME0iKTsKKwkJZWxzZSBpZiAoc3BlZWQgPT0gMSkKKwkJCXByaW50aygiIDEwME0iKTsKKwkJZWxzZSBpZiAoc3BlZWQgPT0gMikKKyAgICAgICAgICAgIHByaW50aygiIDEwMDBNIik7CisgICAgICAgIGlmIChkdXBsZXggPT0gMCkKKwkJCXByaW50aygiIEhhbGYgRHVwbGV4XG4iKTsKKwkJZWxzZQorCQkJcHJpbnRrKCIgRnVsbCBEdXBsZXhcbiIpOworCX0gZWxzZQorCQlwcmludGsoIkxpbmsgRG93blxuIik7CisKK30KKwordm9pZCBydGtfaGFsX3NldF9wb3J0X21pcnJvcihzdHJ1Y3QgcmFfc3dpdGNoX2lvY3RsX2RhdGEgKmRhdGEpCit7CisJcnRrX3BvcnRtYXNrX3QgcnhfcG9ydG1hc2s7CisJcnRrX3BvcnRtYXNrX3QgdHhfcG9ydG1hc2s7CisJcnRrX2FwaV9yZXRfdCByZXQ7CisJaW50IGk7CisKKwlydGtfbWlycm9yX3BvcnRJc29fc2V0KEVOQUJMRUQpOworCVJUS19QT1JUTUFTS19DTEVBUihyeF9wb3J0bWFzayk7CisJUlRLX1BPUlRNQVNLX0NMRUFSKHR4X3BvcnRtYXNrKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQorCQlpZiAoZGF0YS0+cnhfcG9ydF9tYXAgJiAoMSA8PCBpKSkKKwkJCVJUS19QT1JUTUFTS19QT1JUX1NFVChyeF9wb3J0bWFzaywgaSk7CisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKKwkJaWYgKGRhdGEtPnJ4X3BvcnRfbWFwICYgKDEgPDwgKGkgKyA1KSkpCisJCQlSVEtfUE9SVE1BU0tfUE9SVF9TRVQocnhfcG9ydG1hc2ssIChpICsgRVhUX1BPUlQwKSk7CisKKwlSVEtfUE9SVE1BU0tfQ0xFQVIodHhfcG9ydG1hc2spOworICAgIGZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisgICAgICAgIGlmIChkYXRhLT50eF9wb3J0X21hcCAmICgxIDw8IGkpKQorICAgICAgICAgICAgUlRLX1BPUlRNQVNLX1BPUlRfU0VUKHR4X3BvcnRtYXNrLCBpKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorICAgICAgICBpZiAoZGF0YS0+dHhfcG9ydF9tYXAgJiAoMSA8PCAoaSArIDUpKSkKKyAgICAgICAgICAgIFJUS19QT1JUTUFTS19QT1JUX1NFVCh0eF9wb3J0bWFzaywgKGkgKyBFWFRfUE9SVDApKTsKKworICAgIHJldCA9IHJ0a19taXJyb3JfcG9ydEJhc2VkX3NldChkYXRhLT5wb3J0LCAmcnhfcG9ydG1hc2ssICZ0eF9wb3J0bWFzayk7CisJaWYgKCFyZXQpCisJCXByaW50aygicnRrX21pcnJvcl9wb3J0QmFzZWRfc2V0IHN1Y2Nlc3NcbiIpOworfQorCit2b2lkIHJ0a19oYWxfcmVhZF9yZWcoc3RydWN0IHJhX3N3aXRjaF9pb2N0bF9kYXRhICpkYXRhKQoreworCXJldF90IHJldFZhbDsKKworCXJldFZhbCA9IHNtaV9yZWFkKGRhdGEtPnJlZ19hZGRyLCAmZGF0YS0+cmVnX3ZhbCk7CisJaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKwkJcHJpbnRrKCJzd2l0Y2ggcmVnIHJlYWQgZmFpbGVkXG4iKTsKKwllbHNlCisJCXByaW50aygicmVnMHgleCA9IDB4JXhcbiIsIGRhdGEtPnJlZ19hZGRyLCBkYXRhLT5yZWdfdmFsKTsKK30KKwordm9pZCBydGtfaGFsX3dyaXRlX3JlZyhzdHJ1Y3QgcmFfc3dpdGNoX2lvY3RsX2RhdGEgKmRhdGEpCit7CisJcmV0X3QgcmV0VmFsOworCisgICAgcmV0VmFsID0gc21pX3dyaXRlKGRhdGEtPnJlZ19hZGRyLCBkYXRhLT5yZWdfdmFsKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICBwcmludGsoInN3aXRjaCByZWcgd3JpdGUgZmFpbGVkXG4iKTsKKyAgICBlbHNlCisgICAgICAgIHByaW50aygid3JpdGUgc3dpdGNoIHJlZzB4JXggMHgleCBzdWNjZXNzXG4iLCBkYXRhLT5yZWdfYWRkciwgZGF0YS0+cmVnX3ZhbCk7Cit9CisKK3ZvaWQgcnRrX2hhbF9nZXRfcGh5X3JlZyhzdHJ1Y3QgcmFfc3dpdGNoX2lvY3RsX2RhdGEgKmRhdGEpCit7CisJcmV0X3QgcmV0VmFsOworCXJ0a19wb3J0X3BoeV9kYXRhX3QgRGF0YTsKKworCXJldFZhbCA9IHJ0a19wb3J0X3BoeVJlZ19nZXQoZGF0YS0+cG9ydCwgZGF0YS0+cmVnX2FkZHIsICZEYXRhKTsKKwlpZiAocmV0VmFsID09IFJUX0VSUl9PSykKKwkJcHJpbnRrKCJHZXQ6IHBoeVslZF0ucmVnWyVkXSA9IDB4JTA0eFxuIiwgZGF0YS0+cG9ydCwgZGF0YS0+cmVnX2FkZHIsIERhdGEpOworCWVsc2UKKwkJcHJpbnRrKCJyZWFkIHBoeSByZWcgZmFpbGVkXG4iKTsKK30KKwordm9pZCBydGtfaGFsX3NldF9waHlfcmVnKHN0cnVjdCByYV9zd2l0Y2hfaW9jdGxfZGF0YSAqZGF0YSkKK3sKKwlyZXRfdCByZXRWYWw7CisKKwlyZXRWYWwgPSBydGtfcG9ydF9waHlSZWdfc2V0KGRhdGEtPnBvcnQsIGRhdGEtPnJlZ19hZGRyLCBkYXRhLT5yZWdfdmFsKTsKKwlpZiAocmV0VmFsID09IFJUX0VSUl9PSykKKwkJcHJpbnRrKCJTZXQ6IHBoeVslZF0ucmVnWyVkXSA9IDB4JTA0eFxuIiwgZGF0YS0+cG9ydCwgZGF0YS0+cmVnX2FkZHIsIGRhdGEtPnJlZ192YWwpOworCWVsc2UKKwkJcHJpbnRrKCJ3cml0ZSBwaHkgcmVnIGZhaWxlZFxuIik7Cit9Cit2b2lkIHJ0a19oYWxfcW9zX2VuKHN0cnVjdCByYV9zd2l0Y2hfaW9jdGxfZGF0YSAqZGF0YSkKK3sKKworCWlmIChkYXRhLT5vbl9vZmYgPT0gMSkgeworCQlpZiAocnRrX3Fvc19pbml0KDgpICE9IDApCisJCQlwcmludGsoInJ0a19xb3NfaW5pdCg4KSBmYWlsZWRcbiIpOworCX0KKwllbHNlIHsKKwkJaWYgKHJ0a19xb3NfaW5pdCgxKSAhPSAwKQorICAgICAgICAgICAgcHJpbnRrKCJydGtfcW9zX2luaXQoMSkgZmFpbGVkXG4iKTsKKwl9Cit9CisKK3ZvaWQgcnRrX2hhbF9xb3Nfc2V0X3RhYmxlMnR5cGUoc3RydWN0IHJhX3N3aXRjaF9pb2N0bF9kYXRhICpkYXRhKQoreworCXJ0a19hcGlfcmV0X3QgcmV0OworCXJ0a19wcmlvcml0eV9zZWxlY3RfdCBQcmlEZWM7CisKKwkvKiB3cml0ZSBhbGwgcHJpIHRvIDAgKi8KKwlQcmlEZWMucG9ydF9wcmkgPSAwOworICAgIFByaURlYy5kb3QxcV9wcmkgPSAwOworICAgIFByaURlYy5hY2xfcHJpID0gMDsKKyAgICBQcmlEZWMuY3ZsYW5fcHJpID0gMDsKKyAgICBQcmlEZWMuc3ZsYW5fcHJpID0gMDsKKyAgICBQcmlEZWMuZHNjcF9wcmkgPSAwOworICAgIFByaURlYy5kbWFjX3ByaSA9IDA7CisgICAgUHJpRGVjLnNtYWNfcHJpID0gMDsKKworCWlmIChkYXRhLT5xb3NfdHlwZSA9PSAwKQorCQlQcmlEZWMucG9ydF9wcmkgPSAxOworCWVsc2UgaWYgKGRhdGEtPnFvc190eXBlID09IDEpCisJCVByaURlYy5kb3QxcV9wcmkgPSAxOworCWVsc2UgaWYgKGRhdGEtPnFvc190eXBlID09IDIpCisJCVByaURlYy5hY2xfcHJpID0gMTsKKwllbHNlIGlmIChkYXRhLT5xb3NfdHlwZSA9PSAzKQorCQlQcmlEZWMuZHNjcF9wcmkgPSAxOworCWVsc2UgaWYgKGRhdGEtPnFvc190eXBlID09IDQpCisJCVByaURlYy5jdmxhbl9wcmkgPSAxOworCWVsc2UgaWYgKGRhdGEtPnFvc190eXBlID09IDUpCisJCVByaURlYy5zdmxhbl9wcmkgPSAxOworCWVsc2UgaWYgKGRhdGEtPnFvc190eXBlID09IDYpCisJCVByaURlYy5kbWFjX3ByaSA9IDE7CisJZWxzZSBpZiAoZGF0YS0+cW9zX3R5cGUgPT0gNykKKwkJUHJpRGVjLnNtYWNfcHJpID0gMTsKKworCWlmIChkYXRhLT5xb3NfdGFibGVfaWR4ID09IDApCisJCXJldCA9IHJ0a19xb3NfcHJpU2VsX3NldChQUklERUNUQkxfSURYMCwgJlByaURlYyk7CisJZWxzZQorCQlyZXQgPSBydGtfcW9zX3ByaVNlbF9zZXQoUFJJREVDVEJMX0lEWDEsICZQcmlEZWMpOworCisJaWYgKHJldCAhPSAwKQorCQlwcmludGsoInJ0a19xb3NfcHJpU2VsX3NldCBmYWlsZWRcbiIpOworCit9CisKK3ZvaWQgcnRrX2hhbF9xb3NfZ2V0X3RhYmxlMnR5cGUoc3RydWN0IHJhX3N3aXRjaF9pb2N0bF9kYXRhICpkYXRhKQoreworCXJ0a19hcGlfcmV0X3QgcmV0OworCXJ0a19wcmlvcml0eV9zZWxlY3RfdCBQcmlEZWM7CisKKwlpZiAoZGF0YS0+cW9zX3RhYmxlX2lkeCA9PSAwKQorICAgICAgICByZXQgPSBydGtfcW9zX3ByaVNlbF9nZXQoUFJJREVDVEJMX0lEWDAsICZQcmlEZWMpOworICAgIGVsc2UKKyAgICAgICAgcmV0ID0gcnRrX3Fvc19wcmlTZWxfZ2V0KFBSSURFQ1RCTF9JRFgxLCAmUHJpRGVjKTsKKworCWlmIChyZXQgIT0gMCkKKyAgICAgICAgcHJpbnRrKCJydGtfcW9zX3ByaVNlbF9zZXQgZmFpbGVkXG4iKTsKKyAgICBlbHNlIHsKKwkJcHJpbnRrKCJwb3J0X3ByaSAgPSAlZFxuIiwgUHJpRGVjLnBvcnRfcHJpKTsKKwkJcHJpbnRrKCJkb3QxcV9wcmkgPSAlZFxuIiwgUHJpRGVjLmRvdDFxX3ByaSk7CisJCXByaW50aygiYWNsX3ByaSAgID0gJWRcbiIsIFByaURlYy5hY2xfcHJpKTsKKwkJcHJpbnRrKCJkc2NwX3ByaSAgPSAlZFxuIiwgUHJpRGVjLmRzY3BfcHJpKTsKKwkJcHJpbnRrKCJjdmxhbl9wcmkgPSAlZFxuIiwgUHJpRGVjLmN2bGFuX3ByaSk7CisJCXByaW50aygic3ZsYW5fcHJpID0gJWRcbiIsIFByaURlYy5zdmxhbl9wcmkpOworCQlwcmludGsoImRtYWNfcHJpICA9ICVkXG4iLCBQcmlEZWMuZG1hY19wcmkpOworCQlwcmludGsoInNtYWNfcHJpICA9ICVkXG4iLCBQcmlEZWMuc21hY19wcmkpOworCX0KK30KKwordm9pZCBydGtfaGFsX3Fvc19zZXRfcG9ydDJ0YWJsZShzdHJ1Y3QgcmFfc3dpdGNoX2lvY3RsX2RhdGEgKmRhdGEpCit7CisJcnRrX2FwaV9yZXRfdCByZXQ7CisJCisJcmV0ID0gcnRrX3Fvc19wb3J0UHJpU2VsSW5kZXhfc2V0KGRhdGEtPnBvcnQsIGRhdGEtPnFvc190YWJsZV9pZHgpOworCWlmIChyZXQgIT0gMCkKKwkJcHJpbnRrKCJydGtfcW9zX3BvcnRQcmlTZWxJbmRleF9zZXQgZmFpbGVkXG4iKTsKK30KKwordm9pZCBydGtfaGFsX3Fvc19nZXRfcG9ydDJ0YWJsZShzdHJ1Y3QgcmFfc3dpdGNoX2lvY3RsX2RhdGEgKmRhdGEpCit7CisJcnRrX2FwaV9yZXRfdCByZXQ7CisJcnRrX3Fvc19wcmlEZWNUYmxfdCBJbmRleDsKKwkKKwlyZXQgPSBydGtfcW9zX3BvcnRQcmlTZWxJbmRleF9nZXQoZGF0YS0+cG9ydCwgJkluZGV4KTsKKwlpZiAocmV0ICE9IDApCisJCXByaW50aygicnRrX3Fvc19wb3J0UHJpU2VsSW5kZXhfc2V0IGZhaWxlZFxuIik7CisJZWxzZQorCQlwcmludGsoInBvcnQlZCBiZWxvbmdzIHRvIHRhYmxlJWRcbiIsIGRhdGEtPnBvcnQsIEluZGV4KTsKK30KKwordm9pZCBydGtfaGFsX3Fvc19zZXRfcG9ydDJwcmkoc3RydWN0IHJhX3N3aXRjaF9pb2N0bF9kYXRhICpkYXRhKQoreworCXJ0a19hcGlfcmV0X3QgcmV0OworCisJcmV0ID0gcnRrX3Fvc19wb3J0UHJpX3NldChkYXRhLT5wb3J0LCBkYXRhLT5xb3NfcHJpKTsKKwlpZiAocmV0ICE9IDApCisJCXByaW50aygicnRrX3Fvc19wb3J0UHJpX3NldCBmYWlsZWRcbiIpOworfQorCit2b2lkIHJ0a19oYWxfcW9zX2dldF9wb3J0MnByaShzdHJ1Y3QgcmFfc3dpdGNoX2lvY3RsX2RhdGEgKmRhdGEpCit7CisJcnRrX2FwaV9yZXRfdCByZXQ7CisJcnRrX3ByaV90IEludF9wcmk7CisKKwlyZXQgPSBydGtfcW9zX3BvcnRQcmlfZ2V0KGRhdGEtPnBvcnQsICZJbnRfcHJpKTsKKwlpZiAocmV0ICE9IDApCisJCXByaW50aygicnRrX3Fvc19wb3J0UHJpX3NldCBmYWlsZWRcbiIpOworCWVsc2UKKwkJcHJpbnRrKCJwb3J0JWQgcHJpb3JpdHkgPSAlZFxuIiwgZGF0YS0+cG9ydCwgSW50X3ByaSk7Cit9CisKK3ZvaWQgcnRrX2hhbF9xb3Nfc2V0X2RzY3AycHJpKHN0cnVjdCByYV9zd2l0Y2hfaW9jdGxfZGF0YSAqZGF0YSkKK3sKKwlydGtfYXBpX3JldF90IHJldDsKKworCXJldCA9IHJ0a19xb3NfZHNjcFByaVJlbWFwX3NldChkYXRhLT5xb3NfZHNjcCwgZGF0YS0+cW9zX3ByaSk7CisJaWYgKHJldCAhPSAwKQorCQlwcmludGsoInJ0a19xb3NfZHNjcFByaVJlbWFwX3NldCBmYWlsZWRcbiIpOworfQorCit2b2lkIHJ0a19oYWxfcW9zX2dldF9kc2NwMnByaShzdHJ1Y3QgcmFfc3dpdGNoX2lvY3RsX2RhdGEgKmRhdGEpCit7CisJcnRrX2FwaV9yZXRfdCByZXQ7CisJcnRrX3ByaV90IEludF9wcmk7CisKKwlyZXQgPSBydGtfcW9zX2RzY3BQcmlSZW1hcF9nZXQoZGF0YS0+cW9zX2RzY3AsICZJbnRfcHJpKTsKKwlpZiAocmV0ICE9IDApCisJCXByaW50aygicnRrX3Fvc19kc2NwUHJpUmVtYXBfc2V0IGZhaWxlZFxuIik7CisJZWxzZQorCQlwcmludGsoImRzY3AlZCBwcmlvcml0eSBpcyAlZFxuIiwgZGF0YS0+cW9zX2RzY3AsIEludF9wcmkpOworfQorCit2b2lkIHJ0a19oYWxfcW9zX3NldF9wcmkycXVldWUoc3RydWN0IHJhX3N3aXRjaF9pb2N0bF9kYXRhICpkYXRhKQoreworCXJ0a19hcGlfcmV0X3QgcmV0OworCXJ0a19xb3NfcHJpMnF1ZXVlX3QgcHJpMnFpZDsKKworCXJldCA9IHJ0a19xb3NfcHJpTWFwX2dldCg4LCAmcHJpMnFpZCk7CisJcHJpMnFpZC5wcmkycXVldWVbZGF0YS0+cW9zX3F1ZXVlX251bV0gPSBkYXRhLT5xb3NfcHJpOworCXJldCA9IHJ0a19xb3NfcHJpTWFwX3NldCg4LCAmcHJpMnFpZCk7CisJaWYgKHJldCAhPSAwKQorCQlwcmludGsoInJ0a19xb3NfcHJpTWFwX3NldCBmYWlsZWRcbiIpOworfQorCit2b2lkIHJ0a19oYWxfcW9zX2dldF9wcmkycXVldWUoc3RydWN0IHJhX3N3aXRjaF9pb2N0bF9kYXRhICpkYXRhKQoreworCWludCBpOworCXJ0a19hcGlfcmV0X3QgcmV0OworCXJ0a19xb3NfcHJpMnF1ZXVlX3QgcHJpMnFpZDsKKworCXJldCA9IHJ0a19xb3NfcHJpTWFwX2dldCg4LCAmcHJpMnFpZCk7CisJaWYgKHJldCAhPSAwKQorCQlwcmludGsoInJ0a19xb3NfcHJpTWFwX2dldCBmYWlsZWRcbiIpOworCWVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQkJcHJpbnRrKCJwcmkycWlkLnByaTJxdWV1ZVslZF0gPSAlZFxuIiwgaSwgcHJpMnFpZC5wcmkycXVldWVbaV0pOworCX0KK30KKwordm9pZCBydGtfaGFsX3Fvc19zZXRfcXVldWVfd2VpZ2h0KHN0cnVjdCByYV9zd2l0Y2hfaW9jdGxfZGF0YSAqZGF0YSkKK3sKKwlydGtfYXBpX3JldF90IHJldDsKKwlydGtfcW9zX3F1ZXVlX3dlaWdodHNfdCBxd2VpZ2h0czsKKworCXJldCA9IHJ0a19xb3Nfc2NoZWR1bGluZ1F1ZXVlX2dldChkYXRhLT5wb3J0LCAmcXdlaWdodHMpOworCXF3ZWlnaHRzLndlaWdodHNbZGF0YS0+cW9zX3F1ZXVlX251bV0gPSBkYXRhLT5xb3Nfd2VpZ2h0OworCXJldCA9IHJ0a19xb3Nfc2NoZWR1bGluZ1F1ZXVlX3NldChkYXRhLT5wb3J0LCAmcXdlaWdodHMpOworCWlmIChyZXQgIT0gMCkKKwkJcHJpbnRrKCJydGtfcW9zX3NjaGVkdWxpbmdRdWV1ZV9zZXQgZmFpbGVkXG4iKTsKK30KKwordm9pZCBydGtfaGFsX3Fvc19nZXRfcXVldWVfd2VpZ2h0KHN0cnVjdCByYV9zd2l0Y2hfaW9jdGxfZGF0YSAqZGF0YSkKK3sKKwlpbnQgaTsKKwlydGtfYXBpX3JldF90IHJldDsKKwlydGtfcW9zX3F1ZXVlX3dlaWdodHNfdCBxd2VpZ2h0czsKKworCXJldCA9IHJ0a19xb3Nfc2NoZWR1bGluZ1F1ZXVlX2dldChkYXRhLT5wb3J0LCAmcXdlaWdodHMpOworCWlmIChyZXQgIT0gMCkKKwkJcHJpbnRrKCJydGtfcW9zX3NjaGVkdWxpbmdRdWV1ZV9nZXQgZmFpbGVkXG4iKTsKKwllbHNlIHsKKwkJcHJpbnRrKCI9PT0gUG9ydCVkIHF1ZXVlIHdlaWdodCA9PT1cbiIsIGRhdGEtPnBvcnQpOworCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQkJcHJpbnRrKCJxd2VpZ2h0cy53ZWlnaHRzWyVkXSA9ICVkXG4iLGkgLHF3ZWlnaHRzLndlaWdodHNbaV0pOworCX0KK30KKwordm9pZCBydGtfaGFsX2VuYWJsZV9pZ21wc25vb3Aoc3RydWN0IHJhX3N3aXRjaF9pb2N0bF9kYXRhICpkYXRhKQoreworCXJ0a19hcGlfcmV0X3QgcmV0OworCXJ0a19wb3J0bWFza190IHBtYXNrOworCQorCisJcmV0ID0gcnRrX2lnbXBfaW5pdCgpOworCWlmIChkYXRhLT5vbl9vZmYgPT0gMSkgeworCQlSVEtfUE9SVE1BU0tfQ0xFQVIocG1hc2spOworCQlSVEtfUE9SVE1BU0tfUE9SVF9TRVQocG1hc2ssIEVYVF9QT1JUMCk7CisJCXJldCB8PSBydGtfaWdtcF9zdGF0aWNfcm91dGVyX3BvcnRfc2V0KCZwbWFzayk7CisJCXJldCB8PSBydGtfaWdtcF9wcm90b2NvbF9zZXQoVVRQX1BPUlQ0LCBQUk9UT0NPTF9JR01QdjEsIElHTVBfQUNUSU9OX0ZPUldBUkQpOworCQlyZXQgfD0gcnRrX2lnbXBfcHJvdG9jb2xfc2V0KFVUUF9QT1JUNCwgUFJPVE9DT0xfSUdNUHYyLCBJR01QX0FDVElPTl9GT1JXQVJEKTsKKwkJcmV0IHw9IHJ0a19pZ21wX3Byb3RvY29sX3NldChVVFBfUE9SVDQsIFBST1RPQ09MX01MRHYxLCBJR01QX0FDVElPTl9GT1JXQVJEKTsKKwkJcmV0IHw9IHJ0a19pZ21wX3Byb3RvY29sX3NldChFWFRfUE9SVDEsIFBST1RPQ09MX0lHTVB2MSwgSUdNUF9BQ1RJT05fRk9SV0FSRCk7CisJCXJldCB8PSBydGtfaWdtcF9wcm90b2NvbF9zZXQoRVhUX1BPUlQxLCBQUk9UT0NPTF9JR01QdjIsIElHTVBfQUNUSU9OX0ZPUldBUkQpOworCQlyZXQgfD0gcnRrX2lnbXBfcHJvdG9jb2xfc2V0KEVYVF9QT1JUMSwgUFJPVE9DT0xfTUxEdjEsIElHTVBfQUNUSU9OX0ZPUldBUkQpOworCQlyZXQgfD0gcnRrX2lnbXBfcHJvdG9jb2xfc2V0KFVUUF9QT1JUMCwgUFJPVE9DT0xfSUdNUHYzLCBJR01QX0FDVElPTl9BU0lDKTsKKwkJcmV0IHw9IHJ0a19pZ21wX3Byb3RvY29sX3NldChVVFBfUE9SVDEsIFBST1RPQ09MX0lHTVB2MywgSUdNUF9BQ1RJT05fQVNJQyk7CisJCXJldCB8PSBydGtfaWdtcF9wcm90b2NvbF9zZXQoVVRQX1BPUlQyLCBQUk9UT0NPTF9JR01QdjMsIElHTVBfQUNUSU9OX0FTSUMpOworCQlyZXQgfD0gcnRrX2lnbXBfcHJvdG9jb2xfc2V0KFVUUF9QT1JUMywgUFJPVE9DT0xfSUdNUHYzLCBJR01QX0FDVElPTl9BU0lDKTsKKwkJcmV0IHw9IHJ0a19pZ21wX3Byb3RvY29sX3NldChFWFRfUE9SVDAsIFBST1RPQ09MX0lHTVB2MywgSUdNUF9BQ1RJT05fQVNJQyk7CisKKwkJcmV0IHw9IHJ0a19sZWFreV92bGFuX3NldChMRUFLWV9JUE1VTFRJQ0FTVCwgRU5BQkxFRCk7CisJCXJldCB8PSBydGtfbDJfaXBNY2FzdEZvcndhcmRSb3V0ZXJQb3J0X3NldChESVNBQkxFRCk7CisJCS8qIGRyb3AgdW5rbm93biBtdWx0aWNhc3QgcGFja2V0cyovCisJCS8qIHJldCB8PSBydGtfdHJhcF91bmtub3duTWNhc3RQa3RBY3Rpb25fc2V0KFVUUF9QT1JUNCwgTUNBU1RfSVBWNCwgTUNBU1RfQUNUSU9OX0RST1ApOyovCisJfSBlbHNlIHsKKwkJUlRLX1BPUlRNQVNLX0NMRUFSKHBtYXNrKTsKKyAgICAgICAgUlRLX1BPUlRNQVNLX1BPUlRfU0VUKHBtYXNrLCBFWFRfUE9SVDApOworICAgICAgICBSVEtfUE9SVE1BU0tfUE9SVF9TRVQocG1hc2ssIEVYVF9QT1JUMSk7CisJCXJldCB8PSBydGtfaWdtcF9wcm90b2NvbF9zZXQoVVRQX1BPUlQwLCBQUk9UT0NPTF9JR01QdjMsIElHTVBfQUNUSU9OX0FTSUMpOworCQlyZXQgfD0gcnRrX2lnbXBfcHJvdG9jb2xfc2V0KFVUUF9QT1JUMSwgUFJPVE9DT0xfSUdNUHYzLCBJR01QX0FDVElPTl9BU0lDKTsKKwkJcmV0IHw9IHJ0a19pZ21wX3Byb3RvY29sX3NldChVVFBfUE9SVDIsIFBST1RPQ09MX0lHTVB2MywgSUdNUF9BQ1RJT05fQVNJQyk7CisJCXJldCB8PSBydGtfaWdtcF9wcm90b2NvbF9zZXQoVVRQX1BPUlQzLCBQUk9UT0NPTF9JR01QdjMsIElHTVBfQUNUSU9OX0FTSUMpOworCQlyZXQgfD0gcnRrX2lnbXBfcHJvdG9jb2xfc2V0KEVYVF9QT1JUMCwgUFJPVE9DT0xfSUdNUHYzLCBJR01QX0FDVElPTl9BU0lDKTsKKworCQlyZXQgfD0gcnRrX2lnbXBfc3RhdGljX3JvdXRlcl9wb3J0X3NldCgmcG1hc2spOworCX0KKwlpZihyZXQgIT0gUlRfRVJSX09LKQorCQlwcmludGsoImVuYWJsZSBzd2l0Y2ggaWdtcHNub29wIGZhaWxlZFxuIik7Cit9CisKK3ZvaWQgcnRrX2hhbF9kaXNhYmxlX2lnbXBzbm9vcCh2b2lkKQoreworCWlmIChydGtfaWdtcF9zdGF0ZV9zZXQoRElTQUJMRUQpICE9IFJUX0VSUl9PSykKKwkJcHJpbnRrKCJEaXNhYmxlIElHTVAgU05PT1BJTkcgZmFpbGVkXG4iKTsKK30KKworcnRrX2FwaV9yZXRfdCBydGtfcG9ydF9waHlUZXN0TW9kZV9zZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfcG9ydF9waHlfdGVzdF9tb2RlX3QgbW9kZSkKK3sKKyAgICBydGtfdWludDMyICAgICAgICAgIGRhdGEsIHJlZ0RhdGEsIGk7CisgICAgcnRrX2FwaV9yZXRfdCAgICAgICByZXRWYWw7CisKKyAgICBSVEtfQ0hLX1BPUlRfSVNfVVRQKHBvcnQpOworCisgICAgaWYobW9kZSA+PSBQSFlfVEVTVF9NT0RFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmKCAobW9kZSA9PSBQSFlfVEVTVF9NT0RFXzIpIHx8IChtb2RlID09IFBIWV9URVNUX01PREVfMykgKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYgKFBIWV9URVNUX01PREVfTk9STUFMICE9IG1vZGUpCisgICAgeworICAgICAgICAvKiBPdGhlciBwb3J0IHNob3VsZCBiZSBOb3JtYWwgbW9kZSAqLworICAgICAgICBSVEtfU0NBTl9BTExfTE9HX1BPUlQoaSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYocnRrX3N3aXRjaF9pc1V0cFBvcnQoaSkgPT0gUlRfRVJSX09LKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKGkgIT0gcG9ydCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BIWVJlZyhydGtfc3dpdGNoX3BvcnRfTDJQX2dldChpKSwgOSwgJmRhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgIGlmKChkYXRhICYgMHhFMDAwKSAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9OT1RfQUxMT1dFRDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQSFlSZWcocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIDksICZkYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgZGF0YSAmPSB+MHhFMDAwOworICAgIGRhdGEgfD0gKG1vZGUgPDwgMTMpOworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BIWVJlZyhydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgOSwgZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmIChQSFlfVEVTVF9NT0RFXzQgPT0gbW9kZSkKKyAgICB7CisgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4MTNDMiwgMHgwMjQ5KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZygweDEzMDAsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZiggKHJlZ0RhdGEgPT0gMHgwMjc2KSB8fCAocmVnRGF0YSA9PSAweDA1OTcpICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUEhZT0NQUmVnKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCAweGJjYzIsIDB4RjRGNCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICB9CisKKyAgICAgICAgaWYoIChyZWdEYXRhID09IDB4NjM2NykgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQSFlPQ1BSZWcocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIDB4YTQzNiwgMHg4MGMxKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BIWU9DUFJlZyhydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgMHhhNDM4LCAweGZlMDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKK3ZvaWQgcnRrX2hhbF9zZXRfcGh5X3Rlc3RfbW9kZShzdHJ1Y3QgcmFfc3dpdGNoX2lvY3RsX2RhdGEgKmRhdGEpCit7CisJcnRrX2FwaV9yZXRfdCByZXQ7CisKKyAgICByZXQgPSBydGtfcG9ydF9waHlUZXN0TW9kZV9zZXQoZGF0YS0+cG9ydCwgZGF0YS0+bW9kZSk7CisJaWYgKHJldCAhPSBSVF9FUlJfT0spCisJCXByaW50aygicnRrX3BvcnRfcGh5VGVzdE1vZGVfc2V0IGZhaWxlZFxuIik7CisJZWxzZQorCQlwcmludGsoInNldCBwb3J0JWQgaW4gdGVzdCBtb2RlICVkLlxuIiwgZGF0YS0+cG9ydCwgZGF0YS0+bW9kZSk7Cit9CisKK3ZvaWQgcnRrX2hhbF9zZXRfcG9ydF90cnVuayhzdHJ1Y3QgcmFfc3dpdGNoX2lvY3RsX2RhdGEgKmRhdGEpCit7CisKKwlydGtfYXBpX3JldF90IHJldDsKKwlydGtfcG9ydG1hc2tfdCBtZW1iZXI7CisJaW50IGk7CisKKwlSVEtfUE9SVE1BU0tfQ0xFQVIobWVtYmVyKTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCWlmIChkYXRhLT5wb3J0X21hcCAmICgxIDw8IGkpKQorCQkJUlRLX1BPUlRNQVNLX1BPUlRfU0VUKG1lbWJlciwgaSk7CisgICAgfQorCisJcmV0ID0gcnRrX3RydW5rX3BvcnRfc2V0KFRSVU5LX0dST1VQMCwgJm1lbWJlcik7CisJaWYgKHJldCAhPSBSVF9FUlJfT0spCisJCXByaW50aygicnRrX3RydW5rX3BvcnRfc2V0IGZhaWxlZFxuIik7CisKKwlyZXQgPSBydGtfdHJ1bmtfZGlzdHJpYnV0aW9uQWxnb3JpdGhtX3NldChSVEtfV0hPTEVfU1lTVEVNLCAweDdGKTsKKwlpZiAocmV0ICE9IFJUX0VSUl9PSykKKwkJcHJpbnRrKCJydGtfdHJ1bmtfZGlzdHJpYnV0aW9uQWxnb3JpdGhtX3NldCBmYWlsZWRcbiIpOworfQorCit2b2lkIHJ0a19oYWxfdmxhbl90YWcoc3RydWN0IHJhX3N3aXRjaF9pb2N0bF9kYXRhICpkYXRhKQoreworCXJ0a19hcGlfcmV0X3QgcmV0OworCXJ0a192bGFuX2NmZ190IHZsYW47CisKKyAgICByZXQgPSBydGtfdmxhbl9nZXQoZGF0YS0+dmlkLCAmdmxhbik7CisJaWYgKHJldCAhPSBSVF9FUlJfT0spCisJCXByaW50aygicnRrX3ZsYW5fZ2V0IGZhaWxlZFxuIik7CisJZWxzZSB7CisJCWlmIChkYXRhLT5vbl9vZmYgPT0gMCkKKwkJCVJUS19QT1JUTUFTS19QT1JUX1NFVCh2bGFuLnVudGFnLCBkYXRhLT5wb3J0KTsKKwkJZWxzZQorCQkJUlRLX1BPUlRNQVNLX1BPUlRfQ0xFQVIodmxhbi51bnRhZywgZGF0YS0+cG9ydCk7CisJCQorCQlyZXQgPSBydGtfdmxhbl9zZXQoZGF0YS0+dmlkLCAmdmxhbik7CisJCWlmIChyZXQgIT0gUlRfRVJSX09LKQorCQkJcHJpbnRrKCJydGtfdmxhbl9zZXQgZmFpbGVkXG4iKTsKKwl9Cit9CisKK3ZvaWQgcnRrX2hhbF92bGFuX21vZGUoc3RydWN0IHJhX3N3aXRjaF9pb2N0bF9kYXRhICpkYXRhKQoreworCXJ0a192bGFuX2NmZ190IHZsYW4xLCB2bGFuMjsKKwlydGtfYXBpX3JldF90IHJldDsKKworCXJldCA9IHJ0a192bGFuX2dldCgxLCAmdmxhbjEpOworCWlmIChyZXQgIT0gUlRfRVJSX09LKQorCQlwcmludGsoInJ0a192bGFuX2dldCBmYWlsZWRcbiIpOworCisJcmV0ID0gcnRrX3ZsYW5fZ2V0KDIsICZ2bGFuMik7CisJaWYgKHJldCAhPSBSVF9FUlJfT0spCisJCXByaW50aygicnRrX3ZsYW5fZ2V0IGZhaWxlZFxuIik7CisKKwlpZiAoZGF0YS0+bW9kZSA9PSAwKSB7IC8vaXZsCisJCXZsYW4xLml2bF9lbiA9IDE7CisJCXZsYW4xLmZpZF9tc3RpID0gMDsKKwkJcnRrX3ZsYW5fc2V0KDEsICZ2bGFuMSk7CisJCXZsYW4yLml2bF9lbiA9IDE7CisJCXZsYW4yLmZpZF9tc3RpID0gMDsKKwkJcnRrX3ZsYW5fc2V0KDIsICZ2bGFuMik7CisJfSBlbHNlIGlmKGRhdGEtPm1vZGUgPT0gMSkgey8vc3ZsCisJCXZsYW4xLml2bF9lbiA9IDA7CisJCXZsYW4xLmZpZF9tc3RpID0gMDsKKwkJcnRrX3ZsYW5fc2V0KDEsICZ2bGFuMSk7CisJCXZsYW4yLml2bF9lbiA9IDA7CisJCXZsYW4yLmZpZF9tc3RpID0gMTsKKwkJcnRrX3ZsYW5fc2V0KDIsICZ2bGFuMik7CisJfSBlbHNlCisJCXByaW50aygibW9kZSBub3Qgc3VwcG9ydGVkXG4iKTsKK30KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGtfc3dpdGNoLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvcnRrX3N3aXRjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiYjBkYjAKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvcnRrX3N3aXRjaC5jCkBAIC0wLDAgKzEsMTc5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiAkUmV2aXNpb246IDc2MzM2ICQKKyAqICREYXRlOiAyMDE3LTAzLTA5IDEwOjQxOjIxICswODAwICjpgLHlm5ssIDA5IOS4ieaciCAyMDE3KSAkCisgKgorICogUHVycG9zZSA6IFJUSyBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkKKyAqIEZlYXR1cmUgOiBIZXJlIGlzIGEgbGlzdCBvZiBhbGwgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgaW4gdGhpcyBtb2R1bGUuCisgKgorICovCisjaW5jbHVkZSA8cnRrX3N3aXRjaC5oPgorI2luY2x1ZGUgPHJ0a19lcnJvci5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8cmF0ZS5oPgorI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnYuaD4KKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2X21pc2MuaD4KKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2X2dyZWVuLmg+CisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl9sdXQuaD4KKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2X3JtYS5oPgorI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnZfbWlycm9yLmg+CisKKyNpZiBkZWZpbmVkKEZPUkNFX1BST0JFX1JUTDgzNjdDKQorc3RhdGljIGluaXRfc3RhdGVfdCAgICBpbml0X3N0YXRlID0gSU5JVF9DT01QTEVURUQ7CisjZWxpZiBkZWZpbmVkKEZPUkNFX1BST0JFX1JUTDgzNzBCKQorc3RhdGljIGluaXRfc3RhdGVfdCAgICBpbml0X3N0YXRlID0gSU5JVF9DT01QTEVURUQ7CisjZWxpZiBkZWZpbmVkKEZPUkNFX1BST0JFX1JUTDgzNjRCKQorc3RhdGljIGluaXRfc3RhdGVfdCAgICBpbml0X3N0YXRlID0gSU5JVF9DT01QTEVURUQ7CisjZWxpZiBkZWZpbmVkKEZPUkNFX1BST0JFX1JUTDgzNjNTQ19WQikKK3N0YXRpYyBpbml0X3N0YXRlX3QgICAgaW5pdF9zdGF0ZSA9IElOSVRfQ09NUExFVEVEOworI2Vsc2UKK3N0YXRpYyBpbml0X3N0YXRlX3QgICAgaW5pdF9zdGF0ZSA9IElOSVRfTk9UX0NPTVBMRVRFRDsKKyNlbmRpZgorCisjZGVmaW5lIEFVVE9fUFJPQkUgKCFkZWZpbmVkKEZPUkNFX1BST0JFX1JUTDgzNjdDKSAmJiAhZGVmaW5lZChGT1JDRV9QUk9CRV9SVEw4MzcwQikgJiYgIWRlZmluZWQoRk9SQ0VfUFJPQkVfUlRMODM2NEIpICYmICFkZWZpbmVkKEZPUkNFX1BST0JFX1JUTDgzNjNTQ19WQikpCisKKyNpZiAoQVVUT19QUk9CRSB8fCBkZWZpbmVkKEZPUkNFX1BST0JFX1JUTDgzNjdDKSkKK3N0YXRpYyBydGtfc3dpdGNoX2hhbEN0cmxfdCBydGw4MzY3Y19oYWxfQ3RybCA9Cit7CisgICAgLyogU3dpdGNoIENoaXAgKi8KKyAgICBDSElQX1JUTDgzNjdDLAorCisgICAgLyogTG9naWNhbCB0byBQaHlzaWNhbCAqLworICAgIHswLCAxLCAyLCAzLCA0LCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAorICAgICA2LCA3LCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGIH0sCisKKyAgICAvKiBQaHlzaWNhbCB0byBMb2dpY2FsICovCisgICAge1VUUF9QT1JUMCwgVVRQX1BPUlQxLCBVVFBfUE9SVDIsIFVUUF9QT1JUMywgVVRQX1BPUlQ0LCBVTkRFRklORV9QT1JULCBFWFRfUE9SVDAsIEVYVF9QT1JUMSwKKyAgICAgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwKKyAgICAgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwKKyAgICAgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVH0sCisKKyAgICAvKiBQb3J0IFR5cGUgKi8KKyAgICB7VVRQX1BPUlQsIFVUUF9QT1JULCBVVFBfUE9SVCwgVVRQX1BPUlQsIFVUUF9QT1JULCBVTktOT1dOX1BPUlQsIFVOS05PV05fUE9SVCwgVU5LTk9XTl9QT1JULAorICAgICBVTktOT1dOX1BPUlQsIFVOS05PV05fUE9SVCwgVU5LTk9XTl9QT1JULCBVTktOT1dOX1BPUlQsIFVOS05PV05fUE9SVCwgVU5LTk9XTl9QT1JULCBVTktOT1dOX1BPUlQsIFVOS05PV05fUE9SVCwKKyAgICAgRVhUX1BPUlQsIEVYVF9QT1JULCBVTktOT1dOX1BPUlQsIFVOS05PV05fUE9SVCwgVU5LTk9XTl9QT1JULCBVTktOT1dOX1BPUlQsIFVOS05PV05fUE9SVCwgVU5LTk9XTl9QT1JULAorICAgICBVTktOT1dOX1BPUlQsIFVOS05PV05fUE9SVCwgVU5LTk9XTl9QT1JULCBVTktOT1dOX1BPUlQsIFVOS05PV05fUE9SVCwgVU5LTk9XTl9QT1JULCBVTktOT1dOX1BPUlQsIFVOS05PV05fUE9SVH0sCisKKyAgICAvKiBQVFAgcG9ydCAqLworICAgIHsxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLAorICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCisKKyAgICAvKiBWYWxpZCBwb3J0IG1hc2sgKi8KKyAgICAoICgweDEgPDwgVVRQX1BPUlQwKSB8ICgweDEgPDwgVVRQX1BPUlQxKSB8ICgweDEgPDwgVVRQX1BPUlQyKSB8ICgweDEgPDwgVVRQX1BPUlQzKSB8ICgweDEgPDwgVVRQX1BPUlQ0KSB8ICgweDEgPDwgRVhUX1BPUlQwKSB8ICgweDEgPDwgRVhUX1BPUlQxKSApLAorCisgICAgLyogVmFsaWQgVVRQIHBvcnQgbWFzayAqLworICAgICggKDB4MSA8PCBVVFBfUE9SVDApIHwgKDB4MSA8PCBVVFBfUE9SVDEpIHwgKDB4MSA8PCBVVFBfUE9SVDIpIHwgKDB4MSA8PCBVVFBfUE9SVDMpIHwgKDB4MSA8PCBVVFBfUE9SVDQpICksCisKKyAgICAvKiBWYWxpZCBFWFQgcG9ydCBtYXNrICovCisgICAgKCAoMHgxIDw8IEVYVF9QT1JUMCkgfCAoMHgxIDw8IEVYVF9QT1JUMSkgKSwKKworICAgIC8qIFZhbGlkIENQVSBwb3J0IG1hc2sgKi8KKyAgICAweDAwLAorCisgICAgLyogTWluaW11bSBwaHlzaWNhbCBwb3J0IG51bWJlciAqLworICAgIDAsCisKKyAgICAvKiBNYXhtdW0gcGh5c2ljYWwgcG9ydCBudW1iZXIgKi8KKyAgICA3LAorCisgICAgLyogUGh5c2ljYWwgcG9ydCBtYXNrICovCisgICAgMHhERiwKKworICAgIC8qIENvbWJvIExvZ2ljYWwgcG9ydCBJRCAqLworICAgIDQsCisKKyAgICAvKiBIU0cgTG9naWNhbCBwb3J0IElEICovCisgICAgRVhUX1BPUlQwLAorCisgICAgLyogU0dNSUkgTG9naWNhbCBwb3J0bWFzayAqLworICAgICgweDEgPDwgRVhUX1BPUlQwKSwKKworICAgIC8qIE1heCBNZXRlciBJRCAqLworICAgIDMxLAorCisgICAgLyogTUFYIExVVCBBZGRyZXNzIE51bWJlciAqLworICAgIDIxMTIsCisKKyAgICAvKiBUcnVuayBHcm91cCBNYXNrICovCisgICAgMHgwMworfTsKKyNlbmRpZgorCisjaWYgKEFVVE9fUFJPQkUgfHwgZGVmaW5lZChGT1JDRV9QUk9CRV9SVEw4MzcwQikpCitzdGF0aWMgcnRrX3N3aXRjaF9oYWxDdHJsX3QgcnRsODM3MGJfaGFsX0N0cmwgPQoreworICAgIC8qIFN3aXRjaCBDaGlwICovCisgICAgQ0hJUF9SVEw4MzcwQiwKKworICAgIC8qIExvZ2ljYWwgdG8gUGh5c2ljYWwgKi8KKyAgICB7MCwgMSwgMiwgMywgNCwgNSwgNiwgNywgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKKyAgICAgOCwgOSwgMTAsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgfSwKKworICAgIC8qIFBoeXNpY2FsIHRvIExvZ2ljYWwgKi8KKyAgICB7VVRQX1BPUlQwLCBVVFBfUE9SVDEsIFVUUF9QT1JUMiwgVVRQX1BPUlQzLCBVVFBfUE9SVDQsIFVUUF9QT1JUNSwgVVRQX1BPUlQ2LCBVVFBfUE9SVDcsCisgICAgIEVYVF9QT1JUMCwgRVhUX1BPUlQxLCBFWFRfUE9SVDIsIFVOREVGSU5FX1BPUlQsIFVOREVGSU5FX1BPUlQsIFVOREVGSU5FX1BPUlQsIFVOREVGSU5FX1BPUlQsIFVOREVGSU5FX1BPUlQsCisgICAgIFVOREVGSU5FX1BPUlQsIFVOREVGSU5FX1BPUlQsIFVOREVGSU5FX1BPUlQsIFVOREVGSU5FX1BPUlQsIFVOREVGSU5FX1BPUlQsIFVOREVGSU5FX1BPUlQsIFVOREVGSU5FX1BPUlQsIFVOREVGSU5FX1BPUlQsCisgICAgIFVOREVGSU5FX1BPUlQsIFVOREVGSU5FX1BPUlQsIFVOREVGSU5FX1BPUlQsIFVOREVGSU5FX1BPUlQsIFVOREVGSU5FX1BPUlQsIFVOREVGSU5FX1BPUlQsIFVOREVGSU5FX1BPUlQsIFVOREVGSU5FX1BPUlR9LAorCisgICAgLyogUG9ydCBUeXBlICovCisgICAge1VUUF9QT1JULCBVVFBfUE9SVCwgVVRQX1BPUlQsIFVUUF9QT1JULCBVVFBfUE9SVCwgVVRQX1BPUlQsIFVUUF9QT1JULCBVVFBfUE9SVCwKKyAgICAgVU5LTk9XTl9QT1JULCBVTktOT1dOX1BPUlQsIFVOS05PV05fUE9SVCwgVU5LTk9XTl9QT1JULCBVTktOT1dOX1BPUlQsIFVOS05PV05fUE9SVCwgVU5LTk9XTl9QT1JULCBVTktOT1dOX1BPUlQsCisgICAgIEVYVF9QT1JULCBFWFRfUE9SVCwgRVhUX1BPUlQsIFVOS05PV05fUE9SVCwgVU5LTk9XTl9QT1JULCBVTktOT1dOX1BPUlQsIFVOS05PV05fUE9SVCwgVU5LTk9XTl9QT1JULAorICAgICBVTktOT1dOX1BPUlQsIFVOS05PV05fUE9SVCwgVU5LTk9XTl9QT1JULCBVTktOT1dOX1BPUlQsIFVOS05PV05fUE9SVCwgVU5LTk9XTl9QT1JULCBVTktOT1dOX1BPUlQsIFVOS05PV05fUE9SVH0sCisKKyAgICAvKiBQVFAgcG9ydCAqLworICAgIHsxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLAorICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgICAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCisKKyAgICAvKiBWYWxpZCBwb3J0IG1hc2sgKi8KKyAgICAoICgweDEgPDwgVVRQX1BPUlQwKSB8ICgweDEgPDwgVVRQX1BPUlQxKSB8ICgweDEgPDwgVVRQX1BPUlQyKSB8ICgweDEgPDwgVVRQX1BPUlQzKSB8ICgweDEgPDwgVVRQX1BPUlQ0KSB8ICgweDEgPDwgVVRQX1BPUlQ1KSB8ICgweDEgPDwgVVRQX1BPUlQ2KSB8ICgweDEgPDwgVVRQX1BPUlQ3KSB8ICgweDEgPDwgRVhUX1BPUlQwKSB8ICgweDEgPDwgRVhUX1BPUlQxKSB8ICgweDEgPDwgRVhUX1BPUlQyKSApLAorCisgICAgLyogVmFsaWQgVVRQIHBvcnQgbWFzayAqLworICAgICggKDB4MSA8PCBVVFBfUE9SVDApIHwgKDB4MSA8PCBVVFBfUE9SVDEpIHwgKDB4MSA8PCBVVFBfUE9SVDIpIHwgKDB4MSA8PCBVVFBfUE9SVDMpIHwgKDB4MSA8PCBVVFBfUE9SVDQpIHwgKDB4MSA8PCBVVFBfUE9SVDUpIHwgKDB4MSA8PCBVVFBfUE9SVDYpIHwgKDB4MSA8PCBVVFBfUE9SVDcpICksCisKKyAgICAvKiBWYWxpZCBFWFQgcG9ydCBtYXNrICovCisgICAgKCAoMHgxIDw8IEVYVF9QT1JUMCkgfCAoMHgxIDw8IEVYVF9QT1JUMSkgfCAoMHgxIDw8IEVYVF9QT1JUMikgKSwKKworICAgIC8qIFZhbGlkIENQVSBwb3J0IG1hc2sgKi8KKyAgICAoMHgxIDw8IEVYVF9QT1JUMiksCisKKyAgICAvKiBNaW5pbXVtIHBoeXNpY2FsIHBvcnQgbnVtYmVyICovCisgICAgMCwKKworICAgIC8qIE1heG11bSBwaHlzaWNhbCBwb3J0IG51bWJlciAqLworICAgIDEwLAorCisgICAgLyogUGh5c2ljYWwgcG9ydCBtYXNrICovCisgICAgMHg3RkYsCisKKyAgICAvKiBDb21ibyBMb2dpY2FsIHBvcnQgSUQgKi8KKyAgICA3LAorCisgICAgLyogSFNHIExvZ2ljYWwgcG9ydCBJRCAqLworICAgIEVYVF9QT1JUMSwKKworICAgIC8qIFNHTUlJIExvZ2ljYWwgcG9ydG1hc2sgKi8KKyAgICAoICgweDEgPDwgRVhUX1BPUlQwKSB8ICgweDEgPDwgRVhUX1BPUlQxKSApLAorCisgICAgLyogTWF4IE1ldGVyIElEICovCisgICAgNjMsCisKKyAgICAvKiBNQVggTFVUIEFkZHJlc3MgTnVtYmVyIDQwOTYgKyA2NCovCisgICAgNDE2MCwKKworICAgIC8qIFRydW5rIEdyb3VwIE1hc2sgKi8KKyAgICAweDA3Cit9OworI2VuZGlmCisKKyNpZiAoQVVUT19QUk9CRSB8fCBkZWZpbmVkKEZPUkNFX1BST0JFX1JUTDgzNjRCKSkKK3N0YXRpYyBydGtfc3dpdGNoX2hhbEN0cmxfdCBydGw4MzY0Yl9oYWxfQ3RybCA9Cit7CisgICAgLyogU3dpdGNoIENoaXAgKi8KKyAgICBDSElQX1JUTDgzNjRCLAorCisgICAgLyogTG9naWNhbCB0byBQaHlzaWNhbCAqLworICAgIHsweEZGLCAxLCAweEZGLCAzLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAorICAgICA2LCA3LCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGIH0sCisKKyAgICAvKiBQaHlzaWNhbCB0byBMb2dpY2FsICovCisgICAge1VOREVGSU5FX1BPUlQsIFVUUF9QT1JUMSwgVU5ERUZJTkVfUE9SVCwgVVRQX1BPUlQzLCBVTkRFRklORV9QT1JULCBVTkRFRklORV9QT1JULCBFWFRfUE9SVDAsIEVYVF9QT1JUMSwKKyAgICAgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwKKyAgICAgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwKKyAgICAgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVCwgVU5ERUZJTkVfUE9SVH0sCisKKyAgICAvKiBQb3J0IFR5cGUgKi8KKyAgICB7VU5LTk9XTl9QT1JULCBVVFBfUE9SVCwgVU5LTk9XTl9QT1JULCBVVFBfUE9SVCwgVU5LTk9XTl9QT1JULCBVTktOT1dOX1BPUlQsIFVOS05PV05fUE9SVCwgVU5LTk9XTl9QT1JULAorICAgICBVTktOT1dOX1BPUlQsIFVOS05PV05fUE9SVCwgVU5LTk9XTl9QT1JULCBVTktOT1dOX1BPUlQsIFVOS05PV05fUE9SVCwgVU5LTk9XTl9QT1JULCBVTktOT1dOX1BPUlQsIFVOS05PV05fUE9SVCwKKyAgICAgRVhUX1BPUlQsIEVYVF9QT1JULCBVTktOT1dOX1BPUlQsIFVOS05PV05fUE9SVCwgVU5LTk9XTl9QT1JULCBVTktOT1dOX1BPUlQsIFVOS05PV05fUE9SVCwgVU5LTk9XTl9QT1JULAorICAgICBVTktOT1dOX1BPUlQsIFVOS05PV05fUE9SVCwgVU5LTk9XTl9QT1JULCBVTktOT1dOX1BPUlQsIFVOS05PV05fUE9SVCwgVU5LTk9XTl9QT1JULCBVTktOT1dOX1BPUlQsIFVOS05PV05fUE9SVH0sCisKKyAgICAvKiBQVFAgcG9ydCAqLworICAgIHswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCisKKyAgICAvKiBWYWxpZCBwb3J0IG1hc2sgKi8KKyAgICAoICgweDEgPDwgVVRQX1BPUlQxKSB8ICgweDEgPDwgVVRQX1BPUlQzKSB8ICgweDEgPDwgRVhUX1BPUlQwKSB8ICgweDEgPDwgRVhUX1BPUlQxKSApLAorCisgICAgLyogVmFsaWQgVVRQIHBvcnQgbWFzayAqLworICAgICggKDB4MSA8PCBVVFBfUE9SVDEpIHwgKDB4MSA8PCBVVFBfUE9SVDMpICksCisKKyAgICAvKiBWYWxpZCBFWFQgcG9ydCBtYXNrICovCisgICAgKCAoMHgxIDw8IEVYVF9QT1JUMCkgfCAoMHgxIDw8IEVYVF9QT1JUMSkgKSwKKworICAgIC8qIFZhbGlkIENQVSBwb3J0IG1hc2sgKi8KKyAgICAweDAwLAorCisgICAgLyogTWluaW11bSBwaHlzaWNhbCBwb3J0IG51bWJlciAqLworICAgIDAsCisKKyAgICAvKiBNYXhtdW0gcGh5c2ljYWwgcG9ydCBudW1iZXIgKi8KKyAgICA3LAorCisgICAgLyogUGh5c2ljYWwgcG9ydCBtYXNrICovCisgICAgMHhDQSwKKworICAgIC8qIENvbWJvIExvZ2ljYWwgcG9ydCBJRCAqLworICAgIDQsCisKKyAgICAvKiBIU0cgTG9naWNhbCBwb3J0IElEICovCisgICAgRVhUX1BPUlQwLAorCisgICAgLyogU0dNSUkgTG9naWNhbCBwb3J0bWFzayAqLworICAgICggKDB4MSA8PCBFWFRfUE9SVDApIHwgKDB4MSA8PCBFWFRfUE9SVDEpICksCisKKyAgICAvKiBNYXggTWV0ZXIgSUQgKi8KKyAgICAzMiwKKworICAgIC8qIE1BWCBMVVQgQWRkcmVzcyBOdW1iZXIgKi8KKyAgICAyMTEyLAorCisgICAgLyogVHJ1bmsgR3JvdXAgTWFzayAqLworICAgIDB4MDEKK307CisjZW5kaWYKKworI2lmIChBVVRPX1BST0JFIHx8IGRlZmluZWQoRk9SQ0VfUFJPQkVfUlRMODM2M1NDX1ZCKSkKK3N0YXRpYyBydGtfc3dpdGNoX2hhbEN0cmxfdCBydGw4MzYzc2NfdmJfaGFsX0N0cmwgPQoreworICAgIC8qIFN3aXRjaCBDaGlwICovCisgICAgQ0hJUF9SVEw4MzYzU0NfVkIsCisKKyAgICAvKiBMb2dpY2FsIHRvIFBoeXNpY2FsICovCisgICAgezB4RkYsIDB4RkYsIDEsIDMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCisgICAgIDYsIDcsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgfSwKKworICAgIC8qIFBoeXNpY2FsIHRvIExvZ2ljYWwgKi8KKyAgICB7VU5ERUZJTkVfUE9SVCwgVVRQX1BPUlQyLCBVTkRFRklORV9QT1JULCBVVFBfUE9SVDMsIFVOREVGSU5FX1BPUlQsIFVOREVGSU5FX1BPUlQsIEVYVF9QT1JUMCwgRVhUX1BPUlQxLAorICAgICBVTkRFRklORV9QT1JULCBVTkRFRklORV9QT1JULCBVTkRFRklORV9QT1JULCBVTkRFRklORV9QT1JULCBVTkRFRklORV9QT1JULCBVTkRFRklORV9QT1JULCBVTkRFRklORV9QT1JULCBVTkRFRklORV9QT1JULAorICAgICBVTkRFRklORV9QT1JULCBVTkRFRklORV9QT1JULCBVTkRFRklORV9QT1JULCBVTkRFRklORV9QT1JULCBVTkRFRklORV9QT1JULCBVTkRFRklORV9QT1JULCBVTkRFRklORV9QT1JULCBVTkRFRklORV9QT1JULAorICAgICBVTkRFRklORV9QT1JULCBVTkRFRklORV9QT1JULCBVTkRFRklORV9QT1JULCBVTkRFRklORV9QT1JULCBVTkRFRklORV9QT1JULCBVTkRFRklORV9QT1JULCBVTkRFRklORV9QT1JULCBVTkRFRklORV9QT1JUfSwKKworICAgIC8qIFBvcnQgVHlwZSAqLworICAgIHtVTktOT1dOX1BPUlQsIFVOS05PV05fUE9SVCwgVVRQX1BPUlQsIFVUUF9QT1JULCBVTktOT1dOX1BPUlQsIFVOS05PV05fUE9SVCwgVU5LTk9XTl9QT1JULCBVTktOT1dOX1BPUlQsCisgICAgIFVOS05PV05fUE9SVCwgVU5LTk9XTl9QT1JULCBVTktOT1dOX1BPUlQsIFVOS05PV05fUE9SVCwgVU5LTk9XTl9QT1JULCBVTktOT1dOX1BPUlQsIFVOS05PV05fUE9SVCwgVU5LTk9XTl9QT1JULAorICAgICBFWFRfUE9SVCwgRVhUX1BPUlQsIFVOS05PV05fUE9SVCwgVU5LTk9XTl9QT1JULCBVTktOT1dOX1BPUlQsIFVOS05PV05fUE9SVCwgVU5LTk9XTl9QT1JULCBVTktOT1dOX1BPUlQsCisgICAgIFVOS05PV05fUE9SVCwgVU5LTk9XTl9QT1JULCBVTktOT1dOX1BPUlQsIFVOS05PV05fUE9SVCwgVU5LTk9XTl9QT1JULCBVTktOT1dOX1BPUlQsIFVOS05PV05fUE9SVCwgVU5LTk9XTl9QT1JUfSwKKworICAgIC8qIFBUUCBwb3J0ICovCisgICAgezAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwKKworICAgIC8qIFZhbGlkIHBvcnQgbWFzayAqLworICAgICggKDB4MSA8PCBVVFBfUE9SVDIpIHwgKDB4MSA8PCBVVFBfUE9SVDMpIHwgKDB4MSA8PCBFWFRfUE9SVDApIHwgKDB4MSA8PCBFWFRfUE9SVDEpICksCisKKyAgICAvKiBWYWxpZCBVVFAgcG9ydCBtYXNrICovCisgICAgKCAoMHgxIDw8IFVUUF9QT1JUMikgfCAoMHgxIDw8IFVUUF9QT1JUMykgKSwKKworICAgIC8qIFZhbGlkIEVYVCBwb3J0IG1hc2sgKi8KKyAgICAoICgweDEgPDwgRVhUX1BPUlQwKSB8ICgweDEgPDwgRVhUX1BPUlQxKSApLAorCisgICAgLyogVmFsaWQgQ1BVIHBvcnQgbWFzayAqLworICAgIDB4MDAsCisKKyAgICAvKiBNaW5pbXVtIHBoeXNpY2FsIHBvcnQgbnVtYmVyICovCisgICAgMCwKKworICAgIC8qIE1heG11bSBwaHlzaWNhbCBwb3J0IG51bWJlciAqLworICAgIDcsCisKKyAgICAvKiBQaHlzaWNhbCBwb3J0IG1hc2sgKi8KKyAgICAweENBLAorCisgICAgLyogQ29tYm8gTG9naWNhbCBwb3J0IElEICovCisgICAgNCwKKworICAgIC8qIEhTRyBMb2dpY2FsIHBvcnQgSUQgKi8KKyAgICBFWFRfUE9SVDAsCisKKyAgICAvKiBTR01JSSBMb2dpY2FsIHBvcnRtYXNrICovCisgICAgKCAoMHgxIDw8IEVYVF9QT1JUMCkgfCAoMHgxIDw8IEVYVF9QT1JUMSkgKSwKKworICAgIC8qIE1heCBNZXRlciBJRCAqLworICAgIDMyLAorCisgICAgLyogTUFYIExVVCBBZGRyZXNzIE51bWJlciAqLworICAgIDIxMTIsCisKKyAgICAvKiBUcnVuayBHcm91cCBNYXNrICovCisgICAgMHgwMQorfTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChGT1JDRV9QUk9CRV9SVEw4MzY3QykKK3N0YXRpYyBydGtfc3dpdGNoX2hhbEN0cmxfdCAqaGFsQ3RybCA9ICZydGw4MzY3Y19oYWxfQ3RybDsKKyNlbGlmIGRlZmluZWQoRk9SQ0VfUFJPQkVfUlRMODM3MEIpCitzdGF0aWMgcnRrX3N3aXRjaF9oYWxDdHJsX3QgKmhhbEN0cmwgPSAmcnRsODM3MGJfaGFsX0N0cmw7CisjZWxpZiBkZWZpbmVkKEZPUkNFX1BST0JFX1JUTDgzNjRCKQorc3RhdGljIHJ0a19zd2l0Y2hfaGFsQ3RybF90ICpoYWxDdHJsID0gJnJ0bDgzNjRiX2hhbF9DdHJsOworI2VsaWYgZGVmaW5lZChGT1JDRV9QUk9CRV9SVEw4MzYzU0NfVkIpCitzdGF0aWMgcnRrX3N3aXRjaF9oYWxDdHJsX3QgKmhhbEN0cmwgPSAmcnRsODM2M3NjX3ZiX2hhbF9DdHJsOworI2Vsc2UKK3N0YXRpYyBydGtfc3dpdGNoX2hhbEN0cmxfdCAqaGFsQ3RybCA9IE5VTEw7CisjZW5kaWYKKworc3RhdGljIHJ0a191aW50MzIgUGF0Y2hDaGlwRGF0YVsyMTBdWzJdID0KK3sKKyAgICAgICAgezB4YTQzNiwgMHg4MDI4fSwgezB4YTQzOCwgMHg2ODAwfSwgezB4YjgyZSwgMHgwMDAxfSwgezB4YTQzNiwgMHhiODIwfSwgezB4YTQzOCwgMHgwMDkwfSwgezB4YTQzNiwgMHhhMDEyfSwgezB4YTQzOCwgMHgwMDAwfSwgezB4YTQzNiwgMHhhMDE0fSwgezB4YTQzOCwgMHgyYzA0fSwgezB4YTQzOCwgMHgyYzZjfSwKKyAgICAgICAgezB4YTQzOCwgMHgyYzc1fSwgezB4YTQzOCwgMHgyYzc3fSwgezB4YTQzOCwgMHgxNDE0fSwgezB4YTQzOCwgMHgxNTc5fSwgezB4YTQzOCwgMHgxNTM2fSwgezB4YTQzOCwgMHhjNDMyfSwgezB4YTQzOCwgMHgzMmMwfSwgezB4YTQzOCwgMHg0MmQ2fSwgezB4YTQzOCwgMHgzMmI1fSwgezB4YTQzOCwgMHgwMDNlfSwKKyAgICAgICAgezB4YTQzOCwgMHg2MTRjfSwgezB4YTQzOCwgMHgxNTY5fSwgezB4YTQzOCwgMHhkNzA1fSwgezB4YTQzOCwgMHgzMThjfSwgezB4YTQzOCwgMHg0MmQ2fSwgezB4YTQzOCwgMHhkNzAyfSwgezB4YTQzOCwgMHgzMWVmfSwgezB4YTQzOCwgMHg0MmQ2fSwgezB4YTQzOCwgMHg2MjljfSwgezB4YTQzOCwgMHgyYzA0fSwKKyAgICAgICAgezB4YTQzOCwgMHg2NTNjfSwgezB4YTQzOCwgMHg0MjJhfSwgezB4YTQzOCwgMHg1ZDgzfSwgezB4YTQzOCwgMHhkMDZhfSwgezB4YTQzOCwgMHhkMWIwfSwgezB4YTQzOCwgMHgxNTM2fSwgezB4YTQzOCwgMHhjNDNhfSwgezB4YTQzOCwgMHgzMmMwfSwgezB4YTQzOCwgMHg0MmQ2fSwgezB4YTQzOCwgMHgzMmI1fSwKKyAgICAgICAgezB4YTQzOCwgMHgwMDNlfSwgezB4YTQzOCwgMHgzMTRhfSwgezB4YTQzOCwgMHg0MmZlfSwgezB4YTQzOCwgMHgzMzdifSwgezB4YTQzOCwgMHgwMmQ2fSwgezB4YTQzOCwgMHgzMDYzfSwgezB4YTQzOCwgMHgwYzFifSwgezB4YTQzOCwgMHgyMmZlfSwgezB4YTQzOCwgMHhjNDM1fSwgezB4YTQzOCwgMHhkMGJlfSwKKyAgICAgICAgezB4YTQzOCwgMHhkMWY3fSwgezB4YTQzOCwgMHhlMGYwfSwgezB4YTQzOCwgMHgxYTQwfSwgezB4YTQzOCwgMHhhMzIwfSwgezB4YTQzOCwgMHhkNzAyfSwgezB4YTQzOCwgMHgxNTRhfSwgezB4YTQzOCwgMHhjNDM0fSwgezB4YTQzOCwgMHgzMmMwfSwgezB4YTQzOCwgMHg0MmQ2fSwgezB4YTQzOCwgMHgzMmI1fSwKKyAgICAgICAgezB4YTQzOCwgMHgwMDNlfSwgezB4YTQzOCwgMHg2MGVjfSwgezB4YTQzOCwgMHgxNTY5fSwgezB4YTQzOCwgMHhkNzA1fSwgezB4YTQzOCwgMHg2MTlmfSwgezB4YTQzOCwgMHhkNzAyfSwgezB4YTQzOCwgMHg0MTRmfSwgezB4YTQzOCwgMHgyYzJlfSwgezB4YTQzOCwgMHg2MTBhfSwgezB4YTQzOCwgMHhkNzA1fSwKKyAgICAgICAgezB4YTQzOCwgMHg1ZTFmfSwgezB4YTQzOCwgMHhjNDNmfSwgezB4YTQzOCwgMHhjODhifSwgezB4YTQzOCwgMHhkNzAyfSwgezB4YTQzOCwgMHg3ZmUwfSwgezB4YTQzOCwgMHgyMmYzfSwgezB4YTQzOCwgMHhkMGEwfSwgezB4YTQzOCwgMHhkMWIyfSwgezB4YTQzOCwgMHhkMGMzfSwgezB4YTQzOCwgMHhkMWMzfSwKKyAgICAgICAgezB4YTQzOCwgMHg4ZDAxfSwgezB4YTQzOCwgMHgxNTM2fSwgezB4YTQzOCwgMHhjNDM4fSwgezB4YTQzOCwgMHhlMGYwfSwgezB4YTQzOCwgMHgxYTgwfSwgezB4YTQzOCwgMHhkNzA2fSwgezB4YTQzOCwgMHg2MGMwfSwgezB4YTQzOCwgMHhkNzEwfSwgezB4YTQzOCwgMHg0MDllfSwgezB4YTQzOCwgMHhhODA0fSwKKyAgICAgICAgezB4YTQzOCwgMHhhZDAxfSwgezB4YTQzOCwgMHg4ODA0fSwgezB4YTQzOCwgMHhkNzAyfSwgezB4YTQzOCwgMHgzMmMwfSwgezB4YTQzOCwgMHg0MmQ2fSwgezB4YTQzOCwgMHgzMmI1fSwgezB4YTQzOCwgMHgwMDNlfSwgezB4YTQzOCwgMHg0MDVifSwgezB4YTQzOCwgMHgxNTc2fSwgezB4YTQzOCwgMHg3YzljfSwKKyAgICAgICAgezB4YTQzOCwgMHg2MGVjfSwgezB4YTQzOCwgMHgxNTY5fSwgezB4YTQzOCwgMHhkNzAyfSwgezB4YTQzOCwgMHg1ZDQzfSwgezB4YTQzOCwgMHgzMWVmfSwgezB4YTQzOCwgMHgwMmZlfSwgezB4YTQzOCwgMHgyMmQ2fSwgezB4YTQzOCwgMHg1OTBhfSwgezB4YTQzOCwgMHhkNzA2fSwgezB4YTQzOCwgMHg1YzgwfSwKKyAgICAgICAgezB4YTQzOCwgMHhkNzAyfSwgezB4YTQzOCwgMHg1YzQ0fSwgezB4YTQzOCwgMHgzMDYzfSwgezB4YTQzOCwgMHgwMmQ2fSwgezB4YTQzOCwgMHg1YmUyfSwgezB4YTQzOCwgMHgyMmZifSwgezB4YTQzOCwgMHhhMjQwfSwgezB4YTQzOCwgMHhhMTA0fSwgezB4YTQzOCwgMHg4YzAzfSwgezB4YTQzOCwgMHg4MTc4fSwKKyAgICAgICAgezB4YTQzOCwgMHhkNzAxfSwgezB4YTQzOCwgMHgzMWFkfSwgezB4YTQzOCwgMHg0OTE3fSwgezB4YTQzOCwgMHg4MTAyfSwgezB4YTQzOCwgMHgyOTE3fSwgezB4YTQzOCwgMHhjMzAyfSwgezB4YTQzOCwgMHgyNjhhfSwgezB4YTQzNiwgMHhBMDFBfSwgezB4YTQzOCwgMHgwMDAwfSwgezB4YTQzNiwgMHhBMDA2fSwKKyAgICAgICAgezB4YTQzOCwgMHgwZmZmfSwgezB4YTQzNiwgMHhBMDA0fSwgezB4YTQzOCwgMHgwNjg5fSwgezB4YTQzNiwgMHhBMDAyfSwgezB4YTQzOCwgMHgwOTExfSwgezB4YTQzNiwgMHhBMDAwfSwgezB4YTQzOCwgMHg3MzAyfSwgezB4YTQzNiwgMHhCODIwfSwgezB4YTQzOCwgMHgwMDEwfSwgezB4YTQzNiwgMHg4NDEyfSwKKyAgICAgICAgezB4YTQzOCwgMHhhZjg0fSwgezB4YTQzOCwgMHgxZWFmfSwgezB4YTQzOCwgMHg4NDI3fSwgezB4YTQzOCwgMHhhZjg0fSwgezB4YTQzOCwgMHgyN2FmfSwgezB4YTQzOCwgMHg4NDI3fSwgezB4YTQzOCwgMHgwMjUxfSwgezB4YTQzOCwgMHg2ODAyfSwgezB4YTQzOCwgMHg4NDI3fSwgezB4YTQzOCwgMHhhZjA0fSwKKyAgICAgICAgezB4YTQzOCwgMHgwYWY4fSwgezB4YTQzOCwgMHhmOWJmfSwgezB4YTQzOCwgMHg1NTgxfSwgezB4YTQzOCwgMHgwMjU1fSwgezB4YTQzOCwgMHgyN2VmfSwgezB4YTQzOCwgMHgzMTBkfSwgezB4YTQzOCwgMHgzNDVifSwgezB4YTQzOCwgMHgwZmEzfSwgezB4YTQzOCwgMHgwMzJhfSwgezB4YTQzOCwgMHhlMDg3fSwKKyAgICAgICAgezB4YTQzOCwgMHhmZmFjfSwgezB4YTQzOCwgMHgyMDQwfSwgezB4YTQzOCwgMHhiZjU2fSwgezB4YTQzOCwgMHg3NDAyfSwgezB4YTQzOCwgMHg1NTI3fSwgezB4YTQzOCwgMHhlZjMxfSwgezB4YTQzOCwgMHhlZjIwfSwgezB4YTQzOCwgMHhlNzg3fSwgezB4YTQzOCwgMHhmZWU2fSwgezB4YTQzOCwgMHg4N2ZkfSwKKyAgICAgICAgezB4YTQzOCwgMHhkNDg4fSwgezB4YTQzOCwgMHg4OGJmfSwgezB4YTQzOCwgMHg1Njc0fSwgezB4YTQzOCwgMHgwMjU0fSwgezB4YTQzOCwgMHhlM2UwfSwgezB4YTQzOCwgMHg4N2ZmfSwgezB4YTQzOCwgMHhmNzIwfSwgezB4YTQzOCwgMHhlNDg3fSwgezB4YTQzOCwgMHhmZmFmfSwgezB4YTQzOCwgMHg4NDdlfSwKKyAgICAgICAgezB4YTQzOCwgMHhlMDg3fSwgezB4YTQzOCwgMHhmZmFkfSwgezB4YTQzOCwgMHgyMDE2fSwgezB4YTQzOCwgMHhlMzg3fSwgezB4YTQzOCwgMHhmZWUyfSwgezB4YTQzOCwgMHg4N2ZkfSwgezB4YTQzOCwgMHhlZjQ1fSwgezB4YTQzOCwgMHhiZjU2fSwgezB4YTQzOCwgMHg3NDAyfSwgezB4YTQzOCwgMHg1NGUzfSwKKyAgICAgICAgezB4YTQzOCwgMHhlMDg3fSwgezB4YTQzOCwgMHhmZmY2fSwgezB4YTQzOCwgMHgyMGU0fSwgezB4YTQzOCwgMHg4N2ZmfSwgezB4YTQzOCwgMHhmZGZjfSwgezB4YTQzOCwgMHgwNDAwfSwgezB4YTQzNiwgMHhiODE4fSwgezB4YTQzOCwgMHgwNDA3fSwgezB4YTQzNiwgMHhiODFhfSwgezB4YTQzOCwgMHhmZmZkfSwKKyAgICAgICAgezB4YTQzNiwgMHhiODFjfSwgezB4YTQzOCwgMHhmZmZkfSwgezB4YTQzNiwgMHhiODFlfSwgezB4YTQzOCwgMHhmZmZkfSwgezB4YTQzNiwgMHhiODMyfSwgezB4YTQzOCwgMHgwMDAxfSwgezB4YjgyMCwgMHgwMDAwfSwgezB4YjgyZSwgMHgwMDAwfSwgezB4YTQzNiwgMHg4MDI4fSwgezB4YTQzOCwgMHgwMDAwfQorfTsKKworc3RhdGljIHJ0a19hcGlfcmV0X3QgX3J0a19zd2l0Y2hfaW5pdF84MzY3Yyh2b2lkKQoreworICAgIHJ0a19wb3J0X3QgcG9ydDsKKyAgICBydGtfdWludDMyIHJldFZhbDsKKyAgICBydGtfdWludDMyIHJlZ0RhdGE7CisgICAgcnRrX3VpbnQzMiByZWdWYWx1ZTsKKworICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDEzYzIsIDB4MDI0OSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZygweDEzMDEsICZyZWdWYWx1ZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDEzYzIsIDB4MDAwMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIFJUS19TQ0FOX0FMTF9MT0dfUE9SVChwb3J0KQorICAgIHsKKyAgICAgICAgIGlmKHJ0a19zd2l0Y2hfaXNVdHBQb3J0KHBvcnQpID09IFJUX0VSUl9PSykKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfUE9SVDBfRUVFQ0ZHICsgKDB4MjAgKiBwb3J0KSwgUlRMODM2N0NfUE9SVDBfRUVFQ0ZHX0VFRV8xMDBNX09GRlNFVCwgMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19QT1JUMF9FRUVDRkcgKyAoMHgyMCAqIHBvcnQpLCBSVEw4MzY3Q19QT1JUMF9FRUVDRkdfRUVFX0dJR0FfNTAwTV9PRkZTRVQsIDEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfUE9SVDBfRUVFQ0ZHICsgKDB4MjAgKiBwb3J0KSwgUlRMODM2N0NfUE9SVDBfRUVFQ0ZHX0VFRV9UWF9PRkZTRVQsIDEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfUE9SVDBfRUVFQ0ZHICsgKDB4MjAgKiBwb3J0KSwgUlRMODM2N0NfUE9SVDBfRUVFQ0ZHX0VFRV9SWF9PRkZTRVQsIDEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BIWU9DUFJlZyhwb3J0LCAweEE0MjgsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICByZWdEYXRhICY9IH4oMHgwMjAwKTsKKyAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BIWU9DUFJlZyhwb3J0LCAweEE0MjgsIHJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICBpZigocmVnVmFsdWUgJiAweDAwRjApID09IDB4MDBBMCkKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUEhZT0NQUmVnKHBvcnQsIDB4QTVEMCwgJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgIHJlZ0RhdGEgfD0gMHgwMDA2OworICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BIWU9DUFJlZyhwb3J0LCAweEE1RDAsIHJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICB9CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfVVRQX0ZJQl9ERVQsIDB4MTVCQikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4MTMwMywgMHgwNkQ2KSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHgxMzA0LCAweDA3MDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDEzRTIsIDB4MDAzRikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4MTNGOSwgMHgwMDkwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHgxMjFlLCAweDAzQ0EpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDEyMzMsIDB4MDM1MikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4MTIzNywgMHgwMGEwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHgxMjNhLCAweDAwMzApKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDEyMzksIDB4MDA4NCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4MDMwMSwgMHgxMDAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHgxMzQ5LCAweDAwMUYpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDE4ZTAsIDAsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDEyMmIsIDE0LCAxKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4MTMwNSwgMHhDMDAwLCAzKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworc3RhdGljIHJ0a19hcGlfcmV0X3QgX3J0a19zd2l0Y2hfaW5pdF84MzcwYih2b2lkKQoreworICAgIHJldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHJlZ0RhdGEsIHRtcCA9IDA7CisgICAgcnRrX3VpbnQzMiBpLCBwcmYsIGNvdW50ZXI7CisgICAgcnRrX3VpbnQzMiBsb25nX2xpbmtbOF0gPSB7MHgwMjEwLCAweDAzZTgsIDB4MDIxOCwgMHgwM2YwLCAweDAyMjAsIDB4MDNmOCwgMHgwMjA4LCAweDAzZTAgfTsKKworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDEyMDUsIDB4MDMwMCwgMykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworCisgICAgZm9yKGk9MDsgaTw4OyBpKyspCisgICAgeworICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUEhZT0NQUmVnKGksIDB4YTQyMCwgJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgdG1wID0gcmVnRGF0YSAmIDB4NyA7CisgICAgICAgaWYodG1wID09IDB4MykKKyAgICAgICB7CisgICAgICAgICAgIHByZiA9IDE7CisgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUEhZT0NQUmVnKGksIDB4YjgzZSwgMHg2ZmE5KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BIWU9DUFJlZyhpLCAweGI4NDAsIDB4YTkpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICBmb3IoY291bnRlciA9IDA7IGNvdW50ZXIgPCAxMDAwMDsgY291bnRlcisrKTsgLy9kZWxheQorCisgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BIWU9DUFJlZyhpLCAweGI4MjAsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgdG1wID0gcmVnRGF0YSB8IDB4MTA7CisgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BIWU9DUFJlZyhpLCAweGI4MjAsIHRtcCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgIGZvcihjb3VudGVyID0gMDsgY291bnRlciA8IDEwMDAwOyBjb3VudGVyKyspOyAvL2RlbGF5CisgICAgICAgICAgIGNvdW50ZXIgPSAwOworICAgICAgICAgICBkb3sKKyAgICAgICAgICAgICAgY291bnRlciA9IGNvdW50ZXIgKyAxOworICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQSFlPQ1BSZWcoaSwgMHhiODAwLCAmcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICB0bXAgPSByZWdEYXRhICYgMHg0MDsKKyAgICAgICAgICAgICAgaWYodG1wICE9IDApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgIH0gd2hpbGUgKGNvdW50ZXIgPCAyMCk7ICAgLy9XYWl0IGZvciBwYXRjaCByZWFkeSA9IDEuLi4KKyAgICAgICB9CisgICB9CisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKDB4MWQwMSwgJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgdG1wID0gcmVnRGF0YTsKKyAgICB0bXAgPSB0bXAgfCAweDNCRTA7IC8qQnJvYWRjYXN0IHBvcnQgZW5hYmxlKi8KKyAgICB0bXAgPSB0bXAgJiAweEZGRTA7IC8qUGh5X2lkID0gMCAqLworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4MWQwMSwgdG1wKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgZm9yKGk9MDtpIDwgMjEwOyBpKyspCisgICAgeworICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BIWU9DUFJlZygwLCBQYXRjaENoaXBEYXRhW2ldWzBdLCBQYXRjaENoaXBEYXRhW2ldWzFdKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorCisgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDFkMDEsIHJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBmb3IoaT0wOyBpIDwgODsgaSsrKQorICAgIHsKKyAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQSFlPQ1BSZWcoaSwgMHhhNGI0LCBsb25nX2xpbmtbaV0pKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisKKyAgaWYgKHByZiA9PSAweDEpCisgICAgIHsKKyAgICAgICAgZm9yKGk9MDsgaTw4OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BIWU9DUFJlZyhpLCAweGI4MjAsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgdG1wID0gcmVnRGF0YSAmIDB4RkZFRjsKKyAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQSFlPQ1BSZWcoaSwgMHhiODIwLCB0bXApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgIGZvcihjb3VudGVyID0gMDsgY291bnRlciA8IDEwMDAwOyBjb3VudGVyKyspOyAvL2RlbGF5CisKKyAgICAgICBjb3VudGVyID0gMDsKKyAgICAgICBkb3sKKyAgICAgICAgICAgIGNvdW50ZXIgPSBjb3VudGVyICsgMTsKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BIWU9DUFJlZyhpLCAweGI4MDAsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgdG1wID0gcmVnRGF0YSAmIDB4NDA7CisgICAgICAgICAgICBpZiggdG1wID09IDAgKQorICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgfSB3aGlsZSAoY291bnRlciA8IDIwKTsgICAvL1dhaXQgZm9yIHBhdGNoIHJlYWR5ID0gMS4uLgorICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUEhZT0NQUmVnKGksIDB4YjgzZSwgMHg2ZjQ4KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQSFlPQ1BSZWcoaSwgMHhiODQwLCAweGZhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgfQorICAgfQorCisgICAgLypDaGVjayBwaHkgbGluayBzdGF0dXMqLworICAgIGZvcihpPTA7IGk8ODsgaSsrKQorICAgIHsKKyAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BIWU9DUFJlZyhpLCAweGE0MDAsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICB0bXAgPSByZWdEYXRhICYgMHg4MDA7CisgICAgICAgIGlmKHRtcCA9PSAweDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHRtcCA9IHJlZ0RhdGEgfCAweDIwMDsKKyAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQSFlPQ1BSZWcoaSwgMHhhNDAwLCB0bXApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIH0KKyAgICB9CisKKyAgZm9yKGNvdW50ZXIgPSAwOyBjb3VudGVyIDwgMTAwMDA7IGNvdW50ZXIrKyk7IC8vZGVsYXkKKworICByZXR1cm4gUlRfRVJSX09LOworfQorCitzdGF0aWMgcnRrX2FwaV9yZXRfdCBfcnRrX3N3aXRjaF9pbml0XzgzNjRiKHZvaWQpCit7CisgICAgcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcmVnRGF0YTsKKworICAgIC8qZW5hYmxlIEVFRSwgaW5jbHVkZSBtYWMgJiBwaHkqLworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDM4LCAweDMwMCwgMykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4NzgsIDB4MzAwLCAzKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHhkOCwgMHgzMDAsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweGY4LCAweDMwMCwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BIWU9DUFJlZygxLCAweGE1ZDAsIDYpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUEhZT0NQUmVnKDMsIDB4YTVkMCwgNikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIC8qUEFEIHBhcmEqLworCisgICAgLypFWFQxIFBBRCBQYXJhKi8KKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoMHgxMzAzLCAmcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICByZWdEYXRhICY9IDB4RkZGRkZGRkU7CisgICAgcmVnRGF0YSB8PSAweDI1MDsKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDEzMDMsIHJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4MTMwNCwgMHg3MDAwLCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxMzA0LCAweDcwMCwgNykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4MTNmOSwgMHgzOCwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIC8qRVhUMiBQQUQgUGFyYSovCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MTMwMywgMTAsIDEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDEzRTIsIDB4MWZmLCAweDI2KSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxM2Y5LCAweDFjMCwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworCisgICAgLypTRFMgUEFUQ0gqLworICAgIC8qU1BfQ0ZHX0VOX0xJTktfRklCMUcqLworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU2RzUmVnKDAsIDQsIDAsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIHJlZ0RhdGEgfD0gMHg0OworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU2RzUmVnKDAsNCwwLCByZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgLypGSUIxMDAgRG93bi1zcGVlZCovCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTZHNSZWcoMCwgMSwgMCwgJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgcmVnRGF0YSB8PSAweDIwOworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU2RzUmVnKDAsMSwwLCByZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworc3RhdGljIHJ0a19hcGlfcmV0X3QgX3J0a19zd2l0Y2hfaW5pdF84MzYzc2NfdmIodm9pZCkKK3sKKworICAgIHJldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHJlZ0RhdGE7CisKKyAgICAvKmVuYWJsZSBFRUUsIGluY2x1ZGUgbWFjICYgcGh5Ki8KKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgzOCwgMHgzMDAsIDMpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDc4LCAweDMwMCwgMykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4ZDgsIDB4MzAwLCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHhmOCwgMHgzMDAsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQSFlPQ1BSZWcoMSwgMHhhNWQwLCA2KSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BIWU9DUFJlZygzLCAweGE1ZDAsIDYpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAvKlBBRCBwYXJhKi8KKworICAgIC8qRVhUMSBQQUQgUGFyYSovCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKDB4MTMwMywgJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgcmVnRGF0YSAmPSAweEZGRkZGRkZFOworICAgIHJlZ0RhdGEgfD0gMHgyNTA7CisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHgxMzAzLCByZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDEzMDQsIDB4NzAwMCwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4MTMwNCwgMHg3MDAsIDcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDEzZjksIDB4MzgsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAvKkVYVDIgUEFEIFBhcmEqLworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDEzMDMsIDEwLCAxKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxM0UyLCAweDFmZiwgMHgyNikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4MTNmOSwgMHgxYzAsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKworICAgIC8qU0RTIFBBVENIKi8KKyAgICAvKlNQX0NGR19FTl9MSU5LX0ZJQjFHKi8KKyAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1Nkc1JlZygwLCA0LCAwLCAmcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICByZWdEYXRhIHw9IDB4NDsKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1Nkc1JlZygwLDQsMCwgcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIC8qRklCMTAwIERvd24tc3BlZWQqLworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU2RzUmVnKDAsIDEsIDAsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIHJlZ0RhdGEgfD0gMHgyMDsKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1Nkc1JlZygwLDEsMCwgcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zd2l0Y2hfcHJvYmUKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBQcm9iZSBzd2l0Y2gKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3dpdGNoIHByb2JlZAorICogICAgICBSVF9FUlJfRkFJTEVEICAgLSBTd2l0Y2ggVW5wcm9iZWQuCisgKiBOb3RlOgorICoKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfc3dpdGNoX3Byb2JlKHN3aXRjaF9jaGlwX3QgKnBTd2l0Y2hDaGlwKQoreworI2lmIGRlZmluZWQoRk9SQ0VfUFJPQkVfUlRMODM2N0MpCisKKyAgICAqcFN3aXRjaENoaXAgPSBDSElQX1JUTDgzNjdDOworICAgIGhhbEN0cmwgPSAmcnRsODM2N2NfaGFsX0N0cmw7CisKKyNlbGlmIGRlZmluZWQoRk9SQ0VfUFJPQkVfUlRMODM3MEIpCisKKyAgICAqcFN3aXRjaENoaXAgPSBDSElQX1JUTDgzNzBCOworICAgIGhhbEN0cmwgPSAmcnRsODM3MGJfaGFsX0N0cmw7CisKKyNlbGlmIGRlZmluZWQoRk9SQ0VfUFJPQkVfUlRMODM2NEIpCisKKyAgICAqcFN3aXRjaENoaXAgPSBDSElQX1JUTDgzNjRCOworICAgIGhhbEN0cmwgPSAmcnRsODM2NGJfaGFsX0N0cmw7CisKKyNlbGlmIGRlZmluZWQoRk9SQ0VfUFJPQkVfUlRMODM2M1NDX1ZCKQorCisgICAgKnBTd2l0Y2hDaGlwID0gQ0hJUF9SVEw4MzYzU0NfVkI7CisgICAgaGFsQ3RybCA9ICZydGw4MzYzc2NfdmJfaGFsX0N0cmw7CisKKyNlbHNlCisgICAgcnRrX3VpbnQzMiByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBkYXRhLCByZWdWYWx1ZTsKKworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4MTNDMiwgMHgwMjQ5KSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoMHgxMzAwLCAmZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKDB4MTMwMSwgJnJlZ1ZhbHVlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHgxM0MyLCAweDAwMDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBzd2l0Y2ggKGRhdGEpCisgICAgeworICAgICAgICBjYXNlIDB4MDI3NjoKKyAgICAgICAgY2FzZSAweDA1OTc6CisgICAgICAgIGNhc2UgMHg2MzY3OgorICAgICAgICAgICAgKnBTd2l0Y2hDaGlwID0gQ0hJUF9SVEw4MzY3QzsKKyAgICAgICAgICAgIGhhbEN0cmwgPSAmcnRsODM2N2NfaGFsX0N0cmw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweDA2NTI6CisgICAgICAgIGNhc2UgMHg2MzY4OgorICAgICAgICAgICAgKnBTd2l0Y2hDaGlwID0gQ0hJUF9SVEw4MzcwQjsKKyAgICAgICAgICAgIGhhbEN0cmwgPSAmcnRsODM3MGJfaGFsX0N0cmw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweDA4MDE6CisgICAgICAgIGNhc2UgMHg2NTExOgorICAgICAgICAgICAgaWYoIChyZWdWYWx1ZSAmIDB4MDBGMCkgPT0gMHgwMDgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwU3dpdGNoQ2hpcCA9IENISVBfUlRMODM2M1NDX1ZCOworICAgICAgICAgICAgICAgIGhhbEN0cmwgPSAmcnRsODM2M3NjX3ZiX2hhbF9DdHJsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwU3dpdGNoQ2hpcCA9IENISVBfUlRMODM2NEI7CisgICAgICAgICAgICAgICAgaGFsQ3RybCA9ICZydGw4MzY0Yl9oYWxfQ3RybDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9GQUlMRUQ7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3dpdGNoX2luaXRpYWxTdGF0ZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgaW5pdGlhbCBzdGF0dXMKKyAqIElucHV0OgorICogICAgICBzdGF0ZSAgIC0gSW5pdGlhbCBzdGF0ZTsKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBJbml0aWFsaXplZAorICogICAgICBSVF9FUlJfRkFJTEVEICAgLSBVbmluaXRpYWxpemVkCisgKiBOb3RlOgorICoKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfc3dpdGNoX2luaXRpYWxTdGF0ZV9zZXQoaW5pdF9zdGF0ZV90IHN0YXRlKQoreworICAgIGlmKHN0YXRlID49IElOSVRfU1RBVEVfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKKworICAgIGluaXRfc3RhdGUgPSBzdGF0ZTsKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3dpdGNoX2luaXRpYWxTdGF0ZV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgaW5pdGlhbCBzdGF0dXMKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgSU5JVF9DT01QTEVURUQgICAgIC0gSW5pdGlhbGl6ZWQKKyAqICAgICAgSU5JVF9OT1RfQ09NUExFVEVEIC0gVW5pbml0aWFsaXplZAorICogTm90ZToKKyAqCisgKi8KK2luaXRfc3RhdGVfdCBydGtfc3dpdGNoX2luaXRpYWxTdGF0ZV9nZXQodm9pZCkKK3sKKyAgICByZXR1cm4gaW5pdF9zdGF0ZTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N3aXRjaF9sb2dpY2FsUG9ydENoZWNrCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQ2hlY2sgbG9naWNhbCBwb3J0IElELgorICogSW5wdXQ6CisgKiAgICAgIGxvZ2ljYWxQb3J0ICAgICAtIGxvZ2ljYWwgcG9ydCBJRAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFBvcnQgSUQgaXMgY29ycmVjdAorICogICAgICBSVF9FUlJfRkFJTEVEICAgLSBQb3J0IElEIGlzIG5vdCBjb3JyZWN0CisgKiAgICAgIFJUX0VSUl9OT1RfSU5JVCAtIE5vdCBJbml0aWFsaXplCisgKiBOb3RlOgorICoKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfc3dpdGNoX2xvZ2ljYWxQb3J0Q2hlY2socnRrX3BvcnRfdCBsb2dpY2FsUG9ydCkKK3sKKyAgICBpZihpbml0X3N0YXRlICE9IElOSVRfQ09NUExFVEVEKQorICAgICAgICByZXR1cm4gUlRfRVJSX05PVF9JTklUOworCisgICAgaWYobG9naWNhbFBvcnQgPj0gUlRLX1NXSVRDSF9QT1JUX05VTSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9GQUlMRUQ7CisKKyAgICBpZihoYWxDdHJsLT5sMnBfcG9ydFtsb2dpY2FsUG9ydF0gPT0gMHhGRikKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9GQUlMRUQ7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3dpdGNoX2lzVXRwUG9ydAorICogRGVzY3JpcHRpb246CisgKiAgICAgIENoZWNrIGlzIGxvZ2ljYWwgcG9ydCBhIFVUUCBwb3J0CisgKiBJbnB1dDoKKyAqICAgICAgbG9naWNhbFBvcnQgICAgIC0gbG9naWNhbCBwb3J0IElECisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gUG9ydCBJRCBpcyBhIFVUUCBwb3J0CisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAtIFBvcnQgSUQgaXMgbm90IGEgVVRQIHBvcnQKKyAqICAgICAgUlRfRVJSX05PVF9JTklUIC0gTm90IEluaXRpYWxpemUKKyAqIE5vdGU6CisgKgorICovCitydGtfYXBpX3JldF90IHJ0a19zd2l0Y2hfaXNVdHBQb3J0KHJ0a19wb3J0X3QgbG9naWNhbFBvcnQpCit7CisgICAgaWYoaW5pdF9zdGF0ZSAhPSBJTklUX0NPTVBMRVRFRCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OT1RfSU5JVDsKKworICAgIGlmKGxvZ2ljYWxQb3J0ID49IFJUS19TV0lUQ0hfUE9SVF9OVU0pCisgICAgICAgIHJldHVybiBSVF9FUlJfRkFJTEVEOworCisgICAgaWYoaGFsQ3RybC0+bG9nX3BvcnRfdHlwZVtsb2dpY2FsUG9ydF0gPT0gVVRQX1BPUlQpCisgICAgICAgIHJldHVybiBSVF9FUlJfT0s7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N3aXRjaF9pc0V4dFBvcnQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBDaGVjayBpcyBsb2dpY2FsIHBvcnQgYSBFeHRlbnNpb24gcG9ydAorICogSW5wdXQ6CisgKiAgICAgIGxvZ2ljYWxQb3J0ICAgICAtIGxvZ2ljYWwgcG9ydCBJRAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFBvcnQgSUQgaXMgYSBFWFQgcG9ydAorICogICAgICBSVF9FUlJfRkFJTEVEICAgLSBQb3J0IElEIGlzIG5vdCBhIEVYVCBwb3J0CisgKiAgICAgIFJUX0VSUl9OT1RfSU5JVCAtIE5vdCBJbml0aWFsaXplCisgKiBOb3RlOgorICoKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfc3dpdGNoX2lzRXh0UG9ydChydGtfcG9ydF90IGxvZ2ljYWxQb3J0KQoreworICAgIGlmKGluaXRfc3RhdGUgIT0gSU5JVF9DT01QTEVURUQpCisgICAgICAgIHJldHVybiBSVF9FUlJfTk9UX0lOSVQ7CisKKyAgICBpZihsb2dpY2FsUG9ydCA+PSBSVEtfU1dJVENIX1BPUlRfTlVNKQorICAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKKworICAgIGlmKGhhbEN0cmwtPmxvZ19wb3J0X3R5cGVbbG9naWNhbFBvcnRdID09IEVYVF9QT1JUKQorICAgICAgICByZXR1cm4gUlRfRVJSX09LOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9GQUlMRUQ7Cit9CisKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N3aXRjaF9pc0hzZ1BvcnQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBDaGVjayBpcyBsb2dpY2FsIHBvcnQgYSBIU0cgcG9ydAorICogSW5wdXQ6CisgKiAgICAgIGxvZ2ljYWxQb3J0ICAgICAtIGxvZ2ljYWwgcG9ydCBJRAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFBvcnQgSUQgaXMgYSBIU0cgcG9ydAorICogICAgICBSVF9FUlJfRkFJTEVEICAgLSBQb3J0IElEIGlzIG5vdCBhIEhTRyBwb3J0CisgKiAgICAgIFJUX0VSUl9OT1RfSU5JVCAtIE5vdCBJbml0aWFsaXplCisgKiBOb3RlOgorICoKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfc3dpdGNoX2lzSHNnUG9ydChydGtfcG9ydF90IGxvZ2ljYWxQb3J0KQoreworICAgIGlmKGluaXRfc3RhdGUgIT0gSU5JVF9DT01QTEVURUQpCisgICAgICAgIHJldHVybiBSVF9FUlJfTk9UX0lOSVQ7CisKKyAgICBpZihsb2dpY2FsUG9ydCA+PSBSVEtfU1dJVENIX1BPUlRfTlVNKQorICAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKKworICAgIGlmKGxvZ2ljYWxQb3J0ID09IGhhbEN0cmwtPmhzZ19sb2dpY2FsX3BvcnQpCisgICAgICAgIHJldHVybiBSVF9FUlJfT0s7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N3aXRjaF9pc1NnbWlpUG9ydAorICogRGVzY3JpcHRpb246CisgKiAgICAgIENoZWNrIGlzIGxvZ2ljYWwgcG9ydCBhIFNHTUlJIHBvcnQKKyAqIElucHV0OgorICogICAgICBsb2dpY2FsUG9ydCAgICAgLSBsb2dpY2FsIHBvcnQgSUQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBQb3J0IElEIGlzIGEgU0dNSUkgcG9ydAorICogICAgICBSVF9FUlJfRkFJTEVEICAgLSBQb3J0IElEIGlzIG5vdCBhIFNHTUlJIHBvcnQKKyAqICAgICAgUlRfRVJSX05PVF9JTklUIC0gTm90IEluaXRpYWxpemUKKyAqIE5vdGU6CisgKgorICovCitydGtfYXBpX3JldF90IHJ0a19zd2l0Y2hfaXNTZ21paVBvcnQocnRrX3BvcnRfdCBsb2dpY2FsUG9ydCkKK3sKKyAgICBpZihpbml0X3N0YXRlICE9IElOSVRfQ09NUExFVEVEKQorICAgICAgICByZXR1cm4gUlRfRVJSX05PVF9JTklUOworCisgICAgaWYobG9naWNhbFBvcnQgPj0gUlRLX1NXSVRDSF9QT1JUX05VTSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9GQUlMRUQ7CisKKyAgICBpZiggKCgweDAxIDw8IGxvZ2ljYWxQb3J0KSAmIGhhbEN0cmwtPnNnX2xvZ2ljYWxfcG9ydG1hc2spICE9IDApCisgICAgICAgIHJldHVybiBSVF9FUlJfT0s7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N3aXRjaF9pc0NQVVBvcnQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBDaGVjayBpcyBsb2dpY2FsIHBvcnQgYSBDUFUgcG9ydAorICogSW5wdXQ6CisgKiAgICAgIGxvZ2ljYWxQb3J0ICAgICAtIGxvZ2ljYWwgcG9ydCBJRAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFBvcnQgSUQgaXMgYSBDUFUgcG9ydAorICogICAgICBSVF9FUlJfRkFJTEVEICAgLSBQb3J0IElEIGlzIG5vdCBhIENQVSBwb3J0CisgKiAgICAgIFJUX0VSUl9OT1RfSU5JVCAtIE5vdCBJbml0aWFsaXplCisgKiBOb3RlOgorICoKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfc3dpdGNoX2lzQ1BVUG9ydChydGtfcG9ydF90IGxvZ2ljYWxQb3J0KQoreworICAgIGlmKGluaXRfc3RhdGUgIT0gSU5JVF9DT01QTEVURUQpCisgICAgICAgIHJldHVybiBSVF9FUlJfTk9UX0lOSVQ7CisKKyAgICBpZihsb2dpY2FsUG9ydCA+PSBSVEtfU1dJVENIX1BPUlRfTlVNKQorICAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKKworICAgIGlmKCAoKDB4MDEgPDwgbG9naWNhbFBvcnQpICYgaGFsQ3RybC0+dmFsaWRfY3B1X3BvcnRtYXNrKSAhPSAwKQorICAgICAgICByZXR1cm4gUlRfRVJSX09LOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9GQUlMRUQ7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zd2l0Y2hfaXNDb21ib1BvcnQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBDaGVjayBpcyBsb2dpY2FsIHBvcnQgYSBDb21ibyBwb3J0CisgKiBJbnB1dDoKKyAqICAgICAgbG9naWNhbFBvcnQgICAgIC0gbG9naWNhbCBwb3J0IElECisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gUG9ydCBJRCBpcyBhIGNvbWJvIHBvcnQKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgIC0gUG9ydCBJRCBpcyBub3QgYSBjb21ibyBwb3J0CisgKiAgICAgIFJUX0VSUl9OT1RfSU5JVCAtIE5vdCBJbml0aWFsaXplCisgKiBOb3RlOgorICoKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfc3dpdGNoX2lzQ29tYm9Qb3J0KHJ0a19wb3J0X3QgbG9naWNhbFBvcnQpCit7CisgICAgaWYoaW5pdF9zdGF0ZSAhPSBJTklUX0NPTVBMRVRFRCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OT1RfSU5JVDsKKworICAgIGlmKGxvZ2ljYWxQb3J0ID49IFJUS19TV0lUQ0hfUE9SVF9OVU0pCisgICAgICAgIHJldHVybiBSVF9FUlJfRkFJTEVEOworCisgICAgaWYoaGFsQ3RybC0+Y29tYm9fbG9naWNhbF9wb3J0ID09IGxvZ2ljYWxQb3J0KQorICAgICAgICByZXR1cm4gUlRfRVJSX09LOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9GQUlMRUQ7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zd2l0Y2hfQ29tYm9Qb3J0X2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBDb21ibyBwb3J0IElECisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFBvcnQgSUQgb2YgY29tYm8gcG9ydAorICogTm90ZToKKyAqCisgKi8KK3J0a191aW50MzIgcnRrX3N3aXRjaF9Db21ib1BvcnRfZ2V0KHZvaWQpCit7CisgICAgcmV0dXJuIGhhbEN0cmwtPmNvbWJvX2xvZ2ljYWxfcG9ydDsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N3aXRjaF9pc1B0cFBvcnQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBDaGVjayBpcyBsb2dpY2FsIHBvcnQgYSBQVFAgcG9ydAorICogSW5wdXQ6CisgKiAgICAgIGxvZ2ljYWxQb3J0ICAgICAtIGxvZ2ljYWwgcG9ydCBJRAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFBvcnQgSUQgaXMgYSBQVFAgcG9ydAorICogICAgICBSVF9FUlJfRkFJTEVEICAgLSBQb3J0IElEIGlzIG5vdCBhIFBUUCBwb3J0CisgKiAgICAgIFJUX0VSUl9OT1RfSU5JVCAtIE5vdCBJbml0aWFsaXplCisgKiBOb3RlOgorICoKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfc3dpdGNoX2lzUHRwUG9ydChydGtfcG9ydF90IGxvZ2ljYWxQb3J0KQoreworICAgIGlmKGluaXRfc3RhdGUgIT0gSU5JVF9DT01QTEVURUQpCisgICAgICAgIHJldHVybiBSVF9FUlJfTk9UX0lOSVQ7CisKKyAgICBpZihsb2dpY2FsUG9ydCA+PSBSVEtfU1dJVENIX1BPUlRfTlVNKQorICAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKKworICAgIGlmKGhhbEN0cmwtPnB0cF9wb3J0W2xvZ2ljYWxQb3J0XSA9PSAxKQorICAgICAgICByZXR1cm4gUlRfRVJSX09LOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9GQUlMRUQ7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHBoeXNpY2FsIHBvcnQgSUQKKyAqIElucHV0OgorICogICAgICBsb2dpY2FsUG9ydCAgICAgICAtIGxvZ2ljYWwgcG9ydCBJRAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFBoeXNpY2FsIHBvcnQgSUQKKyAqIE5vdGU6CisgKgorICovCitydGtfdWludDMyIHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHJ0a19wb3J0X3QgbG9naWNhbFBvcnQpCit7CisgICAgaWYoaW5pdF9zdGF0ZSAhPSBJTklUX0NPTVBMRVRFRCkKKyAgICAgICAgcmV0dXJuIFVOREVGSU5FX1BIWV9QT1JUOworCisgICAgaWYobG9naWNhbFBvcnQgPj0gUlRLX1NXSVRDSF9QT1JUX05VTSkKKyAgICAgICAgcmV0dXJuIFVOREVGSU5FX1BIWV9QT1JUOworCisgICAgcmV0dXJuIChoYWxDdHJsLT5sMnBfcG9ydFtsb2dpY2FsUG9ydF0pOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3dpdGNoX3BvcnRfUDJMX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBsb2dpY2FsIHBvcnQgSUQKKyAqIElucHV0OgorICogICAgICBwaHlzaWNhbFBvcnQgICAgICAgLSBwaHlzaWNhbCBwb3J0IElECisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgbG9naWNhbCBwb3J0IElECisgKiBOb3RlOgorICoKKyAqLworcnRrX3BvcnRfdCBydGtfc3dpdGNoX3BvcnRfUDJMX2dldChydGtfdWludDMyIHBoeXNpY2FsUG9ydCkKK3sKKyAgICBpZihpbml0X3N0YXRlICE9IElOSVRfQ09NUExFVEVEKQorICAgICAgICByZXR1cm4gVU5ERUZJTkVfUE9SVDsKKworICAgIGlmKHBoeXNpY2FsUG9ydCA+PSBSVEtfU1dJVENIX1BPUlRfTlVNKQorICAgICAgICByZXR1cm4gVU5ERUZJTkVfUE9SVDsKKworICAgIHJldHVybiAoaGFsQ3RybC0+cDJsX3BvcnRbcGh5c2ljYWxQb3J0XSk7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zd2l0Y2hfaXNQb3J0TWFza1ZhbGlkCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQ2hlY2sgcG9ydG1hc2sgaXMgdmFsaWQgb3Igbm90CisgKiBJbnB1dDoKKyAqICAgICAgcFBtYXNrICAgICAgIC0gbG9naWNhbCBwb3J0IG1hc2sKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gcG9ydCBtYXNrIGlzIHZhbGlkCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBwb3J0IG1hc2sgaXMgbm90IHZhbGlkCisgKiAgICAgIFJUX0VSUl9OT1RfSU5JVCAgICAgLSBOb3QgSW5pdGlhbGl6ZQorICogICAgICBSVF9FUlJfTlVMTF9QT0lOVEVSIC0gTnVsbCBwb2ludGVyCisgKiBOb3RlOgorICoKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfc3dpdGNoX2lzUG9ydE1hc2tWYWxpZChydGtfcG9ydG1hc2tfdCAqcFBtYXNrKQoreworICAgIGlmKGluaXRfc3RhdGUgIT0gSU5JVF9DT01QTEVURUQpCisgICAgICAgIHJldHVybiBSVF9FUlJfTk9UX0lOSVQ7CisKKyAgICBpZihOVUxMID09IHBQbWFzaykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiggKHBQbWFzay0+Yml0c1swXSB8IGhhbEN0cmwtPnZhbGlkX3BvcnRtYXNrKSAhPSBoYWxDdHJsLT52YWxpZF9wb3J0bWFzayApCisgICAgICAgIHJldHVybiBSVF9FUlJfRkFJTEVEOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N3aXRjaF9pc1BvcnRNYXNrVXRwCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQ2hlY2sgYWxsIHBvcnRzIGluIHBvcnRtYXNrIGFyZSBvbmx5IFVUUCBwb3J0CisgKiBJbnB1dDoKKyAqICAgICAgcFBtYXNrICAgICAgIC0gbG9naWNhbCBwb3J0IG1hc2sKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT25seSBVVFAgcG9ydCBpbiBwb3J0IG1hc2sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIE5vdCBvbmx5IFVUUCBwb3J0IGluIHBvcnQgbWFzaworICogICAgICBSVF9FUlJfTk9UX0lOSVQgICAgIC0gTm90IEluaXRpYWxpemUKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAtIE51bGwgcG9pbnRlcgorICogTm90ZToKKyAqCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3N3aXRjaF9pc1BvcnRNYXNrVXRwKHJ0a19wb3J0bWFza190ICpwUG1hc2spCit7CisgICAgaWYoaW5pdF9zdGF0ZSAhPSBJTklUX0NPTVBMRVRFRCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OT1RfSU5JVDsKKworICAgIGlmKE5VTEwgPT0gcFBtYXNrKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmKCAocFBtYXNrLT5iaXRzWzBdIHwgaGFsQ3RybC0+dmFsaWRfdXRwX3BvcnRtYXNrKSAhPSBoYWxDdHJsLT52YWxpZF91dHBfcG9ydG1hc2sgKQorICAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zd2l0Y2hfaXNQb3J0TWFza0V4dAorICogRGVzY3JpcHRpb246CisgKiAgICAgIENoZWNrIGFsbCBwb3J0cyBpbiBwb3J0bWFzayBhcmUgb25seSBFWFQgcG9ydAorICogSW5wdXQ6CisgKiAgICAgIHBQbWFzayAgICAgICAtIGxvZ2ljYWwgcG9ydCBtYXNrCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9ubHkgRVhUIHBvcnQgaW4gcG9ydCBtYXNrCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBOb3Qgb25seSBFWFQgcG9ydCBpbiBwb3J0IG1hc2sKKyAqICAgICAgUlRfRVJSX05PVF9JTklUICAgICAtIE5vdCBJbml0aWFsaXplCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgLSBOdWxsIHBvaW50ZXIKKyAqIE5vdGU6CisgKgorICovCitydGtfYXBpX3JldF90IHJ0a19zd2l0Y2hfaXNQb3J0TWFza0V4dChydGtfcG9ydG1hc2tfdCAqcFBtYXNrKQoreworICAgIGlmKGluaXRfc3RhdGUgIT0gSU5JVF9DT01QTEVURUQpCisgICAgICAgIHJldHVybiBSVF9FUlJfTk9UX0lOSVQ7CisKKyAgICBpZihOVUxMID09IHBQbWFzaykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiggKHBQbWFzay0+Yml0c1swXSB8IGhhbEN0cmwtPnZhbGlkX2V4dF9wb3J0bWFzaykgIT0gaGFsQ3RybC0+dmFsaWRfZXh0X3BvcnRtYXNrICkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9GQUlMRUQ7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3dpdGNoX3BvcnRtYXNrX0wyUF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcGh5c2ljbCBwb3J0bWFzayBmcm9tIGxvZ2ljYWwgcG9ydG1hc2sKKyAqIElucHV0OgorICogICAgICBwTG9naWNhbFBtYXNrICAgICAgIC0gbG9naWNhbCBwb3J0IG1hc2sKKyAqIE91dHB1dDoKKyAqICAgICAgcFBoeXNpY2FsUG9ydG1hc2sgICAtIHBoeXNpY2FsIHBvcnQgbWFzaworICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX05PVF9JTklUICAgICAtIE5vdCBJbml0aWFsaXplCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgLSBOdWxsIHBvaW50ZXIKKyAqICAgICAgUlRfRVJSX1BPUlRfTUFTSyAgICAtIEVycm9yIHBvcnQgbWFzaworICogTm90ZToKKyAqCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3N3aXRjaF9wb3J0bWFza19MMlBfZ2V0KHJ0a19wb3J0bWFza190ICpwTG9naWNhbFBtYXNrLCBydGtfdWludDMyICpwUGh5c2ljYWxQb3J0bWFzaykKK3sKKyAgICBydGtfdWludDMyIGxvZ19wb3J0LCBwaHlfcG9ydDsKKworICAgIGlmKGluaXRfc3RhdGUgIT0gSU5JVF9DT01QTEVURUQpCisgICAgICAgIHJldHVybiBSVF9FUlJfTk9UX0lOSVQ7CisKKyAgICBpZihOVUxMID09IHBMb2dpY2FsUG1hc2spCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYoTlVMTCA9PSBwUGh5c2ljYWxQb3J0bWFzaykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZihydGtfc3dpdGNoX2lzUG9ydE1hc2tWYWxpZChwTG9naWNhbFBtYXNrKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9NQVNLOworCisgICAgLyogcmVzZXQgcGh5c2ljYWwgcG9ydCBtYXNrICovCisgICAgKnBQaHlzaWNhbFBvcnRtYXNrID0gMDsKKworICAgIFJUS19QT1JUTUFTS19TQ0FOKCgqcExvZ2ljYWxQbWFzayksIGxvZ19wb3J0KQorICAgIHsKKyAgICAgICAgcGh5X3BvcnQgPSBydGtfc3dpdGNoX3BvcnRfTDJQX2dldCgocnRrX3BvcnRfdClsb2dfcG9ydCk7CisgICAgICAgICpwUGh5c2ljYWxQb3J0bWFzayB8PSAoMHgwMDAxIDw8IHBoeV9wb3J0KTsKKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3dpdGNoX3BvcnRtYXNrX1AyTF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgbG9naWNhbCBwb3J0bWFzayBmcm9tIHBoeXNpY2FsIHBvcnRtYXNrCisgKiBJbnB1dDoKKyAqICAgICAgcGh5c2ljYWxQb3J0bWFzayAgICAtIHBoeXNpY2FsIHBvcnQgbWFzaworICogT3V0cHV0OgorICogICAgICBwTG9naWNhbFBtYXNrICAgICAgIC0gbG9naWNhbCBwb3J0IG1hc2sKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9OT1RfSU5JVCAgICAgLSBOb3QgSW5pdGlhbGl6ZQorICogICAgICBSVF9FUlJfTlVMTF9QT0lOVEVSIC0gTnVsbCBwb2ludGVyCisgKiAgICAgIFJUX0VSUl9QT1JUX01BU0sgICAgLSBFcnJvciBwb3J0IG1hc2sKKyAqIE5vdGU6CisgKgorICovCitydGtfYXBpX3JldF90IHJ0a19zd2l0Y2hfcG9ydG1hc2tfUDJMX2dldChydGtfdWludDMyIHBoeXNpY2FsUG9ydG1hc2ssIHJ0a19wb3J0bWFza190ICpwTG9naWNhbFBtYXNrKQoreworICAgIHJ0a191aW50MzIgbG9nX3BvcnQsIHBoeV9wb3J0OworCisgICAgaWYoaW5pdF9zdGF0ZSAhPSBJTklUX0NPTVBMRVRFRCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OT1RfSU5JVDsKKworICAgIGlmKE5VTEwgPT0gcExvZ2ljYWxQbWFzaykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBSVEtfUE9SVE1BU0tfQ0xFQVIoKnBMb2dpY2FsUG1hc2spOworCisgICAgZm9yKHBoeV9wb3J0ID0gaGFsQ3RybC0+bWluX3BoeV9wb3J0OyBwaHlfcG9ydCA8PSBoYWxDdHJsLT5tYXhfcGh5X3BvcnQ7IHBoeV9wb3J0KyspCisgICAgeworICAgICAgICBpZihwaHlzaWNhbFBvcnRtYXNrICYgKDB4MDAwMSA8PCBwaHlfcG9ydCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvZ19wb3J0ID0gcnRrX3N3aXRjaF9wb3J0X1AyTF9nZXQocGh5X3BvcnQpOworICAgICAgICAgICAgaWYobG9nX3BvcnQgIT0gVU5ERUZJTkVfUE9SVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBSVEtfUE9SVE1BU0tfUE9SVF9TRVQoKnBMb2dpY2FsUG1hc2ssIGxvZ19wb3J0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zd2l0Y2hfcGh5UG9ydE1hc2tfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHBoeXNpY2FsIHBvcnRtYXNrCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIDB4MDAgICAgICAgICAgICAgICAgLSBOb3QgSW5pdGlhbGl6ZQorICogICAgICBPdGhlciB2YWx1ZSAgICAgICAgIC0gUGh5c2ljYWwgcG9ydCBtYXNrCisgKiBOb3RlOgorICoKKyAqLworcnRrX3VpbnQzMiBydGtfc3dpdGNoX3BoeVBvcnRNYXNrX2dldCh2b2lkKQoreworICAgIGlmKGluaXRfc3RhdGUgIT0gSU5JVF9DT01QTEVURUQpCisgICAgICAgIHJldHVybiAweDAwOyAvKiBObyBwb3J0IGluIHBvcnRtYXNrICovCisKKyAgICByZXR1cm4gKGhhbEN0cmwtPnBoeV9wb3J0bWFzayk7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zd2l0Y2hfbG9nUG9ydE1hc2tfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IExvZ2ljYWwgcG9ydG1hc2sKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9OT1RfSU5JVCAgICAgLSBOb3QgSW5pdGlhbGl6ZQorICogICAgICBSVF9FUlJfTlVMTF9QT0lOVEVSIC0gTnVsbCBwb2ludGVyCisgKiBOb3RlOgorICoKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfc3dpdGNoX2xvZ1BvcnRNYXNrX2dldChydGtfcG9ydG1hc2tfdCAqcFBvcnRtYXNrKQoreworICAgIGlmKGluaXRfc3RhdGUgIT0gSU5JVF9DT01QTEVURUQpCisgICAgICAgIHJldHVybiBSVF9FUlJfRkFJTEVEOworCisgICAgaWYoTlVMTCA9PSBwUG9ydG1hc2spCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgcFBvcnRtYXNrLT5iaXRzWzBdID0gaGFsQ3RybC0+dmFsaWRfcG9ydG1hc2s7CisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N3aXRjaF9pbml0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IGNoaXAgdG8gZGVmYXVsdCBjb25maWd1cmF0aW9uIGVudmlyb21lbnQKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIHNldCBjaGlwIHJlZ2lzdGVycyB0byBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIGRpZmZlcmVudCByZWxlYXNlIGNoaXAgbW9kZWwuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3N3aXRjaF9pbml0KHZvaWQpCit7CisgICAgcnRrX3VpbnQzMiAgcmV0VmFsOworICAgIHJ0bDgzNjdjX3JtYV90IHJtYUNmZzsKKyAgICBzd2l0Y2hfY2hpcF90ICAgc3dpdGNoQ2hpcDsKKworICAgIC8qIHByb2JlIHN3aXRjaCAqLworICAgIGlmKChyZXRWYWwgPSBydGtfc3dpdGNoX3Byb2JlKCZzd2l0Y2hDaGlwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgLyogU2V0IGluaXRpYWwgc3RhdGUgKi8KKworICAgIGlmKChyZXRWYWwgPSBydGtfc3dpdGNoX2luaXRpYWxTdGF0ZV9zZXQoSU5JVF9DT01QTEVURUQpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAvKiBJbml0aWFsICovCisgICAgc3dpdGNoKHN3aXRjaENoaXApCisgICAgeworICAgICAgICBjYXNlIENISVBfUlRMODM2N0M6CisgICAgICAgICAgICBpZigocmV0VmFsID0gX3J0a19zd2l0Y2hfaW5pdF84MzY3YygpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENISVBfUlRMODM3MEI6CisgICAgICAgICAgICBpZigocmV0VmFsID0gX3J0a19zd2l0Y2hfaW5pdF84MzcwYigpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENISVBfUlRMODM2NEI6CisgICAgICAgICAgICBpZigocmV0VmFsID0gX3J0a19zd2l0Y2hfaW5pdF84MzY0YigpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENISVBfUlRMODM2M1NDX1ZCOgorICAgICAgICAgICAgaWYoKHJldFZhbCA9IF9ydGtfc3dpdGNoX2luaXRfODM2M3NjX3ZiKCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gUlRfRVJSX0NISVBfTk9UX0ZPVU5EOworICAgIH0KKworICAgIC8qIFNldCBPbGQgbWF4IHBhY2tldCBsZW5ndGggdG8gMTZLICovCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19NQVhfTEVOR1RIX0xJTUlOVF9JUEcsIFJUTDgzNjdDX01BWF9MRU5USF9DVFJMX01BU0ssIDMpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX01BWF9MRU5fUlhfVFgsIFJUTDgzNjdDX01BWF9MRU5fUlhfVFhfTUFTSywgMykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIC8qIEFDTCBNb2RlICovCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19BQ0xfQUNDRVNTX01PREUsIFJUTDgzNjdDX0FDTF9BQ0NFU1NfTU9ERV9NQVNLLCAxKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgLyogTWF4IHJhdGUgKi8KKyAgICBpZigocmV0VmFsID0gcnRrX3JhdGVfaWdyQmFuZHdpZHRoQ3RybFJhdGVfc2V0KGhhbEN0cmwtPmhzZ19sb2dpY2FsX3BvcnQsIFJUTDgzNjdDX1FPU19SQVRFX0lOUFVUX01BWF9IU0csIERJU0FCTEVELCBFTkFCTEVEKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYoKHJldFZhbCA9IHJ0a19yYXRlX2VnckJhbmR3aWR0aEN0cmxSYXRlX3NldChoYWxDdHJsLT5oc2dfbG9naWNhbF9wb3J0LCBSVEw4MzY3Q19RT1NfUkFURV9JTlBVVF9NQVhfSFNHLCBFTkFCTEVEKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHgwM2ZhLCAweDAwMDcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAvKiBDaGFuZ2UgdW5rbm93biBEQSB0byBwZXIgcG9ydCBzZXR0aW5nICovCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1BPUlRfU0VDVVJJVF9DVFJMX1JFRywgUlRMODM2N0NfVU5LTk9XTl9VTklDQVNUX0RBX0JFSEFWRV9NQVNLLCAzKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgLyogTFVUIGxvb2t1cCBPUCA9IDEgKi8KKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNMdXRJcExvb2t1cE1ldGhvZCgxKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIC8qIFNldCBSTUEgKi8KKyAgICBybWFDZmcucG9ydGlzb19sZWFreSA9IDA7CisgICAgcm1hQ2ZnLnZsYW5fbGVha3kgPSAwOworICAgIHJtYUNmZy5rZWVwX2Zvcm1hdCA9IDA7CisgICAgcm1hQ2ZnLnRyYXBfcHJpb3JpdHkgPSAwOworICAgIHJtYUNmZy5kaXNjYXJkX3N0b3JtX2ZpbHRlciA9IDA7CisgICAgcm1hQ2ZnLm9wZXJhdGlvbiA9IDA7CisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUm1hKDIsICZybWFDZmcpKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgLyogRW5hYmxlIFRYIE1pcnJvciBpc29sYXRpb24gbGVha3kgKi8KKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQb3J0TWlycm9ySXNvbGF0aW9uVHhMZWFreShFTkFCTEVEKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgLyogSU5UIEVOICovCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0lPX01JU0NfRlVOQywgUlRMODM2N0NfSU5UX0VOX09GRlNFVCwgMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zd2l0Y2hfcG9ydE1heFBrdExlbl9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgTWF4IHBhY2tldCBsZW5ndGgKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUG9ydCBJRAorICogICAgICBzcGVlZCAgIC0gU3BlZWQKKyAqICAgICAgY2ZnSWQgICAtIENvbmZpZ3VyYXRpb24gSUQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEVycm9yIElucHV0CisgKiBOb3RlOgorICovCitydGtfYXBpX3JldF90IHJ0a19zd2l0Y2hfcG9ydE1heFBrdExlbl9zZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfc3dpdGNoX21heFBrdExlbl9saW5rU3BlZWRfdCBzcGVlZCwgcnRrX3VpbnQzMiBjZmdJZCkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBQb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgaWYoc3BlZWQgPj0gTUFYUEtUTEVOX0xJTktfU1BFRURfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYoY2ZnSWQgPiBNQVhQS1RMRU5fQ0ZHX0lEX01BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljTWF4TGVuZ3RoKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCAocnRrX3VpbnQzMilzcGVlZCwgY2ZnSWQpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3dpdGNoX3BvcnRNYXhQa3RMZW5fZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IE1heCBwYWNrZXQgbGVuZ3RoCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIFBvcnQgSUQKKyAqICAgICAgc3BlZWQgICAtIFNwZWVkCisgKiBPdXRwdXQ6CisgKiAgICAgIHBDZmdJZCAgLSBDb25maWd1cmF0aW9uIElECisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBFcnJvciBJbnB1dAorICogTm90ZToKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfc3dpdGNoX3BvcnRNYXhQa3RMZW5fZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3N3aXRjaF9tYXhQa3RMZW5fbGlua1NwZWVkX3Qgc3BlZWQsIHJ0a191aW50MzIgKnBDZmdJZCkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBQb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgaWYoc3BlZWQgPj0gTUFYUEtUTEVOX0xJTktfU1BFRURfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYoTlVMTCA9PSBwQ2ZnSWQpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNNYXhMZW5ndGgocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIChydGtfdWludDMyKXNwZWVkLCBwQ2ZnSWQpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3dpdGNoX21heFBrdExlbkNmZ19zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgTWF4IHBhY2tldCBsZW5ndGggY29uZmlndXJhdGlvbgorICogSW5wdXQ6CisgKiAgICAgIGNmZ0lkICAgLSBDb25maWd1cmF0aW9uIElECisgKiAgICAgIHBrdExlbiAgLSBNYXggcGFja2V0IGxlbmd0aAorICogT3V0cHV0OgorICogICAgICBOb25lLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gRXJyb3IgSW5wdXQKKyAqIE5vdGU6CisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3N3aXRjaF9tYXhQa3RMZW5DZmdfc2V0KHJ0a191aW50MzIgY2ZnSWQsIHJ0a191aW50MzIgcGt0TGVuKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKGNmZ0lkID4gTUFYUEtUTEVOX0NGR19JRF9NQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZihwa3RMZW4gPiBSVEtfU1dJVENIX01BWF9QS1RMRU4pCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY01heExlbmd0aENmZyhjZmdJZCwgcGt0TGVuKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N3aXRjaF9tYXhQa3RMZW5DZmdfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IE1heCBwYWNrZXQgbGVuZ3RoIGNvbmZpZ3VyYXRpb24KKyAqIElucHV0OgorICogICAgICBjZmdJZCAgIC0gQ29uZmlndXJhdGlvbiBJRAorICogICAgICBwUGt0TGVuIC0gTWF4IHBhY2tldCBsZW5ndGgKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEVycm9yIElucHV0CisgKiBOb3RlOgorICovCitydGtfYXBpX3JldF90IHJ0a19zd2l0Y2hfbWF4UGt0TGVuQ2ZnX2dldChydGtfdWludDMyIGNmZ0lkLCBydGtfdWludDMyICpwUGt0TGVuKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKGNmZ0lkID4gTUFYUEtUTEVOX0NGR19JRF9NQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZihOVUxMID09IHBQa3RMZW4pCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNNYXhMZW5ndGhDZmcoY2ZnSWQsIHBQa3RMZW4pKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3dpdGNoX2dyZWVuRXRoZXJuZXRfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IGFsbCBQb3J0cyBHcmVlbiBFdGhlcm5ldCBzdGF0ZS4KKyAqIElucHV0OgorICogICAgICBlbmFibGUgLSBHcmVlbiBFdGhlcm5ldCBzdGF0ZS4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfRU5BQkxFICAgLSBJbnZhbGlkIGVuYWJsZSBpbnB1dC4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBzZXQgYWxsIFBvcnRzIEdyZWVuIEV0aGVybmV0IHN0YXRlLgorICogICAgICBUaGUgY29uZmlndXJhdGlvbiBpcyBhcyBmb2xsb3dpbmc6CisgKiAgICAgIC0gRElTQUJMRQorICogICAgICAtIEVOQUJMRQorICovCitydGtfYXBpX3JldF90IHJ0a19zd2l0Y2hfZ3JlZW5FdGhlcm5ldF9zZXQocnRrX2VuYWJsZV90IGVuYWJsZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHBvcnQ7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgUlRLX1NDQU5fQUxMX0xPR19QT1JUKHBvcnQpCisgICAgeworICAgICAgICBpZihydGtfc3dpdGNoX2lzVXRwUG9ydChwb3J0KSA9PSBSVF9FUlJfT0spCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1Bvd2VyU2F2aW5nKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLGVuYWJsZSkpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljR3JlZW5FdGhlcm5ldChydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgZW5hYmxlKSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N3aXRjaF9ncmVlbkV0aGVybmV0X2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBhbGwgUG9ydHMgR3JlZW4gRXRoZXJuZXQgc3RhdGUuCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwRW5hYmxlIC0gR3JlZW4gRXRoZXJuZXQgc3RhdGUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBjYW4gZ2V0IEdyZWVuIEV0aGVybmV0IHN0YXRlLgorICovCitydGtfYXBpX3JldF90IHJ0a19zd2l0Y2hfZ3JlZW5FdGhlcm5ldF9nZXQocnRrX2VuYWJsZV90ICpwRW5hYmxlKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcG9ydDsKKyAgICBydGtfdWludDMyIHN0YXRlOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIFJUS19TQ0FOX0FMTF9MT0dfUE9SVChwb3J0KQorICAgIHsKKyAgICAgICAgaWYocnRrX3N3aXRjaF9pc1V0cFBvcnQocG9ydCkgPT0gUlRfRVJSX09LKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQb3dlclNhdmluZyhydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgJnN0YXRlKSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZihzdGF0ZSA9PSBESVNBQkxFRCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqcEVuYWJsZSA9IERJU0FCTEVEOworICAgICAgICAgICAgICAgIHJldHVybiBSVF9FUlJfT0s7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0dyZWVuRXRoZXJuZXQocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksICZzdGF0ZSkpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgaWYoc3RhdGUgPT0gRElTQUJMRUQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKnBFbmFibGUgPSBESVNBQkxFRDsKKyAgICAgICAgICAgICAgICByZXR1cm4gUlRfRVJSX09LOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgKnBFbmFibGUgPSBFTkFCTEVEOworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zd2l0Y2hfbWF4TG9naWNhbFBvcnRfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IE1heCBsb2dpY2FsIHBvcnQgSUQKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgTWF4IGxvZ2ljYWwgcG9ydAorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgY2FuIGdldCBtYXggbG9naWNhbCBwb3J0CisgKi8KK3J0a19wb3J0X3QgcnRrX3N3aXRjaF9tYXhMb2dpY2FsUG9ydF9nZXQodm9pZCkKK3sKKyAgICBydGtfcG9ydF90IHBvcnQsIG1heExvZ2ljYWxQb3J0ID0gMDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgaWYocnRrX3N3aXRjaF9pbml0aWFsU3RhdGVfZ2V0KCkgIT0gSU5JVF9DT01QTEVURUQpCisgICAgeworICAgICAgICByZXR1cm4gVU5ERUZJTkVfUE9SVDsKKyAgICB9CisKKyAgICBmb3IocG9ydCA9IDA7IHBvcnQgPCBSVEtfU1dJVENIX1BPUlRfTlVNOyBwb3J0KyspCisgICAgeworICAgICAgICBpZiggKGhhbEN0cmwtPmxvZ19wb3J0X3R5cGVbcG9ydF0gPT0gVVRQX1BPUlQpIHx8IChoYWxDdHJsLT5sb2dfcG9ydF90eXBlW3BvcnRdID09IEVYVF9QT1JUKSApCisgICAgICAgICAgICBtYXhMb2dpY2FsUG9ydCA9IHBvcnQ7CisgICAgfQorCisgICAgcmV0dXJuIG1heExvZ2ljYWxQb3J0OworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3dpdGNoX21heE1ldGVySWRfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IE1heCBNZXRlciBJRAorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICAweDAwICAgICAgICAgICAgICAgIC0gTm90IEluaXRpYWxpemUKKyAqICAgICAgT3RoZXIgdmFsdWUgICAgICAgICAtIE1heCBNZXRlciBJRAorICogTm90ZToKKyAqCisgKi8KK3J0a191aW50MzIgcnRrX3N3aXRjaF9tYXhNZXRlcklkX2dldCh2b2lkKQoreworICAgIGlmKGluaXRfc3RhdGUgIT0gSU5JVF9DT01QTEVURUQpCisgICAgICAgIHJldHVybiAweDAwOworCisgICAgcmV0dXJuIChoYWxDdHJsLT5tYXhfbWV0ZXJfaWQpOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3dpdGNoX21heEx1dEFkZHJOdW1iZXJfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IE1heCBMVVQgQWRkcmVzcyBudW1iZXIKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgMHgwMCAgICAgICAgICAgICAgICAtIE5vdCBJbml0aWFsaXplCisgKiAgICAgIE90aGVyIHZhbHVlICAgICAgICAgLSBNYXggTFVUIEFkZHJlc3MgbnVtYmVyCisgKiBOb3RlOgorICoKKyAqLworcnRrX3VpbnQzMiBydGtfc3dpdGNoX21heEx1dEFkZHJOdW1iZXJfZ2V0KHZvaWQpCit7CisgICAgaWYoaW5pdF9zdGF0ZSAhPSBJTklUX0NPTVBMRVRFRCkKKyAgICAgICAgcmV0dXJuIDB4MDA7CisKKyAgICByZXR1cm4gKGhhbEN0cmwtPm1heF9sdXRfYWRkcl9udW0pOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3dpdGNoX2lzVmFsaWRUcnVua0dycElkCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQ2hlY2sgaWYgdHJ1bmsgZ3JvdXAgaXMgdmFsaWQgb3Igbm90CisgKiBJbnB1dDoKKyAqICAgICAgZ3JwSWQgICAgICAgLSBHcm91cCBJRAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBUcnVuayBHcm91cCBJRCBpcyB2YWxpZAorICogICAgICBSVF9FUlJfTEFfVFJVTktfSUQgIC0gVHJ1bmsgR3JvdXAgSUQgaXMgbm90IHZhbGlkCisgKiBOb3RlOgorICoKKyAqLworcnRrX3VpbnQzMiBydGtfc3dpdGNoX2lzVmFsaWRUcnVua0dycElkKHJ0a191aW50MzIgZ3JwSWQpCit7CisgICAgaWYoaW5pdF9zdGF0ZSAhPSBJTklUX0NPTVBMRVRFRCkKKyAgICAgICAgcmV0dXJuIDB4MDA7CisKKyAgICBpZiggKGhhbEN0cmwtPnRydW5rX2dyb3VwX21hc2sgJiAoMHgwMSA8PCBncnBJZCkgKSAhPSAwKQorICAgICAgICByZXR1cm4gUlRfRVJSX09LOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9MQV9UUlVOS19JRDsKKworfQorCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydi5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODU4ZWRjCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnYuYwpAQCAtMCwwICsxLDYzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiAkUmV2aXNpb246IDc2MzA2ICQKKyAqICREYXRlOiAyMDE3LTAzLTA4IDE1OjEzOjU4ICswODAwICjpgLHkuIksIDA4IOS4ieaciCAyMDE3KSAkCisgKgorICogUHVycG9zZSA6IFJUTDgzNjdDIHN3aXRjaCBoaWdoLWxldmVsIEFQSSBmb3IgUlRMODM2N0MKKyAqIEZlYXR1cmUgOgorICoKKyAqLworCisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydi5oPgorCisjaWYgZGVmaW5lZChSVEtfWDg2X0FTSUNEUlYpCisjaW5jbHVkZSA8STJDbGliLmg+CisjZWxzZQorI2luY2x1ZGUgPHNtaS5oPgorI2VuZGlmCisKKy8qZm9yIGRyaXZlciB2ZXJpZnkgdGVzdGluZyBvbmx5Ki8KKyNpZmRlZiBDT05GSUdfUlRMODM2N0NfQVNJQ0RSVl9URVNUCisjZGVmaW5lIENMRV9WSVJUVUFMX1JFR19TSVpFICAgICAgICAweDEwMDAwCitydGtfdWludDE2IENsZVZpcnR1YWxSZWdbQ0xFX1ZJUlRVQUxfUkVHX1NJWkVdOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19SVEw4NjVYX0NMRSkgfHwgZGVmaW5lZCAoUlRLX1g4Nl9DTEUpCitydGtfdWludDMyIGNsZURlYnVnZ2luZ0Rpc3BsYXk7CisjZW5kaWYKKworI2lmZGVmIEVNQkVEREVEX1NVUFBPUlQKK2V4dGVybiB2b2lkIHNldFJlZyhydGtfdWludDE2LCBydGtfdWludDE2KTsKK2V4dGVybiBydGtfdWludDE2IGdldFJlZyhydGtfdWludDE2KTsKKyNlbmRpZgorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljUmVnQml0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IGEgYml0IHZhbHVlIG9mIGEgc3BlY2lmaWVkIHJlZ2lzdGVyCisgKiBJbnB1dDoKKyAqICAgICAgcmVnICAgICAtIHJlZ2lzdGVyJ3MgYWRkcmVzcworICogICAgICBiaXQgICAgIC0gYml0IGxvY2F0aW9uCisgKiAgICAgIHZhbHVlICAgLSB2YWx1ZSB0byBzZXQuIEl0IGNhbiBiZSB2YWx1ZSAwIG9yIDEuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVyCisgKiBOb3RlOgorICogICAgICBTZXQgYSBiaXQgb2YgYSBzcGVjaWZpZWQgcmVnaXN0ZXIgdG8gMSBvciAwLgorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljUmVnQml0KHJ0a191aW50MzIgcmVnLCBydGtfdWludDMyIGJpdCwgcnRrX3VpbnQzMiB2YWx1ZSkKK3sKKworI2lmIGRlZmluZWQoUlRLX1g4Nl9BU0lDRFJWKQorICAgIHJ0a191aW50MzIgcmVnRGF0YTsKKyAgICByZXRfdCByZXRWYWw7CisKKyAgICBpZihiaXQgPj0gUlRMODM2N0NfUkVHQklUTEVOR1RIKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgcmV0VmFsID0gQWNjZXNzX1JlYWQocmVnLCAyLCAmcmVnRGF0YSk7CisgICAgaWYoVFJVRSAhPSByZXRWYWwpCisgICAgICAgIHJldHVybiBSVF9FUlJfU01JOworCisgICAgaWYoMHg4MzY3QiA9PSBjbGVEZWJ1Z2dpbmdEaXNwbGF5KQorICAgICAgICBQUklOVCgiUlsweCU0LjR4XT0weCU0LjR4XG4iLCByZWcsIHJlZ0RhdGEpOworCisgICAgaWYodmFsdWUpCisgICAgICAgIHJlZ0RhdGEgPSByZWdEYXRhIHwgKDEgPDwgYml0KTsKKyAgICBlbHNlCisgICAgICAgIHJlZ0RhdGEgPSByZWdEYXRhICYgKH4oMSA8PCBiaXQpKTsKKworICAgIHJldFZhbCA9IEFjY2Vzc19Xcml0ZShyZWcsMiwgcmVnRGF0YSk7CisgICAgaWYoVFJVRSAhPSByZXRWYWwpCisgICAgICAgIHJldHVybiBSVF9FUlJfU01JOworCisgICAgaWYoMHg4MzY3QiA9PSBjbGVEZWJ1Z2dpbmdEaXNwbGF5KQorICAgICAgICBQUklOVCgiV1sweCU0LjR4XT0weCU0LjR4XG4iLCByZWcsIHJlZ0RhdGEpOworCisKKyNlbGlmIGRlZmluZWQoQ09ORklHX1JUTDgzNjdDX0FTSUNEUlZfVEVTVCkKKworICAgIGlmKGJpdCA+PSBSVEw4MzY3Q19SRUdCSVRMRU5HVEgpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBlbHNlIGlmKHJlZyA+PSBDTEVfVklSVFVBTF9SRUdfU0laRSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICBpZih2YWx1ZSkKKyAgICB7CisgICAgICAgIENsZVZpcnR1YWxSZWdbcmVnXSA9ICBDbGVWaXJ0dWFsUmVnW3JlZ10gfCAoMSA8PCBiaXQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBDbGVWaXJ0dWFsUmVnW3JlZ10gPSAgQ2xlVmlydHVhbFJlZ1tyZWddICYgKH4oMSA8PCBiaXQpKTsKKyAgICB9CisKKyAgICBpZigweDgzNjdCID09IGNsZURlYnVnZ2luZ0Rpc3BsYXkpCisgICAgICAgIFBSSU5UKCJXWzB4JTQuNHhdPTB4JTQuNHhcbiIsIHJlZywgQ2xlVmlydHVhbFJlZ1tyZWddKTsKKworI2VsaWYgZGVmaW5lZChFTUJFRERFRF9TVVBQT1JUKQorICAgIHJ0a191aW50MTYgdG1wOworCisgICAgaWYocmVnID4gUlRMODM2N0NfUkVHREFUQU1BWCB8fCB2YWx1ZSA+IDEpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICB0bXAgPSBnZXRSZWcocmVnKTsKKyAgICB0bXAgJj0gKDEgPDwgYml0SWR4KTsKKyAgICB0bXAgfD0gKHZhbHVlIDw8IGJpdElkeCk7CisgICAgc2V0UmVnKHJlZywgdG1wKTsKKworI2Vsc2UKKyAgICBydGtfdWludDMyIHJlZ0RhdGE7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgaWYoYml0ID49IFJUTDgzNjdDX1JFR0JJVExFTkdUSCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIHJldFZhbCA9IHNtaV9yZWFkKHJlZywgJnJlZ0RhdGEpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiBSVF9FUlJfU01JOworCisgICNpZmRlZiBDT05GSUdfUlRMODY1WF9DTEUKKyAgICBpZigweDgzNjdCID09IGNsZURlYnVnZ2luZ0Rpc3BsYXkpCisgICAgICAgIFBSSU5UKCJSWzB4JTQuNHhdPTB4JTQuNHhcbiIsIHJlZywgcmVnRGF0YSk7CisgICNlbmRpZgorICAgIGlmKHZhbHVlKQorICAgICAgICByZWdEYXRhID0gcmVnRGF0YSB8ICgxIDw8IGJpdCk7CisgICAgZWxzZQorICAgICAgICByZWdEYXRhID0gcmVnRGF0YSAmICh+KDEgPDwgYml0KSk7CisKKyAgICByZXRWYWwgPSBzbWlfd3JpdGUocmVnLCByZWdEYXRhKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gUlRfRVJSX1NNSTsKKworICAjaWZkZWYgQ09ORklHX1JUTDg2NVhfQ0xFCisgICAgaWYoMHg4MzY3QiA9PSBjbGVEZWJ1Z2dpbmdEaXNwbGF5KQorICAgICAgICBQUklOVCgiV1sweCU0LjR4XT0weCU0LjR4XG4iLCByZWcsIHJlZ0RhdGEpOworICAjZW5kaWYKKworI2VuZGlmCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgYSBiaXQgdmFsdWUgb2YgYSBzcGVjaWZpZWQgcmVnaXN0ZXIKKyAqIElucHV0OgorICogICAgICByZWcgICAgIC0gcmVnaXN0ZXIncyBhZGRyZXNzCisgKiAgICAgIGJpdCAgICAgLSBiaXQgbG9jYXRpb24KKyAqICAgICAgdmFsdWUgICAtIHZhbHVlIHRvIGdldC4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChydGtfdWludDMyIHJlZywgcnRrX3VpbnQzMiBiaXQsIHJ0a191aW50MzIgKnBWYWx1ZSkKK3sKKworI2lmIGRlZmluZWQoUlRLX1g4Nl9BU0lDRFJWKQorCisgICAgcnRrX3VpbnQzMiByZWdEYXRhOworICAgIHJldF90IHJldFZhbDsKKworICAgIGlmKGJpdCA+PSBSVEw4MzY3Q19SRUdCSVRMRU5HVEgpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICByZXRWYWwgPSBBY2Nlc3NfUmVhZChyZWcsIDIsICZyZWdEYXRhKTsKKyAgICBpZihUUlVFICE9IHJldFZhbCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9TTUk7CisKKyAgICAqcFZhbHVlID0gKHJlZ0RhdGEgJiAoMHgxIDw8IGJpdCkpID4+IGJpdDsKKworICAgIGlmKDB4ODM2N0IgPT0gY2xlRGVidWdnaW5nRGlzcGxheSkKKyAgICAgICAgUFJJTlQoIlJbMHglNC40eF09MHglNC40eFxuIiwgcmVnLCByZWdEYXRhKTsKKworI2VsaWYgZGVmaW5lZChDT05GSUdfUlRMODM2N0NfQVNJQ0RSVl9URVNUKQorCisgICAgaWYoYml0ID49IFJUTDgzNjdDX1JFR0JJVExFTkdUSCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmKHJlZyA+PSBDTEVfVklSVFVBTF9SRUdfU0laRSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICAqcFZhbHVlID0gKENsZVZpcnR1YWxSZWdbcmVnXSAmICgweDEgPDwgYml0KSkgPj4gYml0OworCisgICAgaWYoMHg4MzY3QiA9PSBjbGVEZWJ1Z2dpbmdEaXNwbGF5KQorICAgICAgICBQUklOVCgiUlsweCU0LjR4XT0weCU0LjR4XG4iLCByZWcsIENsZVZpcnR1YWxSZWdbcmVnXSk7CisKKyNlbGlmIGRlZmluZWQoRU1CRURERURfU1VQUE9SVCkKKyAgICBydGtfdWludDE2IHRtcDsKKworICAgIGlmKHJlZyA+IFJUTDgzNjdDX1JFR0RBVEFNQVggKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgdG1wID0gZ2V0UmVnKHJlZyk7CisgICAgdG1wID0gdG1wID4+IGJpdElkeDsKKyAgICB0bXAgJj0gMTsKKyAgICAqdmFsdWUgPSB0bXA7CisjZWxzZQorICAgIHJ0a191aW50MzIgcmVnRGF0YTsKKyAgICByZXRfdCByZXRWYWw7CisKKyAgICByZXRWYWwgPSBzbWlfcmVhZChyZWcsICZyZWdEYXRhKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gUlRfRVJSX1NNSTsKKworICAjaWZkZWYgQ09ORklHX1JUTDg2NVhfQ0xFCisgICAgaWYoMHg4MzY3QiA9PSBjbGVEZWJ1Z2dpbmdEaXNwbGF5KQorICAgICAgICBQUklOVCgiUlsweCU0LjR4XT0weCU0LjR4XG4iLCByZWcsIHJlZ0RhdGEpOworICAjZW5kaWYKKworICAgICpwVmFsdWUgPSAocmVnRGF0YSAmICgweDEgPDwgYml0KSkgPj4gYml0OworCisjZW5kaWYKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgYml0cyB2YWx1ZSBvZiBhIHNwZWNpZmllZCByZWdpc3RlcgorICogSW5wdXQ6CisgKiAgICAgIHJlZyAgICAgLSByZWdpc3RlcidzIGFkZHJlc3MKKyAqICAgICAgYml0cyAgICAtIGJpdHMgbWFzayBmb3Igc2V0dGluZworICogICAgICB2YWx1ZSAgIC0gYml0cyB2YWx1ZSBmb3Igc2V0dGluZworICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcgorICogTm90ZToKKyAqICAgICAgU2V0IGJpdHMgb2YgYSBzcGVjaWZpZWQgcmVnaXN0ZXIgdG8gdmFsdWUuIEJvdGggYml0cyBhbmQgdmFsdWUgYXJlIGJlIHRyZWF0ZWQgYXMgYml0LW1hc2sKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMocnRrX3VpbnQzMiByZWcsIHJ0a191aW50MzIgYml0cywgcnRrX3VpbnQzMiB2YWx1ZSkKK3sKKworI2lmIGRlZmluZWQoUlRLX1g4Nl9BU0lDRFJWKQorCisgICAgcnRrX3VpbnQzMiByZWdEYXRhOworICAgIHJldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIGJpdHNTaGlmdDsKKyAgICBydGtfdWludDMyIHZhbHVlU2hpZnRlZDsKKworICAgIGlmKGJpdHMgPj0gKDEgPDwgUlRMODM2N0NfUkVHQklUTEVOR1RIKSApCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBiaXRzU2hpZnQgPSAwOworICAgIHdoaWxlKCEoYml0cyAmICgxIDw8IGJpdHNTaGlmdCkpKQorICAgIHsKKyAgICAgICAgYml0c1NoaWZ0Kys7CisgICAgICAgIGlmKGJpdHNTaGlmdCA+PSBSVEw4MzY3Q19SRUdCSVRMRU5HVEgpCisgICAgICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworICAgIH0KKworICAgIHZhbHVlU2hpZnRlZCA9IHZhbHVlIDw8IGJpdHNTaGlmdDsKKyAgICBpZih2YWx1ZVNoaWZ0ZWQgPiBSVEw4MzY3Q19SRUdEQVRBTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgcmV0VmFsID0gQWNjZXNzX1JlYWQocmVnLCAyLCAmcmVnRGF0YSk7CisgICAgaWYoVFJVRSAhPSByZXRWYWwpCisgICAgICAgIHJldHVybiBSVF9FUlJfU01JOworCisgICAgaWYoMHg4MzY3QiA9PSBjbGVEZWJ1Z2dpbmdEaXNwbGF5KQorICAgICAgICBQUklOVCgiUlsweCU0LjR4XT0weCU0LjR4XG4iLCByZWcsIHJlZ0RhdGEpOworCisgICAgcmVnRGF0YSA9IHJlZ0RhdGEgJiAofmJpdHMpOworICAgIHJlZ0RhdGEgPSByZWdEYXRhIHwgKHZhbHVlU2hpZnRlZCAmIGJpdHMpOworCisgICAgcmV0VmFsID0gQWNjZXNzX1dyaXRlKHJlZywyLCByZWdEYXRhKTsKKyAgICBpZihUUlVFICE9IHJldFZhbCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9TTUk7CisKKyAgICBpZigweDgzNjdCID09IGNsZURlYnVnZ2luZ0Rpc3BsYXkpCisgICAgICAgIFBSSU5UKCJXWzB4JTQuNHhdPTB4JTQuNHhcbiIsIHJlZywgcmVnRGF0YSk7CisKKyNlbGlmIGRlZmluZWQoQ09ORklHX1JUTDgzNjdDX0FTSUNEUlZfVEVTVCkKKyAgICBydGtfdWludDMyIHJlZ0RhdGE7CisgICAgcnRrX3VpbnQzMiBiaXRzU2hpZnQ7CisgICAgcnRrX3VpbnQzMiB2YWx1ZVNoaWZ0ZWQ7CisKKyAgICBpZihiaXRzID49ICgxIDw8IFJUTDgzNjdDX1JFR0JJVExFTkdUSCkgKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgYml0c1NoaWZ0ID0gMDsKKyAgICB3aGlsZSghKGJpdHMgJiAoMSA8PCBiaXRzU2hpZnQpKSkKKyAgICB7CisgICAgICAgIGJpdHNTaGlmdCsrOworICAgICAgICBpZihiaXRzU2hpZnQgPj0gUlRMODM2N0NfUkVHQklUTEVOR1RIKQorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKyAgICB9CisgICAgdmFsdWVTaGlmdGVkID0gdmFsdWUgPDwgYml0c1NoaWZ0OworCisgICAgaWYodmFsdWVTaGlmdGVkID4gUlRMODM2N0NfUkVHREFUQU1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmKHJlZyA+PSBDTEVfVklSVFVBTF9SRUdfU0laRSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICByZWdEYXRhID0gQ2xlVmlydHVhbFJlZ1tyZWddICYgKH5iaXRzKTsKKyAgICByZWdEYXRhID0gcmVnRGF0YSB8ICh2YWx1ZVNoaWZ0ZWQgJiBiaXRzKTsKKworICAgIENsZVZpcnR1YWxSZWdbcmVnXSA9IHJlZ0RhdGE7CisKKyAgICBpZigweDgzNjdCID09IGNsZURlYnVnZ2luZ0Rpc3BsYXkpCisgICAgICAgIFBSSU5UKCJXWzB4JTQuNHhdPTB4JTQuNHhcbiIsIHJlZywgcmVnRGF0YSk7CisKKyNlbGlmIGRlZmluZWQoRU1CRURERURfU1VQUE9SVCkKKyAgICBydGtfdWludDMyIHJlZ0RhdGE7CisgICAgcnRrX3VpbnQzMiBiaXRzU2hpZnQ7CisgICAgcnRrX3VpbnQzMiB2YWx1ZVNoaWZ0ZWQ7CisKKyAgICBpZihyZWcgPiBSVEw4MzY3Q19SRUdEQVRBTUFYICkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmKGJpdHMgPj0gKDEgPDwgUlRMODM2N0NfUkVHQklUTEVOR1RIKSApCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBiaXRzU2hpZnQgPSAwOworICAgIHdoaWxlKCEoYml0cyAmICgxIDw8IGJpdHNTaGlmdCkpKQorICAgIHsKKyAgICAgICAgYml0c1NoaWZ0Kys7CisgICAgICAgIGlmKGJpdHNTaGlmdCA+PSBSVEw4MzY3Q19SRUdCSVRMRU5HVEgpCisgICAgICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworICAgIH0KKworICAgIHZhbHVlU2hpZnRlZCA9IHZhbHVlIDw8IGJpdHNTaGlmdDsKKyAgICBpZih2YWx1ZVNoaWZ0ZWQgPiBSVEw4MzY3Q19SRUdEQVRBTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgcmVnRGF0YSA9IGdldFJlZyhyZWcpOworICAgIHJlZ0RhdGEgPSByZWdEYXRhICYgKH5iaXRzKTsKKyAgICByZWdEYXRhID0gcmVnRGF0YSB8ICh2YWx1ZVNoaWZ0ZWQgJiBiaXRzKTsKKworICAgIHNldFJlZyhyZWcsIHJlZ0RhdGEpOworCisjZWxzZQorICAgIHJ0a191aW50MzIgcmVnRGF0YTsKKyAgICByZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBiaXRzU2hpZnQ7CisgICAgcnRrX3VpbnQzMiB2YWx1ZVNoaWZ0ZWQ7CisKKyAgICBpZihiaXRzID49ICgxIDw8IFJUTDgzNjdDX1JFR0JJVExFTkdUSCkgKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgYml0c1NoaWZ0ID0gMDsKKyAgICB3aGlsZSghKGJpdHMgJiAoMSA8PCBiaXRzU2hpZnQpKSkKKyAgICB7CisgICAgICAgIGJpdHNTaGlmdCsrOworICAgICAgICBpZihiaXRzU2hpZnQgPj0gUlRMODM2N0NfUkVHQklUTEVOR1RIKQorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKyAgICB9CisgICAgdmFsdWVTaGlmdGVkID0gdmFsdWUgPDwgYml0c1NoaWZ0OworCisgICAgaWYodmFsdWVTaGlmdGVkID4gUlRMODM2N0NfUkVHREFUQU1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIHJldFZhbCA9IHNtaV9yZWFkKHJlZywgJnJlZ0RhdGEpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiBSVF9FUlJfU01JOworICAjaWZkZWYgQ09ORklHX1JUTDg2NVhfQ0xFCisgICAgaWYoMHg4MzY3QiA9PSBjbGVEZWJ1Z2dpbmdEaXNwbGF5KQorICAgICAgICBQUklOVCgiUlsweCU0LjR4XT0weCU0LjR4XG4iLCByZWcsIHJlZ0RhdGEpOworICAjZW5kaWYKKworICAgIHJlZ0RhdGEgPSByZWdEYXRhICYgKH5iaXRzKTsKKyAgICByZWdEYXRhID0gcmVnRGF0YSB8ICh2YWx1ZVNoaWZ0ZWQgJiBiaXRzKTsKKworICAgIHJldFZhbCA9IHNtaV93cml0ZShyZWcsIHJlZ0RhdGEpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiBSVF9FUlJfU01JOworICAjaWZkZWYgQ09ORklHX1JUTDg2NVhfQ0xFCisgICAgaWYoMHg4MzY3QiA9PSBjbGVEZWJ1Z2dpbmdEaXNwbGF5KQorICAgICAgICBQUklOVCgiV1sweCU0LjR4XT0weCU0LjR4XG4iLCByZWcsIHJlZ0RhdGEpOworICAjZW5kaWYKKyNlbmRpZgorICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljUmVnQml0cworICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBiaXRzIHZhbHVlIG9mIGEgc3BlY2lmaWVkIHJlZ2lzdGVyCisgKiBJbnB1dDoKKyAqICAgICAgcmVnICAgICAtIHJlZ2lzdGVyJ3MgYWRkcmVzcworICogICAgICBiaXRzICAgIC0gYml0cyBtYXNrIGZvciBzZXR0aW5nCisgKiAgICAgIHZhbHVlICAgLSBiaXRzIHZhbHVlIGZvciBzZXR0aW5nCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKHJ0a191aW50MzIgcmVnLCBydGtfdWludDMyIGJpdHMsIHJ0a191aW50MzIgKnBWYWx1ZSkKK3sKKworI2lmIGRlZmluZWQoUlRLX1g4Nl9BU0lDRFJWKQorCisgICAgcnRrX3VpbnQzMiByZWdEYXRhOworICAgIHJldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIGJpdHNTaGlmdDsKKworICAgIGlmKGJpdHMgPj0gKDEgPDwgUlRMODM2N0NfUkVHQklUTEVOR1RIKSApCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBiaXRzU2hpZnQgPSAwOworICAgIHdoaWxlKCEoYml0cyAmICgxIDw8IGJpdHNTaGlmdCkpKQorICAgIHsKKyAgICAgICAgYml0c1NoaWZ0Kys7CisgICAgICAgIGlmKGJpdHNTaGlmdCA+PSBSVEw4MzY3Q19SRUdCSVRMRU5HVEgpCisgICAgICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworICAgIH0KKworICAgIHJldFZhbCA9IEFjY2Vzc19SZWFkKHJlZywgMiwgJnJlZ0RhdGEpOworICAgIGlmKFRSVUUgIT0gcmV0VmFsKQorICAgICAgICByZXR1cm4gUlRfRVJSX1NNSTsKKworICAgICpwVmFsdWUgPSAocmVnRGF0YSAmIGJpdHMpID4+IGJpdHNTaGlmdDsKKworICAgIGlmKDB4ODM2N0IgPT0gY2xlRGVidWdnaW5nRGlzcGxheSkKKyAgICAgICAgUFJJTlQoIlJbMHglNC40eF09MHglNC40eFxuIiwgcmVnLCByZWdEYXRhKTsKKworI2VsaWYgZGVmaW5lZChDT05GSUdfUlRMODM2N0NfQVNJQ0RSVl9URVNUKQorICAgIHJ0a191aW50MzIgYml0c1NoaWZ0OworCisgICAgaWYoYml0cyA+PSAoMSA8PCBSVEw4MzY3Q19SRUdCSVRMRU5HVEgpICkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGJpdHNTaGlmdCA9IDA7CisgICAgd2hpbGUoIShiaXRzICYgKDEgPDwgYml0c1NoaWZ0KSkpCisgICAgeworICAgICAgICBiaXRzU2hpZnQrKzsKKyAgICAgICAgaWYoYml0c1NoaWZ0ID49IFJUTDgzNjdDX1JFR0JJVExFTkdUSCkKKyAgICAgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisgICAgfQorCisgICAgaWYocmVnID49IENMRV9WSVJUVUFMX1JFR19TSVpFKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgICAqcFZhbHVlID0gKENsZVZpcnR1YWxSZWdbcmVnXSAmIGJpdHMpID4+IGJpdHNTaGlmdDsKKworICAgIGlmKDB4ODM2N0IgPT0gY2xlRGVidWdnaW5nRGlzcGxheSkKKyAgICAgICAgUFJJTlQoIlJbMHglNC40eF09MHglNC40eFxuIiwgcmVnLCBDbGVWaXJ0dWFsUmVnW3JlZ10pOworCisjZWxpZiBkZWZpbmVkKEVNQkVEREVEX1NVUFBPUlQpCisgICAgcnRrX3VpbnQzMiByZWdEYXRhOworICAgIHJ0a191aW50MzIgYml0c1NoaWZ0OworCisgICAgaWYocmVnID4gUlRMODM2N0NfUkVHREFUQU1BWCApCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZihiaXRzID49ICgxVUwgPDwgUlRMODM2N0NfUkVHQklUTEVOR1RIKSApCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBiaXRzU2hpZnQgPSAwOworICAgIHdoaWxlKCEoYml0cyAmICgxVUwgPDwgYml0c1NoaWZ0KSkpCisgICAgeworICAgICAgICBiaXRzU2hpZnQrKzsKKyAgICAgICAgaWYoYml0c1NoaWZ0ID49IFJUTDgzNjdDX1JFR0JJVExFTkdUSCkKKyAgICAgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisgICAgfQorCisgICAgcmVnRGF0YSA9IGdldFJlZyhyZWcpOworICAgICp2YWx1ZSA9IChyZWdEYXRhICYgYml0cykgPj4gYml0c1NoaWZ0OworCisjZWxzZQorICAgIHJ0a191aW50MzIgcmVnRGF0YTsKKyAgICByZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBiaXRzU2hpZnQ7CisKKyAgICBpZihiaXRzPj0gKDE8PFJUTDgzNjdDX1JFR0JJVExFTkdUSCkgKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgYml0c1NoaWZ0ID0gMDsKKyAgICB3aGlsZSghKGJpdHMgJiAoMSA8PCBiaXRzU2hpZnQpKSkKKyAgICB7CisgICAgICAgIGJpdHNTaGlmdCsrOworICAgICAgICBpZihiaXRzU2hpZnQgPj0gUlRMODM2N0NfUkVHQklUTEVOR1RIKQorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKyAgICB9CisKKyAgICByZXRWYWwgPSBzbWlfcmVhZChyZWcsICZyZWdEYXRhKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKSByZXR1cm4gUlRfRVJSX1NNSTsKKworICAgICpwVmFsdWUgPSAocmVnRGF0YSAmIGJpdHMpID4+IGJpdHNTaGlmdDsKKyAgI2lmZGVmIENPTkZJR19SVEw4NjVYX0NMRQorICAgIGlmKDB4ODM2N0IgPT0gY2xlRGVidWdnaW5nRGlzcGxheSkKKyAgICAgICAgUFJJTlQoIlJbMHglNC40eF09MHglNC40eFxuIixyZWcsIHJlZ0RhdGEpOworICAjZW5kaWYKKworI2VuZGlmCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNSZWcKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgY29udGVudCBvZiBhc2ljIHJlZ2lzdGVyCisgKiBJbnB1dDoKKyAqICAgICAgcmVnICAgICAtIHJlZ2lzdGVyJ3MgYWRkcmVzcworICogICAgICB2YWx1ZSAgIC0gVmFsdWUgc2V0dGluZyB0byByZWdpc3RlcgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgVGhlIHZhbHVlIHdpbGwgYmUgc2V0IHRvIEFTSUMgbWFwcGluZyBhZGRyZXNzIG9ubHkgYW5kIGl0IGlzIGFsd2F5cyByZXR1cm4gUlRfRVJSX09LIHdoaWxlIHNldHRpbmcgdW4tbWFwcGluZyBhZGRyZXNzIHJlZ2lzdGVycworICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljUmVnKHJ0a191aW50MzIgcmVnLCBydGtfdWludDMyIHZhbHVlKQoreworI2lmIGRlZmluZWQoUlRLX1g4Nl9BU0lDRFJWKS8qUlRLLUNOU0QyLU5pY2tXdS0yMDA2MTIyMjogZm9yIHg4NiBjb21waWxlKi8KKworICAgIHJldF90IHJldFZhbDsKKworICAgIHJldFZhbCA9IEFjY2Vzc19Xcml0ZShyZWcsMix2YWx1ZSk7CisgICAgaWYoVFJVRSAhPSByZXRWYWwpIHJldHVybiBSVF9FUlJfU01JOworCisgICAgaWYoMHg4MzY3QiA9PSBjbGVEZWJ1Z2dpbmdEaXNwbGF5KQorICAgICAgICBQUklOVCgiV1sweCU0LjR4XT0weCU0LjR4XG4iLHJlZyx2YWx1ZSk7CisKKyNlbGlmIGRlZmluZWQoQ09ORklHX1JUTDgzNjdDX0FTSUNEUlZfVEVTVCkKKworICAgIC8qTUlCcyBlbXVsYXRpbmcqLworICAgIGlmKHJlZyA9PSBSVEw4MzY3Q19SRUdfTUlCX0FERFJFU1MpCisgICAgeworICAgICAgICBDbGVWaXJ0dWFsUmVnW1JUTDgzNjdDX01JQl9DT1VOVEVSX0JBU0VfUkVHXSA9IDB4MTsKKyAgICAgICAgQ2xlVmlydHVhbFJlZ1tSVEw4MzY3Q19NSUJfQ09VTlRFUl9CQVNFX1JFRysxXSA9IDB4MjsKKyAgICAgICAgQ2xlVmlydHVhbFJlZ1tSVEw4MzY3Q19NSUJfQ09VTlRFUl9CQVNFX1JFRysyXSA9IDB4MzsKKyAgICAgICAgQ2xlVmlydHVhbFJlZ1tSVEw4MzY3Q19NSUJfQ09VTlRFUl9CQVNFX1JFRyszXSA9IDB4NDsKKyAgICB9CisKKyAgICBpZihyZWcgPj0gQ0xFX1ZJUlRVQUxfUkVHX1NJWkUpCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgQ2xlVmlydHVhbFJlZ1tyZWddID0gdmFsdWU7CisKKyAgICBpZigweDgzNjdCID09IGNsZURlYnVnZ2luZ0Rpc3BsYXkpCisgICAgICAgIFBSSU5UKCJXWzB4JTQuNHhdPTB4JTQuNHhcbiIscmVnLENsZVZpcnR1YWxSZWdbcmVnXSk7CisKKyNlbGlmIGRlZmluZWQoRU1CRURERURfU1VQUE9SVCkKKyAgICBpZihyZWcgPiBSVEw4MzY3Q19SRUdEQVRBTUFYIHx8IHZhbHVlID4gUlRMODM2N0NfUkVHREFUQU1BWCApCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBzZXRSZWcocmVnLCB2YWx1ZSk7CisKKyNlbHNlCisgICAgcmV0X3QgcmV0VmFsOworCisgICAgcmV0VmFsID0gc21pX3dyaXRlKHJlZywgdmFsdWUpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiBSVF9FUlJfU01JOworICAjaWZkZWYgQ09ORklHX1JUTDg2NVhfQ0xFCisgICAgaWYoMHg4MzY3QiA9PSBjbGVEZWJ1Z2dpbmdEaXNwbGF5KQorICAgICAgICBQUklOVCgiV1sweCU0LjR4XT0weCU0LjR4XG4iLHJlZyx2YWx1ZSk7CisgICNlbmRpZgorCisjZW5kaWYKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljUmVnCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGNvbnRlbnQgb2YgYXNpYyByZWdpc3RlcgorICogSW5wdXQ6CisgKiAgICAgIHJlZyAgICAgLSByZWdpc3RlcidzIGFkZHJlc3MKKyAqICAgICAgdmFsdWUgICAtIFZhbHVlIHNldHRpbmcgdG8gcmVnaXN0ZXIKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIFZhbHVlIDB4MDAwMCB3aWxsIGJlIHJldHVybmVkIGZvciBBU0lDIHVuLW1hcHBpbmcgYWRkcmVzcworICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljUmVnKHJ0a191aW50MzIgcmVnLCBydGtfdWludDMyICpwVmFsdWUpCit7CisKKyNpZiBkZWZpbmVkKFJUS19YODZfQVNJQ0RSVikKKworICAgIHJ0a191aW50MzIgcmVnRGF0YTsKKyAgICByZXRfdCByZXRWYWw7CisKKyAgICByZXRWYWwgPSBBY2Nlc3NfUmVhZChyZWcsIDIsICZyZWdEYXRhKTsKKyAgICBpZihUUlVFICE9IHJldFZhbCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9TTUk7CisKKyAgICAqcFZhbHVlID0gcmVnRGF0YTsKKworICAgIGlmKDB4ODM2N0IgPT0gY2xlRGVidWdnaW5nRGlzcGxheSkKKyAgICAgICAgUFJJTlQoIlJbMHglNC40eF09MHglNC40eFxuIiwgcmVnLCByZWdEYXRhKTsKKworI2VsaWYgZGVmaW5lZChDT05GSUdfUlRMODM2N0NfQVNJQ0RSVl9URVNUKQorICAgIGlmKHJlZyA+PSBDTEVfVklSVFVBTF9SRUdfU0laRSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICAqcFZhbHVlID0gQ2xlVmlydHVhbFJlZ1tyZWddOworCisgICAgaWYoMHg4MzY3QiA9PSBjbGVEZWJ1Z2dpbmdEaXNwbGF5KQorICAgICAgICBQUklOVCgiUlsweCU0LjR4XT0weCU0LjR4XG4iLCByZWcsIENsZVZpcnR1YWxSZWdbcmVnXSk7CisKKyNlbGlmIGRlZmluZWQoRU1CRURERURfU1VQUE9SVCkKKyAgICBpZihyZWcgPiBSVEw4MzY3Q19SRUdEQVRBTUFYICApCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICAqdmFsdWUgPSBnZXRSZWcocmVnKTsKKworI2Vsc2UKKyAgICBydGtfdWludDMyIHJlZ0RhdGE7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgcmV0VmFsID0gc21pX3JlYWQocmVnLCAmcmVnRGF0YSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9TTUk7CisKKyAgICAqcFZhbHVlID0gcmVnRGF0YTsKKyAgI2lmZGVmIENPTkZJR19SVEw4NjVYX0NMRQorICAgIGlmKDB4ODM2N0IgPT0gY2xlRGVidWdnaW5nRGlzcGxheSkKKyAgICAgICAgUFJJTlQoIlJbMHglNC40eF09MHglNC40eFxuIiwgcmVnLCByZWdEYXRhKTsKKyAgI2VuZGlmCisKKyNlbmRpZgorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfYWNsLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9hY2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWNjZDk3Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfYWNsLmMKQEAgLTAsMCArMSwxMTczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNzYzMDYgJAorICogJERhdGU6IDIwMTctMDMtMDggMTU6MTM6NTggKzA4MDAgKOmAseS4iSwgMDgg5LiJ5pyIIDIwMTcpICQKKyAqCisgKiBQdXJwb3NlIDogUlRMODM2N0Mgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJIGZvciBSVEw4MzY3QworICogRmVhdHVyZSA6IEFDTCByZWxhdGVkIGZ1bmN0aW9uIGRyaXZlcnMKKyAqCisgKi8KKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2X2FjbC5oPgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19SVEw4MzY3Q19BU0lDRFJWX1RFU1QpCitydGw4MzY3Y19hY2xydWxlc21pIFJ0bDgzNzBzVmlydHVhbEFjbFJ1bGVUYWJsZVtSVEw4MzY3Q19BQ0xSVUxFTk9dOworcnRrX3VpbnQxNiBSdGw4Mzcwc1ZpcnR1YWxBY2xBY3RUYWJsZVtSVEw4MzY3Q19BQ0xSVUxFTk9dW1JUTDgzNjdDX0FDTF9BQ1RfVEFCTEVfTEVOXTsKKyNlbmRpZgorCisvKgorICAgIEV4Y2hhbmdlIHN0cnVjdHVyZSB0eXBlIGRlZmluZSB3aXRoIE1NSSBhbmQgU01JCisqLworc3RhdGljIHZvaWQgX3J0bDgzNjdjX2FjbFJ1bGVTdFNtaTJVc2VyKCBydGw4MzY3Y19hY2xydWxlICpwQWNsVXNlciwgcnRsODM2N2NfYWNscnVsZXNtaSAqcEFjbFNtaSkKK3sKKyAgICBydGtfdWludDggKmNhcmVfcHRyLCAqZGF0YV9wdHI7CisgICAgcnRrX3VpbnQ4IGNhcmVfdG1wLCBkYXRhX3RtcDsKKyAgICBydGtfdWludDMyIGk7CisKKyAgICBwQWNsVXNlci0+ZGF0YV9iaXRzLmFjdGl2ZV9wb3J0bXNrID0gKCgocEFjbFNtaS0+ZGF0YV9iaXRzX2V4dC5ydWxlX2luZm8gPj4gMSkgJiAweDAwMDcpIDw8IDgpIHwgKChwQWNsU21pLT5kYXRhX2JpdHMucnVsZV9pbmZvID4+IDgpICYgMHgwMEZGKTsKKyAgICBwQWNsVXNlci0+ZGF0YV9iaXRzLnR5cGUgPSAocEFjbFNtaS0+ZGF0YV9iaXRzLnJ1bGVfaW5mbyAmIDB4MDAwNyk7CisgICAgcEFjbFVzZXItPmRhdGFfYml0cy50YWdfZXhpc3QgPSAocEFjbFNtaS0+ZGF0YV9iaXRzLnJ1bGVfaW5mbyAmIDB4MDBGOCkgPj4gMzsKKworICAgIGNhcmVfcHRyID0gKHJ0a191aW50OCopJnBBY2xTbWktPmNhcmVfYml0czsKKyAgICBkYXRhX3B0ciA9IChydGtfdWludDgqKSZwQWNsU21pLT5kYXRhX2JpdHM7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgYWNsX3J1bGVfc21pX3N0KTsgaSsrKQorICAgIHsKKyAgICAgICAgY2FyZV90bXAgPSAqKGNhcmVfcHRyICsgaSkgXiAoKihkYXRhX3B0ciArIGkpKTsKKyAgICAgICAgZGF0YV90bXAgPSAqKGRhdGFfcHRyICsgaSk7CisKKyAgICAgICAgKihjYXJlX3B0ciArIGkpID0gY2FyZV90bXA7CisgICAgICAgICooZGF0YV9wdHIgKyBpKSA9IGRhdGFfdG1wOworICAgIH0KKworICAgIGNhcmVfcHRyID0gKHJ0a191aW50OCopJnBBY2xTbWktPmNhcmVfYml0c19leHQ7CisgICAgZGF0YV9wdHIgPSAocnRrX3VpbnQ4KikmcEFjbFNtaS0+ZGF0YV9iaXRzX2V4dDsKKyAgICBjYXJlX3RtcCA9ICgqY2FyZV9wdHIpIF4gKCpkYXRhX3B0cik7CisgICAgZGF0YV90bXAgPSAoKmRhdGFfcHRyKTsKKyAgICAqY2FyZV9wdHIgPSBjYXJlX3RtcDsKKyAgICAqZGF0YV9wdHIgPSBkYXRhX3RtcDsKKworICAgIGZvcihpID0gMDsgaSA8IFJUTDgzNjdDX0FDTFJVTEVGSUVMRE5POyBpKyspCisgICAgICAgIHBBY2xVc2VyLT5kYXRhX2JpdHMuZmllbGRbaV0gPSBwQWNsU21pLT5kYXRhX2JpdHMuZmllbGRbaV07CisKKyAgICBwQWNsVXNlci0+dmFsaWQgPSBwQWNsU21pLT52YWxpZDsKKworICAgIHBBY2xVc2VyLT5jYXJlX2JpdHMuYWN0aXZlX3BvcnRtc2sgPSAoKChwQWNsU21pLT5jYXJlX2JpdHNfZXh0LnJ1bGVfaW5mbyA+PiAxKSAmIDB4MDAwNykgPDwgOCkgfCAoKHBBY2xTbWktPmNhcmVfYml0cy5ydWxlX2luZm8gPj4gOCkgJiAweDAwRkYpOworICAgIHBBY2xVc2VyLT5jYXJlX2JpdHMudHlwZSA9IChwQWNsU21pLT5jYXJlX2JpdHMucnVsZV9pbmZvICYgMHgwMDA3KTsKKyAgICBwQWNsVXNlci0+Y2FyZV9iaXRzLnRhZ19leGlzdCA9IChwQWNsU21pLT5jYXJlX2JpdHMucnVsZV9pbmZvICYgMHgwMEY4KSA+PiAzOworCisgICAgZm9yKGkgPSAwOyBpIDwgUlRMODM2N0NfQUNMUlVMRUZJRUxETk87IGkrKykKKyAgICAgICAgcEFjbFVzZXItPmNhcmVfYml0cy5maWVsZFtpXSA9IHBBY2xTbWktPmNhcmVfYml0cy5maWVsZFtpXTsKK30KKworLyoKKyAgICBFeGNoYW5nZSBzdHJ1Y3R1cmUgdHlwZSBkZWZpbmUgd2l0aCBNTUkgYW5kIFNNSQorKi8KK3N0YXRpYyB2b2lkIF9ydGw4MzY3Y19hY2xSdWxlU3RVc2VyMlNtaShydGw4MzY3Y19hY2xydWxlICpwQWNsVXNlciwgcnRsODM2N2NfYWNscnVsZXNtaSAqcEFjbFNtaSkKK3sKKyAgICBydGtfdWludDggKmNhcmVfcHRyLCAqZGF0YV9wdHI7CisgICAgcnRrX3VpbnQ4IGNhcmVfdG1wLCBkYXRhX3RtcDsKKyAgICBydGtfdWludDMyIGk7CisKKyAgICBwQWNsU21pLT5kYXRhX2JpdHNfZXh0LnJ1bGVfaW5mbyA9ICgocEFjbFVzZXItPmRhdGFfYml0cy5hY3RpdmVfcG9ydG1zayA+PiA4KSAmIDB4NykgPDwgMTsKKyAgICBwQWNsU21pLT5kYXRhX2JpdHMucnVsZV9pbmZvID0gKChwQWNsVXNlci0+ZGF0YV9iaXRzLmFjdGl2ZV9wb3J0bXNrICYgMHhmZikgPDwgOCkgfCAoKHBBY2xVc2VyLT5kYXRhX2JpdHMudGFnX2V4aXN0ICYgMHgxRikgPDwgMykgfCAocEFjbFVzZXItPmRhdGFfYml0cy50eXBlICYgMHgwNyk7CisKKyAgICBmb3IoaSA9IDA7aSA8IFJUTDgzNjdDX0FDTFJVTEVGSUVMRE5POyBpKyspCisgICAgICAgIHBBY2xTbWktPmRhdGFfYml0cy5maWVsZFtpXSA9IHBBY2xVc2VyLT5kYXRhX2JpdHMuZmllbGRbaV07CisKKyAgICBwQWNsU21pLT52YWxpZCA9IHBBY2xVc2VyLT52YWxpZDsKKworICAgIHBBY2xTbWktPmNhcmVfYml0c19leHQucnVsZV9pbmZvID0gKChwQWNsVXNlci0+Y2FyZV9iaXRzLmFjdGl2ZV9wb3J0bXNrID4+IDgpICYgMHg3KSA8PCAxOworICAgIHBBY2xTbWktPmNhcmVfYml0cy5ydWxlX2luZm8gPSAoKHBBY2xVc2VyLT5jYXJlX2JpdHMuYWN0aXZlX3BvcnRtc2sgJiAweGZmKSA8PCA4KSB8ICgocEFjbFVzZXItPmNhcmVfYml0cy50YWdfZXhpc3QgJiAweDFGKSA8PCAzKSB8IChwQWNsVXNlci0+Y2FyZV9iaXRzLnR5cGUgJiAweDA3KTsKKworICAgIGZvcihpID0gMDsgaSA8IFJUTDgzNjdDX0FDTFJVTEVGSUVMRE5POyBpKyspCisgICAgICAgIHBBY2xTbWktPmNhcmVfYml0cy5maWVsZFtpXSA9IHBBY2xVc2VyLT5jYXJlX2JpdHMuZmllbGRbaV07CisKKyAgICBjYXJlX3B0ciA9IChydGtfdWludDgqKSZwQWNsU21pLT5jYXJlX2JpdHM7CisgICAgZGF0YV9wdHIgPSAocnRrX3VpbnQ4KikmcEFjbFNtaS0+ZGF0YV9iaXRzOworCisgICAgZm9yICggaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IGFjbF9ydWxlX3NtaV9zdCk7IGkrKykKKyAgICB7CisgICAgICAgIGNhcmVfdG1wID0gKihjYXJlX3B0ciArIGkpICYgfigqKGRhdGFfcHRyICsgaSkpOworICAgICAgICBkYXRhX3RtcCA9ICooY2FyZV9wdHIgKyBpKSAmICooZGF0YV9wdHIgKyBpKTsKKworICAgICAgICAqKGNhcmVfcHRyICsgaSkgPSBjYXJlX3RtcDsKKyAgICAgICAgKihkYXRhX3B0ciArIGkpID0gZGF0YV90bXA7CisgICAgfQorCisgICAgY2FyZV9wdHIgPSAocnRrX3VpbnQ4KikmcEFjbFNtaS0+Y2FyZV9iaXRzX2V4dDsKKyAgICBkYXRhX3B0ciA9IChydGtfdWludDgqKSZwQWNsU21pLT5kYXRhX2JpdHNfZXh0OworICAgIGNhcmVfdG1wID0gKmNhcmVfcHRyICYgfigqZGF0YV9wdHIpOworICAgIGRhdGFfdG1wID0gKmNhcmVfcHRyICYgKmRhdGFfcHRyOworCisgICAgKmNhcmVfcHRyID0gY2FyZV90bXA7CisgICAgKmRhdGFfcHRyID0gZGF0YV90bXA7Cit9CisKKy8qCisgICAgRXhjaGFuZ2Ugc3RydWN0dXJlIHR5cGUgZGVmaW5lIHdpdGggTU1JIGFuZCBTTUkKKyovCitzdGF0aWMgdm9pZCBfcnRsODM2N2NfYWNsQWN0U3RTbWkyVXNlcihydGw4MzY3Y19hY2xfYWN0X3QgKnBBY2xVc2VyLCBydGtfdWludDE2ICpwQWNsU21pKQoreworICAgIHBBY2xVc2VyLT5jYWN0ID0gKHBBY2xTbWlbMF0gJiAweDAwQzApID4+IDY7CisgICAgcEFjbFVzZXItPmN2aWR4X2NhY3QgPSAocEFjbFNtaVswXSAmIDB4MDAzRikgfCAoKChwQWNsU21pWzNdICYgMHgwMDA4KSA+PiAzKSA8PCA2KTsKKworICAgIHBBY2xVc2VyLT5zYWN0ID0gKHBBY2xTbWlbMF0gJiAweEMwMDApID4+IDE0OworICAgIHBBY2xVc2VyLT5zdmlkeF9zYWN0ID0gKChwQWNsU21pWzBdICYgMHgzRjAwKSA+PiA4KSB8ICgoKHBBY2xTbWlbM10gJiAweDAwMTApID4+IDQpIDw8IDYpOworCisgICAgcEFjbFVzZXItPmFjbG1ldGVyaWR4ID0gKHBBY2xTbWlbMV0gJiAweDAwM0YpIHwgKCgocEFjbFNtaVszXSAmIDB4MDAyMCkgPj4gNSkgPDwgNik7CisKKyAgICBwQWNsVXNlci0+ZndkYWN0ID0gKHBBY2xTbWlbMV0gJiAweEMwMDApID4+IDE0OworICAgIHBBY2xVc2VyLT5md2RwbWFzayA9ICgocEFjbFNtaVsxXSAmIDB4M0ZDMCkgPj4gNikgfCAoKChwQWNsU21pWzNdICYgMHgwMUMwKSA+PiA2KSA8PCA4KTsKKworICAgIHBBY2xVc2VyLT5wcmlhY3QgPSAocEFjbFNtaVsyXSAmIDB4MDBDMCkgPj4gNjsKKyAgICBwQWNsVXNlci0+cHJpZHggPSAocEFjbFNtaVsyXSAmIDB4MDAzRikgfCAoKChwQWNsU21pWzNdICYgMHgwMjAwKSA+PiA5KSA8PCA2KTsKKworICAgIHBBY2xVc2VyLT5hY2xpbnQgPSAocEFjbFNtaVsyXSAmIDB4MjAwMCkgPj4gMTM7CisgICAgcEFjbFVzZXItPmdwaW9fZW4gPSAocEFjbFNtaVsyXSAmIDB4MTAwMCkgPj4gMTI7CisgICAgcEFjbFVzZXItPmdwaW9fcGluID0gKHBBY2xTbWlbMl0gJiAweDBGMDApID4+IDg7CisKKyAgICBwQWNsVXNlci0+Y2FjdF9leHQgPSAocEFjbFNtaVsyXSAmIDB4QzAwMCkgPj4gMTQ7CisgICAgcEFjbFVzZXItPnRhZ19mbXQgPSAocEFjbFNtaVszXSAmIDB4MDAwMyk7CisgICAgcEFjbFVzZXItPmZ3ZGFjdF9leHQgPSAocEFjbFNtaVszXSAmIDB4MDAwNCkgPj4gMjsKK30KKworLyoKKyAgICBFeGNoYW5nZSBzdHJ1Y3R1cmUgdHlwZSBkZWZpbmUgd2l0aCBNTUkgYW5kIFNNSQorKi8KK3N0YXRpYyB2b2lkIF9ydGw4MzY3Y19hY2xBY3RTdFVzZXIyU21pKHJ0bDgzNjdjX2FjbF9hY3RfdCAqcEFjbFVzZXIsIHJ0a191aW50MTYgKnBBY2xTbWkpCit7CisgICAgcEFjbFNtaVswXSB8PSAocEFjbFVzZXItPmN2aWR4X2NhY3QgJiAweDAwM0YpOworICAgIHBBY2xTbWlbMF0gfD0gKHBBY2xVc2VyLT5jYWN0ICYgMHgwMDAzKSA8PCA2OworICAgIHBBY2xTbWlbMF0gfD0gKHBBY2xVc2VyLT5zdmlkeF9zYWN0ICYgMHgwMDNGKSA8PCA4OworICAgIHBBY2xTbWlbMF0gfD0gKHBBY2xVc2VyLT5zYWN0ICYgMHgwMDAzKSA8PCAxNDsKKworICAgIHBBY2xTbWlbMV0gfD0gKHBBY2xVc2VyLT5hY2xtZXRlcmlkeCAmIDB4MDAzRik7CisgICAgcEFjbFNtaVsxXSB8PSAocEFjbFVzZXItPmZ3ZHBtYXNrICYgMHgwMEZGKSA8PCA2OworICAgIHBBY2xTbWlbMV0gfD0gKHBBY2xVc2VyLT5md2RhY3QgJiAweDAwMDMpIDw8IDE0OworCisgICAgcEFjbFNtaVsyXSB8PSAocEFjbFVzZXItPnByaWR4ICYgMHgwMDNGKTsKKyAgICBwQWNsU21pWzJdIHw9IChwQWNsVXNlci0+cHJpYWN0ICYgMHgwMDAzKSA8PCA2OworICAgIHBBY2xTbWlbMl0gfD0gKHBBY2xVc2VyLT5ncGlvX3BpbiAmIDB4MDAwRikgPDwgODsKKyAgICBwQWNsU21pWzJdIHw9IChwQWNsVXNlci0+Z3Bpb19lbiAmIDB4MDAwMSkgPDwgMTI7CisgICAgcEFjbFNtaVsyXSB8PSAocEFjbFVzZXItPmFjbGludCAmIDB4MDAwMSkgPDwgMTM7CisgICAgcEFjbFNtaVsyXSB8PSAocEFjbFVzZXItPmNhY3RfZXh0ICYgMHgwMDAzKSA8PCAxNDsKKworICAgIHBBY2xTbWlbM10gfD0gKHBBY2xVc2VyLT50YWdfZm10ICYgMHgwMDAzKTsKKyAgICBwQWNsU21pWzNdIHw9IChwQWNsVXNlci0+ZndkYWN0X2V4dCAmIDB4MDAwMSkgPDwgMjsKKyAgICBwQWNsU21pWzNdIHw9ICgocEFjbFVzZXItPmN2aWR4X2NhY3QgJiAweDAwNDApID4+IDYpIDw8IDM7CisgICAgcEFjbFNtaVszXSB8PSAoKHBBY2xVc2VyLT5zdmlkeF9zYWN0ICYgMHgwMDQwKSA+PiA2KSA8PCA0OworICAgIHBBY2xTbWlbM10gfD0gKChwQWNsVXNlci0+YWNsbWV0ZXJpZHggJiAweDAwNDApID4+IDYpIDw8IDU7CisgICAgcEFjbFNtaVszXSB8PSAoKHBBY2xVc2VyLT5md2RwbWFzayAmIDB4MDcwMCkgPj4gOCkgPDwgNjsKKyAgICBwQWNsU21pWzNdIHw9ICgocEFjbFVzZXItPnByaWR4ICYgMHgwMDQwKSA+PiA2KSA8PCA5OworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljQWNsCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHBvcnQgYWNsIGZ1bmN0aW9uIGVuYWJsZS9kaXNhYmxlCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjEwKQorICogICAgICBlbmFibGVkIC0gMTogZW5hYmxlZCwgMDogZGlzYWJsZWQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljQWNsKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBlbmFibGVkKQoreworICAgIGlmKHBvcnQgPiBSVEw4MzY3Q19QT1JUSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX0FDTF9FTkFCTEVfUkVHLCBwb3J0LCBlbmFibGVkKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNBY2wKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcG9ydCBhY2wgZnVuY3Rpb24gZW5hYmxlL2Rpc2FibGUKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+MTApCisgKiAgICAgIGVuYWJsZWQgLSAxOiBlbmFibGVkLCAwOiBkaXNhYmxlZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNBY2wocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyKiBwRW5hYmxlZCkKK3sKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVElETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19BQ0xfRU5BQkxFX1JFRywgcG9ydCwgcEVuYWJsZWQpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0FjbFVubWF0Y2hlZFBlcm1pdAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwb3J0IGFjbCBmdW5jdGlvbiB1bm1hdGNoZWQgcGVybWl0IGFjdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH4xMCkKKyAqICAgICAgZW5hYmxlZCAtIDE6IGVuYWJsZWQsIDA6IGRpc2FibGVkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0FjbFVubWF0Y2hlZFBlcm1pdChydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgZW5hYmxlZCkKK3sKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVElETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19BQ0xfVU5NQVRDSF9QRVJNSVRfUkVHLCBwb3J0LCBlbmFibGVkKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNBY2xVbm1hdGNoZWRQZXJtaXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcG9ydCBhY2wgZnVuY3Rpb24gdW5tYXRjaGVkIHBlcm1pdCBhY3Rpb24KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+MTApCisgKiAgICAgIGVuYWJsZWQgLSAxOiBlbmFibGVkLCAwOiBkaXNhYmxlZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNBY2xVbm1hdGNoZWRQZXJtaXQocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyKiBwRW5hYmxlZCkKK3sKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVElETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19BQ0xfVU5NQVRDSF9QRVJNSVRfUkVHLCBwb3J0LCBwRW5hYmxlZCk7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNBY2xSdWxlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IGFjbCBydWxlIGNvbnRlbnQKKyAqIElucHV0OgorICogICAgICBpbmRleCAgIC0gQUNMIHJ1bGUgaW5kZXggKDAtOTUpIG9mIDk2IEFDTCBydWxlcworICogICAgICBwQWNsUnVsZSAtIEFDTCBydWxlIHN0dWN0dXJlIGZvciBzZXR0aW5nCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFICAgICAtIEludmFsaWQgQUNMIHJ1bGUgaW5kZXggKDAtOTUpCisgKiBOb3RlOgorICogICAgICBTeXN0ZW0gc3VwcG9ydGVkIDk1IHNoYXJlZCAyODktYml0IEFDTCBpbmdyZXNzIHJ1bGUuIEluZGV4IHdhcyBhdmFpbGFibGUgYXQgcmFuZ2UgMC05NSBvbmx5LgorICogICAgICBJZiBzb2Z0d2FyZSB3YW50IHRvIG1vZGlmeSBBQ0wgcnVsZSwgdGhlIEFDTCBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZSBhdCBmaXJzdCBvciB1bnNwZWNpZnkKKyAqICAgICAgYWNsIGFjdGlvbiB3aWxsIGJlIGV4ZWN1dGVkLgorICogICAgICBPbmUgQUNMIHJ1bGUgc3RydWN0dXJlIGhhcyB0aHJlZSBwYXJ0cyBzZXR0aW5nOgorICogICAgICBCaXQgMC0xNDcgICAgICAgRGF0YSBCaXRzIG9mIHRoaXMgUnVsZQorICogICAgICBCaXQgMTQ4ICAgICBWYWxpZCBCaXQKKyAqICAgICAgQml0IDE0OS0yOTYgQ2FyZSBCaXRzIG9mIHRoaXMgUnVsZQorICogICAgICBUaGVyZSBhcmUgZm91ciBraW5kcyBvZiBmaWVsZCBpbiBEYXRhIEJpdHMgYW5kIENhcmUgQml0czogQWN0aXZlIFBvcnRtYXNrLCBUeXBlLCBUYWcgRXhpc3QsIGFuZCA4IGZpZWxkcworICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljQWNsUnVsZShydGtfdWludDMyIGluZGV4LCBydGw4MzY3Y19hY2xydWxlKiBwQWNsUnVsZSkKK3sKKyAgICBydGw4MzY3Y19hY2xydWxlc21pIGFjbFJ1bGVTbWk7CisgICAgcnRrX3VpbnQxNiogdGFibGVBZGRyOworICAgIHJ0a191aW50MzIgcmVnQWRkcjsKKyAgICBydGtfdWludDMyICByZWdEYXRhOworICAgIHJ0a191aW50MzIgaTsKKyAgICByZXRfdCByZXRWYWw7CisKKyAgICBpZihpbmRleCA+IFJUTDgzNjdDX0FDTFJVTEVNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgbWVtc2V0KCZhY2xSdWxlU21pLCAweDAwLCBzaXplb2YocnRsODM2N2NfYWNscnVsZXNtaSkpOworCisgICAgX3J0bDgzNjdjX2FjbFJ1bGVTdFVzZXIyU21pKHBBY2xSdWxlLCAmYWNsUnVsZVNtaSk7CisKKyAgICAvKiBXcml0ZSB2YWxpZCBiaXQgPSAwICovCisgICAgcmVnQWRkciA9IFJUTDgzNjdDX1RBQkxFX0FDQ0VTU19BRERSX1JFRzsKKyAgICBpZihpbmRleCA+PSA2NCkKKyAgICAgICAgcmVnRGF0YSA9IFJUTDgzNjdDX0FDTFJVTEVUQkFERFIyKERBVEFCSVRTLCBpbmRleCk7CisgICAgZWxzZQorICAgICAgICByZWdEYXRhID0gUlRMODM2N0NfQUNMUlVMRVRCQUREUihEQVRBQklUUywgaW5kZXgpOworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcocmVnQWRkcixyZWdEYXRhKTsKKyAgICBpZihyZXRWYWwgIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19UQUJMRV9BQ0NFU1NfV1JEQVRBX1JFRyhSVEw4MzY3Q19BQ0xSVUxFVEJMRU4pLCAweDEsIDApOworICAgIGlmKHJldFZhbCAhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19UQUJMRV9BQ0NFU1NfQ1RSTF9SRUc7CisgICAgcmVnRGF0YSA9IFJUTDgzNjdDX1RBQkxFX0FDQ0VTU19SRUdfREFUQShUQl9PUF9XUklURSwgVEJfVEFSR0VUX0FDTFJVTEUpOworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcocmVnQWRkciwgcmVnRGF0YSk7CisgICAgaWYocmV0VmFsICE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisKKworICAgIC8qIFdyaXRlIEFDU19BRFIgcmVnaXN0ZXIgKi8KKyAgICByZWdBZGRyID0gUlRMODM2N0NfVEFCTEVfQUNDRVNTX0FERFJfUkVHOworICAgIGlmKGluZGV4ID49IDY0KQorICAgICAgICByZWdEYXRhID0gUlRMODM2N0NfQUNMUlVMRVRCQUREUjIoQ0FSRUJJVFMsIGluZGV4KTsKKyAgICBlbHNlCisgICAgICAgIHJlZ0RhdGEgPSBSVEw4MzY3Q19BQ0xSVUxFVEJBRERSKENBUkVCSVRTLCBpbmRleCk7CisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhyZWdBZGRyLCByZWdEYXRhKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgLyogV3JpdGUgQ2FyZSBCaXRzIHRvIEFDU19EQVRBIHJlZ2lzdGVycyAqLworICAgICB0YWJsZUFkZHIgPSAocnRrX3VpbnQxNiopJmFjbFJ1bGVTbWkuY2FyZV9iaXRzOworICAgICByZWdBZGRyID0gUlRMODM2N0NfVEFCTEVfQUNDRVNTX1dSREFUQV9CQVNFOworCisgICAgZm9yKGkgPSAwOyBpIDwgUlRMODM2N0NfQUNMUlVMRVRCTEVOOyBpKyspCisgICAgeworICAgICAgICByZWdEYXRhID0gKnRhYmxlQWRkcjsKKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhyZWdBZGRyLCByZWdEYXRhKTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgcmVnQWRkcisrOworICAgICAgICB0YWJsZUFkZHIrKzsKKyAgICB9CisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfVEFCTEVfQUNDRVNTX1dSREFUQV9SRUcoUlRMODM2N0NfQUNMUlVMRVRCTEVOKSwgKDB4MDAwNyA8PCAxKSwgKGFjbFJ1bGVTbWkuY2FyZV9iaXRzX2V4dC5ydWxlX2luZm8gPj4gMSkgJiAweDAwMDcpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAvKiBXcml0ZSBBQ1NfQ01EIHJlZ2lzdGVyICovCisgICAgcmVnQWRkciA9IFJUTDgzNjdDX1RBQkxFX0FDQ0VTU19DVFJMX1JFRzsKKyAgICByZWdEYXRhID0gUlRMODM2N0NfVEFCTEVfQUNDRVNTX1JFR19EQVRBKFRCX09QX1dSSVRFLCBUQl9UQVJHRVRfQUNMUlVMRSk7CisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMocmVnQWRkciwgUlRMODM2N0NfVEFCTEVfVFlQRV9NQVNLIHwgUlRMODM2N0NfQ09NTUFORF9UWVBFX01BU0sscmVnRGF0YSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworCisKKyAgICAvKiBXcml0ZSBBQ1NfQURSIHJlZ2lzdGVyIGZvciBkYXRhIGJpdHMgKi8KKyAgICByZWdBZGRyID0gUlRMODM2N0NfVEFCTEVfQUNDRVNTX0FERFJfUkVHOworICAgIGlmKGluZGV4ID49IDY0KQorICAgICAgICByZWdEYXRhID0gUlRMODM2N0NfQUNMUlVMRVRCQUREUjIoREFUQUJJVFMsIGluZGV4KTsKKyAgICBlbHNlCisgICAgICAgIHJlZ0RhdGEgPSBSVEw4MzY3Q19BQ0xSVUxFVEJBRERSKERBVEFCSVRTLCBpbmRleCk7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKHJlZ0FkZHIsIHJlZ0RhdGEpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAvKiBXcml0ZSBEYXRhIEJpdHMgdG8gQUNTX0RBVEEgcmVnaXN0ZXJzICovCisgICAgIHRhYmxlQWRkciA9IChydGtfdWludDE2KikmYWNsUnVsZVNtaS5kYXRhX2JpdHM7CisgICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19UQUJMRV9BQ0NFU1NfV1JEQVRBX0JBU0U7CisKKyAgICBmb3IoaSA9IDA7IGkgPCBSVEw4MzY3Q19BQ0xSVUxFVEJMRU47IGkrKykKKyAgICB7CisgICAgICAgIHJlZ0RhdGEgPSAqdGFibGVBZGRyOworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKHJlZ0FkZHIsIHJlZ0RhdGEpOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICByZWdBZGRyKys7CisgICAgICAgIHRhYmxlQWRkcisrOworICAgIH0KKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfVEFCTEVfQUNDRVNTX1dSREFUQV9SRUcoUlRMODM2N0NfQUNMUlVMRVRCTEVOKSwgMCwgYWNsUnVsZVNtaS52YWxpZCk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19UQUJMRV9BQ0NFU1NfV1JEQVRBX1JFRyhSVEw4MzY3Q19BQ0xSVUxFVEJMRU4pLCAoMHgwMDA3IDw8IDEpLCAoYWNsUnVsZVNtaS5kYXRhX2JpdHNfZXh0LnJ1bGVfaW5mbyA+PiAxKSAmIDB4MDAwNyk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIC8qIFdyaXRlIEFDU19DTUQgcmVnaXN0ZXIgZm9yIGNhcmUgYml0cyovCisgICAgcmVnQWRkciA9IFJUTDgzNjdDX1RBQkxFX0FDQ0VTU19DVFJMX1JFRzsKKyAgICByZWdEYXRhID0gUlRMODM2N0NfVEFCTEVfQUNDRVNTX1JFR19EQVRBKFRCX09QX1dSSVRFLCBUQl9UQVJHRVRfQUNMUlVMRSk7CisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMocmVnQWRkciwgUlRMODM2N0NfVEFCTEVfVFlQRV9NQVNLIHwgUlRMODM2N0NfQ09NTUFORF9UWVBFX01BU0ssIHJlZ0RhdGEpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyNpZmRlZiBDT05GSUdfUlRMODM2N0NfQVNJQ0RSVl9URVNUCisgICAgbWVtY3B5KCZSdGw4Mzcwc1ZpcnR1YWxBY2xSdWxlVGFibGVbaW5kZXhdLCAmYWNsUnVsZVNtaSwgc2l6ZW9mKHJ0bDgzNjdjX2FjbHJ1bGVzbWkpKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNBY2xSdWxlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGFjbCBydWxlIGNvbnRlbnQKKyAqIElucHV0OgorICogICAgICBpbmRleCAgIC0gQUNMIHJ1bGUgaW5kZXggKDAtNjMpIG9mIDY0IEFDTCBydWxlcworICogICAgICBwQWNsUnVsZSAtIEFDTCBydWxlIHN0dWN0dXJlIGZvciBzZXR0aW5nCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFICAgICAtIEludmFsaWQgQUNMIHJ1bGUgaW5kZXggKDAtNjMpCisgICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljQWNsUnVsZShydGtfdWludDMyIGluZGV4LCBydGw4MzY3Y19hY2xydWxlICpwQWNsUnVsZSkKK3sKKyAgICBydGw4MzY3Y19hY2xydWxlc21pIGFjbFJ1bGVTbWk7CisgICAgcnRrX3VpbnQzMiByZWdBZGRyLCByZWdEYXRhOworICAgIHJldF90IHJldFZhbDsKKyAgICBydGtfdWludDE2KiB0YWJsZUFkZHI7CisgICAgcnRrX3VpbnQzMiBpOworCisgICAgaWYoaW5kZXggPiBSVEw4MzY3Q19BQ0xSVUxFTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIG1lbXNldCgmYWNsUnVsZVNtaSwgMHgwMCwgc2l6ZW9mKHJ0bDgzNjdjX2FjbHJ1bGVzbWkpKTsKKworICAgIC8qIFdyaXRlIEFDU19BRFIgcmVnaXN0ZXIgZm9yIGRhdGEgYml0cyAqLworICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19UQUJMRV9BQ0NFU1NfQUREUl9SRUc7CisgICAgaWYoaW5kZXggPj0gNjQpCisgICAgICAgIHJlZ0RhdGEgPSBSVEw4MzY3Q19BQ0xSVUxFVEJBRERSMihEQVRBQklUUywgaW5kZXgpOworICAgIGVsc2UKKyAgICAgICAgcmVnRGF0YSA9IFJUTDgzNjdDX0FDTFJVTEVUQkFERFIoREFUQUJJVFMsIGluZGV4KTsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcocmVnQWRkciwgcmVnRGF0YSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworCisgICAgLyogV3JpdGUgQUNTX0NNRCByZWdpc3RlciAqLworICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19UQUJMRV9BQ0NFU1NfQ1RSTF9SRUc7CisgICAgcmVnRGF0YSA9IFJUTDgzNjdDX1RBQkxFX0FDQ0VTU19SRUdfREFUQShUQl9PUF9SRUFELCBUQl9UQVJHRVRfQUNMUlVMRSk7CisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMocmVnQWRkciwgUlRMODM2N0NfVEFCTEVfVFlQRV9NQVNLIHwgUlRMODM2N0NfQ09NTUFORF9UWVBFX01BU0ssIHJlZ0RhdGEpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAvKiBSZWFkIERhdGEgQml0cyAqLworICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19UQUJMRV9BQ0NFU1NfUkREQVRBX0JBU0U7CisgICAgdGFibGVBZGRyID0gKHJ0a191aW50MTYqKSZhY2xSdWxlU21pLmRhdGFfYml0czsKKyAgICBmb3IoaSA9IDA7IGkgPCBSVEw4MzY3Q19BQ0xSVUxFVEJMRU47IGkrKykKKyAgICB7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcocmVnQWRkciwgJnJlZ0RhdGEpOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAqdGFibGVBZGRyID0gcmVnRGF0YTsKKworICAgICAgICByZWdBZGRyICsrOworICAgICAgICB0YWJsZUFkZHIgKys7CisgICAgfQorCisgICAgLyogUmVhZCBWYWxpZCBCaXQgKi8KKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1RBQkxFX0FDQ0VTU19SRERBVEFfUkVHKFJUTDgzNjdDX0FDTFJVTEVUQkxFTiksIDAsICZyZWdEYXRhKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIGFjbFJ1bGVTbWkudmFsaWQgPSByZWdEYXRhICYgMHgxOworICAgIC8qIFJlYWQgYWN0aXZlX3BvcnRtc2tfZXh0IEJpdHMgKi8KKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19UQUJMRV9BQ0NFU1NfUkREQVRBX1JFRyhSVEw4MzY3Q19BQ0xSVUxFVEJMRU4pLCAweDc8PDEsICZyZWdEYXRhKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIGFjbFJ1bGVTbWkuZGF0YV9iaXRzX2V4dC5ydWxlX2luZm8gPSAocmVnRGF0YSAlIDB4MDAwNykgPDwgMTsKKworCisgICAgLyogV3JpdGUgQUNTX0FEUiByZWdpc3RlciBmb3IgY2FyZWJpdHMqLworICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19UQUJMRV9BQ0NFU1NfQUREUl9SRUc7CisgICAgaWYoaW5kZXggPj0gNjQpCisgICAgICAgIHJlZ0RhdGEgPSBSVEw4MzY3Q19BQ0xSVUxFVEJBRERSMihDQVJFQklUUywgaW5kZXgpOworICAgIGVsc2UKKyAgICAgICAgcmVnRGF0YSA9IFJUTDgzNjdDX0FDTFJVTEVUQkFERFIoQ0FSRUJJVFMsIGluZGV4KTsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcocmVnQWRkciwgcmVnRGF0YSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIC8qIFdyaXRlIEFDU19DTUQgcmVnaXN0ZXIgKi8KKyAgICByZWdBZGRyID0gUlRMODM2N0NfVEFCTEVfQUNDRVNTX0NUUkxfUkVHOworICAgIHJlZ0RhdGEgPSBSVEw4MzY3Q19UQUJMRV9BQ0NFU1NfUkVHX0RBVEEoVEJfT1BfUkVBRCwgVEJfVEFSR0VUX0FDTFJVTEUpOworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKHJlZ0FkZHIsIFJUTDgzNjdDX1RBQkxFX1RZUEVfTUFTSyB8IFJUTDgzNjdDX0NPTU1BTkRfVFlQRV9NQVNLLCByZWdEYXRhKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgLyogUmVhZCBDYXJlIEJpdHMgKi8KKyAgICByZWdBZGRyID0gUlRMODM2N0NfVEFCTEVfQUNDRVNTX1JEREFUQV9CQVNFOworICAgIHRhYmxlQWRkciA9IChydGtfdWludDE2KikmYWNsUnVsZVNtaS5jYXJlX2JpdHM7CisgICAgZm9yKGkgPSAwOyBpIDwgUlRMODM2N0NfQUNMUlVMRVRCTEVOOyBpKyspCisgICAgeworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKHJlZ0FkZHIsICZyZWdEYXRhKTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgKnRhYmxlQWRkciA9IHJlZ0RhdGE7CisKKyAgICAgICAgcmVnQWRkciArKzsKKyAgICAgICAgdGFibGVBZGRyICsrOworICAgIH0KKyAgICAvKiBSZWFkIGFjdGl2ZV9wb3J0bXNrX2V4dCBjYXJlIEJpdHMgKi8KKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19UQUJMRV9BQ0NFU1NfUkREQVRBX1JFRyhSVEw4MzY3Q19BQ0xSVUxFVEJMRU4pLCAweDc8PDEsICZyZWdEYXRhKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIGFjbFJ1bGVTbWkuY2FyZV9iaXRzX2V4dC5ydWxlX2luZm8gPSAocmVnRGF0YSAmIDB4MDAwNykgPDwgMTsKKworI2lmZGVmIENPTkZJR19SVEw4MzY3Q19BU0lDRFJWX1RFU1QKKyAgICBtZW1jcHkoJmFjbFJ1bGVTbWksJlJ0bDgzNzBzVmlydHVhbEFjbFJ1bGVUYWJsZVtpbmRleF0sIHNpemVvZihydGw4MzY3Y19hY2xydWxlc21pKSk7CisjZW5kaWYKKworICAgICBfcnRsODM2N2NfYWNsUnVsZVN0U21pMlVzZXIocEFjbFJ1bGUsICZhY2xSdWxlU21pKTsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljQWNsTm90CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHJ1bGUgY29tcGFyaXNvbiByZXN1bHQgaW52ZXJzaW9uIC8gbm8gaW52ZXJzaW9uCisgKiBJbnB1dDoKKyAqICAgICAgaW5kZXggICAtIEFDTCBydWxlIGluZGV4ICgwLTk1KSBvZiA5NiBBQ0wgcnVsZXMKKyAqICAgICAgbm90ICAgICAtIDE6IGludmVyc2UsIDA6IGRvbid0IGludmVyc2UKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgICAgIC0gSW52YWxpZCBBQ0wgcnVsZSBpbmRleCAoMC05NSkKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0FjbE5vdChydGtfdWludDMyIGluZGV4LCBydGtfdWludDMyIG5vdCkKK3sKKyAgICBpZihpbmRleCA+IFJUTDgzNjdDX0FDTFJVTEVNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgaWYoaW5kZXggPCA2NCkKKyAgICAgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfQUNMX0FDVElPTl9DVFJMX1JFRyhpbmRleCksIFJUTDgzNjdDX0FDTF9PUF9OT1RfT0ZGU0VUKGluZGV4KSwgbm90KTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX0FDTF9BQ1RJT05fQ1RSTDJfUkVHKGluZGV4KSwgUlRMODM2N0NfQUNMX09QX05PVF9PRkZTRVQoaW5kZXgpLCBub3QpOworCit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljQWNsCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHJ1bGUgY29tcGFyaXNvbiByZXN1bHQgaW52ZXJzaW9uIC8gbm8gaW52ZXJzaW9uCisgKiBJbnB1dDoKKyAqICAgICAgaW5kZXggICAtIEFDTCBydWxlIGluZGV4ICgwLTk1KSBvZiA5NSBBQ0wgcnVsZXMKKyAqICAgICAgcE5vdCAgICAtIDE6IGludmVyc2UsIDA6IGRvbid0IGludmVyc2UKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgICAgIC0gSW52YWxpZCBBQ0wgcnVsZSBpbmRleCAoMC05NSkKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0FjbE5vdChydGtfdWludDMyIGluZGV4LCBydGtfdWludDMyKiBwTm90KQoreworICAgIGlmKGluZGV4ID4gUlRMODM2N0NfQUNMUlVMRU1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICBpZihpbmRleCA8IDY0KQorICAgICAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19BQ0xfQUNUSU9OX0NUUkxfUkVHKGluZGV4KSwgUlRMODM2N0NfQUNMX09QX05PVF9PRkZTRVQoaW5kZXgpLCBwTm90KTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX0FDTF9BQ1RJT05fQ1RSTDJfUkVHKGluZGV4KSwgUlRMODM2N0NfQUNMX09QX05PVF9PRkZTRVQoaW5kZXgpLCBwTm90KTsKKworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0FjbFRlbXBsYXRlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IGZpZWxkcyBvZiBhIEFDTCBUZW1wbGF0ZQorICogSW5wdXQ6CisgKiAgICAgIGluZGV4ICAgLSBBQ0wgdGVtcGxhdGUgaW5kZXgoMH40KQorICogICAgICBwQWNsVHlwZSAtIEFDTCB0eXBlIHN0dWN0dXJlIGZvciBzZXR0aW5nCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFICAgICAtIEludmFsaWQgQUNMIHRlbXBsYXRlIGluZGV4KDB+NCkKKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIHNldCB0eXBlIGZpZWxkIG9mIHRoZSA1IEFDTCBydWxlIHRlbXBsYXRlcy4KKyAqICAgICAgRWFjaCB0eXBlIGhhcyA4IGZpZWxkcy4gT25lIGZpZWxkIG1lYW5zIHdoYXQgZGF0YSBpbiBvbmUgZmllbGQgb2YgYSBBQ0wgcnVsZSBtZWFucworICogICAgICA4IGZpZWxkcyBvZiBBQ0wgcnVsZSAwfjk1IGlzIGRlc2NyaXB0ZWQgYnkgb25lIHR5cGUgaW4gQUNMIGdyb3VwCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNBY2xUZW1wbGF0ZShydGtfdWludDMyIGluZGV4LCBydGw4MzY3Y19hY2x0ZW1wbGF0ZV90KiBwQWNsVHlwZSkKK3sKKyAgICByZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBpOworICAgIHJ0a191aW50MzIgcmVnQWRkciwgcmVnRGF0YTsKKworICAgIGlmKGluZGV4ID49IFJUTDgzNjdDX0FDTFRFTVBMQVRFTk8pCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgcmVnQWRkciA9IFJUTDgzNjdDX0FDTF9SVUxFX1RFTVBMQVRFX0NUUkxfUkVHKGluZGV4KTsKKworICAgIGZvcihpID0gMDsgaSA8IChSVEw4MzY3Q19BQ0xSVUxFRklFTEROTy8yKTsgaSsrKQorICAgIHsKKyAgICAgICAgcmVnRGF0YSA9IHBBY2xUeXBlLT5maWVsZFtpKjIrMV07CisgICAgICAgIHJlZ0RhdGEgPSByZWdEYXRhIDw8IDggfCBwQWNsVHlwZS0+ZmllbGRbaSoyXTsKKworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKHJlZ0FkZHIgKyBpLCByZWdEYXRhKTsKKworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0VmFsOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0FjbFRlbXBsYXRlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGZpZWxkcyBvZiBhIEFDTCBUZW1wbGF0ZQorICogSW5wdXQ6CisgKiAgICAgIGluZGV4ICAgLSBBQ0wgdGVtcGxhdGUgaW5kZXgoMH40KQorICogICAgICBwQWNsVHlwZSAtIEFDTCB0eXBlIHN0dWN0dXJlIGZvciBzZXR0aW5nCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFICAgICAtIEludmFsaWQgQUNMIHRlbXBsYXRlIGluZGV4KDB+NCkKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0FjbFRlbXBsYXRlKHJ0a191aW50MzIgaW5kZXgsIHJ0bDgzNjdjX2FjbHRlbXBsYXRlX3QgKnBBY2xUeXBlKQoreworICAgIHJldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIGk7CisgICAgcnRrX3VpbnQzMiByZWdEYXRhLCByZWdBZGRyOworCisgICAgaWYoaW5kZXggPj0gUlRMODM2N0NfQUNMVEVNUExBVEVOTykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICByZWdBZGRyID0gUlRMODM2N0NfQUNMX1JVTEVfVEVNUExBVEVfQ1RSTF9SRUcoaW5kZXgpOworCisgICAgZm9yKGkgPSAwOyBpIDwgKFJUTDgzNjdDX0FDTFJVTEVGSUVMRE5PLzIpOyBpKyspCisgICAgeworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKHJlZ0FkZHIgKyBpLCZyZWdEYXRhKTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgcEFjbFR5cGUtPmZpZWxkW2kqMl0gPSByZWdEYXRhICYgMHhGRjsKKyAgICAgICAgcEFjbFR5cGUtPmZpZWxkW2kqMiArIDFdID0gKHJlZ0RhdGEgPj4gOCkgJiAweEZGOworICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljQWNsQWN0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IEFDTCBydWxlIG1hdGNoZWQgQWN0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgaW5kZXggICAtIEFDTCBydWxlIGluZGV4ICgwLTk1KSBvZiA5NiBBQ0wgcnVsZXMKKyAqICAgICAgcEFjbEFjdCAgICAgLSBBQ0wgYWN0aW9uIHN0dWN0dXJlIGZvciBzZXR0aW5nCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFICAgICAtIEludmFsaWQgQUNMIHJ1bGUgaW5kZXggKDAtOTUpCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNBY2xBY3QocnRrX3VpbnQzMiBpbmRleCwgcnRsODM2N2NfYWNsX2FjdF90KiBwQWNsQWN0KQoreworICAgIHJ0a191aW50MTYgYWNsQWN0U21pW1JUTDgzNjdDX0FDTF9BQ1RfVEFCTEVfTEVOXTsKKyAgICByZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiByZWdBZGRyLCByZWdEYXRhOworICAgIHJ0a191aW50MTYqIHRhYmxlQWRkcjsKKyAgICBydGtfdWludDMyIGk7CisKKyAgICBpZihpbmRleCA+IFJUTDgzNjdDX0FDTFJVTEVNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgbWVtc2V0KGFjbEFjdFNtaSwgMHgwMCwgc2l6ZW9mKHJ0a191aW50MTYpICogUlRMODM2N0NfQUNMX0FDVF9UQUJMRV9MRU4pOworICAgICBfcnRsODM2N2NfYWNsQWN0U3RVc2VyMlNtaShwQWNsQWN0LCBhY2xBY3RTbWkpOworCisgICAgLyogV3JpdGUgQUNTX0FEUiByZWdpc3RlciBmb3IgZGF0YSBiaXRzICovCisgICAgcmVnQWRkciA9IFJUTDgzNjdDX1RBQkxFX0FDQ0VTU19BRERSX1JFRzsKKyAgICByZWdEYXRhID0gaW5kZXg7CisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhyZWdBZGRyLCByZWdEYXRhKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgLyogV3JpdGUgRGF0YSBCaXRzIHRvIEFDU19EQVRBIHJlZ2lzdGVycyAqLworICAgICB0YWJsZUFkZHIgPSBhY2xBY3RTbWk7CisgICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19UQUJMRV9BQ0NFU1NfV1JEQVRBX0JBU0U7CisKKyAgICBmb3IoaSA9IDA7IGkgPCBSVEw4MzY3Q19BQ0xBQ1RUQkxFTjsgaSsrKQorICAgIHsKKyAgICAgICAgcmVnRGF0YSA9ICp0YWJsZUFkZHI7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcocmVnQWRkciwgcmVnRGF0YSk7CisgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIHJlZ0FkZHIrKzsKKyAgICAgICAgdGFibGVBZGRyKys7CisgICAgfQorCisgICAgLyogV3JpdGUgQUNTX0NNRCByZWdpc3RlciBmb3IgY2FyZSBiaXRzKi8KKyAgICByZWdBZGRyID0gUlRMODM2N0NfVEFCTEVfQUNDRVNTX0NUUkxfUkVHOworICAgIHJlZ0RhdGEgPSBSVEw4MzY3Q19UQUJMRV9BQ0NFU1NfUkVHX0RBVEEoVEJfT1BfV1JJVEUsIFRCX1RBUkdFVF9BQ0xBQ1QpOworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKHJlZ0FkZHIsIFJUTDgzNjdDX1RBQkxFX1RZUEVfTUFTSyB8IFJUTDgzNjdDX0NPTU1BTkRfVFlQRV9NQVNLLCByZWdEYXRhKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisjaWZkZWYgQ09ORklHX1JUTDgzNjdDX0FTSUNEUlZfVEVTVAorICAgIG1lbWNweSgmUnRsODM3MHNWaXJ0dWFsQWNsQWN0VGFibGVbaW5kZXhdWzBdLCBhY2xBY3RTbWksIHNpemVvZihydGtfdWludDE2KSAqIFJUTDgzNjdDX0FDTF9BQ1RfVEFCTEVfTEVOKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNBY2xBY3QKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgQUNMIHJ1bGUgbWF0Y2hlZCBBY3Rpb24KKyAqIElucHV0OgorICogICAgICBpbmRleCAgIC0gQUNMIHJ1bGUgaW5kZXggKDAtOTUpIG9mIDk2IEFDTCBydWxlcworICogICAgICBwQWNsQWN0ICAgICAtIEFDTCBhY3Rpb24gc3R1Y3R1cmUgZm9yIHNldHRpbmcKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgICAgIC0gSW52YWxpZCBBQ0wgcnVsZSBpbmRleCAoMC05NSkKKyAgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNBY2xBY3QocnRrX3VpbnQzMiBpbmRleCwgcnRsODM2N2NfYWNsX2FjdF90ICpwQWNsQWN0KQoreworICAgIHJ0a191aW50MTYgYWNsQWN0U21pW1JUTDgzNjdDX0FDTF9BQ1RfVEFCTEVfTEVOXTsKKyAgICByZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiByZWdBZGRyLCByZWdEYXRhOworICAgIHJ0a191aW50MTYgKnRhYmxlQWRkcjsKKyAgICBydGtfdWludDMyIGk7CisKKyAgICBpZihpbmRleCA+IFJUTDgzNjdDX0FDTFJVTEVNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgbWVtc2V0KGFjbEFjdFNtaSwgMHgwMCwgc2l6ZW9mKHJ0a191aW50MTYpICogUlRMODM2N0NfQUNMX0FDVF9UQUJMRV9MRU4pOworCisgICAgLyogV3JpdGUgQUNTX0FEUiByZWdpc3RlciBmb3IgZGF0YSBiaXRzICovCisgICAgcmVnQWRkciA9IFJUTDgzNjdDX1RBQkxFX0FDQ0VTU19BRERSX1JFRzsKKyAgICByZWdEYXRhID0gaW5kZXg7CisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhyZWdBZGRyLCByZWdEYXRhKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgLyogV3JpdGUgQUNTX0NNRCByZWdpc3RlciAqLworICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19UQUJMRV9BQ0NFU1NfQ1RSTF9SRUc7CisgICAgcmVnRGF0YSA9IFJUTDgzNjdDX1RBQkxFX0FDQ0VTU19SRUdfREFUQShUQl9PUF9SRUFELCBUQl9UQVJHRVRfQUNMQUNUKTsKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhyZWdBZGRyLCBSVEw4MzY3Q19UQUJMRV9UWVBFX01BU0sgfCBSVEw4MzY3Q19DT01NQU5EX1RZUEVfTUFTSywgcmVnRGF0YSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIC8qIFJlYWQgRGF0YSBCaXRzICovCisgICAgcmVnQWRkciA9IFJUTDgzNjdDX1RBQkxFX0FDQ0VTU19SRERBVEFfQkFTRTsKKyAgICB0YWJsZUFkZHIgPSBhY2xBY3RTbWk7CisgICAgZm9yKGkgPSAwOyBpIDwgUlRMODM2N0NfQUNMQUNUVEJMRU47IGkrKykKKyAgICB7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcocmVnQWRkciwgJnJlZ0RhdGEpOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAqdGFibGVBZGRyID0gcmVnRGF0YTsKKworICAgICAgICByZWdBZGRyICsrOworICAgICAgICB0YWJsZUFkZHIgKys7CisgICAgfQorCisjaWZkZWYgQ09ORklHX1JUTDgzNjdDX0FTSUNEUlZfVEVTVAorICAgIG1lbWNweShhY2xBY3RTbWksICZSdGw4Mzcwc1ZpcnR1YWxBY2xBY3RUYWJsZVtpbmRleF1bMF0sIHNpemVvZihydGtfdWludDE2KSAqIFJUTDgzNjdDX0FDTF9BQ1RfVEFCTEVfTEVOKTsKKyNlbmRpZgorCisgICAgIF9ydGw4MzY3Y19hY2xBY3RTdFNtaTJVc2VyKHBBY2xBY3QsIGFjbEFjdFNtaSk7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0FjbEFjdEN0cmwKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgQUNMIHJ1bGUgbWF0Y2hlZCBBY3Rpb24gQ29udHJvbCBCaXRzCisgKiBJbnB1dDoKKyAqICAgICAgaW5kZXggICAgICAgLSBBQ0wgcnVsZSBpbmRleCAoMC05NSkgb2YgOTYgQUNMIHJ1bGVzCisgKiAgICAgIGFjbEFjdEN0cmwgIC0gNiBBQ0wgQ29udHJvbCBCaXRzCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFICAgICAtIEludmFsaWQgQUNMIHJ1bGUgaW5kZXggKDAtOTUpCisgKiBOb3RlOgorICogICAgICBBQ0wgQWN0aW9uIENvbnRyb2wgQml0cyBJbmRpY2F0ZSB3aGljaCBhY3Rpb25zIHdpbGwgYmUgdGFrZSB3aGVuIGEgcnVsZSBtYXRjaGVzCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNBY2xBY3RDdHJsKHJ0a191aW50MzIgaW5kZXgsIHJ0a191aW50MzIgYWNsQWN0Q3RybCkKK3sKKyAgICByZXRfdCByZXRWYWw7CisKKyAgICBpZihpbmRleCA+IFJUTDgzNjdDX0FDTFJVTEVNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgaWYoaW5kZXggPj0gNjQpCisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX0FDTF9BQ1RJT05fQ1RSTDJfUkVHKGluZGV4KSwgUlRMODM2N0NfQUNMX09QX0FDVElPTl9NQVNLKGluZGV4KSwgYWNsQWN0Q3RybCk7CisgICAgZWxzZQorICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19BQ0xfQUNUSU9OX0NUUkxfUkVHKGluZGV4KSwgUlRMODM2N0NfQUNMX09QX0FDVElPTl9NQVNLKGluZGV4KSwgYWNsQWN0Q3RybCk7CisKKyAgICByZXR1cm4gcmV0VmFsOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0FjbEFjdEN0cmwKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgQUNMIHJ1bGUgbWF0Y2hlZCBBY3Rpb24gQ29udHJvbCBCaXRzCisgKiBJbnB1dDoKKyAqICAgICAgaW5kZXggICAgICAgLSBBQ0wgcnVsZSBpbmRleCAoMC05NSkgb2YgOTYgQUNMIHJ1bGVzCisgKiAgICAgIHBBY2xBY3RDdHJsICAgICAtIDYgQUNMIENvbnRyb2wgQml0cworICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAgICAgLSBJbnZhbGlkIEFDTCBydWxlIGluZGV4ICgwLTk1KQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljQWNsQWN0Q3RybChydGtfdWludDMyIGluZGV4LCBydGtfdWludDMyICpwQWNsQWN0Q3RybCkKK3sKKyAgICByZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiByZWdEYXRhOworCisgICAgaWYoaW5kZXggPiBSVEw4MzY3Q19BQ0xSVUxFTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIGlmKGluZGV4ID49IDY0KQorICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19BQ0xfQUNUSU9OX0NUUkwyX1JFRyhpbmRleCksIFJUTDgzNjdDX0FDTF9PUF9BQ1RJT05fTUFTSyhpbmRleCksICZyZWdEYXRhKTsKKyAgICBlbHNlCisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX0FDTF9BQ1RJT05fQ1RSTF9SRUcoaW5kZXgpLCBSVEw4MzY3Q19BQ0xfT1BfQUNUSU9OX01BU0soaW5kZXgpLCAmcmVnRGF0YSk7CisKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgKnBBY2xBY3RDdHJsID0gcmVnRGF0YTsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljQWNsUG9ydFJhbmdlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IEFDTCBUQ1AvVURQIHJhbmdlIGNoZWNrCisgKiBJbnB1dDoKKyAqICAgICAgaW5kZXggICAgICAgLSBUQ1AvVURQIHBvcnQgcmFuZ2UgY2hlY2sgdGFibGUgaW5kZXgKKyAqICAgICAgdHlwZSAgICAgICAgLSBSYW5nZSBjaGVjayB0eXBlCisgKiAgICAgIHVwcGVyUG9ydCAgIC0gVENQL1VEUCBwb3J0IHJhbmdlIHVwcGVyIGJvdW5kCisgKiAgICAgIGxvd2VyUG9ydCAgIC0gVENQL1VEUCBwb3J0IHJhbmdlIGxvd2VyIGJvdW5kCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFICAgICAtIEludmFsaWQgVENQL1VEUCBwb3J0IHJhbmdlIGNoZWNrIHRhYmxlIGluZGV4CisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNBY2xQb3J0UmFuZ2UocnRrX3VpbnQzMiBpbmRleCwgcnRrX3VpbnQzMiB0eXBlLCBydGtfdWludDMyIHVwcGVyUG9ydCwgcnRrX3VpbnQzMiBsb3dlclBvcnQpCit7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgaWYoaW5kZXggPiBSVEw4MzY3Q19BQ0xSQU5HRU1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfQUNMX1NEUE9SVF9SQU5HRV9FTlRSWTBfQ1RSTDIgKyBpbmRleCozLCBSVEw4MzY3Q19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZMF9DVFJMMl9NQVNLLCB0eXBlKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfQUNMX1NEUE9SVF9SQU5HRV9FTlRSWTBfQ1RSTDEgKyBpbmRleCozLCB1cHBlclBvcnQpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZMF9DVFJMMCArIGluZGV4KjMsIGxvd2VyUG9ydCk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljQWNsUG9ydFJhbmdlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IEFDTCBUQ1AvVURQIHJhbmdlIGNoZWNrCisgKiBJbnB1dDoKKyAqICAgICAgaW5kZXggICAgICAgLSBUQ1AvVURQIHBvcnQgcmFuZ2UgY2hlY2sgdGFibGUgaW5kZXgKKyAqICAgICAgcFR5cGUgICAgICAgLSBSYW5nZSBjaGVjayB0eXBlCisgKiAgICAgIHBVcHBlclBvcnQgIC0gVENQL1VEUCBwb3J0IHJhbmdlIHVwcGVyIGJvdW5kCisgKiAgICAgIHBMb3dlclBvcnQgIC0gVENQL1VEUCBwb3J0IHJhbmdlIGxvd2VyIGJvdW5kCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFICAgICAtIEludmFsaWQgVENQL1VEUCBwb3J0IHJhbmdlIGNoZWNrIHRhYmxlIGluZGV4CisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNBY2xQb3J0UmFuZ2UocnRrX3VpbnQzMiBpbmRleCwgcnRrX3VpbnQzMiogcFR5cGUsIHJ0a191aW50MzIqIHBVcHBlclBvcnQsIHJ0a191aW50MzIqIHBMb3dlclBvcnQpCit7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgaWYoaW5kZXggPiBSVEw4MzY3Q19BQ0xSQU5HRU1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfQUNMX1NEUE9SVF9SQU5HRV9FTlRSWTBfQ1RSTDIgKyBpbmRleCozLCBSVEw4MzY3Q19BQ0xfU0RQT1JUX1JBTkdFX0VOVFJZMF9DVFJMMl9NQVNLLCBwVHlwZSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfUkVHX0FDTF9TRFBPUlRfUkFOR0VfRU5UUlkwX0NUUkwxICsgaW5kZXgqMywgcFVwcGVyUG9ydCk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfUkVHX0FDTF9TRFBPUlRfUkFOR0VfRU5UUlkwX0NUUkwwICsgaW5kZXgqMywgcExvd2VyUG9ydCk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljQWNsVmlkUmFuZ2UKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgQUNMIFZJRCByYW5nZSBjaGVjaworICogSW5wdXQ6CisgKiAgICAgIGluZGV4ICAgICAgIC0gQUNMIFZJRCByYW5nZSBjaGVjayBpbmRleCgwfjE1KQorICogICAgICB0eXBlICAgICAgICAtIFJhbmdlIGNoZWNrIHR5cGUKKyAqICAgICAgdXBwZXJWaWQgICAgLSBWSUQgcmFuZ2UgdXBwZXIgYm91bmQKKyAqICAgICAgbG93ZXJWaWQgICAgLSBWSUQgcmFuZ2UgbG93ZXIgYm91bmQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgICAgIC0gSW52YWxpZCBBQ0wgIFZJRCByYW5nZSBjaGVjayBpbmRleCgwfjE1KQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljQWNsVmlkUmFuZ2UocnRrX3VpbnQzMiBpbmRleCwgcnRrX3VpbnQzMiB0eXBlLCBydGtfdWludDMyIHVwcGVyVmlkLCBydGtfdWludDMyIGxvd2VyVmlkKQoreworICAgIHJldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHJlZ0RhdGE7CisKKyAgICBpZihpbmRleCA+IFJUTDgzNjdDX0FDTFJBTkdFTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIHJlZ0RhdGEgPSAoKHR5cGUgPDwgUlRMODM2N0NfQUNMX1ZJRF9SQU5HRV9FTlRSWTBfQ1RSTDFfQ0hFQ0swX1RZUEVfT0ZGU0VUKSAmIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlkwX0NUUkwxX0NIRUNLMF9UWVBFX01BU0spIHwKKyAgICAgICAgICAgICAgICAodXBwZXJWaWQgJiBSVEw4MzY3Q19BQ0xfVklEX1JBTkdFX0VOVFJZMF9DVFJMMV9DSEVDSzBfSElHSF9NQVNLKTsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX0FDTF9WSURfUkFOR0VfRU5UUlkwX0NUUkwxICsgaW5kZXgqMiwgcmVnRGF0YSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX0FDTF9WSURfUkFOR0VfRU5UUlkwX0NUUkwwICsgaW5kZXgqMiwgbG93ZXJWaWQpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0FjbFZpZFJhbmdlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IEFDTCBWSUQgcmFuZ2UgY2hlY2sKKyAqIElucHV0OgorICogICAgICBpbmRleCAgICAgICAtIEFDTCBWSUQgcmFuZ2UgY2hlY2sgaW5kZXgoMH4xNSkKKyAqICAgICAgcFR5cGUgICAgICAgLSBSYW5nZSBjaGVjayB0eXBlCisgKiAgICAgIHBVcHBlclZpZCAgIC0gVklEIHJhbmdlIHVwcGVyIGJvdW5kCisgKiAgICAgIHBMb3dlclZpZCAgIC0gVklEIHJhbmdlIGxvd2VyIGJvdW5kCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFICAgICAtIEludmFsaWQgQUNMIFZJRCByYW5nZSBjaGVjayBpbmRleCgwfjE1KQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljQWNsVmlkUmFuZ2UocnRrX3VpbnQzMiBpbmRleCwgcnRrX3VpbnQzMiogcFR5cGUsIHJ0a191aW50MzIqIHBVcHBlclZpZCwgcnRrX3VpbnQzMiogcExvd2VyVmlkKQoreworICAgIHJldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHJlZ0RhdGE7CisKKyAgICBpZihpbmRleCA+IFJUTDgzNjdDX0FDTFJBTkdFTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfUkVHX0FDTF9WSURfUkFOR0VfRU5UUlkwX0NUUkwxICsgaW5kZXgqMiwgJnJlZ0RhdGEpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAqcFR5cGUgPSAocmVnRGF0YSAmIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlkwX0NUUkwxX0NIRUNLMF9UWVBFX01BU0spID4+IFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlkwX0NUUkwxX0NIRUNLMF9UWVBFX09GRlNFVDsKKyAgICAqcFVwcGVyVmlkID0gcmVnRGF0YSAmIFJUTDgzNjdDX0FDTF9WSURfUkFOR0VfRU5UUlkwX0NUUkwxX0NIRUNLMF9ISUdIX01BU0s7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19BQ0xfVklEX1JBTkdFX0VOVFJZMF9DVFJMMCArIGluZGV4KjIsIHBMb3dlclZpZCk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljQWNsSXBSYW5nZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBBQ0wgSVAgcmFuZ2UgY2hlY2sKKyAqIElucHV0OgorICogICAgICBpbmRleCAgICAgICAtIEFDTCBJUCByYW5nZSBjaGVjayBpbmRleCgwfjE1KQorICogICAgICB0eXBlICAgICAgICAtIFJhbmdlIGNoZWNrIHR5cGUKKyAqICAgICAgdXBwZXJJcCAgICAgLSBJUCByYW5nZSB1cHBlciBib3VuZAorICogICAgICBsb3dlcklwICAgICAtIElQIHJhbmdlIGxvd2VyIGJvdW5kCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFICAgICAtIEludmFsaWQgQUNMIElQIHJhbmdlIGNoZWNrIGluZGV4KDB+MTUpCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNBY2xJcFJhbmdlKHJ0a191aW50MzIgaW5kZXgsIHJ0a191aW50MzIgdHlwZSwgaXBhZGRyX3QgdXBwZXJJcCwgaXBhZGRyX3QgbG93ZXJJcCkKK3sKKyAgICByZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiByZWdEYXRhOworICAgIGlwYWRkcl90IGlwRGF0YTsKKworICAgIGlmKGluZGV4ID4gUlRMODM2N0NfQUNMUkFOR0VNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0FDTF9JUF9SQU5HRV9FTlRSWTBfQ1RSTDQgKyBpbmRleCo1LCBSVEw4MzY3Q19BQ0xfSVBfUkFOR0VfRU5UUlkwX0NUUkw0X01BU0ssIHR5cGUpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpcERhdGEgPSB1cHBlcklwOworCisgICAgcmVnRGF0YSA9IGlwRGF0YSAmIDB4RkZGRjsKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19BQ0xfSVBfUkFOR0VfRU5UUlkwX0NUUkwyICsgaW5kZXgqNSwgcmVnRGF0YSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJlZ0RhdGEgPSAoaXBEYXRhPj4xNikgJiAweEZGRkY7CisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfQUNMX0lQX1JBTkdFX0VOVFJZMF9DVFJMMyArIGluZGV4KjUsIHJlZ0RhdGEpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpcERhdGEgPSBsb3dlcklwOworCisgICAgcmVnRGF0YSA9IGlwRGF0YSAmIDB4RkZGRjsKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19BQ0xfSVBfUkFOR0VfRU5UUlkwX0NUUkwwICsgaW5kZXgqNSwgcmVnRGF0YSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJlZ0RhdGEgPSAoaXBEYXRhPj4xNikgJiAweEZGRkY7CisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfQUNMX0lQX1JBTkdFX0VOVFJZMF9DVFJMMSArIGluZGV4KjUsIHJlZ0RhdGEpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0FjbElwUmFuZ2UKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgQUNMIElQIHJhbmdlIGNoZWNrCisgKiBJbnB1dDoKKyAqICAgICAgaW5kZXggICAgICAgLSBBQ0wgSVAgcmFuZ2UgY2hlY2sgaW5kZXgoMH4xNSkKKyAqICAgICAgcFR5cGUgICAgICAgLSBSYW5nZSBjaGVjayB0eXBlCisgKiAgICAgIHBVcHBlcklwICAgIC0gSVAgcmFuZ2UgdXBwZXIgYm91bmQKKyAqICAgICAgcExvd2VySXAgICAgLSBJUCByYW5nZSBsb3dlciBib3VuZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAgICAgLSBJbnZhbGlkIEFDTCBJUCByYW5nZSBjaGVjayBpbmRleCgwfjE1KQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljQWNsSXBSYW5nZShydGtfdWludDMyIGluZGV4LCBydGtfdWludDMyKiBwVHlwZSwgaXBhZGRyX3QqIHBVcHBlcklwLCBpcGFkZHJfdCogcExvd2VySXApCit7CisgICAgcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcmVnRGF0YTsKKyAgICBpcGFkZHJfdCBpcERhdGE7CisKKyAgICBpZihpbmRleCA+IFJUTDgzNjdDX0FDTFJBTkdFTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19BQ0xfSVBfUkFOR0VfRU5UUlkwX0NUUkw0ICsgaW5kZXgqNSwgUlRMODM2N0NfQUNMX0lQX1JBTkdFX0VOVFJZMF9DVFJMNF9NQVNLLCBwVHlwZSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfUkVHX0FDTF9JUF9SQU5HRV9FTlRSWTBfQ1RSTDIgKyBpbmRleCo1LCAmcmVnRGF0YSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICBpcERhdGEgPSByZWdEYXRhOworCisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19BQ0xfSVBfUkFOR0VfRU5UUlkwX0NUUkwzICsgaW5kZXgqNSwgJnJlZ0RhdGEpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpcERhdGEgPSAocmVnRGF0YSA8PDE2KSB8IGlwRGF0YTsKKyAgICAqcFVwcGVySXAgPSBpcERhdGE7CisKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfUkVHX0FDTF9JUF9SQU5HRV9FTlRSWTBfQ1RSTDAgKyBpbmRleCo1LCAmcmVnRGF0YSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICBpcERhdGEgPSByZWdEYXRhOworCisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19BQ0xfSVBfUkFOR0VfRU5UUlkwX0NUUkwxICsgaW5kZXgqNSwgJnJlZ0RhdGEpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpcERhdGEgPSAocmVnRGF0YSA8PCAxNikgfCBpcERhdGE7CisgICAgKnBMb3dlcklwID0gaXBEYXRhOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0FjbEdwaW9Qb2xhcml0eQorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBBQ0wgR29pcCBjb250cm9sIHBhbGFyaXR5CisgKiBJbnB1dDoKKyAqICAgICAgcG9sYXJpdHkgLSAxOiBIaWdoLCAwOiBMb3cKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIG5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0FjbEdwaW9Qb2xhcml0eShydGtfdWludDMyIHBvbGFyaXR5KQoreworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19BQ0xfR1BJT19QT0xBUklUWSwgUlRMODM2N0NfQUNMX0dQSU9fUE9MQVJJVFlfT0ZGU0VULCBwb2xhcml0eSk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljQWNsR3Bpb1BvbGFyaXR5CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IEFDTCBHb2lwIGNvbnRyb2wgcGFsYXJpdHkKKyAqIElucHV0OgorICogICAgICBwUG9sYXJpdHkgLSAxOiBIaWdoLCAwOiBMb3cKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIG5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0FjbEdwaW9Qb2xhcml0eShydGtfdWludDMyKiBwUG9sYXJpdHkpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0FDTF9HUElPX1BPTEFSSVRZLCBSVEw4MzY3Q19BQ0xfR1BJT19QT0xBUklUWV9PRkZTRVQsIHBQb2xhcml0eSk7Cit9CisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X2NwdXRhZy5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfY3B1dGFnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIyYmY2NQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X2NwdXRhZy5jCkBAIC0wLDAgKzEsMzY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNzYzMDYgJAorICogJERhdGU6IDIwMTctMDMtMDggMTU6MTM6NTggKzA4MDAgKOmAseS4iSwgMDgg5LiJ5pyIIDIwMTcpICQKKyAqCisgKiBQdXJwb3NlIDogUlRMODM2N0Mgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJIGZvciBSVEw4MzY3QworICogRmVhdHVyZSA6IFByb3ByaWV0YXJ5IENQVS10YWcgcmVsYXRlZCBmdW5jdGlvbiBkcml2ZXJzCisgKgorICovCisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl9jcHV0YWcuaD4KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNDcHV0YWdFbmFibGUKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgY3B1IHRhZyBmdW5jdGlvbiBlbmFibGUvZGlzYWJsZQorICogSW5wdXQ6CisgKiAgICAgIGVuYWJsZWQgLSAxOiBlbmFibGVkLCAwOiBkaXNhYmxlZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfRU5BQkxFICAgLSBJbnZhbGlkIGVuYWJsZS9kaXNhYmxlIGlucHV0CisgKiBOb3RlOgorICogICAgICBJZiBDUFUgdGFnIGZ1bmN0aW9uIGlzIGRpc2FibGVkLCBDUFUgdGFnIHdpbGwgbm90IGJlIGFkZGVkIHRvIGZyYW1lCisgKiAgICAgIGZvcndhcmRlZCB0byBDUFUgcG9ydCwgYW5kIGFsbCBwb3J0cyBjYW5ub3QgcGFyc2UgQ1BVIHRhZy4KKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0NwdXRhZ0VuYWJsZShydGtfdWludDMyIGVuYWJsZWQpCit7CisgICAgaWYoZW5hYmxlZCA+IDEpCisgICAgICAgIHJldHVybiBSVF9FUlJfRU5BQkxFOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0NQVV9DVFJMLCBSVEw4MzY3Q19DUFVfRU5fT0ZGU0VULCBlbmFibGVkKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNDcHV0YWdFbmFibGUKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgY3B1IHRhZyBmdW5jdGlvbiBlbmFibGUvZGlzYWJsZQorICogSW5wdXQ6CisgKiAgICAgIHBFbmFibGVkIC0gMTogZW5hYmxlZCwgMDogZGlzYWJsZWQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0NwdXRhZ0VuYWJsZShydGtfdWludDMyICpwRW5hYmxlZCkKK3sKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfQ1BVX0NUUkwsIFJUTDgzNjdDX0NQVV9FTl9PRkZTRVQsIHBFbmFibGVkKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNDcHV0YWdUcmFwUG9ydAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBjcHUgdGFnIHRyYXAgcG9ydAorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBwb3J0IG51bWJlcgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiBOb3RlOgorICogICAgIEFQSSBjYW4gc2V0IGRlc3RpbmF0aW9uIHBvcnQgb2YgdHJhcHBpbmcgZnJhbWUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0NwdXRhZ1RyYXBQb3J0KHJ0a191aW50MzIgcG9ydCkKK3sKKyAgICByZXRfdCByZXRWYWw7CisKKyAgICBpZihwb3J0ID49IFJUTDgzNjdDX1BPUlROTykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0NQVV9DVFJMLCBSVEw4MzY3Q19DUFVfVFJBUF9QT1JUX01BU0ssIHBvcnQgJiA3KTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0NQVV9DVFJMLCBSVEw4MzY3Q19DUFVfVFJBUF9QT1JUX0VYVF9NQVNLLCAocG9ydD4+MykgJiAxKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNDcHV0YWdUcmFwUG9ydAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBjcHUgdGFnIHRyYXAgcG9ydAorICogSW5wdXQ6CisgKiAgICAgIHBQb3J0IC0gcG9ydCBudW1iZXIKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljQ3B1dGFnVHJhcFBvcnQocnRrX3VpbnQzMiAqcFBvcnQpCit7CisgICAgcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgdG1wUG9ydDsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19DUFVfQ1RSTCwgUlRMODM2N0NfQ1BVX1RSQVBfUE9SVF9NQVNLLCAmdG1wUG9ydCk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAqcFBvcnQgPSB0bXBQb3J0OworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0NQVV9DVFJMLCBSVEw4MzY3Q19DUFVfVFJBUF9QT1JUX0VYVF9NQVNLLCAmdG1wUG9ydCk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAqcFBvcnQgfD0gKHRtcFBvcnQgJiAxKSA8PCAzOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNDcHV0YWdQb3J0bWFzaworICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwb3J0cyB0aGF0IGNhbiBwYXJzZSBDUFUgdGFnCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydG1hc2sgLSBwb3J0IG1hc2sKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9NQVNLICAgIC0gSW52YWxpZCBwb3J0bWFzaworICogTm90ZToKKyAqICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNDcHV0YWdQb3J0bWFzayhydGtfdWludDMyIHBvcnRtYXNrKQoreworICAgIGlmKHBvcnRtYXNrID4gUlRMODM2N0NfUE9SVE1BU0spCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9NQVNLOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfQ1BVX1BPUlRfTUFTS19SRUcsIHBvcnRtYXNrKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNDcHV0YWdQb3J0bWFzaworICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwb3J0cyB0aGF0IGNhbiBwYXJzZSBDUFUgdGFnCisgKiBJbnB1dDoKKyAqICAgICAgcFBvcnRtYXNrIC0gcG9ydCBtYXNrCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljQ3B1dGFnUG9ydG1hc2socnRrX3VpbnQzMiAqcFBvcnRtYXNrKQoreworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX0NQVV9QT1JUX01BU0tfUkVHLCBwUG9ydG1hc2spOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0NwdXRhZ0luc2VydE1vZGUKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgQ1BVLXRhZyBpbnNlcnQgbW9kZQorICogSW5wdXQ6CisgKiAgICAgIG1vZGUgLSAwOiBpbnNlcnQgdG8gYWxsIHBhY2tldHM7IDE6IGluc2VydCB0byB0cmFwcGVkIHBhY2tldHM7IDI6IGRvbid0IGluc2VydAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9OT1RfQUxMT1dFRCAgLSBBY3Rpb25zIG5vdCBhbGxvd2VkIGJ5IHRoZSBmdW5jdGlvbgorICogTm90ZToKKyAqICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNDcHV0YWdJbnNlcnRNb2RlKHJ0a191aW50MzIgbW9kZSkKK3sKKyAgICBpZihtb2RlID49IENQVVRBR19JTlNFUlRfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX05PVF9BTExPV0VEOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19DUFVfQ1RSTCwgUlRMODM2N0NfQ1BVX0lOU0VSVE1PREVfTUFTSywgbW9kZSk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljQ3B1dGFnSW5zZXJ0TW9kZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBDUFUtdGFnIGluc2VydCBtb2RlCisgKiBJbnB1dDoKKyAqICAgICAgcE1vZGUgLSAwOiBpbnNlcnQgdG8gYWxsIHBhY2tldHM7IDE6IGluc2VydCB0byB0cmFwcGVkIHBhY2tldHM7IDI6IGRvbid0IGluc2VydAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0NwdXRhZ0luc2VydE1vZGUocnRrX3VpbnQzMiAqcE1vZGUpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19DUFVfQ1RSTCwgUlRMODM2N0NfQ1BVX0lOU0VSVE1PREVfTUFTSywgcE1vZGUpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0NwdXRhZ1ByaW9yaXR5UmVtYXBwaW5nCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHF1ZXVlIGFzc2lnbm1lbnQgb2YgQ1BVIHBvcnQKKyAqIElucHV0OgorICogICAgICBzcmNQcmkgLSBpbnRlcm5hbCBwcmlvcml0eSAoMH43KQorICogICAgICBuZXdQcmkgLSBpbnRlcm5hbCBwcmlvcml0eSBhZnRlciByZW1hcHBpbmcgKDB+NykKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1FPU19JTlRfUFJJT1JJVFkgICAgIC0gSW52YWxpZCBwcmlvcml0eQorICogTm90ZToKKyAqICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNDcHV0YWdQcmlvcml0eVJlbWFwcGluZyhydGtfdWludDMyIHNyY1ByaSwgcnRrX3VpbnQzMiBuZXdQcmkpCit7CisgICAgaWYoKHNyY1ByaSA+IFJUTDgzNjdDX1BSSU1BWCkgfHwgKG5ld1ByaSA+IFJUTDgzNjdDX1BSSU1BWCkpCisgICAgICAgIHJldHVybiBSVF9FUlJfUU9TX0lOVF9QUklPUklUWTsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19RT1NfUFJJUE9SSVRZX1JFTUFQUElOR19JTl9DUFVfUkVHKHNyY1ByaSksIFJUTDgzNjdDX1FPU19QUklQT1JJVFlfUkVNQVBQSU5HX0lOX0NQVV9NQVNLKHNyY1ByaSksIG5ld1ByaSk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljQ3B1dGFnUHJpb3JpdHlSZW1hcHBpbmcKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcXVldWUgYXNzaWdubWVudCBvZiBDUFUgcG9ydAorICogSW5wdXQ6CisgKiAgICAgIHNyY1ByaSAtIGludGVybmFsIHByaW9yaXR5ICgwfjcpCisgKiAgICAgIHBOZXdQcmkgLSBpbnRlcm5hbCBwcmlvcml0eSBhZnRlciByZW1hcHBpbmcgKDB+NykKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1FPU19JTlRfUFJJT1JJVFkgICAgIC0gSW52YWxpZCBwcmlvcml0eQorICogTm90ZToKKyAqICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNDcHV0YWdQcmlvcml0eVJlbWFwcGluZyhydGtfdWludDMyIHNyY1ByaSwgcnRrX3VpbnQzMiAqcE5ld1ByaSkKK3sKKyAgICBpZihzcmNQcmkgPiBSVEw4MzY3Q19QUklNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUU9TX0lOVF9QUklPUklUWTsKKworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19RT1NfUFJJUE9SSVRZX1JFTUFQUElOR19JTl9DUFVfUkVHKHNyY1ByaSksIFJUTDgzNjdDX1FPU19QUklQT1JJVFlfUkVNQVBQSU5HX0lOX0NQVV9NQVNLKHNyY1ByaSksIHBOZXdQcmkpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0NwdXRhZ1Bvc2l0aW9uCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IGNwdSB0YWcgaW5zZXJ0IHBvc2l0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgcG9zdGlvbiAtIDE6IEFmdGVyIGVudGlyZSBwYWNrZXQoYmVmb3JlIENSQyBmaWVsZCksIDA6IEFmdGVyIE1BQ19TQSAoRGVmYXVsdCkKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljQ3B1dGFnUG9zaXRpb24ocnRrX3VpbnQzMiBwb3N0aW9uKQoreworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19DUFVfQ1RSTCwgUlRMODM2N0NfQ1BVX1RBR19QT1NJVElPTl9PRkZTRVQsIHBvc3Rpb24pOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0NwdXRhZ1Bvc2l0aW9uCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGNwdSB0YWcgaW5zZXJ0IHBvc2l0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgcFBvc3Rpb24gLSAxOiBBZnRlciBlbnRpcmUgcGFja2V0KGJlZm9yZSBDUkMgZmllbGQpLCAwOiBBZnRlciBNQUNfU0EgKERlZmF1bHQpCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0NwdXRhZ1Bvc2l0aW9uKHJ0a191aW50MzIqIHBQb3N0aW9uKQoreworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19DUFVfQ1RSTCwgUlRMODM2N0NfQ1BVX1RBR19QT1NJVElPTl9PRkZTRVQsIHBQb3N0aW9uKTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0NwdXRhZ01vZGUKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgY3B1IHRhZyBtb2RlCisgKiBJbnB1dDoKKyAqICAgICAgbW9kZSAtIDE6IDRieXRlcyBtb2RlLCAwOiA4Ynl0ZXMgbW9kZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMKKyAqIE5vdGU6CisgKiAgICAgIElmIENQVSB0YWcgZnVuY3Rpb24gaXMgZGlzYWJsZWQsIENQVSB0YWcgd2lsbCBub3QgYmUgYWRkZWQgdG8gZnJhbWUKKyAqICAgICAgZm9yd2FyZGVkIHRvIENQVSBwb3J0LCBhbmQgYWxsIHBvcnRzIGNhbm5vdCBwYXJzZSBDUFUgdGFnLgorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljQ3B1dGFnTW9kZShydGtfdWludDMyIG1vZGUpCit7CisgICAgaWYobW9kZSA+IDEpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfQ1BVX0NUUkwsIFJUTDgzNjdDX0NQVV9UQUdfRk9STUFUX09GRlNFVCwgbW9kZSk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljQ3B1dGFnTW9kZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBjcHUgdGFnIG1vZGUKKyAqIElucHV0OgorICogICAgICBwTW9kZSAtIDE6IDRieXRlcyBtb2RlLCAwOiA4Ynl0ZXMgbW9kZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljQ3B1dGFnTW9kZShydGtfdWludDMyICpwTW9kZSkKK3sKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfQ1BVX0NUUkwsIFJUTDgzNjdDX0NQVV9UQUdfRk9STUFUX09GRlNFVCwgcE1vZGUpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0NwdXRhZ1J4TWluTGVuZ3RoCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IGNwdSB0YWcgbW9kZQorICogSW5wdXQ6CisgKiAgICAgIG1vZGUgLSAxOiA2NGJ5dGVzLCAwOiA3MmJ5dGVzCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycworICogTm90ZToKKyAqICAgICAgSWYgQ1BVIHRhZyBmdW5jdGlvbiBpcyBkaXNhYmxlZCwgQ1BVIHRhZyB3aWxsIG5vdCBiZSBhZGRlZCB0byBmcmFtZQorICogICAgICBmb3J3YXJkZWQgdG8gQ1BVIHBvcnQsIGFuZCBhbGwgcG9ydHMgY2Fubm90IHBhcnNlIENQVSB0YWcuCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNDcHV0YWdSeE1pbkxlbmd0aChydGtfdWludDMyIG1vZGUpCit7CisgICAgaWYobW9kZSA+IDEpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfQ1BVX0NUUkwsIFJUTDgzNjdDX0NQVV9UQUdfUlhCWVRFQ09VTlRfT0ZGU0VULCBtb2RlKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNDcHV0YWdSeE1pbkxlbmd0aAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBjcHUgdGFnIG1vZGUKKyAqIElucHV0OgorICogICAgICBwTW9kZSAtIDE6IDY0Ynl0ZXMsIDA6IDcyYnl0ZXMKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0NwdXRhZ1J4TWluTGVuZ3RoKHJ0a191aW50MzIgKnBNb2RlKQoreworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19DUFVfQ1RSTCwgUlRMODM2N0NfQ1BVX1RBR19SWEJZVEVDT1VOVF9PRkZTRVQsIHBNb2RlKTsKK30KKworCisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X2RvdDF4LmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9kb3QxeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMTUzZTEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9kb3QxeC5jCkBAIC0wLDAgKzEsNDE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNzYzMDYgJAorICogJERhdGU6IDIwMTctMDMtMDggMTU6MTM6NTggKzA4MDAgKOmAseS4iSwgMDgg5LiJ5pyIIDIwMTcpICQKKyAqCisgKiBQdXJwb3NlIDogUlRMODM2N0Mgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJIGZvciBSVEw4MzY3QworICogRmVhdHVyZSA6IDgwMi4xWCByZWxhdGVkIGZ1bmN0aW9ucworICoKKyAqLworI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnZfZG90MXguaD4KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWMxeFBCRW5Db25maWcKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgODAyLjF4IHBvcnQtYmFzZWQgcG9ydCBlbmFibGUgY29uZmlndXJhdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH43KQorICogICAgICBlbmFibGVkIC0gMTogZW5hYmxlZCwgMDogZGlzYWJsZWQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljMXhQQkVuQ29uZmlnKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBlbmFibGVkKQoreworICAgIGlmKHBvcnQgPj0gUlRMODM2N0NfUE9SVE5PKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19ET1QxWF9QT1JUX0VOQUJMRV9SRUcsIHBvcnQsIGVuYWJsZWQpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpYzF4UEJFbkNvbmZpZworICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCA4MDIuMXggcG9ydC1iYXNlZCBwb3J0IGVuYWJsZSBjb25maWd1cmF0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjcpCisgKiAgICAgIHBFbmFibGVkIC0gMTogZW5hYmxlZCwgMDogZGlzYWJsZWQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljMXhQQkVuQ29uZmlnKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcEVuYWJsZWQpCit7CisgICAgaWYocG9ydCA+PSBSVEw4MzY3Q19QT1JUTk8pCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX0RPVDFYX1BPUlRfRU5BQkxFX1JFRywgcG9ydCwgcEVuYWJsZWQpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpYzF4UEJBdXRoQ29uZmlnCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IDgwMi4xeCBwb3J0LWJhc2VkIGF1dGhvcmlzZWQgcG9ydCBjb25maWd1cmF0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjcpCisgKiAgICAgIGF1dGggICAgLSAxOiBhdXRob3Jpc2VkLCAwOiBub24tYXV0aG9yaXNlZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWMxeFBCQXV0aENvbmZpZyhydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgYXV0aCkKK3sKKyAgICBpZihwb3J0ID49IFJUTDgzNjdDX1BPUlROTykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfRE9UMVhfUE9SVF9BVVRIX1JFRywgcG9ydCwgYXV0aCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljMXhQQkF1dGhDb25maWcKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgODAyLjF4IHBvcnQtYmFzZWQgYXV0aG9yaXNlZCBwb3J0IGNvbmZpZ3VyYXRpb24KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgcEF1dGggICAtIDE6IGF1dGhvcmlzZWQsIDA6IG5vbi1hdXRob3Jpc2VkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpYzF4UEJBdXRoQ29uZmlnKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcEF1dGgpCit7CisgICAgaWYocG9ydCA+PSBSVEw4MzY3Q19QT1JUTk8pCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX0RPVDFYX1BPUlRfQVVUSF9SRUcsIHBvcnQsIHBBdXRoKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWMxeFBCT3BkaXJDb25maWcKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgODAyLjF4IHBvcnQtYmFzZWQgb3BlcmF0aW9uYWwgZGlyZWN0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjcpCisgKiAgICAgIG9wZGlyICAgLSBPcGVyYXRpb24gZGlyZWN0aW9uIDE6IElOLCAwOkJPVEgKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljMXhQQk9wZGlyQ29uZmlnKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBvcGRpcikKK3sKKyAgICBpZihwb3J0ID49IFJUTDgzNjdDX1BPUlROTykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfRE9UMVhfUE9SVF9PUERJUl9SRUcsIHBvcnQsIG9wZGlyKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWMxeFBCT3BkaXJDb25maWcKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgODAyLjF4IHBvcnQtYmFzZWQgb3BlcmF0aW9uYWwgZGlyZWN0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjcpCisgKiAgICAgIHBPcGRpciAgLSBPcGVyYXRpb24gZGlyZWN0aW9uIDE6IElOLCAwOkJPVEgKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljMXhQQk9wZGlyQ29uZmlnKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiogcE9wZGlyKQoreworICAgIGlmKHBvcnQgPj0gUlRMODM2N0NfUE9SVE5PKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19ET1QxWF9QT1JUX09QRElSX1JFRywgcG9ydCwgcE9wZGlyKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWMxeE1CRW5Db25maWcKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgODAyLjF4IG1hYy1iYXNlZCBwb3J0IGVuYWJsZSBjb25maWd1cmF0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjcpCisgKiAgICAgIGVuYWJsZWQgLSAxOiBlbmFibGVkLCAwOiBkaXNhYmxlZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWMxeE1CRW5Db25maWcocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGVuYWJsZWQpCit7CisgICAgaWYocG9ydCA+PSBSVEw4MzY3Q19QT1JUTk8pCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX0RPVDFYX01BQ19FTkFCTEVfUkVHLCBwb3J0LCBlbmFibGVkKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWMxeE1CRW5Db25maWcKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgODAyLjF4IG1hYy1iYXNlZCBwb3J0IGVuYWJsZSBjb25maWd1cmF0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjcpCisgKiAgICAgIHBFbmFibGVkIC0gMTogZW5hYmxlZCwgMDogZGlzYWJsZWQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljMXhNQkVuQ29uZmlnKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcEVuYWJsZWQpCit7CisgICAgaWYocG9ydCA+PSBSVEw4MzY3Q19QT1JUTk8pCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX0RPVDFYX01BQ19FTkFCTEVfUkVHLCBwb3J0LCBwRW5hYmxlZCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljMXhNQk9wZGlyQ29uZmlnCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IDgwMi4xeCBtYWMtYmFzZWQgb3BlcmF0aW9uYWwgZGlyZWN0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgb3BkaXIgICAgICAgLSBPcGVyYXRpb24gZGlyZWN0aW9uIDE6IElOLCAwOkJPVEgKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWMxeE1CT3BkaXJDb25maWcocnRrX3VpbnQzMiBvcGRpcikKK3sKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19ET1QxWF9DRkdfUkVHLCBSVEw4MzY3Q19ET1QxWF9NQUNfT1BESVJfT0ZGU0VULCBvcGRpcik7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljMXhNQk9wZGlyQ29uZmlnCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IDgwMi4xeCBtYWMtYmFzZWQgb3BlcmF0aW9uYWwgZGlyZWN0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgcE9wZGlyICAgICAgLSBPcGVyYXRpb24gZGlyZWN0aW9uIDE6IElOLCAwOkJPVEgKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWMxeE1CT3BkaXJDb25maWcocnRrX3VpbnQzMiAqcE9wZGlyKQoreworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX0RPVDFYX0NGR19SRUcsIFJUTDgzNjdDX0RPVDFYX01BQ19PUERJUl9PRkZTRVQsIHBPcGRpcik7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljMXhQcm9jQ29uZmlnCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IDgwMi4xeCB1bmF1dGguIGJlaGF2aW9yIGNvbmZpZ3VyYXRpb24KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgcHJvYyAgICAtIDgwMi4xeCB1bmF1dGguIGJlaGF2aW9yIGNvbmZpZ3VyYXRpb24gMDpkcm9wIDE6dHJhcCB0byBDUFUgMjpHdWVzdCBWTEFOCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqICAgICAgUlRfRVJSX0RPVDFYX1BST0MgICAtIFVuYXV0aG9yaXplZCBiZWhhdmlvciBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljMXhQcm9jQ29uZmlnKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBwcm9jKQoreworCisgICAgaWYocG9ydCA+PSBSVEw4MzY3Q19QT1JUTk8pCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIGlmKHByb2MgPj0gRE9UMVhfVU5BVVRIX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9ET1QxWF9QUk9DOworCisgICAgaWYocG9ydCA8IDgpCisgICAgeworICAgICAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfRE9UMVhfVU5BVVRIX0FDVF9CQVNFLCBSVEw4MzY3Q19ET1QxWF9VTkFVVEhfQUNUX01BU0socG9ydCkscHJvYyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfRE9UMVhfVU5BVVRIX0FDVF9XMSwgUlRMODM2N0NfRE9UMVhfVU5BVVRIX0FDVF9NQVNLKHBvcnQpLHByb2MpOworICAgIH0KK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWMxeFByb2NDb25maWcKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgODAyLjF4IHVuYXV0aC4gYmVoYXZpb3IgY29uZmlndXJhdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH43KQorICogICAgICBwUHJvYyAgIC0gODAyLjF4IHVuYXV0aC4gYmVoYXZpb3IgY29uZmlndXJhdGlvbiAwOmRyb3AgMTp0cmFwIHRvIENQVSAyOkd1ZXN0IFZMQU4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljMXhQcm9jQ29uZmlnKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiogcFByb2MpCit7CisgICAgaWYocG9ydCA+PSBSVEw4MzY3Q19QT1JUTk8pCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIGlmKHBvcnQgPCA4KQorICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19ET1QxWF9VTkFVVEhfQUNUX0JBU0UsIFJUTDgzNjdDX0RPVDFYX1VOQVVUSF9BQ1RfTUFTSyhwb3J0KSxwUHJvYyk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0RPVDFYX1VOQVVUSF9BQ1RfVzEsIFJUTDgzNjdDX0RPVDFYX1VOQVVUSF9BQ1RfTUFTSyhwb3J0KSxwUHJvYyk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljMXhHdWVzdFZpZHgKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgODAyLjF4IGd1ZXN0IHZsYW4gaW5kZXgKKyAqIElucHV0OgorICogICAgICBpbmRleCAgIC0gODAyLjF4IGd1ZXN0IHZsYW4gaW5kZXggKDB+MzEpCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfRE9UMVhfR1ZMQU5JRFggICAtIEludmFsaWQgY3ZpZCBpbmRleAorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljMXhHdWVzdFZpZHgocnRrX3VpbnQzMiBpbmRleCkKK3sKKyAgICBpZihpbmRleCA+PSBSVEw4MzY3Q19DVklEWE5PKQorICAgICAgICByZXR1cm4gUlRfRVJSX0RPVDFYX0dWTEFOSURYOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX0RPVDFYX0NGR19SRUcsIFJUTDgzNjdDX0RPVDFYX0dWSURYX01BU0ssIGluZGV4KTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWMxeEd1ZXN0VmlkeAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCA4MDIuMXggZ3Vlc3QgdmxhbiBpbmRleAorICogSW5wdXQ6CisgKiAgICAgIHBJbmRleCAgLSA4MDIuMXggZ3Vlc3QgdmxhbiBpbmRleCAoMH4zMSkKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWMxeEd1ZXN0VmlkeChydGtfdWludDMyICpwSW5kZXgpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX0RPVDFYX0NGR19SRUcsIFJUTDgzNjdDX0RPVDFYX0dWSURYX01BU0ssIHBJbmRleCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljMXhHVk9wZGlyCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IDgwMi4xeCBndWVzdCB2bGFuIHRhbGsgdG8gYXV0aC4gREEKKyAqIElucHV0OgorICogICAgICBlbmFibGVkICAgICAtIDA6ZGlzYWJsZSAxOmVuYWJsZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpYzF4R1ZPcGRpcihydGtfdWludDMyIGVuYWJsZWQpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfRE9UMVhfQ0ZHX1JFRywgUlRMODM2N0NfRE9UMVhfR1ZPUERJUl9PRkZTRVQsIGVuYWJsZWQpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpYzF4R1ZPcGRpcgorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCA4MDIuMXggZ3Vlc3QgdmxhbiB0YWxrIHRvIGF1dGguIERBCisgKiBJbnB1dDoKKyAqICAgICAgcEVuYWJsZWQgICAgICAgIC0gMDpkaXNhYmxlIDE6ZW5hYmxlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljMXhHVk9wZGlyKHJ0a191aW50MzIgKnBFbmFibGVkKQoreworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX0RPVDFYX0NGR19SRUcsIFJUTDgzNjdDX0RPVDFYX0dWT1BESVJfT0ZGU0VULCBwRW5hYmxlZCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljMXhUcmFwUHJpb3JpdHkKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgODAyLjF4IFRyYXAgcHJpb3JpdHkKKyAqIElucHV0OgorICogICAgICBwcmlvcml0eSAgICAtIHByaW9yaXR5ICgwfjcpCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUU9TX0lOVF9QUklPUklUWSAtIEludmFsaWQgcHJpb3JpdHkKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpYzF4VHJhcFByaW9yaXR5KHJ0a191aW50MzIgcHJpb3JpdHkpCit7CisgICAgaWYocHJpb3JpdHkgPiBSVEw4MzY3Q19QUklNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUU9TX0lOVF9QUklPUklUWTsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfUU9TX1RSQVBfUFJJT1JJVFkwLCBSVEw4MzY3Q19ET1QxWF9QUklPUlRZX01BU0sscHJpb3JpdHkpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpYzF4VHJhcFByaW9yaXR5CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IDgwMi4xeCBUcmFwIHByaW9yaXR5CisgKiBJbnB1dDoKKyAqICAgICAgcFByaW9yaXR5ICAgLSBwcmlvcml0eSAoMH43KQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpYzF4VHJhcFByaW9yaXR5KHJ0a191aW50MzIgKnBQcmlvcml0eSkKK3sKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1FPU19UUkFQX1BSSU9SSVRZMCwgUlRMODM2N0NfRE9UMVhfUFJJT1JUWV9NQVNLLCBwUHJpb3JpdHkpOworfQorCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9lYXYuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X2Vhdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MGI3YzYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9lYXYuYwpAQCAtMCwwICsxLDg3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiAkUmV2aXNpb246IDc2MzA2ICQKKyAqICREYXRlOiAyMDE3LTAzLTA4IDE1OjEzOjU4ICswODAwICjpgLHkuIksIDA4IOS4ieaciCAyMDE3KSAkCisgKgorICogUHVycG9zZSA6IFJUTDgzNjdDIHN3aXRjaCBoaWdoLWxldmVsIEFQSSBmb3IgUlRMODM2N0MKKyAqIEZlYXR1cmUgOiBFdGhlcm5ldCBBViByZWxhdGVkIGZ1bmN0aW9ucworICoKKyAqLworCisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl9lYXYuaD4KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNFYXZNYWNBZGRyZXNzCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IFBUUCBNQUMgYWRkcmVzcworICogSW5wdXQ6CisgKiAgICAgIG1hYyAgICAgLSBQVFAgbWFjCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0Vhdk1hY0FkZHJlc3MoZXRoZXJfYWRkcl90IG1hYykKK3sKKyAgICByZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiByZWdEYXRhOworICAgIHJ0a191aW50OCAqYWNjZXNzUHRyOworICAgIHJ0a191aW50MzIgaTsKKworICAgIGFjY2Vzc1B0ciA9ICAocnRrX3VpbnQ4KikmbWFjOworCisgICAgcmVnRGF0YSA9ICphY2Nlc3NQdHI7CisgICAgYWNjZXNzUHRyICsrOworICAgIHJlZ0RhdGEgPSAocmVnRGF0YSA8PCA4KSB8ICphY2Nlc3NQdHI7CisgICAgYWNjZXNzUHRyICsrOworICAgIGZvcihpID0gMDsgaSA8PTI7IGkrKykKKyAgICB7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX01BQ19BRERSX0ggLSBpLCByZWdEYXRhKTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgcmVnRGF0YSA9ICphY2Nlc3NQdHI7CisgICAgICAgIGFjY2Vzc1B0ciArKzsKKyAgICAgICAgcmVnRGF0YSA9IChyZWdEYXRhIDw8IDgpIHwgKmFjY2Vzc1B0cjsKKyAgICAgICAgYWNjZXNzUHRyICsrOworICAgIH0KKworICAgIHJldHVybiByZXRWYWw7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljRWF2TWFjQWRkcmVzcworICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBQVFAgTUFDIGFkZHJlc3MKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBNYWMgICAgIC0gUFRQICBtYWMKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0Vhdk1hY0FkZHJlc3MoZXRoZXJfYWRkcl90ICpwTWFjKQoreworICAgIHJldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHJlZ0RhdGE7CisgICAgcnRrX3VpbnQ4ICphY2Nlc3NQdHI7CisgICAgcnRrX3VpbnQzMiBpOworCisgICAgYWNjZXNzUHRyID0gKHJ0a191aW50OCopcE1hYzsKKworICAgIGZvcihpID0gMDsgaSA8PSAyOyBpKyspCisgICAgeworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19NQUNfQUREUl9IIC0gaSwgJnJlZ0RhdGEpOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAqYWNjZXNzUHRyID0gKHJlZ0RhdGEgJiAweEZGMDApID4+IDg7CisgICAgICAgIGFjY2Vzc1B0ciArKzsKKyAgICAgICAgKmFjY2Vzc1B0ciA9IHJlZ0RhdGEgJiAweEZGOworICAgICAgICBhY2Nlc3NQdHIgKys7CisgICAgfQorCisgICAgcmV0dXJuIHJldFZhbDsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0VhdlRwaWQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgUFRQIHBhcnNlciB0YWcgVFBJRC4KKyAqIElucHV0OgorICogICAgICAgb3V0ZXJUYWcgLSBvdXR0ZXIgdGFnIFRQSUQKKyAqICAgICAgIGlubmVyVGFnICAtIGlubmVyIHRhZyBUUElECisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNFYXZUcGlkKHJ0a191aW50MzIgb3V0ZXJUYWcsIHJ0a191aW50MzIgaW5uZXJUYWcpCit7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX09UQUdfVFBJRCwgb3V0ZXJUYWcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX0lUQUdfVFBJRCwgaW5uZXJUYWcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0VhdlRwaWQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgUFRQIHBhcnNlciB0YWcgVFBJRC4KKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgICBwT3V0ZXJUYWcgLSBvdXR0ZXIgdGFnIFRQSUQKKyAqICAgICAgIHBJbm5lclRhZyAgLSBpbm5lciB0YWcgVFBJRAorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNFYXZUcGlkKHJ0a191aW50MzIqIHBPdXRlclRhZywgcnRrX3VpbnQzMiogcElubmVyVGFnKQoreworICAgIHJldF90IHJldFZhbDsKKworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19PVEFHX1RQSUQsIHBPdXRlclRhZykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfSVRBR19UUElELCBwSW5uZXJUYWcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljRWF2U3lzVGltZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBQVFAgc3lzdGVtIHRpbWUKKyAqIElucHV0OgorICogICAgICBzZWNvbmQgLSBzZWNvbmRzCisgKiAgICAgIG5hbm9TZWNvbmQgLSBuYW5vIHNlY29uZHMKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIFRoZSB0aW1lIGdyYW51YWxpdHkgaXMgOCBuYW5vIHNlY29uZHMuCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNFYXZTeXNUaW1lKHJ0a191aW50MzIgc2Vjb25kLCBydGtfdWludDMyIG5hbm9TZWNvbmQpCit7CisgICAgcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgc2VjX2gsIHNlY19sLCBuc2VjOF9oLCBuc2VjOF9sOworICAgIHJ0a191aW50MzIgbmFub19zZWNvbmRfODsKKyAgICBydGtfdWludDMyIHJlZ0RhdGEsIGJ1c3lGbGFnLCBjb3VudDsKKworICAgIGlmKG5hbm9TZWNvbmQgPiBSVEw4MzY3Q19FQVZfTkFOT1NFQ09ORE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIHJlZ0RhdGEgPSAwOworICAgIHNlY19oID0gc2Vjb25kID4+MTY7CisgICAgc2VjX2wgPSBzZWNvbmQgJiAweEZGRkY7CisgICAgbmFub19zZWNvbmRfOCA9IG5hbm9TZWNvbmQgPj4gMzsKKyAgICBuc2VjOF9oID0gKG5hbm9fc2Vjb25kXzggPj4xNikgJiBSVEw4MzY3Q19QVFBfVElNRV9OU0VDX0hfTlNFQ19NQVNLOworICAgIG5zZWM4X2wgPSBuYW5vX3NlY29uZF84ICYweEZGRkY7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfUFRQX1RJTUVfU0VDX0hfU0VDLCBzZWNfaCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfUFRQX1RJTUVfU0VDX0xfU0VDLCBzZWNfbCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfUFRQX1RJTUVfTlNFQ19MX05TRUMsIG5zZWM4X2wpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZWdEYXRhID0gbnNlYzhfaCB8IChQVFBfVElNRV9XUklURTw8UlRMODM2N0NfUFRQX1RJTUVfTlNFQ19IX0NNRF9PRkZTRVQpIHwgUlRMODM2N0NfUFRQX1RJTUVfTlNFQ19IX0VYRUNfTUFTSzsKKworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19QVFBfVElNRV9OU0VDX0hfTlNFQywgcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGNvdW50ID0gMDsKKyAgICBkbyB7CisgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19QVFBfVElNRV9OU0VDX0hfTlNFQywgUlRMODM2N0NfUFRQX1RJTUVfTlNFQ19IX0VYRUNfT0ZGU0VULCAmYnVzeUZsYWcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICBjb3VudCsrOworICAgIH0gd2hpbGUgKChidXN5RmxhZyAhPSAwKSYmKGNvdW50PDUpKTsKKworICAgIGlmIChidXN5RmxhZyAhPSAwKQorICAgICAgICByZXR1cm4gUlRfRVJSX0JVU1lXQUlUX1RJTUVPVVQ7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljRWF2U3lzVGltZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBQVFAgc3lzdGVtIHRpbWUKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHNlY29uZCAtIHNlY29uZHMKKyAqICAgICAgbmFub1NlY29uZCAtIG5hbm8gc2Vjb25kcworICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIFRoZSB0aW1lIGdyYW51YWxpdHkgaXMgOCBuYW5vIHNlY29uZHMuCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNFYXZTeXNUaW1lKHJ0a191aW50MzIqIHBTZWNvbmQsIHJ0a191aW50MzIqIHBOYW5vU2Vjb25kKQoreworICAgIHJldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHNlY19oLCBzZWNfbCwgbnNlYzhfaCwgbnNlYzhfbDsKKyAgICBydGtfdWludDMyIG5hbm9fc2Vjb25kXzg7CisgICAgcnRrX3VpbnQzMiByZWdEYXRhLCBidXN5RmxhZywgY291bnQ7CisKKyAgICByZWdEYXRhID0gMDsKKyAgICByZWdEYXRhID0gKFBUUF9USU1FX1JFQUQ8PFJUTDgzNjdDX1BUUF9USU1FX05TRUNfSF9DTURfT0ZGU0VUKSB8IFJUTDgzNjdDX1BUUF9USU1FX05TRUNfSF9FWEVDX01BU0s7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfUFRQX1RJTUVfTlNFQ19IX05TRUMsIHJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBjb3VudCA9IDA7CisgICAgZG8geworICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfUFRQX1RJTUVfTlNFQ19IX05TRUMsIFJUTDgzNjdDX1BUUF9USU1FX05TRUNfSF9FWEVDX09GRlNFVCwgJmJ1c3lGbGFnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgY291bnQrKzsKKyAgICB9IHdoaWxlICgoYnVzeUZsYWcgIT0gMCkmJihjb3VudDw1KSk7CisKKyAgICBpZiAoYnVzeUZsYWcgIT0gMCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9CVVNZV0FJVF9USU1FT1VUOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfUkVHX1BUUF9USU1FX1NFQ19IX1NFQ19SRCwgJnNlY19oKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19QVFBfVElNRV9TRUNfTF9TRUNfUkQsICZzZWNfbCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1BUUF9USU1FX05TRUNfSF9OU0VDX1JELCBSVEw4MzY3Q19QVFBfVElNRV9OU0VDX0hfTlNFQ19SRF9NQVNLLCZuc2VjOF9oKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19QVFBfVElNRV9OU0VDX0xfTlNFQ19SRCwgJm5zZWM4X2wpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAqcFNlY29uZCA9IChzZWNfaDw8MTYpIHwgc2VjX2w7CisgICAgbmFub19zZWNvbmRfOCA9IChuc2VjOF9oPDwxNikgfCBuc2VjOF9sOworICAgICpwTmFub1NlY29uZCA9IG5hbm9fc2Vjb25kXzg8PDM7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNFYXZTeXNUaW1lQWRqdXN0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IFBUUCBzeXN0ZW0gdGltZSBhZGp1c3QKKyAqIElucHV0OgorICogICAgICB0eXBlIC0gaW5jcmVzYWUgb3IgZGVjcmVhc2UKKyAqICAgICAgc2Vjb25kIC0gc2Vjb25kcworICogICAgICBuYW5vU2Vjb25kIC0gbmFubyBzZWNvbmRzCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBFdGhlcm5ldCBBViBzZWNvbmQgb2Zmc2V0IG9mIHRpbWVyIGZvciB0dW5pbmcKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0VhdlN5c1RpbWVBZGp1c3QocnRrX3VpbnQzMiB0eXBlLCBydGtfdWludDMyIHNlY29uZCwgcnRrX3VpbnQzMiBuYW5vU2Vjb25kKQoreworICAgIHJldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHNlY19oLCBzZWNfbCwgbnNlYzhfaCwgbnNlYzhfbDsKKyAgICBydGtfdWludDMyIG5hbm9fc2Vjb25kXzg7CisgICAgcnRrX3VpbnQzMiByZWdEYXRhLCBidXN5RmxhZywgY291bnQ7CisKKyAgICBpZiAodHlwZSA+PSBQVFBfVElNRV9BREpfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworICAgIGlmKG5hbm9TZWNvbmQgPiBSVEw4MzY3Q19FQVZfTkFOT1NFQ09ORE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIHJlZ0RhdGEgPSAwOworICAgIHNlY19oID0gc2Vjb25kID4+MTY7CisgICAgc2VjX2wgPSBzZWNvbmQgJiAweEZGRkY7CisgICAgbmFub19zZWNvbmRfOCA9IG5hbm9TZWNvbmQgPj4gMzsKKyAgICBuc2VjOF9oID0gKG5hbm9fc2Vjb25kXzggPj4xNikgJiBSVEw4MzY3Q19QVFBfVElNRV9OU0VDX0hfTlNFQ19NQVNLOworICAgIG5zZWM4X2wgPSBuYW5vX3NlY29uZF84ICYweEZGRkY7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfUFRQX1RJTUVfU0VDX0hfU0VDLCBzZWNfaCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfUFRQX1RJTUVfU0VDX0xfU0VDLCBzZWNfbCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfUFRQX1RJTUVfTlNFQ19MX05TRUMsIG5zZWM4X2wpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoUFRQX1RJTUVfQURKX0lOQyA9PSB0eXBlKQorICAgICAgICByZWdEYXRhID0gbnNlYzhfaCB8IChQVFBfVElNRV9JTkM8PFJUTDgzNjdDX1BUUF9USU1FX05TRUNfSF9DTURfT0ZGU0VUKSB8IFJUTDgzNjdDX1BUUF9USU1FX05TRUNfSF9FWEVDX01BU0s7CisgICAgZWxzZQorICAgICAgICByZWdEYXRhID0gbnNlYzhfaCB8IChQVFBfVElNRV9ERUM8PFJUTDgzNjdDX1BUUF9USU1FX05TRUNfSF9DTURfT0ZGU0VUKSB8IFJUTDgzNjdDX1BUUF9USU1FX05TRUNfSF9FWEVDX01BU0s7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfUFRQX1RJTUVfTlNFQ19IX05TRUMsIHJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBjb3VudCA9IDA7CisgICAgZG8geworICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfUFRQX1RJTUVfTlNFQ19IX05TRUMsIFJUTDgzNjdDX1BUUF9USU1FX05TRUNfSF9FWEVDX09GRlNFVCwgJmJ1c3lGbGFnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgY291bnQrKzsKKyAgICB9IHdoaWxlICgoYnVzeUZsYWcgIT0gMCkmJihjb3VudDw1KSk7CisKKyAgICBpZiAoYnVzeUZsYWcgIT0gMCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9CVVNZV0FJVF9USU1FT1VUOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0VhdlN5c1RpbWVDdHJsCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IFBUUCBzeXN0ZW0gdGltZSBjb250cm9sCisgKiBJbnB1dDoKKyAqICAgICAgY29tbWFuZCAtIHN0YXJ0IG9yIHN0b3AKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0VhdlN5c1RpbWVDdHJsKHJ0a191aW50MzIgY29udHJvbCkKK3sKKyAgICByZXRfdCAgcmV0VmFsOworICAgIHJ0a191aW50MzIgcmVnRGF0YTsKKworICAgIGlmIChjb250cm9sPj1QVFBfVElNRV9DVFJMX0VORCkKKyAgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICByZWdEYXRhID0gMDsKKyAgICBpZiAoUFRQX1RJTUVfQ1RSTF9TVEFSVCA9PSBjb250cm9sKQorICAgICAgICAgICAgcmVnRGF0YSA9IFJUTDgzNjdDX0NGR19USU1FUl9FTl9GUkNfTUFTSyB8IFJUTDgzNjdDX0NGR19USU1FUl8xNTg4X0VOX01BU0s7CisgICAgZWxzZQorICAgICAgICByZWdEYXRhID0gMDsKKworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19QVFBfVElNRV9DRkcsIHJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljRWF2U3lzVGltZUN0cmwKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgUFRQIHN5c3RlbSB0aW1lIGNvbnRyb2wKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBDb250cm9sIC0gc3RhcnQgb3Igc3RvcAorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0VhdlN5c1RpbWVDdHJsKHJ0a191aW50MzIqIHBDb250cm9sKQoreworICAgIHJldF90ICByZXRWYWw7CisgICAgcnRrX3VpbnQzMiByZWdEYXRhOworICAgIHJ0a191aW50MzIgbWFzazsKKworICAgIG1hc2sgPSBSVEw4MzY3Q19DRkdfVElNRVJfRU5fRlJDX01BU0sgfCBSVEw4MzY3Q19DRkdfVElNRVJfMTU4OF9FTl9NQVNLOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfUkVHX1BUUF9USU1FX0NGRywgJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiggKHJlZ0RhdGEgJiBtYXNrKSA9PSBtYXNrKQorICAgICAgICAqcENvbnRyb2wgPSBQVFBfVElNRV9DVFJMX1NUQVJUOworICAgIGVsc2UgaWYoIChyZWdEYXRhICYgbWFzaykgPT0gMCkKKyAgICAgICAgKnBDb250cm9sID0gUFRQX1RJTUVfQ1RSTF9TVE9QOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OT1RfQUxMT1dFRDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNFYXZJbnRlcnJ1cHRNYXNrCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IFBUUCBpbnRlcnJ1cHQgZW5hYmxlIG1hc2sKKyAqIElucHV0OgorICogICAgICBpbXIgICAgIC0gSW50ZXJydXB0IG1hc2sKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBbMF06VFhfU1lOQywKKyAqICAgICAgWzFdOlRYX0RFTEFZLAorICogICAgICBbMl06VFhfUERFTEFZX1JFUSwKKyAqICAgICAgWzNdOlRYX1BERUxBWV9SRVNQLAorICogICAgICBbNF06UlhfU1lOQywKKyAqICAgICAgWzVdOlJYX0RFTEFZLAorICogICAgICBbNl06UlhfUERFTEFZX1JFUSwKKyAqICAgICAgWzddOlJYX1BERUxBWV9SRVNQLAorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljRWF2SW50ZXJydXB0TWFzayhydGtfdWludDMyIGltcikKK3sKKyAgICBpZiAoKGltciYoUlRMODM2N0NfUFRQX0lOVFJfTUFTSzw8OCkpPjApCisgICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19QVFBfVElNRV9DRkcyLCBSVEw4MzY3Q19QVFBfSU5UUl9NQVNLLCBpbXIpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0VhdkludGVycnVwdE1hc2sKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgUFRQIGludGVycnVwdCBlbmFibGUgbWFzaworICogSW5wdXQ6CisgKiAgICAgIHBJbXIgICAgLSBJbnRlcnJ1cHQgbWFzaworICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIFswXTpUWF9TWU5DLAorICogICAgICBbMV06VFhfREVMQVksCisgKiAgICAgIFsyXTpUWF9QREVMQVlfUkVRLAorICogICAgICBbM106VFhfUERFTEFZX1JFU1AsCisgKiAgICAgIFs0XTpSWF9TWU5DLAorICogICAgICBbNV06UlhfREVMQVksCisgKiAgICAgIFs2XTpSWF9QREVMQVlfUkVRLAorICogICAgICBbN106UlhfUERFTEFZX1JFU1AsCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNFYXZJbnRlcnJ1cHRNYXNrKHJ0a191aW50MzIqIHBJbXIpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19QVFBfVElNRV9DRkcyLCBSVEw4MzY3Q19QVFBfSU5UUl9NQVNLLCBwSW1yKTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0VhdkludGVycnVwdFN0YXR1cworICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBQVFAgaW50ZXJydXB0IHBvcnQgc3RhdHVzIG1hc2sKKyAqIElucHV0OgorICogICAgICBwSW1zICAgIC0gSW50ZXJydXB0IG1hc2sKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBbMF06cDAgaW50ZXJydXB0LAorICogICAgICBbMV06cDEgaW50ZXJydXB0LAorICogICAgICBbMl06cDIgaW50ZXJydXB0LAorICogICAgICBbM106cDMgaW50ZXJydXB0LAorICogICAgICBbNF06cDQgaW50ZXJydXB0LAorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljRWF2SW50ZXJydXB0U3RhdHVzKHJ0a191aW50MzIqIHBJbXMpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19QVFBfSU5URVJSVVBUX0NGRywgUlRMODM2N0NfUFRQX1BPUlRfTUFTSywgcEltcyk7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNJbnRlcnJ1cHRNYXNrCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQ2xlYXIgaW50ZXJydXB0IGVuYWJsZSBtYXNrCisgKiBJbnB1dDoKKyAqICAgICAgaW1zICAgICAtIEludGVycnVwdCBzdGF0dXMgbWFzaworICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBiZSB1c2VkIHRvIGNsZWFyIEFTSUMgaW50ZXJydXB0IHN0YXR1cyBhbmQgcmVnaXN0ZXIgd2lsbCBiZSBjbGVhcmVkIGJ5IHdyaXR0aW5nIDEuCisgKiAgICAgIFswXTpUWF9TWU5DLAorICogICAgICBbMV06VFhfREVMQVksCisgKiAgICAgIFsyXTpUWF9QREVMQVlfUkVRLAorICogICAgICBbM106VFhfUERFTEFZX1JFU1AsCisgKiAgICAgIFs0XTpSWF9TWU5DLAorICogICAgICBbNV06UlhfREVMQVksCisgKiAgICAgIFs2XTpSWF9QREVMQVlfUkVRLAorICogICAgICBbN106UlhfUERFTEFZX1JFU1AsCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNFYXZQb3J0SW50ZXJydXB0U3RhdHVzKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBpbXMpCit7CisKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVE5PKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICBpZihwb3J0IDwgNSkKKyAgICAgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX0VBVl9QT1JUX0NGR19SRUcocG9ydCksIFJUTDgzNjdDX1BUUF9JTlRSX01BU0ssaW1zKTsKKyAgICBlbHNlIGlmKHBvcnQgPT0gNSkKKyAgICAgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19QNV9FQVZfQ0ZHLCBSVEw4MzY3Q19QVFBfSU5UUl9NQVNLLGltcyk7CisgICAgZWxzZSBpZihwb3J0ID09IDYpCisgICAgICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfUDZfRUFWX0NGRywgUlRMODM2N0NfUFRQX0lOVFJfTUFTSyxpbXMpOworICAgIGVsc2UgaWYocG9ydCA9PSA3KQorICAgICAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1A3X0VBVl9DRkcsIFJUTDgzNjdDX1BUUF9JTlRSX01BU0ssaW1zKTsKKyAgICBlbHNlIGlmKHBvcnQgPT0gOCkKKyAgICAgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19QOF9FQVZfQ0ZHLCBSVEw4MzY3Q19QVFBfSU5UUl9NQVNLLGltcyk7CisgICAgZWxzZSBpZihwb3J0ID09IDkpCisgICAgICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfUDlfRUFWX0NGRywgUlRMODM2N0NfUFRQX0lOVFJfTUFTSyxpbXMpOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNJbnRlcnJ1cHRTdGF0dXMKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgaW50ZXJydXB0IGVuYWJsZSBtYXNrCisgKiBJbnB1dDoKKyAqICAgICAgcEltcyAgICAtIEludGVycnVwdCBzdGF0dXMgbWFzaworICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIFswXTpUWF9TWU5DLAorICogICAgICBbMV06VFhfREVMQVksCisgKiAgICAgIFsyXTpUWF9QREVMQVlfUkVRLAorICogICAgICBbM106VFhfUERFTEFZX1JFU1AsCisgKiAgICAgIFs0XTpSWF9TWU5DLAorICogICAgICBbNV06UlhfREVMQVksCisgKiAgICAgIFs2XTpSWF9QREVMQVlfUkVRLAorICogICAgICBbN106UlhfUERFTEFZX1JFU1AsCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNFYXZQb3J0SW50ZXJydXB0U3RhdHVzKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiogcEltcykKK3sKKworICAgIGlmKHBvcnQgPiBSVEw4MzY3Q19QT1JUTk8pCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKyAgICBpZihwb3J0IDwgNSkKKyAgICAgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX0VBVl9QT1JUX0NGR19SRUcocG9ydCksIFJUTDgzNjdDX1BUUF9JTlRSX01BU0ssIHBJbXMpOworICAgIGVsc2UgaWYocG9ydCA9PSA1KQorICAgICAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1A1X0VBVl9DRkcsIFJUTDgzNjdDX1BUUF9JTlRSX01BU0ssIHBJbXMpOworICAgIGVsc2UgaWYocG9ydCA9PSA2KQorICAgICAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1A2X0VBVl9DRkcsIFJUTDgzNjdDX1BUUF9JTlRSX01BU0sscEltcyk7CisgICAgZWxzZSBpZihwb3J0ID09IDcpCisgICAgICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfUDdfRUFWX0NGRywgUlRMODM2N0NfUFRQX0lOVFJfTUFTSyxwSW1zKTsKKyAgICBlbHNlIGlmKHBvcnQgPT0gOCkKKyAgICAgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19QOF9FQVZfQ0ZHLCBSVEw4MzY3Q19QVFBfSU5UUl9NQVNLLHBJbXMpOworICAgIGVsc2UgaWYocG9ydCA9PSA5KQorICAgICAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1A5X0VBVl9DRkcsIFJUTDgzNjdDX1BUUF9JTlRSX01BU0sscEltcyk7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworCit9CisKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0VhdlBvcnRFbmFibGUKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgcGVyLXBvcnQgRUFWIGZ1bmN0aW9uIGVuYWJsZS9kaXNhYmxlCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+OSkKKyAqICAgICAgZW5hYmxlZCAgICAgLSAxOiBlbmFibGVkLCAwOiBkaXNhYmxlZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIElmIEVBViBmdW5jdGlvbiBpcyBlbmFibGVkLCBQVFAgZXZlbnQgbWVzc2dhZSBwYWNrZXQgd2lsbCBiZSBhdHRhY2hlZCBQVFAgdGltZXN0YW1wIGZvciB0cmFwcGluZworICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljRWF2UG9ydEVuYWJsZShydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgZW5hYmxlZCkKK3sKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVE5PKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICBpZihwb3J0IDwgNSkKKyAgICAgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfRUFWX1BPUlRfQ0ZHX1JFRyhwb3J0KSwgUlRMODM2N0NfRUFWX0NGR19QVFBfUEhZX0VOX0VOX09GRlNFVCwgZW5hYmxlZCk7CisgICAgZWxzZSBpZihwb3J0ID09IDUpCisgICAgICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19QNV9FQVZfQ0ZHLCBSVEw4MzY3Q19FQVZfQ0ZHX1BUUF9QSFlfRU5fRU5fT0ZGU0VULCBlbmFibGVkKTsKKyAgICBlbHNlIGlmKHBvcnQgPT0gNikKKyAgICAgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1A2X0VBVl9DRkcsIFJUTDgzNjdDX0VBVl9DRkdfUFRQX1BIWV9FTl9FTl9PRkZTRVQsIGVuYWJsZWQpOworICAgIGVsc2UgaWYocG9ydCA9PSA3KQorICAgICAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfUDdfRUFWX0NGRywgUlRMODM2N0NfRUFWX0NGR19QVFBfUEhZX0VOX0VOX09GRlNFVCwgZW5hYmxlZCk7CisgICAgZWxzZSBpZihwb3J0ID09IDgpCisgICAgICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19QOF9FQVZfQ0ZHLCBSVEw4MzY3Q19FQVZfQ0ZHX1BUUF9QSFlfRU5fRU5fT0ZGU0VULCBlbmFibGVkKTsKKyAgICBlbHNlIGlmKHBvcnQgPT0gOSkKKyAgICAgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1A5X0VBVl9DRkcsIFJUTDgzNjdDX0VBVl9DRkdfUFRQX1BIWV9FTl9FTl9PRkZTRVQsIGVuYWJsZWQpOworCisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0VhdlBvcnRFbmFibGUKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcGVyLXBvcnQgRUFWIGZ1bmN0aW9uIGVuYWJsZS9kaXNhYmxlCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+OSkKKyAqICAgICAgcEVuYWJsZWQgICAgIC0gMTogZW5hYmxlZCwgMDogZGlzYWJsZWQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNFYXZQb3J0RW5hYmxlKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcEVuYWJsZWQpCit7CisgICAgaWYocG9ydCA+IFJUTDgzNjdDX1BPUlROTykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisKKworICAgIGlmKHBvcnQgPCA1KQorICAgICAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19FQVZfUE9SVF9DRkdfUkVHKHBvcnQpLCBSVEw4MzY3Q19FQVZfQ0ZHX1BUUF9QSFlfRU5fRU5fT0ZGU0VULCBwRW5hYmxlZCk7CisgICAgZWxzZSBpZihwb3J0ID09IDUpCisgICAgICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19QNV9FQVZfQ0ZHLCBSVEw4MzY3Q19FQVZfQ0ZHX1BUUF9QSFlfRU5fRU5fT0ZGU0VULCBwRW5hYmxlZCk7CisgICAgZWxzZSBpZihwb3J0ID09IDYpCisgICAgICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19QNl9FQVZfQ0ZHLCBSVEw4MzY3Q19FQVZfQ0ZHX1BUUF9QSFlfRU5fRU5fT0ZGU0VULCBwRW5hYmxlZCk7CisgICAgZWxzZSBpZihwb3J0ID09IDcpCisgICAgICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19QN19FQVZfQ0ZHLCBSVEw4MzY3Q19FQVZfQ0ZHX1BUUF9QSFlfRU5fRU5fT0ZGU0VULCBwRW5hYmxlZCk7CisgICAgZWxzZSBpZihwb3J0ID09IDgpCisgICAgICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19QOF9FQVZfQ0ZHLCBSVEw4MzY3Q19FQVZfQ0ZHX1BUUF9QSFlfRU5fRU5fT0ZGU0VULCBwRW5hYmxlZCk7CisgICAgZWxzZSBpZihwb3J0ID09IDkpCisgICAgICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19QOV9FQVZfQ0ZHLCBSVEw4MzY3Q19FQVZfQ0ZHX1BUUF9QSFlfRU5fRU5fT0ZGU0VULCBwRW5hYmxlZCk7CisKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNFYXZQb3J0VGltZVN0YW1wCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFBUUCBwb3J0IHRpbWUgc3RhbXAKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH45KQorICogICAgICB0eXBlICAgICAtICBQVFAgcGFja2V0IHR5cGUKKyAqIE91dHB1dDoKKyAqICAgICAgdGltZVN0YW1wIC0gc2Vjb25kcworICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIFRoZSB0aW1lIGdyYW51YWxpdHkgaXMgOCBuYW5vIHNlY29uZHMuCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNFYXZQb3J0VGltZVN0YW1wKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiB0eXBlLCBydGw4MzY3Y19wdHBfdGltZV9zdGFtcF90KiB0aW1lU3RhbXApCit7CisgICAgcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgc2VjX2gsIHNlY19sLCBuc2VjOF9oLCBuc2VjOF9sOworICAgIHJ0a191aW50MzIgbmFub19zZWNvbmRfODsKKworICAgIGlmKHBvcnQgPiA5KQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisgICAgaWYodHlwZSA+PSBQVFBfUEtUX1RZUEVfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYocG9ydCA8IDUpeworICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfU0VRX0lEKHBvcnQsIHR5cGUpLCAmdGltZVN0YW1wLT5zZXF1ZW5jZV9pZCkpIT0gIFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19QT1JUX1NFQ19IKHBvcnQpICwgJnNlY19oKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfUE9SVF9TRUNfTChwb3J0KSwgJnNlY19sKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1BPUlRfTlNFQ19IKHBvcnQpICwgUlRMODM2N0NfUE9SVF9OU0VDX0hfTUFTSywmbnNlYzhfaCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfUkVHX1BPUlRfTlNFQ19MKHBvcnQpICwgJm5zZWM4X2wpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfWVsc2UgaWYocG9ydCA9PSA1KXsKKyAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfUkVHX1A1X1RYX1NZTkNfU0VRX0lEK3R5cGUsICZ0aW1lU3RhbXAtPnNlcXVlbmNlX2lkKSkhPSAgUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfUkVHX1A1X1BPUlRfU0VDXzMxXzE2LCAmc2VjX2gpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19QNV9QT1JUX1NFQ18xNV8wLCAmc2VjX2wpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfUDVfUE9SVF9OU0VDXzI2XzE2ICwgUlRMODM2N0NfUE9SVF9OU0VDX0hfTUFTSywmbnNlYzhfaCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfUkVHX1A1X1BPUlRfTlNFQ18xNV8wLCAmbnNlYzhfbCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9ZWxzZSBpZihwb3J0ID09IDYpeworICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfUDZfVFhfU1lOQ19TRVFfSUQrdHlwZSwgJnRpbWVTdGFtcC0+c2VxdWVuY2VfaWQpKSE9ICBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfUDZfUE9SVF9TRUNfMzFfMTYsICZzZWNfaCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfUkVHX1A2X1BPUlRfU0VDXzE1XzAsICZzZWNfbCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19QNl9QT1JUX05TRUNfMjZfMTYgLCBSVEw4MzY3Q19QT1JUX05TRUNfSF9NQVNLLCZuc2VjOF9oKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfUDZfUE9SVF9OU0VDXzE1XzAsICZuc2VjOF9sKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH1lbHNlIGlmKHBvcnQgPT0gNyl7CisgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19QN19UWF9TWU5DX1NFUV9JRCt0eXBlLCAmdGltZVN0YW1wLT5zZXF1ZW5jZV9pZCkpIT0gIFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19QN19QT1JUX1NFQ18zMV8xNiwgJnNlY19oKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfUDdfUE9SVF9TRUNfMTVfMCwgJnNlY19sKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1A3X1BPUlRfTlNFQ18yNl8xNiAsIFJUTDgzNjdDX1BPUlRfTlNFQ19IX01BU0ssJm5zZWM4X2gpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19QN19QT1JUX05TRUNfMTVfMCwgJm5zZWM4X2wpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfWVsc2UgaWYocG9ydCA9PSA4KXsKKyAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfUkVHX1A4X1RYX1NZTkNfU0VRX0lEK3R5cGUsICZ0aW1lU3RhbXAtPnNlcXVlbmNlX2lkKSkhPSAgUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfUkVHX1A4X1BPUlRfU0VDXzMxXzE2LCAmc2VjX2gpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19QOF9QT1JUX1NFQ18xNV8wLCAmc2VjX2wpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfUDhfUE9SVF9OU0VDXzI2XzE2ICwgUlRMODM2N0NfUE9SVF9OU0VDX0hfTUFTSywmbnNlYzhfaCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfUkVHX1A4X1BPUlRfTlNFQ18xNV8wLCAmbnNlYzhfbCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9ZWxzZSBpZihwb3J0ID09IDkpeworICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfUDlfVFhfU1lOQ19TRVFfSUQrdHlwZSwgJnRpbWVTdGFtcC0+c2VxdWVuY2VfaWQpKSE9ICBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfUDlfUE9SVF9TRUNfMzFfMTYsICZzZWNfaCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfUkVHX1A5X1BPUlRfU0VDXzE1XzAsICZzZWNfbCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19QOV9QT1JUX05TRUNfMjZfMTYgLCBSVEw4MzY3Q19QT1JUX05TRUNfSF9NQVNLLCZuc2VjOF9oKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfUDlfUE9SVF9OU0VDXzE1XzAsICZuc2VjOF9sKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKworICAgIHRpbWVTdGFtcC0+c2Vjb25kID0gKHNlY19oPDwxNikgfCBzZWNfbDsKKyAgICBuYW5vX3NlY29uZF84ID0gKG5zZWM4X2g8PDE2KSB8IG5zZWM4X2w7CisgICAgdGltZVN0YW1wLT5uYW5vX3NlY29uZCA9IG5hbm9fc2Vjb25kXzg8PDM7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNFYXZUcmFwCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHBlci1wb3J0IFBUUCBwYWNrZXQgdHJhcCB0byBDUFUKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH41KQorICogICAgICBlbmFibGVkICAgICAtIDE6IGVuYWJsZWQsIDA6IGRpc2FibGVkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgSWYgRUFWIHRyYXAgZW5hYmxlZCwgc3dpdGNoIHdpbGwgdHJhcCBQVFAgcGFja2V0IHRvIENQVQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljRWF2VHJhcChydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgZW5hYmxlZCkKK3sKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVE5PKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfUFRQX1BPUlQwX0NGRzEgKyAocG9ydCAqIDB4MjApLCBSVEw4MzY3Q19QVFBfUE9SVDBfQ0ZHMV9PRkZTRVQsIGVuYWJsZWQpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0VhdlRpbWVTeW5jRW4KKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcGVyLXBvcnQgRVBUUCBwYWNrZXQgdHJhcCB0byBDUFUKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH41KQorICogICAgICBwRW5hYmxlZCAgICAgLSAxOiBlbmFibGVkLCAwOiBkaXNhYmxlZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0VhdlRyYXAocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyICpwRW5hYmxlZCkKK3sKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVE5PKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfUFRQX1BPUlQwX0NGRzEgKyAocG9ydCAqIDB4MjApLCBSVEw4MzY3Q19QVFBfUE9SVDBfQ0ZHMV9PRkZTRVQsIHBFbmFibGVkKTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0VhdkVuYWJsZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwZXItcG9ydCBFQVYgZnVuY3Rpb24gZW5hYmxlL2Rpc2FibGUKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH41KQorICogICAgICBlbmFibGVkICAgICAtIDE6IGVuYWJsZWQsIDA6IGRpc2FibGVkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgSWYgRUFWIGZ1bmN0aW9uIGlzIGVuYWJsZWQsIFBUUCBldmVudCBtZXNzZ2FlIHBhY2tldCB3aWxsIGJlIGF0dGFjaGVkIFBUUCB0aW1lc3RhbXAgZm9yIHRyYXBwaW5nCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNFYXZFbmFibGUocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGVuYWJsZWQpCit7CisgICAgaWYocG9ydCA+IFJUTDgzNjdDX1BPUlROTykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0VBVl9DVFJMMCwgcG9ydCwgZW5hYmxlZCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljRWF2RW5hYmxlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHBlci1wb3J0IEVBViBmdW5jdGlvbiBlbmFibGUvZGlzYWJsZQorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjUpCisgKiAgICAgIHBFbmFibGVkICAgICAtIDE6IGVuYWJsZWQsIDA6IGRpc2FibGVkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljRWF2RW5hYmxlKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcEVuYWJsZWQpCit7CisgICAgaWYocG9ydCA+IFJUTDgzNjdDX1BPUlROTykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0VBVl9DVFJMMCwgcG9ydCwgcEVuYWJsZWQpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0VhdlByaVJlbWFwcGluZworICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBub24tRUFWIHN0cmVhbWluZyBwcmlvcml0eSByZW1hcHBpbmcKKyAqIElucHV0OgorICogICAgICBzcmNwcmlvcml0eSAtIFByaW9yaXR5IHZhbHVlCisgKiAgICAgIHByaW9yaXR5ICAgICAtIEFic29sdXRlIHByaW9yaXR5IHZhbHVlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1FPU19JTlRfUFJJT1JJVFkgICAgICAtIEludmFsaWQgcHJpb3JpdHkKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0VhdlByaVJlbWFwcGluZyhydGtfdWludDMyIHNyY3ByaW9yaXR5LCBydGtfdWludDMyIHByaW9yaXR5KQoreworICAgIGlmKHNyY3ByaW9yaXR5ID4gUlRMODM2N0NfUFJJTUFYIHx8IHByaW9yaXR5ID4gUlRMODM2N0NfUFJJTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1FPU19JTlRfUFJJT1JJVFk7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfRUFWX1BSSU9SSVRZX1JFTUFQUElOR19SRUcoc3JjcHJpb3JpdHkpLCBSVEw4MzY3Q19FQVZfUFJJT1JJVFlfUkVNQVBQSU5HX01BU0soc3JjcHJpb3JpdHkpLHByaW9yaXR5KTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNFYXZQcmlSZW1hcHBpbmcKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgbm9uLUVBViBzdHJlYW1pbmcgcHJpb3JpdHkgcmVtYXBwaW5nCisgKiBJbnB1dDoKKyAqICAgICAgc3JjcHJpb3JpdHkgLSBQcmlvcml0eSB2YWx1ZQorICogICAgICBwUHJpb3JpdHkgICAgIC0gQWJzb2x1dGUgcHJpb3JpdHkgdmFsdWUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUU9TX0lOVF9QUklPUklUWSAgICAgIC0gSW52YWxpZCBwcmlvcml0eQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljRWF2UHJpUmVtYXBwaW5nKHJ0a191aW50MzIgc3JjcHJpb3JpdHksIHJ0a191aW50MzIgKnBQcmlvcml0eSkKK3sKKyAgICBpZihzcmNwcmlvcml0eSA+IFJUTDgzNjdDX1BSSU1BWCApCisgICAgICAgIHJldHVybiBSVF9FUlJfUU9TX0lOVF9QUklPUklUWTsKKworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19FQVZfUFJJT1JJVFlfUkVNQVBQSU5HX1JFRyhzcmNwcmlvcml0eSksIFJUTDgzNjdDX0VBVl9QUklPUklUWV9SRU1BUFBJTkdfTUFTSyhzcmNwcmlvcml0eSkscFByaW9yaXR5KTsKK30KKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfZWVlLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9lZWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGRkYTZhCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfZWVlLmMKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogJFJldmlzaW9uOiA0ODk4OSAkCisgKiAkRGF0ZTogMjAxNC0wNy0wMSAxNTo0NToyNCArMDgwMCAo6YCx5LqMLCAwMSDkuIPmnIggMjAxNCkgJAorICoKKyAqIFB1cnBvc2UgOiBSVEw4MzcwIHN3aXRjaCBoaWdoLWxldmVsIEFQSSBmb3IgUlRMODM2N0MKKyAqIEZlYXR1cmUgOgorICoKKyAqLworCisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl9lZWUuaD4KKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2X3BoeS5oPgorCisvKgorQGZ1bmMgcmV0X3QgfCBydGw4MzY3Y19zZXRBc2ljRWVlMTAwTSB8IFNldCBlZWUgZm9yY2UgbW9kZSBmdW5jdGlvbiBlbmFibGUvZGlzYWJsZS4KK0BwYXJtIHJ0a191aW50MzIgfCBwb3J0IHwgVGhlIHBvcnQgbnVtYmVyLgorQHBhcm0gcnRrX3VpbnQzMiB8IGVuYWJsZWQgfCAxOiBlbmFibGVkLCAwOiBkaXNhYmxlZC4KK0BydmFsdWUgUlRfRVJSX09LIHwgU3VjY2Vzcy4KK0BydmFsdWUgUlRfRVJSX1NNSSB8IFNNSSBhY2Nlc3MgZXJyb3IuCitAcnZhbHVlIFJUX0VSUl9JTlBVVCB8IEludmFsaWQgaW5wdXQgcGFyYW1ldGVyLgorQGNvbW0KKyAgICBUaGlzIEFQSSBzZXQgdGhlIDEwME0gRUVFIGVuYWJsZSBmdW5jdGlvbi4KKworKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNFZWUxMDBNKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBlbmFibGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCAgIHJldFZhbDsKKyAgICBydGtfdWludDMyICAgICAgcmVnRGF0YTsKKworICAgIGlmKHBvcnQgPj0gUlRMODM2N0NfUE9SVE5PKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICBpZiAoZW5hYmxlID4gMSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUEhZT0NQUmVnKHBvcnQsIEVFRV9PQ1BfUEhZX0FERFIsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYoZW5hYmxlKQorICAgICAgICByZWdEYXRhIHw9ICgweDAwMDEgPDwgMSk7CisgICAgZWxzZQorICAgICAgICByZWdEYXRhICY9IH4oMHgwMDAxIDw8IDEpOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQSFlPQ1BSZWcocG9ydCwgRUVFX09DUF9QSFlfQUREUiwgcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qCitAZnVuYyByZXRfdCB8IHJ0bDgzNjdjX2dldEFzaWNFZWUxMDBNIHwgR2V0IDEwME0gZWVlIGVuYWJsZS9kaXNhYmxlLgorQHBhcm0gcnRrX3VpbnQzMiB8IHBvcnQgfCBUaGUgcG9ydCBudW1iZXIuCitAcGFybSBydGtfdWludDMyKiB8IGVuYWJsZWQgfCAxOiBlbmFibGVkLCAwOiBkaXNhYmxlZC4KK0BydmFsdWUgUlRfRVJSX09LIHwgU3VjY2Vzcy4KK0BydmFsdWUgUlRfRVJSX1NNSSB8IFNNSSBhY2Nlc3MgZXJyb3IuCitAcnZhbHVlIFJUX0VSUl9JTlBVVCB8IEludmFsaWQgaW5wdXQgcGFyYW1ldGVyLgorQGNvbW0KKyAgICBUaGlzIEFQSSBnZXQgdGhlIDEwME0gRUVFIGZ1bmN0aW9uLgorKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNFZWUxMDBNKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqZW5hYmxlKQoreworICAgIHJ0a19hcGlfcmV0X3QgICByZXRWYWw7CisgICAgcnRrX3VpbnQzMiAgICAgIHJlZ0RhdGE7CisKKyAgICBpZihwb3J0ID49IFJUTDgzNjdDX1BPUlROTykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQSFlPQ1BSZWcocG9ydCwgRUVFX09DUF9QSFlfQUREUiwgJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAqZW5hYmxlID0gKHJlZ0RhdGEgJiAoMHgwMDAxIDw8IDEpKSA/IEVOQUJMRUQgOiBESVNBQkxFRDsKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKgorQGZ1bmMgcmV0X3QgfCBydGw4MzY3Y19zZXRBc2ljRWVlR2lnYSB8IFNldCBlZWUgZm9yY2UgbW9kZSBmdW5jdGlvbiBlbmFibGUvZGlzYWJsZS4KK0BwYXJtIHJ0a191aW50MzIgfCBwb3J0IHwgVGhlIHBvcnQgbnVtYmVyLgorQHBhcm0gcnRrX3VpbnQzMiB8IGVuYWJsZWQgfCAxOiBlbmFibGVkLCAwOiBkaXNhYmxlZC4KK0BydmFsdWUgUlRfRVJSX09LIHwgU3VjY2Vzcy4KK0BydmFsdWUgUlRfRVJSX1NNSSB8IFNNSSBhY2Nlc3MgZXJyb3IuCitAcnZhbHVlIFJUX0VSUl9JTlBVVCB8IEludmFsaWQgaW5wdXQgcGFyYW1ldGVyLgorQGNvbW0KKyAgICBUaGlzIEFQSSBzZXQgdGhlIDEwME0gRUVFIGVuYWJsZSBmdW5jdGlvbi4KKworKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNFZWVHaWdhKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBlbmFibGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCAgIHJldFZhbDsKKyAgICBydGtfdWludDMyICAgICAgcmVnRGF0YTsKKworICAgIGlmKHBvcnQgPj0gUlRMODM2N0NfUE9SVE5PKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICBpZiAoZW5hYmxlID4gMSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUEhZT0NQUmVnKHBvcnQsIEVFRV9PQ1BfUEhZX0FERFIsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYoZW5hYmxlKQorICAgICAgICByZWdEYXRhIHw9ICgweDAwMDEgPDwgMik7CisgICAgZWxzZQorICAgICAgICByZWdEYXRhICY9IH4oMHgwMDAxIDw8IDIpOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQSFlPQ1BSZWcocG9ydCwgRUVFX09DUF9QSFlfQUREUiwgcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qCitAZnVuYyByZXRfdCB8IHJ0bDgzNjdjX2dldEFzaWNFZWVHaWdhIHwgR2V0IDEwME0gZWVlIGVuYWJsZS9kaXNhYmxlLgorQHBhcm0gcnRrX3VpbnQzMiB8IHBvcnQgfCBUaGUgcG9ydCBudW1iZXIuCitAcGFybSBydGtfdWludDMyKiB8IGVuYWJsZWQgfCAxOiBlbmFibGVkLCAwOiBkaXNhYmxlZC4KK0BydmFsdWUgUlRfRVJSX09LIHwgU3VjY2Vzcy4KK0BydmFsdWUgUlRfRVJSX1NNSSB8IFNNSSBhY2Nlc3MgZXJyb3IuCitAcnZhbHVlIFJUX0VSUl9JTlBVVCB8IEludmFsaWQgaW5wdXQgcGFyYW1ldGVyLgorQGNvbW0KKyAgICBUaGlzIEFQSSBnZXQgdGhlIDEwME0gRUVFIGZ1bmN0aW9uLgorKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNFZWVHaWdhKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqZW5hYmxlKQoreworICAgIHJ0a19hcGlfcmV0X3QgICByZXRWYWw7CisgICAgcnRrX3VpbnQzMiAgICAgIHJlZ0RhdGE7CisKKyAgICBpZihwb3J0ID49IFJUTDgzNjdDX1BPUlROTykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQSFlPQ1BSZWcocG9ydCwgRUVFX09DUF9QSFlfQUREUiwgJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAqZW5hYmxlID0gKHJlZ0RhdGEgJiAoMHgwMDAxIDw8IDIpKSA/IEVOQUJMRUQgOiBESVNBQkxFRDsKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfZmMuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X2ZjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhmNDliMQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X2ZjLmMKQEAgLTAsMCArMSwxMzU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNzYzMDYgJAorICogJERhdGU6IDIwMTctMDMtMDggMTU6MTM6NTggKzA4MDAgKOmAseS4iSwgMDgg5LiJ5pyIIDIwMTcpICQKKyAqCisgKiBQdXJwb3NlIDogUlRMODM2N0Mgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJIGZvciBSVEw4MzY3QworICogRmVhdHVyZSA6IEZsb3cgY29udHJvbCByZWxhdGVkIGZ1bmN0aW9ucworICoKKyAqLworCisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl9mYy5oPgorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0Zsb3dDb250cm9sU2VsZWN0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHN5c3RlbSBmbG93IGNvbnRyb2wgdHlwZQorICogSW5wdXQ6CisgKiAgICAgIHNlbGVjdCAgICAgIC0gU3lzdGVtIGZsb3cgY29udHJvbCB0eXBlIDE6IEluZ3Jlc3MgZmxvdyBjb250cm9sIDA6RWdyZXNzIGZsb3cgY29udHJvbAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0Zsb3dDb250cm9sU2VsZWN0KHJ0a191aW50MzIgc2VsZWN0KQoreworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9DVFJMMCwgUlRMODM2N0NfRkxPV0NUUkxfVFlQRV9PRkZTRVQsIHNlbGVjdCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljRmxvd0NvbnRyb2xTZWxlY3QKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgc3lzdGVtIGZsb3cgY29udHJvbCB0eXBlCisgKiBJbnB1dDoKKyAqICAgICAgcFNlbGVjdCAgICAgICAgIC0gU3lzdGVtIGZsb3cgY29udHJvbCB0eXBlIDE6IEluZ3Jlc3MgZmxvdyBjb250cm9sIDA6RWdyZXNzIGZsb3cgY29udHJvbAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0Zsb3dDb250cm9sU2VsZWN0KHJ0a191aW50MzIgKnBTZWxlY3QpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0ZMT1dDVFJMX0NUUkwwLCBSVEw4MzY3Q19GTE9XQ1RSTF9UWVBFX09GRlNFVCwgcFNlbGVjdCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljRmxvd0NvbnRyb2xKdW1ib01vZGUKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgSnVtYm8gdGhyZWhzb2xkIGZvciBmbG93IGNvbnRyb2wKKyAqIElucHV0OgorICogICAgICBlbmFibGVkICAgICAgICAgLSBKdW1ibyBtb2RlIGZsb3cgY29udHJvbCAxOiBFbmFibGUgMDpEaXNhYmxlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljRmxvd0NvbnRyb2xKdW1ib01vZGUocnRrX3VpbnQzMiBlbmFibGVkKQoreworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9KVU1CT19TSVpFLCBSVEw4MzY3Q19KVU1CT19NT0RFX09GRlNFVCwgZW5hYmxlZCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljRmxvd0NvbnRyb2xKdW1ib01vZGUKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgSnVtYm8gdGhyZWhzb2xkIGZvciBmbG93IGNvbnRyb2wKKyAqIElucHV0OgorICogICAgICBwRW5hYmxlZCAgICAgICAgLSBKdW1ibyBtb2RlIGZsb3cgY29udHJvbCAxOiBFbmFibGUgMDpEaXNhYmxlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljRmxvd0NvbnRyb2xKdW1ib01vZGUocnRrX3VpbnQzMiogcEVuYWJsZWQpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0ZMT1dDVFJMX0pVTUJPX1NJWkUsIFJUTDgzNjdDX0pVTUJPX01PREVfT0ZGU0VULCBwRW5hYmxlZCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljRmxvd0NvbnRyb2xKdW1ib01vZGVTaXplCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IEp1bWJvIHNpemUgZm9yIEp1bWJvIG1vZGUgZmxvdyBjb250cm9sCisgKiBJbnB1dDoKKyAqICAgICAgc2l6ZSAgICAgICAgLSBKdW1ibyBzaXplIDA6M0tieXRlcyAxOjRLYnl0ZXMgMjo2S2J5dGVzIDM6OUtieXRlcworICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgLSBpbnB1dCBwYXJhbWV0ZXIgb3V0IG9mIHJhbmdlCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNGbG93Q29udHJvbEp1bWJvTW9kZVNpemUocnRrX3VpbnQzMiBzaXplKQoreworICAgIGlmKHNpemUgPj0gRkNfSlVNQk9fU0laRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9KVU1CT19TSVpFLCBSVEw4MzY3Q19KVU1CT19TSVpFX01BU0ssIHNpemUpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0Zsb3dDb250cm9sSnVtYm9Nb2RlU2l6ZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBKdW1ibyBzaXplIGZvciBKdW1ibyBtb2RlIGZsb3cgY29udHJvbAorICogSW5wdXQ6CisgKiAgICAgIHBTaXplICAgICAgIC0gSnVtYm8gc2l6ZSAwOjNLYnl0ZXMgMTo0S2J5dGVzIDI6NktieXRlcyAzOjlLYnl0ZXMKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNGbG93Q29udHJvbEp1bWJvTW9kZVNpemUocnRrX3VpbnQzMiogcFNpemUpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9KVU1CT19TSVpFLCBSVEw4MzY3Q19KVU1CT19TSVpFX01BU0ssIHBTaXplKTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0Zsb3dDb250cm9sUXVldWVFZ3Jlc3NFbmFibGUKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgZmxvdyBjb250cm9sIGFiaWxpdHkgZm9yIGVhY2ggcXVldWUKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgcWlkICAgICAtIFF1ZXVlIGlkCisgKiAgICAgIGVuYWJsZWQgLSAxOiBlbmFibGVkLCAwOiBkaXNhYmxlZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiAgICAgIFJUX0VSUl9RVUVVRV9JRCAtIEludmFsaWQgcXVldWUgaWQKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0Zsb3dDb250cm9sUXVldWVFZ3Jlc3NFbmFibGUocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIHFpZCwgcnRrX3VpbnQzMiBlbmFibGVkKQoreworICAgIGlmKHBvcnQgPiBSVEw4MzY3Q19QT1JUSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIGlmKHFpZCA+IFJUTDgzNjdDX1FJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9RVUVVRV9JRDsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX0ZMT1dDUlRMX0VHUkVTU19RVUVVRV9FTkFCTEVfUkVHKHBvcnQpLCBSVEw4MzY3Q19GTE9XQ1JUTF9FR1JFU1NfUVVFVUVfRU5BQkxFX1JFR19PRkZTRVQocG9ydCkrIHFpZCwgZW5hYmxlZCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljRmxvd0NvbnRyb2xRdWV1ZUVncmVzc0VuYWJsZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBmbG93IGNvbnRyb2wgYWJpbGl0eSBmb3IgZWFjaCBxdWV1ZQorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH43KQorICogICAgICBxaWQgICAgIC0gUXVldWUgaWQKKyAqICAgICAgcEVuYWJsZWQgLSAxOiBlbmFibGVkLCAwOiBkaXNhYmxlZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiAgICAgIFJUX0VSUl9RVUVVRV9JRCAtIEludmFsaWQgcXVldWUgaWQKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0Zsb3dDb250cm9sUXVldWVFZ3Jlc3NFbmFibGUocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIHFpZCwgcnRrX3VpbnQzMiogcEVuYWJsZWQpCit7CisgICAgaWYocG9ydCA+IFJUTDgzNjdDX1BPUlRJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgaWYocWlkID4gUlRMODM2N0NfUUlETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1FVRVVFX0lEOworCisgICAgcmV0dXJuICBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX0ZMT1dDUlRMX0VHUkVTU19RVUVVRV9FTkFCTEVfUkVHKHBvcnQpLCBSVEw4MzY3Q19GTE9XQ1JUTF9FR1JFU1NfUVVFVUVfRU5BQkxFX1JFR19PRkZTRVQocG9ydCkrIHFpZCwgcEVuYWJsZWQpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0Zsb3dDb250cm9sRHJvcEFsbAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBzeXN0ZW0tYmFzZWQgZHJvcCBwYXJhbWV0ZXJzCisgKiBJbnB1dDoKKyAqICAgICAgZHJvcGFsbCAgICAgLSBXaG9sZSBzeXN0ZW0gZHJvcCB0aHJlc2hvbGQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gaW5wdXQgcGFyYW1ldGVyIG91dCBvZiByYW5nZQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljRmxvd0NvbnRyb2xEcm9wQWxsKHJ0a191aW50MzIgZHJvcGFsbCkKK3sKKyAgICBpZihkcm9wYWxsID49IFJUTDgzNjdDX1BBR0VfTlVNQkVSKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfRkxPV0NUUkxfQ1RSTDAsIFJUTDgzNjdDX0RST1BfQUxMX1RIUkVTSE9MRF9NQVNLLCBkcm9wYWxsKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNGbG93Q29udHJvbERyb3BBbGwKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgc3lzdGVtLWJhc2VkIGRyb3AgcGFyYW1ldGVycworICogSW5wdXQ6CisgKiAgICAgIHBEcm9wYWxsICAgIC0gV2hvbGUgc3lzdGVtIGRyb3AgdGhyZXNob2xkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljRmxvd0NvbnRyb2xEcm9wQWxsKHJ0a191aW50MzIqIHBEcm9wYWxsKQoreworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfRkxPV0NUUkxfQ1RSTDAsIFJUTDgzNjdDX0RST1BfQUxMX1RIUkVTSE9MRF9NQVNLLCBwRHJvcGFsbCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljRmxvd0NvbnRyb2xQYXVzZUFsbAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBzeXN0ZW0tYmFzZWQgYWxsIHBvcnRzIGVuYWJsZSBmbG93IGNvbnRyb2wgcGFyYW1ldGVycworICogSW5wdXQ6CisgKiAgICAgIHRocmVzaG9sZCAgIC0gV2hvbGUgc3lzdGVtIHBhdXNlIGFsbCB0aHJlc2hvbGQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gaW5wdXQgcGFyYW1ldGVyIG91dCBvZiByYW5nZQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljRmxvd0NvbnRyb2xQYXVzZUFsbFRocmVzaG9sZChydGtfdWludDMyIHRocmVzaG9sZCkKK3sKKyAgICBpZih0aHJlc2hvbGQgPj0gUlRMODM2N0NfUEFHRV9OVU1CRVIpCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9BTExfT04sIFJUTDgzNjdDX0ZMT1dDVFJMX0FMTF9PTl9USFJFU0hPTERfTUFTSywgdGhyZXNob2xkKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNGbG93Q29udHJvbFBhdXNlQWxsVGhyZXNob2xkCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHN5c3RlbS1iYXNlZCBhbGwgcG9ydHMgZW5hYmxlIGZsb3cgY29udHJvbCBwYXJhbWV0ZXJzCisgKiBJbnB1dDoKKyAqICAgICAgcFRocmVzaG9sZCAgLSBXaG9sZSBzeXN0ZW0gcGF1c2UgYWxsIHRocmVzaG9sZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0Zsb3dDb250cm9sUGF1c2VBbGxUaHJlc2hvbGQocnRrX3VpbnQzMiAqcFRocmVzaG9sZCkKK3sKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0ZMT1dDVFJMX0FMTF9PTiwgUlRMODM2N0NfRkxPV0NUUkxfQUxMX09OX1RIUkVTSE9MRF9NQVNLLCBwVGhyZXNob2xkKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNGbG93Q29udHJvbFN5c3RlbVRocmVzaG9sZAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBzeXN0ZW0tYmFzZWQgZmxvdyBjb250cm9sIHBhcmFtZXRlcnMKKyAqIElucHV0OgorICogICAgICBvblRocmVzaG9sZCAgICAgLSBGbG93IGNvbnRyb2wgdHVybiBPTiB0aHJlc2hvbGQKKyAqICAgICAgb2ZmVGhyZXNob2xkICAgIC0gRmxvdyBjb250cm9sIHR1cm4gT0ZGIHRocmVzaG9sZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgLSBpbnB1dCBwYXJhbWV0ZXIgb3V0IG9mIHJhbmdlCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNGbG93Q29udHJvbFN5c3RlbVRocmVzaG9sZChydGtfdWludDMyIG9uVGhyZXNob2xkLCBydGtfdWludDMyIG9mZlRocmVzaG9sZCkKK3sKKyAgICByZXRfdCByZXRWYWw7CisKKyAgICBpZigob25UaHJlc2hvbGQgPj0gUlRMODM2N0NfUEFHRV9OVU1CRVIpIHx8IChvZmZUaHJlc2hvbGQgPj0gUlRMODM2N0NfUEFHRV9OVU1CRVIpKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9TWVNfT0ZGLCBSVEw4MzY3Q19GTE9XQ1RSTF9TWVNfT0ZGX01BU0ssIG9mZlRocmVzaG9sZCk7CisKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1NZU19PTiwgUlRMODM2N0NfRkxPV0NUUkxfU1lTX09OX01BU0ssIG9uVGhyZXNob2xkKTsKKworICAgIHJldHVybiByZXRWYWw7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljRmxvd0NvbnRyb2xTeXN0ZW1UaHJlc2hvbGQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgc3lzdGVtLWJhc2VkIGZsb3cgY29udHJvbCBwYXJhbWV0ZXJzCisgKiBJbnB1dDoKKyAqICAgICAgcE9uVGhyZXNob2xkICAgIC0gRmxvdyBjb250cm9sIHR1cm4gT04gdGhyZXNob2xkCisgKiAgICAgIHBPZmZUaHJlc2hvbGQgICAtIEZsb3cgY29udHJvbCB0dXJuIE9GRiB0aHJlc2hvbGQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNGbG93Q29udHJvbFN5c3RlbVRocmVzaG9sZChydGtfdWludDMyICpwT25UaHJlc2hvbGQsIHJ0a191aW50MzIgKnBPZmZUaHJlc2hvbGQpCit7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1NZU19PRkYsIFJUTDgzNjdDX0ZMT1dDVFJMX1NZU19PRkZfTUFTSywgcE9mZlRocmVzaG9sZCk7CisKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1NZU19PTiwgUlRMODM2N0NfRkxPV0NUUkxfU1lTX09OX01BU0ssIHBPblRocmVzaG9sZCk7CisKKyAgICByZXR1cm4gcmV0VmFsOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0Zsb3dDb250cm9sU2hhcmVkVGhyZXNob2xkCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHNoYXJlLWJhc2VkIGZsb3cgY29udHJvbCBwYXJhbWV0ZXJzCisgKiBJbnB1dDoKKyAqICAgICAgb25UaHJlc2hvbGQgICAgIC0gRmxvdyBjb250cm9sIHR1cm4gT04gdGhyZXNob2xkCisgKiAgICAgIG9mZlRocmVzaG9sZCAgICAtIEZsb3cgY29udHJvbCB0dXJuIE9GRiB0aHJlc2hvbGQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gaW5wdXQgcGFyYW1ldGVyIG91dCBvZiByYW5nZQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljRmxvd0NvbnRyb2xTaGFyZWRUaHJlc2hvbGQocnRrX3VpbnQzMiBvblRocmVzaG9sZCwgcnRrX3VpbnQzMiBvZmZUaHJlc2hvbGQpCit7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgaWYoKG9uVGhyZXNob2xkID49IFJUTDgzNjdDX1BBR0VfTlVNQkVSKSB8fCAob2ZmVGhyZXNob2xkID49IFJUTDgzNjdDX1BBR0VfTlVNQkVSKSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfRkxPV0NUUkxfU0hBUkVfT0ZGLCBSVEw4MzY3Q19GTE9XQ1RSTF9TSEFSRV9PRkZfTUFTSywgb2ZmVGhyZXNob2xkKTsKKworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfRkxPV0NUUkxfU0hBUkVfT04sIFJUTDgzNjdDX0ZMT1dDVFJMX1NIQVJFX09OX01BU0ssIG9uVGhyZXNob2xkKTsKKworICAgIHJldHVybiByZXRWYWw7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljRmxvd0NvbnRyb2xTaGFyZWRUaHJlc2hvbGQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgc2hhcmUtYmFzZWQgZmxvdyBjb250cm9sIHBhcmFtZXRlcnMKKyAqIElucHV0OgorICogICAgICBwT25UaHJlc2hvbGQgICAgLSBGbG93IGNvbnRyb2wgdHVybiBPTiB0aHJlc2hvbGQKKyAqICAgICAgcE9mZlRocmVzaG9sZCAgIC0gRmxvdyBjb250cm9sIHR1cm4gT0ZGIHRocmVzaG9sZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0Zsb3dDb250cm9sU2hhcmVkVGhyZXNob2xkKHJ0a191aW50MzIgKnBPblRocmVzaG9sZCwgcnRrX3VpbnQzMiAqcE9mZlRocmVzaG9sZCkKK3sKKyAgICByZXRfdCByZXRWYWw7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfRkxPV0NUUkxfU0hBUkVfT0ZGLCBSVEw4MzY3Q19GTE9XQ1RSTF9TSEFSRV9PRkZfTUFTSywgcE9mZlRocmVzaG9sZCk7CisKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1NIQVJFX09OLCBSVEw4MzY3Q19GTE9XQ1RSTF9TSEFSRV9PTl9NQVNLLCBwT25UaHJlc2hvbGQpOworCisgICAgcmV0dXJuIHJldFZhbDsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNGbG93Q29udHJvbFBvcnRUaHJlc2hvbGQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgUG9ydC1iYXNlZCBmbG93IGNvbnRyb2wgcGFyYW1ldGVycworICogSW5wdXQ6CisgKiAgICAgIG9uVGhyZXNob2xkICAgICAtIEZsb3cgY29udHJvbCB0dXJuIE9OIHRocmVzaG9sZAorICogICAgICBvZmZUaHJlc2hvbGQgICAgLSBGbG93IGNvbnRyb2wgdHVybiBPRkYgdGhyZXNob2xkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAtIGlucHV0IHBhcmFtZXRlciBvdXQgb2YgcmFuZ2UKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0Zsb3dDb250cm9sUG9ydFRocmVzaG9sZChydGtfdWludDMyIG9uVGhyZXNob2xkLCBydGtfdWludDMyIG9mZlRocmVzaG9sZCkKK3sKKyAgICByZXRfdCByZXRWYWw7CisKKyAgICBpZigob25UaHJlc2hvbGQgPj0gUlRMODM2N0NfUEFHRV9OVU1CRVIpIHx8IChvZmZUaHJlc2hvbGQgPj0gUlRMODM2N0NfUEFHRV9OVU1CRVIpKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9QT1JUX09GRiwgUlRMODM2N0NfRkxPV0NUUkxfUE9SVF9PRkZfTUFTSywgb2ZmVGhyZXNob2xkKTsKKworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfRkxPV0NUUkxfUE9SVF9PTiwgUlRMODM2N0NfRkxPV0NUUkxfUE9SVF9PTl9NQVNLLCBvblRocmVzaG9sZCk7CisKKyAgICByZXR1cm4gcmV0VmFsOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0Zsb3dDb250cm9sUG9ydFRocmVzaG9sZAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBQb3J0LWJhc2VkIGZsb3cgY29udHJvbCBwYXJhbWV0ZXJzCisgKiBJbnB1dDoKKyAqICAgICAgcE9uVGhyZXNob2xkICAgIC0gRmxvdyBjb250cm9sIHR1cm4gT04gdGhyZXNob2xkCisgKiAgICAgIHBPZmZUaHJlc2hvbGQgICAtIEZsb3cgY29udHJvbCB0dXJuIE9GRiB0aHJlc2hvbGQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNGbG93Q29udHJvbFBvcnRUaHJlc2hvbGQocnRrX3VpbnQzMiAqcE9uVGhyZXNob2xkLCBydGtfdWludDMyICpwT2ZmVGhyZXNob2xkKQoreworICAgIHJldF90IHJldFZhbDsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9QT1JUX09GRiwgUlRMODM2N0NfRkxPV0NUUkxfUE9SVF9PRkZfTUFTSywgcE9mZlRocmVzaG9sZCk7CisKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1BPUlRfT04sIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlRfT05fTUFTSywgcE9uVGhyZXNob2xkKTsKKworICAgIHJldHVybiByZXRWYWw7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljRmxvd0NvbnRyb2xQb3J0UHJpdmF0ZVRocmVzaG9sZAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBQb3J0LXByaXZhdGUtYmFzZWQgZmxvdyBjb250cm9sIHBhcmFtZXRlcnMKKyAqIElucHV0OgorICogICAgICBvblRocmVzaG9sZCAgICAgLSBGbG93IGNvbnRyb2wgdHVybiBPTiB0aHJlc2hvbGQKKyAqICAgICAgb2ZmVGhyZXNob2xkICAgIC0gRmxvdyBjb250cm9sIHR1cm4gT0ZGIHRocmVzaG9sZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgLSBpbnB1dCBwYXJhbWV0ZXIgb3V0IG9mIHJhbmdlCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNGbG93Q29udHJvbFBvcnRQcml2YXRlVGhyZXNob2xkKHJ0a191aW50MzIgb25UaHJlc2hvbGQsIHJ0a191aW50MzIgb2ZmVGhyZXNob2xkKQoreworICAgIHJldF90IHJldFZhbDsKKworICAgIGlmKChvblRocmVzaG9sZCA+PSBSVEw4MzY3Q19QQUdFX05VTUJFUikgfHwgKG9mZlRocmVzaG9sZCA+PSBSVEw4MzY3Q19QQUdFX05VTUJFUikpCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1BPUlRfUFJJVkFURV9PRkYsIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlRfUFJJVkFURV9PRkZfTUFTSywgb2ZmVGhyZXNob2xkKTsKKworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfRkxPV0NUUkxfUE9SVF9QUklWQVRFX09OLCBSVEw4MzY3Q19GTE9XQ1RSTF9QT1JUX1BSSVZBVEVfT05fTUFTSywgb25UaHJlc2hvbGQpOworCisgICAgcmV0dXJuIHJldFZhbDsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNGbG93Q29udHJvbFBvcnRQcml2YXRlVGhyZXNob2xkCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFBvcnQtcHJpdmF0ZS1iYXNlZCBmbG93IGNvbnRyb2wgcGFyYW1ldGVycworICogSW5wdXQ6CisgKiAgICAgIHBPblRocmVzaG9sZCAgICAtIEZsb3cgY29udHJvbCB0dXJuIE9OIHRocmVzaG9sZAorICogICAgICBwT2ZmVGhyZXNob2xkICAgLSBGbG93IGNvbnRyb2wgdHVybiBPRkYgdGhyZXNob2xkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljRmxvd0NvbnRyb2xQb3J0UHJpdmF0ZVRocmVzaG9sZChydGtfdWludDMyICpwT25UaHJlc2hvbGQsIHJ0a191aW50MzIgKnBPZmZUaHJlc2hvbGQpCit7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1BPUlRfUFJJVkFURV9PRkYsIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlRfUFJJVkFURV9PRkZfTUFTSywgcE9mZlRocmVzaG9sZCk7CisKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1BPUlRfUFJJVkFURV9PTiwgUlRMODM2N0NfRkxPV0NUUkxfUE9SVF9QUklWQVRFX09OX01BU0ssIHBPblRocmVzaG9sZCk7CisKKyAgICByZXR1cm4gcmV0VmFsOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0Zsb3dDb250cm9sU3lzdGVtRHJvcFRocmVzaG9sZAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBzeXN0ZW0tYmFzZWQgZHJvcCBwYXJhbWV0ZXJzCisgKiBJbnB1dDoKKyAqICAgICAgb25UaHJlc2hvbGQgICAgIC0gRHJvcCB0dXJuIE9OIHRocmVzaG9sZAorICogICAgICBvZmZUaHJlc2hvbGQgICAgLSBEcm9wIHR1cm4gT0ZGIHRocmVzaG9sZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgLSBpbnB1dCBwYXJhbWV0ZXIgb3V0IG9mIHJhbmdlCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNGbG93Q29udHJvbFN5c3RlbURyb3BUaHJlc2hvbGQocnRrX3VpbnQzMiBvblRocmVzaG9sZCwgcnRrX3VpbnQzMiBvZmZUaHJlc2hvbGQpCit7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgaWYoKG9uVGhyZXNob2xkID49IFJUTDgzNjdDX1BBR0VfTlVNQkVSKSB8fCAob2ZmVGhyZXNob2xkID49IFJUTDgzNjdDX1BBR0VfTlVNQkVSKSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfRkxPV0NUUkxfRkNPRkZfU1lTX09GRiwgUlRMODM2N0NfRkxPV0NUUkxfRkNPRkZfU1lTX09GRl9NQVNLLCBvZmZUaHJlc2hvbGQpOworCisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9GQ09GRl9TWVNfT04sIFJUTDgzNjdDX0ZMT1dDVFJMX0ZDT0ZGX1NZU19PTl9NQVNLLCBvblRocmVzaG9sZCk7CisKKyAgICByZXR1cm4gcmV0VmFsOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0Zsb3dDb250cm9sU3lzdGVtRHJvcFRocmVzaG9sZAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBzeXN0ZW0tYmFzZWQgZHJvcCBwYXJhbWV0ZXJzCisgKiBJbnB1dDoKKyAqICAgICAgcE9uVGhyZXNob2xkICAgIC0gRHJvcCB0dXJuIE9OIHRocmVzaG9sZAorICogICAgICBwT2ZmVGhyZXNob2xkICAgLSBEcm9wIHR1cm4gT0ZGIHRocmVzaG9sZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0Zsb3dDb250cm9sU3lzdGVtRHJvcFRocmVzaG9sZChydGtfdWludDMyICpwT25UaHJlc2hvbGQsIHJ0a191aW50MzIgKnBPZmZUaHJlc2hvbGQpCit7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0ZMT1dDVFJMX0ZDT0ZGX1NZU19PRkYsIFJUTDgzNjdDX0ZMT1dDVFJMX0ZDT0ZGX1NZU19PRkZfTUFTSywgcE9mZlRocmVzaG9sZCk7CisKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0ZMT1dDVFJMX0ZDT0ZGX1NZU19PTiwgUlRMODM2N0NfRkxPV0NUUkxfRkNPRkZfU1lTX09OX01BU0ssIHBPblRocmVzaG9sZCk7CisKKyAgICByZXR1cm4gcmV0VmFsOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0Zsb3dDb250cm9sU2hhcmVkRHJvcFRocmVzaG9sZAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBzaGFyZS1iYXNlZCBmZHJvcCBwYXJhbWV0ZXJzCisgKiBJbnB1dDoKKyAqICAgICAgb25UaHJlc2hvbGQgICAgIC0gRHJvcCB0dXJuIE9OIHRocmVzaG9sZAorICogICAgICBvZmZUaHJlc2hvbGQgICAgLSBEcm9wIHR1cm4gT0ZGIHRocmVzaG9sZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgLSBpbnB1dCBwYXJhbWV0ZXIgb3V0IG9mIHJhbmdlCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNGbG93Q29udHJvbFNoYXJlZERyb3BUaHJlc2hvbGQocnRrX3VpbnQzMiBvblRocmVzaG9sZCwgcnRrX3VpbnQzMiBvZmZUaHJlc2hvbGQpCit7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgaWYoKG9uVGhyZXNob2xkID49IFJUTDgzNjdDX1BBR0VfTlVNQkVSKSB8fCAob2ZmVGhyZXNob2xkID49IFJUTDgzNjdDX1BBR0VfTlVNQkVSKSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfRkxPV0NUUkxfRkNPRkZfU0hBUkVfT0ZGLCBSVEw4MzY3Q19GTE9XQ1RSTF9GQ09GRl9TSEFSRV9PRkZfTUFTSywgb2ZmVGhyZXNob2xkKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0ZMT1dDVFJMX0ZDT0ZGX1NIQVJFX09OLCBSVEw4MzY3Q19GTE9XQ1RSTF9GQ09GRl9TSEFSRV9PTl9NQVNLLCBvblRocmVzaG9sZCk7CisKKyAgICByZXR1cm4gcmV0VmFsOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0Zsb3dDb250cm9sU2hhcmVkRHJvcFRocmVzaG9sZAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBzaGFyZS1iYXNlZCBmZHJvcCBwYXJhbWV0ZXJzCisgKiBJbnB1dDoKKyAqICAgICAgcE9uVGhyZXNob2xkICAgIC0gRHJvcCB0dXJuIE9OIHRocmVzaG9sZAorICogICAgICBwT2ZmVGhyZXNob2xkICAgLSBEcm9wIHR1cm4gT0ZGIHRocmVzaG9sZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0Zsb3dDb250cm9sU2hhcmVkRHJvcFRocmVzaG9sZChydGtfdWludDMyICpwT25UaHJlc2hvbGQsIHJ0a191aW50MzIgKnBPZmZUaHJlc2hvbGQpCit7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0ZMT1dDVFJMX0ZDT0ZGX1NIQVJFX09GRiwgUlRMODM2N0NfRkxPV0NUUkxfRkNPRkZfU0hBUkVfT0ZGX01BU0ssIHBPZmZUaHJlc2hvbGQpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfRkxPV0NUUkxfRkNPRkZfU0hBUkVfT04sIFJUTDgzNjdDX0ZMT1dDVFJMX0ZDT0ZGX1NIQVJFX09OX01BU0ssIHBPblRocmVzaG9sZCk7CisKKyAgICByZXR1cm4gcmV0VmFsOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0Zsb3dDb250cm9sUG9ydERyb3BUaHJlc2hvbGQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgUG9ydC1iYXNlZCBkcm9wIHBhcmFtZXRlcnMKKyAqIElucHV0OgorICogICAgICBvblRocmVzaG9sZCAgICAgLSBEcm9wIHR1cm4gT04gdGhyZXNob2xkCisgKiAgICAgIG9mZlRocmVzaG9sZCAgICAtIERyb3AgdHVybiBPRkYgdGhyZXNob2xkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAtIGlucHV0IHBhcmFtZXRlciBvdXQgb2YgcmFuZ2UKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0Zsb3dDb250cm9sUG9ydERyb3BUaHJlc2hvbGQocnRrX3VpbnQzMiBvblRocmVzaG9sZCwgcnRrX3VpbnQzMiBvZmZUaHJlc2hvbGQpCit7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgaWYoKG9uVGhyZXNob2xkID49IFJUTDgzNjdDX1BBR0VfTlVNQkVSKSB8fCAob2ZmVGhyZXNob2xkID49IFJUTDgzNjdDX1BBR0VfTlVNQkVSKSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfRkxPV0NUUkxfRkNPRkZfUE9SVF9PRkYsIFJUTDgzNjdDX0ZMT1dDVFJMX0ZDT0ZGX1BPUlRfT0ZGX01BU0ssIG9mZlRocmVzaG9sZCk7CisKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0ZMT1dDVFJMX0ZDT0ZGX1BPUlRfT04sIFJUTDgzNjdDX0ZMT1dDVFJMX0ZDT0ZGX1BPUlRfT05fTUFTSywgb25UaHJlc2hvbGQpOworCisgICAgcmV0dXJuIHJldFZhbDsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNGbG93Q29udHJvbFBvcnREcm9wVGhyZXNob2xkCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFBvcnQtYmFzZWQgZHJvcCBwYXJhbWV0ZXJzCisgKiBJbnB1dDoKKyAqICAgICAgcE9uVGhyZXNob2xkICAgIC0gRHJvcCB0dXJuIE9OIHRocmVzaG9sZAorICogICAgICBwT2ZmVGhyZXNob2xkICAgLSBEcm9wIHR1cm4gT0ZGIHRocmVzaG9sZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0Zsb3dDb250cm9sUG9ydERyb3BUaHJlc2hvbGQocnRrX3VpbnQzMiAqcE9uVGhyZXNob2xkLCBydGtfdWludDMyICpwT2ZmVGhyZXNob2xkKQoreworICAgIHJldF90IHJldFZhbDsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9GQ09GRl9QT1JUX09GRiwgUlRMODM2N0NfRkxPV0NUUkxfRkNPRkZfUE9SVF9PRkZfTUFTSywgcE9mZlRocmVzaG9sZCk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9GQ09GRl9QT1JUX09OLCBSVEw4MzY3Q19GTE9XQ1RSTF9GQ09GRl9QT1JUX09OX01BU0ssIHBPblRocmVzaG9sZCk7CisKKyAgICByZXR1cm4gcmV0VmFsOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0Zsb3dDb250cm9sUG9ydFByaXZhdGVEcm9wVGhyZXNob2xkCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IFBvcnQtcHJpdmF0ZS1iYXNlZCBkcm9wIHBhcmFtZXRlcnMKKyAqIElucHV0OgorICogICAgICBvblRocmVzaG9sZCAgICAgLSBEcm9wIHR1cm4gT04gdGhyZXNob2xkCisgKiAgICAgIG9mZlRocmVzaG9sZCAgICAtIERyb3AgdHVybiBPRkYgdGhyZXNob2xkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAtIGlucHV0IHBhcmFtZXRlciBvdXQgb2YgcmFuZ2UKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0Zsb3dDb250cm9sUG9ydFByaXZhdGVEcm9wVGhyZXNob2xkKHJ0a191aW50MzIgb25UaHJlc2hvbGQsIHJ0a191aW50MzIgb2ZmVGhyZXNob2xkKQoreworICAgIHJldF90IHJldFZhbDsKKworICAgIGlmKChvblRocmVzaG9sZCA+PSBSVEw4MzY3Q19QQUdFX05VTUJFUikgfHwgKG9mZlRocmVzaG9sZCA+PSBSVEw4MzY3Q19QQUdFX05VTUJFUikpCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0ZMT1dDVFJMX0ZDT0ZGX1BPUlRfUFJJVkFURV9PRkYsIFJUTDgzNjdDX0ZMT1dDVFJMX0ZDT0ZGX1BPUlRfUFJJVkFURV9PRkZfTUFTSywgb2ZmVGhyZXNob2xkKTsKKworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfRkxPV0NUUkxfRkNPRkZfUE9SVF9QUklWQVRFX09OLCBSVEw4MzY3Q19GTE9XQ1RSTF9GQ09GRl9QT1JUX1BSSVZBVEVfT05fTUFTSywgb25UaHJlc2hvbGQpOworCisgICAgcmV0dXJuIHJldFZhbDsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNGbG93Q29udHJvbFBvcnRQcml2YXRlRHJvcFRocmVzaG9sZAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBQb3J0LXByaXZhdGUtYmFzZWQgZHJvcCBwYXJhbWV0ZXJzCisgKiBJbnB1dDoKKyAqICAgICAgcE9uVGhyZXNob2xkICAgIC0gRHJvcCB0dXJuIE9OIHRocmVzaG9sZAorICogICAgICBwT2ZmVGhyZXNob2xkICAgLSBEcm9wIHR1cm4gT0ZGIHRocmVzaG9sZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0Zsb3dDb250cm9sUG9ydFByaXZhdGVEcm9wVGhyZXNob2xkKHJ0a191aW50MzIgKnBPblRocmVzaG9sZCwgcnRrX3VpbnQzMiAqcE9mZlRocmVzaG9sZCkKK3sKKyAgICByZXRfdCByZXRWYWw7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfRkxPV0NUUkxfRkNPRkZfUE9SVF9QUklWQVRFX09GRiwgUlRMODM2N0NfRkxPV0NUUkxfRkNPRkZfUE9SVF9QUklWQVRFX09GRl9NQVNLLCBwT2ZmVGhyZXNob2xkKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0ZMT1dDVFJMX0ZDT0ZGX1BPUlRfUFJJVkFURV9PTiwgUlRMODM2N0NfRkxPV0NUUkxfRkNPRkZfUE9SVF9QUklWQVRFX09OX01BU0ssIHBPblRocmVzaG9sZCk7CisKKyAgICByZXR1cm4gcmV0VmFsOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0Zsb3dDb250cm9sU3lzdGVtSnVtYm9UaHJlc2hvbGQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgSnVtYm8gc3lzdGVtLWJhc2VkIGZsb3cgY29udHJvbCBwYXJhbWV0ZXJzCisgKiBJbnB1dDoKKyAqICAgICAgb25UaHJlc2hvbGQgICAgIC0gRmxvdyBjb250cm9sIHR1cm4gT04gdGhyZXNob2xkCisgKiAgICAgIG9mZlRocmVzaG9sZCAgICAtIEZsb3cgY29udHJvbCB0dXJuIE9GRiB0aHJlc2hvbGQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gaW5wdXQgcGFyYW1ldGVyIG91dCBvZiByYW5nZQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljRmxvd0NvbnRyb2xTeXN0ZW1KdW1ib1RocmVzaG9sZChydGtfdWludDMyIG9uVGhyZXNob2xkLCBydGtfdWludDMyIG9mZlRocmVzaG9sZCkKK3sKKyAgICByZXRfdCByZXRWYWw7CisKKyAgICBpZigob25UaHJlc2hvbGQgPj0gUlRMODM2N0NfUEFHRV9OVU1CRVIpIHx8IChvZmZUaHJlc2hvbGQgPj0gUlRMODM2N0NfUEFHRV9OVU1CRVIpKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9KVU1CT19TWVNfT0ZGLCBSVEw4MzY3Q19GTE9XQ1RSTF9KVU1CT19TWVNfT0ZGX01BU0ssIG9mZlRocmVzaG9sZCk7CisKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0ZMT1dDVFJMX0pVTUJPX1NZU19PTiwgUlRMODM2N0NfRkxPV0NUUkxfSlVNQk9fU1lTX09OX01BU0ssIG9uVGhyZXNob2xkKTsKKworICAgIHJldHVybiByZXRWYWw7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljRmxvd0NvbnRyb2xTeXN0ZW1KdW1ib1RocmVzaG9sZAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBKdW1ibyBzeXN0ZW0tYmFzZWQgZmxvdyBjb250cm9sIHBhcmFtZXRlcnMKKyAqIElucHV0OgorICogICAgICBwT25UaHJlc2hvbGQgICAgLSBGbG93IGNvbnRyb2wgdHVybiBPTiB0aHJlc2hvbGQKKyAqICAgICAgcE9mZlRocmVzaG9sZCAgIC0gRmxvdyBjb250cm9sIHR1cm4gT0ZGIHRocmVzaG9sZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0Zsb3dDb250cm9sU3lzdGVtSnVtYm9UaHJlc2hvbGQocnRrX3VpbnQzMiAqcE9uVGhyZXNob2xkLCBydGtfdWludDMyICpwT2ZmVGhyZXNob2xkKQoreworICAgIHJldF90IHJldFZhbDsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9KVU1CT19TWVNfT0ZGLCBSVEw4MzY3Q19GTE9XQ1RSTF9KVU1CT19TWVNfT0ZGX01BU0ssIHBPZmZUaHJlc2hvbGQpOworCisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9KVU1CT19TWVNfT04sIFJUTDgzNjdDX0ZMT1dDVFJMX0pVTUJPX1NZU19PTl9NQVNLLCBwT25UaHJlc2hvbGQpOworCisgICAgcmV0dXJuIHJldFZhbDsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNGbG93Q29udHJvbFNoYXJlZEp1bWJvVGhyZXNob2xkCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IEp1bWJvIHNoYXJlLWJhc2VkIGZsb3cgY29udHJvbCBwYXJhbWV0ZXJzCisgKiBJbnB1dDoKKyAqICAgICAgb25UaHJlc2hvbGQgICAgIC0gRmxvdyBjb250cm9sIHR1cm4gT04gdGhyZXNob2xkCisgKiAgICAgIG9mZlRocmVzaG9sZCAgICAtIEZsb3cgY29udHJvbCB0dXJuIE9GRiB0aHJlc2hvbGQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gaW5wdXQgcGFyYW1ldGVyIG91dCBvZiByYW5nZQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljRmxvd0NvbnRyb2xTaGFyZWRKdW1ib1RocmVzaG9sZChydGtfdWludDMyIG9uVGhyZXNob2xkLCBydGtfdWludDMyIG9mZlRocmVzaG9sZCkKK3sKKyAgICByZXRfdCByZXRWYWw7CisKKyAgICBpZigob25UaHJlc2hvbGQgPj0gUlRMODM2N0NfUEFHRV9OVU1CRVIpIHx8IChvZmZUaHJlc2hvbGQgPj0gUlRMODM2N0NfUEFHRV9OVU1CRVIpKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9KVU1CT19TSEFSRV9PRkYsIFJUTDgzNjdDX0ZMT1dDVFJMX0pVTUJPX1NIQVJFX09GRl9NQVNLLCBvZmZUaHJlc2hvbGQpOworCisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9KVU1CT19TSEFSRV9PTiwgUlRMODM2N0NfRkxPV0NUUkxfSlVNQk9fU0hBUkVfT05fTUFTSywgb25UaHJlc2hvbGQpOworCisgICAgcmV0dXJuIHJldFZhbDsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNGbG93Q29udHJvbFNoYXJlZEp1bWJvVGhyZXNob2xkCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IEp1bWJvIHNoYXJlLWJhc2VkIGZsb3cgY29udHJvbCBwYXJhbWV0ZXJzCisgKiBJbnB1dDoKKyAqICAgICAgcE9uVGhyZXNob2xkICAgIC0gRmxvdyBjb250cm9sIHR1cm4gT04gdGhyZXNob2xkCisgKiAgICAgIHBPZmZUaHJlc2hvbGQgICAtIEZsb3cgY29udHJvbCB0dXJuIE9GRiB0aHJlc2hvbGQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNGbG93Q29udHJvbFNoYXJlZEp1bWJvVGhyZXNob2xkKHJ0a191aW50MzIgKnBPblRocmVzaG9sZCwgcnRrX3VpbnQzMiAqcE9mZlRocmVzaG9sZCkKK3sKKyAgICByZXRfdCByZXRWYWw7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfRkxPV0NUUkxfSlVNQk9fU0hBUkVfT0ZGLCBSVEw4MzY3Q19GTE9XQ1RSTF9KVU1CT19TSEFSRV9PRkZfTUFTSywgcE9mZlRocmVzaG9sZCk7CisKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0ZMT1dDVFJMX0pVTUJPX1NIQVJFX09OLCBSVEw4MzY3Q19GTE9XQ1RSTF9KVU1CT19TSEFSRV9PTl9NQVNLLCBwT25UaHJlc2hvbGQpOworCisgICAgcmV0dXJuIHJldFZhbDsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNGbG93Q29udHJvbFBvcnRKdW1ib1RocmVzaG9sZAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBKdW1ibyBQb3J0LWJhc2VkIGZsb3cgY29udHJvbCBwYXJhbWV0ZXJzCisgKiBJbnB1dDoKKyAqICAgICAgb25UaHJlc2hvbGQgICAgIC0gRmxvdyBjb250cm9sIHR1cm4gT04gdGhyZXNob2xkCisgKiAgICAgIG9mZlRocmVzaG9sZCAgICAtIEZsb3cgY29udHJvbCB0dXJuIE9GRiB0aHJlc2hvbGQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gaW5wdXQgcGFyYW1ldGVyIG91dCBvZiByYW5nZQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljRmxvd0NvbnRyb2xQb3J0SnVtYm9UaHJlc2hvbGQocnRrX3VpbnQzMiBvblRocmVzaG9sZCwgcnRrX3VpbnQzMiBvZmZUaHJlc2hvbGQpCit7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgaWYoKG9uVGhyZXNob2xkID49IFJUTDgzNjdDX1BBR0VfTlVNQkVSKSB8fCAob2ZmVGhyZXNob2xkID49IFJUTDgzNjdDX1BBR0VfTlVNQkVSKSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfRkxPV0NUUkxfSlVNQk9fUE9SVF9PRkYsIFJUTDgzNjdDX0ZMT1dDVFJMX0pVTUJPX1BPUlRfT0ZGX01BU0ssIG9mZlRocmVzaG9sZCk7CisKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0ZMT1dDVFJMX0pVTUJPX1BPUlRfT04sIFJUTDgzNjdDX0ZMT1dDVFJMX0pVTUJPX1BPUlRfT05fTUFTSywgb25UaHJlc2hvbGQpOworCisgICAgcmV0dXJuIHJldFZhbDsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNGbG93Q29udHJvbFBvcnRKdW1ib1RocmVzaG9sZAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBKdW1ibyBQb3J0LWJhc2VkIGZsb3cgY29udHJvbCBwYXJhbWV0ZXJzCisgKiBJbnB1dDoKKyAqICAgICAgcE9uVGhyZXNob2xkICAgIC0gRmxvdyBjb250cm9sIHR1cm4gT04gdGhyZXNob2xkCisgKiAgICAgIHBPZmZUaHJlc2hvbGQgICAtIEZsb3cgY29udHJvbCB0dXJuIE9GRiB0aHJlc2hvbGQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNGbG93Q29udHJvbFBvcnRKdW1ib1RocmVzaG9sZChydGtfdWludDMyICpwT25UaHJlc2hvbGQsIHJ0a191aW50MzIgKnBPZmZUaHJlc2hvbGQpCit7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0ZMT1dDVFJMX0pVTUJPX1BPUlRfT0ZGLCBSVEw4MzY3Q19GTE9XQ1RSTF9KVU1CT19QT1JUX09GRl9NQVNLLCBwT2ZmVGhyZXNob2xkKTsKKworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfRkxPV0NUUkxfSlVNQk9fUE9SVF9PTiwgUlRMODM2N0NfRkxPV0NUUkxfSlVNQk9fUE9SVF9PTl9NQVNLLCBwT25UaHJlc2hvbGQpOworCisgICAgcmV0dXJuIHJldFZhbDsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNGbG93Q29udHJvbFBvcnRQcml2YXRlSnVtYm9UaHJlc2hvbGQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgSnVtYm8gUG9ydC1wcml2YXRlLWJhc2VkIGZsb3cgY29udHJvbCBwYXJhbWV0ZXJzCisgKiBJbnB1dDoKKyAqICAgICAgb25UaHJlc2hvbGQgICAgIC0gRmxvdyBjb250cm9sIHR1cm4gT04gdGhyZXNob2xkCisgKiAgICAgIG9mZlRocmVzaG9sZCAgICAtIEZsb3cgY29udHJvbCB0dXJuIE9GRiB0aHJlc2hvbGQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gaW5wdXQgcGFyYW1ldGVyIG91dCBvZiByYW5nZQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljRmxvd0NvbnRyb2xQb3J0UHJpdmF0ZUp1bWJvVGhyZXNob2xkKHJ0a191aW50MzIgb25UaHJlc2hvbGQsIHJ0a191aW50MzIgb2ZmVGhyZXNob2xkKQoreworICAgIHJldF90IHJldFZhbDsKKworICAgIGlmKChvblRocmVzaG9sZCA+PSBSVEw4MzY3Q19QQUdFX05VTUJFUikgfHwgKG9mZlRocmVzaG9sZCA+PSBSVEw4MzY3Q19QQUdFX05VTUJFUikpCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0ZMT1dDVFJMX0pVTUJPX1BPUlRfUFJJVkFURV9PRkYsIFJUTDgzNjdDX0ZMT1dDVFJMX0pVTUJPX1BPUlRfUFJJVkFURV9PRkZfTUFTSywgb2ZmVGhyZXNob2xkKTsKKworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfRkxPV0NUUkxfSlVNQk9fUE9SVF9QUklWQVRFX09OLCBSVEw4MzY3Q19GTE9XQ1RSTF9KVU1CT19QT1JUX1BSSVZBVEVfT05fTUFTSywgb25UaHJlc2hvbGQpOworCisgICAgcmV0dXJuIHJldFZhbDsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNGbG93Q29udHJvbFBvcnRQcml2YXRlSnVtYm9UaHJlc2hvbGQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgSnVtYm8gUG9ydC1wcml2YXRlLWJhc2VkIGZsb3cgY29udHJvbCBwYXJhbWV0ZXJzCisgKiBJbnB1dDoKKyAqICAgICAgcE9uVGhyZXNob2xkICAgIC0gRmxvdyBjb250cm9sIHR1cm4gT04gdGhyZXNob2xkCisgKiAgICAgIHBPZmZUaHJlc2hvbGQgICAtIEZsb3cgY29udHJvbCB0dXJuIE9GRiB0aHJlc2hvbGQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNGbG93Q29udHJvbFBvcnRQcml2YXRlSnVtYm9UaHJlc2hvbGQocnRrX3VpbnQzMiAqcE9uVGhyZXNob2xkLCBydGtfdWludDMyICpwT2ZmVGhyZXNob2xkKQoreworICAgIHJldF90IHJldFZhbDsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9KVU1CT19QT1JUX1BSSVZBVEVfT0ZGLCBSVEw4MzY3Q19GTE9XQ1RSTF9KVU1CT19QT1JUX1BSSVZBVEVfT0ZGX01BU0ssIHBPZmZUaHJlc2hvbGQpOworCisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9KVU1CT19QT1JUX1BSSVZBVEVfT04sIFJUTDgzNjdDX0ZMT1dDVFJMX0pVTUJPX1BPUlRfUFJJVkFURV9PTl9NQVNLLCBwT25UaHJlc2hvbGQpOworCisgICAgcmV0dXJuIHJldFZhbDsKK30KKworCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNFZ3Jlc3NGbG93Q29udHJvbFF1ZXVlRHJvcFRocmVzaG9sZAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBRdWV1ZS1iYXNlZCBlZ3Jlc3MgZmxvdyBjb250cm9sIHR1cm4gb24gb3IgaW5ncmVzcyBmbG93IGNvbnRyb2wgZHJvcCBvbiB0aHJlc2hvbGQKKyAqIElucHV0OgorICogICAgICBxaWQgICAgICAgICAtIFRoZSBxdWV1ZSBpZAorICogICAgICB0aHJlc2hvbGQgICAtIFF1ZXVlLWJhc2VkIGZsb3duIGNvbnRyb2wvZHJvcCB0dXJuIE9OIHRocmVzaG9sZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgLSBpbnB1dCBwYXJhbWV0ZXIgb3V0IG9mIHJhbmdlCisgKiAgICAgIFJUX0VSUl9RVUVVRV9JRCAgICAgLSBJbnZhbGlkIHF1ZXVlIGlkCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNFZ3Jlc3NGbG93Q29udHJvbFF1ZXVlRHJvcFRocmVzaG9sZChydGtfdWludDMyIHFpZCwgcnRrX3VpbnQzMiB0aHJlc2hvbGQpCit7CisgICAgaWYoIHRocmVzaG9sZCA+PSBSVEw4MzY3Q19QQUdFX05VTUJFUikKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICBpZihxaWQgPiBSVEw4MzY3Q19RSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUVVFVUVfSUQ7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfRkxPV0NUUkxfUVVFVUVfRFJPUF9PTl9SRUcocWlkKSwgUlRMODM2N0NfRkxPV0NUUkxfUVVFVUVfRFJPUF9PTl9NQVNLLCB0aHJlc2hvbGQpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0VncmVzc0Zsb3dDb250cm9sUXVldWVEcm9wVGhyZXNob2xkCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFF1ZXVlLWJhc2VkIGVncmVzcyBmbG93IGNvbnRyb2wgdHVybiBvbiBvciBpbmdyZXNzIGZsb3cgY29udHJvbCBkcm9wIG9uIHRocmVzaG9sZAorICogSW5wdXQ6CisgKiAgICAgIHFpZCAgICAgICAgIC0gVGhlIHF1ZXVlIGlkCisgKiAgICAgIHBUaHJlc2hvbGQgIC0gUXVldWUtYmFzZWQgZmxvd24gY29udHJvbC9kcm9wIHR1cm4gT04gdGhyZXNob2xkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1FVRVVFX0lEICAgICAtIEludmFsaWQgcXVldWUgaWQKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0VncmVzc0Zsb3dDb250cm9sUXVldWVEcm9wVGhyZXNob2xkKHJ0a191aW50MzIgcWlkLCBydGtfdWludDMyICpwVGhyZXNob2xkKQoreworICAgIGlmKHFpZCA+IFJUTDgzNjdDX1FJRE1BWCkKKyAgICAgIHJldHVybiBSVF9FUlJfUVVFVUVfSUQ7CisKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfRkxPV0NUUkxfUVVFVUVfRFJPUF9PTl9SRUcocWlkKSwgUlRMODM2N0NfRkxPV0NUUkxfUVVFVUVfRFJPUF9PTl9NQVNLLCBwVGhyZXNob2xkKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNFZ3Jlc3NGbG93Q29udHJvbFBvcnREcm9wVGhyZXNob2xkCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHBvcnQtYmFzZWQgZWdyZXNzIGZsb3cgY29udHJvbCB0dXJuIG9uIG9yIGluZ3Jlc3MgZmxvdyBjb250cm9sIGRyb3Agb24gdGhyZXNob2xkCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH43KQorICogICAgICB0aHJlc2hvbGQgICAtIFF1ZXVlLWJhc2VkIGZsb3duIGNvbnRyb2wvZHJvcCB0dXJuIE9OIHRocmVzaG9sZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgLSBpbnB1dCBwYXJhbWV0ZXIgb3V0IG9mIHJhbmdlCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNFZ3Jlc3NGbG93Q29udHJvbFBvcnREcm9wVGhyZXNob2xkKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiB0aHJlc2hvbGQpCit7CisgICAgaWYocG9ydCA+IFJUTDgzNjdDX1BPUlRJRE1BWCkKKyAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIGlmKHRocmVzaG9sZCA+PSBSVEw4MzY3Q19QQUdFX05VTUJFUikKKyAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlRfRFJPUF9PTl9SRUcocG9ydCksIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlRfRFJPUF9PTl9NQVNLLCB0aHJlc2hvbGQpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0VncmVzc0Zsb3dDb250cm9sUG9ydERyb3BUaHJlc2hvbGQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgcG9ydC1iYXNlZCBlZ3Jlc3MgZmxvdyBjb250cm9sIHR1cm4gb24gb3IgaW5ncmVzcyBmbG93IGNvbnRyb2wgZHJvcCBvbiB0aHJlc2hvbGQKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjcpCisgKiAgICAgIHBUaHJlc2hvbGQgIC0gUXVldWUtYmFzZWQgZmxvd24gY29udHJvbC9kcm9wIHR1cm4gT04gdGhyZXNob2xkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0VncmVzc0Zsb3dDb250cm9sUG9ydERyb3BUaHJlc2hvbGQocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyICpwVGhyZXNob2xkKQoreworICAgIGlmKHBvcnQgPiBSVEw4MzY3Q19QT1JUSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19GTE9XQ1RSTF9QT1JUX0RST1BfT05fUkVHKHBvcnQpLCBSVEw4MzY3Q19GTE9XQ1RSTF9QT1JUX0RST1BfT05fTUFTSywgcFRocmVzaG9sZCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljRWdyZXNzRmxvd0NvbnRyb2xQb3J0RHJvcEdhcAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwb3J0LWJhc2VkIGVncmVzcyBmbG93IGNvbnRyb2wgdHVybiBvZmYgb3IgaW5ncmVzcyBmbG93IGNvbnRyb2wgZHJvcCBvZmYgZ2FwCisgKiBJbnB1dDoKKyAqICAgICAgZ2FwICAgICAtIEZsb3cgY29udHJvbC9kcm9wIHR1cm4gT0ZGIHRocmVzaG9sZCA9IHR1cm4gT04gdGhyZXNob2xkIC0gZ2FwCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAtIGlucHV0IHBhcmFtZXRlciBvdXQgb2YgcmFuZ2UKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0VncmVzc0Zsb3dDb250cm9sUG9ydERyb3BHYXAocnRrX3VpbnQzMiBnYXApCit7CisgICAgaWYoZ2FwID49IFJUTDgzNjdDX1BBR0VfTlVNQkVSKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfRkxPV0NUUkxfUE9SVF9HQVAsIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlRfR0FQX01BU0ssIGdhcCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljRWdyZXNzRmxvd0NvbnRyb2xQb3J0RHJvcEdhcAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwb3J0LWJhc2VkIGVncmVzcyBmbG93IGNvbnRyb2wgdHVybiBvZmYgb3IgaW5ncmVzcyBmbG93IGNvbnRyb2wgZHJvcCBvZmYgZ2FwCisgKiBJbnB1dDoKKyAqICAgICAgcEdhcCAgICAtIEZsb3cgY29udHJvbC9kcm9wIHR1cm4gT0ZGIHRocmVzaG9sZCA9IHR1cm4gT04gdGhyZXNob2xkIC0gZ2FwCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljRWdyZXNzRmxvd0NvbnRyb2xQb3J0RHJvcEdhcChydGtfdWludDMyICpwR2FwKQoreworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfRkxPV0NUUkxfUE9SVF9HQVAsIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlRfR0FQX01BU0ssIHBHYXApOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0VncmVzc0Zsb3dDb250cm9sUXVldWVEcm9wR2FwCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IFF1ZXVlLWJhc2VkIGVncmVzcyBmbG93IGNvbnRyb2wgdHVybiBvZmYgb3IgaW5ncmVzcyBmbG93IGNvbnRyb2wgZHJvcCBvZmYgZ2FwCisgKiBJbnB1dDoKKyAqICAgICAgZ2FwICAgICAtIEZsb3cgY29udHJvbC9kcm9wIHR1cm4gT0ZGIHRocmVzaG9sZCA9IHR1cm4gT04gdGhyZXNob2xkIC0gZ2FwCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAtIGlucHV0IHBhcmFtZXRlciBvdXQgb2YgcmFuZ2UKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0VncmVzc0Zsb3dDb250cm9sUXVldWVEcm9wR2FwKHJ0a191aW50MzIgZ2FwKQoreworICAgIGlmKGdhcCA+PSBSVEw4MzY3Q19QQUdFX05VTUJFUikKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1FVRVVFX0dBUCwgUlRMODM2N0NfRkxPV0NUUkxfUVVFVUVfR0FQX01BU0ssIGdhcCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljRWdyZXNzRmxvd0NvbnRyb2xRdWV1ZURyb3BHYXAKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgUXVldWUtYmFzZWQgZWdyZXNzIGZsb3cgY29udHJvbCB0dXJuIG9mZiBvciBpbmdyZXNzIGZsb3cgY29udHJvbCBkcm9wIG9mZiBnYXAKKyAqIElucHV0OgorICogICAgICBwR2FwICAgIC0gRmxvdyBjb250cm9sL2Ryb3AgdHVybiBPRkYgdGhyZXNob2xkID0gdHVybiBPTiB0aHJlc2hvbGQgLSBnYXAKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNFZ3Jlc3NGbG93Q29udHJvbFF1ZXVlRHJvcEdhcChydGtfdWludDMyICpwR2FwKQoreworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfRkxPV0NUUkxfUVVFVUVfR0FQLCBSVEw4MzY3Q19GTE9XQ1RSTF9RVUVVRV9HQVBfTUFTSywgcEdhcCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljRWdyZXNzUXVldWVFbXB0eVBvcnRNYXNrCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHF1ZXVlIGVtcHR5IHBvcnQgbWFzaworICogSW5wdXQ6CisgKiAgICAgIHBQb3J0bWFzayAgIC0gIFF1ZXVlIGVtcHR5IHBvcnQgbWFzaworICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0VncmVzc1F1ZXVlRW1wdHlQb3J0TWFzayhydGtfdWludDMyICpwUG9ydG1hc2spCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfUkVHX1BPUlRfUUVNUFRZLCBwUG9ydG1hc2spOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1RvdGFsUGFnZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBzeXN0ZW0gdG90YWwgcGFnZSB1c2FnZSBudW1iZXIKKyAqIElucHV0OgorICogICAgICBwUGFnZUNvdW50ICAtICBwYWdlIHVzYWdlIG51bWJlcgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1RvdGFsUGFnZShydGtfdWludDMyICpwUGFnZUNvdW50KQoreworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfRkxPV0NUUkxfVE9UQUxfUEFHRV9DT1VOVEVSLCBSVEw4MzY3Q19GTE9XQ1RSTF9UT1RBTF9QQUdFX0NPVU5URVJfTUFTSywgcFBhZ2VDb3VudCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljUHVsYmljUGFnZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBzeXN0ZW0gcHVibGljIHBhZ2UgdXNhZ2UgbnVtYmVyCisgKiBJbnB1dDoKKyAqICAgICAgcFBhZ2VDb3VudCAgLSAgcGFnZSB1c2FnZSBudW1iZXIKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNQdWxiaWNQYWdlKHJ0a191aW50MzIgKnBQYWdlQ291bnQpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9QVUJMSUNfUEFHRV9DT1VOVEVSLCBSVEw4MzY3Q19GTE9XQ1RSTF9QVUJMSUNfUEFHRV9DT1VOVEVSX01BU0ssIHBQYWdlQ291bnQpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY01heFRvdGFsUGFnZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBzeXN0ZW0gdG90YWwgcGFnZSBtYXggdXNhZ2UgbnVtYmVyCisgKiBJbnB1dDoKKyAqICAgICAgcFBhZ2VDb3VudCAgLSAgcGFnZSB1c2FnZSBudW1iZXIKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNNYXhUb3RhbFBhZ2UocnRrX3VpbnQzMiAqcFBhZ2VDb3VudCkKK3sKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1RPVEFMX1BBR0VfTUFYLCBSVEw4MzY3Q19GTE9XQ1RSTF9UT1RBTF9QQUdFX01BWF9NQVNLLCBwUGFnZUNvdW50KTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNQdWxiaWNQYWdlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHN5c3RlbSBwdWJsaWMgcGFnZSBtYXggdXNhZ2UgbnVtYmVyCisgKiBJbnB1dDoKKyAqICAgICAgcFBhZ2VDb3VudCAgLSAgcGFnZSB1c2FnZSBudW1iZXIKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNNYXhQdWxiaWNQYWdlKHJ0a191aW50MzIgKnBQYWdlQ291bnQpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9QVUJMSUNfUEFHRV9NQVgsIFJUTDgzNjdDX0ZMT1dDVFJMX1BVQkxJQ19QQUdFX01BWF9NQVNLLCBwUGFnZUNvdW50KTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNQb3J0UGFnZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwZXItcG9ydCBwYWdlIHVzYWdlIG51bWJlcgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgIC0gIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjcpCisgKiAgICAgIHBQYWdlQ291bnQgIC0gIHBhZ2UgdXNhZ2UgbnVtYmVyCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BvcnRQYWdlKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcFBhZ2VDb3VudCkKK3sKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVElETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICBpZihwb3J0IDwgOCkKKyAgICAgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlRfUEFHRV9DT1VOVEVSX1JFRyhwb3J0KSwgUlRMODM2N0NfRkxPV0NUUkxfUE9SVF9QQUdFX0NPVU5URVJfTUFTSywgcFBhZ2VDb3VudCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0ZMT1dDVFJMX1BPUlQ4X1BBR0VfQ09VTlRFUitwb3J0IC0gOCwgUlRMODM2N0NfRkxPV0NUUkxfUE9SVF9QQUdFX0NPVU5URVJfTUFTSywgcFBhZ2VDb3VudCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljUG9ydFBhZ2UKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcGVyLXBvcnQgcGFnZSBtYXggdXNhZ2UgbnVtYmVyCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSAgUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgcFBhZ2VDb3VudCAgLSAgcGFnZSB1c2FnZSBudW1iZXIKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljUG9ydFBhZ2VNYXgocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyICpwUGFnZUNvdW50KQoreworICAgIGlmKHBvcnQgPiBSVEw4MzY3Q19QT1JUSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKyAgICBpZihwb3J0IDwgOCkKKyAgICAgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlRfUEFHRV9NQVhfUkVHKHBvcnQpLCBSVEw4MzY3Q19GTE9XQ1RSTF9QT1JUX1BBR0VfTUFYX01BU0ssIHBQYWdlQ291bnQpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19GTE9XQ1RSTF9QT1JUMF9QQUdFX01BWCtwb3J0LTgsIFJUTDgzNjdDX0ZMT1dDVFJMX1BPUlRfUEFHRV9NQVhfTUFTSywgcFBhZ2VDb3VudCk7CisKKworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljRmxvd0NvbnRyb2xFZ3Jlc3NQb3J0SW5kZXAKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgcGVyLXBvcnQgZWdyZXNzIGZsb3cgY29udHJvbCBpbmRlcGVuZGVudAorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgZW5hYmxlZCAgICAgLSBFZ3Jlc3MgcG9ydCBmbG93IGNvbnRyb2wgdXNhZ2UgMTplbmFibGUgMDpkaXNhYmxlLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNGbG93Q29udHJvbEVncmVzc1BvcnRJbmRlcChydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgZW5hYmxlKQoreworICAgIGlmKHBvcnQgPiBSVEw4MzY3Q19QT1JUSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19QT1JUMF9NSVNDX0NGRyArIChwb3J0ICoweDIwKSwgUlRMODM2N0NfUE9SVDBfTUlTQ19DRkdfRkxPV0NUUkxfSU5ERVBfT0ZGU0VULGVuYWJsZSk7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNGbG93Q29udHJvbEVncmVzc1BvcnRJbmRlcAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwZXItcG9ydCBlZ3Jlc3MgZmxvdyBjb250cm9sIGluZGVwZW5kZW50CisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH43KQorICogICAgICBlbmFibGVkICAgICAtIEVncmVzcyBwb3J0IGZsb3cgY29udHJvbCB1c2FnZSAxOmVuYWJsZSAwOmRpc2FibGUuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0Zsb3dDb250cm9sRWdyZXNzUG9ydEluZGVwKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcEVuYWJsZSkKK3sKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfUE9SVDBfTUlTQ19DRkcgKyAocG9ydCAqMHgyMCksUlRMODM2N0NfUE9SVDBfTUlTQ19DRkdfRkxPV0NUUkxfSU5ERVBfT0ZGU0VULHBFbmFibGUpOworfQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfZ3JlZW4uYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X2dyZWVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM4NjIzOAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X2dyZWVuLmMKQEAgLTAsMCArMSw0NDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogJFJldmlzaW9uOiA3NjMwNiAkCisgKiAkRGF0ZTogMjAxNy0wMy0wOCAxNToxMzo1OCArMDgwMCAo6YCx5LiJLCAwOCDkuInmnIggMjAxNykgJAorICoKKyAqIFB1cnBvc2UgOiBSVEw4MzY3QyBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkgZm9yIFJUTDgzNjdDCisgKiBGZWF0dXJlIDogR3JlZW4gZXRoZXJuZXQgcmVsYXRlZCBmdW5jdGlvbnMKKyAqCisgKi8KKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2X2dyZWVuLmg+CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNHcmVlblBvcnRQYWdlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHBlci1Qb3J0IGluZ3Jlc3MgcGFnZSB1c2FnZSBwZXIgc2Vjb25kCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjcpCisgKiAgICAgIHBQYWdlICAgLSBwYWdlIG51bWJlciBvZiBpbmdyZXNzIHBhY2tldCBvY2N1cGluZyBwZXIgc2Vjb25kCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIEluZ3Jlc3MgdHJhZmZpYyBvY2N1cGluZyBwYWdlIG51bWJlciBwZXIgc2Vjb25kIGZvciBoaWdoIGxheWVyIGdyZWVuIGZlYXR1cmUgdXNhZ2UKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0dyZWVuUG9ydFBhZ2UocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyKiBwUGFnZSkKK3sKKyAgICByZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiByZWdEYXRhOworICAgIHJ0a191aW50MzIgcGFnZU1ldGVyOworCisgICAgaWYocG9ydCA+IFJUTDgzNjdDX1BPUlRJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19QQUdFTUVURVJfUE9SVF9SRUcocG9ydCksICZyZWdEYXRhKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICBwYWdlTWV0ZXIgPSByZWdEYXRhOworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19QQUdFTUVURVJfUE9SVF9SRUcocG9ydCkgKyAxLCAmcmVnRGF0YSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHBhZ2VNZXRlciA9IHBhZ2VNZXRlciArIChyZWdEYXRhIDw8IDE2KTsKKworICAgICpwUGFnZSA9IHBhZ2VNZXRlcjsKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0dyZWVuVHJhZmZpY1R5cGUKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgdHJhZmZpYyB0eXBlIGZvciBlYWNoIHByaW9yaXR5CisgKiBJbnB1dDoKKyAqICAgICAgcHJpb3JpdHkgICAgLSBpbnRlcm5hbCBwcmlvcml0eSAoMH43KQorICogICAgICB0cmFmZmljdHlwZSAtIGhpZ2gvbG93IHRyYWZmaWMgdHlwZSwgMTpoaWdoIHByaW9yaXR5IHRyYWZmaWMgdHlwZSwgMDpsb3cgcHJpb3JpdHkgdHJhZmZpYyB0eXBlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUU9TX0lOVF9QUklPUklUWSAtIEludmFsaWQgcHJpb3JpdHkKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0dyZWVuVHJhZmZpY1R5cGUocnRrX3VpbnQzMiBwcmlvcml0eSwgcnRrX3VpbnQzMiB0cmFmZmljdHlwZSkKK3sKKworICAgIGlmKHByaW9yaXR5ID4gUlRMODM2N0NfUFJJTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1FPU19JTlRfUFJJT1JJVFk7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfSElHSFBSSV9DRkcsIHByaW9yaXR5LCAodHJhZmZpY3R5cGU/MTowKSk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljR3JlZW5UcmFmZmljVHlwZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCB0cmFmZmljIHR5cGUgZm9yIGVhY2ggcHJpb3JpdHkKKyAqIElucHV0OgorICogICAgICBwcmlvcml0eSAgICAtIGludGVybmFsIHByaW9yaXR5ICgwfjcpCisgKiAgICAgIHBUcmFmZmljdHlwZSAtIGhpZ2gvbG93IHRyYWZmaWMgdHlwZSwgMTpoaWdoIHByaW9yaXR5IHRyYWZmaWMgdHlwZSwgMDpsb3cgcHJpb3JpdHkgdHJhZmZpYyB0eXBlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUU9TX0lOVF9QUklPUklUWSAtIEludmFsaWQgcHJpb3JpdHkKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0dyZWVuVHJhZmZpY1R5cGUocnRrX3VpbnQzMiBwcmlvcml0eSwgcnRrX3VpbnQzMiogcFRyYWZmaWN0eXBlKQoreworICAgIGlmKHByaW9yaXR5ID4gUlRMODM2N0NfUFJJTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1FPU19JTlRfUFJJT1JJVFk7CisKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfSElHSFBSSV9DRkcsIHByaW9yaXR5LCBwVHJhZmZpY3R5cGUpOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljR3JlZW5IaWdoUHJpb3JpdHlUcmFmZmljCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IGluZGljYXRvciB3aGljaCBBU0lDIGhhZCByZWNlaXZlZCBoaWdoIHByaW9yaXR5IHRyYWZmaWMKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH43KQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNHcmVlbkhpZ2hQcmlvcml0eVRyYWZmaWMocnRrX3VpbnQzMiBwb3J0KQoreworICAgIGlmKHBvcnQgPiBSVEw4MzY3Q19QT1JUSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19ISUdIUFJJX0lORElDQVRPUiwgcG9ydCwgMSk7Cit9CisKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0dyZWVuSGlnaFByaW9yaXR5VHJhZmZpYworICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBpbmRpY2F0b3Igd2hpY2ggQVNJQyBoYWQgcmVjZWl2ZWQgaGlnaCBwcmlvcml0eSB0cmFmZmljIG9yIG5vdAorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgcEluZGljYXRvciAgLSBIYXZlIHJlY2VpdmVkIGhpZ2ggcHJpb3JpdHkgdHJhZmZpYyBpbmRpY2F0b3IuIElmIDEgbWVhbnMgQVNDSSBoYWQgcmVjZWl2ZWQgaGlnaCBwcmlvcml0eSBpbiAxc2Vjb25kIGNoZWNraW5nIHByaW9kCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0dyZWVuSGlnaFByaW9yaXR5VHJhZmZpYyhydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIqIHBJbmRpY2F0b3IpCit7CisgICAgaWYocG9ydCA+IFJUTDgzNjdDX1BPUlRJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0hJR0hQUklfSU5ESUNBVE9SLCBwb3J0LCBwSW5kaWNhdG9yKTsKK30KKworLyoKK0BmdW5jIHJ0a19pbnQzMiB8IHJ0bDgzNjdjX3NldEFzaWNHcmVlbkV0aGVybmV0IHwgU2V0IGdyZWVuIGV0aGVybmV0IGZ1bmN0aW9uLgorQHBhcm0gcnRrX3VpbnQzMiB8IGdyZWVuIHwgR3JlZW4gZmVhdHVyZSBmdW5jdGlvbiB1c2FnZSAxOmVuYWJsZSAwOmRpc2FibGUuCitAcnZhbHVlIFJUX0VSUl9PSyB8IFN1Y2Nlc3MuCitAcnZhbHVlIFJUX0VSUl9TTUkgfCBTTUkgYWNjZXNzIGVycm9yLgorQGNvbW0KKyAgICBUaGUgQVBJIGNhbiBzZXQgR3JlZW4gRXRoZXJuZXQgZnVuY3Rpb24gdG8gcmVkdWNlIHBvd2VyIGNvbnN1bXB0aW9uLiBXaGlsZSBncmVlbiBmZWF0dXJlIGlzIGVuYWJsZWQsIEFTSUMgd2lsbCBhdXRvbWF0aWMKKyBkZXRlY3QgdGhlIGNhYmxlIGxlbmd0aCBhbmQgdGhlbiBzZWxlY3QgZGlmZmVyZW50IHBvd2VyIG1vZGUgZm9yIGJlc3QgcGVyZm9ybWFuY2Ugd2l0aCBtaW5pbXVtcyBwb3dlciBjb25zdW1wdGlvbi4gTGluayBkb3duCisgcG9ydHMgd2lsbCBlbnRlciBwb3dlciBzYXZpbmluZyBtb2RlIGluIDEwIHNlY29uZHMgYWZ0ZXIgdGhlIGNhYmxlIGRpc2Nvbm5lY3RlZCBpZiBwb3dlciBzYXZpbmcgZnVuY3Rpb24gaXMgZW5hYmxlZC4KKyovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljR3JlZW5FdGhlcm5ldChydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgZ3JlZW4pCit7CisgICAgcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgY2hlY2tDb3VudGVyOworICAgIHJ0a191aW50MzIgcmVnRGF0YTsKKyAgICBydGtfdWludDMyIHBoeV9zdGF0dXM7CisgICAgcnRrX3VpbnQzMiBwYXRjaERhdGFbNl1bMl0gPSB7IHsweDgwOUEsIDB4ODkxMX0sIHsweDgwQTMsIDB4OTIzM30sIHsweDgwQUMsIDB4QTQ0NH0sIHsweDgwOUYsIDB4NkIyMH0sIHsweDgwQTgsIDB4NkIyMn0sIHsweDgwQjEsIDB4NkIyM30gfTsKKyAgICBydGtfdWludDMyIGlkeDsKKyAgICBydGtfdWludDMyIGRhdGE7CisKKyAgICBpZiAoZ3JlZW4gPiAxKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgLyogMHhhNDIwWzI6MF0gKi8KKyAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BIWU9DUFJlZyhwb3J0LCAweEE0MjAsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIHBoeV9zdGF0dXMgPSAocmVnRGF0YSAmIDB4MDAwNyk7CisKKyAgICBpZihwaHlfc3RhdHVzID09IDMpCisgICAgeworICAgICAgICAvKiAweGI4MjBbNF0gPSAxICovCisgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUEhZT0NQUmVnKHBvcnQsIDB4QjgyMCwgJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIHJlZ0RhdGEgfD0gKDB4MDAwMSA8PCA0KTsKKworICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BIWU9DUFJlZyhwb3J0LCAweEI4MjAsIHJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIC8qIHdhaXQgMHhiODAwWzZdID0gMSAqLworICAgICAgICBjaGVja0NvdW50ZXIgPSAxMDA7CisgICAgICAgIHdoaWxlKGNoZWNrQ291bnRlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BIWU9DUFJlZyhwb3J0LCAweEI4MDAsICZyZWdEYXRhKTsKKyAgICAgICAgICAgIGlmKCAocmV0VmFsICE9IFJUX0VSUl9PSykgfHwgKChyZWdEYXRhICYgMHgwMDQwKSAhPSAweDAwNDApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjaGVja0NvdW50ZXIgLS07CisgICAgICAgICAgICAgICAgaWYoMCA9PSBjaGVja0NvdW50ZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBSVF9FUlJfQlVTWVdBSVRfVElNRU9VVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjaGVja0NvdW50ZXIgPSAwOworICAgICAgICB9CisgICAgfQorCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHgxM0MyLCAweDAyNDkpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZygweDEzMDAsICZkYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHgxM0MyLCAweDAwMDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBzd2l0Y2ggKGRhdGEpCisgICAgeworICAgICAgICBjYXNlIDB4MDI3NjoKKyAgICAgICAgY2FzZSAweDA1OTc6CisgICAgICAgIGNhc2UgMHg2MzY3OgorICAgICAgICAgICAgaWYoZ3JlZW4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yKGlkeCA9IDA7IGlkeCA8IDY7IGlkeCsrICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUEhZT0NQUmVnKHBvcnQsIDB4QTQzNiwgcGF0Y2hEYXRhW2lkeF1bMF0pKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUEhZT0NQUmVnKHBvcnQsIDB4QTQzOCwgcGF0Y2hEYXRhW2lkeF1bMV0pKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7OworICAgIH0KKworCisKKyAgICAvKiAweGE0MzYgPSAweDgwMTEgKi8KKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BIWU9DUFJlZyhwb3J0LCAweEE0MzYsIDB4ODAxMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIC8qIHdyIDB4YTQzOFsxNV0gPSAwOiBkaXNhYmxlLCAxOiBlbmFibGUgKi8KKyAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BIWU9DUFJlZyhwb3J0LCAweEE0MzgsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYoZ3JlZW4pCisgICAgICAgIHJlZ0RhdGEgfD0gMHg4MDAwOworICAgIGVsc2UKKyAgICAgICAgcmVnRGF0YSAmPSAweDdGRkY7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BIWU9DUFJlZyhwb3J0LCAweEE0MzgsIHJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZihwaHlfc3RhdHVzID09IDMpCisgICAgeworICAgICAgICAvKiAweGI4MjBbNF0gPSAwICAqLworICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BIWU9DUFJlZyhwb3J0LCAweEI4MjAsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICByZWdEYXRhICY9IH4oMHgwMDAxIDw8IDQpOworCisgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUEhZT0NQUmVnKHBvcnQsIDB4QjgyMCwgcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgLyogd2FpdCAweGI4MDBbNl0gPSAwICovCisgICAgICAgIGNoZWNrQ291bnRlciA9IDEwMDsKKyAgICAgICAgd2hpbGUoY2hlY2tDb3VudGVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUEhZT0NQUmVnKHBvcnQsIDB4QjgwMCwgJnJlZ0RhdGEpOworICAgICAgICAgICAgaWYoIChyZXRWYWwgIT0gUlRfRVJSX09LKSB8fCAoKHJlZ0RhdGEgJiAweDAwNDApICE9IDB4MDAwMCkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNoZWNrQ291bnRlciAtLTsKKyAgICAgICAgICAgICAgICBpZigwID09IGNoZWNrQ291bnRlcikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9CVVNZV0FJVF9USU1FT1VUOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNoZWNrQ291bnRlciA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKgorQGZ1bmMgcnRrX2ludDMyIHwgcnRsODM2N2NfZ2V0QXNpY0dyZWVuRXRoZXJuZXQgfCBHZXQgZ3JlZW4gZXRoZXJuZXQgZnVuY3Rpb24uCitAcGFybSBydGtfdWludDMyIHwgKmdyZWVuIHwgR3JlZW4gZmVhdHVyZSBmdW5jdGlvbiB1c2FnZSAxOmVuYWJsZSAwOmRpc2FibGUuCitAcnZhbHVlIFJUX0VSUl9PSyB8IFN1Y2Nlc3MuCitAcnZhbHVlIFJUX0VSUl9TTUkgfCBTTUkgYWNjZXNzIGVycm9yLgorQGNvbW0KKyAgICBUaGUgQVBJIGNhbiBzZXQgR3JlZW4gRXRoZXJuZXQgZnVuY3Rpb24gdG8gcmVkdWNlIHBvd2VyIGNvbnN1bXB0aW9uLiBXaGlsZSBncmVlbiBmZWF0dXJlIGlzIGVuYWJsZWQsIEFTSUMgd2lsbCBhdXRvbWF0aWMKKyBkZXRlY3QgdGhlIGNhYmxlIGxlbmd0aCBhbmQgdGhlbiBzZWxlY3QgZGlmZmVyZW50IHBvd2VyIG1vZGUgZm9yIGJlc3QgcGVyZm9ybWFuY2Ugd2l0aCBtaW5pbXVtcyBwb3dlciBjb25zdW1wdGlvbi4gTGluayBkb3duCisgcG9ydHMgd2lsbCBlbnRlciBwb3dlciBzYXZpbmluZyBtb2RlIGluIDEwIHNlY29uZHMgYWZ0ZXIgdGhlIGNhYmxlIGRpc2Nvbm5lY3RlZCBpZiBwb3dlciBzYXZpbmcgZnVuY3Rpb24gaXMgZW5hYmxlZC4KKyovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljR3JlZW5FdGhlcm5ldChydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIqIGdyZWVuKQoreworICAgIHJldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHJlZ0RhdGE7CisKKyAgICAvKiAweGE0MzYgPSAweDgwMTEgKi8KKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BIWU9DUFJlZyhwb3J0LCAweEE0MzYsIDB4ODAxMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIC8qIHdyIDB4YTQzOFsxNV0gPSAwOiBkaXNhYmxlLCAxOiBlbmFibGUgKi8KKyAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BIWU9DUFJlZyhwb3J0LCAweEE0MzgsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYocmVnRGF0YSAmIDB4ODAwMCkKKyAgICAgICAgKmdyZWVuID0gRU5BQkxFRDsKKyAgICBlbHNlCisgICAgICAgICpncmVlbiA9IERJU0FCTEVEOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworCisvKgorQGZ1bmMgcmV0X3QgfCBydGw4MzY3Y19zZXRBc2ljUG93ZXJTYXZpbmcgfCBTZXQgcG93ZXIgc2F2aW5nIG1vZGUKK0BwYXJtIHJ0a191aW50MzIgfCBwaHkgfCBwaHkgbnVtYmVyCitAcGFybSBydGtfdWludDMyIHwgZW5hYmxlIHwgZW5hYmxlIHBvd2VyIHNhdmluZyBtb2RlLgorQHJ2YWx1ZSBSVF9FUlJfT0sgfCBTdWNjZXNzLgorQHJ2YWx1ZSBSVF9FUlJfU01JIHwgU01JIGFjY2VzcyBlcnJvci4KK0BydmFsdWUgUlRfRVJSX1BPUlRfSUQgfCBJbnZhbGlkIHBvcnQgbnVtYmVyLgorQGNvbW0KKyAgICBUaGUgQVBJIGNhbiBzZXQgcG93ZXIgc2F2aW5nIG1vZGUgcGVyIHBoeS4KKyovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljUG93ZXJTYXZpbmcocnRrX3VpbnQzMiBwaHksIHJ0a191aW50MzIgZW5hYmxlKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcGh5RGF0YTsKKyAgICBydGtfdWludDMyIHJlZ0RhdGE7CisgICAgcnRrX3VpbnQzMiBwaHlfc3RhdHVzOworICAgIHJ0a191aW50MzIgY2hlY2tDb3VudGVyOworCisgICAgaWYgKGVuYWJsZSA+IDEpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICAvKiAweGE0MjBbMjowXSAqLworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUEhZT0NQUmVnKHBoeSwgMHhBNDIwLCAmcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHBoeV9zdGF0dXMgPSAocmVnRGF0YSAmIDB4MDAwNyk7CisKKyAgICBpZihwaHlfc3RhdHVzID09IDMpCisgICAgeworICAgICAgICAvKiAweGI4MjBbNF0gPSAxICovCisgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUEhZT0NQUmVnKHBoeSwgMHhCODIwLCAmcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgcmVnRGF0YSB8PSAoMHgwMDAxIDw8IDQpOworCisgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUEhZT0NQUmVnKHBoeSwgMHhCODIwLCByZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAvKiB3YWl0IDB4YjgwMFs2XSA9IDEgKi8KKyAgICAgICAgY2hlY2tDb3VudGVyID0gMTAwOworICAgICAgICB3aGlsZShjaGVja0NvdW50ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQSFlPQ1BSZWcocGh5LCAweEI4MDAsICZyZWdEYXRhKTsKKyAgICAgICAgICAgIGlmKCAocmV0VmFsICE9IFJUX0VSUl9PSykgfHwgKChyZWdEYXRhICYgMHgwMDQwKSAhPSAweDAwNDApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjaGVja0NvdW50ZXIgLS07CisgICAgICAgICAgICAgICAgaWYoMCA9PSBjaGVja0NvdW50ZXIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9CVVNZV0FJVF9USU1FT1VUOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjaGVja0NvdW50ZXIgPSAwOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUEhZUmVnKHBoeSxQSFlfUE9XRVJTQVZJTkdfUkVHLCZwaHlEYXRhKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHBoeURhdGEgPSBwaHlEYXRhICYgfigweDAwMDEgPDwgMik7CisgICAgcGh5RGF0YSA9IHBoeURhdGEgfCAoZW5hYmxlIDw8IDIpOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUEhZUmVnKHBoeSxQSFlfUE9XRVJTQVZJTkdfUkVHLHBoeURhdGEpKSE9UlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYocGh5X3N0YXR1cyA9PSAzKQorICAgIHsKKyAgICAgICAgLyogMHhiODIwWzRdID0gMCAgKi8KKyAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQSFlPQ1BSZWcocGh5LCAweEI4MjAsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICByZWdEYXRhICY9IH4oMHgwMDAxIDw8IDQpOworCisgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUEhZT0NQUmVnKHBoeSwgMHhCODIwLCByZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAvKiB3YWl0IDB4YjgwMFs2XSA9IDAgKi8KKyAgICAgICAgY2hlY2tDb3VudGVyID0gMTAwOworICAgICAgICB3aGlsZShjaGVja0NvdW50ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQSFlPQ1BSZWcocGh5LCAweEI4MDAsICZyZWdEYXRhKTsKKyAgICAgICAgICAgIGlmKCAocmV0VmFsICE9IFJUX0VSUl9PSykgfHwgKChyZWdEYXRhICYgMHgwMDQwKSAhPSAweDAwMDApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjaGVja0NvdW50ZXIgLS07CisgICAgICAgICAgICAgICAgaWYoMCA9PSBjaGVja0NvdW50ZXIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gUlRfRVJSX0JVU1lXQUlUX1RJTUVPVVQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNoZWNrQ291bnRlciA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKgorQGZ1bmMgcmV0X3QgfCBydGw4MzY3Y19nZXRBc2ljUG93ZXJTYXZpbmcgfCBHZXQgcG93ZXIgc2F2aW5nIG1vZGUKK0BwYXJtIHJ0a191aW50MzIgfCBwb3J0IHwgVGhlIHBvcnQgbnVtYmVyCitAcGFybSBydGtfdWludDMyKiB8IGVuYWJsZSB8IGVuYWJsZSBwb3dlciBzYXZpbmcgbW9kZS4KK0BydmFsdWUgUlRfRVJSX09LIHwgU3VjY2Vzcy4KK0BydmFsdWUgUlRfRVJSX1NNSSB8IFNNSSBhY2Nlc3MgZXJyb3IuCitAcnZhbHVlIFJUX0VSUl9QT1JUX0lEIHwgSW52YWxpZCBwb3J0IG51bWJlci4KK0Bjb21tCisgICAgVGhlIEFQSSBjYW4gZ2V0IHBvd2VyIHNhdmluZyBtb2RlIHBlciBwaHkuCisqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1Bvd2VyU2F2aW5nKHJ0a191aW50MzIgcGh5LCBydGtfdWludDMyKiBlbmFibGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBwaHlEYXRhOworCisgICAgaWYoTlVMTCA9PSBlbmFibGUpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUEhZUmVnKHBoeSxQSFlfUE9XRVJTQVZJTkdfUkVHLCZwaHlEYXRhKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgocGh5RGF0YSAmIDB4MDAwNCkgPiAwKQorICAgICAgICAqZW5hYmxlID0gMTsKKyAgICBlbHNlCisgICAgICAgICplbmFibGUgPSAwOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfaHNiLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9oc2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzUzNjhkCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfaHNiLmMKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiAkUmV2aXNpb246IDc2MzA2ICQKKyAqICREYXRlOiAyMDE3LTAzLTA4IDE1OjEzOjU4ICswODAwICjpgLHkuIksIDA4IOS4ieaciCAyMDE3KSAkCisgKgorICogUHVycG9zZSA6IFJUTDgzNjdDIHN3aXRjaCBoaWdoLWxldmVsIEFQSSBmb3IgUlRMODM2N0MKKyAqIEZlYXR1cmUgOiBGaWVsZCBzZWxlY3RvciByZWxhdGVkIGZ1bmN0aW9ucworICoKKyAqLworI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnZfaHNiLmg+CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljRmllbGRTZWxlY3RvcgorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCB1c2VyIGRlZmluZWQgZmllbGQgc2VsZWN0b3JzIGluIEhTQgorICogSW5wdXQ6CisgKiAgICAgIGluZGV4ICAgICAgIC0gaW5kZXggb2YgZmllbGQgc2VsZWN0b3IgMC0xNQorICogICAgICBmb3JtYXQgICAgICAtIEZvcm1hdCBvZiBmaWVsZCBzZWxlY3RvcgorICogICAgICBvZmZzZXQgICAgICAtIFJldHJpZXZpbmcgZGF0YSBvZmZzZXQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gaW5wdXQgcGFyYW1ldGVyIG91dCBvZiByYW5nZQorICogTm90ZToKKyAqICAgICAgU3lzdGVtIHN1cHBvcnQgMTYgdXNlciBkZWZpbmVkIGZpZWxkIHNlbGN0b3JzLgorICogICAgICBFYWNoIHNlbGVjdG9yIGNhbiBiZSBlbmFibGVkIG9yIGRpc2FibGUuIFVzZXIgY2FuIGRlZmluZWQgcmV0cmlldmluZyAxNi1iaXRzIGluIG1hbnkgcHJlZGVmaWVuZAorICogICAgICBzdGFuZGFyZCBsMi9sMy9sNCBwYXlsb2FkLgorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljRmllbGRTZWxlY3RvcihydGtfdWludDMyIGluZGV4LCBydGtfdWludDMyIGZvcm1hdCwgcnRrX3VpbnQzMiBvZmZzZXQpCit7CisgICAgcnRrX3VpbnQzMiByZWdEYXRhOworCisgICAgaWYoaW5kZXggPiBSVEw4MzY3Q19GSUVMRFNFTF9GT1JNQVRfTlVNQkVSKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIGlmKGZvcm1hdCA+PSBGSUVMRFNFTF9GT1JNQVRfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIHJlZ0RhdGEgPSAoKChmb3JtYXQgPDwgUlRMODM2N0NfRklFTERfU0VMRUNUT1JfRk9STUFUX09GRlNFVCkgJiBSVEw4MzY3Q19GSUVMRF9TRUxFQ1RPUl9GT1JNQVRfTUFTSyApIHwKKyAgICAgICAgICAgICAgICgob2Zmc2V0IDw8IFJUTDgzNjdDX0ZJRUxEX1NFTEVDVE9SX09GRlNFVF9PRkZTRVQpICYgUlRMODM2N0NfRklFTERfU0VMRUNUT1JfT0ZGU0VUX01BU0sgKSk7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19GSUVMRF9TRUxFQ1RPUl9SRUcoaW5kZXgpLCByZWdEYXRhKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNGaWVsZFNlbGVjdG9yCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHVzZXIgZGVmaW5lZCBmaWVsZCBzZWxlY3RvcnMgaW4gSFNCCisgKiBJbnB1dDoKKyAqICAgICAgaW5kZXggICAgICAgLSBpbmRleCBvZiBmaWVsZCBzZWxlY3RvciAwLTE1CisgKiAgICAgIHBGb3JtYXQgICAgIC0gRm9ybWF0IG9mIGZpZWxkIHNlbGVjdG9yCisgKiAgICAgIHBPZmZzZXQgICAgIC0gUmV0cmlldmluZyBkYXRhIG9mZnNldAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNGaWVsZFNlbGVjdG9yKHJ0a191aW50MzIgaW5kZXgsIHJ0a191aW50MzIqIHBGb3JtYXQsIHJ0a191aW50MzIqIHBPZmZzZXQpCit7CisgICAgcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcmVnRGF0YTsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfRklFTERfU0VMRUNUT1JfUkVHKGluZGV4KSwgJnJlZ0RhdGEpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAqcEZvcm1hdCAgICA9ICgocmVnRGF0YSAmIFJUTDgzNjdDX0ZJRUxEX1NFTEVDVE9SX0ZPUk1BVF9NQVNLKSA+PiBSVEw4MzY3Q19GSUVMRF9TRUxFQ1RPUl9GT1JNQVRfT0ZGU0VUKTsKKyAgICAqcE9mZnNldCAgICA9ICgocmVnRGF0YSAmIFJUTDgzNjdDX0ZJRUxEX1NFTEVDVE9SX09GRlNFVF9NQVNLKSA+PiBSVEw4MzY3Q19GSUVMRF9TRUxFQ1RPUl9PRkZTRVRfT0ZGU0VUKTsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9pMmMuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X2kyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZjIwYTAKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9pMmMuYwpAQCAtMCwwICsxLDQ3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiAkUmV2aXNpb246IDM4NjUxICQKKyAqICREYXRlOiAyMDE2LTAyLTI3IDE0OjMyOjU2ICswODAwICjlkajkuIksIDE3IOWbm+aciCAyMDE2KSAkCisgKgorICogUHVycG9zZSA6IFJUTDgzNjdDIHN3aXRjaCBoaWdoLWxldmVsIEFQSSBmb3IgUlRMODM2N0MKKyAqIEZlYXR1cmUgOiBJMkMgcmVsYXRlZCBmdW5jdGlvbnMKKyAqCisgKi8KKworCisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl9pMmMuaD4KKyNpbmNsdWRlIDxydGtfZXJyb3IuaD4KKyNpbmNsdWRlIDxydGtfdHlwZXMuaD4KKworCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNJMkNfY2hlY2tCdXNJZGxlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQ2hlY2sgaTJjIGJ1cyBzdGF0dXMgaWRsZSBvciBub3QKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfQlVTWVdBSVRfVElNRU9VVCAgLSBpMmMgYnVzIGlzIGJ1c3kKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBjaGVjayBpMmMgYnVzIHN0YXR1cy4KKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0kyQ19jaGVja0J1c0lkbGUodm9pZCkKK3sKKyAgICBydGtfdWludDMyIHJlZ0RhdGE7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19NX0kyQ19DVExfU1RBX1JFRywgUlRMODM2N0NfTV9JMkNfQlVTX0lETEVfT0ZGU0VULCAmcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmKHJlZ0RhdGEgPT0gMHgwMDAxKQorICAgICAgICByZXR1cm4gUlRfRVJSX09LOyAvKmkyYyBpcyBpZGxlKi8KKyAgICBlbHNlCisgICAgICAgIHJldHVybiBSVF9FUlJfQlVTWVdBSVRfVElNRU9VVDsgLyppMmMgaXMgYnVzeSovCit9CisKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0kyQ1N0YXJ0Q21kCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IEkyQyBzdGFydCBjb21tYW5kCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBzZXQgaTJjIHN0YXJ0IGNvbW1hbmQgLHN0YXJ0IGEgaTJjIHRyYWZmaWMgIC4KKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0kyQ1N0YXJ0Q21kKHZvaWQpCit7CisgICAgcnRrX3VpbnQzMiByZWdEYXRhOworICAgIHJldF90IHJldFZhbDsKKworICAgIC8qIEJpdHMgWzQtMV0gPSAwYjAwMDAsIFN0YXJ0IENvbW1hbmQ7IEJpdCBbMF0gPSAxLCBUcmlnZ2VyIHRoZSBDb21tYW5kICovCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19NX0kyQ19DVExfU1RBX1JFRywgJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgcmVnRGF0YSAmPSAweEZGRTA7CisgICAgcmVnRGF0YSB8PSAweDAwMDE7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX01fSTJDX0NUTF9TVEFfUkVHLCByZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgLyogd2FpdCBmb3IgY29tbWFuZCBmaW5pc2hlZCAqLworICAgIGRveworICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfTV9JMkNfQ1RMX1NUQV9SRUcsIFJUTDgzNjdDX0kyQ19DTURfRVhFQ19PRkZTRVQsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9d2hpbGUoIHJlZ0RhdGEgIT0gMHgwKTsKKworICAgIHJldHVybiBSVF9FUlJfT0sgOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljSTJDU3RvcENtZAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBJMkMgc3RvcCBjb21tYW5kCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBzZXQgaTJjIHN0b3AgY29tbWFuZCAsc3RvcCBhIGkyYyB0cmFmZmljLgorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljSTJDU3RvcENtZCh2b2lkKQoreworCisgICAgcnRrX3VpbnQzMiByZWdEYXRhOworICAgIHJldF90IHJldFZhbDsKKworICAgIC8qIEJpdHMgWzQtMV0gPSAwYjAwMDEsIFN0b3AgQ29tbWFuZDsgQml0IFswXSA9IDEsIFRyaWdnZXIgdGhlIENvbW1hbmQgKi8KKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfUkVHX01fSTJDX0NUTF9TVEFfUkVHLCAmcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICByZWdEYXRhICY9IDB4RkZFMDsKKyAgICByZWdEYXRhIHw9IDB4MDAwMzsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfTV9JMkNfQ1RMX1NUQV9SRUcsIHJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKworICAgIC8qIHdhaXQgZm9yIGNvbW1hbmQgZmluaXNoZWQgKi8KKyAgICBkb3sKKyAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX01fSTJDX0NUTF9TVEFfUkVHLCBSVEw4MzY3Q19JMkNfQ01EX0VYRUNfT0ZGU0VULCAmcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfXdoaWxlKCByZWdEYXRhICE9IDB4MCk7CisKKyAgICByZXR1cm4gUlRfRVJSX09LIDsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0kyQ1R4T25lQ2hhckNtZAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBJMkMgVHggYSBjaGFyIGNvbW1hbmQsIHdpdGggYSA4LWJpdCBkYXRhCisgKiBJbnB1dDoKKyAqICAgICAgb25lQ2hhciAtIDgtYml0IGRhdGEKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBjYW4gc2V0IGkyYyBUeCBjb21tYW5kIGFuZCB3aXRoIGEgOC1iaXQgZGF0YS4KKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0kyQ1R4T25lQ2hhckNtZChydGtfdWludDggb25lQ2hhcikKK3sKKyAgICBydGtfdWludDMyIHJlZ0RhdGE7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgLyogQml0cyBbNC0xXSA9IDBiMDAxMCwgdHggb25lIGNoYXI7IEJpdCBbMF0gPSAxLCBUcmlnZ2VyIHRoZSBDb21tYW5kICovCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19NX0kyQ19DVExfU1RBX1JFRywgJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZWdEYXRhICY9IDB4RkZFMDsKKyAgICByZWdEYXRhIHw9IDB4MDAwNTsKKyAgICByZWdEYXRhICY9IDB4MDBGRjsKKyAgICByZWdEYXRhIHw9IChydGtfdWludDE2KSAob25lQ2hhciA8PCA4KTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfTV9JMkNfQ1RMX1NUQV9SRUcsIHJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKworICAgLyogd2FpdCBmb3IgY29tbWFuZCBmaW5pc2hlZCAqLworICAgIGRveworICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfTV9JMkNfQ1RMX1NUQV9SRUcsIFJUTDgzNjdDX0kyQ19DTURfRVhFQ19PRkZTRVQsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9d2hpbGUoIHJlZ0RhdGEgIT0gMHgwKTsKKworICAgIHJldHVybiBSVF9FUlJfT0sgOworfQorCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNJMkNjaGVja1J4QWNrCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQ2hlY2sgaWYgcnggYW4gQWNrCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBjaGVjayBpZiByeCBhbiBhY2sgZnJvbSBpMmMgc2xhdmUuCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNJMkNjaGVja1J4QWNrKHZvaWQpCit7CisgICAgcnRrX3VpbnQzMiByZWdEYXRhOworICAgIHJldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIGNvdW50ID0gMDsKKworICAgIGRveworICAgICAgICAgY291bnQrKzsKKyAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfTV9JMkNfQ1RMX1NUQV9SRUcsIFJUTDgzNjdDX1NMVl9BQ0tfRkxBR19PRkZTRVQsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9d2hpbGUoIChyZWdEYXRhICE9IDB4MSkgJiYgKGNvdW50IDwgVElNRVJPVVRfRk9SX01JQ1JPU0VNSSkgKTsKKworICAgIGlmKHJlZ0RhdGEgIT0gMHgxKQorICAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0kyQ1J4T25lQ2hhckNtZAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBJMkMgUnggY29tbWFuZCBhbmQgZ2V0IDgtYml0IGRhdGEKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBWYWx1ZSAtIDhiaXQtZGF0YQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBjYW4gc2V0IEkyQyBSeCBjb21tYW5kIGFuZCBnZXQgOC1iaXQgZGF0YS4KKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0kyQ1J4T25lQ2hhckNtZChydGtfdWludDggKnBWYWx1ZSkKK3sKKyAgICBydGtfdWludDMyIHJlZ0RhdGE7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgLyogQml0cyBbNC0xXSA9IDBiMDAxMSwgUnggb25lIGNoYXI7IEJpdCBbMF0gPSAxLCBUcmlnZ2VyIHRoZSBDb21tYW5kICovCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19NX0kyQ19DVExfU1RBX1JFRywgJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgcmVnRGF0YSAmPSAweEZGRTA7CisgICAgcmVnRGF0YSB8PSAweDAwMDc7CisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19NX0kyQ19DVExfU1RBX1JFRywgcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIC8qIHdhaXQgZm9yIGNvbW1hbmQgZmluaXNoZWQgKi8KKyAgICAgZG97CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfTV9JMkNfQ1RMX1NUQV9SRUcsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgIH13aGlsZSggKHJlZ0RhdGEgJiAweDEpICE9IDB4MCk7CisKKyAgICAqcFZhbHVlID0gKHJ0a191aW50OCkocmVnRGF0YSA+PiA4KTsKKyAgICAgcmV0dXJuIFJUX0VSUl9PSyA7CisKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0kyQ1R4QWNrQ21kCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IEkyQyBUeCBBQ0sgY29tbWFuZAorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBjYW4gc2V0IEkyQyBUeCBhY2sgY29tbWFuZC4KKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0kyQ1R4QWNrQ21kKHZvaWQpCit7CisgICAgcnRrX3VpbnQzMiByZWdEYXRhOworICAgIHJldF90IHJldFZhbDsKKworICAgIC8qIEJpdHMgWzQtMV0gPSAwYjAxMDAsIHR4IEFDSyBDb21tYW5kOyBCaXQgWzBdID0gMSwgVHJpZ2dlciB0aGUgQ29tbWFuZCAqLworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfTV9JMkNfQ1RMX1NUQV9SRUcsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIHJlZ0RhdGEgJj0gMHhGRkUwOworICAgIHJlZ0RhdGEgfD0gMHgwMDA5OworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfTV9JMkNfQ1RMX1NUQV9SRUcsIHJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgLyogd2FpdCBmb3IgY29tbWFuZCBmaW5pc2hlZCAqLworICAgIGRveworICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfTV9JMkNfQ1RMX1NUQV9SRUcsIFJUTDgzNjdDX0kyQ19DTURfRVhFQ19PRkZTRVQsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9d2hpbGUoIHJlZ0RhdGEgIT0gMHgwKTsKKworICAgIHJldHVybiBSVF9FUlJfT0sgOworCit9CisKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0kyQ1R4Tm9BY2tDbWQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgSTJDIG1hc3RlciBUeCBub0FDSyBjb21tYW5kCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBzZXQgSTJDIG1hc3RlciBUeCBub0FDSyBjb21tYW5kLgorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljSTJDVHhOb0Fja0NtZCh2b2lkKQoreworICAgIHJ0a191aW50MzIgcmVnRGF0YTsKKyAgICByZXRfdCByZXRWYWw7CisKKyAgICAvKiBCaXRzIFs0LTFdID0gMGIwMTAxLCB0eCBub0FDSyBDb21tYW5kOyBCaXQgWzBdID0gMSwgVHJpZ2dlciB0aGUgQ29tbWFuZCAqLworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfTV9JMkNfQ1RMX1NUQV9SRUcsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIHJlZ0RhdGEgJj0gMHhGRkUwOworICAgIHJlZ0RhdGEgfD0gMHgwMDBiOworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfTV9JMkNfQ1RMX1NUQV9SRUcsIHJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgLyogd2FpdCBmb3IgY29tbWFuZCBmaW5pc2hlZCAqLworICAgIGRveworICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfTV9JMkNfQ1RMX1NUQV9SRUcsIFJUTDgzNjdDX0kyQ19DTURfRVhFQ19PRkZTRVQsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9d2hpbGUoIHJlZ0RhdGEgIT0gMHgwKTsKKworICAgIHJldHVybiBSVF9FUlJfT0sgOworCit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNJMkNTb2Z0UlNUc2VxQ21kCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgc2V0IEkyQyBtYXN0ZXIgdHggc29mdCByZXNldCBjb21tYW5kCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBzZXQgSTJDIG1hc3RlciB0eCBzb2Z0IHJlc2V0IGNvbW1hbmQuCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNJMkNTb2Z0UlNUc2VxQ21kKHZvaWQpCit7CisKKyAgICBydGtfdWludDMyIHJlZ0RhdGE7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgLypCaXRzIFs0LTFdID0gMGIwMTEwLCB0eCBzb2Z0IHJlc2V0IENvbW1hbmQ7ICBCaXQgWzBdID0gMSwgVHJpZ2dlciB0aGUgQ29tbWFuZCAqLworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfTV9JMkNfQ1RMX1NUQV9SRUcsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIHJlZ0RhdGEgJj0gMHhGRkUwOworICAgIHJlZ0RhdGEgfD0gMHgwMDBkOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19NX0kyQ19DVExfU1RBX1JFRywgcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworCisgICAgLyogd2FpdCBmb3IgY29tbWFuZCBmaW5pc2hlZCAqLworICAgIGRveworICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfTV9JMkNfQ1RMX1NUQV9SRUcsIFJUTDgzNjdDX0kyQ19DTURfRVhFQ19PRkZTRVQsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9d2hpbGUoIHJlZ0RhdGEgIT0gMHgwKTsKKworICAgIHJldHVybiBSVF9FUlJfT0sgOworfQorCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNJMkNHcGlvUGluR3JvdXAKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBzZXQgSTJDIGZ1bmN0aW9uIHVzZWQgZ3BpbyBwaW5zCisgKiBJbnB1dDoKKyAqICAgICAgcGluR3JvdXBfSUQgLSBncGlvIHBpbnMgZ3JvdXAKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICBfIEludmFsaWQgaW5wdXQgcGFyYW1ldGVyCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBjYW4gc2V0IEkyQyBmdW5jdGlvbiB1c2VkIGdwaW8gcGlucy4KKyAqICAgICAgVGhlcmUgYXJlIHRocmVlIGdyb3VwIGdwaW8gcGlucworICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljSTJDR3Bpb1Bpbkdyb3VwKHJ0a191aW50MzIgcGluR3JvdXBfSUQpCit7CisgICAgcnRrX3VpbnQzMiByZWdEYXRhOworICAgIHJldF90IHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfTV9JMkNfU1lTX0NUTCwgJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIGlmKCBwaW5Hcm91cF9JRD09MCApCisgICAgeworICAgICAgICByZWdEYXRhICY9IDB4MEZGRjsKKyAgICAgICAgcmVnRGF0YSB8PSAweDUwMDA7CisKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19NX0kyQ19TWVNfQ1RMLCByZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorCisgICAgZWxzZSBpZiggcGluR3JvdXBfSUQ9PTEgKQorICAgIHsKKyAgICAgICAgcmVnRGF0YSAmPSAweDBGRkY7CisgICAgICAgIHJlZ0RhdGEgfD0gMHhBMDAwOworCisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfTV9JMkNfU1lTX0NUTCwgcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKworICAgIGVsc2UgaWYoIHBpbkdyb3VwX0lEPT0yICkKKyAgICB7CisgICAgICAgIHJlZ0RhdGEgJj0gMHgwRkZGOworICAgICAgICByZWdEYXRhIHw9IDB4RjAwMDsKKworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX01fSTJDX1NZU19DVEwsIHJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisgICAgZWxzZQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgcmV0dXJuIFJUX0VSUl9PSyA7CisKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0kyQ0dwaW9QaW5Hcm91cAorICogRGVzY3JpcHRpb246CisgKiAgICAgIHNldCBJMkMgZnVuY3Rpb24gdXNlZCBncGlvIHBpbnMKKyAqIElucHV0OgorICogICAgICBwaW5Hcm91cF9JRCAtIGdwaW8gcGlucyBncm91cAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgIF8gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBzZXQgSTJDIGZ1bmN0aW9uIHVzZWQgZ3BpbyBwaW5zLgorICogICAgICBUaGVyZSBhcmUgdGhyZWUgZ3JvdXAgZ3BpbyBwaW5zCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNJMkNHcGlvUGluR3JvdXAocnRrX3VpbnQzMiAqIHBQaW5Hcm91cF9JRCkKK3sKKworICAgIHJ0a191aW50MzIgcmVnRGF0YTsKKyAgICByZXRfdCByZXRWYWw7CisgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19NX0kyQ19TWVNfQ1RMLCAmcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICByZWdEYXRhICY9IDB4RjAwMCA7CisgICAgcmVnRGF0YSA9IChyZWdEYXRhID4+IDEyKTsKKworICAgIGlmKCByZWdEYXRhID09IDB4NSApCisgICAgICAgICpwUGluR3JvdXBfSUQgPSAwOworICAgIGVsc2UgaWYocmVnRGF0YSA9PSAweEEpCisgICAgICAgICpwUGluR3JvdXBfSUQgPSAxOworICAgIGVsc2UgaWYocmVnRGF0YSA9PSAweEYpCisgICAgICAgICpwUGluR3JvdXBfSUQgPSAyOworICAgIGVsc2UKKyAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKKyAgICByZXR1cm4gUlRfRVJSX09LIDsKK30KKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9pZ21wLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9pZ21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBlNzM0ZAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X2lnbXAuYwpAQCAtMCwwICsxLDIxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogJFJldmlzaW9uOiA3NjMwNiAkCisgKiAkRGF0ZTogMjAxNy0wMy0wOCAxNToxMzo1OCArMDgwMCAo6YCx5LiJLCAwOCDkuInmnIggMjAxNykgJAorICoKKyAqIFB1cnBvc2UgOiBSVEw4MzY3QyBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkgZm9yIFJUTDgzNjdDCisgKiBGZWF0dXJlIDogSUdNUCByZWxhdGVkIGZ1bmN0aW9ucworICoKKyAqLworI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnZfaWdtcC5oPgorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0lnbXAKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgSUdNUC9NTEQgc3RhdGUKKyAqIElucHV0OgorICogICAgICBlbmFibGVkICAgICAtIDE6IGVuYWJsZWQsIDA6IGRpc2FibGVkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljSWdtcChydGtfdWludDMyIGVuYWJsZWQpCit7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgLyogRW5hYmxlL0Rpc2FibGUgSC9XIElHTVAvTUxEICovCisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfSUdNUF9NTERfQ0ZHMCwgUlRMODM2N0NfSUdNUF9NTERfRU5fT0ZGU0VULCBlbmFibGVkKTsKKworICAgIHJldHVybiByZXRWYWw7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljSWdtcAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBJR01QL01MRCBzdGF0ZQorICogSW5wdXQ6CisgKiAgICAgIGVuYWJsZWQgICAgIC0gMTogZW5hYmxlZCwgMDogZGlzYWJsZWQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNJZ21wKHJ0a191aW50MzIgKnB0cl9lbmFibGVkKQoreworICAgIHJldF90IHJldFZhbDsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0lHTVBfTUxEX0NGRzAsIFJUTDgzNjdDX0lHTVBfTUxEX0VOX09GRlNFVCwgcHRyX2VuYWJsZWQpOworICAgIHJldHVybiByZXRWYWw7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljSXBNdWx0aWNhc3RWbGFuTGVha3kKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgSVAgbXVsdGljYXN0IFZMQU4gTGVha3kgZnVuY3Rpb24KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjcpCisgKiAgICAgIGVuYWJsZWQgICAgIC0gMTogZW5hYmxlZCwgMDogZGlzYWJsZWQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgV2hlbiBlbmFibGluZyB0aGlzIGZ1bmN0aW9uLAorICogICAgICBpZiB0aGUgbG9va3VwIHJlc3VsdChmb3J3YXJkaW5nIHBvcnRtYXApIG9mIElQIE11bHRpY2FzdCBwYWNrZXQgaXMgb3ZlciBWTEFOIGJvdW5kYXJ5LAorICogICAgICB0aGUgcGFja2V0IGNhbiBiZSBmb3J3YXJkZWQgYWNyb3NzIFZMQU4KKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0lwTXVsdGljYXN0VmxhbkxlYWt5KHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBlbmFibGVkKQoreworICAgIHJldF90ICByZXRWYWw7CisKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVElETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19JUE1DQVNUX1ZMQU5fTEVBS1ksIHBvcnQsIGVuYWJsZWQpOworCisgICAgcmV0dXJuIHJldFZhbDsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNJcE11bHRpY2FzdFZsYW5MZWFreQorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBJUCBtdWx0aWNhc3QgVkxBTiBMZWFreSBmdW5jdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgZW5hYmxlZCAgICAgLSAxOiBlbmFibGVkLCAwOiBkaXNhYmxlZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNJcE11bHRpY2FzdFZsYW5MZWFreShydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgKnB0cl9lbmFibGVkKQoreworICAgIHJldF90ICByZXRWYWw7CisKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVElETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19JUE1DQVNUX1ZMQU5fTEVBS1ksIHBvcnQsIHB0cl9lbmFibGVkKTsKKworICAgIHJldHVybiByZXRWYWw7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNJR01QVGFibGVGdWxsT1AKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgVGFibGUgRnVsbCBvcGVyYXRpb24KKyAqIElucHV0OgorICogICAgICBvcGVyYXRpb24gICAtIFRoZSBvcGVyYXRpb24gc2hvdWxkIGJlIHRha2VuIHdoZW4gdGhlIElHTVAgdGFibGUgaXMgZnVsbC4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gaW5wdXQgcGFyYW1ldGVyIGlzIG91dCBvZiByYW5nZQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljSUdNUFRhYmxlRnVsbE9QKHJ0a191aW50MzIgb3BlcmF0aW9uKQoreworICAgIHJldF90ICByZXRWYWw7CisKKyAgICBpZihvcGVyYXRpb24gPj0gVEFCTEVfRlVMTF9PUF9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgLyogVGFibGUgZnVsbCBPcGVyYXRpb24gKi8KKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfSUdNUF9NTERfQ0ZHMSwgUlRMODM2N0NfVEFCTEVfRlVMTF9PUF9NQVNLLCBvcGVyYXRpb24pOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljSUdNUFRhYmxlRnVsbE9QCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFRhYmxlIEZ1bGwgb3BlcmF0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwb3BlcmF0aW9uICAtIFRoZSBvcGVyYXRpb24gc2hvdWxkIGJlIHRha2VuIHdoZW4gdGhlIElHTVAgdGFibGUgaXMgZnVsbC4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNJR01QVGFibGVGdWxsT1AocnRrX3VpbnQzMiAqcG9wZXJhdGlvbikKK3sKKyAgICByZXRfdCAgIHJldFZhbDsKKyAgICBydGtfdWludDMyICB2YWx1ZTsKKworICAgIC8qIFRhYmxlIGZ1bGwgT3BlcmF0aW9uICovCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0lHTVBfTUxEX0NGRzEsIFJUTDgzNjdDX1RBQkxFX0ZVTExfT1BfTUFTSywgJnZhbHVlKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgKnBvcGVyYXRpb24gPSB2YWx1ZTsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNJR01QQ1JDRXJyT1AKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgdGhlIG9wZXJhdGlvbiB3aGVuIEFTSUMgcmVjZWl2ZSBhIENoZWNrc3VtIGVycm9yIHBhY2tldAorICogSW5wdXQ6CisgKiAgICAgIG9wZXJhdGlvbiAgIC1UaGUgb3BlcmF0aW9uIHdoZW4gQVNJQyByZWNlaXZlIGEgQ2hlY2tzdW0gZXJyb3IgcGFja2V0CisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAtIGlucHV0IHBhcmFtZXRlciBpcyBvdXQgb2YgcmFuZ2UKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0lHTVBDUkNFcnJPUChydGtfdWludDMyIG9wZXJhdGlvbikKK3sKKyAgICByZXRfdCAgcmV0VmFsOworCisgICAgaWYob3BlcmF0aW9uID49IENSQ19FUlJfT1BfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIC8qIENSQyBFcnJvciBPcGVyYXRpb24gKi8KKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfSUdNUF9NTERfQ0ZHMCwgUlRMODM2N0NfQ0tTX0VSUl9PUF9NQVNLLCBvcGVyYXRpb24pOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljSUdNUENSQ0Vyck9QCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHRoZSBvcGVyYXRpb24gd2hlbiBBU0lDIHJlY2VpdmUgYSBDaGVja3N1bSBlcnJvciBwYWNrZXQKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBvcGVyYXRpb24gIC0gVGhlIG9wZXJhdGlvbiBvZiBDaGVja3N1bSBlcnJvciBwYWNrZXQKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNJR01QQ1JDRXJyT1AocnRrX3VpbnQzMiAqcG9wZXJhdGlvbikKK3sKKyAgICByZXRfdCAgIHJldFZhbDsKKyAgICBydGtfdWludDMyICB2YWx1ZTsKKworICAgIC8qIENSQyBFcnJvciBPcGVyYXRpb24gKi8KKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfSUdNUF9NTERfQ0ZHMCwgUlRMODM2N0NfQ0tTX0VSUl9PUF9NQVNLLCAmdmFsdWUpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAqcG9wZXJhdGlvbiA9IHZhbHVlOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0lHTVBGYXN0TGVhdmVFbgorICogRGVzY3JpcHRpb246CisgKiAgICAgIEVuYWJsZS9EaXNhYmxlIEZhc3QgTGVhdmUKKyAqIElucHV0OgorICogICAgICBlbmFibGVkIC0gMTplbmFibGUgRmFzdCBMZWF2ZTsgMDpkaXNhYmxlIEZhc3QgTGVhdmUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0lHTVBGYXN0TGVhdmVFbihydGtfdWludDMyIGVuYWJsZWQpCit7CisgICAgcmV0X3QgIHJldFZhbDsKKworICAgIC8qIEZhc3QgTGVhdmUgKi8KKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfSUdNUF9NTERfQ0ZHMCwgUlRMODM2N0NfRkFTVF9MRUFWRV9FTl9NQVNLLCAoZW5hYmxlZCA+PSAxKSA/IDEgOiAwKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0lHTVBGYXN0TGVhdmVFbgorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBGYXN0IExlYXZlIHN0YXRlCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwZW5hYmxlZCAgICAgICAgLSAxOmVuYWJsZSBGYXN0IExlYXZlOyAwOmRpc2FibGUgRmFzdCBMZWF2ZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0lHTVBGYXN0TGVhdmVFbihydGtfdWludDMyICpwZW5hYmxlZCkKK3sKKyAgICByZXRfdCAgIHJldFZhbDsKKyAgICBydGtfdWludDMyICB2YWx1ZTsKKworICAgIC8qIEZhc3QgTGVhdmUgKi8KKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfSUdNUF9NTERfQ0ZHMCwgUlRMODM2N0NfRkFTVF9MRUFWRV9FTl9NQVNLLCAmdmFsdWUpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAqcGVuYWJsZWQgPSB2YWx1ZTsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNJR01QTGVhdmVUaW1lcgorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCB0aGUgTGVhdmUgdGltZXIgb2YgSUdNUC9NTEQKKyAqIElucHV0OgorICogICAgICBsZWF2ZV90aW1lciAgICAgLSBMZWF2ZSB0aW1lcgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgLSBpbnB1dCBwYXJhbWV0ZXIgaXMgb3V0IG9mIHJhbmdlCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNJR01QTGVhdmVUaW1lcihydGtfdWludDMyIGxlYXZlX3RpbWVyKQoreworICAgIHJldF90ICByZXRWYWw7CisKKyAgICBpZihsZWF2ZV90aW1lciA+IFJUTDgzNjdDX01BWF9MRUFWRV9USU1FUikKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICAvKiBMZWF2ZSB0aW1lciAqLworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19JR01QX01MRF9DRkcwLCBSVEw4MzY3Q19MRUFWRV9USU1FUl9NQVNLLCBsZWF2ZV90aW1lcik7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNJR01QTGVhdmVUaW1lcgorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCB0aGUgTGVhdmUgdGltZXIgb2YgSUdNUC9NTEQKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBsZWF2ZV90aW1lciAgICAtIExlYXZlIHRpbWVyCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljSUdNUExlYXZlVGltZXIocnRrX3VpbnQzMiAqcGxlYXZlX3RpbWVyKQoreworICAgIHJldF90ICAgcmV0VmFsOworICAgIHJ0a191aW50MzIgIHZhbHVlOworCisgICAgLyogTGVhdmUgdGltZXIgKi8KKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfSUdNUF9NTERfQ0ZHMCwgUlRMODM2N0NfTEVBVkVfVElNRVJfTUFTSywgJnZhbHVlKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgKnBsZWF2ZV90aW1lciA9IHZhbHVlOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0lHTVBRdWVyeUludGVydmFsCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IFF1ZXJ5IEludGVydmFsIG9mIElHTVAvTUxECisgKiBJbnB1dDoKKyAqICAgICAgaW50ZXJ2YWwgICAgLSBRdWVyeSBJbnRlcnZhbAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgLSBpbnB1dCBwYXJhbWV0ZXIgaXMgb3V0IG9mIHJhbmdlCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNJR01QUXVlcnlJbnRlcnZhbChydGtfdWludDMyIGludGVydmFsKQoreworICAgIHJldF90ICByZXRWYWw7CisKKyAgICBpZihpbnRlcnZhbCA+IFJUTDgzNjdDX01BWF9RVUVSWV9JTlQpCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgLyogUXVlcnkgSW50ZXJ2YWwgKi8KKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19JR01QX01MRF9DRkcyLCBpbnRlcnZhbCk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNJR01QUXVlcnlJbnRlcnZhbAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBRdWVyeSBJbnRlcnZhbCBvZiBJR01QL01MRAorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcGludGVydmFsICAgICAgIC0gUXVlcnkgSW50ZXJ2YWwKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNJR01QUXVlcnlJbnRlcnZhbChydGtfdWludDMyICpwaW50ZXJ2YWwpCit7CisgICAgcmV0X3QgICByZXRWYWw7CisgICAgcnRrX3VpbnQzMiAgdmFsdWU7CisKKyAgICAvKiBRdWVyeSBJbnRlcnZhbCAqLworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfUkVHX0lHTVBfTUxEX0NGRzIsICZ2YWx1ZSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICpwaW50ZXJ2YWwgPSB2YWx1ZTsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNJR01QUm9iVmFyCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IFJvYnVzdG5lc3MgVmFyaWFibGUgb2YgSUdNUC9NTEQKKyAqIElucHV0OgorICogICAgICByb2JfdmFyICAgICAtIFJvYnVzdG5lc3MgVmFyaWFibGUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gaW5wdXQgcGFyYW1ldGVyIGlzIG91dCBvZiByYW5nZQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljSUdNUFJvYlZhcihydGtfdWludDMyIHJvYl92YXIpCit7CisgICAgcmV0X3QgIHJldFZhbDsKKworICAgIGlmKHJvYl92YXIgPiBSVEw4MzY3Q19NQVhfUk9CX1ZBUikKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICAvKiBCb3Vyc3RuZXNzIHZhcmlhYmxlICovCisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0lHTVBfTUxEX0NGRzAsIFJUTDgzNjdDX1JPQlVSU1RORVNTX1ZBUl9NQVNLLCByb2JfdmFyKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0lHTVBSb2JWYXIKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgUm9idXN0bmVzcyBWYXJpYWJsZSBvZiBJR01QL01MRAorICogSW5wdXQ6CisgKiAgICAgIG5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcHJvYl92YXIgICAgIC0gUm9idXN0bmVzcyBWYXJpYWJsZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0lHTVBSb2JWYXIocnRrX3VpbnQzMiAqcHJvYl92YXIpCit7CisgICAgcmV0X3QgICByZXRWYWw7CisgICAgcnRrX3VpbnQzMiAgdmFsdWU7CisKKyAgICAvKiBCb3Vyc3RuZXNzIHZhcmlhYmxlICovCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0lHTVBfTUxEX0NGRzAsIFJUTDgzNjdDX1JPQlVSU1RORVNTX1ZBUl9NQVNLLCAmdmFsdWUpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAqcHJvYl92YXIgPSB2YWx1ZTsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNJR01QU3RhdGljUm91dGVyUG9ydAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBJR01QIHN0YXRpYyByb3V0ZXIgcG9ydCBtYXNrCisgKiBJbnB1dDoKKyAqICAgICAgcG1zayAgICAtIFN0YXRpYyBwb3J0bWFzaworICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX01BU0sgICAgLSBJbnZhbGlkIHBvcnQgbWFzaworICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljSUdNUFN0YXRpY1JvdXRlclBvcnQocnRrX3VpbnQzMiBwbXNrKQoreworICAgIGlmKHBtc2sgPiBSVEw4MzY3Q19QT1JUTUFTSykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX01BU0s7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0lHTVBfU1RBVElDX1JPVVRFUl9QT1JULCBSVEw4MzY3Q19JR01QX1NUQVRJQ19ST1VURVJfUE9SVF9NQVNLLCBwbXNrKTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0lHTVBTdGF0aWNSb3V0ZXJQb3J0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IElHTVAgc3RhdGljIHJvdXRlciBwb3J0IG1hc2sKKyAqIElucHV0OgorICogICAgICBwbXNrICAgIC0gU3RhdGljIHBvcnRtYXNrCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljSUdNUFN0YXRpY1JvdXRlclBvcnQocnRrX3VpbnQzMiAqcG1zaykKK3sKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0lHTVBfU1RBVElDX1JPVVRFUl9QT1JULCBSVEw4MzY3Q19JR01QX1NUQVRJQ19ST1VURVJfUE9SVF9NQVNLLCBwbXNrKTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0lHTVBBbGxvd0R5bmFtaWNSb3V0ZXJQb3J0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IElHTVAgZHluYW1pYyByb3V0ZXIgcG9ydCBhbGxvdyBtYXNrCisgKiBJbnB1dDoKKyAqICAgICAgcG1zayAgICAtIEFsbG93IGR5bmFtaWMgcm91dGVyIHBvcnQgbWFzaworICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX01BU0sgICAgLSBJbnZhbGlkIHBvcnQgbWFzaworICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljSUdNUEFsbG93RHluYW1pY1JvdXRlclBvcnQocnRrX3VpbnQzMiBwbXNrKQoreworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19JR01QX01MRF9DRkc0LCBwbXNrKTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0lHTVBBbGxvd0R5bmFtaWNSb3V0ZXJQb3J0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IElHTVAgZHluYW1pYyByb3V0ZXIgcG9ydCBhbGxvdyBtYXNrCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZS4KKyAqIE91dHB1dDoKKyAqICAgICAgcFBtc2sgICAtIEFsbG93IGR5bmFtaWMgcm91dGVyIHBvcnQgbWFzaworICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9NQVNLICAgIC0gSW52YWxpZCBwb3J0IG1hc2sKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0lHTVBBbGxvd0R5bmFtaWNSb3V0ZXJQb3J0KHJ0a191aW50MzIgKnBQbXNrKQoreworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19JR01QX01MRF9DRkc0LCBwUG1zayk7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNJR01QZHluYW1pY1JvdXRlclBvcnQxCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IDFzdCBkeW5hbWljIHJvdXRlciBwb3J0IGFuZCB0aW1lcgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH43KQorICogICAgICB0aW1lciAgIC0gcm91dGVyIHBvcnQgdGltZXIKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNJR01QZHluYW1pY1JvdXRlclBvcnQxKHJ0a191aW50MzIgKnBvcnQsIHJ0a191aW50MzIgKnRpbWVyKQoreworICAgIHJldF90ICAgcmV0VmFsOworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0lHTVBfRFlOQU1JQ19ST1VURVJfUE9SVCwgUlRMODM2N0NfRF9ST1VURVJfUE9SVF8xX01BU0ssIHBvcnQpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfSUdNUF9EWU5BTUlDX1JPVVRFUl9QT1JULCBSVEw4MzY3Q19EX1JPVVRFUl9QT1JUX1RNUl8xX01BU0ssIHRpbWVyKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0lHTVBkeW5hbWljUm91dGVyUG9ydDIKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgMm5kIGR5bmFtaWMgcm91dGVyIHBvcnQgYW5kIHRpbWVyCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjcpCisgKiAgICAgIHRpbWVyICAgLSByb3V0ZXIgcG9ydCB0aW1lcgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0lHTVBkeW5hbWljUm91dGVyUG9ydDIocnRrX3VpbnQzMiAqcG9ydCwgcnRrX3VpbnQzMiAqdGltZXIpCit7CisgICAgcmV0X3QgICByZXRWYWw7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfSUdNUF9EWU5BTUlDX1JPVVRFUl9QT1JULCBSVEw4MzY3Q19EX1JPVVRFUl9QT1JUXzJfTUFTSywgcG9ydCk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19JR01QX0RZTkFNSUNfUk9VVEVSX1BPUlQsIFJUTDgzNjdDX0RfUk9VVEVSX1BPUlRfVE1SXzJfTUFTSywgdGltZXIpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljSUdNUFN1cHByZXNzaW9uCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHRoZSBzdXBwcmVzc2lvbiBmdW5jdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHJlcG9ydF9zdXBwX2VuYWJsZWQgICAgIC0gUmVwb3J0IHN1cHByZXNzaW9uLCAxOkVuYWJsZSwgMDpkaXNhYmxlCisgKiAgICAgIGxlYXZlX3N1cHBfZW5hYmxlZCAgICAgIC0gTGVhdmUgc3VwcHJlc3Npb24sIDE6RW5hYmxlLCAwOmRpc2FibGUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNJR01QU3VwcHJlc3Npb24ocnRrX3VpbnQzMiByZXBvcnRfc3VwcF9lbmFibGVkLCBydGtfdWludDMyIGxlYXZlX3N1cHBfZW5hYmxlZCkKK3sKKyAgICByZXRfdCAgIHJldFZhbDsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19JR01QX01MRF9DRkcwLCBSVEw4MzY3Q19SRVBPUlRfU1VQUFJFU1NJT05fTUFTSywgcmVwb3J0X3N1cHBfZW5hYmxlZCk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19JR01QX01MRF9DRkcwLCBSVEw4MzY3Q19MRUFWRV9TVVBQUkVTU0lPTl9NQVNLLCBsZWF2ZV9zdXBwX2VuYWJsZWQpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljSUdNUFN1cHByZXNzaW9uCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHRoZSBzdXBwcmVzc2lvbiBmdW5jdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHJlcG9ydF9zdXBwX2VuYWJsZWQgICAgIC0gUmVwb3J0IHN1cHByZXNzaW9uLCAxOkVuYWJsZSwgMDpkaXNhYmxlCisgKiAgICAgIGxlYXZlX3N1cHBfZW5hYmxlZCAgICAgIC0gTGVhdmUgc3VwcHJlc3Npb24sIDE6RW5hYmxlLCAwOmRpc2FibGUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNJR01QU3VwcHJlc3Npb24ocnRrX3VpbnQzMiAqcmVwb3J0X3N1cHBfZW5hYmxlZCwgcnRrX3VpbnQzMiAqbGVhdmVfc3VwcF9lbmFibGVkKQoreworICAgIHJldF90ICAgcmV0VmFsOworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0lHTVBfTUxEX0NGRzAsIFJUTDgzNjdDX1JFUE9SVF9TVVBQUkVTU0lPTl9NQVNLLCByZXBvcnRfc3VwcF9lbmFibGVkKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0lHTVBfTUxEX0NGRzAsIFJUTDgzNjdDX0xFQVZFX1NVUFBSRVNTSU9OX01BU0ssIGxlYXZlX3N1cHBfZW5hYmxlZCk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNJR01QUXVlcnlSWAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwb3J0LWJhc2VkIFF1ZXJ5IHBhY2tldCBSWCBhbGxvd2FuY2UKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAgICAgLSBwb3J0IG51bWJlcgorICogICAgICBhbGxvd19xdWVyeSAgICAgLSBhbGxvd2FuY2Ugb2YgUXVlcnkgcGFja2V0IFJYLCAxOkFsbG93LCAwOkRyb3AKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAtIEVycm9yIFBPUlQgSUQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljSUdNUFF1ZXJ5UlgocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGFsbG93X3F1ZXJ5KQoreworICAgIHJldF90ICAgcmV0VmFsOworCisgICAgaWYocG9ydCA+IFJUTDgzNjdDX1BPUlRJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgLyogQWxsb3cgUXVlcnkgKi8KKyAgICBpZiAocG9ydCA8IDgpCisgICAgeworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfSUdNUF9QT1JUMF9DT05UUk9MICsgcG9ydCwgUlRMODM2N0NfSUdNUF9QT1JUMF9DT05UUk9MX0FMTE9XX1FVRVJZX01BU0ssIGFsbG93X3F1ZXJ5KTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19JR01QX1BPUlQ4X0NPTlRST0wgKyBwb3J0IC0gOCwgUlRMODM2N0NfSUdNUF9QT1JUMF9DT05UUk9MX0FMTE9XX1FVRVJZX01BU0ssIGFsbG93X3F1ZXJ5KTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0lHTVBRdWVyeVJYCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHBvcnQtYmFzZWQgUXVlcnkgcGFja2V0IFJYIGFsbG93YW5jZQorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgICAgICAtIHBvcnQgbnVtYmVyCisgKiBPdXRwdXQ6CisgKiAgICAgIGFsbG93X3F1ZXJ5ICAgICAtIGFsbG93YW5jZSBvZiBRdWVyeSBwYWNrZXQgUlgsIDE6QWxsb3csIDA6RHJvcAorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAtIEVycm9yIFBPUlQgSUQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljSUdNUFF1ZXJ5UlgocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyICphbGxvd19xdWVyeSkKK3sKKyAgICByZXRfdCAgIHJldFZhbDsKKyAgICBydGtfdWludDMyICB2YWx1ZTsKKworICAgIGlmKHBvcnQgPiBSVEw4MzY3Q19QT1JUSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIC8qIEFsbG93IFF1ZXJ5ICovCisgICAgaWYgKHBvcnQgPCA4KQorICAgIHsKKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0lHTVBfUE9SVDBfQ09OVFJPTCArIHBvcnQsIFJUTDgzNjdDX0lHTVBfUE9SVDBfQ09OVFJPTF9BTExPV19RVUVSWV9NQVNLLCAmdmFsdWUpOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0lHTVBfUE9SVDhfQ09OVFJPTCArIHBvcnQgLSA4LCBSVEw4MzY3Q19JR01QX1BPUlQwX0NPTlRST0xfQUxMT1dfUVVFUllfTUFTSywgJnZhbHVlKTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorICAgICphbGxvd19xdWVyeSA9IHZhbHVlOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0lHTVBSZXBvcnRSWAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwb3J0LWJhc2VkIFJlcG9ydCBwYWNrZXQgUlggYWxsb3dhbmNlCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgICAgIC0gcG9ydCBudW1iZXIKKyAqICAgICAgYWxsb3dfcmVwb3J0ICAgIC0gYWxsb3dhbmNlIG9mIFJlcG9ydCBwYWNrZXQgUlgsIDE6QWxsb3csIDA6RHJvcAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gRXJyb3IgUE9SVCBJRAorICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNJR01QUmVwb3J0UlgocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGFsbG93X3JlcG9ydCkKK3sKKyAgICByZXRfdCAgIHJldFZhbDsKKworICAgIGlmKHBvcnQgPiBSVEw4MzY3Q19QT1JUSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIGlmKHBvcnQgPCA4KQorICAgIHsKKyAgICAvKiBBbGxvdyBSZXBvcnQgKi8KKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0lHTVBfUE9SVDBfQ09OVFJPTCArIHBvcnQsIFJUTDgzNjdDX0lHTVBfUE9SVDBfQ09OVFJPTF9BTExPV19SRVBPUlRfTUFTSywgYWxsb3dfcmVwb3J0KTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19JR01QX1BPUlQ4X0NPTlRST0wgKyBwb3J0IC0gOCwgUlRMODM2N0NfSUdNUF9QT1JUMF9DT05UUk9MX0FMTE9XX1JFUE9SVF9NQVNLLCBhbGxvd19yZXBvcnQpOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0lHTVBSZXBvcnRSWAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwb3J0LWJhc2VkIFJlcG9ydCBwYWNrZXQgUlggYWxsb3dhbmNlCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgICAgIC0gcG9ydCBudW1iZXIKKyAqIE91dHB1dDoKKyAqICAgICAgYWxsb3dfcmVwb3J0ICAgIC0gYWxsb3dhbmNlIG9mIFJlcG9ydCBwYWNrZXQgUlgsIDE6QWxsb3csIDA6RHJvcAorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAtIEVycm9yIFBPUlQgSUQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljSUdNUFJlcG9ydFJYKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqYWxsb3dfcmVwb3J0KQoreworICAgIHJldF90ICAgcmV0VmFsOworICAgIHJ0a191aW50MzIgIHZhbHVlOworCisgICAgaWYocG9ydCA+IFJUTDgzNjdDX1BPUlRJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgaWYocG9ydCA8IDgpCisgICAgeworICAgICAgICAvKiBBbGxvdyBSZXBvcnQgKi8KKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0lHTVBfUE9SVDBfQ09OVFJPTCArIHBvcnQsIFJUTDgzNjdDX0lHTVBfUE9SVDBfQ09OVFJPTF9BTExPV19SRVBPUlRfTUFTSywgJnZhbHVlKTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19JR01QX1BPUlQ4X0NPTlRST0wgKyBwb3J0IC0gOCwgUlRMODM2N0NfSUdNUF9QT1JUMF9DT05UUk9MX0FMTE9XX1JFUE9SVF9NQVNLLCAmdmFsdWUpOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisgICAgKmFsbG93X3JlcG9ydCA9IHZhbHVlOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0lHTVBMZWF2ZVJYCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHBvcnQtYmFzZWQgTGVhdmUgcGFja2V0IFJYIGFsbG93YW5jZQorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgICAgICAtIHBvcnQgbnVtYmVyCisgKiAgICAgIGFsbG93X2xlYXZlICAgICAtIGFsbG93YW5jZSBvZiBMZWF2ZSBwYWNrZXQgUlgsIDE6QWxsb3csIDA6RHJvcAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gRXJyb3IgUE9SVCBJRAorICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNJR01QTGVhdmVSWChydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgYWxsb3dfbGVhdmUpCit7CisgICAgcmV0X3QgICByZXRWYWw7CisKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVElETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICBpZihwb3J0IDwgOCkKKyAgICB7CisgICAgICAgIC8qIEFsbG93IExlYXZlICovCisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19JR01QX1BPUlQwX0NPTlRST0wgKyBwb3J0LCBSVEw4MzY3Q19JR01QX1BPUlQwX0NPTlRST0xfQUxMT1dfTEVBVkVfTUFTSywgYWxsb3dfbGVhdmUpOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0lHTVBfUE9SVDhfQ09OVFJPTCArIHBvcnQgLSA4LCBSVEw4MzY3Q19JR01QX1BPUlQwX0NPTlRST0xfQUxMT1dfTEVBVkVfTUFTSywgYWxsb3dfbGVhdmUpOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0lHTVBMZWF2ZVJYCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHBvcnQtYmFzZWQgTGVhdmUgcGFja2V0IFJYIGFsbG93YW5jZQorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgICAgICAtIHBvcnQgbnVtYmVyCisgKiBPdXRwdXQ6CisgKiAgICAgIGFsbG93X2xlYXZlICAgICAtIGFsbG93YW5jZSBvZiBMZWF2ZSBwYWNrZXQgUlgsIDE6QWxsb3csIDA6RHJvcAorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAtIEVycm9yIFBPUlQgSUQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljSUdNUExlYXZlUlgocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyICphbGxvd19sZWF2ZSkKK3sKKyAgICByZXRfdCAgIHJldFZhbDsKKyAgICBydGtfdWludDMyICB2YWx1ZTsKKworICAgIGlmKHBvcnQgPiBSVEw4MzY3Q19QT1JUSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIGlmKHBvcnQgPCA4KQorICAgIHsKKyAgICAvKiBBbGxvdyBMZWF2ZSAqLworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfSUdNUF9QT1JUMF9DT05UUk9MICsgcG9ydCwgUlRMODM2N0NfSUdNUF9QT1JUMF9DT05UUk9MX0FMTE9XX0xFQVZFX01BU0ssICZ2YWx1ZSk7CisgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfSUdNUF9QT1JUOF9DT05UUk9MICsgcG9ydCAtIDgsIFJUTDgzNjdDX0lHTVBfUE9SVDBfQ09OVFJPTF9BTExPV19MRUFWRV9NQVNLLCAmdmFsdWUpOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisKKyAgICAqYWxsb3dfbGVhdmUgPSB2YWx1ZTsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNJR01QTVJQUlgKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgcG9ydC1iYXNlZCBNdWx0aWNhc3QgUm91dGluZyBQcm90b2NvbCBwYWNrZXQgUlggYWxsb3dhbmNlCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgICAgIC0gcG9ydCBudW1iZXIKKyAqICAgICAgYWxsb3dfbXJwICAgICAgIC0gYWxsb3dhbmNlIG9mIE11bHRpY2FzdCBSb3V0aW5nIFByb3RvY29sIHBhY2tldCBSWCwgMTpBbGxvdywgMDpEcm9wCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBFcnJvciBQT1JUIElECisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0lHTVBNUlBSWChydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgYWxsb3dfbXJwKQoreworICAgIHJldF90ICAgcmV0VmFsOworCisgICAgaWYocG9ydCA+IFJUTDgzNjdDX1BPUlRJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgaWYocG9ydCA8IDgpCisgICAgeworICAgIC8qIEFsbG93IE11bHRpY2FzdCBSb3V0aW5nIFByb3RvY29sICovCisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19JR01QX1BPUlQwX0NPTlRST0wgKyBwb3J0LCBSVEw4MzY3Q19JR01QX1BPUlQwX0NPTlRST0xfQUxMT1dfTVJQX01BU0ssIGFsbG93X21ycCk7CisgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfSUdNUF9QT1JUOF9DT05UUk9MICsgcG9ydCAtIDgsIFJUTDgzNjdDX0lHTVBfUE9SVDBfQ09OVFJPTF9BTExPV19NUlBfTUFTSywgYWxsb3dfbXJwKTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNJR01QTVJQUlgKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcG9ydC1iYXNlZCBNdWx0aWNhc3QgUm91dGluZyBQcm90b2NvbCBwYWNrZXQgUlggYWxsb3dhbmNlCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgICAgIC0gcG9ydCBudW1iZXIKKyAqIE91dHB1dDoKKyAqICAgICAgYWxsb3dfbXJwICAgICAgIC0gYWxsb3dhbmNlIG9mIE11bHRpY2FzdCBSb3V0aW5nIFByb3RvY29sIHBhY2tldCBSWCwgMTpBbGxvdywgMDpEcm9wCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gRXJyb3IgUE9SVCBJRAorICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNJR01QTVJQUlgocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyICphbGxvd19tcnApCit7CisgICAgcmV0X3QgICByZXRWYWw7CisgICAgcnRrX3VpbnQzMiAgdmFsdWU7CisKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVElETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICAvKiBBbGxvdyBNdWx0aWNhc3QgUm91dGluZyBQcm90b2NvbCAqLworICAgIGlmKHBvcnQgPCA4KQorICAgIHsKKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0lHTVBfUE9SVDBfQ09OVFJPTCArIHBvcnQsIFJUTDgzNjdDX0lHTVBfUE9SVDBfQ09OVFJPTF9BTExPV19NUlBfTUFTSywgJnZhbHVlKTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19JR01QX1BPUlQ4X0NPTlRST0wgKyBwb3J0IC0gOCwgUlRMODM2N0NfSUdNUF9QT1JUMF9DT05UUk9MX0FMTE9XX01SUF9NQVNLLCAmdmFsdWUpOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisgICAgKmFsbG93X21ycCA9IHZhbHVlOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0lHTVBNY0RhdGFSWAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwb3J0LWJhc2VkIE11bHRpY2FzdCBkYXRhIHBhY2tldCBSWCBhbGxvd2FuY2UKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAgICAgLSBwb3J0IG51bWJlcgorICogICAgICBhbGxvd19tY2RhdGEgICAgLSBhbGxvd2FuY2Ugb2YgTXVsdGljYXN0IGRhdGEgcGFja2V0IFJYLCAxOkFsbG93LCAwOkRyb3AKKyAqIE91dHB1dDoKKyAqICAgICAgbm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAtIEVycm9yIFBPUlQgSUQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljSUdNUE1jRGF0YVJYKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBhbGxvd19tY2RhdGEpCit7CisgICAgcmV0X3QgICByZXRWYWw7CisKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVElETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICAvKiBBbGxvdyBNdWx0aWNhc3QgRGF0YSAqLworICAgIGlmKHBvcnQgPCA4KQorICAgIHsKKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0lHTVBfUE9SVDBfQ09OVFJPTCArIHBvcnQsIFJUTDgzNjdDX0lHTVBfUE9SVDBfQ09OVFJPTF9BTExPV19NQ19EQVRBX01BU0ssIGFsbG93X21jZGF0YSk7CisgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfSUdNUF9QT1JUOF9DT05UUk9MICsgcG9ydCAtIDgsIFJUTDgzNjdDX0lHTVBfUE9SVDBfQ09OVFJPTF9BTExPV19NQ19EQVRBX01BU0ssIGFsbG93X21jZGF0YSk7CisgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljSUdNUE1jRGF0YVJYCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHBvcnQtYmFzZWQgTXVsdGljYXN0IGRhdGEgcGFja2V0IFJYIGFsbG93YW5jZQorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgICAgICAtIHBvcnQgbnVtYmVyCisgKiBPdXRwdXQ6CisgKiAgICAgIGFsbG93X21jZGF0YSAgICAtIGFsbG93YW5jZSBvZiBNdWx0aWNhc3QgZGF0YSBwYWNrZXQgUlgsIDE6QWxsb3csIDA6RHJvcAorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAtIEVycm9yIFBPUlQgSUQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljSUdNUE1jRGF0YVJYKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqYWxsb3dfbWNkYXRhKQoreworICAgIHJldF90ICAgcmV0VmFsOworICAgIHJ0a191aW50MzIgIHZhbHVlOworCisgICAgaWYocG9ydCA+IFJUTDgzNjdDX1BPUlRJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgLyogQWxsb3cgTXVsdGljYXN0IGRhdGEgKi8KKyAgICBpZihwb3J0IDwgOCkKKyAgICB7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19JR01QX1BPUlQwX0NPTlRST0wgKyBwb3J0LCBSVEw4MzY3Q19JR01QX1BPUlQwX0NPTlRST0xfQUxMT1dfTUNfREFUQV9NQVNLLCAmdmFsdWUpOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0lHTVBfUE9SVDhfQ09OVFJPTCArIHBvcnQgLSA4LCBSVEw4MzY3Q19JR01QX1BPUlQwX0NPTlRST0xfQUxMT1dfTUNfREFUQV9NQVNLLCAmdmFsdWUpOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisKKyAgICAqYWxsb3dfbWNkYXRhID0gdmFsdWU7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljSUdNUHYxT3BlYXJ0aW9uCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHBvcnQtYmFzZWQgSUdNUHYxIENvbnRyb2wgcGFja2V0IGFjdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgICAgICAtIHBvcnQgbnVtYmVyCisgKiAgICAgIGlnbXB2MV9vcCAgICAgICAtIElHTVB2MSBjb250cm9sIHBhY2tldCBhY3Rpb24KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAtIEVycm9yIFBPUlQgSUQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljSUdNUHYxT3BlYXJ0aW9uKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBpZ21wdjFfb3ApCit7CisgICAgcmV0X3QgICByZXRWYWw7CisKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVElETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICBpZihpZ21wdjFfb3AgPj0gUFJPVE9DT0xfT1BfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgLyogSUdNUHYxIG9wZXJhdGlvbiAqLworICAgIGlmKHBvcnQgPCA4KQorICAgIHsKKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0lHTVBfUE9SVDBfQ09OVFJPTCArIHBvcnQsIFJUTDgzNjdDX0lHTVBfUE9SVDBfQ09OVFJPTF9JR01QVjFfT1BfTUFTSywgaWdtcHYxX29wKTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19JR01QX1BPUlQ4X0NPTlRST0wgKyBwb3J0IC0gOCwgUlRMODM2N0NfSUdNUF9QT1JUMF9DT05UUk9MX0lHTVBWMV9PUF9NQVNLLCBpZ21wdjFfb3ApOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljSUdNUHYxT3BlYXJ0aW9uCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHBvcnQtYmFzZWQgSUdNUHYxIENvbnRyb2wgcGFja2V0IGFjdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgICAgICAtIHBvcnQgbnVtYmVyCisgKiBPdXRwdXQ6CisgKiAgICAgIGlnbXB2MV9vcCAgICAgICAtIElHTVB2MSBjb250cm9sIHBhY2tldCBhY3Rpb24KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBFcnJvciBQT1JUIElECisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0lHTVB2MU9wZWFydGlvbihydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgKmlnbXB2MV9vcCkKK3sKKyAgICByZXRfdCAgIHJldFZhbDsKKyAgICBydGtfdWludDMyICB2YWx1ZTsKKworICAgIGlmKHBvcnQgPiBSVEw4MzY3Q19QT1JUSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIC8qIElHTVB2MSBvcGVyYXRpb24gKi8KKyAgICBpZihwb3J0IDwgOCkKKyAgICB7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19JR01QX1BPUlQwX0NPTlRST0wgKyBwb3J0LCBSVEw4MzY3Q19JR01QX1BPUlQwX0NPTlRST0xfSUdNUFYxX09QX01BU0ssICZ2YWx1ZSk7CisgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfSUdNUF9QT1JUOF9DT05UUk9MICsgcG9ydCAtIDgsIFJUTDgzNjdDX0lHTVBfUE9SVDBfQ09OVFJPTF9JR01QVjFfT1BfTUFTSywgJnZhbHVlKTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorCisgICAgKmlnbXB2MV9vcCA9IHZhbHVlOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0lHTVB2Mk9wZWFydGlvbgorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwb3J0LWJhc2VkIElHTVB2MiBDb250cm9sIHBhY2tldCBhY3Rpb24KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAgICAgLSBwb3J0IG51bWJlcgorICogICAgICBpZ21wdjJfb3AgICAgICAgLSBJR01QdjIgY29udHJvbCBwYWNrZXQgYWN0aW9uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBFcnJvciBQT1JUIElECisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0lHTVB2Mk9wZWFydGlvbihydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgaWdtcHYyX29wKQoreworICAgIHJldF90ICAgcmV0VmFsOworCisgICAgaWYocG9ydCA+IFJUTDgzNjdDX1BPUlRJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgaWYoaWdtcHYyX29wID49IFBST1RPQ09MX09QX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIC8qIElHTVB2MiBvcGVyYXRpb24gKi8KKyAgICBpZihwb3J0IDwgOCkKKyAgICB7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19JR01QX1BPUlQwX0NPTlRST0wgKyBwb3J0LCBSVEw4MzY3Q19JR01QX1BPUlQwX0NPTlRST0xfSUdNUFYyX09QX01BU0ssIGlnbXB2Ml9vcCk7CisgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfSUdNUF9QT1JUOF9DT05UUk9MICsgcG9ydCAtIDgsIFJUTDgzNjdDX0lHTVBfUE9SVDBfQ09OVFJPTF9JR01QVjJfT1BfTUFTSywgaWdtcHYyX29wKTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0lHTVB2Mk9wZWFydGlvbgorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwb3J0LWJhc2VkIElHTVB2MiBDb250cm9sIHBhY2tldCBhY3Rpb24KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAgICAgLSBwb3J0IG51bWJlcgorICogT3V0cHV0OgorICogICAgICBpZ21wdjJfb3AgICAgICAgLSBJR01QdjIgY29udHJvbCBwYWNrZXQgYWN0aW9uCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gRXJyb3IgUE9SVCBJRAorICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNJR01QdjJPcGVhcnRpb24ocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyICppZ21wdjJfb3ApCit7CisgICAgcmV0X3QgICByZXRWYWw7CisgICAgcnRrX3VpbnQzMiAgdmFsdWU7CisKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVElETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICAvKiBJR01QdjIgb3BlcmF0aW9uICovCisgICAgaWYocG9ydCA8IDgpCisgICAgeworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfSUdNUF9QT1JUMF9DT05UUk9MICsgcG9ydCwgUlRMODM2N0NfSUdNUF9QT1JUMF9DT05UUk9MX0lHTVBWMl9PUF9NQVNLLCAmdmFsdWUpOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0lHTVBfUE9SVDhfQ09OVFJPTCArIHBvcnQgLSA4LCBSVEw4MzY3Q19JR01QX1BPUlQwX0NPTlRST0xfSUdNUFYyX09QX01BU0ssICZ2YWx1ZSk7CisgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKworICAgICppZ21wdjJfb3AgPSB2YWx1ZTsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNJR01QdjNPcGVhcnRpb24KKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgcG9ydC1iYXNlZCBJR01QdjMgQ29udHJvbCBwYWNrZXQgYWN0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgICAgIC0gcG9ydCBudW1iZXIKKyAqICAgICAgaWdtcHYzX29wICAgICAgIC0gSUdNUHYzIGNvbnRyb2wgcGFja2V0IGFjdGlvbgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gRXJyb3IgUE9SVCBJRAorICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNJR01QdjNPcGVhcnRpb24ocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGlnbXB2M19vcCkKK3sKKyAgICByZXRfdCAgIHJldFZhbDsKKworICAgIGlmKHBvcnQgPiBSVEw4MzY3Q19QT1JUSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIGlmKGlnbXB2M19vcCA+PSBQUk9UT0NPTF9PUF9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICAvKiBJR01QdjMgb3BlcmF0aW9uICovCisgICAgaWYocG9ydCA8IDgpCisgICAgeworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfSUdNUF9QT1JUMF9DT05UUk9MICsgcG9ydCwgUlRMODM2N0NfSUdNUF9QT1JUMF9DT05UUk9MX0lHTVBWM19PUF9NQVNLLCBpZ21wdjNfb3ApOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0lHTVBfUE9SVDhfQ09OVFJPTCArIHBvcnQgLSA4LCBSVEw4MzY3Q19JR01QX1BPUlQwX0NPTlRST0xfSUdNUFYzX09QX01BU0ssIGlnbXB2M19vcCk7CisgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNJR01QdjNPcGVhcnRpb24KKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcG9ydC1iYXNlZCBJR01QdjMgQ29udHJvbCBwYWNrZXQgYWN0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgICAgIC0gcG9ydCBudW1iZXIKKyAqIE91dHB1dDoKKyAqICAgICAgaWdtcHYzX29wICAgICAgIC0gSUdNUHYzIGNvbnRyb2wgcGFja2V0IGFjdGlvbgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAtIEVycm9yIFBPUlQgSUQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljSUdNUHYzT3BlYXJ0aW9uKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqaWdtcHYzX29wKQoreworICAgIHJldF90ICAgcmV0VmFsOworICAgIHJ0a191aW50MzIgIHZhbHVlOworCisgICAgaWYocG9ydCA+IFJUTDgzNjdDX1BPUlRJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgLyogSUdNUHYzIG9wZXJhdGlvbiAqLworICAgIGlmKHBvcnQgPCA4KQorICAgIHsKKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0lHTVBfUE9SVDBfQ09OVFJPTCArIHBvcnQsIFJUTDgzNjdDX0lHTVBfUE9SVDBfQ09OVFJPTF9JR01QVjNfT1BfTUFTSywgJnZhbHVlKTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19JR01QX1BPUlQ4X0NPTlRST0wgKyBwb3J0IC0gOCwgUlRMODM2N0NfSUdNUF9QT1JUMF9DT05UUk9MX0lHTVBWM19PUF9NQVNLLCAmdmFsdWUpOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisKKyAgICAqaWdtcHYzX29wID0gdmFsdWU7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljTUxEdjFPcGVhcnRpb24KKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgcG9ydC1iYXNlZCBNTER2MSBDb250cm9sIHBhY2tldCBhY3Rpb24KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAgICAgLSBwb3J0IG51bWJlcgorICogICAgICBtbGR2MV9vcCAgICAgICAgLSBNTER2MSBjb250cm9sIHBhY2tldCBhY3Rpb24KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAtIEVycm9yIFBPUlQgSUQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljTUxEdjFPcGVhcnRpb24ocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIG1sZHYxX29wKQoreworICAgIHJldF90ICAgcmV0VmFsOworCisgICAgaWYocG9ydCA+IFJUTDgzNjdDX1BPUlRJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgaWYobWxkdjFfb3AgPj0gUFJPVE9DT0xfT1BfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgLyogTUxEdjEgb3BlcmF0aW9uICovCisgICAgaWYocG9ydCA8IDgpCisgICAgeworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfSUdNUF9QT1JUMF9DT05UUk9MICsgcG9ydCwgUlRMODM2N0NfSUdNUF9QT1JUMF9DT05UUk9MX01MRHYxX09QX01BU0ssIG1sZHYxX29wKTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19JR01QX1BPUlQ4X0NPTlRST0wgKyBwb3J0IC0gOCwgUlRMODM2N0NfSUdNUF9QT1JUMF9DT05UUk9MX01MRHYxX09QX01BU0ssIG1sZHYxX29wKTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY01MRHYxT3BlYXJ0aW9uCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHBvcnQtYmFzZWQgTUxEdjEgQ29udHJvbCBwYWNrZXQgYWN0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgICAgIC0gcG9ydCBudW1iZXIKKyAqIE91dHB1dDoKKyAqICAgICAgbWxkdjFfb3AgICAgICAgIC0gTUxEdjEgY29udHJvbCBwYWNrZXQgYWN0aW9uCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gRXJyb3IgUE9SVCBJRAorICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNNTER2MU9wZWFydGlvbihydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgKm1sZHYxX29wKQoreworICAgIHJldF90ICAgcmV0VmFsOworICAgIHJ0a191aW50MzIgIHZhbHVlOworCisgICAgaWYocG9ydCA+IFJUTDgzNjdDX1BPUlRJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgLyogTUxEdjEgb3BlcmF0aW9uICovCisgICAgaWYocG9ydCA8IDgpCisgICAgeworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfSUdNUF9QT1JUMF9DT05UUk9MICsgcG9ydCwgUlRMODM2N0NfSUdNUF9QT1JUMF9DT05UUk9MX01MRHYxX09QX01BU0ssICZ2YWx1ZSk7CisgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfSUdNUF9QT1JUOF9DT05UUk9MICsgcG9ydCAtIDgsIFJUTDgzNjdDX0lHTVBfUE9SVDBfQ09OVFJPTF9NTER2MV9PUF9NQVNLLCAmdmFsdWUpOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisKKyAgICAqbWxkdjFfb3AgPSB2YWx1ZTsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNNTER2Mk9wZWFydGlvbgorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwb3J0LWJhc2VkIE1MRHYyIENvbnRyb2wgcGFja2V0IGFjdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgICAgICAtIHBvcnQgbnVtYmVyCisgKiAgICAgIG1sZHYyX29wICAgICAgICAtIE1MRHYyIGNvbnRyb2wgcGFja2V0IGFjdGlvbgorICogT3V0cHV0OgorICogICAgICBub25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gRXJyb3IgUE9SVCBJRAorICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNNTER2Mk9wZWFydGlvbihydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgbWxkdjJfb3ApCit7CisgICAgcmV0X3QgICByZXRWYWw7CisKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVElETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICBpZihtbGR2Ml9vcCA+PSBQUk9UT0NPTF9PUF9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICAvKiBNTER2MiBvcGVyYXRpb24gKi8KKyAgICBpZihwb3J0IDwgOCkKKyAgICB7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19JR01QX1BPUlQwX0NPTlRST0wgKyBwb3J0LCBSVEw4MzY3Q19JR01QX1BPUlQwX0NPTlRST0xfTUxEdjJfT1BfTUFTSywgbWxkdjJfb3ApOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0lHTVBfUE9SVDhfQ09OVFJPTCArIHBvcnQgLSA4LCBSVEw4MzY3Q19JR01QX1BPUlQwX0NPTlRST0xfTUxEdjJfT1BfTUFTSywgbWxkdjJfb3ApOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljTUxEdjJPcGVhcnRpb24KKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcG9ydC1iYXNlZCBNTER2MiBDb250cm9sIHBhY2tldCBhY3Rpb24KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAgICAgLSBwb3J0IG51bWJlcgorICogT3V0cHV0OgorICogICAgICBtbGR2Ml9vcCAgICAgICAgLSBNTER2MiBjb250cm9sIHBhY2tldCBhY3Rpb24KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBFcnJvciBQT1JUIElECisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY01MRHYyT3BlYXJ0aW9uKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqbWxkdjJfb3ApCit7CisgICAgcmV0X3QgICByZXRWYWw7CisgICAgcnRrX3VpbnQzMiAgdmFsdWU7CisKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVElETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICAvKiBNTER2MiBvcGVyYXRpb24gKi8KKyAgICBpZihwb3J0IDwgOCkKKyAgICB7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19JR01QX1BPUlQwX0NPTlRST0wgKyBwb3J0LCBSVEw4MzY3Q19JR01QX1BPUlQwX0NPTlRST0xfTUxEdjJfT1BfTUFTSywgJnZhbHVlKTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19JR01QX1BPUlQ4X0NPTlRST0wgKyBwb3J0IC0gOCwgUlRMODM2N0NfSUdNUF9QT1JUMF9DT05UUk9MX01MRHYyX09QX01BU0ssICZ2YWx1ZSk7CisgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKworICAgICptbGR2Ml9vcCA9IHZhbHVlOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0lHTVBQb3J0TUFYR3JvdXAKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgcGVyLXBvcnQgTWF4IGdyb3VwIG51bWJlcgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgbWF4X2dyb3VwICAgLSBtYXggSUdNUCBncm91cAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgLSBpbnB1dCBwYXJhbWV0ZXIgb3V0IG9mIHJhbmdlCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNJR01QUG9ydE1BWEdyb3VwKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBtYXhfZ3JvdXApCit7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgaWYocG9ydCA+IFJUTDgzNjdDX1BPUlRJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgaWYobWF4X2dyb3VwID4gUlRMODM2N0NfSUdNUF9NQVhfR09VUCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICBpZihwb3J0IDwgOCkKKyAgICB7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19JR01QX1BPUlQwMV9NQVhfR1JPVVAgKyAocG9ydC8yKSwgUlRMODM2N0NfUE9SVDBfTUFYX0dST1VQX01BU0sgPDwgKFJUTDgzNjdDX1BPUlQxX01BWF9HUk9VUF9PRkZTRVQgKiAocG9ydCUyKSksIG1heF9ncm91cCk7CisgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfSUdNUF9QT1JUODlfTUFYX0dST1VQICsgKHBvcnQvMiksIFJUTDgzNjdDX1BPUlQwX01BWF9HUk9VUF9NQVNLIDw8IChSVEw4MzY3Q19QT1JUMV9NQVhfR1JPVVBfT0ZGU0VUICogKHBvcnQlMikpLCBtYXhfZ3JvdXApOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0lHTVBQb3J0TUFYR3JvdXAKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcGVyLXBvcnQgTWF4IGdyb3VwIG51bWJlcgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgbWF4X2dyb3VwICAgLSBtYXggSUdNUCBncm91cAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNJR01QUG9ydE1BWEdyb3VwKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqbWF4X2dyb3VwKQoreworICAgIHJldF90ICAgcmV0VmFsOworICAgIHJ0a191aW50MzIgIHZhbHVlOworCisgICAgaWYocG9ydCA+IFJUTDgzNjdDX1BPUlRJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgaWYocG9ydCA8IDgpCisgICAgeworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfSUdNUF9QT1JUMDFfTUFYX0dST1VQICsgKHBvcnQvMiksIFJUTDgzNjdDX1BPUlQwX01BWF9HUk9VUF9NQVNLIDw8IChSVEw4MzY3Q19QT1JUMV9NQVhfR1JPVVBfT0ZGU0VUICogKHBvcnQlMikpLCAmdmFsdWUpOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0lHTVBfUE9SVDg5X01BWF9HUk9VUCArIChwb3J0LzIpLCBSVEw4MzY3Q19QT1JUMF9NQVhfR1JPVVBfTUFTSyA8PCAoUlRMODM2N0NfUE9SVDFfTUFYX0dST1VQX09GRlNFVCAqIChwb3J0JTIpKSwgJnZhbHVlKTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorCisgICAgKm1heF9ncm91cCA9IHZhbHVlOworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljSUdNUFBvcnRDdXJyZW50R3JvdXAKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcGVyLXBvcnQgY3VycmVudCBncm91cCBudW1iZXIKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH43KQorICogICAgICBjdXJyZW50X2dyb3VwICAgLSBjdXJyZW50IElHTVAgZ3JvdXAKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljSUdNUFBvcnRDdXJyZW50R3JvdXAocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyICpjdXJyZW50X2dyb3VwKQoreworICAgIHJldF90ICAgcmV0VmFsOworICAgIHJ0a191aW50MzIgIHZhbHVlOworCisgICAgaWYocG9ydCA+IFJUTDgzNjdDX1BPUlRJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgaWYocG9ydCA8IDgpCisgICAgeworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfSUdNUF9QT1JUMDFfQ1VSUkVOVF9HUk9VUCArIChwb3J0LzIpLCBSVEw4MzY3Q19QT1JUMF9DVVJSRU5UX0dST1VQX01BU0sgPDwgKFJUTDgzNjdDX1BPUlQxX0NVUlJFTlRfR1JPVVBfT0ZGU0VUICogKHBvcnQlMikpLCAmdmFsdWUpOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0lHTVBfUE9SVDg5X0NVUlJFTlRfR1JPVVAgKyAoKHBvcnQgLSA4KS8yKSwgUlRMODM2N0NfUE9SVDBfQ1VSUkVOVF9HUk9VUF9NQVNLIDw8IChSVEw4MzY3Q19QT1JUMV9DVVJSRU5UX0dST1VQX09GRlNFVCAqIChwb3J0JTIpKSwgJnZhbHVlKTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorCisgICAgKmN1cnJlbnRfZ3JvdXAgPSB2YWx1ZTsKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0lHTVBHcm91cAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBJR01QIGdyb3VwCisgKiBJbnB1dDoKKyAqICAgICAgaWR4ICAgICAtIEdyb3VwIGluZGV4ICgwfjI1NSkKKyAqICAgICAgdmFsaWQgICAtIHZhbGlkIGJpdAorICogICAgICBncnAgICAgIC0gSUdNUCBncm91cAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAgICAgLSBHcm91cCBpbmRleCBpcyBvdXQgb2YgcmFuZ2UKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0lHTVBHcm91cChydGtfdWludDMyIGlkeCwgcnRrX3VpbnQzMiAqdmFsaWQsIHJ0bDgzNjdjX2lnbXBncm91cCAqZ3JwKQoreworICAgIHJldF90ICAgcmV0VmFsOworICAgIHJ0a191aW50MzIgIHJlZ0FkZHIsIHJlZ0RhdGE7CisgICAgcnRrX3VpbnQzMiAgaTsKKyAgICBydGtfdWludDMyICBncm91cEluZm8gPSAwOworCisgICAgaWYoaWR4ID4gUlRMODM2N0NfSUdNUF9NQVhfR09VUCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICAvKiBXcml0ZSBBQ1NfQURSIHJlZ2lzdGVyIGZvciBkYXRhIGJpdHMgKi8KKyAgICByZWdBZGRyID0gUlRMODM2N0NfVEFCTEVfQUNDRVNTX0FERFJfUkVHOworICAgIHJlZ0RhdGEgPSBpZHg7CisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhyZWdBZGRyLCByZWdEYXRhKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgLyogV3JpdGUgQUNTX0NNRCByZWdpc3RlciAqLworICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19UQUJMRV9BQ0NFU1NfQ1RSTF9SRUc7CisgICAgcmVnRGF0YSA9IFJUTDgzNjdDX1RBQkxFX0FDQ0VTU19SRUdfREFUQShUQl9PUF9SRUFELCBUQl9UQVJHRVRfSUdNUF9HUk9VUCk7CisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMocmVnQWRkciwgUlRMODM2N0NfVEFCTEVfVFlQRV9NQVNLIHwgUlRMODM2N0NfQ09NTUFORF9UWVBFX01BU0ssIHJlZ0RhdGEpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAvKiBSZWFkIERhdGEgQml0cyAqLworICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19UQUJMRV9BQ0NFU1NfUkREQVRBX0JBU0U7CisgICAgZm9yKGkgPSAwIDtpIDw9IDE7IGkrKykKKyAgICB7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcocmVnQWRkciwgJnJlZ0RhdGEpOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBncm91cEluZm8gfD0gKChyZWdEYXRhICYgMHhGRkZGKSA8PCAoaSAqIDE2KSk7CisgICAgICAgIHJlZ0FkZHIgKys7CisgICAgfQorCisgICAgZ3JwLT5wMF90aW1lciA9IGdyb3VwSW5mbyAmIDB4MDAwMDAwMDc7CisgICAgZ3JwLT5wMV90aW1lciA9IChncm91cEluZm8gPj4gMykgJiAweDAwMDAwMDA3OworICAgIGdycC0+cDJfdGltZXIgPSAoZ3JvdXBJbmZvID4+IDYpICYgMHgwMDAwMDAwNzsKKyAgICBncnAtPnAzX3RpbWVyID0gKGdyb3VwSW5mbyA+PiA5KSAmIDB4MDAwMDAwMDc7CisgICAgZ3JwLT5wNF90aW1lciA9IChncm91cEluZm8gPj4gMTIpICYgMHgwMDAwMDAwNzsKKyAgICBncnAtPnA1X3RpbWVyID0gKGdyb3VwSW5mbyA+PiAxNSkgJiAweDAwMDAwMDA3OworICAgIGdycC0+cDZfdGltZXIgPSAoZ3JvdXBJbmZvID4+IDE4KSAmIDB4MDAwMDAwMDc7CisgICAgZ3JwLT5wN190aW1lciA9IChncm91cEluZm8gPj4gMjEpICYgMHgwMDAwMDAwNzsKKyAgICBncnAtPnJlcG9ydF9zdXBwX2ZsYWcgPSAoZ3JvdXBJbmZvID4+IDI0KSAmIDB4MDAwMDAwMDE7CisgICAgZ3JwLT5wOF90aW1lciA9IChncm91cEluZm8gPj4gMjUpICYgMHgwMDAwMDAwNzsKKyAgICBncnAtPnA5X3RpbWVyID0gKGdyb3VwSW5mbyA+PiAyOCkgJiAweDAwMDAwMDA3OworICAgIGdycC0+cDEwX3RpbWVyID0gKGdyb3VwSW5mbyA+PiAzMSkgJiAweDAwMDAwMDAxOworCisgICAgcmVnQWRkciA9IFJUTDgzNjdDX1RBQkxFX0FDQ0VTU19SRERBVEFfQkFTRSArIDI7CisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhyZWdBZGRyLCAmcmVnRGF0YSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGdycC0+cDEwX3RpbWVyIHw9IChyZWdEYXRhICYgMHgwMDAwMDAwMykgPDwgMTsKKworICAgIC8qIFZhbGlkIGJpdCAqLworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfSUdNUF9HUk9VUF9VU0FHRV9SRUcoaWR4KSwgJnJlZ0RhdGEpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAqdmFsaWQgPSAoKHJlZ0RhdGEgJiAoMHgwMDAxIDw8IChpZHggJTE2KSkpICE9IDApID8gMSA6IDA7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0lwTXVsdGljYXN0UG9ydElzb0xlYWt5CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IElQIG11bHRpY2FzdCBQb3J0IElzb2xhdGlvbiBsZWFreQorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgZW5hYmxlZCAgICAgLSAxOiBlbmFibGVkLCAwOiBkaXNhYmxlZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNJcE11bHRpY2FzdFBvcnRJc29MZWFreShydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgZW5hYmxlZCkKK3sKKyAgICByZXRfdCAgIHJldFZhbDsKKworICAgIGlmKHBvcnQgPiBSVEw4MzY3Q19QT1JUSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX0lQTUNBU1RfUE9SVElTT19MRUFLWV9SRUcsICgweDAwMDEgPDwgcG9ydCksIGVuYWJsZWQpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljSXBNdWx0aWNhc3RQb3J0SXNvTGVha3kKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgSVAgbXVsdGljYXN0IFBvcnQgSXNvbGF0aW9uIGxlYWt5CisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH43KQorICogICAgICBlbmFibGVkICAgICAtIDE6IGVuYWJsZWQsIDA6IGRpc2FibGVkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNJcE11bHRpY2FzdFBvcnRJc29MZWFreShydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgKmVuYWJsZWQpCit7CisgICAgcmV0X3QgICByZXRWYWw7CisgICAgcnRrX3VpbnQzMiAgcmVnRGF0YTsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX0lQTUNBU1RfUE9SVElTT19MRUFLWV9SRUcsICgweDAwMDEgPDwgcG9ydCksICZyZWdEYXRhKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgKmVuYWJsZWQgPSByZWdEYXRhOworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNJR01QUmVwb3J0TGVhdmVGbG9vZAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBJR01QL01MRCBSZXBvcnQvTGVhdmUgZmxvb2QKKyAqIElucHV0OgorICogICAgICBmbG9vZCAgIC0gMDogUmVzZXJ2ZWQsIDE6IGZsb29kaW5nIHRvIHJvdXRlciBwb3J0cywgMjogZmxvb2RpbmcgdG8gYWxsIHBvcnRzLCAzOiBmbG9vZGluZyB0byByb3V0ZXIgcG9ydCBvciB0byBhbGwgcG9ydHMgaWYgdGhlcmUgaXMgbm8gcm91dGVyIHBvcnQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0lHTVBSZXBvcnRMZWF2ZUZsb29kKHJ0a191aW50MzIgZmxvb2QpCit7CisgICAgcmV0X3QgICByZXRWYWw7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfSUdNUF9NTERfQ0ZHMywgUlRMODM2N0NfUkVQT1JUX0xFQVZFX0ZPUldBUkRfTUFTSywgZmxvb2QpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljSUdNUFJlcG9ydExlYXZlRmxvb2QKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgSUdNUC9NTEQgUmVwb3J0L0xlYXZlIGZsb29kCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwZmxvb2QgIC0gMDogUmVzZXJ2ZWQsIDE6IGZsb29kaW5nIHRvIHJvdXRlciBwb3J0cywgMjogZmxvb2RpbmcgdG8gYWxsIHBvcnRzLCAzOiBmbG9vZGluZyB0byByb3V0ZXIgcG9ydCBvciB0byBhbGwgcG9ydHMgaWYgdGhlcmUgaXMgbm8gcm91dGVyIHBvcnQKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNJR01QUmVwb3J0TGVhdmVGbG9vZChydGtfdWludDMyICpwRmxvb2QpCit7CisgICAgcmV0X3QgICByZXRWYWw7CisgICAgcnRrX3VpbnQzMiAgcmVnRGF0YTsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19JR01QX01MRF9DRkczLCBSVEw4MzY3Q19SRVBPUlRfTEVBVkVfRk9SV0FSRF9NQVNLLCAmcmVnRGF0YSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICpwRmxvb2QgPSByZWdEYXRhOworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNJR01QRHJvcExlYXZlWmVybworICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCB0aGUgZnVuY3Rpb24gb2YgZHJvcHBwaW5nIExlYXZlIHBhY2tldCB3aXRoIGdyb3VwIElQID0gMC4wLjAuMAorICogSW5wdXQ6CisgKiAgICAgIGRyb3AgICAgLSAxOiBEcm9wLCAwOkJ5cGFzcworICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljSUdNUERyb3BMZWF2ZVplcm8ocnRrX3VpbnQzMiBkcm9wKQoreworICAgIHJldF90ICAgcmV0VmFsOworCisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfSUdNUF9NTERfQ0ZHMSwgUlRMODM2N0NfRFJPUF9MRUFWRV9aRVJPX09GRlNFVCwgZHJvcCk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNJR01QRHJvcExlYXZlWmVybworICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCB0aGUgZnVuY3Rpb24gb2YgZHJvcHBwaW5nIExlYXZlIHBhY2tldCB3aXRoIGdyb3VwIElQID0gMC4wLjAuMAorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcERyb3AgICAgLSAxOiBEcm9wLCAwOkJ5cGFzcworICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0lHTVBEcm9wTGVhdmVaZXJvKHJ0a191aW50MzIgKnBEcm9wKQoreworICAgIHJldF90ICAgcmV0VmFsOworICAgIHJ0a191aW50MzIgIHJlZ0RhdGE7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19JR01QX01MRF9DRkcxLCBSVEw4MzY3Q19EUk9QX0xFQVZFX1pFUk9fT0ZGU0VULCAmcmVnRGF0YSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICpwRHJvcCA9IHJlZ0RhdGE7CisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0lHTVBCeXBhc3NTdG9ybUNUUkwKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgdGhlIGZ1bmN0aW9uIG9mIGJ5cGFzcyBzdHJvbSBjb250cm9sIGZvciBJR01QL01MRCBwYWNrZXQKKyAqIElucHV0OgorICogICAgICBieXBhc3MgICAgLSAxOiBCeXBhc3MsIDA6bm90IGJ5cGFzcworICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljSUdNUEJ5cGFzc1N0b3JtQ1RSTChydGtfdWludDMyIGJ5cGFzcykKK3sKKyAgICByZXRfdCAgIHJldFZhbDsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0lHTVBfTUxEX0NGRzAsIFJUTDgzNjdDX0lHTVBfTUxEX0RJU0NBUkRfU1RPUk1fRklMVEVSX09GRlNFVCwgYnlwYXNzKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0lHTVBCeXBhc3NTdG9ybUNUUkwKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgdGhlIGZ1bmN0aW9uIG9mIGJ5cGFzcyBzdHJvbSBjb250cm9sIGZvciBJR01QL01MRCBwYWNrZXQKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBCeXBhc3MgICAgLSAxOiBCeXBhc3MsIDA6bm90IGJ5cGFzcworICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0lHTVBCeXBhc3NTdG9ybUNUUkwocnRrX3VpbnQzMiAqcEJ5cGFzcykKK3sKKyAgICByZXRfdCAgIHJldFZhbDsKKyAgICBydGtfdWludDMyICByZWdEYXRhOworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfSUdNUF9NTERfQ0ZHMCwgUlRMODM2N0NfSUdNUF9NTERfRElTQ0FSRF9TVE9STV9GSUxURVJfT0ZGU0VULCAmcmVnRGF0YSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICpwQnlwYXNzID0gcmVnRGF0YTsKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljSUdNUElzb0xlYWt5CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IFBvcnQgSXNvbGF0aW9uIGxlYWt5IGZvciBJR01QL01MRCBwYWNrZXQKKyAqIElucHV0OgorICogICAgICBsZWFreSAgICAtIDE6IExlYWt5LCAwOm5vdCBsZWFreQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljSUdNUElzb0xlYWt5KHJ0a191aW50MzIgbGVha3kpCit7CisgICAgcmV0X3QgICByZXRWYWw7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19JR01QX01MRF9DRkcwLCBSVEw4MzY3Q19JR01QX01MRF9QT1JUSVNPX0xFQUtZX09GRlNFVCwgbGVha3kpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljSUdNUElzb0xlYWt5CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFBvcnQgSXNvbGF0aW9uIGxlYWt5IGZvciBJR01QL01MRCBwYWNrZXQKKyAqIElucHV0OgorICogICAgICBOb2VuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBMZWFreSAgICAtIDE6IExlYWt5LCAwOm5vdCBsZWFreQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0lHTVBJc29MZWFreShydGtfdWludDMyICpwTGVha3kpCit7CisgICAgcmV0X3QgICByZXRWYWw7CisgICAgcnRrX3VpbnQzMiAgcmVnRGF0YTsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0lHTVBfTUxEX0NGRzAsIFJUTDgzNjdDX0lHTVBfTUxEX1BPUlRJU09fTEVBS1lfT0ZGU0VULCAmcmVnRGF0YSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICpwTGVha3kgPSByZWdEYXRhOworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNJR01QVkxBTkxlYWt5CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IFZMQU4gbGVha3kgZm9yIElHTVAvTUxEIHBhY2tldAorICogSW5wdXQ6CisgKiAgICAgIGxlYWt5ICAgIC0gMTogTGVha3ksIDA6bm90IGxlYWt5CisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNJR01QVkxBTkxlYWt5KHJ0a191aW50MzIgbGVha3kpCit7CisgICAgcmV0X3QgICByZXRWYWw7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19JR01QX01MRF9DRkcwLCBSVEw4MzY3Q19JR01QX01MRF9WTEFOX0xFQUtZX09GRlNFVCwgbGVha3kpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljSUdNUFZMQU5MZWFreQorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBWTEFOIGxlYWt5IGZvciBJR01QL01MRCBwYWNrZXQKKyAqIElucHV0OgorICogICAgICBOb2VuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBMZWFreSAgICAtIDE6IExlYWt5LCAwOm5vdCBsZWFreQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0lHTVBWTEFOTGVha3kocnRrX3VpbnQzMiAqcExlYWt5KQoreworICAgIHJldF90ICAgcmV0VmFsOworICAgIHJ0a191aW50MzIgIHJlZ0RhdGE7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19JR01QX01MRF9DRkcwLCBSVEw4MzY3Q19JR01QX01MRF9WTEFOX0xFQUtZX09GRlNFVCwgJnJlZ0RhdGEpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAqcExlYWt5ID0gcmVnRGF0YTsKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljSUdNUEJ5cGFzc0dyb3VwCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IElHTVAvTUxEIEJ5cGFzcyBncm91cAorICogSW5wdXQ6CisgKiAgICAgIGJ5cGFzc1R5cGUgIC0gQnlwYXNzIHR5cGUKKyAqICAgICAgZW5hYmxlZCAgICAgLSBlbmFibGVkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNJR01QQnlwYXNzR3JvdXAocnRrX3VpbnQzMiBieXBhc3NUeXBlLCBydGtfdWludDMyIGVuYWJsZWQpCit7CisgICAgcmV0X3QgICByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBvZmZzZXQ7CisKKyAgICBzd2l0Y2goYnlwYXNzVHlwZSkKKyAgICB7CisgICAgICAgIGNhc2UgQllQQVNTXzIyNF8wXzBfWDoKKyAgICAgICAgICAgIG9mZnNldCA9IFJUTDgzNjdDX0lHTVBfTUxEX0lQNF9CWVBBU1NfMjI0XzBfMF9PRkZTRVQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCWVBBU1NfMjI0XzBfMV9YOgorICAgICAgICAgICAgb2Zmc2V0ID0gUlRMODM2N0NfSUdNUF9NTERfSVA0X0JZUEFTU18yMjRfMF8xX09GRlNFVDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJZUEFTU18yMzlfMjU1XzI1NV9YOgorICAgICAgICAgICAgb2Zmc2V0ID0gUlRMODM2N0NfSUdNUF9NTERfSVA0X0JZUEFTU18yMzlfMjU1XzI1NV9PRkZTRVQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCWVBBU1NfSVBWNl8wMFhYOgorICAgICAgICAgICAgb2Zmc2V0ID0gUlRMODM2N0NfSUdNUF9NTERfSVA2X0JZUEFTU19PRkZTRVQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisgICAgfQorCisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfSUdNUF9NTERfQ0ZHMywgb2Zmc2V0LCBlbmFibGVkKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0lHTVBCeXBhc3NHcm91cAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBJR01QL01MRCBCeXBhc3MgZ3JvdXAKKyAqIElucHV0OgorICogICAgICBieXBhc3NUeXBlICAtIEJ5cGFzcyB0eXBlCisgKiBPdXRwdXQ6CisgKiAgICAgIHBFbmFibGVkICAgIC0gZW5hYmxlZAorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0lHTVBCeXBhc3NHcm91cChydGtfdWludDMyIGJ5cGFzc1R5cGUsIHJ0a191aW50MzIgKnBFbmFibGVkKQoreworICAgIHJldF90ICAgcmV0VmFsOworICAgIHJ0a191aW50MzIgb2Zmc2V0OworCisgICAgc3dpdGNoKGJ5cGFzc1R5cGUpCisgICAgeworICAgICAgICBjYXNlIEJZUEFTU18yMjRfMF8wX1g6CisgICAgICAgICAgICBvZmZzZXQgPSBSVEw4MzY3Q19JR01QX01MRF9JUDRfQllQQVNTXzIyNF8wXzBfT0ZGU0VUOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQllQQVNTXzIyNF8wXzFfWDoKKyAgICAgICAgICAgIG9mZnNldCA9IFJUTDgzNjdDX0lHTVBfTUxEX0lQNF9CWVBBU1NfMjI0XzBfMV9PRkZTRVQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCWVBBU1NfMjM5XzI1NV8yNTVfWDoKKyAgICAgICAgICAgIG9mZnNldCA9IFJUTDgzNjdDX0lHTVBfTUxEX0lQNF9CWVBBU1NfMjM5XzI1NV8yNTVfT0ZGU0VUOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQllQQVNTX0lQVjZfMDBYWDoKKyAgICAgICAgICAgIG9mZnNldCA9IFJUTDgzNjdDX0lHTVBfTUxEX0lQNl9CWVBBU1NfT0ZGU0VUOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworICAgIH0KKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0lHTVBfTUxEX0NGRzMsIG9mZnNldCwgcEVuYWJsZWQpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9pbmJ3Y3RybC5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfaW5id2N0cmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmIzNmJlCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfaW5id2N0cmwuYwpAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiAkUmV2aXNpb246IDc2MzA2ICQKKyAqICREYXRlOiAyMDE3LTAzLTA4IDE1OjEzOjU4ICswODAwICjpgLHkuIksIDA4IOS4ieaciCAyMDE3KSAkCisgKgorICogUHVycG9zZSA6IFJUTDgzNjdDIHN3aXRjaCBoaWdoLWxldmVsIEFQSSBmb3IgUlRMODM2N0MKKyAqIEZlYXR1cmUgOiBJbmdyZXNzIGJhbmR3aWR0aCBjb250cm9sIHJlbGF0ZWQgZnVuY3Rpb25zCisgKgorICovCisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl9pbmJ3Y3RybC5oPgorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1BvcnRJbmdyZXNzQmFuZHdpZHRoCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHBlci1wb3J0IHRvdGFsIGluZ3Jlc3MgYmFuZHdpZHRoCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH43KQorICogICAgICBiYW5kd2lkdGggICAtIFRoZSB0b3RhbCBpbmdyZXNzIGJhbmR3aWR0aCAodW5pdDogOEticHMpLCAweDFGRkZGOmRpc2FibGUKKyAqICAgICAgcHJlaWZnICAgICAgLSBJbmNsdWRlIHByZWFtYmxlIGFuZCBJRkcsIDA6RXhjbHVkZSwgMTpJbmNsdWRlCisgKiAgICAgIGVuYWJsZUZDICAgIC0gQWN0aW9uIHdoZW4gaW5wdXQgcmF0ZSBleGNlZWRzLiAwOiBEcm9wICAgMTogRmxvdyBDb250cm9sCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAtIGlucHV0IHBhcmFtZXRlciBvdXQgb2YgcmFuZ2UKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1BvcnRJbmdyZXNzQmFuZHdpZHRoKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBiYW5kd2lkdGgsIHJ0a191aW50MzIgcHJlaWZnLCBydGtfdWludDMyIGVuYWJsZUZDKQoreworICAgIHJldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHJlZ0RhdGE7CisgICAgcnRrX3VpbnQzMiByZWdBZGRyOworCisgICAgLyogSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIgKi8KKyAgICBpZihwb3J0ID49IFJUTDgzNjdDX1BPUlROTykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgaWYoYmFuZHdpZHRoID4gUlRMODM2N0NfUU9TX0dSQU5VTEFSVFlfTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19JTkdSRVNTQldfUE9SVF9SQVRFX0xTQl9SRUcocG9ydCk7CisgICAgcmVnRGF0YSA9IGJhbmR3aWR0aCAmIFJUTDgzNjdDX1FPU19HUkFOVUxBUlRZX0xTQl9NQVNLOworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcocmVnQWRkciwgcmVnRGF0YSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJlZ0FkZHIgKz0gMTsKKyAgICByZWdEYXRhID0gKGJhbmR3aWR0aCAmIFJUTDgzNjdDX1FPU19HUkFOVUxBUlRZX01TQl9NQVNLKSA+PiBSVEw4MzY3Q19RT1NfR1JBTlVMQVJUWV9NU0JfT0ZGU0VUOworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKHJlZ0FkZHIsIFJUTDgzNjdDX0lOR1JFU1NCV19QT1JUMF9SQVRFX0NUUkwxX0lOR1JFU1NCV19SQVRFMTZfTUFTSywgcmVnRGF0YSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19QT1JUX01JU0NfQ0ZHX1JFRyhwb3J0KTsKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KHJlZ0FkZHIsIFJUTDgzNjdDX1BPUlQwX01JU0NfQ0ZHX0lOR1JFU1NCV19JRkdfT0ZGU0VULCBwcmVpZmcpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZWdBZGRyID0gUlRMODM2N0NfUE9SVF9NSVNDX0NGR19SRUcocG9ydCk7CisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChyZWdBZGRyLCBSVEw4MzY3Q19QT1JUMF9NSVNDX0NGR19JTkdSRVNTQldfRkxPV0NUUkxfT0ZGU0VULCBlbmFibGVGQyk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljUG9ydEluZ3Jlc3NCYW5kd2lkdGgKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcGVyLXBvcnQgdG90YWwgaW5ncmVzcyBiYW5kd2lkdGgKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjcpCisgKiAgICAgIHBCYW5kd2lkdGggIC0gVGhlIHRvdGFsIGluZ3Jlc3MgYmFuZHdpZHRoICh1bml0OiA4S2JwcyksIDB4MUZGRkY6ZGlzYWJsZQorICogICAgICBwUHJlaWZnICAgICAgICAgLSBJbmNsdWRlIHByZWFtYmxlIGFuZCBJRkcsIDA6RXhjbHVkZSwgMTpJbmNsdWRlCisgKiAgICAgIHBFbmFibGVGQyAgIC0gQWN0aW9uIHdoZW4gaW5wdXQgcmF0ZSBleGNlZWRzLiAwOiBEcm9wICAgMTogRmxvdyBDb250cm9sCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BvcnRJbmdyZXNzQmFuZHdpZHRoKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiogcEJhbmR3aWR0aCwgcnRrX3VpbnQzMiogcFByZWlmZywgcnRrX3VpbnQzMiogcEVuYWJsZUZDKQoreworICAgIHJldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHJlZ0RhdGE7CisgICAgcnRrX3VpbnQzMiByZWdBZGRyOworCisgICAgLyogSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIgKi8KKyAgICBpZihwb3J0ID49IFJUTDgzNjdDX1BPUlROTykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgcmVnQWRkciA9IFJUTDgzNjdDX0lOR1JFU1NCV19QT1JUX1JBVEVfTFNCX1JFRyhwb3J0KTsKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKHJlZ0FkZHIsICZyZWdEYXRhKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgKnBCYW5kd2lkdGggPSByZWdEYXRhOworCisgICAgcmVnQWRkciArPSAxOworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKHJlZ0FkZHIsIFJUTDgzNjdDX0lOR1JFU1NCV19QT1JUMF9SQVRFX0NUUkwxX0lOR1JFU1NCV19SQVRFMTZfTUFTSywgJnJlZ0RhdGEpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAqcEJhbmR3aWR0aCB8PSAocmVnRGF0YSA8PCBSVEw4MzY3Q19RT1NfR1JBTlVMQVJUWV9NU0JfT0ZGU0VUKTsKKworICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19QT1JUX01JU0NfQ0ZHX1JFRyhwb3J0KTsKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0KHJlZ0FkZHIsIFJUTDgzNjdDX1BPUlQwX01JU0NfQ0ZHX0lOR1JFU1NCV19JRkdfT0ZGU0VULCBwUHJlaWZnKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmVnQWRkciA9IFJUTDgzNjdDX1BPUlRfTUlTQ19DRkdfUkVHKHBvcnQpOworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQocmVnQWRkciwgUlRMODM2N0NfUE9SVDBfTUlTQ19DRkdfSU5HUkVTU0JXX0ZMT1dDVFJMX09GRlNFVCwgcEVuYWJsZUZDKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNQb3J0SW5ncmVzc0JhbmR3aWR0aEJ5cGFzcworICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBpbmdyZXNzIGJhbmR3aWR0aCBjb250cm9sIGJ5cGFzc3MgODg5OSwgUk1BIDAxLTgwLUMyLTAwLTAwLXh4IGFuZCBJR01QCisgKiBJbnB1dDoKKyAqICAgICAgZW5hYmxlZCAtIDE6IGVuYWJsZWQsIDA6IGRpc2FibGVkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljUG9ydEluZ3Jlc3NCYW5kd2lkdGhCeXBhc3MocnRrX3VpbnQzMiBlbmFibGVkKQoreworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19TV19EVU1NWTAsIFJUTDgzNjdDX0lOR1JFU1NCV19CWVBBU1NfRU5fT0ZGU0VULCBlbmFibGVkKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNQb3J0SW5ncmVzc0JhbmR3aWR0aEJ5cGFzcworICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBpbmdyZXNzIGJhbmR3aWR0aCBjb250cm9sIGJ5cGFzc3MgODg5OSwgUk1BIDAxLTgwLUMyLTAwLTAwLXh4IGFuZCBJR01QCisgKiBJbnB1dDoKKyAqICAgICAgcEVuYWJsZWQgLSAxOiBlbmFibGVkLCAwOiBkaXNhYmxlZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BvcnRJbmdyZXNzQmFuZHdpZHRoQnlwYXNzKHJ0a191aW50MzIqIHBFbmFibGVkKQoreworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19TV19EVU1NWTAsIFJUTDgzNjdDX0lOR1JFU1NCV19CWVBBU1NfRU5fT0ZGU0VULCBwRW5hYmxlZCk7Cit9CisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X2ludGVycnVwdC5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfaW50ZXJydXB0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI2Y2JjZAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X2ludGVycnVwdC5jCkBAIC0wLDAgKzEsMjA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNzYzMDYgJAorICogJERhdGU6IDIwMTctMDMtMDggMTU6MTM6NTggKzA4MDAgKOmAseS4iSwgMDgg5LiJ5pyIIDIwMTcpICQKKyAqCisgKiBQdXJwb3NlIDogUlRMODM2N0Mgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJIGZvciBSVEw4MzY3QworICogRmVhdHVyZSA6IEludGVycnVwdCByZWxhdGVkIGZ1bmN0aW9ucworICoKKyAqLworI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnZfaW50ZXJydXB0Lmg+CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljSW50ZXJydXB0UG9sYXJpdHkKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgaW50ZXJydXB0IHRyaWdnZXIgcG9sYXJpdHkKKyAqIElucHV0OgorICogICAgICBwb2xhcml0eSAgICAtIDA6cHVsbCBoaWdoIDE6IHB1bGwgbG93CisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljSW50ZXJydXB0UG9sYXJpdHkocnRrX3VpbnQzMiBwb2xhcml0eSkKK3sKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfSU5UUl9DVFJMLCBSVEw4MzY3Q19JTlRSX0NUUkxfT0ZGU0VULCBwb2xhcml0eSk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljSW50ZXJydXB0UG9sYXJpdHkKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgaW50ZXJydXB0IHRyaWdnZXIgcG9sYXJpdHkKKyAqIElucHV0OgorICogICAgICBwUG9sYXJpdHkgICAtIDA6cHVsbCBoaWdoIDE6IHB1bGwgbG93CisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljSW50ZXJydXB0UG9sYXJpdHkocnRrX3VpbnQzMiogcFBvbGFyaXR5KQoreworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19JTlRSX0NUUkwsIFJUTDgzNjdDX0lOVFJfQ1RSTF9PRkZTRVQsIHBQb2xhcml0eSk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljSW50ZXJydXB0TWFzaworICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBpbnRlcnJ1cHQgZW5hYmxlIG1hc2sKKyAqIElucHV0OgorICogICAgICBpbXIgICAgIC0gSW50ZXJydXB0IG1hc2sKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNJbnRlcnJ1cHRNYXNrKHJ0a191aW50MzIgaW1yKQoreworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19JTlRSX0lNUiwgaW1yKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNJbnRlcnJ1cHRNYXNrCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGludGVycnVwdCBlbmFibGUgbWFzaworICogSW5wdXQ6CisgKiAgICAgIHBJbXIgICAgLSBJbnRlcnJ1cHQgbWFzaworICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0ludGVycnVwdE1hc2socnRrX3VpbnQzMiogcEltcikKK3sKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfSU5UUl9JTVIsIHBJbXIpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0ludGVycnVwdE1hc2sKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBDbGVhciBpbnRlcnJ1cHQgZW5hYmxlIG1hc2sKKyAqIElucHV0OgorICogICAgICBpbXMgICAgIC0gSW50ZXJydXB0IHN0YXR1cyBtYXNrCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgY2FuIGJlIHVzZWQgdG8gY2xlYXIgQVNJQyBpbnRlcnJ1cHQgc3RhdHVzIGFuZCByZWdpc3RlciB3aWxsIGJlIGNsZWFyZWQgYnkgd3JpdHRpbmcgMS4KKyAqICAgICAgWzBdOkxpbmsgY2hhbmdlLAorICogICAgICBbMV06U2hhcmUgbWV0ZXIgZXhjZWVkLAorICogICAgICBbMl06TGVhcm4gbnVtYmVyIG92ZXJlZCwKKyAqICAgICAgWzNdOlNwZWVkIENoYW5nZSwKKyAqICAgICAgWzRdOlR4IHNwZWNpYWwgY29uZ2VzdGlvbgorICogICAgICBbNV06MSBzZWNvbmQgZ3JlZW4gZmVhdHVyZQorICogICAgICBbNl06bG9vcCBkZXRlY3Rpb24KKyAqICAgICAgWzddOmludGVycnVwdCBmcm9tIDgwNTEKKyAqICAgICAgWzhdOkNhYmxlIGRpYWdub3N0aWMgZmluaXNoCisgKiAgICAgIFs5XTpBQ0wgYWN0aW9uIGludGVycnVwdCB0cmlnZ2VyCisgKiAgICAgIFsxMV06IFNpbGVudCBTdGFydAorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljSW50ZXJydXB0U3RhdHVzKHJ0a191aW50MzIgaW1zKQoreworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19JTlRSX0lNUywgaW1zKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNJbnRlcnJ1cHRTdGF0dXMKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgaW50ZXJydXB0IGVuYWJsZSBtYXNrCisgKiBJbnB1dDoKKyAqICAgICAgcEltcyAgICAtIEludGVycnVwdCBzdGF0dXMgbWFzaworICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0ludGVycnVwdFN0YXR1cyhydGtfdWludDMyKiBwSW1zKQoreworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19JTlRSX0lNUywgcEltcyk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljSW50ZXJydXB0UmVsYXRlZFN0YXR1cworICogRGVzY3JpcHRpb246CisgKiAgICAgIENsZWFyIGludGVycnVwdCBzdGF0dXMKKyAqIElucHV0OgorICogICAgICB0eXBlICAgIC0gcGVyIHBvcnQgTGVhcm4gb3ZlciwgcGVyLXBvcnQgc3BlZWQgY2hhbmdlLCBwZXItcG9ydCBzcGVjaWFsIGNvbmdlc3QsIHNoYXJlIG1ldGVyIGV4Y2VlZCBzdGF0dXMKKyAqICAgICAgc3RhdHVzICAtIGV4Y2VlZCBzdGF0dXMsIHdyaXRlIDEgdG8gY2xlYXIKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gaW5wdXQgcGFyYW1ldGVyIG91dCBvZiByYW5nZQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljSW50ZXJydXB0UmVsYXRlZFN0YXR1cyhydGtfdWludDMyIHR5cGUsIHJ0a191aW50MzIgc3RhdHVzKQoreworICAgIENPTlNUIHJ0a191aW50MzIgaW5kaWNhdG9yQWRkcmVzc1tJTlRSU1RfRU5EXSA9IHtSVEw4MzY3Q19SRUdfTEVBUk5fT1ZFUl9JTkRJQ0FUT1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1NQRUVEX0NIQU5HRV9JTkRJQ0FUT1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1NQRUNJQUxfQ09OR0VTVF9JTkRJQ0FUT1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1BPUlRfTElOS0RPV05fSU5ESUNBVE9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19QT1JUX0xJTktVUF9JTkRJQ0FUT1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX01FVEVSX09WRVJSQVRFX0lORElDQVRPUjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX01FVEVSX09WRVJSQVRFX0lORElDQVRPUjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1JMRFBfTE9PUEVEX0lORElDQVRPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfUkxEUF9SRUxFQVNFRF9JTkRJQ0FUT1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1NZU1RFTV9MRUFSTl9PVkVSX0lORElDQVRPUn07CisKKyAgICBpZih0eXBlID49IElOVFJTVF9FTkQgKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnKGluZGljYXRvckFkZHJlc3NbdHlwZV0sIHN0YXR1cyk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljSW50ZXJydXB0UmVsYXRlZFN0YXR1cworICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBpbnRlcnJ1cHQgc3RhdHVzCisgKiBJbnB1dDoKKyAqICAgICAgdHlwZSAgICAtIHBlciBwb3J0IExlYXJuIG92ZXIsIHBlci1wb3J0IHNwZWVkIGNoYW5nZSwgcGVyLXBvcnQgc3BlY2lhbCBjb25nZXN0LCBzaGFyZSBtZXRlciBleGNlZWQgc3RhdHVzCisgKiAgICAgIHBTdGF0dXMgICAgIC0gZXhjZWVkIHN0YXR1cywgd3JpdGUgMSB0byBjbGVhcgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgLSBpbnB1dCBwYXJhbWV0ZXIgb3V0IG9mIHJhbmdlCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNJbnRlcnJ1cHRSZWxhdGVkU3RhdHVzKHJ0a191aW50MzIgdHlwZSwgcnRrX3VpbnQzMiogcFN0YXR1cykKK3sKKyAgICBDT05TVCBydGtfdWludDMyIGluZGljYXRvckFkZHJlc3NbSU5UUlNUX0VORF0gPSB7UlRMODM2N0NfUkVHX0xFQVJOX09WRVJfSU5ESUNBVE9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19TUEVFRF9DSEFOR0VfSU5ESUNBVE9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19TUEVDSUFMX0NPTkdFU1RfSU5ESUNBVE9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19QT1JUX0xJTktET1dOX0lORElDQVRPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19SRUdfUE9SVF9MSU5LVVBfSU5ESUNBVE9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19NRVRFUl9PVkVSUkFURV9JTkRJQ0FUT1IwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19NRVRFUl9PVkVSUkFURV9JTkRJQ0FUT1IxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19STERQX0xPT1BFRF9JTkRJQ0FUT1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMODM2N0NfUkVHX1JMRFBfUkVMRUFTRURfSU5ESUNBVE9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTDgzNjdDX1JFR19TWVNURU1fTEVBUk5fT1ZFUl9JTkRJQ0FUT1J9OworCisgICAgaWYodHlwZSA+PSBJTlRSU1RfRU5EICkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZyhpbmRpY2F0b3JBZGRyZXNzW3R5cGVdLCBwU3RhdHVzKTsKK30KKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfbGVkLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9sZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTg5MDI4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfbGVkLmMKQEAgLTAsMCArMSw3MjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogJFJldmlzaW9uOiA3NjMwNiAkCisgKiAkRGF0ZTogMjAxNy0wMy0wOCAxNToxMzo1OCArMDgwMCAo6YCx5LiJLCAwOCDkuInmnIggMjAxNykgJAorICoKKyAqIFB1cnBvc2UgOiBSVEw4MzY3QyBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkgZm9yIFJUTDgzNjdDCisgKiBGZWF0dXJlIDogTEVEIHJlbGF0ZWQgZnVuY3Rpb25zCisgKgorICovCisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl9sZWQuaD4KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNMZWRJbmRpY2F0ZUluZm9Db25maWcKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgTGVkcyBpbmRpY2F0ZWQgaW5mb3JtYXRpb24gbW9kZQorICogSW5wdXQ6CisgKiAgICAgIGxlZG5vICAgLSBMRUQgZ3JvdXAgbnVtYmVyLiBUaGVyZSBhcmUgMSB0byAxIGxlZCBtYXBwaW5nIHRvIGVhY2ggcG9ydCBpbiBlYWNoIGxlZCBncm91cAorICogICAgICBjb25maWcgIC0gU3VwcG9ydCAxNiB0eXBlcyBjb25maWd1cmF0aW9uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAtIGlucHV0IHBhcmFtZXRlciBvdXQgb2YgcmFuZ2UKKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIHNldCBMRUQgaW5kaWNhdGVkIGluZm9ybWF0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIGVhY2ggTEVEIGdyb3VwIHdpdGggMSB0byAxIGxlZCBtYXBwaW5nIHRvIGVhY2ggcG9ydC4KKyAqICAgICAgRGVmaW5pdGlvbiAgICAgICAgTEVEIFN0YXR1c2VzICAgICAgICAgICAgRGVzY3JpcHRpb24KKyAqICAgICAgMDAwMCAgICAgICAgTEVEX09mZiAgICAgICAgICAgICAgICBMRUQgcGluIFRyaS1TdGF0ZS4KKyAqICAgICAgMDAwMSAgICAgICAgRHVwL0NvbCAgICAgICAgICAgICAgICBDb2xsaXNpb24sIEZ1bGwgZHVwbGV4IEluZGljYXRvci4gQmxpbmtpbmcgZXZlcnkgNDNtcyB3aGVuIGNvbGxpc2lvbiBoYXBwZW5zLiBMb3cgZm9yIGZ1bGwgZHVwbGV4LCBhbmQgaGlnaCBmb3IgaGFsZiBkdXBsZXggbW9kZS4KKyAqICAgICAgMDAxMCAgICAgICAgTGluay9BY3QgICAgICAgICAgICAgICBMaW5rLCBBY3Rpdml0eSBJbmRpY2F0b3IuIExvdyBmb3IgbGluayBlc3RhYmxpc2hlZC4gTGluay9BY3QgQmxpbmtzIGV2ZXJ5IDQzbXMgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBwb3J0IGlzIHRyYW5zbWl0dGluZyBvciByZWNlaXZpbmcuCisgKiAgICAgIDAwMTEgICAgICAgIFNwZDEwMDAgICAgICAgICAgICAgICAgMTAwME1iL3MgU3BlZWQgSW5kaWNhdG9yLiBMb3cgZm9yIDEwMDBNYi9zLgorICogICAgICAwMTAwICAgICAgICBTcGQxMDAgICAgICAgICAgICAgICAgIDEwME1iL3MgU3BlZWQgSW5kaWNhdG9yLiBMb3cgZm9yIDEwME1iL3MuCisgKiAgICAgIDAxMDEgICAgICAgIFNwZDEwICAgICAgICAgICAgICAgICAgMTBNYi9zIFNwZWVkIEluZGljYXRvci4gTG93IGZvciAxME1iL3MuCisgKiAgICAgIDAxMTAgICAgICAgIFNwZDEwMDAvQWN0ICAgICAgICAgICAgMTAwME1iL3MgU3BlZWQvQWN0aXZpdHkgSW5kaWNhdG9yLiBMb3cgZm9yIDEwMDBNYi9zLiBCbGlua3MgZXZlcnkgNDNtcyB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIHBvcnQgaXMgdHJhbnNtaXR0aW5nIG9yIHJlY2VpdmluZy4KKyAqICAgICAgMDExMSAgICAgICAgU3BkMTAwL0FjdCAgICAgICAgICAgICAxMDBNYi9zIFNwZWVkL0FjdGl2aXR5IEluZGljYXRvci4gTG93IGZvciAxMDBNYi9zLiBCbGlua3MgZXZlcnkgNDNtcyB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIHBvcnQgaXMgdHJhbnNtaXR0aW5nIG9yIHJlY2VpdmluZy4KKyAqICAgICAgMTAwMCAgICAgICAgU3BkMTAvQWN0ICAgICAgICAgICAgICAxME1iL3MgU3BlZWQvQWN0aXZpdHkgSW5kaWNhdG9yLiBMb3cgZm9yIDEwTWIvcy4gQmxpbmtzIGV2ZXJ5IDQzbXMgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBwb3J0IGlzIHRyYW5zbWl0dGluZyBvciByZWNlaXZpbmcuCisgKiAgICAgIDEwMDEgICAgICAgIFNwZDEwMCAoMTApL0FjdCAgICAgICAgMTAvMTAwTWIvcyBTcGVlZC9BY3Rpdml0eSBJbmRpY2F0b3IuIExvdyBmb3IgMTAvMTAwTWIvcy4gQmxpbmtzIGV2ZXJ5IDQzbXMgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBwb3J0IGlzIHRyYW5zbWl0dGluZyBvciByZWNlaXZpbmcuCisgKiAgICAgIDEwMTAgICAgICAgIEZpYmVyICAgICAgICAgICAgICAgICAgRmliZXIgbGluayBJbmRpY2F0b3IuIExvdyBmb3IgRmliZXIuCisgKiAgICAgIDEwMTEgICAgICAgIEZhdWx0ICAgICAgICAgICAgICAgICAgQXV0by1uZWdvdGlhdGlvbiAgICAgRmF1bHQgSW5kaWNhdG9yLiBMb3cgZm9yIEZhdWx0LgorICogICAgICAxMTAwICAgICAgICBMaW5rL1J4ICAgICAgICAgICAgICAgIExpbmssIEFjdGl2aXR5IEluZGljYXRvci4gTG93IGZvciBsaW5rIGVzdGFibGlzaGVkLiBMaW5rL1J4IEJsaW5rcyBldmVyeSA0M21zIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgcG9ydCBpcyB0cmFuc21pdHRpbmcuCisgKiAgICAgIDExMDEgICAgICAgIExpbmsvVHggICAgICAgICAgICAgICAgTGluaywgQWN0aXZpdHkgSW5kaWNhdG9yLiBMb3cgZm9yIGxpbmsgZXN0YWJsaXNoZWQuIExpbmsvVHggQmxpbmtzIGV2ZXJ5IDQzbXMgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBwb3J0IGlzIHJlY2VpdmluZy4KKyAqICAgICAgMTExMCAgICAgICAgTWFzdGVyICAgICAgICAgICAgICAgICBMaW5rIG9uIE1hc3RlciBJbmRpY2F0b3IuIExvdyBmb3IgbGluayBNYXN0ZXIgZXN0YWJsaXNoZWQuCisgKiAgICAgIDExMTEgICAgICAgIExFRF9Gb3JjZSAgICAgICAgICAgICAgRm9yY2UgTEVEIG91dHB1dCwgTEVEIG91dHB1dCB2YWx1ZSByZWZlcmVuY2UKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0xlZEluZGljYXRlSW5mb0NvbmZpZyhydGtfdWludDMyIGxlZG5vLCBydGtfdWludDMyIGNvbmZpZykKK3sKKyAgICByZXRfdCAgIHJldFZhbDsKKyAgICBDT05TVCBydGtfdWludDE2IGJpdHNbUlRMODM2N0NfTEVER1JPVVBOT10gPSB7UlRMODM2N0NfTEVEMF9DRkdfTUFTSywgUlRMODM2N0NfTEVEMV9DRkdfTUFTSywgUlRMODM2N0NfTEVEMl9DRkdfTUFTS307CisKKyAgICBpZihsZWRubyA+PSBSVEw4MzY3Q19MRURHUk9VUE5PKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIGlmKGNvbmZpZyA+PSBMRURDT05GX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19MRURfQ09ORklHVVJBVElPTiwgUlRMODM2N0NfTEVEX0NPTkZJR19TRUxfT0ZGU0VULCAwKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19MRURfQ09ORklHVVJBVElPTiwgYml0c1tsZWRub10sIGNvbmZpZyk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljTGVkSW5kaWNhdGVJbmZvQ29uZmlnCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IExlZHMgaW5kaWNhdGVkIGluZm9ybWF0aW9uIG1vZGUKKyAqIElucHV0OgorICogICAgICBsZWRubyAgIC0gTEVEIGdyb3VwIG51bWJlci4gVGhlcmUgYXJlIDEgdG8gMSBsZWQgbWFwcGluZyB0byBlYWNoIHBvcnQgaW4gZWFjaCBsZWQgZ3JvdXAKKyAqICAgICAgcENvbmZpZyAgICAgLSBTdXBwb3J0IDE2IHR5cGVzIGNvbmZpZ3VyYXRpb24KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gaW5wdXQgcGFyYW1ldGVyIG91dCBvZiByYW5nZQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljTGVkSW5kaWNhdGVJbmZvQ29uZmlnKHJ0a191aW50MzIgbGVkbm8sIHJ0a191aW50MzIqIHBDb25maWcpCit7CisgICAgQ09OU1QgcnRrX3VpbnQxNiBiaXRzW1JUTDgzNjdDX0xFREdST1VQTk9dPSB7UlRMODM2N0NfTEVEMF9DRkdfTUFTSywgUlRMODM2N0NfTEVEMV9DRkdfTUFTSywgUlRMODM2N0NfTEVEMl9DRkdfTUFTS307CisKKyAgICBpZihsZWRubyA+PSBSVEw4MzY3Q19MRURHUk9VUE5PKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIC8qIEdldCByZWdpc3RlciB2YWx1ZSAqLworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfTEVEX0NPTkZJR1VSQVRJT04sIGJpdHNbbGVkbm9dLCBwQ29uZmlnKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNMZWRHcm91cE1vZGUKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgTGVkIEdyb3VwIG1vZGUKKyAqIElucHV0OgorICogICAgICBtb2RlICAgIC0gTEVEIG1vZGUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gaW5wdXQgcGFyYW1ldGVyIG91dCBvZiByYW5nZQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljTGVkR3JvdXBNb2RlKHJ0a191aW50MzIgbW9kZSkKK3sKKyAgICByZXRfdCByZXRWYWw7CisKKyAgICAvKiBJbnZhbGlkIGlucHV0IHBhcmFtZXRlciAqLworICAgIGlmKG1vZGUgPj0gUlRMODM2N0NfTEVEX01PREVfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0xFRF9DT05GSUdVUkFUSU9OLCBSVEw4MzY3Q19MRURfQ09ORklHX1NFTF9PRkZTRVQsIDEpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0xFRF9DT05GSUdVUkFUSU9OLCBSVEw4MzY3Q19EQVRBX0xFRF9NQVNLLCBtb2RlKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNMZWRHcm91cE1vZGUKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgTGVkIEdyb3VwIG1vZGUKKyAqIElucHV0OgorICogICAgICBwTW9kZSAgIC0gTEVEIG1vZGUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNMZWRHcm91cE1vZGUocnRrX3VpbnQzMiogcE1vZGUpCit7CisgICAgcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcmVnRGF0YTsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0xFRF9DT05GSUdVUkFUSU9OLCBSVEw4MzY3Q19MRURfQ09ORklHX1NFTF9PRkZTRVQsICZyZWdEYXRhKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYocmVnRGF0YSE9MSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9GQUlMRUQ7CisKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0xFRF9DT05GSUdVUkFUSU9OLCBSVEw4MzY3Q19EQVRBX0xFRF9NQVNLLCBwTW9kZSk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljRm9yY2VMZWRzCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IGdyb3VwIExFRCBtb2RlCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjcpCisgKiAgICAgIGdyb3VwICAgLSBMRUQgZ3JvdXAgbnVtYmVyCisgKiAgICAgIG1vZGUgICAgLSBMRUQgbW9kZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgLSBpbnB1dCBwYXJhbWV0ZXIgb3V0IG9mIHJhbmdlCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNGb3JjZUxlZChydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgZ3JvdXAsIHJ0a191aW50MzIgbW9kZSkKK3sKKyAgICBydGtfdWludDE2IHJlZ0FkZHI7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgLyogSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIgKi8KKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVElETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICBpZihncm91cCA+PSBSVEw4MzY3Q19MRURHUk9VUE5PKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIGlmKG1vZGUgPj0gTEVERk9SQ0VNT0RFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisgICAgLyogU2V0IFJlbGF0ZWQgUmVnaXN0ZXJzICovCisgICAgaWYocG9ydCA8IDgpeworICAgICAgICByZWdBZGRyID0gUlRMODM2N0NfTEVEX0ZPUkNFX01PREVfQkFTRSArIChncm91cCA8PCAxKTsKKyAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKHJlZ0FkZHIsIDB4MyA8PCAocG9ydCAqIDIpLCBtb2RlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9ZWxzZSBpZihwb3J0ID49IDgpeworICAgICAgICByZWdBZGRyID0gUlRMODM2N0NfUkVHX0NQVV9GT1JDRV9MRUQwX0NGRzEgKyAoZ3JvdXAgPDwgMSk7CisgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhyZWdBZGRyLCAweDMgPDwgKChwb3J0LTgpICogMiksIG1vZGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljRm9yY2VMZWQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgZ3JvdXAgTEVEIG1vZGUKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgZ3JvdXAgICAtIExFRCBncm91cCBudW1iZXIKKyAqICAgICAgcE1vZGUgICAtIExFRCBtb2RlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAtIGlucHV0IHBhcmFtZXRlciBvdXQgb2YgcmFuZ2UKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0ZvcmNlTGVkKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBncm91cCwgcnRrX3VpbnQzMiogcE1vZGUpCit7CisgICAgcnRrX3VpbnQxNiByZWdBZGRyOworICAgIHJldF90IHJldFZhbDsKKworICAgIC8qIEludmFsaWQgaW5wdXQgcGFyYW1ldGVyICovCisgICAgaWYocG9ydCA+IFJUTDgzNjdDX1BPUlRJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgaWYoZ3JvdXAgPj0gUlRMODM2N0NfTEVER1JPVVBOTykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIC8qIEdldCBSZWxhdGVkIFJlZ2lzdGVycyAqLworICAgIGlmKHBvcnQgPCA4KXsKKyAgICAgICAgcmVnQWRkciA9IFJUTDgzNjdDX0xFRF9GT1JDRV9NT0RFX0JBU0UgKyAoZ3JvdXAgPDwgMSk7CisgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhyZWdBZGRyLCAweDMgPDwgKHBvcnQgKiAyKSwgcE1vZGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH1lbHNlIGlmKHBvcnQgPj0gOCl7CisgICAgICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19SRUdfQ1BVX0ZPUkNFX0xFRDBfQ0ZHMSArIChncm91cCA8PCAxKTsKKyAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKHJlZ0FkZHIsIDB4MyA8PCAoKHBvcnQtOCkgKiAyKSwgcE1vZGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljRm9yY2VHcm91cExlZAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFR1cm4gb24vb2ZmIExlZCBvZiBhbGwgcG9ydHMKKyAqIElucHV0OgorICogICAgICBncm91cCAgIC0gTEVEIGdyb3VwIG51bWJlcgorICogICAgICBtb2RlICAgIC0gMGIwMDpub3JtYWwgbW9kZSwgMGIwMTpmb3JjZSBibGluaywgMGIxMDpmb3JjZSBvZmYsIDBiMTE6Zm9yY2Ugb24KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gaW5wdXQgcGFyYW1ldGVyIG91dCBvZiByYW5nZQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljRm9yY2VHcm91cExlZChydGtfdWludDMyIGdyb3VwbWFzaywgcnRrX3VpbnQzMiBtb2RlKQoreworICAgIHJldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIGksYml0bWFzazsKKyAgICBDT05TVCBydGtfdWludDE2IGJpdHNbM109IHsweDAwMDQsMHgwMDEwLDB4MDA0MH07CisKKyAgICAvKiBJbnZhbGlkIGlucHV0IHBhcmFtZXRlciAqLworICAgIGlmKGdyb3VwbWFzayA+IFJUTDgzNjdDX0xFREdST1VQTUFTSykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICBpZihtb2RlID49IExFREZPUkNFTU9ERV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgYml0bWFzayA9IDA7CisgICAgZm9yKGkgPSAwOyBpIDwgIFJUTDgzNjdDX0xFREdST1VQTk87IGkrKykKKyAgICB7CisgICAgICAgIGlmKGdyb3VwbWFzayAmICgxIDw8IGkpKQorICAgICAgICB7CisgICAgICAgICAgICBiaXRtYXNrID0gYml0bWFzayB8IGJpdHNbaV07CisgICAgICAgIH0KKworICAgIH0KKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX0xFRF9GT1JDRV9DVFJMLCBSVEw4MzY3Q19MRURfRk9SQ0VfTU9ERV9NQVNLLCBiaXRtYXNrKTsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX0xFRF9GT1JDRV9DVFJMLCBSVEw4MzY3Q19GT1JDRV9NT0RFX01BU0ssIG1vZGUpOworCisgICAgaWYoTEVERk9SQ0VNT0RFX05PUk1BTCA9PSBtb2RlKQorICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19MRURfRk9SQ0VfQ1RSTCwgUlRMODM2N0NfTEVEX0ZPUkNFX01PREVfTUFTSywgMCk7CisKKyAgICByZXR1cm4gcmV0VmFsOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0ZvcmNlR3JvdXBMZWQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBUdXJuIG9uL29mZiBMZWQgb2YgYWxsIHBvcnRzCisgKiBJbnB1dDoKKyAqICAgICAgZ3JvdXAgICAtIExFRCBncm91cCBudW1iZXIKKyAqICAgICAgcE1vZGUgICAtIDBiMDA6bm9ybWFsIG1vZGUsIDBiMDE6Zm9yY2UgYmxpbmssIDBiMTA6Zm9yY2Ugb2ZmLCAwYjExOmZvcmNlIG9uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0ZvcmNlR3JvdXBMZWQocnRrX3VpbnQzMiogZ3JvdXBtYXNrLCBydGtfdWludDMyKiBwTW9kZSkKK3sKKyAgICByZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBpLHJlZ0RhdGE7CisgICAgQ09OU1QgcnRrX3VpbnQxNiBiaXRzWzNdID0gezB4MDAwNCwweDAwMTAsMHgwMDQwfTsKKworICAgIC8qIEdldCBSZWxhdGVkIFJlZ2lzdGVycyAqLworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19MRURfRk9SQ0VfQ1RSTCwgUlRMODM2N0NfTEVEX0ZPUkNFX01PREVfTUFTSywgJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBmb3IoaSA9IDA7IGk8IFJUTDgzNjdDX0xFREdST1VQTk87IGkrKykKKyAgICB7CisgICAgICAgIGlmKChyZWdEYXRhICYgYml0c1tpXSkgPT0gYml0c1tpXSkKKyAgICAgICAgeworICAgICAgICAgICAgKmdyb3VwbWFzayA9ICpncm91cG1hc2sgfCAoMSA8PCBpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19MRURfRk9SQ0VfQ1RSTCwgUlRMODM2N0NfRk9SQ0VfTU9ERV9NQVNLLCBwTW9kZSk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljTGVkQmxpbmtSYXRlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IGxlZCBibGlua2luZyByYXRlIGF0IG1vZGUgMCB0byBtb2RlIDMKKyAqIElucHV0OgorICogICAgICBibGlua1JhdGUgICAtIFN1cHBvcnQgNiBibGluayByYXRlcworICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgLSBpbnB1dCBwYXJhbWV0ZXIgb3V0IG9mIHJhbmdlCisgKiBOb3RlOgorICogICAgICBMRUQgYmxpbmsgcmF0ZSBjYW4gYmUgYXQgNDNtcywgODRtcywgMTIwbXMsIDE3MG1zLCAzNDBtcyBhbmQgNjcwbXMKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0xlZEJsaW5rUmF0ZShydGtfdWludDMyIGJsaW5rUmF0ZSkKK3sKKyAgICBpZihibGlua1JhdGUgPj0gTEVEQkxJTktSQVRFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0xFRF9NT0RFLCBSVEw4MzY3Q19TRUxfTEVEUkFURV9NQVNLLCBibGlua1JhdGUpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0xlZEJsaW5rUmF0ZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBsZWQgYmxpbmtpbmcgcmF0ZSBhdCBtb2RlIDAgdG8gbW9kZSAzCisgKiBJbnB1dDoKKyAqICAgICAgcEJsaW5rUmF0ZSAgLSBTdXBwb3J0IDYgYmxpbmsgcmF0ZXMKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljTGVkQmxpbmtSYXRlKHJ0a191aW50MzIqIHBCbGlua1JhdGUpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19MRURfTU9ERSwgUlRMODM2N0NfU0VMX0xFRFJBVEVfTUFTSywgcEJsaW5rUmF0ZSk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljTGVkRm9yY2VCbGlua1JhdGUKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgTEVkIGJsaW5raW5nIHJhdGUgZm9yIGZvcmNlIG1vZGUgbGVkCisgKiBJbnB1dDoKKyAqICAgICAgYmxpbmtSYXRlICAgLSBTdXBwb3J0IDYgYmxpbmsgcmF0ZXMKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gaW5wdXQgcGFyYW1ldGVyIG91dCBvZiByYW5nZQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljTGVkRm9yY2VCbGlua1JhdGUocnRrX3VpbnQzMiBibGlua1JhdGUpCit7CisgICAgaWYoYmxpbmtSYXRlID49IExFREZPUkNFUkFURV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19MRURfTU9ERSwgUlRMODM2N0NfRk9SQ0VfUkFURV9NQVNLLCBibGlua1JhdGUpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0xlZEZvcmNlQmxpbmtSYXRlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IExFRCBibGlua2luZyByYXRlIGZvciBmb3JjZSBtb2RlIGxlZAorICogSW5wdXQ6CisgKiAgICAgIHBCbGlua1JhdGUgIC0gU3VwcG9ydCA2IGJsaW5rIHJhdGVzCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0xlZEZvcmNlQmxpbmtSYXRlKHJ0a191aW50MzIqIHBCbGlua1JhdGUpCit7CisgICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfTEVEX01PREUsIFJUTDgzNjdDX0ZPUkNFX1JBVEVfTUFTSywgcEJsaW5rUmF0ZSk7Cit9CisKKy8qCitAZnVuYyByZXRfdCB8IHJ0bDgzNjdjX3NldEFzaWNMZWRHcm91cEVuYWJsZSB8IFR1cm4gb24vb2ZmIExlZCBvZiBhbGwgc3lzdGVtIHBvcnRzCitAcGFybSBydGtfdWludDMyIHwgZ3JvdXAgfCBMRUQgZ3JvdXAgaWQuCitAcGFybSBydGtfdWludDMyIHwgcG9ydG1hc2sgfCBMRUQgcG9ydCBtYXNrLgorQHJ2YWx1ZSBSVF9FUlJfT0sgfCBTdWNjZXNzLgorQHJ2YWx1ZSBSVF9FUlJfU01JIHwgU01JIGFjY2VzcyBlcnJvci4KK0BydmFsdWUgUlRfRVJSX1BPUlRfSUQgfCBJbnZhbGlkIHBvcnQgbnVtYmVyLgorQHJ2YWx1ZSBSVF9FUlJfSU5QVVQgfCBJbnZhbGlkIGlucHV0IHZhbHVlLgorQGNvbW0KKyAgICBUaGUgQVBJIGNhbiB0dXJuIG9uL29mZiBsZWRzIG9mIGRlZGljYXRlZCBwb3J0IHdoaWxlIGluZGljYXRlZCBpbmZvcm1hdGlvbiBjb25maWd1cmF0aW9uIG9mIExFRCBncm91cCBpcyBzZXQgdG8gZm9yY2UgbW9kZS4KKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0xlZEdyb3VwRW5hYmxlKHJ0a191aW50MzIgZ3JvdXAsIHJ0a191aW50MzIgcG9ydG1hc2spCit7CisgICAgcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcmVnQWRkcjsKKyAgICBydGtfdWludDMyIHJlZ0RhdGFNYXNrOworCisgICAgaWYgKCBncm91cCA+PSBSVEw4MzY3Q19MRURHUk9VUE5PICkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19SRUdfUEFSQV9MRURfSU9fRU4xICsgZ3JvdXAvMjsKKyAgICByZWdEYXRhTWFzayA9IDB4RkYgPDwgKChncm91cCUyKSo4KTsKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhyZWdBZGRyLCByZWdEYXRhTWFzaywgcG9ydG1hc2smMHhmZik7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19SRUdfUEFSQV9MRURfSU9fRU4zOworICAgIHJlZ0RhdGFNYXNrID0gMHgzIDw8IChncm91cCoyKTsKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhyZWdBZGRyLCByZWdEYXRhTWFzaywgKHBvcnRtYXNrPj44KSYweDcpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qCitAZnVuYyByZXRfdCB8IHJ0bDgzNjdjX2dldEFzaWNMZWRHcm91cEVuYWJsZSB8IEdldCBvbi9vZmYgc3RhdHVzIG9mIExlZCBvZiBhbGwgc3lzdGVtIHBvcnRzCitAcGFybSBydGtfdWludDMyIHwgZ3JvdXAgfCBMRUQgZ3JvdXAgaWQuCitAcGFybSBydGtfdWludDMyIHwgKnBvcnRtYXNrIHwgTEVEIHBvcnQgbWFzay4KK0BydmFsdWUgUlRfRVJSX09LIHwgU3VjY2Vzcy4KK0BydmFsdWUgUlRfRVJSX1NNSSB8IFNNSSBhY2Nlc3MgZXJyb3IuCitAcnZhbHVlIFJUX0VSUl9QT1JUX0lEIHwgSW52YWxpZCBwb3J0IG51bWJlci4KK0BydmFsdWUgUlRfRVJSX0lOUFVUIHwgSW52YWxpZCBpbnB1dCB2YWx1ZS4KK0Bjb21tCisgICAgVGhlIEFQSSBjYW4gdHVybiBvbi9vZmYgbGVkcyBvZiBkZWRpY2F0ZWQgcG9ydCB3aGlsZSBpbmRpY2F0ZWQgaW5mb3JtYXRpb24gY29uZmlndXJhdGlvbiBvZiBMRUQgZ3JvdXAgaXMgc2V0IHRvIGZvcmNlIG1vZGUuCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNMZWRHcm91cEVuYWJsZShydGtfdWludDMyIGdyb3VwLCBydGtfdWludDMyICpwb3J0bWFzaykKK3sKKyAgICByZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiByZWdBZGRyOworICAgIHJ0a191aW50MzIgcmVnRGF0YU1hc2sscmVnRGF0YTsKKworICAgIGlmICggZ3JvdXAgPj0gUlRMODM2N0NfTEVER1JPVVBOTyApCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICByZWdBZGRyID0gUlRMODM2N0NfUkVHX1BBUkFfTEVEX0lPX0VOMSArIGdyb3VwLzI7CisgICAgcmVnRGF0YU1hc2sgPSAweEZGIDw8ICgoZ3JvdXAlMikqOCk7CisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMocmVnQWRkciwgcmVnRGF0YU1hc2ssIHBvcnRtYXNrKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisKKyAgICByZWdBZGRyID0gUlRMODM2N0NfUkVHX1BBUkFfTEVEX0lPX0VOMzsKKyAgICByZWdEYXRhTWFzayA9IDB4MyA8PCAoZ3JvdXAqMik7CisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMocmVnQWRkciwgcmVnRGF0YU1hc2ssICZyZWdEYXRhKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgKnBvcnRtYXNrID0gKHJlZ0RhdGEgPDwgOCkgfCAqcG9ydG1hc2s7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKgorQGZ1bmMgcmV0X3QgfCBydGw4MzY3Y19zZXRBc2ljTGVkT3BlcmF0aW9uTW9kZSB8IFNldCBMRUQgb3BlcmF0aW9uIG1vZGUKK0BwYXJtIHJ0a191aW50MzIgfCBtb2RlIHwgTEVEIG1vZGUuIDE6c2NhbiBtb2RlIDEsIDI6cGFyYWxsZWwgbW9kZSwgMzptZHggbW9kZSAoc2VyaWFsIG1vZGUpCitAcnZhbHVlIFJUX0VSUl9PSyB8IFN1Y2Nlc3MuCitAcnZhbHVlIFJUX0VSUl9TTUkgfCBTTUkgYWNjZXNzIGVycm9yLgorQHJ2YWx1ZSBSVF9FUlJfSU5QVVQgfCBJbnZhbGlkIGlucHV0IHZhbHVlLgorQGNvbW0KKyAgICBUaGUgQVBJIGNhbiB0dXJuIG9uL29mZiBsZWQgc2VyaWFsIG1vZGUgYW5kIHNldCBzaWduYWwgdG8gYWN0aXZlIGhpZ2gvbG93LgorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljTGVkT3BlcmF0aW9uTW9kZShydGtfdWludDMyIG1vZGUpCit7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgLyogSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIgKi8KKyAgICBpZiggbW9kZSA+PSBMRURPUF9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBzd2l0Y2gobW9kZSkKKyAgICB7CisgICAgICAgIGNhc2UgTEVET1BfUEFSQUxMRUw6CisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfTEVEX1NZU19DT05GSUcsIFJUTDgzNjdDX0xFRF9TRUxFQ1RfT0ZGU0VULCAwKSkhPSAgUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAvKkRpc2FibGUgc2VyaWFsIENMSyBtb2RlKi8KKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19TQ0FOMF9MRURfSU9fRU4xLFJUTDgzNjdDX0xFRF9TRVJJX0NMS19FTl9PRkZTRVQsIDApKSE9ICBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIC8qRGlzYWJsZSBzZXJpYWwgREFUQSBtb2RlKi8KKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19TQ0FOMF9MRURfSU9fRU4xLFJUTDgzNjdDX0xFRF9TRVJJX0RBVEFfRU5fT0ZGU0VULCAwKSkhPSAgUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMRURPUF9TRVJJQUw6CisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfTEVEX1NZU19DT05GSUcsIFJUTDgzNjdDX0xFRF9TRUxFQ1RfT0ZGU0VULCAxKSkhPSAgUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAvKkVuYWJsZSBzZXJpYWwgQ0xLIG1vZGUqLworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1NDQU4wX0xFRF9JT19FTjEsUlRMODM2N0NfTEVEX1NFUklfQ0xLX0VOX09GRlNFVCwgMSkpIT0gIFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgLypFbmFibGUgc2VyaWFsIERBVEEgbW9kZSovCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfU0NBTjBfTEVEX0lPX0VOMSxSVEw4MzY3Q19MRURfU0VSSV9EQVRBX0VOX09GRlNFVCwgMSkpIT0gIFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworCisvKgorQGZ1bmMgcmV0X3QgfCBydGw4MzY3Y19nZXRBc2ljTGVkT3BlcmF0aW9uTW9kZSB8IEdldCBMRUQgT1AgbW9kZSBzZXR1cAorQHBhcm0gcnRrX3VpbnQzMip8IG1vZGUgfCBMRUQgbW9kZS4gMTpzY2FuIG1vZGUgMSwgMjpwYXJhbGxlbCBtb2RlLCAzOm1keCBtb2RlIChzZXJpYWwgbW9kZSkKK0BydmFsdWUgUlRfRVJSX09LIHwgU3VjY2Vzcy4KK0BydmFsdWUgUlRfRVJSX1NNSSB8IFNNSSBhY2Nlc3MgZXJyb3IuCitAcnZhbHVlIFJUX0VSUl9JTlBVVCB8IEludmFsaWQgaW5wdXQgdmFsdWUuCitAY29tbQorICAgIFRoZSBBUEkgY2FuIGdldCBMRUQgc2VyaWFsIG1vZGUgc2V0dXAgYW5kIGdldCBzaWduYWwgYWN0aXZlIGhpZ2gvbG93LgorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljTGVkT3BlcmF0aW9uTW9kZShydGtfdWludDMyICptb2RlKQoreworICAgIHJldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHJlZ0RhdGE7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfTEVEX1NZU19DT05GSUcsIFJUTDgzNjdDX0xFRF9TRUxFQ1RfT0ZGU0VULCAmcmVnRGF0YSkpIT0gIFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmIChyZWdEYXRhID09IDEpCisgICAgICAgICptb2RlID0gTEVET1BfU0VSSUFMOworICAgIGVsc2UgaWYgKHJlZ0RhdGEgPT0gMCkKKyAgICAgICAgKm1vZGUgPSBMRURPUF9QQVJBTExFTDsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBSVF9FUlJfRkFJTEVEOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyoKK0BmdW5jIHJldF90IHwgcnRsODM2N2Nfc2V0QXNpY0xlZFNlcmlhbE1vZGVDb25maWcgfCBTZXQgTEVEIHNlcmlhbCBtb2RlCitAcGFybSBydGtfdWludDMyIHwgYWN0aXZlIHwgQWN0aXZlIEhpZ2ggb3IgTG93LgorQHJ2YWx1ZSBSVF9FUlJfT0sgfCBTdWNjZXNzLgorQHJ2YWx1ZSBSVF9FUlJfU01JIHwgU01JIGFjY2VzcyBlcnJvci4KK0BydmFsdWUgUlRfRVJSX0lOUFVUIHwgSW52YWxpZCBpbnB1dCB2YWx1ZS4KK0Bjb21tCisgICAgVGhlIEFQSSBjYW4gdHVybiBvbi9vZmYgbGVkIHNlcmlhbCBtb2RlIGFuZCBzZXQgc2lnbmFsIHRvIGFjdGl2ZSBoaWdoL2xvdy4KKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0xlZFNlcmlhbE1vZGVDb25maWcocnRrX3VpbnQzMiBhY3RpdmUsIHJ0a191aW50MzIgc2VyaW1vZGUpCit7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgLyogSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIgKi8KKyAgICBpZiggYWN0aXZlID49IExFRFNFUkFDVF9NQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisgICAgaWYoIHNlcmltb2RlID49IExFRFNFUl9NQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICAvKiBTZXQgQWN0aXZlIEhpZ2ggb3IgTG93ICovCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0xFRF9TWVNfQ09ORklHLCBSVEw4MzY3Q19TRVJJX0xFRF9BQ1RfTE9XX09GRlNFVCwgYWN0aXZlKSkgIT0gIFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIC8qc2V0IHRvIDhHIG1vZGUgKG5vdCAxNkcgbW9kZSkqLworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19MRURfTU9ERSwgUlRMODM2N0NfRExJTktfVElNRV9PRkZTRVQsIHNlcmltb2RlKSkhPSAgUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisKKy8qCitAZnVuYyByZXRfdCB8IHJ0bDgzNjdjX2dldEFzaWNMZWRTZXJpYWxNb2RlQ29uZmlnIHwgR2V0IExFRCBzZXJpYWwgbW9kZSBzZXR1cAorQHBhcm0gcnRrX3VpbnQzMip8IGFjdGl2ZSB8IEFjdGl2ZSBIaWdoIG9yIExvdy4KK0BydmFsdWUgUlRfRVJSX09LIHwgU3VjY2Vzcy4KK0BydmFsdWUgUlRfRVJSX1NNSSB8IFNNSSBhY2Nlc3MgZXJyb3IuCitAcnZhbHVlIFJUX0VSUl9JTlBVVCB8IEludmFsaWQgaW5wdXQgdmFsdWUuCitAY29tbQorICAgIFRoZSBBUEkgY2FuIGdldCBMRUQgc2VyaWFsIG1vZGUgc2V0dXAgYW5kIGdldCBzaWduYWwgYWN0aXZlIGhpZ2gvbG93LgorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljTGVkU2VyaWFsTW9kZUNvbmZpZyhydGtfdWludDMyICphY3RpdmUsIHJ0a191aW50MzIgKnNlcmltb2RlKQoreworICAgIHJldF90IHJldFZhbDsKKworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19MRURfU1lTX0NPTkZJRywgUlRMODM2N0NfU0VSSV9MRURfQUNUX0xPV19PRkZTRVQsIGFjdGl2ZSkpIT0gIFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIC8qZ2V0IHRvIDhHIG1vZGUgKG5vdCAxNkcgbW9kZSkqLworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19MRURfTU9ERSwgUlRMODM2N0NfRExJTktfVElNRV9PRkZTRVQsIHNlcmltb2RlKSkhPSAgUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworCisvKgorQGZ1bmMgcmV0X3QgfCBydGw4MzY3Y19zZXRBc2ljTGVkT3V0cHV0RW5hYmxlIHwgU2V0IExFRCBvdXRwdXQgZW5hYmxlCitAcGFybSBydGtfdWludDMyIHwgZW5hYmxlZCB8IGVuYWJsZSBvciBkaXNhbGJlLgorQHJ2YWx1ZSBSVF9FUlJfT0sgfCBTdWNjZXNzLgorQHJ2YWx1ZSBSVF9FUlJfU01JIHwgU01JIGFjY2VzcyBlcnJvci4KK0BydmFsdWUgUlRfRVJSX0lOUFVUIHwgSW52YWxpZCBpbnB1dCB2YWx1ZS4KK0Bjb21tCisgICAgVGhlIEFQSSBjYW4gdHVybiBvbi9vZmYgTEVEIG91dHB1dCBFbmFibGUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0xlZE91dHB1dEVuYWJsZShydGtfdWludDMyIGVuYWJsZWQpCit7CisgICAgcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcmVnZGF0YTsKKworICAgIGlmIChlbmFibGVkID09IDEpCisgICAgICAgIHJlZ2RhdGEgPSAwOworICAgIGVsc2UKKyAgICAgICAgcmVnZGF0YSA9IDE7CisKKyAgICAvKiBFbmFibGUvRGlzYWJsZSBIL1cgSUdNUC9NTEQgKi8KKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19MRURfU1lTX0NPTkZJRywgUlRMODM2N0NfTEVEX0lPX0RJU0FCTEVfT0ZGU0VULCByZWdkYXRhKTsKKworICAgIHJldHVybiByZXRWYWw7Cit9CisKKworLyoKK0BmdW5jIHJldF90IHwgcnRsODM2N2NfZ2V0QXNpY0xlZE91dHB1dEVuYWJsZSB8IEdldCBMRUQgc2VyaWFsIG1vZGUgc2V0dXAKK0BwYXJtIHJ0a191aW50MzIqfCBhY3RpdmUgfCBBY3RpdmUgSGlnaCBvciBMb3cuCitAcnZhbHVlIFJUX0VSUl9PSyB8IFN1Y2Nlc3MuCitAcnZhbHVlIFJUX0VSUl9TTUkgfCBTTUkgYWNjZXNzIGVycm9yLgorQHJ2YWx1ZSBSVF9FUlJfSU5QVVQgfCBJbnZhbGlkIGlucHV0IHZhbHVlLgorQGNvbW0KKyAgICBUaGUgQVBJIGNhbiBnZXQgTEVEIHNlcmlhbCBtb2RlIHNldHVwIGFuZCBnZXQgc2lnbmFsIGFjdGl2ZSBoaWdoL2xvdy4KKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0xlZE91dHB1dEVuYWJsZShydGtfdWludDMyICpwdHJfZW5hYmxlZCkKK3sKKyAgICByZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiByZWdkYXRhOworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfTEVEX1NZU19DT05GSUcsIFJUTDgzNjdDX0xFRF9JT19ESVNBQkxFX09GRlNFVCwgJnJlZ2RhdGEpOworICAgIGlmIChyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKHJlZ2RhdGEgPT0gMSkKKyAgICAgICAgKnB0cl9lbmFibGVkID0gMDsKKyAgICBlbHNlCisgICAgICAgICpwdHJfZW5hYmxlZCA9IDE7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljTGVkU2VyaWFsT3V0cHV0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHNlcmlhbCBMRUQgb3V0cHV0IGdyb3VwIGFuZCBwb3J0bWFzay4KKyAqIElucHV0OgorICogICAgICBvdXRwdXQgICAgICAtIFNlcmlhbCBMRUQgb3V0cHV0IGdyb3VwCisgKiAgICAgIHBtYXNrICAgICAgIC0gU2VyaWFsIExFRCBvdXRwdXQgcG9ydG1hc2sKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gaW5wdXQgcGFyYW1ldGVyIG91dCBvZiByYW5nZQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljTGVkU2VyaWFsT3V0cHV0KHJ0a191aW50MzIgb3V0cHV0LCBydGtfdWludDMyIHBtYXNrKQoreworICAgIHJldF90IHJldFZhbDsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19TRVJJQUxfTEVEX0NUUkwsIFJUTDgzNjdDX1NFUklBTF9MRURfR1JPVVBfTlVNX01BU0ssIG91dHB1dCk7CisgICAgaWYgKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfU0VSSUFMX0xFRF9DVFJMLCBSVEw4MzY3Q19TRVJJQUxfTEVEX1BPUlRfRU5fTUFTSywgcG1hc2spOworICAgIGlmIChyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0xlZFNlcmlhbE91dHB1dAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBzZXJpYWwgTEVEIG91dHB1dCBncm91cCBhbmQgcG9ydG1hc2suCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwT3V0cHV0ICAgICAgLSBTZXJpYWwgTEVEIG91dHB1dCBncm91cAorICogICAgICBwUG1hc2sgICAgICAgLSBTZXJpYWwgTEVEIG91dHB1dCBwb3J0bWFzaworICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gaW5wdXQgcGFyYW1ldGVyIG91dCBvZiByYW5nZQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljTGVkU2VyaWFsT3V0cHV0KHJ0a191aW50MzIgKnBPdXRwdXQsIHJ0a191aW50MzIgKnBQbWFzaykKK3sKKyAgICByZXRfdCByZXRWYWw7CisKKyAgICBpZihwT3V0cHV0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYocFBtYXNrID09IE5VTEwpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1NFUklBTF9MRURfQ1RSTCwgUlRMODM2N0NfU0VSSUFMX0xFRF9HUk9VUF9OVU1fTUFTSywgcE91dHB1dCk7CisgICAgaWYgKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfU0VSSUFMX0xFRF9DVFJMLCBSVEw4MzY3Q19TRVJJQUxfTEVEX1BPUlRfRU5fTUFTSywgcFBtYXNrKTsKKyAgICBpZiAocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X2x1dC5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfbHV0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQzYTZmMQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X2x1dC5jCkBAIC0wLDAgKzEsMTU0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiAkUmV2aXNpb246IDc2MzA2ICQKKyAqICREYXRlOiAyMDE3LTAzLTA4IDE1OjEzOjU4ICswODAwICjpgLHkuIksIDA4IOS4ieaciCAyMDE3KSAkCisgKgorICogUHVycG9zZSA6IFJUTDgzNjdDIHN3aXRjaCBoaWdoLWxldmVsIEFQSSBmb3IgUlRMODM2N0MKKyAqIEZlYXR1cmUgOiBMVVQgcmVsYXRlZCBmdW5jdGlvbnMKKyAqCisgKi8KKworI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnZfbHV0Lmg+CisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworc3RhdGljIHZvaWQgX3J0bDgzNjdjX2ZkYlN0VXNlcjJTbWkoIHJ0bDgzNjdjX2x1dHRiICpwTHV0U3QsIHJ0a191aW50MTYgKnBGZGJTbWkpCit7CisgICAgLyogTDMgbG9va3VwICovCisgICAgaWYocEx1dFN0LT5sM2xvb2t1cCkKKyAgICB7CisgICAgICAgIGlmKHBMdXRTdC0+bDN2aWRsb29rdXApCisgICAgICAgIHsKKyAgICAgICAgICAgIHBGZGJTbWlbMF0gPSAocEx1dFN0LT5zaXAgJiAweDAwMDBGRkZGKTsKKyAgICAgICAgICAgIHBGZGJTbWlbMV0gPSAocEx1dFN0LT5zaXAgJiAweEZGRkYwMDAwKSA+PiAxNjsKKworICAgICAgICAgICAgcEZkYlNtaVsyXSA9IChwTHV0U3QtPmRpcCAmIDB4MDAwMEZGRkYpOworICAgICAgICAgICAgcEZkYlNtaVszXSA9IChwTHV0U3QtPmRpcCAmIDB4MEZGRjAwMDApID4+IDE2OworCisgICAgICAgICAgICBwRmRiU21pWzNdIHw9IChwTHV0U3QtPmwzbG9va3VwICYgMHgwMDAxKSA8PCAxMjsKKyAgICAgICAgICAgIHBGZGJTbWlbM10gfD0gKHBMdXRTdC0+bDN2aWRsb29rdXAgJiAweDAwMDEpIDw8IDEzOworICAgICAgICAgICAgcEZkYlNtaVszXSB8PSAoKHBMdXRTdC0+bWJyICYgMHgwMzAwKSA+PiA4KSA8PCAxNDsKKworICAgICAgICAgICAgcEZkYlNtaVs0XSB8PSAocEx1dFN0LT5tYnIgJiAweDAwRkYpOworICAgICAgICAgICAgcEZkYlNtaVs0XSB8PSAocEx1dFN0LT5sM192aWQgJiAweDAwRkYpIDw8IDg7CisKKyAgICAgICAgICAgIHBGZGJTbWlbNV0gfD0gKChwTHV0U3QtPmwzX3ZpZCAmIDB4MEYwMCkgPj4gOCk7CisgICAgICAgICAgICBwRmRiU21pWzVdIHw9IChwTHV0U3QtPm5vc2FsZWFybiAmIDB4MDAwMSkgPDwgNTsKKyAgICAgICAgICAgIHBGZGJTbWlbNV0gfD0gKChwTHV0U3QtPm1iciAmIDB4MDQwMCkgPj4gMTApIDw8IDc7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwRmRiU21pWzBdID0gKHBMdXRTdC0+c2lwICYgMHgwMDAwRkZGRik7CisgICAgICAgICAgICBwRmRiU21pWzFdID0gKHBMdXRTdC0+c2lwICYgMHhGRkZGMDAwMCkgPj4gMTY7CisKKyAgICAgICAgICAgIHBGZGJTbWlbMl0gPSAocEx1dFN0LT5kaXAgJiAweDAwMDBGRkZGKTsKKyAgICAgICAgICAgIHBGZGJTbWlbM10gPSAocEx1dFN0LT5kaXAgJiAweDBGRkYwMDAwKSA+PiAxNjsKKworICAgICAgICAgICAgcEZkYlNtaVszXSB8PSAocEx1dFN0LT5sM2xvb2t1cCAmIDB4MDAwMSkgPDwgMTI7CisgICAgICAgICAgICBwRmRiU21pWzNdIHw9IChwTHV0U3QtPmwzdmlkbG9va3VwICYgMHgwMDAxKSA8PCAxMzsKKyAgICAgICAgICAgIHBGZGJTbWlbM10gfD0gKChwTHV0U3QtPm1iciAmIDB4MDMwMCkgPj4gOCkgPDwgMTQ7CisKKyAgICAgICAgICAgIHBGZGJTbWlbNF0gfD0gKHBMdXRTdC0+bWJyICYgMHgwMEZGKTsKKyAgICAgICAgICAgIHBGZGJTbWlbNF0gfD0gKHBMdXRTdC0+aWdtcGlkeCAmIDB4MDBGRikgPDwgODsKKworICAgICAgICAgICAgcEZkYlNtaVs1XSB8PSAocEx1dFN0LT5pZ21wX2FzaWMgJiAweDAwMDEpOworICAgICAgICAgICAgcEZkYlNtaVs1XSB8PSAocEx1dFN0LT5sdXRfcHJpICYgMHgwMDA3KSA8PCAxOworICAgICAgICAgICAgcEZkYlNtaVs1XSB8PSAocEx1dFN0LT5md2RfZW4gJiAweDAwMDEpIDw8IDQ7CisgICAgICAgICAgICBwRmRiU21pWzVdIHw9IChwTHV0U3QtPm5vc2FsZWFybiAmIDB4MDAwMSkgPDwgNTsKKyAgICAgICAgICAgIHBGZGJTbWlbNV0gfD0gKChwTHV0U3QtPm1iciAmIDB4MDQwMCkgPj4gMTApIDw8IDc7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZihwTHV0U3QtPm1hYy5vY3RldFswXSAmIDB4MDEpIC8qTXVsdGljYXN0IEwyIExvb2t1cCovCisgICAgeworICAgICAgICBwRmRiU21pWzBdIHw9IHBMdXRTdC0+bWFjLm9jdGV0WzVdOworICAgICAgICBwRmRiU21pWzBdIHw9IHBMdXRTdC0+bWFjLm9jdGV0WzRdIDw8IDg7CisKKyAgICAgICAgcEZkYlNtaVsxXSB8PSBwTHV0U3QtPm1hYy5vY3RldFszXTsKKyAgICAgICAgcEZkYlNtaVsxXSB8PSBwTHV0U3QtPm1hYy5vY3RldFsyXSA8PCA4OworCisgICAgICAgIHBGZGJTbWlbMl0gfD0gcEx1dFN0LT5tYWMub2N0ZXRbMV07CisgICAgICAgIHBGZGJTbWlbMl0gfD0gcEx1dFN0LT5tYWMub2N0ZXRbMF0gPDwgODsKKworICAgICAgICBwRmRiU21pWzNdIHw9IHBMdXRTdC0+Y3ZpZF9maWQ7CisgICAgICAgIHBGZGJTbWlbM10gfD0gKHBMdXRTdC0+bDNsb29rdXAgJiAweDAwMDEpIDw8IDEyOworICAgICAgICBwRmRiU21pWzNdIHw9IChwTHV0U3QtPml2bF9zdmwgJiAweDAwMDEpIDw8IDEzOworICAgICAgICBwRmRiU21pWzNdIHw9ICgocEx1dFN0LT5tYnIgJiAweDAzMDApID4+IDgpIDw8IDE0OworCisgICAgICAgIHBGZGJTbWlbNF0gfD0gKHBMdXRTdC0+bWJyICYgMHgwMEZGKTsKKyAgICAgICAgcEZkYlNtaVs0XSB8PSAocEx1dFN0LT5pZ21waWR4ICYgMHgwMEZGKSA8PCA4OworCisgICAgICAgIHBGZGJTbWlbNV0gfD0gcEx1dFN0LT5pZ21wX2FzaWM7CisgICAgICAgIHBGZGJTbWlbNV0gfD0gKHBMdXRTdC0+bHV0X3ByaSAmIDB4MDAwNykgPDwgMTsKKyAgICAgICAgcEZkYlNtaVs1XSB8PSAocEx1dFN0LT5md2RfZW4gJiAweDAwMDEpIDw8IDQ7CisgICAgICAgIHBGZGJTbWlbNV0gfD0gKHBMdXRTdC0+bm9zYWxlYXJuICYgMHgwMDAxKSA8PCA1OworICAgICAgICBwRmRiU21pWzVdIHw9ICgocEx1dFN0LT5tYnIgJiAweDA0MDApID4+IDEwKSA8PCA3OworICAgIH0KKyAgICBlbHNlIC8qQXNpYyBhdXRvLWxlYXJuaW5nKi8KKyAgICB7CisgICAgICAgIHBGZGJTbWlbMF0gfD0gcEx1dFN0LT5tYWMub2N0ZXRbNV07CisgICAgICAgIHBGZGJTbWlbMF0gfD0gcEx1dFN0LT5tYWMub2N0ZXRbNF0gPDwgODsKKworICAgICAgICBwRmRiU21pWzFdIHw9IHBMdXRTdC0+bWFjLm9jdGV0WzNdOworICAgICAgICBwRmRiU21pWzFdIHw9IHBMdXRTdC0+bWFjLm9jdGV0WzJdIDw8IDg7CisKKyAgICAgICAgcEZkYlNtaVsyXSB8PSBwTHV0U3QtPm1hYy5vY3RldFsxXTsKKyAgICAgICAgcEZkYlNtaVsyXSB8PSBwTHV0U3QtPm1hYy5vY3RldFswXSA8PCA4OworCisgICAgICAgIHBGZGJTbWlbM10gfD0gcEx1dFN0LT5jdmlkX2ZpZDsKKyAgICAgICAgcEZkYlNtaVszXSB8PSAocEx1dFN0LT5sM2xvb2t1cCAmIDB4MDAwMSkgPDwgMTI7CisgICAgICAgIHBGZGJTbWlbM10gfD0gKHBMdXRTdC0+aXZsX3N2bCAmIDB4MDAwMSkgPDwgMTM7CisgICAgICAgIHBGZGJTbWlbM10gfD0gKChwTHV0U3QtPnNwYSAmIDB4MDAwOCkgPj4gMykgPDwgMTU7CisKKyAgICAgICAgcEZkYlNtaVs0XSB8PSBwTHV0U3QtPmVmaWQ7CisgICAgICAgIHBGZGJTbWlbNF0gfD0gKHBMdXRTdC0+ZmlkICYgMHgwMDBGKSA8PCAzOworICAgICAgICBwRmRiU21pWzRdIHw9IChwTHV0U3QtPnNhX2VuICYgMHgwMDAxKSA8PCA3OworICAgICAgICBwRmRiU21pWzRdIHw9IChwTHV0U3QtPnNwYSAmIDB4MDAwNykgPDwgODsKKyAgICAgICAgcEZkYlNtaVs0XSB8PSAocEx1dFN0LT5hZ2UgJiAweDAwMDcpIDw8IDExOworICAgICAgICBwRmRiU21pWzRdIHw9IChwTHV0U3QtPmF1dGggJiAweDAwMDEpIDw8IDE0OworICAgICAgICBwRmRiU21pWzRdIHw9IChwTHV0U3QtPnNhX2Jsb2NrICYgMHgwMDAxKSA8PCAxNTsKKworICAgICAgICBwRmRiU21pWzVdIHw9IHBMdXRTdC0+ZGFfYmxvY2s7CisgICAgICAgIHBGZGJTbWlbNV0gfD0gKHBMdXRTdC0+bHV0X3ByaSAmIDB4MDAwNykgPDwgMTsKKyAgICAgICAgcEZkYlNtaVs1XSB8PSAocEx1dFN0LT5md2RfZW4gJiAweDAwMDEpIDw8IDQ7CisgICAgICAgIHBGZGJTbWlbNV0gfD0gKHBMdXRTdC0+bm9zYWxlYXJuICYgMHgwMDAxKSA8PCA1OworICAgIH0KK30KKworCitzdGF0aWMgdm9pZCBfcnRsODM2N2NfZmRiU3RTbWkyVXNlciggcnRsODM2N2NfbHV0dGIgKnBMdXRTdCwgcnRrX3VpbnQxNiAqcEZkYlNtaSkKK3sKKyAgICAvKkwzIGxvb2t1cCovCisgICAgaWYocEZkYlNtaVszXSAmIDB4MTAwMCkKKyAgICB7CisgICAgICAgIGlmKHBGZGJTbWlbM10gJiAweDIwMDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHBMdXRTdC0+c2lwICAgICAgICAgICAgID0gcEZkYlNtaVswXSB8IChwRmRiU21pWzFdIDw8IDE2KTsKKyAgICAgICAgICAgIHBMdXRTdC0+ZGlwICAgICAgICAgICAgID0gcEZkYlNtaVsyXSB8ICgocEZkYlNtaVszXSAmIDB4MEZGRikgPDwgMTYpOworCisgICAgICAgICAgICBwTHV0U3QtPm1iciAgICAgICAgICAgICA9IChwRmRiU21pWzRdICYgMHgwMEZGKSB8ICgoKHBGZGJTbWlbM10gJiAweEMwMDApID4+IDE0KSA8PCA4KSB8ICgoKHBGZGJTbWlbNV0gJiAweDAwODApID4+IDcpIDw8IDEwKTsKKyAgICAgICAgICAgIHBMdXRTdC0+bDNfdmlkICAgICAgICAgID0gKChwRmRiU21pWzRdICYgMHhGRjAwKSA+PiA4KSB8IChwRmRiU21pWzVdICYgMHgwMDBGKTsKKworICAgICAgICAgICAgcEx1dFN0LT5sM2xvb2t1cCAgICAgICAgPSAocEZkYlNtaVszXSAmIDB4MTAwMCkgPj4gMTI7CisgICAgICAgICAgICBwTHV0U3QtPmwzdmlkbG9va3VwICAgICA9IChwRmRiU21pWzNdICYgMHgyMDAwKSA+PiAxMzsKKyAgICAgICAgICAgIHBMdXRTdC0+bm9zYWxlYXJuICAgICAgID0gKHBGZGJTbWlbNV0gJiAweDAwMjApID4+IDU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwTHV0U3QtPnNpcCAgICAgICAgICAgICA9IHBGZGJTbWlbMF0gfCAocEZkYlNtaVsxXSA8PCAxNik7CisgICAgICAgICAgICBwTHV0U3QtPmRpcCAgICAgICAgICAgICA9IHBGZGJTbWlbMl0gfCAoKHBGZGJTbWlbM10gJiAweDBGRkYpIDw8IDE2KTsKKworICAgICAgICAgICAgcEx1dFN0LT5sdXRfcHJpICAgICAgICAgPSAocEZkYlNtaVs1XSAmIDB4MDAwRSkgPj4gMTsKKyAgICAgICAgICAgIHBMdXRTdC0+ZndkX2VuICAgICAgICAgID0gKHBGZGJTbWlbNV0gJiAweDAwMTApID4+IDQ7CisKKyAgICAgICAgICAgIHBMdXRTdC0+bWJyICAgICAgICAgICAgID0gKHBGZGJTbWlbNF0gJiAweDAwRkYpIHwgKCgocEZkYlNtaVszXSAmIDB4QzAwMCkgPj4gMTQpIDw8IDgpIHwgKCgocEZkYlNtaVs1XSAmIDB4MDA4MCkgPj4gNykgPDwgMTApOworICAgICAgICAgICAgcEx1dFN0LT5pZ21waWR4ICAgICAgICAgPSAocEZkYlNtaVs0XSAmIDB4RkYwMCkgPj4gODsKKworICAgICAgICAgICAgcEx1dFN0LT5pZ21wX2FzaWMgICAgICAgPSAocEZkYlNtaVs1XSAmIDB4MDAwMSk7CisgICAgICAgICAgICBwTHV0U3QtPmwzbG9va3VwICAgICAgICA9IChwRmRiU21pWzNdICYgMHgxMDAwKSA+PiAxMjsKKyAgICAgICAgICAgIHBMdXRTdC0+bm9zYWxlYXJuICAgICAgID0gKHBGZGJTbWlbNV0gJiAweDAwMjApID4+IDU7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZihwRmRiU21pWzJdICYgMHgwMTAwKSAvKk11bHRpY2FzdCBMMiBMb29rdXAqLworICAgIHsKKyAgICAgICAgcEx1dFN0LT5tYWMub2N0ZXRbMF0gICAgPSAocEZkYlNtaVsyXSAmIDB4RkYwMCkgPj4gODsKKyAgICAgICAgcEx1dFN0LT5tYWMub2N0ZXRbMV0gICAgPSAocEZkYlNtaVsyXSAmIDB4MDBGRik7CisgICAgICAgIHBMdXRTdC0+bWFjLm9jdGV0WzJdICAgID0gKHBGZGJTbWlbMV0gJiAweEZGMDApID4+IDg7CisgICAgICAgIHBMdXRTdC0+bWFjLm9jdGV0WzNdICAgID0gKHBGZGJTbWlbMV0gJiAweDAwRkYpOworICAgICAgICBwTHV0U3QtPm1hYy5vY3RldFs0XSAgICA9IChwRmRiU21pWzBdICYgMHhGRjAwKSA+PiA4OworICAgICAgICBwTHV0U3QtPm1hYy5vY3RldFs1XSAgICA9IChwRmRiU21pWzBdICYgMHgwMEZGKTsKKworICAgICAgICBwTHV0U3QtPmN2aWRfZmlkICAgICAgICA9IHBGZGJTbWlbM10gJiAweDBGRkY7CisgICAgICAgIHBMdXRTdC0+bHV0X3ByaSAgICAgICAgID0gKHBGZGJTbWlbNV0gJiAweDAwMEUpID4+IDE7CisgICAgICAgIHBMdXRTdC0+ZndkX2VuICAgICAgICAgID0gKHBGZGJTbWlbNV0gJiAweDAwMTApID4+IDQ7CisKKyAgICAgICAgcEx1dFN0LT5tYnIgICAgICAgICAgICAgPSAocEZkYlNtaVs0XSAmIDB4MDBGRikgfCAoKChwRmRiU21pWzNdICYgMHhDMDAwKSA+PiAxNCkgPDwgOCkgfCAoKChwRmRiU21pWzVdICYgMHgwMDgwKSA+PiA3KSA8PCAxMCk7CisgICAgICAgIHBMdXRTdC0+aWdtcGlkeCAgICAgICAgID0gKHBGZGJTbWlbNF0gJiAweEZGMDApID4+IDg7CisKKyAgICAgICAgcEx1dFN0LT5pZ21wX2FzaWMgICAgICAgPSAocEZkYlNtaVs1XSAmIDB4MDAwMSk7CisgICAgICAgIHBMdXRTdC0+bDNsb29rdXAgICAgICAgID0gKHBGZGJTbWlbM10gJiAweDEwMDApID4+IDEyOworICAgICAgICBwTHV0U3QtPml2bF9zdmwgICAgICAgICA9IChwRmRiU21pWzNdICYgMHgyMDAwKSA+PiAxMzsKKyAgICAgICAgcEx1dFN0LT5ub3NhbGVhcm4gICAgICAgPSAocEZkYlNtaVs1XSAmIDB4MDAyMCkgPj4gNTsKKyAgICB9CisgICAgZWxzZSAvKkFzaWMgYXV0by1sZWFybmluZyovCisgICAgeworICAgICAgICBwTHV0U3QtPm1hYy5vY3RldFswXSAgICA9IChwRmRiU21pWzJdICYgMHhGRjAwKSA+PiA4OworICAgICAgICBwTHV0U3QtPm1hYy5vY3RldFsxXSAgICA9IChwRmRiU21pWzJdICYgMHgwMEZGKTsKKyAgICAgICAgcEx1dFN0LT5tYWMub2N0ZXRbMl0gICAgPSAocEZkYlNtaVsxXSAmIDB4RkYwMCkgPj4gODsKKyAgICAgICAgcEx1dFN0LT5tYWMub2N0ZXRbM10gICAgPSAocEZkYlNtaVsxXSAmIDB4MDBGRik7CisgICAgICAgIHBMdXRTdC0+bWFjLm9jdGV0WzRdICAgID0gKHBGZGJTbWlbMF0gJiAweEZGMDApID4+IDg7CisgICAgICAgIHBMdXRTdC0+bWFjLm9jdGV0WzVdICAgID0gKHBGZGJTbWlbMF0gJiAweDAwRkYpOworCisgICAgICAgIHBMdXRTdC0+Y3ZpZF9maWQgICAgICAgID0gcEZkYlNtaVszXSAmIDB4MEZGRjsKKyAgICAgICAgcEx1dFN0LT5sdXRfcHJpICAgICAgICAgPSAocEZkYlNtaVs1XSAmIDB4MDAwRSkgPj4gMTsKKyAgICAgICAgcEx1dFN0LT5md2RfZW4gICAgICAgICAgPSAocEZkYlNtaVs1XSAmIDB4MDAxMCkgPj4gNDsKKworICAgICAgICBwTHV0U3QtPnNhX2VuICAgICAgICAgICA9IChwRmRiU21pWzRdICYgMHgwMDgwKSA+PiA3OworICAgICAgICBwTHV0U3QtPmF1dGggICAgICAgICAgICA9IChwRmRiU21pWzRdICYgMHg0MDAwKSA+PiAxNDsKKyAgICAgICAgcEx1dFN0LT5zcGEgICAgICAgICAgICAgPSAoKHBGZGJTbWlbNF0gJiAweDA3MDApID4+IDgpIHwgKCgocEZkYlNtaVszXSAmIDB4ODAwMCkgPj4gMTUpIDw8IDMpOworICAgICAgICBwTHV0U3QtPmFnZSAgICAgICAgICAgICA9IChwRmRiU21pWzRdICYgMHgzODAwKSA+PiAxMTsKKyAgICAgICAgcEx1dFN0LT5maWQgICAgICAgICAgICAgPSAocEZkYlNtaVs0XSAmIDB4MDA3OCkgPj4gMzsKKyAgICAgICAgcEx1dFN0LT5lZmlkICAgICAgICAgICAgPSAocEZkYlNtaVs0XSAmIDB4MDAwNyk7CisgICAgICAgIHBMdXRTdC0+c2FfYmxvY2sgICAgICAgID0gKHBGZGJTbWlbNF0gJiAweDgwMDApID4+IDE1OworCisgICAgICAgIHBMdXRTdC0+ZGFfYmxvY2sgICAgICAgID0gKHBGZGJTbWlbNV0gJiAweDAwMDEpOworICAgICAgICBwTHV0U3QtPmwzbG9va3VwICAgICAgICA9IChwRmRiU21pWzNdICYgMHgxMDAwKSA+PiAxMjsKKyAgICAgICAgcEx1dFN0LT5pdmxfc3ZsICAgICAgICAgPSAocEZkYlNtaVszXSAmIDB4MjAwMCkgPj4gMTM7CisgICAgICAgIHBMdXRTdC0+bm9zYWxlYXJuICAgICAgID0gKHBGZGJTbWlbM10gJiAweDAwMjApID4+IDU7CisgICAgfQorfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljTHV0SXBNdWx0aWNhc3RMb29rdXAKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgTHV0IElQIG11bHRpY2FzdCBsb29rdXAgZnVuY3Rpb24KKyAqIElucHV0OgorICogICAgICBlbmFibGVkIC0gMTogZW5hYmxlZCwgMDogZGlzYWJsZWQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNMdXRJcE11bHRpY2FzdExvb2t1cChydGtfdWludDMyIGVuYWJsZWQpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0xVVF9DRkcsIFJUTDgzNjdDX0xVVF9JUE1DX0hBU0hfT0ZGU0VULCBlbmFibGVkKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNMdXRJcE11bHRpY2FzdExvb2t1cAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBMdXQgSVAgbXVsdGljYXN0IGxvb2t1cCBmdW5jdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHBFbmFibGVkIC0gMTogZW5hYmxlZCwgMDogZGlzYWJsZWQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNMdXRJcE11bHRpY2FzdExvb2t1cChydGtfdWludDMyKiBwRW5hYmxlZCkKK3sKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfTFVUX0NGRywgUlRMODM2N0NfTFVUX0lQTUNfSEFTSF9PRkZTRVQsIHBFbmFibGVkKTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0x1dElwTXVsdGljYXN0TG9va3VwCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IEx1dCBJUCBtdWx0aWNhc3QgKyBWSUQgbG9va3VwIGZ1bmN0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgZW5hYmxlZCAtIDE6IGVuYWJsZWQsIDA6IGRpc2FibGVkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljTHV0SXBNdWx0aWNhc3RWaWRMb29rdXAocnRrX3VpbnQzMiBlbmFibGVkKQoreworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19MVVRfQ0ZHMiwgUlRMODM2N0NfTFVUX0lQTUNfVklEX0hBU0hfT0ZGU0VULCBlbmFibGVkKTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0x1dElwTXVsdGljYXN0VmlkTG9va3VwCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IEx1dCBJUCBtdWx0aWNhc3QgbG9va3VwIGZ1bmN0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgcEVuYWJsZWQgLSAxOiBlbmFibGVkLCAwOiBkaXNhYmxlZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0x1dElwTXVsdGljYXN0VmlkTG9va3VwKHJ0a191aW50MzIqIHBFbmFibGVkKQoreworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19MVVRfQ0ZHMiwgUlRMODM2N0NfTFVUX0lQTUNfVklEX0hBU0hfT0ZGU0VULCBwRW5hYmxlZCk7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNMdXRJcExvb2t1cE1ldGhvZAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBMdXQgSVAgbG9va3VwIGhhc2ggd2l0aCBESVAgb3Ige0RJUCxTSVB9IHBhaXIKKyAqIElucHV0OgorICogICAgICB0eXBlIC0gMTogV2hlbiBESVAgY2FuIGJlIGZvdW5kIGluIElQTUNfR1JPVVBfVEFCTEUsIHVzZSBESVArU0lQIEhhc2gsIG90aGVyd2lzZSwgdXNlIERJUCsoU0lQPTAuMC4wLjApIEhhc2guCisgKiAgICAgICAgICAgICAwOiBXaGVuIERJUCBjYW4gYmUgZm91bmQgaW4gSVBNQ19HUk9VUF9UQUJMRSwgdXNlIERJUCsoU0lQPTAuMC4wLjApIEhhc2gsIG90aGVyd2lzZSB1c2UgRElQK1NJUCBIYXNoLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0x1dElwTG9va3VwTWV0aG9kKHJ0a191aW50MzIgdHlwZSkKK3sKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfTFVUX0NGRywgUlRMODM2N0NfTFVUX0lQTUNfTE9PS1VQX09QX09GRlNFVCwgdHlwZSk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljTHV0SXBMb29rdXBNZXRob2QKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgTHV0IElQIGxvb2t1cCBoYXNoIHdpdGggRElQIG9yIHtESVAsU0lQfSBwYWlyCisgKiBJbnB1dDoKKyAqICAgICAgcFR5cGUgLSAxOiBXaGVuIERJUCBjYW4gYmUgZm91bmQgaW4gSVBNQ19HUk9VUF9UQUJMRSwgdXNlIERJUCtTSVAgSGFzaCwgb3RoZXJ3aXNlLCB1c2UgRElQKyhTSVA9MC4wLjAuMCkgSGFzaC4KKyAqICAgICAgICAgICAgICAwOiBXaGVuIERJUCBjYW4gYmUgZm91bmQgaW4gSVBNQ19HUk9VUF9UQUJMRSwgdXNlIERJUCsoU0lQPTAuMC4wLjApIEhhc2gsIG90aGVyd2lzZSB1c2UgRElQK1NJUCBIYXNoLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0x1dElwTG9va3VwTWV0aG9kKHJ0a191aW50MzIqIHBUeXBlKQoreworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19MVVRfQ0ZHLCBSVEw4MzY3Q19MVVRfSVBNQ19MT09LVVBfT1BfT0ZGU0VULCBwVHlwZSk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljTHV0QWdlVGltZXJTcGVlZAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBMVVQgYWdnaW5nIG91dCBzcGVlZAorICogSW5wdXQ6CisgKiAgICAgIHRpbWVyIC0gQWdnaW5nIG91dCB0aW1lciAwOkhhcyBiZWVuIGFnZWQgb3V0CisgKiAgICAgIHNwZWVkIC0gQWdnaW5nIG91dCBzcGVlZCAwLWZhc3Rlc3QgMy1zbG93ZXN0CisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAtIGlucHV0IHBhcmFtZXRlciBvdXQgb2YgcmFuZ2UKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0x1dEFnZVRpbWVyU3BlZWQocnRrX3VpbnQzMiB0aW1lciwgcnRrX3VpbnQzMiBzcGVlZCkKK3sKKyAgICBpZih0aW1lcj5SVEw4MzY3Q19MVVRfQUdFVElNRVJNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgaWYoc3BlZWQgPlJUTDgzNjdDX0xVVF9BR0VTUEVFRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0xVVF9DRkcsIFJUTDgzNjdDX0FHRV9USU1FUl9NQVNLIHwgUlRMODM2N0NfQUdFX1NQRUVEX01BU0ssICh0aW1lciA8PCBSVEw4MzY3Q19BR0VfVElNRVJfT0ZGU0VUKSB8IChzcGVlZCA8PCBSVEw4MzY3Q19BR0VfU1BFRURfT0ZGU0VUKSk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljTHV0QWdlVGltZXJTcGVlZAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBMVVQgYWdnaW5nIG91dCBzcGVlZAorICogSW5wdXQ6CisgKiAgICAgIHBUaW1lciAtIEFnZ2luZyBvdXQgdGltZXIgMDpIYXMgYmVlbiBhZ2VkIG91dAorICogICAgICBwU3BlZWQgLSBBZ2dpbmcgb3V0IHNwZWVkIDAtZmFzdGVzdCAzLXNsb3dlc3QKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gaW5wdXQgcGFyYW1ldGVyIG91dCBvZiByYW5nZQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljTHV0QWdlVGltZXJTcGVlZChydGtfdWludDMyKiBwVGltZXIsIHJ0a191aW50MzIqIHBTcGVlZCkKK3sKKyAgICBydGtfdWludDMyIHJlZ0RhdGE7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfTFVUX0NGRywgJnJlZ0RhdGEpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAqcFRpbWVyID0gIChyZWdEYXRhICYgUlRMODM2N0NfQUdFX1RJTUVSX01BU0spID4+IFJUTDgzNjdDX0FHRV9USU1FUl9PRkZTRVQ7CisKKyAgICAqcFNwZWVkID0gIChyZWdEYXRhICYgUlRMODM2N0NfQUdFX1NQRUVEX01BU0spID4+IFJUTDgzNjdDX0FHRV9TUEVFRF9PRkZTRVQ7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworCit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljTHV0Q2FtVGJVc2FnZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIENvbmZpZ3VyZSBMdXQgQ0FNIHRhYmxlIHVzYWdlCisgKiBJbnB1dDoKKyAqICAgICAgZW5hYmxlZCAtIEwyIENBTSB0YWJsZSB1c2FnZSAxOiBlbmFibGVkLCAwOiBkaXNhYmxlZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0x1dENhbVRiVXNhZ2UocnRrX3VpbnQzMiBlbmFibGVkKQoreworICAgIHJldF90IHJldFZhbDsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0xVVF9DRkcsIFJUTDgzNjdDX0JDQU1fRElTQUJMRV9PRkZTRVQsIGVuYWJsZWQgPyAwIDogMSk7CisKKyAgICByZXR1cm4gcmV0VmFsOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0x1dENhbVRiVXNhZ2UKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgTHV0IENBTSB0YWJsZSB1c2FnZQorICogSW5wdXQ6CisgKiAgICAgIHBFbmFibGVkIC0gTDIgQ0FNIHRhYmxlIHVzYWdlIDE6IGVuYWJsZWQsIDA6IGRpc2FibGVkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljTHV0Q2FtVGJVc2FnZShydGtfdWludDMyKiBwRW5hYmxlZCkKK3sKKyAgICByZXRfdCAgICAgICByZXRWYWw7CisgICAgcnRrX3VpbnQzMiAgcmVnRGF0YTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfTFVUX0NGRywgUlRMODM2N0NfQkNBTV9ESVNBQkxFX09GRlNFVCwgJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAqcEVuYWJsZWQgPSByZWdEYXRhID8gMCA6IDE7CisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNMdXRMZWFybkxpbWl0Tm8KKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgcGVyLVBvcnQgYXV0byBsZWFybmluZyBsaW1pdCBudW1iZXIKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgbnVtYmVyICAtIEFTSUMgYXV0byBsZWFybmluZyBlbnRyaWVzIGxpbWl0IG51bWJlcgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiAgICAgIFJUX0VSUl9MSU1JVEVEX0wyRU5UUllfTlVNICAtIEludmFsaWQgYXV0byBsZWFybmluZyBsaW1pdCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworICAgLyrQ3rjEOiBSVEw4MzY3Q19QT1JUSURNQVgsIFJUTDgzNjdDX0xVVF9MRUFSTkxJTUlUTUFYLCBSVEw4MzY3Q19MVVRfUE9SVF9MRUFSTl9MSU1JVE5PX1JFRyovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljTHV0TGVhcm5MaW1pdE5vKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBudW1iZXIpCit7CisgICAgaWYocG9ydCA+IFJUTDgzNjdDX1BPUlRJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgaWYobnVtYmVyID4gUlRMODM2N0NfTFVUX0xFQVJOTElNSVRNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfTElNSVRFRF9MMkVOVFJZX05VTTsKKworICAgIGlmKHBvcnQgPCA4KQorICAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19MVVRfUE9SVF9MRUFSTl9MSU1JVE5PX1JFRyhwb3J0KSwgbnVtYmVyKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19MVVRfUE9SVDhfTEVBUk5fTElNSVROTytwb3J0LTgsIG51bWJlcik7CisKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNMdXRMZWFybkxpbWl0Tm8KKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcGVyLVBvcnQgYXV0byBsZWFybmluZyBsaW1pdCBudW1iZXIKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgcE51bWJlciAgICAgLSBBU0lDIGF1dG8gbGVhcm5pbmcgZW50cmllcyBsaW1pdCBudW1iZXIKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCisgIC8q0N64xDogUlRMODM2N0NfUE9SVElETUFYLCBSVEw4MzY3Q19MVVRfUE9SVF9MRUFSTl9MSU1JVE5PX1JFRyovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljTHV0TGVhcm5MaW1pdE5vKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiogcE51bWJlcikKK3sKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVElETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICBpZihwb3J0IDwgOCkKKyAgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfTFVUX1BPUlRfTEVBUk5fTElNSVROT19SRUcocG9ydCksIHBOdW1iZXIpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfUkVHX0xVVF9QT1JUOF9MRUFSTl9MSU1JVE5PK3BvcnQtOCwgcE51bWJlcik7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNTeXN0ZW1MdXRMZWFybkxpbWl0Tm8KKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgc3lzdGVtIGF1dG8gbGVhcm5pbmcgbGltaXQgbnVtYmVyCisgKiBJbnB1dDoKKyAqICAgICAgbnVtYmVyICAtIEFTSUMgYXV0byBsZWFybmluZyBlbnRyaWVzIGxpbWl0IG51bWJlcgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiAgICAgIFJUX0VSUl9MSU1JVEVEX0wyRU5UUllfTlVNICAtIEludmFsaWQgYXV0byBsZWFybmluZyBsaW1pdCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworICAvKtDeuMQ6IFJUTDgzNjdDX0xVVF9MRUFSTkxJTUlUTUFYKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNTeXN0ZW1MdXRMZWFybkxpbWl0Tm8ocnRrX3VpbnQzMiBudW1iZXIpCit7CisgICAgaWYobnVtYmVyID4gUlRMODM2N0NfTFVUX0xFQVJOTElNSVRNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfTElNSVRFRF9MMkVOVFJZX05VTTsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19MVVRfU1lTX0xFQVJOX0xJTUlUTk8sIG51bWJlcik7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNTeXN0ZW1MdXRMZWFybkxpbWl0Tm8KKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgc3lzdGVtIGF1dG8gbGVhcm5pbmcgbGltaXQgbnVtYmVyCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjcpCisgKiAgICAgIHBOdW1iZXIgICAgIC0gQVNJQyBhdXRvIGxlYXJuaW5nIGVudHJpZXMgbGltaXQgbnVtYmVyCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1N5c3RlbUx1dExlYXJuTGltaXRObyhydGtfdWludDMyICpwTnVtYmVyKQoreworICAgIGlmKE5VTEwgPT0gcE51bWJlcikKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfTFVUX1NZU19MRUFSTl9MSU1JVE5PLCBwTnVtYmVyKTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0x1dExlYXJuT3ZlckFjdAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBhdXRvIGxlYXJuIG92ZXIgbGltaXQgbnVtYmVyIGFjdGlvbgorICogSW5wdXQ6CisgKiAgICAgIGFjdGlvbiAgLSBMZWFybiBvdmVyIGFjdGlvbiAwOm5vcm1hbCwgMTpkcm9wIDI6dHJhcAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9OT1RfQUxMT1dFRCAgLSBJbnZhbGlkIGxlYXJuIG92ZXIgYWN0aW9uCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNMdXRMZWFybk92ZXJBY3QocnRrX3VpbnQzMiBhY3Rpb24pCit7CisgICAgaWYoYWN0aW9uID49IExSTk9WRVJBQ1RfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX05PVF9BTExPV0VEOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19QT1JUX1NFQ1VSSVRZX0NUUkwsIFJUTDgzNjdDX0xVVF9MRUFSTl9PVkVSX0FDVF9NQVNLLCBhY3Rpb24pOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0x1dExlYXJuT3ZlckFjdAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBhdXRvIGxlYXJuIG92ZXIgbGltaXQgbnVtYmVyIGFjdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHBBY3Rpb24gICAgIC0gTGVhcm4gb3ZlciBhY3Rpb24gMDpub3JtYWwsIDE6ZHJvcCAyOnRyYXAKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljTHV0TGVhcm5PdmVyQWN0KHJ0a191aW50MzIqIHBBY3Rpb24pCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19QT1JUX1NFQ1VSSVRZX0NUUkwsIFJUTDgzNjdDX0xVVF9MRUFSTl9PVkVSX0FDVF9NQVNLLCBwQWN0aW9uKTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1N5c3RlbUx1dExlYXJuT3ZlckFjdAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBzeXN0ZW0gYXV0byBsZWFybiBvdmVyIGxpbWl0IG51bWJlciBhY3Rpb24KKyAqIElucHV0OgorICogICAgICBhY3Rpb24gIC0gTGVhcm4gb3ZlciBhY3Rpb24gMDpub3JtYWwsIDE6ZHJvcCwgMjp0cmFwCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX05PVF9BTExPV0VEICAtIEludmFsaWQgbGVhcm4gb3ZlciBhY3Rpb24KKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1N5c3RlbUx1dExlYXJuT3ZlckFjdChydGtfdWludDMyIGFjdGlvbikKK3sKKyAgICBpZihhY3Rpb24gPj0gTFJOT1ZFUkFDVF9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfTk9UX0FMTE9XRUQ7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0xVVF9MUk5fU1lTX0xNVF9DVFJMLCBSVEw4MzY3Q19MVVRfU1lTVEVNX0xFQVJOX09WRVJfQUNUX01BU0ssIGFjdGlvbik7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNTeXN0ZW1MdXRMZWFybk92ZXJBY3QKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgc3lzdGVtIGF1dG8gbGVhcm4gb3ZlciBsaW1pdCBudW1iZXIgYWN0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgcEFjdGlvbiAgICAgLSBMZWFybiBvdmVyIGFjdGlvbiAwOm5vcm1hbCwgMTpkcm9wIDI6dHJhcAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNTeXN0ZW1MdXRMZWFybk92ZXJBY3QocnRrX3VpbnQzMiAqcEFjdGlvbikKK3sKKyAgICBpZihOVUxMID09IHBBY3Rpb24pCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19MVVRfTFJOX1NZU19MTVRfQ1RSTCwgUlRMODM2N0NfTFVUX1NZU1RFTV9MRUFSTl9PVkVSX0FDVF9NQVNLLCBwQWN0aW9uKTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1N5c3RlbUx1dExlYXJuUG9ydE1hc2sKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgc3lzdGVtIGF1dG8gbGVhcm4gbGltaXQgcG9ydCBtYXNrCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydG1hc2sgICAgLSBwb3J0IG1hc2sgb2Ygc3lzdGVtIGxlYXJuaW5nIGxpbWl0CisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfTUFTSyAgICAtIEVycm9yIHBvcnQgbWFzaworICogTm90ZToKKyAqICAgICAgTm9uZQorICovCisgIC8q0N64xDogUlRMODM2N0NfTFVUX1NZU1RFTV9MRUFSTl9QTUFTS19NQVNLKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNTeXN0ZW1MdXRMZWFyblBvcnRNYXNrKHJ0a191aW50MzIgcG9ydG1hc2spCit7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgaWYocG9ydG1hc2sgPiBSVEw4MzY3Q19QT1JUTUFTSykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX01BU0s7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfTFVUX0xSTl9TWVNfTE1UX0NUUkwsIFJUTDgzNjdDX0xVVF9TWVNURU1fTEVBUk5fUE1BU0tfTUFTSywgcG9ydG1hc2sgJiAweGZmKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19MVVRfTFJOX1NZU19MTVRfQ1RSTCwgUlRMODM2N0NfTFVUX1NZU1RFTV9MRUFSTl9QTUFTSzFfTUFTSywgKHBvcnRtYXNrPj44KSAmIDB4Nyk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7CisKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1N5c3RlbUx1dExlYXJuUG9ydE1hc2sKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgc3lzdGVtIGF1dG8gbGVhcm4gbGltaXQgcG9ydCBtYXNrCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwUG9ydG1hc2sgICAtIHBvcnQgbWFzayBvZiBzeXN0ZW0gbGVhcm5pbmcgbGltaXQKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAtIE5VTEwgcG9pbnRlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCisgLyrQ3rjEOiBSVEw4MzY3Q19MVVRfU1lTVEVNX0xFQVJOX1BNQVNLX01BU0sqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1N5c3RlbUx1dExlYXJuUG9ydE1hc2socnRrX3VpbnQzMiAqcFBvcnRtYXNrKQoreworICAgIHJ0a191aW50MzIgdG1wbWFzazsKKyAgICByZXRfdCByZXRWYWw7CisKKyAgICBpZihOVUxMID09IHBQb3J0bWFzaykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfTFVUX0xSTl9TWVNfTE1UX0NUUkwsIFJUTDgzNjdDX0xVVF9TWVNURU1fTEVBUk5fUE1BU0tfTUFTSywgJnRtcG1hc2spOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgKnBQb3J0bWFzayA9IHRtcG1hc2sgJiAweGZmOworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19MVVRfTFJOX1NZU19MTVRfQ1RSTCwgUlRMODM2N0NfTFVUX1NZU1RFTV9MRUFSTl9QTUFTSzFfTUFTSywgJnRtcG1hc2spOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgKnBQb3J0bWFzayB8PSAodG1wbWFzayAmIDB4NykgPDwgODsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNMMkxvb2t1cFRiCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IGZpbHRlcmluZyBkYXRhYmFzZSBlbnRyeQorICogSW5wdXQ6CisgKiAgICAgIHBMMlRhYmxlICAgIC0gTDIgdGFibGUgZW50cnkgd3JpdGluZyB0byA4Sys2NCBmaWx0ZXJpbmcgZGF0YWJhc2UKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNMMkxvb2t1cFRiKHJ0bDgzNjdjX2x1dHRiICpwTDJUYWJsZSkKK3sKKyAgICByZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiByZWdEYXRhOworICAgIHJ0a191aW50MTYgKmFjY2Vzc1B0cjsKKyAgICBydGtfdWludDMyIGk7CisgICAgcnRrX3VpbnQxNiBzbWlsMlRhYmxlW1JUTDgzNjdDX0xVVF9UQUJMRV9TSVpFXTsKKyAgICBydGtfdWludDMyIHRibENtZDsKKyAgICBydGtfdWludDMyIGJ1c3lDb3VudGVyOworCisgICAgbWVtc2V0KHNtaWwyVGFibGUsIDB4MDAsIHNpemVvZihydGtfdWludDE2KSAqIFJUTDgzNjdDX0xVVF9UQUJMRV9TSVpFKTsKKyAgICBfcnRsODM2N2NfZmRiU3RVc2VyMlNtaShwTDJUYWJsZSwgc21pbDJUYWJsZSk7CisKKyAgICBpZihwTDJUYWJsZS0+d2FpdF90aW1lID09IDApCisgICAgICAgIGJ1c3lDb3VudGVyID0gUlRMODM2N0NfTFVUX0JVU1lfQ0hFQ0tfTk87CisgICAgZWxzZQorICAgICAgICBidXN5Q291bnRlciA9IHBMMlRhYmxlLT53YWl0X3RpbWU7CisKKyAgICB3aGlsZShidXN5Q291bnRlcikKKyAgICB7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfVEFCTEVfQUNDRVNTX1NUQVRVU19SRUcsIFJUTDgzNjdDX1RBQkxFX0xVVF9BRERSX0JVU1lfRkxBR19PRkZTRVQsJnJlZ0RhdGEpOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBwTDJUYWJsZS0+bG9va3VwX2J1c3kgPSByZWdEYXRhOworICAgICAgICBpZighcmVnRGF0YSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGJ1c3lDb3VudGVyIC0tOworICAgICAgICBpZihidXN5Q291bnRlciA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9CVVNZV0FJVF9USU1FT1VUOworICAgIH0KKworICAgIGFjY2Vzc1B0ciA9IHNtaWwyVGFibGU7CisgICAgcmVnRGF0YSA9ICphY2Nlc3NQdHI7CisgICAgZm9yKGkgPSAwOyBpIDwgUlRMODM2N0NfTFVUX0VOVFJZX1NJWkU7IGkrKykKKyAgICB7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfVEFCTEVfQUNDRVNTX1dSREFUQV9CQVNFICsgaSwgcmVnRGF0YSk7CisgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIGFjY2Vzc1B0ciArKzsKKyAgICAgICAgcmVnRGF0YSA9ICphY2Nlc3NQdHI7CisKKyAgICB9CisKKyAgICB0YmxDbWQgPSAoUlRMODM2N0NfVEFCTEVfQUNDRVNTX1JFR19EQVRBKFRCX09QX1dSSVRFLFRCX1RBUkdFVF9MMikpICYgKFJUTDgzNjdDX1RBQkxFX1RZUEVfTUFTSyAgfCBSVEw4MzY3Q19DT01NQU5EX1RZUEVfTUFTSyk7CisgICAgLyogV3JpdGUgQ29tbWFuZCAqLworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfVEFCTEVfQUNDRVNTX0NUUkxfUkVHLCB0YmxDbWQpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZihwTDJUYWJsZS0+d2FpdF90aW1lID09IDApCisgICAgICAgIGJ1c3lDb3VudGVyID0gUlRMODM2N0NfTFVUX0JVU1lfQ0hFQ0tfTk87CisgICAgZWxzZQorICAgICAgICBidXN5Q291bnRlciA9IHBMMlRhYmxlLT53YWl0X3RpbWU7CisKKyAgICB3aGlsZShidXN5Q291bnRlcikKKyAgICB7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfVEFCTEVfQUNDRVNTX1NUQVRVU19SRUcsIFJUTDgzNjdDX1RBQkxFX0xVVF9BRERSX0JVU1lfRkxBR19PRkZTRVQsJnJlZ0RhdGEpOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBwTDJUYWJsZS0+bG9va3VwX2J1c3kgPSByZWdEYXRhOworICAgICAgICBpZighcmVnRGF0YSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGJ1c3lDb3VudGVyIC0tOworICAgICAgICBpZihidXN5Q291bnRlciA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9CVVNZV0FJVF9USU1FT1VUOworICAgIH0KKworICAgIC8qUmVhZCBhY2Nlc3Mgc3RhdHVzKi8KKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1RBQkxFX0FDQ0VTU19TVEFUVVNfUkVHLCBSVEw4MzY3Q19ISVRfU1RBVFVTX09GRlNFVCwgJnJlZ0RhdGEpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBwTDJUYWJsZS0+bG9va3VwX2hpdCA9IHJlZ0RhdGE7CisgICAgaWYoIXBMMlRhYmxlLT5sb29rdXBfaGl0KQorICAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKKworICAgIC8qUmVhZCBhY2Nlc3MgYWRkcmVzcyovCisgICAgLyoKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19UQUJMRV9BQ0NFU1NfU1RBVFVTX1JFRywgUlRMODM2N0NfVEFCTEVfTFVUX0FERFJfVFlQRV9NQVNLIHwgUlRMODM2N0NfVEFCTEVfTFVUX0FERFJfQUREUkVTU19NQVNLLCZyZWdEYXRhKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcEwyVGFibGUtPmFkZHJlc3MgPSByZWdEYXRhOyovCisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX1RBQkxFX0FDQ0VTU19TVEFUVVNfUkVHLCAmcmVnRGF0YSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHBMMlRhYmxlLT5hZGRyZXNzID0gKHJlZ0RhdGEgJiAweDdmZikgfCAoKHJlZ0RhdGEgJiAweDQwMDApID4+IDMpIHwgKChyZWdEYXRhICYgMHg4MDApIDw8IDEpOworICAgIHBMMlRhYmxlLT5sb29rdXBfYnVzeSA9IDA7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0wyTG9va3VwVGIKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgZmlsdGVyaW5nIGRhdGFiYXNlIGVudHJ5CisgKiBJbnB1dDoKKyAqICAgICAgcEwyVGFibGUgICAgLSBMMiB0YWJsZSBlbnRyeSB3cml0aW5nIHRvIDJLKzY0IGZpbHRlcmluZyBkYXRhYmFzZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcgorICogICAgICBSVF9FUlJfQlVTWVdBSVRfVElNRU9VVCAtIExVVCBpcyBidXN5IGF0IHJldHJpZXZpbmcKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0wyTG9va3VwVGIocnRrX3VpbnQzMiBtZXRob2QsIHJ0bDgzNjdjX2x1dHRiICpwTDJUYWJsZSkKK3sKKyAgICByZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiByZWdEYXRhOworICAgIHJ0a191aW50MTYqIGFjY2Vzc1B0cjsKKyAgICBydGtfdWludDMyIGk7CisgICAgcnRrX3VpbnQxNiBzbWlsMlRhYmxlW1JUTDgzNjdDX0xVVF9UQUJMRV9TSVpFXTsKKyAgICBydGtfdWludDMyIGJ1c3lDb3VudGVyOworICAgIHJ0a191aW50MzIgdGJsQ21kOworCisgICAgaWYocEwyVGFibGUtPndhaXRfdGltZSA9PSAwKQorICAgICAgICBidXN5Q291bnRlciA9IFJUTDgzNjdDX0xVVF9CVVNZX0NIRUNLX05POworICAgIGVsc2UKKyAgICAgICAgYnVzeUNvdW50ZXIgPSBwTDJUYWJsZS0+d2FpdF90aW1lOworCisgICAgd2hpbGUoYnVzeUNvdW50ZXIpCisgICAgeworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1RBQkxFX0FDQ0VTU19TVEFUVVNfUkVHLCBSVEw4MzY3Q19UQUJMRV9MVVRfQUREUl9CVVNZX0ZMQUdfT0ZGU0VULCZyZWdEYXRhKTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgcEwyVGFibGUtPmxvb2t1cF9idXN5ID0gcmVnRGF0YTsKKyAgICAgICAgaWYoIXBMMlRhYmxlLT5sb29rdXBfYnVzeSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGJ1c3lDb3VudGVyIC0tOworICAgICAgICBpZihidXN5Q291bnRlciA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9CVVNZV0FJVF9USU1FT1VUOworICAgIH0KKworCisgICAgdGJsQ21kID0gKG1ldGhvZCA8PCBSVEw4MzY3Q19BQ0NFU1NfTUVUSE9EX09GRlNFVCkgJiBSVEw4MzY3Q19BQ0NFU1NfTUVUSE9EX01BU0s7CisKKyAgICBzd2l0Y2gobWV0aG9kKQorICAgIHsKKyAgICAgICAgY2FzZSBMVVRSRUFETUVUSE9EX0FERFJFU1M6CisgICAgICAgIGNhc2UgTFVUUkVBRE1FVEhPRF9ORVhUX0FERFJFU1M6CisgICAgICAgIGNhc2UgTFVUUkVBRE1FVEhPRF9ORVhUX0wyVUM6CisgICAgICAgIGNhc2UgTFVUUkVBRE1FVEhPRF9ORVhUX0wyTUM6CisgICAgICAgIGNhc2UgTFVUUkVBRE1FVEhPRF9ORVhUX0wzTUM6CisgICAgICAgIGNhc2UgTFVUUkVBRE1FVEhPRF9ORVhUX0wyTDNNQzoKKyAgICAgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfVEFCTEVfQUNDRVNTX0FERFJfUkVHLCBwTDJUYWJsZS0+YWRkcmVzcyk7CisgICAgICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMVVRSRUFETUVUSE9EX01BQzoKKyAgICAgICAgICAgIG1lbXNldChzbWlsMlRhYmxlLCAweDAwLCBzaXplb2YocnRrX3VpbnQxNikgKiBSVEw4MzY3Q19MVVRfVEFCTEVfU0laRSk7CisgICAgICAgICAgICBfcnRsODM2N2NfZmRiU3RVc2VyMlNtaShwTDJUYWJsZSwgc21pbDJUYWJsZSk7CisKKyAgICAgICAgICAgIGFjY2Vzc1B0ciA9IHNtaWwyVGFibGU7CisgICAgICAgICAgICByZWdEYXRhID0gKmFjY2Vzc1B0cjsKKyAgICAgICAgICAgIGZvcihpPTA7IGk8UlRMODM2N0NfTFVUX0VOVFJZX1NJWkU7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1RBQkxFX0FDQ0VTU19XUkRBVEFfQkFTRSArIGksIHJlZ0RhdGEpOworICAgICAgICAgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICBhY2Nlc3NQdHIgKys7CisgICAgICAgICAgICAgICAgcmVnRGF0YSA9ICphY2Nlc3NQdHI7CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExVVFJFQURNRVRIT0RfTkVYVF9MMlVDU1BBOgorICAgICAgICAgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19UQUJMRV9BQ0NFU1NfQUREUl9SRUcsIHBMMlRhYmxlLT5hZGRyZXNzKTsKKyAgICAgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgdGJsQ21kID0gdGJsQ21kIHwgKChwTDJUYWJsZS0+c3BhIDw8IFJUTDgzNjdDX1RBQkxFX0FDQ0VTU19DVFJMX1NQQV9PRkZTRVQpICYgUlRMODM2N0NfVEFCTEVfQUNDRVNTX0NUUkxfU1BBX01BU0spOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisgICAgfQorCisgICAgdGJsQ21kID0gdGJsQ21kIHwgKChSVEw4MzY3Q19UQUJMRV9BQ0NFU1NfUkVHX0RBVEEoVEJfT1BfUkVBRCxUQl9UQVJHRVRfTDIpKSAmIChSVEw4MzY3Q19UQUJMRV9UWVBFX01BU0sgIHwgUlRMODM2N0NfQ09NTUFORF9UWVBFX01BU0spKTsKKyAgICAvKiBSZWFkIENvbW1hbmQgKi8KKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1RBQkxFX0FDQ0VTU19DVFJMX1JFRywgdGJsQ21kKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYocEwyVGFibGUtPndhaXRfdGltZSA9PSAwKQorICAgICAgICBidXN5Q291bnRlciA9IFJUTDgzNjdDX0xVVF9CVVNZX0NIRUNLX05POworICAgIGVsc2UKKyAgICAgICAgYnVzeUNvdW50ZXIgPSBwTDJUYWJsZS0+d2FpdF90aW1lOworCisgICAgd2hpbGUoYnVzeUNvdW50ZXIpCisgICAgeworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1RBQkxFX0FDQ0VTU19TVEFUVVNfUkVHLCBSVEw4MzY3Q19UQUJMRV9MVVRfQUREUl9CVVNZX0ZMQUdfT0ZGU0VULCZyZWdEYXRhKTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgcEwyVGFibGUtPmxvb2t1cF9idXN5ID0gcmVnRGF0YTsKKyAgICAgICAgaWYoIXBMMlRhYmxlLT5sb29rdXBfYnVzeSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGJ1c3lDb3VudGVyIC0tOworICAgICAgICBpZihidXN5Q291bnRlciA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9CVVNZV0FJVF9USU1FT1VUOworICAgIH0KKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfVEFCTEVfQUNDRVNTX1NUQVRVU19SRUcsIFJUTDgzNjdDX0hJVF9TVEFUVVNfT0ZGU0VULCZyZWdEYXRhKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICBwTDJUYWJsZS0+bG9va3VwX2hpdCA9IHJlZ0RhdGE7CisgICAgaWYoIXBMMlRhYmxlLT5sb29rdXBfaGl0KQorICAgICAgICByZXR1cm4gUlRfRVJSX0wyX0VOVFJZX05PVEZPVU5EOworCisgICAgLypSZWFkIGFjY2VzcyBhZGRyZXNzKi8KKyAgICAvL3JldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1RBQkxFX0FDQ0VTU19TVEFUVVNfUkVHLCBSVEw4MzY3Q19UQUJMRV9MVVRfQUREUl9UWVBFX01BU0sgfCBSVEw4MzY3Q19UQUJMRV9MVVRfQUREUl9BRERSRVNTX01BU0ssJnJlZ0RhdGEpOworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfVEFCTEVfQUNDRVNTX1NUQVRVU19SRUcsICZyZWdEYXRhKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcEwyVGFibGUtPmFkZHJlc3MgPSAocmVnRGF0YSAmIDB4N2ZmKSB8ICgocmVnRGF0YSAmIDB4NDAwMCkgPj4gMykgfCAoKHJlZ0RhdGEgJiAweDgwMCkgPDwgMSk7CisKKyAgICAvKnJlYWQgTDIgZW50cnkgKi8KKyAgICBtZW1zZXQoc21pbDJUYWJsZSwgMHgwMCwgc2l6ZW9mKHJ0a191aW50MTYpICogUlRMODM2N0NfTFVUX1RBQkxFX1NJWkUpOworCisgICAgYWNjZXNzUHRyID0gc21pbDJUYWJsZTsKKworICAgIGZvcihpID0gMDsgaSA8IFJUTDgzNjdDX0xVVF9FTlRSWV9TSVpFOyBpKyspCisgICAgeworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX1RBQkxFX0FDQ0VTU19SRERBVEFfQkFTRSArIGksICZyZWdEYXRhKTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgKmFjY2Vzc1B0ciA9IHJlZ0RhdGE7CisKKyAgICAgICAgYWNjZXNzUHRyICsrOworICAgIH0KKworICAgIF9ydGw4MzY3Y19mZGJTdFNtaTJVc2VyKHBMMlRhYmxlLCBzbWlsMlRhYmxlKTsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljTHV0TGVhcm5ObworICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwZXItUG9ydCBhdXRvIGxlYXJuaW5nIG51bWJlcgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH43KQorICogICAgICBwTnVtYmVyICAgICAtIEFTSUMgYXV0byBsZWFybmluZyBlbnRyaWVzIG51bWJlcgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KKyAvKtDeuMRSVEw4MzY3Q19QT1JUSURNQVgsIFJUTDgzNjdDX1JFR19MMl9MUk5fQ05UX1JFRywgcG9ydDEwIHJlZyBpcyBub3QgY29udG5pb3VzLCB3YWl0IGZvciB1cGRhdGluZyBvZiBiYXNlLmgqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0x1dExlYXJuTm8ocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyKiBwTnVtYmVyKQoreworICAgIHJldF90IHJldFZhbDsKKworICAgIGlmKHBvcnQgPiBSVEw4MzY3Q19QT1JUSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIGlmKHBvcnQgPCAxMCkKKyAgICB7CisgICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfUkVHX0wyX0xSTl9DTlRfUkVHKHBvcnQpLCBwTnVtYmVyKTsKKyAgICAgICAgaWYgKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19MMl9MUk5fQ05UX0NUUkwxMCwgcE51bWJlcik7CisgICAgICAgIGlmIChyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljTHV0Rmx1c2hBbGwKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBGbHVzaCBhbGwgZW50cmllcyBpbiBMVVQuIEluY2x1ZGVzIHN0YXRpYyAmIGR5bmFtaWMgZW50cmllcworICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0x1dEZsdXNoQWxsKHZvaWQpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0wyX0ZMVVNIX0NUUkwzLCBSVEw4MzY3Q19MMl9GTFVTSF9DVFJMM19PRkZTRVQsIDEpOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljTHV0Rmx1c2hBbGxTdGF0dXMKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgRmx1c2ggYWxsIHN0YXR1cywgMTpCdXN5LCAwIG5vcm1hbAorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcEJ1c3lTdGF0dXMgLSBCdXN5IHN0YXRlCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgLSBOdWxsIHBvaW50ZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0x1dEZsdXNoQWxsU3RhdHVzKHJ0a191aW50MzIgKnBCdXN5U3RhdHVzKQoreworICAgIGlmKE5VTEwgPT0gcEJ1c3lTdGF0dXMpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0wyX0ZMVVNIX0NUUkwzLCBSVEw4MzY3Q19MMl9GTFVTSF9DVFJMM19PRkZTRVQsIHBCdXN5U3RhdHVzKTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0x1dEZvcmNlRmx1c2gKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgcGVyIHBvcnQgZm9yY2UgZmx1c2ggc2V0dGluZworICogSW5wdXQ6CisgKiAgICAgIHBvcnRtYXNrICAgIC0gcG9ydG1hc2soMH4weEZGKQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX01BU0sgICAgLSBJbnZhbGlkIHBvcnRtYXNrCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KKyAvKnBvcnQ4fnBvcnQxMLXEyejWw9Tawe3N4tK7uPZyZWdpc3Rlciwgd2FpdCBmb3IgdXBkYXRpbmcgb2YgYmFzZS5oLCByZWcuaCovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljTHV0Rm9yY2VGbHVzaChydGtfdWludDMyIHBvcnRtYXNrKQoreworICAgIHJldF90IHJldFZhbDsKKworICAgIGlmKHBvcnRtYXNrID4gUlRMODM2N0NfUE9SVE1BU0spCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9NQVNLOworCisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfRk9SQ0VfRkxVU0hfUkVHLCBSVEw4MzY3Q19GT1JDRV9GTFVTSF9QT1JUTUFTS19NQVNLLCBwb3J0bWFzayAmIDB4ZmYpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfRk9SQ0VfRkxVU0gxLCBSVEw4MzY3Q19QT1JUTUFTSzFfTUFTSywgKHBvcnRtYXNrID4+IDgpICYgMHg3KTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNMdXRGb3JjZUZsdXNoU3RhdHVzCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHBlciBwb3J0IGZvcmNlIGZsdXNoIHN0YXR1cworICogSW5wdXQ6CisgKiAgICAgIHBQb3J0bWFzayAgIC0gcG9ydG1hc2soMH4weEZGKQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworIC8qcG9ydDh+cG9ydDEwtcTJ6NbD1NrB7c3i0ru49nJlZ2lzdGVyLCB3YWl0IGZvciB1cGRhdGluZyBvZiBiYXNlLmgsIHJlZy5oKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNMdXRGb3JjZUZsdXNoU3RhdHVzKHJ0a191aW50MzIgKnBQb3J0bWFzaykKK3sKKyAgICBydGtfdWludDMyIHRtcE1hc2s7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfRk9SQ0VfRkxVU0hfUkVHLCBSVEw4MzY3Q19CVVNZX1NUQVRVU19NQVNLLCZ0bXBNYXNrKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICpwUG9ydG1hc2sgPSB0bXBNYXNrICYgMHhmZjsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19GT1JDRV9GTFVTSDEsIFJUTDgzNjdDX0JVU1lfU1RBVFVTMV9NQVNLLCZ0bXBNYXNrKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICpwUG9ydG1hc2sgfD0gKHRtcE1hc2sgJiA3KSA8PCA4OworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNMdXRGbHVzaE1vZGUKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgdXNlciBmb3JjZSBMMiBwTHV0U3QgdGFibGUgZmx1c2ggbW9kZQorICogSW5wdXQ6CisgKiAgICAgIG1vZGUgICAgLSAwOlBvcnQgYmFzZWQgMTogUG9ydCArIFZMQU4gYmFzZWQgMjpQb3J0ICsgRklEL01TVEkgYmFzZWQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfTk9UX0FMTE9XRUQgIC0gQWN0aW9ucyBub3QgYWxsb3dlZCBieSB0aGUgZnVuY3Rpb24KKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0x1dEZsdXNoTW9kZShydGtfdWludDMyIG1vZGUpCit7CisgICAgaWYoIG1vZGUgPj0gRkxVU0hNRE9FX0VORCApCisgICAgICAgIHJldHVybiBSVF9FUlJfTk9UX0FMTE9XRUQ7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0wyX0ZMVVNIX0NUUkwyLCBSVEw4MzY3Q19MVVRfRkxVU0hfTU9ERV9NQVNLLCBtb2RlKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNMdXRGbHVzaE1vZGUKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgdXNlciBmb3JjZSBMMiBwTHV0U3QgdGFibGUgZmx1c2ggbW9kZQorICogSW5wdXQ6CisgKiAgICAgIHBNb2RlICAgLSAwOlBvcnQgYmFzZWQgMTogUG9ydCArIFZMQU4gYmFzZWQgMjpQb3J0ICsgRklEL01TVEkgYmFzZWQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNMdXRGbHVzaE1vZGUocnRrX3VpbnQzMiogcE1vZGUpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19MMl9GTFVTSF9DVFJMMiwgUlRMODM2N0NfTFVUX0ZMVVNIX01PREVfTUFTSywgcE1vZGUpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0x1dEZsdXNoVHlwZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBMMiBMVVQgZmx1c2ggdHlwZQorICogSW5wdXQ6CisgKiAgICAgIHR5cGUgICAgLSAwOiBkeW5hbWljZSB1bmljYXN0OyAxOiBib3RoIGR5bmFtaWMgYW5kIHN0YXRpYyB1bmljYXN0IGVudHJ5CisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNMdXRGbHVzaFR5cGUocnRrX3VpbnQzMiB0eXBlKQoreworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19MMl9GTFVTSF9DVFJMMiwgUlRMODM2N0NfTFVUX0ZMVVNIX1RZUEVfT0ZGU0VULHR5cGUpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0x1dEZsdXNoVHlwZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBMMiBMVVQgZmx1c2ggdHlwZQorICogSW5wdXQ6CisgKiAgICAgIHBUeXBlICAgLSAwOiBkeW5hbWljZSB1bmljYXN0OyAxOiBib3RoIGR5bmFtaWMgYW5kIHN0YXRpYyB1bmljYXN0IGVudHJ5CisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNMdXRGbHVzaFR5cGUocnRrX3VpbnQzMiogcFR5cGUpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0wyX0ZMVVNIX0NUUkwyLCBSVEw4MzY3Q19MVVRfRkxVU0hfVFlQRV9PRkZTRVQscFR5cGUpOworfQorCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNMdXRGbHVzaFZpZAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBWSUQgb2YgUG9ydCArIFZJRCBwTHV0U3QgZmx1c2ggbW9kZQorICogSW5wdXQ6CisgKiAgICAgIHZpZCAgICAgLSBWaWQgKDB+NDA5NSkKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1ZMQU5fVklEIC0gSW52YWxpZCBWSUQgcGFyYW1ldGVyICgwfjQwOTUpCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNMdXRGbHVzaFZpZChydGtfdWludDMyIHZpZCkKK3sKKyAgICBpZiggdmlkID4gUlRMODM2N0NfVklETUFYICkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9WTEFOX1ZJRDsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfTDJfRkxVU0hfQ1RSTDEsIFJUTDgzNjdDX0xVVF9GTFVTSF9WSURfTUFTSywgdmlkKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNMdXRGbHVzaFZpZAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBWSUQgb2YgUG9ydCArIFZJRCBwTHV0U3QgZmx1c2ggbW9kZQorICogSW5wdXQ6CisgKiAgICAgIHBWaWQgICAgLSBWaWQgKDB+NDA5NSkKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNMdXRGbHVzaFZpZChydGtfdWludDMyKiBwVmlkKQoreworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfTDJfRkxVU0hfQ1RSTDEsIFJUTDgzNjdDX0xVVF9GTFVTSF9WSURfTUFTSywgcFZpZCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljUG9ydEZsdXNkRmlkCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IEZJRCBvZiBQb3J0ICsgRklEIHBMdXRTdCBmbHVzaCBtb2RlCisgKiBJbnB1dDoKKyAqICAgICAgZmlkICAgICAtIEZJRC9NU1RJIGZvciBmb3JjZSBmbHVzaAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfTDJfRklEICAgLSBJbnZhbGlkIEZJRCAoMH4xNSkKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0x1dEZsdXNoRmlkKHJ0a191aW50MzIgZmlkKQoreworICAgIGlmKCBmaWQgPiBSVEw4MzY3Q19GSURNQVggKQorICAgICAgICByZXR1cm4gUlRfRVJSX0wyX0ZJRDsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfTDJfRkxVU0hfQ1RSTDEsIFJUTDgzNjdDX0xVVF9GTFVTSF9GSURfTUFTSywgZmlkKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNMdXRGbHVzaEZpZAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBGSUQgb2YgUG9ydCArIEZJRCBwTHV0U3QgZmx1c2ggbW9kZQorICogSW5wdXQ6CisgKiAgICAgIHBGaWQgICAgLSBGSUQvTVNUSSBmb3IgZm9yY2UgZmx1c2gKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0x1dEZsdXNoRmlkKHJ0a191aW50MzIqIHBGaWQpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19MMl9GTFVTSF9DVFJMMSwgUlRMODM2N0NfTFVUX0ZMVVNIX0ZJRF9NQVNLLCBwRmlkKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNMdXREaXNhYmxlQWdpbmcKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgTDIgTFVUIGFnaW5nIHBlciBwb3J0IHNldHRpbmcKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgZGlzYWJsZWQgICAgLSAwOiBlbmFibGUgYWdpbmc7IDE6IGRpc2FibGluZyBhZ2luZworICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KKyAvKtDeuMRSVEw4MzY3Q19QT1JUSURNQVgqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0x1dERpc2FibGVBZ2luZyhydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgZGlzYWJsZWQpCit7CisgICAgaWYocG9ydCA+IFJUTDgzNjdDX1BPUlRJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfTFVUX0FHRU9VVF9DVFJMX1JFRywgcG9ydCwgZGlzYWJsZWQpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0x1dERpc2FibGVBZ2luZworICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBMMiBMVVQgYWdpbmcgcGVyIHBvcnQgc2V0dGluZworICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH43KQorICogICAgICBwRGlzYWJsZWQgLSAwOiBlbmFibGUgYWdpbmc7IDE6IGRpc2FibGluZyBhZ2luZworICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KKyAvKtDeuMRSVEw4MzY3Q19QT1JUSURNQVgqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0x1dERpc2FibGVBZ2luZyhydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgKnBEaXNhYmxlZCkKK3sKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVElETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19MVVRfQUdFT1VUX0NUUkxfUkVHLCBwb3J0LCBwRGlzYWJsZWQpOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljTHV0SVBNQ0dyb3VwCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IElQTUMgR3JvdXAgVGFibGUKKyAqIElucHV0OgorICogICAgICBpbmRleCAgICAgICAtIHRoZSBlbnRyeSBpbmRleCBpbiB0YWJsZSAoMCB+IDYzKQorICogICAgICBncm91cF9hZGRyICAtIHRoZSBtdWx0aWNhc3QgZ3JvdXAgYWRkcmVzcyAoMjI0LjAuMC4wIH4gMjM5LjI1NS4yNTUuMjU1KQorICogICAgICB2aWQgICAgICAgICAtIFZMQU4gSUQKKyAqICAgICAgcG1hc2sgICAgICAgLSBwb3J0bWFzaworICogICAgICB2YWxpZCAgICAgICAtIHZhbGlkIGJpdAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgLSBJbnZhbGlkIHBhcmFtZXRlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljTHV0SVBNQ0dyb3VwKHJ0a191aW50MzIgaW5kZXgsIGlwYWRkcl90IGdyb3VwX2FkZHIsIHJ0a191aW50MzIgdmlkLCBydGtfdWludDMyIHBtYXNrLCBydGtfdWludDMyIHZhbGlkKQoreworICAgIHJ0a191aW50MzIgIHJlZ0FkZHIsIHJlZ0RhdGEsIGJpdG9mZnNldDsKKyAgICBpcGFkZHJfdCAgICBpcERhdGE7CisgICAgcmV0X3QgICAgICAgcmV0VmFsOworCisgICAgaWYoaW5kZXggPiBSVEw4MzY3Q19MVVRfSVBNQ0dSUF9UQUJMRV9NQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZiAodmlkID4gUlRMODM2N0NfVklETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1ZMQU5fVklEOworCisgICAgaXBEYXRhID0gZ3JvdXBfYWRkcjsKKworICAgIGlmKCAoaXBEYXRhICYgMHhGMDAwMDAwMCkgIT0gMHhFMDAwMDAwMCkgICAgLyogbm90IGluIDIyNC4wLjAuMCB+IDIzOS4yNTUuMjU1LjI1NSAqLworICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgLyogR3JvdXAgQWRkcmVzcyAqLworICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTBfSCArIChpbmRleCAqIDIpOworICAgIHJlZ0RhdGEgPSAoKGlwRGF0YSAmIDB4MEZGRkZGRkYpID4+IDE2KTsKKworICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhyZWdBZGRyLCByZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmVnQWRkcisrOworICAgIHJlZ0RhdGEgPSAoaXBEYXRhICYgMHgwMDAwRkZGRik7CisKKyAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcocmVnQWRkciwgcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIC8qIFZJRCAqLworICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9WSURfMDAgKyBpbmRleDsKKyAgICByZWdEYXRhID0gdmlkOworCisgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKHJlZ0FkZHIsIHJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAvKiBwb3J0bWFzayAqLworICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9QTVNLXzAwICsgaW5kZXg7CisgICAgcmVnRGF0YSA9IHBtYXNrOworCisgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKHJlZ0FkZHIsIHJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAvKiB2YWxpZCAqLworICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9WQUxJRF8xNV8wICsgKGluZGV4IC8gMTYpOworICAgIGJpdG9mZnNldCA9IGluZGV4ICUgMTY7CisgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KHJlZ0FkZHIsIGJpdG9mZnNldCwgdmFsaWQpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljTHV0SVBNQ0dyb3VwCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IElQTUMgR3JvdXAgVGFibGUKKyAqIElucHV0OgorICogICAgICBpbmRleCAgICAgICAtIHRoZSBlbnRyeSBpbmRleCBpbiB0YWJsZSAoMCB+IDYzKQorICogT3V0cHV0OgorICogICAgICBwR3JvdXBfYWRkciAtIHRoZSBtdWx0aWNhc3QgZ3JvdXAgYWRkcmVzcyAoMjI0LjAuMC4wIH4gMjM5LjI1NS4yNTUuMjU1KQorICogICAgICBwVmlkICAgICAgICAtIFZMQU4gSUQKKyAqICAgICAgcFBtYXNrICAgICAgLSBwb3J0bWFzaworICogICAgICBwVmFsaWQgICAgICAtIFZhbGlkIGJpdAorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgIC0gSW52YWxpZCBwYXJhbWV0ZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0x1dElQTUNHcm91cChydGtfdWludDMyIGluZGV4LCBpcGFkZHJfdCAqcEdyb3VwX2FkZHIsIHJ0a191aW50MzIgKnBWaWQsIHJ0a191aW50MzIgKnBQbWFzaywgcnRrX3VpbnQzMiAqcFZhbGlkKQoreworICAgIHJ0a191aW50MzIgICAgICByZWdBZGRyLCByZWdEYXRhLCBiaXRvZmZzZXQ7CisgICAgaXBhZGRyX3QgICAgaXBEYXRhOworICAgIHJldF90ICAgICAgIHJldFZhbDsKKworICAgIGlmKGluZGV4ID4gUlRMODM2N0NfTFVUX0lQTUNHUlBfVEFCTEVfTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYgKE5VTEwgPT0gcEdyb3VwX2FkZHIpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKE5VTEwgPT0gcFZpZCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoTlVMTCA9PSBwUG1hc2spCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgLyogR3JvdXAgYWRkcmVzcyAqLworICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19SRUdfSVBNQ19HUk9VUF9FTlRSWTBfSCArIChpbmRleCAqIDIpOworICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhyZWdBZGRyLCAmcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICpwR3JvdXBfYWRkciA9ICgoKHJlZ0RhdGEgJiAweDAwMDAwRkZGKSA8PCAxNikgfCAweEUwMDAwMDAwKTsKKworICAgIHJlZ0FkZHIrKzsKKyAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcocmVnQWRkciwgJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpcERhdGEgPSAoKnBHcm91cF9hZGRyIHwgKHJlZ0RhdGEgJiAweDAwMDBGRkZGKSk7CisgICAgKnBHcm91cF9hZGRyID0gaXBEYXRhOworCisgICAgLyogVklEICovCisgICAgcmVnQWRkciA9IFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZJRF8wMCArIGluZGV4OworICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhyZWdBZGRyLCAmcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICpwVmlkID0gcmVnRGF0YTsKKworICAgIC8qIHBvcnRtYXNrICovCisgICAgcmVnQWRkciA9IFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1BNU0tfMDAgKyBpbmRleDsKKyAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcocmVnQWRkciwgJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAqcFBtYXNrID0gcmVnRGF0YTsKKworICAgIC8qIHZhbGlkICovCisgICAgcmVnQWRkciA9IFJUTDgzNjdDX1JFR19JUE1DX0dST1VQX1ZBTElEXzE1XzAgKyAoaW5kZXggLyAxNik7CisgICAgYml0b2Zmc2V0ID0gaW5kZXggJSAxNjsKKyAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQocmVnQWRkciwgYml0b2Zmc2V0LCAmcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICpwVmFsaWQgPSByZWdEYXRhOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY0x1dExpbmtEb3duRm9yY2VBZ2luZworICogRGVzY3JpcHRpb246CisgKiAgICAgICBTZXQgTFVUIGxpbmsgZG93biBhZ2luZyBzZXR0aW5nLgorICogSW5wdXQ6CisgKiAgICAgIGVuYWJsZSAgICAgIC0gbGluayBkb3duIGFnaW5nIHNldHRpbmcKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0VOQUJMRSAgICAtIEludmFsaWQgcGFyYW1ldGVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNMdXRMaW5rRG93bkZvcmNlQWdpbmcocnRrX3VpbnQzMiBlbmFibGUpCit7CisgICAgaWYoZW5hYmxlID4gMSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9FTkFCTEU7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfTFVUX0NGRywgUlRMODM2N0NfTElOS0RPV05fQUdFT1VUX09GRlNFVCwgZW5hYmxlID8gMCA6IDEpOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljTHV0TGlua0Rvd25Gb3JjZUFnaW5nCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgIEdldCBMVVQgbGluayBkb3duIGFnaW5nIHNldHRpbmcuCisgKiBJbnB1dDoKKyAqICAgICAgcEVuYWJsZSAgICAgICAgIC0gbGluayBkb3duIGFnaW5nIHNldHRpbmcKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0VOQUJMRSAgICAtIEludmFsaWQgcGFyYW1ldGVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNMdXRMaW5rRG93bkZvcmNlQWdpbmcocnRrX3VpbnQzMiAqcEVuYWJsZSkKK3sKKyAgICBydGtfdWludDMyICB2YWx1ZTsKKyAgICByZXRfdCAgIHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfTFVUX0NGRywgUlRMODM2N0NfTElOS0RPV05fQUdFT1VUX09GRlNFVCwgJnZhbHVlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgKnBFbmFibGUgPSB2YWx1ZSA/IDAgOiAxOworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNMdXRJcG1jRndkUm91dGVyUG9ydAorICogRGVzY3JpcHRpb246CisgKiAgICAgICBTZXQgSVBNQyBwYWNrZXQgZm9yd2FyZCB0byByb3VudGVyIHBvcnQgYWxzbyBvciBub3QKKyAqIElucHV0OgorICogICAgICBlbmFibGUgICAgICAtIDE6IElubGN1ZGUgcm91dGVyIHBvcnQsIDAsIGV4Y2x1ZGUgcm91dGVyIHBvcnQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0VOQUJMRSAgICAgSW52YWxpZCBwYXJhbWV0ZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0x1dElwbWNGd2RSb3V0ZXJQb3J0KHJ0a191aW50MzIgZW5hYmxlKQoreworICAgIGlmKGVuYWJsZSA+IDEpCisgICAgICAgIHJldHVybiBSVF9FUlJfRU5BQkxFOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0xVVF9DRkcyLCBSVEw4MzY3Q19MVVRfSVBNQ19GV0RfUlBPUlRfT0ZGU0VULCBlbmFibGUpOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljTHV0SXBtY0Z3ZFJvdXRlclBvcnQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICAgR2V0IElQTUMgcGFja2V0IGZvcndhcmQgdG8gcm91bnRlciBwb3J0IGFsc28gb3Igbm90CisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwRW5hYmxlICAgICAgICAgLSAxOiBJbmxjdWRlIHJvdXRlciBwb3J0LCAwLCBleGNsdWRlIHJvdXRlciBwb3J0CisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAgICAgLSBOdWxsIHBvaW50ZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY0x1dElwbWNGd2RSb3V0ZXJQb3J0KHJ0a191aW50MzIgKnBFbmFibGUpCit7CisgICAgaWYoTlVMTCA9PSBwRW5hYmxlKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19MVVRfQ0ZHMiwgUlRMODM2N0NfTFVUX0lQTUNfRldEX1JQT1JUX09GRlNFVCwgcEVuYWJsZSk7Cit9CisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X21ldGVyLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9tZXRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MTI1OTEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9tZXRlci5jCkBAIC0wLDAgKzEsMzA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNzYzMDYgJAorICogJERhdGU6IDIwMTctMDMtMDggMTU6MTM6NTggKzA4MDAgKOmAseS4iSwgMDgg5LiJ5pyIIDIwMTcpICQKKyAqCisgKiBQdXJwb3NlIDogUlRMODM2N0Mgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJIGZvciBSVEw4MzY3QworICogRmVhdHVyZSA6IFNoYXJlZCBtZXRlciByZWxhdGVkIGZ1bmN0aW9ucworICoKKyAqLworI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnZfbWV0ZXIuaD4KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNTaGFyZU1ldGVyCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IG1ldGVyIGNvbmZpZ3VyYXRpb24KKyAqIElucHV0OgorICogICAgICBpbmRleCAgIC0gaGFyZWQgbWV0ZXIgaW5kZXggKDAtMzEpCisgKiAgICAgIHJhdGUgICAgLSAxNy1iaXRzIHJhdGUgb2Ygc2hhcmUgbWV0ZXIsIHVuaXQgaXMgOEtwYnMKKyAqICAgICAgaWZnICAgICAtIEluY2x1ZGluZyBJRkcgaW4gcmF0ZSBjYWxjdWxhdGlvbiwgMTppbmNsdWRlIDA6ZXhjbHVkZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0ZJTFRFUl9NRVRFUl9JRCAgLSBJbnZhbGlkIG1ldGVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNTaGFyZU1ldGVyKHJ0a191aW50MzIgaW5kZXgsIHJ0a191aW50MzIgcmF0ZSwgcnRrX3VpbnQzMiBpZmcpCit7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgaWYoaW5kZXggPiBSVEw4MzY3Q19NRVRFUk1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9GSUxURVJfTUVURVJfSUQ7CisKKyAgICBpZihpbmRleCA8IDMyKQorICAgIHsKKyAgICAvKjE5LWJpdHMgUmF0ZSovCisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfTUVURVJfUkFURV9SRUcoaW5kZXgpLCByYXRlJjB4RkZGRik7CisgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfTUVURVJfUkFURV9SRUcoaW5kZXgpICsgMSwgKHJhdGUgJjB4NzAwMDApID4+IDE2KTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19NRVRFUl9JRkdfQ1RSTF9SRUcoaW5kZXgpLCBSVEw4MzY3Q19NRVRFUl9JRkdfT0ZGU0VUKGluZGV4KSwgaWZnKTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgLyoxOS1iaXRzIFJhdGUqLworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19NRVRFUjMyX1JBVEVfQ1RSTDAgKyAoKGluZGV4LTMyKSA8PCAxKSwgcmF0ZSYweEZGRkYpOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19NRVRFUjMyX1JBVEVfQ1RSTDAgKyAoKGluZGV4LTMyKSA8PCAxKSArIDEsIChyYXRlICYweDcwMDAwKSA+PiAxNik7CisgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX01FVEVSX0lGR19DVFJMMiArICgoaW5kZXgtMzIpID4+IDQpLCBSVEw4MzY3Q19NRVRFUl9JRkdfT0ZGU0VUKGluZGV4KSwgaWZnKTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNTaGFyZU1ldGVyCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IG1ldGVyIGNvbmZpZ3VyYXRpb24KKyAqIElucHV0OgorICogICAgICBpbmRleCAgIC0gaGFyZWQgbWV0ZXIgaW5kZXggKDAtMzEpCisgKiAgICAgIHBSYXRlICAgLSAxNy1iaXRzIHJhdGUgb2Ygc2hhcmUgbWV0ZXIsIHVuaXQgaXMgOEtwYnMKKyAqICAgICAgcElmZyAgICAtIEluY2x1ZGluZyBJRkcgaW4gcmF0ZSBjYWxjdWxhdGlvbiwgMTppbmNsdWRlIDA6ZXhjbHVkZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0ZJTFRFUl9NRVRFUl9JRCAgLSBJbnZhbGlkIG1ldGVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNTaGFyZU1ldGVyKHJ0a191aW50MzIgaW5kZXgsIHJ0a191aW50MzIgKnBSYXRlLCBydGtfdWludDMyICpwSWZnKQoreworICAgIHJ0a191aW50MzIgcmVnRGF0YTsKKyAgICBydGtfdWludDMyIHJlZ0RhdGEyOworICAgIHJldF90IHJldFZhbDsKKworICAgIGlmKGluZGV4ID4gUlRMODM2N0NfTUVURVJNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfRklMVEVSX01FVEVSX0lEOworCisgICAgaWYoaW5kZXggPCAzMikKKyAgICB7CisgICAgLyoxNy1iaXRzIFJhdGUqLworICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX01FVEVSX1JBVEVfUkVHKGluZGV4KSwgJnJlZ0RhdGEpOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX01FVEVSX1JBVEVfUkVHKGluZGV4KSArIDEsICZyZWdEYXRhMik7CisgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgKnBSYXRlID0gKChyZWdEYXRhMiA8PCAxNikgJiAweDcwMDAwKSB8IHJlZ0RhdGE7CisgICAgLypJRkcqLworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfTUVURVJfSUZHX0NUUkxfUkVHKGluZGV4KSwgUlRMODM2N0NfTUVURVJfSUZHX09GRlNFVChpbmRleCksIHBJZmcpOworCisgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAvKjE3LWJpdHMgUmF0ZSovCisgICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfUkVHX01FVEVSMzJfUkFURV9DVFJMMCArICgoaW5kZXgtMzIpIDw8IDEpLCAmcmVnRGF0YSk7CisgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfUkVHX01FVEVSMzJfUkFURV9DVFJMMCArICgoaW5kZXgtMzIpIDw8IDEpICsgMSwgJnJlZ0RhdGEyKTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAqcFJhdGUgPSAoKHJlZ0RhdGEyIDw8IDE2KSAmIDB4NzAwMDApIHwgcmVnRGF0YTsKKyAgICAvKklGRyovCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfTUVURVJfSUZHX0NUUkwyICsgKChpbmRleC0zMikgPj4gNCksIFJUTDgzNjdDX01FVEVSX0lGR19PRkZTRVQoaW5kZXgpLCBwSWZnKTsKKworICAgIHJldHVybiByZXRWYWw7CisgICAgfQorfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1NoYXJlTWV0ZXJCdWNrZXRTaXplCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IG1ldGVyIHJlbGF0ZWQgbGVha3kgYnVja2V0IHRocmVzaG9sZAorICogSW5wdXQ6CisgKiAgICAgIGluZGV4ICAgICAgIC0gaGFyZWQgbWV0ZXIgaW5kZXggKDAtMzEpCisgKiAgICAgIGxidGhyZXNob2xkIC0gTGVha3kgYnVja2V0IHRocmVzaG9sZCBvZiBtZXRlcgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0ZJTFRFUl9NRVRFUl9JRCAgLSBJbnZhbGlkIG1ldGVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNTaGFyZU1ldGVyQnVja2V0U2l6ZShydGtfdWludDMyIGluZGV4LCBydGtfdWludDMyIGxidGhyZXNob2xkKQoreworCisgICAgaWYoaW5kZXggPiBSVEw4MzY3Q19NRVRFUk1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9GSUxURVJfTUVURVJfSUQ7CisKKyAgICBpZihpbmRleCA8IDMyKQorICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX01FVEVSX0JVQ0tFVF9TSVpFX1JFRyhpbmRleCksIGxidGhyZXNob2xkKTsKKyAgICBlbHNlCisgICAgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX01FVEVSMzJfQlVDS0VUX1NJWkUgKyBpbmRleCAtIDMyLCBsYnRocmVzaG9sZCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljU2hhcmVNZXRlckJ1Y2tldFNpemUKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgbWV0ZXIgcmVsYXRlZCBsZWFreSBidWNrZXQgdGhyZXNob2xkCisgKiBJbnB1dDoKKyAqICAgICAgaW5kZXggICAgICAgLSBoYXJlZCBtZXRlciBpbmRleCAoMC0zMSkKKyAqICAgICAgcExidGhyZXNob2xkIC0gTGVha3kgYnVja2V0IHRocmVzaG9sZCBvZiBtZXRlcgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0ZJTFRFUl9NRVRFUl9JRCAgLSBJbnZhbGlkIG1ldGVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNTaGFyZU1ldGVyQnVja2V0U2l6ZShydGtfdWludDMyIGluZGV4LCBydGtfdWludDMyICpwTGJ0aHJlc2hvbGQpCit7CisgICAgaWYoaW5kZXggPiBSVEw4MzY3Q19NRVRFUk1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9GSUxURVJfTUVURVJfSUQ7CisKKyAgICBpZihpbmRleCA8IDMyKQorICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX01FVEVSX0JVQ0tFVF9TSVpFX1JFRyhpbmRleCksIHBMYnRocmVzaG9sZCk7CisgICAgZWxzZQorICAgICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19NRVRFUjMyX0JVQ0tFVF9TSVpFICsgaW5kZXggLSAzMiwgcExidGhyZXNob2xkKTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1NoYXJlTWV0ZXJUeXBlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IG1ldGVyIFR5cGUKKyAqIElucHV0OgorICogICAgICBpbmRleCAgICAgICAtIHNoYXJlZCBtZXRlciBpbmRleCAoMC0zMSkKKyAqICAgICAgVHlwZSAgICAgICAgLSAwOiBrYnBzLCAxOiBwcHMKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9GSUxURVJfTUVURVJfSUQgIC0gSW52YWxpZCBtZXRlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljU2hhcmVNZXRlclR5cGUocnRrX3VpbnQzMiBpbmRleCwgcnRrX3VpbnQzMiB0eXBlKQoreworICAgIHJ0a191aW50MzIgcmVnOworCisgICAgaWYoaW5kZXggPiBSVEw4MzY3Q19NRVRFUk1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9GSUxURVJfTUVURVJfSUQ7CisKKyAgICBpZihpbmRleCA8IDMyKQorICAgICAgICByZWcgPSBSVEw4MzY3Q19SRUdfTUVURVJfTU9ERV9TRVRUSU5HMCArIChpbmRleCAvIDE2KTsKKyAgICBlbHNlCisgICAgICAgIHJlZyA9IFJUTDgzNjdDX1JFR19NRVRFUl9NT0RFX1NFVFRJTkcyICsgKChpbmRleCAtIDMyKSAvIDE2KTsKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChyZWcsIGluZGV4ICUgMTYsIHR5cGUpOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljU2hhcmVNZXRlclR5cGUKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgbWV0ZXIgVHlwZQorICogSW5wdXQ6CisgKiAgICAgIGluZGV4ICAgICAgIC0gc2hhcmVkIG1ldGVyIGluZGV4ICgwLTMxKQorICogT3V0cHV0OgorICogICAgICBwVHlwZSAgICAgICAtIDA6IGticHMsIDE6IHBwcworICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9GSUxURVJfTUVURVJfSUQgIC0gSW52YWxpZCBtZXRlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljU2hhcmVNZXRlclR5cGUocnRrX3VpbnQzMiBpbmRleCwgcnRrX3VpbnQzMiAqcFR5cGUpCit7CisgICAgcnRrX3VpbnQzMiByZWc7CisKKyAgICBpZihpbmRleCA+IFJUTDgzNjdDX01FVEVSTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX0ZJTFRFUl9NRVRFUl9JRDsKKworICAgIGlmKE5VTEwgPT0gcFR5cGUpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYoaW5kZXggPCAzMikKKyAgICAgICAgcmVnID0gUlRMODM2N0NfUkVHX01FVEVSX01PREVfU0VUVElORzAgKyAoaW5kZXggLyAxNik7CisgICAgZWxzZQorICAgICAgICByZWcgPSBSVEw4MzY3Q19SRUdfTUVURVJfTU9ERV9TRVRUSU5HMiArICgoaW5kZXggLSAzMikgLyAxNik7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQocmVnLCBpbmRleCAlIDE2LCBwVHlwZSk7Cit9CisKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY01ldGVyRXhjZWVkU3RhdHVzCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQ2xlYXIgc2hhcmVkIG1ldGVyIHN0YXR1cworICogSW5wdXQ6CisgKiAgICAgIGluZGV4ICAgICAgIC0gaGFyZWQgbWV0ZXIgaW5kZXggKDAtMzEpCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfRklMVEVSX01FVEVSX0lEICAtIEludmFsaWQgbWV0ZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY01ldGVyRXhjZWVkU3RhdHVzKHJ0a191aW50MzIgaW5kZXgpCit7CisgICAgaWYoaW5kZXggPiBSVEw4MzY3Q19NRVRFUk1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9GSUxURVJfTUVURVJfSUQ7CisKKyAgICBpZihpbmRleCA8IDMyKQorICAgICAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19NRVRFUl9PVkVSUkFURV9JTkRJQ0FUT1JfUkVHKGluZGV4KSwgUlRMODM2N0NfTUVURVJfRVhDRUVEX09GRlNFVChpbmRleCksIDEpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX01FVEVSX09WRVJSQVRFX0lORElDQVRPUjIgKyAoKGluZGV4IC0gMzIpID4+IDQpLCBSVEw4MzY3Q19NRVRFUl9FWENFRURfT0ZGU0VUKGluZGV4KSwgMSk7CisKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNNZXRlckV4Y2VlZFN0YXR1cworICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBzaGFyZWQgbWV0ZXIgc3RhdHVzCisgKiBJbnB1dDoKKyAqICAgICAgaW5kZXggICAtIGhhcmVkIG1ldGVyIGluZGV4ICgwLTMxKQorICogICAgICBwU3RhdHVzICAgICAtIDA6IHJhdGUgZG9lc24ndCBleGNlZWQgICAgMTogcmF0ZSBleGNlZWRzCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfRklMVEVSX01FVEVSX0lEICAtIEludmFsaWQgbWV0ZXIKKyAqIE5vdGU6CisgKiAgICAgIElmIHJhdGUgaXMgb3ZlciByYXRlKjhLYnBzIG9mIGEgbWV0ZXIsIHRoZSBzdGF0ZSBiaXQgb2YgdGhpcyBtZXRlciBpcyBzZXQgdG8gMS4KKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY01ldGVyRXhjZWVkU3RhdHVzKHJ0a191aW50MzIgaW5kZXgsIHJ0a191aW50MzIqIHBTdGF0dXMpCit7CisgICAgaWYoaW5kZXggPiBSVEw4MzY3Q19NRVRFUk1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9GSUxURVJfTUVURVJfSUQ7CisKKyAgICBpZihpbmRleCA8IDMyKQorICAgICAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19NRVRFUl9PVkVSUkFURV9JTkRJQ0FUT1JfUkVHKGluZGV4KSwgUlRMODM2N0NfTUVURVJfRVhDRUVEX09GRlNFVChpbmRleCksIHBTdGF0dXMpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX01FVEVSX09WRVJSQVRFX0lORElDQVRPUjIgKyAoKGluZGV4IC0gMzIpID4+IDQpLCBSVEw4MzY3Q19NRVRFUl9FWENFRURfT0ZGU0VUKGluZGV4KSwgcFN0YXR1cyk7Cit9CisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X21pYi5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfbWliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlhYWEwMQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X21pYi5jCkBAIC0wLDAgKzEsNTcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNzYzMDYgJAorICogJERhdGU6IDIwMTctMDMtMDggMTU6MTM6NTggKzA4MDAgKOmAseS4iSwgMDgg5LiJ5pyIIDIwMTcpICQKKyAqCisgKiBQdXJwb3NlIDogUlRMODM2N0Mgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJIGZvciBSVEw4MzY3QworICogRmVhdHVyZSA6IE1JQiByZWxhdGVkIGZ1bmN0aW9ucworICoKKyAqLworCisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl9taWIuaD4KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNNSUJzQ291bnRlclJlc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgUmVzZXQgZ2xvYmFsL3F1ZXVlIG1hbmFnZSBvciBwZXItcG9ydCBNSUIgY291bnRlcgorICogSW5wdXQ6CisgKiAgICAgIGdyZXNldCAgLSBHbG9iYWwgcmVzZXQKKyAqICAgICAgcW1yZXNldCAtIFF1ZXVlIG1hZ2FuZW1lbnQgcmVzZXQKKyAqICAgICAgcG9ydG1hc2sgICAgLSBQb3J0IHJlc2V0IG1hc2sKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNNSUJzQ291bnRlclJlc2V0KHJ0a191aW50MzIgZ3Jlc2V0LCBydGtfdWludDMyIHFtcmVzZXQsIHJ0a191aW50MzIgcG9ydG1hc2spCit7CisgICAgcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcmVnRGF0YTsKKyAgICBydGtfdWludDMyIHJlZ0JpdHM7CisKKyAgICByZWdCaXRzID0gUlRMODM2N0NfR0xPQkFMX1JFU0VUX01BU0sgfAorICAgICAgICAgICAgICAgIFJUTDgzNjdDX1FNX1JFU0VUX01BU0sgfAorICAgICAgICAgICAgICAgICAgICBSVEw4MzY3Q19NSUJfUE9SVDA3X01BU0sgfAorICAgICAgICAgICAgICAgICAgICAoKHJ0a191aW50MzIpMHg3IDw8IDEzKTsKKyAgICByZWdEYXRhID0gKChncmVzZXQgPDwgUlRMODM2N0NfR0xPQkFMX1JFU0VUX09GRlNFVCkgJiBSVEw4MzY3Q19HTE9CQUxfUkVTRVRfTUFTSykgfAorICAgICAgICAgICAgICAgICgocW1yZXNldCA8PCBSVEw4MzY3Q19RTV9SRVNFVF9PRkZTRVQpICYgUlRMODM2N0NfUU1fUkVTRVRfTUFTSykgfAorICAgICAgICAgICAgICAgICgoKHBvcnRtYXNrICYgMHhGRikgPDwgUlRMODM2N0NfUE9SVDBfUkVTRVRfT0ZGU0VUKSAmIFJUTDgzNjdDX01JQl9QT1JUMDdfTUFTSykgfAorICAgICAgICAgICAgICAgICgoKHBvcnRtYXNrID4+IDgpJjB4NykgPDwgMTMpOworCisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfTUlCX0NUUkwwLCByZWdCaXRzLCAocmVnRGF0YSA+PiBSVEw4MzY3Q19QT1JUMF9SRVNFVF9PRkZTRVQpKTsKKworICAgIHJldHVybiByZXRWYWw7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljTUlCc0NvdW50ZXIKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgTUlCcyBjb3VudGVyCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH43KQorICogICAgICBtaWJJZHggICAgICAtIE1JQiBjb3VudGVyIGluZGV4CisgKiAgICAgIHBDb3VudGVyICAgIC0gTUlCIHJldHJpdmVkIGNvdW50ZXIKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogICAgICBSVF9FUlJfQlVTWVdBSVRfVElNRU9VVCAtIE1JQiBpcyBidXN5IGF0IHJldHJpZXZpbmcKKyAqICAgICAgUlRfRVJSX1NUQVRfQ05UUl9GQUlMICAgLSBNSUIgaXMgcmVzZXR0aW5nCisgKiBOb3RlOgorICogICAgICBCZWZvcmUgTUlCcyBjb3VudGVyIHJldHJpZXZpbmcsIHdyaXR0aW5nIGFjY2Vzc2luZyBhZGRyZXNzIHRvIEFTSUMgYXQgZmlyc3QgYW5kIGNoZWNrIHRoZSBNSUIKKyAqICAgICAgY29udHJvbCByZWdpc3RlciBzdGF0dXMuIElmIGJ1c3kgYml0IG9mIE1JQiBjb250cm9sIGlzIHNldCwgdGhhdCBtZWFucyBNSUIgY291bnRlciBoYXZlIGJlZW4KKyAqICAgICAgd2FpdGluZyBmb3IgcHJlcGFyaW5nLCB0aGVuIHNvZnR3YXJlIG11c3Qgd2FpdCBhdGZlciB0aGlzIGJ1c3kgZmxhZyByZXNldCBieSBBU0lDLiBUaGlzIGRyaXZlcgorICogICAgICBkaWQgbm90IHJlY3ljbGUgcmVhZGluZyB1c2VyIGRlc2lyZWQgY291bnRlci4gU29mdHdhcmUgbXVzdCB1c2UgZHJpdmVyIGFnYWluIHRvIGdldCBNSUIgY291bnRlcgorICogICAgICBpZiByZXR1cm4gdmFsdWUgaXMgbm90IFJUX0VSUl9PSy4KKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY01JQnNDb3VudGVyKHJ0a191aW50MzIgcG9ydCwgUlRMODM2N0NfTUlCQ09VTlRFUiBtaWJJZHgsIHJ0a191aW50NjQqIHBDb3VudGVyKQoreworICAgIHJldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHJlZ0FkZHI7CisgICAgcnRrX3VpbnQzMiByZWdEYXRhOworICAgIHJ0a191aW50MzIgbWliQWRkcjsKKyAgICBydGtfdWludDMyIG1pYk9mZj0wOworCisgICAgLyogYWRkcmVzcyBvZmZzZXQgdG8gTUlCcyBjb3VudGVyICovCisgICAgQ09OU1QgcnRrX3VpbnQxNiBtaWJMZW5ndGhbUlRMODM2N0NfTUlCU19OVU1CRVJdPSB7CisgICAgICAgIDQsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsCisgICAgICAgIDQsMiwyLDIsMiwyLDIsMiwyLAorICAgICAgICA0LDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwKKyAgICAgICAgMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMn07CisKKyAgICBydGtfdWludDE2IGk7CisgICAgcnRrX3VpbnQ2NCBtaWJDb3VudGVyOworCisKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVElETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICBpZihtaWJJZHggPj0gUlRMODM2N0NfTUlCU19OVU1CRVIpCisgICAgICAgIHJldHVybiBSVF9FUlJfU1RBVF9JTlZBTElEX0NOVFI7CisKKyAgICBpZihkb3QxZFRwTGVhcm5lZEVudHJ5RGlzY2FyZHMgPT0gbWliSWR4KQorICAgIHsKKyAgICAgICAgbWliQWRkciA9IFJUTDgzNjdDX01JQl9MRUFSTkVOVFJZRElTQ0FSRF9PRkZTRVQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGkgPSAwOworICAgICAgICBtaWJPZmYgPSBSVEw4MzY3Q19NSUJfUE9SVF9PRkZTRVQgKiBwb3J0OworCisgICAgICAgIGlmKHBvcnQgPiA3KQorICAgICAgICAgICAgbWliT2ZmID0gbWliT2ZmICsgNjg7CisKKyAgICAgICAgd2hpbGUoaSA8IG1pYklkeCkKKyAgICAgICAgeworICAgICAgICAgICAgbWliT2ZmICs9IG1pYkxlbmd0aFtpXTsKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgfQorCisgICAgICAgIG1pYkFkZHIgPSBtaWJPZmY7CisgICAgfQorCisKKyAgICAvKndyaXRpbmcgYWNjZXNzIGNvdW50ZXIgYWRkcmVzcyBmaXJzdCovCisgICAgLypUaGlzIGFkZHJlc3MgaXMgU1JBTSBhZGRyZXNzLCBhbmQgU1JBTSBhZGRyZXNzID0gTUlCIHJlZ2lzdGVyIGFkZHJlc3MgPj4gMiovCisgICAgLyp0aGVuIEFTSUMgd2lsbCBwcmVwYXJlIDY0Yml0cyBjb3VudGVyIHdhaXQgZm9yIGJlaW5nIHJldHJpdmVkKi8KKyAgICAvKldyaXRlIE1pYiByZWxhdGVkIGFkZHJlc3MgdG8gYWNjZXNzIGNvbnRyb2wgcmVnaXN0ZXIqLworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX01JQl9BRERSRVNTLCAobWliQWRkciA+PiAyKSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworCisKKyAgICAvKiBwb2xsaW5nIGJ1c3kgZmxhZyAqLworICAgIGkgPSAxMDA7CisgICAgd2hpbGUoaSA+IDApCisgICAgeworICAgICAgICAvKnJlYWQgTUlCIGNvbnRyb2wgcmVnaXN0ZXIqLworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX01JQl9DVFJMX1JFRywmcmVnRGF0YSk7CisgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIGlmKChyZWdEYXRhICYgUlRMODM2N0NfTUlCX0NUUkwwX0JVU1lfRkxBR19NQVNLKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGktLTsKKyAgICB9CisKKyAgICBpZihyZWdEYXRhICYgUlRMODM2N0NfTUlCX0NUUkwwX0JVU1lfRkxBR19NQVNLKQorICAgICAgICByZXR1cm4gUlRfRVJSX0JVU1lXQUlUX1RJTUVPVVQ7CisKKyAgICBpZihyZWdEYXRhICYgUlRMODM2N0NfUkVTRVRfRkxBR19NQVNLKQorICAgICAgICByZXR1cm4gUlRfRVJSX1NUQVRfQ05UUl9GQUlMOworCisgICAgbWliQ291bnRlciA9IDA7CisgICAgaSA9IG1pYkxlbmd0aFttaWJJZHhdOworICAgIGlmKDQgPT0gaSkKKyAgICAgICAgcmVnQWRkciA9IFJUTDgzNjdDX01JQl9DT1VOVEVSX0JBU0VfUkVHICsgMzsKKyAgICBlbHNlCisgICAgICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19NSUJfQ09VTlRFUl9CQVNFX1JFRyArICgobWliT2ZmICsgMSkgJSA0KTsKKworICAgIHdoaWxlKGkpCisgICAgeworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKHJlZ0FkZHIsICZyZWdEYXRhKTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgbWliQ291bnRlciA9IChtaWJDb3VudGVyIDw8IDE2KSB8IChyZWdEYXRhICYgMHhGRkZGKTsKKworICAgICAgICByZWdBZGRyIC0tOworICAgICAgICBpIC0tOworCisgICAgfQorCisgICAgKnBDb3VudGVyID0gbWliQ291bnRlcjsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNNSUJzTG9nQ291bnRlcgorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBNSUJzIExvZ2dpbiBjb3VudGVyCisgKiBJbnB1dDoKKyAqICAgICAgaW5kZXggICAgICAgLSBUaGUgaW5kZXggb2YgMzIgbG9nZ2luZyBjb3VudGVyICgwIH4gMzEpCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfRU5UUllfSU5ERVggICAgICAtIFdyb25nIGluZGV4CisgKiAgICAgIFJUX0VSUl9CVVNZV0FJVF9USU1FT1VUIC0gTUlCIGlzIGJ1c3kgYXQgcmV0cmlldmluZworICogICAgICBSVF9FUlJfU1RBVF9DTlRSX0ZBSUwgICAtIE1JQiBpcyByZXNldHRpbmcKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGdldCAzMiBsb2dnaW5nIGNvdW50ZXIKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY01JQnNMb2dDb3VudGVyKHJ0a191aW50MzIgaW5kZXgsIHJ0a191aW50MzIgKnBDb3VudGVyKQoreworICAgIHJldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHJlZ0FkZHI7CisgICAgcnRrX3VpbnQzMiByZWdEYXRhOworICAgIHJ0a191aW50MzIgbWliQWRkcjsKKyAgICBydGtfdWludDE2IGk7CisgICAgcnRrX3VpbnQ2NCBtaWJDb3VudGVyOworCisgICAgaWYoaW5kZXggPiBSVEw4MzY3Q19NSUJfTUFYX0xPR19DTlRfSURYKQorICAgICAgICByZXR1cm4gUlRfRVJSX0VOVFJZX0lOREVYOworCisgICAgbWliQWRkciA9IFJUTDgzNjdDX01JQl9MT0dfQ05UX09GRlNFVCArICgoaW5kZXggLyAyKSAqIDQpOworCisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfTUlCX0FERFJFU1MsIChtaWJBZGRyID4+IDIpKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgLypyZWFkIE1JQiBjb250cm9sIHJlZ2lzdGVyKi8KKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX01JQl9DVFJMX1JFRywgJnJlZ0RhdGEpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZihyZWdEYXRhICYgUlRMODM2N0NfTUlCX0NUUkwwX0JVU1lfRkxBR19NQVNLKQorICAgICAgICByZXR1cm4gUlRfRVJSX0JVU1lXQUlUX1RJTUVPVVQ7CisKKyAgICBpZihyZWdEYXRhICYgUlRMODM2N0NfUkVTRVRfRkxBR19NQVNLKQorICAgICAgICByZXR1cm4gUlRfRVJSX1NUQVRfQ05UUl9GQUlMOworCisgICAgbWliQ291bnRlciA9IDA7CisgICAgaWYoKGluZGV4ICUgMikgPT0gMSkKKyAgICAgICAgcmVnQWRkciA9IFJUTDgzNjdDX01JQl9DT1VOVEVSX0JBU0VfUkVHICsgMzsKKyAgICBlbHNlCisgICAgICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19NSUJfQ09VTlRFUl9CQVNFX1JFRyArIDE7CisKKyAgICBmb3IoaSA9IDA7IGkgPD0gMTsgaSsrKQorICAgIHsKKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhyZWdBZGRyLCAmcmVnRGF0YSk7CisKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgbWliQ291bnRlciA9IChtaWJDb3VudGVyIDw8IDE2KSB8IChyZWdEYXRhICYgMHhGRkZGKTsKKworICAgICAgICByZWdBZGRyIC0tOworICAgIH0KKworICAgICpwQ291bnRlciA9IG1pYkNvdW50ZXI7CisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY01JQnNDb250cm9sCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IE1JQiBjb250cm9sIHJlZ2lzdGVyCisgKiBJbnB1dDoKKyAqICAgICAgcE1hc2sgICAgICAgLSBNSUIgY29udHJvbCBzdGF0dXMgbWFzayBiaXRbMF0tYnVzeSBiaXRbMV0KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBTb2Z0d2FyZSBuZWVkIHRvIGNoZWNrIHRoaXMgY29udHJvbCByZWdpc3RlciBhdGZlciBkb2luZyBwb3J0IHJlc2V0dGluZyBvciBnbG9iYWwgcmVzZXR0aW5nCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNNSUJzQ29udHJvbChydGtfdWludDMyKiBwTWFzaykKK3sKKyAgICByZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiByZWdEYXRhOworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19NSUJfQ1RSTF9SRUcsICZyZWdEYXRhKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgKnBNYXNrID0gcmVnRGF0YSAmIChSVEw4MzY3Q19NSUJfQ1RSTDBfQlVTWV9GTEFHX01BU0sgfCBSVEw4MzY3Q19SRVNFVF9GTEFHX01BU0spOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNNSUJzUmVzZXRWYWx1ZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIFJlc2V0IGFsbCBjb3VudGVyIHRvIDAgb3IgMQorICogSW5wdXQ6CisgKiAgICAgIHZhbHVlICAgICAgICAgICAtIFJlc2V0IHRvIHZhbHVlIDAgb3IgMQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljTUlCc1Jlc2V0VmFsdWUocnRrX3VpbnQzMiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfTUlCX0NUUkwwLCBSVEw4MzY3Q19SRVNFVF9WQUxVRV9PRkZTRVQsIHZhbHVlKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNNSUJzUmVzZXRWYWx1ZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIFJlc2V0IGFsbCBjb3VudGVyIHRvIDAgb3IgMQorICogSW5wdXQ6CisgKiAgICAgIHZhbHVlICAgICAgICAgICAtIFJlc2V0IHRvIHZhbHVlIDAgb3IgMQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljTUlCc1Jlc2V0VmFsdWUocnRrX3VpbnQzMiogdmFsdWUpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX01JQl9DVFJMMCwgUlRMODM2N0NfUkVTRVRfVkFMVUVfT0ZGU0VULCB2YWx1ZSk7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNNSUJzVXNhZ2VNb2RlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgTUlCIHVwZGF0ZSBtb2RlCisgKiBJbnB1dDoKKyAqICAgICAgbW9kZSAgICAgICAgICAgIC0gMTogbGF0Y2ggYWxsIE1JQnMgYnkgdGltZXIgMDpub3JtYWwgZnJlZSBydW4gY291bnRpbmcKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY01JQnNVc2FnZU1vZGUocnRrX3VpbnQzMiBtb2RlKQoreworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19NSUJfQ1RSTDQsIFJUTDgzNjdDX01JQl9VU0FHRV9NT0RFX09GRlNFVCwgbW9kZSk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljTUlCc1VzYWdlTW9kZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIE1JQiB1cGRhdGUgbW9kZQorICogSW5wdXQ6CisgKiAgICAgIHBNb2RlICAgICAgICAgICAtIDE6IGxhdGNoIGFsbCBNSUJzIGJ5IHRpbWVyIDA6bm9ybWFsIGZyZWUgcnVuIGNvdW50aW5nCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNNSUJzVXNhZ2VNb2RlKHJ0a191aW50MzIqIHBNb2RlKQoreworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19NSUJfQ1RSTDQsIFJUTDgzNjdDX01JQl9VU0FHRV9NT0RFX09GRlNFVCwgcE1vZGUpOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljTUlCc1RpbWVyCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgTUlCIGxhdGNoaW5nIHRpbWVyCisgKiBJbnB1dDoKKyAqICAgICAgdGltZXIgICAgICAgICAgIC0gbGF0Y2ggdGltZXIsIHVuaXQgMSBzZWNvbmQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY01JQnNUaW1lcihydGtfdWludDMyIHRpbWVyKQoreworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfTUlCX0NUUkw0LCBSVEw4MzY3Q19NSUJfVElNRVJfTUFTSywgdGltZXIpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY01JQnNUaW1lcgorICogRGVzY3JpcHRpb246CisgKiAgICAgIE1JQiBsYXRjaGluZyB0aW1lcgorICogSW5wdXQ6CisgKiAgICAgIHBUaW1lciAgICAgICAgICAtIGxhdGNoIHRpbWVyLCB1bml0IDEgc2Vjb25kCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNNSUJzVGltZXIocnRrX3VpbnQzMiogcFRpbWVyKQoreworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfTUlCX0NUUkw0LCBSVEw4MzY3Q19NSUJfVElNRVJfTUFTSywgcFRpbWVyKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNNSUJzTG9nZ2luZ01vZGUKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBNSUIgbG9nZ2luZyBjb3VudGVyIG1vZGUKKyAqIElucHV0OgorICogICAgICBpbmRleCAgIC0gbG9nZ2luZyBjb3VudGVyIG1vZGUgaW5kZXggKDB+MTUpCisgKiAgICAgIG1vZGUgICAgLSAwOjMyLWJpdHMgbW9kZSAxOjY0LWJpdHMgbW9kZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAgICAgLSBpbnB1dCBwYXJhbWV0ZXIgb3V0IG9mIHJhbmdlCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNNSUJzTG9nZ2luZ01vZGUocnRrX3VpbnQzMiBpbmRleCwgcnRrX3VpbnQzMiBtb2RlKQoreworICAgIGlmKGluZGV4ID4gUlRMODM2N0NfTUlCX01BWF9MT0dfTU9ERV9JRFgpCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX01JQl9DVFJMMywgaW5kZXgsbW9kZSk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljTUlCc0xvZ2dpbmdNb2RlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgTUlCIGxvZ2dpbmcgY291bnRlciBtb2RlCisgKiBJbnB1dDoKKyAqICAgICAgaW5kZXggICAtIGxvZ2dpbmcgY291bnRlciBtb2RlIGluZGV4ICgwfjE1KQorICogICAgICBwTW9kZSAgIC0gMDozMi1iaXRzIG1vZGUgMTo2NC1iaXRzIG1vZGUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgICAgIC0gaW5wdXQgcGFyYW1ldGVyIG91dCBvZiByYW5nZQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljTUlCc0xvZ2dpbmdNb2RlKHJ0a191aW50MzIgaW5kZXgsIHJ0a191aW50MzIqIHBNb2RlKQoreworICAgIGlmKGluZGV4ID4gUlRMODM2N0NfTUlCX01BWF9MT0dfTU9ERV9JRFgpCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX01JQl9DVFJMMywgaW5kZXgscE1vZGUpOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljTUlCc0xvZ2dpbmdUeXBlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgTUlCIGxvZ2dpbmcgY291bnRlciB0eXBlCisgKiBJbnB1dDoKKyAqICAgICAgaW5kZXggICAtIGxvZ2dpbmcgY291bnRlciBtb2RlIGluZGV4ICgwfjE1KQorICogICAgICB0eXBlICAgIC0gMDpQYWNrZXQgY291bnQgMTpCeXRlIGNvdW50CisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFICAgICAtIGlucHV0IHBhcmFtZXRlciBvdXQgb2YgcmFuZ2UKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY01JQnNMb2dnaW5nVHlwZShydGtfdWludDMyIGluZGV4LCBydGtfdWludDMyIHR5cGUpCit7CisgICAgaWYoaW5kZXggPiBSVEw4MzY3Q19NSUJfTUFYX0xPR19NT0RFX0lEWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfTUlCX0NUUkw1LCBpbmRleCx0eXBlKTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY01JQnNMb2dnaW5nVHlwZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIE1JQiBsb2dnaW5nIGNvdW50ZXIgdHlwZQorICogSW5wdXQ6CisgKiAgICAgIGluZGV4ICAgLSBsb2dnaW5nIGNvdW50ZXIgbW9kZSBpbmRleCAoMH4xNSkKKyAqICAgICAgcFR5cGUgICAtIDA6UGFja2V0IGNvdW50IDE6Qnl0ZSBjb3VudAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAgICAgLSBpbnB1dCBwYXJhbWV0ZXIgb3V0IG9mIHJhbmdlCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNNSUJzTG9nZ2luZ1R5cGUocnRrX3VpbnQzMiBpbmRleCwgcnRrX3VpbnQzMiogcFR5cGUpCit7CisgICAgaWYoaW5kZXggPiBSVEw4MzY3Q19NSUJfTUFYX0xPR19NT0RFX0lEWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfTUlCX0NUUkw1LCBpbmRleCxwVHlwZSk7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNNSUJzUmVzZXRMb2dnaW5nQ291bnRlcgorICogRGVzY3JpcHRpb246CisgKiAgICAgIE1JQiBsb2dnaW5nIGNvdW50ZXIgdHlwZQorICogSW5wdXQ6CisgKiAgICAgIGluZGV4ICAgLSBsb2dnaW5nIGNvdW50ZXIgaW5kZXggKDB+MzEpCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFICAgICAtIGlucHV0IHBhcmFtZXRlciBvdXQgb2YgcmFuZ2UKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY01JQnNSZXNldExvZ2dpbmdDb3VudGVyKHJ0a191aW50MzIgaW5kZXgpCit7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgaWYoaW5kZXggPiBSVEw4MzY3Q19NSUJfTUFYX0xPR19DTlRfSURYKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIGlmKGluZGV4IDwgMTYpCisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX01JQl9DVFJMMSwgMTw8aW5kZXgpOworICAgIGVsc2UKKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfTUlCX0NUUkwyLCAxPDwoaW5kZXgtMTYpKTsKKworICAgIHJldHVybiByZXRWYWw7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNNSUJzTGVuZ3RoCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IE1JQiBsZW5ndGggY291dGluZyBtb2RlCisgKiBJbnB1dDoKKyAqICAgICAgdHhMZW5ndGhNb2RlICAgIC0gMDogdGFnIGxlbmd0aCBkb2Vzbid0IGJlIGNvdW50ZWQuIDE6IHRhZyBsZW5ndGggaXMgY291bnRlZC4KKyAqICAgICAgcnhMZW5ndGhNb2RlICAgIC0gMDogdGFnIGxlbmd0aCBkb2Vzbid0IGJlIGNvdW50ZWQuIDE6IHRhZyBsZW5ndGggaXMgY291bnRlZC4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgICAgIC0gaW5wdXQgcGFyYW1ldGVyIG91dCBvZiByYW5nZQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljTUlCc0xlbmd0aChydGtfdWludDMyIHR4TGVuZ3RoTW9kZSwgcnRrX3VpbnQzMiByeExlbmd0aE1vZGUpCit7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19NSUJfUk1PTl9MRU5fQ1RSTCwgUlRMODM2N0NfVFhfTEVOR1RIX0NUUkxfT0ZGU0VULCB0eExlbmd0aE1vZGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX01JQl9STU9OX0xFTl9DVFJMLCBSVEw4MzY3Q19SWF9MRU5HVEhfQ1RSTF9PRkZTRVQsIHJ4TGVuZ3RoTW9kZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNNSUJzTGVuZ3RoCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IE1JQiBsZW5ndGggY291dGluZyBtb2RlCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZS4KKyAqIE91dHB1dDoKKyAqICAgICAgcFR4TGVuZ3RoTW9kZSAtIDA6IHRhZyBsZW5ndGggZG9lc24ndCBiZSBjb3VudGVkLiAxOiB0YWcgbGVuZ3RoIGlzIGNvdW50ZWQuCisgKiAgICAgIHBSeExlbmd0aE1vZGUgLSAwOiB0YWcgbGVuZ3RoIGRvZXNuJ3QgYmUgY291bnRlZC4gMTogdGFnIGxlbmd0aCBpcyBjb3VudGVkLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgICAgIC0gaW5wdXQgcGFyYW1ldGVyIG91dCBvZiByYW5nZQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljTUlCc0xlbmd0aChydGtfdWludDMyICpwVHhMZW5ndGhNb2RlLCBydGtfdWludDMyICpwUnhMZW5ndGhNb2RlKQoreworICAgIHJldF90IHJldFZhbDsKKworICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfTUlCX1JNT05fTEVOX0NUUkwsIFJUTDgzNjdDX1RYX0xFTkdUSF9DVFJMX09GRlNFVCwgcFR4TGVuZ3RoTW9kZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfTUlCX1JNT05fTEVOX0NUUkwsIFJUTDgzNjdDX1JYX0xFTkdUSF9DVFJMX09GRlNFVCwgcFJ4TGVuZ3RoTW9kZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X21pcnJvci5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfbWlycm9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU5NDVmZgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X21pcnJvci5jCkBAIC0wLDAgKzEsNDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNzYzMDYgJAorICogJERhdGU6IDIwMTctMDMtMDggMTU6MTM6NTggKzA4MDAgKOmAseS4iSwgMDgg5LiJ5pyIIDIwMTcpICQKKyAqCisgKiBQdXJwb3NlIDogUlRMODM2N0Mgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJIGZvciBSVEw4MzY3QworICogRmVhdHVyZSA6IFBvcnQgbWlycm9yIHJlbGF0ZWQgZnVuY3Rpb25zCisgKgorICovCisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl9taXJyb3IuaD4KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNQb3J0TWlycm9yCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHBvcnQgbWlycm9yIGZ1bmN0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgc291cmNlICAtIFNvdXJjZSBwb3J0CisgKiAgICAgIG1vbml0b3IgLSBNb25pdG9yIChkZXN0aW5hdGlvbikgcG9ydAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNQb3J0TWlycm9yKHJ0a191aW50MzIgc291cmNlLCBydGtfdWludDMyIG1vbml0b3IpCit7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgaWYoKHNvdXJjZSA+IFJUTDgzNjdDX1BPUlRJRE1BWCkgfHwgKG1vbml0b3IgPiBSVEw4MzY3Q19QT1JUSURNQVgpKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19NSVJST1JfQ1RSTF9SRUcsIFJUTDgzNjdDX01JUlJPUl9TT1VSQ0VfUE9SVF9NQVNLLCBzb3VyY2UpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19NSVJST1JfQ1RSTF9SRUcsIFJUTDgzNjdDX01JUlJPUl9NT05JVE9SX1BPUlRfTUFTSywgbW9uaXRvcik7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljUG9ydE1pcnJvcgorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwb3J0IG1pcnJvciBmdW5jdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHBTb3VyY2UgICAgIC0gU291cmNlIHBvcnQKKyAqICAgICAgcE1vbml0b3IgLSBNb25pdG9yIChkZXN0aW5hdGlvbikgcG9ydAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljUG9ydE1pcnJvcihydGtfdWludDMyICpwU291cmNlLCBydGtfdWludDMyICpwTW9uaXRvcikKK3sKKyAgICByZXRfdCByZXRWYWw7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19NSVJST1JfQ1RSTF9SRUcsIFJUTDgzNjdDX01JUlJPUl9TT1VSQ0VfUE9SVF9NQVNLLCBwU291cmNlKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX01JUlJPUl9DVFJMX1JFRywgUlRMODM2N0NfTUlSUk9SX01PTklUT1JfUE9SVF9NQVNLLCBwTW9uaXRvcik7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljUG9ydE1pcnJvclJ4RnVuY3Rpb24KKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgdGhlIG1pcnJvciBmdW5jdGlvbiBvbiBSWCBvZiB0aGUgbWlycm9yZWQKKyAqIElucHV0OgorICogICAgICBlbmFibGVkICAgICAtIDE6IGVuYWJsZWQsIDA6IGRpc2FibGVkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNQb3J0TWlycm9yUnhGdW5jdGlvbihydGtfdWludDMyIGVuYWJsZWQpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfTUlSUk9SX0NUUkxfUkVHLCBSVEw4MzY3Q19NSVJST1JfUlhfT0ZGU0VULCBlbmFibGVkKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNQb3J0TWlycm9yUnhGdW5jdGlvbgorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCB0aGUgbWlycm9yIGZ1bmN0aW9uIG9uIFJYIG9mIHRoZSBtaXJyb3JlZAorICogSW5wdXQ6CisgKiAgICAgIHBFbmFibGVkICAgIC0gMTogZW5hYmxlZCwgMDogZGlzYWJsZWQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BvcnRNaXJyb3JSeEZ1bmN0aW9uKHJ0a191aW50MzIqIHBFbmFibGVkKQoreworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX01JUlJPUl9DVFJMX1JFRywgUlRMODM2N0NfTUlSUk9SX1JYX09GRlNFVCwgcEVuYWJsZWQpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1BvcnRNaXJyb3JUeEZ1bmN0aW9uCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHRoZSBtaXJyb3IgZnVuY3Rpb24gb24gVFggb2YgdGhlIG1pcnJvcmVkCisgKiBJbnB1dDoKKyAqICAgICAgZW5hYmxlZCAgICAgLSAxOiBlbmFibGVkLCAwOiBkaXNhYmxlZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljUG9ydE1pcnJvclR4RnVuY3Rpb24ocnRrX3VpbnQzMiBlbmFibGVkKQoreworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX01JUlJPUl9DVFJMX1JFRywgUlRMODM2N0NfTUlSUk9SX1RYX09GRlNFVCwgZW5hYmxlZCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljUG9ydE1pcnJvclR4RnVuY3Rpb24KKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgdGhlIG1pcnJvciBmdW5jdGlvbiBvbiBUWCBvZiB0aGUgbWlycm9yZWQKKyAqIElucHV0OgorICogICAgICBwRW5hYmxlZCAgICAtIDE6IGVuYWJsZWQsIDA6IGRpc2FibGVkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNQb3J0TWlycm9yVHhGdW5jdGlvbihydGtfdWludDMyKiBwRW5hYmxlZCkKK3sKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19NSVJST1JfQ1RSTF9SRUcsIFJUTDgzNjdDX01JUlJPUl9UWF9PRkZTRVQsIHBFbmFibGVkKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNQb3J0TWlycm9ySXNvbGF0aW9uCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHRoZSB0cmFmZmljIGlzb2xhdGlvbiBvbiBtb25pdG9yIHBvcnQKKyAqIElucHV0OgorICogICAgICBlbmFibGVkICAgICAtIDE6IGVuYWJsZWQsIDA6IGRpc2FibGVkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNQb3J0TWlycm9ySXNvbGF0aW9uKHJ0a191aW50MzIgZW5hYmxlZCkKK3sKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19NSVJST1JfQ1RSTF9SRUcsIFJUTDgzNjdDX01JUlJPUl9JU09fT0ZGU0VULCBlbmFibGVkKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNQb3J0TWlycm9ySXNvbGF0aW9uCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHRoZSB0cmFmZmljIGlzb2xhdGlvbiBvbiBtb25pdG9yIHBvcnQKKyAqIElucHV0OgorICogICAgICBwRW5hYmxlZCAgICAtIDE6IGVuYWJsZWQsIDA6IGRpc2FibGVkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNQb3J0TWlycm9ySXNvbGF0aW9uKHJ0a191aW50MzIqIHBFbmFibGVkKQoreworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX01JUlJPUl9DVFJMX1JFRywgUlRMODM2N0NfTUlSUk9SX0lTT19PRkZTRVQsIHBFbmFibGVkKTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1BvcnRNaXJyb3JNYXNrCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IG1pcnJvciBzb3VyY2UgcG9ydCBtYXNrCisgKiBJbnB1dDoKKyAqICAgICAgU291cmNlUG9ydG1hc2sgIC0gU291cmNlIFBvcnRtYXNrCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX01BU0stIFBvcnQgTWFzayBFcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljUG9ydE1pcnJvck1hc2socnRrX3VpbnQzMiBTb3VyY2VQb3J0bWFzaykKK3sKKyAgICBpZiggU291cmNlUG9ydG1hc2sgPiBSVEw4MzY3Q19QT1JUTUFTSykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX01BU0s7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX01JUlJPUl9TUkNfUE1TSywgUlRMODM2N0NfTUlSUk9SX1NSQ19QTVNLX01BU0ssIFNvdXJjZVBvcnRtYXNrKTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1BvcnRNaXJyb3JNYXNrCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IG1pcnJvciBzb3VyY2UgcG9ydCBtYXNrCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwU291cmNlUG9ydG1hc2sgICAgIC0gU291cmNlIFBvcnRtYXNrCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9NQVNLLSBQb3J0IE1hc2sgRXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BvcnRNaXJyb3JNYXNrKHJ0a191aW50MzIgKnBTb3VyY2VQb3J0bWFzaykKK3sKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX01JUlJPUl9TUkNfUE1TSywgUlRMODM2N0NfTUlSUk9SX1NSQ19QTVNLX01BU0ssIHBTb3VyY2VQb3J0bWFzayk7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNQb3J0TWlycm9yVmxhblJ4TGVha3kKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgdGhlIG1pcnJvciBmdW5jdGlvbiBvZiBWTEFOIFJYIGxlYWt5CisgKiBJbnB1dDoKKyAqICAgICAgZW5hYmxlZCAgICAgLSAxOiBlbmFibGVkLCAwOiBkaXNhYmxlZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljUG9ydE1pcnJvclZsYW5SeExlYWt5KHJ0a191aW50MzIgZW5hYmxlZCkKK3sKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfTUlSUk9SX0NUUkwyLCBSVEw4MzY3Q19NSVJST1JfUlhfVkxBTl9MRUFLWV9PRkZTRVQsIGVuYWJsZWQpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1BvcnRNaXJyb3JWbGFuUnhMZWFreQorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCB0aGUgbWlycm9yIGZ1bmN0aW9uIG9mIFZMQU4gUlggbGVha3kKKyAqIElucHV0OgorICogICAgICBwRW5hYmxlZCAgICAtIDE6IGVuYWJsZWQsIDA6IGRpc2FibGVkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNQb3J0TWlycm9yVmxhblJ4TGVha3kocnRrX3VpbnQzMiogcEVuYWJsZWQpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX01JUlJPUl9DVFJMMiwgUlRMODM2N0NfTUlSUk9SX1JYX1ZMQU5fTEVBS1lfT0ZGU0VULCBwRW5hYmxlZCk7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNQb3J0TWlycm9yVmxhblR4TGVha3kKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgdGhlIG1pcnJvciBmdW5jdGlvbiBvZiBWTEFOIFRYIGxlYWt5CisgKiBJbnB1dDoKKyAqICAgICAgZW5hYmxlZCAgICAgLSAxOiBlbmFibGVkLCAwOiBkaXNhYmxlZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljUG9ydE1pcnJvclZsYW5UeExlYWt5KHJ0a191aW50MzIgZW5hYmxlZCkKK3sKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfTUlSUk9SX0NUUkwyLCBSVEw4MzY3Q19NSVJST1JfVFhfVkxBTl9MRUFLWV9PRkZTRVQsIGVuYWJsZWQpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1BvcnRNaXJyb3JWbGFuVHhMZWFreQorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCB0aGUgbWlycm9yIGZ1bmN0aW9uIG9mIFZMQU4gVFggbGVha3kKKyAqIElucHV0OgorICogICAgICBwRW5hYmxlZCAgICAtIDE6IGVuYWJsZWQsIDA6IGRpc2FibGVkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNQb3J0TWlycm9yVmxhblR4TGVha3kocnRrX3VpbnQzMiogcEVuYWJsZWQpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX01JUlJPUl9DVFJMMiwgUlRMODM2N0NfTUlSUk9SX1RYX1ZMQU5fTEVBS1lfT0ZGU0VULCBwRW5hYmxlZCk7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNQb3J0TWlycm9ySXNvbGF0aW9uUnhMZWFreQorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCB0aGUgbWlycm9yIGZ1bmN0aW9uIG9mICBJc29sYXRpb24gUlggbGVha3kKKyAqIElucHV0OgorICogICAgICBlbmFibGVkICAgICAtIDE6IGVuYWJsZWQsIDA6IGRpc2FibGVkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNQb3J0TWlycm9ySXNvbGF0aW9uUnhMZWFreShydGtfdWludDMyIGVuYWJsZWQpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX01JUlJPUl9DVFJMMiwgUlRMODM2N0NfTUlSUk9SX1JYX0lTT0xBVElPTl9MRUFLWV9PRkZTRVQsIGVuYWJsZWQpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1BvcnRNaXJyb3JJc29sYXRpb25SeExlYWt5CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHRoZSBtaXJyb3IgZnVuY3Rpb24gb2YgVkxBTiBSWCBsZWFreQorICogSW5wdXQ6CisgKiAgICAgIHBFbmFibGVkICAgIC0gMTogZW5hYmxlZCwgMDogZGlzYWJsZWQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BvcnRNaXJyb3JJc29sYXRpb25SeExlYWt5KHJ0a191aW50MzIqIHBFbmFibGVkKQoreworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19NSVJST1JfQ1RSTDIsIFJUTDgzNjdDX01JUlJPUl9SWF9JU09MQVRJT05fTEVBS1lfT0ZGU0VULCBwRW5hYmxlZCk7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNQb3J0TWlycm9ySXNvbGF0aW9uVHhMZWFreQorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCB0aGUgbWlycm9yIGZ1bmN0aW9uIG9mIElzb2xhdGlvbiBUWCBsZWFreQorICogSW5wdXQ6CisgKiAgICAgIGVuYWJsZWQgICAgIC0gMTogZW5hYmxlZCwgMDogZGlzYWJsZWQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1BvcnRNaXJyb3JJc29sYXRpb25UeExlYWt5KHJ0a191aW50MzIgZW5hYmxlZCkKK3sKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfTUlSUk9SX0NUUkwyLCBSVEw4MzY3Q19NSVJST1JfVFhfSVNPTEFUSU9OX0xFQUtZX09GRlNFVCwgZW5hYmxlZCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljUG9ydE1pcnJvcklzb2xhdGlvblR4TGVha3kKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgdGhlIG1pcnJvciBmdW5jdGlvbiBvZiBWTEFOIFRYIGxlYWt5CisgKiBJbnB1dDoKKyAqICAgICAgcEVuYWJsZWQgICAgLSAxOiBlbmFibGVkLCAwOiBkaXNhYmxlZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljUG9ydE1pcnJvcklzb2xhdGlvblR4TGVha3kocnRrX3VpbnQzMiogcEVuYWJsZWQpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX01JUlJPUl9DVFJMMiwgUlRMODM2N0NfTUlSUk9SX1RYX0lTT0xBVElPTl9MRUFLWV9PRkZTRVQsIHBFbmFibGVkKTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1BvcnRNaXJyb3JSZWFsS2VlcAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCB0aGUgbWlycm9yIGZ1bmN0aW9uIG9mIGtlZXAgZm9ybWF0CisgKiBJbnB1dDoKKyAqICAgICAgbW9kZSAgICAtIDE6IGtlZXAgb3JpZ2luYWwgZm9ybWF0LCAwOiBmb2xsb3cgVkxBTiBjb25maWcKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1BvcnRNaXJyb3JSZWFsS2VlcChydGtfdWludDMyIG1vZGUpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX01JUlJPUl9DVFJMMiwgUlRMODM2N0NfTUlSUk9SX1JFQUxLRUVQX0VOX09GRlNFVCwgbW9kZSk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljUG9ydE1pcnJvclJlYWxLZWVwCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHRoZSBtaXJyb3IgZnVuY3Rpb24gb2Yga2VlcCBmb3JtYXQKKyAqIElucHV0OgorICogICAgICBwTW9kZSAgIC0gMToga2VlcCBvcmlnaW5hbCBmb3JtYXQsIDA6IGZvbGxvdyBWTEFOIGNvbmZpZworICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljUG9ydE1pcnJvclJlYWxLZWVwKHJ0a191aW50MzIqIHBNb2RlKQoreworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19NSVJST1JfQ1RSTDIsIFJUTDgzNjdDX01JUlJPUl9SRUFMS0VFUF9FTl9PRkZTRVQsIHBNb2RlKTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1BvcnRNaXJyb3JPdmVycmlkZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCB0aGUgbWlycm9yIGZ1bmN0aW9uIG9mIG92ZXJyaWRlCisgKiBJbnB1dDoKKyAqICAgICAgcnhNaXJyb3IgICAgLSAxOiBvdXRwdXQgcnggTWlycm9yIGZvcm1hdCwgMDogb3V0cHV0IGZvcndhcmQgZm9ybWF0CisgKiAgICAgIHR4TWlycm9yICAgIC0gMTogb3V0cHV0IHR4IE1pcnJvciBmb3JtYXQsIDA6IG91dHB1dCBmb3J3YXJkIGZvcm1hdAorICogICAgICBhY2xNaXJyb3IgICAtIDE6IG91dHB1dCBBQ0wgTWlycm9yIGZvcm1hdCwgMDogb3V0cHV0IGZvcndhcmQgZm9ybWF0CisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNQb3J0TWlycm9yT3ZlcnJpZGUocnRrX3VpbnQzMiByeE1pcnJvciwgcnRrX3VpbnQzMiB0eE1pcnJvciwgcnRrX3VpbnQzMiBhY2xNaXJyb3IpCit7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX01JUlJPUl9DVFJMMywgUlRMODM2N0NfTUlSUk9SX1JYX09WRVJSSURFX0VOX09GRlNFVCwgcnhNaXJyb3IpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfTUlSUk9SX0NUUkwzLCBSVEw4MzY3Q19NSVJST1JfVFhfT1ZFUlJJREVfRU5fT0ZGU0VULCB0eE1pcnJvcikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19NSVJST1JfQ1RSTDMsIFJUTDgzNjdDX01JUlJPUl9BQ0xfT1ZFUlJJREVfRU5fT0ZGU0VULCBhY2xNaXJyb3IpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljUG9ydE1pcnJvck92ZXJyaWRlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHRoZSBtaXJyb3IgZnVuY3Rpb24gb2Ygb3ZlcnJpZGUKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBSeE1pcnJvciAgIC0gMTogb3V0cHV0IHJ4IE1pcnJvciBmb3JtYXQsIDA6IG91dHB1dCBmb3J3YXJkIGZvcm1hdAorICogICAgICBwVHhNaXJyb3IgICAtIDE6IG91dHB1dCB0eCBNaXJyb3IgZm9ybWF0LCAwOiBvdXRwdXQgZm9yd2FyZCBmb3JtYXQKKyAqICAgICAgcEFjbE1pcnJvciAgLSAxOiBvdXRwdXQgQUNMIE1pcnJvciBmb3JtYXQsIDA6IG91dHB1dCBmb3J3YXJkIGZvcm1hdAorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BvcnRNaXJyb3JPdmVycmlkZShydGtfdWludDMyICpwUnhNaXJyb3IsIHJ0a191aW50MzIgKnBUeE1pcnJvciwgcnRrX3VpbnQzMiAqcEFjbE1pcnJvcikKK3sKKyAgICByZXRfdCByZXRWYWw7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfTUlSUk9SX0NUUkwzLCBSVEw4MzY3Q19NSVJST1JfUlhfT1ZFUlJJREVfRU5fT0ZGU0VULCBwUnhNaXJyb3IpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfTUlSUk9SX0NUUkwzLCBSVEw4MzY3Q19NSVJST1JfVFhfT1ZFUlJJREVfRU5fT0ZGU0VULCBwVHhNaXJyb3IpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfTUlSUk9SX0NUUkwzLCBSVEw4MzY3Q19NSVJST1JfQUNMX09WRVJSSURFX0VOX09GRlNFVCwgcEFjbE1pcnJvcikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9taXNjLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9taXNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE4OWIxNQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X21pc2MuYwpAQCAtMCwwICsxLDI2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiAkUmV2aXNpb246IDc2MzA2ICQKKyAqICREYXRlOiAyMDE3LTAzLTA4IDE1OjEzOjU4ICswODAwICjpgLHkuIksIDA4IOS4ieaciCAyMDE3KSAkCisgKgorICogUHVycG9zZSA6IFJUTDgzNjdDIHN3aXRjaCBoaWdoLWxldmVsIEFQSSBmb3IgUlRMODM2N0MKKyAqIEZlYXR1cmUgOiBNaXNjZWxsYW5lb3VzIGZ1bmN0aW9ucworICoKKyAqLworCisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl9taXNjLmg+CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljTWFjQWRkcmVzcworICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBzd2l0Y2ggTUFDIGFkZHJlc3MKKyAqIElucHV0OgorICogICAgICBtYWMgICAgIC0gc3dpdGNoIG1hYworICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljTWFjQWRkcmVzcyhldGhlcl9hZGRyX3QgbWFjKQoreworICAgIHJldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHJlZ0RhdGE7CisgICAgcnRrX3VpbnQ4ICphY2Nlc3NQdHI7CisgICAgcnRrX3VpbnQzMiBpOworCisgICAgYWNjZXNzUHRyID0gIChydGtfdWludDgqKSZtYWM7CisKKyAgICByZWdEYXRhID0gKmFjY2Vzc1B0cjsKKyAgICBhY2Nlc3NQdHIgKys7CisgICAgcmVnRGF0YSA9IChyZWdEYXRhIDw8IDgpIHwgKmFjY2Vzc1B0cjsKKyAgICBhY2Nlc3NQdHIgKys7CisgICAgZm9yKGkgPSAwOyBpIDw9MjsgaSsrKQorICAgIHsKKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfU1dJVENIX01BQzIgLSBpLCByZWdEYXRhKTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgcmVnRGF0YSA9ICphY2Nlc3NQdHI7CisgICAgICAgIGFjY2Vzc1B0ciArKzsKKyAgICAgICAgcmVnRGF0YSA9IChyZWdEYXRhIDw8IDgpIHwgKmFjY2Vzc1B0cjsKKyAgICAgICAgYWNjZXNzUHRyICsrOworICAgIH0KKworICAgIHJldHVybiByZXRWYWw7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljTWFjQWRkcmVzcworICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBzd2l0Y2ggTUFDIGFkZHJlc3MKKyAqIElucHV0OgorICogICAgICBwTWFjICAgIC0gc3dpdGNoIG1hYworICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljTWFjQWRkcmVzcyhldGhlcl9hZGRyX3QgKnBNYWMpCit7CisgICAgcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcmVnRGF0YTsKKyAgICBydGtfdWludDggKmFjY2Vzc1B0cjsKKyAgICBydGtfdWludDMyIGk7CisKKworICAgIGFjY2Vzc1B0ciA9IChydGtfdWludDgqKXBNYWM7CisKKyAgICBmb3IoaSA9IDA7IGkgPD0gMjsgaSsrKQorICAgIHsKKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfU1dJVENIX01BQzIgLSBpLCAmcmVnRGF0YSk7CisgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICphY2Nlc3NQdHIgPSAocmVnRGF0YSAmIDB4RkYwMCkgPj4gODsKKyAgICAgICAgYWNjZXNzUHRyICsrOworICAgICAgICAqYWNjZXNzUHRyID0gcmVnRGF0YSAmIDB4RkY7CisgICAgICAgIGFjY2Vzc1B0ciArKzsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0VmFsOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0RlYnVnSW5mbworICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwZXItcG9ydCBwYWNrZXQgZm9yd2FyZCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjcpCisgKiAgICAgIHBEZWJ1Z2lmbyAgIC0gcGVyLXBvcnQgcGFja2V0IHRyYXAvZHJvcC9mb3J3YXJkIHJlYXNvbgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNEZWJ1Z0luZm8ocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyICpwRGVidWdpZm8pCit7CisgICAgaWYocG9ydCA+IFJUTDgzNjdDX1BPUlRJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX0RFQlVHX0lORk9fUkVHKHBvcnQpLCBSVEw4MzY3Q19ERUJVR19JTkZPX01BU0socG9ydCksIHBEZWJ1Z2lmbyk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljUG9ydEphbU1vZGUKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgaGFsZiBkdXBsZXggZmxvdyBjb250cm9sIHNldHRpbmcKKyAqIElucHV0OgorICogICAgICBtb2RlICAgIC0gMDogQmFjay1QcmVzc3VyZSAxOiBERUZFUgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljUG9ydEphbU1vZGUocnRrX3VpbnQzMiBtb2RlKQoreworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19DRkdfQkFDS1BSRVNTVVJFLCBSVEw4MzY3Q19MT05HVFhFX09GRlNFVCxtb2RlKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNQb3J0SmFtTW9kZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBoYWxmIGR1cGxleCBmbG93IGNvbnRyb2wgc2V0dGluZworICogSW5wdXQ6CisgKiAgICAgIHBNb2RlICAgLSAwOiBCYWNrLVByZXNzdXJlIDE6IERFRkVSCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNQb3J0SmFtTW9kZShydGtfdWludDMyKiBwTW9kZSkKK3sKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfQ0ZHX0JBQ0tQUkVTU1VSRSwgUlRMODM2N0NfTE9OR1RYRV9PRkZTRVQsIHBNb2RlKTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY01heExlbmd0aENmZworICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBNYXggcGFja2V0IGxlbmd0aCBjb25maWd1cmF0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgY2ZnSWQgICAgICAgLSBDb25maWd1cmF0aW9uIElECisgKiAgICAgIG1heExlbmd0aCAgIC0gTWF4IExlbmd0aAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljTWF4TGVuZ3RoQ2ZnKHJ0a191aW50MzIgY2ZnSWQsIHJ0a191aW50MzIgbWF4TGVuZ3RoKQoreworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfTUFYX0xFTl9SWF9UWF9DRkcwICsgY2ZnSWQsIFJUTDgzNjdDX01BWF9MRU5fUlhfVFhfQ0ZHMF9NQVNLLCBtYXhMZW5ndGgpOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljTWF4TGVuZ3RoQ2ZnCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IE1heCBwYWNrZXQgbGVuZ3RoIGNvbmZpZ3VyYXRpb24KKyAqIElucHV0OgorICogICAgICBjZmdJZCAgICAgICAtIENvbmZpZ3VyYXRpb24gSUQKKyAqICAgICAgbWF4TGVuZ3RoICAgLSBNYXggTGVuZ3RoCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNNYXhMZW5ndGhDZmcocnRrX3VpbnQzMiBjZmdJZCwgcnRrX3VpbnQzMiAqcE1heExlbmd0aCkKK3sKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX01BWF9MRU5fUlhfVFhfQ0ZHMCArIGNmZ0lkLCBSVEw4MzY3Q19NQVhfTEVOX1JYX1RYX0NGRzBfTUFTSywgcE1heExlbmd0aCk7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNNYXhMZW5ndGgKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgTWF4IHBhY2tldCBsZW5ndGgKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAtIHBvcnQgSUQKKyAqICAgICAgdHlwZSAgICAgICAgLSAwOiAxME0vMTAwTSBzcGVlZCwgMTogZ2lnYSBzcGVlZAorICogICAgICBjZmdJZCAgICAgICAtIENvbmZpZ3VyYXRpb24gSUQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY01heExlbmd0aChydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgdHlwZSwgcnRrX3VpbnQzMiBjZmdJZCkKK3sKKyAgICByZXRfdCByZXRWYWw7CisKKyAgICBpZihwb3J0IDwgOCkKKyAgICB7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX01BWF9MRU5HVEhfQ0ZHLCAodHlwZSAqIDgpICsgcG9ydCwgY2ZnSWQpOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfTUFYX0xFTkdUSF9DRkdfRVhULCAodHlwZSAqIDMpICsgcG9ydCAtIDgsIGNmZ0lkKTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY01heExlbmd0aAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBNYXggcGFja2V0IGxlbmd0aAorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgIC0gcG9ydCBJRAorICogICAgICB0eXBlICAgICAgICAtIDA6IDEwTS8xMDBNIHNwZWVkLCAxOiBnaWdhIHNwZWVkCisgKiAgICAgIGNmZ0lkICAgICAgIC0gQ29uZmlndXJhdGlvbiBJRAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljTWF4TGVuZ3RoKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiB0eXBlLCBydGtfdWludDMyICpwQ2ZnSWQpCit7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgaWYocG9ydCA8IDgpCisgICAgeworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19NQVhfTEVOR1RIX0NGRywgKHR5cGUgKiA4KSArIHBvcnQsIHBDZmdJZCk7CisgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19NQVhfTEVOR1RIX0NGR19FWFQsICh0eXBlICogMykgKyBwb3J0IC0gOCwgcENmZ0lkKTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X29hbS5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfb2FtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU1NmY0NQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X29hbS5jCkBAIC0wLDAgKzEsMTk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNDIzMjEgJAorICogJERhdGU6IDIwMTMtMDgtMjYgMTM6NTE6MjkgKzA4MDAgKOmAseS4gCwgMjYg5YWr5pyIIDIwMTMpICQKKyAqCisgKiBQdXJwb3NlIDogUlRMODM2N0Mgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJIGZvciBSVEw4MzY3QworICogRmVhdHVyZSA6IE9BTSByZWxhdGVkIGZ1bmN0aW9ucworICoKKyAqLworCisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl9vYW0uaD4KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNPYW1QYXJzZXIKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgT0FNIHBhcnNlciBzdGF0ZQorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH43KQorICogICAgICBwYXJzZXIgIC0gUGVyLVBvcnQgT0FNIHBhcnNlciBzdGF0ZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiAgICAgIFJUX0VSUl9OT1RfQUxMT1dFRCAgLSBJbnZhbGlkIHBhc2VyIHN0YXRlCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNPYW1QYXJzZXIocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIHBhcnNlcikKK3sKKyAgICBpZihwb3J0ID49IFJUTDgzNjdDX1BPUlROTykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgaWYocGFyc2VyID4gT0FNX1BBUkZXRENQVSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OT1RfQUxMT1dFRDsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfT0FNX1BBUlNFUl9DVFJMMCArIHBvcnQvOCwgUlRMODM2N0NfT0FNX1BBUlNFUl9NQVNLKHBvcnQgJSA4KSwgcGFyc2VyKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNPYW1QYXJzZXIKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgT0FNIHBhcnNlciBzdGF0ZQorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH43KQorICogICAgICBwUGFyc2VyICAgICAtIFBlci1Qb3J0IE9BTSBwYXJzZXIgc3RhdGUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljT2FtUGFyc2VyKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiogcFBhcnNlcikKK3sKKyAgICBpZihwb3J0ID49IFJUTDgzNjdDX1BPUlROTykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19PQU1fUEFSU0VSX0NUUkwwICsgcG9ydC84LCBSVEw4MzY3Q19PQU1fUEFSU0VSX01BU0socG9ydCU4KSwgcFBhcnNlcik7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljT2FtTXVsdGlwbGV4ZXIKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgT0FNIG11bHRpcGxleGVyIHN0YXRlCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH43KQorICogICAgICBtdWx0aXBsZXhlciAtIFBlci1Qb3J0IE9BTSBtdWx0aXBsZXhlciBzdGF0ZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiAgICAgIFJUX0VSUl9OT1RfQUxMT1dFRCAgLSBJbnZhbGlkIG11bHRpcGxleGVyIHN0YXRlCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNPYW1NdWx0aXBsZXhlcihydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgbXVsdGlwbGV4ZXIpCit7CisgICAgaWYocG9ydCA+PSBSVEw4MzY3Q19QT1JUTk8pCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIGlmKG11bHRpcGxleGVyID4gT0FNX01VTENQVSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OT1RfQUxMT1dFRDsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfT0FNX01VTFRJUExFWEVSX0NUUkwwICsgcG9ydC84LCBSVEw4MzY3Q19PQU1fTVVMVElQTEVYRVJfTUFTSyhwb3J0JTgpLCBtdWx0aXBsZXhlcik7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljT2FtTXVsdGlwbGV4ZXIKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgT0FNIG11bHRpcGxleGVyIHN0YXRlCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH43KQorICogICAgICBwTXVsdGlwbGV4ZXIgLSBQZXItUG9ydCBPQU0gbXVsdGlwbGV4ZXIgc3RhdGUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljT2FtTXVsdGlwbGV4ZXIocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyKiBwTXVsdGlwbGV4ZXIpCit7CisgICAgaWYocG9ydCA+PSBSVEw4MzY3Q19QT1JUTk8pCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfT0FNX01VTFRJUExFWEVSX0NUUkwwICsgcG9ydC84LCBSVEw4MzY3Q19PQU1fTVVMVElQTEVYRVJfTUFTSyhwb3J0JTgpLCBwTXVsdGlwbGV4ZXIpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY09hbUNwdVByaQorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCB0cmFwIHByaW9yaXR5IGZvciBPQU0gcGFja2V0CisgKiBJbnB1dDoKKyAqICAgICAgcHJpb3JpdHkgICAgLSBwcmlvcml0eSAoMH43KQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUU9TX0lOVF9QUklPUklUWSAgICAgLSBJbnZhbGlkIHByaW9yaXR5CisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNPYW1DcHVQcmkocnRrX3VpbnQzMiBwcmlvcml0eSkKK3sKKyAgICBpZihwcmlvcml0eSA+IFJUTDgzNjdDX1BSSU1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9RT1NfSU5UX1BSSU9SSVRZOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19RT1NfVFJBUF9QUklPUklUWTAsIFJUTDgzNjdDX09BTV9QUklPSVJUWV9NQVNLLCBwcmlvcml0eSk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljT2FtQ3B1UHJpCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHRyYXAgcHJpb3JpdHkgZm9yIE9BTSBwYWNrZXQKKyAqIElucHV0OgorICogICAgICBwUHJpb3JpdHkgICAtIHByaW9yaXR5ICgwfjcpCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljT2FtQ3B1UHJpKHJ0a191aW50MzIgKnBQcmlvcml0eSkKK3sKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1FPU19UUkFQX1BSSU9SSVRZMCwgUlRMODM2N0NfT0FNX1BSSU9JUlRZX01BU0ssIHBQcmlvcml0eSk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljT2FtRW5hYmxlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IE9BTSBmdW5jdGlvbiBzdGF0ZQorICogSW5wdXQ6CisgKiAgICAgIGVuYWJsZWQgICAgIC0gT0FNIGZ1bmN0aW9uIHVzYWdlIDE6ZW5hYmxlLCAwOmRpc2FibGVkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljT2FtRW5hYmxlKHJ0a191aW50MzIgZW5hYmxlZCkKK3sKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfT0FNX0NUUkwsIFJUTDgzNjdDX09BTV9DVFJMX09GRlNFVCwgZW5hYmxlZCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljT2FtRW5hYmxlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IE9BTSBmdW5jdGlvbiBzdGF0ZQorICogSW5wdXQ6CisgKiAgICAgIHBFbmFibGVkICAgIC0gT0FNIGZ1bmN0aW9uIHVzYWdlIDE6ZW5hYmxlLCAwOmRpc2FibGVkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljT2FtRW5hYmxlKHJ0a191aW50MzIgKnBFbmFibGVkKQoreworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19PQU1fQ1RSTCwgUlRMODM2N0NfT0FNX0NUUkxfT0ZGU0VULCBwRW5hYmxlZCk7Cit9CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9waHkuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X3BoeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNGRiMTEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9waHkuYwpAQCAtMCwwICsxLDM5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiAkUmV2aXNpb246IDc2MzA2ICQKKyAqICREYXRlOiAyMDE3LTAzLTA4IDE1OjEzOjU4ICswODAwICjpgLHkuIksIDA4IOS4ieaciCAyMDE3KSAkCisgKgorICogUHVycG9zZSA6IFJUTDgzNjdDIHN3aXRjaCBoaWdoLWxldmVsIEFQSSBmb3IgUlRMODM2N0MKKyAqIEZlYXR1cmUgOiBQSFkgcmVsYXRlZCBmdW5jdGlvbnMKKyAqCisgKi8KKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2X3BoeS5oPgorCisjaWYgZGVmaW5lZChNRENfTURJT19PUEVSQVRJT04pCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljUEhZT0NQUmVnCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IFBIWSBPQ1AgcmVnaXN0ZXJzCisgKiBJbnB1dDoKKyAqICAgICAgcGh5Tm8gICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjcpCisgKiAgICAgIG9jcEFkZHIgLSBPQ1AgYWRkcmVzcworICogICAgICBvY3BEYXRhIC0gV3JpdGluZyBkYXRhCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUEhZX1JFR19JRCAgICAgICAtIGludmFsaWQgUEhZIGFkZHJlc3MKKyAqICAgICAgUlRfRVJSX1BIWV9JRCAgICAgICAgICAgLSBpbnZhbGlkIFBIWSBubworICogICAgICBSVF9FUlJfQlVTWVdBSVRfVElNRU9VVCAtIFBIWSBhY2Nlc3MgYnVzeQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljUEhZT0NQUmVnKHJ0a191aW50MzIgcGh5Tm8sIHJ0a191aW50MzIgb2NwQWRkciwgcnRrX3VpbnQzMiBvY3BEYXRhICkKK3sKKyAgICByZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiByZWdBZGRyOworICAgIHJ0a191aW50MzIgb2NwQWRkclByZWZpeCwgb2NwQWRkcjlfNiwgb2NwQWRkcjVfMTsKKworICAgIC8qIE9DUCBwcmVmaXggKi8KKyAgICBvY3BBZGRyUHJlZml4ID0gKChvY3BBZGRyICYgMHhGQzAwKSA+PiAxMCk7CisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19HUEhZX09DUF9NU0JfMCwgUlRMODM2N0NfQ0ZHX0NQVV9PQ1BBRFJfTVNCX01BU0ssIG9jcEFkZHJQcmVmaXgpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAvKnByZXBhcmUgYWNjZXNzIGFkZHJlc3MqLworICAgIG9jcEFkZHI5XzYgPSAoKG9jcEFkZHIgPj4gNikgJiAweDAwMEYpOworICAgIG9jcEFkZHI1XzEgPSAoKG9jcEFkZHIgPj4gMSkgJiAweDAwMUYpOworICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19QSFlfQkFTRSB8IChvY3BBZGRyOV82IDw8IDgpIHwgKHBoeU5vIDw8IFJUTDgzNjdDX1BIWV9PRkZTRVQpIHwgb2NwQWRkcjVfMTsKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhyZWdBZGRyLCBvY3BEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1BIWU9DUFJlZworICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBQSFkgT0NQIHJlZ2lzdGVycworICogSW5wdXQ6CisgKiAgICAgIHBoeU5vICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH43KQorICogICAgICBvY3BBZGRyIC0gUEhZIGFkZHJlc3MKKyAqICAgICAgcFJlZ0RhdGEgLSByZWFkIGRhdGEKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QSFlfUkVHX0lEICAgICAgIC0gaW52YWxpZCBQSFkgYWRkcmVzcworICogICAgICBSVF9FUlJfUEhZX0lEICAgICAgICAgICAtIGludmFsaWQgUEhZIG5vCisgKiAgICAgIFJUX0VSUl9CVVNZV0FJVF9USU1FT1VUIC0gUEhZIGFjY2VzcyBidXN5CisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNQSFlPQ1BSZWcocnRrX3VpbnQzMiBwaHlObywgcnRrX3VpbnQzMiBvY3BBZGRyLCBydGtfdWludDMyICpwUmVnRGF0YSApCit7CisgICAgcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcmVnQWRkcjsKKyAgICBydGtfdWludDMyIG9jcEFkZHJQcmVmaXgsIG9jcEFkZHI5XzYsIG9jcEFkZHI1XzE7CisgICAgLyogT0NQIHByZWZpeCAqLworICAgIG9jcEFkZHJQcmVmaXggPSAoKG9jcEFkZHIgJiAweEZDMDApID4+IDEwKTsKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0dQSFlfT0NQX01TQl8wLCBSVEw4MzY3Q19DRkdfQ1BVX09DUEFEUl9NU0JfTUFTSywgb2NwQWRkclByZWZpeCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIC8qcHJlcGFyZSBhY2Nlc3MgYWRkcmVzcyovCisgICAgb2NwQWRkcjlfNiA9ICgob2NwQWRkciA+PiA2KSAmIDB4MDAwRik7CisgICAgb2NwQWRkcjVfMSA9ICgob2NwQWRkciA+PiAxKSAmIDB4MDAxRik7CisgICAgcmVnQWRkciA9IFJUTDgzNjdDX1BIWV9CQVNFIHwgKG9jcEFkZHI5XzYgPDwgOCkgfCAocGh5Tm8gPDwgUlRMODM2N0NfUEhZX09GRlNFVCkgfCBvY3BBZGRyNV8xOworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKHJlZ0FkZHIsIHBSZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworI2Vsc2UKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1BIWU9DUFJlZworICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBQSFkgT0NQIHJlZ2lzdGVycworICogSW5wdXQ6CisgKiAgICAgIHBoeU5vICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH43KQorICogICAgICBvY3BBZGRyIC0gT0NQIGFkZHJlc3MKKyAqICAgICAgb2NwRGF0YSAtIFdyaXRpbmcgZGF0YQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BIWV9SRUdfSUQgICAgICAgLSBpbnZhbGlkIFBIWSBhZGRyZXNzCisgKiAgICAgIFJUX0VSUl9QSFlfSUQgICAgICAgICAgIC0gaW52YWxpZCBQSFkgbm8KKyAqICAgICAgUlRfRVJSX0JVU1lXQUlUX1RJTUVPVVQgLSBQSFkgYWNjZXNzIGJ1c3kKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1BIWU9DUFJlZyhydGtfdWludDMyIHBoeU5vLCBydGtfdWludDMyIG9jcEFkZHIsIHJ0a191aW50MzIgb2NwRGF0YSApCit7CisgICAgcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcmVnRGF0YTsKKyAgICBydGtfdWludDMyIGJ1c3lGbGFnLCBjaGVja0NvdW50ZXI7CisgICAgcnRrX3VpbnQzMiBvY3BBZGRyUHJlZml4LCBvY3BBZGRyOV82LCBvY3BBZGRyNV8xOworCisgICAgLypDaGVjayBpbnRlcm5hbCBwaHkgYWNjZXNzIGJ1c3kgb3Igbm90Ki8KKyAgICAvKnJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0lORFJFQ1RfQUNDRVNTX1NUQVRVUywgUlRMODM2N0NfSU5EUkVDVF9BQ0NFU1NfU1RBVFVTX09GRlNFVCwmYnVzeUZsYWcpOyovCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfSU5EUkVDVF9BQ0NFU1NfU1RBVFVTLCZidXN5RmxhZyk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmKGJ1c3lGbGFnKQorICAgICAgICByZXR1cm4gUlRfRVJSX0JVU1lXQUlUX1RJTUVPVVQ7CisKKyAgICAvKiBPQ1AgcHJlZml4ICovCisgICAgb2NwQWRkclByZWZpeCA9ICgob2NwQWRkciAmIDB4RkMwMCkgPj4gMTApOworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfR1BIWV9PQ1BfTVNCXzAsIFJUTDgzNjdDX0NGR19DUFVfT0NQQURSX01TQl9NQVNLLCBvY3BBZGRyUHJlZml4KSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgLypwcmVwYXJlIGFjY2VzcyBkYXRhKi8KKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19JTkRSRUNUX0FDQ0VTU19XUklURV9EQVRBLCBvY3BEYXRhKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgLypwcmVwYXJlIGFjY2VzcyBhZGRyZXNzKi8KKyAgICBvY3BBZGRyOV82ID0gKChvY3BBZGRyID4+IDYpICYgMHgwMDBGKTsKKyAgICBvY3BBZGRyNV8xID0gKChvY3BBZGRyID4+IDEpICYgMHgwMDFGKTsKKyAgICByZWdEYXRhID0gUlRMODM2N0NfUEhZX0JBU0UgfCAob2NwQWRkcjlfNiA8PCA4KSB8IChwaHlObyA8PCBSVEw4MzY3Q19QSFlfT0ZGU0VUKSB8IG9jcEFkZHI1XzE7CisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfSU5EUkVDVF9BQ0NFU1NfQUREUkVTUywgcmVnRGF0YSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIC8qU2V0IFdSSVRFIENvbW1hbmQqLworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX0lORFJFQ1RfQUNDRVNTX0NUUkwsIFJUTDgzNjdDX0NNRF9NQVNLIHwgUlRMODM2N0NfUldfTUFTSyk7CisKKyAgICBjaGVja0NvdW50ZXIgPSAxMDA7CisgICAgd2hpbGUoY2hlY2tDb3VudGVyKQorICAgIHsKKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfSU5EUkVDVF9BQ0NFU1NfU1RBVFVTLCZidXN5RmxhZyk7CisgICAgICAgIGlmKChyZXRWYWwgIT0gUlRfRVJSX09LKSB8fCBidXN5RmxhZykKKyAgICAgICAgeworICAgICAgICAgICAgY2hlY2tDb3VudGVyIC0tOworICAgICAgICAgICAgaWYoMCA9PSBjaGVja0NvdW50ZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9CVVNZV0FJVF9USU1FT1VUOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgY2hlY2tDb3VudGVyID0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXRWYWw7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljUEhZT0NQUmVnCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFBIWSBPQ1AgcmVnaXN0ZXJzCisgKiBJbnB1dDoKKyAqICAgICAgcGh5Tm8gICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjcpCisgKiAgICAgIG9jcEFkZHIgLSBQSFkgYWRkcmVzcworICogICAgICBwUmVnRGF0YSAtIHJlYWQgZGF0YQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BIWV9SRUdfSUQgICAgICAgLSBpbnZhbGlkIFBIWSBhZGRyZXNzCisgKiAgICAgIFJUX0VSUl9QSFlfSUQgICAgICAgICAgIC0gaW52YWxpZCBQSFkgbm8KKyAqICAgICAgUlRfRVJSX0JVU1lXQUlUX1RJTUVPVVQgLSBQSFkgYWNjZXNzIGJ1c3kKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BIWU9DUFJlZyhydGtfdWludDMyIHBoeU5vLCBydGtfdWludDMyIG9jcEFkZHIsIHJ0a191aW50MzIgKnBSZWdEYXRhICkKK3sKKyAgICByZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiByZWdEYXRhOworICAgIHJ0a191aW50MzIgYnVzeUZsYWcsY2hlY2tDb3VudGVyOworICAgIHJ0a191aW50MzIgb2NwQWRkclByZWZpeCwgb2NwQWRkcjlfNiwgb2NwQWRkcjVfMTsKKyAgICAvKkNoZWNrIGludGVybmFsIHBoeSBhY2Nlc3MgYnVzeSBvciBub3QqLworICAgIC8qcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfSU5EUkVDVF9BQ0NFU1NfU1RBVFVTLCBSVEw4MzY3Q19JTkRSRUNUX0FDQ0VTU19TVEFUVVNfT0ZGU0VULCZidXN5RmxhZyk7Ki8KKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19JTkRSRUNUX0FDQ0VTU19TVEFUVVMsJmJ1c3lGbGFnKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYoYnVzeUZsYWcpCisgICAgICAgIHJldHVybiBSVF9FUlJfQlVTWVdBSVRfVElNRU9VVDsKKworICAgIC8qIE9DUCBwcmVmaXggKi8KKyAgICBvY3BBZGRyUHJlZml4ID0gKChvY3BBZGRyICYgMHhGQzAwKSA+PiAxMCk7CisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19HUEhZX09DUF9NU0JfMCwgUlRMODM2N0NfQ0ZHX0NQVV9PQ1BBRFJfTVNCX01BU0ssIG9jcEFkZHJQcmVmaXgpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAvKnByZXBhcmUgYWNjZXNzIGFkZHJlc3MqLworICAgIG9jcEFkZHI5XzYgPSAoKG9jcEFkZHIgPj4gNikgJiAweDAwMEYpOworICAgIG9jcEFkZHI1XzEgPSAoKG9jcEFkZHIgPj4gMSkgJiAweDAwMUYpOworICAgIHJlZ0RhdGEgPSBSVEw4MzY3Q19QSFlfQkFTRSB8IChvY3BBZGRyOV82IDw8IDgpIHwgKHBoeU5vIDw8IFJUTDgzNjdDX1BIWV9PRkZTRVQpIHwgb2NwQWRkcjVfMTsKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19JTkRSRUNUX0FDQ0VTU19BRERSRVNTLCByZWdEYXRhKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgLypTZXQgUkVBRCBDb21tYW5kKi8KKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19JTkRSRUNUX0FDQ0VTU19DVFJMLCBSVEw4MzY3Q19DTURfTUFTSyApOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBjaGVja0NvdW50ZXIgPSAxMDA7CisgICAgd2hpbGUoY2hlY2tDb3VudGVyKQorICAgIHsKKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfSU5EUkVDVF9BQ0NFU1NfU1RBVFVTLCZidXN5RmxhZyk7CisgICAgICAgIGlmKChyZXRWYWwgIT0gUlRfRVJSX09LKSB8fCBidXN5RmxhZykKKyAgICAgICAgeworICAgICAgICAgICAgY2hlY2tDb3VudGVyIC0tOworICAgICAgICAgICAgaWYoMCA9PSBjaGVja0NvdW50ZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9GQUlMRUQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBjaGVja0NvdW50ZXIgPSAwOworICAgICAgICB9CisgICAgfQorCisgICAgLypnZXQgUEhZIHJlZ2lzdGVyKi8KKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19JTkRSRUNUX0FDQ0VTU19SRUFEX0RBVEEsICZyZWdEYXRhKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgKnBSZWdEYXRhID0gcmVnRGF0YTsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKyNlbmRpZgorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljUEhZUmVnCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IFBIWSByZWdpc3RlcnMKKyAqIElucHV0OgorICogICAgICBwaHlObyAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgcGh5QWRkciAtIFBIWSBhZGRyZXNzICgwfjMxKQorICogICAgICBwaHlEYXRhIC0gV3JpdGluZyBkYXRhCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUEhZX1JFR19JRCAgICAgICAtIGludmFsaWQgUEhZIGFkZHJlc3MKKyAqICAgICAgUlRfRVJSX1BIWV9JRCAgICAgICAgICAgLSBpbnZhbGlkIFBIWSBubworICogICAgICBSVF9FUlJfQlVTWVdBSVRfVElNRU9VVCAtIFBIWSBhY2Nlc3MgYnVzeQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljUEhZUmVnKHJ0a191aW50MzIgcGh5Tm8sIHJ0a191aW50MzIgcGh5QWRkciwgcnRrX3VpbnQzMiBwaHlEYXRhICkKK3sKKyAgICBydGtfdWludDMyIG9jcF9hZGRyOworCisgICAgaWYocGh5QWRkciA+IFJUTDgzNjdDX1BIWV9SRUdOT01BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QSFlfUkVHX0lEOworCisgICAgb2NwX2FkZHIgPSAweGE0MDAgKyBwaHlBZGRyKjI7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1BIWU9DUFJlZyhwaHlObywgb2NwX2FkZHIsIHBoeURhdGEpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1BIWVJlZworICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBQSFkgcmVnaXN0ZXJzCisgKiBJbnB1dDoKKyAqICAgICAgcGh5Tm8gICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjcpCisgKiAgICAgIHBoeUFkZHIgLSBQSFkgYWRkcmVzcyAoMH4zMSkKKyAqICAgICAgcFJlZ0RhdGEgLSBXcml0aW5nIGRhdGEKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QSFlfUkVHX0lEICAgICAgIC0gaW52YWxpZCBQSFkgYWRkcmVzcworICogICAgICBSVF9FUlJfUEhZX0lEICAgICAgICAgICAtIGludmFsaWQgUEhZIG5vCisgKiAgICAgIFJUX0VSUl9CVVNZV0FJVF9USU1FT1VUIC0gUEhZIGFjY2VzcyBidXN5CisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNQSFlSZWcocnRrX3VpbnQzMiBwaHlObywgcnRrX3VpbnQzMiBwaHlBZGRyLCBydGtfdWludDMyICpwUmVnRGF0YSApCit7CisgICAgcnRrX3VpbnQzMiBvY3BfYWRkcjsKKworICAgIGlmKHBoeUFkZHIgPiBSVEw4MzY3Q19QSFlfUkVHTk9NQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUEhZX1JFR19JRDsKKworICAgIG9jcF9hZGRyID0gMHhhNDAwICsgcGh5QWRkcioyOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNQSFlPQ1BSZWcocGh5Tm8sIG9jcF9hZGRyLCBwUmVnRGF0YSk7Cit9CisKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1Nkc1JlZworICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBTZXJkZXMgcmVnaXN0ZXJzCisgKiBJbnB1dDoKKyAqICAgICAgc2RzSWQgICAtIHNkc2lkICgwfjEpCisgKiAgICAgIHNkc1JlZyAtIHJlZyBhZGRyZXNzICgwfjMxKQorICogICAgICBzZHNQYWdlIC0gV3JpdGluZyBkYXRhCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBTdWNjZXNzCisKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworCityZXRfdCBydGw4MzY3Y19zZXRBc2ljU2RzUmVnKHJ0a191aW50MzIgc2RzSWQsIHJ0a191aW50MzIgc2RzUmVnLCBydGtfdWludDMyIHNkc1BhZ2UsICBydGtfdWludDMyIHZhbHVlKQoreworICAgIHJ0a191aW50MzIgcmV0VmFsOworCisgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19TRFNfSU5EQUNTX0RBVEEsIHZhbHVlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19TRFNfSU5EQUNTX0FEUiwgKHNkc1BhZ2U8PDUpIHwgc2RzUmVnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19TRFNfSU5EQUNTX0NNRCwgMHgwMEMwfHNkc0lkKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKKworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBaXNjU2RzUmVnCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFNlcmRlcyByZWdpc3RlcnMKKyAqIElucHV0OgorICogICAgICBzZHNJZCAgIC0gc2RzaWQgKDB+MSkKKyAqICAgICAgc2RzUmVnIC0gcmVnIGFkZHJlc3MgKDB+MzEpCisgKiAgICAgIHNkc1BhZ2UgLSBXcml0aW5nIGRhdGEKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKworICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljU2RzUmVnKHJ0a191aW50MzIgc2RzSWQsIHJ0a191aW50MzIgc2RzUmVnLCBydGtfdWludDMyIHNkc1BhZ2UsIHJ0a191aW50MzIgKnZhbHVlKQoreworICAgIHJ0a191aW50MzIgcmV0VmFsLCBidXN5OworCisgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19TRFNfSU5EQUNTX0FEUiwgKHNkc1BhZ2U8PDUpIHwgc2RzUmVnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19TRFNfSU5EQUNTX0NNRCwgMHgwMDgwfHNkc0lkKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgd2hpbGUoMSkKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfU0RTX0lOREFDU19DTUQsICZidXN5KSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgaWYgKChidXN5ICYgMHgxMDApID09IDApCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfUkVHX1NEU19JTkRBQ1NfREFUQSwgdmFsdWUpKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKworCisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X3BvcnQuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGU4MGEwCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfcG9ydC5jCkBAIC0wLDAgKzEsNTc1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiAkUmV2aXNpb246IDc2MzMzICQKKyAqICREYXRlOiAyMDE3LTAzLTA5IDA5OjMzOjE1ICswODAwICjpgLHlm5ssIDA5IOS4ieaciCAyMDE3KSAkCisgKgorICogUHVycG9zZSA6IFJUTDgzNjdDIHN3aXRjaCBoaWdoLWxldmVsIEFQSSBmb3IgUlRMODM2N0MKKyAqIEZlYXR1cmUgOiBQb3J0IHNlY3VyaXR5IHJlbGF0ZWQgZnVuY3Rpb25zCisgKgorICovCisKKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2X3BvcnQuaD4KKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisKKyNkZWZpbmUgRklCRVIyX0FVVE9fSU5JVF9TSVpFIDIwMzgKK3J0a191aW50OCBGaWJlcjJfQXV0b1tGSUJFUjJfQVVUT19JTklUX1NJWkVdID0geworMHgwMiwweDA1LDB4OEYsMHhFNCwweEY1LDB4QTgsMHhEMiwweEFGLAorMHgyMiwweDAwLDB4MDAsMHgwMiwweDA3LDB4MkMsMHhDNSwweEYwLAorMHhGOCwweEEzLDB4RTAsMHgyOCwweEYwLDB4QzUsMHhGMCwweEY4LAorMHhFNSwweDgyLDB4MTUsMHg4MiwweDcwLDB4MDIsMHgxNSwweDgzLAorMHhFMCwweDM4LDB4RjAsMHgyMiwweDc1LDB4RjAsMHgwOCwweDc1LAorMHg4MiwweDAwLDB4RUYsMHgyRiwweEZGLDB4RUUsMHgzMywweEZFLAorMHhDRCwweDMzLDB4Q0QsMHhDQywweDMzLDB4Q0MsMHhDNSwweDgyLAorMHgzMywweEM1LDB4ODIsMHg5QiwweEVELDB4OUEsMHhFQywweDk5LAorMHhFNSwweDgyLDB4OTgsMHg0MCwweDBDLDB4RjUsMHg4MiwweEVFLAorMHg5QiwweEZFLDB4RUQsMHg5QSwweEZELDB4RUMsMHg5OSwweEZDLAorMHgwRiwweEQ1LDB4RjAsMHhENiwweEU0LDB4Q0UsMHhGQiwweEU0LAorMHhDRCwweEZBLDB4RTQsMHhDQywweEY5LDB4QTgsMHg4MiwweDIyLAorMHhCOCwweDAwLDB4QzEsMHhCOSwweDAwLDB4NTksMHhCQSwweDAwLAorMHgyRCwweEVDLDB4OEIsMHhGMCwweDg0LDB4Q0YsMHhDRSwweENELAorMHhGQywweEU1LDB4RjAsMHhDQiwweEY5LDB4NzgsMHgxOCwweEVGLAorMHgyRiwweEZGLDB4RUUsMHgzMywweEZFLDB4RUQsMHgzMywweEZELAorMHhFQywweDMzLDB4RkMsMHhFQiwweDMzLDB4RkIsMHgxMCwweEQ3LAorMHgwMywweDk5LDB4NDAsMHgwNCwweEVCLDB4OTksMHhGQiwweDBGLAorMHhEOCwweEU1LDB4RTQsMHhGOSwweEZBLDB4MjIsMHg3OCwweDE4LAorMHhFRiwweDJGLDB4RkYsMHhFRSwweDMzLDB4RkUsMHhFRCwweDMzLAorMHhGRCwweEVDLDB4MzMsMHhGQywweEM5LDB4MzMsMHhDOSwweDEwLAorMHhENywweDA1LDB4OUIsMHhFOSwweDlBLDB4NDAsMHgwNywweEVDLAorMHg5QiwweEZDLDB4RTksMHg5QSwweEY5LDB4MEYsMHhEOCwweEUwLAorMHhFNCwweEM5LDB4RkEsMHhFNCwweENDLDB4RkIsMHgyMiwweDc1LAorMHhGMCwweDEwLDB4RUYsMHgyRiwweEZGLDB4RUUsMHgzMywweEZFLAorMHhFRCwweDMzLDB4RkQsMHhDQywweDMzLDB4Q0MsMHhDOCwweDMzLAorMHhDOCwweDEwLDB4RDcsMHgwNywweDlCLDB4RUMsMHg5QSwweEU4LAorMHg5OSwweDQwLDB4MEEsMHhFRCwweDlCLDB4RkQsMHhFQywweDlBLAorMHhGQywweEU4LDB4OTksMHhGOCwweDBGLDB4RDUsMHhGMCwweERBLAorMHhFNCwweENELDB4RkIsMHhFNCwweENDLDB4RkEsMHhFNCwweEM4LAorMHhGOSwweDIyLDB4RUIsMHg5RiwweEY1LDB4RjAsMHhFQSwweDlFLAorMHg0MiwweEYwLDB4RTksMHg5RCwweDQyLDB4RjAsMHhFOCwweDlDLAorMHg0NSwweEYwLDB4MjIsMHhFMCwweEZDLDB4QTMsMHhFMCwweEZELAorMHhBMywweEUwLDB4RkUsMHhBMywweEUwLDB4RkYsMHgyMiwweEUwLAorMHhGOCwweEEzLDB4RTAsMHhGOSwweEEzLDB4RTAsMHhGQSwweEEzLAorMHhFMCwweEZCLDB4MjIsMHhFQywweEYwLDB4QTMsMHhFRCwweEYwLAorMHhBMywweEVFLDB4RjAsMHhBMywweEVGLDB4RjAsMHgyMiwweDdELAorMHhENywweDdDLDB4MDQsMHg3RiwweDAyLDB4N0UsMHg2NiwweDEyLAorMHgwNywweEFCLDB4N0QsMHg4MCwweDdDLDB4MDQsMHg3RiwweDAxLAorMHg3RSwweDY2LDB4MTIsMHgwNywweEFCLDB4N0QsMHhDMCwweDdDLAorMHgwMCwweDdGLDB4MDAsMHg3RSwweDY2LDB4MTIsMHgwNywweEFCLAorMHg3RCwweDk0LDB4N0MsMHhGOSwweDdGLDB4MDIsMHg3RSwweDY2LAorMHgxMiwweDA3LDB4QUIsMHg3RCwweDgxLDB4N0MsMHgwNCwweDdGLAorMHgwMSwweDdFLDB4NjYsMHgxMiwweDA3LDB4QUIsMHg3RCwweEMwLAorMHg3QywweDAwLDB4N0YsMHgwMCwweDdFLDB4NjYsMHgxMiwweDA3LAorMHhBQiwweDdELDB4QTIsMHg3QywweDMxLDB4N0YsMHgwMiwweDdFLAorMHg2NiwweDEyLDB4MDcsMHhBQiwweDdELDB4ODIsMHg3QywweDA0LAorMHg3RiwweDAxLDB4N0UsMHg2NiwweDEyLDB4MDcsMHhBQiwweDdELAorMHhDMCwweDdDLDB4MDAsMHg3RiwweDAwLDB4N0UsMHg2NiwweDEyLAorMHgwNywweEFCLDB4N0QsMHg2MCwweDdDLDB4NjksMHg3RiwweDAyLAorMHg3RSwweDY2LDB4MTIsMHgwNywweEFCLDB4N0QsMHg4MywweDdDLAorMHgwNCwweDdGLDB4MDEsMHg3RSwweDY2LDB4MTIsMHgwNywweEFCLAorMHg3RCwweEMwLDB4N0MsMHgwMCwweDdGLDB4MDAsMHg3RSwweDY2LAorMHgxMiwweDA3LDB4QUIsMHg3RCwweDI4LDB4N0MsMHg5NywweDdGLAorMHgwMiwweDdFLDB4NjYsMHgxMiwweDA3LDB4QUIsMHg3RCwweDg0LAorMHg3QywweDA0LDB4N0YsMHgwMSwweDdFLDB4NjYsMHgxMiwweDA3LAorMHhBQiwweDdELDB4QzAsMHg3QywweDAwLDB4N0YsMHgwMCwweDdFLAorMHg2NiwweDEyLDB4MDcsMHhBQiwweDdELDB4ODUsMHg3QywweDlELAorMHg3RiwweDAyLDB4N0UsMHg2NiwweDEyLDB4MDcsMHhBQiwweDdELAorMHgyMywweDdDLDB4MDQsMHg3RiwweDAxLDB4N0UsMHg2NiwweDEyLAorMHgwNywweEFCLDB4N0QsMHhDMCwweDdDLDB4MDAsMHg3RiwweDAwLAorMHg3RSwweDY2LDB4MTIsMHgwNywweEFCLDB4N0QsMHgxMCwweDdDLAorMHhEOCwweDdGLDB4MDIsMHg3RSwweDY2LDB4MTIsMHgwNywweEFCLAorMHg3RCwweDI0LDB4N0MsMHgwNCwweDdGLDB4MDEsMHg3RSwweDY2LAorMHgxMiwweDA3LDB4QUIsMHg3RCwweEMwLDB4N0MsMHgwMCwweDdGLAorMHgwMCwweDdFLDB4NjYsMHgxMiwweDA3LDB4QUIsMHg3RCwweDAwLAorMHg3QywweDA0LDB4N0YsMHgwMiwweDdFLDB4NjYsMHgxMiwweDA3LAorMHhBQiwweDdELDB4MkYsMHg3QywweDAwLDB4N0YsMHgwMSwweDdFLAorMHg2NiwweDEyLDB4MDcsMHhBQiwweDdELDB4QzAsMHg3QywweDAwLAorMHg3RiwweDAwLDB4N0UsMHg2NiwweDAyLDB4MDcsMHhBQiwweDdELAorMHgwMywweDdDLDB4MDAsMHg3RiwweDAxLDB4N0UsMHg2NiwweDEyLAorMHgwNywweEFCLDB4N0QsMHg4MCwweDdDLDB4MDAsMHg3RiwweDAwLAorMHg3RSwweDY2LDB4MTIsMHgwNywweEFCLDB4N0YsMHgwMiwweDdFLAorMHg2NiwweDEyLDB4MDcsMHg2NiwweEVGLDB4NDQsMHg0MCwweEZELAorMHhBQywweDA2LDB4N0YsMHgwMiwweDdFLDB4NjYsMHgxMiwweDA3LAorMHhBQiwweDdELDB4MDMsMHg3QywweDAwLDB4N0YsMHgwMSwweDdFLAorMHg2NiwweDEyLDB4MDcsMHhBQiwweDdELDB4QzAsMHg3QywweDAwLAorMHg3RiwweDAwLDB4N0UsMHg2NiwweDEyLDB4MDcsMHhBQiwweDdELAorMHgwMywweDdDLDB4MDAsMHg3RiwweDAxLDB4N0UsMHg2NiwweDEyLAorMHgwNywweEFCLDB4N0QsMHg4MCwweDdDLDB4MDAsMHg3RiwweDAwLAorMHg3RSwweDY2LDB4MTIsMHgwNywweEFCLDB4N0YsMHgwMiwweDdFLAorMHg2NiwweDEyLDB4MDcsMHg2NiwweEVGLDB4NTQsMHhCRiwweEZELAorMHhBQywweDA2LDB4N0YsMHgwMiwweDdFLDB4NjYsMHgxMiwweDA3LAorMHhBQiwweDdELDB4MDMsMHg3QywweDAwLDB4N0YsMHgwMSwweDdFLAorMHg2NiwweDEyLDB4MDcsMHhBQiwweDdELDB4QzAsMHg3QywweDAwLAorMHg3RiwweDAwLDB4N0UsMHg2NiwweDEyLDB4MDcsMHhBQiwweEU0LAorMHhGRCwweEZDLDB4N0YsMHgwMSwweDdFLDB4NjYsMHgxMiwweDA3LAorMHhBQiwweDdELDB4ODAsMHg3QywweDAwLDB4N0YsMHgwMCwweDdFLAorMHg2NiwweDEyLDB4MDcsMHhBQiwweDdGLDB4MDIsMHg3RSwweDY2LAorMHgxMiwweDA3LDB4NjYsMHhFRiwweDU0LDB4RkQsMHg1NCwweEZFLAorMHhGRCwweEFDLDB4MDYsMHg3RiwweDAyLDB4N0UsMHg2NiwweDEyLAorMHgwNywweEFCLDB4RTQsMHhGRCwweEZDLDB4N0YsMHgwMSwweDdFLAorMHg2NiwweDEyLDB4MDcsMHhBQiwweDdELDB4QzAsMHg3QywweDAwLAorMHg3RiwweDAwLDB4N0UsMHg2NiwweDEyLDB4MDcsMHhBQiwweEU0LAorMHhGRCwweEZDLDB4N0YsMHgwMSwweDdFLDB4NjYsMHgxMiwweDA3LAorMHhBQiwweDdELDB4ODAsMHg3QywweDAwLDB4N0YsMHgwMCwweDdFLAorMHg2NiwweDEyLDB4MDcsMHhBQiwweDdGLDB4MDIsMHg3RSwweDY2LAorMHgxMiwweDA3LDB4NjYsMHhFRiwweDQ0LDB4MDIsMHg0NCwweDAxLAorMHhGRCwweEFDLDB4MDYsMHg3RiwweDAyLDB4N0UsMHg2NiwweDEyLAorMHgwNywweEFCLDB4RTQsMHhGRCwweEZDLDB4N0YsMHgwMSwweDdFLAorMHg2NiwweDEyLDB4MDcsMHhBQiwweDdELDB4QzAsMHg3QywweDAwLAorMHg3RiwweDAwLDB4N0UsMHg2NiwweDAyLDB4MDcsMHhBQiwweEU0LAorMHg5MCwweDA2LDB4MkMsMHhGMCwweEZELDB4N0MsMHgwMSwweDdGLAorMHgzRiwweDdFLDB4MUQsMHgxMiwweDA3LDB4QUIsMHg3RCwweDQwLAorMHg3QywweDAwLDB4N0YsMHgzNiwweDdFLDB4MTMsMHgxMiwweDA3LAorMHhBQiwweEU0LDB4RkYsMHhGRSwweEZELDB4ODAsMHgyNSwweEU0LAorMHg3RiwweEZGLDB4N0UsMHhGRiwweEZELDB4RkMsMHg5MCwweDA2LAorMHgyNCwweDEyLDB4MDEsMHgwRiwweEMzLDB4MTIsMHgwMCwweEYyLAorMHg1MCwweDFCLDB4OTAsMHgwNiwweDI0LDB4MTIsMHgwMSwweDAzLAorMHhFRiwweDI0LDB4MDEsMHhGRiwweEU0LDB4M0UsMHhGRSwweEU0LAorMHgzRCwweEZELDB4RTQsMHgzQywweEZDLDB4OTAsMHgwNiwweDI0LAorMHgxMiwweDAxLDB4MUIsMHg4MCwweEQyLDB4RTQsMHhGNSwweEE4LAorMHhEMiwweEFGLDB4N0QsMHgxRiwweEZDLDB4N0YsMHg0OSwweDdFLAorMHgxMywweDEyLDB4MDcsMHhBQiwweDEyLDB4MDcsMHhEQiwweDEyLAorMHgwMSwweDI3LDB4MTIsMHgwNiwweDFCLDB4MTIsMHgwNywweDhBLAorMHgxMiwweDA2LDB4RUEsMHg3RCwweDQxLDB4N0MsMHgwMCwweDdGLAorMHgzNiwweDdFLDB4MTMsMHgxMiwweDA3LDB4QUIsMHhFNCwweEZGLAorMHhGRSwweEZELDB4ODAsMHgyNiwweDdGLDB4RkYsMHg3RSwweEZGLAorMHg3RCwweDA1LDB4N0MsMHgwMCwweDkwLDB4MDYsMHgyNCwweDEyLAorMHgwMSwweDBGLDB4QzMsMHgxMiwweDAwLDB4RjIsMHg1MCwweDFCLAorMHg5MCwweDA2LDB4MjQsMHgxMiwweDAxLDB4MDMsMHhFRiwweDI0LAorMHgwMSwweEZGLDB4RTQsMHgzRSwweEZFLDB4RTQsMHgzRCwweEZELAorMHhFNCwweDNDLDB4RkMsMHg5MCwweDA2LDB4MjQsMHgxMiwweDAxLAorMHgxQiwweDgwLDB4RDEsMHhDMiwweDAwLDB4QzIsMHgwMSwweEQyLAorMHhBOSwweEQyLDB4OEMsMHg3RiwweDAxLDB4N0UsMHg2MiwweDEyLAorMHgwNywweDY2LDB4RUYsMHgzMCwweEUyLDB4MDcsMHhFNCwweDkwLAorMHgwNiwweDJDLDB4RjAsMHg4MCwweEVFLDB4OTAsMHgwNiwweDJDLAorMHhFMCwweDcwLDB4MTIsMHgxMiwweDA0LDB4RjAsMHg5MCwweDA2LAorMHgyQywweDc0LDB4MDEsMHhGMCwweEU0LDB4OTAsMHgwNiwweDMzLAorMHhGMCwweEEzLDB4RjAsMHg4MCwweEQ2LDB4QzMsMHg5MCwweDA2LAorMHgzNCwweEUwLDB4OTQsMHg2MiwweDkwLDB4MDYsMHgzMywweEUwLAorMHg5NCwweDAwLDB4NDAsMHhDNywweEU0LDB4RjAsMHhBMywweEYwLAorMHgxMiwweDA0LDB4RjAsMHg5MCwweDA2LDB4MkMsMHg3NCwweDAxLAorMHhGMCwweDgwLDB4QjgsMHg3NSwweDBGLDB4ODAsMHg3NSwweDBFLAorMHg3RSwweDc1LDB4MEQsMHhBQSwweDc1LDB4MEMsMHg4MywweEU0LAorMHhGNSwweDEwLDB4N0YsMHgzNiwweDdFLDB4MTMsMHgxMiwweDA3LAorMHg2NiwweEVFLDB4QzQsMHhGOCwweDU0LDB4RjAsMHhDOCwweEVGLAorMHhDNCwweDU0LDB4MEYsMHg0OCwweDU0LDB4MDcsMHhGQiwweDdBLAorMHgwMCwweEVBLDB4NzAsMHg0QSwweEVCLDB4MTQsMHg2MCwweDFDLAorMHgxNCwweDYwLDB4MjcsMHgyNCwweEZFLDB4NjAsMHgzMSwweDE0LAorMHg2MCwweDNDLDB4MjQsMHgwNSwweDcwLDB4MzgsMHg3NSwweDBCLAorMHgwMCwweDc1LDB4MEEsMHhDMiwweDc1LDB4MDksMHhFQiwweDc1LAorMHgwOCwweDBCLDB4ODAsMHgzNiwweDc1LDB4MEIsMHg0MCwweDc1LAorMHgwQSwweDU5LDB4NzUsMHgwOSwweDczLDB4NzUsMHgwOCwweDA3LAorMHg4MCwweDI4LDB4NzUsMHgwQiwweDAwLDB4NzUsMHgwQSwweEUxLAorMHg3NSwweDA5LDB4RjUsMHg3NSwweDA4LDB4MDUsMHg4MCwweDFBLAorMHg3NSwweDBCLDB4QTAsMHg3NSwweDBBLDB4QUMsMHg3NSwweDA5LAorMHhCOSwweDc1LDB4MDgsMHgwMywweDgwLDB4MEMsMHg3NSwweDBCLAorMHgwMCwweDc1LDB4MEEsMHg2MiwweDc1LDB4MDksMHgzRCwweDc1LAorMHgwOCwweDAxLDB4NzUsMHg4OSwweDExLDB4RTQsMHg3QiwweDYwLAorMHg3QSwweDA5LDB4RjksMHhGOCwweEFGLDB4MEIsMHhBRSwweDBBLAorMHhBRCwweDA5LDB4QUMsMHgwOCwweDEyLDB4MDAsMHg2MCwweEFBLAorMHgwNiwweEFCLDB4MDcsMHhDMywweEU0LDB4OUIsMHhGQiwweEU0LAorMHg5QSwweEZBLDB4NzgsMHgxNywweEY2LDB4QUYsMHgwMywweEVGLAorMHgwOCwweEY2LDB4MTgsMHhFNiwweEY1LDB4OEMsMHgwOCwweEU2LAorMHhGNSwweDhBLDB4NzQsMHgwRCwweDJCLDB4RkIsMHhFNCwweDNBLAorMHgxOCwweEY2LDB4QUYsMHgwMywweEVGLDB4MDgsMHhGNiwweDc1LAorMHg4OCwweDEwLDB4NTMsMHg4RSwweEM3LDB4RDIsMHhBOSwweDIyLAorMHg3RiwweDEwLDB4N0UsMHgxMywweDEyLDB4MDcsMHg2NiwweDkwLAorMHgwNiwweDJELDB4RUUsMHhGMCwweEEzLDB4RUYsMHhGMCwweEVFLAorMHg0NCwweDEwLDB4RkUsMHg5MCwweDA2LDB4MkQsMHhGMCwweEEzLAorMHhFRiwweEYwLDB4NTQsMHhFRiwweEZGLDB4OTAsMHgwNiwweDJELAorMHhFRSwweEYwLDB4RkMsMHhBMywweEVGLDB4RjAsMHhGRCwweDdGLAorMHgxMCwweDdFLDB4MTMsMHgxMiwweDA3LDB4QUIsMHhFNCwweEZGLAorMHhGRSwweDBGLDB4QkYsMHgwMCwweDAxLDB4MEUsMHhFRiwweDY0LAorMHg2NCwweDRFLDB4NzAsMHhGNSwweDdELDB4MDQsMHg3QywweDAwLAorMHg3RiwweDAyLDB4N0UsMHg2NiwweDEyLDB4MDcsMHhBQiwweDdELAorMHgwMCwweDdDLDB4MDQsMHg3RiwweDAxLDB4N0UsMHg2NiwweDEyLAorMHgwNywweEFCLDB4N0QsMHhDMCwweDdDLDB4MDAsMHg3RiwweDAwLAorMHg3RSwweDY2LDB4MTIsMHgwNywweEFCLDB4RTQsMHhGRCwweEZDLAorMHg3RiwweDAyLDB4N0UsMHg2NiwweDEyLDB4MDcsMHhBQiwweDdELAorMHgwMCwweDdDLDB4MDQsMHg3RiwweDAxLDB4N0UsMHg2NiwweDEyLAorMHgwNywweEFCLDB4N0QsMHhDMCwweDdDLDB4MDAsMHg3RiwweDAwLAorMHg3RSwweDY2LDB4MTIsMHgwNywweEFCLDB4N0YsMHgxMCwweDdFLAorMHgxMywweDEyLDB4MDcsMHg2NiwweDkwLDB4MDYsMHgyRCwweEVFLAorMHhGMCwweEEzLDB4RUYsMHhGMCwweEVFLDB4NTQsMHhFRiwweDkwLAorMHgwNiwweDJELDB4RjAsMHhGQywweEEzLDB4RUYsMHhGMCwweEZELAorMHg3RiwweDEwLDB4N0UsMHgxMywweDAyLDB4MDcsMHhBQiwweDc4LAorMHg3RiwweEU0LDB4RjYsMHhEOCwweEZELDB4NzUsMHg4MSwweDNDLAorMHgwMiwweDA1LDB4RDYsMHgwMiwweDAzLDB4MkYsMHhFNCwweDkzLAorMHhBMywweEY4LDB4RTQsMHg5MywweEEzLDB4NDAsMHgwMywweEY2LAorMHg4MCwweDAxLDB4RjIsMHgwOCwweERGLDB4RjQsMHg4MCwweDI5LAorMHhFNCwweDkzLDB4QTMsMHhGOCwweDU0LDB4MDcsMHgyNCwweDBDLAorMHhDOCwweEMzLDB4MzMsMHhDNCwweDU0LDB4MEYsMHg0NCwweDIwLAorMHhDOCwweDgzLDB4NDAsMHgwNCwweEY0LDB4NTYsMHg4MCwweDAxLAorMHg0NiwweEY2LDB4REYsMHhFNCwweDgwLDB4MEIsMHgwMSwweDAyLAorMHgwNCwweDA4LDB4MTAsMHgyMCwweDQwLDB4ODAsMHg5MCwweDA3LAorMHhFNywweEU0LDB4N0UsMHgwMSwweDkzLDB4NjAsMHhCQywweEEzLAorMHhGRiwweDU0LDB4M0YsMHgzMCwweEU1LDB4MDksMHg1NCwweDFGLAorMHhGRSwweEU0LDB4OTMsMHhBMywweDYwLDB4MDEsMHgwRSwweENGLAorMHg1NCwweEMwLDB4MjUsMHhFMCwweDYwLDB4QTgsMHg0MCwweEI4LAorMHhFNCwweDkzLDB4QTMsMHhGQSwweEU0LDB4OTMsMHhBMywweEY4LAorMHhFNCwweDkzLDB4QTMsMHhDOCwweEM1LDB4ODIsMHhDOCwweENBLAorMHhDNSwweDgzLDB4Q0EsMHhGMCwweEEzLDB4QzgsMHhDNSwweDgyLAorMHhDOCwweENBLDB4QzUsMHg4MywweENBLDB4REYsMHhFOSwweERFLAorMHhFNywweDgwLDB4QkUsMHg3RCwweDQwLDB4N0MsMHgxNywweDdGLAorMHgxMSwweDdFLDB4MUQsMHgxMiwweDA3LDB4QUIsMHg3RiwweDQxLAorMHg3RSwweDFELDB4MTIsMHgwNywweDY2LDB4RUYsMHg0NCwweDIwLAorMHg0NCwweDgwLDB4RkQsMHhBQywweDA2LDB4N0YsMHg0MSwweDdFLAorMHgxRCwweDEyLDB4MDcsMHhBQiwweDdELDB4QkIsMHg3QywweDE1LAorMHg3RiwweEVCLDB4N0UsMHgxMywweDEyLDB4MDcsMHhBQiwweDdELAorMHgwNywweDdDLDB4MDAsMHg3RiwweEU3LDB4N0UsMHgxMywweDEyLAorMHgwNywweEFCLDB4N0QsMHg0MCwweDdDLDB4MTEsMHg3RiwweDAwLAorMHg3RSwweDYyLDB4MTIsMHgwNywweEFCLDB4MDIsMHgwMiwweDJGLAorMHg3RCwweEMwLDB4N0MsMHgxNiwweDdGLDB4MTEsMHg3RSwweDFELAorMHgxMiwweDA3LDB4QUIsMHg3RCwweEJCLDB4N0MsMHgxNSwweDdGLAorMHhFQiwweDdFLDB4MTMsMHgxMiwweDA3LDB4QUIsMHg3RCwweDBELAorMHg3QywweDAwLDB4N0YsMHhFNywweDdFLDB4MTMsMHgxMiwweDA3LAorMHhBQiwweDdGLDB4NDEsMHg3RSwweDFELDB4MTIsMHgwNywweDY2LAorMHhFRiwweDQ0LDB4MjAsMHg0NCwweDgwLDB4RkQsMHhBQywweDA2LAorMHg3RiwweDQxLDB4N0UsMHgxRCwweDEyLDB4MDcsMHhBQiwweDdELAorMHgwMCwweDdDLDB4MjEsMHg3RiwweDAwLDB4N0UsMHg2MiwweDEyLAorMHgwNywweEFCLDB4MDIsMHgwMiwweDJGLDB4N0QsMHg0MCwweDdDLAorMHgxNywweDdGLDB4MTEsMHg3RSwweDFELDB4MTIsMHgwNywweEFCLAorMHg3RCwweEJCLDB4N0MsMHgxNSwweDdGLDB4RUIsMHg3RSwweDEzLAorMHgxMiwweDA3LDB4QUIsMHg3RCwweDBDLDB4N0MsMHgwMCwweDdGLAorMHhFNywweDdFLDB4MTMsMHgxMiwweDA3LDB4QUIsMHg3RiwweDQxLAorMHg3RSwweDFELDB4MTIsMHgwNywweDY2LDB4RUYsMHg0NCwweDIwLAorMHg0NCwweDgwLDB4RkQsMHhBQywweDA2LDB4N0YsMHg0MSwweDdFLAorMHgxRCwweDEyLDB4MDcsMHhBQiwweDdELDB4NDAsMHg3QywweDExLAorMHg3RiwweDAwLDB4N0UsMHg2MiwweDEyLDB4MDcsMHhBQiwweDAyLAorMHgwMiwweDJGLDB4N0QsMHgwNCwweDdDLDB4MDAsMHg3RiwweDAxLAorMHg3RSwweDY2LDB4MTIsMHgwNywweEFCLDB4N0QsMHg4MCwweDdDLAorMHgwMCwweDdGLDB4MDAsMHg3RSwweDY2LDB4MTIsMHgwNywweEFCLAorMHg3RiwweDAyLDB4N0UsMHg2NiwweDEyLDB4MDcsMHg2NiwweEVGLAorMHg0NCwweDAyLDB4NDQsMHgwNCwweEZELDB4QUMsMHgwNiwweDdGLAorMHgwMiwweDdFLDB4NjYsMHgxMiwweDA3LDB4QUIsMHg3RCwweDA0LAorMHg3QywweDAwLDB4N0YsMHgwMSwweDdFLDB4NjYsMHgxMiwweDA3LAorMHhBQiwweDdELDB4QzAsMHg3QywweDAwLDB4N0YsMHgwMCwweDdFLAorMHg2NiwweDAyLDB4MDcsMHhBQiwweEMwLDB4RTAsMHhDMCwweEYwLAorMHhDMCwweDgzLDB4QzAsMHg4MiwweEMwLDB4RDAsMHg3NSwweEQwLAorMHgwMCwweEMwLDB4MDAsMHg3OCwweDE3LDB4RTYsMHhGNSwweDhDLAorMHg3OCwweDE4LDB4RTYsMHhGNSwweDhBLDB4OTAsMHgwNiwweDMxLAorMHhFNCwweDc1LDB4RjAsMHgwMSwweDEyLDB4MDAsMHgwRSwweDkwLAorMHgwNiwweDMzLDB4RTQsMHg3NSwweEYwLDB4MDEsMHgxMiwweDAwLAorMHgwRSwweEQwLDB4MDAsMHhEMCwweEQwLDB4RDAsMHg4MiwweEQwLAorMHg4MywweEQwLDB4RjAsMHhEMCwweEUwLDB4MzIsMHhDMiwweEFGLAorMHhBRCwweDA3LDB4QUMsMHgwNiwweDhDLDB4QTIsMHg4RCwweEEzLAorMHg3NSwweEEwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhBRSwweEExLAorMHhCRSwweDAwLDB4RjAsMHhBRSwweEE2LDB4QUYsMHhBNywweEQyLAorMHhBRiwweDIyLDB4N0QsMHgyMCwweDdDLDB4MEYsMHg3RiwweDAyLAorMHg3RSwweDY2LDB4MTIsMHgwNywweEFCLDB4N0QsMHgwMSwweDdDLAorMHgwMCwweDdGLDB4MDEsMHg3RSwweDY2LDB4MTIsMHgwNywweEFCLAorMHg3RCwweEMwLDB4N0MsMHgwMCwweDdGLDB4MDAsMHg3RSwweDY2LAorMHgwMiwweDA3LDB4QUIsMHhDMiwweEFGLDB4QUIsMHgwNywweEFBLAorMHgwNiwweDhBLDB4QTIsMHg4QiwweEEzLDB4OEMsMHhBNCwweDhELAorMHhBNSwweDc1LDB4QTAsMHgwMywweDAwLDB4MDAsMHgwMCwweEFBLAorMHhBMSwweEJBLDB4MDAsMHhGOCwweEQyLDB4QUYsMHgyMiwweDdGLAorMHgwQywweDdFLDB4MTMsMHgxMiwweDA3LDB4NjYsMHhFRiwweDQ0LAorMHg1MCwweEZELDB4QUMsMHgwNiwweDdGLDB4MEMsMHg3RSwweDEzLAorMHgwMiwweDA3LDB4QUIsMHgxMiwweDA3LDB4QzcsMHgxMiwweDA3LAorMHhGMiwweDEyLDB4MDQsMHgyQiwweDAyLDB4MDAsMHgwMywweDQyLAorMHgwNiwweDMzLDB4MDAsMHgwMCwweDQyLDB4MDYsMHgzMSwweDAwLAorMHgwMCwweDAwLDB4RTQsMHhGNSwweDhFLDB4MjIsfTsKKworI2RlZmluZSBGSUJFUjJfMUdfSU5JVF9TSVpFIDIwMzIKK3J0a191aW50OCBGaWJlcjJfMUdbRklCRVIyXzFHX0lOSVRfU0laRV0gPSB7CisweDAyLDB4MDUsMHg4OSwweEU0LDB4RjUsMHhBOCwweEQyLDB4QUYsCisweDIyLDB4MDAsMHgwMCwweDAyLDB4MDcsMHgyNiwweEM1LDB4RjAsCisweEY4LDB4QTMsMHhFMCwweDI4LDB4RjAsMHhDNSwweEYwLDB4RjgsCisweEU1LDB4ODIsMHgxNSwweDgyLDB4NzAsMHgwMiwweDE1LDB4ODMsCisweEUwLDB4MzgsMHhGMCwweDIyLDB4NzUsMHhGMCwweDA4LDB4NzUsCisweDgyLDB4MDAsMHhFRiwweDJGLDB4RkYsMHhFRSwweDMzLDB4RkUsCisweENELDB4MzMsMHhDRCwweENDLDB4MzMsMHhDQywweEM1LDB4ODIsCisweDMzLDB4QzUsMHg4MiwweDlCLDB4RUQsMHg5QSwweEVDLDB4OTksCisweEU1LDB4ODIsMHg5OCwweDQwLDB4MEMsMHhGNSwweDgyLDB4RUUsCisweDlCLDB4RkUsMHhFRCwweDlBLDB4RkQsMHhFQywweDk5LDB4RkMsCisweDBGLDB4RDUsMHhGMCwweEQ2LDB4RTQsMHhDRSwweEZCLDB4RTQsCisweENELDB4RkEsMHhFNCwweENDLDB4RjksMHhBOCwweDgyLDB4MjIsCisweEI4LDB4MDAsMHhDMSwweEI5LDB4MDAsMHg1OSwweEJBLDB4MDAsCisweDJELDB4RUMsMHg4QiwweEYwLDB4ODQsMHhDRiwweENFLDB4Q0QsCisweEZDLDB4RTUsMHhGMCwweENCLDB4RjksMHg3OCwweDE4LDB4RUYsCisweDJGLDB4RkYsMHhFRSwweDMzLDB4RkUsMHhFRCwweDMzLDB4RkQsCisweEVDLDB4MzMsMHhGQywweEVCLDB4MzMsMHhGQiwweDEwLDB4RDcsCisweDAzLDB4OTksMHg0MCwweDA0LDB4RUIsMHg5OSwweEZCLDB4MEYsCisweEQ4LDB4RTUsMHhFNCwweEY5LDB4RkEsMHgyMiwweDc4LDB4MTgsCisweEVGLDB4MkYsMHhGRiwweEVFLDB4MzMsMHhGRSwweEVELDB4MzMsCisweEZELDB4RUMsMHgzMywweEZDLDB4QzksMHgzMywweEM5LDB4MTAsCisweEQ3LDB4MDUsMHg5QiwweEU5LDB4OUEsMHg0MCwweDA3LDB4RUMsCisweDlCLDB4RkMsMHhFOSwweDlBLDB4RjksMHgwRiwweEQ4LDB4RTAsCisweEU0LDB4QzksMHhGQSwweEU0LDB4Q0MsMHhGQiwweDIyLDB4NzUsCisweEYwLDB4MTAsMHhFRiwweDJGLDB4RkYsMHhFRSwweDMzLDB4RkUsCisweEVELDB4MzMsMHhGRCwweENDLDB4MzMsMHhDQywweEM4LDB4MzMsCisweEM4LDB4MTAsMHhENywweDA3LDB4OUIsMHhFQywweDlBLDB4RTgsCisweDk5LDB4NDAsMHgwQSwweEVELDB4OUIsMHhGRCwweEVDLDB4OUEsCisweEZDLDB4RTgsMHg5OSwweEY4LDB4MEYsMHhENSwweEYwLDB4REEsCisweEU0LDB4Q0QsMHhGQiwweEU0LDB4Q0MsMHhGQSwweEU0LDB4QzgsCisweEY5LDB4MjIsMHhFQiwweDlGLDB4RjUsMHhGMCwweEVBLDB4OUUsCisweDQyLDB4RjAsMHhFOSwweDlELDB4NDIsMHhGMCwweEU4LDB4OUMsCisweDQ1LDB4RjAsMHgyMiwweEUwLDB4RkMsMHhBMywweEUwLDB4RkQsCisweEEzLDB4RTAsMHhGRSwweEEzLDB4RTAsMHhGRiwweDIyLDB4RTAsCisweEY4LDB4QTMsMHhFMCwweEY5LDB4QTMsMHhFMCwweEZBLDB4QTMsCisweEUwLDB4RkIsMHgyMiwweEVDLDB4RjAsMHhBMywweEVELDB4RjAsCisweEEzLDB4RUUsMHhGMCwweEEzLDB4RUYsMHhGMCwweDIyLDB4N0QsCisweEQ3LDB4N0MsMHgwNCwweDdGLDB4MDIsMHg3RSwweDY2LDB4MTIsCisweDA3LDB4QTUsMHg3RCwweDgwLDB4N0MsMHgwNCwweDdGLDB4MDEsCisweDdFLDB4NjYsMHgxMiwweDA3LDB4QTUsMHg3RCwweEMwLDB4N0MsCisweDAwLDB4N0YsMHgwMCwweDdFLDB4NjYsMHgxMiwweDA3LDB4QTUsCisweDdELDB4OTQsMHg3QywweEY5LDB4N0YsMHgwMiwweDdFLDB4NjYsCisweDEyLDB4MDcsMHhBNSwweDdELDB4ODEsMHg3QywweDA0LDB4N0YsCisweDAxLDB4N0UsMHg2NiwweDEyLDB4MDcsMHhBNSwweDdELDB4QzAsCisweDdDLDB4MDAsMHg3RiwweDAwLDB4N0UsMHg2NiwweDEyLDB4MDcsCisweEE1LDB4N0QsMHhBMiwweDdDLDB4MzEsMHg3RiwweDAyLDB4N0UsCisweDY2LDB4MTIsMHgwNywweEE1LDB4N0QsMHg4MiwweDdDLDB4MDQsCisweDdGLDB4MDEsMHg3RSwweDY2LDB4MTIsMHgwNywweEE1LDB4N0QsCisweEMwLDB4N0MsMHgwMCwweDdGLDB4MDAsMHg3RSwweDY2LDB4MTIsCisweDA3LDB4QTUsMHg3RCwweDYwLDB4N0MsMHg2OSwweDdGLDB4MDIsCisweDdFLDB4NjYsMHgxMiwweDA3LDB4QTUsMHg3RCwweDgzLDB4N0MsCisweDA0LDB4N0YsMHgwMSwweDdFLDB4NjYsMHgxMiwweDA3LDB4QTUsCisweDdELDB4QzAsMHg3QywweDAwLDB4N0YsMHgwMCwweDdFLDB4NjYsCisweDEyLDB4MDcsMHhBNSwweDdELDB4MjgsMHg3QywweDk3LDB4N0YsCisweDAyLDB4N0UsMHg2NiwweDEyLDB4MDcsMHhBNSwweDdELDB4ODQsCisweDdDLDB4MDQsMHg3RiwweDAxLDB4N0UsMHg2NiwweDEyLDB4MDcsCisweEE1LDB4N0QsMHhDMCwweDdDLDB4MDAsMHg3RiwweDAwLDB4N0UsCisweDY2LDB4MTIsMHgwNywweEE1LDB4N0QsMHg4NSwweDdDLDB4OUQsCisweDdGLDB4MDIsMHg3RSwweDY2LDB4MTIsMHgwNywweEE1LDB4N0QsCisweDIzLDB4N0MsMHgwNCwweDdGLDB4MDEsMHg3RSwweDY2LDB4MTIsCisweDA3LDB4QTUsMHg3RCwweEMwLDB4N0MsMHgwMCwweDdGLDB4MDAsCisweDdFLDB4NjYsMHgxMiwweDA3LDB4QTUsMHg3RCwweDEwLDB4N0MsCisweEQ4LDB4N0YsMHgwMiwweDdFLDB4NjYsMHgxMiwweDA3LDB4QTUsCisweDdELDB4MjQsMHg3QywweDA0LDB4N0YsMHgwMSwweDdFLDB4NjYsCisweDEyLDB4MDcsMHhBNSwweDdELDB4QzAsMHg3QywweDAwLDB4N0YsCisweDAwLDB4N0UsMHg2NiwweDEyLDB4MDcsMHhBNSwweDdELDB4MDAsCisweDdDLDB4MDQsMHg3RiwweDAyLDB4N0UsMHg2NiwweDEyLDB4MDcsCisweEE1LDB4N0QsMHgyRiwweDdDLDB4MDAsMHg3RiwweDAxLDB4N0UsCisweDY2LDB4MTIsMHgwNywweEE1LDB4N0QsMHhDMCwweDdDLDB4MDAsCisweDdGLDB4MDAsMHg3RSwweDY2LDB4MDIsMHgwNywweEE1LDB4N0QsCisweDAzLDB4N0MsMHgwMCwweDdGLDB4MDEsMHg3RSwweDY2LDB4MTIsCisweDA3LDB4QTUsMHg3RCwweDgwLDB4N0MsMHgwMCwweDdGLDB4MDAsCisweDdFLDB4NjYsMHgxMiwweDA3LDB4QTUsMHg3RiwweDAyLDB4N0UsCisweDY2LDB4MTIsMHgwNywweDYwLDB4RUYsMHg0NCwweDQwLDB4RkQsCisweEFDLDB4MDYsMHg3RiwweDAyLDB4N0UsMHg2NiwweDEyLDB4MDcsCisweEE1LDB4N0QsMHgwMywweDdDLDB4MDAsMHg3RiwweDAxLDB4N0UsCisweDY2LDB4MTIsMHgwNywweEE1LDB4N0QsMHhDMCwweDdDLDB4MDAsCisweDdGLDB4MDAsMHg3RSwweDY2LDB4MTIsMHgwNywweEE1LDB4N0QsCisweDAzLDB4N0MsMHgwMCwweDdGLDB4MDEsMHg3RSwweDY2LDB4MTIsCisweDA3LDB4QTUsMHg3RCwweDgwLDB4N0MsMHgwMCwweDdGLDB4MDAsCisweDdFLDB4NjYsMHgxMiwweDA3LDB4QTUsMHg3RiwweDAyLDB4N0UsCisweDY2LDB4MTIsMHgwNywweDYwLDB4RUYsMHg1NCwweEJGLDB4RkQsCisweEFDLDB4MDYsMHg3RiwweDAyLDB4N0UsMHg2NiwweDEyLDB4MDcsCisweEE1LDB4N0QsMHgwMywweDdDLDB4MDAsMHg3RiwweDAxLDB4N0UsCisweDY2LDB4MTIsMHgwNywweEE1LDB4N0QsMHhDMCwweDdDLDB4MDAsCisweDdGLDB4MDAsMHg3RSwweDY2LDB4MTIsMHgwNywweEE1LDB4RTQsCisweEZELDB4RkMsMHg3RiwweDAxLDB4N0UsMHg2NiwweDEyLDB4MDcsCisweEE1LDB4N0QsMHg4MCwweDdDLDB4MDAsMHg3RiwweDAwLDB4N0UsCisweDY2LDB4MTIsMHgwNywweEE1LDB4N0YsMHgwMiwweDdFLDB4NjYsCisweDEyLDB4MDcsMHg2MCwweEVGLDB4NTQsMHhGRCwweDU0LDB4RkUsCisweEZELDB4QUMsMHgwNiwweDdGLDB4MDIsMHg3RSwweDY2LDB4MTIsCisweDA3LDB4QTUsMHhFNCwweEZELDB4RkMsMHg3RiwweDAxLDB4N0UsCisweDY2LDB4MTIsMHgwNywweEE1LDB4N0QsMHhDMCwweDdDLDB4MDAsCisweDdGLDB4MDAsMHg3RSwweDY2LDB4MTIsMHgwNywweEE1LDB4RTQsCisweEZELDB4RkMsMHg3RiwweDAxLDB4N0UsMHg2NiwweDEyLDB4MDcsCisweEE1LDB4N0QsMHg4MCwweDdDLDB4MDAsMHg3RiwweDAwLDB4N0UsCisweDY2LDB4MTIsMHgwNywweEE1LDB4N0YsMHgwMiwweDdFLDB4NjYsCisweDEyLDB4MDcsMHg2MCwweEVGLDB4NDQsMHgwMiwweDQ0LDB4MDEsCisweEZELDB4QUMsMHgwNiwweDdGLDB4MDIsMHg3RSwweDY2LDB4MTIsCisweDA3LDB4QTUsMHhFNCwweEZELDB4RkMsMHg3RiwweDAxLDB4N0UsCisweDY2LDB4MTIsMHgwNywweEE1LDB4N0QsMHhDMCwweDdDLDB4MDAsCisweDdGLDB4MDAsMHg3RSwweDY2LDB4MDIsMHgwNywweEE1LDB4RTQsCisweDkwLDB4MDYsMHgyQywweEYwLDB4RkQsMHg3QywweDAxLDB4N0YsCisweDNGLDB4N0UsMHgxRCwweDEyLDB4MDcsMHhBNSwweDdELDB4NDAsCisweDdDLDB4MDAsMHg3RiwweDM2LDB4N0UsMHgxMywweDEyLDB4MDcsCisweEE1LDB4RTQsMHhGRiwweEZFLDB4RkQsMHg4MCwweDI1LDB4RTQsCisweDdGLDB4RkYsMHg3RSwweEZGLDB4RkQsMHhGQywweDkwLDB4MDYsCisweDI0LDB4MTIsMHgwMSwweDBGLDB4QzMsMHgxMiwweDAwLDB4RjIsCisweDUwLDB4MUIsMHg5MCwweDA2LDB4MjQsMHgxMiwweDAxLDB4MDMsCisweEVGLDB4MjQsMHgwMSwweEZGLDB4RTQsMHgzRSwweEZFLDB4RTQsCisweDNELDB4RkQsMHhFNCwweDNDLDB4RkMsMHg5MCwweDA2LDB4MjQsCisweDEyLDB4MDEsMHgxQiwweDgwLDB4RDIsMHhFNCwweEY1LDB4QTgsCisweEQyLDB4QUYsMHg3RCwweDFGLDB4RkMsMHg3RiwweDQ5LDB4N0UsCisweDEzLDB4MTIsMHgwNywweEE1LDB4MTIsMHgwNywweEQ1LDB4MTIsCisweDAxLDB4MjcsMHgxMiwweDA2LDB4OUYsMHg3RCwweDQxLDB4N0MsCisweDAwLDB4N0YsMHgzNiwweDdFLDB4MTMsMHgxMiwweDA3LDB4QTUsCisweEU0LDB4RkYsMHhGRSwweEZELDB4ODAsMHgyNiwweDdGLDB4RkYsCisweDdFLDB4RkYsMHg3RCwweDA1LDB4N0MsMHgwMCwweDkwLDB4MDYsCisweDI0LDB4MTIsMHgwMSwweDBGLDB4QzMsMHgxMiwweDAwLDB4RjIsCisweDUwLDB4MUIsMHg5MCwweDA2LDB4MjQsMHgxMiwweDAxLDB4MDMsCisweEVGLDB4MjQsMHgwMSwweEZGLDB4RTQsMHgzRSwweEZFLDB4RTQsCisweDNELDB4RkQsMHhFNCwweDNDLDB4RkMsMHg5MCwweDA2LDB4MjQsCisweDEyLDB4MDEsMHgxQiwweDgwLDB4RDEsMHhDMiwweDAwLDB4QzIsCisweDAxLDB4RDIsMHhBOSwweEQyLDB4OEMsMHg3RiwweDAxLDB4N0UsCisweDYyLDB4MTIsMHgwNywweDYwLDB4RUYsMHgzMCwweEUyLDB4MDcsCisweEU0LDB4OTAsMHgwNiwweDJDLDB4RjAsMHg4MCwweEVFLDB4OTAsCisweDA2LDB4MkMsMHhFMCwweDcwLDB4MTIsMHgxMiwweDA0LDB4RUEsCisweDkwLDB4MDYsMHgyQywweDc0LDB4MDEsMHhGMCwweEU0LDB4OTAsCisweDA2LDB4MzMsMHhGMCwweEEzLDB4RjAsMHg4MCwweEQ2LDB4QzMsCisweDkwLDB4MDYsMHgzNCwweEUwLDB4OTQsMHg2MiwweDkwLDB4MDYsCisweDMzLDB4RTAsMHg5NCwweDAwLDB4NDAsMHhDNywweEU0LDB4RjAsCisweEEzLDB4RjAsMHgxMiwweDA0LDB4RUEsMHg5MCwweDA2LDB4MkMsCisweDc0LDB4MDEsMHhGMCwweDgwLDB4QjgsMHg3NSwweDBGLDB4ODAsCisweDc1LDB4MEUsMHg3RSwweDc1LDB4MEQsMHhBQSwweDc1LDB4MEMsCisweDgzLDB4RTQsMHhGNSwweDEwLDB4N0YsMHgzNiwweDdFLDB4MTMsCisweDEyLDB4MDcsMHg2MCwweEVFLDB4QzQsMHhGOCwweDU0LDB4RjAsCisweEM4LDB4RUYsMHhDNCwweDU0LDB4MEYsMHg0OCwweDU0LDB4MDcsCisweEZCLDB4N0EsMHgwMCwweEVBLDB4NzAsMHg0QSwweEVCLDB4MTQsCisweDYwLDB4MUMsMHgxNCwweDYwLDB4MjcsMHgyNCwweEZFLDB4NjAsCisweDMxLDB4MTQsMHg2MCwweDNDLDB4MjQsMHgwNSwweDcwLDB4MzgsCisweDc1LDB4MEIsMHgwMCwweDc1LDB4MEEsMHhDMiwweDc1LDB4MDksCisweEVCLDB4NzUsMHgwOCwweDBCLDB4ODAsMHgzNiwweDc1LDB4MEIsCisweDQwLDB4NzUsMHgwQSwweDU5LDB4NzUsMHgwOSwweDczLDB4NzUsCisweDA4LDB4MDcsMHg4MCwweDI4LDB4NzUsMHgwQiwweDAwLDB4NzUsCisweDBBLDB4RTEsMHg3NSwweDA5LDB4RjUsMHg3NSwweDA4LDB4MDUsCisweDgwLDB4MUEsMHg3NSwweDBCLDB4QTAsMHg3NSwweDBBLDB4QUMsCisweDc1LDB4MDksMHhCOSwweDc1LDB4MDgsMHgwMywweDgwLDB4MEMsCisweDc1LDB4MEIsMHgwMCwweDc1LDB4MEEsMHg2MiwweDc1LDB4MDksCisweDNELDB4NzUsMHgwOCwweDAxLDB4NzUsMHg4OSwweDExLDB4RTQsCisweDdCLDB4NjAsMHg3QSwweDA5LDB4RjksMHhGOCwweEFGLDB4MEIsCisweEFFLDB4MEEsMHhBRCwweDA5LDB4QUMsMHgwOCwweDEyLDB4MDAsCisweDYwLDB4QUEsMHgwNiwweEFCLDB4MDcsMHhDMywweEU0LDB4OUIsCisweEZCLDB4RTQsMHg5QSwweEZBLDB4NzgsMHgxNywweEY2LDB4QUYsCisweDAzLDB4RUYsMHgwOCwweEY2LDB4MTgsMHhFNiwweEY1LDB4OEMsCisweDA4LDB4RTYsMHhGNSwweDhBLDB4NzQsMHgwRCwweDJCLDB4RkIsCisweEU0LDB4M0EsMHgxOCwweEY2LDB4QUYsMHgwMywweEVGLDB4MDgsCisweEY2LDB4NzUsMHg4OCwweDEwLDB4NTMsMHg4RSwweEM3LDB4RDIsCisweEE5LDB4MjIsMHg3RiwweDEwLDB4N0UsMHgxMywweDEyLDB4MDcsCisweDYwLDB4OTAsMHgwNiwweDJELDB4RUUsMHhGMCwweEEzLDB4RUYsCisweEYwLDB4RUUsMHg0NCwweDEwLDB4RkUsMHg5MCwweDA2LDB4MkQsCisweEYwLDB4QTMsMHhFRiwweEYwLDB4NTQsMHhFRiwweEZGLDB4OTAsCisweDA2LDB4MkQsMHhFRSwweEYwLDB4RkMsMHhBMywweEVGLDB4RjAsCisweEZELDB4N0YsMHgxMCwweDdFLDB4MTMsMHgxMiwweDA3LDB4QTUsCisweEU0LDB4RkYsMHhGRSwweDBGLDB4QkYsMHgwMCwweDAxLDB4MEUsCisweEVGLDB4NjQsMHg2NCwweDRFLDB4NzAsMHhGNSwweDdELDB4MDQsCisweDdDLDB4MDAsMHg3RiwweDAyLDB4N0UsMHg2NiwweDEyLDB4MDcsCisweEE1LDB4N0QsMHgwMCwweDdDLDB4MDQsMHg3RiwweDAxLDB4N0UsCisweDY2LDB4MTIsMHgwNywweEE1LDB4N0QsMHhDMCwweDdDLDB4MDAsCisweDdGLDB4MDAsMHg3RSwweDY2LDB4MTIsMHgwNywweEE1LDB4RTQsCisweEZELDB4RkMsMHg3RiwweDAyLDB4N0UsMHg2NiwweDEyLDB4MDcsCisweEE1LDB4N0QsMHgwMCwweDdDLDB4MDQsMHg3RiwweDAxLDB4N0UsCisweDY2LDB4MTIsMHgwNywweEE1LDB4N0QsMHhDMCwweDdDLDB4MDAsCisweDdGLDB4MDAsMHg3RSwweDY2LDB4MTIsMHgwNywweEE1LDB4N0YsCisweDEwLDB4N0UsMHgxMywweDEyLDB4MDcsMHg2MCwweDkwLDB4MDYsCisweDJELDB4RUUsMHhGMCwweEEzLDB4RUYsMHhGMCwweEVFLDB4NTQsCisweEVGLDB4OTAsMHgwNiwweDJELDB4RjAsMHhGQywweEEzLDB4RUYsCisweEYwLDB4RkQsMHg3RiwweDEwLDB4N0UsMHgxMywweDAyLDB4MDcsCisweEE1LDB4NzgsMHg3RiwweEU0LDB4RjYsMHhEOCwweEZELDB4NzUsCisweDgxLDB4M0MsMHgwMiwweDA1LDB4RDAsMHgwMiwweDAzLDB4MkYsCisweEU0LDB4OTMsMHhBMywweEY4LDB4RTQsMHg5MywweEEzLDB4NDAsCisweDAzLDB4RjYsMHg4MCwweDAxLDB4RjIsMHgwOCwweERGLDB4RjQsCisweDgwLDB4MjksMHhFNCwweDkzLDB4QTMsMHhGOCwweDU0LDB4MDcsCisweDI0LDB4MEMsMHhDOCwweEMzLDB4MzMsMHhDNCwweDU0LDB4MEYsCisweDQ0LDB4MjAsMHhDOCwweDgzLDB4NDAsMHgwNCwweEY0LDB4NTYsCisweDgwLDB4MDEsMHg0NiwweEY2LDB4REYsMHhFNCwweDgwLDB4MEIsCisweDAxLDB4MDIsMHgwNCwweDA4LDB4MTAsMHgyMCwweDQwLDB4ODAsCisweDkwLDB4MDcsMHhFMSwweEU0LDB4N0UsMHgwMSwweDkzLDB4NjAsCisweEJDLDB4QTMsMHhGRiwweDU0LDB4M0YsMHgzMCwweEU1LDB4MDksCisweDU0LDB4MUYsMHhGRSwweEU0LDB4OTMsMHhBMywweDYwLDB4MDEsCisweDBFLDB4Q0YsMHg1NCwweEMwLDB4MjUsMHhFMCwweDYwLDB4QTgsCisweDQwLDB4QjgsMHhFNCwweDkzLDB4QTMsMHhGQSwweEU0LDB4OTMsCisweEEzLDB4RjgsMHhFNCwweDkzLDB4QTMsMHhDOCwweEM1LDB4ODIsCisweEM4LDB4Q0EsMHhDNSwweDgzLDB4Q0EsMHhGMCwweEEzLDB4QzgsCisweEM1LDB4ODIsMHhDOCwweENBLDB4QzUsMHg4MywweENBLDB4REYsCisweEU5LDB4REUsMHhFNywweDgwLDB4QkUsMHg3RCwweDQwLDB4N0MsCisweDE3LDB4N0YsMHgxMSwweDdFLDB4MUQsMHgxMiwweDA3LDB4QTUsCisweDdGLDB4NDEsMHg3RSwweDFELDB4MTIsMHgwNywweDYwLDB4RUYsCisweDQ0LDB4MjAsMHg0NCwweDgwLDB4RkQsMHhBQywweDA2LDB4N0YsCisweDQxLDB4N0UsMHgxRCwweDEyLDB4MDcsMHhBNSwweDdELDB4QkIsCisweDdDLDB4MTUsMHg3RiwweEVCLDB4N0UsMHgxMywweDEyLDB4MDcsCisweEE1LDB4N0QsMHgwNywweDdDLDB4MDAsMHg3RiwweEU3LDB4N0UsCisweDEzLDB4MTIsMHgwNywweEE1LDB4N0QsMHg0MCwweDdDLDB4MTEsCisweDdGLDB4MDAsMHg3RSwweDYyLDB4MTIsMHgwNywweEE1LDB4MDIsCisweDAyLDB4MkYsMHg3RCwweEMwLDB4N0MsMHgxNiwweDdGLDB4MTEsCisweDdFLDB4MUQsMHgxMiwweDA3LDB4QTUsMHg3RCwweEJCLDB4N0MsCisweDE1LDB4N0YsMHhFQiwweDdFLDB4MTMsMHgxMiwweDA3LDB4QTUsCisweDdELDB4MEQsMHg3QywweDAwLDB4N0YsMHhFNywweDdFLDB4MTMsCisweDEyLDB4MDcsMHhBNSwweDdGLDB4NDEsMHg3RSwweDFELDB4MTIsCisweDA3LDB4NjAsMHhFRiwweDQ0LDB4MjAsMHg0NCwweDgwLDB4RkQsCisweEFDLDB4MDYsMHg3RiwweDQxLDB4N0UsMHgxRCwweDEyLDB4MDcsCisweEE1LDB4N0QsMHgwMCwweDdDLDB4MjEsMHg3RiwweDAwLDB4N0UsCisweDYyLDB4MTIsMHgwNywweEE1LDB4MDIsMHgwMiwweDJGLDB4N0QsCisweDQwLDB4N0MsMHgxNywweDdGLDB4MTEsMHg3RSwweDFELDB4MTIsCisweDA3LDB4QTUsMHg3RCwweEJCLDB4N0MsMHgxNSwweDdGLDB4RUIsCisweDdFLDB4MTMsMHgxMiwweDA3LDB4QTUsMHg3RCwweDBDLDB4N0MsCisweDAwLDB4N0YsMHhFNywweDdFLDB4MTMsMHgxMiwweDA3LDB4QTUsCisweDdGLDB4NDEsMHg3RSwweDFELDB4MTIsMHgwNywweDYwLDB4RUYsCisweDQ0LDB4MjAsMHg0NCwweDgwLDB4RkQsMHhBQywweDA2LDB4N0YsCisweDQxLDB4N0UsMHgxRCwweDEyLDB4MDcsMHhBNSwweDdELDB4NDAsCisweDdDLDB4MTEsMHg3RiwweDAwLDB4N0UsMHg2MiwweDEyLDB4MDcsCisweEE1LDB4MDIsMHgwMiwweDJGLDB4N0QsMHgwNCwweDdDLDB4MDAsCisweDdGLDB4MDEsMHg3RSwweDY2LDB4MTIsMHgwNywweEE1LDB4N0QsCisweDgwLDB4N0MsMHgwMCwweDdGLDB4MDAsMHg3RSwweDY2LDB4MTIsCisweDA3LDB4QTUsMHg3RiwweDAyLDB4N0UsMHg2NiwweDEyLDB4MDcsCisweDYwLDB4RUYsMHg0NCwweDAyLDB4NDQsMHgwNCwweEZELDB4QUMsCisweDA2LDB4N0YsMHgwMiwweDdFLDB4NjYsMHgxMiwweDA3LDB4QTUsCisweDdELDB4MDQsMHg3QywweDAwLDB4N0YsMHgwMSwweDdFLDB4NjYsCisweDEyLDB4MDcsMHhBNSwweDdELDB4QzAsMHg3QywweDAwLDB4N0YsCisweDAwLDB4N0UsMHg2NiwweDAyLDB4MDcsMHhBNSwweEMwLDB4RTAsCisweEMwLDB4RjAsMHhDMCwweDgzLDB4QzAsMHg4MiwweEMwLDB4RDAsCisweDc1LDB4RDAsMHgwMCwweEMwLDB4MDAsMHg3OCwweDE3LDB4RTYsCisweEY1LDB4OEMsMHg3OCwweDE4LDB4RTYsMHhGNSwweDhBLDB4OTAsCisweDA2LDB4MzEsMHhFNCwweDc1LDB4RjAsMHgwMSwweDEyLDB4MDAsCisweDBFLDB4OTAsMHgwNiwweDMzLDB4RTQsMHg3NSwweEYwLDB4MDEsCisweDEyLDB4MDAsMHgwRSwweEQwLDB4MDAsMHhEMCwweEQwLDB4RDAsCisweDgyLDB4RDAsMHg4MywweEQwLDB4RjAsMHhEMCwweEUwLDB4MzIsCisweEMyLDB4QUYsMHhBRCwweDA3LDB4QUMsMHgwNiwweDhDLDB4QTIsCisweDhELDB4QTMsMHg3NSwweEEwLDB4MDEsMHgwMCwweDAwLDB4MDAsCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisweEFFLDB4QTEsMHhCRSwweDAwLDB4RjAsMHhBRSwweEE2LDB4QUYsCisweEE3LDB4RDIsMHhBRiwweDIyLDB4N0QsMHgyMCwweDdDLDB4MEYsCisweDdGLDB4MDIsMHg3RSwweDY2LDB4MTIsMHgwNywweEE1LDB4N0QsCisweDAxLDB4N0MsMHgwMCwweDdGLDB4MDEsMHg3RSwweDY2LDB4MTIsCisweDA3LDB4QTUsMHg3RCwweEMwLDB4N0MsMHgwMCwweDdGLDB4MDAsCisweDdFLDB4NjYsMHgwMiwweDA3LDB4QTUsMHhDMiwweEFGLDB4QUIsCisweDA3LDB4QUEsMHgwNiwweDhBLDB4QTIsMHg4QiwweEEzLDB4OEMsCisweEE0LDB4OEQsMHhBNSwweDc1LDB4QTAsMHgwMywweDAwLDB4MDAsCisweDAwLDB4QUEsMHhBMSwweEJBLDB4MDAsMHhGOCwweEQyLDB4QUYsCisweDIyLDB4N0YsMHgwQywweDdFLDB4MTMsMHgxMiwweDA3LDB4NjAsCisweEVGLDB4NDQsMHg1MCwweEZELDB4QUMsMHgwNiwweDdGLDB4MEMsCisweDdFLDB4MTMsMHgwMiwweDA3LDB4QTUsMHgxMiwweDA3LDB4QzEsCisweDEyLDB4MDcsMHhFQywweDEyLDB4MDQsMHgyNSwweDAyLDB4MDAsCisweDAzLDB4NDIsMHgwNiwweDMzLDB4MDAsMHgwMCwweDQyLDB4MDYsCisweDMxLDB4MDAsMHgwMCwweDAwLDB4RTQsMHhGNSwweDhFLDB4MjIsfTsKKworI2RlZmluZSBGSUJFUjJfMTAwTV9JTklUX1NJWkUgMjAzMgorcnRrX3VpbnQ4IEZpYmVyMl8xMDBNW0ZJQkVSMl8xMDBNX0lOSVRfU0laRV0gPSB7CisweDAyLDB4MDUsMHg4OSwweEU0LDB4RjUsMHhBOCwweEQyLDB4QUYsCisweDIyLDB4MDAsMHgwMCwweDAyLDB4MDcsMHgyNiwweEM1LDB4RjAsCisweEY4LDB4QTMsMHhFMCwweDI4LDB4RjAsMHhDNSwweEYwLDB4RjgsCisweEU1LDB4ODIsMHgxNSwweDgyLDB4NzAsMHgwMiwweDE1LDB4ODMsCisweEUwLDB4MzgsMHhGMCwweDIyLDB4NzUsMHhGMCwweDA4LDB4NzUsCisweDgyLDB4MDAsMHhFRiwweDJGLDB4RkYsMHhFRSwweDMzLDB4RkUsCisweENELDB4MzMsMHhDRCwweENDLDB4MzMsMHhDQywweEM1LDB4ODIsCisweDMzLDB4QzUsMHg4MiwweDlCLDB4RUQsMHg5QSwweEVDLDB4OTksCisweEU1LDB4ODIsMHg5OCwweDQwLDB4MEMsMHhGNSwweDgyLDB4RUUsCisweDlCLDB4RkUsMHhFRCwweDlBLDB4RkQsMHhFQywweDk5LDB4RkMsCisweDBGLDB4RDUsMHhGMCwweEQ2LDB4RTQsMHhDRSwweEZCLDB4RTQsCisweENELDB4RkEsMHhFNCwweENDLDB4RjksMHhBOCwweDgyLDB4MjIsCisweEI4LDB4MDAsMHhDMSwweEI5LDB4MDAsMHg1OSwweEJBLDB4MDAsCisweDJELDB4RUMsMHg4QiwweEYwLDB4ODQsMHhDRiwweENFLDB4Q0QsCisweEZDLDB4RTUsMHhGMCwweENCLDB4RjksMHg3OCwweDE4LDB4RUYsCisweDJGLDB4RkYsMHhFRSwweDMzLDB4RkUsMHhFRCwweDMzLDB4RkQsCisweEVDLDB4MzMsMHhGQywweEVCLDB4MzMsMHhGQiwweDEwLDB4RDcsCisweDAzLDB4OTksMHg0MCwweDA0LDB4RUIsMHg5OSwweEZCLDB4MEYsCisweEQ4LDB4RTUsMHhFNCwweEY5LDB4RkEsMHgyMiwweDc4LDB4MTgsCisweEVGLDB4MkYsMHhGRiwweEVFLDB4MzMsMHhGRSwweEVELDB4MzMsCisweEZELDB4RUMsMHgzMywweEZDLDB4QzksMHgzMywweEM5LDB4MTAsCisweEQ3LDB4MDUsMHg5QiwweEU5LDB4OUEsMHg0MCwweDA3LDB4RUMsCisweDlCLDB4RkMsMHhFOSwweDlBLDB4RjksMHgwRiwweEQ4LDB4RTAsCisweEU0LDB4QzksMHhGQSwweEU0LDB4Q0MsMHhGQiwweDIyLDB4NzUsCisweEYwLDB4MTAsMHhFRiwweDJGLDB4RkYsMHhFRSwweDMzLDB4RkUsCisweEVELDB4MzMsMHhGRCwweENDLDB4MzMsMHhDQywweEM4LDB4MzMsCisweEM4LDB4MTAsMHhENywweDA3LDB4OUIsMHhFQywweDlBLDB4RTgsCisweDk5LDB4NDAsMHgwQSwweEVELDB4OUIsMHhGRCwweEVDLDB4OUEsCisweEZDLDB4RTgsMHg5OSwweEY4LDB4MEYsMHhENSwweEYwLDB4REEsCisweEU0LDB4Q0QsMHhGQiwweEU0LDB4Q0MsMHhGQSwweEU0LDB4QzgsCisweEY5LDB4MjIsMHhFQiwweDlGLDB4RjUsMHhGMCwweEVBLDB4OUUsCisweDQyLDB4RjAsMHhFOSwweDlELDB4NDIsMHhGMCwweEU4LDB4OUMsCisweDQ1LDB4RjAsMHgyMiwweEUwLDB4RkMsMHhBMywweEUwLDB4RkQsCisweEEzLDB4RTAsMHhGRSwweEEzLDB4RTAsMHhGRiwweDIyLDB4RTAsCisweEY4LDB4QTMsMHhFMCwweEY5LDB4QTMsMHhFMCwweEZBLDB4QTMsCisweEUwLDB4RkIsMHgyMiwweEVDLDB4RjAsMHhBMywweEVELDB4RjAsCisweEEzLDB4RUUsMHhGMCwweEEzLDB4RUYsMHhGMCwweDIyLDB4N0QsCisweEQ3LDB4N0MsMHgwNCwweDdGLDB4MDIsMHg3RSwweDY2LDB4MTIsCisweDA3LDB4QTUsMHg3RCwweDgwLDB4N0MsMHgwNCwweDdGLDB4MDEsCisweDdFLDB4NjYsMHgxMiwweDA3LDB4QTUsMHg3RCwweEMwLDB4N0MsCisweDAwLDB4N0YsMHgwMCwweDdFLDB4NjYsMHgxMiwweDA3LDB4QTUsCisweDdELDB4OTQsMHg3QywweEY5LDB4N0YsMHgwMiwweDdFLDB4NjYsCisweDEyLDB4MDcsMHhBNSwweDdELDB4ODEsMHg3QywweDA0LDB4N0YsCisweDAxLDB4N0UsMHg2NiwweDEyLDB4MDcsMHhBNSwweDdELDB4QzAsCisweDdDLDB4MDAsMHg3RiwweDAwLDB4N0UsMHg2NiwweDEyLDB4MDcsCisweEE1LDB4N0QsMHhBMiwweDdDLDB4MzEsMHg3RiwweDAyLDB4N0UsCisweDY2LDB4MTIsMHgwNywweEE1LDB4N0QsMHg4MiwweDdDLDB4MDQsCisweDdGLDB4MDEsMHg3RSwweDY2LDB4MTIsMHgwNywweEE1LDB4N0QsCisweEMwLDB4N0MsMHgwMCwweDdGLDB4MDAsMHg3RSwweDY2LDB4MTIsCisweDA3LDB4QTUsMHg3RCwweDYwLDB4N0MsMHg2OSwweDdGLDB4MDIsCisweDdFLDB4NjYsMHgxMiwweDA3LDB4QTUsMHg3RCwweDgzLDB4N0MsCisweDA0LDB4N0YsMHgwMSwweDdFLDB4NjYsMHgxMiwweDA3LDB4QTUsCisweDdELDB4QzAsMHg3QywweDAwLDB4N0YsMHgwMCwweDdFLDB4NjYsCisweDEyLDB4MDcsMHhBNSwweDdELDB4MjgsMHg3QywweDk3LDB4N0YsCisweDAyLDB4N0UsMHg2NiwweDEyLDB4MDcsMHhBNSwweDdELDB4ODQsCisweDdDLDB4MDQsMHg3RiwweDAxLDB4N0UsMHg2NiwweDEyLDB4MDcsCisweEE1LDB4N0QsMHhDMCwweDdDLDB4MDAsMHg3RiwweDAwLDB4N0UsCisweDY2LDB4MTIsMHgwNywweEE1LDB4N0QsMHg4NSwweDdDLDB4OUQsCisweDdGLDB4MDIsMHg3RSwweDY2LDB4MTIsMHgwNywweEE1LDB4N0QsCisweDIzLDB4N0MsMHgwNCwweDdGLDB4MDEsMHg3RSwweDY2LDB4MTIsCisweDA3LDB4QTUsMHg3RCwweEMwLDB4N0MsMHgwMCwweDdGLDB4MDAsCisweDdFLDB4NjYsMHgxMiwweDA3LDB4QTUsMHg3RCwweDEwLDB4N0MsCisweEQ4LDB4N0YsMHgwMiwweDdFLDB4NjYsMHgxMiwweDA3LDB4QTUsCisweDdELDB4MjQsMHg3QywweDA0LDB4N0YsMHgwMSwweDdFLDB4NjYsCisweDEyLDB4MDcsMHhBNSwweDdELDB4QzAsMHg3QywweDAwLDB4N0YsCisweDAwLDB4N0UsMHg2NiwweDEyLDB4MDcsMHhBNSwweDdELDB4MDAsCisweDdDLDB4MDQsMHg3RiwweDAyLDB4N0UsMHg2NiwweDEyLDB4MDcsCisweEE1LDB4N0QsMHgyRiwweDdDLDB4MDAsMHg3RiwweDAxLDB4N0UsCisweDY2LDB4MTIsMHgwNywweEE1LDB4N0QsMHhDMCwweDdDLDB4MDAsCisweDdGLDB4MDAsMHg3RSwweDY2LDB4MDIsMHgwNywweEE1LDB4N0QsCisweDAzLDB4N0MsMHgwMCwweDdGLDB4MDEsMHg3RSwweDY2LDB4MTIsCisweDA3LDB4QTUsMHg3RCwweDgwLDB4N0MsMHgwMCwweDdGLDB4MDAsCisweDdFLDB4NjYsMHgxMiwweDA3LDB4QTUsMHg3RiwweDAyLDB4N0UsCisweDY2LDB4MTIsMHgwNywweDYwLDB4RUYsMHg0NCwweDQwLDB4RkQsCisweEFDLDB4MDYsMHg3RiwweDAyLDB4N0UsMHg2NiwweDEyLDB4MDcsCisweEE1LDB4N0QsMHgwMywweDdDLDB4MDAsMHg3RiwweDAxLDB4N0UsCisweDY2LDB4MTIsMHgwNywweEE1LDB4N0QsMHhDMCwweDdDLDB4MDAsCisweDdGLDB4MDAsMHg3RSwweDY2LDB4MTIsMHgwNywweEE1LDB4N0QsCisweDAzLDB4N0MsMHgwMCwweDdGLDB4MDEsMHg3RSwweDY2LDB4MTIsCisweDA3LDB4QTUsMHg3RCwweDgwLDB4N0MsMHgwMCwweDdGLDB4MDAsCisweDdFLDB4NjYsMHgxMiwweDA3LDB4QTUsMHg3RiwweDAyLDB4N0UsCisweDY2LDB4MTIsMHgwNywweDYwLDB4RUYsMHg1NCwweEJGLDB4RkQsCisweEFDLDB4MDYsMHg3RiwweDAyLDB4N0UsMHg2NiwweDEyLDB4MDcsCisweEE1LDB4N0QsMHgwMywweDdDLDB4MDAsMHg3RiwweDAxLDB4N0UsCisweDY2LDB4MTIsMHgwNywweEE1LDB4N0QsMHhDMCwweDdDLDB4MDAsCisweDdGLDB4MDAsMHg3RSwweDY2LDB4MTIsMHgwNywweEE1LDB4RTQsCisweEZELDB4RkMsMHg3RiwweDAxLDB4N0UsMHg2NiwweDEyLDB4MDcsCisweEE1LDB4N0QsMHg4MCwweDdDLDB4MDAsMHg3RiwweDAwLDB4N0UsCisweDY2LDB4MTIsMHgwNywweEE1LDB4N0YsMHgwMiwweDdFLDB4NjYsCisweDEyLDB4MDcsMHg2MCwweEVGLDB4NTQsMHhGRCwweDU0LDB4RkUsCisweEZELDB4QUMsMHgwNiwweDdGLDB4MDIsMHg3RSwweDY2LDB4MTIsCisweDA3LDB4QTUsMHhFNCwweEZELDB4RkMsMHg3RiwweDAxLDB4N0UsCisweDY2LDB4MTIsMHgwNywweEE1LDB4N0QsMHhDMCwweDdDLDB4MDAsCisweDdGLDB4MDAsMHg3RSwweDY2LDB4MTIsMHgwNywweEE1LDB4RTQsCisweEZELDB4RkMsMHg3RiwweDAxLDB4N0UsMHg2NiwweDEyLDB4MDcsCisweEE1LDB4N0QsMHg4MCwweDdDLDB4MDAsMHg3RiwweDAwLDB4N0UsCisweDY2LDB4MTIsMHgwNywweEE1LDB4N0YsMHgwMiwweDdFLDB4NjYsCisweDEyLDB4MDcsMHg2MCwweEVGLDB4NDQsMHgwMiwweDQ0LDB4MDEsCisweEZELDB4QUMsMHgwNiwweDdGLDB4MDIsMHg3RSwweDY2LDB4MTIsCisweDA3LDB4QTUsMHhFNCwweEZELDB4RkMsMHg3RiwweDAxLDB4N0UsCisweDY2LDB4MTIsMHgwNywweEE1LDB4N0QsMHhDMCwweDdDLDB4MDAsCisweDdGLDB4MDAsMHg3RSwweDY2LDB4MDIsMHgwNywweEE1LDB4RTQsCisweDkwLDB4MDYsMHgyQywweEYwLDB4RkQsMHg3QywweDAxLDB4N0YsCisweDNGLDB4N0UsMHgxRCwweDEyLDB4MDcsMHhBNSwweDdELDB4NDAsCisweDdDLDB4MDAsMHg3RiwweDM2LDB4N0UsMHgxMywweDEyLDB4MDcsCisweEE1LDB4RTQsMHhGRiwweEZFLDB4RkQsMHg4MCwweDI1LDB4RTQsCisweDdGLDB4RkYsMHg3RSwweEZGLDB4RkQsMHhGQywweDkwLDB4MDYsCisweDI0LDB4MTIsMHgwMSwweDBGLDB4QzMsMHgxMiwweDAwLDB4RjIsCisweDUwLDB4MUIsMHg5MCwweDA2LDB4MjQsMHgxMiwweDAxLDB4MDMsCisweEVGLDB4MjQsMHgwMSwweEZGLDB4RTQsMHgzRSwweEZFLDB4RTQsCisweDNELDB4RkQsMHhFNCwweDNDLDB4RkMsMHg5MCwweDA2LDB4MjQsCisweDEyLDB4MDEsMHgxQiwweDgwLDB4RDIsMHhFNCwweEY1LDB4QTgsCisweEQyLDB4QUYsMHg3RCwweDFGLDB4RkMsMHg3RiwweDQ5LDB4N0UsCisweDEzLDB4MTIsMHgwNywweEE1LDB4MTIsMHgwNywweEQ1LDB4MTIsCisweDAxLDB4MjcsMHgxMiwweDA2LDB4NUEsMHg3RCwweDQxLDB4N0MsCisweDAwLDB4N0YsMHgzNiwweDdFLDB4MTMsMHgxMiwweDA3LDB4QTUsCisweEU0LDB4RkYsMHhGRSwweEZELDB4ODAsMHgyNiwweDdGLDB4RkYsCisweDdFLDB4RkYsMHg3RCwweDA1LDB4N0MsMHgwMCwweDkwLDB4MDYsCisweDI0LDB4MTIsMHgwMSwweDBGLDB4QzMsMHgxMiwweDAwLDB4RjIsCisweDUwLDB4MUIsMHg5MCwweDA2LDB4MjQsMHgxMiwweDAxLDB4MDMsCisweEVGLDB4MjQsMHgwMSwweEZGLDB4RTQsMHgzRSwweEZFLDB4RTQsCisweDNELDB4RkQsMHhFNCwweDNDLDB4RkMsMHg5MCwweDA2LDB4MjQsCisweDEyLDB4MDEsMHgxQiwweDgwLDB4RDEsMHhDMiwweDAwLDB4QzIsCisweDAxLDB4RDIsMHhBOSwweEQyLDB4OEMsMHg3RiwweDAxLDB4N0UsCisweDYyLDB4MTIsMHgwNywweDYwLDB4RUYsMHgzMCwweEUyLDB4MDcsCisweEU0LDB4OTAsMHgwNiwweDJDLDB4RjAsMHg4MCwweEVFLDB4OTAsCisweDA2LDB4MkMsMHhFMCwweDcwLDB4MTIsMHgxMiwweDA0LDB4RUEsCisweDkwLDB4MDYsMHgyQywweDc0LDB4MDEsMHhGMCwweEU0LDB4OTAsCisweDA2LDB4MzMsMHhGMCwweEEzLDB4RjAsMHg4MCwweEQ2LDB4QzMsCisweDkwLDB4MDYsMHgzNCwweEUwLDB4OTQsMHg2MiwweDkwLDB4MDYsCisweDMzLDB4RTAsMHg5NCwweDAwLDB4NDAsMHhDNywweEU0LDB4RjAsCisweEEzLDB4RjAsMHgxMiwweDA0LDB4RUEsMHg5MCwweDA2LDB4MkMsCisweDc0LDB4MDEsMHhGMCwweDgwLDB4QjgsMHg3NSwweDBGLDB4ODAsCisweDc1LDB4MEUsMHg3RSwweDc1LDB4MEQsMHhBQSwweDc1LDB4MEMsCisweDgzLDB4RTQsMHhGNSwweDEwLDB4N0YsMHgzNiwweDdFLDB4MTMsCisweDEyLDB4MDcsMHg2MCwweEVFLDB4QzQsMHhGOCwweDU0LDB4RjAsCisweEM4LDB4RUYsMHhDNCwweDU0LDB4MEYsMHg0OCwweDU0LDB4MDcsCisweEZCLDB4N0EsMHgwMCwweEVBLDB4NzAsMHg0QSwweEVCLDB4MTQsCisweDYwLDB4MUMsMHgxNCwweDYwLDB4MjcsMHgyNCwweEZFLDB4NjAsCisweDMxLDB4MTQsMHg2MCwweDNDLDB4MjQsMHgwNSwweDcwLDB4MzgsCisweDc1LDB4MEIsMHgwMCwweDc1LDB4MEEsMHhDMiwweDc1LDB4MDksCisweEVCLDB4NzUsMHgwOCwweDBCLDB4ODAsMHgzNiwweDc1LDB4MEIsCisweDQwLDB4NzUsMHgwQSwweDU5LDB4NzUsMHgwOSwweDczLDB4NzUsCisweDA4LDB4MDcsMHg4MCwweDI4LDB4NzUsMHgwQiwweDAwLDB4NzUsCisweDBBLDB4RTEsMHg3NSwweDA5LDB4RjUsMHg3NSwweDA4LDB4MDUsCisweDgwLDB4MUEsMHg3NSwweDBCLDB4QTAsMHg3NSwweDBBLDB4QUMsCisweDc1LDB4MDksMHhCOSwweDc1LDB4MDgsMHgwMywweDgwLDB4MEMsCisweDc1LDB4MEIsMHgwMCwweDc1LDB4MEEsMHg2MiwweDc1LDB4MDksCisweDNELDB4NzUsMHgwOCwweDAxLDB4NzUsMHg4OSwweDExLDB4RTQsCisweDdCLDB4NjAsMHg3QSwweDA5LDB4RjksMHhGOCwweEFGLDB4MEIsCisweEFFLDB4MEEsMHhBRCwweDA5LDB4QUMsMHgwOCwweDEyLDB4MDAsCisweDYwLDB4QUEsMHgwNiwweEFCLDB4MDcsMHhDMywweEU0LDB4OUIsCisweEZCLDB4RTQsMHg5QSwweEZBLDB4NzgsMHgxNywweEY2LDB4QUYsCisweDAzLDB4RUYsMHgwOCwweEY2LDB4MTgsMHhFNiwweEY1LDB4OEMsCisweDA4LDB4RTYsMHhGNSwweDhBLDB4NzQsMHgwRCwweDJCLDB4RkIsCisweEU0LDB4M0EsMHgxOCwweEY2LDB4QUYsMHgwMywweEVGLDB4MDgsCisweEY2LDB4NzUsMHg4OCwweDEwLDB4NTMsMHg4RSwweEM3LDB4RDIsCisweEE5LDB4MjIsMHg3RiwweDEwLDB4N0UsMHgxMywweDEyLDB4MDcsCisweDYwLDB4OTAsMHgwNiwweDJELDB4RUUsMHhGMCwweEEzLDB4RUYsCisweEYwLDB4RUUsMHg0NCwweDEwLDB4RkUsMHg5MCwweDA2LDB4MkQsCisweEYwLDB4QTMsMHhFRiwweEYwLDB4NTQsMHhFRiwweEZGLDB4OTAsCisweDA2LDB4MkQsMHhFRSwweEYwLDB4RkMsMHhBMywweEVGLDB4RjAsCisweEZELDB4N0YsMHgxMCwweDdFLDB4MTMsMHgxMiwweDA3LDB4QTUsCisweEU0LDB4RkYsMHhGRSwweDBGLDB4QkYsMHgwMCwweDAxLDB4MEUsCisweEVGLDB4NjQsMHg2NCwweDRFLDB4NzAsMHhGNSwweDdELDB4MDQsCisweDdDLDB4MDAsMHg3RiwweDAyLDB4N0UsMHg2NiwweDEyLDB4MDcsCisweEE1LDB4N0QsMHgwMCwweDdDLDB4MDQsMHg3RiwweDAxLDB4N0UsCisweDY2LDB4MTIsMHgwNywweEE1LDB4N0QsMHhDMCwweDdDLDB4MDAsCisweDdGLDB4MDAsMHg3RSwweDY2LDB4MTIsMHgwNywweEE1LDB4RTQsCisweEZELDB4RkMsMHg3RiwweDAyLDB4N0UsMHg2NiwweDEyLDB4MDcsCisweEE1LDB4N0QsMHgwMCwweDdDLDB4MDQsMHg3RiwweDAxLDB4N0UsCisweDY2LDB4MTIsMHgwNywweEE1LDB4N0QsMHhDMCwweDdDLDB4MDAsCisweDdGLDB4MDAsMHg3RSwweDY2LDB4MTIsMHgwNywweEE1LDB4N0YsCisweDEwLDB4N0UsMHgxMywweDEyLDB4MDcsMHg2MCwweDkwLDB4MDYsCisweDJELDB4RUUsMHhGMCwweEEzLDB4RUYsMHhGMCwweEVFLDB4NTQsCisweEVGLDB4OTAsMHgwNiwweDJELDB4RjAsMHhGQywweEEzLDB4RUYsCisweEYwLDB4RkQsMHg3RiwweDEwLDB4N0UsMHgxMywweDAyLDB4MDcsCisweEE1LDB4NzgsMHg3RiwweEU0LDB4RjYsMHhEOCwweEZELDB4NzUsCisweDgxLDB4M0MsMHgwMiwweDA1LDB4RDAsMHgwMiwweDAzLDB4MkYsCisweEU0LDB4OTMsMHhBMywweEY4LDB4RTQsMHg5MywweEEzLDB4NDAsCisweDAzLDB4RjYsMHg4MCwweDAxLDB4RjIsMHgwOCwweERGLDB4RjQsCisweDgwLDB4MjksMHhFNCwweDkzLDB4QTMsMHhGOCwweDU0LDB4MDcsCisweDI0LDB4MEMsMHhDOCwweEMzLDB4MzMsMHhDNCwweDU0LDB4MEYsCisweDQ0LDB4MjAsMHhDOCwweDgzLDB4NDAsMHgwNCwweEY0LDB4NTYsCisweDgwLDB4MDEsMHg0NiwweEY2LDB4REYsMHhFNCwweDgwLDB4MEIsCisweDAxLDB4MDIsMHgwNCwweDA4LDB4MTAsMHgyMCwweDQwLDB4ODAsCisweDkwLDB4MDcsMHhFMSwweEU0LDB4N0UsMHgwMSwweDkzLDB4NjAsCisweEJDLDB4QTMsMHhGRiwweDU0LDB4M0YsMHgzMCwweEU1LDB4MDksCisweDU0LDB4MUYsMHhGRSwweEU0LDB4OTMsMHhBMywweDYwLDB4MDEsCisweDBFLDB4Q0YsMHg1NCwweEMwLDB4MjUsMHhFMCwweDYwLDB4QTgsCisweDQwLDB4QjgsMHhFNCwweDkzLDB4QTMsMHhGQSwweEU0LDB4OTMsCisweEEzLDB4RjgsMHhFNCwweDkzLDB4QTMsMHhDOCwweEM1LDB4ODIsCisweEM4LDB4Q0EsMHhDNSwweDgzLDB4Q0EsMHhGMCwweEEzLDB4QzgsCisweEM1LDB4ODIsMHhDOCwweENBLDB4QzUsMHg4MywweENBLDB4REYsCisweEU5LDB4REUsMHhFNywweDgwLDB4QkUsMHg3RCwweDQwLDB4N0MsCisweDE3LDB4N0YsMHgxMSwweDdFLDB4MUQsMHgxMiwweDA3LDB4QTUsCisweDdGLDB4NDEsMHg3RSwweDFELDB4MTIsMHgwNywweDYwLDB4RUYsCisweDQ0LDB4MjAsMHg0NCwweDgwLDB4RkQsMHhBQywweDA2LDB4N0YsCisweDQxLDB4N0UsMHgxRCwweDEyLDB4MDcsMHhBNSwweDdELDB4QkIsCisweDdDLDB4MTUsMHg3RiwweEVCLDB4N0UsMHgxMywweDEyLDB4MDcsCisweEE1LDB4N0QsMHgwNywweDdDLDB4MDAsMHg3RiwweEU3LDB4N0UsCisweDEzLDB4MTIsMHgwNywweEE1LDB4N0QsMHg0MCwweDdDLDB4MTEsCisweDdGLDB4MDAsMHg3RSwweDYyLDB4MTIsMHgwNywweEE1LDB4MDIsCisweDAyLDB4MkYsMHg3RCwweEMwLDB4N0MsMHgxNiwweDdGLDB4MTEsCisweDdFLDB4MUQsMHgxMiwweDA3LDB4QTUsMHg3RCwweEJCLDB4N0MsCisweDE1LDB4N0YsMHhFQiwweDdFLDB4MTMsMHgxMiwweDA3LDB4QTUsCisweDdELDB4MEQsMHg3QywweDAwLDB4N0YsMHhFNywweDdFLDB4MTMsCisweDEyLDB4MDcsMHhBNSwweDdGLDB4NDEsMHg3RSwweDFELDB4MTIsCisweDA3LDB4NjAsMHhFRiwweDQ0LDB4MjAsMHg0NCwweDgwLDB4RkQsCisweEFDLDB4MDYsMHg3RiwweDQxLDB4N0UsMHgxRCwweDEyLDB4MDcsCisweEE1LDB4N0QsMHgwMCwweDdDLDB4MjEsMHg3RiwweDAwLDB4N0UsCisweDYyLDB4MTIsMHgwNywweEE1LDB4MDIsMHgwMiwweDJGLDB4N0QsCisweDQwLDB4N0MsMHgxNywweDdGLDB4MTEsMHg3RSwweDFELDB4MTIsCisweDA3LDB4QTUsMHg3RCwweEJCLDB4N0MsMHgxNSwweDdGLDB4RUIsCisweDdFLDB4MTMsMHgxMiwweDA3LDB4QTUsMHg3RCwweDBDLDB4N0MsCisweDAwLDB4N0YsMHhFNywweDdFLDB4MTMsMHgxMiwweDA3LDB4QTUsCisweDdGLDB4NDEsMHg3RSwweDFELDB4MTIsMHgwNywweDYwLDB4RUYsCisweDQ0LDB4MjAsMHg0NCwweDgwLDB4RkQsMHhBQywweDA2LDB4N0YsCisweDQxLDB4N0UsMHgxRCwweDEyLDB4MDcsMHhBNSwweDdELDB4NDAsCisweDdDLDB4MTEsMHg3RiwweDAwLDB4N0UsMHg2MiwweDEyLDB4MDcsCisweEE1LDB4MDIsMHgwMiwweDJGLDB4N0QsMHgwNCwweDdDLDB4MDAsCisweDdGLDB4MDEsMHg3RSwweDY2LDB4MTIsMHgwNywweEE1LDB4N0QsCisweDgwLDB4N0MsMHgwMCwweDdGLDB4MDAsMHg3RSwweDY2LDB4MTIsCisweDA3LDB4QTUsMHg3RiwweDAyLDB4N0UsMHg2NiwweDEyLDB4MDcsCisweDYwLDB4RUYsMHg0NCwweDAyLDB4NDQsMHgwNCwweEZELDB4QUMsCisweDA2LDB4N0YsMHgwMiwweDdFLDB4NjYsMHgxMiwweDA3LDB4QTUsCisweDdELDB4MDQsMHg3QywweDAwLDB4N0YsMHgwMSwweDdFLDB4NjYsCisweDEyLDB4MDcsMHhBNSwweDdELDB4QzAsMHg3QywweDAwLDB4N0YsCisweDAwLDB4N0UsMHg2NiwweDAyLDB4MDcsMHhBNSwweEMwLDB4RTAsCisweEMwLDB4RjAsMHhDMCwweDgzLDB4QzAsMHg4MiwweEMwLDB4RDAsCisweDc1LDB4RDAsMHgwMCwweEMwLDB4MDAsMHg3OCwweDE3LDB4RTYsCisweEY1LDB4OEMsMHg3OCwweDE4LDB4RTYsMHhGNSwweDhBLDB4OTAsCisweDA2LDB4MzEsMHhFNCwweDc1LDB4RjAsMHgwMSwweDEyLDB4MDAsCisweDBFLDB4OTAsMHgwNiwweDMzLDB4RTQsMHg3NSwweEYwLDB4MDEsCisweDEyLDB4MDAsMHgwRSwweEQwLDB4MDAsMHhEMCwweEQwLDB4RDAsCisweDgyLDB4RDAsMHg4MywweEQwLDB4RjAsMHhEMCwweEUwLDB4MzIsCisweEMyLDB4QUYsMHhBRCwweDA3LDB4QUMsMHgwNiwweDhDLDB4QTIsCisweDhELDB4QTMsMHg3NSwweEEwLDB4MDEsMHgwMCwweDAwLDB4MDAsCisweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisweEFFLDB4QTEsMHhCRSwweDAwLDB4RjAsMHhBRSwweEE2LDB4QUYsCisweEE3LDB4RDIsMHhBRiwweDIyLDB4N0QsMHgyMCwweDdDLDB4MEYsCisweDdGLDB4MDIsMHg3RSwweDY2LDB4MTIsMHgwNywweEE1LDB4N0QsCisweDAxLDB4N0MsMHgwMCwweDdGLDB4MDEsMHg3RSwweDY2LDB4MTIsCisweDA3LDB4QTUsMHg3RCwweEMwLDB4N0MsMHgwMCwweDdGLDB4MDAsCisweDdFLDB4NjYsMHgwMiwweDA3LDB4QTUsMHhDMiwweEFGLDB4QUIsCisweDA3LDB4QUEsMHgwNiwweDhBLDB4QTIsMHg4QiwweEEzLDB4OEMsCisweEE0LDB4OEQsMHhBNSwweDc1LDB4QTAsMHgwMywweDAwLDB4MDAsCisweDAwLDB4QUEsMHhBMSwweEJBLDB4MDAsMHhGOCwweEQyLDB4QUYsCisweDIyLDB4N0YsMHgwQywweDdFLDB4MTMsMHgxMiwweDA3LDB4NjAsCisweEVGLDB4NDQsMHg1MCwweEZELDB4QUMsMHgwNiwweDdGLDB4MEMsCisweDdFLDB4MTMsMHgwMiwweDA3LDB4QTUsMHgxMiwweDA3LDB4QzEsCisweDEyLDB4MDcsMHhFQywweDEyLDB4MDQsMHgyNSwweDAyLDB4MDAsCisweDAzLDB4NDIsMHgwNiwweDMzLDB4MDAsMHgwMCwweDQyLDB4MDYsCisweDMxLDB4MDAsMHgwMCwweDAwLDB4RTQsMHhGNSwweDhFLDB4MjIsfTsKKworCisjZGVmaW5lIFNHTUlJX0lOSVRfU0laRSAxMTgzCitydGtfdWludDggU2dtaWlfSW5pdFtTR01JSV9JTklUX1NJWkVdID0geworMHgwMiwweDAzLDB4ODEsMHhFNCwweEY1LDB4QTgsMHhEMiwweEFGLAorMHgyMiwweDAwLDB4MDAsMHgwMiwweDA0LDB4MEQsMHhDNSwweEYwLAorMHhGOCwweEEzLDB4RTAsMHgyOCwweEYwLDB4QzUsMHhGMCwweEY4LAorMHhFNSwweDgyLDB4MTUsMHg4MiwweDcwLDB4MDIsMHgxNSwweDgzLAorMHhFMCwweDM4LDB4RjAsMHgyMiwweDc1LDB4RjAsMHgwOCwweDc1LAorMHg4MiwweDAwLDB4RUYsMHgyRiwweEZGLDB4RUUsMHgzMywweEZFLAorMHhDRCwweDMzLDB4Q0QsMHhDQywweDMzLDB4Q0MsMHhDNSwweDgyLAorMHgzMywweEM1LDB4ODIsMHg5QiwweEVELDB4OUEsMHhFQywweDk5LAorMHhFNSwweDgyLDB4OTgsMHg0MCwweDBDLDB4RjUsMHg4MiwweEVFLAorMHg5QiwweEZFLDB4RUQsMHg5QSwweEZELDB4RUMsMHg5OSwweEZDLAorMHgwRiwweEQ1LDB4RjAsMHhENiwweEU0LDB4Q0UsMHhGQiwweEU0LAorMHhDRCwweEZBLDB4RTQsMHhDQywweEY5LDB4QTgsMHg4MiwweDIyLAorMHhCOCwweDAwLDB4QzEsMHhCOSwweDAwLDB4NTksMHhCQSwweDAwLAorMHgyRCwweEVDLDB4OEIsMHhGMCwweDg0LDB4Q0YsMHhDRSwweENELAorMHhGQywweEU1LDB4RjAsMHhDQiwweEY5LDB4NzgsMHgxOCwweEVGLAorMHgyRiwweEZGLDB4RUUsMHgzMywweEZFLDB4RUQsMHgzMywweEZELAorMHhFQywweDMzLDB4RkMsMHhFQiwweDMzLDB4RkIsMHgxMCwweEQ3LAorMHgwMywweDk5LDB4NDAsMHgwNCwweEVCLDB4OTksMHhGQiwweDBGLAorMHhEOCwweEU1LDB4RTQsMHhGOSwweEZBLDB4MjIsMHg3OCwweDE4LAorMHhFRiwweDJGLDB4RkYsMHhFRSwweDMzLDB4RkUsMHhFRCwweDMzLAorMHhGRCwweEVDLDB4MzMsMHhGQywweEM5LDB4MzMsMHhDOSwweDEwLAorMHhENywweDA1LDB4OUIsMHhFOSwweDlBLDB4NDAsMHgwNywweEVDLAorMHg5QiwweEZDLDB4RTksMHg5QSwweEY5LDB4MEYsMHhEOCwweEUwLAorMHhFNCwweEM5LDB4RkEsMHhFNCwweENDLDB4RkIsMHgyMiwweDc1LAorMHhGMCwweDEwLDB4RUYsMHgyRiwweEZGLDB4RUUsMHgzMywweEZFLAorMHhFRCwweDMzLDB4RkQsMHhDQywweDMzLDB4Q0MsMHhDOCwweDMzLAorMHhDOCwweDEwLDB4RDcsMHgwNywweDlCLDB4RUMsMHg5QSwweEU4LAorMHg5OSwweDQwLDB4MEEsMHhFRCwweDlCLDB4RkQsMHhFQywweDlBLAorMHhGQywweEU4LDB4OTksMHhGOCwweDBGLDB4RDUsMHhGMCwweERBLAorMHhFNCwweENELDB4RkIsMHhFNCwweENDLDB4RkEsMHhFNCwweEM4LAorMHhGOSwweDIyLDB4RUIsMHg5RiwweEY1LDB4RjAsMHhFQSwweDlFLAorMHg0MiwweEYwLDB4RTksMHg5RCwweDQyLDB4RjAsMHhFOCwweDlDLAorMHg0NSwweEYwLDB4MjIsMHhFMCwweEZDLDB4QTMsMHhFMCwweEZELAorMHhBMywweEUwLDB4RkUsMHhBMywweEUwLDB4RkYsMHgyMiwweEUwLAorMHhGOCwweEEzLDB4RTAsMHhGOSwweEEzLDB4RTAsMHhGQSwweEEzLAorMHhFMCwweEZCLDB4MjIsMHhFQywweEYwLDB4QTMsMHhFRCwweEYwLAorMHhBMywweEVFLDB4RjAsMHhBMywweEVGLDB4RjAsMHgyMiwweEU0LAorMHg5MCwweDA2LDB4MkMsMHhGMCwweEZELDB4N0MsMHgwMSwweDdGLAorMHgzRiwweDdFLDB4MUQsMHgxMiwweDA0LDB4NkIsMHg3RCwweDQwLAorMHg3QywweDAwLDB4N0YsMHgzNiwweDdFLDB4MTMsMHgxMiwweDA0LAorMHg2QiwweEU0LDB4RkYsMHhGRSwweEZELDB4ODAsMHgyNSwweEU0LAorMHg3RiwweEZGLDB4N0UsMHhGRiwweEZELDB4RkMsMHg5MCwweDA2LAorMHgyNCwweDEyLDB4MDEsMHgwRiwweEMzLDB4MTIsMHgwMCwweEYyLAorMHg1MCwweDFCLDB4OTAsMHgwNiwweDI0LDB4MTIsMHgwMSwweDAzLAorMHhFRiwweDI0LDB4MDEsMHhGRiwweEU0LDB4M0UsMHhGRSwweEU0LAorMHgzRCwweEZELDB4RTQsMHgzQywweEZDLDB4OTAsMHgwNiwweDI0LAorMHgxMiwweDAxLDB4MUIsMHg4MCwweEQyLDB4RTQsMHhGNSwweEE4LAorMHhEMiwweEFGLDB4N0QsMHgxRiwweEZDLDB4N0YsMHg0OSwweDdFLAorMHgxMywweDEyLDB4MDQsMHg2QiwweDEyLDB4MDQsMHg5MiwweDdELAorMHg0MSwweDdDLDB4MDAsMHg3RiwweDM2LDB4N0UsMHgxMywweDEyLAorMHgwNCwweDZCLDB4RTQsMHhGRiwweEZFLDB4RkQsMHg4MCwweDI1LAorMHhFNCwweDdGLDB4MjAsMHg3RSwweDRFLDB4RkQsMHhGQywweDkwLAorMHgwNiwweDI0LDB4MTIsMHgwMSwweDBGLDB4QzMsMHgxMiwweDAwLAorMHhGMiwweDUwLDB4MUIsMHg5MCwweDA2LDB4MjQsMHgxMiwweDAxLAorMHgwMywweEVGLDB4MjQsMHgwMSwweEZGLDB4RTQsMHgzRSwweEZFLAorMHhFNCwweDNELDB4RkQsMHhFNCwweDNDLDB4RkMsMHg5MCwweDA2LAorMHgyNCwweDEyLDB4MDEsMHgxQiwweDgwLDB4RDIsMHhDMiwweDAwLAorMHhDMiwweDAxLDB4RDIsMHhBOSwweEQyLDB4OEMsMHg3RiwweDAxLAorMHg3RSwweDYyLDB4MTIsMHgwNCwweDQ3LDB4RUYsMHgzMCwweEUyLAorMHgwNywweEU0LDB4OTAsMHgwNiwweDJDLDB4RjAsMHg4MCwweEVFLAorMHg5MCwweDA2LDB4MkMsMHhFMCwweDcwLDB4MTIsMHgxMiwweDAyLAorMHhEQiwweDkwLDB4MDYsMHgyQywweDc0LDB4MDEsMHhGMCwweEU0LAorMHg5MCwweDA2LDB4MkYsMHhGMCwweEEzLDB4RjAsMHg4MCwweEQ2LAorMHhDMywweDkwLDB4MDYsMHgzMCwweEUwLDB4OTQsMHg2MiwweDkwLAorMHgwNiwweDJGLDB4RTAsMHg5NCwweDAwLDB4NDAsMHhDNywweEU0LAorMHhGMCwweEEzLDB4RjAsMHgxMiwweDAyLDB4REIsMHg5MCwweDA2LAorMHgyQywweDc0LDB4MDEsMHhGMCwweDgwLDB4QjgsMHg3NSwweDBGLAorMHg4MCwweDc1LDB4MEUsMHg3RSwweDc1LDB4MEQsMHhBQSwweDc1LAorMHgwQywweDgzLDB4RTQsMHhGNSwweDEwLDB4N0YsMHgzNiwweDdFLAorMHgxMywweDEyLDB4MDQsMHg0NywweEVFLDB4QzQsMHhGOCwweDU0LAorMHhGMCwweEM4LDB4RUYsMHhDNCwweDU0LDB4MEYsMHg0OCwweDU0LAorMHgwNywweEZCLDB4N0EsMHgwMCwweEVBLDB4NzAsMHg0QSwweEVCLAorMHgxNCwweDYwLDB4MUMsMHgxNCwweDYwLDB4MjcsMHgyNCwweEZFLAorMHg2MCwweDMxLDB4MTQsMHg2MCwweDNDLDB4MjQsMHgwNSwweDcwLAorMHgzOCwweDc1LDB4MEIsMHgwMCwweDc1LDB4MEEsMHhDMiwweDc1LAorMHgwOSwweEVCLDB4NzUsMHgwOCwweDBCLDB4ODAsMHgzNiwweDc1LAorMHgwQiwweDQwLDB4NzUsMHgwQSwweDU5LDB4NzUsMHgwOSwweDczLAorMHg3NSwweDA4LDB4MDcsMHg4MCwweDI4LDB4NzUsMHgwQiwweDAwLAorMHg3NSwweDBBLDB4RTEsMHg3NSwweDA5LDB4RjUsMHg3NSwweDA4LAorMHgwNSwweDgwLDB4MUEsMHg3NSwweDBCLDB4QTAsMHg3NSwweDBBLAorMHhBQywweDc1LDB4MDksMHhCOSwweDc1LDB4MDgsMHgwMywweDgwLAorMHgwQywweDc1LDB4MEIsMHgwMCwweDc1LDB4MEEsMHg2MiwweDc1LAorMHgwOSwweDNELDB4NzUsMHgwOCwweDAxLDB4NzUsMHg4OSwweDExLAorMHhFNCwweDdCLDB4NjAsMHg3QSwweDA5LDB4RjksMHhGOCwweEFGLAorMHgwQiwweEFFLDB4MEEsMHhBRCwweDA5LDB4QUMsMHgwOCwweDEyLAorMHgwMCwweDYwLDB4QUEsMHgwNiwweEFCLDB4MDcsMHhDMywweEU0LAorMHg5QiwweEZCLDB4RTQsMHg5QSwweEZBLDB4NzgsMHgxNywweEY2LAorMHhBRiwweDAzLDB4RUYsMHgwOCwweEY2LDB4MTgsMHhFNiwweEY1LAorMHg4QywweDA4LDB4RTYsMHhGNSwweDhBLDB4NzQsMHgwRCwweDJCLAorMHhGQiwweEU0LDB4M0EsMHgxOCwweEY2LDB4QUYsMHgwMywweEVGLAorMHgwOCwweEY2LDB4NzUsMHg4OCwweDEwLDB4NTMsMHg4RSwweEM3LAorMHhEMiwweEE5LDB4MjIsMHg3RCwweDAyLDB4N0MsMHgwMCwweDdGLAorMHg0QSwweDdFLDB4MTMsMHgxMiwweDA0LDB4NkIsMHg3RCwweDQ2LAorMHg3QywweDcxLDB4N0YsMHgwMiwweDdFLDB4NjYsMHgxMiwweDA0LAorMHg2QiwweDdELDB4MDMsMHg3QywweDAwLDB4N0YsMHgwMSwweDdFLAorMHg2NiwweDEyLDB4MDQsMHg2QiwweDdELDB4QzAsMHg3QywweDAwLAorMHg3RiwweDAwLDB4N0UsMHg2NiwweDEyLDB4MDQsMHg2QiwweEU0LAorMHhGRiwweEZFLDB4MEYsMHhCRiwweDAwLDB4MDEsMHgwRSwweEVGLAorMHg2NCwweDY0LDB4NEUsMHg3MCwweEY1LDB4N0QsMHgwNCwweDdDLAorMHgwMCwweDdGLDB4MDIsMHg3RSwweDY2LDB4MTIsMHgwNCwweDZCLAorMHg3RCwweDAwLDB4N0MsMHgwNCwweDdGLDB4MDEsMHg3RSwweDY2LAorMHgxMiwweDA0LDB4NkIsMHg3RCwweEMwLDB4N0MsMHgwMCwweDdGLAorMHgwMCwweDdFLDB4NjYsMHgxMiwweDA0LDB4NkIsMHhFNCwweEZELAorMHhGQywweDdGLDB4MDIsMHg3RSwweDY2LDB4MTIsMHgwNCwweDZCLAorMHg3RCwweDAwLDB4N0MsMHgwNCwweDdGLDB4MDEsMHg3RSwweDY2LAorMHgxMiwweDA0LDB4NkIsMHg3RCwweEMwLDB4N0MsMHgwMCwweDdGLAorMHgwMCwweDdFLDB4NjYsMHgxMiwweDA0LDB4NkIsMHhFNCwweEZELAorMHhGQywweDdGLDB4NEEsMHg3RSwweDEzLDB4MTIsMHgwNCwweDZCLAorMHg3RCwweDA2LDB4N0MsMHg3MSwweDdGLDB4MDIsMHg3RSwweDY2LAorMHgxMiwweDA0LDB4NkIsMHg3RCwweDAzLDB4N0MsMHgwMCwweDdGLAorMHgwMSwweDdFLDB4NjYsMHgxMiwweDA0LDB4NkIsMHg3RCwweEMwLAorMHg3QywweDAwLDB4N0YsMHgwMCwweDdFLDB4NjYsMHgwMiwweDA0LAorMHg2QiwweDc4LDB4N0YsMHhFNCwweEY2LDB4RDgsMHhGRCwweDc1LAorMHg4MSwweDNDLDB4MDIsMHgwMywweEM4LDB4MDIsMHgwMSwweDI3LAorMHhFNCwweDkzLDB4QTMsMHhGOCwweEU0LDB4OTMsMHhBMywweDQwLAorMHgwMywweEY2LDB4ODAsMHgwMSwweEYyLDB4MDgsMHhERiwweEY0LAorMHg4MCwweDI5LDB4RTQsMHg5MywweEEzLDB4RjgsMHg1NCwweDA3LAorMHgyNCwweDBDLDB4QzgsMHhDMywweDMzLDB4QzQsMHg1NCwweDBGLAorMHg0NCwweDIwLDB4QzgsMHg4MywweDQwLDB4MDQsMHhGNCwweDU2LAorMHg4MCwweDAxLDB4NDYsMHhGNiwweERGLDB4RTQsMHg4MCwweDBCLAorMHgwMSwweDAyLDB4MDQsMHgwOCwweDEwLDB4MjAsMHg0MCwweDgwLAorMHg5MCwweDA0LDB4ODcsMHhFNCwweDdFLDB4MDEsMHg5MywweDYwLAorMHhCQywweEEzLDB4RkYsMHg1NCwweDNGLDB4MzAsMHhFNSwweDA5LAorMHg1NCwweDFGLDB4RkUsMHhFNCwweDkzLDB4QTMsMHg2MCwweDAxLAorMHgwRSwweENGLDB4NTQsMHhDMCwweDI1LDB4RTAsMHg2MCwweEE4LAorMHg0MCwweEI4LDB4RTQsMHg5MywweEEzLDB4RkEsMHhFNCwweDkzLAorMHhBMywweEY4LDB4RTQsMHg5MywweEEzLDB4QzgsMHhDNSwweDgyLAorMHhDOCwweENBLDB4QzUsMHg4MywweENBLDB4RjAsMHhBMywweEM4LAorMHhDNSwweDgyLDB4QzgsMHhDQSwweEM1LDB4ODMsMHhDQSwweERGLAorMHhFOSwweERFLDB4RTcsMHg4MCwweEJFLDB4QzAsMHhFMCwweEMwLAorMHhGMCwweEMwLDB4ODMsMHhDMCwweDgyLDB4QzAsMHhEMCwweDc1LAorMHhEMCwweDAwLDB4QzAsMHgwMCwweDc4LDB4MTcsMHhFNiwweEY1LAorMHg4QywweDc4LDB4MTgsMHhFNiwweEY1LDB4OEEsMHg5MCwweDA2LAorMHgyRCwweEU0LDB4NzUsMHhGMCwweDAxLDB4MTIsMHgwMCwweDBFLAorMHg5MCwweDA2LDB4MkYsMHhFNCwweDc1LDB4RjAsMHgwMSwweDEyLAorMHgwMCwweDBFLDB4RDAsMHgwMCwweEQwLDB4RDAsMHhEMCwweDgyLAorMHhEMCwweDgzLDB4RDAsMHhGMCwweEQwLDB4RTAsMHgzMiwweEMyLAorMHhBRiwweEFELDB4MDcsMHhBQywweDA2LDB4OEMsMHhBMiwweDhELAorMHhBMywweDc1LDB4QTAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLAorMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEFFLAorMHhBMSwweEJFLDB4MDAsMHhGMCwweEFFLDB4QTYsMHhBRiwweEE3LAorMHhEMiwweEFGLDB4MjIsMHhDMiwweEFGLDB4QUIsMHgwNywweEFBLAorMHgwNiwweDhBLDB4QTIsMHg4QiwweEEzLDB4OEMsMHhBNCwweDhELAorMHhBNSwweDc1LDB4QTAsMHgwMywweDAwLDB4MDAsMHgwMCwweEFBLAorMHhBMSwweEJBLDB4MDAsMHhGOCwweEQyLDB4QUYsMHgyMiwweDQyLAorMHgwNiwweDJGLDB4MDAsMHgwMCwweDQyLDB4MDYsMHgyRCwweDAwLAorMHgwMCwweDAwLDB4MTIsMHgwNCwweDlCLDB4MTIsMHgwMiwweDE2LAorMHgwMiwweDAwLDB4MDMsMHhFNCwweEY1LDB4OEUsMHgyMix9OworCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNQb3J0VW5rbm93bkRhQmVoYXZpb3IKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgVU5EQSBiZWhhdmlvcgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgIC0gcG9ydCBJRAorICogICAgICBiZWhhdmlvciAgICAtIDA6IGZsb29kaW5nIHRvIHVua253b24gREEgcG9ydG1hc2s7IDE6IGRyb3A7IDI6dHJhcDsgMzogZmxvb2RpbmcKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfTk9UX0FMTE9XRUQgIC0gSW52YWxpZCBiZWhhdmlvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljUG9ydFVua25vd25EYUJlaGF2aW9yKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBiZWhhdmlvcikKK3sKKyAgICBpZihwb3J0ID49IFJUTDgzNjdDX1BPUlROTykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgaWYoYmVoYXZpb3IgPj0gTDJfVU5EQV9CRUhBVkVfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX05PVF9BTExPV0VEOworCisgICAgaWYocG9ydCA8IDgpCisgICAgICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfVU5LTk9XTl9VTklDQVNUX0RBX1BPUlRfQkVIQVZFLCBSVEw4MzY3Q19Qb3J0MF9BQ1RJT05fTUFTSyA8PCAocG9ydCAqIDIpLCBiZWhhdmlvcik7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1VOS05PV05fVU5JQ0FTVF9EQV9QT1JUX0JFSEFWRV9FWFQsIFJUTDgzNjdDX1BPUlQ4X0FDVElPTl9NQVNLIDw8ICgocG9ydC04KSAqIDIpLCBiZWhhdmlvcik7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljUG9ydFVua25vd25EYUJlaGF2aW9yCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFVOREEgYmVoYXZpb3IKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAtIHBvcnQgSUQKKyAqIE91dHB1dDoKKyAqICAgICAgcEJlaGF2aW9yICAgLSAwOiBmbG9vZGluZyB0byB1bmtud29uIERBIHBvcnRtYXNrOyAxOiBkcm9wOyAyOnRyYXA7IDM6IGZsb29kaW5nCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BvcnRVbmtub3duRGFCZWhhdmlvcihydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgKnBCZWhhdmlvcikKK3sKKyAgICBpZihwb3J0ID49IFJUTDgzNjdDX1BPUlROTykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgaWYocG9ydCA8IDgpCisgICAgICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfVU5LTk9XTl9VTklDQVNUX0RBX1BPUlRfQkVIQVZFLCBSVEw4MzY3Q19Qb3J0MF9BQ1RJT05fTUFTSyA8PCAocG9ydCAqIDIpLCBwQmVoYXZpb3IpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19VTktOT1dOX1VOSUNBU1RfREFfUE9SVF9CRUhBVkVfRVhULCBSVEw4MzY3Q19QT1JUOF9BQ1RJT05fTUFTSyA8PCAoKHBvcnQtOCkgKiAyKSwgcEJlaGF2aW9yKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNQb3J0VW5rbm93blNhQmVoYXZpb3IKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgVU5TQSBiZWhhdmlvcgorICogSW5wdXQ6CisgKiAgICAgIGJlaGF2aW9yICAgIC0gMDogZmxvb2Rpbmc7IDE6IGRyb3A7IDI6dHJhcAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9OT1RfQUxMT1dFRCAgLSBJbnZhbGlkIGJlaGF2aW9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNQb3J0VW5rbm93blNhQmVoYXZpb3IocnRrX3VpbnQzMiBiZWhhdmlvcikKK3sKKyAgICBpZihiZWhhdmlvciA+PSBMMl9CRUhBVkVfU0FfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX05PVF9BTExPV0VEOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1BPUlRfU0VDVVJJVF9DVFJMX1JFRywgUlRMODM2N0NfVU5LTk9XTl9TQV9CRUhBVkVfTUFTSywgYmVoYXZpb3IpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1BvcnRVbmtub3duU2FCZWhhdmlvcgorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBVTlNBIGJlaGF2aW9yCisgKiBJbnB1dDoKKyAqICAgICAgcEJlaGF2aW9yICAgLSAwOiBmbG9vZGluZzsgMTogZHJvcDsgMjp0cmFwCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljUG9ydFVua25vd25TYUJlaGF2aW9yKHJ0a191aW50MzIgKnBCZWhhdmlvcikKK3sKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUE9SVF9TRUNVUklUX0NUUkxfUkVHLCBSVEw4MzY3Q19VTktOT1dOX1NBX0JFSEFWRV9NQVNLLCBwQmVoYXZpb3IpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1BvcnRVbm1hdGNoZWRTYUJlaGF2aW9yCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IFVubWF0Y2hlZCBTQSBiZWhhdmlvcgorICogSW5wdXQ6CisgKiAgICAgIGJlaGF2aW9yICAgIC0gMDogZmxvb2Rpbmc7IDE6IGRyb3A7IDI6dHJhcAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9OT1RfQUxMT1dFRCAgLSBJbnZhbGlkIGJlaGF2aW9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNQb3J0VW5tYXRjaGVkU2FCZWhhdmlvcihydGtfdWludDMyIGJlaGF2aW9yKQoreworICAgIGlmKGJlaGF2aW9yID49IEwyX0JFSEFWRV9TQV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfTk9UX0FMTE9XRUQ7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUE9SVF9TRUNVUklUX0NUUkxfUkVHLCBSVEw4MzY3Q19VTk1BVENIRURfU0FfQkVIQVZFX01BU0ssIGJlaGF2aW9yKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNQb3J0VW5tYXRjaGVkU2FCZWhhdmlvcgorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBVbm1hdGNoZWQgU0EgYmVoYXZpb3IKKyAqIElucHV0OgorICogICAgICBwQmVoYXZpb3IgICAtIDA6IGZsb29kaW5nOyAxOiBkcm9wOyAyOnRyYXAKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNQb3J0VW5tYXRjaGVkU2FCZWhhdmlvcihydGtfdWludDMyICpwQmVoYXZpb3IpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1BPUlRfU0VDVVJJVF9DVFJMX1JFRywgUlRMODM2N0NfVU5NQVRDSEVEX1NBX0JFSEFWRV9NQVNLLCBwQmVoYXZpb3IpOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljUG9ydFVubWF0Y2hlZFNhTW92aW5nCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IFVubWF0Y2hlZCBTQSBtb3Zpbmcgc3RhdGUKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAtIFBvcnQgSUQKKyAqICAgICAgZW5hYmxlZCAgICAgLSAwOiBjYW4ndCBtb3ZlIHRvIG5ldyBwb3J0OyAxOiBjYW4gbW92ZSB0byBuZXcgcG9ydAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBFcnJvciBQb3J0IElECisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNQb3J0VW5tYXRjaGVkU2FNb3ZpbmcocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGVuYWJsZWQpCit7CisgICAgaWYocG9ydCA+PSBSVEw4MzY3Q19QT1JUTk8pCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19MMl9TQV9NT1ZJTkdfRk9SQklELCBwb3J0LCAoZW5hYmxlZCA9PSAxKSA/IDAgOiAxKTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1BvcnRVbm1hdGNoZWRTYU1vdmluZworICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBVbm1hdGNoZWQgU0EgbW92aW5nIHN0YXRlCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQb3J0IElECisgKiBPdXRwdXQ6CisgKiAgICAgIHBFbmFibGVkICAgIC0gMDogY2FuJ3QgbW92ZSB0byBuZXcgcG9ydDsgMTogY2FuIG1vdmUgdG8gbmV3IHBvcnQKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEVycm9yIFBvcnQgSUQKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BvcnRVbm1hdGNoZWRTYU1vdmluZyhydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgKnBFbmFibGVkKQoreworICAgIHJ0a191aW50MzIgZGF0YTsKKyAgICByZXRfdCByZXRWYWw7CisKKyAgICBpZihwb3J0ID49IFJUTDgzNjdDX1BPUlROTykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0wyX1NBX01PVklOR19GT1JCSUQsIHBvcnQsICZkYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgKnBFbmFibGVkID0gKGRhdGEgPT0gMSkgPyAwIDogMTsKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljUG9ydFVua25vd25EYUZsb29kaW5nUG9ydG1hc2sKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgVU5EQSBmbG9vZGluZyBwb3J0bWFzaworICogSW5wdXQ6CisgKiAgICAgIHBvcnRtYXNrICAgIC0gcG9ydG1hc2soMH4weEZGKQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX01BU0sgICAgLSBJbnZhbGlkIHBvcnRtYXNrCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNQb3J0VW5rbm93bkRhRmxvb2RpbmdQb3J0bWFzayhydGtfdWludDMyIHBvcnRtYXNrKQoreworICAgIGlmKHBvcnRtYXNrID4gUlRMODM2N0NfUE9SVE1BU0spCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9NQVNLOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfVU5VQ0FTVF9GTE9BRElOR19QTVNLX1JFRywgcG9ydG1hc2spOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1BvcnRVbmtub3duRGFGbG9vZGluZ1BvcnRtYXNrCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFVOREEgZmxvb2RpbmcgcG9ydG1hc2sKKyAqIElucHV0OgorICogICAgICBwUG9ydG1hc2sgICAtIHBvcnRtYXNrKDB+MHhGRikKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNQb3J0VW5rbm93bkRhRmxvb2RpbmdQb3J0bWFzayhydGtfdWludDMyICpwUG9ydG1hc2spCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfVU5VQ0FTVF9GTE9BRElOR19QTVNLX1JFRywgcFBvcnRtYXNrKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNQb3J0VW5rbm93bk11bHRpY2FzdEZsb29kaW5nUG9ydG1hc2sKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgVU5NQyBmbG9vZGluZyBwb3J0bWFzaworICogSW5wdXQ6CisgKiAgICAgIHBvcnRtYXNrICAgIC0gcG9ydG1hc2soMH4weEZGKQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX01BU0sgICAgLSBJbnZhbGlkIHBvcnRtYXNrCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNQb3J0VW5rbm93bk11bHRpY2FzdEZsb29kaW5nUG9ydG1hc2socnRrX3VpbnQzMiBwb3J0bWFzaykKK3sKKyAgICBpZihwb3J0bWFzayA+IFJUTDgzNjdDX1BPUlRNQVNLKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfTUFTSzsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1VOTUNBU1RfRkxPQURJTkdfUE1TS19SRUcsIHBvcnRtYXNrKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNQb3J0VW5rbm93bk11bHRpY2FzdEZsb29kaW5nUG9ydG1hc2sKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgVU5NQyBmbG9vZGluZyBwb3J0bWFzaworICogSW5wdXQ6CisgKiAgICAgIHBQb3J0bWFzayAgIC0gcG9ydG1hc2soMH4weEZGKQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BvcnRVbmtub3duTXVsdGljYXN0Rmxvb2RpbmdQb3J0bWFzayhydGtfdWludDMyICpwUG9ydG1hc2spCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfVU5NQ0FTVF9GTE9BRElOR19QTVNLX1JFRywgcFBvcnRtYXNrKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNQb3J0QmNhc3RGbG9vZGluZ1BvcnRtYXNrCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IEJjYXN0IGZsb29kaW5nIHBvcnRtYXNrCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydG1hc2sgICAgLSBwb3J0bWFzaygwfjB4RkYpCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfTUFTSyAgICAtIEludmFsaWQgcG9ydG1hc2sKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1BvcnRCY2FzdEZsb29kaW5nUG9ydG1hc2socnRrX3VpbnQzMiBwb3J0bWFzaykKK3sKKyAgICBpZihwb3J0bWFzayA+IFJUTDgzNjdDX1BPUlRNQVNLKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfTUFTSzsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX0JDQVNUX0ZMT0FESU5HX1BNU0tfUkVHLCBwb3J0bWFzayk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljUG9ydEJjYXN0Rmxvb2RpbmdQb3J0bWFzaworICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBCY2FzdCBmbG9vZGluZyBwb3J0bWFzaworICogSW5wdXQ6CisgKiAgICAgIHBQb3J0bWFzayAgIC0gcG9ydG1hc2soMH4weEZGKQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BvcnRCY2FzdEZsb29kaW5nUG9ydG1hc2socnRrX3VpbnQzMiAqcFBvcnRtYXNrKQoreworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX0JDQVNUX0ZMT0FESU5HX1BNU0tfUkVHLCBwUG9ydG1hc2spOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1BvcnRCbG9ja1NwYQorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBkaXNhYmxpbmcgYmxvY2tpbmcgZnJhbWUgaWYgc291cmNlIHBvcnQgYW5kIGRlc3RpbmF0aW9uIHBvcnQgYXJlIHRoZSBzYW1lCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjcpCisgKiAgICAgIHBlcm1pdCAgLSAwOiBibG9jazsgMTogcGVybWl0CisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1BvcnRCbG9ja1NwYShydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgcGVybWl0KQoreworICAgIGlmKHBvcnQgPj0gUlRMODM2N0NfUE9SVE5PKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19TT1VSQ0VfUE9SVF9CTE9DS19SRUcsIHBvcnQsIHBlcm1pdCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljUG9ydEJsb2NrU3BhCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGRpc2FibGluZyBibG9ja2luZyBmcmFtZSBpZiBzb3VyY2UgcG9ydCBhbmQgZGVzdGluYXRpb24gcG9ydCBhcmUgdGhlIHNhbWUKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgcFBlcm1pdCAgICAgLSAwOiBibG9jazsgMTogcGVybWl0CisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BvcnRCbG9ja1NwYShydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIqIHBQZXJtaXQpCit7CisgICAgaWYocG9ydCA+PSBSVEw4MzY3Q19QT1JUTk8pCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1NPVVJDRV9QT1JUX0JMT0NLX1JFRywgcG9ydCwgcFBlcm1pdCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljUG9ydERvcworICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBET1MgZnVuY3Rpb24KKyAqIElucHV0OgorICogICAgICB0eXBlICAgIC0gRE9TIHR5cGUKKyAqICAgICAgZHJvcCAgICAtIDA6IHBlcm1pdDsgMTogZHJvcAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgLSBJbnZhbGlkIHBheWxvYWQgaW5kZXgKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1BvcnREb3MocnRrX3VpbnQzMiB0eXBlLCBydGtfdWludDMyIGRyb3ApCit7CisgICAgaWYodHlwZSA+PSBET1NfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19ET1NfQ0ZHLCBSVEw4MzY3Q19EUk9QX0RBRVFTQV9PRkZTRVQgKyB0eXBlLCBkcm9wKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNQb3J0RG9zCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IERPUyBmdW5jdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHR5cGUgICAgLSBET1MgdHlwZQorICogICAgICBwRHJvcCAgIC0gMDogcGVybWl0OyAxOiBkcm9wCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAtIEludmFsaWQgcGF5bG9hZCBpbmRleAorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljUG9ydERvcyhydGtfdWludDMyIHR5cGUsIHJ0a191aW50MzIqIHBEcm9wKQoreworICAgIGlmKHR5cGUgPj0gRE9TX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfRE9TX0NGRywgUlRMODM2N0NfRFJPUF9EQUVRU0FfT0ZGU0VUICsgdHlwZSxwRHJvcCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljUG9ydEZvcmNlTGluaworICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwb3J0IGZvcmNlIGxpbmtpbmcgY29uZmlndXJhdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgcFBvcnRBYmlsaXR5IC0gcG9ydCBhYmlsaXR5IGNvbmZpZ3VyYXRpb24KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljUG9ydEZvcmNlTGluayhydGtfdWludDMyIHBvcnQsIHJ0bDgzNjdjX3BvcnRfYWJpbGl0eV90ICpwUG9ydEFiaWxpdHkpCit7CisgICAgcnRrX3VpbnQzMiByZWdEYXRhID0gMDsKKworICAgIC8qIEludmFsaWQgaW5wdXQgcGFyYW1ldGVyICovCisgICAgaWYocG9ydCA+PSBSVEw4MzY3Q19QT1JUTk8pCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIHJlZ0RhdGEgfD0gcFBvcnRBYmlsaXR5LT5mb3JjZW1vZGUgPDwgMTI7CisgICAgcmVnRGF0YSB8PSBwUG9ydEFiaWxpdHktPm1zdGZhdWx0IDw8IDk7CisgICAgcmVnRGF0YSB8PSBwUG9ydEFiaWxpdHktPm1zdG1vZGUgPDwgODsKKyAgICByZWdEYXRhIHw9IHBQb3J0QWJpbGl0eS0+bndheSA8PCA3OworICAgIHJlZ0RhdGEgfD0gcFBvcnRBYmlsaXR5LT50eHBhdXNlIDw8IDY7CisgICAgcmVnRGF0YSB8PSBwUG9ydEFiaWxpdHktPnJ4cGF1c2UgPDwgNTsKKyAgICByZWdEYXRhIHw9IHBQb3J0QWJpbGl0eS0+bGluayA8PCA0OworICAgIHJlZ0RhdGEgfD0gcFBvcnRBYmlsaXR5LT5kdXBsZXggPDwgMjsKKyAgICByZWdEYXRhIHw9IHBQb3J0QWJpbGl0eS0+c3BlZWQ7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfTUFDMF9GT1JDRV9TRUxFQ1QrcG9ydCwgcmVnRGF0YSk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljUG9ydEZvcmNlTGluaworICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwb3J0IGZvcmNlIGxpbmtpbmcgY29uZmlndXJhdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgcFBvcnRBYmlsaXR5IC0gcG9ydCBhYmlsaXR5IGNvbmZpZ3VyYXRpb24KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljUG9ydEZvcmNlTGluayhydGtfdWludDMyIHBvcnQsIHJ0bDgzNjdjX3BvcnRfYWJpbGl0eV90ICpwUG9ydEFiaWxpdHkpCit7CisgICAgcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcmVnRGF0YTsKKworICAgIC8qIEludmFsaWQgaW5wdXQgcGFyYW1ldGVyICovCisgICAgaWYocG9ydCA+PSBSVEw4MzY3Q19QT1JUTk8pCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfUkVHX01BQzBfRk9SQ0VfU0VMRUNUICsgcG9ydCwgJnJlZ0RhdGEpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBwUG9ydEFiaWxpdHktPmZvcmNlbW9kZSA9IChyZWdEYXRhID4+IDEyKSAmIDB4MDAwMTsKKyAgICBwUG9ydEFiaWxpdHktPm1zdGZhdWx0ICA9IChyZWdEYXRhID4+IDkpICYgMHgwMDAxOworICAgIHBQb3J0QWJpbGl0eS0+bXN0bW9kZSAgID0gKHJlZ0RhdGEgPj4gOCkgJiAweDAwMDE7CisgICAgcFBvcnRBYmlsaXR5LT5ud2F5ICAgICAgPSAocmVnRGF0YSA+PiA3KSAmIDB4MDAwMTsKKyAgICBwUG9ydEFiaWxpdHktPnR4cGF1c2UgICA9IChyZWdEYXRhID4+IDYpICYgMHgwMDAxOworICAgIHBQb3J0QWJpbGl0eS0+cnhwYXVzZSAgID0gKHJlZ0RhdGEgPj4gNSkgJiAweDAwMDE7CisgICAgcFBvcnRBYmlsaXR5LT5saW5rICAgICAgPSAocmVnRGF0YSA+PiA0KSAmIDB4MDAwMTsKKyAgICBwUG9ydEFiaWxpdHktPmR1cGxleCAgICA9IChyZWdEYXRhID4+IDIpICYgMHgwMDAxOworICAgIHBQb3J0QWJpbGl0eS0+c3BlZWQgICAgID0gcmVnRGF0YSAmIDB4MDAwMzsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljUG9ydFN0YXR1cworICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwb3J0IGxpbmsgc3RhdHVzCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH43KQorICogICAgICBwUG9ydEFiaWxpdHkgLSBwb3J0IGFiaWxpdHkgY29uZmlndXJhdGlvbgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNQb3J0U3RhdHVzKHJ0a191aW50MzIgcG9ydCwgcnRsODM2N2NfcG9ydF9zdGF0dXNfdCAqcFBvcnRTdGF0dXMpCit7CisgICAgcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcmVnRGF0YTsKKworICAgIC8qIEludmFsaWQgaW5wdXQgcGFyYW1ldGVyICovCisgICAgaWYocG9ydCA+PSBSVEw4MzY3Q19QT1JUTk8pCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfUkVHX1BPUlQwX1NUQVRVUytwb3J0LCZyZWdEYXRhKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcFBvcnRTdGF0dXMtPmxwaTEwMDAgID0gKHJlZ0RhdGEgPj4gMTEpICYgMHgwMDAxOworICAgIHBQb3J0U3RhdHVzLT5scGkxMDAgICA9IChyZWdEYXRhID4+IDEwKSAmIDB4MDAwMTsKKyAgICBwUG9ydFN0YXR1cy0+bXN0ZmF1bHQgPSAocmVnRGF0YSA+PiA5KSAmIDB4MDAwMTsKKyAgICBwUG9ydFN0YXR1cy0+bXN0bW9kZSAgPSAocmVnRGF0YSA+PiA4KSAmIDB4MDAwMTsKKyAgICBwUG9ydFN0YXR1cy0+bndheSAgICAgPSAocmVnRGF0YSA+PiA3KSAmIDB4MDAwMTsKKyAgICBwUG9ydFN0YXR1cy0+dHhwYXVzZSAgPSAocmVnRGF0YSA+PiA2KSAmIDB4MDAwMTsKKyAgICBwUG9ydFN0YXR1cy0+cnhwYXVzZSAgPSAocmVnRGF0YSA+PiA1KSAmIDB4MDAwMTsKKyAgICBwUG9ydFN0YXR1cy0+bGluayAgICAgPSAocmVnRGF0YSA+PiA0KSAmIDB4MDAwMTsKKyAgICBwUG9ydFN0YXR1cy0+ZHVwbGV4ICAgPSAocmVnRGF0YSA+PiAyKSAmIDB4MDAwMTsKKyAgICBwUG9ydFN0YXR1cy0+c3BlZWQgICAgPSByZWdEYXRhICAmIDB4MDAwMzsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljUG9ydEZvcmNlTGlua0V4dAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBleHRlcm5hbCBpbnRlcmZhY2UgZm9yY2UgbGlua2luZyBjb25maWd1cmF0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgaWQgICAgICAgICAgLSBleHRlcm5hbCBpbnRlcmZhY2UgaWQgKDB+MikKKyAqICAgICAgcG9ydEFiaWxpdHkgLSBwb3J0IGFiaWxpdHkgY29uZmlndXJhdGlvbgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgLSBpbnB1dCBwYXJhbWV0ZXIgb3V0IG9mIHJhbmdlCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNQb3J0Rm9yY2VMaW5rRXh0KHJ0a191aW50MzIgaWQsIHJ0bDgzNjdjX3BvcnRfYWJpbGl0eV90ICpwUG9ydEFiaWxpdHkpCit7CisgICAgcnRrX3VpbnQzMiByZXRWYWwsIHJlZ1ZhbHVlLCByZWdWYWx1ZTIsIHR5cGUsIHNnbWlpYml0LCBoaXNnbWlpYml0OworICAgIHJ0a191aW50MzIgcmVnX2RhdGEgPSAwOworICAgIHJ0a191aW50MzIgaSA9IDA7CisKKyAgICAvKiBJbnZhbGlkIGlucHV0IHBhcmFtZXRlciAqLworICAgIGlmKGlkID49IFJUTDgzNjdDX0VYVE5PKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIHJlZ19kYXRhIHw9IHBQb3J0QWJpbGl0eS0+Zm9yY2Vtb2RlIDw8IDEyOworICAgIHJlZ19kYXRhIHw9IHBQb3J0QWJpbGl0eS0+bXN0ZmF1bHQgPDwgOTsKKyAgICByZWdfZGF0YSB8PSBwUG9ydEFiaWxpdHktPm1zdG1vZGUgPDwgODsKKyAgICByZWdfZGF0YSB8PSBwUG9ydEFiaWxpdHktPm53YXkgPDwgNzsKKyAgICByZWdfZGF0YSB8PSBwUG9ydEFiaWxpdHktPnR4cGF1c2UgPDwgNjsKKyAgICByZWdfZGF0YSB8PSBwUG9ydEFiaWxpdHktPnJ4cGF1c2UgPDwgNTsKKyAgICByZWdfZGF0YSB8PSBwUG9ydEFiaWxpdHktPmxpbmsgPDwgNDsKKyAgICByZWdfZGF0YSB8PSBwUG9ydEFiaWxpdHktPmR1cGxleCA8PCAyOworICAgIHJlZ19kYXRhIHw9IHBQb3J0QWJpbGl0eS0+c3BlZWQ7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDEzQzIsIDB4MDI0OSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAvKmdldCBjaGlwIElEICovCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoMHgxMzAwLCAmcmVnVmFsdWUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDEzQzIsIDB4MDAwMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHR5cGUgPSAwOworCisgICAgc3dpdGNoIChyZWdWYWx1ZSkKKyAgICB7CisgICAgICAgIGNhc2UgMHgwMjc2OgorICAgICAgICBjYXNlIDB4MDU5NzoKKyAgICAgICAgY2FzZSAweDYzNjc6CisgICAgICAgICAgICB0eXBlID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MDY1MjoKKyAgICAgICAgY2FzZSAweDYzNjg6CisgICAgICAgICAgICB0eXBlID0gMjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MDgwMToKKyAgICAgICAgY2FzZSAweDY1MTE6CisgICAgICAgICAgICB0eXBlID0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9GQUlMRUQ7CisgICAgfQorCisgICAgaWYgKDEgPT0gdHlwZSkKKyAgICB7CisgICAgICAgIGlmKDEgPT0gaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfUkVHX1RPX0VDTzQsICZyZWdWYWx1ZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZigocmVnVmFsdWUgJiAoMHgwMDAxIDw8IDUpKSAmJiAocmVnVmFsdWUgJiAoMHgwMDAxIDw8IDcpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gUlRfRVJSX09LOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfU0RTX01JU0MsIFJUTDgzNjdDX0NGR19TR01JSV9GRFVQX09GRlNFVCwgcFBvcnRBYmlsaXR5LT5kdXBsZXgpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19TRFNfTUlTQywgUlRMODM2N0NfQ0ZHX1NHTUlJX1NQRF9NQVNLLCBwUG9ydEFiaWxpdHktPnNwZWVkKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19TRFNfTUlTQywgUlRMODM2N0NfQ0ZHX1NHTUlJX0xJTktfT0ZGU0VULCBwUG9ydEFiaWxpdHktPmxpbmspKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1NEU19NSVNDLCBSVEw4MzY3Q19DRkdfU0dNSUlfVFhGQ19PRkZTRVQsIHBQb3J0QWJpbGl0eS0+dHhwYXVzZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfU0RTX01JU0MsIFJUTDgzNjdDX0NGR19TR01JSV9SWEZDX09GRlNFVCwgcFBvcnRBYmlsaXR5LT5yeHBhdXNlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgIH0KKworICAgICAgICBpZigwID09IGlkIHx8IDEgPT0gaWQpCisgICAgICAgICAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfRElHSVRBTF9JTlRFUkZBQ0UwX0ZPUkNFICsgaWQsIHJlZ19kYXRhKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX0RJR0lUQUxfSU5URVJGQUNFMl9GT1JDRSwgcmVnX2RhdGEpOworICAgIH0KKyAgICBlbHNlIGlmICgyID09IHR5cGUpCisgICAgeworICAgICAgICBpZiAoMSA9PSBpZCkKKyAgICAgICAgeworICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MTMxMSwgMiwgcFBvcnRBYmlsaXR5LT5kdXBsZXgpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4MTMxMSwgMHgzLCBwUG9ydEFiaWxpdHktPnNwZWVkKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MTMxMSwgNCwgcFBvcnRBYmlsaXR5LT5saW5rKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MTMxMSwgNiwgcFBvcnRBYmlsaXR5LT50eHBhdXNlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MTMxMSwgNSwgcFBvcnRBYmlsaXR5LT5yeHBhdXNlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MTMxMSwgMTIsIHBQb3J0QWJpbGl0eS0+Zm9yY2Vtb2RlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGlmIChwUG9ydEFiaWxpdHktPmxpbmsgPT0gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDEzMTEsIDQsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDEzMTEsIDQsIDEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4MTMxMSwgMHgzLCAyKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgfQorCisKKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19TRFNfTUlTQywgUlRMODM2N0NfQ0ZHX1NHTUlJX0ZEVVBfT0ZGU0VULCBwUG9ydEFiaWxpdHktPmR1cGxleCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1NEU19NSVNDLCBSVEw4MzY3Q19DRkdfU0dNSUlfU1BEX01BU0ssIHBQb3J0QWJpbGl0eS0+c3BlZWQpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1NEU19NSVNDLCBSVEw4MzY3Q19DRkdfU0dNSUlfTElOS19PRkZTRVQsIHBQb3J0QWJpbGl0eS0+bGluaykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfU0RTX01JU0MsIFJUTDgzNjdDX0NGR19TR01JSV9UWEZDX09GRlNFVCwgcFBvcnRBYmlsaXR5LT50eHBhdXNlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19TRFNfTUlTQywgUlRMODM2N0NfQ0ZHX1NHTUlJX1JYRkNfT0ZGU0VULCBwUG9ydEFiaWxpdHktPnJ4cGF1c2UpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgyID09IGlkKQorICAgICAgICB7CisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDEzYzQsIDIsIHBQb3J0QWJpbGl0eS0+ZHVwbGV4KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDEzYzQsIDB4MywgcFBvcnRBYmlsaXR5LT5zcGVlZCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDEzYzQsIDQsIHBQb3J0QWJpbGl0eS0+bGluaykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDEzYzQsIDYsIHBQb3J0QWJpbGl0eS0+dHhwYXVzZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDEzYzQsIDUsIHBQb3J0QWJpbGl0eS0+cnhwYXVzZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDEzYzQsIDEyLCBwUG9ydEFiaWxpdHktPmZvcmNlbW9kZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZiAocFBvcnRBYmlsaXR5LT5saW5rID09IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxM2M0LCA0LCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxM2M0LCA0LCAxKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDEzYzQsIDB4MywgMikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxZGMxLCBSVEw4MzY3Q19DRkdfU0dNSUlfRkRVUF9PRkZTRVQsIHBQb3J0QWJpbGl0eS0+ZHVwbGV4KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDFkYzEsIFJUTDgzNjdDX0NGR19TR01JSV9TUERfTUFTSywgcFBvcnRBYmlsaXR5LT5zcGVlZCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDFkYzEsIFJUTDgzNjdDX0NGR19TR01JSV9MSU5LX09GRlNFVCwgcFBvcnRBYmlsaXR5LT5saW5rKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MWRjMSwgUlRMODM2N0NfQ0ZHX1NHTUlJX1RYRkNfT0ZGU0VULCBwUG9ydEFiaWxpdHktPnR4cGF1c2UpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxZGMxLCBSVEw4MzY3Q19DRkdfU0dNSUlfUlhGQ19PRkZTRVQsIHBQb3J0QWJpbGl0eS0+cnhwYXVzZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICB9CisKKyAgICB9CisgICAgZWxzZSBpZigzID09IHR5cGUpCisgICAgeworICAgICAgICBpZigxID09IGlkKQorICAgICAgICB7CisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdCgweDFkMTEsIDYsICZzZ21paWJpdCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoMHgxZDExLCAxMSwgJmhpc2dtaWliaXQpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgaWYgKChzZ21paWJpdCA9PSAxKSB8fCAoaGlzZ21paWJpdCA9PSAxKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKmZvciAxMDAweC8xMDBmeC8xMDAweF8xMDBmeCwgcGFyYW0gaGFzIHRvIGJlIHNldCB0byBzZXJkZXMgcmVnaXN0ZXJzKi8KKyAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZygweDFkNDEsICZyZWdWYWx1ZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qYml0NTogY2ZnX21hYzZfZmliID0xLCAgYml0NzogY2ZnX21hYzZfZmliMj0xKi8KKyAgICAgICAgICAgICAgICBpZigocmVnVmFsdWUgJiAweGEwKSA9PSAweGEwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIC8qIG5ld19jZmdfc2RzX21vZGUgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKDB4MWQ5NSwgMHgxZjAwLCAmcmVnVmFsdWUyKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgICAgICAgLyoxMDAwWCovCisgICAgICAgICAgICAgICAgICAgIGlmKHJlZ1ZhbHVlMiA9PSAweDQpCisgICAgICAgICAgICAgICAgICAgIHsKKyNpZiAwCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBuZXdfY2ZnX3Nkc19tb2RlOnJlc2V0IG1vZGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDFkOTUsIDB4MWYwMCwgMHgxZikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmFibGUgbmV3IHNkcyBtb2RlIGNvbmZpZyAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxZDk1LCAxMywgMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiAwIDQgMCAgYml0IDEyICBzZXQgMSwgIGJpdDE1fjEzID0gNCovCisgICAgICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1Nkc1JlZygwLCA0LCAwLCAmcmVnX2RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhICY9IDB4RkZGRjBGRkY7CisgICAgICAgICAgICAgICAgICAgICAgICByZWdfZGF0YSB8PSAweDkwMDA7CisgICAgICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1Nkc1JlZygwLDQsMCwgcmVnX2RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgICAgICAgICAgLyogMCAwIDIgIGJpdCA2ICBzZXQgMSwgIGJpdDEzIHNldCB0byAwLCBiaXQxMiBud2F5X2VuKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU2RzUmVnKDAsIDAsIDIsICZyZWdfZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2RhdGEgJj0gMHhGRkZGREZGRjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhIHw9IDB4NDA7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihwUG9ydEFiaWxpdHktPmZvcmNlbW9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfZGF0YSAmPSAweGZmZmZlZmZmOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhIHw9IDB4MTAwMDsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTZHNSZWcoMCwwLDIsIHJlZ19kYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDAgNCAyICBiaXQgOCAgcnggcGF1c2UsICBiaXQ3IHR4IHBhdXNlKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU2RzUmVnKDAsIDQsIDIsICZyZWdfZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocFBvcnRBYmlsaXR5LT50eHBhdXNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhIHw9IDB4ODA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2RhdGEgJj0gKH4weDgwKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBQb3J0QWJpbGl0eS0+cnhwYXVzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfZGF0YSB8PSAweDEwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfZGF0YSAmPSAofjB4MTAwKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTZHNSZWcoMCw0LDIsIHJlZ19kYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAwIDQgMCAgYml0IDEyICBzZXQgMCovCisgICAgICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1Nkc1JlZygwLCA0LCAwLCAmcmVnX2RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhICY9IDB4RkZGRkVGRkY7CisgICAgICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1Nkc1JlZygwLDQsMCwgcmVnX2RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgICAgICAgICAgLypuZXdfY2ZnX3Nkc19tb2RlPTEwMDB4Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDFkOTUsIDB4MWYwMCwgMHg0KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKHJlZ1ZhbHVlMiA9PSAweDUpCisgICAgICAgICAgICAgICAgICAgIHsKKyNpZiAwCisgICAgICAgICAgICAgICAgICAgICAgICAvKjEwMEZYKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDFkOTUsIDB4MWYwMCwgMHgxZikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAvKmNmZ19zZHNfbW9kZV9zZWxfbmV3PTEgICovCisgICAgICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDFkOTUsIDEzLCAxKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDAgNCAwICBiaXQgMTIgIHNldCAxLCAgYml0MTV+MTMgPSA1Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU2RzUmVnKDAsIDQsIDAsICZyZWdfZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2RhdGEgJj0gMHhGRkZGMEZGRjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhIHw9IDB4QjAwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU2RzUmVnKDAsNCwwLCByZWdfZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiAwIDAgMiAgYml0IDYgIHNldCAwLCAgYml0MTMgc2V0IHRvIDEsIGJpdDEyIDAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTZHNSZWcoMCwgMCwgMiwgJnJlZ19kYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgICAgICAgICByZWdfZGF0YSAmPSAweEZGRkZGRkJGOworICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2RhdGEgfD0gMHgyMDAwOworICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2RhdGEgJj0gMHhmZmZmZWZmZjsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTZHNSZWcoMCwwLDIsIHJlZ19kYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDAgNCAyICBiaXQgOCAgcnggcGF1c2UsICBiaXQ3IHR4IHBhdXNlKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU2RzUmVnKDAsIDQsIDIsICZyZWdfZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBQb3J0QWJpbGl0eS0+dHhwYXVzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfZGF0YSB8PSAweDgwOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhICY9ICh+MHg4MCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocFBvcnRBYmlsaXR5LT5yeHBhdXNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhIHw9IDB4MTAwOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhICY9ICh+MHgxMDApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTZHNSZWcoMCw0LDIsIHJlZ19kYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAwIDQgMCAgYml0IDEyICBzZXQgMCovCisgICAgICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1Nkc1JlZygwLCA0LCAwLCAmcmVnX2RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhICY9IDB4RkZGRkVGRkY7CisgICAgICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1Nkc1JlZygwLDQsMCwgcmVnX2RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICAgICAgICAgLyogbmV3X2NmZ19zZHNfbW9kZT0xMDAweCAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4MWQ5NSwgMHgxZjAwLCAweDUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYocmVnVmFsdWUyID09IDB4NykKKyAgICAgICAgICAgICAgICAgICAgeworI2lmIDAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qMTAwRlgqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4MWQ5NSwgMHgxZjAwLCAweDFmKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MWQ5NSwgMTMsIDEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgICAgICAgICAgLyogMCA0IDAgIGJpdCAxMiAgc2V0IDEsICBiaXQxNX4xMyA9IDQqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTZHNSZWcoMCwgNCwgMCwgJnJlZ19kYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgICAgICAgICByZWdfZGF0YSAmPSAweEZGRkYwRkZGOworICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2RhdGEgfD0gMHg5MDAwOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTZHNSZWcoMCw0LDAsIHJlZ19kYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDAgMCAyICBiaXQgNiAgc2V0IDEsICBiaXQxMyBzZXQgdG8gMCwgYml0MTIgbndheV9lbiovCisgICAgICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1Nkc1JlZygwLCAwLCAyLCAmcmVnX2RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhICY9IDB4RkZGRkRGRkY7CisgICAgICAgICAgICAgICAgICAgICAgICByZWdfZGF0YSB8PSAweDQwOworICAgICAgICAgICAgICAgICAgICAgICAgaWYocFBvcnRBYmlsaXR5LT5mb3JjZW1vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2RhdGEgJj0gMHhmZmZmZWZmZjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfZGF0YSB8PSAweDEwMDA7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU2RzUmVnKDAsMCwyLCByZWdfZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiAwIDQgMiAgYml0IDggIHJ4IHBhdXNlLCAgYml0NyB0eCBwYXVzZSovCisgICAgICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1Nkc1JlZygwLCA0LCAyLCAmcmVnX2RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwUG9ydEFiaWxpdHktPnR4cGF1c2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2RhdGEgfD0gMHg4MDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfZGF0YSAmPSAofjB4ODApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBQb3J0QWJpbGl0eS0+cnhwYXVzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfZGF0YSB8PSAweDEwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfZGF0YSAmPSh+MHgxMDApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTZHNSZWcoMCw0LDIsIHJlZ19kYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAwIDQgMCAgYml0IDEyICBzZXQgMCovCisgICAgICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1Nkc1JlZygwLCA0LCAwLCAmcmVnX2RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhICY9IDB4RkZGRkVGRkY7CisgICAgICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1Nkc1JlZygwLDQsMCwgcmVnX2RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgICAgICAgICAgLyogMCA0IDAgIGJpdCAxMiAgc2V0IDEsICBiaXQxNX4xMyA9IDUqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTZHNSZWcoMCwgNCwgMCwgJnJlZ19kYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgICAgICAgICByZWdfZGF0YSAmPSAweEZGRkYwRkZGOworICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2RhdGEgfD0gMHhCMDAwOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTZHNSZWcoMCw0LDAsIHJlZ19kYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDAgMCAyICBiaXQgNiAgc2V0IDAsICBiaXQxMyBzZXQgdG8gMSwgYml0MTIgMCovCisgICAgICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1Nkc1JlZygwLCAwLCAyLCAmcmVnX2RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhICY9IDB4RkZGRkZGQkY7CisgICAgICAgICAgICAgICAgICAgICAgICByZWdfZGF0YSB8PSAweDIwMDA7CisgICAgICAgICAgICAgICAgICAgICAgICByZWdfZGF0YSAmPSAweGZmZmZlZmZmOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1Nkc1JlZygwLDAsMiwgcmVnX2RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgICAgICAgICAgLyogMCA0IDIgIGJpdCA4ICByeCBwYXVzZSwgIGJpdDcgdHggcGF1c2UqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTZHNSZWcoMCwgNCwgMiwgJnJlZ19kYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocFBvcnRBYmlsaXR5LT50eHBhdXNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhIHw9IDB4ODA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2RhdGEgJj0gMHhmZmZmZmY3ZjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwUG9ydEFiaWxpdHktPnJ4cGF1c2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2RhdGEgfD0gMHgxMDA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2RhdGEgJj0gMHhmZmZmZmVmZjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU2RzUmVnKDAsNCwyLCByZWdfZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgICAgICAgLyogMCA0IDAgIGJpdCAxMiAgc2V0IDAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTZHNSZWcoMCwgNCwgMCwgJnJlZ19kYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgICAgICAgICByZWdfZGF0YSAmPSAweEZGRkZFRkZGOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTZHNSZWcoMCw0LDAsIHJlZ19kYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgICAgICAgICAvKnNkc19tb2RlOiovCisgICAgICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxZDk1LCAweDFmMDAsIDB4NykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvKmRpc2FibGUgZm9yY2UgYWJpbGl0eSAgIC0tLSAgICAgICovCisgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MTM3YywgMTIsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gUlRfRVJSX09LOworCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogbmV3X2NmZ19zZHNfbW9kZSAqLworICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cygweDFkOTUsIDB4MWYwMCwgJnJlZ1ZhbHVlMikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICBpZihyZWdWYWx1ZTIgPT0gMHgyKQorICAgICAgICAgICAgICAgIHsKKyNpZiAwCisgICAgICAgICAgICAgICAgICAgIC8qU0dNSUkqLworICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxZDk1LCAweDFmMDAsIDB4MWYpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MWQ5NSwgMTMsIDEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgIGZvcihpPTA7aTwweGZmZjsgaSsrKTsKKworICAgICAgICAgICAgICAgICAgICAvKiAwIDIgMCAgYml0IDgtOSAgbndheSovCisgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU2RzUmVnKDAsIDIsIDAsICZyZWdfZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhICY9IDB4ZmZmZmZjZmY7CisgICAgICAgICAgICAgICAgICAgIGlmIChwUG9ydEFiaWxpdHktPm53YXkpCisgICAgICAgICAgICAgICAgICAgICAgICByZWdfZGF0YSAmPSAweGZmZmZmY2ZmOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICByZWdfZGF0YSB8PSAweDEwMDsKKyAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTZHNSZWcoMCwyLDAsIHJlZ19kYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxZDk1LCAweDFmMDAsIDB4MikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yKGk9MDtpPDB4ZmZmOyBpKyspOworCisgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19TRFNfTUlTQywgUlRMODM2N0NfQ0ZHX1NHTUlJX0ZEVVBfT0ZGU0VULCBwUG9ydEFiaWxpdHktPmR1cGxleCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19TRFNfTUlTQywgUlRMODM2N0NfQ0ZHX1NHTUlJX1NQRF9NQVNLLCBwUG9ydEFiaWxpdHktPnNwZWVkKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfU0RTX01JU0MsIFJUTDgzNjdDX0NGR19TR01JSV9UWEZDX09GRlNFVCwgcFBvcnRBYmlsaXR5LT50eHBhdXNlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfU0RTX01JU0MsIFJUTDgzNjdDX0NGR19TR01JSV9SWEZDX09GRlNFVCwgcFBvcnRBYmlsaXR5LT5yeHBhdXNlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfU0RTX01JU0MsIFJUTDgzNjdDX0NGR19TR01JSV9MSU5LX09GRlNFVCwgcFBvcnRBYmlsaXR5LT5saW5rKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgICAgICAvKmRpc2FibGUgZm9yY2UgYWJpbGl0eSAgIC0tLSAgICAgICovCisgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MTM3YywgMTIsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gUlRfRVJSX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKHJlZ1ZhbHVlMiA9PSAweDEyKQorICAgICAgICAgICAgICAgIHsKKyNpZiAwCisgICAgICAgICAgICAgICAgICAgIC8qSGlTR01JSSovCisgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDFkOTUsIDB4MWYwMCwgMHgxZikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxZDk1LCAxMywgMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yKGk9MDtpPDB4ZmZmOyBpKyspOworCisgICAgICAgICAgICAgICAgICAgIC8qIDAgMiAwICBiaXQgOC05ICBud2F5Ki8KKyAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTZHNSZWcoMCwgMiwgMCwgJnJlZ19kYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICAgICAgcmVnX2RhdGEgJj0gMHhmZmZmZmNmZjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBQb3J0QWJpbGl0eS0+bndheSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhICY9IDB4ZmZmZmZjZmY7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhIHw9IDB4MTAwOworICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1Nkc1JlZygwLDIsMCwgcmVnX2RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisKKyAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4MWQ5NSwgMHgxZjAwLCAweDEyKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgICAgICBmb3IoaT0wO2k8MHhmZmY7IGkrKyk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxZDExLCAxMSwgMHgxKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfU0RTX01JU0MsIFJUTDgzNjdDX0NGR19TR01JSV9GRFVQX09GRlNFVCwgcFBvcnRBYmlsaXR5LT5kdXBsZXgpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfU0RTX01JU0MsIFJUTDgzNjdDX0NGR19TR01JSV9TUERfTUFTSywgcFBvcnRBYmlsaXR5LT5zcGVlZCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1NEU19NSVNDLCBSVEw4MzY3Q19DRkdfU0dNSUlfVFhGQ19PRkZTRVQsIHBQb3J0QWJpbGl0eS0+dHhwYXVzZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1NEU19NSVNDLCBSVEw4MzY3Q19DRkdfU0dNSUlfUlhGQ19PRkZTRVQsIHBQb3J0QWJpbGl0eS0+cnhwYXVzZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1NEU19NSVNDLCBSVEw4MzY3Q19DRkdfU0dNSUlfTElOS19PRkZTRVQsIHBQb3J0QWJpbGl0eS0+bGluaykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgLypkaXNhYmxlIGZvcmNlIGFiaWxpdHkgICAtLS0gICAgICAqLworICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDEzN2MsIDEyLCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9PSzsKKworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoMHgxZDNkLCAxMCwgJnJlZ1ZhbHVlMikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICBpZiAocmVnVmFsdWUyID09IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKmV4dDFfZm9yY2VfYWJsdHkqLworICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDEzMTEsIDIsIHBQb3J0QWJpbGl0eS0+ZHVwbGV4KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxMzExLCAweDMsIHBQb3J0QWJpbGl0eS0+c3BlZWQpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MTMxMSwgNCwgcFBvcnRBYmlsaXR5LT5saW5rKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDEzMTEsIDYsIHBQb3J0QWJpbGl0eS0+dHhwYXVzZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxMzExLCA1LCBwUG9ydEFiaWxpdHktPnJ4cGF1c2UpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgIC8qZm9yY2UgbW9kZSBmb3IgZXh0MSovCisgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MTMxMSwgMTIsIHBQb3J0QWJpbGl0eS0+Zm9yY2Vtb2RlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgICAgICBpZiAocFBvcnRBYmlsaXR5LT5saW5rID09IDEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MTMxMSwgNCwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDEzMTEsIDQsIDEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDEzMTEsIDB4MywgMikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLypkaXNhYmxlIGZvcmNlIGFiaWxpdHkgICAtLS0gICAgICAqLworICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDEzN2MsIDEyLCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKDIgPT0gaWQpCisgICAgICAgIHsKKworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoMHgxZDk1LCAwLCAmc2dtaWliaXQpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICBpZiAoc2dtaWliaXQgPT0gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKmZvciAxMDAweC8xMDBmeC8xMDAweF8xMDBmeCwgcGFyYW0gaGFzIHRvIGJldCBzZXQgdG8gc2VyZGVzIHJlZ2lzdGVycyovCisgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoMHgxZDk1LCAmcmVnVmFsdWUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgLypjZmdfbWFjN19zZWxfc2dtaWk9MSAmIGNmZ19tYWM3X2ZpYiA9MSovCisgICAgICAgICAgICAgICAgaWYoKHJlZ1ZhbHVlICYgMHgzKSA9PSAweDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoMHgxZDk1LCAweDFmMDAsICZyZWdWYWx1ZTIpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgIGlmKHJlZ1ZhbHVlMiA9PSAweDQpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qMTAwMFgqLworI2lmIDAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDFkOTUsIDB4MWYwMCwgMHgxZikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDFkOTUsIDEzLCAxKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDAgNCAwICBiaXQgMTIgIHNldCAxLCAgYml0MTV+MTMgPSA0Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU2RzUmVnKDAsIDQsIDAsICZyZWdfZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2RhdGEgJj0gMHhGRkZGMEZGRjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhIHw9IDB4OTAwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU2RzUmVnKDAsNCwwLCByZWdfZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiAwIDAgMiAgYml0IDYgIHNldCAxLCAgYml0MTMgc2V0IHRvIDAsIGJpdDEyIG53YXlfZW4qLworICAgICAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTZHNSZWcoMCwgMCwgMiwgJnJlZ19kYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgICAgICAgICByZWdfZGF0YSAmPSAweEZGRkZERkZGOworICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2RhdGEgfD0gMHg0MDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHBQb3J0QWJpbGl0eS0+Zm9yY2Vtb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhICY9IDB4ZmZmZmVmZmY7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2RhdGEgfD0gMHgxMDAwOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1Nkc1JlZygwLDAsMiwgcmVnX2RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgICAgICAgICAgLyogMCA0IDIgIGJpdCA4ICByeCBwYXVzZSwgIGJpdDcgdHggcGF1c2UqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTZHNSZWcoMCwgNCwgMiwgJnJlZ19kYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocFBvcnRBYmlsaXR5LT50eHBhdXNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhIHw9IDB4ODA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2RhdGEgJj0gMHhmZmZmZmY3ZjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwUG9ydEFiaWxpdHktPnJ4cGF1c2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2RhdGEgfD0gMHgxMDA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2RhdGEgJj0gMHhmZmZmZmVmZjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU2RzUmVnKDAsNCwyLCByZWdfZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgICAgICAgLyogMCA0IDAgIGJpdCAxMiAgc2V0IDAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTZHNSZWcoMCwgNCwgMCwgJnJlZ19kYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgICAgICAgICByZWdfZGF0YSAmPSAweEZGRkZFRkZGOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTZHNSZWcoMCw0LDAsIHJlZ19kYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDFkOTUsIDB4MWYwMCwgMHg0KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKHJlZ1ZhbHVlMiA9PSAweDUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qMTAwRlgqLworI2lmIDAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDFkOTUsIDB4MWYwMCwgMHgxZikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDFkOTUsIDEzLCAxKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDAgNCAwICBiaXQgMTIgIHNldCAxLCAgYml0MTV+MTMgPSA1Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU2RzUmVnKDAsIDQsIDAsICZyZWdfZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2RhdGEgJj0gMHhGRkZGMEZGRjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhIHw9IDB4QjAwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU2RzUmVnKDAsNCwwLCByZWdfZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiAwIDAgMiAgYml0IDYgIHNldCAwLCAgYml0MTMgc2V0IHRvIDEsIGJpdDEyIDAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTZHNSZWcoMCwgMCwgMiwgJnJlZ19kYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgICAgICAgICByZWdfZGF0YSAmPSAweEZGRkZGRkJGOworICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2RhdGEgfD0gMHgyMDAwOworICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2RhdGEgJj0gMHhmZmZmZWZmZjsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTZHNSZWcoMCwwLDIsIHJlZ19kYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDAgNCAyICBiaXQgOCAgcnggcGF1c2UsICBiaXQ3IHR4IHBhdXNlKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU2RzUmVnKDAsIDQsIDIsICZyZWdfZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBQb3J0QWJpbGl0eS0+dHhwYXVzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfZGF0YSB8PSAweDgwOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhICY9IDB4ZmZmZmZmN2Y7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocFBvcnRBYmlsaXR5LT5yeHBhdXNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhIHw9IDB4MTAwOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhICY9IDB4ZmZmZmZlZmY7CisgICAgICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1Nkc1JlZygwLDQsMiwgcmVnX2RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDAgNCAwICBiaXQgMTIgIHNldCAwKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU2RzUmVnKDAsIDQsIDAsICZyZWdfZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2RhdGEgJj0gMHhGRkZGRUZGRjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU2RzUmVnKDAsNCwwLCByZWdfZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxZDk1LCAweDFmMDAsIDB4NSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihyZWdWYWx1ZTIgPT0gMHg3KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKjEwMEZYKi8KKyNpZiAwCisgICAgICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxZDk1LCAweDFmMDAsIDB4MWYpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxZDk1LCAxMywgMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiAwIDQgMCAgYml0IDEyICBzZXQgMSwgIGJpdDE1fjEzID0gNCovCisgICAgICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1Nkc1JlZygwLCA0LCAwLCAmcmVnX2RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhICY9IDB4RkZGRjBGRkY7CisgICAgICAgICAgICAgICAgICAgICAgICByZWdfZGF0YSB8PSAweDkwMDA7CisgICAgICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1Nkc1JlZygwLDQsMCwgcmVnX2RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgICAgICAgICAgLyogMCAwIDIgIGJpdCA2ICBzZXQgMSwgIGJpdDEzIHNldCB0byAwLCBiaXQxMiBud2F5X2VuKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU2RzUmVnKDAsIDAsIDIsICZyZWdfZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2RhdGEgJj0gMHhGRkZGREZGRjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhIHw9IDB4NDA7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihwUG9ydEFiaWxpdHktPmZvcmNlbW9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfZGF0YSAmPSAweGZmZmZlZmZmOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhIHw9IDB4MTAwMDsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTZHNSZWcoMCwwLDIsIHJlZ19kYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDAgNCAyICBiaXQgOCAgcnggcGF1c2UsICBiaXQ3IHR4IHBhdXNlKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU2RzUmVnKDAsIDQsIDIsICZyZWdfZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBQb3J0QWJpbGl0eS0+dHhwYXVzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfZGF0YSB8PSAweDgwOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhICY9IDB4ZmZmZmZmN2Y7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocFBvcnRBYmlsaXR5LT5yeHBhdXNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhIHw9IDB4MTAwOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhICY9IDB4ZmZmZmZlZmY7CisgICAgICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1Nkc1JlZygwLDQsMiwgcmVnX2RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDAgNCAwICBiaXQgMTIgIHNldCAwKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU2RzUmVnKDAsIDQsIDAsICZyZWdfZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2RhdGEgJj0gMHhGRkZGRUZGRjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU2RzUmVnKDAsNCwwLCByZWdfZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiAwIDQgMCAgYml0IDEyICBzZXQgMSwgIGJpdDE1fjEzID0gNSovCisgICAgICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1Nkc1JlZygwLCA0LCAwLCAmcmVnX2RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhICY9IDB4RkZGRjBGRkY7CisgICAgICAgICAgICAgICAgICAgICAgICByZWdfZGF0YSB8PSAweEIwMDA7CisgICAgICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1Nkc1JlZygwLDQsMCwgcmVnX2RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgICAgICAgICAgLyogMCAwIDIgIGJpdCA2ICBzZXQgMCwgIGJpdDEzIHNldCB0byAxLCBiaXQxMiAwKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU2RzUmVnKDAsIDAsIDIsICZyZWdfZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2RhdGEgJj0gMHhGRkZGRkZCRjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhIHw9IDB4MjAwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhICY9IDB4ZmZmZmVmZmY7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU2RzUmVnKDAsMCwyLCByZWdfZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiAwIDQgMiAgYml0IDggIHJ4IHBhdXNlLCAgYml0NyB0eCBwYXVzZSovCisgICAgICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1Nkc1JlZygwLCA0LCAyLCAmcmVnX2RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwUG9ydEFiaWxpdHktPnR4cGF1c2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2RhdGEgfD0gMHg4MDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfZGF0YSAgJj0gMHhmZmZmZmY3ZjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwUG9ydEFiaWxpdHktPnJ4cGF1c2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2RhdGEgfD0gMHgxMDA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2RhdGEgJj0gMHhmZmZmZmVmZjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU2RzUmVnKDAsNCwyLCByZWdfZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgICAgICAgLyogMCA0IDAgIGJpdCAxMiAgc2V0IDAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTZHNSZWcoMCwgNCwgMCwgJnJlZ19kYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgICAgICAgICByZWdfZGF0YSAmPSAweEZGRkZFRkZGOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTZHNSZWcoMCw0LDAsIHJlZ19kYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDFkOTUsIDB4MWYwMCwgMHg3KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MTM3ZCwgMTIsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gUlRfRVJSX09LOworCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8qIG5ld19jZmdfc2RzX21vZGUgKi8KKyAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoMHgxZDk1LCAweDFmMDAsICZyZWdWYWx1ZTIpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIGlmKHJlZ1ZhbHVlMiA9PSAweDIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKlNHTUlJKi8KKyNpZiAwCisgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDFkOTUsIDB4MWYwMCwgMHgxZikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxZDk1LCAxMywgMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yKGk9MDtpPDB4ZmZmOyBpKyspOworCisgICAgICAgICAgICAgICAgICAgIC8qIDAgMiAwICBiaXQgOC05ICBud2F5Ki8KKyAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTZHNSZWcoMCwgMiwgMCwgJnJlZ19kYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICAgICAgcmVnX2RhdGEgJj0gMHhmZmZmZmNmZjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBQb3J0QWJpbGl0eS0+bndheSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhICY9IDB4ZmZmZmZjZmY7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19kYXRhIHw9IDB4MTAwOworICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1Nkc1JlZygwLDIsMCwgcmVnX2RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDFkOTUsIDB4MWYwMCwgMHgyKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgICAgICBmb3IoaT0wO2k8MHhmZmY7IGkrKyk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1NEU19NSVNDLCBSVEw4MzY3Q19DRkdfU0dNSUlfRkRVUF9PRkZTRVQsIHBQb3J0QWJpbGl0eS0+ZHVwbGV4KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1NEU19NSVNDLCBSVEw4MzY3Q19DRkdfU0dNSUlfU1BEX01BU0ssIHBQb3J0QWJpbGl0eS0+c3BlZWQpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19TRFNfTUlTQywgUlRMODM2N0NfQ0ZHX1NHTUlJX1RYRkNfT0ZGU0VULCBwUG9ydEFiaWxpdHktPnR4cGF1c2UpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19TRFNfTUlTQywgUlRMODM2N0NfQ0ZHX1NHTUlJX1JYRkNfT0ZGU0VULCBwUG9ydEFiaWxpdHktPnJ4cGF1c2UpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19TRFNfTUlTQywgUlRMODM2N0NfQ0ZHX1NHTUlJX0xJTktfT0ZGU0VULCBwUG9ydEFiaWxpdHktPmxpbmspKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MTM3ZCwgMTIsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gUlRfRVJSX09LOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKworICAgICAgICAgICAgICAgIC8qZXh0Ml9mb3JjZV9hYmx0eSovCisgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxM2M0LCAyLCBwUG9ydEFiaWxpdHktPmR1cGxleCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDEzYzQsIDB4MywgcFBvcnRBYmlsaXR5LT5zcGVlZCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MTNjNCwgNCwgcFBvcnRBYmlsaXR5LT5saW5rKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxM2M0LCA2LCBwUG9ydEFiaWxpdHktPnR4cGF1c2UpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDEzYzQsIDUsIHBQb3J0QWJpbGl0eS0+cnhwYXVzZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qZm9yY2UgbW9kZSBmb3IgZXh0MiovCisgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxM2M0LCAxMiwgcFBvcnRBYmlsaXR5LT5mb3JjZW1vZGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICBpZiAocFBvcnRBYmlsaXR5LT5saW5rID09IDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDEzYzQsIDQsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MTNjNCwgNCwgMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDEzYzQsIDB4MywgMikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgfQorCisKKyAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdCgweDFkM2QsIDEwLCAmcmVnX2RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIGlmKHJlZ19kYXRhID09IDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MTMxMSwgMiwgcFBvcnRBYmlsaXR5LT5kdXBsZXgpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDEzMTEsIDB4MywgcFBvcnRBYmlsaXR5LT5zcGVlZCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxMzExLCA0LCBwUG9ydEFiaWxpdHktPmxpbmspKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MTMxMSwgNiwgcFBvcnRBYmlsaXR5LT50eHBhdXNlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDEzMTEsIDUsIHBQb3J0QWJpbGl0eS0+cnhwYXVzZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgLypmb3JjZSBtb2RlIGZvciBleHQxKi8KKyAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxMzExLCAxMiwgcFBvcnRBYmlsaXR5LT5mb3JjZW1vZGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgIGlmIChwUG9ydEFiaWxpdHktPmxpbmsgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxMzExLCA0LCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MTMxMSwgNCwgMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4MTMxMSwgMHgzLCAyKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKmRpc2FibGUgZm9yY2UgYWJpbGl0eSAgIC0tLSAgICAgICovCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDEzN2QsIDEyLCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgIH0KKyNpZiAwCisgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19TRFNfTUlTQywgUlRMODM2N0NfQ0ZHX1NHTUlJX0ZEVVBfT0ZGU0VULCBwUG9ydEFiaWxpdHktPmR1cGxleCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19TRFNfTUlTQywgUlRMODM2N0NfQ0ZHX1NHTUlJX1NQRF9NQVNLLCBwUG9ydEFiaWxpdHktPnNwZWVkKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfU0RTX01JU0MsIFJUTDgzNjdDX0NGR19TR01JSV9UWEZDX09GRlNFVCwgcFBvcnRBYmlsaXR5LT50eHBhdXNlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfU0RTX01JU0MsIFJUTDgzNjdDX0NGR19TR01JSV9SWEZDX09GRlNFVCwgcFBvcnRBYmlsaXR5LT5yeHBhdXNlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfU0RTX01JU0MsIFJUTDgzNjdDX0NGR19TR01JSV9MSU5LX09GRlNFVCwgcFBvcnRBYmlsaXR5LT5saW5rKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyNlbmRpZgorICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljUG9ydEZvcmNlTGlua0V4dAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBleHRlcm5hbCBpbnRlcmZhY2UgZm9yY2UgbGlua2luZyBjb25maWd1cmF0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgaWQgICAgICAgICAgLSBleHRlcm5hbCBpbnRlcmZhY2UgaWQgKDB+MSkKKyAqICAgICAgcFBvcnRBYmlsaXR5IC0gcG9ydCBhYmlsaXR5IGNvbmZpZ3VyYXRpb24KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gaW5wdXQgcGFyYW1ldGVyIG91dCBvZiByYW5nZQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljUG9ydEZvcmNlTGlua0V4dChydGtfdWludDMyIGlkLCBydGw4MzY3Y19wb3J0X2FiaWxpdHlfdCAqcFBvcnRBYmlsaXR5KQoreworICAgIHJ0a191aW50MzIgIHJlZ19kYXRhLCByZWdWYWx1ZSwgdHlwZTsKKyAgICBydGtfdWludDMyICBzZ21paVNlbDsKKyAgICBydGtfdWludDMyICBoc2dtaWlTZWw7CisgICAgcmV0X3QgICAgICAgcmV0VmFsOworCisgICAgLyogSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIgKi8KKyAgICBpZihpZCA+PSBSVEw4MzY3Q19FWFROTykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisgICAgLypjZmdfbWFnaWNfaWQgICYgIGdldCBjaGlwX2lkKi8KKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDEzQzIsIDB4MDI0OSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKDB4MTMwMCwgJnJlZ1ZhbHVlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHgxM0MyLCAweDAwMDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICB0eXBlID0gMDsKKworICAgIHN3aXRjaCAocmVnVmFsdWUpCisgICAgeworICAgICAgICBjYXNlIDB4MDI3NjoKKyAgICAgICAgY2FzZSAweDA1OTc6CisgICAgICAgIGNhc2UgMHg2MzY3OgorICAgICAgICAgICAgdHlwZSA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweDA2NTI6CisgICAgICAgIGNhc2UgMHg2MzY4OgorICAgICAgICAgICAgdHlwZSA9IDI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweDA4MDE6CisgICAgICAgIGNhc2UgMHg2NTExOgorICAgICAgICAgICAgdHlwZSA9IDM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBSVF9FUlJfRkFJTEVEOworICAgIH0KKworICAgIGlmICgxID09IHR5cGUpCisgICAgeworICAgICAgICBpZigxID09IGlkKQorICAgICAgICB7CisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfU0RTX01JU0MsIFJUTDgzNjdDX0NGR19NQUM4X1NFTF9TR01JSV9PRkZTRVQsICZzZ21paVNlbCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfU0RTX01JU0MsIFJUTDgzNjdDX0NGR19NQUM4X1NFTF9IU0dNSUlfT0ZGU0VULCAmaHNnbWlpU2VsKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGlmKCAoc2dtaWlTZWwgPT0gMSkgfHwgKGhzZ21paVNlbCA9PSAxKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWVtc2V0KHBQb3J0QWJpbGl0eSwgMHgwMCwgc2l6ZW9mKHJ0bDgzNjdjX3BvcnRfYWJpbGl0eV90KSk7CisgICAgICAgICAgICAgICAgcFBvcnRBYmlsaXR5LT5mb3JjZW1vZGUgPSAxOworCisgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1NEU19NSVNDLCBSVEw4MzY3Q19DRkdfU0dNSUlfRkRVUF9PRkZTRVQsICZyZWdfZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIHBQb3J0QWJpbGl0eS0+ZHVwbGV4ID0gcmVnX2RhdGE7CisKKyAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1NEU19NSVNDLCBSVEw4MzY3Q19DRkdfU0dNSUlfU1BEX01BU0ssICZyZWdfZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIHBQb3J0QWJpbGl0eS0+c3BlZWQgPSByZWdfZGF0YTsKKworICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19TRFNfTUlTQywgUlRMODM2N0NfQ0ZHX1NHTUlJX0xJTktfT0ZGU0VULCAmcmVnX2RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICBwUG9ydEFiaWxpdHktPmxpbmsgPSByZWdfZGF0YTsKKworICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19TRFNfTUlTQywgUlRMODM2N0NfQ0ZHX1NHTUlJX1RYRkNfT0ZGU0VULCAmcmVnX2RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICBwUG9ydEFiaWxpdHktPnR4cGF1c2UgPSByZWdfZGF0YTsKKworICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19TRFNfTUlTQywgUlRMODM2N0NfQ0ZHX1NHTUlJX1JYRkNfT0ZGU0VULCAmcmVnX2RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICBwUG9ydEFiaWxpdHktPnJ4cGF1c2UgPSByZWdfZGF0YTsKKworICAgICAgICAgICAgICAgIHJldHVybiBSVF9FUlJfT0s7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZigwID09IGlkIHx8IDEgPT0gaWQpCisgICAgICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19ESUdJVEFMX0lOVEVSRkFDRTBfRk9SQ0UraWQsICZyZWdfZGF0YSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfUkVHX0RJR0lUQUxfSU5URVJGQUNFMl9GT1JDRSwgJnJlZ19kYXRhKTsKKworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBwUG9ydEFiaWxpdHktPmZvcmNlbW9kZSA9IChyZWdfZGF0YSA+PiAxMikgJiAweDAwMDE7CisgICAgICAgIHBQb3J0QWJpbGl0eS0+bXN0ZmF1bHQgID0gKHJlZ19kYXRhID4+IDkpICYgMHgwMDAxOworICAgICAgICBwUG9ydEFiaWxpdHktPm1zdG1vZGUgICA9IChyZWdfZGF0YSA+PiA4KSAmIDB4MDAwMTsKKyAgICAgICAgcFBvcnRBYmlsaXR5LT5ud2F5ICAgICAgPSAocmVnX2RhdGEgPj4gNykgJiAweDAwMDE7CisgICAgICAgIHBQb3J0QWJpbGl0eS0+dHhwYXVzZSAgID0gKHJlZ19kYXRhID4+IDYpICYgMHgwMDAxOworICAgICAgICBwUG9ydEFiaWxpdHktPnJ4cGF1c2UgICA9IChyZWdfZGF0YSA+PiA1KSAmIDB4MDAwMTsKKyAgICAgICAgcFBvcnRBYmlsaXR5LT5saW5rICAgICAgPSAocmVnX2RhdGEgPj4gNCkgJiAweDAwMDE7CisgICAgICAgIHBQb3J0QWJpbGl0eS0+ZHVwbGV4ICAgID0gKHJlZ19kYXRhID4+IDIpICYgMHgwMDAxOworICAgICAgICBwUG9ydEFiaWxpdHktPnNwZWVkICAgICA9IHJlZ19kYXRhICYgMHgwMDAzOworICAgIH0KKyAgICBlbHNlIGlmICgyID09IHR5cGUpCisgICAgeworICAgICAgICBpZiAoaWQgPT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKDB4MTMxMSwgJnJlZ19kYXRhKSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBwUG9ydEFiaWxpdHktPmZvcmNlbW9kZSA9IChyZWdfZGF0YSA+PiAxMikgJiAxOworICAgICAgICAgICAgcFBvcnRBYmlsaXR5LT5kdXBsZXggPSAocmVnX2RhdGEgPj4gMikgJiAxOworICAgICAgICAgICAgcFBvcnRBYmlsaXR5LT5saW5rID0gKHJlZ19kYXRhID4+IDQpICYgMTsKKyAgICAgICAgICAgIHBQb3J0QWJpbGl0eS0+c3BlZWQgPSByZWdfZGF0YSAmIDM7CisgICAgICAgICAgICBwUG9ydEFiaWxpdHktPnJ4cGF1c2UgPSAocmVnX2RhdGEgPj4gNSkgJiAxOworICAgICAgICAgICAgcFBvcnRBYmlsaXR5LT50eHBhdXNlID0gKHJlZ19kYXRhID4+IDYpICYgMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgyID09IGlkKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoMHgxM2M0LCAmcmVnX2RhdGEpKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIHBQb3J0QWJpbGl0eS0+Zm9yY2Vtb2RlID0gKHJlZ19kYXRhID4+IDEyKSAmIDE7CisgICAgICAgICAgICBwUG9ydEFiaWxpdHktPmR1cGxleCA9IChyZWdfZGF0YSA+PiAyKSAmIDE7CisgICAgICAgICAgICBwUG9ydEFiaWxpdHktPmxpbmsgPSAocmVnX2RhdGEgPj4gNCkgJiAxOworICAgICAgICAgICAgcFBvcnRBYmlsaXR5LT5zcGVlZCA9IHJlZ19kYXRhICYgMzsKKyAgICAgICAgICAgIHBQb3J0QWJpbGl0eS0+cnhwYXVzZSA9IChyZWdfZGF0YSA+PiA1KSAmIDE7CisgICAgICAgICAgICBwUG9ydEFiaWxpdHktPnR4cGF1c2UgPSAocmVnX2RhdGEgPj4gNikgJiAxOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKDMgPT0gdHlwZSkKKyAgICB7CisgICAgICAgIGlmIChpZCA9PSAxKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoMHgxMzExLCAmcmVnX2RhdGEpKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIHBQb3J0QWJpbGl0eS0+Zm9yY2Vtb2RlID0gKHJlZ19kYXRhID4+IDEyKSAmIDE7CisgICAgICAgICAgICBwUG9ydEFiaWxpdHktPmR1cGxleCA9IChyZWdfZGF0YSA+PiAyKSAmIDE7CisgICAgICAgICAgICBwUG9ydEFiaWxpdHktPmxpbmsgPSAocmVnX2RhdGEgPj4gNCkgJiAxOworICAgICAgICAgICAgcFBvcnRBYmlsaXR5LT5zcGVlZCA9IHJlZ19kYXRhICYgMzsKKyAgICAgICAgICAgIHBQb3J0QWJpbGl0eS0+cnhwYXVzZSA9IChyZWdfZGF0YSA+PiA1KSAmIDE7CisgICAgICAgICAgICBwUG9ydEFiaWxpdHktPnR4cGF1c2UgPSAocmVnX2RhdGEgPj4gNikgJiAxOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKDIgPT0gaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZygweDEzYzQsICZyZWdfZGF0YSkpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgcFBvcnRBYmlsaXR5LT5mb3JjZW1vZGUgPSAocmVnX2RhdGEgPj4gMTIpICYgMTsKKyAgICAgICAgICAgIHBQb3J0QWJpbGl0eS0+ZHVwbGV4ID0gKHJlZ19kYXRhID4+IDIpICYgMTsKKyAgICAgICAgICAgIHBQb3J0QWJpbGl0eS0+bGluayA9IChyZWdfZGF0YSA+PiA0KSAmIDE7CisgICAgICAgICAgICBwUG9ydEFiaWxpdHktPnNwZWVkID0gcmVnX2RhdGEgJiAzOworICAgICAgICAgICAgcFBvcnRBYmlsaXR5LT5yeHBhdXNlID0gKHJlZ19kYXRhID4+IDUpICYgMTsKKyAgICAgICAgICAgIHBQb3J0QWJpbGl0eS0+dHhwYXVzZSA9IChyZWdfZGF0YSA+PiA2KSAmIDE7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNQb3J0RXh0TW9kZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBleHRlcm5hbCBpbnRlcmZhY2UgbW9kZSBjb25maWd1cmF0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgaWQgICAgICAtIGV4dGVybmFsIGludGVyZmFjZSBpZCAoMH4yKQorICogICAgICBtb2RlICAgIC0gZXh0ZXJuYWwgaW50ZXJmYWNlIG1vZGUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gaW5wdXQgcGFyYW1ldGVyIG91dCBvZiByYW5nZQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljUG9ydEV4dE1vZGUocnRrX3VpbnQzMiBpZCwgcnRrX3VpbnQzMiBtb2RlKQoreworICAgIHJldF90ICAgcmV0VmFsOworICAgIHJ0a191aW50MzIgaSwgcmVnVmFsdWUsIHR5cGUsIG9wdGlvbixyZWdfZGF0YTsKKyAgICBydGtfdWludDMyIGlkeDsKKyAgICBydGtfdWludDMyIHJlZERhdGFbXVsyXSA9ICAgeyB7MHgwNEQ3LCAweDA0ODB9LCB7MHhGOTk0LCAweDA0ODF9LCB7MHgyMUEyLCAweDA0ODJ9LCB7MHg2OTYwLCAweDA0ODN9LCB7MHg5NzI4LCAweDA0ODR9LCB7MHg5RDg1LCAweDA0MjN9LCB7MHhEODEwLCAweDA0MjR9LCB7MHg4M0YyLCAweDAwMkV9IH07CisgICAgcnRrX3VpbnQzMiByZWREYXRhU0JbXVsyXSA9IHsgezB4MDRENywgMHgwNDgwfSwgezB4Rjk5NCwgMHgwNDgxfSwgezB4MzFBMiwgMHgwNDgyfSwgezB4Njk2MCwgMHgwNDgzfSwgezB4OTcyOCwgMHgwNDg0fSwgezB4OUQ4NSwgMHgwNDIzfSwgezB4RDgxMCwgMHgwNDI0fSwgezB4ODNGMiwgMHgwMDJFfSB9OworICAgIHJ0a191aW50MzIgcmVkRGF0YTFbXVsyXSA9ICB7IHsweDgyRjEsIDB4MDUwMH0sIHsweEYxOTUsIDB4MDUwMX0sIHsweDMxQTIsIDB4MDUwMn0sIHsweDc5NkMsIDB4MDUwM30sIHsweDk3MjgsIDB4MDUwNH0sIHsweDlEODUsIDB4MDQyM30sIHsweEQ4MTAsIDB4MDQyNH0sIHsweDBGODAsIDB4MDAwMX0sIHsweDgzRjIsIDB4MDAyRX0gfTsKKyAgICBydGtfdWludDMyIHJlZERhdGE1W11bMl0gPSAgeyB7MHg4MkYxLCAweDA1MDB9LCB7MHhGMTk1LCAweDA1MDF9LCB7MHgzMUEyLCAweDA1MDJ9LCB7MHg3OTZDLCAweDA1MDN9LCB7MHg5NzI4LCAweDA1MDR9LCB7MHg5RDg1LCAweDA0MjN9LCB7MHhEODEwLCAweDA0MjR9LCB7MHgwRjgwLCAweDAwMDF9LCB7MHg4M0YyLCAweDAwMkV9IH07CisgICAgcnRrX3VpbnQzMiByZWREYXRhNltdWzJdID0gIHsgezB4ODJGMSwgMHgwNTAwfSwgezB4RjE5NSwgMHgwNTAxfSwgezB4MzFBMiwgMHgwNTAyfSwgezB4Nzk2QywgMHgwNTAzfSwgezB4OTcyOCwgMHgwNTA0fSwgezB4OUQ4NSwgMHgwNDIzfSwgezB4RDgxMCwgMHgwNDI0fSwgezB4MEY4MCwgMHgwMDAxfSwgezB4ODNGMiwgMHgwMDJFfSB9OworICAgIHJ0a191aW50MzIgcmVkRGF0YThbXVsyXSA9ICB7IHsweDgyRjEsIDB4MDUwMH0sIHsweEY5OTUsIDB4MDUwMX0sIHsweDMxQTIsIDB4MDUwMn0sIHsweDc5NkMsIDB4MDUwM30sIHsweDk3MjgsIDB4MDUwNH0sIHsweDlEODUsIDB4MDQyM30sIHsweEQ4MTAsIDB4MDQyNH0sIHsweDBGODAsIDB4MDAwMX0sIHsweDgzRjIsIDB4MDAyRX0gfTsKKyAgICBydGtfdWludDMyIHJlZERhdGE5W11bMl0gPSAgeyB7MHg4MkYxLCAweDA1MDB9LCB7MHhGOTk1LCAweDA1MDF9LCB7MHgzMUEyLCAweDA1MDJ9LCB7MHg3OTZDLCAweDA1MDN9LCB7MHg5NzI4LCAweDA1MDR9LCB7MHg5RDg1LCAweDA0MjN9LCB7MHhEODEwLCAweDA0MjR9LCB7MHgwRjgwLCAweDAwMDF9LCB7MHg4M0YyLCAweDAwMkV9IH07CisgICAgcnRrX3VpbnQzMiByZWREYXRhSEJbXVsyXSA9IHsgezB4ODJGMCwgMHgwNTAwfSwgezB4RjE5NSwgMHgwNTAxfSwgezB4MzFBMiwgMHgwNTAyfSwgezB4Nzk2MCwgMHgwNTAzfSwgezB4OTcyOCwgMHgwNTA0fSwgezB4OUQ4NSwgMHgwNDIzfSwgezB4RDgxMCwgMHgwNDI0fSwgezB4MEY4MCwgMHgwMDAxfSwgezB4ODNGMiwgMHgwMDJFfSB9OworCisgICAgaWYoaWQgPj0gUlRMODM2N0NfRVhUTk8pCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgaWYobW9kZSA+PSBFWFRfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIC8qIG1hZ2ljIG51bWJlciovCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHgxM0MyLCAweDAyNDkpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgLyogQ2hpcCBudW0gKi8KKyAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZygweDEzMDAsICZyZWdWYWx1ZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4MTNDMiwgMHgwMDAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgdHlwZSA9IDA7CisKKyAgICBzd2l0Y2ggKHJlZ1ZhbHVlKQorICAgIHsKKyAgICAgICAgY2FzZSAweDAyNzY6CisgICAgICAgIGNhc2UgMHgwNTk3OgorICAgICAgICBjYXNlIDB4NjM2NzoKKyAgICAgICAgICAgIHR5cGUgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgwNjUyOgorICAgICAgICBjYXNlIDB4NjM2ODoKKyAgICAgICAgICAgIHR5cGUgPSAyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgwODAxOgorICAgICAgICBjYXNlIDB4NjUxMToKKyAgICAgICAgICAgIHR5cGUgPSAzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKKyAgICB9CisKKworICAgIGlmICgxPT10eXBlKQorICAgIHsKKyAgICAgICAgaWYoKG1vZGUgPT0gRVhUXzEwMDBYXzEwMEZYKSB8fCAobW9kZSA9PSBFWFRfMTAwMFgpIHx8IChtb2RlID09IEVYVF8xMDBGWCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19SRUdfVE9fRUNPNCwgNSwgMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfUkVHX1RPX0VDTzQsIDcsIDEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19DSElQX1JFU0VULCBSVEw4MzY3Q19EVzgwNTFfUlNUX09GRlNFVCwgMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX01JU0NFTExBTkVPVVNfQ09ORklHVVJFMCwgUlRMODM2N0NfRFc4MDUxX0VOX09GRlNFVCwgMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0RXODA1MV9SRFksIFJUTDgzNjdDX0FDU19JUk9NX0VOQUJMRV9PRkZTRVQsIDEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19EVzgwNTFfUkRZLCBSVEw4MzY3Q19JUk9NX01TQl9PRkZTRVQsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgaWYobW9kZSA9PSBFWFRfMTAwMFhfMTAwRlgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yKGlkeCA9IDA7IGlkeCA8IEZJQkVSMl9BVVRPX0lOSVRfU0laRTsgaWR4KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHhFMDAwICsgaWR4LCAocnRrX3VpbnQzMilGaWJlcjJfQXV0b1tpZHhdKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmKG1vZGUgPT0gRVhUXzEwMDBYKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvcihpZHggPSAwOyBpZHggPCBGSUJFUjJfMUdfSU5JVF9TSVpFOyBpZHgrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweEUwMDAgKyBpZHgsIChydGtfdWludDMyKUZpYmVyMl8xR1tpZHhdKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmKG1vZGUgPT0gRVhUXzEwMEZYKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvcihpZHggPSAwOyBpZHggPCBGSUJFUjJfMTAwTV9JTklUX1NJWkU7IGlkeCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4RTAwMCArIGlkeCwgKHJ0a191aW50MzIpRmliZXIyXzEwME1baWR4XSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0RXODA1MV9SRFksIFJUTDgzNjdDX0lST01fTVNCX09GRlNFVCwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0RXODA1MV9SRFksIFJUTDgzNjdDX0FDU19JUk9NX0VOQUJMRV9PRkZTRVQsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19DSElQX1JFU0VULCBSVEw4MzY3Q19EVzgwNTFfUlNUX09GRlNFVCwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICB9CisKKyAgICAgICAgaWYobW9kZSA9PSBFWFRfR01JSSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19FWFQwX1JHTVhGLCBSVEw4MzY3Q19FWFQwX1JHVFhfSU5WX09GRlNFVCwgMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0VYVDFfUkdNWEYsIFJUTDgzNjdDX0VYVDFfUkdUWF9JTlZfT0ZGU0VULCAxKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0VYVF9UWENfRExZLCBSVEw4MzY3Q19FWFQxX0dNSUlfVFhfREVMQVlfTUFTSywgNSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19FWFRfVFhDX0RMWSwgUlRMODM2N0NfRVhUMF9HTUlJX1RYX0RFTEFZX01BU0ssIDYpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFNlcmRlcyByZXNldCAqLworICAgICAgICBpZiggKG1vZGUgPT0gRVhUX1RNSUlfTUFDKSB8fCAobW9kZSA9PSBFWFRfVE1JSV9QSFkpICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19CWVBBU1NfTElORV9SQVRFLCBpZCwgMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19CWVBBU1NfTElORV9SQVRFLCBpZCwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICB9CisKKyAgICAgICAgaWYoIChtb2RlID09IEVYVF9TR01JSSkgfHwgKG1vZGUgPT0gRVhUX0hTR01JSSkgKQorICAgICAgICB7CisgICAgICAgICAgICBpZihpZCAhPSAxKQorICAgICAgICAgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHgxM0MwLCAweDAyNDkpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoMHgxM0MxLCAmb3B0aW9uKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4MTNDMCwgMHgwMDAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgIH0KKworICAgICAgICBpZihtb2RlID09IEVYVF9TR01JSSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYob3B0aW9uID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDw9IDc7IGkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfU0RTX0lOREFDU19EQVRBLCByZWREYXRhW2ldWzBdKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX1NEU19JTkRBQ1NfQURSLCByZWREYXRhW2ldWzFdKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX1NEU19JTkRBQ1NfQ01ELCAweDAwQzApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IoaSA9IDA7IGkgPD0gNzsgaSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19TRFNfSU5EQUNTX0RBVEEsIHJlZERhdGFTQltpXVswXSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19TRFNfSU5EQUNTX0FEUiwgcmVkRGF0YVNCW2ldWzFdKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX1NEU19JTkRBQ1NfQ01ELCAweDAwQzApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmKG1vZGUgPT0gRVhUX0hTR01JSSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYob3B0aW9uID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4MTNjMiwgMHgwMjQ5KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKDB4MTMwMSwgJnJlZ1ZhbHVlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4MTNjMiwgMHgwMDAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgaWYgKCAoKHJlZ1ZhbHVlICYgMHgwMEYwKSA+PiA0KSA9PSAweDAwMDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmb3IoaSA9IDA7IGkgPD0gODsgaSsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX1NEU19JTkRBQ1NfREFUQSwgcmVkRGF0YTFbaV1bMF0pKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19TRFNfSU5EQUNTX0FEUiwgcmVkRGF0YTFbaV1bMV0pKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19TRFNfSU5EQUNTX0NNRCwgMHgwMEMwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoICgocmVnVmFsdWUgJiAweDAwRjApID4+IDQpID09IDB4MDAwNSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvcihpID0gMDsgaSA8PSA4OyBpKyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfU0RTX0lOREFDU19EQVRBLCByZWREYXRhNVtpXVswXSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX1NEU19JTkRBQ1NfQURSLCByZWREYXRhNVtpXVsxXSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX1NEU19JTkRBQ1NfQ01ELCAweDAwQzApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmICggKChyZWdWYWx1ZSAmIDB4MDBGMCkgPj4gNCkgPT0gMHgwMDA2KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDw9IDg7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19TRFNfSU5EQUNTX0RBVEEsIHJlZERhdGE2W2ldWzBdKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfU0RTX0lOREFDU19BRFIsIHJlZERhdGE2W2ldWzFdKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfU0RTX0lOREFDU19DTUQsIDB4MDBDMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKCAoKHJlZ1ZhbHVlICYgMHgwMEYwKSA+PiA0KSA9PSAweDAwMDgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmb3IoaSA9IDA7IGkgPD0gODsgaSsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX1NEU19JTkRBQ1NfREFUQSwgcmVkRGF0YThbaV1bMF0pKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19TRFNfSU5EQUNTX0FEUiwgcmVkRGF0YThbaV1bMV0pKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19TRFNfSU5EQUNTX0NNRCwgMHgwMEMwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoICgocmVnVmFsdWUgJiAweDAwRjApID4+IDQpID09IDB4MDAwOSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvcihpID0gMDsgaSA8PSA4OyBpKyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfU0RTX0lOREFDU19EQVRBLCByZWREYXRhOVtpXVswXSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX1NEU19JTkRBQ1NfQURSLCByZWREYXRhOVtpXVsxXSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX1NEU19JTkRBQ1NfQ01ELCAweDAwQzApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IoaSA9IDA7IGkgPD0gODsgaSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19TRFNfSU5EQUNTX0RBVEEsIHJlZERhdGFIQltpXVswXSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19TRFNfSU5EQUNTX0FEUiwgcmVkRGF0YUhCW2ldWzFdKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX1NEU19JTkRBQ1NfQ01ELCAweDAwQzApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIE9ubHkgb25lIGV4dCBwb3J0IHNob3VsZCBjYXJlIFNHTUlJIHNldHRpbmcgKi8KKyAgICAgICAgaWYoaWQgPT0gMSkKKyAgICAgICAgeworCisgICAgICAgICAgICBpZihtb2RlID09IEVYVF9TR01JSSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1NEU19NSVNDLCBSVEw4MzY3Q19DRkdfTUFDOF9TRUxfU0dNSUlfT0ZGU0VULCAxKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19TRFNfTUlTQywgUlRMODM2N0NfQ0ZHX01BQzhfU0VMX0hTR01JSV9PRkZTRVQsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKG1vZGUgPT0gRVhUX0hTR01JSSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1NEU19NSVNDLCBSVEw4MzY3Q19DRkdfTUFDOF9TRUxfU0dNSUlfT0ZGU0VULCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19TRFNfTUlTQywgUlRMODM2N0NfQ0ZHX01BQzhfU0VMX0hTR01JSV9PRkZTRVQsIDEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisKKyAgICAgICAgICAgICAgICBpZigobW9kZSAhPSBFWFRfMTAwMFhfMTAwRlgpICYmIChtb2RlICE9IEVYVF8xMDAwWCkgJiYgKG1vZGUgIT0gRVhUXzEwMEZYKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfU0RTX01JU0MsIFJUTDgzNjdDX0NGR19NQUM4X1NFTF9TR01JSV9PRkZTRVQsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfU0RTX01JU0MsIFJUTDgzNjdDX0NGR19NQUM4X1NFTF9IU0dNSUlfT0ZGU0VULCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZigwID09IGlkIHx8IDEgPT0gaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfRElHSVRBTF9JTlRFUkZBQ0VfU0VMRUNULCBSVEw4MzY3Q19TRUxFQ1RfR01JSV8wX01BU0sgPDwgKGlkICogUlRMODM2N0NfU0VMRUNUX0dNSUlfMV9PRkZTRVQpLCBtb2RlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0RJR0lUQUxfSU5URVJGQUNFX1NFTEVDVF8xLCBSVEw4MzY3Q19TRUxFQ1RfR01JSV8yX01BU0ssIG1vZGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFNlcmRlcyBub3QgcmVzZXQgKi8KKyAgICAgICAgaWYoIChtb2RlID09IEVYVF9TR01JSSkgfHwgKG1vZGUgPT0gRVhUX0hTR01JSSkgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX1NEU19JTkRBQ1NfREFUQSwgMHg3MTA2KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfU0RTX0lOREFDU19BRFIsIDB4MDAwMykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX1NEU19JTkRBQ1NfQ01ELCAweDAwQzApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCAobW9kZSA9PSBFWFRfU0dNSUkpIHx8IChtb2RlID09IEVYVF9IU0dNSUkpICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19DSElQX1JFU0VULCBSVEw4MzY3Q19EVzgwNTFfUlNUX09GRlNFVCwgMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX01JU0NFTExBTkVPVVNfQ09ORklHVVJFMCwgUlRMODM2N0NfRFc4MDUxX0VOX09GRlNFVCwgMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0RXODA1MV9SRFksIFJUTDgzNjdDX0FDU19JUk9NX0VOQUJMRV9PRkZTRVQsIDEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19EVzgwNTFfUkRZLCBSVEw4MzY3Q19JUk9NX01TQl9PRkZTRVQsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgZm9yKGlkeCA9IDA7IGlkeCA8IFNHTUlJX0lOSVRfU0laRTsgaWR4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4RTAwMCArIGlkeCwgKHJ0a191aW50MzIpU2dtaWlfSW5pdFtpZHhdKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0RXODA1MV9SRFksIFJUTDgzNjdDX0lST01fTVNCX09GRlNFVCwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0RXODA1MV9SRFksIFJUTDgzNjdDX0FDU19JUk9NX0VOQUJMRV9PRkZTRVQsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19DSElQX1JFU0VULCBSVEw4MzY3Q19EVzgwNTFfUlNUX09GRlNFVCwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKDIgPT0gdHlwZSkKKyAgICB7CisgICAgICAgIC8qIFNlcmRlcyByZXNldCAqLworICAgICAgICBpZiggKG1vZGUgPT0gRVhUX1RNSUlfTUFDKSB8fCAobW9kZSA9PSBFWFRfVE1JSV9QSFkpICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19CWVBBU1NfTElORV9SQVRFLCBpZCsyLCAxKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX0JZUEFTU19MSU5FX1JBVEUsIGlkKzIsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgfQorCisgICAgICAgIC8qc2V0IE1BQyBtb2RlKi8KKyAgICAgICAgaWYgKGlkID09IDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKG1vZGUgPT0gRVhUX0hTR01JSSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICAgICAgICAgIGlmIChtb2RlID09IEVYVF9TR01JSSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKmNmZyBwb3J0OCB3aXRoIE1JSSBtYWMgbW9kZSovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDEzMDUsIDB4ZjAsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAvKmVuYWJsZSBwb3J0OCBTR01JSSovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MWQ5MiwgMTQsIDEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtb2RlID09IEVYVF8xMDAwWCB8fCBtb2RlID09IEVYVF8xMDBGWCB8fCBtb2RlID09IEVYVF8xMDAwWF8xMDBGWCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKmNmZyBwb3J0OCB3aXRoIE1JSSBtYWMgbW9kZSovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDEzMDUsIDB4ZjAsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAvKmRpc2FibGUgcG9ydDggU0dNSUkqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDFkOTIsIDE0LCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLypzZXQgZmliZXIgbGluayB1cCovCisgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHg2MjEwLCAxMSwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKmNmZyBwb3J0OCB3aXRoIE1JSSBtYWMgbW9kZSovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDEzMDUsIDB4ZjAsIG1vZGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAvKmRpc2FibGUgcG9ydDggU0dNSUkqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDFkOTIsIDE0LCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLypkaXNhYmxlIFNEUyAxKi8KKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxZDkyLCAweDFmMDAsIDB4MWYpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKGlkID09IDIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtb2RlID09IEVYVF9IU0dNSUkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4MTMwLCA3KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4MzlmLCA3KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4M2ZhLCA3KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDEzMCwgMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDM5ZiwgMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDNmYSwgNCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgfQorCisKKyAgICAgICAgICAgIGlmIChtb2RlID09IEVYVF9TR01JSSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKmNmZyBwb3J0OSB3aXRoIE1JSSBtYWMgbW9kZSovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDEzYzMsIDB4ZiwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qZW5hYmxlIHBvcnQ5IFNHTUlJKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxZDkyLCA2LCAxKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLypkaXNhYmxlIHBvcnQ5IEhTR01JSSovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MWQ5MiwgNywgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1vZGUgPT0gRVhUX0hTR01JSSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKmNmZyBwb3J0OSB3aXRoIE1JSSBtYWMgbW9kZSovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDEzYzMsIDB4ZiwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qZGlzYWJsZSBwb3J0OSBTR01JSSovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MWQ5MiwgNiwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qZW5hYmxlIHBvcnQ5IEhTR01JSSovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MWQ5MiwgNywgMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1vZGUgPT0gRVhUXzEwMDBYIHx8IG1vZGUgPT0gRVhUXzEwMEZYIHx8IG1vZGUgPT0gRVhUXzEwMDBYXzEwMEZYKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qY2ZnIHBvcnQ5IHdpdGggTUlJIG1hYyBtb2RlKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4MTNjMywgMHhmLCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLypkaXNhYmxlIHBvcnQ5IFNHTUlJKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxZDkyLCA2LCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLypkaXNhYmxlIHBvcnQ5IEhTR01JSSovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MWQ5MiwgNywgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qc2V0IGZpYmVyIGxpbmsgdXAqLworICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4NjIwMCwgMTEsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLypjZmcgcG9ydDkgd2l0aCBNSUkgbWFjIG1vZGUqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxM2MzLCAweGYsIG1vZGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAvKmRpc2FibGUgcG9ydDkgU0dNSUkqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDFkOTIsIDYsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAvKmRpc2FibGUgcG9ydDkgSFNHTUlJKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxZDkyLCA3LCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLypkaXNhYmxlIFNEUyAwKi8KKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxZDkyLCAweDFmLCAweDFmKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgIH0KKworICAgICAgICAvKlNFVCBUTyBSR01JSSBNT0RFKi8KKyAgICAgICAgaWYgKG1vZGUgPT0gRVhUX1JHTUlJKQorICAgICAgICB7CisgICAgICAgICAgICAvKmRpc2FibGUgcGFyYWwgbGVkIHBhZCovCisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX1BBUkFfTEVEX0lPX0VOMywgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX1BBUkFfTEVEX0lPX0VOMSwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX1BBUkFfTEVEX0lPX0VOMiwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAvKnNldCBNQUM4IG1vZGUqLworICAgICAgICAgICAgaWYgKGlkID09IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyoxOiBSR01JSTEgYmlhcyB3b3JrIGF0IDMuM1YsIDA6IFJHTUlJMSBiaWFzIHdvcmsgYXQgMi41ViovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MTMwMywgOSwgMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qZHJ2aW5nIDEqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDEzMDMsIDYsIDEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAvKmRydmluZyAxKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxMzAzLCA0LCAxKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLypzaG93IHJhdGUgPSAwKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxMzAzLCAxLCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLypFWFQxIFJHTUlJIFRYQyBkZWxheSAybnMqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDEzMDcsIDMsIDEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAvKmNmZ19FeHQxX3JndHhjX2RseSA9IDAqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxM2Y5LCAweDM4LCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLypSWERMWSA9IDAqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxMzA3LCAweDcsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAvKmNmZ19yZzFfZG4gPSA0Ki8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4MTMwNCwgMHg3MDAwLCA0KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLypjZmdfcmcxX2RwID0gNCovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDEzZjksIDB4NzAwLCA0KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoaWQgPT0gMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKjE6IFJHTUlJMSBiaWFzIHdvcmsgYXQgMy4zViwgMDogUkdNSUkxIGJpYXMgd29yayBhdCAyLjVWKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxMzAzLCAxMCwgMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qZHJ2aW5nIDEqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDEzZTIsIDIsIDEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAvKmRydmluZyAxKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxM2UyLCAxLCAxKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLypzaG93IHJhdGUgPSAwKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxM2UyLCAwLCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLypFWFQxIFJHTUlJIFRYQyBkZWxheSAybnMqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDEzYzUsIDMsIDEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAvKmNmZ19FeHQxX3JndHhjX2RseSA9IDAqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxM2Y5LCAweDFjMCwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qUlhETFkgPSAwKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4MTNjNSwgMHg3LCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLypjZmdfcmcxX2RuID0gNCovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDEzZTIsIDB4MWMwLCA0KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLypjZmdfcmcxX2RwID0gNCovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDEzZTIsIDB4MzgsIDQpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobW9kZSA9PSBFWFRfU0dNSUkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpZCA9PSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qc2RzIDEgICAgIHJlZyAxICAgIHBhZ2UgMHgyMSAgICAgd3JpdGUgdmFsdWUgIDB4ZWM5MSovCisgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19TRFNfSU5EQUNTX0RBVEEsIDB4ZWM5MSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfU0RTX0lOREFDU19BRFIsICgweDIxPDw1KSB8IDEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX1NEU19JTkRBQ1NfQ01ELCAweDAwQzEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAvKnNkcyAxICAgICByZWcgNSAgICBwYWdlIDB4MjQgICAgIHdyaXRlIHZhbHVlICAweDU4MjUqLworICAgICAgICAgICAgICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfU0RTX0lOREFDU19EQVRBLCAweDU4MjUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX1NEU19JTkRBQ1NfQURSLCAoMHgyNDw8NSkgfCA1KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19TRFNfSU5EQUNTX0NNRCwgMHgwMEMxKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDFkOTIsIDB4MWYwMCwgMikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qPz8/Pz8/Pz8/Pz8/Pz8/Pz8qLworCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChpZCA9PSAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qc2RzIDAgICAgIHJlZyAwICAgIHBhZ2UgMHgyOCAgICAgd3JpdGUgdmFsdWUgIDB4OTQyYyovCisgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19TRFNfSU5EQUNTX0RBVEEsIDB4OTQyYykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfU0RTX0lOREFDU19BRFIsICgweDI4PDw1KSB8IDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX1NEU19JTkRBQ1NfQ01ELCAweDAwQzApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAvKnNkcyAwICAgICByZWcgMCAgICBwYWdlIDB4MjQgICAgIHdyaXRlIHZhbHVlICAweDk0MmMqLworICAgICAgICAgICAgICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfU0RTX0lOREFDU19EQVRBLCAweDk0MmMpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX1NEU19JTkRBQ1NfQURSLCAoMHgyNDw8NSkgfCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19TRFNfSU5EQUNTX0NNRCwgMHgwMEMwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLypzZHMgMCAgICAgcmVnIDUgICAgcGFnZSAweDIxICAgICB3cml0ZSB2YWx1ZSAgMHg4ZGMzKi8KKyAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX1NEU19JTkRBQ1NfREFUQSwgMHg4ZGMzKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19TRFNfSU5EQUNTX0FEUiwgKDB4MjE8PDUpIHwgNSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfU0RTX0lOREFDU19DTUQsIDB4MDBDMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxZDkyLCAweDFmLCAyKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLyo/Pz8/Pz8/Pz8/Pz8/Pz8/PyovCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobW9kZSA9PSBFWFRfSFNHTUlJKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaWQgPT0gMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKnNkcyAwICAgICByZWcgMCAgICBwYWdlIDB4MjggICAgIHdyaXRlIHZhbHVlICAweDk0MmMqLworICAgICAgICAgICAgICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfU0RTX0lOREFDU19EQVRBLCAweDk0MmMpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX1NEU19JTkRBQ1NfQURSLCAoMHgyODw8NSkgfCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19TRFNfSU5EQUNTX0NNRCwgMHgwMEMwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLypzZHMgMCAgICAgcmVnIDAgICAgcGFnZSAweDI0ICAgICB3cml0ZSB2YWx1ZSAgMHg5NDJjKi8KKyAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX1NEU19JTkRBQ1NfREFUQSwgMHg5NDJjKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19TRFNfSU5EQUNTX0FEUiwgKDB4MjQ8PDUpIHwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfU0RTX0lOREFDU19DTUQsIDB4MDBDMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qc2RzIDAgICAgIHJlZyA1ICAgIHBhZ2UgMHgyMSAgICAgd3JpdGUgdmFsdWUgIDB4OGRjMyovCisgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19TRFNfSU5EQUNTX0RBVEEsIDB4OGRjMykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfU0RTX0lOREFDU19BRFIsICgweDIxPDw1KSB8IDUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX1NEU19JTkRBQ1NfQ01ELCAweDAwQzApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKworICAgICAgICAgICAgICAgIC8qIG9wdGltaXppbmcgSElTR01JSSBwZXJmb3JtYW5jZSB3aGlsZSBSR01JSSB1c2VkICYgKi8KKyAgICAgICAgICAgICAgICAvKnNkcyAwICAgICByZWcgOSAgICAgcGFnZSAweDIxICAgICB3cml0ZSB2YWx1ZSAweDM5MzEqLworICAgICAgICAgICAgICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfU0RTX0lOREFDU19EQVRBLCAweDM5MzEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19TRFNfSU5EQUNTX0FEUiwgKDB4MjE8PDUpfDkpICkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfU0RTX0lOREFDU19DTUQsIDB4MDBDMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxZDkyLCAweDFmLCAweDEyKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLyo/Pz8/Pz8/Pz8/Pz8/Pz8/PyovCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobW9kZSA9PSBFWFRfMTAwMFgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpZCA9PSAxKQorICAgICAgICAgICAgeworCisgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU2RzUmVnKDEsIDEsIDB4MjEsIDB4ZWM5MSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTZHNSZWcoMSwgNSwgMHgyNCwgMHg1ODI1KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxZDkyLCAweDFmMDAsIDQpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4MWQ5MiwgMHgxZjAwLCAweDFmKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLypwYXRjaCBzcGVlZCBjaGFuZ2Ugc2RzMSAxMDAwTSovCisgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU2RzUmVnKDEsIDQsIDAsICZyZWdWYWx1ZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICByZWdWYWx1ZSAmPSAweEZGRkYwRkZGOworICAgICAgICAgICAgICAgIHJlZ1ZhbHVlIHw9IDB4OTAwMDsKKyAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTZHNSZWcoMSwgNCwgMCwgcmVnVmFsdWUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTZHNSZWcoMSwgMCwgMiwgJnJlZ1ZhbHVlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIHJlZ1ZhbHVlICY9IDB4RkZGRmRGRkY7CisgICAgICAgICAgICAgICAgcmVnVmFsdWUgfD0gMHg0MDsKKyAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTZHNSZWcoMSwgMCwgMiwgcmVnVmFsdWUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKworICAgICAgICAgICAgICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1Nkc1JlZygxLCA0LCAwLCAmcmVnVmFsdWUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgcmVnVmFsdWUgJj0gMHhGRkZGRUZGRjsKKyAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTZHNSZWcoMSwgNCwgMCwgcmVnVmFsdWUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4MWQ5MiwgMHgxZjAwLCA0KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxZDkyLCAweDYwMDAsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGlkID09IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU2RzUmVnKDAsIDAsIDB4MjgsIDB4OTQyYykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTZHNSZWcoMCwgMCwgMHgyNCwgMHg5NDJjKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1Nkc1JlZygwLCA1LCAweDIxLCAweDhkYzMpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4MWQ5MiwgMHgxZiwgNCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qcGF0Y2ggc3BlZWQgY2hhbmdlIHNkczAgMTAwME0qLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxZDkyLCAweDFmLCAweDFmKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU2RzUmVnKDAsIDQsIDAsICZyZWdWYWx1ZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICByZWdWYWx1ZSAmPSAweEZGRkYwRkZGOworICAgICAgICAgICAgICAgIHJlZ1ZhbHVlIHw9IDB4OTAwMDsKKyAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTZHNSZWcoMCwgNCwgMCwgcmVnVmFsdWUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTZHNSZWcoMCwgMCwgMiwgJnJlZ1ZhbHVlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIHJlZ1ZhbHVlICY9IDB4RkZGRkRGRkY7CisgICAgICAgICAgICAgICAgcmVnVmFsdWUgfD0gMHg0MDsKKyAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTZHNSZWcoMCwgMCwgMiwgcmVnVmFsdWUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTZHNSZWcoMCwgNCwgMCwgJnJlZ1ZhbHVlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIHJlZ1ZhbHVlICY9IDB4RkZGRkVGRkY7CisgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU2RzUmVnKDAsIDQsIDAsIHJlZ1ZhbHVlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDFkOTIsIDB4MWYsIDQpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDFkOTIsIDB4ZTAsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtb2RlID09IEVYVF8xMDBGWCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGlkID09IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU2RzUmVnKDEsIDEsIDB4MjEsIDB4ZWM5MSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTZHNSZWcoMSwgNSwgMHgyNCwgMHg1ODI1KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxZDkyLCAweDFmMDAsIDUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAvKnBhdGNoIHNwZWVkIGNoYW5nZSBzZHMxIDEwME0qLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxZDkyLCAweDFmMDAsIDB4MWYpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU2RzUmVnKDEsIDQsIDAsICZyZWdWYWx1ZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICByZWdWYWx1ZSAmPSAweEZGRkYwRkZGOworICAgICAgICAgICAgICAgIHJlZ1ZhbHVlIHw9IDB4YjAwMDsKKyAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTZHNSZWcoMSwgNCwgMCwgcmVnVmFsdWUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTZHNSZWcoMSwgMCwgMiwgJnJlZ1ZhbHVlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIHJlZ1ZhbHVlICY9IDB4RkZGRkZGQkY7CisgICAgICAgICAgICAgICAgcmVnVmFsdWUgfD0gMHgyMDAwOworICAgICAgICAgICAgICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1Nkc1JlZygxLCAwLCAyLCByZWdWYWx1ZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyNpZiAwCisgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4NjIxNCwgMHgxYTApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTZHNSZWcoMSwgNCwgMCwgJnJlZ1ZhbHVlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIHJlZ1ZhbHVlICY9IDB4RkZGRkVGRkY7CisgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU2RzUmVnKDEsIDQsIDAsIHJlZ1ZhbHVlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDFkOTIsIDB4MWYwMCwgNSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4MWQ5MiwgMHg2MDAwLCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoaWQgPT0gMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTZHNSZWcoMCwgMCwgMHgyOCwgMHg5NDJjKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1Nkc1JlZygwLCAwLCAweDI0LCAweDk0MmMpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU2RzUmVnKDAsIDUsIDB4MjEsIDB4OGRjMykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4MWQ5MiwgMHgxZiwgNSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qcGF0Y2ggc3BlZWQgY2hhbmdlIHNkczAgMTAwTSovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDFkOTIsIDB4MWYsIDB4MWYpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTZHNSZWcoMCwgNCwgMCwgJnJlZ1ZhbHVlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIHJlZ1ZhbHVlICY9IDB4RkZGRjBGRkY7CisgICAgICAgICAgICAgICAgcmVnVmFsdWUgfD0gMHhiMDAwOworICAgICAgICAgICAgICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1Nkc1JlZygwLCA0LCAwLCByZWdWYWx1ZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1Nkc1JlZygwLCAwLCAyLCAmcmVnVmFsdWUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgcmVnVmFsdWUgJj0gMHhGRkZGRkZCRjsKKyAgICAgICAgICAgICAgICByZWdWYWx1ZSB8PSAweDIwMDA7CisgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU2RzUmVnKDAsIDAsIDIsIHJlZ1ZhbHVlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU2RzUmVnKDAsIDQsIDAsICZyZWdWYWx1ZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICByZWdWYWx1ZSAmPSAweEZGRkZFRkZGOworICAgICAgICAgICAgICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1Nkc1JlZygwLCA0LCAwLCByZWdWYWx1ZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxZDkyLCAweDFmLCA1KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxZDkyLCAweGUwLCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG1vZGUgPT0gRVhUXzEwMDBYXzEwMEZYKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaWQgPT0gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTZHNSZWcoMSwgMSwgMHgyMSwgMHhlYzkxKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1Nkc1JlZygxLCA1LCAweDI0LCAweDU4MjUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU2RzUmVnKDEsIDEzLCAwLCAweDQ2MTYpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU2RzUmVnKDEsIDEsIDAsIDB4ZjIwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxZDkyLCAweDFmMDAsIDcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChpZCA9PSAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1Nkc1JlZygwLCAwLCAweDI4LCAweDk0MmMpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgaWYoIChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU2RzUmVnKDAsIDAsIDB4MjQsIDB4OTQyYykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTZHNSZWcoMCwgNSwgMHgyMSwgMHg4ZGMzKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1Nkc1JlZygwLCAxMywgMCwgMHg0NjE2KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1Nkc1JlZygwLCAxLCAwLCAweGYyMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4MWQ5MiwgMHgxZiwgNykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfQorICAgIGVsc2UgaWYgKDMgPT0gdHlwZSkKKyAgICB7CisKKyAgICAgICAgLypyZXN0b3JlIHBhdGNoLCBieSBkZXNpZ25lci4gcGF0Y2ggVHggRklGTyBpc3N1ZSwgd2hlbiBub3QgSFNHTUlJIDIuNUcgbW9kZQorICAgICAgICAgI3NkczAsIHBhZ2UgMSwgcmVnIDEsIGJpdDQ9MCovCisgICAgICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1Nkc1JlZygwLCAxLCAxLCAmcmVnVmFsdWUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICByZWdWYWx1ZSAmPSAweEZGRkZGRkVGOworICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTZHNSZWcoMCwgMSwgMSwgcmVnVmFsdWUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIC8qc2V0IGZvciBtYWMgNiovCisgICAgICAgIGlmICgxID09IGlkKQorICAgICAgICB7CisgICAgICAgICAgICAvKmZvcmNlIHBvcnQ2IGxpbmtkb3duKi8KKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDEzN2MsIDB4MTAwMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0KDB4MWQ5ZCwgNiwgJnJlZ19kYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgd2hpbGUocmVnX2RhdGEgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoMHgxZDlkLCA2LCAmcmVnX2RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtb2RlID09IEVYVF9TR01JSSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBkaXNhYmxlIG1hYzYgbW9kZV9leHQxICBtb2RlKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoMHgxZDNkLCAxMCwgJnJlZ19kYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIGlmKHJlZ19kYXRhID09IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4MTMwNSwgMHhmMCwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8qY2ZnX2J5cGFzc19saW5lX3JhdGVbMV09MCovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4M2Y3LCAxLCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisKKworICAgICAgICAgICAgICAgIC8qYml0NTogY2ZnX21hYzZfZmliPTAgICAgJiAgIGJpdDc6IGNmZ19tYWM2X2ZpYjI9MCovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MWQ0MSwgNSwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxZDQxLCA3LCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLypjZmdfbWFjN19maWI9MCovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MWQ5NSwgMSwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qY2ZnX21hYzdfc2VsX3NnbWlpPSAwOiBNQUM3IGlzIG5vdCBTR01JSSBtb2RlKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxZDk1LCAwLCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLyojY2ZnX3NnbWlpX2xpbms9MCovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MWQxMSwgOSwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qY2ZnX21hYzZfc2VsX2hzZ21paT0wKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxZDExLCAxMSwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworCisgICAgICAgICAgICAgICAgLypiaXQxMzogY2ZnX3Nkc19tb2RlX3NlbF9uZXc9MSA6RW5hYmxlIG5ldyBzZHMgbW9kZSBjb25maWcgbWV0aG9kKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxZDk1LCAxMywgMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qICBiaXRbMTI6OF06IE9ubHkgdmFsaWQgd2hlbiBjZmdfc2RzX21vZGVfc2VsX25ldz0xCisgICAgICAgICAgICAgICAgICAgIG5ld19jZmdfc2RzX21vZGU9MHgxRiAocmVzZXQgbW9kZSkgKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4MWQ5NSwgMHgxZjAwLCAweDFmKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLypjZmdfbWFjNl9zZWxfc2dtaWk9IDEqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDFkMTEsIDYsIDEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAvKiBiaXRbMTI6OF06IE9ubHkgdmFsaWQgd2hlbiBjZmdfc2RzX21vZGVfc2VsX25ldz0xCisgICAgICAgICAgICAgICAgICAgbmV3X2NmZ19zZHNfbW9kZT0weDEyICAqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxZDk1LCAweDFmMDAsIDB4MikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qIE1BQyBsaW5rIHNvdXJjZSovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MWQ5NSwgMiwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtb2RlID09IEVYVF9IU0dNSUkpCisgICAgICAgICAgICB7CisKKyAgICAgICAgICAgICAgICAvKnJlc3RvcmUgcGF0Y2gsIGJ5IGRlc2lnbmVyLiBwYXRjaCBUeCBGSUZPIGlzc3VlLCB3aGVuICBIU0dNSUkgMi41RyBtb2RlCisgICAgICAgICAgICAgICAgICNzZHMwLCBwYWdlIDEsIHJlZyAxLCBiaXQ0PTEqLworICAgICAgICAgICAgICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1Nkc1JlZygwLCAxLCAxLCAmcmVnVmFsdWUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgcmVnVmFsdWUgfD0gMHgxMDsKKyAgICAgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTZHNSZWcoMCwgMSwgMSwgcmVnVmFsdWUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgLyogbW9kZV9leHQxID0gZGlzYWJsZSovCisgICAgICAgICAgICAgICAgLyogZGlzYWJsZSBtYWM2IG1vZGVfZXh0MSAgbW9kZSovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0KDB4MWQzZCwgMTAsICZyZWdfZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICBpZihyZWdfZGF0YSA9PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDEzMDUsIDB4ZjAsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDNmNywgMSwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qYml0NTogY2ZnX21hYzZfZmliPTAgICAmICAgYml0NzogY2ZnX21hYzZfZmliMj0wKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxZDQxLCA1LCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDFkNDEsIDcsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAvKmNmZ19tYWM3X2ZpYj0wKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxZDk1LCAxLCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLypjZmdfbWFjN19zZWxfc2dtaWk9IDAqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDFkOTUsIDAsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAvKmNmZ19tYWM2X3NlbF9zZ21paT0wKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxZDExLCA5LCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLypjZmdfbWFjNl9zZWxfaHNnbWlpPTEqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDFkMTEsIDExLCAxKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLypjZmdfbWFjNl9zZWxfc2dtaWk9IDAqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDFkMTEsIDYsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHhkMCw3KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDM5OSwgNykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHgzZmEsIDcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAvKmJpdDEzOiBjZmdfc2RzX21vZGVfc2VsX25ldz0xIDpFbmFibGUgbmV3IHNkcyBtb2RlIGNvbmZpZyBtZXRob2QqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDFkOTUsIDEzLCAxKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIC8qIGJpdFsxMjo4XTogT25seSB2YWxpZCB3aGVuIGNmZ19zZHNfbW9kZV9zZWxfbmV3PTEKKyAgICAgICAgICAgICAgICAgICBuZXdfY2ZnX3Nkc19tb2RlPTB4MTIgICovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDFkOTUsIDB4MWYwMCwgMHgxMikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgIDE6IE1BQyBsaW5rID0gU0dNSUkgU2VyRGVzIGxpbmsKKyAgICAgICAgICAgICAgICAwOiBNQUMgbGluayA9IFNHTUlJIGNvbmZpZyBsaW5rIKOoY2ZnX3NnbWlpX2xpbmujqQorICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MWQ5NSwgMiwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZihtb2RlID09IEVYVF8xMDAwWCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiAwIDIgMCAgYml0IDh+OSAgc2V0IDAsIGZvcmNlIG4td2F5Ki8KKyAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1Nkc1JlZygwLCAyLCAwLCAmcmVnX2RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgcmVnX2RhdGEgJj0gMHhGRkZGRkNGRjsKKyAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1Nkc1JlZygwLDIsMCwgcmVnX2RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLyogZGlzYWJsZSBtYWM2IG1vZGVfZXh0MSAgbW9kZSovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0KDB4MWQzZCwgMTAsICZyZWdfZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICBpZihyZWdfZGF0YSA9PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDEzMDUsIDB4ZjAsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDNmNywgMSwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDFkMTEsIDB4MTUwMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qYml0MTM6IGNmZ19zZHNfbW9kZV9zZWxfbmV3PTEgOkVuYWJsZSBuZXcgc2RzIG1vZGUgY29uZmlnIG1ldGhvZAorICAgICAgICAgICAgICAgICAgYml0WzE6MF06Y2ZnX21hYzdfZmliPSAwICAmICBjZmdfbWFjN19zZWxfc2dtaWk9MAorICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDFkOTUsIDB4MWYwMCwgMHgxZikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxZDk1LCAxMywgMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4MWQ5NSwgMywgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qIGJpdDAgOlVUUC9GaWJlciBhdXRvIGRldGVjdCBmdW5jdGlvbiBlbmFibGUgb3Igbm90LCBjZmdfZGlzX2RldD0xOmRpc2FibGUKKyAgICAgICAgICAgICAgICAgICBiaXQzOkZvcmNlIFVUUC9GaWJlciBhdXRvIGRldGVjdCBmdW5jdGlvbiBlbmFibGUgb3Igbm90LCBjZmdfZm9yY2VfYXV0by1kZXRlY3Q9MSAqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDEzZWIsIDB4MTViYikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qYml0MzogIFNlcmRlcyBmb3JjZSBtb2RlOmNmZ19zZHNfZnJjX21vZGU9MQorICAgICAgICAgICAgICAgICAgYml0WzI6MF06IFNlcmRlcyBjaGlwIG1vZGUsIGNmZ19zZHNfbW9kZT0zYicxMDAgKGZvcmNlIHNkcyBGSUIxRyBtb2RlKSAqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDEzZTcsIDB4YykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworCisgICAgICAgICAgICAgICAgLypiaXQ1OiBjZmdfbWFjNl9maWI9MSAmIGJpdDc6IGNmZ19tYWM2X2ZpYjI9MSovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MWQ0MSwgNSwgMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxZDQxLCA3LCAxKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLypjZmdfbWFjNl9zZWxfaHNnbWlpPTAqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDFkMTEsIDExLCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLypjZmdfbWFjNl9zZWxfc2dtaWk9IDEqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDFkMTEsIDYsIDEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAvKiBiaXRbMTI6OF06IE9ubHkgdmFsaWQgd2hlbiBjZmdfc2RzX21vZGVfc2VsX25ldz0xCisgICAgICAgICAgICAgICAgICAgbmV3X2NmZ19zZHNfbW9kZT0weDQgICovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDFkOTUsIDB4MWYwMCwgMHg0KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZihtb2RlID09IEVYVF8xMDBGWCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiAwIDIgMCAgYml0IDh+OSAgc2V0IDAsIGZvcmNlIG4td2F5Ki8KKyAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1Nkc1JlZygwLCAyLCAwLCAmcmVnX2RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgcmVnX2RhdGEgJj0gMHhGRkZGRkNGRjsKKyAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1Nkc1JlZygwLDIsMCwgcmVnX2RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLyogZGlzYWJsZSBtYWM2IG1vZGVfZXh0MSAgbW9kZSovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0KDB4MWQzZCwgMTAsICZyZWdfZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICBpZihyZWdfZGF0YSA9PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDEzMDUsIDB4ZjAsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDNmNywgMSwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDFkMTEsIDB4MTUwMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qYml0MTM6IGNmZ19zZHNfbW9kZV9zZWxfbmV3PTEgOkVuYWJsZSBuZXcgc2RzIG1vZGUgY29uZmlnIG1ldGhvZAorICAgICAgICAgICAgICAgICAgYml0WzE6MF06Y2ZnX21hYzdfZmliPSAwICAmICBjZmdfbWFjN19zZWxfc2dtaWk9MAorICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDFkOTUsIDB4MWYwMCwgMHgxZikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxZDk1LCAxMywgMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4MWQ5NSwgMywgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qIGJpdDAgOlVUUC9GaWJlciBhdXRvIGRldGVjdCBmdW5jdGlvbiBlbmFibGUgb3Igbm90LCBjZmdfZGlzX2RldD0xOmRpc2FibGUKKyAgICAgICAgICAgICAgICAgICBiaXQzOkZvcmNlIFVUUC9GaWJlciBhdXRvIGRldGVjdCBmdW5jdGlvbiBlbmFibGUgb3Igbm90LCBjZmdfZm9yY2VfYXV0by1kZXRlY3Q9MSAqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDEzZWIsIDB4MTViYikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qISEhISEgY2ZnX3Nkc19mcmNfbW9kZT0xICYgIGNmZ19zZHNfbW9kZT0zYicxMDEgKGZvcmNlIHNkcyBmaWIxMDBNIG1vZGUpKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHgxM2U3LCAweGMpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKworICAgICAgICAgICAgICAgIC8qYml0NTogY2ZnX21hYzZfZmliPTEgJiBiaXQ3OiBjZmdfbWFjNl9maWIyPTEqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDFkNDEsIDUsIDEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MWQ0MSwgNywgMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qY2ZnX21hYzZfc2VsX2hzZ21paT0wKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxZDExLCAxMSwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qY2ZnX21hYzZfc2VsX3NnbWlpPSAxKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxZDExLCA2LCAxKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLyogIGJpdFsxMjo4XTogT25seSB2YWxpZCB3aGVuIGNmZ19zZHNfbW9kZV9zZWxfbmV3PTEKKyAgICAgICAgICAgICAgICAgICAgbmV3X2NmZ19zZHNfbW9kZT0weDUgKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4MWQ5NSwgMHgxZjAwLCAweDUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKG1vZGUgPT0gRVhUXzEwMDBYXzEwMEZYKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIDAgMiAwICBiaXQgOH45ICBzZXQgMCwgZm9yY2Ugbi13YXkqLworICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU2RzUmVnKDAsIDIsIDAsICZyZWdfZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICByZWdfZGF0YSAmPSAweEZGRkZGQ0ZGOworICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU2RzUmVnKDAsMiwwLCByZWdfZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAvKiBkaXNhYmxlIG1hYzYgbW9kZV9leHQxICBtb2RlKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoMHgxZDNkLCAxMCwgJnJlZ19kYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIGlmKHJlZ19kYXRhID09IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4MTMwNSwgMHhmMCwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4M2Y3LCAxLCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4MWQxMSwgMHgxNTAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLypiaXQxMzogY2ZnX3Nkc19tb2RlX3NlbF9uZXc9MSA6RW5hYmxlIG5ldyBzZHMgbW9kZSBjb25maWcgbWV0aG9kCisgICAgICAgICAgICAgICAgICBiaXRbMTowXTpjZmdfbWFjN19maWI9IDAgICYgIGNmZ19tYWM3X3NlbF9zZ21paT0wCisgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4MWQ5NSwgMHgxZjAwLCAweDFmKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDFkOTUsIDEzLCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxZDk1LCAzLCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLyogYml0MCA6VVRQL0ZpYmVyIGF1dG8gZGV0ZWN0IGZ1bmN0aW9uIGVuYWJsZSBvciBub3QsIGNmZ19kaXNfZGV0PTE6ZGlzYWJsZQorICAgICAgICAgICAgICAgICAgIGJpdDM6Rm9yY2UgVVRQL0ZpYmVyIGF1dG8gZGV0ZWN0IGZ1bmN0aW9uIGVuYWJsZSBvciBub3QsIGNmZ19mb3JjZV9hdXRvLWRldGVjdD0xICovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4MTNlYiwgMHgxNWJiKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLyohISEhISEgY2ZnX3Nkc19mcmNfbW9kZT0xICYgIGNmZ19zZHNfbW9kZT0zJ2IxMTE6IEZpYjFHL0ZpYjEwME0gYXV0byBkZXRlY3QgKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHgxM2U3LCAweGMpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKworICAgICAgICAgICAgICAgIC8qYml0NTogY2ZnX21hYzZfZmliPTEgJiBiaXQ3OiBjZmdfbWFjNl9maWIyPTEqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDFkNDEsIDUsIDEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MWQ0MSwgNywgMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qY2ZnX21hYzZfc2VsX2hzZ21paT0wKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxZDExLCAxMSwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qY2ZnX21hYzZfc2VsX3NnbWlpPSAxKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxZDExLCA2LCAxKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLyogIGJpdFsxMjo4XTogT25seSB2YWxpZCB3aGVuIGNmZ19zZHNfbW9kZV9zZWxfbmV3PTEKKyAgICAgICAgICAgICAgICAgICAgbmV3X2NmZ19zZHNfbW9kZT0weDcgKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4MWQ5NSwgMHgxZjAwLCAweDcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKG1vZGUgPCBFWFRfU0dNSUkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MWQzZCwgMTAsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgzZjcsIDEsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAvKiBrZWVwIGRlZmF1bHQgc2V0dGluZywgZGlzYWJsZSBtYWM2IHNlbCBTZXJEZXMgbW9kZSwqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDFkMTEsIDExLCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDFkMTEsIDYsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAvKmJpdDU6IGNmZ19tYWM2X2ZpYj0wICAgICAgICYgICAgICAgIGJpdDc6IGNmZ19tYWM2X2ZpYjI9MCovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MWQ0MSwgNSwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxZDQxLCA3LCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgaWYgKG1vZGUgPCBFWFRfR01JSSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8qIHNldCBtYWM2IG1vZGUqLworICAgICAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4MTMwNSwgMHhmMCwgbW9kZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYobW9kZSA9PSBFWFRfUk1JSV9NQUMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiEhISEhISovCisgICAgICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxMzA1LCAweGYwLCA3KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZihtb2RlID09IEVYVF9STUlJX1BIWSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxMzA1LCAweGYwLCA4KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoKG1vZGUgPT0gRVhUX1RNSUlfTUFDKSB8fCAobW9kZSA9PSBFWFRfVE1JSV9QSFkpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4M2Y3LCAxLCAxKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgyID09IGlkKQorICAgICAgICB7CisKKyAgICAgICAgICAgIC8qZm9yY2UgcG9ydDcgbGlua2Rvd24qLworICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4MTM3ZCwgMHgxMDAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoMHgxZDlkLCA3LCAmcmVnX2RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICB3aGlsZShyZWdfZGF0YSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdCgweDFkOWQsIDcsICZyZWdfZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG1vZGUgPT0gRVhUX1NHTUlJKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qZGlzYWJsZSBtYWM3IHNlbCBleHQyIHhNSUkgbW9kZSovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDEzYzMsIDB4ZiwwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLypyZXN0b3JlIGV4dDIgYWJpbGl0eSovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4MTNjNCwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICAvKiAgZGlzYWJsZSBtYWM3ICBtb2RlX2V4dDIgICovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4M2Y3LCAyLCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLypiaXQ1OiBjZmdfbWFjNl9maWI9MCAmIGJpdDc6IGNmZ19tYWM2X2ZpYjI9MCovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MWQ0MSwgNSwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxZDQxLCA3LCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICBiaXQwOmNmZ19tYWM3X3NlbF9zZ21paT0wLE1BQzcgaXMgbm90IFNHTUlJIG1vZGUKKyAgICAgICAgICAgICAgICAgICBiaXQxOmNmZ19tYWM3X2ZpYj0gMCAgKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4MWQ5NSwgMywgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qY2ZnX21hYzZfc2VsX2hzZ21paT0wKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxZDExLCAxMSwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qY2ZnX21hYzZfc2VsX3NnbWlpPSAxKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxZDExLCA2LCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLypFbmFibGUgbmV3IHNkcyBtb2RlIGNvbmZpZyBtZXRob2QsIGNmZ19zZHNfbW9kZV9zZWxfbmV3PTEqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDFkOTUsIDEzLCAxKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLyogIGJpdFsxMjo4XTogT25seSB2YWxpZCB3aGVuIGNmZ19zZHNfbW9kZV9zZWxfbmV3PTEKKyAgICAgICAgICAgICAgICAgICAgbmV3X2NmZ19zZHNfbW9kZT0weDFGIChyZXNldCBtb2RlKSAqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxZDk1LCAweDFmMDAsIDB4MWYpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAvKmNmZ19tYWM3X3NlbF9zZ21paT0gMSovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MWQ5NSwgMCwgMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qICBiaXRbMTI6OF06IE9ubHkgdmFsaWQgd2hlbiBjZmdfc2RzX21vZGVfc2VsX25ldz0xCisgICAgICAgICAgICAgICAgICAgIG5ld19jZmdfc2RzX21vZGU9MHgyIChTR01JSSBtb2RlKSovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDFkOTUsIDB4MWYwMCwgMHgyKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLypzZWxlY3QgTUFDIGxpbmsgc291cmNlIHdoZW4gcG9ydDYvNyBiZSBzZXQgc2dtaWkgbW9kZSCjqGNmZ19zZ21paV9saW5ro6kqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDFkOTUsIDIsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtb2RlID09IEVYVF8xMDAwWCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiAgZGlzYWJsZSBtYWM3IE1JSS9UTU0vUk1JSS9HTUlJL1JHTUlJIG1vZGUsIG1vZGVfZXh0MiA9IGRpc2FibGUgKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4MTNjMywgMHhmLCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLypyZXN0b3JlIGV4dDIgYWJpbGl0eSovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4MTNjNCwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qIDAgMiAwICBiaXQgOH45ICBzZXQgMCwgZm9yY2Ugbi13YXkqLworICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU2RzUmVnKDAsIDIsIDAsICZyZWdfZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICByZWdfZGF0YSAmPSAweEZGRkZGQ0ZGOworICAgICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU2RzUmVnKDAsMiwwLCByZWdfZGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAvKnJlc3RvcmUgZXh0MiBhYmlsaXR5Ki8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgzZjcsIDIsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAvKiAga2VlcCBkZWZhdWx0IHNldHRpbmcsIGRpc2FibGUgbWFjNiBzZWwgc2VyZGVzKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHgxZDExLCAweDE1MDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAvKkVuYWJsZSBuZXcgc2RzIG1vZGUgY29uZmlnIG1ldGhvZCwgY2ZnX3Nkc19tb2RlX3NlbF9uZXc9MSovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MWQ5NSwgMTMsIDEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAvKiAgYml0WzEyOjhdOiBPbmx5IHZhbGlkIHdoZW4gY2ZnX3Nkc19tb2RlX3NlbF9uZXc9MQorICAgICAgICAgICAgICAgICAgICBuZXdfY2ZnX3Nkc19tb2RlPTB4MUYgKHJlc2V0IG1vZGUpICovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDFkOTUsIDB4MWYwMCwgMHgxZikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qYml0NTogY2ZnX21hYzZfZmliPTAgICAgICAgICAmICAgICAgICBiaXQ3OiBjZmdfbWFjNl9maWIyPTAqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDFkNDEsIDUsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MWQ0MSwgNywgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qY2ZnX21hYzdfc2VsX3NnbWlpPSAxICYgY2ZnX21hYzdfZmliPTEqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxZDk1LCAzLCAzKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLypuZXdfY2ZnX3Nkc19tb2RlPTB4NCAoRklCMTAwMCBtb2RlKSovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDFkOTUsIDB4MWYwMCwgMHg0KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtb2RlID09IEVYVF8xMDBGWCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiAgZGlzYWJsZSBtYWM3IE1JSS9UTU0vUk1JSS9HTUlJL1JHTUlJIG1vZGUsIG1vZGVfZXh0MiA9IGRpc2FibGUgICovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDEzYzMsIDB4ZiwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qcmVzdG9yZSBleHQyIGFiaWxpdHkqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDEzYzQsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAvKiAwIDIgMCAgYml0IDh+OSAgc2V0IDAsIGZvcmNlIG4td2F5Ki8KKyAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1Nkc1JlZygwLCAyLCAwLCAmcmVnX2RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgcmVnX2RhdGEgJj0gMHhGRkZGRkNGRjsKKyAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1Nkc1JlZygwLDIsMCwgcmVnX2RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLypyZXN0b3JlIGV4dDIgYWJpbGl0eSovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4M2Y3LCAyLCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLyoga2VlcCBkZWZhdWx0IHNldHRpbmcsIGRpc2FibGUgbWFjNiBzZWwgc2VyZGVzKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHgxZDExLCAweDE1MDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAvKkVuYWJsZSBuZXcgc2RzIG1vZGUgY29uZmlnIG1ldGhvZCwgY2ZnX3Nkc19tb2RlX3NlbF9uZXc9MSovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MWQ5NSwgMTMsIDEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAvKiAgYml0WzEyOjhdOiBPbmx5IHZhbGlkIHdoZW4gY2ZnX3Nkc19tb2RlX3NlbF9uZXc9MQorICAgICAgICAgICAgICAgICAgICBuZXdfY2ZnX3Nkc19tb2RlPTB4MUYgKHJlc2V0IG1vZGUpICovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDFkOTUsIDB4MWYwMCwgMHgxZikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qYml0NTogY2ZnX21hYzZfZmliPTAgICAgICAgJiAgICAgICBiaXQ3OiBjZmdfbWFjNl9maWIyPTAqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDFkNDEsIDUsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MWQ0MSwgNywgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qY2ZnX21hYzdfc2VsX3NnbWlpPSAxICYgY2ZnX21hYzdfZmliPTEqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxZDk1LCAzLCAzKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLyogIGJpdFsxMjo4XTogT25seSB2YWxpZCB3aGVuIGNmZ19zZHNfbW9kZV9zZWxfbmV3PTEKKyAgICAgICAgICAgICAgICAgICAgbmV3X2NmZ19zZHNfbW9kZT0weDUgICovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDFkOTUsIDB4MWYwMCwgMHg1KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobW9kZSA9PSBFWFRfMTAwMFhfMTAwRlgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogIGRpc2FibGUgbWFjNyBNSUkvVE1NL1JNSUkvR01JSS9SR01JSSBtb2RlLCBtb2RlX2V4dDIgPSBkaXNhYmxlICAqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxM2MzLCAweGYsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAvKnJlc3RvcmUgZXh0MiBhYmlsaXR5Ki8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHgxM2M0LCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLyogMCAyIDAgIGJpdCA4fjkgIHNldCAwLCBmb3JjZSBuLXdheSovCisgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTZHNSZWcoMCwgMiwgMCwgJnJlZ19kYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIHJlZ19kYXRhICY9IDB4RkZGRkZDRkY7CisgICAgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTZHNSZWcoMCwyLDAsIHJlZ19kYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qcmVzdG9yZSBleHQyIGFiaWxpdHkqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDNmNywgMiwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qIGtlZXAgZGVmYXVsdCBzZXR0aW5nLCBkaXNhYmxlIG1hYzYgc2VsIHNlcmRlcyovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4MWQxMSwgMHgxNTAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLypFbmFibGUgbmV3IHNkcyBtb2RlIGNvbmZpZyBtZXRob2QsIGNmZ19zZHNfbW9kZV9zZWxfbmV3PTEqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDFkOTUsIDEzLCAxKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLyogIGJpdFsxMjo4XTogT25seSB2YWxpZCB3aGVuIGNmZ19zZHNfbW9kZV9zZWxfbmV3PTEKKyAgICAgICAgICAgICAgICAgICAgbmV3X2NmZ19zZHNfbW9kZT0weDFGIChyZXNldCBtb2RlKSAqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxZDk1LCAweDFmMDAsIDB4MWYpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAvKmJpdDU6IGNmZ19tYWM2X2ZpYj0wICAgICYgICAgYml0NzogY2ZnX21hYzZfZmliMj0wKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxZDQxLCA1LCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDFkNDEsIDcsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAvKmNmZ19tYWM3X3NlbF9zZ21paT0gMSAmIGNmZ19tYWM3X2ZpYj0xKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4MWQ5NSwgMywgMykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qICBiaXRbMTI6OF06IE9ubHkgdmFsaWQgd2hlbiBjZmdfc2RzX21vZGVfc2VsX25ldz0xCisgICAgICAgICAgICAgICAgICAgIG5ld19jZmdfc2RzX21vZGU9MHg3ICAqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxZDk1LCAweDFmMDAsIDB4NykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1vZGUgPCBFWFRfU0dNSUkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MWQzZCwgMTAsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgzZjcsIDIsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAvKiBrZWVwIGRlZmF1bHQgc2V0dGluZywgZGlzYWJsZSBtYWM3IHNlbCBTZXJEZXMgbW9kZSovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4MWQ5NSwgMHgxZjAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgLypjZmdfbWFjN19zZWxfc2dtaWk9IDAgJiBjZmdfbWFjN19maWI9MCovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDFkOTUsIDMsIDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAvKiBzZXQgcG9ydDcgbW9kZSovCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDEzYzMsIDB4ZiwgbW9kZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIGlmICgobW9kZSA9PSBFWFRfVE1JSV9NQUMpIHx8IChtb2RlID09IEVYVF9UTUlJX1BIWSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgzZjcsIDIsIDEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoKG1vZGUgPCBFWFRfRU5EKSAmJiAobW9kZSA+IEVYVF8xMDBGWCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cygweDEzQzMsIDB4ZiwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDNmNywgMiwgMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIC8qY2ZnX21hYzdfc2VsX3NnbWlpPSAwICYgY2ZnX21hYzdfZmliPTAqLworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxZDk1LCAzLCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MWQzZCwgMTAsIDEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoMHgxZDExLCAxMSwgJnJlZ19kYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIGlmKHJlZ19kYXRhID09IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxZDExLCA2LCAxKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvKiBzZXQgcG9ydDcgbW9kZSovCisgICAgICAgICAgICAgICAgaWYgKG1vZGUgPCBFWFRfUk1JSV9NQUNfMikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoMHgxMzA1LCAweGYwLCAobW9kZS0xMykpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKDB4MTMwNSwgMHhmMCwgKG1vZGUtMTIpKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoKG1vZGUgPT0gRVhUX1RNSUlfTUFDXzIpIHx8IChtb2RlID09IEVYVF9UTUlJX1BIWV8yKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDNmNywgMiwgMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgIH0KKworICAgIH0KKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1BvcnRFeHRNb2RlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGV4dGVybmFsIGludGVyZmFjZSBtb2RlIGNvbmZpZ3VyYXRpb24KKyAqIElucHV0OgorICogICAgICBpZCAgICAgIC0gZXh0ZXJuYWwgaW50ZXJmYWNlIGlkICgwfjEpCisgKiAgICAgIHBNb2RlICAgLSBleHRlcm5hbCBpbnRlcmZhY2UgbW9kZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgLSBpbnB1dCBwYXJhbWV0ZXIgb3V0IG9mIHJhbmdlCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNQb3J0RXh0TW9kZShydGtfdWludDMyIGlkLCBydGtfdWludDMyICpwTW9kZSkKK3sKKyAgICByZXRfdCAgIHJldFZhbDsKKyAgICBydGtfdWludDMyIHJlZ0RhdGEsIHJlZ1ZhbHVlLCB0eXBlOworCisgICAgaWYoaWQgPj0gUlRMODM2N0NfRVhUTk8pCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworICAgIC8qY2ZnX21hZ2ljX2lkICAmICBnZXQgY2hpcF9pZCovCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHgxM0MyLCAweDAyNDkpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZygweDEzMDAsICZyZWdWYWx1ZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4MTNDMiwgMHgwMDAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgdHlwZSA9IDA7CisKKyAgICBzd2l0Y2ggKHJlZ1ZhbHVlKQorICAgIHsKKyAgICAgICAgY2FzZSAweDAyNzY6CisgICAgICAgIGNhc2UgMHgwNTk3OgorICAgICAgICBjYXNlIDB4NjM2NzoKKyAgICAgICAgICAgIHR5cGUgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgwNjUyOgorICAgICAgICBjYXNlIDB4NjM2ODoKKyAgICAgICAgICAgIHR5cGUgPSAyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgwODAxOgorICAgICAgICBjYXNlIDB4NjUxMToKKyAgICAgICAgICAgIHR5cGUgPSAzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKKyAgICB9CisKKworICAgIGlmICgxID09IHR5cGUpCisgICAgeworCisgICAgICAgIGlmICgxID09IGlkKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1NEU19NSVNDLCBSVEw4MzY3Q19DRkdfTUFDOF9TRUxfU0dNSUlfT0ZGU0VULCAmcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZigxID09IHJlZ0RhdGEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKnBNb2RlID0gRVhUX1NHTUlJOworICAgICAgICAgICAgICAgIHJldHVybiBSVF9FUlJfT0s7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmKCAocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfU0RTX01JU0MsIFJUTDgzNjdDX0NGR19NQUM4X1NFTF9IU0dNSUlfT0ZGU0VULCAmcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZigxID09IHJlZ0RhdGEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKnBNb2RlID0gRVhUX0hTR01JSTsKKyAgICAgICAgICAgICAgICByZXR1cm4gUlRfRVJSX09LOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYoMCA9PSBpZCB8fCAxID09IGlkKQorICAgICAgICAgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19ESUdJVEFMX0lOVEVSRkFDRV9TRUxFQ1QsIFJUTDgzNjdDX1NFTEVDVF9HTUlJXzBfTUFTSyA8PCAoaWQgKiBSVEw4MzY3Q19TRUxFQ1RfR01JSV8xX09GRlNFVCksIHBNb2RlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX0RJR0lUQUxfSU5URVJGQUNFX1NFTEVDVF8xLCBSVEw4MzY3Q19TRUxFQ1RfR01JSV8yX01BU0ssIHBNb2RlKTsKKworICAgIH0KKyAgICBlbHNlIGlmICgyID09IHR5cGUpCisgICAgeworICAgICAgICBpZiAoMSA9PSBpZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKDB4MWQ5MiwgJnJlZ0RhdGEpKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGlmIChyZWdEYXRhICYgMHg0MDAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwTW9kZSA9IEVYVF9TR01JSTsKKyAgICAgICAgICAgICAgICByZXR1cm4gUlRfRVJSX09LOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBlbHNlIGlmICgoKHJlZ0RhdGEgPj4gOCkgJiAweDFmKSA9PSA0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwTW9kZSA9IEVYVF8xMDAwWDsKKyAgICAgICAgICAgICAgICByZXR1cm4gUlRfRVJSX09LOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoKChyZWdEYXRhID4+IDgpICYgMHgxZikgPT0gNSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqcE1vZGUgPSBFWFRfMTAwRlg7CisgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9PSzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCgocmVnRGF0YSA+PiA4KSAmIDB4MWYpID09IDcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKnBNb2RlID0gRVhUXzEwMDBYXzEwMEZYOworICAgICAgICAgICAgICAgIHJldHVybiBSVF9FUlJfT0s7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0cygweDEzMDUsIDB4ZjAsIHBNb2RlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgyID09IGlkKQorICAgICAgICB7CisjaWYgMAorICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0KDB4MWQ5MiwgNiwgJnJlZ0RhdGEpKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGlmIChyZWdEYXRhID09IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKnBNb2RlID0gRVhUX1NHTUlJOworICAgICAgICAgICAgICAgIHJldHVybiBSVF9FUlJfT0s7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdCgweDFkOTIsIDcsICZyZWdEYXRhKSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZiAocmVnRGF0YSA9PSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwTW9kZSA9IEVYVF9IU0dNSUk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9PSzsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKDB4MWQ5MiwgJnJlZ0RhdGEpKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGlmIChyZWdEYXRhICYgMHg0MCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqcE1vZGUgPSBFWFRfU0dNSUk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9PSzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHJlZ0RhdGEgJiAweDgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwTW9kZSA9IEVYVF9IU0dNSUk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9PSzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKChyZWdEYXRhICYgMHgxZikgPT0gNCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqcE1vZGUgPSBFWFRfMTAwMFg7CisgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9PSzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKChyZWdEYXRhICYgMHgxZikgPT0gNSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqcE1vZGUgPSBFWFRfMTAwRlg7CisgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9PSzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKChyZWdEYXRhICYgMHgxZikgPT0gNykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqcE1vZGUgPSBFWFRfMTAwMFhfMTAwRlg7CisgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9PSzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKDB4MTMwNSwgMHhmLCBwTW9kZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZigzID09IHR5cGUpCisgICAgeworICAgICAgICBpZiAoMSA9PSBpZCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogU0RTX0NGR19ORVcgKi8KKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZygweDFkOTUsICZyZWdEYXRhKSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoMHgxZDQxLCAmcmVnVmFsdWUpKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIC8qIGJpdDU6IGNmZ19tYWM2X2ZpYj0xICAmJiAgYml0NzogY2ZnX21hYzZfZmliMiA9MSAqLworICAgICAgICAgICAgaWYoKHJlZ1ZhbHVlICYgMHhhMCkgID09IDB4YTAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIG5ld19jZmdfc2RzX21vZGUgKi8KKyAgICAgICAgICAgICAgICByZWdEYXRhID0gcmVnRGF0YSA+PiA4OworICAgICAgICAgICAgICAgIGlmKChyZWdEYXRhICYgMHgxZikgPT0gNCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICpwTW9kZSA9IEVYVF8xMDAwWDsKKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSVF9FUlJfT0s7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYoKHJlZ0RhdGEgJiAweDFmKSA9PSA1KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKnBNb2RlID0gRVhUXzEwMEZYOworICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZigocmVnRGF0YSAmIDB4MWYpID09IDcpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAqcE1vZGUgPSBFWFRfMTAwMFhfMTAwRlg7CisgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUlRfRVJSX09LOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgfQorCisKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZygweDFkMTEsICZyZWdEYXRhKSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAvKiBjaGVjayBjZmdfbWFjNl9zZWxfc2dtaWkgKi8KKyAgICAgICAgICAgIGlmKChyZWdEYXRhID4+IDYpICYgMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqcE1vZGUgPSBFWFRfU0dNSUk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9PSzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoKHJlZ0RhdGEgPj4gMTEpICYgMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqcE1vZGUgPSBFWFRfSFNHTUlJOworICAgICAgICAgICAgICAgIHJldHVybiBSVF9FUlJfT0s7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogY2hlY2sgcG9ydDYgTUFDIG1vZGUgKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKDB4MTMwNSwgMHhmMCwgJnJlZ0RhdGEpKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgaWYocmVnRGF0YSA8IDYpCisgICAgICAgICAgICAgICAgICAgICpwTW9kZSA9IHJlZ0RhdGE7CisgICAgICAgICAgICAgICAgZWxzZSBpZihyZWdEYXRhID09IDYpCisgICAgICAgICAgICAgICAgICAgICpwTW9kZSA9IEVYVF9STUlJX01BQzsKKyAgICAgICAgICAgICAgICBlbHNlIGlmKHJlZ0RhdGEgPT0gNykKKyAgICAgICAgICAgICAgICAgICAgKnBNb2RlID0gRVhUX1JNSUlfUEhZOworCisgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9PSzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgyID09IGlkKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoMHgxZDk1LCAmcmVnRGF0YSkpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgLyogYml0MDogY2ZnX21hYzdfc2VsX3NnbWlpCisgICAgICAgICAgICAgICBiaXQxOiBjZmdfbWFjN19maWIKKyAgICAgICAgICAgICAgIGJpdFsxMjo4XTogbmV3X2NmZ19zZHNfbW9kZSovCisgICAgICAgICAgICBpZigoKHJlZ0RhdGEgJiAweDMpID09IDMpICYmICgoKHJlZ0RhdGEgPj4gOCkgJiAweDFmKSA9PSAweDQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwTW9kZSA9IEVYVF8xMDAwWDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9PSzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCgocmVnRGF0YSAmIDB4MykgPT0gMykgJiYgKCgocmVnRGF0YSA+PiA4KSAmIDB4MWYpID09IDB4NSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKnBNb2RlID0gRVhUXzEwMEZYOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gUlRfRVJSX09LOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoKChyZWdEYXRhICYgMHgzKSA9PSAzKSAmJiAoKChyZWdEYXRhID4+IDgpICYgMHgxZikgPT0gMHg3KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqcE1vZGUgPSBFWFRfMTAwMFhfMTAwRlg7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBSVF9FUlJfT0s7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKHJlZ0RhdGEgJiAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwTW9kZSA9IEVYVF9TR01JSTsKKyAgICAgICAgICAgICAgICByZXR1cm4gUlRfRVJSX09LOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgLyogY2hlY2sgcG9ydDcgTUFDIG1vZGUgKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKDB4MTNjMywgMHhmLCAmcmVnRGF0YSkpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAqcE1vZGUgPSByZWdEYXRhOworCisgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9PSzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNzBfc2V0QXNpY1BvcnRFbmFibGVBbGwKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgQUxMIHBvcnRzIGVuYWJsZS4KKyAqIElucHV0OgorICogICAgICBlbmFibGUgLSBlbmFibGUgYWxsIHBvcnRzLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNQb3J0RW5hYmxlQWxsKHJ0a191aW50MzIgZW5hYmxlKQoreworICAgIGlmKGVuYWJsZSA+PSAyKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1BIWV9BRCwgUlRMODM2N0NfUEROUEhZX09GRlNFVCwgIWVuYWJsZSk7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNQb3J0RW5hYmxlQWxsCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IEFMTCBwb3J0cyBlbmFibGUuCisgKiBJbnB1dDoKKyAqICAgICAgZW5hYmxlIC0gZW5hYmxlIGFsbCBwb3J0cy4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljUG9ydEVuYWJsZUFsbChydGtfdWludDMyICpwRW5hYmxlKQoreworICAgIHJldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHJlZ0RhdGE7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19QSFlfQUQsIFJUTDgzNjdDX1BETlBIWV9PRkZTRVQsICZyZWdEYXRhKTsKKyAgICBpZihyZXRWYWwgIT0gIFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmIChyZWdEYXRhPT0wKQorICAgICAgICAqcEVuYWJsZSA9IDE7CisgICAgZWxzZQorICAgICAgICAqcEVuYWJsZSA9IDA7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1BvcnRTbWFsbElwZworICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBzbWFsbCBpcGcgZWdyZXNzIG1vZGUKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgZW5hYmxlICAtIDA6IG5vcm1hbCwgMTogc21hbGwKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljUG9ydFNtYWxsSXBnKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBlbmFibGUpCit7CisgICAgaWYocG9ydCA+PSBSVEw4MzY3Q19QT1JUTk8pCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1BPUlRfU01BTExfSVBHX1JFRyhwb3J0KSwgUlRMODM2N0NfUE9SVDBfTUlTQ19DRkdfU01BTExfVEFHX0lQR19PRkZTRVQsIGVuYWJsZSk7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNQb3J0U21hbGxJcGcKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgc21hbGwgaXBnIGVncmVzcyBtb2RlCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjcpCisgKiAgICAgIHBFbmFibGUgICAgIC0gMDogbm9ybWFsLCAxOiBzbWFsbAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNQb3J0U21hbGxJcGcocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyKiBwRW5hYmxlKQoreworICAgIGlmKHBvcnQgPj0gUlRMODM2N0NfUE9SVE5PKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19QT1JUX1NNQUxMX0lQR19SRUcocG9ydCksIFJUTDgzNjdDX1BPUlQwX01JU0NfQ0ZHX1NNQUxMX1RBR19JUEdfT0ZGU0VULCBwRW5hYmxlKTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1BvcnRMb29wYmFjaworICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBNQUMgbG9vcGJhY2sKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgZW5hYmxlICAtIDA6IERpc2FibGUsIDE6IGVuYWJsZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNQb3J0TG9vcGJhY2socnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGVuYWJsZSkKK3sKKyAgICBpZihwb3J0ID49IFJUTDgzNjdDX1BPUlROTykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUE9SVF9NSVNDX0NGR19SRUcocG9ydCksIFJUTDgzNjdDX1BPUlQwX01JU0NfQ0ZHX01BQ19MT09QQkFDS19PRkZTRVQsIGVuYWJsZSk7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNQb3J0TG9vcGJhY2sKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgTUFDIGxvb3BiYWNrCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjcpCisgKiBPdXRwdXQ6CisgKiAgICAgIHBFbmFibGUgLSAwOiBEaXNhYmxlLCAxOiBlbmFibGUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BvcnRMb29wYmFjayhydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgKnBFbmFibGUpCit7CisgICAgaWYocG9ydCA+PSBSVEw4MzY3Q19QT1JUTk8pCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1BPUlRfTUlTQ19DRkdfUkVHKHBvcnQpLCBSVEw4MzY3Q19QT1JUMF9NSVNDX0NGR19NQUNfTE9PUEJBQ0tfT0ZGU0VULCBwRW5hYmxlKTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1BvcnRSVENURW5hYmxlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IFJUQ1QgRW5hYmxlIGVjaG8gcmVzcG9uc2UgbW9kZQorICogSW5wdXQ6CisgKiAgICAgIHBvcnRtYXNrICAgIC0gUG9ydCBtYXNrIG9mIFJUQ1QgZW5hYmxlZCAoMC00KQorICogT3V0cHV0OgorICogICAgICBOb25lLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9NQVNLICAgIC0gSW52YWxpZCBwb3J0IG1hc2sKKyAqIE5vdGU6CisgKiAgICAgIFJUQ1QgdGVzdCB0YWtlcyA0Ljggc2Vjb25kcyBhdCBtb3N0LgorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljUG9ydFJUQ1RFbmFibGUocnRrX3VpbnQzMiBwb3J0bWFzaykKK3sKKyAgICByZXRfdCAgICAgICByZXRWYWw7CisgICAgcnRrX3VpbnQzMiAgcmVnRGF0YTsKKyAgICBydGtfdWludDMyICBwb3J0OworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHgxM0MyLCAweDAyNDkpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZygweDEzMDAsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYoIChyZWdEYXRhID09IDB4MDI3NikgfHwgKHJlZ0RhdGEgPT0gMHgwNTk3KSApCisgICAgICAgIHJldHVybiBSVF9FUlJfQ0hJUF9OT1RfU1VQUE9SVEVEOworCisgICAgZm9yKHBvcnQgPSAwOyBwb3J0IDw9IDEwIDsgcG9ydCsrKQorICAgIHsKKyAgICAgICAgaWYocG9ydG1hc2sgJiAoMHgwMDAxIDw8IHBvcnQpKQorICAgICAgICB7CisgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQSFlPQ1BSZWcocG9ydCwgMHhhNDIyLCAmcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgIHJlZ0RhdGEgJj0gMHg3RkZGOworICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUEhZT0NQUmVnKHBvcnQsIDB4YTQyMiwgcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgIHJlZ0RhdGEgfD0gMHgwMEYyOy8qUlRDVCBzZXQgdG8gIGVjaG8gcmVzcG9uc2UgbW9kZSovCisgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQSFlPQ1BSZWcocG9ydCwgMHhhNDIyLCByZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgcmVnRGF0YSB8PSAweDAwMDE7CisgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQSFlPQ1BSZWcocG9ydCwgMHhhNDIyLCByZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1BvcnRSVENURGlzYWJsZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBSVENUIERpc2FibGUKKyAqIElucHV0OgorICogICAgICBwb3J0bWFzayAgICAtIFBvcnQgbWFzayBvZiBSVENUIGVuYWJsZWQgKDAtNCkKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfTUFTSyAgICAtIEludmFsaWQgcG9ydCBtYXNrCisgKiBOb3RlOgorICogICAgICBSVENUIHRlc3QgdGFrZXMgNC44IHNlY29uZHMgYXQgbW9zdC4KKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1BvcnRSVENURGlzYWJsZShydGtfdWludDMyIHBvcnRtYXNrKQoreworICAgIHJldF90ICAgICAgIHJldFZhbDsKKyAgICBydGtfdWludDMyICByZWdEYXRhOworICAgIHJ0a191aW50MzIgIHBvcnQ7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDEzQzIsIDB4MDI0OSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKDB4MTMwMCwgJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiggKHJlZ0RhdGEgPT0gMHgwMjc2KSB8fCAocmVnRGF0YSA9PSAweDA1OTcpICkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9DSElQX05PVF9TVVBQT1JURUQ7CisKKyAgICBmb3IocG9ydCA9IDA7IHBvcnQgPD0gMTAgOyBwb3J0KyspCisgICAgeworICAgICAgICBpZihwb3J0bWFzayAmICgweDAwMDEgPDwgcG9ydCkpCisgICAgICAgIHsKKyAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BIWU9DUFJlZyhwb3J0LCAweGE0MjIsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgcmVnRGF0YSAmPSAweDdGRkY7CisgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQSFlPQ1BSZWcocG9ydCwgMHhhNDIyLCByZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgcmVnRGF0YSB8PSAweDAwRjA7CisgICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQSFlPQ1BSZWcocG9ydCwgMHhhNDIyLCByZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgcmVnRGF0YSAmPSB+MHgwMDAxOworICAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUEhZT0NQUmVnKHBvcnQsIDB4YTQyMiwgcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1BvcnRSVENUUmVzdWx0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFJUQ1QgcmVzdWx0CisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIFBvcnQgSUQgb2YgUlRDVCByZXN1bHQKKyAqIE91dHB1dDoKKyAqICAgICAgcFJlc3VsdCAtIFRoZSByZXN1bHQgb2YgcG9ydCBJRAorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfTUFTSyAgICAgICAgICAgIC0gSW52YWxpZCBwb3J0IG1hc2sKKyAqICAgICAgUlRfRVJSX1BIWV9SVENUX05PVF9GSU5JU0ggIC0gUlRDVCB0ZXN0IGRvZXNuJ3QgZmluaXNoLgorICogTm90ZToKKyAqICAgICAgUlRDVCB0ZXN0IHRha2VzIDQuOCBzZWNvbmRzIGF0IG1vc3QuCisgKiAgICAgIElmIHRoaXMgQVBJIHJldHVybnMgUlRfRVJSX1BIWV9SVENUX05PVF9GSU5JU0gsCisgKiAgICAgIHVzZXJzIHNob3VsZCB3YWl0IGEgd2hvbGUgdGhlbiByZWFkIGl0IGFnYWluLgorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljUG9ydFJUQ1RSZXN1bHQocnRrX3VpbnQzMiBwb3J0LCBydGw4MzY3Y19wb3J0X3J0Y3RfcmVzdWx0X3QgKnBSZXN1bHQpCit7CisgICAgcmV0X3QgICAgICAgcmV0VmFsOworICAgIHJ0a191aW50MzIgIHJlZ0RhdGEsIGZpbmlzaCA9IDE7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDEzQzIsIDB4MDI0OSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKDB4MTMwMCwgJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiggKHJlZ0RhdGEgPT0gMHg2MzY3KSApCisgICAgeworICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BIWU9DUFJlZyhwb3J0LCAweGE0MjIsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZigocmVnRGF0YSAmIDB4ODAwMCkgPT0gMHg4MDAwKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBDaGFubmVsIEEgKi8KKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUEhZT0NQUmVnKHBvcnQsIDB4YTQzNiwgMHg4MDJhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUEhZT0NQUmVnKHBvcnQsIDB4YTQzOCwgJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgcFJlc3VsdC0+Y2hhbm5lbEFPcGVuICAgICAgID0gKHJlZ0RhdGEgPT0gMHgwMDQ4KSA/IDEgOiAwOworICAgICAgICAgICAgcFJlc3VsdC0+Y2hhbm5lbEFTaG9ydCAgICAgID0gKHJlZ0RhdGEgPT0gMHgwMDUwKSA/IDEgOiAwOworICAgICAgICAgICAgcFJlc3VsdC0+Y2hhbm5lbEFNaXNtYXRjaCAgID0gKChyZWdEYXRhID09IDB4MDA0MikgfHwgKHJlZ0RhdGEgPT0gMHgwMDQ0KSkgPyAxIDogMDsKKyAgICAgICAgICAgIHBSZXN1bHQtPmNoYW5uZWxBTGluZWRyaXZlciA9IChyZWdEYXRhID09IDB4MDA0MSkgPyAxIDogMDsKKworICAgICAgICAgICAgLyogQ2hhbm5lbCBCICovCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BIWU9DUFJlZyhwb3J0LCAweGE0MzYsIDB4ODAyZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BIWU9DUFJlZyhwb3J0LCAweGE0MzgsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIHBSZXN1bHQtPmNoYW5uZWxCT3BlbiAgICAgICA9IChyZWdEYXRhID09IDB4MDA0OCkgPyAxIDogMDsKKyAgICAgICAgICAgIHBSZXN1bHQtPmNoYW5uZWxCU2hvcnQgICAgICA9IChyZWdEYXRhID09IDB4MDA1MCkgPyAxIDogMDsKKyAgICAgICAgICAgIHBSZXN1bHQtPmNoYW5uZWxCTWlzbWF0Y2ggICA9ICgocmVnRGF0YSA9PSAweDAwNDIpIHx8IChyZWdEYXRhID09IDB4MDA0NCkpID8gMSA6IDA7CisgICAgICAgICAgICBwUmVzdWx0LT5jaGFubmVsQkxpbmVkcml2ZXIgPSAocmVnRGF0YSA9PSAweDAwNDEpID8gMSA6IDA7CisKKyAgICAgICAgICAgIC8qIENoYW5uZWwgQyAqLworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQSFlPQ1BSZWcocG9ydCwgMHhhNDM2LCAweDgwMzIpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQSFlPQ1BSZWcocG9ydCwgMHhhNDM4LCAmcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBwUmVzdWx0LT5jaGFubmVsQ09wZW4gICAgICAgPSAocmVnRGF0YSA9PSAweDAwNDgpID8gMSA6IDA7CisgICAgICAgICAgICBwUmVzdWx0LT5jaGFubmVsQ1Nob3J0ICAgICAgPSAocmVnRGF0YSA9PSAweDAwNTApID8gMSA6IDA7CisgICAgICAgICAgICBwUmVzdWx0LT5jaGFubmVsQ01pc21hdGNoICAgPSAoKHJlZ0RhdGEgPT0gMHgwMDQyKSB8fCAocmVnRGF0YSA9PSAweDAwNDQpKSA/IDEgOiAwOworICAgICAgICAgICAgcFJlc3VsdC0+Y2hhbm5lbENMaW5lZHJpdmVyID0gKHJlZ0RhdGEgPT0gMHgwMDQxKSA/IDEgOiAwOworCisgICAgICAgICAgICAvKiBDaGFubmVsIEQgKi8KKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUEhZT0NQUmVnKHBvcnQsIDB4YTQzNiwgMHg4MDM2KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUEhZT0NQUmVnKHBvcnQsIDB4YTQzOCwgJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgcFJlc3VsdC0+Y2hhbm5lbERPcGVuICAgICAgID0gKHJlZ0RhdGEgPT0gMHgwMDQ4KSA/IDEgOiAwOworICAgICAgICAgICAgcFJlc3VsdC0+Y2hhbm5lbERTaG9ydCAgICAgID0gKHJlZ0RhdGEgPT0gMHgwMDUwKSA/IDEgOiAwOworICAgICAgICAgICAgcFJlc3VsdC0+Y2hhbm5lbERNaXNtYXRjaCAgID0gKChyZWdEYXRhID09IDB4MDA0MikgfHwgKHJlZ0RhdGEgPT0gMHgwMDQ0KSkgPyAxIDogMDsKKyAgICAgICAgICAgIHBSZXN1bHQtPmNoYW5uZWxETGluZWRyaXZlciA9IChyZWdEYXRhID09IDB4MDA0MSkgPyAxIDogMDsKKworICAgICAgICAgICAgLyogQ2hhbm5lbCBBIExlbmd0aCAqLworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQSFlPQ1BSZWcocG9ydCwgMHhhNDM2LCAweDgwMmMpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQSFlPQ1BSZWcocG9ydCwgMHhhNDM4LCAmcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBwUmVzdWx0LT5jaGFubmVsQUxlbiA9IChyZWdEYXRhIC8gMik7CisKKyAgICAgICAgICAgIC8qIENoYW5uZWwgQiBMZW5ndGggKi8KKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUEhZT0NQUmVnKHBvcnQsIDB4YTQzNiwgMHg4MDMwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUEhZT0NQUmVnKHBvcnQsIDB4YTQzOCwgJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgcFJlc3VsdC0+Y2hhbm5lbEJMZW4gPSAocmVnRGF0YSAvIDIpOworCisgICAgICAgICAgICAvKiBDaGFubmVsIEMgTGVuZ3RoICovCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BIWU9DUFJlZyhwb3J0LCAweGE0MzYsIDB4ODAzNCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BIWU9DUFJlZyhwb3J0LCAweGE0MzgsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIHBSZXN1bHQtPmNoYW5uZWxDTGVuID0gKHJlZ0RhdGEgLyAyKTsKKworICAgICAgICAgICAgLyogQ2hhbm5lbCBEIExlbmd0aCAqLworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQSFlPQ1BSZWcocG9ydCwgMHhhNDM2LCAweDgwMzgpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQSFlPQ1BSZWcocG9ydCwgMHhhNDM4LCAmcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBwUmVzdWx0LT5jaGFubmVsRExlbiA9IChyZWdEYXRhIC8gMik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZmluaXNoID0gMDsKKyAgICB9CisgICAgZWxzZSBpZihyZWdEYXRhID09IDB4NjM2OCkKKyAgICB7CisgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUEhZT0NQUmVnKHBvcnQsIDB4YTQyMiwgJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIGlmKChyZWdEYXRhICYgMHg4MDAwKSA9PSAweDgwMDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENoYW5uZWwgQSAqLworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQSFlPQ1BSZWcocG9ydCwgMHhhNDM2LCAweDgwMmIpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQSFlPQ1BSZWcocG9ydCwgMHhhNDM4LCAmcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBwUmVzdWx0LT5jaGFubmVsQU9wZW4gICAgICAgPSAocmVnRGF0YSA9PSAweDAwNDgpID8gMSA6IDA7CisgICAgICAgICAgICBwUmVzdWx0LT5jaGFubmVsQVNob3J0ICAgICAgPSAocmVnRGF0YSA9PSAweDAwNTApID8gMSA6IDA7CisgICAgICAgICAgICBwUmVzdWx0LT5jaGFubmVsQU1pc21hdGNoICAgPSAoKHJlZ0RhdGEgPT0gMHgwMDQyKSB8fCAocmVnRGF0YSA9PSAweDAwNDQpKSA/IDEgOiAwOworICAgICAgICAgICAgcFJlc3VsdC0+Y2hhbm5lbEFMaW5lZHJpdmVyID0gKHJlZ0RhdGEgPT0gMHgwMDQxKSA/IDEgOiAwOworCisgICAgICAgICAgICAvKiBDaGFubmVsIEIgKi8KKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUEhZT0NQUmVnKHBvcnQsIDB4YTQzNiwgMHg4MDJmKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUEhZT0NQUmVnKHBvcnQsIDB4YTQzOCwgJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgcFJlc3VsdC0+Y2hhbm5lbEJPcGVuICAgICAgID0gKHJlZ0RhdGEgPT0gMHgwMDQ4KSA/IDEgOiAwOworICAgICAgICAgICAgcFJlc3VsdC0+Y2hhbm5lbEJTaG9ydCAgICAgID0gKHJlZ0RhdGEgPT0gMHgwMDUwKSA/IDEgOiAwOworICAgICAgICAgICAgcFJlc3VsdC0+Y2hhbm5lbEJNaXNtYXRjaCAgID0gKChyZWdEYXRhID09IDB4MDA0MikgfHwgKHJlZ0RhdGEgPT0gMHgwMDQ0KSkgPyAxIDogMDsKKyAgICAgICAgICAgIHBSZXN1bHQtPmNoYW5uZWxCTGluZWRyaXZlciA9IChyZWdEYXRhID09IDB4MDA0MSkgPyAxIDogMDsKKworICAgICAgICAgICAgLyogQ2hhbm5lbCBDICovCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BIWU9DUFJlZyhwb3J0LCAweGE0MzYsIDB4ODAzMykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BIWU9DUFJlZyhwb3J0LCAweGE0MzgsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIHBSZXN1bHQtPmNoYW5uZWxDT3BlbiAgICAgICA9IChyZWdEYXRhID09IDB4MDA0OCkgPyAxIDogMDsKKyAgICAgICAgICAgIHBSZXN1bHQtPmNoYW5uZWxDU2hvcnQgICAgICA9IChyZWdEYXRhID09IDB4MDA1MCkgPyAxIDogMDsKKyAgICAgICAgICAgIHBSZXN1bHQtPmNoYW5uZWxDTWlzbWF0Y2ggICA9ICgocmVnRGF0YSA9PSAweDAwNDIpIHx8IChyZWdEYXRhID09IDB4MDA0NCkpID8gMSA6IDA7CisgICAgICAgICAgICBwUmVzdWx0LT5jaGFubmVsQ0xpbmVkcml2ZXIgPSAocmVnRGF0YSA9PSAweDAwNDEpID8gMSA6IDA7CisKKyAgICAgICAgICAgIC8qIENoYW5uZWwgRCAqLworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQSFlPQ1BSZWcocG9ydCwgMHhhNDM2LCAweDgwMzcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQSFlPQ1BSZWcocG9ydCwgMHhhNDM4LCAmcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBwUmVzdWx0LT5jaGFubmVsRE9wZW4gICAgICAgPSAocmVnRGF0YSA9PSAweDAwNDgpID8gMSA6IDA7CisgICAgICAgICAgICBwUmVzdWx0LT5jaGFubmVsRFNob3J0ICAgICAgPSAocmVnRGF0YSA9PSAweDAwNTApID8gMSA6IDA7CisgICAgICAgICAgICBwUmVzdWx0LT5jaGFubmVsRE1pc21hdGNoICAgPSAoKHJlZ0RhdGEgPT0gMHgwMDQyKSB8fCAocmVnRGF0YSA9PSAweDAwNDQpKSA/IDEgOiAwOworICAgICAgICAgICAgcFJlc3VsdC0+Y2hhbm5lbERMaW5lZHJpdmVyID0gKHJlZ0RhdGEgPT0gMHgwMDQxKSA/IDEgOiAwOworCisgICAgICAgICAgICAvKiBDaGFubmVsIEEgTGVuZ3RoICovCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BIWU9DUFJlZyhwb3J0LCAweGE0MzYsIDB4ODAyZCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BIWU9DUFJlZyhwb3J0LCAweGE0MzgsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIHBSZXN1bHQtPmNoYW5uZWxBTGVuID0gKHJlZ0RhdGEgLyAyKTsKKworICAgICAgICAgICAgLyogQ2hhbm5lbCBCIExlbmd0aCAqLworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQSFlPQ1BSZWcocG9ydCwgMHhhNDM2LCAweDgwMzEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQSFlPQ1BSZWcocG9ydCwgMHhhNDM4LCAmcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBwUmVzdWx0LT5jaGFubmVsQkxlbiA9IChyZWdEYXRhIC8gMik7CisKKyAgICAgICAgICAgIC8qIENoYW5uZWwgQyBMZW5ndGggKi8KKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUEhZT0NQUmVnKHBvcnQsIDB4YTQzNiwgMHg4MDM1KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUEhZT0NQUmVnKHBvcnQsIDB4YTQzOCwgJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgcFJlc3VsdC0+Y2hhbm5lbENMZW4gPSAocmVnRGF0YSAvIDIpOworCisgICAgICAgICAgICAvKiBDaGFubmVsIEQgTGVuZ3RoICovCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BIWU9DUFJlZyhwb3J0LCAweGE0MzYsIDB4ODAzOSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BIWU9DUFJlZyhwb3J0LCAweGE0MzgsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIHBSZXN1bHQtPmNoYW5uZWxETGVuID0gKHJlZ0RhdGEgLyAyKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBmaW5pc2ggPSAwOworCisgICAgfQorICAgIGVsc2UgaWYoKHJlZ0RhdGEgPT0gMHg2NTExKSB8fCAocmVnRGF0YSA9PSAweDA4MDEpKQorICAgIHsKKyAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQSFlPQ1BSZWcocG9ydCwgMHhhNDIyLCAmcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgaWYoKHJlZ0RhdGEgJiAweDgwMDApID09IDB4ODAwMCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogQ2hhbm5lbCBBICovCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BIWU9DUFJlZyhwb3J0LCAweGE0MzYsIDB4ODAyYSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BIWU9DUFJlZyhwb3J0LCAweGE0MzgsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIHBSZXN1bHQtPmNoYW5uZWxBT3BlbiAgICAgICA9IChyZWdEYXRhID09IDB4MDA0OCkgPyAxIDogMDsKKyAgICAgICAgICAgIHBSZXN1bHQtPmNoYW5uZWxBU2hvcnQgICAgICA9IChyZWdEYXRhID09IDB4MDA1MCkgPyAxIDogMDsKKyAgICAgICAgICAgIHBSZXN1bHQtPmNoYW5uZWxBTWlzbWF0Y2ggICA9ICgocmVnRGF0YSA9PSAweDAwNDIpIHx8IChyZWdEYXRhID09IDB4MDA0NCkpID8gMSA6IDA7CisgICAgICAgICAgICBwUmVzdWx0LT5jaGFubmVsQUxpbmVkcml2ZXIgPSAocmVnRGF0YSA9PSAweDAwNDEpID8gMSA6IDA7CisKKyAgICAgICAgICAgIC8qIENoYW5uZWwgQiAqLworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQSFlPQ1BSZWcocG9ydCwgMHhhNDM2LCAweDgwMmUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQSFlPQ1BSZWcocG9ydCwgMHhhNDM4LCAmcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBwUmVzdWx0LT5jaGFubmVsQk9wZW4gICAgICAgPSAocmVnRGF0YSA9PSAweDAwNDgpID8gMSA6IDA7CisgICAgICAgICAgICBwUmVzdWx0LT5jaGFubmVsQlNob3J0ICAgICAgPSAocmVnRGF0YSA9PSAweDAwNTApID8gMSA6IDA7CisgICAgICAgICAgICBwUmVzdWx0LT5jaGFubmVsQk1pc21hdGNoICAgPSAoKHJlZ0RhdGEgPT0gMHgwMDQyKSB8fCAocmVnRGF0YSA9PSAweDAwNDQpKSA/IDEgOiAwOworICAgICAgICAgICAgcFJlc3VsdC0+Y2hhbm5lbEJMaW5lZHJpdmVyID0gKHJlZ0RhdGEgPT0gMHgwMDQxKSA/IDEgOiAwOworCisgICAgICAgICAgICAvKiBDaGFubmVsIEMgKi8KKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUEhZT0NQUmVnKHBvcnQsIDB4YTQzNiwgMHg4MDMyKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUEhZT0NQUmVnKHBvcnQsIDB4YTQzOCwgJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgcFJlc3VsdC0+Y2hhbm5lbENPcGVuICAgICAgID0gKHJlZ0RhdGEgPT0gMHgwMDQ4KSA/IDEgOiAwOworICAgICAgICAgICAgcFJlc3VsdC0+Y2hhbm5lbENTaG9ydCAgICAgID0gKHJlZ0RhdGEgPT0gMHgwMDUwKSA/IDEgOiAwOworICAgICAgICAgICAgcFJlc3VsdC0+Y2hhbm5lbENNaXNtYXRjaCAgID0gKChyZWdEYXRhID09IDB4MDA0MikgfHwgKHJlZ0RhdGEgPT0gMHgwMDQ0KSkgPyAxIDogMDsKKyAgICAgICAgICAgIHBSZXN1bHQtPmNoYW5uZWxDTGluZWRyaXZlciA9IChyZWdEYXRhID09IDB4MDA0MSkgPyAxIDogMDsKKworICAgICAgICAgICAgLyogQ2hhbm5lbCBEICovCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BIWU9DUFJlZyhwb3J0LCAweGE0MzYsIDB4ODAzNikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BIWU9DUFJlZyhwb3J0LCAweGE0MzgsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIHBSZXN1bHQtPmNoYW5uZWxET3BlbiAgICAgICA9IChyZWdEYXRhID09IDB4MDA0OCkgPyAxIDogMDsKKyAgICAgICAgICAgIHBSZXN1bHQtPmNoYW5uZWxEU2hvcnQgICAgICA9IChyZWdEYXRhID09IDB4MDA1MCkgPyAxIDogMDsKKyAgICAgICAgICAgIHBSZXN1bHQtPmNoYW5uZWxETWlzbWF0Y2ggICA9ICgocmVnRGF0YSA9PSAweDAwNDIpIHx8IChyZWdEYXRhID09IDB4MDA0NCkpID8gMSA6IDA7CisgICAgICAgICAgICBwUmVzdWx0LT5jaGFubmVsRExpbmVkcml2ZXIgPSAocmVnRGF0YSA9PSAweDAwNDEpID8gMSA6IDA7CisKKyAgICAgICAgICAgIC8qIENoYW5uZWwgQSBMZW5ndGggKi8KKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUEhZT0NQUmVnKHBvcnQsIDB4YTQzNiwgMHg4MDJjKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUEhZT0NQUmVnKHBvcnQsIDB4YTQzOCwgJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgcFJlc3VsdC0+Y2hhbm5lbEFMZW4gPSAocmVnRGF0YSAvIDIpOworCisgICAgICAgICAgICAvKiBDaGFubmVsIEIgTGVuZ3RoICovCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BIWU9DUFJlZyhwb3J0LCAweGE0MzYsIDB4ODAzMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BIWU9DUFJlZyhwb3J0LCAweGE0MzgsICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIHBSZXN1bHQtPmNoYW5uZWxCTGVuID0gKHJlZ0RhdGEgLyAyKTsKKworICAgICAgICAgICAgLyogQ2hhbm5lbCBDIExlbmd0aCAqLworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQSFlPQ1BSZWcocG9ydCwgMHhhNDM2LCAweDgwMzQpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQSFlPQ1BSZWcocG9ydCwgMHhhNDM4LCAmcmVnRGF0YSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBwUmVzdWx0LT5jaGFubmVsQ0xlbiA9IChyZWdEYXRhIC8gMik7CisKKyAgICAgICAgICAgIC8qIENoYW5uZWwgRCBMZW5ndGggKi8KKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUEhZT0NQUmVnKHBvcnQsIDB4YTQzNiwgMHg4MDM4KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUEhZT0NQUmVnKHBvcnQsIDB4YTQzOCwgJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgcFJlc3VsdC0+Y2hhbm5lbERMZW4gPSAocmVnRGF0YSAvIDIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZpbmlzaCA9IDA7CisKKyAgICB9CisgICAgZWxzZQorICAgICAgICByZXR1cm4gUlRfRVJSX0NISVBfTk9UX1NVUFBPUlRFRDsKKworICAgIGlmKGZpbmlzaCA9PSAwKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BIWV9SVENUX05PVF9GSU5JU0g7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZHNSZXNldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFJlc2V0IFNlcmRlcworICogSW5wdXQ6CisgKiAgICAgIGlkICAtIEVYVCBJRAorICogT3V0cHV0OgorICogICAgICBOb25lLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUuCisgKi8KK3JldF90IHJ0bDgzNjdjX3Nkc1Jlc2V0KHJ0a191aW50MzIgaWQpCit7CisgICAgcnRrX3VpbnQzMiByZXRWYWwsIHJlZ1ZhbHVlLCBzdGF0ZSwgaSwgb3B0aW9uLCBydW5uaW5nID0gMCwgcmV0VmFsMjsKKworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4MTNDMiwgMHgwMjQ5KSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoMHgxMzAwLCAmcmVnVmFsdWUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDEzQzIsIDB4MDAwMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHN3aXRjaCAocmVnVmFsdWUpCisgICAgeworICAgICAgICBjYXNlIDB4MDI3NjoKKyAgICAgICAgY2FzZSAweDA1OTc6CisgICAgICAgIGNhc2UgMHg2MzY3OgorICAgICAgICAgICAgb3B0aW9uID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MDY1MjoKKyAgICAgICAgY2FzZSAweDYzNjg6CisgICAgICAgICAgICBvcHRpb24gPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMHgwODAxOgorICAgICAgICBjYXNlIDB4NjUxMToKKyAgICAgICAgICAgIG9wdGlvbiA9IDI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBSVF9FUlJfRkFJTEVEOworICAgIH0KKworICAgIGlmKG9wdGlvbiA9PSAwKQorICAgIHsKKyAgICAgICAgaWYgKDEgPT0gaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdCgweDEzMGMsIDUsICZydW5uaW5nKSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZihydW5uaW5nID09IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MTMwYywgNSwgMCkpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHg2NjAxLCAweDAwMDApOworCisgICAgICAgICAgICBpZihyZXRWYWwgPT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHg2NjAyLCAweDE0MDEpOworCisgICAgICAgICAgICBpZihyZXRWYWwgPT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHg2NjAwLCAweDAwQzApOworCisgICAgICAgICAgICBpZihyZXRWYWwgPT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHg2NjAxLCAweDAwMDApOworCisgICAgICAgICAgICBpZihyZXRWYWwgPT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHg2NjAyLCAweDE0MDMpOworCisgICAgICAgICAgICBpZihyZXRWYWwgPT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHg2NjAwLCAweDAwQzApOworCisgICAgICAgICAgICBpZihydW5uaW5nID09IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwyID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDEzMGMsIDUsIDEpKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsMjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKyAgICB9CisgICAgZWxzZSBpZihvcHRpb24gPT0gMSkKKyAgICB7CisgICAgICAgIGlmICgxID09IGlkKQorICAgICAgICB7CisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZygweDEzMTEsICZzdGF0ZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDEzMTEsIDB4NjYpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHgxMzExLCAweDEwNjYpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgd2hpbGUoMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZygweDFkOWQsICZyZWdWYWx1ZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICBpZigocmVnVmFsdWUgPj4gOCkgJiAxKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChpPTA7IGk8MHhmZmZmOyBpKyspOworCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDEzM2QsIDB4MikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBmb3IgKGk9MDsgaTwweGZmZmY7IGkrKyk7CisKKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4NjYwMSwgMHgwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDY2MDIsIDB4MTQwMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHg2NjAwLCAweGMxKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDY2MDEsIDB4MCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHg2NjAyLCAweDE0MDMpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4NjYwMCwgMHhjMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDEzM2QsIDB4MCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBmb3IgKGk9MDsgaTwweGZmZmY7IGkrKyk7CisKKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4MTMxMSwgc3RhdGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoMj09IGlkKQorICAgICAgICB7CisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZygweDEzYzQsICZzdGF0ZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDEzYzQsIDB4NjYpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHgxM2M0LCAweDEwNjYpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgd2hpbGUoMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZygweDFkOWQsICZyZWdWYWx1ZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICBpZigocmVnVmFsdWUgPj4gOSkgJiAxKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChpPTA7IGk8MHhmZmZmOyBpKyspOworCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDEzM2QsIDB4MikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBmb3IgKGk9MDsgaTwweGZmZmY7IGkrKyk7CisKKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4NjYwMSwgMHgwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDY2MDIsIDB4MTQwMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHg2NjAwLCAweGMwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDY2MDEsIDB4MCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHg2NjAyLCAweDE0MDMpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4NjYwMCwgMHhjMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDEzM2QsIDB4MCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBmb3IgKGk9MDsgaTwweGZmZmY7IGkrKyk7CisKKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4MTNjNCwgc3RhdGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisgICAgfQorICAgIGVsc2UgaWYob3B0aW9uID09IDIpCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTZHNSZWcoMCwgMywgMCwgJnJlZ1ZhbHVlKSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgIHJlZ1ZhbHVlIHw9IDB4NDA7CisgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1Nkc1JlZygwLCAzLCAwLCByZWdWYWx1ZSkpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgIGZvciAoaT0wOyBpPDB4ZmZmZjsgaSsrKTsKKworICAgICAgICAgICAgICByZWdWYWx1ZSAmPSB+KDB4NDApOworICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTZHNSZWcoMCwgMywgMCwgcmVnVmFsdWUpKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldFNkc0xpbmtTdGF0dXMKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgU0dNSUkgc3RhdHVzCisgKiBJbnB1dDoKKyAqICAgICAgaWQgIC0gRVhUIElECisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZS4KKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0U2RzTGlua1N0YXR1cyhydGtfdWludDMyIGV4dF9pZCwgcnRrX3VpbnQzMiAqcFNpZ25hbERldGVjdCwgcnRrX3VpbnQzMiAqcFN5bmMsIHJ0a191aW50MzIgKnBMaW5rKQoreworICAgIHJ0a191aW50MzIgcmV0VmFsLCByZWdWYWx1ZSwgdHlwZSwgcnVubmluZyA9IDAsIHJldFZhbDI7CisKKworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4MTNDMiwgMHgwMjQ5KSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoMHgxMzAwLCAmcmVnVmFsdWUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDEzQzIsIDB4MDAwMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHN3aXRjaCAocmVnVmFsdWUpCisgICAgeworICAgICAgICBjYXNlIDB4MDI3NjoKKyAgICAgICAgY2FzZSAweDA1OTc6CisgICAgICAgIGNhc2UgMHg2MzY3OgorICAgICAgICAgICAgdHlwZSA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweDA2NTI6CisgICAgICAgIGNhc2UgMHg2MzY4OgorICAgICAgICAgICAgdHlwZSA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweDA4MDE6CisgICAgICAgIGNhc2UgMHg2NTExOgorICAgICAgICAgICAgdHlwZSA9IDI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBSVF9FUlJfRkFJTEVEOworICAgIH0KKworICAgIGlmKHR5cGUgPT0gMCkKKyAgICB7CisgICAgICAgIGlmICgxID09IGV4dF9pZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0KDB4MTMwYywgNSwgJnJ1bm5pbmcpKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGlmKHJ1bm5pbmcgPT0gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxMzBjLCA1LCAwKSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDY2MDEsIDB4MDAzRCk7CisKKyAgICAgICAgICAgIGlmKHJldFZhbCA9PSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDY2MDAsIDB4MDA4MCk7CisKKyAgICAgICAgICAgIGlmKHJldFZhbCA9PSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZygweDY2MDIsICZyZWdWYWx1ZSk7CisKKyAgICAgICAgICAgIGlmKHJ1bm5pbmcgPT0gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbDIgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0KDB4MTMwYywgNSwgMSkpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWwyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICpwU2lnbmFsRGV0ZWN0ID0gKHJlZ1ZhbHVlICYgMHgwMTAwKSA/IDEgOiAwOworICAgICAgICAgICAgKnBTeW5jID0gKHJlZ1ZhbHVlICYgMHgwMDAxKSA/IDEgOiAwOworICAgICAgICAgICAgKnBMaW5rID0gKHJlZ1ZhbHVlICYgMHgwMDEwKSA/IDEgOiAwOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKyAgICB9CisgICAgZWxzZSBpZih0eXBlID09IDEpCisgICAgeworICAgICAgICBpZiAoMSA9PSBleHRfaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDY2MDEsIDB4MDAzRCkpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDY2MDAsIDB4MDA4MSkpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZygweDY2MDIsICZyZWdWYWx1ZSkpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgKnBTaWduYWxEZXRlY3QgPSAocmVnVmFsdWUgJiAweDAxMDApID8gMSA6IDA7CisgICAgICAgICAgICAqcFN5bmMgPSAocmVnVmFsdWUgJiAweDAwMDEpID8gMSA6IDA7CisgICAgICAgICAgICAqcExpbmsgPSAocmVnVmFsdWUgJiAweDAwMTApID8gMSA6IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoMiA9PSBleHRfaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDY2MDEsIDB4MDAzRCkpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDY2MDAsIDB4MDA4MCkpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZygweDY2MDIsICZyZWdWYWx1ZSkpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgKnBTaWduYWxEZXRlY3QgPSAocmVnVmFsdWUgJiAweDAxMDApID8gMSA6IDA7CisgICAgICAgICAgICAqcFN5bmMgPSAocmVnVmFsdWUgJiAweDAwMDEpID8gMSA6IDA7CisgICAgICAgICAgICAqcExpbmsgPSAocmVnVmFsdWUgJiAweDAwMTApID8gMSA6IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworICAgIH0KKyAgICBlbHNlIGlmKHR5cGUgPT0gMikKKyAgICB7CisgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU2RzUmVnKDAsIDMwLCAxLCAmcmVnVmFsdWUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1Nkc1JlZygwLCAzMCwgMSwgJnJlZ1ZhbHVlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAqcFNpZ25hbERldGVjdCA9IChyZWdWYWx1ZSAmIDB4MDEwMCkgPyAxIDogMDsKKyAgICAgICAgKnBTeW5jID0gKHJlZ1ZhbHVlICYgMHgwMDAxKSA/IDEgOiAwOworICAgICAgICAqcExpbmsgPSAocmVnVmFsdWUgJiAweDAwMTApID8gMSA6IDA7CisKKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRTZ21paU53YXkKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgU0dNSUkgTndheQorICogSW5wdXQ6CisgKiAgICAgIGV4dF9pZCAgICAgIC0gRVhUIElECisgKiAgICAgIHN0YXRlICAgICAgIC0gU0dNSUkgTndheSBzdGF0ZQorICogT3V0cHV0OgorICogICAgICBOb25lLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUuCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldFNnbWlpTndheShydGtfdWludDMyIGV4dF9pZCwgcnRrX3VpbnQzMiBzdGF0ZSkKK3sKKyAgICBydGtfdWludDMyIHJldFZhbCwgcmVnVmFsdWUsIHR5cGUsIHJ1bm5pbmcgPSAwLCByZXRWYWwyOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHgxM0MyLCAweDAyNDkpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZygweDEzMDAsICZyZWdWYWx1ZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4MTNDMiwgMHgwMDAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgc3dpdGNoIChyZWdWYWx1ZSkKKyAgICB7CisgICAgICAgIGNhc2UgMHgwMjc2OgorICAgICAgICBjYXNlIDB4MDU5NzoKKyAgICAgICAgY2FzZSAweDYzNjc6CisgICAgICAgICAgICB0eXBlID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MDY1MjoKKyAgICAgICAgY2FzZSAweDYzNjg6CisgICAgICAgICAgICB0eXBlID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MDgwMToKKyAgICAgICAgY2FzZSAweDY1MTE6CisgICAgICAgICAgICB0eXBlID0gMjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9GQUlMRUQ7CisgICAgfQorCisgICAgaWYodHlwZSA9PSAwKQorICAgIHsKKyAgICAgICAgaWYgKDEgPT0gZXh0X2lkKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoMHgxMzBjLCA1LCAmcnVubmluZykpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgaWYocnVubmluZyA9PSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDEzMGMsIDUsIDApKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4NjYwMSwgMHgwMDAyKTsKKworICAgICAgICAgICAgaWYocmV0VmFsID09IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4NjYwMCwgMHgwMDgwKTsKKworICAgICAgICAgICAgaWYocmV0VmFsID09IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKDB4NjYwMiwgJnJlZ1ZhbHVlKTsKKworICAgICAgICAgICAgaWYocmV0VmFsID09IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZihzdGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgICByZWdWYWx1ZSB8PSAweDAyMDA7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgIHJlZ1ZhbHVlICY9IH4weDAyMDA7CisKKyAgICAgICAgICAgICAgICByZWdWYWx1ZSB8PSAweDAxMDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmKHJldFZhbCA9PSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDY2MDIsIHJlZ1ZhbHVlKTsKKworICAgICAgICAgICAgaWYocmV0VmFsID09IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4NjYwMSwgMHgwMDAyKTsKKworICAgICAgICAgICAgaWYocmV0VmFsID09IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4NjYwMCwgMHgwMEMwKTsKKworICAgICAgICAgICAgaWYocnVubmluZyA9PSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsMiA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxMzBjLCA1LCAxKSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisgICAgfQorICAgIGVsc2UgaWYodHlwZSA9PSAxKQorICAgIHsKKyAgICAgICAgaWYgKDEgPT0gZXh0X2lkKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHg2NjAxLCAweDAwMDIpKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHg2NjAwLCAweDAwODEpKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoMHg2NjAyLCAmcmVnVmFsdWUpKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGlmKHN0YXRlKQorICAgICAgICAgICAgICAgICAgcmVnVmFsdWUgfD0gMHgwMjAwOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgcmVnVmFsdWUgJj0gfjB4MDIwMDsKKworICAgICAgICAgICAgcmVnVmFsdWUgfD0gMHgwMTAwOworCisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHg2NjAyLCByZWdWYWx1ZSkpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDY2MDEsIDB4MDAwMikpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDY2MDAsIDB4MDBDMSkpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgyID09IGV4dF9pZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4NjYwMSwgMHgwMDAyKSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4NjYwMCwgMHgwMDgwKSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKDB4NjYwMiwgJnJlZ1ZhbHVlKSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZihzdGF0ZSkKKyAgICAgICAgICAgICAgICByZWdWYWx1ZSB8PSAweDAyMDA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVnVmFsdWUgJj0gfjB4MDIwMDsKKworICAgICAgICAgICAgcmVnVmFsdWUgfD0gMHgwMTAwOworCisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHg2NjAyLCByZWdWYWx1ZSkpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDY2MDEsIDB4MDAwMikpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDY2MDAsIDB4MDBDMCkpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisgICAgfQorICAgIGVsc2UgaWYodHlwZSA9PSAyKQorICAgIHsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU2RzUmVnKDAsIDIsIDAsICZyZWdWYWx1ZSkpIT1SVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIGlmKHN0YXRlICYgMSkKKyAgICAgICAgICAgIHJlZ1ZhbHVlICY9IH4weDEwMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVnVmFsdWUgfD0gMHgxMDA7CisKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU2RzUmVnKDAsIDIsIDAsIHJlZ1ZhbHVlKSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0U2dtaWlOd2F5CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFNHTUlJIE53YXkKKyAqIElucHV0OgorICogICAgICBleHRfaWQgICAgICAtIEVYVCBJRAorICogICAgICBzdGF0ZSAgICAgICAtIFNHTUlJIE53YXkgc3RhdGUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lLgorICovCityZXRfdCBydGw4MzY3Y19nZXRTZ21paU53YXkocnRrX3VpbnQzMiBleHRfaWQsIHJ0a191aW50MzIgKnBTdGF0ZSkKK3sKKyAgICBydGtfdWludDMyIHJldFZhbCwgcmVnVmFsdWUsIHR5cGUsIHJ1bm5pbmcgPSAwLCByZXRWYWwyOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoMHgxM0MyLCAweDAyNDkpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZygweDEzMDAsICZyZWdWYWx1ZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4MTNDMiwgMHgwMDAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgc3dpdGNoIChyZWdWYWx1ZSkKKyAgICB7CisgICAgICAgIGNhc2UgMHgwMjc2OgorICAgICAgICBjYXNlIDB4MDU5NzoKKyAgICAgICAgY2FzZSAweDYzNjc6CisgICAgICAgICAgICB0eXBlID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MDY1MjoKKyAgICAgICAgY2FzZSAweDYzNjg6CisgICAgICAgICAgICB0eXBlID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MDgwMToKKyAgICAgICAgY2FzZSAweDY1MTE6CisgICAgICAgICAgICB0eXBlID0gMjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9GQUlMRUQ7CisgICAgfQorCisgICAgaWYodHlwZSA9PSAwKQorICAgIHsKKyAgICAgICAgaWYgKDEgPT0gZXh0X2lkKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoMHgxMzBjLCA1LCAmcnVubmluZykpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgaWYocnVubmluZyA9PSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdCgweDEzMGMsIDUsIDApKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4NjYwMSwgMHgwMDAyKTsKKworICAgICAgICAgICAgaWYocmV0VmFsID09IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4NjYwMCwgMHgwMDgwKTsKKworICAgICAgICAgICAgaWYocmV0VmFsID09IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKDB4NjYwMiwgJnJlZ1ZhbHVlKTsKKworICAgICAgICAgICAgaWYocnVubmluZyA9PSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsMiA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoMHgxMzBjLCA1LCAxKSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgaWYocmVnVmFsdWUgJiAweDAyMDApCisgICAgICAgICAgICAgICAgKnBTdGF0ZSA9IDE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgKnBTdGF0ZSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworICAgIH0KKyAgICBlbHNlIGlmKHR5cGUgPT0gMSkKKyAgICB7CisgICAgICAgIGlmICgxID09IGV4dF9pZCkKKyAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDY2MDEsIDB4MDAwMikpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4NjYwMCwgMHgwMDgxKSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoMHg2NjAyLCAmcmVnVmFsdWUpKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgaWYocmVnVmFsdWUgJiAweDAyMDApCisgICAgICAgICAgICAgICAgICAgICpwU3RhdGUgPSAxOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgKnBTdGF0ZSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoMiA9PSBleHRfaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDY2MDEsIDB4MDAwMikpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDY2MDAsIDB4MDA4MCkpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZygweDY2MDIsICZyZWdWYWx1ZSkpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgaWYocmVnVmFsdWUgJiAweDAyMDApCisgICAgICAgICAgICAgICAgKnBTdGF0ZSA9IDE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgKnBTdGF0ZSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworICAgIH0KKyAgICBlbHNlIGlmKHR5cGUgPT0gMikKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1Nkc1JlZygwLCAyLCAwLCAmcmVnVmFsdWUpKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZihyZWdWYWx1ZSAmIDB4MTAwKQorICAgICAgICAgICAgKnBTdGF0ZSA9IDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpwU3RhdGUgPSAxOworICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9wb3J0SXNvbGF0aW9uLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9wb3J0SXNvbGF0aW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBiOWRiNAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X3BvcnRJc29sYXRpb24uYwpAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiAkUmV2aXNpb246IDc2MzA2ICQKKyAqICREYXRlOiAyMDE3LTAzLTA4IDE1OjEzOjU4ICswODAwICjpgLHkuIksIDA4IOS4ieaciCAyMDE3KSAkCisgKgorICogUHVycG9zZSA6IFJUTDgzNjdDIHN3aXRjaCBoaWdoLWxldmVsIEFQSSBmb3IgUlRMODM2N0MKKyAqIEZlYXR1cmUgOiBQb3J0IGlzb2xhdGlvbiByZWxhdGVkIGZ1bmN0aW9ucworICoKKyAqLworCisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl9wb3J0SXNvbGF0aW9uLmg+CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljUG9ydElzb2xhdGlvblBlcm1pdHRlZFBvcnRtYXNrCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHBlcm1pdHRlZCBwb3J0IGlzb2xhdGlvbiBwb3J0bWFzaworICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgICAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjEwKQorICogICAgICBwZXJtaXRQb3J0bWFzayAgLSBwb3J0IG1hc2sKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogICAgICBSVF9FUlJfUE9SVF9NQVNLICAgIC0gSW52YWxpZCBwb3J0bWFzaworICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljUG9ydElzb2xhdGlvblBlcm1pdHRlZFBvcnRtYXNrKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBwZXJtaXRQb3J0bWFzaykKK3sKKyAgICBpZihwb3J0ID49IFJUTDgzNjdDX1BPUlROTykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgaWYoIHBlcm1pdFBvcnRtYXNrID4gUlRMODM2N0NfUE9SVE1BU0spCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9NQVNLOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUE9SVF9JU09MQVRJT05fUE9SVF9NQVNLX1JFRyhwb3J0KSwgcGVybWl0UG9ydG1hc2spOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1BvcnRJc29sYXRpb25QZXJtaXR0ZWRQb3J0bWFzaworICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwZXJtaXR0ZWQgcG9ydCBpc29sYXRpb24gcG9ydG1hc2sKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAgICAgICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+MTApCisgKiAgICAgIHBQZXJtaXRQb3J0bWFzayAgICAgLSBwb3J0IG1hc2sKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljUG9ydElzb2xhdGlvblBlcm1pdHRlZFBvcnRtYXNrKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcFBlcm1pdFBvcnRtYXNrKQoreworICAgIGlmKHBvcnQgPj0gUlRMODM2N0NfUE9SVE5PKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19QT1JUX0lTT0xBVElPTl9QT1JUX01BU0tfUkVHKHBvcnQpLCBwUGVybWl0UG9ydG1hc2spOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1BvcnRJc29sYXRpb25FZmlkCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHBvcnQgaXNvbGF0aW9uIEVGSUQKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+MTApCisgKiAgICAgIGVmaWQgICAgLSBFRklEICgwfjcpCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAtIElucHV0IHBhcmFtZXRlciBvdXQgb2YgcmFuZ2UKKyAqIE5vdGU6CisgKiAgICAgIEVGSUQgaXMgdXNlZCBpbiBpbmRpdmlkdWFsIGxlYXJuaW5nIGluIGZpbHRlcmluZyBkYXRhYmFzZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljUG9ydElzb2xhdGlvbkVmaWQocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGVmaWQpCit7CisgICAgaWYocG9ydCA+PSBSVEw4MzY3Q19QT1JUTk8pCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIGlmKCBlZmlkID4gUlRMODM2N0NfRUZJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUE9SVF9FRklEX1JFRyhwb3J0KSwgUlRMODM2N0NfUE9SVF9FRklEX01BU0socG9ydCksIGVmaWQpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1BvcnRJc29sYXRpb25FZmlkCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHBvcnQgaXNvbGF0aW9uIEVGSUQKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+MTApCisgKiAgICAgIHBFZmlkICAgLSBFRklEICgwfjcpCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BvcnRJc29sYXRpb25FZmlkKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcEVmaWQpCit7CisgICAgaWYocG9ydCA+PSBSVEw4MzY3Q19QT1JUTk8pCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19QT1JUX0VGSURfUkVHKHBvcnQpLCBSVEw4MzY3Q19QT1JUX0VGSURfTUFTSyhwb3J0KSwgcEVmaWQpOworfQorCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9xb3MuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X3Fvcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5YzNjM2UKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9xb3MuYwpAQCAtMCwwICsxLDc3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiAkUmV2aXNpb246IDc2MzA2ICQKKyAqICREYXRlOiAyMDE3LTAzLTA4IDE1OjEzOjU4ICswODAwICjpgLHkuIksIDA4IOS4ieaciCAyMDE3KSAkCisgKgorICogUHVycG9zZSA6IFJUTDgzNjdDIHN3aXRjaCBoaWdoLWxldmVsIEFQSSBmb3IgUlRMODM2N0MKKyAqIEZlYXR1cmUgOiBRb3MgcmVsYXRlZCBmdW5jdGlvbnMKKyAqCisgKi8KKworI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnZfcW9zLmg+CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljUHJpb3JpdHlEb3QxcVJlbWFwcGluZworICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCA4MDIuMVEgYWJzb2x1dGVseSBwcmlvcml0eQorICogSW5wdXQ6CisgKiAgICAgIHNyY3ByaW9yaXR5IC0gUHJpb3JpdHkgdmFsdWUKKyAqICAgICAgcHJpb3JpdHkgICAgIC0gQWJzb2x1dGUgcHJpb3JpdHkgdmFsdWUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1FPU19JTlRfUFJJT1JJVFkgICAgLSBJbnZhbGlkIHByaW9yaXR5CisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNQcmlvcml0eURvdDFxUmVtYXBwaW5nKHJ0a191aW50MzIgc3JjcHJpb3JpdHksIHJ0a191aW50MzIgcHJpb3JpdHkgKQoreworICAgIGlmKChzcmNwcmlvcml0eSA+IFJUTDgzNjdDX1BSSU1BWCkgfHwgKHByaW9yaXR5ID4gUlRMODM2N0NfUFJJTUFYKSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9RT1NfSU5UX1BSSU9SSVRZOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1FPU18xUV9QUklPUklUWV9SRU1BUFBJTkdfUkVHKHNyY3ByaW9yaXR5KSwgUlRMODM2N0NfUU9TXzFRX1BSSU9SSVRZX1JFTUFQUElOR19NQVNLKHNyY3ByaW9yaXR5KSxwcmlvcml0eSk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljUHJpb3JpdHlEb3QxcVJlbWFwcGluZworICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCA4MDIuMVEgYWJzb2x1dGVseSBwcmlvcml0eQorICogSW5wdXQ6CisgKiAgICAgIHNyY3ByaW9yaXR5IC0gUHJpb3JpdHkgdmFsdWUKKyAqICAgICAgcFByaW9yaXR5ICAgICAtIEFic29sdXRlIHByaW9yaXR5IHZhbHVlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNQcmlvcml0eURvdDFxUmVtYXBwaW5nKHJ0a191aW50MzIgc3JjcHJpb3JpdHksIHJ0a191aW50MzIgKnBQcmlvcml0eSApCit7CisgICAgaWYoc3JjcHJpb3JpdHkgPiBSVEw4MzY3Q19QUklNQVggKQorICAgICAgICByZXR1cm4gUlRfRVJSX1FPU19JTlRfUFJJT1JJVFk7CisKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUU9TXzFRX1BSSU9SSVRZX1JFTUFQUElOR19SRUcoc3JjcHJpb3JpdHkpLCBSVEw4MzY3Q19RT1NfMVFfUFJJT1JJVFlfUkVNQVBQSU5HX01BU0soc3JjcHJpb3JpdHkpLCBwUHJpb3JpdHkpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1ByaW9yaXR5UG9ydEJhc2VkCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHBvcnQgYmFzZWQgcHJpb3JpdHkKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH43KQorICogICAgICBwcmlvcml0eSAgICAgLSBQcmlvcml0eSB2YWx1ZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqICAgICAgUlRfRVJSX1FPU19JTlRfUFJJT1JJVFkgICAgLSBJbnZhbGlkIHByaW9yaXR5CisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNQcmlvcml0eVBvcnRCYXNlZChydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgcHJpb3JpdHkgKQoreworICAgIHJldF90IHJldFZhbDsKKworICAgIGlmKHBvcnQgPiBSVEw4MzY3Q19QT1JUSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIGlmKHByaW9yaXR5ID4gUlRMODM2N0NfUFJJTUFYICkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9RT1NfSU5UX1BSSU9SSVRZOworCisgICAgaWYocG9ydCA8IDgpCisgICAgeworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19RT1NfUE9SVEJBU0VEX1BSSU9SSVRZX1JFRyhwb3J0KSwgUlRMODM2N0NfUU9TX1BPUlRCQVNFRF9QUklPUklUWV9NQVNLKHBvcnQpLCBwcmlvcml0eSk7CisgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfUU9TX1BPUlRCQVNFRF9QUklPUklUWV9DVFJMMiwgMHg3IDw8ICgocG9ydCAtIDgpIDw8IDIpLCBwcmlvcml0eSk7CisgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljUHJpb3JpdHlQb3J0QmFzZWQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcG9ydCBiYXNlZCBwcmlvcml0eQorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjcpCisgKiAgICAgIHBQcmlvcml0eSAgICAgLSBQcmlvcml0eSB2YWx1ZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1ByaW9yaXR5UG9ydEJhc2VkKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcFByaW9yaXR5ICkKK3sKKyAgICByZXRfdCByZXRWYWw7CisKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVElETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICBpZihwb3J0IDwgOCkKKyAgICB7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1FPU19QT1JUQkFTRURfUFJJT1JJVFlfUkVHKHBvcnQpLCBSVEw4MzY3Q19RT1NfUE9SVEJBU0VEX1BSSU9SSVRZX01BU0socG9ydCksIHBQcmlvcml0eSk7CisgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfUU9TX1BPUlRCQVNFRF9QUklPUklUWV9DVFJMMiwgMHg3IDw8ICgocG9ydCAtIDgpIDw8IDIpLCBwUHJpb3JpdHkpOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1ByaW9yaXR5RHNjcEJhc2VkCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IERTQ1AtYmFzZWQgcHJpb3JpdHkKKyAqIElucHV0OgorICogICAgICBkc2NwICAgICAgICAgLSBEU0NQIHZhbHVlCisgKiAgICAgIHByaW9yaXR5ICAgICAtIFByaW9yaXR5IHZhbHVlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9RT1NfRFNDUF9WQUxVRSAgICAtIEludmFsaWQgRFNDUCB2YWx1ZQorICogICAgICBSVF9FUlJfUU9TX0lOVF9QUklPUklUWSAgICAtIEludmFsaWQgcHJpb3JpdHkKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1ByaW9yaXR5RHNjcEJhc2VkKHJ0a191aW50MzIgZHNjcCwgcnRrX3VpbnQzMiBwcmlvcml0eSApCit7CisgICAgaWYocHJpb3JpdHkgPiBSVEw4MzY3Q19QUklNQVggKQorICAgICAgICByZXR1cm4gUlRfRVJSX1FPU19JTlRfUFJJT1JJVFk7CisKKyAgICBpZihkc2NwID4gUlRMODM2N0NfRFNDUE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9RT1NfRFNDUF9WQUxVRTsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19RT1NfRFNDUF9UT19QUklPUklUWV9SRUcoZHNjcCksIFJUTDgzNjdDX1FPU19EU0NQX1RPX1BSSU9SSVRZX01BU0soZHNjcCksIHByaW9yaXR5KTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNQcmlvcml0eURzY3BCYXNlZAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBEU0NQLWJhc2VkIHByaW9yaXR5CisgKiBJbnB1dDoKKyAqICAgICAgZHNjcCAgICAgICAgIC0gRFNDUCB2YWx1ZQorICogICAgICBwUHJpb3JpdHkgICAgIC0gUHJpb3JpdHkgdmFsdWUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1FPU19JTlRfUFJJT1JJVFkgICAgLSBJbnZhbGlkIHByaW9yaXR5CisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNQcmlvcml0eURzY3BCYXNlZChydGtfdWludDMyIGRzY3AsIHJ0a191aW50MzIgKnBQcmlvcml0eSApCit7CisgICAgaWYoZHNjcCA+IFJUTDgzNjdDX0RTQ1BNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUU9TX0RTQ1BfVkFMVUU7CisKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUU9TX0RTQ1BfVE9fUFJJT1JJVFlfUkVHKGRzY3ApLCBSVEw4MzY3Q19RT1NfRFNDUF9UT19QUklPUklUWV9NQVNLKGRzY3ApLCBwUHJpb3JpdHkpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1ByaW9yaXR5RGVjaXNpb24KKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgcHJpb3JpdHkgZGVjaXNpb24gdGFibGUKKyAqIElucHV0OgorICogICAgICBwcmlzcmMgICAgICAgICAtIFByaW9yaXR5IGRlY2lzaW9uIHNvdXJjZQorICogICAgICBkZWNpc2lvblByaSAtIERlY2lzaW9uIHByaW9yaXR5IGFzc2lnbm1lbnQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUU9TX0lOVF9QUklPUklUWSAgICAgICAgLSBJbnZhbGlkIHByaW9yaXR5CisgKiAgICAgIFJUX0VSUl9RT1NfU0VMX1BSSV9TT1VSQ0UgICAgLSBJbnZhbGlkIHByaW9yaXR5IGRlY2lzaW9uIHNvdXJjZSBwYXJhbWV0ZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1ByaW9yaXR5RGVjaXNpb24ocnRrX3VpbnQzMiBpbmRleCwgcnRrX3VpbnQzMiBwcmlzcmMsIHJ0a191aW50MzIgZGVjaXNpb25QcmkpCit7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgaWYoaW5kZXggPj0gUFJJREVDX0lEWF9FTkQgKQorICAgICAgICByZXR1cm4gUlRfRVJSX0VOVFJZX0lOREVYOworCisgICAgaWYocHJpc3JjID49IFBSSURFQ19FTkQgKQorICAgICAgICByZXR1cm4gUlRfRVJSX1FPU19TRUxfUFJJX1NPVVJDRTsKKworICAgIGlmKGRlY2lzaW9uUHJpID4gUlRMODM2N0NfREVDSVNJT05QUklNQVggKQorICAgICAgICByZXR1cm4gUlRfRVJSX1FPU19JTlRfUFJJT1JJVFk7CisKKyAgICBzd2l0Y2goaW5kZXgpCisgICAgeworICAgICAgICBjYXNlIFBSSURFQ19JRFgwOgorICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1FPU19JTlRFUk5BTF9QUklPUklUWV9ERUNJU0lPTl9SRUcocHJpc3JjKSwgUlRMODM2N0NfUU9TX0lOVEVSTkFMX1BSSU9SSVRZX0RFQ0lTSU9OX01BU0socHJpc3JjKSwgZGVjaXNpb25QcmkpKSE9ICBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBSSURFQ19JRFgxOgorICAgICAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1FPU19JTlRFUk5BTF9QUklPUklUWV9ERUNJU0lPTjJfUkVHKHByaXNyYyksIFJUTDgzNjdDX1FPU19JTlRFUk5BTF9QUklPUklUWV9ERUNJU0lPTjJfTUFTSyhwcmlzcmMpLCBkZWNpc2lvblByaSkpIT0gIFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9OworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKKworCit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNQcmlvcml0eURlY2lzaW9uCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHByaW9yaXR5IGRlY2lzaW9uIHRhYmxlCisgKiBJbnB1dDoKKyAqICAgICAgcHJpc3JjICAgICAgICAgLSBQcmlvcml0eSBkZWNpc2lvbiBzb3VyY2UKKyAqICAgICAgcERlY2lzaW9uUHJpIC0gRGVjaXNpb24gcHJpb3JpdHkgYXNzaWdubWVudAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9RT1NfU0VMX1BSSV9TT1VSQ0UgICAgLSBJbnZhbGlkIHByaW9yaXR5IGRlY2lzaW9uIHNvdXJjZSBwYXJhbWV0ZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1ByaW9yaXR5RGVjaXNpb24ocnRrX3VpbnQzMiBpbmRleCwgcnRrX3VpbnQzMiBwcmlzcmMsIHJ0a191aW50MzIqIHBEZWNpc2lvblByaSkKK3sKKyAgICByZXRfdCByZXRWYWw7CisKKyAgICBpZihpbmRleCA+PSBQUklERUNfSURYX0VORCApCisgICAgICAgIHJldHVybiBSVF9FUlJfRU5UUllfSU5ERVg7CisKKyAgICBpZihwcmlzcmMgPj0gUFJJREVDX0VORCApCisgICAgICAgIHJldHVybiBSVF9FUlJfUU9TX1NFTF9QUklfU09VUkNFOworCisgICAgc3dpdGNoKGluZGV4KQorICAgIHsKKyAgICAgICAgY2FzZSBQUklERUNfSURYMDoKKyAgICAgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19RT1NfSU5URVJOQUxfUFJJT1JJVFlfREVDSVNJT05fUkVHKHByaXNyYyksIFJUTDgzNjdDX1FPU19JTlRFUk5BTF9QUklPUklUWV9ERUNJU0lPTl9NQVNLKHByaXNyYyksIHBEZWNpc2lvblByaSkpIT0gIFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUFJJREVDX0lEWDE6CisgICAgICAgICAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUU9TX0lOVEVSTkFMX1BSSU9SSVRZX0RFQ0lTSU9OMl9SRUcocHJpc3JjKSwgUlRMODM2N0NfUU9TX0lOVEVSTkFMX1BSSU9SSVRZX0RFQ0lTSU9OMl9NQVNLKHByaXNyYyksIHBEZWNpc2lvblByaSkpIT0gIFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9OworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKKworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljUG9ydFByaW9yaXR5RGVjaXNpb25JbmRleAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwcmlvcml0eSBkZWNpc2lvbiBpbmRleCBmb3IgZWFjaCBwb3J0CisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH43KQorICogICAgICBpbmRleCAgICAgLSBUYWJsZSBpbmRleAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqICAgICAgUlRfRVJSX1FVRVVFX05VTSAgICAgIC0gSW52YWxpZCBxdWV1ZSBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1BvcnRQcmlvcml0eURlY2lzaW9uSW5kZXgocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGluZGV4ICkKK3sKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVElETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICBpZihpbmRleCA+PSBQUklERUNfSURYX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9FTlRSWV9JTkRFWDsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1FPU19JTlRFUk5BTF9QUklPUklUWV9ERUNJU0lPTl9JRFhfQ1RSTCwgcG9ydCwgaW5kZXgpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1BvcnRQcmlvcml0eURlY2lzaW9uSW5kZXgKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcHJpb3JpdHkgZGVjaXNpb24gaW5kZXggIGZvciBlYWNoIHBvcnQKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjcpCisgKiAgICAgIHBJbmRleCAgICAgLSBUYWJsZSBpbmRleAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BvcnRQcmlvcml0eURlY2lzaW9uSW5kZXgocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyICpwSW5kZXggKQoreworICAgIGlmKHBvcnQgPiBSVEw4MzY3Q19QT1JUSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1FPU19JTlRFUk5BTF9QUklPUklUWV9ERUNJU0lPTl9JRFhfQ1RSTCwgcG9ydCwgcEluZGV4KTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY091dHB1dFF1ZXVlTWFwcGluZ0luZGV4CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IG91dHB1dCBxdWV1ZSBudW1iZXIgZm9yIGVhY2ggcG9ydAorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgaW5kZXggICAgIC0gTWFwcGluZyB0YWJsZSBpbmRleAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqICAgICAgUlRfRVJSX1FVRVVFX05VTSAgICAgIC0gSW52YWxpZCBxdWV1ZSBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY091dHB1dFF1ZXVlTWFwcGluZ0luZGV4KHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBpbmRleCApCit7CisgICAgaWYocG9ydCA+IFJUTDgzNjdDX1BPUlRJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgaWYoaW5kZXggPj0gUlRMODM2N0NfUVVFVUVOTykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9RVUVVRV9OVU07CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUU9TX1BPUlRfUVVFVUVfTlVNQkVSX1JFRyhwb3J0KSwgUlRMODM2N0NfUU9TX1BPUlRfUVVFVUVfTlVNQkVSX01BU0socG9ydCksIGluZGV4KTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNPdXRwdXRRdWV1ZU1hcHBpbmdJbmRleAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBvdXRwdXQgcXVldWUgbnVtYmVyIGZvciBlYWNoIHBvcnQKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjcpCisgKiAgICAgIHBJbmRleCAgICAgLSBNYXBwaW5nIHRhYmxlIGluZGV4CisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljT3V0cHV0UXVldWVNYXBwaW5nSW5kZXgocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyICpwSW5kZXggKQoreworICAgIGlmKHBvcnQgPiBSVEw4MzY3Q19QT1JUSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19RT1NfUE9SVF9RVUVVRV9OVU1CRVJfUkVHKHBvcnQpLCBSVEw4MzY3Q19RT1NfUE9SVF9RVUVVRV9OVU1CRVJfTUFTSyhwb3J0KSwgcEluZGV4KTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNQcmlvcml0eVRvUUlETWFwcGluZ1RhYmxlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHByaW9yaXR5IHRvIFFJRCBtYXBwaW5nIHRhYmxlIHBhcmFtZXRlcnMKKyAqIElucHV0OgorICogICAgICBpbmRleCAgICAgICAgIC0gTWFwcGluZyB0YWJsZSBpbmRleAorICogICAgICBwcmlvcml0eSAgICAgLSBUaGUgcHJpb3JpdHkgdmFsdWUKKyAqICAgICAgcWlkICAgICAgICAgLSBRdWV1ZSBpZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUVVFVUVfSUQgICAgICAgICAgLSBJbnZhbGlkIHF1ZXVlIGlkCisgKiAgICAgIFJUX0VSUl9RVUVVRV9OVU0gICAgICAgICAgLSBJbnZhbGlkIHF1ZXVlIG51bWJlcgorICogICAgICBSVF9FUlJfUU9TX0lOVF9QUklPUklUWSAtIEludmFsaWQgcHJpb3JpdHkKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1ByaW9yaXR5VG9RSURNYXBwaW5nVGFibGUocnRrX3VpbnQzMiBpbmRleCwgcnRrX3VpbnQzMiBwcmlvcml0eSwgcnRrX3VpbnQzMiBxaWQgKQoreworICAgIGlmKGluZGV4ID49IFJUTDgzNjdDX1FVRVVFTk8pCisgICAgICAgIHJldHVybiBSVF9FUlJfUVVFVUVfTlVNOworCisgICAgaWYocHJpb3JpdHkgPiBSVEw4MzY3Q19QUklNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUU9TX0lOVF9QUklPUklUWTsKKworICAgIGlmKHFpZCA+IFJUTDgzNjdDX1FJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9RVUVVRV9JRDsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19RT1NfMVFfUFJJT1JJVFlfVE9fUUlEX1JFRyhpbmRleCwgcHJpb3JpdHkpLCBSVEw4MzY3Q19RT1NfMVFfUFJJT1JJVFlfVE9fUUlEX01BU0socHJpb3JpdHkpLCBxaWQpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1ByaW9yaXR5VG9RSURNYXBwaW5nVGFibGUKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcHJpb3JpdHkgdG8gUUlEIG1hcHBpbmcgdGFibGUgcGFyYW1ldGVycworICogSW5wdXQ6CisgKiAgICAgIGluZGV4ICAgICAgICAgLSBNYXBwaW5nIHRhYmxlIGluZGV4CisgKiAgICAgIHByaW9yaXR5ICAgICAtIFRoZSBwcmlvcml0eSB2YWx1ZQorICogICAgICBwUWlkICAgICAgICAgLSBRdWV1ZSBpZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUVVFVUVfTlVNICAgICAgICAgIC0gSW52YWxpZCBxdWV1ZSBudW1iZXIKKyAqICAgICAgUlRfRVJSX1FPU19JTlRfUFJJT1JJVFkgLSBJbnZhbGlkIHByaW9yaXR5CisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNQcmlvcml0eVRvUUlETWFwcGluZ1RhYmxlKHJ0a191aW50MzIgaW5kZXgsIHJ0a191aW50MzIgcHJpb3JpdHksIHJ0a191aW50MzIqIHBRaWQpCit7CisgICAgaWYoaW5kZXggPj0gUlRMODM2N0NfUVVFVUVOTykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9RVUVVRV9OVU07CisKKyAgICBpZihwcmlvcml0eSA+IFJUTDgzNjdDX1BSSU1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9RT1NfSU5UX1BSSU9SSVRZOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1FPU18xUV9QUklPUklUWV9UT19RSURfUkVHKGluZGV4LCBwcmlvcml0eSksIFJUTDgzNjdDX1FPU18xUV9QUklPUklUWV9UT19RSURfTUFTSyhwcmlvcml0eSksIHBRaWQpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1JlbWFya2luZ0RvdDFwQWJpbGl0eQorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCA4MDIuMXAgcmVtYXJraW5nIGFiaWxpdHkKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjcpCisgKiAgICAgIGVuYWJsZWQgLSAxOiBlbmFibGVkLCAwOiBkaXNhYmxlZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1JlbWFya2luZ0RvdDFwQWJpbGl0eShydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgZW5hYmxlZCkKK3sKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19QT1JUX01JU0NfQ0ZHX1JFRyhwb3J0KSwgUlRMODM2N0NfMVFSRU1BUktfRU5BQkxFX09GRlNFVCwgZW5hYmxlZCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljUmVtYXJraW5nRG90MXBBYmlsaXR5CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IDgwMi4xcCByZW1hcmtpbmcgYWJpbGl0eQorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgcEVuYWJsZWQgLSAxOiBlbmFibGVkLCAwOiBkaXNhYmxlZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljUmVtYXJraW5nRG90MXBBYmlsaXR5KHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiogcEVuYWJsZWQpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUE9SVF9NSVNDX0NGR19SRUcocG9ydCksIFJUTDgzNjdDXzFRUkVNQVJLX0VOQUJMRV9PRkZTRVQsIHBFbmFibGVkKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNSZW1hcmtpbmdEb3QxcFBhcmFtZXRlcgorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCA4MDIuMXAgcmVtYXJraW5nIHBhcmFtZXRlcgorICogSW5wdXQ6CisgKiAgICAgIHByaW9yaXR5ICAgICAtIFByaW9yaXR5IHZhbHVlCisgKiAgICAgIG5ld1ByaW9yaXR5IC0gTmV3IHByaW9yaXR5IHZhbHVlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9RT1NfSU5UX1BSSU9SSVRZIC0gSW52YWxpZCBwcmlvcml0eQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljUmVtYXJraW5nRG90MXBQYXJhbWV0ZXIocnRrX3VpbnQzMiBwcmlvcml0eSwgcnRrX3VpbnQzMiBuZXdQcmlvcml0eSApCit7CisgICAgaWYocHJpb3JpdHkgPiBSVEw4MzY3Q19QUklNQVggfHwgbmV3UHJpb3JpdHkgPiBSVEw4MzY3Q19QUklNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUU9TX0lOVF9QUklPUklUWTsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19RT1NfMVFfUkVNQVJLX1JFRyhwcmlvcml0eSksIFJUTDgzNjdDX1FPU18xUV9SRU1BUktfTUFTSyhwcmlvcml0eSksIG5ld1ByaW9yaXR5KTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNSZW1hcmtpbmdEb3QxcFBhcmFtZXRlcgorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCA4MDIuMXAgcmVtYXJraW5nIHBhcmFtZXRlcgorICogSW5wdXQ6CisgKiAgICAgIHByaW9yaXR5ICAgICAtIFByaW9yaXR5IHZhbHVlCisgKiAgICAgIHBOZXdQcmlvcml0eSAtIE5ldyBwcmlvcml0eSB2YWx1ZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUU9TX0lOVF9QUklPUklUWSAtIEludmFsaWQgcHJpb3JpdHkKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1JlbWFya2luZ0RvdDFwUGFyYW1ldGVyKHJ0a191aW50MzIgcHJpb3JpdHksIHJ0a191aW50MzIgKnBOZXdQcmlvcml0eSApCit7CisgICAgaWYocHJpb3JpdHkgPiBSVEw4MzY3Q19QUklNQVggKQorICAgICAgICByZXR1cm4gUlRfRVJSX1FPU19JTlRfUFJJT1JJVFk7CisKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUU9TXzFRX1JFTUFSS19SRUcocHJpb3JpdHkpLCBSVEw4MzY3Q19RT1NfMVFfUkVNQVJLX01BU0socHJpb3JpdHkpLCBwTmV3UHJpb3JpdHkpOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljUmVtYXJraW5nRG90MXBTcmMKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgcmVtYXJraW5nIHNvdXJjZSBvZiA4MDIuMXAgcmVtYXJraW5nLgorICogSW5wdXQ6CisgKiAgICAgIHR5cGUgICAgICAtIHJlbWFya2luZyBzb3VyY2UKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfTk9UX0lOSVQgICAgICAgICAtIFRoZSBtb2R1bGUgaXMgbm90IGluaXRpYWwKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gaW52YWxpZCBwb3J0IGlkCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgIC0gaW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIKKworICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gY29uZmlndXJlIDgwMi4xcCByZW1hcmsgZnVuY3Rpb25hbGl0eSB0byBtYXAgb3JpZ2luYWwgRFNDUCB2YWx1ZSBvciBpbnRlcm5hbAorICogICAgICBwcmlvcml0eSB0byBUWCBEU0NQIHZhbHVlLgorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljUmVtYXJraW5nRG90MXBTcmMocnRrX3VpbnQzMiB0eXBlKQoreworCisgICAgaWYodHlwZSA+PSBET1QxUF9QUklTRUxfRU5EICkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9RT1NfU0VMX1BSSV9TT1VSQ0U7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfUk1LX0NGR19TRUxfQ1RSTCwgUlRMODM2N0NfUk1LXzFRX0NGR19TRUxfT0ZGU0VULCB0eXBlKTsKK30KKworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljUmVtYXJraW5nRG90MXBTcmMKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcmVtYXJraW5nIHNvdXJjZSBvZiA4MDIuMXAgcmVtYXJraW5nLgorICogT3V0cHV0OgorICogICAgICBwVHlwZSAgICAgIC0gcmVtYXJraW5nIHNvdXJjZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfTk9UX0lOSVQgICAgICAgICAtIFRoZSBtb2R1bGUgaXMgbm90IGluaXRpYWwKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgLSBpbnZhbGlkIHBvcnQgaWQKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgLSBpbnZhbGlkIGlucHV0IHBhcmFtZXRlcgorICogICAgICBSVF9FUlJfTlVMTF9QT0lOVEVSICAgICAtIGlucHV0IHBhcmFtZXRlciBtYXkgYmUgbnVsbCBwb2ludGVyCisKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1JlbWFya2luZ0RvdDFwU3JjKHJ0a191aW50MzIgKnBUeXBlKQoreworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19STUtfQ0ZHX1NFTF9DVFJMLCBSVEw4MzY3Q19STUtfMVFfQ0ZHX1NFTF9PRkZTRVQsIHBUeXBlKTsKK30KKworCisKKworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljUmVtYXJraW5nRHNjcEFiaWxpdHkKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgRFNDUCByZW1hcmtpbmcgYWJpbGl0eQorICogSW5wdXQ6CisgKiAgICAgIGVuYWJsZWQgICAgIC0gMTogZW5hYmxlZCwgMDogZGlzYWJsZWQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1JlbWFya2luZ0RzY3BBYmlsaXR5KHJ0a191aW50MzIgZW5hYmxlZCkKK3sKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRU1BUktJTkdfQ1RSTF9SRUcsIFJUTDgzNjdDX1JFTUFSS0lOR19EU0NQX0VOQUJMRV9PRkZTRVQsIGVuYWJsZWQpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1JlbWFya2luZ0RzY3BBYmlsaXR5CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IERTQ1AgcmVtYXJraW5nIGFiaWxpdHkKKyAqIElucHV0OgorICogICAgICBlbmFibGVkICAgICAtIDE6IGVuYWJsZWQsIDA6IGRpc2FibGVkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNSZW1hcmtpbmdEc2NwQWJpbGl0eShydGtfdWludDMyKiBwRW5hYmxlZCkKK3sKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRU1BUktJTkdfQ1RSTF9SRUcsIFJUTDgzNjdDX1JFTUFSS0lOR19EU0NQX0VOQUJMRV9PRkZTRVQsIHBFbmFibGVkKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNSZW1hcmtpbmdEc2NwUGFyYW1ldGVyCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IERTQ1AgcmVtYXJraW5nIHBhcmFtZXRlcgorICogSW5wdXQ6CisgKiAgICAgIHByaW9yaXR5ICAgICAtIFByaW9yaXR5IHZhbHVlCisgKiAgICAgIG5ld0RzY3AgICAgIC0gTmV3IERTQ1AgdmFsdWUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1FPU19EU0NQX1ZBTFVFICAgIC0gSW52YWxpZCBEU0NQIHZhbHVlCisgKiAgICAgIFJUX0VSUl9RT1NfSU5UX1BSSU9SSVRZICAgIC0gSW52YWxpZCBwcmlvcml0eQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljUmVtYXJraW5nRHNjcFBhcmFtZXRlcihydGtfdWludDMyIHByaW9yaXR5LCBydGtfdWludDMyIG5ld0RzY3AgKQoreworICAgIGlmKHByaW9yaXR5ID4gUlRMODM2N0NfUFJJTUFYICkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9RT1NfSU5UX1BSSU9SSVRZOworCisgICAgaWYobmV3RHNjcCA+IFJUTDgzNjdDX0RTQ1BNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUU9TX0RTQ1BfVkFMVUU7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUU9TX0RTQ1BfUkVNQVJLX1JFRyhwcmlvcml0eSksIFJUTDgzNjdDX1FPU19EU0NQX1JFTUFSS19NQVNLKHByaW9yaXR5KSwgbmV3RHNjcCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljUmVtYXJraW5nRHNjcFBhcmFtZXRlcgorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBEU0NQIHJlbWFya2luZyBwYXJhbWV0ZXIKKyAqIElucHV0OgorICogICAgICBwcmlvcml0eSAgICAgLSBQcmlvcml0eSB2YWx1ZQorICogICAgICBwTmV3RHNjcCAgICAgLSBOZXcgRFNDUCB2YWx1ZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUU9TX0lOVF9QUklPUklUWSAgICAtIEludmFsaWQgcHJpb3JpdHkKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1JlbWFya2luZ0RzY3BQYXJhbWV0ZXIocnRrX3VpbnQzMiBwcmlvcml0eSwgcnRrX3VpbnQzMiogcE5ld0RzY3AgKQoreworICAgIGlmKHByaW9yaXR5ID4gUlRMODM2N0NfUFJJTUFYICkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9RT1NfSU5UX1BSSU9SSVRZOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1FPU19EU0NQX1JFTUFSS19SRUcocHJpb3JpdHkpLCBSVEw4MzY3Q19RT1NfRFNDUF9SRU1BUktfTUFTSyhwcmlvcml0eSksIHBOZXdEc2NwKTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1JlbWFya2luZ0RzY3BTcmMKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgcmVtYXJraW5nIHNvdXJjZSBvZiBEU0NQIHJlbWFya2luZy4KKyAqIElucHV0OgorICogICAgICB0eXBlICAgICAgLSByZW1hcmtpbmcgc291cmNlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX05PVF9JTklUICAgICAgICAgLSBUaGUgbW9kdWxlIGlzIG5vdCBpbml0aWFsCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAtIGludmFsaWQgcG9ydCBpZAorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAtIGludmFsaWQgaW5wdXQgcGFyYW1ldGVyCisKKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGNvbmZpZ3VyZSBEU0NQIHJlbWFyayBmdW5jdGlvbmFsaXR5IHRvIG1hcCBvcmlnaW5hbCBEU0NQIHZhbHVlIG9yIGludGVybmFsCisgKiAgICAgIHByaW9yaXR5IHRvIFRYIERTQ1AgdmFsdWUuCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNSZW1hcmtpbmdEc2NwU3JjKHJ0a191aW50MzIgdHlwZSkKK3sKKworICAgIGlmKHR5cGUgPj0gRFNDUF9QUklTRUxfRU5EICkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9RT1NfU0VMX1BSSV9TT1VSQ0U7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1JNS19DRkdfU0VMX0NUUkwsIFJUTDgzNjdDX1JNS19EU0NQX0NGR19TRUxfTUFTSywgdHlwZSk7Cit9CisKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1JlbWFya2luZ0RzY3BTcmMKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcmVtYXJraW5nIHNvdXJjZSBvZiBEU0NQIHJlbWFya2luZy4KKyAqIE91dHB1dDoKKyAqICAgICAgcFR5cGUgICAgICAtIHJlbWFya2luZyBzb3VyY2UKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX05PVF9JTklUICAgICAgICAgLSBUaGUgbW9kdWxlIGlzIG5vdCBpbml0aWFsCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgIC0gaW52YWxpZCBwb3J0IGlkCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgIC0gaW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAgICAgLSBpbnB1dCBwYXJhbWV0ZXIgbWF5IGJlIG51bGwgcG9pbnRlcgorCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNSZW1hcmtpbmdEc2NwU3JjKHJ0a191aW50MzIgKnBUeXBlKQoreworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfUk1LX0NGR19TRUxfQ1RSTCwgUlRMODM2N0NfUk1LX0RTQ1BfQ0ZHX1NFTF9NQVNLLCBwVHlwZSk7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNSZW1hcmtpbmdEc2NwMkRzY3AKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgRFNDUCB0byByZW1hcmtlZCBEU0NQIG1hcHBpbmcuCisgKiBJbnB1dDoKKyAqICAgICAgZHNjcCAgICAtIERTQ1AgdmFsdWUKKyAqICAgICAgcm1rRHNjcCAtIHJlbWFya2VkIERTQ1AgdmFsdWUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX1VOSVRfSUQgICAgICAgICAgLSBJbnZhbGlkIHVuaXQgaWQKKyAqICAgICAgUlRfRVJSX1FPU19EU0NQX1ZBTFVFICAgLSBJbnZhbGlkIGRzY3AgdmFsdWUKKyAqIE5vdGU6CisgKiAgICAgIGRzY3AgcGFyYW1ldGVyIGNhbiBiZSBEU0NQIHZhbHVlIG9yIGludGVybmFsIHByaW9yaXR5IGFjY29yZGluZyB0byBjb25maWd1cmF0aW9uIG9mIEFQSQorICogICAgICBkYWxfYXBvbGxvbXBfcW9zX2RzY3BSZW1hcmtTcmNTZWxfc2V0KCksIGJlY2F1c2UgRFNDUCByZW1hcmsgZnVuY3Rpb25hbGl0eSBjYW4gbWFwIG9yaWdpbmFsIERTQ1AKKyAqICAgICAgdmFsdWUgb3IgaW50ZXJuYWwgcHJpb3JpdHkgdG8gVFggRFNDUCB2YWx1ZS4KKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1JlbWFya2luZ0RzY3AyRHNjcChydGtfdWludDMyIGRzY3AsIHJ0a191aW50MzIgcm1rRHNjcCkKK3sKKyAgICBpZigoZHNjcCA+IFJUTDgzNjdDX0RTQ1BNQVggKSB8fCAocm1rRHNjcCA+IFJUTDgzNjdDX0RTQ1BNQVgpKQorICAgICAgICByZXR1cm4gUlRfRVJSX1FPU19JTlRfUFJJT1JJVFk7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUU9TX0RTQ1BfVE9fRFNDUF9SRUcoZHNjcCksIFJUTDgzNjdDX1FPU19EU0NQX1RPX0RTQ1BfTUFTSyhkc2NwKSwgcm1rRHNjcCk7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNSZW1hcmtpbmdEc2NwMkRzY3AKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgRFNDUCB0byByZW1hcmtlZCBEU0NQIG1hcHBpbmcuCisgKiBJbnB1dDoKKyAqICAgICAgZHNjcCAgICAtIERTQ1AgdmFsdWUKKyAqIE91dHB1dDoKKyAqICAgICAgcFJta0RzY3AgICAtIHJlbWFya2VkIERTQ1AgdmFsdWUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX1FPU19EU0NQX1ZBTFVFICAgLSBJbnZhbGlkIGRzY3AgdmFsdWUKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAgICAgLSBOVUxMIHBvaW50ZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUuCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNSZW1hcmtpbmdEc2NwMkRzY3AocnRrX3VpbnQzMiBkc2NwLCBydGtfdWludDMyICpwUm1rRHNjcCkKK3sKKyAgICBpZihkc2NwID4gUlRMODM2N0NfRFNDUE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9RT1NfRFNDUF9WQUxVRTsKKworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19RT1NfRFNDUF9UT19EU0NQX1JFRyhkc2NwKSwgUlRMODM2N0NfUU9TX0RTQ1BfVE9fRFNDUF9NQVNLKGRzY3ApLCBwUm1rRHNjcCk7CisKK30KKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfcmxkcC5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfcmxkcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMDk2ODkKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9ybGRwLmMKQEAgLTAsMCArMSw2NzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogJFJldmlzaW9uOiA0MjMyMSAkCisgKiAkRGF0ZTogMjAxMy0wOC0yNiAxMzo1MToyOSArMDgwMCAo6YCx5LiALCAyNiDlhavmnIggMjAxMykgJAorICoKKyAqIFB1cnBvc2UgOiBSVEw4MzY3QyBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkgZm9yIFJUTDgzNjdDCisgKiBGZWF0dXJlIDogUkxEUCByZWxhdGVkIGZ1bmN0aW9ucworICoKKyAqLworCisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl9ybGRwLmg+CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljUmxkcAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBSTERQIGZ1bmN0aW9uIGVuYWJsZS9kaXNhYmxlCisgKiBJbnB1dDoKKyAqICAgICAgZW5hYmxlZCAgICAgLSAxOiBlbmFibGVkLCAwOiBkaXNhYmxlZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1JsZHAocnRrX3VpbnQzMiBlbmFibGVkKQoreworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19STERQX0NUUkwwLCBSVEw4MzY3Q19STERQX0VOQUJMRV9PRkZTRVQsIGVuYWJsZWQpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1JsZHAKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgUkxEUCBmdW5jdGlvbiBlbmFibGUvZGlzYWJsZQorICogSW5wdXQ6CisgKiAgICAgIHBFbmFibGVkICAgIC0gMTogZW5hYmxlZCwgMDogZGlzYWJsZWQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNSbGRwKHJ0a191aW50MzIgKnBFbmFibGVkKQoreworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19STERQX0NUUkwwLCBSVEw4MzY3Q19STERQX0VOQUJMRV9PRkZTRVQsIHBFbmFibGVkKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNSbGRwRW5hYmxlODA1MQorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBSTERQIGZ1bmN0aW9uIGhhbmRsZWQgYnkgQVNJQyBvciA4MDUxCisgKiBJbnB1dDoKKyAqICAgICAgZW5hYmxlZCAgICAgLSAxOiBlbmFibGVkIDgwNTEsIDA6IGRpc2FibGVkIDgwNTEgKFJMRFAgaXMgaGFuZGxlZCBieSBBU0lDKQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1JsZHBFbmFibGU4MDUxKHJ0a191aW50MzIgZW5hYmxlZCkKK3sKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfUkxEUF9DVFJMMCwgUlRMODM2N0NfUkxEUF84MDUxX0VOQUJMRV9PRkZTRVQsIGVuYWJsZWQpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1JsZHJ0bDgzNjdjX2dldEFzaWNSbGRwRW5hYmxlODA1MXBFbmFibGU4MDUxCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFJMRFAgZnVuY3Rpb24gaGFuZGxlZCBieSBBU0lDIG9yIDgwNTEKKyAqIElucHV0OgorICogICAgICBwRW5hYmxlZCAgICAtIDE6IGVuYWJsZWQgODA1MSwgMDogZGlzYWJsZWQgODA1MSAoUkxEUCBpcyBoYW5kbGVkIGJ5IEFTSUMpCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljUmxkcEVuYWJsZTgwNTEocnRrX3VpbnQzMiAqcEVuYWJsZWQpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1JMRFBfQ1RSTDAsIFJUTDgzNjdDX1JMRFBfODA1MV9FTkFCTEVfT0ZGU0VULCBwRW5hYmxlZCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljUmxkcENvbXBhcmVSYW5kb21OdW1iZXIKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgZW5hYmxlIGNvbXBhcmUgdGhlIHJhbmRvbSBudW1iZXIgZmllbGQgYW5kIHNlZWQgZmllbGQgb2YgUkxEUCBmcmFtZQorICogSW5wdXQ6CisgKiAgICAgIGVuYWJsZWQgICAgIC0gMTogZW5hYmxlZCBjb21wYXJpbmcgcmFuZG9tIG51bWJlciwgMDogZGlzYWJsZWQgY29tcGFyaW5nIHJhbmRvbSBudW1iZXIKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNSbGRwQ29tcGFyZVJhbmRvbU51bWJlcihydGtfdWludDMyIGVuYWJsZWQpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1JMRFBfQ1RSTDAsIFJUTDgzNjdDX1JMRFBfQ09NUF9JRF9PRkZTRVQsIGVuYWJsZWQpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1JsZHBDb21wYXJlUmFuZG9tTnVtYmVyCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGVuYWJsZSBjb21wYXJlIHRoZSByYW5kb20gbnVtYmVyIGZpZWxkIGFuZCBzZWVkIGZpZWxkIG9mIFJMRFAgZnJhbWUKKyAqIElucHV0OgorICogICAgICBwRW5hYmxlZCAgICAtIDE6IGVuYWJsZWQgY29tcGFyaW5nIHJhbmRvbSBudW1iZXIsIDA6IGRpc2FibGVkIGNvbXBhcmluZyByYW5kb20gbnVtYmVyCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljUmxkcENvbXBhcmVSYW5kb21OdW1iZXIocnRrX3VpbnQzMiAqcEVuYWJsZWQpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1JMRFBfQ1RSTDAsIFJUTDgzNjdDX1JMRFBfQ09NUF9JRF9PRkZTRVQsIHBFbmFibGVkKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNSbGRwSW5kaWNhdG9yU291cmNlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IGJ1enplciBhbmQgTEVEIHNvdXJjZSB3aGVuIGRldGVjdGluZyBhIGxvb3AKKyAqIElucHV0OgorICogICAgICBzcmMgICAgIC0gMDogQVNJQywgMTogODA1MQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1JsZHBJbmRpY2F0b3JTb3VyY2UocnRrX3VpbnQzMiBzcmMpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1JMRFBfQ1RSTDAsIFJUTDgzNjdDX1JMRFBfSU5ESUNBVE9SX1NPVVJDRV9PRkZTRVQsIHNyYyk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljUmxkcEluZGljYXRvclNvdXJjZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBidXp6ZXIgYW5kIExFRCBzb3VyY2Ugd2hlbiBkZXRlY3RpbmcgYSBsb29wCisgKiBJbnB1dDoKKyAqICAgICAgcFNyYyAgICAtIDA6IEFTSUMsIDE6IDgwNTEKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNSbGRwSW5kaWNhdG9yU291cmNlKHJ0a191aW50MzIgKnBTcmMpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1JMRFBfQ1RSTDAsIFJUTDgzNjdDX1JMRFBfSU5ESUNBVE9SX1NPVVJDRV9PRkZTRVQsIHBTcmMpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1JsZHBDaGVja2luZ1N0YXRlUGFyYQorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCByZXRyeSBjb3VudCBhbmQgcmV0cnkgcGVyaW9kIG9mIGNoZWNraW5nIHN0YXRlCisgKiBJbnB1dDoKKyAqICAgICAgcmV0cnlDb3VudCAgLSAwfjB4RkYgKHRpbWVzKQorICogICAgICByZXRyeVBlcmlvZCAtIDB+MHhGRkZGIChtcykKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gaW5wdXQgcGFyYW1ldGVyIG91dCBvZiByYW5nZQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljUmxkcENoZWNraW5nU3RhdGVQYXJhKHJ0a191aW50MzIgcmV0cnlDb3VudCwgcnRrX3VpbnQzMiByZXRyeVBlcmlvZCkKK3sKKyAgICByZXRfdCByZXRWYWw7CisKKyAgICBpZihyZXRyeUNvdW50ID4gMHhGRikKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisgICAgaWYocmV0cnlQZXJpb2QgPiBSVEw4MzY3Q19SRUdEQVRBTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JMRFBfUkVUUllfQ09VTlRfUkVHLCBSVEw4MzY3Q19STERQX1JFVFJZX0NPVU5UX0NIS1NUQVRFX01BU0ssIHJldHJ5Q291bnQpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19STERQX1JFVFJZX1BFUklPRF9DSEtTVEFURV9SRUcsIHJldHJ5UGVyaW9kKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNSbGRwQ2hlY2tpbmdTdGF0ZVBhcmEKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcmV0cnkgY291bnQgYW5kIHJldHJ5IHBlcmlvZCBvZiBjaGVja2luZyBzdGF0ZQorICogSW5wdXQ6CisgKiAgICAgIHBSZXRyeUNvdW50ICAgICAtIDB+MHhGRiAodGltZXMpCisgKiAgICAgIHBSZXRyeVBlcmlvZCAgICAtIDB+MHhGRkZGIChtcykKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gaW5wdXQgcGFyYW1ldGVyIG91dCBvZiByYW5nZQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljUmxkcENoZWNraW5nU3RhdGVQYXJhKHJ0a191aW50MzIgKnBSZXRyeUNvdW50LCBydGtfdWludDMyICpwUmV0cnlQZXJpb2QpCit7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkxEUF9SRVRSWV9DT1VOVF9SRUcsIFJUTDgzNjdDX1JMRFBfUkVUUllfQ09VTlRfQ0hLU1RBVEVfTUFTSywgcFJldHJ5Q291bnQpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19STERQX1JFVFJZX1BFUklPRF9DSEtTVEFURV9SRUcsIHBSZXRyeVBlcmlvZCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljUmxkcExvb3BTdGF0ZVBhcmEKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgcmV0cnkgY291bnQgYW5kIHJldHJ5IHBlcmlvZCBvZiBsb29wIHN0YXRlCisgKiBJbnB1dDoKKyAqICAgICAgcmV0cnlDb3VudCAgLSAwfjB4RkYgKHRpbWVzKQorICogICAgICByZXRyeVBlcmlvZCAtIDB+MHhGRkZGIChtcykKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gaW5wdXQgcGFyYW1ldGVyIG91dCBvZiByYW5nZQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljUmxkcExvb3BTdGF0ZVBhcmEocnRrX3VpbnQzMiByZXRyeUNvdW50LCBydGtfdWludDMyIHJldHJ5UGVyaW9kKQoreworICAgIHJldF90IHJldFZhbDsKKworICAgIGlmKHJldHJ5Q291bnQgPiAweEZGKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIGlmKHJldHJ5UGVyaW9kID4gUlRMODM2N0NfUkVHREFUQU1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19STERQX1JFVFJZX0NPVU5UX1JFRywgUlRMODM2N0NfUkxEUF9SRVRSWV9DT1VOVF9MT09QU1RBVEVfTUFTSywgcmV0cnlDb3VudCk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JMRFBfUkVUUllfUEVSSU9EX0xPT1BTVEFURV9SRUcsIHJldHJ5UGVyaW9kKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNSbGRwTG9vcFN0YXRlUGFyYQorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCByZXRyeSBjb3VudCBhbmQgcmV0cnkgcGVyaW9kIG9mIGxvb3Agc3RhdGUKKyAqIElucHV0OgorICogICAgICBwUmV0cnlDb3VudCAgICAgLSAwfjB4RkYgKHRpbWVzKQorICogICAgICBwUmV0cnlQZXJpb2QgICAgLSAwfjB4RkZGRiAobXMpCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAtIGlucHV0IHBhcmFtZXRlciBvdXQgb2YgcmFuZ2UKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1JsZHBMb29wU3RhdGVQYXJhKHJ0a191aW50MzIgKnBSZXRyeUNvdW50LCBydGtfdWludDMyICpwUmV0cnlQZXJpb2QpCit7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkxEUF9SRVRSWV9DT1VOVF9SRUcsIFJUTDgzNjdDX1JMRFBfUkVUUllfQ09VTlRfTE9PUFNUQVRFX01BU0ssIHBSZXRyeUNvdW50KTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfUkxEUF9SRVRSWV9QRVJJT0RfTE9PUFNUQVRFX1JFRywgcFJldHJ5UGVyaW9kKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNSbGRwVHhQb3J0bWFzaworICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwb3J0bWFzayB0aGF0IHNlbmQvZm9yd2FyZCBSTERQIGZyYW1lCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydG1hc2sgICAgLSAwfjB4RkYKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9NQVNLICAgIC0gSW52YWxpZCBwb3J0bWFzaworICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljUmxkcFR4UG9ydG1hc2socnRrX3VpbnQzMiBwb3J0bWFzaykKK3sKKyAgICBpZihwb3J0bWFzayA+IFJUTDgzNjdDX1BPUlRNQVNLKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfTUFTSzsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JMRFBfVFhfUE1TS19SRUcsIHBvcnRtYXNrKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNSbGRwVHhQb3J0bWFzaworICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwb3J0bWFzayB0aGF0IHNlbmQvZm9yd2FyZCBSTERQIGZyYW1lCisgKiBJbnB1dDoKKyAqICAgICAgcFBvcnRtYXNrICAgLSAwfjB4RkYKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNSbGRwVHhQb3J0bWFzayhydGtfdWludDMyICpwUG9ydG1hc2spCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfUkxEUF9UWF9QTVNLX1JFRywgcFBvcnRtYXNrKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNSbGRwTWFnaWNOdW0KKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgUmFuZG9tIHNlZWQgb2YgUkxEUAorICogSW5wdXQ6CisgKiAgICAgIHNlZWQgICAgLSBNQUMKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNSbGRwTWFnaWNOdW0oZXRoZXJfYWRkcl90IHNlZWQpCit7CisgICAgcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcmVnRGF0YTsKKyAgICBydGtfdWludDE2ICphY2Nlc3NQdHI7CisgICAgcnRrX3VpbnQzMiBpOworCisgICAgYWNjZXNzUHRyID0gKHJ0a191aW50MTYqKSZzZWVkOworCisgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKyAgICB7CisgICAgICAgIHJlZ0RhdGEgPSAqYWNjZXNzUHRyOworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JMRFBfTUFHSUNfTlVNX1JFR19CQVNFICsgaSwgcmVnRGF0YSk7CisgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIGFjY2Vzc1B0cisrOworICAgIH0KKworICAgIHJldHVybiByZXRWYWw7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljUmxkcE1hZ2ljTnVtCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFJhbmRvbSBzZWVkIG9mIFJMRFAKKyAqIElucHV0OgorICogICAgICBwU2VlZCAgIC0gTUFDCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljUmxkcE1hZ2ljTnVtKGV0aGVyX2FkZHJfdCAqcFNlZWQpCit7CisgICAgcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcmVnRGF0YTsKKyAgICBydGtfdWludDE2ICphY2Nlc3NQdHI7CisgICAgcnRrX3VpbnQzMiBpOworCisgICAgYWNjZXNzUHRyID0gKHJ0a191aW50MTYqKXBTZWVkOworCisgICAgZm9yKGkgPSAwOyBpIDwgMzsgaSsrKQorICAgIHsKKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19STERQX01BR0lDX05VTV9SRUdfQkFTRSArIGksICZyZWdEYXRhKTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgKmFjY2Vzc1B0ciA9IHJlZ0RhdGE7CisgICAgICAgIGFjY2Vzc1B0cisrOworICAgIH0KKworICAgIHJldHVybiByZXRWYWw7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNSbGRwTG9vcGVkUG9ydG1hc2sKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgbG9vcGVkIHBvcnRtYXNrCisgKiBJbnB1dDoKKyAqICAgICAgcFBvcnRtYXNrICAgLSAwfjB4RkYKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNSbGRwTG9vcGVkUG9ydG1hc2socnRrX3VpbnQzMiAqcFBvcnRtYXNrKQoreworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX1JMRFBfTE9PUF9QTVNLX1JFRywgcFBvcnRtYXNrKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNSbGRwUmFuZG9tTnVtYmVyCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFJhbmRvbSBudW1iZXIgb2YgUkxEUAorICogSW5wdXQ6CisgKiAgICAgIHBSYW5kTnVtYmVyICAgICAtIE1BQworICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1JsZHBSYW5kb21OdW1iZXIoZXRoZXJfYWRkcl90ICpwUmFuZE51bWJlcikKK3sKKyAgICByZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiByZWdEYXRhOworICAgIHJ0a19pbnQxNiBhY2Nlc3NQdHJbM107CisgICAgcnRrX3VpbnQzMiBpOworCisgICAgZm9yKGkgPSAwOyBpIDwgMzsgaSsrKQorICAgIHsKKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19STERQX1JBTkRfTlVNX1JFR19CQVNFKyBpLCAmcmVnRGF0YSk7CisgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIGFjY2Vzc1B0cltpXSA9IHJlZ0RhdGE7CisgICAgfQorCisgICAgbWVtY3B5KHBSYW5kTnVtYmVyLCBhY2Nlc3NQdHIsIDYpOworICAgIHJldHVybiByZXRWYWw7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljUmxkcExvb3BlZFBvcnRtYXNrCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHBvcnQgbnVtYmVyIG9mIGxvb3BlZCBwYWlyCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH43KQorICogICAgICBwTG9vcGVkUGFpciAgICAgLSBwb3J0ICgwfjcpCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1JsZHBMb29wZWRQb3J0UGFpcihydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgKnBMb29wZWRQYWlyKQoreworICAgIGlmKHBvcnQgPiBSVEw4MzY3Q19QT1JUSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIGlmKHBvcnQgPCA4KQorICAgICAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkxEUF9MT09QX1BPUlRfUkVHKHBvcnQpLCBSVEw4MzY3Q19STERQX0xPT1BfUE9SVF9NQVNLKHBvcnQpLCBwTG9vcGVkUGFpcik7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1JMRFBfTE9PUF9QT1JUX1JFRzQgKyAoKHBvcnQgLSA4KSA+PiAxKSwgUlRMODM2N0NfUkxEUF9MT09QX1BPUlRfTUFTSyhwb3J0KSwgcExvb3BlZFBhaXIpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1JscHBUcmFwODA1MQorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCB0cmFwIFJMUFAgcGFja2V0IHRvIDgwNTEKKyAqIElucHV0OgorICogICAgICBlbmFibGVkICAgICAtIDE6IGVuYWJsZWQsIDA6IGRpc2FibGVkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljUmxwcFRyYXA4MDUxKHJ0a191aW50MzIgZW5hYmxlZCkKK3sKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfUkxEUF9DVFJMMCwgUlRMODM2N0NfUkxQUF84MDUxX1RSQVBfT0ZGU0VULCBlbmFibGVkKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNSbHBwVHJhcDgwNTEKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgdHJhcCBSTFBQIHBhY2tldCB0byA4MDUxCisgKiBJbnB1dDoKKyAqICAgICAgcEVuYWJsZWQgICAgLSAxOiBlbmFibGVkLCAwOiBkaXNhYmxlZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1JscHBUcmFwODA1MShydGtfdWludDMyICpwRW5hYmxlZCkKK3sKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfUkxEUF9DVFJMMCwgUlRMODM2N0NfUkxQUF84MDUxX1RSQVBfT0ZGU0VULCBwRW5hYmxlZCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljUmxkcExlYXZlTG9vcGVkUG9ydG1hc2sKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBDbGVhciBsZWF2ZWQgbG9vcGVkIHBvcnRtYXNrCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydG1hc2sgICAgLSAwfjB4RkYKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNSbGRwTGVhdmVMb29wZWRQb3J0bWFzayhydGtfdWludDMyIHBvcnRtYXNrKQoreworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19STERQX1JFTEVBU0VEX0lORElDQVRPUiwgcG9ydG1hc2spOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1JsZHBMZWF2ZUxvb3BlZFBvcnRtYXNrCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGxlYXZlZCBsb29wZWQgcG9ydG1hc2sKKyAqIElucHV0OgorICogICAgICBwUG9ydG1hc2sgICAtIDB+MHhGRgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1JsZHBMZWF2ZUxvb3BlZFBvcnRtYXNrKHJ0a191aW50MzIgKnBQb3J0bWFzaykKK3sKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfUkxEUF9SRUxFQVNFRF9JTkRJQ0FUT1IsIHBQb3J0bWFzayk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljUmxkcEVudGVyTG9vcGVkUG9ydG1hc2sKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBDbGVhciBlbnRlciBsb29wIHBvcnRtYXNrCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydG1hc2sgICAgLSAwfjB4RkYKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNSbGRwRW50ZXJMb29wZWRQb3J0bWFzayhydGtfdWludDMyIHBvcnRtYXNrKQoreworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19STERQX0xPT1BFRF9JTkRJQ0FUT1IsIHBvcnRtYXNrKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNSbGRwRW50ZXJMb29wZWRQb3J0bWFzaworICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBlbnRlciBsb29wIHBvcnRtYXNrCisgKiBJbnB1dDoKKyAqICAgICAgcFBvcnRtYXNrICAgLSAwfjB4RkYKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNSbGRwRW50ZXJMb29wZWRQb3J0bWFzayhydGtfdWludDMyICpwUG9ydG1hc2spCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfUkVHX1JMRFBfTE9PUEVEX0lORElDQVRPUiwgcFBvcnRtYXNrKTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1JsZHBUcmlnZ2VyTW9kZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCB0cmlnZ2VyIFJMRFAgbW9kZQorICogSW5wdXQ6CisgKiAgICAgIG1vZGUgICAgLSAxOiBQZXJpb2RpY2FsbHksIDA6IFNBIG1vdmluZworICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1JsZHBUcmlnZ2VyTW9kZShydGtfdWludDMyIGVuYWJsZWQpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1JMRFBfQ1RSTDAsIFJUTDgzNjdDX1JMRFBfVFJJR0dFUl9NT0RFX09GRlNFVCwgZW5hYmxlZCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljUmxkcFRyaWdnZXJNb2RlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHRyaWdnZXIgUkxEUCBtb2RlCisgKiBJbnB1dDoKKyAqICAgICAgcE1vZGUgICAtIC0gMTogUGVyaW9kaWNhbGx5LCAwOiBTQSBtb3ZpbmcKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNSbGRwVHJpZ2dlck1vZGUocnRrX3VpbnQzMiAqcEVuYWJsZWQpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1JMRFBfQ1RSTDAsIFJUTDgzNjdDX1JMRFBfVFJJR0dFUl9NT0RFX09GRlNFVCwgcEVuYWJsZWQpOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljUmxkcDgwNTFQb3J0bWFzaworICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCA4MDUxL0NQVSBjb25maWd1cmVkIGxvb3BlZCBwb3J0bWFzaworICogSW5wdXQ6CisgKiAgICAgIHBvcnRtYXNrICAgIC0gMH4weEZGCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfTUFTSyAgICAtIEludmFsaWQgcG9ydG1hc2sKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1JsZHA4MDUxUG9ydG1hc2socnRrX3VpbnQzMiBwb3J0bWFzaykKK3sKKyAgICByZXRfdCByZXRWYWw7CisgICAgaWYocG9ydG1hc2sgPiBSVEw4MzY3Q19QT1JUTUFTSykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX01BU0s7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19STERQX0NUUkwwX1JFRyxSVEw4MzY3Q19STERQXzgwNTFfTE9PUF9QT1JUTVNLX01BU0sscG9ydG1hc2sgJiAweGZmKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1JMRFBfQ1RSTDUsUlRMODM2N0NfUkxEUF9DVFJMNV9NQVNLLChwb3J0bWFzayA+PiA4KSAmIDcpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1JsZHA4MDUxUG9ydG1hc2sKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgODA1MS9DUFUgY29uZmlndXJlZCBsb29wZWQgcG9ydG1hc2sKKyAqIElucHV0OgorICogICAgICBwUG9ydG1hc2sgICAtIDB+MHhGRgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1JsZHA4MDUxUG9ydG1hc2socnRrX3VpbnQzMiAqcFBvcnRtYXNrKQoreworICAgIHJ0a191aW50MzIgdG1wUG1zazsKKyAgICByZXRfdCByZXRWYWw7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19STERQX0NUUkwwX1JFRyxSVEw4MzY3Q19STERQXzgwNTFfTE9PUF9QT1JUTVNLX01BU0ssJnRtcFBtc2spOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgKnBQb3J0bWFzayA9IHRtcFBtc2sgJiAweGZmOworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1JMRFBfQ1RSTDUsUlRMODM2N0NfUkxEUF9DVFJMNV9NQVNLLCZ0bXBQbXNrKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICpwUG9ydG1hc2sgfD0gKHRtcFBtc2sgJiA3KSA8PDg7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9ybWEuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X3JtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyOTdkZWYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9ybWEuYwpAQCAtMCwwICsxLDM2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiAkUmV2aXNpb246IDY0NzE2ICQKKyAqICREYXRlOiAyMDE1LTEyLTMxIDE2OjMxOjU1ICswODAwICjpgLHlm5ssIDMxIOWNgeS6jOaciCAyMDE1KSAkCisgKgorICogUHVycG9zZSA6IFJUTDgzNjdDIHN3aXRjaCBoaWdoLWxldmVsIEFQSSBmb3IgUlRMODM2N0MKKyAqIEZlYXR1cmUgOiBSTUEgcmVsYXRlZCBmdW5jdGlvbnMKKyAqCisgKi8KKworI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnZfcm1hLmg+CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljUm1hCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHJlc2VydmVkIG11bHRpY2FzdCBhZGRyZXNzIGZvciBDUFUgdHJhcHBpbmcKKyAqIElucHV0OgorICogICAgICBpbmRleCAgICAgLSByZXNlcnZlZCBtdWx0aWNhc3QgTFNCIGJ5dGUsIDB4MDB+MHgyRiBpcyBhdmFpbGFibGUgdmFsdWUKKyAqICAgICAgcFJtYWNmZyAgICAgLSB0eXBlIG9mIFJNQSBmb3IgdHJhcHBpbmcgZnJhbWUgdHlwZSBzZXR0aW5nCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1JNQV9BRERSIC0gSW52YWxpZCBSTUEgYWRkcmVzcyBpbmRleAorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljUm1hKHJ0a191aW50MzIgaW5kZXgsIHJ0bDgzNjdjX3JtYV90KiBwUm1hY2ZnKQoreworICAgIHJ0a191aW50MzIgcmVnRGF0YSA9IDA7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgaWYoaW5kZXggPiBSVEw4MzY3Q19STUFNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUk1BX0FERFI7CisKKyAgICByZWdEYXRhIHw9IChwUm1hY2ZnLT5wb3J0aXNvX2xlYWt5ICYgMHgwMDAxKTsKKyAgICByZWdEYXRhIHw9ICgocFJtYWNmZy0+dmxhbl9sZWFreSAmIDB4MDAwMSkgPDwgMSk7CisgICAgcmVnRGF0YSB8PSAoKHBSbWFjZmctPmtlZXBfZm9ybWF0ICYgMHgwMDAxKSA8PCAyKTsKKyAgICByZWdEYXRhIHw9ICgocFJtYWNmZy0+dHJhcF9wcmlvcml0eSAmIDB4MDAwNykgPDwgMyk7CisgICAgcmVnRGF0YSB8PSAoKHBSbWFjZmctPmRpc2NhcmRfc3Rvcm1fZmlsdGVyICYgMHgwMDAxKSA8PCA2KTsKKyAgICByZWdEYXRhIHw9ICgocFJtYWNmZy0+b3BlcmF0aW9uICYgMHgwMDAzKSA8PCA3KTsKKworICAgIGlmKCAoaW5kZXggPj0gMHg0ICYmIGluZGV4IDw9IDB4NykgfHwgKGluZGV4ID49IDB4OSAmJiBpbmRleCA8PSAweDBDKSB8fCAoMHgwRiA9PSBpbmRleCkpCisgICAgICAgIGluZGV4ID0gMHgwNDsKKyAgICBlbHNlIGlmKChpbmRleCA+PSAweDEzICYmIGluZGV4IDw9IDB4MTcpIHx8ICgweDE5ID09IGluZGV4KSB8fCAoaW5kZXggPj0gMHgxQiAmJiBpbmRleCA8PSAweDFmKSkKKyAgICAgICAgaW5kZXggPSAweDEzOworICAgIGVsc2UgaWYoaW5kZXggPj0gMHgyMiAmJiBpbmRleCA8PSAweDJGKQorICAgICAgICBpbmRleCA9IDB4MjI7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfUk1BX0NUUkwwMCwgUlRMODM2N0NfVFJBUF9QUklPUklUWV9NQVNLLCBwUm1hY2ZnLT50cmFwX3ByaW9yaXR5KTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX1JNQV9DVFJMMDAraW5kZXgsIHJlZ0RhdGEpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1JtYQorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCByZXNlcnZlZCBtdWx0aWNhc3QgYWRkcmVzcyBmb3IgQ1BVIHRyYXBwaW5nCisgKiBJbnB1dDoKKyAqICAgICAgaW5kZXggICAgIC0gcmVzZXJ2ZWQgbXVsdGljYXN0IExTQiBieXRlLCAweDAwfjB4MkYgaXMgYXZhaWxhYmxlIHZhbHVlCisgKiAgICAgIHJtYWNmZyAgICAgLSB0eXBlIG9mIFJNQSBmb3IgdHJhcHBpbmcgZnJhbWUgdHlwZSBzZXR0aW5nCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1JNQV9BRERSIC0gSW52YWxpZCBSTUEgYWRkcmVzcyBpbmRleAorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljUm1hKHJ0a191aW50MzIgaW5kZXgsIHJ0bDgzNjdjX3JtYV90KiBwUm1hY2ZnKQoreworICAgIHJldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHJlZ0RhdGE7CisKKyAgICBpZihpbmRleCA+IFJUTDgzNjdDX1JNQU1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9STUFfQUREUjsKKworICAgIGlmKCAoaW5kZXggPj0gMHg0ICYmIGluZGV4IDw9IDB4NykgfHwgKGluZGV4ID49IDB4OSAmJiBpbmRleCA8PSAweDBDKSB8fCAoMHgwRiA9PSBpbmRleCkpCisgICAgICAgIGluZGV4ID0gMHgwNDsKKyAgICBlbHNlIGlmKChpbmRleCA+PSAweDEzICYmIGluZGV4IDw9IDB4MTcpIHx8ICgweDE5ID09IGluZGV4KSB8fCAoaW5kZXggPj0gMHgxQiAmJiBpbmRleCA8PSAweDFmKSkKKyAgICAgICAgaW5kZXggPSAweDEzOworICAgIGVsc2UgaWYoaW5kZXggPj0gMHgyMiAmJiBpbmRleCA8PSAweDJGKQorICAgICAgICBpbmRleCA9IDB4MjI7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19STUFfQ1RSTDAwK2luZGV4LCAmcmVnRGF0YSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHBSbWFjZmctPm9wZXJhdGlvbiA9ICgocmVnRGF0YSA+PiA3KSAmIDB4MDAwMyk7CisgICAgcFJtYWNmZy0+ZGlzY2FyZF9zdG9ybV9maWx0ZXIgPSAoKHJlZ0RhdGEgPj4gNikgJiAweDAwMDEpOworICAgIHBSbWFjZmctPnRyYXBfcHJpb3JpdHkgPSAoKHJlZ0RhdGEgPj4gMykgJiAweDAwMDcpOworICAgIHBSbWFjZmctPmtlZXBfZm9ybWF0ID0gKChyZWdEYXRhID4+IDIpICYgMHgwMDAxKTsKKyAgICBwUm1hY2ZnLT52bGFuX2xlYWt5ID0gKChyZWdEYXRhID4+IDEpICYgMHgwMDAxKTsKKyAgICBwUm1hY2ZnLT5wb3J0aXNvX2xlYWt5ID0gKHJlZ0RhdGEgJiAweDAwMDEpOworCisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfUk1BX0NUUkwwMCwgUlRMODM2N0NfVFJBUF9QUklPUklUWV9NQVNLLCAmcmVnRGF0YSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHBSbWFjZmctPnRyYXBfcHJpb3JpdHkgPSByZWdEYXRhOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1JtYUNkcAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBDRFAoQ2lzY28gRGlzY292ZXJ5IFByb3RvY29sKSBmb3IgQ1BVIHRyYXBwaW5nCisgKiBJbnB1dDoKKyAqICAgICAgcFJtYWNmZyAgICAgLSB0eXBlIG9mIFJNQSBmb3IgdHJhcHBpbmcgZnJhbWUgdHlwZSBzZXR0aW5nCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1JNQV9BRERSIC0gSW52YWxpZCBSTUEgYWRkcmVzcyBpbmRleAorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljUm1hQ2RwKHJ0bDgzNjdjX3JtYV90KiBwUm1hY2ZnKQoreworICAgIHJ0a191aW50MzIgcmVnRGF0YSA9IDA7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgaWYocFJtYWNmZy0+b3BlcmF0aW9uID49IFJNQU9QX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9STUFfQUNUSU9OOworCisgICAgaWYocFJtYWNmZy0+dHJhcF9wcmlvcml0eSA+IFJUTDgzNjdDX1BSSU1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9RT1NfSU5UX1BSSU9SSVRZOworCisgICAgcmVnRGF0YSB8PSAocFJtYWNmZy0+cG9ydGlzb19sZWFreSAmIDB4MDAwMSk7CisgICAgcmVnRGF0YSB8PSAoKHBSbWFjZmctPnZsYW5fbGVha3kgJiAweDAwMDEpIDw8IDEpOworICAgIHJlZ0RhdGEgfD0gKChwUm1hY2ZnLT5rZWVwX2Zvcm1hdCAmIDB4MDAwMSkgPDwgMik7CisgICAgcmVnRGF0YSB8PSAoKHBSbWFjZmctPnRyYXBfcHJpb3JpdHkgJiAweDAwMDcpIDw8IDMpOworICAgIHJlZ0RhdGEgfD0gKChwUm1hY2ZnLT5kaXNjYXJkX3N0b3JtX2ZpbHRlciAmIDB4MDAwMSkgPDwgNik7CisgICAgcmVnRGF0YSB8PSAoKHBSbWFjZmctPm9wZXJhdGlvbiAmIDB4MDAwMykgPDwgNyk7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfUk1BX0NUUkwwMCwgUlRMODM2N0NfVFJBUF9QUklPUklUWV9NQVNLLCBwUm1hY2ZnLT50cmFwX3ByaW9yaXR5KTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX1JNQV9DVFJMX0NEUCwgcmVnRGF0YSk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljUm1hQ2RwCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IENEUChDaXNjbyBEaXNjb3ZlcnkgUHJvdG9jb2wpIGZvciBDUFUgdHJhcHBpbmcKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBSbWFjZmcgICAgIC0gdHlwZSBvZiBSTUEgZm9yIHRyYXBwaW5nIGZyYW1lIHR5cGUgc2V0dGluZworICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUk1BX0FERFIgLSBJbnZhbGlkIFJNQSBhZGRyZXNzIGluZGV4CisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNSbWFDZHAocnRsODM2N2Nfcm1hX3QqIHBSbWFjZmcpCit7CisgICAgcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcmVnRGF0YTsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfUkVHX1JNQV9DVFJMX0NEUCwgJnJlZ0RhdGEpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBwUm1hY2ZnLT5vcGVyYXRpb24gPSAoKHJlZ0RhdGEgPj4gNykgJiAweDAwMDMpOworICAgIHBSbWFjZmctPmRpc2NhcmRfc3Rvcm1fZmlsdGVyID0gKChyZWdEYXRhID4+IDYpICYgMHgwMDAxKTsKKyAgICBwUm1hY2ZnLT50cmFwX3ByaW9yaXR5ID0gKChyZWdEYXRhID4+IDMpICYgMHgwMDA3KTsKKyAgICBwUm1hY2ZnLT5rZWVwX2Zvcm1hdCA9ICgocmVnRGF0YSA+PiAyKSAmIDB4MDAwMSk7CisgICAgcFJtYWNmZy0+dmxhbl9sZWFreSA9ICgocmVnRGF0YSA+PiAxKSAmIDB4MDAwMSk7CisgICAgcFJtYWNmZy0+cG9ydGlzb19sZWFreSA9IChyZWdEYXRhICYgMHgwMDAxKTsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19STUFfQ1RSTDAwLCBSVEw4MzY3Q19UUkFQX1BSSU9SSVRZX01BU0ssICZyZWdEYXRhKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcFJtYWNmZy0+dHJhcF9wcmlvcml0eSA9IHJlZ0RhdGE7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljUm1hQ3NzdHAKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgQ1NTVFAoQ2lzY28gU2hhcmVkIFNwYW5uaW5nIFRyZWUgUHJvdG9jb2wpIGZvciBDUFUgdHJhcHBpbmcKKyAqIElucHV0OgorICogICAgICBwUm1hY2ZnICAgICAtIHR5cGUgb2YgUk1BIGZvciB0cmFwcGluZyBmcmFtZSB0eXBlIHNldHRpbmcKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUk1BX0FERFIgLSBJbnZhbGlkIFJNQSBhZGRyZXNzIGluZGV4CisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNSbWFDc3N0cChydGw4MzY3Y19ybWFfdCogcFJtYWNmZykKK3sKKyAgICBydGtfdWludDMyIHJlZ0RhdGEgPSAwOworICAgIHJldF90IHJldFZhbDsKKworICAgIGlmKHBSbWFjZmctPm9wZXJhdGlvbiA+PSBSTUFPUF9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfUk1BX0FDVElPTjsKKworICAgIGlmKHBSbWFjZmctPnRyYXBfcHJpb3JpdHkgPiBSVEw4MzY3Q19QUklNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUU9TX0lOVF9QUklPUklUWTsKKworICAgIHJlZ0RhdGEgfD0gKHBSbWFjZmctPnBvcnRpc29fbGVha3kgJiAweDAwMDEpOworICAgIHJlZ0RhdGEgfD0gKChwUm1hY2ZnLT52bGFuX2xlYWt5ICYgMHgwMDAxKSA8PCAxKTsKKyAgICByZWdEYXRhIHw9ICgocFJtYWNmZy0+a2VlcF9mb3JtYXQgJiAweDAwMDEpIDw8IDIpOworICAgIHJlZ0RhdGEgfD0gKChwUm1hY2ZnLT50cmFwX3ByaW9yaXR5ICYgMHgwMDA3KSA8PCAzKTsKKyAgICByZWdEYXRhIHw9ICgocFJtYWNmZy0+ZGlzY2FyZF9zdG9ybV9maWx0ZXIgJiAweDAwMDEpIDw8IDYpOworICAgIHJlZ0RhdGEgfD0gKChwUm1hY2ZnLT5vcGVyYXRpb24gJiAweDAwMDMpIDw8IDcpOworCisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1JNQV9DVFJMMDAsIFJUTDgzNjdDX1RSQVBfUFJJT1JJVFlfTUFTSywgcFJtYWNmZy0+dHJhcF9wcmlvcml0eSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19STUFfQ1RSTF9DU1NUUCwgcmVnRGF0YSk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljUm1hQ3NzdHAKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgQ1NTVFAoQ2lzY28gU2hhcmVkIFNwYW5uaW5nIFRyZWUgUHJvdG9jb2wpIGZvciBDUFUgdHJhcHBpbmcKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBSbWFjZmcgICAgIC0gdHlwZSBvZiBSTUEgZm9yIHRyYXBwaW5nIGZyYW1lIHR5cGUgc2V0dGluZworICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUk1BX0FERFIgLSBJbnZhbGlkIFJNQSBhZGRyZXNzIGluZGV4CisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNSbWFDc3N0cChydGw4MzY3Y19ybWFfdCogcFJtYWNmZykKK3sKKyAgICByZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiByZWdEYXRhOworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfUk1BX0NUUkxfQ1NTVFAsICZyZWdEYXRhKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcFJtYWNmZy0+b3BlcmF0aW9uID0gKChyZWdEYXRhID4+IDcpICYgMHgwMDAzKTsKKyAgICBwUm1hY2ZnLT5kaXNjYXJkX3N0b3JtX2ZpbHRlciA9ICgocmVnRGF0YSA+PiA2KSAmIDB4MDAwMSk7CisgICAgcFJtYWNmZy0+dHJhcF9wcmlvcml0eSA9ICgocmVnRGF0YSA+PiAzKSAmIDB4MDAwNyk7CisgICAgcFJtYWNmZy0+a2VlcF9mb3JtYXQgPSAoKHJlZ0RhdGEgPj4gMikgJiAweDAwMDEpOworICAgIHBSbWFjZmctPnZsYW5fbGVha3kgPSAoKHJlZ0RhdGEgPj4gMSkgJiAweDAwMDEpOworICAgIHBSbWFjZmctPnBvcnRpc29fbGVha3kgPSAocmVnRGF0YSAmIDB4MDAwMSk7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfUk1BX0NUUkwwMCwgUlRMODM2N0NfVFJBUF9QUklPUklUWV9NQVNLLCAmcmVnRGF0YSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHBSbWFjZmctPnRyYXBfcHJpb3JpdHkgPSByZWdEYXRhOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1JtYUxsZHAKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgTExEUCBmb3IgQ1BVIHRyYXBwaW5nCisgKiBJbnB1dDoKKyAqICAgICAgcFJtYWNmZyAgICAgLSB0eXBlIG9mIFJNQSBmb3IgdHJhcHBpbmcgZnJhbWUgdHlwZSBzZXR0aW5nCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1JNQV9BRERSIC0gSW52YWxpZCBSTUEgYWRkcmVzcyBpbmRleAorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljUm1hTGxkcChydGtfdWludDMyIGVuYWJsZWQsIHJ0bDgzNjdjX3JtYV90KiBwUm1hY2ZnKQoreworICAgIHJ0a191aW50MzIgcmVnRGF0YSA9IDA7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgaWYoZW5hYmxlZCA+IDEpCisgICAgICAgIHJldHVybiBSVF9FUlJfRU5BQkxFOworCisgICAgaWYocFJtYWNmZy0+b3BlcmF0aW9uID49IFJNQU9QX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9STUFfQUNUSU9OOworCisgICAgaWYocFJtYWNmZy0+dHJhcF9wcmlvcml0eSA+IFJUTDgzNjdDX1BSSU1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9RT1NfSU5UX1BSSU9SSVRZOworCisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfUk1BX0xMRFBfRU4sIFJUTDgzNjdDX1JNQV9MTERQX0VOX09GRlNFVCxlbmFibGVkKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmVnRGF0YSB8PSAocFJtYWNmZy0+cG9ydGlzb19sZWFreSAmIDB4MDAwMSk7CisgICAgcmVnRGF0YSB8PSAoKHBSbWFjZmctPnZsYW5fbGVha3kgJiAweDAwMDEpIDw8IDEpOworICAgIHJlZ0RhdGEgfD0gKChwUm1hY2ZnLT5rZWVwX2Zvcm1hdCAmIDB4MDAwMSkgPDwgMik7CisgICAgcmVnRGF0YSB8PSAoKHBSbWFjZmctPnRyYXBfcHJpb3JpdHkgJiAweDAwMDcpIDw8IDMpOworICAgIHJlZ0RhdGEgfD0gKChwUm1hY2ZnLT5kaXNjYXJkX3N0b3JtX2ZpbHRlciAmIDB4MDAwMSkgPDwgNik7CisgICAgcmVnRGF0YSB8PSAoKHBSbWFjZmctPm9wZXJhdGlvbiAmIDB4MDAwMykgPDwgNyk7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfUk1BX0NUUkwwMCwgUlRMODM2N0NfVFJBUF9QUklPUklUWV9NQVNLLCBwUm1hY2ZnLT50cmFwX3ByaW9yaXR5KTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfUkVHX1JNQV9DVFJMX0xMRFAsIHJlZ0RhdGEpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1JtYUxsZHAKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgTExEUCBmb3IgQ1BVIHRyYXBwaW5nCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwUm1hY2ZnICAgICAtIHR5cGUgb2YgUk1BIGZvciB0cmFwcGluZyBmcmFtZSB0eXBlIHNldHRpbmcKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1JNQV9BRERSIC0gSW52YWxpZCBSTUEgYWRkcmVzcyBpbmRleAorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljUm1hTGxkcChydGtfdWludDMyICpwRW5hYmxlZCwgcnRsODM2N2Nfcm1hX3QqIHBSbWFjZmcpCit7CisgICAgcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcmVnRGF0YTsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1JNQV9MTERQX0VOLCBSVEw4MzY3Q19STUFfTExEUF9FTl9PRkZTRVQscEVuYWJsZWQpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX1JFR19STUFfQ1RSTF9MTERQLCAmcmVnRGF0YSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHBSbWFjZmctPm9wZXJhdGlvbiA9ICgocmVnRGF0YSA+PiA3KSAmIDB4MDAwMyk7CisgICAgcFJtYWNmZy0+ZGlzY2FyZF9zdG9ybV9maWx0ZXIgPSAoKHJlZ0RhdGEgPj4gNikgJiAweDAwMDEpOworICAgIHBSbWFjZmctPnRyYXBfcHJpb3JpdHkgPSAoKHJlZ0RhdGEgPj4gMykgJiAweDAwMDcpOworICAgIHBSbWFjZmctPmtlZXBfZm9ybWF0ID0gKChyZWdEYXRhID4+IDIpICYgMHgwMDAxKTsKKyAgICBwUm1hY2ZnLT52bGFuX2xlYWt5ID0gKChyZWdEYXRhID4+IDEpICYgMHgwMDAxKTsKKyAgICBwUm1hY2ZnLT5wb3J0aXNvX2xlYWt5ID0gKHJlZ0RhdGEgJiAweDAwMDEpOworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1JNQV9DVFJMMDAsIFJUTDgzNjdDX1RSQVBfUFJJT1JJVFlfTUFTSywgJnJlZ0RhdGEpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBwUm1hY2ZnLT50cmFwX3ByaW9yaXR5ID0gcmVnRGF0YTsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X3NjaGVkdWxpbmcuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X3NjaGVkdWxpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWJkNjc5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfc2NoZWR1bGluZy5jCkBAIC0wLDAgKzEsNTI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNzYzMDYgJAorICogJERhdGU6IDIwMTctMDMtMDggMTU6MTM6NTggKzA4MDAgKOmAseS4iSwgMDgg5LiJ5pyIIDIwMTcpICQKKyAqCisgKiBQdXJwb3NlIDogUlRMODM2N0Mgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJIGZvciBSVEw4MzY3QworICogRmVhdHVyZSA6IFBhY2tldCBTY2hlZHVsaW5nIHJlbGF0ZWQgZnVuY3Rpb25zCisgKgorICovCisKKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2X3NjaGVkdWxpbmcuaD4KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNMZWFreUJ1Y2tldFBhcmFtZXRlcgorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBMZWFreSBCdWNrZXQgUGFyYW10ZXJzCisgKiBJbnB1dDoKKyAqICAgICAgdGljayAgICAtIFRpY2sgaXMgdXNlZCBmb3IgdGltZSBzbG90IHNpemUgdW5pdAorICogICAgICB0b2tlbiAgIC0gVG9rZW4gaXMgdXNlZCBmb3IgYWRkaW5nIGJ1ZGdldCBpbiBlYWNoIHRpbWUgc2xvdAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfVElDSyAgICAgLSBJbnZhbGlkIFRJQ0sKKyAqICAgICAgUlRfRVJSX1RPS0VOICAgIC0gSW52YWxpZCBUT0tFTgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljTGVha3lCdWNrZXRQYXJhbWV0ZXIocnRrX3VpbnQzMiB0aWNrLCBydGtfdWludDMyIHRva2VuKQoreworICAgIHJldF90IHJldFZhbDsKKworICAgIGlmKHRpY2sgPiAweEZGKQorICAgICAgICByZXR1cm4gUlRfRVJSX1RJQ0s7CisKKyAgICBpZih0b2tlbiA+IDB4RkYpCisgICAgICAgIHJldHVybiBSVF9FUlJfVE9LRU47CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19MRUFLWV9CVUNLRVRfVElDS19SRUcsIFJUTDgzNjdDX0xFQUtZX0JVQ0tFVF9USUNLX01BU0ssIHRpY2spOworCisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX0xFQUtZX0JVQ0tFVF9UT0tFTl9SRUcsIFJUTDgzNjdDX0xFQUtZX0JVQ0tFVF9UT0tFTl9NQVNLLCB0b2tlbik7CisKKyAgICByZXR1cm4gcmV0VmFsOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0xlYWt5QnVja2V0UGFyYW1ldGVyCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IExlYWt5IEJ1Y2tldCBQYXJhbXRlcnMKKyAqIElucHV0OgorICogICAgICB0aWNrICAgIC0gVGljayBpcyB1c2VkIGZvciB0aW1lIHNsb3Qgc2l6ZSB1bml0CisgKiAgICAgIHRva2VuICAgLSBUb2tlbiBpcyB1c2VkIGZvciBhZGRpbmcgYnVkZ2V0IGluIGVhY2ggdGltZSBzbG90CisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljTGVha3lCdWNrZXRQYXJhbWV0ZXIocnRrX3VpbnQzMiAqdGljaywgcnRrX3VpbnQzMiAqdG9rZW4pCit7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfTEVBS1lfQlVDS0VUX1RJQ0tfUkVHLCBSVEw4MzY3Q19MRUFLWV9CVUNLRVRfVElDS19NQVNLLCB0aWNrKTsKKworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19MRUFLWV9CVUNLRVRfVE9LRU5fUkVHLCBSVEw4MzY3Q19MRUFLWV9CVUNLRVRfVE9LRU5fTUFTSywgdG9rZW4pOworCisgICAgcmV0dXJuIHJldFZhbDsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNBcHJNZXRlcgorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwZXItcG9ydCBwZXItcXVldWUgQVBSIHNoYXJlZCBtZXRlciBpbmRleAorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH4xMCkKKyAqICAgICAgcWlkICAgICAtIFF1ZXVlIGlkCisgKiAgICAgIGFwcmlkeCAgLSBkZWRpY2F0ZWQgc2hhcmVkIG1ldGVyIGluZGV4IGZvciBBUFIgKDB+NykKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogICAgICBSVF9FUlJfUVVFVUVfSUQgICAgICAgICAtIEludmFsaWQgcXVldWUgaWQKKyAqICAgICAgUlRfRVJSX0ZJTFRFUl9NRVRFUl9JRCAgLSBJbnZhbGlkIG1ldGVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNBcHJNZXRlcihydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgcWlkLCBydGtfdWludDMyIGFwcmlkeCkKK3sKKyAgICByZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiByZWdBZGRyOworCisgICAgaWYocG9ydCA+IFJUTDgzNjdDX1BPUlRJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgaWYocWlkID4gUlRMODM2N0NfUUlETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1FVRVVFX0lEOworCisgICAgaWYoYXByaWR4ID4gUlRMODM2N0NfUE9SVF9RVUVVRV9NRVRFUl9JTkRFWF9NQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfRklMVEVSX01FVEVSX0lEOworCisgICAgaWYocG9ydCA8IDgpCisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1NDSEVEVUxFX1BPUlRfQVBSX01FVEVSX1JFRyhwb3J0LCBxaWQpLCBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUX0FQUl9NRVRFUl9NQVNLKHFpZCksIGFwcmlkeCk7CisgICAgZWxzZSB7CisgICAgICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19SRUdfU0NIRURVTEVfUE9SVDhfQVBSX01FVEVSX0NUUkwwICsgKChwb3J0LTgpIDw8IDEpICsgKHFpZCAvIDUpOworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhyZWdBZGRyLCBSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUX0FQUl9NRVRFUl9NQVNLKHFpZCksIGFwcmlkeCk7CisgICAgfQorCisgICAgcmV0dXJuIHJldFZhbDsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNBcHJNZXRlcgorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwZXItcG9ydCBwZXItcXVldWUgQVBSIHNoYXJlZCBtZXRlciBpbmRleAorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH4xMCkKKyAqICAgICAgcWlkICAgICAtIFF1ZXVlIGlkCisgKiAgICAgIGFwcmlkeCAgLSBkZWRpY2F0ZWQgc2hhcmVkIG1ldGVyIGluZGV4IGZvciBBUFIgKDB+NykKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogICAgICBSVF9FUlJfUVVFVUVfSUQgLSBJbnZhbGlkIHF1ZXVlIGlkCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNBcHJNZXRlcihydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgcWlkLCBydGtfdWludDMyICphcHJpZHgpCit7CisgICAgcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcmVnQWRkcjsKKworICAgIGlmKHBvcnQgPiBSVEw4MzY3Q19QT1JUSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIGlmKHFpZCA+IFJUTDgzNjdDX1FJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9RVUVVRV9JRDsKKworICAgIGlmKHBvcnQgPCA4KQorICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUX0FQUl9NRVRFUl9SRUcocG9ydCwgcWlkKSwgUlRMODM2N0NfU0NIRURVTEVfUE9SVF9BUFJfTUVURVJfTUFTSyhxaWQpLCBhcHJpZHgpOworICAgIGVsc2UgeworICAgICAgICByZWdBZGRyID0gUlRMODM2N0NfUkVHX1NDSEVEVUxFX1BPUlQ4X0FQUl9NRVRFUl9DVFJMMCArICgocG9ydC04KSA8PCAxKSArIChxaWQgLyA1KTsKKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMocmVnQWRkciwgUlRMODM2N0NfU0NIRURVTEVfUE9SVF9BUFJfTUVURVJfTUFTSyhxaWQpLCBhcHJpZHgpOworICAgIH0KKworICAgIHJldHVybiByZXRWYWw7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljQXByRW5hYmxlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHBlci1wb3J0IEFQUiBlbmFibGUKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjcpCisgKiAgICAgIGFwckVuYWJsZSAgIC0gQVBSIGVuYWJsZSBzZXRpbmcgMTplbmFibGUgMDpkaXNhYmxlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY0FwckVuYWJsZShydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgYXByRW5hYmxlKQoreworICAgIHJldF90IHJldFZhbDsKKworICAgIGlmKHBvcnQgPiBSVEw4MzY3Q19QT1JUSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfU0NIRURVTEVfQVBSX0NUUkxfUkVHLCBSVEw4MzY3Q19TQ0hFRFVMRV9BUFJfQ1RSTF9PRkZTRVQocG9ydCksIGFwckVuYWJsZSk7CisKKyAgICByZXR1cm4gcmV0VmFsOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY0FwckVuYWJsZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwZXItcG9ydCBBUFIgZW5hYmxlCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH43KQorICogICAgICBhcHJFbmFibGUgICAtIEFQUiBlbmFibGUgc2V0aW5nIDE6ZW5hYmxlIDA6ZGlzYWJsZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNBcHJFbmFibGUocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyICphcHJFbmFibGUpCit7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgaWYocG9ydCA+IFJUTDgzNjdDX1BPUlRJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19TQ0hFRFVMRV9BUFJfQ1RSTF9SRUcsIFJUTDgzNjdDX1NDSEVEVUxFX0FQUl9DVFJMX09GRlNFVChwb3J0KSwgYXByRW5hYmxlKTsKKworICAgIHJldHVybiByZXRWYWw7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljV0ZRV2VpZ2h0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHdlaWdodCAgb2YgYSBxdWV1ZQorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH4xMCkKKyAqICAgICAgcWlkICAgICAtIFRoZSBxdWV1ZSBJRCB3YW50ZWQgdG8gc2V0CisgKiAgICAgIHFXZWlnaHQgLSBUaGUgd2VpZ2h0IHZhbHVlIHdhbnRlZCB0byBzZXQgKHZhbGlkOjB+MTI3KQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiAgICAgIFJUX0VSUl9RVUVVRV9JRCAgICAgICAgIC0gSW52YWxpZCBxdWV1ZSBpZAorICogICAgICBSVF9FUlJfUU9TX1FVRVVFX1dFSUdIVCAtIEludmFsaWQgcXVldWUgd2VpZ2h0CisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNXRlFXZWlnaHQocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIHFpZCwgcnRrX3VpbnQzMiBxV2VpZ2h0KQoreworICAgIHJldF90IHJldFZhbDsKKworICAgIC8qIEludmFsaWQgaW5wdXQgcGFyYW1ldGVyICovCisgICAgaWYocG9ydCA+IFJUTDgzNjdDX1BPUlRJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgaWYocWlkID4gUlRMODM2N0NfUUlETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1FVRVVFX0lEOworCisgICAgaWYocVdlaWdodCA+IFJUTDgzNjdDX1FXRUlHSFRNQVggJiYgcWlkID4gMCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9RT1NfUVVFVUVfV0VJR0hUOworCisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUX1FVRVVFX1dGUV9XRUlHSFRfUkVHKHBvcnQsIHFpZCksIHFXZWlnaHQpOworCisgICAgcmV0dXJuIHJldFZhbDsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNXRlFXZWlnaHQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgd2VpZ2h0ICBvZiBhIHF1ZXVlCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjEwKQorICogICAgICBxaWQgICAgIC0gVGhlIHF1ZXVlIElEIHdhbnRlZCB0byBzZXQKKyAqICAgICAgcVdlaWdodCAtIFRoZSB3ZWlnaHQgdmFsdWUgd2FudGVkIHRvIHNldCAodmFsaWQ6MH4xMjcpCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqICAgICAgUlRfRVJSX1FVRVVFX0lEICAgICAgICAgLSBJbnZhbGlkIHF1ZXVlIGlkCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNXRlFXZWlnaHQocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIHFpZCwgcnRrX3VpbnQzMiAqcVdlaWdodCkKK3sKKyAgICByZXRfdCByZXRWYWw7CisKKworICAgIC8qIEludmFsaWQgaW5wdXQgcGFyYW1ldGVyICovCisgICAgaWYocG9ydCAgPiBSVEw4MzY3Q19QT1JUSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIGlmKHFpZCA+IFJUTDgzNjdDX1FJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9RVUVVRV9JRDsKKworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19TQ0hFRFVMRV9QT1JUX1FVRVVFX1dGUV9XRUlHSFRfUkVHKHBvcnQsIHFpZCksIHFXZWlnaHQpOworCisgICAgcmV0dXJuIHJldFZhbDsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNXRlFCdXJzdFNpemUKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgV0ZRIGxlYWt5IGJ1Y2tldCBidXJzdCBzaXplCisgKiBJbnB1dDoKKyAqICAgICAgYnVyc3RzaXplICAgLSBMZWFreSBidWNrZXQgYnVyc3Qgc2l6ZSwgdW5pdCBieXRlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljV0ZRQnVyc3RTaXplKHJ0a191aW50MzIgYnVyc3RzaXplKQoreworICAgIHJldF90IHJldFZhbDsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfU0NIRURVTEVfV0ZRX0JVUlNUX1NJWkVfUkVHLCBidXJzdHNpemUpOworCisgICAgcmV0dXJuIHJldFZhbDsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNXRlFCdXJzdFNpemUKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgV0ZRIGxlYWt5IGJ1Y2tldCBidXJzdCBzaXplCisgKiBJbnB1dDoKKyAqICAgICAgYnVyc3RzaXplICAgLSBMZWFreSBidWNrZXQgYnVyc3Qgc2l6ZSwgdW5pdCBieXRlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljV0ZRQnVyc3RTaXplKHJ0a191aW50MzIgKmJ1cnN0c2l6ZSkKK3sKKyAgICByZXRfdCByZXRWYWw7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX1NDSEVEVUxFX1dGUV9CVVJTVF9TSVpFX1JFRywgYnVyc3RzaXplKTsKKworICAgIHJldHVybiByZXRWYWw7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljUXVldWVUeXBlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHR5cGUgb2YgYSBxdWV1ZQorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+MTApCisgKiAgICAgIHFpZCAgICAgICAgIC0gVGhlIHF1ZXVlIElEIHdhbnRlZCB0byBzZXQKKyAqICAgICAgcXVldWVUeXBlICAgLSBUaGUgc3BlY2lmaWVkIHF1ZXVlIHR5cGUuIDBiMDogU3RyaWN0IHByaW9yaXR5LCAwYjE6IFdGUQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiAgICAgIFJUX0VSUl9RVUVVRV9JRCAtIEludmFsaWQgcXVldWUgaWQKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1F1ZXVlVHlwZShydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgcWlkLCBydGtfdWludDMyIHF1ZXVlVHlwZSkKK3sKKyAgICByZXRfdCByZXRWYWw7CisKKyAgICAvKiBJbnZhbGlkIGlucHV0IHBhcmFtZXRlciAqLworICAgIGlmKHBvcnQgPiBSVEw4MzY3Q19QT1JUSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIGlmKHFpZCA+IFJUTDgzNjdDX1FJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9RVUVVRV9JRDsKKworICAgIC8qIFNldCBSZWxhdGVkIFJlZ2lzdGVycyAqLworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfU0NIRURVTEVfUVVFVUVfVFlQRV9SRUcocG9ydCksIFJUTDgzNjdDX1NDSEVEVUxFX1FVRVVFX1RZUEVfT0ZGU0VUKHBvcnQsIHFpZCkscXVldWVUeXBlKTsKKworICAgIHJldHVybiByZXRWYWw7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljUXVldWVUeXBlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHR5cGUgb2YgYSBxdWV1ZQorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgcWlkICAgICAgICAgLSBUaGUgcXVldWUgSUQgd2FudGVkIHRvIHNldAorICogICAgICBxdWV1ZVR5cGUgICAtIFRoZSBzcGVjaWZpZWQgcXVldWUgdHlwZS4gMGIwOiBTdHJpY3QgcHJpb3JpdHksIDBiMTogV0ZRCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqICAgICAgUlRfRVJSX1FVRVVFX0lEIC0gSW52YWxpZCBxdWV1ZSBpZAorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljUXVldWVUeXBlKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBxaWQsIHJ0a191aW50MzIgKnF1ZXVlVHlwZSkKK3sKKyAgICByZXRfdCByZXRWYWw7CisKKyAgICAvKiBJbnZhbGlkIGlucHV0IHBhcmFtZXRlciAqLworICAgIGlmKHBvcnQgID4gUlRMODM2N0NfUE9SVElETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICBpZihxaWQgPiBSVEw4MzY3Q19RSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUVVFVUVfSUQ7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1NDSEVEVUxFX1FVRVVFX1RZUEVfUkVHKHBvcnQpLCBSVEw4MzY3Q19TQ0hFRFVMRV9RVUVVRV9UWVBFX09GRlNFVChwb3J0LCBxaWQpLHF1ZXVlVHlwZSk7CisKKyAgICByZXR1cm4gcmV0VmFsOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1BvcnRFZ3Jlc3NSYXRlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHBlci1wb3J0IGVncmVzcyByYXRlCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH4xMCkKKyAqICAgICAgcmF0ZSAgICAgICAgLSBFZ3Jlc3MgcmF0ZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiAgICAgIFJUX0VSUl9RT1NfRUJXX1JBVEUgLSBJbnZhbGlkIGJhbmR3aWR0aC9yYXRlCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNQb3J0RWdyZXNzUmF0ZShydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgcmF0ZSkKK3sKKyAgICByZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiByZWdBZGRyLCByZWdEYXRhOworCisgICAgaWYocG9ydCA+IFJUTDgzNjdDX1BPUlRJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgaWYocmF0ZSA+IFJUTDgzNjdDX1FPU19HUkFOVUxBUlRZX01BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9RT1NfRUJXX1JBVEU7CisKKyAgICByZWdBZGRyID0gUlRMODM2N0NfUE9SVF9FR1JFU1NCV19MU0JfUkVHKHBvcnQpOworICAgIHJlZ0RhdGEgPSBSVEw4MzY3Q19RT1NfR1JBTlVMQVJUWV9MU0JfTUFTSyAmIHJhdGU7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKHJlZ0FkZHIsIHJlZ0RhdGEpOworCisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19QT1JUX0VHUkVTU0JXX01TQl9SRUcocG9ydCk7CisgICAgcmVnRGF0YSA9IChSVEw4MzY3Q19RT1NfR1JBTlVMQVJUWV9NU0JfTUFTSyAmIHJhdGUpID4+IFJUTDgzNjdDX1FPU19HUkFOVUxBUlRZX01TQl9PRkZTRVQ7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhyZWdBZGRyLCBSVEw4MzY3Q19QT1JUNl9FR1JFU1NCV19DVFJMMV9NQVNLLCByZWdEYXRhKTsKKworICAgIHJldHVybiByZXRWYWw7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljUG9ydEVncmVzc1JhdGUKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcGVyLXBvcnQgZWdyZXNzIHJhdGUKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjEwKQorICogICAgICByYXRlICAgICAgICAtIEVncmVzcyByYXRlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BvcnRFZ3Jlc3NSYXRlKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcmF0ZSkKK3sKKyAgICByZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiByZWdBZGRyLCByZWdEYXRhLHJlZ0RhdGEyOworCisgICAgaWYocG9ydCA+IFJUTDgzNjdDX1BPUlRJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgcmVnQWRkciA9IFJUTDgzNjdDX1BPUlRfRUdSRVNTQldfTFNCX1JFRyhwb3J0KTsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcocmVnQWRkciwgJnJlZ0RhdGEpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZWdBZGRyID0gUlRMODM2N0NfUE9SVF9FR1JFU1NCV19NU0JfUkVHKHBvcnQpOworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKHJlZ0FkZHIsIFJUTDgzNjdDX1BPUlQ2X0VHUkVTU0JXX0NUUkwxX01BU0ssICZyZWdEYXRhMik7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICpyYXRlID0gcmVnRGF0YSB8IChyZWdEYXRhMiA8PCBSVEw4MzY3Q19RT1NfR1JBTlVMQVJUWV9NU0JfT0ZGU0VUKTsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljUG9ydEVncmVzc1JhdGVJZmcKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgcGVyLXBvcnQgZWdyZXNzIHJhdGUgY2FsY3VsYXRlIGluY2x1ZGUvZXhjbHVkZSBJRkcKKyAqIElucHV0OgorICogICAgICBpZmcgICAgIC0gMTppbmNsdWRlIElGRyAwOmV4Y2x1ZGUgSUZHCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljUG9ydEVncmVzc1JhdGVJZmcocnRrX3VpbnQzMiBpZmcpCit7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfU0NIRURVTEVfV0ZRX0NUUkwsIFJUTDgzNjdDX1NDSEVEVUxFX1dGUV9DVFJMX09GRlNFVCwgaWZnKTsKKworICAgIHJldHVybiByZXRWYWw7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljUG9ydEVncmVzc1JhdGVJZmcKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcGVyLXBvcnQgZWdyZXNzIHJhdGUgY2FsY3VsYXRlIGluY2x1ZGUvZXhjbHVkZSBJRkcKKyAqIElucHV0OgorICogICAgICBpZmcgICAgIC0gMTppbmNsdWRlIElGRyAwOmV4Y2x1ZGUgSUZHCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljUG9ydEVncmVzc1JhdGVJZmcocnRrX3VpbnQzMiAqaWZnKQoreworICAgIHJldF90IHJldFZhbDsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1NDSEVEVUxFX1dGUV9DVFJMLCBSVEw4MzY3Q19TQ0hFRFVMRV9XRlFfQ1RSTF9PRkZTRVQsIGlmZyk7CisKKyAgICByZXR1cm4gcmV0VmFsOworfQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfc3Rvcm0uYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X3N0b3JtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI5ZjY0NwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X3N0b3JtLmMKQEAgLTAsMCArMSw4NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogJFJldmlzaW9uOiA3NjMwNiAkCisgKiAkRGF0ZTogMjAxNy0wMy0wOCAxNToxMzo1OCArMDgwMCAo6YCx5LiJLCAwOCDkuInmnIggMjAxNykgJAorICoKKyAqIFB1cnBvc2UgOiBSVEw4MzY3QyBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkgZm9yIFJUTDgzNjdDCisgKiBGZWF0dXJlIDogU3Rvcm0gY29udHJvbCBmaWx0ZXJpbmcgcmVsYXRlZCBmdW5jdGlvbnMKKyAqCisgKi8KKworI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnZfc3Rvcm0uaD4KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNTdG9ybUZpbHRlckJyb2FkY2FzdEVuYWJsZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwZXItcG9ydCBicm9hZGNhc3Qgc3Rvcm0gZmlsdGVyIGVuYWJsZS9kaXNhYmxlCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjcpCisgKiAgICAgIGVuYWJsZWQgLSAxOiBlbmFibGVkLCAwOiBkaXNhYmxlZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNTdG9ybUZpbHRlckJyb2FkY2FzdEVuYWJsZShydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgZW5hYmxlZCkKK3sKKyAgICBpZihwb3J0ID49IFJUTDgzNjdDX1BPUlROTykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfU1RPUk1fQkNBU1RfUkVHLCBwb3J0LCBlbmFibGVkKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNTdG9ybUZpbHRlckJyb2FkY2FzdEVuYWJsZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwZXItcG9ydCBicm9hZGNhc3Qgc3Rvcm0gZmlsdGVyIGVuYWJsZS9kaXNhYmxlCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjcpCisgKiAgICAgIHBFbmFibGVkIC0gMTogZW5hYmxlZCwgMDogZGlzYWJsZWQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljU3Rvcm1GaWx0ZXJCcm9hZGNhc3RFbmFibGUocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyICpwRW5hYmxlZCkKK3sKKyAgICBpZihwb3J0ID49IFJUTDgzNjdDX1BPUlROTykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfU1RPUk1fQkNBU1RfUkVHLCBwb3J0LCBwRW5hYmxlZCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljU3Rvcm1GaWx0ZXJCcm9hZGNhc3RNZXRlcgorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwZXItcG9ydCBicm9hZGNhc3Qgc3Rvcm0gZmlsdGVyIG1ldGVyCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjcpCisgKiAgICAgIG1ldGVyICAgLSBtZXRlciBpbmRleCAoMH4zMSkKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogICAgICBSVF9FUlJfRklMVEVSX01FVEVSX0lEICAtIEludmFsaWQgbWV0ZXIgaW5kZXgKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1N0b3JtRmlsdGVyQnJvYWRjYXN0TWV0ZXIocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIG1ldGVyKQoreworICAgIGlmKHBvcnQgPj0gUlRMODM2N0NfUE9SVE5PKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICBpZihtZXRlciA+IFJUTDgzNjdDX01FVEVSTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX0ZJTFRFUl9NRVRFUl9JRDsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19TVE9STV9CQ0FTVF9NRVRFUl9DVFJMX1JFRyhwb3J0KSwgUlRMODM2N0NfU1RPUk1fQkNBU1RfTUVURVJfQ1RSTF9NQVNLKHBvcnQpLCBtZXRlcik7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljU3Rvcm1GaWx0ZXJCcm9hZGNhc3RNZXRlcgorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwZXItcG9ydCBicm9hZGNhc3Qgc3Rvcm0gZmlsdGVyIG1ldGVyCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjcpCisgKiAgICAgIHBNZXRlciAgLSBtZXRlciBpbmRleCAoMH4zMSkKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljU3Rvcm1GaWx0ZXJCcm9hZGNhc3RNZXRlcihydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgKnBNZXRlcikKK3sKKyAgICBpZihwb3J0ID49IFJUTDgzNjdDX1BPUlROTykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1NUT1JNX0JDQVNUX01FVEVSX0NUUkxfUkVHKHBvcnQpLCBSVEw4MzY3Q19TVE9STV9CQ0FTVF9NRVRFUl9DVFJMX01BU0socG9ydCksIHBNZXRlcik7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljU3Rvcm1GaWx0ZXJNdWx0aWNhc3RFbmFibGUKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgcGVyLXBvcnQgbXVsdGljYXN0IHN0b3JtIGZpbHRlciBlbmFibGUvZGlzYWJsZQorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH43KQorICogICAgICBlbmFibGVkIC0gMTogZW5hYmxlZCwgMDogZGlzYWJsZWQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljU3Rvcm1GaWx0ZXJNdWx0aWNhc3RFbmFibGUocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGVuYWJsZWQpCit7CisgICAgaWYocG9ydCA+PSBSVEw4MzY3Q19QT1JUTk8pCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1NUT1JNX01DQVNUX1JFRywgcG9ydCwgZW5hYmxlZCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljU3Rvcm1GaWx0ZXJNdWx0aWNhc3RFbmFibGUKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcGVyLXBvcnQgbXVsdGljYXN0IHN0b3JtIGZpbHRlciBlbmFibGUvZGlzYWJsZQorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH43KQorICogICAgICBwRW5hYmxlZCAtIDE6IGVuYWJsZWQsIDA6IGRpc2FibGVkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1N0b3JtRmlsdGVyTXVsdGljYXN0RW5hYmxlKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcEVuYWJsZWQpCit7CisgICAgaWYocG9ydCA+PSBSVEw4MzY3Q19QT1JUTk8pCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1NUT1JNX01DQVNUX1JFRywgcG9ydCwgcEVuYWJsZWQpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1N0b3JtRmlsdGVyTXVsdGljYXN0TWV0ZXIKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgcGVyLXBvcnQgbXVsdGljYXN0IHN0b3JtIGZpbHRlciBtZXRlcgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH43KQorICogICAgICBtZXRlciAgIC0gbWV0ZXIgaW5kZXggKDB+MzEpCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqICAgICAgUlRfRVJSX0ZJTFRFUl9NRVRFUl9JRCAgLSBJbnZhbGlkIG1ldGVyIGluZGV4CisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNTdG9ybUZpbHRlck11bHRpY2FzdE1ldGVyKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBtZXRlcikKK3sKKyAgICBpZihwb3J0ID49IFJUTDgzNjdDX1BPUlROTykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgaWYobWV0ZXIgPiBSVEw4MzY3Q19NRVRFUk1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9GSUxURVJfTUVURVJfSUQ7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfU1RPUk1fTUNBU1RfTUVURVJfQ1RSTF9SRUcocG9ydCksIFJUTDgzNjdDX1NUT1JNX01DQVNUX01FVEVSX0NUUkxfTUFTSyhwb3J0KSwgbWV0ZXIpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1N0b3JtRmlsdGVyTXVsdGljYXN0TWV0ZXIKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcGVyLXBvcnQgbXVsdGljYXN0IHN0b3JtIGZpbHRlciBtZXRlcgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH43KQorICogICAgICBwTWV0ZXIgIC0gbWV0ZXIgaW5kZXggKDB+MzEpCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1N0b3JtRmlsdGVyTXVsdGljYXN0TWV0ZXIocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyICpwTWV0ZXIpCit7CisgICAgaWYocG9ydCA+PSBSVEw4MzY3Q19QT1JUTk8pCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19TVE9STV9NQ0FTVF9NRVRFUl9DVFJMX1JFRyhwb3J0KSwgUlRMODM2N0NfU1RPUk1fTUNBU1RfTUVURVJfQ1RSTF9NQVNLKHBvcnQpLCBwTWV0ZXIpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1N0b3JtRmlsdGVyVW5rbm93bk11bHRpY2FzdEVuYWJsZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwZXItcG9ydCB1bmtub3duIG11bHRpY2FzdCBzdG9ybSBmaWx0ZXIgZW5hYmxlL2Rpc2FibGUKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgZW5hYmxlZCAtIDE6IGVuYWJsZWQsIDA6IGRpc2FibGVkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1N0b3JtRmlsdGVyVW5rbm93bk11bHRpY2FzdEVuYWJsZShydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgZW5hYmxlZCkKK3sKKyAgICBpZihwb3J0ID49IFJUTDgzNjdDX1BPUlROTykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfU1RPUk1fVU5LTk9XTl9NQ0FTVF9SRUcsIHBvcnQsIGVuYWJsZWQpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1N0b3JtRmlsdGVyVW5rbm93bk11bHRpY2FzdEVuYWJsZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwZXItcG9ydCB1bmtub3duIG11bHRpY2FzdCBzdG9ybSBmaWx0ZXIgZW5hYmxlL2Rpc2FibGUKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgcEVuYWJsZWQgLSAxOiBlbmFibGVkLCAwOiBkaXNhYmxlZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNTdG9ybUZpbHRlclVua25vd25NdWx0aWNhc3RFbmFibGUocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyICpwRW5hYmxlZCkKK3sKKyAgICBpZihwb3J0ID49IFJUTDgzNjdDX1BPUlROTykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfU1RPUk1fVU5LTk9XTl9NQ0FTVF9SRUcsIHBvcnQsIHBFbmFibGVkKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNTdG9ybUZpbHRlclVua25vd25NdWx0aWNhc3RNZXRlcgorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwZXItcG9ydCB1bmtub3duIG11bHRpY2FzdCBzdG9ybSBmaWx0ZXIgbWV0ZXIKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgbWV0ZXIgICAtIG1ldGVyIGluZGV4ICgwfjMxKQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiAgICAgIFJUX0VSUl9GSUxURVJfTUVURVJfSUQgIC0gSW52YWxpZCBtZXRlciBpbmRleAorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljU3Rvcm1GaWx0ZXJVbmtub3duTXVsdGljYXN0TWV0ZXIocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIG1ldGVyKQoreworICAgIHJldF90IHJldFZhbDsKKworICAgIGlmKHBvcnQgPj0gUlRMODM2N0NfUE9SVE5PKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICBpZihtZXRlciA+IFJUTDgzNjdDX01FVEVSTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX0ZJTFRFUl9NRVRFUl9JRDsKKworICAgIGlmKHBvcnQgPCA4KQorICAgIHsKKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfU1RPUk1fVU5NQ19NRVRFUl9DVFJMX1JFRyhwb3J0KSwgUlRMODM2N0NfU1RPUk1fVU5NQ19NRVRFUl9DVFJMX01BU0socG9ydCksIG1ldGVyKTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19TVE9STV9VTk1DX01FVEVSX0NUUkw0ICsgKChwb3J0IC0gOCkgPj4gMSksIFJUTDgzNjdDX1NUT1JNX1VOTUNfTUVURVJfQ1RSTF9NQVNLKHBvcnQpLCBtZXRlcik7CisgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljU3Rvcm1GaWx0ZXJVbmtub3duTXVsdGljYXN0TWV0ZXIKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcGVyLXBvcnQgdW5rbm93biBtdWx0aWNhc3Qgc3Rvcm0gZmlsdGVyIG1ldGVyCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjcpCisgKiAgICAgIHBNZXRlciAgLSBtZXRlciBpbmRleCAoMH4zMSkKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljU3Rvcm1GaWx0ZXJVbmtub3duTXVsdGljYXN0TWV0ZXIocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyICpwTWV0ZXIpCit7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgaWYocG9ydCA+PSBSVEw4MzY3Q19QT1JUTk8pCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIGlmKHBvcnQgPCA4KQorICAgIHsKKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfU1RPUk1fVU5NQ19NRVRFUl9DVFJMX1JFRyhwb3J0KSwgUlRMODM2N0NfU1RPUk1fVU5NQ19NRVRFUl9DVFJMX01BU0socG9ydCksIHBNZXRlcik7CisgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfU1RPUk1fVU5NQ19NRVRFUl9DVFJMNCArICgocG9ydCAtIDgpID4+IDEpLCBSVEw4MzY3Q19TVE9STV9VTk1DX01FVEVSX0NUUkxfTUFTSyhwb3J0KSwgcE1ldGVyKTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNTdG9ybUZpbHRlclVua25vd25VbmljYXN0RW5hYmxlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHBlci1wb3J0IHVua25vd24gdW5pY2FzdCBzdG9ybSBmaWx0ZXIgZW5hYmxlL2Rpc2FibGUKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgZW5hYmxlZCAtIDE6IGVuYWJsZWQsIDA6IGRpc2FibGVkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1N0b3JtRmlsdGVyVW5rbm93blVuaWNhc3RFbmFibGUocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGVuYWJsZWQpCit7CisgICAgaWYocG9ydCA+PSBSVEw4MzY3Q19QT1JUTk8pCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1NUT1JNX1VOS05PV05fVUNBU1RfUkVHLCBwb3J0LCBlbmFibGVkKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNTdG9ybUZpbHRlclVua25vd25VbmljYXN0RW5hYmxlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgZ2V0IHBlci1wb3J0IHVua25vd24gdW5pY2FzdCBzdG9ybSBmaWx0ZXIgZW5hYmxlL2Rpc2FibGUKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgcEVuYWJsZWQgLSAxOiBlbmFibGVkLCAwOiBkaXNhYmxlZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNTdG9ybUZpbHRlclVua25vd25VbmljYXN0RW5hYmxlKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcEVuYWJsZWQpCit7CisgICAgaWYocG9ydCA+PSBSVEw4MzY3Q19QT1JUTk8pCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1NUT1JNX1VOS05PV05fVUNBU1RfUkVHLCBwb3J0LCBwRW5hYmxlZCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljU3Rvcm1GaWx0ZXJVbmtub3duVW5pY2FzdE1ldGVyCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHBlci1wb3J0IHVua25vd24gdW5pY2FzdCBzdG9ybSBmaWx0ZXIgbWV0ZXIKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgbWV0ZXIgICAtIG1ldGVyIGluZGV4ICgwfjMxKQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiAgICAgIFJUX0VSUl9GSUxURVJfTUVURVJfSUQgIC0gSW52YWxpZCBtZXRlciBpbmRleAorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljU3Rvcm1GaWx0ZXJVbmtub3duVW5pY2FzdE1ldGVyKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBtZXRlcikKK3sKKyAgICBpZihwb3J0ID49IFJUTDgzNjdDX1BPUlROTykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgaWYobWV0ZXIgPiBSVEw4MzY3Q19NRVRFUk1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9GSUxURVJfTUVURVJfSUQ7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfU1RPUk1fVU5EQV9NRVRFUl9DVFJMX1JFRyhwb3J0KSwgUlRMODM2N0NfU1RPUk1fVU5EQV9NRVRFUl9DVFJMX01BU0socG9ydCksIG1ldGVyKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNTdG9ybUZpbHRlclVua25vd25VbmljYXN0TWV0ZXIKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcGVyLXBvcnQgdW5rbm93biB1bmljYXN0IHN0b3JtIGZpbHRlciBtZXRlcgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH43KQorICogICAgICBwTWV0ZXIgIC0gbWV0ZXIgaW5kZXggKDB+MzEpCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1N0b3JtRmlsdGVyVW5rbm93blVuaWNhc3RNZXRlcihydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgKnBNZXRlcikKK3sKKyAgICBpZihwb3J0ID49IFJUTDgzNjdDX1BPUlROTykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1NUT1JNX1VOREFfTUVURVJfQ1RSTF9SRUcocG9ydCksIFJUTDgzNjdDX1NUT1JNX1VOREFfTUVURVJfQ1RSTF9NQVNLKHBvcnQpLCBwTWV0ZXIpOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljU3Rvcm1GaWx0ZXJFeHRCcm9hZGNhc3RNZXRlcgorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBleHRlbnNpb24gYnJvYWRjYXN0IHN0b3JtIGZpbHRlciBtZXRlcgorICogSW5wdXQ6CisgKiAgICAgIG1ldGVyICAgLSBtZXRlciBpbmRleCAoMH4zMSkKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9GSUxURVJfTUVURVJfSUQgIC0gSW52YWxpZCBtZXRlciBpbmRleAorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljU3Rvcm1GaWx0ZXJFeHRCcm9hZGNhc3RNZXRlcihydGtfdWludDMyIG1ldGVyKQoreworICAgIGlmKG1ldGVyID4gUlRMODM2N0NfTUVURVJNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfRklMVEVSX01FVEVSX0lEOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19TVE9STV9FWFRfTVRSSURYX0NGRzAsIFJUTDgzNjdDX0JDX1NUT1JNX0VYVF9NRVRFUklEWF9NQVNLLCBtZXRlcik7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNTdG9ybUZpbHRlckV4dEJyb2FkY2FzdE1ldGVyCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgZ2V0IGV4dGVuc2lvbiBicm9hZGNhc3Qgc3Rvcm0gZmlsdGVyIG1ldGVyCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwTWV0ZXIgIC0gbWV0ZXIgaW5kZXggKDB+MzEpCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAgICAgLSBJbnZhbGlkIG1ldGVyIGluZGV4CisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNTdG9ybUZpbHRlckV4dEJyb2FkY2FzdE1ldGVyKHJ0a191aW50MzIgKnBNZXRlcikKK3sKKyAgICBpZihOVUxMID09IHBNZXRlcikKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1NUT1JNX0VYVF9NVFJJRFhfQ0ZHMCwgUlRMODM2N0NfQkNfU1RPUk1fRVhUX01FVEVSSURYX01BU0ssIHBNZXRlcik7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNTdG9ybUZpbHRlckV4dE11bHRpY2FzdE1ldGVyCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IGV4dGVuc2lvbiBtdWx0aWNhc3Qgc3Rvcm0gZmlsdGVyIG1ldGVyCisgKiBJbnB1dDoKKyAqICAgICAgbWV0ZXIgICAtIG1ldGVyIGluZGV4ICgwfjMxKQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0ZJTFRFUl9NRVRFUl9JRCAgLSBJbnZhbGlkIG1ldGVyIGluZGV4CisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNTdG9ybUZpbHRlckV4dE11bHRpY2FzdE1ldGVyKHJ0a191aW50MzIgbWV0ZXIpCit7CisgICAgaWYobWV0ZXIgPiBSVEw4MzY3Q19NRVRFUk1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9GSUxURVJfTUVURVJfSUQ7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1NUT1JNX0VYVF9NVFJJRFhfQ0ZHMCwgUlRMODM2N0NfTUNfU1RPUk1fRVhUX01FVEVSSURYX01BU0ssIG1ldGVyKTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1N0b3JtRmlsdGVyRXh0TXVsdGljYXN0TWV0ZXIKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBnZXQgZXh0ZW5zaW9uIG11bHRpY2FzdCBzdG9ybSBmaWx0ZXIgbWV0ZXIKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBNZXRlciAgLSBtZXRlciBpbmRleCAoMH4zMSkKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfTlVMTF9QT0lOVEVSICAgICAtIEludmFsaWQgbWV0ZXIgaW5kZXgKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1N0b3JtRmlsdGVyRXh0TXVsdGljYXN0TWV0ZXIocnRrX3VpbnQzMiAqcE1ldGVyKQoreworICAgIGlmKE5VTEwgPT0gcE1ldGVyKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfU1RPUk1fRVhUX01UUklEWF9DRkcwLCBSVEw4MzY3Q19NQ19TVE9STV9FWFRfTUVURVJJRFhfTUFTSywgcE1ldGVyKTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1N0b3JtRmlsdGVyRXh0VW5rbm93bk11bHRpY2FzdE1ldGVyCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IGV4dGVuc2lvbiB1bmtub3duIG11bHRpY2FzdCBzdG9ybSBmaWx0ZXIgbWV0ZXIKKyAqIElucHV0OgorICogICAgICBtZXRlciAgIC0gbWV0ZXIgaW5kZXggKDB+MzEpCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfRklMVEVSX01FVEVSX0lEICAtIEludmFsaWQgbWV0ZXIgaW5kZXgKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1N0b3JtRmlsdGVyRXh0VW5rbm93bk11bHRpY2FzdE1ldGVyKHJ0a191aW50MzIgbWV0ZXIpCit7CisgICAgaWYobWV0ZXIgPiBSVEw4MzY3Q19NRVRFUk1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9GSUxURVJfTUVURVJfSUQ7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1NUT1JNX0VYVF9NVFJJRFhfQ0ZHMSwgUlRMODM2N0NfVU5NQ19TVE9STV9FWFRfTUVURVJJRFhfTUFTSywgbWV0ZXIpOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljU3Rvcm1GaWx0ZXJFeHRVbmtub3duTXVsdGljYXN0TWV0ZXIKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBnZXQgZXh0ZW5zaW9uIHVua25vd24gbXVsdGljYXN0IHN0b3JtIGZpbHRlciBtZXRlcgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcE1ldGVyICAtIG1ldGVyIGluZGV4ICgwfjMxKQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgICAgIC0gSW52YWxpZCBtZXRlciBpbmRleAorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljU3Rvcm1GaWx0ZXJFeHRVbmtub3duTXVsdGljYXN0TWV0ZXIocnRrX3VpbnQzMiAqcE1ldGVyKQoreworICAgIGlmKE5VTEwgPT0gcE1ldGVyKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfU1RPUk1fRVhUX01UUklEWF9DRkcxLCBSVEw4MzY3Q19VTk1DX1NUT1JNX0VYVF9NRVRFUklEWF9NQVNLLCBwTWV0ZXIpOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljU3Rvcm1GaWx0ZXJFeHRVbmtub3duVW5pY2FzdE1ldGVyCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IGV4dGVuc2lvbiB1bmtub3duIHVuaWNhc3Qgc3Rvcm0gZmlsdGVyIG1ldGVyCisgKiBJbnB1dDoKKyAqICAgICAgbWV0ZXIgICAtIG1ldGVyIGluZGV4ICgwfjMxKQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0ZJTFRFUl9NRVRFUl9JRCAgLSBJbnZhbGlkIG1ldGVyIGluZGV4CisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNTdG9ybUZpbHRlckV4dFVua25vd25VbmljYXN0TWV0ZXIocnRrX3VpbnQzMiBtZXRlcikKK3sKKyAgICBpZihtZXRlciA+IFJUTDgzNjdDX01FVEVSTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX0ZJTFRFUl9NRVRFUl9JRDsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfU1RPUk1fRVhUX01UUklEWF9DRkcxLCBSVEw4MzY3Q19VTlVDX1NUT1JNX0VYVF9NRVRFUklEWF9NQVNLLCBtZXRlcik7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNTdG9ybUZpbHRlckV4dFVua25vd25VbmljYXN0TWV0ZXIKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBnZXQgZXh0ZW5zaW9uIHVua25vd24gdW5pY2FzdCBzdG9ybSBmaWx0ZXIgbWV0ZXIKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBNZXRlciAgLSBtZXRlciBpbmRleCAoMH4zMSkKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfTlVMTF9QT0lOVEVSICAgICAtIEludmFsaWQgbWV0ZXIgaW5kZXgKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1N0b3JtRmlsdGVyRXh0VW5rbm93blVuaWNhc3RNZXRlcihydGtfdWludDMyICpwTWV0ZXIpCit7CisgICAgaWYoTlVMTCA9PSBwTWV0ZXIpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19TVE9STV9FWFRfTVRSSURYX0NGRzEsIFJUTDgzNjdDX1VOVUNfU1RPUk1fRVhUX01FVEVSSURYX01BU0ssIHBNZXRlcik7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNTdG9ybUZpbHRlckV4dEJyb2FkY2FzdEVuYWJsZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBleHRlbnNpb24gYnJvYWRjYXN0IHN0b3JtIGZpbHRlciBzdGF0ZQorICogSW5wdXQ6CisgKiAgICAgIGVuYWJsZWQgICAgIC0gc3RhdGUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNTdG9ybUZpbHRlckV4dEJyb2FkY2FzdEVuYWJsZShydGtfdWludDMyIGVuYWJsZWQpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1NUT1JNX0VYVF9DRkcsIFJUTDgzNjdDX1NUT1JNX0JDQVNUX0VYVF9FTl9PRkZTRVQsIGVuYWJsZWQpOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljU3Rvcm1GaWx0ZXJFeHRCcm9hZGNhc3RFbmFibGUKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgZXh0ZW5zaW9uIGJyb2FkY2FzdCBzdG9ybSBmaWx0ZXIgc3RhdGUKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBFbmFibGVkICAgIC0gc3RhdGUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfTlVMTF9QT0lOVEVSICAgICAtIE51bGwgcG9pbnRlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljU3Rvcm1GaWx0ZXJFeHRCcm9hZGNhc3RFbmFibGUocnRrX3VpbnQzMiAqcEVuYWJsZWQpCit7CisgICAgaWYoTlVMTCA9PSBwRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfU1RPUk1fRVhUX0NGRywgUlRMODM2N0NfU1RPUk1fQkNBU1RfRVhUX0VOX09GRlNFVCwgcEVuYWJsZWQpOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljU3Rvcm1GaWx0ZXJFeHRNdWx0aWNhc3RFbmFibGUKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgZXh0ZW5zaW9uIG11bHRpY2FzdCBzdG9ybSBmaWx0ZXIgc3RhdGUKKyAqIElucHV0OgorICogICAgICBlbmFibGVkICAgICAtIHN0YXRlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljU3Rvcm1GaWx0ZXJFeHRNdWx0aWNhc3RFbmFibGUocnRrX3VpbnQzMiBlbmFibGVkKQoreworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19TVE9STV9FWFRfQ0ZHLCBSVEw4MzY3Q19TVE9STV9NQ0FTVF9FWFRfRU5fT0ZGU0VULCBlbmFibGVkKTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1N0b3JtRmlsdGVyRXh0TXVsdGljYXN0RW5hYmxlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGV4dGVuc2lvbiBtdWx0aWNhc3Qgc3Rvcm0gZmlsdGVyIHN0YXRlCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwRW5hYmxlZCAgICAtIHN0YXRlCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAgICAgLSBOdWxsIHBvaW50ZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1N0b3JtRmlsdGVyRXh0TXVsdGljYXN0RW5hYmxlKHJ0a191aW50MzIgKnBFbmFibGVkKQoreworICAgIGlmKE5VTEwgPT0gcEVuYWJsZWQpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1NUT1JNX0VYVF9DRkcsIFJUTDgzNjdDX1NUT1JNX01DQVNUX0VYVF9FTl9PRkZTRVQsIHBFbmFibGVkKTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1N0b3JtRmlsdGVyRXh0VW5rbm93bk11bHRpY2FzdEVuYWJsZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBleHRlbnNpb24gdW5rbm93biBtdWx0aWNhc3Qgc3Rvcm0gZmlsdGVyIHN0YXRlCisgKiBJbnB1dDoKKyAqICAgICAgZW5hYmxlZCAgICAgLSBzdGF0ZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1N0b3JtRmlsdGVyRXh0VW5rbm93bk11bHRpY2FzdEVuYWJsZShydGtfdWludDMyIGVuYWJsZWQpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1NUT1JNX0VYVF9DRkcsIFJUTDgzNjdDX1NUT1JNX1VOS05PV05fTUNBU1RfRVhUX0VOX09GRlNFVCwgZW5hYmxlZCk7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNTdG9ybUZpbHRlckV4dFVua25vd25NdWx0aWNhc3RFbmFibGUKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgZXh0ZW5zaW9uIHVua25vd24gbXVsdGljYXN0IHN0b3JtIGZpbHRlciBzdGF0ZQorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcEVuYWJsZWQgICAgLSBzdGF0ZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgICAgIC0gTnVsbCBwb2ludGVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNTdG9ybUZpbHRlckV4dFVua25vd25NdWx0aWNhc3RFbmFibGUocnRrX3VpbnQzMiAqcEVuYWJsZWQpCit7CisgICAgaWYoTlVMTCA9PSBwRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfU1RPUk1fRVhUX0NGRywgUlRMODM2N0NfU1RPUk1fVU5LTk9XTl9NQ0FTVF9FWFRfRU5fT0ZGU0VULCBwRW5hYmxlZCk7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNTdG9ybUZpbHRlckV4dFVua25vd25VbmljYXN0RW5hYmxlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IGV4dGVuc2lvbiB1bmtub3duIHVuaWNhc3Qgc3Rvcm0gZmlsdGVyIHN0YXRlCisgKiBJbnB1dDoKKyAqICAgICAgZW5hYmxlZCAgICAgLSBzdGF0ZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1N0b3JtRmlsdGVyRXh0VW5rbm93blVuaWNhc3RFbmFibGUocnRrX3VpbnQzMiBlbmFibGVkKQoreworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19TVE9STV9FWFRfQ0ZHLCBSVEw4MzY3Q19TVE9STV9VTktOT1dOX1VDQVNUX0VYVF9FTl9PRkZTRVQsIGVuYWJsZWQpOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljU3Rvcm1GaWx0ZXJFeHRVbmtub3duVW5pY2FzdEVuYWJsZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBleHRlbnNpb24gdW5rbm93biB1bmljYXN0IHN0b3JtIGZpbHRlciBzdGF0ZQorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcEVuYWJsZWQgICAgLSBzdGF0ZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgICAgIC0gTnVsbCBwb2ludGVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNTdG9ybUZpbHRlckV4dFVua25vd25VbmljYXN0RW5hYmxlKHJ0a191aW50MzIgKnBFbmFibGVkKQoreworICAgIGlmKE5VTEwgPT0gcEVuYWJsZWQpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1NUT1JNX0VYVF9DRkcsIFJUTDgzNjdDX1NUT1JNX1VOS05PV05fVUNBU1RfRVhUX0VOX09GRlNFVCwgcEVuYWJsZWQpOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljU3Rvcm1GaWx0ZXJFeHRFbmFibGVQb3J0TWFzaworICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBleHRlbnNpb24gc3Rvcm0gZmlsdGVyIHBvcnQgbWFzaworICogSW5wdXQ6CisgKiAgICAgIHBvcnRtYXNrICAgIC0gcG9ydCBtYXNrCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljU3Rvcm1GaWx0ZXJFeHRFbmFibGVQb3J0TWFzayhydGtfdWludDMyIHBvcnRtYXNrKQoreworICAgIHJldF90IHJldFZhbDsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19TVE9STV9FWFRfQ0ZHLCBSVEw4MzY3Q19TVE9STV9FWFRfRU5fUE9SVE1BU0tfTUFTSywgcG9ydG1hc2sgJiAweDNGRik7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19TVE9STV9FWFRfQ0ZHLCBSVEw4MzY3Q19TVE9STV9FWFRfRU5fUE9SVE1BU0tfRVhUX01BU0ssIChwb3J0bWFzayA+PiAxMCkmMSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNTdG9ybUZpbHRlckV4dEVuYWJsZVBvcnRNYXNrCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGV4dGVuc2lvbiBzdG9ybSBmaWx0ZXIgcG9ydCBtYXNrCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydG1hc2sgICAgLSBwb3J0IG1hc2sKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgICAgIC0gTnVsbCBwb2ludGVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNTdG9ybUZpbHRlckV4dEVuYWJsZVBvcnRNYXNrKHJ0a191aW50MzIgKnBQb3J0bWFzaykKK3sKKyAgICBydGtfdWludDMyIHRtcFBtc2s7CisgICAgcmV0X3QgcmV0VmFsOworCisgICAgaWYoTlVMTCA9PSBwUG9ydG1hc2spCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1NUT1JNX0VYVF9DRkcsIFJUTDgzNjdDX1NUT1JNX0VYVF9FTl9QT1JUTUFTS19NQVNLLCAmdG1wUG1zayk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAqcFBvcnRtYXNrID0gdG1wUG1zayAmIDB4M2ZmOworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1NUT1JNX0VYVF9DRkcsIFJUTDgzNjdDX1NUT1JNX0VYVF9FTl9QT1JUTUFTS19FWFRfTUFTSywgJnRtcFBtc2spOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgKnBQb3J0bWFzayB8PSAodG1wUG1zayAmIDEpIDw8IDEwOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvcnRsODM2N2NfYXNpY2Rydl9zdmxhbi5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfc3ZsYW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTljZWJhCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfc3ZsYW4uYwpAQCAtMCwwICsxLDEwMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogJFJldmlzaW9uOiA3NjMwNiAkCisgKiAkRGF0ZTogMjAxNy0wMy0wOCAxNToxMzo1OCArMDgwMCAo6YCx5LiJLCAwOCDkuInmnIggMjAxNykgJAorICoKKyAqIFB1cnBvc2UgOiBSVEw4MzY3QyBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkgZm9yIFJUTDgzNjdDCisgKiBGZWF0dXJlIDogU1ZMQU4gcmVsYXRlZCBmdW5jdGlvbnMKKyAqCisgKi8KKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2X3N2bGFuLmg+CisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworc3RhdGljIHZvaWQgX3J0bDgzNjdjX3N2bGFuQ29uZlN0VXNlcjJTbWkoIHJ0bDgzNjdjX3N2bGFuX21lbWNvbmZfdCAqcFVzZXJTdCwgcnRrX3VpbnQxNiAqcFNtaVN0KQoreworICAgIHBTbWlTdFswXSB8PSAocFVzZXJTdC0+dnNfbWVtYmVyICYgMHgwMEZGKTsKKyAgICBwU21pU3RbMF0gfD0gKHBVc2VyU3QtPnZzX3VudGFnICYgMHgwMEZGKSA8PCA4OworCisgICAgcFNtaVN0WzFdIHw9IChwVXNlclN0LT52c19maWRfbXN0aSAmIDB4MDAwRik7CisgICAgcFNtaVN0WzFdIHw9IChwVXNlclN0LT52c19wcmlvcml0eSAmIDB4MDAwNykgPDwgNDsKKyAgICBwU21pU3RbMV0gfD0gKHBVc2VyU3QtPnZzX2ZvcmNlX2ZpZCAmIDB4MDAwMSkgPDwgNzsKKworICAgIHBTbWlTdFsyXSB8PSAocFVzZXJTdC0+dnNfc3ZpZCAmIDB4MEZGRik7CisgICAgcFNtaVN0WzJdIHw9IChwVXNlclN0LT52c19lZmlkZW4gJiAweDAwMDEpIDw8IDEyOworICAgIHBTbWlTdFsyXSB8PSAocFVzZXJTdC0+dnNfZWZpZCAmIDB4MDAwNykgPDwgMTM7CisKKyAgICBwU21pU3RbM10gfD0gKChwVXNlclN0LT52c19tZW1iZXIgJiAweDA3MDApID4+IDgpOworICAgIHBTbWlTdFszXSB8PSAoKHBVc2VyU3QtPnZzX3VudGFnICYgMHgwNzAwKSA+PiA4KSA8PCAzOworfQorCitzdGF0aWMgdm9pZCBfcnRsODM2N2Nfc3ZsYW5Db25mU3RTbWkyVXNlciggcnRsODM2N2Nfc3ZsYW5fbWVtY29uZl90ICpwVXNlclN0LCBydGtfdWludDE2ICpwU21pU3QpCit7CisKKyAgICBwVXNlclN0LT52c19tZW1iZXIgPSAocFNtaVN0WzBdICYgMHgwMEZGKSB8ICgocFNtaVN0WzNdICYgMHgwMDA3KSA8PCA4KTsKKyAgICBwVXNlclN0LT52c191bnRhZyA9ICgocFNtaVN0WzBdICYgMHhGRjAwKSA+PiA4KSB8ICgoKHBTbWlTdFszXSAmIDB4MDAzOCkgPj4gMykgPDwgOCk7CisKKyAgICBwVXNlclN0LT52c19maWRfbXN0aSA9IChwU21pU3RbMV0gJiAweDAwMEYpOworICAgIHBVc2VyU3QtPnZzX3ByaW9yaXR5ID0gKHBTbWlTdFsxXSAmIDB4MDA3MCkgPj4gNDsKKyAgICBwVXNlclN0LT52c19mb3JjZV9maWQgPSAocFNtaVN0WzFdICYgMHgwMDgwKSA+PiA3OworCisgICAgcFVzZXJTdC0+dnNfc3ZpZCA9IChwU21pU3RbMl0gJiAweDBGRkYpOworICAgIHBVc2VyU3QtPnZzX2VmaWRlbiA9IChwU21pU3RbMl0gJiAweDEwMDApID4+IDEyOworICAgIHBVc2VyU3QtPnZzX2VmaWQgPSAocFNtaVN0WzJdICYgMHhFMDAwKSA+PiAxMzsKK30KKworc3RhdGljIHZvaWQgX3J0bDgzNjdjX3N2bGFuTWMyc1N0VXNlcjJTbWkocnRsODM2N2Nfc3ZsYW5fbWMyc190ICpwVXNlclN0LCBydGtfdWludDE2ICpwU21pU3QpCit7CisgICAgcFNtaVN0WzBdIHw9IChwVXNlclN0LT5zdmlkeCAmIDB4MDAzRik7CisgICAgcFNtaVN0WzBdIHw9IChwVXNlclN0LT5mb3JtYXQgJiAweDAwMDEpIDw8IDY7CisgICAgcFNtaVN0WzBdIHw9IChwVXNlclN0LT52YWxpZCAmIDB4MDAwMSkgPDwgNzsKKworICAgIHBTbWlTdFsxXSA9IChydGtfdWludDE2KShwVXNlclN0LT5zbWFzayAmIDB4MDAwMEZGRkYpOworICAgIHBTbWlTdFsyXSA9IChydGtfdWludDE2KSgocFVzZXJTdC0+c21hc2sgJiAweEZGRkYwMDAwKSA+PiAxNik7CisKKyAgICBwU21pU3RbM10gPSAocnRrX3VpbnQxNikocFVzZXJTdC0+c2RhdGEgJiAweDAwMDBGRkZGKTsKKyAgICBwU21pU3RbNF0gPSAocnRrX3VpbnQxNikoKHBVc2VyU3QtPnNkYXRhICYgMHhGRkZGMDAwMCkgPj4gMTYpOworfQorCitzdGF0aWMgdm9pZCBfcnRsODM2N2Nfc3ZsYW5NYzJzU3RTbWkyVXNlcihydGw4MzY3Y19zdmxhbl9tYzJzX3QgKnBVc2VyU3QsIHJ0a191aW50MTYgKnBTbWlTdCkKK3sKKyAgICBwVXNlclN0LT5zdmlkeCA9IChwU21pU3RbMF0gJiAweDAwM0YpOworICAgIHBVc2VyU3QtPmZvcm1hdCA9IChwU21pU3RbMF0gJiAweDAwNDApID4+IDY7CisgICAgcFVzZXJTdC0+dmFsaWQgPSAocFNtaVN0WzBdICYgMHgwMDgwKSA+PiA3OworCisgICAgcFVzZXJTdC0+c21hc2sgPSBwU21pU3RbMV0gfCAocFNtaVN0WzJdIDw8IDE2KTsKKyAgICBwVXNlclN0LT5zZGF0YSA9IHBTbWlTdFszXSB8IChwU21pU3RbNF0gPDwgMTYpOworfQorCitzdGF0aWMgdm9pZCBfcnRsODM2N2Nfc3ZsYW5TcDJjU3RVc2VyMlNtaShydGw4MzY3Y19zdmxhbl9zMmNfdCAqcFVzZXJTdCwgcnRrX3VpbnQxNiAqcFNtaVN0KQoreworICAgIHBTbWlTdFswXSB8PSAocFVzZXJTdC0+ZHN0cG9ydCAmIDB4MDAwNyk7CisgICAgcFNtaVN0WzBdIHw9IChwVXNlclN0LT5zdmlkeCAmIDB4MDAzRikgPDwgMzsKKyAgICBwU21pU3RbMF0gfD0gKChwVXNlclN0LT5kc3Rwb3J0ICYgMHgwMDA4KSA+PiAzKSA8PCA5OworCisgICAgcFNtaVN0WzFdIHw9IChwVXNlclN0LT52aWQgJiAweDBGRkYpOworICAgIHBTbWlTdFsxXSB8PSAocFVzZXJTdC0+dmFsaWQgJiAweDAwMDEpIDw8IDEyOworfQorCitzdGF0aWMgdm9pZCBfcnRsODM2N2Nfc3ZsYW5TcDJjU3RTbWkyVXNlcihydGw4MzY3Y19zdmxhbl9zMmNfdCAqcFVzZXJTdCwgcnRrX3VpbnQxNiAqcFNtaVN0KQoreworICAgIHBVc2VyU3QtPmRzdHBvcnQgPSAoKChwU21pU3RbMF0gJiAweDAyMDApID4+IDkpIDw8IDMpIHwgKHBTbWlTdFswXSAmIDB4MDAwNyk7CisgICAgcFVzZXJTdC0+c3ZpZHggICA9IChwU21pU3RbMF0gJiAweDAxRjgpID4+IDM7CisgICAgcFVzZXJTdC0+dmlkICAgICA9IChwU21pU3RbMV0gJiAweDBGRkYpOworICAgIHBVc2VyU3QtPnZhbGlkICAgPSAocFNtaVN0WzFdICYgMHgxMDAwKSA+PiAxMjsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1N2bGFuVXBsaW5rUG9ydE1hc2sKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgdXBsaW5rIHBvcnRzIG1hc2sKKyAqIElucHV0OgorICogICAgICBwb3J0TWFzayAgICAtIFVwbGluayBwb3J0IG1hc2sgc2V0dGluZworICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1N2bGFuVXBsaW5rUG9ydE1hc2socnRrX3VpbnQzMiBwb3J0TWFzaykKK3sKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfU1ZMQU5fVVBMSU5LX1BPUlRNQVNLLCBwb3J0TWFzayk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljU3ZsYW5VcGxpbmtQb3J0TWFzaworICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCB1cGxpbmsgcG9ydHMgbWFzaworICogSW5wdXQ6CisgKiAgICAgIHBQb3J0bWFzayAgIC0gVXBsaW5rIHBvcnQgbWFzayBzZXR0aW5nCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljU3ZsYW5VcGxpbmtQb3J0TWFzayhydGtfdWludDMyKiBwUG9ydG1hc2spCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfUkVHX1NWTEFOX1VQTElOS19QT1JUTUFTSywgcFBvcnRtYXNrKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNTdmxhblRwaWQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgYWNjZXB0ZWQgUy1WTEFOIGV0aGVyIHR5cGUuIFRoZSBkZWZhdWx0IGV0aGVyIHR5cGUgb2YgUy1WTEFOIGlzIDB4ODhhOAorICogSW5wdXQ6CisgKiAgICAgIHByb3RvY29sVHlwZSAgICAtIEV0aGVyIHR5cGUgb2YgUy10YWcgZnJhbWUgcGFyc2luZyBpbiB1cGxpbmsgcG9ydHMKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBFdGhlciB0eXBlIG9mIFMtdGFnIGluIDgwMi4xYWQgaXMgMHg4OGE4IGFuZCB0aGVyZSBhcmUgZXhpc3RlZCBldGhlciB0eXBlIDB4OTEwMCBhbmQgMHg5MjAwCisgKiAgICAgIGZvciBRLWluLVEgU0xBTiBkZXNpZ24uIFVzZXIgY2FuIHNldCBtYXRoY2VkIGV0aGVyIHR5cGUgYXMgc2VydmljZSBwcm92aWRlciBzdXBwb3J0ZWQgcHJvdG9jb2wKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1N2bGFuVHBpZChydGtfdWludDMyIHByb3RvY29sVHlwZSkKK3sKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfVlNfVFBJRCwgcHJvdG9jb2xUeXBlKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNSZWcKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgYWNjZXB0ZWQgUy1WTEFOIGV0aGVyIHR5cGUuIFRoZSBkZWZhdWx0IGV0aGVyIHR5cGUgb2YgUy1WTEFOIGlzIDB4ODhhOAorICogSW5wdXQ6CisgKiAgICAgIHBQcm90b2NvbFR5cGUgICAtIEV0aGVyIHR5cGUgb2YgUy10YWcgZnJhbWUgcGFyc2luZyBpbiB1cGxpbmsgcG9ydHMKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNTdmxhblRwaWQocnRrX3VpbnQzMiogcFByb3RvY29sVHlwZSkKK3sKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfVlNfVFBJRCwgcFByb3RvY29sVHlwZSk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljU3ZsYW5Qcmlvcml0eVNlbAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBTVkxBTiBwcmlvcml0eSBmaWVsZCBzZXR0aW5nCisgKiBJbnB1dDoKKyAqICAgICAgcHJpU2VsICAtIFMtcHJpb3JpdHkgYXNzaWdubWVudCBtZXRob2QsIDA6aW50ZXJuYWwgcHJpb3JpdHkgMTpDLXRhZyBwcmlvcml0eSAyOnVzaW5nIFN2bGFuIG1lbWJlciBjb25maWd1cmF0aW9uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNTdmxhblByaW9yaXR5U2VsKHJ0a191aW50MzIgcHJpU2VsKQoreworICAgIGlmKHByaVNlbCA+PSBTUFJJU0VMX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9RT1NfSU5UX1BSSU9SSVRZOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19TVkxBTl9DRkcsIFJUTDgzNjdDX1ZTX1NQUklTRUxfTUFTSywgcHJpU2VsKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNTdmxhblByaW9yaXR5U2VsCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFNWTEFOIHByaW9yaXR5IGZpZWxkIHNldHRpbmcKKyAqIElucHV0OgorICogICAgICBwUHJpU2VsICAgICAtIFMtcHJpb3JpdHkgYXNzaWdubWVudCBtZXRob2QsIDA6aW50ZXJuYWwgcHJpb3JpdHkgMTpDLXRhZyBwcmlvcml0eSAyOnVzaW5nIFN2bGFuIG1lbWJlciBjb25maWd1cmF0aW9uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljU3ZsYW5Qcmlvcml0eVNlbChydGtfdWludDMyKiBwUHJpU2VsKQoreworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfU1ZMQU5fQ0ZHLCBSVEw4MzY3Q19WU19TUFJJU0VMX01BU0ssIHBQcmlTZWwpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1N2bGFuVHJhcFByaW9yaXR5CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHRyYXAgdG8gQ1BVIHByaW9yaXR5IGFzc2lnbm1lbnQKKyAqIElucHV0OgorICogICAgICBwcmlvcml0eSAgICAtIFByaW9yaXR5IGFzc2lnbm1lbnQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9RT1NfSU5UX1BSSU9SSVRZIC0gSW52YWxpZCBwcmlvcml0eQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljU3ZsYW5UcmFwUHJpb3JpdHkocnRrX3VpbnQzMiBwcmlvcml0eSkKK3sKKyAgICBpZihwcmlvcml0eSA+IFJUTDgzNjdDX1BSSU1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9RT1NfSU5UX1BSSU9SSVRZOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19RT1NfVFJBUF9QUklPUklUWTAsIFJUTDgzNjdDX1NWTEFOX1BSSU9JUlRZX01BU0ssIHByaW9yaXR5KTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNTdmxhblRyYXBQcmlvcml0eQorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCB0cmFwIHRvIENQVSBwcmlvcml0eSBhc3NpZ25tZW50CisgKiBJbnB1dDoKKyAqICAgICAgcFByaW9yaXR5ICAgLSBQcmlvcml0eSBhc3NpZ25tZW50CisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljU3ZsYW5UcmFwUHJpb3JpdHkocnRrX3VpbnQzMiogcFByaW9yaXR5KQoreworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfUU9TX1RSQVBfUFJJT1JJVFkwLCBSVEw4MzY3Q19TVkxBTl9QUklPSVJUWV9NQVNLLCBwUHJpb3JpdHkpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1N2bGFuRGVmYXVsdFZsYW4KKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgZGVmYXVsdCBlZ3Jlc3MgU1ZMQU4KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+MTApCisgKiAgICAgIGluZGV4ICAgLSBpbmRleCBTVkxBTiBtZW1iZXIgY29uZmlndXJhdGlvbgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiAgICAgIFJUX0VSUl9TVkxBTl9FTlRSWV9JTkRFWCAgICAtIEludmFsaWQgU1ZMQU4gaW5kZXggcGFyYW1ldGVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNTdmxhbkRlZmF1bHRWbGFuKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBpbmRleCkKK3sKKyAgICByZXRfdCByZXRWYWw7CisKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVElETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICBpZihpbmRleCA+IFJUTDgzNjdDX1NWSURYTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1NWTEFOX0VOVFJZX0lOREVYOworCisgICAgaWYocG9ydCA8IDgpeworICAgICAgICBpZihwb3J0ICYgMSkKKyAgICAgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19TVkxBTl9QT1JUQkFTRURfU1ZJRFhfQ1RSTDAgKyAocG9ydCA+PiAxKSwgUlRMODM2N0NfVlNfUE9SVDFfU1ZJRFhfTUFTSyxpbmRleCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19TVkxBTl9QT1JUQkFTRURfU1ZJRFhfQ1RSTDAgKyAocG9ydCA+PiAxKSwgUlRMODM2N0NfVlNfUE9SVDBfU1ZJRFhfTUFTSyxpbmRleCk7CisgICAgfWVsc2V7CisgICAgICAgIHN3aXRjaChwb3J0KXsKKyAgICAgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfU1ZMQU5fUE9SVEJBU0VEX1NWSURYX0NUUkw0LCBSVEw4MzY3Q19WU19QT1JUOF9TVklEWF9NQVNLLGluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSA5OgorICAgICAgICAgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19TVkxBTl9QT1JUQkFTRURfU1ZJRFhfQ1RSTDQsIFJUTDgzNjdDX1ZTX1BPUlQ5X1NWSURYX01BU0ssaW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIDEwOgorICAgICAgICAgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19TVkxBTl9QT1JUQkFTRURfU1ZJRFhfQ1RSTDUsIFJUTDgzNjdDX1NWTEFOX1BPUlRCQVNFRF9TVklEWF9DVFJMNV9NQVNLLGluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXRWYWw7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljU3ZsYW5EZWZhdWx0VmxhbgorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBkZWZhdWx0IGVncmVzcyBTVkxBTgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH43KQorICogICAgICBwSW5kZXggIC0gaW5kZXggU1ZMQU4gbWVtYmVyIGNvbmZpZ3VyYXRpb24KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljU3ZsYW5EZWZhdWx0VmxhbihydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIqIHBJbmRleCkKK3sKKyAgICByZXRfdCByZXRWYWw7CisKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVElETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICBpZihwb3J0IDwgOCl7CisgICAgICAgIGlmKHBvcnQgJiAxKQorICAgICAgICAgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1NWTEFOX1BPUlRCQVNFRF9TVklEWF9DVFJMMCArIChwb3J0ID4+IDEpLCBSVEw4MzY3Q19WU19QT1JUMV9TVklEWF9NQVNLLHBJbmRleCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19TVkxBTl9QT1JUQkFTRURfU1ZJRFhfQ1RSTDAgKyAocG9ydCA+PiAxKSwgUlRMODM2N0NfVlNfUE9SVDBfU1ZJRFhfTUFTSyxwSW5kZXgpOworICAgIH1lbHNleworICAgICAgICBzd2l0Y2gocG9ydCl7CisgICAgICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICAgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1NWTEFOX1BPUlRCQVNFRF9TVklEWF9DVFJMNCwgUlRMODM2N0NfVlNfUE9SVDhfU1ZJRFhfTUFTSyxwSW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIDk6CisgICAgICAgICAgICAgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1NWTEFOX1BPUlRCQVNFRF9TVklEWF9DVFJMNCwgUlRMODM2N0NfVlNfUE9SVDlfU1ZJRFhfTUFTSyxwSW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIDEwOgorICAgICAgICAgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19TVkxBTl9QT1JUQkFTRURfU1ZJRFhfQ1RSTDUsIFJUTDgzNjdDX1NWTEFOX1BPUlRCQVNFRF9TVklEWF9DVFJMNV9NQVNLLHBJbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmV0VmFsOworCit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljU3ZsYW5JbmdyZXNzVW50YWcKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgYWN0aW9uIHJlY2VpdmVkIHVuLVN0YWcgZnJhbWUgZnJvbSB1bnBsaW5rIHBvcnQKKyAqIElucHV0OgorICogICAgICBtb2RlICAgICAgICAtIDA6RHJvcCAxOlRyYXAgMjpBc3NpZ24gU1ZMQU4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNTdmxhbkluZ3Jlc3NVbnRhZyhydGtfdWludDMyIG1vZGUpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19TVkxBTl9DRkcsIFJUTDgzNjdDX1ZTX1VOVEFHX01BU0ssIG1vZGUpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1N2bGFuSW5ncmVzc1VudGFnCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGFjdGlvbiByZWNlaXZlZCB1bi1TdGFnIGZyYW1lIGZyb20gdW5wbGluayBwb3J0CisgKiBJbnB1dDoKKyAqICAgICAgcE1vZGUgICAgICAgLSAwOkRyb3AgMTpUcmFwIDI6QXNzaWduIFNWTEFOCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljU3ZsYW5JbmdyZXNzVW50YWcocnRrX3VpbnQzMiogcE1vZGUpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19TVkxBTl9DRkcsIFJUTDgzNjdDX1ZTX1VOVEFHX01BU0ssIHBNb2RlKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNTdmxhbkluZ3Jlc3NVbm1hdGNoCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IGFjdGlvbiByZWNlaXZlZCB1bm1hdGNoZWQgU3RhZyBmcmFtZSBmcm9tIHVucGxpbmsgcG9ydAorICogSW5wdXQ6CisgKiAgICAgIG1vZGUgICAgICAgIC0gMDpEcm9wIDE6VHJhcCAyOkFzc2lnbiBTVkxBTgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1N2bGFuSW5ncmVzc1VubWF0Y2gocnRrX3VpbnQzMiBtb2RlKQoreworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfU1ZMQU5fQ0ZHLCBSVEw4MzY3Q19WU19VTk1BVF9NQVNLLCBtb2RlKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNTdmxhbkluZ3Jlc3NVbm1hdGNoCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGFjdGlvbiByZWNlaXZlZCB1bm1hdGNoZWQgU3RhZyBmcmFtZSBmcm9tIHVucGxpbmsgcG9ydAorICogSW5wdXQ6CisgKiAgICAgIHBNb2RlICAgICAgIC0gMDpEcm9wIDE6VHJhcCAyOkFzc2lnbiBTVkxBTgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1N2bGFuSW5ncmVzc1VubWF0Y2gocnRrX3VpbnQzMiogcE1vZGUpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19TVkxBTl9DRkcsIFJUTDgzNjdDX1ZTX1VOTUFUX01BU0ssIHBNb2RlKTsKKworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1N2bGFuRWdyZXNzVW5hc3NpZ24KKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgdW5wbGluayBzdHJlYW0gd2l0aG91dCBlZ3Jlc3MgU1ZJRCBhY3Rpb24KKyAqIElucHV0OgorICogICAgICBlbmFibGVkICAgICAtIDE6VHJhcCBlZ3Jlc3MgdW5hc3NpZ25lZCBmcmFtZXMgdG8gQ1BVLCAwOiBVc2UgU1ZMQU4gc2V0dXAgaW4gVlNfQ1BTVklEWCBhcyBlZ3Jlc3MgU1ZJRAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1N2bGFuRWdyZXNzVW5hc3NpZ24ocnRrX3VpbnQzMiBlbmFibGVkKQoreworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19TVkxBTl9DRkcsIFJUTDgzNjdDX1ZTX1VJRlNFR19PRkZTRVQsIGVuYWJsZWQpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1N2bGFuRWdyZXNzVW5hc3NpZ24KKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgdW5wbGluayBzdHJlYW0gd2l0aG91dCBlZ3Jlc3MgU1ZJRCBhY3Rpb24KKyAqIElucHV0OgorICogICAgICBwRW5hYmxlZCAgICAtIDE6VHJhcCBlZ3Jlc3MgdW5hc3NpZ25lZCBmcmFtZXMgdG8gQ1BVLCAwOiBVc2UgU1ZMQU4gc2V0dXAgaW4gVlNfQ1BTVklEWCBhcyBlZ3Jlc3MgU1ZJRAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1N2bGFuRWdyZXNzVW5hc3NpZ24ocnRrX3VpbnQzMiogcEVuYWJsZWQpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1NWTEFOX0NGRywgUlRMODM2N0NfVlNfVUlGU0VHX09GRlNFVCwgcEVuYWJsZWQpOworfQorCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNTdmxhbk1lbWJlckNvbmZpZ3VyYXRpb24KKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgc3lzdGVtIDY0IFMtdGFnIGNvbnRlbnQKKyAqIElucHV0OgorICogICAgICBpbmRleCAgICAgICAgICAgLSBpbmRleCBvZiA2NCBzLXRhZyBjb25maWd1cmF0aW9uCisgKiAgICAgIHBTdmxhbk1lbUNmZyAgICAtIFNWTEFOIG1lbWJlciBjb25maWd1cmF0aW9uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9TVkxBTl9FTlRSWV9JTkRFWCAgICAtIEludmFsaWQgU1ZMQU4gaW5kZXggcGFyYW1ldGVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNTdmxhbk1lbWJlckNvbmZpZ3VyYXRpb24ocnRrX3VpbnQzMiBpbmRleCwgcnRsODM2N2Nfc3ZsYW5fbWVtY29uZl90KiBwU3ZsYW5NZW1DZmcpCit7CisgICAgcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcmVnQWRkciwgcmVnRGF0YTsKKyAgICBydGtfdWludDE2ICphY2Nlc3NQdHI7CisgICAgcnRrX3VpbnQzMiBpOworICAgIHJ0a191aW50MTYgc21pU3ZsYW5NZW1Db25mW1JUTDgzNjdDX1NWTEFOX01FTUNPTkZfTEVOXTsKKworICAgIGlmKGluZGV4ID4gUlRMODM2N0NfU1ZJRFhNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfU1ZMQU5fRU5UUllfSU5ERVg7CisKKyAgICBtZW1zZXQoc21pU3ZsYW5NZW1Db25mLCAweDAwLCBzaXplb2YocnRrX3VpbnQxNikgKiBSVEw4MzY3Q19TVkxBTl9NRU1DT05GX0xFTik7CisgICAgX3J0bDgzNjdjX3N2bGFuQ29uZlN0VXNlcjJTbWkocFN2bGFuTWVtQ2ZnLCBzbWlTdmxhbk1lbUNvbmYpOworCisgICAgYWNjZXNzUHRyID0gc21pU3ZsYW5NZW1Db25mOworCisgICAgcmVnRGF0YSA9ICphY2Nlc3NQdHI7CisgICAgZm9yKGkgPSAwOyBpIDwgMzsgaSsrKQorICAgIHsKKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19TVkxBTl9NRU1CRVJDRkdfQkFTRV9SRUcoaW5kZXgpICsgaSwgcmVnRGF0YSk7CisgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIGFjY2Vzc1B0ciArKzsKKyAgICAgICAgcmVnRGF0YSA9ICphY2Nlc3NQdHI7CisgICAgfQorCisgICAgaWYoaW5kZXggPCA2MykKKyAgICAgICAgcmVnQWRkciA9IFJUTDgzNjdDX1JFR19TVkxBTl9NRU1CRVJDRkcwX0NUUkw0K2luZGV4OworICAgIGVsc2UgaWYoaW5kZXggPT0gNjMpCisgICAgICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHNjNfQ1RSTDQ7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKHJlZ0FkZHIsIHJlZ0RhdGEpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworCit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljU3ZsYW5NZW1iZXJDb25maWd1cmF0aW9uCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHN5c3RlbSA2NCBTLXRhZyBjb250ZW50CisgKiBJbnB1dDoKKyAqICAgICAgaW5kZXggICAgICAgICAgIC0gaW5kZXggb2YgNjQgcy10YWcgY29uZmlndXJhdGlvbgorICogICAgICBwU3ZsYW5NZW1DZmcgICAgLSBTVkxBTiBtZW1iZXIgY29uZmlndXJhdGlvbgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfU1ZMQU5fRU5UUllfSU5ERVggICAgLSBJbnZhbGlkIFNWTEFOIGluZGV4IHBhcmFtZXRlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljU3ZsYW5NZW1iZXJDb25maWd1cmF0aW9uKHJ0a191aW50MzIgaW5kZXgscnRsODM2N2Nfc3ZsYW5fbWVtY29uZl90KiBwU3ZsYW5NZW1DZmcpCit7CisgICAgcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcmVnQWRkcixyZWdEYXRhOworICAgIHJ0a191aW50MTYgKmFjY2Vzc1B0cjsKKyAgICBydGtfdWludDMyIGk7CisgICAgcnRrX3VpbnQxNiBzbWlTdmxhbk1lbUNvbmZbUlRMODM2N0NfU1ZMQU5fTUVNQ09ORl9MRU5dOworCisgICAgaWYoaW5kZXggPiBSVEw4MzY3Q19TVklEWE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9TVkxBTl9FTlRSWV9JTkRFWDsKKworICAgIG1lbXNldChzbWlTdmxhbk1lbUNvbmYsIDB4MDAsIHNpemVvZihydGtfdWludDE2KSAqIFJUTDgzNjdDX1NWTEFOX01FTUNPTkZfTEVOKTsKKworICAgIGFjY2Vzc1B0ciA9IHNtaVN2bGFuTWVtQ29uZjsKKworICAgIGZvcihpID0gMDsgaSA8IDM7IGkrKykKKyAgICB7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfU1ZMQU5fTUVNQkVSQ0ZHX0JBU0VfUkVHKGluZGV4KSArIGksICZyZWdEYXRhKTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgKmFjY2Vzc1B0ciA9IHJlZ0RhdGE7CisKKyAgICAgICAgYWNjZXNzUHRyICsrOworICAgIH0KKworICAgIGlmKGluZGV4IDwgNjMpCisgICAgICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19SRUdfU1ZMQU5fTUVNQkVSQ0ZHMF9DVFJMNCtpbmRleDsKKyAgICBlbHNlIGlmKGluZGV4ID09IDYzKQorICAgICAgICByZWdBZGRyID0gUlRMODM2N0NfUkVHX1NWTEFOX01FTUJFUkNGRzYzX0NUUkw0OworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhyZWdBZGRyLCAmcmVnRGF0YSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICphY2Nlc3NQdHIgPSByZWdEYXRhOworCisgICAgX3J0bDgzNjdjX3N2bGFuQ29uZlN0U21pMlVzZXIocFN2bGFuTWVtQ2ZnLCBzbWlTdmxhbk1lbUNvbmYpOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNTdmxhbkMyU0NvbmYKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgU1ZMQU4gQzJTIHRhYmxlCisgKiBJbnB1dDoKKyAqICAgICAgaW5kZXggICAtIGluZGV4IG9mIDEyOCBTdmxhbiBDMlMgY29uZmlndXJhdGlvbgorICogICAgICBldmlkICAgIC0gRW5oYW5jZWQgVklECisgKiAgICAgIHBvcnRtYXNrICAgIC0gYXZhaWxhYmxlIGMycyBwb3J0IG1hc2sKKyAqICAgICAgc3ZpZHggICAtIGluZGV4IG9mIDY0IFN2bGFuIG1lbWJlciBjb25maWd1cmF0aW9uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0VOVFJZX0lOREVYICAtIEludmFsaWQgZW50cnkgaW5kZXgKKyAqIE5vdGU6CisgKiAgICAgIEFTSUMgd2lsbCBjaGVjayB1cHN0cmVhbSdzIFZJRCBhbmQgYXNzaWduIHJlbGF0ZWQgU1ZJRCB0byBtYXRoZWQgcGFja2V0CisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNTdmxhbkMyU0NvbmYocnRrX3VpbnQzMiBpbmRleCwgcnRrX3VpbnQzMiBldmlkLCBydGtfdWludDMyIHBvcnRtYXNrLCBydGtfdWludDMyIHN2aWR4KQoreworICAgIHJldF90IHJldFZhbDsKKworICAgIGlmKGluZGV4ID4gUlRMODM2N0NfQzJTSURYTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX0VOVFJZX0lOREVYOworCisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19TVkxBTl9DMlNDRkdfQkFTRV9SRUcoaW5kZXgpLCBzdmlkeCk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfU1ZMQU5fQzJTQ0ZHX0JBU0VfUkVHKGluZGV4KSArIDEsIHBvcnRtYXNrKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19TVkxBTl9DMlNDRkdfQkFTRV9SRUcoaW5kZXgpICsgMiwgZXZpZCk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljU3ZsYW5DMlNDb25mCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFNWTEFOIEMyUyB0YWJsZQorICogSW5wdXQ6CisgKiAgICAgIGluZGV4ICAgLSBpbmRleCBvZiAxMjggU3ZsYW4gQzJTIGNvbmZpZ3VyYXRpb24KKyAqICAgICAgcEV2aWQgICAtIEVuaGFuY2VkIFZJRAorICogICAgICBwUG9ydG1hc2sgICAtIGF2YWlsYWJsZSBjMnMgcG9ydCBtYXNrCisgKiAgICAgIHBTdmlkeCAgLSBpbmRleCBvZiA2NCBTdmxhbiBtZW1iZXIgY29uZmlndXJhdGlvbgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9FTlRSWV9JTkRFWCAgLSBJbnZhbGlkIGVudHJ5IGluZGV4CisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNTdmxhbkMyU0NvbmYocnRrX3VpbnQzMiBpbmRleCwgcnRrX3VpbnQzMiogcEV2aWQsIHJ0a191aW50MzIqIHBQb3J0bWFzaywgcnRrX3VpbnQzMiogcFN2aWR4KQoreworICAgIHJldF90IHJldFZhbDsKKworICAgIGlmKGluZGV4ID4gUlRMODM2N0NfQzJTSURYTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX0VOVFJZX0lOREVYOworCisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19TVkxBTl9DMlNDRkdfQkFTRV9SRUcoaW5kZXgpLCBwU3ZpZHgpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX1NWTEFOX0MyU0NGR19CQVNFX1JFRyhpbmRleCkgKyAxLCBwUG9ydG1hc2spOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX1NWTEFOX0MyU0NGR19CQVNFX1JFRyhpbmRleCkgKyAyLCBwRXZpZCk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNTdmxhbk1DMlNDb25mCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHN5c3RlbSBNQzJTIGNvbnRlbnQKKyAqIElucHV0OgorICogICAgICBpbmRleCAgICAgICAgICAgLSBpbmRleCBvZiAzMiBTVkxBTiAzMiBNQzJTIGNvbmZpZ3VyYXRpb24KKyAqICAgICAgcFN2bGFuTWMyc0NmZyAgIC0gU1ZMQU4gTXVsdGljYXN0IHRvIFNWTEFOIG1lbWJlciBjb25maWd1cmF0aW9uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0VOVFJZX0lOREVYICAtIEludmFsaWQgZW50cnkgaW5kZXgKKyAqIE5vdGU6CisgKiAgICAgIElmIHVwc3RyZWFtIHBhY2tldCBpcyBMMiBtdWx0aWNhc3Qgb3IgSVB2NCBtdWx0aWNhc3QgcGFja2V0IGFuZCBETUFDL0RJUCBpcyBtYXRjaGVkIE1DMlMKKyAqICAgICAgY29uZmlndXJhdGlvbiwgQVNJQyB3aWxsIGFzc2lnbiBlZ3Jlc3MgU1ZJRCB0byB0aGUgcGFja2V0CisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNTdmxhbk1DMlNDb25mKHJ0a191aW50MzIgaW5kZXgscnRsODM2N2Nfc3ZsYW5fbWMyc190KiBwU3ZsYW5NYzJzQ2ZnKQoreworICAgIHJldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHJlZ0RhdGE7CisgICAgcnRrX3VpbnQxNiAqYWNjZXNzUHRyOworICAgIHJ0a191aW50MzIgaTsKKyAgICBydGtfdWludDE2IHNtaVN2bGFuTUMyU1tSVEw4MzY3Q19TVkxBTl9NQzJTX0xFTl07CisKKyAgICBpZihpbmRleCA+IFJUTDgzNjdDX01DMlNJRFhNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfRU5UUllfSU5ERVg7CisKKyAgICBtZW1zZXQoc21pU3ZsYW5NQzJTLCAweDAwLCBzaXplb2YocnRrX3VpbnQxNikgKiBSVEw4MzY3Q19TVkxBTl9NQzJTX0xFTik7CisgICAgX3J0bDgzNjdjX3N2bGFuTWMyc1N0VXNlcjJTbWkocFN2bGFuTWMyc0NmZywgc21pU3ZsYW5NQzJTKTsKKworICAgIGFjY2Vzc1B0ciA9IHNtaVN2bGFuTUMyUzsKKworICAgIHJlZ0RhdGEgPSAqYWNjZXNzUHRyOworICAgIGZvcihpID0gMDsgaSA8IDU7IGkrKykKKyAgICB7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWV9CQVNFX1JFRyhpbmRleCkgKyBpLCByZWdEYXRhKTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgYWNjZXNzUHRyICsrOworICAgICAgICByZWdEYXRhID0gKmFjY2Vzc1B0cjsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0VmFsOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1N2bGFuTUMyU0NvbmYKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgc3lzdGVtIE1DMlMgY29udGVudAorICogSW5wdXQ6CisgKiAgICAgIGluZGV4ICAgICAgICAgICAtIGluZGV4IG9mIDMyIFNWTEFOIDMyIE1DMlMgY29uZmlndXJhdGlvbgorICogICAgICBwU3ZsYW5NYzJzQ2ZnICAgLSBTVkxBTiBNdWx0aWNhc3QgdG8gU1ZMQU4gbWVtYmVyIGNvbmZpZ3VyYXRpb24KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfRU5UUllfSU5ERVggIC0gSW52YWxpZCBlbnRyeSBpbmRleAorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljU3ZsYW5NQzJTQ29uZihydGtfdWludDMyIGluZGV4LCBydGw4MzY3Y19zdmxhbl9tYzJzX3QqIHBTdmxhbk1jMnNDZmcpCit7CisgICAgcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcmVnRGF0YTsKKyAgICBydGtfdWludDE2ICphY2Nlc3NQdHI7CisgICAgcnRrX3VpbnQzMiBpOworICAgIHJ0a191aW50MTYgc21pU3ZsYW5NQzJTW1JUTDgzNjdDX1NWTEFOX01DMlNfTEVOXTsKKworICAgIGlmKGluZGV4ID4gUlRMODM2N0NfTUMyU0lEWE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9FTlRSWV9JTkRFWDsKKworICAgIG1lbXNldChzbWlTdmxhbk1DMlMsIDB4MDAsIHNpemVvZihydGtfdWludDE2KSAqIFJUTDgzNjdDX1NWTEFOX01DMlNfTEVOKTsKKworICAgIGFjY2Vzc1B0ciA9IHNtaVN2bGFuTUMyUzsKKworICAgIGZvcihpID0gMDsgaSA8IDU7IGkrKykKKyAgICB7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfU1ZMQU5fTUNBU1QyU19FTlRSWV9CQVNFX1JFRyhpbmRleCkgKyBpLCAmcmVnRGF0YSk7CisgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICphY2Nlc3NQdHIgPSByZWdEYXRhOworICAgICAgICBhY2Nlc3NQdHIgKys7CisgICAgfQorCisKKyAgICBfcnRsODM2N2Nfc3ZsYW5NYzJzU3RTbWkyVXNlcihwU3ZsYW5NYzJzQ2ZnLCBzbWlTdmxhbk1DMlMpOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1N2bGFuU1AyQ0NvbmYKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgc3lzdGVtIDEyOCBTUDJDIGNvbnRlbnQKKyAqIElucHV0OgorICogICAgICBpbmRleCAgICAgICAgICAgLSBpbmRleCBvZiAxMjggU1ZMQU4gJiBQb3J0IHRvIENWTEFOIGNvbmZpZ3VyYXRpb24KKyAqICAgICAgcFN2bGFuU3AyY0NmZyAgIC0gU1ZMQU4gJiBQb3J0IHRvIENWTEFOIGNvbmZpZ3VyYXRpb24KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfRU5UUllfSU5ERVggIC0gSW52YWxpZCBlbnRyeSBpbmRleAorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljU3ZsYW5TUDJDQ29uZihydGtfdWludDMyIGluZGV4LCBydGw4MzY3Y19zdmxhbl9zMmNfdCogcFN2bGFuU3AyY0NmZykKK3sKKyAgICByZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiByZWdEYXRhOworICAgIHJ0a191aW50MTYgKmFjY2Vzc1B0cjsKKyAgICBydGtfdWludDMyIGk7CisgICAgcnRrX3VpbnQxNiBzbWlTdmxhblNQMkNbUlRMODM2N0NfU1ZMQU5fU1AyQ19MRU5dOworCisgICAgaWYoaW5kZXggPiBSVEw4MzY3Q19TUDJDTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX0VOVFJZX0lOREVYOworCisgICAgbWVtc2V0KHNtaVN2bGFuU1AyQywgMHgwMCwgc2l6ZW9mKHJ0a191aW50MTYpICogUlRMODM2N0NfU1ZMQU5fU1AyQ19MRU4pOworICAgIF9ydGw4MzY3Y19zdmxhblNwMmNTdFVzZXIyU21pKHBTdmxhblNwMmNDZmcsc21pU3ZsYW5TUDJDKTsKKworICAgIGFjY2Vzc1B0ciA9IHNtaVN2bGFuU1AyQzsKKworICAgIHJlZ0RhdGEgPSAqYWNjZXNzUHRyOworICAgIGZvcihpID0gMDsgaSA8IDI7IGkrKykKKyAgICB7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfU1ZMQU5fUzJDX0VOVFJZX0JBU0VfUkVHKGluZGV4KSArIGksIHJlZ0RhdGEpOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBhY2Nlc3NQdHIgKys7CisgICAgICAgIHJlZ0RhdGEgPSAqYWNjZXNzUHRyOworICAgIH0KKworICAgIHJldHVybiByZXRWYWw7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljU3ZsYW5TUDJDQ29uZgorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBzeXN0ZW0gMTI4IFNQMkMgY29udGVudAorICogSW5wdXQ6CisgKiAgICAgIGluZGV4ICAgICAgICAgICAtIGluZGV4IG9mIDEyOCBTVkxBTiAmIFBvcnQgdG8gQ1ZMQU4gY29uZmlndXJhdGlvbgorICogICAgICBwU3ZsYW5TcDJjQ2ZnICAgLSBTVkxBTiAmIFBvcnQgdG8gQ1ZMQU4gY29uZmlndXJhdGlvbgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9FTlRSWV9JTkRFWCAgLSBJbnZhbGlkIGVudHJ5IGluZGV4CisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNTdmxhblNQMkNDb25mKHJ0a191aW50MzIgaW5kZXgscnRsODM2N2Nfc3ZsYW5fczJjX3QqIHBTdmxhblNwMmNDZmcpCit7CisgICAgcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcmVnRGF0YTsKKyAgICBydGtfdWludDE2ICphY2Nlc3NQdHI7CisgICAgcnRrX3VpbnQzMiBpOworICAgIHJ0a191aW50MTYgc21pU3ZsYW5TUDJDW1JUTDgzNjdDX1NWTEFOX1NQMkNfTEVOXTsKKworICAgIGlmKGluZGV4ID4gUlRMODM2N0NfU1AyQ01BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9FTlRSWV9JTkRFWDsKKworICAgIG1lbXNldChzbWlTdmxhblNQMkMsIDB4MDAsIHNpemVvZihydGtfdWludDE2KSAqIFJUTDgzNjdDX1NWTEFOX1NQMkNfTEVOKTsKKworICAgIGFjY2Vzc1B0ciA9IHNtaVN2bGFuU1AyQzsKKworICAgIGZvcihpID0gMDsgaSA8IDI7IGkrKykKKyAgICB7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfU1ZMQU5fUzJDX0VOVFJZX0JBU0VfUkVHKGluZGV4KSArIGksICZyZWdEYXRhKTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgKmFjY2Vzc1B0ciA9IHJlZ0RhdGE7CisKKyAgICAgICAgYWNjZXNzUHRyICsrOworICAgIH0KKworICAgIF9ydGw4MzY3Y19zdmxhblNwMmNTdFNtaTJVc2VyKHBTdmxhblNwMmNDZmcsIHNtaVN2bGFuU1AyQyk7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1N2bGFuRG1hY0N2aWRTZWwKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgZG93bnN0cmVhbSBDVklEIGRlY2lzaW9uIGJ5IERNQUMKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjcpCisgKiAgICAgIGVuYWJsZWQgICAgIC0gMDpkaXNhYmxlZCwgMTplbmFibGVkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1N2bGFuRG1hY0N2aWRTZWwocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGVuYWJsZWQpCit7CisgICAgaWYocG9ydCA+IFJUTDgzNjdDX1BPUlRJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgaWYocG9ydCA8IDgpCisgICAgICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19TVkxBTl9DRkcsIFJUTDgzNjdDX1ZTX1BPUlQwX0RNQUNWSURTRUxfT0ZGU0VUICsgcG9ydCwgZW5hYmxlZCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfU1ZMQU5fQ0ZHX0VYVCwgUlRMODM2N0NfVlNfUE9SVDhfRE1BQ1ZJRFNFTF9PRkZTRVQgKyAocG9ydC04KSwgZW5hYmxlZCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljU3ZsYW5EbWFjQ3ZpZFNlbAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBkb3duc3RyZWFtIENWSUQgZGVjaXNpb24gYnkgRE1BQworICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgcEVuYWJsZWQgICAgLSAwOmRpc2FibGVkLCAxOmVuYWJsZWQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljU3ZsYW5EbWFjQ3ZpZFNlbChydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIqIHBFbmFibGVkKQoreworICAgIGlmKHBvcnQgPiBSVEw4MzY3Q19QT1JUSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIGlmKHBvcnQgPCA4KQorICAgICAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfU1ZMQU5fQ0ZHLCBSVEw4MzY3Q19WU19QT1JUMF9ETUFDVklEU0VMX09GRlNFVCArIHBvcnQsIHBFbmFibGVkKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19TVkxBTl9DRkdfRVhULCBSVEw4MzY3Q19WU19QT1JUOF9ETUFDVklEU0VMX09GRlNFVCArIChwb3J0LTgpLCBwRW5hYmxlZCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljU3ZsYW5VbnRhZ1ZsYW4KKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgZGVmYXVsdCBpbmdyZXNzIHVudGFnIFNWTEFOCisgKiBJbnB1dDoKKyAqICAgICAgaW5kZXggICAtIGluZGV4IFNWTEFOIG1lbWJlciBjb25maWd1cmF0aW9uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9TVkxBTl9FTlRSWV9JTkRFWCAgICAtIEludmFsaWQgU1ZMQU4gaW5kZXggcGFyYW1ldGVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNTdmxhblVudGFnVmxhbihydGtfdWludDMyIGluZGV4KQoreworICAgIGlmKGluZGV4ID4gUlRMODM2N0NfU1ZJRFhNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfU1ZMQU5fRU5UUllfSU5ERVg7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1NWTEFOX1VOVEFHX1VOTUFUX0NGRywgUlRMODM2N0NfVlNfVU5UQUdfU1ZJRFhfTUFTSywgaW5kZXgpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1N2bGFuVW50YWdWbGFuCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGRlZmF1bHQgaW5ncmVzcyB1bnRhZyBTVkxBTgorICogSW5wdXQ6CisgKiAgICAgIHBJbmRleCAgLSBpbmRleCBTVkxBTiBtZW1iZXIgY29uZmlndXJhdGlvbgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljU3ZsYW5VbnRhZ1ZsYW4ocnRrX3VpbnQzMiogcEluZGV4KQoreworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfU1ZMQU5fVU5UQUdfVU5NQVRfQ0ZHLCBSVEw4MzY3Q19WU19VTlRBR19TVklEWF9NQVNLLCBwSW5kZXgpOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljU3ZsYW5Vbm1hdGNoVmxhbgorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBkZWZhdWx0IGluZ3Jlc3MgdW5tYXRjaCBTVkxBTgorICogSW5wdXQ6CisgKiAgICAgIGluZGV4ICAgLSBpbmRleCBTVkxBTiBtZW1iZXIgY29uZmlndXJhdGlvbgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfU1ZMQU5fRU5UUllfSU5ERVggICAgLSBJbnZhbGlkIFNWTEFOIGluZGV4IHBhcmFtZXRlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljU3ZsYW5Vbm1hdGNoVmxhbihydGtfdWludDMyIGluZGV4KQoreworICAgIGlmKGluZGV4ID4gUlRMODM2N0NfU1ZJRFhNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfU1ZMQU5fRU5UUllfSU5ERVg7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1NWTEFOX1VOVEFHX1VOTUFUX0NGRywgUlRMODM2N0NfVlNfVU5NQVRfU1ZJRFhfTUFTSywgaW5kZXgpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1N2bGFuVW5tYXRjaFZsYW4KKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgZGVmYXVsdCBpbmdyZXNzIHVubWF0Y2ggU1ZMQU4KKyAqIElucHV0OgorICogICAgICBwSW5kZXggIC0gaW5kZXggU1ZMQU4gbWVtYmVyIGNvbmZpZ3VyYXRpb24KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1N2bGFuVW5tYXRjaFZsYW4ocnRrX3VpbnQzMiogcEluZGV4KQoreworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfU1ZMQU5fVU5UQUdfVU5NQVRfQ0ZHLCBSVEw4MzY3Q19WU19VTk1BVF9TVklEWF9NQVNLLCBwSW5kZXgpOworfQorCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNTdmxhbkxvb2t1cFR5cGUKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgc3ZsYW4gbG9va3VwIHRhYmxlIHNlbGVjdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHR5cGUgICAgLSBsb29rdXAgdHlwZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljU3ZsYW5Mb29rdXBUeXBlKHJ0a191aW50MzIgdHlwZSkKK3sKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfU1ZMQU5fTE9PS1VQX1RZUEUsIFJUTDgzNjdDX1NWTEFOX0xPT0tVUF9UWVBFX09GRlNFVCwgdHlwZSk7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNTdmxhbkxvb2t1cFR5cGUKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgc3ZsYW4gbG9va3VwIHRhYmxlIHNlbGVjdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHBUeXBlICAgLSBsb29rdXAgdHlwZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljU3ZsYW5Mb29rdXBUeXBlKHJ0a191aW50MzIqIHBUeXBlKQoreworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19TVkxBTl9MT09LVVBfVFlQRSwgUlRMODM2N0NfU1ZMQU5fTE9PS1VQX1RZUEVfT0ZGU0VULCBwVHlwZSk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfdHJ1bmtpbmcuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X3RydW5raW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZkNGMyOQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X3RydW5raW5nLmMKQEAgLTAsMCArMSwzNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogJFJldmlzaW9uOiA3NjMwNiAkCisgKiAkRGF0ZTogMjAxNy0wMy0wOCAxNToxMzo1OCArMDgwMCAo6YCx5LiJLCAwOCDkuInmnIggMjAxNykgJAorICoKKyAqIFB1cnBvc2UgOiBSVEw4MzY3QyBzd2l0Y2ggaGlnaC1sZXZlbCBBUEkgZm9yIFJUTDgzNjdDCisgKiBGZWF0dXJlIDogUG9ydCB0cnVua2luZyByZWxhdGVkIGZ1bmN0aW9ucworICoKKyAqLworCisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl90cnVua2luZy5oPgorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1RydW5raW5nTW9kZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwb3J0IHRydW5raW5nIG1vZGUKKyAqIElucHV0OgorICogICAgICBtb2RlICAgIC0gMTpkdW1iIDA6dXNlciBkZWZpbmVkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljVHJ1bmtpbmdNb2RlKHJ0a191aW50MzIgbW9kZSkKK3sKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfUE9SVF9UUlVOS19DVFJMLCBSVEw4MzY3Q19QT1JUX1RSVU5LX0RVTUJfT0ZGU0VULCBtb2RlKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNUcnVua2luZ01vZGUKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcG9ydCB0cnVua2luZyBtb2RlCisgKiBJbnB1dDoKKyAqICAgICAgcE1vZGUgICAtIDE6ZHVtYiAwOnVzZXIgZGVmaW5lZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1RydW5raW5nTW9kZShydGtfdWludDMyKiBwTW9kZSkKK3sKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfUE9SVF9UUlVOS19DVFJMLCBSVEw4MzY3Q19QT1JUX1RSVU5LX0RVTUJfT0ZGU0VULCBwTW9kZSk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljVHJ1bmtpbmdGYworICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwb3J0IHRydW5raW5nIGZsb3cgY29udHJvbAorICogSW5wdXQ6CisgKiAgICAgIGdyb3VwICAgICAgIC0gVHJ1bmsgR3JvdXAgSUQKKyAqICAgICAgZW5hYmxlZCAgICAgLSAwOmRpc2FibGUsIDE6ZW5hYmxlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljVHJ1bmtpbmdGYyhydGtfdWludDMyIGdyb3VwLCBydGtfdWludDMyIGVuYWJsZWQpCit7CisgICAgcmV0X3QgICAgICAgcmV0VmFsOworCisgICAgaWYoZ3JvdXAgPiBSVEw4MzY3Q19NQVhfVFJVTktfR0lEKQorICAgICAgICByZXR1cm4gUlRfRVJSX0xBX1RSVU5LX0lEOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1BPUlRfVFJVTktfRFJPUF9DVFJMLCBSVEw4MzY3Q19QT1JUX1RSVU5LX0RST1BfQ1RSTF9PRkZTRVQsIEVOQUJMRUQpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfUE9SVF9UUlVOS19GTE9XQ1RSTCwgKFJUTDgzNjdDX0VOX0ZMT1dDVFJMX1RHMF9PRkZTRVQgKyBncm91cCksIGVuYWJsZWQpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1RydW5raW5nRmMKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcG9ydCB0cnVua2luZyBmbG93IGNvbnRyb2wKKyAqIElucHV0OgorICogICAgICBncm91cCAgICAgICAtIFRydW5rIEdyb3VwIElECisgKiAgICAgIHBFbmFibGVkICAgIC0gMDpkaXNhYmxlLCAxOmVuYWJsZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1RydW5raW5nRmMocnRrX3VpbnQzMiBncm91cCwgcnRrX3VpbnQzMiogcEVuYWJsZWQpCit7CisgICAgaWYoZ3JvdXAgPiBSVEw4MzY3Q19NQVhfVFJVTktfR0lEKQorICAgICAgICByZXR1cm4gUlRfRVJSX0xBX1RSVU5LX0lEOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1BPUlRfVFJVTktfRkxPV0NUUkwsIChSVEw4MzY3Q19FTl9GTE9XQ1RSTF9URzBfT0ZGU0VUICsgZ3JvdXApLCBwRW5hYmxlZCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljVHJ1bmtpbmdHcm91cAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCB0cnVua2luZyBncm91cCBhdmFpbGFibGUgcG9ydCBtYXNrCisgKiBJbnB1dDoKKyAqICAgICAgZ3JvdXAgICAgICAgLSBUcnVuayBHcm91cCBJRAorICogICAgICBwb3J0bWFzayAgICAtIExvZ2ljIHRydW5raW5nIGVuYWJsZSBwb3J0IG1hc2ssIG1heCA0IHBvcnRzCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljVHJ1bmtpbmdHcm91cChydGtfdWludDMyIGdyb3VwLCBydGtfdWludDMyIHBvcnRtYXNrKQoreworICAgIGlmKGdyb3VwID4gUlRMODM2N0NfTUFYX1RSVU5LX0dJRCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9MQV9UUlVOS19JRDsKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1BPUlRfVFJVTktfR1JPVVBfTUFTSywgUlRMODM2N0NfUE9SVF9UUlVOS19HUk9VUDBfTUFTS19NQVNLIDw8IChncm91cCAqIDQpLCBwb3J0bWFzayk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljVHJ1bmtpbmdHcm91cAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCB0cnVua2luZyBncm91cCBhdmFpbGFibGUgcG9ydCBtYXNrCisgKiBJbnB1dDoKKyAqICAgICAgZ3JvdXAgICAgICAgLSBUcnVuayBHcm91cCBJRAorICogT3V0cHV0OgorICogICAgICBwUG9ydG1hc2sgICAtIExvZ2ljIHRydW5raW5nIGVuYWJsZSBwb3J0IG1hc2ssIG1heCA0IHBvcnRzCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1RydW5raW5nR3JvdXAocnRrX3VpbnQzMiBncm91cCwgcnRrX3VpbnQzMiogcFBvcnRtYXNrKQoreworICAgIGlmKGdyb3VwID4gUlRMODM2N0NfTUFYX1RSVU5LX0dJRCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9MQV9UUlVOS19JRDsKKworICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfUE9SVF9UUlVOS19HUk9VUF9NQVNLLCBSVEw4MzY3Q19QT1JUX1RSVU5LX0dST1VQMF9NQVNLX01BU0sgPDwgKGdyb3VwICogNCksIHBQb3J0bWFzayk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljVHJ1bmtpbmdGbG9vZAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwb3J0IHRydW5raW5nIGZsb29kIGZ1bmN0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgZW5hYmxlZCAgICAgLSBQb3J0IHRydW5raW5nIGZsb29kaW5nIGZ1bmN0aW9uIDA6ZGlzYWJsZSAxOmVuYWJsZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1RydW5raW5nRmxvb2QocnRrX3VpbnQzMiBlbmFibGVkKQoreworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19QT1JUX1RSVU5LX0NUUkwsIFJUTDgzNjdDX1BPUlRfVFJVTktfRkxPT0RfT0ZGU0VULCBlbmFibGVkKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNUcnVua2luZ0Zsb29kCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHBvcnQgdHJ1bmtpbmcgZmxvb2QgZnVuY3Rpb24KKyAqIElucHV0OgorICogICAgICBwRW5hYmxlZCAgICAtIFBvcnQgdHJ1bmtpbmcgZmxvb2RpbmcgZnVuY3Rpb24gMDpkaXNhYmxlIDE6ZW5hYmxlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljVHJ1bmtpbmdGbG9vZChydGtfdWludDMyKiBwRW5hYmxlZCkKK3sKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfUE9SVF9UUlVOS19DVFJMLCBSVEw4MzY3Q19QT1JUX1RSVU5LX0ZMT09EX09GRlNFVCwgcEVuYWJsZWQpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1RydW5raW5nSGFzaFNlbGVjdAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwb3J0IHRydW5raW5nIGhhc2ggc2VsZWN0IHNvdXJjZXMKKyAqIElucHV0OgorICogICAgICBoYXNoc2VsICAgICAtIGhhc2ggc291cmNlcyBtYXNrCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgNyBiaXRzIG1hc2sgZm9yIGxpbmsgYWdncmVnYXRpb24gZ3JvdXAwIGhhc2ggcGFyYW1ldGVyIHNlbGVjdGlvbiB7RElQLCBTSVAsIERNQUMsIFNNQUMsIFNQQX0KKyAqICAgICAgMGIwMDAwMDAxOiBTUEEKKyAqICAgICAgMGIwMDAwMDEwOiBTTUFDCisgKiAgICAgIDBiMDAwMDEwMDogRE1BQworICogICAgICAwYjAwMDEwMDA6IFNJUAorICogICAgICAwYjAwMTAwMDA6IERJUAorICogICAgICAwYjAxMDAwMDA6IFRDUC9VRFAgU291cmNlIFBvcnQKKyAqICAgICAgMGIxMDAwMDAwOiBUQ1AvVURQIERlc3RpbmF0aW9uIFBvcnQKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1RydW5raW5nSGFzaFNlbGVjdChydGtfdWludDMyIGhhc2hzZWwpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19QT1JUX1RSVU5LX0NUUkwsIFJUTDgzNjdDX1BPUlRfVFJVTktfSEFTSF9NQVNLLCBoYXNoc2VsKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNUcnVua2luZ0hhc2hTZWxlY3QKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcG9ydCB0cnVua2luZyBoYXNoIHNlbGVjdCBzb3VyY2VzCisgKiBJbnB1dDoKKyAqICAgICAgcEhhc2hzZWwgICAgLSBoYXNoIHNvdXJjZXMgbWFzaworICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1RydW5raW5nSGFzaFNlbGVjdChydGtfdWludDMyKiBwSGFzaHNlbCkKK3sKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1BPUlRfVFJVTktfQ1RSTCwgUlRMODM2N0NfUE9SVF9UUlVOS19IQVNIX01BU0ssIHBIYXNoc2VsKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNRZXVldUVtcHR5U3RhdHVzCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGN1cnJlbnQgb3V0cHV0IHF1ZXVlIGlmIGVtcHR5IHN0YXR1cworICogSW5wdXQ6CisgKiAgICAgIHBvcnRtYXNrICAgIC0gcXVldWUgZW1wdHkgcG9ydCBtYXNrCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljUWV1ZXVFbXB0eVN0YXR1cyhydGtfdWludDMyKiBwb3J0bWFzaykKK3sKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19SRUdfUE9SVF9RRU1QVFksIHBvcnRtYXNrKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNUcnVua2luZ0hhc2hUYWJsZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwb3J0IHRydW5raW5nIGhhc2ggdmFsdWUgbWFwcGluZyB0YWJsZQorICogSW5wdXQ6CisgKiAgICAgIGhhc2h2YWwgICAgIC0gaGFzaGluZyB2YWx1ZSAwLTE1CisgKiAgICAgIHBvcnRJZCAgICAgIC0gdHJ1bmtpbmcgcG9ydCBpZCAwLTMKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gSW52YWxpZCBoYXNoaW5nIHZhbHVlICgwLTE1KQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljVHJ1bmtpbmdIYXNoVGFibGUocnRrX3VpbnQzMiBoYXNodmFsLCBydGtfdWludDMyIHBvcnRJZCkKK3sKKyAgICBpZihoYXNodmFsID4gUlRMODM2N0NfVFJVTktJTkdfSEFTSFZBTFVFX01BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICBpZihwb3J0SWQgPj0gUlRMODM2N0NfVFJVTktJTkdfUE9SVE5PKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICBpZihoYXNodmFsID49IDgpCisgICAgICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfUE9SVF9UUlVOS19IQVNIX01BUFBJTkdfQ1RSTDEsIFJUTDgzNjdDX1BPUlRfVFJVTktfSEFTSF9NQVBQSU5HX0NUUkwxX0hBU0g4X01BU0s8PCgoaGFzaHZhbC04KSoyKSwgcG9ydElkKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfUE9SVF9UUlVOS19IQVNIX01BUFBJTkdfQ1RSTDAsIFJUTDgzNjdDX1BPUlRfVFJVTktfSEFTSF9NQVBQSU5HX0NUUkwwX0hBU0gwX01BU0s8PChoYXNodmFsKjIpLCBwb3J0SWQpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1RydW5raW5nSGFzaFRhYmxlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHBvcnQgdHJ1bmtpbmcgaGFzaCB2YWx1ZSBtYXBwaW5nIHRhYmxlCisgKiBJbnB1dDoKKyAqICAgICAgaGFzaHZhbCAgICAgLSBoYXNoaW5nIHZhbHVlIDAtMTUKKyAqICAgICAgcFBvcnRJZCAgICAgICAgIC0gdHJ1bmtpbmcgcG9ydCBpZCAwLTMKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gSW52YWxpZCBoYXNoaW5nIHZhbHVlICgwLTE1KQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljVHJ1bmtpbmdIYXNoVGFibGUocnRrX3VpbnQzMiBoYXNodmFsLCBydGtfdWludDMyKiBwUG9ydElkKQoreworICAgIGlmKGhhc2h2YWwgPiBSVEw4MzY3Q19UUlVOS0lOR19IQVNIVkFMVUVfTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIGlmKGhhc2h2YWwgPj0gOCkKKyAgICAgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19QT1JUX1RSVU5LX0hBU0hfTUFQUElOR19DVFJMMSwgUlRMODM2N0NfUE9SVF9UUlVOS19IQVNIX01BUFBJTkdfQ1RSTDFfSEFTSDhfTUFTSzw8KChoYXNodmFsLTgpKjIpLCBwUG9ydElkKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfUE9SVF9UUlVOS19IQVNIX01BUFBJTkdfQ1RSTDAsIFJUTDgzNjdDX1BPUlRfVFJVTktfSEFTSF9NQVBQSU5HX0NUUkwwX0hBU0gwX01BU0s8PChoYXNodmFsKjIpLCBwUG9ydElkKTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1RydW5raW5nSGFzaFRhYmxlMQorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwb3J0IHRydW5raW5nIGhhc2ggdmFsdWUgbWFwcGluZyB0YWJsZQorICogSW5wdXQ6CisgKiAgICAgIGhhc2h2YWwgICAgIC0gaGFzaGluZyB2YWx1ZSAwLTE1CisgKiAgICAgIHBvcnRJZCAgICAgIC0gdHJ1bmtpbmcgcG9ydCBpZCAwLTMKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gSW52YWxpZCBoYXNoaW5nIHZhbHVlICgwLTE1KQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljVHJ1bmtpbmdIYXNoVGFibGUxKHJ0a191aW50MzIgaGFzaHZhbCwgcnRrX3VpbnQzMiBwb3J0SWQpCit7CisgICAgaWYoaGFzaHZhbCA+IFJUTDgzNjdDX1RSVU5LSU5HX0hBU0hWQUxVRV9NQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgaWYocG9ydElkID49IFJUTDgzNjdDX1RSVU5LSU5HMV9QT1JUTjApCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIGlmKGhhc2h2YWwgPj0gOCkKKyAgICAgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19QT1JUX1RSVU5LX0hBU0hfTUFQUElOR19DVFJMMywgUlRMODM2N0NfUE9SVF9UUlVOS19IQVNIX01BUFBJTkdfQ1RSTDNfSEFTSDhfTUFTSzw8KChoYXNodmFsLTgpKjIpLCBwb3J0SWQpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19QT1JUX1RSVU5LX0hBU0hfTUFQUElOR19DVFJMMiwgUlRMODM2N0NfUE9SVF9UUlVOS19IQVNIX01BUFBJTkdfQ1RSTDJfSEFTSDBfTUFTSzw8KGhhc2h2YWwqMiksIHBvcnRJZCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljVHJ1bmtpbmdIYXNoVGFibGUxCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHBvcnQgdHJ1bmtpbmcgaGFzaCB2YWx1ZSBtYXBwaW5nIHRhYmxlCisgKiBJbnB1dDoKKyAqICAgICAgaGFzaHZhbCAgICAgLSBoYXNoaW5nIHZhbHVlIDAtMTUKKyAqICAgICAgcFBvcnRJZCAgICAgICAgIC0gdHJ1bmtpbmcgcG9ydCBpZCAwLTMKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gSW52YWxpZCBoYXNoaW5nIHZhbHVlICgwLTE1KQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljVHJ1bmtpbmdIYXNoVGFibGUxKHJ0a191aW50MzIgaGFzaHZhbCwgcnRrX3VpbnQzMiogcFBvcnRJZCkKK3sKKyAgICBpZihoYXNodmFsID4gUlRMODM2N0NfVFJVTktJTkdfSEFTSFZBTFVFX01BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICBpZihoYXNodmFsID49IDgpCisgICAgICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfUE9SVF9UUlVOS19IQVNIX01BUFBJTkdfQ1RSTDMsIFJUTDgzNjdDX1BPUlRfVFJVTktfSEFTSF9NQVBQSU5HX0NUUkwzX0hBU0g4X01BU0s8PCgoaGFzaHZhbC04KSoyKSwgcFBvcnRJZCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1BPUlRfVFJVTktfSEFTSF9NQVBQSU5HX0NUUkwyLCBSVEw4MzY3Q19QT1JUX1RSVU5LX0hBU0hfTUFQUElOR19DVFJMMl9IQVNIMF9NQVNLPDwoaGFzaHZhbCoyKSwgcFBvcnRJZCk7Cit9CisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X3Vua25vd25NdWx0aWNhc3QuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X3Vua25vd25NdWx0aWNhc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2ViZDFiCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfdW5rbm93bk11bHRpY2FzdC5jCkBAIC0wLDAgKzEsMjM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNzYzMDYgJAorICogJERhdGU6IDIwMTctMDMtMDggMTU6MTM6NTggKzA4MDAgKOmAseS4iSwgMDgg5LiJ5pyIIDIwMTcpICQKKyAqCisgKiBQdXJwb3NlIDogUlRMODM2N0Mgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJIGZvciBSVEw4MzY3QworICogRmVhdHVyZSA6IFVua293biBtdWx0aWNhc3QgcmVsYXRlZCBmdW5jdGlvbnMKKyAqCisgKi8KKworI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnZfdW5rbm93bk11bHRpY2FzdC5oPgorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljVW5rbm93bkwyTXVsdGljYXN0QmVoYXZpb3IKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgYmVoYXZpb3Igb2YgTDIgbXVsdGljYXN0CisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjcpCisgKiAgICAgIGJlaGF2ZSAgLSAwOiBmbG9vZGluZywgMTogZHJvcCwgMjogdHJhcAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiAgICAgIFJUX0VSUl9OT1RfQUxMT1dFRCAgLSBJbnZhbGlkIG9wZXJhdGlvbgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljVW5rbm93bkwyTXVsdGljYXN0QmVoYXZpb3IocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGJlaGF2ZSkKK3sKKyAgICByZXRfdCByZXRWYWw7CisKKyAgICBpZihwb3J0ID4gIFJUTDgzNjdDX1BPUlRJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgaWYoYmVoYXZlID49IEwyX1VOS09XTl9NVUxUSUNBU1RfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX05PVF9BTExPV0VEOworICAgIGlmKHBvcnQgPCA4KQorICAgIHsKKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfVU5LTk9XTl9MMl9NVUxUSUNBU1RfUkVHKHBvcnQpLCBSVEw4MzY3Q19VTktOT1dOX0wyX01VTFRJQ0FTVF9NQVNLKHBvcnQpLCBiZWhhdmUpOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1VOS05PV05fTDJfTVVMVElDQVNUX0NUUkwxLCAzIDw8ICgocG9ydCAtIDgpIDw8IDEpLCBiZWhhdmUpOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1Vua25vd25MMk11bHRpY2FzdEJlaGF2aW9yCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGJlaGF2aW9yIG9mIEwyIG11bHRpY2FzdAorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH43KQorICogICAgICBwQmVoYXZlICAgICAtIDA6IGZsb29kaW5nLCAxOiBkcm9wLCAyOiB0cmFwCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1Vua25vd25MMk11bHRpY2FzdEJlaGF2aW9yKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcEJlaGF2ZSkKK3sKKyAgICByZXRfdCByZXRWYWw7CisKKyAgICBpZihwb3J0ID4gIFJUTDgzNjdDX1BPUlRJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgaWYocG9ydCA8IDgpCisgICAgeworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19VTktOT1dOX0wyX01VTFRJQ0FTVF9SRUcocG9ydCksIFJUTDgzNjdDX1VOS05PV05fTDJfTVVMVElDQVNUX01BU0socG9ydCksIHBCZWhhdmUpOworICAgICAgICBpZiAocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19VTktOT1dOX0wyX01VTFRJQ0FTVF9DVFJMMSwgMyA8PCAoKHBvcnQgLSA4KSA8PCAxKSwgcEJlaGF2ZSk7CisgICAgICAgIGlmIChyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1Vua25vd25JUHY0TXVsdGljYXN0QmVoYXZpb3IKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgYmVoYXZpb3Igb2YgSVB2NCBtdWx0aWNhc3QKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgYmVoYXZlICAtIDA6IGZsb29kaW5nLCAxOiBkcm9wLCAyOiB0cmFwCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqICAgICAgUlRfRVJSX05PVF9BTExPV0VEICAtIEludmFsaWQgb3BlcmF0aW9uCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNVbmtub3duSVB2NE11bHRpY2FzdEJlaGF2aW9yKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBiZWhhdmUpCit7CisgICAgaWYocG9ydCA+ICBSVEw4MzY3Q19QT1JUSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIGlmKGJlaGF2ZSA+PSBMM19VTktPV05fTVVMVElDQVNUX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OT1RfQUxMT1dFRDsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19VTktOT1dOX0lQVjRfTVVMVElDQVNUX1JFRyhwb3J0KSwgUlRMODM2N0NfVU5LTk9XTl9JUFY0X01VTFRJQ0FTVF9NQVNLKHBvcnQpLCBiZWhhdmUpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1Vua25vd25JUHY0TXVsdGljYXN0QmVoYXZpb3IKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgYmVoYXZpb3Igb2YgSVB2NCBtdWx0aWNhc3QKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgcEJlaGF2ZSAgICAgLSAwOiBmbG9vZGluZywgMTogZHJvcCwgMjogdHJhcAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNVbmtub3duSVB2NE11bHRpY2FzdEJlaGF2aW9yKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcEJlaGF2ZSkKK3sKKyAgICBpZihwb3J0ID4gIFJUTDgzNjdDX1BPUlRJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1VOS05PV05fSVBWNF9NVUxUSUNBU1RfUkVHKHBvcnQpLCBSVEw4MzY3Q19VTktOT1dOX0lQVjRfTVVMVElDQVNUX01BU0socG9ydCksIHBCZWhhdmUpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1Vua25vd25JUHY2TXVsdGljYXN0QmVoYXZpb3IKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgYmVoYXZpb3Igb2YgSVB2NiBtdWx0aWNhc3QKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgYmVoYXZlICAtIDA6IGZsb29kaW5nLCAxOiBkcm9wLCAyOiB0cmFwCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqICAgICAgUlRfRVJSX05PVF9BTExPV0VEICAtIEludmFsaWQgb3BlcmF0aW9uCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNVbmtub3duSVB2Nk11bHRpY2FzdEJlaGF2aW9yKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBiZWhhdmUpCit7CisgICAgaWYocG9ydCA+ICBSVEw4MzY3Q19QT1JUSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIGlmKGJlaGF2ZSA+PSBMM19VTktPV05fTVVMVElDQVNUX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OT1RfQUxMT1dFRDsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19VTktOT1dOX0lQVjZfTVVMVElDQVNUX1JFRyhwb3J0KSwgUlRMODM2N0NfVU5LTk9XTl9JUFY2X01VTFRJQ0FTVF9NQVNLKHBvcnQpLCBiZWhhdmUpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1Vua25vd25JUHY2TXVsdGljYXN0QmVoYXZpb3IKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgYmVoYXZpb3Igb2YgSVB2NiBtdWx0aWNhc3QKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgcEJlaGF2ZSAgICAgLSAwOiBmbG9vZGluZywgMTogZHJvcCwgMjogdHJhcAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNVbmtub3duSVB2Nk11bHRpY2FzdEJlaGF2aW9yKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiAqcEJlaGF2ZSkKK3sKKyAgICBpZihwb3J0ID4gIFJUTDgzNjdDX1BPUlRJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1VOS05PV05fSVBWNl9NVUxUSUNBU1RfUkVHKHBvcnQpLCBSVEw4MzY3Q19VTktOT1dOX0lQVjZfTVVMVElDQVNUX01BU0socG9ydCksIHBCZWhhdmUpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1Vua25vd25NdWx0aWNhc3RUcmFwUHJpb3JpdHkKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgdHJhcCBwcmlvcml0eSBvZiB1bmtub3duIG11bHRpY2FzdCBmcmFtZQorICogSW5wdXQ6CisgKiAgICAgIHByaW9yaXR5ICAgIC0gcHJpb3JpdHkgKDB+NykKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9RT1NfSU5UX1BSSU9SSVRZIC0gSW52YWxpZCBwcmlvcml0eQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljVW5rbm93bk11bHRpY2FzdFRyYXBQcmlvcml0eShydGtfdWludDMyIHByaW9yaXR5KQoreworICAgIGlmKHByaW9yaXR5ID4gUlRMODM2N0NfUFJJTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1FPU19JTlRfUFJJT1JJVFk7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUU9TX1RSQVBfUFJJT1JJVFlfQ1RSTDBfUkVHLCBSVEw4MzY3Q19VTktOT1dOX01DX1BSSU9SVFlfTUFTSywgcHJpb3JpdHkpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1Vua25vd25NdWx0aWNhc3RUcmFwUHJpb3JpdHkKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgdHJhcCBwcmlvcml0eSBvZiB1bmtub3duIG11bHRpY2FzdCBmcmFtZQorICogSW5wdXQ6CisgKiAgICAgIHBQcmlvcml0eSAgIC0gcHJpb3JpdHkgKDB+NykKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNVbmtub3duTXVsdGljYXN0VHJhcFByaW9yaXR5KHJ0a191aW50MzIgKnBQcmlvcml0eSkKK3sKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUU9TX1RSQVBfUFJJT1JJVFlfQ1RSTDBfUkVHLCBSVEw4MzY3Q19VTktOT1dOX01DX1BSSU9SVFlfTUFTSywgcFByaW9yaXR5KTsKK30KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X3ZsYW4uYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9ydGw4MzY3Y19hc2ljZHJ2X3ZsYW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTI4M2U3Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3J0bDgzNjdjX2FzaWNkcnZfdmxhbi5jCkBAIC0wLDAgKzEsMTUwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVW5sZXNzIHlvdSBhbmQgUmVhbHRlayBleGVjdXRlIGEgc2VwYXJhdGUgd3JpdHRlbiBzb2Z0d2FyZSBsaWNlbnNlCisgKiBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkCisgKiB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIsCisgKiBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvZ3BsLTIuMC50eHQKKyAqCisgKiAkUmV2aXNpb246IDc2MzA2ICQKKyAqICREYXRlOiAyMDE3LTAzLTA4IDE1OjEzOjU4ICswODAwICjpgLHkuIksIDA4IOS4ieaciCAyMDE3KSAkCisgKgorICogUHVycG9zZSA6IFJUTDgzNjdDIHN3aXRjaCBoaWdoLWxldmVsIEFQSSBmb3IgUlRMODM2N0MKKyAqIEZlYXR1cmUgOiBWTEFOIHJlbGF0ZWQgZnVuY3Rpb25zCisgKgorICovCisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl92bGFuLmg+CisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX1JUTDgzNjdDX0FTSUNEUlZfVEVTVCkKK3J0bDgzNjdjX3VzZXJfdmxhbjRrZW50cnkgUnRsODM3MHNWaXJ0dWFsVmxhblRhYmxlW1JUTDgzNjdDX1ZJRE1BWCArIDFdOworI2VuZGlmCisKK3N0YXRpYyB2b2lkIF9ydGw4MzY3Y19WbGFuTUNTdFVzZXIyU21pKHJ0bDgzNjdjX3ZsYW5jb25maWd1c2VyICpwVmxhbkNnLCBydGtfdWludDE2ICpwU21pVmxhbkNmZykKK3sKKyAgICBwU21pVmxhbkNmZ1swXSB8PSBwVmxhbkNnLT5tYnIgJiAweDA3RkY7CisKKyAgICBwU21pVmxhbkNmZ1sxXSB8PSBwVmxhbkNnLT5maWRfbXN0aSAmIDB4MDAwRjsKKworICAgIHBTbWlWbGFuQ2ZnWzJdIHw9IHBWbGFuQ2ctPnZicGVuICYgMHgwMDAxOworICAgIHBTbWlWbGFuQ2ZnWzJdIHw9IChwVmxhbkNnLT52YnByaSAmIDB4MDAwNykgPDwgMTsKKyAgICBwU21pVmxhbkNmZ1syXSB8PSAocFZsYW5DZy0+ZW52bGFucG9sICYgMHgwMDAxKSA8PCA0OworICAgIHBTbWlWbGFuQ2ZnWzJdIHw9IChwVmxhbkNnLT5tZXRlcmlkeCAmIDB4MDAzRikgPDwgNTsKKworICAgIHBTbWlWbGFuQ2ZnWzNdIHw9IHBWbGFuQ2ctPmV2aWQgJiAweDFGRkY7Cit9CisKK3N0YXRpYyB2b2lkIF9ydGw4MzY3Y19WbGFuTUNTdFNtaTJVc2VyKHJ0a191aW50MTYgKnBTbWlWbGFuQ2ZnLCBydGw4MzY3Y192bGFuY29uZmlndXNlciAqcFZsYW5DZykKK3sKKyAgICBwVmxhbkNnLT5tYnIgICAgICAgICAgICA9IHBTbWlWbGFuQ2ZnWzBdICYgMHgwN0ZGOworICAgIHBWbGFuQ2ctPmZpZF9tc3RpICAgICAgID0gcFNtaVZsYW5DZmdbMV0gJiAweDAwMEY7CisgICAgcFZsYW5DZy0+bWV0ZXJpZHggICAgICAgPSAocFNtaVZsYW5DZmdbMl0gPj4gNSkgJiAweDAwM0Y7CisgICAgcFZsYW5DZy0+ZW52bGFucG9sICAgICAgPSAocFNtaVZsYW5DZmdbMl0gPj4gNCkgJiAweDAwMDE7CisgICAgcFZsYW5DZy0+dmJwcmkgICAgICAgICAgPSAocFNtaVZsYW5DZmdbMl0gPj4gMSkgJiAweDAwMDc7CisgICAgcFZsYW5DZy0+dmJwZW4gICAgICAgICAgPSBwU21pVmxhbkNmZ1syXSAmIDB4MDAwMTsKKyAgICBwVmxhbkNnLT5ldmlkICAgICAgICAgICA9IHBTbWlWbGFuQ2ZnWzNdICYgMHgxRkZGOworfQorCitzdGF0aWMgdm9pZCBfcnRsODM2N2NfVmxhbjRrU3RVc2VyMlNtaShydGw4MzY3Y191c2VyX3ZsYW40a2VudHJ5ICpwVXNlclZsYW40a0VudHJ5LCBydGtfdWludDE2ICpwU21pVmxhbjRrRW50cnkpCit7CisgICAgcFNtaVZsYW40a0VudHJ5WzBdIHw9IChwVXNlclZsYW40a0VudHJ5LT5tYnIgJiAweDAwRkYpOworICAgIHBTbWlWbGFuNGtFbnRyeVswXSB8PSAocFVzZXJWbGFuNGtFbnRyeS0+dW50YWcgJiAweDAwRkYpIDw8IDg7CisKKyAgICBwU21pVmxhbjRrRW50cnlbMV0gfD0gKHBVc2VyVmxhbjRrRW50cnktPmZpZF9tc3RpICYgMHgwMDBGKTsKKyAgICBwU21pVmxhbjRrRW50cnlbMV0gfD0gKHBVc2VyVmxhbjRrRW50cnktPnZicGVuICYgMHgwMDAxKSA8PCA0OworICAgIHBTbWlWbGFuNGtFbnRyeVsxXSB8PSAocFVzZXJWbGFuNGtFbnRyeS0+dmJwcmkgJiAweDAwMDcpIDw8IDU7CisgICAgcFNtaVZsYW40a0VudHJ5WzFdIHw9IChwVXNlclZsYW40a0VudHJ5LT5lbnZsYW5wb2wgJiAweDAwMDEpIDw8IDg7CisgICAgcFNtaVZsYW40a0VudHJ5WzFdIHw9IChwVXNlclZsYW40a0VudHJ5LT5tZXRlcmlkeCAmIDB4MDAxRikgPDwgOTsKKyAgICBwU21pVmxhbjRrRW50cnlbMV0gfD0gKHBVc2VyVmxhbjRrRW50cnktPml2bF9zdmwgJiAweDAwMDEpIDw8IDE0OworCisgICAgcFNtaVZsYW40a0VudHJ5WzJdIHw9ICgocFVzZXJWbGFuNGtFbnRyeS0+bWJyICYgMHgwNzAwKSA+PiA4KTsKKyAgICBwU21pVmxhbjRrRW50cnlbMl0gfD0gKChwVXNlclZsYW40a0VudHJ5LT51bnRhZyAmIDB4MDcwMCkgPj4gOCkgPDwgMzsKKyAgICBwU21pVmxhbjRrRW50cnlbMl0gfD0gKChwVXNlclZsYW40a0VudHJ5LT5tZXRlcmlkeCAmIDB4MDAyMCkgPj4gNSkgPDwgNjsKK30KKworCitzdGF0aWMgdm9pZCBfcnRsODM2N2NfVmxhbjRrU3RTbWkyVXNlcihydGtfdWludDE2ICpwU21pVmxhbjRrRW50cnksIHJ0bDgzNjdjX3VzZXJfdmxhbjRrZW50cnkgKnBVc2VyVmxhbjRrRW50cnkpCit7CisgICAgcFVzZXJWbGFuNGtFbnRyeS0+bWJyID0gKHBTbWlWbGFuNGtFbnRyeVswXSAmIDB4MDBGRikgfCAoKHBTbWlWbGFuNGtFbnRyeVsyXSAmIDB4MDAwNykgPDwgOCk7CisgICAgcFVzZXJWbGFuNGtFbnRyeS0+dW50YWcgPSAoKHBTbWlWbGFuNGtFbnRyeVswXSAmIDB4RkYwMCkgPj4gOCkgfCAoKChwU21pVmxhbjRrRW50cnlbMl0gJiAweDAwMzgpID4+IDMpIDw8IDgpOworICAgIHBVc2VyVmxhbjRrRW50cnktPmZpZF9tc3RpID0gcFNtaVZsYW40a0VudHJ5WzFdICYgMHgwMDBGOworICAgIHBVc2VyVmxhbjRrRW50cnktPnZicGVuID0gKHBTbWlWbGFuNGtFbnRyeVsxXSAmIDB4MDAxMCkgPj4gNDsKKyAgICBwVXNlclZsYW40a0VudHJ5LT52YnByaSA9IChwU21pVmxhbjRrRW50cnlbMV0gJiAweDAwRTApID4+IDU7CisgICAgcFVzZXJWbGFuNGtFbnRyeS0+ZW52bGFucG9sID0gKHBTbWlWbGFuNGtFbnRyeVsxXSAmIDB4MDEwMCkgPj4gODsKKyAgICBwVXNlclZsYW40a0VudHJ5LT5tZXRlcmlkeCA9ICgocFNtaVZsYW40a0VudHJ5WzFdICYgMHgzRTAwKSA+PiA5KSB8ICgoKHBTbWlWbGFuNGtFbnRyeVsyXSAmIDB4MDA0MCkgPj4gNikgPDwgNSk7CisgICAgcFVzZXJWbGFuNGtFbnRyeS0+aXZsX3N2bCA9IChwU21pVmxhbjRrRW50cnlbMV0gJiAweDQwMDApID4+IDE0OworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljVmxhbk1lbWJlckNvbmZpZworICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCAzMiBWTEFOIG1lbWJlciBjb25maWd1cmF0aW9ucworICogSW5wdXQ6CisgKiAgICAgIGluZGV4ICAgICAgIC0gVkxBTiBtZW1iZXIgY29uZmlndXJhdGlvbiBpbmRleCAoMH4zMSkKKyAqICAgICAgcFZsYW5DZyAtIFZMQU4gbWVtYmVyIGNvbmZpZ3VyYXRpb24KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIKKyAqICAgICAgUlRfRVJSX0wyX0ZJRCAgICAgICAgICAgICAgIC0gSW52YWxpZCBGSUQKKyAqICAgICAgUlRfRVJSX1BPUlRfTUFTSyAgICAgICAgICAgIC0gSW52YWxpZCBwb3J0bWFzaworICogICAgICBSVF9FUlJfRklMVEVSX01FVEVSX0lEICAgICAgLSBJbnZhbGlkIG1ldGVyCisgKiAgICAgIFJUX0VSUl9RT1NfSU5UX1BSSU9SSVRZICAgICAtIEludmFsaWQgcHJpb3JpdHkKKyAqICAgICAgUlRfRVJSX1ZMQU5fRU5UUllfTk9UX0ZPVU5EIC0gSW52YWxpZCBWTEFOIG1lbWJlciBjb25maWd1cmF0aW9uIGluZGV4CisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNWbGFuTWVtYmVyQ29uZmlnKHJ0a191aW50MzIgaW5kZXgsIHJ0bDgzNjdjX3ZsYW5jb25maWd1c2VyICpwVmxhbkNnKQoreworICAgIHJldF90ICByZXRWYWw7CisgICAgcnRrX3VpbnQzMiByZWdBZGRyOworICAgIHJ0a191aW50MzIgcmVnRGF0YTsKKyAgICBydGtfdWludDE2ICp0YWJsZUFkZHI7CisgICAgcnRrX3VpbnQzMiBwYWdlX2lkeDsKKyAgICBydGtfdWludDE2IHNtaV92bGFuY2ZnW1JUTDgzNjdDX1ZMQU5fTUJSQ0ZHX0xFTl07CisKKyAgICAvKiBFcnJvciBDaGVja2luZyAgKi8KKyAgICBpZihpbmRleCA+IFJUTDgzNjdDX0NWSURYTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1ZMQU5fRU5UUllfTk9UX0ZPVU5EOworCisgICAgaWYocFZsYW5DZy0+ZXZpZCA+IFJUTDgzNjdDX0VWSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKworICAgIGlmKHBWbGFuQ2ctPm1iciA+IFJUTDgzNjdDX1BPUlRNQVNLKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfTUFTSzsKKworICAgIGlmKHBWbGFuQ2ctPmZpZF9tc3RpID4gUlRMODM2N0NfRklETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX0wyX0ZJRDsKKworICAgIGlmKHBWbGFuQ2ctPm1ldGVyaWR4ID4gUlRMODM2N0NfTUVURVJNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfRklMVEVSX01FVEVSX0lEOworCisgICAgaWYocFZsYW5DZy0+dmJwcmkgPiBSVEw4MzY3Q19QUklNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUU9TX0lOVF9QUklPUklUWTsKKworICAgIG1lbXNldChzbWlfdmxhbmNmZywgMHgwMCwgc2l6ZW9mKHJ0a191aW50MTYpICogUlRMODM2N0NfVkxBTl9NQlJDRkdfTEVOKTsKKyAgICBfcnRsODM2N2NfVmxhbk1DU3RVc2VyMlNtaShwVmxhbkNnLCBzbWlfdmxhbmNmZyk7CisgICAgdGFibGVBZGRyID0gc21pX3ZsYW5jZmc7CisKKyAgICBmb3IocGFnZV9pZHggPSAwOyBwYWdlX2lkeCA8IDQ7IHBhZ2VfaWR4KyspICAvKiA0IHBhZ2VzIHBlciBWTEFOIE1lbWJlciBDb25maWcgKi8KKyAgICB7CisgICAgICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OX0JBU0UgKyAoaW5kZXggKiA0KSArIHBhZ2VfaWR4OworICAgICAgICByZWdEYXRhID0gKnRhYmxlQWRkcjsKKworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKHJlZ0FkZHIsIHJlZ0RhdGEpOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICB0YWJsZUFkZHIrKzsKKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1ZsYW5NZW1iZXJDb25maWcKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgMzIgVkxBTiBtZW1iZXIgY29uZmlndXJhdGlvbnMKKyAqIElucHV0OgorICogICAgICBpbmRleCAgICAgICAtIFZMQU4gbWVtYmVyIGNvbmZpZ3VyYXRpb24gaW5kZXggKDB+MzEpCisgKiAgICAgIHBWbGFuQ2cgLSBWTEFOIG1lbWJlciBjb25maWd1cmF0aW9uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVyCisgKiAgICAgIFJUX0VSUl9WTEFOX0VOVFJZX05PVF9GT1VORCAtIEludmFsaWQgVkxBTiBtZW1iZXIgY29uZmlndXJhdGlvbiBpbmRleAorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljVmxhbk1lbWJlckNvbmZpZyhydGtfdWludDMyIGluZGV4LCBydGw4MzY3Y192bGFuY29uZmlndXNlciAqcFZsYW5DZykKK3sKKyAgICByZXRfdCAgcmV0VmFsOworICAgIHJ0a191aW50MzIgcGFnZV9pZHg7CisgICAgcnRrX3VpbnQzMiByZWdBZGRyOworICAgIHJ0a191aW50MzIgcmVnRGF0YTsKKyAgICBydGtfdWludDE2ICp0YWJsZUFkZHI7CisgICAgcnRrX3VpbnQxNiBzbWlfdmxhbmNmZ1tSVEw4MzY3Q19WTEFOX01CUkNGR19MRU5dOworCisgICAgaWYoaW5kZXggPiBSVEw4MzY3Q19DVklEWE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9WTEFOX0VOVFJZX05PVF9GT1VORDsKKworICAgIG1lbXNldChzbWlfdmxhbmNmZywgMHgwMCwgc2l6ZW9mKHJ0a191aW50MTYpICogUlRMODM2N0NfVkxBTl9NQlJDRkdfTEVOKTsKKyAgICB0YWJsZUFkZHIgID0gc21pX3ZsYW5jZmc7CisKKyAgICBmb3IocGFnZV9pZHggPSAwOyBwYWdlX2lkeCA8IDQ7IHBhZ2VfaWR4KyspICAvKiA0IHBhZ2VzIHBlciBWTEFOIE1lbWJlciBDb25maWcgKi8KKyAgICB7CisgICAgICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19WTEFOX01FTUJFUl9DT05GSUdVUkFUSU9OX0JBU0UgKyAoaW5kZXggKiA0KSArIHBhZ2VfaWR4OworCisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcocmVnQWRkciwgJnJlZ0RhdGEpOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAqdGFibGVBZGRyID0gKHJ0a191aW50MTYpcmVnRGF0YTsKKyAgICAgICAgdGFibGVBZGRyKys7CisgICAgfQorCisgICAgX3J0bDgzNjdjX1ZsYW5NQ1N0U21pMlVzZXIoc21pX3ZsYW5jZmcsIHBWbGFuQ2cpOworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljVmxhbjRrRW50cnkKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgVklEIG1hcHBlZCBlbnRyeSB0byA0SyBWTEFOIHRhYmxlCisgKiBJbnB1dDoKKyAqICAgICAgcFZsYW40a0VudHJ5IC0gNEsgVkxBTiBjb25maWd1cmF0aW9uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVyCisgKiAgICAgIFJUX0VSUl9MMl9GSUQgICAgICAgICAgICAgICAtIEludmFsaWQgRklECisgKiAgICAgIFJUX0VSUl9WTEFOX1ZJRCAgICAgICAgICAgICAtIEludmFsaWQgVklEIHBhcmFtZXRlciAoMH40MDk1KQorICogICAgICBSVF9FUlJfUE9SVF9NQVNLICAgICAgICAgICAgLSBJbnZhbGlkIHBvcnRtYXNrCisgKiAgICAgIFJUX0VSUl9GSUxURVJfTUVURVJfSUQgICAgICAtIEludmFsaWQgbWV0ZXIKKyAqICAgICAgUlRfRVJSX1FPU19JTlRfUFJJT1JJVFkgICAgIC0gSW52YWxpZCBwcmlvcml0eQorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljVmxhbjRrRW50cnkocnRsODM2N2NfdXNlcl92bGFuNGtlbnRyeSAqcFZsYW40a0VudHJ5ICkKK3sKKyAgICBydGtfdWludDE2ICAgICAgICAgICAgICB2bGFuXzRrX2VudHJ5W1JUTDgzNjdDX1ZMQU5fNEtUQUJMRV9MRU5dOworICAgIHJ0a191aW50MzIgICAgICAgICAgICAgICAgICBwYWdlX2lkeDsKKyAgICBydGtfdWludDE2ICAgICAgICAgICAgICAgICAgKnRhYmxlQWRkcjsKKyAgICByZXRfdCAgICAgICAgICAgICAgICAgICByZXRWYWw7CisgICAgcnRrX3VpbnQzMiAgICAgICAgICAgICAgICAgIHJlZ0RhdGE7CisKKyAgICBpZihwVmxhbjRrRW50cnktPnZpZCA+IFJUTDgzNjdDX1ZJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9WTEFOX1ZJRDsKKworICAgIGlmKHBWbGFuNGtFbnRyeS0+bWJyID4gUlRMODM2N0NfUE9SVE1BU0spCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9NQVNLOworCisgICAgaWYocFZsYW40a0VudHJ5LT51bnRhZyA+IFJUTDgzNjdDX1BPUlRNQVNLKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfTUFTSzsKKworICAgIGlmKHBWbGFuNGtFbnRyeS0+ZmlkX21zdGkgPiBSVEw4MzY3Q19GSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfTDJfRklEOworCisgICAgaWYocFZsYW40a0VudHJ5LT5tZXRlcmlkeCA+IFJUTDgzNjdDX01FVEVSTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX0ZJTFRFUl9NRVRFUl9JRDsKKworICAgIGlmKHBWbGFuNGtFbnRyeS0+dmJwcmkgPiBSVEw4MzY3Q19QUklNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUU9TX0lOVF9QUklPUklUWTsKKworICAgIG1lbXNldCh2bGFuXzRrX2VudHJ5LCAweDAwLCBzaXplb2YocnRrX3VpbnQxNikgKiBSVEw4MzY3Q19WTEFOXzRLVEFCTEVfTEVOKTsKKyAgICBfcnRsODM2N2NfVmxhbjRrU3RVc2VyMlNtaShwVmxhbjRrRW50cnksIHZsYW5fNGtfZW50cnkpOworCisgICAgLyogUHJlcGFyZSBEYXRhICovCisgICAgdGFibGVBZGRyID0gdmxhbl80a19lbnRyeTsKKyAgICBmb3IocGFnZV9pZHggPSAwOyBwYWdlX2lkeCA8IFJUTDgzNjdDX1ZMQU5fNEtUQUJMRV9MRU47IHBhZ2VfaWR4KyspCisgICAgeworICAgICAgICByZWdEYXRhID0gKnRhYmxlQWRkcjsKKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZyhSVEw4MzY3Q19UQUJMRV9BQ0NFU1NfV1JEQVRBX0JBU0UgKyBwYWdlX2lkeCwgcmVnRGF0YSk7CisgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIHRhYmxlQWRkcisrOworICAgIH0KKworICAgIC8qIFdyaXRlIEFkZHJlc3MgKFZMQU5fSUQpICovCisgICAgcmVnRGF0YSA9IHBWbGFuNGtFbnRyeS0+dmlkOworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfVEFCTEVfQUNDRVNTX0FERFJfUkVHLCByZWdEYXRhKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgLyogV3JpdGUgQ29tbWFuZCAqLworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1RBQkxFX0FDQ0VTU19DVFJMX1JFRywgUlRMODM2N0NfVEFCTEVfVFlQRV9NQVNLIHwgUlRMODM2N0NfQ09NTUFORF9UWVBFX01BU0ssUlRMODM2N0NfVEFCTEVfQUNDRVNTX1JFR19EQVRBKFRCX09QX1dSSVRFLFRCX1RBUkdFVF9DVkxBTikpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyNpZiBkZWZpbmVkKENPTkZJR19SVEw4MzY3Q19BU0lDRFJWX1RFU1QpCisgICAgbWVtY3B5KCZSdGw4Mzcwc1ZpcnR1YWxWbGFuVGFibGVbcFZsYW40a0VudHJ5LT52aWRdLCBwVmxhbjRrRW50cnksIHNpemVvZihydGw4MzY3Y191c2VyX3ZsYW40a2VudHJ5KSk7CisjZW5kaWYKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljVmxhbjRrRW50cnkKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgVklEIG1hcHBlZCBlbnRyeSB0byA0SyBWTEFOIHRhYmxlCisgKiBJbnB1dDoKKyAqICAgICAgcFZsYW40a0VudHJ5IC0gNEsgVkxBTiBjb25maWd1cmF0aW9uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfVkxBTl9WSUQgICAgICAgICAtIEludmFsaWQgVklEIHBhcmFtZXRlciAoMH40MDk1KQorICogICAgICBSVF9FUlJfQlVTWVdBSVRfVElNRU9VVCAtIExVVCBpcyBidXN5IGF0IHJldHJpZXZpbmcKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1ZsYW40a0VudHJ5KHJ0bDgzNjdjX3VzZXJfdmxhbjRrZW50cnkgKnBWbGFuNGtFbnRyeSApCit7CisgICAgcnRrX3VpbnQxNiAgICAgICAgICAgICAgICAgIHZsYW5fNGtfZW50cnlbUlRMODM2N0NfVkxBTl80S1RBQkxFX0xFTl07CisgICAgcnRrX3VpbnQzMiAgICAgICAgICAgICAgICAgIHBhZ2VfaWR4OworICAgIHJ0a191aW50MTYgICAgICAgICAgICAgICAgICAqdGFibGVBZGRyOworICAgIHJldF90ICAgICAgICAgICAgICAgICAgICAgICByZXRWYWw7CisgICAgcnRrX3VpbnQzMiAgICAgICAgICAgICAgICAgIHJlZ0RhdGE7CisgICAgcnRrX3VpbnQzMiAgICAgICAgICAgICAgICAgIGJ1c3lDb3VudGVyOworCisgICAgaWYocFZsYW40a0VudHJ5LT52aWQgPiBSVEw4MzY3Q19WSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfVkxBTl9WSUQ7CisKKyAgICAvKiBQb2xsaW5nIHN0YXR1cyAqLworICAgIGJ1c3lDb3VudGVyID0gUlRMODM2N0NfVkxBTl9CVVNZX0NIRUNLX05POworICAgIHdoaWxlKGJ1c3lDb3VudGVyKQorICAgIHsKKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19UQUJMRV9BQ0NFU1NfU1RBVFVTX1JFRywgUlRMODM2N0NfVEFCTEVfTFVUX0FERFJfQlVTWV9GTEFHX09GRlNFVCwmcmVnRGF0YSk7CisgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIGlmKHJlZ0RhdGEgPT0gMCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGJ1c3lDb3VudGVyIC0tOworICAgICAgICBpZihidXN5Q291bnRlciA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9CVVNZV0FJVF9USU1FT1VUOworICAgIH0KKworICAgIC8qIFdyaXRlIEFkZHJlc3MgKFZMQU5fSUQpICovCisgICAgcmVnRGF0YSA9IHBWbGFuNGtFbnRyeS0+dmlkOworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfVEFCTEVfQUNDRVNTX0FERFJfUkVHLCByZWdEYXRhKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgLyogUmVhZCBDb21tYW5kICovCisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfVEFCTEVfQUNDRVNTX0NUUkxfUkVHLCBSVEw4MzY3Q19UQUJMRV9UWVBFX01BU0sgfCBSVEw4MzY3Q19DT01NQU5EX1RZUEVfTUFTSywgUlRMODM2N0NfVEFCTEVfQUNDRVNTX1JFR19EQVRBKFRCX09QX1JFQUQsVEJfVEFSR0VUX0NWTEFOKSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIC8qIFBvbGxpbmcgc3RhdHVzICovCisgICAgYnVzeUNvdW50ZXIgPSBSVEw4MzY3Q19WTEFOX0JVU1lfQ0hFQ0tfTk87CisgICAgd2hpbGUoYnVzeUNvdW50ZXIpCisgICAgeworICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1RBQkxFX0FDQ0VTU19TVEFUVVNfUkVHLCBSVEw4MzY3Q19UQUJMRV9MVVRfQUREUl9CVVNZX0ZMQUdfT0ZGU0VULCZyZWdEYXRhKTsKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgaWYocmVnRGF0YSA9PSAwKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgYnVzeUNvdW50ZXIgLS07CisgICAgICAgIGlmKGJ1c3lDb3VudGVyID09IDApCisgICAgICAgICAgICByZXR1cm4gUlRfRVJSX0JVU1lXQUlUX1RJTUVPVVQ7CisgICAgfQorCisgICAgLyogUmVhZCBWTEFOIGRhdGEgZnJvbSByZWdpc3RlciAqLworICAgIHRhYmxlQWRkciA9IHZsYW5fNGtfZW50cnk7CisgICAgZm9yKHBhZ2VfaWR4ID0gMDsgcGFnZV9pZHggPCBSVEw4MzY3Q19WTEFOXzRLVEFCTEVfTEVOOyBwYWdlX2lkeCsrKQorICAgIHsKKyAgICAgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZyhSVEw4MzY3Q19UQUJMRV9BQ0NFU1NfUkREQVRBX0JBU0UgKyBwYWdlX2lkeCwgJnJlZ0RhdGEpOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAqdGFibGVBZGRyID0gcmVnRGF0YTsKKyAgICAgICAgdGFibGVBZGRyKys7CisgICAgfQorCisgICAgX3J0bDgzNjdjX1ZsYW40a1N0U21pMlVzZXIodmxhbl80a19lbnRyeSwgcFZsYW40a0VudHJ5KTsKKworI2lmIGRlZmluZWQoQ09ORklHX1JUTDgzNjdDX0FTSUNEUlZfVEVTVCkKKyAgICBtZW1jcHkocFZsYW40a0VudHJ5LCAmUnRsODM3MHNWaXJ0dWFsVmxhblRhYmxlW3BWbGFuNGtFbnRyeS0+dmlkXSwgc2l6ZW9mKHJ0bDgzNjdjX3VzZXJfdmxhbjRrZW50cnkpKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNWbGFuQWNjcGV0RnJhbWVUeXBlCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHBlci1wb3J0IGFjY2VwdGFibGUgZnJhbWUgdHlwZQorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+MTApCisgKiAgICAgIGZyYW1lVHlwZSAgIC0gVGhlIGFjY2VwdGFibGUgZnJhbWUgdHlwZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiAgICAgIFJUX0VSUl9WTEFOX0FDQ0VQVF9GUkFNRV9UWVBFICAgLSBJbnZhbGlkIGZyYW1lIHR5cGUKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1ZsYW5BY2NwZXRGcmFtZVR5cGUocnRrX3VpbnQzMiBwb3J0LCBydGw4MzY3Y19hY2NmcmFtZXR5cGUgZnJhbWVUeXBlKQoreworICAgIGlmKHBvcnQgPiBSVEw4MzY3Q19QT1JUSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIGlmKGZyYW1lVHlwZSA+PSBGUkFNRV9UWVBFX01BWF9CT1VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9WTEFOX0FDQ0VQVF9GUkFNRV9UWVBFOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1ZMQU5fQUNDRVBUX0ZSQU1FX1RZUEVfUkVHKHBvcnQpLCBSVEw4MzY3Q19WTEFOX0FDQ0VQVF9GUkFNRV9UWVBFX01BU0socG9ydCksIGZyYW1lVHlwZSk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljVmxhbkFjY3BldEZyYW1lVHlwZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwZXItcG9ydCBhY2NlcHRhYmxlIGZyYW1lIHR5cGUKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjEwKQorICogICAgICBwRnJhbWVUeXBlICAtIFRoZSBhY2NlcHRhYmxlIGZyYW1lIHR5cGUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAgICAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogICAgICBSVF9FUlJfVkxBTl9BQ0NFUFRfRlJBTUVfVFlQRSAgIC0gSW52YWxpZCBmcmFtZSB0eXBlCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNWbGFuQWNjcGV0RnJhbWVUeXBlKHJ0a191aW50MzIgcG9ydCwgcnRsODM2N2NfYWNjZnJhbWV0eXBlICpwRnJhbWVUeXBlKQoreworICAgIHJ0a191aW50MzIgcmVnRGF0YTsKKyAgICByZXRfdCAgcmV0VmFsOworCisgICAgaWYocG9ydCA+IFJUTDgzNjdDX1BPUlRJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1ZMQU5fQUNDRVBUX0ZSQU1FX1RZUEVfUkVHKHBvcnQpLCBSVEw4MzY3Q19WTEFOX0FDQ0VQVF9GUkFNRV9UWVBFX01BU0socG9ydCksICZyZWdEYXRhKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgKnBGcmFtZVR5cGUgPSAocnRsODM2N2NfYWNjZnJhbWV0eXBlKXJlZ0RhdGE7CisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNWbGFuSW5ncmVzc0ZpbHRlcgorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBWTEFOIEluZ3Jlc3MgRmlsdGVyCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH4xMCkKKyAqICAgICAgZW5hYmxlZCAgICAgLSBFbmFibGUgb3IgZGlzYWJsZSBJbmdyZXNzIGZpbHRlcgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNWbGFuSW5ncmVzc0ZpbHRlcihydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgZW5hYmxlZCkKK3sKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVElETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19WTEFOX0lOR1JFU1NfUkVHLCBwb3J0LCBlbmFibGVkKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNWbGFuSW5ncmVzc0ZpbHRlcgorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBWTEFOIEluZ3Jlc3MgRmlsdGVyCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH4xMCkKKyAqICAgICAgcEVuYWJsZSAgICAgLSBFbmFibGUgb3IgZGlzYWJsZSBJbmdyZXNzIGZpbHRlcgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNWbGFuSW5ncmVzc0ZpbHRlcihydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgKnBFbmFibGUpCit7CisgICAgaWYocG9ydCA+IFJUTDgzNjdDX1BPUlRJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfVkxBTl9JTkdSRVNTX1JFRywgcG9ydCwgcEVuYWJsZSk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljVmxhbkVncmVzc1RhZ01vZGUKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgQ1ZMQU4gZWdyZXNzIHRhZyBtb2RlCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH4xMCkKKyAqICAgICAgdGFnTW9kZSAgICAgLSBUaGUgZWdyZXNzIHRhZyBtb2RlLiBJbmNsdWRpbmcgT3JpZ2luYWwgbW9kZSwgS2VlcCB0YWcgbW9kZSBhbmQgUHJpb3JpdHkgdGFnIG1vZGUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljVmxhbkVncmVzc1RhZ01vZGUocnRrX3VpbnQzMiBwb3J0LCBydGw4MzY3Y19lZ3RhZ21vZGUgdGFnTW9kZSkKK3sKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVElETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICBpZih0YWdNb2RlID49IEVHX1RBR19NT0RFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19QT1JUX01JU0NfQ0ZHX1JFRyhwb3J0KSwgUlRMODM2N0NfVkxBTl9FR1JFU1NfTURPRV9NQVNLLCB0YWdNb2RlKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNWbGFuRWdyZXNzVGFnTW9kZQorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBDVkxBTiBlZ3Jlc3MgdGFnIG1vZGUKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjEwKQorICogICAgICBwVGFnTW9kZSAgICAtIFRoZSBlZ3Jlc3MgdGFnIG1vZGUuIEluY2x1ZGluZyBPcmlnaW5hbCBtb2RlLCBLZWVwIHRhZyBtb2RlIGFuZCBQcmlvcml0eSB0YWcgbW9kZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNWbGFuRWdyZXNzVGFnTW9kZShydGtfdWludDMyIHBvcnQsIHJ0bDgzNjdjX2VndGFnbW9kZSAqcFRhZ01vZGUpCit7CisgICAgcnRrX3VpbnQzMiByZWdEYXRhOworICAgIHJldF90ICByZXRWYWw7CisKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVElETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUE9SVF9NSVNDX0NGR19SRUcocG9ydCksIFJUTDgzNjdDX1ZMQU5fRUdSRVNTX01ET0VfTUFTSywgJnJlZ0RhdGEpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAqcFRhZ01vZGUgPSAocnRsODM2N2NfZWd0YWdtb2RlKXJlZ0RhdGE7CisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNWbGFuUG9ydEJhc2VkVklECisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHBvcnQgYmFzZWQgVklEIHdoaWNoIGlzIGluZGV4ZWQgdG8gMzIgVkxBTiBtZW1iZXIgY29uZmlndXJhdGlvbnMKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+MTApCisgKiAgICAgIGluZGV4ICAgLSBJbmRleCB0byBWTEFOIG1lbWJlciBjb25maWd1cmF0aW9uCisgKiAgICAgIHByaSAgICAgLSAxUSBQb3J0IGJhc2VkIFZMQU4gcHJpb3JpdHkKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogICAgICBSVF9FUlJfUU9TX0lOVF9QUklPUklUWSAgICAgLSBJbnZhbGlkIHByaW9yaXR5CisgKiAgICAgIFJUX0VSUl9WTEFOX0VOVFJZX05PVF9GT1VORCAtIEludmFsaWQgVkxBTiBtZW1iZXIgY29uZmlndXJhdGlvbiBpbmRleAorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljVmxhblBvcnRCYXNlZFZJRChydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgaW5kZXgsIHJ0a191aW50MzIgcHJpKQoreworICAgIHJ0a191aW50MzIgcmVnQWRkciwgYml0X21hc2s7CisgICAgcmV0X3QgIHJldFZhbDsKKworICAgIGlmKHBvcnQgPiBSVEw4MzY3Q19QT1JUSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIGlmKGluZGV4ID4gUlRMODM2N0NfQ1ZJRFhNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfVkxBTl9FTlRSWV9OT1RfRk9VTkQ7CisKKyAgICBpZihwcmkgPiBSVEw4MzY3Q19QUklNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUU9TX0lOVF9QUklPUklUWTsKKworICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19WTEFOX1BWSURfQ1RSTF9SRUcocG9ydCk7CisgICAgYml0X21hc2sgPSBSVEw4MzY3Q19QT1JUX1ZJRFhfTUFTSyhwb3J0KTsKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhyZWdBZGRyLCBiaXRfbWFzaywgaW5kZXgpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZWdBZGRyID0gUlRMODM2N0NfVkxBTl9QT1JUQkFTRURfUFJJT1JJVFlfUkVHKHBvcnQpOworICAgIGJpdF9tYXNrID0gUlRMODM2N0NfVkxBTl9QT1JUQkFTRURfUFJJT1JJVFlfTUFTSyhwb3J0KTsKKyAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhyZWdBZGRyLCBiaXRfbWFzaywgcHJpKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNWbGFuUG9ydEJhc2VkVklECisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHBvcnQgYmFzZWQgVklEIHdoaWNoIGlzIGluZGV4ZWQgdG8gMzIgVkxBTiBtZW1iZXIgY29uZmlndXJhdGlvbnMKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+MTApCisgKiAgICAgIHBJbmRleCAgLSBJbmRleCB0byBWTEFOIG1lbWJlciBjb25maWd1cmF0aW9uCisgKiAgICAgIHBQcmkgICAgLSAxUSBQb3J0IGJhc2VkIFZMQU4gcHJpb3JpdHkKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljVmxhblBvcnRCYXNlZFZJRChydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgKnBJbmRleCwgcnRrX3VpbnQzMiAqcFByaSkKK3sKKyAgICBydGtfdWludDMyIHJlZ0FkZHIsYml0X21hc2s7CisgICAgcmV0X3QgIHJldFZhbDsKKworICAgIGlmKHBvcnQgPiBSVEw4MzY3Q19QT1JUSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19WTEFOX1BWSURfQ1RSTF9SRUcocG9ydCk7CisgICAgYml0X21hc2sgPSBSVEw4MzY3Q19QT1JUX1ZJRFhfTUFTSyhwb3J0KTsKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhyZWdBZGRyLCBiaXRfbWFzaywgcEluZGV4KTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmVnQWRkciA9IFJUTDgzNjdDX1ZMQU5fUE9SVEJBU0VEX1BSSU9SSVRZX1JFRyhwb3J0KTsKKyAgICBiaXRfbWFzayA9IFJUTDgzNjdDX1ZMQU5fUE9SVEJBU0VEX1BSSU9SSVRZX01BU0socG9ydCk7CisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMocmVnQWRkciwgYml0X21hc2ssIHBQcmkpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1ZsYW5Qcm90b2NvbEJhc2VkR3JvdXBEYXRhCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHByb3RvY29sIGFuZCBwb3J0IGJhc2VkIGdyb3VwIGRhdGFiYXNlCisgKiBJbnB1dDoKKyAqICAgICAgaW5kZXggICAgICAgLSBJbmRleCB0byBWTEFOIG1lbWJlciBjb25maWd1cmF0aW9uCisgKiAgICAgIHBQYkNmZyAgLSBQcm90b2NvbCBhbmQgcG9ydCBiYXNlZCBncm91cCBkYXRhYmFzZSBlbnRyeQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcgorICogICAgICBSVF9FUlJfVkxBTl9QUk9UT19BTkRfUE9SVCAgLSBJbnZhbGlkIHByb3RvY29sIGJhc2UgZ3JvdXAgZGF0YWJhc2UgaW5kZXgKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1ZsYW5Qcm90b2NvbEJhc2VkR3JvdXBEYXRhKHJ0a191aW50MzIgaW5kZXgsIHJ0bDgzNjdjX3Byb3RvY29sZ2RhdGFjZmcgKnBQYkNmZykKK3sKKyAgICBydGtfdWludDMyICBmcmFtZVR5cGU7CisgICAgcnRrX3VpbnQzMiAgZXRoZXJUeXBlOworICAgIHJldF90ICAgcmV0VmFsOworCisgICAgLyogRXJyb3IgQ2hlY2tpbmcgKi8KKyAgICBpZihpbmRleCA+IFJUTDgzNjdDX1BST1RPVkxBTl9HSURYX01BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9WTEFOX1BST1RPX0FORF9QT1JUOworCisgICAgaWYocFBiQ2ZnLT5mcmFtZVR5cGUgPj0gUFBWTEFOX0ZSQU1FX1RZUEVfRU5EICkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGZyYW1lVHlwZSA9IHBQYkNmZy0+ZnJhbWVUeXBlOworICAgIGV0aGVyVHlwZSA9IHBQYkNmZy0+ZXRoZXJUeXBlOworCisgICAgLyogRnJhbWUgdHlwZSAqLworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1ZMQU5fUFBCX0ZSQU1FVFlQRV9SRUcoaW5kZXgpLCBSVEw4MzY3Q19WTEFOX1BQQl9GUkFNRVRZUEVfTUFTSywgZnJhbWVUeXBlKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgLyogRXRoZXIgdHlwZSAqLworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWcoUlRMODM2N0NfVkxBTl9QUEJfRVRIRVJUWVBSX1JFRyhpbmRleCksIGV0aGVyVHlwZSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljVmxhblByb3RvY29sQmFzZWRHcm91cERhdGEKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcHJvdG9jb2wgYW5kIHBvcnQgYmFzZWQgZ3JvdXAgZGF0YWJhc2UKKyAqIElucHV0OgorICogICAgICBpbmRleCAgICAgICAtIEluZGV4IHRvIFZMQU4gbWVtYmVyIGNvbmZpZ3VyYXRpb24KKyAqICAgICAgcFBiQ2ZnICAtIFByb3RvY29sIGFuZCBwb3J0IGJhc2VkIGdyb3VwIGRhdGFiYXNlIGVudHJ5CisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVyCisgKiAgICAgIFJUX0VSUl9WTEFOX1BST1RPX0FORF9QT1JUICAtIEludmFsaWQgcHJvdG9jb2wgYmFzZSBncm91cCBkYXRhYmFzZSBpbmRleAorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljVmxhblByb3RvY29sQmFzZWRHcm91cERhdGEocnRrX3VpbnQzMiBpbmRleCwgcnRsODM2N2NfcHJvdG9jb2xnZGF0YWNmZyAqcFBiQ2ZnKQoreworICAgIHJ0a191aW50MzIgIGZyYW1lVHlwZTsKKyAgICBydGtfdWludDMyICBldGhlclR5cGU7CisgICAgcmV0X3QgICByZXRWYWw7CisKKyAgICAvKiBFcnJvciBDaGVja2luZyAqLworICAgIGlmKGluZGV4ID4gUlRMODM2N0NfUFJPVE9WTEFOX0dJRFhfTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1ZMQU5fUFJPVE9fQU5EX1BPUlQ7CisKKyAgICAvKiBSZWFkIEZyYW1lIHR5cGUgKi8KKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19WTEFOX1BQQl9GUkFNRVRZUEVfUkVHKGluZGV4KSwgUlRMODM2N0NfVkxBTl9QUEJfRlJBTUVUWVBFX01BU0ssICZmcmFtZVR5cGUpOworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAvKiBSZWFkIEV0aGVyIHR5cGUgKi8KKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnKFJUTDgzNjdDX1ZMQU5fUFBCX0VUSEVSVFlQUl9SRUcoaW5kZXgpLCAmZXRoZXJUeXBlKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisKKyAgICBwUGJDZmctPmZyYW1lVHlwZSA9IGZyYW1lVHlwZTsKKyAgICBwUGJDZmctPmV0aGVyVHlwZSA9IGV0aGVyVHlwZTsKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1ZsYW5Qb3J0QW5kUHJvdG9jb2xCYXNlZAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwcm90b2NvbCBhbmQgcG9ydCBiYXNlZCBWTEFOIGNvbmZpZ3VyYXRpb24KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjEwKQorICogICAgICBpbmRleCAgICAgICAtIEluZGV4IG9mIHByb3RvY29sIGFuZCBwb3J0IGJhc2VkIGRhdGFiYXNlIGluZGV4CisgKiAgICAgIHBQcGJDZmcgICAgIC0gUHJvdG9jb2wgYW5kIHBvcnQgYmFzZWQgVkxBTiBjb25maWd1cmF0aW9uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVyCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqICAgICAgUlRfRVJSX1FPU19JTlRfUFJJT1JJVFkgICAgIC0gSW52YWxpZCBwcmlvcml0eQorICogICAgICBSVF9FUlJfVkxBTl9QUk9UT19BTkRfUE9SVCAgLSBJbnZhbGlkIHByb3RvY29sIGJhc2UgZ3JvdXAgZGF0YWJhc2UgaW5kZXgKKyAqICAgICAgUlRfRVJSX1ZMQU5fRU5UUllfTk9UX0ZPVU5EIC0gSW52YWxpZCBWTEFOIG1lbWJlciBjb25maWd1cmF0aW9uIGluZGV4CisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNWbGFuUG9ydEFuZFByb3RvY29sQmFzZWQocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGluZGV4LCBydGw4MzY3Y19wcm90b2NvbHZsYW5jZmcgKnBQcGJDZmcpCit7CisgICAgcnRrX3VpbnQzMiAgcmVnX2FkZHIsIGJpdF9tYXNrLCBiaXRfdmFsdWU7CisgICAgcmV0X3QgICByZXRWYWw7CisKKyAgICAvKiBFcnJvciBDaGVja2luZyAqLworICAgIGlmKHBvcnQgPiBSVEw4MzY3Q19QT1JUSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIGlmKGluZGV4ID4gUlRMODM2N0NfUFJPVE9WTEFOX0dJRFhfTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1ZMQU5fUFJPVE9fQU5EX1BPUlQ7CisKKyAgICBpZiggKHBQcGJDZmctPnZhbGlkICE9IEZBTFNFKSAmJiAocFBwYkNmZy0+dmFsaWQgIT0gVFJVRSkgKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYocFBwYkNmZy0+dmxhbl9pZHggPiBSVEw4MzY3Q19DVklEWE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9WTEFOX0VOVFJZX05PVF9GT1VORDsKKworICAgIGlmKHBQcGJDZmctPnByaW9yaXR5ID4gUlRMODM2N0NfUFJJTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1FPU19JTlRfUFJJT1JJVFk7CisKKyAgICAvKiBWYWxpZCBiaXQgKi8KKyAgICByZWdfYWRkciAgPSBSVEw4MzY3Q19WTEFOX1BQQl9WQUxJRF9SRUcoaW5kZXgpOworICAgIGJpdF9tYXNrICA9IDB4MDAwMSA8PCBwb3J0OworICAgIGJpdF92YWx1ZSA9ICgoVFJVRSA9PSBwUHBiQ2ZnLT52YWxpZCkgPyAweDEgOiAweDApOworICAgIHJldFZhbCAgICA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKHJlZ19hZGRyLCBiaXRfbWFzaywgYml0X3ZhbHVlKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgLyogQ2FsY3VsYXRlIHRoZSBhY3R1YWwgcmVnaXN0ZXIgYWRkcmVzcyBmb3IgQ1ZMQU4gaW5kZXgqLworICAgIGlmKHBvcnQgPCA4KQorICAgIHsKKyAgICAgICAgcmVnX2FkZHIgPSBSVEw4MzY3Q19WTEFOX1BQQl9DVFJMX1JFRyhpbmRleCwgcG9ydCk7CisgICAgICAgIGJpdF9tYXNrID0gUlRMODM2N0NfVkxBTl9QUEJfQ1RSTF9NQVNLKHBvcnQpOworICAgIH0KKyAgICBlbHNlIGlmKHBvcnQgPT0gOCkKKyAgICB7CisgICAgICAgIHJlZ19hZGRyID0gUlRMODM2N0NfUkVHX1ZMQU5fUFBCMF9DVFJMNDsKKyAgICAgICAgYml0X21hc2sgPSBSVEw4MzY3Q19WTEFOX1BQQjBfQ1RSTDRfUE9SVDhfSU5ERVhfTUFTSzsKKyAgICB9CisgICAgZWxzZSBpZihwb3J0ID09IDkpCisgICAgeworICAgICAgICByZWdfYWRkciA9IFJUTDgzNjdDX1JFR19WTEFOX1BQQjBfQ1RSTDQ7CisgICAgICAgIGJpdF9tYXNrID0gUlRMODM2N0NfVkxBTl9QUEIwX0NUUkw0X1BPUlQ5X0lOREVYX01BU0s7CisgICAgfQorICAgIGVsc2UgaWYocG9ydCA9PSAxMCkKKyAgICB7CisgICAgICAgIHJlZ19hZGRyID0gUlRMODM2N0NfUkVHX1ZMQU5fUFBCMF9DVFJMNDsKKyAgICAgICAgYml0X21hc2sgPSBSVEw4MzY3Q19WTEFOX1BQQjBfQ1RSTDRfUE9SVDEwX0lOREVYX01BU0s7CisgICAgfQorCisgICAgYml0X3ZhbHVlID0gcFBwYkNmZy0+dmxhbl9pZHg7CisgICAgcmV0VmFsICA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKHJlZ19hZGRyLCBiaXRfbWFzaywgYml0X3ZhbHVlKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgLyogd3JpdGUgcHJpb3JpdHkgKi8KKyAgICByZWdfYWRkciAgPSBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNX1JFRyhwb3J0LCBpbmRleCk7CisgICAgYml0X21hc2sgID0gUlRMODM2N0NfVkxBTl9QUEJfUFJJT1JJVFlfSVRFTV9NQVNLKHBvcnQpOworICAgIGJpdF92YWx1ZSA9IHBQcGJDZmctPnByaW9yaXR5OworICAgIHJldFZhbCAgICA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKHJlZ19hZGRyLCBiaXRfbWFzaywgYml0X3ZhbHVlKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNWbGFuUG9ydEFuZFByb3RvY29sQmFzZWQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcHJvdG9jb2wgYW5kIHBvcnQgYmFzZWQgVkxBTiBjb25maWd1cmF0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH43KQorICogICAgICBpbmRleCAgICAgICAtIEluZGV4IG9mIHByb3RvY29sIGFuZCBwb3J0IGJhc2VkIGRhdGFiYXNlIGluZGV4CisgKiAgICAgIHBQcGJDZmcgICAgIC0gUHJvdG9jb2wgYW5kIHBvcnQgYmFzZWQgVkxBTiBjb25maWd1cmF0aW9uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVyCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqICAgICAgUlRfRVJSX1ZMQU5fUFJPVE9fQU5EX1BPUlQgIC0gSW52YWxpZCBwcm90b2NvbCBiYXNlIGdyb3VwIGRhdGFiYXNlIGluZGV4CisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX2dldEFzaWNWbGFuUG9ydEFuZFByb3RvY29sQmFzZWQocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIGluZGV4LCBydGw4MzY3Y19wcm90b2NvbHZsYW5jZmcgKnBQcGJDZmcpCit7CisgICAgcnRrX3VpbnQzMiAgcmVnX2FkZHIsIGJpdF9tYXNrLCBiaXRfdmFsdWU7CisgICAgcmV0X3QgICByZXRWYWw7CisKKyAgICAvKiBFcnJvciBDaGVja2luZyAqLworICAgIGlmKHBvcnQgPiBSVEw4MzY3Q19QT1JUSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9JRDsKKworICAgIGlmKGluZGV4ID4gUlRMODM2N0NfUFJPVE9WTEFOX0dJRFhfTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1ZMQU5fUFJPVE9fQU5EX1BPUlQ7CisKKyAgICBpZihwUHBiQ2ZnID09IE5VTEwpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICAvKiBWYWxpZCBiaXQgKi8KKyAgICByZWdfYWRkciAgPSBSVEw4MzY3Q19WTEFOX1BQQl9WQUxJRF9SRUcoaW5kZXgpOworICAgIGJpdF9tYXNrICA9IDB4MDAwMSA8PCBwb3J0OworICAgIHJldFZhbCAgICA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKHJlZ19hZGRyLCBiaXRfbWFzaywgJmJpdF92YWx1ZSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHBQcGJDZmctPnZhbGlkID0gYml0X3ZhbHVlOworCisgICAgLyogQ1ZMQU4gaW5kZXggKi8KKyAgICBpZihwb3J0IDwgOCkKKyAgICB7CisgICAgICAgIHJlZ19hZGRyID0gUlRMODM2N0NfVkxBTl9QUEJfQ1RSTF9SRUcoaW5kZXgsIHBvcnQpOworICAgICAgICBiaXRfbWFzayA9IFJUTDgzNjdDX1ZMQU5fUFBCX0NUUkxfTUFTSyhwb3J0KTsKKyAgICB9CisgICAgZWxzZSBpZihwb3J0ID09IDgpCisgICAgeworICAgICAgICByZWdfYWRkciA9IFJUTDgzNjdDX1JFR19WTEFOX1BQQjBfQ1RSTDQ7CisgICAgICAgIGJpdF9tYXNrID0gUlRMODM2N0NfVkxBTl9QUEIwX0NUUkw0X1BPUlQ4X0lOREVYX01BU0s7CisgICAgfQorICAgIGVsc2UgaWYocG9ydCA9PSA5KQorICAgIHsKKyAgICAgICAgcmVnX2FkZHIgPSBSVEw4MzY3Q19SRUdfVkxBTl9QUEIwX0NUUkw0OworICAgICAgICBiaXRfbWFzayA9IFJUTDgzNjdDX1ZMQU5fUFBCMF9DVFJMNF9QT1JUOV9JTkRFWF9NQVNLOworICAgIH0KKyAgICBlbHNlIGlmKHBvcnQgPT0gMTApCisgICAgeworICAgICAgICByZWdfYWRkciA9IFJUTDgzNjdDX1JFR19WTEFOX1BQQjBfQ1RSTDQ7CisgICAgICAgIGJpdF9tYXNrID0gUlRMODM2N0NfVkxBTl9QUEIwX0NUUkw0X1BPUlQxMF9JTkRFWF9NQVNLOworICAgIH0KKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKHJlZ19hZGRyLCBiaXRfbWFzaywgJmJpdF92YWx1ZSk7CisgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHBQcGJDZmctPnZsYW5faWR4ID0gYml0X3ZhbHVlOworCisKKyAgICAvKiBwcmlvcml0eSAqLworICAgIHJlZ19hZGRyID0gUlRMODM2N0NfVkxBTl9QUEJfUFJJT1JJVFlfSVRFTV9SRUcocG9ydCxpbmRleCk7CisgICAgYml0X21hc2sgPSBSVEw4MzY3Q19WTEFOX1BQQl9QUklPUklUWV9JVEVNX01BU0socG9ydCk7CisgICAgcmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMocmVnX2FkZHIsIGJpdF9tYXNrLCAmYml0X3ZhbHVlKTsKKyAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcFBwYkNmZy0+cHJpb3JpdHkgPSBiaXRfdmFsdWU7CisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNWbGFuRmlsdGVyCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IGVuYWJsZSBDVkxBTiBmaWx0ZXJpbmcgZnVuY3Rpb24KKyAqIElucHV0OgorICogICAgICBlbmFibGVkIC0gMTogZW5hYmxlZCwgMDogZGlzYWJsZWQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2Nfc2V0QXNpY1ZsYW5GaWx0ZXIocnRrX3VpbnQzMiBlbmFibGVkKQoreworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19WTEFOX0NUUkwsIFJUTDgzNjdDX1ZMQU5fQ1RSTF9PRkZTRVQsIGVuYWJsZWQpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1ZsYW5GaWx0ZXIKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgZW5hYmxlIENWTEFOIGZpbHRlcmluZyBmdW5jdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHBFbmFibGVkIC0gMTogZW5hYmxlZCwgMDogZGlzYWJsZWQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1ZsYW5GaWx0ZXIocnRrX3VpbnQzMiogcEVuYWJsZWQpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1ZMQU5fQ1RSTCwgUlRMODM2N0NfVkxBTl9DVFJMX09GRlNFVCwgcEVuYWJsZWQpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1ZsYW5VbnRhZ0RzY3BQcmlvcml0eUVuCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IGVuYWJsZSBEc2NwIHRvIHVudGFnIDFRIHByaW9yaXR5CisgKiBJbnB1dDoKKyAqICAgICAgZW5hYmxlZCAtIDE6IGVuYWJsZWQsIDA6IGRpc2FibGVkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNWbGFuVW50YWdEc2NwUHJpb3JpdHlFbihydGtfdWludDMyIGVuYWJsZWQpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1VOVEFHX0RTQ1BfUFJJX0NGRywgUlRMODM2N0NfVU5UQUdfRFNDUF9QUklfQ0ZHX09GRlNFVCwgZW5hYmxlZCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljVmxhblVudGFnRHNjcFByaW9yaXR5RW4KKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgZW5hYmxlIERzY3AgdG8gdW50YWcgMVEgcHJpb3JpdHkKKyAqIElucHV0OgorICogICAgICBlbmFibGVkIC0gMTogZW5hYmxlZCwgMDogZGlzYWJsZWQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1ZsYW5VbnRhZ0RzY3BQcmlvcml0eUVuKHJ0a191aW50MzIqIGVuYWJsZWQpCit7CisgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1VOVEFHX0RTQ1BfUFJJX0NGRywgUlRMODM2N0NfVU5UQUdfRFNDUF9QUklfQ0ZHX09GRlNFVCwgZW5hYmxlZCk7Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljUG9ydEJhc2VkRmlkCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHBvcnQgYmFzZWQgRklECisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjEwKQorICogICAgICBmaWQgICAgIC0gUG9ydCBiYXNlZCBmaWQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0wyX0ZJRCAgIC0gSW52YWxpZCBGSUQKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljUG9ydEJhc2VkRmlkKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBmaWQpCit7CisgICAgcnRrX3VpbnQzMiAgcmVnX2FkZHI7CisKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVElETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICBpZihmaWQgPiBSVEw4MzY3Q19GSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfTDJfRklEOworCisgICAgaWYocG9ydCA8IDgpCisgICAgICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnKFJUTDgzNjdDX1BPUlRfUEJGSURfUkVHKHBvcnQpLGZpZCk7CisgICAgZWxzZSB7CisgICAgICAgIHJlZ19hZGRyID0gUlRMODM2N0NfUkVHX1BPUlQ4X1BCRklEICsgcG9ydC04OworICAgICAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZyhyZWdfYWRkciwgZmlkKTsKKyAgICB9CisKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNQb3J0QmFzZWRGaWQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcG9ydCBiYXNlZCBGSUQKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+NykKKyAqICAgICAgcEZpZCAgICAtIFBvcnQgYmFzZWQgZmlkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1BvcnRCYXNlZEZpZChydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIqIHBGaWQpCit7CisgICAgcnRrX3VpbnQzMiAgcmVnX2FkZHI7CisKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVElETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICBpZihwb3J0IDwgOCkKKyAgICAgICAgcmV0dXJuIHJ0bDgzNjdjX2dldEFzaWNSZWcoUlRMODM2N0NfUE9SVF9QQkZJRF9SRUcocG9ydCksIHBGaWQpOworICAgIGVsc2V7CisgICAgICAgIHJlZ19hZGRyID0gUlRMODM2N0NfUkVHX1BPUlQ4X1BCRklEICsgcG9ydC04OworICAgICAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZyhyZWdfYWRkciwgcEZpZCk7CisgICAgfQorfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1BvcnRCYXNlZEZpZEVuCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHBvcnQgYmFzZWQgRklEIHNlbGVjdGlvbiBlbmFibGUKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+MTApCisgKiAgICAgIGVuYWJsZWQgLSAxOiBlbmFibGVkLCAwOiBkaXNhYmxlZAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNQb3J0QmFzZWRGaWRFbihydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgZW5hYmxlZCkKK3sKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVElETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfUE9SVF9QQkZJREVOLHBvcnQsIGVuYWJsZWQpOworfQorLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2NfZ2V0QXNpY1BvcnRCYXNlZEZpZEVuCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHBvcnQgYmFzZWQgRklEIHNlbGVjdGlvbiBlbmFibGUKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+MTApCisgKiAgICAgIHBFbmFibGVkIC0gMTogZW5hYmxlZCwgMDogZGlzYWJsZWQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljUG9ydEJhc2VkRmlkRW4ocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyKiBwRW5hYmxlZCkKK3sKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVElETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfUE9SVF9QQkZJREVOLHBvcnQsIHBFbmFibGVkKTsKK30KKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3NldEFzaWNTcGFubmluZ1RyZWVTdGF0dXMKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgc3Bhbm5pbmcgdHJlZSBzdGF0ZSBwZXIgZWFjaCBwb3J0CisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjEwKQorICogICAgICBtc3RpICAgIC0gTXVsdGlwbGUgc3Bhbm5pbmcgdHJlZSBpbnN0YW5jZQorICogICAgICBzdGF0ZSAgIC0gU3Bhbm5pbmcgdHJlZSBzdGF0ZSBmb3IgbXN0aQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9NU1RJICAgICAgICAgLSBJbnZhbGlkIG1zdGkgcGFyYW1ldGVyCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiAgICAgIFJUX0VSUl9NU1RQX1NUQVRFICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNTcGFubmluZ1RyZWVTdGF0dXMocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyIG1zdGksIHJ0a191aW50MzIgc3RhdGUpCit7CisgICAgcnRrX3VpbnQzMiAgcmVnX2FkZHIsYml0c19tc2s7CisKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVElETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICBpZihtc3RpID4gUlRMODM2N0NfTVNUSU1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9NU1RJOworCisgICAgaWYoc3RhdGUgPiBTVFBTVF9GT1JXQVJESU5HKQorICAgICAgICByZXR1cm4gUlRfRVJSX01TVFBfU1RBVEU7CisKKyAgICBpZihwb3J0IDwgOCkKKyAgICAgICAgcmV0dXJuIHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1ZMQU5fTVNUSV9SRUcobXN0aSxwb3J0KSwgUlRMODM2N0NfVkxBTl9NU1RJX01BU0socG9ydCksc3RhdGUpOworICAgIGVsc2V7CisgICAgICAgIHJlZ19hZGRyID0gUlRMODM2N0NfVkxBTl9NU1RJX1JFRyhtc3RpLHBvcnQpOworICAgICAgICBzd2l0Y2gocG9ydCl7CisgICAgICAgICAgICBjYXNlIDg6IGJpdHNfbXNrID0gUlRMODM2N0NfVkxBTl9NU1RJMF9DVFJMMV9QT1JUOF9TVEFURV9NQVNLO2JyZWFrOworICAgICAgICAgICAgY2FzZSA5OiBiaXRzX21zayA9IFJUTDgzNjdDX1ZMQU5fTVNUSTBfQ1RSTDFfUE9SVDlfU1RBVEVfTUFTSzticmVhazsKKyAgICAgICAgICAgIGNhc2UgMTA6IGJpdHNfbXNrID0gUlRMODM2N0NfVkxBTl9NU1RJMF9DVFJMMV9QT1JUMTBfU1RBVEVfTUFTSzticmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMocmVnX2FkZHIsIGJpdHNfbXNrLHN0YXRlKTsKKyAgICB9Cit9CisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljU3Bhbm5pbmdUcmVlU3RhdHVzCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHNwYW5uaW5nIHRyZWUgc3RhdGUgcGVyIGVhY2ggcG9ydAorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH4xMCkKKyAqICAgICAgbXN0aSAgICAtIE11bHRpcGxlIHNwYW5uaW5nIHRyZWUgaW5zdGFuY2UKKyAqICAgICAgcFN0YXRlICAtIFNwYW5uaW5nIHRyZWUgc3RhdGUgZm9yIG1zdGkKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfTVNUSSAgICAgICAgIC0gSW52YWxpZCBtc3RpIHBhcmFtZXRlcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljU3Bhbm5pbmdUcmVlU3RhdHVzKHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBtc3RpLCBydGtfdWludDMyKiBwU3RhdGUpCit7CisgICAgcnRrX3VpbnQzMiAgcmVnX2FkZHIsYml0c19tc2s7CisKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVElETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICBpZihtc3RpID4gUlRMODM2N0NfTVNUSU1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9NU1RJOworCisgICAgaWYocG9ydCA8IDgpCisgICAgICAgIHJldHVybiBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19WTEFOX01TVElfUkVHKG1zdGkscG9ydCksIFJUTDgzNjdDX1ZMQU5fTVNUSV9NQVNLKHBvcnQpLCBwU3RhdGUpOworICAgIGVsc2V7CisgICAgICAgIHJlZ19hZGRyID0gUlRMODM2N0NfVkxBTl9NU1RJX1JFRyhtc3RpLHBvcnQpOworICAgICAgICBzd2l0Y2gocG9ydCl7CisgICAgICAgICAgICBjYXNlIDg6IGJpdHNfbXNrID0gUlRMODM2N0NfVkxBTl9NU1RJMF9DVFJMMV9QT1JUOF9TVEFURV9NQVNLO2JyZWFrOworICAgICAgICAgICAgY2FzZSA5OiBiaXRzX21zayA9IFJUTDgzNjdDX1ZMQU5fTVNUSTBfQ1RSTDFfUE9SVDlfU1RBVEVfTUFTSzticmVhazsKKyAgICAgICAgICAgIGNhc2UgMTA6IGJpdHNfbXNrID0gUlRMODM2N0NfVkxBTl9NU1RJMF9DVFJMMV9QT1JUMTBfU1RBVEVfTUFTSzticmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMocmVnX2FkZHIsIGJpdHNfbXNrLCBwU3RhdGUpOworICAgIH0KKworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRBc2ljVmxhblRyYW5zcGFyZW50CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IFZMQU4gdHJhbnNwYXJlbnQKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAtIFBoeXNpY2FsIHBvcnQgbnVtYmVyICgwfjEwKQorICogICAgICBwb3J0bWFzayAgICAtIHBvcnRtYXNrKDB+MHhGRikKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9NQVNLICAgIC0gSW52YWxpZCBwb3J0bWFzaworICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRBc2ljVmxhblRyYW5zcGFyZW50KHJ0a191aW50MzIgcG9ydCwgcnRrX3VpbnQzMiBwb3J0bWFzaykKK3sKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVElETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICBpZihwb3J0bWFzayA+IFJUTDgzNjdDX1BPUlRNQVNLKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfTUFTSzsKKworICAgIHJldHVybiBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhSVEw4MzY3Q19SRUdfVkxBTl9FR1JFU1NfVFJBTlNfQ1RSTDAgKyBwb3J0LCBSVEw4MzY3Q19WTEFOX0VHUkVTU19UUkFOU19DVFJMMF9NQVNLLCBwb3J0bWFzayk7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldEFzaWNWbGFuVHJhbnNwYXJlbnQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgVkxBTiB0cmFuc3BhcmVudAorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+MTApCisgKiBPdXRwdXQ6CisgKiAgICAgIHBQb3J0bWFzayAgIC0gSW5ncmVzcyBwb3J0IG1hc2sKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfTUFTSyAgICAtIEludmFsaWQgcG9ydG1hc2sKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0QXNpY1ZsYW5UcmFuc3BhcmVudChydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgKnBQb3J0bWFzaykKK3sKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVElETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICByZXR1cm4gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdHMoUlRMODM2N0NfUkVHX1ZMQU5fRUdSRVNTX1RSQU5TX0NUUkwwICsgcG9ydCwgUlRMODM2N0NfVkxBTl9FR1JFU1NfVFJBTlNfQ1RSTDBfTUFTSywgcFBvcnRtYXNrKTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0QXNpY1ZsYW5FZ3Jlc3NLZWVwCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHBlciBlZ3Jlc3MgcG9ydCBWTEFOIGtlZXAgbW9kZQorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgIC0gUGh5c2ljYWwgcG9ydCBudW1iZXIgKDB+MTApCisgKiAgICAgIHBvcnRtYXNrICAgIC0gcG9ydG1hc2soMH4weEZGKQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX01BU0sgICAgLSBJbnZhbGlkIHBvcnRtYXNrCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldEFzaWNWbGFuRWdyZXNzS2VlcChydGtfdWludDMyIHBvcnQsIHJ0a191aW50MzIgcG9ydG1hc2spCit7CisgICAgcnRrX3VpbnQzMiByZWdBZGRyLCBiaXRfbWFzazsKKyAgICByZXRfdCAgcmV0VmFsOworCisgICAgaWYocG9ydCA+IFJUTDgzNjdDX1BPUlRJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX0lEOworCisgICAgaWYocG9ydG1hc2sgPiBSVEw4MzY3Q19QT1JUTUFTSykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9QT1JUX01BU0s7CisKKyAgICBpZihwb3J0IDwgOCl7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19WTEFOX0VHUkVTU19LRUVQX0NUUkwwICsgKHBvcnQ+PjEpLFJUTDgzNjdDX1BPUlQwX1ZMQU5fS0VFUF9NQVNLX01BU0s8PCgocG9ydCYxKSo4KSxwb3J0bWFzayAmIDB4ZmYpOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgcmVnQWRkciA9IFJUTDgzNjdDX1JFR19WTEFOX0VHUkVTU19LRUVQX0NUUkwwX0VYVCArIChwb3J0Pj4xKTsKKyAgICAgICAgYml0X21hc2sgPSBSVEw4MzY3Q19QT1JUMF9WTEFOX0tFRVBfTUFTS19FWFRfTUFTSzsKKyAgICAgICAgYml0X21hc2sgPDw9IChwb3J0JjEpKjM7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKHJlZ0FkZHIsIGJpdF9tYXNrLCAocG9ydG1hc2s+PjgpJjB4Nyk7CisgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKyAgICBlbHNleworICAgICAgICBzd2l0Y2gocG9ydCl7CisgICAgICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICAgICAgcmVnQWRkciA9IFJUTDgzNjdDX1JFR19WTEFOX0VHUkVTU19LRUVQX0NUUkw0OworICAgICAgICAgICAgICAgIGJpdF9tYXNrID0gUlRMODM2N0NfUE9SVDhfVkxBTl9LRUVQX01BU0tfTUFTSzsKKyAgICAgICAgICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhyZWdBZGRyLCBiaXRfbWFzaywgcG9ydG1hc2sgJiAweGZmKTsKKyAgICAgICAgICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19SRUdfVkxBTl9FR1JFU1NfS0VFUF9DVFJMNF9FWFQ7CisgICAgICAgICAgICAgICAgYml0X21hc2sgPSBSVEw4MzY3Q19QT1JUOF9WTEFOX0tFRVBfTUFTS19FWFRfTUFTSzsKKyAgICAgICAgICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhyZWdBZGRyLCBiaXRfbWFzaywgKHBvcnRtYXNrPj44KSYweDcpOworICAgICAgICAgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgOToKKyAgICAgICAgICAgICAgICByZWdBZGRyID0gUlRMODM2N0NfUkVHX1ZMQU5fRUdSRVNTX0tFRVBfQ1RSTDQ7CisgICAgICAgICAgICAgICAgYml0X21hc2sgPSBSVEw4MzY3Q19QT1JUOV9WTEFOX0tFRVBfTUFTS19NQVNLOworICAgICAgICAgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKHJlZ0FkZHIsIGJpdF9tYXNrLCBwb3J0bWFzayAmIDB4ZmYpOworICAgICAgICAgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgcmVnQWRkciA9IFJUTDgzNjdDX1JFR19WTEFOX0VHUkVTU19LRUVQX0NUUkw0X0VYVDsKKyAgICAgICAgICAgICAgICBiaXRfbWFzayA9IFJUTDgzNjdDX1BPUlQ5X1ZMQU5fS0VFUF9NQVNLX0VYVF9NQVNLOworICAgICAgICAgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXRzKHJlZ0FkZHIsIGJpdF9tYXNrLCAocG9ydG1hc2s+PjgpJjB4Nyk7CisgICAgICAgICAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAxMDoKKyAgICAgICAgICAgICAgICByZWdBZGRyID0gUlRMODM2N0NfUkVHX1ZMQU5fRUdSRVNTX0tFRVBfQ1RSTDU7CisgICAgICAgICAgICAgICAgYml0X21hc2sgPSBSVEw4MzY3Q19WTEFOX0VHUkVTU19LRUVQX0NUUkw1X01BU0s7CisgICAgICAgICAgICAgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdHMocmVnQWRkciwgYml0X21hc2ssIHBvcnRtYXNrICYgMHhmZik7CisgICAgICAgICAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICByZWdBZGRyID0gUlRMODM2N0NfUkVHX1ZMQU5fRUdSRVNTX0tFRVBfQ1RSTDVfRVhUOworICAgICAgICAgICAgICAgIGJpdF9tYXNrID0gUlRMODM2N0NfVkxBTl9FR1JFU1NfS0VFUF9DVFJMNV9FWFRfTUFTSzsKKyAgICAgICAgICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnQml0cyhyZWdBZGRyLCBiaXRfbWFzaywgKHBvcnRtYXNrPj44KSYweDcpOworICAgICAgICAgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRBc2ljVmxhbkVncmVzc0tlZXAKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcGVyIGVncmVzcyBwb3J0IFZMQU4ga2VlcCBtb2RlCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQaHlzaWNhbCBwb3J0IG51bWJlciAoMH43KQorICogICAgICBwUG9ydG1hc2sgICAtIHBvcnRtYXNrKDB+MHhGRikKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgIC0gSW52YWxpZCBwb3J0IG51bWJlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRBc2ljVmxhbkVncmVzc0tlZXAocnRrX3VpbnQzMiBwb3J0LCBydGtfdWludDMyKiBwUG9ydG1hc2spCit7CisgICAgcnRrX3VpbnQzMiByZWdBZGRyLCBiaXRfbWFzaywgcmVndmFsX2wsIHJlZ3ZhbF9oOworICAgIHJldF90ICByZXRWYWw7CisKKyAgICBpZihwb3J0ID4gUlRMODM2N0NfUE9SVElETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICBpZihwb3J0IDwgOCl7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKFJUTDgzNjdDX1JFR19WTEFOX0VHUkVTU19LRUVQX0NUUkwwICsgKHBvcnQ+PjEpLFJUTDgzNjdDX1BPUlQwX1ZMQU5fS0VFUF9NQVNLX01BU0s8PCgocG9ydCYxKSo4KSwmcmVndmFsX2wpOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgcmVnQWRkciA9IFJUTDgzNjdDX1JFR19WTEFOX0VHUkVTU19LRUVQX0NUUkwwX0VYVCArIChwb3J0Pj4xKTsKKyAgICAgICAgYml0X21hc2sgPSBSVEw4MzY3Q19QT1JUMF9WTEFOX0tFRVBfTUFTS19FWFRfTUFTSzsKKyAgICAgICAgYml0X21hc2sgPDw9IChwb3J0JjEpKjM7CisgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKHJlZ0FkZHIsIGJpdF9tYXNrLCAmcmVndmFsX2gpOworICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgKnBQb3J0bWFzayA9IChyZWd2YWxfaCA8PCA4KSB8IHJlZ3ZhbF9sOworICAgIH0KKyAgICBlbHNleworICAgICAgICBzd2l0Y2gocG9ydCl7CisgICAgICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICAgICAgcmVnQWRkciA9IFJUTDgzNjdDX1JFR19WTEFOX0VHUkVTU19LRUVQX0NUUkw0OworICAgICAgICAgICAgICAgIGJpdF9tYXNrID0gUlRMODM2N0NfUE9SVDhfVkxBTl9LRUVQX01BU0tfTUFTSzsKKyAgICAgICAgICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhyZWdBZGRyLCBiaXRfbWFzaywgJnJlZ3ZhbF9sKTsKKyAgICAgICAgICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19SRUdfVkxBTl9FR1JFU1NfS0VFUF9DVFJMNF9FWFQ7CisgICAgICAgICAgICAgICAgYml0X21hc2sgPSBSVEw4MzY3Q19QT1JUOF9WTEFOX0tFRVBfTUFTS19FWFRfTUFTSzsKKyAgICAgICAgICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhyZWdBZGRyLCBiaXRfbWFzaywgJnJlZ3ZhbF9oKTsKKyAgICAgICAgICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgKnBQb3J0bWFzayA9IChyZWd2YWxfaCA8PCA4KSB8IHJlZ3ZhbF9sOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIDk6CisgICAgICAgICAgICAgICAgcmVnQWRkciA9IFJUTDgzNjdDX1JFR19WTEFOX0VHUkVTU19LRUVQX0NUUkw0OworICAgICAgICAgICAgICAgIGJpdF9tYXNrID0gUlRMODM2N0NfUE9SVDlfVkxBTl9LRUVQX01BU0tfTUFTSzsKKyAgICAgICAgICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhyZWdBZGRyLCBiaXRfbWFzaywgJnJlZ3ZhbF9sKTsKKyAgICAgICAgICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19SRUdfVkxBTl9FR1JFU1NfS0VFUF9DVFJMNF9FWFQ7CisgICAgICAgICAgICAgICAgYml0X21hc2sgPSBSVEw4MzY3Q19QT1JUOV9WTEFOX0tFRVBfTUFTS19FWFRfTUFTSzsKKyAgICAgICAgICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhyZWdBZGRyLCBiaXRfbWFzaywgJnJlZ3ZhbF9oKTsKKyAgICAgICAgICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgKnBQb3J0bWFzayA9IChyZWd2YWxfaCA8PCA4KSB8IHJlZ3ZhbF9sOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIDEwOgorICAgICAgICAgICAgICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19SRUdfVkxBTl9FR1JFU1NfS0VFUF9DVFJMNTsKKyAgICAgICAgICAgICAgICBiaXRfbWFzayA9IFJUTDgzNjdDX1ZMQU5fRUdSRVNTX0tFRVBfQ1RSTDVfTUFTSzsKKyAgICAgICAgICAgICAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0cyhyZWdBZGRyLCBiaXRfbWFzaywgJnJlZ3ZhbF9sKTsKKyAgICAgICAgICAgICAgICBpZihyZXRWYWwgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIHJlZ0FkZHIgPSBSVEw4MzY3Q19SRUdfVkxBTl9FR1JFU1NfS0VFUF9DVFJMNV9FWFQ7CisgICAgICAgICAgICAgICAgYml0X21hc2sgPSBSVEw4MzY3Q19WTEFOX0VHUkVTU19LRUVQX0NUUkw1X0VYVF9NQVNLOworICAgICAgICAgICAgICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXRzKHJlZ0FkZHIsIGJpdF9tYXNrLCAmcmVndmFsX2gpOworICAgICAgICAgICAgICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAqcFBvcnRtYXNrID0gKHJlZ3ZhbF9oIDw8IDgpIHwgcmVndmFsX2w7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19zZXRSZXNlcnZlZFZpZEFjdGlvbgorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCByZXNlcnZlZCBWSUQgYWN0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgdmlkMEFjdGlvbiAgICAgIC0gVklEIDAgYWN0aW9uCisgKiAgICAgIHZpZDQwOTVBY3Rpb24gICAtIFZJRCA0MDk1IGFjdGlvbgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgLSBFcnJvciBpbnB1dAorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19zZXRSZXNlcnZlZFZpZEFjdGlvbihydGtfdWludDMyIHZpZDBBY3Rpb24sIHJ0a191aW50MzIgdmlkNDA5NUFjdGlvbikKK3sKKyAgICByZXRfdCAgIHJldFZhbDsKKworICAgIGlmKHZpZDBBY3Rpb24gPj0gUkVTX1ZJRF9BQ1RfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYodmlkNDA5NUFjdGlvbiA+PSBSRVNfVklEX0FDVF9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfVkxBTl9FWFRfQ1RSTCwgUlRMODM2N0NfVkxBTl9WSUQwX1RZUEVfT0ZGU0VULCB2aWQwQWN0aW9uKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1ZMQU5fRVhUX0NUUkwsIFJUTDgzNjdDX1ZMQU5fVklENDA5NV9UWVBFX09GRlNFVCwgdmlkNDA5NUFjdGlvbikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX2dldFJlc2VydmVkVmlkQWN0aW9uCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHJlc2VydmVkIFZJRCBhY3Rpb24KKyAqIElucHV0OgorICogICAgICBwVmlkMEFjdGlvbiAgICAgLSBWSUQgMCBhY3Rpb24KKyAqICAgICAgcFZpZDQwOTVBY3Rpb24gIC0gVklEIDQwOTUgYWN0aW9uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIFN1Y2Nlc3MKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAtIE51bGwgcG9pbnRlcgorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCityZXRfdCBydGw4MzY3Y19nZXRSZXNlcnZlZFZpZEFjdGlvbihydGtfdWludDMyICpwVmlkMEFjdGlvbiwgcnRrX3VpbnQzMiAqcFZpZDQwOTVBY3Rpb24pCit7CisgICAgcmV0X3QgICByZXRWYWw7CisKKyAgICBpZihwVmlkMEFjdGlvbiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmKHBWaWQ0MDk1QWN0aW9uID09IE5VTEwpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1ZMQU5fRVhUX0NUUkwsIFJUTDgzNjdDX1ZMQU5fVklEMF9UWVBFX09GRlNFVCwgcFZpZDBBY3Rpb24pKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfVkxBTl9FWFRfQ1RSTCwgUlRMODM2N0NfVkxBTl9WSUQ0MDk1X1RZUEVfT0ZGU0VULCBwVmlkNDA5NUFjdGlvbikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7CisKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRsODM2N2Nfc2V0UmVhbEtlZXBSZW1hcmtFbgorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBSZWFsIEtlZXAgUmVtYXJrCisgKiBJbnB1dDoKKyAqICAgICAgZW5hYmxlZCAgICAgICAgIC0gMDogMVAgcmVtYXJraW5nIGlzIGZvcmJpZGRlbiBhdCByZWFsIGtlZXAgcGFja2V0LCAxOiAxUCByZW1hcmtpbmcgaXMgZW5hYmxlZCBhdCByZWFsIGtlZXAgcGFja2V0CisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgIC0gU3VjY2VzcworICogICAgICBSVF9FUlJfU01JICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAtIEVycm9yIGlucHV0CisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3JldF90IHJ0bDgzNjdjX3NldFJlYWxLZWVwUmVtYXJrRW4ocnRrX3VpbnQzMiBlbmFibGVkKQoreworICAgIHJldF90ICAgcmV0VmFsOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSZWdCaXQoUlRMODM2N0NfUkVHX1ZMQU5fRVhUX0NUUkwsIFJUTDgzNjdDX1ZMQU5fMVBfUkVNQVJLX0JZUEFTU19SRUFMS0VFUF9PRkZTRVQsIGVuYWJsZWQpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGw4MzY3Y19nZXRSZWFsS2VlcFJlbWFya0VuCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFJlYWwgS2VlcCBSZW1hcmsKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBFbmFibGVkICAgICAgICAtIDA6IDFQIHJlbWFya2luZyBpcyBmb3JiaWRkZW4gYXQgcmVhbCBrZWVwIHBhY2tldCwgMTogMVAgcmVtYXJraW5nIGlzIGVuYWJsZWQgYXQgcmVhbCBrZWVwIHBhY2tldAorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgIC0gRXJyb3IgaW5wdXQKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfZ2V0UmVhbEtlZXBSZW1hcmtFbihydGtfdWludDMyICpwRW5hYmxlZCkKK3sKKyAgICByZXRfdCAgIHJldFZhbDsKKworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUmVnQml0KFJUTDgzNjdDX1JFR19WTEFOX0VYVF9DVFJMLCBSVEw4MzY3Q19WTEFOXzFQX1JFTUFSS19CWVBBU1NfUkVBTEtFRVBfT0ZGU0VULCBwRW5hYmxlZCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0bDgzNjdjX3Jlc2V0VmxhbgorICogRGVzY3JpcHRpb246CisgKiAgICAgIFJlc2V0IFZMQU4gdGFibGUKKyAqIElucHV0OgorICogICAgICBOb25lLgorICogT3V0cHV0OgorICogICAgICBOb25lLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgLSBTdWNjZXNzCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcmV0X3QgcnRsODM2N2NfcmVzZXRWbGFuKHZvaWQpCit7CisgICAgcmV0X3QgICByZXRWYWw7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZ0JpdChSVEw4MzY3Q19SRUdfVkxBTl9FWFRfQ1RSTDIsIFJUTDgzNjdDX1ZMQU5fRVhUX0NUUkwyX09GRlNFVCwgMSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9zbWkuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9zbWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjcyY2FkCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3NtaS5jCkBAIC0wLDAgKzEsNDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqIFB1cnBvc2UgOiBSVEw4MzY3QyBzd2l0Y2ggbG93LWxldmVsIGZ1bmN0aW9uIGZvciBhY2Nlc3MgcmVnaXN0ZXIKKyAqIEZlYXR1cmUgOiBTTUkgcmVsYXRlZCBmdW5jdGlvbnMKKyAqCisgKi8KKworCisjaW5jbHVkZSA8cnRrX3R5cGVzLmg+CisjaW5jbHVkZSA8c21pLmg+CisjaW5jbHVkZSAicnRrX2Vycm9yLmgiCisKKworI2lmIGRlZmluZWQoTURDX01ESU9fT1BFUkFUSU9OKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgTURDL01ESU8gcG9ydGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogZGVmaW5lIHRoZSBQSFkgSUQgY3VycmVudGx5IHVzZWQgKi8KKy8qIGNhcmxvcyAqLworI2lmIDAKKyNkZWZpbmUgTURDX01ESU9fUEhZX0lEICAgICAwICAvKiBQSFkgSUQgMCBvciAyOSAqLworI2Vsc2UKKyNkZWZpbmUgTURDX01ESU9fUEhZX0lEICAgICAyOSAgLyogUEhZIElEIDAgb3IgMjkgKi8KKyNlbmRpZgorCisvKiBNREMvTURJTywgcmVkZWZpbmUvaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgTWFjcm8gKi8gLypjYXJsb3MqLworI2lmIDAKKyNkZWZpbmUgTURDX01ESU9fV1JJVEUocHJlYW1hYmxlTGVuZ3RoLCBwaHlJRCwgcmVnSUQsIGRhdGEpCisjZGVmaW5lIE1EQ19NRElPX1JFQUQocHJlYW1hYmxlTGVuZ3RoLCBwaHlJRCwgcmVnSUQsIHBEYXRhKQorI2Vsc2UKKyNkZWZpbmUgdTMyICAgICAgdW5zaWduZWQgaW50CitleHRlcm4gdTMyIG1paV9tZ3JfcmVhZCh1MzIgcGh5X2FkZHIsIHUzMiBwaHlfcmVnaXN0ZXIsIHUzMiAqcmVhZF9kYXRhKTsKK2V4dGVybiB1MzIgbWlpX21ncl93cml0ZSh1MzIgcGh5X2FkZHIsIHUzMiBwaHlfcmVnaXN0ZXIsIHUzMiB3cml0ZV9kYXRhKTsKKworI2RlZmluZSBNRENfTURJT19XUklURShwcmVhbWFibGVMZW5ndGgsIHBoeUlELCByZWdJRCwgZGF0YSkgbWlpX21ncl93cml0ZShwaHlJRCwgcmVnSUQsIGRhdGEpCisjZGVmaW5lIE1EQ19NRElPX1JFQUQocHJlYW1hYmxlTGVuZ3RoLCBwaHlJRCwgcmVnSUQsIHBEYXRhKSBtaWlfbWdyX3JlYWQocGh5SUQsIHJlZ0lELCBwRGF0YSkKKyNlbmRpZgorCisKKworCisKKyNlbGlmIGRlZmluZWQoU1BJX09QRVJBVElPTikKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogIFNQSSBwb3J0aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFNQSSwgcmVkZWZpbmUvaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgTWFjcm8gKi8KKyNkZWZpbmUgU1BJX1dSSVRFKGRhdGEsIGxlbmd0aCkKKyNkZWZpbmUgU1BJX1JFQUQocERhdGEsIGxlbmd0aCkKKworCisKKworCisjZWxzZQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgSTJDIHBvcnRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRGVmaW5lIHRoZSBHUElPIElEIGZvciBTQ0sgJiBTREEgKi8KK3J0a191aW50MzIgIHNtaV9TQ0sgPSAxOyAgICAvKiBHUElPIHVzZWQgZm9yIFNNSSBDbG9jayBHZW5lcmF0aW9uICovCitydGtfdWludDMyICBzbWlfU0RBID0gMjsgICAgLyogR1BJTyB1c2VkIGZvciBTTUkgRGF0YSBzaWduYWwgKi8KKworLyogSTJDLCByZWRlZmluZS9pbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBNYWNybyAqLworI2RlZmluZSBHUElPX0RJUkVDVElPTl9TRVQoZ3Bpb0lELCBkaXJlY3Rpb24pCisjZGVmaW5lIEdQSU9fREFUQV9TRVQoZ3Bpb0lELCBkYXRhKQorI2RlZmluZSBHUElPX0RBVEFfR0VUKGdwaW9JRCwgcERhdGEpCisKKworCisKKworI2VuZGlmCisKK3N0YXRpYyB2b2lkIHJ0bGdsdWVfZHJ2TXV0ZXhMb2NrKHZvaWQpCit7CisgICAgLyogSXQgaXMgZW1wdHkgY3VycmVudGx5LiBJbXBsZW1lbnQgdGhpcyBmdW5jdGlvbiBpZiBMb2NrL1VubG9jayBmdW5jdGlvbiBpcyBuZWVkZWQgKi8KKyAgICByZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHJ0bGdsdWVfZHJ2TXV0ZXhVbmxvY2sodm9pZCkKK3sKKyAgICAvKiBJdCBpcyBlbXB0eSBjdXJyZW50bHkuIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uIGlmIExvY2svVW5sb2NrIGZ1bmN0aW9uIGlzIG5lZWRlZCAqLworICAgIHJldHVybjsKK30KKworCisKKyNpZiBkZWZpbmVkKE1EQ19NRElPX09QRVJBVElPTikgfHwgZGVmaW5lZChTUElfT1BFUkFUSU9OKQorICAgIC8qIE5vIGxvY2FsIGZ1bmN0aW9uIGluIE1EQy9NRElPICYgU1BJIG1vZGUgKi8KKyNlbHNlCitzdGF0aWMgdm9pZCBfc21pX3N0YXJ0KHZvaWQpCit7CisKKyAgICAvKiBjaGFuZ2UgR1BJTyBwaW4gdG8gT3V0cHV0IG9ubHkgKi8KKyAgICBHUElPX0RJUkVDVElPTl9TRVQoc21pX1NDSywgR1BJT19ESVJfT1VUKTsKKyAgICBHUElPX0RJUkVDVElPTl9TRVQoc21pX1NEQSwgR1BJT19ESVJfT1VUKTsKKworICAgIC8qIEluaXRpYWwgc3RhdGU6IFNDSzogMCwgU0RBOiAxICovCisgICAgR1BJT19EQVRBX1NFVChzbWlfU0NLLCAwKTsKKyAgICBHUElPX0RBVEFfU0VUKHNtaV9TREEsIDEpOworICAgIENMS19EVVJBVElPTihERUxBWSk7CisKKyAgICAvKiBDTEsgMTogMCAtPiAxLCAxIC0+IDAgKi8KKyAgICBHUElPX0RBVEFfU0VUKHNtaV9TQ0ssIDEpOworICAgIENMS19EVVJBVElPTihERUxBWSk7CisgICAgR1BJT19EQVRBX1NFVChzbWlfU0NLLCAwKTsKKyAgICBDTEtfRFVSQVRJT04oREVMQVkpOworCisgICAgLyogQ0xLIDI6ICovCisgICAgR1BJT19EQVRBX1NFVChzbWlfU0NLLCAxKTsKKyAgICBDTEtfRFVSQVRJT04oREVMQVkpOworICAgIEdQSU9fREFUQV9TRVQoc21pX1NEQSwgMCk7CisgICAgQ0xLX0RVUkFUSU9OKERFTEFZKTsKKyAgICBHUElPX0RBVEFfU0VUKHNtaV9TQ0ssIDApOworICAgIENMS19EVVJBVElPTihERUxBWSk7CisgICAgR1BJT19EQVRBX1NFVChzbWlfU0RBLCAxKTsKKworfQorCisKKworc3RhdGljIHZvaWQgX3NtaV93cml0ZUJpdChydGtfdWludDE2IHNpZ25hbCwgcnRrX3VpbnQzMiBiaXRMZW4pCit7CisgICAgZm9yKCA7IGJpdExlbiA+IDA7IGJpdExlbi0tKQorICAgIHsKKyAgICAgICAgQ0xLX0RVUkFUSU9OKERFTEFZKTsKKworICAgICAgICAvKiBwcmVwYXJlIGRhdGEgKi8KKyAgICAgICAgaWYgKCBzaWduYWwgJiAoMTw8KGJpdExlbi0xKSkgKQorICAgICAgICB7CisgICAgICAgICAgICBHUElPX0RBVEFfU0VUKHNtaV9TREEsIDEpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgR1BJT19EQVRBX1NFVChzbWlfU0RBLCAwKTsKKyAgICAgICAgfQorICAgICAgICBDTEtfRFVSQVRJT04oREVMQVkpOworCisgICAgICAgIC8qIGNsb2NraW5nICovCisgICAgICAgIEdQSU9fREFUQV9TRVQoc21pX1NDSywgMSk7CisgICAgICAgIENMS19EVVJBVElPTihERUxBWSk7CisgICAgICAgIEdQSU9fREFUQV9TRVQoc21pX1NDSywgMCk7CisgICAgfQorfQorCisKKworc3RhdGljIHZvaWQgX3NtaV9yZWFkQml0KHJ0a191aW50MzIgYml0TGVuLCBydGtfdWludDMyICpyRGF0YSkKK3sKKyAgICBydGtfdWludDMyIHUgPSAwOworCisgICAgLyogY2hhbmdlIEdQSU8gcGluIHRvIElucHV0IG9ubHkgKi8KKyAgICBHUElPX0RJUkVDVElPTl9TRVQoc21pX1NEQSwgR1BJT19ESVJfSU4pOworCisgICAgZm9yICgqckRhdGEgPSAwOyBiaXRMZW4gPiAwOyBiaXRMZW4tLSkKKyAgICB7CisgICAgICAgIENMS19EVVJBVElPTihERUxBWSk7CisKKyAgICAgICAgLyogY2xvY2tpbmcgKi8KKyAgICAgICAgR1BJT19EQVRBX1NFVChzbWlfU0NLLCAxKTsKKyAgICAgICAgQ0xLX0RVUkFUSU9OKERFTEFZKTsKKyAgICAgICAgR1BJT19EQVRBX0dFVChzbWlfU0RBLCAmdSk7CisgICAgICAgIEdQSU9fREFUQV9TRVQoc21pX1NDSywgMCk7CisKKyAgICAgICAgKnJEYXRhIHw9ICh1IDw8IChiaXRMZW4gLSAxKSk7CisgICAgfQorCisgICAgLyogY2hhbmdlIEdQSU8gcGluIHRvIE91dHB1dCBvbmx5ICovCisgICAgR1BJT19ESVJFQ1RJT05fU0VUKHNtaV9TREEsIEdQSU9fRElSX09VVCk7Cit9CisKKworCitzdGF0aWMgdm9pZCBfc21pX3N0b3Aodm9pZCkKK3sKKworICAgIENMS19EVVJBVElPTihERUxBWSk7CisgICAgR1BJT19EQVRBX1NFVChzbWlfU0RBLCAwKTsKKyAgICBHUElPX0RBVEFfU0VUKHNtaV9TQ0ssIDEpOworICAgIENMS19EVVJBVElPTihERUxBWSk7CisgICAgR1BJT19EQVRBX1NFVChzbWlfU0RBLCAxKTsKKyAgICBDTEtfRFVSQVRJT04oREVMQVkpOworICAgIEdQSU9fREFUQV9TRVQoc21pX1NDSywgMSk7CisgICAgQ0xLX0RVUkFUSU9OKERFTEFZKTsKKyAgICBHUElPX0RBVEFfU0VUKHNtaV9TQ0ssIDApOworICAgIENMS19EVVJBVElPTihERUxBWSk7CisgICAgR1BJT19EQVRBX1NFVChzbWlfU0NLLCAxKTsKKworICAgIC8qIGFkZCBhIGNsaWNrICovCisgICAgQ0xLX0RVUkFUSU9OKERFTEFZKTsKKyAgICBHUElPX0RBVEFfU0VUKHNtaV9TQ0ssIDApOworICAgIENMS19EVVJBVElPTihERUxBWSk7CisgICAgR1BJT19EQVRBX1NFVChzbWlfU0NLLCAxKTsKKworCisgICAgLyogY2hhbmdlIEdQSU8gcGluIHRvIElucHV0IG9ubHkgKi8KKyAgICBHUElPX0RJUkVDVElPTl9TRVQoc21pX1NEQSwgR1BJT19ESVJfSU4pOworICAgIEdQSU9fRElSRUNUSU9OX1NFVChzbWlfU0NLLCBHUElPX0RJUl9JTik7Cit9CisKKyNlbmRpZiAvKiBFbmQgb2YgI2lmIGRlZmluZWQoTURDX01ESU9fT1BFUkFUSU9OKSB8fCBkZWZpbmVkKFNQSV9PUEVSQVRJT04pICovCisKK3J0a19pbnQzMiBzbWlfcmVhZChydGtfdWludDMyIG1BZGRycywgcnRrX3VpbnQzMiAqckRhdGEpCit7CisjaWYgKCFkZWZpbmVkKE1EQ19NRElPX09QRVJBVElPTikgJiYgIWRlZmluZWQoU1BJX09QRVJBVElPTikpCisgICAgcnRrX3VpbnQzMiByYXdEYXRhPTAsIEFDSzsKKyAgICBydGtfdWludDggIGNvbjsKKyAgICBydGtfdWludDMyIHJldCA9IFJUX0VSUl9PSzsKKyNlbmRpZgorCisgICAgaWYobUFkZHJzID4gMHhGRkZGKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYockRhdGEgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyNpZiBkZWZpbmVkKE1EQ19NRElPX09QRVJBVElPTikKKworICAgIC8qIExvY2sgKi8KKyAgICBydGxnbHVlX2Rydk11dGV4TG9jaygpOworCisgICAgLyogV3JpdGUgYWRkcmVzcyBjb250cm9sIGNvZGUgdG8gcmVnaXN0ZXIgMzEgKi8KKyAgICBNRENfTURJT19XUklURShNRENfTURJT19QUkVBTUJMRV9MRU4sIE1EQ19NRElPX1BIWV9JRCwgTURDX01ESU9fQ1RSTDBfUkVHLCBNRENfTURJT19BRERSX09QKTsKKworICAgIC8qIFdyaXRlIGFkZHJlc3MgdG8gcmVnaXN0ZXIgMjMgKi8KKyAgICBNRENfTURJT19XUklURShNRENfTURJT19QUkVBTUJMRV9MRU4sIE1EQ19NRElPX1BIWV9JRCwgTURDX01ESU9fQUREUkVTU19SRUcsIG1BZGRycyk7CisKKyAgICAvKiBXcml0ZSByZWFkIGNvbnRyb2wgY29kZSB0byByZWdpc3RlciAyMSAqLworICAgIE1EQ19NRElPX1dSSVRFKE1EQ19NRElPX1BSRUFNQkxFX0xFTiwgTURDX01ESU9fUEhZX0lELCBNRENfTURJT19DVFJMMV9SRUcsIE1EQ19NRElPX1JFQURfT1ApOworCisgICAgLyogUmVhZCBkYXRhIGZyb20gcmVnaXN0ZXIgMjUgKi8KKyAgICBNRENfTURJT19SRUFEKE1EQ19NRElPX1BSRUFNQkxFX0xFTiwgTURDX01ESU9fUEhZX0lELCBNRENfTURJT19EQVRBX1JFQURfUkVHLCByRGF0YSk7CisKKyAgICAvKiBVbmxvY2sgKi8KKyAgICBydGxnbHVlX2Rydk11dGV4VW5sb2NrKCk7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworCisjZWxpZiBkZWZpbmVkKFNQSV9PUEVSQVRJT04pCisKKyAgICAvKiBMb2NrICovCisgICAgcnRsZ2x1ZV9kcnZNdXRleExvY2soKTsKKworICAgIC8qIFdyaXRlIDggYml0cyBSRUFEIE9QX0NPREUgKi8KKyAgICBTUElfV1JJVEUoU1BJX1JFQURfT1AsIFNQSV9SRUFEX09QX0xFTik7CisKKyAgICAvKiBXcml0ZSAxNiBiaXRzIHJlZ2lzdGVyIGFkZHJlc3MgKi8KKyAgICBTUElfV1JJVEUobUFkZHJzLCBTUElfUkVHX0xFTik7CisKKyAgICAvKiBSZWFkIDE2IGJpdHMgZGF0YSAqLworICAgIFNQSV9SRUFEKHJEYXRhLCBTUElfREFUQV9MRU4pOworCisgICAgLyogVW5sb2NrICovCisgICAgcnRsZ2x1ZV9kcnZNdXRleFVubG9jaygpOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKKworI2Vsc2UKKworICAgIC8qRGlzYWJsZSBDUFUgaW50ZXJydXB0IHRvIGVuc3VyZSB0aGF0IHRoZSBTTUkgb3BlcmF0aW9uIGlzIGF0b21pYy4KKyAgICAgIFRoZSBBUEkgaXMgYmFzZWQgb24gUlRMODY1WCwgcmV3cml0ZSB0aGUgQVBJIGlmIHBvcnRpbmcgdG8gb3RoZXIgcGxhdGZvcm0uKi8KKyAgICBydGxnbHVlX2Rydk11dGV4TG9jaygpOworCisgICAgX3NtaV9zdGFydCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3RhcnQgU01JICovCisKKyAgICBfc21pX3dyaXRlQml0KDB4MGIsIDQpOyAgICAgICAgICAgICAgICAgICAgIC8qIENUUkwgY29kZTogNCdiMTAxMSBmb3IgUlRMODM3MCAqLworCisgICAgX3NtaV93cml0ZUJpdCgweDQsIDMpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENUUkwgY29kZTogMydiMTAwICovCisKKyAgICBfc21pX3dyaXRlQml0KDB4MSwgMSk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogMTogaXNzdWUgUkVBRCBjb21tYW5kICovCisKKyAgICBjb24gPSAwOworICAgIGRvIHsKKyAgICAgICAgY29uKys7CisgICAgICAgIF9zbWlfcmVhZEJpdCgxLCAmQUNLKTsgICAgICAgICAgICAgICAgICAgIC8qIEFDSyBmb3IgaXNzdWluZyBSRUFEIGNvbW1hbmQqLworICAgIH0gd2hpbGUgKChBQ0sgIT0gMCkgJiYgKGNvbiA8IGFja190aW1lcikpOworCisgICAgaWYgKEFDSyAhPSAwKSByZXQgPSBSVF9FUlJfRkFJTEVEOworCisgICAgX3NtaV93cml0ZUJpdCgobUFkZHJzJjB4ZmYpLCA4KTsgICAgICAgICAgICAgLyogU2V0IHJlZ19hZGRyWzc6MF0gKi8KKworICAgIGNvbiA9IDA7CisgICAgZG8geworICAgICAgICBjb24rKzsKKyAgICAgICAgX3NtaV9yZWFkQml0KDEsICZBQ0spOyAgICAgICAgICAgICAgICAgICAgLyogQUNLIGZvciBzZXR0aW5nIHJlZ19hZGRyWzc6MF0gKi8KKyAgICB9IHdoaWxlICgoQUNLICE9IDApICYmIChjb24gPCBhY2tfdGltZXIpKTsKKworICAgIGlmIChBQ0sgIT0gMCkgcmV0ID0gUlRfRVJSX0ZBSUxFRDsKKworICAgIF9zbWlfd3JpdGVCaXQoKG1BZGRycz4+OCksIDgpOyAgICAgICAgICAgICAgICAgLyogU2V0IHJlZ19hZGRyWzE1OjhdICovCisKKyAgICBjb24gPSAwOworICAgIGRvIHsKKyAgICAgICAgY29uKys7CisgICAgICAgIF9zbWlfcmVhZEJpdCgxLCAmQUNLKTsgICAgICAgICAgICAgICAgICAgIC8qIEFDSyBieSBSVEw4MzY5ICovCisgICAgfSB3aGlsZSAoKEFDSyAhPSAwKSAmJiAoY29uIDwgYWNrX3RpbWVyKSk7CisgICAgaWYgKEFDSyAhPSAwKSByZXQgPSBSVF9FUlJfRkFJTEVEOworCisgICAgX3NtaV9yZWFkQml0KDgsICZyYXdEYXRhKTsgICAgICAgICAgICAgICAgICAgIC8qIFJlYWQgREFUQSBbNzowXSAqLworICAgICpyRGF0YSA9IHJhd0RhdGEmMHhmZjsKKworICAgIF9zbWlfd3JpdGVCaXQoMHgwMCwgMSk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogQUNLIGJ5IENQVSAqLworCisgICAgX3NtaV9yZWFkQml0KDgsICZyYXdEYXRhKTsgICAgICAgICAgICAgICAgICAgIC8qIFJlYWQgREFUQSBbMTU6IDhdICovCisKKyAgICBfc21pX3dyaXRlQml0KDB4MDEsIDEpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFDSyBieSBDUFUgKi8KKyAgICAqckRhdGEgfD0gKHJhd0RhdGE8PDgpOworCisgICAgX3NtaV9zdG9wKCk7CisKKyAgICBydGxnbHVlX2Rydk11dGV4VW5sb2NrKCk7LyplbmFibGUgQ1BVIGludGVycnVwdCovCisKKyAgICByZXR1cm4gcmV0OworI2VuZGlmIC8qIGVuZCBvZiAjaWYgZGVmaW5lZChNRENfTURJT19PUEVSQVRJT04pICovCit9CisKKworCitydGtfaW50MzIgc21pX3dyaXRlKHJ0a191aW50MzIgbUFkZHJzLCBydGtfdWludDMyIHJEYXRhKQoreworI2lmICghZGVmaW5lZChNRENfTURJT19PUEVSQVRJT04pICYmICFkZWZpbmVkKFNQSV9PUEVSQVRJT04pKQorICAgIHJ0a19pbnQ4IGNvbjsKKyAgICBydGtfdWludDMyIEFDSzsKKyAgICBydGtfdWludDMyIHJldCA9IFJUX0VSUl9PSzsKKyNlbmRpZgorCisgICAgaWYobUFkZHJzID4gMHhGRkZGKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYockRhdGEgPiAweEZGRkYpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyNpZiBkZWZpbmVkKE1EQ19NRElPX09QRVJBVElPTikKKworICAgIC8qIExvY2sgKi8KKyAgICBydGxnbHVlX2Rydk11dGV4TG9jaygpOworCisgICAgLyogV3JpdGUgYWRkcmVzcyBjb250cm9sIGNvZGUgdG8gcmVnaXN0ZXIgMzEgKi8KKyAgICBNRENfTURJT19XUklURShNRENfTURJT19QUkVBTUJMRV9MRU4sIE1EQ19NRElPX1BIWV9JRCwgTURDX01ESU9fQ1RSTDBfUkVHLCBNRENfTURJT19BRERSX09QKTsKKworICAgIC8qIFdyaXRlIGFkZHJlc3MgdG8gcmVnaXN0ZXIgMjMgKi8KKyAgICBNRENfTURJT19XUklURShNRENfTURJT19QUkVBTUJMRV9MRU4sIE1EQ19NRElPX1BIWV9JRCwgTURDX01ESU9fQUREUkVTU19SRUcsIG1BZGRycyk7CisKKyAgICAvKiBXcml0ZSBkYXRhIHRvIHJlZ2lzdGVyIDI0ICovCisgICAgTURDX01ESU9fV1JJVEUoTURDX01ESU9fUFJFQU1CTEVfTEVOLCBNRENfTURJT19QSFlfSUQsIE1EQ19NRElPX0RBVEFfV1JJVEVfUkVHLCByRGF0YSk7CisKKyAgICAvKiBXcml0ZSBkYXRhIGNvbnRyb2wgY29kZSB0byByZWdpc3RlciAyMSAqLworICAgIE1EQ19NRElPX1dSSVRFKE1EQ19NRElPX1BSRUFNQkxFX0xFTiwgTURDX01ESU9fUEhZX0lELCBNRENfTURJT19DVFJMMV9SRUcsIE1EQ19NRElPX1dSSVRFX09QKTsKKworICAgIC8qIFVubG9jayAqLworICAgIHJ0bGdsdWVfZHJ2TXV0ZXhVbmxvY2soKTsKKworICAgIHJldHVybiBSVF9FUlJfT0s7CisKKyNlbGlmIGRlZmluZWQoU1BJX09QRVJBVElPTikKKworICAgIC8qIExvY2sgKi8KKyAgICBydGxnbHVlX2Rydk11dGV4TG9jaygpOworCisgICAgLyogV3JpdGUgOCBiaXRzIFdSSVRFIE9QX0NPREUgKi8KKyAgICBTUElfV1JJVEUoU1BJX1dSSVRFX09QLCBTUElfV1JJVEVfT1BfTEVOKTsKKworICAgIC8qIFdyaXRlIDE2IGJpdHMgcmVnaXN0ZXIgYWRkcmVzcyAqLworICAgIFNQSV9XUklURShtQWRkcnMsIFNQSV9SRUdfTEVOKTsKKworICAgIC8qIFdyaXRlIDE2IGJpdHMgZGF0YSAqLworICAgIFNQSV9XUklURShyRGF0YSwgU1BJX0RBVEFfTEVOKTsKKworICAgIC8qIFVubG9jayAqLworICAgIHJ0bGdsdWVfZHJ2TXV0ZXhVbmxvY2soKTsKKworICAgIHJldHVybiBSVF9FUlJfT0s7CisjZWxzZQorCisgICAgLypEaXNhYmxlIENQVSBpbnRlcnJ1cHQgdG8gZW5zdXJlIHRoYXQgdGhlIFNNSSBvcGVyYXRpb24gaXMgYXRvbWljLgorICAgICAgVGhlIEFQSSBpcyBiYXNlZCBvbiBSVEw4NjVYLCByZXdyaXRlIHRoZSBBUEkgaWYgcG9ydGluZyB0byBvdGhlciBwbGF0Zm9ybS4qLworICAgIHJ0bGdsdWVfZHJ2TXV0ZXhMb2NrKCk7CisKKyAgICBfc21pX3N0YXJ0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdGFydCBTTUkgKi8KKworICAgIF9zbWlfd3JpdGVCaXQoMHgwYiwgNCk7ICAgICAgICAgICAgICAgICAgICAgLyogQ1RSTCBjb2RlOiA0J2IxMDExIGZvciBSVEw4MzcwKi8KKworICAgIF9zbWlfd3JpdGVCaXQoMHg0LCAzKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBDVFJMIGNvZGU6IDMnYjEwMCAqLworCisgICAgX3NtaV93cml0ZUJpdCgweDAsIDEpOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDA6IGlzc3VlIFdSSVRFIGNvbW1hbmQgKi8KKworICAgIGNvbiA9IDA7CisgICAgZG8geworICAgICAgICBjb24rKzsKKyAgICAgICAgX3NtaV9yZWFkQml0KDEsICZBQ0spOyAgICAgICAgICAgICAgICAgICAgLyogQUNLIGZvciBpc3N1aW5nIFdSSVRFIGNvbW1hbmQqLworICAgIH0gd2hpbGUgKChBQ0sgIT0gMCkgJiYgKGNvbiA8IGFja190aW1lcikpOworICAgIGlmIChBQ0sgIT0gMCkgcmV0ID0gUlRfRVJSX0ZBSUxFRDsKKworICAgIF9zbWlfd3JpdGVCaXQoKG1BZGRycyYweGZmKSwgOCk7ICAgICAgICAgICAgIC8qIFNldCByZWdfYWRkcls3OjBdICovCisKKyAgICBjb24gPSAwOworICAgIGRvIHsKKyAgICAgICAgY29uKys7CisgICAgICAgIF9zbWlfcmVhZEJpdCgxLCAmQUNLKTsgICAgICAgICAgICAgICAgICAgIC8qIEFDSyBmb3Igc2V0dGluZyByZWdfYWRkcls3OjBdICovCisgICAgfSB3aGlsZSAoKEFDSyAhPSAwKSAmJiAoY29uIDwgYWNrX3RpbWVyKSk7CisgICAgaWYgKEFDSyAhPSAwKSByZXQgPSBSVF9FUlJfRkFJTEVEOworCisgICAgX3NtaV93cml0ZUJpdCgobUFkZHJzPj44KSwgOCk7ICAgICAgICAgICAgICAgICAvKiBTZXQgcmVnX2FkZHJbMTU6OF0gKi8KKworICAgIGNvbiA9IDA7CisgICAgZG8geworICAgICAgICBjb24rKzsKKyAgICAgICAgX3NtaV9yZWFkQml0KDEsICZBQ0spOyAgICAgICAgICAgICAgICAgICAgLyogQUNLIGZvciBzZXR0aW5nIHJlZ19hZGRyWzE1OjhdICovCisgICAgfSB3aGlsZSAoKEFDSyAhPSAwKSAmJiAoY29uIDwgYWNrX3RpbWVyKSk7CisgICAgaWYgKEFDSyAhPSAwKSByZXQgPSBSVF9FUlJfRkFJTEVEOworCisgICAgX3NtaV93cml0ZUJpdChyRGF0YSYweGZmLCA4KTsgICAgICAgICAgICAgICAgLyogV3JpdGUgRGF0YSBbNzowXSBvdXQgKi8KKworICAgIGNvbiA9IDA7CisgICAgZG8geworICAgICAgICBjb24rKzsKKyAgICAgICAgX3NtaV9yZWFkQml0KDEsICZBQ0spOyAgICAgICAgICAgICAgICAgICAgLyogQUNLIGZvciB3cml0dGluZyBkYXRhIFs3OjBdICovCisgICAgfSB3aGlsZSAoKEFDSyAhPSAwKSAmJiAoY29uIDwgYWNrX3RpbWVyKSk7CisgICAgaWYgKEFDSyAhPSAwKSByZXQgPSBSVF9FUlJfRkFJTEVEOworCisgICAgX3NtaV93cml0ZUJpdChyRGF0YT4+OCwgOCk7ICAgICAgICAgICAgICAgICAgICAvKiBXcml0ZSBEYXRhIFsxNTo4XSBvdXQgKi8KKworICAgIGNvbiA9IDA7CisgICAgZG8geworICAgICAgICBjb24rKzsKKyAgICAgICAgX3NtaV9yZWFkQml0KDEsICZBQ0spOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFDSyBmb3Igd3JpdHRpbmcgZGF0YSBbMTU6OF0gKi8KKyAgICB9IHdoaWxlICgoQUNLICE9IDApICYmIChjb24gPCBhY2tfdGltZXIpKTsKKyAgICBpZiAoQUNLICE9IDApIHJldCA9IFJUX0VSUl9GQUlMRUQ7CisKKyAgICBfc21pX3N0b3AoKTsKKworICAgIHJ0bGdsdWVfZHJ2TXV0ZXhVbmxvY2soKTsvKmVuYWJsZSBDUFUgaW50ZXJydXB0Ki8KKworICAgIHJldHVybiByZXQ7CisjZW5kaWYgLyogZW5kIG9mICNpZiBkZWZpbmVkKE1EQ19NRElPX09QRVJBVElPTikgKi8KK30KKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3N0YXQuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9zdGF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EzMjhiMAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9zdGF0LmMKQEAgLTAsMCArMSw2MjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogJFJldmlzaW9uOiA3NjMwNiAkCisgKiAkRGF0ZTogMjAxNy0wMy0wOCAxNToxMzo1OCArMDgwMCAo6YCx5LiJLCAwOCDkuInmnIggMjAxNykgJAorICoKKyAqIFB1cnBvc2UgOiBSVEsgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJIGZvciBSVEw4MzY3L1JUTDgzNjdDCisgKiBGZWF0dXJlIDogSGVyZSBpcyBhIGxpc3Qgb2YgYWxsIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIGluIE1JQiBtb2R1bGUuCisgKgorICovCisKKyNpbmNsdWRlIDxydGtfc3dpdGNoLmg+CisjaW5jbHVkZSA8cnRrX2Vycm9yLmg+CisjaW5jbHVkZSA8c3RhdC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydi5oPgorI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnZfbWliLmg+CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdGF0X2dsb2JhbF9yZXNldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFJlc2V0IGdsb2JhbCBNSUIgY291bnRlci4KKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIFJlc2V0IE1JQiBjb3VudGVyIG9mIHBvcnRzLiBBUEkgd2lsbCB1c2UgZ2xvYmFsIHJlc2V0IHdoaWxlIHBvcnQgbWFzayBpcyBhbGwtcG9ydHMuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3N0YXRfZ2xvYmFsX3Jlc2V0KHZvaWQpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljTUlCc0NvdW50ZXJSZXNldChUUlVFLEZBTFNFLCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N0YXRfcG9ydF9yZXNldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFJlc2V0IHBlciBwb3J0IE1JQiBjb3VudGVyIGJ5IHBvcnQuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIHBvcnQgaWQuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKgorICovCitydGtfYXBpX3JldF90IHJ0a19zdGF0X3BvcnRfcmVzZXQocnRrX3BvcnRfdCBwb3J0KQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIENoZWNrIHBvcnQgdmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQocG9ydCk7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNNSUJzQ291bnRlclJlc2V0KEZBTFNFLEZBTFNFLDEgPDwgcnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCkpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3RhdF9xdWV1ZU1hbmFnZV9yZXNldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFJlc2V0IHF1ZXVlIG1hbmFnZSBNSUIgY291bnRlci4KKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKgorICovCitydGtfYXBpX3JldF90IHJ0a19zdGF0X3F1ZXVlTWFuYWdlX3Jlc2V0KHZvaWQpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljTUlCc0NvdW50ZXJSZXNldChGQUxTRSxUUlVFLDApKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdGF0X2dsb2JhbF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgZ2xvYmFsIE1JQiBjb3VudGVyCisgKiBJbnB1dDoKKyAqICAgICAgY250cl9pZHggLSBnbG9iYWwgY291bnRlciBpbmRleC4KKyAqIE91dHB1dDoKKyAqICAgICAgcENudHIgLSBnbG9iYWwgY291bnRlciB2YWx1ZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIEdldCBnbG9iYWwgTUlCIGNvdW50ZXIgYnkgaW5kZXggZGVmaW5pdGlvbi4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfc3RhdF9nbG9iYWxfZ2V0KHJ0a19zdGF0X2dsb2JhbF90eXBlX3QgY250cl9pZHgsIHJ0a19zdGF0X2NvdW50ZXJfdCAqcENudHIpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoTlVMTCA9PSBwQ250cikKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoY250cl9pZHghPURPVDFEX1RQX0xFQVJORURfRU5UUllfRElTQ0FSRFNfSU5ERVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfU1RBVF9JTlZBTElEX0dMT0JBTF9DTlRSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljTUlCc0NvdW50ZXIoMCwgY250cl9pZHgsIHBDbnRyKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N0YXRfZ2xvYmFsX2dldEFsbAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBhbGwgZ2xvYmFsIE1JQiBjb3VudGVyCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwR2xvYmFsX2NudHJzIC0gZ2xvYmFsIGNvdW50ZXIgc3RydWN0dXJlLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgR2V0IGFsbCBnbG9iYWwgTUlCIGNvdW50ZXIgYnkgaW5kZXggZGVmaW5pdGlvbi4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfc3RhdF9nbG9iYWxfZ2V0QWxsKHJ0a19zdGF0X2dsb2JhbF9jbnRyX3QgKnBHbG9iYWxfY250cnMpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoTlVMTCA9PSBwR2xvYmFsX2NudHJzKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY01JQnNDb3VudGVyKDAsRE9UMURfVFBfTEVBUk5FRF9FTlRSWV9ESVNDQVJEU19JTkRFWCwgJnBHbG9iYWxfY250cnMtPmRvdDFkVHBMZWFybmVkRW50cnlEaXNjYXJkcykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKyNkZWZpbmUgTUlCX05PVF9TVVBQT1JUICAgICAoMHhGRkZGKQorc3RhdGljIHJ0a19hcGlfcmV0X3QgX2dldF9hc2ljX21pYl9pZHgocnRrX3N0YXRfcG9ydF90eXBlX3QgY250X2lkeCwgUlRMODM2N0NfTUlCQ09VTlRFUiAqcE1pYl9pZHgpCit7CisgICAgUlRMODM2N0NfTUlCQ09VTlRFUiBtaWJfYXNpY19pZHhbU1RBVF9QT1JUX0NOVFJfRU5EXT0KKyAgICB7CisgICAgICAgIGlmSW5PY3RldHMsICAgICAgICAgICAgICAgICAgICAgLyogU1RBVF9JZkluT2N0ZXRzICovCisgICAgICAgIGRvdDNTdGF0c0ZDU0Vycm9ycywgICAgICAgICAgICAgLyogU1RBVF9Eb3QzU3RhdHNGQ1NFcnJvcnMgKi8KKyAgICAgICAgZG90M1N0YXRzU3ltYm9sRXJyb3JzLCAgICAgICAgICAvKiBTVEFUX0RvdDNTdGF0c1N5bWJvbEVycm9ycyAqLworICAgICAgICBkb3QzSW5QYXVzZUZyYW1lcywgICAgICAgICAgICAgIC8qIFNUQVRfRG90M0luUGF1c2VGcmFtZXMgKi8KKyAgICAgICAgZG90M0NvbnRyb2xJblVua25vd25PcGNvZGVzLCAgICAvKiBTVEFUX0RvdDNDb250cm9sSW5Vbmtub3duT3Bjb2RlcyAqLworICAgICAgICBldGhlclN0YXRzRnJhZ21lbnRzLCAgICAgICAgICAgIC8qIFNUQVRfRXRoZXJTdGF0c0ZyYWdtZW50cyAqLworICAgICAgICBldGhlclN0YXRzSmFiYmVycywgICAgICAgICAgICAgIC8qIFNUQVRfRXRoZXJTdGF0c0phYmJlcnMgKi8KKyAgICAgICAgaWZJblVjYXN0UGt0cywgICAgICAgICAgICAgICAgICAvKiBTVEFUX0lmSW5VY2FzdFBrdHMgKi8KKyAgICAgICAgZXRoZXJTdGF0c0Ryb3BFdmVudHMsICAgICAgICAgICAvKiBTVEFUX0V0aGVyU3RhdHNEcm9wRXZlbnRzICovCisgICAgICAgIGV0aGVyU3RhdHNPY3RldHMsICAgICAgICAgICAgICAgLyogU1RBVF9FdGhlclN0YXRzT2N0ZXRzICovCisgICAgICAgIGV0aGVyU3RhdHNVbmRlclNpemVQa3RzLCAgICAgICAgLyogU1RBVF9FdGhlclN0YXRzVW5kZXJTaXplUGt0cyAqLworICAgICAgICBldGhlck92ZXJzaXplU3RhdHMsICAgICAgICAgICAgIC8qIFNUQVRfRXRoZXJPdmVyc2l6ZVN0YXRzICovCisgICAgICAgIGV0aGVyU3RhdHNQa3RzNjRPY3RldHMsICAgICAgICAgLyogU1RBVF9FdGhlclN0YXRzUGt0czY0T2N0ZXRzICovCisgICAgICAgIGV0aGVyU3RhdHNQa3RzNjV0bzEyN09jdGV0cywgICAgLyogU1RBVF9FdGhlclN0YXRzUGt0czY1dG8xMjdPY3RldHMgKi8KKyAgICAgICAgZXRoZXJTdGF0c1BrdHMxMjh0bzI1NU9jdGV0cywgICAvKiBTVEFUX0V0aGVyU3RhdHNQa3RzMTI4dG8yNTVPY3RldHMgKi8KKyAgICAgICAgZXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0cywgICAvKiBTVEFUX0V0aGVyU3RhdHNQa3RzMjU2dG81MTFPY3RldHMgKi8KKyAgICAgICAgZXRoZXJTdGF0c1BrdHM1MTJ0bzEwMjNPY3RldHMsICAvKiBTVEFUX0V0aGVyU3RhdHNQa3RzNTEydG8xMDIzT2N0ZXRzICovCisgICAgICAgIGV0aGVyU3RhdHNQa3RzMTAyNHRvMTUxOE9jdGV0cywgLyogU1RBVF9FdGhlclN0YXRzUGt0czEwMjR0bzE1MThPY3RldHMgKi8KKyAgICAgICAgaWZJbk11bHRpY2FzdFBrdHMsICAgICAgICAgICAgICAvKiBTVEFUX0V0aGVyU3RhdHNNdWx0aWNhc3RQa3RzICovCisgICAgICAgIGlmSW5Ccm9hZGNhc3RQa3RzLCAgICAgICAgICAgICAgLyogU1RBVF9FdGhlclN0YXRzQnJvYWRjYXN0UGt0cyAqLworICAgICAgICBpZk91dE9jdGV0cywgICAgICAgICAgICAgICAgICAgIC8qIFNUQVRfSWZPdXRPY3RldHMgKi8KKyAgICAgICAgZG90M1N0YXRzU2luZ2xlQ29sbGlzaW9uRnJhbWVzLCAvKiBTVEFUX0RvdDNTdGF0c1NpbmdsZUNvbGxpc2lvbkZyYW1lcyAqLworICAgICAgICBkb3QzU3RhdE11bHRpcGxlQ29sbGlzaW9uRnJhbWVzLC8qIFNUQVRfRG90M1N0YXRzTXVsdGlwbGVDb2xsaXNpb25GcmFtZXMgKi8KKyAgICAgICAgZG90M3NEZWZlcnJlZFRyYW5zbWlzc2lvbnMsICAgICAvKiBTVEFUX0RvdDNTdGF0c0RlZmVycmVkVHJhbnNtaXNzaW9ucyAqLworICAgICAgICBkb3QzU3RhdHNMYXRlQ29sbGlzaW9ucywgICAgICAgIC8qIFNUQVRfRG90M1N0YXRzTGF0ZUNvbGxpc2lvbnMgKi8KKyAgICAgICAgZXRoZXJTdGF0c0NvbGxpc2lvbnMsICAgICAgICAgICAvKiBTVEFUX0V0aGVyU3RhdHNDb2xsaXNpb25zICovCisgICAgICAgIGRvdDNTdGF0c0V4Y2Vzc2l2ZUNvbGxpc2lvbnMsICAgLyogU1RBVF9Eb3QzU3RhdHNFeGNlc3NpdmVDb2xsaXNpb25zICovCisgICAgICAgIGRvdDNPdXRQYXVzZUZyYW1lcywgICAgICAgICAgICAgLyogU1RBVF9Eb3QzT3V0UGF1c2VGcmFtZXMgKi8KKyAgICAgICAgTUlCX05PVF9TVVBQT1JULCAgICAgICAgICAgICAgICAvKiBTVEFUX0RvdDFkQmFzZVBvcnREZWxheUV4Y2VlZGVkRGlzY2FyZHMgKi8KKyAgICAgICAgZG90MWRUcFBvcnRJbkRpc2NhcmRzLCAgICAgICAgICAvKiBTVEFUX0RvdDFkVHBQb3J0SW5EaXNjYXJkcyAqLworICAgICAgICBpZk91dFVjYXN0UGt0cywgICAgICAgICAgICAgICAgIC8qIFNUQVRfSWZPdXRVY2FzdFBrdHMgKi8KKyAgICAgICAgaWZPdXRNdWx0aWNhc3RQa3RzLCAgICAgICAgICAgICAvKiBTVEFUX0lmT3V0TXVsdGljYXN0UGt0cyAqLworICAgICAgICBpZk91dEJyb2FkY2FzdFBrdHMsICAgICAgICAgICAgIC8qIFNUQVRfSWZPdXRCcm9hZGNhc3RQa3RzICovCisgICAgICAgIG91dE9hbXBkdVBrdHMsICAgICAgICAgICAgICAgICAgLyogU1RBVF9PdXRPYW1wZHVQa3RzICovCisgICAgICAgIGluT2FtcGR1UGt0cywgICAgICAgICAgICAgICAgICAgLyogU1RBVF9Jbk9hbXBkdVBrdHMgKi8KKyAgICAgICAgTUlCX05PVF9TVVBQT1JULCAgICAgICAgICAgICAgICAvKiBTVEFUX1BrdGdlblBrdHMgKi8KKyAgICAgICAgaW5NbGRDaGVja3N1bUVycm9yLCAgICAgICAgICAgICAvKiBTVEFUX0luTWxkQ2hlY2tzdW1FcnJvciAqLworICAgICAgICBpbklnbXBDaGVja3N1bUVycm9yLCAgICAgICAgICAgIC8qIFNUQVRfSW5JZ21wQ2hlY2tzdW1FcnJvciAqLworICAgICAgICBpbk1sZFNwZWNpZmljUXVlcnksICAgICAgICAgICAgIC8qIFNUQVRfSW5NbGRTcGVjaWZpY1F1ZXJ5ICovCisgICAgICAgIGluTWxkR2VuZXJhbFF1ZXJ5LCAgICAgICAgICAgICAgLyogU1RBVF9Jbk1sZEdlbmVyYWxRdWVyeSAqLworICAgICAgICBpbklnbXBTcGVjaWZpY1F1ZXJ5LCAgICAgICAgICAgIC8qIFNUQVRfSW5JZ21wU3BlY2lmaWNRdWVyeSAqLworICAgICAgICBpbklnbXBHZW5lcmFsUXVlcnksICAgICAgICAgICAgIC8qIFNUQVRfSW5JZ21wR2VuZXJhbFF1ZXJ5ICovCisgICAgICAgIGluTWxkTGVhdmVzLCAgICAgICAgICAgICAgICAgICAgLyogU1RBVF9Jbk1sZExlYXZlcyAqLworICAgICAgICBpbklnbXBMZWF2ZXMsICAgICAgICAgICAgICAgICAgIC8qIFNUQVRfSW5JZ21wSW50ZXJmYWNlTGVhdmVzICovCisgICAgICAgIGluSWdtcEpvaW5zU3VjY2VzcywgICAgICAgICAgICAgLyogU1RBVF9JbklnbXBKb2luc1N1Y2Nlc3MgKi8KKyAgICAgICAgaW5JZ21wSm9pbnNGYWlsLCAgICAgICAgICAgICAgICAvKiBTVEFUX0luSWdtcEpvaW5zRmFpbCAqLworICAgICAgICBpbk1sZEpvaW5zU3VjY2VzcywgICAgICAgICAgICAgIC8qIFNUQVRfSW5NbGRKb2luc1N1Y2Nlc3MgKi8KKyAgICAgICAgaW5NbGRKb2luc0ZhaWwsICAgICAgICAgICAgICAgICAvKiBTVEFUX0luTWxkSm9pbnNGYWlsICovCisgICAgICAgIGluUmVwb3J0U3VwcHJlc3Npb25Ecm9wLCAgICAgICAgLyogU1RBVF9JblJlcG9ydFN1cHByZXNzaW9uRHJvcCAqLworICAgICAgICBpbkxlYXZlU3VwcHJlc3Npb25Ecm9wLCAgICAgICAgIC8qIFNUQVRfSW5MZWF2ZVN1cHByZXNzaW9uRHJvcCAqLworICAgICAgICBvdXRJZ21wUmVwb3J0cywgICAgICAgICAgICAgICAgIC8qIFNUQVRfT3V0SWdtcFJlcG9ydHMgKi8KKyAgICAgICAgb3V0SWdtcExlYXZlcywgICAgICAgICAgICAgICAgICAvKiBTVEFUX091dElnbXBMZWF2ZXMgKi8KKyAgICAgICAgb3V0SWdtcEdlbmVyYWxRdWVyeSwgICAgICAgICAgICAvKiBTVEFUX091dElnbXBHZW5lcmFsUXVlcnkgKi8KKyAgICAgICAgb3V0SWdtcFNwZWNpZmljUXVlcnksICAgICAgICAgICAvKiBTVEFUX091dElnbXBTcGVjaWZpY1F1ZXJ5ICovCisgICAgICAgIG91dE1sZFJlcG9ydHMsICAgICAgICAgICAgICAgICAgLyogU1RBVF9PdXRNbGRSZXBvcnRzICovCisgICAgICAgIG91dE1sZExlYXZlcywgICAgICAgICAgICAgICAgICAgLyogU1RBVF9PdXRNbGRMZWF2ZXMgKi8KKyAgICAgICAgb3V0TWxkR2VuZXJhbFF1ZXJ5LCAgICAgICAgICAgICAvKiBTVEFUX091dE1sZEdlbmVyYWxRdWVyeSAqLworICAgICAgICBvdXRNbGRTcGVjaWZpY1F1ZXJ5LCAgICAgICAgICAgIC8qIFNUQVRfT3V0TWxkU3BlY2lmaWNRdWVyeSAqLworICAgICAgICBpbktub3duTXVsdGljYXN0UGt0cywgICAgICAgICAgIC8qIFNUQVRfSW5Lbm93bk11bHRpY2FzdFBrdHMgKi8KKyAgICAgICAgaWZJbk11bHRpY2FzdFBrdHMsICAgICAgICAgICAgICAvKiBTVEFUX0lmSW5NdWx0aWNhc3RQa3RzICovCisgICAgICAgIGlmSW5Ccm9hZGNhc3RQa3RzLCAgICAgICAgICAgICAgLyogU1RBVF9JZkluQnJvYWRjYXN0UGt0cyAqLworICAgICAgICBpZk91dERpc2NhcmRzICAgICAgICAgICAgICAgICAgIC8qIFNUQVRfSWZPdXREaXNjYXJkcyAqLworICAgIH07CisKKyAgICBpZihjbnRfaWR4ID49IFNUQVRfUE9SVF9DTlRSX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9TVEFUX0lOVkFMSURfUE9SVF9DTlRSOworCisgICAgaWYobWliX2FzaWNfaWR4W2NudF9pZHhdID09IE1JQl9OT1RfU1VQUE9SVCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9DSElQX05PVF9TVVBQT1JURUQ7CisKKyAgICAqcE1pYl9pZHggPSBtaWJfYXNpY19pZHhbY250X2lkeF07CisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N0YXRfcG9ydF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgcGVyIHBvcnQgTUlCIGNvdW50ZXIgYnkgaW5kZXgKKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAtIHBvcnQgaWQuCisgKiAgICAgIGNudHJfaWR4ICAgIC0gcG9ydCBjb3VudGVyIGluZGV4LgorICogT3V0cHV0OgorICogICAgICBwQ250ciAtIE1JQiByZXRyaXZlZCBjb3VudGVyLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgR2V0IHBlciBwb3J0IE1JQiBjb3VudGVyIGJ5IGluZGV4IGRlZmluaXRpb24uCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3N0YXRfcG9ydF9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfc3RhdF9wb3J0X3R5cGVfdCBjbnRyX2lkeCwgcnRrX3N0YXRfY291bnRlcl90ICpwQ250cikKK3sKKyAgICBydGtfYXBpX3JldF90ICAgICAgIHJldFZhbDsKKyAgICBSVEw4MzY3Q19NSUJDT1VOVEVSIG1pYl9pZHg7CisgICAgcnRrX3N0YXRfY291bnRlcl90ICBzZWNvbmRfY250OworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKE5VTEwgPT0gcENudHIpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgLyogQ2hlY2sgcG9ydCB2YWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwb3J0KTsKKworICAgIGlmIChjbnRyX2lkeD49U1RBVF9QT1JUX0NOVFJfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX1NUQVRfSU5WQUxJRF9QT1JUX0NOVFI7CisKKyAgICBpZigocmV0VmFsID0gX2dldF9hc2ljX21pYl9pZHgoY250cl9pZHgsICZtaWJfaWR4KSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYobWliX2lkeCA9PSBNSUJfTk9UX1NVUFBPUlQpCisgICAgICAgIHJldHVybiBSVF9FUlJfQ0hJUF9OT1RfU1VQUE9SVEVEOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljTUlCc0NvdW50ZXIocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIG1pYl9pZHgsIHBDbnRyKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYoY250cl9pZHggPT0gU1RBVF9FdGhlclN0YXRzTXVsdGljYXN0UGt0cykKKyAgICB7CisgICAgICAgIGlmKChyZXRWYWwgPSBfZ2V0X2FzaWNfbWliX2lkeChTVEFUX0lmT3V0TXVsdGljYXN0UGt0cywgJm1pYl9pZHgpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljTUlCc0NvdW50ZXIocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIG1pYl9pZHgsICZzZWNvbmRfY250KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAqcENudHIgKz0gc2Vjb25kX2NudDsKKyAgICB9CisKKyAgICBpZihjbnRyX2lkeCA9PSBTVEFUX0V0aGVyU3RhdHNCcm9hZGNhc3RQa3RzKQorICAgIHsKKyAgICAgICAgaWYoKHJldFZhbCA9IF9nZXRfYXNpY19taWJfaWR4KFNUQVRfSWZPdXRCcm9hZGNhc3RQa3RzLCAmbWliX2lkeCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNNSUJzQ291bnRlcihydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgbWliX2lkeCwgJnNlY29uZF9jbnQpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICpwQ250ciArPSBzZWNvbmRfY250OworICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdGF0X3BvcnRfZ2V0QWxsCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGFsbCBjb3VudGVycyBvZiBvbmUgc3BlY2lmaWVkIHBvcnQgaW4gdGhlIHNwZWNpZmllZCBkZXZpY2UuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIHBvcnQgaWQuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBQb3J0X2NudHJzIC0gYnVmZmVyIHBvaW50ZXIgb2YgY291bnRlciB2YWx1ZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIEdldCBhbGwgTUlCIGNvdW50ZXJzIG9mIG9uZSBwb3J0LgorICovCitydGtfYXBpX3JldF90IHJ0a19zdGF0X3BvcnRfZ2V0QWxsKHJ0a19wb3J0X3QgcG9ydCwgcnRrX3N0YXRfcG9ydF9jbnRyX3QgKnBQb3J0X2NudHJzKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgbWliSW5kZXg7CisgICAgcnRrX3VpbnQ2NCBtaWJDb3VudGVyOworICAgIHJ0a191aW50MzIgKmFjY2Vzc1B0cjsKKyAgICAvKiBhZGRyZXNzIG9mZnNldCB0byBNSUJzIGNvdW50ZXIgKi8KKyAgICBDT05TVF9UIHJ0a191aW50MTYgbWliTGVuZ3RoW1NUQVRfUE9SVF9DTlRSX0VORF09IHsKKyAgICAgICAgMiwxLDEsMSwxLDEsMSwxLDEsCisgICAgICAgIDIsMSwxLDEsMSwxLDEsMSwxLDEsMSwKKyAgICAgICAgMiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwKKyAgICAgICAgMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxfTsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBQb3J0X2NudHJzKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIC8qIENoZWNrIHBvcnQgdmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQocG9ydCk7CisKKyAgICBhY2Nlc3NQdHIgPSAocnRrX3VpbnQzMiopcFBvcnRfY250cnM7CisgICAgZm9yIChtaWJJbmRleD0wO21pYkluZGV4PFNUQVRfUE9SVF9DTlRSX0VORDttaWJJbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGtfc3RhdF9wb3J0X2dldChwb3J0LCBtaWJJbmRleCwgJm1pYkNvdW50ZXIpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChyZXRWYWwgPT0gUlRfRVJSX0NISVBfTk9UX1NVUFBPUlRFRCkKKyAgICAgICAgICAgICAgICBtaWJDb3VudGVyID0gMDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICB9CisKKyAgICAgICAgaWYgKDIgPT0gbWliTGVuZ3RoW21pYkluZGV4XSkKKyAgICAgICAgICAgICoocnRrX3VpbnQ2NCopYWNjZXNzUHRyID0gbWliQ291bnRlcjsKKyAgICAgICAgZWxzZSBpZiAoMSA9PSBtaWJMZW5ndGhbbWliSW5kZXhdKQorICAgICAgICAgICAgKmFjY2Vzc1B0ciA9IG1pYkNvdW50ZXI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBSVF9FUlJfRkFJTEVEOworCisgICAgICAgIGFjY2Vzc1B0cis9bWliTGVuZ3RoW21pYkluZGV4XTsKKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3RhdF9sb2dnaW5nX2NvdW50ZXJDZmdfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHRoZSB0eXBlIGFuZCBtb2RlIG9mIExvZ2dpbmcgQ291bnRlcgorICogSW5wdXQ6CisgKiAgICAgIGlkeCAgICAgLSBUaGUgaW5kZXggb2YgTG9nZ2luZyBDb3VudGVyLiBTaG91bGQgYmUgZXZlbiBudW1iZXIgb25seS4oMCwyLDQsNiw4Li4uLi4zMCkKKyAqICAgICAgbW9kZSAgICAtIDMyIGJpdHMgb3IgNjQgYml0cyBtb2RlCisgKiAgICAgIHR5cGUgICAgLSBQYWNrZXQgY291bnRlciBvciBieXRlIGNvdW50ZXIKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgLSBPdXQgb2YgcmFuZ2UuCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFNldCB0aGUgdHlwZSBhbmQgbW9kZSBvZiBMb2dnaW5nIENvdW50ZXIuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3N0YXRfbG9nZ2luZ19jb3VudGVyQ2ZnX3NldChydGtfdWludDMyIGlkeCwgcnRrX2xvZ2dpbmdfY291bnRlcl9tb2RlX3QgbW9kZSwgcnRrX2xvZ2dpbmdfY291bnRlcl90eXBlX3QgdHlwZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihpZHggPiBSVEw4MzY3Q19NSUJfTUFYX0xPR19DTlRfSURYKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIGlmKChpZHggJSAyKSA9PSAxKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYobW9kZSA+PSBMT0dHSU5HX01PREVfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIGlmKHR5cGUgPj0gTE9HR0lOR19UWVBFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY01JQnNMb2dnaW5nVHlwZSgoaWR4IC8gMiksIChydGtfdWludDMyKXR5cGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY01JQnNMb2dnaW5nTW9kZSgoaWR4IC8gMiksIChydGtfdWludDMyKW1vZGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3RhdF9sb2dnaW5nX2NvdW50ZXJDZmdfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHRoZSB0eXBlIGFuZCBtb2RlIG9mIExvZ2dpbmcgQ291bnRlcgorICogSW5wdXQ6CisgKiAgICAgIGlkeCAgICAgLSBUaGUgaW5kZXggb2YgTG9nZ2luZyBDb3VudGVyLiBTaG91bGQgYmUgZXZlbiBudW1iZXIgb25seS4oMCwyLDQsNiw4Li4uLi4zMCkKKyAqIE91dHB1dDoKKyAqICAgICAgcE1vZGUgICAtIDMyIGJpdHMgb3IgNjQgYml0cyBtb2RlCisgKiAgICAgIHBUeXBlICAgLSBQYWNrZXQgY291bnRlciBvciBieXRlIGNvdW50ZXIKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgLSBPdXQgb2YgcmFuZ2UuCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAtIE5VTEwgUG9pbnRlcgorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgR2V0IHRoZSB0eXBlIGFuZCBtb2RlIG9mIExvZ2dpbmcgQ291bnRlci4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfc3RhdF9sb2dnaW5nX2NvdW50ZXJDZmdfZ2V0KHJ0a191aW50MzIgaWR4LCBydGtfbG9nZ2luZ19jb3VudGVyX21vZGVfdCAqcE1vZGUsIHJ0a19sb2dnaW5nX2NvdW50ZXJfdHlwZV90ICpwVHlwZSkKK3sKKyAgICBydGtfYXBpX3JldF90ICAgcmV0VmFsOworICAgIHJ0a191aW50MzIgICAgICB0eXBlLCBtb2RlOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKGlkeCA+IFJUTDgzNjdDX01JQl9NQVhfTE9HX0NOVF9JRFgpCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgaWYoKGlkeCAlIDIpID09IDEpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZihwTW9kZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmKHBUeXBlID09IE5VTEwpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNNSUJzTG9nZ2luZ1R5cGUoKGlkeCAvIDIpLCAmdHlwZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljTUlCc0xvZ2dpbmdNb2RlKChpZHggLyAyKSwgJm1vZGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAqcE1vZGUgPSAocnRrX2xvZ2dpbmdfY291bnRlcl9tb2RlX3QpbW9kZTsKKyAgICAqcFR5cGUgPSAocnRrX2xvZ2dpbmdfY291bnRlcl90eXBlX3QpdHlwZTsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N0YXRfbG9nZ2luZ19jb3VudGVyX3Jlc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgUmVzZXQgTG9nZ2luZyBDb3VudGVyCisgKiBJbnB1dDoKKyAqICAgICAgaWR4ICAgICAtIFRoZSBpbmRleCBvZiBMb2dnaW5nIENvdW50ZXIuICgwfjMxKQorICogT3V0cHV0OgorICogICAgICBOb25lLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAtIE91dCBvZiByYW5nZS4KKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgUmVzZXQgTG9nZ2luZyBDb3VudGVyLgorICovCitydGtfYXBpX3JldF90IHJ0a19zdGF0X2xvZ2dpbmdfY291bnRlcl9yZXNldChydGtfdWludDMyIGlkeCkKK3sKKyAgICBydGtfYXBpX3JldF90ICAgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKGlkeCA+IFJUTDgzNjdDX01JQl9NQVhfTE9HX0NOVF9JRFgpCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNNSUJzUmVzZXRMb2dnaW5nQ291bnRlcihpZHgpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3RhdF9sb2dnaW5nX2NvdW50ZXJfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IExvZ2dpbmcgQ291bnRlcgorICogSW5wdXQ6CisgKiAgICAgIGlkeCAgICAgLSBUaGUgaW5kZXggb2YgTG9nZ2luZyBDb3VudGVyLiAoMH4zMSkKKyAqIE91dHB1dDoKKyAqICAgICAgcENudCAgICAtIExvZ2dpbmcgY291bnRlciB2YWx1ZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAtIE91dCBvZiByYW5nZS4KKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgR2V0IExvZ2dpbmcgQ291bnRlci4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfc3RhdF9sb2dnaW5nX2NvdW50ZXJfZ2V0KHJ0a191aW50MzIgaWR4LCBydGtfdWludDMyICpwQ250KQoreworICAgIHJ0a19hcGlfcmV0X3QgICByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoTlVMTCA9PSBwQ250KQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmKGlkeCA+IFJUTDgzNjdDX01JQl9NQVhfTE9HX0NOVF9JRFgpCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNNSUJzTG9nQ291bnRlcihpZHgsIHBDbnQpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3RhdF9sZW5ndGhNb2RlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBMZWdudGggbW9kZS4KKyAqIElucHV0OgorICogICAgICB0eE1vZGUgICAgIC0gVGhlIGxlbmd0aCBjb3VudGluZyBtb2RlCisgKiAgICAgIHJ4TW9kZSAgICAgLSBUaGUgbGVuZ3RoIGNvdW50aW5nIG1vZGUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBPdXQgb2YgcmFuZ2UuCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKgorICovCitydGtfYXBpX3JldF90IHJ0a19zdGF0X2xlbmd0aE1vZGVfc2V0KHJ0a19zdGF0X2xlbmd0aE1vZGVfdCB0eE1vZGUsIHJ0a19zdGF0X2xlbmd0aE1vZGVfdCByeE1vZGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCAgIHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZih0eE1vZGUgPj0gTEVOR1RIX01PREVfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYocnhNb2RlID49IExFTkdUSF9NT0RFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljTUlCc0xlbmd0aCgocnRrX3VpbnQzMil0eE1vZGUsIChydGtfdWludDMyKXJ4TW9kZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdGF0X2xlbmd0aE1vZGVfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IExlZ250aCBtb2RlLgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBUeE1vZGUgICAgICAgLSBUaGUgbGVuZ3RoIGNvdW50aW5nIG1vZGUKKyAqICAgICAgcFJ4TW9kZSAgICAgICAtIFRoZSBsZW5ndGggY291bnRpbmcgbW9kZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIE91dCBvZiByYW5nZS4KKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfc3RhdF9sZW5ndGhNb2RlX2dldChydGtfc3RhdF9sZW5ndGhNb2RlX3QgKnBUeE1vZGUsIHJ0a19zdGF0X2xlbmd0aE1vZGVfdCAqcFJ4TW9kZSkKK3sKKyAgICBydGtfYXBpX3JldF90ICAgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKE5VTEwgPT0gcFR4TW9kZSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZihOVUxMID09IHBSeE1vZGUpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNNSUJzTGVuZ3RoKChydGtfdWludDMyICopcFR4TW9kZSwgKHJ0a191aW50MzIgKilwUnhNb2RlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3N0b3JtLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2Mvc3Rvcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2NmNGUzCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3N0b3JtLmMKQEAgLTAsMCArMSw4MTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogJFJldmlzaW9uOiA3NjMwNiAkCisgKiAkRGF0ZTogMjAxNy0wMy0wOCAxNToxMzo1OCArMDgwMCAo6YCx5LiJLCAwOCDkuInmnIggMjAxNykgJAorICoKKyAqIFB1cnBvc2UgOiBSVEsgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJIGZvciBSVEw4MzY3L1JUTDgzNjdDCisgKiBGZWF0dXJlIDogSGVyZSBpcyBhIGxpc3Qgb2YgYWxsIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIGluIFN0b3JtIG1vZHVsZS4KKyAqCisgKi8KKworI2luY2x1ZGUgPHJ0a19zd2l0Y2guaD4KKyNpbmNsdWRlIDxydGtfZXJyb3IuaD4KKyNpbmNsdWRlIDxzdG9ybS5oPgorI2luY2x1ZGUgPHJhdGUuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2Lmg+CisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl9zdG9ybS5oPgorI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnZfbWV0ZXIuaD4KKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2X3JtYS5oPgorI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnZfaWdtcC5oPgorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcmF0ZV9zdG9ybUNvbnRyb2xNZXRlcklkeF9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgdGhlIHN0b3JtIGNvbnRyb2wgbWV0ZXIgaW5kZXguCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAtIHBvcnQgaWQKKyAqICAgICAgc3Rvcm1fdHlwZSAtIHN0b3JtIGdyb3VwIHR5cGUKKyAqICAgICAgaW5kZXggICAgICAgLSBzdG9ybSBjb250cm9sIG1ldGVyIGluZGV4LgorICogT3V0cHV0OgorICogICAgICBOb25lLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfUE9SVF9JRCAtIEludmFsaWQgcG9ydCBpZAorICogICAgICBSVF9FUlJfRklMVEVSX01FVEVSX0lEICAtIEludmFsaWQgbWV0ZXIKKyAqIE5vdGU6CisgKgorICovCitydGtfYXBpX3JldF90IHJ0a19yYXRlX3N0b3JtQ29udHJvbE1ldGVySWR4X3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19yYXRlX3N0b3JtX2dyb3VwX3Qgc3Rvcm1UeXBlLCBydGtfdWludDMyIGluZGV4KQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIENoZWNrIFBvcnQgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQocG9ydCk7CisKKyAgICBpZiAoc3Rvcm1UeXBlID49IFNUT1JNX0dST1VQX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9TRkNfVU5LTk9XTl9HUk9VUDsKKworICAgIGlmIChpbmRleCA+IFJUS19NQVhfTUVURVJfSUQpCisgICAgICAgIHJldHVybiBSVF9FUlJfRklMVEVSX01FVEVSX0lEOworCisgICAgc3dpdGNoIChzdG9ybVR5cGUpCisgICAgeworICAgICAgICBjYXNlIFNUT1JNX0dST1VQX1VOS05PV05fVU5JQ0FTVDoKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1N0b3JtRmlsdGVyVW5rbm93blVuaWNhc3RNZXRlcihydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgaW5kZXgpKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVE9STV9HUk9VUF9VTktOT1dOX01VTFRJQ0FTVDoKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1N0b3JtRmlsdGVyVW5rbm93bk11bHRpY2FzdE1ldGVyKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCBpbmRleCkpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNUT1JNX0dST1VQX01VTFRJQ0FTVDoKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1N0b3JtRmlsdGVyTXVsdGljYXN0TWV0ZXIocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIGluZGV4KSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RPUk1fR1JPVVBfQlJPQURDQVNUOgorICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU3Rvcm1GaWx0ZXJCcm9hZGNhc3RNZXRlcihydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgaW5kZXgpKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19yYXRlX3N0b3JtQ29udHJvbE1ldGVySWR4X2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCB0aGUgc3Rvcm0gY29udHJvbCBtZXRlciBpbmRleC4KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgIC0gcG9ydCBpZAorICogICAgICBzdG9ybV90eXBlIC0gc3Rvcm0gZ3JvdXAgdHlwZQorICogT3V0cHV0OgorICogICAgICBwSW5kZXggICAgIC0gc3Rvcm0gY29udHJvbCBtZXRlciBpbmRleC4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgLSBJbnZhbGlkIHBvcnQgaWQKKyAqICAgICAgUlRfRVJSX0ZJTFRFUl9NRVRFUl9JRCAgLSBJbnZhbGlkIG1ldGVyCisgKiBOb3RlOgorICoKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfcmF0ZV9zdG9ybUNvbnRyb2xNZXRlcklkeF9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfcmF0ZV9zdG9ybV9ncm91cF90IHN0b3JtVHlwZSwgcnRrX3VpbnQzMiAqcEluZGV4KQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIENoZWNrIFBvcnQgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQocG9ydCk7CisKKyAgICBpZiAoc3Rvcm1UeXBlID49IFNUT1JNX0dST1VQX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9TRkNfVU5LTk9XTl9HUk9VUDsKKworICAgIGlmIChOVUxMID09IHBJbmRleCApCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgc3dpdGNoIChzdG9ybVR5cGUpCisgICAgeworICAgICAgICBjYXNlIFNUT1JNX0dST1VQX1VOS05PV05fVU5JQ0FTVDoKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1N0b3JtRmlsdGVyVW5rbm93blVuaWNhc3RNZXRlcihydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgcEluZGV4KSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RPUk1fR1JPVVBfVU5LTk9XTl9NVUxUSUNBU1Q6CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTdG9ybUZpbHRlclVua25vd25NdWx0aWNhc3RNZXRlcihydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgcEluZGV4KSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RPUk1fR1JPVVBfTVVMVElDQVNUOgorICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU3Rvcm1GaWx0ZXJNdWx0aWNhc3RNZXRlcihydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgcEluZGV4KSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RPUk1fR1JPVVBfQlJPQURDQVNUOgorICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU3Rvcm1GaWx0ZXJCcm9hZGNhc3RNZXRlcihydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgcEluZGV4KSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcmF0ZV9zdG9ybUNvbnRyb2xQb3J0RW5hYmxlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBlbmFibGUgc3RhdHVzIG9mIHN0b3JtIGNvbnRyb2wgb24gc3BlY2lmaWVkIHBvcnQuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAtIHBvcnQgaWQKKyAqICAgICAgc3Rvcm1UeXBlICAtIHN0b3JtIGdyb3VwIHR5cGUKKyAqICAgICAgZW5hYmxlICAgICAtIGVuYWJsZSBzdGF0dXMgb2Ygc3Rvcm0gY29udHJvbAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiAgICAgIFJUX0VSUl9OT1RfSU5JVCAgICAgICAgICAtIFRoZSBtb2R1bGUgaXMgbm90IGluaXRpYWwKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgIC0gaW52YWxpZCBwb3J0IGlkCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICAtIGludmFsaWQgaW5wdXQgcGFyYW1ldGVyCisgKiBOb3RlOgorICoKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfcmF0ZV9zdG9ybUNvbnRyb2xQb3J0RW5hYmxlX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19yYXRlX3N0b3JtX2dyb3VwX3Qgc3Rvcm1UeXBlLCBydGtfZW5hYmxlX3QgZW5hYmxlKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIENoZWNrIFBvcnQgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQocG9ydCk7CisKKyAgICBpZiAoc3Rvcm1UeXBlID49IFNUT1JNX0dST1VQX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9TRkNfVU5LTk9XTl9HUk9VUDsKKworICAgIGlmIChlbmFibGUgPj0gUlRLX0VOQUJMRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfRU5BQkxFOworCisgICAgc3dpdGNoIChzdG9ybVR5cGUpCisgICAgeworICAgICAgICBjYXNlIFNUT1JNX0dST1VQX1VOS05PV05fVU5JQ0FTVDoKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1N0b3JtRmlsdGVyVW5rbm93blVuaWNhc3RFbmFibGUocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIGVuYWJsZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RPUk1fR1JPVVBfVU5LTk9XTl9NVUxUSUNBU1Q6CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTdG9ybUZpbHRlclVua25vd25NdWx0aWNhc3RFbmFibGUocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIGVuYWJsZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RPUk1fR1JPVVBfTVVMVElDQVNUOgorICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU3Rvcm1GaWx0ZXJNdWx0aWNhc3RFbmFibGUocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIGVuYWJsZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RPUk1fR1JPVVBfQlJPQURDQVNUOgorICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU3Rvcm1GaWx0ZXJCcm9hZGNhc3RFbmFibGUocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIGVuYWJsZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcmF0ZV9zdG9ybUNvbnRyb2xQb3J0RW5hYmxlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBlbmFibGUgc3RhdHVzIG9mIHN0b3JtIGNvbnRyb2wgb24gc3BlY2lmaWVkIHBvcnQuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAtIHBvcnQgaWQKKyAqICAgICAgc3Rvcm1UeXBlICAtIHN0b3JtIGdyb3VwIHR5cGUKKyAqIE91dHB1dDoKKyAqICAgICAgcEVuYWJsZSAgICAgLSBlbmFibGUgc3RhdHVzIG9mIHN0b3JtIGNvbnRyb2wKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX05PVF9JTklUICAgICAgICAgIC0gVGhlIG1vZHVsZSBpcyBub3QgaW5pdGlhbAorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAgLSBpbnZhbGlkIHBvcnQgaWQKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgIC0gaW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIKKyAqIE5vdGU6CisgKgorICovCitydGtfYXBpX3JldF90IHJ0a19yYXRlX3N0b3JtQ29udHJvbFBvcnRFbmFibGVfZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3JhdGVfc3Rvcm1fZ3JvdXBfdCBzdG9ybVR5cGUsIHJ0a19lbmFibGVfdCAqcEVuYWJsZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBQb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgaWYgKHN0b3JtVHlwZSA+PSBTVE9STV9HUk9VUF9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfU0ZDX1VOS05PV05fR1JPVVA7CisKKyAgICBpZiAoTlVMTCA9PSBwRW5hYmxlKQorICAgICAgICByZXR1cm4gUlRfRVJSX0VOQUJMRTsKKworICAgIHN3aXRjaCAoc3Rvcm1UeXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBTVE9STV9HUk9VUF9VTktOT1dOX1VOSUNBU1Q6CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTdG9ybUZpbHRlclVua25vd25VbmljYXN0RW5hYmxlKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCBwRW5hYmxlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVE9STV9HUk9VUF9VTktOT1dOX01VTFRJQ0FTVDoKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1N0b3JtRmlsdGVyVW5rbm93bk11bHRpY2FzdEVuYWJsZShydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgcEVuYWJsZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RPUk1fR1JPVVBfTVVMVElDQVNUOgorICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU3Rvcm1GaWx0ZXJNdWx0aWNhc3RFbmFibGUocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIHBFbmFibGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNUT1JNX0dST1VQX0JST0FEQ0FTVDoKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1N0b3JtRmlsdGVyQnJvYWRjYXN0RW5hYmxlKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCBwRW5hYmxlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdG9ybV9ieXBhc3Nfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IGJ5cGFzcyBzdG9ybSBmaWx0ZXIgY29udHJvbCBjb25maWd1cmF0aW9uLgorICogSW5wdXQ6CisgKiAgICAgIHR5cGUgICAgLSBCeXBhc3Mgc3Rvcm0gZmlsdGVyIGNvbnRyb2wgdHlwZS4KKyAqICAgICAgZW5hYmxlICAtIEJ5cGFzcyBzdGF0dXMuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX0VOQUJMRSAgICAgICAtIEludmFsaWQgSUZHIHBhcmFtZXRlcgorICogTm90ZToKKyAqCisgKiAgICAgIFRoaXMgQVBJIGNhbiBzZXQgcGVyLXBvcnQgYnlwYXNzIHN0b21yIGZpbHRlciBjb250cm9sIGZyYW1lIHR5cGUgaW5jbHVkaW5nIFJNQSBhbmQgaWdtcC4KKyAqICAgICAgVGhlIGJ5cGFzcyBmcmFtZSB0eXBlIGlzIGFzIGZvbGxvd2luZzoKKyAqICAgICAgLSBCWVBBU1NfQlJHX0dST1VQLAorICogICAgICAtIEJZUEFTU19GRF9QQVVTRSwKKyAqICAgICAgLSBCWVBBU1NfU1BfTUNBU1QsCisgKiAgICAgIC0gQllQQVNTXzFYX1BBRSwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZfQlJHXzA0LAorICogICAgICAtIEJZUEFTU19VTkRFRl9CUkdfMDUsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0JSR18wNiwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZfQlJHXzA3LAorICogICAgICAtIEJZUEFTU19QUk9WSURFUl9CUklER0VfR1JPVVBfQUREUkVTUywKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZfQlJHXzA5LAorICogICAgICAtIEJZUEFTU19VTkRFRl9CUkdfMEEsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0JSR18wQiwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZfQlJHXzBDLAorICogICAgICAtIEJZUEFTU19QUk9WSURFUl9CUklER0VfR1ZSUF9BRERSRVNTLAorICogICAgICAtIEJZUEFTU184MDIxQUIsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0JSR18wRiwKKyAqICAgICAgLSBCWVBBU1NfQlJHX01OR0VNRU5ULAorICogICAgICAtIEJZUEFTU19VTkRFRklORURfMTEsCisgKiAgICAgIC0gQllQQVNTX1VOREVGSU5FRF8xMiwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZJTkVEXzEzLAorICogICAgICAtIEJZUEFTU19VTkRFRklORURfMTQsCisgKiAgICAgIC0gQllQQVNTX1VOREVGSU5FRF8xNSwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZJTkVEXzE2LAorICogICAgICAtIEJZUEFTU19VTkRFRklORURfMTcsCisgKiAgICAgIC0gQllQQVNTX1VOREVGSU5FRF8xOCwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZJTkVEXzE5LAorICogICAgICAtIEJZUEFTU19VTkRFRklORURfMUEsCisgKiAgICAgIC0gQllQQVNTX1VOREVGSU5FRF8xQiwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZJTkVEXzFDLAorICogICAgICAtIEJZUEFTU19VTkRFRklORURfMUQsCisgKiAgICAgIC0gQllQQVNTX1VOREVGSU5FRF8xRSwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZJTkVEXzFGLAorICogICAgICAtIEJZUEFTU19HTVJQLAorICogICAgICAtIEJZUEFTU19HVlJQLAorICogICAgICAtIEJZUEFTU19VTkRFRl9HQVJQXzIyLAorICogICAgICAtIEJZUEFTU19VTkRFRl9HQVJQXzIzLAorICogICAgICAtIEJZUEFTU19VTkRFRl9HQVJQXzI0LAorICogICAgICAtIEJZUEFTU19VTkRFRl9HQVJQXzI1LAorICogICAgICAtIEJZUEFTU19VTkRFRl9HQVJQXzI2LAorICogICAgICAtIEJZUEFTU19VTkRFRl9HQVJQXzI3LAorICogICAgICAtIEJZUEFTU19VTkRFRl9HQVJQXzI4LAorICogICAgICAtIEJZUEFTU19VTkRFRl9HQVJQXzI5LAorICogICAgICAtIEJZUEFTU19VTkRFRl9HQVJQXzJBLAorICogICAgICAtIEJZUEFTU19VTkRFRl9HQVJQXzJCLAorICogICAgICAtIEJZUEFTU19VTkRFRl9HQVJQXzJDLAorICogICAgICAtIEJZUEFTU19VTkRFRl9HQVJQXzJELAorICogICAgICAtIEJZUEFTU19VTkRFRl9HQVJQXzJFLAorICogICAgICAtIEJZUEFTU19VTkRFRl9HQVJQXzJGLAorICogICAgICAtIEJZUEFTU19JR01QLgorICogICAgICAtIEJZUEFTU19DRFAuCisgKiAgICAgIC0gQllQQVNTX0NTU1RQLgorICogICAgICAtIEJZUEFTU19MTERQLgorICovCitydGtfYXBpX3JldF90IHJ0a19zdG9ybV9ieXBhc3Nfc2V0KHJ0a19zdG9ybV9ieXBhc3NfdCB0eXBlLCBydGtfZW5hYmxlX3QgZW5hYmxlKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0bDgzNjdjX3JtYV90IHJtYWNmZzsKKyAgICBydGtfdWludDMyIHRtcDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAodHlwZSA+PSBCWVBBU1NfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYgKGVuYWJsZSA+PSBSVEtfRU5BQkxFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmICh0eXBlID49IDAgJiYgdHlwZSA8PSBCWVBBU1NfVU5ERUZfR0FSUF8yRikKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JtYSh0eXBlLCAmcm1hY2ZnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBybWFjZmcuZGlzY2FyZF9zdG9ybV9maWx0ZXIgPSBlbmFibGU7CisKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUm1hKHR5cGUsICZybWFjZmcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKyAgICBlbHNlIGlmKHR5cGUgPT0gQllQQVNTX0lHTVApCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNJR01QQnlwYXNzU3Rvcm1DVFJMKGVuYWJsZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUgPT0gQllQQVNTX0NEUCkKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JtYUNkcCgmcm1hY2ZnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBybWFjZmcuZGlzY2FyZF9zdG9ybV9maWx0ZXIgPSBlbmFibGU7CisKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUm1hQ2RwKCZybWFjZmcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlICA9PSBCWVBBU1NfQ1NTVFApCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSbWFDc3N0cCgmcm1hY2ZnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBybWFjZmcuZGlzY2FyZF9zdG9ybV9maWx0ZXIgPSBlbmFibGU7CisKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUm1hQ3NzdHAoJnJtYWNmZykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUgID09IEJZUEFTU19MTERQKQorICAgIHsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUm1hTGxkcCgmdG1wLCAmcm1hY2ZnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBybWFjZmcuZGlzY2FyZF9zdG9ybV9maWx0ZXIgPSBlbmFibGU7CisKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUm1hTGxkcCh0bXAsICZybWFjZmcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3Rvcm1fYnlwYXNzX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBieXBhc3Mgc3Rvcm0gZmlsdGVyIGNvbnRyb2wgY29uZmlndXJhdGlvbi4KKyAqIElucHV0OgorICogICAgICB0eXBlIC0gQnlwYXNzIHN0b3JtIGZpbHRlciBjb250cm9sIHR5cGUuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBFbmFibGUgLSBCeXBhc3Mgc3RhdHVzLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgY2FuIGdldCBwZXItcG9ydCBieXBhc3Mgc3RvbXIgZmlsdGVyIGNvbnRyb2wgZnJhbWUgdHlwZSBpbmNsdWRpbmcgUk1BIGFuZCBpZ21wLgorICogICAgICBUaGUgYnlwYXNzIGZyYW1lIHR5cGUgaXMgYXMgZm9sbG93aW5nOgorICogICAgICAtIEJZUEFTU19CUkdfR1JPVVAsCisgKiAgICAgIC0gQllQQVNTX0ZEX1BBVVNFLAorICogICAgICAtIEJZUEFTU19TUF9NQ0FTVCwKKyAqICAgICAgLSBCWVBBU1NfMVhfUEFFLAorICogICAgICAtIEJZUEFTU19VTkRFRl9CUkdfMDQsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0JSR18wNSwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZfQlJHXzA2LAorICogICAgICAtIEJZUEFTU19VTkRFRl9CUkdfMDcsCisgKiAgICAgIC0gQllQQVNTX1BST1ZJREVSX0JSSURHRV9HUk9VUF9BRERSRVNTLAorICogICAgICAtIEJZUEFTU19VTkRFRl9CUkdfMDksCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0JSR18wQSwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZfQlJHXzBCLAorICogICAgICAtIEJZUEFTU19VTkRFRl9CUkdfMEMsCisgKiAgICAgIC0gQllQQVNTX1BST1ZJREVSX0JSSURHRV9HVlJQX0FERFJFU1MsCisgKiAgICAgIC0gQllQQVNTXzgwMjFBQiwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZfQlJHXzBGLAorICogICAgICAtIEJZUEFTU19CUkdfTU5HRU1FTlQsCisgKiAgICAgIC0gQllQQVNTX1VOREVGSU5FRF8xMSwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZJTkVEXzEyLAorICogICAgICAtIEJZUEFTU19VTkRFRklORURfMTMsCisgKiAgICAgIC0gQllQQVNTX1VOREVGSU5FRF8xNCwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZJTkVEXzE1LAorICogICAgICAtIEJZUEFTU19VTkRFRklORURfMTYsCisgKiAgICAgIC0gQllQQVNTX1VOREVGSU5FRF8xNywKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZJTkVEXzE4LAorICogICAgICAtIEJZUEFTU19VTkRFRklORURfMTksCisgKiAgICAgIC0gQllQQVNTX1VOREVGSU5FRF8xQSwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZJTkVEXzFCLAorICogICAgICAtIEJZUEFTU19VTkRFRklORURfMUMsCisgKiAgICAgIC0gQllQQVNTX1VOREVGSU5FRF8xRCwKKyAqICAgICAgLSBCWVBBU1NfVU5ERUZJTkVEXzFFLAorICogICAgICAtIEJZUEFTU19VTkRFRklORURfMUYsCisgKiAgICAgIC0gQllQQVNTX0dNUlAsCisgKiAgICAgIC0gQllQQVNTX0dWUlAsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0dBUlBfMjIsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0dBUlBfMjMsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0dBUlBfMjQsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0dBUlBfMjUsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0dBUlBfMjYsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0dBUlBfMjcsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0dBUlBfMjgsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0dBUlBfMjksCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0dBUlBfMkEsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0dBUlBfMkIsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0dBUlBfMkMsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0dBUlBfMkQsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0dBUlBfMkUsCisgKiAgICAgIC0gQllQQVNTX1VOREVGX0dBUlBfMkYsCisgKiAgICAgIC0gQllQQVNTX0lHTVAuCisgKiAgICAgIC0gQllQQVNTX0NEUC4KKyAqICAgICAgLSBCWVBBU1NfQ1NTVFAuCisgKiAgICAgIC0gQllQQVNTX0xMRFAuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3N0b3JtX2J5cGFzc19nZXQocnRrX3N0b3JtX2J5cGFzc190IHR5cGUsIHJ0a19lbmFibGVfdCAqcEVuYWJsZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGw4MzY3Y19ybWFfdCBybWFjZmc7CisgICAgcnRrX3VpbnQzMiB0bXA7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKHR5cGUgPj0gQllQQVNTX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmKE5VTEwgPT0gcEVuYWJsZSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAodHlwZSA+PSAwICYmIHR5cGUgPD0gQllQQVNTX1VOREVGX0dBUlBfMkYpCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSbWEodHlwZSwgJnJtYWNmZykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgKnBFbmFibGUgPSBybWFjZmcuZGlzY2FyZF9zdG9ybV9maWx0ZXI7CisgICAgfQorICAgIGVsc2UgaWYodHlwZSA9PSBCWVBBU1NfSUdNUCkKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY0lHTVBCeXBhc3NTdG9ybUNUUkwocEVuYWJsZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUgPT0gQllQQVNTX0NEUCkKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JtYUNkcCgmcm1hY2ZnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAqcEVuYWJsZSA9IHJtYWNmZy5kaXNjYXJkX3N0b3JtX2ZpbHRlcjsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZSA9PSBCWVBBU1NfQ1NTVFApCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSbWFDc3N0cCgmcm1hY2ZnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAqcEVuYWJsZSA9IHJtYWNmZy5kaXNjYXJkX3N0b3JtX2ZpbHRlcjsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZSA9PSBCWVBBU1NfTExEUCkKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JtYUxsZHAoJnRtcCwmcm1hY2ZnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAqcEVuYWJsZSA9IHJtYWNmZy5kaXNjYXJkX3N0b3JtX2ZpbHRlcjsKKyAgICB9CisgICAgZWxzZQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3JhdGVfc3Rvcm1Db250cm9sRXh0UG9ydG1hc2tfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IGV4dGVybnNpb24gc3Rvcm0gY29udHJvbCBwb3J0IG1hc2sKKyAqIElucHV0OgorICogICAgICBwUG9ydG1hc2sgIC0gcG9ydCBtYXNrCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX05PVF9JTklUICAgICAgICAgIC0gVGhlIG1vZHVsZSBpcyBub3QgaW5pdGlhbAorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAgLSBpbnZhbGlkIGlucHV0IHBhcmFtZXRlcgorICogTm90ZToKKyAqCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3JhdGVfc3Rvcm1Db250cm9sRXh0UG9ydG1hc2tfc2V0KHJ0a19wb3J0bWFza190ICpwUG9ydG1hc2spCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBwbWFzazsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBQb3J0bWFzaykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0a19zd2l0Y2hfcG9ydG1hc2tfTDJQX2dldChwUG9ydG1hc2ssICZwbWFzaykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1N0b3JtRmlsdGVyRXh0RW5hYmxlUG9ydE1hc2socG1hc2spKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfcmF0ZV9zdG9ybUNvbnRyb2xFeHRQb3J0bWFza19nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgZXh0ZXJuc2lvbiBzdG9ybSBjb250cm9sIHBvcnQgbWFzaworICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcFBvcnRtYXNrICAtIHBvcnQgbWFzaworICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfTk9UX0lOSVQgICAgICAgICAgLSBUaGUgbW9kdWxlIGlzIG5vdCBpbml0aWFsCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICAtIGludmFsaWQgaW5wdXQgcGFyYW1ldGVyCisgKiBOb3RlOgorICoKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfcmF0ZV9zdG9ybUNvbnRyb2xFeHRQb3J0bWFza19nZXQocnRrX3BvcnRtYXNrX3QgKnBQb3J0bWFzaykKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHBtYXNrOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKE5VTEwgPT0gcFBvcnRtYXNrKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1N0b3JtRmlsdGVyRXh0RW5hYmxlUG9ydE1hc2soJnBtYXNrKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKChyZXRWYWwgPSBydGtfc3dpdGNoX3BvcnRtYXNrX1AyTF9nZXQocG1hc2ssIHBQb3J0bWFzaykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19yYXRlX3N0b3JtQ29udHJvbEV4dEVuYWJsZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgZXh0ZXJuc2lvbiBzdG9ybSBjb250cm9sIHN0YXRlCisgKiBJbnB1dDoKKyAqICAgICAgc3Rvcm1UeXBlICAgLSBzdG9ybSBncm91cCB0eXBlCisgKiAgICAgIGVuYWJsZSAgICAgIC0gZXh0ZXJuc2lvbiBzdG9ybSBjb250cm9sIHN0YXRlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX05PVF9JTklUICAgICAgICAgIC0gVGhlIG1vZHVsZSBpcyBub3QgaW5pdGlhbAorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAgLSBpbnZhbGlkIGlucHV0IHBhcmFtZXRlcgorICogTm90ZToKKyAqCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3JhdGVfc3Rvcm1Db250cm9sRXh0RW5hYmxlX3NldChydGtfcmF0ZV9zdG9ybV9ncm91cF90IHN0b3JtVHlwZSwgcnRrX2VuYWJsZV90IGVuYWJsZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAoc3Rvcm1UeXBlID49IFNUT1JNX0dST1VQX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9TRkNfVU5LTk9XTl9HUk9VUDsKKworICAgIGlmIChlbmFibGUgPj0gUlRLX0VOQUJMRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfRU5BQkxFOworCisgICAgc3dpdGNoIChzdG9ybVR5cGUpCisgICAgeworICAgICAgICBjYXNlIFNUT1JNX0dST1VQX1VOS05PV05fVU5JQ0FTVDoKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1N0b3JtRmlsdGVyRXh0VW5rbm93blVuaWNhc3RFbmFibGUoZW5hYmxlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVE9STV9HUk9VUF9VTktOT1dOX01VTFRJQ0FTVDoKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1N0b3JtRmlsdGVyRXh0VW5rbm93bk11bHRpY2FzdEVuYWJsZShlbmFibGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNUT1JNX0dST1VQX01VTFRJQ0FTVDoKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1N0b3JtRmlsdGVyRXh0TXVsdGljYXN0RW5hYmxlKGVuYWJsZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RPUk1fR1JPVVBfQlJPQURDQVNUOgorICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU3Rvcm1GaWx0ZXJFeHRCcm9hZGNhc3RFbmFibGUoZW5hYmxlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19yYXRlX3N0b3JtQ29udHJvbEV4dEVuYWJsZV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgZXh0ZXJuc2lvbiBzdG9ybSBjb250cm9sIHN0YXRlCisgKiBJbnB1dDoKKyAqICAgICAgc3Rvcm1UeXBlICAgLSBzdG9ybSBncm91cCB0eXBlCisgKiBPdXRwdXQ6CisgKiAgICAgIHBFbmFibGUgICAgIC0gZXh0ZXJuc2lvbiBzdG9ybSBjb250cm9sIHN0YXRlCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiAgICAgIFJUX0VSUl9OT1RfSU5JVCAgICAgICAgICAtIFRoZSBtb2R1bGUgaXMgbm90IGluaXRpYWwKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgIC0gaW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIKKyAqIE5vdGU6CisgKgorICovCitydGtfYXBpX3JldF90IHJ0a19yYXRlX3N0b3JtQ29udHJvbEV4dEVuYWJsZV9nZXQocnRrX3JhdGVfc3Rvcm1fZ3JvdXBfdCBzdG9ybVR5cGUsIHJ0a19lbmFibGVfdCAqcEVuYWJsZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAoc3Rvcm1UeXBlID49IFNUT1JNX0dST1VQX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9TRkNfVU5LTk9XTl9HUk9VUDsKKworICAgIGlmIChOVUxMID09IHBFbmFibGUpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgc3dpdGNoIChzdG9ybVR5cGUpCisgICAgeworICAgICAgICBjYXNlIFNUT1JNX0dST1VQX1VOS05PV05fVU5JQ0FTVDoKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1N0b3JtRmlsdGVyRXh0VW5rbm93blVuaWNhc3RFbmFibGUoKHJ0a191aW50MzIgKilwRW5hYmxlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVE9STV9HUk9VUF9VTktOT1dOX01VTFRJQ0FTVDoKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1N0b3JtRmlsdGVyRXh0VW5rbm93bk11bHRpY2FzdEVuYWJsZSgocnRrX3VpbnQzMiAqKXBFbmFibGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNUT1JNX0dST1VQX01VTFRJQ0FTVDoKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1N0b3JtRmlsdGVyRXh0TXVsdGljYXN0RW5hYmxlKChydGtfdWludDMyICopcEVuYWJsZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RPUk1fR1JPVVBfQlJPQURDQVNUOgorICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU3Rvcm1GaWx0ZXJFeHRCcm9hZGNhc3RFbmFibGUoKHJ0a191aW50MzIgKilwRW5hYmxlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19yYXRlX3N0b3JtQ29udHJvbEV4dE1ldGVySWR4X3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBleHRlcm5zaW9uIHN0b3JtIGNvbnRyb2wgbWV0ZXIgaW5kZXgKKyAqIElucHV0OgorICogICAgICBzdG9ybVR5cGUgICAtIHN0b3JtIGdyb3VwIHR5cGUKKyAqICAgICAgaW5kZXggICAgICAgLSBleHRlcm5zaW9uIHN0b3JtIGNvbnRyb2wgc3RhdGUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfTk9UX0lOSVQgICAgICAgICAgLSBUaGUgbW9kdWxlIGlzIG5vdCBpbml0aWFsCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICAtIGludmFsaWQgaW5wdXQgcGFyYW1ldGVyCisgKiBOb3RlOgorICoKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfcmF0ZV9zdG9ybUNvbnRyb2xFeHRNZXRlcklkeF9zZXQocnRrX3JhdGVfc3Rvcm1fZ3JvdXBfdCBzdG9ybVR5cGUsIHJ0a191aW50MzIgaW5kZXgpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKHN0b3JtVHlwZSA+PSBTVE9STV9HUk9VUF9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfU0ZDX1VOS05PV05fR1JPVVA7CisKKyAgICBpZiAoaW5kZXggPiBSVEtfTUFYX01FVEVSX0lEKQorICAgICAgICByZXR1cm4gUlRfRVJSX0ZJTFRFUl9NRVRFUl9JRDsKKworICAgIHN3aXRjaCAoc3Rvcm1UeXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBTVE9STV9HUk9VUF9VTktOT1dOX1VOSUNBU1Q6CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTdG9ybUZpbHRlckV4dFVua25vd25VbmljYXN0TWV0ZXIoaW5kZXgpKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVE9STV9HUk9VUF9VTktOT1dOX01VTFRJQ0FTVDoKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1N0b3JtRmlsdGVyRXh0VW5rbm93bk11bHRpY2FzdE1ldGVyKGluZGV4KSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RPUk1fR1JPVVBfTVVMVElDQVNUOgorICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU3Rvcm1GaWx0ZXJFeHRNdWx0aWNhc3RNZXRlcihpbmRleCkpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNUT1JNX0dST1VQX0JST0FEQ0FTVDoKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1N0b3JtRmlsdGVyRXh0QnJvYWRjYXN0TWV0ZXIoaW5kZXgpKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19yYXRlX3N0b3JtQ29udHJvbEV4dE1ldGVySWR4X2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBleHRlcm5zaW9uIHN0b3JtIGNvbnRyb2wgbWV0ZXIgaW5kZXgKKyAqIElucHV0OgorICogICAgICBzdG9ybVR5cGUgICAtIHN0b3JtIGdyb3VwIHR5cGUKKyAqICAgICAgcEluZGV4ICAgICAgLSBleHRlcm5zaW9uIHN0b3JtIGNvbnRyb2wgc3RhdGUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfTk9UX0lOSVQgICAgICAgICAgLSBUaGUgbW9kdWxlIGlzIG5vdCBpbml0aWFsCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICAtIGludmFsaWQgaW5wdXQgcGFyYW1ldGVyCisgKiBOb3RlOgorICoKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfcmF0ZV9zdG9ybUNvbnRyb2xFeHRNZXRlcklkeF9nZXQocnRrX3JhdGVfc3Rvcm1fZ3JvdXBfdCBzdG9ybVR5cGUsIHJ0a191aW50MzIgKnBJbmRleCkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAoc3Rvcm1UeXBlID49IFNUT1JNX0dST1VQX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9TRkNfVU5LTk9XTl9HUk9VUDsKKworICAgIGlmKE5VTEwgPT0gcEluZGV4KQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIHN3aXRjaCAoc3Rvcm1UeXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBTVE9STV9HUk9VUF9VTktOT1dOX1VOSUNBU1Q6CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTdG9ybUZpbHRlckV4dFVua25vd25VbmljYXN0TWV0ZXIocEluZGV4KSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RPUk1fR1JPVVBfVU5LTk9XTl9NVUxUSUNBU1Q6CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTdG9ybUZpbHRlckV4dFVua25vd25NdWx0aWNhc3RNZXRlcihwSW5kZXgpKSE9UlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVE9STV9HUk9VUF9NVUxUSUNBU1Q6CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTdG9ybUZpbHRlckV4dE11bHRpY2FzdE1ldGVyKHBJbmRleCkpIT1SVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNUT1JNX0dST1VQX0JST0FEQ0FTVDoKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1N0b3JtRmlsdGVyRXh0QnJvYWRjYXN0TWV0ZXIocEluZGV4KSkhPVJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2Mvc3ZsYW4uYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy9zdmxhbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNGVmMDQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2Mvc3ZsYW4uYwpAQCAtMCwwICsxLDI0MTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogJFJldmlzaW9uOiA3NjMwNiAkCisgKiAkRGF0ZTogMjAxNy0wMy0wOCAxNToxMzo1OCArMDgwMCAo6YCx5LiJLCAwOCDkuInmnIggMjAxNykgJAorICoKKyAqIFB1cnBvc2UgOiBSVEsgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJIGZvciBSVEw4MzY3L1JUTDgzNjdDCisgKiBGZWF0dXJlIDogSGVyZSBpcyBhIGxpc3Qgb2YgYWxsIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIGluIFNWTEFOIG1vZHVsZS4KKyAqCisgKi8KKworI2luY2x1ZGUgPHJ0a19zd2l0Y2guaD4KKyNpbmNsdWRlIDxydGtfZXJyb3IuaD4KKyNpbmNsdWRlIDxzdmxhbi5oPgorI2luY2x1ZGUgPHZsYW4uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnYuaD4KKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2X3N2bGFuLmg+CisKK3J0a191aW50OCAgICAgICAgICAgICAgIHN2bGFuX21ickNmZ1VzYWdlW1JUTDgzNjdDX1NWSURYTk9dOworcnRrX3VpbnQxNiAgICAgICAgICAgICAgc3ZsYW5fbWJyQ2ZnVmlkW1JUTDgzNjdDX1NWSURYTk9dOworcnRrX3N2bGFuX2xvb2t1cFR5cGVfdCAgc3ZsYW5fbG9va3VwVHlwZTsKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdmxhbl9pbml0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgSW5pdGlhbGl6ZSBTVkxBTiBDb25maWd1cmF0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiBOb3RlOgorICogICAgICBFdGhlciB0eXBlIG9mIFMtdGFnIGluIDgwMi4xYWQgaXMgMHg4OGE4IGFuZCB0aGVyZSBhcmUgZXhpc3RlZCBldGhlciB0eXBlIDB4OTEwMCBhbmQgMHg5MjAwIGZvciBRLWluLVEgU0xBTiBkZXNpZ24uCisgKiAgICAgIFVzZXIgY2FuIHNldCBtYXRoY2VkIGV0aGVyIHR5cGUgYXMgc2VydmljZSBwcm92aWRlciBzdXBwb3J0ZWQgcHJvdG9jb2wuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3N2bGFuX2luaXQodm9pZCkKK3sKKyAgICBydGtfdWludDMyIGk7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRsODM2N2Nfc3ZsYW5fbWVtY29uZl90IHN2bGFuTWVtQ29uZjsKKyAgICBydGw4MzY3Y19zdmxhbl9zMmNfdCBzdmxhblNQMkNDb25mOworICAgIHJ0bDgzNjdjX3N2bGFuX21jMnNfdCBzdmxhbk1DMlNDb25mOworICAgIHJ0a191aW50MzIgc3ZpZHg7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLypkZWZhdWx0IHVzZSBDLXByaW9yaXR5Ki8KKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTdmxhblByaW9yaXR5U2VsKFNQUklTRUxfQ1RBR1BSSSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIC8qRHJvcCBTVkxBTiB1bnRhZyBmcmFtZSovCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU3ZsYW5JbmdyZXNzVW50YWcoVU5UQUdfRFJPUCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIC8qRHJvcCBTVkxBTiB1bm1hdGNoIGZyYW1lKi8KKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTdmxhbkluZ3Jlc3NVbm1hdGNoKFVOTUFUQ0hfRFJPUCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIC8qU2V0IFRQSUQgdG8gMHg4OGE4Ki8KKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTdmxhblRwaWQoMHg4OGE4KSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgLypDbGVhbiBVcGxpbmsgUG9ydCBNYXNrIHRvIG5vbmUqLworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1N2bGFuVXBsaW5rUG9ydE1hc2soMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIC8qQ2xlYW4gU1ZMQU4gTWVtYmVyIENvbmZpZ3VyYXRpb24qLworICAgIGZvciAoaT0wOyBpPD0gUlRMODM2N0NfU1ZJRFhNQVg7IGkrKykKKyAgICB7CisgICAgICAgIG1lbXNldCgmc3ZsYW5NZW1Db25mLCAwLCBzaXplb2YocnRsODM2N2Nfc3ZsYW5fbWVtY29uZl90KSk7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1N2bGFuTWVtYmVyQ29uZmlndXJhdGlvbihpLCAmc3ZsYW5NZW1Db25mKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisKKyAgICAvKkNsZWFuIEMyUyBDb25maWd1cmF0aW9uKi8KKyAgICBmb3IgKGk9MDsgaTw9IFJUTDgzNjdDX0MyU0lEWE1BWDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU3ZsYW5DMlNDb25mKGksIDAsMCwwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisKKyAgICAvKkNsZWFuIFNQMkMgQ29uZmlndXJhdGlvbiovCisgICAgZm9yIChpPTA7IGkgPD0gUlRMODM2N0NfU1AyQ01BWCA7IGkrKykKKyAgICB7CisgICAgICAgIG1lbXNldCgmc3ZsYW5TUDJDQ29uZiwgMCwgc2l6ZW9mKHJ0bDgzNjdjX3N2bGFuX3MyY190KSk7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1N2bGFuU1AyQ0NvbmYoaSwgJnN2bGFuU1AyQ0NvbmYpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKworICAgIC8qQ2xlYW4gTUMyUyBDb25maWd1cmF0aW9uKi8KKyAgICBmb3IgKGk9MCA7IGk8PSBSVEw4MzY3Q19NQzJTSURYTUFYOyBpKyspCisgICAgeworICAgICAgICBtZW1zZXQoJnN2bGFuTUMyU0NvbmYsIDAsIHNpemVvZihydGw4MzY3Y19zdmxhbl9tYzJzX3QpKTsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU3ZsYW5NQzJTQ29uZihpLCAmc3ZsYW5NQzJTQ29uZikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorCisKKyAgICBpZiAoKHJldFZhbCA9IHJ0a19zdmxhbl9sb29rdXBUeXBlX3NldChTVkxBTl9MT09LVVBfUzY0TUJSQ0dGKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisKKyAgICBmb3IgKHN2aWR4ID0gMDsgc3ZpZHggPD0gUlRMODM2N0NfU1ZJRFhNQVg7IHN2aWR4KyspCisgICAgeworICAgICAgICBzdmxhbl9tYnJDZmdVc2FnZVtzdmlkeF0gPSBGQUxTRTsKKyAgICB9CisKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdmxhbl9zZXJ2aWNlUG9ydF9hZGQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBBZGQgb25lIHNlcnZpY2UgcG9ydCBpbiB0aGUgc3BlY2lmaWVkIGRldmljZQorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBQb3J0IGlkLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgaXMgc2V0dGluZyB3aGljaCBwb3J0IGlzIGNvbm5lY3RlZCB0byBwcm92aWRlciBzd2l0Y2guIEFsbCBmcmFtZXMgcmVjZWl2aW5nIGZyb20gdGhpcyBwb3J0IG11c3QKKyAqICAgICAgY29udGFpbiBhY2NlcHQgU1ZJRCBpbiBTLXRhZyBmaWVsZC4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfc3ZsYW5fc2VydmljZVBvcnRfYWRkKHJ0a19wb3J0X3QgcG9ydCkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHBtc2s7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogY2hlY2sgcG9ydCB2YWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwb3J0KTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1N2bGFuVXBsaW5rUG9ydE1hc2soJnBtc2spKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBwbXNrID0gcG1zayB8ICgxPDxydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSk7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTdmxhblVwbGlua1BvcnRNYXNrKHBtc2spKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3ZsYW5fc2VydmljZVBvcnRfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHNlcnZpY2UgcG9ydHMgaW4gdGhlIHNwZWNpZmllZCBkZXZpY2UuCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwU3ZsYW5fcG9ydG1hc2sgLSBwb2ludGVyIGJ1ZmZlciBvZiBzdmxhbiBwb3J0cy4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGlzIHNldHRpbmcgd2hpY2ggcG9ydCBpcyBjb25uZWN0ZWQgdG8gcHJvdmlkZXIgc3dpdGNoLiBBbGwgZnJhbWVzIHJlY2VpdmluZyBmcm9tIHRoaXMgcG9ydCBtdXN0CisgKiAgICAgIGNvbnRhaW4gYWNjZXB0IFNWSUQgaW4gUy10YWcgZmllbGQuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3N2bGFuX3NlcnZpY2VQb3J0X2dldChydGtfcG9ydG1hc2tfdCAqcFN2bGFuX3BvcnRtYXNrKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcGh5TWJyUG1hc2s7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoTlVMTCA9PSBwU3ZsYW5fcG9ydG1hc2spCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU3ZsYW5VcGxpbmtQb3J0TWFzaygmcGh5TWJyUG1hc2spKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZihydGtfc3dpdGNoX3BvcnRtYXNrX1AyTF9nZXQocGh5TWJyUG1hc2ssIHBTdmxhbl9wb3J0bWFzaykgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKKworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N2bGFuX3NlcnZpY2VQb3J0X2RlbAorICogRGVzY3JpcHRpb246CisgKiAgICAgIERlbGV0ZSBvbmUgc2VydmljZSBwb3J0IGluIHRoZSBzcGVjaWZpZWQgZGV2aWNlCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBpcyByZW1vdmluZyBTVkxBTiBzZXJ2aWNlIHBvcnQgaW4gdGhlIHNwZWNpZmllZCBkZXZpY2UuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3N2bGFuX3NlcnZpY2VQb3J0X2RlbChydGtfcG9ydF90IHBvcnQpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBwbXNrOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIGNoZWNrIHBvcnQgdmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQocG9ydCk7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTdmxhblVwbGlua1BvcnRNYXNrKCZwbXNrKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcG1zayA9IHBtc2sgJiB+KDE8PHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpKTsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1N2bGFuVXBsaW5rUG9ydE1hc2socG1zaykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdmxhbl90cGlkRW50cnlfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQ29uZmlndXJlIGFjY2VwdGVkIFMtVkxBTiBldGhlciB0eXBlLgorICogSW5wdXQ6CisgKiAgICAgIHN2bGFuX3RhZ19pZCAtIEV0aGVyIHR5cGUgb2YgUy10YWcgZnJhbWUgcGFyc2luZyBpbiB1cGxpbmsgcG9ydHMuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVyLgorICogTm90ZToKKyAqICAgICAgRXRoZXIgdHlwZSBvZiBTLXRhZyBpbiA4MDIuMWFkIGlzIDB4ODhhOCBhbmQgdGhlcmUgYXJlIGV4aXN0ZWQgZXRoZXIgdHlwZSAweDkxMDAgYW5kIDB4OTIwMCBmb3IgUS1pbi1RIFNMQU4gZGVzaWduLgorICogICAgICBVc2VyIGNhbiBzZXQgbWF0aGNlZCBldGhlciB0eXBlIGFzIHNlcnZpY2UgcHJvdmlkZXIgc3VwcG9ydGVkIHByb3RvY29sLgorICovCitydGtfYXBpX3JldF90IHJ0a19zdmxhbl90cGlkRW50cnlfc2V0KHJ0a19zdmxhbl90cGlkX3Qgc3ZsYW5fdGFnX2lkKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmIChzdmxhbl90YWdfaWQ+UlRLX01BWF9OVU1fT0ZfUFJPVE9fVFlQRSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1N2bGFuVHBpZChzdmxhbl90YWdfaWQpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3ZsYW5fdHBpZEVudHJ5X2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBhY2NlcHRlZCBTLVZMQU4gZXRoZXIgdHlwZSBzZXR0aW5nLgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcFN2bGFuX3RhZ19pZCAtICBFdGhlciB0eXBlIG9mIFMtdGFnIGZyYW1lIHBhcnNpbmcgaW4gdXBsaW5rIHBvcnRzLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgaXMgc2V0dGluZyB3aGljaCBwb3J0IGlzIGNvbm5lY3RlZCB0byBwcm92aWRlciBzd2l0Y2guIEFsbCBmcmFtZXMgcmVjZWl2aW5nIGZyb20gdGhpcyBwb3J0IG11c3QKKyAqICAgICAgY29udGFpbiBhY2NlcHQgU1ZJRCBpbiBTLXRhZyBmaWVsZC4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfc3ZsYW5fdHBpZEVudHJ5X2dldChydGtfc3ZsYW5fdHBpZF90ICpwU3ZsYW5fdGFnX2lkKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKE5VTEwgPT0gcFN2bGFuX3RhZ19pZCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTdmxhblRwaWQocFN2bGFuX3RhZ19pZCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdmxhbl9wcmlvcml0eVJlZl9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgUy1WTEFOIHVwc3RyZWFtIHByaW9yaXR5IHJlZmVyZW5jZSBzZXR0aW5nLgorICogSW5wdXQ6CisgKiAgICAgIHJlZiAtIHJlZmVyZW5jZSBzZWxlY3Rpb24gcGFyYW1ldGVyLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlci4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIHNldCB0aGUgdXBzdHJlYW0gU1ZMQU4gdGFnIHByaW9yaXR5IHJlZmVyZW5jZSBzb3VyY2UuIFRoZSByZWxhdGVkIHByaW9yaXR5CisgKiAgICAgIHNvdXJjZXMgYXJlIGFzIGZvbGxvd2luZzoKKyAqICAgICAgLSBSRUZfSU5URVJOQUxfUFJJLAorICogICAgICAtIFJFRl9DVEFHX1BSSSwKKyAqICAgICAgLSBSRUZfU1ZMQU5fUFJJLAorICogICAgICAtIFJFRl9QQl9QUkkuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3N2bGFuX3ByaW9yaXR5UmVmX3NldChydGtfc3ZsYW5fcHJpX3JlZl90IHJlZikKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAocmVmID49IFJFRl9QUklfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU3ZsYW5Qcmlvcml0eVNlbChyZWYpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3ZsYW5fcHJpb3JpdHlSZWZfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFMtVkxBTiB1cHN0cmVhbSBwcmlvcml0eSByZWZlcmVuY2Ugc2V0dGluZy4KKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBSZWYgLSByZWZlcmVuY2Ugc2VsZWN0aW9uIHBhcmFtZXRlci4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGdldCB0aGUgdXBzdHJlYW0gU1ZMQU4gdGFnIHByaW9yaXR5IHJlZmVyZW5jZSBzb3VyY2UuIFRoZSByZWxhdGVkIHByaW9yaXR5CisgKiAgICAgIHNvdXJjZXMgYXJlIGFzIGZvbGxvd2luZzoKKyAqICAgICAgLSBSRUZfSU5URVJOQUxfUFJJLAorICogICAgICAtIFJFRl9DVEFHX1BSSSwKKyAqICAgICAgLSBSRUZfU1ZMQU5fUFJJLAorICogICAgICAtIFJFRl9QQl9QUkkKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfc3ZsYW5fcHJpb3JpdHlSZWZfZ2V0KHJ0a19zdmxhbl9wcmlfcmVmX3QgKnBSZWYpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoTlVMTCA9PSBwUmVmKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1N2bGFuUHJpb3JpdHlTZWwocFJlZikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdmxhbl9tZW1iZXJQb3J0RW50cnlfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQ29uZmlndXJlIHN5c3RlbSBTVkxBTiBtZW1iZXIgY29udGVudAorICogSW5wdXQ6CisgKiAgICAgIHN2aWQgLSBTVkxBTiBpZAorICogICAgICBwc3ZsYW5fY2ZnIC0gU1ZMQU4gbWVtYmVyIGNvbmZpZ3VyYXRpb24KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVyLgorICogICAgICBSVF9FUlJfU1ZMQU5fVklEICAgICAgICAtIEludmFsaWQgU1ZMQU4gVklEIHBhcmFtZXRlci4KKyAqICAgICAgUlRfRVJSX1BPUlRfTUFTSyAgICAgICAgLSBJbnZhbGlkIHBvcnRtYXNrLgorICogICAgICBSVF9FUlJfU1ZMQU5fVEFCTEVfRlVMTCAtIFNWTEFOIGNvbmZpZ3VyYXRpb24gaXMgZnVsbC4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIHNldCBzeXN0ZW0gNjQgYWNjZXB0ZWQgcy10YWcgZnJhbWUgZm9ybWF0LiBPbmx5IDY0IFNWSUQgUy10YWcgZnJhbWUgd2lsbCBiZSBhY2NwZXRlZAorICogICAgICB0byByZWNlaXZpbmcgZnJvbSB1cGxpbmsgcG9ydHMuIE90aGVyIFNWSUQgUy10YWcgZnJhbWUgb3IgUy11bnRhZ2dlZCBmcmFtZSB3aWxsIGJlIGRyb3BlZCBieSBkZWZhdWx0IHNldHVwLgorICogICAgICAtIHJ0a19zdmxhbl9tZW1iZXJDZmdfdC0+c3ZpZCBpcyBTVklEIG9mIFNWTEFOIG1lbWJlciBjb25maWd1cmF0aW9uLgorICogICAgICAtIHJ0a19zdmxhbl9tZW1iZXJDZmdfdC0+bWVtYmVycG9ydCBpcyBtZW1iZXIgcG9ydCBtYXNrIG9mIFNWTEFOIG1lbWJlciBjb25maWd1cmF0aW9uLgorICogICAgICAtIHJ0a19zdmxhbl9tZW1iZXJDZmdfdC0+ZmlkIGlzIGZpbHRlcmluZyBkYXRhYmFzZSBvZiBTVkxBTiBtZW1iZXIgY29uZmlndXJhdGlvbi4KKyAqICAgICAgLSBydGtfc3ZsYW5fbWVtYmVyQ2ZnX3QtPnByaW9yaXR5IGlzIHByaW9yaXR5IG9mIFNWTEFOIG1lbWJlciBjb25maWd1cmF0aW9uLgorICovCitydGtfYXBpX3JldF90IHJ0a19zdmxhbl9tZW1iZXJQb3J0RW50cnlfc2V0KHJ0a192bGFuX3Qgc3ZpZCwgcnRrX3N2bGFuX21lbWJlckNmZ190ICpwU3ZsYW5fY2ZnKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a19pbnQzMiBpOworICAgIHJ0a191aW50MzIgZW1wdHlfaWR4OworICAgIHJ0bDgzNjdjX3N2bGFuX21lbWNvbmZfdCBzdmxhbk1lbUNvbmY7CisgICAgcnRrX3VpbnQzMiBwaHlNYnJQbWFzazsKKyAgICBydGtfdmxhbl9jZmdfdCB2bGFuQ2ZnOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKE5VTEwgPT0gcFN2bGFuX2NmZykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZihzdmlkID4gUlRMODM2N0NfVklETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1NWTEFOX1ZJRDsKKworICAgIFJUS19DSEtfUE9SVE1BU0tfVkFMSUQoJihwU3ZsYW5fY2ZnLT5tZW1iZXJwb3J0KSk7CisKKyAgICBSVEtfQ0hLX1BPUlRNQVNLX1ZBTElEKCYocFN2bGFuX2NmZy0+dW50YWdwb3J0KSk7CisKKyAgICBpZiAocFN2bGFuX2NmZy0+ZmlkZW4gPiBFTkFCTEVEKQorICAgICAgICByZXR1cm4gUlRfRVJSX0VOQUJMRTsKKworICAgIGlmIChwU3ZsYW5fY2ZnLT5maWQgPiBSVEw4MzY3Q19GSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfTDJfRklEOworCisgICAgaWYgKHBTdmxhbl9jZmctPnByaW9yaXR5ID4gUlRMODM2N0NfUFJJTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1ZMQU5fUFJJT1JJVFk7CisKKyAgICBpZiAocFN2bGFuX2NmZy0+ZWZpZGVuID4gRU5BQkxFRCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9FTkFCTEU7CisKKyAgICBpZiAocFN2bGFuX2NmZy0+ZWZpZCA+IFJUTDgzNjdDX0VGSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfTDJfRklEOworCisgICAgaWYoU1ZMQU5fTE9PS1VQX0M0S1ZMQU4gPT0gc3ZsYW5fbG9va3VwVHlwZSkKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRrX3ZsYW5fZ2V0KHN2aWQsICZ2bGFuQ2ZnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICB2bGFuQ2ZnLm1iciA9IHBTdmxhbl9jZmctPm1lbWJlcnBvcnQ7CisgICAgICAgIHZsYW5DZmcudW50YWcgPSBwU3ZsYW5fY2ZnLT51bnRhZ3BvcnQ7CisKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGtfdmxhbl9zZXQoc3ZpZCwgJnZsYW5DZmcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIGVtcHR5X2lkeCA9IDB4RkY7CisKKyAgICAgICAgZm9yIChpID0gMDsgaTw9IFJUTDgzNjdDX1NWSURYTUFYOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzdmlkID09IHN2bGFuX21ickNmZ1ZpZFtpXSAmJiBUUlVFID09IHN2bGFuX21ickNmZ1VzYWdlW2ldKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1lbXNldCgmc3ZsYW5NZW1Db25mLCAwLCBzaXplb2YocnRsODM2N2Nfc3ZsYW5fbWVtY29uZl90KSk7CisgICAgICAgICAgICAgICAgc3ZsYW5NZW1Db25mLnZzX3N2aWQgICAgICAgID0gc3ZpZDsKKyAgICAgICAgICAgICAgICBzdmxhbk1lbUNvbmYudnNfZWZpZGVuICAgICAgPSBwU3ZsYW5fY2ZnLT5lZmlkZW47CisgICAgICAgICAgICAgICAgc3ZsYW5NZW1Db25mLnZzX2VmaWQgICAgICAgID0gcFN2bGFuX2NmZy0+ZWZpZDsKKyAgICAgICAgICAgICAgICBzdmxhbk1lbUNvbmYudnNfcHJpb3JpdHkgICAgPSBwU3ZsYW5fY2ZnLT5wcmlvcml0eTsKKworICAgICAgICAgICAgICAgIC8qZm9yIGNyZWF0ZSBjaGVjayovCisgICAgICAgICAgICAgICAgaWYoMCA9PSBzdmxhbk1lbUNvbmYudnNfZWZpZGVuICYmIDAgPT0gc3ZsYW5NZW1Db25mLnZzX2VmaWQpCisgICAgICAgICAgICAgICAgICAgIHN2bGFuTWVtQ29uZi52c19lZmlkID0gMTsKKworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1N2bGFuTWVtYmVyQ29uZmlndXJhdGlvbihpLCAmc3ZsYW5NZW1Db25mKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9PSzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKEZBTFNFID09IHN2bGFuX21ickNmZ1VzYWdlW2ldICYmIDB4RkYgPT0gZW1wdHlfaWR4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVtcHR5X2lkeCA9IGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoZW1wdHlfaWR4ICE9IDB4RkYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN2bGFuX21ickNmZ1VzYWdlW2VtcHR5X2lkeF0gPSBUUlVFOworICAgICAgICAgICAgc3ZsYW5fbWJyQ2ZnVmlkW2VtcHR5X2lkeF0gPSBzdmlkOworCisgICAgICAgICAgICBtZW1zZXQoJnN2bGFuTWVtQ29uZiwgMCwgc2l6ZW9mKHJ0bDgzNjdjX3N2bGFuX21lbWNvbmZfdCkpOworICAgICAgICAgICAgc3ZsYW5NZW1Db25mLnZzX3N2aWQgICAgICAgID0gc3ZpZDsKKyAgICAgICAgICAgIHN2bGFuTWVtQ29uZi52c19lZmlkZW4gICAgICA9IHBTdmxhbl9jZmctPmVmaWRlbjsKKyAgICAgICAgICAgIHN2bGFuTWVtQ29uZi52c19lZmlkICAgICAgICA9IHBTdmxhbl9jZmctPmVmaWQ7CisgICAgICAgICAgICBzdmxhbk1lbUNvbmYudnNfcHJpb3JpdHkgICAgPSBwU3ZsYW5fY2ZnLT5wcmlvcml0eTsKKworICAgICAgICAgICAgLypmb3IgY3JlYXRlIGNoZWNrKi8KKyAgICAgICAgICAgIGlmKDAgPT0gc3ZsYW5NZW1Db25mLnZzX2VmaWRlbiAmJiAwID09IHN2bGFuTWVtQ29uZi52c19lZmlkKQorICAgICAgICAgICAgICAgIHN2bGFuTWVtQ29uZi52c19lZmlkID0gMTsKKworICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU3ZsYW5NZW1iZXJDb25maWd1cmF0aW9uKGVtcHR5X2lkeCwgJnN2bGFuTWVtQ29uZikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gUlRfRVJSX09LOworICAgIH0KKworCisgICAgZW1wdHlfaWR4ID0gMHhGRjsKKworICAgIGZvciAoaSA9IDA7IGk8PSBSVEw4MzY3Q19TVklEWE1BWDsgaSsrKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU3ZsYW5NZW1iZXJDb25maWd1cmF0aW9uKGksICZzdmxhbk1lbUNvbmYpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAqLworICAgICAgICBpZiAoc3ZpZCA9PSBzdmxhbl9tYnJDZmdWaWRbaV0gJiYgVFJVRSA9PSBzdmxhbl9tYnJDZmdVc2FnZVtpXSkKKyAgICAgICAgeworICAgICAgICAgICAgc3ZsYW5NZW1Db25mLnZzX3N2aWQgPSBzdmlkOworCisgICAgICAgICAgICBpZihydGtfc3dpdGNoX3BvcnRtYXNrX0wyUF9nZXQoJihwU3ZsYW5fY2ZnLT5tZW1iZXJwb3J0KSwgJnBoeU1iclBtYXNrKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9GQUlMRUQ7CisKKyAgICAgICAgICAgIHN2bGFuTWVtQ29uZi52c19tZW1iZXIgPSBwaHlNYnJQbWFzazsKKworICAgICAgICAgICAgaWYocnRrX3N3aXRjaF9wb3J0bWFza19MMlBfZ2V0KCYocFN2bGFuX2NmZy0+dW50YWdwb3J0KSwgJnBoeU1iclBtYXNrKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9GQUlMRUQ7CisKKyAgICAgICAgICAgIHN2bGFuTWVtQ29uZi52c191bnRhZyA9IHBoeU1iclBtYXNrOworCisgICAgICAgICAgICBzdmxhbk1lbUNvbmYudnNfZm9yY2VfZmlkICAgPSBwU3ZsYW5fY2ZnLT5maWRlbjsKKyAgICAgICAgICAgIHN2bGFuTWVtQ29uZi52c19maWRfbXN0aSAgICA9IHBTdmxhbl9jZmctPmZpZDsKKyAgICAgICAgICAgIHN2bGFuTWVtQ29uZi52c19wcmlvcml0eSAgICA9IHBTdmxhbl9jZmctPnByaW9yaXR5OworICAgICAgICAgICAgc3ZsYW5NZW1Db25mLnZzX2VmaWRlbiAgICAgID0gcFN2bGFuX2NmZy0+ZWZpZGVuOworICAgICAgICAgICAgc3ZsYW5NZW1Db25mLnZzX2VmaWQgICAgICAgID0gcFN2bGFuX2NmZy0+ZWZpZDsKKworICAgICAgICAgICAgLyphbGwgaXRlbXMgYXJlIHJlc2V0IG1lYW5zIGRlbGV0aW5nKi8KKyAgICAgICAgICAgIGlmKCAwID09IHN2bGFuTWVtQ29uZi52c19tZW1iZXIgJiYKKyAgICAgICAgICAgICAgICAwID09IHN2bGFuTWVtQ29uZi52c191bnRhZyAmJgorICAgICAgICAgICAgICAgIDAgPT0gc3ZsYW5NZW1Db25mLnZzX2ZvcmNlX2ZpZCAmJgorICAgICAgICAgICAgICAgIDAgPT0gc3ZsYW5NZW1Db25mLnZzX2ZpZF9tc3RpICYmCisgICAgICAgICAgICAgICAgMCA9PSBzdmxhbk1lbUNvbmYudnNfcHJpb3JpdHkgJiYKKyAgICAgICAgICAgICAgICAwID09IHN2bGFuTWVtQ29uZi52c19lZmlkZW4gJiYKKyAgICAgICAgICAgICAgICAwID09IHN2bGFuTWVtQ29uZi52c19lZmlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN2bGFuX21ickNmZ1VzYWdlW2ldID0gRkFMU0U7CisgICAgICAgICAgICAgICAgc3ZsYW5fbWJyQ2ZnVmlkW2ldID0gMDsKKworICAgICAgICAgICAgICAgIC8qIENsZWFyIFNWSUQgYWxzbyAqLworICAgICAgICAgICAgICAgIHN2bGFuTWVtQ29uZi52c19zdmlkID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdmxhbl9tYnJDZmdVc2FnZVtpXSA9IFRSVUU7CisgICAgICAgICAgICAgICAgc3ZsYW5fbWJyQ2ZnVmlkW2ldID0gc3ZsYW5NZW1Db25mLnZzX3N2aWQ7CisKKyAgICAgICAgICAgICAgICBpZigwID09IHN2bGFuTWVtQ29uZi52c19zdmlkKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLypmb3IgY3JlYXRlIGNoZWNrKi8KKyAgICAgICAgICAgICAgICAgICAgaWYoMCA9PSBzdmxhbk1lbUNvbmYudnNfZWZpZGVuICYmIDAgPT0gc3ZsYW5NZW1Db25mLnZzX2VmaWQpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN2bGFuTWVtQ29uZi52c19lZmlkID0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU3ZsYW5NZW1iZXJDb25maWd1cmF0aW9uKGksICZzdmxhbk1lbUNvbmYpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9PSzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChGQUxTRSA9PSBzdmxhbl9tYnJDZmdVc2FnZVtpXSAmJiAweEZGID09IGVtcHR5X2lkeCkKKyAgICAgICAgeworICAgICAgICAgICAgZW1wdHlfaWR4ID0gaTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChlbXB0eV9pZHggIT0gMHhGRikKKyAgICB7CisgICAgICAgIG1lbXNldCgmc3ZsYW5NZW1Db25mLCAwLCBzaXplb2YocnRsODM2N2Nfc3ZsYW5fbWVtY29uZl90KSk7CisgICAgICAgIHN2bGFuTWVtQ29uZi52c19zdmlkID0gc3ZpZDsKKworICAgICAgICBpZihydGtfc3dpdGNoX3BvcnRtYXNrX0wyUF9nZXQoJihwU3ZsYW5fY2ZnLT5tZW1iZXJwb3J0KSwgJnBoeU1iclBtYXNrKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKKworICAgICAgICBzdmxhbk1lbUNvbmYudnNfbWVtYmVyID0gcGh5TWJyUG1hc2s7CisKKyAgICAgICAgaWYocnRrX3N3aXRjaF9wb3J0bWFza19MMlBfZ2V0KCYocFN2bGFuX2NmZy0+dW50YWdwb3J0KSwgJnBoeU1iclBtYXNrKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKKworICAgICAgICBzdmxhbk1lbUNvbmYudnNfdW50YWcgPSBwaHlNYnJQbWFzazsKKworICAgICAgICBzdmxhbk1lbUNvbmYudnNfZm9yY2VfZmlkICAgPSBwU3ZsYW5fY2ZnLT5maWRlbjsKKyAgICAgICAgc3ZsYW5NZW1Db25mLnZzX2ZpZF9tc3RpICAgID0gcFN2bGFuX2NmZy0+ZmlkOworICAgICAgICBzdmxhbk1lbUNvbmYudnNfcHJpb3JpdHkgICAgPSBwU3ZsYW5fY2ZnLT5wcmlvcml0eTsKKworICAgICAgICBzdmxhbk1lbUNvbmYudnNfZWZpZGVuICAgICAgPSBwU3ZsYW5fY2ZnLT5lZmlkZW47CisgICAgICAgIHN2bGFuTWVtQ29uZi52c19lZmlkICAgICAgICA9IHBTdmxhbl9jZmctPmVmaWQ7CisKKyAgICAgICAgLypjaGFuZ2UgZWZpZCBmb3IgZW1wdHkgc3ZpZCAwKi8KKyAgICAgICAgaWYoMCA9PSBzdmxhbk1lbUNvbmYudnNfc3ZpZCkKKyAgICAgICAgeyAgIC8qZm9yIGNyZWF0ZSBjaGVjayovCisgICAgICAgICAgICBpZigwID09IHN2bGFuTWVtQ29uZi52c19lZmlkZW4gJiYgMCA9PSBzdmxhbk1lbUNvbmYudnNfZWZpZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdmxhbk1lbUNvbmYudnNfZWZpZCA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBzdmxhbl9tYnJDZmdVc2FnZVtlbXB0eV9pZHhdID0gVFJVRTsKKyAgICAgICAgc3ZsYW5fbWJyQ2ZnVmlkW2VtcHR5X2lkeF0gPSBzdmxhbk1lbUNvbmYudnNfc3ZpZDsKKworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTdmxhbk1lbWJlckNvbmZpZ3VyYXRpb24oZW1wdHlfaWR4LCAmc3ZsYW5NZW1Db25mKSkgIT0gUlRfRVJSX09LKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PSzsKKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX1NWTEFOX1RBQkxFX0ZVTEw7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdmxhbl9tZW1iZXJQb3J0RW50cnlfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFNWTEFOIG1lbWJlciBDb25maWd1cmUuCisgKiBJbnB1dDoKKyAqICAgICAgc3ZpZCAtIFNWTEFOIGlkCisgKiBPdXRwdXQ6CisgKiAgICAgIHBTdmxhbl9jZmcgLSBTVkxBTiBtZW1iZXIgY29uZmlndXJhdGlvbgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfU1ZMQU5fRU5UUllfTk9UX0ZPVU5EICAgIC0gc3BlY2lmaWVkIHN2bGFuIGVudHJ5IG5vdCBmb3VuZC4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGdldCBzeXN0ZW0gNjQgYWNjZXB0ZWQgcy10YWcgZnJhbWUgZm9ybWF0LiBPbmx5IDY0IFNWSUQgUy10YWcgZnJhbWUgd2lsbCBiZSBhY2NwZXRlZAorICogICAgICB0byByZWNlaXZpbmcgZnJvbSB1cGxpbmsgcG9ydHMuIE90aGVyIFNWSUQgUy10YWcgZnJhbWUgb3IgUy11bnRhZ2dlZCBmcmFtZSB3aWxsIGJlIGRyb3BlZC4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfc3ZsYW5fbWVtYmVyUG9ydEVudHJ5X2dldChydGtfdmxhbl90IHN2aWQsIHJ0a19zdmxhbl9tZW1iZXJDZmdfdCAqcFN2bGFuX2NmZykKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIGk7CisgICAgcnRsODM2N2Nfc3ZsYW5fbWVtY29uZl90IHN2bGFuTWVtQ29uZjsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBTdmxhbl9jZmcpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKHN2aWQgPiBSVEw4MzY3Q19WSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfU1ZMQU5fVklEOworCisKKyAgICBmb3IgKGkgPSAwOyBpPD0gUlRMODM2N0NfU1ZJRFhNQVg7IGkrKykKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1N2bGFuTWVtYmVyQ29uZmlndXJhdGlvbihpLCAmc3ZsYW5NZW1Db25mKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZiAoc3ZpZCA9PSBzdmxhbk1lbUNvbmYudnNfc3ZpZCkKKyAgICAgICAgeworICAgICAgICAgICAgcFN2bGFuX2NmZy0+c3ZpZCAgICAgICAgPSBzdmxhbk1lbUNvbmYudnNfc3ZpZDsKKworICAgICAgICAgICAgaWYocnRrX3N3aXRjaF9wb3J0bWFza19QMkxfZ2V0KHN2bGFuTWVtQ29uZi52c19tZW1iZXIsJihwU3ZsYW5fY2ZnLT5tZW1iZXJwb3J0KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiBSVF9FUlJfRkFJTEVEOworCisgICAgICAgICAgICBpZihydGtfc3dpdGNoX3BvcnRtYXNrX1AyTF9nZXQoc3ZsYW5NZW1Db25mLnZzX3VudGFnLCYocFN2bGFuX2NmZy0+dW50YWdwb3J0KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiBSVF9FUlJfRkFJTEVEOworCisgICAgICAgICAgICBwU3ZsYW5fY2ZnLT5maWRlbiAgICAgICA9IHN2bGFuTWVtQ29uZi52c19mb3JjZV9maWQ7CisgICAgICAgICAgICBwU3ZsYW5fY2ZnLT5maWQgICAgICAgICA9IHN2bGFuTWVtQ29uZi52c19maWRfbXN0aTsKKyAgICAgICAgICAgIHBTdmxhbl9jZmctPnByaW9yaXR5ICAgID0gc3ZsYW5NZW1Db25mLnZzX3ByaW9yaXR5OworICAgICAgICAgICAgcFN2bGFuX2NmZy0+ZWZpZGVuICAgICAgPSBzdmxhbk1lbUNvbmYudnNfZWZpZGVuOworICAgICAgICAgICAgcFN2bGFuX2NmZy0+ZWZpZCAgICAgICAgPSBzdmxhbk1lbUNvbmYudnNfZWZpZDsKKworICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9PSzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfU1ZMQU5fRU5UUllfTk9UX0ZPVU5EOworCit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdmxhbl9tZW1iZXJQb3J0RW50cnlfYWR2X3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIENvbmZpZ3VyZSBzeXN0ZW0gU1ZMQU4gbWVtYmVyIGJ5IGluZGV4CisgKiBJbnB1dDoKKyAqICAgICAgaWR4ICAgICAgICAgLSBJbmRleCAoMCB+IDYzKQorICogICAgICBwc3ZsYW5fY2ZnICAtIFNWTEFOIG1lbWJlciBjb25maWd1cmF0aW9uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlci4KKyAqICAgICAgUlRfRVJSX1NWTEFOX1ZJRCAgICAgICAgLSBJbnZhbGlkIFNWTEFOIFZJRCBwYXJhbWV0ZXIuCisgKiAgICAgIFJUX0VSUl9QT1JUX01BU0sgICAgICAgIC0gSW52YWxpZCBwb3J0bWFzay4KKyAqICAgICAgUlRfRVJSX1NWTEFOX1RBQkxFX0ZVTEwgLSBTVkxBTiBjb25maWd1cmF0aW9uIGlzIGZ1bGwuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBzZXQgc3lzdGVtIDY0IGFjY2VwdGVkIHMtdGFnIGZyYW1lIGZvcm1hdCBieSBpbmRleC4KKyAqICAgICAgLSBydGtfc3ZsYW5fbWVtYmVyQ2ZnX3QtPnN2aWQgaXMgU1ZJRCBvZiBTVkxBTiBtZW1iZXIgY29uZmlndXJhdGlvbi4KKyAqICAgICAgLSBydGtfc3ZsYW5fbWVtYmVyQ2ZnX3QtPm1lbWJlcnBvcnQgaXMgbWVtYmVyIHBvcnQgbWFzayBvZiBTVkxBTiBtZW1iZXIgY29uZmlndXJhdGlvbi4KKyAqICAgICAgLSBydGtfc3ZsYW5fbWVtYmVyQ2ZnX3QtPmZpZCBpcyBmaWx0ZXJpbmcgZGF0YWJhc2Ugb2YgU1ZMQU4gbWVtYmVyIGNvbmZpZ3VyYXRpb24uCisgKiAgICAgIC0gcnRrX3N2bGFuX21lbWJlckNmZ190LT5wcmlvcml0eSBpcyBwcmlvcml0eSBvZiBTVkxBTiBtZW1iZXIgY29uZmlndXJhdGlvbi4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfc3ZsYW5fbWVtYmVyUG9ydEVudHJ5X2Fkdl9zZXQocnRrX3VpbnQzMiBpZHgsIHJ0a19zdmxhbl9tZW1iZXJDZmdfdCAqcFN2bGFuX2NmZykKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGw4MzY3Y19zdmxhbl9tZW1jb25mX3Qgc3ZsYW5NZW1Db25mOworICAgIHJ0a191aW50MzIgcGh5TWJyUG1hc2s7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoTlVMTCA9PSBwU3ZsYW5fY2ZnKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmIChpZHggPiBSVEw4MzY3Q19TVklEWE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9TVkxBTl9FTlRSWV9JTkRFWDsKKworICAgIGlmIChwU3ZsYW5fY2ZnLT5zdmlkPlJUTDgzNjdDX1ZJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9TVkxBTl9WSUQ7CisKKyAgICBSVEtfQ0hLX1BPUlRNQVNLX1ZBTElEKCYocFN2bGFuX2NmZy0+bWVtYmVycG9ydCkpOworCisgICAgUlRLX0NIS19QT1JUTUFTS19WQUxJRCgmKHBTdmxhbl9jZmctPnVudGFncG9ydCkpOworCisgICAgaWYgKHBTdmxhbl9jZmctPmZpZGVuID4gRU5BQkxFRCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9FTkFCTEU7CisKKyAgICBpZiAocFN2bGFuX2NmZy0+ZmlkID4gUlRMODM2N0NfRklETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX0wyX0ZJRDsKKworICAgIGlmIChwU3ZsYW5fY2ZnLT5wcmlvcml0eSA+IFJUTDgzNjdDX1BSSU1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9WTEFOX1BSSU9SSVRZOworCisgICAgaWYgKHBTdmxhbl9jZmctPmVmaWRlbiA+IEVOQUJMRUQpCisgICAgICAgIHJldHVybiBSVF9FUlJfRU5BQkxFOworCisgICAgaWYgKHBTdmxhbl9jZmctPmVmaWQgPiBSVEw4MzY3Q19FRklETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX0wyX0ZJRDsKKworICAgIG1lbXNldCgmc3ZsYW5NZW1Db25mLCAwLCBzaXplb2YocnRsODM2N2Nfc3ZsYW5fbWVtY29uZl90KSk7CisgICAgc3ZsYW5NZW1Db25mLnZzX3N2aWQgICAgICAgID0gcFN2bGFuX2NmZy0+c3ZpZDsKKyAgICBpZihydGtfc3dpdGNoX3BvcnRtYXNrX0wyUF9nZXQoJihwU3ZsYW5fY2ZnLT5tZW1iZXJwb3J0KSwgJnBoeU1iclBtYXNrKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiBSVF9FUlJfRkFJTEVEOworCisgICAgc3ZsYW5NZW1Db25mLnZzX21lbWJlciA9IHBoeU1iclBtYXNrOworCisgICAgaWYocnRrX3N3aXRjaF9wb3J0bWFza19MMlBfZ2V0KCYocFN2bGFuX2NmZy0+dW50YWdwb3J0KSwgJnBoeU1iclBtYXNrKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiBSVF9FUlJfRkFJTEVEOworCisgICAgc3ZsYW5NZW1Db25mLnZzX3VudGFnID0gcGh5TWJyUG1hc2s7CisKKworICAgIHN2bGFuTWVtQ29uZi52c19mb3JjZV9maWQgICA9IHBTdmxhbl9jZmctPmZpZGVuOworICAgIHN2bGFuTWVtQ29uZi52c19maWRfbXN0aSAgICA9IHBTdmxhbl9jZmctPmZpZDsKKyAgICBzdmxhbk1lbUNvbmYudnNfcHJpb3JpdHkgICAgPSBwU3ZsYW5fY2ZnLT5wcmlvcml0eTsKKyAgICBzdmxhbk1lbUNvbmYudnNfZWZpZGVuICAgICAgPSBwU3ZsYW5fY2ZnLT5lZmlkZW47CisgICAgc3ZsYW5NZW1Db25mLnZzX2VmaWQgICAgICAgID0gcFN2bGFuX2NmZy0+ZWZpZDsKKworICAgIGlmKDAgPT0gc3ZsYW5NZW1Db25mLnZzX3N2aWQgJiYKKyAgICAgICAgMCA9PSBzdmxhbk1lbUNvbmYudnNfbWVtYmVyICYmCisgICAgICAgIDAgPT0gc3ZsYW5NZW1Db25mLnZzX3VudGFnICYmCisgICAgICAgIDAgPT0gc3ZsYW5NZW1Db25mLnZzX2ZvcmNlX2ZpZCAmJgorICAgICAgICAwID09IHN2bGFuTWVtQ29uZi52c19maWRfbXN0aSAmJgorICAgICAgICAwID09IHN2bGFuTWVtQ29uZi52c19wcmlvcml0eSAmJgorICAgICAgICAwID09IHN2bGFuTWVtQ29uZi52c19lZmlkZW4gJiYKKyAgICAgICAgMCA9PSBzdmxhbk1lbUNvbmYudnNfZWZpZCkKKyAgICB7CisgICAgICAgIHN2bGFuX21ickNmZ1VzYWdlW2lkeF0gPSBGQUxTRTsKKyAgICAgICAgc3ZsYW5fbWJyQ2ZnVmlkW2lkeF0gPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzdmxhbl9tYnJDZmdVc2FnZVtpZHhdID0gVFJVRTsKKyAgICAgICAgc3ZsYW5fbWJyQ2ZnVmlkW2lkeF0gPSBzdmxhbk1lbUNvbmYudnNfc3ZpZDsKKyAgICB9CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTdmxhbk1lbWJlckNvbmZpZ3VyYXRpb24oaWR4LCAmc3ZsYW5NZW1Db25mKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3ZsYW5fbWVtYmVyUG9ydEVudHJ5X2Fkdl9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgU1ZMQU4gbWVtYmVyIENvbmZpZ3VyZSBieSBpbmRleC4KKyAqIElucHV0OgorICogICAgICBpZHggICAgICAgICAtIEluZGV4ICgwIH4gNjMpCisgKiBPdXRwdXQ6CisgKiAgICAgIHBTdmxhbl9jZmcgIC0gU1ZMQU4gbWVtYmVyIGNvbmZpZ3VyYXRpb24KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1NWTEFOX0VOVFJZX05PVF9GT1VORCAgICAtIHNwZWNpZmllZCBzdmxhbiBlbnRyeSBub3QgZm91bmQuCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBnZXQgc3lzdGVtIDY0IGFjY2VwdGVkIHMtdGFnIGZyYW1lIGZvcm1hdC4gT25seSA2NCBTVklEIFMtdGFnIGZyYW1lIHdpbGwgYmUgYWNjcGV0ZWQKKyAqICAgICAgdG8gcmVjZWl2aW5nIGZyb20gdXBsaW5rIHBvcnRzLiBPdGhlciBTVklEIFMtdGFnIGZyYW1lIG9yIFMtdW50YWdnZWQgZnJhbWUgd2lsbCBiZSBkcm9wZWQuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3N2bGFuX21lbWJlclBvcnRFbnRyeV9hZHZfZ2V0KHJ0a191aW50MzIgaWR4LCBydGtfc3ZsYW5fbWVtYmVyQ2ZnX3QgKnBTdmxhbl9jZmcpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRsODM2N2Nfc3ZsYW5fbWVtY29uZl90IHN2bGFuTWVtQ29uZjsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBTdmxhbl9jZmcpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKGlkeCA+IFJUTDgzNjdDX1NWSURYTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1NWTEFOX0VOVFJZX0lOREVYOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU3ZsYW5NZW1iZXJDb25maWd1cmF0aW9uKGlkeCwgJnN2bGFuTWVtQ29uZikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHBTdmxhbl9jZmctPnN2aWQgICAgICAgID0gc3ZsYW5NZW1Db25mLnZzX3N2aWQ7CisgICAgaWYocnRrX3N3aXRjaF9wb3J0bWFza19QMkxfZ2V0KHN2bGFuTWVtQ29uZi52c19tZW1iZXIsJihwU3ZsYW5fY2ZnLT5tZW1iZXJwb3J0KSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKKworICAgIGlmKHJ0a19zd2l0Y2hfcG9ydG1hc2tfUDJMX2dldChzdmxhbk1lbUNvbmYudnNfdW50YWcsJihwU3ZsYW5fY2ZnLT51bnRhZ3BvcnQpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiBSVF9FUlJfRkFJTEVEOworCisgICAgcFN2bGFuX2NmZy0+ZmlkZW4gICAgICAgPSBzdmxhbk1lbUNvbmYudnNfZm9yY2VfZmlkOworICAgIHBTdmxhbl9jZmctPmZpZCAgICAgICAgID0gc3ZsYW5NZW1Db25mLnZzX2ZpZF9tc3RpOworICAgIHBTdmxhbl9jZmctPnByaW9yaXR5ICAgID0gc3ZsYW5NZW1Db25mLnZzX3ByaW9yaXR5OworICAgIHBTdmxhbl9jZmctPmVmaWRlbiAgICAgID0gc3ZsYW5NZW1Db25mLnZzX2VmaWRlbjsKKyAgICBwU3ZsYW5fY2ZnLT5lZmlkICAgICAgICA9IHN2bGFuTWVtQ29uZi52c19lZmlkOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKKworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3ZsYW5fZGVmYXVsdFN2bGFuX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIENvbmZpZ3VyZSBkZWZhdWx0IGVncmVzcyBTVkxBTi4KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gU291cmNlIHBvcnQKKyAqICAgICAgc3ZpZCAtIFNWTEFOIGlkCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVyLgorICogICAgICBSVF9FUlJfU1ZMQU5fVklEICAgICAgICAgICAgICAgIC0gSW52YWxpZCBTVkxBTiBWSUQgcGFyYW1ldGVyLgorICogICAgICBSVF9FUlJfU1ZMQU5fRU5UUllfTk9UX0ZPVU5EICAgIC0gc3BlY2lmaWVkIHN2bGFuIGVudHJ5IG5vdCBmb3VuZC4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIHNldCBwb3J0IG4gUy10YWcgZm9ybWF0IGluZGV4IHdoaWxlIHJlY2VpdmluZyBmcmFtZSBmcm9tIHBvcnQgbgorICogICAgICBpcyB0cmFuc21pdCB0aHJvdWdoIHVwbGluayBwb3J0IHdpdGggcy10YWcgZmllbGQKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfc3ZsYW5fZGVmYXVsdFN2bGFuX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a192bGFuX3Qgc3ZpZCkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIGk7CisgICAgcnRsODM2N2Nfc3ZsYW5fbWVtY29uZl90IHN2bGFuTWVtQ29uZjsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBwb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgLyogc3ZpZCBtdXN0IGJlIDB+NDA5NSAqLworICAgIGlmIChzdmlkID4gUlRMODM2N0NfVklETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1NWTEFOX1ZJRDsKKworICAgIGZvciAoaSA9IDA7IGkgPCBSVEw4MzY3Q19TVklEWE5POyBpKyspCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTdmxhbk1lbWJlckNvbmZpZ3VyYXRpb24oaSwgJnN2bGFuTWVtQ29uZikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgaWYgKHN2aWQgPT0gc3ZsYW5NZW1Db25mLnZzX3N2aWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1N2bGFuRGVmYXVsdFZsYW4ocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIGkpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9PSzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfU1ZMQU5fRU5UUllfTk9UX0ZPVU5EOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3ZsYW5fZGVmYXVsdFN2bGFuX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCB0aGUgY29uZmlndXJlIGRlZmF1bHQgZWdyZXNzIFNWTEFOLgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBTb3VyY2UgcG9ydAorICogT3V0cHV0OgorICogICAgICBwU3ZpZCAtIFNWTEFOIFZJRAorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IHBvcnQgbiBTLXRhZyBmb3JtYXQgaW5kZXggd2hpbGUgcmVjZWl2aW5nIGZyYW1lIGZyb20gcG9ydCBuCisgKiAgICAgIGlzIHRyYW5zbWl0IHRocm91Z2ggdXBsaW5rIHBvcnQgd2l0aCBzLXRhZyBmaWVsZAorICovCitydGtfYXBpX3JldF90IHJ0a19zdmxhbl9kZWZhdWx0U3ZsYW5fZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3ZsYW5fdCAqcFN2aWQpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBpZHg7CisgICAgcnRsODM2N2Nfc3ZsYW5fbWVtY29uZl90IHN2bGFuTWVtQ29uZjsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBTdmlkKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIC8qIENoZWNrIHBvcnQgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQocG9ydCk7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTdmxhbkRlZmF1bHRWbGFuKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCAmaWR4KSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU3ZsYW5NZW1iZXJDb25maWd1cmF0aW9uKGlkeCwgJnN2bGFuTWVtQ29uZikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICpwU3ZpZCA9IHN2bGFuTWVtQ29uZi52c19zdmlkOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N2bGFuX2Myc19hZGQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBDb25maWd1cmUgU1ZMQU4gQzJTIHRhYmxlCisgKiBJbnB1dDoKKyAqICAgICAgdmlkIC0gVkxBTiBJRAorICogICAgICBzcmNfcG9ydCAtIEluZ3Jlc3MgUG9ydAorICogICAgICBzdmlkIC0gU1ZMQU4gVklECisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBJRC4KKyAqICAgICAgUlRfRVJSX1NWTEFOX1ZJRCAgICAtIEludmFsaWQgU1ZMQU4gVklEIHBhcmFtZXRlci4KKyAqICAgICAgUlRfRVJSX1ZMQU5fVklEICAgICAtIEludmFsaWQgVklEIHBhcmFtZXRlci4KKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAtIGlucHV0IG91dCBvZiByYW5nZS4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIHNldCBzeXN0ZW0gQzJTIGNvbmZpZ3VyYXRpb24uIEFTSUMgd2lsbCBjaGVjayB1cHN0cmVhbSdzIFZJRCBhbmQgYXNzaWduIHJlbGF0ZWQKKyAqICAgICAgU1ZJRCB0byBtYXRoZWQgcGFja2V0LiBUaGVyZSBhcmUgMTI4IFNWTEFOIEMyUyBjb25maWd1cmF0aW9ucy4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfc3ZsYW5fYzJzX2FkZChydGtfdmxhbl90IHZpZCwgcnRrX3BvcnRfdCBzcmNfcG9ydCwgcnRrX3ZsYW5fdCBzdmlkKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsLCBpOworICAgIHJ0a191aW50MzIgZW1wdHlfaWR4OworICAgIHJ0a191aW50MzIgZXZpZCwgcG1zaywgc3ZpZHgsIGMyc19zdmlkeDsKKyAgICBydGw4MzY3Y19zdmxhbl9tZW1jb25mX3Qgc3ZsYW5NZW1Db25mOworICAgIHJ0a19wb3J0X3QgcGh5UG9ydDsKKyAgICBydGtfdWludDE2IGRvbmVGbGFnOworCisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisKKyAgICBpZiAodmlkID4gUlRMODM2N0NfVklETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1ZMQU5fVklEOworCisgICAgaWYgKHN2aWQgPiBSVEw4MzY3Q19WSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfU1ZMQU5fVklEOworCisgICAgLyogQ2hlY2sgcG9ydCBWYWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChzcmNfcG9ydCk7CisKKyAgICBwaHlQb3J0ID0gcnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQoc3JjX3BvcnQpOworCisgICAgZW1wdHlfaWR4ID0gMHhGRkZGOworICAgIHN2aWR4ID0gMHhGRkZGOworICAgIGRvbmVGbGFnID0gRkFMU0U7CisKKyAgICBmb3IgKGkgPSAwOyBpPD0gUlRMODM2N0NfU1ZJRFhNQVg7IGkrKykKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1N2bGFuTWVtYmVyQ29uZmlndXJhdGlvbihpLCAmc3ZsYW5NZW1Db25mKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZiAoc3ZpZCA9PSBzdmxhbk1lbUNvbmYudnNfc3ZpZCkKKyAgICAgICAgeworICAgICAgICAgICAgc3ZpZHggPSBpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoMHhGRkZGID09IHN2aWR4KQorICAgICAgICByZXR1cm4gUlRfRVJSX1NWTEFOX1ZJRDsKKworICAgIGZvciAoaT1SVEw4MzY3Q19DMlNJRFhNQVg7IGk+PTA7IGktLSkKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1N2bGFuQzJTQ29uZihpLCAmZXZpZCwgJnBtc2ssICZjMnNfc3ZpZHgpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZiAoZXZpZCA9PSB2aWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENoZWNrIFNyY19wb3J0ICovCisgICAgICAgICAgICBpZihwbXNrICYgKDEgPDwgcGh5UG9ydCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogQ2hlY2sgU1ZJRFggKi8KKyAgICAgICAgICAgICAgICBpZihjMnNfc3ZpZHggPT0gc3ZpZHgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBBbGwgdGhlIHNhbWUsIGRvIG5vdGhpbmcgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogTmV3IHN2aWR4LCByZW1vdmUgc3JjX3BvcnQgYW5kIGZpbmQgYSBuZXcgc2xvdCB0byBhZGQgYSBuZXcgZW5ydHkgKi8KKyAgICAgICAgICAgICAgICAgICAgcG1zayA9IHBtc2sgJiB+KDEgPDwgcGh5UG9ydCk7CisgICAgICAgICAgICAgICAgICAgIGlmKHBtc2sgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGMyc19zdmlkeCA9IDA7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU3ZsYW5DMlNDb25mKGksIHZpZCwgcG1zaywgYzJzX3N2aWR4KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoYzJzX3N2aWR4ID09IHN2aWR4ICYmIGRvbmVGbGFnID09IEZBTFNFKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcG1zayA9IHBtc2sgfCAoMSA8PCBwaHlQb3J0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU3ZsYW5DMlNDb25mKGksIHZpZCwgcG1zaywgc3ZpZHgpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgIGRvbmVGbGFnID0gVFJVRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZXZpZD09MCYmcG1zaz09MCkKKyAgICAgICAgeworICAgICAgICAgICAgZW1wdHlfaWR4ID0gaTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgweEZGRkYgIT0gZW1wdHlfaWR4ICYmIGRvbmVGbGFnID09RkFMU0UpCisgICAgeworICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1N2bGFuQzJTQ29uZihlbXB0eV9pZHgsIHZpZCwgKDE8PHBoeVBvcnQpLCBzdmlkeCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgIHJldHVybiBSVF9FUlJfT0s7CisgICAgfQorICAgIGVsc2UgaWYoZG9uZUZsYWcgPT0gVFJVRSkKKyAgICB7CisgICAgICAgIHJldHVybiBSVF9FUlJfT0s7CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdmxhbl9jMnNfZGVsCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgRGVsZXRlIG9uZSBDMlMgZW50cnkKKyAqIElucHV0OgorICogICAgICB2aWQgLSBWTEFOIElECisgKiAgICAgIHNyY19wb3J0IC0gSW5ncmVzcyBQb3J0CisgKiAgICAgIHN2aWQgLSBTVkxBTiBWSUQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfVkxBTl9WSUQgICAgICAgICAtIEludmFsaWQgVklEIHBhcmFtZXRlci4KKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgSUQuCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgICAgIC0gaW5wdXQgb3V0IG9mIHJhbmdlLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZGVsZXRlIHN5c3RlbSBDMlMgY29uZmlndXJhdGlvbi4gVGhlcmUgYXJlIDEyOCBTVkxBTiBDMlMgY29uZmlndXJhdGlvbnMuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3N2bGFuX2Myc19kZWwocnRrX3ZsYW5fdCB2aWQsIHJ0a19wb3J0X3Qgc3JjX3BvcnQpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBpOworICAgIHJ0a191aW50MzIgZXZpZCwgcG1zaywgc3ZpZHg7CisgICAgcnRrX3BvcnRfdCBwaHlQb3J0OworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmICh2aWQgPiBSVEw4MzY3Q19FVklETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1ZMQU5fVklEOworCisgICAgLyogQ2hlY2sgcG9ydCBWYWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChzcmNfcG9ydCk7CisgICAgcGh5UG9ydCA9IHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHNyY19wb3J0KTsKKworICAgIGZvciAoaSA9IDA7IGkgPD0gUlRMODM2N0NfQzJTSURYTUFYOyBpKyspCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTdmxhbkMyU0NvbmYoaSwgJmV2aWQsICZwbXNrLCAmc3ZpZHgpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIGlmIChldmlkID09IHZpZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYocG1zayAmICgxIDw8IHBoeVBvcnQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBtc2sgPSBwbXNrICYgfigxIDw8IHBoeVBvcnQpOworICAgICAgICAgICAgICAgIGlmKHBtc2sgPT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHZpZCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHN2aWR4ID0gMDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTdmxhbkMyU0NvbmYoaSwgdmlkLCBwbXNrLCBzdmlkeCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgIHJldHVybiBSVF9FUlJfT0s7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N2bGFuX2Myc19nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgY29uZmlndXJlIFNWTEFOIEMyUyB0YWJsZQorICogSW5wdXQ6CisgKiAgICAgIHZpZCAtIFZMQU4gSUQKKyAqICAgICAgc3JjX3BvcnQgLSBJbmdyZXNzIFBvcnQKKyAqIE91dHB1dDoKKyAqICAgICAgcFN2aWQgLSBTVkxBTiBJRAorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IElELgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gaW5wdXQgb3V0IG9mIHJhbmdlLgorICogTm90ZToKKyAqICAgICBUaGUgQVBJIGNhbiBnZXQgc3lzdGVtIEMyUyBjb25maWd1cmF0aW9uLiBUaGVyZSBhcmUgMTI4IFNWTEFOIEMyUyBjb25maWd1cmF0aW9ucy4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfc3ZsYW5fYzJzX2dldChydGtfdmxhbl90IHZpZCwgcnRrX3BvcnRfdCBzcmNfcG9ydCwgcnRrX3ZsYW5fdCAqcFN2aWQpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBpOworICAgIHJ0a191aW50MzIgZXZpZCwgcG1zaywgc3ZpZHg7CisgICAgcnRsODM2N2Nfc3ZsYW5fbWVtY29uZl90IHN2bGFuTWVtQ29uZjsKKyAgICBydGtfcG9ydF90IHBoeVBvcnQ7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoTlVMTCA9PSBwU3ZpZCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAodmlkID4gUlRMODM2N0NfVklETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1ZMQU5fVklEOworCisgICAgLyogQ2hlY2sgcG9ydCBWYWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChzcmNfcG9ydCk7CisgICAgcGh5UG9ydCA9IHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHNyY19wb3J0KTsKKworICAgIGZvciAoaSA9IDA7IGkgPD0gUlRMODM2N0NfQzJTSURYTUFYOyBpKyspCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTdmxhbkMyU0NvbmYoaSwgJmV2aWQsICZwbXNrLCAmc3ZpZHgpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIGlmIChldmlkID09IHZpZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYocG1zayAmICgxIDw8IHBoeVBvcnQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1N2bGFuTWVtYmVyQ29uZmlndXJhdGlvbihzdmlkeCwgJnN2bGFuTWVtQ29uZikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgICAgICpwU3ZpZCA9IHN2bGFuTWVtQ29uZi52c19zdmlkOworICAgICAgICAgICAgICAgIHJldHVybiBSVF9FUlJfT0s7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N2bGFuX3VudGFnX2FjdGlvbl9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBDb25maWd1cmUgQWN0aW9uIG9mIGRvd25zdHJlYW0gVW5TdGFnIHBhY2tldAorICogSW5wdXQ6CisgKiAgICAgIGFjdGlvbiAgLSBBY3Rpb24gZm9yIFVuU3RhZworICogICAgICBzdmlkICAgIC0gVGhlIFNWSUQgYXNzaWduZWQgdG8gVW5TdGFnIHBhY2tldAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9TVkxBTl9WSUQgICAgICAgICAgICAgICAgLSBJbnZhbGlkIFNWTEFOIFZJRCBwYXJhbWV0ZXIuCisgKiAgICAgIFJUX0VSUl9TVkxBTl9FTlRSWV9OT1RfRk9VTkQgICAgLSBzcGVjaWZpZWQgc3ZsYW4gZW50cnkgbm90IGZvdW5kLgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFICAgICAgICAgICAgIC0gaW5wdXQgb3V0IG9mIHJhbmdlLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gY29uZmlndXJlIGFjdGlvbiBvZiBkb3duc3RyZWFtIFVuLVN0YWcgcGFja2V0LiBBIFNWSUQgYXNzaWduZWQKKyAqICAgICAgdG8gdGhlIHVuLXN0YWcgaXMgYWxzbyBzdXBwb3J0ZWQgYnkgdGhpcyBBUEkuIFRoZSBwYXJhbWV0ZXIgb2Ygc3ZpZCBpcworICogICAgICBvbmx5IHJlZmVyZW5jZWQgd2hlbiB0aGUgYWN0aW9uIGlzIHNldCB0byBVTlRBR19BU1NJR04KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfc3ZsYW5fdW50YWdfYWN0aW9uX3NldChydGtfc3ZsYW5fdW50YWdfYWN0aW9uX3QgYWN0aW9uLCBydGtfdmxhbl90IHN2aWQpCit7CisgICAgcnRrX2FwaV9yZXRfdCAgIHJldFZhbDsKKyAgICBydGtfdWludDMyICAgICAgaTsKKyAgICBydGw4MzY3Y19zdmxhbl9tZW1jb25mX3Qgc3ZsYW5NZW1Db25mOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmIChhY3Rpb24gPj0gVU5UQUdfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIGlmKGFjdGlvbiA9PSBVTlRBR19BU1NJR04pCisgICAgeworICAgICAgICBpZiAoc3ZpZCA+IFJUTDgzNjdDX1ZJRE1BWCkKKyAgICAgICAgICAgIHJldHVybiBSVF9FUlJfU1ZMQU5fVklEOworICAgIH0KKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1N2bGFuSW5ncmVzc1VudGFnKChydGtfdWludDMyKWFjdGlvbikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmKGFjdGlvbiA9PSBVTlRBR19BU1NJR04pCisgICAgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgUlRMODM2N0NfU1ZJRFhOTzsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTdmxhbk1lbWJlckNvbmZpZ3VyYXRpb24oaSwgJnN2bGFuTWVtQ29uZikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZiAoc3ZpZCA9PSBzdmxhbk1lbUNvbmYudnNfc3ZpZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTdmxhblVudGFnVmxhbihpKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9PSzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBSVF9FUlJfU1ZMQU5fRU5UUllfTk9UX0ZPVU5EOworICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdmxhbl91bnRhZ19hY3Rpb25fZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IEFjdGlvbiBvZiBkb3duc3RyZWFtIFVuU3RhZyBwYWNrZXQKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBBY3Rpb24gIC0gQWN0aW9uIGZvciBVblN0YWcKKyAqICAgICAgcFN2aWQgICAgLSBUaGUgU1ZJRCBhc3NpZ25lZCB0byBVblN0YWcgcGFja2V0CisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9TVkxBTl9WSUQgICAgICAgICAgICAgICAgLSBJbnZhbGlkIFNWTEFOIFZJRCBwYXJhbWV0ZXIuCisgKiAgICAgIFJUX0VSUl9TVkxBTl9FTlRSWV9OT1RfRk9VTkQgICAgLSBzcGVjaWZpZWQgc3ZsYW4gZW50cnkgbm90IGZvdW5kLgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFICAgICAgICAgICAgIC0gaW5wdXQgb3V0IG9mIHJhbmdlLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gR2V0IGFjdGlvbiBvZiBkb3duc3RyZWFtIFVuLVN0YWcgcGFja2V0LiBBIFNWSUQgYXNzaWduZWQKKyAqICAgICAgdG8gdGhlIHVuLXN0YWcgaXMgYWxzbyByZXRyaWV2ZWQgYnkgdGhpcyBBUEkuIFRoZSBwYXJhbWV0ZXIgcFN2aWQgaXMKKyAqICAgICAgb25seSByZWZlcm5jZWQgd2hlbiB0aGUgYWN0aW9uIGlzIFVOVEFHX0FTU0lHTgorICovCitydGtfYXBpX3JldF90IHJ0a19zdmxhbl91bnRhZ19hY3Rpb25fZ2V0KHJ0a19zdmxhbl91bnRhZ19hY3Rpb25fdCAqcEFjdGlvbiwgcnRrX3ZsYW5fdCAqcFN2aWQpCit7CisgICAgcnRrX2FwaV9yZXRfdCAgIHJldFZhbDsKKyAgICBydGtfdWludDMyICAgICAgc3ZpZHg7CisgICAgcnRsODM2N2Nfc3ZsYW5fbWVtY29uZl90IHN2bGFuTWVtQ29uZjsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBBY3Rpb24gfHwgTlVMTCA9PSBwU3ZpZCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTdmxhbkluZ3Jlc3NVbnRhZyhwQWN0aW9uKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYoKnBBY3Rpb24gPT0gVU5UQUdfQVNTSUdOKQorICAgIHsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU3ZsYW5VbnRhZ1ZsYW4oJnN2aWR4KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTdmxhbk1lbWJlckNvbmZpZ3VyYXRpb24oc3ZpZHgsICZzdmxhbk1lbUNvbmYpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICpwU3ZpZCA9IHN2bGFuTWVtQ29uZi52c19zdmlkOworICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdmxhbl91bm1hdGNoX2FjdGlvbl9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBDb25maWd1cmUgQWN0aW9uIG9mIGRvd25zdHJlYW0gVW5tYXRjaCBwYWNrZXQKKyAqIElucHV0OgorICogICAgICBhY3Rpb24gIC0gQWN0aW9uIGZvciBVbm1hdGNoCisgKiAgICAgIHN2aWQgICAgLSBUaGUgU1ZJRCBhc3NpZ25lZCB0byBVbm1hdGNoIHBhY2tldAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9TVkxBTl9WSUQgICAgICAgICAgICAgICAgLSBJbnZhbGlkIFNWTEFOIFZJRCBwYXJhbWV0ZXIuCisgKiAgICAgIFJUX0VSUl9TVkxBTl9FTlRSWV9OT1RfRk9VTkQgICAgLSBzcGVjaWZpZWQgc3ZsYW4gZW50cnkgbm90IGZvdW5kLgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFICAgICAgICAgICAgIC0gaW5wdXQgb3V0IG9mIHJhbmdlLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gY29uZmlndXJlIGFjdGlvbiBvZiBkb3duc3RyZWFtIFVuLW1hdGNoIHBhY2tldC4gQSBTVklEIGFzc2lnbmVkCisgKiAgICAgIHRvIHRoZSB1bi1tYXRjaCBpcyBhbHNvIHN1cHBvcnRlZCBieSB0aGlzIEFQSS4gVGhlIHBhcmFtZXRlciBvZCBzdmlkIGlzCisgKiAgICAgIG9ubHkgcmVmZXJuY2VkIHdoZW4gdGhlIGFjdGlvbiBpcyBzZXQgdG8gVU5NQVRDSF9BU1NJR04KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfc3ZsYW5fdW5tYXRjaF9hY3Rpb25fc2V0KHJ0a19zdmxhbl91bm1hdGNoX2FjdGlvbl90IGFjdGlvbiwgcnRrX3ZsYW5fdCBzdmlkKQoreworICAgIHJ0a19hcGlfcmV0X3QgICByZXRWYWw7CisgICAgcnRrX3VpbnQzMiAgICAgIGk7CisgICAgcnRsODM2N2Nfc3ZsYW5fbWVtY29uZl90IHN2bGFuTWVtQ29uZjsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAoYWN0aW9uID49IFVOTUFUQ0hfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIGlmIChhY3Rpb24gPT0gVU5NQVRDSF9BU1NJR04pCisgICAgeworICAgICAgICBpZiAoc3ZpZCA+IFJUTDgzNjdDX1ZJRE1BWCkKKyAgICAgICAgICAgIHJldHVybiBSVF9FUlJfU1ZMQU5fVklEOworICAgIH0KKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1N2bGFuSW5ncmVzc1VubWF0Y2goKHJ0a191aW50MzIpYWN0aW9uKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYoYWN0aW9uID09IFVOTUFUQ0hfQVNTSUdOKQorICAgIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IFJUTDgzNjdDX1NWSURYTk87IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU3ZsYW5NZW1iZXJDb25maWd1cmF0aW9uKGksICZzdmxhbk1lbUNvbmYpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgaWYgKHN2aWQgPT0gc3ZsYW5NZW1Db25mLnZzX3N2aWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU3ZsYW5Vbm1hdGNoVmxhbihpKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9PSzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBSVF9FUlJfU1ZMQU5fRU5UUllfTk9UX0ZPVU5EOworICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdmxhbl91bm1hdGNoX2FjdGlvbl9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgQWN0aW9uIG9mIGRvd25zdHJlYW0gVW5tYXRjaCBwYWNrZXQKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBBY3Rpb24gIC0gQWN0aW9uIGZvciBVbm1hdGNoCisgKiAgICAgIHBTdmlkICAgIC0gVGhlIFNWSUQgYXNzaWduZWQgdG8gVW5tYXRjaCBwYWNrZXQKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1NWTEFOX1ZJRCAgICAgICAgICAgICAgICAtIEludmFsaWQgU1ZMQU4gVklEIHBhcmFtZXRlci4KKyAqICAgICAgUlRfRVJSX1NWTEFOX0VOVFJZX05PVF9GT1VORCAgICAtIHNwZWNpZmllZCBzdmxhbiBlbnRyeSBub3QgZm91bmQuCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgICAgICAgICAgICAgLSBpbnB1dCBvdXQgb2YgcmFuZ2UuCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBHZXQgYWN0aW9uIG9mIGRvd25zdHJlYW0gVW4tbWF0Y2ggcGFja2V0LiBBIFNWSUQgYXNzaWduZWQKKyAqICAgICAgdG8gdGhlIHVuLW1hdGNoIGlzIGFsc28gcmV0cmlldmVkIGJ5IHRoaXMgQVBJLiBUaGUgcGFyYW1ldGVyIHBTdmlkIGlzCisgKiAgICAgIG9ubHkgcmVmZXJuY2VkIHdoZW4gdGhlIGFjdGlvbiBpcyBVTk1BVENIX0FTU0lHTgorICovCitydGtfYXBpX3JldF90IHJ0a19zdmxhbl91bm1hdGNoX2FjdGlvbl9nZXQocnRrX3N2bGFuX3VubWF0Y2hfYWN0aW9uX3QgKnBBY3Rpb24sIHJ0a192bGFuX3QgKnBTdmlkKQoreworICAgIHJ0a19hcGlfcmV0X3QgICByZXRWYWw7CisgICAgcnRrX3VpbnQzMiAgICAgIHN2aWR4OworICAgIHJ0bDgzNjdjX3N2bGFuX21lbWNvbmZfdCBzdmxhbk1lbUNvbmY7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoTlVMTCA9PSBwQWN0aW9uIHx8IE5VTEwgPT0gcFN2aWQpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU3ZsYW5JbmdyZXNzVW5tYXRjaChwQWN0aW9uKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYoKnBBY3Rpb24gPT0gVU5NQVRDSF9BU1NJR04pCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTdmxhblVubWF0Y2hWbGFuKCZzdmlkeCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU3ZsYW5NZW1iZXJDb25maWd1cmF0aW9uKHN2aWR4LCAmc3ZsYW5NZW1Db25mKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAqcFN2aWQgPSBzdmxhbk1lbUNvbmYudnNfc3ZpZDsKKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3ZsYW5fdW5hc3NpZ25fYWN0aW9uX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIENvbmZpZ3VyZSBBY3Rpb24gb2YgdXBzdHJlYW0gd2l0aG91dCBzdmlkIGFzc2lnbiBhY3Rpb24KKyAqIElucHV0OgorICogICAgICBhY3Rpb24gIC0gQWN0aW9uIGZvciBVbi1hc3NpZ24KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFICAgICAgICAgICAgIC0gaW5wdXQgb3V0IG9mIHJhbmdlLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gY29uZmlndXJlIGFjdGlvbiBvZiB1cHN0cmVhbSBVbi1hc3NpZ24gc3ZpZCBwYWNrZXQuIElmIGFjdGlvbiBpcyBub3QKKyAqICAgICAgdHJhcCB0byBDUFUsIHRoZSBwb3J0LWJhc2VkIFNWSUQgc3VyZSBiZSBhc3NpZ24gYXMgc3lzdGVtIG5lZWQKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfc3ZsYW5fdW5hc3NpZ25fYWN0aW9uX3NldChydGtfc3ZsYW5fdW5hc3NpZ25fYWN0aW9uX3QgYWN0aW9uKQoreworICAgIHJ0a19hcGlfcmV0X3QgICByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKGFjdGlvbiA+PSBVTkFTU0lHTl9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCisgICAgcmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1N2bGFuRWdyZXNzVW5hc3NpZ24oKHJ0a191aW50MzIpYWN0aW9uKTsKKworICAgIHJldHVybiByZXRWYWw7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdmxhbl91bmFzc2lnbl9hY3Rpb25fZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGFjdGlvbiBvZiB1cHN0cmVhbSB3aXRob3V0IHN2aWQgYXNzaWdubWVudAorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgcEFjdGlvbiAgLSBBY3Rpb24gZm9yIFVuLWFzc2lnbgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAtIEZhaWxlZAorICogTm90ZToKKyAqICAgICAgTm9uZQorICovCitydGtfYXBpX3JldF90IHJ0a19zdmxhbl91bmFzc2lnbl9hY3Rpb25fZ2V0KHJ0a19zdmxhbl91bmFzc2lnbl9hY3Rpb25fdCAqcEFjdGlvbikKK3sKKyAgICBydGtfYXBpX3JldF90ICAgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKE5VTEwgPT0gcEFjdGlvbikKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICByZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU3ZsYW5FZ3Jlc3NVbmFzc2lnbihwQWN0aW9uKTsKKworICAgIHJldHVybiByZXRWYWw7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdmxhbl9kbWFjX3ZpZHNlbF9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgRE1BQyBDVklEIHNlbGVjdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgLSBQb3J0CisgKiAgICAgIGVuYWJsZSAgLSBzdGF0ZSBvZiBETUFDIENWSUQgU2VsZWN0aW9uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9TVkxBTl9WSUQgICAgICAgICAgICAgICAgLSBJbnZhbGlkIFNWTEFOIFZJRCBwYXJhbWV0ZXIuCisgKiAgICAgIFJUX0VSUl9TVkxBTl9FTlRSWV9OT1RfRk9VTkQgICAgLSBzcGVjaWZpZWQgc3ZsYW4gZW50cnkgbm90IGZvdW5kLgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFICAgICAgICAgICAgIC0gaW5wdXQgb3V0IG9mIHJhbmdlLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgY2FuIHNldCBETUFDIENWSUQgU2VsZWN0aW9uIHN0YXRlCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3N2bGFuX2RtYWNfdmlkc2VsX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19lbmFibGVfdCBlbmFibGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCAgIHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBwb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgaWYgKGVuYWJsZSA+PSBSVEtfRU5BQkxFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9FTkFCTEU7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTdmxhbkRtYWNDdmlkU2VsKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCBlbmFibGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N2bGFuX2RtYWNfdmlkc2VsX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBETUFDIENWSUQgc2VsZWN0aW9uCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAtIFBvcnQKKyAqIE91dHB1dDoKKyAqICAgICAgcEVuYWJsZSAtIHN0YXRlIG9mIERNQUMgQ1ZJRCBTZWxlY3Rpb24KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1NWTEFOX1ZJRCAgICAgICAgICAgICAgICAtIEludmFsaWQgU1ZMQU4gVklEIHBhcmFtZXRlci4KKyAqICAgICAgUlRfRVJSX1NWTEFOX0VOVFJZX05PVF9GT1VORCAgICAtIHNwZWNpZmllZCBzdmxhbiBlbnRyeSBub3QgZm91bmQuCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgICAgICAgICAgICAgLSBpbnB1dCBvdXQgb2YgcmFuZ2UuCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGlzIEFQSSBjYW4gZ2V0IERNQUMgQ1ZJRCBTZWxlY3Rpb24gc3RhdGUKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfc3ZsYW5fZG1hY192aWRzZWxfZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX2VuYWJsZV90ICpwRW5hYmxlKQoreworICAgIHJ0a19hcGlfcmV0X3QgICByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoTlVMTCA9PSBwRW5hYmxlKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIC8qIENoZWNrIHBvcnQgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQocG9ydCk7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTdmxhbkRtYWNDdmlkU2VsKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCBwRW5hYmxlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdmxhbl9pcG1jMnNfYWRkCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgYWRkIGlwIG11bHRpY2FzdCBhZGRyZXNzIHRvIFNWTEFOCisgKiBJbnB1dDoKKyAqICAgICAgc3ZpZCAgICAtIFNWTEFOIFZJRAorICogICAgICBpcG1jICAgIC0gaXAgbXVsdGljYXN0IGFkZHJlc3MKKyAqICAgICAgaXBtY01zayAtIGlwIG11bHRpY2FzdCBtYXNrCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1NWTEFOX1ZJRCAgICAgICAgICAgICAgICAtIEludmFsaWQgU1ZMQU4gVklEIHBhcmFtZXRlci4KKyAqICAgICAgUlRfRVJSX1NWTEFOX0VOVFJZX05PVF9GT1VORCAgICAtIHNwZWNpZmllZCBzdmxhbiBlbnRyeSBub3QgZm91bmQuCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgICAgICAgICAgICAgLSBpbnB1dCBvdXQgb2YgcmFuZ2UuCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBzZXQgSVAgbXV0bGljYXN0IHRvIFNWSUQgY29uZmlndXJhdGlvbi4gSWYgdXBzdHJlYW0gcGFja2V0IGlzIElQdjQgbXVsdGljYXN0CisgKiAgICAgIHBhY2tldCBhbmQgRElQIGlzIG1hdGNoZWQgTUMyUyBjb25maWd1cmF0aW9uLCBBU0lDIHdpbGwgYXNzaWduIGVncmVzcyBTVklEIHRvIHRoZSBwYWNrZXQuCisgKiAgICAgIFRoZXJlIGFyZSAzMiBTVkxBTiBtdWx0aWNhc3QgY29uZmlndXJhdGlvbnMgZm9yIElQIGFuZCBMMiBtdWx0aWNhc3QuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3N2bGFuX2lwbWMyc19hZGQoaXBhZGRyX3QgaXBtYywgaXBhZGRyX3QgaXBtY01zayxydGtfdmxhbl90IHN2aWQpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWwsIGk7CisgICAgcnRrX3VpbnQzMiBlbXB0eV9pZHg7CisgICAgcnRrX3VpbnQzMiBzdmlkeDsKKyAgICBydGw4MzY3Y19zdmxhbl9tZW1jb25mX3Qgc3ZsYW5NZW1Db25mOworICAgIHJ0bDgzNjdjX3N2bGFuX21jMnNfdCBzdmxhbk1DMlNDb25mOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmIChzdmlkID4gUlRMODM2N0NfVklETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1NWTEFOX1ZJRDsKKworICAgIGlmICgoaXBtYyYweEYwMDAwMDAwKSE9MHhFMDAwMDAwMCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIHN2aWR4ID0gMHhGRkZGOworCisgICAgZm9yIChpID0gMDsgaSA8IFJUTDgzNjdDX1NWSURYTk87IGkrKykKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1N2bGFuTWVtYmVyQ29uZmlndXJhdGlvbihpLCAmc3ZsYW5NZW1Db25mKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZiAoc3ZpZCA9PSBzdmxhbk1lbUNvbmYudnNfc3ZpZCkKKyAgICAgICAgeworICAgICAgICAgICAgc3ZpZHggPSBpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoMHhGRkZGID09IHN2aWR4KQorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9TVkxBTl9FTlRSWV9OT1RfRk9VTkQ7CisKKworICAgIGVtcHR5X2lkeCA9IDB4RkZGRjsKKworICAgIGZvciAoaSA9IFJUTDgzNjdDX01DMlNJRFhNQVg7IGkgPj0gMDsgaS0tKQorICAgIHsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU3ZsYW5NQzJTQ29uZihpLCAmc3ZsYW5NQzJTQ29uZikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgaWYgKFRSVUUgPT0gc3ZsYW5NQzJTQ29uZi52YWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHN2bGFuTUMyU0NvbmYuZm9ybWF0ID09IFNWTEFOX01DMlNfTU9ERV9JUCAmJgorICAgICAgICAgICAgICAgIHN2bGFuTUMyU0NvbmYuc2RhdGE9PWlwbWMmJgorICAgICAgICAgICAgICAgIHN2bGFuTUMyU0NvbmYuc21hc2s9PWlwbWNNc2spCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3ZsYW5NQzJTQ29uZi5zdmlkeCA9IHN2aWR4OworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1N2bGFuTUMyU0NvbmYoaSwgJnN2bGFuTUMyU0NvbmYpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBlbXB0eV9pZHggPSBpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGVtcHR5X2lkeCE9MHhGRkZGKQorICAgIHsKKyAgICAgICAgc3ZsYW5NQzJTQ29uZi52YWxpZCA9IFRSVUU7CisgICAgICAgIHN2bGFuTUMyU0NvbmYuc3ZpZHggPSBzdmlkeDsKKyAgICAgICAgc3ZsYW5NQzJTQ29uZi5mb3JtYXQgPSBTVkxBTl9NQzJTX01PREVfSVA7CisgICAgICAgIHN2bGFuTUMyU0NvbmYuc2RhdGEgPSBpcG1jOworICAgICAgICBzdmxhbk1DMlNDb25mLnNtYXNrID0gaXBtY01zazsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU3ZsYW5NQzJTQ29uZihlbXB0eV9pZHgsICZzdmxhbk1DMlNDb25mKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PSzsKKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3ZsYW5faXBtYzJzX2RlbAorICogRGVzY3JpcHRpb246CisgKiAgICAgIGRlbGV0ZSBpcCBtdWx0aWNhc3QgYWRkcmVzcyB0byBTVkxBTgorICogSW5wdXQ6CisgKiAgICAgIGlwbWMgICAgLSBpcCBtdWx0aWNhc3QgYWRkcmVzcworICogICAgICBpcG1jTXNrIC0gaXAgbXVsdGljYXN0IG1hc2sKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfU1ZMQU5fVklEICAgICAgICAtIEludmFsaWQgU1ZMQU4gVklEIHBhcmFtZXRlci4KKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAgICAgLSBpbnB1dCBvdXQgb2YgcmFuZ2UuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBkZWxldGUgSVAgbXV0bGljYXN0IHRvIFNWSUQgY29uZmlndXJhdGlvbi4gVGhlcmUgYXJlIDMyIFNWTEFOIG11bHRpY2FzdCBjb25maWd1cmF0aW9ucyBmb3IgSVAgYW5kIEwyIG11bHRpY2FzdC4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfc3ZsYW5faXBtYzJzX2RlbChpcGFkZHJfdCBpcG1jLCBpcGFkZHJfdCBpcG1jTXNrKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgaTsKKyAgICBydGw4MzY3Y19zdmxhbl9tYzJzX3Qgc3ZsYW5NQzJTQ29uZjsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAoKGlwbWMmMHhGMDAwMDAwMCkhPTB4RTAwMDAwMDApCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBmb3IgKGkgPSAwOyBpIDw9IFJUTDgzNjdDX01DMlNJRFhNQVg7IGkrKykKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1N2bGFuTUMyU0NvbmYoaSwgJnN2bGFuTUMyU0NvbmYpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIGlmIChUUlVFID09IHN2bGFuTUMyU0NvbmYudmFsaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzdmxhbk1DMlNDb25mLmZvcm1hdCA9PSBTVkxBTl9NQzJTX01PREVfSVAgJiYKKyAgICAgICAgICAgICAgICBzdmxhbk1DMlNDb25mLnNkYXRhPT1pcG1jJiYKKyAgICAgICAgICAgICAgICBzdmxhbk1DMlNDb25mLnNtYXNrPT1pcG1jTXNrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1lbXNldCgmc3ZsYW5NQzJTQ29uZiwgMCwgc2l6ZW9mKHJ0bDgzNjdjX3N2bGFuX21jMnNfdCkpOworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1N2bGFuTUMyU0NvbmYoaSwgJnN2bGFuTUMyU0NvbmYpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9PSzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3ZsYW5faXBtYzJzX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBpcCBtdWx0aWNhc3QgYWRkcmVzcyB0byBTVkxBTgorICogSW5wdXQ6CisgKiAgICAgIGlwbWMgICAgLSBpcCBtdWx0aWNhc3QgYWRkcmVzcworICogICAgICBpcG1jTXNrIC0gaXAgbXVsdGljYXN0IG1hc2sKKyAqIE91dHB1dDoKKyAqICAgICAgcFN2aWQgLSBTVkxBTiBWSUQKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAtIGlucHV0IG91dCBvZiByYW5nZS4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGdldCBJUCBtdXRsaWNhc3QgdG8gU1ZJRCBjb25maWd1cmF0aW9uLiBUaGVyZSBhcmUgMzIgU1ZMQU4gbXVsdGljYXN0IGNvbmZpZ3VyYXRpb25zIGZvciBJUCBhbmQgTDIgbXVsdGljYXN0LgorICovCitydGtfYXBpX3JldF90IHJ0a19zdmxhbl9pcG1jMnNfZ2V0KGlwYWRkcl90IGlwbWMsIGlwYWRkcl90IGlwbWNNc2ssIHJ0a192bGFuX3QgKnBTdmlkKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgaTsKKyAgICBydGw4MzY3Y19zdmxhbl9tZW1jb25mX3Qgc3ZsYW5NZW1Db25mOworICAgIHJ0bDgzNjdjX3N2bGFuX21jMnNfdCBzdmxhbk1DMlNDb25mOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKE5VTEwgPT0gcFN2aWQpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChpcG1jJjB4RjAwMDAwMDApIT0weEUwMDAwMDAwKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgZm9yIChpID0gMDsgaSA8PSBSVEw4MzY3Q19NQzJTSURYTUFYOyBpKyspCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTdmxhbk1DMlNDb25mKGksICZzdmxhbk1DMlNDb25mKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZiAoVFJVRSA9PSBzdmxhbk1DMlNDb25mLnZhbGlkICYmCisgICAgICAgICAgICBzdmxhbk1DMlNDb25mLmZvcm1hdCA9PSBTVkxBTl9NQzJTX01PREVfSVAgJiYKKyAgICAgICAgICAgIHN2bGFuTUMyU0NvbmYuc2RhdGEgPT0gaXBtYyAmJgorICAgICAgICAgICAgc3ZsYW5NQzJTQ29uZi5zbWFzayA9PSBpcG1jTXNrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTdmxhbk1lbWJlckNvbmZpZ3VyYXRpb24oc3ZsYW5NQzJTQ29uZi5zdmlkeCwgJnN2bGFuTWVtQ29uZikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgKnBTdmlkID0gc3ZsYW5NZW1Db25mLnZzX3N2aWQ7CisgICAgICAgICAgICByZXR1cm4gUlRfRVJSX09LOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdmxhbl9sMm1jMnNfYWRkCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQWRkIEwyIG11bHRpY2FzdCBhZGRyZXNzIHRvIFNWTEFOCisgKiBJbnB1dDoKKyAqICAgICAgbWFjICAgICAtIEwyIG11bHRpY2FzdCBhZGRyZXNzCisgKiAgICAgIG1hY01zayAgLSBMMiBtdWx0aWNhc3QgYWRkcmVzcyBtYXNrCisgKiAgICAgIHN2aWQgICAgLSBTVkxBTiBWSUQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfU1ZMQU5fVklEICAgICAgICAgICAgICAgIC0gSW52YWxpZCBTVkxBTiBWSUQgcGFyYW1ldGVyLgorICogICAgICBSVF9FUlJfU1ZMQU5fRU5UUllfTk9UX0ZPVU5EICAgIC0gc3BlY2lmaWVkIHN2bGFuIGVudHJ5IG5vdCBmb3VuZC4KKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAgICAgICAgICAgICAtIGlucHV0IG91dCBvZiByYW5nZS4KKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIHNldCBMMiBNdXRsaWNhc3QgdG8gU1ZJRCBjb25maWd1cmF0aW9uLiBJZiB1cHN0cmVhbSBwYWNrZXQgaXMgTDIgbXVsdGljYXN0CisgKiAgICAgIHBhY2tldCBhbmQgRE1BQyBpcyBtYXRjaGVkLCBBU0lDIHdpbGwgYXNzaWduIGVncmVzcyBTVklEIHRvIHRoZSBwYWNrZXQuIFRoZXJlIGFyZSAzMgorICogICAgICBTVkxBTiBtdWx0aWNhc3QgY29uZmlndXJhdGlvbnMgZm9yIElQIGFuZCBMMiBtdWx0aWNhc3QuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3N2bGFuX2wybWMyc19hZGQocnRrX21hY190IG1hYywgcnRrX21hY190IG1hY01zaywgcnRrX3ZsYW5fdCBzdmlkKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsLCBpOworICAgIHJ0a191aW50MzIgZW1wdHlfaWR4OworICAgIHJ0a191aW50MzIgc3ZpZHgsIGwyYWRkLCBsMk1hc2s7CisgICAgcnRsODM2N2Nfc3ZsYW5fbWVtY29uZl90IHN2bGFuTWVtQ29uZjsKKyAgICBydGw4MzY3Y19zdmxhbl9tYzJzX3Qgc3ZsYW5NQzJTQ29uZjsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAoc3ZpZCA+IFJUTDgzNjdDX1ZJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9TVkxBTl9WSUQ7CisKKyAgICBpZiAobWFjLm9jdGV0WzBdIT0gMSYmbWFjLm9jdGV0WzFdIT0wKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgbDJhZGQgPSAobWFjLm9jdGV0WzJdIDw8IDI0KSB8IChtYWMub2N0ZXRbM10gPDwgMTYpIHwgKG1hYy5vY3RldFs0XSA8PCA4KSB8IG1hYy5vY3RldFs1XTsKKyAgICBsMk1hc2sgPSAobWFjTXNrLm9jdGV0WzJdIDw8IDI0KSB8IChtYWNNc2sub2N0ZXRbM10gPDwgMTYpIHwgKG1hY01zay5vY3RldFs0XSA8PCA4KSB8IG1hY01zay5vY3RldFs1XTsKKworICAgIHN2aWR4ID0gMHhGRkZGOworCisgICAgZm9yIChpID0gMDsgaSA8IFJUTDgzNjdDX1NWSURYTk87IGkrKykKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1N2bGFuTWVtYmVyQ29uZmlndXJhdGlvbihpLCAmc3ZsYW5NZW1Db25mKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZiAoc3ZpZCA9PSBzdmxhbk1lbUNvbmYudnNfc3ZpZCkKKyAgICAgICAgeworICAgICAgICAgICAgc3ZpZHggPSBpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoMHhGRkZGID09IHN2aWR4KQorICAgICAgICByZXR1cm4gUlRfRVJSX1NWTEFOX0VOVFJZX05PVF9GT1VORDsKKworICAgIGVtcHR5X2lkeCA9IDB4RkZGRjsKKworICAgIGZvciAoaSA9IFJUTDgzNjdDX01DMlNJRFhNQVg7IGkgPj0wOyBpLS0pCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTdmxhbk1DMlNDb25mKGksICZzdmxhbk1DMlNDb25mKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZiAoVFJVRSA9PSBzdmxhbk1DMlNDb25mLnZhbGlkKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc3ZsYW5NQzJTQ29uZi5mb3JtYXQgPT0gU1ZMQU5fTUMyU19NT0RFX01BQyAmJgorICAgICAgICAgICAgICAgIHN2bGFuTUMyU0NvbmYuc2RhdGE9PWwyYWRkJiYKKyAgICAgICAgICAgICAgICBzdmxhbk1DMlNDb25mLnNtYXNrPT1sMk1hc2spCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3ZsYW5NQzJTQ29uZi5zdmlkeCA9IHN2aWR4OworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1N2bGFuTUMyU0NvbmYoaSwgJnN2bGFuTUMyU0NvbmYpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBlbXB0eV9pZHggPSBpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGVtcHR5X2lkeCE9MHhGRkZGKQorICAgIHsKKyAgICAgICAgc3ZsYW5NQzJTQ29uZi52YWxpZCA9IFRSVUU7CisgICAgICAgIHN2bGFuTUMyU0NvbmYuc3ZpZHggPSBzdmlkeDsKKyAgICAgICAgc3ZsYW5NQzJTQ29uZi5mb3JtYXQgPSBTVkxBTl9NQzJTX01PREVfTUFDOworICAgICAgICBzdmxhbk1DMlNDb25mLnNkYXRhID0gbDJhZGQ7CisgICAgICAgIHN2bGFuTUMyU0NvbmYuc21hc2sgPSBsMk1hc2s7CisKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljU3ZsYW5NQzJTQ29uZihlbXB0eV9pZHgsICZzdmxhbk1DMlNDb25mKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PSzsKKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N2bGFuX2wybWMyc19kZWwKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBkZWxldGUgTDIgbXVsdGljYXN0IGFkZHJlc3MgdG8gU1ZMQU4KKyAqIElucHV0OgorICogICAgICBtYWMgICAgIC0gTDIgbXVsdGljYXN0IGFkZHJlc3MKKyAqICAgICAgbWFjTXNrICAtIEwyIG11bHRpY2FzdCBhZGRyZXNzIG1hc2sKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfU1ZMQU5fVklEICAgICAgICAtIEludmFsaWQgU1ZMQU4gVklEIHBhcmFtZXRlci4KKyAqICAgICAgUlRfRVJSX09VVF9PRl9SQU5HRSAgICAgLSBpbnB1dCBvdXQgb2YgcmFuZ2UuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBkZWxldGUgTXV0bGljYXN0IHRvIFNWSUQgY29uZmlndXJhdGlvbi4gVGhlcmUgYXJlIDMyIFNWTEFOIG11bHRpY2FzdCBjb25maWd1cmF0aW9ucyBmb3IgSVAgYW5kIEwyIG11bHRpY2FzdC4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfc3ZsYW5fbDJtYzJzX2RlbChydGtfbWFjX3QgbWFjLCBydGtfbWFjX3QgbWFjTXNrKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgaTsKKyAgICBydGtfdWludDMyIGwyYWRkLCBsMk1hc2s7CisgICAgcnRsODM2N2Nfc3ZsYW5fbWMyc190IHN2bGFuTUMyU0NvbmY7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKG1hYy5vY3RldFswXSE9IDEmJm1hYy5vY3RldFsxXSE9MCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGwyYWRkID0gKG1hYy5vY3RldFsyXSA8PCAyNCkgfCAobWFjLm9jdGV0WzNdIDw8IDE2KSB8IChtYWMub2N0ZXRbNF0gPDwgOCkgfCBtYWMub2N0ZXRbNV07CisgICAgbDJNYXNrID0gKG1hY01zay5vY3RldFsyXSA8PCAyNCkgfCAobWFjTXNrLm9jdGV0WzNdIDw8IDE2KSB8IChtYWNNc2sub2N0ZXRbNF0gPDwgOCkgfCBtYWNNc2sub2N0ZXRbNV07CisKKyAgICBmb3IgKGkgPSAwOyBpIDw9IFJUTDgzNjdDX01DMlNJRFhNQVg7IGkrKykKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1N2bGFuTUMyU0NvbmYoaSwgJnN2bGFuTUMyU0NvbmYpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIGlmIChUUlVFID09IHN2bGFuTUMyU0NvbmYudmFsaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzdmxhbk1DMlNDb25mLmZvcm1hdCA9PSBTVkxBTl9NQzJTX01PREVfTUFDICYmCisgICAgICAgICAgICAgICAgc3ZsYW5NQzJTQ29uZi5zZGF0YT09bDJhZGQmJgorICAgICAgICAgICAgICAgIHN2bGFuTUMyU0NvbmYuc21hc2s9PWwyTWFzaykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtZW1zZXQoJnN2bGFuTUMyU0NvbmYsIDAsIHNpemVvZihydGw4MzY3Y19zdmxhbl9tYzJzX3QpKTsKKyAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTdmxhbk1DMlNDb25mKGksICZzdmxhbk1DMlNDb25mKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgIHJldHVybiBSVF9FUlJfT0s7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N2bGFuX2wybWMyc19nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgTDIgbXVsdGljYXN0IGFkZHJlc3MgdG8gU1ZMQU4KKyAqIElucHV0OgorICogICAgICBtYWMgICAgIC0gTDIgbXVsdGljYXN0IGFkZHJlc3MKKyAqICAgICAgbWFjTXNrICAtIEwyIG11bHRpY2FzdCBhZGRyZXNzIG1hc2sKKyAqIE91dHB1dDoKKyAqICAgICAgcFN2aWQgLSBTVkxBTiBWSUQKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgICAgIC0gaW5wdXQgb3V0IG9mIHJhbmdlLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IEwyIG11dGxpY2FzdCB0byBTVklEIGNvbmZpZ3VyYXRpb24uIFRoZXJlIGFyZSAzMiBTVkxBTiBtdWx0aWNhc3QgY29uZmlndXJhdGlvbnMgZm9yIElQIGFuZCBMMiBtdWx0aWNhc3QuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3N2bGFuX2wybWMyc19nZXQocnRrX21hY190IG1hYywgcnRrX21hY190IG1hY01zaywgcnRrX3ZsYW5fdCAqcFN2aWQpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBpOworICAgIHJ0a191aW50MzIgbDJhZGQsbDJNYXNrOworICAgIHJ0bDgzNjdjX3N2bGFuX21lbWNvbmZfdCBzdmxhbk1lbUNvbmY7CisgICAgcnRsODM2N2Nfc3ZsYW5fbWMyc190IHN2bGFuTUMyU0NvbmY7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoTlVMTCA9PSBwU3ZpZCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAobWFjLm9jdGV0WzBdIT0gMSYmbWFjLm9jdGV0WzFdIT0wKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgbDJhZGQgPSAobWFjLm9jdGV0WzJdIDw8IDI0KSB8IChtYWMub2N0ZXRbM10gPDwgMTYpIHwgKG1hYy5vY3RldFs0XSA8PCA4KSB8IG1hYy5vY3RldFs1XTsKKyAgICBsMk1hc2sgPSAobWFjTXNrLm9jdGV0WzJdIDw8IDI0KSB8IChtYWNNc2sub2N0ZXRbM10gPDwgMTYpIHwgKG1hY01zay5vY3RldFs0XSA8PCA4KSB8IG1hY01zay5vY3RldFs1XTsKKworICAgIGZvciAoaSA9IDA7IGkgPD0gUlRMODM2N0NfTUMyU0lEWE1BWDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU3ZsYW5NQzJTQ29uZihpLCAmc3ZsYW5NQzJTQ29uZikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgaWYgKFRSVUUgPT0gc3ZsYW5NQzJTQ29uZi52YWxpZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHN2bGFuTUMyU0NvbmYuZm9ybWF0ID09IFNWTEFOX01DMlNfTU9ERV9NQUMgJiYKKyAgICAgICAgICAgICAgICBzdmxhbk1DMlNDb25mLnNkYXRhPT1sMmFkZCYmCisgICAgICAgICAgICAgICAgc3ZsYW5NQzJTQ29uZi5zbWFzaz09bDJNYXNrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1N2bGFuTWVtYmVyQ29uZmlndXJhdGlvbihzdmxhbk1DMlNDb25mLnN2aWR4LCAmc3ZsYW5NZW1Db25mKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgICpwU3ZpZCA9IHN2bGFuTWVtQ29uZi52c19zdmlkOworCisgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9PSzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3ZsYW5fc3AyY19hZGQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBBZGQgc3lzdGVtIFNQMkMgY29uZmlndXJhdGlvbgorICogSW5wdXQ6CisgKiAgICAgIGN2aWQgICAgICAgIC0gVkxBTiBJRAorICogICAgICBkc3RfcG9ydCAgICAtIERlc3RpbmF0aW9uIHBvcnQgb2YgU1ZMQU4gdG8gQ1ZMQU4gY29uZmlndXJhdGlvbgorICogICAgICBzdmlkICAgICAgICAtIFNWTEFOIFZJRAorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfU1ZMQU5fVklEICAgIC0gSW52YWxpZCBTVkxBTiBWSUQgcGFyYW1ldGVyLgorICogICAgICBSVF9FUlJfVkxBTl9WSUQgICAgIC0gSW52YWxpZCBWSUQgcGFyYW1ldGVyLgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gaW5wdXQgb3V0IG9mIHJhbmdlLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gYWRkIFNWSUQgJiBEZXN0aW5hdGlvbiBQb3J0IHRvIENWTEFOIGNvbmZpZ3VyYXRpb24uIFRoZSBkb3duc3RyZWFtIGZyYW1lcyB3aXRoIGFzc2lnbmVkCisgKiAgICAgIFNWSUQgd2lsbCBiZSBhZGQgQy10YWcgd2l0aCBhc3NpZ25lZCBDVklEIGlmIHRoZSBvdXRwdXQgcG9ydCBpcyB0aGUgYXNzaWduZWQgZGVzdGluYXRpb24gcG9ydC4KKyAqICAgICAgVGhlcmUgYXJlIDEyOCBTUDJDIGNvbmZpZ3VyYXRpb25zLgorICovCitydGtfYXBpX3JldF90IHJ0a19zdmxhbl9zcDJjX2FkZChydGtfdmxhbl90IHN2aWQsIHJ0a19wb3J0X3QgZHN0X3BvcnQsIHJ0a192bGFuX3QgY3ZpZCkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbCwgaTsKKyAgICBydGtfdWludDMyIGVtcHR5X2lkeCwgc3ZpZHg7CisgICAgcnRsODM2N2Nfc3ZsYW5fbWVtY29uZl90IHN2bGFuTWVtQ29uZjsKKyAgICBydGw4MzY3Y19zdmxhbl9zMmNfdCBzdmxhblNQMkNDb25mOworICAgIHJ0a19wb3J0X3QgcG9ydDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAoc3ZpZCA+IFJUTDgzNjdDX1ZJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9TVkxBTl9WSUQ7CisKKyAgICBpZiAoY3ZpZCA+IFJUTDgzNjdDX1ZJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9WTEFOX1ZJRDsKKworICAgIC8qIENoZWNrIHBvcnQgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQoZHN0X3BvcnQpOworICAgIHBvcnQgPSBydGtfc3dpdGNoX3BvcnRfTDJQX2dldChkc3RfcG9ydCk7CisKKyAgICBzdmlkeCA9IDB4RkZGRjsKKworICAgIGZvciAoaSA9IDA7IGkgPCBSVEw4MzY3Q19TVklEWE5POyBpKyspCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTdmxhbk1lbWJlckNvbmZpZ3VyYXRpb24oaSwgJnN2bGFuTWVtQ29uZikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgaWYgKHN2aWQgPT0gc3ZsYW5NZW1Db25mLnZzX3N2aWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN2aWR4ID0gaTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKDB4RkZGRiA9PSBzdmlkeCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9TVkxBTl9FTlRSWV9OT1RfRk9VTkQ7CisKKyAgICBlbXB0eV9pZHggPSAweEZGRkY7CisKKyAgICBmb3IgKGk9UlRMODM2N0NfU1AyQ01BWDsgaSA+PTAgOyBpLS0pCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTdmxhblNQMkNDb25mKGksICZzdmxhblNQMkNDb25mKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZiAoIChzdmxhblNQMkNDb25mLnN2aWR4ID09IHN2aWR4KSAmJiAoc3ZsYW5TUDJDQ29uZi5kc3Rwb3J0ID09IHBvcnQpICYmIChzdmxhblNQMkNDb25mLnZhbGlkID09IDEpKQorICAgICAgICB7CisgICAgICAgICAgICBlbXB0eV9pZHggPSBpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3ZsYW5TUDJDQ29uZi52YWxpZCA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBlbXB0eV9pZHggPSBpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGVtcHR5X2lkeCE9MHhGRkZGKQorICAgIHsKKyAgICAgICAgc3ZsYW5TUDJDQ29uZi52YWxpZCAgICAgPSAxOworICAgICAgICBzdmxhblNQMkNDb25mLnZpZCAgICAgICA9IGN2aWQ7CisgICAgICAgIHN2bGFuU1AyQ0NvbmYuc3ZpZHggICAgID0gc3ZpZHg7CisgICAgICAgIHN2bGFuU1AyQ0NvbmYuZHN0cG9ydCAgID0gcG9ydDsKKworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTdmxhblNQMkNDb25mKGVtcHR5X2lkeCwgJnN2bGFuU1AyQ0NvbmYpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICByZXR1cm4gUlRfRVJSX09LOworICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworCit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdmxhbl9zcDJjX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBjb25maWd1cmUgc3lzdGVtIFNQMkMgY29udGVudAorICogSW5wdXQ6CisgKiAgICAgIHN2aWQgICAgICAgIC0gU1ZMQU4gVklECisgKiAgICAgIGRzdF9wb3J0ICAgIC0gRGVzdGluYXRpb24gcG9ydCBvZiBTVkxBTiB0byBDVkxBTiBjb25maWd1cmF0aW9uCisgKiBPdXRwdXQ6CisgKiAgICAgIHBDdmlkIC0gVkxBTiBJRAorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFIC0gaW5wdXQgb3V0IG9mIHJhbmdlLgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqICAgICAgUlRfRVJSX1NWTEFOX1ZJRCAgICAtIEludmFsaWQgU1ZMQU4gVklEIHBhcmFtZXRlci4KKyAqIE5vdGU6CisgKiAgICAgVGhlIEFQSSBjYW4gZ2V0IFNWSUQgJiBEZXN0aW5hdGlvbiBQb3J0IHRvIENWTEFOIGNvbmZpZ3VyYXRpb24uIFRoZXJlIGFyZSAxMjggU1AyQyBjb25maWd1cmF0aW9ucy4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfc3ZsYW5fc3AyY19nZXQocnRrX3ZsYW5fdCBzdmlkLCBydGtfcG9ydF90IGRzdF9wb3J0LCBydGtfdmxhbl90ICpwQ3ZpZCkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIGksIHN2aWR4OworICAgIHJ0bDgzNjdjX3N2bGFuX21lbWNvbmZfdCBzdmxhbk1lbUNvbmY7CisgICAgcnRsODM2N2Nfc3ZsYW5fczJjX3Qgc3ZsYW5TUDJDQ29uZjsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBDdmlkKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmIChzdmlkID4gUlRMODM2N0NfVklETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1NWTEFOX1ZJRDsKKworICAgIC8qIENoZWNrIHBvcnQgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQoZHN0X3BvcnQpOworICAgIGRzdF9wb3J0ID0gcnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQoZHN0X3BvcnQpOworCisgICAgc3ZpZHggPSAweEZGRkY7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgUlRMODM2N0NfU1ZJRFhOTzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljU3ZsYW5NZW1iZXJDb25maWd1cmF0aW9uKGksICZzdmxhbk1lbUNvbmYpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIGlmIChzdmlkID09IHN2bGFuTWVtQ29uZi52c19zdmlkKQorICAgICAgICB7CisgICAgICAgICAgICBzdmlkeCA9IGk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgweEZGRkYgPT0gc3ZpZHgpCisgICAgICAgIHJldHVybiBSVF9FUlJfU1ZMQU5fRU5UUllfTk9UX0ZPVU5EOworCisgICAgZm9yIChpID0gMDsgaSA8PSBSVEw4MzY3Q19TUDJDTUFYOyBpKyspCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTdmxhblNQMkNDb25mKGksICZzdmxhblNQMkNDb25mKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZiAoIChzdmxhblNQMkNDb25mLnN2aWR4ID09IHN2aWR4KSAmJiAoc3ZsYW5TUDJDQ29uZi5kc3Rwb3J0ID09IGRzdF9wb3J0KSAmJiAoc3ZsYW5TUDJDQ29uZi52YWxpZCA9PSAxKSApCisgICAgICAgIHsKKyAgICAgICAgICAgICpwQ3ZpZCA9IHN2bGFuU1AyQ0NvbmYudmlkOworICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9PSzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT1VUX09GX1JBTkdFOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3ZsYW5fc3AyY19kZWwKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBEZWxldGUgc3lzdGVtIFNQMkMgY29uZmlndXJhdGlvbgorICogSW5wdXQ6CisgKiAgICAgIHN2aWQgICAgICAgIC0gU1ZMQU4gVklECisgKiAgICAgIGRzdF9wb3J0ICAgIC0gRGVzdGluYXRpb24gcG9ydCBvZiBTVkxBTiB0byBDVkxBTiBjb25maWd1cmF0aW9uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9TVkxBTl9WSUQgICAgLSBJbnZhbGlkIFNWTEFOIFZJRCBwYXJhbWV0ZXIuCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgLSBpbnB1dCBvdXQgb2YgcmFuZ2UuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBkZWxldGUgU1ZJRCAmIERlc3RpbmF0aW9uIFBvcnQgdG8gQ1ZMQU4gY29uZmlndXJhdGlvbi4gVGhlcmUgYXJlIDEyOCBTUDJDIGNvbmZpZ3VyYXRpb25zLgorICovCitydGtfYXBpX3JldF90IHJ0a19zdmxhbl9zcDJjX2RlbChydGtfdmxhbl90IHN2aWQsIHJ0a19wb3J0X3QgZHN0X3BvcnQpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBpLCBzdmlkeDsKKyAgICBydGw4MzY3Y19zdmxhbl9tZW1jb25mX3Qgc3ZsYW5NZW1Db25mOworICAgIHJ0bDgzNjdjX3N2bGFuX3MyY190IHN2bGFuU1AyQ0NvbmY7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKHN2aWQgPiBSVEw4MzY3Q19WSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfU1ZMQU5fVklEOworCisgICAgLyogQ2hlY2sgcG9ydCBWYWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChkc3RfcG9ydCk7CisgICAgZHN0X3BvcnQgPSBydGtfc3dpdGNoX3BvcnRfTDJQX2dldChkc3RfcG9ydCk7CisKKyAgICBzdmlkeCA9IDB4RkZGRjsKKworICAgIGZvciAoaSA9IDA7IGkgPCBSVEw4MzY3Q19TVklEWE5POyBpKyspCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTdmxhbk1lbWJlckNvbmZpZ3VyYXRpb24oaSwgJnN2bGFuTWVtQ29uZikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgaWYgKHN2aWQgPT0gc3ZsYW5NZW1Db25mLnZzX3N2aWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN2aWR4ID0gaTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKDB4RkZGRiA9PSBzdmlkeCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9TVkxBTl9FTlRSWV9OT1RfRk9VTkQ7CisKKyAgICBmb3IgKGkgPSAwOyBpIDw9IFJUTDgzNjdDX1NQMkNNQVg7IGkrKykKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1N2bGFuU1AyQ0NvbmYoaSwgJnN2bGFuU1AyQ0NvbmYpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIGlmICggKHN2bGFuU1AyQ0NvbmYuc3ZpZHggPT0gc3ZpZHgpICYmIChzdmxhblNQMkNDb25mLmRzdHBvcnQgPT0gZHN0X3BvcnQpICYmIChzdmxhblNQMkNDb25mLnZhbGlkID09IDEpICkKKyAgICAgICAgeworICAgICAgICAgICAgc3ZsYW5TUDJDQ29uZi52YWxpZCAgICAgPSAwOworICAgICAgICAgICAgc3ZsYW5TUDJDQ29uZi52aWQgICAgICAgPSAwOworICAgICAgICAgICAgc3ZsYW5TUDJDQ29uZi5zdmlkeCAgICAgPSAwOworICAgICAgICAgICAgc3ZsYW5TUDJDQ29uZi5kc3Rwb3J0ICAgPSAwOworCisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTdmxhblNQMkNDb25mKGksICZzdmxhblNQMkNDb25mKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICByZXR1cm4gUlRfRVJSX09LOworICAgICAgICB9CisKKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N2bGFuX2xvb2t1cFR5cGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IGxvb2t1cCB0eXBlIG9mIFNWTEFOCisgKiBJbnB1dDoKKyAqICAgICAgdHlwZSAgICAgICAgLSBsb29rdXAgdHlwZQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiBOb3RlOgorICogICAgICBub25lCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3N2bGFuX2xvb2t1cFR5cGVfc2V0KHJ0a19zdmxhbl9sb29rdXBUeXBlX3QgdHlwZSkKK3sKKyAgICBydGtfYXBpX3JldF90ICAgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmICh0eXBlID49IFNWTEFOX0xPT0tVUF9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfQ0hJUF9OT1RfU1VQUE9SVEVEOworCisKKyAgICBzdmxhbl9sb29rdXBUeXBlID0gdHlwZTsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTdmxhbkxvb2t1cFR5cGUoKHJ0a191aW50MzIpdHlwZSk7CisKKyAgICByZXR1cm4gcmV0VmFsOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfc3ZsYW5fbG9va3VwVHlwZV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgbG9va3VwIHR5cGUgb2YgU1ZMQU4KKyAqIElucHV0OgorICogICAgICBwVHlwZSAgICAgICAtIGxvb2t1cCB0eXBlCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqIE5vdGU6CisgKiAgICAgIG5vbmUKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfc3ZsYW5fbG9va3VwVHlwZV9nZXQocnRrX3N2bGFuX2xvb2t1cFR5cGVfdCAqcFR5cGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCAgIHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBUeXBlKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTdmxhbkxvb2t1cFR5cGUocFR5cGUpOworCisgICAgc3ZsYW5fbG9va3VwVHlwZSA9ICpwVHlwZTsKKworICAgIHJldHVybiByZXRWYWw7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdmxhbl90cmFwUHJpX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBzdmxhbiB0cmFwIHByaW9yaXR5CisgKiBJbnB1dDoKKyAqICAgICAgcHJpb3JpdHkgLSBwcmlvcml0eSBmb3IgdHJhcCBwYWNrZXRzCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX1FPU19JTlRfUFJJT1JJVFkKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfc3ZsYW5fdHJhcFByaV9zZXQocnRrX3ByaV90IHByaW9yaXR5KQoreworICAgIHJ0a19hcGlfcmV0X3QgICByZXRWYWw7CisKKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKHByaW9yaXR5ID4gUlRMODM2N0NfUFJJTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTdmxhblRyYXBQcmlvcml0eShwcmlvcml0eSk7CisKKyAgICByZXR1cm4gcmV0VmFsOworfSAgIC8qIGVuZCBvZiBydGtfc3ZsYW5fdHJhcFByaV9zZXQgKi8KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N2bGFuX3RyYXBQcmlfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHN2bGFuIHRyYXAgcHJpb3JpdHkKKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBQcmlvcml0eSAtIHByaW9yaXR5IGZvciB0cmFwIHBhY2tldHMKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAtIGlucHV0IHBhcmFtZXRlciBtYXkgYmUgbnVsbCBwb2ludGVyCisgKiBOb3RlOgorICogICAgICBOb25lCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3N2bGFuX3RyYXBQcmlfZ2V0KHJ0a19wcmlfdCAqcFByaW9yaXR5KQoreworICAgIHJ0a19hcGlfcmV0X3QgICByZXRWYWw7CisKKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKE5VTEwgPT0gcFByaW9yaXR5KQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTdmxhblRyYXBQcmlvcml0eShwUHJpb3JpdHkpOworCisgICAgcmV0dXJuIHJldFZhbDsKK30gICAvKiBlbmQgb2YgcnRrX3N2bGFuX3RyYXBQcmlfZ2V0ICovCisKKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3N2bGFuX2NoZWNrQW5kQ3JlYXRlTWJyCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQ2hlY2sgYW5kIGNyZWF0ZSBNZW1iZXIgY29uZmlndXJhdGlvbiBhbmQgcmV0dXJuIGluZGV4CisgKiBJbnB1dDoKKyAqICAgICAgdmlkICAtIFZMQU4gaWQuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBJbmRleCAgLSBNZW1iZXIgY29uZmlndXJhdGlvbiBpbmRleAorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfVkxBTl9WSUQgICAgIC0gSW52YWxpZCBWTEFOIElELgorICogICAgICBSVF9FUlJfVEJMX0ZVTEwgICAgIC0gTWVtYmVyIENvbmZpZ3VyYXRpb24gdGFibGUgZnVsbAorICogTm90ZToKKyAqCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3N2bGFuX2NoZWNrQW5kQ3JlYXRlTWJyKHJ0a192bGFuX3QgdmlkLCBydGtfdWludDMyICpwSW5kZXgpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBzdmlkeDsKKyAgICBydGtfdWludDMyIGVtcHR5X2lkeCA9IDB4RkZGRjsKKyAgICBydGw4MzY3Y19zdmxhbl9tZW1jb25mX3Qgc3ZsYW5fY2ZnOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIHZpZCBtdXN0IGJlIDB+NDA5NSAqLworICAgIGlmICh2aWQgPiBSVEw4MzY3Q19WSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfVkxBTl9WSUQ7CisKKyAgICAvKiBOdWxsIHBvaW50ZXIgY2hlY2sgKi8KKyAgICBpZihOVUxMID09IHBJbmRleCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICAvKiBTZWFyY2ggZXhpc3QgZW50cnkgKi8KKyAgICBmb3IgKHN2aWR4ID0gMDsgc3ZpZHggPD0gUlRMODM2N0NfU1ZJRFhNQVg7IHN2aWR4KyspCisgICAgeworICAgICAgICBpZihzdmxhbl9tYnJDZmdVc2FnZVtzdmlkeF0gPT0gVFJVRSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoc3ZsYW5fbWJyQ2ZnVmlkW3N2aWR4XSA9PSB2aWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogRm91bmQhIHJldHVybiBpbmRleCAqLworICAgICAgICAgICAgICAgICpwSW5kZXggPSBzdmlkeDsKKyAgICAgICAgICAgICAgICByZXR1cm4gUlRfRVJSX09LOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoZW1wdHlfaWR4ID09IDB4RkZGRikKKyAgICAgICAgeworICAgICAgICAgICAgZW1wdHlfaWR4ID0gc3ZpZHg7CisgICAgICAgIH0KKworICAgIH0KKworICAgIGlmKGVtcHR5X2lkeCA9PSAweEZGRkYpCisgICAgeworICAgICAgICAvKiBObyBlbXB0eSBpbmRleCAqLworICAgICAgICByZXR1cm4gUlRfRVJSX1RCTF9GVUxMOworICAgIH0KKworICAgIHN2bGFuX21ickNmZ1VzYWdlW2VtcHR5X2lkeF0gPSBUUlVFOworICAgIHN2bGFuX21ickNmZ1ZpZFtlbXB0eV9pZHhdID0gdmlkOworCisgICAgbWVtc2V0KCZzdmxhbl9jZmcsIDAsIHNpemVvZihydGw4MzY3Y19zdmxhbl9tZW1jb25mX3QpKTsKKworICAgIHN2bGFuX2NmZy52c19zdmlkID0gdmlkOworICAgIC8qZm9yIGNyZWF0ZSBjaGVjayovCisgICAgaWYodmlkID09IDApCisgICAgeworICAgICAgICBzdmxhbl9jZmcudnNfZWZpZCA9IDE7CisgICAgfQorCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTdmxhbk1lbWJlckNvbmZpZ3VyYXRpb24oZW1wdHlfaWR4LCAmc3ZsYW5fY2ZnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgKnBJbmRleCA9IGVtcHR5X2lkeDsKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N2MvdHJhcC5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3RyYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjk2NjEwCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3RyYXAuYwpAQCAtMCwwICsxLDEyMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVhbHRlayBTZW1pY29uZHVjdG9yIENvcnAuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFVubGVzcyB5b3UgYW5kIFJlYWx0ZWsgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQorICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZAorICogdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICogYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2dwbC0yLjAudHh0CisgKgorICogJFJldmlzaW9uOiA3NjMwNiAkCisgKiAkRGF0ZTogMjAxNy0wMy0wOCAxNToxMzo1OCArMDgwMCAo6YCx5LiJLCAwOCDkuInmnIggMjAxNykgJAorICoKKyAqIFB1cnBvc2UgOiBSVEsgc3dpdGNoIGhpZ2gtbGV2ZWwgQVBJIGZvciBSVEw4MzY3L1JUTDgzNjdDCisgKiBGZWF0dXJlIDogSGVyZSBpcyBhIGxpc3Qgb2YgYWxsIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIGluIFRyYXAgbW9kdWxlLgorICoKKyAqLworCisjaW5jbHVkZSA8cnRrX3N3aXRjaC5oPgorI2luY2x1ZGUgPHJ0a19lcnJvci5oPgorI2luY2x1ZGUgPHRyYXAuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnYuaD4KKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2X3BvcnQuaD4KKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2X2lnbXAuaD4KKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2X3JtYS5oPgorI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnZfZWF2Lmg+CisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl9vYW0uaD4KKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2X3N2bGFuLmg+CisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl91bmtub3duTXVsdGljYXN0Lmg+CisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydl9kb3QxeC5oPgorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdHJhcF91bmtub3duVW5pY2FzdFBrdEFjdGlvbl9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgdW5rbm93biB1bmljYXN0IHBhY2tldCBhY3Rpb24gY29uZmlndXJhdGlvbi4KKyAqIElucHV0OgorICogICAgICBwb3J0ICAgICAgICAgICAgLSBpbmdyZXNzIHBvcnQgSUQgZm9yIHVua25vd24gdW5pY2FzdCBwYWNrZXQKKyAqICAgICAgdWNhc3RfYWN0aW9uICAgIC0gVW5rbm93biB1bmljYXN0IGFjdGlvbi4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfTk9UX0FMTE9XRUQgICAgICAgICAtIEludmFsaWQgYWN0aW9uLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBzZXQgdW5rbm93biB1bmljYXN0IHBhY2tldCBhY3Rpb24gY29uZmlndXJhdGlvbi4KKyAqICAgICAgVGhlIHVua25vd24gdW5pY2FzdCBhY3Rpb24gaXMgYXMgZm9sbG93aW5nOgorICogICAgICAgICAgLSBVQ0FTVF9BQ1RJT05fRk9SV0FSRF9QTUFTSworICogICAgICAgICAgLSBVQ0FTVF9BQ1RJT05fRFJPUAorICogICAgICAgICAgLSBVQ0FTVF9BQ1RJT05fVFJBUDJDUFUKKyAqICAgICAgICAgIC0gVUNBU1RfQUNUSU9OX0ZMT09ESU5HCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3RyYXBfdW5rbm93blVuaWNhc3RQa3RBY3Rpb25fc2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3RyYXBfdWNhc3RfYWN0aW9uX3QgdWNhc3RfYWN0aW9uKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIGNoZWNrIHBvcnQgdmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQocG9ydCk7CisKKyAgICBpZiAodWNhc3RfYWN0aW9uID49IFVDQVNUX0FDVElPTl9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQb3J0VW5rbm93bkRhQmVoYXZpb3IocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIHVjYXN0X2FjdGlvbikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a190cmFwX3Vua25vd25VbmljYXN0UGt0QWN0aW9uX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCB1bmtub3duIHVuaWNhc3QgcGFja2V0IGFjdGlvbiBjb25maWd1cmF0aW9uLgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgICAgICAtIGluZ3Jlc3MgcG9ydCBJRCBmb3IgdW5rbm93biB1bmljYXN0IHBhY2tldAorICogT3V0cHV0OgorICogICAgICBwVWNhc3RfYWN0aW9uICAgLSBVbmtub3duIHVuaWNhc3QgYWN0aW9uLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfTk9UX0FMTE9XRUQgICAgICAgICAtIEludmFsaWQgYWN0aW9uLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAgICAgICAgLSBOdWxsIHBvaW50ZXIKKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBnZXQgdW5rbm93biB1bmljYXN0IHBhY2tldCBhY3Rpb24gY29uZmlndXJhdGlvbi4KKyAqICAgICAgVGhlIHVua25vd24gdW5pY2FzdCBhY3Rpb24gaXMgYXMgZm9sbG93aW5nOgorICogICAgICAgICAgLSBVQ0FTVF9BQ1RJT05fRk9SV0FSRF9QTUFTSworICogICAgICAgICAgLSBVQ0FTVF9BQ1RJT05fRFJPUAorICogICAgICAgICAgLSBVQ0FTVF9BQ1RJT05fVFJBUDJDUFUKKyAqICAgICAgICAgIC0gVUNBU1RfQUNUSU9OX0ZMT09ESU5HCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3RyYXBfdW5rbm93blVuaWNhc3RQa3RBY3Rpb25fZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3RyYXBfdWNhc3RfYWN0aW9uX3QgKnBVY2FzdF9hY3Rpb24pCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogY2hlY2sgcG9ydCB2YWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwb3J0KTsKKworICAgIGlmIChOVUxMID09IHBVY2FzdF9hY3Rpb24pCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUG9ydFVua25vd25EYUJlaGF2aW9yKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCBwVWNhc3RfYWN0aW9uKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3RyYXBfdW5rbm93bk1hY1BrdEFjdGlvbl9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgdW5rbm93biBzb3VyY2UgTUFDIHBhY2tldCBhY3Rpb24gY29uZmlndXJhdGlvbi4KKyAqIElucHV0OgorICogICAgICB1Y2FzdF9hY3Rpb24gICAgLSBVbmtub3duIHNvdXJjZSBNQUMgYWN0aW9uLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9OT1RfQUxMT1dFRCAgICAgICAgIC0gSW52YWxpZCBhY3Rpb24uCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgY2FuIHNldCB1bmtub3duIHVuaWNhc3QgcGFja2V0IGFjdGlvbiBjb25maWd1cmF0aW9uLgorICogICAgICBUaGUgdW5rbm93biB1bmljYXN0IGFjdGlvbiBpcyBhcyBmb2xsb3dpbmc6CisgKiAgICAgICAgICAtIFVDQVNUX0FDVElPTl9GT1JXQVJEX1BNQVNLCisgKiAgICAgICAgICAtIFVDQVNUX0FDVElPTl9EUk9QCisgKiAgICAgICAgICAtIFVDQVNUX0FDVElPTl9UUkFQMkNQVQorICovCitydGtfYXBpX3JldF90IHJ0a190cmFwX3Vua25vd25NYWNQa3RBY3Rpb25fc2V0KHJ0a190cmFwX3VjYXN0X2FjdGlvbl90IHVjYXN0X2FjdGlvbikKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAodWNhc3RfYWN0aW9uID49IFVDQVNUX0FDVElPTl9GTE9PRElORykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BvcnRVbmtub3duU2FCZWhhdmlvcih1Y2FzdF9hY3Rpb24pKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdHJhcF91bmtub3duTWFjUGt0QWN0aW9uX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCB1bmtub3duIHNvdXJjZSBNQUMgcGFja2V0IGFjdGlvbiBjb25maWd1cmF0aW9uLgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBVY2FzdF9hY3Rpb24gICAtIFVua25vd24gc291cmNlIE1BQyBhY3Rpb24uCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgICAgICAgIC0gTnVsbCBQb2ludGVyLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKgorICovCitydGtfYXBpX3JldF90IHJ0a190cmFwX3Vua25vd25NYWNQa3RBY3Rpb25fZ2V0KHJ0a190cmFwX3VjYXN0X2FjdGlvbl90ICpwVWNhc3RfYWN0aW9uKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKE5VTEwgPT0gcFVjYXN0X2FjdGlvbikKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQb3J0VW5rbm93blNhQmVoYXZpb3IocFVjYXN0X2FjdGlvbikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a190cmFwX3VubWF0Y2hNYWNQa3RBY3Rpb25fc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHVubWF0Y2ggc291cmNlIE1BQyBwYWNrZXQgYWN0aW9uIGNvbmZpZ3VyYXRpb24uCisgKiBJbnB1dDoKKyAqICAgICAgdWNhc3RfYWN0aW9uICAgIC0gVW5rbm93biBzb3VyY2UgTUFDIGFjdGlvbi4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfTk9UX0FMTE9XRUQgICAgICAgICAtIEludmFsaWQgYWN0aW9uLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFRoaXMgQVBJIGNhbiBzZXQgdW5rbm93biB1bmljYXN0IHBhY2tldCBhY3Rpb24gY29uZmlndXJhdGlvbi4KKyAqICAgICAgVGhlIHVua25vd24gdW5pY2FzdCBhY3Rpb24gaXMgYXMgZm9sbG93aW5nOgorICogICAgICAgICAgLSBVQ0FTVF9BQ1RJT05fRk9SV0FSRF9QTUFTSworICogICAgICAgICAgLSBVQ0FTVF9BQ1RJT05fRFJPUAorICogICAgICAgICAgLSBVQ0FTVF9BQ1RJT05fVFJBUDJDUFUKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfdHJhcF91bm1hdGNoTWFjUGt0QWN0aW9uX3NldChydGtfdHJhcF91Y2FzdF9hY3Rpb25fdCB1Y2FzdF9hY3Rpb24pCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKHVjYXN0X2FjdGlvbiA+PSBVQ0FTVF9BQ1RJT05fRkxPT0RJTkcpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQb3J0VW5tYXRjaGVkU2FCZWhhdmlvcih1Y2FzdF9hY3Rpb24pKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdHJhcF91bm1hdGNoTWFjUGt0QWN0aW9uX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCB1bm1hdGNoIHNvdXJjZSBNQUMgcGFja2V0IGFjdGlvbiBjb25maWd1cmF0aW9uLgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBVY2FzdF9hY3Rpb24gICAtIFVua25vd24gc291cmNlIE1BQyBhY3Rpb24uCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9OT1RfQUxMT1dFRCAgICAgICAgIC0gSW52YWxpZCBhY3Rpb24uCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhpcyBBUEkgY2FuIHNldCB1bmtub3duIHVuaWNhc3QgcGFja2V0IGFjdGlvbiBjb25maWd1cmF0aW9uLgorICogICAgICBUaGUgdW5rbm93biB1bmljYXN0IGFjdGlvbiBpcyBhcyBmb2xsb3dpbmc6CisgKiAgICAgICAgICAtIFVDQVNUX0FDVElPTl9GT1JXQVJEX1BNQVNLCisgKiAgICAgICAgICAtIFVDQVNUX0FDVElPTl9EUk9QCisgKiAgICAgICAgICAtIFVDQVNUX0FDVElPTl9UUkFQMkNQVQorICovCitydGtfYXBpX3JldF90IHJ0a190cmFwX3VubWF0Y2hNYWNQa3RBY3Rpb25fZ2V0KHJ0a190cmFwX3VjYXN0X2FjdGlvbl90ICpwVWNhc3RfYWN0aW9uKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKE5VTEwgPT0gcFVjYXN0X2FjdGlvbikKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQb3J0VW5tYXRjaGVkU2FCZWhhdmlvcihwVWNhc3RfYWN0aW9uKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3RyYXBfdW5tYXRjaE1hY01vdmluZ19zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgdW5tYXRjaCBzb3VyY2UgTUFDIHBhY2tldCBtb3Zpbmcgc3RhdGUuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQb3J0IElELgorICogICAgICBlbmFibGUgICAgICAtIEVOQUJMRUQ6IGFsbG93IFNBIG1vdmluZywgRElTQUJMRTogZG9uJ3QgYWxsb3cgU0EgbW92aW5nLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9OT1RfQUxMT1dFRCAgICAgICAgIC0gSW52YWxpZCBhY3Rpb24uCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfdHJhcF91bm1hdGNoTWFjTW92aW5nX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19lbmFibGVfdCBlbmFibGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogY2hlY2sgcG9ydCB2YWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwb3J0KTsKKworICAgIGlmKGVuYWJsZSA+PSBSVEtfRU5BQkxFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BvcnRVbm1hdGNoZWRTYU1vdmluZyhydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgZW5hYmxlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3RyYXBfdW5tYXRjaE1hY01vdmluZ19nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgdW5tYXRjaCBzb3VyY2UgTUFDIHBhY2tldCBtb3Zpbmcgc3RhdGUuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQb3J0IElELgorICogT3V0cHV0OgorICogICAgICBwRW5hYmxlICAgICAtIEVOQUJMRUQ6IGFsbG93IFNBIG1vdmluZywgRElTQUJMRTogZG9uJ3QgYWxsb3cgU0EgbW92aW5nLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfTk9UX0FMTE9XRUQgICAgICAgICAtIEludmFsaWQgYWN0aW9uLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3RyYXBfdW5tYXRjaE1hY01vdmluZ19nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfZW5hYmxlX3QgKnBFbmFibGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogY2hlY2sgcG9ydCB2YWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwb3J0KTsKKworICAgIGlmKE5VTEwgPT0gcEVuYWJsZSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNQb3J0VW5tYXRjaGVkU2FNb3ZpbmcocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIHBFbmFibGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdHJhcF91bmtub3duTWNhc3RQa3RBY3Rpb25fc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IGJlaGF2aW9yIG9mIHVua25vd24gbXVsdGljYXN0CisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgICAgIC0gUG9ydCBpZC4KKyAqICAgICAgdHlwZSAgICAgICAgICAgIC0gdW5rbm93biBtdWx0aWNhc3QgcGFja2V0IHR5cGUuCisgKiAgICAgIG1jYXN0X2FjdGlvbiAgICAtIHVua25vd24gbXVsdGljYXN0IGFjdGlvbi4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqICAgICAgUlRfRVJSX05PVF9BTExPV0VEICAgICAtIEludmFsaWQgYWN0aW9uLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKiAgICAgIFdoZW4gcmVjZWl2ZXMgYW4gdW5rbm93biBtdWx0aWNhc3QgcGFja2V0LCBzd2l0Y2ggbWF5IHRyYXAsIGRyb3Agb3IgZmxvb2QgdGhpcyBwYWNrZXQKKyAqICAgICAgKDEpIFRoZSB1bmtub3duIG11bHRpY2FzdCBwYWNrZXQgdHlwZSBpcyBhcyBmb2xsb3dpbmc6CisgKiAgICAgICAgICAtIE1DQVNUX0wyCisgKiAgICAgICAgICAtIE1DQVNUX0lQVjQKKyAqICAgICAgICAgIC0gTUNBU1RfSVBWNgorICogICAgICAoMikgVGhlIHVua25vd24gbXVsdGljYXN0IGFjdGlvbiBpcyBhcyBmb2xsb3dpbmc6CisgKiAgICAgICAgICAtIE1DQVNUX0FDVElPTl9GT1JXQVJECisgKiAgICAgICAgICAtIE1DQVNUX0FDVElPTl9EUk9QCisgKiAgICAgICAgICAtIE1DQVNUX0FDVElPTl9UUkFQMkNQVQorICovCitydGtfYXBpX3JldF90IHJ0a190cmFwX3Vua25vd25NY2FzdFBrdEFjdGlvbl9zZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfbWNhc3RfdHlwZV90IHR5cGUsIHJ0a190cmFwX21jYXN0X2FjdGlvbl90IG1jYXN0X2FjdGlvbikKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHJhd0FjdGlvbjsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBQb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgaWYgKHR5cGUgPj0gTUNBU1RfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYgKG1jYXN0X2FjdGlvbiA+PSBNQ0FTVF9BQ1RJT05fRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgICBjYXNlIE1DQVNUX0wyOgorICAgICAgICAgICAgaWYgKE1DQVNUX0FDVElPTl9ST1VURVJfUE9SVCA9PSBtY2FzdF9hY3Rpb24pCisgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKyAgICAgICAgICAgIGVsc2UgaWYoTUNBU1RfQUNUSU9OX0RST1BfRVhfUk1BID09IG1jYXN0X2FjdGlvbikKKyAgICAgICAgICAgICAgICByYXdBY3Rpb24gPSBMMl9VTktPV05fTVVMVElDQVNUX0RST1BfRVhDTFVERV9STUE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmF3QWN0aW9uID0gKHJ0a191aW50MzIpbWNhc3RfYWN0aW9uOworCisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNVbmtub3duTDJNdWx0aWNhc3RCZWhhdmlvcihydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgcmF3QWN0aW9uKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1DQVNUX0lQVjQ6CisgICAgICAgICAgICBpZiAoTUNBU1RfQUNUSU9OX0RST1BfRVhfUk1BID09IG1jYXN0X2FjdGlvbikKKyAgICAgICAgICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJhd0FjdGlvbiA9IChydGtfdWludDMyKW1jYXN0X2FjdGlvbjsKKworICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljVW5rbm93bklQdjRNdWx0aWNhc3RCZWhhdmlvcihydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgcmF3QWN0aW9uKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1DQVNUX0lQVjY6CisgICAgICAgICAgICBpZiAoTUNBU1RfQUNUSU9OX0RST1BfRVhfUk1BID09IG1jYXN0X2FjdGlvbikKKyAgICAgICAgICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJhd0FjdGlvbiA9IChydGtfdWludDMyKW1jYXN0X2FjdGlvbjsKKworICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljVW5rbm93bklQdjZNdWx0aWNhc3RCZWhhdmlvcihydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgcmF3QWN0aW9uKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3RyYXBfdW5rbm93bk1jYXN0UGt0QWN0aW9uX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBiZWhhdmlvciBvZiB1bmtub3duIG11bHRpY2FzdAorICogSW5wdXQ6CisgKiAgICAgIHR5cGUgLSB1bmtub3duIG11bHRpY2FzdCBwYWNrZXQgdHlwZS4KKyAqIE91dHB1dDoKKyAqICAgICAgcE1jYXN0X2FjdGlvbiAtIHVua25vd24gbXVsdGljYXN0IGFjdGlvbi4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfTk9UX0FMTE9XRUQgICAgICAgICAtIEludmFsaWQgb3BlcmF0aW9uLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBXaGVuIHJlY2VpdmVzIGFuIHVua25vd24gbXVsdGljYXN0IHBhY2tldCwgc3dpdGNoIG1heSB0cmFwLCBkcm9wIG9yIGZsb29kIHRoaXMgcGFja2V0CisgKiAgICAgICgxKSBUaGUgdW5rbm93biBtdWx0aWNhc3QgcGFja2V0IHR5cGUgaXMgYXMgZm9sbG93aW5nOgorICogICAgICAgICAgLSBNQ0FTVF9MMgorICogICAgICAgICAgLSBNQ0FTVF9JUFY0CisgKiAgICAgICAgICAtIE1DQVNUX0lQVjYKKyAqICAgICAgKDIpIFRoZSB1bmtub3duIG11bHRpY2FzdCBhY3Rpb24gaXMgYXMgZm9sbG93aW5nOgorICogICAgICAgICAgLSBNQ0FTVF9BQ1RJT05fRk9SV0FSRAorICogICAgICAgICAgLSBNQ0FTVF9BQ1RJT05fRFJPUAorICogICAgICAgICAgLSBNQ0FTVF9BQ1RJT05fVFJBUDJDUFUKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfdHJhcF91bmtub3duTWNhc3RQa3RBY3Rpb25fZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX21jYXN0X3R5cGVfdCB0eXBlLCBydGtfdHJhcF9tY2FzdF9hY3Rpb25fdCAqcE1jYXN0X2FjdGlvbikKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIHJhd0FjdGlvbjsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBQb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgaWYgKHR5cGUgPj0gTUNBU1RfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYoTlVMTCA9PSBwTWNhc3RfYWN0aW9uKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICAgIGNhc2UgTUNBU1RfTDI6CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNVbmtub3duTDJNdWx0aWNhc3RCZWhhdmlvcihydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgJnJhd0FjdGlvbikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBpZihMMl9VTktPV05fTVVMVElDQVNUX0RST1BfRVhDTFVERV9STUEgPT0gcmF3QWN0aW9uKQorICAgICAgICAgICAgICAgICpwTWNhc3RfYWN0aW9uID0gTUNBU1RfQUNUSU9OX0RST1BfRVhfUk1BOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICpwTWNhc3RfYWN0aW9uID0gKHJ0a190cmFwX21jYXN0X2FjdGlvbl90KXJhd0FjdGlvbjsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTUNBU1RfSVBWNDoKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1Vua25vd25JUHY0TXVsdGljYXN0QmVoYXZpb3IocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksICZyYXdBY3Rpb24pKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgKnBNY2FzdF9hY3Rpb24gPSAocnRrX3RyYXBfbWNhc3RfYWN0aW9uX3QpcmF3QWN0aW9uOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTUNBU1RfSVBWNjoKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1Vua25vd25JUHY2TXVsdGljYXN0QmVoYXZpb3IocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksICZyYXdBY3Rpb24pKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgKnBNY2FzdF9hY3Rpb24gPSAocnRrX3RyYXBfbWNhc3RfYWN0aW9uX3QpcmF3QWN0aW9uOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdHJhcF9sbGRwRW5hYmxlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBMTERQIGVuYWJsZS4KKyAqIElucHV0OgorICogICAgICBlbmFibGVkIC0gTExEUCBlbmFibGUsIDA6IGZvbGxvdyBSTUEsIDE6IHVzZSBMTERQIGFjdGlvbi4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfTk9UX0FMTE9XRUQgICAgICAgICAtIEludmFsaWQgYWN0aW9uLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICAtIERNQUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzaWdubWVudAorICogICAgICAtIDAxOjgwOmMyOjAwOjAwOjBlIGV0aGVydHlwZSA9IDB4ODhDQyAgICBMTERQCisgKiAgICAgIC0gMDE6ODA6YzI6MDA6MDA6MDMgZXRoZXJ0eXBlID0gMHg4OENDCisgKiAgICAgIC0gMDE6ODA6YzI6MDA6MDA6MDAgZXRoZXJ0eXBlID0gMHg4OENDCisKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfdHJhcF9sbGRwRW5hYmxlX3NldChydGtfZW5hYmxlX3QgZW5hYmxlZCkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGw4MzY3Y19ybWFfdCBybWFjZmc7CisgICAgcnRrX2VuYWJsZV90IHRtcDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAoZW5hYmxlZCA+PSBSVEtfRU5BQkxFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9FTkFCTEU7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSbWFMbGRwKCZ0bXAsICZybWFjZmcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSbWFMbGRwKGVuYWJsZWQsICZybWFjZmcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdHJhcF9sbGRwRW5hYmxlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBMTERQIHN0YXR1cy4KKyAqIElucHV0OgorICogICAgICBOb25lCisgKiBPdXRwdXQ6CisgKiAgICAgIHBFbmFibGVkIC0gTExEUCBlbmFibGUsIDA6IGZvbGxvdyBSTUEsIDE6IHVzZSBMTERQIGFjdGlvbi4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBMTERQIGlzIGFzIGZvbGxvd2luZyBkZWZpbml0aW9uLgorICogICAgICAtIERNQUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzaWdubWVudAorICogICAgICAtIDAxOjgwOmMyOjAwOjAwOjBlIGV0aGVydHlwZSA9IDB4ODhDQyAgICBMTERQCisgKiAgICAgIC0gMDE6ODA6YzI6MDA6MDA6MDMgZXRoZXJ0eXBlID0gMHg4OENDCisgKiAgICAgIC0gMDE6ODA6YzI6MDA6MDA6MDAgZXRoZXJ0eXBlID0gMHg4OENDCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3RyYXBfbGxkcEVuYWJsZV9nZXQocnRrX2VuYWJsZV90ICpwRW5hYmxlZCkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGw4MzY3Y19ybWFfdCBybWFjZmc7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoTlVMTCA9PSBwRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSbWFMbGRwKHBFbmFibGVkLCAmcm1hY2ZnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3RyYXBfcmVhc29uVHJhcFRvQ3B1UHJpb3JpdHlfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHByaW9yaXR5IHZhbHVlIG9mIGEgcGFja2V0IHRoYXQgdHJhcHBlZCB0byBDUFUgcG9ydCBhY2NvcmRpbmcgdG8gc3BlY2lmaWMgcmVhc29uLgorICogSW5wdXQ6CisgKiAgICAgIHR5cGUgICAgIC0gcmVhc29uIHRoYXQgdHJhcCB0byBDUFUgcG9ydC4KKyAqICAgICAgcHJpb3JpdHkgLSBpbnRlcm5hbCBwcmlvcml0eSB0aGF0IGlzIGdvaW5nIHRvIGJlIHNldCBmb3Igc3BlY2lmaWMgdHJhcCByZWFzb24uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiAgICAgIFJUX0VSUl9OT1RfSU5JVCAtIFRoZSBtb2R1bGUgaXMgbm90IGluaXRpYWwKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIKKyAqIE5vdGU6CisgKiAgICAgIEN1cnJlbnRseSB0aGUgdHJhcCByZWFzb24gdGhhdCBzdXBwb3J0ZWQgYXJlIGxpc3RlZCBhcyBmb2xsb3dzOgorICogICAgICAtIFRSQVBfUkVBU09OX1JNQQorICogICAgICAtIFRSQVBfUkVBU09OX09BTQorICogICAgICAtIFRSQVBfUkVBU09OXzFYVU5BVVRICisgKiAgICAgIC0gVFJBUF9SRUFTT05fVkxBTlNUQUNLCisgKiAgICAgIC0gVFJBUF9SRUFTT05fVU5LTk9XTk1DCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3RyYXBfcmVhc29uVHJhcFRvQ3B1UHJpb3JpdHlfc2V0KHJ0a190cmFwX3JlYXNvbl90eXBlX3QgdHlwZSwgcnRrX3ByaV90IHByaW9yaXR5KQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0bDgzNjdjX3JtYV90IHJtYWNmZzsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAodHlwZSA+PSBUUkFQX1JFQVNPTl9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZiAocHJpb3JpdHkgPiBSVEw4MzY3Q19QUklNQVgpCisgICAgICAgIHJldHVybiAgUlRfRVJSX1FPU19JTlRfUFJJT1JJVFk7CisKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgICBjYXNlIFRSQVBfUkVBU09OX1JNQToKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JtYSgwLCAmcm1hY2ZnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgICAgICBybWFjZmcudHJhcF9wcmlvcml0eT0gcHJpb3JpdHk7CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSbWEoMCwgJnJtYWNmZykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUUkFQX1JFQVNPTl9PQU06CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNPYW1DcHVQcmkocHJpb3JpdHkpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVFJBUF9SRUFTT05fMVhVTkFVVEg6CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWMxeFRyYXBQcmlvcml0eShwcmlvcml0eSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUUkFQX1JFQVNPTl9WTEFOU1RBQ0s6CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTdmxhblRyYXBQcmlvcml0eShwcmlvcml0eSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUUkFQX1JFQVNPTl9VTktOT1dOTUM6CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNVbmtub3duTXVsdGljYXN0VHJhcFByaW9yaXR5KHByaW9yaXR5KSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9DSElQX05PVF9TVVBQT1JURUQ7CisgICAgfQorCisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a190cmFwX3JlYXNvblRyYXBUb0NwdVByaW9yaXR5X2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBwcmlvcml0eSB2YWx1ZSBvZiBhIHBhY2tldCB0aGF0IHRyYXBwZWQgdG8gQ1BVIHBvcnQgYWNjb3JkaW5nIHRvIHNwZWNpZmljIHJlYXNvbi4KKyAqIElucHV0OgorICogICAgICB0eXBlICAgICAgLSByZWFzb24gdGhhdCB0cmFwIHRvIENQVSBwb3J0LgorICogT3V0cHV0OgorICogICAgICBwUHJpb3JpdHkgLSBjb25maWd1cmVkIGludGVybmFsIHByaW9yaXR5IGZvciBzdWNoIHJlYXNvbi4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX05PVF9JTklUICAgICAtIFRoZSBtb2R1bGUgaXMgbm90IGluaXRpYWwKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVyCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgLSBOVUxMIHBvaW50ZXIKKyAqIE5vdGU6CisgKiAgICAgIEN1cnJlbnRseSB0aGUgdHJhcCByZWFzb24gdGhhdCBzdXBwb3J0ZWQgYXJlIGxpc3RlZCBhcyBmb2xsb3dzOgorICogICAgICAtIFRSQVBfUkVBU09OX1JNQQorICogICAgICAtIFRSQVBfUkVBU09OX09BTQorICogICAgICAtIFRSQVBfUkVBU09OXzFYVU5BVVRICisgKiAgICAgIC0gVFJBUF9SRUFTT05fVkxBTlNUQUNLCisgKiAgICAgIC0gVFJBUF9SRUFTT05fVU5LTk9XTk1DCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3RyYXBfcmVhc29uVHJhcFRvQ3B1UHJpb3JpdHlfZ2V0KHJ0a190cmFwX3JlYXNvbl90eXBlX3QgdHlwZSwgcnRrX3ByaV90ICpwUHJpb3JpdHkpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRsODM2N2Nfcm1hX3Qgcm1hY2ZnOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmICh0eXBlID49IFRSQVBfUkVBU09OX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmKE5VTEwgPT0gcFByaW9yaXR5KQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICAgIGNhc2UgVFJBUF9SRUFTT05fUk1BOgorICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUm1hKDAsICZybWFjZmcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgICAgICpwUHJpb3JpdHkgPSBybWFjZmcudHJhcF9wcmlvcml0eTsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVFJBUF9SRUFTT05fT0FNOgorICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljT2FtQ3B1UHJpKHBQcmlvcml0eSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUUkFQX1JFQVNPTl8xWFVOQVVUSDoKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpYzF4VHJhcFByaW9yaXR5KHBQcmlvcml0eSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUUkFQX1JFQVNPTl9WTEFOU1RBQ0s6CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNTdmxhblRyYXBQcmlvcml0eShwUHJpb3JpdHkpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVFJBUF9SRUFTT05fVU5LTk9XTk1DOgorICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljVW5rbm93bk11bHRpY2FzdFRyYXBQcmlvcml0eShwUHJpb3JpdHkpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gUlRfRVJSX0NISVBfTk9UX1NVUFBPUlRFRDsKKworICAgIH0KKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdHJhcF9ybWFBY3Rpb25fc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IFJlc2VydmVkIG11bHRpY2FzdCBhZGRyZXNzIGFjdGlvbiBjb25maWd1cmF0aW9uLgorICogSW5wdXQ6CisgKiAgICAgIHR5cGUgICAgLSBybWEgdHlwZS4KKyAqICAgICAgcm1hX2FjdGlvbiAtIFJNQSBhY3Rpb24uCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqIE5vdGU6CisgKgorICogICAgICBUaGVyZSBhcmUgNDggdHlwZXMgb2YgUmVzZXJ2ZWQgTXVsdGljYXN0IEFkZHJlc3MgZnJhbWUgZm9yIGFwcGxpY2F0aW9uIHVzYWdlLgorICogICAgICAoMSlUaGV5IGFyZSBhcyBmb2xsb3dpbmcgZGVmaW5pdGlvbi4KKyAqICAgICAgLSBUUkFQX0JSR19HUk9VUCwKKyAqICAgICAgLSBUUkFQX0ZEX1BBVVNFLAorICogICAgICAtIFRSQVBfU1BfTUNBU1QsCisgKiAgICAgIC0gVFJBUF8xWF9QQUUsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9CUkdfMDQsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9CUkdfMDUsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9CUkdfMDYsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9CUkdfMDcsCisgKiAgICAgIC0gVFJBUF9QUk9WSURFUl9CUklER0VfR1JPVVBfQUREUkVTUywKKyAqICAgICAgLSBUUkFQX1VOREVGX0JSR18wOSwKKyAqICAgICAgLSBUUkFQX1VOREVGX0JSR18wQSwKKyAqICAgICAgLSBUUkFQX1VOREVGX0JSR18wQiwKKyAqICAgICAgLSBUUkFQX1VOREVGX0JSR18wQywKKyAqICAgICAgLSBUUkFQX1BST1ZJREVSX0JSSURHRV9HVlJQX0FERFJFU1MsCisgKiAgICAgIC0gVFJBUF84MDIxQUIsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9CUkdfMEYsCisgKiAgICAgIC0gVFJBUF9CUkdfTU5HRU1FTlQsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTEsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTIsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTMsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTQsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTUsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTYsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTcsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTgsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTksCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMUEsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMUIsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMUMsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMUQsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMUUsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMUYsCisgKiAgICAgIC0gVFJBUF9HTVJQLAorICogICAgICAtIFRSQVBfR1ZSUCwKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMjIsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzIzLAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yNCwKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMjUsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzI2LAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yNywKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMjgsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzI5LAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yQSwKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMkIsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzJDLAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yRCwKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMkUsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzJGLAorICogICAgICAtIFRSQVBfQ0RQLgorICogICAgICAtIFRSQVBfQ1NTVFAuCisgKiAgICAgIC0gVFJBUF9MTERQLgorICogICAgICAoMikgVGhlIFJNQSBhY3Rpb24gaXMgYXMgZm9sbG93aW5nOgorICogICAgICAtIFJNQV9BQ1RJT05fRk9SV0FSRAorICogICAgICAtIFJNQV9BQ1RJT05fVFJBUDJDUFUKKyAqICAgICAgLSBSTUFfQUNUSU9OX0RST1AKKyAqICAgICAgLSBSTUFfQUNUSU9OX0ZPUldBUkRfRVhDTFVERV9DUFUKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfdHJhcF9ybWFBY3Rpb25fc2V0KHJ0a190cmFwX3R5cGVfdCB0eXBlLCBydGtfdHJhcF9ybWFfYWN0aW9uX3Qgcm1hX2FjdGlvbikKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGw4MzY3Y19ybWFfdCBybWFjZmc7CisgICAgcnRrX3VpbnQzMiB0bXA7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKHR5cGUgPj0gVFJBUF9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZiAocm1hX2FjdGlvbiA+PSBSTUFfQUNUSU9OX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9STUFfQUNUSU9OOworCisgICAgaWYgKHR5cGUgPj0gMCAmJiB0eXBlIDw9IFRSQVBfVU5ERUZfR0FSUF8yRikKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JtYSh0eXBlLCAmcm1hY2ZnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBybWFjZmcub3BlcmF0aW9uID0gcm1hX2FjdGlvbjsKKworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSbWEodHlwZSwgJnJtYWNmZykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUgPT0gVFJBUF9DRFApCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSbWFDZHAoJnJtYWNmZykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgcm1hY2ZnLm9wZXJhdGlvbiA9IHJtYV9hY3Rpb247CisKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUm1hQ2RwKCZybWFjZmcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlICA9PSBUUkFQX0NTU1RQKQorICAgIHsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUm1hQ3NzdHAoJnJtYWNmZykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgcm1hY2ZnLm9wZXJhdGlvbiA9IHJtYV9hY3Rpb247CisKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUm1hQ3NzdHAoJnJtYWNmZykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUgID09IFRSQVBfTExEUCkKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JtYUxsZHAoJnRtcCwgJnJtYWNmZykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgcm1hY2ZnLm9wZXJhdGlvbiA9IHJtYV9hY3Rpb247CisKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUm1hTGxkcCh0bXAsICZybWFjZmcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdHJhcF9ybWFBY3Rpb25fZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFJlc2VydmVkIG11bHRpY2FzdCBhZGRyZXNzIGFjdGlvbiBjb25maWd1cmF0aW9uLgorICogSW5wdXQ6CisgKiAgICAgIHR5cGUgLSBybWEgdHlwZS4KKyAqIE91dHB1dDoKKyAqICAgICAgcFJtYV9hY3Rpb24gLSBSTUEgYWN0aW9uLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqICAgICAgVGhlcmUgYXJlIDQ4IHR5cGVzIG9mIFJlc2VydmVkIE11bHRpY2FzdCBBZGRyZXNzIGZyYW1lIGZvciBhcHBsaWNhdGlvbiB1c2FnZS4KKyAqICAgICAgKDEpVGhleSBhcmUgYXMgZm9sbG93aW5nIGRlZmluaXRpb24uCisgKiAgICAgIC0gVFJBUF9CUkdfR1JPVVAsCisgKiAgICAgIC0gVFJBUF9GRF9QQVVTRSwKKyAqICAgICAgLSBUUkFQX1NQX01DQVNULAorICogICAgICAtIFRSQVBfMVhfUEFFLAorICogICAgICAtIFRSQVBfVU5ERUZfQlJHXzA0LAorICogICAgICAtIFRSQVBfVU5ERUZfQlJHXzA1LAorICogICAgICAtIFRSQVBfVU5ERUZfQlJHXzA2LAorICogICAgICAtIFRSQVBfVU5ERUZfQlJHXzA3LAorICogICAgICAtIFRSQVBfUFJPVklERVJfQlJJREdFX0dST1VQX0FERFJFU1MsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9CUkdfMDksCisgKiAgICAgIC0gVFJBUF9VTkRFRl9CUkdfMEEsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9CUkdfMEIsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9CUkdfMEMsCisgKiAgICAgIC0gVFJBUF9QUk9WSURFUl9CUklER0VfR1ZSUF9BRERSRVNTLAorICogICAgICAtIFRSQVBfODAyMUFCLAorICogICAgICAtIFRSQVBfVU5ERUZfQlJHXzBGLAorICogICAgICAtIFRSQVBfQlJHX01OR0VNRU5ULAorICogICAgICAtIFRSQVBfVU5ERUZJTkVEXzExLAorICogICAgICAtIFRSQVBfVU5ERUZJTkVEXzEyLAorICogICAgICAtIFRSQVBfVU5ERUZJTkVEXzEzLAorICogICAgICAtIFRSQVBfVU5ERUZJTkVEXzE0LAorICogICAgICAtIFRSQVBfVU5ERUZJTkVEXzE1LAorICogICAgICAtIFRSQVBfVU5ERUZJTkVEXzE2LAorICogICAgICAtIFRSQVBfVU5ERUZJTkVEXzE3LAorICogICAgICAtIFRSQVBfVU5ERUZJTkVEXzE4LAorICogICAgICAtIFRSQVBfVU5ERUZJTkVEXzE5LAorICogICAgICAtIFRSQVBfVU5ERUZJTkVEXzFBLAorICogICAgICAtIFRSQVBfVU5ERUZJTkVEXzFCLAorICogICAgICAtIFRSQVBfVU5ERUZJTkVEXzFDLAorICogICAgICAtIFRSQVBfVU5ERUZJTkVEXzFELAorICogICAgICAtIFRSQVBfVU5ERUZJTkVEXzFFLAorICogICAgICAtIFRSQVBfVU5ERUZJTkVEXzFGLAorICogICAgICAtIFRSQVBfR01SUCwKKyAqICAgICAgLSBUUkFQX0dWUlAsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzIyLAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yMywKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMjQsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzI1LAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yNiwKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMjcsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzI4LAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yOSwKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMkEsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzJCLAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yQywKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMkQsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzJFLAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yRiwKKyAqICAgICAgLSBUUkFQX0NEUC4KKyAqICAgICAgLSBUUkFQX0NTU1RQLgorICogICAgICAtIFRSQVBfTExEUC4KKyAqICAgICAgKDIpIFRoZSBSTUEgYWN0aW9uIGlzIGFzIGZvbGxvd2luZzoKKyAqICAgICAgLSBSTUFfQUNUSU9OX0ZPUldBUkQKKyAqICAgICAgLSBSTUFfQUNUSU9OX1RSQVAyQ1BVCisgKiAgICAgIC0gUk1BX0FDVElPTl9EUk9QCisgKiAgICAgIC0gUk1BX0FDVElPTl9GT1JXQVJEX0VYQ0xVREVfQ1BVCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3RyYXBfcm1hQWN0aW9uX2dldChydGtfdHJhcF90eXBlX3QgdHlwZSwgcnRrX3RyYXBfcm1hX2FjdGlvbl90ICpwUm1hX2FjdGlvbikKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGw4MzY3Y19ybWFfdCBybWFjZmc7CisgICAgcnRrX3VpbnQzMiB0bXA7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKHR5cGUgPj0gVFJBUF9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZihOVUxMID09IHBSbWFfYWN0aW9uKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICh0eXBlID49IDAgJiYgdHlwZSA8PSBUUkFQX1VOREVGX0dBUlBfMkYpCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSbWEodHlwZSwgJnJtYWNmZykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgKnBSbWFfYWN0aW9uID0gcm1hY2ZnLm9wZXJhdGlvbjsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZSA9PSBUUkFQX0NEUCkKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JtYUNkcCgmcm1hY2ZnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAqcFJtYV9hY3Rpb24gPSBybWFjZmcub3BlcmF0aW9uOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlID09IFRSQVBfQ1NTVFApCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSbWFDc3N0cCgmcm1hY2ZnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAqcFJtYV9hY3Rpb24gPSBybWFjZmcub3BlcmF0aW9uOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlID09IFRSQVBfTExEUCkKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JtYUxsZHAoJnRtcCwmcm1hY2ZnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAqcFJtYV9hY3Rpb24gPSBybWFjZmcub3BlcmF0aW9uOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdHJhcF9ybWFLZWVwRm9ybWF0X3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBSZXNlcnZlZCBtdWx0aWNhc3QgYWRkcmVzcyBrZWVwIGZvcm1hdCBjb25maWd1cmF0aW9uLgorICogSW5wdXQ6CisgKiAgICAgIHR5cGUgICAgLSBybWEgdHlwZS4KKyAqICAgICAgZW5hYmxlIC0gZW5hYmxlIGtlZXAgZm9ybWF0LgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiAgICAgIFJUX0VSUl9FTkFCTEUgICAgICAgLSBJbnZhbGlkIElGRyBwYXJhbWV0ZXIKKyAqIE5vdGU6CisgKgorICogICAgICBUaGVyZSBhcmUgNDggdHlwZXMgb2YgUmVzZXJ2ZWQgTXVsdGljYXN0IEFkZHJlc3MgZnJhbWUgZm9yIGFwcGxpY2F0aW9uIHVzYWdlLgorICogICAgICBUaGV5IGFyZSBhcyBmb2xsb3dpbmcgZGVmaW5pdGlvbi4KKyAqICAgICAgLSBUUkFQX0JSR19HUk9VUCwKKyAqICAgICAgLSBUUkFQX0ZEX1BBVVNFLAorICogICAgICAtIFRSQVBfU1BfTUNBU1QsCisgKiAgICAgIC0gVFJBUF8xWF9QQUUsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9CUkdfMDQsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9CUkdfMDUsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9CUkdfMDYsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9CUkdfMDcsCisgKiAgICAgIC0gVFJBUF9QUk9WSURFUl9CUklER0VfR1JPVVBfQUREUkVTUywKKyAqICAgICAgLSBUUkFQX1VOREVGX0JSR18wOSwKKyAqICAgICAgLSBUUkFQX1VOREVGX0JSR18wQSwKKyAqICAgICAgLSBUUkFQX1VOREVGX0JSR18wQiwKKyAqICAgICAgLSBUUkFQX1VOREVGX0JSR18wQywKKyAqICAgICAgLSBUUkFQX1BST1ZJREVSX0JSSURHRV9HVlJQX0FERFJFU1MsCisgKiAgICAgIC0gVFJBUF84MDIxQUIsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9CUkdfMEYsCisgKiAgICAgIC0gVFJBUF9CUkdfTU5HRU1FTlQsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTEsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTIsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTMsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTQsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTUsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTYsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTcsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTgsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTksCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMUEsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMUIsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMUMsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMUQsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMUUsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMUYsCisgKiAgICAgIC0gVFJBUF9HTVJQLAorICogICAgICAtIFRSQVBfR1ZSUCwKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMjIsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzIzLAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yNCwKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMjUsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzI2LAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yNywKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMjgsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzI5LAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yQSwKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMkIsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzJDLAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yRCwKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMkUsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzJGLAorICogICAgICAtIFRSQVBfQ0RQLgorICogICAgICAtIFRSQVBfQ1NTVFAuCisgKiAgICAgIC0gVFJBUF9MTERQLgorICovCitydGtfYXBpX3JldF90IHJ0a190cmFwX3JtYUtlZXBGb3JtYXRfc2V0KHJ0a190cmFwX3R5cGVfdCB0eXBlLCBydGtfZW5hYmxlX3QgZW5hYmxlKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0bDgzNjdjX3JtYV90IHJtYWNmZzsKKyAgICBydGtfdWludDMyIHRtcDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAodHlwZSA+PSBUUkFQX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmIChlbmFibGUgPj0gUlRLX0VOQUJMRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZiAodHlwZSA+PSAwICYmIHR5cGUgPD0gVFJBUF9VTkRFRl9HQVJQXzJGKQorICAgIHsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUm1hKHR5cGUsICZybWFjZmcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIHJtYWNmZy5rZWVwX2Zvcm1hdCA9IGVuYWJsZTsKKworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSbWEodHlwZSwgJnJtYWNmZykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUgPT0gVFJBUF9DRFApCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSbWFDZHAoJnJtYWNmZykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgcm1hY2ZnLmtlZXBfZm9ybWF0ID0gZW5hYmxlOworCisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JtYUNkcCgmcm1hY2ZnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZSAgPT0gVFJBUF9DU1NUUCkKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JtYUNzc3RwKCZybWFjZmcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIHJtYWNmZy5rZWVwX2Zvcm1hdCA9IGVuYWJsZTsKKworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNSbWFDc3N0cCgmcm1hY2ZnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZSAgPT0gVFJBUF9MTERQKQorICAgIHsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUm1hTGxkcCgmdG1wLCAmcm1hY2ZnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBybWFjZmcua2VlcF9mb3JtYXQgPSBlbmFibGU7CisKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUm1hTGxkcCh0bXAsICZybWFjZmcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdHJhcF9ybWFLZWVwRm9ybWF0X2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBSZXNlcnZlZCBtdWx0aWNhc3QgYWRkcmVzcyBhY3Rpb24gY29uZmlndXJhdGlvbi4KKyAqIElucHV0OgorICogICAgICB0eXBlIC0gcm1hIHR5cGUuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBFbmFibGUgLSBrZWVwIGZvcm1hdCBzdGF0dXMuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICogICAgICBUaGVyZSBhcmUgNDggdHlwZXMgb2YgUmVzZXJ2ZWQgTXVsdGljYXN0IEFkZHJlc3MgZnJhbWUgZm9yIGFwcGxpY2F0aW9uIHVzYWdlLgorICogICAgICBUaGV5IGFyZSBhcyBmb2xsb3dpbmcgZGVmaW5pdGlvbi4KKyAqICAgICAgLSBUUkFQX0JSR19HUk9VUCwKKyAqICAgICAgLSBUUkFQX0ZEX1BBVVNFLAorICogICAgICAtIFRSQVBfU1BfTUNBU1QsCisgKiAgICAgIC0gVFJBUF8xWF9QQUUsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9CUkdfMDQsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9CUkdfMDUsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9CUkdfMDYsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9CUkdfMDcsCisgKiAgICAgIC0gVFJBUF9QUk9WSURFUl9CUklER0VfR1JPVVBfQUREUkVTUywKKyAqICAgICAgLSBUUkFQX1VOREVGX0JSR18wOSwKKyAqICAgICAgLSBUUkFQX1VOREVGX0JSR18wQSwKKyAqICAgICAgLSBUUkFQX1VOREVGX0JSR18wQiwKKyAqICAgICAgLSBUUkFQX1VOREVGX0JSR18wQywKKyAqICAgICAgLSBUUkFQX1BST1ZJREVSX0JSSURHRV9HVlJQX0FERFJFU1MsCisgKiAgICAgIC0gVFJBUF84MDIxQUIsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9CUkdfMEYsCisgKiAgICAgIC0gVFJBUF9CUkdfTU5HRU1FTlQsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTEsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTIsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTMsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTQsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTUsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTYsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTcsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTgsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMTksCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMUEsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMUIsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMUMsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMUQsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMUUsCisgKiAgICAgIC0gVFJBUF9VTkRFRklORURfMUYsCisgKiAgICAgIC0gVFJBUF9HTVJQLAorICogICAgICAtIFRSQVBfR1ZSUCwKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMjIsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzIzLAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yNCwKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMjUsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzI2LAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yNywKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMjgsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzI5LAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yQSwKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMkIsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzJDLAorICogICAgICAtIFRSQVBfVU5ERUZfR0FSUF8yRCwKKyAqICAgICAgLSBUUkFQX1VOREVGX0dBUlBfMkUsCisgKiAgICAgIC0gVFJBUF9VTkRFRl9HQVJQXzJGLAorICogICAgICAtIFRSQVBfQ0RQLgorICogICAgICAtIFRSQVBfQ1NTVFAuCisgKiAgICAgIC0gVFJBUF9MTERQLgorICovCitydGtfYXBpX3JldF90IHJ0a190cmFwX3JtYUtlZXBGb3JtYXRfZ2V0KHJ0a190cmFwX3R5cGVfdCB0eXBlLCBydGtfZW5hYmxlX3QgKnBFbmFibGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRsODM2N2Nfcm1hX3Qgcm1hY2ZnOworICAgIHJ0a191aW50MzIgdG1wOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmICh0eXBlID49IFRSQVBfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYoTlVMTCA9PSBwRW5hYmxlKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICh0eXBlID49IDAgJiYgdHlwZSA8PSBUUkFQX1VOREVGX0dBUlBfMkYpCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSbWEodHlwZSwgJnJtYWNmZykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgKnBFbmFibGUgPSBybWFjZmcua2VlcF9mb3JtYXQ7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUgPT0gVFJBUF9DRFApCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSbWFDZHAoJnJtYWNmZykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgKnBFbmFibGUgPSBybWFjZmcua2VlcF9mb3JtYXQ7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUgPT0gVFJBUF9DU1NUUCkKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JtYUNzc3RwKCZybWFjZmcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICpwRW5hYmxlID0gcm1hY2ZnLmtlZXBfZm9ybWF0OworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlID09IFRSQVBfTExEUCkKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1JtYUxsZHAoJnRtcCwmcm1hY2ZnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAqcEVuYWJsZSA9IHJtYWNmZy5rZWVwX2Zvcm1hdDsKKyAgICB9CisgICAgZWxzZQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworCisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy90cnVuay5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3RydW5rLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE4OGRjNQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy90cnVuay5jCkBAIC0wLDAgKzEsNjA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNzYzMDYgJAorICogJERhdGU6IDIwMTctMDMtMDggMTU6MTM6NTggKzA4MDAgKOmAseS4iSwgMDgg5LiJ5pyIIDIwMTcpICQKKyAqCisgKiBQdXJwb3NlIDogUlRLIHN3aXRjaCBoaWdoLWxldmVsIEFQSSBmb3IgUlRMODM2Ny9SVEw4MzY3QworICogRmVhdHVyZSA6IEhlcmUgaXMgYSBsaXN0IG9mIGFsbCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBpbiBUcnVuayBtb2R1bGUuCisgKgorICovCisKKyNpbmNsdWRlIDxydGtfc3dpdGNoLmg+CisjaW5jbHVkZSA8cnRrX2Vycm9yLmg+CisjaW5jbHVkZSA8dHJ1bmsuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnYuaD4KKyNpbmNsdWRlIDxydGw4MzY3Y19hc2ljZHJ2X3RydW5raW5nLmg+CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a190cnVua19wb3J0X3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCB0cnVua2luZyBncm91cCBhdmFpbGFibGUgcG9ydCBtYXNrCisgKiBJbnB1dDoKKyAqICAgICAgdHJrX2dpZCAgICAgICAgICAgICAgICAgLSB0cnVuayBncm91cCBpZAorICogICAgICBwVHJ1bmtfbWVtYmVyX3BvcnRtYXNrICAtIExvZ2ljIHRydW5raW5nIG1lbWJlciBwb3J0IG1hc2sKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfTEFfVFJVTktfSUQgIC0gSW52YWxpZCB0cnVua2luZyBncm91cAorICogICAgICBSVF9FUlJfUE9SVF9NQVNLICAgIC0gSW52YWxpZCBwb3J0bWFzay4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIHNldCBwb3J0IHRydW5raW5nIGdyb3VwIHBvcnQgbWFzay4gRWFjaCBwb3J0IHRydW5raW5nIGdyb3VwIGhhcyBtYXggNCBwb3J0cy4KKyAqICAgICAgSWYgZW5hYmxlZCBwb3J0IG1hc2sgaGFzIGxlc3MgdGhhbiAyIHBvcnRzIGF2YWlsYWJsZSBzZXR0aW5nLCB0aGVuIHRoaXMgdHJ1bmtpbmcgZ3JvdXAgZnVuY3Rpb24gaXMgZGlzYWJsZWQuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3RydW5rX3BvcnRfc2V0KHJ0a190cnVua19ncm91cF90IHRya19naWQsIHJ0a19wb3J0bWFza190ICpwVHJ1bmtfbWVtYmVyX3BvcnRtYXNrKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcG1zazsKKyAgICBydGtfdWludDMyIHJlZ1ZhbHVlLCB0eXBlLCB0bXA7CisKKworICAgIGlmKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljUmVnKDB4MTNDMiwgMHgwMjQ5KSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgaWYoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNSZWcoMHgxMzAwLCAmcmVnVmFsdWUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZigocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1JlZygweDEzQzIsIDB4MDAwMCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHN3aXRjaCAocmVnVmFsdWUpCisgICAgeworICAgICAgICBjYXNlIDB4MDI3NjoKKyAgICAgICAgY2FzZSAweDA1OTc6CisgICAgICAgIGNhc2UgMHg2MzY3OgorICAgICAgICAgICAgdHlwZSA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweDA2NTI6CisgICAgICAgIGNhc2UgMHg2MzY4OgorICAgICAgICAgICAgdHlwZSA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweDA4MDE6CisgICAgICAgIGNhc2UgMHg2NTExOgorICAgICAgICAgICAgdHlwZSA9IDI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBSVF9FUlJfRkFJTEVEOworICAgIH0KKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBUcnVuayBHcm91cCBWYWxpZCAqLworICAgIFJUS19DSEtfVFJVTktfR1JPVVBfVkFMSUQodHJrX2dpZCk7CisKKyAgICBpZihOVUxMID09IHBUcnVua19tZW1iZXJfcG9ydG1hc2spCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgUlRLX0NIS19QT1JUTUFTS19WQUxJRChwVHJ1bmtfbWVtYmVyX3BvcnRtYXNrKTsKKworICAgIGlmKChyZXRWYWwgPSBydGtfc3dpdGNoX3BvcnRtYXNrX0wyUF9nZXQocFRydW5rX21lbWJlcl9wb3J0bWFzaywgJnBtc2spKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZigodHlwZSA9PSAwKSB8fCAodHlwZSA9PSAxKSkKKyAgICB7CisgICAgICAgIGlmICgocG1zayB8IFJUTDgzNjdDX1BPUlRfVFJVTktfR1JPVVBfTUFTS19NQVNLKHRya19naWQpKSAhPSAocnRrX3VpbnQzMilSVEw4MzY3Q19QT1JUX1RSVU5LX0dST1VQX01BU0tfTUFTSyh0cmtfZ2lkKSkKKyAgICAgICAgICAgIHJldHVybiBSVF9FUlJfUE9SVF9NQVNLOworCisgICAgICAgIHBtc2sgPSAocG1zayAmIFJUTDgzNjdDX1BPUlRfVFJVTktfR1JPVVBfTUFTS19NQVNLKHRya19naWQpKSA+PiBSVEw4MzY3Q19QT1JUX1RSVU5LX0dST1VQX01BU0tfT0ZGU0VUKHRya19naWQpOworICAgIH0KKyAgICBlbHNlIGlmKHR5cGUgPT0gMikKKyAgICB7CisgICAgICAgIHRtcCA9IDA7CisKKyAgICAgICAgaWYocG1zayAmIDB4MikKKyAgICAgICAgICAgIHRtcCB8PSAxOworICAgICAgICBpZihwbXNrICYgMHg4KQorICAgICAgICAgICAgdG1wIHw9MjsKKyAgICAgICAgaWYocG1zayAmIDB4ODApCisgICAgICAgICAgICB0bXAgfD04OworCisgICAgICAgIHBtc2sgPSB0bXA7CisgICAgfQorCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljVHJ1bmtpbmdHcm91cCh0cmtfZ2lkLCBwbXNrKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3RydW5rX3BvcnRfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHRydW5raW5nIGdyb3VwIGF2YWlsYWJsZSBwb3J0IG1hc2sKKyAqIElucHV0OgorICogICAgICB0cmtfZ2lkIC0gdHJ1bmsgZ3JvdXAgaWQKKyAqIE91dHB1dDoKKyAqICAgICAgcFRydW5rX21lbWJlcl9wb3J0bWFzayAtIExvZ2ljIHRydW5raW5nIG1lbWJlciBwb3J0IG1hc2sKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0xBX1RSVU5LX0lEICAtIEludmFsaWQgdHJ1bmtpbmcgZ3JvdXAKKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGdldCAyIHBvcnQgdHJ1bmtpbmcgZ3JvdXAuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3RydW5rX3BvcnRfZ2V0KHJ0a190cnVua19ncm91cF90IHRya19naWQsIHJ0a19wb3J0bWFza190ICpwVHJ1bmtfbWVtYmVyX3BvcnRtYXNrKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcG1zazsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBUcnVuayBHcm91cCBWYWxpZCAqLworICAgIFJUS19DSEtfVFJVTktfR1JPVVBfVkFMSUQodHJrX2dpZCk7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNUcnVua2luZ0dyb3VwKHRya19naWQsICZwbXNrKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcG1zayA9IHBtc2sgPDwgUlRMODM2N0NfUE9SVF9UUlVOS19HUk9VUF9NQVNLX09GRlNFVCh0cmtfZ2lkKTsKKworICAgIGlmKChyZXRWYWwgPSBydGtfc3dpdGNoX3BvcnRtYXNrX1AyTF9nZXQocG1zaywgcFRydW5rX21lbWJlcl9wb3J0bWFzaykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a190cnVua19kaXN0cmlidXRpb25BbGdvcml0aG1fc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHBvcnQgdHJ1bmtpbmcgaGFzaCBzZWxlY3Qgc291cmNlcworICogSW5wdXQ6CisgKiAgICAgIHRya19naWQgICAgICAgICAtIHRydW5rIGdyb3VwIGlkCisgKiAgICAgIGFsZ29fYml0bWFzayAgIC0gQml0bWFzayBvZiB0aGUgZGlzdHJpYnV0aW9uIGFsZ29yaXRobQorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9MQV9UUlVOS19JRCAgLSBJbnZhbGlkIHRydW5raW5nIGdyb3VwCisgKiAgICAgIFJUX0VSUl9MQV9IQVNITUFTSyAgLSBIYXNoIGFsZ29yaXRobSBzZWxlY3Rpb24gZXJyb3IuCisgKiAgICAgIFJUX0VSUl9QT1JUX01BU0sgICAgLSBJbnZhbGlkIHBvcnRtYXNrLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gc2V0IHBvcnQgdHJ1bmtpbmcgaGFzaCBhbGdvcml0aG0gc291cmNlcy4KKyAqICAgICAgNyBiaXRzIG1hc2sgZm9yIGxpbmsgYWdncmVnYXRpb24gZ3JvdXAwIGhhc2ggcGFyYW1ldGVyIHNlbGVjdGlvbiB7RElQLCBTSVAsIERNQUMsIFNNQUMsIFNQQX0KKyAqICAgICAgLSAwYjAwMDAwMDE6IFNQQQorICogICAgICAtIDBiMDAwMDAxMDogU01BQworICogICAgICAtIDBiMDAwMDEwMDogRE1BQworICogICAgICAtIDBiMDAwMTAwMDogU0lQCisgKiAgICAgIC0gMGIwMDEwMDAwOiBESVAKKyAqICAgICAgLSAwYjAxMDAwMDA6IFRDUC9VRFAgU291cmNlIFBvcnQKKyAqICAgICAgLSAwYjEwMDAwMDA6IFRDUC9VRFAgRGVzdGluYXRpb24gUG9ydAorICogICAgICBFeGFtcGxlOgorICogICAgICAtIDBiMDAwMDAxMTogU01BQyAmIFNQQQorICogICAgICAtIE5vdGUgdGhhdCBpdCBjb3VsZCBiZSBhbiBhcmJpdHJhcnkgY29tYmluYXRpb24gb3IgaW5kZXBlbmRlbnQgc2V0CisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3RydW5rX2Rpc3RyaWJ1dGlvbkFsZ29yaXRobV9zZXQocnRrX3RydW5rX2dyb3VwX3QgdHJrX2dpZCwgcnRrX3VpbnQzMiBhbGdvX2JpdG1hc2spCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKHRya19naWQgIT0gUlRLX1dIT0xFX1NZU1RFTSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9MQV9UUlVOS19JRDsKKworICAgIGlmIChhbGdvX2JpdG1hc2sgPj0gMTI4KQorICAgICAgICByZXR1cm4gUlRfRVJSX0xBX0hBU0hNQVNLOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljVHJ1bmtpbmdIYXNoU2VsZWN0KGFsZ29fYml0bWFzaykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a190cnVua19kaXN0cmlidXRpb25BbGdvcml0aG1fZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHBvcnQgdHJ1bmtpbmcgaGFzaCBzZWxlY3Qgc291cmNlcworICogSW5wdXQ6CisgKiAgICAgIHRya19naWQgLSB0cnVuayBncm91cCBpZAorICogT3V0cHV0OgorICogICAgICBwQWxnb19iaXRtYXNrIC0gIEJpdG1hc2sgb2YgdGhlIGRpc3RyaWJ1dGlvbiBhbGdvcml0aG0KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0xBX1RSVU5LX0lEICAtIEludmFsaWQgdHJ1bmtpbmcgZ3JvdXAKKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIGdldCBwb3J0IHRydW5raW5nIGhhc2ggYWxnb3JpdGhtIHNvdXJjZXMuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3RydW5rX2Rpc3RyaWJ1dGlvbkFsZ29yaXRobV9nZXQocnRrX3RydW5rX2dyb3VwX3QgdHJrX2dpZCwgcnRrX3VpbnQzMiAqcEFsZ29fYml0bWFzaykKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAodHJrX2dpZCAhPSBSVEtfV0hPTEVfU1lTVEVNKQorICAgICAgICByZXR1cm4gUlRfRVJSX0xBX1RSVU5LX0lEOworCisgICAgaWYoTlVMTCA9PSBwQWxnb19iaXRtYXNrKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1RydW5raW5nSGFzaFNlbGVjdCgocnRrX3VpbnQzMiAqKXBBbGdvX2JpdG1hc2spKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdHJ1bmtfdHJhZmZpY1NlcGFyYXRlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCB0aGUgdHJhZmZpYyBzZXBhcmF0aW9uIHNldHRpbmcgb2YgYSB0cnVuayBncm91cCBmcm9tIHRoZSBzcGVjaWZpZWQgZGV2aWNlLgorICogSW5wdXQ6CisgKiAgICAgIHRya19naWQgICAgICAtIHRydW5rIGdyb3VwIGlkCisgKiAgICAgIHNlcGFyYXRlVHlwZSAgICAgLSB0cmFmZmljIHNlcGFyYXRpb24gc2V0dGluZworICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiAgICAgIFJUX0VSUl9VTklUX0lEICAgICAtIGludmFsaWQgdW5pdCBpZAorICogICAgICBSVF9FUlJfTEFfVFJVTktfSUQgLSBpbnZhbGlkIHRydW5rIElECisgKiAgICAgIFJUX0VSUl9MQV9IQVNITUFTSyAtIGludmFsaWQgaGFzaCBtYXNrCisgKiBOb3RlOgorICogICAgICBTRVBBUkFURV9OT05FOiBkaXNhYmxlIHRyYWZmaWMgc2VwYXJhdGlvbgorICogICAgICBTRVBBUkFURV9GTE9PRDogdHJ1bmsgTVNCIGxpbmsgdXAgcG9ydCBpcyBkZWRpY2F0ZWQgdG8gVFggZmxvb2RpbmcgKEwyIGxvb2t1cCBtaXNzKSB0cmFmZmljCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3RydW5rX3RyYWZmaWNTZXBhcmF0ZV9zZXQocnRrX3RydW5rX2dyb3VwX3QgdHJrX2dpZCwgcnRrX3RydW5rX3NlcGFyYXRlVHlwZV90IHNlcGFyYXRlVHlwZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIGVuYWJsZWQ7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKHRya19naWQgIT0gUlRLX1dIT0xFX1NZU1RFTSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9MQV9UUlVOS19JRDsKKworICAgIGlmKHNlcGFyYXRlVHlwZSA+PSBTRVBBUkFURV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBlbmFibGVkID0gKHNlcGFyYXRlVHlwZSA9PSBTRVBBUkFURV9GTE9PRCkgPyBFTkFCTEVEIDogRElTQUJMRUQ7CisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljVHJ1bmtpbmdGbG9vZChlbmFibGVkKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3RydW5rX3RyYWZmaWNTZXBhcmF0ZV9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgdGhlIHRyYWZmaWMgc2VwYXJhdGlvbiBzZXR0aW5nIG9mIGEgdHJ1bmsgZ3JvdXAgZnJvbSB0aGUgc3BlY2lmaWVkIGRldmljZS4KKyAqIElucHV0OgorICogICAgICB0cmtfZ2lkICAgICAgICAtIHRydW5rIGdyb3VwIGlkCisgKiBPdXRwdXQ6CisgKiAgICAgIHBTZXBhcmF0ZVR5cGUgICAtIHBvaW50ZXIgc2VwYXJhdGVkIHRyYWZmaWMgdHlwZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfVU5JVF9JRCAgICAgIC0gaW52YWxpZCB1bml0IGlkCisgKiAgICAgIFJUX0VSUl9MQV9UUlVOS19JRCAgLSBpbnZhbGlkIHRydW5rIElECisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgLSBpbnB1dCBwYXJhbWV0ZXIgbWF5IGJlIG51bGwgcG9pbnRlcgorICogTm90ZToKKyAqICAgICAgU0VQQVJBVEVfTk9ORTogZGlzYWJsZSB0cmFmZmljIHNlcGFyYXRpb24KKyAqICAgICAgU0VQQVJBVEVfRkxPT0Q6IHRydW5rIE1TQiBsaW5rIHVwIHBvcnQgaXMgZGVkaWNhdGVkIHRvIFRYIGZsb29kaW5nIChMMiBsb29rdXAgbWlzcykgdHJhZmZpYworICovCitydGtfYXBpX3JldF90IHJ0a190cnVua190cmFmZmljU2VwYXJhdGVfZ2V0KHJ0a190cnVua19ncm91cF90IHRya19naWQsIHJ0a190cnVua19zZXBhcmF0ZVR5cGVfdCAqcFNlcGFyYXRlVHlwZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIGVuYWJsZWQ7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYgKHRya19naWQgIT0gUlRLX1dIT0xFX1NZU1RFTSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9MQV9UUlVOS19JRDsKKworICAgIGlmKE5VTEwgPT0gcFNlcGFyYXRlVHlwZSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNUcnVua2luZ0Zsb29kKCZlbmFibGVkKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgKnBTZXBhcmF0ZVR5cGUgPSAoZW5hYmxlZCA9PSBFTkFCTEVEKSA/IFNFUEFSQVRFX0ZMT09EIDogU0VQQVJBVEVfTk9ORTsKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdHJ1bmtfbW9kZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgdGhlIHRydW5rIG1vZGUgdG8gdGhlIHNwZWNpZmllZCBkZXZpY2UuCisgKiBJbnB1dDoKKyAqICAgICAgbW9kZSAtIHRydW5rIG1vZGUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfSU5QVVQgICAtIGludmFsaWQgaW5wdXQgcGFyYW1ldGVyCisgKiBOb3RlOgorICogICAgICBUaGUgZW51bSBvZiB0aGUgdHJ1bmsgbW9kZSBhcyBmb2xsb3dpbmcKKyAqICAgICAgLSBUUlVOS19NT0RFX05PUk1BTAorICogICAgICAtIFRSVU5LX01PREVfRFVNQgorICovCitydGtfYXBpX3JldF90IHJ0a190cnVua19tb2RlX3NldChydGtfdHJ1bmtfbW9kZV90IG1vZGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYobW9kZSA+PSBUUlVOS19NT0RFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1RydW5raW5nTW9kZSgocnRrX3VpbnQzMiltb2RlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3RydW5rX21vZGVfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHRoZSB0cnVuayBtb2RlIGZyb20gdGhlIHNwZWNpZmllZCBkZXZpY2UuCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwTW9kZSAtIHBvaW50ZXIgYnVmZmVyIG9mIHRydW5rIG1vZGUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAtIGlucHV0IHBhcmFtZXRlciBtYXkgYmUgbnVsbCBwb2ludGVyCisgKiBOb3RlOgorICogICAgICBUaGUgZW51bSBvZiB0aGUgdHJ1bmsgbW9kZSBhcyBmb2xsb3dpbmcKKyAqICAgICAgLSBUUlVOS19NT0RFX05PUk1BTAorICogICAgICAtIFRSVU5LX01PREVfRFVNQgorICovCitydGtfYXBpX3JldF90IHJ0a190cnVua19tb2RlX2dldChydGtfdHJ1bmtfbW9kZV90ICpwTW9kZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBNb2RlKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1RydW5raW5nTW9kZSgocnRrX3VpbnQzMiAqKXBNb2RlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3RydW5rX3RyYWZmaWNQYXVzZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgdGhlIHRyYWZmaWMgcGF1c2Ugc2V0dGluZyBvZiBhIHRydW5rIGdyb3VwLgorICogSW5wdXQ6CisgKiAgICAgIHRya19naWQgICAgICAtIHRydW5rIGdyb3VwIGlkCisgKiAgICAgIGVuYWJsZSAgICAgICAtIHRyYWZmaWMgcGF1c2Ugc3RhdGUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfTEFfVFJVTktfSUQgLSBpbnZhbGlkIHRydW5rIElECisgKiBOb3RlOgorICogICAgICBOb25lLgorICovCitydGtfYXBpX3JldF90IHJ0a190cnVua190cmFmZmljUGF1c2Vfc2V0KHJ0a190cnVua19ncm91cF90IHRya19naWQsIHJ0a19lbmFibGVfdCBlbmFibGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgVHJ1bmsgR3JvdXAgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1RSVU5LX0dST1VQX1ZBTElEKHRya19naWQpOworCisgICAgaWYoZW5hYmxlID49IFJUS19FTkFCTEVfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljVHJ1bmtpbmdGYygocnRrX3VpbnQzMil0cmtfZ2lkLCAocnRrX3VpbnQzMillbmFibGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdHJ1bmtfdHJhZmZpY1BhdXNlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCB0aGUgdHJhZmZpYyBwYXVzZSBzZXR0aW5nIG9mIGEgdHJ1bmsgZ3JvdXAuCisgKiBJbnB1dDoKKyAqICAgICAgdHJrX2dpZCAgICAgICAgLSB0cnVuayBncm91cCBpZAorICogT3V0cHV0OgorICogICAgICBwRW5hYmxlICAgICAgICAtIHBvaW50ZXIgb2YgdHJhZmZpYyBwYXVzZSBzdGF0ZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQKKyAqICAgICAgUlRfRVJSX0xBX1RSVU5LX0lEICAtIGludmFsaWQgdHJ1bmsgSUQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAtIGlucHV0IHBhcmFtZXRlciBtYXkgYmUgbnVsbCBwb2ludGVyCisgKiBOb3RlOgorICogICAgICBOb25lLgorICovCitydGtfYXBpX3JldF90IHJ0a190cnVua190cmFmZmljUGF1c2VfZ2V0KHJ0a190cnVua19ncm91cF90IHRya19naWQsIHJ0a19lbmFibGVfdCAqcEVuYWJsZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBUcnVuayBHcm91cCBWYWxpZCAqLworICAgIFJUS19DSEtfVFJVTktfR1JPVVBfVkFMSUQodHJrX2dpZCk7CisKKyAgICBpZihOVUxMID09IHBFbmFibGUpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljVHJ1bmtpbmdGYygocnRrX3VpbnQzMil0cmtfZ2lkLCAocnRrX3VpbnQzMiAqKXBFbmFibGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdHJ1bmtfaGFzaE1hcHBpbmdUYWJsZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgaGFzaCB2YWx1ZSB0byBwb3J0IGFycmF5IGluIHRoZSB0cnVuayBncm91cCBpZCBmcm9tIHRoZSBzcGVjaWZpZWQgZGV2aWNlLgorICogSW5wdXQ6CisgKiAgICAgIHRya19naWQgICAgICAgICAgLSB0cnVuayBncm91cCBpZAorICogICAgICBwSGFzaDJQb3J0X2FycmF5IC0gcG9ydHMgYXNzb2NpYXRlIHdpdGggdGhlIGhhc2ggdmFsdWUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfVU5JVF9JRCAgICAgICAgICAgIC0gaW52YWxpZCB1bml0IGlkCisgKiAgICAgIFJUX0VSUl9MQV9UUlVOS19JRCAgICAgICAgLSBpbnZhbGlkIHRydW5rIElECisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgICAgICAgLSBpbnB1dCBwYXJhbWV0ZXIgbWF5IGJlIG51bGwgcG9pbnRlcgorICogICAgICBSVF9FUlJfTEFfVFJVTktfTk9UX0VYSVNUIC0gdGhlIHRydW5rIGRvZXNuJ3QgZXhpc3QKKyAqICAgICAgUlRfRVJSX0xBX05PVF9NRU1CRVJfUE9SVCAtIHRoZSBwb3J0IGlzIG5vdCBhIG1lbWJlciBwb3J0IG9mIHRoZSB0cnVuaworICogICAgICBSVF9FUlJfTEFfQ1BVUE9SVCAgICAgICAgIC0gQ1BVIHBvcnQgY2FuIG5vdCBiZSBhZ2dyZWdhdGVkIHBvcnQKKyAqIE5vdGU6CisgKiAgICAgIFRydW5rIGdyb3VwIDAgJiAxIHNoYXJlcyB0aGUgc2FtZSBoYXNoIG1hcHBpbmcgdGFibGUuCisgKiAgICAgIFRydW5rIGdyb3VwIDIgdXNlcyBhIGluZGVwZW5kZW50IHRhYmxlLgorICovCitydGtfYXBpX3JldF90IHJ0a190cnVua19oYXNoTWFwcGluZ1RhYmxlX3NldChydGtfdHJ1bmtfZ3JvdXBfdCB0cmtfZ2lkLCBydGtfdHJ1bmtfaGFzaFZhbDJQb3J0X3QgKnBIYXNoMlBvcnRfYXJyYXkpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBoYXNoVmFsdWU7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgVHJ1bmsgR3JvdXAgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1RSVU5LX0dST1VQX1ZBTElEKHRya19naWQpOworCisgICAgaWYoTlVMTCA9PSBwSGFzaDJQb3J0X2FycmF5KQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmKHRya19naWQgPD0gVFJVTktfR1JPVVAxKQorICAgIHsKKyAgICAgICAgZm9yKGhhc2hWYWx1ZSA9IDA7IGhhc2hWYWx1ZSA8IFJUS19NQVhfTlVNX09GX1RSVU5LX0hBU0hfVkFMOyBoYXNoVmFsdWUrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljVHJ1bmtpbmdIYXNoVGFibGUoaGFzaFZhbHVlLCBwSGFzaDJQb3J0X2FycmF5LT52YWx1ZVtoYXNoVmFsdWVdKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yKGhhc2hWYWx1ZSA9IDA7IGhhc2hWYWx1ZSA8IFJUS19NQVhfTlVNX09GX1RSVU5LX0hBU0hfVkFMOyBoYXNoVmFsdWUrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljVHJ1bmtpbmdIYXNoVGFibGUxKGhhc2hWYWx1ZSwgcEhhc2gyUG9ydF9hcnJheS0+dmFsdWVbaGFzaFZhbHVlXSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3RydW5rX2hhc2hNYXBwaW5nVGFibGVfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGhhc2ggdmFsdWUgdG8gcG9ydCBhcnJheSBpbiB0aGUgdHJ1bmsgZ3JvdXAgaWQgZnJvbSB0aGUgc3BlY2lmaWVkIGRldmljZS4KKyAqIElucHV0OgorICogICAgICB0cmtfZ2lkICAgICAgICAgIC0gdHJ1bmsgZ3JvdXAgaWQKKyAqIE91dHB1dDoKKyAqICAgICAgcEhhc2gyUG9ydF9hcnJheSAtIHBvaW50ZXIgYnVmZmVyIG9mIHBvcnRzIGFzc29jaWF0ZSB3aXRoIHRoZSBoYXNoIHZhbHVlCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSworICogICAgICBSVF9FUlJfRkFJTEVECisgKiAgICAgIFJUX0VSUl9VTklUX0lEICAgICAgLSBpbnZhbGlkIHVuaXQgaWQKKyAqICAgICAgUlRfRVJSX0xBX1RSVU5LX0lEICAtIGludmFsaWQgdHJ1bmsgSUQKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAtIGlucHV0IHBhcmFtZXRlciBtYXkgYmUgbnVsbCBwb2ludGVyCisgKiBOb3RlOgorICogICAgICBUcnVuayBncm91cCAwICYgMSBzaGFyZXMgdGhlIHNhbWUgaGFzaCBtYXBwaW5nIHRhYmxlLgorICogICAgICBUcnVuayBncm91cCAyIHVzZXMgYSBpbmRlcGVuZGVudCB0YWJsZS4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfdHJ1bmtfaGFzaE1hcHBpbmdUYWJsZV9nZXQocnRrX3RydW5rX2dyb3VwX3QgdHJrX2dpZCwgcnRrX3RydW5rX2hhc2hWYWwyUG9ydF90ICpwSGFzaDJQb3J0X2FycmF5KQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgaGFzaFZhbHVlOworICAgIHJ0a191aW50MzIgaGFzaFBvcnQ7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgVHJ1bmsgR3JvdXAgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1RSVU5LX0dST1VQX1ZBTElEKHRya19naWQpOworCisgICAgaWYoTlVMTCA9PSBwSGFzaDJQb3J0X2FycmF5KQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmKHRya19naWQgPD0gVFJVTktfR1JPVVAxKQorICAgIHsKKyAgICAgICAgZm9yKGhhc2hWYWx1ZSA9IDA7IGhhc2hWYWx1ZSA8IFJUS19NQVhfTlVNX09GX1RSVU5LX0hBU0hfVkFMOyBoYXNoVmFsdWUrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljVHJ1bmtpbmdIYXNoVGFibGUoaGFzaFZhbHVlLCAmaGFzaFBvcnQpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgcEhhc2gyUG9ydF9hcnJheS0+dmFsdWVbaGFzaFZhbHVlXSA9IGhhc2hQb3J0OworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGZvcihoYXNoVmFsdWUgPSAwOyBoYXNoVmFsdWUgPCBSVEtfTUFYX05VTV9PRl9UUlVOS19IQVNIX1ZBTDsgaGFzaFZhbHVlKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1RydW5raW5nSGFzaFRhYmxlMShoYXNoVmFsdWUsICZoYXNoUG9ydCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICBwSGFzaDJQb3J0X2FycmF5LT52YWx1ZVtoYXNoVmFsdWVdID0gaGFzaFBvcnQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdHJ1bmtfcG9ydFF1ZXVlRW1wdHlfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHRoZSBwb3J0IG1hc2sgd2hpY2ggYWxsIHF1ZXVlcyBhcmUgZW1wdHkuCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZS4KKyAqIE91dHB1dDoKKyAqICAgICAgcEVtcHR5X3BvcnRtYXNrICAgLSBwb2ludGVyIGVtcHR5IHBvcnQgbWFzaworICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRAorICogICAgICBSVF9FUlJfTlVMTF9QT0lOVEVSIC0gaW5wdXQgcGFyYW1ldGVyIG1heSBiZSBudWxsIHBvaW50ZXIKKyAqIE5vdGU6CisgKiAgICAgIE5vbmUuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3RydW5rX3BvcnRRdWV1ZUVtcHR5X2dldChydGtfcG9ydG1hc2tfdCAqcEVtcHR5X3BvcnRtYXNrKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcG1hc2s7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoTlVMTCA9PSBwRW1wdHlfcG9ydG1hc2spCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljUWV1ZXVFbXB0eVN0YXR1cygmcG1hc2spKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0a19zd2l0Y2hfcG9ydG1hc2tfUDJMX2dldChwbWFzaywgcEVtcHR5X3BvcnRtYXNrKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdjL3ZsYW4uYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy92bGFuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc0ODBjNAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3Yy92bGFuLmMKQEAgLTAsMCArMSwyMTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlYWx0ZWsgU2VtaWNvbmR1Y3RvciBDb3JwLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBVbmxlc3MgeW91IGFuZCBSZWFsdGVrIGV4ZWN1dGUgYSBzZXBhcmF0ZSB3cml0dGVuIHNvZnR3YXJlIGxpY2Vuc2UKKyAqIGFncmVlbWVudCBnb3Zlcm5pbmcgdXNlIG9mIHRoaXMgc29mdHdhcmUsIHRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQKKyAqIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwKKyAqIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9ncGwtMi4wLnR4dAorICoKKyAqICRSZXZpc2lvbjogNzYzMDYgJAorICogJERhdGU6IDIwMTctMDMtMDggMTU6MTM6NTggKzA4MDAgKOmAseS4iSwgMDgg5LiJ5pyIIDIwMTcpICQKKyAqCisgKiBQdXJwb3NlIDogUlRLIHN3aXRjaCBoaWdoLWxldmVsIEFQSSBmb3IgUlRMODM2Ny9SVEw4MzY3QworICogRmVhdHVyZSA6IEhlcmUgaXMgYSBsaXN0IG9mIGFsbCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBpbiBWTEFOIG1vZHVsZS4KKyAqCisgKi8KKworI2luY2x1ZGUgPHJ0a19zd2l0Y2guaD4KKyNpbmNsdWRlIDxydGtfZXJyb3IuaD4KKyNpbmNsdWRlIDx2bGFuLmg+CisjaW5jbHVkZSA8cmF0ZS5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8cnRsODM2N2NfYXNpY2Rydi5oPgorI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnZfdmxhbi5oPgorI2luY2x1ZGUgPHJ0bDgzNjdjX2FzaWNkcnZfZG90MXguaD4KKwordHlwZWRlZiBlbnVtIHZsYW5fbWJyQ2ZnVHlwZV9lCit7CisgICAgTUJSQ0ZHX1VOVVNFRCA9IDAsCisgICAgTUJSQ0ZHX1VTRURfQllfVkxBTiwKKyAgICBNQlJDRkdfRU5ECit9dmxhbl9tYnJDZmdUeXBlX3Q7CisKK3N0YXRpYyBydGtfdmxhbl90ICAgICAgICAgICB2bGFuX21ickNmZ1ZpZFtSVEw4MzY3Q19DVklEWE5PXTsKK3N0YXRpYyB2bGFuX21ickNmZ1R5cGVfdCAgICB2bGFuX21ickNmZ1VzYWdlW1JUTDgzNjdDX0NWSURYTk9dOworCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdmxhbl9pbml0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgSW5pdGlhbGl6ZSBWTEFOLgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogTm90ZToKKyAqICAgICAgVkxBTiBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LiBVc2VyIGhhcyB0byBjYWxsIHRoaXMgQVBJIHRvIGVuYWJsZSBWTEFOIGJlZm9yZQorICogICAgICB1c2luZyBpdC4gQW5kIEl0IHdpbGwgc2V0IGEgZGVmYXVsdCBWTEFOKHZpZCAxKSBpbmNsdWRpbmcgYWxsIHBvcnRzIGFuZCBzZXQKKyAqICAgICAgYWxsIHBvcnRzIFBWSUQgdG8gdGhlIGRlZmF1bHQgVkxBTi4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfdmxhbl9pbml0KHZvaWQpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBpOworICAgIHJ0bDgzNjdjX3VzZXJfdmxhbjRrZW50cnkgdmxhbjRLOworICAgIHJ0bDgzNjdjX3ZsYW5jb25maWd1c2VyIHZsYW5NQzsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDbGVhbiBEYXRhYmFzZSAqLworICAgIG1lbXNldCh2bGFuX21ickNmZ1ZpZCwgMHgwMCwgc2l6ZW9mKHJ0a192bGFuX3QpICogUlRMODM2N0NfQ1ZJRFhOTyk7CisgICAgbWVtc2V0KHZsYW5fbWJyQ2ZnVXNhZ2UsIDB4MDAsIHNpemVvZih2bGFuX21ickNmZ1R5cGVfdCkgKiBSVEw4MzY3Q19DVklEWE5PKTsKKworICAgIC8qIGNsZWFuIDMyIFZMQU4gbWVtYmVyIGNvbmZpZ3VyYXRpb24gKi8KKyAgICBmb3IgKGkgPSAwOyBpIDw9IFJUTDgzNjdDX0NWSURYTUFYOyBpKyspCisgICAgeworICAgICAgICB2bGFuTUMuZXZpZCA9IDA7CisgICAgICAgIHZsYW5NQy5tYnIgPSAwOworICAgICAgICB2bGFuTUMuZmlkX21zdGkgPSAwOworICAgICAgICB2bGFuTUMuZW52bGFucG9sID0gMDsKKyAgICAgICAgdmxhbk1DLm1ldGVyaWR4ID0gMDsKKyAgICAgICAgdmxhbk1DLnZicGVuID0gMDsKKyAgICAgICAgdmxhbk1DLnZicHJpID0gMDsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljVmxhbk1lbWJlckNvbmZpZyhpLCAmdmxhbk1DKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisKKyAgICAvKiBTZXQgYSBkZWZhdWx0IFZMQU4gd2l0aCB2aWQgMSB0byA0SyB0YWJsZSBmb3IgYWxsIHBvcnRzICovCisgICAgbWVtc2V0KCZ2bGFuNEssIDAsIHNpemVvZihydGw4MzY3Y191c2VyX3ZsYW40a2VudHJ5KSk7CisgICAgdmxhbjRLLnZpZCA9IDE7CisgICAgdmxhbjRLLm1iciA9IFJUS19QSFlfUE9SVE1BU0tfQUxMOworICAgIHZsYW40Sy51bnRhZyA9IFJUS19QSFlfUE9SVE1BU0tfQUxMOworICAgIHZsYW40Sy5maWRfbXN0aSA9IDA7CisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljVmxhbjRrRW50cnkoJnZsYW40SykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIC8qIEFsc28gc2V0IHRoZSBkZWZhdWx0IFZMQU4gdG8gMzIgbWVtYmVyIGNvbmZpZ3VyYXRpb24gaW5kZXggMCAqLworICAgIG1lbXNldCgmdmxhbk1DLCAwLCBzaXplb2YocnRsODM2N2NfdmxhbmNvbmZpZ3VzZXIpKTsKKyAgICB2bGFuTUMuZXZpZCA9IDE7CisgICAgdmxhbk1DLm1iciA9IFJUS19QSFlfUE9SVE1BU0tfQUxMOworICAgIHZsYW5NQy5maWRfbXN0aSA9IDA7CisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljVmxhbk1lbWJlckNvbmZpZygwLCAmdmxhbk1DKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIC8qIFNldCBhbGwgcG9ydHMgUFZJRCB0byBkZWZhdWx0IFZMQU4gYW5kIHRhZy1tb2RlIHRvIG9yaWdpbmFsICovCisgICAgUlRLX1NDQU5fQUxMX1BIWV9QT1JUTUFTSyhpKQorICAgIHsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljVmxhblBvcnRCYXNlZFZJRChpLCAwLCAwKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljVmxhbkVncmVzc1RhZ01vZGUoaSwgRUdfVEFHX01PREVfT1JJKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisKKyAgICAvKiBVcGRhdGEgRGF0YWJzZSAqLworICAgIHZsYW5fbWJyQ2ZnVXNhZ2VbMF0gPSBNQlJDRkdfVVNFRF9CWV9WTEFOOworICAgIHZsYW5fbWJyQ2ZnVmlkWzBdID0gMTsKKworICAgIC8qIEVuYWJsZSBJbmdyZXNzIGZpbHRlciAqLworICAgIFJUS19TQ0FOX0FMTF9QSFlfUE9SVE1BU0soaSkKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1ZsYW5JbmdyZXNzRmlsdGVyKGksIEVOQUJMRUQpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKworICAgIC8qIGVuYWJsZSBWTEFOICovCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljVmxhbkZpbHRlcihFTkFCTEVEKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3ZsYW5fc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IGEgVkxBTiBlbnRyeS4KKyAqIElucHV0OgorICogICAgICB2aWQgLSBWTEFOIElEIHRvIGNvbmZpZ3VyZS4KKyAqICAgICAgcFZsYW5DZmcgLSBWTEFOIENvbmZpZ3VyYXRpb24KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiAgICAgIFJUX0VSUl9MMl9GSUQgICAgICAgICAgICAgICAtIEludmFsaWQgRklELgorICogICAgICBSVF9FUlJfVkxBTl9QT1JUX01CUl9FWElTVCAgLSBJbnZhbGlkIG1lbWJlciBwb3J0IG1hc2suCisgKiAgICAgIFJUX0VSUl9WTEFOX1ZJRCAgICAgICAgICAgICAtIEludmFsaWQgVklEIHBhcmFtZXRlci4KKyAqIE5vdGU6CisgKgorICovCitydGtfYXBpX3JldF90IHJ0a192bGFuX3NldChydGtfdmxhbl90IHZpZCwgcnRrX3ZsYW5fY2ZnX3QgKnBWbGFuQ2ZnKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcGh5TWJyUG1hc2s7CisgICAgcnRrX3VpbnQzMiBwaHlVbnRhZ1BtYXNrOworICAgIHJ0bDgzNjdjX3VzZXJfdmxhbjRrZW50cnkgdmxhbjRLOworICAgIHJ0bDgzNjdjX3ZsYW5jb25maWd1c2VyIHZsYW5NQzsKKyAgICBydGtfdWludDMyIGlkeDsKKyAgICBydGtfdWludDMyIGVtcHR5X2luZGV4ID0gMHhmZmZmOworICAgIHJ0a191aW50MzIgdXBkYXRlX2V2aWQgPSAwOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIHZpZCBtdXN0IGJlIDB+ODE5MSAqLworICAgIGlmICh2aWQgPiBSVEw4MzY3Q19FVklETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX1ZMQU5fVklEOworCisgICAgLyogTnVsbCBwb2ludGVyIGNoZWNrICovCisgICAgaWYoTlVMTCA9PSBwVmxhbkNmZykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICAvKiBDaGVjayBwb3J0IG1hc2sgdmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRNQVNLX1ZBTElEKCYocFZsYW5DZmctPm1icikpOworCisgICAgaWYgKHZpZCA8PSBSVEw4MzY3Q19WSURNQVgpCisgICAgeworICAgICAgICAvKiBDaGVjayB1bnRhZyBwb3J0IG1hc2sgdmFsaWQgKi8KKyAgICAgICAgUlRLX0NIS19QT1JUTUFTS19WQUxJRCgmKHBWbGFuQ2ZnLT51bnRhZykpOworICAgIH0KKworICAgIC8qIElWTF9FTiAqLworICAgIGlmKHBWbGFuQ2ZnLT5pdmxfZW4gPj0gUlRLX0VOQUJMRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfRU5BQkxFOworCisgICAgLyogZmlkIG11c3QgYmUgMH4xNSAqLworICAgIGlmKHBWbGFuQ2ZnLT5maWRfbXN0aSA+IFJUTDgzNjdDX0ZJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9MMl9GSUQ7CisKKyAgICAvKiBQb2xpY2luZyAqLworICAgIGlmKHBWbGFuQ2ZnLT5lbnZsYW5wb2wgPj0gUlRLX0VOQUJMRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfRU5BQkxFOworCisgICAgLyogTWV0ZXIgSUQgKi8KKyAgICBpZihwVmxhbkNmZy0+bWV0ZXJpZHggPiBSVEtfTUFYX01FVEVSX0lEKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgLyogVkxBTiBiYXNlZCBwcmlvcml0eSAqLworICAgIGlmKHBWbGFuQ2ZnLT52YnBlbiA+PSBSVEtfRU5BQkxFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9FTkFCTEU7CisKKyAgICAvKiBQcmlvcml0eSAqLworICAgIGlmKHBWbGFuQ2ZnLT52YnByaSA+IFJUTDgzNjdDX1BSSU1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIC8qIEdldCBwaHlzaWNhbCBwb3J0IG1hc2sgKi8KKyAgICBpZihydGtfc3dpdGNoX3BvcnRtYXNrX0wyUF9nZXQoJihwVmxhbkNmZy0+bWJyKSwgJnBoeU1iclBtYXNrKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiBSVF9FUlJfRkFJTEVEOworCisgICAgaWYocnRrX3N3aXRjaF9wb3J0bWFza19MMlBfZ2V0KCYocFZsYW5DZmctPnVudGFnKSwgJnBoeVVudGFnUG1hc2spICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9GQUlMRUQ7CisKKyAgICBpZiAodmlkIDw9IFJUTDgzNjdDX1ZJRE1BWCkKKyAgICB7CisgICAgICAgIC8qIHVwZGF0ZSA0SyB0YWJsZSAqLworICAgICAgICBtZW1zZXQoJnZsYW40SywgMCwgc2l6ZW9mKHJ0bDgzNjdjX3VzZXJfdmxhbjRrZW50cnkpKTsKKyAgICAgICAgdmxhbjRLLnZpZCA9IHZpZDsKKworICAgICAgICB2bGFuNEsubWJyICAgID0gKHBoeU1iclBtYXNrICYgMHhGRkZGKTsKKyAgICAgICAgdmxhbjRLLnVudGFnICA9IChwaHlVbnRhZ1BtYXNrICYgMHhGRkZGKTsKKworICAgICAgICB2bGFuNEsuaXZsX3N2bCAgICAgID0gcFZsYW5DZmctPml2bF9lbjsKKyAgICAgICAgdmxhbjRLLmZpZF9tc3RpICAgICA9IHBWbGFuQ2ZnLT5maWRfbXN0aTsKKyAgICAgICAgdmxhbjRLLmVudmxhbnBvbCAgICA9IHBWbGFuQ2ZnLT5lbnZsYW5wb2w7CisgICAgICAgIHZsYW40Sy5tZXRlcmlkeCAgICAgPSBwVmxhbkNmZy0+bWV0ZXJpZHg7CisgICAgICAgIHZsYW40Sy52YnBlbiAgICAgICAgPSBwVmxhbkNmZy0+dmJwZW47CisgICAgICAgIHZsYW40Sy52YnByaSAgICAgICAgPSBwVmxhbkNmZy0+dmJwcmk7CisKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljVmxhbjRrRW50cnkoJnZsYW40SykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgLyogVXBkYXRlIE1lbWJlciBjb25maWd1cmF0aW9uIGlmIGV4aXN0ICovCisgICAgICAgIGZvciAoaWR4ID0gMDsgaWR4IDw9IFJUTDgzNjdDX0NWSURYTUFYOyBpZHgrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYodmxhbl9tYnJDZmdVc2FnZVtpZHhdID09IE1CUkNGR19VU0VEX0JZX1ZMQU4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYodmxhbl9tYnJDZmdWaWRbaWR4XSA9PSB2aWQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBGb3VuZCEgVXBkYXRlICovCisgICAgICAgICAgICAgICAgICAgIGlmKHBoeU1iclBtYXNrID09IDB4MDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1lbWJlciBwb3J0ID0gMHgwMCwgZGVsZXRlIHRoaXMgVkxBTiBmcm9tIE1lbWJlciBDb25maWd1cmF0aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQoJnZsYW5NQywgMHgwMCwgc2l6ZW9mKHJ0bDgzNjdjX3ZsYW5jb25maWd1c2VyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNWbGFuTWVtYmVyQ29uZmlnKGlkeCwgJnZsYW5NQykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBDbGVhciBEYXRhYmFzZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgdmxhbl9tYnJDZmdVc2FnZVtpZHhdID0gTUJSQ0ZHX1VOVVNFRDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZsYW5fbWJyQ2ZnVmlkW2lkeF0gICA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBOb3JtYWwgVkxBTiBjb25maWcsIHVwZGF0ZSB0byBtZW1iZXIgY29uZmlndXJhdGlvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgdmxhbk1DLmV2aWQgPSB2aWQ7CisgICAgICAgICAgICAgICAgICAgICAgICB2bGFuTUMubWJyID0gdmxhbjRLLm1icjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZsYW5NQy5maWRfbXN0aSA9IHZsYW40Sy5maWRfbXN0aTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZsYW5NQy5tZXRlcmlkeCA9IHZsYW40Sy5tZXRlcmlkeDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZsYW5NQy5lbnZsYW5wb2w9IHZsYW40Sy5lbnZsYW5wb2w7CisgICAgICAgICAgICAgICAgICAgICAgICB2bGFuTUMudmJwZW4gPSB2bGFuNEsudmJwZW47CisgICAgICAgICAgICAgICAgICAgICAgICB2bGFuTUMudmJwcmkgPSB2bGFuNEsudmJwcmk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNWbGFuTWVtYmVyQ29uZmlnKGlkeCwgJnZsYW5NQykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIHZpZCA+IDQwOTUgKi8KKyAgICAgICAgZm9yIChpZHggPSAwOyBpZHggPD0gUlRMODM2N0NfQ1ZJRFhNQVg7IGlkeCsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZih2bGFuX21ickNmZ1VzYWdlW2lkeF0gPT0gTUJSQ0ZHX1VTRURfQllfVkxBTikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZih2bGFuX21ickNmZ1ZpZFtpZHhdID09IHZpZCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8qIEZvdW5kISBVcGRhdGUgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYocGh5TWJyUG1hc2sgPT0gMHgwMCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogTWVtYmVyIHBvcnQgPSAweDAwLCBkZWxldGUgdGhpcyBWTEFOIGZyb20gTWVtYmVyIENvbmZpZ3VyYXRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbXNldCgmdmxhbk1DLCAweDAwLCBzaXplb2YocnRsODM2N2NfdmxhbmNvbmZpZ3VzZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1ZsYW5NZW1iZXJDb25maWcoaWR4LCAmdmxhbk1DKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIENsZWFyIERhdGFiYXNlICovCisgICAgICAgICAgICAgICAgICAgICAgICB2bGFuX21ickNmZ1VzYWdlW2lkeF0gPSBNQlJDRkdfVU5VU0VEOworICAgICAgICAgICAgICAgICAgICAgICAgdmxhbl9tYnJDZmdWaWRbaWR4XSAgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vcm1hbCBWTEFOIGNvbmZpZywgdXBkYXRlIHRvIG1lbWJlciBjb25maWd1cmF0aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgICB2bGFuTUMuZXZpZCA9IHZpZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZsYW5NQy5tYnIgPSBwaHlNYnJQbWFzazsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZsYW5NQy5maWRfbXN0aSA9IHBWbGFuQ2ZnLT5maWRfbXN0aTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZsYW5NQy5tZXRlcmlkeCA9IHBWbGFuQ2ZnLT5tZXRlcmlkeDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZsYW5NQy5lbnZsYW5wb2w9IHBWbGFuQ2ZnLT5lbnZsYW5wb2w7CisgICAgICAgICAgICAgICAgICAgICAgICB2bGFuTUMudmJwZW4gPSBwVmxhbkNmZy0+dmJwZW47CisgICAgICAgICAgICAgICAgICAgICAgICB2bGFuTUMudmJwcmkgPSBwVmxhbkNmZy0+dmJwcmk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNWbGFuTWVtYmVyQ29uZmlnKGlkeCwgJnZsYW5NQykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZV9ldmlkID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmKHZsYW5fbWJyQ2ZnVXNhZ2VbaWR4XSA9PSBNQlJDRkdfVU5VU0VEKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKDB4ZmZmZiA9PSBlbXB0eV9pbmRleCkKKyAgICAgICAgICAgICAgICAgICAgZW1wdHlfaW5kZXggPSBpZHg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBkb2Vzbid0IGZpbmQgb3V0IHNhbWUgRVZJRCBlbnRyeSBhbmQgdGhlcmUgaXMgZW1wdHkgaW5kZXggaW4gbWVtYmVyIGNvbmZpZ3VyYXRpb24gKi8KKyAgICAgICAgaWYoIChwaHlNYnJQbWFzayAhPSAweDAwKSAmJiAodXBkYXRlX2V2aWQgPT0gMCkgJiYgKGVtcHR5X2luZGV4ICE9IDB4RkZGRikgKQorICAgICAgICB7CisgICAgICAgICAgICB2bGFuTUMuZXZpZCA9IHZpZDsKKyAgICAgICAgICAgIHZsYW5NQy5tYnIgPSBwaHlNYnJQbWFzazsKKyAgICAgICAgICAgIHZsYW5NQy5maWRfbXN0aSA9IHBWbGFuQ2ZnLT5maWRfbXN0aTsKKyAgICAgICAgICAgIHZsYW5NQy5tZXRlcmlkeCA9IHBWbGFuQ2ZnLT5tZXRlcmlkeDsKKyAgICAgICAgICAgIHZsYW5NQy5lbnZsYW5wb2w9IHBWbGFuQ2ZnLT5lbnZsYW5wb2w7CisgICAgICAgICAgICB2bGFuTUMudmJwZW4gPSBwVmxhbkNmZy0+dmJwZW47CisgICAgICAgICAgICB2bGFuTUMudmJwcmkgPSBwVmxhbkNmZy0+dmJwcmk7CisgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNWbGFuTWVtYmVyQ29uZmlnKGVtcHR5X2luZGV4LCAmdmxhbk1DKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgIHZsYW5fbWJyQ2ZnVXNhZ2VbZW1wdHlfaW5kZXhdID0gTUJSQ0ZHX1VTRURfQllfVkxBTjsKKyAgICAgICAgICAgIHZsYW5fbWJyQ2ZnVmlkW2VtcHR5X2luZGV4XSA9IHZpZDsKKworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3ZsYW5fZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGEgVkxBTiBlbnRyeS4KKyAqIElucHV0OgorICogICAgICB2aWQgLSBWTEFOIElEIHRvIGNvbmZpZ3VyZS4KKyAqIE91dHB1dDoKKyAqICAgICAgcFZsYW5DZmcgLSBWTEFOIENvbmZpZ3VyYXRpb24KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX1ZMQU5fVklEICAgICAtIEludmFsaWQgVklEIHBhcmFtZXRlci4KKyAqIE5vdGU6CisgKgorICovCitydGtfYXBpX3JldF90IHJ0a192bGFuX2dldChydGtfdmxhbl90IHZpZCwgcnRrX3ZsYW5fY2ZnX3QgKnBWbGFuQ2ZnKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgcGh5TWJyUG1hc2s7CisgICAgcnRrX3VpbnQzMiBwaHlVbnRhZ1BtYXNrOworICAgIHJ0bDgzNjdjX3VzZXJfdmxhbjRrZW50cnkgdmxhbjRLOworICAgIHJ0bDgzNjdjX3ZsYW5jb25maWd1c2VyIHZsYW5NQzsKKyAgICBydGtfdWludDMyIGlkeDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiB2aWQgbXVzdCBiZSAwfjgxOTEgKi8KKyAgICBpZiAodmlkID4gUlRMODM2N0NfRVZJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9WTEFOX1ZJRDsKKworICAgIC8qIE51bGwgcG9pbnRlciBjaGVjayAqLworICAgIGlmKE5VTEwgPT0gcFZsYW5DZmcpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKHZpZCA8PSBSVEw4MzY3Q19WSURNQVgpCisgICAgeworICAgICAgICB2bGFuNEsudmlkID0gdmlkOworCisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1ZsYW40a0VudHJ5KCZ2bGFuNEspKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgICAgIHBoeU1iclBtYXNrICAgPSB2bGFuNEsubWJyOworICAgICAgICBwaHlVbnRhZ1BtYXNrID0gdmxhbjRLLnVudGFnOworICAgICAgICBpZihydGtfc3dpdGNoX3BvcnRtYXNrX1AyTF9nZXQocGh5TWJyUG1hc2ssICYocFZsYW5DZmctPm1icikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiBSVF9FUlJfRkFJTEVEOworCisgICAgICAgIGlmKHJ0a19zd2l0Y2hfcG9ydG1hc2tfUDJMX2dldChwaHlVbnRhZ1BtYXNrLCAmKHBWbGFuQ2ZnLT51bnRhZykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiBSVF9FUlJfRkFJTEVEOworCisgICAgICAgIHBWbGFuQ2ZnLT5pdmxfZW4gICAgPSB2bGFuNEsuaXZsX3N2bDsKKyAgICAgICAgcFZsYW5DZmctPmZpZF9tc3RpICA9IHZsYW40Sy5maWRfbXN0aTsKKyAgICAgICAgcFZsYW5DZmctPmVudmxhbnBvbCA9IHZsYW40Sy5lbnZsYW5wb2w7CisgICAgICAgIHBWbGFuQ2ZnLT5tZXRlcmlkeCAgPSB2bGFuNEsubWV0ZXJpZHg7CisgICAgICAgIHBWbGFuQ2ZnLT52YnBlbiAgICAgPSB2bGFuNEsudmJwZW47CisgICAgICAgIHBWbGFuQ2ZnLT52YnByaSAgICAgPSB2bGFuNEsudmJwcmk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGZvciAoaWR4ID0gMDsgaWR4IDw9IFJUTDgzNjdDX0NWSURYTUFYOyBpZHgrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYodmxhbl9tYnJDZmdVc2FnZVtpZHhdID09IE1CUkNGR19VU0VEX0JZX1ZMQU4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYodmxhbl9tYnJDZmdWaWRbaWR4XSA9PSB2aWQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNWbGFuTWVtYmVyQ29uZmlnKGlkeCwgJnZsYW5NQykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgICAgICAgICAgICAgcGh5TWJyUG1hc2sgICA9IHZsYW5NQy5tYnI7CisgICAgICAgICAgICAgICAgICAgIGlmKHJ0a19zd2l0Y2hfcG9ydG1hc2tfUDJMX2dldChwaHlNYnJQbWFzaywgJihwVmxhbkNmZy0+bWJyKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9GQUlMRUQ7CisKKyAgICAgICAgICAgICAgICAgICAgcFZsYW5DZmctPnVudGFnLmJpdHNbMF0gPSAwOworICAgICAgICAgICAgICAgICAgICBwVmxhbkNmZy0+aXZsX2VuICAgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgcFZsYW5DZmctPmZpZF9tc3RpICA9IHZsYW5NQy5maWRfbXN0aTsKKyAgICAgICAgICAgICAgICAgICAgcFZsYW5DZmctPmVudmxhbnBvbCA9IHZsYW5NQy5lbnZsYW5wb2w7CisgICAgICAgICAgICAgICAgICAgIHBWbGFuQ2ZnLT5tZXRlcmlkeCAgPSB2bGFuTUMubWV0ZXJpZHg7CisgICAgICAgICAgICAgICAgICAgIHBWbGFuQ2ZnLT52YnBlbiAgICAgPSB2bGFuTUMudmJwZW47CisgICAgICAgICAgICAgICAgICAgIHBWbGFuQ2ZnLT52YnByaSAgICAgPSB2bGFuTUMudmJwcmk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3ZsYW5fZWdyRmlsdGVyRW5hYmxlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBWTEFOIGVncmVzcyBmaWx0ZXIuCisgKiBJbnB1dDoKKyAqICAgICAgZWdyRmlsdGVyIC0gRWdyZXNzIGZpbHRlcmluZworICogT3V0cHV0OgorICogICAgICBOb25lLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfRU5BQkxFICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogTm90ZToKKyAqCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3ZsYW5fZWdyRmlsdGVyRW5hYmxlX3NldChydGtfZW5hYmxlX3QgZWdyRmlsdGVyKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKGVnckZpbHRlciA+PSBSVEtfRU5BQkxFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9FTkFCTEU7CisKKyAgICAvKiBlbmFibGUgVkxBTiAqLworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1ZsYW5GaWx0ZXIoKHJ0a191aW50MzIpZWdyRmlsdGVyKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3ZsYW5fZWdyRmlsdGVyRW5hYmxlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBWTEFOIGVncmVzcyBmaWx0ZXIuCisgKiBJbnB1dDoKKyAqICAgICAgcEVnckZpbHRlciAtIEVncmVzcyBmaWx0ZXJpbmcKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAtIE5VTEwgUG9pbnRlci4KKyAqIE5vdGU6CisgKgorICovCitydGtfYXBpX3JldF90IHJ0a192bGFuX2VnckZpbHRlckVuYWJsZV9nZXQocnRrX2VuYWJsZV90ICpwRWdyRmlsdGVyKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgIHJ0a191aW50MzIgc3RhdGU7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoTlVMTCA9PSBwRWdyRmlsdGVyKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIC8qIGVuYWJsZSBWTEFOICovCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljVmxhbkZpbHRlcigmc3RhdGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAqcEVnckZpbHRlciA9IChydGtfZW5hYmxlX3Qpc3RhdGU7CisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3ZsYW5fbWJyQ2ZnX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBhIFZMQU4gTWVtYmVyIENvbmZpZ3VyYXRpb24gZW50cnkgYnkgaW5kZXguCisgKiBJbnB1dDoKKyAqICAgICAgaWR4ICAgICAtIEluZGV4IG9mIFZMQU4gTWVtYmVyIENvbmZpZ3VyYXRpb24uCisgKiAgICAgIHBNYnJjZmcgLSBWTEFOIG1lbWJlciBDb25maWd1cmF0aW9uLgorICogT3V0cHV0OgorICogICAgICBOb25lLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogICAgICBSVF9FUlJfVkxBTl9WSUQgICAgIC0gSW52YWxpZCBWSUQgcGFyYW1ldGVyLgorICogTm90ZToKKyAqICAgICBTZXQgYSBWTEFOIE1lbWJlciBDb25maWd1cmF0aW9uIGVudHJ5IGJ5IGluZGV4LgorICovCitydGtfYXBpX3JldF90IHJ0a192bGFuX21ickNmZ19zZXQocnRrX3VpbnQzMiBpZHgsIHJ0a192bGFuX21icmNmZ190ICpwTWJyY2ZnKQoreworICAgIHJ0a19hcGlfcmV0X3QgICAgICAgICAgIHJldFZhbDsKKyAgICBydGtfdWludDMyICAgICAgICAgICAgICBwaHlNYnJQbWFzazsKKyAgICBydGw4MzY3Y192bGFuY29uZmlndXNlciBtYnJDZmc7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogRXJyb3IgY2hlY2sgKi8KKyAgICBpZihwTWJyY2ZnID09IE5VTEwpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYoaWR4ID4gUlRMODM2N0NfQ1ZJRFhNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZihwTWJyY2ZnLT5ldmlkID4gUlRMODM2N0NfRVZJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmKHBNYnJjZmctPmZpZF9tc3RpID4gUlRMODM2N0NfRklETUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX0wyX0ZJRDsKKworICAgIGlmKHBNYnJjZmctPmVudmxhbnBvbCA+PSBSVEtfRU5BQkxFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9FTkFCTEU7CisKKyAgICBpZihwTWJyY2ZnLT5tZXRlcmlkeCA+IFJUS19NQVhfTUVURVJfSUQpCisgICAgICAgIHJldHVybiBSVF9FUlJfRklMVEVSX01FVEVSX0lEOworCisgICAgaWYocE1icmNmZy0+dmJwZW4gPj0gUlRLX0VOQUJMRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfRU5BQkxFOworCisgICAgaWYocE1icmNmZy0+dmJwcmkgPiBSVEw4MzY3Q19QUklNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfUU9TX0lOVF9QUklPUklUWTsKKworICAgIC8qIENoZWNrIHBvcnQgbWFzayB2YWxpZCAqLworICAgIFJUS19DSEtfUE9SVE1BU0tfVkFMSUQoJihwTWJyY2ZnLT5tYnIpKTsKKworICAgIG1ickNmZy5ldmlkICAgICAgICAgPSBwTWJyY2ZnLT5ldmlkOworICAgIG1ickNmZy5maWRfbXN0aSAgICAgPSBwTWJyY2ZnLT5maWRfbXN0aTsKKyAgICBtYnJDZmcuZW52bGFucG9sICAgID0gcE1icmNmZy0+ZW52bGFucG9sOworICAgIG1ickNmZy5tZXRlcmlkeCAgICAgPSBwTWJyY2ZnLT5tZXRlcmlkeDsKKyAgICBtYnJDZmcudmJwZW4gICAgICAgID0gcE1icmNmZy0+dmJwZW47CisgICAgbWJyQ2ZnLnZicHJpICAgICAgICA9IHBNYnJjZmctPnZicHJpOworCisgICAgaWYocnRrX3N3aXRjaF9wb3J0bWFza19MMlBfZ2V0KCYocE1icmNmZy0+bWJyKSwgJnBoeU1iclBtYXNrKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiBSVF9FUlJfRkFJTEVEOworCisgICAgbWJyQ2ZnLm1iciA9IHBoeU1iclBtYXNrOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljVmxhbk1lbWJlckNvbmZpZyhpZHgsICZtYnJDZmcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAvKiBVcGRhdGUgRGF0YWJhc2UgKi8KKyAgICBpZiggKG1ickNmZy5ldmlkID09IDApICYmIChtYnJDZmcubWJyID09IDApICkKKyAgICB7CisgICAgICAgIHZsYW5fbWJyQ2ZnVXNhZ2VbaWR4XSA9IE1CUkNGR19VTlVTRUQ7CisgICAgICAgIHZsYW5fbWJyQ2ZnVmlkW2lkeF0gPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB2bGFuX21ickNmZ1VzYWdlW2lkeF0gPSBNQlJDRkdfVVNFRF9CWV9WTEFOOworICAgICAgICB2bGFuX21ickNmZ1ZpZFtpZHhdID0gbWJyQ2ZnLmV2aWQ7CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKKworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdmxhbl9tYnJDZmdfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IGEgVkxBTiBNZW1iZXIgQ29uZmlndXJhdGlvbiBlbnRyeSBieSBpbmRleC4KKyAqIElucHV0OgorICogICAgICBpZHggLSBJbmRleCBvZiBWTEFOIE1lbWJlciBDb25maWd1cmF0aW9uLgorICogT3V0cHV0OgorICogICAgICBwTWJyY2ZnIC0gVkxBTiBtZW1iZXIgQ29uZmlndXJhdGlvbi4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX1ZMQU5fVklEICAgICAtIEludmFsaWQgVklEIHBhcmFtZXRlci4KKyAqIE5vdGU6CisgKiAgICAgR2V0IGEgVkxBTiBNZW1iZXIgQ29uZmlndXJhdGlvbiBlbnRyeSBieSBpbmRleC4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfdmxhbl9tYnJDZmdfZ2V0KHJ0a191aW50MzIgaWR4LCBydGtfdmxhbl9tYnJjZmdfdCAqcE1icmNmZykKK3sKKyAgICBydGtfYXBpX3JldF90ICAgICAgICAgICByZXRWYWw7CisgICAgcnRrX3VpbnQzMiAgICAgICAgICAgICAgcGh5TWJyUG1hc2s7CisgICAgcnRsODM2N2NfdmxhbmNvbmZpZ3VzZXIgbWJyQ2ZnOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIEVycm9yIGNoZWNrICovCisgICAgaWYocE1icmNmZyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmKGlkeCA+IFJUTDgzNjdDX0NWSURYTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgbWVtc2V0KCZtYnJDZmcsIDB4MDAsIHNpemVvZihydGw4MzY3Y192bGFuY29uZmlndXNlcikpOworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1ZsYW5NZW1iZXJDb25maWcoaWR4LCAmbWJyQ2ZnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcE1icmNmZy0+ZXZpZCAgICAgICA9IG1ickNmZy5ldmlkOworICAgIHBNYnJjZmctPmZpZF9tc3RpICAgPSBtYnJDZmcuZmlkX21zdGk7CisgICAgcE1icmNmZy0+ZW52bGFucG9sICA9IG1ickNmZy5lbnZsYW5wb2w7CisgICAgcE1icmNmZy0+bWV0ZXJpZHggICA9IG1ickNmZy5tZXRlcmlkeDsKKyAgICBwTWJyY2ZnLT52YnBlbiAgICAgID0gbWJyQ2ZnLnZicGVuOworICAgIHBNYnJjZmctPnZicHJpICAgICAgPSBtYnJDZmcudmJwcmk7CisKKyAgICBwaHlNYnJQbWFzayA9IG1ickNmZy5tYnI7CisgICAgaWYocnRrX3N3aXRjaF9wb3J0bWFza19QMkxfZ2V0KHBoeU1iclBtYXNrLCAmKHBNYnJjZmctPm1icikpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9GQUlMRUQ7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgIHJ0a192bGFuX3BvcnRQdmlkX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBwb3J0IHRvIHNwZWNpZmllZCBWTEFOIElEKFBWSUQpLgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBQb3J0IGlkLgorICogICAgICBwdmlkIC0gU3BlY2lmaWVkIFZMQU4gSUQuCisgKiAgICAgIHByaW9yaXR5IC0gODAyLjFwIHByaW9yaXR5IGZvciB0aGUgUFZJRC4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfVkxBTl9QUklPUklUWSAgICAgICAgLSBJbnZhbGlkIHByaW9yaXR5LgorICogICAgICBSVF9FUlJfVkxBTl9FTlRSWV9OT1RfRk9VTkQgLSBWTEFOIGVudHJ5IG5vdCBmb3VuZC4KKyAqICAgICAgUlRfRVJSX1ZMQU5fVklEICAgICAgICAgICAgIC0gSW52YWxpZCBWSUQgcGFyYW1ldGVyLgorICogTm90ZToKKyAqICAgICAgIFRoZSBBUEkgaXMgdXNlZCBmb3IgUG9ydC1iYXNlZCBWTEFOLiBUaGUgdW50YWdnZWQgZnJhbWUgcmVjZWl2ZWQgZnJvbSB0aGUKKyAqICAgICAgIHBvcnQgd2lsbCBiZSBjbGFzc2lmaWVkIHRvIHRoZSBzcGVjaWZpZWQgVkxBTiBhbmQgYXNzaWduZWQgdG8gdGhlIHNwZWNpZmllZCBwcmlvcml0eS4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfdmxhbl9wb3J0UHZpZF9zZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfdmxhbl90IHB2aWQsIHJ0a19wcmlfdCBwcmlvcml0eSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIGluZGV4OworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIENoZWNrIFBvcnQgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQocG9ydCk7CisKKyAgICAvKiB2aWQgbXVzdCBiZSAwfjgxOTEgKi8KKyAgICBpZiAocHZpZCA+IFJUTDgzNjdDX0VWSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfVkxBTl9WSUQ7CisKKyAgICAvKiBwcmlvcml0eSBtdXN0IGJlIDB+NyAqLworICAgIGlmIChwcmlvcml0eSA+IFJUTDgzNjdDX1BSSU1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9WTEFOX1BSSU9SSVRZOworCisgICAgaWYoKHJldFZhbCA9IHJ0a192bGFuX2NoZWNrQW5kQ3JlYXRlTWJyKHB2aWQsICZpbmRleCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1ZsYW5Qb3J0QmFzZWRWSUQocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIGluZGV4LCBwcmlvcml0eSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a192bGFuX3BvcnRQdmlkX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBWTEFOIElEKFBWSUQpIG9uIHNwZWNpZmllZCBwb3J0LgorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgLSBQb3J0IGlkLgorICogT3V0cHV0OgorICogICAgICBwUHZpZCAtIFNwZWNpZmllZCBWTEFOIElELgorICogICAgICBwUHJpb3JpdHkgLSA4MDIuMXAgcHJpb3JpdHkgZm9yIHRoZSBQVklELgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqIE5vdGU6CisgKiAgICAgVGhlIEFQSSBjYW4gZ2V0IHRoZSBQVklEIGFuZCA4MDIuMXAgcHJpb3JpdHkgZm9yIHRoZSBQVklEIG9mIFBvcnQtYmFzZWQgVkxBTi4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfdmxhbl9wb3J0UHZpZF9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfdmxhbl90ICpwUHZpZCwgcnRrX3ByaV90ICpwUHJpb3JpdHkpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBpbmRleCwgcHJpOworICAgIHJ0bDgzNjdjX3ZsYW5jb25maWd1c2VyIG1ickNmZzsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBQb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgaWYoTlVMTCA9PSBwUHZpZCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZihOVUxMID09IHBQcmlvcml0eSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNWbGFuUG9ydEJhc2VkVklEKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCAmaW5kZXgsICZwcmkpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBtZW1zZXQoJm1ickNmZywgMHgwMCwgc2l6ZW9mKHJ0bDgzNjdjX3ZsYW5jb25maWd1c2VyKSk7CisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljVmxhbk1lbWJlckNvbmZpZyhpbmRleCwgJm1ickNmZykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICpwUHZpZCA9IG1ickNmZy5ldmlkOworICAgICpwUHJpb3JpdHkgPSBwcmk7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdmxhbl9wb3J0SWdyRmlsdGVyRW5hYmxlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIFNldCBWTEFOIGluZ3Jlc3MgZm9yIGVhY2ggcG9ydC4KKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqICAgICAgaWdyX2ZpbHRlciAtIFZMQU4gaW5ncmVzcyBmdW5jdGlvbiBlbmFibGUgc3RhdHVzLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyCisgKiAgICAgIFJUX0VSUl9FTkFCTEUgICAgICAgLSBJbnZhbGlkIGVuYWJsZSBpbnB1dAorICogTm90ZToKKyAqICAgICAgVGhlIHN0YXR1cyBvZiB2bGFuIGluZ3Jlc3MgZmlsdGVyIGlzIGFzIGZvbGxvd2luZzoKKyAqICAgICAgLSBESVNBQkxFRAorICogICAgICAtIEVOQUJMRUQKKyAqICAgICAgV2hpbGUgVkxBTiBmdW5jdGlvbiBpcyBlbmFibGVkLCBBU0lDIHdpbGwgZGVjaWRlIFZMQU4gSUQgZm9yIGVhY2ggcmVjZWl2ZWQgZnJhbWUgYW5kIGdldCBiZWxvbmdlZCBtZW1iZXIKKyAqICAgICAgcG9ydHMgZnJvbSBWTEFOIHRhYmxlLiBJZiByZWNlaXZlZCBwb3J0IGlzIG5vdCBiZWxvbmdlZCB0byBWTEFOIG1lbWJlciBwb3J0cywgQVNJQyB3aWxsIGRyb3AgcmVjZWl2ZWQgZnJhbWUgaWYgVkxBTiBpbmdyZXNzIGZ1bmN0aW9uIGlzIGVuYWJsZWQuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3ZsYW5fcG9ydElnckZpbHRlckVuYWJsZV9zZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfZW5hYmxlX3QgaWdyX2ZpbHRlcikKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBQb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgaWYgKGlncl9maWx0ZXIgPj0gUlRLX0VOQUJMRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfRU5BQkxFOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljVmxhbkluZ3Jlc3NGaWx0ZXIocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIGlncl9maWx0ZXIpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdmxhbl9wb3J0SWdyRmlsdGVyRW5hYmxlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBWTEFOIEluZ3Jlc3MgRmlsdGVyCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQb3J0IGlkLgorICogT3V0cHV0OgorICogICAgICBwSWdyX2ZpbHRlciAtIFZMQU4gaW5ncmVzcyBmdW5jdGlvbiBlbmFibGUgc3RhdHVzLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqIE5vdGU6CisgKiAgICAgVGhlIEFQSSBjYW4gR2V0IHRoZSBWTEFOIGluZ3Jlc3MgZmlsdGVyIHN0YXR1cy4KKyAqICAgICBUaGUgc3RhdHVzIG9mIHZsYW4gaW5ncmVzcyBmaWx0ZXIgaXMgYXMgZm9sbG93aW5nOgorICogICAgIC0gRElTQUJMRUQKKyAqICAgICAtIEVOQUJMRUQKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfdmxhbl9wb3J0SWdyRmlsdGVyRW5hYmxlX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19lbmFibGVfdCAqcElncl9maWx0ZXIpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgUG9ydCBWYWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwb3J0KTsKKworICAgIGlmKE5VTEwgPT0gcElncl9maWx0ZXIpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljVmxhbkluZ3Jlc3NGaWx0ZXIocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIHBJZ3JfZmlsdGVyKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3ZsYW5fcG9ydEFjY2VwdEZyYW1lVHlwZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgVkxBTiBhY2NlcHRfZnJhbWVfdHlwZQorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgICAgICAgICAgLSBQb3J0IGlkLgorICogICAgICBhY2NlcHRfZnJhbWVfdHlwZSAgIC0gYWNjZXB0IGZyYW1lIHR5cGUKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAgICAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqICAgICAgUlRfRVJSX1ZMQU5fQUNDRVBUX0ZSQU1FX1RZUEUgICAtIEludmFsaWQgZnJhbWUgdHlwZS4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgaXMgdXNlZCBmb3IgY2hlY2tpbmcgODAyLjFRIHRhZ2dlZCBmcmFtZXMuCisgKiAgICAgIFRoZSBhY2NlcHQgZnJhbWUgdHlwZSBhcyBmb2xsb3dpbmc6CisgKiAgICAgIC0gQUNDRVBUX0ZSQU1FX1RZUEVfQUxMCisgKiAgICAgIC0gQUNDRVBUX0ZSQU1FX1RZUEVfVEFHX09OTFkKKyAqICAgICAgLSBBQ0NFUFRfRlJBTUVfVFlQRV9VTlRBR19PTkxZCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3ZsYW5fcG9ydEFjY2VwdEZyYW1lVHlwZV9zZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfdmxhbl9hY2NlcHRGcmFtZVR5cGVfdCBhY2NlcHRfZnJhbWVfdHlwZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBQb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgaWYgKGFjY2VwdF9mcmFtZV90eXBlID49IEFDQ0VQVF9GUkFNRV9UWVBFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9WTEFOX0FDQ0VQVF9GUkFNRV9UWVBFOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljVmxhbkFjY3BldEZyYW1lVHlwZShydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgKHJ0bDgzNjdjX2FjY2ZyYW1ldHlwZSlhY2NlcHRfZnJhbWVfdHlwZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a192bGFuX3BvcnRBY2NlcHRGcmFtZVR5cGVfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFZMQU4gYWNjZXB0X2ZyYW1lX3R5cGUKKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqIE91dHB1dDoKKyAqICAgICAgcEFjY2VwdF9mcmFtZV90eXBlIC0gYWNjZXB0IGZyYW1lIHR5cGUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiBOb3RlOgorICogICAgIFRoZSBBUEkgY2FuIEdldCB0aGUgVkxBTiBpbmdyZXNzIGZpbHRlci4KKyAqICAgICBUaGUgYWNjZXB0IGZyYW1lIHR5cGUgYXMgZm9sbG93aW5nOgorICogICAgIC0gQUNDRVBUX0ZSQU1FX1RZUEVfQUxMCisgKiAgICAgLSBBQ0NFUFRfRlJBTUVfVFlQRV9UQUdfT05MWQorICogICAgIC0gQUNDRVBUX0ZSQU1FX1RZUEVfVU5UQUdfT05MWQorICovCitydGtfYXBpX3JldF90IHJ0a192bGFuX3BvcnRBY2NlcHRGcmFtZVR5cGVfZ2V0KHJ0a19wb3J0X3QgcG9ydCwgcnRrX3ZsYW5fYWNjZXB0RnJhbWVUeXBlX3QgKnBBY2NlcHRfZnJhbWVfdHlwZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGw4MzY3Y19hY2NmcmFtZXR5cGUgICBhY2NfZnJtX3R5cGU7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgUG9ydCBWYWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwb3J0KTsKKworICAgIGlmKE5VTEwgPT0gcEFjY2VwdF9mcmFtZV90eXBlKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1ZsYW5BY2NwZXRGcmFtZVR5cGUocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksICZhY2NfZnJtX3R5cGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAqcEFjY2VwdF9mcmFtZV90eXBlID0gKHJ0a192bGFuX2FjY2VwdEZyYW1lVHlwZV90KWFjY19mcm1fdHlwZTsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a192bGFuX3Byb3RvQW5kUG9ydEJhc2VkVmxhbl9hZGQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBBZGQgdGhlIHByb3RvY29sLWFuZC1wb3J0LWJhc2VkIHZsYW4gdG8gdGhlIHNwZWNpZmllZCBwb3J0IG9mIGRldmljZS4KKyAqIElucHV0OgorICogICAgICBwb3J0ICAtIFBvcnQgaWQuCisgKiAgICAgIHBJbmZvIC0gUHJvdG9jb2wgYW5kIHBvcnQgYmFzZWQgVkxBTiBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqICAgICAgUlRfRVJSX1ZMQU5fVklEICAgICAgICAgLSBJbnZhbGlkIFZJRCBwYXJhbWV0ZXIuCisgKiAgICAgIFJUX0VSUl9WTEFOX1BSSU9SSVRZICAgIC0gSW52YWxpZCBwcmlvcml0eS4KKyAqICAgICAgUlRfRVJSX1RCTF9GVUxMICAgICAgICAgLSBUYWJsZSBpcyBmdWxsLgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFICAgICAtIGlucHV0IG91dCBvZiByYW5nZS4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBpbmNvbWluZyBwYWNrZXQgd2hpY2ggbWF0Y2ggdGhlIHByb3RvY29sLWFuZC1wb3J0LWJhc2VkIHZsYW4gd2lsbCB1c2UgdGhlIGNvbmZpZ3VyZSB2aWQgZm9yIGluZ3Jlc3MgcGlwZWxpbmUKKyAqICAgICAgVGhlIGZyYW1lIHR5cGUgaXMgc2hvd24gaW4gdGhlIGZvbGxvd2luZzoKKyAqICAgICAgLSBGUkFNRV9UWVBFX0VUSEVSTkVUCisgKiAgICAgIC0gRlJBTUVfVFlQRV9SRkMxMDQyCisgKiAgICAgIC0gRlJBTUVfVFlQRV9MTENPVEhFUgorICovCitydGtfYXBpX3JldF90IHJ0a192bGFuX3Byb3RvQW5kUG9ydEJhc2VkVmxhbl9hZGQocnRrX3BvcnRfdCBwb3J0LCBydGtfdmxhbl9wcm90b0FuZFBvcnRJbmZvX3QgKnBJbmZvKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsLCBpOworICAgIHJ0a191aW50MzIgZXhpc3QsIGVtcHR5LCB1c2VkLCBpbmRleDsKKyAgICBydGw4MzY3Y19wcm90b2NvbGdkYXRhY2ZnIHBwYl9kYXRhX2NmZzsKKyAgICBydGw4MzY3Y19wcm90b2NvbHZsYW5jZmcgcHBiX3ZsYW5fY2ZnOworICAgIHJ0bDgzNjdjX3Byb3ZsYW5fZnJhbWV0eXBlIHRtcDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBQb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgaWYoTlVMTCA9PSBwSW5mbykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAocEluZm8tPnByb3RvX3R5cGUgPiBSVEtfTUFYX05VTV9PRl9QUk9UT19UWVBFKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIGlmIChwSW5mby0+ZnJhbWVfdHlwZSA+PSBGUkFNRV9UWVBFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICBpZiAocEluZm8tPmN2aWQgPiBSVEw4MzY3Q19WSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfVkxBTl9WSUQ7CisKKyAgICBpZiAocEluZm8tPmNwcmkgPiBSVEw4MzY3Q19QUklNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfVkxBTl9QUklPUklUWTsKKworICAgIGV4aXN0ID0gMHhGRjsKKyAgICBlbXB0eSA9IDB4RkY7CisgICAgZm9yIChpID0gUlRMODM2N0NfUFJPVE9WTEFOX0dJRFhfTUFYOyBpID49IDA7IGktLSkKKyAgICB7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1ZsYW5Qcm90b2NvbEJhc2VkR3JvdXBEYXRhKGksICZwcGJfZGF0YV9jZmcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICB0bXAgPSBwSW5mby0+ZnJhbWVfdHlwZTsKKyAgICAgICAgaWYgKHBwYl9kYXRhX2NmZy5ldGhlclR5cGUgPT0gcEluZm8tPnByb3RvX3R5cGUgJiYgcHBiX2RhdGFfY2ZnLmZyYW1lVHlwZSA9PSB0bXApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qQWxyZWFkeSBleGlzdCovCisgICAgICAgICAgICBleGlzdCA9IGk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChwcGJfZGF0YV9jZmcuZXRoZXJUeXBlID09IDAgJiYgcHBiX2RhdGFfY2ZnLmZyYW1lVHlwZSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICAvKmZpbmQgZW1wdHkgaW5kZXgqLworICAgICAgICAgICAgZW1wdHkgPSBpOworICAgICAgICB9CisgICAgfQorCisgICAgdXNlZCA9IDB4RkY7CisgICAgLypObyBlbXB0eSBhbmQgZXhpc3QgaW5kZXgqLworICAgIGlmICgweEZGID09IGV4aXN0ICYmIDB4RkYgPT0gZW1wdHkpCisgICAgICAgIHJldHVybiBSVF9FUlJfVEJMX0ZVTEw7CisgICAgZWxzZSBpZiAoZXhpc3Q8UlRMODM2N0NfUFJPVE9WTEFOX0dST1VQTk8pCisgICAgeworICAgICAgIC8qZXhpc3QgaW5kZXgqLworICAgICAgIHVzZWQgPSBleGlzdDsKKyAgICB9CisgICAgZWxzZSBpZiAoZW1wdHk8UlRMODM2N0NfUFJPVE9WTEFOX0dST1VQTk8pCisgICAgeworICAgICAgICAvKk5vIGV4aXN0IGluZGV4LCBidXQgaGF2ZSBlbXB0eSBpbmRleCovCisgICAgICAgIHBwYl9kYXRhX2NmZy5mcmFtZVR5cGUgPSBwSW5mby0+ZnJhbWVfdHlwZTsKKyAgICAgICAgcHBiX2RhdGFfY2ZnLmV0aGVyVHlwZSA9IHBJbmZvLT5wcm90b190eXBlOworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNWbGFuUHJvdG9jb2xCYXNlZEdyb3VwRGF0YShlbXB0eSwgJnBwYl9kYXRhX2NmZykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgICAgIHVzZWQgPSBlbXB0eTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKKworICAgIGlmKChyZXRWYWwgPSBydGtfdmxhbl9jaGVja0FuZENyZWF0ZU1icihwSW5mby0+Y3ZpZCwgJmluZGV4KSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcHBiX3ZsYW5fY2ZnLnZsYW5faWR4ID0gaW5kZXg7CisgICAgcHBiX3ZsYW5fY2ZnLnZhbGlkID0gVFJVRTsKKyAgICBwcGJfdmxhbl9jZmcucHJpb3JpdHkgPSBwSW5mby0+Y3ByaTsKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNWbGFuUG9ydEFuZFByb3RvY29sQmFzZWQocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIHVzZWQsICZwcGJfdmxhbl9jZmcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdmxhbl9wcm90b0FuZFBvcnRCYXNlZFZsYW5fZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHRoZSBwcm90b2NvbC1hbmQtcG9ydC1iYXNlZCB2bGFuIHRvIHRoZSBzcGVjaWZpZWQgcG9ydCBvZiBkZXZpY2UuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiAgICAgIHByb3RvX3R5cGUgLSBwcm90b2NvbC1hbmQtcG9ydC1iYXNlZCB2bGFuIHByb3RvY29sIHR5cGUuCisgKiAgICAgIGZyYW1lX3R5cGUgLSBwcm90b2NvbC1hbmQtcG9ydC1iYXNlZCB2bGFuIGZyYW1lIHR5cGUuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBJbmZvIC0gUHJvdG9jb2wgYW5kIHBvcnQgYmFzZWQgVkxBTiBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiAgICAgIFJUX0VSUl9PVVRfT0ZfUkFOR0UgICAgIC0gaW5wdXQgb3V0IG9mIHJhbmdlLgorICogICAgICBSVF9FUlJfVEJMX0ZVTEwgICAgICAgICAtIFRhYmxlIGlzIGZ1bGwuCisgKiBOb3RlOgorICogICAgIFRoZSBpbmNvbWluZyBwYWNrZXQgd2hpY2ggbWF0Y2ggdGhlIHByb3RvY29sLWFuZC1wb3J0LWJhc2VkIHZsYW4gd2lsbCB1c2UgdGhlIGNvbmZpZ3VyZSB2aWQgZm9yIGluZ3Jlc3MgcGlwZWxpbmUKKyAqICAgICBUaGUgZnJhbWUgdHlwZSBpcyBzaG93biBpbiB0aGUgZm9sbG93aW5nOgorICogICAgICAtIEZSQU1FX1RZUEVfRVRIRVJORVQKKyAqICAgICAgLSBGUkFNRV9UWVBFX1JGQzEwNDIKKyAqICAgICAgLSBGUkFNRV9UWVBFX0xMQ09USEVSCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3ZsYW5fcHJvdG9BbmRQb3J0QmFzZWRWbGFuX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a192bGFuX3Byb3RvX3R5cGVfdCBwcm90b190eXBlLCBydGtfdmxhbl9wcm90b1ZsYW5fZnJhbWVUeXBlX3QgZnJhbWVfdHlwZSwgcnRrX3ZsYW5fcHJvdG9BbmRQb3J0SW5mb190ICpwSW5mbykKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyIGk7CisgICAgcnRrX3VpbnQzMiBwcGJfaWR4OworICAgIHJ0bDgzNjdjX3Byb3RvY29sZ2RhdGFjZmcgcHBiX2RhdGFfY2ZnOworICAgIHJ0bDgzNjdjX3Byb3RvY29sdmxhbmNmZyBwcGJfdmxhbl9jZmc7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgUG9ydCBWYWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwb3J0KTsKKworICAgIGlmIChwcm90b190eXBlID4gUlRLX01BWF9OVU1fT0ZfUFJPVE9fVFlQRSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgICBpZiAoZnJhbWVfdHlwZSA+PSBGUkFNRV9UWVBFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9PVVRfT0ZfUkFOR0U7CisKKyAgIHBwYl9pZHggPSAwOworCisgICAgZm9yIChpID0gMDsgaTw9IFJUTDgzNjdDX1BST1RPVkxBTl9HSURYX01BWDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljVmxhblByb3RvY29sQmFzZWRHcm91cERhdGEoaSwgJnBwYl9kYXRhX2NmZykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgaWYgKCAocHBiX2RhdGFfY2ZnLmZyYW1lVHlwZSA9PSAocnRsODM2N2NfcHJvdmxhbl9mcmFtZXR5cGUpZnJhbWVfdHlwZSkgJiYgKHBwYl9kYXRhX2NmZy5ldGhlclR5cGUgPT0gcHJvdG9fdHlwZSkgKQorICAgICAgICB7CisgICAgICAgICAgICBwcGJfaWR4ID0gaTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKFJUTDgzNjdDX1BST1RPVkxBTl9HSURYX01BWCA9PSBpKQorICAgICAgICAgICAgcmV0dXJuIFJUX0VSUl9UQkxfRlVMTDsKKyAgICB9CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNWbGFuUG9ydEFuZFByb3RvY29sQmFzZWQocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIHBwYl9pZHgsICZwcGJfdmxhbl9jZmcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICBpZiAoRkFMU0UgPT0gcHBiX3ZsYW5fY2ZnLnZhbGlkKQorICAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKKworICAgIHBJbmZvLT5mcmFtZV90eXBlID0gZnJhbWVfdHlwZTsKKyAgICBwSW5mby0+cHJvdG9fdHlwZSA9IHByb3RvX3R5cGU7CisgICAgcEluZm8tPmN2aWQgPSB2bGFuX21ickNmZ1ZpZFtwcGJfdmxhbl9jZmcudmxhbl9pZHhdOworICAgIHBJbmZvLT5jcHJpID0gcHBiX3ZsYW5fY2ZnLnByaW9yaXR5OworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3ZsYW5fcHJvdG9BbmRQb3J0QmFzZWRWbGFuX2RlbAorICogRGVzY3JpcHRpb246CisgKiAgICAgIERlbGV0ZSB0aGUgcHJvdG9jb2wtYW5kLXBvcnQtYmFzZWQgdmxhbiBmcm9tIHRoZSBzcGVjaWZpZWQgcG9ydCBvZiBkZXZpY2UuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAgICAgICAgLSBQb3J0IGlkLgorICogICAgICBwcm90b190eXBlICAtIHByb3RvY29sLWFuZC1wb3J0LWJhc2VkIHZsYW4gcHJvdG9jb2wgdHlwZS4KKyAqICAgICAgZnJhbWVfdHlwZSAgLSBwcm90b2NvbC1hbmQtcG9ydC1iYXNlZCB2bGFuIGZyYW1lIHR5cGUuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFICAgICAtIGlucHV0IG91dCBvZiByYW5nZS4KKyAqICAgICAgUlRfRVJSX1RCTF9GVUxMICAgICAgICAgLSBUYWJsZSBpcyBmdWxsLgorICogTm90ZToKKyAqICAgICBUaGUgaW5jb21pbmcgcGFja2V0IHdoaWNoIG1hdGNoIHRoZSBwcm90b2NvbC1hbmQtcG9ydC1iYXNlZCB2bGFuIHdpbGwgdXNlIHRoZSBjb25maWd1cmUgdmlkIGZvciBpbmdyZXNzIHBpcGVsaW5lCisgKiAgICAgVGhlIGZyYW1lIHR5cGUgaXMgc2hvd24gaW4gdGhlIGZvbGxvd2luZzoKKyAqICAgICAgLSBGUkFNRV9UWVBFX0VUSEVSTkVUCisgKiAgICAgIC0gRlJBTUVfVFlQRV9SRkMxMDQyCisgKiAgICAgIC0gRlJBTUVfVFlQRV9MTENPVEhFUgorICovCitydGtfYXBpX3JldF90IHJ0a192bGFuX3Byb3RvQW5kUG9ydEJhc2VkVmxhbl9kZWwocnRrX3BvcnRfdCBwb3J0LCBydGtfdmxhbl9wcm90b190eXBlX3QgcHJvdG9fdHlwZSwgcnRrX3ZsYW5fcHJvdG9WbGFuX2ZyYW1lVHlwZV90IGZyYW1lX3R5cGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBpLCBiVXNlZDsKKyAgICBydGtfdWludDMyIHBwYl9pZHg7CisgICAgcnRsODM2N2NfcHJvdG9jb2xnZGF0YWNmZyBwcGJfZGF0YV9jZmc7CisgICAgcnRsODM2N2NfcHJvdG9jb2x2bGFuY2ZnIHBwYl92bGFuX2NmZzsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBQb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgaWYgKHByb3RvX3R5cGUgPiBSVEtfTUFYX05VTV9PRl9QUk9UT19UWVBFKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgIGlmIChmcmFtZV90eXBlID49IEZSQU1FX1RZUEVfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX09VVF9PRl9SQU5HRTsKKworICAgcHBiX2lkeCA9IDA7CisKKyAgICBmb3IgKGkgPSAwOyBpPD0gUlRMODM2N0NfUFJPVE9WTEFOX0dJRFhfTUFYOyBpKyspCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNWbGFuUHJvdG9jb2xCYXNlZEdyb3VwRGF0YShpLCAmcHBiX2RhdGFfY2ZnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICBpZiAoIChwcGJfZGF0YV9jZmcuZnJhbWVUeXBlID09IChydGw4MzY3Y19wcm92bGFuX2ZyYW1ldHlwZSlmcmFtZV90eXBlKSAmJiAocHBiX2RhdGFfY2ZnLmV0aGVyVHlwZSA9PSBwcm90b190eXBlKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHBwYl9pZHggPSBpOworICAgICAgICAgICAgcHBiX3ZsYW5fY2ZnLnZhbGlkID0gRkFMU0U7CisgICAgICAgICAgICBwcGJfdmxhbl9jZmcudmxhbl9pZHggPSAwOworICAgICAgICAgICAgcHBiX3ZsYW5fY2ZnLnByaW9yaXR5ID0gMDsKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1ZsYW5Qb3J0QW5kUHJvdG9jb2xCYXNlZChydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgcHBiX2lkeCwgJnBwYl92bGFuX2NmZykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICB9CisgICAgfQorCisgICAgYlVzZWQgPSBGQUxTRTsKKyAgICBSVEtfU0NBTl9BTExfUEhZX1BPUlRNQVNLKGkpCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNWbGFuUG9ydEFuZFByb3RvY29sQmFzZWQoaSwgcHBiX2lkeCwgJnBwYl92bGFuX2NmZykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgaWYgKFRSVUUgPT0gcHBiX3ZsYW5fY2ZnLnZhbGlkKQorICAgICAgICB7CisgICAgICAgICAgICBiVXNlZCA9IFRSVUU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoRkFMU0UgPT0gYlVzZWQpIC8qTm8gUG9ydCB1c2UgdGhpcyBQUEIgSW5kZXgsIERlbGV0ZSBpdCovCisgICAgeworICAgICAgICBwcGJfZGF0YV9jZmcuZXRoZXJUeXBlPTA7CisgICAgICAgIHBwYl9kYXRhX2NmZy5mcmFtZVR5cGU9MDsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljVmxhblByb3RvY29sQmFzZWRHcm91cERhdGEocHBiX2lkeCwgJnBwYl9kYXRhX2NmZykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3ZsYW5fcHJvdG9BbmRQb3J0QmFzZWRWbGFuX2RlbEFsbAorICogRGVzY3JpcHRpb246CisgKiAgICAgRGVsZXRlIGFsbCBwcm90b2NvbC1hbmQtcG9ydC1iYXNlZCB2bGFucyBmcm9tIHRoZSBzcGVjaWZpZWQgcG9ydCBvZiBkZXZpY2UuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUKKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfT1VUX09GX1JBTkdFICAgICAtIGlucHV0IG91dCBvZiByYW5nZS4KKyAqIE5vdGU6CisgKiAgICAgVGhlIGluY29taW5nIHBhY2tldCB3aGljaCBtYXRjaCB0aGUgcHJvdG9jb2wtYW5kLXBvcnQtYmFzZWQgdmxhbiB3aWxsIHVzZSB0aGUgY29uZmlndXJlIHZpZCBmb3IgaW5ncmVzcyBwaXBlbGluZQorICogICAgIERlbGV0ZSBhbGwgZmxvdyB0YWJsZSBwcm90b2NvbC1hbmQtcG9ydC1iYXNlZCB2bGFuIGVudHJpZXMuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3ZsYW5fcHJvdG9BbmRQb3J0QmFzZWRWbGFuX2RlbEFsbChydGtfcG9ydF90IHBvcnQpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRrX3VpbnQzMiBpLCBqLCBiVXNlZFs0XTsKKyAgICBydGw4MzY3Y19wcm90b2NvbGdkYXRhY2ZnIHBwYl9kYXRhX2NmZzsKKyAgICBydGw4MzY3Y19wcm90b2NvbHZsYW5jZmcgcHBiX3ZsYW5fY2ZnOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIENoZWNrIFBvcnQgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQocG9ydCk7CisKKyAgICBmb3IgKGkgPSAwOyBpPD0gUlRMODM2N0NfUFJPVE9WTEFOX0dJRFhfTUFYOyBpKyspCisgICAgeworICAgICAgICBwcGJfdmxhbl9jZmcudmFsaWQgPSBGQUxTRTsKKyAgICAgICAgcHBiX3ZsYW5fY2ZnLnZsYW5faWR4ID0gMDsKKyAgICAgICAgcHBiX3ZsYW5fY2ZnLnByaW9yaXR5ID0gMDsKKyAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljVmxhblBvcnRBbmRQcm90b2NvbEJhc2VkKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCBpLCAmcHBiX3ZsYW5fY2ZnKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKyAgICB9CisKKyAgICBiVXNlZFswXSA9IEZBTFNFOworICAgIGJVc2VkWzFdID0gRkFMU0U7CisgICAgYlVzZWRbMl0gPSBGQUxTRTsKKyAgICBiVXNlZFszXSA9IEZBTFNFOworICAgIFJUS19TQ0FOX0FMTF9QSFlfUE9SVE1BU0soaSkKKyAgICB7CisgICAgICAgIGZvciAoaiA9IDA7IGogPD0gUlRMODM2N0NfUFJPVE9WTEFOX0dJRFhfTUFYOyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1ZsYW5Qb3J0QW5kUHJvdG9jb2xCYXNlZChpLGosICZwcGJfdmxhbl9jZmcpKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICAgICAgICAgaWYgKFRSVUUgPT0gcHBiX3ZsYW5fY2ZnLnZhbGlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJVc2VkW2pdID0gVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoaSA9IDA7IGk8PSBSVEw4MzY3Q19QUk9UT1ZMQU5fR0lEWF9NQVg7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChGQUxTRSA9PSBiVXNlZFtpXSkgLypObyBQb3J0IHVzZSB0aGlzIFBQQiBJbmRleCwgRGVsZXRlIGl0Ki8KKyAgICAgICAgeworICAgICAgICAgICAgcHBiX2RhdGFfY2ZnLmV0aGVyVHlwZT0wOworICAgICAgICAgICAgcHBiX2RhdGFfY2ZnLmZyYW1lVHlwZT0wOworICAgICAgICAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljVmxhblByb3RvY29sQmFzZWRHcm91cERhdGEoaSwgJnBwYl9kYXRhX2NmZykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgICAgICB9CisgICAgfQorCisKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a192bGFuX3RhZ01vZGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IENWTEFOIGVncmVzcyB0YWcgbW9kZQorICogSW5wdXQ6CisgKiAgICAgIHBvcnQgICAgICAgIC0gUG9ydCBpZC4KKyAqICAgICAgdGFnX21vZGUgICAgLSBUaGUgZWdyZXNzIHRhZyBtb2RlLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIuCisgKiAgICAgIFJUX0VSUl9FTkFCTEUgICAgICAgLSBJbnZhbGlkIGVuYWJsZSBpbnB1dC4KKyAqIE5vdGU6CisgKiAgICAgIFRoZSBBUEkgY2FuIHNldCBFZ3Jlc3MgdGFnIG1vZGUuIFRoZXJlIGFyZSA0IG1vZGUgZm9yIGVncmVzcyB0YWc6CisgKiAgICAgIC0gVkxBTl9UQUdfTU9ERV9PUklHSU5BTCwKKyAqICAgICAgLSBWTEFOX1RBR19NT0RFX0tFRVBfRk9STUFULAorICogICAgICAtIFZMQU5fVEFHX01PREVfUFJJLgorICogICAgICAtIFZMQU5fVEFHX01PREVfUkVBTF9LRUVQX0ZPUk1BVCwKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfdmxhbl90YWdNb2RlX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a192bGFuX3RhZ01vZGVfdCB0YWdfbW9kZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAvKiBDaGVjayBQb3J0IFZhbGlkICovCisgICAgUlRLX0NIS19QT1JUX1ZBTElEKHBvcnQpOworCisgICAgaWYgKHRhZ19tb2RlID49IFZMQU5fVEFHX01PREVfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX1BPUlRfSUQ7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNWbGFuRWdyZXNzVGFnTW9kZShydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgdGFnX21vZGUpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdmxhbl90YWdNb2RlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBDVkxBTiBlZ3Jlc3MgdGFnIG1vZGUKKyAqIElucHV0OgorICogICAgICBwb3J0IC0gUG9ydCBpZC4KKyAqIE91dHB1dDoKKyAqICAgICAgcFRhZ19tb2RlIC0gVGhlIGVncmVzcyB0YWcgbW9kZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBnZXQgRWdyZXNzIHRhZyBtb2RlLiBUaGVyZSBhcmUgNCBtb2RlIGZvciBlZ3Jlc3MgdGFnOgorICogICAgICAtIFZMQU5fVEFHX01PREVfT1JJR0lOQUwsCisgKiAgICAgIC0gVkxBTl9UQUdfTU9ERV9LRUVQX0ZPUk1BVCwKKyAqICAgICAgLSBWTEFOX1RBR19NT0RFX1BSSS4KKyAqICAgICAgLSBWTEFOX1RBR19NT0RFX1JFQUxfS0VFUF9GT1JNQVQsCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3ZsYW5fdGFnTW9kZV9nZXQocnRrX3BvcnRfdCBwb3J0LCBydGtfdmxhbl90YWdNb2RlX3QgKnBUYWdfbW9kZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGw4MzY3Y19lZ3RhZ21vZGUgIG1vZGU7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgUG9ydCBWYWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwb3J0KTsKKworICAgIGlmKE5VTEwgPT0gcFRhZ19tb2RlKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1ZsYW5FZ3Jlc3NUYWdNb2RlKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCAmbW9kZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICpwVGFnX21vZGUgPSAocnRrX3ZsYW5fdGFnTW9kZV90KW1vZGU7CisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3ZsYW5fdHJhbnNwYXJlbnRfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IFZMQU4gdHJhbnNwYXJlbnQgbW9kZQorICogSW5wdXQ6CisgKiAgICAgIGVncl9wb3J0ICAgICAgICAtIEVncmVzcyBQb3J0IGlkLgorICogICAgICBwSWdyX3BtYXNrICAgICAgLSBJbmdyZXNzIFBvcnQgTWFzay4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiBOb3RlOgorICogICAgICBOb25lLgorICovCitydGtfYXBpX3JldF90IHJ0a192bGFuX3RyYW5zcGFyZW50X3NldChydGtfcG9ydF90IGVncl9wb3J0LCBydGtfcG9ydG1hc2tfdCAqcElncl9wbWFzaykKK3sKKyAgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgIHJ0a191aW50MzIgICAgcG1hc2s7CisKKyAgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAgLyogQ2hlY2sgUG9ydCBWYWxpZCAqLworICAgICBSVEtfQ0hLX1BPUlRfVkFMSUQoZWdyX3BvcnQpOworCisgICAgIGlmKE5VTEwgPT0gcElncl9wbWFzaykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICAgUlRLX0NIS19QT1JUTUFTS19WQUxJRChwSWdyX3BtYXNrKTsKKworICAgICBpZihydGtfc3dpdGNoX3BvcnRtYXNrX0wyUF9nZXQocElncl9wbWFzaywgJnBtYXNrKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiBSVF9FUlJfRkFJTEVEOworCisgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1ZsYW5UcmFuc3BhcmVudChydGtfc3dpdGNoX3BvcnRfTDJQX2dldChlZ3JfcG9ydCksIHBtYXNrKSkgIT0gUlRfRVJSX09LKQorICAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdmxhbl90cmFuc3BhcmVudF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgVkxBTiB0cmFuc3BhcmVudCBtb2RlCisgKiBJbnB1dDoKKyAqICAgICAgZWdyX3BvcnQgICAgICAgIC0gRWdyZXNzIFBvcnQgaWQuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBJZ3JfcG1hc2sgICAgICAtIEluZ3Jlc3MgUG9ydCBNYXNrCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogTm90ZToKKyAqICAgICAgTm9uZS4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfdmxhbl90cmFuc3BhcmVudF9nZXQocnRrX3BvcnRfdCBlZ3JfcG9ydCwgcnRrX3BvcnRtYXNrX3QgKnBJZ3JfcG1hc2spCit7CisgICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworICAgICBydGtfdWludDMyICAgIHBtYXNrOworCisgICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgIC8qIENoZWNrIFBvcnQgVmFsaWQgKi8KKyAgICAgUlRLX0NIS19QT1JUX1ZBTElEKGVncl9wb3J0KTsKKworICAgICBpZihOVUxMID09IHBJZ3JfcG1hc2spCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1ZsYW5UcmFuc3BhcmVudChydGtfc3dpdGNoX3BvcnRfTDJQX2dldChlZ3JfcG9ydCksICZwbWFzaykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgaWYocnRrX3N3aXRjaF9wb3J0bWFza19QMkxfZ2V0KHBtYXNrLCBwSWdyX3BtYXNrKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiBSVF9FUlJfRkFJTEVEOworCisgICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a192bGFuX2tlZXBfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IFZMQU4gZWdyZXNzIGtlZXAgbW9kZQorICogSW5wdXQ6CisgKiAgICAgIGVncl9wb3J0ICAgICAgICAtIEVncmVzcyBQb3J0IGlkLgorICogICAgICBwSWdyX3BtYXNrICAgICAgLSBJbmdyZXNzIFBvcnQgTWFzay4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgICAgICAtIEludmFsaWQgcG9ydCBudW1iZXIuCisgKiBOb3RlOgorICogICAgICBOb25lLgorICovCitydGtfYXBpX3JldF90IHJ0a192bGFuX2tlZXBfc2V0KHJ0a19wb3J0X3QgZWdyX3BvcnQsIHJ0a19wb3J0bWFza190ICpwSWdyX3BtYXNrKQoreworICAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICAgcnRrX3VpbnQzMiAgICBwbWFzazsKKworICAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgICAvKiBDaGVjayBQb3J0IFZhbGlkICovCisgICAgIFJUS19DSEtfUE9SVF9WQUxJRChlZ3JfcG9ydCk7CisKKyAgICAgaWYoTlVMTCA9PSBwSWdyX3BtYXNrKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgICBSVEtfQ0hLX1BPUlRNQVNLX1ZBTElEKHBJZ3JfcG1hc2spOworCisgICAgIGlmKHJ0a19zd2l0Y2hfcG9ydG1hc2tfTDJQX2dldChwSWdyX3BtYXNrLCAmcG1hc2spICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9GQUlMRUQ7CisKKyAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljVmxhbkVncmVzc0tlZXAocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQoZWdyX3BvcnQpLCBwbWFzaykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3ZsYW5fa2VlcF9nZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBHZXQgVkxBTiBlZ3Jlc3Mga2VlcCBtb2RlCisgKiBJbnB1dDoKKyAqICAgICAgZWdyX3BvcnQgICAgICAgIC0gRWdyZXNzIFBvcnQgaWQuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBJZ3JfcG1hc2sgICAgICAtIEluZ3Jlc3MgUG9ydCBNYXNrCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEICAgICAgLSBJbnZhbGlkIHBvcnQgbnVtYmVyLgorICogTm90ZToKKyAqICAgICAgTm9uZS4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfdmxhbl9rZWVwX2dldChydGtfcG9ydF90IGVncl9wb3J0LCBydGtfcG9ydG1hc2tfdCAqcElncl9wbWFzaykKK3sKKyAgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgIHJ0a191aW50MzIgICAgcG1hc2s7CisKKyAgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICAgLyogQ2hlY2sgUG9ydCBWYWxpZCAqLworICAgICBSVEtfQ0hLX1BPUlRfVkFMSUQoZWdyX3BvcnQpOworCisgICAgIGlmKE5VTEwgPT0gcElncl9wbWFzaykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljVmxhbkVncmVzc0tlZXAocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQoZWdyX3BvcnQpLCAmcG1hc2spKSAhPSBSVF9FUlJfT0spCisgICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgIGlmKHJ0a19zd2l0Y2hfcG9ydG1hc2tfUDJMX2dldChwbWFzaywgcElncl9wbWFzaykgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gUlRfRVJSX0ZBSUxFRDsKKworICAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdmxhbl9zdGdfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHNwYW5uaW5nIHRyZWUgZ3JvdXAgaW5zdGFuY2Ugb2YgdGhlIHZsYW4gdG8gdGhlIHNwZWNpZmllZCBkZXZpY2UKKyAqIElucHV0OgorICogICAgICB2aWQgLSBTcGVjaWZpZWQgVkxBTiBJRC4KKyAqICAgICAgc3RnIC0gc3Bhbm5pbmcgdHJlZSBncm91cCBpbnN0YW5jZS4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfTVNUSSAgICAgICAgIC0gSW52YWxpZCBtc3RpIHBhcmFtZXRlcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIuCisgKiAgICAgIFJUX0VSUl9WTEFOX1ZJRCAgICAgLSBJbnZhbGlkIFZJRCBwYXJhbWV0ZXIuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBzZXQgc3Bhbm5pbmcgdHJlZSBncm91cCBpbnN0YW5jZSBvZiB0aGUgdmxhbiB0byB0aGUgc3BlY2lmaWVkIGRldmljZS4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfdmxhbl9zdGdfc2V0KHJ0a192bGFuX3QgdmlkLCBydGtfc3RwX21zdGlfaWRfdCBzdGcpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRsODM2N2NfdXNlcl92bGFuNGtlbnRyeSB2bGFuNEs7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogdmlkIG11c3QgYmUgMH40MDk1ICovCisgICAgaWYgKHZpZCA+IFJUTDgzNjdDX1ZJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9WTEFOX1ZJRDsKKworICAgIC8qIHByaW9yaXR5IG11c3QgYmUgMH4xNSAqLworICAgIGlmIChzdGcgPiBSVEw4MzY3Q19NU1RJTUFYKQorICAgICAgICByZXR1cm4gUlRfRVJSX01TVEk7CisKKyAgICAvKiB1cGRhdGUgNEsgdGFibGUgKi8KKyAgICB2bGFuNEsudmlkID0gdmlkOworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1ZsYW40a0VudHJ5KCZ2bGFuNEspKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICB2bGFuNEsuZmlkX21zdGk9IHN0ZzsKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNWbGFuNGtFbnRyeSgmdmxhbjRLKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3ZsYW5fc3RnX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBzcGFubmluZyB0cmVlIGdyb3VwIGluc3RhbmNlIG9mIHRoZSB2bGFuIHRvIHRoZSBzcGVjaWZpZWQgZGV2aWNlCisgKiBJbnB1dDoKKyAqICAgICAgdmlkIC0gU3BlY2lmaWVkIFZMQU4gSUQuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBTdGcgLSBzcGFubmluZyB0cmVlIGdyb3VwIGluc3RhbmNlLgorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfSU5QVVQgICAgICAgIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzLgorICogICAgICBSVF9FUlJfVkxBTl9WSUQgICAgIC0gSW52YWxpZCBWSUQgcGFyYW1ldGVyLgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gZ2V0IHNwYW5uaW5nIHRyZWUgZ3JvdXAgaW5zdGFuY2Ugb2YgdGhlIHZsYW4gdG8gdGhlIHNwZWNpZmllZCBkZXZpY2UuCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3ZsYW5fc3RnX2dldChydGtfdmxhbl90IHZpZCwgcnRrX3N0cF9tc3RpX2lkX3QgKnBTdGcpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisgICAgcnRsODM2N2NfdXNlcl92bGFuNGtlbnRyeSB2bGFuNEs7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogdmlkIG11c3QgYmUgMH40MDk1ICovCisgICAgaWYgKHZpZCA+IFJUTDgzNjdDX1ZJRE1BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9WTEFOX1ZJRDsKKworICAgIGlmKE5VTEwgPT0gcFN0ZykKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICAvKiB1cGRhdGUgNEsgdGFibGUgKi8KKyAgICB2bGFuNEsudmlkID0gdmlkOworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1ZsYW40a0VudHJ5KCZ2bGFuNEspKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAqcFN0ZyA9IHZsYW40Sy5maWRfbXN0aTsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a192bGFuX3BvcnRGaWRfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IHBvcnQtYmFzZWQgZmlsdGVyaW5nIGRhdGFiYXNlCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiAgICAgIGVuYWJsZSAtIGViYWJsZSBwb3J0LWJhc2VkIEZJRAorICogICAgICBmaWQgLSBTcGVjaWZpZWQgZmlsdGVyaW5nIGRhdGFiYXNlLgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9MMl9GSUQgLSBJbnZhbGlkIGZpZC4KKyAqICAgICAgUlRfRVJSX0lOUFVUIC0gSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXIuCisgKiAgICAgIFJUX0VSUl9QT1JUX0lEIC0gSW52YWxpZCBwb3J0IElELgorICogTm90ZToKKyAqICAgICAgVGhlIEFQSSBjYW4gc2V0IHBvcnQtYmFzZWQgZmlsdGVyaW5nIGRhdGFiYXNlLiBJZiB0aGUgZnVuY3Rpb24gaXMgZW5hYmxlZCwgYWxsIGlucHV0CisgKiAgICAgIHBhY2tldHMgd2lsbCBiZSBhc3NpZ25lZCB0byB0aGUgcG9ydC1iYXNlZCBmaWQgcmVnYXJkbGVzcyB2bGFuIHRhZy4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfdmxhbl9wb3J0RmlkX3NldChydGtfcG9ydF90IHBvcnQsIHJ0a19lbmFibGVfdCBlbmFibGUsIHJ0a19maWRfdCBmaWQpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgUG9ydCBWYWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwb3J0KTsKKworICAgIGlmIChlbmFibGU+PVJUS19FTkFCTEVfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0VOQUJMRTsKKworICAgIC8qIGZpZCBtdXN0IGJlIDB+NDA5NSAqLworICAgIGlmIChmaWQgPiBSVEtfRklEX01BWCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9MMl9GSUQ7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNQb3J0QmFzZWRGaWRFbihydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgZW5hYmxlKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0QXNpY1BvcnRCYXNlZEZpZChydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgZmlkKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a192bGFuX3BvcnRGaWRfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IHBvcnQtYmFzZWQgZmlsdGVyaW5nIGRhdGFiYXNlCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBFbmFibGUgLSBlYmFibGUgcG9ydC1iYXNlZCBGSUQKKyAqICAgICAgcEZpZCAtIFNwZWNpZmllZCBmaWx0ZXJpbmcgZGF0YWJhc2UuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAtIEludmFsaWQgaW5wdXQgcGFyYW1ldGVycy4KKyAqICAgICAgUlRfRVJSX1BPUlRfSUQgLSBJbnZhbGlkIHBvcnQgSUQuCisgKiBOb3RlOgorICogICAgICBUaGUgQVBJIGNhbiBnZXQgcG9ydC1iYXNlZCBmaWx0ZXJpbmcgZGF0YWJhc2Ugc3RhdHVzLiBJZiB0aGUgZnVuY3Rpb24gaXMgZW5hYmxlZCwgYWxsIGlucHV0CisgKiAgICAgIHBhY2tldHMgd2lsbCBiZSBhc3NpZ25lZCB0byB0aGUgcG9ydC1iYXNlZCBmaWQgcmVnYXJkbGVzcyB2bGFuIHRhZy4KKyAqLworcnRrX2FwaV9yZXRfdCBydGtfdmxhbl9wb3J0RmlkX2dldChydGtfcG9ydF90IHBvcnQsIHJ0a19lbmFibGVfdCAqcEVuYWJsZSwgcnRrX2ZpZF90ICpwRmlkKQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIC8qIENoZWNrIFBvcnQgVmFsaWQgKi8KKyAgICBSVEtfQ0hLX1BPUlRfVkFMSUQocG9ydCk7CisKKyAgICBpZihOVUxMID09IHBFbmFibGUpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYoTlVMTCA9PSBwRmlkKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BvcnRCYXNlZEZpZEVuKHJ0a19zd2l0Y2hfcG9ydF9MMlBfZ2V0KHBvcnQpLCBwRW5hYmxlKSkhPVJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1BvcnRCYXNlZEZpZChydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgcEZpZCkpIT1SVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdmxhbl9VbnRhZ0RzY3BQcmlvcml0eUVuYWJsZV9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgVW50YWcgRFNDUCBwcmlvcml0eSBhc3NpZ24KKyAqIElucHV0OgorICogICAgICBlbmFibGUgLSBzdGF0ZSBvZiBVbnRhZyBEU0NQIHByaW9yaXR5IGFzc2lnbgorICogT3V0cHV0OgorICogICAgICBOb25lCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9FTkFCTEUgICAgICAgICAgLSBJbnZhbGlkIGlucHV0IHBhcmFtZXRlcnMuCisgKiBOb3RlOgorICoKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfdmxhbl9VbnRhZ0RzY3BQcmlvcml0eUVuYWJsZV9zZXQocnRrX2VuYWJsZV90IGVuYWJsZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihlbmFibGUgPj0gUlRLX0VOQUJMRV9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfRU5BQkxFOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19zZXRBc2ljVmxhblVudGFnRHNjcFByaW9yaXR5RW4oKHJ0a191aW50MzIpZW5hYmxlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3ZsYW5fVW50YWdEc2NwUHJpb3JpdHlFbmFibGVfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFVudGFnIERTQ1AgcHJpb3JpdHkgYXNzaWduCisgKiBJbnB1dDoKKyAqICAgICAgTm9uZQorICogT3V0cHV0OgorICogICAgICBwRW5hYmxlIC0gc3RhdGUgb2YgVW50YWcgRFNDUCBwcmlvcml0eSBhc3NpZ24KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX05VTExfUE9JTlRFUiAgICAtIE51bGwgcG9pbnRlcgorICogTm90ZToKKyAqCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3ZsYW5fVW50YWdEc2NwUHJpb3JpdHlFbmFibGVfZ2V0KHJ0a19lbmFibGVfdCAqcEVuYWJsZSkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGtfdWludDMyICB2YWx1ZTsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZihOVUxMID09IHBFbmFibGUpCisgICAgICAgIHJldHVybiBSVF9FUlJfTlVMTF9QT0lOVEVSOworCisgICAgaWYgKChyZXRWYWwgPSBydGw4MzY3Y19nZXRBc2ljVmxhblVudGFnRHNjcFByaW9yaXR5RW4oJnZhbHVlKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgKnBFbmFibGUgPSAocnRrX2VuYWJsZV90KXZhbHVlOworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdHBfbXN0cFN0YXRlX3NldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIENvbmZpZ3VyZSBzcGFubmluZyB0cmVlIHN0YXRlIHBlciBlYWNoIHBvcnQuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQKKyAqICAgICAgbXN0aSAtIE11bHRpcGxlIHNwYW5uaW5nIHRyZWUgaW5zdGFuY2UuCisgKiAgICAgIHN0cF9zdGF0ZSAtIFNwYW5uaW5nIHRyZWUgc3RhdGUgZm9yIG1zdGkKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqICAgICAgUlRfRVJSX01TVEkgICAgICAgICAtIEludmFsaWQgbXN0aSBwYXJhbWV0ZXIuCisgKiAgICAgIFJUX0VSUl9NU1RQX1NUQVRFICAgLSBJbnZhbGlkIFNUUCBzdGF0ZS4KKyAqIE5vdGU6CisgKiAgICAgIFN5c3RlbSBzdXBwb3J0cyBwZXItcG9ydCBtdWx0aXBsZSBzcGFubmluZyB0cmVlIHN0YXRlIGZvciBlYWNoIG1zdGkuCisgKiAgICAgIFRoZXJlIGFyZSBmb3VyIHN0YXRlcyBzdXBwb3J0ZWQgYnkgQVNJQy4KKyAqICAgICAgLSBTVFBfU1RBVEVfRElTQUJMRUQKKyAqICAgICAgLSBTVFBfU1RBVEVfQkxPQ0tJTkcKKyAqICAgICAgLSBTVFBfU1RBVEVfTEVBUk5JTkcKKyAqICAgICAgLSBTVFBfU1RBVEVfRk9SV0FSRElORworICovCitydGtfYXBpX3JldF90IHJ0a19zdHBfbXN0cFN0YXRlX3NldChydGtfc3RwX21zdGlfaWRfdCBtc3RpLCBydGtfcG9ydF90IHBvcnQsIHJ0a19zdHBfc3RhdGVfdCBzdHBfc3RhdGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgUG9ydCBWYWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwb3J0KTsKKworICAgIGlmIChtc3RpID4gUlRLX01BWF9OVU1fT0ZfTVNUSSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9NU1RJOworCisgICAgaWYgKHN0cF9zdGF0ZSA+PSBTVFBfU1RBVEVfRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX01TVFBfU1RBVEU7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNTcGFubmluZ1RyZWVTdGF0dXMocnRrX3N3aXRjaF9wb3J0X0wyUF9nZXQocG9ydCksIG1zdGksIHN0cF9zdGF0ZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a19zdHBfbXN0cFN0YXRlX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBzcGFubmluZyB0cmVlIHN0YXRlIHBlciBlYWNoIHBvcnQuCisgKiBJbnB1dDoKKyAqICAgICAgcG9ydCAtIFBvcnQgaWQuCisgKiAgICAgIG1zdGkgLSBNdWx0aXBsZSBzcGFubmluZyB0cmVlIGluc3RhbmNlLgorICogT3V0cHV0OgorICogICAgICBwU3RwX3N0YXRlIC0gU3Bhbm5pbmcgdHJlZSBzdGF0ZSBmb3IgbXN0aQorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfUE9SVF9JRCAgICAgIC0gSW52YWxpZCBwb3J0IG51bWJlci4KKyAqICAgICAgUlRfRVJSX01TVEkgICAgICAgICAtIEludmFsaWQgbXN0aSBwYXJhbWV0ZXIuCisgKiBOb3RlOgorICogICAgICBTeXN0ZW0gc3VwcG9ydHMgcGVyLXBvcnQgbXVsdGlwbGUgc3Bhbm5pbmcgdHJlZSBzdGF0ZSBmb3IgZWFjaCBtc3RpLgorICogICAgICBUaGVyZSBhcmUgZm91ciBzdGF0ZXMgc3VwcG9ydGVkIGJ5IEFTSUMuCisgKiAgICAgIC0gU1RQX1NUQVRFX0RJU0FCTEVECisgKiAgICAgIC0gU1RQX1NUQVRFX0JMT0NLSU5HCisgKiAgICAgIC0gU1RQX1NUQVRFX0xFQVJOSU5HCisgKiAgICAgIC0gU1RQX1NUQVRFX0ZPUldBUkRJTkcKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfc3RwX21zdHBTdGF0ZV9nZXQocnRrX3N0cF9tc3RpX2lkX3QgbXN0aSwgcnRrX3BvcnRfdCBwb3J0LCBydGtfc3RwX3N0YXRlX3QgKnBTdHBfc3RhdGUpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogQ2hlY2sgUG9ydCBWYWxpZCAqLworICAgIFJUS19DSEtfUE9SVF9WQUxJRChwb3J0KTsKKworICAgIGlmIChtc3RpID4gUlRLX01BWF9OVU1fT0ZfTVNUSSkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9NU1RJOworCisgICAgaWYoTlVMTCA9PSBwU3RwX3N0YXRlKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1NwYW5uaW5nVHJlZVN0YXR1cyhydGtfc3dpdGNoX3BvcnRfTDJQX2dldChwb3J0KSwgbXN0aSwgcFN0cF9zdGF0ZSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a192bGFuX2NoZWNrQW5kQ3JlYXRlTWJyCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgQ2hlY2sgYW5kIGNyZWF0ZSBNZW1iZXIgY29uZmlndXJhdGlvbiBhbmQgcmV0dXJuIGluZGV4CisgKiBJbnB1dDoKKyAqICAgICAgdmlkICAtIFZMQU4gaWQuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBJbmRleCAgLSBNZW1iZXIgY29uZmlndXJhdGlvbiBpbmRleAorICogUmV0dXJuOgorICogICAgICBSVF9FUlJfT0sgICAgICAgICAgIC0gT0sKKyAqICAgICAgUlRfRVJSX0ZBSUxFRCAgICAgICAtIEZhaWxlZAorICogICAgICBSVF9FUlJfU01JICAgICAgICAgIC0gU01JIGFjY2VzcyBlcnJvcgorICogICAgICBSVF9FUlJfVkxBTl9WSUQgICAgIC0gSW52YWxpZCBWTEFOIElELgorICogICAgICBSVF9FUlJfVkxBTl9FTlRSWV9OT1RfRk9VTkQgLSBWTEFOIG5vdCBmb3VuZAorICogICAgICBSVF9FUlJfVEJMX0ZVTEwgICAgIC0gTWVtYmVyIENvbmZpZ3VyYXRpb24gdGFibGUgZnVsbAorICogTm90ZToKKyAqCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3ZsYW5fY2hlY2tBbmRDcmVhdGVNYnIocnRrX3ZsYW5fdCB2aWQsIHJ0a191aW50MzIgKnBJbmRleCkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKyAgICBydGw4MzY3Y191c2VyX3ZsYW40a2VudHJ5IHZsYW40SzsKKyAgICBydGw4MzY3Y192bGFuY29uZmlndXNlciB2bGFuTUM7CisgICAgcnRrX3VpbnQzMiBpZHg7CisgICAgcnRrX3VpbnQzMiBlbXB0eV9pZHggPSAweEZGRkY7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgLyogdmlkIG11c3QgYmUgMH44MTkxICovCisgICAgaWYgKHZpZCA+IFJUTDgzNjdDX0VWSURNQVgpCisgICAgICAgIHJldHVybiBSVF9FUlJfVkxBTl9WSUQ7CisKKyAgICAvKiBOdWxsIHBvaW50ZXIgY2hlY2sgKi8KKyAgICBpZihOVUxMID09IHBJbmRleCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICAvKiBHZXQgNEsgVkxBTiAqLworICAgIGlmICh2aWQgPD0gUlRMODM2N0NfVklETUFYKQorICAgIHsKKyAgICAgICAgbWVtc2V0KCZ2bGFuNEssIDB4MDAsIHNpemVvZihydGw4MzY3Y191c2VyX3ZsYW40a2VudHJ5KSk7CisgICAgICAgIHZsYW40Sy52aWQgPSB2aWQ7CisgICAgICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0QXNpY1ZsYW40a0VudHJ5KCZ2bGFuNEspKSAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICByZXR1cm4gcmV0VmFsOworICAgIH0KKworICAgIC8qIFNlYXJjaCBleGlzdCBlbnRyeSAqLworICAgIGZvciAoaWR4ID0gMDsgaWR4IDw9IFJUTDgzNjdDX0NWSURYTUFYOyBpZHgrKykKKyAgICB7CisgICAgICAgIGlmKHZsYW5fbWJyQ2ZnVXNhZ2VbaWR4XSA9PSBNQlJDRkdfVVNFRF9CWV9WTEFOKQorICAgICAgICB7CisgICAgICAgICAgICBpZih2bGFuX21ickNmZ1ZpZFtpZHhdID09IHZpZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBGb3VuZCEgcmV0dXJuIGluZGV4ICovCisgICAgICAgICAgICAgICAgKnBJbmRleCA9IGlkeDsKKyAgICAgICAgICAgICAgICByZXR1cm4gUlRfRVJSX09LOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyogTm90IGZvdW5kLCBSZWFkIEgvVyBNZW1iZXIgQ29uZmlndXJhdGlvbiB0YWJsZSB0byB1cGRhdGUgZGF0YWJhc2UgKi8KKyAgICBmb3IgKGlkeCA9IDA7IGlkeCA8PSBSVEw4MzY3Q19DVklEWE1BWDsgaWR4KyspCisgICAgeworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldEFzaWNWbGFuTWVtYmVyQ29uZmlnKGlkeCwgJnZsYW5NQykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICAgICAgaWYoICh2bGFuTUMuZXZpZCA9PSAwKSAmJiAodmxhbk1DLm1iciA9PSAweDAwKSkKKyAgICAgICAgeworICAgICAgICAgICAgdmxhbl9tYnJDZmdVc2FnZVtpZHhdICAgPSBNQlJDRkdfVU5VU0VEOworICAgICAgICAgICAgdmxhbl9tYnJDZmdWaWRbaWR4XSAgICAgPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdmxhbl9tYnJDZmdVc2FnZVtpZHhdICAgPSBNQlJDRkdfVVNFRF9CWV9WTEFOOworICAgICAgICAgICAgdmxhbl9tYnJDZmdWaWRbaWR4XSAgICAgPSB2bGFuTUMuZXZpZDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIFNlYXJjaCBleGlzdCBlbnRyeSBhZ2FpbiAqLworICAgIGZvciAoaWR4ID0gMDsgaWR4IDw9IFJUTDgzNjdDX0NWSURYTUFYOyBpZHgrKykKKyAgICB7CisgICAgICAgIGlmKHZsYW5fbWJyQ2ZnVXNhZ2VbaWR4XSA9PSBNQlJDRkdfVVNFRF9CWV9WTEFOKQorICAgICAgICB7CisgICAgICAgICAgICBpZih2bGFuX21ickNmZ1ZpZFtpZHhdID09IHZpZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBGb3VuZCEgcmV0dXJuIGluZGV4ICovCisgICAgICAgICAgICAgICAgKnBJbmRleCA9IGlkeDsKKyAgICAgICAgICAgICAgICByZXR1cm4gUlRfRVJSX09LOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyogdHJ5IHRvIGxvb2sgdXAgYW4gZW1wdHkgaW5kZXggKi8KKyAgICBmb3IgKGlkeCA9IDA7IGlkeCA8PSBSVEw4MzY3Q19DVklEWE1BWDsgaWR4KyspCisgICAgeworICAgICAgICBpZih2bGFuX21ickNmZ1VzYWdlW2lkeF0gPT0gTUJSQ0ZHX1VOVVNFRCkKKyAgICAgICAgeworICAgICAgICAgICAgZW1wdHlfaWR4ID0gaWR4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZihlbXB0eV9pZHggPT0gMHhGRkZGKQorICAgIHsKKyAgICAgICAgLyogTm8gZW1wdHkgaW5kZXggKi8KKyAgICAgICAgcmV0dXJuIFJUX0VSUl9UQkxfRlVMTDsKKyAgICB9CisKKyAgICBpZiAodmlkID4gUlRMODM2N0NfVklETUFYKQorICAgIHsKKyAgICAgICAgLyogPiA0SywgdGhlcmUgaXMgbm8gNEsgZW50cnksIGNyZWF0ZSBvbiBtZW1iZXIgY29uZmlndXJhdGlvbiBkaXJlY3RseSAqLworICAgICAgICBtZW1zZXQoJnZsYW5NQywgMHgwMCwgc2l6ZW9mKHJ0bDgzNjdjX3ZsYW5jb25maWd1c2VyKSk7CisgICAgICAgIHZsYW5NQy5ldmlkID0gdmlkOworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNWbGFuTWVtYmVyQ29uZmlnKGVtcHR5X2lkeCwgJnZsYW5NQykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIENvcHkgZnJvbSA0SyB0YWJsZSAqLworICAgICAgICB2bGFuTUMuZXZpZCA9IHZpZDsKKyAgICAgICAgdmxhbk1DLm1iciA9IHZsYW40Sy5tYnI7CisgICAgICAgIHZsYW5NQy5maWRfbXN0aSA9IHZsYW40Sy5maWRfbXN0aTsKKyAgICAgICAgdmxhbk1DLm1ldGVyaWR4PSB2bGFuNEsubWV0ZXJpZHg7CisgICAgICAgIHZsYW5NQy5lbnZsYW5wb2w9IHZsYW40Sy5lbnZsYW5wb2w7CisgICAgICAgIHZsYW5NQy52YnBlbiA9IHZsYW40Sy52YnBlbjsKKyAgICAgICAgdmxhbk1DLnZicHJpID0gdmxhbjRLLnZicHJpOworICAgICAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldEFzaWNWbGFuTWVtYmVyQ29uZmlnKGVtcHR5X2lkeCwgJnZsYW5NQykpICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgIHJldHVybiByZXRWYWw7CisgICAgfQorCisgICAgLyogVXBkYXRlIERhdGFiYXNlICovCisgICAgdmxhbl9tYnJDZmdVc2FnZVtlbXB0eV9pZHhdID0gTUJSQ0ZHX1VTRURfQllfVkxBTjsKKyAgICB2bGFuX21ickNmZ1ZpZFtlbXB0eV9pZHhdID0gdmlkOworCisgICAgKnBJbmRleCA9IGVtcHR5X2lkeDsKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCisvKiBGdW5jdGlvbiBOYW1lOgorICogICAgICBydGtfdmxhbl9yZXNlcnZlZFZpZEFjdGlvbl9zZXQKKyAqIERlc2NyaXB0aW9uOgorICogICAgICBTZXQgQWN0aW9uIG9mIFZMQU4gSUQgPSAwICYgNDA5NSB0YWdnZWQgcGFja2V0CisgKiBJbnB1dDoKKyAqICAgICAgYWN0aW9uX3ZpZDAgICAgIC0gQWN0aW9uIGZvciBWSUQgMC4KKyAqICAgICAgYWN0aW9uX3ZpZDQwOTUgIC0gQWN0aW9uIGZvciBWSUQgNDA5NS4KKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEVycm9yIElucHV0CisgKiBOb3RlOgorICoKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfdmxhbl9yZXNlcnZlZFZpZEFjdGlvbl9zZXQocnRrX3ZsYW5fcmVzVmlkQWN0aW9uX3QgYWN0aW9uX3ZpZDAsIHJ0a192bGFuX3Jlc1ZpZEFjdGlvbl90IGFjdGlvbl92aWQ0MDk1KQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKGFjdGlvbl92aWQwID49IFJFU1ZJRF9BQ1RJT05fRU5EKQorICAgICAgICByZXR1cm4gUlRfRVJSX0lOUFVUOworCisgICAgaWYoYWN0aW9uX3ZpZDQwOTUgPj0gUkVTVklEX0FDVElPTl9FTkQpCisgICAgICAgIHJldHVybiBSVF9FUlJfSU5QVVQ7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3NldFJlc2VydmVkVmlkQWN0aW9uKChydGtfdWludDMyKWFjdGlvbl92aWQwLCAocnRrX3VpbnQzMilhY3Rpb25fdmlkNDA5NSkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a192bGFuX3Jlc2VydmVkVmlkQWN0aW9uX2dldAorICogRGVzY3JpcHRpb246CisgKiAgICAgIEdldCBBY3Rpb24gb2YgVkxBTiBJRCA9IDAgJiA0MDk1IHRhZ2dlZCBwYWNrZXQKKyAqIElucHV0OgorICogICAgICBwQWN0aW9uX3ZpZDAgICAgIC0gQWN0aW9uIGZvciBWSUQgMC4KKyAqICAgICAgcEFjdGlvbl92aWQ0MDk1ICAtIEFjdGlvbiBmb3IgVklEIDQwOTUuCisgKiBPdXRwdXQ6CisgKiAgICAgIE5vbmUuCisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9OVUxMX1BPSU5URVIgLSBOVUxMIFBvaW50ZXIKKyAqIE5vdGU6CisgKgorICovCitydGtfYXBpX3JldF90IHJ0a192bGFuX3Jlc2VydmVkVmlkQWN0aW9uX2dldChydGtfdmxhbl9yZXNWaWRBY3Rpb25fdCAqcEFjdGlvbl92aWQwLCBydGtfdmxhbl9yZXNWaWRBY3Rpb25fdCAqcEFjdGlvbl92aWQ0MDk1KQoreworICAgIHJ0a19hcGlfcmV0X3QgcmV0VmFsOworCisgICAgLyogQ2hlY2sgaW5pdGlhbGl6YXRpb24gc3RhdGUgKi8KKyAgICBSVEtfQ0hLX0lOSVRfU1RBVEUoKTsKKworICAgIGlmKHBBY3Rpb25fdmlkMCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmKHBBY3Rpb25fdmlkNDA5NSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gUlRfRVJSX05VTExfUE9JTlRFUjsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2NfZ2V0UmVzZXJ2ZWRWaWRBY3Rpb24oKHJ0a191aW50MzIgKilwQWN0aW9uX3ZpZDAsIChydGtfdWludDMyICopcEFjdGlvbl92aWQ0MDk1KSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3ZsYW5fcmVhbEtlZXBSZW1hcmtFbmFibGVfc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgU2V0IFJlYWwga2VlcCAxcCByZW1hcmtpbmcgZmVhdHVyZQorICogSW5wdXQ6CisgKiAgICAgIGVuYWJsZWQgICAgIC0gU3RhdGUgb2YgMXAgcmVtYXJraW5nIGF0IHJlYWwga2VlcCBwYWNrZXQKKyAqIE91dHB1dDoKKyAqICAgICAgTm9uZS4KKyAqIFJldHVybjoKKyAqICAgICAgUlRfRVJSX09LICAgICAgICAgICAtIE9LCisgKiAgICAgIFJUX0VSUl9GQUlMRUQgICAgICAgLSBGYWlsZWQKKyAqICAgICAgUlRfRVJSX1NNSSAgICAgICAgICAtIFNNSSBhY2Nlc3MgZXJyb3IKKyAqICAgICAgUlRfRVJSX0lOUFVUICAgICAgICAtIEVycm9yIElucHV0CisgKiBOb3RlOgorICoKKyAqLworcnRrX2FwaV9yZXRfdCBydGtfdmxhbl9yZWFsS2VlcFJlbWFya0VuYWJsZV9zZXQocnRrX2VuYWJsZV90IGVuYWJsZWQpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoZW5hYmxlZCA+PSBSVEtfRU5BQkxFX0VORCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9JTlBVVDsKKworICAgIGlmICgocmV0VmFsID0gcnRsODM2N2Nfc2V0UmVhbEtlZXBSZW1hcmtFbigocnRrX3VpbnQzMillbmFibGVkKSkgIT0gUlRfRVJSX09LKQorICAgICAgICByZXR1cm4gcmV0VmFsOworCisgICAgcmV0dXJuIFJUX0VSUl9PSzsKK30KKworLyogRnVuY3Rpb24gTmFtZToKKyAqICAgICAgcnRrX3ZsYW5fcmVhbEtlZXBSZW1hcmtFbmFibGVfZ2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgR2V0IFJlYWwga2VlcCAxcCByZW1hcmtpbmcgZmVhdHVyZQorICogSW5wdXQ6CisgKiAgICAgIE5vbmUuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBFbmFibGVkICAgICAtIFN0YXRlIG9mIDFwIHJlbWFya2luZyBhdCByZWFsIGtlZXAgcGFja2V0CisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBFcnJvciBJbnB1dAorICogTm90ZToKKyAqCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3ZsYW5fcmVhbEtlZXBSZW1hcmtFbmFibGVfZ2V0KHJ0a19lbmFibGVfdCAqcEVuYWJsZWQpCit7CisgICAgcnRrX2FwaV9yZXRfdCByZXRWYWw7CisKKyAgICAvKiBDaGVjayBpbml0aWFsaXphdGlvbiBzdGF0ZSAqLworICAgIFJUS19DSEtfSU5JVF9TVEFURSgpOworCisgICAgaWYoTlVMTCA9PSBwRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuIFJUX0VSUl9OVUxMX1BPSU5URVI7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX2dldFJlYWxLZWVwUmVtYXJrRW4oKHJ0a191aW50MzIgKilwRW5hYmxlZCkpICE9IFJUX0VSUl9PSykKKyAgICAgICAgcmV0dXJuIHJldFZhbDsKKworICAgIHJldHVybiBSVF9FUlJfT0s7Cit9CisKKy8qIEZ1bmN0aW9uIE5hbWU6CisgKiAgICAgIHJ0a192bGFuX3Jlc2V0CisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICAgUmVzZXQgVkxBTgorICogSW5wdXQ6CisgKiAgICAgIE5vbmUuCisgKiBPdXRwdXQ6CisgKiAgICAgIHBFbmFibGVkICAgICAtIFN0YXRlIG9mIDFwIHJlbWFya2luZyBhdCByZWFsIGtlZXAgcGFja2V0CisgKiBSZXR1cm46CisgKiAgICAgIFJUX0VSUl9PSyAgICAgICAgICAgLSBPSworICogICAgICBSVF9FUlJfRkFJTEVEICAgICAgIC0gRmFpbGVkCisgKiAgICAgIFJUX0VSUl9TTUkgICAgICAgICAgLSBTTUkgYWNjZXNzIGVycm9yCisgKiAgICAgIFJUX0VSUl9JTlBVVCAgICAgICAgLSBFcnJvciBJbnB1dAorICogTm90ZToKKyAqCisgKi8KK3J0a19hcGlfcmV0X3QgcnRrX3ZsYW5fcmVzZXQodm9pZCkKK3sKKyAgICBydGtfYXBpX3JldF90IHJldFZhbDsKKworICAgIC8qIENoZWNrIGluaXRpYWxpemF0aW9uIHN0YXRlICovCisgICAgUlRLX0NIS19JTklUX1NUQVRFKCk7CisKKyAgICBpZiAoKHJldFZhbCA9IHJ0bDgzNjdjX3Jlc2V0VmxhbigpKSAhPSBSVF9FUlJfT0spCisgICAgICAgIHJldHVybiByZXRWYWw7CisKKyAgICByZXR1cm4gUlRfRVJSX09LOworfQorCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N3MuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNTU2MzEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N3MuYwpAQCAtMCwwICsxLDU4MCBAQAorLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3N3aXRjaC5oPgorCisvL2luY2x1ZGUgZnJvbSBydGw4MzY3YyBkaXIKKyNpbmNsdWRlICAiLi9ydGw4MzY3Yy9pbmNsdWRlL3J0a19zd2l0Y2guaCIKKyNpbmNsdWRlICAiLi9ydGw4MzY3Yy9pbmNsdWRlL3ZsYW4uaCIKKyNpbmNsdWRlICAiLi9ydGw4MzY3Yy9pbmNsdWRlL3N0YXQuaCIKKyNpbmNsdWRlICAiLi9ydGw4MzY3Yy9pbmNsdWRlL3BvcnQuaCIKKworI2RlZmluZSBSVEw4MzY3Q19TV19DUFVfUE9SVCAgICA2CisKKyAvL1JUTDgzNjdDX1BIWV9QT1JUX05VTSArIGV4dDAgKyBleHQxCisjZGVmaW5lIFJUTDgzNjdDX05VTV9QT1JUUyA3IAorI2RlZmluZSBSVEw4MzY3Q19OVU1fVklEUyAgNDA5NiAgIAorCitzdHJ1Y3QgcnRsODM2N19wcml2IHsKKwlzdHJ1Y3Qgc3dpdGNoX2Rldglzd2RldjsKKwlib29sCQkJZ2xvYmFsX3ZsYW5fZW5hYmxlOworfTsKKworc3RydWN0IHJ0bDgzNjdfbWliX2NvdW50ZXIgewkKKwljb25zdCBjaGFyICpuYW1lOworfTsKKworc3RydWN0IHJ0bDgzNjdfdmxhbl9pbmZvIHsKKwl1bnNpZ25lZCBzaG9ydAl2aWQ7CisJdW5zaWduZWQgaW50CXVudGFnOworCXVuc2lnbmVkIGludAltZW1iZXI7CisJdW5zaWduZWQgY2hhcgkJZmlkOworfTsKKworc3RydWN0IHJ0bDgzNjdfcHJpdiAgcnRsODM2N19wcml2X2RhdGE7CisKK3Vuc2lnbmVkIGludCBydGw4MzY3Y19wb3J0X2lkW1JUTDgzNjdDX05VTV9QT1JUU109ezAsMSwyLDMsNCxFWFRfUE9SVDEsRVhUX1BPUlQwfTsKKwordm9pZCAoKnJ0bDgzNjdfc3dpdGNoX3Jlc2V0X2Z1bmMpKHZvaWQpPU5VTEw7CisKK3N0YXRpYyAgc3RydWN0IHJ0bDgzNjdfbWliX2NvdW50ZXIgIHJ0bDgzNjdjX21pYl9jb3VudGVyc1tdID0geworCXsiaWZJbk9jdGV0cyJ9LAorCXsiZG90M1N0YXRzRkNTRXJyb3JzIn0sCisJeyJkb3QzU3RhdHNTeW1ib2xFcnJvcnMifSwKKwl7ImRvdDNJblBhdXNlRnJhbWVzIn0sCisJeyJkb3QzQ29udHJvbEluVW5rbm93bk9wY29kZXMifSwKKwl7ImV0aGVyU3RhdHNGcmFnbWVudHMifSwKKwl7ImV0aGVyU3RhdHNKYWJiZXJzIn0sCisJeyJpZkluVWNhc3RQa3RzIn0sCisJeyJldGhlclN0YXRzRHJvcEV2ZW50cyJ9LAorCXsiZXRoZXJTdGF0c09jdGV0cyJ9LAorCXsiZXRoZXJTdGF0c1VuZGVyc2l6ZVBrdHMifSwKKwl7ImV0aGVyU3RhdHNPdmVyc2l6ZVBrdHMifSwKKwl7ImV0aGVyU3RhdHNQa3RzNjRPY3RldHMifSwKKwl7ImV0aGVyU3RhdHNQa3RzNjV0bzEyN09jdGV0cyJ9LAorCXsiZXRoZXJTdGF0c1BrdHMxMjh0bzI1NU9jdGV0cyJ9LAorCXsiZXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0cyJ9LAorCXsiZXRoZXJTdGF0c1BrdHM1MTJ0bzEwMjNPY3RldHMifSwKKwl7ImV0aGVyU3RhdHNQa3RzMTAyNHRvTWF4T2N0ZXRzIn0sCisJeyJldGhlclN0YXRzTWNhc3RQa3RzIn0sIAorCXsiZXRoZXJTdGF0c0JjYXN0UGt0cyJ9LAorCXsiaWZPdXRPY3RldHMifSwKKwl7ImRvdDNTdGF0c1NpbmdsZUNvbGxpc2lvbkZyYW1lcyJ9LAorCXsiZG90M1N0YXRzTXVsdGlwbGVDb2xsaXNpb25GcmFtZXMifSwKKwl7ImRvdDNTdGF0c0RlZmVycmVkVHJhbnNtaXNzaW9ucyJ9LAorCXsiZG90M1N0YXRzTGF0ZUNvbGxpc2lvbnMifSwgCisJeyJldGhlclN0YXRzQ29sbGlzaW9ucyJ9LAorCXsiZG90M1N0YXRzRXhjZXNzaXZlQ29sbGlzaW9ucyJ9LAorCXsiZG90M091dFBhdXNlRnJhbWVzIn0sCisJeyJkb3QxZEJhc2VQb3J0RGVsYXlFeGNlZWRlZERpc2NhcmRzIn0sCisJeyJkb3QxZFRwUG9ydEluRGlzY2FyZHMifSwKKwl7ImlmT3V0VWNhc3RQa3RzIn0sCisJeyJpZk91dE11bHRpY2FzdFBrdHMifSwKKwl7ImlmT3V0QnJvY2FzdFBrdHMifSwKKwl7Im91dE9hbXBkdVBrdHMifSwKKwl7ImluT2FtcGR1UGt0cyJ9LAorCXsicGt0Z2VuUGt0cyJ9LAorCXsiaW5NbGRDaGVja3N1bUVycm9yIn0sCisJeyJpbklnbXBDaGVja3N1bUVycm9yIn0sCisJeyJpbk1sZFNwZWNpZmljUXVlcnkifSwKKwl7ImluTWxkR2VuZXJhbFF1ZXJ5In0sCisJeyJpbklnbXBTcGVjaWZpY1F1ZXJ5In0sCisJeyJpbklnbXBHZW5lcmFsUXVlcnkifSwKKwl7ImluTWxkTGVhdmVzIn0sCisJeyJpbklnbXBMZWF2ZXMifSwKKwl7ImluSWdtcEpvaW5zU3VjY2VzcyJ9LAorCXsiaW5JZ21wSm9pbnNGYWlsIn0sCisJeyJpbk1sZEpvaW5zU3VjY2VzcyJ9LAorCXsiaW5NbGRKb2luc0ZhaWwifSwKKwl7ImluUmVwb3J0U3VwcHJlc3Npb25Ecm9wIn0sCisJeyJpbkxlYXZlU3VwcHJlc3Npb25Ecm9wIn0sCisJeyJvdXRJZ21wUmVwb3J0cyJ9LAorCXsib3V0SWdtcExlYXZlcyJ9LAorCXsib3V0SWdtcEdlbmVyYWxRdWVyeSJ9LAorCXsib3V0SWdtcFNwZWNpZmljUXVlcnkifSwKKwl7Im91dE1sZFJlcG9ydHMifSwKKwl7Im91dE1sZExlYXZlcyJ9LAorCXsib3V0TWxkR2VuZXJhbFF1ZXJ5In0sCisJeyJvdXRNbGRTcGVjaWZpY1F1ZXJ5In0sCisJeyJpbktub3duTXVsdGljYXN0UGt0cyJ9LAorCXsiaWZJbk11bHRpY2FzdFBrdHMifSwKKwl7ImlmSW5Ccm9hZGNhc3RQa3RzIn0sCisJeyJpZk91dERpc2NhcmRzIn0KK307CisKKy8qcnRsODM2N2MgIHByb3ByaWV0YXJ5IHN3aXRjaCBBUEkgd3JhcHBlciAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcnRsODM2N2Nfc3dfdG9fcGh5X3BvcnQoaW50IHBvcnQpCit7CisJcmV0dXJuIHJ0bDgzNjdjX3BvcnRfaWRbcG9ydF07Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJ0bDgzNjdjX3BvcnRtYXNrX3BoeV90b19zdyhydGtfcG9ydG1hc2tfdCBwaHlfcG9ydG1hc2spCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IFJUTDgzNjdDX05VTV9QT1JUUzsgaSsrKSB7CisJCWlmKFJUS19QT1JUTUFTS19JU19QT1JUX1NFVChwaHlfcG9ydG1hc2sscnRsODM2N2Nfc3dfdG9fcGh5X3BvcnQoaSkpKSB7CisJCQlSVEtfUE9SVE1BU0tfUE9SVF9DTEVBUihwaHlfcG9ydG1hc2sscnRsODM2N2Nfc3dfdG9fcGh5X3BvcnQoaSkpOworCQkJUlRLX1BPUlRNQVNLX1BPUlRfU0VUKHBoeV9wb3J0bWFzayxpKTsKKwkJfQkJCisKKwl9CisJcmV0dXJuICh1bnNpZ25lZCBpbnQpcGh5X3BvcnRtYXNrLmJpdHNbMF07Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2N2NfcmVzZXRfbWlicyh2b2lkKQoreworCXJldHVybiBydGtfc3RhdF9nbG9iYWxfcmVzZXQoKTsKK30KKworc3RhdGljIGludCBydGw4MzY3Y19yZXNldF9wb3J0X21pYnMoaW50IHBvcnQpCit7CisKKwlyZXR1cm4gcnRrX3N0YXRfcG9ydF9yZXNldChydGw4MzY3Y19zd190b19waHlfcG9ydChwb3J0KSk7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2N2NfZ2V0X21pYnNfbnVtKHZvaWQpCit7CisJcmV0dXJuIEFSUkFZX1NJWkUocnRsODM2N2NfbWliX2NvdW50ZXJzKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnJ0bDgzNjdjX2dldF9taWJfbmFtZShpbnQgaWR4KQoreworCQorCXJldHVybiBydGw4MzY3Y19taWJfY291bnRlcnNbaWR4XS5uYW1lOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjdjX2dldF9wb3J0X21pYl9jb3VudGVyKGludCBpZHgsIGludCBwb3J0LCB1bnNpZ25lZCBsb25nIGxvbmcgKmNvdW50ZXIpCit7CisJcmV0dXJuIHJ0a19zdGF0X3BvcnRfZ2V0KHJ0bDgzNjdjX3N3X3RvX3BoeV9wb3J0KHBvcnQpLCBpZHgsIGNvdW50ZXIpOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjdjX2lzX3ZsYW5fdmFsaWQodW5zaWduZWQgaW50IHZsYW4pCit7CisJdW5zaWduZWQgbWF4ID0gUlRMODM2N0NfTlVNX1ZJRFM7CQorCisJaWYgKHZsYW4gPT0gMCB8fCB2bGFuID49IG1heCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBydGw4MzY3Y19nZXRfdmxhbiggdW5zaWduZWQgc2hvcnQgdmlkLCBzdHJ1Y3QgcnRsODM2N192bGFuX2luZm8gKnZsYW4pCit7CQorCXJ0a192bGFuX2NmZ190IHZsYW5fY2ZnOworCisJbWVtc2V0KHZsYW4sICdcMCcsIHNpemVvZihzdHJ1Y3QgcnRsODM2N192bGFuX2luZm8pKTsKKworCWlmICh2aWQgPj0gUlRMODM2N0NfTlVNX1ZJRFMpCisJCXJldHVybiAtRUlOVkFMOwkKKworCWlmKHJ0a192bGFuX2dldCh2aWQsJnZsYW5fY2ZnKSkKKyAgICAgICAJcmV0dXJuIC1FSU5WQUw7CQkKKwkKKwl2bGFuLT52aWQgPSB2aWQ7CisJdmxhbi0+bWVtYmVyID0gcnRsODM2N2NfcG9ydG1hc2tfcGh5X3RvX3N3KHZsYW5fY2ZnLm1icik7CQorCXZsYW4tPnVudGFnID0gcnRsODM2N2NfcG9ydG1hc2tfcGh5X3RvX3N3KHZsYW5fY2ZnLnVudGFnKTsJCisJdmxhbi0+ZmlkID0gdmxhbl9jZmcuZmlkX21zdGk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MzY3Y19zZXRfdmxhbiggdW5zaWduZWQgc2hvcnQgdmlkLCB1MzIgbWJyLCB1MzIgdW50YWcsIHU4IGZpZCkKK3sJCisJcnRrX3ZsYW5fY2ZnX3Qgdmxhbl9jZmc7CisJaW50IGk7CisKKwltZW1zZXQoJnZsYW5fY2ZnLCAweDAwLCBzaXplb2YocnRrX3ZsYW5fY2ZnX3QpKTsJCisKKwlmb3IgKGkgPSAwOyBpIDwgUlRMODM2N0NfTlVNX1BPUlRTOyBpKyspIHsKKwkJaWYgKG1iciAmICgxIDw8IGkpKSB7CisJCQlSVEtfUE9SVE1BU0tfUE9SVF9TRVQodmxhbl9jZmcubWJyLCBydGw4MzY3Y19zd190b19waHlfcG9ydChpKSk7CisJCQlpZih1bnRhZyAmICgxIDw8IGkpKQorCQkJCVJUS19QT1JUTUFTS19QT1JUX1NFVCh2bGFuX2NmZy51bnRhZywgcnRsODM2N2Nfc3dfdG9fcGh5X3BvcnQoaSkpOwkJCQorCQl9CisJfQorCXZsYW5fY2ZnLmZpZF9tc3RpPWZpZDsKKwl2bGFuX2NmZy5pdmxfZW4gPSAxOworCXJldHVybiBydGtfdmxhbl9zZXQodmlkLCAmdmxhbl9jZmcpOworfQorCisKK3N0YXRpYyBpbnQgcnRsODM2N2NfZ2V0X3B2aWQoIGludCBwb3J0LCBpbnQgKnB2aWQpCit7CisJdTMyIHByaW89MDsKKwkKKwlpZiAocG9ydCA+PSBSVEw4MzY3Q19OVU1fUE9SVFMpCisJCXJldHVybiAtRUlOVkFMOwkJCisKKwlyZXR1cm4gcnRrX3ZsYW5fcG9ydFB2aWRfZ2V0KHJ0bDgzNjdjX3N3X3RvX3BoeV9wb3J0KHBvcnQpLHB2aWQsJnByaW8pOworfQorCisKK3N0YXRpYyBpbnQgcnRsODM2N2Nfc2V0X3B2aWQoIGludCBwb3J0LCBpbnQgcHZpZCkKK3sKKwl1MzIgcHJpbz0wOworCQorCWlmIChwb3J0ID49IFJUTDgzNjdDX05VTV9QT1JUUykKKwkJcmV0dXJuIC1FSU5WQUw7CQkKKworCXJldHVybiBydGtfdmxhbl9wb3J0UHZpZF9zZXQocnRsODM2N2Nfc3dfdG9fcGh5X3BvcnQocG9ydCkscHZpZCxwcmlvKTsKK30KKworc3RhdGljIGludCBydGw4MzY3Y19nZXRfcG9ydF9saW5rKGludCBwb3J0LCBpbnQgKmxpbmssIGludCAqc3BlZWQsIGludCAqZHVwbGV4KQoreworCQorCWlmKHJ0a19wb3J0X3BoeVN0YXR1c19nZXQocnRsODM2N2Nfc3dfdG9fcGh5X3BvcnQocG9ydCksKHJ0a19wb3J0X2xpbmtTdGF0dXNfdCAqKWxpbmssCisJCQkJCShydGtfcG9ydF9zcGVlZF90ICopc3BlZWQsKHJ0a19wb3J0X2R1cGxleF90ICopZHVwbGV4KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworLypjb21tb24gcnRsODM2NyBzd2NvbmZpZyBlbnRyeSBBUEkqLworCitzdGF0aWMgaW50CitydGw4MzY3X3N3X3NldF92bGFuX2VuYWJsZShzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJICAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJICAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgcnRsODM2N19wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHJ0bDgzNjdfcHJpdiwgc3dkZXYpOwkKKworCXByaXYtPmdsb2JhbF92bGFuX2VuYWJsZSA9IHZhbC0+dmFsdWUuaSA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcnRsODM2N19zd19nZXRfdmxhbl9lbmFibGUoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCSAgIGNvbnN0IHN0cnVjdCBzd2l0Y2hfYXR0ciAqYXR0ciwKKwkJCSAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CisJc3RydWN0IHJ0bDgzNjdfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBydGw4MzY3X3ByaXYsIHN3ZGV2KTsKKworCXZhbC0+dmFsdWUuaSA9IHByaXYtPmdsb2JhbF92bGFuX2VuYWJsZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjdfc3dfcmVzZXRfbWlicyhzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJCSAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJCSAgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlyZXR1cm4gcnRsODM2N2NfcmVzZXRfbWlicygpOworfQorCisKK3N0YXRpYyBpbnQgcnRsODM2N19zd19yZXNldF9wb3J0X21pYnMoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwKKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJCSAgICAgICBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCWludCBwb3J0OworCisJcG9ydCA9IHZhbC0+cG9ydF92bGFuOworCWlmIChwb3J0ID49IFJUTDgzNjdDX05VTV9QT1JUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gcnRsODM2N2NfcmVzZXRfcG9ydF9taWJzKHBvcnQpOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjdfc3dfZ2V0X3BvcnRfbWliKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsCisJCQkgICAgY29uc3Qgc3RydWN0IHN3aXRjaF9hdHRyICphdHRyLAorCQkJICAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CQorCWludCBpLCBsZW4gPSAwOworCXVuc2lnbmVkIGxvbmcgbG9uZyBjb3VudGVyID0gMDsKKwlzdGF0aWMgY2hhciBtaWJfYnVmWzQwOTZdOworCisJaWYgKHZhbC0+cG9ydF92bGFuID49IFJUTDgzNjdDX05VTV9QT1JUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlsZW4gKz0gc25wcmludGYobWliX2J1ZiArIGxlbiwgc2l6ZW9mKG1pYl9idWYpIC0gbGVuLAorCQkJIlBvcnQgJWQgTUlCIGNvdW50ZXJzXG4iLAorCQkJdmFsLT5wb3J0X3ZsYW4pOwkKKworCWZvciAoaSA9IDA7IGkgPHJ0bDgzNjdjX2dldF9taWJzX251bSgpOyArK2kpIHsKKwkJbGVuICs9IHNucHJpbnRmKG1pYl9idWYgKyBsZW4sIHNpemVvZihtaWJfYnVmKSAtIGxlbiwKKwkJCQkiJS0zNnM6ICIscnRsODM2N2NfZ2V0X21pYl9uYW1lKGkpKTsKKwkJaWYgKCFydGw4MzY3Y19nZXRfcG9ydF9taWJfY291bnRlcihpLCB2YWwtPnBvcnRfdmxhbiwKKwkJCQkJICAgICAgICZjb3VudGVyKSkKKwkJCWxlbiArPSBzbnByaW50ZihtaWJfYnVmICsgbGVuLCBzaXplb2YobWliX2J1ZikgLSBsZW4sCisJCQkJCSIlbGx1XG4iLCBjb3VudGVyKTsKKwkJZWxzZQorCQkJbGVuICs9IHNucHJpbnRmKG1pYl9idWYgKyBsZW4sIHNpemVvZihtaWJfYnVmKSAtIGxlbiwKKwkJCQkJIiVzXG4iLCAiTi9BIik7CisJfQorCisJdmFsLT52YWx1ZS5zID0gbWliX2J1ZjsKKwl2YWwtPmxlbiA9IGxlbjsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHJ0bDgzNjdfc3dfZ2V0X3ZsYW5faW5mbyhzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LAorCQkJICAgICBjb25zdCBzdHJ1Y3Qgc3dpdGNoX2F0dHIgKmF0dHIsCisJCQkgICAgIHN0cnVjdCBzd2l0Y2hfdmFsICp2YWwpCit7CQorCWludCBpOworCXUzMiBsZW4gPSAwOworCXN0cnVjdCBydGw4MzY3X3ZsYW5faW5mbyB2bGFuOworCXN0YXRpYyBjaGFyIHZsYW5fYnVmWzI1Nl07CisJaW50IGVycjsKKworCWlmICghcnRsODM2N2NfaXNfdmxhbl92YWxpZCh2YWwtPnBvcnRfdmxhbikpCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtc2V0KHZsYW5fYnVmLCAnXDAnLCBzaXplb2Yodmxhbl9idWYpKTsKKworCWVyciA9IHJ0bDgzNjdjX2dldF92bGFuKHZhbC0+cG9ydF92bGFuLCAmdmxhbik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWxlbiArPSBzbnByaW50Zih2bGFuX2J1ZiArIGxlbiwgc2l6ZW9mKHZsYW5fYnVmKSAtIGxlbiwKKwkJCSJWTEFOICVkOiBQb3J0czogJyIsIHZsYW4udmlkKTsKKworCWZvciAoaSA9IDA7IGkgPFJUTDgzNjdDX05VTV9QT1JUUzsgaSsrKSB7CisJCWlmICghKHZsYW4ubWVtYmVyICYgKDEgPDwgaSkpKQorCQkJY29udGludWU7CisKKwkJbGVuICs9IHNucHJpbnRmKHZsYW5fYnVmICsgbGVuLCBzaXplb2Yodmxhbl9idWYpIC0gbGVuLCAiJWQlcyIsIGksCisJCQkJKHZsYW4udW50YWcgJiAoMSA8PCBpKSkgPyAiIiA6ICJ0Iik7CisJfQorCisJbGVuICs9IHNucHJpbnRmKHZsYW5fYnVmICsgbGVuLCBzaXplb2Yodmxhbl9idWYpIC0gbGVuLAorCQkJIicsIG1lbWJlcnM9JTA0eCwgdW50YWc9JTA0eCwgZmlkPSV1IiwKKwkJCXZsYW4ubWVtYmVyLCB2bGFuLnVudGFnLCB2bGFuLmZpZCk7CisKKwl2YWwtPnZhbHVlLnMgPSB2bGFuX2J1ZjsKKwl2YWwtPmxlbiA9IGxlbjsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgcnRsODM2N19zd19nZXRfdmxhbl9wb3J0cyhzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBzdHJ1Y3Qgc3dpdGNoX3ZhbCAqdmFsKQoreworCXN0cnVjdCBzd2l0Y2hfcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgcnRsODM2N192bGFuX2luZm8gdmxhbjsKKwlpbnQgaTsJCisJCisJaWYgKCFydGw4MzY3Y19pc192bGFuX3ZhbGlkKHZhbC0+cG9ydF92bGFuKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZihydGw4MzY3Y19nZXRfdmxhbih2YWwtPnBvcnRfdmxhbiwgJnZsYW4pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBvcnQgPSAmdmFsLT52YWx1ZS5wb3J0c1swXTsKKwl2YWwtPmxlbiA9IDA7CisJZm9yIChpID0gMDsgaSA8UlRMODM2N0NfTlVNX1BPUlRTIDsgaSsrKSB7CisJCWlmICghKHZsYW4ubWVtYmVyICYgQklUKGkpKSkKKwkJCWNvbnRpbnVlOworCisJCXBvcnQtPmlkID0gaTsKKwkJcG9ydC0+ZmxhZ3MgPSAodmxhbi51bnRhZyAmIEJJVChpKSkgPworCQkJCQkwIDogQklUKFNXSVRDSF9QT1JUX0ZMQUdfVEFHR0VEKTsKKwkJdmFsLT5sZW4rKzsKKwkJcG9ydCsrOworCX0KKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHJ0bDgzNjdfc3dfc2V0X3ZsYW5fcG9ydHMoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgc3RydWN0IHN3aXRjaF92YWwgKnZhbCkKK3sKKwlzdHJ1Y3Qgc3dpdGNoX3BvcnQgKnBvcnQ7CisJdTMyIG1lbWJlciA9IDA7CisJdTMyIHVudGFnID0gMDsKKwl1OCBmaWQ9MDsKKwlpbnQgZXJyOworCWludCBpOwkKKwkKKwlpZiAoIXJ0bDgzNjdjX2lzX3ZsYW5fdmFsaWQodmFsLT5wb3J0X3ZsYW4pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBvcnQgPSAmdmFsLT52YWx1ZS5wb3J0c1swXTsKKwlmb3IgKGkgPSAwOyBpIDwgdmFsLT5sZW47IGkrKywgcG9ydCsrKSB7CisJCWludCBwdmlkID0gMDsKKwkJbWVtYmVyIHw9IEJJVChwb3J0LT5pZCk7CisKKwkJaWYgKCEocG9ydC0+ZmxhZ3MgJiBCSVQoU1dJVENIX1BPUlRfRkxBR19UQUdHRUQpKSkKKwkJCXVudGFnIHw9IEJJVChwb3J0LT5pZCk7CisKKwkJLyoKKwkJICogVG8gZW5zdXJlIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIE1DIGVudHJ5IGZvciB0aGlzIFZMQU4sCisJCSAqIGluaXRpYWxpemUgdGhlIHBvcnQgVkxBTiBJRCBoZXJlLgorCQkgKi8KKwkJZXJyID0gcnRsODM2N2NfZ2V0X3B2aWQocG9ydC0+aWQsICZwdmlkKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQlpZiAocHZpZCA9PSAwKSB7CisJCQllcnIgPSBydGw4MzY3Y19zZXRfcHZpZChwb3J0LT5pZCwgdmFsLT5wb3J0X3ZsYW4pOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCS8vcHJfaW5mbygiWyVzXSB2aWQ9JWQgLCBtZW09JXgsdW50YWc9JXgsZmlkPSVkIFxuIixfX2Z1bmNfXyx2YWwtPnBvcnRfdmxhbixtZW1iZXIsdW50YWcsZmlkKTsKKworCXJldHVybiBydGw4MzY3Y19zZXRfdmxhbih2YWwtPnBvcnRfdmxhbiwgbWVtYmVyLCB1bnRhZywgZmlkKTsJCisKK30KKworCitzdGF0aWMgaW50IHJ0bDgzNjdfc3dfZ2V0X3BvcnRfcHZpZChzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2LCBpbnQgcG9ydCwgaW50ICp2YWwpCit7CisJcmV0dXJuIHJ0bDgzNjdjX2dldF9wdmlkKHBvcnQsIHZhbCk7Cit9CisKKworc3RhdGljIGludCBydGw4MzY3X3N3X3NldF9wb3J0X3B2aWQoc3RydWN0IHN3aXRjaF9kZXYgKmRldiwgaW50IHBvcnQsIGludCB2YWwpCit7CQorCXJldHVybiBydGw4MzY3Y19zZXRfcHZpZChwb3J0LCB2YWwpOworfQorCisKK3N0YXRpYyBpbnQgcnRsODM2N19zd19yZXNldF9zd2l0Y2goc3RydWN0IHN3aXRjaF9kZXYgKmRldikKK3sKKwlpZihydGw4MzY3X3N3aXRjaF9yZXNldF9mdW5jKQorCQkoKnJ0bDgzNjdfc3dpdGNoX3Jlc2V0X2Z1bmMpKCk7CisJZWxzZQorCQlwcmludGsoInJlc3Qgc3dpdGNoIGlzIG5vdCBzdXBwb3J0ZWRcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsODM2N19zd19nZXRfcG9ydF9saW5rKHN0cnVjdCBzd2l0Y2hfZGV2ICpkZXYsIGludCBwb3J0LAorCQkJCSAgICBzdHJ1Y3Qgc3dpdGNoX3BvcnRfbGluayAqbGluaykKK3sJCisJaW50IHNwZWVkOworCisJaWYgKHBvcnQgPj0gUlRMODM2N0NfTlVNX1BPUlRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmKHJ0bDgzNjdjX2dldF9wb3J0X2xpbmsocG9ydCwoaW50ICopJmxpbmstPmxpbmssKGludCAqKSZzcGVlZCwoaW50ICopJmxpbmstPmR1cGxleCkpCisJCXJldHVybiAtRUlOVkFMOwkJCisKKwlpZiAoIWxpbmstPmxpbmspCisJCXJldHVybiAwOwkKKworCXN3aXRjaCAoc3BlZWQpIHsKKwljYXNlIDA6CisJCWxpbmstPnNwZWVkID0gU1dJVENIX1BPUlRfU1BFRURfMTA7CisJCWJyZWFrOworCWNhc2UgMToKKwkJbGluay0+c3BlZWQgPSBTV0lUQ0hfUE9SVF9TUEVFRF8xMDA7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJbGluay0+c3BlZWQgPSBTV0lUQ0hfUE9SVF9TUEVFRF8xMDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlsaW5rLT5zcGVlZCA9IFNXSVRDSF9QT1JUX1NQRUVEX1VOS05PV047CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgc3dpdGNoX2F0dHIgcnRsODM2N19nbG9iYWxzW10gPSB7CisJeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX0lOVCwKKwkJLm5hbWUgPSAiZW5hYmxlX3ZsYW4iLAorCQkuZGVzY3JpcHRpb24gPSAiRW5hYmxlIFZMQU4gbW9kZSIsCisJCS5zZXQgPSBydGw4MzY3X3N3X3NldF92bGFuX2VuYWJsZSwKKwkJLmdldCA9IHJ0bDgzNjdfc3dfZ2V0X3ZsYW5fZW5hYmxlLAorCQkubWF4ID0gMSwJCQorCX0sIHsJCQorCQkudHlwZSA9IFNXSVRDSF9UWVBFX05PVkFMLAorCQkubmFtZSA9ICJyZXNldF9taWJzIiwKKwkJLmRlc2NyaXB0aW9uID0gIlJlc2V0IGFsbCBNSUIgY291bnRlcnMiLAorCQkuc2V0ID0gcnRsODM2N19zd19yZXNldF9taWJzLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3dpdGNoX2F0dHIgcnRsODM2N19wb3J0W10gPSB7CisJeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX05PVkFMLAorCQkubmFtZSA9ICJyZXNldF9taWIiLAorCQkuZGVzY3JpcHRpb24gPSAiUmVzZXQgc2luZ2xlIHBvcnQgTUlCIGNvdW50ZXJzIiwKKwkJLnNldCA9IHJ0bDgzNjdfc3dfcmVzZXRfcG9ydF9taWJzLAorCX0sIHsKKwkJLnR5cGUgPSBTV0lUQ0hfVFlQRV9TVFJJTkcsCisJCS5uYW1lID0gIm1pYiIsCisJCS5kZXNjcmlwdGlvbiA9ICJHZXQgTUlCIGNvdW50ZXJzIGZvciBwb3J0IiwKKwkJLy8ubWF4ID0gMzMsCisJCS5zZXQgPSBOVUxMLAorCQkuZ2V0ID0gcnRsODM2N19zd19nZXRfcG9ydF9taWIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3dpdGNoX2F0dHIgcnRsODM2N192bGFuW10gPSB7CisJeworCQkudHlwZSA9IFNXSVRDSF9UWVBFX1NUUklORywKKwkJLm5hbWUgPSAiaW5mbyIsCisJCS5kZXNjcmlwdGlvbiA9ICJHZXQgdmxhbiBpbmZvcm1hdGlvbiIsCisJCS5tYXggPSAxLAorCQkuc2V0ID0gTlVMTCwKKwkJLmdldCA9IHJ0bDgzNjdfc3dfZ2V0X3ZsYW5faW5mbywKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzd2l0Y2hfZGV2X29wcyBydGw4MzY3X3N3X29wcyA9IHsKKwkuYXR0cl9nbG9iYWwgPSB7CisJCS5hdHRyID0gcnRsODM2N19nbG9iYWxzLAorCQkubl9hdHRyID0gQVJSQVlfU0laRShydGw4MzY3X2dsb2JhbHMpLAorCX0sCisJLmF0dHJfcG9ydCA9IHsKKwkJLmF0dHIgPSBydGw4MzY3X3BvcnQsCisJCS5uX2F0dHIgPSBBUlJBWV9TSVpFKHJ0bDgzNjdfcG9ydCksCisJfSwKKwkuYXR0cl92bGFuID0geworCQkuYXR0ciA9IHJ0bDgzNjdfdmxhbiwKKwkJLm5fYXR0ciA9IEFSUkFZX1NJWkUocnRsODM2N192bGFuKSwKKwl9LAorCisJLmdldF92bGFuX3BvcnRzID0gcnRsODM2N19zd19nZXRfdmxhbl9wb3J0cywKKwkuc2V0X3ZsYW5fcG9ydHMgPSBydGw4MzY3X3N3X3NldF92bGFuX3BvcnRzLAorCS5nZXRfcG9ydF9wdmlkID0gcnRsODM2N19zd19nZXRfcG9ydF9wdmlkLAorCS5zZXRfcG9ydF9wdmlkID0gcnRsODM2N19zd19zZXRfcG9ydF9wdmlkLAorCS5yZXNldF9zd2l0Y2ggPSBydGw4MzY3X3N3X3Jlc2V0X3N3aXRjaCwKKwkuZ2V0X3BvcnRfbGluayA9IHJ0bDgzNjdfc3dfZ2V0X3BvcnRfbGluaywKK307CisKK2ludCBydGw4MzY3c19zd2NvbmZpZ19pbml0KHZvaWQgKCpyZXNldF9mdW5jKSh2b2lkKSkKK3sKKwlzdHJ1Y3QgcnRsODM2N19wcml2ICAqcHJpdiA9ICZydGw4MzY3X3ByaXZfZGF0YTsKKwlzdHJ1Y3Qgc3dpdGNoX2RldiAqZGV2PSZwcml2LT5zd2RldjsKKwlpbnQgZXJyPTA7CisKKwlydGw4MzY3X3N3aXRjaF9yZXNldF9mdW5jID0gcmVzZXRfZnVuYyA7CisJCisJbWVtc2V0KHByaXYsIDAsIHNpemVvZihzdHJ1Y3QgcnRsODM2N19wcml2KSk7CQorCXByaXYtPmdsb2JhbF92bGFuX2VuYWJsZSA9MDsKKworCWRldi0+bmFtZSA9ICJSVEw4MzY3QyI7CisJZGV2LT5jcHVfcG9ydCA9IFJUTDgzNjdDX1NXX0NQVV9QT1JUOworCWRldi0+cG9ydHMgPSBSVEw4MzY3Q19OVU1fUE9SVFM7CisJZGV2LT52bGFucyA9IFJUTDgzNjdDX05VTV9WSURTOworCWRldi0+b3BzID0gJnJ0bDgzNjdfc3dfb3BzOworCWRldi0+YWxpYXMgPSAiUlRMODM2N0MiOwkJCisJZXJyID0gcmVnaXN0ZXJfc3dpdGNoKGRldiwgTlVMTCk7CisKKwlwcl9pbmZvKCJbJXNdXG4iLF9fZnVuY19fKTsKKworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N3NfZGJnLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3BoeS9ydGsvcnRsODM2N3NfZGJnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM4NjY3OQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3c19kYmcuYwpAQCAtMCwwICsxLDY1NSBAQAorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC90cmFjZV9zZXEuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC91NjRfc3RhdHNfc3luYy5oPgorCisjaW5jbHVkZSAgIi4vcnRsODM2N2MvaW5jbHVkZS9ydGtfc3dpdGNoLmgiCisjaW5jbHVkZSAgIi4vcnRsODM2N2MvaW5jbHVkZS9wb3J0LmgiCisjaW5jbHVkZSAgIi4vcnRsODM2N2MvaW5jbHVkZS92bGFuLmgiCisjaW5jbHVkZSAgIi4vcnRsODM2N2MvaW5jbHVkZS9ydGw4MzY3Y19hc2ljZHJ2X3BvcnQuaCIKKyNpbmNsdWRlICAiLi9ydGw4MzY3Yy9pbmNsdWRlL3N0YXQuaCIKKyNpbmNsdWRlICAiLi9ydGw4MzY3Yy9pbmNsdWRlL2wyLmgiCisjaW5jbHVkZSAgIi4vcnRsODM2N2MvaW5jbHVkZS9zbWkuaCIKKyNpbmNsdWRlICAiLi9ydGw4MzY3Yy9pbmNsdWRlL21pcnJvci5oIgorI2luY2x1ZGUgICIuL3J0bDgzNjdjL2luY2x1ZGUvaWdtcC5oIgorI2luY2x1ZGUgICIuL3J0bDgzNjdjL2luY2x1ZGUvbGVha3kuaCIKKworc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19yZWdfZGlyOworc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19lc3dfY250Oworc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY192bGFuX2NudDsKK3N0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfbWFjX3RibDsKK3N0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfcmVnOworc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19waHlyZWc7CitzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX21pcnJvcjsKK3N0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfaWdtcDsKKworI2RlZmluZSBQUk9DUkVHX0VTV19DTlQgICAgICAgICAiZXN3X2NudCIKKyNkZWZpbmUgUFJPQ1JFR19WTEFOICAgICAgICAgICAgInZsYW4iCisjZGVmaW5lIFBST0NSRUdfTUFDX1RCTCAgICAgICAgICAgICJtYWNfdGJsIgorI2RlZmluZSBQUk9DUkVHX1JFRyAgICAgICAgICAgICJyZWciCisjZGVmaW5lIFBST0NSRUdfUEhZUkVHICAgICAgICAgICAgInBoeXJlZyIKKyNkZWZpbmUgUFJPQ1JFR19NSVJST1IgICAgICAgICAgICAibWlycm9yIgorI2RlZmluZSBQUk9DUkVHX0lHTVAgICAgICAgICAgICAiaWdtcCIKKyNkZWZpbmUgUFJPQ1JFR19ESVIgICAgICAgICAgICAgInJ0a19nc3ciCisKKyNkZWZpbmUgUlRLX1NXX1ZJRF9SQU5HRSAgICAgICAgMTYKKworc3RhdGljIHZvaWQgcnRrX2R1bXBfbWliX3R5cGUocnRrX3N0YXRfcG9ydF90eXBlX3QgY250cl9pZHgpCit7CisJcnRrX3BvcnRfdCBwb3J0OworCXJ0a19zdGF0X2NvdW50ZXJfdCBDbnRyOworCisJZm9yIChwb3J0ID0gVVRQX1BPUlQwOyBwb3J0IDwgKFVUUF9QT1JUMCArIDUpOyBwb3J0KyspIHsKKwkJcnRrX3N0YXRfcG9ydF9nZXQocG9ydCwgY250cl9pZHgsICZDbnRyKTsKKwkJcHJpbnRrKCIlOGxsdSIsIENudHIpOworCX0KKworCWZvciAocG9ydCA9IEVYVF9QT1JUMDsgcG9ydCA8IChFWFRfUE9SVDAgKyAyKTsgcG9ydCsrKSB7CisJCXJ0a19zdGF0X3BvcnRfZ2V0KHBvcnQsIGNudHJfaWR4LCAmQ250cik7CisJCXByaW50aygiJThsbHUiLCBDbnRyKTsKKwl9CisJCisJcHJpbnRrKCJcbiIpOworfQorc3RhdGljIHZvaWQgcnRrX2hhbF9kdW1wX21pYih2b2lkKQoreworCisJcHJpbnRrKCI9PT09PT09PT09PT09PT09PT0lOHMlOHMlOHMlOHMlOHMlOHMlOHNcbiIsICJQb3J0MCIsICJQb3J0MSIsCisJICAgICAgICJQb3J0MiIsICJQb3J0MyIsICJQb3J0NCIsICJQb3J0MTYiLCAiUG9ydDE3Iik7CisJLyogR2V0IFRYIFVuaWNhc3QgUGt0cyAqLworCXByaW50aygiVFggVW5pY2FzdCBQa3RzICA6Iik7CisJcnRrX2R1bXBfbWliX3R5cGUoU1RBVF9JZk91dFVjYXN0UGt0cyk7CisJLyogR2V0IFRYIE11bHRpY2FzdCBQa3RzICovCisJcHJpbnRrKCJUWCBNdWx0aWNhc3QgUGt0czoiKTsKKwlydGtfZHVtcF9taWJfdHlwZShTVEFUX0lmT3V0TXVsdGljYXN0UGt0cyk7CisJLyogR2V0IFRYIEJyb2FkQ2FzdCBQa3RzICovCisJcHJpbnRrKCJUWCBCcm9hZENhc3QgUGt0czoiKTsKKwlydGtfZHVtcF9taWJfdHlwZShTVEFUX0lmT3V0QnJvYWRjYXN0UGt0cyk7CisJLyogR2V0IFRYIENvbGxpc2lvbnMgKi8KKwkvKiBHZXQgVFggUHVhc2UgRnJhbWVzICovCisJcHJpbnRrKCJUWCBQYXVzZSBGcmFtZXMgIDoiKTsKKwlydGtfZHVtcF9taWJfdHlwZShTVEFUX0RvdDNPdXRQYXVzZUZyYW1lcyk7CisJLyogR2V0IFRYIERyb3AgRXZlbnRzICovCisJLyogR2V0IFJYIFVuaWNhc3QgUGt0cyAqLworCXByaW50aygiUlggVW5pY2FzdCBQa3RzICA6Iik7CisJcnRrX2R1bXBfbWliX3R5cGUoU1RBVF9JZkluVWNhc3RQa3RzKTsKKwkvKiBHZXQgUlggTXVsdGljYXN0IFBrdHMgKi8KKwlwcmludGsoIlJYIE11bHRpY2FzdCBQa3RzOiIpOworCXJ0a19kdW1wX21pYl90eXBlKFNUQVRfSWZJbk11bHRpY2FzdFBrdHMpOworCS8qIEdldCBSWCBCcm9hZGNhc3QgUGt0cyAqLworCXByaW50aygiUlggQnJvYWRjYXN0IFBrdHM6Iik7CisJcnRrX2R1bXBfbWliX3R5cGUoU1RBVF9JZkluQnJvYWRjYXN0UGt0cyk7CisJLyogR2V0IFJYIEZDUyBFcnJvcyAqLworCXByaW50aygiUlggRkNTIEVycm9ycyAgICA6Iik7CisJcnRrX2R1bXBfbWliX3R5cGUoU1RBVF9Eb3QzU3RhdHNGQ1NFcnJvcnMpOworCS8qIEdldCBSWCBVbmRlcnNpemUgUGt0cyAqLworCXByaW50aygiUlggVW5kZXJzaXplIFBrdHM6Iik7CisJcnRrX2R1bXBfbWliX3R5cGUoU1RBVF9FdGhlclN0YXRzVW5kZXJTaXplUGt0cyk7CisJLyogR2V0IFJYIERpc2NhcmQgUGt0cyAqLworCXByaW50aygiUlggRGlzY2FyZCBQa3RzICA6Iik7CisJcnRrX2R1bXBfbWliX3R5cGUoU1RBVF9Eb3QxZFRwUG9ydEluRGlzY2FyZHMpOworCS8qIEdldCBSWCBGcmFnbWVudHMgKi8KKwlwcmludGsoIlJYIEZyYWdtZW50cyAgICAgOiIpOworCXJ0a19kdW1wX21pYl90eXBlKFNUQVRfRXRoZXJTdGF0c0ZyYWdtZW50cyk7CisJLyogR2V0IFJYIE92ZXJzaXplIFBrdHMgKi8KKwlwcmludGsoIlJYIE92ZXJzaXplIFBrdHMgOiIpOworCXJ0a19kdW1wX21pYl90eXBlKFNUQVRfRXRoZXJPdmVyc2l6ZVN0YXRzKTsKKwkvKiBHZXQgUlggSmFiYmVycyAqLworCXByaW50aygiUlggSmFiYmVycyAgICAgICA6Iik7CisJcnRrX2R1bXBfbWliX3R5cGUoU1RBVF9FdGhlclN0YXRzSmFiYmVycyk7CisJLyogR2V0IFJYIFBhdXNlIEZyYW1lcyAqLworCXByaW50aygiUlggUGF1c2UgRnJhbWVzICA6Iik7CisJcnRrX2R1bXBfbWliX3R5cGUoU1RBVF9Eb3QzSW5QYXVzZUZyYW1lcyk7CisJLyogY2xlYXIgTUlCICovCisJcnRrX3N0YXRfZ2xvYmFsX3Jlc2V0KCk7CisJCit9CisKK3N0YXRpYyBpbnQgcnRrX2hhbF9kdW1wX3ZsYW4odm9pZCkKK3sKKwlydGtfdmxhbl9jZmdfdCB2bGFuOworCWludCBpOworCisJcHJpbnRrKCJ2aWQgICAgcG9ydG1hcFxuIik7CisJZm9yIChpID0gMDsgaSA8IFJUS19TV19WSURfUkFOR0U7IGkrKykgeworCQlydGtfdmxhbl9nZXQoaSwgJnZsYW4pOworCQlwcmludGsoIiUzZCAgICAiLCBpKTsKKwkJcHJpbnRrKCIlYyIsCisJCSAgICAgICBSVEtfUE9SVE1BU0tfSVNfUE9SVF9TRVQodmxhbi5tYnIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVVFBfUE9SVDApID8gJzEnIDogJy0nKTsKKwkJcHJpbnRrKCIlYyIsCisJICAgICAgIAlSVEtfUE9SVE1BU0tfSVNfUE9SVF9TRVQodmxhbi5tYnIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVVFBfUE9SVDEpID8gJzEnIDogJy0nKTsKKwkJcHJpbnRrKCIlYyIsCisJCSAgICAgICBSVEtfUE9SVE1BU0tfSVNfUE9SVF9TRVQodmxhbi5tYnIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVVFBfUE9SVDIpID8gJzEnIDogJy0nKTsKKwkJcHJpbnRrKCIlYyIsCisJCSAgICAgICBSVEtfUE9SVE1BU0tfSVNfUE9SVF9TRVQodmxhbi5tYnIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVVFBfUE9SVDMpID8gJzEnIDogJy0nKTsKKwkJcHJpbnRrKCIlYyIsCisJICAgICAgIAlSVEtfUE9SVE1BU0tfSVNfUE9SVF9TRVQodmxhbi5tYnIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVVFBfUE9SVDQpID8gJzEnIDogJy0nKTsKKwkJcHJpbnRrKCIlYyIsCisJCSAgICAgICBSVEtfUE9SVE1BU0tfSVNfUE9SVF9TRVQodmxhbi5tYnIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRfUE9SVDApID8gJzEnIDogJy0nKTsKKwkJcHJpbnRrKCIlYyIsCisJCSAgICAgICBSVEtfUE9SVE1BU0tfSVNfUE9SVF9TRVQodmxhbi5tYnIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRfUE9SVDEpID8gJzEnIDogJy0nKTsKKwkJcHJpbnRrKCJcbiIpOworCX0KKwkKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcnRrX2hhbF9kdW1wX3RhYmxlKHZvaWQpCit7CisJcnRrX3VpbnQzMiBpOworCXJ0a191aW50MzIgYWRkcmVzcyA9IDA7CisJcnRrX2wyX3VjYXN0QWRkcl90IGwyX2RhdGE7CisJcnRrX2wyX2lwTWNhc3RBZGRyX3QgaXBNY2FzdEFkZHI7CisJcnRrX2wyX2FnZV90aW1lX3QgYWdlX3RpbW91dDsKKworCXJ0a19sMl9hZ2luZ19nZXQoJmFnZV90aW1vdXQpOworCXByaW50aygiTWFjIHRhYmxlIGFnZSB0aW1lb3V0ID0lZFxuIiwodW5zaWduZWQgaW50KWFnZV90aW1vdXQpOworCisJcHJpbnRrKCJoYXNoICBwb3J0KDA6MTcpICAgZmlkICAgdmlkICBtYWMtYWRkcmVzc1xuIik7CisJd2hpbGUgKDEpIHsKKwkJaWYgKHJ0a19sMl9hZGRyX25leHRfZ2V0KFJFQURNRVRIT0RfTkVYVF9MMlVDLCBVVFBfUE9SVDAsICZhZGRyZXNzLCAmbDJfZGF0YSkgIT0gUlRfRVJSX09LKSB7CisJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCXByaW50aygiJTAzeCAgICIsIGwyX2RhdGEuYWRkcmVzcyk7CisJCQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQorCQkJCWlmICggbDJfZGF0YS5wb3J0ID09IGkpCisJCQkJCXByaW50aygiMSIpOworCQkJCWVsc2UKKwkJCQkJcHJpbnRrKCItIik7CisJCQlmb3IgKGkgPSAxNjsgaSA8IDE4OyBpKyspCisJCQkJaWYgKCBsMl9kYXRhLnBvcnQgPT0gaSkKKwkJCQkJcHJpbnRrKCIxIik7CisJCQkJZWxzZQorCQkJCQlwcmludGsoIi0iKTsKKworCQkJcHJpbnRrKCIgICAgICAlMmQiLCBsMl9kYXRhLmZpZCk7CisJCQlwcmludGsoIiAgJTRkIiwgbDJfZGF0YS5jdmlkKTsKKwkJCXByaW50aygiICAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsIGwyX2RhdGEubWFjLm9jdGV0WzBdLAorCQkJbDJfZGF0YS5tYWMub2N0ZXRbMV0sIGwyX2RhdGEubWFjLm9jdGV0WzJdLCBsMl9kYXRhLm1hYy5vY3RldFszXSwKKwkJCWwyX2RhdGEubWFjLm9jdGV0WzRdLCBsMl9kYXRhLm1hYy5vY3RldFs1XSk7CisJCQlhZGRyZXNzICsrOworCQkJfQorCX0KKworCWFkZHJlc3MgPSAwOworCXdoaWxlICgxKSB7CisgICAgICAgIGlmIChydGtfbDJfaXBNY2FzdEFkZHJfbmV4dF9nZXQoJmFkZHJlc3MsICZpcE1jYXN0QWRkcikgIT0gUlRfRVJSX09LKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50aygiJTAzeCAgICIsIGlwTWNhc3RBZGRyLmFkZHJlc3MpOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDU7IGkrKykKKyAgICAgICAgICAgICAgICBwcmludGsoIiVjIiwgUlRLX1BPUlRNQVNLX0lTX1BPUlRfU0VUKGlwTWNhc3RBZGRyLnBvcnRtYXNrLCBpKSA/ICcxJyA6ICctJyk7CisgICAgICAgICAgICBmb3IgKGkgPSAxNjsgaSA8IDE4OyBpKyspCisgICAgICAgICAgICAgICAgcHJpbnRrKCIlYyIsIFJUS19QT1JUTUFTS19JU19QT1JUX1NFVChpcE1jYXN0QWRkci5wb3J0bWFzaywgaSkgPyAnMScgOiAnLScpOworCQkJcHJpbnRrKCIgICAgICAgICAgICAgICAgIik7CisJCQlwcmludGsoIjAxMDA1RSUwNnhcbiIsIChpcE1jYXN0QWRkci5kaXAgJiAweGVmZmZmZikpOworICAgICAgICAgICAgYWRkcmVzcyArKzsKKyAgICAgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHJ0a19oYWxfY2xlYXJfdGFibGUodm9pZCkKK3sKKyAgICAgICAgcnRrX2FwaV9yZXRfdCByZXQ7CisKKyAgICAgICAgcmV0ID0gcnRrX2wyX3RhYmxlX2NsZWFyKCk7CisgICAgICAgIGlmIChyZXQgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHByaW50aygicnRrX2wyX3RhYmxlX2NsZWFyIGZhaWxlZFxuIik7Cit9CisKK3N0YXRpYyB2b2lkIHJ0a19oYWxfcmVhZF9yZWcodW5zaWduZWQgaW50IHJlZ19hZGRyKQoreworICAgICAgICByZXRfdCByZXRWYWw7CisJIHVuc2lnbmVkIGludCByZWdfdmFsOworCisgICAgICAgIHJldFZhbCA9IHNtaV9yZWFkKHJlZ19hZGRyLCAmcmVnX3ZhbCk7CisKKyAgICAgICAgaWYocmV0VmFsICE9IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICBwcmludGsoInN3aXRjaCByZWcgcmVhZCBmYWlsZWRcbiIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJpbnRrKCJyZWcweCV4ID0gMHgleFxuIiwgcmVnX2FkZHIsIHJlZ192YWwpOworfQorCitzdGF0aWMgdm9pZCBydGtfaGFsX3dyaXRlX3JlZyh1bnNpZ25lZCBpbnQgcmVnX2FkZHIgLCB1bnNpZ25lZCBpbnQgcmVnX3ZhbCkKK3sKKyAgICAgICAgcmV0X3QgcmV0VmFsOworCisgICAgcmV0VmFsID0gc21pX3dyaXRlKHJlZ19hZGRyLCByZWdfdmFsKTsKKworICAgIGlmKHJldFZhbCAhPSBSVF9FUlJfT0spCisgICAgICAgIHByaW50aygic3dpdGNoIHJlZyB3cml0ZSBmYWlsZWRcbiIpOworICAgIGVsc2UKKyAgICAgICAgcHJpbnRrKCJ3cml0ZSBzd2l0Y2ggcmVnMHgleCAweCV4IHN1Y2Nlc3NcbiIsIHJlZ19hZGRyLCByZWdfdmFsKTsKK30KKworc3RhdGljIHZvaWQgcnRrX2hhbF9nZXRfcGh5X3JlZyh1bnNpZ25lZCBpbnQgcG9ydCAsdW5zaWduZWQgaW50IHJlZ19hZGRyICkKK3sKKyAgICAgICAgcmV0X3QgcmV0VmFsOworICAgICAgICBydGtfcG9ydF9waHlfZGF0YV90IERhdGE7CisKKyAgICAgICAgcmV0VmFsID0gcnRrX3BvcnRfcGh5UmVnX2dldChwb3J0LCByZWdfYWRkciwgJkRhdGEpOworICAgICAgICBpZiAocmV0VmFsID09IFJUX0VSUl9PSykKKyAgICAgICAgICAgICAgICBwcmludGsoIkdldDogcGh5WyVkXS5yZWdbJWRdID0gMHglMDR4XG4iLCBwb3J0LCByZWdfYWRkciwgRGF0YSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcmludGsoInJlYWQgcGh5IHJlZyBmYWlsZWRcbiIpOworfQorCitzdGF0aWMgdm9pZCBydGtfaGFsX3NldF9waHlfcmVnKHVuc2lnbmVkIGludCBwb3J0ICx1bnNpZ25lZCBpbnQgcmVnX2FkZHIsdW5zaWduZWQgaW50IHJlZ192YWwpCit7CisgICAgICAgIHJldF90IHJldFZhbDsKKworICAgICAgICByZXRWYWwgPSBydGtfcG9ydF9waHlSZWdfc2V0KHBvcnQsIHJlZ19hZGRyLCByZWdfdmFsKTsKKyAgICAgICAgaWYgKHJldFZhbCA9PSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcHJpbnRrKCJTZXQ6IHBoeVslZF0ucmVnWyVkXSA9IDB4JTA0eFxuIiwgcG9ydCwgcmVnX2FkZHIsIHJlZ192YWwpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJpbnRrKCJ3cml0ZSBwaHkgcmVnIGZhaWxlZFxuIik7Cit9CisKK3N0YXRpYyB2b2lkIHJ0a19oYWxfc2V0X3BvcnRfbWlycm9yKHVuc2lnbmVkIGludCBwb3J0ICx1bnNpZ25lZCBpbnQgcnhfcG9ydF9tYXAsdW5zaWduZWQgaW50IHR4X3BvcnRfbWFwKQoreworICAgICAgICBydGtfcG9ydG1hc2tfdCByeF9wb3J0bWFzazsKKyAgICAgICAgcnRrX3BvcnRtYXNrX3QgdHhfcG9ydG1hc2s7CisgICAgICAgIHJ0a19hcGlfcmV0X3QgcmV0OworICAgICAgICBpbnQgaTsKKworICAgICAgICBydGtfbWlycm9yX3BvcnRJc29fc2V0KEVOQUJMRUQpOworICAgICAgICBSVEtfUE9SVE1BU0tfQ0xFQVIocnhfcG9ydG1hc2spOworICAgICAgICBSVEtfUE9SVE1BU0tfQ0xFQVIodHhfcG9ydG1hc2spOworCisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKKyAgICAgICAgICAgICAgICBpZiAocnhfcG9ydF9tYXAgJiAoMSA8PCBpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIFJUS19QT1JUTUFTS19QT1JUX1NFVChyeF9wb3J0bWFzaywgaSk7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDI7IGkrKykKKyAgICAgICAgICAgICAgICBpZiAocnhfcG9ydF9tYXAgJiAoMSA8PCAoaSArIDUpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIFJUS19QT1JUTUFTS19QT1JUX1NFVChyeF9wb3J0bWFzaywgKGkgKyBFWFRfUE9SVDApKTsKKworICAgICAgICBSVEtfUE9SVE1BU0tfQ0xFQVIodHhfcG9ydG1hc2spOworCisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKKwkJaWYgKHR4X3BvcnRfbWFwICYgKDEgPDwgaSkpCisJCSAgICAgICAgICAgUlRLX1BPUlRNQVNLX1BPUlRfU0VUKHR4X3BvcnRtYXNrLCBpKTsKKworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisJCWlmICh0eF9wb3J0X21hcCAmICgxIDw8IChpICsgNSkpKQorCQkJUlRLX1BPUlRNQVNLX1BPUlRfU0VUKHR4X3BvcnRtYXNrLCAoaSArIEVYVF9QT1JUMCkpOworCisJcmV0ID0gcnRrX21pcnJvcl9wb3J0QmFzZWRfc2V0KHBvcnQsICZyeF9wb3J0bWFzaywgJnR4X3BvcnRtYXNrKTsKKworICAgICAgICBpZiAoIXJldCkKKyAgICAgICAgICAgICAgICBwcmludGsoInJ0a19taXJyb3JfcG9ydEJhc2VkX3NldCBzdWNjZXNzXG4iKTsKKworfQorCitzdGF0aWMgdm9pZCBydGtfaGFsX2VuYWJsZV9pZ21wc25vb3AoaW50IGh3X29uKQoreworICAgICAgICBydGtfYXBpX3JldF90IHJldDsKKyAgICAgICAgcnRrX3BvcnRtYXNrX3QgcG1hc2s7CisKKyAgICAgICAgcmV0ID0gcnRrX2lnbXBfaW5pdCgpOworICAgICAgICBpZiAoaHdfb24gPT0gMSkgeworICAgICAgICAgICAgICAgIFJUS19QT1JUTUFTS19DTEVBUihwbWFzayk7CisgICAgICAgICAgICAgICAgUlRLX1BPUlRNQVNLX1BPUlRfU0VUKHBtYXNrLCBFWFRfUE9SVDApOworICAgICAgICAgICAgICAgIHJldCB8PSBydGtfaWdtcF9zdGF0aWNfcm91dGVyX3BvcnRfc2V0KCZwbWFzayk7CisgICAgICAgICAgICAgICAgcmV0IHw9IHJ0a19pZ21wX3Byb3RvY29sX3NldChVVFBfUE9SVDQsIFBST1RPQ09MX0lHTVB2MSwgSUdNUF9BQ1RJT05fRk9SV0FSRCk7CisgICAgICAgICAgICAgICAgcmV0IHw9IHJ0a19pZ21wX3Byb3RvY29sX3NldChVVFBfUE9SVDQsIFBST1RPQ09MX0lHTVB2MiwgSUdNUF9BQ1RJT05fRk9SV0FSRCk7CisgICAgICAgICAgICAgICAgcmV0IHw9IHJ0a19pZ21wX3Byb3RvY29sX3NldChVVFBfUE9SVDQsIFBST1RPQ09MX01MRHYxLCBJR01QX0FDVElPTl9GT1JXQVJEKTsKKyAgICAgICAgICAgICAgICByZXQgfD0gcnRrX2lnbXBfcHJvdG9jb2xfc2V0KEVYVF9QT1JUMSwgUFJPVE9DT0xfSUdNUHYxLCBJR01QX0FDVElPTl9GT1JXQVJEKTsKKyAgICAgICAgICAgICAgICByZXQgfD0gcnRrX2lnbXBfcHJvdG9jb2xfc2V0KEVYVF9QT1JUMSwgUFJPVE9DT0xfSUdNUHYyLCBJR01QX0FDVElPTl9GT1JXQVJEKTsKKyAgICAgICAgICAgICAgICByZXQgfD0gcnRrX2lnbXBfcHJvdG9jb2xfc2V0KEVYVF9QT1JUMSwgUFJPVE9DT0xfTUxEdjEsIElHTVBfQUNUSU9OX0ZPUldBUkQpOworICAgICAgICAgICAgICAgIHJldCB8PSBydGtfaWdtcF9wcm90b2NvbF9zZXQoVVRQX1BPUlQwLCBQUk9UT0NPTF9JR01QdjMsIElHTVBfQUNUSU9OX0FTSUMpOworICAgICAgICAgICAgICAgIHJldCB8PSBydGtfaWdtcF9wcm90b2NvbF9zZXQoVVRQX1BPUlQxLCBQUk9UT0NPTF9JR01QdjMsIElHTVBfQUNUSU9OX0FTSUMpOworICAgICAgICAgICAgICAgIHJldCB8PSBydGtfaWdtcF9wcm90b2NvbF9zZXQoVVRQX1BPUlQyLCBQUk9UT0NPTF9JR01QdjMsIElHTVBfQUNUSU9OX0FTSUMpOworICAgICAgICAgICAgICAgIHJldCB8PSBydGtfaWdtcF9wcm90b2NvbF9zZXQoVVRQX1BPUlQzLCBQUk9UT0NPTF9JR01QdjMsIElHTVBfQUNUSU9OX0FTSUMpOworICAgICAgICAgICAgICAgIHJldCB8PSBydGtfaWdtcF9wcm90b2NvbF9zZXQoRVhUX1BPUlQwLCBQUk9UT0NPTF9JR01QdjMsIElHTVBfQUNUSU9OX0FTSUMpOworCisgICAgICAgICAgICAgICAgcmV0IHw9IHJ0a19sZWFreV92bGFuX3NldChMRUFLWV9JUE1VTFRJQ0FTVCwgRU5BQkxFRCk7CisgICAgICAgICAgICAgICAgcmV0IHw9IHJ0a19sMl9pcE1jYXN0Rm9yd2FyZFJvdXRlclBvcnRfc2V0KERJU0FCTEVEKTsKKyAgICAgICAgICAgICAgICAvKiBkcm9wIHVua25vd24gbXVsdGljYXN0IHBhY2tldHMqLworICAgICAgICAgICAgICAgIC8qIHJldCB8PSBydGtfdHJhcF91bmtub3duTWNhc3RQa3RBY3Rpb25fc2V0KFVUUF9QT1JUNCwgTUNBU1RfSVBWNCwgTUNBU1RfQUNUSU9OX0RST1ApOyovCisgICAgICAgIH0gZWxzZSB7CisJCVJUS19QT1JUTUFTS19DTEVBUihwbWFzayk7CisJCVJUS19QT1JUTUFTS19QT1JUX1NFVChwbWFzaywgRVhUX1BPUlQwKTsKKwkJUlRLX1BPUlRNQVNLX1BPUlRfU0VUKHBtYXNrLCBFWFRfUE9SVDEpOworICAgICAgICAgICAgICAgIHJldCB8PSBydGtfaWdtcF9wcm90b2NvbF9zZXQoVVRQX1BPUlQwLCBQUk9UT0NPTF9JR01QdjMsIElHTVBfQUNUSU9OX0FTSUMpOworICAgICAgICAgICAgICAgIHJldCB8PSBydGtfaWdtcF9wcm90b2NvbF9zZXQoVVRQX1BPUlQxLCBQUk9UT0NPTF9JR01QdjMsIElHTVBfQUNUSU9OX0FTSUMpOworICAgICAgICAgICAgICAgIHJldCB8PSBydGtfaWdtcF9wcm90b2NvbF9zZXQoVVRQX1BPUlQyLCBQUk9UT0NPTF9JR01QdjMsIElHTVBfQUNUSU9OX0FTSUMpOworICAgICAgICAgICAgICAgIHJldCB8PSBydGtfaWdtcF9wcm90b2NvbF9zZXQoVVRQX1BPUlQzLCBQUk9UT0NPTF9JR01QdjMsIElHTVBfQUNUSU9OX0FTSUMpOworICAgICAgICAgICAgICAgIHJldCB8PSBydGtfaWdtcF9wcm90b2NvbF9zZXQoRVhUX1BPUlQwLCBQUk9UT0NPTF9JR01QdjMsIElHTVBfQUNUSU9OX0FTSUMpOworCisgICAgICAgICAgICAgICAgcmV0IHw9IHJ0a19pZ21wX3N0YXRpY19yb3V0ZXJfcG9ydF9zZXQoJnBtYXNrKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKHJldCAhPSBSVF9FUlJfT0spCisgICAgICAgICAgICAgICAgcHJpbnRrKCJlbmFibGUgc3dpdGNoIGlnbXBzbm9vcCBmYWlsZWRcbiIpOworCit9CisKK3N0YXRpYyB2b2lkIHJ0a19oYWxfZGlzYWJsZV9pZ21wc25vb3Aodm9pZCkKK3sKKyAgICAgICAgaWYgKHJ0a19pZ21wX3N0YXRlX3NldChESVNBQkxFRCkgIT0gUlRfRVJSX09LKQorICAgICAgICAgICAgICAgIHByaW50aygiRGlzYWJsZSBJR01QIFNOT09QSU5HIGZhaWxlZFxuIik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1hY190Ymxfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZmZfdCAqZGF0YSkKK3sKKwlydGtfaGFsX2NsZWFyX3RhYmxlKCk7CisKKyAgICAgICAgcmV0dXJuIGNvdW50OworfQorCisKK3N0YXRpYyBzc2l6ZV90IHBoeXJlZ19vcHMoc3RydWN0IGZpbGUgKmZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZmZfdCAqZGF0YSkKK3sKKyAgICAgICAgY2hhciBidWZbNjRdOworCSB1bnNpZ25lZCBpbnQgcG9ydDsKKyAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldDsKKyAgICAgICAgdW5zaWduZWQgaW50IHZhbDsKKworICAgICAgICBtZW1zZXQoYnVmLCAwLCA2NCk7CisKKyAgICAgICAgaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgYnVmZmVyLCBjb3VudCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisKKworICAgICAgICBpZihidWZbMF0gPT0gJ3cnKSB7CisKKyAgICAgICAgICAgICAgICBpZihzc2NhbmYoYnVmLCAidyAlZCAleCAleCIsICZwb3J0LCZvZmZzZXQsJnZhbCkgPT0gLTEpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBydGtfaGFsX3NldF9waHlfcmVnKHBvcnQsb2Zmc2V0LHZhbCk7CisKKyAgICAgICAgfSBlbHNlIHsKKworCQlpZihzc2NhbmYoYnVmLCAiciAlZCAleCIsJnBvcnQsICZvZmZzZXQpID09IC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcnRrX2hhbF9nZXRfcGh5X3JlZyhwb3J0LG9mZnNldCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJlZ19vcHMoc3RydWN0IGZpbGUgKmZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZmZfdCAqZGF0YSkKK3sKKyAgICAgICAgY2hhciBidWZbNjRdOworICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0OworICAgICAgICB1bnNpZ25lZCBpbnQgdmFsOworCisgICAgICAgIG1lbXNldChidWYsIDAsIDY0KTsKKworICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoYnVmLCBidWZmZXIsIGNvdW50KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKKworCisgICAgICAgIGlmKGJ1ZlswXSA9PSAndycpIHsKKworICAgICAgICAgICAgICAgIGlmKHNzY2FuZihidWYsICJ3ICV4ICV4IiwgJm9mZnNldCwmdmFsKSA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHJ0a19oYWxfd3JpdGVfcmVnKG9mZnNldCx2YWwpOworCisgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgICAgICBpZihzc2NhbmYoYnVmLCAiciAleCIsICZvZmZzZXQpID09IC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcnRrX2hhbF9yZWFkX3JlZyhvZmZzZXQpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBtaXJyb3Jfb3BzKHN0cnVjdCBmaWxlICpmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2ZmX3QgKmRhdGEpCit7CisgICAgICAgIGNoYXIgYnVmWzY0XTsKKwkgdW5zaWduZWQgaW50IHBvcnQ7CisgICAgICAgIHVuc2lnbmVkIGludCB0eF9tYXAscnhfbWFwOworCisgICAgICAgIG1lbXNldChidWYsIDAsIDY0KTsKKworICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoYnVmLCBidWZmZXIsIGNvdW50KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKKworCWlmKHNzY2FuZihidWYsICIlZCAleCAleCIsICZwb3J0LCZyeF9tYXAsJnR4X21hcCkgPT0gLTEpCisJCXJldHVybiAtRUZBVUxUOworCWVsc2UKKwkJcnRrX2hhbF9zZXRfcG9ydF9taXJyb3IocG9ydCxyeF9tYXAsdHhfbWFwKTsKKworICAgICAgICByZXR1cm4gY291bnQ7Cit9CisKKworc3RhdGljIHNzaXplX3QgaWdtcF9vcHMoc3RydWN0IGZpbGUgKmZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZmZfdCAqZGF0YSkKK3sKKyAgICAgICAgY2hhciBidWZbOF07CisgICAgICAgIHVuc2lnbmVkIGludCBvcHM7CisKKyAgICAgICAgaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgYnVmZmVyLCBjb3VudCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisKKwlpZihzc2NhbmYoYnVmLCAiJWQiLCAmb3BzKSA9PSAtMSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKyAgICAgICAgaWYob3BzID09IDApCisgICAgICAgICAgICAgICAgcnRrX2hhbF9kaXNhYmxlX2lnbXBzbm9vcCgpOworCWVsc2UgaWYgKG9wcyA9PSAxKQorCQlydGtfaGFsX2VuYWJsZV9pZ21wc25vb3AoMCk7CisJZWxzZSAvL2h3IGlnbXAKKwkJcnRrX2hhbF9lbmFibGVfaWdtcHNub29wKDEpOworCisgICAgICAgIHJldHVybiBjb3VudDsKK30KKworCitzdGF0aWMgaW50IGVzd19jbnRfcmVhZChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKKwlydGtfaGFsX2R1bXBfbWliKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmxhbl9yZWFkKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworCXJ0a19oYWxfZHVtcF92bGFuKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWFjX3RibF9yZWFkKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworCXJ0a19oYWxfZHVtcF90YWJsZSgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlZ19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBoeXJlZ19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1pcnJvcl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlnbXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzd2l0Y2hfY291bnRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZXN3X2NudF9yZWFkLCAwKTsKK30KKworc3RhdGljIGludCBzd2l0Y2hfdmxhbl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCB2bGFuX3JlYWQsIDApOworfQorCitzdGF0aWMgaW50IG1hY190Ymxfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgbWFjX3RibF9yZWFkLCAwKTsKK30KKworc3RhdGljIGludCByZWdfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcmVnX3Nob3csIDApOworfQorCitzdGF0aWMgaW50IHBoeXJlZ19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwaHlyZWdfc2hvdywgMCk7Cit9CisKK3N0YXRpYyBpbnQgbWlycm9yX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIG1pcnJvcl9zaG93LCAwKTsKK30KKworc3RhdGljIGludCBpZ21wX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGlnbXBfc2hvdywgMCk7Cit9CisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3dpdGNoX2NvdW50X2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBzd2l0Y2hfY291bnRfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3dpdGNoX3ZsYW5fZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IHN3aXRjaF92bGFuX29wZW4sCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1hY190YmxfZm9wcyA9IHsKKyAgICAgICAgLm93bmVyID0gVEhJU19NT0RVTEUsCisgICAgICAgIC5vcGVuID0gbWFjX3RibF9vcGVuLAorICAgICAgICAucmVhZCA9IHNlcV9yZWFkLAorICAgICAgICAubGxzZWVrID0gc2VxX2xzZWVrLAorICAgICAgICAud3JpdGUgPSBtYWNfdGJsX3dyaXRlLAorICAgICAgICAucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByZWdfZm9wcyA9IHsKKyAgICAgICAgLm93bmVyID0gVEhJU19NT0RVTEUsCisgICAgICAgIC5vcGVuID0gcmVnX29wZW4sCisgICAgICAgIC5yZWFkID0gc2VxX3JlYWQsCisgICAgICAgIC5sbHNlZWsgPSBzZXFfbHNlZWssCisgICAgICAgIC53cml0ZSA9IHJlZ19vcHMsCisgICAgICAgIC5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBoeXJlZ19mb3BzID0geworICAgICAgICAub3duZXIgPSBUSElTX01PRFVMRSwKKyAgICAgICAgLm9wZW4gPSBwaHlyZWdfb3BlbiwKKyAgICAgICAgLnJlYWQgPSBzZXFfcmVhZCwKKyAgICAgICAgLmxsc2VlayA9IHNlcV9sc2VlaywKKyAgICAgICAgLndyaXRlID0gcGh5cmVnX29wcywKKyAgICAgICAgLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWlycm9yX2ZvcHMgPSB7CisgICAgICAgIC5vd25lciA9IFRISVNfTU9EVUxFLAorICAgICAgICAub3BlbiA9IG1pcnJvcl9vcGVuLAorICAgICAgICAucmVhZCA9IHNlcV9yZWFkLAorICAgICAgICAubGxzZWVrID0gc2VxX2xzZWVrLAorICAgICAgICAud3JpdGUgPSBtaXJyb3Jfb3BzLAorICAgICAgICAucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpZ21wX2ZvcHMgPSB7CisgICAgICAgIC5vd25lciA9IFRISVNfTU9EVUxFLAorICAgICAgICAub3BlbiA9IGlnbXBfb3BlbiwKKyAgICAgICAgLnJlYWQgPSBzZXFfcmVhZCwKKyAgICAgICAgLmxsc2VlayA9IHNlcV9sc2VlaywKKyAgICAgICAgLndyaXRlID0gaWdtcF9vcHMsCisgICAgICAgIC5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UKK307CisKK2ludCBnc3dfZGVidWdfcHJvY19pbml0KHZvaWQpCit7CisKKwlpZiAoIXByb2NfcmVnX2RpcikKKwkJcHJvY19yZWdfZGlyID0gcHJvY19ta2RpcihQUk9DUkVHX0RJUiwgTlVMTCk7CisKKwlwcm9jX2Vzd19jbnQgPQorCXByb2NfY3JlYXRlKFBST0NSRUdfRVNXX0NOVCwgMCwgcHJvY19yZWdfZGlyLCAmc3dpdGNoX2NvdW50X2ZvcHMpOworCisJaWYgKCFwcm9jX2Vzd19jbnQpCisJCXByX2VycigiISEgRkFJTCB0byBjcmVhdGUgJXMgUFJPQyAhIVxuIiwgUFJPQ1JFR19FU1dfQ05UKTsKKworCXByb2Nfdmxhbl9jbnQgPQorCXByb2NfY3JlYXRlKFBST0NSRUdfVkxBTiwgMCwgcHJvY19yZWdfZGlyLCAmc3dpdGNoX3ZsYW5fZm9wcyk7CisKKwlpZiAoIXByb2Nfdmxhbl9jbnQpCisJCXByX2VycigiISEgRkFJTCB0byBjcmVhdGUgJXMgUFJPQyAhIVxuIiwgUFJPQ1JFR19WTEFOKTsKKworCXByb2NfbWFjX3RibCA9CisJcHJvY19jcmVhdGUoUFJPQ1JFR19NQUNfVEJMLCAwLCBwcm9jX3JlZ19kaXIsICZtYWNfdGJsX2ZvcHMpOworCisJaWYgKCFwcm9jX21hY190YmwpCisJCXByX2VycigiISEgRkFJTCB0byBjcmVhdGUgJXMgUFJPQyAhIVxuIiwgUFJPQ1JFR19NQUNfVEJMKTsKKworCXByb2NfcmVnID0KKwlwcm9jX2NyZWF0ZShQUk9DUkVHX1JFRywgMCwgcHJvY19yZWdfZGlyLCAmcmVnX2ZvcHMpOworCisJaWYgKCFwcm9jX3JlZykKKwkJcHJfZXJyKCIhISBGQUlMIHRvIGNyZWF0ZSAlcyBQUk9DICEhXG4iLCBQUk9DUkVHX1JFRyk7CisKKwlwcm9jX3BoeXJlZyA9CisJcHJvY19jcmVhdGUoUFJPQ1JFR19QSFlSRUcsIDAsIHByb2NfcmVnX2RpciwgJnBoeXJlZ19mb3BzKTsKKworCWlmICghcHJvY19waHlyZWcpCisJCXByX2VycigiISEgRkFJTCB0byBjcmVhdGUgJXMgUFJPQyAhIVxuIiwgUFJPQ1JFR19QSFlSRUcpOworCisJcHJvY19taXJyb3IgPQorCXByb2NfY3JlYXRlKFBST0NSRUdfTUlSUk9SLCAwLCBwcm9jX3JlZ19kaXIsICZtaXJyb3JfZm9wcyk7CisKKwlpZiAoIXByb2NfbWlycm9yKQorCQlwcl9lcnIoIiEhIEZBSUwgdG8gY3JlYXRlICVzIFBST0MgISFcbiIsIFBST0NSRUdfTUlSUk9SKTsKKworCXByb2NfaWdtcCA9CisJcHJvY19jcmVhdGUoUFJPQ1JFR19JR01QLCAwLCBwcm9jX3JlZ19kaXIsICZpZ21wX2ZvcHMpOworCisJaWYgKCFwcm9jX2lnbXApCisJCXByX2VycigiISEgRkFJTCB0byBjcmVhdGUgJXMgUFJPQyAhIVxuIiwgUFJPQ1JFR19JR01QKTsKKworCXJldHVybiAwOworfQorCit2b2lkIGdzd19kZWJ1Z19wcm9jX2V4aXQodm9pZCkKK3sKKwlpZiAocHJvY19lc3dfY250KQorCQlyZW1vdmVfcHJvY19lbnRyeShQUk9DUkVHX0VTV19DTlQsIHByb2NfcmVnX2Rpcik7Cit9CisKKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC9waHkvcnRrL3J0bDgzNjdzX21kaW8uYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3c19tZGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU5NThlOAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvcGh5L3J0ay9ydGw4MzY3c19tZGlvLmMKQEAgLTAsMCArMSwzMTIgQEAKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisgCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfbWRpby5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgorCisKKyNpbmNsdWRlICAiLi9ydGw4MzY3Yy9pbmNsdWRlL3J0a19zd2l0Y2guaCIKKyNpbmNsdWRlICAiLi9ydGw4MzY3Yy9pbmNsdWRlL3BvcnQuaCIKKyNpbmNsdWRlICAiLi9ydGw4MzY3Yy9pbmNsdWRlL3ZsYW4uaCIKKyNpbmNsdWRlICAiLi9ydGw4MzY3Yy9pbmNsdWRlL3J0bDgzNjdjX2FzaWNkcnZfcG9ydC5oIgorCitzdHJ1Y3QgcnRrX2dzdyB7CisgCXN0cnVjdCBkZXZpY2UgICAgICAgICAgICpkZXY7CisgCXN0cnVjdCBtaWlfYnVzICAgICAgICAgICpidXM7CisJaW50IHJlc2V0X3BpbjsKK307CisKK3N0YXRpYyBzdHJ1Y3QgcnRrX2dzdyAqX2dzdzsKKworZXh0ZXJuIGludCBnc3dfZGVidWdfcHJvY19pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgZ3N3X2RlYnVnX3Byb2NfZXhpdCh2b2lkKTsKKworI2lmZGVmIENPTkZJR19TV0NPTkZJRworZXh0ZXJuIGludCBydGw4MzY3c19zd2NvbmZpZ19pbml0KCB2b2lkICgqcmVzZXRfZnVuYykodm9pZCkgKTsKKyNlbmRpZgorCisvKm1paV9tZ3JfcmVhZC9taWlfbWdyX3dyaXRlIGlzIHRoZSBjYWxsYmFjayBBUEkgZm9yIHJ0bDgzNjcgZHJpdmVyKi8KK3Vuc2lnbmVkIGludCBtaWlfbWdyX3JlYWQodW5zaWduZWQgaW50IHBoeV9hZGRyLHVuc2lnbmVkIGludCBwaHlfcmVnaXN0ZXIsdW5zaWduZWQgaW50ICpyZWFkX2RhdGEpCit7CisJc3RydWN0IG1paV9idXMgKmJ1cyA9IF9nc3ctPmJ1czsKKworCW11dGV4X2xvY2tfbmVzdGVkKCZidXMtPm1kaW9fbG9jaywgTURJT19NVVRFWF9ORVNURUQpOworCisJKnJlYWRfZGF0YSA9IGJ1cy0+cmVhZChidXMsIHBoeV9hZGRyLCBwaHlfcmVnaXN0ZXIpOworCisJbXV0ZXhfdW5sb2NrKCZidXMtPm1kaW9fbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50IG1paV9tZ3Jfd3JpdGUodW5zaWduZWQgaW50IHBoeV9hZGRyLHVuc2lnbmVkIGludCBwaHlfcmVnaXN0ZXIsdW5zaWduZWQgaW50IHdyaXRlX2RhdGEpCit7CisJc3RydWN0IG1paV9idXMgKmJ1cyA9ICBfZ3N3LT5idXM7CisKKwltdXRleF9sb2NrX25lc3RlZCgmYnVzLT5tZGlvX2xvY2ssIE1ESU9fTVVURVhfTkVTVEVEKTsKKworCWJ1cy0+d3JpdGUoYnVzLCBwaHlfYWRkciwgcGh5X3JlZ2lzdGVyLCB3cml0ZV9kYXRhKTsKKworCW11dGV4X3VubG9jaygmYnVzLT5tZGlvX2xvY2spOworCQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0bDgzNjdzX2h3X3Jlc2V0KHZvaWQpCit7CisJc3RydWN0IHJ0a19nc3cgKmdzdyA9IF9nc3c7CisJaW50IHJldDsKKworCWlmIChnc3ctPnJlc2V0X3BpbiA8IDApCisJCXJldHVybiAwOworCisJcmV0ID0gZGV2bV9ncGlvX3JlcXVlc3QoZ3N3LT5kZXYsIGdzdy0+cmVzZXRfcGluLCAibWVkaWF0ZWsscmVzZXQtcGluIik7CisKKwlpZiAocmV0KQorICAgICAgICAgICAgICAgIHByaW50aygiZmFpbCB0byBkZXZtX2dwaW9fcmVxdWVzdFxuIik7CisKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3N3LT5yZXNldF9waW4sIDApOworCisJdXNsZWVwX3JhbmdlKDEwMDAsIDExMDApOworCisJZ3Bpb19zZXRfdmFsdWUoZ3N3LT5yZXNldF9waW4sIDEpOworCisJbWRlbGF5KDUwMCk7CisKKwlkZXZtX2dwaW9fZnJlZShnc3ctPmRldiwgZ3N3LT5yZXNldF9waW4pOworCisJcmV0dXJuIDA7CisJCit9CisKK3N0YXRpYyBpbnQgcnRsODM2N3Nfdmxhbl9jb25maWcoaW50IHdhbnRfYXRfcDApCit7CisJcnRrX3ZsYW5fY2ZnX3QgdmxhbjEsIHZsYW4yOworCQorCS8qIFNldCBMQU4vV0FOIFZMQU4gcGFydGl0aW9uICovCisJbWVtc2V0KCZ2bGFuMSwgMHgwMCwgc2l6ZW9mKHJ0a192bGFuX2NmZ190KSk7CisKKwlSVEtfUE9SVE1BU0tfUE9SVF9TRVQodmxhbjEubWJyLCBFWFRfUE9SVDApOworCVJUS19QT1JUTUFTS19QT1JUX1NFVCh2bGFuMS5tYnIsIFVUUF9QT1JUMSk7CisJUlRLX1BPUlRNQVNLX1BPUlRfU0VUKHZsYW4xLm1iciwgVVRQX1BPUlQyKTsKKwlSVEtfUE9SVE1BU0tfUE9SVF9TRVQodmxhbjEubWJyLCBVVFBfUE9SVDMpOworCVJUS19QT1JUTUFTS19QT1JUX1NFVCh2bGFuMS51bnRhZywgRVhUX1BPUlQwKTsKKwlSVEtfUE9SVE1BU0tfUE9SVF9TRVQodmxhbjEudW50YWcsIFVUUF9QT1JUMSk7CisJUlRLX1BPUlRNQVNLX1BPUlRfU0VUKHZsYW4xLnVudGFnLCBVVFBfUE9SVDIpOworCVJUS19QT1JUTUFTS19QT1JUX1NFVCh2bGFuMS51bnRhZywgVVRQX1BPUlQzKTsKKyAgCisJIGlmICh3YW50X2F0X3AwKSB7CisJCVJUS19QT1JUTUFTS19QT1JUX1NFVCh2bGFuMS5tYnIsIFVUUF9QT1JUNCk7CisJCVJUS19QT1JUTUFTS19QT1JUX1NFVCh2bGFuMS51bnRhZywgVVRQX1BPUlQ0KTsKKyAgICAgICAgfSBlbHNlIHsKKwkJUlRLX1BPUlRNQVNLX1BPUlRfU0VUKHZsYW4xLm1iciwgVVRQX1BPUlQwKTsKKwkJUlRLX1BPUlRNQVNLX1BPUlRfU0VUKHZsYW4xLnVudGFnLCBVVFBfUE9SVDApOworICAgICAgICB9CisKKwl2bGFuMS5pdmxfZW4gPSAxOworCQorCXJ0a192bGFuX3NldCgxLCAmdmxhbjEpOworCQorCW1lbXNldCgmdmxhbjIsIDB4MDAsIHNpemVvZihydGtfdmxhbl9jZmdfdCkpOworCQorCVJUS19QT1JUTUFTS19QT1JUX1NFVCh2bGFuMi5tYnIsIEVYVF9QT1JUMSk7CisJUlRLX1BPUlRNQVNLX1BPUlRfU0VUKHZsYW4yLnVudGFnLCBFWFRfUE9SVDEpOworCisJaWYgKHdhbnRfYXRfcDApIHsKKwkJUlRLX1BPUlRNQVNLX1BPUlRfU0VUKHZsYW4yLm1iciwgVVRQX1BPUlQwKTsKKwkJUlRLX1BPUlRNQVNLX1BPUlRfU0VUKHZsYW4yLnVudGFnLCBVVFBfUE9SVDApOworCX0gZWxzZSB7CisJCVJUS19QT1JUTUFTS19QT1JUX1NFVCh2bGFuMi5tYnIsIFVUUF9QT1JUNCk7CisJCVJUS19QT1JUTUFTS19QT1JUX1NFVCh2bGFuMi51bnRhZywgVVRQX1BPUlQ0KTsKKwl9CisKKwl2bGFuMi5pdmxfZW4gPSAxOworCXJ0a192bGFuX3NldCgyLCAmdmxhbjIpOworCisJcnRrX3ZsYW5fcG9ydFB2aWRfc2V0KEVYVF9QT1JUMCwgMSwgMCk7CisJcnRrX3ZsYW5fcG9ydFB2aWRfc2V0KFVUUF9QT1JUMSwgMSwgMCk7CisJcnRrX3ZsYW5fcG9ydFB2aWRfc2V0KFVUUF9QT1JUMiwgMSwgMCk7CisJcnRrX3ZsYW5fcG9ydFB2aWRfc2V0KFVUUF9QT1JUMywgMSwgMCk7CisJcnRrX3ZsYW5fcG9ydFB2aWRfc2V0KEVYVF9QT1JUMSwgMiwgMCk7CisKKwlpZiAod2FudF9hdF9wMCkgeworCQlydGtfdmxhbl9wb3J0UHZpZF9zZXQoVVRQX1BPUlQwLCAyLCAwKTsKKwkJcnRrX3ZsYW5fcG9ydFB2aWRfc2V0KFVUUF9QT1JUNCwgMSwgMCk7CisJfSBlbHNlIHsKKwkJcnRrX3ZsYW5fcG9ydFB2aWRfc2V0KFVUUF9QT1JUMCwgMSwgMCk7CisJCXJ0a192bGFuX3BvcnRQdmlkX3NldChVVFBfUE9SVDQsIDIsIDApOworCX0KKworCXJldHVybiAwOwkKK30KKworc3RhdGljIGludCBydGw4MzY3c19od19pbml0KHZvaWQpCit7CisKKwlydGw4MzY3c19od19yZXNldCgpOworCisJaWYocnRrX3N3aXRjaF9pbml0KCkpCisJICAgICAgICByZXR1cm4gLTE7CisKKwltZGVsYXkoNTAwKTsKKworCWlmIChydGtfdmxhbl9yZXNldCgpKQorCSAgICAgICAgcmV0dXJuIC0xOworCisJaWYgKHJ0a192bGFuX2luaXQoKSkKKwkgICAgICAgIHJldHVybiAtMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXRfcnRsODM2N3Nfc2dtaWkodm9pZCkKK3sKKwlydGtfcG9ydF9tYWNfYWJpbGl0eV90IG1hY19jZmc7CisJcnRrX21vZGVfZXh0X3QgbW9kZTsKKworCW1vZGUgPSBNT0RFX0VYVF9IU0dNSUk7CisJbWFjX2NmZy5mb3JjZW1vZGUgPSBNQUNfRk9SQ0U7CisJbWFjX2NmZy5zcGVlZCA9IFBPUlRfU1BFRURfMjUwME07CisJbWFjX2NmZy5kdXBsZXggPSBQT1JUX0ZVTExfRFVQTEVYOworCW1hY19jZmcubGluayA9IFBPUlRfTElOS1VQOworCW1hY19jZmcubndheSA9IERJU0FCTEVEOworCW1hY19jZmcudHhwYXVzZSA9IEVOQUJMRUQ7CisJbWFjX2NmZy5yeHBhdXNlID0gRU5BQkxFRDsKKwlydGtfcG9ydF9tYWNGb3JjZUxpbmtFeHRfc2V0KEVYVF9QT1JUMCwgbW9kZSwgJm1hY19jZmcpOworCXJ0a19wb3J0X3NnbWlpTndheV9zZXQoRVhUX1BPUlQwLCBESVNBQkxFRCk7CisJcnRrX3BvcnRfcGh5RW5hYmxlQWxsX3NldChFTkFCTEVEKTsKKworfQorCitzdGF0aWMgdm9pZCBzZXRfcnRsODM2N3NfcmdtaWkodm9pZCkKK3sKKwlydGtfcG9ydF9tYWNfYWJpbGl0eV90IG1hY19jZmc7CisJcnRrX21vZGVfZXh0X3QgbW9kZTsKKworCW1vZGUgPSBNT0RFX0VYVF9SR01JSTsKKwltYWNfY2ZnLmZvcmNlbW9kZSA9IE1BQ19GT1JDRTsKKwltYWNfY2ZnLnNwZWVkID0gUE9SVF9TUEVFRF8xMDAwTTsKKwltYWNfY2ZnLmR1cGxleCA9IFBPUlRfRlVMTF9EVVBMRVg7CisJbWFjX2NmZy5saW5rID0gUE9SVF9MSU5LVVA7CisJbWFjX2NmZy5ud2F5ID0gRElTQUJMRUQ7CisJbWFjX2NmZy50eHBhdXNlID0gRU5BQkxFRDsKKwltYWNfY2ZnLnJ4cGF1c2UgPSBFTkFCTEVEOworCXJ0a19wb3J0X21hY0ZvcmNlTGlua0V4dF9zZXQoRVhUX1BPUlQxLCBtb2RlLCAmbWFjX2NmZyk7CisJcnRrX3BvcnRfcmdtaWlEZWxheUV4dF9zZXQoRVhUX1BPUlQxLCAxLCAzKTsKKwlydGtfcG9ydF9waHlFbmFibGVBbGxfc2V0KEVOQUJMRUQpOworCQorfQorCit2b2lkIGluaXRfZ3N3KHZvaWQpCit7CisJcnRsODM2N3NfaHdfaW5pdCgpOworCXNldF9ydGw4MzY3c19zZ21paSgpOworCXNldF9ydGw4MzY3c19yZ21paSgpOworfQorCisvLyBibGVvdyBhcmUgcGxhdGZvcm0gZHJpdmVyCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBydGtfZ3N3X21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxydGstZ3N3IiB9LAorCXt9LAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgcnRrX2dzd19tYXRjaCk7CisKK3N0YXRpYyBpbnQgcnRrX2dzd19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGV2LT5kZXYub2Zfbm9kZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm1kaW87CisJc3RydWN0IG1paV9idXMgKm1kaW9fYnVzOworCXN0cnVjdCBydGtfZ3N3ICpnc3c7CisJY29uc3QgY2hhciAqcG07CisKKwltZGlvID0gb2ZfcGFyc2VfcGhhbmRsZShucCwgIm1lZGlhdGVrLG1kaW8iLCAwKTsKKworCWlmICghbWRpbykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZGlvX2J1cyA9IG9mX21kaW9fZmluZF9idXMobWRpbyk7CisKKwlpZiAoIW1kaW9fYnVzKQorCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKworCWdzdyA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IHJ0a19nc3cpLCBHRlBfS0VSTkVMKTsKKwkKKwlpZiAoIWdzdykKKwkJcmV0dXJuIC1FTk9NRU07CQorCisJZ3N3LT5kZXYgPSAmcGRldi0+ZGV2OworCisJZ3N3LT5idXMgPSBtZGlvX2J1czsKKworCWdzdy0+cmVzZXRfcGluID0gb2ZfZ2V0X25hbWVkX2dwaW8obnAsICJtZWRpYXRlayxyZXNldC1waW4iLCAwKTsKKworCV9nc3cgPSBnc3c7CisKKwlpbml0X2dzdygpOworCisJLy9pbml0IGRlZmF1bHQgdmxhbiBvciBpbml0IHN3b2NuZmlnCisJaWYoIW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKHBkZXYtPmRldi5vZl9ub2RlLAorCQkJCQkJIm1lZGlhdGVrLHBvcnRfbWFwIiwgJnBtKSkgeworCisJCWlmICghc3RyY2FzZWNtcChwbSwgIndsbGxsIikpCisJCQlydGw4MzY3c192bGFuX2NvbmZpZygxKTsgCisJCWVsc2UKKwkJCXJ0bDgzNjdzX3ZsYW5fY29uZmlnKDApOworCQkKKwkJfSBlbHNlIHsKKyNpZmRlZiBDT05GSUdfU1dDT05GSUcJCQorCQlydGw4MzY3c19zd2NvbmZpZ19pbml0KCZpbml0X2dzdyk7CisjZWxzZQorCQlydGw4MzY3c192bGFuX2NvbmZpZygwKTsKKyNlbmRpZgorCX0KKworCWdzd19kZWJ1Z19wcm9jX2luaXQoKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGdzdyk7CisKKwlyZXR1cm4gMDsKKwkKK30KKworc3RhdGljIGludCBydGtfZ3N3X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWdzd19kZWJ1Z19wcm9jX2V4aXQoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBnc3dfZHJpdmVyID0geworCS5wcm9iZSA9IHJ0a19nc3dfcHJvYmUsCisJLnJlbW92ZSA9IHJ0a19nc3dfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInJ0ay1nc3ciLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlID0gcnRrX2dzd19tYXRjaCwKKwl9LAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihnc3dfZHJpdmVyKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWFyayBMZWUgPG1hcmtsZWUwMjAxQGdtYWlsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigicnRsODM2N2Mgc3dpdGNoIGRyaXZlciBmb3IgTVQ3NjIyIik7CisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2lmaV91dGlsaXR5L01ha2VmaWxlIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC93aXJlbGVzcy93aWZpX3V0aWxpdHkvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVjYzEwNwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2lmaV91dGlsaXR5L01ha2VmaWxlCkBAIC0wLDAgKzEsNCBAQAorI2Fsd2F5cyBidWlsZC1pbgorb2JqLXkgKz0gbXRfd2lmaV9tdGQubworb2JqLXkgKz0gcGNpX21lZGlhdGVrX3JidXMubworCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dpZmlfdXRpbGl0eS9tdF93aWZpX210ZC5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC93aXJlbGVzcy93aWZpX3V0aWxpdHkvbXRfd2lmaV9tdGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Mjk0YzczCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC93aXJlbGVzcy93aWZpX3V0aWxpdHkvbXRfd2lmaV9tdGQuYwpAQCAtMCwwICsxLDk4IEBACisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9jb25jYXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2lmIGRlZmluZWQgKENPTkZJR19NSVBTKQorI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKyNlbmRpZgorCitpbnQgbXRfbXRkX3dyaXRlX25tX3dpZmkoY2hhciAqbmFtZSwgbG9mZl90IHRvLCBzaXplX3QgbGVuLCBjb25zdCB1X2NoYXIgKmJ1ZikKK3sKKwlpbnQgcmV0ID0gLTE7CisJc2l6ZV90IHJkbGVuLCB3cmxlbjsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKKwlzdHJ1Y3QgZXJhc2VfaW5mbyBlaTsKKwl1X2NoYXIgKmJhayA9IE5VTEw7CisKKwltdGQgPSBnZXRfbXRkX2RldmljZV9ubShuYW1lKTsKKwlpZiAoSVNfRVJSKG10ZCkpCisJCXJldHVybiAtMTsKKworCWlmIChsZW4gPiBtdGQtPmVyYXNlc2l6ZSkgeworCQlwdXRfbXRkX2RldmljZShtdGQpOworCQlyZXR1cm4gLUUyQklHOworCX0KKworCWJhayA9IGttYWxsb2MobXRkLT5lcmFzZXNpemUsIEdGUF9LRVJORUwpOworCWlmIChiYWsgPT0gTlVMTCkgeworCQlwdXRfbXRkX2RldmljZShtdGQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXQgPSBtdGRfcmVhZChtdGQsIDAsIG10ZC0+ZXJhc2VzaXplLCAmcmRsZW4sIGJhayk7CisKKwlpZiAocmV0ICE9IDApIHsKKwkJcHV0X210ZF9kZXZpY2UobXRkKTsKKwkJa2ZyZWUoYmFrKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAocmRsZW4gIT0gbXRkLT5lcmFzZXNpemUpCisJCXByaW50aygid2FybmluZzogcmFfbXRkX3dyaXRlOiByZGxlbiBpcyBub3QgZXF1YWwgdG8gZXJhc2VzaXplXG4iKTsKKworCW1lbWNweShiYWsgKyB0bywgYnVmLCBsZW4pOworCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDQsIDE5LCAwKSkKKwllaS5tdGQgPSBtdGQ7CisJZWkuY2FsbGJhY2sgPSBOVUxMOworCWVpLnByaXYgPSAwOworI2VuZGlmCisJZWkuYWRkciA9IDA7CisJZWkubGVuID0gbXRkLT5lcmFzZXNpemU7CisJcmV0ID0gbXRkX2VyYXNlKG10ZCwgJmVpKTsKKworCWlmIChyZXQgIT0gMCkgeworCQlwdXRfbXRkX2RldmljZShtdGQpOworCQlrZnJlZShiYWspOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IG10ZF93cml0ZShtdGQsIDAsIG10ZC0+ZXJhc2VzaXplLCAmd3JsZW4sIGJhayk7CisKKworCisJcHV0X210ZF9kZXZpY2UobXRkKTsKKwlrZnJlZShiYWspOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKG10X210ZF93cml0ZV9ubV93aWZpKTsKKworCitpbnQgbXRfbXRkX3JlYWRfbm1fd2lmaShjaGFyICpuYW1lLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwgdV9jaGFyICpidWYpCit7CisJaW50IHJldDsKKwlzaXplX3QgcmRsZW47CisJc3RydWN0IG10ZF9pbmZvICptdGQ7CisKKwltdGQgPSBnZXRfbXRkX2RldmljZV9ubShuYW1lKTsKKwlpZiAoSVNfRVJSKG10ZCkpCisJCXJldHVybiAtMTsKKworCXJldCA9IG10ZF9yZWFkKG10ZCwgZnJvbSwgbGVuLCAmcmRsZW4sIGJ1Zik7CisKKwlpZiAocmRsZW4gIT0gbGVuKQorCQkJcHJpbnRrKCJ3YXJuaW5nOiByYV9tdGRfcmVhZF9ubTogcmRsZW4gaXMgbm90IGVxdWFsIHRvIGxlblxuIik7CisKKwlwdXRfbXRkX2RldmljZShtdGQpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wobXRfbXRkX3JlYWRfbm1fd2lmaSk7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dpZmlfdXRpbGl0eS9wY2lfbWVkaWF0ZWtfcmJ1cy5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC93aXJlbGVzcy93aWZpX3V0aWxpdHkvcGNpX21lZGlhdGVrX3JidXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDA4MzRkCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL25ldC93aXJlbGVzcy93aWZpX3V0aWxpdHkvcGNpX21lZGlhdGVrX3JidXMuYwpAQCAtMCwwICsxLDM2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNyBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IFN0YXIgQ2hhbmcgPHN0YXIuY2hhbmdAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaXJxZG9tYWluLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc291cmNlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9waW5jdHJsL2NvbnN1bWVyLmg+CisKKworLypwbGF0Zm9ybSBkZXZpY2UgJiBwbGF0Zm9ybSBkcml2ZXIgbWF0Y2ggbmFtZSovCisjZGVmaW5lIE9GX1JCVVNfTkFNRSAibWVkaWF0ZWssd2JzeXMiCisjZGVmaW5lIE9GX1BJT19OQU1FICJtZWRpYXRlayxtdDc2MjItcGN0bC1hLXN5c2NmZyIKKworI2RlZmluZSBSQlVTX1ZFTkRPUl9JRF9PRkZTRVQgMAorI2RlZmluZSBSQlVTX0NISVBfSURfT0ZGU0VUIDIKKyNkZWZpbmUgUkJVU19CQVJfT0ZGU0VUIDB4MTAKKyNkZWZpbmUgUkJVU19ERUZBVUxUX0NISVBfSUQgMHg3NjIyCisjZGVmaW5lIFJCVVNfREVGQVVMVF9WRU5EX0lEIDB4MTRjMworI2RlZmluZSBSQlVTX1RTU0lfQ1RSTF9PRkZTRVQgMHgzNAorI2RlZmluZSBSQlVTX1RTU0lfQ1RSTF9NQVNLIDB4MQorI2RlZmluZSBSQlVTX1BBX0xOQV9DVFJMX09GRlNFVCAweDM4CisjZGVmaW5lIFJCVVNfUEFfTE5BX0NUUkxfTUFTSyAweDMKKworI2RlZmluZSBHUElPX0cyX01JU0NfT0ZGU0VUIDB4MDAwMDBBRjAKKyNkZWZpbmUgR1BJT19HMl9NSVNDX01BU0sgMHhmZmZmZmYwMAorCitzdGF0aWMgY2hhciByYnVzX3N0cmluZ1tdID0gInJidXMiOwordW5zaWduZWQgaW50IGRldl9zZWNvbmRfaXJxID0gMDsKK3Vuc2lnbmVkIGludCBtdWx0aV9pbnRyXzJuZCA9IDA7Cit1bnNpZ25lZCBpbnQgbXVsdGlfaW50cl8zcmQgPSAwOwordW5zaWduZWQgaW50IG11bHRpX2ludHJfNHRoID0gMDsKK0VYUE9SVF9TWU1CT0woZGV2X3NlY29uZF9pcnEpOworRVhQT1JUX1NZTUJPTChtdWx0aV9pbnRyXzJuZCk7CitFWFBPUlRfU1lNQk9MKG11bHRpX2ludHJfM3JkKTsKK0VYUE9SVF9TWU1CT0wobXVsdGlfaW50cl80dGgpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCByYnVzX29mX2lkc1tdID0geworCXsgICAuY29tcGF0aWJsZSA9IE9GX1JCVVNfTkFNRSwgfSwKKwl7IH0sCit9OworCitzdHJ1Y3QgcmJ1c19kZXYgeworCWNoYXIgbmFtZVszNl07CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBsaXN0X2hlYWQgcmVzb3VyY2VzOworCXVuc2lnbmVkIGludCBiYXNlX2FkZHI7CisJdW5zaWduZWQgaW50IGlycTsKKwl1bnNpZ25lZCBpbnQgY2hpcF9pZDsKKwl1bnNpZ25lZCBpbnQgdmVuZF9pZDsKK307CisKK2VudW0geworCVRTU0lfTU9ERV9ESVM9MCwKKwlUU1NJX01PREVfRU49MQorfTsKKworZW51bSB7CisJSVBBX0lMTkFfTU9ERT0wLAorCUlQQV9FTE5BX01PREU9MSwKKwlFUEFfRUxOQV9NT0RFPTIsCisJRVBBX0lMTkFfTU9ERT0zCit9OworCisjZGVmaW5lIFJCVVNfSU9fUkVBRDMyKF9BLCBfUiwgX3BWKSAoKihfcFYpID0gcmVhZGwoKHZvaWQgKikoX0EgKyBfUikpKQorI2RlZmluZSBSQlVTX0lPX1dSSVRFMzIoX0EsIF9SLCBfVikJIHdyaXRlbChfViwgKHZvaWQgKikoX0EgKyBfUikpCisKKy8qZmFrZSBjb25maWd1cmUgc3BhY2UqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgcmJ1c19jb25mX3NwYWNlW10gPSB7CisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4NzYsIDB4YzMsIDB4MTQsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDYxLCAweDEyLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDUsIDB4NzgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHg3OCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDgwLCAweGMzLCAweDAxLCAweDA4LCAweDAwLCAweDAwLCAweDAwLAorCTB4MTAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODMsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OGMsIDB4NDAsIDB4MDEsCisJMHg0MywgMHgwMCwgMHgxMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAorfTsKKworc3RhdGljIGludAorcmJ1c190c3NpX2NvbmZpZyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCB1bnNpZ25lZCBjaGFyIG1vZGUpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpub2RlID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJdW5zaWduZWQgaW50IHZhbHVlID0gMDsKKworCW5vZGUgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCBPRl9QSU9fTkFNRSk7CisJaWYgKCFub2RlKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzKCk6IGNhbid0IGZpbmQgbm9kZSBmb3IgJXNcbiIsIF9fZnVuY19fLCBPRl9QSU9fTkFNRSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWFkZHIgPSAodW5zaWduZWQgbG9uZykgb2ZfaW9tYXAobm9kZSwgMCk7CisJUkJVU19JT19SRUFEMzIoYWRkciwgR1BJT19HMl9NSVNDX09GRlNFVCwgJnZhbHVlKTsKKworCWlmIChtb2RlID09IFRTU0lfTU9ERV9FTikgeworCQl2YWx1ZSAmPSBHUElPX0cyX01JU0NfTUFTSzsKKwkJUkJVU19JT19XUklURTMyKGFkZHIsIEdQSU9fRzJfTUlTQ19PRkZTRVQsIHZhbHVlKTsKKwl9CisKKwlSQlVTX0lPX1JFQUQzMihhZGRyLCBHUElPX0cyX01JU0NfT0ZGU0VULCAmdmFsdWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CityYnVzX3BhX2xhbl9jb25maWcoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgdW5zaWduZWQgaW50IGRldmZuLCB1bnNpZ25lZCBjaGFyIG1vZGUpCit7CisJc3RydWN0IHBpbmN0cmwgKnA7CisJc3RydWN0IHBpbmN0cmxfc3RhdGUgKnM7CisJdW5zaWduZWQgY2hhciBzdGF0ZVszMl0gPSAiIjsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChtb2RlICE9IElQQV9FTE5BX01PREUgJiYgbW9kZSAhPSBFUEFfRUxOQV9NT0RFKQorCQlyZXR1cm4gcmV0OworCisJcCA9IGRldm1fcGluY3RybF9nZXQoJnBkZXYtPmRldik7CisKKwlpZiAoIXApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXMoKTogY2FuJ3QgZ2V0IHBpbmN0cmwgYnkgZGV2OiVwXG4iLCBfX2Z1bmNfXywgJnBkZXYtPmRldik7CisJCXJldHVybiByZXQ7CisJfQorCisJc3RybmNweShzdGF0ZSwgInN0YXRlX2VwYSIsIHNpemVvZigic3RhdGVfZXBhIikpOworCisJcyA9IHBpbmN0cmxfbG9va3VwX3N0YXRlKHAsIHN0YXRlKTsKKworCWlmICghcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlcygpOiBjYW4ndCBmaW5kIHBpbmN0cmwgc3RhdGU6ICVzXG4iLCBfX2Z1bmNfXywgc3RhdGUpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHBpbmN0cmxfc2VsZWN0X3N0YXRlKHAsIHMpOworCisJaWYgKHJldCA8IDApCisJCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzKCk6IHBpbmN0cmwgc2VsZWN0IHRvICVzIGZhaWwhLCByZXQ9JWRcbiIsIF9fZnVuY19fLCBzdGF0ZSwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkCityYnVzX2luaXRfY29uZmlnKHN0cnVjdCByYnVzX2RldiAqcmJ1cykKK3sKKwlyYnVzX2NvbmZfc3BhY2VbUkJVU19WRU5ET1JfSURfT0ZGU0VUXSA9IHJidXMtPnZlbmRfaWQgJiAweGZmOworCXJidXNfY29uZl9zcGFjZVtSQlVTX1ZFTkRPUl9JRF9PRkZTRVQgKyAxXSA9IChyYnVzLT52ZW5kX2lkID4+IDgpICYgMHhmZjsKKwlyYnVzX2NvbmZfc3BhY2VbUkJVU19DSElQX0lEX09GRlNFVF0gPSByYnVzLT5jaGlwX2lkICYgMHhmZjsKKwlyYnVzX2NvbmZfc3BhY2VbUkJVU19DSElQX0lEX09GRlNFVCArIDFdID0gKHJidXMtPmNoaXBfaWQgPj4gOCkgJiAweGZmOworCXJidXNfY29uZl9zcGFjZVtSQlVTX0JBUl9PRkZTRVQgKyAzXSA9IChyYnVzLT5iYXNlX2FkZHIgPj4gMjQpICYgMHhmZjsKKwlyYnVzX2NvbmZfc3BhY2VbUkJVU19CQVJfT0ZGU0VUICsgMl0gPSAocmJ1cy0+YmFzZV9hZGRyID4+IDE2KSAmIDB4ZmY7CisJcmJ1c19jb25mX3NwYWNlW1JCVVNfQkFSX09GRlNFVCArIDFdID0gKHJidXMtPmJhc2VfYWRkciA+PiA4KSAmIDB4ZmY7Cit9CisKK3N0YXRpYyBpbnQKK3JidXNfcmVhZF9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUsCisJCQlpbnQgc2l6ZSwgdTMyICp2YWx1ZSkKK3sKKwl1MzIgKmNyOworCisJaWYod2hlcmUgPj0gc2l6ZW9mKHJidXNfY29uZl9zcGFjZSkpCisJCXJldHVybiBQQ0lCSU9TX0JVRkZFUl9UT09fU01BTEw7CisKKwljciA9ICh1MzIgKikgJnJidXNfY29uZl9zcGFjZVt3aGVyZV07CisKKwlpZihkZXZmbiA9PSAwKQorCQkqdmFsdWUgPSAqY3I7CisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworc3RhdGljIGludAorcmJ1c193cml0ZV9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUsCisJCQlpbnQgc2l6ZSwgdTMyIHZhbHVlKQoreworCWludCBpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBidXMtPnN5c2RhdGE7CisKKwlpZiAoZGV2Zm4gIT0gMCkKKwkJZ290byBlbmQ7CisKKwlmb3IgKGkgPSAwIDsgaSA8IHNpemUgOyBpKyspIHsKKwkJcmJ1c19jb25mX3NwYWNlW3doZXJlICsgaV0gPSAodmFsdWUgPDwgKGkgKiA4KSkgJiAweGZmOworCX0KKwkvKmhhbmRsZSB2ZW5kb3Igc3BlY2lmaWMgYWN0aW9uKi8KKwlzd2l0Y2god2hlcmUpIHsKKwljYXNlIFJCVVNfVFNTSV9DVFJMX09GRlNFVDoKKwkJcmJ1c190c3NpX2NvbmZpZyhwZGV2LCAodmFsdWUgJiBSQlVTX1RTU0lfQ1RSTF9NQVNLKSk7CisJYnJlYWs7CisJY2FzZSBSQlVTX1BBX0xOQV9DVFJMX09GRlNFVDoKKwkJcmJ1c19wYV9sYW5fY29uZmlnKHBkZXYsIGRldmZuLCAodmFsdWUgJiBSQlVTX1BBX0xOQV9DVFJMX01BU0spKTsKKwlicmVhazsKKwlkZWZhdWx0OgorCWJyZWFrOworCX0KK2VuZDoKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCisKK3N0cnVjdCBwY2lfb3BzIHJidXNfb3BzID0geworCS5yZWFkICA9IHJidXNfcmVhZF9jb25maWcsCisJLndyaXRlID0gcmJ1c193cml0ZV9jb25maWcsCit9OworCitzdGF0aWMgaW50IHJidXNfYWRkX3BvcnQoc3RydWN0IHJidXNfZGV2ICpyYnVzLAorCQkJCSAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHBjaV9idXMgKmJ1czsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpOworCisJYnVzID0gcGNpX3NjYW5fcm9vdF9idXMoJnBkZXYtPmRldiwgMCwgJnJidXNfb3BzLAorCQkJCXBkZXYsICZyYnVzLT5yZXNvdXJjZXMpOworCisJaWYgKCFidXMpCisJCXJldHVybiAtRU5PTUVNOworCisJcGNpX2J1c19hZGRfZGV2aWNlcyhidXMpOworCisJcGNpID0gcGNpX3NjYW5fc2luZ2xlX2RldmljZShidXMsIDApOworCisJaWYgKHBjaSkgeworCQkvKnJlLWFzc2lnbiBodyByZXNvdXJjZSovCisJCXBjaS0+aXJxID0gcmJ1cy0+aXJxOworCQlwY2ktPnJlc291cmNlWzBdLnN0YXJ0ID0gcmJ1cy0+cmVzLT5zdGFydDsKKwkJcGNpLT5yZXNvdXJjZVswXS5lbmQgPSByYnVzLT5yZXMtPmVuZDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmJ1c19hZGRfcmVzKHN0cnVjdCByYnVzX2RldiAqcmJ1cykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByYnVzLT5kZXY7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCByZXNvdXJjZSBidXNfcmFuZ2U7CisKKwlJTklUX0xJU1RfSEVBRCgmcmJ1cy0+cmVzb3VyY2VzKTsKKwkvKnJlc291cmNlIGFsbG9jYXRlKi8KKwlyYnVzLT5yZXMgID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyYnVzLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCXJidXMtPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBpbnQpcmJ1cy0+cmVzLT5zdGFydDsKKwlpZiAocmJ1cy0+Y2hpcF9pZCA9PSAweDc2MjkpCisJCWRldl9zZWNvbmRfaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAxKTsKKwllbHNlIGlmIChyYnVzLT5jaGlwX2lkID09IDB4Nzk4NikgeworCQltdWx0aV9pbnRyXzJuZCA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMSk7CisJCW11bHRpX2ludHJfM3JkID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAyKTsKKwkJbXVsdGlfaW50cl80dGggPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDMpOworCX0KKworCXBjaV9hZGRfcmVzb3VyY2UoJnJidXMtPnJlc291cmNlcywgcmJ1cy0+cmVzKTsKKworCWJ1c19yYW5nZSA9IChzdHJ1Y3QgcmVzb3VyY2UpIHsKKwkJLm5hbWUJPSAicmJ1c19yYW5nZSIsCisJCS5zdGFydAk9IDAsCisJCS5lbmQJPSAweGZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVUywKKwl9OworCisJcGNpX2FkZF9yZXNvdXJjZSgmcmJ1cy0+cmVzb3VyY2VzLCAmYnVzX3JhbmdlKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyoKKyovCitzdGF0aWMgaW50IHJidXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBOVUxMOworCXN0cnVjdCByYnVzX2RldiAqcmJ1czsKKworCW5vZGUgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCBPRl9SQlVTX05BTUUpOworCWlmICghbm9kZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyYnVzID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqcmJ1cyksIEdGUF9LRVJORUwpOworCWlmICghcmJ1cykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyYnVzLT5kZXYgPSAmcGRldi0+ZGV2OworCisJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyX2luZGV4KG5vZGUsICJjaGlwX2lkIiwgMCwgJnJidXMtPmNoaXBfaWQpKSB7CisJCXJidXMtPmNoaXBfaWQgPSBSQlVTX0RFRkFVTFRfQ0hJUF9JRDsKKwl9CisKKwlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzJfaW5kZXgobm9kZSwgInZlbmRfaWQiLCAwLCAmcmJ1cy0+dmVuZF9pZCkpIHsKKwkJcmJ1cy0+dmVuZF9pZCA9IFJCVVNfREVGQVVMVF9WRU5EX0lEOworCX0KKwkvKnNldCBwcml2X2RhdGEgdG8gcGRldiovCisJc25wcmludGYocmJ1cy0+bmFtZSxzaXplb2YocmJ1cy0+bmFtZSksIm1lZGlhdGVrLXJidXMiKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCByYnVzKTsKKwlyYnVzX2FkZF9yZXMocmJ1cyk7CisJLyppbml0IGNvbmZpZywgbmVlZCBydW4gYmVmb3JlIGFkZCBwb3J0Ki8KKwlyYnVzX2luaXRfY29uZmlnKHJidXMpOworCS8qYWRkIHBjaSBidXMgJiBkZXZpY2UqLworCXJidXNfYWRkX3BvcnQocmJ1cywgcGRldik7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKKy8qCisqCisqLworc3RhdGljIGludCByYnVzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByYnVzX2RldiAqcmJ1cyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWRldl9lcnIoJnBkZXYtPmRldiwgInJlbW92ZSByYnVzIG5hbWU6ICVzXG4iLCByYnVzLT5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworCisvKgorKiBnbG9iYWwgcmVzb3VyY2UgcHJlcGFyaW5nCisqLworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcmJ1c19kcml2ZXIgPSB7CisJLnByb2JlICA9IHJidXNfcHJvYmUsCisJLnJlbW92ZSA9IHJidXNfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lICAgPSByYnVzX3N0cmluZywKKwkJLm93bmVyICA9IFRISVNfTU9EVUxFLAorI2lmZGVmIENPTkZJR19PRgorCQkub2ZfbWF0Y2hfdGFibGUgPSByYnVzX29mX2lkcywKKyNlbmRpZiAvKkNPTkZJR19PRiovCisJfSwKK307CisKKy8qIFBDSWUgZHJpdmVyIGRvZXMgbm90IGFsbG93IG1vZHVsZSB1bmxvYWQgKi8KK3N0YXRpYyBpbnQgX19pbml0IHJidXNfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJnJidXNfZHJpdmVyLCByYnVzX3Byb2JlKTsKK30KKworc3Vic3lzX2luaXRjYWxsX3N5bmMocmJ1c19pbml0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJNZWRpYXRlayBSQlVTIGhvc3QgY29udHJvbGxlciBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtbWVkaWF0ZWstZ2VuMy5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtbWVkaWF0ZWstZ2VuMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMDFmZGUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1tZWRpYXRlay1nZW4zLmMKQEAgLTAsMCArMSwxMTQ3IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIE1lZGlhVGVrIFBDSWUgaG9zdCBjb250cm9sbGVyIGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjAgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBKaWFuanVuIFdhbmcgPGppYW5qdW4ud2FuZ0BtZWRpYXRlay5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaXJxY2hpcC9jaGFpbmVkX2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycWRvbWFpbi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21zaS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9kb21haW4uaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvcmVzZXQuaD4KKworI2luY2x1ZGUgIi4uL3BjaS5oIgorCisjZGVmaW5lIFBDSUVfU0VUVElOR19SRUcJCTB4ODAKKyNkZWZpbmUgUENJRV9QQ0lfSURTXzEJCQkweDljCisjZGVmaW5lIFBDSV9DTEFTUyhjbGFzcykJCShjbGFzcyA8PCA4KQorI2RlZmluZSBQQ0lFX1JDX01PREUJCQlCSVQoMCkKKworI2RlZmluZSBQQ0lFX0NGR05VTV9SRUcJCQkweDE0MAorI2RlZmluZSBQQ0lFX0NGR19ERVZGTihkZXZmbikJCSgoZGV2Zm4pICYgR0VOTUFTSyg3LCAwKSkKKyNkZWZpbmUgUENJRV9DRkdfQlVTKGJ1cykJCSgoKGJ1cykgPDwgOCkgJiBHRU5NQVNLKDE1LCA4KSkKKyNkZWZpbmUgUENJRV9DRkdfQllURV9FTihieXRlcykJCSgoKGJ5dGVzKSA8PCAxNikgJiBHRU5NQVNLKDE5LCAxNikpCisjZGVmaW5lIFBDSUVfQ0ZHX0ZPUkNFX0JZVEVfRU4JCUJJVCgyMCkKKyNkZWZpbmUgUENJRV9DRkdfT0ZGU0VUX0FERFIJCTB4MTAwMAorI2RlZmluZSBQQ0lFX0NGR19IRUFERVIoYnVzLCBkZXZmbikgXAorCShQQ0lFX0NGR19CVVMoYnVzKSB8IFBDSUVfQ0ZHX0RFVkZOKGRldmZuKSkKKworI2RlZmluZSBQQ0lFX1JTVF9DVFJMX1JFRwkJMHgxNDgKKyNkZWZpbmUgUENJRV9NQUNfUlNUQgkJCUJJVCgwKQorI2RlZmluZSBQQ0lFX1BIWV9SU1RCCQkJQklUKDEpCisjZGVmaW5lIFBDSUVfQlJHX1JTVEIJCQlCSVQoMikKKyNkZWZpbmUgUENJRV9QRV9SU1RCCQkJQklUKDMpCisKKyNkZWZpbmUgUENJRV9MVFNTTV9TVEFUVVNfUkVHCQkweDE1MAorI2RlZmluZSBQQ0lFX0xUU1NNX1NUQVRFX01BU0sJCUdFTk1BU0soMjgsIDI0KQorI2RlZmluZSBQQ0lFX0xUU1NNX1NUQVRFKHZhbCkJCSgodmFsICYgUENJRV9MVFNTTV9TVEFURV9NQVNLKSA+PiAyNCkKKyNkZWZpbmUgUENJRV9MVFNTTV9TVEFURV9MMl9JRExFCTB4MTQKKworI2RlZmluZSBQQ0lFX0xJTktfU1RBVFVTX1JFRwkJMHgxNTQKKyNkZWZpbmUgUENJRV9QT1JUX0xJTktVUAkJQklUKDgpCisKKyNkZWZpbmUgUENJRV9NU0lfU0VUX05VTQkJOAorI2RlZmluZSBQQ0lFX01TSV9JUlFTX1BFUl9TRVQJCTMyCisjZGVmaW5lIFBDSUVfTVNJX0lSUVNfTlVNIFwKKwkoUENJRV9NU0lfSVJRU19QRVJfU0VUICogUENJRV9NU0lfU0VUX05VTSkKKworI2RlZmluZSBQQ0lFX0lOVF9FTkFCTEVfUkVHCQkweDE4MAorI2RlZmluZSBQQ0lFX01TSV9FTkFCTEUJCQlHRU5NQVNLKFBDSUVfTVNJX1NFVF9OVU0gKyA4IC0gMSwgOCkKKyNkZWZpbmUgUENJRV9NU0lfU0hJRlQJCQk4CisjZGVmaW5lIFBDSUVfSU5UWF9TSElGVAkJCTI0CisjZGVmaW5lIFBDSUVfSU5UWF9FTkFCTEUgXAorCUdFTk1BU0soUENJRV9JTlRYX1NISUZUICsgUENJX05VTV9JTlRYIC0gMSwgUENJRV9JTlRYX1NISUZUKQorCisjZGVmaW5lIFBDSUVfSU5UX1NUQVRVU19SRUcJCTB4MTg0CisjZGVmaW5lIFBDSUVfTVNJX1NFVF9FTkFCTEVfUkVHCQkweDE5MAorI2RlZmluZSBQQ0lFX01TSV9TRVRfRU5BQkxFCQlHRU5NQVNLKFBDSUVfTVNJX1NFVF9OVU0gLSAxLCAwKQorCisjZGVmaW5lIFBDSUVfTVNJX1NFVF9CQVNFX1JFRwkJMHhjMDAKKyNkZWZpbmUgUENJRV9NU0lfU0VUX09GRlNFVAkJMHgxMAorI2RlZmluZSBQQ0lFX01TSV9TRVRfU1RBVFVTX09GRlNFVAkweDA0CisjZGVmaW5lIFBDSUVfTVNJX1NFVF9FTkFCTEVfT0ZGU0VUCTB4MDgKKyNkZWZpbmUgUENJRV9NU0lfU0VUX0dSUDFfRU5BQkxFX09GRlNFVAkweDBjCisKKyNkZWZpbmUgUENJRV9NU0lfU0VUX0FERFJfSElfQkFTRQkweGM4MAorI2RlZmluZSBQQ0lFX01TSV9TRVRfQUREUl9ISV9PRkZTRVQJMHgwNAorCisjZGVmaW5lIFBDSUVfSUNNRF9QTV9SRUcJCTB4MTk4CisjZGVmaW5lIFBDSUVfVFVSTl9PRkZfTElOSwkJQklUKDQpCisKKyNkZWZpbmUgUENJRV9UUkFOU19UQUJMRV9CQVNFX1JFRwkweDgwMAorI2RlZmluZSBQQ0lFX0FUUl9TUkNfQUREUl9NU0JfT0ZGU0VUCTB4NAorI2RlZmluZSBQQ0lFX0FUUl9UUlNMX0FERFJfTFNCX09GRlNFVAkweDgKKyNkZWZpbmUgUENJRV9BVFJfVFJTTF9BRERSX01TQl9PRkZTRVQJMHhjCisjZGVmaW5lIFBDSUVfQVRSX1RSU0xfUEFSQU1fT0ZGU0VUCTB4MTAKKyNkZWZpbmUgUENJRV9BVFJfVExCX1NFVF9PRkZTRVQJCTB4MjAKKworI2RlZmluZSBQQ0lFX01BWF9UUkFOU19UQUJMRVMJCTgKKyNkZWZpbmUgUENJRV9BVFJfRU4JCQlCSVQoMCkKKyNkZWZpbmUgUENJRV9BVFJfU0laRShzaXplKSBcCisJKCgoKChzaXplKSAtIDEpIDw8IDEpICYgR0VOTUFTSyg2LCAxKSkgfCBQQ0lFX0FUUl9FTikKKyNkZWZpbmUgUENJRV9BVFJfSUQoaWQpCQkJKChpZCkgJiBHRU5NQVNLKDMsIDApKQorI2RlZmluZSBQQ0lFX0FUUl9UWVBFX01FTQkJUENJRV9BVFJfSUQoMCkKKyNkZWZpbmUgUENJRV9BVFJfVFlQRV9JTwkJUENJRV9BVFJfSUQoMSkKKyNkZWZpbmUgUENJRV9BVFJfVExQX1RZUEUodHlwZSkJCSgoKHR5cGUpIDw8IDE2KSAmIEdFTk1BU0soMTgsIDE2KSkKKyNkZWZpbmUgUENJRV9BVFJfVExQX1RZUEVfTUVNCQlQQ0lFX0FUUl9UTFBfVFlQRSgwKQorI2RlZmluZSBQQ0lFX0FUUl9UTFBfVFlQRV9JTwkJUENJRV9BVFJfVExQX1RZUEUoMikKKworLyoqCisgKiBzdHJ1Y3QgbXRrX21zaV9zZXQgLSBNU0kgaW5mb3JtYXRpb24gZm9yIGVhY2ggc2V0CisgKiBAYmFzZTogSU8gbWFwcGVkIHJlZ2lzdGVyIGJhc2UKKyAqIEBtc2dfYWRkcjogTVNJIG1lc3NhZ2UgYWRkcmVzcworICogQHNhdmVkX2lycV9zdGF0ZTogSVJRIGVuYWJsZSBzdGF0ZSBzYXZlZCBhdCBzdXNwZW5kIHRpbWUKKyAqLworc3RydWN0IG10a19tc2lfc2V0IHsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJcGh5c19hZGRyX3QgbXNnX2FkZHI7CisJdTMyIHNhdmVkX2lycV9zdGF0ZTsKK307CisKKy8qKgorICogc3RydWN0IG10a19wY2llX3BvcnQgLSBQQ0llIHBvcnQgaW5mb3JtYXRpb24KKyAqIEBkZXY6IHBvaW50ZXIgdG8gUENJZSBkZXZpY2UKKyAqIEBiYXNlOiBJTyBtYXBwZWQgcmVnaXN0ZXIgYmFzZQorICogQHJlZ19iYXNlOiBwaHlzaWNhbCByZWdpc3RlciBiYXNlCisgKiBAbWFjX3Jlc2V0OiBNQUMgcmVzZXQgY29udHJvbAorICogQHBoeV9yZXNldDogUEhZIHJlc2V0IGNvbnRyb2wKKyAqIEBwaHk6IFBIWSBjb250cm9sbGVyIGJsb2NrCisgKiBAY2xrczogUENJZSBjbG9ja3MKKyAqIEBudW1fY2xrczogUENJZSBjbG9ja3MgY291bnQgZm9yIHRoaXMgcG9ydAorICogQGlycTogUENJZSBjb250cm9sbGVyIGludGVycnVwdCBudW1iZXIKKyAqIEBzYXZlZF9pcnFfc3RhdGU6IElSUSBlbmFibGUgc3RhdGUgc2F2ZWQgYXQgc3VzcGVuZCB0aW1lCisgKiBAaXJxX2xvY2s6IGxvY2sgcHJvdGVjdGluZyBJUlEgcmVnaXN0ZXIgYWNjZXNzCisgKiBAaW50eF9kb21haW46IGxlZ2FjeSBJTlR4IElSUSBkb21haW4KKyAqIEBtc2lfZG9tYWluOiBNU0kgSVJRIGRvbWFpbgorICogQG1zaV9ib3R0b21fZG9tYWluOiBNU0kgSVJRIGJvdHRvbSBkb21haW4KKyAqIEBtc2lfc2V0czogTVNJIHNldHMgaW5mb3JtYXRpb24KKyAqIEBsb2NrOiBsb2NrIHByb3RlY3RpbmcgSVJRIGJpdCBtYXAKKyAqIEBtc2lfaXJxX2luX3VzZTogYml0IG1hcCBmb3IgYXNzaWduZWQgTVNJIElSUQorICovCitzdHJ1Y3QgbXRrX3BjaWVfcG9ydCB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXZvaWQgX19pb21lbSAqYmFzZTsKKwlwaHlzX2FkZHJfdCByZWdfYmFzZTsKKwlzdHJ1Y3QgcmVzZXRfY29udHJvbCAqbWFjX3Jlc2V0OworCXN0cnVjdCByZXNldF9jb250cm9sICpwaHlfcmVzZXQ7CisJc3RydWN0IHBoeSAqcGh5OworCXN0cnVjdCBjbGtfYnVsa19kYXRhICpjbGtzOworCWludCBudW1fY2xrczsKKworCWludCBpcnE7CisJaW50IGRpcmVjdF9tc2lfZW5hYmxlOworCWludCBkaXJlY3RfbXNpW1BDSUVfTVNJX0lSUVNfUEVSX1NFVF07CisJdTMyIHNhdmVkX2lycV9zdGF0ZTsKKwlyYXdfc3BpbmxvY2tfdCBpcnFfbG9jazsKKwlzdHJ1Y3QgaXJxX2RvbWFpbiAqaW50eF9kb21haW47CisJc3RydWN0IGlycV9kb21haW4gKm1zaV9kb21haW47CisJc3RydWN0IGlycV9kb21haW4gKm1zaV9ib3R0b21fZG9tYWluOworCXN0cnVjdCBtdGtfbXNpX3NldCBtc2lfc2V0c1tQQ0lFX01TSV9TRVRfTlVNXTsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKwlERUNMQVJFX0JJVE1BUChtc2lfaXJxX2luX3VzZSwgUENJRV9NU0lfSVJRU19OVU0pOworfTsKKworLyoqCisgKiBtdGtfcGNpZV9jb25maWdfdGxwX2hlYWRlcigpIC0gQ29uZmlndXJlIGEgY29uZmlndXJhdGlvbiBUTFAgaGVhZGVyCisgKiBAYnVzOiBQQ0kgYnVzIHRvIHF1ZXJ5CisgKiBAZGV2Zm46IGRldmljZS9mdW5jdGlvbiBudW1iZXIKKyAqIEB3aGVyZTogb2Zmc2V0IGluIGNvbmZpZyBzcGFjZQorICogQHNpemU6IGRhdGEgc2l6ZSBpbiBUTFAgaGVhZGVyCisgKgorICogU2V0IGJ5dGUgZW5hYmxlIGZpZWxkIGFuZCBkZXZpY2UgaW5mb3JtYXRpb24gaW4gY29uZmlndXJhdGlvbiBUTFAgaGVhZGVyLgorICovCitzdGF0aWMgdm9pZCBtdGtfcGNpZV9jb25maWdfdGxwX2hlYWRlcihzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCisJCQkJCWludCB3aGVyZSwgaW50IHNpemUpCit7CisJc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBidXMtPnN5c2RhdGE7CisJaW50IGJ5dGVzOworCXUzMiB2YWw7CisKKwlieXRlcyA9IChHRU5NQVNLKHNpemUgLSAxLCAwKSAmIDB4ZikgPDwgKHdoZXJlICYgMHgzKTsKKworCXZhbCA9IFBDSUVfQ0ZHX0ZPUkNFX0JZVEVfRU4gfCBQQ0lFX0NGR19CWVRFX0VOKGJ5dGVzKSB8CisJICAgICAgUENJRV9DRkdfSEVBREVSKGJ1cy0+bnVtYmVyLCBkZXZmbik7CisKKwl3cml0ZWxfcmVsYXhlZCh2YWwsIHBvcnQtPmJhc2UgKyBQQ0lFX0NGR05VTV9SRUcpOworfQorCitzdGF0aWMgdm9pZCBfX2lvbWVtICptdGtfcGNpZV9tYXBfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKKwkJCQkgICAgICBpbnQgd2hlcmUpCit7CisJc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBidXMtPnN5c2RhdGE7CisKKwlyZXR1cm4gcG9ydC0+YmFzZSArIFBDSUVfQ0ZHX09GRlNFVF9BRERSICsgd2hlcmU7Cit9CisKK3N0YXRpYyBpbnQgbXRrX3BjaWVfY29uZmlnX3JlYWQoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCQkJCWludCB3aGVyZSwgaW50IHNpemUsIHUzMiAqdmFsKQoreworCW10a19wY2llX2NvbmZpZ190bHBfaGVhZGVyKGJ1cywgZGV2Zm4sIHdoZXJlLCBzaXplKTsKKworCXJldHVybiBwY2lfZ2VuZXJpY19jb25maWdfcmVhZDMyKGJ1cywgZGV2Zm4sIHdoZXJlLCBzaXplLCB2YWwpOworfQorCitzdGF0aWMgaW50IG10a19wY2llX2NvbmZpZ193cml0ZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCisJCQkJIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiB2YWwpCit7CisJbXRrX3BjaWVfY29uZmlnX3RscF9oZWFkZXIoYnVzLCBkZXZmbiwgd2hlcmUsIHNpemUpOworCisJaWYgKHNpemUgPD0gMikKKwkJdmFsIDw8PSAod2hlcmUgJiAweDMpICogODsKKworCXJldHVybiBwY2lfZ2VuZXJpY19jb25maWdfd3JpdGUzMihidXMsIGRldmZuLCB3aGVyZSwgNCwgdmFsKTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfb3BzIG10a19wY2llX29wcyA9IHsKKwkubWFwX2J1cyA9IG10a19wY2llX21hcF9idXMsCisJLnJlYWQgID0gbXRrX3BjaWVfY29uZmlnX3JlYWQsCisJLndyaXRlID0gbXRrX3BjaWVfY29uZmlnX3dyaXRlLAorfTsKKworc3RhdGljIGludCBtdGtfcGNpZV9zZXRfdHJhbnNfdGFibGUoc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQsCisJCQkJICAgIHJlc291cmNlX3NpemVfdCBjcHVfYWRkciwKKwkJCQkgICAgcmVzb3VyY2Vfc2l6ZV90IHBjaV9hZGRyLAorCQkJCSAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyB0eXBlLCBpbnQgbnVtKQoreworCXZvaWQgX19pb21lbSAqdGFibGU7CisJdTMyIHZhbDsKKworCWlmIChudW0gPj0gUENJRV9NQVhfVFJBTlNfVEFCTEVTKSB7CisJCWRldl9lcnIocG9ydC0+ZGV2LCAibm90IGVub3VnaCB0cmFuc2xhdGUgdGFibGUgZm9yIGFkZHI6ICUjbGx4LCBsaW1pdGVkIHRvIFslZF1cbiIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKWNwdV9hZGRyLCBQQ0lFX01BWF9UUkFOU19UQUJMRVMpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwl0YWJsZSA9IHBvcnQtPmJhc2UgKyBQQ0lFX1RSQU5TX1RBQkxFX0JBU0VfUkVHICsKKwkJbnVtICogUENJRV9BVFJfVExCX1NFVF9PRkZTRVQ7CisKKwl3cml0ZWxfcmVsYXhlZChsb3dlcl8zMl9iaXRzKGNwdV9hZGRyKSB8IFBDSUVfQVRSX1NJWkUoZmxzKHNpemUpIC0gMSksCisJCSAgICAgICB0YWJsZSk7CisJd3JpdGVsX3JlbGF4ZWQodXBwZXJfMzJfYml0cyhjcHVfYWRkciksCisJCSAgICAgICB0YWJsZSArIFBDSUVfQVRSX1NSQ19BRERSX01TQl9PRkZTRVQpOworCXdyaXRlbF9yZWxheGVkKGxvd2VyXzMyX2JpdHMocGNpX2FkZHIpLAorCQkgICAgICAgdGFibGUgKyBQQ0lFX0FUUl9UUlNMX0FERFJfTFNCX09GRlNFVCk7CisJd3JpdGVsX3JlbGF4ZWQodXBwZXJfMzJfYml0cyhwY2lfYWRkciksCisJCSAgICAgICB0YWJsZSArIFBDSUVfQVRSX1RSU0xfQUREUl9NU0JfT0ZGU0VUKTsKKworCWlmICh0eXBlID09IElPUkVTT1VSQ0VfSU8pCisJCXZhbCA9IFBDSUVfQVRSX1RZUEVfSU8gfCBQQ0lFX0FUUl9UTFBfVFlQRV9JTzsKKwllbHNlCisJCXZhbCA9IFBDSUVfQVRSX1RZUEVfTUVNIHwgUENJRV9BVFJfVExQX1RZUEVfTUVNOworCisJd3JpdGVsX3JlbGF4ZWQodmFsLCB0YWJsZSArIFBDSUVfQVRSX1RSU0xfUEFSQU1fT0ZGU0VUKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtdGtfcGNpZV9lbmFibGVfbXNpKHN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0KQoreworCWludCBpOworCXUzMiB2YWw7CisKKwlmb3IgKGkgPSAwOyBpIDwgUENJRV9NU0lfU0VUX05VTTsgaSsrKSB7CisJCXN0cnVjdCBtdGtfbXNpX3NldCAqbXNpX3NldCA9ICZwb3J0LT5tc2lfc2V0c1tpXTsKKworCQltc2lfc2V0LT5iYXNlID0gcG9ydC0+YmFzZSArIFBDSUVfTVNJX1NFVF9CQVNFX1JFRyArCisJCQkJaSAqIFBDSUVfTVNJX1NFVF9PRkZTRVQ7CisJCW1zaV9zZXQtPm1zZ19hZGRyID0gcG9ydC0+cmVnX2Jhc2UgKyBQQ0lFX01TSV9TRVRfQkFTRV9SRUcgKworCQkJCSAgICBpICogUENJRV9NU0lfU0VUX09GRlNFVDsKKworCQkvKiBDb25maWd1cmUgdGhlIE1TSSBjYXB0dXJlIGFkZHJlc3MgKi8KKwkJd3JpdGVsX3JlbGF4ZWQobG93ZXJfMzJfYml0cyhtc2lfc2V0LT5tc2dfYWRkciksIG1zaV9zZXQtPmJhc2UpOworCQl3cml0ZWxfcmVsYXhlZCh1cHBlcl8zMl9iaXRzKG1zaV9zZXQtPm1zZ19hZGRyKSwKKwkJCSAgICAgICBwb3J0LT5iYXNlICsgUENJRV9NU0lfU0VUX0FERFJfSElfQkFTRSArCisJCQkgICAgICAgaSAqIFBDSUVfTVNJX1NFVF9BRERSX0hJX09GRlNFVCk7CisJfQorCisJdmFsID0gcmVhZGxfcmVsYXhlZChwb3J0LT5iYXNlICsgUENJRV9NU0lfU0VUX0VOQUJMRV9SRUcpOworCXZhbCB8PSBQQ0lFX01TSV9TRVRfRU5BQkxFOworCXdyaXRlbF9yZWxheGVkKHZhbCwgcG9ydC0+YmFzZSArIFBDSUVfTVNJX1NFVF9FTkFCTEVfUkVHKTsKKworCWlmICghcG9ydC0+ZGlyZWN0X21zaV9lbmFibGUpIHsKKwkJdmFsID0gcmVhZGxfcmVsYXhlZChwb3J0LT5iYXNlICsgUENJRV9JTlRfRU5BQkxFX1JFRyk7CisJCXZhbCB8PSBQQ0lFX01TSV9FTkFCTEU7CisJCXdyaXRlbF9yZWxheGVkKHZhbCwgcG9ydC0+YmFzZSArIFBDSUVfSU5UX0VOQUJMRV9SRUcpOworCX0KK30KKworc3RhdGljIGludCBtdGtfcGNpZV9zdGFydHVwX3BvcnQoc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHJlc291cmNlX2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3QgcGNpX2hvc3RfYnJpZGdlICpob3N0ID0gcGNpX2hvc3RfYnJpZGdlX2Zyb21fcHJpdihwb3J0KTsKKwl1bnNpZ25lZCBpbnQgdGFibGVfaW5kZXggPSAwOworCWludCBlcnI7CisJdTMyIHZhbDsKKworCS8qIFNldCBhcyBSQyBtb2RlICovCisJdmFsID0gcmVhZGxfcmVsYXhlZChwb3J0LT5iYXNlICsgUENJRV9TRVRUSU5HX1JFRyk7CisJdmFsIHw9IFBDSUVfUkNfTU9ERTsKKwl3cml0ZWxfcmVsYXhlZCh2YWwsIHBvcnQtPmJhc2UgKyBQQ0lFX1NFVFRJTkdfUkVHKTsKKworCS8qIFNldCBjbGFzcyBjb2RlICovCisJdmFsID0gcmVhZGxfcmVsYXhlZChwb3J0LT5iYXNlICsgUENJRV9QQ0lfSURTXzEpOworCXZhbCAmPSB+R0VOTUFTSygzMSwgOCk7CisJdmFsIHw9IFBDSV9DTEFTUyhQQ0lfQ0xBU1NfQlJJREdFX1BDSSA8PCA4KTsKKwl3cml0ZWxfcmVsYXhlZCh2YWwsIHBvcnQtPmJhc2UgKyBQQ0lFX1BDSV9JRFNfMSk7CisKKwkvKiBNYXNrIGFsbCBJTlR4IGludGVycnVwdHMgKi8KKwl2YWwgPSByZWFkbF9yZWxheGVkKHBvcnQtPmJhc2UgKyBQQ0lFX0lOVF9FTkFCTEVfUkVHKTsKKwl2YWwgJj0gflBDSUVfSU5UWF9FTkFCTEU7CisJd3JpdGVsX3JlbGF4ZWQodmFsLCBwb3J0LT5iYXNlICsgUENJRV9JTlRfRU5BQkxFX1JFRyk7CisKKwkvKiBBc3NlcnQgYWxsIHJlc2V0IHNpZ25hbHMgKi8KKwl2YWwgPSByZWFkbF9yZWxheGVkKHBvcnQtPmJhc2UgKyBQQ0lFX1JTVF9DVFJMX1JFRyk7CisJdmFsIHw9IFBDSUVfTUFDX1JTVEIgfCBQQ0lFX1BIWV9SU1RCIHwgUENJRV9CUkdfUlNUQiB8IFBDSUVfUEVfUlNUQjsKKwl3cml0ZWxfcmVsYXhlZCh2YWwsIHBvcnQtPmJhc2UgKyBQQ0lFX1JTVF9DVFJMX1JFRyk7CisKKwkvKgorCSAqIERlc2NyaWJlZCBpbiBQQ0llIENFTSBzcGVjaWZpY2F0aW9uIHNldGN0aW9ucyAyLjIgKFBFUlNUIyBTaWduYWwpCisJICogYW5kIDIuMi4xIChJbml0aWFsIFBvd2VyLVVwIChHMyB0byBTMCkpLgorCSAqIFRoZSBkZWFzc2VydGlvbiBvZiBQRVJTVCMgc2hvdWxkIGJlIGRlbGF5ZWQgMTAwbXMgKFRQVlBFUkwpCisJICogZm9yIHRoZSBwb3dlciBhbmQgY2xvY2sgdG8gYmVjb21lIHN0YWJsZS4KKwkgKi8KKwltc2xlZXAoMTAwKTsKKworCS8qIERlLWFzc2VydCByZXNldCBzaWduYWxzICovCisJdmFsICY9IH4oUENJRV9NQUNfUlNUQiB8IFBDSUVfUEhZX1JTVEIgfCBQQ0lFX0JSR19SU1RCIHwgUENJRV9QRV9SU1RCKTsKKwl3cml0ZWxfcmVsYXhlZCh2YWwsIHBvcnQtPmJhc2UgKyBQQ0lFX1JTVF9DVFJMX1JFRyk7CisKKwkvKiBDaGVjayBpZiB0aGUgbGluayBpcyB1cCBvciBub3QgKi8KKwllcnIgPSByZWFkbF9wb2xsX3RpbWVvdXQocG9ydC0+YmFzZSArIFBDSUVfTElOS19TVEFUVVNfUkVHLCB2YWwsCisJCQkJICEhKHZhbCAmIFBDSUVfUE9SVF9MSU5LVVApLCAyMCwKKwkJCQkgUENJX1BNX0QzQ09MRF9XQUlUICogVVNFQ19QRVJfTVNFQyk7CisJaWYgKGVycikgeworCQl2YWwgPSByZWFkbF9yZWxheGVkKHBvcnQtPmJhc2UgKyBQQ0lFX0xUU1NNX1NUQVRVU19SRUcpOworCQlkZXZfZXJyKHBvcnQtPmRldiwgIlBDSWUgbGluayBkb3duLCBsdHNzbSByZWcgdmFsOiAlI3hcbiIsIHZhbCk7CisJCXJldHVybiBlcnI7CisJfQorCisJbXRrX3BjaWVfZW5hYmxlX21zaShwb3J0KTsKKworCS8qIFNldCBQQ0llIHRyYW5zbGF0aW9uIHdpbmRvd3MgKi8KKwlyZXNvdXJjZV9saXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmaG9zdC0+d2luZG93cykgeworCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IGVudHJ5LT5yZXM7CisJCXVuc2lnbmVkIGxvbmcgdHlwZSA9IHJlc291cmNlX3R5cGUocmVzKTsKKwkJcmVzb3VyY2Vfc2l6ZV90IGNwdV9hZGRyOworCQlyZXNvdXJjZV9zaXplX3QgcGNpX2FkZHI7CisJCXJlc291cmNlX3NpemVfdCBzaXplOworCQljb25zdCBjaGFyICpyYW5nZV90eXBlOworCisJCWlmICh0eXBlID09IElPUkVTT1VSQ0VfSU8pIHsKKwkJCWNwdV9hZGRyID0gcGNpX3Bpb190b19hZGRyZXNzKHJlcy0+c3RhcnQpOworCQkJcmFuZ2VfdHlwZSA9ICJJTyI7CisJCX0gZWxzZSBpZiAodHlwZSA9PSBJT1JFU09VUkNFX01FTSkgeworCQkJY3B1X2FkZHIgPSByZXMtPnN0YXJ0OworCQkJcmFuZ2VfdHlwZSA9ICJNRU0iOworCQl9IGVsc2UgeworCQkJY29udGludWU7CisJCX0KKworCQlwY2lfYWRkciA9IHJlcy0+c3RhcnQgLSBlbnRyeS0+b2Zmc2V0OworCQlzaXplID0gcmVzb3VyY2Vfc2l6ZShyZXMpOworCQllcnIgPSBtdGtfcGNpZV9zZXRfdHJhbnNfdGFibGUocG9ydCwgY3B1X2FkZHIsIHBjaV9hZGRyLCBzaXplLAorCQkJCQkgICAgICAgdHlwZSwgdGFibGVfaW5kZXgpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQlkZXZfZGJnKHBvcnQtPmRldiwgInNldCAlcyB0cmFucyB3aW5kb3dbJWRdOiBjcHVfYWRkciA9ICUjbGx4LCBwY2lfYWRkciA9ICUjbGx4LCBzaXplID0gJSNsbHhcbiIsCisJCQlyYW5nZV90eXBlLCB0YWJsZV9pbmRleCwgKHVuc2lnbmVkIGxvbmcgbG9uZyljcHVfYWRkciwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX2FkZHIsICh1bnNpZ25lZCBsb25nIGxvbmcpc2l6ZSk7CisKKwkJdGFibGVfaW5kZXgrKzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfcGNpZV9zZXRfbXNpX2FmZmluaXR5KHN0cnVjdCBpcnFfZGF0YSAqZGF0YSwKKwkJCQkgY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIGJvb2wgZm9yY2UpCit7CisJc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBkYXRhLT5kb21haW4tPmhvc3RfZGF0YTsKKwlzdHJ1Y3QgaXJxX2RhdGEgKnBvcnRfZGF0YTsKKwlzdHJ1Y3QgaXJxX2NoaXAgKnBvcnRfY2hpcDsKKwlpbnQgbXNpX2JpdCwgaXJxLCByZXQ7CisKKwltc2lfYml0ID0gZGF0YS0+aHdpcnEgJSBQQ0lFX01TSV9JUlFTX1BFUl9TRVQ7CisJaXJxID0gcG9ydC0+ZGlyZWN0X21zaVttc2lfYml0XTsKKworCXBvcnRfZGF0YSA9IGlycV9nZXRfaXJxX2RhdGEoaXJxKTsKKwlwb3J0X2NoaXAgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXAocG9ydF9kYXRhKTsKKwlpZiAoIXBvcnRfY2hpcCB8fCAhcG9ydF9jaGlwLT5pcnFfc2V0X2FmZmluaXR5KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IHBvcnRfY2hpcC0+aXJxX3NldF9hZmZpbml0eShwb3J0X2RhdGEsIG1hc2ssIGZvcmNlKTsKKworCWlycV9kYXRhX3VwZGF0ZV9lZmZlY3RpdmVfYWZmaW5pdHkoZGF0YSwgbWFzayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10a19wY2llX3NldF9hZmZpbml0eShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEsCisJCQkJIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBib29sIGZvcmNlKQoreworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgdm9pZCBtdGtfcGNpZV9tc2lfaXJxX21hc2soc3RydWN0IGlycV9kYXRhICpkYXRhKQoreworCXBjaV9tc2lfbWFza19pcnEoZGF0YSk7CisJaXJxX2NoaXBfbWFza19wYXJlbnQoZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19wY2llX21zaV9pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKK3sKKwlwY2lfbXNpX3VubWFza19pcnEoZGF0YSk7CisJaXJxX2NoaXBfdW5tYXNrX3BhcmVudChkYXRhKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtdGtfbXNpX2lycV9jaGlwID0geworCS5pcnFfYWNrID0gaXJxX2NoaXBfYWNrX3BhcmVudCwKKwkuaXJxX21hc2sgPSBtdGtfcGNpZV9tc2lfaXJxX21hc2ssCisJLmlycV91bm1hc2sgPSBtdGtfcGNpZV9tc2lfaXJxX3VubWFzaywKKwkubmFtZSA9ICJNU0kiLAorfTsKKworc3RhdGljIHN0cnVjdCBtc2lfZG9tYWluX2luZm8gbXRrX21zaV9kb21haW5faW5mbyA9IHsKKwkuZmxhZ3MJPSAoTVNJX0ZMQUdfVVNFX0RFRl9ET01fT1BTIHwgTVNJX0ZMQUdfVVNFX0RFRl9DSElQX09QUyB8CisJCSAgIE1TSV9GTEFHX1BDSV9NU0lYIHwgTVNJX0ZMQUdfTVVMVElfUENJX01TSSksCisJLmNoaXAJPSAmbXRrX21zaV9pcnFfY2hpcCwKK307CisKK3N0YXRpYyB2b2lkIG10a19jb21wb3NlX21zaV9tc2coc3RydWN0IGlycV9kYXRhICpkYXRhLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQoreworCXN0cnVjdCBtdGtfbXNpX3NldCAqbXNpX3NldCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOworCXN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0ID0gZGF0YS0+ZG9tYWluLT5ob3N0X2RhdGE7CisJdW5zaWduZWQgbG9uZyBod2lycTsKKworCWh3aXJxID0JZGF0YS0+aHdpcnEgJSBQQ0lFX01TSV9JUlFTX1BFUl9TRVQ7CisKKwltc2ctPmFkZHJlc3NfaGkgPSB1cHBlcl8zMl9iaXRzKG1zaV9zZXQtPm1zZ19hZGRyKTsKKwltc2ctPmFkZHJlc3NfbG8gPSBsb3dlcl8zMl9iaXRzKG1zaV9zZXQtPm1zZ19hZGRyKTsKKwltc2ctPmRhdGEgPSBod2lycTsKKwlkZXZfZGJnKHBvcnQtPmRldiwgIm1zaSMlI2x4IGFkZHJlc3NfaGkgJSN4IGFkZHJlc3NfbG8gJSN4IGRhdGEgJWRcbiIsCisJCWh3aXJxLCBtc2ctPmFkZHJlc3NfaGksIG1zZy0+YWRkcmVzc19sbywgbXNnLT5kYXRhKTsKK30KKworc3RhdGljIHZvaWQgbXRrX21zaV9ib3R0b21faXJxX2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IG10a19tc2lfc2V0ICptc2lfc2V0ID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZGF0YSk7CisJdW5zaWduZWQgbG9uZyBod2lycTsKKworCWh3aXJxID0JZGF0YS0+aHdpcnEgJSBQQ0lFX01TSV9JUlFTX1BFUl9TRVQ7CisKKwl3cml0ZWxfcmVsYXhlZChCSVQoaHdpcnEpLCBtc2lfc2V0LT5iYXNlICsgUENJRV9NU0lfU0VUX1NUQVRVU19PRkZTRVQpOworfQorCitzdGF0aWMgdm9pZCBtdGtfbXNpX2JvdHRvbV9pcnFfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IG10a19tc2lfc2V0ICptc2lfc2V0ID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZGF0YSk7CisJc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBkYXRhLT5kb21haW4tPmhvc3RfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGh3aXJxLCBmbGFnczsKKwl1MzIgdmFsOworCisJaHdpcnEgPQlkYXRhLT5od2lycSAlIFBDSUVfTVNJX0lSUVNfUEVSX1NFVDsKKworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+aXJxX2xvY2ssIGZsYWdzKTsKKwlpZiAocG9ydC0+ZGlyZWN0X21zaV9lbmFibGUpIHsKKwkJdmFsID0gcmVhZGxfcmVsYXhlZChtc2lfc2V0LT5iYXNlICsKKwkJCQkJUENJRV9NU0lfU0VUX0dSUDFfRU5BQkxFX09GRlNFVCk7CisJCXZhbCAmPSB+QklUKGh3aXJxKTsKKwkJd3JpdGVsX3JlbGF4ZWQodmFsLCBtc2lfc2V0LT5iYXNlICsKKwkJCQkJUENJRV9NU0lfU0VUX0dSUDFfRU5BQkxFX09GRlNFVCk7CisJfSBlbHNlIHsKKwkJdmFsID0gcmVhZGxfcmVsYXhlZChtc2lfc2V0LT5iYXNlICsgUENJRV9NU0lfU0VUX0VOQUJMRV9PRkZTRVQpOworCQl2YWwgJj0gfkJJVChod2lycSk7CisJCXdyaXRlbF9yZWxheGVkKHZhbCwgbXNpX3NldC0+YmFzZSArIFBDSUVfTVNJX1NFVF9FTkFCTEVfT0ZGU0VUKTsKKwl9CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmlycV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19tc2lfYm90dG9tX2lycV91bm1hc2soc3RydWN0IGlycV9kYXRhICpkYXRhKQoreworCXN0cnVjdCBtdGtfbXNpX3NldCAqbXNpX3NldCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOworCXN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0ID0gZGF0YS0+ZG9tYWluLT5ob3N0X2RhdGE7CisJdW5zaWduZWQgbG9uZyBod2lycSwgZmxhZ3M7CisJdTMyIHZhbDsKKworCWh3aXJxID0JZGF0YS0+aHdpcnEgJSBQQ0lFX01TSV9JUlFTX1BFUl9TRVQ7CisKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmlycV9sb2NrLCBmbGFncyk7CisJaWYgKHBvcnQtPmRpcmVjdF9tc2lfZW5hYmxlKSB7CisJCXZhbCA9IHJlYWRsX3JlbGF4ZWQobXNpX3NldC0+YmFzZSArCisJCQkJCVBDSUVfTVNJX1NFVF9HUlAxX0VOQUJMRV9PRkZTRVQpOworCQl2YWwgfD0gQklUKGh3aXJxKTsKKwkJd3JpdGVsX3JlbGF4ZWQodmFsLCBtc2lfc2V0LT5iYXNlICsKKwkJCQkJUENJRV9NU0lfU0VUX0dSUDFfRU5BQkxFX09GRlNFVCk7CisJfSBlbHNlIHsKKwkJdmFsID0gcmVhZGxfcmVsYXhlZChtc2lfc2V0LT5iYXNlICsgUENJRV9NU0lfU0VUX0VOQUJMRV9PRkZTRVQpOworCQl2YWwgfD0gQklUKGh3aXJxKTsKKwkJd3JpdGVsX3JlbGF4ZWQodmFsLCBtc2lfc2V0LT5iYXNlICsgUENJRV9NU0lfU0VUX0VOQUJMRV9PRkZTRVQpOworCX0KKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+aXJxX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtdGtfbXNpX2JvdHRvbV9pcnFfY2hpcCA9IHsKKwkuaXJxX2FjawkJPSBtdGtfbXNpX2JvdHRvbV9pcnFfYWNrLAorCS5pcnFfbWFzawkJPSBtdGtfbXNpX2JvdHRvbV9pcnFfbWFzaywKKwkuaXJxX3VubWFzawkJPSBtdGtfbXNpX2JvdHRvbV9pcnFfdW5tYXNrLAorCS5pcnFfY29tcG9zZV9tc2lfbXNnCT0gbXRrX2NvbXBvc2VfbXNpX21zZywKKwkuaXJxX3NldF9hZmZpbml0eQk9IG10a19wY2llX3NldF9hZmZpbml0eSwKKwkubmFtZQkJCT0gIk1TSSIsCit9OworCitzdGF0aWMgaW50IG10a19tc2lfYm90dG9tX2RvbWFpbl9hbGxvYyhzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgdmlycSwgdW5zaWduZWQgaW50IG5yX2lycXMsCisJCQkJICAgICAgIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCA9IGRvbWFpbi0+aG9zdF9kYXRhOworCXN0cnVjdCBtdGtfbXNpX3NldCAqbXNpX3NldDsKKwlpbnQgaSwgaHdpcnEsIHNldF9pZHg7CisKKwltdXRleF9sb2NrKCZwb3J0LT5sb2NrKTsKKworCWh3aXJxID0gYml0bWFwX2ZpbmRfZnJlZV9yZWdpb24ocG9ydC0+bXNpX2lycV9pbl91c2UsIFBDSUVfTVNJX0lSUVNfTlVNLAorCQkJCQlvcmRlcl9iYXNlXzIobnJfaXJxcykpOworCisJbXV0ZXhfdW5sb2NrKCZwb3J0LT5sb2NrKTsKKworCWlmIChod2lycSA8IDApCisJCXJldHVybiAtRU5PU1BDOworCisJc2V0X2lkeCA9IGh3aXJxIC8gUENJRV9NU0lfSVJRU19QRVJfU0VUOworCW1zaV9zZXQgPSAmcG9ydC0+bXNpX3NldHNbc2V0X2lkeF07CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfaXJxczsgaSsrKQorCQlpcnFfZG9tYWluX3NldF9pbmZvKGRvbWFpbiwgdmlycSArIGksIGh3aXJxICsgaSwKKwkJCQkgICAgJm10a19tc2lfYm90dG9tX2lycV9jaGlwLCBtc2lfc2V0LAorCQkJCSAgICBoYW5kbGVfZWRnZV9pcnEsIE5VTEwsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG10a19tc2lfYm90dG9tX2RvbWFpbl9mcmVlKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4sCisJCQkJICAgICAgIHVuc2lnbmVkIGludCB2aXJxLCB1bnNpZ25lZCBpbnQgbnJfaXJxcykKK3sKKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCA9IGRvbWFpbi0+aG9zdF9kYXRhOworCXN0cnVjdCBpcnFfZGF0YSAqZGF0YSA9IGlycV9kb21haW5fZ2V0X2lycV9kYXRhKGRvbWFpbiwgdmlycSk7CisKKwltdXRleF9sb2NrKCZwb3J0LT5sb2NrKTsKKworCWJpdG1hcF9yZWxlYXNlX3JlZ2lvbihwb3J0LT5tc2lfaXJxX2luX3VzZSwgZGF0YS0+aHdpcnEsCisJCQkgICAgICBvcmRlcl9iYXNlXzIobnJfaXJxcykpOworCisJbXV0ZXhfdW5sb2NrKCZwb3J0LT5sb2NrKTsKKworCWlycV9kb21haW5fZnJlZV9pcnFzX2NvbW1vbihkb21haW4sIHZpcnEsIG5yX2lycXMpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlycV9kb21haW5fb3BzIG10a19tc2lfYm90dG9tX2RvbWFpbl9vcHMgPSB7CisJLmFsbG9jID0gbXRrX21zaV9ib3R0b21fZG9tYWluX2FsbG9jLAorCS5mcmVlID0gbXRrX21zaV9ib3R0b21fZG9tYWluX2ZyZWUsCit9OworCitzdGF0aWMgdm9pZCBtdGtfaW50eF9tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHZhbDsKKworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+aXJxX2xvY2ssIGZsYWdzKTsKKwl2YWwgPSByZWFkbF9yZWxheGVkKHBvcnQtPmJhc2UgKyBQQ0lFX0lOVF9FTkFCTEVfUkVHKTsKKwl2YWwgJj0gfkJJVChkYXRhLT5od2lycSArIFBDSUVfSU5UWF9TSElGVCk7CisJd3JpdGVsX3JlbGF4ZWQodmFsLCBwb3J0LT5iYXNlICsgUENJRV9JTlRfRU5BQkxFX1JFRyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmlycV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19pbnR4X3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkYXRhKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB2YWw7CisKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmlycV9sb2NrLCBmbGFncyk7CisJdmFsID0gcmVhZGxfcmVsYXhlZChwb3J0LT5iYXNlICsgUENJRV9JTlRfRU5BQkxFX1JFRyk7CisJdmFsIHw9IEJJVChkYXRhLT5od2lycSArIFBDSUVfSU5UWF9TSElGVCk7CisJd3JpdGVsX3JlbGF4ZWQodmFsLCBwb3J0LT5iYXNlICsgUENJRV9JTlRfRU5BQkxFX1JFRyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmlycV9sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogbXRrX2ludHhfZW9pKCkgLSBDbGVhciBJTlR4IElSUSBzdGF0dXMgYXQgdGhlIGVuZCBvZiBpbnRlcnJ1cHQKKyAqIEBkYXRhOiBwb2ludGVyIHRvIGNoaXAgc3BlY2lmaWMgZGF0YQorICoKKyAqIEFzIGFuIGVtdWxhdGVkIGxldmVsIElSUSwgaXRzIGludGVycnVwdCBzdGF0dXMgd2lsbCByZW1haW4KKyAqIHVudGlsIHRoZSBjb3JyZXNwb25kaW5nIGRlLWFzc2VydCBtZXNzYWdlIGlzIHJlY2VpdmVkOyBoZW5jZSB0aGF0CisgKiB0aGUgc3RhdHVzIGNhbiBvbmx5IGJlIGNsZWFyZWQgd2hlbiB0aGUgaW50ZXJydXB0IGhhcyBiZWVuIHNlcnZpY2VkLgorICovCitzdGF0aWMgdm9pZCBtdGtfaW50eF9lb2koc3RydWN0IGlycV9kYXRhICpkYXRhKQoreworCXN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0ID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZGF0YSk7CisJdW5zaWduZWQgbG9uZyBod2lycTsKKworCWh3aXJxID0gZGF0YS0+aHdpcnEgKyBQQ0lFX0lOVFhfU0hJRlQ7CisJd3JpdGVsX3JlbGF4ZWQoQklUKGh3aXJxKSwgcG9ydC0+YmFzZSArIFBDSUVfSU5UX1NUQVRVU19SRUcpOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIG10a19pbnR4X2lycV9jaGlwID0geworCS5pcnFfbWFzawkJPSBtdGtfaW50eF9tYXNrLAorCS5pcnFfdW5tYXNrCQk9IG10a19pbnR4X3VubWFzaywKKwkuaXJxX2VvaQkJPSBtdGtfaW50eF9lb2ksCisJLmlycV9zZXRfYWZmaW5pdHkJPSBtdGtfcGNpZV9zZXRfYWZmaW5pdHksCisJLm5hbWUJCQk9ICJJTlR4IiwKK307CisKK3N0YXRpYyBpbnQgbXRrX3BjaWVfaW50eF9tYXAoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgaW50IGlycSwKKwkJCSAgICAgaXJxX2h3X251bWJlcl90IGh3aXJxKQoreworCWlycV9zZXRfY2hpcF9kYXRhKGlycSwgZG9tYWluLT5ob3N0X2RhdGEpOworCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJm10a19pbnR4X2lycV9jaGlwLAorCQkJCSAgICAgIGhhbmRsZV9mYXN0ZW9pX2lycSwgIklOVHgiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBpbnR4X2RvbWFpbl9vcHMgPSB7CisJLm1hcCA9IG10a19wY2llX2ludHhfbWFwLAorfTsKKworc3RhdGljIGludCBtdGtfcGNpZV9pbml0X2lycV9kb21haW5zKHN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBvcnQtPmRldjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmludGNfbm9kZSwgKm5vZGUgPSBkZXYtPm9mX25vZGU7CisJaW50IHJldDsKKworCXJhd19zcGluX2xvY2tfaW5pdCgmcG9ydC0+aXJxX2xvY2spOworCisJLyogU2V0dXAgSU5UeCAqLworCWludGNfbm9kZSA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG5vZGUsICJpbnRlcnJ1cHQtY29udHJvbGxlciIpOworCWlmICghaW50Y19ub2RlKSB7CisJCWRldl9lcnIoZGV2LCAibWlzc2luZyBpbnRlcnJ1cHQtY29udHJvbGxlciBub2RlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcG9ydC0+aW50eF9kb21haW4gPSBpcnFfZG9tYWluX2FkZF9saW5lYXIoaW50Y19ub2RlLCBQQ0lfTlVNX0lOVFgsCisJCQkJCQkgICZpbnR4X2RvbWFpbl9vcHMsIHBvcnQpOworCWlmICghcG9ydC0+aW50eF9kb21haW4pIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gY3JlYXRlIElOVHggSVJRIGRvbWFpblxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIFNldHVwIE1TSSAqLworCW11dGV4X2luaXQoJnBvcnQtPmxvY2spOworCisJcG9ydC0+bXNpX2JvdHRvbV9kb21haW4gPSBpcnFfZG9tYWluX2FkZF9saW5lYXIobm9kZSwgUENJRV9NU0lfSVJRU19OVU0sCisJCQkJICAmbXRrX21zaV9ib3R0b21fZG9tYWluX29wcywgcG9ydCk7CisJaWYgKCFwb3J0LT5tc2lfYm90dG9tX2RvbWFpbikgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBjcmVhdGUgTVNJIGJvdHRvbSBkb21haW5cbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9tc2lfYm90dG9tX2RvbWFpbjsKKwl9CisKKwlwb3J0LT5tc2lfZG9tYWluID0gcGNpX21zaV9jcmVhdGVfaXJxX2RvbWFpbihkZXYtPmZ3bm9kZSwKKwkJCQkJCSAgICAgJm10a19tc2lfZG9tYWluX2luZm8sCisJCQkJCQkgICAgIHBvcnQtPm1zaV9ib3R0b21fZG9tYWluKTsKKwlpZiAoIXBvcnQtPm1zaV9kb21haW4pIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gY3JlYXRlIE1TSSBkb21haW5cbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9tc2lfZG9tYWluOworCX0KKworCWlmIChvZl9maW5kX3Byb3BlcnR5KG5vZGUsICJkaXJlY3RfbXNpIiwgTlVMTCkpCisJCXBvcnQtPmRpcmVjdF9tc2lfZW5hYmxlID0gdHJ1ZTsKKwllbHNlCisJCXBvcnQtPmRpcmVjdF9tc2lfZW5hYmxlID0gZmFsc2U7CisKKwlyZXR1cm4gMDsKKworZXJyX21zaV9kb21haW46CisJaXJxX2RvbWFpbl9yZW1vdmUocG9ydC0+bXNpX2JvdHRvbV9kb21haW4pOworZXJyX21zaV9ib3R0b21fZG9tYWluOgorCWlycV9kb21haW5fcmVtb3ZlKHBvcnQtPmludHhfZG9tYWluKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19wY2llX2lycV90ZWFyZG93bihzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCkKK3sKKwlpcnFfc2V0X2NoYWluZWRfaGFuZGxlcl9hbmRfZGF0YShwb3J0LT5pcnEsIE5VTEwsIE5VTEwpOworCisJaWYgKHBvcnQtPmludHhfZG9tYWluKQorCQlpcnFfZG9tYWluX3JlbW92ZShwb3J0LT5pbnR4X2RvbWFpbik7CisKKwlpZiAocG9ydC0+bXNpX2RvbWFpbikKKwkJaXJxX2RvbWFpbl9yZW1vdmUocG9ydC0+bXNpX2RvbWFpbik7CisKKwlpZiAocG9ydC0+bXNpX2JvdHRvbV9kb21haW4pCisJCWlycV9kb21haW5fcmVtb3ZlKHBvcnQtPm1zaV9ib3R0b21fZG9tYWluKTsKKworCWlycV9kaXNwb3NlX21hcHBpbmcocG9ydC0+aXJxKTsKK30KKworc3RhdGljIHZvaWQgbXRrX3BjaWVfbXNpX2hhbmRsZXIoc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQsIGludCBzZXRfaWR4KQoreworCXN0cnVjdCBtdGtfbXNpX3NldCAqbXNpX3NldCA9ICZwb3J0LT5tc2lfc2V0c1tzZXRfaWR4XTsKKwl1bnNpZ25lZCBsb25nIG1zaV9lbmFibGUsIG1zaV9zdGF0dXM7CisJdW5zaWduZWQgaW50IHZpcnE7CisJaXJxX2h3X251bWJlcl90IGJpdCwgaHdpcnE7CisKKwltc2lfZW5hYmxlID0gcmVhZGxfcmVsYXhlZChtc2lfc2V0LT5iYXNlICsgUENJRV9NU0lfU0VUX0VOQUJMRV9PRkZTRVQpOworCisJZG8geworCQltc2lfc3RhdHVzID0gcmVhZGxfcmVsYXhlZChtc2lfc2V0LT5iYXNlICsKKwkJCQkJICAgUENJRV9NU0lfU0VUX1NUQVRVU19PRkZTRVQpOworCQltc2lfc3RhdHVzICY9IG1zaV9lbmFibGU7CisJCWlmICghbXNpX3N0YXR1cykKKwkJCWJyZWFrOworCisJCWZvcl9lYWNoX3NldF9iaXQoYml0LCAmbXNpX3N0YXR1cywgUENJRV9NU0lfSVJRU19QRVJfU0VUKSB7CisJCQlod2lycSA9IGJpdCArIHNldF9pZHggKiBQQ0lFX01TSV9JUlFTX1BFUl9TRVQ7CisJCQl2aXJxID0gaXJxX2ZpbmRfbWFwcGluZyhwb3J0LT5tc2lfYm90dG9tX2RvbWFpbiwgaHdpcnEpOworCQkJZ2VuZXJpY19oYW5kbGVfaXJxKHZpcnEpOworCQl9CisJfSB3aGlsZSAodHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19wY2llX2lycV9oYW5kbGVyKHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCA9IGlycV9kZXNjX2dldF9oYW5kbGVyX2RhdGEoZGVzYyk7CisJc3RydWN0IGlycV9jaGlwICppcnFjaGlwID0gaXJxX2Rlc2NfZ2V0X2NoaXAoZGVzYyk7CisJdW5zaWduZWQgbG9uZyBzdGF0dXM7CisJdW5zaWduZWQgaW50IHZpcnE7CisJaXJxX2h3X251bWJlcl90IGlycV9iaXQgPSBQQ0lFX0lOVFhfU0hJRlQ7CisKKwljaGFpbmVkX2lycV9lbnRlcihpcnFjaGlwLCBkZXNjKTsKKworCXN0YXR1cyA9IHJlYWRsX3JlbGF4ZWQocG9ydC0+YmFzZSArIFBDSUVfSU5UX1NUQVRVU19SRUcpOworCWZvcl9lYWNoX3NldF9iaXRfZnJvbShpcnFfYml0LCAmc3RhdHVzLCBQQ0lfTlVNX0lOVFggKworCQkJICAgICAgUENJRV9JTlRYX1NISUZUKSB7CisJCXZpcnEgPSBpcnFfZmluZF9tYXBwaW5nKHBvcnQtPmludHhfZG9tYWluLAorCQkJCQlpcnFfYml0IC0gUENJRV9JTlRYX1NISUZUKTsKKwkJZ2VuZXJpY19oYW5kbGVfaXJxKHZpcnEpOworCX0KKworCWlycV9iaXQgPSBQQ0lFX01TSV9TSElGVDsKKwlmb3JfZWFjaF9zZXRfYml0X2Zyb20oaXJxX2JpdCwgJnN0YXR1cywgUENJRV9NU0lfU0VUX05VTSArCisJCQkgICAgICBQQ0lFX01TSV9TSElGVCkgeworCQltdGtfcGNpZV9tc2lfaGFuZGxlcihwb3J0LCBpcnFfYml0IC0gUENJRV9NU0lfU0hJRlQpOworCisJCXdyaXRlbF9yZWxheGVkKEJJVChpcnFfYml0KSwgcG9ydC0+YmFzZSArIFBDSUVfSU5UX1NUQVRVU19SRUcpOworCX0KKworCWNoYWluZWRfaXJxX2V4aXQoaXJxY2hpcCwgZGVzYyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19wY2llX2RpcmVjdF9tc2lfaGFuZGxlcihzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBpcnFfZGVzY19nZXRfaGFuZGxlcl9kYXRhKGRlc2MpOworCXN0cnVjdCBpcnFfY2hpcCAqaXJxY2hpcCA9IGlycV9kZXNjX2dldF9jaGlwKGRlc2MpOworCXVuc2lnbmVkIGxvbmcgbXNpX2VuYWJsZSwgbXNpX3N0YXR1czsKKwl1bnNpZ25lZCBpbnQgdmlycTsKKwlpcnFfaHdfbnVtYmVyX3QgaHdpcnE7CisJaW50IGksIG1zaV9iaXQgPSAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IFBDSUVfTVNJX0lSUVNfUEVSX1NFVDsgaSsrKSB7CisJCWlmIChwb3J0LT5kaXJlY3RfbXNpW2ldID09IGlycV9kZXNjX2dldF9pcnEoZGVzYykpIHsKKwkJCW1zaV9iaXQgPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAobXNpX2JpdCA9PSAtRUlOVkFMKQorCQlyZXR1cm47CisKKwljaGFpbmVkX2lycV9lbnRlcihpcnFjaGlwLCBkZXNjKTsKKworCWZvciAoaSA9IDA7IGkgPCBQQ0lFX01TSV9TRVRfTlVNOyBpKyspIHsKKwkJc3RydWN0IG10a19tc2lfc2V0ICptc2lfc2V0ID0gJnBvcnQtPm1zaV9zZXRzW2ldOworCisJCW1zaV9zdGF0dXMgPSByZWFkbF9yZWxheGVkKG1zaV9zZXQtPmJhc2UgKworCQkJCQkgICBQQ0lFX01TSV9TRVRfU1RBVFVTX09GRlNFVCk7CisJCW1zaV9lbmFibGUgPSByZWFkbF9yZWxheGVkKG1zaV9zZXQtPmJhc2UgKworCQkJCQkgICBQQ0lFX01TSV9TRVRfR1JQMV9FTkFCTEVfT0ZGU0VUKTsKKwkJbXNpX3N0YXR1cyAmPSBtc2lfZW5hYmxlOworCQltc2lfc3RhdHVzICY9IEJJVChtc2lfYml0KTsKKwkJaWYgKCFtc2lfc3RhdHVzKQorCQkJY29udGludWU7CisKKwkJaHdpcnEgPSBtc2lfYml0ICsgaSAqIFBDSUVfTVNJX0lSUVNfUEVSX1NFVDsKKwkJdmlycSA9IGlycV9maW5kX21hcHBpbmcocG9ydC0+bXNpX2JvdHRvbV9kb21haW4sIGh3aXJxKTsKKwkJZ2VuZXJpY19oYW5kbGVfaXJxKHZpcnEpOworCX0KKworCWNoYWluZWRfaXJxX2V4aXQoaXJxY2hpcCwgZGVzYyk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX3BjaWVfc2V0dXBfaXJxKHN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBvcnQtPmRldjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJaW50IGVyciwgaTsKKworCWVyciA9IG10a19wY2llX2luaXRfaXJxX2RvbWFpbnMocG9ydCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXBvcnQtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKHBvcnQtPmlycSA8IDApCisJCXJldHVybiBwb3J0LT5pcnE7CisKKwlpcnFfc2V0X2NoYWluZWRfaGFuZGxlcl9hbmRfZGF0YShwb3J0LT5pcnEsIG10a19wY2llX2lycV9oYW5kbGVyLCBwb3J0KTsKKworCWlmIChwb3J0LT5kaXJlY3RfbXNpX2VuYWJsZSkgeworCQltdGtfbXNpX2JvdHRvbV9pcnFfY2hpcC5pcnFfc2V0X2FmZmluaXR5ID0KKwkJCQkJCSAgICAgIG10a19wY2llX3NldF9tc2lfYWZmaW5pdHk7CisKKwkJZm9yIChpID0gMDsgaSA8IFBDSUVfTVNJX0lSUVNfUEVSX1NFVDsgaSsrKSB7CisJCQlwb3J0LT5kaXJlY3RfbXNpW2ldID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCBpICsgMSk7CisJCQlpcnFfc2V0X2NoYWluZWRfaGFuZGxlcl9hbmRfZGF0YShwb3J0LT5kaXJlY3RfbXNpW2ldLAorCQkJCQkgICAgbXRrX3BjaWVfZGlyZWN0X21zaV9oYW5kbGVyLCBwb3J0KTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19wY2llX3BhcnNlX3BvcnQoc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gcG9ydC0+ZGV2OworCXN0cnVjdCBwY2lfaG9zdF9icmlkZ2UgKmhvc3QgPSBwY2lfaG9zdF9icmlkZ2VfZnJvbV9wcml2KHBvcnQpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICp3aW5kb3dzID0gJmhvc3QtPndpbmRvd3M7CisJc3RydWN0IHJlc291cmNlICpyZWdzLCAqYnVzOworCWludCByZXQ7CisKKwlyZXQgPSBwY2lfcGFyc2VfcmVxdWVzdF9vZl9wY2lfcmFuZ2VzKGRldiwgd2luZG93cywgJmJ1cyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBwYXJzZSBwY2kgcmFuZ2VzXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZWdzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInBjaWUtbWFjIik7CisJcG9ydC0+YmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlZ3MpOworCWlmIChJU19FUlIocG9ydC0+YmFzZSkpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gbWFwIHJlZ2lzdGVyIGJhc2VcbiIpOworCQlyZXR1cm4gUFRSX0VSUihwb3J0LT5iYXNlKTsKKwl9CisKKwlwb3J0LT5yZWdfYmFzZSA9IHJlZ3MtPnN0YXJ0OworCisJcG9ydC0+cGh5X3Jlc2V0ID0gZGV2bV9yZXNldF9jb250cm9sX2dldF9vcHRpb25hbF9leGNsdXNpdmUoZGV2LCAicGh5Iik7CisJaWYgKElTX0VSUihwb3J0LT5waHlfcmVzZXQpKSB7CisJCXJldCA9IFBUUl9FUlIocG9ydC0+cGh5X3Jlc2V0KTsKKwkJaWYgKHJldCAhPSAtRVBST0JFX0RFRkVSKQorCQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IFBIWSByZXNldFxuIik7CisKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwb3J0LT5tYWNfcmVzZXQgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0X29wdGlvbmFsX2V4Y2x1c2l2ZShkZXYsICJtYWMiKTsKKwlpZiAoSVNfRVJSKHBvcnQtPm1hY19yZXNldCkpIHsKKwkJcmV0ID0gUFRSX0VSUihwb3J0LT5tYWNfcmVzZXQpOworCQlpZiAocmV0ICE9IC1FUFJPQkVfREVGRVIpCisJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgTUFDIHJlc2V0XG4iKTsKKworCQlyZXR1cm4gcmV0OworCX0KKworCXBvcnQtPnBoeSA9IGRldm1fcGh5X29wdGlvbmFsX2dldChkZXYsICJwY2llLXBoeSIpOworCWlmIChJU19FUlIocG9ydC0+cGh5KSkgeworCQlyZXQgPSBQVFJfRVJSKHBvcnQtPnBoeSk7CisJCWlmIChyZXQgIT0gLUVQUk9CRV9ERUZFUikKKwkJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBQSFlcbiIpOworCisJCXJldHVybiByZXQ7CisJfQorCisJcG9ydC0+bnVtX2Nsa3MgPSBkZXZtX2Nsa19idWxrX2dldF9hbGwoZGV2LCAmcG9ydC0+Y2xrcyk7CisJaWYgKHBvcnQtPm51bV9jbGtzIDwgMCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgY2xvY2tzXG4iKTsKKwkJcmV0dXJuIHBvcnQtPm51bV9jbGtzOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19wY2llX3Bvd2VyX3VwKHN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBvcnQtPmRldjsKKwlpbnQgZXJyOworCisJLyogUEhZIHBvd2VyIG9uIGFuZCBlbmFibGUgcGlwZSBjbG9jayAqLworCXJlc2V0X2NvbnRyb2xfZGVhc3NlcnQocG9ydC0+cGh5X3Jlc2V0KTsKKworCWVyciA9IHBoeV9pbml0KHBvcnQtPnBoeSk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBpbml0aWFsaXplIFBIWVxuIik7CisJCWdvdG8gZXJyX3BoeV9pbml0OworCX0KKworCWVyciA9IHBoeV9wb3dlcl9vbihwb3J0LT5waHkpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcG93ZXIgb24gUEhZXG4iKTsKKwkJZ290byBlcnJfcGh5X29uOworCX0KKworCS8qIE1BQyBwb3dlciBvbiBhbmQgZW5hYmxlIHRyYW5zYWN0aW9uIGxheWVyIGNsb2NrcyAqLworCXJlc2V0X2NvbnRyb2xfZGVhc3NlcnQocG9ydC0+bWFjX3Jlc2V0KTsKKworCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7CisJcG1fcnVudGltZV9nZXRfc3luYyhkZXYpOworCisJZXJyID0gY2xrX2J1bGtfcHJlcGFyZV9lbmFibGUocG9ydC0+bnVtX2Nsa3MsIHBvcnQtPmNsa3MpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZW5hYmxlIGNsb2Nrc1xuIik7CisJCWdvdG8gZXJyX2Nsa19pbml0OworCX0KKworCXJldHVybiAwOworCitlcnJfY2xrX2luaXQ6CisJcG1fcnVudGltZV9wdXRfc3luYyhkZXYpOworCXBtX3J1bnRpbWVfZGlzYWJsZShkZXYpOworCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KHBvcnQtPm1hY19yZXNldCk7CisJcGh5X3Bvd2VyX29mZihwb3J0LT5waHkpOworZXJyX3BoeV9vbjoKKwlwaHlfZXhpdChwb3J0LT5waHkpOworZXJyX3BoeV9pbml0OgorCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KHBvcnQtPnBoeV9yZXNldCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBtdGtfcGNpZV9wb3dlcl9kb3duKHN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0KQoreworCWNsa19idWxrX2Rpc2FibGVfdW5wcmVwYXJlKHBvcnQtPm51bV9jbGtzLCBwb3J0LT5jbGtzKTsKKworCXBtX3J1bnRpbWVfcHV0X3N5bmMocG9ydC0+ZGV2KTsKKwlwbV9ydW50aW1lX2Rpc2FibGUocG9ydC0+ZGV2KTsKKwlyZXNldF9jb250cm9sX2Fzc2VydChwb3J0LT5tYWNfcmVzZXQpOworCisJcGh5X3Bvd2VyX29mZihwb3J0LT5waHkpOworCXBoeV9leGl0KHBvcnQtPnBoeSk7CisJcmVzZXRfY29udHJvbF9hc3NlcnQocG9ydC0+cGh5X3Jlc2V0KTsKK30KKworc3RhdGljIGludCBtdGtfcGNpZV9zZXR1cChzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gbXRrX3BjaWVfcGFyc2VfcG9ydChwb3J0KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogRG9uJ3QgdG91Y2ggdGhlIGhhcmR3YXJlIHJlZ2lzdGVycyBiZWZvcmUgcG93ZXIgdXAgKi8KKwllcnIgPSBtdGtfcGNpZV9wb3dlcl91cChwb3J0KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogVHJ5IGxpbmsgdXAgKi8KKwllcnIgPSBtdGtfcGNpZV9zdGFydHVwX3BvcnQocG9ydCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfc2V0dXA7CisKKwllcnIgPSBtdGtfcGNpZV9zZXR1cF9pcnEocG9ydCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfc2V0dXA7CisKKwlyZXR1cm4gMDsKKworZXJyX3NldHVwOgorCW10a19wY2llX3Bvd2VyX2Rvd24ocG9ydCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG10a19wY2llX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgcGNpX2hvc3RfYnJpZGdlICpob3N0OworCWludCBlcnI7CisKKwlob3N0ID0gZGV2bV9wY2lfYWxsb2NfaG9zdF9icmlkZ2UoZGV2LCBzaXplb2YoKnBvcnQpKTsKKwlpZiAoIWhvc3QpCisJCXJldHVybiAtRU5PTUVNOworCisJcG9ydCA9IHBjaV9ob3N0X2JyaWRnZV9wcml2KGhvc3QpOworCisJcG9ydC0+ZGV2ID0gZGV2OworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHBvcnQpOworCisJZXJyID0gbXRrX3BjaWVfc2V0dXAocG9ydCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWhvc3QtPmRldi5wYXJlbnQgPSBwb3J0LT5kZXY7CisJaG9zdC0+b3BzID0gJm10a19wY2llX29wczsKKwlob3N0LT5tYXBfaXJxID0gb2ZfaXJxX3BhcnNlX2FuZF9tYXBfcGNpOworCWhvc3QtPnN3aXp6bGVfaXJxID0gcGNpX2NvbW1vbl9zd2l6emxlOworCWhvc3QtPnN5c2RhdGEgPSBwb3J0OworCisJZXJyID0gcGNpX2hvc3RfcHJvYmUoaG9zdCk7CisJaWYgKGVycikgeworCQltdGtfcGNpZV9pcnFfdGVhcmRvd24ocG9ydCk7CisJCW10a19wY2llX3Bvd2VyX2Rvd24ocG9ydCk7CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX3BjaWVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcGNpX2hvc3RfYnJpZGdlICpob3N0ID0gcGNpX2hvc3RfYnJpZGdlX2Zyb21fcHJpdihwb3J0KTsKKworCXBjaV9sb2NrX3Jlc2Nhbl9yZW1vdmUoKTsKKwlwY2lfc3RvcF9yb290X2J1cyhob3N0LT5idXMpOworCXBjaV9yZW1vdmVfcm9vdF9idXMoaG9zdC0+YnVzKTsKKwlwY2lfdW5sb2NrX3Jlc2Nhbl9yZW1vdmUoKTsKKworCW10a19wY2llX2lycV90ZWFyZG93bihwb3J0KTsKKwltdGtfcGNpZV9wb3dlcl9kb3duKHBvcnQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fbWF5YmVfdW51c2VkIG10a19wY2llX2lycV9zYXZlKHN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0KQoreworCWludCBpOworCisJcmF3X3NwaW5fbG9jaygmcG9ydC0+aXJxX2xvY2spOworCisJcG9ydC0+c2F2ZWRfaXJxX3N0YXRlID0gcmVhZGxfcmVsYXhlZChwb3J0LT5iYXNlICsgUENJRV9JTlRfRU5BQkxFX1JFRyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUENJRV9NU0lfU0VUX05VTTsgaSsrKSB7CisJCXN0cnVjdCBtdGtfbXNpX3NldCAqbXNpX3NldCA9ICZwb3J0LT5tc2lfc2V0c1tpXTsKKworCQlpZiAocG9ydC0+ZGlyZWN0X21zaV9lbmFibGUpCisJCQltc2lfc2V0LT5zYXZlZF9pcnFfc3RhdGUgPSByZWFkbF9yZWxheGVkKG1zaV9zZXQtPmJhc2UgKworCQkJCQlQQ0lFX01TSV9TRVRfR1JQMV9FTkFCTEVfT0ZGU0VUKTsKKwkJZWxzZQorCQkJbXNpX3NldC0+c2F2ZWRfaXJxX3N0YXRlID0gcmVhZGxfcmVsYXhlZChtc2lfc2V0LT5iYXNlICsKKwkJCQkJUENJRV9NU0lfU0VUX0VOQUJMRV9PRkZTRVQpOworCX0KKworCXJhd19zcGluX3VubG9jaygmcG9ydC0+aXJxX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBfX21heWJlX3VudXNlZCBtdGtfcGNpZV9pcnFfcmVzdG9yZShzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCkKK3sKKwlpbnQgaTsKKworCXJhd19zcGluX2xvY2soJnBvcnQtPmlycV9sb2NrKTsKKworCXdyaXRlbF9yZWxheGVkKHBvcnQtPnNhdmVkX2lycV9zdGF0ZSwgcG9ydC0+YmFzZSArIFBDSUVfSU5UX0VOQUJMRV9SRUcpOworCisJZm9yIChpID0gMDsgaSA8IFBDSUVfTVNJX1NFVF9OVU07IGkrKykgeworCQlzdHJ1Y3QgbXRrX21zaV9zZXQgKm1zaV9zZXQgPSAmcG9ydC0+bXNpX3NldHNbaV07CisKKwkJaWYgKHBvcnQtPmRpcmVjdF9tc2lfZW5hYmxlKQorCQkJd3JpdGVsX3JlbGF4ZWQobXNpX3NldC0+c2F2ZWRfaXJxX3N0YXRlLCBtc2lfc2V0LT5iYXNlICsKKwkJCQkJUENJRV9NU0lfU0VUX0dSUDFfRU5BQkxFX09GRlNFVCk7CisJCWVsc2UKKwkJCXdyaXRlbF9yZWxheGVkKG1zaV9zZXQtPnNhdmVkX2lycV9zdGF0ZSwgbXNpX3NldC0+YmFzZSArCisJCQkJCVBDSUVfTVNJX1NFVF9FTkFCTEVfT0ZGU0VUKTsKKwl9CisKKwlyYXdfc3Bpbl91bmxvY2soJnBvcnQtPmlycV9sb2NrKTsKK30KKworc3RhdGljIGludCBfX21heWJlX3VudXNlZCBtdGtfcGNpZV90dXJuX29mZl9saW5rKHN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0KQoreworCXUzMiB2YWw7CisKKwl2YWwgPSByZWFkbF9yZWxheGVkKHBvcnQtPmJhc2UgKyBQQ0lFX0lDTURfUE1fUkVHKTsKKwl2YWwgfD0gUENJRV9UVVJOX09GRl9MSU5LOworCXdyaXRlbF9yZWxheGVkKHZhbCwgcG9ydC0+YmFzZSArIFBDSUVfSUNNRF9QTV9SRUcpOworCisJLyogQ2hlY2sgdGhlIGxpbmsgaXMgTDIgKi8KKwlyZXR1cm4gcmVhZGxfcG9sbF90aW1lb3V0KHBvcnQtPmJhc2UgKyBQQ0lFX0xUU1NNX1NUQVRVU19SRUcsIHZhbCwKKwkJCQkgIChQQ0lFX0xUU1NNX1NUQVRFKHZhbCkgPT0KKwkJCQkgICBQQ0lFX0xUU1NNX1NUQVRFX0wyX0lETEUpLCAyMCwKKwkJCQkgICA1MCAqIFVTRUNfUEVSX01TRUMpOworfQorCitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIG10a19wY2llX3N1c3BlbmRfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IGVycjsKKwl1MzIgdmFsOworCisJLyogVHJpZ2dlciBsaW5rIHRvIEwyIHN0YXRlICovCisJZXJyID0gbXRrX3BjaWVfdHVybl9vZmZfbGluayhwb3J0KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIocG9ydC0+ZGV2LCAiY2Fubm90IGVudGVyIEwyIHN0YXRlXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBQdWxsIGRvd24gdGhlIFBFUlNUIyBwaW4gKi8KKwl2YWwgPSByZWFkbF9yZWxheGVkKHBvcnQtPmJhc2UgKyBQQ0lFX1JTVF9DVFJMX1JFRyk7CisJdmFsIHw9IFBDSUVfUEVfUlNUQjsKKwl3cml0ZWxfcmVsYXhlZCh2YWwsIHBvcnQtPmJhc2UgKyBQQ0lFX1JTVF9DVFJMX1JFRyk7CisKKwlkZXZfZGJnKHBvcnQtPmRldiwgImVudGVyZWQgTDIgc3RhdGVzIHN1Y2Nlc3NmdWxseSIpOworCisJbXRrX3BjaWVfaXJxX3NhdmUocG9ydCk7CisJbXRrX3BjaWVfcG93ZXJfZG93bihwb3J0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIG10a19wY2llX3Jlc3VtZV9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgZXJyOworCisJZXJyID0gbXRrX3BjaWVfcG93ZXJfdXAocG9ydCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IG10a19wY2llX3N0YXJ0dXBfcG9ydChwb3J0KTsKKwlpZiAoZXJyKSB7CisJCW10a19wY2llX3Bvd2VyX2Rvd24ocG9ydCk7CisJCXJldHVybiBlcnI7CisJfQorCisJbXRrX3BjaWVfaXJxX3Jlc3RvcmUocG9ydCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIG10a19wY2llX3BtX29wcyA9IHsKKwlTRVRfTk9JUlFfU1lTVEVNX1NMRUVQX1BNX09QUyhtdGtfcGNpZV9zdXNwZW5kX25vaXJxLAorCQkJCSAgICAgIG10a19wY2llX3Jlc3VtZV9ub2lycSkKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19wY2llX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxOTItcGNpZSIgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni1wY2llIiB9LAorCXt9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX3BjaWVfZHJpdmVyID0geworCS5wcm9iZSA9IG10a19wY2llX3Byb2JlLAorCS5yZW1vdmUgPSBtdGtfcGNpZV9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAibXRrLXBjaWUiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBtdGtfcGNpZV9vZl9tYXRjaCwKKwkJLnBtID0gJm10a19wY2llX3BtX29wcywKKwl9LAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihtdGtfcGNpZV9kcml2ZXIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL3BpbmN0cmwvbWVkaWF0ZWsvcGluY3RybC1tdDc5ODEuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9waW5jdHJsL21lZGlhdGVrL3BpbmN0cmwtbXQ3OTgxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc5Y2E2ZQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9waW5jdHJsL21lZGlhdGVrL3BpbmN0cmwtbXQ3OTgxLmMKQEAgLTAsMCArMSw5OTUgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogVGhlIE1UNzk4NiBkcml2ZXIgYmFzZWQgb24gTGludXggZ2VuZXJpYyBwaW5jdHJsIGJpbmRpbmcuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDIwIE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogU2FtIFNoaWggPHNhbS5zaGloQG1lZGlhdGVrLmNvbT4KKyAqLworCisjaW5jbHVkZSAicGluY3RybC1tb29yZS5oIgorCisjZGVmaW5lIE1UNzk4Nl9QSU4oX251bWJlciwgX25hbWUpCQkJCVwKKwlNVEtfUElOKF9udW1iZXIsIF9uYW1lLCAwLCBfbnVtYmVyLCBEUlZfR1JQMSkKKworI2RlZmluZSBQSU5fRklFTERfQkFTRShfc19waW4sIF9lX3BpbiwgX2lfYmFzZSwgX3NfYWRkciwgX3hfYWRkcnMsIF9zX2JpdCwgX3hfYml0cykJXAorCVBJTl9GSUVMRF9DQUxDKF9zX3BpbiwgX2VfcGluLCBfaV9iYXNlLCBfc19hZGRyLCBfeF9hZGRycywgX3NfYml0LAlcCisJCSAgICAgICBfeF9iaXRzLCAzMiwgMCkKKworI2RlZmluZSBQSU5TX0ZJRUxEX0JBU0UoX3NfcGluLCBfZV9waW4sIF9pX2Jhc2UsIF9zX2FkZHIsIF94X2FkZHJzLCBfc19iaXQsIF94X2JpdHMpCVwKKwlQSU5fRklFTERfQ0FMQyhfc19waW4sIF9lX3BpbiwgX2lfYmFzZSwgX3NfYWRkciwgX3hfYWRkcnMsIF9zX2JpdCwJXAorCQkgICAgICBfeF9iaXRzLCAzMiwgMSkKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfcGluX2ZpZWxkX2NhbGMgbXQ3OTgxX3Bpbl9tb2RlX3JhbmdlW10gPSB7CisJUElOX0ZJRUxEKDAsIDU2LCAweDMwMCwgMHgxMCwgMCwgNCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19waW5fZmllbGRfY2FsYyBtdDc5ODFfcGluX2Rpcl9yYW5nZVtdID0geworCVBJTl9GSUVMRCgwLCA1NiwgMHgwLCAweDEwLCAwLCAxKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX3Bpbl9maWVsZF9jYWxjIG10Nzk4MV9waW5fZGlfcmFuZ2VbXSA9IHsKKwlQSU5fRklFTEQoMCwgNTYsIDB4MjAwLCAweDEwLCAwLCAxKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX3Bpbl9maWVsZF9jYWxjIG10Nzk4MV9waW5fZG9fcmFuZ2VbXSA9IHsKKwlQSU5fRklFTEQoMCwgNTYsIDB4MTAwLCAweDEwLCAwLCAxKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX3Bpbl9maWVsZF9jYWxjIG10Nzk4MV9waW5faWVzX3JhbmdlW10gPSB7CisJUElOX0ZJRUxEX0JBU0UoMCwgMCwgMSwgMHgxMCwgMHgxMCwgMSwgMSksCisJUElOX0ZJRUxEX0JBU0UoMSwgMSwgMSwgMHgxMCwgMHgxMCwgMCwgMSksCisJUElOX0ZJRUxEX0JBU0UoMiwgMiwgNSwgMHgyMCwgMHgxMCwgNiwgMSksCisJUElOX0ZJRUxEX0JBU0UoMywgMywgNCwgMHgyMCwgMHgxMCwgNiwgMSksCisJUElOX0ZJRUxEX0JBU0UoNCwgNCwgNCwgMHgyMCwgMHgxMCwgMiwgMSksCisJUElOX0ZJRUxEX0JBU0UoNSwgNSwgNCwgMHgyMCwgMHgxMCwgMSwgMSksCisJUElOX0ZJRUxEX0JBU0UoNiwgNiwgNCwgMHgyMCwgMHgxMCwgMywgMSksCisJUElOX0ZJRUxEX0JBU0UoNywgNywgNCwgMHgyMCwgMHgxMCwgMCwgMSksCisJUElOX0ZJRUxEX0JBU0UoOCwgOCwgNCwgMHgyMCwgMHgxMCwgNCwgMSksCisJUElOX0ZJRUxEX0JBU0UoOSwgOSwgNCwgMHgyMCwgMHgxMCwgOSwgMSksCisKKwlQSU5fRklFTERfQkFTRSgxMCwgMTAsIDUsIDB4MjAsIDB4MTAsIDgsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDExLCAxMSwgNSwgMHg0MCwgMHgxMCwgMTAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDEyLCAxMiwgNSwgMHgyMCwgMHgxMCwgNywgMSksCisJUElOX0ZJRUxEX0JBU0UoMTMsIDEzLCA1LCAweDIwLCAweDEwLCAxMSwgMSksCisKKwlQSU5fRklFTERfQkFTRSgxNCwgMTQsIDQsIDB4MjAsIDB4MTAsIDgsIDEpLAorCisJUElOX0ZJRUxEX0JBU0UoMTUsIDE1LCAyLCAweDIwLCAweDEwLCAwLCAxKSwKKwlQSU5fRklFTERfQkFTRSgxNiwgMTYsIDIsIDB4MjAsIDB4MTAsIDEsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDE3LCAxNywgMiwgMHgyMCwgMHgxMCwgNSwgMSksCisJUElOX0ZJRUxEX0JBU0UoMTgsIDE4LCAyLCAweDIwLCAweDEwLCA0LCAxKSwKKwlQSU5fRklFTERfQkFTRSgxOSwgMTksIDIsIDB4MjAsIDB4MTAsIDIsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDIwLCAyMCwgMiwgMHgyMCwgMHgxMCwgMywgMSksCisJUElOX0ZJRUxEX0JBU0UoMjEsIDIxLCAyLCAweDIwLCAweDEwLCA2LCAxKSwKKwlQSU5fRklFTERfQkFTRSgyMiwgMjIsIDIsIDB4MjAsIDB4MTAsIDcsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDIzLCAyMywgMiwgMHgyMCwgMHgxMCwgMTAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDI0LCAyNCwgMiwgMHgyMCwgMHgxMCwgOSwgMSksCisJUElOX0ZJRUxEX0JBU0UoMjUsIDI1LCAyLCAweDIwLCAweDEwLCA4LCAxKSwKKworCVBJTl9GSUVMRF9CQVNFKDI2LCAyNiwgNSwgMHgyMCwgMHgxMCwgMCwgMSksCisJUElOX0ZJRUxEX0JBU0UoMjcsIDI3LCA1LCAweDIwLCAweDEwLCA0LCAxKSwKKwlQSU5fRklFTERfQkFTRSgyOCwgMjgsIDUsIDB4MjAsIDB4MTAsIDMsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDI5LCAyOSwgNSwgMHgyMCwgMHgxMCwgMSwgMSksCisJUElOX0ZJRUxEX0JBU0UoMzAsIDMwLCA1LCAweDIwLCAweDEwLCAyLCAxKSwKKwlQSU5fRklFTERfQkFTRSgzMSwgMzEsIDUsIDB4MjAsIDB4MTAsIDUsIDEpLAorCisJUElOX0ZJRUxEX0JBU0UoMzIsIDMyLCAxLCAweDEwLCAweDEwLCAyLCAxKSwKKwlQSU5fRklFTERfQkFTRSgzMywgMzMsIDEsIDB4MTAsIDB4MTAsIDMsIDEpLAorCisJUElOX0ZJRUxEX0JBU0UoMzQsIDM0LCA0LCAweDIwLCAweDEwLCA1LCAxKSwKKwlQSU5fRklFTERfQkFTRSgzNSwgMzUsIDQsIDB4MjAsIDB4MTAsIDcsIDEpLAorCisJUElOX0ZJRUxEX0JBU0UoMzYsIDM2LCAzLCAweDEwLCAweDEwLCAyLCAxKSwKKwlQSU5fRklFTERfQkFTRSgzNywgMzcsIDMsIDB4MTAsIDB4MTAsIDMsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDM4LCAzOCwgMywgMHgxMCwgMHgxMCwgMCwgMSksCisJUElOX0ZJRUxEX0JBU0UoMzksIDM5LCAzLCAweDEwLCAweDEwLCAxLCAxKSwKKworCVBJTl9GSUVMRF9CQVNFKDQwLCA0MCwgNywgMHgzMCwgMHgxMCwgMSwgMSksCisJUElOX0ZJRUxEX0JBU0UoNDEsIDQxLCA3LCAweDMwLCAweDEwLCAwLCAxKSwKKwlQSU5fRklFTERfQkFTRSg0MiwgNDIsIDcsIDB4MzAsIDB4MTAsIDksIDEpLAorCVBJTl9GSUVMRF9CQVNFKDQzLCA0MywgNywgMHgzMCwgMHgxMCwgNywgMSksCisJUElOX0ZJRUxEX0JBU0UoNDQsIDQ0LCA3LCAweDMwLCAweDEwLCA4LCAxKSwKKwlQSU5fRklFTERfQkFTRSg0NSwgNDUsIDcsIDB4MzAsIDB4MTAsIDMsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDQ2LCA0NiwgNywgMHgzMCwgMHgxMCwgNCwgMSksCisJUElOX0ZJRUxEX0JBU0UoNDcsIDQ3LCA3LCAweDMwLCAweDEwLCA1LCAxKSwKKwlQSU5fRklFTERfQkFTRSg0OCwgNDgsIDcsIDB4MzAsIDB4MTAsIDYsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDQ5LCA0OSwgNywgMHgzMCwgMHgxMCwgMiwgMSksCisKKwlQSU5fRklFTERfQkFTRSg1MCwgNTAsIDYsIDB4MTAsIDB4MTAsIDAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDUxLCA1MSwgNiwgMHgxMCwgMHgxMCwgMiwgMSksCisJUElOX0ZJRUxEX0JBU0UoNTIsIDUyLCA2LCAweDEwLCAweDEwLCAzLCAxKSwKKwlQSU5fRklFTERfQkFTRSg1MywgNTMsIDYsIDB4MTAsIDB4MTAsIDQsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDU0LCA1NCwgNiwgMHgxMCwgMHgxMCwgNSwgMSksCisJUElOX0ZJRUxEX0JBU0UoNTUsIDU1LCA2LCAweDEwLCAweDEwLCA2LCAxKSwKKwlQSU5fRklFTERfQkFTRSg1NiwgNTYsIDYsIDB4MTAsIDB4MTAsIDEsIDEpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfcGluX2ZpZWxkX2NhbGMgbXQ3OTgxX3Bpbl9zbXRfcmFuZ2VbXSA9IHsKKwlQSU5fRklFTERfQkFTRSgwLCAwLCAxLCAweDYwLCAweDEwLCAxLCAxKSwKKwlQSU5fRklFTERfQkFTRSgxLCAxLCAxLCAweDYwLCAweDEwLCAwLCAxKSwKKwlQSU5fRklFTERfQkFTRSgyLCAyLCA1LCAweDkwLCAweDEwLCA2LCAxKSwKKwlQSU5fRklFTERfQkFTRSgzLCAzLCA0LCAweDgwLCAweDEwLCA2LCAxKSwKKwlQSU5fRklFTERfQkFTRSg0LCA0LCA0LCAweDgwLCAweDEwLCAyLCAxKSwKKwlQSU5fRklFTERfQkFTRSg1LCA1LCA0LCAweDgwLCAweDEwLCAxLCAxKSwKKwlQSU5fRklFTERfQkFTRSg2LCA2LCA0LCAweDgwLCAweDEwLCAzLCAxKSwKKwlQSU5fRklFTERfQkFTRSg3LCA3LCA0LCAweDgwLCAweDEwLCAwLCAxKSwKKwlQSU5fRklFTERfQkFTRSg4LCA4LCA0LCAweDgwLCAweDEwLCA0LCAxKSwKKwlQSU5fRklFTERfQkFTRSg5LCA5LCA0LCAweDgwLCAweDEwLCA5LCAxKSwKKworCVBJTl9GSUVMRF9CQVNFKDEwLCAxMCwgNSwgMHg5MCwgMHgxMCwgOCwgMSksCisJUElOX0ZJRUxEX0JBU0UoMTEsIDExLCA1LCAweDkwLCAweDEwLCAxMCwgMSksCisJUElOX0ZJRUxEX0JBU0UoMTIsIDEyLCA1LCAweDkwLCAweDEwLCA3LCAxKSwKKwlQSU5fRklFTERfQkFTRSgxMywgMTMsIDUsIDB4OTAsIDB4MTAsIDExLCAxKSwKKworCVBJTl9GSUVMRF9CQVNFKDE0LCAxNCwgNCwgMHg4MCwgMHgxMCwgOCwgMSksCisKKwlQSU5fRklFTERfQkFTRSgxNSwgMTUsIDIsIDB4OTAsIDB4MTAsIDAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDE2LCAxNiwgMiwgMHg5MCwgMHgxMCwgMSwgMSksCisJUElOX0ZJRUxEX0JBU0UoMTcsIDE3LCAyLCAweDkwLCAweDEwLCA1LCAxKSwKKwlQSU5fRklFTERfQkFTRSgxOCwgMTgsIDIsIDB4OTAsIDB4MTAsIDQsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDE5LCAxOSwgMiwgMHg5MCwgMHgxMCwgMiwgMSksCisJUElOX0ZJRUxEX0JBU0UoMjAsIDIwLCAyLCAweDkwLCAweDEwLCAzLCAxKSwKKwlQSU5fRklFTERfQkFTRSgyMSwgMjEsIDIsIDB4OTAsIDB4MTAsIDYsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDIyLCAyMiwgMiwgMHg5MCwgMHgxMCwgNywgMSksCisJUElOX0ZJRUxEX0JBU0UoMjMsIDIzLCAyLCAweDkwLCAweDEwLCAxMCwgMSksCisJUElOX0ZJRUxEX0JBU0UoMjQsIDI0LCAyLCAweDkwLCAweDEwLCA5LCAxKSwKKwlQSU5fRklFTERfQkFTRSgyNSwgMjUsIDIsIDB4OTAsIDB4MTAsIDgsIDEpLAorCisJUElOX0ZJRUxEX0JBU0UoMjYsIDI2LCA1LCAweDkwLCAweDEwLCAwLCAxKSwKKwlQSU5fRklFTERfQkFTRSgyNywgMjcsIDUsIDB4OTAsIDB4MTAsIDQsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDI4LCAyOCwgNSwgMHg5MCwgMHgxMCwgMywgMSksCisJUElOX0ZJRUxEX0JBU0UoMjksIDI5LCA1LCAweDkwLCAweDEwLCAxLCAxKSwKKwlQSU5fRklFTERfQkFTRSgzMCwgMzAsIDUsIDB4OTAsIDB4MTAsIDIsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDMxLCAzMSwgNSwgMHg5MCwgMHgxMCwgNSwgMSksCisKKwlQSU5fRklFTERfQkFTRSgzMiwgMzIsIDEsIDB4NjAsIDB4MTAsIDIsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDMzLCAzMywgMSwgMHg2MCwgMHgxMCwgMywgMSksCisKKwlQSU5fRklFTERfQkFTRSgzNCwgMzQsIDQsIDB4ODAsIDB4MTAsIDUsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDM1LCAzNSwgNCwgMHg4MCwgMHgxMCwgNywgMSksCisKKwlQSU5fRklFTERfQkFTRSgzNiwgMzYsIDMsIDB4NjAsIDB4MTAsIDIsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDM3LCAzNywgMywgMHg2MCwgMHgxMCwgMywgMSksCisJUElOX0ZJRUxEX0JBU0UoMzgsIDM4LCAzLCAweDYwLCAweDEwLCAwLCAxKSwKKwlQSU5fRklFTERfQkFTRSgzOSwgMzksIDMsIDB4NjAsIDB4MTAsIDEsIDEpLAorCisJUElOX0ZJRUxEX0JBU0UoNDAsIDQwLCA3LCAweDcwLCAweDEwLCAxLCAxKSwKKwlQSU5fRklFTERfQkFTRSg0MSwgNDEsIDcsIDB4NzAsIDB4MTAsIDAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDQyLCA0MiwgNywgMHg3MCwgMHgxMCwgOSwgMSksCisJUElOX0ZJRUxEX0JBU0UoNDMsIDQzLCA3LCAweDcwLCAweDEwLCA3LCAxKSwKKwlQSU5fRklFTERfQkFTRSg0NCwgNDQsIDcsIDB4MzAsIDB4MTAsIDgsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDQ1LCA0NSwgNywgMHg3MCwgMHgxMCwgMywgMSksCisJUElOX0ZJRUxEX0JBU0UoNDYsIDQ2LCA3LCAweDcwLCAweDEwLCA0LCAxKSwKKwlQSU5fRklFTERfQkFTRSg0NywgNDcsIDcsIDB4NzAsIDB4MTAsIDUsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDQ4LCA0OCwgNywgMHg3MCwgMHgxMCwgNiwgMSksCisJUElOX0ZJRUxEX0JBU0UoNDksIDQ5LCA3LCAweDcwLCAweDEwLCAyLCAxKSwKKworCVBJTl9GSUVMRF9CQVNFKDUwLCA1MCwgNiwgMHg1MCwgMHgxMCwgMCwgMSksCisJUElOX0ZJRUxEX0JBU0UoNTEsIDUxLCA2LCAweDUwLCAweDEwLCAyLCAxKSwKKwlQSU5fRklFTERfQkFTRSg1MiwgNTIsIDYsIDB4NTAsIDB4MTAsIDMsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDUzLCA1MywgNiwgMHg1MCwgMHgxMCwgNCwgMSksCisJUElOX0ZJRUxEX0JBU0UoNTQsIDU0LCA2LCAweDUwLCAweDEwLCA1LCAxKSwKKwlQSU5fRklFTERfQkFTRSg1NSwgNTUsIDYsIDB4NTAsIDB4MTAsIDYsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDU2LCA1NiwgNiwgMHg1MCwgMHgxMCwgMSwgMSksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19waW5fZmllbGRfY2FsYyBtdDc5ODFfcGluX3B1X3JhbmdlW10gPSB7CisJUElOX0ZJRUxEX0JBU0UoNDAsIDQwLCA3LCAweDUwLCAweDEwLCAxLCAxKSwKKwlQSU5fRklFTERfQkFTRSg0MSwgNDEsIDcsIDB4NTAsIDB4MTAsIDAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDQyLCA0MiwgNywgMHg1MCwgMHgxMCwgOSwgMSksCisJUElOX0ZJRUxEX0JBU0UoNDMsIDQzLCA3LCAweDUwLCAweDEwLCA3LCAxKSwKKwlQSU5fRklFTERfQkFTRSg0NCwgNDQsIDcsIDB4NTAsIDB4MTAsIDgsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDQ1LCA0NSwgNywgMHg1MCwgMHgxMCwgMywgMSksCisJUElOX0ZJRUxEX0JBU0UoNDYsIDQ2LCA3LCAweDUwLCAweDEwLCA0LCAxKSwKKwlQSU5fRklFTERfQkFTRSg0NywgNDcsIDcsIDB4NTAsIDB4MTAsIDUsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDQ4LCA0OCwgNywgMHg1MCwgMHgxMCwgNiwgMSksCisJUElOX0ZJRUxEX0JBU0UoNDksIDQ5LCA3LCAweDUwLCAweDEwLCAyLCAxKSwKKworCVBJTl9GSUVMRF9CQVNFKDUwLCA1MCwgNiwgMHgzMCwgMHgxMCwgMCwgMSksCisJUElOX0ZJRUxEX0JBU0UoNTEsIDUxLCA2LCAweDMwLCAweDEwLCAyLCAxKSwKKwlQSU5fRklFTERfQkFTRSg1MiwgNTIsIDYsIDB4MzAsIDB4MTAsIDMsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDUzLCA1MywgNiwgMHgzMCwgMHgxMCwgNCwgMSksCisJUElOX0ZJRUxEX0JBU0UoNTQsIDU0LCA2LCAweDMwLCAweDEwLCA1LCAxKSwKKwlQSU5fRklFTERfQkFTRSg1NSwgNTUsIDYsIDB4MzAsIDB4MTAsIDYsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDU2LCA1NiwgNiwgMHgzMCwgMHgxMCwgMSwgMSksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19waW5fZmllbGRfY2FsYyBtdDc5ODFfcGluX3BkX3JhbmdlW10gPSB7CisJUElOX0ZJRUxEX0JBU0UoNDAsIDQwLCA3LCAweDQwLCAweDEwLCAxLCAxKSwKKwlQSU5fRklFTERfQkFTRSg0MSwgNDEsIDcsIDB4NDAsIDB4MTAsIDAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDQyLCA0MiwgNywgMHg0MCwgMHgxMCwgOSwgMSksCisJUElOX0ZJRUxEX0JBU0UoNDMsIDQzLCA3LCAweDQwLCAweDEwLCA3LCAxKSwKKwlQSU5fRklFTERfQkFTRSg0NCwgNDQsIDcsIDB4NDAsIDB4MTAsIDgsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDQ1LCA0NSwgNywgMHg0MCwgMHgxMCwgMywgMSksCisJUElOX0ZJRUxEX0JBU0UoNDYsIDQ2LCA3LCAweDQwLCAweDEwLCA0LCAxKSwKKwlQSU5fRklFTERfQkFTRSg0NywgNDcsIDcsIDB4NDAsIDB4MTAsIDUsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDQ4LCA0OCwgNywgMHg0MCwgMHgxMCwgNiwgMSksCisJUElOX0ZJRUxEX0JBU0UoNDksIDQ5LCA3LCAweDQwLCAweDEwLCAyLCAxKSwKKworCVBJTl9GSUVMRF9CQVNFKDUwLCA1MCwgNiwgMHgyMCwgMHgxMCwgMCwgMSksCisJUElOX0ZJRUxEX0JBU0UoNTEsIDUxLCA2LCAweDIwLCAweDEwLCAyLCAxKSwKKwlQSU5fRklFTERfQkFTRSg1MiwgNTIsIDYsIDB4MjAsIDB4MTAsIDMsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDUzLCA1MywgNiwgMHgyMCwgMHgxMCwgNCwgMSksCisJUElOX0ZJRUxEX0JBU0UoNTQsIDU0LCA2LCAweDIwLCAweDEwLCA1LCAxKSwKKwlQSU5fRklFTERfQkFTRSg1NSwgNTUsIDYsIDB4MjAsIDB4MTAsIDYsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDU2LCA1NiwgNiwgMHgyMCwgMHgxMCwgMSwgMSksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19waW5fZmllbGRfY2FsYyBtdDc5ODFfcGluX2Rydl9yYW5nZVtdID0geworCVBJTl9GSUVMRF9CQVNFKDAsIDAsIDEsIDB4MDAsIDB4MTAsIDMsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDEsIDEsIDEsIDB4MDAsIDB4MTAsIDAsIDMpLAorCisJUElOX0ZJRUxEX0JBU0UoMiwgMiwgNSwgMHgwMCwgMHgxMCwgMTgsIDMpLAorCisJUElOX0ZJRUxEX0JBU0UoMywgMywgNCwgMHgwMCwgMHgxMCwgMTgsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDQsIDQsIDQsIDB4MDAsIDB4MTAsIDYsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDUsIDUsIDQsIDB4MDAsIDB4MTAsIDMsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDYsIDYsIDQsIDB4MDAsIDB4MTAsIDksIDMpLAorCVBJTl9GSUVMRF9CQVNFKDcsIDcsIDQsIDB4MDAsIDB4MTAsIDAsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDgsIDgsIDQsIDB4MDAsIDB4MTAsIDEyLCAzKSwKKwlQSU5fRklFTERfQkFTRSg5LCA5LCA0LCAweDAwLCAweDEwLCAyNywgMyksCisKKwlQSU5fRklFTERfQkFTRSgxMCwgMTAsIDUsIDB4MDAsIDB4MTAsIDI0LCAzKSwKKwlQSU5fRklFTERfQkFTRSgxMSwgMTEsIDUsIDB4MDAsIDB4MTAsIDAsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDEyLCAxMiwgNSwgMHgwMCwgMHgxMCwgMjEsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDEzLCAxMywgNSwgMHgwMCwgMHgxMCwgMywgMyksCisKKwlQSU5fRklFTERfQkFTRSgxNCwgMTQsIDQsIDB4MDAsIDB4MTAsIDI3LCAzKSwKKworCVBJTl9GSUVMRF9CQVNFKDE1LCAxNSwgMiwgMHgwMCwgMHgxMCwgMCwgMyksCisJUElOX0ZJRUxEX0JBU0UoMTYsIDE2LCAyLCAweDAwLCAweDEwLCAzLCAzKSwKKwlQSU5fRklFTERfQkFTRSgxNywgMTcsIDIsIDB4MDAsIDB4MTAsIDE1LCAzKSwKKwlQSU5fRklFTERfQkFTRSgxOCwgMTgsIDIsIDB4MDAsIDB4MTAsIDEyLCAzKSwKKwlQSU5fRklFTERfQkFTRSgxOSwgMTksIDIsIDB4MDAsIDB4MTAsIDYsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDIwLCAyMCwgMiwgMHgwMCwgMHgxMCwgOSwgMyksCisJUElOX0ZJRUxEX0JBU0UoMjEsIDIxLCAyLCAweDAwLCAweDEwLCAxOCwgMyksCisJUElOX0ZJRUxEX0JBU0UoMjIsIDIyLCAyLCAweDAwLCAweDEwLCAyMSwgMyksCisJUElOX0ZJRUxEX0JBU0UoMjMsIDIzLCAyLCAweDAwLCAweDEwLCAwLCAzKSwKKwlQSU5fRklFTERfQkFTRSgyNCwgMjQsIDIsIDB4MDAsIDB4MTAsIDI3LCAzKSwKKwlQSU5fRklFTERfQkFTRSgyNSwgMjUsIDIsIDB4MDAsIDB4MTAsIDI0LCAzKSwKKworCVBJTl9GSUVMRF9CQVNFKDI2LCAyNiwgNSwgMHgwMCwgMHgxMCwgMCwgMyksCisJUElOX0ZJRUxEX0JBU0UoMjcsIDI3LCA1LCAweDAwLCAweDEwLCAxMiwgMyksCisJUElOX0ZJRUxEX0JBU0UoMjgsIDI4LCA1LCAweDAwLCAweDEwLCA5LCAzKSwKKwlQSU5fRklFTERfQkFTRSgyOSwgMjksIDUsIDB4MDAsIDB4MTAsIDMsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDMwLCAzMCwgNSwgMHgwMCwgMHgxMCwgNiwgMyksCisJUElOX0ZJRUxEX0JBU0UoMzEsIDMxLCA1LCAweDAwLCAweDEwLCAxNSwgMyksCisKKwlQSU5fRklFTERfQkFTRSgzMiwgMzIsIDEsIDB4MDAsIDB4MTAsIDksIDMpLAorCVBJTl9GSUVMRF9CQVNFKDMzLCAzMywgMSwgMHgwMCwgMHgxMCwgMTIsIDMpLAorCisJUElOX0ZJRUxEX0JBU0UoMzQsIDM0LCA0LCAweDAwLCAweDEwLCAxNSwgMyksCisJUElOX0ZJRUxEX0JBU0UoMzUsIDM1LCA0LCAweDAwLCAweDEwLCAyMSwgMyksCisKKwlQSU5fRklFTERfQkFTRSgzNiwgMzYsIDMsIDB4MDAsIDB4MTAsIDYsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDM3LCAzNywgMywgMHgwMCwgMHgxMCwgOSwgMyksCisJUElOX0ZJRUxEX0JBU0UoMzgsIDM4LCAzLCAweDAwLCAweDEwLCAwLCAzKSwKKwlQSU5fRklFTERfQkFTRSgzOSwgMzksIDMsIDB4MDAsIDB4MTAsIDMsIDMpLAorCisJUElOX0ZJRUxEX0JBU0UoNDAsIDQwLCA3LCAweDAwLCAweDEwLCAzLCAzKSwKKwlQSU5fRklFTERfQkFTRSg0MSwgNDEsIDcsIDB4MDAsIDB4MTAsIDAsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDQyLCA0MiwgNywgMHgwMCwgMHgxMCwgMjcsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDQzLCA0MywgNywgMHgwMCwgMHgxMCwgMjEsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDQ0LCA0NCwgNywgMHgwMCwgMHgxMCwgMjQsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDQ1LCA0NSwgNywgMHgwMCwgMHgxMCwgOSwgMyksCisJUElOX0ZJRUxEX0JBU0UoNDYsIDQ2LCA3LCAweDAwLCAweDEwLCAxMiwgMyksCisJUElOX0ZJRUxEX0JBU0UoNDcsIDQ3LCA3LCAweDAwLCAweDEwLCAxNSwgMyksCisJUElOX0ZJRUxEX0JBU0UoNDgsIDQ4LCA3LCAweDAwLCAweDEwLCAxOCwgMyksCisJUElOX0ZJRUxEX0JBU0UoNDksIDQ5LCA3LCAweDAwLCAweDEwLCA2LCAzKSwKKworCVBJTl9GSUVMRF9CQVNFKDUwLCA1MCwgNiwgMHgwMCwgMHgxMCwgMCwgMyksCisJUElOX0ZJRUxEX0JBU0UoNTEsIDUxLCA2LCAweDAwLCAweDEwLCA2LCAzKSwKKwlQSU5fRklFTERfQkFTRSg1MiwgNTIsIDYsIDB4MDAsIDB4MTAsIDksIDMpLAorCVBJTl9GSUVMRF9CQVNFKDUzLCA1MywgNiwgMHgwMCwgMHgxMCwgMTIsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDU0LCA1NCwgNiwgMHgwMCwgMHgxMCwgMTUsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDU1LCA1NSwgNiwgMHgwMCwgMHgxMCwgMTgsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDU2LCA1NiwgNiwgMHgwMCwgMHgxMCwgMywgMyksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19waW5fZmllbGRfY2FsYyBtdDc5ODFfcGluX3B1cGRfcmFuZ2VbXSA9IHsKKwlQSU5fRklFTERfQkFTRSgwLCAwLCAxLCAweDIwLCAweDEwLCAxLCAxKSwKKwlQSU5fRklFTERfQkFTRSgxLCAxLCAxLCAweDIwLCAweDEwLCAwLCAxKSwKKwlQSU5fRklFTERfQkFTRSgyLCAyLCA1LCAweDMwLCAweDEwLCA2LCAxKSwKKwlQSU5fRklFTERfQkFTRSgzLCAzLCA0LCAweDMwLCAweDEwLCA2LCAxKSwKKwlQSU5fRklFTERfQkFTRSg0LCA0LCA0LCAweDMwLCAweDEwLCAyLCAxKSwKKwlQSU5fRklFTERfQkFTRSg1LCA1LCA0LCAweDMwLCAweDEwLCAxLCAxKSwKKwlQSU5fRklFTERfQkFTRSg2LCA2LCA0LCAweDMwLCAweDEwLCAzLCAxKSwKKwlQSU5fRklFTERfQkFTRSg3LCA3LCA0LCAweDMwLCAweDEwLCAwLCAxKSwKKwlQSU5fRklFTERfQkFTRSg4LCA4LCA0LCAweDMwLCAweDEwLCA0LCAxKSwKKwlQSU5fRklFTERfQkFTRSg5LCA5LCA0LCAweDMwLCAweDEwLCA5LCAxKSwKKworCVBJTl9GSUVMRF9CQVNFKDEwLCAxMCwgNSwgMHgzMCwgMHgxMCwgOCwgMSksCisJUElOX0ZJRUxEX0JBU0UoMTEsIDExLCA1LCAweDMwLCAweDEwLCAxMCwgMSksCisJUElOX0ZJRUxEX0JBU0UoMTIsIDEyLCA1LCAweDMwLCAweDEwLCA3LCAxKSwKKwlQSU5fRklFTERfQkFTRSgxMywgMTMsIDUsIDB4MzAsIDB4MTAsIDExLCAxKSwKKworCVBJTl9GSUVMRF9CQVNFKDE0LCAxNCwgNCwgMHgzMCwgMHgxMCwgOCwgMSksCisKKwlQSU5fRklFTERfQkFTRSgxNSwgMTUsIDIsIDB4MzAsIDB4MTAsIDAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDE2LCAxNiwgMiwgMHgzMCwgMHgxMCwgMSwgMSksCisJUElOX0ZJRUxEX0JBU0UoMTcsIDE3LCAyLCAweDMwLCAweDEwLCA1LCAxKSwKKwlQSU5fRklFTERfQkFTRSgxOCwgMTgsIDIsIDB4MzAsIDB4MTAsIDQsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDE5LCAxOSwgMiwgMHgzMCwgMHgxMCwgMiwgMSksCisJUElOX0ZJRUxEX0JBU0UoMjAsIDIwLCAyLCAweDkwLCAweDEwLCAzLCAxKSwKKwlQSU5fRklFTERfQkFTRSgyMSwgMjEsIDIsIDB4MzAsIDB4MTAsIDYsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDIyLCAyMiwgMiwgMHgzMCwgMHgxMCwgNywgMSksCisJUElOX0ZJRUxEX0JBU0UoMjMsIDIzLCAyLCAweDMwLCAweDEwLCAxMCwgMSksCisJUElOX0ZJRUxEX0JBU0UoMjQsIDI0LCAyLCAweDMwLCAweDEwLCA5LCAxKSwKKwlQSU5fRklFTERfQkFTRSgyNSwgMjUsIDIsIDB4MzAsIDB4MTAsIDgsIDEpLAorCisJUElOX0ZJRUxEX0JBU0UoMjYsIDI2LCA1LCAweDMwLCAweDEwLCAwLCAxKSwKKwlQSU5fRklFTERfQkFTRSgyNywgMjcsIDUsIDB4MzAsIDB4MTAsIDQsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDI4LCAyOCwgNSwgMHgzMCwgMHgxMCwgMywgMSksCisJUElOX0ZJRUxEX0JBU0UoMjksIDI5LCA1LCAweDMwLCAweDEwLCAxLCAxKSwKKwlQSU5fRklFTERfQkFTRSgzMCwgMzAsIDUsIDB4MzAsIDB4MTAsIDIsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDMxLCAzMSwgNSwgMHgzMCwgMHgxMCwgNSwgMSksCisKKwlQSU5fRklFTERfQkFTRSgzMiwgMzIsIDEsIDB4MjAsIDB4MTAsIDIsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDMzLCAzMywgMSwgMHgyMCwgMHgxMCwgMywgMSksCisKKwlQSU5fRklFTERfQkFTRSgzNCwgMzQsIDQsIDB4MzAsIDB4MTAsIDUsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDM1LCAzNSwgNCwgMHgzMCwgMHgxMCwgNywgMSksCisKKwlQSU5fRklFTERfQkFTRSgzNiwgMzYsIDMsIDB4MjAsIDB4MTAsIDIsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDM3LCAzNywgMywgMHgyMCwgMHgxMCwgMywgMSksCisJUElOX0ZJRUxEX0JBU0UoMzgsIDM4LCAzLCAweDIwLCAweDEwLCAwLCAxKSwKKwlQSU5fRklFTERfQkFTRSgzOSwgMzksIDMsIDB4MjAsIDB4MTAsIDEsIDEpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfcGluX2ZpZWxkX2NhbGMgbXQ3OTgxX3Bpbl9yMF9yYW5nZVtdID0geworCVBJTl9GSUVMRF9CQVNFKDAsIDAsIDEsIDB4MzAsIDB4MTAsIDEsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDEsIDEsIDEsIDB4MzAsIDB4MTAsIDAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDIsIDIsIDUsIDB4NDAsIDB4MTAsIDYsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDMsIDMsIDQsIDB4NDAsIDB4MTAsIDYsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDQsIDQsIDQsIDB4NDAsIDB4MTAsIDIsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDUsIDUsIDQsIDB4NDAsIDB4MTAsIDEsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDYsIDYsIDQsIDB4NDAsIDB4MTAsIDMsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDcsIDcsIDQsIDB4NDAsIDB4MTAsIDAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDgsIDgsIDQsIDB4NDAsIDB4MTAsIDQsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDksIDksIDQsIDB4NDAsIDB4MTAsIDksIDEpLAorCisJUElOX0ZJRUxEX0JBU0UoMTAsIDEwLCA1LCAweDQwLCAweDEwLCA4LCAxKSwKKwlQSU5fRklFTERfQkFTRSgxMSwgMTEsIDUsIDB4NDAsIDB4MTAsIDEwLCAxKSwKKwlQSU5fRklFTERfQkFTRSgxMiwgMTIsIDUsIDB4NDAsIDB4MTAsIDcsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDEzLCAxMywgNSwgMHg0MCwgMHgxMCwgMTEsIDEpLAorCisJUElOX0ZJRUxEX0JBU0UoMTQsIDE0LCA0LCAweDQwLCAweDEwLCA4LCAxKSwKKworCVBJTl9GSUVMRF9CQVNFKDE1LCAxNSwgMiwgMHg0MCwgMHgxMCwgMCwgMSksCisJUElOX0ZJRUxEX0JBU0UoMTYsIDE2LCAyLCAweDQwLCAweDEwLCAxLCAxKSwKKwlQSU5fRklFTERfQkFTRSgxNywgMTcsIDIsIDB4NDAsIDB4MTAsIDUsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDE4LCAxOCwgMiwgMHg0MCwgMHgxMCwgNCwgMSksCisJUElOX0ZJRUxEX0JBU0UoMTksIDE5LCAyLCAweDQwLCAweDEwLCAyLCAxKSwKKwlQSU5fRklFTERfQkFTRSgyMCwgMjAsIDIsIDB4NDAsIDB4MTAsIDMsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDIxLCAyMSwgMiwgMHg0MCwgMHgxMCwgNiwgMSksCisJUElOX0ZJRUxEX0JBU0UoMjIsIDIyLCAyLCAweDQwLCAweDEwLCA3LCAxKSwKKwlQSU5fRklFTERfQkFTRSgyMywgMjMsIDIsIDB4NDAsIDB4MTAsIDEwLCAxKSwKKwlQSU5fRklFTERfQkFTRSgyNCwgMjQsIDIsIDB4NDAsIDB4MTAsIDksIDEpLAorCVBJTl9GSUVMRF9CQVNFKDI1LCAyNSwgMiwgMHg0MCwgMHgxMCwgOCwgMSksCisKKwlQSU5fRklFTERfQkFTRSgyNiwgMjYsIDUsIDB4NDAsIDB4MTAsIDAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDI3LCAyNywgNSwgMHg0MCwgMHgxMCwgNCwgMSksCisJUElOX0ZJRUxEX0JBU0UoMjgsIDI4LCA1LCAweDQwLCAweDEwLCAzLCAxKSwKKwlQSU5fRklFTERfQkFTRSgyOSwgMjksIDUsIDB4NDAsIDB4MTAsIDEsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDMwLCAzMCwgNSwgMHg0MCwgMHgxMCwgMiwgMSksCisJUElOX0ZJRUxEX0JBU0UoMzEsIDMxLCA1LCAweDQwLCAweDEwLCA1LCAxKSwKKworCVBJTl9GSUVMRF9CQVNFKDMyLCAzMiwgMSwgMHgzMCwgMHgxMCwgMiwgMSksCisJUElOX0ZJRUxEX0JBU0UoMzMsIDMzLCAxLCAweDMwLCAweDEwLCAzLCAxKSwKKworCVBJTl9GSUVMRF9CQVNFKDM0LCAzNCwgNCwgMHg0MCwgMHgxMCwgNSwgMSksCisJUElOX0ZJRUxEX0JBU0UoMzUsIDM1LCA0LCAweDQwLCAweDEwLCA3LCAxKSwKKworCVBJTl9GSUVMRF9CQVNFKDM2LCAzNiwgMywgMHgzMCwgMHgxMCwgMiwgMSksCisJUElOX0ZJRUxEX0JBU0UoMzcsIDM3LCAzLCAweDMwLCAweDEwLCAzLCAxKSwKKwlQSU5fRklFTERfQkFTRSgzOCwgMzgsIDMsIDB4MzAsIDB4MTAsIDAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDM5LCAzOSwgMywgMHgzMCwgMHgxMCwgMSwgMSksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19waW5fZmllbGRfY2FsYyBtdDc5ODFfcGluX3IxX3JhbmdlW10gPSB7CisJUElOX0ZJRUxEX0JBU0UoMCwgMCwgMSwgMHg0MCwgMHgxMCwgMSwgMSksCisJUElOX0ZJRUxEX0JBU0UoMSwgMSwgMSwgMHg0MCwgMHgxMCwgMCwgMSksCisJUElOX0ZJRUxEX0JBU0UoMiwgMiwgNSwgMHg1MCwgMHgxMCwgNiwgMSksCisJUElOX0ZJRUxEX0JBU0UoMywgMywgNCwgMHg1MCwgMHgxMCwgNiwgMSksCisJUElOX0ZJRUxEX0JBU0UoNCwgNCwgNCwgMHg1MCwgMHgxMCwgMiwgMSksCisJUElOX0ZJRUxEX0JBU0UoNSwgNSwgNCwgMHg1MCwgMHgxMCwgMSwgMSksCisJUElOX0ZJRUxEX0JBU0UoNiwgNiwgNCwgMHg1MCwgMHgxMCwgMywgMSksCisJUElOX0ZJRUxEX0JBU0UoNywgNywgNCwgMHg1MCwgMHgxMCwgMCwgMSksCisJUElOX0ZJRUxEX0JBU0UoOCwgOCwgNCwgMHg1MCwgMHgxMCwgNCwgMSksCisJUElOX0ZJRUxEX0JBU0UoOSwgOSwgNCwgMHg1MCwgMHgxMCwgOSwgMSksCisKKwlQSU5fRklFTERfQkFTRSgxMCwgMTAsIDUsIDB4NTAsIDB4MTAsIDgsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDExLCAxMSwgNSwgMHg1MCwgMHgxMCwgMTAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDEyLCAxMiwgNSwgMHg1MCwgMHgxMCwgNywgMSksCisJUElOX0ZJRUxEX0JBU0UoMTMsIDEzLCA1LCAweDUwLCAweDEwLCAxMSwgMSksCisKKwlQSU5fRklFTERfQkFTRSgxNCwgMTQsIDQsIDB4NTAsIDB4MTAsIDgsIDEpLAorCisJUElOX0ZJRUxEX0JBU0UoMTUsIDE1LCAyLCAweDUwLCAweDEwLCAwLCAxKSwKKwlQSU5fRklFTERfQkFTRSgxNiwgMTYsIDIsIDB4NTAsIDB4MTAsIDEsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDE3LCAxNywgMiwgMHg1MCwgMHgxMCwgNSwgMSksCisJUElOX0ZJRUxEX0JBU0UoMTgsIDE4LCAyLCAweDUwLCAweDEwLCA0LCAxKSwKKwlQSU5fRklFTERfQkFTRSgxOSwgMTksIDIsIDB4NTAsIDB4MTAsIDIsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDIwLCAyMCwgMiwgMHg1MCwgMHgxMCwgMywgMSksCisJUElOX0ZJRUxEX0JBU0UoMjEsIDIxLCAyLCAweDUwLCAweDEwLCA2LCAxKSwKKwlQSU5fRklFTERfQkFTRSgyMiwgMjIsIDIsIDB4NTAsIDB4MTAsIDcsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDIzLCAyMywgMiwgMHg1MCwgMHgxMCwgMTAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDI0LCAyNCwgMiwgMHg1MCwgMHgxMCwgOSwgMSksCisJUElOX0ZJRUxEX0JBU0UoMjUsIDI1LCAyLCAweDUwLCAweDEwLCA4LCAxKSwKKworCVBJTl9GSUVMRF9CQVNFKDI2LCAyNiwgNSwgMHg1MCwgMHgxMCwgMCwgMSksCisJUElOX0ZJRUxEX0JBU0UoMjcsIDI3LCA1LCAweDUwLCAweDEwLCA0LCAxKSwKKwlQSU5fRklFTERfQkFTRSgyOCwgMjgsIDUsIDB4NTAsIDB4MTAsIDMsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDI5LCAyOSwgNSwgMHg1MCwgMHgxMCwgMSwgMSksCisJUElOX0ZJRUxEX0JBU0UoMzAsIDMwLCA1LCAweDUwLCAweDEwLCAyLCAxKSwKKwlQSU5fRklFTERfQkFTRSgzMSwgMzEsIDUsIDB4NTAsIDB4MTAsIDUsIDEpLAorCisJUElOX0ZJRUxEX0JBU0UoMzIsIDMyLCAxLCAweDQwLCAweDEwLCAyLCAxKSwKKwlQSU5fRklFTERfQkFTRSgzMywgMzMsIDEsIDB4NDAsIDB4MTAsIDMsIDEpLAorCisJUElOX0ZJRUxEX0JBU0UoMzQsIDM0LCA0LCAweDUwLCAweDEwLCA1LCAxKSwKKwlQSU5fRklFTERfQkFTRSgzNSwgMzUsIDQsIDB4NTAsIDB4MTAsIDcsIDEpLAorCisJUElOX0ZJRUxEX0JBU0UoMzYsIDM2LCAzLCAweDQwLCAweDEwLCAyLCAxKSwKKwlQSU5fRklFTERfQkFTRSgzNywgMzcsIDMsIDB4NDAsIDB4MTAsIDMsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDM4LCAzOCwgMywgMHg0MCwgMHgxMCwgMCwgMSksCisJUElOX0ZJRUxEX0JBU0UoMzksIDM5LCAzLCAweDQwLCAweDEwLCAxLCAxKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX3Bpbl9yZWdfY2FsYyBtdDc5ODFfcmVnX2NhbHNbXSA9IHsKKwlbUElOQ1RSTF9QSU5fUkVHX01PREVdID0gTVRLX1JBTkdFKG10Nzk4MV9waW5fbW9kZV9yYW5nZSksCisJW1BJTkNUUkxfUElOX1JFR19ESVJdID0gTVRLX1JBTkdFKG10Nzk4MV9waW5fZGlyX3JhbmdlKSwKKwlbUElOQ1RSTF9QSU5fUkVHX0RJXSA9IE1US19SQU5HRShtdDc5ODFfcGluX2RpX3JhbmdlKSwKKwlbUElOQ1RSTF9QSU5fUkVHX0RPXSA9IE1US19SQU5HRShtdDc5ODFfcGluX2RvX3JhbmdlKSwKKwlbUElOQ1RSTF9QSU5fUkVHX1NNVF0gPSBNVEtfUkFOR0UobXQ3OTgxX3Bpbl9zbXRfcmFuZ2UpLAorCVtQSU5DVFJMX1BJTl9SRUdfSUVTXSA9IE1US19SQU5HRShtdDc5ODFfcGluX2llc19yYW5nZSksCisJW1BJTkNUUkxfUElOX1JFR19QVV0gPSBNVEtfUkFOR0UobXQ3OTgxX3Bpbl9wdV9yYW5nZSksCisJW1BJTkNUUkxfUElOX1JFR19QRF0gPSBNVEtfUkFOR0UobXQ3OTgxX3Bpbl9wZF9yYW5nZSksCisJW1BJTkNUUkxfUElOX1JFR19EUlZdID0gTVRLX1JBTkdFKG10Nzk4MV9waW5fZHJ2X3JhbmdlKSwKKwlbUElOQ1RSTF9QSU5fUkVHX1BVUERdID0gTVRLX1JBTkdFKG10Nzk4MV9waW5fcHVwZF9yYW5nZSksCisJW1BJTkNUUkxfUElOX1JFR19SMF0gPSBNVEtfUkFOR0UobXQ3OTgxX3Bpbl9yMF9yYW5nZSksCisJW1BJTkNUUkxfUElOX1JFR19SMV0gPSBNVEtfUkFOR0UobXQ3OTgxX3Bpbl9yMV9yYW5nZSksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19waW5fZGVzYyBtdDc5ODFfcGluc1tdID0geworCU1UNzk4Nl9QSU4oMCwgIkdQSU9fV1BTIiksCisJTVQ3OTg2X1BJTigxLCAiR1BJT19SRVNFVCIpLAorCU1UNzk4Nl9QSU4oMiwgIlNZU19XQVRDSERPRyIpLAorCU1UNzk4Nl9QSU4oMywgIlBDSUVfUEVSRVNFVF9OIiksCisJTVQ3OTg2X1BJTig0LCAiSlRBR19KVERPIiksCisJTVQ3OTg2X1BJTig1LCAiSlRBR19KVERJIiksCisJTVQ3OTg2X1BJTig2LCAiSlRBR19KVE1TIiksCisJTVQ3OTg2X1BJTig3LCAiSlRBR19KVENMSyIpLAorCU1UNzk4Nl9QSU4oOCwgIkpUQUdfSlRSU1RfTiIpLAorCU1UNzk4Nl9QSU4oOSwgIldPX0pUQUdfSlRETyIpLAorCU1UNzk4Nl9QSU4oMTAsICJXT19KVEFHX0pUREkiKSwKKwlNVDc5ODZfUElOKDExLCAiV09fSlRBR19KVE1TIiksCisJTVQ3OTg2X1BJTigxMiwgIldPX0pUQUdfSlRDTEsiKSwKKwlNVDc5ODZfUElOKDEzLCAiV09fSlRBR19KVFJTVF9OIiksCisJTVQ3OTg2X1BJTigxNCwgIlVTQl9WQlVTIiksCisJTVQ3OTg2X1BJTigxNSwgIlBXTTAiKSwKKwlNVDc5ODZfUElOKDE2LCAiU1BJMF9DTEsiKSwKKwlNVDc5ODZfUElOKDE3LCAiU1BJMF9NT1NJIiksCisJTVQ3OTg2X1BJTigxOCwgIlNQSTBfTUlTTyIpLAorCU1UNzk4Nl9QSU4oMTksICJTUEkwX0NTIiksCisJTVQ3OTg2X1BJTigyMCwgIlNQSTBfSE9MRCIpLAorCU1UNzk4Nl9QSU4oMjEsICJTUEkwX1dQIiksCisJTVQ3OTg2X1BJTigyMiwgIlNQSTFfQ0xLIiksCisJTVQ3OTg2X1BJTigyMywgIlNQSTFfTU9TSSIpLAorCU1UNzk4Nl9QSU4oMjQsICJTUEkxX01JU08iKSwKKwlNVDc5ODZfUElOKDI1LCAiU1BJMV9DUyIpLAorCU1UNzk4Nl9QSU4oMjYsICJTUEkyX0NMSyIpLAorCU1UNzk4Nl9QSU4oMjcsICJTUEkyX01PU0kiKSwKKwlNVDc5ODZfUElOKDI4LCAiU1BJMl9NSVNPIiksCisJTVQ3OTg2X1BJTigyOSwgIlNQSTJfQ1MiKSwKKwlNVDc5ODZfUElOKDMwLCAiU1BJMl9IT0xEIiksCisJTVQ3OTg2X1BJTigzMSwgIlNQSTJfV1AiKSwKKwlNVDc5ODZfUElOKDMyLCAiVUFSVDBfUlhEIiksCisJTVQ3OTg2X1BJTigzMywgIlVBUlQwX1RYRCIpLAorCU1UNzk4Nl9QSU4oMzQsICJQQ0lFX0NMS19SRVEiKSwKKwlNVDc5ODZfUElOKDM1LCAiUENJRV9XQUtFX04iKSwKKwlNVDc5ODZfUElOKDM2LCAiU01JX01EQyIpLAorCU1UNzk4Nl9QSU4oMzcsICJTTUlfTURJTyIpLAorCU1UNzk4Nl9QSU4oMzgsICJHQkVfSU5UIiksCisJTVQ3OTg2X1BJTigzOSwgIkdCRV9SRVNFVCIpLAorCU1UNzk4Nl9QSU4oNDAsICJXRl9ESUdfUkVTRVRCIiksCisJTVQ3OTg2X1BJTig0MSwgIldGX0NCQV9SRVNFVEIiKSwKKwlNVDc5ODZfUElOKDQyLCAiV0ZfWE9fUkVRIiksCisJTVQ3OTg2X1BJTig0MywgIldGX1RPUF9DTEsiKSwKKwlNVDc5ODZfUElOKDQ0LCAiV0ZfVE9QX0RBVEEiKSwKKwlNVDc5ODZfUElOKDQ1LCAiV0ZfSEIxIiksCisJTVQ3OTg2X1BJTig0NiwgIldGX0hCMiIpLAorCU1UNzk4Nl9QSU4oNDcsICJXRl9IQjMiKSwKKwlNVDc5ODZfUElOKDQ4LCAiV0ZfSEI0IiksCisJTVQ3OTg2X1BJTig0OSwgIldGX0hCMCIpLAorCU1UNzk4Nl9QSU4oNTAsICJXRl9IQjBfQiIpLAorCU1UNzk4Nl9QSU4oNTEsICJXRl9IQjUiKSwKKwlNVDc5ODZfUElOKDUyLCAiV0ZfSEI2IiksCisJTVQ3OTg2X1BJTig1MywgIldGX0hCNyIpLAorCU1UNzk4Nl9QSU4oNTQsICJXRl9IQjgiKSwKKwlNVDc5ODZfUElOKDU1LCAiV0ZfSEI5IiksCisJTVQ3OTg2X1BJTig1NiwgIldGX0hCMTAiKSwKK307CisKKy8qIExpc3QgYWxsIGdyb3VwcyBjb25zaXN0aW5nIG9mIHRoZXNlIHBpbnMgZGVkaWNhdGVkIHRvIHRoZSBlbmFibGVtZW50IG9mCisgKiBjZXJ0YWluIGhhcmR3YXJlIGJsb2NrIGFuZCB0aGUgY29ycmVzcG9uZGluZyBtb2RlIGZvciBhbGwgb2YgdGhlIHBpbnMuCisgKiBUaGUgaGFyZHdhcmUgcHJvYmFibHkgaGFzIG11bHRpcGxlIGNvbWJpbmF0aW9ucyBvZiB0aGVzZSBwaW5vdXRzLgorICovCisKKy8qIFdBX0FJQ0UgKi8KK3N0YXRpYyBpbnQgbXQ3OTgxX3dhX2FpY2UxX3BpbnNbXSA9IHsgMCwgMSwgfTsKK3N0YXRpYyBpbnQgbXQ3OTgxX3dhX2FpY2UxX2Z1bmNzW10gPSB7IDIsIDIsIH07CisKK3N0YXRpYyBpbnQgbXQ3OTgxX3dhX2FpY2UyX3BpbnNbXSA9IHsgMCwgMSwgfTsKK3N0YXRpYyBpbnQgbXQ3OTgxX3dhX2FpY2UyX2Z1bmNzW10gPSB7IDMsIDMsIH07CisKK3N0YXRpYyBpbnQgbXQ3OTgxX3dhX2FpY2UzX3BpbnNbXSA9IHsgMjgsIDI5LCB9Oworc3RhdGljIGludCBtdDc5ODFfd2FfYWljZTNfZnVuY3NbXSA9IHsgMywgMywgfTsKKworc3RhdGljIGludCBtdDc5ODFfd21fYWljZTFfcGluc1tdID0geyA5LCAxMCwgfTsKK3N0YXRpYyBpbnQgbXQ3OTgxX3dtX2FpY2UxX2Z1bmNzW10gPSB7IDIsIDIsIH07CisKK3N0YXRpYyBpbnQgbXQ3OTgxX3dtX2FpY2UyX3BpbnNbXSA9IHsgMzAsIDMxLCB9Oworc3RhdGljIGludCBtdDc5ODFfd21fYWljZTJfZnVuY3NbXSA9IHsgNSwgNSwgfTsKKworLyogV01fVUFSVCAqLworc3RhdGljIGludCBtdDc5ODFfd21fdWFydF8wX3BpbnNbXSA9IHsgMCwgMSwgfTsKK3N0YXRpYyBpbnQgbXQ3OTgxX3dtX3VhcnRfMF9mdW5jc1tdID0geyA1LCA1LCB9OworCitzdGF0aWMgaW50IG10Nzk4MV93bV91YXJ0XzFfcGluc1tdID0geyAyMCwgMjEsIH07CitzdGF0aWMgaW50IG10Nzk4MV93bV91YXJ0XzFfZnVuY3NbXSA9IHsgNCwgNCwgfTsKKworc3RhdGljIGludCBtdDc5ODFfd21fdWFydF8yX3BpbnNbXSA9IHsgMzAsIDMxLCB9Oworc3RhdGljIGludCBtdDc5ODFfd21fdWFydF8yX2Z1bmNzW10gPSB7IDMsIDMsIH07CisKKy8qIERGRCAqLworc3RhdGljIGludCBtdDc5ODFfZGZkX3BpbnNbXSA9IHsgMCwgMSwgNCwgNSwgfTsKK3N0YXRpYyBpbnQgbXQ3OTgxX2RmZF9mdW5jc1tdID0geyA1LCA1LCA2LCA2LCB9OworCisvKiBTWVNfV0FUQ0hET0cgKi8KK3N0YXRpYyBpbnQgbXQ3OTgxX3dhdGNoZG9nX3BpbnNbXSA9IHsgMiwgfTsKK3N0YXRpYyBpbnQgbXQ3OTgxX3dhdGNoZG9nX2Z1bmNzW10gPSB7IDEsIH07CisKK3N0YXRpYyBpbnQgbXQ3OTgxX3dhdGNoZG9nMV9waW5zW10gPSB7IDEzLCB9Oworc3RhdGljIGludCBtdDc5ODFfd2F0Y2hkb2cxX2Z1bmNzW10gPSB7IDUsIH07CisKKy8qIFBDSUVfUEVSRVNFVF9OICovCitzdGF0aWMgaW50IG10Nzk4MV9wY2llX3BlcmVzZXRfcGluc1tdID0geyAzLCB9Oworc3RhdGljIGludCBtdDc5ODFfcGNpZV9wZXJlc2V0X2Z1bmNzW10gPSB7IDEsIH07CisKKy8qIEpUQUcgKi8KK3N0YXRpYyBpbnQgbXQ3OTgxX2p0YWdfcGluc1tdID0geyA0LCA1LCA2LCA3LCA4LCB9Oworc3RhdGljIGludCBtdDc5ODFfanRhZ19mdW5jc1tdID0geyAxLCAxLCAxLCAxLCAxLCB9OworCisvKiBXTV9KVEFHICovCitzdGF0aWMgaW50IG10Nzk4MV93bV9qdGFnXzBfcGluc1tdID0geyA0LCA1LCA2LCA3LCA4LCB9Oworc3RhdGljIGludCBtdDc5ODFfd21fanRhZ18wX2Z1bmNzW10gPSB7IDIsIDIsIDIsIDIsIDIsIH07CisKK3N0YXRpYyBpbnQgbXQ3OTgxX3dtX2p0YWdfMV9waW5zW10gPSB7IDIwLCAyMSwgMjIsIDIzLCAyNCwgfTsKK3N0YXRpYyBpbnQgbXQ3OTgxX3dtX2p0YWdfMV9mdW5jc1tdID0geyA1LCA1LCA1LCA1LCA1LCB9OworCisvKiBXTzBfSlRBRyAqLworc3RhdGljIGludCBtdDc5ODFfd28wX2p0YWdfMF9waW5zW10gPSB7IDksIDEwLCAxMSwgMTIsIDEzLCB9Oworc3RhdGljIGludCBtdDc5ODFfd28wX2p0YWdfMF9mdW5jc1tdID0geyAxLCAxLCAxLCAxLCAxLCB9OworCitzdGF0aWMgaW50IG10Nzk4MV93bzBfanRhZ18xX3BpbnNbXSA9IHsgMjUsIDI2LCAyNywgMjgsIDI5LCB9Oworc3RhdGljIGludCBtdDc5ODFfd28wX2p0YWdfMV9mdW5jc1tdID0geyA1LCA1LCA1LCA1LCA1LCB9OworCisvKiBVQVJUMiAqLworc3RhdGljIGludCBtdDc5ODFfdWFydDJfMF9waW5zW10gPSB7IDQsIDUsIDYsIDcsIH07CitzdGF0aWMgaW50IG10Nzk4MV91YXJ0Ml8wX2Z1bmNzW10gPSB7IDMsIDMsIDMsIDMsIH07CisKKy8qIEdCRV9MRUQwICovCitzdGF0aWMgaW50IG10Nzk4MV9nYmVfbGVkMF9waW5zW10gPSB7IDgsIH07CitzdGF0aWMgaW50IG10Nzk4MV9nYmVfbGVkMF9mdW5jc1tdID0geyAzLCB9OworCisvKiBQVEFfRVhUICovCitzdGF0aWMgaW50IG10Nzk4MV9wdGFfZXh0XzBfcGluc1tdID0geyA0LCA1LCA2LCB9Oworc3RhdGljIGludCBtdDc5ODFfcHRhX2V4dF8wX2Z1bmNzW10gPSB7IDQsIDQsIDQsIH07CisKK3N0YXRpYyBpbnQgbXQ3OTgxX3B0YV9leHRfMV9waW5zW10gPSB7IDIyLCAyMywgMjQsIH07CitzdGF0aWMgaW50IG10Nzk4MV9wdGFfZXh0XzFfZnVuY3NbXSA9IHsgNCwgNCwgNCwgfTsKKworLyogUFdNMiAqLworc3RhdGljIGludCBtdDc5ODFfcHdtMl9waW5zW10gPSB7IDcsIH07CitzdGF0aWMgaW50IG10Nzk4MV9wd20yX2Z1bmNzW10gPSB7IDQsIH07CisKKy8qIE5FVF9XTzBfVUFSVF9UWEQgKi8KK3N0YXRpYyBpbnQgbXQ3OTgxX25ldF93bzBfdWFydF90eGRfMF9waW5zW10gPSB7IDgsIH07CitzdGF0aWMgaW50IG10Nzk4MV9uZXRfd28wX3VhcnRfdHhkXzBfZnVuY3NbXSA9IHsgNCwgfTsKKworc3RhdGljIGludCBtdDc5ODFfbmV0X3dvMF91YXJ0X3R4ZF8xX3BpbnNbXSA9IHsgMTQsIH07CitzdGF0aWMgaW50IG10Nzk4MV9uZXRfd28wX3VhcnRfdHhkXzFfZnVuY3NbXSA9IHsgMywgfTsKKworc3RhdGljIGludCBtdDc5ODFfbmV0X3dvMF91YXJ0X3R4ZF8yX3BpbnNbXSA9IHsgMTUsIH07CitzdGF0aWMgaW50IG10Nzk4MV9uZXRfd28wX3VhcnRfdHhkXzJfZnVuY3NbXSA9IHsgNCwgfTsKKworLyogU1BJMSAqLworc3RhdGljIGludCBtdDc5ODFfc3BpMV8wX3BpbnNbXSA9IHsgNCwgNSwgNiwgNywgfTsKK3N0YXRpYyBpbnQgbXQ3OTgxX3NwaTFfMF9mdW5jc1tdID0geyA1LCA1LCA1LCA1LCB9OworCisvKiBJMkMgKi8KK3N0YXRpYyBpbnQgbXQ3OTgxX2kyYzBfMF9waW5zW10gPSB7IDYsIDcsIH07CitzdGF0aWMgaW50IG10Nzk4MV9pMmMwXzBfZnVuY3NbXSA9IHsgNiwgNiwgfTsKKworc3RhdGljIGludCBtdDc5ODFfaTJjMF8xX3BpbnNbXSA9IHsgMzAsIDMxLCB9Oworc3RhdGljIGludCBtdDc5ODFfaTJjMF8xX2Z1bmNzW10gPSB7IDQsIDQsIH07CisKK3N0YXRpYyBpbnQgbXQ3OTgxX2kyYzBfMl9waW5zW10gPSB7IDM2LCAzNywgfTsKK3N0YXRpYyBpbnQgbXQ3OTgxX2kyYzBfMl9mdW5jc1tdID0geyAyLCAyLCB9OworCitzdGF0aWMgaW50IG10Nzk4MV91Ml9waHlfaTJjX3BpbnNbXSA9IHsgMzAsIDMxLCB9Oworc3RhdGljIGludCBtdDc5ODFfdTJfcGh5X2kyY19mdW5jc1tdID0geyA2LCA2LCB9OworCitzdGF0aWMgaW50IG10Nzk4MV91M19waHlfaTJjX3BpbnNbXSA9IHsgMzIsIDMzLCB9Oworc3RhdGljIGludCBtdDc5ODFfdTNfcGh5X2kyY19mdW5jc1tdID0geyAzLCAzLCB9OworCitzdGF0aWMgaW50IG10Nzk4MV9zZ21paTFfcGh5X2kyY19waW5zW10gPSB7IDMyLCAzMywgfTsKK3N0YXRpYyBpbnQgbXQ3OTgxX3NnbWlpMV9waHlfaTJjX2Z1bmNzW10gPSB7IDIsIDIsIH07CisKK3N0YXRpYyBpbnQgbXQ3OTgxX3NnbWlpMF9waHlfaTJjX3BpbnNbXSA9IHsgMzIsIDMzLCB9Oworc3RhdGljIGludCBtdDc5ODFfc2dtaWkwX3BoeV9pMmNfZnVuY3NbXSA9IHsgNSwgNSwgfTsKKworLyogREZEX05UUlNUICovCitzdGF0aWMgaW50IG10Nzk4MV9kZmRfbnRyc3RfcGluc1tdID0geyA4LCB9Oworc3RhdGljIGludCBtdDc5ODFfZGZkX250cnN0X2Z1bmNzW10gPSB7IDYsIH07CisKKy8qIFBXTTAgKi8KK3N0YXRpYyBpbnQgbXQ3OTgxX3B3bTBfMF9waW5zW10gPSB7IDEzLCB9Oworc3RhdGljIGludCBtdDc5ODFfcHdtMF8wX2Z1bmNzW10gPSB7IDIsIH07CisKK3N0YXRpYyBpbnQgbXQ3OTgxX3B3bTBfMV9waW5zW10gPSB7IDE1LCB9Oworc3RhdGljIGludCBtdDc5ODFfcHdtMF8xX2Z1bmNzW10gPSB7IDEsIH07CisKKy8qIFBXTTEgKi8KK3N0YXRpYyBpbnQgbXQ3OTgxX3B3bTFfMF9waW5zW10gPSB7IDE0LCB9Oworc3RhdGljIGludCBtdDc5ODFfcHdtMV8wX2Z1bmNzW10gPSB7IDIsIH07CisKK3N0YXRpYyBpbnQgbXQ3OTgxX3B3bTFfMV9waW5zW10gPSB7IDE1LCB9Oworc3RhdGljIGludCBtdDc5ODFfcHdtMV8xX2Z1bmNzW10gPSB7IDMsIH07CisKKy8qIEdCRV9MRUQxICovCitzdGF0aWMgaW50IG10Nzk4MV9nYmVfbGVkMV9waW5zW10gPSB7IDEzLCB9Oworc3RhdGljIGludCBtdDc5ODFfZ2JlX2xlZDFfZnVuY3NbXSA9IHsgMywgfTsKKworLyogUENNICovCitzdGF0aWMgaW50IG10Nzk4MV9wY21fcGluc1tdID0geyA5LCAxMCwgMTEsIDEyLCAxMywgMjUgfTsKK3N0YXRpYyBpbnQgbXQ3OTgxX3BjbV9mdW5jc1tdID0geyA0LCA0LCA0LCA0LCA0LCA0LCB9OworCisvKiBVREkgKi8KK3N0YXRpYyBpbnQgbXQ3OTgxX3VkaV9waW5zW10gPSB7IDksIDEwLCAxMSwgMTIsIDEzLCB9Oworc3RhdGljIGludCBtdDc5ODFfdWRpX2Z1bmNzW10gPSB7IDYsIDYsIDYsIDYsIDYsIH07CisKKy8qIERSVl9WQlVTICovCitzdGF0aWMgaW50IG10Nzk4MV9kcnZfdmJ1c19waW5zW10gPSB7IDE0LCB9Oworc3RhdGljIGludCBtdDc5ODFfZHJ2X3ZidXNfZnVuY3NbXSA9IHsgMSwgfTsKKworLyogRU1NQyAqLworc3RhdGljIGludCBtdDc5ODFfZW1tY180NV9waW5zW10gPSB7IDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgfTsKK3N0YXRpYyBpbnQgbXQ3OTgxX2VtbWNfNDVfZnVuY3NbXSA9IHsgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgfTsKKworLyogU05GSSAqLworc3RhdGljIGludCBtdDc5ODFfc25maV9waW5zW10gPSB7IDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIH07CitzdGF0aWMgaW50IG10Nzk4MV9zbmZpX2Z1bmNzW10gPSB7IDMsIDMsIDMsIDMsIDMsIDMsIH07CisKKy8qIFNQSTAgKi8KK3N0YXRpYyBpbnQgbXQ3OTgxX3NwaTBfcGluc1tdID0geyAxNiwgMTcsIDE4LCAxOSwgfTsKK3N0YXRpYyBpbnQgbXQ3OTgxX3NwaTBfZnVuY3NbXSA9IHsgMSwgMSwgMSwgMSwgfTsKKworLyogU1BJMCAqLworc3RhdGljIGludCBtdDc5ODFfc3BpMF93cF9ob2xkX3BpbnNbXSA9IHsgMjAsIDIxLCB9Oworc3RhdGljIGludCBtdDc5ODFfc3BpMF93cF9ob2xkX2Z1bmNzW10gPSB7IDEsIDEsIH07CisKKy8qIFNQSTEgKi8KK3N0YXRpYyBpbnQgbXQ3OTgxX3NwaTFfMV9waW5zW10gPSB7IDIyLCAyMywgMjQsIDI1LCB9Oworc3RhdGljIGludCBtdDc5ODFfc3BpMV8xX2Z1bmNzW10gPSB7IDEsIDEsIDEsIDEsIH07CisKKy8qIFNQSTIgKi8KK3N0YXRpYyBpbnQgbXQ3OTgxX3NwaTJfcGluc1tdID0geyAyNiwgMjcsIDI4LCAyOSwgfTsKK3N0YXRpYyBpbnQgbXQ3OTgxX3NwaTJfZnVuY3NbXSA9IHsgMSwgMSwgMSwgMSwgfTsKKworLyogU1BJMiAqLworc3RhdGljIGludCBtdDc5ODFfc3BpMl93cF9ob2xkX3BpbnNbXSA9IHsgMzAsIDMxLCB9Oworc3RhdGljIGludCBtdDc5ODFfc3BpMl93cF9ob2xkX2Z1bmNzW10gPSB7IDEsIDEsIH07CisKKy8qIFVBUlQxICovCitzdGF0aWMgaW50IG10Nzk4MV91YXJ0MV8wX3BpbnNbXSA9IHsgMTYsIDE3LCAxOCwgMTksIH07CitzdGF0aWMgaW50IG10Nzk4MV91YXJ0MV8wX2Z1bmNzW10gPSB7IDQsIDQsIDQsIDQsIH07CisKK3N0YXRpYyBpbnQgbXQ3OTgxX3VhcnQxXzFfcGluc1tdID0geyAyNiwgMjcsIDI4LCAyOSwgfTsKK3N0YXRpYyBpbnQgbXQ3OTgxX3VhcnQxXzFfZnVuY3NbXSA9IHsgMiwgMiwgMiwgMiwgfTsKKworLyogVUFSVDIgKi8KK3N0YXRpYyBpbnQgbXQ3OTgxX3VhcnQyXzFfcGluc1tdID0geyAyMiwgMjMsIDI0LCAyNSwgfTsKK3N0YXRpYyBpbnQgbXQ3OTgxX3VhcnQyXzFfZnVuY3NbXSA9IHsgMywgMywgMywgMywgfTsKKworLyogVUFSVDAgKi8KK3N0YXRpYyBpbnQgbXQ3OTgxX3VhcnQwX3BpbnNbXSA9IHsgMzIsIDMzLCB9Oworc3RhdGljIGludCBtdDc5ODFfdWFydDBfZnVuY3NbXSA9IHsgMSwgMSwgfTsKKworLyogUENJRV9DTEtfUkVRICovCitzdGF0aWMgaW50IG10Nzk4MV9wY2llX2Nsa19waW5zW10gPSB7IDM0LCB9Oworc3RhdGljIGludCBtdDc5ODFfcGNpZV9jbGtfZnVuY3NbXSA9IHsgMiwgfTsKKworLyogUENJRV9XQUtFX04gKi8KK3N0YXRpYyBpbnQgbXQ3OTgxX3BjaWVfd2FrZV9waW5zW10gPSB7IDM1LCB9Oworc3RhdGljIGludCBtdDc5ODFfcGNpZV93YWtlX2Z1bmNzW10gPSB7IDIsIH07CisKKy8qIE1EQ19NRElPICovCitzdGF0aWMgaW50IG10Nzk4MV9zbWlfbWRjX21kaW9fcGluc1tdID0geyAzNiwgMzcsIH07CitzdGF0aWMgaW50IG10Nzk4MV9zbWlfbWRjX21kaW9fZnVuY3NbXSA9IHsgMSwgMSwgfTsKKworc3RhdGljIGludCBtdDc5ODFfZ2JlX2V4dF9tZGNfbWRpb19waW5zW10gPSB7IDM2LCAzNywgfTsKK3N0YXRpYyBpbnQgbXQ3OTgxX2diZV9leHRfbWRjX21kaW9fZnVuY3NbXSA9IHsgMywgMywgfTsKKworLyogV0YwX01PREUxICovCitzdGF0aWMgaW50IG10Nzk4MV93ZjBfbW9kZTFfcGluc1tdID0geyA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYgfTsKK3N0YXRpYyBpbnQgbXQ3OTgxX3dmMF9tb2RlMV9mdW5jc1tdID0geyAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxIH07CisKKy8qIFdGMF9NT0RFMyAqLworc3RhdGljIGludCBtdDc5ODFfd2YwX21vZGUzX3BpbnNbXSA9IHsgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MSB9Oworc3RhdGljIGludCBtdDc5ODFfd2YwX21vZGUzX2Z1bmNzW10gPSB7IDIsIDIsIDIsIDIsIDIsIDIgfTsKKworLyogV0YyR19MRUQgKi8KK3N0YXRpYyBpbnQgbXQ3OTgxX3dmMmdfbGVkMF9waW5zW10gPSB7IDMwLCB9Oworc3RhdGljIGludCBtdDc5ODFfd2YyZ19sZWQwX2Z1bmNzW10gPSB7IDIsIH07CisKK3N0YXRpYyBpbnQgbXQ3OTgxX3dmMmdfbGVkMV9waW5zW10gPSB7IDM0LCB9Oworc3RhdGljIGludCBtdDc5ODFfd2YyZ19sZWQxX2Z1bmNzW10gPSB7IDEsIH07CisKKy8qIFdGNUdfTEVEICovCitzdGF0aWMgaW50IG10Nzk4MV93ZjVnX2xlZDBfcGluc1tdID0geyAzMSwgfTsKK3N0YXRpYyBpbnQgbXQ3OTgxX3dmNWdfbGVkMF9mdW5jc1tdID0geyAyLCB9OworCitzdGF0aWMgaW50IG10Nzk4MV93ZjVnX2xlZDFfcGluc1tdID0geyAzNSwgfTsKK3N0YXRpYyBpbnQgbXQ3OTgxX3dmNWdfbGVkMV9mdW5jc1tdID0geyAxLCB9OworCisvKiBNVDc1MzFfSU5UICovCitzdGF0aWMgaW50IG10Nzk4MV9tdDc1MzFfaW50X3BpbnNbXSA9IHsgMzgsIH07CitzdGF0aWMgaW50IG10Nzk4MV9tdDc1MzFfaW50X2Z1bmNzW10gPSB7IDEsIH07CisKKy8qIEFOVF9TRUwgKi8KK3N0YXRpYyBpbnQgbXQ3OTgxX2FudF9zZWxfcGluc1tdID0geyAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAzNCwgMzUgfTsKK3N0YXRpYyBpbnQgbXQ3OTgxX2FudF9zZWxfZnVuY3NbXSA9IHsgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiB9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGdyb3VwX2Rlc2MgbXQ3OTgxX2dyb3Vwc1tdID0geworICAgIC8qICBAR1BJTygwLDEpOiBXQV9BSUNFKDIpICovCisgICAgICAgIFBJTkNUUkxfUElOX0dST1VQKCJ3YV9haWNlMSIsIG10Nzk4MV93YV9haWNlMSksCisgICAgLyogIEBHUElPKDAsMSk6IFdBX0FJQ0UoMykgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoIndhX2FpY2UyIiwgbXQ3OTgxX3dhX2FpY2UyKSwKKyAgICAvKiAgQEdQSU8oMCwxKTogV01fVUFSVCg1KSAqLworICAgICAgICBQSU5DVFJMX1BJTl9HUk9VUCgid21fdWFydF8wIiwgbXQ3OTgxX3dtX3VhcnRfMCksCisgICAgLyogIEBHUElPKDAsMSw0LDUpOiBERkQoNikgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoImRmZCIsIG10Nzk4MV9kZmQpLAorICAgIC8qICBAR1BJTygyKTogU1lTX1dBVENIRE9HKDEpICovCisgICAgICAgIFBJTkNUUkxfUElOX0dST1VQKCJ3YXRjaGRvZyIsIG10Nzk4MV93YXRjaGRvZyksCisgICAgLyogIEBHUElPKDMpOiBQQ0lFX1BFUkVTRVRfTigxKSAqLworICAgICAgICBQSU5DVFJMX1BJTl9HUk9VUCgicGNpZV9wZXJlc2V0IiwgbXQ3OTgxX3BjaWVfcGVyZXNldCksCisgICAgLyogIEBHUElPKDQsOCkgSlRBRygxKSAqLworICAgICAgICBQSU5DVFJMX1BJTl9HUk9VUCgianRhZyIsIG10Nzk4MV9qdGFnKSwKKyAgICAvKiAgQEdQSU8oNCw4KSBXTV9KVEFHKDIpICovCisgICAgICAgIFBJTkNUUkxfUElOX0dST1VQKCJ3bV9qdGFnXzAiLCBtdDc5ODFfd21fanRhZ18wKSwKKyAgICAvKglAR1BJTyg5LDEzKSBXTzBfSlRBRygxKSAqLworCVBJTkNUUkxfUElOX0dST1VQKCJ3bzBfanRhZ18wIiwgbXQ3OTgxX3dvMF9qdGFnXzApLAorICAgIC8qICBAR1BJTyg0LDcpIFdNX0pUQUcoMykgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoInVhcnQyXzAiLCBtdDc5ODFfdWFydDJfMCksCisgICAgLyogIEBHUElPKDgpIEdCRV9MRUQwKDMpICovCisgICAgICAgIFBJTkNUUkxfUElOX0dST1VQKCJnYmVfbGVkMCIsIG10Nzk4MV9nYmVfbGVkMCksCisgICAgLyogIEBHUElPKDQsNikgUFRBX0VYVCg0KSAqLworICAgICAgICBQSU5DVFJMX1BJTl9HUk9VUCgicHRhX2V4dF8wIiwgbXQ3OTgxX3B0YV9leHRfMCksCisgICAgLyogIEBHUElPKDcpIFBXTTIoNCkgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoInB3bTIiLCBtdDc5ODFfcHdtMiksCisgICAgLyogIEBHUElPKDgpIE5FVF9XTzBfVUFSVF9UWEQoNCkgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoIm5ldF93bzBfdWFydF90eGRfMCIsIG10Nzk4MV9uZXRfd28wX3VhcnRfdHhkXzApLAorICAgIC8qICBAR1BJTyg0LDcpIFNQSTEoNSkgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoInNwaTFfMCIsIG10Nzk4MV9zcGkxXzApLAorICAgIC8qICBAR1BJTyg2LDcpIEkyQyg1KSAqLworICAgICAgICBQSU5DVFJMX1BJTl9HUk9VUCgiaTJjMF8wIiwgbXQ3OTgxX2kyYzBfMCksCisgICAgLyogIEBHUElPKDAsMSw0LDUpOiBERkRfTlRSU1QoNikgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoImRmZF9udHJzdCIsIG10Nzk4MV9kZmRfbnRyc3QpLAorICAgIC8qICBAR1BJTyg5LDEwKTogV01fQUlDRSgyKSAqLworICAgICAgICBQSU5DVFJMX1BJTl9HUk9VUCgid21fYWljZTEiLCBtdDc5ODFfd21fYWljZTEpLAorICAgIC8qICBAR1BJTygxMyk6IFBXTTAoMikgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoInB3bTBfMCIsIG10Nzk4MV9wd20wXzApLAorICAgIC8qICBAR1BJTygxNSk6IFBXTTAoMSkgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoInB3bTBfMSIsIG10Nzk4MV9wd20wXzEpLAorICAgIC8qICBAR1BJTygxNCk6IFBXTTEoMikgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoInB3bTFfMCIsIG10Nzk4MV9wd20xXzApLAorICAgIC8qICBAR1BJTygxNSk6IFBXTTEoMykgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoInB3bTFfMSIsIG10Nzk4MV9wd20xXzEpLAorICAgIC8qICBAR1BJTygxNCkgTkVUX1dPMF9VQVJUX1RYRCgzKSAqLworICAgICAgICBQSU5DVFJMX1BJTl9HUk9VUCgibmV0X3dvMF91YXJ0X3R4ZF8xIiwgbXQ3OTgxX25ldF93bzBfdWFydF90eGRfMSksCisgICAgLyogIEBHUElPKDE1KSBORVRfV08wX1VBUlRfVFhEKDQpICovCisgICAgICAgIFBJTkNUUkxfUElOX0dST1VQKCJuZXRfd28wX3VhcnRfdHhkXzIiLCBtdDc5ODFfbmV0X3dvMF91YXJ0X3R4ZF8yKSwKKyAgICAvKiAgQEdQSU8oMTMpIEdCRV9MRUQwKDMpICovCisgICAgICAgIFBJTkNUUkxfUElOX0dST1VQKCJnYmVfbGVkMSIsIG10Nzk4MV9nYmVfbGVkMSksCisgICAgLyogIEBHUElPKDksMTMpIFBDTSg0KSAqLworICAgICAgICBQSU5DVFJMX1BJTl9HUk9VUCgicGNtIiwgbXQ3OTgxX3BjbSksCisgICAgLyogIEBHUElPKDEzKTogU1lTX1dBVENIRE9HMSg1KSAqLworICAgICAgICBQSU5DVFJMX1BJTl9HUk9VUCgid2F0Y2hkb2cxIiwgbXQ3OTgxX3dhdGNoZG9nMSksCisgICAgLyogIEBHUElPKDksMTMpIFVESSg0KSAqLworICAgICAgICBQSU5DVFJMX1BJTl9HUk9VUCgidWRpIiwgbXQ3OTgxX3VkaSksCisgICAgLyogIEBHUElPKDE0KSBEUlZfVkJVUygxKSAqLworICAgICAgICBQSU5DVFJMX1BJTl9HUk9VUCgiZHJ2X3ZidXMiLCBtdDc5ODFfZHJ2X3ZidXMpLAorICAgIC8qICBAR1BJTygxNSwyNSk6IEVNTUMoMikgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoImVtbWNfNDUiLCBtdDc5ODFfZW1tY180NSksCisgICAgLyogIEBHUElPKDE2LDIxKTogU05GSSgzKSAqLworICAgICAgICBQSU5DVFJMX1BJTl9HUk9VUCgic25maSIsIG10Nzk4MV9zbmZpKSwKKyAgICAvKiAgQEdQSU8oMTYsMTkpOiBTUEkwKDEpICovCisgICAgICAgIFBJTkNUUkxfUElOX0dST1VQKCJzcGkwIiwgbXQ3OTgxX3NwaTApLAorCS8qICBAR1BJTygyMCwyMSk6IFNQSTAoMSkgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoInNwaTBfd3BfaG9sZCIsIG10Nzk4MV9zcGkwX3dwX2hvbGQpLAorICAgIC8qICBAR1BJTygyMiwyNSkgU1BJMSgxKSAqLworICAgICAgICBQSU5DVFJMX1BJTl9HUk9VUCgic3BpMV8xIiwgbXQ3OTgxX3NwaTFfMSksCisgICAgLyogIEBHUElPKDI2LDI5KTogU1BJMigxKSAqLworICAgICAgICBQSU5DVFJMX1BJTl9HUk9VUCgic3BpMiIsIG10Nzk4MV9zcGkyKSwKKwkvKiAgQEdQSU8oMzAsMzEpOiBTUEkwKDEpICovCisgICAgICAgIFBJTkNUUkxfUElOX0dST1VQKCJzcGkyX3dwX2hvbGQiLCBtdDc5ODFfc3BpMl93cF9ob2xkKSwKKyAgICAvKiAgQEdQSU8oMTYsMTkpOiBVQVJUMSg0KSAqLworICAgICAgICBQSU5DVFJMX1BJTl9HUk9VUCgidWFydDFfMCIsIG10Nzk4MV91YXJ0MV8wKSwKKyAgICAvKiAgQEdQSU8oMjYsMjkpOiBVQVJUMSgyKSAqLworICAgICAgICBQSU5DVFJMX1BJTl9HUk9VUCgidWFydDFfMSIsIG10Nzk4MV91YXJ0MV8xKSwKKyAgICAvKiAgQEdQSU8oMjIsMjUpOiBVQVJUMSgzKSAqLworICAgICAgICBQSU5DVFJMX1BJTl9HUk9VUCgidWFydDJfMSIsIG10Nzk4MV91YXJ0Ml8xKSwKKyAgICAvKiAgQEdQSU8oMjIsMjQpIFBUQV9FWFQoNCkgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoInB0YV9leHRfMSIsIG10Nzk4MV9wdGFfZXh0XzEpLAorICAgIC8qICBAR1BJTygyMCwyMSk6IFdNX1VBUlQoNCkgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoIndtX2F1cnRfMSIsIG10Nzk4MV93bV91YXJ0XzEpLAorICAgIC8qICBAR1BJTygzMCwzMSk6IFdNX1VBUlQoMykgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoIndtX2F1cnRfMiIsIG10Nzk4MV93bV91YXJ0XzIpLAorICAgIC8qICBAR1BJTygyMCwyNCkgV01fSlRBRyg1KSAqLworICAgICAgICBQSU5DVFJMX1BJTl9HUk9VUCgid21fanRhZ18xIiwgbXQ3OTgxX3dtX2p0YWdfMSksCisgICAgLyoJQEdQSU8oMjUsMjkpIFdPMF9KVEFHKDUpICovCisJUElOQ1RSTF9QSU5fR1JPVVAoIndvMF9qdGFnXzEiLCBtdDc5ODFfd28wX2p0YWdfMSksCisgICAgLyogIEBHUElPKDI4LDI5KTogV0FfQUlDRSgzKSAqLworICAgICAgICBQSU5DVFJMX1BJTl9HUk9VUCgid2FfYWljZTMiLCBtdDc5ODFfd2FfYWljZTMpLAorICAgIC8qICBAR1BJTygzMCwzMSk6IFdNX0FJQ0UoNSkgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoIndtX2FpY2UyIiwgbXQ3OTgxX3dtX2FpY2UyKSwKKyAgICAvKiAgQEdQSU8oMzAsMzEpOiBJMkMoNCkgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoImkyYzBfMSIsIG10Nzk4MV9pMmMwXzEpLAorICAgIC8qICBAR1BJTygzMCwzMSk6IEkyQyg2KSAqLworICAgICAgICBQSU5DVFJMX1BJTl9HUk9VUCgidTJfcGh5X2kyYyIsIG10Nzk4MV91Ml9waHlfaTJjKSwKKyAgICAvKiAgQEdQSU8oMzIsMzMpOiBJMkMoMSkgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoInVhcnQwIiwgbXQ3OTgxX3VhcnQwKSwKKyAgICAvKiAgQEdQSU8oMzIsMzMpOiBJMkMoMikgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoInNnbWlpMV9waHlfaTJjIiwgbXQ3OTgxX3NnbWlpMV9waHlfaTJjKSwKKyAgICAvKiAgQEdQSU8oMzIsMzMpOiBJMkMoMykgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoInUzX3BoeV9pMmMiLCBtdDc5ODFfdTNfcGh5X2kyYyksCisgICAgLyogIEBHUElPKDMyLDMzKTogSTJDKDUpICovCisgICAgICAgIFBJTkNUUkxfUElOX0dST1VQKCJzZ21paTBfcGh5X2kyYyIsIG10Nzk4MV9zZ21paTBfcGh5X2kyYyksCisgICAgLyogIEBHUElPKDM0KTogUENJRV9DTEtfUkVRKDIpICovCisgICAgICAgIFBJTkNUUkxfUElOX0dST1VQKCJwY2llX2NsayIsIG10Nzk4MV9wY2llX2NsayksCisgICAgLyogIEBHUElPKDM1KTogUENJRV9XQUtFX04oMikgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoInBjaWVfd2FrZSIsIG10Nzk4MV9wY2llX3dha2UpLAorICAgIC8qICBAR1BJTygzNiwzNyk6IEkyQygyKSAqLworICAgICAgICBQSU5DVFJMX1BJTl9HUk9VUCgiaTJjMF8yIiwgbXQ3OTgxX2kyYzBfMiksCisgICAgLyogIEBHUElPKDM2LDM3KTogTURDX01ESU8oMSkgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoInNtaV9tZGNfbWRpbyIsIG10Nzk4MV9zbWlfbWRjX21kaW8pLAorICAgIC8qICBAR1BJTygzNiwzNyk6IE1EQ19NRElPKDMpICovCisgICAgICAgIFBJTkNUUkxfUElOX0dST1VQKCJnYmVfZXh0X21kY19tZGlvIiwgbXQ3OTgxX2diZV9leHRfbWRjX21kaW8pLAorICAgIC8qICBAR1BJTyg2OSw4NSk6IFdGMF9NT0RFMSgxKSAqLworICAgICAgICBQSU5DVFJMX1BJTl9HUk9VUCgid2YwX21vZGUxIiwgbXQ3OTgxX3dmMF9tb2RlMSksCisgICAgLyogIEBHUElPKDc0LDgwKTogV0YwX01PREUzKDMpICovCisgICAgICAgIFBJTkNUUkxfUElOX0dST1VQKCJ3ZjBfbW9kZTMiLCBtdDc5ODFfd2YwX21vZGUzKSwKKyAgICAvKiAgQEdQSU8oMzApOiBXRjJHX0xFRCgyKSAqLworICAgICAgICBQSU5DVFJMX1BJTl9HUk9VUCgid2YyZ19sZWQwIiwgbXQ3OTgxX3dmMmdfbGVkMCksCisgICAgLyogIEBHUElPKDM0KTogV0YyR19MRUQoMSkgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoIndmMmdfbGVkMSIsIG10Nzk4MV93ZjJnX2xlZDEpLAorICAgIC8qICBAR1BJTygzMSk6IFdGNUdfTEVEKDIpICovCisgICAgICAgIFBJTkNUUkxfUElOX0dST1VQKCJ3ZjVnX2xlZDAiLCBtdDc5ODFfd2Y1Z19sZWQwKSwKKyAgICAvKiAgQEdQSU8oMzUpOiBXRjVHX0xFRCgxKSAqLworICAgICAgICBQSU5DVFJMX1BJTl9HUk9VUCgid2Y1Z19sZWQxIiwgbXQ3OTgxX3dmNWdfbGVkMSksCisgICAgLyogIEBHUElPKDM4KTogTVQ3NTMxX0lOVCgxKSAqLworICAgICAgICBQSU5DVFJMX1BJTl9HUk9VUCgibXQ3NTMxX2ludCIsIG10Nzk4MV9tdDc1MzFfaW50KSwKKyAgICAvKiAgQEdQSU8oMTQsMTUsMjYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMzQsMzUpOiBBTlRfU0VMKDEpICovCisgICAgICAgIFBJTkNUUkxfUElOX0dST1VQKCJhbnRfc2VsIiwgbXQ3OTgxX2FudF9zZWwpLAorfTsKKworLyogSm9pbnQgdGhvc2UgZ3JvdXBzIG93bmluZyB0aGUgc2FtZSBjYXBhYmlsaXR5IGluIHVzZXIgcG9pbnQgb2YgdmlldyB3aGljaAorICogYWxsb3dzIHRoYXQgcGVvcGxlIHRlbmQgdG8gdXNlIHRocm91Z2ggdGhlIGRldmljZSB0cmVlLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqbXQ3OTgxX3dhX2FpY2VfZ3JvdXBzW10gPSB7ICJ3YV9haWNlMSIsICJ3YV9haWNlMiIsICJ3bV9haWNlMV8xIiwKKwkid2FfYWljZTMiLCAid21fYWljZTFfMiIsIH07CitzdGF0aWMgY29uc3QgY2hhciAqbXQ3OTgxX3VhcnRfZ3JvdXBzW10gPSB7ICJ3bV91YXJ0XzAiLCAidWFydDJfMCIsCisJIm5ldF93bzBfdWFydF90eGRfMCIsICJuZXRfd28wX3VhcnRfdHhkXzEiLCAibmV0X3dvMF91YXJ0X3R4ZF8yIiwKKwkidWFydDFfMCIsICJ1YXJ0MV8xIiwgInVhcnQyXzEiLCAid21fYXVydF8xIiwgIndtX2F1cnRfMiIsICJ1YXJ0MCIsIH07CitzdGF0aWMgY29uc3QgY2hhciAqbXQ3OTgxX2RmZF9ncm91cHNbXSA9IHsgImRmZCIsICJkZmRfbnRyc3QiLCB9Oworc3RhdGljIGNvbnN0IGNoYXIgKm10Nzk4MV93ZHRfZ3JvdXBzW10gPSB7ICJ3YXRjaGRvZyIsICJ3YXRjaGRvZzEiLCB9Oworc3RhdGljIGNvbnN0IGNoYXIgKm10Nzk4MV9wY2llX2dyb3Vwc1tdID0geyAicGNpZV9wZXJlc2V0IiwgInBjaWVfY2xrIiwgInBjaWVfd2FrZSIsIH07CitzdGF0aWMgY29uc3QgY2hhciAqbXQ3OTgxX2p0YWdfZ3JvdXBzW10gPSB7ICJqdGFnIiwgIndtX2p0YWdfMCIsICJ3bzBfanRhZ18wIiwKKwkid28wX2p0YWdfMSIsICJ3bV9qdGFnXzEiLCB9Oworc3RhdGljIGNvbnN0IGNoYXIgKm10Nzk4MV9sZWRfZ3JvdXBzW10gPSB7ICJnYmVfbGVkMCIsICJnYmVfbGVkMSIsICJ3ZjJnX2xlZDAiLAorCSJ3ZjJnX2xlZDEiLCAid2Y1Z19sZWQwIiwgIndmNWdfbGVkMSIsIH07CitzdGF0aWMgY29uc3QgY2hhciAqbXQ3OTgxX3B0YV9ncm91cHNbXSA9IHsgInB0YV9leHRfMCIsICJwdGFfZXh0XzEiLCB9Oworc3RhdGljIGNvbnN0IGNoYXIgKm10Nzk4MV9wd21fZ3JvdXBzW10gPSB7ICJwd20yIiwgInB3bTBfMCIsICJwd20wXzEiLAorCSJwd20xXzAiLCAicHdtMV8xIiwgfTsKK3N0YXRpYyBjb25zdCBjaGFyICptdDc5ODFfc3BpX2dyb3Vwc1tdID0geyAic3BpMV8wIiwgInNwaTAiLCAic3BpMF93cF9ob2xkIiwgInNwaTFfMSIsICJzcGkyIiwKKwkic3BpMl93cF9ob2xkIiwgfTsKK3N0YXRpYyBjb25zdCBjaGFyICptdDc5ODFfaTJjX2dyb3Vwc1tdID0geyAiaTJjMF8wIiwgImkyYzBfMSIsICJ1Ml9waHlfaTJjIiwKKwkic2dtaWkxX3BoeV9pMmMiLCAidTNfcGh5X2kyYyIsICJzZ21paTBfcGh5X2kyYyIsICJpMmMwXzIiLCB9Oworc3RhdGljIGNvbnN0IGNoYXIgKm10Nzk4MV9wY21fZ3JvdXBzW10gPSB7ICJwY20iLCB9Oworc3RhdGljIGNvbnN0IGNoYXIgKm10Nzk4MV91ZGlfZ3JvdXBzW10gPSB7ICJ1ZGkiLCB9Oworc3RhdGljIGNvbnN0IGNoYXIgKm10Nzk4MV91c2JfZ3JvdXBzW10gPSB7ICJkcnZfdmJ1cyIsIH07CitzdGF0aWMgY29uc3QgY2hhciAqbXQ3OTgxX2ZsYXNoX2dyb3Vwc1tdID0geyAiZW1tY180NSIsICJzbmZpIiwgfTsKK3N0YXRpYyBjb25zdCBjaGFyICptdDc5ODFfZXRoZXJuZXRfZ3JvdXBzW10gPSB7ICJzbWlfbWRjX21kaW8iLCAiZ2JlX2V4dF9tZGNfbWRpbyIsCisJIndmMF9tb2RlMSIsICJ3ZjBfbW9kZTMiLCAibXQ3NTMxX2ludCIsIH07CitzdGF0aWMgY29uc3QgY2hhciAqbXQ3OTgxX2FudF9ncm91cHNbXSA9IHsgImFudF9zZWwiLCB9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZ1bmN0aW9uX2Rlc2MgbXQ3OTgxX2Z1bmN0aW9uc1tdID0geworCXsid2FfYWljZSIsCW10Nzk4MV93YV9haWNlX2dyb3VwcywgQVJSQVlfU0laRShtdDc5ODFfd2FfYWljZV9ncm91cHMpfSwKKwl7ImRmZCIsCW10Nzk4MV9kZmRfZ3JvdXBzLCBBUlJBWV9TSVpFKG10Nzk4MV9kZmRfZ3JvdXBzKX0sCisJeyJqdGFnIiwgbXQ3OTgxX2p0YWdfZ3JvdXBzLCBBUlJBWV9TSVpFKG10Nzk4MV9qdGFnX2dyb3Vwcyl9LAorCXsicHRhIiwgbXQ3OTgxX3B0YV9ncm91cHMsIEFSUkFZX1NJWkUobXQ3OTgxX3B0YV9ncm91cHMpfSwKKwl7InBjbSIsIG10Nzk4MV9wY21fZ3JvdXBzLCBBUlJBWV9TSVpFKG10Nzk4MV9wY21fZ3JvdXBzKX0sCisJeyJ1ZGkiLCBtdDc5ODFfdWRpX2dyb3VwcywgQVJSQVlfU0laRShtdDc5ODFfdWRpX2dyb3Vwcyl9LAorCXsidXNiIiwgbXQ3OTgxX3VzYl9ncm91cHMsIEFSUkFZX1NJWkUobXQ3OTgxX3VzYl9ncm91cHMpfSwKKwl7ImFudCIsIG10Nzk4MV9hbnRfZ3JvdXBzLCBBUlJBWV9TSVpFKG10Nzk4MV9hbnRfZ3JvdXBzKX0sCisJeyJldGgiLAltdDc5ODFfZXRoZXJuZXRfZ3JvdXBzLCBBUlJBWV9TSVpFKG10Nzk4MV9ldGhlcm5ldF9ncm91cHMpfSwKKwl7ImkyYyIsIG10Nzk4MV9pMmNfZ3JvdXBzLCBBUlJBWV9TSVpFKG10Nzk4MV9pMmNfZ3JvdXBzKX0sCisJeyJsZWQiLAltdDc5ODFfbGVkX2dyb3VwcywgQVJSQVlfU0laRShtdDc5ODFfbGVkX2dyb3Vwcyl9LAorCXsicHdtIiwJbXQ3OTgxX3B3bV9ncm91cHMsIEFSUkFZX1NJWkUobXQ3OTgxX3B3bV9ncm91cHMpfSwKKwl7InNwaSIsCW10Nzk4MV9zcGlfZ3JvdXBzLCBBUlJBWV9TSVpFKG10Nzk4MV9zcGlfZ3JvdXBzKX0sCisJeyJ1YXJ0IiwgbXQ3OTgxX3VhcnRfZ3JvdXBzLCBBUlJBWV9TSVpFKG10Nzk4MV91YXJ0X2dyb3Vwcyl9LAorCXsid2F0Y2hkb2ciLCBtdDc5ODFfd2R0X2dyb3VwcywgQVJSQVlfU0laRShtdDc5ODFfd2R0X2dyb3Vwcyl9LAorCXsiZmxhc2giLCBtdDc5ODFfZmxhc2hfZ3JvdXBzLCBBUlJBWV9TSVpFKG10Nzk4MV9mbGFzaF9ncm91cHMpfSwKKwl7InBjaWUiLCBtdDc5ODFfcGNpZV9ncm91cHMsIEFSUkFZX1NJWkUobXQ3OTgxX3BjaWVfZ3JvdXBzKX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19laW50X2h3IG10Nzk4MV9laW50X2h3ID0geworCS5wb3J0X21hc2sgPSA3LAorCS5wb3J0cyAgICAgPSA3LAorCS5hcF9udW0gICAgPSBBUlJBWV9TSVpFKG10Nzk4MV9waW5zKSwKKwkuZGJfY250ICAgID0gMTYsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG10Nzk4MV9waW5jdHJsX3JlZ2lzdGVyX2Jhc2VfbmFtZXNbXSA9IHsKKwkiZ3Bpb19iYXNlIiwgImlvY2ZnX3J0X2Jhc2UiLCAiaW9jZmdfcm1fYmFzZSIsICJpb2NmZ19yYl9iYXNlIiwKKwkiaW9jZmdfbGJfYmFzZSIsICJpb2NmZ19ibF9iYXNlIiwgImlvY2ZnX3RtX2Jhc2UiLCAiaW9jZmdfdGxfYmFzZSIsCit9OworCitzdGF0aWMgc3RydWN0IG10a19waW5fc29jIG10Nzk4MV9kYXRhID0geworCS5yZWdfY2FsID0gbXQ3OTgxX3JlZ19jYWxzLAorCS5waW5zID0gbXQ3OTgxX3BpbnMsCisJLm5waW5zID0gQVJSQVlfU0laRShtdDc5ODFfcGlucyksCisJLmdycHMgPSBtdDc5ODFfZ3JvdXBzLAorCS5uZ3JwcyA9IEFSUkFZX1NJWkUobXQ3OTgxX2dyb3VwcyksCisJLmZ1bmNzID0gbXQ3OTgxX2Z1bmN0aW9ucywKKwkubmZ1bmNzID0gQVJSQVlfU0laRShtdDc5ODFfZnVuY3Rpb25zKSwKKwkuZWludF9odyA9ICZtdDc5ODFfZWludF9odywKKwkuZ3Bpb19tID0gMCwKKwkuaWVzX3ByZXNlbnQgPSBmYWxzZSwKKwkuYmFzZV9uYW1lcyA9IG10Nzk4MV9waW5jdHJsX3JlZ2lzdGVyX2Jhc2VfbmFtZXMsCisJLm5iYXNlX25hbWVzID0gQVJSQVlfU0laRShtdDc5ODFfcGluY3RybF9yZWdpc3Rlcl9iYXNlX25hbWVzKSwKKwkuYmlhc19kaXNhYmxlX3NldCA9IG10a19waW5jb25mX2JpYXNfZGlzYWJsZV9zZXQsCisJLmJpYXNfZGlzYWJsZV9nZXQgPSBtdGtfcGluY29uZl9iaWFzX2Rpc2FibGVfZ2V0LAorCS5iaWFzX3NldCA9IG10a19waW5jb25mX2JpYXNfc2V0LAorCS5iaWFzX2dldCA9IG10a19waW5jb25mX2JpYXNfZ2V0LAorCS5kcml2ZV9zZXQgPSBtdGtfcGluY29uZl9kcml2ZV9zZXRfcmV2MSwKKwkuZHJpdmVfZ2V0ID0gbXRrX3BpbmNvbmZfZHJpdmVfZ2V0X3JldjEsCisJLmFkdl9wdWxsX2dldCA9IG10a19waW5jb25mX2Fkdl9wdWxsX2dldCwKKwkuYWR2X3B1bGxfc2V0ID0gbXRrX3BpbmNvbmZfYWR2X3B1bGxfc2V0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXQ3OTgxX3BpbmN0cmxfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4MS1waW5jdHJsIiwgfSwKKwl7fQorfTsKKworc3RhdGljIGludCBtdDc5ODFfcGluY3RybF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiBtdGtfbW9vcmVfcGluY3RybF9wcm9iZShwZGV2LCAmbXQ3OTgxX2RhdGEpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdDc5ODFfcGluY3RybF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAibXQ3OTgxLXBpbmN0cmwiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBtdDc5ODFfcGluY3RybF9vZl9tYXRjaCwKKwl9LAorCS5wcm9iZSA9IG10Nzk4MV9waW5jdHJsX3Byb2JlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXQ3OTgxX3BpbmN0cmxfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm10Nzk4MV9waW5jdHJsX2RyaXZlcik7Cit9CithcmNoX2luaXRjYWxsKG10Nzk4MV9waW5jdHJsX2luaXQpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL3BpbmN0cmwvbWVkaWF0ZWsvcGluY3RybC1tdDc5ODYuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9waW5jdHJsL21lZGlhdGVrL3BpbmN0cmwtbXQ3OTg2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBmNGM5NQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy9waW5jdHJsL21lZGlhdGVrL3BpbmN0cmwtbXQ3OTg2LmMKQEAgLTAsMCArMSwxMDk2IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIFRoZSBNVDc5ODYgZHJpdmVyIGJhc2VkIG9uIExpbnV4IGdlbmVyaWMgcGluY3RybCBiaW5kaW5nLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IFNhbSBTaGloIDxzYW0uc2hpaEBtZWRpYXRlay5jb20+CisgKi8KKworI2luY2x1ZGUgInBpbmN0cmwtbW9vcmUuaCIKKworI2RlZmluZSBNVDc5ODZfUElOKF9udW1iZXIsIF9uYW1lKQkJCQlcCisJTVRLX1BJTihfbnVtYmVyLCBfbmFtZSwgMCwgX251bWJlciwgRFJWX0dSUDQpCisKKyNkZWZpbmUgUElOX0ZJRUxEX0JBU0UoX3NfcGluLCBfZV9waW4sIF9pX2Jhc2UsIF9zX2FkZHIsIF94X2FkZHJzLCBfc19iaXQsIF94X2JpdHMpCVwKKwlQSU5fRklFTERfQ0FMQyhfc19waW4sIF9lX3BpbiwgX2lfYmFzZSwgX3NfYWRkciwgX3hfYWRkcnMsIF9zX2JpdCwJXAorCQkgICAgICAgX3hfYml0cywgMzIsIDApCisKKyNkZWZpbmUgUElOU19GSUVMRF9CQVNFKF9zX3BpbiwgX2VfcGluLCBfaV9iYXNlLCBfc19hZGRyLCBfeF9hZGRycywgX3NfYml0LCBfeF9iaXRzKQlcCisJUElOX0ZJRUxEX0NBTEMoX3NfcGluLCBfZV9waW4sIF9pX2Jhc2UsIF9zX2FkZHIsIF94X2FkZHJzLCBfc19iaXQsCVwKKwkJICAgICAgX3hfYml0cywgMzIsIDEpCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX3Bpbl9maWVsZF9jYWxjIG10Nzk4Nl9waW5fbW9kZV9yYW5nZVtdID0geworCVBJTl9GSUVMRCgwLCAxMDAsIDB4MzAwLCAweDEwLCAwLCA0KSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX3Bpbl9maWVsZF9jYWxjIG10Nzk4Nl9waW5fZGlyX3JhbmdlW10gPSB7CisJUElOX0ZJRUxEKDAsIDEwMCwgMHgwLCAweDEwLCAwLCAxKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX3Bpbl9maWVsZF9jYWxjIG10Nzk4Nl9waW5fZGlfcmFuZ2VbXSA9IHsKKwlQSU5fRklFTEQoMCwgMTAwLCAweDIwMCwgMHgxMCwgMCwgMSksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19waW5fZmllbGRfY2FsYyBtdDc5ODZfcGluX2RvX3JhbmdlW10gPSB7CisJUElOX0ZJRUxEKDAsIDEwMCwgMHgxMDAsIDB4MTAsIDAsIDEpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfcGluX2ZpZWxkX2NhbGMgbXQ3OTg2X3Bpbl9pZXNfcmFuZ2VbXSA9IHsKKwlQSU5fRklFTERfQkFTRSgwLCAwLCAyLCAweDQwLCAweDEwLCAxNywgMSksCisJUElOX0ZJRUxEX0JBU0UoMSwgMSwgMywgMHgyMCwgMHgxMCwgMTAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDIsIDIsIDMsIDB4MjAsIDB4MTAsIDExLCAxKSwKKwlQSU5fRklFTERfQkFTRSgzLCAzLCA0LCAweDIwLCAweDEwLCAwLCAxKSwKKwlQSU5fRklFTERfQkFTRSg0LCA0LCA0LCAweDIwLCAweDEwLCAxLCAxKSwKKwlQSU5fRklFTERfQkFTRSg1LCA1LCAyLCAweDQwLCAweDEwLCAwLCAxKSwKKwlQSU5fRklFTERfQkFTRSg2LCA2LCAyLCAweDQwLCAweDEwLCAxLCAxKSwKKwlQSU5fRklFTERfQkFTRSg3LCA3LCAzLCAweDIwLCAweDEwLCAwLCAxKSwKKwlQSU5fRklFTERfQkFTRSg4LCA4LCAzLCAweDIwLCAweDEwLCAxLCAxKSwKKwlQSU5fRklFTERfQkFTRSg5LCA5LCAzLCAweDIwLCAweDEwLCAyLCAxKSwKKwlQSU5fRklFTERfQkFTRSgxMCwgMTAsIDMsIDB4MjAsIDB4MTAsIDMsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDExLCAxMSwgMiwgMHg0MCwgMHgxMCwgOCwgMSksCisJUElOX0ZJRUxEX0JBU0UoMTIsIDEyLCAyLCAweDQwLCAweDEwLCA5LCAxKSwKKwlQSU5fRklFTERfQkFTRSgxMywgMTMsIDIsIDB4NDAsIDB4MTAsIDEwLCAxKSwKKwlQSU5fRklFTERfQkFTRSgxNCwgMTQsIDIsIDB4NDAsIDB4MTAsIDExLCAxKSwKKwlQSU5fRklFTERfQkFTRSgxNSwgMTUsIDIsIDB4NDAsIDB4MTAsIDIsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDE2LCAxNiwgMiwgMHg0MCwgMHgxMCwgMywgMSksCisJUElOX0ZJRUxEX0JBU0UoMTcsIDE3LCAyLCAweDQwLCAweDEwLCA0LCAxKSwKKwlQSU5fRklFTERfQkFTRSgxOCwgMTgsIDIsIDB4NDAsIDB4MTAsIDUsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDE5LCAxOSwgMiwgMHg0MCwgMHgxMCwgNiwgMSksCisJUElOX0ZJRUxEX0JBU0UoMjAsIDIwLCAyLCAweDQwLCAweDEwLCA3LCAxKSwKKwlQSU5fRklFTERfQkFTRSgyMSwgMjEsIDEsIDB4MzAsIDB4MTAsIDEyLCAxKSwKKwlQSU5fRklFTERfQkFTRSgyMiwgMjIsIDEsIDB4MzAsIDB4MTAsIDEzLCAxKSwKKwlQSU5fRklFTERfQkFTRSgyMywgMjMsIDEsIDB4MzAsIDB4MTAsIDE0LCAxKSwKKwlQSU5fRklFTERfQkFTRSgyNCwgMjQsIDEsIDB4MzAsIDB4MTAsIDE4LCAxKSwKKwlQSU5fRklFTERfQkFTRSgyNSwgMjUsIDEsIDB4MzAsIDB4MTAsIDE3LCAxKSwKKwlQSU5fRklFTERfQkFTRSgyNiwgMjYsIDEsIDB4MzAsIDB4MTAsIDE1LCAxKSwKKwlQSU5fRklFTERfQkFTRSgyNywgMjcsIDEsIDB4MzAsIDB4MTAsIDE2LCAxKSwKKwlQSU5fRklFTERfQkFTRSgyOCwgMjgsIDEsIDB4MzAsIDB4MTAsIDE5LCAxKSwKKwlQSU5fRklFTERfQkFTRSgyOSwgMjksIDEsIDB4MzAsIDB4MTAsIDIwLCAxKSwKKwlQSU5fRklFTERfQkFTRSgzMCwgMzAsIDEsIDB4MzAsIDB4MTAsIDIzLCAxKSwKKwlQSU5fRklFTERfQkFTRSgzMSwgMzEsIDEsIDB4MzAsIDB4MTAsIDIyLCAxKSwKKwlQSU5fRklFTERfQkFTRSgzMiwgMzIsIDEsIDB4MzAsIDB4MTAsIDIxLCAxKSwKKwlQSU5fRklFTERfQkFTRSgzMywgMzMsIDMsIDB4MjAsIDB4MTAsIDQsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDM0LCAzNCwgMywgMHgyMCwgMHgxMCwgOCwgMSksCisJUElOX0ZJRUxEX0JBU0UoMzUsIDM1LCAzLCAweDIwLCAweDEwLCA3LCAxKSwKKwlQSU5fRklFTERfQkFTRSgzNiwgMzYsIDMsIDB4MjAsIDB4MTAsIDUsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDM3LCAzNywgMywgMHgyMCwgMHgxMCwgNiwgMSksCisJUElOX0ZJRUxEX0JBU0UoMzgsIDM4LCAzLCAweDIwLCAweDEwLCA5LCAxKSwKKwlQSU5fRklFTERfQkFTRSgzOSwgMzksIDIsIDB4NDAsIDB4MTAsIDE4LCAxKSwKKwlQSU5fRklFTERfQkFTRSg0MCwgNDAsIDIsIDB4NDAsIDB4MTAsIDE5LCAxKSwKKwlQSU5fRklFTERfQkFTRSg0MSwgNDEsIDIsIDB4NDAsIDB4MTAsIDEyLCAxKSwKKwlQSU5fRklFTERfQkFTRSg0MiwgNDIsIDIsIDB4NDAsIDB4MTAsIDIyLCAxKSwKKwlQSU5fRklFTERfQkFTRSg0MywgNDMsIDIsIDB4NDAsIDB4MTAsIDIzLCAxKSwKKwlQSU5fRklFTERfQkFTRSg0NCwgNDQsIDIsIDB4NDAsIDB4MTAsIDIwLCAxKSwKKwlQSU5fRklFTERfQkFTRSg0NSwgNDUsIDIsIDB4NDAsIDB4MTAsIDIxLCAxKSwKKwlQSU5fRklFTERfQkFTRSg0NiwgNDYsIDIsIDB4NDAsIDB4MTAsIDI2LCAxKSwKKwlQSU5fRklFTERfQkFTRSg0NywgNDcsIDIsIDB4NDAsIDB4MTAsIDI3LCAxKSwKKwlQSU5fRklFTERfQkFTRSg0OCwgNDgsIDIsIDB4NDAsIDB4MTAsIDI0LCAxKSwKKwlQSU5fRklFTERfQkFTRSg0OSwgNDksIDIsIDB4NDAsIDB4MTAsIDI1LCAxKSwKKwlQSU5fRklFTERfQkFTRSg1MCwgNTAsIDEsIDB4MzAsIDB4MTAsIDIsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDUxLCA1MSwgMSwgMHgzMCwgMHgxMCwgMywgMSksCisJUElOX0ZJRUxEX0JBU0UoNTIsIDUyLCAxLCAweDMwLCAweDEwLCA0LCAxKSwKKwlQSU5fRklFTERfQkFTRSg1MywgNTMsIDEsIDB4MzAsIDB4MTAsIDUsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDU0LCA1NCwgMSwgMHgzMCwgMHgxMCwgNiwgMSksCisJUElOX0ZJRUxEX0JBU0UoNTUsIDU1LCAxLCAweDMwLCAweDEwLCA3LCAxKSwKKwlQSU5fRklFTERfQkFTRSg1NiwgNTYsIDEsIDB4MzAsIDB4MTAsIDgsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDU3LCA1NywgMSwgMHgzMCwgMHgxMCwgOSwgMSksCisJUElOX0ZJRUxEX0JBU0UoNTgsIDU4LCAxLCAweDMwLCAweDEwLCAxLCAxKSwKKwlQSU5fRklFTERfQkFTRSg1OSwgNTksIDEsIDB4MzAsIDB4MTAsIDAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDYwLCA2MCwgMSwgMHgzMCwgMHgxMCwgMTAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDYxLCA2MSwgMSwgMHgzMCwgMHgxMCwgMTEsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDYyLCA2MiwgMiwgMHg0MCwgMHgxMCwgMTUsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDYzLCA2MywgMiwgMHg0MCwgMHgxMCwgMTQsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDY0LCA2NCwgMiwgMHg0MCwgMHgxMCwgMTMsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDY1LCA2NSwgMiwgMHg0MCwgMHgxMCwgMTYsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDY2LCA2NiwgNCwgMHgyMCwgMHgxMCwgMiwgMSksCisJUElOX0ZJRUxEX0JBU0UoNjcsIDY3LCA0LCAweDIwLCAweDEwLCAzLCAxKSwKKwlQSU5fRklFTERfQkFTRSg2OCwgNjgsIDQsIDB4MjAsIDB4MTAsIDQsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDY5LCA2OSwgNSwgMHgzMCwgMHgxMCwgMSwgMSksCisJUElOX0ZJRUxEX0JBU0UoNzAsIDcwLCA1LCAweDMwLCAweDEwLCAwLCAxKSwKKwlQSU5fRklFTERfQkFTRSg3MSwgNzEsIDUsIDB4MzAsIDB4MTAsIDE2LCAxKSwKKwlQSU5fRklFTERfQkFTRSg3MiwgNzIsIDUsIDB4MzAsIDB4MTAsIDE0LCAxKSwKKwlQSU5fRklFTERfQkFTRSg3MywgNzMsIDUsIDB4MzAsIDB4MTAsIDE1LCAxKSwKKwlQSU5fRklFTERfQkFTRSg3NCwgNzQsIDUsIDB4MzAsIDB4MTAsIDQsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDc1LCA3NSwgNSwgMHgzMCwgMHgxMCwgNiwgMSksCisJUElOX0ZJRUxEX0JBU0UoNzYsIDc2LCA1LCAweDMwLCAweDEwLCA3LCAxKSwKKwlQSU5fRklFTERfQkFTRSg3NywgNzcsIDUsIDB4MzAsIDB4MTAsIDgsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDc4LCA3OCwgNSwgMHgzMCwgMHgxMCwgMiwgMSksCisJUElOX0ZJRUxEX0JBU0UoNzksIDc5LCA1LCAweDMwLCAweDEwLCAzLCAxKSwKKwlQSU5fRklFTERfQkFTRSg4MCwgODAsIDUsIDB4MzAsIDB4MTAsIDksIDEpLAorCVBJTl9GSUVMRF9CQVNFKDgxLCA4MSwgNSwgMHgzMCwgMHgxMCwgMTAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDgyLCA4MiwgNSwgMHgzMCwgMHgxMCwgMTEsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDgzLCA4MywgNSwgMHgzMCwgMHgxMCwgMTIsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDg0LCA4NCwgNSwgMHgzMCwgMHgxMCwgMTMsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDg1LCA4NSwgNSwgMHgzMCwgMHgxMCwgNSwgMSksCisJUElOX0ZJRUxEX0JBU0UoODYsIDg2LCA2LCAweDMwLCAweDEwLCAxLCAxKSwKKwlQSU5fRklFTERfQkFTRSg4NywgODcsIDYsIDB4MzAsIDB4MTAsIDAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDg4LCA4OCwgNiwgMHgzMCwgMHgxMCwgMTQsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDg5LCA4OSwgNiwgMHgzMCwgMHgxMCwgMTIsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDkwLCA5MCwgNiwgMHgzMCwgMHgxMCwgMTMsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDkxLCA5MSwgNiwgMHgzMCwgMHgxMCwgNCwgMSksCisJUElOX0ZJRUxEX0JBU0UoOTIsIDkyLCA2LCAweDMwLCAweDEwLCA1LCAxKSwKKwlQSU5fRklFTERfQkFTRSg5MywgOTMsIDYsIDB4MzAsIDB4MTAsIDYsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDk0LCA5NCwgNiwgMHgzMCwgMHgxMCwgNywgMSksCisJUElOX0ZJRUxEX0JBU0UoOTUsIDk1LCA2LCAweDMwLCAweDEwLCAyLCAxKSwKKwlQSU5fRklFTERfQkFTRSg5NiwgOTYsIDYsIDB4MzAsIDB4MTAsIDMsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDk3LCA5NywgNiwgMHgzMCwgMHgxMCwgOCwgMSksCisJUElOX0ZJRUxEX0JBU0UoOTgsIDk4LCA2LCAweDMwLCAweDEwLCA5LCAxKSwKKwlQSU5fRklFTERfQkFTRSg5OSwgOTksIDYsIDB4MzAsIDB4MTAsIDEwLCAxKSwKKwlQSU5fRklFTERfQkFTRSgxMDAsIDEwMCwgNiwgMHgzMCwgMHgxMCwgMTEsIDEpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfcGluX2ZpZWxkX2NhbGMgbXQ3OTg2X3Bpbl9zbXRfcmFuZ2VbXSA9IHsKKwlQSU5fRklFTERfQkFTRSgwLCAwLCAyLCAweGYwLCAweDEwLCAxNywgMSksCisJUElOX0ZJRUxEX0JBU0UoMSwgMSwgMywgMHg5MCwgMHgxMCwgMTAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDIsIDIsIDMsIDB4OTAsIDB4MTAsIDExLCAxKSwKKwlQSU5fRklFTERfQkFTRSgzLCAzLCA0LCAweDkwLCAweDEwLCAwLCAxKSwKKwlQSU5fRklFTERfQkFTRSg0LCA0LCA0LCAweDkwLCAweDEwLCAxLCAxKSwKKwlQSU5fRklFTERfQkFTRSg1LCA1LCAyLCAweGYwLCAweDEwLCAwLCAxKSwKKwlQSU5fRklFTERfQkFTRSg2LCA2LCAyLCAweGYwLCAweDEwLCAxLCAxKSwKKwlQSU5fRklFTERfQkFTRSg3LCA3LCAzLCAweDkwLCAweDEwLCAwLCAxKSwKKwlQSU5fRklFTERfQkFTRSg4LCA4LCAzLCAweDkwLCAweDEwLCAxLCAxKSwKKwlQSU5fRklFTERfQkFTRSg5LCA5LCAzLCAweDkwLCAweDEwLCAyLCAxKSwKKwlQSU5fRklFTERfQkFTRSgxMCwgMTAsIDMsIDB4OTAsIDB4MTAsIDMsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDExLCAxMSwgMiwgMHhmMCwgMHgxMCwgOCwgMSksCisJUElOX0ZJRUxEX0JBU0UoMTIsIDEyLCAyLCAweGYwLCAweDEwLCA5LCAxKSwKKwlQSU5fRklFTERfQkFTRSgxMywgMTMsIDIsIDB4ZjAsIDB4MTAsIDEwLCAxKSwKKwlQSU5fRklFTERfQkFTRSgxNCwgMTQsIDIsIDB4ZjAsIDB4MTAsIDExLCAxKSwKKwlQSU5fRklFTERfQkFTRSgxNSwgMTUsIDIsIDB4ZjAsIDB4MTAsIDIsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDE2LCAxNiwgMiwgMHhmMCwgMHgxMCwgMywgMSksCisJUElOX0ZJRUxEX0JBU0UoMTcsIDE3LCAyLCAweGYwLCAweDEwLCA0LCAxKSwKKwlQSU5fRklFTERfQkFTRSgxOCwgMTgsIDIsIDB4ZjAsIDB4MTAsIDUsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDE5LCAxOSwgMiwgMHhmMCwgMHgxMCwgNiwgMSksCisJUElOX0ZJRUxEX0JBU0UoMjAsIDIwLCAyLCAweGYwLCAweDEwLCA3LCAxKSwKKwlQSU5fRklFTERfQkFTRSgyMSwgMjEsIDEsIDB4YzAsIDB4MTAsIDEyLCAxKSwKKwlQSU5fRklFTERfQkFTRSgyMiwgMjIsIDEsIDB4YzAsIDB4MTAsIDEzLCAxKSwKKwlQSU5fRklFTERfQkFTRSgyMywgMjMsIDEsIDB4YzAsIDB4MTAsIDE0LCAxKSwKKwlQSU5fRklFTERfQkFTRSgyNCwgMjQsIDEsIDB4YzAsIDB4MTAsIDE4LCAxKSwKKwlQSU5fRklFTERfQkFTRSgyNSwgMjUsIDEsIDB4YzAsIDB4MTAsIDE3LCAxKSwKKwlQSU5fRklFTERfQkFTRSgyNiwgMjYsIDEsIDB4YzAsIDB4MTAsIDE1LCAxKSwKKwlQSU5fRklFTERfQkFTRSgyNywgMjcsIDEsIDB4YzAsIDB4MTAsIDE2LCAxKSwKKwlQSU5fRklFTERfQkFTRSgyOCwgMjgsIDEsIDB4YzAsIDB4MTAsIDE5LCAxKSwKKwlQSU5fRklFTERfQkFTRSgyOSwgMjksIDEsIDB4YzAsIDB4MTAsIDIwLCAxKSwKKwlQSU5fRklFTERfQkFTRSgzMCwgMzAsIDEsIDB4YzAsIDB4MTAsIDIzLCAxKSwKKwlQSU5fRklFTERfQkFTRSgzMSwgMzEsIDEsIDB4YzAsIDB4MTAsIDIyLCAxKSwKKwlQSU5fRklFTERfQkFTRSgzMiwgMzIsIDEsIDB4YzAsIDB4MTAsIDIxLCAxKSwKKwlQSU5fRklFTERfQkFTRSgzMywgMzMsIDMsIDB4OTAsIDB4MTAsIDQsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDM0LCAzNCwgMywgMHg5MCwgMHgxMCwgOCwgMSksCisJUElOX0ZJRUxEX0JBU0UoMzUsIDM1LCAzLCAweDkwLCAweDEwLCA3LCAxKSwKKwlQSU5fRklFTERfQkFTRSgzNiwgMzYsIDMsIDB4OTAsIDB4MTAsIDUsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDM3LCAzNywgMywgMHg5MCwgMHgxMCwgNiwgMSksCisJUElOX0ZJRUxEX0JBU0UoMzgsIDM4LCAzLCAweDkwLCAweDEwLCA5LCAxKSwKKwlQSU5fRklFTERfQkFTRSgzOSwgMzksIDIsIDB4ZjAsIDB4MTAsIDE4LCAxKSwKKwlQSU5fRklFTERfQkFTRSg0MCwgNDAsIDIsIDB4ZjAsIDB4MTAsIDE5LCAxKSwKKwlQSU5fRklFTERfQkFTRSg0MSwgNDEsIDIsIDB4ZjAsIDB4MTAsIDEyLCAxKSwKKwlQSU5fRklFTERfQkFTRSg0MiwgNDIsIDIsIDB4ZjAsIDB4MTAsIDIyLCAxKSwKKwlQSU5fRklFTERfQkFTRSg0MywgNDMsIDIsIDB4ZjAsIDB4MTAsIDIzLCAxKSwKKwlQSU5fRklFTERfQkFTRSg0NCwgNDQsIDIsIDB4ZjAsIDB4MTAsIDIwLCAxKSwKKwlQSU5fRklFTERfQkFTRSg0NSwgNDUsIDIsIDB4ZjAsIDB4MTAsIDIxLCAxKSwKKwlQSU5fRklFTERfQkFTRSg0NiwgNDYsIDIsIDB4ZjAsIDB4MTAsIDI2LCAxKSwKKwlQSU5fRklFTERfQkFTRSg0NywgNDcsIDIsIDB4ZjAsIDB4MTAsIDI3LCAxKSwKKwlQSU5fRklFTERfQkFTRSg0OCwgNDgsIDIsIDB4ZjAsIDB4MTAsIDI0LCAxKSwKKwlQSU5fRklFTERfQkFTRSg0OSwgNDksIDIsIDB4ZjAsIDB4MTAsIDI1LCAxKSwKKwlQSU5fRklFTERfQkFTRSg1MCwgNTAsIDEsIDB4YzAsIDB4MTAsIDIsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDUxLCA1MSwgMSwgMHhjMCwgMHgxMCwgMywgMSksCisJUElOX0ZJRUxEX0JBU0UoNTIsIDUyLCAxLCAweGMwLCAweDEwLCA0LCAxKSwKKwlQSU5fRklFTERfQkFTRSg1MywgNTMsIDEsIDB4YzAsIDB4MTAsIDUsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDU0LCA1NCwgMSwgMHhjMCwgMHgxMCwgNiwgMSksCisJUElOX0ZJRUxEX0JBU0UoNTUsIDU1LCAxLCAweGMwLCAweDEwLCA3LCAxKSwKKwlQSU5fRklFTERfQkFTRSg1NiwgNTYsIDEsIDB4YzAsIDB4MTAsIDgsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDU3LCA1NywgMSwgMHhjMCwgMHgxMCwgOSwgMSksCisJUElOX0ZJRUxEX0JBU0UoNTgsIDU4LCAxLCAweGMwLCAweDEwLCAxLCAxKSwKKwlQSU5fRklFTERfQkFTRSg1OSwgNTksIDEsIDB4YzAsIDB4MTAsIDAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDYwLCA2MCwgMSwgMHhjMCwgMHgxMCwgMTAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDYxLCA2MSwgMSwgMHhjMCwgMHgxMCwgMTEsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDYyLCA2MiwgMiwgMHhmMCwgMHgxMCwgMTUsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDYzLCA2MywgMiwgMHhmMCwgMHgxMCwgMTQsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDY0LCA2NCwgMiwgMHhmMCwgMHgxMCwgMTMsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDY1LCA2NSwgMiwgMHhmMCwgMHgxMCwgMTYsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDY2LCA2NiwgNCwgMHg5MCwgMHgxMCwgMiwgMSksCisJUElOX0ZJRUxEX0JBU0UoNjcsIDY3LCA0LCAweDkwLCAweDEwLCAzLCAxKSwKKwlQSU5fRklFTERfQkFTRSg2OCwgNjgsIDQsIDB4OTAsIDB4MTAsIDQsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDY5LCA2OSwgNSwgMHg4MCwgMHgxMCwgMSwgMSksCisJUElOX0ZJRUxEX0JBU0UoNzAsIDcwLCA1LCAweDgwLCAweDEwLCAwLCAxKSwKKwlQSU5fRklFTERfQkFTRSg3MSwgNzEsIDUsIDB4ODAsIDB4MTAsIDE2LCAxKSwKKwlQSU5fRklFTERfQkFTRSg3MiwgNzIsIDUsIDB4ODAsIDB4MTAsIDE0LCAxKSwKKwlQSU5fRklFTERfQkFTRSg3MywgNzMsIDUsIDB4ODAsIDB4MTAsIDE1LCAxKSwKKwlQSU5fRklFTERfQkFTRSg3NCwgNzQsIDUsIDB4ODAsIDB4MTAsIDQsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDc1LCA3NSwgNSwgMHg4MCwgMHgxMCwgNiwgMSksCisJUElOX0ZJRUxEX0JBU0UoNzYsIDc2LCA1LCAweDgwLCAweDEwLCA3LCAxKSwKKwlQSU5fRklFTERfQkFTRSg3NywgNzcsIDUsIDB4ODAsIDB4MTAsIDgsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDc4LCA3OCwgNSwgMHg4MCwgMHgxMCwgMiwgMSksCisJUElOX0ZJRUxEX0JBU0UoNzksIDc5LCA1LCAweDgwLCAweDEwLCAzLCAxKSwKKwlQSU5fRklFTERfQkFTRSg4MCwgODAsIDUsIDB4ODAsIDB4MTAsIDksIDEpLAorCVBJTl9GSUVMRF9CQVNFKDgxLCA4MSwgNSwgMHg4MCwgMHgxMCwgMTAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDgyLCA4MiwgNSwgMHg4MCwgMHgxMCwgMTEsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDgzLCA4MywgNSwgMHg4MCwgMHgxMCwgMTIsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDg0LCA4NCwgNSwgMHg4MCwgMHgxMCwgMTMsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDg1LCA4NSwgNSwgMHg4MCwgMHgxMCwgNSwgMSksCisJUElOX0ZJRUxEX0JBU0UoODYsIDg2LCA2LCAweDcwLCAweDEwLCAxLCAxKSwKKwlQSU5fRklFTERfQkFTRSg4NywgODcsIDYsIDB4NzAsIDB4MTAsIDAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDg4LCA4OCwgNiwgMHg3MCwgMHgxMCwgMTQsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDg5LCA4OSwgNiwgMHg3MCwgMHgxMCwgMTIsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDkwLCA5MCwgNiwgMHg3MCwgMHgxMCwgMTMsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDkxLCA5MSwgNiwgMHg3MCwgMHgxMCwgNCwgMSksCisJUElOX0ZJRUxEX0JBU0UoOTIsIDkyLCA2LCAweDcwLCAweDEwLCA1LCAxKSwKKwlQSU5fRklFTERfQkFTRSg5MywgOTMsIDYsIDB4NzAsIDB4MTAsIDYsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDk0LCA5NCwgNiwgMHg3MCwgMHgxMCwgNywgMSksCisJUElOX0ZJRUxEX0JBU0UoOTUsIDk1LCA2LCAweDcwLCAweDEwLCAyLCAxKSwKKwlQSU5fRklFTERfQkFTRSg5NiwgOTYsIDYsIDB4NzAsIDB4MTAsIDMsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDk3LCA5NywgNiwgMHg3MCwgMHgxMCwgOCwgMSksCisJUElOX0ZJRUxEX0JBU0UoOTgsIDk4LCA2LCAweDcwLCAweDEwLCA5LCAxKSwKKwlQSU5fRklFTERfQkFTRSg5OSwgOTksIDYsIDB4NzAsIDB4MTAsIDEwLCAxKSwKKwlQSU5fRklFTERfQkFTRSgxMDAsIDEwMCwgNiwgMHg3MCwgMHgxMCwgMTEsIDEpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfcGluX2ZpZWxkX2NhbGMgbXQ3OTg2X3Bpbl9wdV9yYW5nZVtdID0geworCVBJTl9GSUVMRF9CQVNFKDY5LCA2OSwgNSwgMHg1MCwgMHgxMCwgMSwgMSksCisJUElOX0ZJRUxEX0JBU0UoNzAsIDcwLCA1LCAweDUwLCAweDEwLCAwLCAxKSwKKwlQSU5fRklFTERfQkFTRSg3MSwgNzEsIDUsIDB4NTAsIDB4MTAsIDE2LCAxKSwKKwlQSU5fRklFTERfQkFTRSg3MiwgNzIsIDUsIDB4NTAsIDB4MTAsIDE0LCAxKSwKKwlQSU5fRklFTERfQkFTRSg3MywgNzMsIDUsIDB4NTAsIDB4MTAsIDE1LCAxKSwKKwlQSU5fRklFTERfQkFTRSg3NCwgNzQsIDUsIDB4NTAsIDB4MTAsIDQsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDc1LCA3NSwgNSwgMHg1MCwgMHgxMCwgNiwgMSksCisJUElOX0ZJRUxEX0JBU0UoNzYsIDc2LCA1LCAweDUwLCAweDEwLCA3LCAxKSwKKwlQSU5fRklFTERfQkFTRSg3NywgNzcsIDUsIDB4NTAsIDB4MTAsIDgsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDc4LCA3OCwgNSwgMHg1MCwgMHgxMCwgMiwgMSksCisJUElOX0ZJRUxEX0JBU0UoNzksIDc5LCA1LCAweDUwLCAweDEwLCAzLCAxKSwKKwlQSU5fRklFTERfQkFTRSg4MCwgODAsIDUsIDB4NTAsIDB4MTAsIDksIDEpLAorCVBJTl9GSUVMRF9CQVNFKDgxLCA4MSwgNSwgMHg1MCwgMHgxMCwgMTAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDgyLCA4MiwgNSwgMHg1MCwgMHgxMCwgMTEsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDgzLCA4MywgNSwgMHg1MCwgMHgxMCwgMTIsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDg0LCA4NCwgNSwgMHg1MCwgMHgxMCwgMTMsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDg1LCA4NSwgNSwgMHg1MCwgMHgxMCwgNSwgMSksCisJUElOX0ZJRUxEX0JBU0UoODYsIDg2LCA2LCAweDUwLCAweDEwLCAxLCAxKSwKKwlQSU5fRklFTERfQkFTRSg4NywgODcsIDYsIDB4NTAsIDB4MTAsIDAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDg4LCA4OCwgNiwgMHg1MCwgMHgxMCwgMTQsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDg5LCA4OSwgNiwgMHg1MCwgMHgxMCwgMTIsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDkwLCA5MCwgNiwgMHg1MCwgMHgxMCwgMTMsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDkxLCA5MSwgNiwgMHg1MCwgMHgxMCwgNCwgMSksCisJUElOX0ZJRUxEX0JBU0UoOTIsIDkyLCA2LCAweDUwLCAweDEwLCA1LCAxKSwKKwlQSU5fRklFTERfQkFTRSg5MywgOTMsIDYsIDB4NTAsIDB4MTAsIDYsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDk0LCA5NCwgNiwgMHg1MCwgMHgxMCwgNywgMSksCisJUElOX0ZJRUxEX0JBU0UoOTUsIDk1LCA2LCAweDUwLCAweDEwLCAyLCAxKSwKKwlQSU5fRklFTERfQkFTRSg5NiwgOTYsIDYsIDB4NTAsIDB4MTAsIDMsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDk3LCA5NywgNiwgMHg1MCwgMHgxMCwgOCwgMSksCisJUElOX0ZJRUxEX0JBU0UoOTgsIDk4LCA2LCAweDUwLCAweDEwLCA5LCAxKSwKKwlQSU5fRklFTERfQkFTRSg5OSwgOTksIDYsIDB4NTAsIDB4MTAsIDEwLCAxKSwKKwlQSU5fRklFTERfQkFTRSgxMDAsIDEwMCwgNiwgMHg1MCwgMHgxMCwgMTEsIDEpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfcGluX2ZpZWxkX2NhbGMgbXQ3OTg2X3Bpbl9wZF9yYW5nZVtdID0geworCVBJTl9GSUVMRF9CQVNFKDY5LCA2OSwgNSwgMHg0MCwgMHgxMCwgMSwgMSksCisJUElOX0ZJRUxEX0JBU0UoNzAsIDcwLCA1LCAweDQwLCAweDEwLCAwLCAxKSwKKwlQSU5fRklFTERfQkFTRSg3MSwgNzEsIDUsIDB4NDAsIDB4MTAsIDE2LCAxKSwKKwlQSU5fRklFTERfQkFTRSg3MiwgNzIsIDUsIDB4NDAsIDB4MTAsIDE0LCAxKSwKKwlQSU5fRklFTERfQkFTRSg3MywgNzMsIDUsIDB4NDAsIDB4MTAsIDE1LCAxKSwKKwlQSU5fRklFTERfQkFTRSg3NCwgNzQsIDUsIDB4NDAsIDB4MTAsIDQsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDc1LCA3NSwgNSwgMHg0MCwgMHgxMCwgNiwgMSksCisJUElOX0ZJRUxEX0JBU0UoNzYsIDc2LCA1LCAweDQwLCAweDEwLCA3LCAxKSwKKwlQSU5fRklFTERfQkFTRSg3NywgNzcsIDUsIDB4NDAsIDB4MTAsIDgsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDc4LCA3OCwgNSwgMHg0MCwgMHgxMCwgMiwgMSksCisJUElOX0ZJRUxEX0JBU0UoNzksIDc5LCA1LCAweDQwLCAweDEwLCAzLCAxKSwKKwlQSU5fRklFTERfQkFTRSg4MCwgODAsIDUsIDB4NDAsIDB4MTAsIDksIDEpLAorCVBJTl9GSUVMRF9CQVNFKDgxLCA4MSwgNSwgMHg0MCwgMHgxMCwgMTAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDgyLCA4MiwgNSwgMHg0MCwgMHgxMCwgMTEsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDgzLCA4MywgNSwgMHg0MCwgMHgxMCwgMTIsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDg0LCA4NCwgNSwgMHg0MCwgMHgxMCwgMTMsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDg1LCA4NSwgNSwgMHg0MCwgMHgxMCwgNSwgMSksCisJUElOX0ZJRUxEX0JBU0UoODYsIDg2LCA2LCAweDQwLCAweDEwLCAxLCAxKSwKKwlQSU5fRklFTERfQkFTRSg4NywgODcsIDYsIDB4NDAsIDB4MTAsIDAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDg4LCA4OCwgNiwgMHg0MCwgMHgxMCwgMTQsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDg5LCA4OSwgNiwgMHg0MCwgMHgxMCwgMTIsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDkwLCA5MCwgNiwgMHg0MCwgMHgxMCwgMTMsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDkxLCA5MSwgNiwgMHg0MCwgMHgxMCwgNCwgMSksCisJUElOX0ZJRUxEX0JBU0UoOTIsIDkyLCA2LCAweDQwLCAweDEwLCA1LCAxKSwKKwlQSU5fRklFTERfQkFTRSg5MywgOTMsIDYsIDB4NDAsIDB4MTAsIDYsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDk0LCA5NCwgNiwgMHg0MCwgMHgxMCwgNywgMSksCisJUElOX0ZJRUxEX0JBU0UoOTUsIDk1LCA2LCAweDQwLCAweDEwLCAyLCAxKSwKKwlQSU5fRklFTERfQkFTRSg5NiwgOTYsIDYsIDB4NDAsIDB4MTAsIDMsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDk3LCA5NywgNiwgMHg0MCwgMHgxMCwgOCwgMSksCisJUElOX0ZJRUxEX0JBU0UoOTgsIDk4LCA2LCAweDQwLCAweDEwLCA5LCAxKSwKKwlQSU5fRklFTERfQkFTRSg5OSwgOTksIDYsIDB4NDAsIDB4MTAsIDEwLCAxKSwKKwlQSU5fRklFTERfQkFTRSgxMDAsIDEwMCwgNiwgMHg0MCwgMHgxMCwgMTEsIDEpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfcGluX2ZpZWxkX2NhbGMgbXQ3OTg2X3Bpbl9kcnZfcmFuZ2VbXSA9IHsKKwlQSU5fRklFTERfQkFTRSgwLCAwLCAyLCAweDEwLCAweDEwLCAyMSwgMyksCisJUElOX0ZJRUxEX0JBU0UoMSwgMSwgMywgMHgxMCwgMHgxMCwgMCwgMyksCisJUElOX0ZJRUxEX0JBU0UoMiwgMiwgMywgMHgxMCwgMHgxMCwgMywgMyksCisJUElOX0ZJRUxEX0JBU0UoMywgMywgNCwgMHgwMCwgMHgxMCwgMCwgMSksCisJUElOX0ZJRUxEX0JBU0UoNCwgNCwgNCwgMHgwMCwgMHgxMCwgMSwgMSksCisJUElOX0ZJRUxEX0JBU0UoNSwgNSwgMiwgMHgwMCwgMHgxMCwgMCwgMyksCisJUElOX0ZJRUxEX0JBU0UoNiwgNiwgMiwgMHgwMCwgMHgxMCwgMjEsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDcsIDcsIDMsIDB4MDAsIDB4MTAsIDAsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDgsIDgsIDMsIDB4MDAsIDB4MTAsIDMsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDksIDksIDMsIDB4MDAsIDB4MTAsIDYsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDEwLCAxMCwgMywgMHgwMCwgMHgxMCwgOSwgMyksCisJUElOX0ZJRUxEX0JBU0UoMTEsIDExLCAyLCAweDAwLCAweDEwLCAyNCwgMyksCisJUElOX0ZJRUxEX0JBU0UoMTIsIDEyLCAyLCAweDAwLCAweDEwLCAyNywgMyksCisJUElOX0ZJRUxEX0JBU0UoMTMsIDEzLCAyLCAweDEwLCAweDEwLCAwLCAzKSwKKwlQSU5fRklFTERfQkFTRSgxNCwgMTQsIDIsIDB4MTAsIDB4MTAsIDMsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDE1LCAxNSwgMiwgMHgwMCwgMHgxMCwgMywgMyksCisJUElOX0ZJRUxEX0JBU0UoMTYsIDE2LCAyLCAweDAwLCAweDEwLCA2LCAzKSwKKwlQSU5fRklFTERfQkFTRSgxNywgMTcsIDIsIDB4MDAsIDB4MTAsIDksIDMpLAorCVBJTl9GSUVMRF9CQVNFKDE4LCAxOCwgMiwgMHgwMCwgMHgxMCwgMTIsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDE5LCAxOSwgMiwgMHgwMCwgMHgxMCwgMTUsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDIwLCAyMCwgMiwgMHgwMCwgMHgxMCwgMTgsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDIxLCAyMSwgMSwgMHgxMCwgMHgxMCwgNiwgMyksCisJUElOX0ZJRUxEX0JBU0UoMjIsIDIyLCAxLCAweDEwLCAweDEwLCA5LCAzKSwKKwlQSU5fRklFTERfQkFTRSgyMywgMjMsIDEsIDB4MTAsIDB4MTAsIDEyLCAzKSwKKwlQSU5fRklFTERfQkFTRSgyNCwgMjQsIDEsIDB4MTAsIDB4MTAsIDI0LCAzKSwKKwlQSU5fRklFTERfQkFTRSgyNSwgMjUsIDEsIDB4MTAsIDB4MTAsIDIxLCAzKSwKKwlQSU5fRklFTERfQkFTRSgyNiwgMjYsIDEsIDB4MTAsIDB4MTAsIDE1LCAzKSwKKwlQSU5fRklFTERfQkFTRSgyNywgMjcsIDEsIDB4MTAsIDB4MTAsIDE4LCAzKSwKKwlQSU5fRklFTERfQkFTRSgyOCwgMjgsIDEsIDB4MTAsIDB4MTAsIDI3LCAzKSwKKwlQSU5fRklFTERfQkFTRSgyOSwgMjksIDEsIDB4MjAsIDB4MTAsIDAsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDMwLCAzMCwgMSwgMHgyMCwgMHgxMCwgOSwgMyksCisJUElOX0ZJRUxEX0JBU0UoMzEsIDMxLCAxLCAweDIwLCAweDEwLCA2LCAzKSwKKwlQSU5fRklFTERfQkFTRSgzMiwgMzIsIDEsIDB4MjAsIDB4MTAsIDMsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDMzLCAzMywgMywgMHgwMCwgMHgxMCwgMTIsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDM0LCAzNCwgMywgMHgwMCwgMHgxMCwgMjQsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDM1LCAzNSwgMywgMHgwMCwgMHgxMCwgMjEsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDM2LCAzNiwgMywgMHgwMCwgMHgxMCwgMTUsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDM3LCAzNywgMywgMHgwMCwgMHgxMCwgMTgsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDM4LCAzOCwgMywgMHgwMCwgMHgxMCwgMjcsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDM5LCAzOSwgMiwgMHgxMCwgMHgxMCwgMjcsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDQwLCA0MCwgMiwgMHgyMCwgMHgxMCwgMCwgMyksCisJUElOX0ZJRUxEX0JBU0UoNDEsIDQxLCAyLCAweDEwLCAweDEwLCA2LCAzKSwKKwlQSU5fRklFTERfQkFTRSg0MiwgNDIsIDIsIDB4MjAsIDB4MTAsIDksIDMpLAorCVBJTl9GSUVMRF9CQVNFKDQzLCA0MywgMiwgMHgyMCwgMHgxMCwgMTIsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDQ0LCA0NCwgMiwgMHgyMCwgMHgxMCwgMywgMyksCisJUElOX0ZJRUxEX0JBU0UoNDUsIDQ1LCAyLCAweDIwLCAweDEwLCA2LCAzKSwKKwlQSU5fRklFTERfQkFTRSg0NiwgNDYsIDIsIDB4MjAsIDB4MTAsIDIxLCAzKSwKKwlQSU5fRklFTERfQkFTRSg0NywgNDcsIDIsIDB4MjAsIDB4MTAsIDI0LCAzKSwKKwlQSU5fRklFTERfQkFTRSg0OCwgNDgsIDIsIDB4MjAsIDB4MTAsIDE1LCAzKSwKKwlQSU5fRklFTERfQkFTRSg0OSwgNDksIDIsIDB4MjAsIDB4MTAsIDE4LCAzKSwKKwlQSU5fRklFTERfQkFTRSg1MCwgNTAsIDEsIDB4MDAsIDB4MTAsIDYsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDUxLCA1MSwgMSwgMHgwMCwgMHgxMCwgOSwgMyksCisJUElOX0ZJRUxEX0JBU0UoNTIsIDUyLCAxLCAweDAwLCAweDEwLCAxMiwgMyksCisJUElOX0ZJRUxEX0JBU0UoNTMsIDUzLCAxLCAweDAwLCAweDEwLCAxNSwgMyksCisJUElOX0ZJRUxEX0JBU0UoNTQsIDU0LCAxLCAweDAwLCAweDEwLCAxOCwgMyksCisJUElOX0ZJRUxEX0JBU0UoNTUsIDU1LCAxLCAweDAwLCAweDEwLCAyMSwgMyksCisJUElOX0ZJRUxEX0JBU0UoNTYsIDU2LCAxLCAweDAwLCAweDEwLCAyNCwgMyksCisJUElOX0ZJRUxEX0JBU0UoNTcsIDU3LCAxLCAweDAwLCAweDEwLCAyNywgMyksCisJUElOX0ZJRUxEX0JBU0UoNTgsIDU4LCAxLCAweDAwLCAweDEwLCAzLCAzKSwKKwlQSU5fRklFTERfQkFTRSg1OSwgNTksIDEsIDB4MDAsIDB4MTAsIDAsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDYwLCA2MCwgMSwgMHgxMCwgMHgxMCwgMCwgMyksCisJUElOX0ZJRUxEX0JBU0UoNjEsIDYxLCAxLCAweDEwLCAweDEwLCAzLCAzKSwKKwlQSU5fRklFTERfQkFTRSg2MiwgNjIsIDIsIDB4MTAsIDB4MTAsIDE1LCAzKSwKKwlQSU5fRklFTERfQkFTRSg2MywgNjMsIDIsIDB4MTAsIDB4MTAsIDEyLCAzKSwKKwlQSU5fRklFTERfQkFTRSg2NCwgNjQsIDIsIDB4MTAsIDB4MTAsIDksIDMpLAorCVBJTl9GSUVMRF9CQVNFKDY1LCA2NSwgMiwgMHgxMCwgMHgxMCwgMTgsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDY2LCA2NiwgNCwgMHgwMCwgMHgxMCwgMiwgMyksCisJUElOX0ZJRUxEX0JBU0UoNjcsIDY3LCA0LCAweDAwLCAweDEwLCA1LCAzKSwKKwlQSU5fRklFTERfQkFTRSg2OCwgNjgsIDQsIDB4MDAsIDB4MTAsIDgsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDY5LCA2OSwgNSwgMHgwMCwgMHgxMCwgMywgMyksCisJUElOX0ZJRUxEX0JBU0UoNzAsIDcwLCA1LCAweDAwLCAweDEwLCAwLCAzKSwKKwlQSU5fRklFTERfQkFTRSg3MSwgNzEsIDUsIDB4MTAsIDB4MTAsIDE4LCAzKSwKKwlQSU5fRklFTERfQkFTRSg3MiwgNzIsIDUsIDB4MTAsIDB4MTAsIDEyLCAzKSwKKwlQSU5fRklFTERfQkFTRSg3MywgNzMsIDUsIDB4MTAsIDB4MTAsIDE1LCAzKSwKKwlQSU5fRklFTERfQkFTRSg3NCwgNzQsIDUsIDB4MDAsIDB4MTAsIDE1LCAzKSwKKwlQSU5fRklFTERfQkFTRSg3NSwgNzUsIDUsIDB4MDAsIDB4MTAsIDE4LCAzKSwKKwlQSU5fRklFTERfQkFTRSg3NiwgNzYsIDUsIDB4MDAsIDB4MTAsIDIxLCAzKSwKKwlQSU5fRklFTERfQkFTRSg3NywgNzcsIDUsIDB4MDAsIDB4MTAsIDI0LCAzKSwKKwlQSU5fRklFTERfQkFTRSg3OCwgNzgsIDUsIDB4MDAsIDB4MTAsIDYsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDc5LCA3OSwgNSwgMHgwMCwgMHgxMCwgOSwgMyksCisJUElOX0ZJRUxEX0JBU0UoODAsIDgwLCA1LCAweDAwLCAweDEwLCAyNywgMyksCisJUElOX0ZJRUxEX0JBU0UoODEsIDgxLCA1LCAweDEwLCAweDEwLCAwLCAzKSwKKwlQSU5fRklFTERfQkFTRSg4MiwgODIsIDUsIDB4MTAsIDB4MTAsIDMsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDgzLCA4MywgNSwgMHgxMCwgMHgxMCwgNiwgMyksCisJUElOX0ZJRUxEX0JBU0UoODQsIDg0LCA1LCAweDEwLCAweDEwLCA5LCAzKSwKKwlQSU5fRklFTERfQkFTRSg4NSwgODUsIDUsIDB4MDAsIDB4MTAsIDEyLCAzKSwKKwlQSU5fRklFTERfQkFTRSg4NiwgODYsIDYsIDB4MDAsIDB4MTAsIDMsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDg3LCA4NywgNiwgMHgwMCwgMHgxMCwgMCwgMyksCisJUElOX0ZJRUxEX0JBU0UoODgsIDg4LCA2LCAweDEwLCAweDEwLCAxMiwgMyksCisJUElOX0ZJRUxEX0JBU0UoODksIDg5LCA2LCAweDEwLCAweDEwLCA2LCAzKSwKKwlQSU5fRklFTERfQkFTRSg5MCwgOTAsIDYsIDB4MTAsIDB4MTAsIDksIDMpLAorCVBJTl9GSUVMRF9CQVNFKDkxLCA5MSwgNiwgMHgwMCwgMHgxMCwgMTIsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDkyLCA5MiwgNiwgMHgwMCwgMHgxMCwgMTUsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDkzLCA5MywgNiwgMHgwMCwgMHgxMCwgMTgsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDk0LCA5NCwgNiwgMHgwMCwgMHgxMCwgMjEsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDk1LCA5NSwgNiwgMHgwMCwgMHgxMCwgNiwgMyksCisJUElOX0ZJRUxEX0JBU0UoOTYsIDk2LCA2LCAweDAwLCAweDEwLCA5LCAzKSwKKwlQSU5fRklFTERfQkFTRSg5NywgOTcsIDYsIDB4MDAsIDB4MTAsIDI0LCAzKSwKKwlQSU5fRklFTERfQkFTRSg5OCwgOTgsIDYsIDB4MDAsIDB4MTAsIDI3LCAzKSwKKwlQSU5fRklFTERfQkFTRSg5OSwgOTksIDYsIDB4MTAsIDB4MTAsIDIsIDMpLAorCVBJTl9GSUVMRF9CQVNFKDEwMCwgMTAwLCA2LCAweDEwLCAweDEwLCA1LCAzKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX3Bpbl9maWVsZF9jYWxjIG10Nzk4Nl9waW5fcHVwZF9yYW5nZVtdID0geworCVBJTl9GSUVMRF9CQVNFKDAsIDAsIDIsIDB4NjAsIDB4MTAsIDE3LCAxKSwKKwlQSU5fRklFTERfQkFTRSgxLCAxLCAzLCAweDMwLCAweDEwLCAxMCwgMSksCisJUElOX0ZJRUxEX0JBU0UoMiwgMiwgMywgMHgzMCwgMHgxMCwgMTEsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDMsIDMsIDQsIDB4NDAsIDB4MTAsIDAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDQsIDQsIDQsIDB4NDAsIDB4MTAsIDEsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDUsIDUsIDIsIDB4NjAsIDB4MTAsIDAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDYsIDYsIDIsIDB4NjAsIDB4MTAsIDEsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDcsIDcsIDMsIDB4MzAsIDB4MTAsIDAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDgsIDgsIDMsIDB4MzAsIDB4MTAsIDEsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDksIDksIDMsIDB4MzAsIDB4MTAsIDIsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDEwLCAxMCwgMywgMHgzMCwgMHgxMCwgMywgMSksCisJUElOX0ZJRUxEX0JBU0UoMTEsIDExLCAyLCAweDYwLCAweDEwLCA4LCAxKSwKKwlQSU5fRklFTERfQkFTRSgxMiwgMTIsIDIsIDB4NjAsIDB4MTAsIDksIDEpLAorCVBJTl9GSUVMRF9CQVNFKDEzLCAxMywgMiwgMHg2MCwgMHgxMCwgMTAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDE0LCAxNCwgMiwgMHg2MCwgMHgxMCwgMTEsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDE1LCAxNSwgMiwgMHg2MCwgMHgxMCwgMiwgMSksCisJUElOX0ZJRUxEX0JBU0UoMTYsIDE2LCAyLCAweDYwLCAweDEwLCAzLCAxKSwKKwlQSU5fRklFTERfQkFTRSgxNywgMTcsIDIsIDB4NjAsIDB4MTAsIDQsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDE4LCAxOCwgMiwgMHg2MCwgMHgxMCwgNSwgMSksCisJUElOX0ZJRUxEX0JBU0UoMTksIDE5LCAyLCAweDYwLCAweDEwLCA2LCAxKSwKKwlQSU5fRklFTERfQkFTRSgyMCwgMjAsIDIsIDB4NjAsIDB4MTAsIDcsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDIxLCAyMSwgMSwgMHg0MCwgMHgxMCwgMTIsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDIyLCAyMiwgMSwgMHg0MCwgMHgxMCwgMTMsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDIzLCAyMywgMSwgMHg0MCwgMHgxMCwgMTQsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDI0LCAyNCwgMSwgMHg0MCwgMHgxMCwgMTgsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDI1LCAyNSwgMSwgMHg0MCwgMHgxMCwgMTcsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDI2LCAyNiwgMSwgMHg0MCwgMHgxMCwgMTUsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDI3LCAyNywgMSwgMHg0MCwgMHgxMCwgMTYsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDI4LCAyOCwgMSwgMHg0MCwgMHgxMCwgMTksIDEpLAorCVBJTl9GSUVMRF9CQVNFKDI5LCAyOSwgMSwgMHg0MCwgMHgxMCwgMjAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDMwLCAzMCwgMSwgMHg0MCwgMHgxMCwgMjMsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDMxLCAzMSwgMSwgMHg0MCwgMHgxMCwgMjIsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDMyLCAzMiwgMSwgMHg0MCwgMHgxMCwgMjEsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDMzLCAzMywgMywgMHgzMCwgMHgxMCwgNCwgMSksCisJUElOX0ZJRUxEX0JBU0UoMzQsIDM0LCAzLCAweDMwLCAweDEwLCA4LCAxKSwKKwlQSU5fRklFTERfQkFTRSgzNSwgMzUsIDMsIDB4MzAsIDB4MTAsIDcsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDM2LCAzNiwgMywgMHgzMCwgMHgxMCwgNSwgMSksCisJUElOX0ZJRUxEX0JBU0UoMzcsIDM3LCAzLCAweDMwLCAweDEwLCA2LCAxKSwKKwlQSU5fRklFTERfQkFTRSgzOCwgMzgsIDMsIDB4MzAsIDB4MTAsIDksIDEpLAorCVBJTl9GSUVMRF9CQVNFKDM5LCAzOSwgMiwgMHg2MCwgMHgxMCwgMTgsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDQwLCA0MCwgMiwgMHg2MCwgMHgxMCwgMTksIDEpLAorCVBJTl9GSUVMRF9CQVNFKDQxLCA0MSwgMiwgMHg2MCwgMHgxMCwgMTIsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDQyLCA0MiwgMiwgMHg2MCwgMHgxMCwgMjMsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDQzLCA0MywgMiwgMHg2MCwgMHgxMCwgMjQsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDQ0LCA0NCwgMiwgMHg2MCwgMHgxMCwgMjEsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDQ1LCA0NSwgMiwgMHg2MCwgMHgxMCwgMjIsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDQ2LCA0NiwgMiwgMHg2MCwgMHgxMCwgMjcsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDQ3LCA0NywgMiwgMHg2MCwgMHgxMCwgMjgsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDQ4LCA0OCwgMiwgMHg2MCwgMHgxMCwgMjUsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDQ5LCA0OSwgMiwgMHg2MCwgMHgxMCwgMjYsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDUwLCA1MCwgMSwgMHg0MCwgMHgxMCwgMiwgMSksCisJUElOX0ZJRUxEX0JBU0UoNTEsIDUxLCAxLCAweDQwLCAweDEwLCAzLCAxKSwKKwlQSU5fRklFTERfQkFTRSg1MiwgNTIsIDEsIDB4NDAsIDB4MTAsIDQsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDUzLCA1MywgMSwgMHg0MCwgMHgxMCwgNSwgMSksCisJUElOX0ZJRUxEX0JBU0UoNTQsIDU0LCAxLCAweDQwLCAweDEwLCA2LCAxKSwKKwlQSU5fRklFTERfQkFTRSg1NSwgNTUsIDEsIDB4NDAsIDB4MTAsIDcsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDU2LCA1NiwgMSwgMHg0MCwgMHgxMCwgOCwgMSksCisJUElOX0ZJRUxEX0JBU0UoNTcsIDU3LCAxLCAweDQwLCAweDEwLCA5LCAxKSwKKwlQSU5fRklFTERfQkFTRSg1OCwgNTgsIDEsIDB4NDAsIDB4MTAsIDEsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDU5LCA1OSwgMSwgMHg0MCwgMHgxMCwgMCwgMSksCisJUElOX0ZJRUxEX0JBU0UoNjAsIDYwLCAxLCAweDQwLCAweDEwLCAxMCwgMSksCisJUElOX0ZJRUxEX0JBU0UoNjEsIDYxLCAxLCAweDQwLCAweDEwLCAxMSwgMSksCisJUElOX0ZJRUxEX0JBU0UoNjIsIDYyLCAyLCAweDYwLCAweDEwLCAxNSwgMSksCisJUElOX0ZJRUxEX0JBU0UoNjMsIDYzLCAyLCAweDYwLCAweDEwLCAxNCwgMSksCisJUElOX0ZJRUxEX0JBU0UoNjQsIDY0LCAyLCAweDYwLCAweDEwLCAxMywgMSksCisJUElOX0ZJRUxEX0JBU0UoNjUsIDY1LCAyLCAweDYwLCAweDEwLCAxNiwgMSksCisJUElOX0ZJRUxEX0JBU0UoNjYsIDY2LCA0LCAweDQwLCAweDEwLCAyLCAxKSwKKwlQSU5fRklFTERfQkFTRSg2NywgNjcsIDQsIDB4NDAsIDB4MTAsIDMsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDY4LCA2OCwgNCwgMHg0MCwgMHgxMCwgNCwgMSksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19waW5fZmllbGRfY2FsYyBtdDc5ODZfcGluX3IwX3JhbmdlW10gPSB7CisJUElOX0ZJRUxEX0JBU0UoMCwgMCwgMiwgMHg3MCwgMHgxMCwgMTcsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDEsIDEsIDMsIDB4NDAsIDB4MTAsIDEwLCAxKSwKKwlQSU5fRklFTERfQkFTRSgyLCAyLCAzLCAweDQwLCAweDEwLCAxMSwgMSksCisJUElOX0ZJRUxEX0JBU0UoMywgMywgNCwgMHg1MCwgMHgxMCwgMCwgMSksCisJUElOX0ZJRUxEX0JBU0UoNCwgNCwgNCwgMHg1MCwgMHgxMCwgMSwgMSksCisJUElOX0ZJRUxEX0JBU0UoNSwgNSwgMiwgMHg3MCwgMHgxMCwgMCwgMSksCisJUElOX0ZJRUxEX0JBU0UoNiwgNiwgMiwgMHg3MCwgMHgxMCwgMSwgMSksCisJUElOX0ZJRUxEX0JBU0UoNywgNywgMywgMHg0MCwgMHgxMCwgMCwgMSksCisJUElOX0ZJRUxEX0JBU0UoOCwgOCwgMywgMHg0MCwgMHgxMCwgMSwgMSksCisJUElOX0ZJRUxEX0JBU0UoOSwgOSwgMywgMHg0MCwgMHgxMCwgMiwgMSksCisJUElOX0ZJRUxEX0JBU0UoMTAsIDEwLCAzLCAweDQwLCAweDEwLCAzLCAxKSwKKwlQSU5fRklFTERfQkFTRSgxMSwgMTEsIDIsIDB4NzAsIDB4MTAsIDgsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDEyLCAxMiwgMiwgMHg3MCwgMHgxMCwgOSwgMSksCisJUElOX0ZJRUxEX0JBU0UoMTMsIDEzLCAyLCAweDcwLCAweDEwLCAxMCwgMSksCisJUElOX0ZJRUxEX0JBU0UoMTQsIDE0LCAyLCAweDcwLCAweDEwLCAxMSwgMSksCisJUElOX0ZJRUxEX0JBU0UoMTUsIDE1LCAyLCAweDcwLCAweDEwLCAyLCAxKSwKKwlQSU5fRklFTERfQkFTRSgxNiwgMTYsIDIsIDB4NzAsIDB4MTAsIDMsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDE3LCAxNywgMiwgMHg3MCwgMHgxMCwgNCwgMSksCisJUElOX0ZJRUxEX0JBU0UoMTgsIDE4LCAyLCAweDcwLCAweDEwLCA1LCAxKSwKKwlQSU5fRklFTERfQkFTRSgxOSwgMTksIDIsIDB4NzAsIDB4MTAsIDYsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDIwLCAyMCwgMiwgMHg3MCwgMHgxMCwgNywgMSksCisJUElOX0ZJRUxEX0JBU0UoMjEsIDIxLCAxLCAweDUwLCAweDEwLCAxMiwgMSksCisJUElOX0ZJRUxEX0JBU0UoMjIsIDIyLCAxLCAweDUwLCAweDEwLCAxMywgMSksCisJUElOX0ZJRUxEX0JBU0UoMjMsIDIzLCAxLCAweDUwLCAweDEwLCAxNCwgMSksCisJUElOX0ZJRUxEX0JBU0UoMjQsIDI0LCAxLCAweDUwLCAweDEwLCAxOCwgMSksCisJUElOX0ZJRUxEX0JBU0UoMjUsIDI1LCAxLCAweDUwLCAweDEwLCAxNywgMSksCisJUElOX0ZJRUxEX0JBU0UoMjYsIDI2LCAxLCAweDUwLCAweDEwLCAxNSwgMSksCisJUElOX0ZJRUxEX0JBU0UoMjcsIDI3LCAxLCAweDUwLCAweDEwLCAxNiwgMSksCisJUElOX0ZJRUxEX0JBU0UoMjgsIDI4LCAxLCAweDUwLCAweDEwLCAxOSwgMSksCisJUElOX0ZJRUxEX0JBU0UoMjksIDI5LCAxLCAweDUwLCAweDEwLCAyMCwgMSksCisJUElOX0ZJRUxEX0JBU0UoMzAsIDMwLCAxLCAweDUwLCAweDEwLCAyMywgMSksCisJUElOX0ZJRUxEX0JBU0UoMzEsIDMxLCAxLCAweDUwLCAweDEwLCAyMiwgMSksCisJUElOX0ZJRUxEX0JBU0UoMzIsIDMyLCAxLCAweDUwLCAweDEwLCAyMSwgMSksCisJUElOX0ZJRUxEX0JBU0UoMzMsIDMzLCAzLCAweDQwLCAweDEwLCA0LCAxKSwKKwlQSU5fRklFTERfQkFTRSgzNCwgMzQsIDMsIDB4NDAsIDB4MTAsIDgsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDM1LCAzNSwgMywgMHg0MCwgMHgxMCwgNywgMSksCisJUElOX0ZJRUxEX0JBU0UoMzYsIDM2LCAzLCAweDQwLCAweDEwLCA1LCAxKSwKKwlQSU5fRklFTERfQkFTRSgzNywgMzcsIDMsIDB4NDAsIDB4MTAsIDYsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDM4LCAzOCwgMywgMHg0MCwgMHgxMCwgOSwgMSksCisJUElOX0ZJRUxEX0JBU0UoMzksIDM5LCAyLCAweDcwLCAweDEwLCAxOCwgMSksCisJUElOX0ZJRUxEX0JBU0UoNDAsIDQwLCAyLCAweDcwLCAweDEwLCAxOSwgMSksCisJUElOX0ZJRUxEX0JBU0UoNDEsIDQxLCAyLCAweDcwLCAweDEwLCAxMiwgMSksCisJUElOX0ZJRUxEX0JBU0UoNDIsIDQyLCAyLCAweDcwLCAweDEwLCAyMywgMSksCisJUElOX0ZJRUxEX0JBU0UoNDMsIDQzLCAyLCAweDcwLCAweDEwLCAyNCwgMSksCisJUElOX0ZJRUxEX0JBU0UoNDQsIDQ0LCAyLCAweDcwLCAweDEwLCAyMSwgMSksCisJUElOX0ZJRUxEX0JBU0UoNDUsIDQ1LCAyLCAweDcwLCAweDEwLCAyMiwgMSksCisJUElOX0ZJRUxEX0JBU0UoNDYsIDQ2LCAyLCAweDcwLCAweDEwLCAyNywgMSksCisJUElOX0ZJRUxEX0JBU0UoNDcsIDQ3LCAyLCAweDcwLCAweDEwLCAyOCwgMSksCisJUElOX0ZJRUxEX0JBU0UoNDgsIDQ4LCAyLCAweDcwLCAweDEwLCAyNSwgMSksCisJUElOX0ZJRUxEX0JBU0UoNDksIDQ5LCAyLCAweDcwLCAweDEwLCAyNiwgMSksCisJUElOX0ZJRUxEX0JBU0UoNTAsIDUwLCAxLCAweDUwLCAweDEwLCAyLCAxKSwKKwlQSU5fRklFTERfQkFTRSg1MSwgNTEsIDEsIDB4NTAsIDB4MTAsIDMsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDUyLCA1MiwgMSwgMHg1MCwgMHgxMCwgNCwgMSksCisJUElOX0ZJRUxEX0JBU0UoNTMsIDUzLCAxLCAweDUwLCAweDEwLCA1LCAxKSwKKwlQSU5fRklFTERfQkFTRSg1NCwgNTQsIDEsIDB4NTAsIDB4MTAsIDYsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDU1LCA1NSwgMSwgMHg1MCwgMHgxMCwgNywgMSksCisJUElOX0ZJRUxEX0JBU0UoNTYsIDU2LCAxLCAweDUwLCAweDEwLCA4LCAxKSwKKwlQSU5fRklFTERfQkFTRSg1NywgNTcsIDEsIDB4NTAsIDB4MTAsIDksIDEpLAorCVBJTl9GSUVMRF9CQVNFKDU4LCA1OCwgMSwgMHg1MCwgMHgxMCwgMSwgMSksCisJUElOX0ZJRUxEX0JBU0UoNTksIDU5LCAxLCAweDUwLCAweDEwLCAwLCAxKSwKKwlQSU5fRklFTERfQkFTRSg2MCwgNjAsIDEsIDB4NTAsIDB4MTAsIDEwLCAxKSwKKwlQSU5fRklFTERfQkFTRSg2MSwgNjEsIDEsIDB4NTAsIDB4MTAsIDExLCAxKSwKKwlQSU5fRklFTERfQkFTRSg2MiwgNjIsIDIsIDB4NzAsIDB4MTAsIDE1LCAxKSwKKwlQSU5fRklFTERfQkFTRSg2MywgNjMsIDIsIDB4NzAsIDB4MTAsIDE0LCAxKSwKKwlQSU5fRklFTERfQkFTRSg2NCwgNjQsIDIsIDB4NzAsIDB4MTAsIDEzLCAxKSwKKwlQSU5fRklFTERfQkFTRSg2NSwgNjUsIDIsIDB4NzAsIDB4MTAsIDE2LCAxKSwKKwlQSU5fRklFTERfQkFTRSg2NiwgNjYsIDQsIDB4NTAsIDB4MTAsIDIsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDY3LCA2NywgNCwgMHg1MCwgMHgxMCwgMywgMSksCisJUElOX0ZJRUxEX0JBU0UoNjgsIDY4LCA0LCAweDUwLCAweDEwLCA0LCAxKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX3Bpbl9maWVsZF9jYWxjIG10Nzk4Nl9waW5fcjFfcmFuZ2VbXSA9IHsKKwlQSU5fRklFTERfQkFTRSgwLCAwLCAyLCAweDgwLCAweDEwLCAxNywgMSksCisJUElOX0ZJRUxEX0JBU0UoMSwgMSwgMywgMHg1MCwgMHgxMCwgMTAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDIsIDIsIDMsIDB4NTAsIDB4MTAsIDExLCAxKSwKKwlQSU5fRklFTERfQkFTRSgzLCAzLCA0LCAweDYwLCAweDEwLCAwLCAxKSwKKwlQSU5fRklFTERfQkFTRSg0LCA0LCA0LCAweDYwLCAweDEwLCAxLCAxKSwKKwlQSU5fRklFTERfQkFTRSg1LCA1LCAyLCAweDgwLCAweDEwLCAwLCAxKSwKKwlQSU5fRklFTERfQkFTRSg2LCA2LCAyLCAweDgwLCAweDEwLCAxLCAxKSwKKwlQSU5fRklFTERfQkFTRSg3LCA3LCAzLCAweDUwLCAweDEwLCAwLCAxKSwKKwlQSU5fRklFTERfQkFTRSg4LCA4LCAzLCAweDUwLCAweDEwLCAxLCAxKSwKKwlQSU5fRklFTERfQkFTRSg5LCA5LCAzLCAweDUwLCAweDEwLCAyLCAxKSwKKwlQSU5fRklFTERfQkFTRSgxMCwgMTAsIDMsIDB4NTAsIDB4MTAsIDMsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDExLCAxMSwgMiwgMHg4MCwgMHgxMCwgOCwgMSksCisJUElOX0ZJRUxEX0JBU0UoMTIsIDEyLCAyLCAweDgwLCAweDEwLCA5LCAxKSwKKwlQSU5fRklFTERfQkFTRSgxMywgMTMsIDIsIDB4ODAsIDB4MTAsIDEwLCAxKSwKKwlQSU5fRklFTERfQkFTRSgxNCwgMTQsIDIsIDB4ODAsIDB4MTAsIDExLCAxKSwKKwlQSU5fRklFTERfQkFTRSgxNSwgMTUsIDIsIDB4ODAsIDB4MTAsIDIsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDE2LCAxNiwgMiwgMHg4MCwgMHgxMCwgMywgMSksCisJUElOX0ZJRUxEX0JBU0UoMTcsIDE3LCAyLCAweDgwLCAweDEwLCA0LCAxKSwKKwlQSU5fRklFTERfQkFTRSgxOCwgMTgsIDIsIDB4ODAsIDB4MTAsIDUsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDE5LCAxOSwgMiwgMHg4MCwgMHgxMCwgNiwgMSksCisJUElOX0ZJRUxEX0JBU0UoMjAsIDIwLCAyLCAweDgwLCAweDEwLCA3LCAxKSwKKwlQSU5fRklFTERfQkFTRSgyMSwgMjEsIDEsIDB4NjAsIDB4MTAsIDEyLCAxKSwKKwlQSU5fRklFTERfQkFTRSgyMiwgMjIsIDEsIDB4NjAsIDB4MTAsIDEzLCAxKSwKKwlQSU5fRklFTERfQkFTRSgyMywgMjMsIDEsIDB4NjAsIDB4MTAsIDE0LCAxKSwKKwlQSU5fRklFTERfQkFTRSgyNCwgMjQsIDEsIDB4NjAsIDB4MTAsIDE4LCAxKSwKKwlQSU5fRklFTERfQkFTRSgyNSwgMjUsIDEsIDB4NjAsIDB4MTAsIDE3LCAxKSwKKwlQSU5fRklFTERfQkFTRSgyNiwgMjYsIDEsIDB4NjAsIDB4MTAsIDE1LCAxKSwKKwlQSU5fRklFTERfQkFTRSgyNywgMjcsIDEsIDB4NjAsIDB4MTAsIDE2LCAxKSwKKwlQSU5fRklFTERfQkFTRSgyOCwgMjgsIDEsIDB4NjAsIDB4MTAsIDE5LCAxKSwKKwlQSU5fRklFTERfQkFTRSgyOSwgMjksIDEsIDB4NjAsIDB4MTAsIDIwLCAxKSwKKwlQSU5fRklFTERfQkFTRSgzMCwgMzAsIDEsIDB4NjAsIDB4MTAsIDIzLCAxKSwKKwlQSU5fRklFTERfQkFTRSgzMSwgMzEsIDEsIDB4NjAsIDB4MTAsIDIyLCAxKSwKKwlQSU5fRklFTERfQkFTRSgzMiwgMzIsIDEsIDB4NjAsIDB4MTAsIDIxLCAxKSwKKwlQSU5fRklFTERfQkFTRSgzMywgMzMsIDMsIDB4NTAsIDB4MTAsIDQsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDM0LCAzNCwgMywgMHg1MCwgMHgxMCwgOCwgMSksCisJUElOX0ZJRUxEX0JBU0UoMzUsIDM1LCAzLCAweDUwLCAweDEwLCA3LCAxKSwKKwlQSU5fRklFTERfQkFTRSgzNiwgMzYsIDMsIDB4NTAsIDB4MTAsIDUsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDM3LCAzNywgMywgMHg1MCwgMHgxMCwgNiwgMSksCisJUElOX0ZJRUxEX0JBU0UoMzgsIDM4LCAzLCAweDUwLCAweDEwLCA5LCAxKSwKKwlQSU5fRklFTERfQkFTRSgzOSwgMzksIDIsIDB4ODAsIDB4MTAsIDE4LCAxKSwKKwlQSU5fRklFTERfQkFTRSg0MCwgNDAsIDIsIDB4ODAsIDB4MTAsIDE5LCAxKSwKKwlQSU5fRklFTERfQkFTRSg0MSwgNDEsIDIsIDB4ODAsIDB4MTAsIDEyLCAxKSwKKwlQSU5fRklFTERfQkFTRSg0MiwgNDIsIDIsIDB4ODAsIDB4MTAsIDIzLCAxKSwKKwlQSU5fRklFTERfQkFTRSg0MywgNDMsIDIsIDB4ODAsIDB4MTAsIDI0LCAxKSwKKwlQSU5fRklFTERfQkFTRSg0NCwgNDQsIDIsIDB4ODAsIDB4MTAsIDIxLCAxKSwKKwlQSU5fRklFTERfQkFTRSg0NSwgNDUsIDIsIDB4ODAsIDB4MTAsIDIyLCAxKSwKKwlQSU5fRklFTERfQkFTRSg0NiwgNDYsIDIsIDB4ODAsIDB4MTAsIDI3LCAxKSwKKwlQSU5fRklFTERfQkFTRSg0NywgNDcsIDIsIDB4ODAsIDB4MTAsIDI4LCAxKSwKKwlQSU5fRklFTERfQkFTRSg0OCwgNDgsIDIsIDB4ODAsIDB4MTAsIDI1LCAxKSwKKwlQSU5fRklFTERfQkFTRSg0OSwgNDksIDIsIDB4ODAsIDB4MTAsIDI2LCAxKSwKKwlQSU5fRklFTERfQkFTRSg1MCwgNTAsIDEsIDB4NjAsIDB4MTAsIDIsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDUxLCA1MSwgMSwgMHg2MCwgMHgxMCwgMywgMSksCisJUElOX0ZJRUxEX0JBU0UoNTIsIDUyLCAxLCAweDYwLCAweDEwLCA0LCAxKSwKKwlQSU5fRklFTERfQkFTRSg1MywgNTMsIDEsIDB4NjAsIDB4MTAsIDUsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDU0LCA1NCwgMSwgMHg2MCwgMHgxMCwgNiwgMSksCisJUElOX0ZJRUxEX0JBU0UoNTUsIDU1LCAxLCAweDYwLCAweDEwLCA3LCAxKSwKKwlQSU5fRklFTERfQkFTRSg1NiwgNTYsIDEsIDB4NjAsIDB4MTAsIDgsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDU3LCA1NywgMSwgMHg2MCwgMHgxMCwgOSwgMSksCisJUElOX0ZJRUxEX0JBU0UoNTgsIDU4LCAxLCAweDYwLCAweDEwLCAxLCAxKSwKKwlQSU5fRklFTERfQkFTRSg1OSwgNTksIDEsIDB4NjAsIDB4MTAsIDAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDYwLCA2MCwgMSwgMHg2MCwgMHgxMCwgMTAsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDYxLCA2MSwgMSwgMHg2MCwgMHgxMCwgMTEsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDYyLCA2MiwgMiwgMHg4MCwgMHgxMCwgMTUsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDYzLCA2MywgMiwgMHg4MCwgMHgxMCwgMTQsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDY0LCA2NCwgMiwgMHg4MCwgMHgxMCwgMTMsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDY1LCA2NSwgMiwgMHg4MCwgMHgxMCwgMTYsIDEpLAorCVBJTl9GSUVMRF9CQVNFKDY2LCA2NiwgNCwgMHg2MCwgMHgxMCwgMiwgMSksCisJUElOX0ZJRUxEX0JBU0UoNjcsIDY3LCA0LCAweDYwLCAweDEwLCAzLCAxKSwKKwlQSU5fRklFTERfQkFTRSg2OCwgNjgsIDQsIDB4NjAsIDB4MTAsIDQsIDEpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfcGluX3JlZ19jYWxjIG10Nzk4Nl9yZWdfY2Fsc1tdID0geworCVtQSU5DVFJMX1BJTl9SRUdfTU9ERV0gPSBNVEtfUkFOR0UobXQ3OTg2X3Bpbl9tb2RlX3JhbmdlKSwKKwlbUElOQ1RSTF9QSU5fUkVHX0RJUl0gPSBNVEtfUkFOR0UobXQ3OTg2X3Bpbl9kaXJfcmFuZ2UpLAorCVtQSU5DVFJMX1BJTl9SRUdfREldID0gTVRLX1JBTkdFKG10Nzk4Nl9waW5fZGlfcmFuZ2UpLAorCVtQSU5DVFJMX1BJTl9SRUdfRE9dID0gTVRLX1JBTkdFKG10Nzk4Nl9waW5fZG9fcmFuZ2UpLAorCVtQSU5DVFJMX1BJTl9SRUdfU01UXSA9IE1US19SQU5HRShtdDc5ODZfcGluX3NtdF9yYW5nZSksCisJW1BJTkNUUkxfUElOX1JFR19JRVNdID0gTVRLX1JBTkdFKG10Nzk4Nl9waW5faWVzX3JhbmdlKSwKKwlbUElOQ1RSTF9QSU5fUkVHX1BVXSA9IE1US19SQU5HRShtdDc5ODZfcGluX3B1X3JhbmdlKSwKKwlbUElOQ1RSTF9QSU5fUkVHX1BEXSA9IE1US19SQU5HRShtdDc5ODZfcGluX3BkX3JhbmdlKSwKKwlbUElOQ1RSTF9QSU5fUkVHX0RSVl0gPSBNVEtfUkFOR0UobXQ3OTg2X3Bpbl9kcnZfcmFuZ2UpLAorCVtQSU5DVFJMX1BJTl9SRUdfUFVQRF0gPSBNVEtfUkFOR0UobXQ3OTg2X3Bpbl9wdXBkX3JhbmdlKSwKKwlbUElOQ1RSTF9QSU5fUkVHX1IwXSA9IE1US19SQU5HRShtdDc5ODZfcGluX3IwX3JhbmdlKSwKKwlbUElOQ1RSTF9QSU5fUkVHX1IxXSA9IE1US19SQU5HRShtdDc5ODZfcGluX3IxX3JhbmdlKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX3Bpbl9kZXNjIG10Nzk4Nl9waW5zW10gPSB7CisJTVQ3OTg2X1BJTigwLCAiU1lTX1dBVENIRE9HIiksCisJTVQ3OTg2X1BJTigxLCAiV0YyR19MRUQiKSwKKwlNVDc5ODZfUElOKDIsICJXRjVHX0xFRCIpLAorCU1UNzk4Nl9QSU4oMywgIkkyQ19TQ0wiKSwKKwlNVDc5ODZfUElOKDQsICJJMkNfU0RBIiksCisJTVQ3OTg2X1BJTig1LCAiR1BJT18wIiksCisJTVQ3OTg2X1BJTig2LCAiR1BJT18xIiksCisJTVQ3OTg2X1BJTig3LCAiR1BJT18yIiksCisJTVQ3OTg2X1BJTig4LCAiR1BJT18zIiksCisJTVQ3OTg2X1BJTig5LCAiR1BJT180IiksCisJTVQ3OTg2X1BJTigxMCwgIkdQSU9fNSIpLAorCU1UNzk4Nl9QSU4oMTEsICJHUElPXzYiKSwKKwlNVDc5ODZfUElOKDEyLCAiR1BJT183IiksCisJTVQ3OTg2X1BJTigxMywgIkdQSU9fOCIpLAorCU1UNzk4Nl9QSU4oMTQsICJHUElPXzkiKSwKKwlNVDc5ODZfUElOKDE1LCAiR1BJT18xMCIpLAorCU1UNzk4Nl9QSU4oMTYsICJHUElPXzExIiksCisJTVQ3OTg2X1BJTigxNywgIkdQSU9fMTIiKSwKKwlNVDc5ODZfUElOKDE4LCAiR1BJT18xMyIpLAorCU1UNzk4Nl9QSU4oMTksICJHUElPXzE0IiksCisJTVQ3OTg2X1BJTigyMCwgIkdQSU9fMTUiKSwKKwlNVDc5ODZfUElOKDIxLCAiUFdNMCIpLAorCU1UNzk4Nl9QSU4oMjIsICJQV00xIiksCisJTVQ3OTg2X1BJTigyMywgIlNQSTBfQ0xLIiksCisJTVQ3OTg2X1BJTigyNCwgIlNQSTBfTU9TSSIpLAorCU1UNzk4Nl9QSU4oMjUsICJTUEkwX01JU08iKSwKKwlNVDc5ODZfUElOKDI2LCAiU1BJMF9DUyIpLAorCU1UNzk4Nl9QSU4oMjcsICJTUEkwX0hPTEQiKSwKKwlNVDc5ODZfUElOKDI4LCAiU1BJMF9XUCIpLAorCU1UNzk4Nl9QSU4oMjksICJTUEkxX0NMSyIpLAorCU1UNzk4Nl9QSU4oMzAsICJTUEkxX01PU0kiKSwKKwlNVDc5ODZfUElOKDMxLCAiU1BJMV9NSVNPIiksCisJTVQ3OTg2X1BJTigzMiwgIlNQSTFfQ1MiKSwKKwlNVDc5ODZfUElOKDMzLCAiU1BJMl9DTEsiKSwKKwlNVDc5ODZfUElOKDM0LCAiU1BJMl9NT1NJIiksCisJTVQ3OTg2X1BJTigzNSwgIlNQSTJfTUlTTyIpLAorCU1UNzk4Nl9QSU4oMzYsICJTUEkyX0NTIiksCisJTVQ3OTg2X1BJTigzNywgIlNQSTJfSE9MRCIpLAorCU1UNzk4Nl9QSU4oMzgsICJTUEkyX1dQIiksCisJTVQ3OTg2X1BJTigzOSwgIlVBUlQwX1JYRCIpLAorCU1UNzk4Nl9QSU4oNDAsICJVQVJUMF9UWEQiKSwKKwlNVDc5ODZfUElOKDQxLCAiUENJRV9QRVJFU0VUX04iKSwKKwlNVDc5ODZfUElOKDQyLCAiVUFSVDFfUlhEIiksCisJTVQ3OTg2X1BJTig0MywgIlVBUlQxX1RYRCIpLAorCU1UNzk4Nl9QSU4oNDQsICJVQVJUMV9DVFMiKSwKKwlNVDc5ODZfUElOKDQ1LCAiVUFSVDFfUlRTIiksCisJTVQ3OTg2X1BJTig0NiwgIlVBUlQyX1JYRCIpLAorCU1UNzk4Nl9QSU4oNDcsICJVQVJUMl9UWEQiKSwKKwlNVDc5ODZfUElOKDQ4LCAiVUFSVDJfQ1RTIiksCisJTVQ3OTg2X1BJTig0OSwgIlVBUlQyX1JUUyIpLAorCU1UNzk4Nl9QSU4oNTAsICJFTU1DX0RBVEFfMCIpLAorCU1UNzk4Nl9QSU4oNTEsICJFTU1DX0RBVEFfMSIpLAorCU1UNzk4Nl9QSU4oNTIsICJFTU1DX0RBVEFfMiIpLAorCU1UNzk4Nl9QSU4oNTMsICJFTU1DX0RBVEFfMyIpLAorCU1UNzk4Nl9QSU4oNTQsICJFTU1DX0RBVEFfNCIpLAorCU1UNzk4Nl9QSU4oNTUsICJFTU1DX0RBVEFfNSIpLAorCU1UNzk4Nl9QSU4oNTYsICJFTU1DX0RBVEFfNiIpLAorCU1UNzk4Nl9QSU4oNTcsICJFTU1DX0RBVEFfNyIpLAorCU1UNzk4Nl9QSU4oNTgsICJFTU1DX0NNRCIpLAorCU1UNzk4Nl9QSU4oNTksICJFTU1DX0NLIiksCisJTVQ3OTg2X1BJTig2MCwgIkVNTUNfRFNMIiksCisJTVQ3OTg2X1BJTig2MSwgIkVNTUNfUlNUQiIpLAorCU1UNzk4Nl9QSU4oNjIsICJQQ01fRFRYIiksCisJTVQ3OTg2X1BJTig2MywgIlBDTV9EUlgiKSwKKwlNVDc5ODZfUElOKDY0LCAiUENNX0NMSyIpLAorCU1UNzk4Nl9QSU4oNjUsICJQQ01fRlMiKSwKKwlNVDc5ODZfUElOKDY2LCAiTVQ3NTMxX0lOVCIpLAorCU1UNzk4Nl9QSU4oNjcsICJTTUlfTURDIiksCisJTVQ3OTg2X1BJTig2OCwgIlNNSV9NRElPIiksCisJTVQ3OTg2X1BJTig2OSwgIldGMF9ESUdfUkVTRVRCIiksCisJTVQ3OTg2X1BJTig3MCwgIldGMF9DQkFfUkVTRVRCIiksCisJTVQ3OTg2X1BJTig3MSwgIldGMF9YT19SRVEiKSwKKwlNVDc5ODZfUElOKDcyLCAiV0YwX1RPUF9DTEsiKSwKKwlNVDc5ODZfUElOKDczLCAiV0YwX1RPUF9EQVRBIiksCisJTVQ3OTg2X1BJTig3NCwgIldGMF9IQjEiKSwKKwlNVDc5ODZfUElOKDc1LCAiV0YwX0hCMiIpLAorCU1UNzk4Nl9QSU4oNzYsICJXRjBfSEIzIiksCisJTVQ3OTg2X1BJTig3NywgIldGMF9IQjQiKSwKKwlNVDc5ODZfUElOKDc4LCAiV0YwX0hCMCIpLAorCU1UNzk4Nl9QSU4oNzksICJXRjBfSEIwX0IiKSwKKwlNVDc5ODZfUElOKDgwLCAiV0YwX0hCNSIpLAorCU1UNzk4Nl9QSU4oODEsICJXRjBfSEI2IiksCisJTVQ3OTg2X1BJTig4MiwgIldGMF9IQjciKSwKKwlNVDc5ODZfUElOKDgzLCAiV0YwX0hCOCIpLAorCU1UNzk4Nl9QSU4oODQsICJXRjBfSEI5IiksCisJTVQ3OTg2X1BJTig4NSwgIldGMF9IQjEwIiksCisJTVQ3OTg2X1BJTig4NiwgIldGMV9ESUdfUkVTRVRCIiksCisJTVQ3OTg2X1BJTig4NywgIldGMV9DQkFfUkVTRVRCIiksCisJTVQ3OTg2X1BJTig4OCwgIldGMV9YT19SRVEiKSwKKwlNVDc5ODZfUElOKDg5LCAiV0YxX1RPUF9DTEsiKSwKKwlNVDc5ODZfUElOKDkwLCAiV0YxX1RPUF9EQVRBIiksCisJTVQ3OTg2X1BJTig5MSwgIldGMV9IQjEiKSwKKwlNVDc5ODZfUElOKDkyLCAiV0YxX0hCMiIpLAorCU1UNzk4Nl9QSU4oOTMsICJXRjFfSEIzIiksCisJTVQ3OTg2X1BJTig5NCwgIldGMV9IQjQiKSwKKwlNVDc5ODZfUElOKDk1LCAiV0YxX0hCMCIpLAorCU1UNzk4Nl9QSU4oOTYsICJXRjFfSEIwX0IiKSwKKwlNVDc5ODZfUElOKDk3LCAiV0YxX0hCNSIpLAorCU1UNzk4Nl9QSU4oOTgsICJXRjFfSEI2IiksCisJTVQ3OTg2X1BJTig5OSwgIldGMV9IQjciKSwKKwlNVDc5ODZfUElOKDEwMCwgIldGMV9IQjgiKSwKK307CisKKy8qIExpc3QgYWxsIGdyb3VwcyBjb25zaXN0aW5nIG9mIHRoZXNlIHBpbnMgZGVkaWNhdGVkIHRvIHRoZSBlbmFibGVtZW50IG9mCisgKiBjZXJ0YWluIGhhcmR3YXJlIGJsb2NrIGFuZCB0aGUgY29ycmVzcG9uZGluZyBtb2RlIGZvciBhbGwgb2YgdGhlIHBpbnMuCisgKiBUaGUgaGFyZHdhcmUgcHJvYmFibHkgaGFzIG11bHRpcGxlIGNvbWJpbmF0aW9ucyBvZiB0aGVzZSBwaW5vdXRzLgorICovCisKKy8qIFNZU19XQVRDSERPRyAqLworc3RhdGljIGludCBtdDc5ODZfd2F0Y2hkb2dfcGluc1tdID0geyAwLCB9Oworc3RhdGljIGludCBtdDc5ODZfd2F0Y2hkb2dfZnVuY3NbXSA9IHsgMSwgfTsKKworLyogV0YyR19MRUQoMSksIFdGNUdfTEVEICovCitzdGF0aWMgaW50IG10Nzk4Nl93aWZpX2xlZF9waW5zW10gPSB7IDEsIDIsIH07CitzdGF0aWMgaW50IG10Nzk4Nl93aWZpX2xlZF9mdW5jc1tdID0geyAxLCAxLCB9OworCisvKiBJMkMgKi8KK3N0YXRpYyBpbnQgbXQ3OTg2X2kyY19waW5zW10gPSB7IDMsIDQsIH07CitzdGF0aWMgaW50IG10Nzk4Nl9pMmNfZnVuY3NbXSA9IHsgMSwgMSwgfTsKKworLyogVUFSVDEgKi8KK3N0YXRpYyBpbnQgbXQ3OTg2X3VhcnQxXzBfcGluc1tdID0geyA3LCA4LCA5LCAxMCwgfTsKK3N0YXRpYyBpbnQgbXQ3OTg2X3VhcnQxXzBfZnVuY3NbXSA9IHsgMywgMywgMywgMywgfTsKKworLyogSlRBRyAqLworc3RhdGljIGludCBtdDc5ODZfanRhZ19waW5zW10gPSB7IDExLCAxMiwgMTMsIDE0LCAxNSwgfTsKK3N0YXRpYyBpbnQgbXQ3OTg2X2p0YWdfZnVuY3NbXSA9IHsgMSwgMSwgMSwgMSwgMSwgfTsKKworLyogU1BJMSAqLworc3RhdGljIGludCBtdDc5ODZfc3BpMV8wX3BpbnNbXSA9IHsgMTEsIDEyLCAxMywgMTQsIH07CitzdGF0aWMgaW50IG10Nzk4Nl9zcGkxXzBfZnVuY3NbXSA9IHsgMywgMywgMywgMywgfTsKKworLyogUFdNICovCitzdGF0aWMgaW50IG10Nzk4Nl9wd20xXzFfcGluc1tdID0geyAyMCwgfTsKK3N0YXRpYyBpbnQgbXQ3OTg2X3B3bTFfMV9mdW5jc1tdID0geyAyLCB9OworCisvKiBQV00gKi8KK3N0YXRpYyBpbnQgbXQ3OTg2X3B3bTBfcGluc1tdID0geyAyMSwgfTsKK3N0YXRpYyBpbnQgbXQ3OTg2X3B3bTBfZnVuY3NbXSA9IHsgMSwgfTsKKworLyogUFdNICovCitzdGF0aWMgaW50IG10Nzk4Nl9wd20xXzBfcGluc1tdID0geyAyMiwgfTsKK3N0YXRpYyBpbnQgbXQ3OTg2X3B3bTFfMF9mdW5jc1tdID0geyAxLCB9OworCisvKiBFTU1DICovCitzdGF0aWMgaW50IG10Nzk4Nl9lbW1jXzQ1X3BpbnNbXSA9IHsgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCB9Oworc3RhdGljIGludCBtdDc5ODZfZW1tY180NV9mdW5jc1tdID0geyAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCB9OworCisvKiBTTkZJICovCitzdGF0aWMgaW50IG10Nzk4Nl9zbmZpX3BpbnNbXSA9IHsgMjMsIDI0LCAyNSwgMjYsIDI3LCAyOCwgfTsKK3N0YXRpYyBpbnQgbXQ3OTg2X3NuZmlfZnVuY3NbXSA9IHsgMSwgMSwgMSwgMSwgMSwgMSwgfTsKKworLyogU1BJMSAqLworc3RhdGljIGludCBtdDc5ODZfc3BpMV8xX3BpbnNbXSA9IHsgMjMsIDI0LCAyNSwgMjYsIH07CitzdGF0aWMgaW50IG10Nzk4Nl9zcGkxXzFfZnVuY3NbXSA9IHsgMywgMywgMywgMywgfTsKKworLyogVUFSVDEgKi8KK3N0YXRpYyBpbnQgbXQ3OTg2X3VhcnQxXzFfcGluc1tdID0geyAyMywgMjQsIDI1LCAyNiwgfTsKK3N0YXRpYyBpbnQgbXQ3OTg2X3VhcnQxXzFfZnVuY3NbXSA9IHsgNCwgNCwgNCwgNCwgfTsKKworLyogU1BJMSAqLworc3RhdGljIGludCBtdDc5ODZfc3BpMV8yX3BpbnNbXSA9IHsgMjksIDMwLCAzMSwgMzIsIH07CitzdGF0aWMgaW50IG10Nzk4Nl9zcGkxXzJfZnVuY3NbXSA9IHsgMSwgMSwgMSwgMSwgfTsKKworLyogVUFSVDEgKi8KK3N0YXRpYyBpbnQgbXQ3OTg2X3VhcnQxXzJfcGluc1tdID0geyAyOSwgMzAsIDMxLCAzMiwgfTsKK3N0YXRpYyBpbnQgbXQ3OTg2X3VhcnQxXzJfZnVuY3NbXSA9IHsgMywgMywgMywgMywgfTsKKworLyogVUFSVDIgKi8KK3N0YXRpYyBpbnQgbXQ3OTg2X3VhcnQyXzBfcGluc1tdID0geyAyOSwgMzAsIDMxLCAzMiwgfTsKK3N0YXRpYyBpbnQgbXQ3OTg2X3VhcnQyXzBfZnVuY3NbXSA9IHsgNCwgNCwgNCwgNCwgfTsKKworLyogU1BJMCAqLworc3RhdGljIGludCBtdDc5ODZfc3BpMF9waW5zW10gPSB7IDMzLCAzNCwgMzUsIDM2LCB9Oworc3RhdGljIGludCBtdDc5ODZfc3BpMF9mdW5jc1tdID0geyAxLCAxLCAxLCAxLCB9OworCisvKiBTUEkwICovCitzdGF0aWMgaW50IG10Nzk4Nl9zcGkwX3dwX2hvbGRfcGluc1tdID0geyAzNywgMzgsIH07CitzdGF0aWMgaW50IG10Nzk4Nl9zcGkwX3dwX2hvbGRfZnVuY3NbXSA9IHsgMSwgMSwgfTsKKworLyogVUFSVDIgKi8KK3N0YXRpYyBpbnQgbXQ3OTg2X3VhcnQyXzFfcGluc1tdID0geyAzMywgMzQsIDM1LCAzNiwgfTsKK3N0YXRpYyBpbnQgbXQ3OTg2X3VhcnQyXzFfZnVuY3NbXSA9IHsgMywgMywgMywgMywgfTsKKworLyogVUFSVDEgKi8KK3N0YXRpYyBpbnQgbXQ3OTg2X3VhcnQxXzNfcnhfdHhfcGluc1tdID0geyAzNSwgMzYsIH07CitzdGF0aWMgaW50IG10Nzk4Nl91YXJ0MV8zX3J4X3R4X2Z1bmNzW10gPSB7IDIsIDIsIH07CisKKy8qIFVBUlQxICovCitzdGF0aWMgaW50IG10Nzk4Nl91YXJ0MV8zX2N0c19ydHNfcGluc1tdID0geyAzNywgMzgsIH07CitzdGF0aWMgaW50IG10Nzk4Nl91YXJ0MV8zX2N0c19ydHNfZnVuY3NbXSA9IHsgMiwgMiwgfTsKKworLyogU1BJMSAqLworc3RhdGljIGludCBtdDc5ODZfc3BpMV8zX3BpbnNbXSA9IHsgMzMsIDM0LCAzNSwgMzYsIH07CitzdGF0aWMgaW50IG10Nzk4Nl9zcGkxXzNfZnVuY3NbXSA9IHsgNCwgNCwgNCwgNCwgfTsKKworLyogVUFSVDAgKi8KK3N0YXRpYyBpbnQgbXQ3OTg2X3VhcnQwX3BpbnNbXSA9IHsgMzksIDQwLCB9Oworc3RhdGljIGludCBtdDc5ODZfdWFydDBfZnVuY3NbXSA9IHsgMSwgMSwgfTsKKworLyogUENJRV9QRVJFU0VUX04gKi8KK3N0YXRpYyBpbnQgbXQ3OTg2X3BjaWVfcmVzZXRfcGluc1tdID0geyA0MSwgfTsKK3N0YXRpYyBpbnQgbXQ3OTg2X3BjaWVfcmVzZXRfZnVuY3NbXSA9IHsgMSwgfTsKKworLyogVUFSVDEgKi8KK3N0YXRpYyBpbnQgbXQ3OTg2X3VhcnQxX3BpbnNbXSA9IHsgNDIsIDQzLCA0NCwgNDUsIH07CitzdGF0aWMgaW50IG10Nzk4Nl91YXJ0MV9mdW5jc1tdID0geyAxLCAxLCAxLCAxLCB9OworCisvKiBVQVJUMSAqLworc3RhdGljIGludCBtdDc5ODZfdWFydDJfcGluc1tdID0geyA0NiwgNDcsIDQ4LCA0OSwgfTsKK3N0YXRpYyBpbnQgbXQ3OTg2X3VhcnQyX2Z1bmNzW10gPSB7IDEsIDEsIDEsIDEsIH07CisKKy8qIEVNTUMgKi8KK3N0YXRpYyBpbnQgbXQ3OTg2X2VtbWNfNTFfcGluc1tdID0geyA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCB9Oworc3RhdGljIGludCBtdDc5ODZfZW1tY181MV9mdW5jc1tdID0geyAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCB9OworCisvKiBQQ00gKi8KK3N0YXRpYyBpbnQgbXQ3OTg2X3BjbV9waW5zW10gPSB7IDYyLCA2MywgNjQsIDY1LCB9Oworc3RhdGljIGludCBtdDc5ODZfcGNtX2Z1bmNzW10gPSB7IDEsIDEsIDEsIDEsIH07CisKKy8qIE1UNzUzMV9JTlQgKi8KK3N0YXRpYyBpbnQgbXQ3OTg2X3N3aXRjaF9pbnRfcGluc1tdID0geyA2NiwgfTsKK3N0YXRpYyBpbnQgbXQ3OTg2X3N3aXRjaF9pbnRfZnVuY3NbXSA9IHsgMSwgfTsKKworLyogTURDX01ESU8gKi8KK3N0YXRpYyBpbnQgbXQ3OTg2X21kY19tZGlvX3BpbnNbXSA9IHsgNjcsIDY4LCB9Oworc3RhdGljIGludCBtdDc5ODZfbWRjX21kaW9fZnVuY3NbXSA9IHsgMSwgMSwgfTsKKworLyogV0YwX01PREUxICovCitzdGF0aWMgaW50IG10Nzk4Nl93ZjBfbW9kZTFfcGluc1tdID0geyA2OSwgNzAsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4MSwgODIsIDgzLCA4NCwgODUgfTsKK3N0YXRpYyBpbnQgbXQ3OTg2X3dmMF9tb2RlMV9mdW5jc1tdID0geyAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxIH07CisKK3N0YXRpYyBpbnQgbXQ3OTg2X3dmXzJnX3BpbnNbXSA9IHs3NCwgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODEsIDgyLCA4MywgfTsKK3N0YXRpYyBpbnQgbXQ3OTg2X3dmXzJnX2Z1bmNzW10gPSB7MSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgfTsKKworc3RhdGljIGludCBtdDc5ODZfd2ZfNWdfcGluc1tdID0gezkxLCA5MiwgOTMsIDk0LCA5NSwgOTYsIDk3LCA5OCwgOTksIDEwMCwgfTsKK3N0YXRpYyBpbnQgbXQ3OTg2X3dmXzVnX2Z1bmNzW10gPSB7MSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgfTsKKworc3RhdGljIGludCBtdDc5ODZfd2ZfZGJkY19waW5zW10gPSB7CisJNzQsIDc1LCA3NiwgNzcsIDc4LCA3OSwgODAsIDgxLCA4MiwgODMsIDg0LCA4NSwgfTsKK3N0YXRpYyBpbnQgbXQ3OTg2X3dmX2RiZGNfZnVuY3NbXSA9IHsKKwkyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCB9OworCisvKiBXRjBfSEIgKi8KK3N0YXRpYyBpbnQgbXQ3OTg2X3dmMF9oYl9waW5zW10gPSB7IDc0LCA3NSwgNzYsIDc3LCA3OCB9Oworc3RhdGljIGludCBtdDc5ODZfd2YwX2hiX2Z1bmNzW10gPSB7IDIsIDIsIDIsIDIsIDIgfTsKKworLyogV0YwX01PREUzICovCitzdGF0aWMgaW50IG10Nzk4Nl93ZjBfbW9kZTNfcGluc1tdID0geyA3NCwgNzUsIDc2LCA3NywgNzgsIDgwIH07CitzdGF0aWMgaW50IG10Nzk4Nl93ZjBfbW9kZTNfZnVuY3NbXSA9IHsgMywgMywgMywgMywgMywgMyB9OworCisvKiBXRjFfSEIgKi8KK3N0YXRpYyBpbnQgbXQ3OTg2X3dmMV9oYl9waW5zW10gPSB7IDc5LCA4MCwgODEsIDgyLCA4MywgODQsIDg1IH07CitzdGF0aWMgaW50IG10Nzk4Nl93ZjFfaGJfZnVuY3NbXSA9IHsgMiwgMiwgMiwgMiwgMiwgMiwgMiB9OworCisvKiBXRjFfTU9ERTEgKi8KK3N0YXRpYyBpbnQgbXQ3OTg2X3dmMV9tb2RlMV9waW5zW10gPSB7IDg2LCA4NywgODgsIDg5LCA5MCwgOTEsIDkyLCA5MywgOTQsIDk1LCA5NiwgOTcsIDk4LCA5OSwgMTAwIH07CitzdGF0aWMgaW50IG10Nzk4Nl93ZjFfbW9kZTFfZnVuY3NbXSA9IHsgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSB9OworCisvKiBXRjFfTU9ERTIgKi8KK3N0YXRpYyBpbnQgbXQ3OTg2X3dmMV9tb2RlMl9waW5zW10gPSB7IDkxLCA5MiwgOTMsIDk0LCA5NSwgOTcgfTsKK3N0YXRpYyBpbnQgbXQ3OTg2X3dmMV9tb2RlMl9mdW5jc1tdID0geyAyLCAyLCAyLCAyLCAyLCAyIH07CisKKy8qIFBDSUVfQ0xLX1JFUSAqLworc3RhdGljIGludCBtdDc5ODZfcGNpZV9jbGtfcGluc1tdID0geyA5LCB9Oworc3RhdGljIGludCBtdDc5ODZfcGNpZV9jbGtfZnVuY3NbXSA9IHsgMSwgfTsKKworLyogUENJRV9XQUtFX04gKi8KK3N0YXRpYyBpbnQgbXQ3OTg2X3BjaWVfd2FrZV9waW5zW10gPSB7IDEwLCB9Oworc3RhdGljIGludCBtdDc5ODZfcGNpZV93YWtlX2Z1bmNzW10gPSB7IDEsIH07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZ3JvdXBfZGVzYyBtdDc5ODZfZ3JvdXBzW10gPSB7CisJLyogIEBHUElPKDApOiBTWVNfV0FUQ0hET0coMSkgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoIndhdGNoZG9nIiwgbXQ3OTg2X3dhdGNoZG9nKSwKKwkvKiAgQEdQSU8oMSwyKTogV0YyR19MRUQoMSksIFdGNUdfTEVEKDEpICovCisgICAgICAgIFBJTkNUUkxfUElOX0dST1VQKCJ3aWZpX2xlZCIsIG10Nzk4Nl93aWZpX2xlZCksCisJLyogIEBHUElPKDMsNCk6IEkyQygxKSAqLworICAgICAgICBQSU5DVFJMX1BJTl9HUk9VUCgiaTJjIiwgbXQ3OTg2X2kyYyksCisJLyogIEBHUElPKDcsMTApOiBVQVJUMSgzKSAqLworICAgICAgICBQSU5DVFJMX1BJTl9HUk9VUCgidWFydDFfMCIsIG10Nzk4Nl91YXJ0MV8wKSwKKyAgICAgICAgLyogIEBHUElPKDkpOiBQQ0lFX0NMS19SRVEoOSkgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoInBjaWVfY2xrIiwgbXQ3OTg2X3BjaWVfY2xrKSwKKyAgICAgICAgLyogIEBHUElPKDEwKTogUENJRV9XQUtFX04oMTApICovCisgICAgICAgIFBJTkNUUkxfUElOX0dST1VQKCJwY2llX3dha2UiLCBtdDc5ODZfcGNpZV93YWtlKSwKKwkvKiAgQEdQSU8oMTEsMTUpOiBKVEFHKDEpICovCisgICAgICAgIFBJTkNUUkxfUElOX0dST1VQKCJqdGFnIiwgbXQ3OTg2X2p0YWcpLAorCS8qICBAR1BJTygxMSwxNSk6IFNQSTEoMykgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoInNwaTFfMCIsIG10Nzk4Nl9zcGkxXzApLAorCS8qICBAR1BJTygyMCk6IFBXTSgyKSAqLworICAgICAgICBQSU5DVFJMX1BJTl9HUk9VUCgicHdtMV8xIiwgbXQ3OTg2X3B3bTFfMSksCisJLyogIEBHUElPKDIxKTogUFdNKDEpICovCisgICAgICAgIFBJTkNUUkxfUElOX0dST1VQKCJwd20wIiwgbXQ3OTg2X3B3bTApLAorCS8qICBAR1BJTygyMik6IFBXTSgxKSAqLworICAgICAgICBQSU5DVFJMX1BJTl9HUk9VUCgicHdtMV8wIiwgbXQ3OTg2X3B3bTFfMCksCisJLyogIEBHUElPKDIyLDMyKTogRU1NQygyKSAqLworICAgICAgICBQSU5DVFJMX1BJTl9HUk9VUCgiZW1tY180NSIsIG10Nzk4Nl9lbW1jXzQ1KSwKKwkvKiAgQEdQSU8oMjMsMjgpOiBTTkZJKDEpICovCisgICAgICAgIFBJTkNUUkxfUElOX0dST1VQKCJzbmZpIiwgbXQ3OTg2X3NuZmkpLAorCS8qICBAR1BJTygyMywyNik6IFNQSTEoMikgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoInNwaTFfMSIsIG10Nzk4Nl9zcGkxXzEpLAorCS8qICBAR1BJTygyMywyNik6IFVBUlQxKDQpICovCisgICAgICAgIFBJTkNUUkxfUElOX0dST1VQKCJ1YXJ0MV8xIiwgbXQ3OTg2X3VhcnQxXzEpLAorCS8qICBAR1BJTygyOSwzMik6IFNQSTEoMSkgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoInNwaTFfMiIsIG10Nzk4Nl9zcGkxXzIpLAorCS8qICBAR1BJTygyOSwzMik6IFVBUlQxKDMpICovCisgICAgICAgIFBJTkNUUkxfUElOX0dST1VQKCJ1YXJ0MV8yIiwgbXQ3OTg2X3VhcnQxXzIpLAorCS8qICBAR1BJTygyOSwzMik6IFVBUlQyKDQpICovCisgICAgICAgIFBJTkNUUkxfUElOX0dST1VQKCJ1YXJ0Ml8wIiwgbXQ3OTg2X3VhcnQyXzApLAorCS8qICBAR1BJTygzMywzNik6IFNQSTAoMSkgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoInNwaTAiLCBtdDc5ODZfc3BpMCksCisJLyogIEBHUElPKDM3LDM4KTogU1BJMCgxKSAqLworICAgICAgICBQSU5DVFJMX1BJTl9HUk9VUCgic3BpMF93cF9ob2xkIiwgbXQ3OTg2X3NwaTBfd3BfaG9sZCksCisJLyogIEBHUElPKDMzLDM2KTogVUFSVDIoMykgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoInVhcnQyXzEiLCBtdDc5ODZfdWFydDJfMSksCisJLyogIEBHUElPKDM1LDM2KTogVUFSVDEoMikgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoInVhcnQxXzNfcnhfdHgiLCBtdDc5ODZfdWFydDFfM19yeF90eCksCisJLyogIEBHUElPKDM3LDM4KTogVUFSVDEoMikgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoInVhcnQxXzNfY3RzX3J0cyIsIG10Nzk4Nl91YXJ0MV8zX2N0c19ydHMpLAorCS8qICBAR1BJTygzMywzNik6IFNQSTEoNCkgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoInNwaTFfMyIsIG10Nzk4Nl9zcGkxXzMpLAorCS8qICBAR1BJTygzOSw0MCk6IFVBUlQwKDEpICovCisgICAgICAgIFBJTkNUUkxfUElOX0dST1VQKCJ1YXJ0MCIsIG10Nzk4Nl91YXJ0MCksCisJLyogIEBHUElPKDQxKTogUENJRV9QRVJFU0VUX04oMSkgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoInBjaWVfcGVyZXNldCIsIG10Nzk4Nl9wY2llX3Jlc2V0KSwKKwkvKiAgQEdQSU8oNDIsNDUpOiBVQVJUMSgxKSAqLworICAgICAgICBQSU5DVFJMX1BJTl9HUk9VUCgidWFydDEiLCBtdDc5ODZfdWFydDEpLAorCS8qICBAR1BJTyg0Niw0OSk6IFVBUlQxKDEpICovCisgICAgICAgIFBJTkNUUkxfUElOX0dST1VQKCJ1YXJ0MiIsIG10Nzk4Nl91YXJ0MiksCisJLyogIEBHUElPKDUwLDYxKTogRU1NQygxKSAqLworICAgICAgICBQSU5DVFJMX1BJTl9HUk9VUCgiZW1tY181MSIsIG10Nzk4Nl9lbW1jXzUxKSwKKwkvKiAgQEdQSU8oNjIsNjUpOiBQQ00oMSkgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoInBjbSIsIG10Nzk4Nl9wY20pLAorCS8qICBAR1BJTyg2Nik6IE1UNzUzMV9JTlQoMSkgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoInN3aXRjaF9pbnQiLCBtdDc5ODZfc3dpdGNoX2ludCksCisJLyogIEBHUElPKDY3LDY4KTogTURDX01ESU8oMSkgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoIm1kY19tZGlvIiwgbXQ3OTg2X21kY19tZGlvKSwKKyAgICAvKiAgQEdQSU8oNjksODUpOiBXRjBfTU9ERTEoMSkgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoIndmMF9tb2RlMSIsIG10Nzk4Nl93ZjBfbW9kZTEpLAorICAgIC8qICBAR1BJTyg3NCw3OCk6IFdGMF9IQigyKSAqLworICAgICAgICBQSU5DVFJMX1BJTl9HUk9VUCgid2YwX2hiIiwgbXQ3OTg2X3dmMF9oYiksCisgICAgLyogIEBHUElPKDc0LDgwKTogV0YwX01PREUzKDMpICovCisgICAgICAgIFBJTkNUUkxfUElOX0dST1VQKCJ3ZjBfbW9kZTMiLCBtdDc5ODZfd2YwX21vZGUzKSwKKyAgICAvKiAgQEdQSU8oNzksODUpOiBXRjFfSEIoMikgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoIndmMV9oYiIsIG10Nzk4Nl93ZjFfaGIpLAorICAgIC8qICBAR1BJTyg4NiwxMDApOiBXRjFfTU9ERTEoMSkgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoIndmMV9tb2RlMSIsIG10Nzk4Nl93ZjFfbW9kZTEpLAorICAgICAvKiAgQEdQSU8oOTEsOTcpOiBXRjFfTU9ERTIoMikgKi8KKyAgICAgICAgUElOQ1RSTF9QSU5fR1JPVVAoIndmMV9tb2RlMiIsIG10Nzk4Nl93ZjFfbW9kZTIpLAorCisKKwlQSU5DVFJMX1BJTl9HUk9VUCgid2ZfMmciLCBtdDc5ODZfd2ZfMmcpLAorCVBJTkNUUkxfUElOX0dST1VQKCJ3Zl81ZyIsIG10Nzk4Nl93Zl81ZyksCisJUElOQ1RSTF9QSU5fR1JPVVAoIndmX2RiZGMiLCBtdDc5ODZfd2ZfZGJkYyksCit9OworCisvKiBKb2ludCB0aG9zZSBncm91cHMgb3duaW5nIHRoZSBzYW1lIGNhcGFiaWxpdHkgaW4gdXNlciBwb2ludCBvZiB2aWV3IHdoaWNoCisgKiBhbGxvd3MgdGhhdCBwZW9wbGUgdGVuZCB0byB1c2UgdGhyb3VnaCB0aGUgZGV2aWNlIHRyZWUuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICptdDc5ODZfZXRoZXJuZXRfZ3JvdXBzW10gPSB7ICJtZGNfbWRpbyIsICJ3ZjBfbW9kZTEiLCAid2YwX2hiIiwKKwkJCQkJCSJ3ZjBfbW9kZTMiLCAid2YxX2hiIiwgIndmMV9tb2RlMSIsICJ3ZjFfbW9kZTIiIH07CitzdGF0aWMgY29uc3QgY2hhciAqbXQ3OTg2X2kyY19ncm91cHNbXSA9IHsgImkyYyIsIH07CitzdGF0aWMgY29uc3QgY2hhciAqbXQ3OTg2X2xlZF9ncm91cHNbXSA9IHsgIndpZmlfbGVkIiwgfTsKK3N0YXRpYyBjb25zdCBjaGFyICptdDc5ODZfcHdtX2dyb3Vwc1tdID0geyAicHdtMCIsICJwd20xXzAiLCAicHdtMV8xIiwgfTsKK3N0YXRpYyBjb25zdCBjaGFyICptdDc5ODZfc3BpX2dyb3Vwc1tdID0geyAic3BpMCIsICJzcGkxXzAiLCAic3BpMV8xIiwKKwkJCQkJICAgInNwaTFfMiIsICJzcGkxXzMiLCB9Oworc3RhdGljIGNvbnN0IGNoYXIgKm10Nzk4Nl91YXJ0X2dyb3Vwc1tdID0geyAidWFydDFfMCIsICJ1YXJ0MV8xIiwgInVhcnQxXzIiLAorCQkJCQkgICAgInVhcnQxXzNfcnhfdHgiLCAidWFydDFfM19jdHNfcnRzIiwKKwkJCQkJICAgICJ1YXJ0Ml8wIiwgInVhcnQyXzEiLAorCQkJCQkgICAgInVhcnQwIiwgInVhcnQxIiwgInVhcnQyIiwgfTsKK3N0YXRpYyBjb25zdCBjaGFyICptdDc5ODZfd2R0X2dyb3Vwc1tdID0geyAid2F0Y2hkb2ciLCB9Oworc3RhdGljIGNvbnN0IGNoYXIgKm10Nzk4Nl9mbGFzaF9ncm91cHNbXSA9IHsgInNuZmkiLCAiZW1tY180NSIsICJlbW1jXzUxIiwgInNwaTAiLCAic3BpMF93cF9ob2xkIn07CitzdGF0aWMgY29uc3QgY2hhciAqbXQ3OTg2X3BjaWVfZ3JvdXBzW10gPSB7ICJwY2llX2NsayIsICJwY2llX3dha2UiLCAicGNpZV9wZXJlc2V0In07CitzdGF0aWMgY29uc3QgY2hhciAqbXQ3OTg2X3dmX2dyb3Vwc1tdID0geyAid2ZfMmciLCAid2ZfNWciLCAid2ZfZGJkYyIsIH07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZnVuY3Rpb25fZGVzYyBtdDc5ODZfZnVuY3Rpb25zW10gPSB7CisJeyJldGgiLAltdDc5ODZfZXRoZXJuZXRfZ3JvdXBzLCBBUlJBWV9TSVpFKG10Nzk4Nl9ldGhlcm5ldF9ncm91cHMpfSwKKwl7ImkyYyIsIG10Nzk4Nl9pMmNfZ3JvdXBzLCBBUlJBWV9TSVpFKG10Nzk4Nl9pMmNfZ3JvdXBzKX0sCisJeyJsZWQiLAltdDc5ODZfbGVkX2dyb3VwcywgQVJSQVlfU0laRShtdDc5ODZfbGVkX2dyb3Vwcyl9LAorCXsicHdtIiwJbXQ3OTg2X3B3bV9ncm91cHMsIEFSUkFZX1NJWkUobXQ3OTg2X3B3bV9ncm91cHMpfSwKKwl7InNwaSIsCW10Nzk4Nl9zcGlfZ3JvdXBzLCBBUlJBWV9TSVpFKG10Nzk4Nl9zcGlfZ3JvdXBzKX0sCisJeyJ1YXJ0IiwgbXQ3OTg2X3VhcnRfZ3JvdXBzLCBBUlJBWV9TSVpFKG10Nzk4Nl91YXJ0X2dyb3Vwcyl9LAorCXsid2F0Y2hkb2ciLCBtdDc5ODZfd2R0X2dyb3VwcywgQVJSQVlfU0laRShtdDc5ODZfd2R0X2dyb3Vwcyl9LAorCXsiZmxhc2giLCBtdDc5ODZfZmxhc2hfZ3JvdXBzLCBBUlJBWV9TSVpFKG10Nzk4Nl9mbGFzaF9ncm91cHMpfSwKKwl7InBjaWUiLCBtdDc5ODZfcGNpZV9ncm91cHMsIEFSUkFZX1NJWkUobXQ3OTg2X3BjaWVfZ3JvdXBzKX0sCisJeyJ3aWZpIiwgbXQ3OTg2X3dmX2dyb3VwcywgQVJSQVlfU0laRShtdDc5ODZfd2ZfZ3JvdXBzKX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19laW50X2h3IG10Nzk4Nl9laW50X2h3ID0geworCS5wb3J0X21hc2sgPSA3LAorCS5wb3J0cyAgICAgPSA3LAorCS5hcF9udW0gICAgPSBBUlJBWV9TSVpFKG10Nzk4Nl9waW5zKSwKKwkuZGJfY250ICAgID0gMTYsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG10Nzk4Nl9waW5jdHJsX3JlZ2lzdGVyX2Jhc2VfbmFtZXNbXSA9IHsKKwkiZ3Bpb19iYXNlIiwgImlvY2ZnX3J0X2Jhc2UiLCAiaW9jZmdfcmJfYmFzZSIsICJpb2NmZ19sdF9iYXNlIiwKKwkiaW9jZmdfbGJfYmFzZSIsICJpb2NmZ190cl9iYXNlIiwgImlvY2ZnX3RsX2Jhc2UiLAorfTsKKworc3RhdGljIHN0cnVjdCBtdGtfcGluX3NvYyBtdDc5ODZfZGF0YSA9IHsKKwkucmVnX2NhbCA9IG10Nzk4Nl9yZWdfY2FscywKKwkucGlucyA9IG10Nzk4Nl9waW5zLAorCS5ucGlucyA9IEFSUkFZX1NJWkUobXQ3OTg2X3BpbnMpLAorCS5ncnBzID0gbXQ3OTg2X2dyb3VwcywKKwkubmdycHMgPSBBUlJBWV9TSVpFKG10Nzk4Nl9ncm91cHMpLAorCS5mdW5jcyA9IG10Nzk4Nl9mdW5jdGlvbnMsCisJLm5mdW5jcyA9IEFSUkFZX1NJWkUobXQ3OTg2X2Z1bmN0aW9ucyksCisJLmVpbnRfaHcgPSAmbXQ3OTg2X2VpbnRfaHcsCisJLmdwaW9fbSA9IDAsCisJLmllc19wcmVzZW50ID0gZmFsc2UsCisJLmJhc2VfbmFtZXMgPSBtdDc5ODZfcGluY3RybF9yZWdpc3Rlcl9iYXNlX25hbWVzLAorCS5uYmFzZV9uYW1lcyA9IEFSUkFZX1NJWkUobXQ3OTg2X3BpbmN0cmxfcmVnaXN0ZXJfYmFzZV9uYW1lcyksCisJLmJpYXNfZGlzYWJsZV9zZXQgPSBtdGtfcGluY29uZl9iaWFzX2Rpc2FibGVfc2V0LAorCS5iaWFzX2Rpc2FibGVfZ2V0ID0gbXRrX3BpbmNvbmZfYmlhc19kaXNhYmxlX2dldCwKKwkuYmlhc19zZXQgPSBtdGtfcGluY29uZl9iaWFzX3NldCwKKwkuYmlhc19nZXQgPSBtdGtfcGluY29uZl9iaWFzX2dldCwKKwkuZHJpdmVfc2V0ID0gbXRrX3BpbmNvbmZfZHJpdmVfc2V0X3JldjEsCisJLmRyaXZlX2dldCA9IG10a19waW5jb25mX2RyaXZlX2dldF9yZXYxLAorCS5hZHZfcHVsbF9nZXQgPSBtdGtfcGluY29uZl9hZHZfcHVsbF9nZXQsCisJLmFkdl9wdWxsX3NldCA9IG10a19waW5jb25mX2Fkdl9wdWxsX3NldCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10Nzk4Nl9waW5jdHJsX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtcGluY3RybCIsIH0sCisJe30KK307CisKK3N0YXRpYyBpbnQgbXQ3OTg2X3BpbmN0cmxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gbXRrX21vb3JlX3BpbmN0cmxfcHJvYmUocGRldiwgJm10Nzk4Nl9kYXRhKTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXQ3OTg2X3BpbmN0cmxfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm10Nzk4Ni1waW5jdHJsIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gbXQ3OTg2X3BpbmN0cmxfb2ZfbWF0Y2gsCisJfSwKKwkucHJvYmUgPSBtdDc5ODZfcGluY3RybF9wcm9iZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG10Nzk4Nl9waW5jdHJsX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtdDc5ODZfcGluY3RybF9kcml2ZXIpOworfQorYXJjaF9pbml0Y2FsbChtdDc5ODZfcGluY3RybF9pbml0KTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy90aGVybWFsL210a190aGVybWFsLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvdGhlcm1hbC9tdGtfdGhlcm1hbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNTFiMTMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvdGhlcm1hbC9tdGtfdGhlcm1hbC5jCkBAIC0wLDAgKzEsMTMyMSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IEhhbnlpIFd1IDxoYW55aS53dUBtZWRpYXRlay5jb20+CisgKiAgICAgICAgIFNhc2NoYSBIYXVlciA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4KKyAqICAgICAgICAgRGF3ZWkgQ2hpZW4gPGRhd2VpLmNoaWVuQG1lZGlhdGVrLmNvbT4KKyAqICAgICAgICAgTG91aXMgWXUgPGxvdWlzLnl1QG1lZGlhdGVrLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9udm1lbS1jb25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3RoZXJtYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9yZXNldC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIEFVWEFEQyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgQVVYQURDX0NPTjFfU0VUX1YJMHgwMDgKKyNkZWZpbmUgQVVYQURDX0NPTjFfQ0xSX1YJMHgwMGMKKyNkZWZpbmUgQVVYQURDX0NPTjJfVgkJMHgwMTAKKyNkZWZpbmUgQVVYQURDX0RBVEEoY2hhbm5lbCkJKDB4MTQgKyAoY2hhbm5lbCkgKiA0KQorCisjZGVmaW5lIEFQTUlYRURfU1lTX1RTX0NPTjEJMHg2MDQKKworLyogVGhlcm1hbCBDb250cm9sbGVyIFJlZ2lzdGVycyAqLworI2RlZmluZSBURU1QX01PTkNUTDAJCTB4MDAwCisjZGVmaW5lIFRFTVBfTU9OQ1RMMQkJMHgwMDQKKyNkZWZpbmUgVEVNUF9NT05DVEwyCQkweDAwOAorI2RlZmluZSBURU1QX01PTklERVQwCQkweDAxNAorI2RlZmluZSBURU1QX01PTklERVQxCQkweDAxOAorI2RlZmluZSBURU1QX01TUkNUTDAJCTB4MDM4CisjZGVmaW5lIFRFTVBfTVNSQ1RMMQkJMHgwM2MKKyNkZWZpbmUgVEVNUF9BSEJQT0xMCQkweDA0MAorI2RlZmluZSBURU1QX0FIQlRPCQkweDA0NAorI2RlZmluZSBURU1QX0FEQ1BOUDAJCTB4MDQ4CisjZGVmaW5lIFRFTVBfQURDUE5QMQkJMHgwNGMKKyNkZWZpbmUgVEVNUF9BRENQTlAyCQkweDA1MAorI2RlZmluZSBURU1QX0FEQ1BOUDMJCTB4MGI0CisKKyNkZWZpbmUgVEVNUF9BRENNVVgJCTB4MDU0CisjZGVmaW5lIFRFTVBfQURDRU4JCTB4MDYwCisjZGVmaW5lIFRFTVBfUE5QTVVYQUREUgkJMHgwNjQKKyNkZWZpbmUgVEVNUF9BRENNVVhBRERSCQkweDA2OAorI2RlZmluZSBURU1QX0FEQ0VOQUREUgkJMHgwNzQKKyNkZWZpbmUgVEVNUF9BRENWQUxJREFERFIJMHgwNzgKKyNkZWZpbmUgVEVNUF9BRENWT0xUQUREUgkweDA3YworI2RlZmluZSBURU1QX1JEQ1RSTAkJMHgwODAKKyNkZWZpbmUgVEVNUF9BRENWQUxJRE1BU0sJMHgwODQKKyNkZWZpbmUgVEVNUF9BRENWT0xUQUdFU0hJRlQJMHgwODgKKyNkZWZpbmUgVEVNUF9BRENXUklURUNUUkwJMHgwOGMKKyNkZWZpbmUgVEVNUF9NU1IwCQkweDA5MAorI2RlZmluZSBURU1QX01TUjEJCTB4MDk0CisjZGVmaW5lIFRFTVBfTVNSMgkJMHgwOTgKKyNkZWZpbmUgVEVNUF9NU1IzCQkweDBCOAorCisjZGVmaW5lIFRFTVBfU1BBUkUwCQkweDBmMAorCisjZGVmaW5lIFRFTVBfQURDUE5QMF8xICAgICAgICAgIDB4MTQ4CisjZGVmaW5lIFRFTVBfQURDUE5QMV8xICAgICAgICAgIDB4MTRjCisjZGVmaW5lIFRFTVBfQURDUE5QMl8xICAgICAgICAgIDB4MTUwCisjZGVmaW5lIFRFTVBfTVNSMF8xICAgICAgICAgICAgIDB4MTkwCisjZGVmaW5lIFRFTVBfTVNSMV8xICAgICAgICAgICAgIDB4MTk0CisjZGVmaW5lIFRFTVBfTVNSMl8xICAgICAgICAgICAgIDB4MTk4CisjZGVmaW5lIFRFTVBfQURDUE5QM18xICAgICAgICAgIDB4MWI0CisjZGVmaW5lIFRFTVBfTVNSM18xICAgICAgICAgICAgIDB4MUI4CisKKyNkZWZpbmUgUFRQQ09SRVNFTAkJMHg0MDAKKworI2RlZmluZSBURU1QX01PTkNUTDFfUEVSSU9EX1VOSVQoeCkJKCh4KSAmIDB4M2ZmKQorCisjZGVmaW5lIFRFTVBfTU9OQ1RMMl9GSUxURVJfSU5URVJWQUwoeCkJKCgoeCkgJiAweDNmZikgPDwgMTYpCisjZGVmaW5lIFRFTVBfTU9OQ1RMMl9TRU5TT1JfSU5URVJWQUwoeCkJKCh4KSAmIDB4M2ZmKQorCisjZGVmaW5lIFRFTVBfQUhCUE9MTF9BRENfUE9MTF9JTlRFUlZBTCh4KQkoeCkKKworI2RlZmluZSBURU1QX0FEQ1dSSVRFQ1RSTF9BRENfUE5QX1dSSVRFCQlCSVQoMCkKKyNkZWZpbmUgVEVNUF9BRENXUklURUNUUkxfQURDX01VWF9XUklURQkJQklUKDEpCisKKyNkZWZpbmUgVEVNUF9BRENWQUxJRE1BU0tfVkFMSURfSElHSAkJQklUKDUpCisjZGVmaW5lIFRFTVBfQURDVkFMSURNQVNLX1ZBTElEX1BPUyhiaXQpCShiaXQpCisKKy8qIE1UODE3MyB0aGVybWFsIHNlbnNvcnMgKi8KKyNkZWZpbmUgTVQ4MTczX1RTMQkwCisjZGVmaW5lIE1UODE3M19UUzIJMQorI2RlZmluZSBNVDgxNzNfVFMzCTIKKyNkZWZpbmUgTVQ4MTczX1RTNAkzCisjZGVmaW5lIE1UODE3M19UU0FCQgk0CisKKy8qIEFVWEFEQyBjaGFubmVsIDExIGlzIHVzZWQgZm9yIHRoZSB0ZW1wZXJhdHVyZSBzZW5zb3JzICovCisjZGVmaW5lIE1UODE3M19URU1QX0FVWEFEQ19DSEFOTkVMCTExCisKKy8qIFRoZSB0b3RhbCBudW1iZXIgb2YgdGVtcGVyYXR1cmUgc2Vuc29ycyBpbiB0aGUgTVQ4MTczICovCisjZGVmaW5lIE1UODE3M19OVU1fU0VOU09SUwkJNQorCisvKiBUaGUgbnVtYmVyIG9mIGJhbmtzIGluIHRoZSBNVDgxNzMgKi8KKyNkZWZpbmUgTVQ4MTczX05VTV9aT05FUwkJNAorCisvKiBUaGUgbnVtYmVyIG9mIHNlbnNpbmcgcG9pbnRzIHBlciBiYW5rICovCisjZGVmaW5lIE1UODE3M19OVU1fU0VOU09SU19QRVJfWk9ORQk0CisKKy8qIFRoZSBudW1iZXIgb2YgY29udHJvbGxlciBpbiB0aGUgTVQ4MTczICovCisjZGVmaW5lIE1UODE3M19OVU1fQ09OVFJPTExFUgkJMQorCisvKiBUaGUgY2FsaWJyYXRpb24gY29lZmZpY2llbnQgb2Ygc2Vuc29yICAqLworI2RlZmluZSBNVDgxNzNfQ0FMSUJSQVRJT04JMTY1CisKKy8qCisgKiBMYXlvdXQgb2YgdGhlIGZ1c2VzIHByb3ZpZGluZyB0aGUgY2FsaWJyYXRpb24gZGF0YQorICogVGhlc2UgbWFjcm9zIGNvdWxkIGJlIHVzZWQgZm9yIE1UODE4MywgTVQ4MTczLCBNVDI3MDEsIGFuZCBNVDI3MTIuCisgKiBNVDgxODMgaGFzIDYgc2Vuc29ycyBhbmQgbmVlZHMgNiBWVFMgY2FsaWJyYXRpb24gZGF0YS4KKyAqIE1UODE3MyBoYXMgNSBzZW5zb3JzIGFuZCBuZWVkcyA1IFZUUyBjYWxpYnJhdGlvbiBkYXRhLgorICogTVQyNzAxIGhhcyAzIHNlbnNvcnMgYW5kIG5lZWRzIDMgVlRTIGNhbGlicmF0aW9uIGRhdGEuCisgKiBNVDI3MTIgaGFzIDQgc2Vuc29ycyBhbmQgbmVlZHMgNCBWVFMgY2FsaWJyYXRpb24gZGF0YS4KKyAqLworI2RlZmluZSBDQUxJQl9CVUYwX1ZBTElEX1YxCQlCSVQoMCkKKyNkZWZpbmUgQ0FMSUJfQlVGMV9BRENfR0VfVjEoeCkJCSgoKHgpID4+IDIyKSAmIDB4M2ZmKQorI2RlZmluZSBDQUxJQl9CVUYwX1ZUU19UUzFfVjEoeCkJKCgoeCkgPj4gMTcpICYgMHgxZmYpCisjZGVmaW5lIENBTElCX0JVRjBfVlRTX1RTMl9WMSh4KQkoKCh4KSA+PiA4KSAmIDB4MWZmKQorI2RlZmluZSBDQUxJQl9CVUYxX1ZUU19UUzNfVjEoeCkJKCgoeCkgPj4gMCkgJiAweDFmZikKKyNkZWZpbmUgQ0FMSUJfQlVGMl9WVFNfVFM0X1YxKHgpCSgoKHgpID4+IDIzKSAmIDB4MWZmKQorI2RlZmluZSBDQUxJQl9CVUYyX1ZUU19UUzVfVjEoeCkJKCgoeCkgPj4gNSkgJiAweDFmZikKKyNkZWZpbmUgQ0FMSUJfQlVGMl9WVFNfVFNBQkJfVjEoeCkJKCgoeCkgPj4gMTQpICYgMHgxZmYpCisjZGVmaW5lIENBTElCX0JVRjBfREVHQ19DQUxJX1YxKHgpCSgoKHgpID4+IDEpICYgMHgzZikKKyNkZWZpbmUgQ0FMSUJfQlVGMF9PX1NMT1BFX1YxKHgpCSgoKHgpID4+IDI2KSAmIDB4M2YpCisjZGVmaW5lIENBTElCX0JVRjBfT19TTE9QRV9TSUdOX1YxKHgpCSgoKHgpID4+IDcpICYgMHgxKQorI2RlZmluZSBDQUxJQl9CVUYxX0lEX1YxKHgpCQkoKCh4KSA+PiA5KSAmIDB4MSkKKworLyoKKyAqIExheW91dCBvZiB0aGUgZnVzZXMgcHJvdmlkaW5nIHRoZSBjYWxpYnJhdGlvbiBkYXRhCisgKiBUaGVzZSBtYWNyb3MgY291bGQgYmUgdXNlZCBmb3IgTVQ3NjIyLgorICovCisjZGVmaW5lIENBTElCX0JVRjBfQURDX09FX1YyKHgpCQkoKCh4KSA+PiAyMikgJiAweDNmZikKKyNkZWZpbmUgQ0FMSUJfQlVGMF9BRENfR0VfVjIoeCkJCSgoKHgpID4+IDEyKSAmIDB4M2ZmKQorI2RlZmluZSBDQUxJQl9CVUYwX0RFR0NfQ0FMSV9WMih4KQkoKCh4KSA+PiA2KSAmIDB4M2YpCisjZGVmaW5lIENBTElCX0JVRjBfT19TTE9QRV9WMih4KQkoKCh4KSA+PiAwKSAmIDB4M2YpCisjZGVmaW5lIENBTElCX0JVRjFfVlRTX1RTMV9WMih4KQkoKCh4KSA+PiAyMykgJiAweDFmZikKKyNkZWZpbmUgQ0FMSUJfQlVGMV9WVFNfVFMyX1YyKHgpCSgoKHgpID4+IDE0KSAmIDB4MWZmKQorI2RlZmluZSBDQUxJQl9CVUYxX1ZUU19UU0FCQl9WMih4KQkoKCh4KSA+PiA1KSAmIDB4MWZmKQorI2RlZmluZSBDQUxJQl9CVUYxX1ZBTElEX1YyKHgpCQkoKCh4KSA+PiA0KSAmIDB4MSkKKyNkZWZpbmUgQ0FMSUJfQlVGMV9PX1NMT1BFX1NJR05fVjIoeCkJKCgoeCkgPj4gMykgJiAweDEpCisKKy8qCisgKiBMYXlvdXQgb2YgdGhlIGZ1c2VzIHByb3ZpZGluZyB0aGUgY2FsaWJyYXRpb24gZGF0YQorICogVGhlc2UgbWFjcm9zIGNvdWxkIGJlIHVzZWQgZm9yIE1UNzk4MSBhbmQgTVQ3OTg2LgorICovCisjZGVmaW5lIENBTElCX0JVRjBfQURDX0dFX1YzKHgpCQkoKCh4KSA+PiAwKSAmIDB4M2ZmKQorI2RlZmluZSBDQUxJQl9CVUYwX0FEQ19PRV9WMyh4KQkJKCgoeCkgPj4gMTApICYgMHgzZmYpCisjZGVmaW5lIENBTElCX0JVRjBfREVHQ19DQUxJX1YzKHgpCSgoKHgpID4+IDIwKSAmIDB4M2YpCisjZGVmaW5lIENBTElCX0JVRjBfT19TTE9QRV9WMyh4KQkoKCh4KSA+PiAyNikgJiAweDNmKQorI2RlZmluZSBDQUxJQl9CVUYxX1ZUU19UUzFfVjMoeCkJKCgoeCkgPj4gMCkgJiAweDFmZikKKyNkZWZpbmUgQ0FMSUJfQlVGMV9WVFNfVFMyX1YzKHgpCSgoKHgpID4+IDIxKSAmIDB4MWZmKQorI2RlZmluZSBDQUxJQl9CVUYxX1ZUU19UU0FCQl9WMyh4KQkoKCh4KSA+PiA5KSAmIDB4MWZmKQorI2RlZmluZSBDQUxJQl9CVUYxX1ZBTElEX1YzKHgpCQkoKCh4KSA+PiAxOCkgJiAweDEpCisjZGVmaW5lIENBTElCX0JVRjFfT19TTE9QRV9TSUdOX1YzKHgpCSgoKHgpID4+IDE5KSAmIDB4MSkKKyNkZWZpbmUgQ0FMSUJfQlVGMV9JRF9WMyh4KQkJKCgoeCkgPj4gMjApICYgMHgxKQorCitlbnVtIHsKKwlWVFMxLAorCVZUUzIsCisJVlRTMywKKwlWVFM0LAorCVZUUzUsCisJVlRTQUJCLAorCU1BWF9OVU1fVlRTLAorfTsKKworZW51bSBtdGtfdGhlcm1hbF92ZXJzaW9uIHsKKwlNVEtfVEhFUk1BTF9WMSA9IDEsCisJTVRLX1RIRVJNQUxfVjIsCisJTVRLX1RIRVJNQUxfVjMsCit9OworCisvKiBNVDI3MDEgdGhlcm1hbCBzZW5zb3JzICovCisjZGVmaW5lIE1UMjcwMV9UUzEJMAorI2RlZmluZSBNVDI3MDFfVFMyCTEKKyNkZWZpbmUgTVQyNzAxX1RTQUJCCTIKKworLyogQVVYQURDIGNoYW5uZWwgMTEgaXMgdXNlZCBmb3IgdGhlIHRlbXBlcmF0dXJlIHNlbnNvcnMgKi8KKyNkZWZpbmUgTVQyNzAxX1RFTVBfQVVYQURDX0NIQU5ORUwJMTEKKworLyogVGhlIHRvdGFsIG51bWJlciBvZiB0ZW1wZXJhdHVyZSBzZW5zb3JzIGluIHRoZSBNVDI3MDEgKi8KKyNkZWZpbmUgTVQyNzAxX05VTV9TRU5TT1JTCTMKKworLyogVGhlIG51bWJlciBvZiBzZW5zaW5nIHBvaW50cyBwZXIgYmFuayAqLworI2RlZmluZSBNVDI3MDFfTlVNX1NFTlNPUlNfUEVSX1pPTkUJMworCisvKiBUaGUgbnVtYmVyIG9mIGNvbnRyb2xsZXIgaW4gdGhlIE1UMjcwMSAqLworI2RlZmluZSBNVDI3MDFfTlVNX0NPTlRST0xMRVIJCTEKKworLyogVGhlIGNhbGlicmF0aW9uIGNvZWZmaWNpZW50IG9mIHNlbnNvciAgKi8KKyNkZWZpbmUgTVQyNzAxX0NBTElCUkFUSU9OCTE2NQorCisvKiBNVDI3MTIgdGhlcm1hbCBzZW5zb3JzICovCisjZGVmaW5lIE1UMjcxMl9UUzEJMAorI2RlZmluZSBNVDI3MTJfVFMyCTEKKyNkZWZpbmUgTVQyNzEyX1RTMwkyCisjZGVmaW5lIE1UMjcxMl9UUzQJMworCisvKiBBVVhBREMgY2hhbm5lbCAxMSBpcyB1c2VkIGZvciB0aGUgdGVtcGVyYXR1cmUgc2Vuc29ycyAqLworI2RlZmluZSBNVDI3MTJfVEVNUF9BVVhBRENfQ0hBTk5FTAkxMQorCisvKiBUaGUgdG90YWwgbnVtYmVyIG9mIHRlbXBlcmF0dXJlIHNlbnNvcnMgaW4gdGhlIE1UMjcxMiAqLworI2RlZmluZSBNVDI3MTJfTlVNX1NFTlNPUlMJNAorCisvKiBUaGUgbnVtYmVyIG9mIHNlbnNpbmcgcG9pbnRzIHBlciBiYW5rICovCisjZGVmaW5lIE1UMjcxMl9OVU1fU0VOU09SU19QRVJfWk9ORQk0CisKKy8qIFRoZSBudW1iZXIgb2YgY29udHJvbGxlciBpbiB0aGUgTVQyNzEyICovCisjZGVmaW5lIE1UMjcxMl9OVU1fQ09OVFJPTExFUgkJMQorCisvKiBUaGUgY2FsaWJyYXRpb24gY29lZmZpY2llbnQgb2Ygc2Vuc29yICAqLworI2RlZmluZSBNVDI3MTJfQ0FMSUJSQVRJT04JMTY1CisKKyNkZWZpbmUgTVQ3NjIyX1RFTVBfQVVYQURDX0NIQU5ORUwJMTEKKyNkZWZpbmUgTVQ3NjIyX05VTV9TRU5TT1JTCQkxCisjZGVmaW5lIE1UNzYyMl9OVU1fWk9ORVMJCTEKKyNkZWZpbmUgTVQ3NjIyX05VTV9TRU5TT1JTX1BFUl9aT05FCTEKKyNkZWZpbmUgTVQ3NjIyX1RTMQkwCisjZGVmaW5lIE1UNzYyMl9OVU1fQ09OVFJPTExFUgkJMQorCisvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgYmFua3MgKi8KKyNkZWZpbmUgTUFYX05VTV9aT05FUwkJOAorCisvKiBUaGUgY2FsaWJyYXRpb24gY29lZmZpY2llbnQgb2Ygc2Vuc29yICAqLworI2RlZmluZSBNVDc2MjJfQ0FMSUJSQVRJT04JMTY1CisKKy8qIE1UODE4MyB0aGVybWFsIHNlbnNvcnMgKi8KKyNkZWZpbmUgTVQ4MTgzX1RTMQkwCisjZGVmaW5lIE1UODE4M19UUzIJMQorI2RlZmluZSBNVDgxODNfVFMzCTIKKyNkZWZpbmUgTVQ4MTgzX1RTNAkzCisjZGVmaW5lIE1UODE4M19UUzUJNAorI2RlZmluZSBNVDgxODNfVFNBQkIJNQorCisvKiBBVVhBREMgY2hhbm5lbCAgaXMgdXNlZCBmb3IgdGhlIHRlbXBlcmF0dXJlIHNlbnNvcnMgKi8KKyNkZWZpbmUgTVQ4MTgzX1RFTVBfQVVYQURDX0NIQU5ORUwJMTEKKworLyogVGhlIHRvdGFsIG51bWJlciBvZiB0ZW1wZXJhdHVyZSBzZW5zb3JzIGluIHRoZSBNVDgxODMgKi8KKyNkZWZpbmUgTVQ4MTgzX05VTV9TRU5TT1JTCTYKKworLyogVGhlIG51bWJlciBvZiBiYW5rcyBpbiB0aGUgTVQ4MTgzICovCisjZGVmaW5lIE1UODE4M19OVU1fWk9ORVMgICAgICAgICAgICAgICAxCisKKy8qIFRoZSBudW1iZXIgb2Ygc2Vuc2luZyBwb2ludHMgcGVyIGJhbmsgKi8KKyNkZWZpbmUgTVQ4MTgzX05VTV9TRU5TT1JTX1BFUl9aT05FCSA2CisKKy8qIFRoZSBudW1iZXIgb2YgY29udHJvbGxlciBpbiB0aGUgTVQ4MTgzICovCisjZGVmaW5lIE1UODE4M19OVU1fQ09OVFJPTExFUgkJMgorCisvKiBUaGUgY2FsaWJyYXRpb24gY29lZmZpY2llbnQgb2Ygc2Vuc29yICAqLworI2RlZmluZSBNVDgxODNfQ0FMSUJSQVRJT04JMTUzCisKKy8qIEFVWEFEQyBjaGFubmVsIDExIGlzIHVzZWQgZm9yIHRoZSB0ZW1wZXJhdHVyZSBzZW5zb3JzICovCisjZGVmaW5lIE1UNzk4MV9URU1QX0FVWEFEQ19DSEFOTkVMCTExCisKKy8qIFRoZSB0b3RhbCBudW1iZXIgb2YgdGVtcGVyYXR1cmUgc2Vuc29ycyBpbiB0aGUgTVQ3OTgxICovCisjZGVmaW5lIE1UNzk4MV9OVU1fU0VOU09SUwkJMQorCisvKiBUaGUgbnVtYmVyIG9mIGJhbmtzIGluIHRoZSBNVDc5ODEgKi8KKyNkZWZpbmUgTVQ3OTgxX05VTV9aT05FUwkJMQorCisvKiBUaGUgbnVtYmVyIG9mIHNlbnNpbmcgcG9pbnRzIHBlciBiYW5rICovCisjZGVmaW5lIE1UNzk4MV9OVU1fU0VOU09SU19QRVJfWk9ORQkxCisKKy8qIE1UNzk4MSB0aGVybWFsIHNlbnNvcnMgKi8KKyNkZWZpbmUgTVQ3OTgxX1RTMQkwCisKKy8qIFRoZSBudW1iZXIgb2YgY29udHJvbGxlciBpbiB0aGUgTVQ3OTgxICovCisjZGVmaW5lIE1UNzk4MV9OVU1fQ09OVFJPTExFUgkJMQorCisvKiBUaGUgY2FsaWJyYXRpb24gY29lZmZpY2llbnQgb2Ygc2Vuc29yICAqLworI2RlZmluZSBNVDc5ODFfQ0FMSUJSQVRJT04JCTE2NQorCisvKiBBVVhBREMgY2hhbm5lbCAxMSBpcyB1c2VkIGZvciB0aGUgdGVtcGVyYXR1cmUgc2Vuc29ycyAqLworI2RlZmluZSBNVDc5ODZfVEVNUF9BVVhBRENfQ0hBTk5FTAkxMQorCisvKiBUaGUgdG90YWwgbnVtYmVyIG9mIHRlbXBlcmF0dXJlIHNlbnNvcnMgaW4gdGhlIE1UNzk4NiAqLworI2RlZmluZSBNVDc5ODZfTlVNX1NFTlNPUlMJCTEKKworLyogVGhlIG51bWJlciBvZiBiYW5rcyBpbiB0aGUgTVQ3OTg2ICovCisjZGVmaW5lIE1UNzk4Nl9OVU1fWk9ORVMJCTEKKworLyogVGhlIG51bWJlciBvZiBzZW5zaW5nIHBvaW50cyBwZXIgYmFuayAqLworI2RlZmluZSBNVDc5ODZfTlVNX1NFTlNPUlNfUEVSX1pPTkUJMQorCisvKiBNVDc5ODYgdGhlcm1hbCBzZW5zb3JzICovCisjZGVmaW5lIE1UNzk4Nl9UUzEJMAorCisvKiBUaGUgbnVtYmVyIG9mIGNvbnRyb2xsZXIgaW4gdGhlIE1UNzk4NiAqLworI2RlZmluZSBNVDc5ODZfTlVNX0NPTlRST0xMRVIJCTEKKworLyogVGhlIGNhbGlicmF0aW9uIGNvZWZmaWNpZW50IG9mIHNlbnNvciAgKi8KKyNkZWZpbmUgTVQ3OTg2X0NBTElCUkFUSU9OCQkxNjUKKworc3RydWN0IG10a190aGVybWFsOworCitzdHJ1Y3QgdGhlcm1hbF9iYW5rX2NmZyB7CisJdW5zaWduZWQgaW50IG51bV9zZW5zb3JzOworCWNvbnN0IGludCAqc2Vuc29yczsKK307CisKK3N0cnVjdCBtdGtfdGhlcm1hbF9iYW5rIHsKKwlzdHJ1Y3QgbXRrX3RoZXJtYWwgKm10OworCWludCBpZDsKK307CisKK3N0cnVjdCBtdGtfdGhlcm1hbF9kYXRhIHsKKwlzMzIgbnVtX2JhbmtzOworCXMzMiBudW1fc2Vuc29yczsKKwlzMzIgYXV4YWRjX2NoYW5uZWw7CisJY29uc3QgaW50ICp2dHNfaW5kZXg7CisJY29uc3QgaW50ICpzZW5zb3JfbXV4X3ZhbHVlczsKKwljb25zdCBpbnQgKm1zcjsKKwljb25zdCBpbnQgKmFkY3BucDsKKwljb25zdCBpbnQgY2FsaV92YWw7CisJY29uc3QgaW50IG51bV9jb250cm9sbGVyOworCWNvbnN0IGludCAqY29udHJvbGxlcl9vZmZzZXQ7CisJYm9vbCBuZWVkX3N3aXRjaF9iYW5rOworCXN0cnVjdCB0aGVybWFsX2JhbmtfY2ZnIGJhbmtfZGF0YVtNQVhfTlVNX1pPTkVTXTsKKwllbnVtIG10a190aGVybWFsX3ZlcnNpb24gdmVyc2lvbjsKK307CisKK3N0cnVjdCBtdGtfdGhlcm1hbCB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXZvaWQgX19pb21lbSAqdGhlcm1hbF9iYXNlOworCisJc3RydWN0IGNsayAqY2xrX3BlcmlfdGhlcm07CisJc3RydWN0IGNsayAqY2xrX2F1eGFkYzsKKwlzdHJ1Y3QgY2xrICpjbGtfYWRjXzMyazsKKwkvKiBsb2NrOiBmb3IgZ2V0dGluZyBhbmQgcHV0dGluZyBiYW5rcyAqLworCXN0cnVjdCBtdXRleCBsb2NrOworCisJLyogQ2FsaWJyYXRpb24gdmFsdWVzICovCisJczMyIGFkY19nZTsKKwlzMzIgYWRjX29lOworCXMzMiBkZWdjX2NhbGk7CisJczMyIG9fc2xvcGU7CisJczMyIG9fc2xvcGVfc2lnbjsKKwlzMzIgdnRzW01BWF9OVU1fVlRTXTsKKworCWNvbnN0IHN0cnVjdCBtdGtfdGhlcm1hbF9kYXRhICpjb25mOworCXN0cnVjdCBtdGtfdGhlcm1hbF9iYW5rIGJhbmtzW01BWF9OVU1fWk9ORVNdOworfTsKKworLyogTVQ4MTgzIHRoZXJtYWwgc2Vuc29yIGRhdGEgKi8KK3N0YXRpYyBjb25zdCBpbnQgbXQ4MTgzX2JhbmtfZGF0YVtNVDgxODNfTlVNX1NFTlNPUlNdID0geworCU1UODE4M19UUzEsIE1UODE4M19UUzIsIE1UODE4M19UUzMsIE1UODE4M19UUzQsIE1UODE4M19UUzUsIE1UODE4M19UU0FCQgorfTsKKworc3RhdGljIGNvbnN0IGludCBtdDgxODNfbXNyW01UODE4M19OVU1fU0VOU09SU19QRVJfWk9ORV0gPSB7CisJVEVNUF9NU1IwXzEsIFRFTVBfTVNSMV8xLCBURU1QX01TUjJfMSwgVEVNUF9NU1IxLCBURU1QX01TUjAsIFRFTVBfTVNSM18xCit9OworCitzdGF0aWMgY29uc3QgaW50IG10ODE4M19hZGNwbnBbTVQ4MTgzX05VTV9TRU5TT1JTX1BFUl9aT05FXSA9IHsKKwlURU1QX0FEQ1BOUDBfMSwgVEVNUF9BRENQTlAxXzEsIFRFTVBfQURDUE5QMl8xLAorCVRFTVBfQURDUE5QMSwgVEVNUF9BRENQTlAwLCBURU1QX0FEQ1BOUDNfMQorfTsKKworc3RhdGljIGNvbnN0IGludCBtdDgxODNfbXV4X3ZhbHVlc1tNVDgxODNfTlVNX1NFTlNPUlNdID0geyAwLCAxLCAyLCAzLCA0LCAwIH07CitzdGF0aWMgY29uc3QgaW50IG10ODE4M190Y19vZmZzZXRbTVQ4MTgzX05VTV9DT05UUk9MTEVSXSA9IHsweDAsIDB4MTAwfTsKKworc3RhdGljIGNvbnN0IGludCBtdDgxODNfdnRzX2luZGV4W01UODE4M19OVU1fU0VOU09SU10gPSB7CisJVlRTMSwgVlRTMiwgVlRTMywgVlRTNCwgVlRTNSwgVlRTQUJCCit9OworCisvKiBNVDgxNzMgdGhlcm1hbCBzZW5zb3IgZGF0YSAqLworc3RhdGljIGNvbnN0IGludCBtdDgxNzNfYmFua19kYXRhW01UODE3M19OVU1fWk9ORVNdWzNdID0geworCXsgTVQ4MTczX1RTMiwgTVQ4MTczX1RTMyB9LAorCXsgTVQ4MTczX1RTMiwgTVQ4MTczX1RTNCB9LAorCXsgTVQ4MTczX1RTMSwgTVQ4MTczX1RTMiwgTVQ4MTczX1RTQUJCIH0sCisJeyBNVDgxNzNfVFMyIH0sCit9OworCitzdGF0aWMgY29uc3QgaW50IG10ODE3M19tc3JbTVQ4MTczX05VTV9TRU5TT1JTX1BFUl9aT05FXSA9IHsKKwlURU1QX01TUjAsIFRFTVBfTVNSMSwgVEVNUF9NU1IyLCBURU1QX01TUjMKK307CisKK3N0YXRpYyBjb25zdCBpbnQgbXQ4MTczX2FkY3BucFtNVDgxNzNfTlVNX1NFTlNPUlNfUEVSX1pPTkVdID0geworCVRFTVBfQURDUE5QMCwgVEVNUF9BRENQTlAxLCBURU1QX0FEQ1BOUDIsIFRFTVBfQURDUE5QMworfTsKKworc3RhdGljIGNvbnN0IGludCBtdDgxNzNfbXV4X3ZhbHVlc1tNVDgxNzNfTlVNX1NFTlNPUlNdID0geyAwLCAxLCAyLCAzLCAxNiB9Oworc3RhdGljIGNvbnN0IGludCBtdDgxNzNfdGNfb2Zmc2V0W01UODE3M19OVU1fQ09OVFJPTExFUl0gPSB7IDB4MCwgfTsKKworc3RhdGljIGNvbnN0IGludCBtdDgxNzNfdnRzX2luZGV4W01UODE3M19OVU1fU0VOU09SU10gPSB7CisJVlRTMSwgVlRTMiwgVlRTMywgVlRTNCwgVlRTQUJCCit9OworCisvKiBNVDI3MDEgdGhlcm1hbCBzZW5zb3IgZGF0YSAqLworc3RhdGljIGNvbnN0IGludCBtdDI3MDFfYmFua19kYXRhW01UMjcwMV9OVU1fU0VOU09SU10gPSB7CisJTVQyNzAxX1RTMSwgTVQyNzAxX1RTMiwgTVQyNzAxX1RTQUJCCit9OworCitzdGF0aWMgY29uc3QgaW50IG10MjcwMV9tc3JbTVQyNzAxX05VTV9TRU5TT1JTX1BFUl9aT05FXSA9IHsKKwlURU1QX01TUjAsIFRFTVBfTVNSMSwgVEVNUF9NU1IyCit9OworCitzdGF0aWMgY29uc3QgaW50IG10MjcwMV9hZGNwbnBbTVQyNzAxX05VTV9TRU5TT1JTX1BFUl9aT05FXSA9IHsKKwlURU1QX0FEQ1BOUDAsIFRFTVBfQURDUE5QMSwgVEVNUF9BRENQTlAyCit9OworCitzdGF0aWMgY29uc3QgaW50IG10MjcwMV9tdXhfdmFsdWVzW01UMjcwMV9OVU1fU0VOU09SU10gPSB7IDAsIDEsIDE2IH07CitzdGF0aWMgY29uc3QgaW50IG10MjcwMV90Y19vZmZzZXRbTVQyNzAxX05VTV9DT05UUk9MTEVSXSA9IHsgMHgwLCB9OworCitzdGF0aWMgY29uc3QgaW50IG10MjcwMV92dHNfaW5kZXhbTVQyNzAxX05VTV9TRU5TT1JTXSA9IHsKKwlWVFMxLCBWVFMyLCBWVFMzCit9OworCisvKiBNVDI3MTIgdGhlcm1hbCBzZW5zb3IgZGF0YSAqLworc3RhdGljIGNvbnN0IGludCBtdDI3MTJfYmFua19kYXRhW01UMjcxMl9OVU1fU0VOU09SU10gPSB7CisJTVQyNzEyX1RTMSwgTVQyNzEyX1RTMiwgTVQyNzEyX1RTMywgTVQyNzEyX1RTNAorfTsKKworc3RhdGljIGNvbnN0IGludCBtdDI3MTJfbXNyW01UMjcxMl9OVU1fU0VOU09SU19QRVJfWk9ORV0gPSB7CisJVEVNUF9NU1IwLCBURU1QX01TUjEsIFRFTVBfTVNSMiwgVEVNUF9NU1IzCit9OworCitzdGF0aWMgY29uc3QgaW50IG10MjcxMl9hZGNwbnBbTVQyNzEyX05VTV9TRU5TT1JTX1BFUl9aT05FXSA9IHsKKwlURU1QX0FEQ1BOUDAsIFRFTVBfQURDUE5QMSwgVEVNUF9BRENQTlAyLCBURU1QX0FEQ1BOUDMKK307CisKK3N0YXRpYyBjb25zdCBpbnQgbXQyNzEyX211eF92YWx1ZXNbTVQyNzEyX05VTV9TRU5TT1JTXSA9IHsgMCwgMSwgMiwgMyB9Oworc3RhdGljIGNvbnN0IGludCBtdDI3MTJfdGNfb2Zmc2V0W01UMjcxMl9OVU1fQ09OVFJPTExFUl0gPSB7IDB4MCwgfTsKKworc3RhdGljIGNvbnN0IGludCBtdDI3MTJfdnRzX2luZGV4W01UMjcxMl9OVU1fU0VOU09SU10gPSB7CisJVlRTMSwgVlRTMiwgVlRTMywgVlRTNAorfTsKKworLyogTVQ3NjIyIHRoZXJtYWwgc2Vuc29yIGRhdGEgKi8KK3N0YXRpYyBjb25zdCBpbnQgbXQ3NjIyX2JhbmtfZGF0YVtNVDc2MjJfTlVNX1NFTlNPUlNdID0geyBNVDc2MjJfVFMxLCB9Oworc3RhdGljIGNvbnN0IGludCBtdDc2MjJfbXNyW01UNzYyMl9OVU1fU0VOU09SU19QRVJfWk9ORV0gPSB7IFRFTVBfTVNSMCwgfTsKK3N0YXRpYyBjb25zdCBpbnQgbXQ3NjIyX2FkY3BucFtNVDc2MjJfTlVNX1NFTlNPUlNfUEVSX1pPTkVdID0geyBURU1QX0FEQ1BOUDAsIH07CitzdGF0aWMgY29uc3QgaW50IG10NzYyMl9tdXhfdmFsdWVzW01UNzYyMl9OVU1fU0VOU09SU10gPSB7IDAsIH07CitzdGF0aWMgY29uc3QgaW50IG10NzYyMl92dHNfaW5kZXhbTVQ3NjIyX05VTV9TRU5TT1JTXSA9IHsgVlRTMSB9Oworc3RhdGljIGNvbnN0IGludCBtdDc2MjJfdGNfb2Zmc2V0W01UNzYyMl9OVU1fQ09OVFJPTExFUl0gPSB7IDB4MCwgfTsKKworLyogTVQ3OTgxIHRoZXJtYWwgc2Vuc29yIGRhdGEgKi8KK3N0YXRpYyBjb25zdCBpbnQgbXQ3OTgxX2JhbmtfZGF0YVtNVDc5ODFfTlVNX1NFTlNPUlNdID0geyBNVDc5ODFfVFMxLCB9Oworc3RhdGljIGNvbnN0IGludCBtdDc5ODFfbXNyW01UNzk4MV9OVU1fU0VOU09SU19QRVJfWk9ORV0gPSB7IFRFTVBfTVNSMCwgfTsKK3N0YXRpYyBjb25zdCBpbnQgbXQ3OTgxX2FkY3BucFtNVDc5ODFfTlVNX1NFTlNPUlNfUEVSX1pPTkVdID0gewlURU1QX0FEQ1BOUDAsIH07CitzdGF0aWMgY29uc3QgaW50IG10Nzk4MV9tdXhfdmFsdWVzW01UNzk4MV9OVU1fU0VOU09SU10gPSB7IDAsIH07CitzdGF0aWMgY29uc3QgaW50IG10Nzk4MV92dHNfaW5kZXhbTVQ3OTgxX05VTV9TRU5TT1JTXSA9IHsgVlRTMSB9Oworc3RhdGljIGNvbnN0IGludCBtdDc5ODFfdGNfb2Zmc2V0W01UNzk4MV9OVU1fQ09OVFJPTExFUl0gPSB7IDB4MCwgfTsKKworLyogTVQ3OTg2IHRoZXJtYWwgc2Vuc29yIGRhdGEgKi8KK3N0YXRpYyBjb25zdCBpbnQgbXQ3OTg2X2JhbmtfZGF0YVtNVDc5ODZfTlVNX1NFTlNPUlNdID0geyBNVDc5ODZfVFMxLCB9Oworc3RhdGljIGNvbnN0IGludCBtdDc5ODZfbXNyW01UNzk4Nl9OVU1fU0VOU09SU19QRVJfWk9ORV0gPSB7IFRFTVBfTVNSMCwgfTsKK3N0YXRpYyBjb25zdCBpbnQgbXQ3OTg2X2FkY3BucFtNVDc5ODZfTlVNX1NFTlNPUlNfUEVSX1pPTkVdID0gewlURU1QX0FEQ1BOUDAsIH07CitzdGF0aWMgY29uc3QgaW50IG10Nzk4Nl9tdXhfdmFsdWVzW01UNzk4Nl9OVU1fU0VOU09SU10gPSB7IDAsIH07CitzdGF0aWMgY29uc3QgaW50IG10Nzk4Nl92dHNfaW5kZXhbTVQ3OTg2X05VTV9TRU5TT1JTXSA9IHsgVlRTMSB9Oworc3RhdGljIGNvbnN0IGludCBtdDc5ODZfdGNfb2Zmc2V0W01UNzk4Nl9OVU1fQ09OVFJPTExFUl0gPSB7IDB4MCwgfTsKKworLyoKKyAqIFRoZSBNVDgxNzMgdGhlcm1hbCBjb250cm9sbGVyIGhhcyBmb3VyIGJhbmtzLiBFYWNoIGJhbmsgY2FuIHJlYWQgdXAgdG8KKyAqIGZvdXIgdGVtcGVyYXR1cmUgc2Vuc29ycyBzaW11bHRhbmVvdXNseS4gVGhlIE1UODE3MyBoYXMgYSB0b3RhbCBvZiA1CisgKiB0ZW1wZXJhdHVyZSBzZW5zb3JzLiBXZSB1c2UgZWFjaCBiYW5rIHRvIG1lYXN1cmUgYSBjZXJ0YWluIGFyZWEgb2YgdGhlCisgKiBTb0MuIFNpbmNlIFRTMiBpcyBsb2NhdGVkIGNlbnRyYWxseSBpbiB0aGUgU29DIGl0IGlzIGluZmx1ZW5jZWQgYnkgbXVsdGlwbGUKKyAqIGFyZWFzLCBoZW5jZSBpcyB1c2VkIGluIGRpZmZlcmVudCBiYW5rcy4KKyAqCisgKiBUaGUgdGhlcm1hbCBjb3JlIG9ubHkgZ2V0cyB0aGUgbWF4aW11bSB0ZW1wZXJhdHVyZSBvZiBhbGwgYmFua3MsIHNvCisgKiB0aGUgYmFuayBjb25jZXB0IHdvdWxkbid0IGJlIG5lY2Vzc2FyeSBoZXJlLiBIb3dldmVyLCB0aGUgU1ZTIChTbWFydAorICogVm9sdGFnZSBTY2FsaW5nKSB1bml0IG1ha2VzIGl0cyBkZWNpc2lvbnMgYmFzZWQgb24gdGhlIHNhbWUgYmFuaworICogZGF0YSwgYW5kIHRoaXMgaW5kZWVkIG5lZWRzIHRoZSB0ZW1wZXJhdHVyZXMgb2YgdGhlIGluZGl2aWR1YWwgYmFua3MKKyAqIGZvciBtYWtpbmcgYmV0dGVyIGRlY2lzaW9ucy4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfdGhlcm1hbF9kYXRhIG10ODE3M190aGVybWFsX2RhdGEgPSB7CisJLmF1eGFkY19jaGFubmVsID0gTVQ4MTczX1RFTVBfQVVYQURDX0NIQU5ORUwsCisJLm51bV9iYW5rcyA9IE1UODE3M19OVU1fWk9ORVMsCisJLm51bV9zZW5zb3JzID0gTVQ4MTczX05VTV9TRU5TT1JTLAorCS52dHNfaW5kZXggPSBtdDgxNzNfdnRzX2luZGV4LAorCS5jYWxpX3ZhbCA9IE1UODE3M19DQUxJQlJBVElPTiwKKwkubnVtX2NvbnRyb2xsZXIgPSBNVDgxNzNfTlVNX0NPTlRST0xMRVIsCisJLmNvbnRyb2xsZXJfb2Zmc2V0ID0gbXQ4MTczX3RjX29mZnNldCwKKwkubmVlZF9zd2l0Y2hfYmFuayA9IHRydWUsCisJLmJhbmtfZGF0YSA9IHsKKwkJeworCQkJLm51bV9zZW5zb3JzID0gMiwKKwkJCS5zZW5zb3JzID0gbXQ4MTczX2JhbmtfZGF0YVswXSwKKwkJfSwgeworCQkJLm51bV9zZW5zb3JzID0gMiwKKwkJCS5zZW5zb3JzID0gbXQ4MTczX2JhbmtfZGF0YVsxXSwKKwkJfSwgeworCQkJLm51bV9zZW5zb3JzID0gMywKKwkJCS5zZW5zb3JzID0gbXQ4MTczX2JhbmtfZGF0YVsyXSwKKwkJfSwgeworCQkJLm51bV9zZW5zb3JzID0gMSwKKwkJCS5zZW5zb3JzID0gbXQ4MTczX2JhbmtfZGF0YVszXSwKKwkJfSwKKwl9LAorCS5tc3IgPSBtdDgxNzNfbXNyLAorCS5hZGNwbnAgPSBtdDgxNzNfYWRjcG5wLAorCS5zZW5zb3JfbXV4X3ZhbHVlcyA9IG10ODE3M19tdXhfdmFsdWVzLAorCS52ZXJzaW9uID0gTVRLX1RIRVJNQUxfVjEsCit9OworCisvKgorICogVGhlIE1UMjcwMSB0aGVybWFsIGNvbnRyb2xsZXIgaGFzIG9uZSBiYW5rLCB3aGljaCBjYW4gcmVhZCB1cCB0bworICogdGhyZWUgdGVtcGVyYXR1cmUgc2Vuc29ycyBzaW11bHRhbmVvdXNseS4gVGhlIE1UMjcwMSBoYXMgYSB0b3RhbCBvZiAzCisgKiB0ZW1wZXJhdHVyZSBzZW5zb3JzLgorICoKKyAqIFRoZSB0aGVybWFsIGNvcmUgb25seSBnZXRzIHRoZSBtYXhpbXVtIHRlbXBlcmF0dXJlIG9mIHRoaXMgb25lIGJhbmssCisgKiBzbyB0aGUgYmFuayBjb25jZXB0IHdvdWxkbid0IGJlIG5lY2Vzc2FyeSBoZXJlLiBIb3dldmVyLCB0aGUgU1ZTIChTbWFydAorICogVm9sdGFnZSBTY2FsaW5nKSB1bml0IG1ha2VzIGl0cyBkZWNpc2lvbnMgYmFzZWQgb24gdGhlIHNhbWUgYmFuaworICogZGF0YS4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfdGhlcm1hbF9kYXRhIG10MjcwMV90aGVybWFsX2RhdGEgPSB7CisJLmF1eGFkY19jaGFubmVsID0gTVQyNzAxX1RFTVBfQVVYQURDX0NIQU5ORUwsCisJLm51bV9iYW5rcyA9IDEsCisJLm51bV9zZW5zb3JzID0gTVQyNzAxX05VTV9TRU5TT1JTLAorCS52dHNfaW5kZXggPSBtdDI3MDFfdnRzX2luZGV4LAorCS5jYWxpX3ZhbCA9IE1UMjcwMV9DQUxJQlJBVElPTiwKKwkubnVtX2NvbnRyb2xsZXIgPSBNVDI3MDFfTlVNX0NPTlRST0xMRVIsCisJLmNvbnRyb2xsZXJfb2Zmc2V0ID0gbXQyNzAxX3RjX29mZnNldCwKKwkubmVlZF9zd2l0Y2hfYmFuayA9IHRydWUsCisJLmJhbmtfZGF0YSA9IHsKKwkJeworCQkJLm51bV9zZW5zb3JzID0gMywKKwkJCS5zZW5zb3JzID0gbXQyNzAxX2JhbmtfZGF0YSwKKwkJfSwKKwl9LAorCS5tc3IgPSBtdDI3MDFfbXNyLAorCS5hZGNwbnAgPSBtdDI3MDFfYWRjcG5wLAorCS5zZW5zb3JfbXV4X3ZhbHVlcyA9IG10MjcwMV9tdXhfdmFsdWVzLAorCS52ZXJzaW9uID0gTVRLX1RIRVJNQUxfVjEsCit9OworCisvKgorICogVGhlIE1UMjcxMiB0aGVybWFsIGNvbnRyb2xsZXIgaGFzIG9uZSBiYW5rLCB3aGljaCBjYW4gcmVhZCB1cCB0bworICogZm91ciB0ZW1wZXJhdHVyZSBzZW5zb3JzIHNpbXVsdGFuZW91c2x5LiBUaGUgTVQyNzEyIGhhcyBhIHRvdGFsIG9mIDQKKyAqIHRlbXBlcmF0dXJlIHNlbnNvcnMuCisgKgorICogVGhlIHRoZXJtYWwgY29yZSBvbmx5IGdldHMgdGhlIG1heGltdW0gdGVtcGVyYXR1cmUgb2YgdGhpcyBvbmUgYmFuaywKKyAqIHNvIHRoZSBiYW5rIGNvbmNlcHQgd291bGRuJ3QgYmUgbmVjZXNzYXJ5IGhlcmUuIEhvd2V2ZXIsIHRoZSBTVlMgKFNtYXJ0CisgKiBWb2x0YWdlIFNjYWxpbmcpIHVuaXQgbWFrZXMgaXRzIGRlY2lzaW9ucyBiYXNlZCBvbiB0aGUgc2FtZSBiYW5rCisgKiBkYXRhLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a190aGVybWFsX2RhdGEgbXQyNzEyX3RoZXJtYWxfZGF0YSA9IHsKKwkuYXV4YWRjX2NoYW5uZWwgPSBNVDI3MTJfVEVNUF9BVVhBRENfQ0hBTk5FTCwKKwkubnVtX2JhbmtzID0gMSwKKwkubnVtX3NlbnNvcnMgPSBNVDI3MTJfTlVNX1NFTlNPUlMsCisJLnZ0c19pbmRleCA9IG10MjcxMl92dHNfaW5kZXgsCisJLmNhbGlfdmFsID0gTVQyNzEyX0NBTElCUkFUSU9OLAorCS5udW1fY29udHJvbGxlciA9IE1UMjcxMl9OVU1fQ09OVFJPTExFUiwKKwkuY29udHJvbGxlcl9vZmZzZXQgPSBtdDI3MTJfdGNfb2Zmc2V0LAorCS5uZWVkX3N3aXRjaF9iYW5rID0gdHJ1ZSwKKwkuYmFua19kYXRhID0geworCQl7CisJCQkubnVtX3NlbnNvcnMgPSA0LAorCQkJLnNlbnNvcnMgPSBtdDI3MTJfYmFua19kYXRhLAorCQl9LAorCX0sCisJLm1zciA9IG10MjcxMl9tc3IsCisJLmFkY3BucCA9IG10MjcxMl9hZGNwbnAsCisJLnNlbnNvcl9tdXhfdmFsdWVzID0gbXQyNzEyX211eF92YWx1ZXMsCisJLnZlcnNpb24gPSBNVEtfVEhFUk1BTF9WMSwKK307CisKKy8qCisgKiBNVDc2MjIgaGF2ZSBvbmx5IG9uZSBzZW5zaW5nIHBvaW50IHdoaWNoIHVzZXMgQVVYQURDIENoYW5uZWwgMTEgZm9yIHJhdyBkYXRhCisgKiBhY2Nlc3MuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX3RoZXJtYWxfZGF0YSBtdDc2MjJfdGhlcm1hbF9kYXRhID0geworCS5hdXhhZGNfY2hhbm5lbCA9IE1UNzYyMl9URU1QX0FVWEFEQ19DSEFOTkVMLAorCS5udW1fYmFua3MgPSBNVDc2MjJfTlVNX1pPTkVTLAorCS5udW1fc2Vuc29ycyA9IE1UNzYyMl9OVU1fU0VOU09SUywKKwkudnRzX2luZGV4ID0gbXQ3NjIyX3Z0c19pbmRleCwKKwkuY2FsaV92YWwgPSBNVDc2MjJfQ0FMSUJSQVRJT04sCisJLm51bV9jb250cm9sbGVyID0gTVQ3NjIyX05VTV9DT05UUk9MTEVSLAorCS5jb250cm9sbGVyX29mZnNldCA9IG10NzYyMl90Y19vZmZzZXQsCisJLm5lZWRfc3dpdGNoX2JhbmsgPSB0cnVlLAorCS5iYW5rX2RhdGEgPSB7CisJCXsKKwkJCS5udW1fc2Vuc29ycyA9IDEsCisJCQkuc2Vuc29ycyA9IG10NzYyMl9iYW5rX2RhdGEsCisJCX0sCisJfSwKKwkubXNyID0gbXQ3NjIyX21zciwKKwkuYWRjcG5wID0gbXQ3NjIyX2FkY3BucCwKKwkuc2Vuc29yX211eF92YWx1ZXMgPSBtdDc2MjJfbXV4X3ZhbHVlcywKKwkudmVyc2lvbiA9IE1US19USEVSTUFMX1YyLAorfTsKKworLyoKKyAqIFRoZSBNVDgxODMgdGhlcm1hbCBjb250cm9sbGVyIGhhcyBvbmUgYmFuayBmb3IgdGhlIGN1cnJlbnQgU1cgZnJhbWV3b3JrLgorICogVGhlIE1UODE4MyBoYXMgYSB0b3RhbCBvZiA2IHRlbXBlcmF0dXJlIHNlbnNvcnMuCisgKiBUaGVyZSBhcmUgdHdvIHRoZXJtYWwgY29udHJvbGxlciB0byBjb250cm9sIHRoZSBzaXggc2Vuc29yLgorICogVGhlIGZpcnN0IG9uZSBiaW5kIDIgc2Vuc29yLCBhbmQgdGhlIG90aGVyIGJpbmQgNCBzZW5zb3JzLgorICogVGhlIHRoZXJtYWwgY29yZSBvbmx5IGdldHMgdGhlIG1heGltdW0gdGVtcGVyYXR1cmUgb2YgYWxsIHNlbnNvciwgc28KKyAqIHRoZSBiYW5rIGNvbmNlcHQgd291bGRuJ3QgYmUgbmVjZXNzYXJ5IGhlcmUuIEhvd2V2ZXIsIHRoZSBTVlMgKFNtYXJ0CisgKiBWb2x0YWdlIFNjYWxpbmcpIHVuaXQgbWFrZXMgaXRzIGRlY2lzaW9ucyBiYXNlZCBvbiB0aGUgc2FtZSBiYW5rCisgKiBkYXRhLCBhbmQgdGhpcyBpbmRlZWQgbmVlZHMgdGhlIHRlbXBlcmF0dXJlcyBvZiB0aGUgaW5kaXZpZHVhbCBiYW5rcworICogZm9yIG1ha2luZyBiZXR0ZXIgZGVjaXNpb25zLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a190aGVybWFsX2RhdGEgbXQ4MTgzX3RoZXJtYWxfZGF0YSA9IHsKKwkuYXV4YWRjX2NoYW5uZWwgPSBNVDgxODNfVEVNUF9BVVhBRENfQ0hBTk5FTCwKKwkubnVtX2JhbmtzID0gTVQ4MTgzX05VTV9aT05FUywKKwkubnVtX3NlbnNvcnMgPSBNVDgxODNfTlVNX1NFTlNPUlMsCisJLnZ0c19pbmRleCA9IG10ODE4M192dHNfaW5kZXgsCisJLmNhbGlfdmFsID0gTVQ4MTgzX0NBTElCUkFUSU9OLAorCS5udW1fY29udHJvbGxlciA9IE1UODE4M19OVU1fQ09OVFJPTExFUiwKKwkuY29udHJvbGxlcl9vZmZzZXQgPSBtdDgxODNfdGNfb2Zmc2V0LAorCS5uZWVkX3N3aXRjaF9iYW5rID0gZmFsc2UsCisJLmJhbmtfZGF0YSA9IHsKKwkJeworCQkJLm51bV9zZW5zb3JzID0gNiwKKwkJCS5zZW5zb3JzID0gbXQ4MTgzX2JhbmtfZGF0YSwKKwkJfSwKKwl9LAorCisJLm1zciA9IG10ODE4M19tc3IsCisJLmFkY3BucCA9IG10ODE4M19hZGNwbnAsCisJLnNlbnNvcl9tdXhfdmFsdWVzID0gbXQ4MTgzX211eF92YWx1ZXMsCisJLnZlcnNpb24gPSBNVEtfVEhFUk1BTF9WMSwKK307CisKKy8qCisgKiBNVDc5ODEgdXNlcyBBVVhBREMgQ2hhbm5lbCAxMSBmb3IgcmF3IGRhdGEgYWNjZXNzLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a190aGVybWFsX2RhdGEgbXQ3OTgxX3RoZXJtYWxfZGF0YSA9IHsKKwkuYXV4YWRjX2NoYW5uZWwgPSBNVDc5ODFfVEVNUF9BVVhBRENfQ0hBTk5FTCwKKwkubnVtX2JhbmtzID0gTVQ3OTgxX05VTV9aT05FUywKKwkubnVtX3NlbnNvcnMgPSBNVDc5ODFfTlVNX1NFTlNPUlMsCisJLnZ0c19pbmRleCA9IG10Nzk4MV92dHNfaW5kZXgsCisJLmNhbGlfdmFsID0gTVQ3OTgxX0NBTElCUkFUSU9OLAorCS5udW1fY29udHJvbGxlciA9IE1UNzk4MV9OVU1fQ09OVFJPTExFUiwKKwkuY29udHJvbGxlcl9vZmZzZXQgPSBtdDc5ODFfdGNfb2Zmc2V0LAorCS5uZWVkX3N3aXRjaF9iYW5rID0gdHJ1ZSwKKwkuYmFua19kYXRhID0geworCQl7CisJCQkubnVtX3NlbnNvcnMgPSAxLAorCQkJLnNlbnNvcnMgPSBtdDc5ODFfYmFua19kYXRhLAorCQl9LAorCX0sCisJLm1zciA9IG10Nzk4MV9tc3IsCisJLmFkY3BucCA9IG10Nzk4MV9hZGNwbnAsCisJLnNlbnNvcl9tdXhfdmFsdWVzID0gbXQ3OTgxX211eF92YWx1ZXMsCisJLnZlcnNpb24gPSBNVEtfVEhFUk1BTF9WMywKK307CisKKy8qCisgKiBNVDc5ODYgdXNlcyBBVVhBREMgQ2hhbm5lbCAxMSBmb3IgcmF3IGRhdGEgYWNjZXNzLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a190aGVybWFsX2RhdGEgbXQ3OTg2X3RoZXJtYWxfZGF0YSA9IHsKKwkuYXV4YWRjX2NoYW5uZWwgPSBNVDc5ODZfVEVNUF9BVVhBRENfQ0hBTk5FTCwKKwkubnVtX2JhbmtzID0gTVQ3OTg2X05VTV9aT05FUywKKwkubnVtX3NlbnNvcnMgPSBNVDc5ODZfTlVNX1NFTlNPUlMsCisJLnZ0c19pbmRleCA9IG10Nzk4Nl92dHNfaW5kZXgsCisJLmNhbGlfdmFsID0gTVQ3OTg2X0NBTElCUkFUSU9OLAorCS5udW1fY29udHJvbGxlciA9IE1UNzk4Nl9OVU1fQ09OVFJPTExFUiwKKwkuY29udHJvbGxlcl9vZmZzZXQgPSBtdDc5ODZfdGNfb2Zmc2V0LAorCS5uZWVkX3N3aXRjaF9iYW5rID0gdHJ1ZSwKKwkuYmFua19kYXRhID0geworCQl7CisJCQkubnVtX3NlbnNvcnMgPSAxLAorCQkJLnNlbnNvcnMgPSBtdDc5ODZfYmFua19kYXRhLAorCQl9LAorCX0sCisJLm1zciA9IG10Nzk4Nl9tc3IsCisJLmFkY3BucCA9IG10Nzk4Nl9hZGNwbnAsCisJLnNlbnNvcl9tdXhfdmFsdWVzID0gbXQ3OTg2X211eF92YWx1ZXMsCisJLnZlcnNpb24gPSBNVEtfVEhFUk1BTF9WMywKK307CisKKy8qKgorICogcmF3X3RvX21jZWxzaXVzIC0gY29udmVydCBhIHJhdyBBREMgdmFsdWUgdG8gbWNlbHNpdXMKKyAqIEBtdDoJVGhlIHRoZXJtYWwgY29udHJvbGxlcgorICogQHNlbnNubzoJc2Vuc29yIG51bWJlcgorICogQHJhdzoJcmF3IEFEQyB2YWx1ZQorICoKKyAqIFRoaXMgY29udmVydHMgdGhlIHJhdyBBREMgdmFsdWUgdG8gbWNlbHNpdXMgdXNpbmcgdGhlIFNvQyBzcGVjaWZpYworICogY2FsaWJyYXRpb24gY29uc3RhbnRzCisgKi8KK3N0YXRpYyBpbnQgcmF3X3RvX21jZWxzaXVzX3YxKHN0cnVjdCBtdGtfdGhlcm1hbCAqbXQsIGludCBzZW5zbm8sIHMzMiByYXcpCit7CisJczMyIHRtcDsKKworCXJhdyAmPSAweGZmZjsKKworCXRtcCA9IDIwMzQ1MDUyMCA8PCAzOworCXRtcCAvPSBtdC0+Y29uZi0+Y2FsaV92YWwgKyBtdC0+b19zbG9wZTsKKwl0bXAgLz0gMTAwMDAgKyBtdC0+YWRjX2dlOworCXRtcCAqPSByYXcgLSBtdC0+dnRzW3NlbnNub10gLSAzMzUwOworCXRtcCA+Pj0gMzsKKworCXJldHVybiBtdC0+ZGVnY19jYWxpICogNTAwIC0gdG1wOworfQorCitzdGF0aWMgaW50IHJhd190b19tY2Vsc2l1c192MihzdHJ1Y3QgbXRrX3RoZXJtYWwgKm10LCBpbnQgc2Vuc25vLCBzMzIgcmF3KQoreworCXMzMiBmb3JtYXRfMTsKKwlzMzIgZm9ybWF0XzI7CisJczMyIGdfb2U7CisJczMyIGdfZ2FpbjsKKwlzMzIgZ194X3Jvb210OworCXMzMiB0bXA7CisKKwlpZiAocmF3ID09IDApCisJCXJldHVybiAwOworCisJcmF3ICY9IDB4ZmZmOworCWdfZ2FpbiA9IDEwMDAwICsgKCgobXQtPmFkY19nZSAtIDUxMikgKiAxMDAwMCkgPj4gMTIpOworCWdfb2UgPSBtdC0+YWRjX29lIC0gNTEyOworCWZvcm1hdF8xID0gbXQtPnZ0c1tWVFMyXSArIDMxMDUgLSBnX29lOworCWZvcm1hdF8yID0gKG10LT5kZWdjX2NhbGkgKiAxMCkgPj4gMTsKKwlnX3hfcm9vbXQgPSAoKChmb3JtYXRfMSAqIDEwMDAwKSA+PiAxMikgKiAxMDAwMCkgLyBnX2dhaW47CisKKwl0bXAgPSAoKCgoKHJhdyAtIGdfb2UpICogMTAwMDApID4+IDEyKSAqIDEwMDAwKSAvIGdfZ2FpbikgLSBnX3hfcm9vbXQ7CisJdG1wID0gdG1wICogMTAgKiAxMDAgLyAxMTsKKworCWlmIChtdC0+b19zbG9wZV9zaWduID09IDApCisJCXRtcCA9IHRtcCAvICgxNjUgLSBtdC0+b19zbG9wZSk7CisJZWxzZQorCQl0bXAgPSB0bXAgLyAoMTY1ICsgbXQtPm9fc2xvcGUpOworCisJcmV0dXJuIChmb3JtYXRfMiAtIHRtcCkgKiAxMDA7Cit9CisKK3N0YXRpYyBpbnQgcmF3X3RvX21jZWxzaXVzX3YzKHN0cnVjdCBtdGtfdGhlcm1hbCAqbXQsIGludCBzZW5zbm8sIHMzMiByYXcpCit7CisJczMyIHRtcDsKKworCWlmIChyYXcgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlyYXcgJj0gMHhmZmY7CisJdG1wID0gMTAwMDAwICogMTUgLyAxNiAqIDEwMDAwOworCXRtcCAvPSA0MDk2IC0gNTEyICsgbXQtPmFkY19nZTsKKwl0bXAgLz0gMTQ5MDsKKwl0bXAgKj0gcmF3IC0gbXQtPnZ0c1tzZW5zbm9dIC0gMjkwMDsKKworCXJldHVybiBtdC0+ZGVnY19jYWxpICogNTAwIC0gdG1wOworfQorCisvKioKKyAqIG10a190aGVybWFsX2dldF9iYW5rIC0gZ2V0IGJhbmsKKyAqIEBiYW5rOglUaGUgYmFuaworICoKKyAqIFRoZSBiYW5rIHJlZ2lzdGVycyBhcmUgYmFua2VkLCB3ZSBoYXZlIHRvIHNlbGVjdCBhIGJhbmsgaW4gdGhlCisgKiBQVFBDT1JFU0VMIHJlZ2lzdGVyIHRvIGFjY2VzcyBpdC4KKyAqLworc3RhdGljIHZvaWQgbXRrX3RoZXJtYWxfZ2V0X2Jhbmsoc3RydWN0IG10a190aGVybWFsX2JhbmsgKmJhbmspCit7CisJc3RydWN0IG10a190aGVybWFsICptdCA9IGJhbmstPm10OworCXUzMiB2YWw7CisKKwlpZiAobXQtPmNvbmYtPm5lZWRfc3dpdGNoX2JhbmspIHsKKwkJbXV0ZXhfbG9jaygmbXQtPmxvY2spOworCisJCXZhbCA9IHJlYWRsKG10LT50aGVybWFsX2Jhc2UgKyBQVFBDT1JFU0VMKTsKKwkJdmFsICY9IH4weGY7CisJCXZhbCB8PSBiYW5rLT5pZDsKKwkJd3JpdGVsKHZhbCwgbXQtPnRoZXJtYWxfYmFzZSArIFBUUENPUkVTRUwpOworCX0KK30KKworLyoqCisgKiBtdGtfdGhlcm1hbF9wdXRfYmFuayAtIHJlbGVhc2UgYmFuaworICogQGJhbms6CVRoZSBiYW5rCisgKgorICogcmVsZWFzZSBhIGJhbmsgcHJldmlvdXNseSB0YWtlbiB3aXRoIG10a190aGVybWFsX2dldF9iYW5rLAorICovCitzdGF0aWMgdm9pZCBtdGtfdGhlcm1hbF9wdXRfYmFuayhzdHJ1Y3QgbXRrX3RoZXJtYWxfYmFuayAqYmFuaykKK3sKKwlzdHJ1Y3QgbXRrX3RoZXJtYWwgKm10ID0gYmFuay0+bXQ7CisKKwlpZiAobXQtPmNvbmYtPm5lZWRfc3dpdGNoX2JhbmspCisJCW11dGV4X3VubG9jaygmbXQtPmxvY2spOworfQorCisvKioKKyAqIG10a190aGVybWFsX2JhbmtfdGVtcGVyYXR1cmUgLSBnZXQgdGhlIHRlbXBlcmF0dXJlIG9mIGEgYmFuaworICogQGJhbms6CVRoZSBiYW5rCisgKgorICogVGhlIHRlbXBlcmF0dXJlIG9mIGEgYmFuayBpcyBjb25zaWRlcmVkIHRoZSBtYXhpbXVtIHRlbXBlcmF0dXJlIG9mCisgKiB0aGUgc2Vuc29ycyBhc3NvY2lhdGVkIHRvIHRoZSBiYW5rLgorICovCitzdGF0aWMgaW50IG10a190aGVybWFsX2JhbmtfdGVtcGVyYXR1cmUoc3RydWN0IG10a190aGVybWFsX2JhbmsgKmJhbmspCit7CisJc3RydWN0IG10a190aGVybWFsICptdCA9IGJhbmstPm10OworCWNvbnN0IHN0cnVjdCBtdGtfdGhlcm1hbF9kYXRhICpjb25mID0gbXQtPmNvbmY7CisJaW50IGksIHRlbXAgPSBJTlRfTUlOLCBtYXggPSBJTlRfTUlOOworCXUzMiByYXc7CisKKwlmb3IgKGkgPSAwOyBpIDwgY29uZi0+YmFua19kYXRhW2JhbmstPmlkXS5udW1fc2Vuc29yczsgaSsrKSB7CisJCXJhdyA9IHJlYWRsKG10LT50aGVybWFsX2Jhc2UgKyBjb25mLT5tc3JbaV0pOworCisJCWlmIChtdC0+Y29uZi0+dmVyc2lvbiA9PSBNVEtfVEhFUk1BTF9WMSkgeworCQkJdGVtcCA9IHJhd190b19tY2Vsc2l1c192MSgKKwkJCQltdCwgY29uZi0+YmFua19kYXRhW2JhbmstPmlkXS5zZW5zb3JzW2ldLCByYXcpOworCQl9IGVsc2UgaWYgKG10LT5jb25mLT52ZXJzaW9uID09IE1US19USEVSTUFMX1YyKSB7CisJCQl0ZW1wID0gcmF3X3RvX21jZWxzaXVzX3YyKAorCQkJCW10LCBjb25mLT5iYW5rX2RhdGFbYmFuay0+aWRdLnNlbnNvcnNbaV0sIHJhdyk7CisJCX0gZWxzZSB7CisJCQl0ZW1wID0gcmF3X3RvX21jZWxzaXVzX3YzKAorCQkJCW10LCBjb25mLT5iYW5rX2RhdGFbYmFuay0+aWRdLnNlbnNvcnNbaV0sIHJhdyk7CisJCX0KKworCQkvKgorCQkgKiBUaGUgZmlyc3QgcmVhZCBvZiBhIHNlbnNvciBvZnRlbiBjb250YWlucyB2ZXJ5IGhpZ2ggYm9ndXMKKwkJICogdGVtcGVyYXR1cmUgdmFsdWUuIEZpbHRlciB0aGVzZSBvdXQgc28gdGhhdCB0aGUgc3lzdGVtIGRvZXMKKwkJICogbm90IGltbWVkaWF0ZWx5IHNodXQgZG93bi4KKwkJICovCisJCWlmICh0ZW1wID4gMjAwMDAwKQorCQkJdGVtcCA9IDA7CisKKwkJaWYgKHRlbXAgPiBtYXgpCisJCQltYXggPSB0ZW1wOworCX0KKworCXJldHVybiBtYXg7Cit9CisKK3N0YXRpYyBpbnQgbXRrX3JlYWRfdGVtcCh2b2lkICpkYXRhLCBpbnQgKnRlbXBlcmF0dXJlKQoreworCXN0cnVjdCBtdGtfdGhlcm1hbCAqbXQgPSBkYXRhOworCWludCBpOworCWludCB0ZW1wbWF4ID0gSU5UX01JTjsKKworCWZvciAoaSA9IDA7IGkgPCBtdC0+Y29uZi0+bnVtX2JhbmtzOyBpKyspIHsKKwkJc3RydWN0IG10a190aGVybWFsX2JhbmsgKmJhbmsgPSAmbXQtPmJhbmtzW2ldOworCisJCW10a190aGVybWFsX2dldF9iYW5rKGJhbmspOworCisJCXRlbXBtYXggPSBtYXgodGVtcG1heCwgbXRrX3RoZXJtYWxfYmFua190ZW1wZXJhdHVyZShiYW5rKSk7CisKKwkJbXRrX3RoZXJtYWxfcHV0X2JhbmsoYmFuayk7CisJfQorCisJKnRlbXBlcmF0dXJlID0gdGVtcG1heDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHRoZXJtYWxfem9uZV9vZl9kZXZpY2Vfb3BzIG10a190aGVybWFsX29wcyA9IHsKKwkuZ2V0X3RlbXAgPSBtdGtfcmVhZF90ZW1wLAorfTsKKworc3RhdGljIHZvaWQgbXRrX3RoZXJtYWxfaW5pdF9iYW5rKHN0cnVjdCBtdGtfdGhlcm1hbCAqbXQsIGludCBudW0sCisJCQkJICB1MzIgYXBtaXhlZF9waHlzX2Jhc2UsIHUzMiBhdXhhZGNfcGh5c19iYXNlLAorCQkJCSAgaW50IGN0cmxfaWQpCit7CisJc3RydWN0IG10a190aGVybWFsX2JhbmsgKmJhbmsgPSAmbXQtPmJhbmtzW251bV07CisJY29uc3Qgc3RydWN0IG10a190aGVybWFsX2RhdGEgKmNvbmYgPSBtdC0+Y29uZjsKKwlpbnQgaTsKKworCWludCBvZmZzZXQgPSBtdC0+Y29uZi0+Y29udHJvbGxlcl9vZmZzZXRbY3RybF9pZF07CisJdm9pZCBfX2lvbWVtICpjb250cm9sbGVyX2Jhc2UgPSBtdC0+dGhlcm1hbF9iYXNlICsgb2Zmc2V0OworCisJYmFuay0+aWQgPSBudW07CisJYmFuay0+bXQgPSBtdDsKKworCW10a190aGVybWFsX2dldF9iYW5rKGJhbmspOworCisJLyogYnVzIGNsb2NrIDY2TSBjb3VudGluZyB1bml0IGlzIDEyICogMTUuMTVucyAqIDI1NiA9IDQ2LjU0MHVzICovCisJd3JpdGVsKFRFTVBfTU9OQ1RMMV9QRVJJT0RfVU5JVCgxMiksIGNvbnRyb2xsZXJfYmFzZSArIFRFTVBfTU9OQ1RMMSk7CisKKwkvKgorCSAqIGZpbHQgaW50ZXJ2YWwgaXMgMSAqIDQ2LjU0MHVzID0gNDYuNTR1cywKKwkgKiBzZW4gaW50ZXJ2YWwgaXMgNDI5ICogNDYuNTQwdXMgPSAxOS45Nm1zCisJICovCisJd3JpdGVsKFRFTVBfTU9OQ1RMMl9GSUxURVJfSU5URVJWQUwoMSkgfAorCQkJVEVNUF9NT05DVEwyX1NFTlNPUl9JTlRFUlZBTCg0MjkpLAorCQkJY29udHJvbGxlcl9iYXNlICsgVEVNUF9NT05DVEwyKTsKKworCS8qIHBvbGwgaXMgc2V0IHRvIDEwdSAqLworCXdyaXRlbChURU1QX0FIQlBPTExfQURDX1BPTExfSU5URVJWQUwoNzY4KSwKKwkgICAgICAgY29udHJvbGxlcl9iYXNlICsgVEVNUF9BSEJQT0xMKTsKKworCS8qIHRlbXBlcmF0dXJlIHNhbXBsaW5nIGNvbnRyb2wsIDEgc2FtcGxlICovCisJd3JpdGVsKDB4MCwgY29udHJvbGxlcl9iYXNlICsgVEVNUF9NU1JDVEwwKTsKKworCS8qIGV4Y2VlZCB0aGlzIHBvbGxpbmcgdGltZSwgSVJRIHdvdWxkIGJlIGluc2VydGVkICovCisJd3JpdGVsKDB4ZmZmZmZmZmYsIGNvbnRyb2xsZXJfYmFzZSArIFRFTVBfQUhCVE8pOworCisJLyogbnVtYmVyIG9mIGludGVycnVwdHMgcGVyIGV2ZW50LCAxIGlzIGVub3VnaCAqLworCXdyaXRlbCgweDAsIGNvbnRyb2xsZXJfYmFzZSArIFRFTVBfTU9OSURFVDApOworCXdyaXRlbCgweDAsIGNvbnRyb2xsZXJfYmFzZSArIFRFTVBfTU9OSURFVDEpOworCisJLyoKKwkgKiBUaGUgTVQ4MTczIHRoZXJtYWwgY29udHJvbGxlciBkb2VzIG5vdCBoYXZlIGl0cyBvd24gQURDLiBJbnN0ZWFkIGl0CisJICogdXNlcyBBSEIgYnVzIGFjY2Vzc2VzIHRvIGNvbnRyb2wgdGhlIEFVWEFEQy4gVG8gZG8gdGhpcyB0aGUgdGhlcm1hbAorCSAqIGNvbnRyb2xsZXIgaGFzIHRvIGJlIHByb2dyYW1tZWQgd2l0aCB0aGUgcGh5c2ljYWwgYWRkcmVzc2VzIG9mIHRoZQorCSAqIEFVWEFEQyByZWdpc3RlcnMgYW5kIHdpdGggdGhlIHZhcmlvdXMgYml0IHBvc2l0aW9ucyBpbiB0aGUgQVVYQURDLgorCSAqIEFsc28gdGhlIHRoZXJtYWwgY29udHJvbGxlciBjb250cm9scyBhIG11eCBpbiB0aGUgQVBNSVhFRFNZUyByZWdpc3RlcgorCSAqIHNwYWNlLgorCSAqLworCisJLyoKKwkgKiB0aGlzIHZhbHVlIHdpbGwgYmUgc3RvcmVkIHRvIFRFTVBfUE5QTVVYQUREUiAoVEVNUF9TUEFSRTApCisJICogYXV0b21hdGljYWxseSBieSBodworCSAqLworCXdyaXRlbChCSVQoY29uZi0+YXV4YWRjX2NoYW5uZWwpLCBjb250cm9sbGVyX2Jhc2UgKyBURU1QX0FEQ01VWCk7CisKKwkvKiBBSEIgYWRkcmVzcyBmb3IgYXV4YWRjIG11eCBzZWxlY3Rpb24gKi8KKwl3cml0ZWwoYXV4YWRjX3BoeXNfYmFzZSArIEFVWEFEQ19DT04xX0NMUl9WLAorCSAgICAgICBjb250cm9sbGVyX2Jhc2UgKyBURU1QX0FEQ01VWEFERFIpOworCisJaWYgKG10LT5jb25mLT52ZXJzaW9uID09IE1US19USEVSTUFMX1YxKSB7CisJCS8qIEFIQiBhZGRyZXNzIGZvciBwbnAgc2Vuc29yIG11eCBzZWxlY3Rpb24gKi8KKwkJd3JpdGVsKGFwbWl4ZWRfcGh5c19iYXNlICsgQVBNSVhFRF9TWVNfVFNfQ09OMSwKKwkJICAgICAgIGNvbnRyb2xsZXJfYmFzZSArIFRFTVBfUE5QTVVYQUREUik7CisJfQorCisJLyogQUhCIHZhbHVlIGZvciBhdXhhZGMgZW5hYmxlICovCisJd3JpdGVsKEJJVChjb25mLT5hdXhhZGNfY2hhbm5lbCksIGNvbnRyb2xsZXJfYmFzZSArIFRFTVBfQURDRU4pOworCisJLyogQUhCIGFkZHJlc3MgZm9yIGF1eGFkYyBlbmFibGUgKGNoYW5uZWwgMCBpbW1lZGlhdGUgbW9kZSBzZWxlY3RlZCkgKi8KKwl3cml0ZWwoYXV4YWRjX3BoeXNfYmFzZSArIEFVWEFEQ19DT04xX1NFVF9WLAorCSAgICAgICBjb250cm9sbGVyX2Jhc2UgKyBURU1QX0FEQ0VOQUREUik7CisKKwkvKiBBSEIgYWRkcmVzcyBmb3IgYXV4YWRjIHZhbGlkIGJpdCAqLworCXdyaXRlbChhdXhhZGNfcGh5c19iYXNlICsgQVVYQURDX0RBVEEoY29uZi0+YXV4YWRjX2NoYW5uZWwpLAorCSAgICAgICBjb250cm9sbGVyX2Jhc2UgKyBURU1QX0FEQ1ZBTElEQUREUik7CisKKwkvKiBBSEIgYWRkcmVzcyBmb3IgYXV4YWRjIHZvbHRhZ2Ugb3V0cHV0ICovCisJd3JpdGVsKGF1eGFkY19waHlzX2Jhc2UgKyBBVVhBRENfREFUQShjb25mLT5hdXhhZGNfY2hhbm5lbCksCisJICAgICAgIGNvbnRyb2xsZXJfYmFzZSArIFRFTVBfQURDVk9MVEFERFIpOworCisJLyogcmVhZCB2YWxpZCAmIHZvbHRhZ2UgYXJlIGF0IHRoZSBzYW1lIHJlZ2lzdGVyICovCisJd3JpdGVsKDB4MCwgY29udHJvbGxlcl9iYXNlICsgVEVNUF9SRENUUkwpOworCisJLyogaW5kaWNhdGUgd2hlcmUgdGhlIHZhbGlkIGJpdCBpcyAqLworCXdyaXRlbChURU1QX0FEQ1ZBTElETUFTS19WQUxJRF9ISUdIIHwgVEVNUF9BRENWQUxJRE1BU0tfVkFMSURfUE9TKDEyKSwKKwkgICAgICAgY29udHJvbGxlcl9iYXNlICsgVEVNUF9BRENWQUxJRE1BU0spOworCisJLyogbm8gc2hpZnQgKi8KKwl3cml0ZWwoMHgwLCBjb250cm9sbGVyX2Jhc2UgKyBURU1QX0FEQ1ZPTFRBR0VTSElGVCk7CisKKwkvKiBlbmFibGUgYXV4YWRjIG11eCB3cml0ZSB0cmFuc2FjdGlvbiAqLworCXdyaXRlbChURU1QX0FEQ1dSSVRFQ1RSTF9BRENfTVVYX1dSSVRFLAorCQljb250cm9sbGVyX2Jhc2UgKyBURU1QX0FEQ1dSSVRFQ1RSTCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY29uZi0+YmFua19kYXRhW251bV0ubnVtX3NlbnNvcnM7IGkrKykKKwkJd3JpdGVsKGNvbmYtPnNlbnNvcl9tdXhfdmFsdWVzW2NvbmYtPmJhbmtfZGF0YVtudW1dLnNlbnNvcnNbaV1dLAorCQkgICAgICAgbXQtPnRoZXJtYWxfYmFzZSArIGNvbmYtPmFkY3BucFtpXSk7CisKKwl3cml0ZWwoKDEgPDwgY29uZi0+YmFua19kYXRhW251bV0ubnVtX3NlbnNvcnMpIC0gMSwKKwkgICAgICAgY29udHJvbGxlcl9iYXNlICsgVEVNUF9NT05DVEwwKTsKKworCXdyaXRlbChURU1QX0FEQ1dSSVRFQ1RSTF9BRENfUE5QX1dSSVRFIHwKKwkgICAgICAgVEVNUF9BRENXUklURUNUUkxfQURDX01VWF9XUklURSwKKwkgICAgICAgY29udHJvbGxlcl9iYXNlICsgVEVNUF9BRENXUklURUNUUkwpOworCisJbXRrX3RoZXJtYWxfcHV0X2JhbmsoYmFuayk7Cit9CisKK3N0YXRpYyB1NjQgb2ZfZ2V0X3BoeXNfYmFzZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXU2NCBzaXplNjQ7CisJY29uc3QgX19iZTMyICpyZWdhZGRyX3A7CisKKwlyZWdhZGRyX3AgPSBvZl9nZXRfYWRkcmVzcyhucCwgMCwgJnNpemU2NCwgTlVMTCk7CisJaWYgKCFyZWdhZGRyX3ApCisJCXJldHVybiBPRl9CQURfQUREUjsKKworCXJldHVybiBvZl90cmFuc2xhdGVfYWRkcmVzcyhucCwgcmVnYWRkcl9wKTsKK30KKworc3RhdGljIGludCBtdGtfdGhlcm1hbF9leHRyYWN0X2VmdXNlX3YxKHN0cnVjdCBtdGtfdGhlcm1hbCAqbXQsIHUzMiAqYnVmKQoreworCWludCBpOworCisJaWYgKCEoYnVmWzBdICYgQ0FMSUJfQlVGMF9WQUxJRF9WMSkpCisJCXJldHVybiAtRUlOVkFMOworCisJbXQtPmFkY19nZSA9IENBTElCX0JVRjFfQURDX0dFX1YxKGJ1ZlsxXSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbXQtPmNvbmYtPm51bV9zZW5zb3JzOyBpKyspIHsKKwkJc3dpdGNoIChtdC0+Y29uZi0+dnRzX2luZGV4W2ldKSB7CisJCWNhc2UgVlRTMToKKwkJCW10LT52dHNbVlRTMV0gPSBDQUxJQl9CVUYwX1ZUU19UUzFfVjEoYnVmWzBdKTsKKwkJCWJyZWFrOworCQljYXNlIFZUUzI6CisJCQltdC0+dnRzW1ZUUzJdID0gQ0FMSUJfQlVGMF9WVFNfVFMyX1YxKGJ1ZlswXSk7CisJCQlicmVhazsKKwkJY2FzZSBWVFMzOgorCQkJbXQtPnZ0c1tWVFMzXSA9IENBTElCX0JVRjFfVlRTX1RTM19WMShidWZbMV0pOworCQkJYnJlYWs7CisJCWNhc2UgVlRTNDoKKwkJCW10LT52dHNbVlRTNF0gPSBDQUxJQl9CVUYyX1ZUU19UUzRfVjEoYnVmWzJdKTsKKwkJCWJyZWFrOworCQljYXNlIFZUUzU6CisJCQltdC0+dnRzW1ZUUzVdID0gQ0FMSUJfQlVGMl9WVFNfVFM1X1YxKGJ1ZlsyXSk7CisJCQlicmVhazsKKwkJY2FzZSBWVFNBQkI6CisJCQltdC0+dnRzW1ZUU0FCQl0gPQorCQkJCUNBTElCX0JVRjJfVlRTX1RTQUJCX1YxKGJ1ZlsyXSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCisJbXQtPmRlZ2NfY2FsaSA9IENBTElCX0JVRjBfREVHQ19DQUxJX1YxKGJ1ZlswXSk7CisJaWYgKENBTElCX0JVRjFfSURfVjEoYnVmWzFdKSAmCisJICAgIENBTElCX0JVRjBfT19TTE9QRV9TSUdOX1YxKGJ1ZlswXSkpCisJCW10LT5vX3Nsb3BlID0gLUNBTElCX0JVRjBfT19TTE9QRV9WMShidWZbMF0pOworCWVsc2UKKwkJbXQtPm9fc2xvcGUgPSBDQUxJQl9CVUYwX09fU0xPUEVfVjEoYnVmWzBdKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a190aGVybWFsX2V4dHJhY3RfZWZ1c2VfdjIoc3RydWN0IG10a190aGVybWFsICptdCwgdTMyICpidWYpCit7CisJaWYgKCFDQUxJQl9CVUYxX1ZBTElEX1YyKGJ1ZlsxXSkpCisJCXJldHVybiAtRUlOVkFMOworCisJbXQtPmFkY19vZSA9IENBTElCX0JVRjBfQURDX09FX1YyKGJ1ZlswXSk7CisJbXQtPmFkY19nZSA9IENBTElCX0JVRjBfQURDX0dFX1YyKGJ1ZlswXSk7CisJbXQtPmRlZ2NfY2FsaSA9IENBTElCX0JVRjBfREVHQ19DQUxJX1YyKGJ1ZlswXSk7CisJbXQtPm9fc2xvcGUgPSBDQUxJQl9CVUYwX09fU0xPUEVfVjIoYnVmWzBdKTsKKwltdC0+dnRzW1ZUUzFdID0gQ0FMSUJfQlVGMV9WVFNfVFMxX1YyKGJ1ZlsxXSk7CisJbXQtPnZ0c1tWVFMyXSA9IENBTElCX0JVRjFfVlRTX1RTMl9WMihidWZbMV0pOworCW10LT52dHNbVlRTQUJCXSA9IENBTElCX0JVRjFfVlRTX1RTQUJCX1YyKGJ1ZlsxXSk7CisJbXQtPm9fc2xvcGVfc2lnbiA9IENBTElCX0JVRjFfT19TTE9QRV9TSUdOX1YyKGJ1ZlsxXSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfdGhlcm1hbF9leHRyYWN0X2VmdXNlX3YzKHN0cnVjdCBtdGtfdGhlcm1hbCAqbXQsIHUzMiAqYnVmKQoreworCWlmICghQ0FMSUJfQlVGMV9WQUxJRF9WMyhidWZbMV0pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW10LT5hZGNfb2UgPSBDQUxJQl9CVUYwX0FEQ19PRV9WMyhidWZbMF0pOworCW10LT5hZGNfZ2UgPSBDQUxJQl9CVUYwX0FEQ19HRV9WMyhidWZbMF0pOworCW10LT5kZWdjX2NhbGkgPSBDQUxJQl9CVUYwX0RFR0NfQ0FMSV9WMyhidWZbMF0pOworCW10LT5vX3Nsb3BlID0gQ0FMSUJfQlVGMF9PX1NMT1BFX1YzKGJ1ZlswXSk7CisJbXQtPnZ0c1tWVFMxXSA9IENBTElCX0JVRjFfVlRTX1RTMV9WMyhidWZbMV0pOworCW10LT52dHNbVlRTMl0gPSBDQUxJQl9CVUYxX1ZUU19UUzJfVjMoYnVmWzFdKTsKKwltdC0+dnRzW1ZUU0FCQl0gPSBDQUxJQl9CVUYxX1ZUU19UU0FCQl9WMyhidWZbMV0pOworCW10LT5vX3Nsb3BlX3NpZ24gPSBDQUxJQl9CVUYxX09fU0xPUEVfU0lHTl9WMyhidWZbMV0pOworCisJaWYgKENBTElCX0JVRjFfSURfVjMoYnVmWzFdKSA9PSAwKQorCQltdC0+b19zbG9wZSA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfdGhlcm1hbF9nZXRfY2FsaWJyYXRpb25fZGF0YShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgICBzdHJ1Y3QgbXRrX3RoZXJtYWwgKm10KQoreworCXN0cnVjdCBudm1lbV9jZWxsICpjZWxsOworCXUzMiAqYnVmOworCXNpemVfdCBsZW47CisJaW50IGksIHJldCA9IDA7CisKKwkvKiBTdGFydCB3aXRoIGRlZmF1bHQgdmFsdWVzICovCisJbXQtPmFkY19nZSA9IDUxMjsKKwltdC0+YWRjX29lID0gNTEyOworCWZvciAoaSA9IDA7IGkgPCBtdC0+Y29uZi0+bnVtX3NlbnNvcnM7IGkrKykKKwkJbXQtPnZ0c1tpXSA9IDI2MDsKKwltdC0+ZGVnY19jYWxpID0gNDA7CisJbXQtPm9fc2xvcGUgPSAwOworCisJY2VsbCA9IG52bWVtX2NlbGxfZ2V0KGRldiwgImNhbGlicmF0aW9uLWRhdGEiKTsKKwlpZiAoSVNfRVJSKGNlbGwpKSB7CisJCWlmIChQVFJfRVJSKGNlbGwpID09IC1FUFJPQkVfREVGRVIpCisJCQlyZXR1cm4gUFRSX0VSUihjZWxsKTsKKwkJcmV0dXJuIDA7CisJfQorCisJYnVmID0gKHUzMiAqKW52bWVtX2NlbGxfcmVhZChjZWxsLCAmbGVuKTsKKworCW52bWVtX2NlbGxfcHV0KGNlbGwpOworCisJaWYgKElTX0VSUihidWYpKQorCQlyZXR1cm4gUFRSX0VSUihidWYpOworCisJaWYgKGxlbiA8IDMgKiBzaXplb2YodTMyKSkgeworCQlkZXZfd2FybihkZXYsICJpbnZhbGlkIGNhbGlicmF0aW9uIGRhdGFcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAobXQtPmNvbmYtPnZlcnNpb24gPT0gTVRLX1RIRVJNQUxfVjEpCisJCXJldCA9IG10a190aGVybWFsX2V4dHJhY3RfZWZ1c2VfdjEobXQsIGJ1Zik7CisJZWxzZSBpZiAobXQtPmNvbmYtPnZlcnNpb24gPT0gTVRLX1RIRVJNQUxfVjIpCisJCXJldCA9IG10a190aGVybWFsX2V4dHJhY3RfZWZ1c2VfdjIobXQsIGJ1Zik7CisJZWxzZQorCQlyZXQgPSBtdGtfdGhlcm1hbF9leHRyYWN0X2VmdXNlX3YzKG10LCBidWYpOworCisJaWYgKHJldCkgeworCQlkZXZfaW5mbyhkZXYsICJEZXZpY2Ugbm90IGNhbGlicmF0ZWQsIHVzaW5nIGRlZmF1bHQgY2FsaWJyYXRpb24gdmFsdWVzXG4iKTsKKwkJcmV0ID0gMDsKKwl9CisKK291dDoKKwlrZnJlZShidWYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRrX3RoZXJtYWxfb2ZfbWF0Y2hbXSA9IHsKKwl7CisJCS5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My10aGVybWFsIiwKKwkJLmRhdGEgPSAodm9pZCAqKSZtdDgxNzNfdGhlcm1hbF9kYXRhLAorCX0sCisJeworCQkuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDI3MDEtdGhlcm1hbCIsCisJCS5kYXRhID0gKHZvaWQgKikmbXQyNzAxX3RoZXJtYWxfZGF0YSwKKwl9LAorCXsKKwkJLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQyNzEyLXRoZXJtYWwiLAorCQkuZGF0YSA9ICh2b2lkICopJm10MjcxMl90aGVybWFsX2RhdGEsCisJfSwKKwl7CisJCS5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzYyMi10aGVybWFsIiwKKwkJLmRhdGEgPSAodm9pZCAqKSZtdDc2MjJfdGhlcm1hbF9kYXRhLAorCX0sCisJeworCQkuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxODMtdGhlcm1hbCIsCisJCS5kYXRhID0gKHZvaWQgKikmbXQ4MTgzX3RoZXJtYWxfZGF0YSwKKwl9LAorCXsKKwkJLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTgxLXRoZXJtYWwiLAorCQkuZGF0YSA9ICh2b2lkICopJm10Nzk4MV90aGVybWFsX2RhdGEsCisJfSwKKwl7CisJCS5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni10aGVybWFsIiwKKwkJLmRhdGEgPSAodm9pZCAqKSZtdDc5ODZfdGhlcm1hbF9kYXRhLAorCX0sIHsKKwl9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG10a190aGVybWFsX29mX21hdGNoKTsKKworc3RhdGljIHZvaWQgbXRrX3RoZXJtYWxfdHVybl9vbl9idWZmZXIodm9pZCBfX2lvbWVtICphcG1peGVkX2Jhc2UpCit7CisJaW50IHRtcDsKKworCXRtcCA9IHJlYWRsKGFwbWl4ZWRfYmFzZSArIEFQTUlYRURfU1lTX1RTX0NPTjEpOworCXRtcCAmPSB+KDB4MzcpOworCXRtcCB8PSAweDE7CisJd3JpdGVsKHRtcCwgYXBtaXhlZF9iYXNlICsgQVBNSVhFRF9TWVNfVFNfQ09OMSk7CisJdWRlbGF5KDIwMCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a190aGVybWFsX3JlbGVhc2VfcGVyaW9kaWNfdHMoc3RydWN0IG10a190aGVybWFsICptdCwKKwkJCQkJICAgIHZvaWQgX19pb21lbSAqYXV4YWRjX2Jhc2UpCit7CisJaW50IHRtcDsKKworCXdyaXRlbCgweDgwMCwgYXV4YWRjX2Jhc2UgKyBBVVhBRENfQ09OMV9TRVRfVik7CisJd3JpdGVsKDB4MSwgbXQtPnRoZXJtYWxfYmFzZSArIFRFTVBfTU9OQ1RMMCk7CisJdG1wID0gcmVhZGwobXQtPnRoZXJtYWxfYmFzZSArIFRFTVBfTVNSQ1RMMSk7CisJd3JpdGVsKCh0bXAgJiAofjB4MTBlKSksIG10LT50aGVybWFsX2Jhc2UgKyBURU1QX01TUkNUTDEpOworfQorCitzdGF0aWMgaW50IG10a190aGVybWFsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldCwgaSwgY3RybF9pZDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmF1eGFkYywgKmFwbWl4ZWRzeXMsICpucCA9IHBkZXYtPmRldi5vZl9ub2RlOworCXN0cnVjdCBtdGtfdGhlcm1hbCAqbXQ7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJdTY0IGF1eGFkY19waHlzX2Jhc2UsIGFwbWl4ZWRfcGh5c19iYXNlOworCXN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0emRldjsKKwl2b2lkIF9faW9tZW0gKmFwbWl4ZWRfYmFzZSwgKmF1eGFkY19iYXNlOworCisJbXQgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCptdCksIEdGUF9LRVJORUwpOworCWlmICghbXQpCisJCXJldHVybiAtRU5PTUVNOworCisJbXQtPmNvbmYgPSBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoJnBkZXYtPmRldik7CisKKwltdC0+Y2xrX3BlcmlfdGhlcm0gPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgInRoZXJtIik7CisJaWYgKElTX0VSUihtdC0+Y2xrX3BlcmlfdGhlcm0pKQorCQlyZXR1cm4gUFRSX0VSUihtdC0+Y2xrX3BlcmlfdGhlcm0pOworCisJbXQtPmNsa19hdXhhZGMgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgImF1eGFkYyIpOworCWlmIChJU19FUlIobXQtPmNsa19hdXhhZGMpKQorCQlyZXR1cm4gUFRSX0VSUihtdC0+Y2xrX2F1eGFkYyk7CisKKwlpZiAobXQtPmNvbmYtPnZlcnNpb24gPT0gTVRLX1RIRVJNQUxfVjMpIHsKKwkJbXQtPmNsa19hZGNfMzJrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJhZGNfMzJrIik7CisJCWlmIChJU19FUlIobXQtPmNsa19hZGNfMzJrKSkKKwkJCXJldHVybiBQVFJfRVJSKG10LT5jbGtfYWRjXzMyayk7CisJfQorCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwltdC0+dGhlcm1hbF9iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7CisJaWYgKElTX0VSUihtdC0+dGhlcm1hbF9iYXNlKSkKKwkJcmV0dXJuIFBUUl9FUlIobXQtPnRoZXJtYWxfYmFzZSk7CisKKwlyZXQgPSBtdGtfdGhlcm1hbF9nZXRfY2FsaWJyYXRpb25fZGF0YSgmcGRldi0+ZGV2LCBtdCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW11dGV4X2luaXQoJm10LT5sb2NrKTsKKworCW10LT5kZXYgPSAmcGRldi0+ZGV2OworCisJYXV4YWRjID0gb2ZfcGFyc2VfcGhhbmRsZShucCwgIm1lZGlhdGVrLGF1eGFkYyIsIDApOworCWlmICghYXV4YWRjKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm1pc3NpbmcgYXV4YWRjIG5vZGVcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlhdXhhZGNfYmFzZSA9IG9mX2lvbWFwKGF1eGFkYywgMCk7CisJYXV4YWRjX3BoeXNfYmFzZSA9IG9mX2dldF9waHlzX2Jhc2UoYXV4YWRjKTsKKworCW9mX25vZGVfcHV0KGF1eGFkYyk7CisKKwlpZiAoYXV4YWRjX3BoeXNfYmFzZSA9PSBPRl9CQURfQUREUikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW4ndCBnZXQgYXV4YWRjIHBoeXMgYWRkcmVzc1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWFwbWl4ZWRzeXMgPSBvZl9wYXJzZV9waGFuZGxlKG5wLCAibWVkaWF0ZWssYXBtaXhlZHN5cyIsIDApOworCWlmICghYXBtaXhlZHN5cykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJtaXNzaW5nIGFwbWl4ZWRzeXMgbm9kZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWFwbWl4ZWRfYmFzZSA9IG9mX2lvbWFwKGFwbWl4ZWRzeXMsIDApOworCWFwbWl4ZWRfcGh5c19iYXNlID0gb2ZfZ2V0X3BoeXNfYmFzZShhcG1peGVkc3lzKTsKKworCW9mX25vZGVfcHV0KGFwbWl4ZWRzeXMpOworCisJaWYgKGFwbWl4ZWRfcGh5c19iYXNlID09IE9GX0JBRF9BRERSKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbid0IGdldCBhdXhhZGMgcGh5cyBhZGRyZXNzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gZGV2aWNlX3Jlc2V0X29wdGlvbmFsKCZwZGV2LT5kZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAobXQtPmNvbmYtPnZlcnNpb24gPT0gTVRLX1RIRVJNQUxfVjMpIHsKKwkJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKG10LT5jbGtfYWRjXzMyayk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbid0IGVuYWJsZSBhdXhhZGMgMzJrIGNsazogJWRcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKG10LT5jbGtfYXV4YWRjKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbid0IGVuYWJsZSBhdXhhZGMgY2xrOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfZGlzYWJsZV9jbGtfYWRjXzMyazsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUobXQtPmNsa19wZXJpX3RoZXJtKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbid0IGVuYWJsZSBwZXJpIGNsazogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2Rpc2FibGVfY2xrX2F1eGFkYzsKKwl9CisKKwlpZiAobXQtPmNvbmYtPnZlcnNpb24gPT0gTVRLX1RIRVJNQUxfVjIgfHwKKwkgICAgbXQtPmNvbmYtPnZlcnNpb24gPT0gTVRLX1RIRVJNQUxfVjMpIHsKKwkJbXRrX3RoZXJtYWxfdHVybl9vbl9idWZmZXIoYXBtaXhlZF9iYXNlKTsKKwkJbXRrX3RoZXJtYWxfcmVsZWFzZV9wZXJpb2RpY190cyhtdCwgYXV4YWRjX2Jhc2UpOworCX0KKworCWZvciAoY3RybF9pZCA9IDA7IGN0cmxfaWQgPCBtdC0+Y29uZi0+bnVtX2NvbnRyb2xsZXIgOyBjdHJsX2lkKyspCisJCWZvciAoaSA9IDA7IGkgPCBtdC0+Y29uZi0+bnVtX2JhbmtzOyBpKyspCisJCQltdGtfdGhlcm1hbF9pbml0X2JhbmsobXQsIGksIGFwbWl4ZWRfcGh5c19iYXNlLAorCQkJCQkgICAgICBhdXhhZGNfcGh5c19iYXNlLCBjdHJsX2lkKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG10KTsKKworCXR6ZGV2ID0gZGV2bV90aGVybWFsX3pvbmVfb2Zfc2Vuc29yX3JlZ2lzdGVyKCZwZGV2LT5kZXYsIDAsIG10LAorCQkJCQkJICAgICAmbXRrX3RoZXJtYWxfb3BzKTsKKwlpZiAoSVNfRVJSKHR6ZGV2KSkgeworCQlyZXQgPSBQVFJfRVJSKHR6ZGV2KTsKKwkJZ290byBlcnJfZGlzYWJsZV9jbGtfcGVyaV90aGVybTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX2Rpc2FibGVfY2xrX3BlcmlfdGhlcm06CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKG10LT5jbGtfcGVyaV90aGVybSk7CitlcnJfZGlzYWJsZV9jbGtfYXV4YWRjOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShtdC0+Y2xrX2F1eGFkYyk7CitlcnJfZGlzYWJsZV9jbGtfYWRjXzMyazoKKwlpZiAobXQtPmNvbmYtPnZlcnNpb24gPT0gTVRLX1RIRVJNQUxfVjMpCisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShtdC0+Y2xrX2FkY18zMmspOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdGtfdGhlcm1hbF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbXRrX3RoZXJtYWwgKm10ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUobXQtPmNsa19wZXJpX3RoZXJtKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUobXQtPmNsa19hdXhhZGMpOworCisJaWYgKG10LT5jb25mLT52ZXJzaW9uID09IE1US19USEVSTUFMX1YzKQorCQljbGtfZGlzYWJsZV91bnByZXBhcmUobXQtPmNsa19hZGNfMzJrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfdGhlcm1hbF9kcml2ZXIgPSB7CisJLnByb2JlID0gbXRrX3RoZXJtYWxfcHJvYmUsCisJLnJlbW92ZSA9IG10a190aGVybWFsX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJtdGstdGhlcm1hbCIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG10a190aGVybWFsX29mX21hdGNoLAorCX0sCit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG10a190aGVybWFsX2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIk1pY2hhZWwgS2FvIDxtaWNoYWVsLmthb0BtZWRpYXRlay5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJMb3VpcyBZdSA8bG91aXMueXVAbWVkaWF0ZWsuY29tPiIpOworTU9EVUxFX0FVVEhPUigiRGF3ZWkgQ2hpZW4gPGRhd2VpLmNoaWVuQG1lZGlhdGVrLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIlNhc2NoYSBIYXVlciA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4iKTsKK01PRFVMRV9BVVRIT1IoIkhhbnlpIFd1IDxoYW55aS53dUBtZWRpYXRlay5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1lZGlhdGVrIHRoZXJtYWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvdXNiL2hvc3QvdW51c3VhbC1kZWNsYXJhdGlvbi5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL3VzYi9ob3N0L3VudXN1YWwtZGVjbGFyYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTE3ZTIwCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL3VzYi9ob3N0L3VudXN1YWwtZGVjbGFyYXRpb24uaApAQCAtMCwwICsxLDI1IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqLworLyoKKyAqIHhoY2ktbXRrLXVudXN1YWxsaWIuaCAtLSB4aGNpIHRvb2xraXQgaGVhZGVyIGZpbGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgTWVkaWF0ZWsgSW5jIC0gaHR0cDovL3d3dy5tZWRpYXRlay5jb20KKyAqCisgKiBBdXRob3I6IFpoYW55b25nIFdhbmcgPHpoYW55b25nLndhbmdAbWVkaWF0ZWsuY29tPgorICovCisKKyBERVZJQ0VfQVRUUl9ERUNMQVJFRChSR19VU0IyMF9JTlRSX0VOKTsKKyBERVZJQ0VfQVRUUl9ERUNMQVJFRChSR19VU0IyMF9WUlRfVlJFRl9TRUwpOworIERFVklDRV9BVFRSX0RFQ0xBUkVEKFJHX1VTQjIwX1RFUk1fVlJFRl9TRUwpOworIERFVklDRV9BVFRSX0RFQ0xBUkVEKFJHX1VTQjIwX0hTVFhfU1JDVFJMKTsKKyBERVZJQ0VfQVRUUl9ERUNMQVJFRChSR19VU0IyMF9ESVNDVEgpOworIERFVklDRV9BVFRSX0RFQ0xBUkVEKFJHX0NIR0RUX0VOKTsKKworICNkZWZpbmUgSFFBX0lORk9STUFDVElPTl9DT0xMRUNUUygpIGRvIHtcCisJRUNIT19IUUEoVVNCMjBfUEhZX1VTQlBIWUFDUjAsIFJHX1VTQjIwX0lOVFJfRU4sIDEpOyBcCisJRUNIT19IUUEoVVNCMjBfUEhZX1VTQlBIWUFDUjEsIFJHX1VTQjIwX1ZSVF9WUkVGX1NFTCwgMyk7IFwKKwlFQ0hPX0hRQShVU0IyMF9QSFlfVVNCUEhZQUNSMSwgUkdfVVNCMjBfVEVSTV9WUkVGX1NFTCwgMyk7IFwKKwlFQ0hPX0hRQShVU0IyMF9QSFlfVVNCUEhZQUNSNSwgUkdfVVNCMjBfSFNUWF9TUkNUUkwsIDMpOyBcCisJRUNIT19IUUEoVVNCMjBfUEhZX1VTQlBIWUFDUjYsIFJHX1VTQjIwX0RJU0NUSCwgNCk7IFwKKwlFQ0hPX0hRQShVU0IyMF9QSFlfVTJQSFlCQzEyQywgUkdfQ0hHRFRfRU4sIDEpOyBcCisJfSB3aGlsZSAoMCkKKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL3VzYi9ob3N0L3VudXN1YWwtc3RhdGVtZW50LmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvdXNiL2hvc3QvdW51c3VhbC1zdGF0ZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTI5MzQyCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL3VzYi9ob3N0L3VudXN1YWwtc3RhdGVtZW50LmgKQEAgLTAsMCArMSwxNiBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KKy8qCisgKiB4aGNpLW10ay11bnVzdWFsbGliLmggLS0geGhjaSB0b29sa2l0IGhlYWRlciBmaWxlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDIxIE1lZGlhdGVrIEluYyAtIGh0dHA6Ly93d3cubWVkaWF0ZWsuY29tCisgKgorICogQXV0aG9yOiBaaGFueW9uZyBXYW5nIDx6aGFueW9uZy53YW5nQG1lZGlhdGVrLmNvbT4KKyAqLworCitVTlVTVUFMX0RFVklDRV9BVFRSKFJHX1VTQjIwX0lOVFJfRU4pLAorVU5VU1VBTF9ERVZJQ0VfQVRUUihSR19VU0IyMF9WUlRfVlJFRl9TRUwpLAorVU5VU1VBTF9ERVZJQ0VfQVRUUihSR19VU0IyMF9URVJNX1ZSRUZfU0VMKSwKK1VOVVNVQUxfREVWSUNFX0FUVFIoUkdfVVNCMjBfSFNUWF9TUkNUUkwpLAorVU5VU1VBTF9ERVZJQ0VfQVRUUihSR19VU0IyMF9ESVNDVEgpLAorVU5VU1VBTF9ERVZJQ0VfQVRUUihSR19DSEdEVF9FTiksCisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy91c2IvaG9zdC94aGNpLW10ay1jaGdkdC1lbi5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbXRrLWNoZ2R0LWVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM2MjZjMQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy91c2IvaG9zdC94aGNpLW10ay1jaGdkdC1lbi5jCkBAIC0wLDAgKzEsMTYxIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIHhIQ0kgaG9zdCBjb250cm9sbGVyIHRvb2xraXQgZHJpdmVyIGZvciBjaGdkdC1lbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAyMSAgTWVkaWFUZWsgSW5jLgorICoKKyAqICBBdXRob3I6IFpoYW55b25nIFdhbmcgPHpoYW55b25nLndhbmdAbWVkaWF0ZWsuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSAieGhjaS1tdGsuaCIKKyNpbmNsdWRlICJ4aGNpLW10ay10ZXN0LmgiCisjaW5jbHVkZSAieGhjaS1tdGstdW51c3VhbC5oIgorCitzdGF0aWMgc3NpemVfdCBSR19DSEdEVF9FTl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHhoY2lfaGNkX210ayAqbXRrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IG10ay0+aGNkOworCXN0cnVjdCB4aGNpX2hjZCAqeGhjaSA9IGhjZF90b194aGNpKGhjZCk7CisJc3NpemVfdCBjbnQgPSAwOworCXZvaWQgX19pb21lbSAqYWRkcjsKKwl1MzIgdmFsOworCXUzMiBpOworCWludCBwb3J0czsKKwljaGFyIHN0clszMl07CisJaW50IGluZGV4ID0gMDsKKwl1MzIgaW8sIGxlbmd0aDsKKwlpbnQgcmV0OworCisJcG9ydHMgPSBtdGstPm51bV91M19wb3J0cyArIG10ay0+bnVtX3UyX3BvcnRzOworCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwgIiBSR19DSEdEVF9FTiB1c2FnZTpcbiIpOworCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwKKwkJIiAgIGVjaG8gdTJwIGluZGV4IDFiMCA+IFJHX0NIR0RUX0VOXG4iKTsKKwlpZiAobXRrLT5udW1fdTNfcG9ydHMgKyAxICE9IHBvcnRzKQorCQljbnQgKz0gc3ByaW50ZihidWYgKyBjbnQsICIJcGFyYW1ldGVyOiB1MnA6ICVpIH4gJWlcbiIsCisJCQkJCW10ay0+bnVtX3UzX3BvcnRzICsgMSwgcG9ydHMpOworCWVsc2UKKwkJY250ICs9IHNwcmludGYoYnVmICsgY250LCAiCXBhcmFtZXRlcjogdTJwOiAlaVxuIiwKKwkJCQkJbXRrLT5udW1fdTNfcG9ydHMgKyAxKTsKKwlpZiAobXRrLT5udW1fdTJfcG9ydHMgPiAxKQorCQljbnQgKz0gc3ByaW50ZihidWYgKyBjbnQsICIJcGFyYW1ldGVyOiBpbmRleDogMCB+ICVpXG4iLAorCQkJICAgICAgIG10ay0+bnVtX3UyX3BvcnRzKTsKKwllbHNlCisJCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwgIglwYXJhbWV0ZXI6IGluZGV4OiAwXG4iKTsKKworCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwgIiBlLmcuOiBlY2hvIDIgMCAxYjEgPiBSR19DSEdEVF9FTlxuIik7CisJY250ICs9IHNwcmludGYoYnVmICsgY250LAorCQkiICBwb3J0MiBiaW5kaW5nIHBoeSAwLCBlbmFibGUgMWInMSBhcyBDSEdEVF9FTlxuIik7CisKKwljbnQgKz0gc3ByaW50ZihidWYgKyBjbnQsCisJCQkiXG49PT09PT09PT1jdXJyZW50IEhRQSBzZXR0aW5nIGNoZWNrPT09PT09PT09XG4iKTsKKwlmb3IgKGkgPSAxOyBpIDw9IHBvcnRzOyBpKyspIHsKKwkJYWRkciA9ICZ4aGNpLT5vcF9yZWdzLT5wb3J0X3N0YXR1c19iYXNlICsKKwkJCU5VTV9QT1JUX1JFR1MgKiAoKGkgLSAxKSAmIDB4ZmYpOworCQl2YWwgPSByZWFkbChhZGRyKTsKKwkJaWYgKGkgPD0gbXRrLT5udW1fdTNfcG9ydHMpIHsKKwkJCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwKKwkJCQkgICAgICAgIlVTQjMwIFBvcnQlaTogMHglMDhYXG4iLCBpLCB2YWwpOworCQl9IGVsc2UgeworCQkJY250ICs9IHNwcmludGYoYnVmICsgY250LAorCQkJCSAgICAgICAiVVNCMjAgUG9ydCVpOiAweCUwOFhcbiIsIGksIHZhbCk7CisKKwkJCXJldCA9IHF1ZXJ5X3BoeV9hZGRyKGRldi0+b2Zfbm9kZSwKKwkJCQkJCSAmaW5kZXgsICZpbywgJmxlbmd0aCk7CisJCQlpZiAocmV0ICYmIHJldCAhPSAtRUFDQ0VTKSB7CisJCQkJaWYgKHJldCA9PSAtRVBFUk0pCisJCQkJCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwKKwkJCQkJIlVTQjIwIFBvcnQlaSAoUGh5JWk6IGFic2VudClcbiIsCisJCQkJCWksIGluZGV4KTsKKwkJCQllbHNlCisJCQkJCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwKKwkJCQkJIlVTQjIwIFBvcnQlaSAoUGh5JWkpIGZhaWx1cmUgJWlcbiIsCisJCQkJCQkgaSwgaW5kZXgsIHJldCk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwKKwkJCQkiVVNCMjAgUG9ydCVpIChQaHklaTolc2FibGUpOiAweCUwOFggMHglMDhYXG4iLAorCQkJCWksIGluZGV4LCByZXQgPyAiIGRpcyIgOiAiIGVuIiwgaW8sIGxlbmd0aCk7CisKKwkJCWFkZHIgICA9IGlvcmVtYXBfbm9jYWNoZShpbywgbGVuZ3RoKTsKKwkJCWFkZHIgICs9IChsZW5ndGggIT0gMHgxMDApID8gMHgzMDAgOiAwOworCisJCQlIUUFfSU5GT1JNQUNUSU9OX0NPTExFQ1RTKCk7CisKKwkJCWlvdW5tYXAoYWRkcik7CisJCQlpbmRleCArKzsKKwkJfQorCX0KKworCWlmIChtdGstPmhxYV9wb3MpIHsKKwkJY250ICs9IHNwcmludGYoYnVmICsgY250LCAiJXMiLCBtdGstPmhxYV9idWYpOworCQltdGstPmhxYV9wb3MgPSAwOworCX0KKworCXJldHVybiBjbnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IFJHX0NIR0RUX0VOX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbikKK3sKKwl1MzIgdmFsOworCXUzMiBpbzsKKwl1MzIgbGVuZ3RoOworCWludCBwb3J0czsKKwlpbnQgd29yZHM7CisJaW50IHBvcnQ7CisJaW50IGluZGV4OworCWludCByZXQ7CisJY2hhciAqc3RyID0gTlVMTDsKKwl2b2lkIF9faW9tZW0gKmFkZHI7CisJc3RydWN0IHhoY2lfaGNkX210ayAqbXRrICA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAgKm5vZGUgPSBkZXYtPm9mX25vZGU7CisKKwlwb3J0cyA9IG10ay0+bnVtX3UzX3BvcnRzICsgbXRrLT5udW1fdTJfcG9ydHM7CisJbXRrLT5ocWFfcG9zID0gMDsKKworCW1lbXNldChtdGstPmhxYV9idWYsIDAsIG10ay0+aHFhX3NpemUpOworCisJc3RyID0ga3phbGxvYyhuLCBHRlBfQVRPTUlDKTsKKworCWhxYV9pbmZvKG10aywgIlJHX0NIR0RUX0VOKCVsdSk6ICVzXG4iLCBuLCBidWYpOworCisJd29yZHMgPSBzc2NhbmYoYnVmLCAiJWkgJWkgMWIlMVswLDFdIiwgJnBvcnQsICZpbmRleCwgc3RyKTsKKwlpZiAoKHdvcmRzICE9IDMpIHx8CisJICAgIChwb3J0IDwgbXRrLT5udW1fdTNfcG9ydHMgfHwgcG9ydCA+IHBvcnRzKSkgeworCQlocWFfaW5mbyhtdGssICJDaGVjayBwYXJhbXMoJWkpOlwiICVpICVpICVzXCIsIFBsZWFzZSFcbiIsCisJCQl3b3JkcywgcG9ydCwgaW5kZXgsIHN0cik7CisKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlocWFfaW5mbyhtdGssICIgcGFyYW1zOiAlaSAlaSAlc1xuIiwKKwkJcG9ydCwgaW5kZXgsIHN0cik7CisKKwlyZXQgPSBxdWVyeV9waHlfYWRkcihub2RlLCAmaW5kZXgsICZpbywgJmxlbmd0aCk7CisJaWYgKHJldCAmJiByZXQgIT0gLUVBQ0NFUykKKwkJZ290byBlcnJvcjsKKworCWlvICs9IChsZW5ndGggIT0gMHgxMDApID8gMHgzMDAgOiAwOworCWlvICs9IFVTQjIwX1BIWV9VMlBIWUJDMTJDOworCisJYWRkciA9IGlvcmVtYXBfbm9jYWNoZShpbywgNCk7CisJdmFsID0gYmluYXJ5X3dyaXRlX3dpZHRoMShhZGRyLCBTSEZUX1JHX0NIR0RUX0VOLCBzdHIpOworCWhxYV9pbmZvKG10aywgIlBvcnQlaShQaHklaSlbMHglMDhYXTogMHglMDhYIGJ1dCAweCUwOFhcbiIsCisJCXBvcnQsIGluZGV4LCBpbywgdmFsLCByZWFkbChhZGRyKSk7CisKKwlpb3VubWFwKGFkZHIpOworCXJldCA9IG47CisKK2Vycm9yOgorCWtmcmVlKHN0cik7CisJcmV0dXJuIHJldDsKK30KK0RFVklDRV9BVFRSX1JXKFJHX0NIR0RUX0VOKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy91c2IvaG9zdC94aGNpLW10ay1kaXNjdGguYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy91c2IvaG9zdC94aGNpLW10ay1kaXNjdGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmEwMjRhCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbXRrLWRpc2N0aC5jCkBAIC0wLDAgKzEsMTYzIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIHhIQ0kgaG9zdCBjb250cm9sbGVyIHRvb2xraXQgZHJpdmVyIGZvciB1c2IyMCBkaXNjdGgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgIE1lZGlhVGVrIEluYy4KKyAqCisgKiAgQXV0aG9yOiBaaGFueW9uZyBXYW5nIDx6aGFueW9uZy53YW5nQG1lZGlhdGVrLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgInhoY2ktbXRrLmgiCisjaW5jbHVkZSAieGhjaS1tdGstdGVzdC5oIgorI2luY2x1ZGUgInhoY2ktbXRrLXVudXN1YWwuaCIKKworc3RhdGljIHNzaXplX3QgUkdfVVNCMjBfRElTQ1RIX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgeGhjaV9oY2RfbXRrICptdGsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gbXRrLT5oY2Q7CisJc3RydWN0IHhoY2lfaGNkICp4aGNpID0gaGNkX3RvX3hoY2koaGNkKTsKKwlzc2l6ZV90IGNudCA9IDA7CisJdm9pZCBfX2lvbWVtICphZGRyOworCXUzMiB2YWw7CisJdTMyIGk7CisJaW50IHBvcnRzOworCWNoYXIgc3RyWzMyXTsKKwlpbnQgaW5kZXggPSAwOworCXUzMiBpbywgbGVuZ3RoOworCWludCByZXQ7CisKKwlwb3J0cyA9IG10ay0+bnVtX3UzX3BvcnRzICsgbXRrLT5udW1fdTJfcG9ydHM7CisJY250ICs9IHNwcmludGYoYnVmICsgY250LCAiIFJHX1VTQjIwX0RJU0NUSCB1c2FnZTpcbiIpOworCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwKKwkJIiAgIGVjaG8gdTJwIGluZGV4IDRiMDAxMSA+IFJHX1VTQjIwX0RJU0NUSFxuIik7CisJaWYgKG10ay0+bnVtX3UzX3BvcnRzICsgMSAhPSBwb3J0cykKKwkJY250ICs9IHNwcmludGYoYnVmICsgY250LCAiCXBhcmFtZXRlcjogdTJwOiAlaSB+ICVpXG4iLAorCQkJCQltdGstPm51bV91M19wb3J0cyArIDEsIHBvcnRzKTsKKwllbHNlCisJCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwgIglwYXJhbWV0ZXI6IHUycDogJWlcbiIsCisJCQkJCW10ay0+bnVtX3UzX3BvcnRzICsgMSk7CisKKwlpZiAobXRrLT5udW1fdTJfcG9ydHMgPiAxKQorCQljbnQgKz0gc3ByaW50ZihidWYgKyBjbnQsICIJcGFyYW1ldGVyOiBpbmRleDogMCB+ICVpXG4iLAorCQkJICAgICAgIG10ay0+bnVtX3UyX3BvcnRzKTsKKwllbHNlCisJCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwgIglwYXJhbWV0ZXI6IGluZGV4OiAwXG4iKTsKKworCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwKKwkJCSAiIGUuZy46IGVjaG8gMiAwIDRiMTAxMCA+IFJHX1VTQjIwX0RJU0NUSFxuIik7CisJY250ICs9IHNwcmludGYoYnVmICsgY250LAorCQkiICBwb3J0MiBiaW5kaW5nIHBoeSAwLCB0dW5lIDRiJzEwMTAgYXMgRElTQ1RIIHZhbHVlXG4iKTsKKworCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwKKwkJCSJcbj09PT09PT09PWN1cnJlbnQgSFFBIHNldHRpbmcgY2hlY2s9PT09PT09PT1cbiIpOworCWZvciAoaSA9IDE7IGkgPD0gcG9ydHM7IGkrKykgeworCQlhZGRyID0gJnhoY2ktPm9wX3JlZ3MtPnBvcnRfc3RhdHVzX2Jhc2UgKworCQkJTlVNX1BPUlRfUkVHUyAqICgoaSAtIDEpICYgMHhmZik7CisJCXZhbCA9IHJlYWRsKGFkZHIpOworCQlpZiAoaSA8PSBtdGstPm51bV91M19wb3J0cykgeworCQkJY250ICs9IHNwcmludGYoYnVmICsgY250LAorCQkJCSAgICAgICAiVVNCMzAgUG9ydCVpOiAweCUwOFhcbiIsIGksIHZhbCk7CisJCX0gZWxzZSB7CisJCQljbnQgKz0gc3ByaW50ZihidWYgKyBjbnQsCisJCQkJICAgICAgICJVU0IyMCBQb3J0JWk6IDB4JTA4WFxuIiwgaSwgdmFsKTsKKworCQkJcmV0ID0gcXVlcnlfcGh5X2FkZHIoZGV2LT5vZl9ub2RlLAorCQkJCQkJICZpbmRleCwgJmlvLCAmbGVuZ3RoKTsKKwkJCWlmIChyZXQgJiYgcmV0ICE9IC1FQUNDRVMpIHsKKwkJCQlpZiAocmV0ID09IC1FUEVSTSkKKwkJCQkJY250ICs9IHNwcmludGYoYnVmICsgY250LAorCQkJCQkiVVNCMjAgUG9ydCVpIChQaHklaTogYWJzZW50KVxuIiwKKwkJCQkJaSwgaW5kZXgpOworCQkJCWVsc2UKKwkJCQkJY250ICs9IHNwcmludGYoYnVmICsgY250LAorCQkJCQkiVVNCMjAgUG9ydCVpIChQaHklaSkgZmFpbHVyZSAlaVxuIiwKKwkJCQkJCSBpLCBpbmRleCwgcmV0KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJY250ICs9IHNwcmludGYoYnVmICsgY250LAorCQkJCSJVU0IyMCBQb3J0JWkgKFBoeSVpOiVzYWJsZSk6IDB4JTA4WCAweCUwOFhcbiIsCisJCQkJaSwgaW5kZXgsIHJldCA/ICIgZGlzIiA6ICIgZW4iLCBpbywgbGVuZ3RoKTsKKworCQkJYWRkciAgID0gaW9yZW1hcF9ub2NhY2hlKGlvLCBsZW5ndGgpOworCQkJYWRkciAgKz0gKGxlbmd0aCAhPSAweDEwMCkgPyAweDMwMCA6IDA7CisKKwkJCUhRQV9JTkZPUk1BQ1RJT05fQ09MTEVDVFMoKTsKKworCQkJaW91bm1hcChhZGRyKTsKKwkJCWluZGV4ICsrOworCQl9CisJfQorCisJaWYgKG10ay0+aHFhX3BvcykgeworCQljbnQgKz0gc3ByaW50ZihidWYgKyBjbnQsICIlcyIsIG10ay0+aHFhX2J1Zik7CisJCW10ay0+aHFhX3BvcyA9IDA7CisJfQorCisJcmV0dXJuIGNudDsKK30KKworc3RhdGljIHNzaXplX3QgUkdfVVNCMjBfRElTQ1RIX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbikKK3sKKwl1MzIgdmFsOworCXUzMiBpbzsKKwl1MzIgbGVuZ3RoOworCWludCBwb3J0czsKKwlpbnQgd29yZHM7CisJaW50IHBvcnQ7CisJaW50IGluZGV4OworCWludCByZXQ7CisJY2hhciAqc3RyID0gTlVMTDsKKwl2b2lkIF9faW9tZW0gKmFkZHI7CisJc3RydWN0IHhoY2lfaGNkX210ayAqbXRrICA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAgKm5vZGUgPSBkZXYtPm9mX25vZGU7CisKKwlwb3J0cyA9IG10ay0+bnVtX3UzX3BvcnRzICsgbXRrLT5udW1fdTJfcG9ydHM7CisJbXRrLT5ocWFfcG9zID0gMDsKKworCW1lbXNldChtdGstPmhxYV9idWYsIDAsIG10ay0+aHFhX3NpemUpOworCisJc3RyID0ga3phbGxvYyhuLCBHRlBfQVRPTUlDKTsKKworCWhxYV9pbmZvKG10aywgIlJHX1VTQjIwX0RJU0NUSCglbHUpOiAlc1xuIiwgbiwgYnVmKTsKKworCXdvcmRzID0gc3NjYW5mKGJ1ZiwgIiVpICVpIDRiJTRbMCwxXSIsICZwb3J0LCAmaW5kZXgsIHN0cik7CisJaWYgKCh3b3JkcyAhPSAzKSB8fAorCSAgICAocG9ydCA8IG10ay0+bnVtX3UzX3BvcnRzIHx8IHBvcnQgPiBwb3J0cykpIHsKKwkJaHFhX2luZm8obXRrLCAiQ2hlY2sgcGFyYW1zKCVpKTpcIiAlaSAlaSAlc1wiLCBQbGVhc2UhXG4iLAorCQkJd29yZHMsIHBvcnQsIGluZGV4LCBzdHIpOworCisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyb3I7CisJfQorCisJaHFhX2luZm8obXRrLCAiIHBhcmFtczogJWkgJWkgJXNcbiIsCisJCXBvcnQsIGluZGV4LCBzdHIpOworCisJcmV0ID0gcXVlcnlfcGh5X2FkZHIobm9kZSwgJmluZGV4LCAmaW8sICZsZW5ndGgpOworCWlmIChyZXQgJiYgcmV0ICE9IC1FQUNDRVMpCisJCWdvdG8gZXJyb3I7CisKKwlpbyArPSAobGVuZ3RoICE9IDB4MTAwKSA/IDB4MzAwIDogMDsKKwlpbyArPSBVU0IyMF9QSFlfVVNCUEhZQUNSNjsKKworCWFkZHIgPSBpb3JlbWFwX25vY2FjaGUoaW8sIDQpOworCXZhbCA9IGJpbmFyeV93cml0ZV93aWR0aDQoYWRkciwgU0hGVF9SR19VU0IyMF9ESVNDVEgsIHN0cik7CisJaHFhX2luZm8obXRrLCAiUG9ydCVpKFBoeSVpKVsweCUwOFhdOiAweCUwOFggYnV0IDB4JTA4WFxuIiwKKwkJcG9ydCwgaW5kZXgsIGlvLCB2YWwsIHJlYWRsKGFkZHIpKTsKKworCWlvdW5tYXAoYWRkcik7CisJcmV0ID0gbjsKKworZXJyb3I6CisJa2ZyZWUoc3RyKTsKKwlyZXR1cm4gcmV0OworfQorREVWSUNFX0FUVFJfUlcoUkdfVVNCMjBfRElTQ1RIKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy91c2IvaG9zdC94aGNpLW10ay1oc3R4LXNyY3RybC5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbXRrLWhzdHgtc3JjdHJsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc3OTFjZgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy91c2IvaG9zdC94aGNpLW10ay1oc3R4LXNyY3RybC5jCkBAIC0wLDAgKzEsMTYzIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIHhIQ0kgaG9zdCBjb250cm9sbGVyIHRvb2xraXQgZHJpdmVyIGZvciBoc3R4LXNyY3RybAorICoKKyAqIENvcHlyaWdodCAoQykgMjAyMSAgTWVkaWFUZWsgSW5jLgorICoKKyAqICBBdXRob3I6IFpoYW55b25nIFdhbmcgPHpoYW55b25nLndhbmdAbWVkaWF0ZWsuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSAieGhjaS1tdGsuaCIKKyNpbmNsdWRlICJ4aGNpLW10ay10ZXN0LmgiCisjaW5jbHVkZSAieGhjaS1tdGstdW51c3VhbC5oIgorCitzdGF0aWMgc3NpemVfdCBSR19VU0IyMF9IU1RYX1NSQ1RSTF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHhoY2lfaGNkX210ayAqbXRrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IG10ay0+aGNkOworCXN0cnVjdCB4aGNpX2hjZCAqeGhjaSA9IGhjZF90b194aGNpKGhjZCk7CisJc3NpemVfdCBjbnQgPSAwOworCXZvaWQgX19pb21lbSAqYWRkcjsKKwl1MzIgdmFsOworCXUzMiBpOworCWludCBwb3J0czsKKwljaGFyIHN0clszMl07CisJaW50IGluZGV4ID0gMDsKKwl1MzIgaW8sIGxlbmd0aDsKKwlpbnQgcmV0OworCisJcG9ydHMgPSBtdGstPm51bV91M19wb3J0cyArIG10ay0+bnVtX3UyX3BvcnRzOworCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwgIiBSR19VU0IyMF9IU1RYX1NSQ1RSTCB1c2FnZTpcbiIpOworCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwKKwkiICAgZWNobyB1MnAgaW5kZXggM2IwMTEgPiBSR19VU0IyMF9IU1RYX1NSQ1RSTFxuIik7CisJaWYgKG10ay0+bnVtX3UzX3BvcnRzICsgMSAhPSBwb3J0cykKKwkJY250ICs9IHNwcmludGYoYnVmICsgY250LCAiCXBhcmFtZXRlcjogdTJwOiAlaSB+ICVpXG4iLAorCQkJCQltdGstPm51bV91M19wb3J0cyArIDEsIHBvcnRzKTsKKwllbHNlCisJCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwgIglwYXJhbWV0ZXI6IHUycDogJWlcbiIsCisJCQkJCW10ay0+bnVtX3UzX3BvcnRzICsgMSk7CisKKwlpZiAobXRrLT5udW1fdTJfcG9ydHMgPiAxKQorCQljbnQgKz0gc3ByaW50ZihidWYgKyBjbnQsICIJcGFyYW1ldGVyOiBpbmRleDogMCB+ICVpXG4iLAorCQkJICAgICAgIG10ay0+bnVtX3UyX3BvcnRzKTsKKwllbHNlCisJCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwgIglwYXJhbWV0ZXI6IGluZGV4OiAwXG4iKTsKKworCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwKKwkJCSAiIGUuZy46IGVjaG8gMiAwIDNiMDEwID4gUkdfVVNCMjBfSFNUWF9TUkNUUkxcbiIpOworCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwKKwkiICBwb3J0MiBiaW5kaW5nIHBoeSAwLCB0dW5lIDNiJzAxMCBhcyBIU1RYX1NSQ1RSTCB2YWx1ZVxuIik7CisKKwljbnQgKz0gc3ByaW50ZihidWYgKyBjbnQsCisJCQkiXG49PT09PT09PT1jdXJyZW50IEhRQSBzZXR0aW5nIGNoZWNrPT09PT09PT09XG4iKTsKKwlmb3IgKGkgPSAxOyBpIDw9IHBvcnRzOyBpKyspIHsKKwkJYWRkciA9ICZ4aGNpLT5vcF9yZWdzLT5wb3J0X3N0YXR1c19iYXNlICsKKwkJCU5VTV9QT1JUX1JFR1MgKiAoKGkgLSAxKSAmIDB4ZmYpOworCQl2YWwgPSByZWFkbChhZGRyKTsKKwkJaWYgKGkgPD0gbXRrLT5udW1fdTNfcG9ydHMpIHsKKwkJCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwKKwkJCQkgICAgICAgIlVTQjMwIFBvcnQlaTogMHglMDhYXG4iLCBpLCB2YWwpOworCQl9IGVsc2UgeworCQkJY250ICs9IHNwcmludGYoYnVmICsgY250LAorCQkJCSAgICAgICAiVVNCMjAgUG9ydCVpOiAweCUwOFhcbiIsIGksIHZhbCk7CisKKwkJCXJldCA9IHF1ZXJ5X3BoeV9hZGRyKGRldi0+b2Zfbm9kZSwKKwkJCQkJCSAmaW5kZXgsICZpbywgJmxlbmd0aCk7CisJCQlpZiAocmV0ICYmIHJldCAhPSAtRUFDQ0VTKSB7CisJCQkJaWYgKHJldCA9PSAtRVBFUk0pCisJCQkJCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwKKwkJCQkJIlVTQjIwIFBvcnQlaSAoUGh5JWk6IGFic2VudClcbiIsCisJCQkJCWksIGluZGV4KTsKKwkJCQllbHNlCisJCQkJCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwKKwkJCQkJIlVTQjIwIFBvcnQlaSAoUGh5JWkpIGZhaWx1cmUgJWlcbiIsCisJCQkJCQkgaSwgaW5kZXgsIHJldCk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwKKwkJCQkiVVNCMjAgUG9ydCVpIChQaHklaTolc2FibGUpOiAweCUwOFggMHglMDhYXG4iLAorCQkJCWksIGluZGV4LCByZXQgPyAiIGRpcyIgOiAiIGVuIiwgaW8sIGxlbmd0aCk7CisKKwkJCWFkZHIgICA9IGlvcmVtYXBfbm9jYWNoZShpbywgbGVuZ3RoKTsKKwkJCWFkZHIgICs9IChsZW5ndGggIT0gMHgxMDApID8gMHgzMDAgOiAwOworCisJCQlIUUFfSU5GT1JNQUNUSU9OX0NPTExFQ1RTKCk7CisKKwkJCWlvdW5tYXAoYWRkcik7CisJCQlpbmRleCArKzsKKwkJfQorCX0KKworCWlmIChtdGstPmhxYV9wb3MpIHsKKwkJY250ICs9IHNwcmludGYoYnVmICsgY250LCAiJXMiLCBtdGstPmhxYV9idWYpOworCQltdGstPmhxYV9wb3MgPSAwOworCX0KKworCXJldHVybiBjbnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IFJHX1VTQjIwX0hTVFhfU1JDVFJMX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbikKK3sKKwl1MzIgdmFsOworCXUzMiBpbzsKKwl1MzIgbGVuZ3RoOworCWludCBwb3J0czsKKwlpbnQgd29yZHM7CisJaW50IHBvcnQ7CisJaW50IGluZGV4OworCWludCByZXQ7CisJY2hhciAqc3RyID0gTlVMTDsKKwl2b2lkIF9faW9tZW0gKmFkZHI7CisJc3RydWN0IHhoY2lfaGNkX210ayAqbXRrICA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAgKm5vZGUgPSBkZXYtPm9mX25vZGU7CisKKwlwb3J0cyA9IG10ay0+bnVtX3UzX3BvcnRzICsgbXRrLT5udW1fdTJfcG9ydHM7CisJbXRrLT5ocWFfcG9zID0gMDsKKworCW1lbXNldChtdGstPmhxYV9idWYsIDAsIG10ay0+aHFhX3NpemUpOworCisJc3RyID0ga3phbGxvYyhuLCBHRlBfQVRPTUlDKTsKKworCWhxYV9pbmZvKG10aywgIlJHX1VTQjIwX0hTVFhfU1JDVFJMKCVsdSk6ICVzXG4iLCBuLCBidWYpOworCisJd29yZHMgPSBzc2NhbmYoYnVmLCAiJWkgJWkgM2IlM1swLDFdIiwgJnBvcnQsICZpbmRleCwgc3RyKTsKKwlpZiAoKHdvcmRzICE9IDMpIHx8CisJICAgIChwb3J0IDwgbXRrLT5udW1fdTNfcG9ydHMgfHwgcG9ydCA+IHBvcnRzKSkgeworCQlocWFfaW5mbyhtdGssICJDaGVjayBwYXJhbXMoJWkpOlwiICVpICVpICVzXCIsIFBsZWFzZSFcbiIsCisJCQl3b3JkcywgcG9ydCwgaW5kZXgsIHN0cik7CisKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlocWFfaW5mbyhtdGssICIgcGFyYW1zOiAlaSAlaSAlc1xuIiwKKwkJcG9ydCwgaW5kZXgsIHN0cik7CisKKwlyZXQgPSBxdWVyeV9waHlfYWRkcihub2RlLCAmaW5kZXgsICZpbywgJmxlbmd0aCk7CisJaWYgKHJldCAmJiByZXQgIT0gLUVBQ0NFUykKKwkJZ290byBlcnJvcjsKKworCWlvICs9IChsZW5ndGggIT0gMHgxMDApID8gMHgzMDAgOiAwOworCWlvICs9IFVTQjIwX1BIWV9VU0JQSFlBQ1I1OworCisJYWRkciA9IGlvcmVtYXBfbm9jYWNoZShpbywgNCk7CisJdmFsID0gYmluYXJ5X3dyaXRlX3dpZHRoMyhhZGRyLCBTSEZUX1JHX1VTQjIwX0hTVFhfU1JDVFJMLCBzdHIpOworCWhxYV9pbmZvKG10aywgIlBvcnQlaShQaHklaSlbMHglMDhYXTogMHglMDhYIGJ1dCAweCUwOFhcbiIsCisJCXBvcnQsIGluZGV4LCBpbywgdmFsLCByZWFkbChhZGRyKSk7CisKKwlpb3VubWFwKGFkZHIpOworCXJldCA9IG47CisKK2Vycm9yOgorCWtmcmVlKHN0cik7CisJcmV0dXJuIHJldDsKK30KK0RFVklDRV9BVFRSX1JXKFJHX1VTQjIwX0hTVFhfU1JDVFJMKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy91c2IvaG9zdC94aGNpLW10ay1pbnRyLWVuLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tdGstaW50ci1lbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZGFmOGIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tdGstaW50ci1lbi5jCkBAIC0wLDAgKzEsMTYyIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIHhIQ0kgaG9zdCBjb250cm9sbGVyIHRvb2xraXQgZHJpdmVyIGZvciBpbnRyLWVuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDIxICBNZWRpYVRlayBJbmMuCisgKgorICogIEF1dGhvcjogWmhhbnlvbmcgV2FuZyA8emhhbnlvbmcud2FuZ0BtZWRpYXRlay5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlICJ4aGNpLW10ay5oIgorI2luY2x1ZGUgInhoY2ktbXRrLXRlc3QuaCIKKyNpbmNsdWRlICJ4aGNpLW10ay11bnVzdWFsLmgiCisKK3N0YXRpYyBzc2l6ZV90IFJHX1VTQjIwX0lOVFJfRU5fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB4aGNpX2hjZF9tdGsgKm10ayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBtdGstPmhjZDsKKwlzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kgPSBoY2RfdG9feGhjaShoY2QpOworCXNzaXplX3QgY250ID0gMDsKKwl2b2lkIF9faW9tZW0gKmFkZHI7CisJdTMyIHZhbDsKKwl1MzIgaTsKKwlpbnQgcG9ydHM7CisJY2hhciBzdHJbMzJdOworCWludCBpbmRleCA9IDA7CisJdTMyIGlvLCBsZW5ndGg7CisJaW50IHJldDsKKworCXBvcnRzID0gbXRrLT5udW1fdTNfcG9ydHMgKyBtdGstPm51bV91Ml9wb3J0czsKKwljbnQgKz0gc3ByaW50ZihidWYgKyBjbnQsICIgUkdfVVNCMjBfSU5UUl9FTiB1c2FnZTpcbiIpOworCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwKKyAgICAgICAgICAgICAgICAiICAgZWNobyB1MnAgaW5kZXggMWIwID4gUkdfVVNCMjBfSU5UUl9FTlxuIik7CisJaWYgKG10ay0+bnVtX3UzX3BvcnRzICsgMSAhPSBwb3J0cykKKwkJY250ICs9IHNwcmludGYoYnVmICsgY250LCAiCXBhcmFtZXRlcjogdTJwOiAlaSB+ICVpXG4iLAorCQkJCQltdGstPm51bV91M19wb3J0cyArIDEsIHBvcnRzKTsKKwllbHNlCisJCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwgIglwYXJhbWV0ZXI6IHUycDogJWlcbiIsCisJCQkJCW10ay0+bnVtX3UzX3BvcnRzICsgMSk7CisKKwlpZiAobXRrLT5udW1fdTJfcG9ydHMgPiAxKQorCQljbnQgKz0gc3ByaW50ZihidWYgKyBjbnQsICIJcGFyYW1ldGVyOiBpbmRleDogMCB+ICVpXG4iLAorCQkJICAgICAgIG10ay0+bnVtX3UyX3BvcnRzKTsKKwllbHNlCisJCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwgIglwYXJhbWV0ZXI6IGluZGV4OiAwXG4iKTsKKworCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwgIiBlLmcuOiBlY2hvIDIgMCAxYjEgPiBSR19VU0IyMF9JTlRSX0VOXG4iKTsKKwljbnQgKz0gc3ByaW50ZihidWYgKyBjbnQsCisJCSIgIHBvcnQyIGJpbmRpbmcgcGh5IDAsIGVuYWJsZSAxYicxIGFzIElOVFJfRU5cbiIpOworCisJY250ICs9IHNwcmludGYoYnVmICsgY250LAorCQkJIlxuPT09PT09PT09Y3VycmVudCBIUUEgc2V0dGluZyBjaGVjaz09PT09PT09PVxuIik7CisJZm9yIChpID0gMTsgaSA8PSBwb3J0czsgaSsrKSB7CisJCWFkZHIgPSAmeGhjaS0+b3BfcmVncy0+cG9ydF9zdGF0dXNfYmFzZSArCisJCQlOVU1fUE9SVF9SRUdTICogKChpIC0gMSkgJiAweGZmKTsKKwkJdmFsID0gcmVhZGwoYWRkcik7CisJCWlmIChpIDw9IG10ay0+bnVtX3UzX3BvcnRzKSB7CisJCQljbnQgKz0gc3ByaW50ZihidWYgKyBjbnQsCisJCQkJICAgICAgICJVU0IzMCBQb3J0JWk6IDB4JTA4WFxuIiwgaSwgdmFsKTsKKwkJfSBlbHNlIHsKKwkJCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwKKwkJCQkgICAgICAgIlVTQjIwIFBvcnQlaTogMHglMDhYXG4iLCBpLCB2YWwpOworCisJCQlyZXQgPSBxdWVyeV9waHlfYWRkcihkZXYtPm9mX25vZGUsCisJCQkJCQkgJmluZGV4LCAmaW8sICZsZW5ndGgpOworCQkJaWYgKHJldCAmJiByZXQgIT0gLUVBQ0NFUykgeworCQkJCWlmIChyZXQgPT0gLUVQRVJNKQorCQkJCQljbnQgKz0gc3ByaW50ZihidWYgKyBjbnQsCisJCQkJCSJVU0IyMCBQb3J0JWkgKFBoeSVpOiBhYnNlbnQpXG4iLAorCQkJCQlpLCBpbmRleCk7CisJCQkJZWxzZQorCQkJCQljbnQgKz0gc3ByaW50ZihidWYgKyBjbnQsCisJCQkJCSJVU0IyMCBQb3J0JWkgKFBoeSVpKSBmYWlsdXJlICVpXG4iLAorCQkJCQkJIGksIGluZGV4LCByZXQpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQljbnQgKz0gc3ByaW50ZihidWYgKyBjbnQsCisJCQkJIlVTQjIwIFBvcnQlaSAoUGh5JWk6JXNhYmxlKTogMHglMDhYIDB4JTA4WFxuIiwKKwkJCQlpLCBpbmRleCwgcmV0ID8gIiBkaXMiIDogIiBlbiIsIGlvLCBsZW5ndGgpOworCisJCQlhZGRyICAgPSBpb3JlbWFwX25vY2FjaGUoaW8sIGxlbmd0aCk7CisJCQlhZGRyICArPSAobGVuZ3RoICE9IDB4MTAwKSA/IDB4MzAwIDogMDsKKworCQkJSFFBX0lORk9STUFDVElPTl9DT0xMRUNUUygpOworCisJCQlpb3VubWFwKGFkZHIpOworCQkJaW5kZXggKys7CisJCX0KKwl9CisKKwlpZiAobXRrLT5ocWFfcG9zKSB7CisJCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwgIiVzIiwgbXRrLT5ocWFfYnVmKTsKKwkJbXRrLT5ocWFfcG9zID0gMDsKKwl9CisKKwlyZXR1cm4gY250OworfQorCitzdGF0aWMgc3NpemVfdCBSR19VU0IyMF9JTlRSX0VOX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbikKK3sKKwl1MzIgdmFsOworCXUzMiBpbzsKKwl1MzIgbGVuZ3RoOworCWludCBwb3J0czsKKwlpbnQgd29yZHM7CisJaW50IHBvcnQ7CisJaW50IGluZGV4OworCWludCByZXQ7CisJY2hhciAqc3RyID0gTlVMTDsKKwl2b2lkIF9faW9tZW0gKmFkZHI7CisJc3RydWN0IHhoY2lfaGNkX210ayAqbXRrICA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAgKm5vZGUgPSBkZXYtPm9mX25vZGU7CisKKwlwb3J0cyA9IG10ay0+bnVtX3UzX3BvcnRzICsgbXRrLT5udW1fdTJfcG9ydHM7CisJbXRrLT5ocWFfcG9zID0gMDsKKworCW1lbXNldChtdGstPmhxYV9idWYsIDAsIG10ay0+aHFhX3NpemUpOworCisJc3RyID0ga3phbGxvYyhuLCBHRlBfQVRPTUlDKTsKKworCWhxYV9pbmZvKG10aywgIlJHX1VTQjIwX0lOVFJfRU4oJWx1KTogJXNcbiIsIG4sIGJ1Zik7CisKKwl3b3JkcyA9IHNzY2FuZihidWYsICIlaSAlaSAxYiUxWzAsMV0iLCAmcG9ydCwgJmluZGV4LCBzdHIpOworCWlmICgod29yZHMgIT0gMykgfHwKKwkgICAgKHBvcnQgPCBtdGstPm51bV91M19wb3J0cyB8fCBwb3J0ID4gcG9ydHMpKSB7CisJCWhxYV9pbmZvKG10aywgIkNoZWNrIHBhcmFtcyglaSk6XCIgJWkgJWkgJXNcIiwgUGxlYXNlIVxuIiwKKwkJCXdvcmRzLCBwb3J0LCBpbmRleCwgc3RyKTsKKworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycm9yOworCX0KKworCWhxYV9pbmZvKG10aywgIiBwYXJhbXM6ICVpICVpICVzXG4iLAorCQlwb3J0LCBpbmRleCwgc3RyKTsKKworCXJldCA9IHF1ZXJ5X3BoeV9hZGRyKG5vZGUsICZpbmRleCwgJmlvLCAmbGVuZ3RoKTsKKwlpZiAocmV0ICYmIHJldCAhPSAtRUFDQ0VTKQorCQlnb3RvIGVycm9yOworCisJaW8gKz0gKGxlbmd0aCAhPSAweDEwMCkgPyAweDMwMCA6IDA7CisJaW8gKz0gVVNCMjBfUEhZX1VTQlBIWUFDUjA7CisKKwlhZGRyID0gaW9yZW1hcF9ub2NhY2hlKGlvLCA0KTsKKwl2YWwgPSBiaW5hcnlfd3JpdGVfd2lkdGgxKGFkZHIsIFNIRlRfUkdfVVNCMjBfSU5UUl9FTiwgc3RyKTsKKwlocWFfaW5mbyhtdGssICJQb3J0JWkoUGh5JWkpWzB4JTA4WF06IDB4JTA4WCBidXQgMHglMDhYXG4iLAorCQlwb3J0LCBpbmRleCwgaW8sIHZhbCwgcmVhZGwoYWRkcikpOworCisJaW91bm1hcChhZGRyKTsKKwlyZXQgPSBuOworCitlcnJvcjoKKwlrZnJlZShzdHIpOworCXJldHVybiByZXQ7Cit9CitERVZJQ0VfQVRUUl9SVyhSR19VU0IyMF9JTlRSX0VOKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy91c2IvaG9zdC94aGNpLW10ay10ZXJtLXZyZWYuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy91c2IvaG9zdC94aGNpLW10ay10ZXJtLXZyZWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjQwZWY5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbXRrLXRlcm0tdnJlZi5jCkBAIC0wLDAgKzEsMTY2IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIHhIQ0kgaG9zdCBjb250cm9sbGVyIHRvb2xraXQgZHJpdmVyIGZvciB0ZXJtIHZyZWYKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgIE1lZGlhVGVrIEluYy4KKyAqCisgKiAgQXV0aG9yOiBaaGFueW9uZyBXYW5nIDx6aGFueW9uZy53YW5nQG1lZGlhdGVrLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgInhoY2ktbXRrLmgiCisjaW5jbHVkZSAieGhjaS1tdGstdGVzdC5oIgorI2luY2x1ZGUgInhoY2ktbXRrLXVudXN1YWwuaCIKKworc3RhdGljCitzc2l6ZV90IFJHX1VTQjIwX1RFUk1fVlJFRl9TRUxfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB4aGNpX2hjZF9tdGsgKm10ayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBtdGstPmhjZDsKKwlzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kgPSBoY2RfdG9feGhjaShoY2QpOworCXNzaXplX3QgY250ID0gMDsKKwl2b2lkIF9faW9tZW0gKmFkZHI7CisJdTMyIHZhbDsKKwl1MzIgaTsKKwlpbnQgcG9ydHM7CisJY2hhciBzdHJbMzJdOworCWludCBpbmRleCA9IDA7CisJdTMyIGlvLCBsZW5ndGg7CisJaW50IHJldDsKKworCXBvcnRzID0gbXRrLT5udW1fdTNfcG9ydHMgKyBtdGstPm51bV91Ml9wb3J0czsKKwljbnQgKz0gc3ByaW50ZihidWYgKyBjbnQsICIgUkdfVVNCMjBfVEVSTV9WUkVGX1NFTCB1c2FnZTpcbiIpOworCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwKKwkJIiAgIGVjaG8gdTJwIGluZGV4IDNiMDExID4gUkdfVVNCMjBfVEVSTV9WUkVGX1NFTFxuIik7CisJaWYgKG10ay0+bnVtX3UzX3BvcnRzICsgMSAhPSBwb3J0cykKKwkJY250ICs9IHNwcmludGYoYnVmICsgY250LCAiCXBhcmFtZXRlcjogdTJwOiAlaSB+ICVpXG4iLAorCQkJCQltdGstPm51bV91M19wb3J0cyArIDEsIHBvcnRzKTsKKwllbHNlCisJCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwgIglwYXJhbWV0ZXI6IHUycDogJWlcbiIsCisJCQkJCW10ay0+bnVtX3UzX3BvcnRzICsgMSk7CisKKwlpZiAobXRrLT5udW1fdTJfcG9ydHMgPiAxKQorCQljbnQgKz0gc3ByaW50ZihidWYgKyBjbnQsICIJcGFyYW1ldGVyOiBpbmRleDogMCB+ICVpXG4iLAorCQkJICAgICAgIG10ay0+bnVtX3UyX3BvcnRzKTsKKwllbHNlCisJCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwgIglwYXJhbWV0ZXI6IGluZGV4OiAwXG4iKTsKKworCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwKKwkJCSAiIGUuZy46IGVjaG8gMiAwIDNiMDEwID4gUkdfVVNCMjBfVEVSTV9WUkVGX1NFTFxuIik7CisJY250ICs9IHNwcmludGYoYnVmICsgY250LAorCQkiICBwb3J0MiBiaW5kaW5nIHBoeSAwLCB0dW5lIDNiJzAxMCBhcyBURVJNX1ZSRUYgdmFsdWVcbiIpOworCisJY250ICs9IHNwcmludGYoYnVmICsgY250LAorCQkJIlxuPT09PT09PT09Y3VycmVudCBIUUEgc2V0dGluZyBjaGVjaz09PT09PT09PVxuIik7CisJZm9yIChpID0gMTsgaSA8PSBwb3J0czsgaSsrKSB7CisJCWFkZHIgPSAmeGhjaS0+b3BfcmVncy0+cG9ydF9zdGF0dXNfYmFzZSArCisJCQlOVU1fUE9SVF9SRUdTICogKChpIC0gMSkgJiAweGZmKTsKKwkJdmFsID0gcmVhZGwoYWRkcik7CisJCWlmIChpIDw9IG10ay0+bnVtX3UzX3BvcnRzKSB7CisJCQljbnQgKz0gc3ByaW50ZihidWYgKyBjbnQsCisJCQkJICAgICAgICJVU0IzMCBQb3J0JWk6IDB4JTA4WFxuIiwgaSwgdmFsKTsKKwkJfSBlbHNlIHsKKwkJCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwKKwkJCQkgICAgICAgIlVTQjIwIFBvcnQlaTogMHglMDhYXG4iLCBpLCB2YWwpOworCisJCQlyZXQgPSBxdWVyeV9waHlfYWRkcihkZXYtPm9mX25vZGUsCisJCQkJCQkgJmluZGV4LCAmaW8sICZsZW5ndGgpOworCQkJaWYgKHJldCAmJiByZXQgIT0gLUVBQ0NFUykgeworCQkJCWlmIChyZXQgPT0gLUVQRVJNKQorCQkJCQljbnQgKz0gc3ByaW50ZihidWYgKyBjbnQsCisJCQkJCSJVU0IyMCBQb3J0JWkgKFBoeSVpOiBhYnNlbnQpXG4iLAorCQkJCQlpLCBpbmRleCk7CisJCQkJZWxzZQorCQkJCQljbnQgKz0gc3ByaW50ZihidWYgKyBjbnQsCisJCQkJCSJVU0IyMCBQb3J0JWkgKFBoeSVpKSBmYWlsdXJlICVpXG4iLAorCQkJCQkJIGksIGluZGV4LCByZXQpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQljbnQgKz0gc3ByaW50ZihidWYgKyBjbnQsCisJCQkJIlVTQjIwIFBvcnQlaSAoUGh5JWk6JXNhYmxlKTogMHglMDhYIDB4JTA4WFxuIiwKKwkJCQlpLCBpbmRleCwgcmV0ID8gIiBkaXMiIDogIiBlbiIsIGlvLCBsZW5ndGgpOworCisJCQlhZGRyICAgPSBpb3JlbWFwX25vY2FjaGUoaW8sIGxlbmd0aCk7CisJCQlhZGRyICArPSAobGVuZ3RoICE9IDB4MTAwKSA/IDB4MzAwIDogMDsKKworCQkJSFFBX0lORk9STUFDVElPTl9DT0xMRUNUUygpOworCisJCQlpb3VubWFwKGFkZHIpOworCQkJaW5kZXggKys7CisJCX0KKwl9CisKKwlpZiAobXRrLT5ocWFfcG9zKSB7CisJCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwgIiVzIiwgbXRrLT5ocWFfYnVmKTsKKwkJbXRrLT5ocWFfcG9zID0gMDsKKwl9CisKKwlyZXR1cm4gY250OworfQorCitzdGF0aWMKK3NzaXplX3QgUkdfVVNCMjBfVEVSTV9WUkVGX1NFTF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pCit7CisJdTMyIHZhbDsKKwl1MzIgaW87CisJdTMyIGxlbmd0aDsKKwlpbnQgcG9ydHM7CisJaW50IHdvcmRzOworCWludCBwb3J0OworCWludCBpbmRleDsKKwlpbnQgcmV0OworCWNoYXIgKnN0ciA9IE5VTEw7CisJdm9pZCBfX2lvbWVtICphZGRyOworCXN0cnVjdCB4aGNpX2hjZF9tdGsgKm10ayAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgICpub2RlID0gZGV2LT5vZl9ub2RlOworCisJcG9ydHMgPSBtdGstPm51bV91M19wb3J0cyArIG10ay0+bnVtX3UyX3BvcnRzOworCW10ay0+aHFhX3BvcyA9IDA7CisKKwltZW1zZXQobXRrLT5ocWFfYnVmLCAwLCBtdGstPmhxYV9zaXplKTsKKworCXN0ciA9IGt6YWxsb2MobiwgR0ZQX0FUT01JQyk7CisKKwlocWFfaW5mbyhtdGssICJSR19VU0IyMF9URVJNX1ZSRUZfU0VMKCVsdSk6ICVzXG4iLCBuLCBidWYpOworCisJd29yZHMgPSBzc2NhbmYoYnVmLCAiJWkgJWkgM2IlM1swLDFdIiwgJnBvcnQsICZpbmRleCwgc3RyKTsKKwlpZiAoKHdvcmRzICE9IDMpIHx8CisJICAgIChwb3J0IDwgbXRrLT5udW1fdTNfcG9ydHMgfHwgcG9ydCA+IHBvcnRzKSkgeworCQlocWFfaW5mbyhtdGssICJDaGVjayBwYXJhbXMoJWkpOlwiICVpICVpICVzXCIsIFBsZWFzZSFcbiIsCisJCQl3b3JkcywgcG9ydCwgaW5kZXgsIHN0cik7CisKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlocWFfaW5mbyhtdGssICIgcGFyYW1zOiAlaSAlaSAlc1xuIiwKKwkJcG9ydCwgaW5kZXgsIHN0cik7CisKKwlyZXQgPSBxdWVyeV9waHlfYWRkcihub2RlLCAmaW5kZXgsICZpbywgJmxlbmd0aCk7CisJaWYgKHJldCAmJiByZXQgIT0gLUVBQ0NFUykKKwkJZ290byBlcnJvcjsKKworCWlvICs9IChsZW5ndGggIT0gMHgxMDApID8gMHgzMDAgOiAwOworCWlvICs9IFVTQjIwX1BIWV9VU0JQSFlBQ1IxOworCisJYWRkciA9IGlvcmVtYXBfbm9jYWNoZShpbywgNCk7CisJdmFsID0gYmluYXJ5X3dyaXRlX3dpZHRoMyhhZGRyLCBTSEZUX1JHX1VTQjIwX1RFUk1fVlJFRl9TRUwsIHN0cik7CisJaHFhX2luZm8obXRrLCAiUG9ydCVpKFBoeSVpKVsweCUwOFhdOiAweCUwOFggYnV0IDB4JTA4WFxuIiwKKwkJcG9ydCwgaW5kZXgsIGlvLCB2YWwsIHJlYWRsKGFkZHIpKTsKKworCWlvdW5tYXAoYWRkcik7CisJcmV0ID0gbjsKKworZXJyb3I6CisJa2ZyZWUoc3RyKTsKKwlyZXR1cm4gcmV0OworfQorREVWSUNFX0FUVFJfUlcoUkdfVVNCMjBfVEVSTV9WUkVGX1NFTCk7CisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy91c2IvaG9zdC94aGNpLW10ay10ZXN0LmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tdGstdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MzllNTUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tdGstdGVzdC5jCkBAIC0wLDAgKzEsNjE3IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIHhIQ0kgaG9zdCBjb250cm9sbGVyIHRvb2xraXQgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDIxICBNZWRpYVRlayBJbmMuCisgKgorICogIEF1dGhvcjogWmhhbnlvbmcgV2FuZyA8emhhbnlvbmcud2FuZ0BtZWRpYXRlay5jb20+CisgKiAgICAgICAgICBTaGFvY2hlbmcuV2FuZyA8c2hhb2NoZW5nLndhbmdAbWVkaWF0ZWsuY29tPgorICogICAgICAgICAgQ2h1bmZlbmcuWXVuIDxjaHVuZmVuZy55dW5AbWVkaWF0ZWsuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3BoeS9waHkuaD4KKyNpbmNsdWRlICIuLi9jb3JlL3VzYi5oIgorI2luY2x1ZGUgInhoY2ktbXRrLmgiCisjaW5jbHVkZSAieGhjaS1tdGstdGVzdC5oIgorI2luY2x1ZGUgInhoY2ktbXRrLXVudXN1YWwuaCIKKworc3RhdGljIGludCB0X3Rlc3RfaihzdHJ1Y3QgeGhjaV9oY2RfbXRrICptdGssIGludCBhcmdjLCBjaGFyICoqYXJndik7CitzdGF0aWMgaW50IHRfdGVzdF9rKHN0cnVjdCB4aGNpX2hjZF9tdGsgKm10aywgaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK3N0YXRpYyBpbnQgdF90ZXN0X3NlMChzdHJ1Y3QgeGhjaV9oY2RfbXRrICptdGssIGludCBhcmdjLCBjaGFyICoqYXJndik7CitzdGF0aWMgaW50IHRfdGVzdF9wYWNrZXQoc3RydWN0IHhoY2lfaGNkX210ayAqbXRrLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworc3RhdGljIGludCB0X3Rlc3Rfc3VzcGVuZChzdHJ1Y3QgeGhjaV9oY2RfbXRrICptdGssIGludCBhcmdjLCBjaGFyICoqYXJndik7CitzdGF0aWMgaW50IHRfdGVzdF9yZXN1bWUoc3RydWN0IHhoY2lfaGNkX210ayAqbXRrLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworc3RhdGljIGludCB0X3Rlc3RfZ2V0X2RldmljZV9kZXNjcmlwdG9yKHN0cnVjdCB4aGNpX2hjZF9tdGsgKm10aywKKwkJCQlpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworc3RhdGljIGludCB0X3Rlc3RfZW51bWVyYXRlX2J1cyhzdHJ1Y3QgeGhjaV9oY2RfbXRrICptdGssCisJCQkJaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK3N0YXRpYyBpbnQgdF9wb3dlcl91MXUyKHN0cnVjdCB4aGNpX2hjZF9tdGsgKm10aywgaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKKworI2RlZmluZSBQT1JUX1BMU19WQUxVRShwKSAoKHAgPj4gNSkgJiAweGYpCisKKyNkZWZpbmUgTUFYX05BTUVfU0laRSAzMgorI2RlZmluZSBNQVhfQVJHX1NJWkUgNAorCitzdHJ1Y3QgaHFhX3Rlc3RfY21kIHsKKwljaGFyIG5hbWVbTUFYX05BTUVfU0laRV07CisJaW50ICgqY2JfZnVuYykoc3RydWN0IHhoY2lfaGNkX210ayAqbXRrLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworCWNoYXIgKmRpc2NyaXB0aW9uOworfTsKKworCitzdHJ1Y3QgaHFhX3Rlc3RfY21kIHhoY2lfbXRrX2hxYV9jbWRzW10gPSB7CisJeyJ0ZXN0LmoiLCAmdF90ZXN0X2osICJUZXN0X0oifSwKKwl7InRlc3QuayIsICZ0X3Rlc3RfaywgIlRlc3RfSyJ9LAorCXsidGVzdC5zZTAiLCAmdF90ZXN0X3NlMCwgIlRlc3RfU0UwX05BSyJ9LAorCXsidGVzdC5wYWNrZXQiLCAmdF90ZXN0X3BhY2tldCwgIlRlc3RfUEFDS0VUIn0sCisJeyJ0ZXN0LnN1c3BlbmQiLCAmdF90ZXN0X3N1c3BlbmQsICJQb3J0IFN1c3BlbmQifSwKKwl7InRlc3QucmVzdW1lIiwgJnRfdGVzdF9yZXN1bWUsICJQb3J0IFJlc3VtZSJ9LAorCXsidGVzdC5lbnVtYnVzIiwgJnRfdGVzdF9lbnVtZXJhdGVfYnVzLCAiRW51bWVyYXRlIEJ1cyJ9LAorCXsidGVzdC5nZXRkZXNjIiwgJnRfdGVzdF9nZXRfZGV2aWNlX2Rlc2NyaXB0b3IsCisJCQkJIkdldCBEZXZpY2UgRGlzY3JpcHRvciJ9LAorCXsicG0udTF1MiIsICZ0X3Bvd2VyX3UxdTIsICJQb3J0IFUxLFUyIn0sCisJeyIiLCBOVUxMLCAiIn0sCit9OworCisKK2ludCBjYWxsX2hxYV9mdW5jKHN0cnVjdCB4aGNpX2hjZF9tdGsgKm10aywgY2hhciAqYnVmKQoreworCXN0cnVjdCBocWFfdGVzdF9jbWQgKmhxYTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gbXRrLT5oY2Q7CisJY2hhciAqYXJndltNQVhfQVJHX1NJWkVdOworCWludCBhcmdjOworCWludCBpOworCisJYXJnYyA9IDA7CisJZG8geworCQlhcmd2W2FyZ2NdID0gc3Ryc2VwKCZidWYsICIgIik7CisJCXhoY2lfZXJyKGhjZF90b194aGNpKGhjZCksICJbJWRdICVzXHJcbiIsIGFyZ2MsIGFyZ3ZbYXJnY10pOworCQlhcmdjKys7CisJfSB3aGlsZSAoYnVmKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHhoY2lfbXRrX2hxYV9jbWRzKTsgaSsrKSB7CisJCWhxYSA9ICZ4aGNpX210a19ocWFfY21kc1tpXTsKKwkJaWYgKCghc3RyY21wKGhxYS0+bmFtZSwgYXJndlswXSkpICYmIChocWEtPmNiX2Z1bmMgIT0gTlVMTCkpCisJCQlyZXR1cm4gaHFhLT5jYl9mdW5jKG10aywgYXJnYywgYXJndik7CisJfQorCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHRlc3RfbW9kZV9lbnRlcihzdHJ1Y3QgeGhjaV9oY2RfbXRrICptdGssCisJCQkJdTMyIHBvcnRfaWQsIHUzMiB0ZXN0X3ZhbHVlKQoreworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBtdGstPmhjZDsKKwlzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kgPSBoY2RfdG9feGhjaShoY2QpOworCXUzMiBfX2lvbWVtICphZGRyOworCXUzMiB0ZW1wOworCisJaWYgKG10ay0+dGVzdF9tb2RlID09IDApIHsKKwkJeGhjaV9zdG9wKGhjZCk7CisJCXhoY2lfaGFsdCh4aGNpKTsKKwl9CisKKwlhZGRyID0gJnhoY2ktPm9wX3JlZ3MtPnBvcnRfcG93ZXJfYmFzZSArCisJCQlOVU1fUE9SVF9SRUdTICogKChwb3J0X2lkIC0gMSkgJiAweGZmKTsKKwl0ZW1wID0gcmVhZGwoYWRkcik7CisJdGVtcCAmPSB+KDB4ZiA8PCAyOCk7CisJdGVtcCB8PSAodGVzdF92YWx1ZSA8PCAyOCk7CisJd3JpdGVsKHRlbXAsIGFkZHIpOworCW10ay0+dGVzdF9tb2RlID0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRlc3RfbW9kZV9leGl0KHN0cnVjdCB4aGNpX2hjZF9tdGsgKm10aykKK3sKKwlpZiAobXRrLT50ZXN0X21vZGUgPT0gMSkKKwkJbXRrLT50ZXN0X21vZGUgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdF90ZXN0X2ooc3RydWN0IHhoY2lfaGNkX210ayAqbXRrLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IG10ay0+aGNkOworCXN0cnVjdCB4aGNpX2hjZCAqeGhjaSA9IGhjZF90b194aGNpKGhjZCk7CisJbG9uZyBwb3J0X2lkOworCXUzMiB0ZXN0X3ZhbHVlOworCisJcG9ydF9pZCA9IDI7CisJdGVzdF92YWx1ZSA9IDE7CisKKwlpZiAoYXJnYyA+IDEgJiYga3N0cnRvbChhcmd2WzFdLCAxMCwgJnBvcnRfaWQpKQorCQl4aGNpX2Vycih4aGNpLCAibXUzaCAlcyBnZXQgcG9ydC1pZCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKworCXhoY2lfZXJyKHhoY2ksICJtdTNoICVzIHRlc3QgcG9ydCVkXG4iLCBfX2Z1bmNfXywgKGludClwb3J0X2lkKTsKKwl0ZXN0X21vZGVfZW50ZXIobXRrLCBwb3J0X2lkLCB0ZXN0X3ZhbHVlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRfdGVzdF9rKHN0cnVjdCB4aGNpX2hjZF9tdGsgKm10aywgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBtdGstPmhjZDsKKwlzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kgPSBoY2RfdG9feGhjaShoY2QpOworCWxvbmcgcG9ydF9pZDsKKwl1MzIgdGVzdF92YWx1ZTsKKworCXBvcnRfaWQgPSAyOworCXRlc3RfdmFsdWUgPSAyOworCisJaWYgKGFyZ2MgPiAxICYmIGtzdHJ0b2woYXJndlsxXSwgMTAsICZwb3J0X2lkKSkKKwkJeGhjaV9lcnIoeGhjaSwgIm11M2ggJXMgZ2V0IHBvcnQtaWQgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisKKwl4aGNpX2Vycih4aGNpLCAibXUzaCAlcyB0ZXN0IHBvcnQlZFxuIiwgX19mdW5jX18sIChpbnQpcG9ydF9pZCk7CisJdGVzdF9tb2RlX2VudGVyKG10aywgcG9ydF9pZCwgdGVzdF92YWx1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0X3Rlc3Rfc2UwKHN0cnVjdCB4aGNpX2hjZF9tdGsgKm10aywgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBtdGstPmhjZDsKKwlzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kgPSBoY2RfdG9feGhjaShoY2QpOworCWxvbmcgcG9ydF9pZDsKKwl1MzIgdGVzdF92YWx1ZTsKKworCXBvcnRfaWQgPSAyOworCXRlc3RfdmFsdWUgPSAzOworCisJaWYgKGFyZ2MgPiAxICYmIGtzdHJ0b2woYXJndlsxXSwgMTAsICZwb3J0X2lkKSkKKwkJeGhjaV9lcnIoeGhjaSwgIm11M2ggJXMgZ2V0IHBvcnQtaWQgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisKKwl4aGNpX2Vycih4aGNpLCAibXUzaCAlcyB0ZXN0IHBvcnQlbGRcbiIsIF9fZnVuY19fLCBwb3J0X2lkKTsKKwl0ZXN0X21vZGVfZW50ZXIobXRrLCBwb3J0X2lkLCB0ZXN0X3ZhbHVlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRfdGVzdF9wYWNrZXQoc3RydWN0IHhoY2lfaGNkX210ayAqbXRrLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IG10ay0+aGNkOworCXN0cnVjdCB4aGNpX2hjZCAqeGhjaSA9IGhjZF90b194aGNpKGhjZCk7CisJbG9uZyBwb3J0X2lkOworCXUzMiB0ZXN0X3ZhbHVlOworCisJcG9ydF9pZCA9IDI7CisJdGVzdF92YWx1ZSA9IDQ7CisKKwlpZiAoYXJnYyA+IDEgJiYga3N0cnRvbChhcmd2WzFdLCAxMCwgJnBvcnRfaWQpKQorCQl4aGNpX2Vycih4aGNpLCAibXUzaCAlcyBnZXQgcG9ydC1pZCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKworCXhoY2lfZXJyKHhoY2ksICJtdTNoICVzIHRlc3QgcG9ydCVsZFxuIiwgX19mdW5jX18sIHBvcnRfaWQpOworCXRlc3RfbW9kZV9lbnRlcihtdGssIHBvcnRfaWQsIHRlc3RfdmFsdWUpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIG9ubHkgZm9yIHUzIHBvcnRzLCB2YWxpZCB2YWx1ZXMgYXJlIDEsIDIsIC4uLiovCitzdGF0aWMgaW50IHRfcG93ZXJfdTF1MihzdHJ1Y3QgeGhjaV9oY2RfbXRrICptdGssIGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gbXRrLT5oY2Q7CisJc3RydWN0IHhoY2lfaGNkICp4aGNpID0gaGNkX3RvX3hoY2koaGNkKTsKKwl1MzIgX19pb21lbSAqYWRkcjsKKwl1MzIgdGVtcDsKKwlpbnQgcG9ydF9pZDsKKwlpbnQgcmV0dmFsID0gMDsKKwlpbnQgdV9udW0gPSAxOworCWludCB1MV92YWwgPSAxOworCWludCB1Ml92YWwgPSAwOworCisJcG9ydF9pZCA9IDE7IC8qIGZpcnN0IHUzcG9ydCBieSBkZWZhdWx0ICovCisKKwlpZiAoYXJnYyA+IDEgJiYga3N0cnRvaW50KGFyZ3ZbMV0sIDEwLCAmcG9ydF9pZCkpCisJCXhoY2lfZXJyKHhoY2ksICJtdTNoICVzIGdldCBwb3J0LWlkIGZhaWxlZFxuIiwgX19mdW5jX18pOworCisJaWYgKGFyZ2MgPiAyICYmIGtzdHJ0b2ludChhcmd2WzJdLCAxMCwgJnVfbnVtKSkKKwkJeGhjaV9lcnIoeGhjaSwgIm11M2ggJXMgZ2V0IHVfbnVtIGZhaWxlZFxuIiwgX19mdW5jX18pOworCisJaWYgKGFyZ2MgPiAzICYmIGtzdHJ0b2ludChhcmd2WzNdLCAxMCwgJnUxX3ZhbCkpCisJCXhoY2lfZXJyKHhoY2ksICJtdTNoICVzIGdldCB1MV92YWwgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoYXJnYyA+IDQgJiYga3N0cnRvaW50KGFyZ3ZbNF0sIDEwLCAmdTJfdmFsKSkKKwkJeGhjaV9lcnIoeGhjaSwgIm11M2ggJXMgZ2V0IHUyX3ZhbCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKworCXhoY2lfZXJyKHhoY2ksICJtdTNoICVzIHRlc3QgcG9ydCVkLCB1X251bSVkLCB1MV92YWwlZCwgdTJfdmFsJWRcbiIsCisJCV9fZnVuY19fLCAoaW50KXBvcnRfaWQsIHVfbnVtLCB1MV92YWwsIHUyX3ZhbCk7CisKKwlpZiAobXRrLT50ZXN0X21vZGUgPT0gMSkgeworCQl4aGNpX2Vycih4aGNpLCAicGxlYXNlIHN1c3BlbmQgcG9ydCBmaXJzdFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwl4aGNpX2Vycih4aGNpLCAiJXM6IHN0b3AgcG9ydCBwb2xsaW5nXG4iLCBfX2Z1bmNfXyk7CisJY2xlYXJfYml0KEhDRF9GTEFHX1BPTExfUkgsICZoY2QtPmZsYWdzKTsKKwlkZWxfdGltZXJfc3luYygmaGNkLT5yaF90aW1lcik7CisJY2xlYXJfYml0KEhDRF9GTEFHX1BPTExfUkgsICZ4aGNpLT5zaGFyZWRfaGNkLT5mbGFncyk7CisJZGVsX3RpbWVyX3N5bmMoJnhoY2ktPnNoYXJlZF9oY2QtPnJoX3RpbWVyKTsKKwljbGVhcl9iaXQoSENEX0ZMQUdfSFdfQUNDRVNTSUJMRSwgJmhjZC0+ZmxhZ3MpOworCWNsZWFyX2JpdChIQ0RfRkxBR19IV19BQ0NFU1NJQkxFLCAmeGhjaS0+c2hhcmVkX2hjZC0+ZmxhZ3MpOworCisJYWRkciA9ICZ4aGNpLT5vcF9yZWdzLT5wb3J0X3Bvd2VyX2Jhc2UgKworCQkJTlVNX1BPUlRfUkVHUyAqICgocG9ydF9pZCAtIDEpICYgMHhmZik7CisKKwl0ZW1wID0gcmVhZGwoYWRkcik7CisJaWYgKHVfbnVtID09IDEpIHsKKwkJdGVtcCAmPSB+UE9SVF9VMV9USU1FT1VUX01BU0s7CisJCXRlbXAgfD0gUE9SVF9VMV9USU1FT1VUKHUxX3ZhbCk7CisJfSBlbHNlIGlmICh1X251bSA9PSAyKSB7CisJCXRlbXAgJj0gflBPUlRfVTJfVElNRU9VVF9NQVNLOworCQl0ZW1wIHw9IFBPUlRfVTJfVElNRU9VVCh1Ml92YWwpOworCX0gZWxzZSBpZiAodV9udW0gPT0gMykgeworCQl0ZW1wICY9IH4oUE9SVF9VMV9USU1FT1VUX01BU0sgfCBQT1JUX1UyX1RJTUVPVVRfTUFTSyk7CisJCXRlbXAgfD0gUE9SVF9VMV9USU1FT1VUKHUxX3ZhbCkgfCBQT1JUX1UyX1RJTUVPVVQodTJfdmFsKTsKKwl9CisKKwl3cml0ZWwodGVtcCwgYWRkcik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK3N0YXRpYyBpbnQgdF90ZXN0X3N1c3BlbmQoc3RydWN0IHhoY2lfaGNkX210ayAqbXRrLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IG10ay0+aGNkOworCXN0cnVjdCB4aGNpX2hjZCAqeGhjaSA9IGhjZF90b194aGNpKGhjZCk7CisJdTMyIF9faW9tZW0gKmFkZHI7CisJdTMyIHRlbXA7CisJbG9uZyBwb3J0X2lkOworCisJcG9ydF9pZCA9IDI7CisKKwlpZiAoYXJnYyA+IDEgJiYga3N0cnRvbChhcmd2WzFdLCAxMCwgJnBvcnRfaWQpKQorCQl4aGNpX2Vycih4aGNpLCAibXUzaCAlcyBnZXQgcG9ydC1pZCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKworCXhoY2lfZXJyKHhoY2ksICJtdTNoICVzIHRlc3QgcG9ydCVkXG4iLCBfX2Z1bmNfXywgKGludClwb3J0X2lkKTsKKworCXhoY2lfZXJyKHhoY2ksICIlczogc3RvcCBwb3J0IHBvbGxpbmdcbiIsIF9fZnVuY19fKTsKKwljbGVhcl9iaXQoSENEX0ZMQUdfUE9MTF9SSCwgJmhjZC0+ZmxhZ3MpOworCWRlbF90aW1lcl9zeW5jKCZoY2QtPnJoX3RpbWVyKTsKKwljbGVhcl9iaXQoSENEX0ZMQUdfUE9MTF9SSCwgJnhoY2ktPnNoYXJlZF9oY2QtPmZsYWdzKTsKKwlkZWxfdGltZXJfc3luYygmeGhjaS0+c2hhcmVkX2hjZC0+cmhfdGltZXIpOworCWNsZWFyX2JpdChIQ0RfRkxBR19IV19BQ0NFU1NJQkxFLCAmaGNkLT5mbGFncyk7CisJY2xlYXJfYml0KEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUsICZ4aGNpLT5zaGFyZWRfaGNkLT5mbGFncyk7CisKKwl0ZW1wID0gcmVhZGwoJnhoY2ktPmlyX3NldC0+aXJxX3BlbmRpbmcpOworCXdyaXRlbChFUl9JUlFfRElTQUJMRSh0ZW1wKSwgJnhoY2ktPmlyX3NldC0+aXJxX3BlbmRpbmcpOworCisJaWYgKG10ay0+dGVzdF9tb2RlID09IDEpCisJCXRlc3RfbW9kZV9leGl0KG10ayk7CisKKwkvKiBzZXQgUExTID0gMyAqLworCWFkZHIgPSAmeGhjaS0+b3BfcmVncy0+cG9ydF9zdGF0dXNfYmFzZSArCisJCQlOVU1fUE9SVF9SRUdTKigocG9ydF9pZCAtIDEpICYgMHhmZik7CisKKwl0ZW1wID0gcmVhZGwoYWRkcik7CisJdGVtcCA9IHhoY2lfcG9ydF9zdGF0ZV90b19uZXV0cmFsKHRlbXApOworCXRlbXAgPSAodGVtcCAmIH4oMHhmIDw8IDUpKTsKKwl0ZW1wID0gKHRlbXAgfCAoMyA8PCA1KSB8IFBPUlRfTElOS19TVFJPQkUpOworCXdyaXRlbCh0ZW1wLCBhZGRyKTsKKwl4aGNpX2hhbmRzaGFrZShhZGRyLCAoMHhmIDw8IDUpLCAoMyA8PCA1KSwgMzAqMTAwMCk7CisKKwl0ZW1wID0gcmVhZGwoYWRkcik7CisJaWYgKFBPUlRfUExTX1ZBTFVFKHRlbXApICE9IDMpCisJCXhoY2lfZXJyKHhoY2ksICJwb3J0IG5vdCBlbnRlciBzdXNwZW5kIHN0YXRlXG4iKTsKKwllbHNlCisJCXhoY2lfZXJyKHhoY2ksICJwb3J0IGVudGVyIHN1c3BlbmQgc3RhdGVcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdF90ZXN0X3Jlc3VtZShzdHJ1Y3QgeGhjaV9oY2RfbXRrICptdGssIGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gbXRrLT5oY2Q7CisJc3RydWN0IHhoY2lfaGNkICp4aGNpID0gaGNkX3RvX3hoY2koaGNkKTsKKwl1MzIgX19pb21lbSAqYWRkcjsKKwl1MzIgdGVtcDsKKwlsb25nIHBvcnRfaWQ7CisJaW50IHJldHZhbCA9IDA7CisKKwlwb3J0X2lkID0gMjsKKworCWlmIChhcmdjID4gMSAmJiBrc3RydG9sKGFyZ3ZbMV0sIDEwLCAmcG9ydF9pZCkpCisJCXhoY2lfZXJyKHhoY2ksICJtdTNoICVzIGdldCBwb3J0LWlkIGZhaWxlZFxuIiwgX19mdW5jX18pOworCisJeGhjaV9lcnIoeGhjaSwgIm11M2ggJXMgdGVzdCBwb3J0JWRcbiIsIF9fZnVuY19fLCAoaW50KXBvcnRfaWQpOworCisJaWYgKG10ay0+dGVzdF9tb2RlID09IDEpIHsKKwkJeGhjaV9lcnIoeGhjaSwgInBsZWFzZSBzdXNwZW5kIHBvcnQgZmlyc3RcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCWFkZHIgPSAmeGhjaS0+b3BfcmVncy0+cG9ydF9zdGF0dXNfYmFzZSArCisJCQlOVU1fUE9SVF9SRUdTICogKChwb3J0X2lkIC0gMSkgJiAweGZmKTsKKworCXRlbXAgPSByZWFkbChhZGRyKTsKKwlpZiAoUE9SVF9QTFNfVkFMVUUodGVtcCkgIT0gMykgeworCQl4aGNpX2Vycih4aGNpLCAicG9ydCBub3QgaW4gc3VzcGVuZCBzdGF0ZSwgcGxlYXNlIHN1c3BlbmQgcG9ydCBmaXJzdFxuIik7CisJCXJldHZhbCA9IC0xOworCX0gZWxzZSB7CisJCXRlbXAgPSB4aGNpX3BvcnRfc3RhdGVfdG9fbmV1dHJhbCh0ZW1wKTsKKwkJdGVtcCA9ICh0ZW1wICYgfigweGYgPDwgNSkpOworCQl0ZW1wID0gKHRlbXAgfCAoMTUgPDwgNSkgfCBQT1JUX0xJTktfU1RST0JFKTsKKwkJd3JpdGVsKHRlbXAsIGFkZHIpOworCQltZGVsYXkoMjApOworCisJCXRlbXAgPSByZWFkbChhZGRyKTsKKwkJdGVtcCA9IHhoY2lfcG9ydF9zdGF0ZV90b19uZXV0cmFsKHRlbXApOworCQl0ZW1wID0gKHRlbXAgJiB+KDB4ZiA8PCA1KSk7CisJCXRlbXAgPSAodGVtcCB8IFBPUlRfTElOS19TVFJPQkUpOworCQl3cml0ZWwodGVtcCwgYWRkcik7CisKKwkJeGhjaV9oYW5kc2hha2UoYWRkciwgKDB4ZiA8PCA1KSwgKDAgPDwgNSksIDEwMCoxMDAwKTsKKwkJdGVtcCA9IHJlYWRsKGFkZHIpOworCQlpZiAoUE9SVF9QTFNfVkFMVUUodGVtcCkgIT0gMCkgeworCQkJeGhjaV9lcnIoeGhjaSwgInJ1c3VtZSBmYWlsLCV4XG4iLAorCQkJCVBPUlRfUExTX1ZBTFVFKHRlbXApKTsKKwkJCXJldHZhbCA9IC0xOworCQl9IGVsc2UgeworCQkJeGhjaV9lcnIoeGhjaSwgInBvcnQgcmVzdW1lIG9rXG4iKTsKKwkJfQorCX0KKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgdF90ZXN0X2VudW1lcmF0ZV9idXMoc3RydWN0IHhoY2lfaGNkX210ayAqbXRrLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IG10ay0+aGNkOworCXN0cnVjdCB4aGNpX2hjZCAqeGhjaSA9IGhjZF90b194aGNpKGhjZCk7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYjJfcmg7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJbG9uZyBwb3J0X2lkOworCXUzMiByZXR2YWw7CisKKwlwb3J0X2lkID0gMjsKKworCWlmIChhcmdjID4gMSAmJiBrc3RydG9sKGFyZ3ZbMV0sIDEwLCAmcG9ydF9pZCkpCisJCXhoY2lfZXJyKHhoY2ksICJtdTNoICVzIGdldCBwb3J0LWlkIGZhaWxlZFxuIiwgX19mdW5jX18pOworCisJeGhjaV9lcnIoeGhjaSwgIm11M2ggJXMgdGVzdCBwb3J0JWRcbiIsIF9fZnVuY19fLCAoaW50KXBvcnRfaWQpOworCisJaWYgKG10ay0+dGVzdF9tb2RlID09IDEpIHsKKwkJdGVzdF9tb2RlX2V4aXQobXRrKTsKKwkJcmV0dXJuIDA7CisJfQorCisJdXNiMl9yaCA9IGhjZC0+c2VsZi5yb290X2h1YjsKKwl1ZGV2ID0gdXNiX2h1Yl9maW5kX2NoaWxkKHVzYjJfcmgsIHBvcnRfaWQgLSAxKTsKKworCWlmICh1ZGV2ICE9IE5VTEwpIHsKKwkJcmV0dmFsID0gdXNiX3Jlc2V0X2RldmljZSh1ZGV2KTsKKwkJaWYgKHJldHZhbCkgeworCQkJeGhjaV9lcnIoeGhjaSwgIkVSUk9SOiBlbnVtZXJhdGUgYnVzIGZhaWwhXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0gZWxzZSB7CisJCXhoY2lfZXJyKHhoY2ksICJFUlJPUjogRGV2aWNlIGRvZXMgbm90IGV4aXN0IVxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbnQgdF90ZXN0X2dldF9kZXZpY2VfZGVzY3JpcHRvcihzdHJ1Y3QgeGhjaV9oY2RfbXRrICptdGssCisJCQkJaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBtdGstPmhjZDsKKwlzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kgPSBoY2RfdG9feGhjaShoY2QpOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2IyX3JoOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCWxvbmcgcG9ydF9pZDsKKwl1MzIgcmV0dmFsID0gMDsKKworCXBvcnRfaWQgPSAyOworCisJaWYgKGFyZ2MgPiAxICYmIGtzdHJ0b2woYXJndlsxXSwgMTAsICZwb3J0X2lkKSkKKwkJeGhjaV9lcnIoeGhjaSwgIm11M2ggJXMgZ2V0IHBvcnQtaWQgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisKKwl4aGNpX2Vycih4aGNpLCAibXUzaCAlcyB0ZXN0IHBvcnQlZFxuIiwgX19mdW5jX18sIChpbnQpcG9ydF9pZCk7CisKKwlpZiAobXRrLT50ZXN0X21vZGUgPT0gMSkgeworCQl0ZXN0X21vZGVfZXhpdChtdGspOworCQltc2xlZXAoMjAwMCk7CisJfQorCisJdXNiMl9yaCA9IGhjZC0+c2VsZi5yb290X2h1YjsKKworCXVkZXYgPSB1c2JfaHViX2ZpbmRfY2hpbGQodXNiMl9yaCwgcG9ydF9pZCAtIDEpOworCisJaWYgKHVkZXYgIT0gTlVMTCkgeworCQlyZXR2YWwgPSB1c2JfZ2V0X2RldmljZV9kZXNjcmlwdG9yKHVkZXYsIFVTQl9EVF9ERVZJQ0VfU0laRSk7CisJCWlmIChyZXR2YWwgIT0gc2l6ZW9mKHVkZXYtPmRlc2NyaXB0b3IpKSB7CisJCQl4aGNpX2Vycih4aGNpLCAiRVJST1I6IGdldCBkZXZpY2UgZGVzY3JpcHRvciBmYWlsIVxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9IGVsc2UgeworCQl4aGNpX2Vycih4aGNpLCAiRVJST1I6IERldmljZSBkb2VzIG5vdCBleGlzdCFcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGhxYV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHhoY2lfaGNkX210ayAqbXRrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IG10ay0+aGNkOworCXN0cnVjdCB4aGNpX2hjZCAqeGhjaSA9IGhjZF90b194aGNpKGhjZCk7CisJdTMyIF9faW9tZW0gKmFkZHI7CisJdTMyIHZhbDsKKwl1MzIgcG9ydHM7CisJaW50IGxlbiA9IDA7CisJaW50IGJ1ZkxlbiA9IFBBR0VfU0laRTsKKwlzdHJ1Y3QgaHFhX3Rlc3RfY21kICpocWE7CisJaW50IGk7CisKKwlsZW4gKz0gc25wcmludGYoYnVmK2xlbiwgYnVmTGVuLWxlbiwgImluZm86XG4iKTsKKwlsZW4gKz0gc25wcmludGYoYnVmK2xlbiwgYnVmTGVuLWxlbiwKKwkJCSJcdGVjaG8gLW4gaXRlbSBwb3J0LWlkID4gaHFhXG4iKTsKKwlsZW4gKz0gc25wcmludGYoYnVmK2xlbiwgYnVmTGVuLWxlbiwKKwkJCSJcdHBvcnQtaWQgOiBiYXNlZCBvbiBudW1iZXIgb2YgdXNiMy1wb3J0LCBlLmcuXG4iKTsKKwlsZW4gKz0gc25wcmludGYoYnVmK2xlbiwgYnVmTGVuLWxlbiwKKwkJCSJcdFx0eEhDSSB3aXRoIDEgdTNwLCAyIHUycDogMXN0IHUycC1pZCBpcyAyKDErMSksIDJuZCBpcyAzXG4iKTsKKwlsZW4gKz0gc25wcmludGYoYnVmK2xlbiwgYnVmTGVuLWxlbiwgIml0ZW1zOlxuIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh4aGNpX210a19ocWFfY21kcyk7IGkrKykgeworCQlocWEgPSAmeGhjaV9tdGtfaHFhX2NtZHNbaV07CisJCWxlbiArPSBzbnByaW50ZihidWYrbGVuLCBidWZMZW4tbGVuLAorCQkJCSJcdCVzOiAlc1xuIiwgaHFhLT5uYW1lLCBocWEtPmRpc2NyaXB0aW9uKTsKKwl9CisKKwlwb3J0cyA9IG10ay0+bnVtX3UzX3BvcnRzICsgbXRrLT5udW1fdTJfcG9ydHM7CisJZm9yIChpID0gbXRrLT5udW1fdTNfcG9ydHMgKyAxOyBpIDw9IHBvcnRzOyBpKyspIHsKKwkJYWRkciA9ICZ4aGNpLT5vcF9yZWdzLT5wb3J0X3Bvd2VyX2Jhc2UgKworCQkJTlVNX1BPUlRfUkVHUyAqICgoaSAtIDEpICYgMHhmZik7CisJCXZhbCA9IHJlYWRsKGFkZHIpOworCQlsZW4gKz0gc25wcmludGYoYnVmK2xlbiwgYnVmTGVuLWxlbiwKKwkJCSJVU0IyMCBQb3J0JWkgUE9SVE1TQ1szMSwyOF0gNGInMDAwMDogMHglMDhYXG4iLAorCQkJaSwgdmFsKTsKKwl9CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3NpemVfdCBocWFfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgeGhjaV9oY2RfbXRrICptdGsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gbXRrLT5oY2Q7CisJc3RydWN0IHhoY2lfaGNkICp4aGNpID0gaGNkX3RvX3hoY2koaGNkKTsKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gY2FsbF9ocWFfZnVuYyhtdGssIChjaGFyICopYnVmKTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQl4aGNpX2Vycih4aGNpLCAibXUzaCBjbGkgZmFpbFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUl9SVyhocWEpOworCitzdGF0aWMgc3NpemVfdCB1c2IzaHFhX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB4aGNpX2hjZF9tdGsgKm10ayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBtdGstPmhjZDsKKwlzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kgPSBoY2RfdG9feGhjaShoY2QpOworCXNzaXplX3QgY250ID0gMDsKKwl1MzIgX19pb21lbSAqYWRkcjsKKwl1MzIgdmFsOworCXUzMiBpOworCWludCBwb3J0czsKKworCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwgInVzYjNocWEgdXNhZ2U6XG4iKTsKKwljbnQgKz0gc3ByaW50ZihidWYgKyBjbnQsICIJZWNobyB1M3BvcnQgPnVzYjNocWFcbiIpOworCisJcG9ydHMgPSBtdGstPm51bV91M19wb3J0cyArIG10ay0+bnVtX3UyX3BvcnRzOworCWZvciAoaSA9IDE7IGkgPD0gcG9ydHM7IGkrKykgeworCQlhZGRyID0gJnhoY2ktPm9wX3JlZ3MtPnBvcnRfc3RhdHVzX2Jhc2UgKworCQkJTlVNX1BPUlRfUkVHUyAqICgoaSAtIDEpICYgMHhmZik7CisJCXZhbCA9IHJlYWRsKGFkZHIpOworCQlpZiAoaSA8IG10ay0+bnVtX3UzX3BvcnRzKQorCQkJY250ICs9IHNwcmludGYoYnVmICsgY250LAorCQkJCSJVU0IzMCBQb3J0JWk6IDB4JTA4WFxuIiwgaSwgdmFsKTsKKwkJZWxzZSAKKwkJCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwKKwkJCQkiVVNCMjAgUG9ydCVpOiAweCUwOFhcbiIsIGksIHZhbCk7CisJfQorCisJaWYgKG10ay0+aHFhX3BvcykgeworCQljbnQgKz0gc3ByaW50ZihidWYgKyBjbnQsICIlcyIsIG10ay0+aHFhX2J1Zik7CisJCW10ay0+aHFhX3BvcyA9IDA7CisJfQorCisJcmV0dXJuIGNudDsKK30KKworc3RhdGljIHNzaXplX3QKK3VzYjNocWFfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pCit7CisJc3RydWN0IHhoY2lfaGNkX210ayAqbXRrID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IG10ay0+aGNkOworCXN0cnVjdCB4aGNpX2hjZCAqeGhjaSA9IGhjZF90b194aGNpKGhjZCk7CisJdTMyIF9faW9tZW0gKmFkZHI7CisJdTMyIHZhbDsKKwlpbnQgcG9ydDsKKwlpbnQgd29yZHM7CisKKwltdGstPmhxYV9wb3MgPSAwOworCW1lbXNldChtdGstPmhxYV9idWYsIDAsIG10ay0+aHFhX3NpemUpOworCisJaHFhX2luZm8obXRrLCAidXNiM2hxYTogJXNcbiIsIGJ1Zik7CisKKwl3b3JkcyA9IHNzY2FuZihidWYsICIlZCIsICZwb3J0KTsKKwlpZiAoKHdvcmRzICE9IDEpIHx8CisJICAgIChwb3J0IDwgMSB8fCBwb3J0ID4gbXRrLT5udW1fdTNfcG9ydHMpKSB7CisJCWhxYV9pbmZvKG10aywgInVzYjNocWE6IHBhcmFtIG51bWJlcjolaSwgcG9ydDolaSBmYWlsdXJlXG4iLAorCQkJd29yZHMsIHBvcnQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlhZGRyID0gJnhoY2ktPm9wX3JlZ3MtPnBvcnRfc3RhdHVzX2Jhc2UgKworCQlOVU1fUE9SVF9SRUdTICogKChwb3J0IC0gMSkgJiAweGZmKTsKKwl2YWwgID0gcmVhZGwoYWRkcik7CisJdmFsICY9IH4oUE9SVF9QTFNfTUFTSyk7CisJdmFsIHw9IChQT1JUX0xJTktfU1RST0JFIHwgWERFVl9DT01QX01PREUpOworCXdyaXRlbCh2YWwsIGFkZHIpOworCWhxYV9pbmZvKG10aywgInVzYjNocWE6IHBvcnQlaTogMHglMDhYIGJ1dCAweCUwOFhcbiIsCisJCXBvcnQsIHZhbCwgcmVhZGwoYWRkcikpOworCisJcmV0dXJuIG47Cit9CitzdGF0aWMgREVWSUNFX0FUVFJfUlcodXNiM2hxYSk7CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqbXUzaF9ocWFfYXR0cl9saXN0W10gPSB7CisJJmRldl9hdHRyX2hxYSwKKwkmZGV2X2F0dHJfdXNiM2hxYSwKKyNpbmNsdWRlICJ1bnVzdWFsLXN0YXRlbWVudC5oIgorfTsKKworaW50IGhxYV9jcmVhdGVfYXR0cihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IGlkeCwgZXJyID0gMDsKKwlpbnQgbnVtID0gQVJSQVlfU0laRShtdTNoX2hxYV9hdHRyX2xpc3QpOworCXN0cnVjdCB4aGNpX2hjZF9tdGsgKm10ayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGRldiA9PSBOVUxMIHx8IG10ayA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW10ay0+aHFhX3NpemUgPSBIUUFfUFJFRklYX1NJWkU7CisJbXRrLT5ocWFfcG9zICA9IDA7CisJbXRrLT5ocWFfYnVmID0ga3phbGxvYyhtdGstPmhxYV9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW10ay0+aHFhX2J1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IG51bTsgaWR4KyspIHsKKwkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgbXUzaF9ocWFfYXR0cl9saXN0W2lkeF0pOworCQlpZiAoZXJyKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGVycjsKK30KKwordm9pZCBocWFfcmVtb3ZlX2F0dHIoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCBpZHg7CisJaW50IG51bSA9IEFSUkFZX1NJWkUobXUzaF9ocWFfYXR0cl9saXN0KTsKKwlzdHJ1Y3QgeGhjaV9oY2RfbXRrICptdGsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWZvciAoaWR4ID0gMDsgaWR4IDwgbnVtOyBpZHgrKykKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgbXUzaF9ocWFfYXR0cl9saXN0W2lkeF0pOworCisJa2ZyZWUobXRrLT5ocWFfYnVmKTsKKwltdGstPmhxYV9zaXplID0gMDsKKwltdGstPmhxYV9wb3MgID0gMDsKK30KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy91c2IvaG9zdC94aGNpLW10ay10ZXN0LmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tdGstdGVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZTE1NDIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tdGstdGVzdC5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovCisvKgorICogeGhjaS1tdGstdW51c3VhbGxpYi5oIC0tIHhoY2kgdG9vbGtpdCBoZWFkZXIgZmlsZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBNZWRpYXRlayBJbmMgLSBodHRwOi8vd3d3Lm1lZGlhdGVrLmNvbQorICoKKyAqICBBdXRob3I6IFpoYW55b25nIFdhbmcgPHpoYW55b25nLndhbmdAbWVkaWF0ZWsuY29tPgorICogICAgICAgICAgU2hhb2NoZW5nLldhbmcgPHNoYW9jaGVuZy53YW5nQG1lZGlhdGVrLmNvbT4KKyAqICAgICAgICAgIENodW5mZW5nLll1biA8Y2h1bmZlbmcueXVuQG1lZGlhdGVrLmNvbT4KKyAqLworCisjaWZuZGVmIF9fWEhDSV9NVEtfVEVTVF9ICisjZGVmaW5lIF9fWEhDSV9NVEtfVEVTVF9ICisKKyNpZmRlZiBDT05GSUdfVVNCX1hIQ0lfTVRLX0RFQlVHRlMKK2ludCBocWFfY3JlYXRlX2F0dHIoc3RydWN0IGRldmljZSAqZGV2KTsKK3ZvaWQgaHFhX3JlbW92ZV9hdHRyKHN0cnVjdCBkZXZpY2UgKmRldik7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgaHFhX2NyZWF0ZV9hdHRyKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBocWFfcmVtb3ZlX2F0dHIoc3RydWN0IGRldmljZSAqZGV2KQoreworfQorI2VuZGlmCisjZW5kaWYgLyogX19YSENJX01US19URVNUX0ggKi8KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy91c2IvaG9zdC94aGNpLW10ay11bnVzdWFsLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tdGstdW51c3VhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ZDdkMGIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tdGstdW51c3VhbC5jCkBAIC0wLDAgKzEsMTY4IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIHhIQ0kgaG9zdCBjb250cm9sbGVyIHRvb2xraXQgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDIxICBNZWRpYVRlayBJbmMuCisgKgorICogIEF1dGhvcjogWmhhbnlvbmcgV2FuZyA8emhhbnlvbmcud2FuZ0BtZWRpYXRlay5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9waHkvcGh5Lmg+CisjaW5jbHVkZSAieGhjaS1tdGsuaCIKKyNpbmNsdWRlICJ4aGNpLW10ay10ZXN0LmgiCisjaW5jbHVkZSAieGhjaS1tdGstdW51c3VhbC5oIgorCisKK3UzMiBiaW5hcnlfd3JpdGVfd2lkdGgxKHUzMiBfX2lvbWVtICphZGRyLCB1MzIgc2hpZnQsIGNvbnN0IGNoYXIgKmJ1ZikKK3sKKwl1MzIgdmFsID0gMDsKKworCWlmICghc3RybmNtcChidWYsIFNUUk5HXzBfV0lEVEhfMSwgQklUX1dJRFRIXzEpKQorCQl2YWwgPSAwOworCWVsc2UgaWYgKCFzdHJuY21wKGJ1ZiwgU1RSTkdfMV9XSURUSF8xLCBCSVRfV0lEVEhfMSkpCisJCXZhbCA9IDE7CisJZWxzZQorCQl2YWwgPSAweEZGRkZGRkZGOworCisJaWYgKHZhbCA8PSAxKQorCQl2YWwgPSB1c2IyMGhxYV93cml0ZShhZGRyLCBzaGlmdCwgTVNLX1dJRFRIXzEsIHZhbCk7CisKKwlyZXR1cm4gdmFsOworfQorCit1MzIgYmluYXJ5X3dyaXRlX3dpZHRoMyh1MzIgX19pb21lbSAqYWRkciwgdTMyIHNoaWZ0LCBjb25zdCBjaGFyICpidWYpCit7CisJdTMyIHZhbCA9IDA7CisKKwlpZiAoIXN0cm5jbXAoYnVmLCBTVFJOR18wX1dJRFRIXzMsIEJJVF9XSURUSF8zKSkKKwkJdmFsID0gMDsKKwllbHNlIGlmICghc3RybmNtcChidWYsIFNUUk5HXzFfV0lEVEhfMywgQklUX1dJRFRIXzMpKQorCQl2YWwgPSAxOworCWVsc2UgaWYgKCFzdHJuY21wKGJ1ZiwgU1RSTkdfMl9XSURUSF8zLCBCSVRfV0lEVEhfMykpCisJCXZhbCA9IDI7CisJZWxzZSBpZiAoIXN0cm5jbXAoYnVmLCBTVFJOR18zX1dJRFRIXzMsIEJJVF9XSURUSF8zKSkKKwkJdmFsID0gMzsKKwllbHNlIGlmICghc3RybmNtcChidWYsIFNUUk5HXzRfV0lEVEhfMywgQklUX1dJRFRIXzMpKQorCQl2YWwgPSA0OworCWVsc2UgaWYgKCFzdHJuY21wKGJ1ZiwgU1RSTkdfNV9XSURUSF8zLCBCSVRfV0lEVEhfMykpCisJCXZhbCA9IDU7CisJZWxzZSBpZiAoIXN0cm5jbXAoYnVmLCBTVFJOR182X1dJRFRIXzMsIEJJVF9XSURUSF8zKSkKKwkJdmFsID0gNjsKKwllbHNlIGlmICghc3RybmNtcChidWYsIFNUUk5HXzdfV0lEVEhfMywgQklUX1dJRFRIXzMpKQorCQl2YWwgPSA3OworCWVsc2UKKwkJdmFsID0gMHhGRkZGRkZGRjsKKworCWlmICh2YWwgPD0gNykKKwkJdmFsID0gdXNiMjBocWFfd3JpdGUoYWRkciwgc2hpZnQsIE1TS19XSURUSF8zLCB2YWwpOworCisJcmV0dXJuIHZhbDsKK30KKwordTMyIGJpbmFyeV93cml0ZV93aWR0aDQodTMyIF9faW9tZW0gKmFkZHIsIHUzMiBzaGlmdCwgY29uc3QgY2hhciAqYnVmKQoreworCXUzMiB2YWwgPSAwOworCisJaWYgKCFzdHJuY21wKGJ1ZiwgU1RSTkdfMF9XSURUSF80LCBCSVRfV0lEVEhfNCkpCisJCXZhbCA9IDA7CisJZWxzZSBpZiAoIXN0cm5jbXAoYnVmLCBTVFJOR18xX1dJRFRIXzQsIEJJVF9XSURUSF80KSkKKwkJdmFsID0gMTsKKwllbHNlIGlmICghc3RybmNtcChidWYsIFNUUk5HXzJfV0lEVEhfNCwgQklUX1dJRFRIXzQpKQorCQl2YWwgPSAyOworCWVsc2UgaWYgKCFzdHJuY21wKGJ1ZiwgU1RSTkdfM19XSURUSF80LCBCSVRfV0lEVEhfNCkpCisJCXZhbCA9IDM7CisJZWxzZSBpZiAoIXN0cm5jbXAoYnVmLCBTVFJOR180X1dJRFRIXzQsIEJJVF9XSURUSF80KSkKKwkJdmFsID0gNDsKKwllbHNlIGlmICghc3RybmNtcChidWYsIFNUUk5HXzVfV0lEVEhfNCwgQklUX1dJRFRIXzQpKQorCQl2YWwgPSA1OworCWVsc2UgaWYgKCFzdHJuY21wKGJ1ZiwgU1RSTkdfNl9XSURUSF80LCBCSVRfV0lEVEhfNCkpCisJCXZhbCA9IDY7CisJZWxzZSBpZiAoIXN0cm5jbXAoYnVmLCBTVFJOR183X1dJRFRIXzQsIEJJVF9XSURUSF80KSkKKwkJdmFsID0gNzsKKwllbHNlIGlmICghc3RybmNtcChidWYsIFNUUk5HXzhfV0lEVEhfNCwgQklUX1dJRFRIXzQpKQorCQl2YWwgPSA4OworCWVsc2UgaWYgKCFzdHJuY21wKGJ1ZiwgU1RSTkdfOV9XSURUSF80LCBCSVRfV0lEVEhfNCkpCisJCXZhbCA9IDk7CisJZWxzZSBpZiAoIXN0cm5jbXAoYnVmLCBTVFJOR19BX1dJRFRIXzQsIEJJVF9XSURUSF80KSkKKwkJdmFsID0gMTA7CisJZWxzZSBpZiAoIXN0cm5jbXAoYnVmLCBTVFJOR19CX1dJRFRIXzQsIEJJVF9XSURUSF80KSkKKwkJdmFsID0gMTE7CisJZWxzZSBpZiAoIXN0cm5jbXAoYnVmLCBTVFJOR19DX1dJRFRIXzQsIEJJVF9XSURUSF80KSkKKwkJdmFsID0gMTI7CisJZWxzZSBpZiAoIXN0cm5jbXAoYnVmLCBTVFJOR19EX1dJRFRIXzQsIEJJVF9XSURUSF80KSkKKwkJdmFsID0gMTM7CisJZWxzZSBpZiAoIXN0cm5jbXAoYnVmLCBTVFJOR19FX1dJRFRIXzQsIEJJVF9XSURUSF80KSkKKwkJdmFsID0gMTQ7CisJZWxzZSBpZiAoIXN0cm5jbXAoYnVmLCBTVFJOR19GX1dJRFRIXzQsIEJJVF9XSURUSF80KSkKKwkJdmFsID0gMTU7CisJZWxzZQorCQl2YWwgPSAweEZGRkZGRkZGOworCisJaWYgKHZhbCA8PSAxNSkKKwkJdmFsID0gdXNiMjBocWFfd3JpdGUoYWRkciwgc2hpZnQsIE1TS19XSURUSF80LCB2YWwpOworCisJcmV0dXJuIHZhbDsKK30KKwordTMyIGJpbjJzdHIodTMyIHZhbHVlLCB1MzIgd2lkdGgsIGNoYXIgKmJ1ZmZlcikKK3sKKwlpbnQgaSwgdGVtcDsKKworCXRlbXAgPSB2YWx1ZTsKKwlidWZmZXJbd2lkdGhdID0gJ1wwJzsKKwlmb3IgKGkgPSAod2lkdGggLSAxKTsgaSA+PSAwOyBpLS0pIHsKKwkJYnVmZmVyW2ldID0gJzAnOworCQlpZiAodmFsdWUgJSAyKQorCQkJYnVmZmVyW2ldID0gJzEnOworCisJCXZhbHVlIC89IDI7CisJfQorCisJcmV0dXJuIHZhbHVlOworfQorCitpbnQgcXVlcnlfcGh5X2FkZHIoc3RydWN0IGRldmljZV9ub2RlICpucCwgaW50ICpzdGFydCwgdTMyICphZGRyLCB1MzIgKmxlbmd0aCkKK3sKKwlpbnQgcmV0ID0gLUVQRVJNOworCXN0cnVjdCBvZl9waGFuZGxlX2FyZ3MgYXJnczsKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzOworCWludCBudW1waHlzID0gMDsKKwlpbnQgaW5kZXg7CisKKwlpZiAoc3RhcnQgPT0gTlVMTCB8fCBhZGRyID09IE5VTEwgfHwgbGVuZ3RoID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJbnVtcGh5cyA9IG9mX2NvdW50X3BoYW5kbGVfd2l0aF9hcmdzKG5wLCAicGh5cyIsICIjcGh5LWNlbGxzIik7CisJZm9yICggaW5kZXggPSAqc3RhcnQ7IChudW1waHlzID4gMCkgJiYgaW5kZXggPCBudW1waHlzOyBpbmRleCsrKSB7CisJCXJldCA9IG9mX3BhcnNlX3BoYW5kbGVfd2l0aF9hcmdzKG5wLCAicGh5cyIsICIjcGh5LWNlbGxzIiwKKwkJCQlpbmRleCwgJmFyZ3MpOworCQlpZiAocmV0IDwgMCkKKwkJCWJyZWFrOworCisJCWlmIChhcmdzLmFyZ3NbMF0gPT0gUEhZX1RZUEVfVVNCMikgeworCQkJcmV0ID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShhcmdzLm5wLCAwLCAmcmVzKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJb2Zfbm9kZV9wdXQoYXJncy5ucCk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCSphZGRyICAgPSByZXMuc3RhcnQ7CisJCQkqbGVuZ3RoID0gKHUzMilyZXNvdXJjZV9zaXplKCZyZXMpOworCQkJKnN0YXJ0ICA9IGluZGV4OworCQkJaWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKGFyZ3MubnApKQorCQkJCXJldCA9IC1FQUNDRVM7CisKKwkJCW9mX25vZGVfcHV0KGFyZ3MubnApOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXQgPSBpbmRleCA8IG51bXBoeXMgPyByZXQgOiAtRVBFUk07CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy91c2IvaG9zdC94aGNpLW10ay11bnVzdWFsLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tdGstdW51c3VhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkYmY0ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tdGstdW51c3VhbC5oCkBAIC0wLDAgKzEsMTk1IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqLworLyoKKyAqIHhoY2ktbXRrLXVudXN1YWxsaWIuaCAtLSB4aGNpIHRvb2xraXQgaGVhZGVyIGZpbGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgTWVkaWF0ZWsgSW5jIC0gaHR0cDovL3d3dy5tZWRpYXRlay5jb20KKyAqCisgKiBBdXRob3I6IFpoYW55b25nIFdhbmcgPHpoYW55b25nLndhbmdAbWVkaWF0ZWsuY29tPgorICovCisKKyNpZm5kZWYgX19YSENJX01US19VTlVTVUFMX0gKKyNkZWZpbmUgX19YSENJX01US19VTlVTVUFMX0gKKworI2RlZmluZSBIUUFfUFJFRklYX1NJWkUJCTQqMTAyNAorCisjZGVmaW5lIEJJVF9XSURUSF8xCQkxCisjZGVmaW5lIE1TS19XSURUSF8xCQkweDEKKyNkZWZpbmUgVkFMX01BWF9XRElUSF8xCQkweDEKKworI2RlZmluZSBTVFJOR18wX1dJRFRIXzEJCSIwIgorI2RlZmluZSBTVFJOR18xX1dJRFRIXzEJCSIxIgorCisjZGVmaW5lIEJJVF9XSURUSF8yCQkyCisjZGVmaW5lIE1TS19XSURUSF8yCQkweDMKKyNkZWZpbmUgVkFMX01BWF9XRElUSF8yCQkweDMKKyNkZWZpbmUgU1RSTkdfMF9XSURUSF8yCQkiMDAiCisjZGVmaW5lIFNUUk5HXzFfV0lEVEhfMgkJIjAxIgorI2RlZmluZSBTVFJOR18yX1dJRFRIXzIJCSIxMCIKKyNkZWZpbmUgU1RSTkdfM19XSURUSF8yCQkiMTEiCisKKworI2RlZmluZSBCSVRfV0lEVEhfMwkJMworI2RlZmluZSBNU0tfV0lEVEhfMwkJMHg3CisjZGVmaW5lIFZBTF9NQVhfV0RJVEhfMwkJMHg3CisjZGVmaW5lIFNUUk5HXzBfV0lEVEhfMwkJIjAwMCIKKyNkZWZpbmUgU1RSTkdfMV9XSURUSF8zCQkiMDAxIgorI2RlZmluZSBTVFJOR18yX1dJRFRIXzMJCSIwMTAiCisjZGVmaW5lIFNUUk5HXzNfV0lEVEhfMwkJIjAxMSIKKyNkZWZpbmUgU1RSTkdfNF9XSURUSF8zCQkiMTAwIgorI2RlZmluZSBTVFJOR181X1dJRFRIXzMJCSIxMDEiCisjZGVmaW5lIFNUUk5HXzZfV0lEVEhfMwkJIjExMCIKKyNkZWZpbmUgU1RSTkdfN19XSURUSF8zCQkiMTExIgorCisjZGVmaW5lIEJJVF9XSURUSF80CQk0CisjZGVmaW5lIE1TS19XSURUSF80CQkweGYKKyNkZWZpbmUgVkFMX01BWF9XRElUSF80CQkweGYKKyNkZWZpbmUgU1RSTkdfMF9XSURUSF80CQkiMDAwMCIKKyNkZWZpbmUgU1RSTkdfMV9XSURUSF80CQkiMDAwMSIKKyNkZWZpbmUgU1RSTkdfMl9XSURUSF80CQkiMDAxMCIKKyNkZWZpbmUgU1RSTkdfM19XSURUSF80CQkiMDAxMSIKKyNkZWZpbmUgU1RSTkdfNF9XSURUSF80CQkiMDEwMCIKKyNkZWZpbmUgU1RSTkdfNV9XSURUSF80CQkiMDEwMSIKKyNkZWZpbmUgU1RSTkdfNl9XSURUSF80CQkiMDExMCIKKyNkZWZpbmUgU1RSTkdfN19XSURUSF80CQkiMDExMSIKKyNkZWZpbmUgU1RSTkdfOF9XSURUSF80CQkiMTAwMCIKKyNkZWZpbmUgU1RSTkdfOV9XSURUSF80CQkiMTAwMSIKKyNkZWZpbmUgU1RSTkdfQV9XSURUSF80CQkiMTAxMCIKKyNkZWZpbmUgU1RSTkdfQl9XSURUSF80CQkiMTAxMSIKKyNkZWZpbmUgU1RSTkdfQ19XSURUSF80CQkiMTEwMCIKKyNkZWZpbmUgU1RSTkdfRF9XSURUSF80CQkiMTEwMSIKKyNkZWZpbmUgU1RSTkdfRV9XSURUSF80CQkiMTExMCIKKyNkZWZpbmUgU1RSTkdfRl9XSURUSF80CQkiMTExMSIKKworLyogc3BlY2lmaWMgKi8KKyNkZWZpbmUgTkFNRV9SR19VU0IyMF9JTlRSX0VOCQkiUkdfVVNCMjBfSU5UUl9FTiIKKyNkZWZpbmUgVVNCMjBfUEhZX1VTQlBIWUFDUjAJCTB4MDAKKyNkZWZpbmUgU0hGVF9SR19VU0IyMF9JTlRSX0VOCQk1CisjZGVmaW5lIEJWX1JHX1VTQjIwX0lOVFJfRU4JCUJJVCg1KQorCisjZGVmaW5lIE5BTUVfUkdfVVNCMjBfVlJUX1ZSRUZfU0VMCSJSR19VU0IyMF9WUlRfVlJFRl9TRUwiCisjZGVmaW5lIFVTQjIwX1BIWV9VU0JQSFlBQ1IxCQkweDA0CisjZGVmaW5lIFNIRlRfUkdfVVNCMjBfVlJUX1ZSRUZfU0VMCTEyCisjZGVmaW5lIEJWX1JHX1VTQjIwX1ZSVF9WUkVGX1NFTAlHRU5NQVNLKDE0LCAxMikKKworI2RlZmluZSBOQU1FX1JHX1VTQjIwX1RFUk1fVlJFRl9TRUwJIlJHX1VTQjIwX1RFUk1fVlJFRl9TRUwiCisjZGVmaW5lIFNIRlRfUkdfVVNCMjBfVEVSTV9WUkVGX1NFTAk4CisjZGVmaW5lIEJWX1JHX1VTQjIwX1RFUk1fVlJFRl9TRUwgICAgICAgR0VOTUFTSygxMCwgIDgpCisKKyNkZWZpbmUgTkFNRV9SR19VU0IyMF9IU1RYX1NSQ1RSTAkiUkdfVVNCMjBfSFNUWF9TUkNUUkwiCisjZGVmaW5lIFVTQjIwX1BIWV9VU0JQSFlBQ1I1CQkweDE0CisjZGVmaW5lIFNIRlRfUkdfVVNCMjBfSFNUWF9TUkNUUkwJMTIKKyNkZWZpbmUgQlZfUkdfVVNCMjBfSFNUWF9TUkNUUkwJCUdFTk1BU0soMTQsIDEyKQorCisjZGVmaW5lIE5BTUVfUkdfVVNCMjBfRElTQ1RICQkiUkdfVVNCMjBfRElTQ1RIIgorI2RlZmluZSBVU0IyMF9QSFlfVVNCUEhZQUNSNgkJMHgxOAorI2RlZmluZSBTSEZUX1JHX1VTQjIwX0RJU0NUSAkJNAorI2RlZmluZSBCVl9SR19VU0IyMF9ESVNDVEgJCUdFTk1BU0soOCwgNCkKKworI2RlZmluZSBOQU1FX1JHX0NIR0RUX0VOCQkiUkdfQ0hHRFRfRU4iCisjZGVmaW5lIFVTQjIwX1BIWV9VMlBIWUJDMTJDCQkweDgwCisjZGVmaW5lIFNIRlRfUkdfQ0hHRFRfRU4JCTAKKyNkZWZpbmUgQlZfUkdfQ0hHRFRfRU4JCQlCSVQoMCkKKworI2RlZmluZSBFQ0hPX0hRQShyZWcsIF9iZCwgX2J3KSAgZG8ge1wKKwl2YWwgPSB1c2IyMGhxYV9yZWFkKGFkZHIgKyAocmVnKSwgXAorCQkgU0hGVF8jI19iZCwgXAorCQkgQlZfIyNfYmQpOyBcCisJdmFsID0gYmluMnN0cih2YWwsIEJJVF9XSURUSF8jI19idywgc3RyKTsgXAorCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwgIgklLTIycyA9ICVpYiVzXG4iLCBcCisJCQlOQU1FXyMjX2JkLCBfYncsIHN0cik7IH0gd2hpbGUoMCkKKworCisjaWZkZWYgQ09ORklHX1VTQl9YSENJX01US19ERUJVR0ZTCitzdGF0aWMgaW5saW5lIHUzMiB1c2IyMGhxYV93cml0ZSh1MzIgX19pb21lbSAqYWRkciwKKwkJCQl1MzIgc2hpZnQsIHUzMiBtYXNrLCB1MzIgdmFsdWUpCit7CisJdTMyIHZhbDsKKworCXZhbCAgPSByZWFkbChhZGRyKTsKKwl2YWwgJj0gfigobWFzaykgPDwgc2hpZnQpOworCXZhbCB8PSAgKCgodmFsdWUpICYgKG1hc2spKSA8PCBzaGlmdCk7CisJd3JpdGVsKHZhbCwgYWRkcik7CisKKwlyZXR1cm4gdmFsOworfQorc3RhdGljIGlubGluZSB1MzIgdXNiMjBocWFfcmVhZCh1MzIgX19pb21lbSAqYWRkciwgdTMyIHNoaWZ0LCB1MzIgbWFzaykKK3sKKwl1MzIgdmFsOworCisJdmFsICAgPSByZWFkbChhZGRyKTsKKwl2YWwgICY9IG1hc2s7CisJdmFsID4+PSAgc2hpZnQ7CisKKwlyZXR1cm4gdmFsOworfQorCit1MzIgYmluYXJ5X3dyaXRlX3dpZHRoMSh1MzIgX19pb21lbSAqYWRkciwKKwkJCQl1MzIgc2hpZnQsIGNvbnN0IGNoYXIgKmJ1Zik7Cit1MzIgYmluYXJ5X3dyaXRlX3dpZHRoMyh1MzIgX19pb21lbSAqYWRkciwKKwkJCQl1MzIgc2hpZnQsIGNvbnN0IGNoYXIgKmJ1Zik7Cit1MzIgYmluYXJ5X3dyaXRlX3dpZHRoNCh1MzIgX19pb21lbSAqYWRkciwKKwkJCQl1MzIgc2hpZnQsIGNvbnN0IGNoYXIgKmJ1Zik7Cit1MzIgYmluMnN0cih1MzIgdmFsdWUsIHUzMiB3aWR0aCwgY2hhciAqYnVmZmVyKTsKK2ludCBxdWVyeV9waHlfYWRkcihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBpbnQgKnN0YXJ0LAorCQkJCXUzMiAqYWRkciwgdTMyICpsZW5ndGgpOworc3RhdGljIGlubGluZSBpbnQgcmVtYWluaW5nKHN0cnVjdCB4aGNpX2hjZF9tdGsgKm10aykKK3sKKwl1MzIgc3VycGx1cyA9IDA7CisJaWYgKG10ayAmJiBtdGstPmhxYV9wb3MgPCBtdGstPmhxYV9zaXplKQorCQlzdXJwbHVzID0gbXRrLT5ocWFfc2l6ZSAtIG10ay0+aHFhX3BvczsKKworCXJldHVybiBzdXJwbHVzOworfQorCisjZGVmaW5lIGhxYV9pbmZvKG10aywgZm10LCBhcmdzLi4uKSAgXAorCShtdGspLT5ocWFfcG9zICs9IHNucHJpbnRmKChtdGspLT5ocWFfYnVmICsgKG10ayktPmhxYV9wb3MsIFwKKwkJcmVtYWluaW5nKG10ayksIGZtdCwgIyMgYXJncykKKworI2RlZmluZSBERVZJQ0VfQVRUUl9ERUNMQVJFRChfbmFtZSkgXAorCQlleHRlcm4gc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfIyNfbmFtZTsKKyNkZWZpbmUgVU5VU1VBTF9ERVZJQ0VfQVRUUihfbmFtZSkgICZkZXZfYXR0cl8jI19uYW1lCisjZWxzZQorc3RhdGljIGlubGluZSB1MzIgdXNiMjBocWFfd3JpdGUodTMyIF9faW9tZW0gKmFkZHIsCisJCQkJCXUzMiBzaGlmdCwgdTMyIG1hc2ssIHUzMiB2YWx1ZSkKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgdTMyIHVzYjIwaHFhX3JlYWQodTMyIF9faW9tZW0gKmFkZHIsIHUzMiBzaGlmdCwgdTMyIG1hc2spCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIHUzMiBiaW5hcnlfd3JpdGVfd2lkdGgxKHUzMiBfX2lvbWVtICphZGRyLAorCQkJCQl1MzIgc2hpZnQsIGNvbnN0IGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gMDsKK307CitzdGF0aWMgaW5saW5lIHUzMiBiaW5hcnlfd3JpdGVfd2lkdGgzKHUzMiBfX2lvbWVtICphZGRyLAorCQkJCQl1MzIgc2hpZnQsIGNvbnN0IGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gMDsKK307CitzdGF0aWMgaW5saW5lIHUzMiBiaW5hcnlfd3JpdGVfd2lkdGg0KHUzMiBfX2lvbWVtICphZGRyLAorCQkJCQl1MzIgc2hpZnQsIGNvbnN0IGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gMDsKK307CitzdGF0aWMgaW5saW5lIHUzMiBiaW4yc3RyKHUzMiB2YWx1ZSwgdTMyIHdpZHRoLCBjaGFyICpidWZmZXIpCit7CisJcmV0dXJuIDA7Cit9Oworc3RhdGljIGlubGluZSBpbnQgcXVlcnlfcGh5X2FkZHIoc3RydWN0IGRldmljZV9ub2RlICpucCwgaW50ICpzdGFydCwKKwkJCQkJdTMyICphZGRyLCB1MzIgKmxlbmd0aCkKK3sKKwlyZXR1cm4gLUVQRVJNOworfQorc3RhdGljIGlubGluZSBpbnQgcmVtYWluaW5nKGludCB3cm90ZSkKK3sKKwlyZXR1cm4gMDsKK30KKyNkZWZpbmUgaHFhX2luZm8obXRrLCBmbXQsIGFyZ3MuLi4pCisjZGVmaW5lIERFVklDRV9BVFRSX0RFQ0xBUkVEKC4uLikKKyNlbmRpZgorCisjaW5jbHVkZSAidW51c3VhbC1kZWNsYXJhdGlvbi5oIgorCisjZW5kaWYgLyogX19YSENJX01US19VTlVTVUFMX0ggKi8KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy91c2IvaG9zdC94aGNpLW10ay12cnQtdnJlZi5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbXRrLXZydC12cmVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMwZWY3NQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvZHJpdmVycy91c2IvaG9zdC94aGNpLW10ay12cnQtdnJlZi5jCkBAIC0wLDAgKzEsMTY0IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIHhIQ0kgaG9zdCBjb250cm9sbGVyIHRvb2xraXQgZHJpdmVyIGZvciB2cnQgdnJlZgorICoKKyAqIENvcHlyaWdodCAoQykgMjAyMSAgTWVkaWFUZWsgSW5jLgorICoKKyAqICBBdXRob3I6IFpoYW55b25nIFdhbmcgPHpoYW55b25nLndhbmdAbWVkaWF0ZWsuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSAieGhjaS1tdGsuaCIKKyNpbmNsdWRlICJ4aGNpLW10ay10ZXN0LmgiCisjaW5jbHVkZSAieGhjaS1tdGstdW51c3VhbC5oIgorCitzdGF0aWMgc3NpemVfdCBSR19VU0IyMF9WUlRfVlJFRl9TRUxfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB4aGNpX2hjZF9tdGsgKm10ayA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBtdGstPmhjZDsKKwlzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kgPSBoY2RfdG9feGhjaShoY2QpOworCXNzaXplX3QgY250ID0gMDsKKwl2b2lkIF9faW9tZW0gKmFkZHI7CisJdTMyIHZhbDsKKwl1MzIgaTsKKwlpbnQgcG9ydHM7CisJY2hhciBzdHJbMzJdOworCWludCBpbmRleCA9IDA7CisJdTMyIGlvLCBsZW5ndGg7CisJaW50IHJldDsKKworCXBvcnRzID0gbXRrLT5udW1fdTNfcG9ydHMgKyBtdGstPm51bV91Ml9wb3J0czsKKwljbnQgKz0gc3ByaW50ZihidWYgKyBjbnQsICIgUkdfVVNCMjBfVlJUX1ZSRUZfU0VMIHVzYWdlOlxuIik7CisJY250ICs9IHNwcmludGYoYnVmICsgY250LAorCQkiICAgZWNobyB1MnAgaW5kZXggM2IwMTEgPiBSR19VU0IyMF9WUlRfVlJFRl9TRUxcbiIpOworCWlmIChtdGstPm51bV91M19wb3J0cyArIDEgIT0gcG9ydHMpCisJCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwgIglwYXJhbWV0ZXI6IHUycDogJWkgfiAlaVxuIiwKKwkJCQkJbXRrLT5udW1fdTNfcG9ydHMgKyAxLCBwb3J0cyk7CisJZWxzZQorCQljbnQgKz0gc3ByaW50ZihidWYgKyBjbnQsICIJcGFyYW1ldGVyOiB1MnA6ICVpXG4iLAorCQkJCQltdGstPm51bV91M19wb3J0cyArIDEpOworCisJaWYgKG10ay0+bnVtX3UyX3BvcnRzID4gMSkKKwkJY250ICs9IHNwcmludGYoYnVmICsgY250LCAiCXBhcmFtZXRlcjogaW5kZXg6IDAgfiAlaVxuIiwKKwkJCSAgICAgICBtdGstPm51bV91Ml9wb3J0cyk7CisJZWxzZQorCQljbnQgKz0gc3ByaW50ZihidWYgKyBjbnQsICIJcGFyYW1ldGVyOiBpbmRleDogMFxuIik7CisKKwljbnQgKz0gc3ByaW50ZihidWYgKyBjbnQsCisJCQkgIiBlLmcuOiBlY2hvIDIgMCAzYjEwMSA+IFJHX1VTQjIwX1ZSVF9WUkVGX1NFTFxuIik7CisJY250ICs9IHNwcmludGYoYnVmICsgY250LAorCQkiICBwb3J0MiBiaW5kaW5nIHBoeSAwLCB0dW5lIDNiJzAxMCBhcyBWUlRfVlJFRiB2YWx1ZVxuIik7CisKKwljbnQgKz0gc3ByaW50ZihidWYgKyBjbnQsCisJCQkiXG49PT09PT09PT1jdXJyZW50IEhRQSBzZXR0aW5nIGNoZWNrPT09PT09PT09XG4iKTsKKwlmb3IgKGkgPSAxOyBpIDw9IHBvcnRzOyBpKyspIHsKKwkJYWRkciA9ICZ4aGNpLT5vcF9yZWdzLT5wb3J0X3N0YXR1c19iYXNlICsKKwkJCU5VTV9QT1JUX1JFR1MgKiAoKGkgLSAxKSAmIDB4ZmYpOworCQl2YWwgPSByZWFkbChhZGRyKTsKKwkJaWYgKGkgPD0gbXRrLT5udW1fdTNfcG9ydHMpIHsKKwkJCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwKKwkJCQkgICAgICAgIlVTQjMwIFBvcnQlaTogMHglMDhYXG4iLCBpLCB2YWwpOworCQl9IGVsc2UgeworCQkJY250ICs9IHNwcmludGYoYnVmICsgY250LAorCQkJCSAgICAgICAiVVNCMjAgUG9ydCVpOiAweCUwOFhcbiIsIGksIHZhbCk7CisKKwkJCXJldCA9IHF1ZXJ5X3BoeV9hZGRyKGRldi0+b2Zfbm9kZSwKKwkJCQkJCSAmaW5kZXgsICZpbywgJmxlbmd0aCk7CisJCQlpZiAocmV0ICYmIHJldCAhPSAtRUFDQ0VTKSB7CisJCQkJaWYgKHJldCA9PSAtRVBFUk0pCisJCQkJCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwKKwkJCQkJIlVTQjIwIFBvcnQlaSAoUGh5JWk6IGFic2VudClcbiIsCisJCQkJCWksIGluZGV4KTsKKwkJCQllbHNlCisJCQkJCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwKKwkJCQkJIlVTQjIwIFBvcnQlaSAoUGh5JWkpIGZhaWx1cmUgJWlcbiIsCisJCQkJCQkgaSwgaW5kZXgsIHJldCk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWNudCArPSBzcHJpbnRmKGJ1ZiArIGNudCwKKwkJCQkiVVNCMjAgUG9ydCVpIChQaHklaTolc2FibGUpOiAweCUwOFggMHglMDhYXG4iLAorCQkJCWksIGluZGV4LCByZXQgPyAiIGRpcyIgOiAiIGVuIiwgaW8sIGxlbmd0aCk7CisKKwkJCWFkZHIgICA9IGlvcmVtYXBfbm9jYWNoZShpbywgbGVuZ3RoKTsKKwkJCWFkZHIgICs9IChsZW5ndGggIT0gMHgxMDApID8gMHgzMDAgOiAwOworCisJCQlIUUFfSU5GT1JNQUNUSU9OX0NPTExFQ1RTKCk7CisKKwkJCWlvdW5tYXAoYWRkcik7CisJCQlpbmRleCArKzsKKwkJfQorCX0KKworCWlmIChtdGstPmhxYV9wb3MpIHsKKwkJY250ICs9IHNwcmludGYoYnVmICsgY250LCAiJXMiLCBtdGstPmhxYV9idWYpOyAgICAgICAgICAKKwkJbXRrLT5ocWFfcG9zID0gMDsKKwl9CisKKwlyZXR1cm4gY250OworfQorCisKK3N0YXRpYyBzc2l6ZV90IFJHX1VTQjIwX1ZSVF9WUkVGX1NFTF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pCit7CisJdTMyIHZhbDsKKwl1MzIgaW87CisJdTMyIGxlbmd0aDsKKwlpbnQgcG9ydHM7CisJaW50IHdvcmRzOworCWludCBwb3J0OworCWludCBpbmRleDsKKwlpbnQgcmV0OworCWNoYXIgKnN0ciA9IE5VTEw7CisJdm9pZCBfX2lvbWVtICphZGRyOworCXN0cnVjdCB4aGNpX2hjZF9tdGsgKm10ayAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgICpub2RlID0gZGV2LT5vZl9ub2RlOworCisJcG9ydHMgPSBtdGstPm51bV91M19wb3J0cyArIG10ay0+bnVtX3UyX3BvcnRzOworCW10ay0+aHFhX3BvcyA9IDA7CisKKwltZW1zZXQobXRrLT5ocWFfYnVmLCAwLCBtdGstPmhxYV9zaXplKTsKKworCXN0ciA9IGt6YWxsb2MobiwgR0ZQX0FUT01JQyk7CisKKwlocWFfaW5mbyhtdGssICJSR19VU0IyMF9WUlRfVlJFRl9TRUwoJWx1KTogJXNcbiIsIG4sIGJ1Zik7CisKKwl3b3JkcyA9IHNzY2FuZihidWYsICIlaSAlaSAzYiUzWzAsMV0iLCAmcG9ydCwgJmluZGV4LCBzdHIpOworCWlmICgod29yZHMgIT0gMykgfHwKKwkgICAgKHBvcnQgPCBtdGstPm51bV91M19wb3J0cyB8fCBwb3J0ID4gcG9ydHMpKSB7CisJCWhxYV9pbmZvKG10aywgIkNoZWNrIHBhcmFtcyglaSk6XCIgJWkgJWkgJXNcIiwgUGxlYXNlIVxuIiwKKwkJCXdvcmRzLCBwb3J0LCBpbmRleCwgc3RyKTsKKworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycm9yOworCX0KKworCWhxYV9pbmZvKG10aywgIiBwYXJhbXM6ICVpICVpICVzXG4iLAorCQlwb3J0LCBpbmRleCwgc3RyKTsKKworCXJldCA9IHF1ZXJ5X3BoeV9hZGRyKG5vZGUsICZpbmRleCwgJmlvLCAmbGVuZ3RoKTsKKwlpZiAocmV0ICYmIHJldCAhPSAtRUFDQ0VTKSAKKwkJZ290byBlcnJvcjsKKworCWlvICs9IChsZW5ndGggIT0gMHgxMDApID8gMHgzMDAgOiAwOworCWlvICs9IFVTQjIwX1BIWV9VU0JQSFlBQ1IxOworCisJYWRkciA9IGlvcmVtYXBfbm9jYWNoZShpbywgNCk7CisJdmFsID0gYmluYXJ5X3dyaXRlX3dpZHRoMyhhZGRyLCBTSEZUX1JHX1VTQjIwX1ZSVF9WUkVGX1NFTCwgc3RyKTsKKwlocWFfaW5mbyhtdGssICJQb3J0JWkoUGh5JWkpWzB4JTA4WF06IDB4JTA4WCBidXQgMHglMDhYXG4iLAorCQlwb3J0LCBpbmRleCwgaW8sIHZhbCwgcmVhZGwoYWRkcikpOworCisJaW91bm1hcChhZGRyKTsKKwlyZXQgPSBuOworICAgICAgCitlcnJvcjoKKwlrZnJlZShzdHIpOworCXJldHVybiByZXQ7Cit9CitERVZJQ0VfQVRUUl9SVyhSR19VU0IyMF9WUlRfVlJFRl9TRUwpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL210Nzk4MS1jbGsuaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9tdDc5ODEtY2xrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVlYmM0NwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9tdDc5ODEtY2xrLmgKQEAgLTAsMCArMSwyNzQgQEAKKy8qDQorICogQ29weXJpZ2h0IChjKSAyMDIxIE1lZGlhVGVrIEluYy4NCisgKiBBdXRob3I6IFdlbnpoZW4uWXUgPHdlbnpoZW4ueXVAbWVkaWF0ZWsuY29tPg0KKyAqDQorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcw0KKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLg0KKyAqDQorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisgKi8NCisNCisjaWZuZGVmIF9EVF9CSU5ESU5HU19DTEtfTVQ3OTgxX0gNCisjZGVmaW5lIF9EVF9CSU5ESU5HU19DTEtfTVQ3OTgxX0gNCisNCisvKiBJTkZSQUNGRyAqLw0KKw0KKyNkZWZpbmUgQ0tfSU5GUkFfQ0tfRjI2TQkJMA0KKyNkZWZpbmUgQ0tfSU5GUkFfVUFSVAkJCTENCisjZGVmaW5lIENLX0lORlJBX0lTUEkwCQkJMg0KKyNkZWZpbmUgQ0tfSU5GUkFfSTJDCQkJMw0KKyNkZWZpbmUgQ0tfSU5GUkFfSVNQSTEJCQk0DQorI2RlZmluZSBDS19JTkZSQV9QV00JCQk1DQorI2RlZmluZSBDS19JTkZSQV82Nk1fTUNLCQk2DQorI2RlZmluZSBDS19JTkZSQV9DS19GMzJLCQk3DQorI2RlZmluZSBDS19JTkZSQV9QQ0lFX0NLCQk4DQorI2RlZmluZSBDS19JTkZSQV9QV01fQkNLCQk5DQorI2RlZmluZSBDS19JTkZSQV9QV01fQ0sxCQkxMA0KKyNkZWZpbmUgQ0tfSU5GUkFfUFdNX0NLMgkJMTENCisjZGVmaW5lIENLX0lORlJBXzEzM01fSENLCQkxMg0KKyNkZWZpbmUgQ0tfSU5GUkFfNjZNX1BIQ0sJCTEzDQorI2RlZmluZSBDS19JTkZSQV9GQVVEX0xfQ0sJCTE0DQorI2RlZmluZSBDS19JTkZSQV9GQVVEX0FVRF9DSwkJMTUNCisjZGVmaW5lIENLX0lORlJBX0ZBVURfRUcyX0NLCQkxNg0KKyNkZWZpbmUgQ0tfSU5GUkFfSTJDU19DSwkJMTcNCisjZGVmaW5lIENLX0lORlJBX01VWF9VQVJUMAkJMTgNCisjZGVmaW5lIENLX0lORlJBX01VWF9VQVJUMQkJMTkNCisjZGVmaW5lIENLX0lORlJBX01VWF9VQVJUMgkJMjANCisjZGVmaW5lIENLX0lORlJBX05GSV9DSwkJCTIxDQorI2RlZmluZSBDS19JTkZSQV9TUElORklfQ0sJCTIyDQorI2RlZmluZSBDS19JTkZSQV9NVVhfU1BJMAkJMjMNCisjZGVmaW5lIENLX0lORlJBX01VWF9TUEkxCQkyNA0KKyNkZWZpbmUgQ0tfSU5GUkFfTVVYX1NQSTIJCTI1DQorI2RlZmluZSBDS19JTkZSQV9SVENfMzJLCQkyNg0KKyNkZWZpbmUgQ0tfSU5GUkFfRk1TRENfQ0sJCTI3DQorI2RlZmluZSBDS19JTkZSQV9GTVNEQ19IQ0tfQ0sJCTI4DQorI2RlZmluZSBDS19JTkZSQV9QRVJJXzEzM00JCTI5DQorI2RlZmluZSBDS19JTkZSQV8xMzNNX1BIQ0sJCTMwDQorI2RlZmluZSBDS19JTkZSQV9VU0JfU1lTX0NLCQkzMQ0KKyNkZWZpbmUgQ0tfSU5GUkFfVVNCX0NLCQkJMzINCisjZGVmaW5lIENLX0lORlJBX1VTQl9YSENJX0NLCQkzMw0KKyNkZWZpbmUgQ0tfSU5GUkFfUENJRV9HRk1VWF9UTF9PX1BSRQkzNA0KKyNkZWZpbmUgQ0tfSU5GUkFfRjI2TV9DSzAJCTM1DQorI2RlZmluZSBDS19JTkZSQV8xMzNNX01DSwkJMzYNCisjZGVmaW5lIENMS19JTkZSQV9OUl9DTEsJCTM3DQorDQorLyogVE9QQ0tHRU4gKi8NCisNCisjZGVmaW5lIENLX1RPUF9DQl9DS1NRXzQwTQkJMA0KKyNkZWZpbmUgQ0tfVE9QX0NCX01fNDE2TQkJMQ0KKyNkZWZpbmUgQ0tfVE9QX0NCX01fRDIJCQkyDQorI2RlZmluZSBDS19UT1BfQ0JfTV9EMwkJCTMNCisjZGVmaW5lIENLX1RPUF9NX0QzX0QyCQkJNA0KKyNkZWZpbmUgQ0tfVE9QX0NCX01fRDQJCQk1DQorI2RlZmluZSBDS19UT1BfQ0JfTV9EOAkJCTYNCisjZGVmaW5lIENLX1RPUF9NX0Q4X0QyCQkJNw0KKyNkZWZpbmUgQ0tfVE9QX0NCX01NXzcyME0JCTgNCisjZGVmaW5lIENLX1RPUF9DQl9NTV9EMgkJCTkNCisjZGVmaW5lIENLX1RPUF9DQl9NTV9EMwkJCTEwDQorI2RlZmluZSBDS19UT1BfQ0JfTU1fRDNfRDUJCTExDQorI2RlZmluZSBDS19UT1BfQ0JfTU1fRDQJCQkxMg0KKyNkZWZpbmUgQ0tfVE9QX0NCX01NX0Q2CQkJMTMNCisjZGVmaW5lIENLX1RPUF9NTV9ENl9EMgkJCTE0DQorI2RlZmluZSBDS19UT1BfQ0JfTU1fRDgJCQkxNQ0KKyNkZWZpbmUgQ0tfVE9QX0NCX0FQTEwyXzE5Nk0JCTE2DQorI2RlZmluZSBDS19UT1BfQVBMTDJfRDIJCQkxNw0KKyNkZWZpbmUgQ0tfVE9QX0FQTEwyX0Q0CQkJMTgNCisjZGVmaW5lIENLX1RPUF9ORVQxXzI1MDBNCQkxOQ0KKyNkZWZpbmUgQ0tfVE9QX0NCX05FVDFfRDQJCTIwDQorI2RlZmluZSBDS19UT1BfQ0JfTkVUMV9ENQkJMjENCisjZGVmaW5lIENLX1RPUF9ORVQxX0Q1X0QyCQkyMg0KKyNkZWZpbmUgQ0tfVE9QX05FVDFfRDVfRDQJCTIzDQorI2RlZmluZSBDS19UT1BfQ0JfTkVUMV9EOAkJMjQNCisjZGVmaW5lIENLX1RPUF9ORVQxX0Q4X0QyCQkyNQ0KKyNkZWZpbmUgQ0tfVE9QX05FVDFfRDhfRDQJCTI2DQorI2RlZmluZSBDS19UT1BfQ0JfTkVUMl84MDBNCQkyNw0KKyNkZWZpbmUgQ0tfVE9QX0NCX05FVDJfRDIJCTI4DQorI2RlZmluZSBDS19UT1BfQ0JfTkVUMl9ENAkJMjkNCisjZGVmaW5lIENLX1RPUF9ORVQyX0Q0X0QyCQkzMA0KKyNkZWZpbmUgQ0tfVE9QX05FVDJfRDRfRDQJCTMxDQorI2RlZmluZSBDS19UT1BfQ0JfTkVUMl9ENgkJMzINCisjZGVmaW5lIENLX1RPUF9DQl9XRURNQ1VfMjA4TQkJMzMNCisjZGVmaW5lIENLX1RPUF9DQl9TR01fMzI1TQkJMzQNCisjZGVmaW5lIENLX1RPUF9DS1NRXzQwTV9EMgkJMzUNCisjZGVmaW5lIENLX1RPUF9DQl9SVENfMzJLCQkzNg0KKyNkZWZpbmUgQ0tfVE9QX0NCX1JUQ18zMlA3SwkJMzcNCisjZGVmaW5lIENLX1RPUF9VU0JfVFgyNTBNCQkzOA0KKyNkZWZpbmUgQ0tfVE9QX0ZBVUQJCQkzOQ0KKyNkZWZpbmUgQ0tfVE9QX05GSTFYCQkJNDANCisjZGVmaW5lIENLX1RPUF9VU0JfRVFfUlgyNTBNCQk0MQ0KKyNkZWZpbmUgQ0tfVE9QX1VTQl9DRFJfQ0sJCTQyDQorI2RlZmluZSBDS19UT1BfVVNCX0xOMF9DSwkJNDMNCisjZGVmaW5lIENLX1RPUF9TUElORklfQkNLCQk0NA0KKyNkZWZpbmUgQ0tfVE9QX1NQSQkJCTQ1DQorI2RlZmluZSBDS19UT1BfU1BJTV9NU1QJCQk0Ng0KKyNkZWZpbmUgQ0tfVE9QX1VBUlRfQkNLCQkJNDcNCisjZGVmaW5lIENLX1RPUF9QV01fQkNLCQkJNDgNCisjZGVmaW5lIENLX1RPUF9JMkNfQkNLCQkJNDkNCisjZGVmaW5lIENLX1RPUF9QRVhUUF9UTAkJCTUwDQorI2RlZmluZSBDS19UT1BfRU1NQ18yMDhNCQk1MQ0KKyNkZWZpbmUgQ0tfVE9QX0VNTUNfNDAwTQkJNTINCisjZGVmaW5lIENLX1RPUF9EUkFNQ19SRUYJCTUzDQorI2RlZmluZSBDS19UT1BfRFJBTUNfTUQzMgkJNTQNCisjZGVmaW5lIENLX1RPUF9TWVNBWEkJCQk1NQ0KKyNkZWZpbmUgQ0tfVE9QX1NZU0FQQgkJCTU2DQorI2RlZmluZSBDS19UT1BfQVJNX0RCX01BSU4JCTU3DQorI2RlZmluZSBDS19UT1BfQVAyQ05OX0hPU1QJCTU4DQorI2RlZmluZSBDS19UT1BfTkVUU1lTCQkJNTkNCisjZGVmaW5lIENLX1RPUF9ORVRTWVNfNTAwTQkJNjANCisjZGVmaW5lIENLX1RPUF9ORVRTWVNfV0VEX01DVQkJNjENCisjZGVmaW5lIENLX1RPUF9ORVRTWVNfMlgJCTYyDQorI2RlZmluZSBDS19UT1BfU0dNXzMyNU0JCQk2Mw0KKyNkZWZpbmUgQ0tfVE9QX1NHTV9SRUcJCQk2NA0KKyNkZWZpbmUgQ0tfVE9QX0YyNk0JCQk2NQ0KKyNkZWZpbmUgQ0tfVE9QX0VJUDk3QgkJCTY2DQorI2RlZmluZSBDS19UT1BfVVNCM19QSFkJCQk2Nw0KKyNkZWZpbmUgQ0tfVE9QX0FVRAkJCTY4DQorI2RlZmluZSBDS19UT1BfQTFTWVMJCQk2OQ0KKyNkZWZpbmUgQ0tfVE9QX0FVRF9MCQkJNzANCisjZGVmaW5lIENLX1RPUF9BX1RVTkVSCQkJNzENCisjZGVmaW5lIENLX1RPUF9VMlUzX1JFRgkJCTcyDQorI2RlZmluZSBDS19UT1BfVTJVM19TWVMJCQk3Mw0KKyNkZWZpbmUgQ0tfVE9QX1UyVTNfWEhDSQkJNzQNCisjZGVmaW5lIENLX1RPUF9VU0JfRlJNQ05UCQk3NQ0KKyNkZWZpbmUgQ0tfVE9QX05GSTFYX1NFTAkJNzYNCisjZGVmaW5lIENLX1RPUF9TUElORklfU0VMCQk3Nw0KKyNkZWZpbmUgQ0tfVE9QX1NQSV9TRUwJCQk3OA0KKyNkZWZpbmUgQ0tfVE9QX1NQSU1fTVNUX1NFTAkJNzkNCisjZGVmaW5lIENLX1RPUF9VQVJUX1NFTAkJCTgwDQorI2RlZmluZSBDS19UT1BfUFdNX1NFTAkJCTgxDQorI2RlZmluZSBDS19UT1BfSTJDX1NFTAkJCTgyDQorI2RlZmluZSBDS19UT1BfUEVYVFBfVExfU0VMCQk4Mw0KKyNkZWZpbmUgQ0tfVE9QX0VNTUNfMjA4TV9TRUwJCTg0DQorI2RlZmluZSBDS19UT1BfRU1NQ180MDBNX1NFTAkJODUNCisjZGVmaW5lIENLX1RPUF9GMjZNX1NFTAkJCTg2DQorI2RlZmluZSBDS19UT1BfRFJBTUNfU0VMCQk4Nw0KKyNkZWZpbmUgQ0tfVE9QX0RSQU1DX01EMzJfU0VMCQk4OA0KKyNkZWZpbmUgQ0tfVE9QX1NZU0FYSV9TRUwJCTg5DQorI2RlZmluZSBDS19UT1BfU1lTQVBCX1NFTAkJOTANCisjZGVmaW5lIENLX1RPUF9BUk1fREJfTUFJTl9TRUwJCTkxDQorI2RlZmluZSBDS19UT1BfQVAyQ05OX0hPU1RfU0VMCQk5Mg0KKyNkZWZpbmUgQ0tfVE9QX05FVFNZU19TRUwJCTkzDQorI2RlZmluZSBDS19UT1BfTkVUU1lTXzUwME1fU0VMCQk5NA0KKyNkZWZpbmUgQ0tfVE9QX05FVFNZU19NQ1VfU0VMCQk5NQ0KKyNkZWZpbmUgQ0tfVE9QX05FVFNZU18yWF9TRUwJCTk2DQorI2RlZmluZSBDS19UT1BfU0dNXzMyNU1fU0VMCQk5Nw0KKyNkZWZpbmUgQ0tfVE9QX1NHTV9SRUdfU0VMCQk5OA0KKyNkZWZpbmUgQ0tfVE9QX0VJUDk3Ql9TRUwJCTk5DQorI2RlZmluZSBDS19UT1BfVVNCM19QSFlfU0VMCQkxMDANCisjZGVmaW5lIENLX1RPUF9BVURfU0VMCQkJMTAxDQorI2RlZmluZSBDS19UT1BfQTFTWVNfU0VMCQkxMDINCisjZGVmaW5lIENLX1RPUF9BVURfTF9TRUwJCTEwMw0KKyNkZWZpbmUgQ0tfVE9QX0FfVFVORVJfU0VMCQkxMDQNCisjZGVmaW5lIENLX1RPUF9VMlUzX1NFTAkJCTEwNQ0KKyNkZWZpbmUgQ0tfVE9QX1UyVTNfU1lTX1NFTAkJMTA2DQorI2RlZmluZSBDS19UT1BfVTJVM19YSENJX1NFTAkJMTA3DQorI2RlZmluZSBDS19UT1BfVVNCX0ZSTUNOVF9TRUwJCTEwOA0KKyNkZWZpbmUgQ0tfVE9QX0FVRF9JMlNfTQkJMTA5DQorI2RlZmluZSBDTEtfVE9QX05SX0NMSwkJCTExMA0KKw0KKy8qIElORlJBQ0ZHX0FPICovDQorDQorI2RlZmluZSBDS19JTkZSQV9VQVJUMF9TRUwJCTANCisjZGVmaW5lIENLX0lORlJBX1VBUlQxX1NFTAkJMQ0KKyNkZWZpbmUgQ0tfSU5GUkFfVUFSVDJfU0VMCQkyDQorI2RlZmluZSBDS19JTkZSQV9TUEkwX1NFTAkJMw0KKyNkZWZpbmUgQ0tfSU5GUkFfU1BJMV9TRUwJCTQNCisjZGVmaW5lIENLX0lORlJBX1NQSTJfU0VMCQk1DQorI2RlZmluZSBDS19JTkZSQV9QV00xX1NFTAkJNg0KKyNkZWZpbmUgQ0tfSU5GUkFfUFdNMl9TRUwJCTcNCisjZGVmaW5lIENLX0lORlJBX1BXTTNfU0VMCQk4DQorI2RlZmluZSBDS19JTkZSQV9QV01fQlNFTAkJOQ0KKyNkZWZpbmUgQ0tfSU5GUkFfUENJRV9TRUwJCTEwDQorI2RlZmluZSBDS19JTkZSQV9HUFRfU1RBCQkxMQ0KKyNkZWZpbmUgQ0tfSU5GUkFfUFdNX0hDSwkJMTINCisjZGVmaW5lIENLX0lORlJBX1BXTV9TVEEJCTEzDQorI2RlZmluZSBDS19JTkZSQV9QV00xX0NLCQkxNA0KKyNkZWZpbmUgQ0tfSU5GUkFfUFdNMl9DSwkJMTUNCisjZGVmaW5lIENLX0lORlJBX1BXTTNfQ0sJCTE2DQorI2RlZmluZSBDS19JTkZSQV9DUV9ETUFfQ0sJCTE3DQorI2RlZmluZSBDS19JTkZSQV9BVURfQlVTX0NLCQkxOA0KKyNkZWZpbmUgQ0tfSU5GUkFfQVVEXzI2TV9DSwkJMTkNCisjZGVmaW5lIENLX0lORlJBX0FVRF9MX0NLCQkyMA0KKyNkZWZpbmUgQ0tfSU5GUkFfQVVEX0FVRF9DSwkJMjENCisjZGVmaW5lIENLX0lORlJBX0FVRF9FRzJfQ0sJCTIyDQorI2RlZmluZSBDS19JTkZSQV9EUkFNQ18yNk1fQ0sJCTIzDQorI2RlZmluZSBDS19JTkZSQV9EQkdfQ0sJCQkyNA0KKyNkZWZpbmUgQ0tfSU5GUkFfQVBfRE1BX0NLCQkyNQ0KKyNkZWZpbmUgQ0tfSU5GUkFfU0VKX0NLCQkJMjYNCisjZGVmaW5lIENLX0lORlJBX1NFSl8xM01fQ0sJCTI3DQorI2RlZmluZSBDS19JTkZSQV9USEVSTV9DSwkJMjgNCisjZGVmaW5lIENLX0lORlJBX0kyQ09fQ0sJCTI5DQorI2RlZmluZSBDS19JTkZSQV9VQVJUMF9DSwkJMzANCisjZGVmaW5lIENLX0lORlJBX1VBUlQxX0NLCQkzMQ0KKyNkZWZpbmUgQ0tfSU5GUkFfVUFSVDJfQ0sJCTMyDQorI2RlZmluZSBDS19JTkZSQV9TUEkyX0NLCQkzMw0KKyNkZWZpbmUgQ0tfSU5GUkFfU1BJMl9IQ0tfQ0sJCTM0DQorI2RlZmluZSBDS19JTkZSQV9ORkkxX0NLCQkzNQ0KKyNkZWZpbmUgQ0tfSU5GUkFfU1BJTkZJMV9DSwkJMzYNCisjZGVmaW5lIENLX0lORlJBX05GSV9IQ0tfQ0sJCTM3DQorI2RlZmluZSBDS19JTkZSQV9TUEkwX0NLCQkzOA0KKyNkZWZpbmUgQ0tfSU5GUkFfU1BJMV9DSwkJMzkNCisjZGVmaW5lIENLX0lORlJBX1NQSTBfSENLX0NLCQk0MA0KKyNkZWZpbmUgQ0tfSU5GUkFfU1BJMV9IQ0tfQ0sJCTQxDQorI2RlZmluZSBDS19JTkZSQV9GUlRDX0NLCQk0Mg0KKyNkZWZpbmUgQ0tfSU5GUkFfTVNEQ19DSwkJNDMNCisjZGVmaW5lIENLX0lORlJBX01TRENfSENLX0NLCQk0NA0KKyNkZWZpbmUgQ0tfSU5GUkFfTVNEQ18xMzNNX0NLCQk0NQ0KKyNkZWZpbmUgQ0tfSU5GUkFfTVNEQ182Nk1fQ0sJCTQ2DQorI2RlZmluZSBDS19JTkZSQV9BRENfMjZNX0NLCQk0Nw0KKyNkZWZpbmUgQ0tfSU5GUkFfQURDX0ZSQ19DSwkJNDgNCisjZGVmaW5lIENLX0lORlJBX0ZCSVNUMkZQQ19DSwkJNDkNCisjZGVmaW5lIENLX0lORlJBX0kyQ19NQ0tfQ0sJCTUwDQorI2RlZmluZSBDS19JTkZSQV9JMkNfUENLX0NLCQk1MQ0KKyNkZWZpbmUgQ0tfSU5GUkFfSVVTQl8xMzNfQ0sJCTUyDQorI2RlZmluZSBDS19JTkZSQV9JVVNCXzY2TV9DSwkJNTMNCisjZGVmaW5lIENLX0lORlJBX0lVU0JfU1lTX0NLCQk1NA0KKyNkZWZpbmUgQ0tfSU5GUkFfSVVTQl9DSwkJNTUNCisjZGVmaW5lIENLX0lORlJBX0lQQ0lFX0NLCQk1Ng0KKyNkZWZpbmUgQ0tfSU5GUkFfSVBDSUVfUElQRV9DSyAgCTU3DQorI2RlZmluZSBDS19JTkZSQV9JUENJRVJfQ0sJCTU4DQorI2RlZmluZSBDS19JTkZSQV9JUENJRUJfQ0sJCTU5DQorI2RlZmluZSBDTEtfSU5GUkFfQU9fTlJfQ0xLCQk2MA0KKw0KKy8qIEFQTUlYRURTWVMgKi8NCisNCisjZGVmaW5lIENLX0FQTUlYRURfQVJNUExMCQkwDQorI2RlZmluZSBDS19BUE1JWEVEX05FVDJQTEwJCTENCisjZGVmaW5lIENLX0FQTUlYRURfTU1QTEwJCTINCisjZGVmaW5lIENLX0FQTUlYRURfU0dNUExMCQkzDQorI2RlZmluZSBDS19BUE1JWEVEX1dFRE1DVVBMTAkJNA0KKyNkZWZpbmUgQ0tfQVBNSVhFRF9ORVQxUExMCQk1DQorI2RlZmluZSBDS19BUE1JWEVEX01QTEwJCQk2DQorI2RlZmluZSBDS19BUE1JWEVEX0FQTEwyCQk3DQorI2RlZmluZSBDTEtfQVBNSVhFRF9OUl9DTEsJCTgNCisNCisvKiBTR01JSVNZU18wICovDQorDQorI2RlZmluZSBDS19TR00wX1RYX0VOCQkJMA0KKyNkZWZpbmUgQ0tfU0dNMF9SWF9FTgkJCTENCisjZGVmaW5lIENLX1NHTTBfQ0swX0VOCQkJMg0KKyNkZWZpbmUgQ0tfU0dNMF9DRFJfQ0swX0VOCQkzDQorI2RlZmluZSBDTEtfU0dNSUkwX05SX0NMSwkJNA0KKw0KKy8qIFNHTUlJU1lTXzEgKi8NCisNCisjZGVmaW5lIENLX1NHTTFfVFhfRU4JCQkwDQorI2RlZmluZSBDS19TR00xX1JYX0VOCQkJMQ0KKyNkZWZpbmUgQ0tfU0dNMV9DSzFfRU4JCQkyDQorI2RlZmluZSBDS19TR00xX0NEUl9DSzFfRU4JCTMNCisjZGVmaW5lIENMS19TR01JSTFfTlJfQ0xLCQk0DQorDQorLyogRVRIU1lTICovDQorDQorI2RlZmluZSBDS19FVEhfRkVfRU4JCQkwDQorI2RlZmluZSBDS19FVEhfR1AyX0VOCQkJMQ0KKyNkZWZpbmUgQ0tfRVRIX0dQMV9FTgkJCTINCisjZGVmaW5lIENLX0VUSF9XT0NQVTBfRU4JCTMNCisjZGVmaW5lIENMS19FVEhfTlJfQ0xLCQkJNA0KKw0KKyNlbmRpZiAvKiBfRFRfQklORElOR1NfQ0xLX01UNzk4MV9IICovDQorDQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL210Nzk4Ni1jbGsuaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9tdDc5ODYtY2xrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg0YjBiZAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvaW5jbHVkZS9kdC1iaW5kaW5ncy9jbG9jay9tdDc5ODYtY2xrLmgKQEAgLTAsMCArMSwyNTIgQEAKKy8qDQorICogQ29weXJpZ2h0IChjKSAyMDE3IE1lZGlhVGVrIEluYy4NCisgKiBBdXRob3I6IENoZW4gWmhvbmcgPGNoZW4uemhvbmdAbWVkaWF0ZWsuY29tPg0KKyAqDQorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcw0KKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLg0KKyAqDQorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisgKi8NCisNCisjaWZuZGVmIF9EVF9CSU5ESU5HU19DTEtfTVQ3OTg2X0gNCisjZGVmaW5lIF9EVF9CSU5ESU5HU19DTEtfTVQ3OTg2X0gNCisNCisvKiBJTkZSQUNGRyAqLw0KKw0KKyNkZWZpbmUgQ0tfSU5GUkFfQ0tfRjI2TQkJMA0KKyNkZWZpbmUgQ0tfSU5GUkFfVUFSVAkJCTENCisjZGVmaW5lIENLX0lORlJBX0lTUEkwCQkJMg0KKyNkZWZpbmUgQ0tfSU5GUkFfSTJDCQkJMw0KKyNkZWZpbmUgQ0tfSU5GUkFfSVNQSTEJCQk0DQorI2RlZmluZSBDS19JTkZSQV9QV00JCQk1DQorI2RlZmluZSBDS19JTkZSQV82Nk1fTUNLCQk2DQorI2RlZmluZSBDS19JTkZSQV9DS19GMzJLCQk3DQorI2RlZmluZSBDS19JTkZSQV9QQ0lFX0NLCQk4DQorI2RlZmluZSBDS19JTkZSQV9QV01fQkNLCQk5DQorI2RlZmluZSBDS19JTkZSQV9QV01fQ0sxCQkxMA0KKyNkZWZpbmUgQ0tfSU5GUkFfUFdNX0NLMgkJMTENCisjZGVmaW5lIENLX0lORlJBXzEzM01fSENLCQkxMg0KKyNkZWZpbmUgQ0tfSU5GUkFfRUlQX0NLCQkJMTMNCisjZGVmaW5lIENLX0lORlJBXzY2TV9QSENLCQkxNA0KKyNkZWZpbmUgQ0tfSU5GUkFfRkFVRF9MX0NLCQkxNQ0KKyNkZWZpbmUgQ0tfSU5GUkFfRkFVRF9BVURfQ0sJCTE2DQorI2RlZmluZSBDS19JTkZSQV9GQVVEX0VHMl9DSwkJMTcNCisjZGVmaW5lIENLX0lORlJBX0kyQ1NfQ0sJCTE4DQorI2RlZmluZSBDS19JTkZSQV9NVVhfVUFSVDAJCTE5DQorI2RlZmluZSBDS19JTkZSQV9NVVhfVUFSVDEJCTIwDQorI2RlZmluZSBDS19JTkZSQV9NVVhfVUFSVDIJCTIxDQorI2RlZmluZSBDS19JTkZSQV9ORklfQ0sJCQkyMg0KKyNkZWZpbmUgQ0tfSU5GUkFfU1BJTkZJX0NLCQkyMw0KKyNkZWZpbmUgQ0tfSU5GUkFfTVVYX1NQSTAJCTI0DQorI2RlZmluZSBDS19JTkZSQV9NVVhfU1BJMQkJMjUNCisjZGVmaW5lIENLX0lORlJBX1JUQ18zMksJCTI2DQorI2RlZmluZSBDS19JTkZSQV9GTVNEQ19DSwkJMjcNCisjZGVmaW5lIENLX0lORlJBX0ZNU0RDX0hDS19DSwkJMjgNCisjZGVmaW5lIENLX0lORlJBX1BFUklfMTMzTQkJMjkNCisjZGVmaW5lIENLX0lORlJBXzEzM01fUEhDSwkJMzANCisjZGVmaW5lIENLX0lORlJBX1VTQl9TWVNfQ0sJCTMxDQorI2RlZmluZSBDS19JTkZSQV9VU0JfQ0sJCQkzMg0KKyNkZWZpbmUgQ0tfSU5GUkFfVVNCX1hIQ0lfQ0sJCTMzDQorI2RlZmluZSBDS19JTkZSQV9QQ0lFX0dGTVVYX1RMX09fUFJFCTM0DQorI2RlZmluZSBDS19JTkZSQV9GMjZNX0NLMAkJMzUNCisjZGVmaW5lIENLX0lORlJBX0hEXzEzM00gICAgICAgIDM2DQorI2RlZmluZSBDTEtfSU5GUkFfTlJfQ0xLCQkzNw0KKw0KKy8qIFRPUENLR0VOICovDQorDQorI2RlZmluZSBDS19UT1BfQ0JfQ0tTUV80ME0JCTANCisjZGVmaW5lIENLX1RPUF9DQl9NXzQxNk0JCTENCisjZGVmaW5lIENLX1RPUF9DQl9NX0QyCQkJMg0KKyNkZWZpbmUgQ0tfVE9QX0NCX01fRDQJCQkzDQorI2RlZmluZSBDS19UT1BfQ0JfTV9EOAkJCTQNCisjZGVmaW5lIENLX1RPUF9NX0Q4X0QyCQkJNQ0KKyNkZWZpbmUgQ0tfVE9QX01fRDNfRDIJCQk2DQorI2RlZmluZSBDS19UT1BfQ0JfTU1fRDIJCQk3DQorI2RlZmluZSBDS19UT1BfQ0JfTU1fRDQJCQk4DQorI2RlZmluZSBDS19UT1BfQ0JfTU1fRDgJCQk5DQorI2RlZmluZSBDS19UT1BfTU1fRDhfRDIJCQkxMA0KKyNkZWZpbmUgQ0tfVE9QX01NX0QzX0Q4CQkJMTENCisjZGVmaW5lIENLX1RPUF9DQl9VMl9QSFlEX0NLCQkxMg0KKyNkZWZpbmUgQ0tfVE9QX0NCX0FQTEwyXzE5Nk0JCTEzDQorI2RlZmluZSBDS19UT1BfQVBMTDJfRDQJCQkxNA0KKyNkZWZpbmUgQ0tfVE9QX0NCX05FVDFfRDQJCTE1DQorI2RlZmluZSBDS19UT1BfQ0JfTkVUMV9ENQkJMTYNCisjZGVmaW5lIENLX1RPUF9ORVQxX0Q1X0QyCQkxNw0KKyNkZWZpbmUgQ0tfVE9QX05FVDFfRDVfRDQJCTE4DQorI2RlZmluZSBDS19UT1BfTkVUMV9EOF9EMgkJMTkNCisjZGVmaW5lIENLX1RPUF9ORVQxX0Q4X0Q0CQkyMA0KKyNkZWZpbmUgQ0tfVE9QX0NCX05FVDJfODAwTQkJMjENCisjZGVmaW5lIENLX1RPUF9DQl9ORVQyX0Q0CQkyMg0KKyNkZWZpbmUgQ0tfVE9QX05FVDJfRDRfRDIJCTIzDQorI2RlZmluZSBDS19UT1BfTkVUMl9EM19EMgkJMjQNCisjZGVmaW5lIENLX1RPUF9DQl9XRURNQ1VfNzYwTQkJMjUNCisjZGVmaW5lIENLX1RPUF9XRURNQ1VfRDVfRDIJCTI2DQorI2RlZmluZSBDS19UT1BfQ0JfU0dNXzMyNU0JCTI3DQorI2RlZmluZSBDS19UT1BfQ0JfQ0tTUV80ME1fRDIJCTI4DQorI2RlZmluZSBDS19UT1BfQ0JfUlRDXzMySwkJMjkNCisjZGVmaW5lIENLX1RPUF9DQl9SVENfMzJQN0sJCTMwDQorI2RlZmluZSBDS19UT1BfTkZJMVgJCQkzMQ0KKyNkZWZpbmUgQ0tfVE9QX1VTQl9FUV9SWDI1ME0JCTMyDQorI2RlZmluZSBDS19UT1BfVVNCX1RYMjUwTQkJMzMNCisjZGVmaW5lIENLX1RPUF9VU0JfTE4wX0NLCQkzNA0KKyNkZWZpbmUgQ0tfVE9QX1VTQl9DRFJfQ0sJCTM1DQorI2RlZmluZSBDS19UT1BfU1BJTkZJX0JDSwkJMzYNCisjZGVmaW5lIENLX1RPUF9JMkNfQkNLCQkJMzcNCisjZGVmaW5lIENLX1RPUF9QRVhUUF9UTAkJCTM4DQorI2RlZmluZSBDS19UT1BfRU1NQ18yNTBNCQkzOQ0KKyNkZWZpbmUgQ0tfVE9QX0VNTUNfNDE2TQkJNDANCisjZGVmaW5lIENLX1RPUF9GXzI2TV9BRENfQ0sJCTQxDQorI2RlZmluZSBDS19UT1BfU1lTQVhJCQkJNDINCisjZGVmaW5lIENLX1RPUF9ORVRTWVNfV0VEX01DVQkJNDMNCisjZGVmaW5lIENLX1RPUF9ORVRTWVNfMlgJCTQ0DQorI2RlZmluZSBDS19UT1BfU0dNXzMyNU0JCQk0NQ0KKyNkZWZpbmUgQ0tfVE9QX0ExU1lTCQkJNDYNCisjZGVmaW5lIENLX1RPUF9FSVBfQgkJCTQ3DQorI2RlZmluZSBDS19UT1BfRjI2TQkJCTQ4DQorI2RlZmluZSBDS19UT1BfQVVEX0wJCQk0OQ0KKyNkZWZpbmUgQ0tfVE9QX0FfVFVORVIJCQk1MA0KKyNkZWZpbmUgQ0tfVE9QX1UyVTNfUkVGCQkJNTENCisjZGVmaW5lIENLX1RPUF9VMlUzX1NZUwkJCTUyDQorI2RlZmluZSBDS19UT1BfVTJVM19YSENJCQk1Mw0KKyNkZWZpbmUgQ0tfVE9QX0FQMkNOTl9IT1NUCQk1NA0KKyNkZWZpbmUgQ0tfVE9QX05GSTFYX1NFTAkJNTUNCisjZGVmaW5lIENLX1RPUF9TUElORklfU0VMCQk1Ng0KKyNkZWZpbmUgQ0tfVE9QX1NQSV9TRUwJCQk1Nw0KKyNkZWZpbmUgQ0tfVE9QX1NQSU1fTVNUX1NFTAkJNTgNCisjZGVmaW5lIENLX1RPUF9VQVJUX1NFTAkJCTU5DQorI2RlZmluZSBDS19UT1BfUFdNX1NFTAkJCTYwDQorI2RlZmluZSBDS19UT1BfSTJDX1NFTAkJCTYxDQorI2RlZmluZSBDS19UT1BfUEVYVFBfVExfU0VMCQk2Mg0KKyNkZWZpbmUgQ0tfVE9QX0VNTUNfMjUwTV9TRUwJCTYzDQorI2RlZmluZSBDS19UT1BfRU1NQ180MTZNX1NFTAkJNjQNCisjZGVmaW5lIENLX1RPUF9GXzI2TV9BRENfU0VMCQk2NQ0KKyNkZWZpbmUgQ0tfVE9QX0RSQU1DX1NFTAkJNjYNCisjZGVmaW5lIENLX1RPUF9EUkFNQ19NRDMyX1NFTAkJNjcNCisjZGVmaW5lIENLX1RPUF9TWVNBWElfU0VMCQk2OA0KKyNkZWZpbmUgQ0tfVE9QX1NZU0FQQl9TRUwJCTY5DQorI2RlZmluZSBDS19UT1BfQVJNX0RCX01BSU5fU0VMCQk3MA0KKyNkZWZpbmUgQ0tfVE9QX0FSTV9EQl9KVFNFTAkJNzENCisjZGVmaW5lIENLX1RPUF9ORVRTWVNfU0VMCQk3Mg0KKyNkZWZpbmUgQ0tfVE9QX05FVFNZU181MDBNX1NFTAkJNzMNCisjZGVmaW5lIENLX1RPUF9ORVRTWVNfTUNVX1NFTAkJNzQNCisjZGVmaW5lIENLX1RPUF9ORVRTWVNfMlhfU0VMCQk3NQ0KKyNkZWZpbmUgQ0tfVE9QX1NHTV8zMjVNX1NFTAkJNzYNCisjZGVmaW5lIENLX1RPUF9TR01fUkVHX1NFTAkJNzcNCisjZGVmaW5lIENLX1RPUF9BMVNZU19TRUwJCTc4DQorI2RlZmluZSBDS19UT1BfQ09OTl9NQ1VTWVNfU0VMCQk3OQ0KKyNkZWZpbmUgQ0tfVE9QX0VJUF9CX1NFTAkJODANCisjZGVmaW5lIENLX1RPUF9QQ0lFX1BIWV9TRUwJCTgxDQorI2RlZmluZSBDS19UT1BfVVNCM19QSFlfU0VMCQk4Mg0KKyNkZWZpbmUgQ0tfVE9QX0YyNk1fU0VMCQkJODMNCisjZGVmaW5lIENLX1RPUF9BVURfTF9TRUwJCTg0DQorI2RlZmluZSBDS19UT1BfQV9UVU5FUl9TRUwJCTg1DQorI2RlZmluZSBDS19UT1BfVTJVM19TRUwJCQk4Ng0KKyNkZWZpbmUgQ0tfVE9QX1UyVTNfU1lTX1NFTAkJODcNCisjZGVmaW5lIENLX1RPUF9VMlUzX1hIQ0lfU0VMCQk4OA0KKyNkZWZpbmUgQ0tfVE9QX0RBX1UyX1JFRlNFTAkJODkNCisjZGVmaW5lIENLX1RPUF9EQV9VMl9DS18xUF9TRUwJCTkwDQorI2RlZmluZSBDS19UT1BfQVAyQ05OX0hPU1RfU0VMCQk5MQ0KKyNkZWZpbmUgQ0xLX1RPUF9OUl9DTEsJCQk5Mg0KKw0KKy8qIElORlJBQ0ZHX0FPICovDQorDQorI2RlZmluZSBDS19JTkZSQV9VQVJUMF9TRUwJCTANCisjZGVmaW5lIENLX0lORlJBX1VBUlQxX1NFTAkJMQ0KKyNkZWZpbmUgQ0tfSU5GUkFfVUFSVDJfU0VMCQkyDQorI2RlZmluZSBDS19JTkZSQV9TUEkwX1NFTAkJMw0KKyNkZWZpbmUgQ0tfSU5GUkFfU1BJMV9TRUwJCTQNCisjZGVmaW5lIENLX0lORlJBX1BXTTFfU0VMCQk1DQorI2RlZmluZSBDS19JTkZSQV9QV00yX1NFTAkJNg0KKyNkZWZpbmUgQ0tfSU5GUkFfUFdNX0JTRUwJCTcNCisjZGVmaW5lIENLX0lORlJBX1BDSUVfU0VMCQk4DQorI2RlZmluZSBDS19JTkZSQV9HUFRfU1RBCQk5DQorI2RlZmluZSBDS19JTkZSQV9QV01fSENLCQkxMA0KKyNkZWZpbmUgQ0tfSU5GUkFfUFdNX1NUQQkJMTENCisjZGVmaW5lIENLX0lORlJBX1BXTTFfQ0sJCTEyDQorI2RlZmluZSBDS19JTkZSQV9QV00yX0NLCQkxMw0KKyNkZWZpbmUgQ0tfSU5GUkFfQ1FfRE1BX0NLCQkxNA0KKyNkZWZpbmUgQ0tfSU5GUkFfRUlQOTdfQ0sJCTE1DQorI2RlZmluZSBDS19JTkZSQV9BVURfQlVTX0NLCQkxNg0KKyNkZWZpbmUgQ0tfSU5GUkFfQVVEXzI2TV9DSwkJMTcNCisjZGVmaW5lIENLX0lORlJBX0FVRF9MX0NLCQkxOA0KKyNkZWZpbmUgQ0tfSU5GUkFfQVVEX0FVRF9DSwkJMTkNCisjZGVmaW5lIENLX0lORlJBX0FVRF9FRzJfQ0sJCTIwDQorI2RlZmluZSBDS19JTkZSQV9EUkFNQ18yNk1fQ0sJCTIxDQorI2RlZmluZSBDS19JTkZSQV9EQkdfQ0sJCQkyMg0KKyNkZWZpbmUgQ0tfSU5GUkFfQVBfRE1BX0NLCQkyMw0KKyNkZWZpbmUgQ0tfSU5GUkFfU0VKX0NLCQkJMjQNCisjZGVmaW5lIENLX0lORlJBX1NFSl8xM01fQ0sJCTI1DQorI2RlZmluZSBDS19JTkZSQV9USEVSTV9DSwkJMjYNCisjZGVmaW5lIENLX0lORlJBX0kyQ09fQ0sJCTI3DQorI2RlZmluZSBDS19JTkZSQV9VQVJUMF9DSwkJMjgNCisjZGVmaW5lIENLX0lORlJBX1VBUlQxX0NLCQkyOQ0KKyNkZWZpbmUgQ0tfSU5GUkFfVUFSVDJfQ0sJCTMwDQorI2RlZmluZSBDS19JTkZSQV9ORkkxX0NLCQkzMQ0KKyNkZWZpbmUgQ0tfSU5GUkFfU1BJTkZJMV9DSwkJMzINCisjZGVmaW5lIENLX0lORlJBX05GSV9IQ0tfQ0sJCTMzDQorI2RlZmluZSBDS19JTkZSQV9TUEkwX0NLCQkzNA0KKyNkZWZpbmUgQ0tfSU5GUkFfU1BJMV9DSwkJMzUNCisjZGVmaW5lIENLX0lORlJBX1NQSTBfSENLX0NLCQkzNg0KKyNkZWZpbmUgQ0tfSU5GUkFfU1BJMV9IQ0tfQ0sJCTM3DQorI2RlZmluZSBDS19JTkZSQV9GUlRDX0NLCQkzOA0KKyNkZWZpbmUgQ0tfSU5GUkFfTVNEQ19DSwkJMzkNCisjZGVmaW5lIENLX0lORlJBX01TRENfSENLX0NLCQk0MA0KKyNkZWZpbmUgQ0tfSU5GUkFfTVNEQ18xMzNNX0NLCQk0MQ0KKyNkZWZpbmUgQ0tfSU5GUkFfTVNEQ182Nk1fQ0sJCTQyDQorI2RlZmluZSBDS19JTkZSQV9BRENfMjZNX0NLCQk0Mw0KKyNkZWZpbmUgQ0tfSU5GUkFfQURDX0ZSQ19DSwkJNDQNCisjZGVmaW5lIENLX0lORlJBX0ZCSVNUMkZQQ19DSwkJNDUNCisjZGVmaW5lIENLX0lORlJBX0lVU0JfMTMzX0NLCQk0Ng0KKyNkZWZpbmUgQ0tfSU5GUkFfSVVTQl82Nk1fQ0sJCTQ3DQorI2RlZmluZSBDS19JTkZSQV9JVVNCX1NZU19DSwkJNDgNCisjZGVmaW5lIENLX0lORlJBX0lVU0JfQ0sJCTQ5DQorI2RlZmluZSBDS19JTkZSQV9JUENJRV9DSwkJNTANCisjZGVmaW5lIENLX0lORlJBX0lQQ0lFX1BJUEVfQ0sgIDUxDQorI2RlZmluZSBDS19JTkZSQV9JUENJRVJfQ0sJCTUyDQorI2RlZmluZSBDS19JTkZSQV9JUENJRUJfQ0sJCTUzDQorI2RlZmluZSBDS19JTkZSQV9UUk5HX0NLCQk1NA0KKyNkZWZpbmUgQ0xLX0lORlJBX0FPX05SX0NMSwkJNTUNCisNCisvKiBBUE1JWEVEU1lTICovDQorDQorI2RlZmluZSBDS19BUE1JWEVEX0FSTVBMTAkJMA0KKyNkZWZpbmUgQ0tfQVBNSVhFRF9ORVQyUExMCQkxDQorI2RlZmluZSBDS19BUE1JWEVEX01NUExMCQkyDQorI2RlZmluZSBDS19BUE1JWEVEX1NHTVBMTAkJMw0KKyNkZWZpbmUgQ0tfQVBNSVhFRF9XRURNQ1VQTEwJCTQNCisjZGVmaW5lIENLX0FQTUlYRURfTkVUMVBMTAkJNQ0KKyNkZWZpbmUgQ0tfQVBNSVhFRF9NUExMCQkJNg0KKyNkZWZpbmUgQ0tfQVBNSVhFRF9BUExMMgkJNw0KKyNkZWZpbmUgQ0xLX0FQTUlYRURfTlJfQ0xLCQk4DQorDQorLyogU0dNSUlTWVNfMCAqLw0KKw0KKyNkZWZpbmUgQ0tfU0dNMF9UWF9FTgkJCTANCisjZGVmaW5lIENLX1NHTTBfUlhfRU4JCQkxDQorI2RlZmluZSBDS19TR00wX0NLMF9FTgkJCTINCisjZGVmaW5lIENLX1NHTTBfQ0RSX0NLMF9FTgkJMw0KKyNkZWZpbmUgQ0xLX1NHTUlJMF9OUl9DTEsJCTQNCisNCisvKiBTR01JSVNZU18xICovDQorDQorI2RlZmluZSBDS19TR00xX1RYX0VOCQkJMA0KKyNkZWZpbmUgQ0tfU0dNMV9SWF9FTgkJCTENCisjZGVmaW5lIENLX1NHTTFfQ0sxX0VOCQkJMg0KKyNkZWZpbmUgQ0tfU0dNMV9DRFJfQ0sxX0VOCQkzDQorI2RlZmluZSBDTEtfU0dNSUkxX05SX0NMSwkJNA0KKw0KKy8qIEVUSFNZUyAqLw0KKw0KKyNkZWZpbmUgQ0tfRVRIX0ZFX0VOCQkJMA0KKyNkZWZpbmUgQ0tfRVRIX0dQMl9FTgkJCTENCisjZGVmaW5lIENLX0VUSF9HUDFfRU4JCQkyDQorI2RlZmluZSBDS19FVEhfV09DUFUxX0VOCQkzDQorI2RlZmluZSBDS19FVEhfV09DUFUwX0VOCQk0DQorI2RlZmluZSBDTEtfRVRIX05SX0NMSwkJCTUNCisNCisjZW5kaWYgLyogX0RUX0JJTkRJTkdTX0NMS19NVDc5ODZfSCAqLw0KKw0KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvaW5jbHVkZS9kdC1iaW5kaW5ncy9yZXNldC9tdDc5ODYtcmVzZXRzLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2luY2x1ZGUvZHQtYmluZGluZ3MvcmVzZXQvbXQ3OTg2LXJlc2V0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ZmZhZjcKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2luY2x1ZGUvZHQtYmluZGluZ3MvcmVzZXQvbXQ3OTg2LXJlc2V0cy5oCkBAIC0wLDAgKzEsMTEgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisvKiBDb3B5cmlnaHQgKGMpIDIwMTkgTWVkaWFUZWsgSW5jLiAqLworCisjaWZuZGVmIF9EVF9CSU5ESU5HU19SRVNFVF9DT05UUk9MTEVSX01UMjcxMgorI2RlZmluZSBfRFRfQklORElOR1NfUkVTRVRfQ09OVFJPTExFUl9NVDI3MTIKKworI2RlZmluZSBNVDc5ODZfVE9QUkdVX0NPTlNZU19SU1QJCQkJMjMKKworI2RlZmluZSBNVDc5ODZfVE9QUkdVX1NXX1JTVF9OVU0JCQkJMzIKKworI2VuZGlmICAvKiBfRFRfQklORElOR1NfUkVTRVRfQ09OVFJPTExFUl9NVDI3MTIgKi8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2luY2x1ZGUvbGludXgvc29jL21lZGlhdGVrL210a19zaXBfc3ZjLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2luY2x1ZGUvbGludXgvc29jL21lZGlhdGVrL210a19zaXBfc3ZjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRkNWM2NQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvaW5jbHVkZS9saW51eC9zb2MvbWVkaWF0ZWsvbXRrX3NpcF9zdmMuaApAQCAtMCwwICsxLDI1IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBNZWRpYVRlayBJbmMuCisgKi8KKyNpZm5kZWYgX19NVEtfU0lQX1NWQ19ICisjZGVmaW5lIF9fTVRLX1NJUF9TVkNfSAorCisvKiBFcnJvciBDb2RlICovCisjZGVmaW5lIFNJUF9TVkNfRV9TVUNDRVNTICAgICAgICAgICAgICAgMAorI2RlZmluZSBTSVBfU1ZDX0VfTk9UX1NVUFBPUlRFRCAgICAgICAgIC0xCisjZGVmaW5lIFNJUF9TVkNfRV9JTlZBTElEX1BBUkFNUyAgICAgICAgLTIKKyNkZWZpbmUgU0lQX1NWQ19FX0lOVkFMSURfUkFOR0UgICAgICAgICAtMworI2RlZmluZSBTSVBfU1ZDX0VfUEVSTUlTU0lPTl9ERU5JRUQgICAgIC00CisKKyNpZmRlZiBDT05GSUdfQVJNNjQKKyNkZWZpbmUgTVRLX1NJUF9TTUNfQ09OVkVOVElPTiAgICAgICAgICBBUk1fU01DQ0NfU01DXzY0CisjZWxzZQorI2RlZmluZSBNVEtfU0lQX1NNQ19DT05WRU5USU9OICAgICAgICAgIEFSTV9TTUNDQ19TTUNfMzIKKyNlbmRpZgorCisjZGVmaW5lIE1US19TSVBfU01DX0NNRChmbl9pZCkgXAorCUFSTV9TTUNDQ19DQUxMX1ZBTChBUk1fU01DQ0NfRkFTVF9DQUxMLCBNVEtfU0lQX1NNQ19DT05WRU5USU9OLCBcCisJCQkgICBBUk1fU01DQ0NfT1dORVJfU0lQLCBmbl9pZCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2luY2x1ZGUvbmV0L3JhX25hdC5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9pbmNsdWRlL25ldC9yYV9uYXQuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MzQxMmE0Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9pbmNsdWRlL25ldC9yYV9uYXQuaApAQCAtMCwwICsxLDU1OCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTkgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBIYXJyeSBIdWFuZyA8aGFycnkuaHVhbmdAbWVkaWF0ZWsuY29tPgorICovCisKKyNpZm5kZWYgX1JBX05BVF9XQU5URUQKKyNkZWZpbmUgX1JBX05BVF9XQU5URUQKKworI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgorCisKKyNpZm5kZWYgTkVYVEhEUl9JUElQCisjZGVmaW5lIE5FWFRIRFJfSVBJUCA0CisjZW5kaWYKKworI2RlZmluZSBod25hdF92bGFuX3R4X3RhZ19wcmVzZW50KF9fc2tiKSAgICAgKChfX3NrYiktPnZsYW5fdGNpICYgVkxBTl9UQUdfUFJFU0VOVCkKKyNkZWZpbmUgaHduYXRfdmxhbl90YWdfZ2V0KF9fc2tiKSAgICAgICAgICgoX19za2IpLT52bGFuX3RjaSAmIH5WTEFOX1RBR19QUkVTRU5UKQorCisjaWYgZGVmaW5lZChDT05GSUdfSFdfTkFUKQorZXh0ZXJuIHZvaWQgaHduYXRfbWFnaWNfdGFnX3NldF96ZXJvKHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIHZvaWQgaHduYXRfY2hlY2tfbWFnaWNfdGFnKHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIHZvaWQgaHduYXRfc2V0X2hlYWRyb29tX3plcm8oc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gdm9pZCBod25hdF9zZXRfdGFpbHJvb21femVybyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiB2b2lkIGh3bmF0X2NvcHlfaGVhZHJvb20odTggKmRhdGEsIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIHZvaWQgaHduYXRfY29weV90YWlscm9vbSh1OCAqZGF0YSwgaW50IHNpemUsIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIHZvaWQgaHduYXRfc2V0dXBfZG1hX29wcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgY29oZXJlbnQpOworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIGh3bmF0X21hZ2ljX3RhZ19zZXRfemVybyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHduYXRfY2hlY2tfbWFnaWNfdGFnKHN0cnVjdCBza19idWZmICpza2IpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod25hdF9zZXRfaGVhZHJvb21femVybyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHduYXRfc2V0X3RhaWxyb29tX3plcm8oc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGh3bmF0X2NvcHlfaGVhZHJvb20odTggKmRhdGEsIHN0cnVjdCBza19idWZmICpza2IpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod25hdF9jb3B5X3RhaWxyb29tKHU4ICpkYXRhLCBpbnQgc2l6ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKK30KKworI2VuZGlmCitlbnVtIGZvZV9jcHVfcmVhc29uIHsKKwlUVExfMCA9IDB4MDIsCQkvKiBJUHY0KElQdjYpIFRUTChob3AgbGltaXQpID0gMCAqLworCS8qIElQdjQoSVB2NikgaGFzIG9wdGlvbihleHRlbnNpb24pIGhlYWRlciAqLworCUhBU19PUFRJT05fSEVBREVSID0gMHgwMywKKwlOT19GTE9XX0lTX0FTU0lHTkVEID0gMHgwNywJLyogTm8gZmxvdyBpcyBhc3NpZ25lZCAqLworCS8qIElQdjQgSE5BVCBkb2Vzbid0IHN1cHBvcnQgSVB2NCAvdyBmcmFnbWVudCAqLworCUlQVjRfV0lUSF9GUkFHTUVOVCA9IDB4MDgsCisJLyogSVB2NCBITkFQVC9EUy1MaXRlIGRvZXNuJ3Qgc3VwcG9ydCBJUHY0IC93IGZyYWdtZW50ICovCisJSVBWNF9ITkFQVF9EU0xJVEVfV0lUSF9GUkFHTUVOVCA9IDB4MDksCisJLyogSVB2NCBITkFQVC9EUy1MaXRlIGNhbid0IGZpbmQgVENQL1VEUCBzcG9ydC9kcG9ydCAqLworCUlQVjRfSE5BUFRfRFNMSVRFX1dJVEhPVVRfVENQX1VEUCA9IDB4MEEsCisJLyogSVB2NiA1VC1yb3V0ZS82UkQgY2FuJ3QgZmluZCBUQ1AvVURQIHNwb3J0L2Rwb3J0ICovCisJSVBWNl81VF82UkRfV0lUSE9VVF9UQ1BfVURQID0gMHgwQiwKKwkvKiBJbmdyZXNzIHBhY2tldCBpcyBUQ1AgZmluL3N5bi9yc3QgKi8KKwkvKihmb3IgSVB2NCBOQVBUL0RTLUxpdGUgb3IgSVB2NiA1VC1yb3V0ZS82UkQpICovCisJVENQX0ZJTl9TWU5fUlNUID0gMHgwQywKKwlVTl9ISVQgPSAweDBELAkJLyogRk9FIFVuLWhpdCAqLworCUhJVF9VTkJJTkQgPSAweDBFLAkvKiBGT0UgSGl0IHVuYmluZCAqLworCS8qIEZPRSBIaXQgdW5iaW5kICYgcmF0ZSByZWFjaCAqLworCUhJVF9VTkJJTkRfUkFURV9SRUFDSCA9IDB4MEYsCisJSElUX0JJTkRfVENQX0ZJTiA9IDB4MTAsCS8qIEhpdCBiaW5kIFBQRSBUQ1AgRklOIGVudHJ5ICovCisJLyogSGl0IGJpbmQgUFBFIGVudHJ5IGFuZCBUVEwoaG9wIGxpbWl0KSA9IDEgKi8KKwkvKiBhbmQgVFRMKGhvdCBsaW1pdCkgLSAxICovCisJSElUX0JJTkRfVFRMXzEgPSAweDExLAorCS8qIEhpdCBiaW5kIGFuZCBWTEFOIHJlcGxhY2VtZW50IHZpb2xhdGlvbiAqLworCS8qKEluZ3Jlc3MgMSgwKSBWTEFOIGxheWVycyBhbmQgZWdyZXNzIDQoMyBvciA0KSBWTEFOIGxheWVycykgKi8KKwlISVRfQklORF9XSVRIX1ZMQU5fVklPTEFUSU9OID0gMHgxMiwKKwkvKiBIaXQgYmluZCBhbmQga2VlcCBhbGl2ZSB3aXRoIHVuaWNhc3Qgb2xkLWhlYWRlciBwYWNrZXQgKi8KKwlISVRfQklORF9LRUVQQUxJVkVfVUNfT0xEX0hEUiA9IDB4MTMsCisJLyogSGl0IGJpbmQgYW5kIGtlZXAgYWxpdmUgd2l0aCBtdWx0aWNhc3QgbmV3LWhlYWRlciBwYWNrZXQgKi8KKwlISVRfQklORF9LRUVQQUxJVkVfTUNfTkVXX0hEUiA9IDB4MTQsCisJLyogSGl0IGJpbmQgYW5kIGtlZXAgYWxpdmUgd2l0aCBkdXBsaWNhdGUgb2xkLWhlYWRlciBwYWNrZXQgKi8KKwlISVRfQklORF9LRUVQQUxJVkVfRFVQX09MRF9IRFIgPSAweDE1LAorCS8qIEZPRSBIaXQgYmluZCAmIGZvcmNlIHRvIENQVSAqLworCUhJVF9CSU5EX0ZPUkNFX1RPX0NQVSA9IDB4MTYsCisJLyogSGl0IGJpbmQgYW5kIHJlbW92ZSB0dW5uZWwgSVAgaGVhZGVyLCAqLworCS8qIGJ1dCBpbm5lciBJUCBoYXMgb3B0aW9uL25leHQgaGVhZGVyICovCisJSElUX0JJTkRfV0lUSF9PUFRJT05fSEVBREVSID0gMHgxNywKKwkvKiBIaXQgYmluZCBhbmQgZXhjZWVkIE1UVSAqLworCUhJVF9CSU5EX0VYQ0VFRF9NVFUgPSAweDFDLAorCUhJVF9CSU5EX1BBQ0tFVF9TQU1QTElORyA9IDB4MUIsCS8qICBQUyBwYWNrZXQgKi8KKwkvKiAgU3dpdGNoIGNsb25lIG11bHRpY2FzdCBwYWNrZXQgdG8gQ1BVICovCisJSElUX0JJTkRfTVVMVElDQVNUX1RPX0NQVSA9IDB4MTgsCisJLyogIFN3aXRjaCBjbG9uZSBtdWx0aWNhc3QgcGFja2V0IHRvIEdNQUMxICYgQ1BVICovCisJSElUX0JJTkRfTVVMVElDQVNUX1RPX0dNQUNfQ1BVID0gMHgxOSwKKwlISVRfUFJFX0JJTkQgPSAweDFBCS8qICBQcmUtYmluZCAqLworfTsKKworI2RlZmluZSBNQVhfSUZfTlVNIDY0CisKK3N0cnVjdCBkbWFkX3J4X2Rlc2NpbmZvNCB7CisJdWludDMyX3QgZm9lX2VudHJ5X251bToxNTsKKwl1aW50MzJfdCByc3YwOjM7CisJdWludDMyX3QgQ1JTTjo1OworCXVpbnQzMl90IHJzdjE6MzsKKwl1aW50MzJfdCBTUE9SVDo0OworCXVpbnQzMl90IHBwZToxOworCXVpbnQzMl90IEFMRzoxOworCXVpbnQzMl90IElGOjg7CisJdWludDMyX3QgV0RNQUlEOjI7CisJdWludDMyX3QgUlhJRDoyOworCXVpbnQzMl90IFdDSUQ6MTA7CisJdWludDMyX3QgQlNTSUQ6NjsKKwl1aW50MzJfdCByc3YzOjQ7CisJdWludDE2X3QgbWluZm86MTsKKwl1aW50MTZfdCBudHlwZTozOworCXVpbnQxNl90IGNoaWQ6ODsKKwl1aW50MTZfdCByc3Y0OjQ7CisJdTE2IE1BR0lDX1RBR19QUk9URUNUOworfSBfX3BhY2tlZDsKKworc3RydWN0IHBkbWFfcnhfZGVzY19pbmZvNCB7CisJdTE2IE1BR0lDX1RBR19QUk9URUNUOworCXVpbnQzMl90IGZvZV9lbnRyeV9udW06MTQ7CisJdWludDMyX3QgQ1JTTjo1OworCXVpbnQzMl90IFNQT1JUOjQ7CisJdWludDMyX3QgcnN2OjY7CisJdWludDMyX3QgZm9lX2VudHJ5X251bV8xOjE7CisJdWludDMyX3QgcHBlOjE7CisJdWludDMyX3QgQUxHOjE7CisJdWludDMyX3QgSUY6ODsKKwl1aW50MzJfdCBXRE1BSUQ6MjsKKwl1aW50MzJfdCBSWElEOjI7CisJdWludDMyX3QgV0NJRDoxMDsKKwl1aW50MzJfdCBCU1NJRDo2OworCXVpbnQzMl90IHJzdjI6NDsKKwl1aW50MTZfdCBtaW5mbzoxOworCXVpbnQxNl90IG50eXBlOjM7CisJdWludDE2X3QgY2hpZDo4OworCXVpbnQxNl90IHJzdjM6NDsKKyNpZiBkZWZpbmVkKENPTkZJR19SQV9IV19OQVRfUFBUUF9MMlRQKQorCXUxNiBTT1VSQ0U7CisJdTE2IERFU1Q7CisjZW5kaWYKK30gX19wYWNrZWQ7CisKKyNpZiBkZWZpbmVkKENPTkZJR19NRURJQVRFS19ORVRTWVNfVjIpCitzdHJ1Y3QgaGVhZF9yeF9kZXNjaW5mbzQgeworCXVpbnQzMl90IGZvZV9lbnRyeV9udW06MTQ7CisJdWludDMyX3QgQ1JTTjo1OworCXVpbnQzMl90IFNQT1JUOjQ7CisJdWludDMyX3QgcnN2OjY7CisJdWludDMyX3QgZm9lX2VudHJ5X251bV8xOjE7CisJdWludDMyX3QgcHBlOjE7CisJdWludDMyX3QgQUxHOjE7CisJdWludDMyX3QgSUY6ODsKKwl1aW50MzJfdCBXRE1BSUQ6MjsKKwl1aW50MzJfdCBSWElEOjI7CisJdWludDMyX3QgV0NJRDoxMDsKKwl1aW50MzJfdCBCU1NJRDo2OworCXVpbnQzMl90IHJzdjI6NDsKKwl1aW50MTZfdCBtaW5mbzoxOworCXVpbnQxNl90IG50eXBlOjM7CisJdWludDE2X3QgY2hpZDo4OworCXVpbnQxNl90IHJzdjM6NDsKKyNpZiBkZWZpbmVkKENPTkZJR19SQV9IV19OQVRfUFBUUF9MMlRQKQorCXUxNiBTT1VSQ0U7CisJdTE2IERFU1Q7CisjZW5kaWYKKwl1MTYgTUFHSUNfVEFHX1BST1RFQ1Q7Cit9IF9fcGFja2VkOworI2Vsc2UKK3N0cnVjdCBoZWFkX3J4X2Rlc2NpbmZvNCB7CisJdWludDMyX3QgZm9lX2VudHJ5X251bToxNDsKKwl1aW50MzJfdCBDUlNOOjU7CisJdWludDMyX3QgU1BPUlQ6MzsKKwl1aW50MzJfdCByc3Y6MTsKKwl1aW50MzJfdCBBTEc6MTsKKwl1aW50MzJfdCBJRjo0OworCXVpbnQzMl90IHJzdjI6NDsKKwl1aW50MzJfdCBNQUdJQ19UQUdfUFJPVEVDVDogMTY7CisJdWludDMyX3QgV0RNQUlEOjI7CisJdWludDMyX3QgUlhJRDoyOworCXVpbnQzMl90IFdDSUQ6MTA7CisJdWludDMyX3QgQlNTSUQ6NjsKKyNpZiBkZWZpbmVkKENPTkZJR19SQV9IV19OQVRfUFBUUF9MMlRQKQorCXUxNiBTT1VSQ0U7CisJdTE2IERFU1Q7CisjZW5kaWYKK30gX19wYWNrZWQ7CisjZW5kaWYKKworc3RydWN0IGNiX3J4X2Rlc2NfaW5mbzQgeworCXUxNiBNQUdJQ19UQUdfUFJPVEVDVDA7CisJdWludDMyX3QgZm9lX2VudHJ5X251bToxNTsKKwl1aW50MzJfdCBDUlNOOjU7CisJdWludDMyX3QgU1BPUlQ6NDsKKwl1aW50MzJfdCBBTEc6MTsKKwl1aW50MzJfdCByc3Y6NzsKKwl1aW50MTZfdCBJRjo4OworCXVpbnQxNl90IFdETUFJRDoyOworCXVpbnQxNl90IFJYSUQ6MjsKKwl1aW50MTZfdCBXQ0lEOjEwOworCXVpbnQxNl90IEJTU0lEOjY7CisJdWludDE2X3QgcnN2MTo0OworCXVpbnQxNl90IG1pbmZvOjE7CisJdWludDE2X3QgbnR5cGU6MzsKKwl1aW50MTZfdCBjaGlkOjg7CisJdWludDE2X3QgcnN2Mjo0OworI2lmIGRlZmluZWQoQ09ORklHX1JBX0hXX05BVF9QUFRQX0wyVFApCisJdTE2IFNPVVJDRTsKKwl1MTYgREVTVDsKKyNlbmRpZgorCXUxNiBNQUdJQ19UQUdfUFJPVEVDVDE7Cit9IF9fcGFja2VkOworCisKKworI2RlZmluZSBGT0VfSU5GT19MRU4JCSAgICAxMgorI2RlZmluZSBXSUZJX0lORk9fTEVOCQkgICAgNgorCisKKyNpZiBkZWZpbmVkKENPTkZJR19SQV9IV19OQVRfUFBUUF9MMlRQKQorI2RlZmluZSBGT0VfSU5GT19MRU4JCSAgICAoNiArIDQgKyBXSUZJX0lORk9fTEVOKQorI2RlZmluZSBGT0VfTUFHSUNfRkFTVFBBVEgJICAgIDB4NzcKKyNkZWZpbmUgRk9FX01BR0lDX0wyVFBQQVRICSAgICAweDc4CisjZW5kaWYKKworI2RlZmluZSBGT0VfTUFHSUNfUENJCQkgICAgMHg3MworI2RlZmluZSBGT0VfTUFHSUNfV0xBTgkJICAgIDB4NzQKKyNkZWZpbmUgRk9FX01BR0lDX0dFCQkgICAgMHg3NQorI2RlZmluZSBGT0VfTUFHSUNfUFBFCQkgICAgMHg3NgorI2RlZmluZSBGT0VfTUFHSUNfV0VEMAkJICAgIDB4NzgKKyNkZWZpbmUgRk9FX01BR0lDX1dFRDEJCSAgICAweDc5CisjZGVmaW5lIEZPRV9NQUdJQ19NRUQJCSAgICAweDgwCisjZGVmaW5lIEZPRV9NQUdJQ19FRE1BMAkJICAgIDB4ODEKKyNkZWZpbmUgRk9FX01BR0lDX0VETUExCQkgICAgMHg4MgorI2RlZmluZSBUQUdfUFJPVEVDVCAgICAgICAgICAgICAgICAgMHg2Nzg5CisjZGVmaW5lIFVTRV9IRUFEX1JPT00gICAgICAgICAgICAgICAwCisjZGVmaW5lIFVTRV9UQUlMX1JPT00gICAgICAgICAgICAgICAxCisjZGVmaW5lIFVTRV9DQiAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFMTF9JTkZPX0VSUk9SICAgICAgICAgICAgICAzCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKkRNQUQgRk9STUFUKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEZPRV9UQUdfUFJPVEVDVChza2IpICBcCisJKCgoc3RydWN0IGRtYWRfcnhfZGVzY2luZm80ICopKChza2IpLT5oZWFkKSktPk1BR0lDX1RBR19QUk9URUNUKQorCisjZGVmaW5lIEZPRV9FTlRSWV9OVU0oc2tiKSAgXAorCSgoKHN0cnVjdCBkbWFkX3J4X2Rlc2NpbmZvNCAqKSgoc2tiKS0+aGVhZCkpLT5mb2VfZW50cnlfbnVtKQorI2RlZmluZSBGT0VfQUxHKHNrYikgIFwKKwkoKChzdHJ1Y3QgZG1hZF9yeF9kZXNjaW5mbzQgKikoKHNrYiktPmhlYWQpKS0+QUxHKQorI2RlZmluZSBGT0VfQUkoc2tiKSAgXAorCSgoKHN0cnVjdCBkbWFkX3J4X2Rlc2NpbmZvNCAqKSgoc2tiKS0+aGVhZCkpLT5DUlNOKQorI2RlZmluZSBGT0VfU1Aoc2tiKSAgXAorCSgoKHN0cnVjdCBkbWFkX3J4X2Rlc2NpbmZvNCAqKSgoc2tiKS0+aGVhZCkpLT5TUE9SVCkKKyNkZWZpbmUgRk9FX01BR0lDX1RBRyhza2IpICBcCisJKCgoc3RydWN0IGRtYWRfcnhfZGVzY2luZm80ICopKChza2IpLT5oZWFkKSktPklGKQorI2RlZmluZSBGT0VfV0RNQV9JRChza2IpICBcCisJKCgoc3RydWN0IGRtYWRfcnhfZGVzY2luZm80ICopKChza2IpLT5oZWFkKSktPldETUFJRCkKKyNkZWZpbmUgRk9FX1JYX0lEKHNrYikJKCgoc3RydWN0IGRtYWRfcnhfZGVzY2luZm80ICopKChza2IpLT5oZWFkKSktPlJYSUQpCisjZGVmaW5lIEZPRV9XQ19JRChza2IpCSgoKHN0cnVjdCBkbWFkX3J4X2Rlc2NpbmZvNCAqKSgoc2tiKS0+aGVhZCkpLT5XQ0lEKQorI2RlZmluZSBGT0VfQlNTX0lEKHNrYikJKCgoc3RydWN0IGRtYWRfcnhfZGVzY2luZm80ICopKChza2IpLT5oZWFkKSktPkJTU0lEKQorI2RlZmluZSBGT0VfUFBFKHNrYikJKCgoc3RydWN0IGRtYWRfcnhfZGVzY2luZm80ICopKChza2IpLT5oZWFkKSktPnBwZSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqSEVBRCBGT1JNQVQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEZPRV9UQUdfUFJPVEVDVF9IRUFEKHNrYikgIFwKKwkoKChzdHJ1Y3QgaGVhZF9yeF9kZXNjaW5mbzQgKikoKHNrYiktPmhlYWQpKS0+TUFHSUNfVEFHX1BST1RFQ1QpCisjZGVmaW5lIEZPRV9FTlRSWV9OVU1fTFNCX0hFQUQoc2tiKSAgXAorCSgoKHN0cnVjdCBoZWFkX3J4X2Rlc2NpbmZvNCAqKSgoc2tiKS0+aGVhZCkpLT5mb2VfZW50cnlfbnVtKQorI2RlZmluZSBGT0VfRU5UUllfTlVNX01TQl9IRUFEKHNrYikgIFwKKwkoKChzdHJ1Y3QgaGVhZF9yeF9kZXNjaW5mbzQgKikoKHNrYiktPmhlYWQpKS0+Zm9lX2VudHJ5X251bV8xKQorCisjZGVmaW5lIEZPRV9FTlRSWV9OVU1fSEVBRChza2IpICBcCisJKCgoRk9FX0VOVFJZX05VTV9NU0JfSEVBRChza2IpICYgMHgxKSA8PCAxNCkgfCBGT0VfRU5UUllfTlVNX0xTQl9IRUFEKHNrYikpCisKKworI2RlZmluZSBGT0VfQUxHX0hFQUQoc2tiKSAgXAorCSgoKHN0cnVjdCBoZWFkX3J4X2Rlc2NpbmZvNCAqKSgoc2tiKS0+aGVhZCkpLT5BTEcpCisjZGVmaW5lIEZPRV9BSV9IRUFEKHNrYikgIFwKKwkoKChzdHJ1Y3QgaGVhZF9yeF9kZXNjaW5mbzQgKikoKHNrYiktPmhlYWQpKS0+Q1JTTikKKyNkZWZpbmUgRk9FX1NQX0hFQUQoc2tiKSAgXAorCSgoKHN0cnVjdCBoZWFkX3J4X2Rlc2NpbmZvNCAqKSgoc2tiKS0+aGVhZCkpLT5TUE9SVCkKKyNkZWZpbmUgRk9FX01BR0lDX1RBR19IRUFEKHNrYikgIFwKKwkoKChzdHJ1Y3QgaGVhZF9yeF9kZXNjaW5mbzQgKikoKHNrYiktPmhlYWQpKS0+SUYpCisKKworI2RlZmluZSBGT0VfV0RNQV9JRF9IRUFEKHNrYikgIFwKKwkoKChzdHJ1Y3QgaGVhZF9yeF9kZXNjaW5mbzQgKikoKHNrYiktPmhlYWQpKS0+V0RNQUlEKQorI2RlZmluZSBGT0VfUlhfSURfSEVBRChza2IpICBcCisJKCgoc3RydWN0IGhlYWRfcnhfZGVzY2luZm80ICopKChza2IpLT5oZWFkKSktPlJYSUQpCisjZGVmaW5lIEZPRV9XQ19JRF9IRUFEKHNrYikgIFwKKwkoKChzdHJ1Y3QgaGVhZF9yeF9kZXNjaW5mbzQgKikoKHNrYiktPmhlYWQpKS0+V0NJRCkKKyNkZWZpbmUgRk9FX0JTU19JRF9IRUFEKHNrYikgIFwKKwkoKChzdHJ1Y3QgaGVhZF9yeF9kZXNjaW5mbzQgKikoKHNrYiktPmhlYWQpKS0+QlNTSUQpCisjZGVmaW5lIEZPRV9QUEVfSEVBRChza2IpICBcCisJKCgoc3RydWN0IGhlYWRfcnhfZGVzY2luZm80ICopKChza2IpLT5oZWFkKSktPlBQRSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKipUQUlMIEZPUk1BVCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgRk9FX1RBR19QUk9URUNUX1RBSUwoc2tiKSAgXAorCSgoKHN0cnVjdCBwZG1hX3J4X2Rlc2NfaW5mbzQgKikoKGxvbmcpKChza2JfZW5kX3BvaW50ZXIoc2tiKSkgLSBGT0VfSU5GT19MRU4pKSktPk1BR0lDX1RBR19QUk9URUNUKQorI2RlZmluZSBGT0VfRU5UUllfTlVNX0xTQl9UQUlMKHNrYikgIFwKKwkoKChzdHJ1Y3QgcGRtYV9yeF9kZXNjX2luZm80ICopKChsb25nKSgoc2tiX2VuZF9wb2ludGVyKHNrYikpIC0gRk9FX0lORk9fTEVOKSkpLT5mb2VfZW50cnlfbnVtKQorCisjZGVmaW5lIEZPRV9FTlRSWV9OVU1fTVNCX1RBSUwoc2tiKSAgXAorCSgoKHN0cnVjdCBwZG1hX3J4X2Rlc2NfaW5mbzQgKikoKGxvbmcpKChza2JfZW5kX3BvaW50ZXIoc2tiKSkgLSBGT0VfSU5GT19MRU4pKSktPmZvZV9lbnRyeV9udW1fMSkKKyNkZWZpbmUgRk9FX0VOVFJZX05VTV9UQUlMKHNrYikgIFwKKwkoKChGT0VfRU5UUllfTlVNX01TQl9UQUlMKHNrYikgJiAweDEpIDw8IDE0KSB8IEZPRV9FTlRSWV9OVU1fTFNCX1RBSUwoc2tiKSkKKyNkZWZpbmUgRk9FX0FMR19UQUlMKHNrYikgIFwKKwkoKChzdHJ1Y3QgcGRtYV9yeF9kZXNjX2luZm80ICopKChsb25nKSgoc2tiX2VuZF9wb2ludGVyKHNrYikpIC0gRk9FX0lORk9fTEVOKSkpLT5BTEcpCisjZGVmaW5lIEZPRV9BSV9UQUlMKHNrYikgIFwKKwkoKChzdHJ1Y3QgcGRtYV9yeF9kZXNjX2luZm80ICopKChsb25nKSgoc2tiX2VuZF9wb2ludGVyKHNrYikpIC0gRk9FX0lORk9fTEVOKSkpLT5DUlNOKQorI2RlZmluZSBGT0VfU1BfVEFJTChza2IpICBcCisJKCgoc3RydWN0IHBkbWFfcnhfZGVzY19pbmZvNCAqKSgobG9uZykoKHNrYl9lbmRfcG9pbnRlcihza2IpKSAtIEZPRV9JTkZPX0xFTikpKS0+U1BPUlQpCisjZGVmaW5lIEZPRV9NQUdJQ19UQUdfVEFJTChza2IpICBcCisJKCgoc3RydWN0IHBkbWFfcnhfZGVzY19pbmZvNCAqKSgobG9uZykoKHNrYl9lbmRfcG9pbnRlcihza2IpKSAtIEZPRV9JTkZPX0xFTikpKS0+SUYpCisKKyNkZWZpbmUgRk9FX1dETUFfSURfVEFJTChza2IpICBcCisJKCgoc3RydWN0IHBkbWFfcnhfZGVzY19pbmZvNCAqKSgobG9uZykoKHNrYl9lbmRfcG9pbnRlcihza2IpKSAtIEZPRV9JTkZPX0xFTikpKS0+V0RNQUlEKQorI2RlZmluZSBGT0VfUlhfSURfVEFJTChza2IpICBcCisJKCgoc3RydWN0IHBkbWFfcnhfZGVzY19pbmZvNCAqKSgobG9uZykoKHNrYl9lbmRfcG9pbnRlcihza2IpKSAtIEZPRV9JTkZPX0xFTikpKS0+UlhJRCkKKyNkZWZpbmUgRk9FX1dDX0lEX1RBSUwoc2tiKSAgXAorCSgoKHN0cnVjdCBwZG1hX3J4X2Rlc2NfaW5mbzQgKikoKGxvbmcpKChza2JfZW5kX3BvaW50ZXIoc2tiKSkgLSBGT0VfSU5GT19MRU4pKSktPldDSUQpCisjZGVmaW5lIEZPRV9CU1NfSURfVEFJTChza2IpICBcCisJKCgoc3RydWN0IHBkbWFfcnhfZGVzY19pbmZvNCAqKSgobG9uZykoKHNrYl9lbmRfcG9pbnRlcihza2IpKSAtIEZPRV9JTkZPX0xFTikpKS0+QlNTSUQpCisKKyNkZWZpbmUgRk9FX1BQRV9UQUlMKHNrYikgIFwKKwkoKChzdHJ1Y3QgcGRtYV9yeF9kZXNjX2luZm80ICopKChsb25nKSgoc2tiX2VuZF9wb2ludGVyKHNrYikpIC0gRk9FX0lORk9fTEVOKSkpLT5wcGUpCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBGT0VfV0RNQV9JRF9DQihza2IpICBcCisJKCgoc3RydWN0IGNiX3J4X2Rlc2NfaW5mbzQgKikoKHNrYiktPmhlYWQpKS0+V0RNQUlEKQorI2RlZmluZSBGT0VfUlhfSURfQ0Ioc2tiKSAgXAorCSgoKHN0cnVjdCBjYl9yeF9kZXNjX2luZm80ICopKChza2IpLT5oZWFkKSktPlJYSUQpCisjZGVmaW5lIEZPRV9XQ19JRF9DQihza2IpICBcCisJKCgoc3RydWN0IGNiX3J4X2Rlc2NfaW5mbzQgKikoKHNrYiktPmhlYWQpKS0+V0NJRCkKKyNkZWZpbmUgRk9FX0JTU19JRF9DQihza2IpICBcCisJKCgoc3RydWN0IGNiX3J4X2Rlc2NfaW5mbzQgKikoKHNrYiktPmhlYWQpKS0+QlNTSUQpCisKKyNkZWZpbmUgRk9FX01JTkZPKHNrYikJKCgoc3RydWN0IGhlYWRfcnhfZGVzY2luZm80ICopKChza2IpLT5oZWFkKSktPm1pbmZvKQorI2RlZmluZSBGT0VfTUlORk9fTlRZUEUoc2tiKQkoKChzdHJ1Y3QgaGVhZF9yeF9kZXNjaW5mbzQgKikoKHNrYiktPmhlYWQpKS0+bnR5cGUpCisjZGVmaW5lIEZPRV9NSU5GT19DSElEKHNrYikJKCgoc3RydWN0IGhlYWRfcnhfZGVzY2luZm80ICopKChza2IpLT5oZWFkKSktPmNoaWQpCisjZGVmaW5lIEZPRV9NSU5GT19IRUFEKHNrYikJKCgoc3RydWN0IGhlYWRfcnhfZGVzY2luZm80ICopKChza2IpLT5oZWFkKSktPm1pbmZvKQorI2RlZmluZSBGT0VfTUlORk9fTlRZUEVfSEVBRChza2IpCSgoKHN0cnVjdCBoZWFkX3J4X2Rlc2NpbmZvNCAqKSgoc2tiKS0+aGVhZCkpLT5udHlwZSkKKyNkZWZpbmUgRk9FX01JTkZPX0NISURfSEVBRChza2IpCSgoKHN0cnVjdCBoZWFkX3J4X2Rlc2NpbmZvNCAqKSgoc2tiKS0+aGVhZCkpLT5jaGlkKQorCisjZGVmaW5lIEZPRV9NSU5GT19UQUlMKHNrYikgIFwKKwkoKChzdHJ1Y3QgcGRtYV9yeF9kZXNjX2luZm80ICopKChsb25nKSgoc2tiX2VuZF9wb2ludGVyKHNrYikpIC0gRk9FX0lORk9fTEVOKSkpLT5taW5mbykKKyNkZWZpbmUgRk9FX01JTkZPX05UWVBFX1RBSUwoc2tiKSAgXAorCSgoKHN0cnVjdCBwZG1hX3J4X2Rlc2NfaW5mbzQgKikoKGxvbmcpKChza2JfZW5kX3BvaW50ZXIoc2tiKSkgLSBGT0VfSU5GT19MRU4pKSktPm50eXBlKQorI2RlZmluZSBGT0VfTUlORk9fQ0hJRF9UQUlMKHNrYikgIFwKKwkoKChzdHJ1Y3QgcGRtYV9yeF9kZXNjX2luZm80ICopKChsb25nKSgoc2tiX2VuZF9wb2ludGVyKHNrYikpIC0gRk9FX0lORk9fTEVOKSkpLT5jaGlkKQorCisjaWYgZGVmaW5lZChDT05GSUdfUkFfSFdfTkFUX1BQVFBfTDJUUCkKKyNkZWZpbmUgRk9FX1NPVVJDRShza2IpCSgoKHN0cnVjdCBoZWFkX3J4X2Rlc2NpbmZvNCAqKSgoc2tiKS0+aGVhZCkpLT5TT1VSQ0UpCisjZGVmaW5lIEZPRV9ERVNUKHNrYikJKCgoc3RydWN0IGhlYWRfcnhfZGVzY2luZm80ICopKChza2IpLT5oZWFkKSktPkRFU1QpCisjZW5kaWYKKworI2RlZmluZSBJU19TUEFDRV9BVkFJTEFCTEVfSEVBRChza2IpICBcCisJKCgoKHNrYl9oZWFkcm9vbShza2IpID49IEZPRV9JTkZPX0xFTikgPyAxIDogMCkpKQorI2RlZmluZSBJU19TUEFDRV9BVkFJTEFCTEVfSEVBRChza2IpICBcCisJKCgoKHNrYl9oZWFkcm9vbShza2IpID49IEZPRV9JTkZPX0xFTikgPyAxIDogMCkpKQorI2RlZmluZSBGT0VfSU5GT19TVEFSVF9BRERSX0hFQUQoc2tiKQkoc2tiLT5oZWFkKQorCisjaWYgZGVmaW5lZChDT05GSUdfUkFfSFdfTkFUX1BQVFBfTDJUUCkKKyNkZWZpbmUgRk9FX1NPVVJDRV9IRUFEKHNrYikgIFwKKwkoKChzdHJ1Y3QgaGVhZF9yeF9kZXNjaW5mbzQgKikoKHNrYiktPmhlYWQpKS0+U09VUkNFKQorI2RlZmluZSBGT0VfREVTVF9IRUFEKHNrYikgIFwKKwkoKChzdHJ1Y3QgaGVhZF9yeF9kZXNjaW5mbzQgKikoKHNrYiktPmhlYWQpKS0+REVTVCkKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfUkFfSFdfTkFUX1BQVFBfTDJUUCkKKyNkZWZpbmUgRk9FX1NPVVJDRV9IRUFEKHNrYikgIFwKKwkoKChzdHJ1Y3QgaGVhZF9yeF9kZXNjaW5mbzQgKikoKHNrYiktPmhlYWQpKS0+U09VUkNFKQorI2RlZmluZSBGT0VfREVTVF9IRUFEKHNrYikgIFwKKwkoKChzdHJ1Y3QgaGVhZF9yeF9kZXNjaW5mbzQgKikoKHNrYiktPmhlYWQpKS0+REVTVCkKKyNlbmRpZgorI2RlZmluZSBJU19TUEFDRV9BVkFJTEFCTEVfVEFJTChza2IpICBcCisJKCgoc2tiX3RhaWxyb29tKHNrYikgPj0gRk9FX0lORk9fTEVOKSA/IDEgOiAwKSkKKyNkZWZpbmUgSVNfU1BBQ0VfQVZBSUxBQkxFX1RBSUwoc2tiKSAgXAorCSgoKHNrYl90YWlscm9vbShza2IpID49IEZPRV9JTkZPX0xFTikgPyAxIDogMCkpCisjZGVmaW5lIEZPRV9JTkZPX1NUQVJUX0FERFJfVEFJTChza2IpICBcCisJKCh1bnNpZ25lZCBjaGFyICopKGxvbmcpKHNrYl9lbmRfcG9pbnRlcihza2IpIC0gRk9FX0lORk9fTEVOKSkKKworI2lmIGRlZmluZWQoQ09ORklHX1JBX0hXX05BVF9QUFRQX0wyVFApCisjZGVmaW5lIEZPRV9TT1VSQ0VfVEFJTChza2IpICBcCisJKCgoc3RydWN0IHBkbWFfcnhfZGVzY19pbmZvNCAqKSgobG9uZykoKHNrYl9lbmRfcG9pbnRlcihza2IpKSAtIEZPRV9JTkZPX0xFTikpKS0+U09VUkNFKQorI2RlZmluZSBGT0VfREVTVF9UQUlMKHNrYikgIFwKKwkoKChzdHJ1Y3QgcGRtYV9yeF9kZXNjX2luZm80ICopKChsb25nKSgoc2tiX2VuZF9wb2ludGVyKHNrYikpIC0gRk9FX0lORk9fTEVOKSkpLT5ERVNUKQorI2VuZGlmCisKKy8qIGNoYW5nZSB0aGUgcG9zaXRpb24gb2Ygc2tiX0NCIGlmIG5lY2Vzc2FyeSAqLworI2RlZmluZSBDQl9PRkZTRVQJCSAgICA0MAorI2RlZmluZSBJU19TUEFDRV9BVkFJTEFCTEVfQ0Ioc2tiKSAgICAxCisjZGVmaW5lIEZPRV9JTkZPX1NUQVJUX0FERFJfQ0Ioc2tiKSAgICAoc2tiLT5jYiArICBDQl9PRkZTRVQpCisjZGVmaW5lIEZPRV9UQUdfUFJPVEVDVF9DQjAoc2tiKSAgXAorCSgoKHN0cnVjdCBjYl9yeF9kZXNjX2luZm80ICopKChza2IpLT5jYiArIENCX09GRlNFVCkpLT5NQUdJQ19UQUdfUFJPVEVDVDApCisjZGVmaW5lIEZPRV9UQUdfUFJPVEVDVF9DQjEoc2tiKSAgXAorCSgoKHN0cnVjdCBjYl9yeF9kZXNjX2luZm80ICopKChza2IpLT5jYiArIENCX09GRlNFVCkpLT5NQUdJQ19UQUdfUFJPVEVDVDEpCisjZGVmaW5lIEZPRV9FTlRSWV9OVU1fQ0Ioc2tiKSAgXAorCSgoKHN0cnVjdCBjYl9yeF9kZXNjX2luZm80ICopKChza2IpLT5jYiArIENCX09GRlNFVCkpLT5mb2VfZW50cnlfbnVtKQorI2RlZmluZSBGT0VfQUxHX0NCKHNrYikgIFwKKwkoKChzdHJ1Y3QgY2JfcnhfZGVzY19pbmZvNCAqKSgoc2tiKS0+Y2IgKyBDQl9PRkZTRVQpKS0+QUxHKQorI2RlZmluZSBGT0VfQUlfQ0Ioc2tiKSAgXAorCSgoKHN0cnVjdCBjYl9yeF9kZXNjX2luZm80ICopKChza2IpLT5jYiArIENCX09GRlNFVCkpLT5DUlNOKQorI2RlZmluZSBGT0VfU1BfQ0Ioc2tiKSAgXAorCSgoKHN0cnVjdCBjYl9yeF9kZXNjX2luZm80ICopKChza2IpLT5jYiArIENCX09GRlNFVCkpLT5TUE9SVCkKKyNkZWZpbmUgRk9FX01BR0lDX1RBR19DQihza2IpICBcCisJKCgoc3RydWN0IGNiX3J4X2Rlc2NfaW5mbzQgKikoKHNrYiktPmNiICsgQ0JfT0ZGU0VUKSktPklGKQorCisjaWYgZGVmaW5lZChDT05GSUdfUkFfSFdfTkFUX1BQVFBfTDJUUCkKKyNkZWZpbmUgRk9FX1NPVVJDRV9DQihza2IpCSgoKHN0cnVjdCBjYl9yeF9kZXNjX2luZm80ICopKChza2IpLT5jYiArIENCX09GRlNFVCkpLT5TT1VSQ0UpCisjZGVmaW5lIEZPRV9ERVNUX0NCKHNrYikJKCgoc3RydWN0IGNiX3J4X2Rlc2NfaW5mbzQgKikoKHNrYiktPmNiICsgQ0JfT0ZGU0VUKSktPkRFU1QpCisjZW5kaWYKKworI2RlZmluZSBJU19NQUdJQ19UQUdfUFJPVEVDVF9WQUxJRF9IRUFEKHNrYikgIFwKKwkoRk9FX1RBR19QUk9URUNUX0hFQUQoc2tiKSA9PSBUQUdfUFJPVEVDVCkKKyNkZWZpbmUgSVNfTUFHSUNfVEFHX1BST1RFQ1RfVkFMSURfVEFJTChza2IpICBcCisJKEZPRV9UQUdfUFJPVEVDVF9UQUlMKHNrYikgPT0gVEFHX1BST1RFQ1QpCisjZGVmaW5lIElTX01BR0lDX1RBR19QUk9URUNUX1ZBTElEX0NCKHNrYikgIFwKKwkoKEZPRV9UQUdfUFJPVEVDVF9DQjAoc2tiKSA9PSBUQUdfUFJPVEVDVCkgJiYgXAorCShGT0VfVEFHX1BST1RFQ1RfQ0IwKHNrYikgPT0gRk9FX1RBR19QUk9URUNUX0NCMShza2IpKSkKKworI2RlZmluZSBJU19JRl9QQ0lFX1dMQU5fSEVBRChza2IpICBcCisJKChGT0VfTUFHSUNfVEFHX0hFQUQoc2tiKSA9PSBGT0VfTUFHSUNfUENJKSB8fCBcCisJKEZPRV9NQUdJQ19UQUdfSEVBRChza2IpID09IEZPRV9NQUdJQ19XTEFOKSB8fCBcCisJKEZPRV9NQUdJQ19UQUdfSEVBRChza2IpID09IEZPRV9NQUdJQ19HRSkpCisKKyNkZWZpbmUgSVNfSUZfUENJRV9XTEFOX1RBSUwoc2tiKSAgXAorCSgoRk9FX01BR0lDX1RBR19UQUlMKHNrYikgPT0gRk9FX01BR0lDX1BDSSkgfHwgXAorCShGT0VfTUFHSUNfVEFHX1RBSUwoc2tiKSA9PSBGT0VfTUFHSUNfV0xBTikpCisKKyNkZWZpbmUgSVNfSUZfUENJRV9XTEFOX0NCKHNrYikgIFwKKwkoKEZPRV9NQUdJQ19UQUdfQ0Ioc2tiKSA9PSBGT0VfTUFHSUNfUENJKSB8fCBcCisJKEZPRV9NQUdJQ19UQUdfQ0Ioc2tiKSA9PSBGT0VfTUFHSUNfV0xBTikpCisKKy8qIG1hY3JvcyAqLworI2RlZmluZSBtYWdpY190YWdfc2V0X3plcm8oc2tiKSBcCit7IFwKKwlpZiAoKEZPRV9NQUdJQ19UQUdfSEVBRChza2IpID09IEZPRV9NQUdJQ19QQ0kpIHx8IFwKKwkgICAgKEZPRV9NQUdJQ19UQUdfSEVBRChza2IpID09IEZPRV9NQUdJQ19XTEFOKSB8fCBcCisJICAgIChGT0VfTUFHSUNfVEFHX0hFQUQoc2tiKSA9PSBGT0VfTUFHSUNfR0UpKSB7IFwKKwkJaWYgKElTX1NQQUNFX0FWQUlMQUJMRV9IRUFEKHNrYikpIFwKKwkJCUZPRV9NQUdJQ19UQUdfSEVBRChza2IpID0gMDsgXAorCX0gXAorCWlmICgoRk9FX01BR0lDX1RBR19UQUlMKHNrYikgPT0gRk9FX01BR0lDX1BDSSkgfHwgXAorCSAgICAoRk9FX01BR0lDX1RBR19UQUlMKHNrYikgPT0gRk9FX01BR0lDX1dMQU4pIHx8IFwKKwkgICAgKEZPRV9NQUdJQ19UQUdfVEFJTChza2IpID09IEZPRV9NQUdJQ19HRSkpIHsgXAorCQlpZiAoSVNfU1BBQ0VfQVZBSUxBQkxFX1RBSUwoc2tiKSkgXAorCQkJRk9FX01BR0lDX1RBR19UQUlMKHNrYikgPSAwOyBcCisJfSBcCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod25hdF9zZXRfbDJ0cF91bmhpdChzdHJ1Y3QgaXBoZHIgKmlwaCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19SQV9IV19OQVRfUFBUUF9MMlRQKQorCS8qIG9ubHkgY2xlYXIgaGVhZGVyb29tIGZvciBUQ1AgT1Igbm90IEwyVFAgcGFja2V0cyAqLworCWlmICgoaXBoLT5wcm90b2NvbCA9PSAweDYpIHx8IChudG9ocyh1ZHBfaGRyKHNrYiktPmRlc3QpICE9IDE3MDEpKSB7CisJCWlmIChJU19TUEFDRV9BVkFJTEFCTEVfSEVBRChza2IpKSB7CisJCQlGT0VfTUFHSUNfVEFHKHNrYikgPSAwOworCQkJRk9FX0FJKHNrYikgPSBVTl9ISVQ7CisJCX0KKwl9CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB2b2lkIGh3bmF0X3NldF9sMnRwX2Zhc3RfcGF0aCh1MzIgbDJ0cF9mYXN0X3BhdGgsIHUzMiBwcHRwX2Zhc3RfcGF0aCkKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19SQV9IV19OQVRfUFBUUF9MMlRQKQorCWwydHBfZmFzdF9wYXRoID0gMTsKKwlwcHRwX2Zhc3RfcGF0aCA9IDA7CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB2b2lkIGh3bmF0X2NsZWFyX2wydHBfZmFzdF9wYXRoKHUzMiBsMnRwX2Zhc3RfcGF0aCkKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19SQV9IV19OQVRfUFBUUF9MMlRQKQorCWwydHBfZmFzdF9wYXRoID0gMDsKKyNlbmRpZgorfQorCisvKiAjZGVmaW5lIENPTkZJR19IV19OQVRfSVBJICovCisjaWYgZGVmaW5lZChDT05GSUdfSFdfTkFUX0lQSSkKK2V4dGVybiBpbnQgZGVidWdfbGV2ZWw7CitpbnQgZ2V0X3Jwc19jcHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJc3RydWN0IHJwc19kZXZfZmxvdyAqKnJmbG93cCk7Cit1aW50MzJfdCBwcGVfZXh0aWZfcnhfaGFuZGxlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2ludCBoaXRiaW5kX2ZvcmNlX3RvX2NwdV9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBmb2VfZW50cnkgKmVudHJ5KTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgaXBpZGJnW251bV9wb3NzaWJsZV9jcHVzKCldWzEwXTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgaXBpZGJnMltudW1fcG9zc2libGVfY3B1cygpXVsxMF07CisvKiAjZGVmaW5lIEhOQVRfSVBJX1JYUVVFVUUJMSAqLworI2RlZmluZSBITkFUX0lQSV9EUQkJMQorI2RlZmluZSBITkFUX0lQSV9IQVNIX05PUk1BTAkwCisjZGVmaW5lIEhOQVRfSVBJX0hBU0hfVlRBRwkJMQorI2RlZmluZSBITkFUX0lQSV9IQVNIX0ZST01fRVhUSUYJMgorI2RlZmluZSBITkFUX0lQSV9IQVNIX0ZST01fR01BQwkJNAorCitzdHJ1Y3QgaG5hdF9pcGlfcyB7CisjaWYgZGVmaW5lZChITkFUX0lQSV9EUSkKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICAgICBza2JfaW5wdXRfcXVldWU7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCAgICAgc2tiX3Byb2Nlc3NfcXVldWU7CisjZWxpZiBkZWZpbmVkKEhOQVRfSVBJX1JYUVVFVUUpCisJYXRvbWljX3QgcnhfcXVldWVfbnVtOworCXVuc2lnbmVkIGludCByeF9xdWV1ZV9yaWR4OworCXVuc2lnbmVkIGludCByeF9xdWV1ZV93aWR4OworCXN0cnVjdCBza19idWZmICoqcnhfcXVldWU7CisjZWxzZQorCS8qIHVuc2lnbmVkIGludCBkdW1teTBbMF07ICovCisJc3RydWN0IHNrX2J1ZmZfaGVhZCAgICAgc2tiX2lwaV9xdWV1ZTsKKwkvKiB1bnNpZ25lZCBpbnQgZHVtbXkxWzhdOyAqLworI2VuZGlmCisJdW5zaWduZWQgbG9uZyB0aW1lX3JlYywgcmVjdl90aW1lOworCXVuc2lnbmVkIGludCBpcGlfYWNjdW07CisJLypod25hdCBpcGkgdXNlKi8KKwlzcGlubG9ja190ICAgICAgaXBpbG9jazsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3Qgc21wX2Z1bmNfY2FsbF90c2s7Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CisKK3N0cnVjdCBobmF0X2lwaV9zdGF0IHsKKwl1bnNpZ25lZCBsb25nIGRyb3BfcGt0X251bV9mcm9tX2V4dGlmOworCXVuc2lnbmVkIGxvbmcgZHJvcF9wa3RfbnVtX2Zyb21fcHBlaGl0OworCXVuc2lnbmVkIGludCBzbXBfY2FsbF9jbnRfZnJvbV9leHRpZjsKKwl1bnNpZ25lZCBpbnQgc21wX2NhbGxfY250X2Zyb21fcHBlaGl0OworCWF0b21pY190IGNwdV9zdGF0dXM7CisJLyogYXRvbWljX3QgY3B1X3N0YXR1c19mcm9tX2V4dGlmOyAqLworCS8qIGF0b21pY190IGNwdV9zdGF0dXNfZnJvbV9wcGVoaXQ7ICovCisKKwkvKiBhdG9taWNfdCBob29rX3N0YXR1c19mcm9tX2V4dGlmOyAqLworCS8qIGF0b21pY190IGhvb2tfc3RhdHVzX2Zyb21fcHBlaGl0OyAqLworfSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworCisjZGVmaW5lIGNwdV9zdGF0dXNfZnJvbV9leHRpZgljcHVfc3RhdHVzCisjZGVmaW5lIGNwdV9zdGF0dXNfZnJvbV9wcGVoaXQJY3B1X3N0YXR1cworCitzdHJ1Y3QgaG5hdF9pcGlfY2ZnIHsKKwl1bnNpZ25lZCBpbnQgZW5hYmxlX2Zyb21fZXh0aWY7CisJdW5zaWduZWQgaW50IGVuYWJsZV9mcm9tX3BwZWhpdDsKKwl1bnNpZ25lZCBpbnQgcXVldWVfdGhyZXNoX2Zyb21fZXh0aWY7CisJdW5zaWduZWQgaW50IHF1ZXVlX3RocmVzaF9mcm9tX3BwZWhpdDsKKwl1bnNpZ25lZCBpbnQgZHJvcF9wa3RfZnJvbV9leHRpZjsKKwl1bnNpZ25lZCBpbnQgZHJvcF9wa3RfZnJvbV9wcGVoaXQ7CisJdW5zaWduZWQgaW50IGlwaV9jbnRfbW9kX2Zyb21fZXh0aWY7CisJdW5zaWduZWQgaW50IGlwaV9jbnRfbW9kX2Zyb21fcHBlaGl0OworfSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworCitpbnQgaG5hdF9pcGlfaW5pdCh2b2lkKTsKK2ludCBobmF0X2lwaV9kZV9pbml0KHZvaWQpOworI2VuZGlmCisKKyNkZWZpbmUgUURNQV9SWAkJNQorI2RlZmluZSBQRE1BX1JYCQkwCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2luY2x1ZGUvdWFwaS9saW51eC9tdGtfbmw4MDIxMV9pbmMvbXRrX3ZlbmRvcl9ubDgwMjExLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2luY2x1ZGUvdWFwaS9saW51eC9tdGtfbmw4MDIxMV9pbmMvbXRrX3ZlbmRvcl9ubDgwMjExLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjJhZGE0MQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvaW5jbHVkZS91YXBpL2xpbnV4L210a19ubDgwMjExX2luYy9tdGtfdmVuZG9yX25sODAyMTEuaApAQCAtMCwwICsxLDY2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgWzIwMjBdLCBNZWRpYVRlayBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZS9maXJtd2FyZSBhbmQgcmVsYXRlZCBkb2N1bWVudGF0aW9uICgiTWVkaWFUZWsgU29mdHdhcmUiKSBhcmUKKyAqIHByb3RlY3RlZCB1bmRlciByZWxldmFudCBjb3B5cmlnaHQgbGF3cy4KKyAqIFRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaGVyZWluIGlzIGNvbmZpZGVudGlhbCBhbmQgcHJvcHJpZXRhcnkgdG8KKyAqIE1lZGlhVGVrIEluYy4gYW5kL29yIGl0cyBsaWNlbnNvcnMuCisgKiBFeGNlcHQgYXMgb3RoZXJ3aXNlIHByb3ZpZGVkIGluIHRoZSBhcHBsaWNhYmxlIGxpY2Vuc2luZyB0ZXJtcyB3aXRoCisgKiBNZWRpYVRlayBJbmMuIGFuZC9vciBpdHMgbGljZW5zb3JzLCBhbnkgcmVwcm9kdWN0aW9uLCBtb2RpZmljYXRpb24sIHVzZSBvcgorICogZGlzY2xvc3VyZSBvZiBNZWRpYVRlayBTb2Z0d2FyZSwgYW5kIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBoZXJlaW4sIGluIHdob2xlCisgKiBvciBpbiBwYXJ0LCBzaGFsbCBiZSBzdHJpY3RseSBwcm9oaWJpdGVkLgorKi8KKworI2lmbmRlZiBfX01US19WRU5ET1JfTkw4MDIxMV9ICisjZGVmaW5lIF9fTVRLX1ZFTkRPUl9OTDgwMjExX0gKKy8qCisgKiBUaGlzIGhlYWRlciBmaWxlIGRlZmluZXMgdGhlIHVzZXJzcGFjZSBBUEkgdG8gdGhlIHdpcmVsZXNzIHN0YWNrLiBQbGVhc2UKKyAqIGJlIGNhcmVmdWwgbm90IHRvIGJyZWFrIHRoaW5ncyAtIGkuZS4gZG9uJ3QgbW92ZSBhbnl0aGluZyBhcm91bmQgb3Igc28KKyAqIHVubGVzcyB5b3UgY2FuIGRlbW9uc3RyYXRlIHRoYXQgaXQgYnJlYWtzIG5laXRoZXIgQVBJIG5vciBBQkkuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaWZuZGVmIEdOVV9QQUNLRUQKKyNkZWZpbmUgR05VX1BBQ0tFRCAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpCisjZW5kaWYgLyogR05VX1BBQ0tFRCAqLworCisjZGVmaW5lIE1US19OTDgwMjExX1ZFTkRPUl9JRAkweDBjZTcKKworLyoqCisgKiBlbnVtIG10a19ubDgwMjExX3ZlbmRvcl9jb21tYW5kcyAtIHN1cHBvcnRlZCBtdGsgbmw4MDIxMSB2ZW5kb3IgY29tbWFuZHMKKyAqCisgKiBATVRLX05MODAyMTFfVkVORE9SX1NVQkNNRF9VTlNQRUM6IFJlc2VydmVkIHZhbHVlIDAKKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX1RFU1Q6IFRlc3QgZm9yIG5sODAyMTFjb21tYW5kL2V2ZW50CisgKiBATVRLX05MODAyMTFfVkVORE9SX1NVQkNNRF9BTU5UX0NUUkwgPSAweDAwMDAwMGFlOgorICogQE1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfQ1NJX0NUUkwgPSAweDAwMDAwMGMyOgorICogQE1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfUkZFQVRVUkVfQ1RSTDoKKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX1dJUkVMRVNTX0NUUkw6CisgKiBATVRLX05MODAyMTFfVkVORE9SX1NVQkNNRF9TRVRfRE9UMTFWX1dOTToKKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX1NFVF9XQVBQOgorICogQE1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfU0VUX0NIX01PTklUT1I6CisgKiBATVRLX05MODAyMTFfVkVORE9SX1NVQkNNRF9CU1NfSU5GTzoKKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX1NFVF9NQVBfUjM6CisgKiBATVRLX05MODAyMTFfVkVORE9SX1NVQkNNRF9TRVRfSFNfQU5RUF9SU1A6CisgKiBATVRLX05MODAyMTFfVkVORE9SX1NVQkNNRF9TRVRfSFM6CisgKiBATVRLX05MODAyMTFfVkVORE9SX1NVQkNNRF9TRVRfT0ZGQ0hfU0NBTjoKKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX1NFVF9ERlNfSU5GTzoKKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX1NFVF9XU0M6CisgKiBATVRLX05MODAyMTFfVkVORE9SX1NVQkNNRF9TRVRfTUJPX01TRzoKKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX1NFVF9SUk1fQ09NTUFORDoKKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX1NFVF9RT1M6CisgKiBATVRLX05MODAyMTFfVkVORE9SX1NVQkNNRF9HRVRfQ0FQOiBjb21tYW5kIHRvIGdldCBjYXBhYmlsaXR5IGluZm9ybWF0aW9uCisgKiAgZnJvbSB3aWZpIGRyaXZlciwgaXQgcmVxdXJlcyBtdGtfbmw4MDIxMV92ZW5kb3JfYXR0cl9nZXRfY2FwIGF0dHJpYnV0ZXMuCisgKiBATVRLX05MODAyMTFfVkVORE9SX1NVQkNNRF9HRVRfUlVOVElNRV9JTkZPOiBjb21tYW5kIHRvIGdldCBydW4gdGltZSBpbmZvcm1hdGlvbgorICogIGZyb20gd2lmaSBkcml2ZXIsIGl0IHJlcXVyZXMgbXRrX25sODAyMTFfdmVuZG9yX2F0dHJfZ2V0X3J1bnRpbWVfaW5mbyBhdHRyaWJ1dGVzLgorICogQE1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfR0VUX1NUQVRJU1RJQzogY29tbWFuZCB0byBnZXQgc3RhdGlzdGljIGluZm9ybWF0aW9uCisgKiAgZnJvbSB3aWZpIGRyaXZlciwgaXQgcmVxdXJlcyBtdGtfbmw4MDIxMV92ZW5kb3JfYXR0cl9nZXRfc3RhdGljX2luZm8gYXR0cmlidXRlcy4KKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX0dFVF9TUkdfQklUTUFQOgorICogQE1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfR0VUX1NUQVRJQ19JTkZPOgorICogQE1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfR0VUX1dOTToKKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX0dFVF9IUzoKKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX0dFVF9XU0M6CisgKiBATVRLX05MODAyMTFfVkVORE9SX1NVQkNNRF9HRVRfREZTX1pFUk9fV0FJVDoKKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX0dFVF9GUkFNRToKKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX0dFVF9BUENMSV9JTkZPOgorICogQE1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfQkJQOgorICogQE1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfTUFDOiBjb21tYW5kIHRvIHNldCBvciBnZXQgbWFjIHJlZ2lzdGVyCisgKiAgaW5mb3JtYXRpb24gdG8vZnJvbSB3aWZpIGRyaXZlciwgcmVxdWlyZSBtdGtfbmw4MDIxMV92ZW5kb3JfYXR0cnNfbWFjCisgKiAgYXR0cmlidXRlcy4KKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX0UyUDoKKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX0FURToKKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX1NUQVRJU1RJQ1M6IGNvbW1hbmQgdG8gZ2V0IHN0YXRpc3RpYyBpbmZvcm1hdGlvbgorICogIGluIHN0cmluZyBmcm9tIHdpZmkgZHJpdmVyLCB0aGlzIGNvbW1hbmQgaXMgdXNlZCB0byBiZSBjb21wYXRpYmxlIHdpdGgKKyAqICBvbGQgaXdwcml2IHN0YXQgY29tbWFuZCwgaXQgcmVxdXJlcyBtdGtfbmw4MDIxMV92ZW5kb3JfYXR0cnNfc3RhdGlzdGljcworICogIGF0dHJpYnV0ZXMuCisgKiBATVRLX05MODAyMTFfVkVORE9SX1NVQkNNRF9BRERfUE1LSURfQ0FDSEU6CisgKiBATVRLX05MODAyMTFfVkVORE9SX1NVQkNNRF9SQURJVVNfREFUQToKKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX0dTSVRFU1VSVkVZOgorICogQE1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfR0VUX01BQ19UQUJMRToKKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX1NUQVRJQ19XRVBfQ09QWToKKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX1dTQ19QUk9GSUxFOgorICogQE1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfUkY6CisgKiBATVRLX05MODAyMTFfVkVORE9SX1NVQkNNRF9TRVRfV1NDX1BST0ZJTEVfVTMyX0lURU06CisgKiBATVRLX05MODAyMTFfVkVORE9SX1NVQkNNRF9RVUVSWV9CQVRBQkxFOgorICogQE1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfUkQ6CisgKiBATVRLX05MODAyMTFfVkVORE9SX1NVQkNNRF9TRVRfRlRfUEFSQU06CisgKiBATVRLX05MODAyMTFfVkVORE9SX1NVQkNNRF9TRVRfV1NDT09COgorICogQE1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfV1NDX0NBTExCQUNLOgorICogQE1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfUlhfU1RBVElTVElDUzoKKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX0dFVF9EUklWRVJfSU5GTzoKKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX1NUQV9WTEFOOgorICogQE1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfUEhZX1NUQVRFOgorICogQE1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfVkVORE9SX1NFVDogY29tbWFuZCB0byBzZXQgb2xkIGl3cHJpdiBzZXQgY29tbWFuZAorICogIHN0cmluZyB0byB3aWZpIGRyaXZlciwgaXQgcmVxdWlyZXMgbXRrX25sODAyMTFfdmVuZG9yX2F0dHJzX3ZlbmRvcl9zZXQgYXR0cmlidXRlcywKKyAqICBwbGVhc2Ugbm90ZSB0aGF0IHRoaXMgY29tbWFuZCBpcyBqdXN0IHVzZWQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIG9sZCBpd3ByaXYKKyAqICBzZXQgY29tbWFuZCwgYW5kIGl0IHdpbGwgYmUgZGlzY2FyZGVkIGluIHNvbWUgdGltZS4KKyAqCisgKiBATVRLX05MODAyMTFfVkVORE9SX1NVQkNNRF9WRU5ET1JfU0hPVzogY29tbWFuZCB0byBzZXQgb2xkIGl3cHJpdiBzaG93IGNvbW1hbmQKKyAqICBzdHJpbmcgdG8gd2lmaSBkcml2ZXIsIHJlcXVpcmUgbXRrX25sODAyMTFfdmVuZG9yX2F0dHJzX3ZlbmRvcl9zaG93IGF0dHJpYnV0ZXMsCisgKiAgcGxlYXNlIG5vdGUgdGhhdCB0aGlzIGNvbW1hbmQgaXMganVzdCB1c2VkIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBvbGQgaXdwcml2CisgKiAgc2hvdyBjb21tYW5kLCBhbmQgaXQgd2lsbCBiZSBkaXNjYXJkZWQgaW4gc29tZSB0aW1lLgorICoKKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX0hTOgorICogQE1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfV05NOgorICogQE1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfTUJPX01TRzoKKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX05FSUdIQk9SX1JFUE9SVDoKKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX09GRkNIQU5ORUxfSU5GTzoKKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX09DRV9NU0c6CisgKiBATVRLX05MODAyMTFfVkVORE9SX1NVQkNNRF9XQVBQX1JFUTogY29tbWFuZCB0byBzZXQgb3IgZ2V0IHdhcHAgcmVxdXJlZAorICogIGluZm9ybWF0aW9uIGZyb20gd2lmaSBkcml2ZXIsIHJlcXVpcmUgbXRrX25sODAyMTFfdmVuZG9yX2F0dHJfd2FwcF9yZXEgYXR0cmlidXRlcy4KKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX1NFVF9BUF9TRUNVUklUWTogY29tbWFuZCB0byBzZXQgYXAgc2VjdXJpdHkgY29uZmlndXJhdGlvbnMKKyAqICB0byBhIHNwZWNpZmljIGJzcyBpbiB3aWZpIGRyaXZlciwgaXQgcmVxdWlyZXMgbXRrX25sODAyMTFfdmVuZG9yX2F0dHJzX2FwX3NlY3VyaXR5CisgKiAgYXR0cmlidXRlcy4KKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX1NFVF9BUF9WT1c6ICBjb21tYW5kIHRvIHNldCBhcCB2b3cgY29uZmlndXJhdGlvbnMKKyAqICBpdCByZXF1aXJlcyBtdGtfbmw4MDIxMV92ZW5kb3JfYXR0cnNfYXBfdm93IGF0dHJpYnV0ZXMuCisgKiBATVRLX05MODAyMTFfVkVORE9SX0NNRF9NQVg6IGhpZ2hlc3QgdXNlZCBjb21tYW5kIG51bWJlcgorICogQF9fTVRLX05MODAyMTFfVkVORE9SX0NNRF9BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2UKKyAqLworZW51bSBtdGtfbmw4MDIxMV92ZW5kb3JfY29tbWFuZHMgeworCU1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfVU5TUEVDID0gMCwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX1RFU1QgPSAxLAorCisvKiBkb24ndCBjaGFuZ2UgdGhlIG9yZGVyIG9yIGFkZCBhbnl0aGluZyBiZXR3ZWVuLCB0aGlzIGlzIEFCSSEgKi8KKwlNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX0FNTlRfQ1RSTCA9IDB4MDAwMDAwYWUsCisJTVRLX05MODAyMTFfVkVORE9SX1NVQkNNRF9DU0lfQ1RSTCA9IDB4MDAwMDAwYzIsCisJTVRLX05MODAyMTFfVkVORE9SX1NVQkNNRF9SRkVBVFVSRV9DVFJMLAorCU1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfV0lSRUxFU1NfQ1RSTCwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX1NFVF9ET1QxMVZfV05NLAorCU1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfU0VUX1dBUFAsCisJTVRLX05MODAyMTFfVkVORE9SX1NVQkNNRF9TRVRfQ0hfTU9OSVRPUiwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX0JTU19JTkZPLAorCU1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfU0VUX01BUF9SMywKKwlNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX1NFVF9IU19BTlFQX1JTUCwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX1NFVF9IUywKKwlNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX1NFVF9PRkZDSF9TQ0FOLAorCU1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfU0VUX0RGU19JTkZPLAorCU1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfU0VUX1dTQywKKwlNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX1NFVF9NQk9fTVNHLAorCU1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfU0VUX1JSTV9DT01NQU5ELAorCU1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfU0VUX1FPUywKKwlNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX0dFVF9DQVAsCisJTVRLX05MODAyMTFfVkVORE9SX1NVQkNNRF9HRVRfUlVOVElNRV9JTkZPLAorCU1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfR0VUX1NUQVRJU1RJQywKKwlNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX0dFVF9TUkdfQklUTUFQLAorCU1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfR0VUX1NUQVRJQ19JTkZPLAorCU1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfR0VUX1dOTSwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX0dFVF9IUywKKwlNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX0dFVF9XU0MsCisJTVRLX05MODAyMTFfVkVORE9SX1NVQkNNRF9HRVRfREZTX1pFUk9fV0FJVCwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX0dFVF9GUkFNRSwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX0dFVF9BUENMSV9JTkZPLAorCU1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfQkJQLAorCU1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfTUFDLAorCU1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfRTJQLAorCU1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfQVRFLAorCU1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfU1RBVElTVElDUywKKwlNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX0FERF9QTUtJRF9DQUNIRSwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX1JBRElVU19EQVRBLAorCU1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfR1NJVEVTVVJWRVksCisJTVRLX05MODAyMTFfVkVORE9SX1NVQkNNRF9HRVRfTUFDX1RBQkxFLAorCU1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfU1RBVElDX1dFUF9DT1BZLAorCU1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfV1NDX1BST0ZJTEUgICwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX1JGLAorCU1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfU0VUX1dTQ19QUk9GSUxFX1UzMl9JVEVNLAorCU1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfUVVFUllfQkFUQUJMRSwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX1JELAorCU1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfU0VUX0ZUX1BBUkFNLAorCU1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfU0VUX1dTQ09PQiwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX1dTQ19DQUxMQkFDSywKKwlNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX1JYX1NUQVRJU1RJQ1MsCisJTVRLX05MODAyMTFfVkVORE9SX1NVQkNNRF9HRVRfRFJJVkVSX0lORk8sCisJTVRLX05MODAyMTFfVkVORE9SX1NVQkNNRF9TVEFfVkxBTiwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX1BIWV9TVEFURSwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX1ZFTkRPUl9TRVQsCisJTVRLX05MODAyMTFfVkVORE9SX1NVQkNNRF9WRU5ET1JfU0hPVywKKwlNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX0hTLAorCU1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfV05NLAorCU1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfTUJPX01TRywKKwlNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX05FSUdIQk9SX1JFUE9SVCwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX09GRkNIQU5ORUxfSU5GTywKKwlNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX09DRV9NU0csCisJTVRLX05MODAyMTFfVkVORE9SX1NVQkNNRF9XQVBQX1JFUSwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX1NFVF9BUF9TRUNVUklUWSwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX1NFVF9BUF9WT1csCisJLyogYWRkIG5ldyBjb21tYW5kcyBhYm92ZSBoZXJlICovCisJLyogdXNlZCB0byBkZWZpbmUgTkw4MDIxMV9DTURfTUFYIGJlbG93ICovCisJX19NVEtfTkw4MDIxMV9WRU5ET1JfQ01EX0FGVEVSX0xBU1QsCisJTVRLX05MODAyMTFfVkVORE9SX0NNRF9NQVggPSBfX01US19OTDgwMjExX1ZFTkRPUl9DTURfQUZURVJfTEFTVCAtIDEKK307CisKKy8qKgorICogZW51bSBtdGtfbmw4MDIxMV92ZW5kb3JfZXZlbnRzIC0gTWVkaWFUZWsgbmw4MDIxMSBhc3luY2hvcm9ub3VzIGV2ZW50IGlkZW50aWZpZXJzCisgKgorICogQE1US19OTDgwMjExX1ZFTkRPUl9FVkVOVF9VTlNQRUM6IFJlc2VydmVkIHZhbHVlIDAKKyAqCisgKiBATVRLX05MODAyMTFfVkVORE9SX0VWRU5UX1RFU1Q6IFRlc3QgZm9yIG5sODAyMTFjb21tYW5kL2V2ZW50CisgKi8KK2VudW0gbXRrX25sODAyMTFfdmVuZG9yX2V2ZW50cyB7CisJLyogZG9uJ3QgY2hhbmdlIHRoZSBvcmRlciBvciBhZGQgYW55dGhpbmcgYmV0d2VlbiwgdGhpcyBpcyBBQkkhICovCisJTVRLX05MODAyMTFfVkVORE9SX0VWRU5UX1VOU1BFQyA9IDAsCisJTVRLX05MODAyMTFfVkVORE9SX0VWRU5UX1RFU1QsCisKKwlNVEtfTkw4MDIxMV9WRU5ET1JfRVZFTlRfUlNQX1dBUFBfRVZFTlQsCisKKwkvKiBhZGQgbmV3IGV2ZW50cyBhYm92ZSBoZXJlICovCit9OworCisvKioKKyAqIGVudW0gbXRrX25sODAyMTFfdmVuZG9yX2F0dHJfdGVzdCAtIFNwZWNpZmllcyB0aGUgdmFsdWVzIGZvciB2ZW5kb3IgdGVzdAorICogY29tbWFuZCBNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9URVNUCisgKiBATVRLX05MODAyMTFfVkVORE9SX0FUVFJfVEVTVO+8mmVuYWJsZSBubDgwMjExIHRlc3QKKyAqLworZW51bSBtdGtfbmw4MDIxMV92ZW5kb3JfYXR0cl90ZXN0IHsKKwkvKiBkb24ndCBjaGFuZ2UgdGhlIG9yZGVyIG9yIGFkZCBhbnl0aGluZyBiZXR3ZWVuLCB0aGlzIGlzIEFCSSEgKi8KKwlNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9URVNUX0lOVkFMSUQgPSAwLAorCisJTVRLX05MODAyMTFfVkVORE9SX0FUVFJfVEVTVCwKKworCV9fTVRLX05MODAyMTFfVkVORE9SX0FUVFJfVEVTVF9MQVNULAorCU1US19OTDgwMjExX1ZFTkRPUl9BVFRSX1RFU1RfTUFYID0KKwlfX01US19OTDgwMjExX1ZFTkRPUl9BVFRSX1RFU1RfTEFTVCAtIDEKK307CisKKy8qKgorICogZW51bSBtdGtfbmw4MDIxMV92ZW5kb3JfYXR0cl9ldmVudF90ZXN0IC0gU3BlY2lmaWVzIHRoZSB2YWx1ZXMgZm9yIHZlbmRvciB0ZXN0CisgKiBldmVudCBNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9URVNUCisgKiBATVRLX05MODAyMTFfVkVORE9SX0FUVFJfVEVTVO+8mnJlY2VpdmUgbmw4MDIxMSB0ZXN0IGV2ZW50CisgKi8KK2VudW0gbXRrX25sODAyMTFfdmVuZG9yX2F0dHJfZXZlbnRfdGVzdCB7CisJLyogZG9uJ3QgY2hhbmdlIHRoZSBvcmRlciBvciBhZGQgYW55dGhpbmcgYmV0d2VlbiwgdGhpcyBpcyBBQkkhICovCisJTVRLX05MODAyMTFfVkVORE9SX0FUVFJfRVZFTlRfVEVTVF9JTlZBTElEID0gMCwKKworCU1US19OTDgwMjExX1ZFTkRPUl9BVFRSX0VWRU5UX1RFU1QsCisKKwlfX01US19OTDgwMjExX1ZFTkRPUl9BVFRSX0VWRU5UX1RFU1RfTEFTVCwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9FVkVOVF9URVNUX01BWCA9CisJX19NVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9FVkVOVF9URVNUX0xBU1QgLSAxCit9OworCisvKioKKyAqIGVudW0gbXRrX25sODAyMTFfdmVuZG9yX2F0dHJzX3dubSAtIFRoaXMgZW51bSBkZWZpbmVzCisgKiBhdHRyaWJ1dGVzIHJlcXVpcmVkIGZvciBNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX1NFVF9ET1QxMVZfV05NLgorICogSW5mb3JtYXRpb24gaW4gdGhlc2UgYXR0cmlidXRlcyBpcyB1c2VkIHRvIHNldC9nZXQgd25tIGluZm9ybWF0aW9uCisgKiB0by9mcm9tIGRyaXZlciBmcm9tL3RvIHVzZXIgYXBwbGljYXRpb24uCisgKgorICogQE1US19OTDgwMjExX1ZFTkRPUl9BVFRSX1dOTV9DTUQ6CisgKiBATVRLX05MODAyMTFfVkVORE9SX0FUVFJfV05NX0JUTV9SRVE6IEJUTSByZXF1ZXN0IGZyYW1lCisgKiBATVRLX05MODAyMTFfVkVORE9SX0FUVFJfV05NX0JUTV9SU1A6CisgKi8KK2VudW0gbXRrX25sODAyMTFfdmVuZG9yX2F0dHJzX2RvdDExdl93bm0geworLyogZG9uJ3QgY2hhbmdlIHRoZSBvcmRlciBvciBhZGQgYW55dGhpbmcgYmV0d2VlbiwgdGhpcyBpcyBBQkkhICovCisJTVRLX05MODAyMTFfVkVORE9SX0FUVFJfRE9UMTFWX1dOTV9JTlZBTElEID0gMCwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9ET1QxMVZfV05NX0NNRCwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9ET1QxMVZfV05NX0JUTV9SRVEsCisJTVRLX05MODAyMTFfVkVORE9SX0FUVFJfRE9UMTFWX1dOTV9CVE1fUlNQLAorCS8qIGFkZCBhdHRyaWJ1dGVzIGhlcmUsIHVwZGF0ZSB0aGUgcG9saWN5IGluIG5sODAyMTEuYyAqLworCisJX19NVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9ET1QxMVZfV05NX0FGVEVSX0xBU1QsCisJTVRLX05MODAyMTFfVkVORE9SX0RPVDExVl9XTk1fQVRUUl9NQVggPSBfX01US19OTDgwMjExX1ZFTkRPUl9BVFRSX0RPVDExVl9XTk1fQUZURVJfTEFTVCAtIDEKK307CisKKy8qKgorICogZW51bSBtdGtfbmw4MDIxMV92ZW5kb3JfYXR0cnNfdmVuZG9yX3NldCAtIFRoaXMgZW51bSBkZWZpbmVzCisgKiBhdHRyaWJ1dGVzIHJlcXVpcmVkIGZvciBNVEtfTkw4MDIxMV9WRU5ET1JfU1VCQ01EX1ZFTkRPUl9TRVQuCisgKiBJbmZvcm1hdGlvbiBpbiB0aGVzZSBhdHRyaWJ1dGVzIGlzIHVzZWQgdG8gc2V0IGluZm9ybWF0aW9uCisgKiB0byBkcml2ZXIgZnJvbSB1c2VyIGFwcGxpY2F0aW9uLgorICoKKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9WRU5ET1JfU0VUX0NNRF9TVFI6IGNvbW1hbmQgc3RyaW5nCisgKi8KK2VudW0gbXRrX25sODAyMTFfdmVuZG9yX2F0dHJzX3ZlbmRvcl9zZXQgeworLyogZG9uJ3QgY2hhbmdlIHRoZSBvcmRlciBvciBhZGQgYW55dGhpbmcgYmV0d2VlbiwgdGhpcyBpcyBBQkkhICovCisJTVRLX05MODAyMTFfVkVORE9SX0FUVFJfVkVORE9SX1NFVF9JTlZBTElEID0gMCwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9WRU5ET1JfU0VUX0NNRF9TVFIsCisJLyogYWRkIGF0dHJpYnV0ZXMgaGVyZSwgdXBkYXRlIHRoZSBwb2xpY3kgaW4gbmw4MDIxMS5jICovCisKKwlfX01US19OTDgwMjExX1ZFTkRPUl9BVFRSX1ZFTkRPUl9TRVRfQUZURVJfTEFTVCwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9WRU5ET1JfU0VUX0FUVFJfTUFYID0gX19NVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9WRU5ET1JfU0VUX0FGVEVSX0xBU1QgLSAxCit9OworCisvKioKKyAqIGVudW0gbXRrX25sODAyMTFfdmVuZG9yX2F0dHJzX3ZlbmRvcl9zaG93IC0gVGhpcyBlbnVtIGRlZmluZXMKKyAqIGF0dHJpYnV0ZXMgcmVxdWlyZWQgZm9yIE1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfVkVORE9SX1NIT1cuCisgKiBJbmZvcm1hdGlvbiBpbiB0aGVzZSBhdHRyaWJ1dGVzIGlzIHVzZWQgdG8gZ2V0IGluZm9ybWF0aW9uCisgKiBmcm9tIGRyaXZlciB0byB1c2VyIGFwcGxpY2F0aW9uLgorICoKKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9WRU5ET1JfU0hPV19DTURfU1RSOiBjb21tYW5kIHN0cmluZworICogQE1US19OTDgwMjExX1ZFTkRPUl9BVFRSX1ZFTkRPUl9TSE9XX1JTUF9TVFI6IHNob3cgcnNwIHN0cmluZyBidWZmZXIKKyAqLworZW51bSBtdGtfbmw4MDIxMV92ZW5kb3JfYXR0cnNfdmVuZG9yX3Nob3cgeworLyogZG9uJ3QgY2hhbmdlIHRoZSBvcmRlciBvciBhZGQgYW55dGhpbmcgYmV0d2VlbiwgdGhpcyBpcyBBQkkhICovCisJTVRLX05MODAyMTFfVkVORE9SX0FUVFJfVkVORE9SX1NIT1dfSU5WQUxJRCA9IDAsCisJTVRLX05MODAyMTFfVkVORE9SX0FUVFJfVkVORE9SX1NIT1dfQ01EX1NUUiwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9WRU5ET1JfU0hPV19SU1BfU1RSLAorCS8qIGFkZCBhdHRyaWJ1dGVzIGhlcmUsIHVwZGF0ZSB0aGUgcG9saWN5IGluIG5sODAyMTEuYyAqLworCisJX19NVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9WRU5ET1JfU0hPV19BRlRFUl9MQVNULAorCU1US19OTDgwMjExX1ZFTkRPUl9BVFRSX1ZFTkRPUl9TSE9XX0FUVFJfTUFYID0gX19NVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9WRU5ET1JfU0hPV19BRlRFUl9MQVNUIC0gMQorfTsKKworLyoqCisgKiBlbnVtIG10a19ubDgwMjExX3ZlbmRvcl9hdHRyc19zdGF0aXN0aWNzIC0gVGhpcyBlbnVtIGRlZmluZXMKKyAqIGF0dHJpYnV0ZXMgcmVxdWlyZWQgZm9yIE1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfU1RBVElTVElDUy4KKyAqIEluZm9ybWF0aW9uIGluIHRoZXNlIGF0dHJpYnV0ZXMgaXMgdXNlZCB0byBnZXQgd25tIGluZm9ybWF0aW9uCisgKiB0by9mcm9tIGRyaXZlciBmcm9tL3RvIHVzZXIgYXBwbGljYXRpb24uCisgKgorICogQE1US19OTDgwMjExX1ZFTkRPUl9BVFRSX1NUQVRJU1RJQ1NfU1RSOiBzdGF0aXN0aWMgaW5mb3JtYXRpb24gc3RyaW5nCisgKi8KK2VudW0gbXRrX25sODAyMTFfdmVuZG9yX2F0dHJzX3N0YXRpc3RpY3MgeworLyogZG9uJ3QgY2hhbmdlIHRoZSBvcmRlciBvciBhZGQgYW55dGhpbmcgYmV0d2VlbiwgdGhpcyBpcyBBQkkhICovCisJTVRLX05MODAyMTFfVkVORE9SX0FUVFJfU1RBVElTVElDU19JTlZBTElEID0gMCwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9TVEFUSVNUSUNTX1NUUiwKKwkvKiBhZGQgYXR0cmlidXRlcyBoZXJlLCB1cGRhdGUgdGhlIHBvbGljeSBpbiBubDgwMjExLmMgKi8KKworCV9fTVRLX05MODAyMTFfVkVORE9SX0FUVFJfU1RBVElTVElDU19BRlRFUl9MQVNULAorCU1US19OTDgwMjExX1ZFTkRPUl9BVFRSX1NUQVRJU1RJQ1NfQVRUUl9NQVggPSBfX01US19OTDgwMjExX1ZFTkRPUl9BVFRSX1NUQVRJU1RJQ1NfQUZURVJfTEFTVCAtIDEKK307CisKKy8qKgorICogc3RydWN0dXJlIG1hY19wYXJhbSAtIFRoaXMgc3RydWN0dXJlIGRlZmluZXMgdGhlIHBheWxvYWQgZm9ybWF0IG9mCisgKiBNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9NQUNfV1JJVEVfUEFSQU0gYW5kIE1US19OTDgwMjExX1ZFTkRPUl9BVFRSX01BQ19TSE9XX1BBUkFNLgorICogSW5mb3JtYXRpb24gaW4gdGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBnZXQvc2V0IG1hYyByZWdpc3RlciBpbmZvcm1hdGlvbgorICogZnJvbS90byBkcml2ZXIuCisgKgorICogQHN0YXJ0OiBzdGFydCBtYWMgYWRkcmVzcworICogQGVuZDogZW5kIG1hYyBhZGRyZXNzCisgKiBAdmFsdWU6IHZhbHVlIGZvciB0aGUgbWFjIHJlZ2lzdGVyCisgKi8KK3N0cnVjdCBHTlVfUEFDS0VEIG1hY19wYXJhbSB7CisJdW5zaWduZWQgaW50IHN0YXJ0OworCXVuc2lnbmVkIGludCBlbmQ7CisJdW5zaWduZWQgaW50IHZhbHVlOworfTsKKworLyoqCisgKiBlbnVtIG10a19ubDgwMjExX3ZlbmRvcl9hdHRyc19tYWMgLSBUaGlzIGVudW0gZGVmaW5lcworICogYXR0cmlidXRlcyByZXF1aXJlZCBmb3IgTVRLX05MODAyMTFfVkVORE9SX1NVQkNNRF9NQUMuCisgKiBJbmZvcm1hdGlvbiBpbiB0aGVzZSBhdHRyaWJ1dGVzIGlzIHVzZWQgdG8gZ2V0L3NldCBtYWMgaW5mb3JtYXRpb24KKyAqIGZyb20vdG8gZHJpdmVyLgorICoKKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9NQUNfV1JJVEVfUEFSQU06IHBhcmFtcywgcmVmZXIgdG8gc3RydWN0IEdOVV9QQUNLRUQgbWFjX3BhcmFtCisgKiBATVRLX05MODAyMTFfVkVORE9SX0FUVFJfTUFDX1NIT1dfUEFSQU06IHBhcmFtcywgcmVmZXIgdG8gc3RydWN0IEdOVV9QQUNLRUQgbWFjX3BhcmFtCisgKiBATVRLX05MODAyMTFfVkVORE9SX0FUVFJfTUFDX1JTUF9TVFI6IFJTUCBzdHJpbmcKKyAqLworZW51bSBtdGtfbmw4MDIxMV92ZW5kb3JfYXR0cnNfbWFjIHsKKy8qIGRvbid0IGNoYW5nZSB0aGUgb3JkZXIgb3IgYWRkIGFueXRoaW5nIGJldHdlZW4sIHRoaXMgaXMgQUJJISAqLworCU1US19OTDgwMjExX1ZFTkRPUl9BVFRSX01BQ19JTlZBTElEID0gMCwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9NQUNfV1JJVEVfUEFSQU0sCisJTVRLX05MODAyMTFfVkVORE9SX0FUVFJfTUFDX1NIT1dfUEFSQU0sCisJTVRLX05MODAyMTFfVkVORE9SX0FUVFJfTUFDX1JTUF9TVFIsCisJLyogYWRkIGF0dHJpYnV0ZXMgaGVyZSwgdXBkYXRlIHRoZSBwb2xpY3kgaW4gbmw4MDIxMS5jICovCisKKwlfX01US19OTDgwMjExX1ZFTkRPUl9BVFRSX01BQ19BRlRFUl9MQVNULAorCU1US19OTDgwMjExX1ZFTkRPUl9BVFRSX01BQ19BVFRSX01BWCA9IF9fTVRLX05MODAyMTFfVkVORE9SX0FUVFJfTUFDX0FGVEVSX0xBU1QgLSAxCit9OworCisvKioKKyAqIGVudW0gbXRrX3ZlbmRvcl9hdHRyX2F1dGhtb2RlIC0gVGhpcyBlbnVtIGRlZmluZXMgdGhlIHZhbHVlIG9mCisgKiBNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9BUF9TRUNVUklUWV9BVVRITU9ERS4KKyAqIEluZm9ybWF0aW9uIGluIHRoZXNlIGF0dHJpYnV0ZXMgaXMgdXNlZCBzZXQgYXV0aCBtb2RlIG9mIGEgc3BlY2lmaWMgYnNzLgorICovCitlbnVtIG10a192ZW5kb3JfYXR0cl9hdXRobW9kZSB7CisJTkw4MDIxMV9BVVRIX09QRU4sCisJTkw4MDIxMV9BVVRIX1NIQVJFRCwKKwlOTDgwMjExX0FVVEhfV0VQQVVUTywKKwlOTDgwMjExX0FVVEhfV1BBLAorCU5MODAyMTFfQVVUSF9XUEFQU0ssCisJTkw4MDIxMV9BVVRIX1dQQU5PTkUsCisJTkw4MDIxMV9BVVRIX1dQQTIsCisJTkw4MDIxMV9BVVRIX1dQQTJNSVgsCisJTkw4MDIxMV9BVVRIX1dQQTJQU0ssCisJTkw4MDIxMV9BVVRIX1dQQTMsCisJTkw4MDIxMV9BVVRIX1dQQTNfMTkyLAorCU5MODAyMTFfQVVUSF9XUEEzUFNLLAorCU5MODAyMTFfQVVUSF9XUEEyUFNLV1BBM1BTSywKKwlOTDgwMjExX0FVVEhfV1BBMlBTS01JWFdQQTNQU0ssCisJTkw4MDIxMV9BVVRIX1dQQTFXUEEyLAorCU5MODAyMTFfQVVUSF9XUEFQU0tXUEEyUFNLLAorCU5MODAyMTFfQVVUSF9XUEFfQUVTX1dQQTJfVEtJUEFFUywKKwlOTDgwMjExX0FVVEhfV1BBX0FFU19XUEEyX1RLSVAsCisJTkw4MDIxMV9BVVRIX1dQQV9US0lQX1dQQTJfQUVTLAorCU5MODAyMTFfQVVUSF9XUEFfVEtJUF9XUEEyX1RLSVBBRVMsCisJTkw4MDIxMV9BVVRIX1dQQV9US0lQQUVTX1dQQTJfQUVTLAorCU5MODAyMTFfQVVUSF9XUEFfVEtJUEFFU19XUEEyX1RLSVBBRVMsCisJTkw4MDIxMV9BVVRIX1dQQV9US0lQQUVTX1dQQTJfVEtJUCwKKwlOTDgwMjExX0FVVEhfT1dFLAorCU5MODAyMTFfQVVUSF9GSUxTX1NIQTI1NiwKKwlOTDgwMjExX0FVVEhfRklMU19TSEEzODQsCisJTkw4MDIxMV9BVVRIX1dBSUNFUlQsCisJTkw4MDIxMV9BVVRIX1dBSVBTSywKKwlOTDgwMjExX0FVVEhfRFBQLAorCU5MODAyMTFfQVVUSF9EUFBXUEEyUFNLLAorCU5MODAyMTFfQVVUSF9EUFBXUEEzUFNLLAorCU5MODAyMTFfQVVUSF9EUFBXUEEzUFNLV1BBMlBTSywKKwlOTDgwMjExX0FVVEhfV1BBMl9FTlRfT1NFTgorfTsKKworLyoqCisgKiBlbnVtIG10a192ZW5kb3JfYXR0cl9lbmNyeXB0eXBlIC0gVGhpcyBlbnVtIGRlZmluZXMgdGhlIHZhbHVlIG9mCisgKiBNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9BUF9TRUNVUklUWV9FTkNSWVBUWVBFLgorICogSW5mb3JtYXRpb24gaW4gdGhlc2UgYXR0cmlidXRlcyBpcyB1c2VkIHNldCBlbmNyeXB0aW9uIHR5cGUgb2YgYSBzcGVjaWZpYyBic3MuCisgKi8KK2VudW0gbXRrX3ZlbmRvcl9hdHRyX2VuY3J5cHR5cGUgeworCU5MODAyMTFfRU5DUllQVFlQRV9OT05FLAorCU5MODAyMTFfRU5DUllQVFlQRV9XRVAsCisJTkw4MDIxMV9FTkNSWVBUWVBFX1RLSVAsCisJTkw4MDIxMV9FTkNSWVBUWVBFX0FFUywKKwlOTDgwMjExX0VOQ1JZUFRZUEVfQ0NNUDEyOCwKKwlOTDgwMjExX0VOQ1JZUFRZUEVfQ0NNUDI1NiwKKwlOTDgwMjExX0VOQ1JZUFRZUEVfR0NNUDEyOCwKKwlOTDgwMjExX0VOQ1JZUFRZUEVfR0NNUDI1NiwKKwlOTDgwMjExX0VOQ1JZUFRZUEVfVEtJUEFFUywKKwlOTDgwMjExX0VOQ1JZUFRZUEVfVEtJUENDTVAxMjgsCisJTkw4MDIxMV9FTkNSWVBUWVBFX1dQQV9BRVNfV1BBMl9US0lQQUVTLAorCU5MODAyMTFfRU5DUllQVFlQRV9XUEFfQUVTX1dQQTJfVEtJUCwKKwlOTDgwMjExX0VOQ1JZUFRZUEVfV1BBX1RLSVBfV1BBMl9BRVMsCisJTkw4MDIxMV9FTkNSWVBUWVBFX1dQQV9US0lQX1dQQTJfVEtJUEFFUywKKwlOTDgwMjExX0VOQ1JZUFRZUEVfV1BBX1RLSVBBRVNfV1BBMl9BRVMsCisJTkw4MDIxMV9FTkNSWVBUWVBFX1dQQV9US0lQQUVTX1dQQTJfVEtJUEFFUywKKwlOTDgwMjExX0VOQ1JZUFRZUEVfV1BBX1RLSVBBRVNfV1BBMl9US0lQLAorCU5MODAyMTFfRU5DUllQVFlQRV9TTVM0Cit9OworCisjZGVmaW5lIE1BWF9XRVBfS0VZX0xFTiAzMgorLyoqCisgKiBzdHJ1Y3R1cmUgd2VwX2tleV9wYXJhbSAtIFRoaXMgc3RydWN0dXJlIGRlZmluZXMgdGhlIHBheWxvYWQgZm9ybWF0IG9mCisgKiBNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9BUF9TRUNVUklUWV9XRVBLRVkuIEluZm9ybWF0aW9uIGluIHRoaXMgc3RydWN0dXJlCisgKiBpcyB1c2VkIHRvIHNldCB3ZXAga2V5IGluZm9ybWF0aW9uIHRvIGEgc3BlY2lmaWMgYnNzIGluIHdpZmkgZHJpdmVyLgorICoKKyAqIEBrZXlfaWR4OiBrZXkgaW5kZXgKKyAqIEBrZXlfbGVuOiBrZXkgbGVuZ3RoCisgKiBAa2V5OiBrZXkgdmFsdWUKKyAqLworc3RydWN0IEdOVV9QQUNLRUQgd2VwX2tleV9wYXJhbSB7CisJdW5zaWduZWQgY2hhciBrZXlfaWR4OworCXVuc2lnbmVkIGludCBrZXlfbGVuOworCXVuc2lnbmVkIGNoYXIga2V5W01BWF9XRVBfS0VZX0xFTl07Cit9OworCisvKioKKyAqIHN0cnVjdHVyZSB2b3dfZ3JvdXBfZW5fcGFyYW0gLSBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIHRoZSBwYXlsb2FkIGZvcm1hdCBvZgorICogTVRLX05MODAyMTFfVkVORE9SX0FUVFJfQVBfVk9XX0FUQ19FTl9JTkZPICYKKyAqIE1US19OTDgwMjExX1ZFTkRPUl9BVFRSX0FQX1ZPV19CV19DVExfRU5fSU5GTy4KKyAqIEluZm9ybWF0aW9uIGluIHRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gc2V0IHZvdyBhaXJ0aW1lIGNvbnRyb2wgZW5hYmxlIGNvbmZpZ3VyYXRpb24KKyAqIHRvIGEgc3BlY2lmaWMgZ3JvdXAgaW4gd2lmaSBkcml2ZXIuCisgKgorICogQGdyb3VwOiB2b3cgZ3JvdXAKKyAqIEBlbjogRW5hYmxlL0Rpc2FibGUKKyAqLworc3RydWN0IEdOVV9QQUNLRUQgdm93X2dyb3VwX2VuX3BhcmFtIHsKKwl1bnNpZ25lZCBpbnQgZ3JvdXA7CisJdW5zaWduZWQgaW50IGVuOworfTsKKworLyoqCisgKiBzdHJ1Y3R1cmUgdm93X2dyb3VwX2VuX3BhcmFtIC0gVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyB0aGUgcGF5bG9hZCBmb3JtYXQgb2YKKyAqIE1US19OTDgwMjExX1ZFTkRPUl9BVFRSX0FQX1ZPV19NSU5fUkFURV9JTkZPICYKKyAqIE1US19OTDgwMjExX1ZFTkRPUl9BVFRSX0FQX1ZPV19NQVhfUkFURV9JTkZPLgorICogSW5mb3JtYXRpb24gaW4gdGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBzZXQgdm93IGFpcnRpbWUgcmF0ZSBjb25maWd1cmF0aW9uCisgKiB0byBhIHNwZWNpZmljIGdyb3VwIGluIHdpZmkgZHJpdmVyLgorICoKKyAqIEBncm91cDogdm93IGdyb3VwCisgKiBAcmF0ZTogdm93IHJhdGUKKyAqLworc3RydWN0IEdOVV9QQUNLRUQgdm93X3JhdGVfcGFyYW0geworCXVuc2lnbmVkIGludCBncm91cDsKKwl1bnNpZ25lZCBpbnQgcmF0ZTsKK307CisKKy8qKgorICogc3RydWN0dXJlIHZvd19ncm91cF9lbl9wYXJhbSAtIFRoaXMgc3RydWN0dXJlIGRlZmluZXMgdGhlIHBheWxvYWQgZm9ybWF0IG9mCisgKiBNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9BUF9WT1dfTUlOX1JBVElPX0lORk8gJgorICogTVRLX05MODAyMTFfVkVORE9SX0FUVFJfQVBfVk9XX01BWF9SQVRJT19JTkZPLgorICogSW5mb3JtYXRpb24gaW4gdGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBzZXQgdm93IGFpcnRpbWUgcmF0aW8gY29uZmlndXJhdGlvbgorICogdG8gYSBzcGVjaWZpYyBncm91cCBpbiB3aWZpIGRyaXZlci4KKyAqCisgKiBAZ3JvdXA6IHZvdyBncm91cAorICogQHJhdGlvOiB2b3cgcmF0aW8KKyAqLworc3RydWN0IEdOVV9QQUNLRUQgdm93X3JhdGlvX3BhcmFtIHsKKwl1bnNpZ25lZCBpbnQgZ3JvdXA7CisJdW5zaWduZWQgaW50IHJhdGlvOworfTsKKworLyoqCisgKiBlbnVtIG10a19ubDgwMjExX3ZlbmRvcl9hdHRyc19hcF92b3cgLSBUaGlzIGVudW0gZGVmaW5lcworICogYXR0cmlidXRlcyByZXF1aXJlZCBmb3IgTVRLX05MODAyMTFfVkVORE9SX1NVQkNNRF9TRVRfQVBfVk9XLgorICogSW5mb3JtYXRpb24gaW4gdGhlc2UgYXR0cmlidXRlcyBpcyB1c2VkIHRvIHNldCB2b3cgY29uZmlndXJhdGlvbgorICogdG8gZHJpdmVyIGZyb20gdXNlciBhcHBsaWNhdGlvbi4KKyAqCisgKiBATVRLX05MODAyMTFfVkVORE9SX0FUVFJfQVBfVk9XX0FURl9FTl9JTkZPOiB1OCwgYWlyIHRpbWUgZmFpcm5lc3MgZW5hYmxlIGF0dHJpYnV0ZXMKKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9BUF9WT1dfQVRDX0VOX0lORk86IHJlZmVyIHRvIHZvd19ncm91cF9lbl9wYXJhbQorICogQE1US19OTDgwMjExX1ZFTkRPUl9BVFRSX0FQX1ZPV19CV19FTl9JTkZPOiB1OCwgYWlyIHRpbWUgYncgZW5hbGJlIGF0dHJpYnV0ZXMKKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9BUF9WT1dfQldfQ1RMX0VOX0lORk86IHJlZmVyIHRvIHZvd19ncm91cF9lbl9wYXJhbQorICogQE1US19OTDgwMjExX1ZFTkRPUl9BVFRSX0FQX1ZPV19NSU5fUkFURV9JTkZPOiByZWZlciB0byB2b3dfcmF0ZV9wYXJhbQorICogQE1US19OTDgwMjExX1ZFTkRPUl9BVFRSX0FQX1ZPV19NQVhfUkFURV9JTkZPOiByZWZlciB0byB2b3dfcmF0ZV9wYXJhbQorICogQE1US19OTDgwMjExX1ZFTkRPUl9BVFRSX0FQX1ZPV19NSU5fUkFUSU9fSU5GTzogcmVmZXIgdG8gdm93X3JhdGlvX3BhcmFtCisgKiBATVRLX05MODAyMTFfVkVORE9SX0FUVFJfQVBfVk9XX01BWF9SQVRJT19JTkZPOiByZWZlciB0byB2b3dfcmF0aW9fcGFyYW0KKyAqLworZW51bSBtdGtfbmw4MDIxMV92ZW5kb3JfYXR0cnNfYXBfdm93eworLyogZG9uJ3QgY2hhbmdlIHRoZSBvcmRlciBvciBhZGQgYW55dGhpbmcgYmV0d2VlbiwgdGhpcyBpcyBBQkkhICovCisJTVRLX05MODAyMTFfVkVORE9SX0FUVFJfQVBfVk9XX0lOVkFMSUQgPSAwLAorCU1US19OTDgwMjExX1ZFTkRPUl9BVFRSX0FQX1ZPV19BVEZfRU5fSU5GTywKKwlNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9BUF9WT1dfQVRDX0VOX0lORk8sCisJTVRLX05MODAyMTFfVkVORE9SX0FUVFJfQVBfVk9XX0JXX0VOX0lORk8sCisJTVRLX05MODAyMTFfVkVORE9SX0FUVFJfQVBfVk9XX0JXX0NUTF9FTl9JTkZPLAorCU1US19OTDgwMjExX1ZFTkRPUl9BVFRSX0FQX1ZPV19NSU5fUkFURV9JTkZPLAorCU1US19OTDgwMjExX1ZFTkRPUl9BVFRSX0FQX1ZPV19NQVhfUkFURV9JTkZPLAorCU1US19OTDgwMjExX1ZFTkRPUl9BVFRSX0FQX1ZPV19NSU5fUkFUSU9fSU5GTywKKwlNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9BUF9WT1dfTUFYX1JBVElPX0lORk8sCisJX19NVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9BUF9WT1dfQUZURVJfTEFTVCwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfQVBfVk9XX0FUVFJfTUFYID0gX19NVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9BUF9WT1dfQUZURVJfTEFTVCAtIDEKK307CisvKioKKyAqIGVudW0gbXRrX25sODAyMTFfdmVuZG9yX2F0dHJzX2FwX3NlY3VyaXR5IC0gVGhpcyBlbnVtIGRlZmluZXMKKyAqIGF0dHJpYnV0ZXMgcmVxdWlyZWQgZm9yIE1US19OTDgwMjExX1ZFTkRPUl9TVUJDTURfU0VUX0FQX1NFQ1VSSVRZLgorICogSW5mb3JtYXRpb24gaW4gdGhlc2UgYXR0cmlidXRlcyBpcyB1c2VkIHRvIHNldCBzZWN1cml0eSBpbmZvcm1hdGlvbgorICogdG8gZHJpdmVyIGZyb20gdXNlciBhcHBsaWNhdGlvbi4KKyAqCisgKiBATVRLX05MODAyMTFfVkVORE9SX0FUVFJfQVBfU0VDVVJJVFlfQVVUSE1PREU6ICB1MzIsIGF1dGggbW9kZSBhdHRyaWJ1dGVzLCByZWZlciB0byBtdGtfdmVuZG9yX2F0dHJfYXV0aG1vZGUKKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9BUF9TRUNVUklUWV9FTkNSWVBUWVBFOiB1MzIsIGVuY3J5cHR5cGUsIHJlZmVyIHRvIG10a192ZW5kb3JfYXR0cl9lbmNyeXB0eXBlCisgKiBATVRLX05MODAyMTFfVkVORE9SX0FUVFJfQVBfU0VDVVJJVFlfUkVLRVlJTlRFUlZBTDogdTMyLCByZWtleSBpbnRlcnZhbCBpbiBzZWNvbmRzCisgKiBATVRLX05MODAyMTFfVkVORE9SX0FUVFJfQVBfU0VDVVJJVFlfUkVLRVlNRVRIT0Q6IHU4LCAwLWJ5IHRpbWUsIDEtYnkgcGt0IGNvdW50CisgKiBATVRLX05MODAyMTFfVkVORE9SX0FUVFJfQVBfU0VDVVJJVFlfREVGQVVMVEtFWUlEOiB1OCwgZGVmYXVsdCBrZXkgaW5kZXgKKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9BUF9TRUNVUklUWV9XRVBLRVk6IHJlZmVyIHRvIHdlcF9rZXlfcGFyYW0KKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9BUF9TRUNVUklUWV9QQVNTUEhSQVNFOiBzdHJpbmcKKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9BUF9TRUNVUklUWV9QTUY6IHU4IDEtc3VwcG9ydCBwbWYsIDAtbm90IHN1cHBvcnQgcG1mCisgKiBATVRLX05MODAyMTFfVkVORE9SX0FUVFJfQVBfU0VDVVJJVFlfUE1GX1JFUVVJUkU6IHU4IDEtcG1mIGlzIHJlcXVpcmVkLCAwLXBtZiBpcyBub3QgcmVxdWlyZWQKKyAqIEBNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9BUF9TRUNVUklUWV9QTUZfU0hBMjU2OiB1OCAxLXBtZnNoYTI1NiBpcyBkZXNpcmVkLCAwLXBtZnNoYTI1NiBpcyBub3QgZGVzaXJlZAorICovCitlbnVtIG10a19ubDgwMjExX3ZlbmRvcl9hdHRyc19hcF9zZWN1cml0eSB7CisvKiBkb24ndCBjaGFuZ2UgdGhlIG9yZGVyIG9yIGFkZCBhbnl0aGluZyBiZXR3ZWVuLCB0aGlzIGlzIEFCSSEgKi8KKwlNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9BUF9TRUNVUklUWV9JTlZBTElEID0gMCwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9BUF9TRUNVUklUWV9BVVRITU9ERSwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9BUF9TRUNVUklUWV9FTkNSWVBUWVBFLAorCU1US19OTDgwMjExX1ZFTkRPUl9BVFRSX0FQX1NFQ1VSSVRZX1JFS0VZSU5URVJWQUwsCisJTVRLX05MODAyMTFfVkVORE9SX0FUVFJfQVBfU0VDVVJJVFlfUkVLRVlNRVRIT0QsCisJTVRLX05MODAyMTFfVkVORE9SX0FUVFJfQVBfU0VDVVJJVFlfREVGQVVMVEtFWUlELAorCU1US19OTDgwMjExX1ZFTkRPUl9BVFRSX0FQX1NFQ1VSSVRZX1dFUEtFWSwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9BUF9TRUNVUklUWV9QQVNTUEhSQVNFLAorCU1US19OTDgwMjExX1ZFTkRPUl9BVFRSX0FQX1NFQ1VSSVRZX1BNRl9DQVBBQkxFLAorCU1US19OTDgwMjExX1ZFTkRPUl9BVFRSX0FQX1NFQ1VSSVRZX1BNRl9SRVFVSVJFLAorCU1US19OTDgwMjExX1ZFTkRPUl9BVFRSX0FQX1NFQ1VSSVRZX1BNRl9TSEEyNTYsCisJLyogYWRkIGF0dHJpYnV0ZXMgaGVyZSwgdXBkYXRlIHRoZSBwb2xpY3kgaW4gbmw4MDIxMS5jICovCisKKwlfX01US19OTDgwMjExX1ZFTkRPUl9BVFRSX0FQX1NFQ1VSSVRZX0FGVEVSX0xBU1QsCisJTVRLX05MODAyMTFfVkVORE9SX0FQX1NFQ1VSSVRZX0FUVFJfTUFYID0gX19NVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9BUF9TRUNVUklUWV9BRlRFUl9MQVNUIC0gMQorfTsKKworLyoqCisgKiBlbnVtIG10a19ubDgwMjExX3ZlbmRvcl9hdHRyX2dldF9zdGF0aWNfaW5mbyAtIFNwZWNpZmllcyB0aGUgdmVuZG9yIGF0dHJpYnV0ZSB2YWx1ZXMKKyAqIHRvIGdldCBzdGF0aWMgaW5mbworICovCitlbnVtIG10a19ubDgwMjExX3ZlbmRvcl9hdHRyX2dldF9zdGF0aWNfaW5mbyB7CisJLyogZG9uJ3QgY2hhbmdlIHRoZSBvcmRlciBvciBhZGQgYW55dGhpbmcgYmV0d2VlbiwgdGhpcyBpcyBBQkkhICovCisJTVRLX05MODAyMTFfVkVORE9SX0FUVFJfR0VUX1NUQVRJQ19JTkZPX0lOVkFMSUQgPSAwLAorCisJTVRLX05MODAyMTFfVkVORE9SX0FUVFJfR0VUX1NUQVRJQ19JTkZPX0NISVBfSUQsCisJTVRLX05MODAyMTFfVkVORE9SX0FUVFJfR0VUX1NUQVRJQ19JTkZPX0RSSVZFUl9WRVIsCisJTVRLX05MODAyMTFfVkVORE9SX0FUVFJfR0VUX1NUQVRJQ19JTkZPX0NPRVhJU1RFTkNFLAorCU1US19OTDgwMjExX1ZFTkRPUl9BVFRSX0dFVF9TVEFUSUNfSU5GT19XSUZJX1ZFUiwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9HRVRfU1RBVElDX0lORk9fV0FQUF9TVVBQT1JUX1ZFUiwKKworCV9fTVRLX05MODAyMTFfVkVORE9SX0FUVFJfR0VUX1NUQVRJQ19JTkZPX0xBU1QsCisJTVRLX05MODAyMTFfVkVORE9SX0FUVFJfR0VUX1NUQVRJQ19JTkZPX01BWCA9CisJX19NVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9HRVRfU1RBVElDX0lORk9fTEFTVCAtIDEKK307CisKKy8qKgorICogZW51bSBtdGtfbmw4MDIxMV92ZW5kb3JfYXR0cl9nZXRfcnVudGltZV9pbmZvIC0gU3BlY2lmaWVzIHRoZSB2ZW5kb3IgYXR0cmlidXRlIHZhbHVlcworICogdG8gZ2V0IHJ1bnRpbWUgaW5mbworICovCitlbnVtIG10a19ubDgwMjExX3ZlbmRvcl9hdHRyX2dldF9ydW50aW1lX2luZm8geworCS8qIGRvbid0IGNoYW5nZSB0aGUgb3JkZXIgb3IgYWRkIGFueXRoaW5nIGJldHdlZW4sIHRoaXMgaXMgQUJJISAqLworCU1US19OTDgwMjExX1ZFTkRPUl9BVFRSX0dFVF9SVU5USU1FX0lORk9fSU5WQUxJRCA9IDAsCisKKwlNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9HRVRfUlVOVElNRV9JTkZPX0dFVF9NQVhfTlVNX09GX1NUQSwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9HRVRfUlVOVElNRV9JTkZPX0dFVF9DSEFOX0xJU1QsCisJTVRLX05MODAyMTFfVkVORE9SX0FUVFJfR0VUX1JVTlRJTUVfSU5GT19HRVRfT1BfQ0xBU1MsCisJTVRLX05MODAyMTFfVkVORE9SX0FUVFJfR0VUX1JVTlRJTUVfSU5GT19HRVRfQlNTX0lORk8sCisJTVRLX05MODAyMTFfVkVORE9SX0FUVFJfR0VUX1JVTlRJTUVfSU5GT19HRVRfTk9QX0NIQU5ORUxfTElTVCwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9HRVRfUlVOVElNRV9JTkZPX0dFVF9XTU9ERSwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9HRVRfUlVOVElNRV9JTkZPX0dFVF9XQVBQX1dTQ19QUk9GSUxFUywKKwlNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9HRVRfUlVOVElNRV9JTkZPX0dFVF9QTUtfQllfUEVFUl9NQUMsCisJTVRLX05MODAyMTFfVkVORE9SX0FUVFJfR0VUX1JVTlRJTUVfSU5GT19HRVRfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREUsCisJTVRLX05MODAyMTFfVkVORE9SX0FUVFJfR0VUX1JVTlRJTUVfSU5GT19HRVRfODAyXzExX01BQ19BRERSRVNTLAorCU1US19OTDgwMjExX1ZFTkRPUl9BVFRSX0dFVF9SVU5USU1FX0lORk9fR0VUXzgwMl8xMV9DVVJSRU5UQ0hBTk5FTCwKKworCV9fTVRLX05MODAyMTFfVkVORE9SX0FUVFJfR0VUX1JVTlRJTUVfSU5GT19MQVNULAorCU1US19OTDgwMjExX1ZFTkRPUl9BVFRSX0dFVF9SVU5USU1FX0lORk9fTUFYID0KKwlfX01US19OTDgwMjExX1ZFTkRPUl9BVFRSX0dFVF9SVU5USU1FX0lORk9fTEFTVCAtIDEKK307CisKKy8qKgorICogZW51bSBtdGtfbmw4MDIxMV92ZW5kb3JfYXR0cl9nZXRfc3RhdGlzdGljIC0gU3BlY2lmaWVzIHRoZSB2ZW5kb3IgYXR0cmlidXRlIHZhbHVlcworICogdG8gZ2V0IHN0YXRpc3RpYyBpbmZvCisgKi8KK2VudW0gbXRrX25sODAyMTFfdmVuZG9yX2F0dHJfZ2V0X3N0YXRpc3RpYyB7CisJLyogZG9uJ3QgY2hhbmdlIHRoZSBvcmRlciBvciBhZGQgYW55dGhpbmcgYmV0d2VlbiwgdGhpcyBpcyBBQkkhICovCisJTVRLX05MODAyMTFfVkVORE9SX0FUVFJfR0VUX1NUQVRJU1RJQ19JTlZBTElEID0gMCwKKworCU1US19OTDgwMjExX1ZFTkRPUl9BVFRSX0dFVF84MDJfMTFfU1RBVElTVElDUywKKwlNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9HRVRfVFhfUFdSLAorCU1US19OTDgwMjExX1ZFTkRPUl9BVFRSX0dFVF9BUF9NRVRSSUNTLAorCU1US19OTDgwMjExX1ZFTkRPUl9BVFRSX0dFVF84MDJfMTFfUEVSX0JTU19TVEFUSVNUSUNTLAorCU1US19OTDgwMjExX1ZFTkRPUl9BVFRSX0dFVF9DUFVfVEVNUEVSQVRVUkUsCisKKwlfTVRLX05MODAyMTFfVkVORE9SX0FUVFJfR0VUX1NUQVRJU1RJQ19MQVNULAorCU1US19OTDgwMjExX1ZFTkRPUl9BVFRSX0dFVF9TVEFUSVNUSUNfTUFYID0KKwlfTVRLX05MODAyMTFfVkVORE9SX0FUVFJfR0VUX1NUQVRJU1RJQ19MQVNUIC0gMQorfTsKKworLyoqCisgKiBlbnVtIG10a19ubDgwMjExX3ZlbmRvcl9hdHRyX3dhcHBfcmVxIC0gU3BlY2lmaWVzIHRoZSB2ZW5kb3IgYXR0cmlidXRlIHZhbHVlcworICogdG8gcmVxdWVzdCB3aWZpIGluZm8KKyAqLworZW51bSBtdGtfbmw4MDIxMV92ZW5kb3JfYXR0cl93YXBwX3JlcSB7CisJLyogZG9uJ3QgY2hhbmdlIHRoZSBvcmRlciBvciBhZGQgYW55dGhpbmcgYmV0d2VlbiwgdGhpcyBpcyBBQkkhICovCisJTVRLX05MODAyMTFfVkVORE9SX0FUVFJfV0FQUF9SRVFfSU5WQUxJRCA9IDAsCisKKwlNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9XQVBQX1JFUSwKKworCV9fTVRLX05MODAyMTFfVkVORE9SX0FUVFJfV0FQUF9SRVFfTEFTVCwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9XQVBQX1JFUV9NQVggPQorCV9fTVRLX05MODAyMTFfVkVORE9SX0FUVFJfV0FQUF9SRVFfTEFTVCAtIDEKK307CisKKy8qKgorICogZW51bSBtdGtfbmw4MDIxMV92ZW5kb3JfYXR0cl9ldmVudF9yc3Bfd2FwcF9ldmVudCAtIFNwZWNpZmllcyB0aGUgdmVuZG9yIGF0dHJpYnV0ZSB2YWx1ZXMKKyAqIHRvIGdldCB3aWZpIGluZm8gZXZlbnQKKyAqLworZW51bSBtdGtfbmw4MDIxMV92ZW5kb3JfYXR0cl9ldmVudF9yc3Bfd2FwcF9ldmVudCB7CisJLyogZG9uJ3QgY2hhbmdlIHRoZSBvcmRlciBvciBhZGQgYW55dGhpbmcgYmV0d2VlbiwgdGhpcyBpcyBBQkkhICovCisJTVRLX05MODAyMTFfVkVORE9SX0FUVFJfRVZFTlRfUlNQX1dBUFBfRVZFTlRfSU5WQUxJRCA9IDAsCisKKwlNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9FVkVOVF9SU1BfV0FQUF9FVkVOVCwKKworCV9fTVRLX05MODAyMTFfVkVORE9SX0FUVFJfRVZFTlRfUlNQX1dBUFBfRVZFTlRfTEFTVCwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9FVkVOVF9SU1BfV0FQUF9FVkVOVF9NQVggPQorCV9fTVRLX05MODAyMTFfVkVORE9SX0FUVFJfRVZFTlRfUlNQX1dBUFBfRVZFTlRfTEFTVCAtIDEKK307CisKKy8qKgorICogZW51bSBtdGtfbmw4MDIxMV92ZW5kb3JfYXR0cl9nZXRfY2FwIC0gU3BlY2lmaWVzIHRoZSB2ZW5kb3IgYXR0cmlidXRlIHZhbHVlcworICogdG8gZ2V0IGNhcGFiaWxpdHkgaW5mbworICovCitlbnVtIG10a19ubDgwMjExX3ZlbmRvcl9hdHRyX2dldF9jYXAgeworCS8qIGRvbid0IGNoYW5nZSB0aGUgb3JkZXIgb3IgYWRkIGFueXRoaW5nIGJldHdlZW4sIHRoaXMgaXMgQUJJISAqLworCU1US19OTDgwMjExX1ZFTkRPUl9BVFRSX0dFVF9DQVBfSU5GT19JTlZBTElEID0gMCwKKworCU1US19OTDgwMjExX1ZFTkRPUl9BVFRSX0dFVF9DQVBfSU5GT19DQUNfQ0FQLAorCU1US19OTDgwMjExX1ZFTkRPUl9BVFRSX0dFVF9DQVBfSU5GT19NSVNDX0NBUCwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9HRVRfQ0FQX0lORk9fSFRfQ0FQLAorCU1US19OTDgwMjExX1ZFTkRPUl9BVFRSX0dFVF9DQVBfSU5GT19WSFRfQ0FQLAorCU1US19OTDgwMjExX1ZFTkRPUl9BVFRSX0dFVF9DQVBfSU5GT19XRjZfQ0FQQUJJTFRZLAorCU1US19OTDgwMjExX1ZFTkRPUl9BVFRSX0dFVF9DQVBfSU5GT19IRV9DQVAsCisJTVRLX05MODAyMTFfVkVORE9SX0FUVFJfR0VUX0NBUF9RVUVSWV8xMUhfQ0FQQUJJTElUWSwKKwlNVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9HRVRfQ0FQX1FVRVJZX1JSTV9DQVBBQklMSVRZLAorCU1US19OTDgwMjExX1ZFTkRPUl9BVFRSX0dFVF9DQVBfUVVFUllfS1ZSX0NBUEFCSUxJVFksCisKKworCV9fTVRLX05MODAyMTFfVkVORE9SX0FUVFJfR0VUX0NBUF9JTkZPX0xBU1QsCisJTVRLX05MODAyMTFfVkVORE9SX0FUVFJfR0VUX0NBUF9JTkZPX01BWCA9CisJX19NVEtfTkw4MDIxMV9WRU5ET1JfQVRUUl9HRVRfQ0FQX0lORk9fTEFTVCAtIDEKK307CisKKyNlbmRpZiAvKiBfX01US19WRU5ET1JfTkw4MDIxMV9IICovCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2luY2x1ZGUvdWFwaS9saW51eC93YXBwL210X3dsYW5fY21tX29pZC5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9pbmNsdWRlL3VhcGkvbGludXgvd2FwcC9tdF93bGFuX2NtbV9vaWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTMxYjNiCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9pbmNsdWRlL3VhcGkvbGludXgvd2FwcC9tdF93bGFuX2NtbV9vaWQuaApAQCAtMCwwICsxLDgwIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTWVkaWF0ZWsgVGVjaCBJbmMuCisgKiA0RiwgTm8uIDIgVGVjaG5vbG9neSA1dGggUmQuCisgKiBTY2llbmNlLWJhc2VkIEluZHVzdHJpYWwgUGFyaworICogSHNpbi1jaHUsIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDIwLTIwMjEsIE1lZGlhdGVrIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNZWRpYXRlaydzIHNvdXJjZSBjb2RlIGlzIGFuIHVucHVibGlzaGVkIHdvcmsgYW5kIHRoZQorICogdXNlIG9mIGEgY29weXJpZ2h0IG5vdGljZSBkb2VzIG5vdCBpbXBseSBvdGhlcndpc2UuIFRoaXMgc291cmNlIGNvZGUKKyAqIGNvbnRhaW5zIGNvbmZpZGVudGlhbCB0cmFkZSBzZWNyZXQgbWF0ZXJpYWwgb2YgTWVkaWF0ZWsgVGVjaC4gQW55IGF0dGVtcAorICogb3IgcGFydGljaXBhdGlvbiBpbiBkZWNpcGhlcmluZywgZGVjb2RpbmcsIHJldmVyc2UgZW5naW5lZXJpbmcgb3IgaW4gYW55CisgKiB3YXkgYWx0ZXJpbmcgdGhlIHNvdXJjZSBjb2RlIGlzIHN0cmljaXRseSBwcm9oaWJpdGVkLCB1bmxlc3MgdGhlIHByaW9yCisgKiB3cml0dGVuIGNvbnNlbnQgb2YgTWVkaWF0ZWsgVGVjaG5vbG9neSwgSW5jLiBpcyBvYnRhaW5lZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICAgICAgICBNb2R1bGUgTmFtZToKKyAgICAgICAgd2FwcF9jbW1fdHlwZS5oCisKKyAgICAgICAgQWJzdHJhY3Q6CisKKyAgICAgICAgUmV2aXNpb24gSGlzdG9yeToKKyAgICAgICAgV2hvICAgICAgICAgV2hlbiAgICAgICAgICBXaGF0CisgICAgICAgIC0tLS0tLS0tICAgIC0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKy8qIFRoaXMgZmlsZSBpcyB1c2VkIGJ5IHdpZmkgZHJpdmVyIGFuZCB3YXBwLgorICAgS2VlcCBkYXRhIHN0cnVjdHVyZSBzeW5jICovCisKKyNkZWZpbmUgT0lEXzgwMl8xMV9BUENMSV9FTkFCTEUJCQkweDA5QjAKKyNkZWZpbmUgT0lEXzgwMl8xMV9BVVRPX1JPQU0JCQkweDA5QjEKKyNkZWZpbmUgT0lEXzgwMl8xMV9BUENMSV9CU1NJRAkJCTB4MDlCMgorI2RlZmluZSBPSURfODAyXzExX0FQUFJPWFlfUkVGUkVTSAkJMHgwOUIzCisjZGVmaW5lIE9JRF84MDJfMTFfQVVUSF9NT0RFCQkJMHgwOUI0CisjZGVmaW5lIE9JRF84MDJfMTFfQVBDTElfUE1GTUZQQwkJMHgwOUI1CisjZGVmaW5lIE9JRF84MDJfMTFfQVBDTElfU1NJRAkJCTB4MDlCNgorI2RlZmluZSBPSURfODAyXzExX0FQQ0xJX1dQQVBTSwkJCTB4MDlCNworI2RlZmluZSBPSURfODAyXzExX0FQQ0xJX0FVVEhfTU9ERQkJMHgwOUI4CisjZGVmaW5lIE9JRF84MDJfMTFfQVBDTElfRU5DUllfVFlQRQkJMHgwOUI5CisjZGVmaW5lIE9JRF84MDJfMTFfQUNMX0FEREVOVFJZCQkJMHgwOUJBCisjZGVmaW5lIE9JRF84MDJfMTFfQUNMX0RFTEVOVFJZCQkJMHgwOUJCCisjZGVmaW5lIE9JRF84MDJfMTFfQUNMX0NMRUFSQUxMCQkJMHgwOUJDCisjZGVmaW5lIE9JRF84MDJfMTFfQUNDRVNTX1BPTElDWQkJMHgwOUJECisjZGVmaW5lIE9JRF84MDJfMTFfQVBDTElfQVVUT19DT05ORUNUCQkweDA5QkUKKyNkZWZpbmUgT0lEXzgwMl8xMV9CQ05SRVEJCQkweDA5QkYKKyNkZWZpbmUgT0lEXzgwMl8xMV9CTEFERAkJCTB4MDlDMAorI2RlZmluZSBPSURfODAyXzExX0JMREVMCQkJMHgwOUMxCisjZGVmaW5lIE9JRF84MDJfMTFfQkhCU1MJCQkweDA5QzIKKyNkZWZpbmUgT0lEXzgwMl8xMV9TRVRfQ0hBTk5FTAkJCTB4MDlDMworI2RlZmluZSBPSURfODAyXzExX0RQUF9FTkFCTEUJCQkweDA5QzQKKyNkZWZpbmUgT0lEXzgwMl8xMV9ESVNDT05ORUNUX1NUQQkJMHgwOUM1CisjZGVmaW5lIE9JRF84MDJfMTFfREVGQVVMVF9LRVlJRAkJMHgwOUM2CisjZGVmaW5lIE9JRF84MDJfMTFfRElTQ09OTkVDVF9BTExfU1RBCQkweDA5QzcKKyNkZWZpbmUgT0lEXzgwMl8xMV9FTkNSWVBfVFlQRQkJCTB4MDlDOAorI2RlZmluZSBPSURfODAyXzExX0ZIQlNTCQkJMHgwOUM5CisjZGVmaW5lIE9JRF84MDJfMTFfSFRCU1NDT0VYCQkJMHgwOUNBCisjZGVmaW5lIE9JRF84MDJfMTFfSElERV9TU0lECQkJMHgwOUNCCisjZGVmaW5lIE9JRF84MDJfMTFfSFRCVwkJCQkweDA5Q0MKKyNkZWZpbmUgT0lEXzgwMl8xMV9LRVkxCQkJCTB4MDlDRAorI2RlZmluZSBPSURfODAyXzExX01BUF9DSEFOTkVMCQkJMHgwOUNFCisjZGVmaW5lIE9JRF84MDJfMTFfTU5UX0VOQUJMRQkJCTB4MDlDRgorI2RlZmluZSBPSURfODAyXzExX01OVF9SVUxFCQkJMHgwOUQwCisjZGVmaW5lIE9JRF84MDJfMTFfTU5UX1NUQTAJCQkweDA5RDEKKyNkZWZpbmUgT0lEXzgwMl8xMV9NQVBfQ0hBTk5FTF9FTkFCTEUJCTB4MDlEMgorI2RlZmluZSBPSURfODAyXzExX01BUF9FTkFCTEUJCQkweDA5RDMKKyNkZWZpbmUgT0lEXzgwMl8xMV9QTUZNRlBDCQkJMHgwOUQ0CisjZGVmaW5lIE9JRF84MDJfMTFfUkFESU9PTgkJCTB4MDlENQorI2RlZmluZSBPSURfODAyXzExX1NJVEVTVVJWRVkJCQkweDA5RDYKKyNkZWZpbmUgT0lEXzgwMl8xMV9UU19CSF9QUklNQVJZX1ZJRAkJMHgwOUQ3CisjZGVmaW5lIE9JRF84MDJfMTFfVFNfQkhfUFJJTUFSWV9QQ1AJCTB4MDlEOAorI2RlZmluZSBPSURfODAyXzExX1RTX0JIX1ZJRAkJCTB4MDlEOQorI2RlZmluZSBPSURfODAyXzExX1RTX0ZIX1ZJRAkJCTB4MDlEQQorI2RlZmluZSBPSURfODAyXzExX1RSQU5TUEFSRU5UX1ZJRAkJMHgwOURCCisjZGVmaW5lIE9JRF84MDJfMTFfVkhUQlcJCQkweDA5REMKKyNkZWZpbmUgT0lEXzgwMl8xMV9WMTBfQ09OVkVSVEVSCQkweDA5REQKKyNkZWZpbmUgT0lEXzgwMl8xMV9XU0NfU1RPUAkJCTB4MDlERQorI2RlZmluZSBPSURfODAyXzExX1dTQ0NPTkZfTU9ERQkJCTB4MDlERgorI2RlZmluZSBPSURfODAyXzExX1dTQ19NT0RFCQkJMHgwOUUwCisjZGVmaW5lIE9JRF84MDJfMTFfV1NDX0dFVF9DT05GCQkJMHgwOUUxCisjZGVmaW5lIE9JRF84MDJfMTFfV1NDQ09ORl9TVEFUVVMJCTB4MDlFMgpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9pbmNsdWRlL3VhcGkvbGludXgvd2FwcC93YXBwX2NtbV90eXBlLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L2luY2x1ZGUvdWFwaS9saW51eC93YXBwL3dhcHBfY21tX3R5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kOTIxNmM5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9pbmNsdWRlL3VhcGkvbGludXgvd2FwcC93YXBwX2NtbV90eXBlLmgKQEAgLTAsMCArMSwxMTM5IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTWVkaWF0ZWsgVGVjaCBJbmMuCisgKiA0RiwgTm8uIDIgVGVjaG5vbG9neSA1dGggUmQuCisgKiBTY2llbmNlLWJhc2VkIEluZHVzdHJpYWwgUGFyaworICogSHNpbi1jaHUsIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMTEsIE1lZGlhdGVrIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBNZWRpYXRlaydzIHNvdXJjZSBjb2RlIGlzIGFuIHVucHVibGlzaGVkIHdvcmsgYW5kIHRoZQorICogdXNlIG9mIGEgY29weXJpZ2h0IG5vdGljZSBkb2VzIG5vdCBpbXBseSBvdGhlcndpc2UuIFRoaXMgc291cmNlIGNvZGUKKyAqIGNvbnRhaW5zIGNvbmZpZGVudGlhbCB0cmFkZSBzZWNyZXQgbWF0ZXJpYWwgb2YgTWVkaWF0ZWsgVGVjaC4gQW55IGF0dGVtcAorICogb3IgcGFydGljaXBhdGlvbiBpbiBkZWNpcGhlcmluZywgZGVjb2RpbmcsIHJldmVyc2UgZW5naW5lZXJpbmcgb3IgaW4gYW55CisgKiB3YXkgYWx0ZXJpbmcgdGhlIHNvdXJjZSBjb2RlIGlzIHN0cmljaXRseSBwcm9oaWJpdGVkLCB1bmxlc3MgdGhlIHByaW9yCisgKiB3cml0dGVuIGNvbnNlbnQgb2YgTWVkaWF0ZWsgVGVjaG5vbG9neSwgSW5jLiBpcyBvYnRhaW5lZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCXdhcHBfY21tX3R5cGUuaAorCisJQWJzdHJhY3Q6CisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobyAgICAgICAgIFdoZW4gICAgICAgICAgV2hhdAorCS0tLS0tLS0tICAgIC0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKy8qIFRoaXMgZmlsZSBpcyB1c2VkIGJ5IHdpZmkgZHJpdmVyIGFuZCB3YXBwLgorICAgS2VlcCBkYXRhIHN0cnVjdHVyZSBzeW5jICovCisKKyNpZm5kZWYgX19XQVBQX1RZUEVTX0hfXworI2RlZmluZSBfX1dBUFBfVFlQRVNfSF9fCisKKy8vI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaWZkZWYgV0FQUF9TVVBQT1JUCisjZGVmaW5lIE1BWF9CU1NMT0FEX1RIUkQJCQkxMDAKKyNlbmRpZiAvKiBXQVBQX1NVUFBPUlQgKi8KKworI2lmbmRlZiBHTlVfUEFDS0VECisjZGVmaW5lIEdOVV9QQUNLRUQgIChfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkpCisjZW5kaWYgLyogR05VX1BBQ0tFRCAqLworCisjaWZuZGVmIE1BQ19BRERSX0xFTgorI2RlZmluZSBNQUNfQUREUl9MRU4JCQkJNgorI2VuZGlmCisjaWZuZGVmIExFTl9QTUsKKyNkZWZpbmUgTEVOX1BNSwkJCQkJMzIKKyNlbmRpZgorI2lmbmRlZiBMRU5fUE1LX01BWAorI2RlZmluZSBMRU5fUE1LX01BWAkJCQk0OAorI2VuZGlmCisjaWZuZGVmIExFTl9QTUtJRAorI2RlZmluZSBMRU5fUE1LSUQJCQkJMTYKKyNlbmRpZgorI2lmbmRlZiBMRU5fTUFYX1BUSworI2RlZmluZSBMRU5fTUFYX1BUSwkJCQk4OAorI2VuZGlmCisjaWZuZGVmIExFTl9QU0sKKyNkZWZpbmUgTEVOX1BTSwkJCQkJNjQKKyNlbmRpZgorI2lmbmRlZiBMRU5fTUFYX1VSSQorI2RlZmluZSBMRU5fTUFYX1VSSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIwCisjZW5kaWYKKworI2lmbmRlZiBBQ19OVU0KKyNkZWZpbmUgQUNfTlVNCQkJCQkJNAorI2VuZGlmCisjZGVmaW5lIE1BWF9IRV9NQ1NfTEVOIDEyCisjZGVmaW5lIE1BWF9PUF9DTEFTUyAxNgorI2RlZmluZSBNQVhfTEVOX09GX1NTSUQgMzIKKyNkZWZpbmUgTUFYX05VTV9PRl9DSEFOTkVMUwkJNTkgLy8gMTQgY2hhbm5lbHMgQDIuNEcgKyAgMTJAVU5JSShsb3dlci9taWRkbGUpICsgMTZASGlwZXJMQU4yICsgMTFAVU5JSSh1cHBlcikgKyAwQEphcGFuICsgMSBhcyBOVUxMIHRlcm1pbmF0aW9uCisjZGVmaW5lIEFTU09DX1JFUV9MRU4gMTU0CisjZGVmaW5lIEFTU09DX1JFUV9MRU5fTUFYIDUxMgorI2RlZmluZSBQUkVRX0lFX0xFTiAyMDAKKyNkZWZpbmUgQkNOX1JQVF9MRU4gMjAwCisjZGVmaW5lIElXU0NfTUFYX1NVQl9NQVNLX0xJU1RfQ09VTlQJMworI2RlZmluZSBXTU9ERV9DQVBfTihfeCkgICAgICAgICAgICAgICAgICAgICAgICAoKChfeCkgJiAoV01PREVfR04gfCBXTU9ERV9BTikpICE9IDApCisjZGVmaW5lIFdNT0RFX0NBUF9BQyhfeCkgICAgICAgICAgICAgICAoKChfeCkgJiAoV01PREVfQUMpKSAhPSAwKQorI2RlZmluZSBXTU9ERV9DQVBfQVgoX3gpCSgoX3gpICYgKFdNT0RFX0FYXzI0RyB8IFdNT0RFX0FYXzVHIHwgV01PREVfQVhfNkcpKQorI2RlZmluZSBXTU9ERV9DQVAoX3gsIF9tb2RlKSAgICgoKF94KSAmIChfbW9kZSkpICE9IDApCisKKyNkZWZpbmUgTUFYX1NVUFBPUlRfSU5GX05VTSAxNyAqIE1BWF9OVU1fT0ZfUkFESU8gLyogMTZNQlNTKzFBUENMSSAqLworI2RlZmluZSBNQVhfTlVNX09GX1dBUFBfQ0hBTk5FTFMgNTkKKyNkZWZpbmUgTUFYX1BST0ZJTEVfQ05UIDQKKyNkZWZpbmUgUEVSX0VWRU5UX0xJU1RfTUFYX05VTSAJCTUKKyNkZWZpbmUJREFFTU9OX05FSUdIQk9SX1JFUE9SVF9NQVhfTlVNIDEyOAorI2RlZmluZSBWRVJTSU9OX1dBUFBfQ01NICJ2My4wLjAuMSIKKyNpZmRlZiBNQVBfUjNfV0Y2CisjZGVmaW5lIE1BWF9USUQgNAorI2VuZGlmCit0eXBlZGVmIGVudW0geworCVdBUFBfU1RBX0lOVkFMSUQsCisJV0FQUF9TVEFfRElTQ09OTkVDVEVELAorCVdBUFBfU1RBX0NPTk5FQ1RFRCwKK30gV0FQUF9TVEFfU1RBVEU7CisKK3R5cGVkZWYgZW51bSB7CisJV0FQUF9CU1NfU1RPUCA9IDAsCisJV0FQUF9CU1NfU1RBUlQsCit9IFdBUFBfQlNTX1NUQVRFOworCit0eXBlZGVmIGVudW0geworCVdBUFBfQVVUSCA9IDAsCisJV0FQUF9BU1NPQywKKwlXQVBQX0VBUE9MCit9IFdBUFBfQ05OQ1RfU1RBR0U7CisKK3R5cGVkZWYgZW51bSB7CisJV0FQUF9CU1NMT0FEX05PUk1BTCA9IDAsCisJV0FQUF9CU1NMT0FEX0hJR0gsCisJV0FQUF9CU1NMT0FEX0xPVywKK30gV0FQUF9CU1NMT0FEX1NUQVRFOworCit0eXBlZGVmIGVudW0geworCU5PVF9GQUlMVVJFID0gMCwKKwlBUF9OT1RfUkVBRFksCisJQUNMX0NIRUNLX0ZBSUwsCisJQlNTSURfTk9UX0ZPVU5ELAorCUJTU0lEX01JU01BVENILAorCUJTU0lEX0lGX05PVF9SRUFEWSwKKwlCTkRfU1RSR19DT05ORUNUX0NIRUNLX0ZBSUwsCisJRElTQUxMT1dfTkVXX0FTU09DSSwKKwlFWl9DT05ORUNUX0RJU0FMTE9XLAorCUVaX1NFVFVQX0ZVTkNfRElTQUJMRUQsCisJRlRfRVJST1IsCisJR09fVVBEQVRFX05PVF9DT01QTEVURSwKKwlNTE1FX05PX1JFU09VUkNFLAorCU1MTUVfQVNTT0NfUkVKX1RFTVAsCisJTUxNRV9VTkFCTEVfSEFORExFX1NUQSwKKwlNTE1FX0VaX0NOTkNUX0xPT1AsCisJTUxNRV9SRVFfV0lUSF9JTlZBTElEX1BBUkFNLAorCU1MTUVfUkVKRUNUX1RJTUVPVVQsCisJTUxNRV9VTlNQRUNJRllfRkFJTFVSRSwKKwlOT1RfRk9VTkRfSU5fUkFESVVTX0FDTCwKKwlQRUVSX1JFUV9TQU5JVFlfRkFJTCwKK30gV0FQUF9DTk5DVF9GQUlMX1JFQVNPTl9MSVNUOworCit0eXBlZGVmIGVudW0geworCVdBUFBfQVBDTElfRElTQVNTT0NJQVRFRCA9IDAsCisJV0FQUF9BUENMSV9BU1NPQ0lBVEVELAorfSBXQVBQX0FQQ0xJX0FTU09DX1NUQVRFOworCit0eXBlZGVmIGVudW0geworCVdBUFBfREVWX1FVRVJZX1JTUCA9IDEsCisJV0FQUF9IVF9DQVBfUVVFUllfUlNQLAorCVdBUFBfVkhUX0NBUF9RVUVSWV9SU1AsCisJV0FQUF9IRV9DQVBfUVVFUllfUlNQLAorCVdBUFBfTUlTQ19DQVBfUVVFUllfUlNQLAorCVdBUFBfQ0xJX1FVRVJZX1JTUCwKKwlXQVBQX0NMSV9MSVNUX1FVRVJZX1JTUCwKKwlXQVBQX0NMSV9KT0lOX0VWRU5ULAorCVdBUFBfQ0xJX0xFQVZFX0VWRU5ULAorCVdBUFBfQ0xJX1BST0JFX0VWRU5ULAorCVdBUFBfQ0hOX0xJU1RfUlNQLAorCVdBUFBfT1BfQ0xBU1NfUlNQLAorCVdBUFBfQlNTX0lORk9fUlNQLAorCVdBUFBfQVBfTUVUUklDX1JTUCwKKwlXQVBQX0NIX1VUSUxfUVVFUllfUlNQLAorCVdBUFBfQVBfQ09ORklHX1JTUCwKKwlXQVBQX0FQQ0xJX1FVRVJZX1JTUCwKKwlNQVBfQkhfU1RBX1dQU19ET05FLAorCU1BUF9UUklHR0VSX1JTU0lfU1RFRVIsCisJV0FQUF9SQ0VWX0JDTl9SRVBPUlQsCisJV0FQUF9SQ0VWX0JDTl9SRVBPUlRfQ09NUExFVEUsCisJV0FQUF9SQ0VWX01PTklUT1JfSU5GTywKKwlXQVBQX0JTU0xPQURfUlNQLAorCVdBUFBfQlNTTE9BRF9DUk9TU0lORywKKwlXQVBQX0JTU19TVEFURV9DSEFOR0UsCisJV0FQUF9DSF9DSEFOR0UsCisJV0FQUF9UWF9QT1dFUl9DSEFOR0UsCisJV0FQUF9BUENMSV9BU1NPQ19TVEFURV9DSEFOR0UsCisJV0FQUF9TVEFfUlNTSV9SU1AsCisJV0FQUF9DTElfQUNUSVZFX0NIQU5HRSwKKwlXQVBQX0NTQV9FVkVOVCwKKwlXQVBQX1NUQV9DTk5DVF9SRUosCisJV0FQUF9BUENMSV9SU1NJX1JTUCwKKwlXQVBQX1NDQU5fUkVTVUxUX1JTUCwKKwlXQVBQX01BUF9WRU5ET1JfSUUsCisJV0FQUF9XU0NfU0NBTl9DT01QX05PVElGLAorCVdBUFBfTUFQX1dTQ19DT05GSUcsCisJV0FQUF9XU0NfRUFQT0xfU1RBUlRfTk9USUYsCisJV0FQUF9XU0NfRUFQT0xfQ09NUExFVEVfTk9USUYsCisJV0FQUF9TQ0FOX0NPTVBMRVRFX05PVElGLAorCVdBUFBfQTRfRU5UUllfTUlTU0lOR19OT1RJRiwKKwlXQVBQX1JBREFSX0RFVEVDVF9OT1RJRiwKKwlXQVBQX0FQQ0xJX0FTU09DX1NUQVRFX0NIQU5HRV9WRU5ET1IxMCwKKwlXQVBQX0NBQ19TVE9QLCAvL01BUCBSMgorCVdBUFBfU1RBX0RJU0FTU09DX0VWRU5ULAorCVdBUFBfUkFESU9fTUVUUklDX1JTUCwKKwlXQVBQX0RQUF9BQ1RJT05fRlJBTUVfUkVDRUlWRUQsCisJV0FQUF9EUFBfQUNUSU9OX0ZSQU1FX1NUQVRVUywKKwlXQVBQX0RQUF9DQ0VfUlNQLAorCVdBUFBfQ0FDX1BFUklPRF9FVkVOVCwKKwlXQVBQX1VOU0FGRV9DSEFOTkVMX0VWRU5ULAorCVdBUFBfQkFORF9TVEFUVVNfQ0hBTkdFX0VWRU5ULAorCVdBUFBfU1RBX0lORk8sCisJV0FQUF9SM19SRUNPTkZJR19UUklHR0VSLAorCVdBUFBfUjNfRFBQX1VSSV9JTkZPLAorCVdBUFBfTk9fU1RBX0NPTk5FQ1RfVElNRU9VVF9FVkVOVCwKKwlXQVBQX05PX0RBVEFfVFJBRkZJQ19USU1FT1VUX0VWRU5ULAorCVdBUFBfV0lGSV9VUF9FVkVOVCwKKwlXQVBQX1dJRklfRE9XTl9FVkVOVCwKKwlXQVBQX1FPU19BQ1RJT05fRlJBTUVfRVZFTlQgPSA3MCwKKwlXQVBQX01TQ1NfQ0xBU1NJRklFUl9QQVJBTV9FVkVOVCwKKwlXQVBQX1ZFTkRfU1BFQ19VUF9UVVBMRV9FVkVOVCwKKwlXQVBQX0NIX0NIQU5HRV9SMywKKwlXQVBQX1NFTEZfU1JHX0JJVE1BUF9FVkVOVCwKKwlXQVBQX1VQTElOS19UUkFGRklDX0VWRU5ULAorCVdBUFBfQ09ORklHX1dQU19FVkVOVCwKK30gV0FQUF9FVkVOVF9JRDsKKwordHlwZWRlZiBlbnVtIHsKKwlXQVBQX0RFVl9RVUVSWV9SRVEgPSAxLAorCVdBUFBfSFRfQ0FQX1FVRVJZX1JFUSwKKwlXQVBQX1ZIVF9DQVBfUVVFUllfUkVRLAorCVdBUFBfSEVfQ0FQX1FVRVJZX1JFUSwKKwlXQVBQX01JU0NfQ0FQX1FVRVJZX1JFUSwKKwlXQVBQX0NMSV9RVUVSWV9SRVEsCisJV0FQUF9DTElfTElTVF9RVUVSWV9SRVEsCisJV0FQUF9DSE5fTElTVF9RVUVSWV9SRVEsCisJV0FQUF9PUF9DTEFTU19RVUVSWV9SRVEsCisJV0FQUF9CU1NfSU5GT19RVUVSWV9SRVEsCisJV0FQUF9BUF9NRVRSSUNfUVVFUllfUkVRLAorCVdBUFBfQ0hfVVRJTF9RVUVSWV9SRVEsCisJV0FQUF9BUENMSV9RVUVSWV9SRVEsCisJV0FQUF9CU1NfU1RBUlRfUkVRLAorCVdBUFBfQlNTX1NUT1BfUkVRLAorCVdBUFBfVFhQV1JfUFJDVEdfUkVRLAorCVdBUFBfU1RFRVJJTkdfUE9MSUNZX1NFVF9SRVEsCisJV0FQUF9CU1NfTE9BRF9USFJEX1NFVF9SRVEsCisJV0FQUF9BUF9DT05GSUdfU0VUX1JFUSwKKwlXQVBQX0JTU0xPQURfUVVFUllfUkVRLAorCVdBUFBfSEVDQVBfUVVFUllfUkVRLAorCVdBUFBfU1RBX1JTU0lfUVVFUllfUkVRLAorCVdBUFBfQVBDTElfUlNTSV9RVUVSWV9SRVEsCisJV0FQUF9HRVRfU0NBTl9SRVNVTFRTLAorCVdBUFBfU0VORF9OVUxMX0ZSQU1FUywKKwlXQVBQX1dTQ19QQkNfRVhFQywKKwlXQVBQX1dTQ19TRVRfQkhfUFJPRklMRSwKKwlXQVBQX1NFVF9TQ0FOX0JIX1NTSURTLAorCVdBUFBfU0VUX0FWT0lEX1NDQU5fQ0FDLAorI2lmZGVmIE1BUF9SMgorCVdBUFBfUkFESU9fTUVUUklDU19SRVEsCisjZW5kaWYKKyNpZmRlZiBEUFBfUjJfU1VQUE9SVAorCVdBUFBfR0VUX0NDRV9SRVNVTFQsCisjZW5kaWYKKwlXQVBQX1NFVF9TUkdfQklUTUFQLAorCVdBUFBfU0VUX1RPUE9MT0dZX1VQREFURSwKKwlXQVBQX1NFVF9TUkdfVVBMSU5LX1NUQVRVUywKK30gV0FQUF9SRVFfSUQ7CisKK3R5cGVkZWYgZW51bSB7CisJUEFSQU1fREdBRl9ESVNBQkxFRCwKKwlQQVJBTV9QUk9YWV9BUlAsCisJUEFSQU1fTDJfRklMVEVSLAorCVBBUkFNX0lDTVBWNF9ERU5ZLAorCVBBUkFNX01NUERVX1NJWkUsCisJUEFSQU1fRVhURVJOQUxfQU5RUF9TRVJWRVJfVEVTVCwKKwlQQVJBTV9HQVNfQ09NRV9CQUNLX0RFTEFZLAorCVBBUkFNX1dOTV9OT1RJRklDQVRJT04sCisJUEFSQU1fUU9TTUFQLAorCVBBUkFNX1dOTV9CU1NfVFJBTlNJVElPTl9NQU5BR0VNRU5ULAorfSBXQVBQX1BBUkFNOworCit0eXBlZGVmIHN0cnVjdCBHTlVfUEFDS0VEIF9XQVBQX0NPTk5FQ1RfRkFJTFVSRV9SRUFTT04geworCXU4CWNvbm5lY3Rfc3RhZ2U7CisJdTE2CXJlYXNvbjsKK30gV0FQUF9DT05ORUNUX0ZBSUxVUkVfUkVBU09OOworCit0eXBlZGVmIHN0cnVjdCBHTlVfUEFDS0VEIF93YXBwX2Rldl9pbmZvIHsKKwl1MzIJaWZpbmRleDsKKwl1OAlpZm5hbWVbSUZOQU1TSVpdOworCXU4CW1hY19hZGRyW01BQ19BRERSX0xFTl07CisJdTgJZGV2X3R5cGU7CisJdTgJcmFkaW9faWQ7CisJdTE2CXdpcmVsZXNzX21vZGU7CisJdWludHB0cl90CWFkcHRfaWQ7CisJdTggZGV2X2FjdGl2ZTsKK30gd2FwcF9kZXZfaW5mbzsKKwordHlwZWRlZiBzdHJ1Y3QgR05VX1BBQ0tFRCBfd2Rldl9odF9jYXAgeworCXU4CXR4X3N0cmVhbTsKKwl1OAlyeF9zdHJlYW07CisJdTgJc2dpXzIwOworCXU4CXNnaV80MDsKKwl1OAlodF80MDsKK30gd2Rldl9odF9jYXA7CisKK3R5cGVkZWYgc3RydWN0IEdOVV9QQUNLRUQgX3dkZXZfdmh0X2NhcCB7CisJdTgJc3VwX3R4X21jc1syXTsKKwl1OAlzdXBfcnhfbWNzWzJdOworCXU4CXR4X3N0cmVhbTsKKwl1OAlyeF9zdHJlYW07CisJdTgJc2dpXzgwOworCXU4CXNnaV8xNjA7CisJdTgJdmh0XzE2MDsKKwl1OAl2aHRfODA4MDsKKwl1OAlzdV9iZjsKKwl1OAltdV9iZjsKK30gd2Rldl92aHRfY2FwOworCit0eXBlZGVmIHN0cnVjdCBHTlVfUEFDS0VEIF93ZGV2X2hlX2NhcCB7CisJdW5zaWduZWQgY2hhciBoZV9tY3NfbGVuOworCXVuc2lnbmVkIGNoYXIgaGVfbWNzW01BWF9IRV9NQ1NfTEVOXTsKKwl1bnNpZ25lZCBjaGFyIHR4X3N0cmVhbTsKKwl1bnNpZ25lZCBjaGFyIHJ4X3N0cmVhbTsKKwl1bnNpZ25lZCBjaGFyIGhlXzgwODA7CisJdW5zaWduZWQgY2hhciBoZV8xNjA7CisJdW5zaWduZWQgY2hhciBzdV9iZl9jYXA7CisJdW5zaWduZWQgY2hhciBtdV9iZl9jYXA7CisJdW5zaWduZWQgY2hhciB1bF9tdV9taW1vX2NhcDsKKwl1bnNpZ25lZCBjaGFyIHVsX211X21pbW9fb2ZkbWFfY2FwOworCXVuc2lnbmVkIGNoYXIgZGxfbXVfbWltb19vZmRtYV9jYXA7CisJdW5zaWduZWQgY2hhciB1bF9vZmRtYV9jYXA7CisJdW5zaWduZWQgY2hhciBkbF9vZmRtYV9jYXA7CisJdW5zaWduZWQgY2hhciBnaTsgLyogMDphdXRvOzE6ODAwOzI6MTYwMDszOjMyMDAgKi8KK30gd2Rldl9oZV9jYXA7CisKKworI2lmZGVmIE1BUF9SMgordHlwZWRlZiBzdHJ1Y3QgR05VX1BBQ0tFRCBfd2Rldl9leHRlbmRlZF9hcF9tZXRyaWNzIHsKKwl1MzIgdWNfdHg7CisJdTMyIHVjX3J4OworCXUzMiBtY190eDsKKwl1MzIgbWNfcng7CisJdTMyIGJjX3R4OworCXUzMiBiY19yeDsKK30gd2Rldl9leHRlbmRlZF9hcF9tZXRyaWM7CisKKwordHlwZWRlZiBzdHJ1Y3QgR05VX1BBQ0tFRCBfd2Rldl9zdGFfZXh0ZW5kZWRfaW5mbyB7CisjaWYgMAorCXU4IGJzc2lkW01BQ19BRERSX0xFTl07CisjZW5kaWYKKwl1MzIgbGFzdF9kYXRhX3VsX3JhdGU7CisJdTMyIGxhc3RfZGF0YV9kbF9yYXRlOworCXUzMiB1dGlsaXphdGlvbl9yeDsKKwl1MzIgdXRpbGl6YXRpb25fdHg7Cit9IHdkZXZfc3RhX2V4dF9pbmZvOworCit0eXBlZGVmIHN0cnVjdCBHTlVfUEFDS0VEIF93ZGV2X2V4dGVuZGVkX3N0YV9tZXRyaWNzIHsKKyNpZiAwCisJdTggc3RhX21hY1tNQUNfQUREUl9MRU5dOworCXU4IGV4dGVuZGVkX2luZm9fY250OworI2VuZGlmCisJd2Rldl9zdGFfZXh0X2luZm8gc3RhX2luZm87Cit9IHdkZXZfZXh0ZW5kZWRfc3RhX21ldHJpY3M7CisKKyNlbmRpZgordHlwZWRlZiBzdHJ1Y3QgR05VX1BBQ0tFRCBfd2FwcF9jYWNfaW5mbyB7CisJdTggY2hhbm5lbDsKKwl1OCByZXQ7CisJdTggY2FjX3RpbWVyOworfSB3YXBwX2NhY19pbmZvOworI2lmZGVmIE1BUF9SMgordHlwZWRlZiBlbnVtIGNhY19tb2RlCit7CisJQ09OVElOVU9VU19DQUMsCisJREVESUNBVEVEX0NBQywKKwlSRURVQ0VEX01JTU9fQ0FDLAorfSBDQUNfTU9ERTsKKyNlbmRpZgorCisKK3R5cGVkZWYgc3RydWN0IEdOVV9QQUNLRUQgX3dkZXZfbWlzY19jYXAgeworCXU4CW1heF9udW1fb2ZfY2xpOworCXU4CW1heF9udW1fb2ZfYnNzOworCXU4CW51bV9vZl9ic3M7CisJdTgJbWF4X251bV9vZl9ibG9ja19jbGk7Cit9IHdkZXZfbWlzY19jYXA7CisKK3N0cnVjdCBHTlVfUEFDS0VEIGhlX25zc3sKKwl1MTYgbnNzXzgwOjI7CisJdTE2IG5zc18xNjA6MjsKKwl1MTYgbnNzXzgwODA6MjsKK307CisKK3N0cnVjdCBHTlVfUEFDS0VEIG1hcF9jbGlfY2FwIHsKKwl1MTYgYnc6MjsKKwl1MTYgcGh5X21vZGU6MzsKKwl1MTYgbnNzOjI7CisJdTE2IGJ0bV9jYXBhYmxlOjE7CisJdTE2IHJybV9jYXBhYmxlOjE7CisJdTE2IG1ib19jYXBhYmxlOjE7CisJc3RydWN0IGhlX25zcyBuc3NfaGU7Cit9OworCisjaWZkZWYgTUFQX1IzX1dGNgorc3RydWN0IEdOVV9QQUNLRUQgYXNzb2Nfd2lmaTZfc3RhX2luZm8geworCXVuc2lnbmVkIGNoYXIgdGlkOworCXVuc2lnbmVkIGNoYXIgdGlkX3Ffc2l6ZTsKK307CisKK3R5cGVkZWYgc3RydWN0IEdOVV9QQUNLRUQgX3dkZXZfd2Y2X2NhcCB7CisJdW5zaWduZWQgY2hhciBoZV9tY3NfbGVuOworCXVuc2lnbmVkIGNoYXIgaGVfbWNzW01BWF9IRV9NQ1NfTEVOXTsKKwl1bnNpZ25lZCBjaGFyIHR4X3N0cmVhbTsKKwl1bnNpZ25lZCBjaGFyIHJ4X3N0cmVhbTsKKwl1bnNpZ25lZCBjaGFyIGhlXzgwODA7CisJdW5zaWduZWQgY2hhciBoZV8xNjA7CisJdW5zaWduZWQgY2hhciBzdV9iZl9jYXA7CisJdW5zaWduZWQgY2hhciBtdV9iZl9jYXA7CisJdW5zaWduZWQgY2hhciB1bF9tdV9taW1vX2NhcDsKKwl1bnNpZ25lZCBjaGFyIHVsX211X21pbW9fb2ZkbWFfY2FwOworCXVuc2lnbmVkIGNoYXIgZGxfbXVfbWltb19vZmRtYV9jYXA7CisJdW5zaWduZWQgY2hhciB1bF9vZmRtYV9jYXA7CisJdW5zaWduZWQgY2hhciBkbF9vZmRtYV9jYXA7CisJdW5zaWduZWQgY2hhciBhZ2VudF9yb2xlOworCXVuc2lnbmVkIGNoYXIgc3VfYmVhbWZvcm1lZV9zdGF0dXM7CisJdW5zaWduZWQgY2hhciBiZWFtZm9ybWVlX3N0c19sZXNzODA7CisJdW5zaWduZWQgY2hhciBiZWFtZm9ybWVlX3N0c19tb3JlODA7CisJdW5zaWduZWQgY2hhciBtYXhfdXNlcl9kbF90eF9tdV9taW1vOworCXVuc2lnbmVkIGNoYXIgbWF4X3VzZXJfdWxfcnhfbXVfbWltbzsKKwl1bnNpZ25lZCBjaGFyIG1heF91c2VyX2RsX3R4X29mZG1hOworCXVuc2lnbmVkIGNoYXIgbWF4X3VzZXJfdWxfcnhfb2ZkbWE7CisJdW5zaWduZWQgY2hhciBydHNfc3RhdHVzOworCXVuc2lnbmVkIGNoYXIgbXVfcnRzX3N0YXR1czsKKwl1bnNpZ25lZCBjaGFyIG1fYnNzaWRfc3RhdHVzOworCXVuc2lnbmVkIGNoYXIgbXVfZWRjYV9zdGF0dXM7CisJdW5zaWduZWQgY2hhciB0d3RfcmVxdWVzdGVyX3N0YXR1czsKKwl1bnNpZ25lZCBjaGFyIHR3dF9yZXNwb25kZXJfc3RhdHVzOworfSB3ZGV2X3dmNl9jYXA7CisKK3R5cGVkZWYgc3RydWN0IEdOVV9QQUNLRUQgX3dkZXZfd2Y2X2NhcF9yb2xlcyB7CisJdW5zaWduZWQgY2hhciByb2xlX3N1cHA7CisJd2Rldl93ZjZfY2FwIHdmNl9yb2xlWzJdOworfSB3ZGV2X3dmNl9jYXBfcm9sZXM7CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgR05VX1BBQ0tFRCBfd2FwcF9jbGllbnRfaW5mbyB7CisJdTggbWFjX2FkZHJbTUFDX0FERFJfTEVOXTsKKwl1OCBic3NpZFtNQUNfQUREUl9MRU5dOworCXU4IHN0YV9zdGF0dXM7IC8qIFdBUFBfU1RBX1NUQVRFICovCisJdTE2IGFzc29jX3RpbWU7CisJdTE2IGRvd25saW5rOworCXUxNiB1cGxpbms7CisJc2lnbmVkIGNoYXIgdXBsaW5rX3Jzc2k7CisJLyp0cmFmZmljIHN0YXRzKi8KKwl1MzIgYnl0ZXNfc2VudDsKKwl1MzIgYnl0ZXNfcmVjZWl2ZWQ7CisJdTMyIHBhY2tldHNfc2VudDsKKwl1MzIgcGFja2V0c19yZWNlaXZlZDsKKwl1MzIgdHhfcGFja2V0c19lcnJvcnM7CisJdTMyIHJ4X3BhY2tldHNfZXJyb3JzOworCXUzMiByZXRyYW5zbWlzc2lvbl9jb3VudDsKKwl1MTYgbGlua19hdmFpbGFiaWxpdHk7CisJdTE2IGFzc29jX3JlcV9sZW47CisJdTggYkxvY2FsU3RlZXJEaXNhbGxvdzsKKwl1OCBiQlRNU3RlZXJEaXNhbGxvdzsKKwl1OCBzdGF0dXM7CisJLyogaHRfY2FwICovCisJLyogdmh0X2NhcCAqLworCisJLyogVGhyb3VnaHB1dCBmb3IgVHgvUnggKi8KKwl1MzIgdHhfdHA7CisJdTMyIHJ4X3RwOworCXN0cnVjdCBtYXBfY2xpX2NhcCBjbGlfY2FwczsKKyNpZmRlZiBNQVBfUjIKKwl3ZGV2X2V4dGVuZGVkX3N0YV9tZXRyaWNzIGV4dF9tZXRyaWNfaW5mbzsKKyNlbmRpZgorCXUxNiBkaXNhc3NvY19yZWFzb247CisjaWZkZWYgTUFQX1IyCisJdTggSXNSZWFzc29jOworI2VuZGlmCisJdTggIGlzX0FQQ0xJOworI2lmZGVmIE1BUF9SM19XRjYKKwl1OCB0aWRfY250OworCXN0cnVjdCBhc3NvY193aWZpNl9zdGFfaW5mbyBzdGF0dXNfdGx2W01BWF9USURdOworI2VuZGlmCit9IHdhcHBfY2xpZW50X2luZm87CisKK3N0cnVjdCBHTlVfUEFDS0VEIGNobkxpc3QgeworCXU4IGNoYW5uZWw7CisJdTggcHJlZjsKKwl1MTYgY2FjX3RpbWVyOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgR05VX1BBQ0tFRCBfd2Rldl9jaG5faW5mbyB7CisJdTgJCW9wX2NoOworCXU4CQlvcF9jbGFzczsKKwl1MTYJCWJhbmQ7IC8qIDI0ZzsgNWcxOyA1ZzIgKi8KKwl1OAkJY2hfbGlzdF9udW07CisJdTgJCW5vbl9vcF9jaG5fbnVtOworCXUxNgkJZGxfbWNzOworCXN0cnVjdCBjaG5MaXN0IGNoX2xpc3RbMzJdOworCXU4CQlub25fb3BfY2hfbGlzdFszMl07CisJdTgJCUF1dG9DaGFubmVsU2tpcExpc3ROdW07CisJdTgJCUF1dG9DaGFubmVsU2tpcExpc3RbTUFYX05VTV9PRl9DSEFOTkVMUyArIDFdOworfSB3ZGV2X2Nobl9pbmZvOworCitzdHJ1Y3QgR05VX1BBQ0tFRCBvcENsYXNzSW5mbyB7CisJdTgJb3BfY2xhc3M7CisJdTgJbnVtX29mX2NoOworCXU4CWNoX2xpc3RbMTNdOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgR05VX1BBQ0tFRCBfd2Rldl9vcF9jbGFzc19pbmZvIHsKKwl1OAkJbnVtX29mX29wX2NsYXNzOworCXN0cnVjdCBvcENsYXNzSW5mbyBvcENsYXNzSW5mb1tNQVhfT1BfQ0xBU1NdOworfSB3ZGV2X29wX2NsYXNzX2luZm87CisKK3N0cnVjdCBHTlVfUEFDS0VEIG9wQ2xhc3NJbmZvRXh0IHsKKwl1OAlvcF9jbGFzczsKKwl1OAludW1fb2ZfY2g7CisJdTgJY2hfbGlzdFtNQVhfTlVNX09GX0NIQU5ORUxTXTsKK307CisKK3N0cnVjdCBHTlVfUEFDS0VEIF93ZGV2X29wX2NsYXNzX2luZm9fZXh0IHsKKwl1OAkJbnVtX29mX29wX2NsYXNzOworCXN0cnVjdCBvcENsYXNzSW5mb0V4dCBvcENsYXNzSW5mb0V4dFtNQVhfT1BfQ0xBU1NdOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgR05VX1BBQ0tFRCBfd2Rldl9ic3NfaW5mbyB7CisJdTggaWZfYWRkcltNQUNfQUREUl9MRU5dOworCXU4IGJzc2lkW01BQ19BRERSX0xFTl07CisJY2hhciBzc2lkW01BWF9MRU5fT0ZfU1NJRCArIDFdOworCXU4IFNzaWRMZW47CisJdTggbWFwX3JvbGU7CisJdTMyIGF1dGhfbW9kZTsKKwl1MzIgZW5jX3R5cGU7CisJdTgga2V5X2xlbjsKKwl1OCBrZXlbNjQgKyAxXTsKKwl1OCBoaWRkZW5fc3NpZDsKK30gd2Rldl9ic3NfaW5mbzsKKwordHlwZWRlZiBzdHJ1Y3QgR05VX1BBQ0tFRCBfd3NjX2FwY2xpX2NvbmZpZyB7CisJY2hhciBzc2lkW01BWF9MRU5fT0ZfU1NJRCArIDFdOworCXU4IFNzaWRMZW47CisJdTE2IEF1dGhUeXBlOworCXUxNiBFbmNyVHlwZTsKKwl1OCBLZXlbNjRdOworCXUxNiBLZXlMZW5ndGg7CisJdTggS2V5SW5kZXg7CisJdTggYnNzaWRbTUFDX0FERFJfTEVOXTsKKwl1OCBwZWVyX21hcF9yb2xlOworCXU4IG93bl9tYXBfcm9sZTsKK30gd3NjX2FwY2xpX2NvbmZpZzsKKwordHlwZWRlZiBzdHJ1Y3QgR05VX1BBQ0tFRCBfd3NjX2FwY2xpX2NvbmZpZ19tc2cgeworCXUzMiBwcm9maWxlX2NvdW50OworCXdzY19hcGNsaV9jb25maWcgYXBjbGlfY29uZmlnWzBdOworfSB3c2NfYXBjbGlfY29uZmlnX21zZywgKnBfd3NjX2FwY2xpX2NvbmZpZ19tc2c7CisKK3R5cGVkZWYgc3RydWN0IEdOVV9QQUNLRUQgX3dkZXZfYXBfbWV0cmljIHsKKwl1OAkJYnNzaWRbTUFDX0FERFJfTEVOXTsKKwl1OAkJY3U7CisJdTggCQlFU1BJX0FDW0FDX05VTV1bM107CisjaWZkZWYgTUFQX1IyCisJd2Rldl9leHRlbmRlZF9hcF9tZXRyaWMgZXh0X2FwX21ldHJpYzsKKyNlbmRpZgorfSB3ZGV2X2FwX21ldHJpYzsKKworI2lmZGVmIE1BUF9SMgordHlwZWRlZiBzdHJ1Y3QgR05VX1BBQ0tFRCBfd2Rldl9yYWRpb19tZXRyaWMgeworCXU4IGN1X25vaXNlOworCXU4IGN1X3R4OworCXU4IGN1X3J4OworCXU4IGN1X290aGVyOworCXUzMiBlZGNjYTsKK30gd2Rldl9yYWRpb19tZXRyaWM7CisjZW5kaWYKK3R5cGVkZWYgc3RydWN0IEdOVV9QQUNLRUQgX3dkZXZfYXBfY29uZmlnIHsKKwl1OCBzdGFfcmVwb3J0X29uX2NvcDsKKwl1OCBzdGFfcmVwb3J0X25vdF9jb3A7CisJdTggcnNzaV9zdGVlcjsKK30gd2Rldl9hcF9jb25maWc7CisKK3N0cnVjdCBHTlVfUEFDS0VEIHB3cl9saW1pdCB7CisJdTgJb3BfY2xhc3M7CisJdTgJbWF4X3B3cjsKK307CisKK3R5cGVkZWYgc3RydWN0IEdOVV9QQUNLRUQgX3dkZXZfdHhfcG93ZXIgeworCXU4CQludW1fb2Zfb3BfY2xhc3M7CisJc3RydWN0IHB3cl9saW1pdCB0eF9wd3JfbGltaXRbTUFYX09QX0NMQVNTXTsKKwl1MTYgdHhfcHdyOworfSB3ZGV2X3R4X3Bvd2VyOworCisvKkRyaXZlciBkZXRlY3RzIHN0YSBuZWVkZWQgdG8gc3RlZXIqLwordHlwZWRlZiBzdHJ1Y3QgR05VX1BBQ0tFRCBfd2Rldl9zdGVlcl9zdGEgeworCXU4IG1hY19hZGRyW01BQ19BRERSX0xFTl07Cit9IHdkZXZfc3RlZXJfc3RhOworCit0eXBlZGVmIHN0cnVjdCBHTlVfUEFDS0VEIF93YXBwX3Byb2JlX2luZm8geworCXU4IG1hY19hZGRyW01BQ19BRERSX0xFTl07CisJdTggY2hhbm5lbDsKKwlzaWduZWQgY2hhciByc3NpOworCXU4IHByZXFfbGVuOworCXU4IHByZXFbUFJFUV9JRV9MRU5dOworfSB3YXBwX3Byb2JlX2luZm87CisKK3R5cGVkZWYgc3RydWN0IEdOVV9QQUNLRUQgX3dhcHBfYmNuX3JwdF9pbmZvIHsKKwl1OCBzdGFfYWRkcltNQUNfQUREUl9MRU5dOworCXU4IGxhc3RfZnJhZ21lbnQ7CisJdTE2IGJjbl9ycHRfbGVuOworCXU4IGJjbl9ycHRbQkNOX1JQVF9MRU5dOworfSB3YXBwX2Jjbl9ycHRfaW5mbzsKKwordHlwZWRlZiBzdHJ1Y3QgR05VX1BBQ0tFRCB3YXBwX2Joc3RhX2luZm8geworCXU4IG1hY19hZGRyW01BQ19BRERSX0xFTl07CisJdTggY29ubmVjdGVkX2Jzc2lkW01BQ19BRERSX0xFTl07CisJdTggcGVlcl9tYXBfZW5hYmxlOworfSB3YXBwX2Joc3RhX2luZm87CisKK3R5cGVkZWYgc3RydWN0IEdOVV9QQUNLRUQgX3dkZXZfc3RlZXJfcG9saWN5IHsKKwl1OCBzdGVlcl9wb2xpY3k7CisJdTggY3VfdGhyOworCXU4IHJjcGlfdGhyOworfSB3ZGV2X3N0ZWVyX3BvbGljeTsKKwordHlwZWRlZiBzdHJ1Y3QgR05VX1BBQ0tFRCBfYnNzbG9hZF90aHJlc2hvbGQgeworCXU4IGhpZ2hfYnNzbG9hZF90aHJkOworCXU4IGxvd19ic3Nsb2FkX3RocmQ7Cit9IGJzc2xvYWRfdGhyZXNob2xkOworCit0eXBlZGVmIHN0cnVjdCBHTlVfUEFDS0VEIF93YXBwX2Jzc2xvYWRfaW5mbyB7CisJdTE2IHN0YV9jbnQ7CisJdTggY2hfdXRpbDsKKwl1MTYgQXZhbEFkbUNhcDsKK30gd2FwcF9ic3Nsb2FkX2luZm87CisKKy8qIEJ5IGFpciBtb25pdG9yKi8KK3R5cGVkZWYgc3RydWN0IEdOVV9QQUNLRUQgX3dhcHBfbW50X2luZm8geworCXU4IHN0YV9hZGRyW01BQ19BRERSX0xFTl07CisJc2lnbmVkIGNoYXIgcnNzaTsKK30gd2FwcF9tbnRfaW5mbzsKKwordHlwZWRlZiBzdHJ1Y3QgR05VX1BBQ0tFRCBfd2FwcF9jc2FfaW5mbyB7CisJdTggbmV3X2NoYW5uZWw7Cit9IHdhcHBfY3NhX2luZm87CisKKyNpZmRlZiBXUFNfVU5DT05GSUdfRkVBVFVSRV9TVVBQT1JUCitzdHJ1Y3QgR05VX1BBQ0tFRCB3YXBwX3dwc19jb25maWdfaW5mbyB7CisJdTggU1NJRFszM107CS8qIG1hbmRhdG9yeSAqLworCXU4IGNoYW5uZWw7CisJdTE2IEF1dGhUeXBlOwkvKiBtYW5kYXRvcnksIDE6IG9wZW4sIDI6IHdwYS1wc2ssIDQ6IHNoYXJlZCwgODp3cGEsIDB4MTA6IHdwYTIsIDB4MjA6IHdwYTItcHNrICovCisJdTE2IEVuY3JUeXBlOwkvKiBtYW5kYXRvcnksIDE6IG5vbmUsIDI6IHdlcCwgNDogdGtpcCwgODogYWVzICovCisJdTggS2V5WzY0XTsJCS8qIG1hbmRhdG9yeSwgTWF4aW11bSA2NCBieXRlICovCisJdTE2IEtleUxlbmd0aDsKKwl1OCBNYWNBZGRyW01BQ19BRERSX0xFTl07CS8qIG1hbmRhdG9yeSwgQVAgTUFDIGFkZHJlc3MgKi8KKwl1OCBic3Nfcm9sZTsJCQkJLyowLUZyb250aGF1bCwgMS1CYWNraGF1bCovCisJdTggaW5kZXg7Cit9OworI2VuZGlmCit0eXBlZGVmIHN0cnVjdCBHTlVfUEFDS0VEIF93YXBwX2Jzc19zdGF0ZV9pbmZvIHsKKwl1MzIgaW50ZXJmYWNlX2luZGV4OworCVdBUFBfQlNTX1NUQVRFIGJzc19zdGF0ZTsKK30gd2FwcF9ic3Nfc3RhdGVfaW5mbzsKKwordHlwZWRlZiBzdHJ1Y3QgR05VX1BBQ0tFRCBfd2FwcF9jaF9jaGFuZ2VfaW5mbyB7CisJdTMyIGludGVyZmFjZV9pbmRleDsKKwl1OCBuZXdfY2g7LypOZXcgY2hhbm5lbCBJRUVFIG51bWJlciovCisJdTggb3BfY2xhc3M7Cit9IHdhcHBfY2hfY2hhbmdlX2luZm87CisKK3R5cGVkZWYgc3RydWN0IEdOVV9QQUNLRUQgX3dhcHBfdHhwb3dlcl9jaGFuZ2VfaW5mbyB7CisJdTMyIGludGVyZmFjZV9pbmRleDsKKwl1MTYgbmV3X3R4X3B3cjsvKk5ldyBUWCBwb3dlciovCit9IHdhcHBfdHhwb3dlcl9jaGFuZ2VfaW5mbzsKKwordHlwZWRlZiBzdHJ1Y3QgR05VX1BBQ0tFRCBfd2FwcF9hcGNsaV9hc3NvY2lhdGlvbl9pbmZvIHsKKwl1MzIgaW50ZXJmYWNlX2luZGV4OworCVdBUFBfQVBDTElfQVNTT0NfU1RBVEUgYXBjbGlfYXNzb2Nfc3RhdGU7CisJc2lnbmVkIGNoYXIgcnNzaTsKKwlzaWduZWQgY2hhciBQZWVyTUFQRW5hYmxlOworfSB3YXBwX2FwY2xpX2Fzc29jaWF0aW9uX2luZm87CisKK3R5cGVkZWYgc3RydWN0IEdOVV9QQUNLRUQgX3dhcHBfYnNzbG9hZF9jcm9zc2luZ19pbmZvIHsKKwl1MzIgaW50ZXJmYWNlX2luZGV4OworCXU4IGJzc2xvYWRfaGlnaF90aHJkOworCXU4IGJzc2xvYWRfbG93X3RocmQ7CisJdTggYnNzbG9hZDsKK30gd2FwcF9ic3Nsb2FkX2Nyb3NzaW5nX2luZm87CisKK3R5cGVkZWYgc3RydWN0IEdOVV9QQUNLRUQgX3dhcHBfc3RhX2NubmN0X3JlamVjdGVkX2luZm8geworCXUzMiBpbnRlcmZhY2VfaW5kZXg7CisJdTggc3RhX21hY1tNQUNfQUREUl9MRU5dOworCXU4IGJzc2lkW01BQ19BRERSX0xFTl07CisJV0FQUF9DT05ORUNUX0ZBSUxVUkVfUkVBU09OIGNubmN0X2ZhaWw7CisjaWZkZWYgTUFQX1IyCisJdTE2IGFzc29jX3N0YXR1c19jb2RlOworCXUxNiBhc3NvY19yZWFzb25fY29kZTsKKyNlbmRpZgorfSB3YXBwX3N0YV9jbm5jdF9yZWpfaW5mbzsKKworc3RydWN0IEdOVV9QQUNLRUQgbWFwX3ZlbmRvcl9pZQoreworCXU4IHR5cGU7CisJdTggc3VidHlwZTsKKwl1OCByb290X2Rpc3RhbmNlOworCXU4IGNvbm5lY3Rpdml0eV90b19jb250cm9sbGVyOworCXUxNiB1cGxpbmtfcmF0ZTsKKwl1OCB1cGxpbmtfYnNzaWRbTUFDX0FERFJfTEVOXTsKKwl1OCBic3NpZF81Z1tNQUNfQUREUl9MRU5dOworCXU4IGJzc2lkXzJnW01BQ19BRERSX0xFTl07Cit9OworCit0eXBlZGVmIHN0cnVjdCBfcWJzc19sb2FkX3BhcmFtIHsKKwl1OCAgICAgYlZhbGlkOyAgICAgICAgICAgICAgICAgICAgIC8qIDE6IHZhcmlhYmxlIGNvbnRhaW5zIHZhbGlkIHZhbHVlICovCisJdTE2ICAgICAgU3RhTnVtOworCXU4ICAgICAgIENoYW5uZWxVdGlsaXphdGlvbjsKKwl1MTYgICAgICBSZW1haW5pbmdBZG1pc3Npb25Db250cm9sOyAgLyogaW4gdW5pdCBvZiAzMi11cyAqLworfSBRQlNTX0xPQURfUEFSTSwgKlBRQlNTX0xPQURfUEFSTTsKKworI2lmZGVmIE1BUF9SMgordHlwZWRlZiBzdHJ1Y3QgR05VX1BBQ0tFRCBfd2FwcF9xYnNzX2xvYWQgeworCXU4IGJWYWxpZDsvKjE6IHZhcmlhYmxlIGNvbnRhaW5zIHZhbGlkIHZhbHVlKi8KKwl1MTYgIFN0YU51bTsKKwl1OCAgIENoYW5uZWxVdGlsaXphdGlvbjsKKwl1MTYgIFJlbWFpbmluZ0FkbWlzc2lvbkNvbnRyb2w7LyppbiB1bml0IG9mIDMyLXVzKi8KK30gV0FQUF9RQlNTX0xPQURfUEFSTTsKKworI2VuZGlmCisjaWZkZWYgTUFQXzZFX1NVUFBPUlQKK3N0cnVjdCBHTlVfUEFDS0VEIG1hcF9ybnIgeworCXU4IGNoYW5uZWw7CisJdTggb3A7CisJdTggY2NlX2luZDsKK307CisjZW5kaWYKKworI2lmZGVmIERQUF9SMl9TVVBQT1JUCitzdHJ1Y3QgR05VX1BBQ0tFRCBjY2VfdmVuZG9yX2llCit7CisJdTggdmFsdWU7Cit9OworCisjZGVmaW5lIE1BWF9DQ0VfQ0hBTk5FTCAxMjgKKworc3RydWN0IEdOVV9QQUNLRUQgY2NlX3ZlbmRvcl9pZV9yZXN1bHQgeworCXU4IG51bTsKKwl1OCBjY2VfY2hbTUFYX0NDRV9DSEFOTkVMXTsvL2NoYW5uZWwgbGlzdCwgb24gd2hpY2ggYmVhY29uIGluY2x1ZGVzIGNjZSBpZQorfTsKKyNlbmRpZgorCitzdHJ1Y3QgR05VX1BBQ0tFRCBzY2FuX2Jzc19pbmZvIHsKKwl1OCBCc3NpZFtNQUNfQUREUl9MRU5dOworCXU4IENoYW5uZWw7CisJdTggQ2VudHJhbENoYW5uZWw7CisJc2lnbmVkIGNoYXIgUnNzaTsKKwlzaWduZWQgY2hhciBNaW5TTlI7CisJdTggUHJpdmFjeTsKKworCXU4IFNzaWRMZW47CisJdTggU3NpZFtNQVhfTEVOX09GX1NTSURdOworCisJdTE2IEF1dGhNb2RlOworCXUxNiBFbmNyeXBUeXBlOworCXdkZXZfaHRfY2FwIGh0X2NhcDsKKwl3ZGV2X3ZodF9jYXAgdmh0X2NhcDsKKwl3ZGV2X2hlX2NhcCBoZV9jYXA7CisJdTggbWFwX3ZlbmRvcl9pZV9mb3VuZDsKKwlzdHJ1Y3QgbWFwX3ZlbmRvcl9pZSBtYXBfaW5mbzsKKyNpZmRlZiBNQVBfUjIKKyAgICAgICAgV0FQUF9RQlNTX0xPQURfUEFSTSBRYnNzTG9hZDsKKyNlbmRpZgorI2lmZGVmIE1BUF82RV9TVVBQT1JUCisJc3RydWN0IG1hcF9ybnIgcm5yXzZlOworI2VuZGlmCit9Oworc3RydWN0IEdOVV9QQUNLRUQgd2FwcF9zY2FuX2luZm8geworCXUzMiBpbnRlcmZhY2VfaW5kZXg7CisJdTggbW9yZV9ic3M7CisJdTggYnNzX2NvdW50OworCXN0cnVjdCBzY2FuX2Jzc19pbmZvIGJzc1swXTsKK307CisKK3N0cnVjdCBHTlVfUEFDS0VEIHdhcHBfd3NjX3NjYW5faW5mbyB7CisJdTggYnNzX2NvdW50OworCXU4IFV1aWRbMTZdOworfTsKKworc3RydWN0IEdOVV9QQUNLRUQgcmFkYXJfbm90aWZfcworeworCXUzMiBjaGFubmVsOworCXUzMiBzdGF0dXM7CisJdTMyIGJ3OworfTsKKworI2lmZGVmIFdJRklfTURfQ09FWF9TVVBQT1JUCitzdHJ1Y3QgR05VX1BBQ0tFRCB1bnNhZmVfY2hhbm5lbF9ub3RpZl9zCit7CisJdTMyIGNoX2JpdG1hcFs0XTsKK307CisKK3N0cnVjdCBHTlVfUEFDS0VEIGJhbmRfc3RhdHVzX2NoYW5nZSB7CisJdTggc3RhdHVzOwkvKjAtcmFkaW8gdGVtcG9yYXJpbHkgY2Fubm90IGJlIHVzZWQsIDEtcmFkaW8gY2FuIGJlIHVzZWQqLworfTsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBHTlVfUEFDS0VEIF9ORElTXzgwMl8xMV9TU0lEIHsKKwl1MzIgU3NpZExlbmd0aDsJLyogbGVuZ3RoIG9mIFNTSUQgZmllbGQgYmVsb3csIGluIGJ5dGVzOyAqLworCS8qIHRoaXMgY2FuIGJlIHplcm8uICovCisJY2hhciBTc2lkW01BWF9MRU5fT0ZfU1NJRF07CS8qIFNTSUQgaW5mb3JtYXRpb24gZmllbGQgKi8KK30gTkRJU184MDJfMTFfU1NJRCwgKlBORElTXzgwMl8xMV9TU0lEOworc3RydWN0IEdOVV9QQUNLRUQgbm9wX2NoYW5uZWxfbGlzdF9zCit7CisJdTggY2hhbm5lbF9jb3VudDsKKwl1OCBjaGFubmVsX2xpc3RbTUFYX05VTV9PRl9XQVBQX0NIQU5ORUxTXTsKK307CisKKy8qIFdTQyBjb25maWd1cmVkIGNyZWRlbnRpYWwgKi8KK3R5cGVkZWYgc3RydWN0IF9XU0NfQ1JFREVOVElBTCB7CisJTkRJU184MDJfMTFfU1NJRCBTU0lEOwkvKiBtYW5kYXRvcnkgKi8KKwl1MTYgQXV0aFR5cGU7CS8qIG1hbmRhdG9yeSwgMTogb3BlbiwgMjogd3BhLXBzaywgNDogc2hhcmVkLCA4OndwYSwgMHgxMDogd3BhMiwgMHgyMDogd3BhMi1wc2sgKi8KKwl1MTYgRW5jclR5cGU7CS8qIG1hbmRhdG9yeSwgMTogbm9uZSwgMjogd2VwLCA0OiB0a2lwLCA4OiBhZXMgKi8KKwl1OCBLZXlbNjRdOwkJLyogbWFuZGF0b3J5LCBNYXhpbXVtIDY0IGJ5dGUgKi8KKwl1MTYgS2V5TGVuZ3RoOworCXU4IE1hY0FkZHJbTUFDX0FERFJfTEVOXTsJLyogbWFuZGF0b3J5LCBBUCBNQUMgYWRkcmVzcyAqLworCXU4IEtleUluZGV4OwkJLyogb3B0aW9uYWwsIGRlZmF1bHQgaXMgMSAqLworCXU4IGJGcm9tVVBuUDsJLyogVFJVRTogVGhpcyBjcmVkZW50aWFsIGlzIGZyb20gZXh0ZXJuYWwgVVBuUCByZWdpc3RyYXIgKi8KKwl1OCBic3Nfcm9sZTsJCS8qMC1Gcm9udGhhdWwsIDEtQmFja2hhdWwqLworCXU4IERldlBlZXJSb2xlOwkvKiBEZXZpY2Ugcm9sZSBmb3IgdGhlIHBlZXIgZGV2aWNlIHNlbmRpbmcgTTggKi8KKwl1MTYgSXBDb25maWdNZXRob2Q7CisJdTMyCQkJCVJlZ0lwdjRBZGRyOworCXUzMgkJCQlJcHY0U3ViTWFzazsKKwl1MzIJCQkJRW5ySXB2NEFkZHI7CisJdTMyCQkJCUF2YUlwdjRTdWJtYXNrTGlzdFtJV1NDX01BWF9TVUJfTUFTS19MSVNUX0NPVU5UXTsKK30gV1NDX0NSRURFTlRJQUwsICpQV1NDX0NSRURFTlRJQUw7CisKK3N0cnVjdCBzY2FuX1NTSUQKK3sKKwljaGFyIHNzaWRbTUFYX0xFTl9PRl9TU0lEKyAxXTsKKwl1bnNpZ25lZCBjaGFyIFNzaWRMZW47Cit9OworCitzdHJ1Y3QgdmVuZG9yX21hcF9lbGVtZW50IHsKKwl1OCBlaWQ7CisJdTggbGVuZ3RoOworCWNoYXIgb3VpWzNdOyAvKiAweDUwIDZGIDlBICovCisJY2hhciBtdGtfaWVfZWxlbWVudFs0XTsKKwljaGFyIHR5cGU7CisJY2hhciBzdWJ0eXBlOworCWNoYXIgcm9vdF9kaXN0YW5jZTsKKwljaGFyIGNvbnRyb2xsZXJfY29ubmVjdGl2aXR5OworCXNob3J0IHVwbGlua19yYXRlOworCWNoYXIgdXBsaW5rX2Jzc2lkW01BQ19BRERSX0xFTl07CisJY2hhciBfNWdfYnNzaWRbTUFDX0FERFJfTEVOXTsKKwljaGFyIF8yZ19ic3NpZFtNQUNfQUREUl9MRU5dOworfTsKKworc3RydWN0IEdOVV9QQUNLRUQgc2Nhbl9CSF9zc2lkcworeworCXVuc2lnbmVkIGxvbmcgc2Nhbl9jb29raWU7CisJdW5zaWduZWQgY2hhciBzY2FuX2NoYW5uZWxfY291bnQ7CisJdW5zaWduZWQgY2hhciBzY2FuX2NoYW5uZWxfbGlzdFszMl07CisJdW5zaWduZWQgY2hhciBwcm9maWxlX2NudDsKKwlzdHJ1Y3Qgc2Nhbl9TU0lEIHNjYW5fU1NJRF92YWxbTUFYX1BST0ZJTEVfQ05UXTsKK307CisKK3N0cnVjdCBHTlVfUEFDS0VEIGFjdGlvbl9mcm1fZGF0YSB7CisJdTMyIGlmaW5kZXg7CisJdTggYnNzaWRbTUFDX0FERFJfTEVOXTsKKwl1OCBkZXN0aW5hdGlvbl9hZGRyW01BQ19BRERSX0xFTl07CisJdTggdHJhbnNtaXR0ZXJfYWRkcltNQUNfQUREUl9MRU5dOworCXUzMiBjaGFuOworCXUzMiB3YWl0X3RpbWU7CisJdTMyIG5vX2NjazsKKwl1MzIgZnJtX2xlbjsKKwl1MTYgc2VxX25vOworCWNoYXIgZnJtWzBdOworfTsKKworc3RydWN0IEdOVV9QQUNLRUQgcm9jX3JlcSB7CisJdTMyIGlmaW5kZXg7CisJdTMyIGNoYW47CisJdTMyIHdhaXRfdGltZTsKK307CisKKyNpZmRlZiBEUFBfU1VQUE9SVAorc3RydWN0IEdOVV9QQUNLRUQgd2FwcF9kcHBfYWN0aW9uX2ZyYW1lIHsKKwl1OCBzcmNbTUFDX0FERFJfTEVOXTsKKwl1MzIgd2FwcF9kcHBfZnJhbWVfaWRfbm87CisJdTMyIGNoYW47CisJdTMyIGZybV9sZW47CisJdTMyIGlzX2dhczsKKwl1OCBmcm1bMF07Cit9OworCitzdHJ1Y3QgR05VX1BBQ0tFRCB3YXBwX2RwcF9mcm1fdHhfc3RhdHVzIHsKKwl1OCB0eF9zdWNjZXNzOworCXUxNiBzZXFfbm87Cit9OworCitzdHJ1Y3QgR05VX1BBQ0tFRCBwbWtfcmVxIHsKKwl1MzIgaWZpbmRleDsKKwl1OCBwbWtbTEVOX1BNS107CisJdTggcG1rX2xlbjsKKwl1OCBwbWtpZFtMRU5fUE1LSURdOworCXU4IGF1dGhlbnRpY2F0b3JfYWRkcltNQUNfQUREUl9MRU5dOworCXU4IHN1cHBsaWNhbnRfYWRkcltNQUNfQUREUl9MRU5dOworCWludCB0aW1lb3V0OworCWludCBha21wOworCXU4IHNzaWRbTUFYX0xFTl9PRl9TU0lEXTsKKwlzaXplX3Qgc3NpZGxlbjsKK307CisjZW5kaWYgLypEUFBfU1VQUE9SVCovCisjaWZkZWYgTUFQX1IzCitzdHJ1Y3QgR05VX1BBQ0tFRCB3YXBwX3N0YV9pbmZvIHsKKyAgICAgICAgdTggc3JjW01BQ19BRERSX0xFTl07CisgICAgICAgIGNoYXIgc3NpZFtNQVhfTEVOX09GX1NTSUQgKyAxXTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBTc2lkTGVuOworCXU4IHBhc3NwaHJhc2VbTEVOX1BTS107CisJdTggcG1rX2xlbjsKKyAgICAgICAgdTggcG1rW0xFTl9QTUtfTUFYXTsKKwl1OCBwdGtfbGVuOworICAgICAgICB1OCBwdGtbTEVOX01BWF9QVEtdOworfTsKKworc3RydWN0IEdOVV9QQUNLRUQgd2FwcF91cmlfaW5mbyB7CisJdTggc3JjX21hY1tNQUNfQUREUl9MRU5dOworCXU4IHVyaV9sZW47CisJdTggcmN2ZF91cmlbTEVOX01BWF9VUkldOworfTsKKyNlbmRpZiAvKiBNQVBfUjMgKi8KKworc3RydWN0IEdOVV9QQUNLRUQgd2FwcF9zcmdfYml0bWFwIHsKKwl1MzIgY29sb3JfMzFfMDsKKwl1MzIgY29sb3JfNjNfMzI7CisJdTMyIGJzc2lkXzMxXzA7CisJdTMyIGJzc2lkXzYzXzMyOworfTsKKworc3RydWN0IEdOVV9QQUNLRUQgd2FwcF9tZXNoX3NyX2luZm8geworCXU4IHNyX21vZGU7CisJdTggdWxfdHJhZmZpY19zdGF0dXM7CisJc3RydWN0IHdhcHBfc3JnX2JpdG1hcCBibV9pbmZvOworfTsKKworc3RydWN0IEdOVV9QQUNLRUQgd2FwcF9tZXNoX3NyX3RvcG9sb2d5IHsKKwl1OCBtYXBfZGV2X2NvdW50OworCXU4IG1hcF9kZXZfc3Jfc3VwcG9ydF9tb2RlOworCXU4IHNlbGZfcm9sZTsKKwl1OCBtYXBfcmVtb3RlX2FsX21hY1tNQUNfQUREUl9MRU5dOworCXU4IG1hcF9yZW1vdGVfZmhfYnNzaWRbTUFDX0FERFJfTEVOXTsKKwl1OCBtYXBfcmVtb3RlX2JoX21hY1tNQUNfQUREUl9MRU5dOworCXVuc2lnbmVkIGNoYXIgc3NpZF9sZW47CisJdW5zaWduZWQgY2hhciBzc2lkW01BWF9MRU5fT0ZfU1NJRCArIDFdOworfTsKKwordHlwZWRlZiB1bmlvbiBHTlVfUEFDS0VEIF93YXBwX2V2ZW50X2RhdGEgeworCXdhcHBfZGV2X2luZm8gZGV2X2luZm87CisJd2Rldl9odF9jYXAgaHRfY2FwOworCXdkZXZfdmh0X2NhcCB2aHRfY2FwOworCXdkZXZfbWlzY19jYXAgbWlzY19jYXA7CisJd2FwcF9jbGllbnRfaW5mbyBjbGlfaW5mbzsKKwl3ZGV2X2Nobl9pbmZvIGNobl9saXN0OworCXdkZXZfb3BfY2xhc3NfaW5mbyBvcF9jbGFzczsKKwl3ZGV2X2Jzc19pbmZvIGJzc19pbmZvOworCXdkZXZfYXBfbWV0cmljIGFwX21ldHJpY3M7CisJd2Rldl9hcF9jb25maWcgYXBfY29uZjsKKwl3ZGV2X3R4X3Bvd2VyIHR4X3B3cjsKKwl3ZGV2X3N0ZWVyX3N0YSBzdHJfc3RhOworCXdhcHBfcHJvYmVfaW5mbyBwcm9iZV9pbmZvOworCXdhcHBfYmNuX3JwdF9pbmZvIGJjbl9ycHRfaW5mbzsKKwl3YXBwX2Jzc2xvYWRfaW5mbyBic3Nsb2FkX2luZm87CisJd2FwcF9ic3Nsb2FkX2Nyb3NzaW5nX2luZm8gYnNzbG9hZF9jcm9zc2luZ19pbmZvOworCXdhcHBfbW50X2luZm8gbW50X2luZm87CisJd2FwcF9ic3Nfc3RhdGVfaW5mbyBic3Nfc3RhdGVfaW5mbzsKKwl3YXBwX2NoX2NoYW5nZV9pbmZvIGNoX2NoYW5nZV9pbmZvOworCXdhcHBfdHhwb3dlcl9jaGFuZ2VfaW5mbyB0eHB3cl9jaGFuZ2VfaW5mbzsKKwl3YXBwX2FwY2xpX2Fzc29jaWF0aW9uX2luZm8gYXBjbGlfYXNzb2NpYXRpb25faW5mbzsKKwl3YXBwX2Joc3RhX2luZm8gYmhzdGFfaW5mbzsKKwl3YXBwX2NzYV9pbmZvIGNzYV9pbmZvOworCXdhcHBfc3RhX2NubmN0X3Jlal9pbmZvIHN0YV9jbm5jdF9yZWpfaW5mbzsKKwl1OCBjaF91dGlsOworCXN0cnVjdCB3YXBwX3NjYW5faW5mbyBzY2FuX2luZm87CisJc3RydWN0IHdhcHBfd3NjX3NjYW5faW5mbyB3c2Nfc2Nhbl9pbmZvOworCXUzMiBhNF9taXNzaW5nX2VudHJ5X2lwOworCXN0cnVjdCByYWRhcl9ub3RpZl9zIHJhZGFyX25vdGlmOworI2lmZGVmIFdQU19VTkNPTkZJR19GRUFUVVJFX1NVUFBPUlQKKwlzdHJ1Y3Qgd2FwcF93cHNfY29uZmlnX2luZm8gd3BzX2NvbmZfaW5mbzsKKyNlbmRpZgorICAgICAgICB3YXBwX2NhY19pbmZvIGNhY19pbmZvOworI2lmZGVmIE1BUF9SMgorCXdkZXZfZXh0ZW5kZWRfYXBfbWV0cmljIGV4dF9hcF9tZXRyaWNzOworCXdkZXZfcmFkaW9fbWV0cmljIHJhZGlvX21ldHJpY3M7CisjZW5kaWYKKyNpZmRlZiBEUFBfU1VQUE9SVAorCXUzMiB3YXBwX2RwcF9mcmFtZV9pZF9ubzsKKwlzdHJ1Y3Qgd2FwcF9kcHBfYWN0aW9uX2ZyYW1lIGZyYW1lOworCXN0cnVjdCB3YXBwX2RwcF9mcm1fdHhfc3RhdHVzIHR4X3N0YXR1czsKKyNpZmRlZiBEUFBfUjJfU1VQUE9SVAorCXN0cnVjdCBjY2VfdmVuZG9yX2llX3Jlc3VsdCBjY2VfaWVfcmVzdWx0OworI2VuZGlmCisjZW5kaWYgLypEUFBfU1VQUE9SVCovCisJdW5zaWduZWQgY2hhciBjYWNfZW5hYmxlOworI2lmZGVmIFdJRklfTURfQ09FWF9TVVBQT1JUCisJc3RydWN0IHVuc2FmZV9jaGFubmVsX25vdGlmX3MgdW5zYWZlX2NoX25vdGlmOworCXN0cnVjdCBiYW5kX3N0YXR1c19jaGFuZ2UgYmFuZF9zdGF0dXM7CisjZW5kaWYKKyNpZmRlZiBNQVBfUjMKKwlzdHJ1Y3Qgd2FwcF9zdGFfaW5mbyBzdGFfaW5mbzsKKyAgICAgICAgc3RydWN0IHdhcHBfdXJpX2luZm8gdXJpX2luZm87CisjZW5kaWYgLyogTUFQX1IzICovCisjaWZkZWYgUU9TX1IxCisJdTggKnFvc19mcm07CisjZW5kaWYKKwl1OAlpZm5hbWVbSUZOQU1TSVpdOworI2lmZGVmIE1BUF9SMworCXN0cnVjdCB3YXBwX21lc2hfc3JfaW5mbyBtZXNoX3NyX2luZm87CisjZW5kaWYgLyogTUFQX1IzICovCit9IHdhcHBfZXZlbnRfZGF0YTsKK3N0cnVjdCBHTlVfUEFDS0VEIF93YXBwX2V2ZW50Ml9kYXRhIHsKKwl3YXBwX2NsaWVudF9pbmZvIGNsaV9pbmZvOworfTsKK3R5cGVkZWYgc3RydWN0IEdOVV9QQUNLRUQgX3dhcHBfcmVxX2RhdGEgeworCXUzMglpZmluZGV4OworCXU4IG1hY19hZGRyW01BQ19BRERSX0xFTl07CisJdTMyIHZhbHVlOworCWJzc2xvYWRfdGhyZXNob2xkIGJzc2xvYWRfdGhyZDsKKwl3ZGV2X3N0ZWVyX3BvbGljeSBzdHJfcG9saWN5OworCXdkZXZfYXBfY29uZmlnIGFwX2NvbmY7CisJV1NDX0NSRURFTlRJQUwgYmhfd3NjX3Byb2ZpbGU7CisJc3RydWN0IHNjYW5fQkhfc3NpZHMgc2Nhbl9iaF9zc2lkczsKKyNpZmRlZiBNQVBfUjMKKwlzdHJ1Y3Qgd2FwcF9zcmdfYml0bWFwIGJtX2luZm87CisJdTggYmFuZF9pbmRleDsKKwlzdHJ1Y3Qgd2FwcF9tZXNoX3NyX3RvcG9sb2d5IHRvcG9sb2d5X3VwZGF0ZTsKKyNlbmRpZiAvKiBNQVBfUjMgKi8KK30gd2FwcF9yZXFfZGF0YTsKKworc3RydWN0IEdOVV9QQUNLRUQgd2FwcF9yZXEgeworCXU4IHJlcV9pZDsKKwl1OCBkYXRhX2xlbjsKKwl3YXBwX3JlcV9kYXRhIGRhdGE7Cit9OworCitzdHJ1Y3QgR05VX1BBQ0tFRCB3YXBwX2V2ZW50IHsKKwl1OCBsZW47CisJdTggZXZlbnRfaWQ7CisJdTMyIGlmaW5kZXg7CisJd2FwcF9ldmVudF9kYXRhIGRhdGE7Cit9Oworc3RydWN0IEdOVV9QQUNLRUQgd2FwcF9ldmVudDIgeworCXU4IGxlbjsKKwl1OCBldmVudF9pZDsKKwl1MzIgaWZpbmRleDsKKwlzdHJ1Y3QgX3dhcHBfZXZlbnQyX2RhdGEgZGF0YTsKK307Cit0eXBlZGVmIHN0cnVjdCBHTlVfUEFDS0VEIF90YnR0X2luZm9fc2V0IHsKKwl1OCBOckFQVGJ0dE9mZnNldDsKKwl1MzIgU2hvcnRCc3NpZDsKK30gdGJ0dF9pbmZvX3NldDsKKwordHlwZWRlZiBzdHJ1Y3QgR05VX1BBQ0tFRCBfd2FwcF9ucl9pbmZvCit7CisJdTggCUJzc2lkW01BQ19BRERSX0xFTl07CisJdTMyIEJzc2lkSW5mbzsKKwl1OCAgUmVndWxhdG9yeUNsYXNzOworCXU4ICBDaE51bTsKKwl1OCAgUGh5VHlwZTsKKwl1OCAgQ2FuZGlkYXRlUHJlZlN1YklEOworCXU4ICBDYW5kaWRhdGVQcmVmU3ViTGVuOworCXU4ICBDYW5kaWRhdGVQcmVmOworCS8qIGV4dHJhIHNlYyBpbmZvICovCisJdTMyIGFrbTsKKwl1MzIgY2lwaGVyOworCXU4ICBUYnR0SW5mb1NldE51bTsKKwl0YnR0X2luZm9fc2V0IFRidHRJbmZvU2V0OworCXU4ICBSc3NpOworfSB3YXBwX25yX2luZm87CisKKy8qIGZvciBOUiBJRSAsIGFwcGVuZCBCc3NpZCB+IENhbmRpZGF0ZVByZWYgKi8KKyNkZWZpbmUgTkVJR0hCT1JfUkVQT1JUX0lFX1NJWkUgCXNpemVvZih3YXBwX25yX2luZm8pIC0gMTUKKworCit0eXBlZGVmIHN0cnVjdCBkYWVtb25fbnJfbGlzdCB7CisJdTggCUN1cnJMaXN0TnVtOworCXdhcHBfbnJfaW5mbyBOUkluZm9bREFFTU9OX05FSUdIQk9SX1JFUE9SVF9NQVhfTlVNXTsKK30gREFFTU9OX05SX0xJU1QsICpQX0RBRU1PTl9OUl9MSVNUOworCit0eXBlZGVmIHN0cnVjdCBHTlVfUEFDS0VEIGRhZW1vbl9uZWlnaGJvcl9yZXBvcnRfbGlzdCB7CisJdTgJTmV3bGlzdDsKKwl1OCAJVG90YWxOdW07CisJdTggCUN1cnJOdW07CisJdTggCXJlc2VydmVkOworCXdhcHBfbnJfaW5mbyBFdnROUkluZm9bUEVSX0VWRU5UX0xJU1RfTUFYX05VTV07Cit9IERBRU1PTl9FVkVOVF9OUl9MSVNULCAqUF9EQUVNT05fRVZFTlRfTlJfTElTVDsKKworCit0eXBlZGVmIHN0cnVjdCBHTlVfUEFDS0VEIG5laWdoYm9yX3JlcG9ydF9tc2cgeworCURBRU1PTl9FVkVOVF9OUl9MSVNUIGV2dF9ucl9saXN0OworfSBEQUVNT05fTlJfTVNHLCAqUF9EQUVNT05fTlJfTVNHOworCisKKy8qIGZvciBjb3ZlcnRpbmcgd2lyZWxlc3MgbW9kZSB0byBzdHJpbmcgICovCitlbnVtIFdJRklfTU9ERSB7CisJV01PREVfSU5WQUxJRCA9IDAsCisJV01PREVfQSA9IDEgPDwgMCwKKwlXTU9ERV9CID0gMSA8PCAxLAorCVdNT0RFX0cgPSAxIDw8IDIsCisJV01PREVfR04gPSAxIDw8IDMsCisJV01PREVfQU4gPSAxIDw8IDQsCisJV01PREVfQUMgPSAxIDw8IDUsCisJV01PREVfQVhfMjRHID0gMSA8PCA2LAorCVdNT0RFX0FYXzVHID0gMSA8PCA3LAorCVdNT0RFX0FYXzZHID0gMSA8PCA4LAorCVdNT0RFX0NPTVAgPSA5LCAvKiB0b3RhbCB0eXBlcyBvZiBzdXBwb3J0ZWQgd2lyZWxlc3MgbW9kZSwgYWRkIHRoaXMgdmFsdWUgb25jZSB5b3cgYWRkIG5ldyB0eXBlICovCit9OwordHlwZWRlZiB1bmlvbiBHTlVfUEFDS0VEIF9SUk1fQlNTSURfSU5GTworeworCXN0cnVjdCBHTlVfUEFDS0VECisJeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwkJdTMyIFJlc2VydmVkOjE4OworCQl1MzIgRlRNOjE7CisJCXUzMiBWSFQ6MTsKKwkJdTMyIEhUOjE7CisJCXUzMiBNb2JpbGl0eURvbWFpbjoxOworCQl1MzIgSW1tZWRpYXRlQkE6MTsKKwkJdTMyIERlbGF5QmxvY2tBY2s6MTsKKwkJdTMyIFJSTToxOworCQl1MzIgQVBTRDoxOworCQl1MzIgUW9zOjE7CisJCXUzMiBTcGVjdHJ1bU1uZzoxOworCQl1MzIgS2V5U2NvcGU6MTsKKwkJdTMyIFNlY3VyaXR5OjE7CisJCXUzMiBBUFJlYWNoQWJsZToyOworI2Vsc2UKKwkJdTMyIEFQUmVhY2hBYmxlOjI7CisJCXUzMiBTZWN1cml0eToxOworCQl1MzIgS2V5U2NvcGU6MTsKKwkJdTMyIFNwZWN0cnVtTW5nOjE7CisJCXUzMiBRb3M6MTsKKwkJdTMyIEFQU0Q6MTsKKwkJdTMyIFJSTToxOworCQl1MzIgRGVsYXlCbG9ja0FjazoxOworCQl1MzIgSW1tZWRpYXRlQkE6MTsKKwkJdTMyIE1vYmlsaXR5RG9tYWluOjE7CisJCXUzMiBIVDoxOworCQl1MzIgVkhUOjE7CisJCXUzMiBGVE06MTsKKwkJdTMyIFJlc2VydmVkOjE4OworI2VuZGlmCisJfSBmaWVsZDsKKwl1MzIgd29yZDsKK30gUlJNX0JTU0lEX0lORk8sICpQUlJNX0JTU0lEX0lORk87CisjZW5kaWYgLyogX19XQVBQX1RZUEVTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9uZXQvbmF0L2ZvZV9ob29rL01ha2VmaWxlIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9uZXQvbmF0L2ZvZV9ob29rL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIwZDQxZTUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L25ldC9uYXQvZm9lX2hvb2svTWFrZWZpbGUKQEAgLTAsMCArMSw1IEBACitvYmoteQkJKz0gZm9lX2hvb2subworCitmb2VfaG9vay1vYmpzCSs9IGhvb2tfYmFzZS5vCitmb2VfaG9vay1vYmpzCSs9IGhvb2tfZXh0Lm8KKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9uZXQvbmF0L2ZvZV9ob29rL2hvb2tfYmFzZS5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9uZXQvbmF0L2ZvZV9ob29rL2hvb2tfYmFzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJlNDExNzAKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L25ldC9uYXQvZm9lX2hvb2svaG9va19iYXNlLmMKQEAgLTAsMCArMSwxOSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTkgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBIYXJyeSBIdWFuZyA8aGFycnkuaHVhbmdAbWVkaWF0ZWsuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxuZXQvcmFfbmF0Lmg+CisjZGVmaW5lIFBVUlBPU0UgIkZBU1RfTkFUX1NVUFBPUlQiCisKK2ludCAoKnJhX3N3X25hdF9ob29rX3J4KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSA9IE5VTEw7CitFWFBPUlRfU1lNQk9MKHJhX3N3X25hdF9ob29rX3J4KTsKKworaW50ICgqcmFfc3dfbmF0X2hvb2tfdHgpKHN0cnVjdCBza19idWZmICpza2IsIGludCBnbWFjX25vKSA9IE5VTEw7CitFWFBPUlRfU1lNQk9MKHJhX3N3X25hdF9ob29rX3R4KTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvbmV0L25hdC9mb2VfaG9vay9ob29rX2V4dC5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9uZXQvbmF0L2ZvZV9ob29rL2hvb2tfZXh0LmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzJhZmVjNAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvbmV0L25hdC9mb2VfaG9vay9ob29rX2V4dC5jCkBAIC0wLDAgKzEsMTI0IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxOSBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IEhhcnJ5IEh1YW5nIDxoYXJyeS5odWFuZ0BtZWRpYXRlay5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPG5ldC9yYV9uYXQuaD4KKworc3RydWN0IG5ldF9kZXZpY2UJKmRzdF9wb3J0W01BWF9JRl9OVU1dOworRVhQT1JUX1NZTUJPTChkc3RfcG9ydCk7Cit1OCBkc3RfcG9ydF90eXBlW01BWF9JRl9OVU1dOworRVhQT1JUX1NZTUJPTChkc3RfcG9ydF90eXBlKTsKKworc3RydWN0IGZvZV9lbnRyeSAqcHBlX3ZpcnRfZm9lX2Jhc2VfdG1wOworRVhQT1JUX1NZTUJPTChwcGVfdmlydF9mb2VfYmFzZV90bXApOworc3RydWN0IGZvZV9lbnRyeSAqcHBlMV92aXJ0X2ZvZV9iYXNlX3RtcDsKK0VYUE9SVF9TWU1CT0wocHBlMV92aXJ0X2ZvZV9iYXNlX3RtcCk7CisKK2ludCAoKnBwZV9ob29rX3J4X3dpZmkpKHN0cnVjdCBza19idWZmICpza2IpID0gTlVMTDsKK0VYUE9SVF9TWU1CT0wocHBlX2hvb2tfcnhfd2lmaSk7CitpbnQgKCpwcGVfaG9va190eF93aWZpKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZ21hY19ubykgPSBOVUxMOworRVhQT1JUX1NZTUJPTChwcGVfaG9va190eF93aWZpKTsKKworaW50ICgqcHBlX2hvb2tfcnhfbW9kZW0pKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBjcHVfcmVhc29uLCB1MzIgZm9lX2VudHJ5X251bSkgPSBOVUxMOworRVhQT1JUX1NZTUJPTChwcGVfaG9va19yeF9tb2RlbSk7CitpbnQgKCpwcGVfaG9va190eF9tb2RlbSkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG5ldF90eXBlLCB1MzIgY2hhbm5lbF9pZCkgPSBOVUxMOworRVhQT1JUX1NZTUJPTChwcGVfaG9va190eF9tb2RlbSk7CisKK2ludCAoKnBwZV9ob29rX3J4X2V0aCkoc3RydWN0IHNrX2J1ZmYgKnNrYikgPSBOVUxMOworRVhQT1JUX1NZTUJPTChwcGVfaG9va19yeF9ldGgpOworaW50ICgqcHBlX2hvb2tfdHhfZXRoKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZ21hY19ubykgPSBOVUxMOworRVhQT1JUX1NZTUJPTChwcGVfaG9va190eF9ldGgpOworCitpbnQgKCpwcGVfaG9va19yeF9leHQpKHN0cnVjdCBza19idWZmICpza2IpID0gTlVMTDsKK0VYUE9SVF9TWU1CT0wocHBlX2hvb2tfcnhfZXh0KTsKK2ludCAoKnBwZV9ob29rX3R4X2V4dCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGdtYWNfbm8pID0gTlVMTDsKK0VYUE9SVF9TWU1CT0wocHBlX2hvb2tfdHhfZXh0KTsKKwordm9pZCAoKnBwZV9kZXZfcmVnaXN0ZXJfaG9vaykoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgPSBOVUxMOworRVhQT1JUX1NZTUJPTChwcGVfZGV2X3JlZ2lzdGVyX2hvb2spOwordm9pZCAoKnBwZV9kZXZfdW5yZWdpc3Rlcl9ob29rKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSA9IE5VTEw7CitFWFBPUlRfU1lNQk9MKHBwZV9kZXZfdW5yZWdpc3Rlcl9ob29rKTsKKwordm9pZCAgaHduYXRfbWFnaWNfdGFnX3NldF96ZXJvKHN0cnVjdCBza19idWZmICpza2IpCit7CisJaWYgKChGT0VfTUFHSUNfVEFHX0hFQUQoc2tiKSA9PSBGT0VfTUFHSUNfUENJKSB8fAorCSAgICAoRk9FX01BR0lDX1RBR19IRUFEKHNrYikgPT0gRk9FX01BR0lDX1dMQU4pIHx8CisJICAgIChGT0VfTUFHSUNfVEFHX0hFQUQoc2tiKSA9PSBGT0VfTUFHSUNfR0UpKSB7CisJCWlmIChJU19TUEFDRV9BVkFJTEFCTEVfSEVBRChza2IpKQorCQkJRk9FX01BR0lDX1RBR19IRUFEKHNrYikgPSAwOworCX0KKwlpZiAoKEZPRV9NQUdJQ19UQUdfVEFJTChza2IpID09IEZPRV9NQUdJQ19QQ0kpIHx8CisJICAgIChGT0VfTUFHSUNfVEFHX1RBSUwoc2tiKSA9PSBGT0VfTUFHSUNfV0xBTikgfHwKKwkgICAgKEZPRV9NQUdJQ19UQUdfVEFJTChza2IpID09IEZPRV9NQUdJQ19HRSkpIHsKKwkJaWYgKElTX1NQQUNFX0FWQUlMQUJMRV9UQUlMKHNrYikpCisJCQlGT0VfTUFHSUNfVEFHX1RBSUwoc2tiKSA9IDA7CisJfQorfQorRVhQT1JUX1NZTUJPTChod25hdF9tYWdpY190YWdfc2V0X3plcm8pOworCit2b2lkIGh3bmF0X2NoZWNrX21hZ2ljX3RhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWlmIChJU19TUEFDRV9BVkFJTEFCTEVfSEVBRChza2IpKSB7CisJCUZPRV9NQUdJQ19UQUdfSEVBRChza2IpID0gMDsKKwkJRk9FX0FJX0hFQUQoc2tiKSA9IFVOX0hJVDsKKwl9CisJaWYgKElTX1NQQUNFX0FWQUlMQUJMRV9UQUlMKHNrYikpIHsKKwkJRk9FX01BR0lDX1RBR19UQUlMKHNrYikgPSAwOworCQlGT0VfQUlfVEFJTChza2IpID0gVU5fSElUOworCX0KK30KK0VYUE9SVF9TWU1CT0woaHduYXRfY2hlY2tfbWFnaWNfdGFnKTsKKwordm9pZCBod25hdF9zZXRfaGVhZHJvb21femVybyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWlmIChza2ItPmNsb25lZCAhPSAxKSB7CisJCWlmIChJU19NQUdJQ19UQUdfUFJPVEVDVF9WQUxJRF9IRUFEKHNrYikgfHwKKwkJICAgIChGT0VfTUFHSUNfVEFHX0hFQUQoc2tiKSA9PSBGT0VfTUFHSUNfUFBFKSkgeworCQkJaWYgKElTX1NQQUNFX0FWQUlMQUJMRV9IRUFEKHNrYikpCisJCQkJbWVtc2V0KEZPRV9JTkZPX1NUQVJUX0FERFJfSEVBRChza2IpLCAwLAorCQkJCSAgICAgICBGT0VfSU5GT19MRU4pOworCQl9CisJfQorfQorRVhQT1JUX1NZTUJPTChod25hdF9zZXRfaGVhZHJvb21femVybyk7CisKK3ZvaWQgaHduYXRfc2V0X3RhaWxyb29tX3plcm8oc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpZiAoc2tiLT5jbG9uZWQgIT0gMSkgeworCQlpZiAoSVNfTUFHSUNfVEFHX1BST1RFQ1RfVkFMSURfVEFJTChza2IpIHx8CisJCSAgICAoRk9FX01BR0lDX1RBR19UQUlMKHNrYikgPT0gRk9FX01BR0lDX1BQRSkpIHsKKwkJCWlmIChJU19TUEFDRV9BVkFJTEFCTEVfVEFJTChza2IpKQorCQkJCW1lbXNldChGT0VfSU5GT19TVEFSVF9BRERSX1RBSUwoc2tiKSwgMCwKKwkJCQkgICAgICAgRk9FX0lORk9fTEVOKTsKKwkJfQorCX0KK30KK0VYUE9SVF9TWU1CT0woaHduYXRfc2V0X3RhaWxyb29tX3plcm8pOworCit2b2lkIGh3bmF0X2NvcHlfaGVhZHJvb20odTggKmRhdGEsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJbWVtY3B5KGRhdGEsIHNrYi0+aGVhZCwgRk9FX0lORk9fTEVOKTsKK30KK0VYUE9SVF9TWU1CT0woaHduYXRfY29weV9oZWFkcm9vbSk7CisKK3ZvaWQgaHduYXRfY29weV90YWlscm9vbSh1OCAqZGF0YSwgaW50IHNpemUsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJbWVtY3B5KChkYXRhICsgc2l6ZSAtIEZPRV9JTkZPX0xFTiksCisJICAgICAgIChza2JfZW5kX3BvaW50ZXIoc2tiKSAtIEZPRV9JTkZPX0xFTiksCisJICAgICAgIEZPRV9JTkZPX0xFTik7Cit9CitFWFBPUlRfU1lNQk9MKGh3bmF0X2NvcHlfdGFpbHJvb20pOworCit2b2lkIGh3bmF0X3NldHVwX2RtYV9vcHMoc3RydWN0IGRldmljZSAqZGV2LCBib29sIGNvaGVyZW50KQoreworCWFyY2hfc2V0dXBfZG1hX29wcyhkZXYsIDAsIDAsIE5VTEwsIGNvaGVyZW50KTsKK30KK0VYUE9SVF9TWU1CT0woaHduYXRfc2V0dXBfZG1hX29wcyk7CisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL2NvZGVjcy9zaTMyMTh4LXNwaS5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgtc3BpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcwOGRlZgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL2NvZGVjcy9zaTMyMTh4LXNwaS5jCkBAIC0wLDAgKzEsODYgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorCisvKiBhbHNhIHNvdW5kIGhlYWRlciAqLworI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKworI2luY2x1ZGUgInNpMzIxOHgvc2kzMjE4eC5oIgorCitlbnVtIHNpMzIxOHhfc3BpX3R5cGUgeworCU1US19FWFRfUFJPU0xJQyA9IDAsCisJTVRLX0VYVF9UWVBFX05VTQorfTsKKworc3RydWN0IG10a19leHRfc3BpX2N0cmwgeworCWludCAoKnNwaV9wcm9iZSkoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IHNwaV9kcml2ZXIgKnNwaV9kcnYpOworCWludCAoKnNwaV9yZW1vdmUpKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpOworCWNvbnN0IGNoYXIgKnN0cmVhbV9uYW1lOworCWNvbnN0IGNoYXIgKmNvZGVjX2RhaV9uYW1lOworCWNvbnN0IGNoYXIgKmNvZGVjX25hbWU7Cit9OworCitzdGF0aWMgc3RydWN0IG10a19leHRfc3BpX2N0cmwgbXRrX2V4dF9saXN0W01US19FWFRfVFlQRV9OVU1dID0geworCVtNVEtfRVhUX1BST1NMSUNdID0geworCQkuc3BpX3Byb2JlID0gc2kzMjE4eF9zcGlfcHJvYmUsCisJCS5zcGlfcmVtb3ZlID0gc2kzMjE4eF9zcGlfcmVtb3ZlLAorCX0sCit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IG10a19leHRfdHlwZTsKKworc3RhdGljIGludCBtdGtfZXh0X3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKTsKK3N0YXRpYyBpbnQgbXRrX2V4dF9zcGlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJZGV2X2luZm8oJnNwaS0+ZGV2LCAiJXMoKVxuIiwgX19mdW5jX18pOworCisJaWYgKG10a19leHRfbGlzdFttdGtfZXh0X3R5cGVdLnNwaV9yZW1vdmUpCisJCW10a19leHRfbGlzdFttdGtfZXh0X3R5cGVdLnNwaV9yZW1vdmUoc3BpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfZXh0X21hdGNoX3RhYmxlW10gPSB7CisJey5jb21wYXRpYmxlID0gInNpbGFicyxwcm9zbGljX3NwaSIsfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtdGtfZXh0X21hdGNoX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIG10a19leHRfc3BpX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJwcm9zbGljX3NwaSIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIobXRrX2V4dF9tYXRjaF90YWJsZSksCisJfSwKKwkucHJvYmUgPSBtdGtfZXh0X3NwaV9wcm9iZSwKKwkucmVtb3ZlID0gbXRrX2V4dF9zcGlfcmVtb3ZlLAorfTsKKworbW9kdWxlX3NwaV9kcml2ZXIobXRrX2V4dF9zcGlfZHJpdmVyKTsKKworc3RhdGljIGludCBtdGtfZXh0X3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCWludCBpLCByZXQgPSAwOworCisJZGV2X2Vycigmc3BpLT5kZXYsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwltdGtfZXh0X3R5cGUgPSBNVEtfRVhUX1BST1NMSUM7CisJZm9yIChpID0gMDsgaSA8IE1US19FWFRfVFlQRV9OVU07IGkrKykgeworCQlpZiAoIW10a19leHRfbGlzdFtpXS5zcGlfcHJvYmUpCisJCQljb250aW51ZTsKKworCQlyZXQgPSBtdGtfZXh0X2xpc3RbaV0uc3BpX3Byb2JlKHNwaSwgJm10a19leHRfc3BpX2RyaXZlcik7CisJCWlmIChyZXQpCisJCQljb250aW51ZTsKKworCQltdGtfZXh0X3R5cGUgPSBpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvTWFrZWZpbGUgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDdiYjYxCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvTWFrZWZpbGUKQEAgLTAsMCArMSwxNyBAQAorIyBSZWxlYXNlIFZlcnNpb24gMS4wLjQKKyMgQWRkIGNvbmZpZyBkZWZpbmUgIkNPTkZJR19TTkRfU09DX1BST1NMSUMiIHRvICJ5IgorIyBBZGQgdG8gTWFrZWZpbGUgb2YgcHJlbnRlZCBmb2xkZXI6IG9iai0kKENPTkZJR19TTkRfU09DX1BST1NMSUMpICs9IHByb3NsaWMvCisKKyMgUGxhdGZvcm0KK3N1YmRpci1jY2ZsYWdzLXkgKz0gLURTSTMyMThYCitzdWJkaXItY2NmbGFncy15ICs9IC1EUFJPU0xJQ19MSU5VWF9LRVJORUwKK3N1YmRpci1jY2ZsYWdzLXkgKz0gLUlpbmMKK3N1YmRpci1jY2ZsYWdzLXkgKz0gLUljb25maWdfaW5jCisKKworIyBCYXNpYworc25kLXNvYy1zaTMyMTh4LW9ianMgOj0gcHJvc2xpY19zeXNfbWFpbi5vIHByb3NsaWNfc3lzX3NwaS5vIHByb3NsaWNfc3lzX3RpbWVyLm8gc2kzMjE4eC5vIHByb3NsaWNfc3BpX2FwaS5vIHByb3NsaWNfdGltZXJfaW50Zl9saW51eC5vCisKK29iai0kKENPTkZJR19TTkRfU09DX1NJMzIxOFgpICs9IHNyYy9wcm9zbGljLm8gc3JjL3Byb3NsaWNfdHN0aW4ubyBzcmMvc2lfdm9pY2UubyBzcmMvc2lfdm9pY2VfdmVyc2lvbi5vIHNyYy9zaTMyMTh4X2ludGYubyBzcmMvdmRhYS5vIHNyYy92ZGFhX2NvbnN0YW50cy5vIHNyYy9zaTMyMTh4X0xDQ0JfY29uc3RhbnRzLm8KK29iai0kKENPTkZJR19TTkRfU09DX1NJMzIxOFgpICs9IHBhdGNoX2ZpbGVzL3NpMzIxOHhfcGF0Y2hfQV8yMDE3TUFZMjUubworb2JqLSQoQ09ORklHX1NORF9TT0NfU0kzMjE4WCkgKz0gc25kLXNvYy1zaTMyMTh4Lm8KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL2NvZGVjcy9zaTMyMTh4L2NvbmZpZ19pbmMvcHJvc2xpY19hcGlfY29uZmlnLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9jb25maWdfaW5jL3Byb3NsaWNfYXBpX2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NWEyZWYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9jb25maWdfaW5jL3Byb3NsaWNfYXBpX2NvbmZpZy5oCkBAIC0wLDAgKzEsMjEwIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KKy8qDQorICogQXV0aG9yKHMpOiANCisgKiBsYWoNCisgKg0KKyAqIERpc3RyaWJ1dGVkIGJ5OiANCisgKiBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jDQorICoNCisgKiBUaGlzIGZpbGUgY29udGFpbnMgcHJvcHJpZXRhcnkgaW5mb3JtYXRpb24uCSANCisgKiBObyBkaXNzZW1pbmF0aW9uIGFsbG93ZWQgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbQ0KKyAqIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuDQorICoNCisgKg0KKyAqLw0KKyNpZm5kZWYgUFJPU0xJQ19BUElfQ0ZHDQorI2RlZmluZSBQUk9TTElDX0FQSV9DRkcNCisNCisvKiogQGRlZmdyb3VwIFBST1NMSUNfQ0ZHIFByb1NMSUMgQ29uZmlndXJhdGlvbiBPcHRpb25zDQorICogQHsNCisgKi8NCisNCisvKiogQGRlZmdyb3VwIFBST1NMSUNfRFJJVkVSX1NFTCBQcm9TTElDIERyaXZlciBTZWxlY3Rpb24NCisqIERlZmluZSBkZXZpY2UgZHJpdmVyIHRvIGJlIGNvbXBpbGVkLiANCisqIEB7DQorKi8NCisjaWZkZWYgUFJPU0xJQ19ET1hZR0VODQorI2RlZmluZSBTSTMyMTdYIC8qKjwgRGVmaW5lIHRvIHN1cHBvcnQgU2kzMjE3eCBjaGlwc2V0IGZhbWlseSBpbiB0aGUgYnVpbGQgKi8NCisjdW5kZWYgU0kzMjE3WCANCisjZGVmaW5lIFNJMzIxN1hfUkVWQ19PTkxZIC8qKjwgRGVmaW5lIHRvIE9OTFkgaGF2ZSBTaTMyMTd4IFJldiBDIHN1cHBvcnQgKGRyb3AgUmV2IEIgc3VwcG9ydCkgKi8NCisjdW5kZWYgU0kzMjE3WF9SRVZDX09OTFkgDQorI2RlZmluZSBTSTMyMTdYX1JFVkJfT05MWSAvKio8IERlZmluZSB0byBPTkxZIGhhdmUgU2kzMjE3eCBSZXYgQiBzdXBwb3J0IChkcm9wIFJldiBDIHN1cHBvcnQpICovDQorI3VuZGVmIFNJMzIxN1hfUkVWQl9PTkxZIA0KKyNkZWZpbmUgU0kzMjE4WCAvKio8IERlZmluZSB0byBzdXBwb3J0IFNpMzIxOHggY2hpcHNldCBmYW1pbHkgaW4gdGhlIGJ1aWxkICovDQorI3VuZGVmIFNJMzIxOFggDQorI2RlZmluZSBTSTMyMTlYIC8qKjwgRGVmaW5lIHRvIHN1cHBvcnQgU2kzMjE5eCBjaGlwc2V0IGZhbWlseSBpbiB0aGUgYnVpbGQgKi8NCisjdW5kZWYgU0kzMjE5WCANCisjZGVmaW5lIFNJMzIyNlggLyoqPCBEZWZpbmUgdG8gc3VwcG9ydCBTaTMyMjZ4IGNoaXBzZXQgZmFtaWx5IGluIHRoZSBidWlsZCAqLw0KKyN1bmRlZiBTSTMyMjZYIA0KKyNkZWZpbmUgU0kzMjI4WCAvKio8IERlZmluZSB0byBzdXBwb3J0IFNpMzIyOHggY2hpcHNldCBmYW1pbHkgaW4gdGhlIGJ1aWxkICovDQorI3VuZGVmIFNJMzIyOFggDQorI2Vycm9yIERPIE5PVCBCVUlMRCBXSVRIIFBST1NMSUNfRE9YWUdFTiBFTkFCTEVEDQorI2VuZGlmDQorDQorLyoqIEB9IFBST1NMSUNfRFJJVkVSX1NFTCovDQorDQorLyoqIEBkZWZncm91cCBDT0RFX09QVFMgQ29kZSBmZWF0dXJlIG9wdGlvbnMgDQorICogU2VsZWN0IHdoaWNoIG9wdGlvbnMgTk9UIHRvIGJ1aWxkIC0ganVzdCB1bmNvbW1lbnQgb3V0IHRoZSB1bmRlZiB0byBkaXNhYmxlIGZlYXR1cmUuDQorICogQHsNCisgKi8NCisjZGVmaW5lIERJU0FCTEVfVkVSSUZZX1BBVENIICAgICAgLyoqPCBEaXNhYmxlIHBhdGNoIGxvYWQgdmVyaWZpY2F0aW9uICovDQorI3VuZGVmIERJU0FCTEVfVkVSSUZZX1BBVENIIA0KKyNkZWZpbmUgRElTQUJMRV9GU0tfU0VUVVAgICAgICAgICAvKio8IERpc2FibGUgdGhlIEZTSyBzZXR1cCAmIGFzc29jaWF0ZWQgZnVuY3Rpb25zICovDQorI3VuZGVmIERJU0FCTEVfRlNLX1NFVFVQIA0KKyNkZWZpbmUgRElTQUJMRV9UT05FX1NFVFVQICAgICAgICAvKio8IERpc2FibGUgVG9uZSBzZXR1cCBBUEkgKi8NCisjdW5kZWYgRElTQUJMRV9UT05FX1NFVFVQIA0KKyNkZWZpbmUgRElTQUJMRV9SSU5HX1NFVFVQICAgICAgICAvKio8IERpc2FibGUgUmluZyBzZXR1cCBBUEkgKi8NCisjdW5kZWYgRElTQUJMRV9SSU5HX1NFVFVQICANCisjZGVmaW5lIERJU0FCTEVfRENGRUVEX1NFVFVQICAgICAgLyoqPCBEaXNhYmxlIERDIEZFRUQgc2V0dXAgQVBJICovDQorI3VuZGVmIERJU0FCTEVfRENGRUVEX1NFVFVQIA0KKyNkZWZpbmUgRElTQUJMRV9HUElPX1NFVFVQICAgICAgICAvKio8IERpc2FibGUgR1BJTyBzZXR1cCBBUEkgKi8NCisjdW5kZWYgRElTQUJMRV9HUElPX1NFVFVQIA0KKyNkZWZpbmUgRElTQUJMRV9QQ01fU0VUVVAgICAgICAgICAvKio8IERpc2FibGUgUENNIHNldHVwIEFQSSAqLw0KKyN1bmRlZiBESVNBQkxFX1BDTV9TRVRVUCANCisjZGVmaW5lIEVOQUJMRV9ERUJVRyAgICAgICAgICAgICAgLyoqPCBFbmFibGUgZGVidWcgbWVzc2FnZXMgLSBmdW5jdGlvbiBlbnRyeSwgZXRjLiAqLw0KKy8qICN1bmRlZiBFTkFCTEVfREVCVUcgKi8NCisjZGVmaW5lIERJU0FCTEVfQ0lfU0VUVVAgICAgICAgICAgLyoqPCBEaXNhYmxlIENJIFNldHVwICovDQorI3VuZGVmIERJU0FCTEVfQ0lfU0VUVVAgDQorI2RlZmluZSBESVNBQkxFX1pTWU5USF9TRVRVUCAgICAgIC8qKjwgRGlzYWJsZSBac3l0aC9pbXBlZGFuY2Ugc2V0dXAgKi8NCisjdW5kZWYgRElTQUJMRV9aU1lOVEhfU0VUVVAgIA0KKyNkZWZpbmUgRElTQUJMRV9NQUxMT0MgICAgICAgICAgICAvKio8IERvbid0IHVzZSBNQUxMT0MvRlJFRSwgaW5zdGVhZCBhc3N1bWUgdXNlciB3aWxsIHN0YXRpY2FsbHkgYWxsb2NhdGUgKi8NCisjdW5kZWYgRElTQUJMRV9NQUxMT0MgDQorI2RlZmluZSBESVNBQkxFX0hQRl9XSURFQkFORCAgICAgIC8qKjwgRGlzYWJsZSBSWCBhbmQgVFggSFBGIHdoZW4gaW4gV0lERUJBTkQgbW9kZSAqLw0KKyN1bmRlZiBESVNBQkxFX0hQRl9XSURFQkFORA0KKyNkZWZpbmUgUFJPU0xJQ19PUFRJTUlaRV9JTlRFUlJVUFRTIC8qKjwgRW5hYmxlIG9wdGltaXphdGlvbiBmb3IgaW50ZXJydXB0cyBmb3IgZHVhbCBjaGFubmVsIGRldmljZXMuICBUaGlzDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb24gYXNzdW1lcyBjaGFubmVsIG51bWJlciBpcyBvbiBldmVuIGJvdW5kYXJpZXMgLSB0aGF0IGlzDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLDIsNCwgYXJlIHRoZSBmaXJzdCBjaGFubmVsIGZvciBlYWNoIGR1YWwgY2hhbm5lbCBkZXZpY2VzLg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KKyNkZWZpbmUgRU5BQkxFX1RSQUNFUyAvKio8IEVuYWJsZSB0aGlzIHRvIHNlZSBtYWpvciBBUEkgY2FsbHMgZHVyaW5nIHNvZnR3YXJlIGV4ZWN1dGlvbi4gTk9UIHJlY29tbWVuZGVkIGZvciBwcm9kdWN0aW9uIGNvZGUgc2luY2UgaXQgZG9lcyBhZGQgY29kZSBzcGFjZSArIGNhbiBnZW5lcmF0ZSBjb21waWxlciB3YXJuaW5ncy4gKi8NCisjdW5kZWYgRU5BQkxFX1RSQUNFUw0KKw0KKyNkZWZpbmUgU0lfRU5BQkxFX0xPR0dJTkcgIC8qKjwgVGhpcyB3aWxsIGVuYWJsZSB0aGUgYWJpbGl0eSB0byBsb2cgdG8gYSBmaWxlIC0gdGhpcyBhc3N1bWVzIHRoZSBhcHBsaWNhdGlvbiBzdXBwb3J0cyB0aGlzLiAgU2VlIGFwaV9kZW1vIGZvciBleGFtcGxlIGltcGxlbWVudGF0aW9uICovDQorI3VuZGVmIFNJX0VOQUJMRV9MT0dHSU5HIA0KKw0KKyNkZWZpbmUgRElTQUJMRV9IT09LQ0hBTkdFIC8qKjwgRGlzYWJsZSBQcm9TTElDX0hvb2tDaGFuZ2VEZXRlY3QoKSBhbmQgYXNzb2NpYXRlZCBmdW5jdGlvbnMgKi8NCisjdW5kZWYgRElTQUJMRV9IT09LQ0hBTkdFDQorDQorI2RlZmluZSBESVNBQkxFX1BVTFNFTUVURVJJTkcgLyoqPCBEaXNhYmxlIHB1bHNlIG1ldGVyaW5nIGZ1bmN0aW9ucyAqLw0KKyN1bmRlZiAgRElTQUJMRV9QVUxTRU1FVEVSSU5HDQorDQorLyoqQH0gKi8NCisNCisNCisjZGVmaW5lIFNJVk9JQ0VfTkVPTl9NV0lfU1VQUE9SVCAvKio8IEVuYWJsZSBORU9OIE1lc3NhZ2UgV2FpdGluZyBJbmRpY2F0b3Igc3VwcG9ydCAqLw0KKyN1bmRlZiBTSVZPSUNFX05FT05fTVdJX1NVUFBPUlQNCisNCisjZGVmaW5lIEdDSV9NT0RFICAvKio8IFNldCBpZiBHQ0kgdnMuIFNQSS9QQ00gbW9kZSBpcyB0byBiZSB1c2VkICovDQorI3VuZGVmIEdDSV9NT0RFICANCisNCisjZGVmaW5lIEVOQUJMRV9ISVJFU19HQUlOICAgICAgICAgLyoqPCAgU2V0IGZvciB6c3ludGggcHJlc2V0IGdhaW5zIGluIGRCKjEwIHJhdGhlciB0aGFuIGRCICovDQorI3VuZGVmICBFTkFCTEVfSElSRVNfR0FJTiAgICAgICAgIA0KKw0KKyNkZWZpbmUgUFJJTlRfVE9fU1RSSU5HIDAgICAgICAgICAvKio8IFNldCB0aGlzIHRvIDEgaWYgcHJpbnRpbmcgdG8gYSBzdHJpbmcgYnVmZmVyIHZzLiBjb25zb2xlIC0geW91IG1heSBjaGFuZ2UvcmVtb3ZlIHRoaXMqLw0KKw0KKw0KKy8qKiBAZGVmZ3JvdXAgTVVMVElfQk9NIE11bHRpcGxlIERldmljZS9CT00gT3B0aW9uIFN1cHBvcnQNCisgKiBBc3NpZ24gcGF0Y2ggc3RydWN0dXJlIG5hbWVzIHRvIG1hY3JvcyB1c2VkIGluIGRldmljZSBkcml2ZXJzDQorKiBAeyAqLw0KKyNkZWZpbmUgU0lWT0lDRV9NVUxUSV9CT01fU1VQUE9SVCAgICAgLyoqPCBFbmFibGUgTXVsdGlwbGUgR2VuZXJhbCBDb25maWd1cmF0aW9uIFN1cHBvcnQgKi8NCisjdW5kZWYgU0lWT0lDRV9NVUxUSV9CT01fU1VQUE9SVCANCisNCisjaWZkZWYgU0lWT0lDRV9NVUxUSV9CT01fU1VQUE9SVA0KKyNkZWZpbmUgU0kzMjE3WF9QQVRDSF9CX0ZMQksgICAgICAgc2kzMjE3eFBhdGNoUmV2QkZsYmsgIC8qKjwgU2kzMjE3eCBCIEZseWJhY2sgRENEQyBDb252ZXJ0ZXIgcGF0Y2ggKi8NCisjZGVmaW5lIFNJMzIxN1hfUEFUQ0hfQl9CS0JUICAgICAgIHNpMzIxN3hQYXRjaFJldkJCa2J0ICAvKio8IFNpMzIxN3ggQiBCdWNrLWJvb3N0IERDREMgQ29udmVydGVyIHBhdGNoICovDQorI2RlZmluZSBTSTMyMTdYX1BBVENIX0JfUEJCICAgICAgICBzaTMyMTd4UGF0Y2hSZXZCQmtidCAgLyoqPCBTaTMyMTd4IEIgUE1PUyBCdWNrLWJvb3N0IERDREMgQ29udmVydGVyIHBhdGNoICovDQorI2RlZmluZSBTSTMyMTdYX1BBVENIX0JfTENRQ1VLICAgICBzaTMyMTd4UGF0Y2hSZXZCRmxiayAgLyoqPCBTaTMyMTd4IEMgUXVhc2ktQ1VLIERDREMgQ29udmVydGVyIHBhdGNoICovDQorI2RlZmluZSBTSTMyMTdYX1BBVENIX0NfRkxCSyAgICAgICBzaTMyMTd4UGF0Y2hSZXZDRmxiayAgLyoqPCBTaTMyMTd4IEMgRmx5YmFjayBEQ0RDIENvbnZlcnRlciBwYXRjaCAqLw0KKyNkZWZpbmUgU0kzMjE3WF9QQVRDSF9DX0JLQlQgICAgICAgc2kzMjE3eFBhdGNoUmV2Q0ZsYmsgIC8qKjwgU2kzMjE3eCBDIEJ1Y2stYm9vc3QgRENEQyBDb252ZXJ0ZXIgcGF0Y2ggKi8NCisjZGVmaW5lIFNJMzIxN1hfUEFUQ0hfQ19QQkIgICAgICAgIHNpMzIxN3hQYXRjaFJldkNGbGJrICAvKio8IFNpMzIxN3ggQyBQTU9TIEJ1Y2stYm9vc3QgRENEQyBDb252ZXJ0ZXIgcGF0Y2ggKi8NCisjZGVmaW5lIFNJMzIxN1hfUEFUQ0hfQ19MQ1FDVUsgICAgIHNpMzIxN3hQYXRjaFJldkNGbGJrICAvKio8IFNpMzIxN3ggQyBRdWFzaS1DVUsgRENEQyBDb252ZXJ0ZXIgcGF0Y2ggKi8NCisNCisjZGVmaW5lIFNJMzIxOFhfUEFUQ0hfQSAgICAgICAgICAgIHNpMzIxOHhQYXRjaFJldkFMQ1FDICAvKio8IFNpMzIxOHggTENRQyA1VyBEQ0RDIENvbnZlcnRlciBwYXRjaCAqLw0KKw0KKyNkZWZpbmUgU0kzMjE5WF9QQVRDSF9BICAgICAgICAgICAgc2kzMjE5eFBhdGNoUmV2QUxDUUMgIC8qKjwgU0kzMjE5eCBwYXRjaCAqLw0KKw0KKyNkZWZpbmUgU0kzMjI2WF9QQVRDSF9DX0ZMQksgICAgICAgc2kzMjI2eFBhdGNoUmV2Q0ZsYmsgICAgLyoqPCBTaTMyMjZ4IFJldkMgRmx5YmFjayBEQ0RDIENvbnZlcnRlciBQYXRjaCAqLw0KKyNkZWZpbmUgU0kzMjI2WF9QQVRDSF9DX0NVSyAgICAgICAgc2kzMjI2eFBhdGNoUmV2Q0ZsYmsgICAgLyoqPCBTaTMyMjZ4IFJldkMgRnVsbCBDVUsgRENEQyBDb252ZXJ0ZXIgUGF0Y2ggKi8NCisjZGVmaW5lIFNJMzIyNlhfUEFUQ0hfQ19RQ1VLICAgICAgIHNpMzIyNnhQYXRjaFJldkNGbGJrICAgIC8qKjwgU2kzMjI2eCBSZXZDIFF1YXNpLUNVSyBEQ0RDIENvbnZlcnRlciBQYXRjaCAqLw0KKyNkZWZpbmUgU0kzMjI2WF9QQVRDSF9DX0xDUUNVSyAgICAgc2kzMjI2eFBhdGNoUmV2Q0ZsYmsgICAgLyoqPCBTaTMyMjZ4IFJldkMgTG93LWNvc3QgUUNVSyBEQ0RDIENvbnZlcnRlciBQYXRjaCAqLw0KKyNkZWZpbmUgU0kzMjI2WF9QQVRDSF9DX1RTUyAgICAgICAgc2kzMjI2eFBhdGNoUmV2Q1RzcyAgICAgLyoqPCBTaTMyMjZ4IFJldkMgVFNTIERDREMgQ29udmVydGVyIFBhdGNoICovDQorI2RlZmluZSBTSTMyMjZYX1BBVENIX0NfVFNTX0lTTyAgICBzaTMyMjZ4UGF0Y2hSZXZDVHNzSXNvICAvKio8IFNpMzIyNnggUmV2QyBUU1MgKGlzb2xhdGVkKSBEQ0RDIENvbnZlcnRlciBQYXRjaCAqLw0KKyNkZWZpbmUgU0kzMjI2WF9QQVRDSF9DX1BCQiAgICAgICAgc2kzMjI2eFBhdGNoUmV2Q0ZsYmsgICAgLyoqPCBTaTMyMjZ4IFBNT1MgQnVjay1ib29zdCBEQ0RDIENvbnZlcnRlciBwYXRjaCAqLyAgIA0KKyNkZWZpbmUgU0kzMjI2eF9QQVRDSF9DX0ZJWFJMICAgICAgU0kzMjI2WF9QQVRDSF9DX1RTUw0KKyNkZWZpbmUgU0kzMjI2WF9QQVRDSF9DX1FTUyAgICAgICAgc2kzMjI2eFBhdGNoUmV2Q1RzcyAgICAgLyoqPCBTaTMyMjZ4IFJldkMgUVNTIERDREMgQ29udmVydGVyIFBhdGNoICovDQorI2RlZmluZSBTSTMyMjZYX1BBVENIX0NfQkIgICAgICAgICBzaTMyMjZ4UGF0Y2hSZXZDRmxiayAgICAvKio8IFNpMzIyNnggQkpUIEJ1Y2stYm9vc3QgRENEQyBDb252ZXJ0ZXIgcGF0Y2ggKi8gICANCisNCisjZGVmaW5lIFNJMzIyOFhfUEFUQ0hfQSAgICAgICAgICAgIHNpMzIyOHhQYXRjaFJldkFMQ1FDICAvKio8IFNpMzIyOHggTENRQyA1VyBEQ0RDIENvbnZlcnRlciBwYXRjaCAqLw0KKw0KKyNlbmRpZg0KKw0KKy8qIERlZmF1bHQgcGF0Y2ggbmFtZXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovDQorI2RlZmluZSBTSTMyMTdYX1BBVENIX0JfREVGQVVMVCAgICBSZXZCUGF0Y2gNCisjZGVmaW5lIFNJMzIxN1hfUEFUQ0hfQ19ERUZBVUxUICAgIFJldkNQYXRjaA0KKyNkZWZpbmUgU0kzMjE4WF9QQVRDSF9BX0RFRkFVTFQgICAgUmV2QVBhdGNoDQorI2RlZmluZSBTSTMyMTlYX1BBVENIX0FfREVGQVVMVCAgICBSZXZBUGF0Y2gNCisjZGVmaW5lIFNJMzIyNlhfUEFUQ0hfQ19ERUZBVUxUICAgIFJldkNQYXRjaA0KKyNkZWZpbmUgU0kzMjI4WF9QQVRDSF9BX0RFRkFVTFQgICAgUmV2QVBhdGNoDQorDQorLyoqIEB9IE1VTFRJX0JPTSAqLw0KKw0KKw0KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCisjZGVmaW5lIExPR1BSSU5UKC4uLikgcHJpbnRrKEtFUk5fRVJSIF9fVkFfQVJHU19fKQ0KKyNpZmRlZiBTSV9FTkFCTEVfTE9HR0lORw0KKw0KKyNpZmRlZiBQUk9TTElDX0xJTlVYX0tFUk5FTA0KKyNlcnJvciAiTG9nZ2luZyBjdXJyZW50bHkgaW1wbGVtZW50ZWQgb25seSBmb3IgdXNlcnNwYWNlIHByb2dyYW1zLiINCisjZW5kaWYNCisNCitleHRlcm4gRklMRSAqU0lMQUJTX0xPR19GUDsgLyogVGhpcyBnbG9iYWwgdmFyaWFibGUgd291bGQgbmVlZCB0byBiZSBpbml0aWFsaXplZCBieSB0aGUgdXNlcidzIHByb2dyYW0gLSBzZWUgdGhlIGFwaSBkZW1vIGZvciBleGFtcGxlICovDQorI2VuZGlmIC8qIFNJX0VOQUJMRV9MT0dHSU5HICovDQorDQorI2lmZGVmIEVOQUJMRV9ERUJVRw0KKyNkZWZpbmUgREVCVUdfRU5BQkxFRChYKSAoKFgpLT5kZWJ1Z01vZGUgJiAxKQ0KKw0KKyNpZmRlZiBTSV9FTkFCTEVfTE9HR0lORw0KKyNkZWZpbmUgREVCVUdfUFJJTlQoQ0hQVFIsLi4uKSBpZiggREVCVUdfRU5BQkxFRChDSFBUUikgKXsgZnByaW50ZihTSUxBQlNfTE9HX0ZQLCBfX1ZBX0FSR1NfXyk7IGZmbHVzaChTSUxBQlNfTE9HX0ZQKTt9DQorI2Vsc2UNCisjZGVmaW5lIERFQlVHX1BSSU5UKENIUFRSLC4uLikgaWYoIERFQlVHX0VOQUJMRUQoQ0hQVFIpICkgTE9HUFJJTlQoX19WQV9BUkdTX18pDQorI2VuZGlmIC8qIExvZ2dpbmcgKi8NCisNCisjZWxzZSAvKiBObyBEZWJ1ZyAqLw0KKy8qIEhhbmRsZWQgaW4gc2lfdm9pY2UuaCAqLw0KKyNlbmRpZg0KKyNkZWZpbmUgU0lfRU5BQkxFX0xPR0dJTkcNCisjaWZkZWYgRU5BQkxFX1RSQUNFUw0KKyNkZWZpbmUgVFJBQ0VfRU5BQkxFRChYKSAoKFgpLT5kZWJ1Z01vZGUgJiAyKQ0KKw0KKyNpZmRlZiBTSV9FTkFCTEVfTE9HR0lORw0KKyNkZWZpbmUgVFJBQ0VQUklOVChDSFBUUixGTVQsLi4uKSBpZihUUkFDRV9FTkFCTEVEKENIUFRSKSkge2ZwcmludGYoU0lMQUJTX0xPR19GUCwgIiNUUkM6JXMgY2hhbm5lbDogJWQgIkZNVCxfX0ZVTkNUSU9OX18sIChDSFBUUiktPmNoYW5uZWwsX19WQV9BUkdTX18pOyBmZmx1c2goU0lMQUJTX0xPR19GUCk7IH0NCisjZGVmaW5lIFRSQUNFUFJJTlRfTk9DSEFOKEZNVCwuLi4pIGZwcmludGYoU0lMQUJTX0xPR19GUCwgIiNUUkM6JXMgIkZNVCxfX0ZVTkNUSU9OX18sIF9fVkFfQVJHU19fKTsgZmZsdXNoKFNJTEFCU19MT0dfRlApDQorI2Vsc2UNCisjZGVmaW5lIFRSQUNFUFJJTlQoQ0hQVFIsRk1ULC4uLikgaWYoVFJBQ0VfRU5BQkxFRChDSFBUUikpIExPR1BSSU5UKCJUUkM6JXMgY2hhbm5lbDogJWQgIkZNVCxfX0ZVTkNUSU9OX18sIChDSFBUUiktPmNoYW5uZWwsX19WQV9BUkdTX18pDQorI2RlZmluZSBUUkFDRVBSSU5UX05PQ0hBTihGTVQsLi4uKSBMT0dQUklOVCgiVFJDOiVzICJGTVQsX19GVU5DVElPTl9fLCBfX1ZBX0FSR1NfXykNCisNCisjZW5kaWYgLyogU0lfRU5BQkxFX0xPR0dJTkcgKi8NCisjZWxzZQ0KKy8qIEhhbmRsZWQgaW4gc2lfdm9pY2UuaCAqLw0KKyNlbmRpZg0KKw0KKw0KKy8qKiBAZGVmZ3JvdXAgUFNUTl9DRkcgUFNUTiBEZXRlY3Rpb24gT3B0aW9ucw0KKyogQHsgKi8NCisjZGVmaW5lIFBTVE5fREVUX0VOQUJMRSAgICAgICAgICAgICAgICAgIC8qKjwgRGVmaW5lIHRvIGluY2x1ZGUgRGlmZmVyZW50aWFsIFBTVE4gZGV0ZWN0aW9uIGNvZGUgKi8NCisjdW5kZWYgUFNUTl9ERVRfRU5BQkxFDQorDQorI2RlZmluZSBQU1ROX0RFVF9PUEVOX0ZFTUZfU0VUVExFICAgMTUwMCAgICAgLyoqPCBPUEVOIGZvcmVpZ24gdm9sdGFnZSBtZWFzdXJlbWVudCBzZXR0bGUgdGltZSAqLw0KKyNkZWZpbmUgUFNUTl9ERVRfRElGRl9TQU1QTEVTICAgICAgIDQgICAgICAgIC8qKjwgTnVtYmVyIG9mIEkvViBzYW1wbGVzIGF2ZXJhZ2VkIFsxIHRvIDE2XSAqLw0KKyNkZWZpbmUgUFNUTl9ERVRfTUlOX0lMT09QICAgICAgICAgIDcwMCAgICAgIC8qKjwgTWluaW11bSBhY2NlcHRhYmxlIGxvb3AgY3VycmVudCAqLw0KKyNkZWZpbmUgUFNUTl9ERVRfTUFYX0ZFTUYgICAgICAgICAgIDEwMDAwICAgIC8qKjwgTWF4aW11bSBPUEVOIHN0YXRlIGZvcmVpZ24gdm9sdGFnZSAqLw0KKyNkZWZpbmUgUFNUTl9ERVRfUE9MTF9SQVRFICAgICAgICAgIDEwICAgICAgIC8qKjwgUmF0ZSBvZiByZS1lbnRyYW50IGNvZGUgaW4gbXMgKi8NCisjZGVmaW5lIFBTVE5fREVUX0RJRkZfSVYxX1NFVFRMRSAgICAxMDAwICAgICAvKio8IFNldHRsZSB0aW1lIGJlZm9yZSBmaXJzdCBJL1YgbWVhc3VybWVudCBpbiBtcyAqLw0KKyNkZWZpbmUgUFNUTl9ERVRfRElGRl9JVjJfU0VUVExFICAgIDEwMDAgICAgIC8qKjwgU2V0dGxlIHRpbWUgYmVmb3JlIGZpcnN0IEkvViBtZWFzdXJtZW50IGluIG1zICovDQorDQorLyoqIEB9IFBTVE5fQ0ZHICovDQorI2RlZmluZSBTSVZPSUNFX0NGR19ORVdUWVBFU19PTkxZICAxIC8qKjwgU2V0IGlmIG5vdCBzdXBwb3J0aW5nIExlZ2FjeSB0eXBlcyAqLw0KKw0KKw0KKy8qKkB9ICovDQorI2VuZGlmDQorDQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvY29uZmlnX2luYy9zaTMyMTh4X0xDQ0JfY29uc3RhbnRzLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9jb25maWdfaW5jL3NpMzIxOHhfTENDQl9jb25zdGFudHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGJkYWMxCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvY29uZmlnX2luYy9zaTMyMTh4X0xDQ0JfY29uc3RhbnRzLmgKQEAgLTAsMCArMSw4MyBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8NCisvKg0KKyAqDQorICogU2kzMjE4eCBQcm9TTElDIEFQSSBDb25maWd1cmF0aW9uIFRvb2wgVmVyc2lvbiA0LjIuMQ0KKyAqIExhc3QgVXBkYXRlZCBpbiBBUEkgUmVsZWFzZTogOS4yLjANCisgKiBzb3VyY2UgWE1MIGZpbGU6IHNpMzIxOHhfTENDQl9jb25zdGFudHMueG1sDQorICoNCisgKiBBdXRvIGdlbmVyYXRlZCBmaWxlIGZyb20gY29uZmlndXJhdGlvbiB0b29sLg0KKyAqLw0KKw0KKw0KKyNpZm5kZWYgU0kzMjE4WF9DT05TVEFOVFNfSA0KKyNkZWZpbmUgU0kzMjE4WF9DT05TVEFOVFNfSA0KKw0KKy8qKiBSaW5naW5nIFByZXNldHMgKi8NCitlbnVtIHsNCisJREVGQVVMVF9SSU5HSU5HLA0KKwlSSU5HX0YyMF80NVZSTVNfMFZEQ19MUFIsDQorCVJJTkdJTkdfTEFTVF9FTlVNDQorfTsNCisNCisvKiogRENfRmVlZCBQcmVzZXRzICovDQorZW51bSB7DQorCURDRkVFRF80OFZfMjBNQSwNCisJRENGRUVEXzQ4Vl8yNU1BLA0KKwlEQ0ZFRURfUFNUTl9ERVRfMSwNCisJRENGRUVEX1BTVE5fREVUXzIsDQorCURDX0ZFRURfTEFTVF9FTlVNDQorfTsNCisNCisvKiogSW1wZWRhbmNlIFByZXNldHMgKi8NCitlbnVtIHsNCisJWlNZTl82MDBfMF8wXzMwXzAsDQorCVpTWU5fMjcwXzc1MF8xNTBfMzBfMCwNCisJWlNZTl8zNzBfNjIwXzMxMF8zMF8wLA0KKwlaU1lOXzIyMF84MjBfMTIwXzMwXzAsDQorCVpTWU5fNjAwXzBfMTAwMF8zMF8wLA0KKwlaU1lOXzIwMF82ODBfMTAwXzMwXzAsDQorCVpTWU5fMjIwXzgyMF8xMTVfMzBfMCwNCisJV0JfWlNZTl82MDBfMF8wXzIwXzAsDQorCUlNUEVEQU5DRV9MQVNUX0VOVU0NCit9Ow0KKw0KKy8qKiBGU0sgUHJlc2V0cyAqLw0KK2VudW0gew0KKwlERUZBVUxUX0ZTSywNCisJRVRTSV9GU0ssDQorCUZTS19MQVNUX0VOVU0NCit9Ow0KKw0KKy8qKiBQdWxzZV9NZXRlcmluZyBQcmVzZXRzICovDQorZW51bSB7DQorCURFRkFVTFRfUFVMU0VfTUVURVJJTkcsDQorCVBVTFNFX01FVEVSSU5HX0xBU1RfRU5VTQ0KK307DQorDQorLyoqIFRvbmUgUHJlc2V0cyAqLw0KK2VudW0gew0KKwlUT05FR0VOX0ZDQ19ESUFMLA0KKwlUT05FR0VOX0ZDQ19CVVNZLA0KKwlUT05FR0VOX0ZDQ19SSU5HQkFDSywNCisJVE9ORUdFTl9GQ0NfUkVPUkRFUiwNCisJVE9ORUdFTl9GQ0NfQ09OR0VTVElPTiwNCisJVE9ORUdFTl9GQ0NfQ0FTLA0KKwlUT05FR0VOX0ZDQ19TQVMsDQorCVRPTkVHRU5fRVRTSV9EVEFTLA0KKwlUT05FR0VOXzEwMDQsDQorCVRPTkVfTEFTVF9FTlVNDQorfTsNCisNCisvKiogUENNIFByZXNldHMgKi8NCitlbnVtIHsNCisJUENNXzhVTEFXLA0KKwlQQ01fOEFMQVcsDQorCVBDTV8xNkxJTiwNCisJUENNXzE2TElOX1dCLA0KKwlQQ01fTEFTVF9FTlVNDQorfTsNCisNCisNCisNCisjZW5kaWYNCisNCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9jb25maWdfaW5jL3NpX3ZvaWNlX2RhdGF0eXBlcy5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvY29uZmlnX2luYy9zaV92b2ljZV9kYXRhdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjBhNzlkCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvY29uZmlnX2luYy9zaV92b2ljZV9kYXRhdHlwZXMuaApAQCAtMCwwICsxLDYwIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KKy8qDQorICogc2lfdm9pY2VfZGF0YXR5cGVzLmgNCisgKiBQcm9TTElDIGRhdGF0eXBlcyBmaWxlDQorICoNCisgKiBBdXRob3Iocyk6IA0KKyAqIGxhag0KKyAqDQorICogRGlzdHJpYnV0ZWQgYnk6IA0KKyAqIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMNCisgKg0KKyAqIFRoaXMgZmlsZSBjb250YWlucyBwcm9wcmlldGFyeSBpbmZvcm1hdGlvbi4JIA0KKyAqIE5vIGRpc3NlbWluYXRpb24gYWxsb3dlZCB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tDQorICogU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4NCisgKg0KKyAqIEZpbGUgRGVzY3JpcHRpb246DQorICogVGhpcyBpcyB0aGUgaGVhZGVyIGZpbGUgdGhhdCBjb250YWlucw0KKyAqIHR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBkYXRhIHR5cGVzDQorICogdXNlZCBpbiB0aGUgZGVtb25zdHJhdGlvbiBjb2RlLg0KKyAqDQorICovDQorI2lmbmRlZiBEQVRBVFlQRVNfSA0KKyNkZWZpbmUgREFUQVRZUEVTX0gNCisjaW5jbHVkZSAicHJvc2xpY19hcGlfY29uZmlnLmgiDQorDQorI2lmbmRlZiBUUlVFDQorI2RlZmluZSBUUlVFICgxKQ0KKyNlbmRpZg0KKyNpZm5kZWYgRkFMU0UNCisjZGVmaW5lIEZBTFNFICgwKQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgTlVMTA0KKyNkZWZpbmUgTlVMTCAoKHZvaWQgKikgMCkNCisjZW5kaWYNCisNCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4NCit0eXBlZGVmIHVfaW50OF90ICAgICAgICAgICAgQk9PTEVBTjsNCit0eXBlZGVmIGludDhfdCAgICAgICAgICAgICAgaW50ODsNCit0eXBlZGVmIHVfaW50OF90ICAgICAgICAgICAgdUludDg7DQordHlwZWRlZiB1SW50OCAgICAgICAgICAgICAgIHVDaGFyOw0KK3R5cGVkZWYgaW50MTZfdCAgICAgICAgICAgICBpbnQxNjsNCit0eXBlZGVmIHVfaW50MTZfdCAgICAgICAgICAgdUludDE2Ow0KK3R5cGVkZWYgaW50MzJfdCAgICAgICAgICAgICBpbnQzMjsNCit0eXBlZGVmIHVfaW50MzJfdCAgICAgICAgICAgdUludDMyOw0KK3R5cGVkZWYgdV9pbnQzMl90ICAgICAgICAgICByYW1EYXRhOw0KKw0KKw0KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+DQorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPiAvKiBmb3IgYWJzKCkgKi8NCisvKiBOT1RFOiBrY2FsbG9jIHdhcyBpbnRyb2R1Y2VkIGluIH4yLjYuMTQsIG90aGVyd2lzZSB1c2Uga3phbGxvYygpIHdpdGggKFgpKihZKSBmb3IgdGhlIGJsb2NrIHNpemUgKi8NCisjZGVmaW5lIFNJVk9JQ0VfQ0FMTE9DKFgsWSkgICBrY2FsbG9jKChYKSwoWSksIEdGUF9LRVJORUwpDQorI2RlZmluZSBTSVZPSUNFX0ZSRUUoWCkgICAgICAga2ZyZWUoKFgpKQ0KKyNkZWZpbmUgU0lWT0lDRV9NQUxMT0MoWCkgICAgIGttYWxsb2MoKFgpLCBHRlBfS0VSTkVMKQ0KKyNkZWZpbmUgU0lWT0lDRV9TVFJDUFkgICAgICAgIHN0cmNweQ0KKyNkZWZpbmUgU0lWT0lDRV9TVFJOQ1BZICAgICAgIHN0cm5jcHkNCisjZGVmaW5lIFNJVk9JQ0VfTUVNU0VUICAgICAgICBtZW1zZXQNCisjZGVmaW5lIFNJVk9JQ0VfQUJTICAgICAgICAgICBhYnMNCisjZW5kaWYNCisNCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9jb25maWdfaW5jL3ZkYWFfYXBpX2NvbmZpZy5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvY29uZmlnX2luYy92ZGFhX2FwaV9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTY3MTcwCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvY29uZmlnX2luYy92ZGFhX2FwaV9jb25maWcuaApAQCAtMCwwICsxLDQyIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KKy8qDQorICogdmRhYV9hcGlfY29uZmlnLmgNCisgKiBWb2ljZURBQSBoZWFkZXIgY29uZmlnIGZpbGUNCisgKg0KKyAqIEF1dGhvcihzKTogDQorICogbmFxYW1hciwgbGFqDQorICoNCisgKiBEaXN0cmlidXRlZCBieTogDQorICogU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYw0KKyAqDQorICogVGhpcyBmaWxlIGNvbnRhaW5zIHByb3ByaWV0YXJ5IGluZm9ybWF0aW9uLgkgDQorICogTm8gZGlzc2VtaW5hdGlvbiBhbGxvd2VkIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20NCisgKiBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLg0KKyAqDQorICogRmlsZSBEZXNjcmlwdGlvbjoNCisgKiBUaGlzIGZpbGUgaXMgdXNlZCANCisgKiBpbiB0aGUgVm9pY2VEQUEgZGVtb25zdHJhdGlvbiBjb2RlLiANCisgKg0KKyAqDQorICovDQorDQorI2lmbmRlZiBWREFBX0FQSV9DRkdfSA0KKyNkZWZpbmUgVkRBQV9BUElfQ0ZHX0gNCisNCisvKiAjZGVmaW5lIERJU0FCTEVfTUFMTE9DICovDQorLyogI2RlZmluZSBESVNBQkxFX1ZEQUFfUklOR19ERVRFQ1RfU0VUVVAgKi8NCisvKiAjZGVmaW5lIERJU0FCTEVfVkRBQV9BVURJT19HQUlOX1NFVFVQICovDQorLyogI2RlZmluZSBESVNBQkxFX1ZEQUFfUENNX1NFVFVQICovDQorLyogI2RlZmluZSBESVNBQkxFX1ZEQUFfQ09VTlRSWV9TRVRVUCAqLw0KKy8qICNkZWZpbmUgRElTQUJMRV9WREFBX0hZQlJJRF9TRVRVUCAqLw0KKyNkZWZpbmUgRElTQUJMRV9WREFBX0xPT1BCQUNLX1NFVFVQDQorI2RlZmluZSBESVNBQkxFX1ZEQUFfSU1QRURBTkNFX1NFVFVQDQorDQorI2lmbmRlZiBFTkFCTEVfREVCVUcNCisjZGVmaW5lIEVOQUJMRV9ERUJVRw0KKyNlbmRpZg0KKy8vI2luY2x1ZGUgInN0ZGlvLmgiDQorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KKy8vI2RlZmluZSBMT0dQUklOVCBwcmludGYNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9jb25maWdfaW5jL3ZkYWFfY29uc3RhbnRzLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9jb25maWdfaW5jL3ZkYWFfY29uc3RhbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE5NDBhNgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL2NvZGVjcy9zaTMyMTh4L2NvbmZpZ19pbmMvdmRhYV9jb25zdGFudHMuaApAQCAtMCwwICsxLDU3IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KKy8qDQorICogU2kzMjE3eCBQcm9TTElDIEFQSSBDb25maWd1cmF0aW9uIFRvb2wgVmVyc2lvbiA0LjIuMQ0KKyAqIExhc3QgVXBkYXRlZCBpbiBBUEkgUmVsZWFzZTogOS4yLjANCisgKiBzb3VyY2UgWE1MIGZpbGU6IHNpMzIxN3hfRkxCS19HRFJWX2NvbnN0YW50cy54bWwNCisgKg0KKyAqIEF1dG8gZ2VuZXJhdGVkIGZpbGUgZnJvbSBjb25maWd1cmF0aW9uIHRvb2wuDQorKi8NCisNCisNCisjaWZuZGVmIFZEQUFfQ09OU1RBTlRTX0gNCisjZGVmaW5lIFZEQUFfQ09OU1RBTlRTX0gNCisNCisvKiogVmRhYV9Db3VudHJ5IFByZXNldHMgKi8NCitlbnVtIHsNCisJQ09VX1VTQSwNCisJQ09VX0dFUk1BTlksDQorCUNPVV9DSElOQSwNCisJQ09VX0FVU1RSQUxJQSwNCisJVkRBQV9DT1VOVFJZX0xBU1RfRU5VTQ0KK307DQorDQorLyoqIFZkYWFfQXVkaW9fR2FpbiBQcmVzZXRzICovDQorZW51bSB7DQorCUFVRElPX0dBSU5fMERCLA0KKwlBVURJT19BVFRFTl80REIsDQorCUFVRElPX0FUVEVOXzZEQiwNCisJQVVESU9fQVRURU5fMTFEQiwNCisJVkRBQV9BVURJT19HQUlOX0xBU1RfRU5VTQ0KK307DQorDQorLyoqIFZkYWFfUmluZ19WYWxpZGF0aW9uIFByZXNldHMgKi8NCitlbnVtIHsNCisJUklOR19ERVRfTk9WQUxfTE9XViwNCisJUklOR19ERVRfVkFMX0hJR0hWLA0KKwlWREFBX1JJTkdfVkFMSURBVElPTl9MQVNUX0VOVU0NCit9Ow0KKw0KKy8qKiBWZGFhX1BDTSBQcmVzZXRzICovDQorZW51bSB7DQorCURBQV9QQ01fOFVMQVcsDQorCURBQV9QQ01fOEFMQVcsDQorCURBQV9QQ01fMTZMSU4sDQorCVZEQUFfUENNX0xBU1RfRU5VTQ0KK307DQorDQorLyoqIFZkYWFfSHlicmlkIFByZXNldHMgKi8NCitlbnVtIHsNCisJSFlCXzYwMF8wXzBfNTAwRlRfMjRBV0csDQorCUhZQl8yNzBfNzUwXzE1MF81MDBGVF8yNEFXRywNCisJSFlCXzIwMF82ODBfMTAwXzUwMEZUXzI0QVdHLA0KKwlIWUJfMjIwXzgyMF8xMjBfNTAwRlRfMjRBV0csDQorCVZEQUFfSFlCUklEX0xBU1RfRU5VTQ0KK307DQorDQorI2VuZGlmDQorDQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvaW5jL3Byb3NsaWMuaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL2NvZGVjcy9zaTMyMTh4L2luYy9wcm9zbGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg1YzM0MgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL2NvZGVjcy9zaTMyMTh4L2luYy9wcm9zbGljLmgKQEAgLTAsMCArMSwyNjk3IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworLyoKKyAqIERpc3RyaWJ1dGVkIGJ5OgorICogU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYworICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBwcm9wcmlldGFyeSBpbmZvcm1hdGlvbi4KKyAqIE5vIGRpc3NlbWluYXRpb24gYWxsb3dlZCB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tCisgKiBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLgorICoKKyAqIEZpbGUgRGVzY3JpcHRpb246CisgKiBUaGlzIGlzIHRoZSBoZWFkZXIgZmlsZSBmb3IgdGhlIFByb1NMSUMgZHJpdmVyLgorICoKKyAqLworCisjaWZuZGVmIFBST1NMSUNfSAorI2RlZmluZSBQUk9TTElDX0gKKworLyppbmNsdWRlIGFsbCB0aGUgcmVxdWlyZWQgaGVhZGVycyovCisjaW5jbHVkZSAiLi4vY29uZmlnX2luYy9wcm9zbGljX2FwaV9jb25maWcuaCIKKyNpbmNsdWRlICIuLi9jb25maWdfaW5jL3NpX3ZvaWNlX2RhdGF0eXBlcy5oIgorI2luY2x1ZGUgIi4uL2luYy9zaV92b2ljZV9jdHJsLmgiCisjaW5jbHVkZSAiLi4vaW5jL3NpX3ZvaWNlX3RpbWVyX2ludGYuaCIKKyNpbmNsdWRlICIuLi9pbmMvc2lfdm9pY2UuaCIKKworCisvKiBVTlNPUlRFRCBBRERJVElPTlMgLSBUaGVzZSBjb21tb24gcGFyYW1ldGVycyBoYXZlIGJlZW4gbW92ZWQgZnJvbQorICAgdGhlIGRyaXZlcnMgdG8gaGVyZSB0byBzdXBwb3J0IHNpbXVsdGFuZW91cyBjb21waWxlIG9mIG11bHRpcGxlIGRldmljZXMKKyAgICovCisvKiBQYXRjaCBQYXJhbWV0ZXJzICovCisjZGVmaW5lIFBBVENIX05VTV9MT1dfRU5UUklFUyAgICAgICA4CisjZGVmaW5lIFBBVENIX05VTV9ISUdIX0VOVFJJRVMgICAgICA4CisjZGVmaW5lIFBBVENIX01BWF9TVVBQT1JUX1JBTSAgICAgICAxMjgKKyNkZWZpbmUgUEFUQ0hfTUFYX1NJWkUgICAgICAgICAgICAgIDEwMjQKKworI2RlZmluZSBQUk9TTElDX1JBTV9NQURDX1ZCQVQgICAzCisjZGVmaW5lIFBST1NMSUNfUkFNX1BBVENISUQgICAgICAgICA0NDgKKyNkZWZpbmUgUFJPU0xJQ19SQU1fVkVSSUZZX0lPICAgICAgIDQ0OQorI2RlZmluZSBQUk9TTElDX1JBTV9QRF9EQ0RDICAgICAgICAgMTUzOAorI2RlZmluZSBQUk9TTElDX1JBTV9QUkFNX0FERFIgICAgICAgMTM1OAorI2RlZmluZSBQUk9TTElDX1JBTV9QUkFNX0RBVEEgICAgICAgMTM1OQorI2RlZmluZSBQQVRDSF9KTVBUQkxfSElHSF9BRERSICAgICAgMTU5NworCisvKiBDb21tb24gcmVnaXN0ZXIgdmFsdWVzIGZvciAxN3gsIDI2eCwgMTh4LCAxOXggJiAyOHggKi8KKyNkZWZpbmUgUFJPU0xJQ19SRUdfSUQgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUFJPU0xJQ19SRUdfUkVTRVQgICAgICAgICAgIDEKKyNkZWZpbmUgUFJPU0xJQ19SRUdfTVNUUlNUQVQgICAgICAgIDMKKyNkZWZpbmUgUFJPU0xJQ19SRUdfUkFNX0FERFJfSEkgICAgIDUKKyNkZWZpbmUgUFJPU0xJQ19SRUdfUENNTU9ERSAgICAgICAgIDExCisjZGVmaW5lIFBST1NMSUNfUkVHX1BDTVRYTE8gICAgICAgICAxMgorI2RlZmluZSBQUk9TTElDX1JFR19QQ01UWEhJICAgICAgICAgMTMKKyNkZWZpbmUgUFJPU0xJQ19SRUdfUENNUlhMTyAgICAgICAgIDE0CisjZGVmaW5lIFBST1NMSUNfUkVHX1BDTVJYSEkgICAgICAgICAxNQorI2RlZmluZSBQUk9TTElDX1JFR19JUlEgICAgICAgICAgICAgMTYKKyNkZWZpbmUgUFJPU0xJQ19SRUdfSVJRMCAgICAgICAgICAgIDE3CisjZGVmaW5lIFBST1NMSUNfUkVHX0lSUTEgICAgICAgICAgICAxOAorI2RlZmluZSBQUk9TTElDX1JFR19JUlE0ICAgICAgICAgICAgMjEKKyNkZWZpbmUgUFJPU0xJQ19SRUdfSVJRRU4xICAgICAgICAgIDIyCisjZGVmaW5lIFBST1NMSUNfUkVHX0lSUUVOMiAgICAgICAgICAyMworI2RlZmluZSBQUk9TTElDX1JFR19JUlFFTjMgICAgICAgICAgMjQKKyNkZWZpbmUgUFJPU0xJQ19SRUdfSVJRRU40ICAgICAgICAgIDI1CisjZGVmaW5lIFBST1NMSUNfUkVHX0NBTFIwICAgICAgICAgICAyNgorI2RlZmluZSBQUk9TTElDX1JFR19DQUxSMyAgICAgICAgICAgMjkKKyNkZWZpbmUgUFJPU0xJQ19SRUdfTElORUZFRUQgICAgICAgIDMwCisjZGVmaW5lIFBST1NMSUNfUkVHX1BPTFJFViAgICAgICAgICAzMQorI2RlZmluZSBQUk9TTElDX1JFR19MQ1JSVFAgICAgICAgICAgMzQKKyNkZWZpbmUgUFJPU0xJQ19SRUdfUklOR0NPTiAgICAgICAgIDM4CisjZGVmaW5lIFBST1NMSUNfUkVHX1JJTkdUQUxPICAgICAgICAzOQorI2RlZmluZSBQUk9TTElDX1JFR19SSU5HVEFISSAgICAgICAgNDAKKyNkZWZpbmUgUFJPU0xJQ19SRUdfUklOR1RJTE8gICAgICAgIDQxCisjZGVmaW5lIFBST1NMSUNfUkVHX1JJTkdUSUhJICAgICAgICA0MgorI2RlZmluZSBQUk9TTElDX1JFR19MT09QQkFDSyAgICAgICAgNDMKKyNkZWZpbmUgUFJPU0xJQ19SRUdfRElHQ09OICAgICAgICAgIDQ0CisjZGVmaW5lIFBST1NMSUNfUkVHX1pDQUxfRU4gICAgICAgICA0NgorI2RlZmluZSBQUk9TTElDX1JFR19FTkhBTkNFICAgICAgICAgNDcKKyNkZWZpbmUgUFJPU0xJQ19SRUdfT01PREUgICAgICAgICAgIDQ4CisjZGVmaW5lIFBST1NMSUNfUkVHX09DT04gICAgICAgICAgICA0OQorI2RlZmluZSBQUk9TTElDX1JFR19PMVRBTE8gICAgICAgICAgNTAKKyNkZWZpbmUgUFJPU0xJQ19SRUdfTzFUQUhJICAgICAgICAgIDUxCisjZGVmaW5lIFBST1NMSUNfUkVHX08xVElMTyAgICAgICAgICA1MgorI2RlZmluZSBQUk9TTElDX1JFR19PMVRJSEkgICAgICAgICAgNTMKKyNkZWZpbmUgUFJPU0xJQ19SRUdfTzJUQUxPICAgICAgICAgIDU0CisjZGVmaW5lIFBST1NMSUNfUkVHX08yVEFISSAgICAgICAgICA1NQorI2RlZmluZSBQUk9TTElDX1JFR19PMlRJTE8gICAgICAgICAgNTYKKyNkZWZpbmUgUFJPU0xJQ19SRUdfTzJUSUhJICAgICAgICAgIDU3CisjZGVmaW5lIFBST1NMSUNfUkVHX0ZTS0RBVCAgICAgICAgICA1OAorI2RlZmluZSBQUk9TTElDX1JFR19GU0tERVBUSCAgICAgICAgNTkKKyNkZWZpbmUgUFJPU0xJQ19SRUdfVE9ORFRNRiAgICAgICAgIDYwCisjZGVmaW5lIFBST1NMSUNfUkVHX1VTRVJTVEFUICAgICAgICA2NgorI2RlZmluZSBQUk9TTElDX1JFR19HUElPICAgICAgICAgICAgNjcKKyNkZWZpbmUgUFJPU0xJQ19SRUdfUE1DT04gICAgICAgICAgIDc1CisjZGVmaW5lIFBST1NMSUNfUkVHX0FVVE9SRCAgICAgICAgICA4MAorI2RlZmluZSBQUk9TTElDX1JFR19KTVBFTiAgICAgICAgICAgODEKKyNkZWZpbmUgUEFUQ0hfSk1QVEJMX1NUQVJUX0FERFIgICAgIDgyCisjZGVmaW5lIFBBVENIX0pNUFRCTF9MT1dfQUREUiAgICAgICA4MgorI2RlZmluZSBQUk9TTElDX1JFR19VU0VSTU9ERV9FTkFCTEUgMTI2CisKKy8qIENvbW1vbiBSQU0gbG9jYXRpb25zIGZvciBtb3N0IFByb1NMSUNzICovCisjZGVmaW5lIFBST1NMSUNfUkFNX09TQzFGUkVRICAgICAgICAyNgorI2RlZmluZSBQUk9TTElDX1JBTV9PU0MxQU1QICAgICAgICAgMjcKKyNkZWZpbmUgUFJPU0xJQ19SQU1fT1NDMVBIQVMgICAgICAgIDI4CisjZGVmaW5lIFBST1NMSUNfUkFNX09TQzJGUkVRICAgICAgICAyOQorI2RlZmluZSBQUk9TTElDX1JBTV9PU0MyQU1QICAgICAgICAgMzAKKyNkZWZpbmUgUFJPU0xJQ19SQU1fT1NDMlBIQVMgICAgICAgIDMxCisjZGVmaW5lIFBST1NMSUNfUkFNX1NMT1BFX1JJTkcgICAgICA2MzcKKyNkZWZpbmUgUFJPU0xJQ19SQU1fVl9WTElNICAgICAgICAgICAgICA2NDAKKyNkZWZpbmUgUFJPU0xJQ19SQU1fVk9WX1JJTkdfQkFUICAgIDc1MworI2RlZmluZSBQUk9TTElDX1JBTV9SVFBFUiAgICAgICAgICAgNzU1CisjZGVmaW5lIFBST1NMSUNfUkFNX1ZCQVRSX0VYUEVDVCAgICA3NjgKKyNkZWZpbmUgUFJPU0xJQ19SQU1fRlNLRlJFUTAgICAgICAgIDgzNAorI2RlZmluZSBQUk9TTElDX1JBTV9GU0tGUkVRMSAgICAgICAgODM1CisjZGVmaW5lIFBST1NMSUNfUkFNX0ZTS0FNUDAgICAgICAgICA4MzYKKyNkZWZpbmUgUFJPU0xJQ19SQU1fRlNLQU1QMSAgICAgICAgIDgzNworI2RlZmluZSBQUk9TTElDX1JBTV9GU0swMSAgICAgICAgICAgODM4CisjZGVmaW5lIFBST1NMSUNfUkFNX0ZTSzEwICAgICAgICAgICA4MzkKKyNkZWZpbmUgUFJPU0xJQ19SQU1fUklOR09GICAgICAgICAgIDg0MworI2RlZmluZSBQUk9TTElDX1JBTV9SSU5HRlIgICAgICAgICAgODQ0CisjZGVmaW5lIFBST1NMSUNfUkFNX1JJTkdBTVAgICAgICAgICA4NDUKKyNkZWZpbmUgUFJPU0xJQ19SQU1fUlREQ1RIICAgICAgICAgIDg0NworI2RlZmluZSBQUk9TTElDX1JBTV9SVEFDVEggICAgICAgICAgODQ4CisjZGVmaW5lIFBST1NMSUNfUkFNX1JURENEQiAgICAgICAgICA4NDkKKyNkZWZpbmUgUFJPU0xJQ19SQU1fTENSTUFTSyAgICAgICAgIDg1NAorI2RlZmluZSBQUk9TTElDX1JBTV9JUklOR19MSU0gICAgICAgODYwCisjZGVmaW5lIFBST1NMSUNfUkFNX1ZPVl9SSU5HX0dORCAgICA4OTYKKyNkZWZpbmUgUFJPU0xJQ19SQU1fTVdJX1YgICAgICAgICAgIDkxNAorI2RlZmluZSBQUk9TTElDX1JBTV9EQ0RDX09JVEhSRVNIX0xPICAgIDEwMDYKKyNkZWZpbmUgUFJPU0xJQ19SQU1fRENEQ19PSVRIUkVTSF9ISSAgICAxMDA3CisjZGVmaW5lIFBST1NMSUNfUkFNX0NNREFDX0ZXRCAgICAgICAgICAgMTQ3NgorI2RlZmluZSBQUk9TTElDX1JBTV9DTURBQ19SRVYgICAgICAgICAgIDE0NzcKKyNkZWZpbmUgUFJPU0xJQ19SQU1fQ0FMX1RSTlJEX0RBQ1QgIDE0NTgKKyNkZWZpbmUgUFJPU0xJQ19SQU1fQ0FMX1RSTlJEX0RBQ1IgIDE0NTkKKyNkZWZpbmUgUFJPU0xJQ19SQU1fUkRDX1NVTSAgICAgICAgIDE0OTkKKyNkZWZpbmUgUFJPU0xJQ19SQU1fRENEQ19TVEFUVVMgICAgIDE1NTEKKyNkZWZpbmUgUFJPU0xJQ19SQU1fRENEQ19STkdUWVBFICAgIDE1NjAKKworI2RlZmluZSBQUk9TTElDX0NIQU5fQlJPQURDQVNUICAgICAgICAgIDB4RkYKKworLyogQk9NIENvbnN0YW50cyAqLworI2RlZmluZSBCT01fS0FVRElPX1BNICAgICAgICAgICAgICAgMHg4MDAwMDAwTAorI2RlZmluZSBCT01fS0FVRElPX05PX1BNICAgICAgICAgICAgMHgzQTJFOEJBTAorI2RlZmluZSBCT01fQUNfQURDX0dBSU5fUE0gICAgICAgICAgMHgxNTFFQjgwTAorI2RlZmluZSBCT01fQUNfQURDX0dBSU5fTk9fUE0gICAgICAgMHg5OTk5OUFMCisjZGVmaW5lIEZJWFJMX1ZEQ19TQ0FMRSAgICAgICAgICAgICAweEFFOTI0QjlMICAvKiogdmRjIHNlbnNlIHNjYWxlIHdoZW4gdXNpbmcgZml4ZWQtcmFpbCAqLworCisvKiBHZW5lcmljIENvbnN0YW50cyAqLworI2RlZmluZSBDT01QXzVWICAgICAgICAgICAgICAgICAgICAgMHg1MUVCODJMCisjZGVmaW5lIFZCQVRMXzEzViAgICAgICAgICAgICAgICAgICAweEYwMDAwMEwKKyNkZWZpbmUgQ09NUF8xMFYgICAgICAgICAgICAgICAgICAgIDB4QTNENzA1TAorI2RlZmluZSBaQ0FMX1ZfUkFTVU1fSURFQUxfVkFMICAgICAgMHg4RjAwMDAwTAorI2RlZmluZSBaQ0FMX0RDX0RBQ19PU19WQUwgICAgICAgICAgMHgxRkZFMDAwMEwKKworLyogTUFEQyBDb25zdGFudHMgKi8KKyNkZWZpbmUgU0NBTEVfVl9NQURDICAgICAgICAgICAgICAgIDEwNzQgICAgICAvKiAxLygxMDAwKjkzMS4zMmUtOSkgIG1WICovCisjZGVmaW5lIFNDQUxFX0lfTUFEQyAgICAgICAgICAgICAgICA1OTcgICAgICAgLyogMS8oMWU2KjEuNjc2ZS05KSAgICB1QSAqLworI2RlZmluZSBTQ0FMRV9QX01BREMJCQkJMjM4NgkgIC8qIDEvKDFlMyo0MTkuMDk1ZS05KSAgbVcgKi8KKyNkZWZpbmUgU0NBTEVfUl9NQURDICAgICAgICAgICAgICAgIDE2MDkgICAgICAvKiAxLygxZTMqNjIxLjU1NGUtOSkgIG1WICovCisKKy8qIENhbGlicmF0aW9uIENvbnN0YW50cyAqLworI2RlZmluZSBDQUxfTEJfQ01EQUMgICAgICAgICAgICAgICAgMHgwQworI2RlZmluZSBDQUxfTEJfVFJOUkQgICAgICAgICAgICAgICAgMHgwMworI2RlZmluZSBDQUxfTEJfQUxMICAgICAgICAgICAgICAgICAgMHgwRgorI2RlZmluZSBUSU1FT1VUX01BRENfQ0FMICAgICAgICAgICAgMTAwCisjZGVmaW5lIFRJTUVPVVRfR0VOX0NBTCAgICAgICAgICAgICAzMDAKKyNkZWZpbmUgVElNRU9VVF9MQl9DQUwgICAgICAgICAgICAgIDI0MTAKKworLyogTVdJIENvbnN0YW50cyAqLworI2RlZmluZSBTSUxfTVdJX1VTVEFUX1NFVCAgICAgICAgICAgMHgwNAorI2RlZmluZSBTSUxfTVdJX1VTVEFUX0NMRUFSICAgICAgICAgMHhGQgorI2RlZmluZSBTSUxfTVdJX1ZQS19NQVggICAgICAgICAgICAgMTEwCisjZGVmaW5lIFNJTF9NV0lfVlBLX01BWF9MTyAgICAgICAgICA5NQorI2RlZmluZSBTSUxfTVdJX1ZQS19NSU4gICAgICAgICAgICAgODAKKyNkZWZpbmUgU0lMX01XSV9MQ1JNQVNLX01BWCAgICAgICAgIDIwMDAKKyNkZWZpbmUgU0lMX01XSV9MQ1JNQVNLX01JTiAgICAgICAgIDUKKyNkZWZpbmUgU0lMX01XSV9MQ1JNQVNLX1NDQUxFICAgICAgIDY1NTM2CisjZGVmaW5lIFNJTF9NV0lfRkxBU0hfT0ZGICAgICAgICAgICAwCisjZGVmaW5lIFNJTF9NV0lfRkxBU0hfT04gICAgICAgICAgICAxCisKKy8qIERlcHJpY2F0ZWQgZnVuY3Rpb25zIG5vdyBtYXBwZWQgZGlyZWN0bHkgdG8gU2lWb2ljZSB2ZXJzaW9ucy4uLiAqLworCisjZGVmaW5lIFByb1NMSUNfY2xlYXJFcnJvckZsYWcgICAgICAgICAgICAgICAgICAgU2lWb2ljZV9jbGVhckVycm9yRmxhZworI2RlZmluZSBQcm9TTElDX2NyZWF0ZUNoYW5uZWwgICAgICAgICAgICAgICAgICAgIFNpVm9pY2VfY3JlYXRlQ2hhbm5lbAorI2RlZmluZSBQcm9TTElDX2NyZWF0ZUNvbnRyb2xJbnRlcmZhY2UgICAgICAgICAgIFNpVm9pY2VfY3JlYXRlQ29udHJvbEludGVyZmFjZQorI2RlZmluZSBQcm9TTElDX2NyZWF0ZURldmljZSAgICAgICAgICAgICAgICAgICAgIFNpVm9pY2VfY3JlYXRlRGV2aWNlCisjZGVmaW5lIFByb1NMSUNfZGVzdHJveUNoYW5uZWwgICAgICAgICAgICAgICAgICAgU2lWb2ljZV9kZXN0cm95Q2hhbm5lbAorI2RlZmluZSBQcm9TTElDX2Rlc3Ryb3lDb250cm9sSW50ZXJmYWNlICAgICAgICAgIFNpVm9pY2VfZGVzdHJveUNvbnRyb2xJbnRlcmZhY2UKKyNkZWZpbmUgUHJvU0xJQ19kZXN0cm95RGV2aWNlICAgICAgICAgICAgICAgICAgICBTaVZvaWNlX2Rlc3Ryb3lEZXZpY2UKKyNkZWZpbmUgUHJvU0xJQ19nZXRDaGFubmVsRW5hYmxlICAgICAgICAgICAgICAgICBTaVZvaWNlX2dldENoYW5uZWxFbmFibGUKKyNkZWZpbmUgUHJvU0xJQ19nZXRFcnJvckZsYWcgICAgICAgICAgICAgICAgICAgICBTaVZvaWNlX2dldEVycm9yRmxhZworI2RlZmluZSBQcm9TTElDX1Jlc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpVm9pY2VfUmVzZXQKKyNkZWZpbmUgUHJvU0xJQ19zZXRDaGFubmVsRW5hYmxlICAgICAgICAgICAgICAgICBTaVZvaWNlX3NldENoYW5uZWxFbmFibGUKKyNkZWZpbmUgUHJvU0xJQ19zZXRDb250cm9sSW50ZXJmYWNlQ3RybE9iaiAgICAgICBTaVZvaWNlX3NldENvbnRyb2xJbnRlcmZhY2VDdHJsT2JqCisjZGVmaW5lIFByb1NMSUNfc2V0Q29udHJvbEludGVyZmFjZURlbGF5ICAgICAgICAgU2lWb2ljZV9zZXRDb250cm9sSW50ZXJmYWNlRGVsYXkKKyNkZWZpbmUgUHJvU0xJQ19zZXRDb250cm9sSW50ZXJmYWNlR2V0VGltZSAgICAgICBTaVZvaWNlX3NldENvbnRyb2xJbnRlcmZhY2VHZXRUaW1lCisjZGVmaW5lIFByb1NMSUNfc2V0Q29udHJvbEludGVyZmFjZVJlYWRSQU0gICAgICAgU2lWb2ljZV9zZXRDb250cm9sSW50ZXJmYWNlUmVhZFJBTQorI2RlZmluZSBQcm9TTElDX3NldENvbnRyb2xJbnRlcmZhY2VSZWFkUmVnaXN0ZXIgIFNpVm9pY2Vfc2V0Q29udHJvbEludGVyZmFjZVJlYWRSZWdpc3RlcgorI2RlZmluZSBQcm9TTElDX3NldENvbnRyb2xJbnRlcmZhY2VSZXNldCAgICAgICAgIFNpVm9pY2Vfc2V0Q29udHJvbEludGVyZmFjZVJlc2V0CisjZGVmaW5lIFByb1NMSUNfc2V0Q29udHJvbEludGVyZmFjZVNlbWFwaG9yZSAgICAgU2lWb2ljZV9zZXRDb250cm9sSW50ZXJmYWNlU2VtYXBob3JlCisjZGVmaW5lIFByb1NMSUNfc2V0Q29udHJvbEludGVyZmFjZVRpbWVFbGFwc2VkICAgU2lWb2ljZV9zZXRDb250cm9sSW50ZXJmYWNlVGltZUVsYXBzZWQKKyNkZWZpbmUgUHJvU0xJQ19zZXRDb250cm9sSW50ZXJmYWNlVGltZXJPYmogICAgICBTaVZvaWNlX3NldENvbnRyb2xJbnRlcmZhY2VUaW1lck9iagorI2RlZmluZSBQcm9TTElDX3NldENvbnRyb2xJbnRlcmZhY2VXcml0ZVJBTSAgICAgIFNpVm9pY2Vfc2V0Q29udHJvbEludGVyZmFjZVdyaXRlUkFNCisjZGVmaW5lIFByb1NMSUNfc2V0Q29udHJvbEludGVyZmFjZVdyaXRlUmVnaXN0ZXIgU2lWb2ljZV9zZXRDb250cm9sSW50ZXJmYWNlV3JpdGVSZWdpc3RlcgorI2RlZmluZSBQcm9TTElDX3NldFNXRGVidWdNb2RlICAgICAgICAgICAgICAgICAgIFNpVm9pY2Vfc2V0U1dEZWJ1Z01vZGUKKyNkZWZpbmUgUHJvU0xJQ19TV0luaXRDaGFuICAgICAgICAgICAgICAgICAgICAgICBTaVZvaWNlX1NXSW5pdENoYW4KKyNkZWZpbmUgUHJvU0xJQ19WZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICBTaVZvaWNlX1ZlcnNpb24KKyNkZWZpbmUgUHJvU0xJQ19SZWFkUmVnICAgICAgICAgICAgICAgICAgICAgICAgICBTaVZvaWNlX1JlYWRSZWcKKyNkZWZpbmUgUHJvU0xJQ19Xcml0ZVJlZyAgICAgICAgICAgICAgICAgICAgICAgICBTaVZvaWNlX1dyaXRlUmVnCisjZGVmaW5lIFByb1NMSUNfU2h1dGRvd25DaGFubmVsICAgICAgICAgICAgICAgICAgUHJvU0xJQ19Qb3dlckRvd25Db252ZXJ0ZXIKKyNkZWZpbmUgUHJvU0xJQ19NV0lTZXR1cChQQ0hBTixWUEssTENSKSAgICAgICAgICBQcm9TTElDX01XSVNldFYoUENIQU4sVlBLKQorI2RlZmluZSBQcm9TTElDX01XSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb1NMSUNfTVdJU2V0U3RhdGUKKworI2RlZmluZSBTSV9NQVhfSU5URVJSVVBUUyA0CisKKyNkZWZpbmUgUFJPU0xJQ19FWFRFTkRFRF9HQUlOX01BWCA5CisjZGVmaW5lIFBST1NMSUNfR0FJTl9NQVggNgorI2RlZmluZSBQUk9TTElDX0dBSU5fTUlOIC0zMAorLyoKKyoqIEluaXRpYWxpemF0aW9uIFNlcXVlbmNlIExvY2F0aW9uIC0gVXNlZCBieSAxOHggJiAxN3gKKyovCit0eXBlZGVmIGVudW0KK3sKKyAgSU5JVF9TRVFfQkVHSU5OSU5HLAorICBJTklUX1NFUV9SRUFEX0lELAorICBJTklUX1NFUV9QUkVfUEFUQ0hfTE9BRCwKKyAgSU5JVF9TRVFfUE9TVF9QQVRDSF9MT0FELAorICBJTklUX1NFUV9QUkVfQ0FMLAorICBJTklUX1NFUV9QT1NUX0NBTCwKKyAgSU5JVF9TRVFfRU5ECit9IGluaXRTZXFUeXBlOworCisvKiogQG1haW5wYWdlCisgKiBUaGlzIGRvY3VtZW50IGlzIGEgc3VwcGxlbWVudCB0byB0aGUgUHJvU0xJQyBBUEkgVXNlciBHdWlkZS4gIEl0IGhhcyBtb3N0CisgKiBvZiB0aGUgQVBJcyBkb2N1bWVudGVkIGFuZCBoeXBlcmxpbmtlZC4KKyAqCisgKiBUaGlzIGRvY3VtZW50IGhhcyB0aGUgZm9sbG93aW5nIHRhYnM6CisgKgorICogLSBNYWluIFBhZ2UgKHRoaXMgcGFnZSkgLSBpbnRyb2R1Y3Rpb24gdG8gdGhlIGRvY3VtZW50LgorICogLSBSZWxhdGVkIHBhZ2VzIC0gbWFpbmx5IHRoZSBkZXByZWNhdGVkIGxpc3QgaXMgbG9jYXRlZCBoZXJlLgorICogIEFsdGhvdWdoIHRoZXNlIGlkZW50aWZpZXJzIGFyZSBwcmVzZW50IGluIHRoZSBjdXJyZW50IHJlbGVhc2UsIHRoZXkgYXJlCisgKiAgdGFyZ2V0ZWQgZm9yIGRlbGV0aW9uIGluIGEgZnV0dXJlIHJlbGVhc2UuICBBbnkgZXhpc3RpbmcgY3VzdG9tZXIgY29kZQorICogIHVzaW5nIGRlcHJlY2F0ZWQgaWRlbnRpZmllcnMgc2hvdWxkIGJlIG1vZGlmaWVkIGFzIGluZGljYXRlZC4KKyAqIC0gTW9kdWxlcyAtIHRoaXMgaXMgdGhlIG1lYXQgb2YgdGhlIGRvY3VtZW50IC0gdGhpcyBoYXMgZWFjaCBmdW5jdGlvbmFsIGdyb3VwIGluIG91dGxpbmUgZm9ybWF0IGxpc3RlZCBoZXJlLgorICogLSBEYXRhIFN0cnVjdHVyZXMgLSBUaGlzIGhhcyBldmVyeSBkYXRhIHN0cnVjdHVyZSBsaXN0ZWQgaW4gaW4gdGhlIFByb1NMSUMgQVBJIGluIGFscGhhYmV0aWNhbCBvcmRlci4KKyAqIC0gRmlsZXMgLSB0aGlzIGhhcyB0aGUgc291cmNlIGZpbGVzIGluIGh5cGVybGluayBmb3JtYXQuICBAbm90ZSBJbiBzb21lIGNhc2VzIHRoZSBoeXBlcmxpbmsgZ2VuZXJhdG9yIHdpbGwgbm90IHByb3Blcmx5CisgKiAgZ2VuZXJhdGUgdGhlIGNvcnJlY3QgcmVmZXJlbmNlIG9yIG5vdCBiZSBhYmxlIHRvIGZpbmQgaXQuICBJbiB0aGlzIGNhc2UgcGxlYXNlIHVzZSBhbiBhbHRlcm5hdGl2ZSBtZXRob2QuCisgKgorICovCisKKy8qKiBAZGVmZ3JvdXAgUFJPU0xJQ19UWVBFUyBQcm9TTElDIEdlbmVyYWwgRGF0YXR5cGVzL0Z1bmN0aW9uIERlZmluaXRpb25zCisgKiBUaGlzIHNlY3Rpb24gZG9jdW1lbnRzIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gdGhlCisgKiBQcm9TTElDL0ZYUyBjaGlwc2V0cy4KKyAqIEB7CisgKi8KKworLyoKKyogLS0tLS0tLS0tLS0tLS0tLVByb1NMSUMgR2VuZXJpYyBEYXRhVHlwZXMvRnVuY3Rpb24gRGVmaW5pdGlvbnMtLS0tCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworCisjZGVmaW5lIE1BWF9QUk9TTElDX0lSUVMgMzIgLyoqPCBIb3cgbWFueSBpbnRlcnJ1cHRzIGFyZSBzdXBwb3J0ZWQgaW4gdGhlIFByb1NMSUMgKi8KKworI2lmZGVmIEVOQUJMRV9ERUJVRworI2RlZmluZSBQUk9TTElDX1BSSU5UX0VSUk9SKENIQU4sIEVSUk9SKVwKKyAgTE9HUFJJTlQoIiVzRXJyb3IgZW5jb3VudGVyZWQgb24gY2hhbm5lbDogJWQgZmF1bHQgY29kZTogJWRcbiIsXAorICAgIExPR1BSSU5UX1BSRUZJWCwgKENIQU4pLT5jaGFubmVsLCAoRVJST1IpKQorI2Vsc2UKKyNkZWZpbmUgUFJPU0xJQ19QUklOVF9FUlJPUihDSEFOLCBFUlJPUikKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorKiBNYXAgUHJvc2xpYyB0eXBlcyB0byBTaVZvaWNlIHR5cGVzCisqLwordHlwZWRlZiBTaVZvaWNlQ29udHJvbEludGVyZmFjZVR5cGUgY29udHJvbEludGVyZmFjZVR5cGU7IC8qKjwgTWFwIFByb1NMSUMgdG8gU2lWb2ljZSB0eXBlICovCit0eXBlZGVmIFNpVm9pY2VDb250cm9sSW50ZXJmYWNlVHlwZSBwcm9zbGljQ29udHJvbEludGVyZmFjZVR5cGU7IC8qKjwgTWFwIFByb1NMSUMgdG8gU2lWb2ljZSB0eXBlICovCit0eXBlZGVmIFNpVm9pY2VEZXZpY2VUeXBlIFByb3NsaWNEZXZpY2VUeXBlOyAvKio8IE1hcCBQcm9TTElDIHRvIFNpVm9pY2UgdHlwZSAqLwordHlwZWRlZiBTaVZvaWNlQ2hhblR5cGUgcHJvc2xpY0NoYW5UeXBlOyAvKio8IE1hcCBQcm9TTElDIHRvIFNpVm9pY2UgdHlwZSAqLworCisvKioKKyogRGVmaW5lIGNoYW5uZWwgYW5kIGRldmljZSB0eXBlIHBvaW50ZXJzCisqLwordHlwZWRlZiBQcm9zbGljRGV2aWNlVHlwZQorKnByb3NsaWNEZXZpY2VUeXBlX3B0cjsgLyoqPCBTaG9ydGN1dCBmb3IgcG9pbnRlciB0byBhIFByb1NMSUMgZGV2aWNlIHR5cGUgKi8KK3R5cGVkZWYgcHJvc2xpY0NoYW5UeXBlCisqcHJvc2xpY0NoYW5UeXBlX3B0cjsgLyoqPCBTaG9ydGN1dCBmb3IgcG9pbnRlciB0byBhIFByb1NMSUMgY2hhbm5lbCB0eXBlICovCisKKy8qKiBAfSBQUk9TTElDX1RZUEVTICovCisKKy8qKiBAYWRkdG9ncm91cCBIQ19ERVRFQ1QKKyAqIEB7CisgKi8KKy8qKgorKiBUaGlzIGlzIHN0cnVjdHVyZSB1c2VkIHRvIHN0b3JlIHB1bHNlIGRpYWwgaW5mb3JtYXRpb24KKyovCit0eXBlZGVmIHN0cnVjdCB7CisJdUludDggY3VycmVudFB1bHNlRGlnaXQ7CisJdm9pZCAqb25Ib29rVGltZTsgLyoqPCBUaW1lc3RhbXAgZm9yIHdoZW4gdGhlIG9uaG9vayBkZXRlY3Rpb24gb2NjdXJlZCAqLworCXZvaWQgKm9mZkhvb2tUaW1lOyAvKio8IFRpbWVzdGFtcCBmb3Igd2hlbiB0aGUgb2ZmaG9vayBkZXRlY3Rpb24gb2NjdXJlZCAqLworfSBwdWxzZURpYWxUeXBlOworCisvKioKKyogRGVmaW5lcyBzdHJ1Y3R1cmUgZm9yIGNvbmZpZ3VyaW5nIHB1bHNlIGRpYWwgZGV0ZWN0aW9uCisqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVJbnQ4IG1pbk9uSG9vazsgLyoqPCBNaW4gbVNlYyBmb3Igb25ob29rICovCisJdUludDggbWF4T25Ib29rOyAvKio8IE1heCBtU2VjIGZvciBvbmhvb2sgKi8KKwl1SW50OCBtaW5PZmZIb29rOyAvKio8IE1pbiBtU2VjIGZvciBvZmZob29rICovCisJdUludDggbWF4T2ZmSG9vazsgLyoqPCBNYXggbVNlYyBmb3Igb2ZmaG9vayAqLworfSBwdWxzZURpYWxfQ2ZnOworLyoqIEB9IFBEX0RFVEVDVCAqLworCisvKioKKyogVGhpcyBpcyBzdHJ1Y3R1cmUgdXNlZCB0byBzdG9yZSBwdWxzZSBkaWFsIGluZm9ybWF0aW9uCisqLworI2RlZmluZSBTSV9IQ19OT19BQ1RJVklUWSAgICAgMHgxMAorI2RlZmluZSBTSV9IQ19ORUVEX01PUkVfUE9MTFMgMHgyMAorI2RlZmluZSBTSV9IQ19PTkhPT0tfVElNRU9VVCAgMHg0MQorI2RlZmluZSBTSV9IQ19PRkZIT09LX1RJTUVPVVQgMHg0MgorI2RlZmluZSBTSV9IQ19IT09LRkxBU0ggICAgICAgMHg0MworCisjZGVmaW5lIFNJX0hDX05PTkRJR0lUX0RPTkUoWCkgKChYKSAmIDB4NDApCisjZGVmaW5lIFNJX0hDX0RJR0lUX0RPTkUoWCkgICAgKChYKSAmJiAoKFgpIDwgMTEpKQorCit0eXBlZGVmIHN0cnVjdAoreworICB1SW50OCBjdXJyZW50UHVsc2VEaWdpdDsKKyAgdUludDggbGFzdF9ob29rX3N0YXRlOworICB1SW50OCBsb29raW5nRm9yVGltZW91dDsKKyAgdUludDggbGFzdF9zdGF0ZV9yZXBvcnRlZDsKKyAgdm9pZCAqaG9va1RpbWU7IC8qKjwgVGltZXN0YW1wIGZvciB3aGVuIHRoZSBvbmhvb2sgZGV0ZWN0aW9uIG9jY3VycmVkICovCit9IGhvb2tDaGFuZ2VUeXBlOworCisvKioKKyogRGVmaW5lcyBzdHJ1Y3R1cmUgZm9yIGNvbmZpZ3VyaW5nIGhvb2sgY2hhbmdlIGRldGVjdGlvbi4gIFRpbWVzIGFyZSBpbiBtU2VjLgorKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIHVJbnQxNiBtaW5Pbkhvb2s7IC8qKjwgTWluIG1TZWMgZm9yIG9uaG9vay9icmVhayB0aW1lICAqLworICB1SW50MTYgbWF4T25Ib29rOyAvKio8IE1heCBtU2VjIGZvciBvbmhvb2svYnJlYWsgdGltZSAgKi8KKyAgdUludDE2IG1pbk9mZkhvb2s7IC8qKjwgTWluIG1TZWMgZm9yIG9mZmhvb2svbWFrZSB0aW1lICovCisgIHVJbnQxNiBtYXhPZmZIb29rOyAvKio8IE1heCBtU2VjIGZvciBvZmZob29rL21ha2UgdGltZSAqLworICB1SW50MTYgbWluSW50ZXJEaWdpdDsgLyoqPCBNaW5pbXVtIGludGVyZGlnaXQgdGltZSAqLworICB1SW50MTYgbWluSG9va0ZsYXNoOyAvKio8IG1pbmltdW0gaG9vayBmbGFzaCB0aW1lICovCisgIHVJbnQxNiBtYXhIb29rRmxhc2g7IC8qKjwgbWF4aW11bSBob29rIGZsYXNoIHRpbWUgKi8KKyAgdUludDE2IG1pbkhvb2s7IC8qKjwgTWluaW11bSBob29rIHRpbWUsIHdoaWNoIHNob3VsZCBiZSA+PiB0aGFuIG1heEhvb2tGbGFzaCAqLworfSBob29rQ2hhbmdlX0NmZzsKKy8qKiBAfSBIQ19ERVRFQ1QqLworCisKKy8qKiBAYWRkdG9ncm91cCBQUk9TTElDX0lOVEVSUlVQVFMKKyAqIEB7CisgKi8KKy8qKgorKiBJbnRlcnJ1cHQgdGFncworKi8KKworLyogTUFJTlRBSU5FUiBOT1RFOiBpZiB0aGlzIGVudW0gY2hhbmdlcywgdXBkYXRlIGludGVycnVwdC5jIGluIHRoZSBBUEkgZGVtbyAqLwordHlwZWRlZiBlbnVtCit7CisgIElSUV9PU0MxX1QxLAorICBJUlFfT1NDMV9UMiwKKyAgSVJRX09TQzJfVDEsCisgIElSUV9PU0MyX1QyLAorICBJUlFfUklOR19UMSwKKyAgSVJRX1JJTkdfVDIsCisgIElSUV9QTV9UMSwKKyAgSVJRX1BNX1QyLAorICBJUlFfRlNLQlVGX0FWQUlMLCAvKio8IEZTSyBGSUZPIGRlcHRoIHJlYWNoZWQgKi8KKyAgSVJRX1ZCQVQsCisgIElSUV9SSU5HX1RSSVAsIC8qKjwgUmluZyBUcmlwIGRldGVjdGVkICovCisgIElSUV9MT09QX1NUQVRVUywgIC8qKjwgTG9vcCBDdXJyZW50IGNoYW5nZWQgKi8KKyAgSVJRX0xPTkdfU1RBVCwKKyAgSVJRX1ZPQ19UUkFDSywKKyAgSVJRX0RUTUYsICAgICAgICAgLyoqPCBEVE1GIERldGVjdGVkIC0gY2FsbCBAcmVmIFByb1NMSUNfRFRNRlJlYWREaWdpdCB0byBkZWNvZGUgdGhlIHZhbHVlICovCisgIElSUV9JTkRJUkVDVCwgICAgIC8qKjwgSW5kaXJlY3QvUkFNIGFjY2VzcyBjb21wbGV0ZWQgKi8KKyAgSVJRX1RYTURNLAorICBJUlFfUlhNRE0sCisgIElSUV9QUTEsICAgICAgICAgIC8qKjwgUG93ZXIgYWxhcm0gMSAqLworICBJUlFfUFEyLCAgICAgICAgICAvKio8IFBvd2VyIGFsYXJtIDIgKi8KKyAgSVJRX1BRMywgICAgICAgICAgLyoqPCBQb3dlciBhbGFybSAzICovCisgIElSUV9QUTQsICAgICAgICAgIC8qKjwgUG93ZXIgYWxhcm0gNCAqLworICBJUlFfUFE1LCAgICAgICAgICAvKio8IFBvd2VyIGFsYXJtIDUgKi8KKyAgSVJRX1BRNiwgICAgICAgICAgLyoqPCBQb3dlciBhbGFybSA2ICovCisgIElSUV9SSU5HX0ZBSUwsCisgIElSUV9DTV9CQUwsCisgIElSUV9VU0VSXzAsCisgIElSUV9VU0VSXzEsCisgIElSUV9VU0VSXzIsCisgIElSUV9VU0VSXzMsCisgIElSUV9VU0VSXzQsCisgIElSUV9VU0VSXzUsCisgIElSUV9VU0VSXzYsCisgIElSUV9VU0VSXzcsCisgIElSUV9EU1AsCisgIElSUV9NQURDX0ZTLAorICBJUlFfUF9IVklDLAorICBJUlFfUF9USEVSTSwgLyoqPCBUaGVybWFsIGFsYXJtICovCisgIElSUV9QX09GRkxECit9IFByb3NsaWNJbnQ7CisKKy8qKgorKiBEZWZpbmVzIHN0cnVjdHVyZSBvZiBpbnRlcnJ1cHQgZGF0YSAtIHVzZWQgYnkgQHJlZiBQcm9TTElDX0dldEludGVycnVwdHMKKyovCit0eXBlZGVmIHN0cnVjdAoreworICBQcm9zbGljSW50CisgICppcnFzOyAvKio8IFBvaW50ZXIgb2YgYW4gYXJyYXkgb2Ygc2l6ZSBNQVhfUFJPU0xJQ19JUlFTICh0aGlzIGlzIHRvIGJlIGFsbG9jYXRlZCBieSB0aGUgY2FsbGVyKSAqLworICB1SW50OCBudW1iZXI7IC8qKjwgTnVtYmVyIG9mIElSUXMgZGV0ZWN0ZWQvcGVuZGluZyAqLworfSBwcm9zbGljSW50VHlwZTsKKworCisvKiogQH0gUFJPU0xJQ19JTlRFUlJVUFRTICovCisKKy8qKiBAYWRkdG9ncm91cCBUT05FX0dFTgorICogQHsKKyAqLworLyoqCisqIERlZmluZXMgc3RydWN0dXJlIGZvciBjb25maWd1cmluZyAxIG9zY2lsbGF0b3IgLSBzZWUgeW91ciBkYXRhIHNoZWV0IGZvciBzcGVjaWZpY3Mgb3IgdXNlIHRoZSBjb25maWd1cmF0aW9uCisqIHRvb2wgdG8gaGF2ZSB0aGlzIGZpbGxlZCBpbiBmb3IgeW91LgorKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIHJhbURhdGEgZnJlcTsKKyAgcmFtRGF0YSBhbXA7CisgIHJhbURhdGEgcGhhczsKKyAgdUludDggdGFsbzsKKyAgdUludDggdGFoaTsKKyAgdUludDggdGlsbzsKKyAgdUludDggdGloaTsKK30gT3NjaWxsYXRvcl9DZmc7CisKKy8qKgorICogRGVmaW5lcyBzdHJ1Y3R1cmUgZm9yIHRvbmUgY29uZmlndXJhdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgT3NjaWxsYXRvcl9DZmcgb3NjMTsKKyAgT3NjaWxsYXRvcl9DZmcgb3NjMjsKKyAgdUludDggb21vZGU7Cit9IFByb1NMSUNfVG9uZV9DZmc7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIHJhbURhdGEgZnNrWzJdOworICByYW1EYXRhIGZza2FtcFsyXTsKKyAgcmFtRGF0YSBmc2tmcmVxWzJdOworICB1SW50OCBlaWdodEJpdDsKKyAgdUludDggZnNrZGVwdGg7Cit9IFByb1NMSUNfRlNLX0NmZzsKKy8qKiBAfSBUT05FX0dFTiAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogQGFkZHRvZ3JvdXAgU0lHTkFMSU5HCisgKiBAeworICovCisvKioKKyogSG9vayBzdGF0ZXMgLSByZXR1cm5lZCBieSBAcmVmIFByb1NMSUNfUmVhZEhvb2tTdGF0dXMoKQorKi8KK2VudW0KK3sKKyAgUFJPU0xJQ19PTkhPT0ssIC8qKjwgSG9vayBzdGF0ZSBpcyBvbmhvb2sgKi8KKyAgUFJPU0xJQ19PRkZIT09LIC8qKjwgSG9vayBzdGF0ZSBpcyBvZmZob29rICovCit9OworCisjaWZuZGVmIFNJVk9JQ0VfQ0ZHX05FV1RZUEVTX09OTFkKK2VudW0KK3sKKyAgT05IT09LID0gUFJPU0xJQ19PTkhPT0ssIC8qKjwgQGRlcHJlY2F0ZWQtIFBsZWFzZSB1c2UgUFJPU0xJQ19PTkhPT0sgYW5kIFBST1NMSUNfT0ZGSE9PSyBmb3IgZnV0dXJlIGNvZGUgZGV2ZWxvcG1lbnQgKi8KKyAgT0ZGSE9PSyA9IFBST1NMSUNfT0ZGSE9PSworfTsKKyNlbmRpZgorCisvKiogQH0gU0lHTkFMSU5HICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiBAYWRkdG9ncm91cCBQQ01fQ09OVFJPTAorICogQHsKKyogTG9vcGJhY2sgbW9kZXMKKyovCit0eXBlZGVmIGVudW0KK3sKKyAgUFJPU0xJQ19MT09QQkFDS19OT05FLCAvKio8IExvb3BiYWNrIGRpc2FibGVkICovCisgIFBST1NMSUNfTE9PUEJBQ0tfRElHLCAgLyoqPCBMb29wYmFjayBpcyB0b3dhcmQgdGhlIFBDTSBzaWRlICovCisgIFBST1NMSUNfTE9PUEJBQ0tfQU5BICAgLyoqPCBMb29wYmFjayBpcyB0b3dhcmQgdGhlIGFuYWxvZyBzaWRlICovCit9IFByb3NsaWNMb29wYmFja01vZGVzOworCisvKioKKyogTXV0ZSBvcHRpb25zIC0gd2hpY2ggZGlyZWN0aW9uIHRvIG11dGUKKyovCit0eXBlZGVmIGVudW0KK3sKKyAgUFJPU0xJQ19NVVRFX05PTkUgPSAwLCAgLyoqPCBEb24ndCBtdXRlICovCisgIFBST1NMSUNfTVVURV9SWCA9IDB4MSwgIC8qKjwgTXV0ZSB0b3dhcmQgdGhlIFJYIHNpZGUgKi8KKyAgUFJPU0xJQ19NVVRFX1RYID0gMHgyLCAgLyoqPCBNdXRlIHRvd2FyZCB0aGUgVFggc2lkZSAqLworICBQUk9TTElDX01VVEVfQUxMID0gMHgzICAvKio8IE11dGUgYm90aCBkaXJlY3Rpb25zICovCit9IFByb3NsaWNNdXRlTW9kZXM7CisKKy8qKiBAfSBQQ01fQ09OVFJPTCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogQGFkZHRvZ3JvdXAgR0FJTl9DT05UUk9MCisgKiBAeworKiBQYXRoIFNlbGVjdG9yCisqLworZW51bQoreworICBUWEFDR0FJTl9TRUwgPSAwLAorICBSWEFDR0FJTl9TRUwgPSAxCit9OworCisKKy8qCisqKiBEZWZpbmVzIHN0cnVjdHVyZSBmb3IgY29uZmlndXJpbmcgYXVkaW8gZ2FpbiBvbiB0aGUgZmx5CisqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgcmFtRGF0YSBhY2dhaW47CisgIHVJbnQ4IG11dGU7CisgIHJhbURhdGEgYWNlcV9jMDsKKyAgcmFtRGF0YSBhY2VxX2MxOworICByYW1EYXRhIGFjZXFfYzI7CisgIHJhbURhdGEgYWNlcV9jMzsKK30gUHJvU0xJQ19hdWRpb0dhaW5fQ2ZnOworCisvKiogQH0gR0FJTl9DT05UUk9MICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiBAYWRkdG9ncm91cCBMSU5FU1RBVFVTCisgKiBAeworICovCisvKioKKyogZW51bWVyYXRpb24gb2YgdGhlIFByb3NsaWMgcG9sYXJpdHkgcmV2ZXJzYWwgc3RhdGVzIC0gdXNlZCBieSBQcm9TTElDX1BvbFJldiBBUEkKKyovCitlbnVtCit7CisgIFBPTFJFVl9TVE9QLCAvKio8IFN0b3AgUG9sYXJpdHkgcmV2ZXJzYWwgKi8KKyAgUE9MUkVWX1NUQVJULCAvKio8IFN0YXJ0IFBvbGFyaXR5IHJldmVyc2FsICovCisgIFdJTktfU1RBUlQsIC8qKjwgU3RhcnQgV2luayAqLworICBXSU5LX1NUT1AgLyoqPCBTdG9wIFdpbmsgKi8KK307CisKKy8qKgorKiBEZWZpbmVzIGluaXRpYWxpemF0aW9uIGRhdGEgc3RydWN0dXJlcworKiBMaW5lZmVlZCBzdGF0ZXMgLSB1c2VkIGluIEByZWYgUHJvU0xJQ19TZXRMaW5lZmVlZFN0YXR1cyBhbmQgQHJlZiBQcm9TTElDX1NldExpbmVmZWVkU3RhdHVzQnJvYWRjYXN0CisqLworZW51bQoreworICBMRl9PUEVOLCAgICAgICAgICAvKio8IE9wZW4gY2lyY3VpdCAqLworICBMRl9GV0RfQUNUSVZFLCAgICAvKio8IEZvcndhcmQgYWN0aXZlICovCisgIExGX0ZXRF9PSFQsICAgICAgIC8qKjwgRm9yd2FyZCBhY3RpdmUsIG9uaG9vayB0cmFuc21pc3Npb24gKHVzZWQgZm9yIENJRC9WTVdJKSAqLworICBMRl9USVBfT1BFTiwgICAgICAvKio8IFRpcCBvcGVuICovCisgIExGX1JJTkdJTkcsICAgICAgIC8qKjwgUmluZ2luZyAqLworICBMRl9SRVZfQUNUSVZFLCAgICAvKio8IFJldmVyc2UgYmF0dGVyeS9wb2xhcml0eSByZXZlcnNlZCwgYWN0aXZlICovCisgIExGX1JFVl9PSFQsICAgICAgIC8qKjwgUmV2ZXJzZSBiYXR0ZXJ5L3BvbGFyaXR5IHJldmVyc2VkLCBhY3RpdmUsIG9uaG9vayB0cmFuc21pc3Npb24gKHVzZWQgZm9yIENJRC9WTVdJKSAqLworICBMRl9SSU5HX09QRU4gICAgICAvKio8IFJpbmcgb3BlbiAqLworfSA7CisvKiogQH0gTElORVNUQVRVUyAqLworCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogQGFkZHRvZ3JvdXAgR0VOX0NGRworICogQHsKKyAqLworCisvKioKKyogRGVmaW5lcyBpbml0aWFsaXphdGlvbiBkYXRhIHN0cnVjdHVyZXMKKyovCit0eXBlZGVmIHN0cnVjdAoreworICB1SW50OCBhZGRyZXNzOworICB1SW50OCBpbml0VmFsdWU7Cit9IFByb3NsaWNSZWdJbml0OworCit0eXBlZGVmIHN0cnVjdAoreworICB1SW50MTYgYWRkcmVzczsKKyAgcmFtRGF0YSBpbml0VmFsdWU7Cit9IFByb3NsaWNSQU1Jbml0OworCisvKioKKyogUHJvU0xJQyBwYXRjaCBvYmplY3QKKyovCit0eXBlZGVmIHN0cnVjdAoreworICBjb25zdCByYW1EYXRhICpwYXRjaERhdGE7IC8qKjwgMTAyNCBtYXgqLworICBjb25zdCB1SW50MTYgKnBhdGNoRW50cmllczsgLyoqPCA4IG1heCAqLworICBjb25zdCB1SW50MzIgcGF0Y2hTZXJpYWw7CisgIGNvbnN0IHVJbnQxNiAqcHNSYW1BZGRyOyAgLyoqPCAxMjggbWF4ICovCisgIGNvbnN0IHJhbURhdGEgKnBzUmFtRGF0YTsgLyoqPCAxMjggbWF4ICovCit9IHByb3NsaWNQYXRjaDsKKworLyoqIEB9IEdFTl9DRkcgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogQGFkZHRvZ3JvdXAgUklOR19DT05UUk9MCisgKiBAeworICovCisvKioKKyogUmluZ2luZyB0eXBlIG9wdGlvbnMKKyogUmluZ2luZyB0eXBlIG9wdGlvbnMgLSBUcmFwZXpvaWRhbCB3LyBhIENyZXN0IGZhY3RvciBDRjExPSBDcmVzdCBmYWN0b3IgMS4xIG9yIHNpbnVzb2lkYWwuCisqLwordHlwZWRlZiBlbnVtCit7CisgIFByb1NMSUNfUklOR19UUkFQX0NGMTEsCisgIFByb1NMSUNfUklOR19UUkFQX0NGMTIsCisgIFByb1NMSUNfUklOR19UUkFQX0NGMTMsCisgIFByb1NMSUNfUklOR19UUkFQX0NGMTQsCisgIFByb1NMSUNfUklOR19UUkFQX0NGMTUsCisgIFByb1NMSUNfUklOR19UUkFQX0NGMTYsCisgIFByb1NMSUNfUklOR19TSU5FIC8qKio8IFBsYWluIG9sZCBzaW51c29pZGFsIHJpbmdpbmcgKi8KK30gUHJvU0xJQ19SSU5HVFlQRV9UOworCisvKioKKyogUmluZ2luZyAocHJvdmlzaW9uZWQpIG9iamVjdAorKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIFByb1NMSUNfUklOR1RZUEVfVAorICByaW5ndHlwZTsgIC8qKjwgSXMgdGhpcyBhIHNpbnVzb2lkIG9yIGEgdHJhcGV6b2lkYWwgcmluZyBzaGFwZT8gKi8KKyAgdUludDggZnJlcTsgICAgICAgICAgICAgICAgICAgLyoqPCBJbiB0ZXJtcyBvZiBIeiAqLworICB1SW50OCBhbXA7ICAgICAgICAgICAgICAgICAgICAvKio8IGluIHRlcm1zIG9mIDEgdm9sdCB1bml0cyAqLworICB1SW50OCBvZmZzZXQ7ICAgICAgICAgICAgICAgICAvKio8IEluIHRlcm1zIG9mIDEgdm9sdCB1bml0cyAqLworfSBQcm9TTElDX2RiZ1JpbmdDZmc7CisKKworLyoqIEB9IFJJTkdfQ09OVFJPTCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyogTGluZSBNb25pdG9yIC0gcmV0dXJuZWQgYnkgQHJlZiBQcm9TTElDX0xpbmVNb25pdG9yCisqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgaW50MzIgIHZ0cjsJCS8qKjwgVm9sdGFnZSwgdGlwLXJpbmcgaW4gbVYgKi8KKyAgaW50MzIgIHZ0aXA7CS8qKjwgVm9sdGFnZSwgdGlwLWdyb3VuZCBpbiBtViAqLworICBpbnQzMiAgdnJpbmc7CS8qKjwgVm9sdGFnZSwgcmluZy1ncm91bmQgaW4gbVYgKi8KKyAgaW50MzIgIHZiYXQ7CS8qKjwgVm9sdGFnZSwgYmF0dGVyeSBpbiBtViAqLworICBpbnQzMiAgdmRjOwkJLyoqPCBWb2x0YWdlLCBWZGMgaW4gbVYgKi8KKyAgaW50MzIgIHZsb25nOwkvKio8IFZvbHRhZ2UsIGxvbmdpdHVkaW5hbCBpbiBtViAqLworICBpbnQzMiAgaXRyOwkJLyoqPCBMb29wIGN1cnJlbnQsIGluIHVBIHRpcC1yaW5nICovCisgIGludDMyICBpdGlwOwkvKio8IExvb3AgY3VycmVudCwgaW4gdUEgdGlwICovCisgIGludDMyICBpcmluZzsJLyoqPCBMb29wIGN1cnJlbnQsIGluIHVBIHJpbmcgKi8KKyAgaW50MzIgIGlsb25nOwkvKio8IExvb3AgY3VycmVudCwgaW4gdUEgbG9uZ2l0dWRpbmFsICovCisgIGludDMyICBwX2h2aWM7ICAvKio8IE9uLWNoaXAgUG93ZXIgQ2FsY3VsYXRpb24gaW4gbXcgKi8KK30gcHJvc2xpY01vbml0b3JUeXBlOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogQGFkZHRvZ3JvdXAgUFJPU0xJQ19EQ0ZFRUQKKyAqIEB7CisgKi8KKy8qKgorKiBQb3dlcnNhdmUKKyovCitlbnVtCit7CisgIFBXUlNBVkVfRElTQUJMRSA9IDAsIC8qKjwgRGlzYWJsZSBwb3dlciBzYXZpbmdzIG1vZGUgKi8KKyAgUFdSU0FWRV9FTkFCTEUgID0gMSAgIC8qKjwgRW5hYmxlIHBvd2VyIHNhdmluZ3MgbW9kZSAqLworfTsKKworLyoqCisqKiBEQyBGZWVkIFByZXNldAorKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIHJhbURhdGEgc2xvcGVfdmxpbTsKKyAgcmFtRGF0YSBzbG9wZV9yZmVlZDsKKyAgcmFtRGF0YSBzbG9wZV9pbGltOworICByYW1EYXRhIGRlbHRhMTsKKyAgcmFtRGF0YSBkZWx0YTI7CisgIHJhbURhdGEgdl92bGltOworICByYW1EYXRhIHZfcmZlZWQ7CisgIHJhbURhdGEgdl9pbGltOworICByYW1EYXRhIGNvbnN0X3JmZWVkOworICByYW1EYXRhIGNvbnN0X2lsaW07CisgIHJhbURhdGEgaV92bGltOworICByYW1EYXRhIGxjcm9uaGs7CisgIHJhbURhdGEgbGNyb2ZmaGs7CisgIHJhbURhdGEgbGNyZGJpOworICByYW1EYXRhIGxvbmdoaXRoOworICByYW1EYXRhIGxvbmdsb3RoOworICByYW1EYXRhIGxvbmdkYmk7CisgIHJhbURhdGEgbGNybWFzazsKKyAgcmFtRGF0YSBsY3JtYXNrX3BvbHJldjsKKyAgcmFtRGF0YSBsY3JtYXNrX3N0YXRlOworICByYW1EYXRhIGxjcm1hc2tfbGluZWNhcDsKKyAgcmFtRGF0YSB2Y21fb2g7CisgIHJhbURhdGEgdm92X2JhdDsKKyAgcmFtRGF0YSB2b3ZfZ25kOworfSBQcm9TTElDX0RDZmVlZF9DZmc7CisKKy8qKiBAfSBQUk9TTElDX0RDRkVFRCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogQGRlZmdyb3VwIFByb1NMSUNfQVBJIFByb1NMSUMgQVBJCisqIHByb3NsaWMuYyBmdW5jdGlvbiBkZWNsYXJhdGlvbnMKKyogQHsKKyovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiBAZGVmZ3JvdXAgRElBR05PU1RJQ1MgRGlhZ25vc3RpY3MKKyAqIFRoZSBmdW5jdGlvbnMgaW4gdGhpcyBncm91cCBhbGxvdyBvbmUgdG8gbW9uaXRvciB0aGUgbGluZSBzdGF0ZSBmb3IgYWJub3JtYWwKKyAqIHNpdHVhdGlvbnMuCisgKiBAeworICovCisKKy8qKgorKiBUZXN0IFN0YXRlIC0gdXNlZCBpbiBwb2xsZWQgdGVzdHMgKHN1Y2ggYXMgUFNUTiBDaGVjaykKKyovCit0eXBlZGVmIHN0cnVjdAoreworICBpbnQzMiBzdGFnZTsgICAgICAgICAgICAgICAvKio8IFdoYXQgc3RhdGUgaXMgdGhlIHRlc3QgaW4gKi8KKyAgaW50MzIgd2FpdEl0ZXJhdGlvbnM7ICAgICAgLyoqPCBIb3cgbWFueSBpdGVyYXRpb25zIHRvIHN0YXkgaW4gYSBwYXJ0aWN1bGFyIHN0YXRlICovCisgIGludDMyIHNhbXBsZUl0ZXJhdGlvbnM7ICAgIC8qKjwgSG93IG1hbnkgIHNhbXBsZXMgaGF2ZSBiZWVuIGNvbGxlY3RlZCAqLworfSBwcm9zbGljVGVzdFN0YXRlVHlwZTsKKworLyoqCisgKiBAYnJpZWYKKyAqICBUaGlzIGZ1bmN0aW9uIGFsbG93cyBvbmUgdG8gbW9uaXRvciB0aGUgaW5zdGFudGFuZW91cyB2b2x0YWdlIGFuZAorICogIGxvb3AgY3VycmVudCB2YWx1ZXMgc2VlbiBvbiB0aXAvcmluZy4KKyAqCisgKiAgQHBhcmFtW2luXSBwUHJvc2xpYyAtIHdoaWNoIGNoYW5uZWwgc2hvdWxkIHRoZSBkYXRhIGJlIGNvbGxlY3RlZCBmcm9tCisgKiAgQHBhcmFtW2luLG91dF0gKm1vbml0b3IgLSAgdGhlIGRhdGEgY29sbGVjdGVkCisgKiAgQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqCisgKi8KKworaW50IFByb1NMSUNfTGluZU1vbml0b3IocHJvc2xpY0NoYW5UeXBlX3B0ciBwUHJvc2xpYywKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3NsaWNNb25pdG9yVHlwZSAqbW9uaXRvcik7CisKKy8qKgorICogQGJyaWVmCisgKiAgVGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgTUFEQyBhIHNjYWxlZCB2YWx1ZQorICoKKyAqICBAcGFyYW1baW5dIHBQcm9zbGljIC0gd2hpY2ggY2hhbm5lbCBzaG91bGQgdGhlIGRhdGEgYmUgY29sbGVjdGVkIGZyb20KKyAqICBAcGFyYW1baW5dIGFkZHIgIC0gYWRkcmVzcyB0byByZWFkIGZyb20gKE1BRENfSUxPT1AsIE1BRENfSVRJUCwgZXRjKS4KKyAqICBAcGFyYW1baW5dIHNjYWxlICAtIHNjYWxlIHRvIHVzZSAoMCA9IGRldGVybWluZSBiYXNlZCB1cG9uIE1BREMgYWRkcmVzcykKKyAqICBAcmV0dmFsIGludDMyIC0gc2NhbGVkIHZhbHVlIHJlcXVlc3RlZCBvciAtMSBpZiBub3Qgc3VwcG9ydGVkLgorICoKKyAqLworCitpbnQzMiBQcm9TTElDX1JlYWRNQURDU2NhbGVkKHByb3NsaWNDaGFuVHlwZV9wdHIgcFByb3NsaWMsIHVJbnQxNiBhZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMiBzY2FsZSk7CisKKy8qKiBAZGVmZ3JvdXAgUFNUTl9DSEVDSyBQU1ROIENoZWNrCisgKiBNb25pdG9yIGZvciBleGNlc3NpdmUgbG9uZ2l0dWRpbmFsIGN1cnJlbnQsIHdoaWNoCisgKiB3b3VsZCBiZSBwcmVzZW50IGlmIGEgbGl2ZSBwc3RuIGxpbmUgd2FzIGNvbm5lY3RlZAorICogdG8gdGhlIHBvcnQuICBUbyBvcGVyYXRlIHRoZXNlIHNldHMgb2YgZnVuY3Rpb25zOgorICoKKyAqIC0gSW5paXRhbGl6ZSB0aGUgUFNUTiBvYmplY3QgYnkgY2FsbGluZyBAcmVmIFByb1NMSUNfSW5pdFBTVE5DaGVja09iagorICogLSBQb2xsIGF0IGEgY29uc3RhbnQgcmF0ZSBhbmQgY2FsbCBAcmVmIFByb1NMSUNfUFNUTkNoZWNrLiAgQ2hlY2sgdGhlIHJldHVybiBjb2RlIG9mIHRoaXMgZnVuY3Rpb24uCisgKgorICogQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBjYWxsIHRoZSBEaWZmUFNUTkNoZWNrIHZlcnNpb25zIG9mIHRoZSBhYm92ZSB0d28gZnVuY3Rpb25zLgorICoKKyAqIEBub3RlIFRoZXNlIGZ1bmN0aW9ucyBtYXkgYmUgZGlzYWJsZWQgYnkgZG9pbmcgYSB1bmRlZiBvZiBAcmVmIFBTVE5fREVUX0VOQUJMRSBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgorICogQHsKKyovCisjZGVmaW5lIE1BWF9JTE9OR19TQU1QTEVTIDMyIC8qKjwgSG93IG1hbnkgc2FtcGxlcyB0byBjb2xsZWN0IGZvciBQU1ROIGNoZWNrICovCisjZGVmaW5lIE1BWF9QU1ROX1NBTVBMRVMgMTYgLyoqPCBVc2VkIGluIHRoZSBQU1ROIGNoZWNrIHN0YXR1cyBjb2RlIHRvIGluZGljYXRlIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyB0byBjb2xsZWN0ICovCisKKy8qKgorKiBGRU1GIE9QRU4gdm9sdGFnZSB0ZXN0IGVuYWJsZQorKi8KK2VudW0KK3sKKyAgRkVNRl9NRUFTX0RJU0FCTEUsIC8qKjwgRG8gbm90IG1lYXN1cmUgRkVNRiBhcyBwYXJ0IG9mIFBTVE4gQ2hlY2sgKi8KKyAgRkVNRl9NRUFTX0VOQUJMRSAgIC8qKjwgRG8gbWVhc3VyZSBGRU1GIGFzIHBhcnQgb2YgUFNUTiBDaGVjayAqLworfTsKKworLyoqIFN0YW5kYXJkIGxpbmUgaW50ZXJmYWNlcyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgaW50MzIgICBhdmdUaHJlc2g7CisgIGludDMyICAgc2luZ2xlVGhyZXNoOworICBpbnQzMiAgIGlsb25nW01BWF9JTE9OR19TQU1QTEVTXTsKKyAgdUludDggICBjb3VudDsKKyAgdUludDggICBzYW1wbGVzOworICBpbnQzMiAgIGF2Z0lsb25nOworICBCT09MRUFOIGJ1ZmZGdWxsOworfSBwcm9zbGljUFNUTkNoZWNrT2JqVHlwZTsKKwordHlwZWRlZiBwcm9zbGljUFNUTkNoZWNrT2JqVHlwZSAqcHJvc2xpY1BTVE5DaGVja09ialR5cGVfcHRyOworCisKKy8qKiBSZS1JbmplY3Rpb24gbGluZSBpbnRlcmZhY2VzIChkaWZmZXJlbnRpYWwpICovCit0eXBlZGVmIHN0cnVjdAoreworICBwcm9zbGljVGVzdFN0YXRlVHlwZSBwU3RhdGU7CisgIGludCBkY2ZQcmVzZXQxOworICBpbnQgZGNmUHJlc2V0MjsKKyAgaW50IGVudHJ5RENGZWVkUHJlc2V0OworICB1SW50OCBsZnN0YXRlX2VudHJ5OworICB1SW50OCBlbmhhbmNlUmVnU2F2ZTsKKyAgdUludDggc2FtcGxlczsKKyAgaW50MzIgdmRpZmYxW01BWF9QU1ROX1NBTVBMRVNdOworICBpbnQzMiB2ZGlmZjJbTUFYX1BTVE5fU0FNUExFU107CisgIGludDMyIGlsb29wMVtNQVhfUFNUTl9TQU1QTEVTXTsKKyAgaW50MzIgaWxvb3AyW01BWF9QU1ROX1NBTVBMRVNdOworICBpbnQzMiB2ZGlmZjFfYXZnOworICBpbnQzMiB2ZGlmZjJfYXZnOworICBpbnQzMiBpbG9vcDFfYXZnOworICBpbnQzMiBpbG9vcDJfYXZnOworICBpbnQzMiBybDE7CisgIGludDMyIHJsMjsKKyAgaW50MzIgcmxfcmF0aW87CisgIGludCBmZW1mX2VuYWJsZTsKKyAgaW50MzIgdmRpZmZfb3BlbjsKKyAgaW50MzIgbWF4X2ZlbWZfdm9wZW47CisgIGludCByZXR1cm5fc3RhdHVzOworfSBwcm9zbGljRGlmZlBTVE5DaGVja09ialR5cGU7CisKK3R5cGVkZWYgcHJvc2xpY0RpZmZQU1ROQ2hlY2tPYmpUeXBlICpwcm9zbGljRGlmZlBTVE5DaGVja09ialR5cGVfcHRyOworCisvKiogQH1QU1ROX0NIRUNLICovCisvKiogQH1ESUFHTk9TVElDUyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyoqIHByb3NsaWMuYyBmdW5jdGlvbiBkZWNsYXJhdGlvbnMKKyovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiBAZGVmZ3JvdXAgR0VOX0NGRyBHZW5lcmFsIGNvbmZpZ3VyYXRpb24KKyAqIEB7CisgKi8KKworLyoqCisgKiBAYnJpZWYKKyAqICBMb2FkcyBwYXRjaCBhbmQgaW5pdGlhbGl6ZXMgYWxsIFByb1NMSUMgZGV2aWNlcy4gUGVyZm9ybXMgYWxsIGNhbGlicmF0aW9ucyBleGNlcHQKKyAqICBsb25naXR1ZGluYWwgYmFsYW5jZS4KKyAqCisgKiBAcGFyYW1baW5dIGhQcm9zbGljIC0gd2hpY2ggY2hhbm5lbChzKSB0byBpbml0aWFsaXplLCBpZiBzaXplID4gMSwgdGhlbiB0aGUgc3RhcnQgb2YgdGhlIGFycmF5CisgKiBvZiBjaGFubmVscyB0byBiZSBpbml0aWFsaXplZC4KKyAqIEBwYXJhbVtpbl0gc2l6ZSAtIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgdG8gaW5pdGlhbGl6ZS4KKyAqIEBwYXJhbVtpbl0gcHJlc2V0IC0gZ2VuZXJhbCBjb25maWd1cmF0aW9uIHByZXNldCB0byBhcHBseQorICoKKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKiBAc2EgUHJvU0xJQ19Jbml0CisgKi8KKworaW50IFByb1NMSUNfSW5pdF9NdWx0aUJPTSAocHJvc2xpY0NoYW5UeXBlX3B0ciAqaFByb3NsaWMsIGludCBzaXplLCBpbnQgcHJlc2V0KTsKKworLyoqCisgKiBAYnJpZWYKKyAqICBMb2FkcyBwYXRjaCBhbmQgaW5pdGlhbGl6ZXMgYWxsIFByb1NMSUMgZGV2aWNlcy4gUGVyZm9ybXMgYWxsIGNhbGlicmF0aW9ucyBleGNlcHQKKyAqICBsb25naXR1ZGluYWwgYmFsYW5jZS4KKyAqCisgKiBAcGFyYW1baW5dIGhQcm9zbGljIC0gd2hpY2ggY2hhbm5lbChzKSB0byBpbml0aWFsaXplLCBpZiBzaXplID4gMSwgdGhlbiB0aGUgc3RhcnQgb2YgdGhlIGFycmF5CisgKiBvZiBjaGFubmVscyB0byBiZSBpbml0aWFsaXplZC4KKyAqIEBwYXJhbVtpbl0gc2l6ZSAtIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgdG8gaW5pdGlhbGl6ZS4KKyAqCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICovCisKK2ludCBQcm9TTElDX0luaXQgKHByb3NsaWNDaGFuVHlwZV9wdHIgKmhQcm9zbGljLCBpbnQgc2l6ZSk7CisKKy8qKgorICogQGJyaWVmCisgKiAgTG9hZHMgcGF0Y2ggYW5kIGluaXRpYWxpemVzIGFsbCBQcm9TTElDIGRldmljZXMuIAorICoKKyAqIEBwYXJhbVtpbl0gaFByb3NsaWMgLSB3aGljaCBjaGFubmVsKHMpIHRvIGluaXRpYWxpemUsIGlmIHNpemUgPiAxLCB0aGVuIHRoZSBzdGFydCBvZiB0aGUgYXJyYXkKKyAqIG9mIGNoYW5uZWxzIHRvIGJlIGluaXRpYWxpemVkLgorICogQHBhcmFtW2luXSBzaXplIC0gdGhlIG51bWJlciBvZiBjaGFubmVscyB0byBpbml0aWFsaXplLiAKKyAqIEBwYXJhbVtpbl0gb3B0aW9uIC0gc2VlIGluaXRPcHRpb25zVHlwZQorICoKKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKi8KKworaW50IFByb1NMSUNfSW5pdF93aXRoX09wdGlvbnMgKHByb3NsaWNDaGFuVHlwZV9wdHIgKmhQcm9zbGljLCBpbnQgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3B0aW9uKTsKKworLyoqCisgKiBAYnJpZWYKKyAqICBQZXJmb3JtcyBzb2Z0IHJlc2V0IHRoZW4gY2FsbHMgUHJvU0xJQ19Jbml0KCkKKyAqCisgKiBAcGFyYW1baW5dIGhQcm9zbGljIC0gd2hpY2ggY2hhbm5lbChzKSB0byByZS1pbml0aWFsaXplLgorICogb2YgY2hhbm5lbHMgdG8gYmUgaW5pdGlhbGl6ZWQuCisgKiBAcGFyYW1baW5dIHNpemUgLSB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIHRvIGluaXRpYWxpemUuIAorICoKKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKi8KKworaW50IFByb1NMSUNfUmVpbml0IChwcm9zbGljQ2hhblR5cGVfcHRyICpoUHJvc2xpYywgaW50IHNpemUpOworCisvKioKKyAqIEBicmllZgorICogTG9hZHMgcmVnaXN0ZXJzIGFuZCBSQU0gaW4gdGhlIFByb1NMSUNzIHNwZWNpZmllZC4KKyAqCisgKiBAcGFyYW1baW5dIHBQcm9zbGljIC0gYXJyYXkgb2YgY2hhbm5lbHMKKyAqIEBwYXJhbVtpbl0gcFJhbVRhYmxlIC0gYXJyYXkgb2YgUkFNIGxvY2F0aW9ucyBhbmQgdmFsdWVzIHRvIHdyaXRlCisgKiBAcGFyYW1baW5dIHBSZWdUYWJsZSAtIGFycmF5IG9mIHJlZ2lzdGVyIGxvY2F0aW9ucyBhbmQgdmFsdWVzIHRvIHdyaXRlCisgKiBAcGFyYW1baW5dIGJjYXN0LSBpcyBicm9hZGNhc3QgZW5hYmxlZC4KKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBzaG91bGQgTk9UIGJlIHVzZWQgc2luY2UgaXQgY2FuIGJ5cGFzcyB0aGUgc3RhbmRhcmQgaW5pdGlhbGl6YXRpb24vb3BlcmF0aW9uYWwgc3RhdGUgb2YgdGhlCisgKiBQcm9TTElDLgorICovCisKK2ludCBQcm9TTElDX0xvYWRSZWdUYWJsZSAocHJvc2xpY0NoYW5UeXBlICAgICAgKnBQcm9zbGljLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQcm9zbGljUkFNSW5pdCAqcFJhbVRhYmxlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUHJvc2xpY1JlZ0luaXQgKnBSZWdUYWJsZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBiY2FzdCk7CisKKy8qKgorICogQGJyaWVmCisgKiBMb2FkcyByZWdpc3RlcnMgYW5kIFJBTSBpbiB0aGUgUHJvU0xJQ3Mgc3BlY2lmaWVkLgorICoKKyAqIEBwYXJhbVtpbl0gcFByb3NsaWMgLSBhcnJheSBvZiBjaGFubmVscworICogQHBhcmFtW2luXSBwUmFtVGFibGUgLSBhcnJheSBvZiBSQU0gbG9jYXRpb25zIGFuZCB2YWx1ZXMgdG8gd3JpdGUKKyAqIEBwYXJhbVtpbl0gcFJlZ1RhYmxlIC0gYXJyYXkgb2YgcmVnaXN0ZXIgbG9jYXRpb25zIGFuZCB2YWx1ZXMgdG8gd3JpdGUKKyAqIEBwYXJhbVtpbl0gc2l6ZSAtIG51bWJlciBvZiBQcm9TTElDUyB0byB3cml0ZSB0by4KKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBzaG91bGQgTk9UIGJlIHVzZWQgc2luY2UgaXQgY2FuIGJ5cGFzcyB0aGUgc3RhbmRhcmQgaW5pdGlhbGl6YXRpb24vb3BlcmF0aW9uYWwgc3RhdGUgb2YgdGhlCisgKiBQcm9TTElDLgorICovCisKK2ludCBQcm9TTElDX0xvYWRSZWdUYWJsZXMgKHByb3NsaWNDaGFuVHlwZV9wdHIgKnBQcm9zbGljLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUHJvc2xpY1JBTUluaXQgKnBSYW1UYWJsZSwgY29uc3QgUHJvc2xpY1JlZ0luaXQgKnBSZWdUYWJsZSwgaW50IHNpemUpOworCisvKioKKyAqIEBicmllZgorICogSW1wbGVtZW50IHNvZnQgcmVzZXQuIEZvciBkdWFsIGNoYW5uZWwgZGV2aWNlcywgeW91IGNhbiBzcGVjaWZ5IGEgaGFyZCByZXNldAorICogKHdoaWNoIGltcGFjdHMgYm90aCBjaGFubmVscykgb3IgaWYgdGhlIGNoYW5uZWwgaXMgYWN0dWFsbHkgdGhlIHNlY29uZCAKKyAqIGNoYW5uZWwuICBUaGUgZGVmYXVsdCBpcyB0byBkbyBhIHNvZnQgcmVzZXQgb24gdGhlIDFzdCBjaGFubmVsLgorICoKKyAqIEBwYXJhbVtpbl0gaFByb3NsaWMgLSB3aGljaCBjaGFubmVsIHRvIHJlc2V0CisgKiBAcGFyYW1baW5dIHJlc2V0T3B0aW9ucyAtIFBST1NMSUNfSEFSRF9SRVNFVCAoZHVhbCBjaGFubmVsIGRldmljZXMgT05MWSkgfCBQUk9TTElDX1NPRlRfUkVTRVRfU0VDT05EX0NIQU4gKGR1YWwgY2hhbm5lbCBkZXZpY2VzKSB8IFBST1NMSUNfQkNBU1RfUkVTRVQgfCBQUk9TTElDX1NPRlRfUkVTRVQKKyAqCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICoKKyAqIEBub3RlIFdpbGwgYWJvcnQgcmVzZXQgaWYgaW4gZnJlZSBydW4gbW9kZS4KKyAqIEBub3RlIE9ubHkgcGVyZm9ybSBhIHNvZnQgcmVzZXQgb24gMSBjaGFubmVsIGF0IGEgdGltZS4KKyAqLworIAorI2RlZmluZSBQUk9TTElDX0JDQVNUX1JFU0VUIDB4ODAwMAorI2RlZmluZSBQUk9TTElDX0hBUkRfUkVTRVQgMworI2RlZmluZSBQUk9TTElDX1NPRlRfUkVTRVRfU0VDT05EX0NIQU4gMgorI2RlZmluZSBQUk9TTElDX1NPRlRfUkVTRVQgMQorCitpbnQgUHJvU0xJQ19Tb2Z0UmVzZXQocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYywgdUludDE2IHJlc2V0T3B0aW9ucyk7CisKKy8qKgorICogQGJyaWVmCisgKiAgQ29uZmlndXJlIGltcGVkYW5jZSBzeW50aGVzaXMKKyAqCisgKiBAcGFyYW1baW5dIGhQcm9zbGljIC0gd2hpY2ggY2hhbm5lbCB0byBjb25maWd1cmUKKyAqIEBwYXJhbVtpbl0gcHJlc2V0IC0gd2hpY2ggaW1wZWRhbmNlIGNvbmZpZ3VyYXRpb24gdG8gbG9hZCBmcm9tIHRoZSBjb25zdGFudHMgZmlsZS4KKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBjYW4gYmUgZGlzYWJsZWQgYnkgQHJlZiBESVNBQkxFX1pTWU5USF9TRVRVUAorICovCisKK2ludCBQcm9TTElDX1pzeW50aFNldHVwIChwcm9zbGljQ2hhblR5cGVfcHRyIGhQcm9zbGljLGludCBwcmVzZXQpOworCisvKioKKyAqIEBicmllZgorICogIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgQ0kgYml0cyAoR0NJIG1vZGUpCisgKgorICogQHBhcmFtW2luXSBoUHJvc2xpYyAtIHdoaWNoIGNoYW5uZWwgdG8gY29uZmlndXJlCisgKiBAcGFyYW1baW5dIHByZXNldCAtIHdoaWNoIEdDSSBwcmVzZXQgdG8gdXNlIGZyb20gdGhlIGNvbnN0YW50cyBmaWxlCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICoKKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGRpc2FibGVkIGJ5IEByZWYgRElTQUJMRV9DSV9TRVRVUAorICovCisjaWZuZGVmIERJU0FCTEVfQ0lfU0VUVVAKK2ludCBQcm9TTElDX0djaUNJU2V0dXAgKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMsaW50IHByZXNldCk7CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqIEBkZWZncm91cCBQUk9TTElDX0RFQlVHIERlYnVnCisgKiBUaGlzIGdyb3VwIG9mIGZ1bmN0aW9ucyBlbmFibGVzL2Rpc2FibGVzIGRlYnVnIG1lc3NhZ2VzIGFzIHdlbGwgYXMgZHVtcAorICogcmVnaXN0ZXIgY29udGVudHMuCisgKiBAeworICovCisKKworLyoqCisgKiBAYnJpZWYKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIGFjY2VzcyB0byBTUEkgcmVhZCBSQU0gZnVuY3Rpb24gcG9pbnRlciBmcm9tIGludGVyZmFjZQorICoKKyAqIEBwYXJhbVtpbl0gcFByb3NsaWMgLSBwb2ludGVyIHRvIGNoYW5uZWwgc3RydWN0dXJlCisgKiBAcGFyYW1baW5dIGFkZHIgLSBhZGRyZXNzIHRvIHJlYWQKKyAqIEByZXR2YWwgcmFtRGF0YSAtIFJBTSBjb250ZW50cworICoKKyAqLworcmFtRGF0YSBQcm9TTElDX1JlYWRSQU0gKHByb3NsaWNDaGFuVHlwZSAqcFByb3NsaWMsIHVJbnQxNiBhZGRyKTsKKworLyoqCisgKiBAYnJpZWYKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIGFjY2VzcyB0byBTUEkgd3JpdGUgUkFNIGZ1bmN0aW9uIHBvaW50ZXIgZnJvbSBpbnRlcmZhY2UKKyAqCisgKiBAcGFyYW1baW5dIHBQcm9zbGljIC0gcG9pbnRlciB0byBjaGFubmVsIHN0cnVjdHVyZQorICogQHBhcmFtW2luXSBhZGRyIC0gYWRkcmVzcyB0byB3cml0ZQorICogQHBhcmFtW2luXSBkYXRhIHRvIGJlIHdyaXR0ZW4KKyAqIEByZXR2YWwgaW50IC0gQHJlZiBSQ19OT05FCisgKgorICovCitpbnQgUHJvU0xJQ19Xcml0ZVJBTSAocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYywgdUludDE2IGFkZHIsIHJhbURhdGEgZGF0YSk7CisKKy8qKgorICogQGJyaWVmCisgKiBUaGlzIGZ1bmN0aW9uIGR1bXBzIHRvIGNvbnNvbGUgdGhlIHJlZ2lzdGVyIGNvbnRlbnRzIG9mIHNldmVyYWwKKyAqIHJlZ2lzdGVycyBhbmQgUkFNIGxvY2F0aW9ucy4KKyAqCisgKiBAcGFyYW1baW5dIHBQcm9zbGljIC0gd2hpY2ggY2hhbm5lbCB0byBkdW1wIHRoZSByZWdpc3RlciBjb250ZW50cyBvZi4KKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKgorICovCitpbnQgUHJvU0xJQ19QcmludERlYnVnRGF0YSAocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYyk7CisKKy8qKgorICogQGJyaWVmCisgKiBUaGlzIGZ1bmN0aW9uIGR1bXBzIHRoZSByZWdpc3RlcnMgdG8gdGhlIGNvbnNvbGUgdXNpbmcgd2hhdGV2ZXIKKyAqIEkvTyBtZXRob2QgaXMgZGVmaW5lZCBieSBMT0dQUklOVAorICoKKyAqIEBwYXJhbVtpbl0gcFByb3NsaWMgLSB3aGljaCBjaGFubmVsIHRvIGR1bXAgdGhlIHJlZ2lzdGVyIGNvbnRlbnRzIG9mLgorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqCisgKi8KK2ludCBQcm9TTElDX1ByaW50RGVidWdSZWcgKHByb3NsaWNDaGFuVHlwZSAqcFByb3NsaWMpOworCisvKioKKyAqIEBicmllZgorICogVGhpcyBmdW5jdGlvbiBkdW1wcyB0aGUgUkFNIHRvIHRoZSBjb25zb2xlIHVzaW5nIHdoYXRldmVyCisgKiBJL08gbWV0aG9kIGlzIGRlZmluZWQgYnkgTE9HUFJJTlQKKyAqCisgKiBAcGFyYW1baW5dIHBQcm9zbGljIC0gd2hpY2ggY2hhbm5lbCB0byBkdW1wIHRoZSBSQU0gY29udGVudHMgb2YuCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICoKKyAqLworaW50IFByb1NMSUNfUHJpbnREZWJ1Z1JBTSAocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYyk7CisKKy8qKiBAfSBQUk9TTElDX0RFQlVHICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogQGRlZmdyb3VwIFBST1NMSUNfRU5BQkxFIEVuYWJsZS9kaXNhYmxlIGNoYW5uZWxzIChmb3IgaW5pdCkKKyAqIEB7CisgKi8KKworLyoqCisgKiBAYnJpZWYKKyAqICBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGNoYW5uZWwgZW5hYmxlIHN0YXR1cyBvZiB0aGUgRlhPIGNoYW5uZWwgb24gUHJvU0xJQyBkZXZpY2VzCisgKiAgd2l0aCBpbnRlZ3JhdGVkIEZYTy4gIElmIE5PVCBzZXQsIHRoZW4gd2hlbgorICogIHRoZSB2YXJpb3VzIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIHN1Y2ggYXMgQHJlZiBTaVZvaWNlX1NXSW5pdENoYW4gaXMgY2FsbGVkLAorICogIHRoZW4gdGhpcyBwYXJ0aWN1bGFyIGNoYW5uZWwgd2lsbCBOT1QgYmUgaW5pdGlhbGl6ZWQuCisgKgorICogIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgYWNjZXNzIHRoZSBjaGlwc2V0IGRpcmVjdGx5LCBzbyBTUEkvR0NJCisgKiAgZG9lcyBub3QgbmVlZCB0byBiZSB1cCBkdXJpbmcgdGhpcyBmdW5jdGlvbiBjYWxsLgorICoKKyAqIEBwYXJhbVtpbixvdXRdIHBQcm9zbGljIC0gd2hpY2ggY2hhbm5lbCB0byByZXR1cm4gdGhlIHN0YXR1cy4KKyAqIEBwYXJhbVtpbl0gZW5hYmxlIC0gVGhlIG5ldyB2YWx1ZSBvZiB0aGUgY2hhbm5lbCBlbmFibGUgZmllbGQuIDAgPSBOT1QgZW5hYmxlZCwgMSA9IGVuYWJsZWQuCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICoKKyAqIEBzYSBQcm9TTElDX2dldENoYW5uZWxFbmFibGUKKyAqLworCitpbnQgUHJvU0xJQ19TZXREQUFFbmFibGUocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYywgaW50IGVuYWJsZSk7CisKKy8qKiBAfSBQUk9TTElDX0VOQUJMRSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogQGRlZmdyb3VwIFBST1NMSUNfUEFUQ0ggUGF0Y2ggbWFuYWdlbWVudC4KKyAqIFRoaXMgZ3JvdXAgb2YgZnVuY3Rpb25zIHdyaXRlIGFuZCB2ZXJpZnkgdGhlIHBhdGNoIGRhdGEgbmVlZGVkIGJ5IHRoZQorICogUHJvU0xJQyBjaGlwc2V0LgorICogQHsKKyAqLworCisvKioKKyAqIEBicmllZgorICogQ2FsbHMgcGF0Y2ggbG9hZGluZyBmdW5jdGlvbiBmb3IgYSBwYXJ0aWN1bGFyIGNoYW5uZWwvUHJvU0xJQworICoKKyAqIEBwYXJhbVtpbl0gaFByb3NsaWMgLSB3aGljaCBjaGFubmVsL1Byb1NMSUMgc2hvdWxkIGJlIHBhdGNoZWQKKyAqIEBwYXJhbVtpbl0gcFBhdGNoIC0gdGhlIHBhdGNoIGRhdGEKKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSB1bmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlcyBzaW5jZSB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gc2hvdWxkCisgKiAgICAgICBwZXJmb3JtIHRoaXMgb3BlcmF0aW9uLgorICoKKyAqIEBzYSBQcm9TTElDX0luaXQKKyAqLworCitpbnQgUHJvU0xJQ19Mb2FkUGF0Y2ggKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMsY29uc3QgcHJvc2xpY1BhdGNoICpwUGF0Y2gpOworCisvKioKKyAqIEBicmllZgorICogIFZlcmlmaWVzIHBhdGNoIGxvYWRpbmcgZnVuY3Rpb24gZm9yIGEgcGFydGljdWxhciBjaGFubmVsL1Byb1NMSUMKKyAqCisgKiBAcGFyYW1baW5dIGhQcm9zbGljIC0gd2hpY2ggY2hhbm5lbC9Qcm9TTElDIHNob3VsZCBiZSBwYXRjaGVkCisgKiBAcGFyYW1baW5dIHBQYXRjaCAtIHRoZSBwYXRjaCBkYXRhIHRvIHZlcmlmeSB3YXMgd3JpdHRlbiB0by4KKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSB1bmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlcyBzaW5jZSB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gc2hvdWxkCisgKiAgICAgICBwZXJmb3JtIHRoaXMgb3BlcmF0aW9uLCB1bmxlc3MgQHJlZiBESVNBQkxFX1ZFUklGWV9QQVRDSCBpcyBkZWZpbmVkLgorICoKKyAqIEBzYSBQcm9TTElDX0luaXQKKyAqLworCitpbnQgUHJvU0xJQ19WZXJpZnlQYXRjaCAocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYyxjb25zdCBwcm9zbGljUGF0Y2ggKnBQYXRjaCk7CisKKy8qKiBAfSBQUk9TTElDX1BBVENIICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiBAZGVmZ3JvdXAgUFJPU0xJQ19HUElPIEdQSU8gQ29udHJvbAorICogVGhpcyBncm91cCBvZiBmdW5jdGlvbnMgY29uZmlndXJlLCByZWFkIGFuZCB3cml0ZSB0aGUgR1BJTyBzdGF0dXMgcGlucy4KKyAqIEB7CisgKi8KKworLyoqCisgKiBAYnJpZWYKKyAqICBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIFByb1NMSUMgR1BJT3MgYnkgbG9hZGluZyBhIGdwaW8gcHJlc2V0IHRoYXQgd2FzCisgKiAgc2V0IGluIHRoZSBjb25maWd1cmF0aW9uIHRvb2wuCisgKiBAcGFyYW1baW5dIGhQcm9zbGljIC0gd2hpY2ggY2hhbm5lbCB0byBjb25maWd1cmUgdGhlIEdQSU8gcGlucy4KKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKiBAc2EgUHJvU0xJQ19HUElPQ29udHJvbAorICovCisKK2ludCBQcm9TTElDX0dQSU9TZXR1cCAocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYyk7CisKKy8qKgorICogQGJyaWVmCisgKiAgVGhpcyBmdW5jdGlvbiBjb250cm9scyB0aGUgR1BJT3Mgb2YgdGhlIFByb1NMSUMuCisgKgorICogQHBhcmFtW2luXSBoUHJvc2xpYyAtIHdoaWNoIGNoYW5uZWwgdG8gbW9kaWZ5CisgKiBAcGFyYW1baW4sb3V0XSBwR3Bpb0RhdGEgIC0gcG9pbnRlciB0byBHUElPIHN0YXR1cyAodHlwaWNhbGx5IDEgYnl0ZSkKKyAqIEBwYXJhbVtpbl0gcmVhZCAtIDEgPSBSZWFkIHRoZSBzdGF0dXMsIDAgPSB3cml0ZSB0aGUgc3RhdHVzCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICogQHNhIFByb1NMSUNfR1BJT1NldHVwCisgKi8KKworaW50IFByb1NMSUNfR1BJT0NvbnRyb2wgKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMsdUludDggKnBHcGlvRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1SW50OCByZWFkKTsKKworLyoqIEB9IFBST1NMSUNfR1BJTyAqLworLyoqIEB9IEdFTl9DRkcgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqIEBkZWZncm91cCBQUk9TTElDX1BVTFNFX01FVEVSIFB1bHNlIE1ldGVyaW5nCisgKgorICogVGhpcyBncm91cCBjb250YWlucyBmdW5jdGlvbnMgcmVsYXRlZCB0byBwdWxzZSBtZXRlcmluZy4KKyAqIEB7CisgKi8KKworLyoqCisqIEBicmllZgorKiAgVGhpcyBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSBQcm9TTElDIHB1bHNlIG1ldGVyaW5nIGJ5IGxvYWRpbmcgYSBwdWxzZSBtZXRlcmluZyBwcmVzZXQuCisqCisqIEBwYXJhbVtpbl0gaFByb3NsaWMgLSB3aGljaCBjaGFubmVsIHNob3VsZCBiZSBjb25maWd1cmVkCisqIEBwYXJhbVtpbl0gcHJlc2V0IC0gd2hpY2ggcHJlc2V0IHRvIGxvYWQgZnJvbSB0aGUgZGVmaW5lZCBzZXR0aW5ncyBtYWRlIGluIHRoZSBjb25maWd1cmF0aW9uIHRvb2wuCisqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisqCisqIEBzYSBQcm9TTElDX1B1bHNlTWV0ZXJTdGFydCBQcm9TTElDX1B1bHNlTWV0ZXJTdG9wCisqLworCitpbnQgUHJvU0xJQ19QdWxzZU1ldGVyU2V0dXAgKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMsaW50IHByZXNldCk7CisKKy8qKgorICogQGJyaWVmCisgKiAgVGhpcyBmdW5jdGlvbiBlbmFibGVzIHRoZSBwdWxzZSBtZXRlcmluZyBnZW5lcmF0b3IuCisgKgorICogQHBhcmFtW2luXSBoUHJvc2xpYyAtIHdoaWNoIGNoYW5uZWwgc2hvdWxkIHBsYXkgdGhlIHRvbmUuCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICogQHNhIFByb1NMSUNfUHVsc2VNZXRlclNldHVwIFByb1NMSUNfUHVsc2VNZXRlclN0b3AgUHJvU0xJQ19QdWxzZU1ldGVyRGlzYWJsZQorICoKKyAqLworaW50IFByb1NMSUNfUHVsc2VNZXRlckVuYWJsZSAocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYyk7CisKKy8qKgorICogQGJyaWVmCisgKiAgVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyB0aGUgcHVsc2UgbWV0ZXJpbmcgZ2VuZXJhdG9yLi4KKyAqCisgKiBAcGFyYW1baW5dIGhQcm9zbGljIC0gd2hpY2ggY2hhbm5lbCBzaG91bGQgcGxheSB0aGUgdG9uZS4KKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKiBAc2EgUHJvU0xJQ19QdWxzZU1ldGVyU2V0dXAgUHJvU0xJQ19QdWxzZU1ldGVyU3RvcCBQcm9TTElDX1B1bHNlTWV0ZXJFbmFibGUKKyAqCisgKi8KKworaW50IFByb1NMSUNfUHVsc2VNZXRlckRpc2FibGUgKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMpOworCisvKioKKyAqIEBicmllZgorICogIFRoaXMgZnVuY3Rpb24gc3RhcnRzIHRoZSBwdWxzZSBtZXRlcmluZyB0b25lLgorICoKKyAqIEBwYXJhbVtpbl0gaFByb3NsaWMgLSB3aGljaCBjaGFubmVsIHNob3VsZCBwbGF5IHRoZSB0b25lLgorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqIEBzYSBQcm9TTElDX1B1bHNlTWV0ZXJTZXR1cCBQcm9TTElDX1B1bHNlTWV0ZXJTdG9wCisgKgorICovCisKK2ludCBQcm9TTElDX1B1bHNlTWV0ZXJTdGFydCAocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYyk7CisKKy8qKgorICogQGJyaWVmCisgKiAgVGhpcyBmdW5jdGlvbiBzdG9wcyB0aGUgcHVsc2UgbWV0ZXJpbmcgdG9uZS4KKyAqCisgKiBAcGFyYW1baW5dIGhQcm9zbGljIC0gd2hpY2ggY2hhbm5lbCBzaG91bGQgcGxheSB0aGUgdG9uZS4KKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKiBAc2EgUFByb1NMSUNfUHVsc2VNZXRlclN0YXJ0IFByb1NMSUNfUHVsc2VNZXRlclNldHVwCisgKgorICovCisKK2ludCBQcm9TTElDX1B1bHNlTWV0ZXJTdG9wIChwcm9zbGljQ2hhblR5cGVfcHRyIGhQcm9zbGljKTsKKworLyoqIEB9IFBST1NMSUNfUFVMU0VfTUVURVIgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqIEBkZWZncm91cCBQUk9TTElDX0lOVEVSUlVQVFMgSW50ZXJydXB0IGNvbnRyb2wgYW5kIGRlY29kZQorICogQHsKKyAqLworCisvKioKKyAqIEBicmllZgorICogIEVuYWJsZXMgaW50ZXJydXB0cyBjb25maWd1cmVkIGluIHRoZSBnZW5lcmFsIGNvbmZpZ3VyYXRpb24gZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogQHBhcmFtW2luXSAgaFByb3NsaWMgLSB3aGljaCBjaGFubmVsIHRvIGVuYWJsZSB0aGUgaW50ZXJydXB0cy4KKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKgorICovCisKK2ludCBQcm9TTElDX0VuYWJsZUludGVycnVwdHMgKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMpOworCisvKioKKyAqIEBicmllZgorICogIFRoaXMgZnVuY3Rpb24gcmVhZHMgdGhlIGludGVycnVwdHMgZnJvbSB0aGUgUHJvU0xJQyBhbmQgcGxhY2VzIHRoZW0gaW50bworICogIGEgQHJlZiBwcm9zbGljSW50VHlwZSBzdHJ1Y3R1cmUgd2hpY2ggY29udGFpbnMgdXAgdG8gQHJlZiBNQVhfUFJPU0xJQ19JUlFTCisgKiAgaW50ZXJydXB0cy4KKyAqCisgKiBAcGFyYW1baW5dIGhQcm9zbGljIC0gd2hpY2ggY2hhbm5lbCB0byBlbmFibGUgdGhlIGludGVycnVwdHMuCisgKiBAcGFyYW1baW4sb3V0XSBwSW50RGF0YSAtIHRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIHRoZSBpbnRlcnJ1cHRzIHBlbmRpbmcgYW5kIHRoZSBudW1iZXIgb2YgaW50ZXJydXB0cy4KKyAqIEByZXR2YWwgaW50IC0gbnVtYmVyIG9mIGludGVycnVwdHMgcGVuZGluZyBvciBSQ19DSEFOTkVMX1RZUEVfRVJSIGlmIHdyb25nIGNoaXAgdHlwZSBvciAwIGZvciBubyBpbnRlcnJ1cHRzLgorICoKKyAqLworCitpbnQgUHJvU0xJQ19HZXRJbnRlcnJ1cHRzIChwcm9zbGljQ2hhblR5cGVfcHRyIGhQcm9zbGljLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvc2xpY0ludFR5cGUgKnBJbnREYXRhKTsKKworLyoqCisgKiBAYnJpZWYKKyAqICBUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIGFuZCBjbGVhcnMgaW50ZXJydXB0cyBvbiB0aGUgZ2l2ZW4gY2hhbm5lbC4KKyAqCisgKiAgQHBhcmFtW2luXSBoUHJvc2xpYyAtIHdoaWNoIGNoYW5uZWwgdG8gZGlzYWJsZQorICogIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqLworCitpbnQgUHJvU0xJQ19EaXNhYmxlSW50ZXJydXB0cyAocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYyk7CisKKy8qKiBAfSBQUk9TTElDX0lOVEVSUlVQVFMgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqIEBkZWZncm91cCBTSUdOQUxJTkcgU2lnbmFsaW5nIC0gcmluZyAmIGxpbmUgc3RhdGUsIGFuZCBob29rIHN0YXRlCisgKiBAeworICovCisKKy8qKgorKiBGdW5jdGlvbjogUFJPU0xJQ19SZWFkSG9va1N0YXR1cworKgorKiBAYnJpZWYKKyogRGV0ZXJtaW5lIGhvb2sgc3RhdHVzCisqIEBwYXJhbVtpbl0gaFByb3NsaWMgLSB3aGljaCBjaGFubmVsIHRvIHJlYWQgZnJvbS4KKyogQHBhcmFtW291dF0gKnBIb29rU3RhdCAtIHdpbGwgY29udGFpbiBlaXRoZXIgQHJlZiBQUk9TTElDX09OSE9PSyBvciBAcmVmIFBST1NMSUNfT0ZGSE9PSworKgorKi8KKworaW50IFByb1NMSUNfUmVhZEhvb2tTdGF0dXMgKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMsdUludDggKnBIb29rU3RhdCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiBAZGVmZ3JvdXAgTElORVNUQVRVUyBMaW5lIEZlZWQgc3RhdHVzCisgKiBAeworICovCisKKy8qKgorICogQGJyaWVmCisgKiAgVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBsaW5lZmVlZCBzdGF0ZS4KKyAqCisgKiBAcGFyYW1baW5dIGhQcm9zbGljIC0gd2hpY2ggY2hhbm5lbCB0byBtb2RpZnkKKyAqIEBwYXJhbVtpbl0gbmV3TGluZWZlZWQgLSBuZXcgbGluZSBmZWVkIHN0YXRlICAtIGV4YW1wbGVzOiBMRl9PUEVOLCBMRl9GV0RfQUNUSVZFCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICovCisKK2ludCBQcm9TTElDX1NldExpbmVmZWVkU3RhdHVzIChwcm9zbGljQ2hhblR5cGVfcHRyIGhQcm9zbGljLHVJbnQ4IG5ld0xpbmVmZWVkKTsKKworLyoqCisgKiBAYnJpZWYKKyAqICBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGxpbmVmZWVkIHN0YXRlIGZvciBhbGwgY2hhbm5lbHMgb24gdGhlIHNhbWUgZGFpc3ljaGFpbi4KKyAqCisgKiBAcGFyYW1baW5dIGhQcm9zbGljIC0gd2hpY2ggY2hhbm5lbCB0byBtb2RpZnkKKyAqIEBwYXJhbVtpbl0gbmV3TGluZWZlZWQgLSBuZXcgbGluZSBmZWVkIHN0YXRlICAtIGV4YW1wbGVzOiBMRl9PUEVOLCBMRl9GV0RfQUNUSVZFCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICovCisKK2ludCBQcm9TTElDX1NldExpbmVmZWVkU3RhdHVzQnJvYWRjYXN0IChwcm9zbGljQ2hhblR5cGVfcHRyIGhQcm9zbGljLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVJbnQ4IG5ld0xpbmVmZWVkKTsKKworLyoqCisgKiBAYnJpZWYKKyAqICBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHBvbGFyaXR5L3dpbmsgc3RhdGUgb2YgdGhlIGNoYW5uZWwuCisgKgorICogQHBhcmFtW2luXSBoUHJvc2xpYyAtIHdoaWNoIGNoYW5uZWwgdG8gbW9kaWZ5CisgKiBAcGFyYW1baW5dIGFicnVwdCAgLSB0byBjaGFuZ2UgdGhlIHN0YXRlIGltbWVkaWF0ZWx5CisgKiBAcGFyYW1baW5dIG5ld1BvbFJldlN0YXRlIC0gbmV3IHBvbGFyaXR5IHN0YXRlICAtIGV4YW1wbGVzOiBQT0xSRVZfU1RPUCwgUE9MUkVWX1NUQVJUIGFuZCBXSU5LX1NUQVJUCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICovCisKK2ludCBQcm9TTElDX1BvbFJldiAocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYyx1SW50OCBhYnJ1cHQsCisgICAgICAgICAgICAgICAgICAgIHVJbnQ4IG5ld1BvbFJldlN0YXRlKTsKKworLyoqIEB9IExJTkVTVEFUVVMgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqIEBkZWZncm91cCBSSU5HX0NPTlRST0wgUmluZyBnZW5lcmF0aW9uCisgKiBAeworICovCisKKy8qKgorICogQGJyaWVmCisgKiAgQ29uZmlndXJlIHRoZSByaW5nZXIgdG8gdGhlIGdpdmVuIHByZXNldCAoc2VlIHlvdXIgY29uc3RhbnRzIGhlYWRlciBmaWxlIGZvciBleGFjdCB2YWx1ZSB0byB1c2UpLgorICogIFRoaXMgaW5jbHVkZXMgdGltaW5nLCBjYWRlbmNlLCBPSFQgbW9kZSwgdm9sdGFnZSBsZXZlbHMsIGV0Yy4KKyAqCisgKiBAcGFyYW1baW5dICBoUHJvc2xpYyAtIHdoaWNoIGNoYW5uZWwgdG8gY29uZmlndXJlCisgKiBAcGFyYW1baW5dICBwcmVzZXQgLSB3aGljaCBvZiB0aGUgeHh4eF9SaW5nX0NmZyBzdHJ1Y3R1cmVzIHRvIHVzZSB0byBjb25maWd1cmUgdGhlIGNoYW5uZWwuCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICoKKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNvbXBpbGVkIG91dCBieSBkZWZpbmluZyBAcmVmIERJU0FCTEVfUklOR19TRVRVUAorICoKKyAqIEBzYSBQcm9TTElDX2RiZ1NldFJpbmdpbmcgUHJvU0xJQ19SaW5nU3RhcnQgUHJvU0xJQ19SaW5nU3RvcAorICovCisKK2ludCBQcm9TTElDX1JpbmdTZXR1cCAocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYyxpbnQgcHJlc2V0KTsKKworLyoqCisgKiBAYnJpZWYKKyAqICBTdGFydHMgdGhlIHJpbmdlciBhcyBjb25mZ3VyZWQgYnkgQHJlZiBQcm9TTElDX1JpbmdTZXR1cCAuICBJZiB0aGUgYWN0aXZlIGFuZCBpbmFjdGl2ZSB0aW1lcnMgYXJlIGVuYWJsZWQsCisgKiAgdGhlIFByb1NMSUMgd2lsbCBhdXRvbWF0aWNhbGx5IHR1cm4gb24vb2ZmIHRoZSByaW5nZXIgYXMgcHJvZ3JhbW1lZCwgZWxzZSBvbmUgd2lsbCBuZWVkIHRvCisgKiAgbWFudWFsbHkgaW1wbGVtZW50IHRoZSByaW5nIGNhZGVuY2UuICBJbiBlaXRoZXIgY2FzZSwgb25lIHdpbGwgbmVlZCB0byBjYWxsIFByb1NMSUNfUmluZ1N0b3AgdG8KKyAqICBzdG9wIHRoZSByaW5nZXIgb3Igb25lIG1heSBjYWxsIEByZWYgUHJvU0xJQ19TZXRMaW5lZmVlZFN0YXR1cyB0byBjaGFuZ2UgdGhlIHN0YXRlIGRpcmVjdGx5LgorICoKKyAqIEBwYXJhbVtpbl0gIGhQcm9zbGljIC0gd2hpY2ggY2hhbm5lbCB0byBlbmFibGUgcmluZ2luZy4KKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBjYW4gYmUgY29tcGlsZWQgb3V0IGJ5IGRlZmluaW5nIEByZWYgRElTQUJMRV9SSU5HX1NFVFVQCisgKiBAZGVwcmVjYXRlZCAtIFdpbGwgYmVjb21lIGEgbWFjcm8gaW4gYSBmdXR1cmUgcmVsZWFzZSBhbmQgbGF0ZXIgcmVtb3ZlZC4gIEN1c3RvbWVycyBzaG91bGQganVzdCBjYWxsIFByb1NMSUNfU2V0TGluZWZlZWRTdGF0dXMgdy8gTEZfUklOR0lORy4KKyAqCisgKiBAc2EgUHJvU0xJQ19kYmdTZXRSaW5naW5nIFByb1NMSUNfUmluZ1N0b3AgUHJvU0xJQ19SaW5nU2V0dXAKKyAqLworCitpbnQgUHJvU0xJQ19SaW5nU3RhcnQgKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMpOworCisvKioKKyAqIEBicmllZgorICogIFN0b3AgdGhlIHJpbmdlciBvbiB0aGUgZ2l2ZW4gY2hhbm5lbCBhbmQgc2V0IHRoZSBsaW5lIHN0YXRlIHRvIGZvcndhcmQgYWN0aXZlLgorICogQGRlcHJlY2F0ZWQgIC0gV2lsbCBiZWNvbWUgYSBtYWNybyBpbiBhIGZ1dHVyZSByZWxlYXNlLiAgQ3VzdG9tZXJzIHNob3VsZCBqdXN0IGNhbGwgUHJvU0xJQ19TZXRMaW5lZmVlZFN0YXR1cyB3LyBMRl9GV0RfQUNUSVZFLgorICoKKyAqIEBwYXJhbVtpbl0gaFByb3NsaWMgLSB3aGljaCBjaGFubmVsIHRvIG1vZGlmeS4KKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKiBAc2EgUHJvU0xJQ19SaW5nU2V0dXAgUHJvU0xJQ19SaW5nU3RhcnQKKyAqCisgKiBAZGVwcmVjYXRlZCBjdXN0b21lcnMgYXJlIGVuY291cmFnZWQgdG8gdXNlIFByb1NMSUNfU2V0TGluZWZlZWRTdGF0dXMKKyAqLworCitpbnQgUHJvU0xJQ19SaW5nU3RvcCAocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYyk7CisKKy8qKgorICogQGJyaWVmCisgKiAgUHJvdmlzaW9uIGZ1bmN0aW9uIGZvciBzZXR0aW5nIHVwIFJpbmcgdHlwZSwgZnJlcXVlbmN5LCBhbXBsaXR1ZGUgYW5kIGRjIG9mZnNldCBhbmQKKyAqICB0byBzdG9yZSB0aGVtIGluIHRoZSBnaXZlbiBwcmVzZXQuCisgKgorICogQG5vdGU6IFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgdmFsdWVzLCBpdCBkb2VzIG5vdCBzZXQgdGhlbS4KKyAqIEBub3RlOiBUaGlzIGNvZGUgYXNzdW1lcyBQcm9TTElDX1JpbmdTZXR1cCgpIHdhcyBjYWxsZWQgZWFybGllciB3aXRoIHRoZSBoaWdoZXN0IHJpbmdlcgorICogICAgICAgIHJlcXVpcmVtZW50cyAocG9zc2libHkgZHVyaW5nIGluaXRpYWxpemF0aW9uKS4gIEFmdGVyIHRoYXQsIHRoaXMgZnVuY3Rpb24gY2FuIAorICogICAgICAgIGJlIHVzZWQgZm9yIG1lZXRpbmcgcHJvdmlzaW9uaW5nIHJlcXVpcmVtZW50cy4KKyAqCisgKiBAcGFyYW1baW5dIHBQcm9zbGljIC0gd2hpY2ggY2hhbm5lbCB0byBtb2RpZnkKKyAqIEBwYXJhbVtpbl0gcmluZ0NmZyAtIGhvdyB0byBjb25maWd1cmUgdGhlIGNoYW5uZWwncyByaW5nZXIKKyAqIEBwYXJhbVtpbl0gcHJlc2V0IC0gd2hlcmUgdG8gc3RvcmUgdGhlIG5ldyBjb25maWd1cmF0aW9uLgorICogQHNhIFByb1NMSUNfUmluZ1NldHVwIFByb1NMSUNfUmluZ1N0YXJ0IFByb1NMSUNfUmluZ1N0b3AKKyAqLworCitpbnQgUHJvU0xJQ19kYmdTZXRSaW5naW5nIChwcm9zbGljQ2hhblR5cGUgKnBQcm9zbGljLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvU0xJQ19kYmdSaW5nQ2ZnICpyaW5nQ2ZnLCBpbnQgcHJlc2V0KTsKKworLyoqIAorICogQGJyaWVmCisgKiBFbmFibGUgYWJydXB0IHJpbmdpbmcuIE5vcm1hbGx5IHRoZSBQcm9TTElDIHdvdWxkIHBlcmZvcm0gYSBzbW9vdGggdHJhbnNpc3Rpb24KKyAqIHRvIHN0YXJ0IHRoZSByaW5nIHNpZ25hbCwgYnV0IGluIGNhc2VzIHdoZXJlIGEgZGVsYXkgaXMgbm90IGFjY2VwdGFibGUsIHRoaXMgCisgKiBmdW5jdGlvbiBkaXNhYmxlcyB0aGlzIGZlYXR1cmUuCisgKgorICogQHBhcmFtW2luXSBwUHJvc2xpYyAtIHdoaWNoIGNoYW5uZWwgdG8gbW9kaWZ5CisgKiBAcGFyYW1baW5dIGlzRW5hYmxlZCAtIGlzIHRoZSBhYnJ1cHQgcmluZ2luZyBlbmJhbGVkIChzbW9vdGggdHJhbnNpc3Rpb24gZGlzYWJsZWQpLgorICogCisgKiBAbm90ZSBOb3QgYWxsIGNoaXBzZXRzIHN1cHBvcnQgdGhpcyBmZWF0dXJlLgorICoKKyAqLworCitpbnQgUHJvU0xJQ19FbmFibGVGYXN0UmluZ1N0YXJ0KHByb3NsaWNDaGFuVHlwZV9wdHIgcFByb3NsaWMsIEJPT0xFQU4gaXNFbmFibGVkKTsKKworLyoqIEB9IFJJTkdfQ09OVFJPTCAqLworLyoqIEB9IFNJR05BTElORyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogQGRlZmdyb3VwIFBST1NMSUNfQVVESU8gQXVkaW8KKyAqIFRoaXMgZ3JvdXAgb2YgZnVuY3Rpb25zIGNvbnRhaW5zIHJvdXRpbmVzIHRvIGNvbmZpZ3VyZSB0aGUgUENNIGJ1cywgdG8gZ2VuZXJhdGUgdG9uZXMsIGFuZCB0byBzZW5kIEZTSyBkYXRhLgorICoKKyAqIEluIG9yZGVyIHRvIHN0YXJ0IHVzaW5nIHRoZSBQQ00gYnVzLCB5b3Ugd291bGQgdHlwaWNhbGx5IGluaXRpYWxpemUgdGhlIFBDTSBidXMgd2l0aCBjb2RlIHNpbWlsYXIgdG8KKyAqIHRoZSBmb2xsb3dpbmc6CisgKgorICogQGNvZGUKKyAqIGlmKCAoUHJvU0xJQ19QQ01TZXR1cChteVByb1NMSUMsIE1ZX0NPTVBBTkRJTkcpICE9IFJDX05PTkUpCisgKiAJfHwgKFByb1NMSUNfUENNVGltZVNsb3RTZXR1cChteVByb1NMSUMsIHBjbV90cywgcGNtX3RzKSAhPSBSQ19OT05FKQorICogCXx8IChQcm9TTElDX1BDTVN0YXJ0KG15UHJvU0xJQykgIT0gUkNfTk9ORSkpCisgKiB7CisgKiAJcmV0dXJuIE1ZX1BDTV9JTklUX0VSUk9SOworICogfQorICogQGVuZGNvZGUKKyAqCisgKiBAeworICogQGRlZmdyb3VwIFRPTkVfR0VOIFRvbmUgZ2VuZXJhdGlvbgorICogVGhpcyBncm91cCBvZiBmdW5jdGlvbnMgaXMgcmVsYXRlZCB0byBwbGF5aW5nIG91dCBnZW5lcmFsIHRvbmVzIC0gc3VjaCBhcyBkaWFsIHRvbmUsIGJ1c3kgdG9uZSwgZXRjLiAgT25lIHdvdWxkCisgKiB0eXBpY2FsbHkgY2FsbCBAcmVmIFByb1NMSUNfVG9uZUdlblNldHVwIGZpcnN0IGZvbGxvd2VkIGJ5IEByZWYgUHJvU0xJQ19Ub25lR2VuU3RhcnQgYW5kIGFmdGVyIHNvbWUgdGltZSwgYSBjYWxsIHRvCisgKiBAcmVmIFByb1NMSUNfVG9uZUdlblN0b3AgdG8gc3RvcCB0aGUgdG9uZS4gIFRoZSBkaXJlY3Rpb24gb2YgdGhlIHRvbmUgYW5kIGNhZGVuY2UgKGlmIGFueSkgYXJlIGNvbmZpZ3VyZWQgdXNpbmcgdGhlCisgKiBHVUkgY29uZmlndXJhdGlvbiB0b29sJ3MgVE9ORSBkaWFsb2cgYm94IGFuZCB0aGVuIHNhdmVkIGluIHRoZSBjb25zdGFudHMgZmlsZS4KKyAqCisgKiBAeworICovCisvKioKKyAqIEBicmllZgorICogIENvbmZpZ3VyZSB0aGUgdG9uZSBnZW5lcmF0b3IgdG8gdGhlIGdpdmVuIHByZXNldCAoc2VlIHlvdXIgY29uc3RhbnRzIGhlYWRlciBmaWxlIGZvciBleGFjdCB2YWx1ZSB0byB1c2UpLiAgSXQgZG9lcyBOT1QKKyAqICBwbGF5IGEgcGFydGljdWxhciB0b25lIG91dC4KKyAqCisgKiBAd2FybmluZyBJZiBAcmVmIFByb1NMSUNfRlNLU2V0dXAgd2FzIGNhbGxlZCBlYXJsaWVyLCB0aGlzIGZ1bmN0aW9uIHdpbGwgbmVlZCB0byBiZSBjYWxsZWQgYWdhaW4uCisgKgorICogQHBhcmFtW2luXSAgaFByb3NsaWMgLSB3aGljaCBjaGFubmVsIHRvIGNvbmZpZ3VyZQorICogQHBhcmFtW2luXSAgcHJlc2V0IC0gd2hpY2ggb2YgdGhlIHh4eHhfVG9uZV9DZmcgc3RydWN0dXJlcyB0byB1c2UgdG8gY29uZmlndXJlIHRoZSBjaGFubmVsLgorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjb21waWxlZCBvdXQgYnkgZGVmaW5pbmcgQHJlZiBESVNBQkxFX1RPTkVfU0VUVVAuCisgKgorICogQG5vdGUgVHlwaWNhbGx5LCBpZiBvbmUgaXMgdXNpbmcgdGhlIFByb1NMSUMgZm9yIHRvbmUgZ2VuZXJhdGlvbiwgeW91IHdpbGwgYmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHByaW9yIHRvIGVhY2ggY2FsbAorICogICAgICAgaW50byBAcmVmIFByb1NMSUNfVG9uZUdlblN0YXJ0IHNvIHRoYXQgdGhlIGNvcnJlY3QgdG9uZSBpcyBwbGF5ZWQgb3V0LgorICovCisKK2ludCBQcm9TTElDX1RvbmVHZW5TZXR1cCAocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYyxpbnQgcHJlc2V0KTsKKworLyoqCisgKiBAYnJpZWYKKyAqICBDb25maWd1cmUgdGhlIHRvbmUgZ2VuZXJhdG9yIHRvIHRoZSBnaXZlbiBwcmVzZXQgKHNlZSB5b3VyIGNvbnN0YW50cyBoZWFkZXIgZmlsZSBmb3IgZXhhY3QgdmFsdWUgdG8gdXNlKS4gIEl0IGRvZXMgTk9UCisgKiAgcGxheSBhIHBhcnRpY3VsYXIgdG9uZSBvdXQuCisgKgorICogQHdhcm5pbmcgSWYgQHJlZiBQcm9TTElDX0ZTS1NldHVwIHdhcyBjYWxsZWQgZWFybGllciwgdGhpcyBmdW5jdGlvbiB3aWxsIG5lZWQgdG8gYmUgY2FsbGVkIGFnYWluLgorICoKKyAqIEBwYXJhbVtpbl0gIHBQcm9zbGljIC0gd2hpY2ggY2hhbm5lbCB0byBjb25maWd1cmUKKyAqIEBwYXJhbVtpbl0gIGNmZyAtIHdoaWNoIG9mIHRoZSB4eHh4X1RvbmVfQ2ZnIHN0cnVjdHVyZXMgdG8gdXNlIHRvIGNvbmZpZ3VyZSB0aGUgY2hhbm5lbC4KKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBjYW4gYmUgY29tcGlsZWQgb3V0IGJ5IGRlZmluaW5nIEByZWYgRElTQUJMRV9UT05FX1NFVFVQLgorICoKKyAqIEBub3RlIFR5cGljYWxseSwgaWYgb25lIGlzIHVzaW5nIHRoZSBQcm9TTElDIGZvciB0b25lIGdlbmVyYXRpb24sIHlvdSB3aWxsIGJlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBwcmlvciB0byBlYWNoIGNhbGwKKyAqICAgICAgIGludG8gQHJlZiBQcm9TTElDX1RvbmVHZW5TdGFydCBzbyB0aGF0IHRoZSBjb3JyZWN0IHRvbmUgaXMgcGxheWVkIG91dC4KKyAqLworCitpbnQgUHJvU0xJQ19Ub25lR2VuU2V0dXBQdHIocHJvc2xpY0NoYW5UeXBlX3B0ciBwUHJvc2xpYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9TTElDX1RvbmVfQ2ZnICpjZmcpOworCisvKioKKyAqIEBicmllZgorICogIFRoaXMgZnVuY3Rpb24gc3RhcnRzIHRoZSB0b25lIGNvbmZpZ3VyZWQgYnkgQHJlZiBQcm9TTElDX1RvbmVHZW5TZXR1cC4KKyAqICBJdCBpcyBhc3N1bWVkIHRoYXQgdGhlIEByZWYgUFJPU0xJQ19BVURJTyBzZXR1cCB3YXMgcGVyZm9ybWVkCisgKiAgcHJpb3IgdG8gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiAgQWxzbywgaXQgaXMgc3VnZ2VzdGVkIHRoYXQKKyAqICBAcmVmIFByb1NMSUNfVG9uZUdlblNldHVwIGJlIGNhbGxlZCBpZiBAcmVmIEZTS19DT05UUk9MCisgKiAgZnVuY3Rpb25zIHdlcmUgdXNlZC4KKyAqCisgKiAgQHBhcmFtW2luXSBoUHJvc2xpYyAtIHdoaWNoIGNoYW5uZWwgc2hvdWxkIHBsYXkgdGhlIHRvbmUuCisgKiAgQHBhcmFtW2luXSB0aW1lckVuIC0gYXJlIHRoZSB0aW1lcnMgdG8gYmUgZW5hYmxlZD8gIDEgPSBZZXMsIDAgPSBOby4gV2hlbiBpbiBkb3VidCwgc2V0IHRvIDEuCisgKiAgQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqCisgKiBAc2EgUHJvU0xJQ19Ub25lR2VuU2V0dXAgUHJvU0xJQ19Ub25lR2VuU3RvcAorICovCisKK2ludCBQcm9TTElDX1RvbmVHZW5TdGFydCAocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYywgdUludDggdGltZXJFbik7CisKKy8qKgorICogQGJyaWVmCisgKiAgVGhpcyBmdW5jdGlvbiB0dXJucyBvZmYgdG9uZSBnZW5lcmF0aW9uIGluaXRpYXRlZCBieSBAcmVmIFByb1NMSUNfVG9uZUdlblN0YXJ0LgorICoKKyAqIEBwYXJhbVtpbl0gaFByb3NsaWMgLSB3aGljaCBjaGFubmVsIHNob3VsZCBzdG9wIHBsYXlpbmcgdGhlIHRvbmUuCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICoKKyAqIEBzYSBQcm9TTElDX1RvbmVHZW5TdGFydCBQcm9TTElDX1RvbmVHZW5TZXR1cAorICovCisKK2ludCBQcm9TTElDX1RvbmVHZW5TdG9wIChwcm9zbGljQ2hhblR5cGVfcHRyIGhQcm9zbGljKTsKKworLyoqIEB9IFRPTkVfR0VOICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiBAZGVmZ3JvdXAgRlNLX0NPTlRST0wgRlNLL0NhbGxlciBJRCBnZW5lcmF0aW9uCisgKiBUaGlzIGdyb3VwIG9mIGZ1bmN0aW9ucyBpcyByZWxhdGVkIHRvIEZTSyBnZW5lcmF0aW9uLCB0eXBpY2FsbHkgdXNlZCB3aXRoIENhbGxlciBJRC9DYWxsIFdhaXRpbmcKKyAqIGZ1bmN0aW9uYWxpdHkuIFRvIHNldCB0aGUgZnJlcXVlbmNpZXMsIHRoZSBkYXRhIHJhdGUsIGFuZCB0aGUgRlNLIEZJRk8gZGVwdGgsIHBsZWFzZSB1c2UgdGhlIGNvbmZpZ3VyYXRpb24KKyAqIEdVSSBGU0sgZGlhbG9nIGJveC4KKyAqCisgKiBIZXJlJ3MgYSBzaW1wbGUgZXhhbXBsZSBjb2RlIGZyYWdtZW50IHRvIHNlbmQgZGF0YSB2aWEgRlNLOgorICoKKyAqIEBub3RlIEluIGEgInJlYWwiIGFwcGxpY2F0aW9uLCB5b3Ugc2hvdWxkIG5vdCB1c2UgUHJvU0xJQ19DaGVja0NJREJ1ZmZlcigpLCBidXQgaW5zdGVhZAorICogICAgICAgY2FsbCBQcm9TTElDX0dldEludGVycnVwdHMoKSBhbmQgY2hlY2sgaWYgdGhlIEZTSyBpbnRlcnJydXB0IGZpcmVkIG9mZiBzaW5jZSB0aGUgCisgKiAgICAgICBQcm9TTElDX0dldEludGVycnVwdHMoKSB3aWxsIGFsc28gcmVwb3J0IG9uIGxvb3AgY2xvc3VyZS9yaW5nIHRyaXAgaW4gYWRkaXRpb24gRlNLIGJ1ZmZlcgorICogICAgICAgaW50ZXJydXB0IGFuZCB0aGUgdHdvIGZ1bmN0aW9ucyB3aWxsIGNvbmZsaWN0IHdpdGggZWFjaCBvdGhlci4KKyAqCisgKiBAY29kZQorICoKKyAqICNkZWZpbmUgRklGT19ERVBUSCAoNy1GU0tCVUZfREVQVEgpIC8vV2hlbiB3ZSByZXBvcnQgdGhlIGJ1ZmZlciBhdCBGU0sgQlVGRkVSIERFUFRILCB3ZSBjYW4gc2VuZAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9hdCBtb3N0IDEgbGVzcyB0aGFuIHRoZSBtYXhpbXVtIHNpbmNlIHRoYXQgYnl0ZSBtYXliZSBzdGlsbAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9iZSBtb2R1bGF0ZWQuIFRoZXJlZm9yZSwgd2Ugc2F5IHdlIGNhbiBzZW5kIDcgYnl0ZXMsIG5vdAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy84IGFmdGVyIHRoZSBpbnRlcnJ1cHQuCisgKgorICogLy9BU1NVTUU6IEZTSyBCdWZmZXIgZGVwdGggaW50ZXJydXB0IGhhcyBiZWVuIGVuYWJsZWQgaW4gdGhlIGNvbnN0YW50cyBmaWxlIGVhcmxpZXIuLi4KKyAqCisgKiAgLy8gVGhpcyBzaG91bGQgYmUgY2FsbGVkIGV2ZXJ5IHRpbWUgc2luY2UgaXQgaXMgbGlrZWx5IGEgdG9uZSB3YXMgcGxheWVkCisgKiAgLy8gZWFybGllciB3aGljaCByZXByb2dyYW1zIHRoZSBvc2NpbGxhdG9ycy4uLgorICogaWYoIFByb1NMSUNfRlNLU2V0dXAobXlQcm9TTElDQ2hhbiwgUFJPU0xJQ19OT1JUSF9BTUVSSUNBX0ZTSykgPT0gUkNfTk9ORSkKKyAqIHsKKyAqCisgKiAgLy8gRW5hYmxlIHRoZSBDSUQgYmxvY2ssIGF0IHRoaXMgcG9pbnQgbm8gdG9uZXMgb3RoZXIgdGhhbiB0aGUgRlNLIG9uZXMKKyAqICAvLyBzaG91bGQgYmUgcGxheWVkIG91dC4uLgorICogCVByb1NMSUNfRW5hYmxlQ0lEKG15UHJvU0xJQ0NoYW4pOworICoKKyAqICAvLyBQcmUtbG9hZCB0aGUgRlNLIEZJRk8gYnVmZmVyIHdpdGggYXQgbW9zdCA4IGJ5dGVzLgorICogCVByb1NMSUNfU2VuZENJRChteVByb1NMSUNDaGFuLGJ1ZixNSU4oYnVmc3osOCkpOworICoKKyAqCWJ5dGVzX2xlZnRfdG9fc2VuZCA9IGJ1ZnN6IC0gTUlOKGJ1ZnN6LDgpOworICoKKyAqIAl3aGlsZShieXRlc19sZWZ0X3RvX3NlbmQgPiAwKQorICogCXsKKyAqIAkJaWYoYnl0ZXNfbGVmdF90b19zZW5kIDwgRklGT19ERVBUSCkKKyAqIAkJeworICogCQkJYnl0ZXNfdG9fc2VuZCA9IGJ5dGVzX2xlZnRfdG9fc2VuZDsKKyAqIAkJfQorICogCQllbHNlCisgKiAJCXsKKyAqIAkJCWJ5dGVzX3RvX3NlbmQgPSBGSUZPX0RFUFRIOworICoJCX0KKyAqCisgKiAJCWlmKCBQcm9TTElDX1NlbmRDSUQobXlQcm9TTElDQ2hhbixidWYsYnl0ZXNfdG9fc2VuZCkgIT0gUkNfTk9ORSkKKyAqIAkJeworICogCQkJUHJvU0xJQ19EaXNhYmxlQ0lEKG15UHJvU0xJQ0NoYW4pOworICogCQkJcmV0dXJuIE1ZX0ZTS19FUlJPUjsKKyAqIAkJfQorICoKKyAqCQlieXRlc19sZWZ0X3RvX3NlbmQgLT0gYnl0ZXNfdG9fc2VuZDsKKyAqCisgKgkJaWYoYnl0ZXNfbGVmdF90b19zZW5kKQorICoJCXsKKyAqCQkJZG8KKyAqCQkJeworICoJCQkgIC8vIFNlZSBub3RlIGFib3ZlIGFib3V0IHRoaXMgZnVuY3Rpb24uLi4KKyAqCQkJCVByb1NMSUNfQ2hlY2tDSURCdWZmZXIobXlQcm9TTElDQ2hhbiwgJmlzX2ZpZm9fZW1wdHkpOworICoKKyAqCQkJfSB3aGlsZSggaXNfZmlmb19lbXB0eSAhPSAxICk7CisgKgkJfQorICoKKyAqIAl9OworICoKKyAqIAlQcm9TTElDX0Rpc2FibGVDSUQobXlQcm9TTElDQ2hhbik7CisgKiBAZW5kY29kZQorICoKKyAqIEBub3RlIFRoZSBhYm92ZSBjb2RlIGZyYWdtZW50IGlzIHN1Yi1vcHRpbWFsIHNpbmNlIGl0IGRvZXMgY29uc3RhbnRseSBwb2xsIHRoZSBDSUQgYnVmZmVyCisgKiBzdGF0ZSAtIG9uZSBtYXkgd2FudCB0byBpbXBsZW1lbnQgdGhlIGFjdHVhbCBjb2RlIHVzaW5nIGludGVycnVwdHMuCisgKgorICogQG5vdGUgVGhlIFByb1NMSUMgQVBJIGRlbW8gZG9lcyBoYXZlIGEgd29ya2luZyBleGFtcGxlIGZvciBUeXBlIDEgQ0lEIE1ETUYgZm9ybWF0LgorICoKKyAqIEB7CisgKi8KKworLyoqCisgKiBAYnJpZWYKKyAqICBDb25maWd1cmVzIHRoZSBGU0sgZ2VuZXJhdG9yIGZyb20gYSBjb25maWd1cmF0aW9uIGdlbmVyYXRlZCBieSB0aGUgY29uZmlnIHRvb2wuCisgKgorICogQHdhcm5pbmcgSWYgQHJlZiBQcm9TTElDX1RvbmVHZW5TZXR1cCB3YXMgY2FsbGVkIGVhcmxpZXIsIHRoaXMgZnVuY3Rpb24gd2lsbCBuZWVkIHRvIGJlIGNhbGxlZCBhZ2Fpbi4KKyAqCisgKiBAcGFyYW1baW5dIGhQcm9zbGljIC0gd2hpY2ggY2hhbm5lbCB0byBjb25maWd1cmUKKyAqIEBwYXJhbVtpbl0gcHJlc2V0IC0gd2hpY2ggRlNLIGNvbmZpZ3VyYXRpb24gdG8gdXNlLgorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjb21waWxlZCBvdXQgYnkgZGVmaW5pbmcgRElTQUJMRV9GU0tfU0VUVVAKKyAqLworCitpbnQgUHJvU0xJQ19GU0tTZXR1cCAocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYyxpbnQgcHJlc2V0KTsKKworLyoqCisgKiBAYnJpZWYKKyAqICBDb25maWd1cmVzIHRoZSBGU0sgZ2VuZXJhdG9yIGZyb20gYSBjb25maWd1cmF0aW9uIGdlbmVyYXRlZCBieSB0aGUgY29uZmlnIHRvb2wuCisgKgorICogQHdhcm5pbmcgSWYgQHJlZiBQcm9TTElDX1RvbmVHZW5TZXR1cCB3YXMgY2FsbGVkIGVhcmxpZXIsIHRoaXMgZnVuY3Rpb24gd2lsbCBuZWVkIHRvIGJlIGNhbGxlZCBhZ2Fpbi4KKyAqCisgKiBAcGFyYW1baW5dIHBQcm9zbGljIC0gd2hpY2ggY2hhbm5lbCB0byBjb25maWd1cmUKKyAqIEBwYXJhbVtpbl0gY2ZnIC0gd2hpY2ggRlNLIGNvbmZpZ3VyYXRpb24gdG8gdXNlLgorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjb21waWxlZCBvdXQgYnkgZGVmaW5pbmcgRElTQUJMRV9GU0tfU0VUVVAKKyAqLworCitpbnQgUHJvU0xJQ19GU0tTZXR1cFB0ciAocHJvc2xpY0NoYW5UeXBlX3B0ciBwUHJvc2xpYywgUHJvU0xJQ19GU0tfQ2ZnICpjZmcpOworCisvKioKKyAqIEBicmllZgorICogIFRoaXMgZnVuY3Rpb24gZW5hYmxlcyBGU0sgbW9kZSBhbmQgY2xlYXJzIHRoZSBGU0sgRklGTy4gIEl0IGlzIGFzc3VtZWQgdGhhdCBQQ00gaGFzIGJlZW4gZW5hYmxlZCBhbmQgdGhhdCBAcmVmIFByb1NMSUNfRlNLU2V0dXAKKyAqICBoYXMgYmVlbiBjYWxsZWQgYXQgc29tZSBwb2ludC4KKyAqCisgKiBAd2FybmluZyBJZiBAcmVmIFByb1NMSUNfVG9uZUdlblNldHVwIHdhcyBjYWxsZWQgZWFybGllciwgQHJlZiBQcm9TTElDX0ZTS1NldHVwIHdpbGwgbmVlZCB0byBiZSBjYWxsZWQgYWdhaW4uCisgKgorICogQHBhcmFtW2luXSBoUHJvc2xpYyAtIHdoaWNoIGNoYW5uZWwgdG8gY2hlY2sgdXBvbi4KKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKgorICovCisKK2ludCBQcm9TTElDX0VuYWJsZUNJRCAocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYyk7CisKKy8qKgorICogQGJyaWVmCisgKiAgVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyBGU0sgbW9kZS4KKyAqCisgKiBAcGFyYW1baW5dIGhQcm9zbGljIC0gd2hpY2ggY2hhbm5lbCB0byBkaXNhYmxlIEZTSyBtb2RlLgorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqCisgKi8KKworaW50IFByb1NMSUNfRGlzYWJsZUNJRCAocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYyk7CisKKy8qKgorICogQGJyaWVmCisgKiAgQ2hlY2sgaWYgdGhlIEZTSyBGSUZPIGlzIGVtcHR5IG9yIG5vdC4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGFmdGVyIFByb1NMSUNfU2VuZENJRC4KKyAqCisgKiBAcGFyYW1baW5dIGhQcm9zbGljIC0gd2hpY2ggY2hhbm5lbCB0byBjaGVjayB1cG9uLgorICogQHBhcmFtW291dF0gZnNrX2J1Zl9hdmFpbCAtIGlzIHRoZSBidWZmZXIgYXZhaWxhYmxlPyAxID0gWWVzLCAwICA9IE5vLgorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqCisgKiBAbm90ZSAtIFRoaXMgbW9kaWZpZXMgdGhlIElSUTEgcmVnaXN0ZXIgY29udGVudHMsIHNvIHNvbWUgb3RoZXIgaW50ZXJydXB0cyBtYXkgYmUgbG9zdC4gQW4gYWx0ZXJuYXRpdmUgaXMgdG8gZW5hYmxlIHRoZQorICogICAgICAgICBGU0sgRklGTyBpbnRlcnJ1cHQgYW5kIHRyaWdnZXIgb2ZmIG9mIGl0IHdoZW4gaXQgZG9lcyBvY2N1ciBpbiB5b3VyIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgYW5kIGNhbGwgUHJvU0xJQ19HZXRJbnRlcnJ1cHRzKCkgdG8gZGVjb2RlIHRoZSBpbnRlcnJ1cHRzIHByZXNlbnQuCisgKi8KKworaW50IFByb1NMSUNfQ2hlY2tDSURCdWZmZXIgKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMsIHVJbnQ4ICpmc2tfYnVmX2F2YWlsKTsKKworLyoqCisgKiBAYnJpZWYKKyAqICBTZW5kIG51bUJ5dGVzIGFzIEZTSyBlbmNvZGVkIGRhdGEuICBJdCBpcyBhc3N1bWVkIHRoYXQgbnVtQnl0ZXMgPD0gRklGTyBEZXB0aCAodHlwaWNhbGx5IDgpIGFuZCB0aGF0IHRoZSBGSUZPCisgKiAgaXMgZnJlZS4gSXQgaXMgYWxzbyBhc3N1bWVkIHRoYXQgQHJlZiBQcm9TTElDX1BDTVN0YXJ0IGhhcyBiZWVuIGNhbGxlZCBhbmQgdGhhdCB3ZSdyZSBpbgorICogIEByZWYgTEZfRldEX09IVCBvciBAcmVmIExGX1JFVl9PSFQgbW9kZSBmb3IgVHlwZS0xIG9yICBAcmVmIExGX1JFVl9BQ1RJVkUgb3IgQHJlZiBMRl9GV0RfQUNUSVZFCisgKiAgaWYgd2UncmUgaW4gVHlwZS0yIGNhbGxlciBJRC4KKyAqCisgKiBAcGFyYW1baW5dIGhQcm9zbGljIC0gd2hpY2ggY2hhbm5lbCB0byBzZW5kIHRoZSBkYXRhIHRocm91Z2guCisgKiBAcGFyYW1baW5dIGJ1ZmZlciAtIGJ5dGUgYXJyYXkgb2YgZGF0YSB0byBzZW5kLgorICogQHBhcmFtW2luXSBudW1CeXRlcyAtIG51bWJlciBvZiBieXRlcyB0byBzZW5kLiBNVVNUIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgRklGTyBzaXplCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICoKKyAqIEBzYSBQcm9TTElDX0NoZWNrQ0lEQnVmZmVyIFByb1NMSUNfRlNLU2V0dXAgUHJvU0xJQ19FbmFibGVDSUQgUHJvU0xJQ19EaXNhYmxlQ0lECisgKi8KKworaW50IFByb1NMSUNfU2VuZENJRCAocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYywgdUludDggKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgIHVJbnQ4IG51bUJ5dGVzKTsKKworLyoqCisgKiBAYnJpZWYgQ29udHJvbCBpZiB0aGUgc3RhcnQvc3RvcCBiaXRzIGFyZSBlbmFibGVkLgorICoKKyAqIEBwYXJhbVtpbl0gaFByb3NsaWMgLSB3aGljaCBjaGFubmVsIHRvIGFkanVzdAorICogQHBhcmFtW2luXSBlbmFibGVfc3RhcnRTdG9wIC0gVFJVRSAtIHN0YXJ0L3N0b3AgYml0cyBhcmUgZW5hYmxlZCwgRkFMU0UgLSBkaXNhYmxlZAorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqCisgKiBAbm90ZTogVGhpcyBkb2VzIG5vdCByZXBsYWNlIEByZWYgUHJvU0xJQ19GU0tTZXR1cCwgYnV0IGlzIGEgc3VwcGxlbWVudCB0aGF0IHRvZ2dsZXMKKyAqIG9uZSBvZiB0aGUgcmVnaXN0ZXJzIHRoYXQgdGhlIHByZXNldCBtb2RpZmllcy4gIEl0IGlzIGFzc3VtZWQgdGhhdCBAcmVmIFByb1NMSUNfRlNLU2V0dXAKKyAqIHdhcyBjYWxsZWQgYXQgc29tZSBwb2ludCBlYXJsaWVyIGluIHRoZSBjb2RlIGZsb3cuCisgKi8KKworaW50IFByb1NMSUNfTW9kaWZ5Q0lEU3RhcnRCaXRzKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUludDggZW5hYmxlX3N0YXJ0U3RvcCk7CisKKworLyoqIEB9IEZTS19DT05UUk9MICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiBAZGVmZ3JvdXAgQVVESU9fQ09OVFJPTCBBdWRpbyBjb250cm9sL2NvbmZpZ3VyYXRpb24KKyAqIEB7CisgKi8KKy8qKiBAZGVmZ3JvdXAgUENNX0NPTlRST0wgUENNIGNvbnRyb2wKKyAqIFRoaXMgZ3JvdXAgb2YgZnVuY3Rpb25zIGlzIHVzZWQgdG8gY29uZmlndXJlIGFuZCBjb250cm9sIHRoZSBQQ00gYnVzLiAgSXQgaXMgZXNzZW50aWFsIHRoYXQgQHJlZiBQcm9TTElDX1BDTVNldHVwLAorICogQHJlZiBQcm9TTElDX1BDTVRpbWVTbG90U2V0dXAgYW5kIEByZWYgUHJvU0xJQ19QQ01TdGFydCBhcmUgY2FsbGVkIHByaW9yIHRvIGFueSB0b25lIG9yIEZTSyBnZW5lcmF0aW9uLgorICoKKyAqIFNlZSBAcmVmIFBST1NMSUNfQVVESU8gY29kZSBmcmFnbWVudCBvbiBob3cgdGhlIGZ1bmN0aW9ucyByZWxhdGUgZHVyaW5nIGluaXRpYWxpemF0aW9uLgorICoKKyAqIEB7CisgKi8KKworLyoqCisgKiBAYnJpZWYKKyAqICBUaGlzIGNvbmZpZ3VyZXMgdGhlIFBDTSBidXMgd2l0aCBwYXJhbWV0ZXJzIHN1Y2ggYXMgY29tcGFuZGluZyBhbmQgZGF0YSBsYXRjaGluZyB0aW1pbmcuCisgKgorICogQHBhcmFtW2luXSBoUHJvc2xpYyAtIHdoaWNoIGNoYW5uZWwgc2hvdWxkIGJlIGNvbmZpZ3VyZWQKKyAqIEBwYXJhbVtpbl0gcHJlc2V0IC0gd2hpY2ggcHJlc2V0IHRvIHVzZSBmcm9tIHRoZSBjb25zdGFudHMgZmlsZSAoc2VlIGNvbmZpZ3VyYXRpb24gdG9vbCwgUENNIGRpYWxvZyBib3gpCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICoKKyAqIEBzYSBQcm9TTElDX1BDTVRpbWVTbG90U2V0dXAgUHJvU0xJQ19QQ01TdGFydAorICovCisKK2ludCBQcm9TTElDX1BDTVNldHVwIChwcm9zbGljQ2hhblR5cGVfcHRyIGhQcm9zbGljLGludCBwcmVzZXQpOworCisvKioKKyAqIEBicmllZgorICogIFRoaXMgY29uZmlndXJlcyB0aGUgUHJvU0xJQyB0byBsYXRjaCBhbmQgc2VuZCB0aGUgUENNIGRhdGEgYXQgYSBwYXJ0aWN1bGFyIHRpbWVzbG90IGluIHRlcm1zIG9mIFBDTSBjbG9ja3MgKFBDTEspLgorICoKKyAqICBUeXBpY2FsbHksIGZvciBhTGF3IGFuZCB1TGF3LCBvbmUgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGNhbGN1bGF0aW9uIHRvIHNldCB0aGUgcnhjb3VudCBhbmQgdHhjb3VudCBwYXJhbWV0ZXJzOgorICoKKyAqICByeGNvdW50ID0gdHhjb3VudCA9IChjaGFubmVsX251bWJlcikqODsKKyAqCisgKiAgRm9yIDE2IGJpdCBsaW5lYXIsIG9uZSBjYW4gZG8gdGhlIGZvbGxvd2luZzoKKyAqCisgKiAgcnhjb3VudCA9IHR4Y291bnQgPSAoY2hhbm5lbF9udW1iZXIpKjE2OworICoKKyAqIHdoZXJlIGNoYW5uZWxfbnVtYmVyID0gd2hpY2ggUHJvU0xJQyBjaGFubmVsIG9uIHRoZSBQQ00gYnVzLiAgRm9yIGV4YW1wbGUsIGlmIG9uZSB3ZXJlIHRvIGhhdmUgMiBkdWFsIGNoYW5uZWwKKyAqIFByb1NMSUMncyBvbiB0aGUgc2FtZSBQQ00gYnVzLCB0aGlzIHZhbHVlIHdvdWxkIHJhbmdlIGZyb20gMCB0byAzLgorICoKKyAqIEBwYXJhbVtpbl0gaFByb3NsaWMgLSB3aGljaCBjaGFubmVsIHNob3VsZCBiZSBjb25maWd1cmVkCisgKiBAcGFyYW1baW5dIHJ4Y291bnQgLSAgaG93IG1hbnkgY2xvY2tzIHVudGlsIHJlYWRpbmcgZGF0YSBmcm9tIHRoZSBQQ00gYnVzCisgKiBAcGFyYW1baW5dIHR4Y291bnQgLSAgaG93IG1hbnkgY2xvY2tzIHVudGlsIHdyaXRpbmcgZGF0YSB0byB0aGUgUENNIGJ1cy4KKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKgorICogQHNhIFByb1NMSUNfUENNU2V0dXAgUHJvU0xJQ19QQ01TdGFydAorICovCisKK2ludCBQcm9TTElDX1BDTVRpbWVTbG90U2V0dXAgKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMsIHVJbnQxNiByeGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUludDE2IHR4Y291bnQpOworCisvKioKKyAqIEBicmllZgorICogIFRoaXMgZW5hYmxlcyBQQ00gdHJhbnNmZXIgb24gdGhlIGdpdmVuIFByb1NMSUMgY2hhbm5lbC4KKyAqCisgKiBAcGFyYW1baW5dIGhQcm9zbGljIC0gLSB3aGljaCBjaGFubmVsIHNob3VsZCBiZSBlbmFibGVkCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICoKKyAqIEBzYSBQcm9TTElDX1BDTVNldHVwIFByb1NMSUNfUENNVGltZVNsb3RTZXR1cCBQcm9TTElDX1BDTVN0b3AKKyAqLworCitpbnQgUHJvU0xJQ19QQ01TdGFydCAocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYyk7CisKKy8qKgorICogQGJyaWVmCisgKiAgVGhpcyBkaXNhYmxlcyBQQ00gdHJhbnNmZXIgb24gdGhlIGdpdmVuIFByb1NMSUMgY2hhbm5lbC4gVHlwaWNhbGx5LCB0aGlzIGlzIGNhbGxlZCBmb3IgZGVidWdnaW5nCisgKiAgcHVycG9zZXMgb25seS4KKyAqCisgKiBAcGFyYW1baW5dIGhQcm9zbGljIC0gLSB3aGljaCBjaGFubmVsIHNob3VsZCBiZSBkaXNhYmxlZAorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqCisgKiBAc2EgUHJvU0xJQ19QQ01TZXR1cCBQcm9TTElDX1BDTVRpbWVTbG90U2V0dXAgUHJvU0xJQ19QQ01TdGFydAorICovCisKK2ludCBQcm9TTElDX1BDTVN0b3AgKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMpOworCisvKioKKyAqIEBicmllZgorICogUHJvZ3JhbSBkZXNpcmVkIGxvb3BiYWNrIHRlc3QgbW9kZSBmb3IgdGhlIGdpdmVuIGNoYW5uZWwuCisgKgorICogQHBhcmFtW2luXSBoUHJvc2xpYyAtICB3aGljaCBjaGFubmVsIHNob3VsZCBiZSBtb2RpZmllZAorICogQHBhcmFtW2luXSBuZXdNb2RlIC0gd2hhdCBpcyB0aGUgZGVzaXJlZCBsb29wYmFjayBtb2RlLgorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqCisgKi8KKworaW50IFByb1NMSUNfU2V0TG9vcGJhY2tNb2RlIChwcm9zbGljQ2hhblR5cGVfcHRyIGhQcm9zbGljLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9zbGljTG9vcGJhY2tNb2RlcyBuZXdNb2RlKTsKKworLyoqCisgKiBAYnJpZWYKKyAqIFByb2dyYW0gZGVzaXJlZCBtdXRlIHRlc3QgbW9kZSBmb3IgdGhlIGdpdmVuIGNoYW5uZWwuCisgKgorICogQHBhcmFtW2luXSBoUHJvc2xpYyAtIHdoaWNoIGNoYW5uZWwgc2hvdWxkIGJlIG1vZGlmaWVkCisgKiBAcGFyYW1baW5dIG11dGVFbiAtIHdoYXQgaXMgdGhlIGRlc2lyZWQgbW9kZS4KKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKgorICovCisKK2ludCBQcm9TTElDX1NldE11dGVTdGF0dXMgKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9zbGljTXV0ZU1vZGVzIG11dGVFbik7CisKKy8qKiBAfSBQQ01fQ09OVFJPTCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogQGRlZmdyb3VwIEdBSU5fQ09OVFJPTCBHYWluIGNvbnRyb2wKKyAqIEB7CisgKi8KKworLyoqCisgKiBAYnJpZWYKKyAqICBTZXRzIHRoZSBUWCBhdWRpbyBnYWluICh0b3dhcmQgdGhlIG5ldHdvcmspLiBUaGlzIGZ1bmNpb24gRE9FUyBOT1QgYWN0dWFsbHkgY2FsY3VsYXRlIHRoZSB2YWx1ZXMgZm9yIHRoZSBwcmVzZXQuCisgKiAgVG8gZHluYW1pY2FsbHkgY2FsY3VsYXRlIHRoZSB2YWx1ZXMsIHlvdSB3b3VsZCBuZWVkIHRvIGNhbGwgQHJlZiBQcm9TTElDX2RiZ1NldFRYR2FpbiAuCisgKgorICogQHBhcmFtW2luXSBoUHJvc2xpYyAtIHdoaWNoIGNoYW5uZWwgdG8gY29uZmlndXJlCisgKiBAcGFyYW1baW5dIHByZXNldCAtIHdoaWNoIHByZXNldCB0byB1c2UgKHRoaXMgbWF5IGJlIGZyb20gdGhlIGNvbnN0YW50cyBmaWxlKQorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqCisgKiBAbm90ZSBPbmUgY2FuIHVzZSB0aGlzIGluIGNvbmp1bmN0aW9uIHdpdGggQHJlZiBQcm9TTElDX2RiZ1NldFRYR2FpbiB0byBkeW5hbWljYWxseQorICogY2hhbmdlIHRoZSBhdWRpbyBnYWluLiBJdCBpcyBpbXBvcnRhbnQgdG8gaGF2ZSB0aGUgcHJlc2V0cyBvZiBib3RoIHJvdXRpbmVzIG1hdGNoLgorICoKKyAqIFRoZSBmb2xsb3dpbmcgY29kZSAqIGZyYWdtZW50IHdpbGwgc2V0IHRoZSBUWCBhdWRpbyBnYWluIHRvIC01IGRCOgorICoKKyAqIEBjb2RlCisgKiBQcm9TTElDX2RiZ1NldFRYR2FpbihteUNoYW5uZWwsIC01LCBNWV9JTVBFREVOQ0UsMCk7CisgKiBQcm9TTElDX1RYQXVkaW9HYWluU2V0dXAobXlDaGFubmVsLDApOworICogQGVuZGNvZGUKKyAqCisgKiBAc2EgUHJvU0xJQ19SWEF1ZGlvR2FpblNldHVwIFByb1NMSUNfZGJnU2V0VFhHYWluIFByb1NMSUNfQXVkaW9HYWluU2V0dXAKKyAqLworCitpbnQgUHJvU0xJQ19UWEF1ZGlvR2FpblNldHVwIChwcm9zbGljQ2hhblR5cGVfcHRyIGhQcm9zbGljLGludCBwcmVzZXQpOworCisvKioKKyAqIEBicmllZgorICogIEFkanVzdHMgZ2FpbiBvZiBUWCBhdWRpbyBwYXRoIGJ5IHNjYWxpbmcgdGhlIFBHQSBhbmQgRXF1YWxpemVyIGNvZWZmaWNpZW50cyBieSB0aGUgc3VwcGxpZWQgdmFsdWVzLgorICoKKyAqIEBwYXJhbVtpbl0gaFByb3NsaWMgICAtIHdoaWNoIGNoYW5uZWwgdG8gY29uZmlndXJlCisgKiBAcGFyYW1baW5dIHByZXNldCAgICAgLSB3aGljaCBwcmVzZXQgdG8gdXNlICh0aGlzIG1heSBiZSBmcm9tIHRoZSBjb25zdGFudHMgZmlsZSkKKyAqIEBwYXJhbVtpbl0gcGdhX3NjYWxlICAtIHNjYWxlIGZhY3RvciB3aGljaCBwZ2EgY29lZmZpY2llbnRzIGFyZSB0byBiZSBtdWx0aXBsaWVkCisgKiBAcGFyYW1baW5dIGVxX3NjYWxlICAgLSBzY2FsZSBmYWN0b3Igd2hpY2ggZXF1YWxpemVyIGNvZWZmaWNpZW50cyBhcmUgdG8gYmUgbXVsdGlwbGllZAorICogQHJldHZhbCBpbnQgICAgICAgICAgIC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBpbiBsaWV1IG9mIEByZWYgUHJvU0xJQ19kYmdTZXRUWEdhaW4gdG8gZHluYW1pY2FsbHkKKyAqIGNoYW5nZSB0aGUgYXVkaW8gZ2FpbiB3aGVuIGdhaW4gc3RlcHMgb2YgMC4xZEIgZG8gbm90IHN1ZmZpY2UsIG9yIGlmIGFuIGF0dGVudWF0aW9uCisgKiA+IDMwZEIgaXMgcmVxdWlyZWQuCisgKgorICogVGhlIGZvbGxvd2luZyBjb2RlICogZnJhZ21lbnQgd2lsbCBzY2FsZSB0aGUgVFggYXVkaW8gZ2FpbiBieSBhIGZhY3RvciBvZiAoMC43MDcpKigwLjUwMCkKKyAqCisgKiBAY29kZQorICogdUludDMyICBwZ2FfZ2Fpbl9zY2FsZSA9IDcwNzsKKyAqIHVJbnQzMiAgZXFfZ2Fpbl9zY2FsZSAgPSA1MDA7CisgKiBQcm9TTElDX1RYQXVkaW9HYWluU2NhbGUocFByb3NsaWMsREVGQVVMVF9QUkVTRVQscGdhX2dhaW5fc2NhbGUsZXFfZ2Fpbl9zY2FsZSk7CisgKiBAZW5kY29kZQorICoKKyAqIEBzYSBQcm9TTElDX1JYQXVkaW9HYWluU2NhbGUKKyAqLworaW50IFByb1NMSUNfVFhBdWRpb0dhaW5TY2FsZSAocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYyxpbnQgcHJlc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUludDMyIHBnYV9zY2FsZSx1SW50MzIgZXFfc2NhbGUpOworCisvKioKKyAqIEBicmllZgorICogIENvbmZpZ3VyZXMgdGhlIFJYIGF1ZGlvIGdhaW4gKHRvd2FyZCB0aGUgdGVsZXBob25lKS4gVGhpcyBmdW5jdGlvbiBET0VTIE5PVCBhY3R1YWxseSBjYWxjdWxhdGUgdGhlIHZhbHVlcyBmb3IgdGhlIHByZXNldC4KKyAqICBUbyBkeW5hbWljYWxseSBjYWxjdWxhdGUgdGhlIHZhbHVlcywgeW91IHdvdWxkIG5lZWQgdG8gY2FsbCBAcmVmIFByb1NMSUNfZGJnU2V0UlhHYWluIC4KKyAqCisgKiBAcGFyYW1baW5dIGhQcm9zbGljIC0gd2hpY2ggY2hhbm5lbCB0byBjb25maWd1cmUKKyAqIEBwYXJhbVtpbl0gcHJlc2V0IC0gd2hpY2ggcHJlc2V0IHRvIHVzZSAodGhpcyBtYXkgYmUgZnJvbSB0aGUgY29uc3RhbnRzIGZpbGUpCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICoKKyAqIEBub3RlIE9uZSBjYW4gdXNlIHRoaXMgaW4gY29uanVuY3Rpb24gd2l0aCBAcmVmIFByb1NMSUNfZGJnU2V0UlhHYWluIHRvIGR5bmFtaWNhbGx5CisgKiBjaGFuZ2UgdGhlIGF1ZGlvIGdhaW4uIEl0IGlzIGltcG9ydGFudCB0byBoYXZlIHRoZSBwcmVzZXRzIG9mIGJvdGggcm91dGluZXMgbWF0Y2guCisgKgorICogVGhlIGZvbGxvd2luZyBjb2RlICogZnJhZ21lbnQgd2lsbCBzZXQgdGhlIFJYIGF1ZGlvIGdhaW4gdG8gLTEgZEI6CisgKgorICogQGNvZGUKKyAqIFByb1NMSUNfZGJnU2V0UlhHYWluKG15Q2hhbm5lbCwgLTEsIE1ZX0lNUEVERU5DRSwwKTsKKyAqIFByb1NMSUNfUlhBdWRpb0dhaW5TZXR1cChteUNoYW5uZWwsMCk7CisgKiBAZW5kY29kZQorICoKKyAqIEBzYSBQcm9TTElDX1RYQXVkaW9HYWluU2V0dXAgUHJvU0xJQ19kYmdTZXRSWEdhaW4gUHJvU0xJQ19BdWRpb0dhaW5TZXR1cAorICovCisKK2ludCBQcm9TTElDX1JYQXVkaW9HYWluU2V0dXAgKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMsaW50IHByZXNldCk7CisKKy8qKgorICogQGJyaWVmCisgKiAgQWRqdXN0cyBnYWluIG9mIFJYIGF1ZGlvIHBhdGggYnkgc2NhbGluZyB0aGUgUEdBIGFuZCBFcXVhbGl6ZXIgY29lZmZpY2llbnRzIGJ5IHRoZSBzdXBwbGllZCB2YWx1ZXMuCisgKgorICogQHBhcmFtW2luXSBoUHJvc2xpYyAgIC0gd2hpY2ggY2hhbm5lbCB0byBjb25maWd1cmUKKyAqIEBwYXJhbVtpbl0gcHJlc2V0ICAgICAtIHdoaWNoIHByZXNldCB0byB1c2UgKHRoaXMgbWF5IGJlIGZyb20gdGhlIGNvbnN0YW50cyBmaWxlKQorICogQHBhcmFtW2luXSBwZ2Ffc2NhbGUgIC0gc2NhbGUgZmFjdG9yIHdoaWNoIHBnYSBjb2VmZmljaWVudHMgYXJlIHRvIGJlIG11bHRpcGxpZWQKKyAqIEBwYXJhbVtpbl0gZXFfc2NhbGUgICAtIHNjYWxlIGZhY3RvciB3aGljaCBlcXVhbGl6ZXIgY29lZmZpY2llbnRzIGFyZSB0byBiZSBtdWx0aXBsaWVkCisgKiBAcmV0dmFsIGludCAgICAgICAgICAgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGluIGxpZXUgb2YgQHJlZiBQcm9TTElDX2RiZ1NldFJYR2FpbiB0byBkeW5hbWljYWxseQorICogY2hhbmdlIHRoZSBhdWRpbyBnYWluIHdoZW4gZ2FpbiBzdGVwcyBvZiAwLjFkQiBkbyBub3Qgc3VmZmljZSwgb3IgaWYgYW4gYXR0ZW51YXRpb24KKyAqID4gMzBkQiBpcyByZXF1aXJlZC4KKyAqCisgKiBUaGUgZm9sbG93aW5nIGNvZGUgKiBmcmFnbWVudCB3aWxsIHNjYWxlIHRoZSBUWCBhdWRpbyBnYWluIGJ5IGEgZmFjdG9yIG9mICgwLjcwNykqKDAuNTAwKQorICoKKyAqIEBjb2RlCisgKiB1SW50MzIgIHBnYV9nYWluX3NjYWxlID0gNzA3OworICogdUludDMyICBlcV9nYWluX3NjYWxlICA9IDUwMDsKKyAqIFByb1NMSUNfUlhBdWRpb0dhaW5TY2FsZShwUHJvc2xpYyxERUZBVUxUX1BSRVNFVCxwZ2FfZ2Fpbl9zY2FsZSxlcV9nYWluX3NjYWxlKTsKKyAqIEBlbmRjb2RlCisgKgorICogQHNhIFByb1NMSUNfVFhBdWRpb0dhaW5TY2FsZQorICovCitpbnQgUHJvU0xJQ19SWEF1ZGlvR2FpblNjYWxlIChwcm9zbGljQ2hhblR5cGVfcHRyIGhQcm9zbGljLGludCBwcmVzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1SW50MzIgcGdhX3NjYWxlLHVJbnQzMiBlcV9zY2FsZSk7CisKKy8qKgorICogQGJyaWVmCisgKiAgQ29uZmlndXJlcyBhbmQgc2V0cyB0aGUgYXVkaW8gZ2FpbnMgLSBmb3IgYm90aCBSWCAodG93YXJkIHRoZSBwaG9uZSkgYW5kIHRoZSBUWCAodG93YXJkIHRoZSBuZXR3b3JrKS4gVW5saWtlCisgKiAgdGhlIEByZWYgUHJvU0xJQ19SWEF1ZGlvR2FpblNldHVwIGFuZCBAcmVmIFByb1NMSUNfVFhBdWRpb0dhaW5TZXR1cCB0aGlzIGRvZXMgYm90aCB0aGUgY2FsY3VsYXRpb25zIGFuZCB0aGVuCisgKiAgY29uZmlndXJlcyB0aGUgZ2l2ZW4gY2hhbm5lbCBpbiBvbmUgc3RlcC4gIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgcHJlc2V0IGdhaW4gYXJyYXkgaXMgYXQgbGVhc3QgMiBlbGVtZW50cyBpbiBzaXplLgorICoKKyAqIEBwYXJhbVtpbl0gaFByb3NsaWMgLSB3aGljaCBjaGFubmVsIHRvIGNvbmZpZ3VyZQorICogQHBhcmFtW2luXSByeGdhaW4gLSB3aGF0IGlzIHRoZSBnYWluL2xvc3Mgb2YgdGhlIFJYIHRyYW5zbWl0IHBhdGggaW4gMSBkQiB1bml0cyAobmVnYXRpdmUgPSBhdHRlbnVhdGlvbikKKyAqIEBwYXJhbVtpbl0gdHhnYWluIC0gd2hhdCBpcyB0aGUgZ2Fpbi9sb3NzIG9mIHRoZSBUWCB0cmFuc21pdCBwYXRoIGluIDEgZEIgdW5pdHMgKG5lZ2F0aXZlID0gYXR0ZW51YXRpb24pCisgKiBAcGFyYW1baW5dIHByZXNldCAtIHdoYXQgaXMgdGhlIGltcGVkYW5jZSBwcmVzZXQgdmFsdWUKKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKgorICogVGhlIGZvbGxvd2luZyBjb2RlICogZnJhZ21lbnQgd2lsbCBzZXQgdGhlIFJYIGF1ZGlvIGdhaW4gdG8gLTEgZEIgc25kIFRYIGF1ZGlvIGdhaW4gdG8gLTUgZEI6CisgKgorICogQGNvZGUKKyAqIFByb1NMSUNfQXVkaW9HYWluKG15Q2hhbm5lbCwgLTEsIC01LCAgTVlfSU1QRURFTkNFKTsKKyAqIEBlbmRjb2RlCisgKgorICogQHNhIFByb1NMSUNfVFhBdWRpb0dhaW5TZXR1cCBQcm9TTElDX2RiZ1NldFJYR2FpbiBQcm9TTElDX2RiZ1NldFJYR2FpbiBQcm9TTElDX2RiZ1NldFRYR2FpbgorICovCisKK2ludCBQcm9TTElDX0F1ZGlvR2FpblNldHVwIChwcm9zbGljQ2hhblR5cGVfcHRyIGhQcm9zbGljLGludDMyIHJ4Z2FpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMiB0eGdhaW4saW50IHByZXNldCk7CisKKy8qKgorICogQGJyaWVmCisgKiAgVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBwcmVzZXQgdmFsdWVzIGZvciB0aGUgUlggYXVkaW8gKHRvd2FyZCB0aGUgdGVsZXBob25lKSAtIGl0IGRvZXMgTk9UIHNldCB0aGUKKyAqICBhY3R1YWwgcmVnaXN0ZXIgdmFsdWVzLiAgRm9yIHRoYXQsIHBsZWFzZSB1c2UgQHJlZiBQcm9TTElDX1JYQXVkaW9HYWluU2V0dXAgLgorICoKKyAqIEBwYXJhbVtpbl0gcFByb3NsaWMgLSB3aGljaCBjaGFubmVsIHRvIGNvbmZpZ3VyZQorICogQHBhcmFtW2luXSBnYWluIC0gZ2FpbiB0byBzZXQgdGhlIHByZXNldCB2YWx1ZXMgdG8uCisgKiBAcGFyYW1baW5dIGltcGVkYW5jZV9wcmVzZXQgLSBpbXBlZGVuY2UgcHJlc2V0IGluIHRoZSBjb25zdGFudHMgZmlsZS4KKyAqIEBwYXJhbVtpbl0gYXVkaW9fZ2Fpbl9wcmVzZXQgLSBpbmRleCB0byB0aGUgYXVkaW8gZ2FpbiBwcmVzZXQgdG8gc3RvcmUgdGhlIHZhbHVlLgorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqCisgKiBAc2EgUHJvU0xJQ19SWEF1ZGlvR2FpblNldHVwIFByb1NMSUNfQXVkaW9HYWluU2V0dXAgUHJvU0xJQ19kYmdTZXRUWEdhaW4KKyAqLworCitpbnQgUHJvU0xJQ19kYmdTZXRSWEdhaW4gKHByb3NsaWNDaGFuVHlwZSAqcFByb3NsaWMsIGludDMyIGdhaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbXBlZGFuY2VfcHJlc2V0LCBpbnQgYXVkaW9fZ2Fpbl9wcmVzZXQpOworCisvKioKKyAqIEBicmllZgorICogIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgcHJlc2V0IHZhbHVlcyBmb3IgdGhlIFRYIGF1ZGlvICh0b3dhcmQgdGhlIG5ldHdvcmspIC0gaXQgZG9lcyBOT1Qgc2V0IHRoZQorICogIGFjdHVhbCByZWdpc3RlciB2YWx1ZXMuICBGb3IgdGhhdCwgcGxlYXNlIHVzZSBAcmVmIFByb1NMSUNfVFhBdWRpb0dhaW5TZXR1cCAuCisgKgorICogQHBhcmFtW2luXSBwUHJvc2xpYyAtIHdoaWNoIGNoYW5uZWwgdG8gY29uZmlndXJlCisgKiBAcGFyYW1baW5dIGdhaW4gLSBnYWluIHRvIHNldCB0aGUgcHJlc2V0IHZhbHVlcyB0by4KKyAqIEBwYXJhbVtpbl0gaW1wZWRhbmNlX3ByZXNldCAtIGltcGVkYW5jZSBwcmVzZXQgaW4gdGhlIGNvbnN0YW50cyBmaWxlLgorICogQHBhcmFtW2luXSBhdWRpb19nYWluX3ByZXNldCAtIGluZGV4IHRvIHRoZSBhdWRpbyBnYWluIHByZXNldCB0byBzdG9yZSB0aGUgdmFsdWUuCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICoKKyAqIEBzYSBQcm9TTElDX1RYQXVkaW9HYWluU2V0dXAgUHJvU0xJQ19BdWRpb0dhaW5TZXR1cCBQcm9TTElDX2RiZ1NldFJYR2FpbgorICovCisKK2ludCBQcm9TTElDX2RiZ1NldFRYR2FpbiAocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYywgaW50MzIgZ2FpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGltcGVkYW5jZV9wcmVzZXQsIGludCBhdWRpb19nYWluX3ByZXNldCk7CisKKy8qKiBAfSBHQUlOX0NPTlRST0wgKi8KKy8qKiBAfSBBVURJT19DT05UUk9MICovCisvKiogQH0gUFJPU0xJQ19BVURJTyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogQGRlZmdyb3VwIEhDX0RFVEVDVCBIb29rIENoYW5nZSBkZXRlY3Rpb24KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGdyb3VwIGhhcyByb3V0aW5lcyB1c2VkIHRvIGltcGxlbWVudCBhIHB1bHNlIGRpYWwsIGhvb2sgZmxhc2gKKyAqIGFuZCBnZW5lcmFsIGhvb2sgY2hhbmdlIGRldGVjdGlvbi4gVGhlIG91dGxpbmUgb2YgaG93IHRvIHVzZSB0aGVzZQorICogZnVuY3Rpb25zIGlzIGFzIGZvbGxvd3M6CisgKgorICogLSBJbml0aWFsaXplIHRoZSBkYXRhIHN0cnVjdHVyZSB3LyBAcmVmIFByb1NMSUNfSW5pdGlhbGl6ZUhvb2tDaGFuZ2VEZXRlY3QKKyAqIC0gV2hlbiBob29rIGNoYW5nZSBpcyBkZXRlY3RlZCBvciBpZiB0aGVyZSBoYXMgYmVlbiBubyBhY3Rpdml0eSBmb3IgYSBtaW5pbXVtCisgKiAgIG9mIHRoZSBpbnRlcmRpZ2l0IHRpbWUsIGNhbGwgQHJlZiBQcm9TTElDX0hvb2tDaGFuZ2VEZXRlY3QuIEtlZXAgb24gY2FsbGluZworICogICB0aGUgZnVuY3Rpb24gdW50aWwgd2UgaGF2ZSBhIHJldHVybiBjb2RlIG5vdCBlcXVhbCB0byBTSV9IQ19ORUVEX01PUkVfUE9MTFMuCisgKiAgIEFnYWluLCB0aGUgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCwgd2hlbiBubyBob29rIGFjdGl2aXR5IGlzIGRldGVjdGVkIGF0CisgKiAgIG1pbmltdW0gb2YgdGhlIGludGVyZGlnaXQgdGltZS4KKyAqCisgKiAgIEdlbmVyYWwgdGhlb3J5IChwdWxzZSBkaWdpdCk6CisgKgorICogICAtLS18X19ffC0tLS0tfF9ffC0tLS0tLS0tLQorICoKKyAqICAgQSAgICBCICAgIEMgICAgQiAgIEQKKyAqCisgKiAgIEEgLSBPZmZob29rICh0aW1lIHVua25vd24pCisgKiAgIEIgLSBPbmhvb2sgKGJyZWFrIHRpbWUpCisgKiAgIEMgLSBPZmZob29rIChtYWtlIHRpbWUpCisgKiAgIEQgLSBJbnRlcmRpZ2l0IGRlbGF5CisgKgorICogICBXZSByZXBvcnQgYWZ0ZXIgRCBvY2N1cnMgYSBwdWxzZSBkaWdpdCBhcyBsb25nIGFzIHRoZSBkdXJhdGlvbiBmb3IgQgorICogICBpcyBtZXQuCisgKgorICogICBGb3IgaG9vayBmbGFzaCwgd2UgYXJlIGxvb2tpbmcgYXQKKyAqCisgKiAgIC0tLS18X19fX19fX19fX19fX19fX3wtLS0tLS0tLS0tLQorICoKKyAqCisgKiAgSGVyZSB3ZSdyZSBsb29raW5nIGZvciB0aGUgcHVsc2Ugd2lkdGggbWVldHMgYSBjZXJ0YWluIG1pbi9tYXggdGltZS4gIElmIHRoZQorICogIHRpbWUgaXMgZXhjZWVkZWQsIHRoZW4gd2UgaGF2ZSBsaWtlbHkgYSBvbmhvb2sgb3Igb2ZmaG9vayBldmVudC4KKyAqCisgKiAgIEBub3RlIFRoaXMgc2V0IG9mIGZ1bmN0aW9ucyByZXF1aXJlIHRoYXQgdGhlIGVsYXBzZWQgdGltZXIgZnVuY3Rpb25zCisgKiAgIGRvY3VtZW50ZWQgaW4gQHJlZiBQUk9TTElDX0NVU1RPTUVSX1RJTUVSIGFyZSBpbXBsZW1lbnRlZC4KKyAqCisgKiBAeworICovCisKKy8qKgorICogQGJyaWVmCisgKiAgSW5pdGlhbGl6ZSBwdWxzZSBkaWFsL2hvb2sgZGV0ZWN0aW9uIHBhcmFtZXRlcnMuCisgKgorICogQHBhcmFtW2luLG91dF0gcFB1bHNlIC0gdGhlIHN0cnVjdHVyZSB0aGF0IGlzIHRvIGJlIGluaXRpYWxpemVkLiAgUmVmZXIgdG8geW91ciB0YXJnZXQgbWFya2V0J3MgcHVsc2UgZGlhbCBzdGFuZGFyZCBmb3IgZXhhY3QgdmFsdWVzLgorICogQHBhcmFtW2luXSBob29rVGltZSAtIGEgdGltZXIgb2JqZWN0IHN1aXRhYmxlIHRvIGJlIHBhc3NlZCB0byBhIGZ1bmN0aW9uIG9mIHR5cGUgQHJlZiBzeXN0ZW1fdGltZUVsYXBzZWRfZnB0cgorICoKKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKi8KKworaW50IFByb1NMSUNfSW5pdGlhbGl6ZUhvb2tDaGFuZ2VEZXRlY3QoaG9va0NoYW5nZVR5cGUgKnBQdWxzZSx2b2lkICpob29rVGltZSk7CisKKy8qKgorICogQGJyaWVmCisgKiAgSW1wbGVtZW50cyBwdWxzZSBkaWFsIGRldGVjdGlvbiBhbmQgc2hvdWxkIGJlIGNhbGxlZCBhdCBldmVyeSBob29rIHRyYW5zaXRpb24gYW5kIGFmdGVyIHRoZSBtaW5pbXVtIGludGVyZGlnaXQgZGVsYXkgdGltZSAoc2hvdWxkIGNvbnRpbnVlIGNhbGxpbmcgdW50aWwKKyAqICB0aGUgZnVuY3Rpb24gcmV0dXJucyBiYWNrIHdpdGggYSB2YWx1ZSBvdGhlciB0aGFuIFNJX0hDX05FRURfTU9SRV9QT0xMUy4KKyAqCisgKiBAcGFyYW1baW5dIHBQcm9zbGljIC0gd2hpY2ggY2hhbm5lbCBoYWQgYSBob29rIHRyYW5zaXRpb24uCisgKiBAcGFyYW1baW5dIHBQdWxzZWRpYWxDZmcgLSB3aGF0IGlzIHRoZSBjcml0ZXJpYSB0byBkZXRlcm1pbmUgb24vb2ZmIGhvb2sgc3RhdGVzLgorICogQHBhcmFtW2luLG91dF0gcFB1bHNlRGlhbERhdGEgLSBjb250aWFucyB0aGUgdGltZXIgaW5mb3JtYXRpb24gdGhhdCB3YXMgc2V0IGluCisgKiBAcmVmIFByb1NMSUNfSW5pdGlhbGl6ZUhvb2tDaGFuZ2VEZXRlY3QgYXMgd2VsbCBhcyB0aGUgcHVsc2UgZGlnaXQgZGV0ZWN0ZWQKKyAqCisgKiBAcmV0dmFsIGludCAtIGVpdGhlciBTSV9IQ194eHggdmFsdWVzIG9yIGEgdmFsdWUgYmV0d2VlbiAxLTEwIGZvciB0aGUgbnVtYmVyIG9mIHB1bHNlcyBkZXRlY3RlZC4gIEluIG1vc3QgY2FzZXMsIGEgMCBpcyAxMCBwdWxzZXMuICBQbGVhc2UgcmVmZXIgdG8KKyAqIHlvdXIgY291bnRyeSdzIHB1bHNlIGRpYWwgc3RhbmRhcmQgZm9yIGV4YWN0IGVuY29kaW5nLgorICovCisKK3VJbnQ4IFByb1NMSUNfSG9va0NoYW5nZURldGVjdCAocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9va0NoYW5nZV9DZmcgKnBQdWxzZWRpYWxDZmcsIGhvb2tDaGFuZ2VUeXBlICpwUHVsc2VEaWFsRGF0YSk7CisKKy8qKiBAfSBIQ19ERVRFQ1QgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqICBAYWRkdG9ncm91cCBQUk9TTElDX0FVRElPCisgKiBAeworICogQGRlZmdyb3VwIFBST1NMSUNfRFRNRl9ERUNPREUgRFRNRiBEZWNvZGUKKyAqIFRoaXMgc2VjdGlvbiBjb3ZlcnMgRFRNRiBkZWNvZGluZy4KKyAqCisgKiBAbm90ZSBOb3QgYWxsIGNoaXBzZXRzIHN1cHBvcnQgdGhpcyBjYXBhYmlsaXR5LiAgUGxlYXNlIHJldmlldyB5b3VyIGNoaXBzZXQKKyAqIGRvY3VtZW50YXRpb24gdG8gY29uZmlybSB0aGlzIGNhcGFiaWxpdHkgaXMgc3VwcG9ydGVkLgorICogQHsKKyAqLworCisvKioKKyAqIEBicmllZgorICogIFJlYWQvRGVjb2RlIERUTUYgZGlnaXRzLiAgVGhlICJyYXciIGhleGNvZGUgaXMgcmV0dXJuZWQgaW4gdGhpcyBmdW5jdGlvbiBhbmQgd291bGQgcmVxdWlyZQorICogIGZ1cnRoZXIgcHJvY2Vzc2luZy4gIEZvciBleGFtcGxlLCBvbiB0aGUgU2kzMjE3eCBjaGlwc2V0LCB0aGUgZm9sbG93aW5nIG1hcHBpbmcgZXhpc3RzOgorICoKKyAqIERUTUYgRGlnaXQgfCBBUEkgb3V0cHV0IHZhbHVlCisgKiA6LXw6LS0tCisgKiAwIHwgMHhBCisgKiAxIHwgMQorICogMiB8IDIKKyAqIDMgfCAzCisgKiA0IHwgNAorICogNSB8IDUKKyAqIDYgfCA2CisgKiA3IHwgNworICogOCB8IDgKKyAqIDkgfCA5CisgKiBBIHwgMHhECisgKiBCIHwgMHhFCisgKiBDIHwgMHhGCisgKiBEIHwgMAorICogXCp8IDB4QgorICogXCMgfDB4QworICoKKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gaXMgb25seSB2YWxpZCBhZnRlciBAcmVmIElSUV9EVE1GIG9jY3VycmVkIGFuZCBzaG91bGQgYmUgY2FsbGVkIHNob3J0bHkKKyAqIHRoZXJlYWZ0ZXIuCisgKgorICogQHdhcm5pbmcgTm90IGFsbCBQcm9TTElDIGNoaXBzZXRzIGhhdmUgYSBEVE1GIGRlY29kZXIuICBQbGVhc2UgcmV2aWV3IHlvdXIgY2hpcHNldCB0byBtYWtlCisgKiBzdXJlIHRoaXMgY2FwYWJpbGl0eSBleGlzdHMuCisgKgorICogQHBhcmFtW2luXSBoUHJvc2xpYyAtIHdoaWNoIGNoYW5uZWwgaXMgdG8gYmUgZGVjb2RlZC4KKyAqIEBwYXJhbVtvdXRdIHBEaWdpdCAtICJyYXciIERUTUYgdmFsdWUgKHNlZSBjb21tZW50cyBpbiBkZXNjcmlwdGlvbikKKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKgorICoKKyAqLworCitpbnQgUHJvU0xJQ19EVE1GUmVhZERpZ2l0IChwcm9zbGljQ2hhblR5cGVfcHRyIGhQcm9zbGljLHVJbnQ4ICpwRGlnaXQpOworCisvKiogQH0gUFJPU0xJQ19EVE1GX0RFQ09ERSAqLworLyoqIEB9IFBST1NMSUNfQVVESU8gKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqIEBkZWZncm91cCBQUk9TTElDX1BPV0VSX0NPTlZFUlRFUiBQb3dlciBDb252ZXJ0ZXIgY29udHJvbAorICogQHsKKyAqLworLyoqCisqIEBicmllZgorKiBQb3dlcnMgYWxsIERDL0RDIGNvbnZlcnRlcnMgc2VxdWVudGlhbGx5IHdpdGggZGVsYXkgdG8gbWluaW1pemUgcGVhayBwb3dlciBkcmF3IG9uIFZEQy4KKyogQHBhcmFtW2luXSBoUHJvc2xpYyAtIHdoaWNoIGNoYW5uZWwgdG8gY2hhbmdlIHN0YXRlLgorKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorKgorKiBAc2EgUHJvU0xJQ19Qb3dlckRvd25Db252ZXJ0ZXIKKyoKKyovCisKK2ludCBQcm9TTElDX1Bvd2VyVXBDb252ZXJ0ZXIocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYyk7CisKKy8qKgorKiBAYnJpZWYKKyogIFNhZmVseSBwb3dlciBkb3duIGRjZGMgY29udmVydGVyIGFmdGVyIGVuc3VyaW5nIGxpbmVmZWVkCisqICBpcyBpbiB0aGUgb3BlbiBzdGF0ZS4gIFRlc3QgcG93ZXIgZG93biBieSBzZXR0aW5nIGVycm9yCisqICBmbGFnIGlmIGRldGVjdGVkIHZvbHRhZ2UgZG9lcyBubyBmYWxsIGJlbG93IDV2LgorKgorKiBAcGFyYW1baW5dIGhQcm9zbGljIC0gd2hpY2ggY2hhbm5lbCB0byBjaGFuZ2Ugc3RhdGUuCisqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisqCisqIEBzYSBQcm9TTElDX1Bvd2VyVXBDb252ZXJ0ZXIKKyoKKyovCisKK2ludCBQcm9TTElDX1Bvd2VyRG93bkNvbnZlcnRlcihwcm9zbGljQ2hhblR5cGVfcHRyIGhQcm9zbGljKTsKKworLyoqCisqIEBicmllZgorKiAgU2V0IGNoYW5uZWwgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBwb2xhcml0eSBvZiB0aGUKKyogIERDLURDIGNvbnZlcnRlciBkcml2ZSBzaWduYWwgaXMgdG8gYmUgaW52ZXJ0ZWQgZnJvbSB3aGF0CisqICBpcyBpbmRpY2F0ZWQgaW4gdGhlIEdlbmVyYWwgUGFyYW1ldGVycy4gVGhpcyBpbnZlcnNpb24gaXMKKyogIHJlbGF0aXZlIHRvIHRoZSBwb2xhcml0eSBlc3RhYmxpc2hlZCBieSB0aGUgR2VuZXJhbCBQYXJhbWV0ZXJzLAorKiAgbm90IGFuIGFic29sdXRlIHBvbGFyaXR5LgorKgorKgorKiBAcGFyYW1baW5dIGhQcm9zbGljIC0gd2hpY2ggY2hhbm5lbCB0byBjaGFuZ2Ugc3RhdGUuCisqIEBwYXJhbVtpbl0gZmxhZyAtIGludmVyc2lvbiBmbGFnICgxIC0gaW52ZXJ0ZWQsIDAgLSBubyBpbnZlcnNpb24pCisqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisqCisqIEBzYSBQcm9TTElDX1Bvd2VyVXBDb252ZXJ0ZXIKKyoKKyovCitpbnQgUHJvU0xJQ19TZXREQ0RDSW52ZXJzaW9uRmxhZyhwcm9zbGljQ2hhblR5cGVfcHRyIGhQcm9zbGljLCB1SW50OCBmbGFnKTsKKworCisvKiogQH0gUFJPU0xJQ19QT1dFUl9DT05WRVJURVIgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiBAZGVmZ3JvdXAgUFJPU0xJQ19MQl9DQUxJQlJBVElPTiBMQiBDYWxpYnJhdGlvbgorICogQHsKKyAqLworCisvKioKKyAqIEBicmllZgorICogIFJ1biBjYW5uZWQgbG9uZ2l0dWRpbmFsIGJhbGFuY2UgY2FsaWJyYXRpb24uCisgKgorICogQHBhcmFtW2luXSBwUHJvc2xpYyAtIHN0YXJ0IGNoYW5uZWwgdG8gc3RhcnQgZnJvbSBmb3IgY2FsaWJyYXRpb24uCisgKiBAcGFyYW1baW5dIHNpemUgLSBudW1iZXIgb2YgY2hhbm5lbHMgdG8gY2FsaWJyYXRlCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICoKKyAqIEBub3RlCisgKiBVc2UgdGhlIEByZWYgUHJvU0xJQ19Jbml0IGZ1bmN0aW9uIHRvIHBlcmZvcm0gYWxsIGNhbGlicmF0aW9ucyBleGNlcHQgTG9uZ2l0dWRpbmFsIEJhbGFuY2UgKExCKS4KKyAqIFVzZSB0aGUgQHJlZiBQcm9TTElDX0xCQ2FsIGZ1bmN0aW9uIHRvIHBlcmZvcm0gTEIgY2FsaWJyYXRpb24uIExCIENhbGlicmF0aW9uIHR5cGljYWxseSBuZWVkcworICogdG8gZXhlY3V0ZSBMQiBjYWxpYnJhdGlvbiBvbmNlIHBlciBzeXN0ZW0gc2V0dXAgd2l0aG91dCBhIGxvYWQgY29ubmVjdGVkLiAgVGhlIExCIGNhbGlicmF0aW9uCisgKiByZXN1bHRzIGNhbiBiZSBzdG9yZWQgaW4gbm9uLXZvbGF0aWxlIHN0b3JhZ2UgKGZsYXNoLCBlZXByb20pIGFuZCByZXRyaWV2ZWQgZHVyaW5nIHlvdXIgbm9ybWFsCisgKiBQcm9TTElDIGluaXRpYWxpemF0aW9uLgorICoKKyogIEBzYSBQcm9TTElDX0dldExCQ2FsUmVzdWx0IFByb1NMSUNfTG9hZFByZXZpb3VzTEJDYWwgUHJvU0xJQ19Mb2FkUHJldmlvdXNMQkNhbFBhY2tlZCBQcm9TTElDX0dldExCQ2FsUmVzdWx0UGFja2VkCisgKi8KKworaW50IFByb1NMSUNfTEJDYWwgKHByb3NsaWNDaGFuVHlwZV9wdHIgKnBQcm9zbGljLCBpbnQgc2l6ZSk7CisKKy8qKgorICogQGJyaWVmCisgKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBjb2VmZmljaWVudCByZXN1bHRzIG9mIHRoZSBsYXN0IExCIGNhbGlicmF0aW9uLgorICoKKyAqIEBwYXJhbVtpbl0gcFByb3NsaWMgLSB3aGljaCBjaGFubmVsIHRvIHJldHJpZXZlIHRoZSB2YWx1ZXMgZnJvbS4KKyAqIEBwYXJhbVtvdXRdIHJlc3VsdDEgLSByZXN1bHRzIHJlYWQgZnJvbSB0aGUgbGFzdCBjYWxpYnJhdGlvbgorICogQHBhcmFtW291dF0gcmVzdWx0MiAtIHJlc3VsdHMgcmVhZCBmcm9tIHRoZSBsYXN0IGNhbGlicmF0aW9uCisgKiBAcGFyYW1bb3V0XSByZXN1bHQzIC0gcmVzdWx0cyByZWFkIGZyb20gdGhlIGxhc3QgY2FsaWJyYXRpb24KKyAqIEBwYXJhbVtvdXRdIHJlc3VsdDQgLSByZXN1bHRzIHJlYWQgZnJvbSB0aGUgbGFzdCBjYWxpYnJhdGlvbgorKiAgQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyoKKyogIEBzYSBQcm9TTElDX0xCQ2FsIFByb1NMSUNfTG9hZFByZXZpb3VzTEJDYWwgUHJvU0xJQ19Mb2FkUHJldmlvdXNMQkNhbFBhY2tlZCBQcm9TTElDX0xCQ2FsIFByb1NMSUNfR2V0TEJDYWxSZXN1bHRQYWNrZWQKKyovCisKK2ludCBQcm9TTElDX0dldExCQ2FsUmVzdWx0IChwcm9zbGljQ2hhblR5cGUgKnBQcm9zbGljLGludDMyICpyZXN1bHQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyICpyZXN1bHQyLGludDMyICpyZXN1bHQzLGludDMyICpyZXN1bHQ0KTsKKworLyoqCisgKiBAYnJpZWYKKyAqICBUaGlzIGZ1bmN0aW9uIGxvYWRzIHByZXZpb3VzbHkgc3RvcmVkIExCIGNhbGlicmF0aW9uIHJlc3VsdHMgdG8gdGhlIGFwcHJvcHJpYXRlIFByb1NMSUMKKyAqICBSQU0gbG9jYXRpb25zLgorICoKKyAqIEBwYXJhbVtpbl0gcFByb3NsaWMgLSB3aGljaCBjaGFubmVsIHRvIHByb2dyYW0gdGhlIHZhbHVlcworICogQHBhcmFtW2luXSByZXN1bHQxIC0gdmFsdWVzIHRvIGJlIHdyaXR0ZW4KKyAqIEBwYXJhbVtpbl0gcmVzdWx0MiAtIHZhbHVlcyB0byBiZSB3cml0dGVuCisgKiBAcGFyYW1baW5dIHJlc3VsdDMgLSB2YWx1ZXMgdG8gYmUgd3JpdHRlbgorICogQHBhcmFtW2luXSByZXN1bHQ0IC0gdmFsdWVzIHRvIGJlIHdyaXR0ZW4KKyogIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisqCisqICBAc2EgUHJvU0xJQ19MQkNhbCBQcm9TTElDX0xvYWRQcmV2aW91c0xCQ2FsUGFja2VkIFByb1NMSUNfTEJDYWwgUHJvU0xJQ19HZXRMQkNhbFJlc3VsdCBQcm9TTElDX0dldExCQ2FsUmVzdWx0UGFja2VkCisqLworCitpbnQgUHJvU0xJQ19Mb2FkUHJldmlvdXNMQkNhbCAocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYyxpbnQzMiByZXN1bHQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyIHJlc3VsdDIsaW50MzIgcmVzdWx0MyxpbnQzMiByZXN1bHQ0KTsKKworLyoqCisgKiBAYnJpZWYKKyAqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlc3VsdHMgb2YgdGhlIGxhc3QgTEIgY2FsaWJyYXRpb24gcGFja2VkIGludG8gc2luZ2xlIGludDMyLgorICoKKyAqIEBwYXJhbVtpbl0gcFByb3NsaWMgLSB3aGljaCBjaGFubmVsIHRvIHJldHJpZXZlIHRoZSB2YWx1ZXMgZnJvbS4KKyAqIEBwYXJhbVtvdXRdIHJlc3VsdCAtIHJlc3VsdHMgLSB3aGVyZSB0byBzdG9yZSB0aGUgdmFsdWUKKyogIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisqCisqICBAc2EgUHJvU0xJQ19MQkNhbCBQcm9TTElDX0xvYWRQcmV2aW91c0xCQ2FsIFByb1NMSUNfTG9hZFByZXZpb3VzTEJDYWxQYWNrZWQgUHJvU0xJQ19MQkNhbAorKi8KKworaW50IFByb1NMSUNfR2V0TEJDYWxSZXN1bHRQYWNrZWQgKHByb3NsaWNDaGFuVHlwZSAqcFByb3NsaWMsaW50MzIgKnJlc3VsdCk7CisKKy8qKgorICogQGJyaWVmCisgKiAgVGhpcyBmdW5jdGlvbiBsb2FkcyBwcmV2aW91c2x5IHN0b3JlZCBMQiBjYWxpYnJhdGlvbiByZXN1bHRzIHRoYXQgYXJlIGluIHRoZSBwYWNrZWQgZm9ybWF0LgorICoKKyAqIEBwYXJhbVtpbl0gcFByb3NsaWMgLSB3aGljaCBjaGFubmVsIHRvIHJldHJpZXZlIHRoZSB2YWx1ZXMgZnJvbS4KKyAqIEBwYXJhbVtpbl0gcmVzdWx0IC0gcmVzdWx0cyByZWFkIGZyb20gQHJlZiBQcm9TTElDX0dldExCQ2FsUmVzdWx0UGFja2VkCisqICBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorKgorKiAgQHNhIFByb1NMSUNfTEJDYWwgUHJvU0xJQ19Mb2FkUHJldmlvdXNMQkNhbCBQcm9TTElDX0xCQ2FsIFByb1NMSUNfR2V0TEJDYWxSZXN1bHRQYWNrZWQKKyoKKyovCisKK2ludCBQcm9TTElDX0xvYWRQcmV2aW91c0xCQ2FsUGFja2VkIChwcm9zbGljQ2hhblR5cGUgKnBQcm9zbGljLGludDMyICpyZXN1bHQpOworCisvKiogQH0gUFJPU0xJQ19MQl9DQUxJQlJBVElPTiAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiBAYWRkdG9ncm91cCBESUFHTk9TVElDUworICogQHsKKyAqLworCisvKioKKyAqIEBicmllZgorICogIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIFNQSSBpbnRlcmZhY2UgaXMgZnVuY3Rpb25pbmcKKyAqICBwcm9wZXJseSBieSBwZXJmb3JtaW5nIGEgc2VyaWVzIG9mIHJlYWQgYmFjayB0ZXN0cy4gIFRoaXMgdGVzdCBET0VTIG1vZGlmeQorICogIGNlcnRhaW4gcmVnaXN0ZXJzLCBzbyBhIHJlaW5pdGlhbGl6YXRpb24gd2lsbCBiZSByZXF1aXJlZC4gIFRoaXMgdGVzdCBpcworICogIHJlY29tbWVuZGVkIG9ubHkgZm9yIGRldmVsb3BtZW50IHVzZS4KKyAqCisgKiBAcGFyYW1baW5dIHBQcm9zbGljIC0gVGhpcyBzaG91bGQgcG9pbnQgdG8gdGhlIGNoYW5uZWwgdGhhdCBpcyB0byBiZSB2ZXJpZmllZC4KKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IgYW1kIHdpbGwgdHlwaWNhbGx5IHJldHVybiBiYWNrCisgKiBAcmVmIFJDX1NQSV9GQUlMIGlmIGEgU1BJIGZhaWx1cmUgb2NjdXJlZC4KKyAqLworCitpbnQgUHJvU0xJQ19WZXJpZnlDb250cm9sSW50ZXJmYWNlIChwcm9zbGljQ2hhblR5cGVfcHRyIHBQcm9zbGljKTsKKworLyoqIEBhZGR0b2dyb3VwIFBTVE5fQ0hFQ0sgUFNUTiBDaGVjaworICogQHsKKyAqLworCisvKioKKyAqIEBicmllZgorICogQWxsb2NhdGVzIG1lbW9yeSBmb3IgYSBQU1ROIGNoZWNrIG9iamVjdC4gT25lIGNoYW5uZWwgb2JqZWN0IGlzIG5lZWRlZCBwZXIKKyAqIFByb1NMSUMgY2hhbm5lbC4KKyAqCisgKiAgQHBhcmFtW2luLG91dF0gcHN0bkNoZWNrT2JqIC0gcG9pbnRlciB0byB0aGUgb2JqZWN0IHRoYXQgaXMgdG8gYmUgaW5pdGlhbGl6ZWQuCisgKiAgQHBhcmFtW2luXSBudW1fb2JqcyAtIG51bWJlciBvZiBvYmplY3RzIHRvIGFsbG9jYXRlCisgKgorICogIEByZXR2YWwgMCA9IE9LCisgKi8KKworaW50IFByb1NMSUNfQ3JlYXRlUFNUTkNoZWNrT2Jqcyhwcm9zbGljUFNUTkNoZWNrT2JqVHlwZV9wdHIgKnBzdG5DaGVja09iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bV9vYmpzKTsKKyNkZWZpbmUgUHJvU0xJQ19DcmVhdGVQU1ROQ2hlY2tPYmooUFRSUFRSKSBQcm9TTElDX0NyZWF0ZVBTVE5DaGVja09ianMoKFBUUlBUUiksIDEpCisKKy8qKgorICogQGJyaWVmCisgKiBBbGxvY2F0ZXMgbWVtb3J5IGZvciBhIGRpZmZlcmVudGlhbCBQU1ROIGNoZWNrIG9iamVjdC4gT25lIGNoYW5uZWwgb2JqZWN0IGlzIG5lZWRlZCBwZXIKKyAqIFByb1NMSUMgY2hhbm5lbC4KKyAqCisgKiAgQHBhcmFtW2luLG91dF0gcHN0bkNoZWNrT2JqIC0gcG9pbnRlciB0byB0aGUgb2JqZWN0IHRoYXQgaXMgdG8gYmUgaW5pdGlhbGl6ZWQuCisgKiAgQHBhcmFtW2luXSBudW1fb2JqcyAtIG51bWJlciBvZiBvYmplY3RzIHRvIGFsbG9jYXRlCisgKgorICogIEByZXR2YWwgMCA9IE9LCisgKi8KKworaW50IFByb1NMSUNfQ3JlYXRlRGlmZlBTVE5DaGVja09ianMocHJvc2xpY0RpZmZQU1ROQ2hlY2tPYmpUeXBlX3B0cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBzdG5DaGVja09iaiwgdW5zaWduZWQgaW50IG51bV9vYmpzKTsKKyNkZWZpbmUgUHJvU0xJQ19DcmVhdGVEaWZmUFNUTkNoZWNrT2JqKFBUUlBUUikgUHJvU0xJQ19DcmVhdGVEaWZmUFNUTkNoZWNrT2JqcygoUFRSUFRSKSwgMSkKKworLyoqCisgKiBAYnJpZWYKKyAqIERlc3Ryb3lzIGEgUFNUTiBjaGVjayBvYmplY3QgYW5kIGRlYWxsb2NhdGVzIG1lbW9yeS4KKyAqCisgKiBAcGFyYW1baW5dIHBzdG5DaGVja09iaiAtIG9iamVjdCB0byBkZWFsbG9jYXRlLgorICoKKyAqIEByZXR2YWwgMCA9IE9LCisgKi8KKworI2RlZmluZSBQcm9TTElDX0Rlc3Ryb3lQU1ROQ2hlY2tPYmogUHJvU0xJQ19EZXN0cm95UFNUTkNoZWNrT2JqcworaW50IFByb1NMSUNfRGVzdHJveVBTVE5DaGVja09ianMocHJvc2xpY1BTVE5DaGVja09ialR5cGVfcHRyICpwc3RuQ2hlY2tPYmopOworCisvKioKKyAqIEBicmllZgorICogIERlc3Ryb3lzIGEgZGlmZmVyZW50aWFsIFBTVE4gY2hlY2sgb2JqZWN0IGFuZCBkZWFsbG9jYXRlcyBtZW1vcnkuCisgKgorICogQHBhcmFtW2luXSBwc3RuQ2hlY2tPYmogLSBvYmplY3QgdG8gZGVhbGxvY2F0ZS4KKyAqCisgKiBAcmV0dmFsIDAgPSBPSworICovCisKKyNkZWZpbmUgUHJvU0xJQ19EZXN0cm95RGlmZlBTVE5DaGVja09iaiBQcm9TTElDX0Rlc3Ryb3lEaWZmUFNUTkNoZWNrT2JqcworaW50IFByb1NMSUNfRGVzdHJveURpZmZQU1ROQ2hlY2tPYmpzKHByb3NsaWNEaWZmUFNUTkNoZWNrT2JqVHlwZV9wdHIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcHN0bkNoZWNrT2JqKTsKKworLyoqCisgKiBAYnJpZWYKKyAqICBJbml0aWFsaXplIHBzdG5DaGVja09iaiBzdHJ1Y3R1cmUgbWVtYmVycworICoKKyAqIEBwYXJhbVtpbl0gcHN0bkNoZWNrT2JqIC0gd2hpY2ggb2JqZWN0IHRvIGluaXRpYWxpemUKKyAqIEBwYXJhbVtpbl0gYXZnVGhyZXNoIC0gQXZlcmFnZSBjdXJyZW50IHRocmVzaG9sZCB0aGF0IGluZGljYXRlcyBhIFBTVE4gaXMgcHJlc2VudCAodUEpLgorICogQHBhcmFtW2luXSBzaW5nbGVUaHJlc2ggLSBTaW5nbGUgY3VycmVudCB0aHJlc2hvbGQgdGhhdCBpbmRpY2F0ZXMgYSBQU1ROIGlzIHByZXNlbnQgKHVBKS4KKyAqIEBwYXJhbVtpbl0gc2FtcGxlcyAtIG51bWJlciBvZiBzYW1wbGVzIHRvIGNvbGxlY3QKKyAqIEByZXR2YWwgMCA9IE9LCisgKi8KKworaW50IFByb1NMSUNfSW5pdFBTVE5DaGVja09iaihwcm9zbGljUFNUTkNoZWNrT2JqVHlwZV9wdHIgcHN0bkNoZWNrT2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMiBhdmdUaHJlc2gsIGludDMyIHNpbmdsZVRocmVzaCwgdUludDggc2FtcGxlcyk7CisKKy8qKgorICogQGJyaWVmCisgKiAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyBhIGRpZmZlcmVudGlhbCBQU1ROIGRldGVjdGlvbiBvYmplY3QuCisgKgorICogIEBwYXJhbVtpbixvdXRdIHBzdG5EaWZmQ2hlY2tPYmogLSBvYmplY3QgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqICBAcGFyYW1baW5dIHByZXNldDEgLSBEQyBGZWVkIHByZXNldCB0byBiZSB1c2VkIGZvciBmaXJzdCBsb29wIEkvViBtZWFzdXJlbWVudAorICogIEBwYXJhbVtpbl0gcHJlc2V0MiAtIERDIEZlZWQgcHJlc2V0IHRvIGJlIHVzZWQgZm9yIHNlY29uZCBsb29wIEkvViBtZWFzdXJlbWVudAorICogIEBwYXJhbVtpbl0gZW50cnlfcHJlc2V0IC0gcmVzdG9yZV9wcmVzZXQgREMgRmVlZCBwcmVzZXQgdGhhdCBpcyByZXN0b3JlZCBhZnRlciBQU1ROIGNoZWNrIGlzIGNvbXBsZXRlLgorICogIEBwYXJhbVtpbl0gZmVtZl9lbmFibGUgLSBGbGFnIHRvIGVuYWJsZSBPUEVOIHN0YXRlIGhhemFyZG91cyB2b2x0YWdlIG1lYXN1cmVtZW50ICgwID0gZGlzYWJsZWQsIDEgPSBlbmFibGVkKQorICogIEByZXR2YWwgMCA9IE9LCisgKi8KKworaW50IFByb1NMSUNfSW5pdERpZmZQU1ROQ2hlY2tPYmoocHJvc2xpY0RpZmZQU1ROQ2hlY2tPYmpUeXBlX3B0cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHN0bkRpZmZDaGVja09iaiwgaW50IHByZXNldDEsIGludCBwcmVzZXQyLCBpbnQgZW50cnlfcHJlc2V0LCBpbnQgZmVtZl9lbmFibGUpOworCisvKioKKyAqIEBicmllZgorICogVGhpcyBmdW5jdGlvbiBtb25pdG9ycyBsb25naXR1ZGluYWwgY3VycmVudCAoYXZlcmFnZSBhbmQgc2luZ2xlIHNhbXBsZSkgdG8gcXVpY2tseSBpZGVudGlmeQorICogdGhlIHByZXNlbmNlIG9mIGEgbGl2ZSBQU1ROIGxpbmUuIFN1ZmZpY2llbnQgcG9sbGluZyBuZWVkcyB0byBvY2N1ciBpbiBvcmRlciB0byBxdWlja2x5IGRldGVybWluZQorICogaWYgYSBQU1ROIGxpbmUgaXMgcHJlc2V0IG9yIG5vdC4KKyAqCisgKiAgQHBhcmFtW2luXSBwUHJvc2xpYyAtIHdoaWNoIGNoYW5uZWwgdG8gcnVuIHRoaXMgdGVzdCBvbi4KKyAqICBAcGFyYW1baW5dIHBQU1ROQ2hlY2sgLSB0aGUgaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucyB0aGUgaW50ZXJtZWRpYXRlIHJlc3VsdHMgb2YgdGhpcyB0ZXN0LgorICogIEByZXR2YWwgMCA9IG5vIFBTVE4gZGV0ZWN0ZWQvdGhyZXNob2xkcyBoYXZlIG5vdCBiZWVuIGV4Y2VlZGVkLCAxID0gUFNUTiBkZXRlY3RlZCwgc3RhdGUgbWFjaGluZSByZXNldC4KKyAqCisgKiAgQG5vdGUKKyAqICAgSWYgd2FudGluZyB0byByZXN0YXJ0IHRoZSB0ZXN0LCBvbmUgd2lsbCBuZWVkIHRvIGNhbGwgQHJlZiBQcm9TTElDX0luaXRQU1ROQ2hlY2tPYmogYWdhaW4uIEhvd2V2ZXIsIGlmIHRoZQorICogICBudW1iZXIgb2Ygc2FtcGxlcyBleGNlZWRzIHRoZSBidWZmZXIgdGhlbiB0aGUgZnVuY3Rpb24gd2lsbCAid3JhcCIuCisgKi8KKworaW50IFByb1NMSUNfUFNUTkNoZWNrKHByb3NsaWNDaGFuVHlwZSAqcFByb3NsaWMsCisgICAgICAgICAgICAgICAgICAgICAgcHJvc2xpY1BTVE5DaGVja09ialR5cGUgKnBQU1ROQ2hlY2spOworCisvKioKKyAqIEBicmllZgorICogIFRoaXMgZnVuY3Rpb24gbW9uaXRvcnMgZm9yIGEgZm9yZWlnbiB2b2x0YWdlIChpZiBlbmFibGVkKSBhbmQgbWVhc3VyZXMgdGhlIGRpZmZlcmVudGlhbCBJL1YKKyAqICBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIGxvb3AgYXQgMiB1bmlxdWUgc2V0dGluZ3MgdG8gZGV0ZWN0IGEgZm9yZWlnbiBQU1ROLiAgSXQgaXMgYXNzdW1lZCB0aGF0IHBvbGxpbmcgd2lsbAorICogIG9jY3VyIGF0IHRoZSBjb25maWd1cmVkIHZhbHVlIGZvdW5kIGluIEByZWYgUFNUTl9ERVRfUE9MTF9SQVRFLgorICoKKyAqICBAcGFyYW1baW5dIHBQcm9zbGljIC0gY2hhbm5lbCB0byBiZSBtb25pdG9yZWQKKyAqICBAcGFyYW1baW4sb3V0XSBwUFNUTkNoZWNrIC0gcG9pbnRlciB0byBhbiBpbml0aWFsaXplZCBzdHJ1Y3R1cmUgdGhhdCBpcyB1c2VkIGJ5IHRoZSBmdW5jdGlvbiB0bworICogIHN0b3JlIHN0YXRlIGluZm9ybWF0aW9uLgorICogIEByZXR2YWwgaW50IEByZWYgUkNfTk9ORSAtIHRlc3QgaXMgaW4gcHJvZ3Jlc3MsIEByZWYgUkNfQ09NUExFVEVfTk9fRVJSIC0gdGVzdCBjb21wbGV0ZSwgbm8gZXJyb3JzLCBAcmVmIFJDX1BTVE5fT1BFTl9GRU1GIC0gZGV0ZWN0ZWQgZm9yZWlnbiB2b2x0YWdlLCBSQ19DSEFOTkVMX1RZUEVfRVJSID0gYSBub24tUHJvU0xJQyBkZXZpY2Ugd2FzIGNhbGxlZCB0byBwZXJmb3JtIHRoaXMgZnVuY3Rpb24KKyAqLworaW50IFByb1NMSUNfRGlmZlBTVE5DaGVjayhwcm9zbGljQ2hhblR5cGUgKnBQcm9zbGljLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9zbGljRGlmZlBTVE5DaGVja09ialR5cGUgKnBQU1ROQ2hlY2spOworCisvKiogQH0gUFNUTl9DSEVDSyAqLworLyoqIEB9IERJQUdOT1NUSUNTKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqIEBkZWZncm91cCBQUk9TTElDX0RDRkVFRCBEQyBGZWVkIFNldHVwIGFuZCBjb250cm9sCisgKiBAeworICovCisKKy8qKgorICogQGJyaWVmCisgKiAgQ29uZmlndXJlcyB0aGUgREMgZmVlZCBmcm9tIGEgcHJlc2V0LgorICoKKyAqIEBwYXJhbVtpbl0gaFByb3NsaWMgLSB3aGljaCBjaGFubmVsIHRvIGNvbmZpZ3VyZQorICogQHBhcmFtW2luXSBwcmVzZXQgLSB0aGUgcHJlc2V0IHRvIHVzZQorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBkaXNhYmxlZCBieSBAcmVmIERJU0FCTEVfRENGRUVEX1NFVFVQCisgKi8KKworaW50IFByb1NMSUNfRENGZWVkU2V0dXAgKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMsaW50IHByZXNldCk7CisKKy8qKgorICogQGJyaWVmCisgKiAgQ29uZmlndXJlcyB0aGUgREMgZmVlZCBmcm9tIGEgcHJlc2V0LgorICoKKyAqIEBwYXJhbVtpbl0gaFByb3NsaWMgLSB3aGljaCBjaGFubmVsIHRvIGNvbmZpZ3VyZQorICogQHBhcmFtW2luXSBjZmcgLSBwb2ludGVyIHRvIHByZXNldCBzdG9yYWdlIHN0cnVjdHVyZQorICogQHBhcmFtW2luXSBwcmVzZXQgLSB0aGUgcHJlc2V0IHRvIHVzZQorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBkaXNhYmxlZCBieSBAcmVmIERJU0FCTEVfRENGRUVEX1NFVFVQCisgKi8KK2ludCBQcm9TTElDX0RDRmVlZFNldHVwQ2ZnIChwcm9zbGljQ2hhblR5cGVfcHRyIGhQcm9zbGljLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb1NMSUNfRENmZWVkX0NmZyAqY2ZnLCBpbnQgcHJlc2V0KTsKKworLyoqCisgKiBAYnJpZWYKKyAqICBUaGlzIGZ1bmN0aW9uIGFsbG93cyBvbmUgdG8gYWRqdXN0IHRoZSBEQyBvcGVuIGNpcmN1aXQgdm9sdGFnZSBsZXZlbCBkeW5hbWljYWxseS4gQm91bmRhcnkgY2hlY2tpbmcgaXMgZG9uZS4KKyAqCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGRvZXMgTk9UIG1vZGlmeSB0aGUgcmVnaXN0ZXIgc2V0cyBuZWVkZWQsIGl0IGNhbGN1bGF0ZXMgdGhlIGNvcnJlY3QgdmFsdWVzIGFuZCBzdG9yZXMKKyAqIHRoZW0gaW4gdGhlIGNvcnJlY3QgcHJlc2V0LiAgVXNlIEByZWYgUHJvU0xJQ19EQ0ZlZWRTZXR1cCB0byBwcm9ncmFtIHRoZSBkZXZpY2Ugd2l0aCB0aGUgbmV3IHZhbHVlcy4KKyAqCisgKiBAcGFyYW1baW5dIHBQcm9zbGljIC0gd2hpY2ggY2hhbm5lbCB0byBjb25maWd1cmUKKyAqIEBwYXJhbVtpbl0gdl92bGltX3ZhbCAtIGFic29sdXRlIHZvbHRhZ2UgbGV2ZWwKKyAqIEBwYXJhbVtpbl0gcHJlc2V0IC0gREMgRmVlZCBwcmVzZXQgdG8gYmUgbW9kaWZpZWQuCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICoKKyAqIEBzYSBQcm9TTElDX2RiZ1NldERDRmVlZElsb29wIFByb1NMSUNfRENGZWVkU2V0dXAKKyAqLworCitpbnQgUHJvU0xJQ19kYmdTZXREQ0ZlZWRWb3BlbiAocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYywgdUludDMyIHZfdmxpbV92YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzIgcHJlc2V0KTsKKworLyoqCisgKiBAYnJpZWYKKyAqICBUaGlzIGZ1bmN0aW9uIGFsbG93cyBvbmUgdG8gYWRqdXN0IHRoZSBsb29wIGN1cnJlbnQgbGV2ZWwgZHluYW1pY2FsbHkuIEJvdW5kYXJ5IGNoZWNraW5nIGlzIGRvbmUuCisgKgorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBkb2VzIE5PVCBtb2RpZnkgdGhlIHJlZ2lzdGVyIHNldHMgbmVlZGVkLCBpdCBjYWxjdWxhdGVzIHRoZSBjb3JyZWN0IHZhbHVlcyBhbmQgc3RvcmVzCisgKiB0aGVtIGluIHRoZSBjb3JyZWN0IHByZXNldC4gIFVzZSBAcmVmIFByb1NMSUNfRENGZWVkU2V0dXAgdG8gcHJvZ3JhbSB0aGUgZGV2aWNlIHdpdGggdGhlIG5ldyB2YWx1ZXMuCisgKgorICogQHBhcmFtW2luXSBwUHJvc2xpYyAtIHdoaWNoIGNoYW5uZWwgdG8gY29uZmlndXJlCisgKiBAcGFyYW1baW5dIGlfaWxpbV92YWwgLSBsb29wIGN1cnJlbnQgbGV2ZWwKKyAqIEBwYXJhbVtpbl0gcHJlc2V0IC0gREMgRmVlZCBwcmVzZXQgdG8gYmUgbW9kaWZpZWQuCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICoKKyAqIEBzYSBQcm9TTElDX2RiZ1NldERDRmVlZFZvcGVuIFByb1NMSUNfRENGZWVkU2V0dXAKKyAqLworCitpbnQgUHJvU0xJQ19kYmdTZXREQ0ZlZWRJbG9vcCAocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYywgdUludDMyIGlfaWxpbV92YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzIgcHJlc2V0KTsKKworLyoqCisgKiBAYnJpZWYKKyAqICBUaGlzIGZ1bmN0aW9uIGFsbG93cyBvbmUgdG8gZW5hYmxlL2Rpc2FibGUgcG93ZXIgc2F2aW5ncyBtb2RlIGZvdW5kIG9uIHNvbWUgb2YgdGhlIGNoaXBzZXRzLiAgVGhpcyBhbGxvd3Mgb25lCisgKiAgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHZhbHVlIHNldCBpbiB0aGUgR1VJIGNvbmZpZyB0b29sLgorICoKKyAqIEBwYXJhbVtpbl0gcFByb3NsaWMgLSB3aGljaCBjaGFubmVsIHRvIGNvbmZpZ3VyZQorICogQHBhcmFtW2luXSBwd3JzYXZlIC0gIHBvd2VyIHNhdmluZ3MgbW9kZSBlbmFibGVkIG9yIGRpc2FibGVkIC0gdmFsdWUgZXhwZWN0ZWQ6IEByZWYgUFdSU0FWRV9ESVNBQkxFIG9yIEByZWYgUFdSU0FWRV9FTkFCTEUKKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKgorICovCisKK2ludCBQcm9TTElDX1NldFBvd2Vyc2F2ZU1vZGUocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYywgaW50IHB3cnNhdmUpOworCisvKiogQH0gUFJPU0xJQ19EQ0ZFRUQgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqIEBkZWZncm91cCBNRVNTQUdFX1dBSVRJTkcgTWVzc2FnZSBXYWl0aW5nIEluZGljYXRvciByb3V0aW5lcworICogQHsKKyAqLworCisvKioKKyAqIEBicmllZgorICogIENvbmZpZ3VyZSBvcHRpb25hbCBNV0kgdm9sdGFnZSBzZXR0aW5ncy4gIERlZmF1bHQgdmFsdWUgaXMgOTV2LgorICoKKyAqIEBkZXRhaWxzCisgKiAgU2V0IE1XSSBmbGFzaGluZyB2b2x0YWdlIGxldmVsIChWcGspLgorICoKKyAqIEBub3RlCisgKiAgUHJvcGVyIHBhdGNoIG11c3QgYmUgbG9hZGVkIGZvciB0aGlzIGZlYXR1cmUgdG8gd29yayBwcm9wZXJseS4gIENvZGUgZG9lcyBub3QKKyAqICBhdXRvbWF0aWNhbGx5IHZlcmlmeSB0aGF0IHRoaXMgcGF0Y2ggaXMgbG9hZGVkLgorICoKKyAqIEBwYXJhbVtpbl0gaFByb3NsaWMgLSBjaGFubmVsIHRvIG1vZGlmeQorICogQHBhcmFtW2luXSB2cGtfbWFnIC0gTVdJIHZvbHRhZ2UgbGV2ZWwgKHZwaykgKG5vIGNoYW5nZSBpcyBtYWRlIGlmIDApCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICovCitpbnQgUHJvU0xJQ19NV0lTZXRWIChwcm9zbGljQ2hhblR5cGVfcHRyIGhQcm9zbGljLHVJbnQxNiB2cGtfbWFnKTsKKworLyoqCisgKiBAYnJpZWYKKyAqICBFbmFibGVzIG1lc3NhZ2Ugd2FpdGluZyBpbmRpY2F0b3IgZmVhdHVyZQorICoKKyAqIEBkZXRhaWxzCisgKiAgTWVzc2FnZSB3YWl0aW5nIChuZW9uIGZsYXNoaW5nKSBlbmFibGVkIGlmIGRldmljZSBpcyBpbiB0aGUgb25ob29rIHN0YXRlLgorICogIE90aGVyd2lzZSwgZnVuY3Rpb24gd2lsbCBub3QgZXhlY3V0ZSBhbmQgcmV0dXJuIFJDX01XSV9FTkFCTEVfRkFJTC4gIFRoaXMKKyAqICBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB0byBFTkFCTEUgTVdJIHByaW9yIHRvIGNhbGxpbmcgUHJvU0xJQ19NV0kgdG8gdG9nZ2xlCisgKiAgdGhlIHZvbHRhZ2UgbGV2ZWwgb24gVElQLVJJTkcuCisgKgorICogQG5vdGUKKyAqICBQcm9wZXIgcGF0Y2ggbXVzdCBiZSBsb2FkZWQgZm9yIHRoaXMgZmVhdHVyZSB0byB3b3JrIHByb3Blcmx5LiAgQ29kZSBkb2VzIG5vdAorICogIGF1dG9tYXRpY2FsbHkgdmVyaWZ5IHRoYXQgdGhpcyBwYXRjaCBpcyBsb2FkZWQuCisgKgorICogQHBhcmFtW2luXSBoUHJvc2xpYyAtIGNoYW5uZWwgdG8gbW9kaWZ5CisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICovCitpbnQgUHJvU0xJQ19NV0lFbmFibGUgKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMpOworCisvKioKKyAqIEBicmllZgorICogIERpc2FibGVzIG1lc3NhZ2Ugd2FpdGluZyBpbmRpY2F0b3IgZmVhdHVyZQorICoKKyAqIEBkZXRhaWxzCisgKiAgTWVzc2FnZSB3YWl0aW5nIChuZW9uIGZsYXNoaW5nKSBkaXNhYmxlLiAgVHVybnMgb2ZmIGZsYXNoaW5nIGFuZCBkaXNhYmxlZAorICogIE1XSSBmZWF0dXJlLgorICoKKyAqIEBub3RlCisgKiAgUHJvcGVyIHBhdGNoIG11c3QgYmUgbG9hZGVkIGZvciB0aGlzIGZlYXR1cmUgdG8gd29yayBwcm9wZXJseS4gIENvZGUgZG9lcyBub3QKKyAqICBhdXRvbWF0aWNhbGx5IHZlcmlmeSB0aGF0IHRoaXMgcGF0Y2ggaXMgbG9hZGVkLgorICoKKyAqIEBwYXJhbVtpbl0gaFByb3NsaWMgLSBjaGFubmVsIHRvIG1vZGlmeQorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqLworaW50IFByb1NMSUNfTVdJRGlzYWJsZSAocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYyk7CisKKy8qKgorICogQGJyaWVmCisgKiAgSW1wbGVtZW50cyBtZXNzYWdlIHdhaXRpbmcgaW5kaWNhdG9yCisgKgorICogQGRldGFpbHMKKyAqICBNZXNzYWdlIHdhaXRpbmcgKG5lb24gZmxhc2hpbmcpIHN0YXRlIHRvZ2dsaW5nLiAgSWYgTVdJIGZlYXR1cmUgaGFzIG5vdCBiZWVuCisgKiAgZW5hYmxlZCBieSBjYWxsaW5nIFByb1NMSUNfU2V0TVdJRW5hYmxlKCksIHRoZW4gdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybgorICogIFJDX01XSV9OT1RfRU5BQkxFRAorICoKKyAqIEBub3RlCisgKiAgUHJvcGVyIHBhdGNoIG11c3QgYmUgbG9hZGVkIGZvciB0aGlzIGZlYXR1cmUgdG8gd29yayBwcm9wZXJseS4gIENvZGUgZG9lcyBub3QKKyAqICBhdXRvbWF0aWNhbGx5IHZlcmlmeSB0aGF0IHRoaXMgcGF0Y2ggaXMgbG9hZGVkLgorICoKKyAqIEBwYXJhbVtpbl0gaFByb3NsaWMgLSBjaGFubmVsIHRvIG1vZGlmeQorICogQHBhcmFtW2luXSBmbGFzaF9vbiAtIDAgPSBsYW1wIG9mZiwgMSA9IGxhbXAgb24uCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICovCisKK2ludCBQcm9TTElDX1NldE1XSVN0YXRlKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMsdUludDggZmxhc2hfb24pOworCisvKioKKyAqIEBicmllZgorICogIEludGlhbGl6ZXMgbWVzc2FnZSB3YWl0aW5nIGluZGljYXRvciB3aXRoIHJhbXAgY29uZmlndXJhYmlsaXR5CisgKgorICogQGRldGFpbHMKKyAqICBNZXNzYWdlIHdhaXRpbmcgKG5lb24gZmxhc2hpbmcpIGluaXRpYWxpemF0aW9uLiAgSWYgTVdJIGZlYXR1cmUgaGFzIG5vdCBiZWVuCisgKiAgZW5hYmxlZCBieSBjYWxsaW5nIFByb1NMSUNfU2V0TVdJRW5hYmxlKCksIHRoZW4gdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybgorICogIFJDX01XSV9OT1RfRU5BQkxFRAorICoKKyAqIEBub3RlCisgKiAgUHJvcGVyIHBhdGNoIG11c3QgYmUgbG9hZGVkIGZvciB0aGlzIGZlYXR1cmUgdG8gd29yayBwcm9wZXJseS4gIENvZGUgZG9lcyBub3QKKyAqICBhdXRvbWF0aWNhbGx5IHZlcmlmeSB0aGF0IHRoaXMgcGF0Y2ggaXMgbG9hZGVkLgorICoKKyAqIEBwYXJhbVtpbl0gcFByb3NsaWMgLSBjaGFubmVsIHRvIG1vZGlmeQorICogQHBhcmFtW2luXSBzdGVwcyAtIG51bWJlciBvZiBzdGVwcyBpbiByYW1wLCB0aWNrIGR1cmF0aW9uIGlzIHRpbWUgb2Ygb25lIHN0ZXAKKyAqIEBwYXJhbVtpbl0gb25UaW1lIC0gbnVtYmVyIG9mIHRpY2tzIE1XSSBpcyBpbiB0aGUgT04gc3RhdGUKKyAqIEBwYXJhbVtpbl0gb2ZmVGltZSAtIG51bWJlciBvZiB0aWNrcyBNV0kgaXMgaW4gdGhlIE9GRiBzdGF0ZQorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqLworCitpbnQgUHJvU0xJQ19NV0lSYW1wU3RhcnQocHJvc2xpY0NoYW5UeXBlX3B0ciBwUHJvc2xpYywgdUludDMyIHN0ZXBzLCB1SW50MzIgb25UaW1lLCB1SW50MzIgb2ZmVGltZSk7CisKKy8qKgorICogQGJyaWVmCisgKiAgSW1wbGVtZW50cyBtZXNzYWdlIHdhaXRpbmcgaW5kaWNhdG9yIHdpdGggcmFtcCBiZXR3ZWVuIE9OIGFuZCBPRkYgc3RhdGVzCisgKgorICogQGRldGFpbHMKKyAqICBNZXNzYWdlIHdhaXRpbmcgKG5lb24gZmxhc2hpbmcpIHBvbGxpbmcgZnVuY3Rpb24uICBJZiBNV0kgZmVhdHVyZSBoYXMgbm90IGJlZW4KKyAqICBlbmFibGVkIGJ5IGNhbGxpbmcgUHJvU0xJQ19TZXRNV0lFbmFibGUoKSwgdGhlbiB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuCisgKiAgUkNfTVdJX05PVF9FTkFCTEVECisgKgorICogQG5vdGUKKyAqICBQcm9wZXIgcGF0Y2ggbXVzdCBiZSBsb2FkZWQgZm9yIHRoaXMgZmVhdHVyZSB0byB3b3JrIHByb3Blcmx5LiAgQ29kZSBkb2VzIG5vdAorICogIGF1dG9tYXRpY2FsbHkgdmVyaWZ5IHRoYXQgdGhpcyBwYXRjaCBpcyBsb2FkZWQuCisgKgorICogQHBhcmFtW2luXSBwUHJvc2xpYyAtIGNoYW5uZWwgdG8gbW9kaWZ5CisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICovCisgCitpbnQgUHJvU0xJQ19NV0lSYW1wUG9sbChwcm9zbGljQ2hhblR5cGVfcHRyIHBQcm9zbGljKTsKKworLyoqCisgKiBAYnJpZWYKKyAqICBSZXN0b3JlcyByYW1waW5nIG1lc3NhZ2Ugd2FpdGluZyBpbmRpY2F0b3Igc3RhdGUKKyAqCisgKiBAZGV0YWlscworICogIE1lc3NhZ2Ugd2FpdGluZyAobmVvbiBmbGFzaGluZykgc3RvcCBmdW5jdGlvbi4gIElmIE1XSSBmZWF0dXJlIGhhcyBub3QgYmVlbgorICogIGVuYWJsZWQgYnkgY2FsbGluZyBQcm9TTElDX1NldE1XSUVuYWJsZSgpLCB0aGVuIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4KKyAqICBSQ19NV0lfTk9UX0VOQUJMRUQKKyAqCisgKiBAbm90ZQorICogIFByb3BlciBwYXRjaCBtdXN0IGJlIGxvYWRlZCBmb3IgdGhpcyBmZWF0dXJlIHRvIHdvcmsgcHJvcGVybHkuICBDb2RlIGRvZXMgbm90CisgKiAgYXV0b21hdGljYWxseSB2ZXJpZnkgdGhhdCB0aGlzIHBhdGNoIGlzIGxvYWRlZC4KKyAqCisgKiBAcGFyYW1baW5dIHBQcm9zbGljIC0gY2hhbm5lbCB0byBtb2RpZnkKKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKi8KKyAKK2ludCBQcm9TTElDX01XSVJhbXBTdG9wKHByb3NsaWNDaGFuVHlwZV9wdHIgcFByb3NsaWMpOworCisvKioKKyAqIEBicmllZgorICogIFJlYWQgTVdJIG91dHB1dCBzdGF0ZQorICoKKyAqIEBkZXRhaWxzCisgKiAgTWVzc2FnZSB3YWl0aW5nIChuZW9uIGZsYXNoaW5nKSBzdGF0ZSByZWFkLiAgSWYgTVdJIGZlYXR1cmUgaGFzIG5vdCBiZWVuCisgKiAgZW5hYmxlZCBieSBjYWxsaW5nIFByb1NMSUNfU2V0TVdJRW5hYmxlKCksIHRoZW4gdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybgorICogIFJDX01XSV9OT1RfRU5BQkxFRAorICoKKyAqIEBub3RlCisgKiAgUHJvcGVyIHBhdGNoIG11c3QgYmUgbG9hZGVkIGZvciB0aGlzIGZlYXR1cmUgdG8gd29yayBwcm9wZXJseS4gIENvZGUgZG9lcyBub3QKKyAqICBhdXRvbWF0aWNhbGx5IHZlcmlmeSB0aGF0IHRoaXMgcGF0Y2ggaXMgbG9hZGVkLgorICoKKyAqIEBwYXJhbVtpbl0gaFByb3NsaWMgLSBjaGFubmVsIHRvIG1vZGlmeQorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqLworCitpbnQgUHJvU0xJQ19HZXRNV0lTdGF0ZShwcm9zbGljQ2hhblR5cGVfcHRyIGhQcm9zbGljKTsKKworLyoqIEB9IE1FU1NBR0VfV0FJVElORyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogQGRlZmdyb3VwIE1JU0MgTUlTQy4gcm91dGluZXMKKyAqIEB7CisgKi8KKworLyoqCisgKiBAYnJpZWYKKyAqICBUaGlzIGZ1bmN0aW9uIGluaXRpYXRlcyBQTEwgZnJlZSBydW4gbW9kZS4KKyAqCisgKiBAcGFyYW1baW5dIGhQcm9zbGljIC0gd2hpY2ggY2hhbm5lbCB0byBtb2RpZnkKKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKi8KKworaW50IFByb1NMSUNfUExMRnJlZVJ1blN0YXJ0IChwcm9zbGljQ2hhblR5cGVfcHRyIGhQcm9zbGljKTsKKworLyoqCisgKiBAYnJpZWYKKyAqICBUaGlzIGZ1bmN0aW9uIHRlcm1pbmF0ZXMgUExMIGZyZWUgcnVuIG1vZGUuCisgKgorICogQHBhcmFtW2luXSBoUHJvc2xpYyAtIHdoaWNoIGNoYW5uZWwgdG8gbW9kaWZ5CisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICovCisKK2ludCBQcm9TTElDX1BMTEZyZWVSdW5TdG9wIChwcm9zbGljQ2hhblR5cGVfcHRyIGhQcm9zbGljKTsKKworLyoqCisgKiBAYnJpZWYKKyAqICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgUExMIGZyZWUgcnVuIHN0YXR1cy4KKyAqCisgKiBAcGFyYW1baW5dIGhQcm9zbGljIC0gd2hpY2ggY2hhbm5lbCB0byByZXBvcnQgdXBvbi4KKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKi8KKworaW50IFByb1NMSUNfR2V0UExMRnJlZVJ1blN0YXR1cyAocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYyk7CisKKy8qKgorICoKKyAqIEBicmllZgorICogU2V0cyB0aGUgUHJvU0xJQyBpbnRvIFVzZXIgQWNjZXNzIE1vZGUgKFVBTSkgb24gcGFydHMgdGhhdCBzdXBwb3J0IHRoaXMuIFRoaXMgaXMgbWFpbmx5CisgKiB1c2VkIGludGVybmFsbHkgd2l0aGluIHRoZSBBUEkuCisgKgorICogQHBhcmFtW2luXSBwUHJvc2xpYyAtIHdoaWNoIGNoYW5uZWwgdG8gbW9kaWZ5CisgKiBAcGFyYW1baW5dIGlzRW5hYmxlZCAtIGlzIHRoZSBVc2VyIEFjY2VzcyBNb2RlIGVuYWJsZWQgKE5PVEU6IG9uY2UgZW5hYmxlZCwgaXQgY2FuIG5vdCBiZSBkaXNhYmxlZCkKKyAqIEBwYXJhbVtpbl0gaXNCY2FzdCAgIC0gaXMgdGhpcyBhIGJyb2FkY2FzdCBvbiB0aGUgZGFpc3ljaGFpbgorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqLworaW50IFByb1NMSUNfU2V0VXNlck1vZGUocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYyxCT09MRUFOIGlzRW5hYmxlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEJPT0xFQU4gaXNCY2FzdCk7CisKKy8qCisqKiBAYnJpZWYKKyoqIENoZWNrcyBmb3IgaW1wcm9wZXIgcmluZyBleGl0ICh0aGlzIGlzIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgQVBJKSBhbmQKKyoqIG5vdCBhbGwgY2hpcHNldHMgbmVlZCB0byBjYWxsIHRoaXMuCisqKgorKiogQHBhcmFtW2luXSBwUHJvc2xpYyAtIHdoaWNoIFByb1NMSUMgdG8gY2hlY2suCisqKiBSZXR1cm5zOgorKiogUkNfTk9ORSAgICAgICAgICAgICAgICAtICBSZWluaXQgbm90IHJlcXVpcmVkCisqKiBSQ19SRUlOSVRfUkVRVUlSRUQgICAgIC0gIENvcnJ1cHRlZCBzdGF0ZSBtYWNoaW5lIC0gcmVpbml0IHJlcXVpcmVkCisqKgorKi8KK2ludCBQcm9TTElDX2lzUmVpbml0UmVxdWlyZWQocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYyk7CisKKy8qKiBAfSBNSVNDICovCisvKiogQH0gKi8KKworLyogSG9wZWZ1bGx5IGN1c3RvbWVyJ3MgY29kZSB3aWxsIG5ldmVyIGNhbGwgdGhpcyBmdW5jdGlvbi4uLiAqLworaW50IFByb1NMSUNfVW5zdXBwb3J0ZWRGZWF0dXJlTm9BcmcocHJvc2xpY0NoYW5UeXBlX3B0ciBwUHJvc2xpYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uX25hbWUpOworCisvKiBIZWxwZXIgZnVuY3Rpb24gdXNlZCBieSBQU1ROIHJvdXRpbmVzICovCisjaWZkZWYgUFNUTl9ERVRfRU5BQkxFCit2b2lkIFByb1NMSUNfUFNUTl9kZWxheV9wb2xsKHByb3NsaWNUZXN0U3RhdGVUeXBlICpwU3RhdGUsIHVJbnQxNiBkZWxheSk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoU0kzMjE4WCkgfHwgZGVmaW5lZChTSTMyMjZYKSB8fCBkZWZpbmVkKFNJMzIyOFgpIHx8IGRlZmluZWQoU0kzMjE3WCkgfHwgZGVmaW5lZChTSTMyMTlYKQoraW50IFByb1NMSUNfQ2FsaWJyYXRlKHByb3NsaWNDaGFuVHlwZV9wdHIgKmhQcm9zbGljLCBpbnQgbWF4Q2hhbiwgdUludDggKmNhbHIsCisgICAgICAgICAgICAgICAgICAgICAgaW50IG1heFRpbWUpOworI2VuZGlmCisvKioKKyAqIEBicmllZiBkZXRlcm1pbmUgaWYgdGhlIGdpdmVuIGNoYW5uZWwgaXMgYSBQcm9TTElDIG9yIERBQQorICoKKyAqIEBwYXJhbVtpbixvdXRdIHBQcm9zbGljIC0gY2hhbm5lbCB0byBiZSBwcm9iZWQuCisgKiBAcmV0dmFsIFBST1NMSUMgfCBEQUEgfCBVTktOT1dOCisgKi8KK2ludCBQcm9TTElDX2lkZW50aWZ5Q2hhbm5lbFR5cGUocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYyk7CisKKy8qIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSB1c2VkIGFzIHBhcnQgb2YgdGhlIGNoaXBzZXQgaW5pdCBmdW5jdGlvbnMsIG5vdCBtZWFudCB0byBiZSBjYWxsZWQKKyAgIG91dHNpZGUgdGhpcyBzY29wZS4KKyovCitpbnQgUHJvU0xJQ19SZUluaXRfaGVscGVyKHByb3NsaWNDaGFuVHlwZV9wdHIgKnBQcm9zbGljLCBpbnQgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdE9wdGlvbnNUeXBlIGluaXRfb3B0aW9uLCBpbnQgbnVtQ2hhblBlckRldmljZSk7CitpbnQgUHJvU0xJQ19WZXJpZnlNYXN0ZXJTdGF0KHByb3NsaWNDaGFuVHlwZV9wdHIpOworCit2b2lkIFByb1NMSUNfTG9hZFN1cHBvcnRSQU0ocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYywgdUludDggY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdUludDE2ICphZGRyZXNzLCBjb25zdCByYW1EYXRhICpkYXRhKTsKKworI2VuZGlmIC8qZW5kIGlmZGVmIFBST1NMSUNfSCovCisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL2NvZGVjcy9zaTMyMTh4L2luYy9wcm9zbGljX3RzdGluLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9pbmMvcHJvc2xpY190c3Rpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyODM0NzMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9pbmMvcHJvc2xpY190c3Rpbi5oCkBAIC0wLDAgKzEsNDM3IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KKy8qDQorICogQXV0aG9yKHMpOg0KKyAqIGNkcA0KKyAqDQorICogRGlzdHJpYnV0ZWQgYnk6DQorICogU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYw0KKyAqDQorICogVGhpcyBmaWxlIGNvbnRhaW5zIHByb3ByaWV0YXJ5IGluZm9ybWF0aW9uLg0KKyAqIE5vIGRpc3NlbWluYXRpb24gYWxsb3dlZCB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tDQorICogU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4NCisgKg0KKyAqIEZpbGUgRGVzY3JpcHRpb246DQorICogVGhpcyBpcyB0aGUgaGVhZGVyIGZpbGUgZm9yIHRoZSBpbndhcmQgdGVzdCBpbXBsZW1lbnRhdGlvbnMuDQorICoNCisgKi8NCisjaWZuZGVmIFBST1NMSUNfVFNUSU5fSA0KKyNkZWZpbmUgUFJPU0xJQ19UU1RJTl9IDQorDQorI2luY2x1ZGUgIi4uL2NvbmZpZ19pbmMvc2lfdm9pY2VfZGF0YXR5cGVzLmgiDQorI2luY2x1ZGUgInByb3NsaWMuaCINCisNCisvKiogQGFkZHRvZ3JvdXAgRElBR05PU1RJQ1MNCisgKiBAew0KKyAqLw0KKy8qKiBAZGVmZ3JvdXAgUFJPU0xJQ19UU1RJTiBQcm9TTElDIElud2FyZCBUZXN0cyAoVGVzdC1JbikNCisgKiBUaGlzIHNlY3Rpb24gZG9jdW1lbnRzIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gdGhlDQorICogUHJvU0xJQy9GWFMgaW53YXJkIHRlc3QgaW1wbGVtZW50YXRpb25zLg0KKyAqIEB7DQorICovDQorDQorI2RlZmluZSBNSU5fUklOR0lOR19TQU1QTEVTIDE2ICAgICAgICAgIC8qKjwgTWluaW11bSBudW1iZXIgb2YgcmluZ2luZyBzYW1wbGVzIGZvciBtZWFzdXJpbmcgcmluZyBhbXBsaXR1ZGUgKi8NCisjZGVmaW5lIE1BWF9SSU5HSU5HX1NBTVBMRVMgMjU1ICAgICAgICAgLyoqPCBNYXhpbXVtIG51bWJlciBvZiByaW5naW5nIHNhbXBsZXMgZm9yIG1lYXN1cmluZyByaW5nIGFtcGxpdHVkZSAqLw0KKyNkZWZpbmUgTUlOX1JJTkdJTkdfU0FNUExFX0lOVEVSVkFMIDEgICAvKio8IE1pbmltdW0gc2FtcGxlIGludGVydmFsIGZvciBtZWFzdXJpbmcgcmluZyBhbXBsaXR1ZGUgKi8NCisjZGVmaW5lIE1BWF9SSU5HSU5HX1NBTVBMRV9JTlRFUlZBTCAxMCAgLyoqPCBNYXhpbXVtIHNhbXBsZSBpbnRlcnZhbCBmb3IgbWVhc3VyaW5nIHJpbmcgYW1wbGl0dWRlICovDQorDQorLyoqDQorKiBUZXN0LUluIHJlc3VsdHMgc3RhdHVzDQorKi8NCitlbnVtDQorew0KKyAgVFNUSU5fUkVTVUxUU19JTlZBTElELA0KKyAgVFNUSU5fUkVTVUxUU19WQUxJRA0KK307DQorDQorLyoqDQorKiBQQ00gZm9ybWF0IG9wdGlvbnMNCisqLw0KK2VudW0NCit7DQorICBQQ01fOEJJVCwNCisgIFBDTV8xNkJJVA0KK307DQorDQorLyoqDQorKiBBYm9ydCBpZiBMaW5lLWluLXVzZSBvcHRpb24NCisqLw0KK2VudW0NCit7DQorICBBQk9SVF9MSVVfRElTQUJMRUQsDQorICBBQk9SVF9MSVVfRU5BQkxFRA0KK307DQorDQorLyoqDQorKiBDaGVjayBmb3IgbG9vcCBjbG9zdXJlIG9wdGlvbg0KKyovDQorZW51bQ0KK3sNCisgIExDUl9DSEVDS19ESVNBQkxFRCwNCisgIExDUl9DSEVDS19FTkFCTEVEDQorfTsNCisNCisvKioNCisqIENoZWNrIGZvciByaW5ndHJpcCBvcHRpb24NCisqLw0KK2VudW0NCit7DQorICBSVFBfQ0hFQ0tfRElTQUJMRUQsDQorICBSVFBfQ0hFQ0tfRU5BQkxFRA0KK307DQorDQorDQorLyoqDQorICogRGVmaW5lcyBnZW5lcmljIHRlc3QgbGltaXQvdmFsdWUvc3RhdHVzIHN0cnVjdHVyZQ0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgaW50MzIJCQlsb3dlckxpbWl0OyAgICAgLyoqPCBMb3dlciB0ZXN0IGxpbWl0ICovDQorICBpbnQzMgkJCXVwcGVyTGltaXQ7ICAgICAvKio8IFVwcGVyIHRlc3QgbGltaXQgKi8NCisgIGludDMyCQkJdmFsdWU7ICAgICAgICAgIC8qKjwgTnVtZXJpYyB0ZXN0IHJlc3VsdCAqLw0KKyAgdUludDgJCQl0ZXN0UmVzdWx0OwkJLyoqPCAwIC0gRmFpbCwgMSAtIHBhc3MgKi8NCit9IHByb3NsaWNUZXN0T2JqOw0KKw0KKy8qKg0KKyAqIERlZmluZXMgc3RydWN0dXJlIGZvciBQQ00gTG9vcGJhY2sgVGVzdA0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgQk9PTEVBTgkJCXRlc3RFbmFibGU7CQkvKio8IEdhdGUgZXhlY3V0aW9uL3VwZGF0aW5nIG9mIHJlc3VsdHMgd2l0aCB0aGlzIGZsYWcgKi8NCisgIEJPT0xFQU4JCQlwY21McGJrRW5hYmxlZDsJLyoqPCBJbmRpY2F0ZXMgaWYgdGVzdCBkYXRhIGlzIHZhbGlkICgxKSBvciBzdGFsZSAoMCkgKi8NCisgIEJPT0xFQU4JCQlwY204Qml0TGluZWFyOyAgLyoqPCBTZXQgdG8gdXNlIDggYml0IGxpbmVhciBtb2RlICh1c2VkIGlmIG5vcm1hbGx5IHVzaW5nIHVsYXcgb3IgYWxhdykgKi8NCisgIHVJbnQ4ICAgICAgICAgICBwY21Nb2RlU2F2ZTsgICAgLyoqPCBTdG9yZSBlbnRyeSBQQ01NT0RFIHZhbHVlICAqLw0KKyAgdUludDgJCQl0ZXN0UmVzdWx0OwkJLyoqPCBPUiBvZiBhbGwgdGVzdCByZXN1bHRzIGluIHRoaXMgc3RydWN0dXJlICovDQorfSBwcm9zbGljUGNtTHBia1Rlc3Q7DQorDQorDQorLyoqDQorICogRGVmaW5lcyBzdHJ1Y3R1cmUgZm9yIERDIEZlZWQgVGVzdA0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgQk9PTEVBTgkJCXRlc3RFbmFibGU7CQkgICAgLyoqPCBHYXRlIGV4ZWN1dGlvbi91cGRhdGluZyBvZiByZXN1bHRzIHdpdGggdGhpcyBmbGFnICovDQorICBCT09MRUFOCQkJdGVzdERhdGFWYWxpZDsJICAgIC8qKjwgSW5kaWNhdGVzIGlmIHRlc3QgZGF0YSBpcyB2YWxpZCAoMSkgb3Igc3RhbGUgKDApICovDQorICBCT09MRUFOCQkJYWJvcnRJZkxpbmVJblVzZTsgICAvKio8IEFib3J0IHRlc3QgaWYgTENSIHNldCBhdCB0aGUgc3RhcnQgb2YgdGVzdC4gTGVhdmVzIHJlc3VsdHMgaW52YWxpZCAqLw0KKyAgQk9PTEVBTgkJCWFwcGx5TGNyVGhyZXNoOyAgICAgLyoqPCBBcHBseSBhbHRlcm5hdGUgTENSIHRocmVzaG9sZHMgdG8gZW5zdXJlIExDUiBldmVudCBvY2N1cnMgKi8NCisgIHVJbnQzMg0KKyAgYWx0TGNyT2ZmVGhyZXNoOyAgICAvKio8IE9wdGlvbmFsIExDUk9GRkhLIHRocmVzaG9sZCB0byBhcHBseSBkdXJpbmcgdGVzdCAqLw0KKyAgdUludDMyCQkJYWx0TGNyT25UaHJlc2g7ICAgICAvKio8IE9wdGlvbmFsIExDUk9OSEsgdGhyZXNob2xkIHRvIGFwcGx5IGR1cmluZyB0ZXN0ICovDQorICBCT09MRUFOCQkJbGNyU3RhdHVzOwkJICAgIC8qKjwgSW5kaWNhdGVzIExDUiBzdGF0dXMgYWZ0ZXIgYXBwbHlpbmcgdGVzdCBsb2FkICovDQorICBwcm9zbGljVGVzdE9iaglkY2ZlZWRWdGlwT25ob29rOyAgIC8qKjwgT24taG9vayBWVElQIHRlc3QgcmVzdWx0cyAqLw0KKyAgcHJvc2xpY1Rlc3RPYmoJZGNmZWVkVnJpbmdPbmhvb2s7ICAvKio8IE9uLWhvb2sgVlJJTkcgdGVzdCByZXN1bHRzICovDQorICBwcm9zbGljVGVzdE9iaglkY2ZlZWRWbG9vcE9uaG9vazsgIC8qKjwgT24taG9vayBWTE9PUCB0ZXN0IHJlc3VsdHMgKi8NCisgIHByb3NsaWNUZXN0T2JqCWRjZmVlZFZiYXRPbmhvb2s7ICAgLyoqPCBPbi1ob29rIFZCQVQgdGVzdCByZXN1bHRzICovDQorICBwcm9zbGljVGVzdE9iaglkY2ZlZWRJdGlwT25ob29rOyAgIC8qKjwgT24taG9vayBJVElQIHRlc3QgcmVzdWx0cyAqLw0KKyAgcHJvc2xpY1Rlc3RPYmoJZGNmZWVkSXJpbmdPbmhvb2s7ICAvKio8IE9uLWhvb2sgSVJJTkcgdGVzdCByZXN1bHRzICovDQorICBwcm9zbGljVGVzdE9iaglkY2ZlZWRJbG9vcE9uaG9vazsgIC8qKjwgT24taG9vayBJTE9PUCB0ZXN0IHJlc3VsdHMgKi8NCisgIHByb3NsaWNUZXN0T2JqCWRjZmVlZElsb25nT25ob29rOyAgLyoqPCBPbi1ob29rIElMT05HIHRlc3QgcmVzdWx0cyAqLw0KKyAgcHJvc2xpY1Rlc3RPYmoJZGNmZWVkVnRpcE9mZmhvb2s7ICAvKio8IE9mZi1ob29rIFZUSVAgdGVzdCByZXN1bHRzICovDQorICBwcm9zbGljVGVzdE9iaglkY2ZlZWRWcmluZ09mZmhvb2s7IC8qKjwgT2ZmLWhvb2sgVlJJTkcgdGVzdCByZXN1bHRzICovDQorICBwcm9zbGljVGVzdE9iaglkY2ZlZWRWbG9vcE9mZmhvb2s7IC8qKjwgT2ZmLWhvb2sgVkxPT1AgdGVzdCByZXN1bHRzICovDQorICBwcm9zbGljVGVzdE9iaglkY2ZlZWRWYmF0T2ZmaG9vazsgIC8qKjwgT2ZmLWhvb2sgVkJBVCB0ZXN0IHJlc3VsdHMgKi8NCisgIHByb3NsaWNUZXN0T2JqCWRjZmVlZEl0aXBPZmZob29rOyAgLyoqPCBPZmYtaG9vayBJVElQIHRlc3QgcmVzdWx0cyAqLw0KKyAgcHJvc2xpY1Rlc3RPYmoJZGNmZWVkSXJpbmdPZmZob29rOyAvKio8IE9mZi1ob29rIElSSU5HIHRlc3QgcmVzdWx0cyAqLw0KKyAgcHJvc2xpY1Rlc3RPYmoJZGNmZWVkSWxvb3BPZmZob29rOyAvKio8IE9mZi1ob29rIElMT09QIHRlc3QgcmVzdWx0cyAqLw0KKyAgcHJvc2xpY1Rlc3RPYmoJZGNmZWVkSWxvbmdPZmZob29rOyAvKio8IE9mZi1ob29rIElMT05HIHRlc3QgcmVzdWx0cyAqLw0KKyAgdUludDgJCQl0ZXN0UmVzdWx0OwkJICAgIC8qKjwgT1Igb2YgYWxsIHRlc3QgcmVzdWx0cyBpbiB0aGlzIHN0cnVjdHVyZSAqLw0KK30gcHJvc2xpY0RjRmVlZFRlc3Q7DQorDQorDQorLyoqDQorICogRGVmaW5lcyBzdHJ1Y3R1cmUgZm9yIFJpbmdpbmcgVGVzdA0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgQk9PTEVBTgkJCXRlc3RFbmFibGU7CQkgICAgLyoqPCBHYXRlIGV4ZWN1dGlvbi91cGRhdGluZyBvZiByZXN1bHRzIHdpdGggdGhpcyBmbGFnICovDQorICBCT09MRUFOCQkJdGVzdERhdGFWYWxpZDsJICAgIC8qKjwgSW5kaWNhdGVzIGlmIHRlc3QgZGF0YSBpcyB2YWxpZCAoMSkgb3Igc3RhbGUgKDApICovDQorICBCT09MRUFOCQkJYWJvcnRJZkxpbmVJblVzZTsgICAvKio8IEFib3J0IHRlc3QgaWYgTENSIHNldCBhdCB0aGUgc3RhcnQgb2YgdGVzdC4gTGVhdmVzIHJlc3VsdHMgaW52YWxpZCAqLw0KKyAgdUludDE2CQkJbnVtU2FtcGxlczsgICAgICAgICAvKio8IE51bWJlciBvZiBzYW1wbGVzIHRha2VuICovDQorICB1SW50OA0KKyAgc2FtcGxlSW50ZXJ2YWw7ICAgICAvKio8IFNhbXBsZSBpbnRlcnZhbCAoaW4gbXMgLSByYW5nZSAxIHRvIDEwMCkgKi8NCisgIEJPT0xFQU4JCQlyaW5ndHJpcFRlc3RFbmFibGU7IC8qKjwgRW5hYmxlIHJpbmd0cmlwIHRlc3QgKi8NCisgIEJPT0xFQU4JCQlydHBTdGF0dXM7ICAgICAgICAgIC8qKjwgUlRQIEJpdCAqLw0KKyAgcHJvc2xpY1Rlc3RPYmoJcmluZ2luZ1ZhYzsgICAgICAgICAvKio8IFJpbmdpbmcgQUMgVm9sdGFnZSB0ZXN0IHJlc3VsdHMgKi8NCisgIHByb3NsaWNUZXN0T2JqCXJpbmdpbmdWZGM7ICAgICAgICAgLyoqPCBSaW5naW5nIERDIFZvbHRhZ2UgdGVzdCByZXN1bHRzICovDQorICB1SW50OAkJCXRlc3RSZXN1bHQ7CQkgICAgLyoqPCBPUiBvZiBhbGwgdGVzdCByZXN1bHRzIGluIHRoaXMgc3RydWN0dXJlICovDQorfSBwcm9zbGljUmluZ2luZ1Rlc3Q7DQorDQorLyoqDQorICogRGVmaW5lcyBzdHJ1Y3R1cmUgZm9yIEJhdHRlcnkgVGVzdA0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgQk9PTEVBTgkJCXRlc3RFbmFibGU7CQkvKio8IEdhdGUgZXhlY3V0aW9uL3VwZGF0aW5nIG9mIHJlc3VsdHMgd2l0aCB0aGlzIGZsYWcgKi8NCisgIEJPT0xFQU4JCQl0ZXN0RGF0YVZhbGlkOwkvKio8IEluZGljYXRlcyBpZiB0ZXN0IGRhdGEgaXMgdmFsaWQgKDEpIG9yIHN0YWxlICgwKSAqLw0KKyAgcHJvc2xpY1Rlc3RPYmoJdmJhdDsgICAgICAgICAgIC8qKjwgVkJBVCB0ZXN0IHJlc3VsdHMgKi8NCisgIHVJbnQ4CQkJdGVzdFJlc3VsdDsJCS8qKjwgT1Igb2YgYWxsIHRlc3QgcmVzdWx0cyBpbiB0aGlzIHN0cnVjdHVyZSAqLw0KK30gcHJvc2xpY0JhdHRlcnlUZXN0Ow0KKw0KKy8qKg0KKyAqIERlZmluZXMgc3RydWN0dXJlIGZvciBBdWRpbyBUZXN0DQorICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICBCT09MRUFOCQkJdGVzdEVuYWJsZTsJCSAgLyoqPCBHYXRlIGV4ZWN1dGlvbi91cGRhdGluZyBvZiByZXN1bHRzIHdpdGggdGhpcyBmbGFnICovDQorICBCT09MRUFOCQkJdGVzdERhdGFWYWxpZDsJICAvKio8IEluZGljYXRlcyBpZiB0ZXN0IGRhdGEgaXMgdmFsaWQgKDEpIG9yIHN0YWxlICgwKSAqLw0KKyAgQk9PTEVBTgkJCWFib3J0SWZMaW5lSW5Vc2U7IC8qKjwgQWJvcnQgdGVzdCBpZiBMQ1Igc2V0IGF0IHRoZSBzdGFydCBvZiB0ZXN0LiBMZWF2ZXMgcmVzdWx0cyBpbnZhbGlkICovDQorICBpbnQzMg0KKyAgemVyb2RCbV9tVnBrOyAgICAgLyoqPCAwZEJtIHZvbHRhZ2UgKGluIG1WcGspIG9mIHJlZiBpbXBlZGFuY2UgKi8NCisgIHByb3NsaWNUZXN0T2JqCXR4R2FpbjsJCSAgICAgIC8qKjwgVFggcGF0aCBnYWluIHRlc3QgcmVzdWx0cyAqLw0KKyAgcHJvc2xpY1Rlc3RPYmogIHJ4R2FpbjsgICAgICAgICAgIC8qKjwgUlggcGF0aCBnYWluIHRlc3QgcmVzdWx0cyAqLw0KKyAgdUludDgJCQl0ZXN0UmVzdWx0OwkJICAvKio8IE9SIG9mIGFsbCB0ZXN0IHJlc3VsdHMgaW4gdGhpcyBzdHJ1Y3R1cmUgKi8NCit9IHByb3NsaWNBdWRpb1Rlc3Q7DQorDQorDQorLyoqDQorICogRGVmaW5lcyBzdHJ1Y3R1cmUgZm9yIGFsbCB0ZXN0cw0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgcHJvc2xpY1BjbUxwYmtUZXN0CXBjbUxwYmtUZXN0Ow0KKyAgcHJvc2xpY0RjRmVlZFRlc3QJZGNGZWVkVGVzdDsNCisgIHByb3NsaWNSaW5naW5nVGVzdAlyaW5naW5nVGVzdDsNCisgIHByb3NsaWNCYXR0ZXJ5VGVzdAliYXR0ZXJ5VGVzdDsNCisgIHByb3NsaWNBdWRpb1Rlc3QJYXVkaW9UZXN0Ow0KK30gcHJvc2xpY1Rlc3RJbk9ialR5cGU7DQorDQordHlwZWRlZiBwcm9zbGljVGVzdEluT2JqVHlwZSAqcHJvc2xpY1Rlc3RJbk9ialR5cGVfcHRyOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZg0KKyAqICBBbGxvY2F0ZSBtZW1vcnkgYW5kIGluaXRpYWxpemUgdGhlIGdpdmVuIHN0cnVjdHVyZS4NCisgKg0KKyAqIEBwYXJhbVtpbixvdXRdICpwVHN0aW4gLSB0aGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUNCisgKiBAcGFyYW1baW5dICAgICBudW1fb2JqcyAtIG51bWJlciBvZiBUZXN0aW4gc3RydWN0dXJlcyB0byBhbGxvY2F0ZS4NCisgKg0KKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuDQorICogQHNhIFByb1NMSUNfRGVzdHJveVRlc3RJbk9ianMNCisgKi8NCitpbnQgUHJvU0xJQ19jcmVhdGVUZXN0SW5PYmpzKHByb3NsaWNUZXN0SW5PYmpUeXBlX3B0ciAqcFRzdGluLCB1SW50MzIgbnVtX29ianMpOw0KKyNkZWZpbmUgUHJvU0xJQ19jcmVhdGVUZXN0SW5PYmooWCkgUHJvU0xJQ19jcmVhdGVUZXN0SW5PYmpzKChYKSwxKQ0KKw0KKy8qKg0KKyAqIEBicmllZg0KKyAqICBGcmVlIG1lbW9yeSByZXNlcnZlZCBieSB0aGUgZ2l2ZW4gc3RydWN0dXJlLg0KKyAqDQorICogQHBhcmFtW2luLG91dF0gKnBUc3RpbiAtIHRoZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQ0KKyAqDQorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4NCisgKi8NCitpbnQgUHJvU0xJQ19kZXN0cm95VGVzdEluT2Jqcyhwcm9zbGljVGVzdEluT2JqVHlwZV9wdHIgKnBUc3Rpbik7DQorI2RlZmluZSBQcm9TTElDX2Rlc3Ryb3lUZXN0SW5PYmogUHJvU0xJQ19kZXN0cm95VGVzdEluT2Jqcw0KKw0KKy8qKg0KKyAqIEBicmllZg0KKyAqICBFbmFibGUgUENNIGxvb3BiYWNrLg0KKyAqDQorICogQHBhcmFtW2luXSAgICAgIHBQcm9zbGljICAtICBjaGFubmVsIGRhdGEgc3RydWN0dXJlDQorICogQHBhcmFtW2luLG91dF0gIHBUc3RpbiAtIGFsbCBjb250cm9sLCBsaW1pdHMsIGFuZCByZXN1bHRzDQorICoNCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLg0KKyAqLw0KK2ludCBQcm9TTElDX3Rlc3RJblBDTUxwYmtFbmFibGUocHJvc2xpY0NoYW5UeXBlX3B0ciBwUHJvc2xpYywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3NsaWNUZXN0SW5PYmpUeXBlX3B0ciBwVHN0aW4pOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZg0KKyAqICBEaXNhYmxlIFBDTSBsb29wYmFjay4NCisgKg0KKyAqIEBwYXJhbVtpbl0gICAgICBwUHJvc2xpYyAgLSAgY2hhbm5lbCBkYXRhIHN0cnVjdHVyZQ0KKyAqIEBwYXJhbVtpbixvdXRdICBwVHN0aW4gLSBhbGwgY29udHJvbCwgbGltaXRzLCBhbmQgcmVzdWx0cw0KKyAqDQorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4NCisgKi8NCitpbnQgUHJvU0xJQ190ZXN0SW5QQ01McGJrRGlzYWJsZShwcm9zbGljQ2hhblR5cGVfcHRyIHBQcm9zbGljLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3NsaWNUZXN0SW5PYmpUeXBlX3B0ciBwVHN0aW4pOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZg0KKyAqIERDIEZlZWQgVGVzdCAtIHRoZSBwVHN0aW4tPmRjRmVlZFRlc3QgY29udGFpbnMgY29udHJvbCwgbGltaXRzIGFuZCB0ZXN0IHJlc3VsdCBpbmZvcm1hdGlvbi4NCisgKg0KKyAqIEBwYXJhbVtpbl0gICAgICBwUHJvc2xpYyAgLSAgY2hhbm5lbCBkYXRhIHN0cnVjdHVyZQ0KKyAqIEBwYXJhbVtpbixvdXRdICBwVHN0aW4gLSBhbGwgY29udHJvbCwgbGltaXRzLCBhbmQgcmVzdWx0cw0KKyAqDQorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZQ0KKyAqIEByZXR2YWwgUkNfVEVTVF9QQVNTRUQgaW5kaWNhdGVzIHRlc3QgY29tcGxldGVkIGFuZCBwYXNzZWQNCisgKiBAcmV0dmFsIFJDX1RFU1RfRkFJTEVEIGluZGljYXRlcyB0ZXN0IGNvbXBsZXRlZCBhbmQgZmFpbGVkDQorICogQHJldHZhbCBSQ19VTlNVUFBPUlRFRF9GRUFUVVJFIGluZGljYXRlcyBmZWF0dXJlIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBkZXZpY2UNCisgKiBAcmV0dmFsIFJDX1RFU1RfRElTQUJMRUQgaW5kaWNhdGVzIHRlc3QgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkL2VuYWJsZWQNCisgKiBAcmV0dmFsIFJDX0xJTkVfSU5fVVNFIGluZGljYXRlcyBMQ1MgYWxyZWFkeSBzZXQNCisgKg0KKyAqLw0KK2ludCBQcm9TTElDX3Rlc3RJbkRDRmVlZChwcm9zbGljQ2hhblR5cGVfcHRyIHBQcm9zbGljLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICBwcm9zbGljVGVzdEluT2JqVHlwZV9wdHIgcFRzdGluKTsNCisNCisNCisvKioNCisgKiBAYnJpZWYNCisgKiBSaW5naW5nIGFuZCBSaW5ndHJpcCBUZXN0DQorICoNCisgKiBAcGFyYW1baW5dICAgICAgcFByb3NsaWMgIC0gIGNoYW5uZWwgZGF0YSBzdHJ1Y3R1cmUNCisgKiBAcGFyYW1baW4sb3V0XSAgcFRzdGluIC0gYWxsIGNvbnRyb2wsIGxpbWl0cywgYW5kIHJlc3VsdHMNCisgKg0KKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUNCisgKiBAcmV0dmFsIFJDX1RFU1RfUEFTU0VEIGluZGljYXRlcyB0ZXN0IGNvbXBsZXRlZCBhbmQgcGFzc2VkDQorICogQHJldHZhbCBSQ19URVNUX0ZBSUxFRCBpbmRpY2F0ZXMgdGVzdCBjb21wbGV0ZWQgYW5kIGZhaWxlZA0KKyAqIEByZXR2YWwgUkNfVU5TVVBQT1JURURfRkVBVFVSRSBpbmRpY2F0ZXMgZmVhdHVyZSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgZGV2aWNlDQorICogQHJldHZhbCBSQ19URVNUX0RJU0FCTEVEIGluZGljYXRlcyB0ZXN0IGhhcyBub3QgYmVlbiBpbml0aWFsaXplZC9lbmFibGVkDQorICogQHJldHZhbCBSQ19MSU5FX0lOX1VTRSBpbmRpY2F0ZXMgTENTIGFscmVhZHkgc2V0DQorICoNCisgKi8NCitpbnQgUHJvU0xJQ190ZXN0SW5SaW5naW5nKHByb3NsaWNDaGFuVHlwZV9wdHIgcFByb3NsaWMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9zbGljVGVzdEluT2JqVHlwZV9wdHIgcFRzdGluKTsNCisNCisvKioNCisgKiBAYnJpZWYNCisgKiBCYXR0ZXJ5IFRlc3QgLQ0KKyAqIHBUc3RpbiBjb250YWlucyBib3RoIHRoZSBjb25maWd1cmF0aW9uIGRhdGEgYW5kIHRlc3QgcmVzdWx0cy4NCisgKiBTZWUgKipwVHN0aW4tPmJhdHRlcnlUZXN0LnRlc3RSZXN1bHQgLSBQYXNzL0ZhaWwgcmVzdWx0DQorICoNCisgKiBAcGFyYW1baW5dICAgICAgcFByb3NsaWMgIC0gIGNoYW5uZWwgZGF0YSBzdHJ1Y3R1cmUNCisgKiBAcGFyYW1baW4sb3V0XSAgcFRzdGluIC0gY29uZmlndXJhdGlvbiBhbmQgdGVzdCByZXN1bHRzDQorICoNCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlDQorICogQHJldHZhbCBSQ19URVNUX1BBU1NFRCBpbmRpY2F0ZXMgdGVzdCBjb21wbGV0ZWQgYW5kIHBhc3NlZA0KKyAqIEByZXR2YWwgUkNfVEVTVF9GQUlMRUQgaW5kaWNhdGVzIHRlc3QgY29tcGxldGVkIGFuZCBmYWlsZWQNCisgKiBAcmV0dmFsIFJDX1VOU1VQUE9SVEVEX0ZFQVRVUkUgaW5kaWNhdGVzIGZlYXR1cmUgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGRldmljZQ0KKyAqIEByZXR2YWwgUkNfVEVTVF9ESVNBQkxFRCBpbmRpY2F0ZXMgdGVzdCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQvZW5hYmxlZA0KKyAqDQorICovDQoraW50IFByb1NMSUNfdGVzdEluQmF0dGVyeShwcm9zbGljQ2hhblR5cGVfcHRyIHBQcm9zbGljLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvc2xpY1Rlc3RJbk9ialR5cGVfcHRyIHBUc3Rpbik7DQorDQorLyoqDQorICogQGJyaWVmDQorICogQXVkaW8gbGV2ZWwgaW53YXJkIHRlc3QuICBwVHN0aW4tPmF1ZGlvVGVzdCBjb250YWlucyBhbGwgY29udHJvbCwgbGltaXRzIGFuZCByZXN1bHRzLg0KKyAqDQorICogQHBhcmFtW2luXSAgICAgIHBQcm9zbGljICAtICBjaGFubmVsIGRhdGEgc3RydWN0dXJlDQorICogQHBhcmFtW2luLG91dF0gIHBUc3RpbiAtIGFsbCBjb250cm9sLCBsaW1pdHMsIGFuZCByZXN1bHRzDQorICoNCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlDQorICogQHJldHZhbCBSQ19URVNUX1BBU1NFRCBpbmRpY2F0ZXMgdGVzdCBjb21wbGV0ZWQgYW5kIHBhc3NlZA0KKyAqIEByZXR2YWwgUkNfVEVTVF9GQUlMRUQgaW5kaWNhdGVzIHRlc3QgY29tcGxldGVkIGFuZCBmYWlsZWQNCisgKiBAcmV0dmFsIFJDX1VOU1VQUE9SVEVEX0ZFQVRVUkUgaW5kaWNhdGVzIGZlYXR1cmUgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGRldmljZQ0KKyAqIEByZXR2YWwgUkNfVEVTVF9ESVNBQkxFRCBpbmRpY2F0ZXMgdGVzdCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQvZW5hYmxlZA0KKyAqIEByZXR2YWwgUkNfTElORV9JTl9VU0UgaW5kaWNhdGVzIExDUyBhbHJlYWR5IHNldA0KKyAqDQorICovDQoraW50IFByb1NMSUNfdGVzdEluQXVkaW8ocHJvc2xpY0NoYW5UeXBlX3B0ciBwUHJvc2xpYywNCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9zbGljVGVzdEluT2JqVHlwZV9wdHIgcFRzdGluKTsNCisNCisvKioNCisgKiBAYnJpZWYNCisgKiAgSW5pdGlhbGl6ZS9FbmFibGUgUENNIExvb3BiYWNrIFRlc3QuICBMaW5rcyB0ZXN0IGNvbmZpZy9saW1pdHMNCisgKiAgdG8gaW53YXJkIHRlc3QgZGF0YSBzdHJ1Y3R1cmUuDQorICoNCisgKiBAcGFyYW1baW4sb3V0XSAgcFRzdGluLT5wY21McGJrVGVzdCAtIGFsbCBjb250cm9sLCBsaW1pdHMsIGFuZCByZXN1bHRzDQorICogQHBhcmFtW2luXSAgICAgIHBjbUxwYmtUZXN0IC0gIHRlc3QgY29uZmlnIGFuZCBsaW1pdHMgdG8gbGluayB0byBwVHN0aW4tPnBjbUxwYmtUZXN0DQorICoNCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLg0KKyAqLw0KK2ludCBQcm9TTElDX3Rlc3RJblBjbUxwYmtTZXR1cChwcm9zbGljVGVzdEluT2JqVHlwZSAqcFRzdGluLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9zbGljUGNtTHBia1Rlc3QgKnBjbUxwYmtUZXN0KTsNCisNCisvKioNCisgKiBAYnJpZWYNCisgKiAgSW5pdGlhbGl6ZS9FbmFibGUgREMgRmVlZCBUZXN0LiAgTGlua3MgdGVzdCBjb25maWcvbGltaXRzDQorICogIHRvIGlud2FyZCB0ZXN0IGRhdGEgc3RydWN0dXJlLg0KKyAqDQorICogQHBhcmFtW2luLG91dF0gIHBUc3Rpbi0+ZGNGZWVkVGVzdCAtIGFsbCBjb250cm9sLCBsaW1pdHMsIGFuZCByZXN1bHRzDQorICogQHBhcmFtW2luXSAgICAgIGRjRmVlZFRlc3QgLSAgdGVzdCBjb25maWcgYW5kIGxpbWl0cyB0byBsaW5rIHRvIHBUc3Rpbi0+ZGNGZWVkVGVzdA0KKyAqDQorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4NCisgKi8NCitpbnQgUHJvU0xJQ190ZXN0SW5EY0ZlZWRTZXR1cChwcm9zbGljVGVzdEluT2JqVHlwZSAqcFRzdGluLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3NsaWNEY0ZlZWRUZXN0ICpkY0ZlZWRUZXN0KTsNCisNCisvKioNCisgKiBAYnJpZWYNCisgKiAgSW5pdGlhbGl6ZS9FbmFibGUgUmluZ2luZyBUZXN0LiAgTGlua3MgdGVzdCBjb25maWcvbGltaXRzDQorICogIHRvIGlud2FyZCB0ZXN0IGRhdGEgc3RydWN0dXJlLg0KKyAqDQorICogQHBhcmFtW2luLG91dF0gIHBUc3Rpbi0+cmluZ2luZ1Rlc3QgLSBhbGwgY29udHJvbCwgbGltaXRzLCBhbmQgcmVzdWx0cw0KKyAqIEBwYXJhbVtpbl0gICAgICByaW5naW5nVGVzdCAtICB0ZXN0IGNvbmZpZyBhbmQgbGltaXRzIHRvIGxpbmsgdG8gcFRzdGluLT5yaW5naW5nVGVzdA0KKyAqDQorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4NCisgKi8NCitpbnQgUHJvU0xJQ190ZXN0SW5SaW5naW5nU2V0dXAocHJvc2xpY1Rlc3RJbk9ialR5cGUgKnBUc3RpbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvc2xpY1JpbmdpbmdUZXN0ICpyaW5naW5nVGVzdCk7DQorDQorLyoqDQorICogQGJyaWVmDQorICogIEluaXRpYWxpemUvRW5hYmxlIEJhdHRlcnkgVGVzdC4gIExpbmtzIHRlc3QgY29uZmlnL2xpbWl0cw0KKyAqICB0byBpbndhcmQgdGVzdCBkYXRhIHN0cnVjdHVyZS4NCisgKg0KKyAqIEBwYXJhbVtpbixvdXRdICBwVHN0aW4tPmJhdHRlcnlUZXN0IC0gYWxsIGNvbnRyb2wsIGxpbWl0cywgYW5kIHJlc3VsdHMNCisgKiBAcGFyYW1baW5dICAgICAgYmF0dGVyeVRlc3QgLSAgdGVzdCBjb25maWcgYW5kIGxpbWl0cyB0byBsaW5rIHRvIHBUc3Rpbi0+YmF0dGVyeVRlc3QNCisgKg0KKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuDQorICovDQoraW50IFByb1NMSUNfdGVzdEluQmF0dGVyeVNldHVwKHByb3NsaWNUZXN0SW5PYmpUeXBlICpwVHN0aW4sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3NsaWNCYXR0ZXJ5VGVzdCAqYmF0dGVyeVRlc3QpOw0KKw0KKy8qKg0KKyAqIEBicmllZg0KKyAqICBJbml0aWFsaXplL0VuYWJsZSBBdWRpbyBUZXN0LiAgTGlua3MgdGVzdCBjb25maWcvbGltaXRzDQorICogIHRvIGlud2FyZCB0ZXN0IGRhdGEgc3RydWN0dXJlLg0KKyAqDQorICogQHBhcmFtW2luLG91dF0gIHBUc3Rpbi0+YXVkaW9UZXN0IC0gYWxsIGNvbnRyb2wsIGxpbWl0cywgYW5kIHJlc3VsdHMNCisgKiBAcGFyYW1baW5dICAgICAgYXVkaW9UZXN0IC0gIHRlc3QgY29uZmlnIGFuZCBsaW1pdHMgdG8gbGluayB0byBwVHN0aW4tPmF1ZGlvVGVzdA0KKyAqDQorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4NCisgKi8NCitpbnQgUHJvU0xJQ190ZXN0SW5BdWRpb1NldHVwKHByb3NsaWNUZXN0SW5PYmpUeXBlICpwVHN0aW4sDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9zbGljQXVkaW9UZXN0ICphdWRpb1Rlc3QpOw0KKw0KKw0KKy8qKg0KKyAqIEBicmllZg0KKyAqICBEZWJ1ZyB1dGlsaXR5IHRvIGxvZyBwcmVzZW50bHkgbG9hZGVkIHRlc3QgbGltaXRzDQorICoNCisgKiBAcGFyYW1baW5dICAgICAgcFByb3NsaWMgIC0gIGNoYW5uZWwgZGF0YSBzdHJ1Y3R1cmUNCisgKiBAcGFyYW1baW5dICAgICAgcFRzdGluIC0gaW53YXJkIHRlc3QgZGF0YSBzdHJ1Y3R1cmUNCisgKg0KKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUNCisgKiBAcmV0dmFsIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLg0KKyAqIEByZXR2YWwgUkNfVU5TVVBQT1JURURfRkVBVFVSRSBpbmRpY2F0ZXMgZmVhdHVyZSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgZGV2aWNlDQorICovDQoraW50IFByb1NMSUNfdGVzdEluUHJpbnRMaW1pdHMocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9zbGljVGVzdEluT2JqVHlwZSAqcFRzdGluKTsNCisNCisvKioNCisgKiBAYnJpZWYNCisgKiAgUHJvdmlkZSBhIHNpbXVsYXRlZCBvZmZob29rIHVzaW5nIHRoZSBQcm9TTElDIHRlc3QgbG9hZC4gIFlvdSB3b3VsZCBjYWxsIA0KKyAqICB0aGlzIGZ1bmN0aW9uIHR3aWNlOiBvbmNlIHRvIGVuYWJsZSB0aGUgc2ltdWxhdGVkIHRlc3QgbG9hZCANCisgKiAgKGlzX3Rlc3RTdGFydCA9IFRSVUUpIGFuZCBjaGVjayBpZiB0aGUgdXBwZXIgbGF5ZXIgY29ycmVjdGx5IGRldGVjdGVkDQorICogIHRoZSBob29rIHN0YXRlIGNoYW5nZSBhbmQgcG9zc2libHkgcGFzcyBzb21lIGF1ZGlvLiAgQWZ0ZXIgeW91IGhhdmUNCisgKiAgY29tcGxldGVkIHRoaXMgdGVzdC9jaGVjaywgeW91IHdvdWxkIGNhbGwgdGhlIHNhbWUgZnVuY3Rpb24gYWdhaW4gdG8NCisgKiAgcmVzdG9yZSB0aGUgc3lzdGVtIHRvIG5vcm1hbCBzdGF0ZSAoaXNfdGVzdFN0YXJ0ID0gRkFMU0UpLg0KKyAqDQorICogQG5vdGUgVGhpcyB0ZXN0IGNhbiBvbmx5IGJlIGV4ZWN1dGVkIG9uZSBhdCBhIHRpbWUuICBSdW5uaW5nIHRoaXMgb24NCisgKiAgICAgICBtdWx0aXBsZSBjaGFubmVscyB0aGF0IGhhdmUgZGlmZmVyZW50IERDIEZlZWQgYW5kIGRpZ2l0YWwgY29udHJvbA0KKyAqICAgICAgIHNldHRpbmdzIHdpbGwgY2F1c2UgcHJvYmxlbXMuIElmIHRoZSBhbGwgdGhlIGNoYW5uZWxzIGhhdmUgdGhlDQorICogICAgICAgc2FtZSBzZXR0aW5ncywgdGhpcyByZXN0cmljdGlvbiBjYW4gYmUgbG9vc2VuZWQuDQorICogICAgICAgDQorICoNCisgKiBAcGFyYW1baW5dICAgICAgcFByb3NsaWMgIC0gIGNoYW5uZWwgZGF0YSBzdHJ1Y3R1cmUNCisgKiBAcGFyYW1baW5dICAgICAgaXNfdGVzdFN0YXJ0IC0gaXMgdGhlIHRoZSBzdGFydCBvciBlbmQgb2YgdGVzdC4NCisgKiBAcGFyYW1baW5dICAgICAgdGltZURlbGF5TXNlYyAtIGhvdyBtYXkgbVNlYyB0byBkZWxheSBwcmlvciB0byByZXR1cm5pbmcgZnJvbQ0KKyAgICAgICAgICAgICAgICAgICB0aGUgZnVuY3Rpb24uDQorICoNCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlDQorICogQHJldHZhbCBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4NCisgKiBAcmV0dmFsIFJDX1VOU1VQUE9SVEVEX0ZFQVRVUkUgaW5kaWNhdGVzIGZlYXR1cmUgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGRldmljZQ0KKyAqLw0KKw0KK2ludCBQcm9TTElDX3Rlc3RMb2FkVGVzdCgNCisgIFNpVm9pY2VDaGFuVHlwZV9wdHIgcFByb3NsaWMsIA0KKyAgQk9PTEVBTiBpc190ZXN0U3RhcnQsIA0KKyAgdWludDMyX3QgdGltZURlbGF5TXNlYyk7DQorDQorLyoqIEB9IFBST1NMSUNfVFNUSU4gKi8NCisvKiogQH0gRElBR05PU1RJQ1MgKi8NCisjZW5kaWYNCisNCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9pbmMvc2kzMjE4eC5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvaW5jL3NpMzIxOHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmZkOWQyCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvaW5jL3NpMzIxOHguaApAQCAtMCwwICsxLDMwNSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8NCisvKg0KKyAqIERpc3RyaWJ1dGVkIGJ5Og0KKyAqIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMNCisgKg0KKyAqIFRoaXMgZmlsZSBjb250YWlucyBwcm9wcmlldGFyeSBpbmZvcm1hdGlvbi4NCisgKiBObyBkaXNzZW1pbmF0aW9uIGFsbG93ZWQgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbQ0KKyAqIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuDQorICoNCisgKi8NCisNCisjaWZuZGVmIFNJMzIxOFhIX0gNCisjZGVmaW5lIFNJMzIxOFhIX0gNCisNCisjaW5jbHVkZSAicHJvc2xpYy5oIg0KKw0KKyNkZWZpbmUgU0kzMjE4WF9DSEFOX1BFUl9ERVZJQ0UgICAgICAgICAgICAgMQ0KKw0KKw0KKy8qDQorKiogQ2FsaWJyYXRpb24gQ29uc3RhbnRzDQorKi8NCisNCisjZGVmaW5lIFNJMzIxOFhfQ0FMX1NURF9DQUxSMSAgICAgICAweEMwDQorI2RlZmluZSBTSTMyMThYX0NBTF9TVERfQ0FMUjIgICAgICAgMHgxOA0KKw0KKy8qIFRpbWVvdXRzIGluIDEwcyBvZiBtcyAqLw0KKyNkZWZpbmUgU0kzMjE4WF9USU1FT1VUX0RDRENfVVAgICAgIDIwMA0KKyNkZWZpbmUgU0kzMjE4WF9USU1FT1VUX0RDRENfRE9XTiAgIDIwMA0KKw0KKw0KKy8qDQorKiogU0kzMjE4WCBEYXRhVHlwZXMvRnVuY3Rpb24gRGVmaW5pdGlvbnMNCisqLw0KKw0KKw0KK3R5cGVkZWYgUHJvU0xJQ19EQ2ZlZWRfQ2ZnIFNpMzIxOHhfRENmZWVkX0NmZzsNCisNCisvKg0KKyoqIFNpMzIxOHggR2VuZXJhbCBQYXJhbWV0ZXIgU3RydWN0DQorKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIC8qIEZsYWdzICovDQorICB1SW50OCAgICAgICAgICAgICAgIGRldmljZV9rZXk7DQorICBib21PcHRpb25zVHlwZSAgICAgIGJvbV9vcHRpb247DQorICB2ZGNSYW5nZVR5cGUgICAgICAgIHZkY19yYW5nZTsNCisgIGF1dG9aY2FsVHlwZSAgICAgICAgemNhbF9lbjsNCisgIHBtQm9tVHlwZSAgICAgICAgICAgcG1fYm9tOw0KKyAgLyogUmF3IFBhcmFtZXRlcnMgKi8NCisgIHJhbURhdGEgICAgICAgICBpX29pdGhyZXNoX2xvOw0KKyAgcmFtRGF0YSAgICAgICAgIGlfb2l0aHJlc2hfaGk7DQorICByYW1EYXRhICAgICAgICAgdl9vdnRocmVzaDsNCisgIHJhbURhdGEgICAgICAgICB2X3V2dGhyZXNoOw0KKyAgcmFtRGF0YSAgICAgICAgIHZfdXZoeXN0Ow0KKyAgLyogUkFNIFVwZGF0ZXMgKi8NCisgIHJhbURhdGEgICAgICAgICBkY2RjX2Zzd192dGhsbzsNCisgIHJhbURhdGEgICAgICAgICBkY2RjX2Zzd192aHlzdDsNCisgIHJhbURhdGEgICAgICAgICBwX3RoX2h2aWM7DQorICByYW1EYXRhICAgICAgICAgY29lZl9wX2h2aWM7DQorICByYW1EYXRhICAgICAgICAgYmF0X2h5c3Q7DQorICByYW1EYXRhDQorICB2YmF0aF9leHBlY3Q7ICAgICAgICAgLyogZGVmYXVsdCAtIHRoaXMgaXMgb3ZlcndyaXR0ZW4gYnkgZGMgZmVlZCBwcmVzZXQgKi8NCisgIHJhbURhdGENCisgIHZiYXRyX2V4cGVjdDsgICAgICAgICAvKiBkZWZhdWx0IC0gdGhpcyBpcyBvdmVyd3JpdHRlbiBieSByaW5nIHByZXNldCAqLw0KKyAgcmFtRGF0YSAgICAgICAgIHB3cnNhdmVfdGltZXI7DQorICByYW1EYXRhICAgICAgICAgcHdyc2F2ZV9vZmhrX3RocmVzaDsNCisgIHJhbURhdGEgICAgICAgICB2YmF0X3RyYWNrX21pbjsgICAgICAgLyogU2FtZSBhcyBEQ0RDX1ZSRUZfTUlOICovDQorICByYW1EYXRhICAgICAgICAgdmJhdF90cmFja19taW5fcm5nOyAgIC8qIFNhbWUgYXMgRENEQ19WUkVGX01JTl9STkcgKi8NCisgIHJhbURhdGEgICAgICAgICBkY2RjX2FuYV9zY2FsZTsNCisgIHJhbURhdGEgICAgICAgICB0aGVybV9kYmk7DQorICByYW1EYXRhICAgICAgICAgdm92X2RjZGNfc2xvcGU7DQorICByYW1EYXRhICAgICAgICAgdm92X2RjZGNfb3M7DQorICByYW1EYXRhICAgICAgICAgdm92X3JpbmdfYmF0X2RjZGM7DQorICByYW1EYXRhICAgICAgICAgdm92X3JpbmdfYmF0X21heDsNCisgIHJhbURhdGEgICAgICAgICBkY2RjX3ZlcnI7DQorICByYW1EYXRhICAgICAgICAgZGNkY192ZXJyX2h5c3Q7DQorICByYW1EYXRhICAgICAgICAgcGRfdXZsbzsNCisgIHJhbURhdGEgICAgICAgICBwZF9vdmxvOw0KKyAgcmFtRGF0YSAgICAgICAgIHBkX29jbG87DQorICByYW1EYXRhICAgICAgICAgcGRfc3dkcnY7DQorICByYW1EYXRhICAgICAgICAgZGNkY191dnBvbDsNCisgIHJhbURhdGEgICAgICAgICBkY2RjX3JuZ3R5cGU7DQorICByYW1EYXRhICAgICAgICAgZGNkY19hbmFfdG9mZjsNCisgIHJhbURhdGEgICAgICAgICBkY2RjX2FuYV90b25taW47DQorICByYW1EYXRhICAgICAgICAgZGNkY19hbmFfdG9ubWF4Ow0KKyAgdUludDggICAgICAgICAgIGlycWVuMTsNCisgIHVJbnQ4ICAgICAgICAgICBpcnFlbjI7DQorICB1SW50OCAgICAgICAgICAgaXJxZW4zOw0KKyAgdUludDggICAgICAgICAgIGlycWVuNDsNCisgIHVJbnQ4ICAgICAgICAgICBlbmhhbmNlOw0KKyAgdUludDggICAgICAgICAgICBhdXRvX3JlZzsNCit9IFNpMzIxOHhfR2VuZXJhbF9DZmc7DQorDQorLyoNCisqKiBEZWZpbmVzIHN0cnVjdHVyZSBmb3IgY29uZmlndXJpbmcgcGNtDQorKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVJbnQ4IHBjbUZvcm1hdDsNCisgIHVJbnQ4IHdpZGViYW5kRW47DQorICB1SW50OCBwY21fdHJpOw0KKyAgdUludDggdHhfZWRnZTsNCisgIHVJbnQ4IGFsYXdfaW52Ow0KK30gU2kzMjE4eF9QQ01fQ2ZnOw0KKw0KKy8qDQorKiogRGVmaW5lcyBzdHJ1Y3R1cmUgZm9yIGNvbmZpZ3VyaW5nIHB1bHNlIG1ldGVyaW5nDQorKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHJhbURhdGEgcG1fYW1wX3RocmVzaDsNCisgIHVJbnQ4IHBtRnJlcTsNCisgIHVJbnQ4IHBtQXV0bzsNCisgIHJhbURhdGEgcG1BY3RpdmU7DQorICByYW1EYXRhIHBtSW5hY3RpdmU7DQorfSBTaTMyMTh4X1B1bHNlTWV0ZXJfQ2ZnOw0KKy8qDQorKiogRGVmaW5lcyBzdHJ1Y3R1cmUgZm9yIGNvbmZpZ3VyaW5nIEZTSyBnZW5lcmF0aW9uDQorKi8NCit0eXBlZGVmIFByb1NMSUNfRlNLX0NmZyBTaTMyMTh4X0ZTS19DZmc7DQorDQorDQorLyoNCisqKiBEZWZpbmVzIHN0cnVjdHVyZSBmb3IgY29uZmlndXJpbmcgaW1wZWRhbmNlIHN5bnRoZXNpcw0KKyovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICByYW1EYXRhIHpzeW50aF9iMDsNCisgIHJhbURhdGEgenN5bnRoX2IxOw0KKyAgcmFtRGF0YSB6c3ludGhfYjI7DQorICByYW1EYXRhIHpzeW50aF9hMTsNCisgIHJhbURhdGEgenN5bnRoX2EyOw0KKyAgdUludDggcmE7DQorfSBTaTMyMTh4X1pzeW50aF9DZmc7DQorDQorLyoNCisqKiBEZWZpbmVzIHN0cnVjdHVyZSBmb3IgY29uZmlndXJpbmcgaHlicmlkDQorKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHJhbURhdGEgZWNmaXJfYzI7DQorICByYW1EYXRhIGVjZmlyX2MzOw0KKyAgcmFtRGF0YSBlY2Zpcl9jNDsNCisgIHJhbURhdGEgZWNmaXJfYzU7DQorICByYW1EYXRhIGVjZmlyX2M2Ow0KKyAgcmFtRGF0YSBlY2Zpcl9jNzsNCisgIHJhbURhdGEgZWNmaXJfYzg7DQorICByYW1EYXRhIGVjZmlyX2M5Ow0KKyAgcmFtRGF0YSBlY2Zpcl9iMDsNCisgIHJhbURhdGEgZWNmaXJfYjE7DQorICByYW1EYXRhIGVjZmlyX2ExOw0KKyAgcmFtRGF0YSBlY2Zpcl9hMjsNCit9IFNpMzIxOHhfaHlicmlkX0NmZzsNCisNCisvKg0KKyoqIERlZmluZXMgc3RydWN0dXJlIGZvciBjb25maWd1cmluZyBHQ0kgQ0kgYml0cw0KKyovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1SW50OCBnY2lfY2k7DQorfSBTaTMyMTh4X0NJX0NmZzsNCisNCisvKg0KKyoqIERlZmluZXMgc3RydWN0dXJlIGZvciBjb25maWd1cmluZyBhdWRpbyBlcQ0KKyovDQorDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICByYW1EYXRhIHR4YWNlcV9jMDsNCisgIHJhbURhdGEgdHhhY2VxX2MxOw0KKyAgcmFtRGF0YSB0eGFjZXFfYzI7DQorICByYW1EYXRhIHR4YWNlcV9jMzsNCisNCisgIHJhbURhdGEgcnhhY2VxX2MwOw0KKyAgcmFtRGF0YSByeGFjZXFfYzE7DQorICByYW1EYXRhIHJ4YWNlcV9jMjsNCisgIHJhbURhdGEgcnhhY2VxX2MzOw0KK30gU2kzMjE4eF9hdWRpb0VRX0NmZzsNCisNCisvKg0KKyoqIERlZmluZXMgc3RydWN0dXJlIGZvciBjb25maWd1cmluZyBhdWRpbyBnYWluDQorKi8NCit0eXBlZGVmIFByb1NMSUNfYXVkaW9HYWluX0NmZyBTaTMyMTh4X2F1ZGlvR2Fpbl9DZmc7DQorDQorDQorDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICBTaTMyMTh4X2F1ZGlvRVFfQ2ZnIGF1ZGlvRVE7DQorICBTaTMyMTh4X2h5YnJpZF9DZmcgaHlicmlkOw0KKyAgU2kzMjE4eF9ac3ludGhfQ2ZnIHpzeW50aDsNCisgIHJhbURhdGEgdHhnYWluOw0KKyAgcmFtRGF0YSByeGdhaW47DQorICByYW1EYXRhIHJ4YWNocGZfYjBfMTsNCisgIHJhbURhdGEgIHJ4YWNocGZfYjFfMTsNCisgIHJhbURhdGEgIHJ4YWNocGZfYTFfMTsNCisgIGludDE2IHR4Z2Fpbl9kYjsgLypvdmVyYWxsIGdhaW4gYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29uZmlndXJhdGlvbiovDQorICBpbnQxNiByeGdhaW5fZGI7DQorfSBTaTMyMTh4X0ltcGVkYW5jZV9DZmc7DQorDQorDQorDQorLyoNCisqKiBEZWZpbmVzIHN0cnVjdHVyZSBmb3IgY29uZmlndXJpbmcgdG9uZSBnZW5lcmF0b3INCisqLw0KK3R5cGVkZWYgUHJvU0xJQ19Ub25lX0NmZyBTaTMyMTh4X1RvbmVfQ2ZnOw0KKw0KKy8qDQorKiogRGVmaW5lcyBzdHJ1Y3R1cmUgZm9yIGNvbmZpZ3VyaW5nIHJpbmcgZ2VuZXJhdG9yDQorKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHJhbURhdGEgcnRwZXI7DQorICByYW1EYXRhIGZyZXE7DQorICByYW1EYXRhIGFtcDsNCisgIHJhbURhdGEgcGhhczsNCisgIHJhbURhdGEgb2Zmc2V0Ow0KKyAgcmFtRGF0YSBzbG9wZV9yaW5nOw0KKyAgcmFtRGF0YSBpcmluZ19saW07DQorICByYW1EYXRhIHJ0YWN0aDsNCisgIHJhbURhdGEgcnRkY3RoOw0KKyAgcmFtRGF0YSBydGFjZGI7DQorICByYW1EYXRhIHJ0ZGNkYjsNCisgIHJhbURhdGEgdm92X3JpbmdfYmF0Ow0KKyAgcmFtRGF0YSB2b3ZfcmluZ19nbmQ7DQorICByYW1EYXRhIHZiYXRyX2V4cGVjdDsNCisgIHVJbnQ4IHRhbG87DQorICB1SW50OCB0YWhpOw0KKyAgdUludDggdGlsbzsNCisgIHVJbnQ4IHRpaGk7DQorICByYW1EYXRhIGFkYXBfcmluZ19taW5faTsNCisgIHJhbURhdGEgY291bnRlcl9pcmluZ192YWw7DQorICByYW1EYXRhIGNvdW50ZXJfdnRyX3ZhbDsNCisgIHJhbURhdGEgYXJfY29uc3QyODsNCisgIHJhbURhdGEgYXJfY29uc3QzMjsNCisgIHJhbURhdGEgYXJfY29uc3QzODsNCisgIHJhbURhdGEgYXJfY29uc3Q0NjsNCisgIHJhbURhdGEgcnJkX2RlbGF5Ow0KKyAgcmFtRGF0YSBycmRfZGVsYXkyOw0KKyAgcmFtRGF0YSBkY2RjX3ZyZWZfbWluX3JuZzsNCisgIHVJbnQ4IHJpbmdjb247DQorICB1SW50OCB1c2Vyc3RhdDsNCisgIHJhbURhdGEgdmNtX3Jpbmc7DQorICByYW1EYXRhIHZjbV9yaW5nX2ZpeGVkOw0KKyAgcmFtRGF0YSBkZWx0YV92Y207DQorICByYW1EYXRhIGRjZGNfcm5ndHlwZTsNCit9IFNpMzIxOHhfUmluZ19DZmc7DQorDQorDQorDQorDQorDQorLyoNCisqKiBGdW5jdGlvbjogU2kzMjE4eF9SZXZDX0dlblBhcmFtVXBkYXRlDQorKioNCisqKiBEZXNjcmlwdGlvbjoNCisqKiBVcGRhdGUgU2kzMjE4eCBnZW5lcmFsIHBhcmFtZXRlcnMgYW5kIG90aGVyIHJlcXVpcmVkIG1vZGlmaWNhdGlvbnMNCisqKiB0byBkZWZhdWx0IHJlZy9yYW0gdmFsdWVzDQorKioNCisqKiBSZXR1cm5zOg0KKyoqIGludCAoZXJyb3IpDQorKioNCisqLw0KK2ludCBTaTMyMTh4X0dlblBhcmFtVXBkYXRlKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMsaW5pdFNlcVR5cGUgc2VxKTsNCisNCisNCisvKg0KKyoqIEZ1bmN0aW9uOiBTaTMyMTd4X1JldkNfU2VsZWN0UGF0Y2gNCisqKg0KKyoqIERlc2NyaXB0aW9uOg0KKyoqIFNlbGVjdCBhcHByb3ByaWF0ZSBwYXRjaCBiYXNlZCBvbiBnZW5lcmFsIHBhcmFtZXRlcnMNCisqKg0KKyoqIFJldHVybnM6DQorKiogaW50IChlcnJvcikNCisqKg0KKyovDQoraW50IFNpMzIxOHhfU2VsZWN0UGF0Y2gocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYywNCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9zbGljUGF0Y2ggKipwYXRjaCk7DQorDQorLyoNCisqKiBGdW5jdGlvbjogU2kzMjE3eF9SZXZDX0NvbnZlcnRlclNldHVwDQorKioNCisqKiBEZXNjcmlwdGlvbjoNCisqKiBQcm9ncmFtIHJldmlzaW9uIHNwZWNpZmljIHNldHRpbmdzIGJlZm9yZSBwb3dlcmluZyBjb252ZXJ0ZXINCisqKg0KKyoqIFNwZWNpZmljYWxseSwgZnJvbSBnZW5lcmFsIHBhcmFtZXRlcnMgYW5kIGtub3dsZWRnZSB0aGF0IHRoaXMNCisqKiBpcyBSZXYgQywgc2V0dXAgZGNmZiBkcml2ZSwgZ2F0ZSBkcml2ZSBwb2xhcml0eSwgYW5kIGNoYXJnZSBwdW1wLg0KKyoqDQorKiogUmV0dXJuczoNCisqKiBpbnQgKGVycm9yKQ0KKyoqDQorKi8NCitpbnQgU2kzMjE4eF9Db252ZXJ0ZXJTZXR1cChwcm9zbGljQ2hhblR5cGVfcHRyIHBQcm9zbGljKTsNCisNCisvKg0KKyoqIEZ1bmN0aW9uOiBTaTMyMTd4X1JldkNfUHVsc2VNZXRlclNldHVwDQorKioNCisqKiBEZXNjcmlwdGlvbjoNCisqKiBjb25maWd1cmUgcHVsc2UgbWV0ZXJpbmcNCisqLw0KK2ludCBTaTMyMTh4X1B1bHNlTWV0ZXJTZXR1cCAocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYywgaW50IHByZXNldCk7DQorDQorI2VuZGlmDQorDQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvaW5jL3NpMzIxOHhfaW50Zi5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvaW5jL3NpMzIxOHhfaW50Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmOWIwNTcKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9pbmMvc2kzMjE4eF9pbnRmLmgKQEAgLTAsMCArMSw0NzkgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovDQorLyoNCisgKiBTaTMyMTh4IFByb1NMSUMgaW50ZXJmYWNlIGhlYWRlciBmaWxlDQorICoNCisgKiBEaXN0cmlidXRlZCBieToNCisgKiBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jDQorICoNCisgKiBUaGlzIGZpbGUgY29udGFpbnMgcHJvcHJpZXRhcnkgaW5mb3JtYXRpb24uDQorICogTm8gZGlzc2VtaW5hdGlvbiBhbGxvd2VkIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20NCisgKiBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLg0KKyAqDQorICogRmlsZSBEZXNjcmlwdGlvbjoNCisgKiBUaGlzIGlzIHRoZSBoZWFkZXIgZmlsZSBmb3IgdGhlIFByb1NMSUMgZHJpdmVyLg0KKyAqDQorICoNCisgKi8NCisNCisjaWZuZGVmIFNJMzIxOFhfSU5URl9IDQorI2RlZmluZSBTSTMyMThYX0lOVEZfSA0KKyNpbmNsdWRlICJzaTMyMTh4LmgiDQorDQorLyogVGhlIGZvbGxvd2luZyBtYWNyb3MgYXJlIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovDQorI2RlZmluZSBTaTMyMTh4X0xvYWRQYXRjaCAgICAgICAgICAgICAgICAgICAgUHJvU0xJQ19Mb2FkUGF0Y2gNCisjZGVmaW5lIFNpMzIxOHhfUmVhZEhvb2tTdGF0dXMgICAgICAgICAgICAgICBQcm9TTElDX1JlYWRIb29rU3RhdHVzDQorI2RlZmluZSBTaTMyMTh4X0RDRmVlZFNldHVwKFBDSEFOLCBORFgpICAgICAgU2kzMjE4eF9EQ0ZlZWRTZXR1cENmZygoUENIQU4pLFNpMzIxOHhfRENmZWVkX1ByZXNldHMsIChORFgpKQ0KKyNkZWZpbmUgU2kzMjE4eF9WZXJpZnlQYXRjaAkJICAgICAgICAgICAgIFByb1NMSUNfVmVyaWZ5UGF0Y2gNCisjZGVmaW5lIFNpMzIxOHhfU2V0UG93ZXJzYXZlTW9kZSAgICAgICAgICAgICBQcm9TTElDX1NldFBvd2Vyc2F2ZU1vZGUNCisjZGVmaW5lIFNpMzIxOHhfSW5pdChQQ0hBTiwgU1opICAgICAgICAgICAgICBTaTMyMTh4X0luaXRfd2l0aF9PcHRpb25zKChQQ0hBTiksIChTWiksIElOSVRfTk9fT1BUKQ0KKyNkZWZpbmUgU2kzMjE4eF9Mb2FkUmVnVGFibGVzICAgICAgICAgICAgICAgIFByb1NMSUNfTG9hZFJlZ1RhYmxlcw0KKyNkZWZpbmUgU2kzMjE4eF9WZXJpZnlDb250cm9sSW50ZXJmYWNlICAgICAgIFByb1NMSUNfVmVmaWZ5Q29udHJvbEludGVyZmFjZQ0KKyNkZWZpbmUgU2kzMjE4eF9TaHV0ZG93bkNoYW5uZWwgICAgICAgICAgICAgIFByb1NMSUNfUG93ZXJEb3duQ29udmVydGVyDQorI2RlZmluZSBTaTMyMTh4X1Bvd2VyRG93bkNvbnZlcnRlciAgICAgICAgICAgUHJvU0xJQ19Qb3dlckRvd25Db252ZXJ0ZXINCisjZGVmaW5lIFNpMzIxOHhfQ2FsaWJyYXRlICAgICAgICAgICAgICAgICAgICBQcm9TTElDX0NhbGlicmF0ZQ0KKyNkZWZpbmUgU2kzMjE4eF9TZXRMaW5lZmVlZFN0YXR1c0Jyb2FkY2FzdCAgIFByb1NMSUNfU2V0TGluZWZlZWRTdGF0dXNCcm9hZGNhc3QNCisjZGVmaW5lIFNpMzIxOHhfU2V0TGluZWZlZWRTdGF0dXMgICAgICAgICAgICBQcm9TTElDX1NldExpbmVmZWVkU3RhdHVzDQorI2RlZmluZSBTaTMyMTh4X01XSUVuYWJsZSAgICAgICAgICAgICAgICAgICAgUHJvU0xJQ19NV0lFbmFibGUNCisjZGVmaW5lIFNpMzIxOHhfTVdJRGlzYWJsZSAgICAgICAgICAgICAgICAgICBQcm9TTElDX01XSURpc2FibGUNCisjZGVmaW5lIFNpMzIxOHhfU2V0TVdJU3RhdGUgICAgICAgICAgICAgICAgICBQcm9TTElDX1NldE1XSVN0YXRlDQorI2RlZmluZSBTaTMyMTh4X0dldE1XSVN0YXRlICAgICAgICAgICAgICAgICAgUHJvU0xJQ19HZXRNV0lTdGF0ZQ0KKyNkZWZpbmUgU2kzMjE4eF9NV0lTZXR1cChQQ0hBTixWUEssTENSKSAgICAgIFByb1NMSUNfTVdJU2V0VihQQ0hBTixWUEspDQorDQorLyogREMgRmVlZCAqLw0KKyNpZm5kZWYgRElTQUJMRV9EQ0ZFRURfU0VUVVANCitleHRlcm4gU2kzMjE4eF9EQ2ZlZWRfQ2ZnIFNpMzIxOHhfRENmZWVkX1ByZXNldHNbXTsNCisjZW5kaWYNCisNCisvKg0KKyoqDQorKiogUFJPU0xJQyBJTklUSUFMSVpBVElPTiBGVU5DVElPTlMNCisqKg0KKyovDQorDQorLyoNCisqKiBGdW5jdGlvbjogUFJPU0xJQ19Jbml0X011bHRpQk9NDQorKioNCisqKiBEZXNjcmlwdGlvbjoNCisqKiBJbml0aWFsaXplcyB0aGUgUHJvU0xJQyB3LyBzZWxlY3RlZCBnZW5lcmFsIHBhcmFtZXRlcnMNCisqKg0KKyoqIElucHV0IFBhcmFtZXRlcnM6DQorKiogcFByb3NsaWM6IHBvaW50ZXIgdG8gUFJPU0xJQyBvYmplY3QNCisqKiBzaXplOiAgICAgbnVtYmVyIG9mIGNoYW5uZWxzDQorKiogcHJlc2V0OiAgIEdlbmVyYWwgY29uZmlndXJhdGlvbiBwcmVzZXQNCisqKg0KKyoqIFJldHVybjoNCisqKiBub25lDQorKi8NCisjaWZkZWYgU0lWT0lDRV9NVUxUSV9CT01fU1VQUE9SVA0KK2ludCBTaTMyMTh4X0luaXRfTXVsdGlCT00gKHByb3NsaWNDaGFuVHlwZV9wdHIgKmhQcm9zbGljLGludCBzaXplLGludCBwcmVzZXQpOw0KKyNlbmRpZg0KKw0KKy8qDQorKiogRnVuY3Rpb246IFNpMzIxOHhfSW5pdF93aXRoX09wdGlvbnMNCisqKg0KKyoqIERlc2NyaXB0aW9uOg0KKyoqIEluaXRpYWxpemVzIHRoZSBQcm9TTElDIHdpdGggYW4gb3B0aW9uLg0KKyoqDQorKiogSW5wdXQgUGFyYW1ldGVyczoNCisqKiBwUHJvc2xpYzogcG9pbnRlciB0byBQUk9TTElDIG9iamVjdA0KKyoqIHNpemUgLSBudW1iZXIgb2YgY29udGludW91cyBjaGFubmVscyB0byBpbml0aWFsaXplDQorKiogaW5pdF9vcHQgLSB3aGljaCBpbml0aWFsaXphdGlvbiB0eXBlIHRvIGRvLg0KKyoqDQorKiogUmV0dXJuOg0KKyoqIG5vbmUNCisqLw0KK2ludCBTaTMyMTh4X0luaXRfd2l0aF9PcHRpb25zIChwcm9zbGljQ2hhblR5cGVfcHRyICpwUHJvc2xpYywgaW50IHNpemUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRPcHRpb25zVHlwZSBpbml0X29wdCk7DQorDQorLyoNCisqKiBGdW5jdGlvbjogUFJPU0xJQ19WZXJpZnlDb250cm9sSW50ZXJmYWNlDQorKioNCisqKiBEZXNjcmlwdGlvbjoNCisqKiBWZXJpZnkgU1BJIHBvcnQgcmVhZCBjYXBhYmlsaXRpZXMNCisqKg0KKyoqIElucHV0IFBhcmFtZXRlcnM6DQorKiogcFByb3NsaWM6IHBvaW50ZXIgdG8gUFJPU0xJQyBvYmplY3QNCisqKg0KKyoqIFJldHVybjoNCisqKiBub25lDQorKi8NCitpbnQgU2kzMjE4eF9WZXJpZnlDb250cm9sSW50ZXJmYWNlIChwcm9zbGljQ2hhblR5cGVfcHRyIGhQcm9zbGljKTsNCisNCisvKg0KKyoqIEZ1bmN0aW9uOiBTaTMyMTh4X1Bvd2VyVXBDb252ZXJ0ZXINCisqKg0KKyoqIERlc2NyaXB0aW9uOg0KKyoqIFBvd2VycyBhbGwgREMvREMgY29udmVydGVycyBzZXF1ZW50aWFsbHkgd2l0aCBkZWxheSB0byBtaW5pbWl6ZQ0KKyoqIHBlYWsgcG93ZXIgZHJhdyBvbiBWREMuDQorKioNCisqKiBSZXR1cm5zOg0KKyoqIGludCAoZXJyb3IpDQorKioNCisqLw0KK2ludCBTaTMyMTh4X1Bvd2VyVXBDb252ZXJ0ZXIocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYyk7DQorDQorLyoNCisqKiBGdW5jdGlvbjogU2kzMjE4eF9Qb3dlckRvd25Db252ZXJ0ZXINCisqKg0KKyoqIERlc2NyaXB0aW9uOg0KKyoqIFBvd2VyIGRvd24gRENEQyBjb252ZXJ0ZXIgKHNlbGVjdGVkIGNoYW5uZWwgb25seSkNCisqKg0KKyoqIFJldHVybnM6DQorKiogaW50IChlcnJvcikNCisqKg0KKyovDQoraW50IFNpMzIxOHhfUG93ZXJEb3duQ29udmVydGVyKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMpOw0KKw0KKy8qDQorKiogRnVuY3Rpb246IFBST1NMSUNfRW5hYmxlSW50ZXJydXB0cw0KKyoqDQorKiogRGVzY3JpcHRpb246DQorKiogRW5hYmxlcyBpbnRlcnJ1cHRzDQorKioNCisqKiBJbnB1dCBQYXJhbWV0ZXJzOg0KKyoqIGhQcm9zbGljOiBwb2ludGVyIHRvIFByb3NsaWMgb2JqZWN0DQorKioNCisqKiBSZXR1cm46DQorKioNCisqLw0KK2ludCBTaTMyMTh4X0VuYWJsZUludGVycnVwdHMgKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMpOw0KKw0KKy8qDQorKioNCisqKiBQUk9TTElDIENPTkZJR1VSQVRJT04gRlVOQ1RJT05TDQorKioNCisqLw0KKw0KKy8qDQorKiogRnVuY3Rpb246IFBST1NMSUNfUmluZ1NldHVwDQorKioNCisqKiBEZXNjcmlwdGlvbjoNCisqKiBjb25maWd1cmUgcmluZ2luZw0KKyoqDQorKiogSW5wdXQgUGFyYW1ldGVyczoNCisqKiBwUHJvc2xpYzogcG9pbnRlciB0byBQcm9zbGljIG9iamVjdA0KKyoqIHBSaW5nU2V0dXA6IHBvaW50ZXIgdG8gcmluZ2luZyBjb25maWcgc3RydWN0dXJlDQorKioNCisqKiBSZXR1cm46DQorKiogbm9uZQ0KKyovDQoraW50IFNpMzIxOHhfUmluZ1NldHVwIChwcm9zbGljQ2hhblR5cGUgKnBQcm9zbGljLCBpbnQgcHJlc2V0KTsNCisNCisvKg0KKyoqIEZ1bmN0aW9uOiBQUk9TTElDX1pzeW50aFNldHVwDQorKioNCisqKiBEZXNjcmlwdGlvbjoNCisqKiBjb25maWd1cmUgaW1wZWRhbmNlIHN5bnRoZXNpcw0KKyoqDQorKiogSW5wdXQgUGFyYW1ldGVyczoNCisqKiBwUHJvc2xpYzogcG9pbnRlciB0byBQcm9zbGljIG9iamVjdA0KKyoqIHBaeW50aDogcG9pbnRlciB0byB6c3ludGggY29uZmlnIHN0cnVjdHVyZQ0KKyoqDQorKiogUmV0dXJuOg0KKyoqIG5vbmUNCisqLw0KK2ludCBTaTMyMTh4X1pzeW50aFNldHVwIChwcm9zbGljQ2hhblR5cGUgKnBQcm9zbGljLCBpbnQgcHJlc2V0KTsNCisNCisvKg0KKyoqIEZ1bmN0aW9uOiBQUk9TTElDX0F1ZGlvR2FpblNldHVwDQorKioNCisqKiBEZXNjcmlwdGlvbjoNCisqKiBjb25maWd1cmUgYXVkaW8gZ2FpbnMNCisqKg0KKyoqIElucHV0IFBhcmFtZXRlcnM6DQorKiogcFByb3NsaWM6IHBvaW50ZXIgdG8gUHJvc2xpYyBvYmplY3QNCisqKiBwcmVzZXQ6ICAgaW1wZWRhbmNlIHByZXNldCB0byBzY2FsZQ0KKyoqDQorKiogUmV0dXJuOg0KKyoqIG5vbmUNCisqLw0KK2ludCBTaTMyMTh4X1RYQXVkaW9HYWluU2V0dXAgKHByb3NsaWNDaGFuVHlwZSAqcFByb3NsaWMsIGludCBwcmVzZXQpOw0KK2ludCBTaTMyMTh4X1JYQXVkaW9HYWluU2V0dXAgKHByb3NsaWNDaGFuVHlwZSAqcFByb3NsaWMsIGludCBwcmVzZXQpOw0KKyNkZWZpbmUgU2kzMjE4eF9BdWRpb0dhaW5TZXR1cCBQcm9TTElDX0F1ZGlvR2FpblNldHVwDQorDQorLyoNCisqKiBGdW5jdGlvbjogUFJPU0xJQ19UWEF1ZGlvR2FpblNjYWxlDQorKioNCisqKiBEZXNjcmlwdGlvbjoNCisqKiBjb25maWd1cmUgYXVkaW8gZ2FpbnMNCisqKg0KKyoqIElucHV0IFBhcmFtZXRlcnM6DQorKiogcFByb3NsaWM6ICBwb2ludGVyIHRvIFByb3NsaWMgb2JqZWN0DQorKiogcHJlc2V0OiAgICBwb2ludGVyIHRvIGF1ZGlvIGdhaW5zIGNvbmZpZyBzdHJ1Y3R1cmUNCisqKiBwZ2Ffc2NhbGU6IHBnYV9zY2FsaW5nIGNvbnN0YW50DQorKiogZXFfc2NhbGU6ICBlcXVhbGl6ZXIgc2NhbGluZyBjb25zdGFudA0KKyoqDQorKiogUmV0dXJuOg0KKyoqIG5vbmUNCisqLw0KK2ludCBTaTMyMTh4X1RYQXVkaW9HYWluU2NhbGUgKHByb3NsaWNDaGFuVHlwZSAqcFByb3NsaWMsIGludCBwcmVzZXQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUludDMyIHBnYV9zY2FsZSwgdUludDMyIGVxX3NjYWxlKTsNCisNCisvKg0KKyoqIEZ1bmN0aW9uOiBQUk9TTElDX1JYQXVkaW9HYWluU2NhbGUNCisqKg0KKyoqIERlc2NyaXB0aW9uOg0KKyoqIGNvbmZpZ3VyZSBhdWRpbyBnYWlucw0KKyoqDQorKiogSW5wdXQgUGFyYW1ldGVyczoNCisqKiBwUHJvc2xpYzogIHBvaW50ZXIgdG8gUHJvc2xpYyBvYmplY3QNCisqKiBwcmVzZXQ6ICAgIHBvaW50ZXIgdG8gYXVkaW8gZ2FpbnMgY29uZmlnIHN0cnVjdHVyZQ0KKyoqIHBnYV9zY2FsZTogcGdhX3NjYWxpbmcgY29uc3RhbnQNCisqKiBlcV9zY2FsZTogIGVxdWFsaXplciBzY2FsaW5nIGNvbnN0YW50DQorKioNCisqKiBSZXR1cm46DQorKiogbm9uZQ0KKyovDQoraW50IFNpMzIxOHhfUlhBdWRpb0dhaW5TY2FsZSAocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYywgaW50IHByZXNldCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1SW50MzIgcGdhX3NjYWxlLCB1SW50MzIgZXFfc2NhbGUpOw0KKw0KKy8qDQorKiogRnVuY3Rpb246IFBST1NMSUNfQXVkaW9FUVNldHVwDQorKioNCisqKiBEZXNjcmlwdGlvbjoNCisqKiBjb25maWd1cmUgYXVkaW8gZXF1YWxpemVycw0KKyoqDQorKiogSW5wdXQgUGFyYW1ldGVyczoNCisqKiBwUHJvc2xpYzogcG9pbnRlciB0byBQcm9zbGljIG9iamVjdA0KKyoqIHBBdWRpb0VROiBwb2ludGVyIHRvIHJpbmdpbmcgY29uZmlnIHN0cnVjdHVyZQ0KKyoqDQorKiogUmV0dXJuOg0KKyoqIG5vbmUNCisqLw0KK2ludCBTaTMyMTh4X0F1ZGlvRVFTZXR1cCAocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYywgaW50IHByZXNldCk7DQorDQorLyoNCisqKiBGdW5jdGlvbjogUFJPU0xJQ19EQ0ZlZWRTZXR1cA0KKyoqDQorKiogRGVzY3JpcHRpb246DQorKiogY29uZmlndXJlIGRjIGZlZWQNCisqKg0KKyoqIElucHV0IFBhcmFtZXRlcnM6DQorKiogcFByb3NsaWM6IHBvaW50ZXIgdG8gUHJvc2xpYyBvYmplY3QNCisqKiBwRGNGZWVkOiBwb2ludGVyIHRvIGRjIGZlZWQgY29uZmlnIHN0cnVjdHVyZQ0KKyoqDQorKiogUmV0dXJuOg0KKyoqIG5vbmUNCisqLw0KK2ludCBTaTMyMTh4X0RDRmVlZFNldHVwQ2ZnIChwcm9zbGljQ2hhblR5cGUgKnBQcm9zbGljLCBQcm9TTElDX0RDZmVlZF9DZmcgKmNmZywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByZXNldCk7DQorDQorLyoNCisqKiBGdW5jdGlvbjogUFJPU0xJQ19QQ01TZXR1cA0KKyoqDQorKiogRGVzY3JpcHRpb246DQorKiogY29uZmlndXJlIHBjbQ0KKyoqDQorKiogSW5wdXQgUGFyYW1ldGVyczoNCisqKiBwUHJvc2xpYzogcG9pbnRlciB0byBQcm9zbGljIG9iamVjdA0KKyoqIHBQY206IHBvaW50ZXIgdG8gcGNtIGNvbmZpZyBzdHJ1Y3R1cmUNCisqKg0KKyoqIFJldHVybjoNCisqKiBub25lDQorKi8NCitpbnQgU2kzMjE4eF9QQ01TZXR1cChwcm9zbGljQ2hhblR5cGUgKnBQcm9zbGljLCBpbnQgcHJlc2V0KTsNCisNCisvKg0KKyoqDQorKiogUFJPU0xJQyBDT05UUk9MIEZVTkNUSU9OUw0KKyoqDQorKi8NCisNCisvKg0KKyoqIEZ1bmN0aW9uOiBQUk9TTElDX0dldEludGVycnVwdHMNCisqKg0KKyoqIERlc2NyaXB0aW9uOg0KKyoqIEVuYWJsZXMgaW50ZXJydXB0cw0KKyoqDQorKiogSW5wdXQgUGFyYW1ldGVyczoNCisqKiBoUHJvc2xpYzogcG9pbnRlciB0byBQcm9zbGljIG9iamVjdA0KKyoqIHBJbnREYXRhOiBwb2ludGVyIHRvIGludGVycnVwdCBpbmZvIHJldHJpZXZlZA0KKyoqDQorKiogUmV0dXJuOg0KKyoqDQorKi8NCitpbnQgU2kzMjE4eF9HZXRJbnRlcnJ1cHRzIChwcm9zbGljQ2hhblR5cGVfcHRyIGhQcm9zbGljLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3NsaWNJbnRUeXBlICpwSW50RGF0YSk7DQorDQorLyoNCisqKiBGdW5jdGlvbjogUFJPU0xJQ19QdWxzZU1ldGVyU2V0dXANCisqKg0KKyoqIERlc2NyaXB0aW9uOg0KKyoqIGNvbmZpZ3VyZSBwdWxzZSBtZXRlcmluZw0KKyoqDQorKiogSW5wdXQgUGFyYW1ldGVyczoNCisqKiBwUHJvc2xpYzogcG9pbnRlciB0byBQcm9zbGljIG9iamVjdA0KKyoqIHBQdWxzZUNmZzogcG9pbnRlciB0byBwdWxzZSBtZXRlcmluZyBjb25maWcgc3RydWN0dXJlDQorKioNCisqKiBSZXR1cm46DQorKiogbm9uZQ0KKyovDQoraW50IFNpMzIxOHhfUHVsc2VNZXRlclNldHVwIChwcm9zbGljQ2hhblR5cGUgKnBQcm9zbGljLCBpbnQgcHJlc2V0KTsNCisNCisvKg0KKyoqIEZ1bmN0aW9uOiBQUk9TTElDX2RiZ1NldERDRmVlZA0KKyoqDQorKiogRGVzY3JpcHRpb246DQorKiogcHJvdmlzaW9uIGZ1bmN0aW9uIGZvciBzZXR0aW5nIHVwDQorKiogZGNmZWVkIGdpdmVuIGRlc2lyZWQgb3BlbiBjaXJjdWl0IHZvbHRhZ2UNCisqKiBhbmQgbG9vcCBjdXJyZW50Lg0KKyovDQoraW50IFNpMzIxOHhfZGJnU2V0RENGZWVkIChwcm9zbGljQ2hhblR5cGUgKnBQcm9zbGljLCB1SW50MzIgdl92bGltX3ZhbCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVJbnQzMiBpX2lsaW1fdmFsLCBpbnQzMiBwcmVzZXQpOw0KKw0KKy8qDQorKiogRnVuY3Rpb246IFBST1NMSUNfZGJnU2V0RENGZWVkVm9wZW4NCisqKg0KKyoqIERlc2NyaXB0aW9uOg0KKyoqIHByb3Zpc2lvbiBmdW5jdGlvbiBmb3Igc2V0dGluZyB1cA0KKyoqIGRjZmVlZCBnaXZlbiBkZXNpcmVkIG9wZW4gY2lyY3VpdCB2b2x0YWdlDQorKiogYW5kIGxvb3AgY3VycmVudC4NCisqLw0KK2ludCBTaTMyMTh4X2RiZ1NldERDRmVlZFZvcGVuIChwcm9zbGljQ2hhblR5cGUgKnBQcm9zbGljLCB1SW50MzIgdl92bGltX3ZhbCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzIgcHJlc2V0KTsNCisNCisNCisvKg0KKyoqIEZ1bmN0aW9uOiBQUk9TTElDX2RiZ1NldERDRmVlZElsb29wDQorKioNCisqKiBEZXNjcmlwdGlvbjoNCisqKiBwcm92aXNpb24gZnVuY3Rpb24gZm9yIHNldHRpbmcgdXANCisqKiBkY2ZlZWQgZ2l2ZW4gZGVzaXJlZCBvcGVuIGNpcmN1aXQgdm9sdGFnZQ0KKyoqIGFuZCBsb29wIGN1cnJlbnQuDQorKi8NCitpbnQgU2kzMjE4eF9kYmdTZXREQ0ZlZWRJbG9vcCAocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYywgdUludDMyIGlfaWxpbV92YWwsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyIHByZXNldCk7DQorDQorDQorLyoNCisqKiBGdW5jdGlvbjogUFJPU0xJQ19kYmdSaW5naW5nU2V0dXANCisqKg0KKyoqIERlc2NyaXB0aW9uOg0KKyoqIFByb3Zpc2lvbiBmdW5jdGlvbiBmb3Igc2V0dGluZyB1cA0KKyoqIFJpbmcgdHlwZSwgZnJlcXVlbmN5LCBhbXBsaXR1ZGUgYW5kIGRjIG9mZnNldC4NCisqKiBNYWluIHVzZSB3aWxsIGJlIGJ5IHBlZWsvcG9rZSBhcHBsaWNhdGlvbnMuDQorKi8NCitpbnQgU2kzMjE4eF9kYmdTZXRSaW5naW5nIChwcm9zbGljQ2hhblR5cGUgKnBQcm9zbGljLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb1NMSUNfZGJnUmluZ0NmZyAqcmluZ0NmZywgaW50IHByZXNldCk7DQorDQorLyoNCisqKiBGdW5jdGlvbjogUFJPU0xJQ19kYmdTZXRSWEdhaW4NCisqKg0KKyoqIERlc2NyaXB0aW9uOg0KKyoqIFByb3Zpc2lvbiBmdW5jdGlvbiBmb3Igc2V0dGluZyB1cA0KKyoqIFJYIHBhdGggZ2Fpbi4NCisqLw0KK2ludCBTaTMyMTh4X2RiZ1NldFJYR2FpbiAocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYywgaW50MzIgZ2FpbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbXBlZGFuY2VfcHJlc2V0LCBpbnQgYXVkaW9fZ2Fpbl9wcmVzZXQpOw0KKw0KKy8qDQorKiogRnVuY3Rpb246IFBST1NMSUNfZGJnU2V0VFhHYWluDQorKioNCisqKiBEZXNjcmlwdGlvbjoNCisqKiBQcm92aXNpb24gZnVuY3Rpb24gZm9yIHNldHRpbmcgdXANCisqKiBUWCBwYXRoIGdhaW4uDQorKi8NCitpbnQgU2kzMjE4eF9kYmdTZXRUWEdhaW4gKHByb3NsaWNDaGFuVHlwZSAqcFByb3NsaWMsIGludDMyIGdhaW4sDQorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW1wZWRhbmNlX3ByZXNldCwgaW50IGF1ZGlvX2dhaW5fcHJlc2V0KTsNCisNCisNCisvKg0KKyoqIEZ1bmN0aW9uOiBQUk9TTElDX0xpbmVNb25pdG9yDQorKioNCisqKiBEZXNjcmlwdGlvbjoNCisqKiBNb25pdG9yIGxpbmUgdm9sdGFnZXMgYW5kIGN1cnJlbnRzDQorKi8NCitpbnQgU2kzMjE4eF9MaW5lTW9uaXRvcihwcm9zbGljQ2hhblR5cGUgKnBQcm9zbGljLCBwcm9zbGljTW9uaXRvclR5cGUgKm1vbml0b3IpOw0KKw0KKw0KKy8qDQorKiogRnVuY3Rpb246IFBST1NMSUNfUFNUTkNoZWNrDQorKioNCisqKiBEZXNjcmlwdGlvbjoNCisqKiBDb250aW51b3VzIG1vbml0b3Igb2YgaWxvbmcgdG8gZGV0ZWN0IGhvdCBwc3RuIGxpbmUNCisqLw0KK2ludCBTaTMyMTh4X1BTVE5DaGVjayhwcm9zbGljQ2hhblR5cGUgKnBQcm9zbGljLA0KKyAgICAgICAgICAgICAgICAgICAgICBwcm9zbGljUFNUTkNoZWNrT2JqVHlwZSAqcHN0bkNoZWNrT2JqKTsNCisNCisNCisvKg0KKyoqIEZ1bmN0aW9uOiBQUk9TTElDX1BTVE5DaGVjaw0KKyoqDQorKiogRGVzY3JpcHRpb246DQorKiogQ29udGludW91cyBtb25pdG9yIG9mIGlsb25nIHRvIGRldGVjdCBob3QgcHN0biBsaW5lDQorKi8NCitpbnQgU2kzMjE4eF9EaWZmUFNUTkNoZWNrKHByb3NsaWNDaGFuVHlwZSAqcFByb3NsaWMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9zbGljRGlmZlBTVE5DaGVja09ialR5cGUgKnBzdG5DaGVja09iaik7DQorDQorLyoNCisqKiBGdW5jdGlvbjogUFJPU0xJQ19SZWFkTUFEQ1NjYWxlZA0KKyoqDQorKiogRGVzY3JpcHRpb246DQorKiogUmVhZCBNQURDIChvciBvdGhlciBzZW5zZWQgdm9sdGFnZXMvY3VycmVudHMpIGFuZA0KKyoqIHJldHVybiBzY2FsZWQgdmFsdWUgaW4gaW50MzIgZm9ybWF0DQorKi8NCitpbnQzMiBTaTMyMTh4X1JlYWRNQURDU2NhbGVkKHByb3NsaWNDaGFuVHlwZV9wdHIgcFByb3NsaWMsIHVJbnQxNiBhZGRyLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzIgc2NhbGUpOw0KKw0KKy8qDQorKiogRnVuY3Rpb246IFNpMzIxOHhfR2VuUGFyYW1VcGRhdGUNCisqKg0KKyoqIERlc2NyaXB0aW9uOg0KKyoqIFVwZGF0ZSBTaTMyMTh4IGdlbmVyYWwgcGFyYW1ldGVycyBhbmQgb3RoZXIgcmVxdWlyZWQgbW9kaWZpY2F0aW9ucw0KKyoqIHRvIGRlZmF1bHQgcmVnL3JhbSB2YWx1ZXMNCisqKg0KKyoqIFJldHVybnM6DQorKiogaW50IChlcnJvcikNCisqKg0KKyovDQoraW50IFNpMzIxOHhfR2VuUGFyYW1VcGRhdGUocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYyxpbml0U2VxVHlwZSBzZXEpOw0KKw0KKw0KKy8qDQorKiogRnVuY3Rpb246IFNpMzIxOHhfU2VsZWN0UGF0Y2gNCisqKg0KKyoqIERlc2NyaXB0aW9uOg0KKyoqIFNlbGVjdCBhcHByb3ByaWF0ZSBwYXRjaCBiYXNlZCBvbiBnZW5lcmFsIHBhcmFtZXRlcnMNCisqKg0KKyoqIFJldHVybnM6DQorKiogaW50IChlcnJvcikNCisqKg0KKyovDQoraW50IFNpMzIxOHhfU2VsZWN0UGF0Y2gocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYywNCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9zbGljUGF0Y2ggKipwYXRjaCk7DQorDQorLyoNCisqKiBGdW5jdGlvbjogU2kzMjE4eF9Db252ZXJ0ZXJTZXR1cA0KKyoqDQorKiogRGVzY3JpcHRpb246DQorKiogUHJvZ3JhbSByZXZpc2lvbiBzcGVjaWZpYyBzZXR0aW5ncyBiZWZvcmUgcG93ZXJpbmcgY29udmVydGVyDQorKioNCisqKiBTcGVjaWZpY2FsbHksIGZyb20gZ2VuZXJhbCBwYXJhbWV0ZXJzIGFuZCBrbm93bGVkZ2UgdGhhdCB0aGlzDQorKiogaXMgUmV2IEMsIHNldHVwIGRjZmYgZHJpdmUsIGdhdGUgZHJpdmUgcG9sYXJpdHksIGFuZCBjaGFyZ2UgcHVtcC4NCisqKg0KKyoqIFJldHVybnM6DQorKiogaW50IChlcnJvcikNCisqKg0KKyovDQoraW50IFNpMzIxOHhfQ29udmVydGVyU2V0dXAocHJvc2xpY0NoYW5UeXBlX3B0ciBwUHJvc2xpYyk7DQorDQorLyoNCisqKiBGdW5jdGlvbjogU2kzMjE4eDhfUHVsc2VNZXRlclNldHVwDQorKioNCisqKiBEZXNjcmlwdGlvbjoNCisqKiBjb25maWd1cmUgcHVsc2UgbWV0ZXJpbmcNCisqLw0KK2ludCBTaTMyMTh4X1B1bHNlTWV0ZXJTZXR1cCAocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYywgaW50IHByZXNldCk7DQorDQorDQorLyogDQorKiogRnVuY3Rpb246IFNpMzIxOHhfR2V0Q2hpcEluZm8NCisqKiBEZXNjcmlwdGlvbjogUmV0dXJucyB0aGUgc3BlY2lmaWMgY2hpcHNldCBpbiB0aGUgU2kzMjE4eCBmYW1pbHkuDQorKiogSW5wdXQgcGFyYW1ldGVyczogY2hhbm5lbCBwb2ludGVyDQorKiogb3V0cHV0OiBlaXRoZXIgUkNfU1BJX0ZBSUwgb3IgUkNfTk9ORS4gIGNoYW5uZWwgcG9pbnRlciBkZXZpY2VJZCB3aWxsIGJlIHVwZGF0ZWQuDQorKiovDQoraW50IFNpMzIxOHhfR2V0Q2hpcEluZm8ocHJvc2xpY0NoYW5UeXBlX3B0ciBwUHJvc2xpYyk7DQorDQorDQorI2VuZGlmDQorDQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvaW5jL3NpMzIxOHhfcmVnaXN0ZXJzLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9pbmMvc2kzMjE4eF9yZWdpc3RlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODEyODAzCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvaW5jL3NpMzIxOHhfcmVnaXN0ZXJzLmgKQEAgLTAsMCArMSwxNTE4IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KKy8qDQorICogRGlzdHJpYnV0ZWQgYnk6DQorICogU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYw0KKyAqDQorICogVGhpcyBmaWxlIGNvbnRhaW5zIHByb3ByaWV0YXJ5IGluZm9ybWF0aW9uLg0KKyAqIE5vIGRpc3NlbWluYXRpb24gYWxsb3dlZCB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tDQorICogU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4NCisgKi8NCisNCisjaWZuZGVmIFNJMzIxOFhfUkVHU19IDQorI2RlZmluZSBTSTMyMThYX1JFR1NfSA0KKw0KKy8qDQorKiogU0kzMjE4WCBTUEkgUmVnaXN0ZXJzDQorKi8NCitlbnVtIFNJMzIxOFhfUkVHDQorew0KKyAgU0kzMjE4WF9SRUdfSUQgICAgICAgICAgICAgICAgICAgICAgID0gMCwNCisgIFNJMzIxOFhfUkVHX1JFU0VUICAgICAgICAgICAgICAgICAgICA9IDEsDQorICBTSTMyMThYX1JFR19NU1RSRU4gICAgICAgICAgICAgICAgICAgPSAyLA0KKyAgU0kzMjE4WF9SRUdfTVNUUlNUQVQgICAgICAgICAgICAgICAgID0gMywNCisgIFNJMzIxOFhfUkVHX1JBTVNUQVQgICAgICAgICAgICAgICAgICA9IDQsDQorICBTSTMyMThYX1JFR19SQU1fQUREUl9ISSAgICAgICAgICAgICAgPSA1LA0KKyAgU0kzMjE4WF9SRUdfUkFNX0RBVEFfQjAgICAgICAgICAgICAgID0gNiwNCisgIFNJMzIxOFhfUkVHX1JBTV9EQVRBX0IxICAgICAgICAgICAgICA9IDcsDQorICBTSTMyMThYX1JFR19SQU1fREFUQV9CMiAgICAgICAgICAgICAgPSA4LA0KKyAgU0kzMjE4WF9SRUdfUkFNX0RBVEFfQjMgICAgICAgICAgICAgID0gOSwNCisgIFNJMzIxOFhfUkVHX1JBTV9BRERSX0xPICAgICAgICAgICAgICA9IDEwLA0KKyAgU0kzMjE4WF9SRUdfUENNTU9ERSAgICAgICAgICAgICAgICAgID0gMTEsDQorICBTSTMyMThYX1JFR19QQ01UWExPICAgICAgICAgICAgICAgICAgPSAxMiwNCisgIFNJMzIxOFhfUkVHX1BDTVRYSEkgICAgICAgICAgICAgICAgICA9IDEzLA0KKyAgU0kzMjE4WF9SRUdfUENNUlhMTyAgICAgICAgICAgICAgICAgID0gMTQsDQorICBTSTMyMThYX1JFR19QQ01SWEhJICAgICAgICAgICAgICAgICAgPSAxNSwNCisgIFNJMzIxOFhfUkVHX0lSUSAgICAgICAgICAgICAgICAgICAgICA9IDE2LA0KKyAgU0kzMjE4WF9SRUdfSVJRMCAgICAgICAgICAgICAgICAgICAgID0gMTcsDQorICBTSTMyMThYX1JFR19JUlExICAgICAgICAgICAgICAgICAgICAgPSAxOCwNCisgIFNJMzIxOFhfUkVHX0lSUTIgICAgICAgICAgICAgICAgICAgICA9IDE5LA0KKyAgU0kzMjE4WF9SRUdfSVJRMyAgICAgICAgICAgICAgICAgICAgID0gMjAsDQorICBTSTMyMThYX1JFR19JUlE0ICAgICAgICAgICAgICAgICAgICAgPSAyMSwNCisgIFNJMzIxOFhfUkVHX0lSUUVOMSAgICAgICAgICAgICAgICAgICA9IDIyLA0KKyAgU0kzMjE4WF9SRUdfSVJRRU4yICAgICAgICAgICAgICAgICAgID0gMjMsDQorICBTSTMyMThYX1JFR19JUlFFTjMgICAgICAgICAgICAgICAgICAgPSAyNCwNCisgIFNJMzIxOFhfUkVHX0lSUUVONCAgICAgICAgICAgICAgICAgICA9IDI1LA0KKyAgU0kzMjE4WF9SRUdfQ0FMUjAgICAgICAgICAgICAgICAgICAgID0gMjYsDQorICBTSTMyMThYX1JFR19DQUxSMSAgICAgICAgICAgICAgICAgICAgPSAyNywNCisgIFNJMzIxOFhfUkVHX0NBTFIyICAgICAgICAgICAgICAgICAgICA9IDI4LA0KKyAgU0kzMjE4WF9SRUdfQ0FMUjMgICAgICAgICAgICAgICAgICAgID0gMjksDQorICBTSTMyMThYX1JFR19MSU5FRkVFRCAgICAgICAgICAgICAgICAgPSAzMCwNCisgIFNJMzIxOFhfUkVHX1BPTFJFViAgICAgICAgICAgICAgICAgICA9IDMxLA0KKyAgU0kzMjE4WF9SRUdfU1BFRURVUF9ESVMgICAgICAgICAgICAgID0gMzIsDQorICBTSTMyMThYX1JFR19TUEVFRFVQICAgICAgICAgICAgICAgICAgPSAzMywNCisgIFNJMzIxOFhfUkVHX0xDUlJUUCAgICAgICAgICAgICAgICAgICA9IDM0LA0KKyAgU0kzMjE4WF9SRUdfT0ZGTE9BRCAgICAgICAgICAgICAgICAgID0gMzUsDQorICBTSTMyMThYX1JFR19CQVRTRUxNQVAgICAgICAgICAgICAgICAgPSAzNiwNCisgIFNJMzIxOFhfUkVHX0JBVFNFTCAgICAgICAgICAgICAgICAgICA9IDM3LA0KKyAgU0kzMjE4WF9SRUdfUklOR0NPTiAgICAgICAgICAgICAgICAgID0gMzgsDQorICBTSTMyMThYX1JFR19SSU5HVEFMTyAgICAgICAgICAgICAgICAgPSAzOSwNCisgIFNJMzIxOFhfUkVHX1JJTkdUQUhJICAgICAgICAgICAgICAgICA9IDQwLA0KKyAgU0kzMjE4WF9SRUdfUklOR1RJTE8gICAgICAgICAgICAgICAgID0gNDEsDQorICBTSTMyMThYX1JFR19SSU5HVElISSAgICAgICAgICAgICAgICAgPSA0MiwNCisgIFNJMzIxOFhfUkVHX0xPT1BCQUNLICAgICAgICAgICAgICAgICA9IDQzLA0KKyAgU0kzMjE4WF9SRUdfRElHQ09OICAgICAgICAgICAgICAgICAgID0gNDQsDQorICBTSTMyMThYX1JFR19SQSAgICAgICAgICAgICAgICAgICAgICAgPSA0NSwNCisgIFNJMzIxOFhfUkVHX1pDQUxfRU4gICAgICAgICAgICAgICAgICA9IDQ2LA0KKyAgU0kzMjE4WF9SRUdfRU5IQU5DRSAgICAgICAgICAgICAgICAgID0gNDcsDQorICBTSTMyMThYX1JFR19PTU9ERSAgICAgICAgICAgICAgICAgICAgPSA0OCwNCisgIFNJMzIxOFhfUkVHX09DT04gICAgICAgICAgICAgICAgICAgICA9IDQ5LA0KKyAgU0kzMjE4WF9SRUdfTzFUQUxPICAgICAgICAgICAgICAgICAgID0gNTAsDQorICBTSTMyMThYX1JFR19PMVRBSEkgICAgICAgICAgICAgICAgICAgPSA1MSwNCisgIFNJMzIxOFhfUkVHX08xVElMTyAgICAgICAgICAgICAgICAgICA9IDUyLA0KKyAgU0kzMjE4WF9SRUdfTzFUSUhJICAgICAgICAgICAgICAgICAgID0gNTMsDQorICBTSTMyMThYX1JFR19PMlRBTE8gICAgICAgICAgICAgICAgICAgPSA1NCwNCisgIFNJMzIxOFhfUkVHX08yVEFISSAgICAgICAgICAgICAgICAgICA9IDU1LA0KKyAgU0kzMjE4WF9SRUdfTzJUSUxPICAgICAgICAgICAgICAgICAgID0gNTYsDQorICBTSTMyMThYX1JFR19PMlRJSEkgICAgICAgICAgICAgICAgICAgPSA1NywNCisgIFNJMzIxOFhfUkVHX0ZTS0RBVCAgICAgICAgICAgICAgICAgICA9IDU4LA0KKyAgU0kzMjE4WF9SRUdfRlNLREVQVEggICAgICAgICAgICAgICAgID0gNTksDQorICBTSTMyMThYX1JFR19UT05EVE1GICAgICAgICAgICAgICAgICAgPSA2MCwNCisgIFNJMzIxOFhfUkVHX1RPTkRFVCAgICAgICAgICAgICAgICAgICA9IDYxLA0KKyAgU0kzMjE4WF9SRUdfVE9ORU4gICAgICAgICAgICAgICAgICAgID0gNjIsDQorICBTSTMyMThYX1JFR19HQ0lfQ0kgICAgICAgICAgICAgICAgICAgPSA2MywNCisgIFNJMzIxOFhfUkVHX0dMT0JTVEFUMSAgICAgICAgICAgICAgICA9IDY0LA0KKyAgU0kzMjE4WF9SRUdfR0xPQlNUQVQyICAgICAgICAgICAgICAgID0gNjUsDQorICBTSTMyMThYX1JFR19VU0VSU1RBVCAgICAgICAgICAgICAgICAgPSA2NiwNCisgIFNJMzIxOFhfUkVHX0dQSU9fQ0ZHMQkJCQkgICA9IDY4LA0KKyAgU0kzMjE4WF9SRUdfRElBRzEgICAgICAgICAgICAgICAgICAgID0gNzEsDQorICBTSTMyMThYX1JFR19ESUFHMiAgICAgICAgICAgICAgICAgICAgPSA3MiwNCisgIFNJMzIxOFhfUkVHX0NNX0NMQU1QICAgICAgICAgICAgICAgICA9IDczLA0KKyAgU0kzMjE4WF9SRUdfRElBRzMgICAgICAgICAgICAgICAgICAgID0gNzQsDQorICBTSTMyMThYX1JFR19QTUNPTiAgICAgICAgICAgICAgICAgICAgPSA3NSwNCisgIFNJMzIxOFhfUkVHX1BDTEtfRkFVTFRfQ05UTCAgICAgICAgICA9IDc2LA0KKyAgU0kzMjE4WF9SRUdfQVVUTyAgICAgICAgICAgICAgICAgICAgID0gODAsDQorICBTSTMyMThYX1JFR19KTVBFTiAgICAgICAgICAgICAgICAgICAgPSA4MSwNCisgIFNJMzIxOFhfUkVHX0pNUDBMTyAgICAgICAgICAgICAgICAgICA9IDgyLA0KKyAgU0kzMjE4WF9SRUdfSk1QMEhJICAgICAgICAgICAgICAgICAgID0gODMsDQorICBTSTMyMThYX1JFR19KTVAxTE8gICAgICAgICAgICAgICAgICAgPSA4NCwNCisgIFNJMzIxOFhfUkVHX0pNUDFISSAgICAgICAgICAgICAgICAgICA9IDg1LA0KKyAgU0kzMjE4WF9SRUdfSk1QMkxPICAgICAgICAgICAgICAgICAgID0gODYsDQorICBTSTMyMThYX1JFR19KTVAySEkgICAgICAgICAgICAgICAgICAgPSA4NywNCisgIFNJMzIxOFhfUkVHX0pNUDNMTyAgICAgICAgICAgICAgICAgICA9IDg4LA0KKyAgU0kzMjE4WF9SRUdfSk1QM0hJICAgICAgICAgICAgICAgICAgID0gODksDQorICBTSTMyMThYX1JFR19KTVA0TE8gICAgICAgICAgICAgICAgICAgPSA5MCwNCisgIFNJMzIxOFhfUkVHX0pNUDRISSAgICAgICAgICAgICAgICAgICA9IDkxLA0KKyAgU0kzMjE4WF9SRUdfSk1QNUxPICAgICAgICAgICAgICAgICAgID0gOTIsDQorICBTSTMyMThYX1JFR19KTVA1SEkgICAgICAgICAgICAgICAgICAgPSA5MywNCisgIFNJMzIxOFhfUkVHX0pNUDZMTyAgICAgICAgICAgICAgICAgICA9IDk0LA0KKyAgU0kzMjE4WF9SRUdfSk1QNkhJICAgICAgICAgICAgICAgICAgID0gOTUsDQorICBTSTMyMThYX1JFR19KTVA3TE8gICAgICAgICAgICAgICAgICAgPSA5NiwNCisgIFNJMzIxOFhfUkVHX0pNUDdISSAgICAgICAgICAgICAgICAgICA9IDk3LA0KKyAgU0kzMjE4WF9SRUdfUEROICAgICAgICAgICAgICAgICAgICAgID0gOTgsDQorICBTSTMyMThYX1JFR19QRE5fU1RBVCAgICAgICAgICAgICAgICAgPSA5OSwNCisgIFNJMzIxOFhfUkVHX1BETjIgICAgICAgICAgICAgICAgICAgICA9IDEwMCwNCisgIFNJMzIxOFhfUkVHX1BETjJfU1RBVCAgICAgICAgICAgICAgICA9IDEwMSwNCisgIFNJMzIxOFhfUkVHX00xX09TQ19MTyAgICAgICAgICAgICAgICA9IDExMiwNCisgIFNJMzIxOFhfUkVHX00xX09TQ19ISSAgICAgICAgICAgICAgICA9IDExMywNCisgIFNJMzIxOFhfUkVHX0JJVENOVF9MTyAgICAgICAgICAgICAgICA9IDExNCwNCisgIFNJMzIxOFhfUkVHX0JJVENOVF9ISSAgICAgICAgICAgICAgICA9IDExNSwNCisgIFNJMzIxOFhfUkVHX1BDTEtfTVVMVCAgICAgICAgICAgICAgICA9IDExNiwNCisgIFNJMzIxOFhfUkVHX1JBTV9EQVRBXzE2ICAgICAgICAgICAgICA9IDExNywNCisgIFNJMzIxOFhfUkVHX0JZUEFTU19BRERSX0xPICAgICAgICAgICA9IDExOCwNCisgIFNJMzIxOFhfUkVHX0JZUEFTU19BRERSX0hJICAgICAgICAgICA9IDExOSwNCisgIFNJMzIxOFhfUkVHX1BDX0xPICAgICAgICAgICAgICAgICAgICA9IDEyMCwNCisgIFNJMzIxOFhfUkVHX1BDX0hJICAgICAgICAgICAgICAgICAgICA9IDEyMSwNCisgIFNJMzIxOFhfUkVHX1BDX1NIQURfTE8gICAgICAgICAgICAgICA9IDEyMiwNCisgIFNJMzIxOFhfUkVHX1BDX1NIQURfSEkgICAgICAgICAgICAgICA9IDEyMywNCisgIFNJMzIxOFhfUkVHX1BBU1NfTE8gICAgICAgICAgICAgICAgICA9IDEyNCwNCisgIFNJMzIxOFhfUkVHX1BBU1NfSEkgICAgICAgICAgICAgICAgICA9IDEyNSwNCisgIFNJMzIxOFhfUkVHX1RFU1RfQ05UTCAgICAgICAgICAgICAgICA9IDEyNiwNCisgIFNJMzIxOFhfUkVHX1RFU1RfTU9ERSAgICAgICAgICAgICAgICA9IDEyNywNCit9Ow0KKw0KKy8qDQorKiogU0kzMjE4WF9SQU0NCisqLw0KK2VudW0gU0kzMjE4WF9SQU0NCit7DQorICBTSTMyMThYX1JBTV9JUk5HTkdfU0VOU0UgICAgICAgICAgICAgPSAwLA0KKyAgU0kzMjE4WF9SQU1fTUFEQ19WVElQQyAgICAgICAgICAgICAgID0gMSwNCisgIFNJMzIxOFhfUkFNX01BRENfVlJJTkdDICAgICAgICAgICAgICA9IDIsDQorICBTSTMyMThYX1JBTV9NQURDX1ZCQVQgICAgICAgICAgICAgICAgPSAzLA0KKyAgU0kzMjE4WF9SQU1fTUFEQ19WTE9ORyAgICAgICAgICAgICAgID0gNCwNCisgIFNJMzIxOFhfUkFNX1VOVVNFRDUgICAgICAgICAgICAgICAgICA9IDUsDQorICBTSTMyMThYX1JBTV9NQURDX1ZEQyAgICAgICAgICAgICAgICAgPSA2LA0KKyAgU0kzMjE4WF9SQU1fTUFEQ19JTE9ORyAgICAgICAgICAgICAgID0gNywNCisgIFNJMzIxOFhfUkFNX01BRENfSVRJUCAgICAgICAgICAgICAgICA9IDgsDQorICBTSTMyMThYX1JBTV9NQURDX0lSSU5HICAgICAgICAgICAgICAgPSA5LA0KKyAgU0kzMjE4WF9SQU1fTUFEQ19JTE9PUCAgICAgICAgICAgICAgID0gMTAsDQorICBTSTMyMThYX1JBTV9WRElGRl9TRU5TRSAgICAgICAgICAgICAgPSAxMSwNCisgIFNJMzIxOFhfUkFNX1ZUSVAgICAgICAgICAgICAgICAgICAgICA9IDEyLA0KKyAgU0kzMjE4WF9SQU1fVlJJTkcgICAgICAgICAgICAgICAgICAgID0gMTMsDQorICBTSTMyMThYX1JBTV9QX1ExX0QgICAgICAgICAgICAgICAgICAgPSAxNCwNCisgIFNJMzIxOFhfUkFNX0lOSVRfR1VFU1MgICAgICAgICAgICAgICA9IDE1LA0KKyAgU0kzMjE4WF9SQU1fWTEgICAgICAgICAgICAgICAgICAgICAgID0gMTYsDQorICBTSTMyMThYX1JBTV9ZMiAgICAgICAgICAgICAgICAgICAgICAgPSAxNywNCisgIFNJMzIxOFhfUkFNX1kzICAgICAgICAgICAgICAgICAgICAgICA9IDE4LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEMTkgICAgICAgICAgICAgICAgID0gMTksDQorICBTSTMyMThYX1JBTV9QX1ExICAgICAgICAgICAgICAgICAgICAgPSAyMCwNCisgIFNJMzIxOFhfUkFNX0RJQUdfRVgxICAgICAgICAgICAgICAgICA9IDIxLA0KKyAgU0kzMjE4WF9SQU1fRElBR19FWDIgICAgICAgICAgICAgICAgID0gMjIsDQorICBTSTMyMThYX1JBTV9ESUFHX0xQRl9NQURDICAgICAgICAgICAgPSAyMywNCisgIFNJMzIxOFhfUkFNX0RJQUdfRE1NX0kgICAgICAgICAgICAgICA9IDI0LA0KKyAgU0kzMjE4WF9SQU1fRElBR19ETU1fViAgICAgICAgICAgICAgID0gMjUsDQorICBTSTMyMThYX1JBTV9PU0MxRlJFUSAgICAgICAgICAgICAgICAgPSAyNiwNCisgIFNJMzIxOFhfUkFNX09TQzFBTVAgICAgICAgICAgICAgICAgICA9IDI3LA0KKyAgU0kzMjE4WF9SQU1fT1NDMVBIQVMgICAgICAgICAgICAgICAgID0gMjgsDQorICBTSTMyMThYX1JBTV9PU0MyRlJFUSAgICAgICAgICAgICAgICAgPSAyOSwNCisgIFNJMzIxOFhfUkFNX09TQzJBTVAgICAgICAgICAgICAgICAgICA9IDMwLA0KKyAgU0kzMjE4WF9SQU1fT1NDMlBIQVMgICAgICAgICAgICAgICAgID0gMzEsDQorICBTSTMyMThYX1JBTV9URVNUQjBfMSAgICAgICAgICAgICAgICAgPSAzMiwNCisgIFNJMzIxOFhfUkFNX1RFU1RCMV8xICAgICAgICAgICAgICAgICA9IDMzLA0KKyAgU0kzMjE4WF9SQU1fVEVTVEIyXzEgICAgICAgICAgICAgICAgID0gMzQsDQorICBTSTMyMThYX1JBTV9URVNUQTFfMSAgICAgICAgICAgICAgICAgPSAzNSwNCisgIFNJMzIxOFhfUkFNX1RFU1RBMl8xICAgICAgICAgICAgICAgICA9IDM2LA0KKyAgU0kzMjE4WF9SQU1fVEVTVEIwXzIgICAgICAgICAgICAgICAgID0gMzcsDQorICBTSTMyMThYX1JBTV9URVNUQjFfMiAgICAgICAgICAgICAgICAgPSAzOCwNCisgIFNJMzIxOFhfUkFNX1RFU1RCMl8yICAgICAgICAgICAgICAgICA9IDM5LA0KKyAgU0kzMjE4WF9SQU1fVEVTVEExXzIgICAgICAgICAgICAgICAgID0gNDAsDQorICBTSTMyMThYX1JBTV9URVNUQTJfMiAgICAgICAgICAgICAgICAgPSA0MSwNCisgIFNJMzIxOFhfUkFNX1RFU1RCMF8zICAgICAgICAgICAgICAgICA9IDQyLA0KKyAgU0kzMjE4WF9SQU1fVEVTVEIxXzMgICAgICAgICAgICAgICAgID0gNDMsDQorICBTSTMyMThYX1JBTV9URVNUQjJfMyAgICAgICAgICAgICAgICAgPSA0NCwNCisgIFNJMzIxOFhfUkFNX1RFU1RBMV8zICAgICAgICAgICAgICAgICA9IDQ1LA0KKyAgU0kzMjE4WF9SQU1fVEVTVEEyXzMgICAgICAgICAgICAgICAgID0gNDYsDQorICBTSTMyMThYX1JBTV9URVNUUEtPICAgICAgICAgICAgICAgICAgPSA0NywNCisgIFNJMzIxOFhfUkFNX1RFU1RBQk8gICAgICAgICAgICAgICAgICA9IDQ4LA0KKyAgU0kzMjE4WF9SQU1fVEVTVFdMTiAgICAgICAgICAgICAgICAgID0gNDksDQorICBTSTMyMThYX1JBTV9URVNUQVZCVyAgICAgICAgICAgICAgICAgPSA1MCwNCisgIFNJMzIxOFhfUkFNX1RFU1RQS0ZMICAgICAgICAgICAgICAgICA9IDUxLA0KKyAgU0kzMjE4WF9SQU1fVEVTVEFWRkwgICAgICAgICAgICAgICAgID0gNTIsDQorICBTSTMyMThYX1JBTV9URVNUUEtUSCAgICAgICAgICAgICAgICAgPSA1MywNCisgIFNJMzIxOFhfUkFNX1RFU1RBVlRIICAgICAgICAgICAgICAgICA9IDU0LA0KKyAgU0kzMjE4WF9SQU1fREFDX0lOX1NZTkMxICAgICAgICAgICAgID0gNTUsDQorICBTSTMyMThYX1JBTV9CWVBBU1NfUkVHICAgICAgICAgICAgICAgPSA1NiwNCisgIFNJMzIxOFhfUkFNX0xDUk1BU0tfQ05UICAgICAgICAgICAgICA9IDU3LA0KKyAgU0kzMjE4WF9SQU1fREFDX0lOX1NZTkMgICAgICAgICAgICAgID0gNTgsDQorICBTSTMyMThYX1JBTV9URU1QICAgICAgICAgICAgICAgICAgICAgPSA1OSwNCisgIFNJMzIxOFhfUkFNX1RFTVBfSVNSICAgICAgICAgICAgICAgICA9IDYwLA0KKyAgU0kzMjE4WF9SQU1fUF9RMiAgICAgICAgICAgICAgICAgICAgID0gNjEsDQorICBTSTMyMThYX1JBTV9QX1EzICAgICAgICAgICAgICAgICAgICAgPSA2MiwNCisgIFNJMzIxOFhfUkFNX1BfUTQgICAgICAgICAgICAgICAgICAgICA9IDYzLA0KKyAgU0kzMjE4WF9SQU1fUF9RNSAgICAgICAgICAgICAgICAgICAgID0gNjQsDQorICBTSTMyMThYX1JBTV9QX1E2ICAgICAgICAgICAgICAgICAgICAgPSA2NSwNCisgIFNJMzIxOFhfUkFNX0lMT09QX0ZJTFQgICAgICAgICAgICAgICA9IDY2LA0KKyAgU0kzMjE4WF9SQU1fSUxPTkdfRklMVCAgICAgICAgICAgICAgID0gNjcsDQorICBTSTMyMThYX1JBTV9WQkFUX0ZJTFQgICAgICAgICAgICAgICAgPSA2OCwNCisgIFNJMzIxOFhfUkFNX1ZESUZGX0ZJTFQgICAgICAgICAgICAgICA9IDY5LA0KKyAgU0kzMjE4WF9SQU1fVkNNX0ZJTFQgICAgICAgICAgICAgICAgID0gNzAsDQorICBTSTMyMThYX1JBTV9WQkFUX0NOVCAgICAgICAgICAgICAgICAgPSA3MSwNCisgIFNJMzIxOFhfUkFNX1ZfVkxJTV9TQ0FMRUQgICAgICAgICAgICA9IDcyLA0KKyAgU0kzMjE4WF9SQU1fVl9WTElNX1RSQUNLICAgICAgICAgICAgID0gNzMsDQorICBTSTMyMThYX1JBTV9WX1ZMSU1fTU9ERkVFRCAgICAgICAgICAgPSA3NCwNCisgIFNJMzIxOFhfUkFNX0RJQUdfUF9PVVQgICAgICAgICAgICAgICA9IDc1LA0KKyAgU0kzMjE4WF9SQU1fRElBR19DT1VOVCAgICAgICAgICAgICAgID0gNzYsDQorICBTSTMyMThYX1JBTV9ST1cwX01BRyAgICAgICAgICAgICAgICAgPSA3NywNCisgIFNJMzIxOFhfUkFNX1JPVzFfTUFHICAgICAgICAgICAgICAgICA9IDc4LA0KKyAgU0kzMjE4WF9SQU1fUk9XMl9NQUcgICAgICAgICAgICAgICAgID0gNzksDQorICBTSTMyMThYX1JBTV9ST1czX01BRyAgICAgICAgICAgICAgICAgPSA4MCwNCisgIFNJMzIxOFhfUkFNX0NPTDBfTUFHICAgICAgICAgICAgICAgICA9IDgxLA0KKyAgU0kzMjE4WF9SQU1fQ09MMV9NQUcgICAgICAgICAgICAgICAgID0gODIsDQorICBTSTMyMThYX1JBTV9DT0wyX01BRyAgICAgICAgICAgICAgICAgPSA4MywNCisgIFNJMzIxOFhfUkFNX0NPTDNfTUFHICAgICAgICAgICAgICAgICA9IDg0LA0KKyAgU0kzMjE4WF9SQU1fUk9XMF8yTkRfWTEgICAgICAgICAgICAgID0gODUsDQorICBTSTMyMThYX1JBTV9ST1cxXzJORF9ZMSAgICAgICAgICAgICAgPSA4NiwNCisgIFNJMzIxOFhfUkFNX1JPVzJfMk5EX1kxICAgICAgICAgICAgICA9IDg3LA0KKyAgU0kzMjE4WF9SQU1fUk9XM18yTkRfWTEgICAgICAgICAgICAgID0gODgsDQorICBTSTMyMThYX1JBTV9DT0wwXzJORF9ZMSAgICAgICAgICAgICAgPSA4OSwNCisgIFNJMzIxOFhfUkFNX0NPTDFfMk5EX1kxICAgICAgICAgICAgICA9IDkwLA0KKyAgU0kzMjE4WF9SQU1fQ09MMl8yTkRfWTEgICAgICAgICAgICAgID0gOTEsDQorICBTSTMyMThYX1JBTV9DT0wzXzJORF9ZMSAgICAgICAgICAgICAgPSA5MiwNCisgIFNJMzIxOFhfUkFNX1JPVzBfMk5EX1kyICAgICAgICAgICAgICA9IDkzLA0KKyAgU0kzMjE4WF9SQU1fUk9XMV8yTkRfWTIgICAgICAgICAgICAgID0gOTQsDQorICBTSTMyMThYX1JBTV9ST1cyXzJORF9ZMiAgICAgICAgICAgICAgPSA5NSwNCisgIFNJMzIxOFhfUkFNX1JPVzNfMk5EX1kyICAgICAgICAgICAgICA9IDk2LA0KKyAgU0kzMjE4WF9SQU1fQ09MMF8yTkRfWTIgICAgICAgICAgICAgID0gOTcsDQorICBTSTMyMThYX1JBTV9DT0wxXzJORF9ZMiAgICAgICAgICAgICAgPSA5OCwNCisgIFNJMzIxOFhfUkFNX0NPTDJfMk5EX1kyICAgICAgICAgICAgICA9IDk5LA0KKyAgU0kzMjE4WF9SQU1fQ09MM18yTkRfWTIgICAgICAgICAgICAgID0gMTAwLA0KKyAgU0kzMjE4WF9SQU1fRFRNRl9JTiAgICAgICAgICAgICAgICAgID0gMTAxLA0KKyAgU0kzMjE4WF9SQU1fRFRNRkRURl9EMl8xICAgICAgICAgICAgID0gMTAyLA0KKyAgU0kzMjE4WF9SQU1fRFRNRkRURl9EMV8xICAgICAgICAgICAgID0gMTAzLA0KKyAgU0kzMjE4WF9SQU1fRFRNRkRURl9PVVRfMSAgICAgICAgICAgID0gMTA0LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkRURl9EMl8yICAgICAgICAgICAgID0gMTA1LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkRURl9EMV8yICAgICAgICAgICAgID0gMTA2LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkRURl9PVVRfMiAgICAgICAgICAgID0gMTA3LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkRURl9EMl8zICAgICAgICAgICAgID0gMTA4LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkRURl9EMV8zICAgICAgICAgICAgID0gMTA5LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkRURl9PVVRfMyAgICAgICAgICAgID0gMTEwLA0KKyAgU0kzMjE4WF9SQU1fRFRNRkRURl9PVVQgICAgICAgICAgICAgID0gMTExLA0KKyAgU0kzMjE4WF9SQU1fRFRNRkxQRl9EMl8xICAgICAgICAgICAgID0gMTEyLA0KKyAgU0kzMjE4WF9SQU1fRFRNRkxQRl9EMV8xICAgICAgICAgICAgID0gMTEzLA0KKyAgU0kzMjE4WF9SQU1fRFRNRkxQRl9PVVRfMSAgICAgICAgICAgID0gMTE0LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkxQRl9EMl8yICAgICAgICAgICAgID0gMTE1LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkxQRl9EMV8yICAgICAgICAgICAgID0gMTE2LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkxQRl9PVVRfMiAgICAgICAgICAgID0gMTE3LA0KKyAgU0kzMjE4WF9SQU1fRFRNRl9ST1cgICAgICAgICAgICAgICAgID0gMTE4LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkhQRl9EMl8xICAgICAgICAgICAgID0gMTE5LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkhQRl9EMV8xICAgICAgICAgICAgID0gMTIwLA0KKyAgU0kzMjE4WF9SQU1fRFRNRkhQRl9PVVRfMSAgICAgICAgICAgID0gMTIxLA0KKyAgU0kzMjE4WF9SQU1fRFRNRkhQRl9EMl8yICAgICAgICAgICAgID0gMTIyLA0KKyAgU0kzMjE4WF9SQU1fRFRNRkhQRl9EMV8yICAgICAgICAgICAgID0gMTIzLA0KKyAgU0kzMjE4WF9SQU1fRFRNRkhQRl9PVVRfMiAgICAgICAgICAgID0gMTI0LA0KKyAgU0kzMjE4WF9SQU1fRFRNRl9DT0wgICAgICAgICAgICAgICAgID0gMTI1LA0KKyAgU0kzMjE4WF9SQU1fUk9XX1BPV0VSICAgICAgICAgICAgICAgID0gMTI2LA0KKyAgU0kzMjE4WF9SQU1fQ09MX1BPV0VSICAgICAgICAgICAgICAgID0gMTI3LA0KKyAgU0kzMjE4WF9SQU1fR1BfVElNRVIgICAgICAgICAgICAgICAgID0gMTI4LA0KKyAgU0kzMjE4WF9SQU1fU1BSX0lOVEVSUF9ESUYgICAgICAgICAgID0gMTI5LA0KKyAgU0kzMjE4WF9SQU1fU1BSX0lOVEVSUF9ESUZfT1VUICAgICAgID0gMTMwLA0KKyAgU0kzMjE4WF9SQU1fU1BSX0lOVEVSUF9JTlQgICAgICAgICAgID0gMTMxLA0KKyAgU0kzMjE4WF9SQU1fU1BSX0NOVCAgICAgICAgICAgICAgICAgID0gMTMyLA0KKyAgU0kzMjE4WF9SQU1fUk9XMF9ZMSAgICAgICAgICAgICAgICAgID0gMTMzLA0KKyAgU0kzMjE4WF9SQU1fUk9XMF9ZMiAgICAgICAgICAgICAgICAgID0gMTM0LA0KKyAgU0kzMjE4WF9SQU1fUk9XMV9ZMSAgICAgICAgICAgICAgICAgID0gMTM1LA0KKyAgU0kzMjE4WF9SQU1fUk9XMV9ZMiAgICAgICAgICAgICAgICAgID0gMTM2LA0KKyAgU0kzMjE4WF9SQU1fUk9XMl9ZMSAgICAgICAgICAgICAgICAgID0gMTM3LA0KKyAgU0kzMjE4WF9SQU1fUk9XMl9ZMiAgICAgICAgICAgICAgICAgID0gMTM4LA0KKyAgU0kzMjE4WF9SQU1fUk9XM19ZMSAgICAgICAgICAgICAgICAgID0gMTM5LA0KKyAgU0kzMjE4WF9SQU1fUk9XM19ZMiAgICAgICAgICAgICAgICAgID0gMTQwLA0KKyAgU0kzMjE4WF9SQU1fQ09MMF9ZMSAgICAgICAgICAgICAgICAgID0gMTQxLA0KKyAgU0kzMjE4WF9SQU1fQ09MMF9ZMiAgICAgICAgICAgICAgICAgID0gMTQyLA0KKyAgU0kzMjE4WF9SQU1fQ09MMV9ZMSAgICAgICAgICAgICAgICAgID0gMTQzLA0KKyAgU0kzMjE4WF9SQU1fQ09MMV9ZMiAgICAgICAgICAgICAgICAgID0gMTQ0LA0KKyAgU0kzMjE4WF9SQU1fQ09MMl9ZMSAgICAgICAgICAgICAgICAgID0gMTQ1LA0KKyAgU0kzMjE4WF9SQU1fQ09MMl9ZMiAgICAgICAgICAgICAgICAgID0gMTQ2LA0KKyAgU0kzMjE4WF9SQU1fQ09MM19ZMSAgICAgICAgICAgICAgICAgID0gMTQ3LA0KKyAgU0kzMjE4WF9SQU1fQ09MM19ZMiAgICAgICAgICAgICAgICAgID0gMTQ4LA0KKyAgU0kzMjE4WF9SQU1fUk9XTUFYX01BRyAgICAgICAgICAgICAgID0gMTQ5LA0KKyAgU0kzMjE4WF9SQU1fQ09MTUFYX01BRyAgICAgICAgICAgICAgID0gMTUwLA0KKyAgU0kzMjE4WF9SQU1fUk9XMF8yTkRfTUFHICAgICAgICAgICAgID0gMTUxLA0KKyAgU0kzMjE4WF9SQU1fQ09MMF8yTkRfTUFHICAgICAgICAgICAgID0gMTUyLA0KKyAgU0kzMjE4WF9SQU1fUk9XX1RIUiAgICAgICAgICAgICAgICAgID0gMTUzLA0KKyAgU0kzMjE4WF9SQU1fQ09MX1RIUiAgICAgICAgICAgICAgICAgID0gMTU0LA0KKyAgU0kzMjE4WF9SQU1fT1NDMV9ZICAgICAgICAgICAgICAgICAgID0gMTU1LA0KKyAgU0kzMjE4WF9SQU1fT1NDMl9ZICAgICAgICAgICAgICAgICAgID0gMTU2LA0KKyAgU0kzMjE4WF9SQU1fT1NDMV9YICAgICAgICAgICAgICAgICAgID0gMTU3LA0KKyAgU0kzMjE4WF9SQU1fT1NDMV9DT0VGRiAgICAgICAgICAgICAgID0gMTU4LA0KKyAgU0kzMjE4WF9SQU1fT1NDMl9YICAgICAgICAgICAgICAgICAgID0gMTU5LA0KKyAgU0kzMjE4WF9SQU1fT1NDMl9DT0VGRiAgICAgICAgICAgICAgID0gMTYwLA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0lJUl9EMl8xICAgICAgICAgICAgID0gMTYxLA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0lJUl9PVVRfMSAgICAgICAgICAgID0gMTYyLA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0lJUl9EMl8yICAgICAgICAgICAgID0gMTYzLA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0lJUl9EMV8yICAgICAgICAgICAgID0gMTY0LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0lJUl9PVVRfMiAgICAgICAgICAgID0gMTY1LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0lJUl9EMl8zICAgICAgICAgICAgID0gMTY2LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0lJUl9EMV8zICAgICAgICAgICAgID0gMTY3LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0lJUl9PVVQgICAgICAgICAgICAgID0gMTY4LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0lJUl9PVVRfMyAgICAgICAgICAgID0gMTY5LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0NPTUJfRDEgICAgICAgICAgICAgID0gMTcwLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0NPTUJfRDIgICAgICAgICAgICAgID0gMTcxLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0NPTUJfRDMgICAgICAgICAgICAgID0gMTcyLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ1NJTkNfT1VUICAgICAgICAgICAgID0gMTczLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0hQRl9EMV8yICAgICAgICAgICAgID0gMTc0LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0hQRl9EMl8xICAgICAgICAgICAgID0gMTc1LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0hQRl9EMl8yICAgICAgICAgICAgID0gMTc2LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0hQRl9PVVQgICAgICAgICAgICAgID0gMTc3LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0hQRl9PVVRfMSAgICAgICAgICAgID0gMTc4LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0hQRl9PVVRfMiAgICAgICAgICAgID0gMTc5LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0lJUl9EMl8xICAgICAgICAgICAgID0gMTgwLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0lJUl9PVVRfMSAgICAgICAgICAgID0gMTgxLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0lJUl9EMl8yICAgICAgICAgICAgID0gMTgyLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0lJUl9EMV8yICAgICAgICAgICAgID0gMTgzLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0lJUl9PVVRfMiAgICAgICAgICAgID0gMTg0LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0lJUl9EMl8zICAgICAgICAgICAgID0gMTg1LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0lJUl9EMV8zICAgICAgICAgICAgID0gMTg2LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0lJUl9PVVRfMyAgICAgICAgICAgID0gMTg3LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0lJUl9PVVQgICAgICAgICAgICAgID0gMTg4LA0KKyAgU0kzMjE4WF9SQU1fRUNJSVJfRDEgICAgICAgICAgICAgICAgID0gMTg5LA0KKyAgU0kzMjE4WF9SQU1fRUNJSVJfRDIgICAgICAgICAgICAgICAgID0gMTkwLA0KKyAgU0kzMjE4WF9SQU1fRUNfREVMQVkxICAgICAgICAgICAgICAgID0gMTkxLA0KKyAgU0kzMjE4WF9SQU1fRUNfREVMQVkyICAgICAgICAgICAgICAgID0gMTkyLA0KKyAgU0kzMjE4WF9SQU1fRUNfREVMQVkzICAgICAgICAgICAgICAgID0gMTkzLA0KKyAgU0kzMjE4WF9SQU1fRUNfREVMQVk0ICAgICAgICAgICAgICAgID0gMTk0LA0KKyAgU0kzMjE4WF9SQU1fRUNfREVMQVk1ICAgICAgICAgICAgICAgID0gMTk1LA0KKyAgU0kzMjE4WF9SQU1fRUNfREVMQVk2ICAgICAgICAgICAgICAgID0gMTk2LA0KKyAgU0kzMjE4WF9SQU1fRUNfREVMQVk3ICAgICAgICAgICAgICAgID0gMTk3LA0KKyAgU0kzMjE4WF9SQU1fRUNfREVMQVk4ICAgICAgICAgICAgICAgID0gMTk4LA0KKyAgU0kzMjE4WF9SQU1fRUNfREVMQVk5ICAgICAgICAgICAgICAgID0gMTk5LA0KKyAgU0kzMjE4WF9SQU1fRUNfREVMQVkxMCAgICAgICAgICAgICAgID0gMjAwLA0KKyAgU0kzMjE4WF9SQU1fRUNfREVMQVkxMSAgICAgICAgICAgICAgID0gMjAxLA0KKyAgU0kzMjE4WF9SQU1fRUNIT19FU1QgICAgICAgICAgICAgICAgID0gMjAyLA0KKyAgU0kzMjE4WF9SQU1fRUNfT1VUICAgICAgICAgICAgICAgICAgID0gMjAzLA0KKyAgU0kzMjE4WF9SQU1fVEVTVEZJTFRfT1VUXzEgICAgICAgICAgID0gMjA0LA0KKyAgU0kzMjE4WF9SQU1fVEVTVEZJTFRfRDFfMSAgICAgICAgICAgID0gMjA1LA0KKyAgU0kzMjE4WF9SQU1fVEVTVEZJTFRfRDJfMSAgICAgICAgICAgID0gMjA2LA0KKyAgU0kzMjE4WF9SQU1fVEVTVEZJTFRfT1VUXzIgICAgICAgICAgID0gMjA3LA0KKyAgU0kzMjE4WF9SQU1fVEVTVEZJTFRfRDFfMiAgICAgICAgICAgID0gMjA4LA0KKyAgU0kzMjE4WF9SQU1fVEVTVEZJTFRfRDJfMiAgICAgICAgICAgID0gMjA5LA0KKyAgU0kzMjE4WF9SQU1fVEVTVEZJTFRfT1VUXzMgICAgICAgICAgID0gMjEwLA0KKyAgU0kzMjE4WF9SQU1fVEVTVEZJTFRfRDFfMyAgICAgICAgICAgID0gMjExLA0KKyAgU0kzMjE4WF9SQU1fVEVTVEZJTFRfRDJfMyAgICAgICAgICAgID0gMjEyLA0KKyAgU0kzMjE4WF9SQU1fVEVTVEZJTFRfUEVBSyAgICAgICAgICAgID0gMjEzLA0KKyAgU0kzMjE4WF9SQU1fVEVTVEZJTFRfQUJTICAgICAgICAgICAgID0gMjE0LA0KKyAgU0kzMjE4WF9SQU1fVEVTVEZJTFRfTUVBTkFDQyAgICAgICAgID0gMjE1LA0KKyAgU0kzMjE4WF9SQU1fVEVTVEZJTFRfQ09VTlQgICAgICAgICAgID0gMjE2LA0KKyAgU0kzMjE4WF9SQU1fVEVTVEZJTFRfTk9fT0ZGU0VUICAgICAgID0gMjE3LA0KKyAgU0kzMjE4WF9SQU1fUklOR19YICAgICAgICAgICAgICAgICAgID0gMjE4LA0KKyAgU0kzMjE4WF9SQU1fUklOR19ZICAgICAgICAgICAgICAgICAgID0gMjE5LA0KKyAgU0kzMjE4WF9SQU1fUklOR19JTlQgICAgICAgICAgICAgICAgID0gMjIwLA0KKyAgU0kzMjE4WF9SQU1fUklOR19ZX0QxICAgICAgICAgICAgICAgID0gMjIxLA0KKyAgU0kzMjE4WF9SQU1fUklOR19ESUZGICAgICAgICAgICAgICAgID0gMjIyLA0KKyAgU0kzMjE4WF9SQU1fUklOR19ERUxUQSAgICAgICAgICAgICAgID0gMjIzLA0KKyAgU0kzMjE4WF9SQU1fV1RDSERPR19DTlQgICAgICAgICAgICAgID0gMjI0LA0KKyAgU0kzMjE4WF9SQU1fUklOR19XQVZFICAgICAgICAgICAgICAgID0gMjI1LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEMjI2ICAgICAgICAgICAgICAgID0gMjI2LA0KKyAgU0kzMjE4WF9SQU1fT05FS0haX0NPVU5UICAgICAgICAgICAgID0gMjI3LA0KKyAgU0kzMjE4WF9SQU1fVFgyMTAwX1kxICAgICAgICAgICAgICAgID0gMjI4LA0KKyAgU0kzMjE4WF9SQU1fVFgyMTAwX1kyICAgICAgICAgICAgICAgID0gMjI5LA0KKyAgU0kzMjE4WF9SQU1fVFgyMTAwX01BRyAgICAgICAgICAgICAgID0gMjMwLA0KKyAgU0kzMjE4WF9SQU1fUlgyMTAwX1kxICAgICAgICAgICAgICAgID0gMjMxLA0KKyAgU0kzMjE4WF9SQU1fUlgyMTAwX1kyICAgICAgICAgICAgICAgID0gMjMyLA0KKyAgU0kzMjE4WF9SQU1fUlgyMTAwX01BRyAgICAgICAgICAgICAgID0gMjMzLA0KKyAgU0kzMjE4WF9SQU1fVFgyMTAwX1BPV0VSICAgICAgICAgICAgID0gMjM0LA0KKyAgU0kzMjE4WF9SQU1fUlgyMTAwX1BPV0VSICAgICAgICAgICAgID0gMjM1LA0KKyAgU0kzMjE4WF9SQU1fVFgyMTAwX0lOICAgICAgICAgICAgICAgID0gMjM2LA0KKyAgU0kzMjE4WF9SQU1fUlgyMTAwX0lOICAgICAgICAgICAgICAgID0gMjM3LA0KKyAgU0kzMjE4WF9SQU1fUklOR1RSSVBfQ09VTlQgICAgICAgICAgID0gMjM4LA0KKyAgU0kzMjE4WF9SQU1fUklOR1RSSVBfREMxICAgICAgICAgICAgID0gMjM5LA0KKyAgU0kzMjE4WF9SQU1fUklOR1RSSVBfREMyICAgICAgICAgICAgID0gMjQwLA0KKyAgU0kzMjE4WF9SQU1fUklOR1RSSVBfQUMxICAgICAgICAgICAgID0gMjQxLA0KKyAgU0kzMjE4WF9SQU1fUklOR1RSSVBfQUMyICAgICAgICAgICAgID0gMjQyLA0KKyAgU0kzMjE4WF9SQU1fUklOR1RSSVBfQUNfQ09VTlQgICAgICAgID0gMjQzLA0KKyAgU0kzMjE4WF9SQU1fUklOR1RSSVBfRENfQ09VTlQgICAgICAgID0gMjQ0LA0KKyAgU0kzMjE4WF9SQU1fUklOR1RSSVBfQUNfUkVTVUxUICAgICAgID0gMjQ1LA0KKyAgU0kzMjE4WF9SQU1fUklOR1RSSVBfRENfUkVTVUxUICAgICAgID0gMjQ2LA0KKyAgU0kzMjE4WF9SQU1fUklOR1RSSVBfQUJTICAgICAgICAgICAgID0gMjQ3LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0VRX09VVCAgICAgICAgICAgICAgID0gMjQ4LA0KKyAgU0kzMjE4WF9SQU1fTENSX0RCSV9DTlQgICAgICAgICAgICAgID0gMjQ5LA0KKyAgU0kzMjE4WF9SQU1fQkFUX0RCSV9DTlQgICAgICAgICAgICAgID0gMjUwLA0KKyAgU0kzMjE4WF9SQU1fTE9OR19EQklfQ05UICAgICAgICAgICAgID0gMjUxLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0VRX0RFTEFZMyAgICAgICAgICAgID0gMjUyLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0VRX0RFTEFZMiAgICAgICAgICAgID0gMjUzLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0VRX0RFTEFZMSAgICAgICAgICAgID0gMjU0LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0VRX0RFTEFZMyAgICAgICAgICAgID0gMjU1LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0VRX0RFTEFZMiAgICAgICAgICAgID0gMjU2LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0VRX0RFTEFZMSAgICAgICAgICAgID0gMjU3LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0VRX0lOICAgICAgICAgICAgICAgID0gMjU4LA0KKyAgU0kzMjE4WF9SQU1fVFhEQ0NPTUJfRDEgICAgICAgICAgICAgID0gMjU5LA0KKyAgU0kzMjE4WF9SQU1fVFhEQ0NPTUJfRDIgICAgICAgICAgICAgID0gMjYwLA0KKyAgU0kzMjE4WF9SQU1fVFhEQ1NJTkNfT1VUICAgICAgICAgICAgID0gMjYxLA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0RJRkZfRDEgICAgICAgICAgICAgID0gMjYyLA0KKyAgU0kzMjE4WF9SQU1fRENfTk9UQ0hfMSAgICAgICAgICAgICAgID0gMjYzLA0KKyAgU0kzMjE4WF9SQU1fRENfTk9UQ0hfMiAgICAgICAgICAgICAgID0gMjY0LA0KKyAgU0kzMjE4WF9SQU1fRENfTk9UQ0hfT1VUICAgICAgICAgICAgID0gMjY1LA0KKyAgU0kzMjE4WF9SQU1fRENfTk9UQ0hfU0NBTEVEICAgICAgICAgID0gMjY2LA0KKyAgU0kzMjE4WF9SQU1fVl9GRUVEX0lOICAgICAgICAgICAgICAgID0gMjY3LA0KKyAgU0kzMjE4WF9SQU1fSV9UQVIgICAgICAgICAgICAgICAgICAgID0gMjY4LA0KKyAgU0kzMjE4WF9SQU1fQ09OU1RfVkxJTSAgICAgICAgICAgICAgID0gMjY5LA0KKyAgU0kzMjE4WF9SQU1fVU5JVFkgICAgICAgICAgICAgICAgICAgID0gMjcwLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ05PVENIXzEgICAgICAgICAgICAgID0gMjcxLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ05PVENIXzIgICAgICAgICAgICAgID0gMjcyLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ05PVENIX09VVCAgICAgICAgICAgID0gMjczLA0KKyAgU0kzMjE4WF9SQU1fWlNZTlRIXzEgICAgICAgICAgICAgICAgID0gMjc0LA0KKyAgU0kzMjE4WF9SQU1fWlNZTlRIXzIgICAgICAgICAgICAgICAgID0gMjc1LA0KKyAgU0kzMjE4WF9SQU1fWlNZTlRIX09VVF8xICAgICAgICAgICAgID0gMjc2LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0QyXzFfMCAgICAgICAgICAgICAgID0gMjc3LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0QyXzFfMSAgICAgICAgICAgICAgID0gMjc4LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0QyXzFfMiAgICAgICAgICAgICAgID0gMjc5LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0QyXzFfMyAgICAgICAgICAgICAgID0gMjgwLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0QyXzFfNCAgICAgICAgICAgICAgID0gMjgxLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0QyXzFfNSAgICAgICAgICAgICAgID0gMjgyLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0QyXzFfT1VUICAgICAgICAgICAgID0gMjgzLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0QyXzJfMCAgICAgICAgICAgICAgID0gMjg0LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0QyXzJfMSAgICAgICAgICAgICAgID0gMjg1LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0QyXzJfMiAgICAgICAgICAgICAgID0gMjg2LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0QyXzJfMyAgICAgICAgICAgICAgID0gMjg3LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0QyXzJfNCAgICAgICAgICAgICAgID0gMjg4LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0QyXzJfNSAgICAgICAgICAgICAgID0gMjg5LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0QyXzJfT1VUICAgICAgICAgICAgID0gMjkwLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0QyXzNfMCAgICAgICAgICAgICAgID0gMjkxLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0QyXzNfMSAgICAgICAgICAgICAgID0gMjkyLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0QyXzNfMiAgICAgICAgICAgICAgID0gMjkzLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0QyXzNfMyAgICAgICAgICAgICAgID0gMjk0LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0QyXzNfNCAgICAgICAgICAgICAgID0gMjk1LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0QyXzNfNSAgICAgICAgICAgICAgID0gMjk2LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0QyXzNfT1VUICAgICAgICAgICAgID0gMjk3LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0kyXzFfMSAgICAgICAgICAgICAgID0gMjk4LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0kyXzFfMiAgICAgICAgICAgICAgID0gMjk5LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0kyXzFfMyAgICAgICAgICAgICAgID0gMzAwLA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0kyXzFfNCAgICAgICAgICAgICAgID0gMzAxLA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0kyXzFfT1VUICAgICAgICAgICAgID0gMzAyLA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0kyXzJfMSAgICAgICAgICAgICAgID0gMzAzLA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0kyXzJfMiAgICAgICAgICAgICAgID0gMzA0LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0kyXzJfMyAgICAgICAgICAgICAgID0gMzA1LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0kyXzJfNCAgICAgICAgICAgICAgID0gMzA2LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0kyXzJfT1VUICAgICAgICAgICAgID0gMzA3LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0kyXzNfMSAgICAgICAgICAgICAgID0gMzA4LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0kyXzNfMiAgICAgICAgICAgICAgID0gMzA5LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0kyXzNfMyAgICAgICAgICAgICAgID0gMzEwLA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0kyXzNfNCAgICAgICAgICAgICAgID0gMzExLA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0kyXzNfT1VUICAgICAgICAgICAgID0gMzEyLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0NPTVAxICAgICAgICAgICAgICAgID0gMzEzLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0NPTVBfT1VUICAgICAgICAgICAgID0gMzE0LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0NPTVAxICAgICAgICAgICAgICAgID0gMzE1LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0NPTVBfT1VUICAgICAgICAgICAgID0gMzE2LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0hQRl9EMV8yICAgICAgICAgICAgID0gMzE3LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0hQRl9EMl8xICAgICAgICAgICAgID0gMzE4LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0hQRl9EMl8yICAgICAgICAgICAgID0gMzE5LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0hQRl9PVVQgICAgICAgICAgICAgID0gMzIwLA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0hQRl9PVVRfMSAgICAgICAgICAgID0gMzIxLA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0hQRl9PVVRfMiAgICAgICAgICAgID0gMzIyLA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0VRX09VVCAgICAgICAgICAgICAgID0gMzIzLA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfSV8xICAgICAgICAgICAgICAgID0gMzI0LA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfSV9PVVQgICAgICAgICAgICAgID0gMzI1LA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfTFBGXzEgICAgICAgICAgICAgID0gMzI2LA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfTFBGXzIgICAgICAgICAgICAgID0gMzI3LA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfTFBGX09VVCAgICAgICAgICAgID0gMzI4LA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfQlBfMSAgICAgICAgICAgICAgID0gMzI5LA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfQlBfMiAgICAgICAgICAgICAgID0gMzMwLA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfQlBfT1VUICAgICAgICAgICAgID0gMzMxLA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfU1JDX09VVCAgICAgICAgICAgID0gMzMyLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEMzMzICAgICAgICAgICAgICAgID0gMzMzLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEMzM0ICAgICAgICAgICAgICAgID0gMzM0LA0KKyAgU0kzMjE4WF9SQU1fUklOR19MUEZfMSAgICAgICAgICAgICAgID0gMzM1LA0KKyAgU0kzMjE4WF9SQU1fUklOR19MUEZfMiAgICAgICAgICAgICAgID0gMzM2LA0KKyAgU0kzMjE4WF9SQU1fUklOR19MUEZfT1VUICAgICAgICAgICAgID0gMzM3LA0KKyAgU0kzMjE4WF9SQU1fUklOR19JTlRFUlBfRElGRiAgICAgICAgID0gMzM4LA0KKyAgU0kzMjE4WF9SQU1fUklOR19JTlRFUlBfRElGRl9PVVQgICAgID0gMzM5LA0KKyAgU0kzMjE4WF9SQU1fUklOR19JTlRFUlBfSU5UICAgICAgICAgID0gMzQwLA0KKyAgU0kzMjE4WF9SQU1fUklOR19JTlRFUlBfSU5UX09VVCAgICAgID0gMzQxLA0KKyAgU0kzMjE4WF9SQU1fVl9JTElNX1RSQUNLICAgICAgICAgICAgID0gMzQyLA0KKyAgU0kzMjE4WF9SQU1fVl9SRkVFRF9UUkFDSyAgICAgICAgICAgID0gMzQzLA0KKyAgU0kzMjE4WF9SQU1fTEZfU1BFRURVUF9DTlQgICAgICAgICAgID0gMzQ0LA0KKyAgU0kzMjE4WF9SQU1fRENfU1BFRURVUF9DTlQgICAgICAgICAgID0gMzQ1LA0KKyAgU0kzMjE4WF9SQU1fQUNfU1BFRURVUF9DTlQgICAgICAgICAgID0gMzQ2LA0KKyAgU0kzMjE4WF9SQU1fTENSX1NQRUVEVVBfQ05UICAgICAgICAgID0gMzQ3LA0KKyAgU0kzMjE4WF9SQU1fQ01fU1BFRURVUF9DTlQgICAgICAgICAgID0gMzQ4LA0KKyAgU0kzMjE4WF9SQU1fRENfU1BFRURVUF9NQVNLICAgICAgICAgID0gMzQ5LA0KKyAgU0kzMjE4WF9SQU1fWlNZTlRIX0lOICAgICAgICAgICAgICAgID0gMzUwLA0KKyAgU0kzMjE4WF9SQU1fSV9UQVJfU0FWRSAgICAgICAgICAgICAgID0gMzUxLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEMzUyICAgICAgICAgICAgICAgID0gMzUyLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEMzUzICAgICAgICAgICAgICAgID0gMzUzLA0KKyAgU0kzMjE4WF9SQU1fQ09VTlRFUl9WVFIgICAgICAgICAgICAgID0gMzU0LA0KKyAgU0kzMjE4WF9SQU1fSV9SSU5HX0FWRyAgICAgICAgICAgICAgID0gMzU1LA0KKyAgU0kzMjE4WF9SQU1fQ09VTlRFUl9JUklORyAgICAgICAgICAgID0gMzU2LA0KKyAgU0kzMjE4WF9SQU1fQ09NUF9SQVRJTyAgICAgICAgICAgICAgID0gMzU3LA0KKyAgU0kzMjE4WF9SQU1fTUFEQ19WQkFUX0RJVjIgICAgICAgICAgID0gMzU4LA0KKyAgU0kzMjE4WF9SQU1fVkRJRkZfUEtfVCAgICAgICAgICAgICAgID0gMzU5LA0KKyAgU0kzMjE4WF9SQU1fUEVBS19DTlQgICAgICAgICAgICAgICAgID0gMzYwLA0KKyAgU0kzMjE4WF9SQU1fQ01fREJJX0NOVCAgICAgICAgICAgICAgID0gMzYxLA0KKyAgU0kzMjE4WF9SQU1fVkNNX0xBU1QgICAgICAgICAgICAgICAgID0gMzYyLA0KKyAgU0kzMjE4WF9SQU1fVkJBVExfU0VOU0UgICAgICAgICAgICAgID0gMzYzLA0KKyAgU0kzMjE4WF9SQU1fVkJBVEhfU0VOU0UgICAgICAgICAgICAgID0gMzY0LA0KKyAgU0kzMjE4WF9SQU1fVkJBVFJfU0VOU0UgICAgICAgICAgICAgID0gMzY1LA0KKyAgU0kzMjE4WF9SQU1fQkFUX1NFVFRMRV9DTlQgICAgICAgICAgID0gMzY2LA0KKyAgU0kzMjE4WF9SQU1fVkJBVF9UR1QgICAgICAgICAgICAgICAgID0gMzY3LA0KKyAgU0kzMjE4WF9SQU1fVkJBVF9SRVEgICAgICAgICAgICAgICAgID0gMzY4LA0KKyAgU0kzMjE4WF9SQU1fVkNNX0hJUkVTICAgICAgICAgICAgICAgID0gMzY5LA0KKyAgU0kzMjE4WF9SQU1fVkNNX0xPUkVTICAgICAgICAgICAgICAgID0gMzcwLA0KKyAgU0kzMjE4WF9SQU1fSUxPT1AxICAgICAgICAgICAgICAgICAgID0gMzcxLA0KKyAgU0kzMjE4WF9SQU1fSUxPTkcyICAgICAgICAgICAgICAgICAgID0gMzcyLA0KKyAgU0kzMjE4WF9SQU1fSVRJUDEgICAgICAgICAgICAgICAgICAgID0gMzczLA0KKyAgU0kzMjE4WF9SQU1fSVJJTkcxICAgICAgICAgICAgICAgICAgID0gMzc0LA0KKyAgU0kzMjE4WF9SQU1fQ0FMX1RFTVAxICAgICAgICAgICAgICAgID0gMzc1LA0KKyAgU0kzMjE4WF9SQU1fQ0FMX1RFTVAyICAgICAgICAgICAgICAgID0gMzc2LA0KKyAgU0kzMjE4WF9SQU1fQ0FMX1RFTVAzICAgICAgICAgICAgICAgID0gMzc3LA0KKyAgU0kzMjE4WF9SQU1fQ0FMX1RFTVA0ICAgICAgICAgICAgICAgID0gMzc4LA0KKyAgU0kzMjE4WF9SQU1fQ0FMX1RFTVA1ICAgICAgICAgICAgICAgID0gMzc5LA0KKyAgU0kzMjE4WF9SQU1fQ0FMX1RFTVA2ICAgICAgICAgICAgICAgID0gMzgwLA0KKyAgU0kzMjE4WF9SQU1fQ0FMX1RFTVA3ICAgICAgICAgICAgICAgID0gMzgxLA0KKyAgU0kzMjE4WF9SQU1fQ01SUl9ESVZJU09SICAgICAgICAgICAgID0gMzgyLA0KKyAgU0kzMjE4WF9SQU1fQ01SUl9SRU1BSU5ERVIgICAgICAgICAgID0gMzgzLA0KKyAgU0kzMjE4WF9SQU1fQ01SUl9RX1BUUiAgICAgICAgICAgICAgID0gMzg0LA0KKyAgU0kzMjE4WF9SQU1fSV9TT1VSQ0UxICAgICAgICAgICAgICAgID0gMzg1LA0KKyAgU0kzMjE4WF9SQU1fSV9TT1VSQ0UyICAgICAgICAgICAgICAgID0gMzg2LA0KKyAgU0kzMjE4WF9SQU1fVlRSMSAgICAgICAgICAgICAgICAgICAgID0gMzg3LA0KKyAgU0kzMjE4WF9SQU1fVlRSMiAgICAgICAgICAgICAgICAgICAgID0gMzg4LA0KKyAgU0kzMjE4WF9SQU1fU1RPUF9USU1FUjEgICAgICAgICAgICAgID0gMzg5LA0KKyAgU0kzMjE4WF9SQU1fU1RPUF9USU1FUjIgICAgICAgICAgICAgID0gMzkwLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEMzkxICAgICAgICAgICAgICAgID0gMzkxLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEMzkyICAgICAgICAgICAgICAgID0gMzkyLA0KKyAgU0kzMjE4WF9SQU1fQ0FMX09OSEtfWiAgICAgICAgICAgICAgID0gMzkzLA0KKyAgU0kzMjE4WF9SQU1fQ0FMX0xCX1NFVFRMRSAgICAgICAgICAgID0gMzk0LA0KKyAgU0kzMjE4WF9SQU1fQ0FMX0RFQ0xQRl9WMCAgICAgICAgICAgID0gMzk1LA0KKyAgU0kzMjE4WF9SQU1fQ0FMX0RFQ0xQRl9WMSAgICAgICAgICAgID0gMzk2LA0KKyAgU0kzMjE4WF9SQU1fQ0FMX0RFQ0xQRl9WMiAgICAgICAgICAgID0gMzk3LA0KKyAgU0kzMjE4WF9SQU1fQ0FMX0dPRVJUWkVMX1YwICAgICAgICAgID0gMzk4LA0KKyAgU0kzMjE4WF9SQU1fQ0FMX0dPRVJUWkVMX1YxICAgICAgICAgID0gMzk5LA0KKyAgU0kzMjE4WF9SQU1fQ0FMX0RFQ0xQRl9ZICAgICAgICAgICAgID0gNDAwLA0KKyAgU0kzMjE4WF9SQU1fQ0FMX0dPRVJUWkVMX1kgICAgICAgICAgID0gNDAxLA0KKyAgU0kzMjE4WF9SQU1fUF9IVklDICAgICAgICAgICAgICAgICAgID0gNDAyLA0KKyAgU0kzMjE4WF9SQU1fVkJBVExfTUlSUk9SICAgICAgICAgICAgID0gNDAzLA0KKyAgU0kzMjE4WF9SQU1fVkJBVEhfTUlSUk9SICAgICAgICAgICAgID0gNDA0LA0KKyAgU0kzMjE4WF9SQU1fVkJBVFJfTUlSUk9SICAgICAgICAgICAgID0gNDA1LA0KKyAgU0kzMjE4WF9SQU1fRElBR19FWDFfT1VUICAgICAgICAgICAgID0gNDA2LA0KKyAgU0kzMjE4WF9SQU1fRElBR19FWDJfT1VUICAgICAgICAgICAgID0gNDA3LA0KKyAgU0kzMjE4WF9SQU1fRElBR19ETU1fVl9PVVQgICAgICAgICAgID0gNDA4LA0KKyAgU0kzMjE4WF9SQU1fRElBR19ETU1fSV9PVVQgICAgICAgICAgID0gNDA5LA0KKyAgU0kzMjE4WF9SQU1fRElBR19QICAgICAgICAgICAgICAgICAgID0gNDEwLA0KKyAgU0kzMjE4WF9SQU1fRElBR19MUEZfViAgICAgICAgICAgICAgID0gNDExLA0KKyAgU0kzMjE4WF9SQU1fRElBR19MUEZfSSAgICAgICAgICAgICAgID0gNDEyLA0KKyAgU0kzMjE4WF9SQU1fRElBR19UT05FX0ZMQUcgICAgICAgICAgID0gNDEzLA0KKyAgU0kzMjE4WF9SQU1fSUxPT1AxX0xBU1QgICAgICAgICAgICAgID0gNDE0LA0KKyAgU0kzMjE4WF9SQU1fUklOR19FTlRSWV9WT0MgICAgICAgICAgID0gNDE1LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENDE2ICAgICAgICAgICAgICAgID0gNDE2LA0KKyAgU0kzMjE4WF9SQU1fT1NDMV9YX1NBVkUgICAgICAgICAgICAgID0gNDE3LA0KKyAgU0kzMjE4WF9SQU1fRVpTWU5USF8xICAgICAgICAgICAgICAgID0gNDE4LA0KKyAgU0kzMjE4WF9SQU1fRVpTWU5USF8yICAgICAgICAgICAgICAgID0gNDE5LA0KKyAgU0kzMjE4WF9SQU1fWlNZTlRIX09VVCAgICAgICAgICAgICAgID0gNDIwLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENDIxICAgICAgICAgICAgICAgID0gNDIxLA0KKyAgU0kzMjE4WF9SQU1fQ0FMX1NVQlNUQVRFICAgICAgICAgICAgID0gNDIyLA0KKyAgU0kzMjE4WF9SQU1fRElBR19FWDFfRENfT1VUICAgICAgICAgID0gNDIzLA0KKyAgU0kzMjE4WF9SQU1fRElBR19FWDFfREMgICAgICAgICAgICAgID0gNDI0LA0KKyAgU0kzMjE4WF9SQU1fRVpTWU5USF9CMSAgICAgICAgICAgICAgID0gNDI1LA0KKyAgU0kzMjE4WF9SQU1fRVpTWU5USF9CMiAgICAgICAgICAgICAgID0gNDI2LA0KKyAgU0kzMjE4WF9SQU1fRVpTWU5USF9BMSAgICAgICAgICAgICAgID0gNDI3LA0KKyAgU0kzMjE4WF9SQU1fRVpTWU5USF9BMiAgICAgICAgICAgICAgID0gNDI4LA0KKyAgU0kzMjE4WF9SQU1fSUxPT1AxX0ZJTFQgICAgICAgICAgICAgID0gNDI5LA0KKyAgU0kzMjE4WF9SQU1fQUNfUFVfREVMVEExX0NOVCAgICAgICAgID0gNDMwLA0KKyAgU0kzMjE4WF9SQU1fQUNfUFVfREVMVEEyX0NOVCAgICAgICAgID0gNDMxLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENDMyICAgICAgICAgICAgICAgID0gNDMyLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENDMzICAgICAgICAgICAgICAgID0gNDMzLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENDM0ICAgICAgICAgICAgICAgID0gNDM0LA0KKyAgU0kzMjE4WF9SQU1fQUNfREFDX0dBSU5fU0FWRSAgICAgICAgID0gNDM1LA0KKyAgU0kzMjE4WF9SQU1fUklOR19GTFVTSF9DTlQgICAgICAgICAgID0gNDM2LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENDM3ICAgICAgICAgICAgICAgID0gNDM3LA0KKyAgU0kzMjE4WF9SQU1fRElBR19WQVJfT1VUICAgICAgICAgICAgID0gNDM4LA0KKyAgU0kzMjE4WF9SQU1fSV9WQkFUICAgICAgICAgICAgICAgICAgID0gNDM5LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENDQwICAgICAgICAgICAgICAgID0gNDQwLA0KKyAgU0kzMjE4WF9SQU1fQ0FMVE1QX0xPT1BDTlQgICAgICAgICAgID0gNDQxLA0KKyAgU0kzMjE4WF9SQU1fQ0FMVE1QX0xPT1BJTkMgICAgICAgICAgID0gNDQyLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENDQzICAgICAgICAgICAgICAgID0gNDQzLA0KKyAgU0kzMjE4WF9SQU1fQ0FMVE1QX0NPREVJTkMgICAgICAgICAgID0gNDQ0LA0KKyAgU0kzMjE4WF9SQU1fQ0FMVE1QX1RBVUlOQyAgICAgICAgICAgID0gNDQ1LA0KKyAgU0kzMjE4WF9SQU1fQ0FMVE1QX1RBVSAgICAgICAgICAgICAgID0gNDQ2LA0KKyAgU0kzMjE4WF9SQU1fQ0FMX1RFTVA4ICAgICAgICAgICAgICAgID0gNDQ3LA0KKyAgU0kzMjE4WF9SQU1fUEFUQ0hJRCAgICAgICAgICAgICAgICAgID0gNDQ4LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENDQ5ICAgICAgICAgICAgICAgID0gNDQ5LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENDUwICAgICAgICAgICAgICAgID0gNDUwLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENDUxICAgICAgICAgICAgICAgID0gNDUxLA0KKyAgU0kzMjE4WF9SQU1fQ0FMX0xCX09GRlNFVF9GV0QgICAgICAgID0gNDUyLA0KKyAgU0kzMjE4WF9SQU1fQ0FMX0xCX09GRlNFVF9SVlMgICAgICAgID0gNDUzLA0KKyAgU0kzMjE4WF9SQU1fQ09VTlRfU1BFRURVUCAgICAgICAgICAgID0gNDU0LA0KKyAgU0kzMjE4WF9SQU1fU1dFRVBfQ09VTlQgICAgICAgICAgICAgID0gNDU1LA0KKyAgU0kzMjE4WF9SQU1fQU1QX1JBTVAgICAgICAgICAgICAgICAgID0gNDU2LA0KKyAgU0kzMjE4WF9SQU1fRElBR19MUEZfTUFEQ19EICAgICAgICAgID0gNDU3LA0KKyAgU0kzMjE4WF9SQU1fRElBR19IUEZfTUFEQyAgICAgICAgICAgID0gNDU4LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENDU5ICAgICAgICAgICAgICAgID0gNDU5LA0KKyAgU0kzMjE4WF9SQU1fVFhERUNfT1VUICAgICAgICAgICAgICAgID0gNDYwLA0KKyAgU0kzMjE4WF9SQU1fVFhERUNfRDEgICAgICAgICAgICAgICAgID0gNDYxLA0KKyAgU0kzMjE4WF9SQU1fVFhERUNfRDIgICAgICAgICAgICAgICAgID0gNDYyLA0KKyAgU0kzMjE4WF9SQU1fUlhERUNfRDEgICAgICAgICAgICAgICAgID0gNDYzLA0KKyAgU0kzMjE4WF9SQU1fUlhERUNfRDIgICAgICAgICAgICAgICAgID0gNDY0LA0KKyAgU0kzMjE4WF9SQU1fT1NDSU5UMV9EMl8xICAgICAgICAgICAgID0gNDY1LA0KKyAgU0kzMjE4WF9SQU1fT1NDSU5UMV9EMV8xICAgICAgICAgICAgID0gNDY2LA0KKyAgU0kzMjE4WF9SQU1fT1NDSU5UMV9PVVRfMSAgICAgICAgICAgID0gNDY3LA0KKyAgU0kzMjE4WF9SQU1fT1NDSU5UMV9EMl8yICAgICAgICAgICAgID0gNDY4LA0KKyAgU0kzMjE4WF9SQU1fT1NDSU5UMV9EMV8yICAgICAgICAgICAgID0gNDY5LA0KKyAgU0kzMjE4WF9SQU1fT1NDSU5UMV9PVVQgICAgICAgICAgICAgID0gNDcwLA0KKyAgU0kzMjE4WF9SQU1fT1NDSU5UMl9EMl8xICAgICAgICAgICAgID0gNDcxLA0KKyAgU0kzMjE4WF9SQU1fT1NDSU5UMl9EMV8xICAgICAgICAgICAgID0gNDcyLA0KKyAgU0kzMjE4WF9SQU1fT1NDSU5UMl9PVVRfMSAgICAgICAgICAgID0gNDczLA0KKyAgU0kzMjE4WF9SQU1fT1NDSU5UMl9EMl8yICAgICAgICAgICAgID0gNDc0LA0KKyAgU0kzMjE4WF9SQU1fT1NDSU5UMl9EMV8yICAgICAgICAgICAgID0gNDc1LA0KKyAgU0kzMjE4WF9SQU1fT1NDSU5UMl9PVVQgICAgICAgICAgICAgID0gNDc2LA0KKyAgU0kzMjE4WF9SQU1fT1NDMV9ZX1NBVkUgICAgICAgICAgICAgID0gNDc3LA0KKyAgU0kzMjE4WF9SQU1fT1NDMl9ZX1NBVkUgICAgICAgICAgICAgID0gNDc4LA0KKyAgU0kzMjE4WF9SQU1fUFdSU0FWRV9DTlQgICAgICAgICAgICAgID0gNDc5LA0KKyAgU0kzMjE4WF9SQU1fVkJBVFJfUEsgICAgICAgICAgICAgICAgID0gNDgwLA0KKyAgU0kzMjE4WF9SQU1fU1BFRURVUF9NQVNLX0NOVCAgICAgICAgID0gNDgxLA0KKyAgU0kzMjE4WF9SQU1fVkNNX1JJTkdfRklYRUQgICAgICAgICAgID0gNDgyLA0KKyAgU0kzMjE4WF9SQU1fREVMVEFfVkNNICAgICAgICAgICAgICAgID0gNDgzLA0KKyAgU0kzMjE4WF9SQU1fTUFEQ19WVElQQ19ESUFHX09TICAgICAgID0gNDg0LA0KKyAgU0kzMjE4WF9SQU1fTUFEQ19WUklOR0NfRElBR19PUyAgICAgID0gNDg1LA0KKyAgU0kzMjE4WF9SQU1fTUFEQ19WTE9OR19ESUFHX09TICAgICAgID0gNDg2LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENDg3ICAgICAgICAgICAgICAgID0gNDg3LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENDg4ICAgICAgICAgICAgICAgID0gNDg4LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENDg5ICAgICAgICAgICAgICAgID0gNDg5LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENDkwICAgICAgICAgICAgICAgID0gNDkwLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENDkxICAgICAgICAgICAgICAgID0gNDkxLA0KKyAgU0kzMjE4WF9SQU1fUFdSU0FWRV9EQklfQ05UICAgICAgICAgID0gNDkyLA0KKyAgU0kzMjE4WF9SQU1fQ09NUF9SQVRJT19TQVZFICAgICAgICAgID0gNDkzLA0KKyAgU0kzMjE4WF9SQU1fQ0FMX1RFTVA5ICAgICAgICAgICAgICAgID0gNDk0LA0KKyAgU0kzMjE4WF9SQU1fQ0FMX1RFTVAxMCAgICAgICAgICAgICAgID0gNDk1LA0KKyAgU0kzMjE4WF9SQU1fREFDX09GRlNFVF9URU1QICAgICAgICAgID0gNDk2LA0KKyAgU0kzMjE4WF9SQU1fQ0FMX0RBQ19DT0RFICAgICAgICAgICAgID0gNDk3LA0KKyAgU0kzMjE4WF9SQU1fRENEQUNfT0ZGU0VUICAgICAgICAgICAgID0gNDk4LA0KKyAgU0kzMjE4WF9SQU1fVkRJRkZfQ09BUlNFICAgICAgICAgICAgID0gNDk5LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0lJUl9PVVRfNCAgICAgICAgICAgID0gNTAwLA0KKyAgU0kzMjE4WF9SQU1fQ0FMX1RFTVAxMSAgICAgICAgICAgICAgID0gNTAxLA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfUkFNUCAgICAgICAgICAgICAgID0gNTAyLA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfUkFNUF9ESVIgICAgICAgICAgID0gNTAzLA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfT05fVCAgICAgICAgICAgICAgID0gNTA0LA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfUEtfREVUICAgICAgICAgICAgID0gNTA1LA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfUEtfREVUX1QgICAgICAgICAgID0gNTA2LA0KKyAgU0kzMjE4WF9SQU1fVEhFUk1fQ05UICAgICAgICAgICAgICAgID0gNTA3LA0KKyAgU0kzMjE4WF9SQU1fVkRJRkZfU0VOU0VfREVMQVkgICAgICAgID0gNTA4LA0KKyAgU0kzMjE4WF9SQU1fUklOR19JTlRFUlBfRElGRl9TWU5DICAgID0gNTA5LA0KKyAgU0kzMjE4WF9SQU1fQ1BVTVBfREVCX0NOVCAgICAgICAgICAgID0gNTEwLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENTExICAgICAgICAgICAgICAgID0gNTExLA0KKyAgU0kzMjE4WF9SQU1fTUlOVVNfT05FICAgICAgICAgICAgICAgID0gNTEyLA0KKyAgU0kzMjE4WF9SQU1fSUxPT1BMUEYgICAgICAgICAgICAgICAgID0gNTEzLA0KKyAgU0kzMjE4WF9SQU1fSUxPTkdMUEYgICAgICAgICAgICAgICAgID0gNTE0LA0KKyAgU0kzMjE4WF9SQU1fQkFUTFBGICAgICAgICAgICAgICAgICAgID0gNTE1LA0KKyAgU0kzMjE4WF9SQU1fVkRJRkZMUEYgICAgICAgICAgICAgICAgID0gNTE2LA0KKyAgU0kzMjE4WF9SQU1fVkNNTFBGICAgICAgICAgICAgICAgICAgID0gNTE3LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0lJUl9CMF8xICAgICAgICAgICAgID0gNTE4LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0lJUl9CMV8xICAgICAgICAgICAgID0gNTE5LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0lJUl9BMV8xICAgICAgICAgICAgID0gNTIwLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0lJUl9CMF8yICAgICAgICAgICAgID0gNTIxLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0lJUl9CMV8yICAgICAgICAgICAgID0gNTIyLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0lJUl9CMl8yICAgICAgICAgICAgID0gNTIzLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0lJUl9BMV8yICAgICAgICAgICAgID0gNTI0LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0lJUl9BMl8yICAgICAgICAgICAgID0gNTI1LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0lJUl9CMF8zICAgICAgICAgICAgID0gNTI2LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0lJUl9CMV8zICAgICAgICAgICAgID0gNTI3LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0lJUl9CMl8zICAgICAgICAgICAgID0gNTI4LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0lJUl9BMV8zICAgICAgICAgICAgID0gNTI5LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0lJUl9BMl8zICAgICAgICAgICAgID0gNTMwLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0hQRl9CMF8xICAgICAgICAgICAgID0gNTMxLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0hQRl9CMV8xICAgICAgICAgICAgID0gNTMyLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0hQRl9BMV8xICAgICAgICAgICAgID0gNTMzLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0hQRl9CMF8yICAgICAgICAgICAgID0gNTM0LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0hQRl9CMV8yICAgICAgICAgICAgID0gNTM1LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0hQRl9CMl8yICAgICAgICAgICAgID0gNTM2LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0hQRl9BMV8yICAgICAgICAgICAgID0gNTM3LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0hQRl9BMl8yICAgICAgICAgICAgID0gNTM4LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0hQRl9HQUlOICAgICAgICAgICAgID0gNTM5LA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0VRX0MwICAgICAgICAgICAgICAgID0gNTQwLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0VRX0MxICAgICAgICAgICAgICAgID0gNTQxLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0VRX0MyICAgICAgICAgICAgICAgID0gNTQyLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0VRX0MzICAgICAgICAgICAgICAgID0gNTQzLA0KKyAgU0kzMjE4WF9SQU1fVFhBQ0dBSU4gICAgICAgICAgICAgICAgID0gNTQ0LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0dBSU4gICAgICAgICAgICAgICAgID0gNTQ1LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0VRX0MwICAgICAgICAgICAgICAgID0gNTQ2LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0VRX0MxICAgICAgICAgICAgICAgID0gNTQ3LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0VRX0MyICAgICAgICAgICAgICAgID0gNTQ4LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0VRX0MzICAgICAgICAgICAgICAgID0gNTQ5LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0lJUl9CMF8xICAgICAgICAgICAgID0gNTUwLA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0lJUl9CMV8xICAgICAgICAgICAgID0gNTUxLA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0lJUl9BMV8xICAgICAgICAgICAgID0gNTUyLA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0lJUl9CMF8yICAgICAgICAgICAgID0gNTUzLA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0lJUl9CMV8yICAgICAgICAgICAgID0gNTU0LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0lJUl9CMl8yICAgICAgICAgICAgID0gNTU1LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0lJUl9BMV8yICAgICAgICAgICAgID0gNTU2LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0lJUl9BMl8yICAgICAgICAgICAgID0gNTU3LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0lJUl9CMF8zICAgICAgICAgICAgID0gNTU4LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0lJUl9CMV8zICAgICAgICAgICAgID0gNTU5LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0lJUl9CMl8zICAgICAgICAgICAgID0gNTYwLA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0lJUl9BMV8zICAgICAgICAgICAgID0gNTYxLA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0lJUl9BMl8zICAgICAgICAgICAgID0gNTYyLA0KKyAgU0kzMjE4WF9SQU1fRUNGSVJfQzIgICAgICAgICAgICAgICAgID0gNTYzLA0KKyAgU0kzMjE4WF9SQU1fRUNGSVJfQzMgICAgICAgICAgICAgICAgID0gNTY0LA0KKyAgU0kzMjE4WF9SQU1fRUNGSVJfQzQgICAgICAgICAgICAgICAgID0gNTY1LA0KKyAgU0kzMjE4WF9SQU1fRUNGSVJfQzUgICAgICAgICAgICAgICAgID0gNTY2LA0KKyAgU0kzMjE4WF9SQU1fRUNGSVJfQzYgICAgICAgICAgICAgICAgID0gNTY3LA0KKyAgU0kzMjE4WF9SQU1fRUNGSVJfQzcgICAgICAgICAgICAgICAgID0gNTY4LA0KKyAgU0kzMjE4WF9SQU1fRUNGSVJfQzggICAgICAgICAgICAgICAgID0gNTY5LA0KKyAgU0kzMjE4WF9SQU1fRUNGSVJfQzkgICAgICAgICAgICAgICAgID0gNTcwLA0KKyAgU0kzMjE4WF9SQU1fRUNJSVJfQjAgICAgICAgICAgICAgICAgID0gNTcxLA0KKyAgU0kzMjE4WF9SQU1fRUNJSVJfQjEgICAgICAgICAgICAgICAgID0gNTcyLA0KKyAgU0kzMjE4WF9SQU1fRUNJSVJfQTEgICAgICAgICAgICAgICAgID0gNTczLA0KKyAgU0kzMjE4WF9SQU1fRUNJSVJfQTIgICAgICAgICAgICAgICAgID0gNTc0LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkRURl9CMF8xICAgICAgICAgICAgID0gNTc1LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkRURl9CMV8xICAgICAgICAgICAgID0gNTc2LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkRURl9CMl8xICAgICAgICAgICAgID0gNTc3LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkRURl9BMV8xICAgICAgICAgICAgID0gNTc4LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkRURl9BMl8xICAgICAgICAgICAgID0gNTc5LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkRURl9CMF8yICAgICAgICAgICAgID0gNTgwLA0KKyAgU0kzMjE4WF9SQU1fRFRNRkRURl9CMV8yICAgICAgICAgICAgID0gNTgxLA0KKyAgU0kzMjE4WF9SQU1fRFRNRkRURl9CMl8yICAgICAgICAgICAgID0gNTgyLA0KKyAgU0kzMjE4WF9SQU1fRFRNRkRURl9BMV8yICAgICAgICAgICAgID0gNTgzLA0KKyAgU0kzMjE4WF9SQU1fRFRNRkRURl9BMl8yICAgICAgICAgICAgID0gNTg0LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkRURl9CMF8zICAgICAgICAgICAgID0gNTg1LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkRURl9CMV8zICAgICAgICAgICAgID0gNTg2LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkRURl9CMl8zICAgICAgICAgICAgID0gNTg3LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkRURl9BMV8zICAgICAgICAgICAgID0gNTg4LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkRURl9BMl8zICAgICAgICAgICAgID0gNTg5LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkRURl9HQUlOICAgICAgICAgICAgID0gNTkwLA0KKyAgU0kzMjE4WF9SQU1fRFRNRkxQRl9CMF8xICAgICAgICAgICAgID0gNTkxLA0KKyAgU0kzMjE4WF9SQU1fRFRNRkxQRl9CMV8xICAgICAgICAgICAgID0gNTkyLA0KKyAgU0kzMjE4WF9SQU1fRFRNRkxQRl9CMl8xICAgICAgICAgICAgID0gNTkzLA0KKyAgU0kzMjE4WF9SQU1fRFRNRkxQRl9BMV8xICAgICAgICAgICAgID0gNTk0LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkxQRl9BMl8xICAgICAgICAgICAgID0gNTk1LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkxQRl9CMF8yICAgICAgICAgICAgID0gNTk2LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkxQRl9CMV8yICAgICAgICAgICAgID0gNTk3LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkxQRl9CMl8yICAgICAgICAgICAgID0gNTk4LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkxQRl9BMV8yICAgICAgICAgICAgID0gNTk5LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkxQRl9BMl8yICAgICAgICAgICAgID0gNjAwLA0KKyAgU0kzMjE4WF9SQU1fRFRNRkxQRl9HQUlOICAgICAgICAgICAgID0gNjAxLA0KKyAgU0kzMjE4WF9SQU1fRFRNRkhQRl9CMF8xICAgICAgICAgICAgID0gNjAyLA0KKyAgU0kzMjE4WF9SQU1fRFRNRkhQRl9CMV8xICAgICAgICAgICAgID0gNjAzLA0KKyAgU0kzMjE4WF9SQU1fRFRNRkhQRl9CMl8xICAgICAgICAgICAgID0gNjA0LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkhQRl9BMV8xICAgICAgICAgICAgID0gNjA1LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkhQRl9BMl8xICAgICAgICAgICAgID0gNjA2LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkhQRl9CMF8yICAgICAgICAgICAgID0gNjA3LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkhQRl9CMV8yICAgICAgICAgICAgID0gNjA4LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkhQRl9CMl8yICAgICAgICAgICAgID0gNjA5LA0KKyAgU0kzMjE4WF9SQU1fRFRNRkhQRl9BMV8yICAgICAgICAgICAgID0gNjEwLA0KKyAgU0kzMjE4WF9SQU1fRFRNRkhQRl9BMl8yICAgICAgICAgICAgID0gNjExLA0KKyAgU0kzMjE4WF9SQU1fRFRNRkhQRl9HQUlOICAgICAgICAgICAgID0gNjEyLA0KKyAgU0kzMjE4WF9SQU1fUE9XRVJfR0FJTiAgICAgICAgICAgICAgID0gNjEzLA0KKyAgU0kzMjE4WF9SQU1fR09FUlRaRUxfR0FJTiAgICAgICAgICAgID0gNjE0LA0KKyAgU0kzMjE4WF9SQU1fTU9ERU1fR0FJTiAgICAgICAgICAgICAgID0gNjE1LA0KKyAgU0kzMjE4WF9SQU1fSE9UQklUMSAgICAgICAgICAgICAgICAgID0gNjE2LA0KKyAgU0kzMjE4WF9SQU1fSE9UQklUMCAgICAgICAgICAgICAgICAgID0gNjE3LA0KKyAgU0kzMjE4WF9SQU1fUk9XMF9DMSAgICAgICAgICAgICAgICAgID0gNjE4LA0KKyAgU0kzMjE4WF9SQU1fUk9XMV9DMSAgICAgICAgICAgICAgICAgID0gNjE5LA0KKyAgU0kzMjE4WF9SQU1fUk9XMl9DMSAgICAgICAgICAgICAgICAgID0gNjIwLA0KKyAgU0kzMjE4WF9SQU1fUk9XM19DMSAgICAgICAgICAgICAgICAgID0gNjIxLA0KKyAgU0kzMjE4WF9SQU1fQ09MMF9DMSAgICAgICAgICAgICAgICAgID0gNjIyLA0KKyAgU0kzMjE4WF9SQU1fQ09MMV9DMSAgICAgICAgICAgICAgICAgID0gNjIzLA0KKyAgU0kzMjE4WF9SQU1fQ09MMl9DMSAgICAgICAgICAgICAgICAgID0gNjI0LA0KKyAgU0kzMjE4WF9SQU1fQ09MM19DMSAgICAgICAgICAgICAgICAgID0gNjI1LA0KKyAgU0kzMjE4WF9SQU1fUk9XMF9DMiAgICAgICAgICAgICAgICAgID0gNjI2LA0KKyAgU0kzMjE4WF9SQU1fUk9XMV9DMiAgICAgICAgICAgICAgICAgID0gNjI3LA0KKyAgU0kzMjE4WF9SQU1fUk9XMl9DMiAgICAgICAgICAgICAgICAgID0gNjI4LA0KKyAgU0kzMjE4WF9SQU1fUk9XM19DMiAgICAgICAgICAgICAgICAgID0gNjI5LA0KKyAgU0kzMjE4WF9SQU1fQ09MMF9DMiAgICAgICAgICAgICAgICAgID0gNjMwLA0KKyAgU0kzMjE4WF9SQU1fQ09MMV9DMiAgICAgICAgICAgICAgICAgID0gNjMxLA0KKyAgU0kzMjE4WF9SQU1fQ09MMl9DMiAgICAgICAgICAgICAgICAgID0gNjMyLA0KKyAgU0kzMjE4WF9SQU1fQ09MM19DMiAgICAgICAgICAgICAgICAgID0gNjMzLA0KKyAgU0kzMjE4WF9SQU1fU0xPUEVfVkxJTSAgICAgICAgICAgICAgID0gNjM0LA0KKyAgU0kzMjE4WF9SQU1fU0xPUEVfUkZFRUQgICAgICAgICAgICAgID0gNjM1LA0KKyAgU0kzMjE4WF9SQU1fU0xPUEVfSUxJTSAgICAgICAgICAgICAgID0gNjM2LA0KKyAgU0kzMjE4WF9SQU1fU0xPUEVfUklORyAgICAgICAgICAgICAgID0gNjM3LA0KKyAgU0kzMjE4WF9SQU1fU0xPUEVfREVMVEExICAgICAgICAgICAgID0gNjM4LA0KKyAgU0kzMjE4WF9SQU1fU0xPUEVfREVMVEEyICAgICAgICAgICAgID0gNjM5LA0KKyAgU0kzMjE4WF9SQU1fVl9WTElNICAgICAgICAgICAgICAgICAgID0gNjQwLA0KKyAgU0kzMjE4WF9SQU1fVl9SRkVFRCAgICAgICAgICAgICAgICAgID0gNjQxLA0KKyAgU0kzMjE4WF9SQU1fVl9JTElNICAgICAgICAgICAgICAgICAgID0gNjQyLA0KKyAgU0kzMjE4WF9SQU1fQ09OU1RfUkZFRUQgICAgICAgICAgICAgID0gNjQzLA0KKyAgU0kzMjE4WF9SQU1fQ09OU1RfSUxJTSAgICAgICAgICAgICAgID0gNjQ0LA0KKyAgU0kzMjE4WF9SQU1fSV9WTElNICAgICAgICAgICAgICAgICAgID0gNjQ1LA0KKyAgU0kzMjE4WF9SQU1fRENfREFDX0dBSU4gICAgICAgICAgICAgID0gNjQ2LA0KKyAgU0kzMjE4WF9SQU1fVkRJRkZfVEggICAgICAgICAgICAgICAgID0gNjQ3LA0KKyAgU0kzMjE4WF9SQU1fVFhERUNfQjAgICAgICAgICAgICAgICAgID0gNjQ4LA0KKyAgU0kzMjE4WF9SQU1fVFhERUNfQjEgICAgICAgICAgICAgICAgID0gNjQ5LA0KKyAgU0kzMjE4WF9SQU1fVFhERUNfQjIgICAgICAgICAgICAgICAgID0gNjUwLA0KKyAgU0kzMjE4WF9SQU1fVFhERUNfQTEgICAgICAgICAgICAgICAgID0gNjUxLA0KKyAgU0kzMjE4WF9SQU1fVFhERUNfQTIgICAgICAgICAgICAgICAgID0gNjUyLA0KKyAgU0kzMjE4WF9SQU1fWlNZTlRIX0IwICAgICAgICAgICAgICAgID0gNjUzLA0KKyAgU0kzMjE4WF9SQU1fWlNZTlRIX0IxICAgICAgICAgICAgICAgID0gNjU0LA0KKyAgU0kzMjE4WF9SQU1fWlNZTlRIX0IyICAgICAgICAgICAgICAgID0gNjU1LA0KKyAgU0kzMjE4WF9SQU1fWlNZTlRIX0ExICAgICAgICAgICAgICAgID0gNjU2LA0KKyAgU0kzMjE4WF9SQU1fWlNZTlRIX0EyICAgICAgICAgICAgICAgID0gNjU3LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0hQRl9CMF8xICAgICAgICAgICAgID0gNjU4LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0hQRl9CMV8xICAgICAgICAgICAgID0gNjU5LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0hQRl9BMV8xICAgICAgICAgICAgID0gNjYwLA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0hQRl9CMF8yICAgICAgICAgICAgID0gNjYxLA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0hQRl9CMV8yICAgICAgICAgICAgID0gNjYyLA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0hQRl9CMl8yICAgICAgICAgICAgID0gNjYzLA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0hQRl9BMV8yICAgICAgICAgICAgID0gNjY0LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0hQRl9BMl8yICAgICAgICAgICAgID0gNjY1LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0hQRl9HQUlOICAgICAgICAgICAgID0gNjY2LA0KKyAgU0kzMjE4WF9SQU1fTUFTSzdMU0IgICAgICAgICAgICAgICAgID0gNjY3LA0KKyAgU0kzMjE4WF9SQU1fUlhERUNfQjAgICAgICAgICAgICAgICAgID0gNjY4LA0KKyAgU0kzMjE4WF9SQU1fUlhERUNfQjEgICAgICAgICAgICAgICAgID0gNjY5LA0KKyAgU0kzMjE4WF9SQU1fUlhERUNfQjIgICAgICAgICAgICAgICAgID0gNjcwLA0KKyAgU0kzMjE4WF9SQU1fUlhERUNfQTEgICAgICAgICAgICAgICAgID0gNjcxLA0KKyAgU0kzMjE4WF9SQU1fUlhERUNfQTIgICAgICAgICAgICAgICAgID0gNjcyLA0KKyAgU0kzMjE4WF9SQU1fT1NDSU5UMV9CMF8xICAgICAgICAgICAgID0gNjczLA0KKyAgU0kzMjE4WF9SQU1fT1NDSU5UMV9CMV8xICAgICAgICAgICAgID0gNjc0LA0KKyAgU0kzMjE4WF9SQU1fT1NDSU5UMV9CMl8xICAgICAgICAgICAgID0gNjc1LA0KKyAgU0kzMjE4WF9SQU1fT1NDSU5UMV9BMV8xICAgICAgICAgICAgID0gNjc2LA0KKyAgU0kzMjE4WF9SQU1fT1NDSU5UMV9BMl8xICAgICAgICAgICAgID0gNjc3LA0KKyAgU0kzMjE4WF9SQU1fT1NDSU5UMV9CMF8yICAgICAgICAgICAgID0gNjc4LA0KKyAgU0kzMjE4WF9SQU1fT1NDSU5UMV9CMV8yICAgICAgICAgICAgID0gNjc5LA0KKyAgU0kzMjE4WF9SQU1fT1NDSU5UMV9CMl8yICAgICAgICAgICAgID0gNjgwLA0KKyAgU0kzMjE4WF9SQU1fT1NDSU5UMV9BMV8yICAgICAgICAgICAgID0gNjgxLA0KKyAgU0kzMjE4WF9SQU1fT1NDSU5UMV9BMl8yICAgICAgICAgICAgID0gNjgyLA0KKyAgU0kzMjE4WF9SQU1fT1NDSU5UMl9CMF8xICAgICAgICAgICAgID0gNjgzLA0KKyAgU0kzMjE4WF9SQU1fT1NDSU5UMl9CMV8xICAgICAgICAgICAgID0gNjg0LA0KKyAgU0kzMjE4WF9SQU1fT1NDSU5UMl9CMl8xICAgICAgICAgICAgID0gNjg1LA0KKyAgU0kzMjE4WF9SQU1fT1NDSU5UMl9BMV8xICAgICAgICAgICAgID0gNjg2LA0KKyAgU0kzMjE4WF9SQU1fT1NDSU5UMl9BMl8xICAgICAgICAgICAgID0gNjg3LA0KKyAgU0kzMjE4WF9SQU1fT1NDSU5UMl9CMF8yICAgICAgICAgICAgID0gNjg4LA0KKyAgU0kzMjE4WF9SQU1fT1NDSU5UMl9CMV8yICAgICAgICAgICAgID0gNjg5LA0KKyAgU0kzMjE4WF9SQU1fT1NDSU5UMl9CMl8yICAgICAgICAgICAgID0gNjkwLA0KKyAgU0kzMjE4WF9SQU1fT1NDSU5UMl9BMV8yICAgICAgICAgICAgID0gNjkxLA0KKyAgU0kzMjE4WF9SQU1fT1NDSU5UMl9BMl8yICAgICAgICAgICAgID0gNjkyLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENjkzICAgICAgICAgICAgICAgID0gNjkzLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENjk0ICAgICAgICAgICAgICAgID0gNjk0LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENjk1ICAgICAgICAgICAgICAgID0gNjk1LA0KKyAgU0kzMjE4WF9SQU1fUklOR19MUEZfQjAgICAgICAgICAgICAgID0gNjk2LA0KKyAgU0kzMjE4WF9SQU1fUklOR19MUEZfQjEgICAgICAgICAgICAgID0gNjk3LA0KKyAgU0kzMjE4WF9SQU1fUklOR19MUEZfQjIgICAgICAgICAgICAgID0gNjk4LA0KKyAgU0kzMjE4WF9SQU1fUklOR19MUEZfQTEgICAgICAgICAgICAgID0gNjk5LA0KKyAgU0kzMjE4WF9SQU1fUklOR19MUEZfQTIgICAgICAgICAgICAgID0gNzAwLA0KKyAgU0kzMjE4WF9SQU1fTENSREJJICAgICAgICAgICAgICAgICAgID0gNzAxLA0KKyAgU0kzMjE4WF9SQU1fTE9OR0RCSSAgICAgICAgICAgICAgICAgID0gNzAyLA0KKyAgU0kzMjE4WF9SQU1fVkJBVF9USU1FUiAgICAgICAgICAgICAgID0gNzAzLA0KKyAgU0kzMjE4WF9SQU1fTEZfU1BFRURVUF9USU1FUiAgICAgICAgID0gNzA0LA0KKyAgU0kzMjE4WF9SQU1fRENfU1BFRURVUF9USU1FUiAgICAgICAgID0gNzA1LA0KKyAgU0kzMjE4WF9SQU1fQUNfU1BFRURVUF9USU1FUiAgICAgICAgID0gNzA2LA0KKyAgU0kzMjE4WF9SQU1fTENSX1NQRUVEVVBfVElNRVIgICAgICAgID0gNzA3LA0KKyAgU0kzMjE4WF9SQU1fQ01fU1BFRURVUF9USU1FUiAgICAgICAgID0gNzA4LA0KKyAgU0kzMjE4WF9SQU1fVkNNX1RIICAgICAgICAgICAgICAgICAgID0gNzA5LA0KKyAgU0kzMjE4WF9SQU1fQUNfU1BFRURVUF9USCAgICAgICAgICAgID0gNzEwLA0KKyAgU0kzMjE4WF9SQU1fU1BSX1NJR18wICAgICAgICAgICAgICAgID0gNzExLA0KKyAgU0kzMjE4WF9SQU1fU1BSX1NJR18xICAgICAgICAgICAgICAgID0gNzEyLA0KKyAgU0kzMjE4WF9SQU1fU1BSX1NJR18yICAgICAgICAgICAgICAgID0gNzEzLA0KKyAgU0kzMjE4WF9SQU1fU1BSX1NJR18zICAgICAgICAgICAgICAgID0gNzE0LA0KKyAgU0kzMjE4WF9SQU1fU1BSX1NJR180ICAgICAgICAgICAgICAgID0gNzE1LA0KKyAgU0kzMjE4WF9SQU1fU1BSX1NJR181ICAgICAgICAgICAgICAgID0gNzE2LA0KKyAgU0kzMjE4WF9SQU1fU1BSX1NJR182ICAgICAgICAgICAgICAgID0gNzE3LA0KKyAgU0kzMjE4WF9SQU1fU1BSX1NJR183ICAgICAgICAgICAgICAgID0gNzE4LA0KKyAgU0kzMjE4WF9SQU1fU1BSX1NJR184ICAgICAgICAgICAgICAgID0gNzE5LA0KKyAgU0kzMjE4WF9SQU1fU1BSX1NJR185ICAgICAgICAgICAgICAgID0gNzIwLA0KKyAgU0kzMjE4WF9SQU1fU1BSX1NJR18xMCAgICAgICAgICAgICAgID0gNzIxLA0KKyAgU0kzMjE4WF9SQU1fU1BSX1NJR18xMSAgICAgICAgICAgICAgID0gNzIyLA0KKyAgU0kzMjE4WF9SQU1fU1BSX1NJR18xMiAgICAgICAgICAgICAgID0gNzIzLA0KKyAgU0kzMjE4WF9SQU1fU1BSX1NJR18xMyAgICAgICAgICAgICAgID0gNzI0LA0KKyAgU0kzMjE4WF9SQU1fU1BSX1NJR18xNCAgICAgICAgICAgICAgID0gNzI1LA0KKyAgU0kzMjE4WF9SQU1fU1BSX1NJR18xNSAgICAgICAgICAgICAgID0gNzI2LA0KKyAgU0kzMjE4WF9SQU1fU1BSX1NJR18xNiAgICAgICAgICAgICAgID0gNzI3LA0KKyAgU0kzMjE4WF9SQU1fU1BSX1NJR18xNyAgICAgICAgICAgICAgID0gNzI4LA0KKyAgU0kzMjE4WF9SQU1fU1BSX1NJR18xOCAgICAgICAgICAgICAgID0gNzI5LA0KKyAgU0kzMjE4WF9SQU1fQ09VTlRFUl9WVFJfVkFMICAgICAgICAgID0gNzMwLA0KKyAgU0kzMjE4WF9SQU1fQ09OU1RfMDI4ICAgICAgICAgICAgICAgID0gNzMxLA0KKyAgU0kzMjE4WF9SQU1fQ09OU1RfMDMyICAgICAgICAgICAgICAgID0gNzMyLA0KKyAgU0kzMjE4WF9SQU1fQ09OU1RfMDM4ICAgICAgICAgICAgICAgID0gNzMzLA0KKyAgU0kzMjE4WF9SQU1fQ09OU1RfMDQ2ICAgICAgICAgICAgICAgID0gNzM0LA0KKyAgU0kzMjE4WF9SQU1fQ09VTlRFUl9JUklOR19WQUwgICAgICAgID0gNzM1LA0KKyAgU0kzMjE4WF9SQU1fR0FJTl9SSU5HICAgICAgICAgICAgICAgID0gNzM2LA0KKyAgU0kzMjE4WF9SQU1fUklOR19IWVNUICAgICAgICAgICAgICAgID0gNzM3LA0KKyAgU0kzMjE4WF9SQU1fQ09NUF9aICAgICAgICAgICAgICAgICAgID0gNzM4LA0KKyAgU0kzMjE4WF9SQU1fQ09OU1RfMTE1ICAgICAgICAgICAgICAgID0gNzM5LA0KKyAgU0kzMjE4WF9SQU1fQ09OU1RfMTEwICAgICAgICAgICAgICAgID0gNzQwLA0KKyAgU0kzMjE4WF9SQU1fQ09OU1RfMTA1ICAgICAgICAgICAgICAgID0gNzQxLA0KKyAgU0kzMjE4WF9SQU1fQ09OU1RfMTAwICAgICAgICAgICAgICAgID0gNzQyLA0KKyAgU0kzMjE4WF9SQU1fQ09OU1RfMDk1ICAgICAgICAgICAgICAgID0gNzQzLA0KKyAgU0kzMjE4WF9SQU1fQ09OU1RfMDkwICAgICAgICAgICAgICAgID0gNzQ0LA0KKyAgU0kzMjE4WF9SQU1fQ09OU1RfMDg1ICAgICAgICAgICAgICAgID0gNzQ1LA0KKyAgU0kzMjE4WF9SQU1fVl9SQVNVTV9JREVBTCAgICAgICAgICAgID0gNzQ2LA0KKyAgU0kzMjE4WF9SQU1fQ09OU1RfT05FICAgICAgICAgICAgICAgID0gNzQ3LA0KKyAgU0kzMjE4WF9SQU1fVkNNX09IICAgICAgICAgICAgICAgICAgID0gNzQ4LA0KKyAgU0kzMjE4WF9SQU1fVkNNX1JJTkcgICAgICAgICAgICAgICAgID0gNzQ5LA0KKyAgU0kzMjE4WF9SQU1fVkNNX0hZU1QgICAgICAgICAgICAgICAgID0gNzUwLA0KKyAgU0kzMjE4WF9SQU1fVk9WX0dORCAgICAgICAgICAgICAgICAgID0gNzUxLA0KKyAgU0kzMjE4WF9SQU1fVk9WX0JBVCAgICAgICAgICAgICAgICAgID0gNzUyLA0KKyAgU0kzMjE4WF9SQU1fVk9WX1JJTkdfQkFUICAgICAgICAgICAgID0gNzUzLA0KKyAgU0kzMjE4WF9SQU1fQ01fREJJICAgICAgICAgICAgICAgICAgID0gNzU0LA0KKyAgU0kzMjE4WF9SQU1fUlRQRVIgICAgICAgICAgICAgICAgICAgID0gNzU1LA0KKyAgU0kzMjE4WF9SQU1fUF9USF9IVklDICAgICAgICAgICAgICAgID0gNzU2LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENzU3ICAgICAgICAgICAgICAgID0gNzU3LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENzU4ICAgICAgICAgICAgICAgID0gNzU4LA0KKyAgU0kzMjE4WF9SQU1fQ09FRl9QX0hWSUMgICAgICAgICAgICAgID0gNzU5LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENzYwICAgICAgICAgICAgICAgID0gNzYwLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENzYxICAgICAgICAgICAgICAgID0gNzYxLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENzYyICAgICAgICAgICAgICAgID0gNzYyLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENzYzICAgICAgICAgICAgICAgID0gNzYzLA0KKyAgU0kzMjE4WF9SQU1fQkFUX0hZU1QgICAgICAgICAgICAgICAgID0gNzY0LA0KKyAgU0kzMjE4WF9SQU1fQkFUX0RCSSAgICAgICAgICAgICAgICAgID0gNzY1LA0KKyAgU0kzMjE4WF9SQU1fVkJBVExfRVhQRUNUICAgICAgICAgICAgID0gNzY2LA0KKyAgU0kzMjE4WF9SQU1fVkJBVEhfRVhQRUNUICAgICAgICAgICAgID0gNzY3LA0KKyAgU0kzMjE4WF9SQU1fVkJBVFJfRVhQRUNUICAgICAgICAgICAgID0gNzY4LA0KKyAgU0kzMjE4WF9SQU1fQkFUX1NFVFRMRSAgICAgICAgICAgICAgID0gNzY5LA0KKyAgU0kzMjE4WF9SQU1fVkJBVF9JUlFfVEggICAgICAgICAgICAgID0gNzcwLA0KKyAgU0kzMjE4WF9SQU1fTUFEQ19WVElQQ19PUyAgICAgICAgICAgID0gNzcxLA0KKyAgU0kzMjE4WF9SQU1fTUFEQ19WUklOR0NfT1MgICAgICAgICAgID0gNzcyLA0KKyAgU0kzMjE4WF9SQU1fTUFEQ19WQkFUX09TICAgICAgICAgICAgID0gNzczLA0KKyAgU0kzMjE4WF9SQU1fTUFEQ19WTE9OR19PUyAgICAgICAgICAgID0gNzc0LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENzc1ICAgICAgICAgICAgICAgID0gNzc1LA0KKyAgU0kzMjE4WF9SQU1fTUFEQ19WRENfT1MgICAgICAgICAgICAgID0gNzc2LA0KKyAgU0kzMjE4WF9SQU1fTUFEQ19JTE9OR19PUyAgICAgICAgICAgID0gNzc3LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENzc4ICAgICAgICAgICAgICAgID0gNzc4LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENzc5ICAgICAgICAgICAgICAgID0gNzc5LA0KKyAgU0kzMjE4WF9SQU1fTUFEQ19JTE9PUF9PUyAgICAgICAgICAgID0gNzgwLA0KKyAgU0kzMjE4WF9SQU1fTUFEQ19JTE9PUF9TQ0FMRSAgICAgICAgID0gNzgxLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENzgyICAgICAgICAgICAgICAgID0gNzgyLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENzgzICAgICAgICAgICAgICAgID0gNzgzLA0KKyAgU0kzMjE4WF9SQU1fRENfQURDX09TICAgICAgICAgICAgICAgID0gNzg0LA0KKyAgU0kzMjE4WF9SQU1fQ0FMX1VOSVRZICAgICAgICAgICAgICAgID0gNzg1LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENzg2ICAgICAgICAgICAgICAgID0gNzg2LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENzg3ICAgICAgICAgICAgICAgID0gNzg3LA0KKyAgU0kzMjE4WF9SQU1fQUNBRENfT0ZGU0VUICAgICAgICAgICAgID0gNzg4LA0KKyAgU0kzMjE4WF9SQU1fQUNEQUNfT0ZGU0VUICAgICAgICAgICAgID0gNzg5LA0KKyAgU0kzMjE4WF9SQU1fQ0FMX0RDREFDX0NPREUgICAgICAgICAgID0gNzkwLA0KKyAgU0kzMjE4WF9SQU1fQ0FMX0RDREFDXzE1TUEgICAgICAgICAgID0gNzkxLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENzkyICAgICAgICAgICAgICAgID0gNzkyLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENzkzICAgICAgICAgICAgICAgID0gNzkzLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENzk0ICAgICAgICAgICAgICAgID0gNzk0LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENzk1ICAgICAgICAgICAgICAgID0gNzk1LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENzk2ICAgICAgICAgICAgICAgID0gNzk2LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENzk3ICAgICAgICAgICAgICAgID0gNzk3LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENzk4ICAgICAgICAgICAgICAgID0gNzk4LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VENzk5ICAgICAgICAgICAgICAgID0gNzk5LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEODAwICAgICAgICAgICAgICAgID0gODAwLA0KKyAgU0kzMjE4WF9SQU1fQ0FMX0xCX1RTUVVFTENIICAgICAgICAgID0gODAxLA0KKyAgU0kzMjE4WF9SQU1fQ0FMX0xCX1RDSEFSR0UgICAgICAgICAgID0gODAyLA0KKyAgU0kzMjE4WF9SQU1fQ0FMX0xCX1RTRVRUTEUwICAgICAgICAgID0gODAzLA0KKyAgU0kzMjE4WF9SQU1fQ0FMX0dPRVJUWkVMX0RMWSAgICAgICAgID0gODA0LA0KKyAgU0kzMjE4WF9SQU1fQ0FMX0dPRVJUWkVMX0FMUEhBICAgICAgID0gODA1LA0KKyAgU0kzMjE4WF9SQU1fQ0FMX0RFQ0xQRl9LICAgICAgICAgICAgID0gODA2LA0KKyAgU0kzMjE4WF9SQU1fQ0FMX0RFQ0xQRl9CMSAgICAgICAgICAgID0gODA3LA0KKyAgU0kzMjE4WF9SQU1fQ0FMX0RFQ0xQRl9CMiAgICAgICAgICAgID0gODA4LA0KKyAgU0kzMjE4WF9SQU1fQ0FMX0RFQ0xQRl9BMSAgICAgICAgICAgID0gODA5LA0KKyAgU0kzMjE4WF9SQU1fQ0FMX0RFQ0xQRl9BMiAgICAgICAgICAgID0gODEwLA0KKyAgU0kzMjE4WF9SQU1fQ0FMX0FDQURDX1RIUkwgICAgICAgICAgID0gODExLA0KKyAgU0kzMjE4WF9SQU1fQ0FMX0FDQURDX1RIUkggICAgICAgICAgID0gODEyLA0KKyAgU0kzMjE4WF9SQU1fQ0FMX0FDQURDX1RTRVRUTEUgICAgICAgID0gODEzLA0KKyAgU0kzMjE4WF9SQU1fRFRST1cwVEggICAgICAgICAgICAgICAgID0gODE0LA0KKyAgU0kzMjE4WF9SQU1fRFRST1cxVEggICAgICAgICAgICAgICAgID0gODE1LA0KKyAgU0kzMjE4WF9SQU1fRFRST1cyVEggICAgICAgICAgICAgICAgID0gODE2LA0KKyAgU0kzMjE4WF9SQU1fRFRST1czVEggICAgICAgICAgICAgICAgID0gODE3LA0KKyAgU0kzMjE4WF9SQU1fRFRDT0wwVEggICAgICAgICAgICAgICAgID0gODE4LA0KKyAgU0kzMjE4WF9SQU1fRFRDT0wxVEggICAgICAgICAgICAgICAgID0gODE5LA0KKyAgU0kzMjE4WF9SQU1fRFRDT0wyVEggICAgICAgICAgICAgICAgID0gODIwLA0KKyAgU0kzMjE4WF9SQU1fRFRDT0wzVEggICAgICAgICAgICAgICAgID0gODIxLA0KKyAgU0kzMjE4WF9SQU1fRFRGVFdUSCAgICAgICAgICAgICAgICAgID0gODIyLA0KKyAgU0kzMjE4WF9SQU1fRFRSVFdUSCAgICAgICAgICAgICAgICAgID0gODIzLA0KKyAgU0kzMjE4WF9SQU1fRFRST1dSVEggICAgICAgICAgICAgICAgID0gODI0LA0KKyAgU0kzMjE4WF9SQU1fRFRDT0xSVEggICAgICAgICAgICAgICAgID0gODI1LA0KKyAgU0kzMjE4WF9SQU1fRFRST1cySFRIICAgICAgICAgICAgICAgID0gODI2LA0KKyAgU0kzMjE4WF9SQU1fRFRDT0wySFRIICAgICAgICAgICAgICAgID0gODI3LA0KKyAgU0kzMjE4WF9SQU1fRFRNSU5QVEggICAgICAgICAgICAgICAgID0gODI4LA0KKyAgU0kzMjE4WF9SQU1fRFRIT1RUSCAgICAgICAgICAgICAgICAgID0gODI5LA0KKyAgU0kzMjE4WF9SQU1fUlhQV1IgICAgICAgICAgICAgICAgICAgID0gODMwLA0KKyAgU0kzMjE4WF9SQU1fVFhQV1IgICAgICAgICAgICAgICAgICAgID0gODMxLA0KKyAgU0kzMjE4WF9SQU1fUlhNT0RQV1IgICAgICAgICAgICAgICAgID0gODMyLA0KKyAgU0kzMjE4WF9SQU1fVFhNT0RQV1IgICAgICAgICAgICAgICAgID0gODMzLA0KKyAgU0kzMjE4WF9SQU1fRlNLRlJFUTAgICAgICAgICAgICAgICAgID0gODM0LA0KKyAgU0kzMjE4WF9SQU1fRlNLRlJFUTEgICAgICAgICAgICAgICAgID0gODM1LA0KKyAgU0kzMjE4WF9SQU1fRlNLQU1QMCAgICAgICAgICAgICAgICAgID0gODM2LA0KKyAgU0kzMjE4WF9SQU1fRlNLQU1QMSAgICAgICAgICAgICAgICAgID0gODM3LA0KKyAgU0kzMjE4WF9SQU1fRlNLMDEgICAgICAgICAgICAgICAgICAgID0gODM4LA0KKyAgU0kzMjE4WF9SQU1fRlNLMTAgICAgICAgICAgICAgICAgICAgID0gODM5LA0KKyAgU0kzMjE4WF9SQU1fVk9DREVMVEEgICAgICAgICAgICAgICAgID0gODQwLA0KKyAgU0kzMjE4WF9SQU1fVk9DTFRIICAgICAgICAgICAgICAgICAgID0gODQxLA0KKyAgU0kzMjE4WF9SQU1fVk9DSFRIICAgICAgICAgICAgICAgICAgID0gODQyLA0KKyAgU0kzMjE4WF9SQU1fUklOR09GICAgICAgICAgICAgICAgICAgID0gODQzLA0KKyAgU0kzMjE4WF9SQU1fUklOR0ZSICAgICAgICAgICAgICAgICAgID0gODQ0LA0KKyAgU0kzMjE4WF9SQU1fUklOR0FNUCAgICAgICAgICAgICAgICAgID0gODQ1LA0KKyAgU0kzMjE4WF9SQU1fUklOR1BIQVMgICAgICAgICAgICAgICAgID0gODQ2LA0KKyAgU0kzMjE4WF9SQU1fUlREQ1RIICAgICAgICAgICAgICAgICAgID0gODQ3LA0KKyAgU0kzMjE4WF9SQU1fUlRBQ1RIICAgICAgICAgICAgICAgICAgID0gODQ4LA0KKyAgU0kzMjE4WF9SQU1fUlREQ0RCICAgICAgICAgICAgICAgICAgID0gODQ5LA0KKyAgU0kzMjE4WF9SQU1fUlRBQ0RCICAgICAgICAgICAgICAgICAgID0gODUwLA0KKyAgU0kzMjE4WF9SQU1fUlRDT1VOVCAgICAgICAgICAgICAgICAgID0gODUxLA0KKyAgU0kzMjE4WF9SQU1fTENST0ZGSEsgICAgICAgICAgICAgICAgID0gODUyLA0KKyAgU0kzMjE4WF9SQU1fTENST05ISyAgICAgICAgICAgICAgICAgID0gODUzLA0KKyAgU0kzMjE4WF9SQU1fTENSTUFTSyAgICAgICAgICAgICAgICAgID0gODU0LA0KKyAgU0kzMjE4WF9SQU1fTENSTUFTS19QT0xSRVYgICAgICAgICAgID0gODU1LA0KKyAgU0kzMjE4WF9SQU1fTENSTUFTS19TVEFURSAgICAgICAgICAgID0gODU2LA0KKyAgU0kzMjE4WF9SQU1fTENSTUFTS19MSU5FQ0FQICAgICAgICAgID0gODU3LA0KKyAgU0kzMjE4WF9SQU1fTE9OR0hJVEggICAgICAgICAgICAgICAgID0gODU4LA0KKyAgU0kzMjE4WF9SQU1fTE9OR0xPVEggICAgICAgICAgICAgICAgID0gODU5LA0KKyAgU0kzMjE4WF9SQU1fSVJJTkdfTElNICAgICAgICAgICAgICAgID0gODYwLA0KKyAgU0kzMjE4WF9SQU1fQUNfUFVfREVMVEExICAgICAgICAgICAgID0gODYxLA0KKyAgU0kzMjE4WF9SQU1fQUNfUFVfREVMVEEyICAgICAgICAgICAgID0gODYyLA0KKyAgU0kzMjE4WF9SQU1fRElBR19MUEZfOEsgICAgICAgICAgICAgID0gODYzLA0KKyAgU0kzMjE4WF9SQU1fRElBR19MUEZfMTI4SyAgICAgICAgICAgID0gODY0LA0KKyAgU0kzMjE4WF9SQU1fRElBR19JTlZfTiAgICAgICAgICAgICAgID0gODY1LA0KKyAgU0kzMjE4WF9SQU1fRElBR19HQUlOICAgICAgICAgICAgICAgID0gODY2LA0KKyAgU0kzMjE4WF9SQU1fRElBR19HX0NBTCAgICAgICAgICAgICAgID0gODY3LA0KKyAgU0kzMjE4WF9SQU1fRElBR19PU19DQUwgICAgICAgICAgICAgID0gODY4LA0KKyAgU0kzMjE4WF9SQU1fU1BSX0dBSU5fVFJJTSAgICAgICAgICAgID0gODY5LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEODcwICAgICAgICAgICAgICAgID0gODcwLA0KKyAgU0kzMjE4WF9SQU1fQUNfREFDX0dBSU4gICAgICAgICAgICAgID0gODcxLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEODcyICAgICAgICAgICAgICAgID0gODcyLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEODczICAgICAgICAgICAgICAgID0gODczLA0KKyAgU0kzMjE4WF9SQU1fQUNfREFDX0dBSU4wICAgICAgICAgICAgID0gODc0LA0KKyAgU0kzMjE4WF9SQU1fRVpTWU5USF9CMCAgICAgICAgICAgICAgID0gODc1LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEODc2ICAgICAgICAgICAgICAgID0gODc2LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEODc3ICAgICAgICAgICAgICAgID0gODc3LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEODc4ICAgICAgICAgICAgICAgID0gODc4LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEODc5ICAgICAgICAgICAgICAgID0gODc5LA0KKyAgU0kzMjE4WF9SQU1fQUNfQURDX0dBSU4gICAgICAgICAgICAgID0gODgwLA0KKyAgU0kzMjE4WF9SQU1fSUxPT1AxTFBGICAgICAgICAgICAgICAgID0gODgxLA0KKyAgU0kzMjE4WF9SQU1fUklOR19GTFVTSF9USU1FUiAgICAgICAgID0gODgyLA0KKyAgU0kzMjE4WF9SQU1fQUxBV19CSUFTICAgICAgICAgICAgICAgID0gODgzLA0KKyAgU0kzMjE4WF9SQU1fTUFEQ19WVFJDX1NDQUxFICAgICAgICAgID0gODg0LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEODg1ICAgICAgICAgICAgICAgID0gODg1LA0KKyAgU0kzMjE4WF9SQU1fTUFEQ19WQkFUX1NDQUxFICAgICAgICAgID0gODg2LA0KKyAgU0kzMjE4WF9SQU1fTUFEQ19WTE9OR19TQ0FMRSAgICAgICAgID0gODg3LA0KKyAgU0kzMjE4WF9SQU1fTUFEQ19WTE9OR19TQ0FMRV9SSU5HICAgID0gODg4LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEODg5ICAgICAgICAgICAgICAgID0gODg5LA0KKyAgU0kzMjE4WF9SQU1fTUFEQ19WRENfU0NBTEUgICAgICAgICAgID0gODkwLA0KKyAgU0kzMjE4WF9SQU1fTUFEQ19JTE9OR19TQ0FMRSAgICAgICAgID0gODkxLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEODkyICAgICAgICAgICAgICAgID0gODkyLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEODkzICAgICAgICAgICAgICAgID0gODkzLA0KKyAgU0kzMjE4WF9SQU1fVkRJRkZfU0VOU0VfU0NBTEUgICAgICAgID0gODk0LA0KKyAgU0kzMjE4WF9SQU1fVkRJRkZfU0VOU0VfU0NBTEVfUklORyAgID0gODk1LA0KKyAgU0kzMjE4WF9SQU1fVk9WX1JJTkdfR05EICAgICAgICAgICAgID0gODk2LA0KKyAgU0kzMjE4WF9SQU1fRElBR19HQUlOX0RDICAgICAgICAgICAgID0gODk3LA0KKyAgU0kzMjE4WF9SQU1fQ0FMX0xCX09TQzFfRlJFUSAgICAgICAgID0gODk4LA0KKyAgU0kzMjE4WF9SQU1fQ0FMX0RDREFDXzlUQVUgICAgICAgICAgID0gODk5LA0KKyAgU0kzMjE4WF9SQU1fQ0FMX01BRENfOVRBVSAgICAgICAgICAgID0gOTAwLA0KKyAgU0kzMjE4WF9SQU1fQURBUF9SSU5HX01JTl9JICAgICAgICAgID0gOTAxLA0KKyAgU0kzMjE4WF9SQU1fU1dFRVBfU1RFUCAgICAgICAgICAgICAgID0gOTAyLA0KKyAgU0kzMjE4WF9SQU1fU1dFRVBfU1RFUF9TQVZFICAgICAgICAgID0gOTAzLA0KKyAgU0kzMjE4WF9SQU1fU1dFRVBfUkVGICAgICAgICAgICAgICAgID0gOTA0LA0KKyAgU0kzMjE4WF9SQU1fQU1QX1NURVAgICAgICAgICAgICAgICAgID0gOTA1LA0KKyAgU0kzMjE4WF9SQU1fUlhBQ0dBSU5fU0FWRSAgICAgICAgICAgID0gOTA2LA0KKyAgU0kzMjE4WF9SQU1fQU1QX1JBTVBfSU5JVCAgICAgICAgICAgID0gOTA3LA0KKyAgU0kzMjE4WF9SQU1fRElBR19IUEZfR0FJTiAgICAgICAgICAgID0gOTA4LA0KKyAgU0kzMjE4WF9SQU1fRElBR19IUEZfOEsgICAgICAgICAgICAgID0gOTA5LA0KKyAgU0kzMjE4WF9SQU1fRElBR19BREpfU1RFUCAgICAgICAgICAgID0gOTEwLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEOTExICAgICAgICAgICAgICAgID0gOTExLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEOTEyICAgICAgICAgICAgICAgID0gOTEyLA0KKyAgU0kzMjE4WF9SQU1fTUFEQ19TQ0FMRV9JTlYgICAgICAgICAgID0gOTEzLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEOTE0ICAgICAgICAgICAgICAgID0gOTE0LA0KKyAgU0kzMjE4WF9SQU1fUFdSU0FWRV9USU1FUiAgICAgICAgICAgID0gOTE1LA0KKyAgU0kzMjE4WF9SQU1fT0ZGSE9PS19USFJFU0ggICAgICAgICAgID0gOTE2LA0KKyAgU0kzMjE4WF9SQU1fU1BFRURVUF9NQVNLX1RJTUVSICAgICAgID0gOTE3LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEOTE4ICAgICAgICAgICAgICAgID0gOTE4LA0KKyAgU0kzMjE4WF9SQU1fVkJBVF9UUkFDS19NSU4gICAgICAgICAgID0gOTE5LA0KKyAgU0kzMjE4WF9SQU1fVkJBVF9UUkFDS19NSU5fUk5HICAgICAgID0gOTIwLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEOTIxICAgICAgICAgICAgICAgID0gOTIxLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEOTIyICAgICAgICAgICAgICAgID0gOTIyLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEOTIzICAgICAgICAgICAgICAgID0gOTIzLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEOTI0ICAgICAgICAgICAgICAgID0gOTI0LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEOTI1ICAgICAgICAgICAgICAgID0gOTI1LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEOTI2ICAgICAgICAgICAgICAgID0gOTI2LA0KKyAgU0kzMjE4WF9SQU1fRENfSE9MRF9EQUNfT1MgICAgICAgICAgID0gOTI3LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEOTI4ICAgICAgICAgICAgICAgID0gOTI4LA0KKyAgU0kzMjE4WF9SQU1fTk9UQ0hfQjAgICAgICAgICAgICAgICAgID0gOTI5LA0KKyAgU0kzMjE4WF9SQU1fTk9UQ0hfQjEgICAgICAgICAgICAgICAgID0gOTMwLA0KKyAgU0kzMjE4WF9SQU1fTk9UQ0hfQjIgICAgICAgICAgICAgICAgID0gOTMxLA0KKyAgU0kzMjE4WF9SQU1fTk9UQ0hfQTEgICAgICAgICAgICAgICAgID0gOTMyLA0KKyAgU0kzMjE4WF9SQU1fTk9UQ0hfQTIgICAgICAgICAgICAgICAgID0gOTMzLA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfTFBGX0IwICAgICAgICAgICAgID0gOTM0LA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfTFBGX0IxICAgICAgICAgICAgID0gOTM1LA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfTFBGX0IyICAgICAgICAgICAgID0gOTM2LA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfTFBGX0ExICAgICAgICAgICAgID0gOTM3LA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfTFBGX0EyICAgICAgICAgICAgID0gOTM4LA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfU0lHXzAgICAgICAgICAgICAgID0gOTM5LA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfU0lHXzEgICAgICAgICAgICAgID0gOTQwLA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfU0lHXzIgICAgICAgICAgICAgID0gOTQxLA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfU0lHXzMgICAgICAgICAgICAgID0gOTQyLA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfU0lHXzQgICAgICAgICAgICAgID0gOTQzLA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfU0lHXzUgICAgICAgICAgICAgID0gOTQ0LA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfU0lHXzYgICAgICAgICAgICAgID0gOTQ1LA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfU0lHXzcgICAgICAgICAgICAgID0gOTQ2LA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfU0lHXzggICAgICAgICAgICAgID0gOTQ3LA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfU0lHXzkgICAgICAgICAgICAgID0gOTQ4LA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfU0lHXzEwICAgICAgICAgICAgID0gOTQ5LA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfU0lHXzExICAgICAgICAgICAgID0gOTUwLA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfU0lHXzEyICAgICAgICAgICAgID0gOTUxLA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfU0lHXzEzICAgICAgICAgICAgID0gOTUyLA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfU0lHXzE0ICAgICAgICAgICAgID0gOTUzLA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfU0lHXzE1ICAgICAgICAgICAgID0gOTU0LA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfQlBfQjAgICAgICAgICAgICAgID0gOTU1LA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfQlBfQjEgICAgICAgICAgICAgID0gOTU2LA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfQlBfQjIgICAgICAgICAgICAgID0gOTU3LA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfQlBfQTEgICAgICAgICAgICAgID0gOTU4LA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfQlBfQTIgICAgICAgICAgICAgID0gOTU5LA0KKyAgU0kzMjE4WF9SQU1fUE1fQU1QX1RIUkVTSCAgICAgICAgICAgID0gOTYwLA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfR0FJTiAgICAgICAgICAgICAgID0gOTYxLA0KKyAgU0kzMjE4WF9SQU1fUFdSU0FWRV9EQkkgICAgICAgICAgICAgID0gOTYyLA0KKyAgU0kzMjE4WF9SQU1fRENEQ19BTkFfU0NBTEUgICAgICAgICAgID0gOTYzLA0KKyAgU0kzMjE4WF9SQU1fVk9WX0JBVF9QV1JTQVZFX0xPICAgICAgID0gOTY0LA0KKyAgU0kzMjE4WF9SQU1fVk9WX0JBVF9QV1JTQVZFX0hJICAgICAgID0gOTY1LA0KKyAgU0kzMjE4WF9SQU1fQUNfQURDX0dBSU4wICAgICAgICAgICAgID0gOTY2LA0KKyAgU0kzMjE4WF9SQU1fU0NBTEVfS0FVRElPICAgICAgICAgICAgID0gOTY3LA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfR0FJTl9URU1QICAgICAgICAgID0gOTY4LA0KKyAgU0kzMjE4WF9SQU1fTUVURVJfUkFNUF9TVEVQICAgICAgICAgID0gOTY5LA0KKyAgU0kzMjE4WF9SQU1fVEhFUk1fREJJICAgICAgICAgICAgICAgID0gOTcwLA0KKyAgU0kzMjE4WF9SQU1fTFBSX1NDQUxFICAgICAgICAgICAgICAgID0gOTcxLA0KKyAgU0kzMjE4WF9SQU1fTFBSX0NNX09TICAgICAgICAgICAgICAgID0gOTcyLA0KKyAgU0kzMjE4WF9SQU1fVk9WX0RDRENfU0xPUEUgICAgICAgICAgID0gOTczLA0KKyAgU0kzMjE4WF9SQU1fVk9WX0RDRENfT1MgICAgICAgICAgICAgID0gOTc0LA0KKyAgU0kzMjE4WF9SQU1fVk9WX1JJTkdfQkFUX01BWCAgICAgICAgID0gOTc1LA0KKyAgU0kzMjE4WF9SQU1fU0xPUEVfVkxJTTEgICAgICAgICAgICAgID0gOTc2LA0KKyAgU0kzMjE4WF9SQU1fU0xPUEVfUkZFRUQxICAgICAgICAgICAgID0gOTc3LA0KKyAgU0kzMjE4WF9SQU1fU0xPUEVfSUxJTTEgICAgICAgICAgICAgID0gOTc4LA0KKyAgU0kzMjE4WF9SQU1fVl9WTElNMSAgICAgICAgICAgICAgICAgID0gOTc5LA0KKyAgU0kzMjE4WF9SQU1fVl9SRkVFRDEgICAgICAgICAgICAgICAgID0gOTgwLA0KKyAgU0kzMjE4WF9SQU1fVl9JTElNMSAgICAgICAgICAgICAgICAgID0gOTgxLA0KKyAgU0kzMjE4WF9SQU1fQ09OU1RfUkZFRUQxICAgICAgICAgICAgID0gOTgyLA0KKyAgU0kzMjE4WF9SQU1fQ09OU1RfSUxJTTEgICAgICAgICAgICAgID0gOTgzLA0KKyAgU0kzMjE4WF9SQU1fSV9WTElNMSAgICAgICAgICAgICAgICAgID0gOTg0LA0KKyAgU0kzMjE4WF9SQU1fU0xPUEVfVkxJTTIgICAgICAgICAgICAgID0gOTg1LA0KKyAgU0kzMjE4WF9SQU1fU0xPUEVfUkZFRUQyICAgICAgICAgICAgID0gOTg2LA0KKyAgU0kzMjE4WF9SQU1fU0xPUEVfSUxJTTIgICAgICAgICAgICAgID0gOTg3LA0KKyAgU0kzMjE4WF9SQU1fVl9WTElNMiAgICAgICAgICAgICAgICAgID0gOTg4LA0KKyAgU0kzMjE4WF9SQU1fVl9SRkVFRDIgICAgICAgICAgICAgICAgID0gOTg5LA0KKyAgU0kzMjE4WF9SQU1fVl9JTElNMiAgICAgICAgICAgICAgICAgID0gOTkwLA0KKyAgU0kzMjE4WF9SQU1fQ09OU1RfUkZFRUQyICAgICAgICAgICAgID0gOTkxLA0KKyAgU0kzMjE4WF9SQU1fQ09OU1RfSUxJTTIgICAgICAgICAgICAgID0gOTkyLA0KKyAgU0kzMjE4WF9SQU1fSV9WTElNMiAgICAgICAgICAgICAgICAgID0gOTkzLA0KKyAgU0kzMjE4WF9SQU1fRElBR19WX1RBUiAgICAgICAgICAgICAgID0gOTk0LA0KKyAgU0kzMjE4WF9SQU1fRElBR19WX1RBUjIgICAgICAgICAgICAgID0gOTk1LA0KKyAgU0kzMjE4WF9SQU1fU1RPUF9USU1FUjFfVkFMICAgICAgICAgID0gOTk2LA0KKyAgU0kzMjE4WF9SQU1fU1RPUF9USU1FUjJfVkFMICAgICAgICAgID0gOTk3LA0KKyAgU0kzMjE4WF9SQU1fRElBR19WQ00xX1RBUiAgICAgICAgICAgID0gOTk4LA0KKyAgU0kzMjE4WF9SQU1fRElBR19WQ01fU1RFUCAgICAgICAgICAgID0gOTk5LA0KKyAgU0kzMjE4WF9SQU1fTEtHX0ROVF9ISVJFUyAgICAgICAgICAgID0gMTAwMCwNCisgIFNJMzIxOFhfUkFNX0xLR19ETlJfSElSRVMgICAgICAgICAgICA9IDEwMDEsDQorICBTSTMyMThYX1JBTV9MSU5FQVJfT1MgICAgICAgICAgICAgICAgPSAxMDAyLA0KKyAgU0kzMjE4WF9SQU1fQ1BVTVBfREVCICAgICAgICAgICAgICAgID0gMTAwMywNCisgIFNJMzIxOFhfUkFNX0RDRENfVkVSUiAgICAgICAgICAgICAgICA9IDEwMDQsDQorICBTSTMyMThYX1JBTV9EQ0RDX1ZFUlJfSFlTVCAgICAgICAgICAgPSAxMDA1LA0KKyAgU0kzMjE4WF9SQU1fRENEQ19PSVRIUkVTSF9MTyAgICAgICAgID0gMTAwNiwNCisgIFNJMzIxOFhfUkFNX0RDRENfT0lUSFJFU0hfSEkgICAgICAgICA9IDEwMDcsDQorICBTSTMyMThYX1JBTV9IVl9CSUFTX09OSEsgICAgICAgICAgICAgPSAxMDA4LA0KKyAgU0kzMjE4WF9SQU1fSFZfQklBU19PRkZISyAgICAgICAgICAgID0gMTAwOSwNCisgIFNJMzIxOFhfUkFNX1VOVVNFRDEwMTAgICAgICAgICAgICAgICA9IDEwMTAsDQorICBTSTMyMThYX1JBTV9VTlVTRUQxMDExICAgICAgICAgICAgICAgPSAxMDExLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEMTAxMiAgICAgICAgICAgICAgID0gMTAxMiwNCisgIFNJMzIxOFhfUkFNX1VOVVNFRDEwMTMgICAgICAgICAgICAgICA9IDEwMTMsDQorICBTSTMyMThYX1JBTV9JTE9OR19SVF9USFJFU0ggICAgICAgICAgPSAxMDE0LA0KKyAgU0kzMjE4WF9SQU1fVk9WX1JJTkdfQkFUX0RDREMgICAgICAgID0gMTAxNSwNCisgIFNJMzIxOFhfUkFNX1VOVVNFRDEwMTYgICAgICAgICAgICAgICA9IDEwMTYsDQorICBTSTMyMThYX1JBTV9MS0dfTEJfT0ZGU0VUICAgICAgICAgICAgPSAxMDE3LA0KKyAgU0kzMjE4WF9SQU1fTEtHX09GSEtfT0ZGU0VUICAgICAgICAgID0gMTAxOCwNCisgIFNJMzIxOFhfUkFNX1NXRUVQX0ZSRVFfVEggICAgICAgICAgICA9IDEwMTksDQorICBTSTMyMThYX1JBTV9BTVBfTU9EX0cgICAgICAgICAgICAgICAgPSAxMDIwLA0KKyAgU0kzMjE4WF9SQU1fQU1QX01PRF9PUyAgICAgICAgICAgICAgID0gMTAyMSwNCisgIFNJMzIxOFhfUkFNX1VOVVNFRDEwMjIgICAgICAgICAgICAgICA9IDEwMjIsDQorICBTSTMyMThYX1JBTV9VTlVTRUQxMDIzICAgICAgICAgICAgICAgPSAxMDIzLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEX1JFRzI1NiAgICAgICAgICAgID0gMTI4MCwNCisgIFNJMzIxOFhfUkFNX0RBQ19JTiAgICAgICAgICAgICAgICAgICA9IDEyODEsDQorICBTSTMyMThYX1JBTV9BRENfT1VUICAgICAgICAgICAgICAgICAgPSAxMjgyLA0KKyAgU0kzMjE4WF9SQU1fUEFTUzEgICAgICAgICAgICAgICAgICAgID0gMTI4MywNCisgIFNJMzIxOFhfUkFNX1RYX0FDX0lOVCAgICAgICAgICAgICAgICA9IDEyODQsDQorICBTSTMyMThYX1JBTV9SWF9BQ19ESUZGICAgICAgICAgICAgICAgPSAxMjg1LA0KKyAgU0kzMjE4WF9SQU1fSU5ESVJFQ1RfV1IgICAgICAgICAgICAgID0gMTI4NiwNCisgIFNJMzIxOFhfUkFNX0lORElSRUNUX1JEICAgICAgICAgICAgICA9IDEyODcsDQorICBTSTMyMThYX1JBTV9CWVBBU1NfT1VUICAgICAgICAgICAgICAgPSAxMjg4LA0KKyAgU0kzMjE4WF9SQU1fQUNDICAgICAgICAgICAgICAgICAgICAgID0gMTI4OSwNCisgIFNJMzIxOFhfUkFNX0lORElSRUNUX1JBTV9BICAgICAgICAgICA9IDEyOTAsDQorICBTSTMyMThYX1JBTV9JTkRJUkVDVF9SQU1fQiAgICAgICAgICAgPSAxMjkxLA0KKyAgU0kzMjE4WF9SQU1fSE9UX0JJVDEgICAgICAgICAgICAgICAgID0gMTI5MiwNCisgIFNJMzIxOFhfUkFNX0hPVF9CSVQwICAgICAgICAgICAgICAgICA9IDEyOTMsDQorICBTSTMyMThYX1JBTV9QQVNTMF9ST1dfUFdSICAgICAgICAgICAgPSAxMjk0LA0KKyAgU0kzMjE4WF9SQU1fUEFTUzBfQ09MX1BXUiAgICAgICAgICAgID0gMTI5NSwNCisgIFNJMzIxOFhfUkFNX1BBU1MwX1JPVyAgICAgICAgICAgICAgICA9IDEyOTYsDQorICBTSTMyMThYX1JBTV9QQVNTMF9DT0wgICAgICAgICAgICAgICAgPSAxMjk3LA0KKyAgU0kzMjE4WF9SQU1fUEFTUzBfUk9XX1JFTCAgICAgICAgICAgID0gMTI5OCwNCisgIFNJMzIxOFhfUkFNX1BBU1MwX0NPTF9SRUwgICAgICAgICAgICA9IDEyOTksDQorICBTSTMyMThYX1JBTV9QQVNTMF9ST1dfMk5EICAgICAgICAgICAgPSAxMzAwLA0KKyAgU0kzMjE4WF9SQU1fUEFTUzBfQ09MXzJORCAgICAgICAgICAgID0gMTMwMSwNCisgIFNJMzIxOFhfUkFNX1BBU1MwX1JFVl9UVyAgICAgICAgICAgICA9IDEzMDIsDQorICBTSTMyMThYX1JBTV9QQVNTMF9GV0RfVFcgICAgICAgICAgICAgPSAxMzAzLA0KKyAgU0kzMjE4WF9SQU1fREFBX0FEQ19PVVQgICAgICAgICAgICAgID0gMTMwNCwNCisgIFNJMzIxOFhfUkFNX0NBTF9DTV9CQUxfVEVTVCAgICAgICAgICA9IDEzMDUsDQorICBTSTMyMThYX1JBTV9VTlVTRURfUkVHMjgyICAgICAgICAgICAgPSAxMzA2LA0KKyAgU0kzMjE4WF9SQU1fVE9ORTEgICAgICAgICAgICAgICAgICAgID0gMTMwNywNCisgIFNJMzIxOFhfUkFNX1RPTkUyICAgICAgICAgICAgICAgICAgICA9IDEzMDgsDQorICBTSTMyMThYX1JBTV9SSU5HX1RSSUcgICAgICAgICAgICAgICAgPSAxMzA5LA0KKyAgU0kzMjE4WF9SQU1fVkNNX0RBQyAgICAgICAgICAgICAgICAgID0gMTMxMCwNCisgIFNJMzIxOFhfUkFNX1VOVVNFRF9SRUcyODcgICAgICAgICAgICA9IDEzMTEsDQorICBTSTMyMThYX1JBTV9SSU5HX0RBQyAgICAgICAgICAgICAgICAgPSAxMzEyLA0KKyAgU0kzMjE4WF9SQU1fVlJJTkdfQ1JPU1NJTkcgICAgICAgICAgID0gMTMxMywNCisgIFNJMzIxOFhfUkFNX1VOVVNFRF9SRUcyOTAgICAgICAgICAgICA9IDEzMTQsDQorICBTSTMyMThYX1JBTV9MSU5FRkVFRF9TSEFET1cgICAgICAgICAgPSAxMzE1LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEX1JFRzI5MiAgICAgICAgICAgID0gMTMxNiwNCisgIFNJMzIxOFhfUkFNX1VOVVNFRF9SRUcyOTMgICAgICAgICAgICA9IDEzMTcsDQorICBTSTMyMThYX1JBTV9VTlVTRURfUkVHMjk0ICAgICAgICAgICAgPSAxMzE4LA0KKyAgU0kzMjE4WF9SQU1fUk9XX0RJR0lUICAgICAgICAgICAgICAgID0gMTMxOSwNCisgIFNJMzIxOFhfUkFNX0NPTF9ESUdJVCAgICAgICAgICAgICAgICA9IDEzMjAsDQorICBTSTMyMThYX1JBTV9VTlVTRURfUkVHMjk3ICAgICAgICAgICAgPSAxMzIxLA0KKyAgU0kzMjE4WF9SQU1fUFExX0lSUSAgICAgICAgICAgICAgICAgID0gMTMyMiwNCisgIFNJMzIxOFhfUkFNX1BRMl9JUlEgICAgICAgICAgICAgICAgICA9IDEzMjMsDQorICBTSTMyMThYX1JBTV9QUTNfSVJRICAgICAgICAgICAgICAgICAgPSAxMzI0LA0KKyAgU0kzMjE4WF9SQU1fUFE0X0lSUSAgICAgICAgICAgICAgICAgID0gMTMyNSwNCisgIFNJMzIxOFhfUkFNX1BRNV9JUlEgICAgICAgICAgICAgICAgICA9IDEzMjYsDQorICBTSTMyMThYX1JBTV9QUTZfSVJRICAgICAgICAgICAgICAgICAgPSAxMzI3LA0KKyAgU0kzMjE4WF9SQU1fTENSX1NFVCAgICAgICAgICAgICAgICAgID0gMTMyOCwNCisgIFNJMzIxOFhfUkFNX0xDUl9DTFIgICAgICAgICAgICAgICAgICA9IDEzMjksDQorICBTSTMyMThYX1JBTV9SVFBfU0VUICAgICAgICAgICAgICAgICAgPSAxMzMwLA0KKyAgU0kzMjE4WF9SQU1fTE9OR19TRVQgICAgICAgICAgICAgICAgID0gMTMzMSwNCisgIFNJMzIxOFhfUkFNX0xPTkdfQ0xSICAgICAgICAgICAgICAgICA9IDEzMzIsDQorICBTSTMyMThYX1JBTV9WRElGRl9JUlEgICAgICAgICAgICAgICAgPSAxMzMzLA0KKyAgU0kzMjE4WF9SQU1fTU9ERkVFRF9TRVQgICAgICAgICAgICAgID0gMTMzNCwNCisgIFNJMzIxOFhfUkFNX01PREZFRURfQ0xSICAgICAgICAgICAgICA9IDEzMzUsDQorICBTSTMyMThYX1JBTV9MRl9TUEVFRFVQX1NFVCAgICAgICAgICAgPSAxMzM2LA0KKyAgU0kzMjE4WF9SQU1fTEZfU1BFRURVUF9DTFIgICAgICAgICAgID0gMTMzNywNCisgIFNJMzIxOFhfUkFNX0RDX1NQRUVEVVBfU0VUICAgICAgICAgICA9IDEzMzgsDQorICBTSTMyMThYX1JBTV9EQ19TUEVFRFVQX0NMUiAgICAgICAgICAgPSAxMzM5LA0KKyAgU0kzMjE4WF9SQU1fQUNfU1BFRURVUF9TRVQgICAgICAgICAgID0gMTM0MCwNCisgIFNJMzIxOFhfUkFNX0FDX1NQRUVEVVBfQ0xSICAgICAgICAgICA9IDEzNDEsDQorICBTSTMyMThYX1JBTV9MQ1JfU1BFRURVUF9TRVQgICAgICAgICAgPSAxMzQyLA0KKyAgU0kzMjE4WF9SQU1fTENSX1NQRUVEVVBfQ0xSICAgICAgICAgID0gMTM0MywNCisgIFNJMzIxOFhfUkFNX0NNX1NQRUVEVVBfU0VUICAgICAgICAgICA9IDEzNDQsDQorICBTSTMyMThYX1JBTV9DTV9TUEVFRFVQX0NMUiAgICAgICAgICAgPSAxMzQ1LA0KKyAgU0kzMjE4WF9SQU1fTU9ERU1QQVNTMCAgICAgICAgICAgICAgID0gMTM0NiwNCisgIFNJMzIxOFhfUkFNX1JYMjEwMF9QQVNTMV9QV1IgICAgICAgICA9IDEzNDcsDQorICBTSTMyMThYX1JBTV9SWDIxMDBfUEFTUzFfVEhSICAgICAgICAgPSAxMzQ4LA0KKyAgU0kzMjE4WF9SQU1fVFgyMTAwX1BBU1MxX1BXUiAgICAgICAgID0gMTM0OSwNCisgIFNJMzIxOFhfUkFNX1RYMjEwMF9QQVNTMV9USFIgICAgICAgICA9IDEzNTAsDQorICBTSTMyMThYX1JBTV9UWE1ETV9UUklHICAgICAgICAgICAgICAgPSAxMzUxLA0KKyAgU0kzMjE4WF9SQU1fUlhNRE1fVFJJRyAgICAgICAgICAgICAgID0gMTM1MiwNCisgIFNJMzIxOFhfUkFNX1VOVVNFRF9SRUczMjkgICAgICAgICAgICA9IDEzNTMsDQorICBTSTMyMThYX1JBTV9UWF9GSUxUX0NMUiAgICAgICAgICAgICAgPSAxMzU0LA0KKyAgU0kzMjE4WF9SQU1fVFhfRENfSU5UICAgICAgICAgICAgICAgID0gMTM1NSwNCisgIFNJMzIxOFhfUkFNX1JYX0RDX01PRF9JTiAgICAgICAgICAgICA9IDEzNTYsDQorICBTSTMyMThYX1JBTV9EU1BfQUNDRVNTICAgICAgICAgICAgICAgPSAxMzU3LA0KKyAgU0kzMjE4WF9SQU1fUFJBTV9BRERSICAgICAgICAgICAgICAgID0gMTM1OCwNCisgIFNJMzIxOFhfUkFNX1BSQU1fREFUQSAgICAgICAgICAgICAgICA9IDEzNTksDQorICBTSTMyMThYX1JBTV9JTkRfUkFNX0FfQkFTRSAgICAgICAgICAgPSAxMzYwLA0KKyAgU0kzMjE4WF9SQU1fSU5EX1JBTV9BX0FERFIgICAgICAgICAgID0gMTM2MSwNCisgIFNJMzIxOFhfUkFNX0lORF9SQU1fQV9NT0QgICAgICAgICAgICA9IDEzNjIsDQorICBTSTMyMThYX1JBTV9JTkRfUkFNX0JfQkFTRSAgICAgICAgICAgPSAxMzYzLA0KKyAgU0kzMjE4WF9SQU1fSU5EX1JBTV9CX0FERFIgICAgICAgICAgID0gMTM2NCwNCisgIFNJMzIxOFhfUkFNX0lORF9SQU1fQl9NT0QgICAgICAgICAgICA9IDEzNjUsDQorICBTSTMyMThYX1JBTV9VTlVTRURfUkVHMzQyICAgICAgICAgICAgPSAxMzY2LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEX1JFRzM0MyAgICAgICAgICAgID0gMTM2NywNCisgIFNJMzIxOFhfUkFNX1VOVVNFRF9SRUczNDQgICAgICAgICAgICA9IDEzNjgsDQorICBTSTMyMThYX1JBTV9VU0VSX0IwICAgICAgICAgICAgICAgICAgPSAxMzY5LA0KKyAgU0kzMjE4WF9SQU1fVVNFUl9CMSAgICAgICAgICAgICAgICAgID0gMTM3MCwNCisgIFNJMzIxOFhfUkFNX1VTRVJfQjIgICAgICAgICAgICAgICAgICA9IDEzNzEsDQorICBTSTMyMThYX1JBTV9VU0VSX0IzICAgICAgICAgICAgICAgICAgPSAxMzcyLA0KKyAgU0kzMjE4WF9SQU1fVVNFUl9CNCAgICAgICAgICAgICAgICAgID0gMTM3MywNCisgIFNJMzIxOFhfUkFNX1VTRVJfQjUgICAgICAgICAgICAgICAgICA9IDEzNzQsDQorICBTSTMyMThYX1JBTV9VU0VSX0I2ICAgICAgICAgICAgICAgICAgPSAxMzc1LA0KKyAgU0kzMjE4WF9SQU1fVVNFUl9CNyAgICAgICAgICAgICAgICAgID0gMTM3NiwNCisgIFNJMzIxOFhfUkFNX0ZMVVNIX0FVRElPX0NMUiAgICAgICAgICA9IDEzNzcsDQorICBTSTMyMThYX1JBTV9GTFVTSF9EQ19DTFIgICAgICAgICAgICAgPSAxMzc4LA0KKyAgU0kzMjE4WF9SQU1fU1BSX0NMUiAgICAgICAgICAgICAgICAgID0gMTM3OSwNCisgIFNJMzIxOFhfUkFNX0dQSTAgICAgICAgICAgICAgICAgICAgICA9IDEzODAsDQorICBTSTMyMThYX1JBTV9HUEkxICAgICAgICAgICAgICAgICAgICAgPSAxMzgxLA0KKyAgU0kzMjE4WF9SQU1fR1BJMiAgICAgICAgICAgICAgICAgICAgID0gMTM4MiwNCisgIFNJMzIxOFhfUkFNX0dQSTMgICAgICAgICAgICAgICAgICAgICA9IDEzODMsDQorICBTSTMyMThYX1JBTV9HUE8wICAgICAgICAgICAgICAgICAgICAgPSAxMzg0LA0KKyAgU0kzMjE4WF9SQU1fR1BPMSAgICAgICAgICAgICAgICAgICAgID0gMTM4NSwNCisgIFNJMzIxOFhfUkFNX0dQTzIgICAgICAgICAgICAgICAgICAgICA9IDEzODYsDQorICBTSTMyMThYX1JBTV9HUE8zICAgICAgICAgICAgICAgICAgICAgPSAxMzg3LA0KKyAgU0kzMjE4WF9SQU1fR1BPMF9PRSAgICAgICAgICAgICAgICAgID0gMTM4OCwNCisgIFNJMzIxOFhfUkFNX0dQTzFfT0UgICAgICAgICAgICAgICAgICA9IDEzODksDQorICBTSTMyMThYX1JBTV9HUE8yX09FICAgICAgICAgICAgICAgICAgPSAxMzkwLA0KKyAgU0kzMjE4WF9SQU1fR1BPM19PRSAgICAgICAgICAgICAgICAgID0gMTM5MSwNCisgIFNJMzIxOFhfUkFNX0JBVFNFTF9MX1NFVCAgICAgICAgICAgICA9IDEzOTIsDQorICBTSTMyMThYX1JBTV9CQVRTRUxfSF9TRVQgICAgICAgICAgICAgPSAxMzkzLA0KKyAgU0kzMjE4WF9SQU1fQkFUU0VMX1JfU0VUICAgICAgICAgICAgID0gMTM5NCwNCisgIFNJMzIxOFhfUkFNX0JBVFNFTF9DTFIgICAgICAgICAgICAgICA9IDEzOTUsDQorICBTSTMyMThYX1JBTV9WQkFUX0lSUSAgICAgICAgICAgICAgICAgPSAxMzk2LA0KKyAgU0kzMjE4WF9SQU1fTUFEQ19WVElQQ19SQVcgICAgICAgICAgID0gMTM5NywNCisgIFNJMzIxOFhfUkFNX01BRENfVlJJTkdDX1JBVyAgICAgICAgICA9IDEzOTgsDQorICBTSTMyMThYX1JBTV9NQURDX1ZCQVRfUkFXICAgICAgICAgICAgPSAxMzk5LA0KKyAgU0kzMjE4WF9SQU1fTUFEQ19WTE9OR19SQVcgICAgICAgICAgID0gMTQwMCwNCisgIFNJMzIxOFhfUkFNX1VOVVNFRF9SRUczNzcgICAgICAgICAgICA9IDE0MDEsDQorICBTSTMyMThYX1JBTV9NQURDX1ZEQ19SQVcgICAgICAgICAgICAgPSAxNDAyLA0KKyAgU0kzMjE4WF9SQU1fTUFEQ19JTE9OR19SQVcgICAgICAgICAgID0gMTQwMywNCisgIFNJMzIxOFhfUkFNX1VOVVNFRF9SRUczODAgICAgICAgICAgICA9IDE0MDQsDQorICBTSTMyMThYX1JBTV9VTlVTRURfUkVHMzgxICAgICAgICAgICAgPSAxNDA1LA0KKyAgU0kzMjE4WF9SQU1fTUFEQ19JTE9PUF9SQVcgICAgICAgICAgID0gMTQwNiwNCisgIFNJMzIxOFhfUkFNX01BRENfRElBR19SQVcgICAgICAgICAgICA9IDE0MDcsDQorICBTSTMyMThYX1JBTV9VTlVTRURfUkVHMzg0ICAgICAgICAgICAgPSAxNDA4LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEX1JFRzM4NSAgICAgICAgICAgID0gMTQwOSwNCisgIFNJMzIxOFhfUkFNX0NBTFIzX0RTUCAgICAgICAgICAgICAgICA9IDE0MTAsDQorICBTSTMyMThYX1JBTV9QRF9NQURDICAgICAgICAgICAgICAgICAgPSAxNDExLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEX1JFRzM4OCAgICAgICAgICAgID0gMTQxMiwNCisgIFNJMzIxOFhfUkFNX1BEX0JJQVMgICAgICAgICAgICAgICAgICA9IDE0MTMsDQorICBTSTMyMThYX1JBTV9QRF9EQ19BREMgICAgICAgICAgICAgICAgPSAxNDE0LA0KKyAgU0kzMjE4WF9SQU1fUERfRENfREFDICAgICAgICAgICAgICAgID0gMTQxNSwNCisgIFNJMzIxOFhfUkFNX1BEX0RDX1NOUyAgICAgICAgICAgICAgICA9IDE0MTYsDQorICBTSTMyMThYX1JBTV9QRF9EQ19DT0FSU0VfU05TICAgICAgICAgPSAxNDE3LA0KKyAgU0kzMjE4WF9SQU1fUERfVkJBVF9TTlMgICAgICAgICAgICAgID0gMTQxOCwNCisgIFNJMzIxOFhfUkFNX1BEX0RDX0JVRiAgICAgICAgICAgICAgICA9IDE0MTksDQorICBTSTMyMThYX1JBTV9QRF9BQ19BREMgICAgICAgICAgICAgICAgPSAxNDIwLA0KKyAgU0kzMjE4WF9SQU1fUERfQUNfREFDICAgICAgICAgICAgICAgID0gMTQyMSwNCisgIFNJMzIxOFhfUkFNX1BEX0FDX1NOUyAgICAgICAgICAgICAgICA9IDE0MjIsDQorICBTSTMyMThYX1JBTV9QRF9DTV9TTlMgICAgICAgICAgICAgICAgPSAxNDIzLA0KKyAgU0kzMjE4WF9SQU1fUERfQ00gICAgICAgICAgICAgICAgICAgID0gMTQyNCwNCisgIFNJMzIxOFhfUkFNX1VOVVNFRF9SRUc0MDEgICAgICAgICAgICA9IDE0MjUsDQorICBTSTMyMThYX1JBTV9VTlVTRURfUkVHNDAyICAgICAgICAgICAgPSAxNDI2LA0KKyAgU0kzMjE4WF9SQU1fUERfU1VNICAgICAgICAgICAgICAgICAgID0gMTQyNywNCisgIFNJMzIxOFhfUkFNX1BEX0xLR0RBQyAgICAgICAgICAgICAgICA9IDE0MjgsDQorICBTSTMyMThYX1JBTV9VTlVTRURfUkVHNDA1ICAgICAgICAgICAgPSAxNDI5LA0KKyAgU0kzMjE4WF9SQU1fUERfSFZJQyAgICAgICAgICAgICAgICAgID0gMTQzMCwNCisgIFNJMzIxOFhfUkFNX1VOVVNFRF9SRUc0MDcgICAgICAgICAgICA9IDE0MzEsDQorICBTSTMyMThYX1JBTV9DTURBQ19DSEVOX0IgICAgICAgICAgICAgPSAxNDMyLA0KKyAgU0kzMjE4WF9SQU1fU1VNX0NIRU5fQiAgICAgICAgICAgICAgID0gMTQzMywNCisgIFNJMzIxOFhfUkFNX1RSTlJEX0NIRU5fQiAgICAgICAgICAgICA9IDE0MzQsDQorICBTSTMyMThYX1JBTV9VTlVTRURfUkVHNDExICAgICAgICAgICAgPSAxNDM1LA0KKyAgU0kzMjE4WF9SQU1fRENfQlVGX0NIRU5fQiAgICAgICAgICAgID0gMTQzNiwNCisgIFNJMzIxOFhfUkFNX0FDX1NOU19DSEVOX0IgICAgICAgICAgICA9IDE0MzcsDQorICBTSTMyMThYX1JBTV9EQ19TTlNfQ0hFTl9CICAgICAgICAgICAgPSAxNDM4LA0KKyAgU0kzMjE4WF9SQU1fTEJfTVVYX0NIRU5fQiAgICAgICAgICAgID0gMTQzOSwNCisgIFNJMzIxOFhfUkFNX1VOVVNFRF9SRUc0MTYgICAgICAgICAgICA9IDE0NDAsDQorICBTSTMyMThYX1JBTV9DTURBQ19FTl9CICAgICAgICAgICAgICAgPSAxNDQxLA0KKyAgU0kzMjE4WF9SQU1fUkFfRU5fQiAgICAgICAgICAgICAgICAgID0gMTQ0MiwNCisgIFNJMzIxOFhfUkFNX1JEX0VOX0IgICAgICAgICAgICAgICAgICA9IDE0NDMsDQorICBTSTMyMThYX1JBTV9WQ1RMICAgICAgICAgICAgICAgICAgICAgPSAxNDQ0LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEX1JFRzQyMSAgICAgICAgICAgID0gMTQ0NSwNCisgIFNJMzIxOFhfUkFNX1VOVVNFRF9SRUc0MjIgICAgICAgICAgICA9IDE0NDYsDQorICBTSTMyMThYX1JBTV9IVklDX1NUQVRFICAgICAgICAgICAgICAgPSAxNDQ3LA0KKyAgU0kzMjE4WF9SQU1fSFZJQ19TVEFURV9PQlNFUlZFICAgICAgID0gMTQ0OCwNCisgIFNJMzIxOFhfUkFNX0hWSUNfU1RBVEVfTUFOICAgICAgICAgICA9IDE0NDksDQorICBTSTMyMThYX1JBTV9IVklDX1NUQVRFX1JFQUQgICAgICAgICAgPSAxNDUwLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEX1JFRzQyNyAgICAgICAgICAgID0gMTQ1MSwNCisgIFNJMzIxOFhfUkFNX1ZDTURBQ19TQ0FMRV9NQU4gICAgICAgICA9IDE0NTIsDQorICBTSTMyMThYX1JBTV9DQUxfQUNBRENfQ05UTCAgICAgICAgICAgPSAxNDUzLA0KKyAgU0kzMjE4WF9SQU1fQ0FMX0FDREFDX0NOVEwgICAgICAgICAgID0gMTQ1NCwNCisgIFNJMzIxOFhfUkFNX1VOVVNFRF9SRUc0MzEgICAgICAgICAgICA9IDE0NTUsDQorICBTSTMyMThYX1JBTV9DQUxfRENEQUNfQ05UTCAgICAgICAgICAgPSAxNDU2LA0KKyAgU0kzMjE4WF9SQU1fQ0FMX1RSTlJEX0NOVEwgICAgICAgICAgID0gMTQ1NywNCisgIFNJMzIxOFhfUkFNX0NBTF9UUk5SRF9EQUNUICAgICAgICAgICA9IDE0NTgsDQorICBTSTMyMThYX1JBTV9DQUxfVFJOUkRfREFDUiAgICAgICAgICAgPSAxNDU5LA0KKyAgU0kzMjE4WF9SQU1fTEtHX1VQVF9BQ1RJVkUgICAgICAgICAgID0gMTQ2MCwNCisgIFNJMzIxOFhfUkFNX0xLR19VUFJfQUNUSVZFICAgICAgICAgICA9IDE0NjEsDQorICBTSTMyMThYX1JBTV9MS0dfRE5UX0FDVElWRSAgICAgICAgICAgPSAxNDYyLA0KKyAgU0kzMjE4WF9SQU1fTEtHX0ROUl9BQ1RJVkUgICAgICAgICAgID0gMTQ2MywNCisgIFNJMzIxOFhfUkFNX0xLR19VUFRfT0hUICAgICAgICAgICAgICA9IDE0NjQsDQorICBTSTMyMThYX1JBTV9MS0dfVVBSX09IVCAgICAgICAgICAgICAgPSAxNDY1LA0KKyAgU0kzMjE4WF9SQU1fTEtHX0ROVF9PSFQgICAgICAgICAgICAgID0gMTQ2NiwNCisgIFNJMzIxOFhfUkFNX0xLR19ETlJfT0hUICAgICAgICAgICAgICA9IDE0NjcsDQorICBTSTMyMThYX1JBTV9DQUxfTEtHX0VOX0NOVEwgICAgICAgICAgPSAxNDY4LA0KKyAgU0kzMjE4WF9SQU1fQ0FMX1BVUERfQ05UTCAgICAgICAgICAgID0gMTQ2OSwNCisgIFNJMzIxOFhfUkFNX1VOVVNFRF9SRUc0NDYgICAgICAgICAgICA9IDE0NzAsDQorICBTSTMyMThYX1JBTV9DQUxfQUNfUkNBTCAgICAgICAgICAgICAgPSAxNDcxLA0KKyAgU0kzMjE4WF9SQU1fQ0FMX0RDX1JDQUwgICAgICAgICAgICAgID0gMTQ3MiwNCisgIFNJMzIxOFhfUkFNX0tBQ19NT0QgICAgICAgICAgICAgICAgICA9IDE0NzMsDQorICBTSTMyMThYX1JBTV9LQUNfU0VMICAgICAgICAgICAgICAgICAgPSAxNDc0LA0KKyAgU0kzMjE4WF9SQU1fU0VMX1JJTkcgICAgICAgICAgICAgICAgID0gMTQ3NSwNCisgIFNJMzIxOFhfUkFNX0NNREFDX0ZXRCAgICAgICAgICAgICAgICA9IDE0NzYsDQorICBTSTMyMThYX1JBTV9DTURBQ19SVlMgICAgICAgICAgICAgICAgPSAxNDc3LA0KKyAgU0kzMjE4WF9SQU1fQ0FMX0lOQ19TVEFURSAgICAgICAgICAgID0gMTQ3OCwNCisgIFNJMzIxOFhfUkFNX0NBTF9EQ0RBQ19DT01QICAgICAgICAgICA9IDE0NzksDQorICBTSTMyMThYX1JBTV9CQVRfU1dJVENIICAgICAgICAgICAgICAgPSAxNDgwLA0KKyAgU0kzMjE4WF9SQU1fQ0hfSVJRICAgICAgICAgICAgICAgICAgID0gMTQ4MSwNCisgIFNJMzIxOFhfUkFNX0lMT09QX0NST1NTSU5HICAgICAgICAgICA9IDE0ODIsDQorICBTSTMyMThYX1JBTV9WT0NfRkFJTFNBRkUgICAgICAgICAgICAgPSAxNDgzLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEX1JFRzQ2MCAgICAgICAgICAgID0gMTQ4NCwNCisgIFNJMzIxOFhfUkFNX1VOVVNFRF9SRUc0NjEgICAgICAgICAgICA9IDE0ODUsDQorICBTSTMyMThYX1JBTV9HRU5FUklDXzAgICAgICAgICAgICAgICAgPSAxNDg2LA0KKyAgU0kzMjE4WF9SQU1fR0VORVJJQ18xICAgICAgICAgICAgICAgID0gMTQ4NywNCisgIFNJMzIxOFhfUkFNX0dFTkVSSUNfMiAgICAgICAgICAgICAgICA9IDE0ODgsDQorICBTSTMyMThYX1JBTV9HRU5FUklDXzMgICAgICAgICAgICAgICAgPSAxNDg5LA0KKyAgU0kzMjE4WF9SQU1fR0VORVJJQ180ICAgICAgICAgICAgICAgID0gMTQ5MCwNCisgIFNJMzIxOFhfUkFNX0dFTkVSSUNfNSAgICAgICAgICAgICAgICA9IDE0OTEsDQorICBTSTMyMThYX1JBTV9HRU5FUklDXzYgICAgICAgICAgICAgICAgPSAxNDkyLA0KKyAgU0kzMjE4WF9SQU1fR0VORVJJQ183ICAgICAgICAgICAgICAgID0gMTQ5MywNCisgIFNJMzIxOFhfUkFNX1VOVVNFRF9SRUc0NzAgICAgICAgICAgICA9IDE0OTQsDQorICBTSTMyMThYX1JBTV9VTlVTRURfUkVHNDcxICAgICAgICAgICAgPSAxNDk1LA0KKyAgU0kzMjE4WF9SQU1fUUhJX1NFVCAgICAgICAgICAgICAgICAgID0gMTQ5NiwNCisgIFNJMzIxOFhfUkFNX1FISV9DTFIgICAgICAgICAgICAgICAgICA9IDE0OTcsDQorICBTSTMyMThYX1JBTV9VTlVTRURfUkVHNDc0ICAgICAgICAgICAgPSAxNDk4LA0KKyAgU0kzMjE4WF9SQU1fUkRDX1NVTSAgICAgICAgICAgICAgICAgID0gMTQ5OSwNCisgIFNJMzIxOFhfUkFNX1VOVVNFRF9SRUc0NzYgICAgICAgICAgICA9IDE1MDAsDQorICBTSTMyMThYX1JBTV9VTlVTRURfUkVHNDc3ICAgICAgICAgICAgPSAxNTAxLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEX1JFRzQ3OCAgICAgICAgICAgID0gMTUwMiwNCisgIFNJMzIxOFhfUkFNX1VOVVNFRF9SRUc0NzkgICAgICAgICAgICA9IDE1MDMsDQorICBTSTMyMThYX1JBTV9VTlVTRURfUkVHNDgwICAgICAgICAgICAgPSAxNTA0LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEX1JFRzQ4MSAgICAgICAgICAgID0gMTUwNSwNCisgIFNJMzIxOFhfUkFNX0ZMVVNIX0FVRElPX01BTiAgICAgICAgICA9IDE1MDYsDQorICBTSTMyMThYX1JBTV9GTFVTSF9EQ19NQU4gICAgICAgICAgICAgPSAxNTA3LA0KKyAgU0kzMjE4WF9SQU1fVElQX1JJTkdfQ05UTCAgICAgICAgICAgID0gMTUwOCwNCisgIFNJMzIxOFhfUkFNX1NRVUVMQ0hfU0VUICAgICAgICAgICAgICA9IDE1MDksDQorICBTSTMyMThYX1JBTV9TUVVFTENIX0NMUiAgICAgICAgICAgICAgPSAxNTEwLA0KKyAgU0kzMjE4WF9SQU1fQ0FMX1NUQVRFX01BTiAgICAgICAgICAgID0gMTUxMSwNCisgIFNJMzIxOFhfUkFNX1VOVVNFRF9SRUc0ODggICAgICAgICAgICA9IDE1MTIsDQorICBTSTMyMThYX1JBTV9VTlVTRURfUkVHNDg5ICAgICAgICAgICAgPSAxNTEzLA0KKyAgU0kzMjE4WF9SQU1fUklOR0lOR19CVyAgICAgICAgICAgICAgID0gMTUxNCwNCisgIFNJMzIxOFhfUkFNX0FVRElPX01BTiAgICAgICAgICAgICAgICA9IDE1MTUsDQorICBTSTMyMThYX1JBTV9IVklDX1NUQVRFX1NQQVJFICAgICAgICAgPSAxNTE2LA0KKyAgU0kzMjE4WF9SQU1fUklOR0lOR19GQVNUX01BTiAgICAgICAgID0gMTUxNywNCisgIFNJMzIxOFhfUkFNX1ZDTV9EQUNfTUFOICAgICAgICAgICAgICA9IDE1MTgsDQorICBTSTMyMThYX1JBTV9VTlVTRURfUkVHNDk1ICAgICAgICAgICAgPSAxNTE5LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEX1JFRzQ5NiAgICAgICAgICAgID0gMTUyMCwNCisgIFNJMzIxOFhfUkFNX1VOVVNFRF9SRUc0OTcgICAgICAgICAgICA9IDE1MjEsDQorICBTSTMyMThYX1JBTV9HRU5FUklDXzggICAgICAgICAgICAgICAgPSAxNTIyLA0KKyAgU0kzMjE4WF9SQU1fR0VORVJJQ185ICAgICAgICAgICAgICAgID0gMTUyMywNCisgIFNJMzIxOFhfUkFNX0dFTkVSSUNfMTAgICAgICAgICAgICAgICA9IDE1MjQsDQorICBTSTMyMThYX1JBTV9HRU5FUklDXzExICAgICAgICAgICAgICAgPSAxNTI1LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEX1JFRzUwMiAgICAgICAgICAgID0gMTUyNiwNCisgIFNJMzIxOFhfUkFNX0dFTkVSSUNfMTIgICAgICAgICAgICAgICA9IDE1MjcsDQorICBTSTMyMThYX1JBTV9HRU5FUklDXzEzICAgICAgICAgICAgICAgPSAxNTI4LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEX1JFRzUwNSAgICAgICAgICAgID0gMTUyOSwNCisgIFNJMzIxOFhfUkFNX0RDX0hPTERfREFDICAgICAgICAgICAgICA9IDE1MzAsDQorICBTSTMyMThYX1JBTV9PRkZIT09LX0NNUCAgICAgICAgICAgICAgPSAxNTMxLA0KKyAgU0kzMjE4WF9SQU1fUFdSU0FWRV9TRVQgICAgICAgICAgICAgID0gMTUzMiwNCisgIFNJMzIxOFhfUkFNX1BXUlNBVkVfQ0xSICAgICAgICAgICAgICA9IDE1MzMsDQorICBTSTMyMThYX1JBTV9QRF9XS1VQICAgICAgICAgICAgICAgICAgPSAxNTM0LA0KKyAgU0kzMjE4WF9SQU1fU1BFRURVUF9NQVNLX1NFVCAgICAgICAgID0gMTUzNSwNCisgIFNJMzIxOFhfUkFNX1NQRUVEVVBfTUFTS19DTFIgICAgICAgICA9IDE1MzYsDQorICBTSTMyMThYX1JBTV9VTlVTRURfUkVHNTEzICAgICAgICAgICAgPSAxNTM3LA0KKyAgU0kzMjE4WF9SQU1fUERfRENEQyAgICAgICAgICAgICAgICAgID0gMTUzOCwNCisgIFNJMzIxOFhfUkFNX1VOVVNFRF9SRUc1MTUgICAgICAgICAgICA9IDE1MzksDQorICBTSTMyMThYX1JBTV9QRF9VVkxPICAgICAgICAgICAgICAgICAgPSAxNTQwLA0KKyAgU0kzMjE4WF9SQU1fUERfT1ZMTyAgICAgICAgICAgICAgICAgID0gMTU0MSwNCisgIFNJMzIxOFhfUkFNX1BEX09DTE8gICAgICAgICAgICAgICAgICA9IDE1NDIsDQorICBTSTMyMThYX1JBTV9QRF9TV0RSViAgICAgICAgICAgICAgICAgPSAxNTQzLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEX1JFRzUyMCAgICAgICAgICAgID0gMTU0NCwNCisgIFNJMzIxOFhfUkFNX0RDRENfVVZIWVNUICAgICAgICAgICAgICA9IDE1NDUsDQorICBTSTMyMThYX1JBTV9EQ0RDX1VWVEhSRVNIICAgICAgICAgICAgPSAxNTQ2LA0KKyAgU0kzMjE4WF9SQU1fRENEQ19PVlRIUkVTSCAgICAgICAgICAgID0gMTU0NywNCisgIFNJMzIxOFhfUkFNX0RDRENfT0lUSFJFU0ggICAgICAgICAgICA9IDE1NDgsDQorICBTSTMyMThYX1JBTV9VTlVTRURfUkVHNTI1ICAgICAgICAgICAgPSAxNTQ5LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEX1JFRzUyNiAgICAgICAgICAgID0gMTU1MCwNCisgIFNJMzIxOFhfUkFNX0RDRENfU1RBVFVTICAgICAgICAgICAgICA9IDE1NTEsDQorICBTSTMyMThYX1JBTV9VTlVTRURfUkVHNTI4ICAgICAgICAgICAgPSAxNTUyLA0KKyAgU0kzMjE4WF9SQU1fRENEQ19TV0RSVl9QT0wgICAgICAgICAgID0gMTU1MywNCisgIFNJMzIxOFhfUkFNX0RDRENfVVZQT0wgICAgICAgICAgICAgICA9IDE1NTQsDQorICBTSTMyMThYX1JBTV9EQ0RDX0NQVU1QICAgICAgICAgICAgICAgPSAxNTU1LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEX1JFRzUzMiAgICAgICAgICAgID0gMTU1NiwNCisgIFNJMzIxOFhfUkFNX0RDRENfVlJFRl9NQU4gICAgICAgICAgICA9IDE1NTcsDQorICBTSTMyMThYX1JBTV9EQ0RDX1ZSRUZfQ1RSTCAgICAgICAgICAgPSAxNTU4LA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEX1JFRzUzNSAgICAgICAgICAgID0gMTU1OSwNCisgIFNJMzIxOFhfUkFNX0RDRENfUk5HVFlQRSAgICAgICAgICAgICA9IDE1NjAsDQorICBTSTMyMThYX1JBTV9EQ0RDX0RJTl9GSUxUICAgICAgICAgICAgPSAxNTYxLA0KKyAgU0kzMjE4WF9SQU1fVU5VU0VEX1JFRzUzOCAgICAgICAgICAgID0gMTU2MiwNCisgIFNJMzIxOFhfUkFNX0RDRENfRE9VVCAgICAgICAgICAgICAgICA9IDE1NjMsDQorICBTSTMyMThYX1JBTV9VTlVTRURfUkVHNTQwICAgICAgICAgICAgPSAxNTY0LA0KKyAgU0kzMjE4WF9SQU1fRENEQ19PSU1BU0sgICAgICAgICAgICAgID0gMTU2NSwNCisgIFNJMzIxOFhfUkFNX1VOVVNFRF9SRUc1NDIgICAgICAgICAgICA9IDE1NjYsDQorICBTSTMyMThYX1JBTV9VTlVTRURfUkVHNTQzICAgICAgICAgICAgPSAxNTY3LA0KKyAgU0kzMjE4WF9SQU1fRENEQ19TQ19TRVQgICAgICAgICAgICAgID0gMTU2OCwNCisgIFNJMzIxOFhfUkFNX1dBS0VfSE9MRCAgICAgICAgICAgICAgICA9IDE1NjksDQorICBTSTMyMThYX1JBTV9QRF9BQ19TUVVFTENIICAgICAgICAgICAgPSAxNTcwLA0KKyAgU0kzMjE4WF9SQU1fUERfUkVGX09TQyAgICAgICAgICAgICAgID0gMTU3MSwNCisgIFNJMzIxOFhfUkFNX1VOVVNFRF9SRUc1NDggICAgICAgICAgICA9IDE1NzIsDQorICBTSTMyMThYX1JBTV9QV1JTQVZFX01BTiAgICAgICAgICAgICAgPSAxNTczLA0KKyAgU0kzMjE4WF9SQU1fUFdSU0FWRV9TRUwgICAgICAgICAgICAgID0gMTU3NCwNCisgIFNJMzIxOFhfUkFNX1BXUlNBVkVfQ1RSTF9MTyAgICAgICAgICA9IDE1NzUsDQorICBTSTMyMThYX1JBTV9QV1JTQVZFX0NUUkxfSEkgICAgICAgICAgPSAxNTc2LA0KKyAgU0kzMjE4WF9SQU1fUFdSU0FWRV9IVklDX0xPICAgICAgICAgID0gMTU3NywNCisgIFNJMzIxOFhfUkFNX1BXUlNBVkVfSFZJQ19ISSAgICAgICAgICA9IDE1NzgsDQorICBTSTMyMThYX1JBTV9EU1BfUFJPTV9NSVNSICAgICAgICAgICAgPSAxNTc5LA0KKyAgU0kzMjE4WF9SQU1fRFNQX0NST01fTUlTUiAgICAgICAgICAgID0gMTU4MCwNCisgIFNJMzIxOFhfUkFNX0RBQV9QUk9NX01JU1IgICAgICAgICAgICA9IDE1ODEsDQorICBTSTMyMThYX1JBTV9EQUFfQ1JPTV9NSVNSICAgICAgICAgICAgPSAxNTgyLA0KKyAgU0kzMjE4WF9SQU1fUkFNQklTVF9FUlJPUiAgICAgICAgICAgID0gMTU4MywNCisgIFNJMzIxOFhfUkFNX0RDRENfQU5BX1ZSRUYgICAgICAgICAgICA9IDE1ODQsDQorICBTSTMyMThYX1JBTV9EQ0RDX0FOQV9HQUlOICAgICAgICAgICAgPSAxNTg1LA0KKyAgU0kzMjE4WF9SQU1fRENEQ19BTkFfVE9GRiAgICAgICAgICAgID0gMTU4NiwNCisgIFNJMzIxOFhfUkFNX0RDRENfQU5BX1RPTk1JTiAgICAgICAgICA9IDE1ODcsDQorICBTSTMyMThYX1JBTV9EQ0RDX0FOQV9UT05NQVggICAgICAgICAgPSAxNTg4LA0KKyAgU0kzMjE4WF9SQU1fRENEQ19BTkFfRFNISUZUICAgICAgICAgID0gMTU4OSwNCisgIFNJMzIxOFhfUkFNX0RDRENfQU5BX0xQT0xZICAgICAgICAgICA9IDE1OTAsDQorICBTSTMyMThYX1JBTV9EQ0RDX0FOQV9QU0tJUCAgICAgICAgICAgPSAxNTkxLA0KKyAgU0kzMjE4WF9SQU1fUERfRENEQ19BTkEgICAgICAgICAgICAgID0gMTU5MiwNCisgIFNJMzIxOFhfUkFNX1VOVVNFRF9SRUc1NjkgICAgICAgICAgICA9IDE1OTMsDQorICBTSTMyMThYX1JBTV9VTlVTRURfUkVHNTcwICAgICAgICAgICAgPSAxNTk0LA0KKyAgU0kzMjE4WF9SQU1fUFdSUEVORF9TRVQgICAgICAgICAgICAgID0gMTU5NSwNCisgIFNJMzIxOFhfUkFNX1BEX0NNX0JVRiAgICAgICAgICAgICAgICA9IDE1OTYsDQorICBTSTMyMThYX1JBTV9KTVA4ICAgICAgICAgICAgICAgICAgICAgPSAxNTk3LA0KKyAgU0kzMjE4WF9SQU1fSk1QOSAgICAgICAgICAgICAgICAgICAgID0gMTU5OCwNCisgIFNJMzIxOFhfUkFNX0pNUDEwICAgICAgICAgICAgICAgICAgICA9IDE1OTksDQorICBTSTMyMThYX1JBTV9KTVAxMSAgICAgICAgICAgICAgICAgICAgPSAxNjAwLA0KKyAgU0kzMjE4WF9SQU1fSk1QMTIgICAgICAgICAgICAgICAgICAgID0gMTYwMSwNCisgIFNJMzIxOFhfUkFNX0pNUDEzICAgICAgICAgICAgICAgICAgICA9IDE2MDIsDQorICBTSTMyMThYX1JBTV9KTVAxNCAgICAgICAgICAgICAgICAgICAgPSAxNjAzLA0KKyAgU0kzMjE4WF9SQU1fSk1QMTUgICAgICAgICAgICAgICAgICAgID0gMTYwNCwNCisgIFNJMzIxOFhfUkFNX01FVEVSX1RSSUcgICAgICAgICAgICAgICA9IDE2MDUsDQorICBTSTMyMThYX1JBTV9QTV9BQ1RJVkUgICAgICAgICAgICAgICAgPSAxNjA2LA0KKyAgU0kzMjE4WF9SQU1fUE1fSU5BQ1RJVkUgICAgICAgICAgICAgID0gMTYwNywNCisgIFNJMzIxOFhfUkFNX0hWSUNfVkVSU0lPTiAgICAgICAgICAgICA9IDE2MDgsDQorICBTSTMyMThYX1JBTV9USEVSTV9PRkYgICAgICAgICAgICAgICAgPSAxNjA5LA0KKyAgU0kzMjE4WF9SQU1fVEhFUk1fSEkgICAgICAgICAgICAgICAgID0gMTYxMCwNCisgIFNJMzIxOFhfUkFNX1RFU1RfTE9BRCAgICAgICAgICAgICAgICA9IDE2MTEsDQorICBTSTMyMThYX1JBTV9EQ19IT0xEX01BTiAgICAgICAgICAgICAgPSAxNjEyLA0KKyAgU0kzMjE4WF9SQU1fRENfSE9MRF9EQUNfTUFOICAgICAgICAgID0gMTYxMywNCisgIFNJMzIxOFhfUkFNX1VOVVNFRF9SRUc1OTAgICAgICAgICAgICA9IDE2MTQsDQorICBTSTMyMThYX1JBTV9EQ0RDX0NQVU1QX0xQICAgICAgICAgICAgPSAxNjE1LA0KKyAgU0kzMjE4WF9SQU1fRENEQ19DUFVNUF9MUF9NQVNLICAgICAgID0gMTYxNiwNCisgIFNJMzIxOFhfUkFNX0RDRENfQ1BVTVBfUFVMTERPV04gICAgICA9IDE2MTcsDQorICBTSTMyMThYX1JBTV9CT05EX1NUQVRVUyAgICAgICAgICAgICAgPSAxNjE4LA0KKyAgU0kzMjE4WF9SQU1fQk9ORF9NQU4gICAgICAgICAgICAgICAgID0gMTYxOSwNCisgIFNJMzIxOFhfUkFNX0JPTkRfVkFMICAgICAgICAgICAgICAgICA9IDE2MjAsDQorICBTSTMyMThYX1JBTV9SRUZfREVCT1VOQ0VfUENMSyAgICAgICAgPSAxNjMzLA0KKyAgU0kzMjE4WF9SQU1fUkVGX0RFQk9VTkNFX0ZTWU5DICAgICAgID0gMTYzNCwNCisgIFNJMzIxOFhfUkFNX0RDRENfTElGVF9FTiAgICAgICAgICAgICA9IDE2MzUsDQorICBTSTMyMThYX1JBTV9EQ0RDX0NQVU1QX1BHT09EICAgICAgICAgPSAxNjM2LA0KKyAgU0kzMjE4WF9SQU1fRENEQ19DUFVNUF9QR09PRF9XS0VOICAgID0gMTYzNywNCisgIFNJMzIxOFhfUkFNX0RDRENfQ1BVTVBfUEdPT0RfRlJDICAgICA9IDE2MzgsDQorICBTSTMyMThYX1JBTV9EQ0RDX0NQVU1QX0xQX01BU0tfU0ggICAgPSAxNjM5LA0KKyAgU0kzMjE4WF9SQU1fRENEQ19VVl9NQU4gICAgICAgICAgICAgID0gMTY0MCwNCisgIFNJMzIxOFhfUkFNX0RDRENfVVZfREVCT1VOQ0UgICAgICAgICA9IDE2NDEsDQorICBTSTMyMThYX1JBTV9EQ0RDX09WX01BTiAgICAgICAgICAgICAgPSAxNjQyLA0KKyAgU0kzMjE4WF9SQU1fRENEQ19PVl9ERUJPVU5DRSAgICAgICAgID0gMTY0MywNCisgIFNJMzIxOFhfUkFNX0FOQUxPRzNfVEVTVF9NVVggICAgICAgICA9IDE2NDQsDQorfTsNCisNCisjZW5kaWYNCisNCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9pbmMvc2lfdm9pY2UuaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL2NvZGVjcy9zaTMyMTh4L2luYy9zaV92b2ljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMDNjNTgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9pbmMvc2lfdm9pY2UuaApAQCAtMCwwICsxLDk0OSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKy8qCisgKiBBdXRob3Iocyk6CisgKiBsYWoKKyAqCisgKiBEaXN0cmlidXRlZCBieToKKyAqIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgcHJvcHJpZXRhcnkgaW5mb3JtYXRpb24uCisgKiBObyBkaXNzZW1pbmF0aW9uIGFsbG93ZWQgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbQorICogU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KKyAqCisgKiBGaWxlIERlc2NyaXB0aW9uOgorICogVGhpcyBpcyB0aGUgbWFpbiBoZWFkZXIgZmlsZSBmb3IgdGhlIFByb1NMSUMgQVBJIHNvZnR3YXJlLgorICoKKyAqCisgKi8KKworI2lmbmRlZiBTSV9WT0lDRV9ICisjZGVmaW5lIFNJX1ZPSUNFX0gKKworI2luY2x1ZGUgIi4uL2NvbmZpZ19pbmMvcHJvc2xpY19hcGlfY29uZmlnLmgiCisjaW5jbHVkZSAic2lfdm9pY2VfY3RybC5oIgorI2luY2x1ZGUgInNpX3ZvaWNlX3RpbWVyX2ludGYuaCIKKworLyogVGhlIGZvbGxvd2luZyBtYWNyb3MgYXJlIGluIHBsYWNlIHNvIHRoYXQgaWYgdGhlIGN1c3RvbWVyIGRpZCBub3QgZGVmaW5lIHRoZW0sIHRoZSAic2FmZSIgZGVmYXVsdCBpcyBub3QgZGlzYWJsZSB0aGUgZnVuY3Rpb25hbGl0eS4qLworI2lmbmRlZiBFTkFCTEVfREVCVUcKKyNkZWZpbmUgREVCVUdfUFJJTlQoLi4uKQorI2RlZmluZSBERUJVR19FTkFCTEVEKFgpIDAKKyNlbmRpZgorCisjaWZuZGVmIEVOQUJMRV9UUkFDRVMKKyNkZWZpbmUgVFJBQ0VfRU5BQkxFRChYKSAwCisjZGVmaW5lIFRSQUNFUFJJTlQoLi4uKQorI2RlZmluZSBUUkFDRVBSSU5UX05PQ0hBTiguLi4pCisjZW5kaWYKKworI2lmbmRlZiBMT0dQUklOVAorI2RlZmluZSBMT0dQUklOVCguLi4pCisjZW5kaWYKKworI2RlZmluZSBTSUxBQlNfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihwYXJhbSkgKHZvaWQpcGFyYW0KKworLyoqIEBkZWZncm91cCBTSVZPSUNFIFNpVm9pY2UgZGVmaW5pdGlvbnMKKworICogQHsKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqIEBkZWZncm91cCBDSElQRkFNIENoaXAgZmFtaWx5IGRlZmluaXRpb25zCisgKiBAeworICovCisjZGVmaW5lIFNJMzIxN1hfVFlQRSA0ICAgLyoqPCBTaW5nbGUgY2hhbm5lbCBjaGlwc2V0Ki8KKyNkZWZpbmUgU0kzMjI2WF9UWVBFIDUgICAvKio8IER1YWwgY2hhbm5lbCBjaGlwc2V0ICovCisjZGVmaW5lIFNJMzIxOFhfVFlQRSA2ICAgLyoqPCBTaW5nbGUgY2hhbm5lbCBjaGlwc2V0Ki8KKyNkZWZpbmUgU0kzMjI4WF9UWVBFIDcgICAvKio8IER1YWwgY2hhbm5lbCBjaGlwc2V0ICovCisjZGVmaW5lIFNJMzIyOFhfVFlQRSA3ICAgLyoqPCBEdWFsIGNoYW5uZWwgY2hpcHNldCAqLworI2RlZmluZSBTSTMyMTlYX1RZUEUgOCAgIC8qKjwgU2luZ2xlIGNoYW5uZWwgY2hpcHNldCovCisjZGVmaW5lIFNJMzA1MF9UWVBFIDIwICAgLyoqPCBTaW5nbGUgY2hhbm5lbCBGWE8gY2hpcHNldCAqLworCisvKiogQH0gQ0hJUEZBTSAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qCisqIFdvcmthcm91ZCBmb3IgYnVpbGRpbmcgb24gd2luZG93cyBzeXN0ZW1zCisqLworCisjaWZkZWYgUkNfTk9ORQorI3VuZGVmIFJDX05PTkUKKyNlbmRpZgorCisjZGVmaW5lIFNJVk9JQ0VfUkNfTk9ORSBSQ19OT05FCisKKy8qKgorKiBUaGlzIGlzIHRoZSBtYWluIFNpbGljb24gTGFicyBjb250cm9sIGludGVyZmFjZSBvYmplY3QuIGRvIG5vdCBhY2Nlc3MgZGlyZWN0bHkhCisqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgdm9pZCAqaEN0cmw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IHVzZXIgcHJvdmlkZWQgU1BJL0dDSSBzdHJ1Y3R1cmUgKi8KKyAgY3RybF9SZXNldF9mcHRyIFJlc2V0X2ZwdHI7ICAgICAgICAgICAgICAgICAvKio8IHVzZXIgcHJvdmlkZWQgcmVzZXQgZnVuY3Rpb24gKi8KKyAgY3RybF9Xcml0ZVJlZ2lzdGVyX2ZwdHIKKyAgV3JpdGVSZWdpc3Rlcl9mcHRyOyAvKio8IHVzZXIgcHJvdmlkZWQgU1BJL0dDSSB3cml0ZSByZWdpc3RlciBmdW5jdGlvbiAqLworICBjdHJsX1JlYWRSZWdpc3Rlcl9mcHRyCisgIFJlYWRSZWdpc3Rlcl9mcHRyOyAgIC8qKjwgdXNlciBwcm92aWRlZCBTUEkvR0kgcmVhZCByZWdpc3RlciBmdW5jdGlvbiAqLworICBjdHJsX1dyaXRlUkFNX2ZwdHIKKyAgV3JpdGVSQU1fZnB0cjsgICAgICAgICAgIC8qKjwgUHJvU0xJQyBvbmx5IC0gdXNlciBwcm92aWRlZCBTUEkvR0NJIHJlYWQgUkFNL0luZGlyZWN0IHJlZ2lzdGVyIGZ1bmN0aW9uICovCisgIGN0cmxfUmVhZFJBTV9mcHRyIFJlYWRSQU1fZnB0cjsgICAgICAgICAgICAgLyoqPCBQcm9TTElDIG9ubHkgKi8KKyAgY3RybF9TZW1hcGhvcmVfZnB0ciBTZW1hcGhvcmVfZnB0cjsgICAgICAgICAvKio8IFByb1NMSUMgb25seSAqLworICB2b2lkICpoVGltZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgdXNlciBwcm92aWRlZCBUaW1lciBkYXRhIHN0cnVjdHVyZSAqLworICBzeXN0ZW1fZGVsYXlfZnB0cgorICBEZWxheV9mcHRyOyAgICAgICAgICAgICAgIC8qKjwgdXNlciBzdXBwbGllZCBtU2VjIGRlbGF5IGZ1bmN0aW9uICovCisgIHN5c3RlbV90aW1lRWxhcHNlZF9mcHRyCisgIHRpbWVFbGFwc2VkX2ZwdHI7ICAgLyoqPCB1c2VyIHByb3ZpZGVkIG1TZWMgdGltZSBlbGFwc2VkIGZ1bmN0aW9uICovCisgIHN5c3RlbV9nZXRUaW1lX2ZwdHIKKyAgZ2V0VGltZV9mcHRyOyAgICAgICAgICAgLyoqPCB1c2VyIHByb3ZpZGVkIHRpbWVzdGFtcCBmdW5jdGlvbiAqLworfSBTaVZvaWNlQ29udHJvbEludGVyZmFjZVR5cGU7CisKKy8qIE1BSU5UQUlORVIgTk9URTogaWYgdGhpcyBjaGFuZ2VzLCB1cGRhdGUgZGV1YmcuYyBpbiB0aGUgQVBJIGRlbW8gKi8KK3R5cGVkZWYgZW51bQoreworICBTSTMyMTcxLCAvKiAnMTcwIGlzIHRoZSBIViB2ZXJzaW9uIG9mIHRoaXMgcGFydCAqLworICBTSTMyMTcyLCAvKiAnMTczIGlzIHRoZSBIViB2ZXJzaW9uIG9mIHRoaXMgcGFydCAqLworICBTSTMyMTc0LAorICBTSTMyMTc1LAorICBTSTMyMTc2LAorICBTSTMyMTc3LAorICBTSTMyMTc4LAorICBTSTMyMTc5LAorICBTSTMyMjYwLAorICBTSTMyMjYxLAorICBTSTMyMjYyLAorICBTSTMyMjYzLAorICBTSTMyMjY0LAorICBTSTMyMjY1LAorICBTSTMyMjY2LAorICBTSTMyMjY3LAorICBTSTMyMjY4LAorICBTSTMyMjY5LAorICBTSTMyMzYwLAorICBTSTMyMzYxLAorICBTSTMyMTgwLAorICBTSTMyMTgxLAorICBTSTMyMTgyLAorICBTSTMyMTgzLAorICBTSTMyMTg0LAorICBTSTMyMTg1LAorICBTSTMyMTg2LAorICBTSTMyMTg3LAorICBTSTMyMTg4LAorICBTSTMyMTg5LCAvKiBQbGFjZSBob2xkZXIgKi8KKyAgU0kzMjI4MCwKKyAgU0kzMjI4MSwKKyAgU0kzMjI4MiwKKyAgU0kzMjI4MywKKyAgU0kzMjI4NCwKKyAgU0kzMjI4NSwKKyAgU0kzMjI4NiwKKyAgU0kzMjI4NywKKyAgU0kzMjI4OSwgLyogUGxhY2UgaG9sZGVyICovCisgIFNJMzIxOTAsIC8qIE5PVCBhbGwgcGFydHMgbnVtYmVycyBhcmUgdXNlZCBhdCB0aGlzIHRpbWUgYW5kIGFyZSBwbGFjZWhvbGRlcnMgKi8KKyAgU0kzMjE5MSwKKyAgU0kzMjE5MiwKKyAgU0kzMjE5MywKKyAgU0kzMjE5NCwKKyAgU0kzMjE5NSwKKyAgU0kzMjE5NiwKKyAgU0kzMjE5NywKKyAgU0kzMjE5OCwKKyAgU0kzMjE5OSwKKyAgU0kzMDUwID0gMTAwLAorICBVTlNVUFBPUlRFRF9QQVJUX05VTSA9IDI1NQorfSBwYXJ0TnVtYmVyVHlwZTsKKworI2RlZmluZSBJU19TSTMyMTlYKFNJX0RFVlBUUikgKCAoIChTSV9ERVZQVFIpLT5jaGlwVHlwZSA+PSBTSTMyMTkwKSAmJiAoIChTSV9ERVZQVFIpLT5jaGlwVHlwZSA8PSBTSTMyMTk5KSApCisKKy8qKgorKiBDaGlwIHJldmlzaW9uIGRlZmluaXRpb24gZm9yIGVhc2llciByZWFkYWJpbGl0eSBpbiB0aGUgc291cmNlIGNvZGUKKyovCit0eXBlZGVmIGVudW0KK3sKKyAgQSwKKyAgQiwKKyAgQywKKyAgRCwKKyAgRSwKKyAgRiwKKyAgRworfSByZXZpc2lvblR5cGUgOworCisKK3R5cGVkZWYgZW51bQoreworICBVTktOT1dOLCAvKio8IENoYW5uZWwgdHlwZSBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgb3IgaXMgc3RpbGwgdW5rbm93biAqLworICBQUk9TTElDLCAvKio8IENoYW5uZWwgdHlwZSBpcyBhIFByb1NMSUMvRlhTICovCisgIERBQSAgICAgIC8qKjwgQ2hhbm5lbCB0eXBlIGlzIGEgREFBL0ZYTyAqLworfSBjaGFubmVsVHlwZVR5cGU7CisKKy8qKgorKiBUaGVzZSBhcmUgdGhlIGVycm9yIGNvZGVzIGZvciBQcm9TTElDIGZhaWx1cmVzCisqLwordHlwZWRlZiBlbnVtCit7CisgIFJDX0lHTk9SRSA9IDAsCisgIFJDX05PTkU9IDAsICAgICAgICAgICAvKio8IE1lYW5zIHRoZSBmdW5jdGlvbiBkaWQgbm90IGVuY291bnRlciBhbiBlcnJvciAqLworICBSQ19URVNUX1BBU1NFRCA9IDAsCisgIFJDX1RFU1RfRkFJTEVEID0gMSwKKyAgUkNfQ09NUExFVEVfTk9fRVJSID0gMSwgICAvKio8IEEgdGVzdCBjb21wbGV0ZWQsIG5vIGVycm9yIGRldGVjdGVkICovCisgIFJDX1BPV0VSX0FMQVJNX1ExLAorICBSQ19QT1dFUl9BTEFSTV9RMiwKKyAgUkNfUE9XRVJfQUxBUk1fUTMsCisgIFJDX1BPV0VSX0FMQVJNX1E0LAorICBSQ19QT1dFUl9BTEFSTV9RNSwKKyAgUkNfUE9XRVJfQUxBUk1fUTYsCisgIFJDX1NQSV9GQUlMLCAgICAgICAgIC8qKjwgU1BJIENvbW11bmljYXRpb25zIGZhaWx1cmUgKi8KKyAgUkNfUE9XRVJfTEVBSywKKyAgUkNfVkJBVF9VUF9USU1FT1VULAorICBSQ19WQkFUX09VVF9PRl9SQU5HRSwKKyAgUkNfVkJBVF9ET1dOX1RJTUVPVVQsCisgIFJDX1RHX1JHX1NIT1JULAorICBSQ19DTV9DQUxfRVJSLAorICBSQ19SSU5HX0ZBSUxfSU5ULAorICBSQ19DQUxfVElNRU9VVCwKKyAgUkNfUEFUQ0hfRVJSLAorICBSQ19CUk9BRENBU1RfRkFJTCwgICAgICAgICAgIC8qKjwgQnJvYWRjYXN0IHVuYXZhaWxhYmxlIGZvciByZXF1ZXN0ZWQgb3BlcmF0aW9uICovCisgIFJDX1VOU1VQUE9SVEVEX0ZFQVRVUkUsICAgICAgLyoqPCBGZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGNoaXBzZXQqLworICBSQ19DSEFOTkVMX1RZUEVfRVJSLCAgICAgICAgIC8qKjwgQ2hhbm5lbCB0eXBlIGRvZXMgbm90IHN1cHBvcnQgY2FsbGVkIGZ1bmN0aW9uICovCisgIFJDX0dBSU5fREVMVEFfVE9PX0xBUkdFLCAgICAgLyoqPCBSZXF1ZXN0ZWQgZ2FpbiBkZWx0YSB0b28gbGFyZ2UgKi8KKyAgUkNfR0FJTl9PVVRfT0ZfUkFOR0UsICAgICAgICAvKio8IEdhaW4gcmVxdWVzdGVkIGV4Y2VlZHMgcmFuZ2UgKi8KKyAgUkNfUE9XRVJfQUxBUk1fSFZJQywgICAgICAgICAvKio8IFBvd2VyIGFsYXJtIG9uIEhWSUMgKi8KKyAgUkNfUE9XRVJfQUxBUk1fT0ZGTEQsICAgICAgICAvKio8IFBvd2VyIGFsYXJtIG9uIG9mZmxvYWQgdHJhbnNpc3RvciAqLworICBSQ19USEVSTUFMX0FMQVJNX0hWSUMsICAgICAgIC8qKjwgVGhlcm1hbCBhbGFybSBkZXRlY3RlZCAqLworICBSQ19OT19NRU0sICAgICAgICAgICAgICAgICAgIC8qKjwgT3V0IG9mIG1lbW9yeSAqLworICBSQ19JTlZBTElEX0dFTl9QQVJBTSwgICAgICAgIC8qKjwgSW52YWxpZCBnZW5lcmFsIHBhcmFtZXRlciAqLworICBSQ19MSU5FX0lOX1VTRSwgICAgICAgICAgICAgIC8qKjwgTGluZSBpcyBpbiB1c2UgKExDUyBkZXRlY3RlZCkgKi8KKyAgUkNfUklOR19WX0xJTUlURUQsICAgICAgICAgICAvKio8IFJpbmdlciB2b2x0YWdlIGxpbWl0ZWQgLSBzaWduYWwgbWF5IGJlIGNsaXBwZWQgKi8KKyAgUkNfUFNUTl9DSEVDS19TSU5HTEVfRkFJTCwgICAvKio8IFBTVE4gZGV0ZWN0IHNpbmdsZSBjdXJyZW50IGV4Y2VlZHMgbGltaXQgKi8KKyAgUkNfUFNUTl9DSEVDS19BVkdfRkFJTCwgICAgICAvKio8IFBTVE4gZGV0ZWN0IGF2ZXJhZ2UgY3VycmVudCBleGNlZWRzIGxpbWl0ICovCisgIFJDX1ZEQUFfSUxPT1BfT1ZMRCwgICAgICAgICAgLyoqPCBPdmVybG9hZCBkZXRlY3RlZCAqLworICBSQ19VTlNVUFBPUlRFRF9PUFRJT04sICAgICAgIC8qKjwgRnVuY3Rpb24gcGFyYW1ldGVyIGlzIG5vdCBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lICovCisgIFJDX0ZEVF9USU1FT1VULCAgICAgICAgICAgICAgLyoqPCBUaW1lb3V0IHdhaXRpbmcgZm9yIHZhbGlkIGZyYW1lIGRldGVjdCAqLworICBSQ19QU1ROX09QRU5fRkVNRiwgICAgICAgICAgIC8qKjwgRGV0ZWN0ZWQgRkVNRiwgZGV2aWNlIGxlZnQgaW4gb3BlbiBzdGF0ZSAqLworICBSQ19WREFBX1BBUl9IQU5EU0VUX0RFVCwgICAgIC8qKjwgUGFyYWxsZWwgaGFuZHNldCBkZXRlY3RlZCAqLworICBSQ19WREFBX1BBUl9IQU5EU0VUX05PVF9ERVQsIC8qKjwgUGFyYWxsZWwgaGFuZHNldCBub3QgZGV0ZWN0ZWQgKi8KKyAgUkNfUEFUQ0hfUkFNX1ZFUklGWV9GQUlMLCAgICAvKio8IFBhdGNoIFJBTSB2ZXJpZmljYXRpb24gZmFpbHVyZSAqLworICBSQ19QQVRDSF9FTlRSWV9WRVJJRllfRkFJTCwgIC8qKjwgUGF0Y2ggZW50cnkgdGFibGUgdmVyaWZpY2F0aW9uIGZhaWx1cmUgKi8KKyAgUkNfVU5TVVBQT1JURURfREVWSUNFX1JFViwgICAvKio8IERldmljZSByZXZpc2lvbiBub3Qgc3VwcG9ydGVkICovCisgIFJDX0lOVkFMSURfUEFUQ0gsICAgICAgICAgICAgLyoqPCBObyBwYXRjaCBmb3Igc2VsZWN0ZWQgb3B0aW9ucyAqLworICBSQ19JTlZBTElEX1BSRVNFVCwgICAgICAgICAgIC8qKjwgSW52YWxpZCBQcmVzZXQgdmFsdWUgKi8KKyAgUkNfVEVTVF9ESVNBQkxFRCwgICAgICAgICAgICAvKio8IFRlc3QgTm90IGVuYWJsZWQgKi8KKyAgUkNfUklOR19TVEFSVF9GQUlMLCAgICAgICAgICAvKio8IFJpbmdpbmcgZmFpbGVkIHRvIHN0YXJ0ICovCisgIFJDX01XSV9FTkFCTEVfRkFJTCwgICAgICAgICAgLyoqPCBGYWlsZWQgdG8gZW5hYmxlIE1XSSBmZWF0dXJlICovCisgIFJDX01XSV9JTl9VU0UsICAgICAgICAgICAgICAgLyoqPCBNV0kgYWN0aXZlIGFuZCB1bmFibGUgdG8gYmUgbW9kaWZpZWQgKi8KKyAgUkNfTVdJX05PVF9FTkFCTEVELCAgICAgICAgICAvKio8IE1XSSBub3QgZW5hYmxlZCAqLworICBSQ19EQ0RDX1NFVFVQX0VSUiwgICAgICAgICAgIC8qKjwgRENEQyBub3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gcG93ZXJ1cCAqLworICBSQ19QTExfRlJFRVJVTl9BQ1RJVkUsICAgICAgIC8qKjwgUExMIEluIEZyZWVydW4gTW9kZSAqLworICBSQ19VTlNVUFBPUlRFRF9WRENfUkFOR0UsICAgIC8qKjwgVkRDIFJhbmdlIFVuc3VwcG9ydGVkICovCisgIFJDX05PTl9GQVRBTF9JTklUX0VSUiwgICAgICAgLyoqPCBHZW5lcmljIGVycm9yIHRvIGluZGljYXRlIGEgbm9uLWZhdGFsIGVycm9yIGR1cmluZyBpbml0ICovCisgIFJTUElfQ09OTkVDVElPTl9GQUlMRUQsICAgICAgLyoqPCBDbGllbnQgZGlzY29ubmVjdGVkIGZyb20gc2VydmVyIG9yIHZpY2UgdmVyc2EgKi8KKyAgUkNfUkVJTklUX1JFUVVJUkVEID0gMjU1ICAgICAvKio8IFNvZnQgUmVzZXQgUmVxdWlyZWQgKi8KK30gZXJyb3JDb2RlVHlwZTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIEBkZWZncm91cCBQUk9MU0lDX0JSRF9ERVNJR04gQm9hcmQgZGVzaWduIHNldHRpbmdzCisgKiBAeworICovCisvKioKKyogIEJPTSBPcHRpb24gVGFnIC0gcmVmZXIgdG8gaGFyZHdhcmUgZGVzaWduCisqLworCit0eXBlZGVmIGVudW0KK3sKKyAgREVGQVVMVCwgICAgICAgICAgICAgICAgICAgICAgLyoqPCBEQ0RDOiBVbnNwZWNpZmllZCAqLworICBCT19EQ0RDX0ZMWUJBQ0ssICAgICAgICAgICAgICAvKio8IERDREM6IGZseWJhY2sgZGVzaWduICovCisgIEJPX0RDRENfTENRQ183UDZXLCAgICAgICAgICAgIC8qKjwgRENEQzogcXVhc2ktY3VrIGRlc2lnbiAqLworICBCT19EQ0RDX1FDVUsgPSBCT19EQ0RDX0xDUUNfN1A2VywgLyoqPCBAZGVwcmVjYXRlZCBEQ0RDOiBxdWFzaS1jdWsgZGVzaWduIChkZXByZWNhdGVkIG5hbWUsIHVzZSBCT19EQ0RDX0xDUUNfN1A2VykgKi8KKyAgQk9fRENEQ19CVUNLX0JPT1NULCAgICAgICAgICAgLyoqPCBEQ0RDOiBCSlQgYnVjay1ib29zdCBkZXNpZ24gKi8KKyAgQk9fRENEQ19MQ1FDXzNXLCAgICAgICAgICAgICAgIC8qKjwgRENEQzogbG93LWNvc3QgcXVhc2ktY3VrIGRlc2lnbiAqLworICBCT19EQ0RDX0xDUUNVSyA9IEJPX0RDRENfTENRQ18zVywgLyoqPCBEQ0RDOiBsb3ctY29zdCBxdWFzaS1jdWsgZGVzaWduICovCisgIEJPX0RDRENfUF9CVUNLX0JPT1NUXzVWLCAgICAgIC8qKjwgQGRlcHJlY2F0ZWQgRENEQzogUE1PUyBidWNrLWJvb3N0IDV2IGRlc2lnbiAqLworICBCT19EQ0RDX1BfQlVDS19CT09TVF8xMlYsICAgICAvKio8IEBkZXByZWNhdGVkIERDREM6IFBNT1MgYnVjay1ib29zdCAxMnYgZGVzaWduICovCisgIEJPX0RDRENfUF9CVUNLX0JPT1NUXzEyVl9IViwgIC8qKjwgQGRlcHJlY2F0ZWQgRENEQzogUE1PUyBidWNrLWJvb3N0IDEydiBkZXNpZ24sIGhpZ2ggdm9sdGFnZSAqLworICBCT19EQ0RDX0NVSywgICAgICAgICAgICAgICAgICAvKio8IERDREM6IGZ1bGwgY3VrIGRlc2lnbiAqLworICBCT19EQ0RDX1BNT1NfQlVDS19CT09TVCwgICAgICAvKio8IEBkZXByZWNhdGVkIERDREM6IFBNT1MgYnVjay1ib29zdCBkZXNpZ24gKi8KKyAgQk9fRENEQ19MQ1FDXzZXLCAgICAgICAgICAgICAgLyoqPCBEQ0RDOiBsb3cgY29zdCBxdWFzaS1jdWsgZGVzaWduLCA2VyBjYXBhYmlsaXR5ICovCisgIEJPX0RDRENfTENRQ181VywgICAgICAgICAgICAgICAvKio8IERDREM6IGxvdyBjb3N0IHF1YXNpLWN1ayBkZXNpZ24sIDVXIGNhcGFiaWxpdHkgLSAnMTgwICYgJzI4MCBwYXJ0cyAqLworICBCT19EQ0RDX0xDQ0IsICAgICAgICAgICAgICAgICAvKio8IERDREM6IGxvdyBjb3N0IGNhcGFjaXRpdmUgYm9vc3QgZGVzaWduIC0gJzE4MCAmICcyODAgcGFydHMgKi8KKyAgQk9fRENEQ19MQ1VCLAorICBCT19EQ0RDX0xDQ0IxMTAsCisgIEJPX0RDRENfTENGQgorfSBib21PcHRpb25zVHlwZTsKKworLyoqCisqICBWREMgaW5wdXQgdm9sdGFnZSByYW5nZSBvcHRpb24gdGFncyAtIHBsZWFzZSByZWZlciBoYXJkd2FyZSBkZXNpZ24KKyovCit0eXBlZGVmIGVudW0KK3sKKyAgVkRDXzNQMF82UDAsCisgIFZEQ180UDVfMTZQMCwKKyAgVkRDXzRQNV8yN1AwLAorICBWRENfN1AwXzIwUDAsCisgIFZEQ184UDBfMTZQMCwKKyAgVkRDXzlQMF8xNVAwLAorICBWRENfOVAwXzE2UDAsCisgIFZEQ185UDBfMjRQMCwKKyAgVkRDXzEwUDhfMjBQMCwKKyAgVkRDXzI3UDBfNDJQMCwKKyAgVkRDXzEwUDhfMTNQMgorfSB2ZGNSYW5nZVR5cGU7CisKKy8qKgorKiAgQmF0dGVyeSBSYWlsIG9wdGlvbiB0YWdzIC0gcGxlYXNlIHJlZmVyIGhhcmR3YXJlIGRlc2lnbgorKi8KK3R5cGVkZWYgZW51bQoreworICBCT19EQ0RDX1RTUywgICAgICAgIC8qKjwgVXNlZCBmb3IgRml4ZWQgUmFpbCBEQy1EQyBzdXBwbGllcyAqLworICBCT19EQ0RDX1RSQUNLSU5HLCAgIC8qKjwgVXNlZCBmb3IgVHJhY2tpbmcgREMtREMgc3VwcGxpZXMgKi8KKyAgQk9fRENEQ19FWFRFUk5BTCwgICAvKio8IFVzZWQgZm9yIGV4dGVybmFsIGZpeGVkIHJhaWwgc3VwcGxpZXMgKi8KKyAgQk9fRENEQ19UU1NfSVNPLCAgICAvKio8IFVzZWQgZm9yIGlzb2xhdGVkIFRTUyBzdXBwbGllcyAqLworICBCT19EQ0RDX1FTUywgICAgICAgIC8qKjwgVXNlZCBmb3IgUVNTIERlc2lnbnMgKi8KKyAgQk9fRENEQ19GSVhFRF9SQUlMID0gQk9fRENEQ19UU1MgICAgIC8qKjwgRml4ZWQgcmFpbCByZXBsYWNlZCBieSBUU1MgKi8KKyNpZm5kZWYgU0lWT0lDRV9DRkdfTkVXVFlQRVNfT05MWQorICAsRklYRUQgPSBCT19EQ0RDX0ZJWEVEX1JBSUwgLyoqPCBAZGVwcmVjYXRlZCB1c2UgQk9fRENEQ19GSVhFRF9SQUlMICovCisgICxUUkFDS0lORyA9IEJPX0RDRENfVFJBQ0tJTkcgIC8qKjwgQGRlcHJlY2F0ZWQgdXNlIEJPX0RDRENfVFJBQ0tJTkcgKi8KKyNlbmRpZgorICAsQk9fRENEQ19VTktOT1dOCit9IGJhdFJhaWxUeXBlOworCisvKioKKyogIEZFVCBHYXRlIERyaXZlciBvcHRpb24gdGFncworKi8KKwordHlwZWRlZiBlbnVtCit7CisgIEJPX0dEUlZfTk9UX0lOU1RBTExFRCA9IDAsCisgIEJPX0dEUlZfSU5TVEFMTEVEICAgICA9IDEKK30gZ2F0ZURyaXZlVHlwZTsKKworLyoqCisqICBBdXRvIFpDQUwgRW5hYmxlIG9wdGlvbiB0YWdzCisqLworCit0eXBlZGVmIGVudW0KK3sKKyAgQVVUT19aQ0FMX0RJU0FCTEVEICA9IDAsCisgIEFVVE9fWkNBTF9FTkFCTEVEICAgPSAxCit9IGF1dG9aY2FsVHlwZTsKKworLyoqCisqICBWREFBIFN1cHBvcnQgb3B0aW9uIHRhZ3MKKyovCit0eXBlZGVmIGVudW0KK3sKKyAgVkRBQV9ESVNBQkxFRCA9IDAsCisgIFZEQUFfRU5BQkxFRCAgPSAxCit9IHZkYWFTdXBwb3J0VHlwZTsKKworLyoqCisqICBQTSBCT00gU3VwcG9ydCBvcHRpb24gdGFncworKi8KKwordHlwZWRlZiBlbnVtCit7CisgIEJPX1NURF9CT00sCisgIEJPX1BNX0JPTQorfSBwbUJvbVR5cGU7CisKKy8qKgorKiBJbml0aWFsaXphdGlvbiBvcHRpb25zIHRvIGFsbG93IGluaXQgZmxvdyBhbmQvb3IgY29udGVudCB0byBiZQorKiBhbHRlcmVkIGF0IHJ1bnRpbWUKKyovCit0eXBlZGVmIGVudW0KK3sKKyAgSU5JVF9OT19PUFQsICAgICAgICAvKio8ICBObyBpbml0aWFsaXphdGlvbiBvcHRpb24gKi8KKyAgSU5JVF9SRUlOSVQsICAgICAgICAvKio8ICBSZWluaXRpYWxpemF0aW9uIG9wdGlvbiAqLworICBJTklUX05PX0NBTCwgICAgICAgIC8qKjwgIFNraXAgY2FsaWJyYXRpb24gb25seSAtIERFQlVHIHVzZSBvbmx5ICovCisgIElOSVRfTk9fUEFUQ0hfTE9BRCwgLyoqPCAgU2tpcCBwYXRjaCBsb2FkIC0gREVCVUcgdXNlIG9ubHkgKi8KKyAgSU5JVF9TT0ZUUkVTRVQgICAgICAvKio8ICBTTElDIGlzIHJ1bm5pbmcgYWZ0ZXIgYSBTT0MgcmVzZXQgKi8KK30gaW5pdE9wdGlvbnNUeXBlOworCisvKioKKyoqIFRoaXMgaXMgdGhlIG1haW4gVm9pY2UgZGV2aWNlIG9iamVjdAorKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIFNpVm9pY2VDb250cm9sSW50ZXJmYWNlVHlwZQorICAqY3RybEludGVyZmFjZTsgICAgICAgICAgIC8qKjwgSG93IGRvIHdlIHRhbGsgdG8gdGhlIHN5c3RlbT8gVXNlciBzdXBwbGllZCBmdW5jdGlvbnMgYXJlIGNvbm5lY3RlZCBoZXJlICovCisgIHJldmlzaW9uVHlwZSBjaGlwUmV2OyAgICAgLyoqPCBXaGF0IHJldmlzaW9uIGlzIHRoZSBjaGlwPyAqLworICBwYXJ0TnVtYmVyVHlwZSBjaGlwVHlwZTsgIC8qKjwgV2hhdCBtZW1iZXIgb2YgdGhlIHBhcnRpY3VsYXIgZmFtaWx5IGlzIHRoaXMgY2hpcD8gKi8KKyAgdUludDggbHNSZXY7ICAgICAgICAgICAgICAvKio8IERBQTogd2hhdCByZXYgaXMgdGhlIGxpbmUgc2lkZSBjaGlwPyAqLworICB1SW50OCBsc1R5cGU7ICAgICAgICAgICAgIC8qKjwgREFBOiB3aGF0IHR5cGUgaXMgdGhlIGxpbmUgc2lkZSBjaGlwICovCit9IFNpVm9pY2VEZXZpY2VUeXBlOworCit0eXBlZGVmIFNpVm9pY2VEZXZpY2VUeXBlICpTaVZvaWNlRGV2aWNlVHlwZV9wdHI7IC8qKjwgU2hvcnRjdXQgdHlwZWRlZiAqLworCisjaWZkZWYgU0lWT0lDRV9ORU9OX01XSV9TVVBQT1JUCisvKgorKiogRGVmaW5lcyBzdHJ1Y3R1cmUgZm9yIHN0b3JpbmcgTVdJIHBhcmFtcworKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIHJhbURhdGEgcmluZ29mOworICByYW1EYXRhIHJpbmdhbXA7CisgIHJhbURhdGEgdmJhdHJfZXhwZWN0OworICByYW1EYXRhIHZvdl9yaW5nX2JhdDsKKyAgcmFtRGF0YSB2b3ZfcmluZ19nbmQ7CisgIHJhbURhdGEgcnRhY3RoOworICByYW1EYXRhIHJ0ZGN0aDsKKyAgcmFtRGF0YSBpcmluZ19saW07CisgIHJhbURhdGEgZGNkY19ybmd0eXBlOworICByYW1EYXRhIHNsb3BlX3Jpbmc7CisgIHJhbURhdGEgcnRwZXI7CisgIHJhbURhdGEgcmluZ2ZyOworICByYW1EYXRhIHJ0ZGNkYjsKKyAgcmFtRGF0YSBsY3JtYXNrOworICByYW1EYXRhIGRjZGNfb2l0aHJlc2hfbG87CisgIHVJbnQ4IGVuaGFuY2U7CisgIHVJbnQ4IHJpbmdjb247CisgIHVJbnQ4IHVzZXJzdGF0OworICB1SW50OCBsaW5lZmVlZDsKK30gU2lWb2ljZV9NV0lfU3RvcmU7CisjZW5kaWYKKworLyogRGVmaW5lIGEgY29tcGxldGUgcmluZyBjYWRlbmNlICovCit0eXBlZGVmIHN0cnVjdAoreworIHVJbnQzMiBzdGVwczsgIC8qIEluIHRpY2tzICovCisgdUludDMyIG9uVGltZTsKKyB1SW50MzIgb2ZmVGltZTsgLyogIiIgKi8KKyB1SW50MzIgc3RlcF9zaXplOworIHVJbnQzMiB2b247CisgdUludDMyIHZvZmY7Cit9IFNpVm9pY2VfTVdJX3BvbGxfdDsKKwordHlwZWRlZiBlbnVtCit7CisgIFBST1NMSUNfTVdJX09OLAorICBQUk9TTElDX01XSV9PRkYsCisgIFBST1NMSUNfTVdJX1JBTVBfT04sCisgIFBST1NMSUNfTVdJX1JBTVBfT0ZGCit9IFNpVm9pY2VfTVdJcmFtcFN0YXRlc190OworCit0eXBlZGVmIHN0cnVjdAoreworICBTaVZvaWNlX01XSV9wb2xsX3QgICAgICAgcG9sbDsKKyAgU2lWb2ljZV9NV0lyYW1wU3RhdGVzX3QgIHN0YXRlOworICB1SW50MzIgICAgICAgICAgICAgICAgICAgdGlja3M7IC8qIEhvdyBtYW55IHRpY2tzIGxlZnQgdG8gbmV4dCBzdGF0ZT8gKi8KK30gU2lWb2ljZV9NV0lyYW1wU3RhdGVfdDsKKworLyoqCisqKiBUaGlzIGlzIHRoZSBtYWluIFByb1NMSUMgY2hhbm5lbCBvYmplY3QKKyovCit0eXBlZGVmIHN0cnVjdAoreworICBTaVZvaWNlRGV2aWNlVHlwZV9wdHIKKyAgZGV2aWNlSWQ7ICAgICAgICAgICAgIC8qKjwgSW5mb3JtYXRpb24gYWJvdXQgdGhlIGRldmljZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjaGFubmVsICovCisgIHVJbnQ4IGNoYW5uZWw7ICAgICAgICAvKio8IFdoaWNoIGNoYW5uZWwgaXMgdGhpcyBkZXZpY2U/IFRoaXMgaXMgYSBzeXN0ZW0gcGFyYW1ldGVyIG1lYW5pbmcgaWYgeW91IGhhdmUgMiBkdWFsIGNoYW5uZWwgZGV2aWNlcyBpbiB5b3VyIHN5c3RlbSwgdGhpcyBudW1iZXIgd291bGQgdGhlbiB0eXBpY2FsbHkgZ28gZnJvbSAwLTMgKi8KKyAgY2hhbm5lbFR5cGVUeXBlIGNoYW5uZWxUeXBlOyAvKio8IElzIHRoaXMgYSBQcm9TTElDIG9yIGEgREFBICovCisgIGVycm9yQ29kZVR5cGUgZXJyb3I7ICAvKio8IFN0b3JhZ2UgZm9yIHRoZSBjdXJyZW50IGVycm9yIHN0YXRlIC0gdXNlZCBvbmx5IGZvciBBUElzIHRoYXQgZG9uJ3QgcmV0dXJuIGJhY2sgYW4gZXJyb3IgKi8KKyAgaW50IGRlYnVnTW9kZTsgICAgICAgIC8qKjwgQXJlIHdlIGRlYnVnZ2luZyBvbiB0aGlzIGNoYW5uZWw/ICovCisgIGludCBjaGFubmVsRW5hYmxlOyAgICAvKio8ICBpcyB0aGUgY2hhbm5lbCBlbmFibGVkIG9yIG5vdD8gSWYgbm90LCB0aGlzIGNoYW5uZWwgaXMgbm90IGluaXRpYWxpemVkICovCisgIGJvbU9wdGlvbnNUeXBlIGJvbU9wdGlvbjsgLyoqPCBEZXZpY2UvUENCIHNwZWNpZmljICovCisgIHVJbnQ4IGRjZGNfcG9sYXJpdHlfaW52ZXJ0OyAgLyoqPCAgSW52ZXJ0IERDREMgcG9sYXJpdHkgZnJvbSB3aGF0IGlzIHByb3ZpZGVkIGluIGdlbmVyYWwgcGFyYW1ldGVycyAqLworICB1SW50OCBzY3JhdGNoOyAgICAgICAgLyoqPCBJbnRlcm5hbCB1c2Ugb25seSAqLworICB1SW50OCBzY3JhdGNoMjsgICAgICAgLyoqPCBJbnRlcm5hbCB1c2Ugb25seSAqLworI2lmZGVmIFNJVk9JQ0VfTkVPTl9NV0lfU1VQUE9SVAorICBTaVZvaWNlX01XSV9TdG9yZSBtd2lTYXZlOworICBTaVZvaWNlX01XSXJhbXBTdGF0ZV90IG13aVN0YXRlOworI2VuZGlmCit9IFNpVm9pY2VDaGFuVHlwZTsKKworCit0eXBlZGVmIFNpVm9pY2VDaGFuVHlwZSAqU2lWb2ljZUNoYW5UeXBlX3B0cjsKKy8qKiBAfSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogQGRlZmdyb3VwIFNJVk9JQ0VfSUZfQ0ZHICBTaVZvaWNlIFN5c3RlbSBjb250cm9sIGludGVyZmFjZSBmdW5jdGlvbnMKKyAqCisgKiBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgYnkgdGhlIFByb1NMSUMgQVBJIHRvIGFjY2VzcyBzeXN0ZW0gcmVzb3VyY2VzCisgKiBzdWNoIGFzIFNQSS9HQ0kgYWNjZXNzLCBtZW1vcnkgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gYW5kIHRpbWVycy4KKyAqCisgKiBAeworICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogQGRlZmdyb3VwIFNJVk9JQ0VfTUVNT1JZX0lGIFNpVm9pY2UgTWVtb3J5IGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uCisgKgorICogVGhlc2UgZnVuY3Rpb25zIGR5bmFtaWNhbGx5IGFsbG9jYXRlIGFuZCBkZWFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGdpdmVuCisgKiBzdHJ1Y3R1cmVzLiBtYWxsb2MoKSBhbmQgbWVtc2V0KCkgYXJlIGNhbGxlZCBmb3IgYWxsb2NhdGlvbiBhbmQgZnJlZSgpIGlzCisgKiBjYWxsZWQgZm9yIGRlYWxsb2NhdGlvbi4gIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdHlwaWNhbGx5IGNhbGxlZCBkdXJpbmcKKyAqIGluaXRpYWxpemF0aW9uIG9mIHRoZSBBUEkgYW5kIGF0IHRoZSB0ZWFyIGRvd24gb2YgdGhlIEFQSS4gIElmIGN1c3RvbWVycworICogcHJlZmVyIHRvIHVzZSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBzdHJ1Y3R1cmVzLCB0aGVuIHRoZXkgbXVzdCBlbnN1cmUgdGhhdAorICogdGhlIHN0cnVjdHVyZSBlbGVtZW50cyBhcmUgemVybydlZCBvdXQuCisgKgorICogQHsKKyAqLworCisvKioKKyBAYnJpZWYKKyAqICBBbGxvY2F0ZSBtZW1vcnkgYW5kIGluaXRpYWxpemUgdGhlIGdpdmVuIHN0cnVjdHVyZS4KKyAqCisgKiBAcGFyYW1baW4sb3V0XSBwQ3RybEludGYgLSB0aGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKKyAqIEBwYXJhbVtpbl0gaW50ZXJmYWNlX2NvdW50IC0gbnVtYmVyIG9mIGRldmljZSBpbnRlcmZhY2VzIHByZXNlbnQuICBUeXBpY2FsbHkgMSBpbnRlcmZhY2UgcGVyIFNQSSBjb250cm9sbGVyLgorICoKKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKiBAc2EgU2lWb2ljZV9kZXN0cm95Q29udHJvbEludGVyZmFjZXMKKyAqLworCitpbnQgU2lWb2ljZV9jcmVhdGVDb250cm9sSW50ZXJmYWNlcyAoU2lWb2ljZUNvbnRyb2xJbnRlcmZhY2VUeXBlICoqcEN0cmxJbnRmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVJbnQzMiBpbnRlcmZhY2VfY291bnQpOworI2RlZmluZSBTaVZvaWNlX2NyZWF0ZUNvbnRyb2xJbnRlcmZhY2UoWCkgU2lWb2ljZV9jcmVhdGVDb250cm9sSW50ZXJmYWNlcygoWCksMSkKKworLyoqCisgQGJyaWVmCisgKiAgRGVzdHJveXMgdGhlIGdpdmVuIHN0cnVjdHVyZSBhbmQgZGVhbGxvY2F0ZXMgbWVtb3J5LgorICoKKyAqIEBwYXJhbVtpbixvdXRdIHBDdHJsSW50ZiAgLSB0aGUgc3RydWN0dXJlIHRvIGRlc3Ryb3kvZGVhbGxvY2F0ZQorICoKKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKiBAc2EgU2lWb2ljZV9jcmVhdGVDb250cm9sSW50ZXJmYWNlcworICovCisKK2ludCBTaVZvaWNlX2Rlc3Ryb3lDb250cm9sSW50ZXJmYWNlcyAoU2lWb2ljZUNvbnRyb2xJbnRlcmZhY2VUeXBlICoqcEN0cmxJbnRmKTsKKyNkZWZpbmUgU2lWb2ljZV9kZXN0cm95Q29udHJvbEludGVyZmFjZSBTaVZvaWNlX2Rlc3Ryb3lDb250cm9sSW50ZXJmYWNlcworCisvKioKKyBAYnJpZWYKKyAqICBBbGxvY2F0ZSBtZW1vcnkgYW5kIGluaXRpYWxpemUgdGhlIGdpdmVuIHN0cnVjdHVyZS4KKyAqCisgKiBAcGFyYW1baW4sb3V0XSBwRGV2IC0gdGhlIHN0cnVjdHVyZSB0byBpbml0aWFsaXplCisgKiBAcGFyYW1baW5dIGRldmljZV9jb3VudCAtIG51bWJlciBvZiBkZXZpY2VzIHRvIGFsbG9jYXRlLgorICoKKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKiBAc2EgU2lWb2ljZV9kZXN0cm95RGV2aWNlcworICovCisKK2ludCBTaVZvaWNlX2NyZWF0ZURldmljZXMgKFNpVm9pY2VEZXZpY2VUeXBlICoqcERldiwgdUludDMyIGRldmljZV9jb3VudCk7CisjZGVmaW5lIFNpVm9pY2VfY3JlYXRlRGV2aWNlKFgpIFNpVm9pY2VfY3JlYXRlRGV2aWNlcygoWCksMSkKKworLyoqCisgQGJyaWVmCisgKiAgRGVzdHJveXMgdGhlIGdpdmVuIHN0cnVjdHVyZSBhbmQgZGVhbGxvY2F0ZXMgbWVtb3J5LgorICoKKyAqIEBwYXJhbVtpbixvdXRdIHBEZXYgLSB0aGUgc3RydWN0dXJlIHRvIGRlc3Ryb3kvZGVhbGxvY2F0ZQorICoKKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKiBAc2EgU2lWb2ljZV9jcmVhdGVEZXZpY2VzCisgKi8KKworaW50IFNpVm9pY2VfZGVzdHJveURldmljZXMgKFNpVm9pY2VEZXZpY2VUeXBlICoqcERldik7CisKKyNkZWZpbmUgU2lWb2ljZV9kZXN0cm95RGV2aWNlIFNpVm9pY2VfZGVzdHJveURldmljZXMKKworLyoqCisgQGJyaWVmCisgKiAgQWxsb2NhdGUgbWVtb3J5IGFuZCBpbml0aWFsaXplIHRoZSBnaXZlbiBzdHJ1Y3R1cmUuCisgKgorICogQHBhcmFtW2luLG91dF0gcENoYW4gLSB0aGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKKyAqIEBwYXJhbVtpbl0gY2hhbm5lbF9jb3VudCAtIG51bWJlciBvZiBjaGFubmVscyB0byBhbGxvY2F0ZS4KKyAqCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICogQHNhIFNpVm9pY2VfZGVzdHJveUNoYW5uZWxzCisgKi8KKworaW50IFNpVm9pY2VfY3JlYXRlQ2hhbm5lbHMgKFNpVm9pY2VDaGFuVHlwZV9wdHIgKnBDaGFuLCB1SW50MzIgY2hhbm5lbF9jb3VudCk7CisKKyNkZWZpbmUgU2lWb2ljZV9jcmVhdGVDaGFubmVsKFgpIFNpVm9pY2VfY3JlYXRlQ2hhbm5lbHMoKFgpLDEpCisKKy8qKgorIEBicmllZgorICogIERlc3Ryb3lzIHRoZSBnaXZlbiBzdHJ1Y3R1cmUgYW5kIGRlYWxsb2NhdGVzIG1lbW9yeS4KKyAqCisgKiBAcGFyYW1baW4sb3V0XSBwQ2hhbiAtIHRoZSBzdHJ1Y3R1cmUgdG8gZGVzdHJveS9kZWFsbG9jYXRlCisgKgorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqIEBzYSBTaVZvaWNlX2NyZWF0ZUNoYW5uZWxzCisgKi8KKworI2RlZmluZSBTaVZvaWNlX2Rlc3Ryb3lDaGFubmVsIFNpVm9pY2VfZGVzdHJveUNoYW5uZWxzCitpbnQgU2lWb2ljZV9kZXN0cm95Q2hhbm5lbHMgKFNpVm9pY2VDaGFuVHlwZV9wdHIgKnBDaGFuKTsKKy8qKiBAfSBTSVZPSUNFX01FTU9SWV9JRiAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogQGRlZmdyb3VwIFNJVk9JQ0VfSU8gU2lWb2ljZSBTUEkvR0NJIGFjY2VzcyByb3V0aW5lcworICogVGhpcyBncm91cCBvZiBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gYXNzb2NpYXRlIHRoZSB0cmFuc3BvcnQgbWVjaGFuaXNtIChTUEksIEdDSSkgZnVuY3Rpb25zIHdpdGggdGhlIEFQSS4gIFRoZSBhY3R1YWwKKyAqIGZ1bmN0aW9ucyBiZWluZyByZWZlcmVuY2VzIGFyZSBub3JtYWxseSBpbXBsZW1lbnRlZCBieSB0aGUgY3VzdG9tZXIgZm9yIHRoZWlyIHBhcnRpY3VsYXIgT1MgYW5kIHBsYXRmb3JtLgorICoKKyAqIEB7CisgKi8KKworLyoqCisgQGJyaWVmCisgKiAgQXNzb2NpYXRlIGEgaW50ZXJmYWNlIG9iamVjdCB3aXRoIGEgdXNlciBzdXBwbGllZCBkYXRhIHN0cnVjdHVyZS4gIFRoaXMKKyAqICBzdHJ1Y3R1cmUgaXMgcGFzc2VkIHRvIGFsbCB0aGUgSS9PIHJvdXRpbmVzIHRoYXQgdGhlIFByb1NMSUMgQVBJIGNhbGxzLgorICoKKyAqIEBwYXJhbVtpbixvdXRdIHBDdHJsSW50ZiAtIHdoaWNoIGludGVyZmFjZSB0byBhc3NvY2lhdGUKKyAqICAgICAgICAgICAgICAgIHRoZSB1c2VyIHN1cHBsaWVkIHN0cnVjdHVyZSB3aXRoLgorICogQHBhcmFtW2luXSAqaEN0cmwgLSB0aGUgdXNlciBzdXBwbGllZCBzdHJ1Y3R1cmUgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIElPIGZ1bmN0aW9ucy4KKyAqCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICovCisKK2ludCBTaVZvaWNlX3NldENvbnRyb2xJbnRlcmZhY2VDdHJsT2JqIChTaVZvaWNlQ29udHJvbEludGVyZmFjZVR5cGUgKnBDdHJsSW50ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpoQ3RybCk7CisKKy8qKgorIEBicmllZgorICogIEFzc29jaWF0ZSBhIGludGVyZmFjZSBvYmplY3Qgd2l0aCB0aGUgcmVzZXQgZnVuY3Rpb24uCisgKgorICogQHBhcmFtW2luLG91dF0gcEN0cmxJbnRmIC0gd2hpY2ggaW50ZXJmYWNlIHRvIGFzc29jaWF0ZQorICogICAgICAgICAgICAgICAgdGhlIHVzZXIgc3VwcGxpZWQgZnVuY3Rpb24gd2l0aC4KKyAqIEBwYXJhbVtpbl0gUmVzZXRfZnB0ciAtIHRoZSByZXNldCBmdW5jdGlvbiBwb2ludGVyCisgKgorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqLworCitpbnQgU2lWb2ljZV9zZXRDb250cm9sSW50ZXJmYWNlUmVzZXQgKFNpVm9pY2VDb250cm9sSW50ZXJmYWNlVHlwZSAqcEN0cmxJbnRmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHJsX1Jlc2V0X2ZwdHIgUmVzZXRfZnB0cik7CisKKy8qKgorIEBicmllZgorICogIEFzc29jaWF0ZSBhIGludGVyZmFjZSBvYmplY3Qgd2l0aCB0aGUgcmVnaXN0ZXIgd3JpdGUgZnVuY3Rpb24uCisgKgorICogQHBhcmFtW2luLG91dF0gcEN0cmxJbnRmIC0gd2hpY2ggaW50ZXJmYWNlIHRvIGFzc29jaWF0ZQorICogICAgICAgICAgICAgICAgdGhlIHVzZXIgc3VwcGxpZWQgZnVuY3Rpb24gd2l0aC4KKyAqIEBwYXJhbVtpbl0gV3JpdGVSZWdpc3Rlcl9mcHRyIC0gdGhlIHJlZ2lzdGVyIHdyaXRlIGZ1bmN0aW9uIHBvaW50ZXIKKyAqCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICovCisKK2ludCBTaVZvaWNlX3NldENvbnRyb2xJbnRlcmZhY2VXcml0ZVJlZ2lzdGVyIChTaVZvaWNlQ29udHJvbEludGVyZmFjZVR5cGUKKyAgICAqcEN0cmxJbnRmLCBjdHJsX1dyaXRlUmVnaXN0ZXJfZnB0ciBXcml0ZVJlZ2lzdGVyX2ZwdHIpOworCisvKioKKyBAYnJpZWYKKyAqICBBc3NvY2lhdGUgYSBpbnRlcmZhY2Ugb2JqZWN0IHdpdGggdGhlIHJlZ2lzdGVyIHJlYWQgZnVuY3Rpb24uCisgKgorICogQHBhcmFtW2luLG91dF0gcEN0cmxJbnRmIC0gd2hpY2ggaW50ZXJmYWNlIHRvIGFzc29jaWF0ZQorICogICAgICAgICAgICAgICAgdGhlIHVzZXIgc3VwcGxpZWQgZnVuY3Rpb24gd2l0aC4KKyAqIEBwYXJhbVtpbl0gUmVhZFJlZ2lzdGVyX2ZwdHItIHRoZSByZWdpc3RlciByZWFkIGZ1bmN0aW9uIHBvaW50ZXIKKyAqCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICovCisKK2ludCBTaVZvaWNlX3NldENvbnRyb2xJbnRlcmZhY2VSZWFkUmVnaXN0ZXIgKFNpVm9pY2VDb250cm9sSW50ZXJmYWNlVHlwZQorICAgICpwQ3RybEludGYsIGN0cmxfUmVhZFJlZ2lzdGVyX2ZwdHIgUmVhZFJlZ2lzdGVyX2ZwdHIpOworCisvKioKKyBAYnJpZWYKKyAqICBBc3NvY2lhdGUgYSBpbnRlcmZhY2Ugb2JqZWN0IHdpdGggdGhlIHdyaXRlIFJBTSBmdW5jdGlvbi4KKyAqCisgKiBAcGFyYW1baW4sb3V0XSBwQ3RybEludGYgLSB3aGljaCBpbnRlcmZhY2UgdG8gYXNzb2NpYXRlCisgKiAgICAgICAgICAgICAgICB0aGUgdXNlciBzdXBwbGllZCBmdW5jdGlvbiB3aXRoLgorICogQHBhcmFtW2luXSBXcml0ZVJBTV9mcHRyIC0gdGhlIHJlc2V0IGZ1bmN0aW9uIHBvaW50ZXIKKyAqCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICovCisKK2ludCBTaVZvaWNlX3NldENvbnRyb2xJbnRlcmZhY2VXcml0ZVJBTSAoU2lWb2ljZUNvbnRyb2xJbnRlcmZhY2VUeXBlICpwQ3RybEludGYsCisgICAgY3RybF9Xcml0ZVJBTV9mcHRyIFdyaXRlUkFNX2ZwdHIpOworCisvKioKKyBAYnJpZWYKKyAqICBBc3NvY2lhdGUgYSBpbnRlcmZhY2Ugb2JqZWN0IHdpdGggdGhlIHJlYWQgUkFNIGZ1bmN0aW9uLgorICoKKyAqIEBwYXJhbVtpbixvdXRdIHBDdHJsSW50ZiAtIHdoaWNoIGludGVyZmFjZSB0byBhc3NvY2lhdGUKKyAqICAgICAgICAgICAgICAgIHRoZSB1c2VyIHN1cHBsaWVkIGZ1bmN0aW9uIHdpdGguCisgKiBAcGFyYW1baW5dICBSZWFkUkFNX2ZwdHIgLSB0aGUgcmVhZCBSQU0gZnVuY3Rpb24gcG9pbnRlcgorICoKKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKi8KKworaW50IFNpVm9pY2Vfc2V0Q29udHJvbEludGVyZmFjZVJlYWRSQU0gKFNpVm9pY2VDb250cm9sSW50ZXJmYWNlVHlwZSAqcEN0cmxJbnRmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0cmxfUmVhZFJBTV9mcHRyIFJlYWRSQU1fZnB0cik7CisvKiogQH0gU0lWT0lDRV9JTyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogQGRlZmdyb3VwIFNJVk9JQ0VfVElNRVIgU2lWb2ljZSBUaW1lciBmdW5jdGlvbnMKKyAqCisgKiBUaGlzIGdyb3VwIG9mIGZ1bmN0aW9ucyBhc3NvY2lhdGVzIHRoZSBjdXN0b21lciBzdXBwbGllZCB0aW1lciByb3V0aW5lcyB3aXRoCisgKiB0aGUgUHJvU0xJQyBBUEkuIFBsZWFzZSBub3RlLCBmb3IgbW9zdCBhcHBsaWNhdGlvbnMsIG9ubHkgdGhlIGRlbGF5IHJvdXRpbmUKKyAqIGlzIHJlcXVpcmVkLiAgVGhlIG90aGVyIHJvdXRpbmVzIGFyZSBuZWVkZWQgZm9yIHRoZSBwdWxzZSBkaWdpdCBBUEkuCisgKiBAeworICovCisKKy8qKgorIEBicmllZgorICogIFRoaXMgZnVuY3Rpb24gYXNzb2NpYXRlcyBhIHRpbWVyIG9iamVjdCAtIHdoaWNoIGlzIHVzZXIgZGVmaW5lZCwgYnV0IGl0IGlzCisgKiAgdXNlZCB3aXRoIEFMTCBjaGFubmVscyBvZiB0aGUgcGFydGljdWxhciBjb250cm9sIGludGVyZmFjZS4KKyAqCisgKiAgQHBhcmFtW2luXSBwQ3RybEludGYgd2hpY2ggY29udHJvbCBpbnRlcmZhY2UgdG8gYXNzb2NpYXRlIHRoZSBnaXZlbiB0aW1lciBvYmplY3Qgd2l0aC4KKyAqICBAcGFyYW1baW5dICpoVGltZXIgLSB0aGUgdGltZXIgb2piZWN0IHRoYXQgaXMgcGFzc2VkIHRvIGFsbCB0aW1lciBmdW5jdGlvbnMuCisgKiAgQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqCisgKiAgQHNhIFNpVm9pY2Vfc2V0Q29udHJvbEludGVyZmFjZURlbGF5IFNpVm9pY2Vfc2V0Q29udHJvbEludGVyZmFjZVRpbWVFbGFwc2VkIFNpVm9pY2Vfc2V0Q29udHJvbEludGVyZmFjZUdldFRpbWUgUFJPU0xJQ19USU1FUgorICovCisKK2ludCBTaVZvaWNlX3NldENvbnRyb2xJbnRlcmZhY2VUaW1lck9iaiAoU2lWb2ljZUNvbnRyb2xJbnRlcmZhY2VUeXBlICpwQ3RybEludGYsCisgICAgdm9pZCAqaFRpbWVyKTsKKworLyoqCisgQGJyaWVmCisgKiAgQXNzb2NpYXRlIGEgdGltZXIgZGVsYXkgZnVuY3Rpb24gd2l0aCBhIGdpdmVuIGNvbnRyb2wgaW50ZXJmYWNlLiAgVGhlCisgKiAgZGVsYXkgZnVuY3Rpb24gdGFrZXMgaW4gYW4gYXJndW1lbnQgb2YgdGhlIHRpbWVyIG9iamVjdCBhbmQgdGhlIHRpbWUgaW4gbVNlYworICogIGFuZCBkZWxheXMgdGhlIHRocmVhZC90YXNrIGZvciBhdCBsZWFzdCB0aGUgdGltZSByZXF1ZXN0ZWQuCisgKgorICogQHBhcmFtW2luXSBwQ3RybEludGYgLSB3aGljaCBjb250cm9sIGludGVyZmFjZSB0byBhc3NvY2lhdGUgdGhlIGZ1bmN0aW9uIHdpdGguCisgKiBAcGFyYW1baW5dIERlbGF5X2ZwdHIgLSB0aGUgcG9pbnRlciB0byB0aGUgZGVsYXkgZnVuY3Rpb24uCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICoKKyAqICBAc2EgU2lWb2ljZV9zZXRDb250cm9sSW50ZXJmYWNlVGltZXJPYmogU2lWb2ljZV9zZXRDb250cm9sSW50ZXJmYWNlVGltZUVsYXBzZWQgU2lWb2ljZV9zZXRDb250cm9sSW50ZXJmYWNlR2V0VGltZSBQUk9TTElDX1RJTUVSCisgKi8KKworaW50IFNpVm9pY2Vfc2V0Q29udHJvbEludGVyZmFjZURlbGF5IChTaVZvaWNlQ29udHJvbEludGVyZmFjZVR5cGUgKnBDdHJsSW50ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtX2RlbGF5X2ZwdHIgRGVsYXlfZnB0cik7CisKKy8qKgorICogIERlc2NyaXB0aW9uOgorICogICBBc3NvY2lhdGUgYSB0aW1lIGVsYXBzZWQgZnVuY3Rpb24gd2l0aCBhIGdpdmVuIGNvbnRyb2wgaW50ZXJmYWNlLiAgVGhlCisgKiAgIHRpbWUgZWxhcHNlZCBmdW5jdGlvbiB1c2VzIHRoZSB2YWx1ZXMgZnJvbSB0aGUgZnVuY3Rpb24gc3BlY2lmaWVkIGluCisgKiAgIEByZWYgU2lWb2ljZV9zZXRDb250cm9sSW50ZXJmYWNlR2V0VGltZSBhbmQgY29tcHV0ZXMgdGhlIGRlbHRhIHRpbWUKKyAqICAgaW4gbVNlYy4KKyAqICBAcGFyYW1baW5dIHBDdHJsSW50ZiAtIHdoaWNoIGNvbnRyb2wgaW50ZXJmYWNlIHRvIGFzc29jaWF0ZSB0aGUgZnVuY3Rpb24gd2l0aC4KKyAqICBAcGFyYW1baW5dIHRpbWVFbGFwc2VkX2ZwdHIgLSB0aGUgcG9pbnRlciB0byB0aGUgZWxhcHNlZCB0aW1lIGZ1bmN0aW9uLgorICogIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKiAgQHNhIFNpVm9pY2Vfc2V0Q29udHJvbEludGVyZmFjZVRpbWVyT2JqIFNpVm9pY2Vfc2V0Q29udHJvbEludGVyZmFjZUdldFRpbWUgU2lWb2ljZV9zZXRDb250cm9sSW50ZXJmYWNlRGVsYXkgUFJPU0xJQ19USU1FUgorICovCisKK2ludCBTaVZvaWNlX3NldENvbnRyb2xJbnRlcmZhY2VUaW1lRWxhcHNlZCAoU2lWb2ljZUNvbnRyb2xJbnRlcmZhY2VUeXBlCisgICAgKnBDdHJsSW50Ziwgc3lzdGVtX3RpbWVFbGFwc2VkX2ZwdHIgdGltZUVsYXBzZWRfZnB0cik7CisKKy8qKgorICogIERlc2NyaXB0aW9uOgorICogICBBc3NvY2lhdGUgYSB0aW1lIGdldCBmdW5jdGlvbiB3aXRoIGEgZ2l2ZW4gY29udHJvbCBpbnRlcmZhY2UuICBUaGUKKyAqICAgdGltZSBnZXQgZnVuY3Rpb24gcmV0dXJucyBhIHZhbHVlIGluIGEgZm9ybSBvZiBhIHZvaWQgcG9pbnRlciB0aGF0CisgKiAgIGlzIHN1aXRhYmxlIHRvIGJlIHVzZWQgd2l0aCB0aGUgZnVuY3Rpb24gc3BlY2lmaWVkIGluIEByZWYgU2lWb2ljZV9zZXRDb250cm9sSW50ZXJmYWNlVGltZUVsYXBzZWQgLgorICogICBUaGlzIGlzIHR5cGljYWxseSB1c2VkIGFzIGEgdGltZXN0YW1wIG9mIHdoZW4gYW4gZXZlbnQgc3RhcnRlZC4gVGhlIHJlc29sdXRpb24gbmVlZHMgdG8gYmUgaW4gdGVybXMKKyAqICAgb2YgbVNlYy4KKyAqCisgKiAgQHBhcmFtW2luXSBwQ3RybEludGYgLSB3aGljaCBjb250cm9sIGludGVyZmFjZSB0byBhc3NvY2lhdGUgdGhlIGZ1bmN0aW9uIHdpdGguCisgKiAgQHBhcmFtW2luXSBnZXRUaW1lX2ZwdHIgLSAgdGhlIHBvaW50ZXIgdG8gdGhlIGdldCB0aW1lIGZ1bmN0aW9uLgorICogIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKiAgQHNhIFNpVm9pY2Vfc2V0Q29udHJvbEludGVyZmFjZVRpbWVyT2JqIFNpVm9pY2Vfc2V0Q29udHJvbEludGVyZmFjZVRpbWVFbGFwc2VkIFNpVm9pY2Vfc2V0Q29udHJvbEludGVyZmFjZURlbGF5IFBST1NMSUNfVElNRVIKKyAqLworCitpbnQgU2lWb2ljZV9zZXRDb250cm9sSW50ZXJmYWNlR2V0VGltZSAoU2lWb2ljZUNvbnRyb2xJbnRlcmZhY2VUeXBlICpwQ3RybEludGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtX2dldFRpbWVfZnB0ciBnZXRUaW1lX2ZwdHIpOworCisvKiogQH0gU0lWT0lDRV9USU1FUiAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogQGRlZmdyb3VwIFNJVk9JQ0VfUFJPQ19DT05UUk9MIFNpVm9pY2UgUHJvY2VzcyBjb250cm9sCisgKiBAeworICovCisKKy8qKgorIEBicmllZgorICogIFRoaXMgZnVuY3Rpb24gYXNzb2NpYXRlcyBhIHVzZXIgZGVmaW5lZCBzZW1hcGhvcmUvY3JpdGljYWwgc2VjdGlvbgorICogIGZ1bmN0aW9uIHdpdGggdGhlIGdpdmVuIGludGVyZmFjZS4KKyAqCisgKiBAcGFyYW1baW4sb3V0XSBwQ3RybEludGYgdGhlIGludGVyZmFjZSB0byBhc3NvY2lhdGUgdGhlIGZ1bmN0aW9uIHdpdGguCisgKiBAcGFyYW1baW5dIHNlbWFwaG9yZV9mcHRyIC0gdGhlIGZ1bmN0aW9uIHBvaW50ZXIgZm9yIHNlbWFwaG9yZSBjb250cm9sLgorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqLworCitpbnQgU2lWb2ljZV9zZXRDb250cm9sSW50ZXJmYWNlU2VtYXBob3JlIChTaVZvaWNlQ29udHJvbEludGVyZmFjZVR5cGUKKyAgICAqcEN0cmxJbnRmLCBjdHJsX1NlbWFwaG9yZV9mcHRyIHNlbWFwaG9yZV9mcHRyKTsKKworLyoqIEB9IFNJVk9JQ0VfUFJPQ19DT05UUk9MICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogQH0gU0lWT0lDRV9JRl9DRkcqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqIEBkZWZncm91cCBTSVZPSUNFX0lOSVQgSW5pdGlhbGl6YXRpb24gcm91dGluZXMKKyAqIEB7CisgKi8KKworLyoqCisgQGJyaWVmCisgKiAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgdmFyaW91cyBjaGFubmVsIHN0cnVjdHVyZSBlbGVtZW50cy4KKyAqICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGFjY2VzcyB0aGUgY2hpcHNldCBkaXJlY3RseSwgc28gU1BJL0dDSQorICogIGRvZXMgbm90IG5lZWQgdG8gYmUgdXAgZHVyaW5nIHRoaXMgZnVuY3Rpb24gY2FsbC4KKyAqCisgKiBAcGFyYW1baW4sb3V0XSBoUHJvc2xpYyAtIHdoaWNoIGNoYW5uZWwgdG8gaW5pdGlhbGl6ZS4KKyAqIEBwYXJhbVtpbl0gY2hhbm5lbCAtIFdoaWNoIGNoYW5uZWwgaW5kZXggaXMgdGhpcy4gIEZvciBleGFtcGxlLCBmb3IgYSA0IGNoYW5uZWwgc3lzdGVtLCB0aGlzIHdvdWxkIHR5cGljYWxseSByYW5nZSBmcm9tIDAgdG8gMy4KKyAqIEBwYXJhbVtpbl0gY2hpcFR5cGUgLSBjaGlwc2V0IGZhbWlseSB0eXBlIGZvciBleGFtcGxlIEByZWYgU0kzMjE3WF9UWVBFIG9yIEByZWYgU0kzMjE3WF9UWVBFCisgKiBAcGFyYW1baW5dIHBEZXZpY2VPYmogLSBEZXZpY2Ugc3RydWN0dXJlIHBvaW50ZXIgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2hhbm5lbAorICogQHBhcmFtW2luXSBwQ3RybEludGYgLSBDb250cm9sIGludGVyZmFjZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjaGFubmVsCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICoKKyAqIEBzYSBQcm9TTElDX1NXSW5pdENoYW4KKyAqLworCitpbnQgU2lWb2ljZV9TV0luaXRDaGFuIChTaVZvaWNlQ2hhblR5cGVfcHRyIGhQcm9zbGljLGludCBjaGFubmVsLGludCBjaGlwVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNpVm9pY2VEZXZpY2VUeXBlICpwRGV2aWNlT2JqLCBTaVZvaWNlQ29udHJvbEludGVyZmFjZVR5cGUgKnBDdHJsSW50Zik7CisKKy8qKgorIEBicmllZgorICogVGhpcyBmdW5jdGlvbiBjYWxscyB0aGUgdXNlciBzdXBwbGllZCByZXNldCBmdW5jdGlvbiB0byBwdXQgYW5kIHRha2Ugb3V0IHRoZSBjaGFubmVsIGZyb20gcmVzZXQuIFRoaXMgaXMKKyAqIHR5cGljYWxseSBkb25lIGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmQgbWF5IGJlIGFzc3VtZWQgdG8gYmUgYSAiZ2xvYmFsIiByZXNldCAtIHRoYXQgaXMgMSByZXNldCBwZXIKKyAqIGRhaXN5Y2hhaW4gdnMuIDEgcGVyIGRldmljZS4KKyAqCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGNhbiB0YWtlIG1vcmUgdGhhbiA1MDAgbVNlYyB0byBjb21wbGV0ZS4KKyAqCisgKiBAcGFyYW1baW5dIHBDaGFuIC0gd2hpY2ggY2hhbm5lbCB0byByZXNldCwgaWYgYSAiZ2xvYmFsIHJlc2V0IiwgdGhlbiBhbnkgY2hhbm5lbCBvbiB0aGUgZGFpc3kgY2hhaW4gaXMgc3VmZmljaWVudC4KKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKgorICovCisKK2ludCBTaVZvaWNlX1Jlc2V0IChTaVZvaWNlQ2hhblR5cGVfcHRyIHBDaGFuKTsKKworLyoqIEB9IFNJVk9JQ0VfSU5JVCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogQGRlZmdyb3VwIFNJVk9JQ0VfREVCVUcgRGVidWcKKyAqIEB7CisgKi8KKworLyoqCisgQGJyaWVmCisgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGRlYnVnIG1vZGUsIGFzc3VtaW5nIEByZWYgRU5BQkxFX0RFQlVHIGlzIHNldCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgorICoKKyAqIEBwYXJhbVtpbl0gcENoYW4gLSB3aGljaCBjaGFubmVsIHRvIHNldCB0aGUgZGVidWcgZmxhZy4KKyAqIEBwYXJhbVtpbl0gZGVidWdFbiAtIDAgPSBOb3Qgc2V0LCAxID0gc2V0LgorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqCisgKi8KKworaW50IFNpVm9pY2Vfc2V0U1dEZWJ1Z01vZGUgKFNpVm9pY2VDaGFuVHlwZV9wdHIgcENoYW4sIGludCBkZWJ1Z0VuKTsKKworLyoqCisgQGJyaWVmCisgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGRlYnVnIG1vZGUsIGFzc3VtaW5nIEByZWYgRU5BQkxFX1RSQUNFUyBpcyBzZXQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAqCisgKiBAcGFyYW1baW5dIHBDaGFuIC0gd2hpY2ggY2hhbm5lbCB0byBzZXQgdGhlIGRlYnVnIGZsYWcuCisgKiBAcGFyYW1baW5dIHRyYWNlRW4gLSAwID0gTm90IHNldCwgMSA9IHNldC4KKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKgorICovCisKK2ludCBTaVZvaWNlX3NldFRyYWNlTW9kZSAoU2lWb2ljZUNoYW5UeXBlX3B0ciBwQ2hhbiwgaW50IHRyYWNlRW4pOworCisvKioKKyAqIEBicmllZgorICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgYWNjZXNzIHRvIFNQSSByZWFkIHJlZ2lzdGVyIGZ1bmN0aW9uIHBvaW50ZXIgZnJvbSBpbnRlcmZhY2UKKyAqCisgKiBAcGFyYW1baW5dIGhQcm9zbGljIC0gcG9pbnRlciB0byBjaGFubmVsIHN0cnVjdHVyZQorICogQHBhcmFtW2luXSBhZGRyIC0gYWRkcmVzcyB0byByZWFkCisgKiBAcmV0dmFsIHVJbnQ4IC0gcmVnaXN0ZXIgY29udGVudHMKKyAqCisgKi8KKwordUludDggU2lWb2ljZV9SZWFkUmVnIChTaVZvaWNlQ2hhblR5cGVfcHRyIGhQcm9zbGljLCB1SW50OCBhZGRyKTsKKworLyoqCisgKiBAYnJpZWYKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIGFjY2VzcyB0byBTUEkgd3JpdGUgcmVnaXN0ZXIgZnVuY3Rpb24gcG9pbnRlciBmcm9tIGludGVyZmFjZQorICoKKyAqIEBwYXJhbVtpbl0gcFByb3NsaWMgLSBwb2ludGVyIHRvIGNoYW5uZWwgc3RydWN0dXJlCisgKiBAcGFyYW1baW5dIGFkZHIgLSBhZGRyZXNzIHRvIHdyaXRlCisgKiBAcGFyYW1baW5dIGRhdGEgdG8gYmUgd3JpdHRlbgorICogQHJldHZhbCBpbnQgLSBAcmVmIFJDX05PTkUKKyAqCisgKi8KK2ludCBTaVZvaWNlX1dyaXRlUmVnIChTaVZvaWNlQ2hhblR5cGVfcHRyIHBQcm9zbGljLCB1SW50OCBhZGRyLCB1SW50OCBkYXRhKTsKKworLyoqIEB9IFNJVk9JQ0VfREVCVUcgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqIEBkZWZncm91cCBTSVZPSUNFX0VSUk9SIFJldHVybiBjb2RlIGZ1bmN0aW9ucworICogQHsKKyAqLworCisvKioKKyBAYnJpZWYKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgZXJyb3IgZmxhZyB0aGF0IG1heSBiZSBzZXQgYnkgc29tZSBmdW5jdGlvbiBpbiB3aGVyZQorICogQHJlZiBlcnJvckNvZGVUeXBlIGlzIG5vdCByZXR1cm5lZC4KKyAqCisgKiBAbm90ZSBGb3IgZnVuY3Rpb25zIHRoYXQgRE8gcmV0dXJuIGVycm9yQ29kZVR5cGUsIHRoZSByZXR1cm4gdmFsdWUgaGVyZSBpcyB1bmRlZmluZWQuCisgKgorICogQHBhcmFtW2luXSBwQ2hhbiAtIHdoaWNoIGNoYW5uZWwgdG8gY2xlYXIgdGhlIGVycm9yIGZsYWcKKyAqIEBwYXJhbVtpbixvdXRdICplcnJvciAtIFRoZSBjdXJyZW50IHZhbHVlIG9mIGVycm9yIGZsYWcuCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICoKKyAqIEBzYSBTaVZvaWNlX2NsZWFyRXJyb3JGbGFnCisgKi8KKworaW50IFNpVm9pY2VfZ2V0RXJyb3JGbGFnIChTaVZvaWNlQ2hhblR5cGVfcHRyIHBDaGFuLCBpbnQgKmVycm9yKTsKKworLyoqCisgQGJyaWVmCisgKiAgVGhpcyBmdW5jdGlvbiBjbGVhcnMgdGhlIGVycm9yIGZsYWcgdGhhdCBtYXkgYmUgc2V0IGJ5IHNvbWUgZnVuY3Rpb24gaW4gd2hlcmUKKyAqICBAcmVmIGVycm9yQ29kZVR5cGUgaXMgbm90IHJldHVybmVkLgorICoKKyAqIEBwYXJhbVtpbixvdXRdIHBDaGFuIC0gd2hpY2ggY2hhbm5lbCB0byBjbGVhciB0aGUgZXJyb3IgZmxhZworICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqCisgKiBAc2EgU2lWb2ljZV9nZXRFcnJvckZsYWcKKyAqLworCitpbnQgU2lWb2ljZV9jbGVhckVycm9yRmxhZyAoU2lWb2ljZUNoYW5UeXBlX3B0ciBwQ2hhbik7CisKKy8qKiBAfSBTSVZPSUNFX0VSUk9SICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiBAZGVmZ3JvdXAgU0lWT0lDRV9FTkFCTEUgRW5hYmxlL2Rpc2FibGUgY2hhbm5lbHMgKGZvciBpbml0KQorICogQHsKKyAqLworLyoqCisgQGJyaWVmCisgKiAgVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBjaGFubmVsIGVuYWJsZSBzdGF0dXMuICBJZiBOT1Qgc2V0LCB0aGVuIHdoZW4KKyAqICB0aGUgdmFyaW91cyBpbml0aWFsaXphdGlvbiByb3V0aW5lcyBzdWNoIGFzIEByZWYgU2lWb2ljZV9TV0luaXRDaGFuIGlzIGNhbGxlZCwKKyAqICB0aGVuIHRoaXMgcGFydGljdWxhciBjaGFubmVsIHdpbGwgTk9UIGJlIGluaXRpYWxpemVkLgorICoKKyAqICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGFjY2VzcyB0aGUgY2hpcHNldCBkaXJlY3RseSwgc28gU1BJL0dDSQorICogIGRvZXMgbm90IG5lZWQgdG8gYmUgdXAgZHVyaW5nIHRoaXMgZnVuY3Rpb24gY2FsbC4KKyAqCisgKiBAcGFyYW1baW4sb3V0XSBwQ2hhbiAtIHdoaWNoIGNoYW5uZWwgdG8gcmV0dXJuIHRoZSBzdGF0dXMuCisgKiBAcGFyYW1baW5dIGNoYW5FbiAtIFRoZSBuZXcgdmFsdWUgb2YgdGhlIGNoYW5uZWwgZW5hYmxlIGZpZWxkLiAwID0gTk9UIGVuYWJsZWQsIDEgPSBlbmFibGVkLgorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqCisgKiBAc2EgU2lWb2ljZV9nZXRDaGFubmVsRW5hYmxlCisgKi8KKworaW50IFNpVm9pY2Vfc2V0Q2hhbm5lbEVuYWJsZSAoU2lWb2ljZUNoYW5UeXBlX3B0ciBwQ2hhbiwgaW50IGNoYW5Fbik7CisKKy8qKgorIEBicmllZgorICogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBiYWNrIGlmIHRoZSBjaGFubmVsIGlzIGVuYWJsZWQgb3Igbm90LgorICogIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgYWNjZXNzIHRoZSBjaGlwc2V0IGRpcmVjdGx5LCBzbyBTUEkvR0NJCisgKiAgZG9lcyBub3QgbmVlZCB0byBiZSB1cCBkdXJpbmcgdGhpcyBmdW5jdGlvbiBjYWxsLgorICoKKyAqIEBwYXJhbVtpbl0gcENoYW4gLSB3aGljaCBjaGFubmVsIHRvIHJldHVybiB0aGUgc3RhdHVzLgorICogQHBhcmFtW2luLG91dF0gY2hhbkVuKiAtIFRoZSBjdXJyZW50IHZhbHVlIG9mIGlmIHRoZSBjaGFubmVsIGlzIGVuYWJsZWQuIDAgPSBOT1QgZW5hYmxlZCwgMSA9IGVuYWJsZWQuCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICoKKyAqIEBzYSBTaVZvaWNlX3NldENoYW5uZWxFbmFibGUKKyAqLworCitpbnQgU2lWb2ljZV9nZXRDaGFubmVsRW5hYmxlIChTaVZvaWNlQ2hhblR5cGVfcHRyIHBDaGFuLCBpbnQgKmNoYW5Fbik7CisKKy8qKiBAfSBTSVZPSUNFX0VOQUJMRSAqLworLyoqIEBkZWZncm91cCBTSVZPSUNFX01JU0MgT3RoZXIgZnVuY3Rpb25zIHRoYXQgZG9uJ3QgZml0IGludG8gb3RoZXIgY2F0ZWdvcmllcworICogQHsKKyAqLworLyoqCisgQGJyaWVmCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgUHJvU0xJQyBBUEkgcmVsZWFzZSBhcworICogYSBOVUxMIHRlcm1pbmF0ZWQgc3RyaW5nLgorICogQHJldHZhbCBjaGFyICogLSBzdHJpbmcgY29udGFpbmluZyB0aGUgQVBJIHJlbGVhc2Ugc3RyaW5nLgorICovCitjaGFyICpTaVZvaWNlX1ZlcnNpb24odm9pZCk7CisKKy8qKgorICogQGJyaWVmCisgKiBUaGlzIGZ1bmN0aW9uIHByb2JlcyBhbiBhcnJheSBvZiBjaGFubmVsIHBvaW50ZXJzIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mCisgKiBQcm9TTElDJ3MsaWYgbm90IE5VTEwgYW5kIERBQSdzLCBpZiBub3QgTlVMTC4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGFmdGVyIGEgcmVzZXQuCisgKiBAcGFyYW1baW4sb3V0XSBwUHJvc2xpYyAtIGFuIGFycmF5IG9mIGNoYW5uZWwgcG9pbnRlcnMgdG8gaXRlcmF0ZSB0aHJvdWdoLiAgQ2hhbm5lbFR5cGUgaXMgbW9kaWZpZWQuCisgKiBAcGFyYW1baW5dIHNpemUgLSBudW1iZXIgb2YgY2hhbm5lbHMgdG8gcG9iZS4KKyAqIEBwYXJhbVtvdXRdIHNsaWNDb3VudCAtIGlmIG5vdCBOVUxMLCB0aGUgbnVtYmVyIG9mIFNMSUMncyBkZXRlY3RlZC4KKyAqIEBwYXJhbVtvdXRdIGRhYUNvdW50IC0gaWYgbm90IE5VTEwsIHRoZSBudW1iZXIgb2YgREFBJ3MgZGV0ZWN0ZWQuCisgKiBAcmV0dmFsIFJDX05PTkUgaWYgc3VjY2Vzc2Z1bC4KKyAqLworaW50IFNpVm9pY2VfSWRlbnRpZnlDaGFubmVscyhTaVZvaWNlQ2hhblR5cGVfcHRyICpwUHJvc2xpYywgaW50IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqc2xpY0NvdW50LCBpbnQgKmRhYUNvdW50KTsKKworLyoqIEB9IFNJVk9JQ0VfTUlTQyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogQH0gU0lWT0lDRSAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9pbmMvc2lfdm9pY2VfY3RybC5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvaW5jL3NpX3ZvaWNlX2N0cmwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWI1MTc4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvaW5jL3NpX3ZvaWNlX2N0cmwuaApAQCAtMCwwICsxLDEyMSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKy8qCisgKiBzaV92b2ljZV9jdHJsLmgKKyAqIFNQSSBkcml2ZXIgaGVhZGVyIGZpbGUKKyAqCisgKiBBdXRob3Iocyk6CisgKiBsYWoKKyAqCisgKiBEaXN0cmlidXRlZCBieToKKyAqIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMKKyAqCisgKiBGaWxlIERlc2NyaXB0aW9uOgorICogVGhpcyBpcyB0aGUgaGVhZGVyIGZpbGUgZm9yIHRoZSBjb250cm9sIGRyaXZlciB1c2VkCisgKiBpbiB0aGUgUHJvU0xJQyBkZW1vbnN0cmF0aW9uIGNvZGUuCisgKgorICoKKyAqLworCisjaWZuZGVmIENUUkxfSAorI2RlZmluZSBDVFJMX0gKKworLyoqIEBkZWZncm91cCBQUk9TTElDX0NVU1RPTUVSX0FQSVMgQ3VzdG9tZXIgaW1wbGVtZW50ZWQgZnVuY3Rpb25zCisgKiBUaGlzIHNlY3Rpb24gaGFzIGRvY3VtZW50YXRpb24gcmVsYXRlZCB0byBBUElzIHRoYXQgdGhlIGN1c3RvbWVyCisgKiBuZWVkcyB0byBpbXBsZW1lbnQgdG8gYWxsb3cgdGhlIFByb1NMSUMgQVBJIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4KKyAqCisgKiBAbm90ZSBQbGVhc2Ugbm90ZSwgaW4gYWRkaXRpb24gdG8gdGhlIGZ1bmN0aW9ucyBtZW50aW9uZWQgaGVyZSwgdGhlCisgKiBjdXN0b21lciB3aWxsIG5lZWQgdG8gcmV2aWV3L21vZGlmeSBzaV92b2ljZV9kYXRhdHlwZXMuaCB0byBtYXRjaAorICogdGhlIG5hdGl2ZSBkYXRhdHlwZXMgb2YgdGhlaXIgc3lzdGVtLgorICoKKyAqIEB7CisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiBAZGVmZ3JvdXAgUFJPU0xJQ19DVVNUT01FUl9DT05UUk9MIEN1c3RvbWVyIGltcGxlbWVudGVkIGNvbnRyb2wgZnVuY3Rpb25zCisgKiBUaGlzIGdyb3VwIG9mIGZ1bmN0aW9uIHBvaW50ZXIgcHJvdG90eXBlcyBuZWVkIHRvIGJlIGltcGxlbWVudGVkIGJ5IHRoZQorICogY3VzdG9tZXIgaW4gb3JkZXIgZm9yIHRoZSBQcm9TTElDIEFQSSB0byBmdW5jdGlvbiBjb3JyZWN0bHkuICBUaGVzZSBmdW5jdGlvbnMKKyAqIG5lZWQgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBBUEkgYnkgdGhlIGZ1bmN0aW9ucyBkb2N1bWVudGVkIGluIEByZWYgU0lWT0lDRV9JTworICogQHsKKyAqLworCisvKioKKyogQGJyaWVmCisqIFNldHMvY2xlYXJzIHRoZSByZXNldCBwaW4gb2YgYWxsIHRoZSBQcm9TTElDcy9WREFBcworKgorKiBAcGFyYW1baW5dICpoQ3RybCAtIHdoaWNoIGludGVyZmFjZSB0byByZXNldCAodGhpcyBpcyBhIGN1c3RvbWVyIHN1cHBsaWVkIHN0cnVjdHVyZSkKKyogQHBhcmFtW2luXSBpbl9yZXNldCAtICAwID0gVGFrZSB0aGUgZGV2aWNlIG91dCBvZiByZXNldCwgMSA9IHBsYWNlIHRoZSBkZXZpY2UocykgaW4gcmVzZXQKKyogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyovCisKK3R5cGVkZWYgaW50ICgqY3RybF9SZXNldF9mcHRyKSAodm9pZCAqaEN0cmwsIGludCBpbl9yZXNldCk7CisKKy8qKgorKiBAYnJpZWYKKyogUmVnaXN0ZXIgd3JpdGUgZnVuY3Rpb24gcG9pbnRlcgorKgorKiBAcGFyYW1baW5dICpoQ3RybCAtIHdoaWNoIGludGVyZmFjZSB0byBjb21tdW5pY2F0ZSB0aHJvdWdoICh0aGlzIGlzIGEgY3VzdG9tZXIgc3VwcGxpZWQgc3RydWN0dXJlKQorKiBAcGFyYW1baW5dIGNoYW5uZWwgLSBQcm9TTElDIGNoYW5uZWwgdG8gd3JpdGUgdG8gKHRoaXMgaXMgdGhlIHZhbHVlIHBhc3NlZCBpcyB0aGUgc2FtZSBhcyBmb3VuZCBpbiBAcmVmIFNpVm9pY2VfU1dJbml0Q2hhbikKKyogQHBhcmFtW2luXSByZWdBZGRyIC0gIEFkZHJlc3Mgb2YgcmVnaXN0ZXIgdG8gd3JpdGUKKyogQHBhcmFtW2luXSBkYXRhIC0gZGF0YSB0byB3cml0ZSB0byByZWdpc3RlcgorKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorKgorKi8KKwordHlwZWRlZiBpbnQgKCpjdHJsX1dyaXRlUmVnaXN0ZXJfZnB0cikgKHZvaWQgKmhDdHJsLCB1SW50OCBjaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVJbnQ4IHJlZ0FkZHIsIHVJbnQ4IGRhdGEpOworCisvKioKKyogQGJyaWVmCisqIFJBTSB3cml0ZSBmdW5jdGlvbiBwb2ludGVyCisqCisqIEBwYXJhbVtpbl0gKmhDdHJsIC0gd2hpY2ggaW50ZXJmYWNlIHRvIGNvbW11bmljYXRlIHRocm91Z2ggKHRoaXMgaXMgYSBjdXN0b21lciBzdXBwbGllZCBzdHJ1Y3R1cmUpCisqIEBwYXJhbVtpbl0gY2hhbm5lbCAtIFByb1NMSUMgY2hhbm5lbCB0byB3cml0ZSB0byAodGhpcyBpcyB0aGUgdmFsdWUgcGFzc2VkIGlzIHRoZSBzYW1lIGFzIGZvdW5kIGluIEByZWYgU2lWb2ljZV9TV0luaXRDaGFuKQorKiBAcGFyYW1baW5dIHJhbUFkZHIgLSBBZGRyZXNzIG9mIHRoZSBSQU0gbG9jYXRpb24gdG8gd3JpdGUKKyogQHBhcmFtW2luXSByYW1EYXRhIC0gZGF0YSB0byB3cml0ZSB0byB0aGUgUkFNIGxvY2F0aW9uCisqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisqCisqLworCit0eXBlZGVmIGludCAoKmN0cmxfV3JpdGVSQU1fZnB0cikgKHZvaWQgKmhDdHJsLCB1SW50OCBjaGFubmVsLCB1SW50MTYgcmFtQWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFtRGF0YSBkYXRhKTsKKworLyoqCisqIEBicmllZgorKiBSZWdpc3RlciByZWFkIGZ1bmN0aW9uIHBvaW50ZXIKKyoKKyogQHBhcmFtW2luXSAqaEN0cmwgLSB3aGljaCBpbnRlcmZhY2UgdG8gY29tbXVuaWNhdGUgdGhyb3VnaCAodGhpcyBpcyBhIGN1c3RvbWVyIHN1cHBsaWVkIHN0cnVjdHVyZSkKKyogQHBhcmFtW2luXSBjaGFubmVsIC0gUHJvU0xJQyBjaGFubmVsIHRvIHJlYWQgZnJvbSAodGhpcyBpcyB0aGUgdmFsdWUgcGFzc2VkIGlzIHRoZSBzYW1lIGFzIGZvdW5kIGluIEByZWYgU2lWb2ljZV9TV0luaXRDaGFuKQorKiBAcGFyYW1baW5dIHJlZ0FkZHIgLSAgQWRkcmVzcyBvZiByZWdpc3RlciB0byByZWFkIGZyb20KKyogQHJldHZhbCB1SW50OCAtIHRoZSB2YWx1ZSByZWFkLiBJZiBhbiBlcnJvciBvY2N1cnMsIHRoaXMgdmFsdWUgaXMgdW5kZWZpbmVkLgorKi8KKwordHlwZWRlZiB1SW50OCAoKmN0cmxfUmVhZFJlZ2lzdGVyX2ZwdHIpICh2b2lkICpoQ3RybCwgdUludDggY2hhbm5lbCwKKyAgICB1SW50OCByZWdBZGRyKTsKKworLyoqCisqIEBicmllZgorKiBSQU0gcmVhZCBmdW5jdGlvbiBwb2ludGVyCisqCisqIEBwYXJhbVtpbl0gKmhDdHJsIC0gd2hpY2ggaW50ZXJmYWNlIHRvIGNvbW11bmljYXRlIHRocm91Z2ggKHRoaXMgaXMgYSBjdXN0b21lciBzdXBwbGllZCBzdHJ1Y3R1cmUpCisqIEBwYXJhbVtpbl0gY2hhbm5lbCAtIFByb1NMSUMgY2hhbm5lbCB0byByZWFkIGZyb20gKHRoaXMgaXMgdGhlIHZhbHVlIHBhc3NlZCBpcyB0aGUgc2FtZSBhcyBmb3VuZCBpbiBAcmVmIFNpVm9pY2VfU1dJbml0Q2hhbikKKyogQHBhcmFtW2luXSByYW1BZGRyIC0gQWRkcmVzcyBvZiB0aGUgUkFNIGxvY2F0aW9uIHRvIHJlYWQgZnJvbQorKiBAcmV0dmFsIHJhbURhdGEgLSB0aGUgdmFsdWUgcmVhZC4gSWYgYW4gZXJyb3Igb2NjdXJzLCB0aGlzIHZhbHVlIGlzIHVuZGVmaW5lZC4KKyovCisKK3R5cGVkZWYgcmFtRGF0YSAoKmN0cmxfUmVhZFJBTV9mcHRyKSAodm9pZCAqaEN0cmwsIHVJbnQ4IGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVJbnQxNiByYW1BZGRyKTsKKworLyoqCisgKiBAYnJpZWYKKyAqICBDcml0aWNhbCBTZWN0aW9uL1NlbWFwaG9yZSBmdW5jdGlvbiBwb2ludGVyCisgKgorKiBAcGFyYW1baW5dICpoQ3RybCAtIHdoaWNoIGludGVyZmFjZSB0byBjb21tdW5pY2F0ZSB0aHJvdWdoICh0aGlzIGlzIGEgY3VzdG9tZXIgc3VwcGxpZWQgc3RydWN0dXJlKQorKiBAcGFyYW1baW5dIGluX2NyaXRpY2FsX3NlY3Rpb24gLSByZXF1ZXN0IHRvIGxvY2sgdGhlIGNyaXRpY2FsIHNlY3Rpb24gMSA9IGxvY2ssIDAgPSB1bmxvY2sKKyogQHJldHZhbCAxID0gc3VjY2VzcywgMCA9IGZhaWxlZAorKi8KKwordHlwZWRlZiBpbnQgKCpjdHJsX1NlbWFwaG9yZV9mcHRyKSAodm9pZCAqaEN0cmwsIGludCBpbl9jcml0aWNhbF9zZWN0aW9uKTsKKworLyoqIEB9IFBST1NMSUNfQ1VTVE9NRVJfQ09OVFJPTCAqLworLyoqIEB9ICovCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvaW5jL3NpX3ZvaWNlX3RpbWVyX2ludGYuaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL2NvZGVjcy9zaTMyMTh4L2luYy9zaV92b2ljZV90aW1lcl9pbnRmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRiZTQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL2NvZGVjcy9zaTMyMTh4L2luYy9zaV92b2ljZV90aW1lcl9pbnRmLmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisvKgorICogU3lzdGVtIHNwZWNpZmljIGZ1bmN0aW9ucyBoZWFkZXIgZmlsZQorICoKKyAqIEF1dGhvcihzKToKKyAqIGxhagorICoKKyAqIERpc3RyaWJ1dGVkIGJ5OgorICogU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYworICoKKyAqIEZpbGUgRGVzY3JpcHRpb246CisgKiBUaGlzIGlzIHRoZSBoZWFkZXIgZmlsZSBmb3IgdGhlIHN5c3RlbSBzcGVjaWZpYyBmdW5jdGlvbnMgbGlrZSB0aW1lciBmdW5jdGlvbnMuCisgKgorICoKKyAqLworCisjaWZuZGVmIFRJTUVSX0lOVEZfSAorI2RlZmluZSBUSU1FUl9JTlRGX0gKKworLyoqIEBhZGR0b2dyb3VwIFBST1NMSUNfQ1VTVE9NRVJfQVBJUworICogQHsKKyAqIEBkZWZncm91cCBQUk9TTElDX0NVU1RPTUVSX1RJTUVSIEN1c3RvbWVyIGltcGxlbWVudGVkIHRpbWVyIGZ1bmN0aW9ucworICogVGhpcyBzZWN0aW9uIGhhcyBkb2N1bWVudGF0aW9uIHJlbGF0ZWQgdG8gdGltZXJzOiBkZWxheXMgYW5kIHRpbWVzdGFtcHMuICBUaGUgdm9pZCAqIGlzIGEgY3VzdG9tZXIKKyAqIHN1cHBsaWVkIHRpbWVyIGRhdGEgc3RydWN0dXJlIHRoYXQgdGhlIHVzZXIgc3BlY2lmaWVzIGluIEByZWYgU2lWb2ljZV9zZXRDb250cm9sSW50ZXJmYWNlVGltZXJPYmouCisgKiBUaGVzZSBmdW5jdGlvbnMgbmVlZCB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIGZ1bmN0aW9ucyBkb2N1bWVudGVkIGluIEByZWYgU0lWT0lDRV9USU1FUgorICoKKyAqIEBub3RlIEZvciB0aGUgbWFqb3JpdHkgb2YgaW1wbGVtZW50YXRpb25zLCB0aGUgb25seSBmdW5jdGlvbiB0aGF0IGlzIHJlcXVpcmVkIGlzIHRoZSBkZWxheSBmdW5jdGlvbi4KKyAqCisgKiBAeworICovCisKKy8qKgorICogQGJyaWVmCisgKiBTeXN0ZW0gdGltZSBkZWxheSBmdW5jdGlvbiBwb2ludGVyCisgKgorICogQHBhcmFtW2luXSBoVGltZXIgLSB0aGUgc3lzdGVtIHRpbWVyIG9iamVjdAorICogQHBhcmFtW2luXSB0aW1lSW5NUyAtIG51bWJlciBvZiBtU2VjIHRvIHN1c3BlbmQgdGhlIHRhc2svdGhyZWFkIGV4ZWN1dGluZy4KKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisqLworCit0eXBlZGVmIGludCAoKnN5c3RlbV9kZWxheV9mcHRyKSAodm9pZCAqaFRpbWVyLCBpbnQgdGltZUluTXMpOworCisvKioKKyAqIEBicmllZgorICogU3lzdGVtIHRpbWUgZWxhcHNlZCBmdW5jdGlvbiBwb2ludGVyCisgKgorICogQGRldGFpbHMKKyAqIFRoaXMgZnVuY3Rpb24gY29tYmluZWQgd2l0aCBAcmVmIHN5c3RlbV9nZXRUaW1lX2ZwdHIgZnVuY3Rpb24gYWxsb3cgb25lIHRvIGRldGVybWluZQorICogdGhlIHRpbWUgZWxhcHNlZCBiZXR3ZWVuIHRoZSB0d28gZXZlbnQgdGltZXMuCisgKgorICogVGhlIGV4YW1wbGUgcHNldWRvIGNvZGUgYmVsb3cgc2hvd3MgaG93IG9uZSBtYXkgc2VlIHRoaXMgZnVuY3Rpb24gdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoCisgKiB0aGUgZnVuY3Rpb24gcG9pbnRlZCBieSBAcmVmIHN5c3RlbV9nZXRUaW1lX2ZwdHIgdG8gZG8gc29tZSBwcm9jZXNzaW5nIHdoaWxlIHdhaXRpbmcKKyAqIGZvciBhIHRpbWUgdG8gZXhwaXJlLgorICoKKyAqIEBjb2RlCisgKiBteV90aW1lcl9vYmogdGltZV9ub3c7CisgKgorICogZ2V0VGltZShteV9wcm9zY2xpY19vYmotPnRpbWVyX29ial9wdHIsICh2b2lkICopKCZ0aW1lX25vdykpOworICoKKyAqICBTb21lIGV2ZW50cyBvY2N1ciBoZXJlLi4uCisgKgorICogZG8KKyAqIHsKKyAqICAgICB0aW1lX2VsYXBzZWQobXlfcHJvc2xpY19vYmotPnRpbWVyX29ial9wdHIsKHZvaWQgKikoJnRpbWVfbm93KSwgJmVsYXBzZWRfdGltZV9tU2VjKTsKKyAqCisgKiAgICAgRG8gc29tZXRoaW5nIGhlcmUuLi4KKyAqCisgKiAgfXdoaWxlKGVsYXBzZWRfdGltZV9tU2VjIDwgRGVzaXJlZCBkZWxheSk7CisgKgorICogQ2hhbmdlIHN0YXRlLi4uCisgKgorICogQGVuZGNvZGUKKyAqCisgKiBAcGFyYW1baW5dICpoVGltZXIgLSB0aGUgc3lzdGVtIHRpbWVyIG9iamVjdAorICogQHBhcmFtW2luXSAqc3RhcnRUaW1lIC0gdGhlIHRpbWUgb2JqZWN0IHJldHVybmVkIGJ5IEByZWYgc3lzdGVtX2dldFRpbWVfZnB0ciAtIHRoZSAic3RhcnQgdGltZSIgb2YgdGhlIGV2ZW50LgorICogQHBhcmFtW291dF0gKnRpbWVJbk1zIC0gdGhlIHRpbWUgaW4gbVNlYyBiZXR3ZWVuIHRoZSAic3RhcnQgdGltZSIgYW5kIHRoZSBjdXJyZW50IHRpbWUuCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICogQHNhIHN5c3RlbV9nZXRUaW1lX2ZwdHIKKyovCisKK3R5cGVkZWYgaW50ICgqc3lzdGVtX3RpbWVFbGFwc2VkX2ZwdHIpICh2b2lkICpoVGltZXIsIHZvaWQgKnN0YXJ0VGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnRpbWVJbk1zKTsKKworLyoqCisgKiBAYnJpZWYKKyAqIFJldHJpZXZlIHN5c3RlbSB0aW1lIGluIG1TZWMgcmVzb2x1dGlvbi4KKyAqCisgKiBAZGV0YWlscworICogVGhpcyBmdW5jdGlvbiBjb21iaW5lZCB3aXRoIEByZWYgc3lzdGVtX3RpbWVFbGFwc2VkX2ZwdHIgZnVuY3Rpb24gYWxsb3cgb25lIHRvIGRldGVybWluZQorICogdGhlIHRpbWUgZWxhcHNlZCBiZXR3ZWVuIHRoZSB0d28gZXZlbnQgdGltZXMuCisgKgorICogQHBhcmFtW2luXSAqaFRpbWVyIC0gdGhlIHN5c3RlbSB0aW1lciBvYmplY3QKKyAqIEBwYXJhbVtpbl0gKnRpbWUgLSB0aGUgdGltZSBzdGFtcCBvYmplY3QgbmVlZGVkIGJ5IEByZWYgc3lzdGVtX3RpbWVFbGFwc2VkX2ZwdHIKKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKiBAc2Egc3lzdGVtX3RpbWVFbGFwc2VkX2ZwdHIKKyovCisKK3R5cGVkZWYgaW50ICgqc3lzdGVtX2dldFRpbWVfZnB0cikgKHZvaWQgKmhUaW1lciwgdm9pZCAqdGltZSk7CisKKy8qKiBAfQorICogQH0gKi8KKyNlbmRpZgorCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9pbmMvdmRhYS5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvaW5jL3ZkYWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWFlODVjCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvaW5jL3ZkYWEuaApAQCAtMCwwICsxLDExNDQgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisvKgorICogVmRhYSAgVm9pY2VEQUEgaW50ZXJmYWNlIGhlYWRlciBmaWxlCisgKgorICoKKyAqIERpc3RyaWJ1dGVkIGJ5OgorICogU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYworICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBwcm9wcmlldGFyeSBpbmZvcm1hdGlvbi4KKyAqIE5vIGRpc3NlbWluYXRpb24gYWxsb3dlZCB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tCisgKiBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLgorICoKKyAqIEZpbGUgRGVzY3JpcHRpb246CisgKiBUaGlzIGlzIHRoZSBoZWFkZXIgZmlsZSBmb3IgdGhlIG1haW4gIFZvaWNlREFBIEFQSSBhbmQgaXMgdXNlZAorICogaW4gdGhlICBWb2ljZURBQSBkZW1vbnN0cmF0aW9uIGNvZGUuCisgKgorICoKKyAqLworCisjaWZuZGVmIFZEQUFfSU5URl9ICisjZGVmaW5lIFZEQUFfSU5URl9ICisKKyNpbmNsdWRlICIuLi9jb25maWdfaW5jL3NpX3ZvaWNlX2RhdGF0eXBlcy5oIgorI2luY2x1ZGUgInNpX3ZvaWNlLmgiCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiogQGRlZmdyb3VwIFZEQUFfQVBJIFZEQUEgQVBJCisgKiBUaGlzIHNlY3Rpb24gY292ZXJzIEFQSXMgYW5kIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gdGhlIFZEQUEvRlhPLgorICogQHsKKyAqLworCisvKgorKiogQ29uc3RhbnRzCisqLworI2RlZmluZSBCUk9BRENBU1QgMHhmZgorI2RlZmluZSBMQ1NfU0NBTEVfTlVNIDMzCQkvKiBMaW5lIEN1cnJlbnQgU3RhdHVzIFNjYWxlICovCisjZGVmaW5lIExDU19TQ0FMRV9ERU4gMTAJCS8qIExpbmUgQ3VycmVudCBTdGF0dXMgU2NhbGUgKi8KKworLyogTWFjcm8gc3Vic3RpdHV0aW9uIGZyb20gVmRhYSBsZWdhY3kgQVBJJ3MgdG8gU2lWb2ljZSBBUEkncyAqLworI2RlZmluZSBWZGFhX2NyZWF0ZUNvbnRyb2xJbnRlcmZhY2UgU2lWb2ljZV9jcmVhdGVDb250cm9sSW50ZXJmYWNlCisjZGVmaW5lIFZkYWFfZGVzdHJveUNvbnRyb2xJbnRlcmZhY2UgU2lWb2ljZV9kZXN0cm95Q29udHJvbEludGVyZmFjZQorI2RlZmluZSBWZGFhX2NyZWF0ZURldmljZSBTaVZvaWNlX2NyZWF0ZURldmljZQorI2RlZmluZSBWZGFhX2Rlc3Ryb3lEZXZpY2UgU2lWb2ljZV9kZXN0cm95RGV2aWNlCisjZGVmaW5lIFZkYWFfY3JlYXRlQ2hhbm5lbCBTaVZvaWNlX2NyZWF0ZUNoYW5uZWwKKyNkZWZpbmUgVmRhYV9kZXN0cm95Q2hhbm5lbCBTaVZvaWNlX2Rlc3Ryb3lDaGFubmVsCisKKyNkZWZpbmUgVmRhYV9zZXRDb250cm9sSW50ZXJmYWNlQ3RybE9iaiBTaVZvaWNlX3NldENvbnRyb2xJbnRlcmZhY2VDdHJsT2JqCisjZGVmaW5lIFZkYWFfc2V0Q29udHJvbEludGVyZmFjZVJlc2V0IFNpVm9pY2Vfc2V0Q29udHJvbEludGVyZmFjZVJlc2V0CisjZGVmaW5lIFZkYWFfc2V0Q29udHJvbEludGVyZmFjZVdyaXRlUkFNIFNpVm9pY2Vfc2V0Q29udHJvbEludGVyZmFjZVdyaXRlUkFNCisjZGVmaW5lIFZkYWFfc2V0Q29udHJvbEludGVyZmFjZVJlYWRSQU0gU2lWb2ljZV9zZXRDb250cm9sSW50ZXJmYWNlUmVhZFJBTQorI2RlZmluZSBWZGFhX3NldENvbnRyb2xJbnRlcmZhY2VXcml0ZVJlZ2lzdGVyIFNpVm9pY2Vfc2V0Q29udHJvbEludGVyZmFjZVdyaXRlUmVnaXN0ZXIKKyNkZWZpbmUgVmRhYV9zZXRDb250cm9sSW50ZXJmYWNlUmVhZFJlZ2lzdGVyIFNpVm9pY2Vfc2V0Q29udHJvbEludGVyZmFjZVJlYWRSZWdpc3RlcgorI2RlZmluZSBWZGFhX3NldENvbnRyb2xJbnRlcmZhY2VUaW1lck9iaiBTaVZvaWNlX3NldENvbnRyb2xJbnRlcmZhY2VUaW1lck9iagorI2RlZmluZSBWZGFhX3NldENvbnRyb2xJbnRlcmZhY2VEZWxheSBTaVZvaWNlX3NldENvbnRyb2xJbnRlcmZhY2VEZWxheQorI2RlZmluZSBWZGFhX3NldENvbnRyb2xJbnRlcmZhY2VTZW1hcGhvcmUgU2lWb2ljZV9zZXRDb250cm9sSW50ZXJmYWNlU2VtYXBob3JlCisjZGVmaW5lIFZkYWFfc2V0Q29udHJvbEludGVyZmFjZVRpbWVFbGFwc2VkIFNpVm9pY2Vfc2V0Q29udHJvbEludGVyZmFjZVRpbWVFbGFwc2VkCisjZGVmaW5lIFZkYWFfc2V0Q29udHJvbEludGVyZmFjZUdldFRpbWUgU2lWb2ljZV9zZXRDb250cm9sSW50ZXJmYWNlR2V0VGltZQorCisjZGVmaW5lIFZkYWFfU1dJbml0Q2hhbiBTaVZvaWNlX1NXSW5pdENoYW4KKworI2RlZmluZSBWZGFhX3NldFNXRGVidWdNb2RlIFNpVm9pY2Vfc2V0U1dEZWJ1Z01vZGUKKyNkZWZpbmUgVmRhYV9nZXRFcnJvckZsYWcgU2lWb2ljZV9nZXRFcnJvckZsYWcKKyNkZWZpbmUgVmRhYV9jbGVhckVycm9yRmxhZyBTaVZvaWNlX2NsZWFyRXJyb3JGbGFnCisKKyNkZWZpbmUgVmRhYV9zZXRDaGFubmVsRW5hYmxlIFNpVm9pY2Vfc2V0Q2hhbm5lbEVuYWJsZQorI2RlZmluZSBWZGFhX2dldENoYW5uZWxFbmFibGUgU2lWb2ljZV9nZXRDaGFubmVsRW5hYmxlCisKKyNkZWZpbmUgVmRhYV9SZXNldCBTaVZvaWNlX1Jlc2V0CisjZGVmaW5lIFZkYWFfVmVyc2lvbiBTaVZvaWNlX1ZlcnNpb24KKworI2RlZmluZSBTSTMwNTBfQ0hBTl9QRVJfREVWSUNFIDEKKworLyoKKyoqCisqKiBWREFBIEluaXRpYWxpemF0aW9uL0NvbmZpZ3VyYXRpb24gUGFyYW1ldGVyIE9wdGlvbnMKKyoqCisqLworLyoKKyoqIFRoaXMgZGVmaW5lcyBuYW1lcyBmb3IgdGhlIFBDTSBEYXRhIEZvcm1hdAorKi8KK3R5cGVkZWYgZW51bQoreworICBBX0xBVyA9IDAsCS8qKjwgMDAgPSBBLUxhdy4gU2lnbmVkIG1hZ25pdHVkZSBkYXRhIGZvcm1hdCAqLworICBVX0xBVyA9IDEsCS8qKjwgMDEgPSB1LUxhdy4gU2lnbmVkIG1hZ25pdHVkZSBkYXRhIGZvcm1hdCAqLworICBMSU5FQVJfMTZfQklUID0gMyAvKio8IDExID0gMTYtYml0IGxpbmVhciAoMnMgY29tcGxlbWVudCBkYXRhIGZvcm1hdCkgKi8KK30gdFBjbUZvcm1hdDsKKworLyoKKyoqIFRoaXMgZGVmaW5lcyBuYW1lcyBmb3IgdGhlIHBoY2YgYml0cworKi8KK3R5cGVkZWYgZW51bQoreworICBQQ0xLXzFfUEVSX0JJVCA9IDAsCisgIFBDTEtfMl9QRVJfQklUID0gMQorfSB0UEhDRjsKKworCisvKgorKiogVGhpcyBkZWZpbmVzIG5hbWVzIGZvciB0aGUgdHJpIGJpdAorKi8KK3R5cGVkZWYgZW51bQoreworICBUUklfUE9TX0VER0UgPSAwLAorICBUUklfTkVHX0VER0UgPSAxCit9IHRUUkk7CisKKworLyoqCisqKiBUaGlzIGRlZmluZXMgbmFtZXMgZm9yIHRoZSBBQyBpbXBlZGFuY2UgcmFuZ2UKKyovCit0eXBlZGVmIGVudW0KK3sKKyAgQUNfNjAwLAkJCQkvKio8IDYwMCBPaG1zICovCisgIEFDXzkwMCwJCQkJLyoqPCA5MDAgTyAqLworICBBQ18yNzBfXzc1MF8xNTAsCQkvKio8IDI3MCBPICsgKDc1MCBPIHx8IDE1MCBuRikgYW5kIDI3NSBPICsgKDc4MCBPIHx8IDE1MCBuRikgKi8KKyAgQUNfMjIwX184MjBfMTIwLAkJLyoqPCAyMjAgTyArICg4MjAgTyB8fCAxMjAgbkYpIGFuZCAyMjAgTyArICg4MjAgTyB8fCAxMTUgbkYpICovCisgIEFDXzM3MF9fNjIwXzMxMCwJCS8qKjwgMzcwIE8gKyAoNjIwIE8gfHwgMzEwIG5GKSAqLworICBBQ18zMjBfXzEwNTBfMjMwLAkJLyoqPCAzMjAgTyArICgxMDUwIE8gfHwgMjMwIG5GKSAqLworICBBQ18zNzBfXzgyMF8xMTAsCQkvKio8IDM3MCBPICsgKDgyMCBPIHx8IDExMCBuRikgKi8KKyAgQUNfMjc1X183ODBfMTE1LAkJLyoqPCAyNzUgTyArICg3ODAgTyB8fCAxMTUgbkYpICovCisgIEFDXzEyMF9fODIwXzExMCwJCS8qKjwgMTIwIE8gKyAoODIwIE8gfHwgMTEwIG5GKSAqLworICBBQ18zNTBfXzEwMDBfMjEwLAkJLyoqPCAzNTAgTyArICgxMDAwIE8gfHwgMjEwIG5GKSAqLworICBBQ18yMDBfXzY4MF8xMDAsCQkvKio8IDIwMCBPICsgKDY4MCBPIHx8IDEwMCBuRikgKi8KKyAgQUNfNjAwX18yMTYwLAkJCS8qKjwgNjAwIE8gKyAyLjE2IHVGICovCisgIEFDXzkwMF9fMTAwMCwJCQkvKio8IDkwMCBPICsgMSB1RiAqLworICBBQ185MDBfXzIxNjAsCQkJLyoqPCA5MDAgTyArIDIuMTYgdUYgKi8KKyAgQUNfNjAwX18xMDAwLAkJCS8qKjwgNjAwIE8gKyAxIHVGICovCisgIEFDX0dsb2JhbF9pbXBlZGFuY2UJCS8qKjwgR2xvYmFsIGltcGVkYW5jZSAqLworfSB0QUNfWjsKKworLyoqCisqKiBUaGlzIGRlZmluZXMgbmFtZXMgZm9yIHRoZSBEQyBpbXBlZGFuY2UgcmFuZ2UKKyovCit0eXBlZGVmIGVudW0KK3sKKyAgRENfNTAsCQkJCQkvKio8IDUwIE9obXMgZGMgdGVybWluYXRpb24gaXMgc2VsZWN0ZWQgKi8KKyAgRENfODAwCQkJCQkvKio8IDgwMCBPaG1zIGRjIHRlcm1pbmF0aW9uIGlzIHNlbGVjdGVkICovCisKK30gdERDX1o7CisKKy8qKgorKiogVGhpcyBkZWZpbmVzIG5hbWVzIGZvciB0aGUgcmluZ2VyIGltcGVkYW5jZSByYW5nZQorKi8KK3R5cGVkZWYgZW51bQoreworICBSWl9NQVggPSAwLAorICBSWl9TWU5USCA9IDEKK30gdFJaOworCisvKioKKyoqIFRoaXMgZGVmaW5lcyBuYW1lcyBmb3IgdGhlIGRjIHZvbHRhZ2UgYWRqdXN0CisqLwordHlwZWRlZiBlbnVtCit7CisgIERDVjNfMSA9IDAsCisgIERDVjNfMiA9IDEsCisgIERDVjNfMzUgPSAyLAorICBEQ1YzXzUgPSAzCit9IHREQ1Y7CisKKy8qKgorKiogVGhpcyBkZWZpbmVzIG5hbWVzIGZvciB0aGUgbWluaW11bSBsb29wIGN1cnJlbnQKKyovCit0eXBlZGVmIGVudW0KK3sKKyAgTUlOSV8xME1BID0gMCwKKyAgTUlOSV8xMk1BID0gMSwKKyAgTUlOSV8xNE1BID0gMiwKKyAgTUlOSV8xNk1BID0gMworfSB0TUlOSTsKKworLyoqCisqKiBUaGlzIGRlZmluZXMgbmFtZXMgZm9yIHRoZSBjdXJyZW50IGxpbWl0aW5nIGVuYWJsZSBiaXQKKyovCit0eXBlZGVmIGVudW0KK3sKKyAgSUxJTV9ESVNBQkxFRCA9IDAsCisgIElMSU1fRU5BQkxFRCA9IDEKK30gdElMSU07CisKKy8qKgorKiogVGhpcyBkZWZpbmVzIG5hbWVzIGZvciB0aGUgcmluZyBkZXRlY3QgaW50ZXJ1cHQgbW9kZQorKi8KK3R5cGVkZWYgZW51bQoreworICBSRElfQkVHX0JVUlNUID0gMCwKKyAgUkRJX0JFR19FTkRfQlVSU1QgPSAxCit9IHRSREk7CisKKy8qKgorKiogVGhpcyBkZWZpbmVzIG5hbWVzIGZvciB0aGUgb24gaG9vayBzcGVlZCAvIHNwYXJrIHF1ZW5jaGluZworKi8KK3R5cGVkZWYgZW51bQoreworICBPSFNfTEVTU19USEFOXzBfNU1TID0gMCwKKyAgT0hTXzNNUyA9IDEsCisgIE9IU18yNk1TID0gMHhFCit9IHRPSFM7CisKKy8qKgorKiogVGhpcyBkZWZpbmVzIG5hbWVzIGZvciB0aGUgaGJlIGJpdAorKi8KK3R5cGVkZWYgZW51bQoreworICBIWUJSSURfRElTQUJMRUQgPSAwLAorICBIWUJSSURfRU5BQkxFRCAgPSAxCit9IHRIQkU7CisKKworLyoqCisqKiBHYWluL0F0dGVudWF0aW9uIFNlbGVjdAorKi8KK3R5cGVkZWYgZW51bQoreworICBYR0FfR0FJTiwKKyAgWEdBX0FUVEVOCit9IHRYR0E7CisKKy8qKgorKiogTVVURSBDb250cm9sIE9wdGlvbnMKKyovCit0eXBlZGVmIGVudW0KK3sKKyAgTVVURV9ESVNBQkxFX0FMTCwKKyAgTVVURV9ESVNBQkxFX1JYLAorICBNVVRFX0RJU0FCTEVfVFgsCisgIE1VVEVfRU5BQkxFX1JYLAorICBNVVRFX0VOQUJMRV9UWCwKKyAgTVVURV9FTkFCTEVfQUxMCit9IHRNVVRFOworCisvKioKKyoqIFRoaXMgZGVmaW5lcyBuYW1lcyBmb3IgdGhlIHJpbmcgZGVsYXkgc2V0dGluZworKi8KK3R5cGVkZWYgZW51bQoreworICBSRExZXzBNUyA9IDAsCisgIFJETFlfMjU2TVMgPSAxLAorICBSRExZXzUxMk1TID0gMiwKKyAgUkRMWV83NjhNUyA9IDMsCisgIFJETFlfMTAyNE1TID0gNCwKKyAgUkRMWV8xMjgwTVMgPSA1LAorICBSRExZXzE1MzZNUyA9IDYsCisgIFJETFlfMTc5Mk1TID0gNworfSB0UkRMWTsKKworLyoqCisqKiBUaGlzIGRlZmluZXMgbmFtZXMgZm9yIHRoZSByaW5nIHRpbWVvdXRzCisqLwordHlwZWRlZiBlbnVtCit7CisgIFJUT18xMjhNUyA9IDEsCisgIFJUT18yNTZNUyA9IDIsCisgIFJUT18zODRNUyA9IDMsCisgIFJUT181MTJNUyA9IDQsCisgIFJUT182NDBNUyA9IDUsCisgIFJUT183NjhNUyA9IDYsCisgIFJUT184OTZNUyA9IDcsCisgIFJUT18xMDI0TVMgPSA4LAorICBSVE9fMTE1Mk1TID0gOSwKKyAgUlRPXzEyODBNUyA9IDEwLAorICBSVE9fMTQwOE1TID0gMTEsCisgIFJUT18xNTM2TVMgPSAxMiwKKyAgUlRPXzE2NjRNUyA9IDEzLAorICBSVE9fMTc5Mk1TID0gMTQsCisgIFJUT18xOTIwTVMgPSAxNQorfSB0UlRPOworCisvKioKKyoqIFRoaXMgZGVmaW5lcyBuYW1lcyBmb3IgdGhlIHJpbmcgdGltZW91dHMKKyovCit0eXBlZGVmIGVudW0KK3sKKyAgUkNDXzEwME1TID0gMCwKKyAgUkNDXzE1ME1TID0gMSwKKyAgUkNDXzIwME1TID0gMiwKKyAgUkNDXzI1Nk1TID0gMywKKyAgUkNDXzM4NE1TID0gNCwKKyAgUkNDXzUxMk1TID0gNSwKKyAgUkNDXzY0ME1TID0gNiwKKyAgUkNDXzEwMjRNUyA9IDcKK30gdFJDQzsKKworLyoqCisqKiBUaGlzIGRlZmluZXMgbmFtZXMgZm9yIHRoZSByaW5nIHZhbGlkYXRpb24gbW9kZXMKKyovCit0eXBlZGVmIGVudW0KK3sKKyAgUk5HVl9ESVNBQkxFRCA9IDAsCisgIFJOR1ZfRU5BQkxFRCA9IDEKK30gdFJOR1Y7CisKKy8qKgorKiogVGhpcyBkZWZpbmVzIG5hbWVzIGZvciB0aGUgcmZ3ZSBiaXQKKyovCit0eXBlZGVmIGVudW0KK3sKKyAgUkZXRV9IQUxGX1dBVkUgPSAwLAorICBSRldFX0ZVTExfV0FWRSA9IDEsCisgIFJGV0VfUk5HVl9SSU5HX0VOViA9IDAsCisgIFJGV0VfUk5HVl9USFJFU0hfQ1JPU1MgPSAxCit9IHRSRldFOworCisvKioKKyoqIFRoaXMgZGVmaW5lcyBuYW1lcyBmb3IgdGhlIHJ0IGFuZCBydDIgYml0CisqLwordHlwZWRlZiBlbnVtCit7CisgIFJUX18xM181VlJNU18xNl81VlJNUyA9IDAsCisgIFJUX18xOV8zNVZSTVNfMjNfNjVWUk1TID0gMiwKKyAgUlRfXzQwXzVWUk1TXzQ5XzVWUk1TID0gMworfSB0UlQ7CisKKy8qKgorKiogVGhpcyBkZWZpbmVzIG5hbWVzIGZvciB0aGUgcnQgYW5kIHJ0MiBiaXQKKyovCit0eXBlZGVmIGVudW0KK3sKKyAgUkdEVF9BQ1RJVkVfTE9XID0gMCwKKyAgUkdEVF9BQ1RJVkVfSEkgPSAxCit9IHRSUE9MOworCisKKy8qKgorKiogVGhpcyBkZWZpbmVzIG5hbWVzIGZvciB0aGUgaW50ZXJydXB0cworKi8KK3R5cGVkZWYgZW51bQoreworICBQT0xJLAorICBUR0RJLAorICBMQ1NPSSwKKyAgRE9ESSwKKyAgQlRESSwKKyAgRlRESSwKKyAgUk9WSSwKKyAgUkRUSSwKKyAgQ1ZJCQkvKio8IEN1cnJlbnQvVm9sdGFnZSBJbnRlcnJ1cHQgUkVHSVNURVIjNDQgKi8KK30gdmRhYUludDsKKworLyoqCisqKiBJbnRlcnJ1cHQgQml0bWFzayBGaWVsZHMKKyovCit0eXBlZGVmIGVudW0KK3sKKyAgUE9MTSA9IDEsCisgIFRHRE0gPSAyLCAgIC8qKjwgU2kzMDUwICBPbmx5ICovCisgIExDU09NID0gNCwKKyAgRE9ETSA9IDgsCisgIEJURE0gPSAxNiwKKyAgRkRUTSA9IDMyLAorICBST1ZNID0gNjQsCisgIFJEVE0gPSAxMjgKK30gdmRhYUludE1hc2s7CisKKworLyoqCisqKiBUaGlzIGRlZmluZXMgbmFtZXMgZm9yIHRoZSBpZGwgYml0IChvYnNvbGV0ZSkKKyovCit0eXBlZGVmIGVudW0KK3sKKyAgSURMX0RJU0FCTEVEID0gMCwKKyAgSURMX0VOQUJMRUQgPSAxCit9IHRJREw7CisKKy8qKgorKiogVGhpcyBkZWZpbmVzIG5hbWVzIGZvciB0aGUgZGRsIGJpdCAob2Jzb2xldGUpCisqLwordHlwZWRlZiBlbnVtCit7CisgIERETF9OT1JNQUxfT1BFUkFUSU9OID0gMCwKKyAgRERMX1BDTV9MT09QQkFDSyA9IDEKK30gdERETDsKKworLyoqCisqKiBMb29wYmFjayBNb2RlcworKi8KK3R5cGVkZWYgZW51bQoreworICBMUEJLX05PTkUgPSAwLAorICBMUEJLX0lETCA9IDEsCisgIExQQktfRERMID0gMiwKKyAgTFBCS19QQ01MID0gMworfSB0THBia01vZGU7CisKKy8qKgorKiogTG9vcGJhY2sgU3RhdHVzCisqLwordHlwZWRlZiBlbnVtCit7CisgIExQQktfRElTQUJMRUQgPSAwLAorICBMUEJLX0VOQUJMRUQgPSAxCit9IHRMcGJrU3RhdHVzOworCisvKioKKyoqIFRoaXMgZGVmaW5lcyBuYW1lcyBmb3IgdGhlIGludGVycnVwdCBwaW4gbW9kZXMKKyovCit0eXBlZGVmIGVudW0KK3sKKyAgSU5URV9ESVNBQkxFRCA9IDAsCisgIElOVEVfRU5BQkxFRCA9IDEKK30gdEludGU7CisKKy8qKgorKiogVGhpcyBkZWZpbmVzIG5hbWVzIGZvciB0aGUgaW50ZXJydXB0IHBpbiBwb2xhcml0aWVzCisqLwordHlwZWRlZiBlbnVtCit7CisgIElOVEVfQUNUSVZFX0xPVyA9IDAsCisgIElOVEVfQUNUSVZFX0hJR0ggPSAxCit9IHRJbnRlUG9sOworCisvKioKKyoqIFRoaXMgZGVmaW5lcyBuYW1lcyBmb3IgdGhlIHB3bSBzZXR0aW5ncworKi8KK3R5cGVkZWYgZW51bQoreworICBQV01fREVMVEFfU0lHTUEgPSAwLAorICBQV01fQ09OVkVOVElPTkFMXzE2S0haID0gMSwKKyAgUFdNX0NPTlZFTlRJT05BTF8zMktIWiA9IDIKK30gdFB3bU1vZGU7CisKKy8qKgorKiogUFdNRQorKi8KK3R5cGVkZWYgZW51bQoreworICBQV01fRElTQUJMRUQgPSAwLAorICBQV01fRU5BQkxFRAorfSB0UFdNRTsKKworLyoqCisqKiBSQ0FMRCBjb250cm9sCisqLwordHlwZWRlZiBlbnVtCit7CisgIFJFU19DQUxfRU5BQkxFRCA9IDAsCisgIFJFU19DQUxfRElTQUJMRUQKK30gdFJDQUxEOworCisvKioKKyoqIFZvaWNlIERBQSBIb29rIHN0YXRlcworKi8KK2VudW0KK3sKKyAgVkRBQV9ESUdfTE9PUEJBQ0sgPSAxLAorICBWREFBX09OSE9PSyA9IDIsCisgIFZEQUFfT0ZGSE9PSyA9IDMsCisgIFZEQUFfT05IT09LX01PTklUT1IgPSA0Cit9OworCisvKioKKyoqIEZEVCBNb25pdG9yaW5nIE9wdGlvbnMKKyovCitlbnVtCit7CisgIEZEVF9NT05JVE9SX09GRiA9IDAsCisgIEZEVF9NT05JVE9SX09OCit9OworCisKKy8qKgorKiogT2ZmaG9vayBTcGVlZCBTZWxlY3QKKyovCit0eXBlZGVmIGVudW0KK3sKKyAgRk9IXzUxMiwKKyAgRk9IXzEyOCwKKyAgRk9IXzY0LAorICBGT0hfOAorfSB0Rk9IOworCisvKioKKyoqIFNhbXBsZSBSYXRlIENvbnRyb2wKKyovCit0eXBlZGVmIGVudW0KK3sKKyAgRlNfOEtIWiwKKyAgRlNfMTZLSFoKK30gdEhTU007CisKKy8qKgorKiogTGluZSBWb2x0YWdlIEZvcmNlIERpc2FibGUKKyovCit0eXBlZGVmIGVudW0KK3sKKyAgTFZTX0ZPUkNFX0VOQUJMRUQgPSAwLAorICBMVlNfRk9SQ0VfRElTQUJMRUQKK30gdExWRkQ7CisKKy8qKgorKiogQ3VycmVudC9Wb2x0YWdlIE1vbml0b3IgU2VsZWN0CisqLwordHlwZWRlZiBlbnVtCit7CisgIENWU19DVVJSRU5ULAorICBDVlNfVk9MVEFHRQorfSB0Q1ZTOworCisvKioKKyoqIEN1cnJlbnQvVm9sdGFnZSBJbnRlcnJ1cHQgUG9sYXJpdHkKKyovCit0eXBlZGVmIGVudW0KK3sKKyAgQ1ZQX0JFTE9XLAorICBDVlBfQUJPVkUKK30gdENWUDsKKworLyoqCisqKiBHdWFyZGVkIENsZWFyCisqLwordHlwZWRlZiBlbnVtCit7CisgIEdDRV9ESVNBQkxFRCA9IDAsCisgIEdDRV9FTkFCTEVECit9IHRHQ0U7CisKKy8qKgorKiogU1BJIE1vZGUgKFNpMzA1MCBPbmx5KQorKi8KK3R5cGVkZWYgZW51bQoreworICBTUElNX1RSSV9DUywKKyAgU1BJTV9UUklfU0NMSworfSB0U1BJTTsKKworLyoqCisqKiAgRklMVAorKi8KK3R5cGVkZWYgZW51bQoreworICBGSUxUX0hQRl81SFosCisgIEZJTFRfSFBGXzIwMEhaCit9IHRGSUxUOworCisvKioKKyoqIElJUkUKKyovCit0eXBlZGVmIGVudW0KK3sKKyAgSUlSX0RJU0FCTEVEID0gMCwKKyAgSUlSX0VOQUJMRUQKK30gdElJUkU7CisKKy8qKgorKiogRlVMTDIKKyovCit0eXBlZGVmIGVudW0KK3sKKyAgRlVMTDJfRElTQUJMRUQgPSAwLAorICBGVUxMMl9FTkFCTEVECit9IHRGVUxMMjsKKworLyoqCisqKiBGVUxMCisqLwordHlwZWRlZiBlbnVtCit7CisgIEZVTExfRElTQUJMRUQgPSAwLAorICBGVUxMX0VOQUJMRUQKK30gdEZVTEw7CisKKy8qKgorKiogUkcxCisqLwordHlwZWRlZiBlbnVtCit7CisgIFJHMV9ESVNBQkxFRCA9IDAsCisgIFJHMV9FTkFCTEVECit9IHRSRzE7CisKKworLyoqCisqKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiogQ09ORklHVVJBVElPTiBEQVRBIFNUUlVDVFVSRVMKKyoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisvKioKKyoqIChVcGRhdGVkKSBTdHJ1Y3R1cmUgZm9yIEdlbmVyYWwgUGFyYW1ldGVycworKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIHRJbnRlIGludGU7ICAgICAgICAgICAgIC8qIElOVEUgKi8KKyAgdEludGVQb2wgaW50cDsgICAgICAgICAgLyogSU5UUCAqLworICB0UkNBTEQgcmNhbGQ7ICAgICAgICAgICAvKiBSQ0FMRCAqLworICB0SFNTTSBoc3NtOyAgICAgICAgICAgICAvKiBIU1NNICovCisgIHRGT0ggZm9oOyAgICAgICAgICAgICAgIC8qIEZPSCAqLworICB0TFZGRCBsdmZkOyAgICAgICAgICAgICAvKiBMVkZEICovCisgIHRDVlMgY3ZzOyAgICAgICAgICAgICAgIC8qIENWUyAqLworICB0Q1ZQIGN2cDsgICAgICAgICAgICAgICAvKiBDVlAgKi8KKyAgdEdDRSBnY2U7ICAgICAgICAgICAgICAgLyogR0NFICovCisgIHRJSVJFIGlpcmU7ICAgICAgICAgICAgIC8qIElJUkUgKi8KKyAgdEZVTEwyIGZ1bGwyOyAgICAgICAgICAgLyogRlVMTDIgKi8KKyAgdEZVTEwgZnVsbDsgICAgICAgICAgICAgLyogRlVMTCAqLworICB0RklMVCBmaWx0OyAgICAgICAgICAgICAvKiBGSUxUICovCisgIHRSRzEgcmcxOyAgICAgICAgICAgICAgIC8qIFJHMSAqLworICB0UHdtTW9kZSBwd21tOyAgICAgICAgICAvKiBQV01NIFNpMzA1MCBPbmx5ICovCisgIHRQV01FIHB3bUVuYWJsZTsgICAgICAgIC8qIFBXTUUgU2kzMDUwIE9ubHkgKi8KKyAgdFNQSU0gc3BpbTsgICAgICAgICAgICAgLyogU1BJTSBTaTMwNTAgT25seSAqLworfSB2ZGFhX0dlbmVyYWxfQ2ZnOworCisKKy8qKgorKiogKE5FVykgU3RydWN0dXJlIGZvciBDb3VudHJ5IFByZXNldHMKKyovCit0eXBlZGVmIHN0cnVjdAoreworICB0Ulogcno7CisgIHREQ19aIGRjcjsKKyAgdEFDX1ogYWNpbTsKKyAgdERDViBkY3Y7CisgIHRNSU5JIG1pbmk7CisgIHRJTElNIGlsaW07CisgIHRPSFMgb2hzX3NxOworICB0SEJFIGhiZTsKK30gdmRhYV9Db3VudHJ5X0NmZzsKKworLyoqCisqKiAoTkVXKSBTdHJ1Y3R1cmUgZm9yIEh5YnJpZCBQcmVzZXRzCisqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgdUludDggaHliMTsKKyAgdUludDggaHliMjsKKyAgdUludDggaHliMzsKKyAgdUludDggaHliNDsKKyAgdUludDggaHliNTsKKyAgdUludDggaHliNjsKKyAgdUludDggaHliNzsKKyAgdUludDggaHliODsKK30gdmRhYV9IeWJyaWRfQ2ZnOworCisvKioKKyoqIFN0cnVjdHVyZSBmb3IgUENNIGNvbmZpZ3VyYXRpb24gcHJlc2V0cworKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIHRQY21Gb3JtYXQgcGNtRm9ybWF0OworICB0UEhDRiBwY21Id3k7CisgIHRUUkkgcGNtX3RyaTsKK30gdmRhYV9QQ01fQ2ZnOworCisvKiogQGFkZHRvZ3JvdXAgVkRBQV9BVURJTworICogQHsKKyAqLworLyoqIEBhZGR0b2dyb3VwIFZEQUFfR0FJTl9DT05UUk9MCisgKiBAeworICovCisvKgorKiogKFVwZGF0ZWQpIFN0cnVjdHVyZSBmb3IgQXVkaW8gcGF0aCBnYWluIHByZXNldAorKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIHVJbnQ4CQltdXRlOworICB0WEdBCQl4Z2EyOworICB1SW50OCAgIAlhY2dhaW4yOworICB0WEdBCQl4Z2EzOworICB1SW50OCAgIAlhY2dhaW4zOworICB1SW50OAkJY2FsbFByb2dyZXNzOworICBCT09MRUFOICAgICBjcEVuOworfSB2ZGFhX2F1ZGlvR2Fpbl9DZmc7CisKKy8qKiBAfSBWREFBX0dBSU5fQ09OVFJPTCovCisvKiogQH0gKi8KKy8qCisqKiBTdHJ1Y3R1cmUgZm9yIGNvbmZpZ3VyaW5nIHJpbmcgZGV0ZWN0IGNvbmZpZworKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgdFJETFkgcmRseTsKKyAgdFJUIHJ0OworICB1SW50OCBybXg7CisgIHRSVE8gcnRvOworICB0UkNDIHJjYzsKKyAgdFJOR1Ygcm5ndjsKKyAgdUludDggcmFzOworICB0UkZXRSByZndlOworICB0UkRJIHJkaTsKKyAgdFJQT0wgcnBvbDsKK30gdmRhYV9SaW5nX0RldGVjdF9DZmc7CisKKworLyoKKyoqIERlZmluZXMgc3RydWN0dXJlIG9mIGludGVycnVwdCBkYXRhCisqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgdmRhYUludCAqaXJxczsKKyAgdUludDggbnVtYmVyOworfSB2ZGFhSW50VHlwZTsKKworLyoKKyoqIERlZmluZXMgc3RydWN0dXJlIGZvciBjb25maWd1cmluZyBMb29wIEJhY2sKKyovCit0eXBlZGVmIHN0cnVjdAoreworICB0SURMIGlzb0RpZ0xCOworICB0RERMIGRpZ0RhdGFMQjsKK30gdmRhYV9Mb29wYmFja19DZmc7CisKKworLyoKKyoqIEdlbmVyaWMgRmxhZworKi8KK3R5cGVkZWYgZW51bQoreworICBWREFBX0JJVF9TRVQgPSAxLAorICBWREFBX0JJVF9DTEVBUiA9IDAKK30gdFZkYWFCaXQ7CisKKy8qCisqKiBEZWZpbmVzIHN0cnVjdHVyZSBmb3IgZGFhIGN1cnJlbnQgc3RhdHVzIChyaW5nIGRldGVjdC9ob29rIHN0YXQpCisqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgdFZkYWFCaXQgcmluZ0RldGVjdGVkTmVnOworICB0VmRhYUJpdCByaW5nRGV0ZWN0ZWRQb3M7CisgIHRWZGFhQml0IHJpbmdEZXRlY3RlZDsKKyAgdFZkYWFCaXQgb2ZmaG9vazsKKyAgdFZkYWFCaXQgb25ob29rTGluZU1vbml0b3I7Cit9IHZkYWFSaW5nRGV0ZWN0U3RhdHVzVHlwZTsKKworCit0eXBlZGVmIFNpVm9pY2VDb250cm9sSW50ZXJmYWNlVHlwZSB2ZGFhQ29udHJvbEludGVyZmFjZVR5cGU7Cit0eXBlZGVmIFNpVm9pY2VEZXZpY2VUeXBlIHZkYWFEZXZpY2VUeXBlOwordHlwZWRlZiBTaVZvaWNlQ2hhblR5cGUgdmRhYUNoYW5UeXBlOworCisvKgorKiogVGhpcyBpcyB0aGUgbWFpbiAgVm9pY2VEQUEgaW50ZXJmYWNlIG9iamVjdCBwb2ludGVyCisqLwordHlwZWRlZiB2ZGFhQ2hhblR5cGUgKnZkYWFDaGFuVHlwZV9wdHI7CisKKy8qCisqKiBEZWZpbmVzIGluaXRpYWxpemF0aW9uIGRhdGEgc3RydWN0dXJlcworKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIHVJbnQ4IGFkZHJlc3M7CisgIHVJbnQ4IGluaXRWYWx1ZTsKK30gdmRhYVJlZ0luaXQ7CisKKwordHlwZWRlZiBlbnVtCit7CisgIFBBUl9IQU5EU0VUX05PVF9ERVRFQ1RFRCA9IDAsCisgIFBBUl9IQU5EU0VUX0RFVEVDVEVEID0gMQorfSB2ZGFhUEhEU3RhdHVzOworCisvKgorKiogTGluZSBJbiBVc2UgQ29uZmlndXJhdGlvbiBTdHJ1Y3R1cmUKKyovCit0eXBlZGVmIHN0cnVjdAoreworICB2ZGFhUEhEU3RhdHVzIHN0YXR1czsKKyAgaW50OCBtaW5fb25ob29rX3Zsb29wOworICBpbnQ4IG1pbl9vZmZob29rX3Zsb29wOworICBpbnQxNiBtaW5fb2ZmaG9va19pbG9vcDsKKyAgaW50OCBtZWFzdXJlZF92bG9vcDsKKyAgaW50MTYgbWVhc3VyZWRfaWxvb3A7Cit9IHZkYWFfTElVX0NvbmZpZzsKKworLyoKKyoqIEZ1bmN0aW9uIERlY2xhcmF0aW9ucworKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqIEBkZWZncm91cCBWREFBX0FVRElPIEF1ZGlvCisgKiBAeworICovCisvKiogQGRlZmdyb3VwIFZEQUFfR0FJTl9DT05UUk9MIEdhaW4gQ29udHJvbAorICogVGhpcyBzZWN0aW9uIGNvdmVycyBmdW5jdGlvbnMgdGhhdCBhbGxvdyBvbmUgdG8gYWRqdXN0IHRoZSBhdWRpbworICogZ2FpbnMgLSB3aXRoIFRYIHRvd2FyZCB0aGUgbmV0d29yay9TT0MvRFNQIGFuZCBSWCB0b3dhcmQgdGhlIHRpcC9yaW5nLgorICoKKyAqIEB7CisgKi8KKworLyoqCisgKiBAYnJpZWYKKyAqICBTZXRzIHRoZSBUWCBhdWRpbyBnYWluICh0b3dhcmQgdGhlIG5ldHdvcmspLgorICoKKyAqIEBwYXJhbVtpbl0gcFZkYWEgLSB3aGljaCBjaGFubmVsIHRvIGNvbmZpZ3VyZQorICogQHBhcmFtW2luXSBwcmVzZXQgLSB3aGljaCBwcmVzZXQgdG8gdXNlICh0aGlzIG1heSBiZSBmcm9tIHRoZSBjb25zdGFudHMgZmlsZSkKKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKi8KKworaW50IFZkYWFfVFhBdWRpb0dhaW5TZXR1cCAodmRhYUNoYW5UeXBlICpwVmRhYSxpbnQzMiBwcmVzZXQpOworCisvKioKKyAqIEBicmllZgorICogIFNldHMgdGhlIFJYIGF1ZGlvIGdhaW4gKHRvd2FyZCB0aGUgdGlwL3JpbmcpLgorICoKKyAqIEBwYXJhbVtpbl0gcFZkYWEgLSB3aGljaCBjaGFubmVsIHRvIGNvbmZpZ3VyZQorICogQHBhcmFtW2luXSBwcmVzZXQgLSB3aGljaCBwcmVzZXQgdG8gdXNlICh0aGlzIG1heSBiZSBmcm9tIHRoZSBjb25zdGFudHMgZmlsZSkKKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKi8KKworaW50IFZkYWFfUlhBdWRpb0dhaW5TZXR1cCAodmRhYUNoYW5UeXBlICpwVmRhYSxpbnQzMiBwcmVzZXQpOworCisvKiogQH0gVkRBQV9HQUlOX0NPTlRST0wgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqIEBkZWZncm91cCBWREFBX0FVRElPX0NPTlRST0wgQXVkaW8gY29udHJvbC9jb25maWd1cmF0aW9uCisgKiBUaGlzIGdyb3VwIG9mIGZ1bmN0aW9ucyBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBhbmQgY29udHJvbCB0aGUgUENNIGJ1cy4gIEl0IGlzIGVzc2VudGlhbCB0aGF0IEByZWYgVmRhYV9QQ01TZXR1cCwKKyAqIEByZWYgVmRhYV9QQ01UaW1lU2xvdFNldHVwIGFuZCBAcmVmIFZkYWFfUENNU3RhcnQgYXJlIGNhbGxlZCBwcmlvciB0byBhbnkgYXVkaW8gcHJvY2Vzc2luZy4KKyAqIEB7CisgKi8KKworLyoqCisgKiBAYnJpZWYKKyAqICBUaGlzIGNvbmZpZ3VyZXMgdGhlIFBDTSBidXMgd2l0aCBwYXJhbWV0ZXJzIHN1Y2ggYXMgY29tcGFuZGluZyBhbmQgZGF0YSBsYXRjaGluZyB0aW1pbmcuCisgKgorICogQHBhcmFtW2luXSBwVmRhYSAtIHdoaWNoIGNoYW5uZWwgc2hvdWxkIGJlIGNvbmZpZ3VyZWQKKyAqIEBwYXJhbVtpbl0gcHJlc2V0IC0gd2hpY2ggcHJlc2V0IHRvIHVzZSBmcm9tIHRoZSBjb25zdGFudHMgZmlsZSAoc2VlIGNvbmZpZ3VyYXRpb24gdG9vbCwgUENNIGRpYWxvZyBib3gpCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICoKKyAqIEBzYSBWZGFhX1BDTVRpbWVTbG90U2V0dXAgUHJvU0xJQ19QQ01TdGFydAorICovCisKK2ludCBWZGFhX1BDTVNldHVwICh2ZGFhQ2hhblR5cGUgKnBWZGFhLGludDMyIHByZXNldCk7CisKKy8qKgorICogQGJyaWVmCisgKiAgVGhpcyBjb25maWd1cmVzIHRoZSBQcm9TTElDIHRvIGxhdGNoIGFuZCBzZW5kIHRoZSBQQ00gZGF0YSBhdCBhIHBhcnRpY3VsYXIgdGltZXNsb3QgaW4gdGVybXMgb2YgUENNIGNsb2NrcyAoUENMSykuCisgKgorICogIFR5cGljYWxseSwgZm9yIGFMYXcgYW5kIHVMYXcsIG9uZSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgY2FsY3VsYXRpb24gdG8gc2V0IHRoZSByeGNvdW50IGFuZCB0eGNvdW50IHBhcmFtZXRlcnM6CisgKgorICogIHJ4Y291bnQgPSB0eGNvdW50ID0gKGNoYW5uZWxfbnVtYmVyKSo4OworICoKKyAqICBGb3IgMTYgYml0IGxpbmVhciwgb25lIGNhbiBkbyB0aGUgZm9sbG93aW5nOgorICoKKyAqICByeGNvdW50ID0gdHhjb3VudCA9IChjaGFubmVsX251bWJlcikqMTY7CisgKgorICogd2hlcmUgY2hhbm5lbF9udW1iZXIgPSB3aGljaCBQcm9TTElDIGNoYW5uZWwgb24gdGhlIFBDTSBidXMuICBGb3IgZXhhbXBsZSwgaWYgb25lIHdlcmUgdG8gaGF2ZSAyIGR1YWwgY2hhbm5lbAorICogVkRBQSdzIG9uIHRoZSBzYW1lIFBDTSBidXMsIHRoaXMgdmFsdWUgd291bGQgcmFuZ2UgZnJvbSAwIHRvIDMuCisgKgorICogQHBhcmFtW2luXSBwVmRhYSAtIHdoaWNoIGNoYW5uZWwgc2hvdWxkIGJlIGNvbmZpZ3VyZWQKKyAqIEBwYXJhbVtpbl0gcnhjb3VudCAtICBob3cgbWFueSBjbG9ja3MgdW50aWwgcmVhZGluZyBkYXRhIGZyb20gdGhlIFBDTSBidXMKKyAqIEBwYXJhbVtpbl0gdHhjb3VudCAtICBob3cgbWFueSBjbG9ja3MgdW50aWwgd3JpdGluZyBkYXRhIHRvIHRoZSBQQ00gYnVzLgorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqCisgKiBAc2EgVmRhYV9QQ01TZXR1cCBWZGFhX1BDTVN0YXJ0CisgKi8KKworaW50IFZkYWFfUENNVGltZVNsb3RTZXR1cCAodmRhYUNoYW5UeXBlICpwVmRhYSwgdUludDE2IHJ4Y291bnQsIHVJbnQxNiB0eGNvdW50KTsKKworLyoqCisgKiBAYnJpZWYKKyAqICBUaGlzIGVuYWJsZXMgUENNIHRyYW5zZmVyIG9uIHRoZSBnaXZlbiBQcm9TTElDIGNoYW5uZWwuCisgKgorICogQHBhcmFtW2luXSBwVmRhYSAtIC0gd2hpY2ggY2hhbm5lbCBzaG91bGQgYmUgZW5hYmxlZAorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqCisgKiBAc2EgUHJvU0xJQ19QQ01TZXR1cCBQcm9TTElDX1BDTVRpbWVTbG90U2V0dXAgUHJvU0xJQ19QQ01TdG9wCisgKi8KKworaW50IFZkYWFfUENNU3RhcnQgKHZkYWFDaGFuVHlwZSAqcFZkYWEpOworCisvKioKKyAqIEBicmllZgorICogIFRoaXMgZGlzYWJsZXMgUENNIHRyYW5zZmVyIG9uIHRoZSBnaXZlbiBWREFBIGNoYW5uZWwuIFR5cGljYWxseSwgdGhpcyBpcyBjYWxsZWQgZm9yIGRlYnVnZ2luZworICogIHB1cnBvc2VzIG9ubHkuCisgKgorICogQHBhcmFtW2luXSBwVmRhYSAtIC0gd2hpY2ggY2hhbm5lbCBzaG91bGQgYmUgZGlzYWJsZWQKKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKgorICogQHNhIFZkYWFfUENNU2V0dXAgVmRhYV9QQ01UaW1lU2xvdFNldHVwIFZkYWFfUENNU3RhcnQKKyAqLworCitpbnQgVmRhYV9QQ01TdG9wICh2ZGFhQ2hhblR5cGUgKnBWZGFhKTsKKworLyoqCisgKiBAYnJpZWYKKyAqIFByb2dyYW0gZGVzaXJlZCBtdXRlIG1vZGUgZm9yIHRoZSBnaXZlbiBjaGFubmVsLgorICoKKyAqIEBwYXJhbVtpbl0gcFZkYWEgLSB3aGljaCBjaGFubmVsIHNob3VsZCBiZSBtb2RpZmllZAorICogQHBhcmFtW2luXSBtdXRlIC0gd2hhdCBpcyB0aGUgZGVzaXJlZCBtb2RlLgorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqCisgKi8KKworaW50IFZkYWFfU2V0QXVkaW9NdXRlKHZkYWFDaGFuVHlwZSAqcFZkYWEsIHRNVVRFIG11dGUpOworCisvKioKKyAqIEBicmllZgorICogUHJvZ3JhbSBkZXNpcmVkIGxvb3BiYWNrIHRlc3QgbW9kZSBmb3IgdGhlIGdpdmVuIGNoYW5uZWwuCisgKgorICogQHBhcmFtW2luXSBwVmRhYSAtICB3aGljaCBjaGFubmVsIHNob3VsZCBiZSBtb2RpZmllZAorICogQHBhcmFtW2luXSBscGJrX21vZGUgLSB3aGF0IGlzIHRoZSBkZXNpcmVkIGxvb3BiYWNrIG1vZGUuCisgKiBAcGFyYW1baW5dIGxwYmtfc3RhdHVzIC0gaXMgdGhpcyB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgbG9vcGJhY2sgbW9kZS4KKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKgorICovCisKK2ludCBWZGFhX1NldExvb3BiYWNrTW9kZSh2ZGFhQ2hhblR5cGVfcHRyIHBWZGFhLCB0THBia01vZGUgbHBia19tb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgIHRMcGJrU3RhdHVzIGxwYmtfc3RhdHVzKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqIEB9IFZEQUFfQVVESU8gKi8KKy8qKiBAfSAqLworLyoqIEBkZWZncm91cCBWREFBX1JJTkcgUmluZyBkZXRlY3Rpb24KKyAqIEB7CisgKi8KKworLyoqCisgKiBAYnJpZWYgVGhpcyBmdW5jdGlvbiBjb25maWd1cmVzIHJpbmdpbmcgZGV0ZWN0IGZvciB0aGUgVmRhYS4KKyAqIEBwYXJhbVtpbl0gcFZkYWEgLSB3aGljaCBjaGFubmVsIHRvIHByb2dyYW0KKyAqIEBwYXJhbVtpbl0gcHJlc2V0IC0gSW5kZXggb2YgcHJlZGVmaW5lZCByaW5nIGRldGVjdCBzZXR1cCBjb25maWd1cmF0aW9uCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICovCisKK2ludCBWZGFhX1JpbmdEZXRlY3RTZXR1cCAodmRhYUNoYW5UeXBlICpwVmRhYSxpbnQzMiBwcmVzZXQpOworCisKKy8qKgorICogQGJyaWVmIFRoaXMgZnVuY3Rpb24gcmVhZHMgcmluZyBkZXRlY3QvaG9vayBzdGF0dXMgYW5kIHBvcHVsYXRlcyB0aGUgc3RydWN0dXJlIHBhc3NlZCB2aWEgcFN0YXR1cy4KKyAqIEBwYXJhbVtpbl0gcFZkYWEgLSBQb2ludGVyIHRvIFZvaWNlIERBQSBjaGFubmVsIHN0cnVjdHVyZQorICogQHBhcmFtW291dF0gcFN0YXR1cyAtIHVwZGF0ZWQgcmluZyBzdGF0dXMuCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICovCisKK2ludCBWZGFhX1JlYWRSaW5nRGV0ZWN0U3RhdHVzICh2ZGFhQ2hhblR5cGUgKnBWZGFhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZkYWFSaW5nRGV0ZWN0U3RhdHVzVHlwZSAqcFN0YXR1cyk7CisKKy8qKiBAfSBWREFBX1JJTkcgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqIEBkZWZncm91cCBWREFBX0xJTkVfU1RBVEUgTGluZSBzdGF0ZQorICogQHsKKyAqLworCisKKy8qKgorICogQGJyaWVmIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgVm9pY2UgREFBIGhvb2sgc3RhdHVzCisgKiBAcGFyYW1baW5dICBwVmRhYSAtIFBvaW50ZXIgdG8gVm9pY2UgREFBIGNoYW5uZWwgc3RydWN0dXJlCisgKiBAcGFyYW1baW5dICBuZXdIb29rU3RhdHVzIC0gbmV3IGhvb2sgc3RhdGUgKFZEQUFfT05IT09LLCBWREFBX09GRkhPT0ssIFZEQUFfRElHX0xPT1BCQUNLIG9yIFZEQUFfT05IT09LX01PTklUT1IpCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICovCisKK2ludCBWZGFhX1NldEhvb2tTdGF0dXMgKHZkYWFDaGFuVHlwZSAqcFZkYWEsdUludDggbmV3SG9va1N0YXR1cyk7CisKKy8qKgorICogQGJyaWVmIFRoaXMgZnVuY3Rpb24gcG93ZXJzIHVwIHRoZSBWb2ljZSBEQUEgbGluZXNpZGUgZGV2aWNlLgorICogQHBhcmFtW2luXSAgcFZkYWEgLSBQb2ludGVyIHRvIFZvaWNlIERBQSBjaGFubmVsIHN0cnVjdHVyZQorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqLworCitpbnQgVmRhYV9Qb3dlcnVwTGluZXNpZGUodmRhYUNoYW5UeXBlX3B0ciBwVmRhYSk7CisKKy8qKgorICogQGJyaWVmIFRoaXMgZnVuY3Rpb24gcG93ZXJzIGRvd24gdGhlIFZvaWNlIERBQSBsaW5lIHNpZGUgZGV2aWNlLgorICogQHBhcmFtW2luXSAgcFZkYWEgLSBQb2ludGVyIHRvIFZvaWNlIERBQSBjaGFubmVsIHN0cnVjdHVyZQorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqLworCitpbnQgVmRhYV9Qb3dlcmRvd25MaW5lc2lkZSh2ZGFhQ2hhblR5cGVfcHRyIHBWZGFhKTsKKworLyoqCisgKiBAYnJpZWYgUmVhZCBWREFBIEhvb2sgU3RhdHVzCisgKiBAcGFyYW1baW5dIHBWZGFhIC0gd2hpY2ggY2hhbm5lbCB0byByZXR1cm4gdGhlIGhvb2sgc3RhdHVzLgorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqLworCit1SW50OCBWZGFhX0dldEhvb2tTdGF0dXMgKHZkYWFDaGFuVHlwZSAqcFZkYWEpOworCisvKiogQH0gVkRBQV9MSU5FX1NUQVRFICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiBAZGVmZ3JvdXAgVkRBQV9ESUFHIERpYWdub3N0aWNzCisgKiBAeworICovCisKKy8qKgorICogQGJyaWVmIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgVm9pY2UgREFBIGxpbmVmZWVkIHN0YXR1cy4KKyAqIEBwYXJhbVtpbl0gcFZkYWEgLSBQb2ludGVyIHRvIFZvaWNlIERBQSBjaGFubmVsIHN0cnVjdHVyZQorICogQHBhcmFtW2luLG91dF0gdmxvb3AgLSBQb2ludGVyIHRvIGxvb3Agdm9sdGFnZSB2YXJpYWJsZSAoc2V0IGJ5IHRoaXMgZnVuY3Rpb24pIC0gaW4gVm9sdHMKKyAqIEBwYXJhbVtpbixvdXRdIGlsb29wIC0gUG9pbnRlciB0byBsb29wIGN1cnJlbnQgdmFyaWFibGUgKHNldCBieSB0aGlzIGZ1bmN0aW9uKSAtIGluIG1BCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICovCisKK2ludCBWZGFhX1JlYWRMaW5lZmVlZFN0YXR1cyAodmRhYUNoYW5UeXBlICpwVmRhYSxpbnQ4ICp2bG9vcCwgaW50MTYgKmlsb29wKTsKKworLyoqCisgKiBAYnJpZWYgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgdmRhYV9MSVVfQ29uZmlnIGRhdGFzdHJ1Y3R1cmUgZm9yIGxpbmUgaW4gdXNlIGZlYXR1cmUKKyAqIEBwYXJhbVtpbixvdXRdIGxpdUNmZyAtIFBvaW50ZXIgdG8gdmRhYV9MSVVfQ29uZmlnIHN0cnVjdHVyZSAodXNlciBhbGxvY2F0ZXMpCisgKiBAcGFyYW1baW5dIG1pbk9uViAtIG1pbmltdW0gb25ob29rIGxvb3Agdm9sdGFnZSB0aGF0IGluZGljYXRlcyBubyBwYXJhbGxlbCBoYW5kc2V0IGlzIHByZXNlbnQgKFYpCisgKiBAcGFyYW1baW5dIG1pbk9mZlYgLSBtaW5pbXVtIG9mZmhvb2sgbG9vcCB2b2x0YWdlIHRoYXQgaW5kaWNhdGVzIG5vIHBhcmFsbGVsIGhhbmRzZXQgaXMgcHJlc2VudCAoVikKKyAqIEBwYXJhbVtpbl0gbWluT2ZmSSAtIG1pbmltdW0gb2ZmaG9vayBsb29wIGN1cnJlbnQgdGhhdCBpbmRpY2F0ZXMgbm8gcGFyYWxsZWwgaGFuZHNldCBpcyBwcmVzZXQgKG1BKQorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqIEBzYSBWZGFhX0NoZWNrRm9yTGluZUluVXNlCisgKi8KKworaW50IFZkYWFfSW5pdExpbmVJblVzZUNoZWNrKHZkYWFfTElVX0NvbmZpZyAqbGl1Q2ZnLGludDggbWluT25WLGludDggbWluT2ZmViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQxNiBtaW5PZmZJICk7CisKKy8qKgorICogQGJyaWVmIE1vbml0b3IgTFZDUyB0byBkZXRlY3QgaW50cnVzaW9uIG9yIHBhcmFsbGVsIGhhbmRzZXQKKyAqIEBwYXJhbVtpbl0gcFZkYWEgLSBQb2ludGVyIHRvIFZvaWNlIERBQSBjaGFubmVsIHN0cnVjdHVyZQorICogQHBhcmFtW2luLG91dF0gbGl1Q2ZnIC0gUG9pbnRlciB0byB2ZGFhX0xJVV9Db25maWcgc3RydWN0dXJlCisgKiBAcmV0dmFsIFZEQUFfT05IT09LIG9yIFZEQUFfT0ZGSE9PSyAoaW4gdXNlKQorICogQHNhIFZkYWFfSW5pdExpbmVJblVzZUNoZWNrCisgKi8KKwordUludDggVmRhYV9DaGVja0ZvckxpbmVJblVzZSh2ZGFhQ2hhblR5cGUgKnBWZGFhLCB2ZGFhX0xJVV9Db25maWcgKmxpdUNmZyk7CisKKy8qKgorICogQGJyaWVmIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgc3RhdHVzIG9mIHRoZSBGcmFtZSBEZXRlY3QgKEZEVCkgYml0LgorICogQHBhcmFtW2luXSBwVmRhYSAtIFBvaW50ZXIgdG8gVm9pY2UgREFBIGNoYW5uZWwgc3RydWN0dXJlCisgKiBAcmV0dmFsIGludCAtIDAgLSBGcmFtZSBOT1QgZGV0ZWN0ZWQsIDEgPSBGcmFtZSBkZXRlY3RlZAorICovCisKK2ludCBWZGFhX1JlYWRGRFRTdGF0dXModmRhYUNoYW5UeXBlX3B0ciBwVmRhYSk7CisKKy8qKiBAfSBWREFBX0RJQUcgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqIEBkZWZncm91cCBWREFBX0lOVEVSUlVQVFMgSW50ZXJydXB0cworICogQHsKKyAqLworCisKKy8qKgorICogQGJyaWVmIEVuYWJsZXMgaW50ZXJydXB0cyBiYXNlZCBvbiBwYXNzZWQgOS1iaXQgYml0bWFzay4gIEJpdCB2YWx1ZXMgZGVmaW5lZCBieSB2ZGFhSW50TWFzayBlbnVtLgorICogQHBhcmFtW2luXSBwVmRhYSAtIFBvaW50ZXIgdG8gVm9pY2UgREFBIGNoYW5uZWwgc3RydWN0dXJlCisgKiBAcGFyYW1baW5dIGJpdG1hc2sgLSBhIGxvZ2ljYWwgb3Igb2YgQHJlZiB2ZGFhSW50TWFzayBlbnVtCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICovCisKK2ludCBWZGFhX1NldEludGVycnVwdE1hc2sodmRhYUNoYW5UeXBlICpwVmRhYSwgdmRhYUludE1hc2sgYml0bWFzayk7CisKKy8qKgorICogQGJyaWVmIFJldHVybnMgdGhlIGN1cnJlbnQgaW50ZXJydXB0IHN0YXR1cy4KKyAqIEBwYXJhbVtpbl0gcFZkYWEgLSBQb2ludGVyIHRvIFZvaWNlIERBQSBjaGFubmVsIHN0cnVjdHVyZQorICogQHBhcmFtW291dF0gIHBJbnREYXRhIC0gaW50ZXJydXB0IG1hc2sgc2hvd2luZyB3aGljaCBpbnRlcnJ1cHRzIGFyZSBzZXQuCisgKiBAcmV0dmFsIGludCAtIHRoZSBudW1iZXIgb2YgaW50ZXJydXB0cyBzZXQgb3IgUkNfSUdOT1JFCisgKi8KKworaW50IFZkYWFfR2V0SW50ZXJydXB0cyAodmRhYUNoYW5UeXBlICpwVmRhYSx2ZGFhSW50VHlwZSAqcEludERhdGEpOworCisvKioKKyAqIEBicmllZiBDbGVhcnMgQUxMIGludGVycnVwdHMKKyAqIEBwYXJhbVtpbl0gcFZkYWEgLSBQb2ludGVyIHRvIFZvaWNlIERBQSBjaGFubmVsIHN0cnVjdHVyZQorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqLworCitpbnQgVmRhYV9DbGVhckludGVycnVwdHMgKHZkYWFDaGFuVHlwZSAqcFZkYWEpOworCisvKiogQH0gVkRBQV9JTlRFUlJVUFRTICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiBAZGVmZ3JvdXAgVkRBQV9JTklUIEluaXRpYWxpemF0aW9uCisgKiBAeworICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiBAZGVmZ3JvdXAgVkRBQV9IV19JTklUIEhhcmR3YXJlL2xpbmUgaW5pdGlhbGl6YXRpb24KKyAqIEB7CisgKi8KKworLyoqCisgKiBAYnJpZWYKKyAqICBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIFZvaWNlIERBQSB3aXRoIGEgcHJlZGVmaW5lZCBjb3VudHJ5IGNvbmZpZ3VyYXRpb24gcHJlc2V0LgorICoKKyAqIEBwYXJhbVtpbl0gcFZkYWEgLSB3aGljaCBjaGFubmVsIHRvIGluaXRpYWxpemUKKyAqIEBwYXJhbVtpbl0gcHJlc2V0IC0gVGhlIHByZXNldCB0byB1c2UgdG8gY29uZmlndXJlIHRoZSBWREFBIHdpdGguCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICoKKyAqLworCitpbnQgVmRhYV9Db3VudHJ5U2V0dXAgKHZkYWFDaGFuVHlwZSAqcFZkYWEsaW50MzIgcHJlc2V0KTsKKworLyoqCisgKiBAYnJpZWYKKyAqICBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIFZvaWNlIERBQSBkaWdpdGFsIGh5YnJpZCB3aXRoIGEgcHJlZGVmaW5lZCBwcmVzZXQuCisgKgorICogQHBhcmFtW2luXSBwVmRhYSAtIHdoaWNoIGNoYW5uZWwgdG8gaW5pdGlhbGl6ZQorICogQHBhcmFtW2luXSBwcmVzZXQgLSBJbmRleCBvZiBwcmVkZWZpbmVkIGRpZ2l0YWwgaHlicmlkIHByZXNldAorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqIEBzYSBWZGFhX1NldEh5YnJpZEVuYWJsZQorICovCisKK2ludCBWZGFhX0h5YnJpZFNldHVwICh2ZGFhQ2hhblR5cGUgKnBWZGFhLGludDMyIHByZXNldCk7CisKKy8qKgorICogQGJyaWVmCisgKiAgVGhpcyBmdW5jdGlvbiBmdWxseSBpbml0aWFsaXplcyBhbmQgbG9hZHMgdGhlIGdlbmVyYWwgY29uZmlnIHBhcmFtZXRlcnMgdG8gYWxsIFZkYWEgZGV2aWNlcworICogIGEgZ2l2ZW4gZGFpc3ljaGFpbiB1cCB0byBhIGdpdmVuIG51bWJlci4KKyAqCisgKiBAcGFyYW1baW5dIHBWZGFhIC0gd2hpY2ggY2hhbm5lbCB0byBpbml0aWFsaXplIG9yIHN0YXJ0IGZyb20gaWYgc2l6ZT4xCisgKiBAcGFyYW1baW5dIHNpemUgLSB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIHRvIGluaXRpYWxpemUsIHNob3VsZCBiZSBhdCBsZWFzdCAxCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICoKKyAqLworCitpbnQgVmRhYV9Jbml0ICh2ZGFhQ2hhblR5cGVfcHRyICpwVmRhYSxpbnQgc2l6ZSk7CisKKy8qKgorICogQGJyaWVmCisgKiAgVGhpcyBmdW5jdGlvbiBjYWxpYnJhdGVzIHRoZSBBREMgKGFuYWxvZyB0byBkaWdpdGFsIGNvbnZlcnRlcikgb2YgdGhlIFZkYWEgZGV2aWNlKHMpLgorICoKKyAqIEBwYXJhbVtpbl0gcFZkYWEgLSB3aGljaCBjaGFubmVsIHRvIGNhbGlicmF0ZSBvciBzdGFydGluZyBjaGFubmVsIGlmIHNpemU+MQorICogQHBhcmFtW2luXSBzaXplIC0gdGhlIG51bWJlciBvZiBjaGFubmVscyB0byBjYWxpYnJhdGUuCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICoKKyAqLworCitpbnQgVmRhYV9BRENDYWwgKHZkYWFDaGFuVHlwZV9wdHIgcFZkYWEsIGludDMyIHNpemUpOworCisvKioKKyAqIEBicmllZgorICogIFRoaXMgZnVuY3Rpb24gY29udHJvbHMgdGhlIFZvaWNlIERBQSBkaWdpdGFsIGh5YnJpZC4KKyAqCisgKiBAcGFyYW1baW5dIHBWZGFhIC0gd2hpY2ggY2hhbm5lbCB0byBzZXQvdW5zZXQKKyAqIEBwYXJhbVtpbl0gZW5hYmxlIC0gVFJVRTogZW5hYmxlIGRpZ2l0YWwgaHlicmlkLCBGQUxTRTogZGlzYWJsZSBkaWdpdGFsIGh5YnJpZAorICogQHJldHZhbCBpbnQgLSBlcnJvciBmcm9tIEByZWYgZXJyb3JDb2RlVHlwZSAgQHJlZiBSQ19OT05FIGluZGljYXRlcyBubyBlcnJvci4KKyAqCisgKi8KKworaW50IFZkYWFfU2V0SHlicmlkRW5hYmxlKHZkYWFDaGFuVHlwZV9wdHIgcFZkYWEsIGludCBlbmFibGUpOworCisvKiogQH0gVkRBQV9IV19JTklUICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqCisgKiBAYnJpZWYgIEVuYWJsZXMgd2F0Y2hkb2cgdGltZXIKKyAqIEBwYXJhbVtpbl0gcFZkYWEgLSB0aGUgY2hhbm5lbCB0byBlbmFibGUgdGhlIHdhdGNoZG9nCisgKiBAcmV0dmFsIGludCAtIGVycm9yIGZyb20gQHJlZiBlcnJvckNvZGVUeXBlICBAcmVmIFJDX05PTkUgaW5kaWNhdGVzIG5vIGVycm9yLgorICovCisKK2ludCBWZGFhX0VuYWJsZVdhdGNoZG9nKHZkYWFDaGFuVHlwZV9wdHIgcFZkYWEpOworCisvKioKKyAqIEBicmllZiBFeGVjdXRlIGEgc29mdCByZXNldCBvbiBhIGdpdmVuIGNoYW5uZWwuCisgKiBAcGFyYW1baW5dIHBWZGFhIC0gdGhlIGNoYW5uZWwgdG8gcmVzZXQKKyAqIEByZXR2YWwgaW50IC0gZXJyb3IgZnJvbSBAcmVmIGVycm9yQ29kZVR5cGUgIEByZWYgUkNfTk9ORSBpbmRpY2F0ZXMgbm8gZXJyb3IuCisgKi8KKworaW50IFZkYWFfU29mdFJlc2V0KHZkYWFDaGFuVHlwZV9wdHIgcFZkYWEpOy8qKiBAfSBWREFBX0lOSVQgKi8KKworLyoqIEB9IE1JU0MgKi8KKworLyoqIEB9IFZEQUFfQVBJICovCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvaW5jL3ZkYWFfcmVnaXN0ZXJzLmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9pbmMvdmRhYV9yZWdpc3RlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDQ4ZTNkCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvaW5jL3ZkYWFfcmVnaXN0ZXJzLmgKQEAgLTAsMCArMSw4NCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKy8qCisgKiBBdXRob3Iocyk6CisgKiBsYWoKKyAqCisgKiBEaXN0cmlidXRlZCBieToKKyAqIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgcHJvcHJpZXRhcnkgaW5mb3JtYXRpb24uCisgKiBObyBkaXNzZW1pbmF0aW9uIGFsbG93ZWQgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbQorICogU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KKyAqCisgKi8KKworI2lmbmRlZiBTSTMwNTBSRUdTX0gKKyNkZWZpbmUgU0kzMDUwUkVHU19ICisKKworZW51bSBSRUdJU1RFUlMKK3sKKyAgQ1RSTDEgICAgICAgICAgICAgICA9ICAxLCAvKiAgQ29udHJvbCAgICAqLworICBDVFJMMiAgICAgICAgICAgICAgID0gIDIsIC8qICBDb250cm9sICAqLworICBJTlRFX01TSyAgICAgICAgICAgID0gIDMsIC8qICBJbnRlcnJ1cHQgTWFzayAgKi8KKyAgSU5URV9TUkMgICAgICAgICAgICA9ICA0LCAvKiAgSW50ZXJydXB0IFNvdXJjZSAgKi8KKyAgREFBX0NUUkwxICAgICAgICAgICA9ICA1LCAvKiAgREFBIENvbnRyb2wgMSAgICovCisgIERBQV9DVFJMMiAgICAgICAgICAgPSAgNiwgLyogIERBQSBDb250cm9sIDIgICAqLworICBTTVBMX0NUUkwgICAgICAgICAgID0gIDcsIC8qICBTYW1wbGUgUmF0ZSBDb250cm9sICAqLworICBSRVNWRDggICAgICAgICAgICAgID0gIDgsIC8qICBSZXNlcnZlZCAgKi8KKyAgUkVTVkQ5ICAgICAgICAgICAgICA9ICA5LCAvKiAgUmVzZXJ2ZWQgICovCisgIERBQV9DVFJMMyAgICAgICAgICAgPSAgMTAsIC8qICBEQUEgQ29udHJvbCAzICAqLworICBTWVNfTElORV9ERVZfUkVWICAgID0gIDExLCAvKiAgU3lzdGVtLSBhbmQgTGluZS1TaWRlIERldmljZSBSZXZpc2lvbiAgKi8KKyAgTFNJREVfU1RBVCAgICAgICAgICA9ICAxMiwgLyogIExpbmUtU2lkZSBEZXZpY2UgU3RhdHVzICAgKi8KKyAgTFNJREVfUkVWICAgICAgICAgICA9ICAxMywgLyogIExpbmUtU2lkZSBEZXZpY2UgUmV2aXNpb24gICAqLworICBEQUFfQ1RSTDQgICAgICAgICAgID0gIDE0LCAvKiAgREFBIENvbnRyb2wgNCBSUE9MICAqLworICBUWFJYX0dOX0NUUkwgICAgICAgID0gIDE1LCAvKiAgVFgvUlggR2FpbiBDb250cm9sIDEgICovCisgIElOVExfQ1RSTDEgICAgICAgICAgPSAgMTYsIC8qICBJbnRlcm5hdGlvbmFsIENvbnRyb2wgMSAgICovCisgIElOVExfQ1RSTDIgICAgICAgICAgPSAgMTcsIC8qICBJbnRlcm5hdGlvbmFsIENvbnRyb2wgMiAgICovCisgIElOVExfQ1RSTDMgICAgICAgICAgPSAgMTgsIC8qICBJbnRlcm5hdGlvbmFsIENvbnRyb2wgMyAgICovCisgIElOVExfQ1RSTDQgICAgICAgICAgPSAgMTksIC8qICBJbnRlcm5hdGlvbmFsIENvbnRyb2wgNCAgICovCisgIFJYQ0FMTF9QUk9HX0FUVEVOICAgPSAgMjAsIC8qICBDYWxsIFByb2dyZXNzIFJYIEF0dGVudWF0aW9uICAqLworICBUWENBTExfUFJPR19BVFRFTiAgID0gIDIxLCAvKiAgQ2FsbCBQcm9ncmVzcyBUWCBBdHRlbnVhdGlvbiAgICovCisgIFJOR19WTERfQ1RSTDEgICAgICAgPSAgMjIsIC8qICBSaW5nIFZhbGlkYXRpb24gQ29udHJvbCAxICAgKi8KKyAgUk5HX1ZMRF9DVFJMMiAgICAgICA9ICAyMywgLyogIFJpbmcgVmFsaWRhdGlvbiBDb250cm9sIDIgICAqLworICBSTkdfVkxEX0NUUkwzICAgICAgID0gIDI0LCAvKiAgaW5nIFZhbGlkYXRpb24gQ29udHJvbCAzICAgKi8KKyAgUkVTX0NBTElCICAgICAgICAgICA9ICAyNSwgLyogIFJlc2lzdG9yIENhbGlicmF0aW9uICAgKi8KKyAgRENfVEVSTV9DVFJMICAgICAgICA9ICAyNiwgLyogIERDIFRlcm1pbmF0aW9uIENvbnRyb2wgICAqLworICBSRVNWRDI3ICAgICAgICAgICAgID0gIDI3LCAvKiAgUmVzZXJ2ZWQgICovCisgIExQX0NSTlRfU1RBVCAgICAgICAgPSAgMjgsIC8qICBMb29wIEN1cnJlbnQgU3RhdHVzICAqLworICBMSU5FX1ZPTFRfU1RBVCAgICAgID0gIDI5LCAvKiAgTGluZSBWb2x0YWdlIFN0YXR1cyAgICovCisgIEFDX1RFUk1fQ1RSTCAgICAgICAgPSAgMzAsIC8qICBBQyBUZXJtaW5hdGlvbiBDb250cm9sICAgKi8KKyAgREFBX0NUUkw1ICAgICAgICAgICA9ICAzMSwgLyogIERBQSBDb250cm9sIDUgICAqLworICBHTkRfU1RSVF9DVFJMICAgICAgID0gIDMyLCAvKiAgR3JvdW5kIFN0YXJ0IENvbnRyb2wgICovCisgIFBDTV9TUElfQ1RSTCAgICAgICAgPSAgMzMsIC8qICBQQ00vU1BJIE1vZGUgU2VsZWN0ICAgKi8KKyAgUENNVFhfQ05UX0xPICAgICAgICA9ICAzNCwgLyogIFBDTSBUcmFuc21pdCBTdGFydCBDb3VudCAtIExvdyBCeXRlICAqLworICBQQ01UWF9DTlRfSEkgICAgICAgID0gIDM1LCAvKiAgUENNIFRyYW5zbWl0IFN0YXJ0IENvdW50IC0gSGlnaCBCeXRlICAgKi8KKyAgUENNUlhfQ05UX0xPICAgICAgICA9ICAzNiwgLyogIFBDTSBSZWNlaXZlIFN0YXJ0IENvdW50IC0gTG93IEJ5dGUgICAqLworICBQQ01SWF9DTlRfSEkgICAgICAgID0gIDM3LCAvKiAgUENNIFJlY2VpdmUgU3RhcnQgQ291bnQgLSBIaWdoIEJ5dGUgICAqLworICBUWF9HTl9DVFJMMiAgICAgICAgID0gIDM4LCAvKiAgVFggR2FpbiBDb250cm9sIDIgICAqLworICBSWF9HTl9DVFJMMiAgICAgICAgID0gIDM5LCAvKiAgUlggR2FpbiBDb250cm9sIDIgICAqLworICBUWF9HTl9DVFJMMyAgICAgICAgID0gIDQwLCAvKiAgVFggR2FpbiBDb250cm9sIDMgICAqLworICBSWF9HTl9DVFJMMyAgICAgICAgID0gIDQxLCAvKiAgUlggR2FpbiBDb250cm9sIDMgICAqLworICBHQ0lfQ1RSTCAgICAgICAgICAgID0gIDQyLCAvKiAgR0NJIENvbnRyb2wgICAqLworICBMTl9WSV9USFJFU0hfSU5URSAgID0gIDQzLCAvKiAgTGluZSBDdXJyZW50L1ZvbHRhZ2UgVGhyZXNob2xkIEludGVycnVwdCAgKi8KKyAgTE5fVklfVEhSRVNIX0lOVEVfQ1RSTD00NCwgLyogIExpbmUgQ3VycmVudC9Wb2x0YWdlIFRocmVzaG9sZCBJbnRlcnJ1cHQgQ29udHJvbCAgKi8KKyAgSFlCMSAgICAgICAgICAgICAgICA9ICA0NSwgLyogIFByb2dyYW1tYWJsZSBIeWJyaWQgUmVnaXN0ZXIgMSAgKi8KKyAgSFlCMiAgICAgICAgICAgICAgICA9ICA0NiwgLyogIFByb2dyYW1tYWJsZSBIeWJyaWQgUmVnaXN0ZXIgMiAgKi8KKyAgSFlCMyAgICAgICAgICAgICAgICA9ICA0NywgLyogIFByb2dyYW1tYWJsZSBIeWJyaWQgUmVnaXN0ZXIgMyAgKi8KKyAgSFlCNCAgICAgICAgICAgICAgICA9ICA0OCwgLyogIFByb2dyYW1tYWJsZSBIeWJyaWQgUmVnaXN0ZXIgNCAgKi8KKyAgSFlCNSAgICAgICAgICAgICAgICA9ICA0OSwgLyogIFByb2dyYW1tYWJsZSBIeWJyaWQgUmVnaXN0ZXIgNSAgKi8KKyAgSFlCNiAgICAgICAgICAgICAgICA9ICA1MCwgLyogIFByb2dyYW1tYWJsZSBIeWJyaWQgUmVnaXN0ZXIgNiAgKi8KKyAgSFlCNyAgICAgICAgICAgICAgICA9ICA1MSwgLyogIFByb2dyYW1tYWJsZSBIeWJyaWQgUmVnaXN0ZXIgNyAgKi8KKyAgSFlCOCAgICAgICAgICAgICAgICA9ICA1MiwgLyogIFByb2dyYW1tYWJsZSBIeWJyaWQgUmVnaXN0ZXIgOCAgKi8KKyAgUkVTVkQ1MyAgICAgICAgICAgICA9ICA1MywgLyogIFJlc2VydmVkIDUzICAqLworICBSRVNWRDU0ICAgICAgICAgICAgID0gIDU0LCAvKiAgUmVzZXJ2ZWQgNTQgICovCisgIFJFU1ZENTUgICAgICAgICAgICAgPSAgNTUsIC8qICBSZXNlcnZlZCA1NSAgKi8KKyAgUkVTVkQ1NiAgICAgICAgICAgICA9ICA1NiwgLyogIFJlc2VydmVkIDU2ICAqLworICBSRVNWRDU3ICAgICAgICAgICAgID0gIDU3LCAvKiAgUmVzZXJ2ZWQgNTcgICovCisgIFJFU1ZENTggICAgICAgICAgICAgPSAgNTgsIC8qICBSZXNlcnZlZCA1OCAgKi8KKyAgU1BSS19RTkNIX0NUUkwgICAgICA9ICA1OSAgICAvKiAgU3BhcmsgUXVlbmNoaW5nIENvbnRyb2wgICovCisKK307CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9taXBzcmVncy5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvbWlwc3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGQxMGU5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvbWlwc3JlZ3MuaApAQCAtMCwwICsxLDE0NzMgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisjaWZuZGVmIF9BU01fTUlQU1JFR1NfSAorI2RlZmluZSBfQVNNX01JUFNSRUdTX0gKKworLy8jaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorLy8jaW5jbHVkZSA8YXNtL2hhemFyZHMuaD4KKyNkZWZpbmUgQ09ORklHX1BBR0VfU0laRV80S0IKKy8qCisgKiBUaGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgZXNwZWNpYWxseSB1c2VmdWwgZm9yIF9fYXNtX18KKyAqIGlubGluZSBhc3NlbWJsZXIuCisgKi8KKyNpZm5kZWYgX19TVFIKKyNkZWZpbmUgX19TVFIoeCkgI3gKKyNlbmRpZgorI2lmbmRlZiBTVFIKKyNkZWZpbmUgU1RSKHgpIF9fU1RSKHgpCisjZW5kaWYKKworLyoKKyAqICBDb25maWd1cmUgbGFuZ3VhZ2UKKyAqLworI2lmZGVmIF9fQVNTRU1CTFlfXworI2RlZmluZSBfVUxDQVNUXworI2Vsc2UKKyNkZWZpbmUgX1VMQ0FTVF8gKHVuc2lnbmVkIGxvbmcpCisjZW5kaWYKKworLyoKKyAqIENvcHJvY2Vzc29yIDAgcmVnaXN0ZXIgbmFtZXMKKyAqLworI2RlZmluZSBDUDBfSU5ERVggJDAKKyNkZWZpbmUgQ1AwX1JBTkRPTSAkMQorI2RlZmluZSBDUDBfRU5UUllMTzAgJDIKKyNkZWZpbmUgQ1AwX0VOVFJZTE8xICQzCisjZGVmaW5lIENQMF9DT05GICQzCisjZGVmaW5lIENQMF9DT05URVhUICQ0CisjZGVmaW5lIENQMF9QQUdFTUFTSyAkNQorI2RlZmluZSBDUDBfV0lSRUQgJDYKKyNkZWZpbmUgQ1AwX0lORk8gJDcKKyNkZWZpbmUgQ1AwX0JBRFZBRERSICQ4CisjZGVmaW5lIENQMF9DT1VOVCAkOQorI2RlZmluZSBDUDBfRU5UUllISSAkMTAKKyNkZWZpbmUgQ1AwX0NPTVBBUkUgJDExCisjZGVmaW5lIENQMF9TVEFUVVMgJDEyCisjZGVmaW5lIENQMF9DQVVTRSAkMTMKKyNkZWZpbmUgQ1AwX0VQQyAkMTQKKyNkZWZpbmUgQ1AwX1BSSUQgJDE1CisjZGVmaW5lIENQMF9DT05GSUcgJDE2CisjZGVmaW5lIENQMF9MTEFERFIgJDE3CisjZGVmaW5lIENQMF9XQVRDSExPICQxOAorI2RlZmluZSBDUDBfV0FUQ0hISSAkMTkKKyNkZWZpbmUgQ1AwX1hDT05URVhUICQyMAorI2RlZmluZSBDUDBfRlJBTUVNQVNLICQyMQorI2RlZmluZSBDUDBfRElBR05PU1RJQyAkMjIKKyNkZWZpbmUgQ1AwX0RFQlVHICQyMworI2RlZmluZSBDUDBfREVQQyAkMjQKKyNkZWZpbmUgQ1AwX1BFUkZPUk1BTkNFICQyNQorI2RlZmluZSBDUDBfRUNDICQyNgorI2RlZmluZSBDUDBfQ0FDSEVFUlIgJDI3CisjZGVmaW5lIENQMF9UQUdMTyAkMjgKKyNkZWZpbmUgQ1AwX1RBR0hJICQyOQorI2RlZmluZSBDUDBfRVJST1JFUEMgJDMwCisjZGVmaW5lIENQMF9ERVNBVkUgJDMxCisKKy8qCisgKiBSNDY0MC9SNDY1MCBjcDAgcmVnaXN0ZXIgbmFtZXMuICBUaGVzZSByZWdpc3RlcnMgYXJlIGxpc3RlZAorICogaGVyZSBvbmx5IGZvciBjb21wbGV0ZW5lc3M7IHdpdGhvdXQgTU1VIHRoZXNlIENQVXMgYXJlIG5vdCB1c2VhYmxlCisgKiBieSBMaW51eC4gIEEgZnV0dXJlIEVMS1MgcG9ydCBtaWdodCB0YWtlIG1ha2UgTGludXggcnVuIG9uIHRoZW0KKyAqIHRob3VnaCAuLi4KKyAqLworI2RlZmluZSBDUDBfSUJBU0UgJDAKKyNkZWZpbmUgQ1AwX0lCT1VORCAkMQorI2RlZmluZSBDUDBfREJBU0UgJDIKKyNkZWZpbmUgQ1AwX0RCT1VORCAkMworI2RlZmluZSBDUDBfQ0FMRyAkMTcKKyNkZWZpbmUgQ1AwX0lXQVRDSCAkMTgKKyNkZWZpbmUgQ1AwX0RXQVRDSCAkMTkKKworLyoKKyAqIENvcHJvY2Vzc29yIDAgU2V0IDEgcmVnaXN0ZXIgbmFtZXMKKyAqLworI2RlZmluZSBDUDBfUzFfREVSUkFERFIwICAkMjYKKyNkZWZpbmUgQ1AwX1MxX0RFUlJBRERSMSAgJDI3CisjZGVmaW5lIENQMF9TMV9JTlRDT05UUk9MICQyMAorCisvKgorICogQ29wcm9jZXNzb3IgMCBTZXQgMiByZWdpc3RlciBuYW1lcworICovCisjZGVmaW5lIENQMF9TMl9TUlNDVEwJICAkMTIJLyogTUlQU1IyICovCisKKy8qCisgKiBDb3Byb2Nlc3NvciAwIFNldCAzIHJlZ2lzdGVyIG5hbWVzCisgKi8KKyNkZWZpbmUgQ1AwX1MzX1NSU01BUAkgICQxMgkvKiBNSVBTUjIgKi8KKworLyoKKyAqICBUWDM5IFNlcmllcworICovCisjZGVmaW5lIENQMF9UWDM5X0NBQ0hFCSQ3CisKKy8qCisgKiBDb3Byb2Nlc3NvciAxIChGUFUpIHJlZ2lzdGVyIG5hbWVzCisgKi8KKyNkZWZpbmUgQ1AxX1JFVklTSU9OICAgJDAKKyNkZWZpbmUgQ1AxX1NUQVRVUyAgICAgJDMxCisKKy8qCisgKiBGUFUgU3RhdHVzIFJlZ2lzdGVyIFZhbHVlcworICovCisvKgorICogU3RhdHVzIFJlZ2lzdGVyIFZhbHVlcworICovCisKKyNkZWZpbmUgRlBVX0NTUl9GTFVTSCAgIDB4MDEwMDAwMDAgICAgICAvKiBmbHVzaCBkZW5vcm1hbGlzZWQgcmVzdWx0cyB0byAwICovCisjZGVmaW5lIEZQVV9DU1JfQ09ORCAgICAweDAwODAwMDAwICAgICAgLyogJGZjYzAgKi8KKyNkZWZpbmUgRlBVX0NTUl9DT05EMCAgIDB4MDA4MDAwMDAgICAgICAvKiAkZmNjMCAqLworI2RlZmluZSBGUFVfQ1NSX0NPTkQxICAgMHgwMjAwMDAwMCAgICAgIC8qICRmY2MxICovCisjZGVmaW5lIEZQVV9DU1JfQ09ORDIgICAweDA0MDAwMDAwICAgICAgLyogJGZjYzIgKi8KKyNkZWZpbmUgRlBVX0NTUl9DT05EMyAgIDB4MDgwMDAwMDAgICAgICAvKiAkZmNjMyAqLworI2RlZmluZSBGUFVfQ1NSX0NPTkQ0ICAgMHgxMDAwMDAwMCAgICAgIC8qICRmY2M0ICovCisjZGVmaW5lIEZQVV9DU1JfQ09ORDUgICAweDIwMDAwMDAwICAgICAgLyogJGZjYzUgKi8KKyNkZWZpbmUgRlBVX0NTUl9DT05ENiAgIDB4NDAwMDAwMDAgICAgICAvKiAkZmNjNiAqLworI2RlZmluZSBGUFVfQ1NSX0NPTkQ3ICAgMHg4MDAwMDAwMCAgICAgIC8qICRmY2M3ICovCisKKy8qCisgKiBYIHRoZSBleGNlcHRpb24gY2F1c2UgaW5kaWNhdG9yCisgKiBFIHRoZSBleGNlcHRpb24gZW5hYmxlCisgKiBTIHRoZSBzdGlja3kvZmxhZyBiaXQKKyovCisjZGVmaW5lIEZQVV9DU1JfQUxMX1ggICAweDAwMDNmMDAwCisjZGVmaW5lIEZQVV9DU1JfVU5JX1ggICAweDAwMDIwMDAwCisjZGVmaW5lIEZQVV9DU1JfSU5WX1ggICAweDAwMDEwMDAwCisjZGVmaW5lIEZQVV9DU1JfRElWX1ggICAweDAwMDA4MDAwCisjZGVmaW5lIEZQVV9DU1JfT1ZGX1ggICAweDAwMDA0MDAwCisjZGVmaW5lIEZQVV9DU1JfVURGX1ggICAweDAwMDAyMDAwCisjZGVmaW5lIEZQVV9DU1JfSU5FX1ggICAweDAwMDAxMDAwCisKKyNkZWZpbmUgRlBVX0NTUl9BTExfRSAgIDB4MDAwMDBmODAKKyNkZWZpbmUgRlBVX0NTUl9JTlZfRSAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgRlBVX0NTUl9ESVZfRSAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgRlBVX0NTUl9PVkZfRSAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgRlBVX0NTUl9VREZfRSAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgRlBVX0NTUl9JTkVfRSAgIDB4MDAwMDAwODAKKworI2RlZmluZSBGUFVfQ1NSX0FMTF9TICAgMHgwMDAwMDA3YworI2RlZmluZSBGUFVfQ1NSX0lOVl9TICAgMHgwMDAwMDA0MAorI2RlZmluZSBGUFVfQ1NSX0RJVl9TICAgMHgwMDAwMDAyMAorI2RlZmluZSBGUFVfQ1NSX09WRl9TICAgMHgwMDAwMDAxMAorI2RlZmluZSBGUFVfQ1NSX1VERl9TICAgMHgwMDAwMDAwOAorI2RlZmluZSBGUFVfQ1NSX0lORV9TICAgMHgwMDAwMDAwNAorCisvKiByb3VuZGluZyBtb2RlICovCisjZGVmaW5lIEZQVV9DU1JfUk4gICAgICAweDAgICAgIC8qIG5lYXJlc3QgKi8KKyNkZWZpbmUgRlBVX0NTUl9SWiAgICAgIDB4MSAgICAgLyogdG93YXJkcyB6ZXJvICovCisjZGVmaW5lIEZQVV9DU1JfUlUgICAgICAweDIgICAgIC8qIHRvd2FyZHMgK0luZmluaXR5ICovCisjZGVmaW5lIEZQVV9DU1JfUkQgICAgICAweDMgICAgIC8qIHRvd2FyZHMgLUluZmluaXR5ICovCisKKworLyoKKyAqIFZhbHVlcyBmb3IgUGFnZU1hc2sgcmVnaXN0ZXIKKyAqLworI2lmZGVmIENPTkZJR19DUFVfVlI0MVhYCisKKy8qIFdoeSBkb2Vzbid0IHN0dXBpZGl0eSBodXJ0IC4uLiAqLworCisjZGVmaW5lIFBNXzFLCQkweDAwMDAwMDAwCisjZGVmaW5lIFBNXzRLCQkweDAwMDAxODAwCisjZGVmaW5lIFBNXzE2SwkJMHgwMDAwNzgwMAorI2RlZmluZSBQTV82NEsJCTB4MDAwMWY4MDAKKyNkZWZpbmUgUE1fMjU2SwkJMHgwMDA3ZjgwMAorCisjZWxzZQorCisjZGVmaW5lIFBNXzRLCQkweDAwMDAwMDAwCisjZGVmaW5lIFBNXzE2SwkJMHgwMDAwNjAwMAorI2RlZmluZSBQTV82NEsJCTB4MDAwMWUwMDAKKyNkZWZpbmUgUE1fMjU2SwkJMHgwMDA3ZTAwMAorI2RlZmluZSBQTV8xTQkJMHgwMDFmZTAwMAorI2RlZmluZSBQTV80TQkJMHgwMDdmZTAwMAorI2RlZmluZSBQTV8xNk0JCTB4MDFmZmUwMDAKKyNkZWZpbmUgUE1fNjRNCQkweDA3ZmZlMDAwCisjZGVmaW5lIFBNXzI1Nk0JCTB4MWZmZmUwMDAKKworI2VuZGlmCisKKy8qCisgKiBEZWZhdWx0IHBhZ2Ugc2l6ZSBmb3IgYSBnaXZlbiBrZXJuZWwgY29uZmlndXJhdGlvbgorICovCisjaWZkZWYgQ09ORklHX1BBR0VfU0laRV80S0IKKyNkZWZpbmUgUE1fREVGQVVMVF9NQVNLCVBNXzRLCisjZWxpZiBkZWZpbmVkKENPTkZJR19QQUdFX1NJWkVfMTZLQikKKyNkZWZpbmUgUE1fREVGQVVMVF9NQVNLCVBNXzE2SworI2VsaWYgZGVmaW5lZChDT05GSUdfUEFHRV9TSVpFXzY0S0IpCisjZGVmaW5lIFBNX0RFRkFVTFRfTUFTSwlQTV82NEsKKyNlbHNlCisjZXJyb3IgQmFkIHBhZ2Ugc2l6ZSBjb25maWd1cmF0aW9uIQorI2VuZGlmCisKKworLyoKKyAqIFZhbHVlcyB1c2VkIGZvciBjb21wdXRhdGlvbiBvZiBuZXcgdGxiIGVudHJpZXMKKyAqLworI2RlZmluZSBQTF80SwkJMTIKKyNkZWZpbmUgUExfMTZLCQkxNAorI2RlZmluZSBQTF82NEsJCTE2CisjZGVmaW5lIFBMXzI1NksJCTE4CisjZGVmaW5lIFBMXzFNCQkyMAorI2RlZmluZSBQTF80TQkJMjIKKyNkZWZpbmUgUExfMTZNCQkyNAorI2RlZmluZSBQTF82NE0JCTI2CisjZGVmaW5lIFBMXzI1Nk0JCTI4CisKKy8qCisgKiBSNHgwMCBpbnRlcnJ1cHQgZW5hYmxlIC8gY2F1c2UgYml0cworICovCisjZGVmaW5lIElFX1NXMCAgICAgICAgICAoX1VMQ0FTVF8oMSkgPDwgIDgpCisjZGVmaW5lIElFX1NXMSAgICAgICAgICAoX1VMQ0FTVF8oMSkgPDwgIDkpCisjZGVmaW5lIElFX0lSUTAgICAgICAgICAoX1VMQ0FTVF8oMSkgPDwgMTApCisjZGVmaW5lIElFX0lSUTEgICAgICAgICAoX1VMQ0FTVF8oMSkgPDwgMTEpCisjZGVmaW5lIElFX0lSUTIgICAgICAgICAoX1VMQ0FTVF8oMSkgPDwgMTIpCisjZGVmaW5lIElFX0lSUTMgICAgICAgICAoX1VMQ0FTVF8oMSkgPDwgMTMpCisjZGVmaW5lIElFX0lSUTQgICAgICAgICAoX1VMQ0FTVF8oMSkgPDwgMTQpCisjZGVmaW5lIElFX0lSUTUgICAgICAgICAoX1VMQ0FTVF8oMSkgPDwgMTUpCisKKy8qCisgKiBSNHgwMCBpbnRlcnJ1cHQgY2F1c2UgYml0cworICovCisjZGVmaW5lIENfU1cwICAgICAgICAgICAoX1VMQ0FTVF8oMSkgPDwgIDgpCisjZGVmaW5lIENfU1cxICAgICAgICAgICAoX1VMQ0FTVF8oMSkgPDwgIDkpCisjZGVmaW5lIENfSVJRMCAgICAgICAgICAoX1VMQ0FTVF8oMSkgPDwgMTApCisjZGVmaW5lIENfSVJRMSAgICAgICAgICAoX1VMQ0FTVF8oMSkgPDwgMTEpCisjZGVmaW5lIENfSVJRMiAgICAgICAgICAoX1VMQ0FTVF8oMSkgPDwgMTIpCisjZGVmaW5lIENfSVJRMyAgICAgICAgICAoX1VMQ0FTVF8oMSkgPDwgMTMpCisjZGVmaW5lIENfSVJRNCAgICAgICAgICAoX1VMQ0FTVF8oMSkgPDwgMTQpCisjZGVmaW5lIENfSVJRNSAgICAgICAgICAoX1VMQ0FTVF8oMSkgPDwgMTUpCisKKy8qCisgKiBCaXRmaWVsZHMgaW4gdGhlIFI0eHgwIGNwMCBzdGF0dXMgcmVnaXN0ZXIKKyAqLworI2RlZmluZSBTVDBfSUUJCQkweDAwMDAwMDAxCisjZGVmaW5lIFNUMF9FWEwJCQkweDAwMDAwMDAyCisjZGVmaW5lIFNUMF9FUkwJCQkweDAwMDAwMDA0CisjZGVmaW5lIFNUMF9LU1UJCQkweDAwMDAwMDE4CisjICBkZWZpbmUgS1NVX1VTRVIJCTB4MDAwMDAwMTAKKyMgIGRlZmluZSBLU1VfU1VQRVJWSVNPUgkweDAwMDAwMDA4CisjICBkZWZpbmUgS1NVX0tFUk5FTAkJMHgwMDAwMDAwMAorI2RlZmluZSBTVDBfVVgJCQkweDAwMDAwMDIwCisjZGVmaW5lIFNUMF9TWAkJCTB4MDAwMDAwNDAKKyNkZWZpbmUgU1QwX0tYIAkJCTB4MDAwMDAwODAKKyNkZWZpbmUgU1QwX0RFCQkJMHgwMDAxMDAwMAorI2RlZmluZSBTVDBfQ0UJCQkweDAwMDIwMDAwCisKKy8qCisgKiBTZXR0aW5nIGMwX3N0YXR1cy5jbyBlbmFibGVzIEhpdF9Xcml0ZWJhY2sgYW5kIEhpdF9Xcml0ZWJhY2tfSW52YWxpZGF0ZQorICogY2FjaGVvcHMgaW4gdXNlcnNwYWNlLiAgVGhpcyBiaXQgZXhpc3RzIG9ubHkgb24gUk03MDAwIGFuZCBSTTkwMDAKKyAqIHByb2Nlc3NvcnMuCisgKi8KKyNkZWZpbmUgU1QwX0NPCQkJMHgwODAwMDAwMAorCisvKgorICogQml0ZmllbGRzIGluIHRoZSBSWzIzXTAwMCBjcDAgc3RhdHVzIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIFNUMF9JRUMgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU1QwX0tVQwkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgU1QwX0lFUAkJCTB4MDAwMDAwMDQKKyNkZWZpbmUgU1QwX0tVUAkJCTB4MDAwMDAwMDgKKyNkZWZpbmUgU1QwX0lFTwkJCTB4MDAwMDAwMTAKKyNkZWZpbmUgU1QwX0tVTwkJCTB4MDAwMDAwMjAKKy8qIGJpdHMgNiAmIDcgYXJlIHJlc2VydmVkIG9uIFJbMjNdMDAwICovCisjZGVmaW5lIFNUMF9JU0MJCQkweDAwMDEwMDAwCisjZGVmaW5lIFNUMF9TV0MJCQkweDAwMDIwMDAwCisjZGVmaW5lIFNUMF9DTQkJCTB4MDAwODAwMDAKKworLyoKKyAqIEJpdHMgc3BlY2lmaWMgdG8gdGhlIFI0NjQwL1I0NjUwCisgKi8KKyNkZWZpbmUgU1QwX1VNCQkJKF9VTENBU1RfKDEpIDw8ICA0KQorI2RlZmluZSBTVDBfSUwJCQkoX1VMQ0FTVF8oMSkgPDwgMjMpCisjZGVmaW5lIFNUMF9ETAkJCShfVUxDQVNUXygxKSA8PCAyNCkKKworLyoKKyAqIEVuYWJsZSB0aGUgTUlQUyBNRE1YIGFuZCBEU1AgQVNFcworICovCisjZGVmaW5lIFNUMF9NWAkJCTB4MDEwMDAwMDAKKworLyoKKyAqIEJpdGZpZWxkcyBpbiB0aGUgVFgzOSBmYW1pbHkgQ1AwIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMworICovCisjZGVmaW5lIFRYMzlfQ09ORl9JQ1NfU0hJRlQJMTkKKyNkZWZpbmUgVFgzOV9DT05GX0lDU19NQVNLCTB4MDAzODAwMDAKKyNkZWZpbmUgVFgzOV9DT05GX0lDU18xS0IgCTB4MDAwMDAwMDAKKyNkZWZpbmUgVFgzOV9DT05GX0lDU18yS0IgCTB4MDAwODAwMDAKKyNkZWZpbmUgVFgzOV9DT05GX0lDU180S0IgCTB4MDAxMDAwMDAKKyNkZWZpbmUgVFgzOV9DT05GX0lDU184S0IgCTB4MDAxODAwMDAKKyNkZWZpbmUgVFgzOV9DT05GX0lDU18xNktCIAkweDAwMjAwMDAwCisKKyNkZWZpbmUgVFgzOV9DT05GX0RDU19TSElGVAkxNgorI2RlZmluZSBUWDM5X0NPTkZfRENTX01BU0sJMHgwMDA3MDAwMAorI2RlZmluZSBUWDM5X0NPTkZfRENTXzFLQiAJMHgwMDAwMDAwMAorI2RlZmluZSBUWDM5X0NPTkZfRENTXzJLQiAJMHgwMDAxMDAwMAorI2RlZmluZSBUWDM5X0NPTkZfRENTXzRLQiAJMHgwMDAyMDAwMAorI2RlZmluZSBUWDM5X0NPTkZfRENTXzhLQiAJMHgwMDAzMDAwMAorI2RlZmluZSBUWDM5X0NPTkZfRENTXzE2S0IgCTB4MDAwNDAwMDAKKworI2RlZmluZSBUWDM5X0NPTkZfQ1dGT04gCTB4MDAwMDQwMDAKKyNkZWZpbmUgVFgzOV9DT05GX1dCT04gIAkweDAwMDAyMDAwCisjZGVmaW5lIFRYMzlfQ09ORl9SRl9TSElGVAkxMAorI2RlZmluZSBUWDM5X0NPTkZfUkZfTUFTSwkweDAwMDAwYzAwCisjZGVmaW5lIFRYMzlfQ09ORl9ET1pFCQkweDAwMDAwMjAwCisjZGVmaW5lIFRYMzlfQ09ORl9IQUxUCQkweDAwMDAwMTAwCisjZGVmaW5lIFRYMzlfQ09ORl9MT0NLCQkweDAwMDAwMDgwCisjZGVmaW5lIFRYMzlfQ09ORl9JQ0UJCTB4MDAwMDAwMjAKKyNkZWZpbmUgVFgzOV9DT05GX0RDRQkJMHgwMDAwMDAxMAorI2RlZmluZSBUWDM5X0NPTkZfSVJTSVpFX1NISUZUCTIKKyNkZWZpbmUgVFgzOV9DT05GX0lSU0laRV9NQVNLCTB4MDAwMDAwMGMKKyNkZWZpbmUgVFgzOV9DT05GX0RSU0laRV9TSElGVAkwCisjZGVmaW5lIFRYMzlfQ09ORl9EUlNJWkVfTUFTSwkweDAwMDAwMDAzCisKKy8qCisgKiBTdGF0dXMgcmVnaXN0ZXIgYml0cyBhdmFpbGFibGUgaW4gYWxsIE1JUFMgQ1BVcy4KKyAqLworI2RlZmluZSBTVDBfSU0JCQkweDAwMDBmZjAwCisjZGVmaW5lICBTVEFUVVNCX0lQMAkJOAorI2RlZmluZSAgU1RBVFVTRl9JUDAJCShfVUxDQVNUXygxKSA8PCAgOCkKKyNkZWZpbmUgIFNUQVRVU0JfSVAxCQk5CisjZGVmaW5lICBTVEFUVVNGX0lQMQkJKF9VTENBU1RfKDEpIDw8ICA5KQorI2RlZmluZSAgU1RBVFVTQl9JUDIJCTEwCisjZGVmaW5lICBTVEFUVVNGX0lQMgkJKF9VTENBU1RfKDEpIDw8IDEwKQorI2RlZmluZSAgU1RBVFVTQl9JUDMJCTExCisjZGVmaW5lICBTVEFUVVNGX0lQMwkJKF9VTENBU1RfKDEpIDw8IDExKQorI2RlZmluZSAgU1RBVFVTQl9JUDQJCTEyCisjZGVmaW5lICBTVEFUVVNGX0lQNAkJKF9VTENBU1RfKDEpIDw8IDEyKQorI2RlZmluZSAgU1RBVFVTQl9JUDUJCTEzCisjZGVmaW5lICBTVEFUVVNGX0lQNQkJKF9VTENBU1RfKDEpIDw8IDEzKQorI2RlZmluZSAgU1RBVFVTQl9JUDYJCTE0CisjZGVmaW5lICBTVEFUVVNGX0lQNgkJKF9VTENBU1RfKDEpIDw8IDE0KQorI2RlZmluZSAgU1RBVFVTQl9JUDcJCTE1CisjZGVmaW5lICBTVEFUVVNGX0lQNwkJKF9VTENBU1RfKDEpIDw8IDE1KQorI2RlZmluZSAgU1RBVFVTQl9JUDgJCTAKKyNkZWZpbmUgIFNUQVRVU0ZfSVA4CQkoX1VMQ0FTVF8oMSkgPDwgIDApCisjZGVmaW5lICBTVEFUVVNCX0lQOQkJMQorI2RlZmluZSAgU1RBVFVTRl9JUDkJCShfVUxDQVNUXygxKSA8PCAgMSkKKyNkZWZpbmUgIFNUQVRVU0JfSVAxMAkJMgorI2RlZmluZSAgU1RBVFVTRl9JUDEwCQkoX1VMQ0FTVF8oMSkgPDwgIDIpCisjZGVmaW5lICBTVEFUVVNCX0lQMTEJCTMKKyNkZWZpbmUgIFNUQVRVU0ZfSVAxMQkJKF9VTENBU1RfKDEpIDw8ICAzKQorI2RlZmluZSAgU1RBVFVTQl9JUDEyCQk0CisjZGVmaW5lICBTVEFUVVNGX0lQMTIJCShfVUxDQVNUXygxKSA8PCAgNCkKKyNkZWZpbmUgIFNUQVRVU0JfSVAxMwkJNQorI2RlZmluZSAgU1RBVFVTRl9JUDEzCQkoX1VMQ0FTVF8oMSkgPDwgIDUpCisjZGVmaW5lICBTVEFUVVNCX0lQMTQJCTYKKyNkZWZpbmUgIFNUQVRVU0ZfSVAxNAkJKF9VTENBU1RfKDEpIDw8ICA2KQorI2RlZmluZSAgU1RBVFVTQl9JUDE1CQk3CisjZGVmaW5lICBTVEFUVVNGX0lQMTUJCShfVUxDQVNUXygxKSA8PCAgNykKKyNkZWZpbmUgU1QwX0NICQkJMHgwMDA0MDAwMAorI2RlZmluZSBTVDBfU1IJCQkweDAwMTAwMDAwCisjZGVmaW5lIFNUMF9UUwkJCTB4MDAyMDAwMDAKKyNkZWZpbmUgU1QwX0JFVgkJCTB4MDA0MDAwMDAKKyNkZWZpbmUgU1QwX1JFCQkJMHgwMjAwMDAwMAorI2RlZmluZSBTVDBfRlIJCQkweDA0MDAwMDAwCisjZGVmaW5lIFNUMF9DVQkJCTB4ZjAwMDAwMDAKKyNkZWZpbmUgU1QwX0NVMAkJCTB4MTAwMDAwMDAKKyNkZWZpbmUgU1QwX0NVMQkJCTB4MjAwMDAwMDAKKyNkZWZpbmUgU1QwX0NVMgkJCTB4NDAwMDAwMDAKKyNkZWZpbmUgU1QwX0NVMwkJCTB4ODAwMDAwMDAKKyNkZWZpbmUgU1QwX1hYCQkJMHg4MDAwMDAwMAkvKiBNSVBTIElWIG5hbWluZyAqLworCisvKgorICogQml0ZmllbGRzIGFuZCBiaXQgbnVtYmVycyBpbiB0aGUgY29wcm9jZXNzb3IgMCBjYXVzZSByZWdpc3Rlci4KKyAqCisgKiBSZWZlciB0byB5b3VyIE1JUFMgUjR4eDAgbWFudWFsLCBjaGFwdGVyIDUgZm9yIGV4cGxhbmF0aW9uLgorICovCisjZGVmaW5lICBDQVVTRUJfRVhDQ09ERQkJMgorI2RlZmluZSAgQ0FVU0VGX0VYQ0NPREUJCShfVUxDQVNUXygzMSkgIDw8ICAyKQorI2RlZmluZSAgQ0FVU0VCX0lQCQk4CisjZGVmaW5lICBDQVVTRUZfSVAJCShfVUxDQVNUXygyNTUpIDw8ICA4KQorI2RlZmluZSAgQ0FVU0VCX0lQMAkJOAorI2RlZmluZSAgQ0FVU0VGX0lQMAkJKF9VTENBU1RfKDEpICAgPDwgIDgpCisjZGVmaW5lICBDQVVTRUJfSVAxCQk5CisjZGVmaW5lICBDQVVTRUZfSVAxCQkoX1VMQ0FTVF8oMSkgICA8PCAgOSkKKyNkZWZpbmUgIENBVVNFQl9JUDIJCTEwCisjZGVmaW5lICBDQVVTRUZfSVAyCQkoX1VMQ0FTVF8oMSkgICA8PCAxMCkKKyNkZWZpbmUgIENBVVNFQl9JUDMJCTExCisjZGVmaW5lICBDQVVTRUZfSVAzCQkoX1VMQ0FTVF8oMSkgICA8PCAxMSkKKyNkZWZpbmUgIENBVVNFQl9JUDQJCTEyCisjZGVmaW5lICBDQVVTRUZfSVA0CQkoX1VMQ0FTVF8oMSkgICA8PCAxMikKKyNkZWZpbmUgIENBVVNFQl9JUDUJCTEzCisjZGVmaW5lICBDQVVTRUZfSVA1CQkoX1VMQ0FTVF8oMSkgICA8PCAxMykKKyNkZWZpbmUgIENBVVNFQl9JUDYJCTE0CisjZGVmaW5lICBDQVVTRUZfSVA2CQkoX1VMQ0FTVF8oMSkgICA8PCAxNCkKKyNkZWZpbmUgIENBVVNFQl9JUDcJCTE1CisjZGVmaW5lICBDQVVTRUZfSVA3CQkoX1VMQ0FTVF8oMSkgICA8PCAxNSkKKyNkZWZpbmUgIENBVVNFQl9JVgkJMjMKKyNkZWZpbmUgIENBVVNFRl9JVgkJKF9VTENBU1RfKDEpICAgPDwgMjMpCisjZGVmaW5lICBDQVVTRUJfQ0UJCTI4CisjZGVmaW5lICBDQVVTRUZfQ0UJCShfVUxDQVNUXygzKSAgIDw8IDI4KQorI2RlZmluZSAgQ0FVU0VCX0JECQkzMQorI2RlZmluZSAgQ0FVU0VGX0JECQkoX1VMQ0FTVF8oMSkgICA8PCAzMSkKKworLyoKKyAqIEJpdHMgaW4gdGhlIGNvcHJvY2Vzc29yIDAgY29uZmlnIHJlZ2lzdGVyLgorICovCisvKiBHZW5lcmljIGJpdHMuICAqLworI2RlZmluZSBDT05GX0NNX0NBQ0hBQkxFX05PX1dBCQkwCisjZGVmaW5lIENPTkZfQ01fQ0FDSEFCTEVfV0EJCTEKKyNkZWZpbmUgQ09ORl9DTV9VTkNBQ0hFRAkJMgorI2RlZmluZSBDT05GX0NNX0NBQ0hBQkxFX05PTkNPSEVSRU5UCTMKKyNkZWZpbmUgQ09ORl9DTV9DQUNIQUJMRV9DRQkJNAorI2RlZmluZSBDT05GX0NNX0NBQ0hBQkxFX0NPVwkJNQorI2RlZmluZSBDT05GX0NNX0NBQ0hBQkxFX0NVVwkJNgorI2RlZmluZSBDT05GX0NNX0NBQ0hBQkxFX0FDQ0VMRVJBVEVECTcKKyNkZWZpbmUgQ09ORl9DTV9DTUFTSwkJCTcKKyNkZWZpbmUgQ09ORl9CRQkJCShfVUxDQVNUXygxKSA8PCAxNSkKKworLyogQml0cyBjb21tb24gdG8gdmFyaW91cyBwcm9jZXNzb3JzLiAgKi8KKyNkZWZpbmUgQ09ORl9DVQkJCShfVUxDQVNUXygxKSA8PCAgMykKKyNkZWZpbmUgQ09ORl9EQgkJCShfVUxDQVNUXygxKSA8PCAgNCkKKyNkZWZpbmUgQ09ORl9JQgkJCShfVUxDQVNUXygxKSA8PCAgNSkKKyNkZWZpbmUgQ09ORl9EQwkJCShfVUxDQVNUXyg3KSA8PCAgNikKKyNkZWZpbmUgQ09ORl9JQwkJCShfVUxDQVNUXyg3KSA8PCAgOSkKKyNkZWZpbmUgQ09ORl9FQgkJCShfVUxDQVNUXygxKSA8PCAxMykKKyNkZWZpbmUgQ09ORl9FTQkJCShfVUxDQVNUXygxKSA8PCAxNCkKKyNkZWZpbmUgQ09ORl9TTQkJCShfVUxDQVNUXygxKSA8PCAxNikKKyNkZWZpbmUgQ09ORl9TQwkJCShfVUxDQVNUXygxKSA8PCAxNykKKyNkZWZpbmUgQ09ORl9FVwkJCShfVUxDQVNUXygzKSA8PCAxOCkKKyNkZWZpbmUgQ09ORl9FUAkJCShfVUxDQVNUXygxNSk8PCAyNCkKKyNkZWZpbmUgQ09ORl9FQwkJCShfVUxDQVNUXyg3KSA8PCAyOCkKKyNkZWZpbmUgQ09ORl9DTQkJCShfVUxDQVNUXygxKSA8PCAzMSkKKworLyogQml0cyBzcGVjaWZpYyB0byB0aGUgUjR4eDAuICAqLworI2RlZmluZSBSNEtfQ09ORl9TVwkJKF9VTENBU1RfKDEpIDw8IDIwKQorI2RlZmluZSBSNEtfQ09ORl9TUwkJKF9VTENBU1RfKDEpIDw8IDIxKQorI2RlZmluZSBSNEtfQ09ORl9TQgkJKF9VTENBU1RfKDMpIDw8IDIyKQorCisvKiBCaXRzIHNwZWNpZmljIHRvIHRoZSBSNTAwMC4gICovCisjZGVmaW5lIFI1S19DT05GX1NFCQkoX1VMQ0FTVF8oMSkgPDwgMTIpCisjZGVmaW5lIFI1S19DT05GX1NTCQkoX1VMQ0FTVF8oMykgPDwgMjApCisKKy8qIEJpdHMgc3BlY2lmaWMgdG8gdGhlIFJNNzAwMC4gICovCisjZGVmaW5lIFJNN0tfQ09ORl9TRQkJKF9VTENBU1RfKDEpIDw8ICAzKQorI2RlZmluZSBSTTdLX0NPTkZfVEUJCShfVUxDQVNUXygxKSA8PCAxMikKKyNkZWZpbmUgUk03S19DT05GX0NMSwkJKF9VTENBU1RfKDEpIDw8IDE2KQorI2RlZmluZSBSTTdLX0NPTkZfVEMJCShfVUxDQVNUXygxKSA8PCAxNykKKyNkZWZpbmUgUk03S19DT05GX1NJCQkoX1VMQ0FTVF8oMykgPDwgMjApCisjZGVmaW5lIFJNN0tfQ09ORl9TQwkJKF9VTENBU1RfKDEpIDw8IDMxKQorCisvKiBCaXRzIHNwZWNpZmljIHRvIHRoZSBSMTAwMDAuICAqLworI2RlZmluZSBSMTBLX0NPTkZfRE4JCShfVUxDQVNUXygzKSA8PCAgMykKKyNkZWZpbmUgUjEwS19DT05GX0NUCQkoX1VMQ0FTVF8oMSkgPDwgIDUpCisjZGVmaW5lIFIxMEtfQ09ORl9QRQkJKF9VTENBU1RfKDEpIDw8ICA2KQorI2RlZmluZSBSMTBLX0NPTkZfUE0JCShfVUxDQVNUXygzKSA8PCAgNykKKyNkZWZpbmUgUjEwS19DT05GX0VDCQkoX1VMQ0FTVF8oMTUpPDwgIDkpCisjZGVmaW5lIFIxMEtfQ09ORl9TQgkJKF9VTENBU1RfKDEpIDw8IDEzKQorI2RlZmluZSBSMTBLX0NPTkZfU0sJCShfVUxDQVNUXygxKSA8PCAxNCkKKyNkZWZpbmUgUjEwS19DT05GX1NTCQkoX1VMQ0FTVF8oNykgPDwgMTYpCisjZGVmaW5lIFIxMEtfQ09ORl9TQwkJKF9VTENBU1RfKDcpIDw8IDE5KQorI2RlZmluZSBSMTBLX0NPTkZfREMJCShfVUxDQVNUXyg3KSA8PCAyNikKKyNkZWZpbmUgUjEwS19DT05GX0lDCQkoX1VMQ0FTVF8oNykgPDwgMjkpCisKKy8qIEJpdHMgc3BlY2lmaWMgdG8gdGhlIFZSNDF4eC4gICovCisjZGVmaW5lIFZSNDFfQ09ORl9DUwkJKF9VTENBU1RfKDEpIDw8IDEyKQorI2RlZmluZSBWUjQxX0NPTkZfUDRLCQkoX1VMQ0FTVF8oMSkgPDwgMTMpCisjZGVmaW5lIFZSNDFfQ09ORl9CUAkJKF9VTENBU1RfKDEpIDw8IDE2KQorI2RlZmluZSBWUjQxX0NPTkZfTTE2CQkoX1VMQ0FTVF8oMSkgPDwgMjApCisjZGVmaW5lIFZSNDFfQ09ORl9BRAkJKF9VTENBU1RfKDEpIDw8IDIzKQorCisvKiBCaXRzIHNwZWNpZmljIHRvIHRoZSBSMzB4eC4gICovCisjZGVmaW5lIFIzMFhYX0NPTkZfRkRNCQkoX1VMQ0FTVF8oMSkgPDwgMTkpCisjZGVmaW5lIFIzMFhYX0NPTkZfUkVWCQkoX1VMQ0FTVF8oMSkgPDwgMjIpCisjZGVmaW5lIFIzMFhYX0NPTkZfQUMJCShfVUxDQVNUXygxKSA8PCAyMykKKyNkZWZpbmUgUjMwWFhfQ09ORl9SRgkJKF9VTENBU1RfKDEpIDw8IDI0KQorI2RlZmluZSBSMzBYWF9DT05GX0hBTFQJCShfVUxDQVNUXygxKSA8PCAyNSkKKyNkZWZpbmUgUjMwWFhfQ09ORl9GUElOVAkoX1VMQ0FTVF8oNykgPDwgMjYpCisjZGVmaW5lIFIzMFhYX0NPTkZfREJSCQkoX1VMQ0FTVF8oMSkgPDwgMjkpCisjZGVmaW5lIFIzMFhYX0NPTkZfU0IJCShfVUxDQVNUXygxKSA8PCAzMCkKKyNkZWZpbmUgUjMwWFhfQ09ORl9MT0NLCQkoX1VMQ0FTVF8oMSkgPDwgMzEpCisKKy8qIEJpdHMgc3BlY2lmaWMgdG8gdGhlIFRYNDkuICAqLworI2RlZmluZSBUWDQ5X0NPTkZfREMJCShfVUxDQVNUXygxKSA8PCAxNikKKyNkZWZpbmUgVFg0OV9DT05GX0lDCQkoX1VMQ0FTVF8oMSkgPDwgMTcpICAvKiBjb25mbGljdCB3aXRoIENPTkZfU0MgKi8KKyNkZWZpbmUgVFg0OV9DT05GX0hBTFQJCShfVUxDQVNUXygxKSA8PCAxOCkKKyNkZWZpbmUgVFg0OV9DT05GX0NXRk9OCQkoX1VMQ0FTVF8oMSkgPDwgMjcpCisKKy8qIEJpdHMgc3BlY2lmaWMgdG8gdGhlIE1JUFMzMi82NCBQUkEuICAqLworI2RlZmluZSBNSVBTX0NPTkZfTVQJCShfVUxDQVNUXyg3KSA8PCAgNykKKyNkZWZpbmUgTUlQU19DT05GX0FSCQkoX1VMQ0FTVF8oNykgPDwgMTApCisjZGVmaW5lIE1JUFNfQ09ORl9BVAkJKF9VTENBU1RfKDMpIDw8IDEzKQorI2RlZmluZSBNSVBTX0NPTkZfTQkJKF9VTENBU1RfKDEpIDw8IDMxKQorCisvKgorICogQml0cyBpbiB0aGUgTUlQUzMyLzY0IFBSQSBjb3Byb2Nlc3NvciAwIGNvbmZpZyByZWdpc3RlcnMgMSBhbmQgYWJvdmUuCisgKi8KKyNkZWZpbmUgTUlQU19DT05GMV9GUAkJKF9VTENBU1RfKDEpIDw8ICAwKQorI2RlZmluZSBNSVBTX0NPTkYxX0VQCQkoX1VMQ0FTVF8oMSkgPDwgIDEpCisjZGVmaW5lIE1JUFNfQ09ORjFfQ0EJCShfVUxDQVNUXygxKSA8PCAgMikKKyNkZWZpbmUgTUlQU19DT05GMV9XUgkJKF9VTENBU1RfKDEpIDw8ICAzKQorI2RlZmluZSBNSVBTX0NPTkYxX1BDCQkoX1VMQ0FTVF8oMSkgPDwgIDQpCisjZGVmaW5lIE1JUFNfQ09ORjFfTUQJCShfVUxDQVNUXygxKSA8PCAgNSkKKyNkZWZpbmUgTUlQU19DT05GMV9DMgkJKF9VTENBU1RfKDEpIDw8ICA2KQorI2RlZmluZSBNSVBTX0NPTkYxX0RBCQkoX1VMQ0FTVF8oNykgPDwgIDcpCisjZGVmaW5lIE1JUFNfQ09ORjFfREwJCShfVUxDQVNUXyg3KSA8PCAxMCkKKyNkZWZpbmUgTUlQU19DT05GMV9EUwkJKF9VTENBU1RfKDcpIDw8IDEzKQorI2RlZmluZSBNSVBTX0NPTkYxX0lBCQkoX1VMQ0FTVF8oNykgPDwgMTYpCisjZGVmaW5lIE1JUFNfQ09ORjFfSUwJCShfVUxDQVNUXyg3KSA8PCAxOSkKKyNkZWZpbmUgTUlQU19DT05GMV9JUwkJKF9VTENBU1RfKDcpIDw8IDIyKQorI2RlZmluZSBNSVBTX0NPTkYxX1RMQlMJCShfVUxDQVNUXyg2Myk8PCAyNSkKKworI2RlZmluZSBNSVBTX0NPTkYyX1NBCQkoX1VMQ0FTVF8oMTUpPDwgIDApCisjZGVmaW5lIE1JUFNfQ09ORjJfU0wJCShfVUxDQVNUXygxNSk8PCAgNCkKKyNkZWZpbmUgTUlQU19DT05GMl9TUwkJKF9VTENBU1RfKDE1KTw8ICA4KQorI2RlZmluZSBNSVBTX0NPTkYyX1NVCQkoX1VMQ0FTVF8oMTUpPDwgMTIpCisjZGVmaW5lIE1JUFNfQ09ORjJfVEEJCShfVUxDQVNUXygxNSk8PCAxNikKKyNkZWZpbmUgTUlQU19DT05GMl9UTAkJKF9VTENBU1RfKDE1KTw8IDIwKQorI2RlZmluZSBNSVBTX0NPTkYyX1RTCQkoX1VMQ0FTVF8oMTUpPDwgMjQpCisjZGVmaW5lIE1JUFNfQ09ORjJfVFUJCShfVUxDQVNUXyg3KSA8PCAyOCkKKworI2RlZmluZSBNSVBTX0NPTkYzX1RMCQkoX1VMQ0FTVF8oMSkgPDwgIDApCisjZGVmaW5lIE1JUFNfQ09ORjNfU00JCShfVUxDQVNUXygxKSA8PCAgMSkKKyNkZWZpbmUgTUlQU19DT05GM19NVAkJKF9VTENBU1RfKDEpIDw8ICAyKQorI2RlZmluZSBNSVBTX0NPTkYzX1NQCQkoX1VMQ0FTVF8oMSkgPDwgIDQpCisjZGVmaW5lIE1JUFNfQ09ORjNfVklOVAkJKF9VTENBU1RfKDEpIDw8ICA1KQorI2RlZmluZSBNSVBTX0NPTkYzX1ZFSUMJCShfVUxDQVNUXygxKSA8PCAgNikKKyNkZWZpbmUgTUlQU19DT05GM19MUEEJCShfVUxDQVNUXygxKSA8PCAgNykKKyNkZWZpbmUgTUlQU19DT05GM19EU1AJCShfVUxDQVNUXygxKSA8PCAxMCkKKworLyoKKyAqIEJpdHMgaW4gdGhlIE1JUFMzMi82NCBjb3Byb2Nlc3NvciAxIChGUFUpIHJldmlzaW9uIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIE1JUFNfRlBJUl9TCQkoX1VMQ0FTVF8oMSkgPDwgMTYpCisjZGVmaW5lIE1JUFNfRlBJUl9ECQkoX1VMQ0FTVF8oMSkgPDwgMTcpCisjZGVmaW5lIE1JUFNfRlBJUl9QUwkJKF9VTENBU1RfKDEpIDw8IDE4KQorI2RlZmluZSBNSVBTX0ZQSVJfM0QJCShfVUxDQVNUXygxKSA8PCAxOSkKKyNkZWZpbmUgTUlQU19GUElSX1cJCShfVUxDQVNUXygxKSA8PCAyMCkKKyNkZWZpbmUgTUlQU19GUElSX0wJCShfVUxDQVNUXygxKSA8PCAyMSkKKyNkZWZpbmUgTUlQU19GUElSX0Y2NAkJKF9VTENBU1RfKDEpIDw8IDIyKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKgorICogRnVuY3Rpb25zIHRvIGFjY2VzcyB0aGUgUjEwMDAwIHBlcmZvcm1hbmNlIGNvdW50ZXJzLiAgVGhlc2UgYXJlIGJhc2ljYWxseQorICogbWZjMCBhbmQgbXRjMCBpbnN0cnVjdGlvbnMgZnJvbSBhbmQgdG8gY29wcm9jZXNzb3IgcmVnaXN0ZXIgd2l0aCBhIDUtYml0CisgKiBwZXJmb3JtYW5jZSBjb3VudGVyIG51bWJlciBlbmNvZGVkIGludG8gYml0cyAxIC4uLiA1IG9mIHRoZSBpbnN0cnVjdGlvbi4KKyAqIE9ubHkgcGVyZm9ybWFuY2UgY291bnRlcnMgMCB0byAxIGFjdHVhbGx5IGV4aXN0LCBzbyBmb3IgYSBub24tUjEwMDAwIGF3YXJlCisgKiBkaXNhc3NlbWJsZXIgdGhlc2Ugd2lsbCBsb29rIGxpa2UgYW4gYWNjZXNzIHRvIHNlbCAwIG9yIDEuCisgKi8KKyNkZWZpbmUgcmVhZF9yMTBrX3BlcmZfY250cihjb3VudGVyKQkJCQlcCisoewkJCQkJCQkJXAorCXVuc2lnbmVkIGludCBfX3JlczsJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKKwkibWZwY1x0JTAsICUxIgkJCQkJCVwKKyAgICAgICAgOiAiPXIiIChfX3JlcykJCQkJCQlcCisJOiAiaSIgKGNvdW50ZXIpKTsJCQkJCVwKKwkJCQkJCQkJXAorICAgICAgICBfX3JlczsJCQkJCQkJXAorfSkKKworI2RlZmluZSB3cml0ZV9yMTBrX3BlcmZfY250cihjb3VudGVyLHZhbCkgICAgICAgICAgICAgICAgICAgICAgIFwKK2RvIHsJCQkJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKKwkibXRwY1x0JTAsICUxIgkJCQkJCVwKKwk6CQkJCQkJCVwKKwk6ICJyIiAodmFsKSwgImkiIChjb3VudGVyKSk7CQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgcmVhZF9yMTBrX3BlcmZfZXZlbnQoY291bnRlcikJCQkJXAorKHsJCQkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgX19yZXM7CQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJIm1mcHNcdCUwLCAlMSIJCQkJCQlcCisgICAgICAgIDogIj1yIiAoX19yZXMpCQkJCQkJXAorCTogImkiIChjb3VudGVyKSk7CQkJCQlcCisJCQkJCQkJCVwKKyAgICAgICAgX19yZXM7CQkJCQkJCVwKK30pCisKKyNkZWZpbmUgd3JpdGVfcjEwa19wZXJmX2NudGwoY291bnRlcix2YWwpICAgICAgICAgICAgICAgICAgICAgICBcCitkbyB7CQkJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJIm10cHNcdCUwLCAlMSIJCQkJCQlcCisJOgkJCQkJCQlcCisJOiAiciIgKHZhbCksICJpIiAoY291bnRlcikpOwkJCQlcCit9IHdoaWxlICgwKQorCisKKy8qCisgKiBNYWNyb3MgdG8gYWNjZXNzIHRoZSBzeXN0ZW0gY29udHJvbCBjb3Byb2Nlc3NvcgorICovCisKKyNkZWZpbmUgX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKHNvdXJjZSwgc2VsKQkJCQlcCisoeyBpbnQgX19yZXM7CQkJCQkJCQlcCisJaWYgKHNlbCA9PSAwKQkJCQkJCQlcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCQkJIm1mYzBcdCUwLCAiICNzb3VyY2UgIlxuXHQiCQkJXAorCQkJOiAiPXIiIChfX3JlcykpOwkJCQlcCisJZWxzZQkJCQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKKwkJCSIuc2V0XHRtaXBzMzJcblx0IgkJCQlcCisJCQkibWZjMFx0JTAsICIgI3NvdXJjZSAiLCAiICNzZWwgIlxuXHQiCQlcCisJCQkiLnNldFx0bWlwczBcblx0IgkJCQlcCisJCQk6ICI9ciIgKF9fcmVzKSk7CQkJCVwKKwlfX3JlczsJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgX19yZWFkXzY0Yml0X2MwX3JlZ2lzdGVyKHNvdXJjZSwgc2VsKQkJCQlcCisoeyB1bnNpZ25lZCBsb25nIGxvbmcgX19yZXM7CQkJCQkJXAorCWlmIChzaXplb2YodW5zaWduZWQgbG9uZykgPT0gNCkJCQkJCVwKKwkJX19yZXMgPSBfX3JlYWRfNjRiaXRfYzBfc3BsaXQoc291cmNlLCBzZWwpOwkJXAorCWVsc2UgaWYgKHNlbCA9PSAwKQkJCQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJCQkiLnNldFx0bWlwczNcblx0IgkJCQlcCisJCQkiZG1mYzBcdCUwLCAiICNzb3VyY2UgIlxuXHQiCQkJXAorCQkJIi5zZXRcdG1pcHMwIgkJCQkJXAorCQkJOiAiPXIiIChfX3JlcykpOwkJCQlcCisJZWxzZQkJCQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKKwkJCSIuc2V0XHRtaXBzNjRcblx0IgkJCQlcCisJCQkiZG1mYzBcdCUwLCAiICNzb3VyY2UgIiwgIiAjc2VsICJcblx0IgkJXAorCQkJIi5zZXRcdG1pcHMwIgkJCQkJXAorCQkJOiAiPXIiIChfX3JlcykpOwkJCQlcCisJX19yZXM7CQkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIocmVnaXN0ZXIsIHNlbCwgdmFsdWUpCQkJXAorZG8gewkJCQkJCQkJCVwKKwlpZiAoc2VsID09IDApCQkJCQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJCQkibXRjMFx0JXowLCAiICNyZWdpc3RlciAiXG5cdCIJCQlcCisJCQk6IDogIkpyIiAoKHVuc2lnbmVkIGludCkodmFsdWUpKSk7CQlcCisJZWxzZQkJCQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKKwkJCSIuc2V0XHRtaXBzMzJcblx0IgkJCQlcCisJCQkibXRjMFx0JXowLCAiICNyZWdpc3RlciAiLCAiICNzZWwgIlxuXHQiCVwKKwkJCSIuc2V0XHRtaXBzMCIJCQkJCVwKKwkJCTogOiAiSnIiICgodW5zaWduZWQgaW50KSh2YWx1ZSkpKTsJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX193cml0ZV82NGJpdF9jMF9yZWdpc3RlcihyZWdpc3Rlciwgc2VsLCB2YWx1ZSkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmIChzaXplb2YodW5zaWduZWQgbG9uZykgPT0gNCkJCQkJCVwKKwkJX193cml0ZV82NGJpdF9jMF9zcGxpdChyZWdpc3Rlciwgc2VsLCB2YWx1ZSk7CQlcCisJZWxzZSBpZiAoc2VsID09IDApCQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKKwkJCSIuc2V0XHRtaXBzM1xuXHQiCQkJCVwKKwkJCSJkbXRjMFx0JXowLCAiICNyZWdpc3RlciAiXG5cdCIJCQlcCisJCQkiLnNldFx0bWlwczAiCQkJCQlcCisJCQk6IDogIkpyIiAodmFsdWUpKTsJCQkJXAorCWVsc2UJCQkJCQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJCQkiLnNldFx0bWlwczY0XG5cdCIJCQkJXAorCQkJImRtdGMwXHQlejAsICIgI3JlZ2lzdGVyICIsICIgI3NlbCAiXG5cdCIJXAorCQkJIi5zZXRcdG1pcHMwIgkJCQkJXAorCQkJOiA6ICJKciIgKHZhbHVlKSk7CQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX19yZWFkX3Vsb25nX2MwX3JlZ2lzdGVyKHJlZywgc2VsKQkJCQlcCisJKChzaXplb2YodW5zaWduZWQgbG9uZykgPT0gNCkgPwkJCQkJXAorCSh1bnNpZ25lZCBsb25nKSBfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIocmVnLCBzZWwpIDoJCVwKKwkodW5zaWduZWQgbG9uZykgX19yZWFkXzY0Yml0X2MwX3JlZ2lzdGVyKHJlZywgc2VsKSkKKworI2RlZmluZSBfX3dyaXRlX3Vsb25nX2MwX3JlZ2lzdGVyKHJlZywgc2VsLCB2YWwpCQkJXAorZG8gewkJCQkJCQkJCVwKKwlpZiAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpID09IDQpCQkJCQlcCisJCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIocmVnLCBzZWwsIHZhbCk7CQlcCisJZWxzZQkJCQkJCQkJXAorCQlfX3dyaXRlXzY0Yml0X2MwX3JlZ2lzdGVyKHJlZywgc2VsLCB2YWwpOwkJXAorfSB3aGlsZSAoMCkKKworLyoKKyAqIE9uIFJNNzAwMC9STTkwMDAgdGhlc2UgYXJlIHVzZXMgdG8gYWNjZXNzIGNvcDAgc2V0IDEgcmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgX19yZWFkXzMyYml0X2MwX2N0cmxfcmVnaXN0ZXIoc291cmNlKQkJCQlcCisoeyBpbnQgX19yZXM7CQkJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCQkiY2ZjMFx0JTAsICIgI3NvdXJjZSAiXG5cdCIJCQkJXAorCQk6ICI9ciIgKF9fcmVzKSk7CQkJCQlcCisJX19yZXM7CQkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fd3JpdGVfMzJiaXRfYzBfY3RybF9yZWdpc3RlcihyZWdpc3RlciwgdmFsdWUpCQkJXAorZG8gewkJCQkJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJCSJjdGMwXHQlejAsICIgI3JlZ2lzdGVyICJcblx0IgkJCQlcCisJCTogOiAiSnIiICgodW5zaWduZWQgaW50KSh2YWx1ZSkpKTsJCQlcCit9IHdoaWxlICgwKQorCisvKgorICogVGhlc2UgdmVyc2lvbnMgYXJlIG9ubHkgbmVlZGVkIGZvciBzeXN0ZW1zIHdpdGggbW9yZSB0aGFuIDM4IGJpdHMgb2YKKyAqIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UgcnVubmluZyB0aGUgMzItYml0IGtlcm5lbC4gIFRoYXQncyBub25lIGF0bSA6LSkKKyAqLworI2RlZmluZSBfX3JlYWRfNjRiaXRfYzBfc3BsaXQoc291cmNlLCBzZWwpCQkJCVwKKyh7CQkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7CQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CQkJCQkJXAorCQkJCQkJCQkJXAorCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsJCQkJCQlcCisJaWYgKHNlbCA9PSAwKQkJCQkJCQlcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCQkJIi5zZXRcdG1pcHM2NFxuXHQiCQkJCVwKKwkJCSJkbWZjMFx0JU0wLCAiICNzb3VyY2UgIlxuXHQiCQkJXAorCQkJImRzbGxcdCVMMCwgJU0wLCAzMlxuXHQiCQkJXAorCQkJImRzcmxcdCVNMCwgJU0wLCAzMlxuXHQiCQkJXAorCQkJImRzcmxcdCVMMCwgJUwwLCAzMlxuXHQiCQkJXAorCQkJIi5zZXRcdG1pcHMwIgkJCQkJXAorCQkJOiAiPXIiICh2YWwpKTsJCQkJCVwKKwllbHNlCQkJCQkJCQlcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCQkJIi5zZXRcdG1pcHM2NFxuXHQiCQkJCVwKKwkJCSJkbWZjMFx0JU0wLCAiICNzb3VyY2UgIiwgIiAjc2VsICJcblx0IgkJXAorCQkJImRzbGxcdCVMMCwgJU0wLCAzMlxuXHQiCQkJXAorCQkJImRzcmxcdCVNMCwgJU0wLCAzMlxuXHQiCQkJXAorCQkJImRzcmxcdCVMMCwgJUwwLCAzMlxuXHQiCQkJXAorCQkJIi5zZXRcdG1pcHMwIgkJCQkJXAorCQkJOiAiPXIiICh2YWwpKTsJCQkJCVwKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CQkJCQlcCisJCQkJCQkJCQlcCisJdmFsOwkJCQkJCQkJXAorfSkKKworI2RlZmluZSBfX3dyaXRlXzY0Yml0X2MwX3NwbGl0KHNvdXJjZSwgc2VsLCB2YWwpCQkJXAorZG8gewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwkJCQkJCVwKKwkJCQkJCQkJCVwKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CQkJCQkJXAorCWlmIChzZWwgPT0gMCkJCQkJCQkJXAorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKKwkJCSIuc2V0XHRtaXBzNjRcblx0IgkJCQlcCisJCQkiZHNsbFx0JUwwLCAlTDAsIDMyXG5cdCIJCQlcCisJCQkiZHNybFx0JUwwLCAlTDAsIDMyXG5cdCIJCQlcCisJCQkiZHNsbFx0JU0wLCAlTTAsIDMyXG5cdCIJCQlcCisJCQkib3JcdCVMMCwgJUwwLCAlTTBcblx0IgkJCQlcCisJCQkiZG10YzBcdCVMMCwgIiAjc291cmNlICJcblx0IgkJCVwKKwkJCSIuc2V0XHRtaXBzMCIJCQkJCVwKKwkJCTogOiAiciIgKHZhbCkpOwkJCQkJXAorCWVsc2UJCQkJCQkJCVwKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJCQkiLnNldFx0bWlwczY0XG5cdCIJCQkJXAorCQkJImRzbGxcdCVMMCwgJUwwLCAzMlxuXHQiCQkJXAorCQkJImRzcmxcdCVMMCwgJUwwLCAzMlxuXHQiCQkJXAorCQkJImRzbGxcdCVNMCwgJU0wLCAzMlxuXHQiCQkJXAorCQkJIm9yXHQlTDAsICVMMCwgJU0wXG5cdCIJCQkJXAorCQkJImRtdGMwXHQlTDAsICIgI3NvdXJjZSAiLCAiICNzZWwgIlxuXHQiCQlcCisJCQkiLnNldFx0bWlwczAiCQkJCQlcCisJCQk6IDogInIiICh2YWwpKTsJCQkJCVwKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIHJlYWRfYzBfaW5kZXgoKQkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQwLCAwKQorI2RlZmluZSB3cml0ZV9jMF9pbmRleCh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDAsIDAsIHZhbCkKKworI2RlZmluZSByZWFkX2MwX2VudHJ5bG8wKCkJX19yZWFkX3Vsb25nX2MwX3JlZ2lzdGVyKCQyLCAwKQorI2RlZmluZSB3cml0ZV9jMF9lbnRyeWxvMCh2YWwpCV9fd3JpdGVfdWxvbmdfYzBfcmVnaXN0ZXIoJDIsIDAsIHZhbCkKKworI2RlZmluZSByZWFkX2MwX2VudHJ5bG8xKCkJX19yZWFkX3Vsb25nX2MwX3JlZ2lzdGVyKCQzLCAwKQorI2RlZmluZSB3cml0ZV9jMF9lbnRyeWxvMSh2YWwpCV9fd3JpdGVfdWxvbmdfYzBfcmVnaXN0ZXIoJDMsIDAsIHZhbCkKKworI2RlZmluZSByZWFkX2MwX2NvbmYoKQkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQzLCAwKQorI2RlZmluZSB3cml0ZV9jMF9jb25mKHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMywgMCwgdmFsKQorCisjZGVmaW5lIHJlYWRfYzBfY29udGV4dCgpCV9fcmVhZF91bG9uZ19jMF9yZWdpc3RlcigkNCwgMCkKKyNkZWZpbmUgd3JpdGVfYzBfY29udGV4dCh2YWwpCV9fd3JpdGVfdWxvbmdfYzBfcmVnaXN0ZXIoJDQsIDAsIHZhbCkKKworI2RlZmluZSByZWFkX2MwX3BhZ2VtYXNrKCkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQ1LCAwKQorI2RlZmluZSB3cml0ZV9jMF9wYWdlbWFzayh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDUsIDAsIHZhbCkKKworI2RlZmluZSByZWFkX2MwX3dpcmVkKCkJCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkNiwgMCkKKyNkZWZpbmUgd3JpdGVfYzBfd2lyZWQodmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQ2LCAwLCB2YWwpCisKKyNkZWZpbmUgcmVhZF9jMF9pbmZvKCkJCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkNywgMCkKKworI2RlZmluZSByZWFkX2MwX2NhY2hlKCkJCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkNywgMCkJLyogVFgzOXh4ICovCisjZGVmaW5lIHdyaXRlX2MwX2NhY2hlKHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkNywgMCwgdmFsKQorCisjZGVmaW5lIHJlYWRfYzBfYmFkdmFkZHIoKQlfX3JlYWRfdWxvbmdfYzBfcmVnaXN0ZXIoJDgsIDApCisjZGVmaW5lIHdyaXRlX2MwX2JhZHZhZGRyKHZhbCkJX193cml0ZV91bG9uZ19jMF9yZWdpc3RlcigkOCwgMCwgdmFsKQorCisjZGVmaW5lIHJlYWRfYzBfY291bnQoKQkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQ5LCAwKQorI2RlZmluZSB3cml0ZV9jMF9jb3VudCh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDksIDAsIHZhbCkKKworI2RlZmluZSByZWFkX2MwX2NvdW50MigpCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkOSwgNikgLyogcG54ODU1MCAqLworI2RlZmluZSB3cml0ZV9jMF9jb3VudDIodmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQ5LCA2LCB2YWwpCisKKyNkZWZpbmUgcmVhZF9jMF9jb3VudDMoKQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDksIDcpIC8qIHBueDg1NTAgKi8KKyNkZWZpbmUgd3JpdGVfYzBfY291bnQzKHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkOSwgNywgdmFsKQorCisjZGVmaW5lIHJlYWRfYzBfZW50cnloaSgpCV9fcmVhZF91bG9uZ19jMF9yZWdpc3RlcigkMTAsIDApCisjZGVmaW5lIHdyaXRlX2MwX2VudHJ5aGkodmFsKQlfX3dyaXRlX3Vsb25nX2MwX3JlZ2lzdGVyKCQxMCwgMCwgdmFsKQorCisjZGVmaW5lIHJlYWRfYzBfY29tcGFyZSgpCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMTEsIDApCisjZGVmaW5lIHdyaXRlX2MwX2NvbXBhcmUodmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQxMSwgMCwgdmFsKQorCisjZGVmaW5lIHJlYWRfYzBfY29tcGFyZTIoKQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDExLCA2KSAvKiBwbng4NTUwICovCisjZGVmaW5lIHdyaXRlX2MwX2NvbXBhcmUyKHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMTEsIDYsIHZhbCkKKworI2RlZmluZSByZWFkX2MwX2NvbXBhcmUzKCkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQxMSwgNykgLyogcG54ODU1MCAqLworI2RlZmluZSB3cml0ZV9jMF9jb21wYXJlMyh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDExLCA3LCB2YWwpCisKKyNkZWZpbmUgcmVhZF9jMF9zdGF0dXMoKQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDEyLCAwKQorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKyNkZWZpbmUgd3JpdGVfYzBfc3RhdHVzKHZhbCkJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDEyLCAwLCB2YWwpOwkJCQlcCisJX19laGIoKTsJCQkJCQkJXAorfSB3aGlsZSAoMCkKKyNlbHNlCisvKgorICogTGVnYWN5IG5vbi1TTVRDIGNvZGUsIHdoaWNoIG1heSBiZSBoYXphcmRvdXMKKyAqIGJ1dCB3aGljaCBtaWdodCBub3Qgc3VwcG9ydCBFSEIKKyAqLworI2RlZmluZSB3cml0ZV9jMF9zdGF0dXModmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQxMiwgMCwgdmFsKQorI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KKworI2RlZmluZSByZWFkX2MwX2NhdXNlKCkJCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMTMsIDApCisjZGVmaW5lIHdyaXRlX2MwX2NhdXNlKHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMTMsIDAsIHZhbCkKKworI2RlZmluZSByZWFkX2MwX2VwYygpCQlfX3JlYWRfdWxvbmdfYzBfcmVnaXN0ZXIoJDE0LCAwKQorI2RlZmluZSB3cml0ZV9jMF9lcGModmFsKQlfX3dyaXRlX3Vsb25nX2MwX3JlZ2lzdGVyKCQxNCwgMCwgdmFsKQorCisjZGVmaW5lIHJlYWRfYzBfcHJpZCgpCQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDE1LCAwKQorCisjZGVmaW5lIHJlYWRfYzBfY29uZmlnKCkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQxNiwgMCkKKyNkZWZpbmUgcmVhZF9jMF9jb25maWcxKCkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQxNiwgMSkKKyNkZWZpbmUgcmVhZF9jMF9jb25maWcyKCkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQxNiwgMikKKyNkZWZpbmUgcmVhZF9jMF9jb25maWczKCkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQxNiwgMykKKyNkZWZpbmUgcmVhZF9jMF9jb25maWc0KCkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQxNiwgNCkKKyNkZWZpbmUgcmVhZF9jMF9jb25maWc1KCkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQxNiwgNSkKKyNkZWZpbmUgcmVhZF9jMF9jb25maWc2KCkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQxNiwgNikKKyNkZWZpbmUgcmVhZF9jMF9jb25maWc3KCkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQxNiwgNykKKyNkZWZpbmUgd3JpdGVfYzBfY29uZmlnKHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMTYsIDAsIHZhbCkKKyNkZWZpbmUgd3JpdGVfYzBfY29uZmlnMSh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDE2LCAxLCB2YWwpCisjZGVmaW5lIHdyaXRlX2MwX2NvbmZpZzIodmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQxNiwgMiwgdmFsKQorI2RlZmluZSB3cml0ZV9jMF9jb25maWczKHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMTYsIDMsIHZhbCkKKyNkZWZpbmUgd3JpdGVfYzBfY29uZmlnNCh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDE2LCA0LCB2YWwpCisjZGVmaW5lIHdyaXRlX2MwX2NvbmZpZzUodmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQxNiwgNSwgdmFsKQorI2RlZmluZSB3cml0ZV9jMF9jb25maWc2KHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMTYsIDYsIHZhbCkKKyNkZWZpbmUgd3JpdGVfYzBfY29uZmlnNyh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDE2LCA3LCB2YWwpCisKKy8qCisgKiBUaGUgV2F0Y2hMbyByZWdpc3Rlci4gIFRoZXJlIG1heSBiZSB1cHRvIDggb2YgdGhlbS4KKyAqLworI2RlZmluZSByZWFkX2MwX3dhdGNobG8wKCkJX19yZWFkX3Vsb25nX2MwX3JlZ2lzdGVyKCQxOCwgMCkKKyNkZWZpbmUgcmVhZF9jMF93YXRjaGxvMSgpCV9fcmVhZF91bG9uZ19jMF9yZWdpc3RlcigkMTgsIDEpCisjZGVmaW5lIHJlYWRfYzBfd2F0Y2hsbzIoKQlfX3JlYWRfdWxvbmdfYzBfcmVnaXN0ZXIoJDE4LCAyKQorI2RlZmluZSByZWFkX2MwX3dhdGNobG8zKCkJX19yZWFkX3Vsb25nX2MwX3JlZ2lzdGVyKCQxOCwgMykKKyNkZWZpbmUgcmVhZF9jMF93YXRjaGxvNCgpCV9fcmVhZF91bG9uZ19jMF9yZWdpc3RlcigkMTgsIDQpCisjZGVmaW5lIHJlYWRfYzBfd2F0Y2hsbzUoKQlfX3JlYWRfdWxvbmdfYzBfcmVnaXN0ZXIoJDE4LCA1KQorI2RlZmluZSByZWFkX2MwX3dhdGNobG82KCkJX19yZWFkX3Vsb25nX2MwX3JlZ2lzdGVyKCQxOCwgNikKKyNkZWZpbmUgcmVhZF9jMF93YXRjaGxvNygpCV9fcmVhZF91bG9uZ19jMF9yZWdpc3RlcigkMTgsIDcpCisjZGVmaW5lIHdyaXRlX2MwX3dhdGNobG8wKHZhbCkJX193cml0ZV91bG9uZ19jMF9yZWdpc3RlcigkMTgsIDAsIHZhbCkKKyNkZWZpbmUgd3JpdGVfYzBfd2F0Y2hsbzEodmFsKQlfX3dyaXRlX3Vsb25nX2MwX3JlZ2lzdGVyKCQxOCwgMSwgdmFsKQorI2RlZmluZSB3cml0ZV9jMF93YXRjaGxvMih2YWwpCV9fd3JpdGVfdWxvbmdfYzBfcmVnaXN0ZXIoJDE4LCAyLCB2YWwpCisjZGVmaW5lIHdyaXRlX2MwX3dhdGNobG8zKHZhbCkJX193cml0ZV91bG9uZ19jMF9yZWdpc3RlcigkMTgsIDMsIHZhbCkKKyNkZWZpbmUgd3JpdGVfYzBfd2F0Y2hsbzQodmFsKQlfX3dyaXRlX3Vsb25nX2MwX3JlZ2lzdGVyKCQxOCwgNCwgdmFsKQorI2RlZmluZSB3cml0ZV9jMF93YXRjaGxvNSh2YWwpCV9fd3JpdGVfdWxvbmdfYzBfcmVnaXN0ZXIoJDE4LCA1LCB2YWwpCisjZGVmaW5lIHdyaXRlX2MwX3dhdGNobG82KHZhbCkJX193cml0ZV91bG9uZ19jMF9yZWdpc3RlcigkMTgsIDYsIHZhbCkKKyNkZWZpbmUgd3JpdGVfYzBfd2F0Y2hsbzcodmFsKQlfX3dyaXRlX3Vsb25nX2MwX3JlZ2lzdGVyKCQxOCwgNywgdmFsKQorCisvKgorICogVGhlIFdhdGNoSGkgcmVnaXN0ZXIuICBUaGVyZSBtYXkgYmUgdXB0byA4IG9mIHRoZW0uCisgKi8KKyNkZWZpbmUgcmVhZF9jMF93YXRjaGhpMCgpCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMTksIDApCisjZGVmaW5lIHJlYWRfYzBfd2F0Y2hoaTEoKQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDE5LCAxKQorI2RlZmluZSByZWFkX2MwX3dhdGNoaGkyKCkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQxOSwgMikKKyNkZWZpbmUgcmVhZF9jMF93YXRjaGhpMygpCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMTksIDMpCisjZGVmaW5lIHJlYWRfYzBfd2F0Y2hoaTQoKQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDE5LCA0KQorI2RlZmluZSByZWFkX2MwX3dhdGNoaGk1KCkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQxOSwgNSkKKyNkZWZpbmUgcmVhZF9jMF93YXRjaGhpNigpCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMTksIDYpCisjZGVmaW5lIHJlYWRfYzBfd2F0Y2hoaTcoKQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDE5LCA3KQorCisjZGVmaW5lIHdyaXRlX2MwX3dhdGNoaGkwKHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMTksIDAsIHZhbCkKKyNkZWZpbmUgd3JpdGVfYzBfd2F0Y2hoaTEodmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQxOSwgMSwgdmFsKQorI2RlZmluZSB3cml0ZV9jMF93YXRjaGhpMih2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDE5LCAyLCB2YWwpCisjZGVmaW5lIHdyaXRlX2MwX3dhdGNoaGkzKHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMTksIDMsIHZhbCkKKyNkZWZpbmUgd3JpdGVfYzBfd2F0Y2hoaTQodmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQxOSwgNCwgdmFsKQorI2RlZmluZSB3cml0ZV9jMF93YXRjaGhpNSh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDE5LCA1LCB2YWwpCisjZGVmaW5lIHdyaXRlX2MwX3dhdGNoaGk2KHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMTksIDYsIHZhbCkKKyNkZWZpbmUgd3JpdGVfYzBfd2F0Y2hoaTcodmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQxOSwgNywgdmFsKQorCisjZGVmaW5lIHJlYWRfYzBfeGNvbnRleHQoKQlfX3JlYWRfdWxvbmdfYzBfcmVnaXN0ZXIoJDIwLCAwKQorI2RlZmluZSB3cml0ZV9jMF94Y29udGV4dCh2YWwpCV9fd3JpdGVfdWxvbmdfYzBfcmVnaXN0ZXIoJDIwLCAwLCB2YWwpCisKKyNkZWZpbmUgcmVhZF9jMF9pbnRjb250cm9sKCkJX19yZWFkXzMyYml0X2MwX2N0cmxfcmVnaXN0ZXIoJDIwKQorI2RlZmluZSB3cml0ZV9jMF9pbnRjb250cm9sKHZhbCkgX193cml0ZV8zMmJpdF9jMF9jdHJsX3JlZ2lzdGVyKCQyMCwgdmFsKQorCisjZGVmaW5lIHJlYWRfYzBfZnJhbWVtYXNrKCkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQyMSwgMCkKKyNkZWZpbmUgd3JpdGVfYzBfZnJhbWVtYXNrKHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMjEsIDAsIHZhbCkKKworLyogUk05MDAwIFBlcmZDb250cm9sIHBlcmZvcm1hbmNlIGNvdW50ZXIgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSByZWFkX2MwX3BlcmZjb250cm9sKCkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQyMiwgMCkKKyNkZWZpbmUgd3JpdGVfYzBfcGVyZmNvbnRyb2wodmFsKSBfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQyMiwgMCwgdmFsKQorCisjZGVmaW5lIHJlYWRfYzBfZGlhZygpCQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDIyLCAwKQorI2RlZmluZSB3cml0ZV9jMF9kaWFnKHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMjIsIDAsIHZhbCkKKworI2RlZmluZSByZWFkX2MwX2RpYWcxKCkJCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMjIsIDEpCisjZGVmaW5lIHdyaXRlX2MwX2RpYWcxKHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMjIsIDEsIHZhbCkKKworI2RlZmluZSByZWFkX2MwX2RpYWcyKCkJCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMjIsIDIpCisjZGVmaW5lIHdyaXRlX2MwX2RpYWcyKHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMjIsIDIsIHZhbCkKKworI2RlZmluZSByZWFkX2MwX2RpYWczKCkJCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMjIsIDMpCisjZGVmaW5lIHdyaXRlX2MwX2RpYWczKHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMjIsIDMsIHZhbCkKKworI2RlZmluZSByZWFkX2MwX2RpYWc0KCkJCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMjIsIDQpCisjZGVmaW5lIHdyaXRlX2MwX2RpYWc0KHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMjIsIDQsIHZhbCkKKworI2RlZmluZSByZWFkX2MwX2RpYWc1KCkJCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMjIsIDUpCisjZGVmaW5lIHdyaXRlX2MwX2RpYWc1KHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMjIsIDUsIHZhbCkKKworI2RlZmluZSByZWFkX2MwX2RlYnVnKCkJCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMjMsIDApCisjZGVmaW5lIHdyaXRlX2MwX2RlYnVnKHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMjMsIDAsIHZhbCkKKworI2RlZmluZSByZWFkX2MwX2RlcGMoKQkJX19yZWFkX3Vsb25nX2MwX3JlZ2lzdGVyKCQyNCwgMCkKKyNkZWZpbmUgd3JpdGVfYzBfZGVwYyh2YWwpCV9fd3JpdGVfdWxvbmdfYzBfcmVnaXN0ZXIoJDI0LCAwLCB2YWwpCisKKy8qCisgKiBNSVBTMzIgLyBNSVBTNjQgcGVyZm9ybWFuY2UgY291bnRlcnMKKyAqLworI2RlZmluZSByZWFkX2MwX3BlcmZjdHJsMCgpCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMjUsIDApCisjZGVmaW5lIHdyaXRlX2MwX3BlcmZjdHJsMCh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDI1LCAwLCB2YWwpCisjZGVmaW5lIHJlYWRfYzBfcGVyZmNudHIwKCkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQyNSwgMSkKKyNkZWZpbmUgd3JpdGVfYzBfcGVyZmNudHIwKHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMjUsIDEsIHZhbCkKKyNkZWZpbmUgcmVhZF9jMF9wZXJmY3RybDEoKQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDI1LCAyKQorI2RlZmluZSB3cml0ZV9jMF9wZXJmY3RybDEodmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQyNSwgMiwgdmFsKQorI2RlZmluZSByZWFkX2MwX3BlcmZjbnRyMSgpCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMjUsIDMpCisjZGVmaW5lIHdyaXRlX2MwX3BlcmZjbnRyMSh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDI1LCAzLCB2YWwpCisjZGVmaW5lIHJlYWRfYzBfcGVyZmN0cmwyKCkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQyNSwgNCkKKyNkZWZpbmUgd3JpdGVfYzBfcGVyZmN0cmwyKHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMjUsIDQsIHZhbCkKKyNkZWZpbmUgcmVhZF9jMF9wZXJmY250cjIoKQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDI1LCA1KQorI2RlZmluZSB3cml0ZV9jMF9wZXJmY250cjIodmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQyNSwgNSwgdmFsKQorI2RlZmluZSByZWFkX2MwX3BlcmZjdHJsMygpCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMjUsIDYpCisjZGVmaW5lIHdyaXRlX2MwX3BlcmZjdHJsMyh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDI1LCA2LCB2YWwpCisjZGVmaW5lIHJlYWRfYzBfcGVyZmNudHIzKCkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQyNSwgNykKKyNkZWZpbmUgd3JpdGVfYzBfcGVyZmNudHIzKHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMjUsIDcsIHZhbCkKKworLyogUk05MDAwIFBlcmZDb3VudCBwZXJmb3JtYW5jZSBjb3VudGVyIHJlZ2lzdGVyICovCisjZGVmaW5lIHJlYWRfYzBfcGVyZmNvdW50KCkJX19yZWFkXzY0Yml0X2MwX3JlZ2lzdGVyKCQyNSwgMCkKKyNkZWZpbmUgd3JpdGVfYzBfcGVyZmNvdW50KHZhbCkJX193cml0ZV82NGJpdF9jMF9yZWdpc3RlcigkMjUsIDAsIHZhbCkKKworI2RlZmluZSByZWFkX2MwX2VjYygpCQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDI2LCAwKQorI2RlZmluZSB3cml0ZV9jMF9lY2ModmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQyNiwgMCwgdmFsKQorCisjZGVmaW5lIHJlYWRfYzBfZGVycmFkZHIwKCkJX19yZWFkX3Vsb25nX2MwX3JlZ2lzdGVyKCQyNiwgMSkKKyNkZWZpbmUgd3JpdGVfYzBfZGVycmFkZHIwKHZhbCkJX193cml0ZV91bG9uZ19jMF9yZWdpc3RlcigkMjYsIDEsIHZhbCkKKworI2RlZmluZSByZWFkX2MwX2NhY2hlZXJyKCkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQyNywgMCkKKworI2RlZmluZSByZWFkX2MwX2RlcnJhZGRyMSgpCV9fcmVhZF91bG9uZ19jMF9yZWdpc3RlcigkMjcsIDEpCisjZGVmaW5lIHdyaXRlX2MwX2RlcnJhZGRyMSh2YWwpCV9fd3JpdGVfdWxvbmdfYzBfcmVnaXN0ZXIoJDI3LCAxLCB2YWwpCisKKyNkZWZpbmUgcmVhZF9jMF90YWdsbygpCQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDI4LCAwKQorI2RlZmluZSB3cml0ZV9jMF90YWdsbyh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDI4LCAwLCB2YWwpCisKKyNkZWZpbmUgcmVhZF9jMF9kdGFnbG8oKQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDI4LCAyKQorI2RlZmluZSB3cml0ZV9jMF9kdGFnbG8odmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQyOCwgMiwgdmFsKQorCisjZGVmaW5lIHJlYWRfYzBfdGFnaGkoKQkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQyOSwgMCkKKyNkZWZpbmUgd3JpdGVfYzBfdGFnaGkodmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQyOSwgMCwgdmFsKQorCisjZGVmaW5lIHJlYWRfYzBfZXJyb3JlcGMoKQlfX3JlYWRfdWxvbmdfYzBfcmVnaXN0ZXIoJDMwLCAwKQorI2RlZmluZSB3cml0ZV9jMF9lcnJvcmVwYyh2YWwpCV9fd3JpdGVfdWxvbmdfYzBfcmVnaXN0ZXIoJDMwLCAwLCB2YWwpCisKKy8qIE1JUFNSMiAqLworI2RlZmluZSByZWFkX2MwX2h3cmVuYSgpCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkNywwKQorI2RlZmluZSB3cml0ZV9jMF9od3JlbmEodmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQ3LCAwLCB2YWwpCisKKyNkZWZpbmUgcmVhZF9jMF9pbnRjdGwoKQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDEyLCAxKQorI2RlZmluZSB3cml0ZV9jMF9pbnRjdGwodmFsKQlfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQxMiwgMSwgdmFsKQorCisjZGVmaW5lIHJlYWRfYzBfc3JzY3RsKCkJX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQxMiwgMikKKyNkZWZpbmUgd3JpdGVfYzBfc3JzY3RsKHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMTIsIDIsIHZhbCkKKworI2RlZmluZSByZWFkX2MwX3Nyc21hcCgpCV9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMTIsIDMpCisjZGVmaW5lIHdyaXRlX2MwX3Nyc21hcCh2YWwpCV9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDEyLCAzLCB2YWwpCisKKyNkZWZpbmUgcmVhZF9jMF9lYmFzZSgpCQlfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDE1LDEpCisjZGVmaW5lIHdyaXRlX2MwX2ViYXNlKHZhbCkJX193cml0ZV8zMmJpdF9jMF9yZWdpc3RlcigkMTUsIDEsIHZhbCkKKworLyoKKyAqIE1hY3JvcyB0byBhY2Nlc3MgdGhlIGZsb2F0aW5nIHBvaW50IGNvcHJvY2Vzc29yIGNvbnRyb2wgcmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgcmVhZF8zMmJpdF9jcDFfcmVnaXN0ZXIoc291cmNlKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisoeyBpbnQgX19yZXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCV9fYXNtX18gX192b2xhdGlsZV9fKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSIuc2V0XHRwdXNoXG5cdCIJCQkJCVwKKwkiLnNldFx0cmVvcmRlclxuXHQiCQkJCQlcCisgICAgICAgICJjZmMxXHQlMCwiU1RSKHNvdXJjZSkiXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSIuc2V0XHRwb3AiCQkJCQkJXAorICAgICAgICA6ICI9ciIgKF9fcmVzKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX19yZXM7fSkKKworI2RlZmluZSByZGRzcChtYXNrKQkJCQkJCQlcCisoewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgX19yZXM7CQkJCQkJXAorCQkJCQkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKKwkiCS5zZXQJcHVzaAkJCQlcbiIJCVwKKwkiCS5zZXQJbm9hdAkJCQlcbiIJCVwKKwkiCSMgcmRkc3AgJDEsICV4MQkJCQlcbiIJCVwKKwkiCS53b3JkCTB4N2MwMDBjYjggfCAoJXgxIDw8IDE2KQlcbiIJCVwKKwkiCW1vdmUJJTAsICQxCQkJCVxuIgkJXAorCSIJLnNldAlwb3AJCQkJXG4iCQlcCisJOiAiPXIiIChfX3JlcykJCQkJCQkJXAorCTogImkiIChtYXNrKSk7CQkJCQkJCVwKKwlfX3JlczsJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgd3Jkc3AodmFsLCBtYXNrKQkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCSIJLnNldAlwdXNoCQkJCQlcbiIJXAorCSIJLnNldAlub2F0CQkJCQlcbiIJXAorCSIJbW92ZQkkMSwgJTAJCQkJCVxuIglcCisJIgkjIHdyZHNwICQxLCAleDEJCQkJCVxuIglcCisJIgkud29yZAkweDdjMjAwNGY4IHwgKCV4MSA8PCAxMSkJCVxuIglcCisJIgkuc2V0CXBvcAkJCQkJXG4iCVwKKyAgICAgICAgOgkJCQkJCQkJXAorCTogInIiICh2YWwpLCAiaSIgKG1hc2spKTsJCQkJCVwKK30gd2hpbGUgKDApCisKKyNpZiAwCS8qIE5lZWQgRFNQIEFTRSBjYXBhYmxlIGFzc2VtYmxlciAuLi4gKi8KKyNkZWZpbmUgbWZsbzAoKSAoeyBsb25nIG1mbG8wOyBfX2FzbV9fKCJtZmxvICUwLCAkYWMwIiA6ICI9ciIgKG1mbG8wKSk7IG1mbG8wO30pCisjZGVmaW5lIG1mbG8xKCkgKHsgbG9uZyBtZmxvMTsgX19hc21fXygibWZsbyAlMCwgJGFjMSIgOiAiPXIiIChtZmxvMSkpOyBtZmxvMTt9KQorI2RlZmluZSBtZmxvMigpICh7IGxvbmcgbWZsbzI7IF9fYXNtX18oIm1mbG8gJTAsICRhYzIiIDogIj1yIiAobWZsbzIpKTsgbWZsbzI7fSkKKyNkZWZpbmUgbWZsbzMoKSAoeyBsb25nIG1mbG8zOyBfX2FzbV9fKCJtZmxvICUwLCAkYWMzIiA6ICI9ciIgKG1mbG8zKSk7IG1mbG8zO30pCisKKyNkZWZpbmUgbWZoaTAoKSAoeyBsb25nIG1maGkwOyBfX2FzbV9fKCJtZmhpICUwLCAkYWMwIiA6ICI9ciIgKG1maGkwKSk7IG1maGkwO30pCisjZGVmaW5lIG1maGkxKCkgKHsgbG9uZyBtZmhpMTsgX19hc21fXygibWZoaSAlMCwgJGFjMSIgOiAiPXIiIChtZmhpMSkpOyBtZmhpMTt9KQorI2RlZmluZSBtZmhpMigpICh7IGxvbmcgbWZoaTI7IF9fYXNtX18oIm1maGkgJTAsICRhYzIiIDogIj1yIiAobWZoaTIpKTsgbWZoaTI7fSkKKyNkZWZpbmUgbWZoaTMoKSAoeyBsb25nIG1maGkzOyBfX2FzbV9fKCJtZmhpICUwLCAkYWMzIiA6ICI9ciIgKG1maGkzKSk7IG1maGkzO30pCisKKyNkZWZpbmUgbXRsbzAoeCkgX19hc21fXygibXRsbyAlMCwgJGFjMCIgOjoiciIgKHgpKQorI2RlZmluZSBtdGxvMSh4KSBfX2FzbV9fKCJtdGxvICUwLCAkYWMxIiA6OiJyIiAoeCkpCisjZGVmaW5lIG10bG8yKHgpIF9fYXNtX18oIm10bG8gJTAsICRhYzIiIDo6InIiICh4KSkKKyNkZWZpbmUgbXRsbzMoeCkgX19hc21fXygibXRsbyAlMCwgJGFjMyIgOjoiciIgKHgpKQorCisjZGVmaW5lIG10aGkwKHgpIF9fYXNtX18oIm10aGkgJTAsICRhYzAiIDo6InIiICh4KSkKKyNkZWZpbmUgbXRoaTEoeCkgX19hc21fXygibXRoaSAlMCwgJGFjMSIgOjoiciIgKHgpKQorI2RlZmluZSBtdGhpMih4KSBfX2FzbV9fKCJtdGhpICUwLCAkYWMyIiA6OiJyIiAoeCkpCisjZGVmaW5lIG10aGkzKHgpIF9fYXNtX18oIm10aGkgJTAsICRhYzMiIDo6InIiICh4KSkKKworI2Vsc2UKKworI2RlZmluZSBtZmhpMCgpCQkJCQkJCQlcCisoewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fdHJlZzsJCQkJCQlcCisJCQkJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCSIJLnNldAlwdXNoCQkJXG4iCQkJXAorCSIJLnNldAlub2F0CQkJXG4iCQkJXAorCSIJIyBtZmhpCSUwLCAkYWMwCQlcbiIJCQlcCisJIgkud29yZAkweDAwMDAwODEwCQlcbiIJCQlcCisJIgltb3ZlCSUwLCAkMQkJCVxuIgkJCVwKKwkiCS5zZXQJcG9wCQkJXG4iCQkJXAorCTogIj1yIiAoX190cmVnKSk7CQkJCQkJXAorCV9fdHJlZzsJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgbWZoaTEoKQkJCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBfX3RyZWc7CQkJCQkJXAorCQkJCQkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKKwkiCS5zZXQJcHVzaAkJCVxuIgkJCVwKKwkiCS5zZXQJbm9hdAkJCVxuIgkJCVwKKwkiCSMgbWZoaQklMCwgJGFjMQkJXG4iCQkJXAorCSIJLndvcmQJMHgwMDIwMDgxMAkJXG4iCQkJXAorCSIJbW92ZQklMCwgJDEJCQlcbiIJCQlcCisJIgkuc2V0CXBvcAkJCVxuIgkJCVwKKwk6ICI9ciIgKF9fdHJlZykpOwkJCQkJCVwKKwlfX3RyZWc7CQkJCQkJCQlcCit9KQorCisjZGVmaW5lIG1maGkyKCkJCQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgX190cmVnOwkJCQkJCVwKKwkJCQkJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJIgkuc2V0CXB1c2gJCQlcbiIJCQlcCisJIgkuc2V0CW5vYXQJCQlcbiIJCQlcCisJIgkjIG1maGkJJTAsICRhYzIJCVxuIgkJCVwKKwkiCS53b3JkCTB4MDA0MDA4MTAJCVxuIgkJCVwKKwkiCW1vdmUJJTAsICQxCQkJXG4iCQkJXAorCSIJLnNldAlwb3AJCQlcbiIJCQlcCisJOiAiPXIiIChfX3RyZWcpKTsJCQkJCQlcCisJX190cmVnOwkJCQkJCQkJXAorfSkKKworI2RlZmluZSBtZmhpMygpCQkJCQkJCQlcCisoewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fdHJlZzsJCQkJCQlcCisJCQkJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCSIJLnNldAlwdXNoCQkJXG4iCQkJXAorCSIJLnNldAlub2F0CQkJXG4iCQkJXAorCSIJIyBtZmhpCSUwLCAkYWMzCQlcbiIJCQlcCisJIgkud29yZAkweDAwNjAwODEwCQlcbiIJCQlcCisJIgltb3ZlCSUwLCAkMQkJCVxuIgkJCVwKKwkiCS5zZXQJcG9wCQkJXG4iCQkJXAorCTogIj1yIiAoX190cmVnKSk7CQkJCQkJXAorCV9fdHJlZzsJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgbWZsbzAoKQkJCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBfX3RyZWc7CQkJCQkJXAorCQkJCQkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKKwkiCS5zZXQJcHVzaAkJCVxuIgkJCVwKKwkiCS5zZXQJbm9hdAkJCVxuIgkJCVwKKwkiCSMgbWZsbwklMCwgJGFjMAkJXG4iCQkJXAorCSIJLndvcmQJMHgwMDAwMDgxMgkJXG4iCQkJXAorCSIJbW92ZQklMCwgJDEJCQlcbiIJCQlcCisJIgkuc2V0CXBvcAkJCVxuIgkJCVwKKwk6ICI9ciIgKF9fdHJlZykpOwkJCQkJCVwKKwlfX3RyZWc7CQkJCQkJCQlcCit9KQorCisjZGVmaW5lIG1mbG8xKCkJCQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgX190cmVnOwkJCQkJCVwKKwkJCQkJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCisJIgkuc2V0CXB1c2gJCQlcbiIJCQlcCisJIgkuc2V0CW5vYXQJCQlcbiIJCQlcCisJIgkjIG1mbG8JJTAsICRhYzEJCVxuIgkJCVwKKwkiCS53b3JkCTB4MDAyMDA4MTIJCVxuIgkJCVwKKwkiCW1vdmUJJTAsICQxCQkJXG4iCQkJXAorCSIJLnNldAlwb3AJCQlcbiIJCQlcCisJOiAiPXIiIChfX3RyZWcpKTsJCQkJCQlcCisJX190cmVnOwkJCQkJCQkJXAorfSkKKworI2RlZmluZSBtZmxvMigpCQkJCQkJCQlcCisoewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fdHJlZzsJCQkJCQlcCisJCQkJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCSIJLnNldAlwdXNoCQkJXG4iCQkJXAorCSIJLnNldAlub2F0CQkJXG4iCQkJXAorCSIJIyBtZmxvCSUwLCAkYWMyCQlcbiIJCQlcCisJIgkud29yZAkweDAwNDAwODEyCQlcbiIJCQlcCisJIgltb3ZlCSUwLCAkMQkJCVxuIgkJCVwKKwkiCS5zZXQJcG9wCQkJXG4iCQkJXAorCTogIj1yIiAoX190cmVnKSk7CQkJCQkJXAorCV9fdHJlZzsJCQkJCQkJCVwKK30pCisKKyNkZWZpbmUgbWZsbzMoKQkJCQkJCQkJXAorKHsJCQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBfX3RyZWc7CQkJCQkJXAorCQkJCQkJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKKwkiCS5zZXQJcHVzaAkJCVxuIgkJCVwKKwkiCS5zZXQJbm9hdAkJCVxuIgkJCVwKKwkiCSMgbWZsbwklMCwgJGFjMwkJXG4iCQkJXAorCSIJLndvcmQJMHgwMDYwMDgxMgkJXG4iCQkJXAorCSIJbW92ZQklMCwgJDEJCQlcbiIJCQlcCisJIgkuc2V0CXBvcAkJCVxuIgkJCVwKKwk6ICI9ciIgKF9fdHJlZykpOwkJCQkJCVwKKwlfX3RyZWc7CQkJCQkJCQlcCit9KQorCisjZGVmaW5lIG10aGkwKHgpCQkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCSIJLnNldAlwdXNoCQkJCQlcbiIJXAorCSIJLnNldAlub2F0CQkJCQlcbiIJXAorCSIJbW92ZQkkMSwgJTAJCQkJCVxuIglcCisJIgkjIG10aGkJJDEsICRhYzAJCQkJXG4iCVwKKwkiCS53b3JkCTB4MDAyMDAwMTEJCQkJXG4iCVwKKwkiCS5zZXQJcG9wCQkJCQlcbiIJXAorCToJCQkJCQkJCVwKKwk6ICJyIiAoeCkpOwkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIG10aGkxKHgpCQkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCSIJLnNldAlwdXNoCQkJCQlcbiIJXAorCSIJLnNldAlub2F0CQkJCQlcbiIJXAorCSIJbW92ZQkkMSwgJTAJCQkJCVxuIglcCisJIgkjIG10aGkJJDEsICRhYzEJCQkJXG4iCVwKKwkiCS53b3JkCTB4MDAyMDA4MTEJCQkJXG4iCVwKKwkiCS5zZXQJcG9wCQkJCQlcbiIJXAorCToJCQkJCQkJCVwKKwk6ICJyIiAoeCkpOwkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIG10aGkyKHgpCQkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCSIJLnNldAlwdXNoCQkJCQlcbiIJXAorCSIJLnNldAlub2F0CQkJCQlcbiIJXAorCSIJbW92ZQkkMSwgJTAJCQkJCVxuIglcCisJIgkjIG10aGkJJDEsICRhYzIJCQkJXG4iCVwKKwkiCS53b3JkCTB4MDAyMDEwMTEJCQkJXG4iCVwKKwkiCS5zZXQJcG9wCQkJCQlcbiIJXAorCToJCQkJCQkJCVwKKwk6ICJyIiAoeCkpOwkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIG10aGkzKHgpCQkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCSIJLnNldAlwdXNoCQkJCQlcbiIJXAorCSIJLnNldAlub2F0CQkJCQlcbiIJXAorCSIJbW92ZQkkMSwgJTAJCQkJCVxuIglcCisJIgkjIG10aGkJJDEsICRhYzMJCQkJXG4iCVwKKwkiCS53b3JkCTB4MDAyMDE4MTEJCQkJXG4iCVwKKwkiCS5zZXQJcG9wCQkJCQlcbiIJXAorCToJCQkJCQkJCVwKKwk6ICJyIiAoeCkpOwkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIG10bG8wKHgpCQkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCSIJLnNldAlwdXNoCQkJCQlcbiIJXAorCSIJLnNldAlub2F0CQkJCQlcbiIJXAorCSIJbW92ZQkkMSwgJTAJCQkJCVxuIglcCisJIgkjIG10bG8JJDEsICRhYzAJCQkJXG4iCVwKKwkiCS53b3JkCTB4MDAyMDAwMTMJCQkJXG4iCVwKKwkiCS5zZXQJcG9wCQkJCQlcbiIJXAorCToJCQkJCQkJCVwKKwk6ICJyIiAoeCkpOwkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIG10bG8xKHgpCQkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCSIJLnNldAlwdXNoCQkJCQlcbiIJXAorCSIJLnNldAlub2F0CQkJCQlcbiIJXAorCSIJbW92ZQkkMSwgJTAJCQkJCVxuIglcCisJIgkjIG10bG8JJDEsICRhYzEJCQkJXG4iCVwKKwkiCS53b3JkCTB4MDAyMDA4MTMJCQkJXG4iCVwKKwkiCS5zZXQJcG9wCQkJCQlcbiIJXAorCToJCQkJCQkJCVwKKwk6ICJyIiAoeCkpOwkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIG10bG8yKHgpCQkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCSIJLnNldAlwdXNoCQkJCQlcbiIJXAorCSIJLnNldAlub2F0CQkJCQlcbiIJXAorCSIJbW92ZQkkMSwgJTAJCQkJCVxuIglcCisJIgkjIG10bG8JJDEsICRhYzIJCQkJXG4iCVwKKwkiCS53b3JkCTB4MDAyMDEwMTMJCQkJXG4iCVwKKwkiCS5zZXQJcG9wCQkJCQlcbiIJXAorCToJCQkJCQkJCVwKKwk6ICJyIiAoeCkpOwkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIG10bG8zKHgpCQkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCSIJLnNldAlwdXNoCQkJCQlcbiIJXAorCSIJLnNldAlub2F0CQkJCQlcbiIJXAorCSIJbW92ZQkkMSwgJTAJCQkJCVxuIglcCisJIgkjIG10bG8JJDEsICRhYzMJCQkJXG4iCVwKKwkiCS53b3JkCTB4MDAyMDE4MTMJCQkJXG4iCVwKKwkiCS5zZXQJcG9wCQkJCQlcbiIJXAorCToJCQkJCQkJCVwKKwk6ICJyIiAoeCkpOwkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZW5kaWYKKworLyoKKyAqIFRMQiBvcGVyYXRpb25zLgorICoKKyAqIEl0IGlzIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIgdG8gdGFrZSBjYXJlIG9mIGFueSBUTEIgaGF6YXJkcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHRsYl9wcm9iZSh2b2lkKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiLnNldCBub3Jlb3JkZXJcblx0IgorCQkidGxicFxuXHQiCisJCSIuc2V0IHJlb3JkZXIiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRsYl9yZWFkKHZvaWQpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSIuc2V0IG5vcmVvcmRlclxuXHQiCisJCSJ0bGJyXG5cdCIKKwkJIi5zZXQgcmVvcmRlciIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGxiX3dyaXRlX2luZGV4ZWQodm9pZCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIi5zZXQgbm9yZW9yZGVyXG5cdCIKKwkJInRsYndpXG5cdCIKKwkJIi5zZXQgcmVvcmRlciIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGxiX3dyaXRlX3JhbmRvbSh2b2lkKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiLnNldCBub3Jlb3JkZXJcblx0IgorCQkidGxid3Jcblx0IgorCQkiLnNldCByZW9yZGVyIik7Cit9CisKKy8qCisgKiBNYW5pcHVsYXRlIGJpdHMgaW4gYSBjMCByZWdpc3Rlci4KKyAqLworI2lmbmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisvKgorICogU01UQyBMaW51eCByZXF1aXJlcyBzaHV0dGluZy1kb3duIG1pY3JvdGhyZWFkIHNjaGVkdWxpbmcKKyAqIGR1cmluZyBDUDAgcmVnaXN0ZXIgcmVhZC1tb2RpZnktd3JpdGUgc2VxdWVuY2VzLgorICovCisjZGVmaW5lIF9fQlVJTERfU0VUX0MwKG5hbWUpCQkJCQlcCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAkJCQkJXAorc2V0X2MwXyMjbmFtZSh1bnNpZ25lZCBpbnQgc2V0KQkJCQkJXAorewkJCQkJCQkJXAorCXVuc2lnbmVkIGludCByZXM7CQkJCQlcCisJCQkJCQkJCVwKKwlyZXMgPSByZWFkX2MwXyMjbmFtZSgpOwkJCQkJXAorCXJlcyB8PSBzZXQ7CQkJCQkJXAorCXdyaXRlX2MwXyMjbmFtZShyZXMpOwkJCQkJXAorCQkJCQkJCQlcCisJcmV0dXJuIHJlczsJCQkJCQlcCit9CQkJCQkJCQlcCisJCQkJCQkJCVwKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CQkJCQlcCitjbGVhcl9jMF8jI25hbWUodW5zaWduZWQgaW50IGNsZWFyKQkJCQlcCit7CQkJCQkJCQlcCisJdW5zaWduZWQgaW50IHJlczsJCQkJCVwKKwkJCQkJCQkJXAorCXJlcyA9IHJlYWRfYzBfIyNuYW1lKCk7CQkJCQlcCisJcmVzICY9IH5jbGVhcjsJCQkJCQlcCisJd3JpdGVfYzBfIyNuYW1lKHJlcyk7CQkJCQlcCisJCQkJCQkJCVwKKwlyZXR1cm4gcmVzOwkJCQkJCVwKK30JCQkJCQkJCVwKKwkJCQkJCQkJXAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQJCQkJCVwKK2NoYW5nZV9jMF8jI25hbWUodW5zaWduZWQgaW50IGNoYW5nZSwgdW5zaWduZWQgaW50IG5ldykJCVwKK3sJCQkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgcmVzOwkJCQkJXAorCQkJCQkJCQlcCisJcmVzID0gcmVhZF9jMF8jI25hbWUoKTsJCQkJCVwKKwlyZXMgJj0gfmNoYW5nZTsJCQkJCQlcCisJcmVzIHw9IChuZXcgJiBjaGFuZ2UpOwkJCQkJXAorCXdyaXRlX2MwXyMjbmFtZShyZXMpOwkJCQkJXAorCQkJCQkJCQlcCisJcmV0dXJuIHJlczsJCQkJCQlcCit9CisKKyNlbHNlIC8qIFNNVEMgdmVyc2lvbnMgdGhhdCBtYW5hZ2UgTVQgc2NoZWR1bGluZyAqLworCisjaW5jbHVkZSA8bGludXgvaXJxZmxhZ3MuaD4KKworLyoKKyAqIFRoaXMgaXMgYSBkdXBsaWNhdGUgb2YgZG10KCkgaW4gbWlwc210cmVncy5oIHRvIGF2b2lkIHByb2JsZW1zIHdpdGgKKyAqIGhlYWRlciBmaWxlIHJlY3Vyc2lvbi4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19kbXQodm9pZCkKK3sKKwlpbnQgcmVzOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJIgkuc2V0CXB1c2gJCQkJCQlcbiIKKwkiCS5zZXQJbWlwczMycjIJCQkJCVxuIgorCSIJLnNldAlub2F0CQkJCQkJXG4iCisJIgkud29yZAkweDQxNjEwQkMxCQkJIyBkbXQgJDEJXG4iCisJIgllaGIJCQkJCQkJXG4iCisJIgltb3ZlCSUwLCAkMQkJCQkJCVxuIgorCSIJLnNldAlwb3AJCQkJCQlcbiIKKwk6ICI9ciIgKHJlcykpOworCisJaW5zdHJ1Y3Rpb25faGF6YXJkKCk7CisKKwlyZXR1cm4gcmVzOworfQorCisjZGVmaW5lIF9fVlBFQ09OVFJPTF9URV9TSElGVAkxNQorI2RlZmluZSBfX1ZQRUNPTlRST0xfVEUJCSgxVUwgPDwgX19WUEVDT05UUk9MX1RFX1NISUZUKQorCisjZGVmaW5lIF9fRU1UX0VOQUJMRQkJX19WUEVDT05UUk9MX1RFCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2VtdCh1bnNpZ25lZCBpbnQgcHJldmlvdXMpCit7CisJaWYgKChwcmV2aW91cyAmIF9fRU1UX0VOQUJMRSkpCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiCS5zZXQJbWlwczMycjIJCQkJXG4iCisJCSIJLndvcmQJMHg0MTYwMGJlMQkJIyBlbXQJCVxuIgorCQkiCWVoYgkJCQkJCVxuIgorCQkiCS5zZXQJbWlwczAJCQkJCVxuIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2VoYih2b2lkKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSIJLnNldAltaXBzMzJyMgkJCQkJXG4iCisJIgllaGIJCQkJCQkJXG4iCQkiCS5zZXQJbWlwczAJCQkJCQlcbiIpOworfQorCisvKgorICogTm90ZSB0aGF0IGxvY2FsX2lycV9zYXZlL3Jlc3RvcmUgYWZmZWN0IFRDLXNwZWNpZmljIElYTVQgc3RhdGUsCisgKiBub3QgU3RhdHVzLklFIGFzIGluIG5vbi1TTVRDIGtlcm5lbC4KKyAqLworCisjZGVmaW5lIF9fQlVJTERfU0VUX0MwKG5hbWUpCQkJCQlcCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAkJCQkJXAorc2V0X2MwXyMjbmFtZSh1bnNpZ25lZCBpbnQgc2V0KQkJCQkJXAorewkJCQkJCQkJXAorCXVuc2lnbmVkIGludCByZXM7CQkJCQlcCisJdW5zaWduZWQgaW50IG9tdDsJCQkJCVwKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CQkJCQlcCisJCQkJCQkJCVwKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CQkJCQlcCisJb210ID0gX19kbXQoKTsJCQkJCQlcCisJcmVzID0gcmVhZF9jMF8jI25hbWUoKTsJCQkJCVwKKwlyZXMgfD0gc2V0OwkJCQkJCVwKKwl3cml0ZV9jMF8jI25hbWUocmVzKTsJCQkJCVwKKwlfX2VtdChvbXQpOwkJCQkJCVwKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CQkJCVwKKwkJCQkJCQkJXAorCXJldHVybiByZXM7CQkJCQkJXAorfQkJCQkJCQkJXAorCQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAkJCQkJXAorY2xlYXJfYzBfIyNuYW1lKHVuc2lnbmVkIGludCBjbGVhcikJCQkJXAorewkJCQkJCQkJXAorCXVuc2lnbmVkIGludCByZXM7CQkJCQlcCisJdW5zaWduZWQgaW50IG9tdDsJCQkJCVwKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CQkJCQlcCisJCQkJCQkJCVwKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CQkJCQlcCisJb210ID0gX19kbXQoKTsJCQkJCQlcCisJcmVzID0gcmVhZF9jMF8jI25hbWUoKTsJCQkJCVwKKwlyZXMgJj0gfmNsZWFyOwkJCQkJCVwKKwl3cml0ZV9jMF8jI25hbWUocmVzKTsJCQkJCVwKKwlfX2VtdChvbXQpOwkJCQkJCVwKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CQkJCVwKKwkJCQkJCQkJXAorCXJldHVybiByZXM7CQkJCQkJXAorfQkJCQkJCQkJXAorCQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAkJCQkJXAorY2hhbmdlX2MwXyMjbmFtZSh1bnNpZ25lZCBpbnQgY2hhbmdlLCB1bnNpZ25lZCBpbnQgbmV3KQkJXAorewkJCQkJCQkJXAorCXVuc2lnbmVkIGludCByZXM7CQkJCQlcCisJdW5zaWduZWQgaW50IG9tdDsJCQkJCVwKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CQkJCQlcCisJCQkJCQkJCVwKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CQkJCQlcCisJCQkJCQkJCVwKKwlvbXQgPSBfX2RtdCgpOwkJCQkJCVwKKwlyZXMgPSByZWFkX2MwXyMjbmFtZSgpOwkJCQkJXAorCXJlcyAmPSB+Y2hhbmdlOwkJCQkJCVwKKwlyZXMgfD0gKG5ldyAmIGNoYW5nZSk7CQkJCQlcCisJd3JpdGVfYzBfIyNuYW1lKHJlcyk7CQkJCQlcCisJX19lbXQob210KTsJCQkJCQlcCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwkJCQlcCisJCQkJCQkJCVwKKwlyZXR1cm4gcmVzOwkJCQkJCVwKK30KKyNlbmRpZgorCitfX0JVSUxEX1NFVF9DMChzdGF0dXMpCitfX0JVSUxEX1NFVF9DMChjYXVzZSkKK19fQlVJTERfU0VUX0MwKGNvbmZpZykKK19fQlVJTERfU0VUX0MwKGludGNvbnRyb2wpCitfX0JVSUxEX1NFVF9DMChpbnRjdGwpCitfX0JVSUxEX1NFVF9DMChzcnNtYXApCisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfQVNNX01JUFNSRUdTX0ggKi8KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL2NvZGVjcy9zaTMyMTh4L3BhdGNoX2ZpbGVzL01ha2VmaWxlIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvcGF0Y2hfZmlsZXMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVhNTNiYgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL2NvZGVjcy9zaTMyMTh4L3BhdGNoX2ZpbGVzL01ha2VmaWxlCkBAIC0wLDAgKzEsMTYgQEAKKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKworIyBwbGF0Zm9ybSBkcml2ZXIKK2NjZmxhZ3MteSArPSAtSS4uL2luYworc25kLXNvYy1wcm9jc2xpYy1wYXRjaC1vYmpzIDo9IHNpMzIxOHhfcGF0Y2hfQV8yMDE3TUFZMjUubworCitvYmotJChDT05GSUdfU05EX1NPQ19TSTMyMThYKSArPSBzbmQtc29jLXByb3NsaWMtcGF0Y2gubwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvcGF0Y2hfZmlsZXMvc2kzMjE4eF9wYXRjaF9BXzIwMTdNQVkyNS5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvcGF0Y2hfZmlsZXMvc2kzMjE4eF9wYXRjaF9BXzIwMTdNQVkyNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjY2NiNzUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9wYXRjaF9maWxlcy9zaTMyMTh4X3BhdGNoX0FfMjAxN01BWTI1LmMKQEAgLTAsMCArMSwyNDIgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogR2VuZXJhdGVkIGZyb20gc2kzMjE4eF9wYXRjaF9BXzIwMTdNQVkyNS5kc3BfcHJvbQorICogb24gMDUtMjUtMjAxNyBhdCAxNToxOjM3CisgKiBQYXRjaCBJRCA9IDB4MDUyNTIwMTdMCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHByb3ByaWV0YXJ5IGluZm9ybWF0aW9uLgorICogTm8gZGlzc2VtaW5hdGlvbiBhbGxvd2VkIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20KKyAqIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuCisgKi8KKyNpbmNsdWRlICIuLi9jb25maWdfaW5jL3NpX3ZvaWNlX2RhdGF0eXBlcy5oIgorI2luY2x1ZGUgIi4uL2luYy9zaTMyMTh4LmgiCisKK3N0YXRpYyBjb25zdCB1SW50MzIgcGF0Y2hEYXRhIFtdID0geworMTQxMDI5TCwKKzU0MDg2N0wsCisxNDEwMjlMLAorNTQzNDI3TCwKKzE0MTAyOUwsCis1NTM2NjdMLAorMTQxMDI5TCwKKzU2Mjg4M0wsCisxNDEwMjlMLAorNTY3NDkxTCwKKzE0MTAyOUwsCis1Njk1MzlMLAorMTQxMDI5TCwKKzU4MDgwM0wsCisxNDEwMjlMLAorNTg2NDM1TCwKKzE0MTAyOUwsCis1OTMwOTFMLAorMTQxMDI5TCwKKzU5ODIxMUwsCisxNDEwMjlMLAorNjAzODQzTCwKKzE0MTAyOUwsCis2MDQzNTVMLAorMTQxMDI5TCwKKzYwNDg2N0wsCisxNDEwMjlMLAorNjA1Mzc5TCwKKzE0MTAyOUwsCis2MDU4OTFMLAorMTQxMDI5TCwKKzYwNjQwM0wsCis3MzZMLAorNDkyMjI0TCwKKzQ1MjIwMEwsCisxNDEwMjlMLAorNDkxNzEyTCwKKzU1ODE4MUwsCis0MTAwMThMLAorNTM5NzY1TCwKKzE0MjU2NUwsCis1NTE2MTlMLAorMzU1NzQ2TCwKKzUzOTc2NUwsCisxNDI1NjBMLAorNTQ4NTQ3TCwKKzc2NzQ5M0wsCiszNTYyNThMLAorNDA3NDc3TCwKKzE0MjU2MUwsCis1NTE2MTlMLAorNzY3NDkzTCwKKzUzOTc0OUwsCis3NDM1MjVMLAorMTE5NDI2TCwKKzE0MTAyOUwsCis5MjUzNzdMLAorMzg3NTg5TCwKKzU1ODE4MUwsCiszODg1MTRMLAorMzg3NzAxTCwKKzE0MjU2NUwsCis1NjEzNDdMLAorNTI0MjkwTCwKKzE0NDA5NkwsCis1NTk4MTFMLAorNTI0MjkyTCwKKzE0MTAyOUwsCis1NjA4MzVMLAorNTI0MjkwTCwKKzQzNzM2MEwsCis2NzE3NDlMLAorNDM3MzQ5TCwKKzE0MTAyOUwsCisyMTE4NkwsCis1NjA3NDFMLAorNTI0MjkwTCwKKzE0MzA3MkwsCis1NjU5NTVMLAorMTQxMDI5TCwKKzEyMjA1MEwsCis2OTQ3ODlMLAorMTQxMDI5TCwKKzc4OTE4NkwsCis0MDgxNjVMLAorNDA4NjQ1TCwKKzE0MTAyOUwsCis5NTA5NzZMLAorNTI0MjkxTCwKKzE0NDEwMUwsCis1NzE1ODdMLAorMTk5Njg1TCwKKzY2Njg1M0wsCis1NzQ2NTlMLAorNDMxNzE3TCwKKzE5NzE4OUwsCisxMzY4MDVMLAorMTk4NzI1TCwKKzQwODY3N0wsCisyNjIyNDJMLAorNTI0MjkxTCwKKzE0NDEwMUwsCis1Nzc3MzFMLAorNDA4NTgxTCwKKzY2Njg1M0wsCis4NzM2NjRMLAorMTM2ODA1TCwKKzQwNzYyMUwsCisxNDEwMjlMLAorODczNjY0TCwKKzk3MzNMLAorMTM2ODA1TCwKKzExNjEzMEwsCis1MjQzMDRMLAorNjYwMDY5TCwKKzQ0MDQyNEwsCis5ODI3TCwKKzY2MDA2NkwsCis1MjQzMTVMLAorMTQxMDI5TCwKKzY3NDQ5NkwsCis2OTQ3ODlMLAorODI4NTE3TCwKKzExOTQyNkwsCisyNjc0MTRMLAorODI5NDQxTCwKKzgyODkzM0wsCis2OTQ3ODlMLAorMTE4NDA1TCwKKzc4ODgwNUwsCis3MjU4MjlMLAorMTE5NDI0TCwKKzE0MTAyOUwsCisyMzA1OTRMLAorNDkyNjQ1TCwKKzI1MjAwMkwsCis1MjQyOTVMLAorNTE3MjIwTCwKKzE0NDEwMUwsCis1OTY2NzVMLAorNTE3NzMzTCwKKzgyNzQ2MUwsCisxNDEwMjlMLAorNzQ1NjY0TCwKKzQ2NjQzN0wsCis1NTgxODFMLAorNDEwMDE4TCwKKzUxOTc5N0wsCisxNDI1NjVMLAorNjAxNzk1TCwKKzM4NTYzN0wsCis0NjY1OTdMLAorNTI0Mjg5TCwKKzE0MTAyOUwsCisyNzMzMEwsCis1MjQyOTNMLAorNTI0MjkzTCwKKzUyNDI5M0wsCis1MjQyOTNMLAorNTI0MjkzTCwKKzUyNDI5M0wsCiswTAorfTsKKworc3RhdGljIGNvbnN0IHVJbnQxNiBwYXRjaEVudHJpZXMgW10gPSB7Cis5NTEsCiszODU0LAorNDEzNiwKKzQzMzMsCisxODU2LAorMTY5NSwKKzEzMTYsCis0NTQ1LAorMTQ1NSwKKzQxNDgsCiswLAorMCwKKzAsCiswLAorMCwKKzAKK307CisKK3N0YXRpYyBjb25zdCB1SW50MTYgcGF0Y2hTdXBwb3J0QWRkciBbXSA9IHsKKzgwMCwKKzY5NCwKKzY5NSwKKzc5NSwKKzkxNCwKKzc1OCwKKzc1NywKKzc5OCwKKzc5NywKKzc5NiwKKzIyNiwKKzEwMTEsCisxMDEwLAorMAorfTsKKworc3RhdGljIGNvbnN0IHVJbnQzMiBwYXRjaFN1cHBvcnREYXRhIFtdID0geworMHgyMDAwMDBMLAorMHg4MDAwMEwsCisweDIwMDAwMEwsCisweDE4MDAwMEwsCisweDA3RkNGRERBTCwKKzB4NDAwMDAwTCwKKzB4MEwsCisweDEyMzQwMEwsCisweDEyMzQwMEwsCisweDEyMzQwMEwsCisweDM1RDU0MEwsCisweDNGMDAwMDBMLAorMHgxMDAwMDBMLAorMHgwTAorfTsKKworI2lmZGVmIFNJVk9JQ0VfTVVMVElfQk9NX1NVUFBPUlQKK2NvbnN0IHByb3NsaWNQYXRjaCBzaTMyMTh4UGF0Y2hSZXZBTENRQyA9IHsKKyNlbHNlCitjb25zdCBwcm9zbGljUGF0Y2ggUmV2QVBhdGNoID0geworI2VuZGlmCisgICAgcGF0Y2hEYXRhLAorICAgIHBhdGNoRW50cmllcywKKyAgICAweDA1MjUyMDE3TCwKKyAgICBwYXRjaFN1cHBvcnRBZGRyLAorICAgIHBhdGNoU3VwcG9ydERhdGEKK307CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9wcm9zbGljX3NwaV9hcGkuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL2NvZGVjcy9zaTMyMTh4L3Byb3NsaWNfc3BpX2FwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZTY3ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9wcm9zbGljX3NwaV9hcGkuYwpAQCAtMCwwICsxLDIwNiBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBzcGkuaAorICogU1BJIGRyaXZlciBpbXBsZW1lbnRhdGlvbiBmaWxlCisgKgorICogQXV0aG9yKHMpOiAKKyAqIGxhagorICoKKyAqIERpc3RyaWJ1dGVkIGJ5OiAKKyAqIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMKKyAqCisgKiBGaWxlIERlc2NyaXB0aW9uOgorICogVGhpcyBpcyB0aGUgaW1wbGVtZW50YXRpb24gZmlsZSBmb3IgdGhlIFNQSSBkcml2ZXIgdXNlZCAKKyAqIGluIHRoZSBQcm9TTElDIGRlbW9uc3RyYXRpb24gY29kZS4gSXQgY2FsbHMgdGhlIGxpYnJhcnkKKyAqIHRoYXQgaW5pdGlhbGl6ZXMgYW5kIHRhbGtzIHRvIHRoZSBwcm9zbGljIG1vdGhlcmJvYXJkLgorICoKKyAqIERlcGVuZGFuY2llczoKKyAqCisgKi8KKy8vI2luY2x1ZGUgIi4uL2lvd3JhcHBlci5oIiAvLyBUaGlzIGlzIHRoZSBtb3RoZXJib2FyZCBpbnRlcmZhY2UgbGlicmFyeQorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSAiY29uZmlnX2luYy9zaV92b2ljZV9kYXRhdHlwZXMuaCIKKyNpbmNsdWRlICJpbmMvc2lfdm9pY2VfY3RybC5oIgorI2luY2x1ZGUgInNwaS5oIgorI2luY2x1ZGUgInByb3NsaWNfc3lzLmgiCisKKy8qCisqKiBGdW5jdGlvbjogU1BJX0luaXQKKyoqCisqKiBEZXNjcmlwdGlvbjogCisqKiBJbml0aWFsaXplcyB0aGUgU1BJIGludGVyZmFjZQorKioKKyoqIElucHV0IFBhcmFtZXRlcnM6IAorKiogbm9uZQorKioKKyoqIFJldHVybjoKKyoqIG5vbmUKKyovCitpbnQgU1BJX0luaXQgKGN0cmxfUyAqaFNwaSl7CisJaW50IHJldDsKKworCXJldCA9IHByb3NsaWNfc3BpX3NldHVwKCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyoqIEZ1bmN0aW9uOiBzcGlHY2lfUmVzZXRXcmFwcGVyCisqKgorKiogRGVzY3JpcHRpb246IAorKiogU2V0cyB0aGUgcmVzZXQgcGluIG9mIHRoZSBQcm9TTElDCisqLworaW50IGN0cmxfUmVzZXRXcmFwcGVyICh2b2lkICpoU3BpR2NpLCBpbnQgc3RhdHVzKXsKKwkKKwlwcmludGsoImN0cmxfUmVzZXRXcmFwcGVyIik7CQorCXByb3NsaWNfcmVzZXQoTlVMTCwgc3RhdHVzKTsKKworCXJldHVybiAwOworfQorCisvKgorKiogU1BJL0dDSSByZWdpc3RlciByZWFkIAorKioKKyoqIERlc2NyaXB0aW9uOiAKKyoqIFJlYWRzIGEgc2luZ2xlIFByb1NMSUMgcmVnaXN0ZXIKKyoqCisqKiBJbnB1dCBQYXJhbWV0ZXJzOiAKKyoqIGNoYW5uZWw6IFByb1NMSUMgY2hhbm5lbCB0byByZWFkIGZyb20KKyoqIHJlZ0FkZHI6IEFkZHJlc3Mgb2YgcmVnaXN0ZXIgdG8gcmVhZAorKiogcmV0dXJuIGRhdGE6IGRhdGEgdG8gcmVhZCBmcm9tIHJlZ2lzdGVyCisqKgorKiogUmV0dXJuOgorKiogbm9uZQorKi8KK3VJbnQ4IGN0cmxfUmVhZFJlZ2lzdGVyV3JhcHBlciAodm9pZCAqaFNwaUdjaSwgdUludDggY2hhbm5lbCwgdUludDggcmVnQWRkcil7CisJCisKKwlyZXR1cm4gcHJvc2xpY19yZWFkX3JlZ2lzdGVyKGhTcGlHY2ksY2hhbm5lbCxyZWdBZGRyKTsKK30KKworCisvKgorKiogRnVuY3Rpb246IHNwaUdjaV9Xcml0ZVJlZ2lzdGVyV3JhcHBlciAKKyoqCisqKiBEZXNjcmlwdGlvbjogCisqKiBXcml0ZXMgYSBzaW5nbGUgUHJvU0xJQyByZWdpc3RlcgorKioKKyoqIElucHV0IFBhcmFtZXRlcnM6IAorKiogY2hhbm5lbDogUHJvU0xJQyBjaGFubmVsIHRvIHdyaXRlIHRvCisqKiBhZGRyZXNzOiBBZGRyZXNzIG9mIHJlZ2lzdGVyIHRvIHdyaXRlCisqKiBkYXRhOiBkYXRhIHRvIHdyaXRlIHRvIHJlZ2lzdGVyCisqKgorKiogUmV0dXJuOgorKiogbm9uZQorKi8KK2ludCBjdHJsX1dyaXRlUmVnaXN0ZXJXcmFwcGVyICh2b2lkICpoU3BpR2NpLCB1bnNpZ25lZCBjaGFyIGNoYW5uZWwsIHVuc2lnbmVkIGNoYXIgcmVnQWRkciwgdW5zaWduZWQgY2hhciBkYXRhKXsKKworCXByb3NsaWNfd3JpdGVfcmVnaXN0ZXIoaFNwaUdjaSxjaGFubmVsLHJlZ0FkZHIsIGRhdGEpOworCXJldHVybiAwOworfQorCisKKy8qCisqKiBGdW5jdGlvbjogU1BJX1JlYWRSQU1XcmFwcGVyCisqKgorKiogRGVzY3JpcHRpb246IAorKiogUmVhZHMgYSBzaW5nbGUgUHJvU0xJQyBSQU0gbG9jYXRpb24KKyoqCisqKiBJbnB1dCBQYXJhbWV0ZXJzOiAKKyoqIGNoYW5uZWw6IFByb1NMSUMgY2hhbm5lbCB0byByZWFkIGZyb20KKyoqIGFkZHJlc3M6IEFkZHJlc3Mgb2YgUkFNIGxvY2F0aW9uIHRvIHJlYWQKKyoqIHBEYXRhOiBkYXRhIHRvIHJlYWQgZnJvbSBSQU0gbG9jYXRpb24KKyoqCisqKiBSZXR1cm46CisqKiBub25lCisqLworcmFtRGF0YSBjdHJsX1JlYWRSQU1XcmFwcGVyICh2b2lkICpoU3BpR2NpLCB1bnNpZ25lZCBjaGFyIGNoYW5uZWwsIHVuc2lnbmVkIHNob3J0IHJhbUFkZHIpeworCXJhbURhdGEgZGF0YTsKKworCWRhdGEgPSBwcm9zbGljX3JlYWRfcmFtKGhTcGlHY2ksY2hhbm5lbCxyYW1BZGRyKTsKKworCXJldHVybiBkYXRhOworfQorCisKKy8qCisqKiBGdW5jdGlvbjogU1BJX1dyaXRlUkFNV3JhcHBlcgorKioKKyoqIERlc2NyaXB0aW9uOiAKKyoqIFdyaXRlcyBhIHNpbmdsZSBQcm9TTElDIFJBTSBsb2NhdGlvbgorKioKKyoqIElucHV0IFBhcmFtZXRlcnM6IAorKiogY2hhbm5lbDogUHJvU0xJQyBjaGFubmVsIHRvIHdyaXRlIHRvCisqKiBhZGRyZXNzOiBBZGRyZXNzIG9mIFJBTSBsb2NhdGlvbiB0byB3cml0ZQorKiogZGF0YTogZGF0YSB0byB3cml0ZSB0byBSQU0gbG9jYXRpb24KKyoqCisqKiBSZXR1cm46CisqKiBub25lCisqLworaW50IGN0cmxfV3JpdGVSQU1XcmFwcGVyICh2b2lkICpoU3BpR2NpLCB1bnNpZ25lZCBjaGFyIGNoYW5uZWwsIHVuc2lnbmVkIHNob3J0IHJhbUFkZHIsIHJhbURhdGEgZGF0YSl7CisKKwlwcm9zbGljX3dyaXRlX3JhbShoU3BpR2NpLGNoYW5uZWwscmFtQWRkcixkYXRhKTsKKworCXJldHVybiAwOworfQorCisKKworLyoKKyoqICRMb2c6IHByb3NsaWNfc3BpX2FwaS5jLHYgJAorKiogUmV2aXNpb24gMS4xMSAgMjAwOC8wNy8yNCAyMTowNjoxNiAgbGFqb3JkYW4KKyoqIG5vIG1lc3NhZ2UKKyoqCisqKiBSZXZpc2lvbiAxLjEwICAyMDA4LzAzLzE5IDE4OjIwOjA5ICBsYWpvcmRhbgorKiogbm8gbWVzc2FnZQorKioKKyoqIFJldmlzaW9uIDEuOSAgMjAwNy8wNi8wNCAxNjozNTo1MSAgbGFqb3JkYW4KKyoqIGFkZGVkIHByb2ZpbGluZworKioKKyoqIFJldmlzaW9uIDEuOCAgMjAwNy8wMi8yNyAxOToyNTo0OCAgbGFqb3JkYW4KKyoqIHVwZGF0ZWQgYXBpCisqKgorKiogUmV2aXNpb24gMS43ICAyMDA3LzAyLzA1IDIzOjQzOjI3ICBsYWpvcmRhbgorKiogZml4ZWQgcmVnaXN0ZXIgYWNjZXNzIGZ1bmMKKyoqCisqKiBSZXZpc2lvbiAxLjYgIDIwMDYvMTEvMjIgMjE6Mzg6MTkgIGxham9yZGFuCisqKiBicm9hZGNhc3QgYWRkZWQKKyoqCisqKiBSZXZpc2lvbiAxLjUgIDIwMDYvMDcvMjEgMjA6MzE6MjYgIGxham9yZGFuCisqKiBmaXhlZCBjYW50IGNvbm5lY3QgbWVzc2FnZQorKioKKyoqIFJldmlzaW9uIDEuNCAgMjAwNi8wNy8xOSAxODoxNTo1NiAgbGFqb3JkYW4KKyoqIGZpeGVkIHNwaSBpbml0CisqKgorKiogUmV2aXNpb24gMS4zICAyMDA2LzA3LzE4IDIxOjUwOjE2ICBsYWpvcmRhbgorKiogcmVtb3ZlZCBleHRyYW5lb3VzIGVuZGlmCisqKgorKiogUmV2aXNpb24gMS4yICAyMDA2LzA3LzE4IDIxOjQ4OjUxICBsYWpvcmRhbgorKiogYWRkZWQgMTYgYml0IGFjY2Vzc2VzIGV4YW1wbGUgY29kZQorKioKKyoqIFJldmlzaW9uIDEuMS4xLjEgIDIwMDYvMDcvMTMgMjA6MjY6MDggIGxham9yZGFuCisqKiBubyBtZXNzYWdlCisqKgorKiogUmV2aXNpb24gMS4xLjEuMSAgMjAwNi8wNy8wNiAyMjowNjoyMyAgbGFqb3JkYW4KKyoqIG5vIG1lc3NhZ2UKKyoqCisqKiBSZXZpc2lvbiAxLjMgIDIwMDYvMDYvMjkgMTk6MTE6MTggIGxhagorKiogbHB0IGRyaXZlciBjb21wbGV0ZWQKKyoqCisqKiBSZXZpc2lvbiAxLjIgIDIwMDYvMDYvMjEgMjM6NDY6NTggIGxhagorKiogcmVnaXN0ZXIgcmVhZHMvd3JpdGVzIGFkZGVkCisqKgorKiogUmV2aXNpb24gMS4xICAyMDA2LzA2LzIxIDIzOjE4OjA3ICBsYWoKKyoqIG5vIG1lc3NhZ2UKKyoqCisqKiBSZXZpc2lvbiAxLjEgIDIwMDYvMDYvMjEgMjI6NDI6MjYgIGxhagorKiogbmV3IGFwaSBzdHlsZQorKioKKyoqIFJldmlzaW9uIDEuMyAgMjAwNS8xMS8xNCAxNzo0MjozNCAgbGFqCisqKiBhZGRlZCBTUElfaW5pdAorKioKKyoqIFJldmlzaW9uIDEuMiAgMjAwNS8xMS8wNyAyMzoyMDo1NCAgbGFqCisqKiB0b29rIG91dCBleHRyYSBzcGFjZXMKKyoqCisqLwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvcHJvc2xpY19zeXMuaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL2NvZGVjcy9zaTMyMTh4L3Byb3NsaWNfc3lzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYyOTkxNQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL2NvZGVjcy9zaTMyMTh4L3Byb3NsaWNfc3lzLmgKQEAgLTAsMCArMSwxMjAgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisKKyNpZm5kZWYgX19QUk9TTElDX1NZU19IRFJfXworI2RlZmluZSBfX1BST1NMSUNfU1lTX0hEUl9fIDEKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWU2NC5oPiAvKiBmb3Igc3RydWN0IHRpbWVzcGVjICovCisKKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisKKyNpbmNsdWRlICJwcm9zbGljX3N5c19jZmcuaCIKKworCisKKy8qIERvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIG9uICBjaGFubmVsIHNldHRpbmcgKi8KKyNkZWZpbmUgU0lMQUJTX01BWF9DSEFOIDMyIAorI2lmIChTSUxBQlNfTUFYX0NIQU5ORUxTID4gU0lMQUJTX01BWF9DSEFOKQorI2Vycm9yICJQcm9TTElDIG9ubHkgc3VwcG9ydHMgdXAgdG8gMzIgY2hhbm5lbHMiCisjZW5kaWYKKworI2RlZmluZSBQUk9TTElDX0JDQVNUICAgICAgIDB4RkYKKyNkZWZpbmUgUFJPU0xJQ19TUElfT0sgICAgICAwCisjZGVmaW5lIFBST1NMSUNfU1BJX05PSyAgICAgOCAvKiBUaGlzIGlzIHdoYXQgdGhlIFByb1NMSUMgQVBJIGNhbGxzIFNQSV9GQUlMICovIAorI2RlZmluZSBQUk9TTElDX1RJTUVSX0VSUk9SIDE1CisKKy8qIERlYnVnIG1hY3JvcyAqLworI2RlZmluZSBQUk9TTElDX0FQSV9IRFIgIlBST1NMSUNfQVBJICIKKworI2RlZmluZSBwcm9zbGljX3RyYWNlKGZtdCwgYXJnLi4uKSBpZihwcm9zbGljX2RlYnVnX3NldHRpbmcgJiAweDEpIHByaW50ayggS0VSTl9OT1RJQ0UgUFJPU0xJQ19BUElfSERSICJUUkM6ICIgZm10ICJcbiIsICMjYXJnKQorI2RlZmluZSBwcm9zbGljX2RlYnVnKGZtdCwgYXJnLi4uKSBpZihwcm9zbGljX2RlYnVnX3NldHRpbmcgJiAweDIpIHByaW50ayggS0VSTl9ERUJVRyBQUk9TTElDX0FQSV9IRFIgIkRCRzogIiBmbXQgIlxuIiwgIyNhcmcpCisjZGVmaW5lICBwcm9zbGljX2Vycm9yKGZtdCwgYXJnLi4uKSBpZihwcm9zbGljX2RlYnVnX3NldHRpbmcgJiAweDQpIHByaW50ayggS0VSTl9FUlIgUFJPU0xJQ19BUElfSERSICJFUlI6ICIgZm10ICJcbiIsICMjYXJnKQorCisvKiBEYXRhIHR5cGVzIGNvbXBhdGlibGUgd2l0aCB0aGUgUHJvU0xJQyBBUEkgc3lzdGVtIHNlcnZpY2VzIGxheWVyICovCit0eXBlZGVmIHVfaW50OF90ICAgICAgICAgICAgQk9PTEVBTjsKK3R5cGVkZWYgaW50OF90ICAgICAgICAgICAgICBpbnQ4OwordHlwZWRlZiB1X2ludDhfdCAgICAgICAgICAgIHVJbnQ4OwordHlwZWRlZiB1SW50OCAgICAgICAgICAgICAgIHVDaGFyOwordHlwZWRlZiBpbnQxNl90ICAgICAgICAgICAgIGludDE2OwordHlwZWRlZiB1X2ludDE2X3QgICAgICAgICAgIHVJbnQxNjsKK3R5cGVkZWYgaW50MzJfdCAgICAgICAgICAgICBpbnQzMjsKK3R5cGVkZWYgdV9pbnQzMl90ICAgICAgICAgICB1SW50MzI7Cit0eXBlZGVmIHVfaW50MzJfdCAgICAgICAgICAgcmFtRGF0YTsKKworCisjaWZuZGVmIENUUkxfSAorLyogRnVuY3Rpb24gcHJvdG90eXBlcyBjb21wYXRpYmxlIHdpdGggdGhlIFByb1NMSUMgQVBJIHN5c3RlbSBzZXJ2aWNlcyBsYXllciAqLwordHlwZWRlZiBpbnQgKCpjdHJsX1Jlc2V0X2ZwdHIpICh2b2lkICpoQ3RybCwgaW50IGluX3Jlc2V0KTsKKwordHlwZWRlZiBpbnQgKCpjdHJsX1dyaXRlUmVnaXN0ZXJfZnB0cikgKHZvaWQgKmhDdHJsLCB1SW50OCBjaGFubmVsLCB1SW50OCByZWdBZGRyLCB1SW50OCBkYXRhKTsKK3R5cGVkZWYgaW50ICgqY3RybF9Xcml0ZVJBTV9mcHRyKSAodm9pZCAqaEN0cmwsIHVJbnQ4IGNoYW5uZWwsIHVJbnQxNiByYW1BZGRyLCByYW1EYXRhIGRhdGEpOworCit0eXBlZGVmIHVJbnQ4ICgqY3RybF9SZWFkUmVnaXN0ZXJfZnB0cikgKHZvaWQgKmhDdHJsLCB1SW50OCBjaGFubmVsLCB1SW50OCByZWdBZGRyKTsKK3R5cGVkZWYgcmFtRGF0YSAoKmN0cmxfUmVhZFJBTV9mcHRyKSAodm9pZCAqaEN0cmwsIHVJbnQ4IGNoYW5uZWwsIHVJbnQxNiByYW1BZGRyKTsKKwordHlwZWRlZiBpbnQgKCpjdHJsX1NlbWFwaG9yZV9mcHRyKSAodm9pZCAqaEN0cmwsIGludCBpbl9jcml0aWNhbF9zZWN0aW9uKTsKKyNlbmRpZgorCit0eXBlZGVmIHZvaWQgKigqZ2V0X2hjdHJsKSAodUludDggY2hhbm5lbCk7IC8qIEdldCBhIHBvaW50ZXIgdG8gdGhlIGNvbnRyb2wgaW50ZXJmYWNlICovCisKK3R5cGVkZWYgaW50ICgqc3lzdGVtX2RlbGF5X2ZwdHIpICh2b2lkICpoVGltZXIsIGludCB0aW1lSW5Ncyk7Cit0eXBlZGVmIGludCAoKnN5c3RlbV90aW1lRWxhcHNlZF9mcHRyKSAodm9pZCAqaFRpbWVyLCB2b2lkICpzdGFydFRpbWUsIGludCAqdGltZUluTXMpOwordHlwZWRlZiBpbnQgKCpzeXN0ZW1fZ2V0VGltZV9mcHRyKSAodm9pZCAqaFRpbWVyLCB2b2lkICp0aW1lKTsKK3R5cGVkZWYgdm9pZCAqKGdldF9UaW1lcikodm9pZCk7IC8qIHJldHVybiBhIHBvaW50ZXIgdG8gInRoZSIgaFRpbWVyICovCisKKy8qIEZ1bmN0aW9uIHRhYmxlIGVudHJpZXMgdG8gcmVkdWNlIG5hbWVzcGFjZSBwb2xsdXRpb24gKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIGN0cmxfUmVzZXRfZnB0ciAgICAgICAgICAgICByZXNldDsKKworICBjdHJsX1dyaXRlUmVnaXN0ZXJfZnB0ciAgICAgd3JpdGVfcmVnOworICBjdHJsX1dyaXRlUkFNX2ZwdHIgICAgICAgICAgd3JpdGVfcmFtOworCisgIGN0cmxfUmVhZFJlZ2lzdGVyX2ZwdHIgICAgICByZWFkX3JlZzsKKyAgY3RybF9SZWFkUkFNX2ZwdHIgICAgICAgICAgIHJlYWRfcmFtOworCisgIGN0cmxfU2VtYXBob3JlX2ZwdHIgICAgICAgICBzZW07Cit9IHByb3NsaWNfc3BpX2ZwdHJzX3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIHN5c3RlbV9kZWxheV9mcHRyICAgICAgICAgIHNsaWNfZGVsYXk7CisgIHN5c3RlbV90aW1lRWxhcHNlZF9mcHRyICAgIGVsYXBzZWRfdGltZTsKKyAgc3lzdGVtX2dldFRpbWVfZnB0ciAgICAgICAgZ2V0X3RpbWU7Cit9IHByb3NsaWNfdGltZXJfZnB0cnNfdDsKKworLyogVGltZXIgY29udGFpbmVyICovCit0eXBlZGVmIHN0cnVjdCAKK3sKKyAgc3RydWN0IHRpbWVzcGVjNjQgdGltZXJPYmo7Cit9IHByb3NsaWNfdGltZVN0YW1wOworCitleHRlcm4gaW50IHByb3NsaWNfY2hhbm5lbF9jb3VudDsKK2V4dGVybiBpbnQgcHJvc2xpY19kZWJ1Z19zZXR0aW5nOworaW50IHByb3NsaWNfc3BpX3NldHVwKHZvaWQpOwordm9pZCBwcm9zbGljX3NwaV9zaHV0ZG93bih2b2lkKTsKKwordHlwZWRlZiBlbnVtCit7CisgIFBST1NMSUNfSVNfVU5LTk9XTiwKKyAgUFJPU0xJQ19JU19QUk9TTElDLAorICBQUk9TTElDX0lTX0RBQQorfSBwcm9zbGljX2Rldl90OworCisvKiBFeHBvcnRlZCBmdW5jdGlvbnMvdmFsdWVzICovCitleHRlcm4gcHJvc2xpY190aW1lcl9mcHRyc190IHByb3NsaWNfdGltZXJfaWY7CitleHRlcm4gcHJvc2xpY19zcGlfZnB0cnNfdCBwcm9zbGljX3NwaV9pZjsgCitpbnQgcHJvc2xpY19yZXNldCh2b2lkICpoQ3RybCwgaW50IGluX3Jlc2V0KTsKK2ludCBwcm9zbGljX3dyaXRlX3JlZ2lzdGVyKHZvaWQgKmhDdHJsLCB1SW50OCBjaGFubmVsLCB1SW50OCByZWdBZGRyLCB1SW50OCBkYXRhKTsKK2ludCBwcm9zbGljX3dyaXRlX3JhbSh2b2lkICpoQ3RybCwgdUludDggY2hhbm5lbCwgdUludDE2IHJhbUFkZHIsIHJhbURhdGEgZGF0YSk7Cit1SW50OCBwcm9zbGljX3JlYWRfcmVnaXN0ZXIodm9pZCAqaEN0cmwsIHVJbnQ4IGNoYW5uZWwsIHVJbnQ4IHJlZ0FkZHIpOworcmFtRGF0YSBwcm9zbGljX3JlYWRfcmFtKHZvaWQgKmhDdHJsLCB1SW50OCBjaGFubmVsLCB1SW50MTYgcmFtQWRkcik7CisKK2ludCBwcm9zbGljX2dldF9jaGFubmVsX2NvdW50KHZvaWQpOworcHJvc2xpY19kZXZfdCBwcm9zbGljX2dldF9kZXZpY2VfdHlwZSh1aW50OF90IGNoYW5uZWwpOwordm9pZCAqcHJvc2xpY19nZXRfaEN0cmwodWludDhfdCBjaGFubmVsKTsKK2ludCBwcm9zbGljX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3Qgc3BpX2RyaXZlciAqc3BpX2Rydik7CitpbnQgcHJvc2xpY19zcGlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpOworCisKKyNlbmRpZiAvKiBFbmQgb2YgX19QUk9TTElDX1NZU19IRFJfXyAqLworCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9wcm9zbGljX3N5c19jZmcuaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL2NvZGVjcy9zaTMyMTh4L3Byb3NsaWNfc3lzX2NmZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMWE5YzYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9wcm9zbGljX3N5c19jZmcuaApAQCAtMCwwICsxLDI0IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworCisjaWZuZGVmIF9fUFJPU0xJQ19TWVNfQ0ZHX0hEUl9fCisjZGVmaW5lIF9fUFJPU0xJQ19TWVNfQ0ZHX0hEUl9fIDEKKy8qIAorICogQmVnaW4gdXNlciBkZWZpbmVkIGJ1aWxkIG9wdGlvbnMgCisgKgorICogVE9ETzogbW92ZSB0aGlzIHRvIGEgLmtjb25maWcgb3B0aW9uIG1lbnUKKyAqLworCisjZGVmaW5lIFNJTEFCU19CSVRTX1BFUl9XT1JEICAgIDggICAgICAgIC8qIE1VU1QgYmUgZWl0aGVyIDgsIDE2LCBvciAzMiAqLworI2RlZmluZSBTSUxBQlNfU1BJX1JBVEUgICAgICAgICA0MDAwMDAwICAvKiBJbiB0ZXJtcyBvZiBIeiAqLworI2RlZmluZSBTSUxBQlNfTUFYX1JBTV9XQUlUICAgICAxMDAwICAgICAvKiBJbiB0ZXJtcyBvZiBsb29wIGNvdW50ICovCisjZGVmaW5lIFNJTEFCU19SRVNFVF9HUElPICAgICAgIDEzNQorI2RlZmluZSBTSUxBQlNfTUFYX0NIQU5ORUxTICAgICA0CisjZGVmaW5lIFNJTEFCU19SQU1fQkxPQ0tfQUNDRVNTIDEgICAgICAgIC8qIERlZmluZSB0aGlzIGlmIHlvdSB3aXNoIHRvIHVzZSBhIHNpbmdsZSBibG9jayB0byB3cml0ZSB0byBSQU0sIG1heSBub3Qgd29yayBvbiBhbGwgc3lzdGVtcyAqLworI2RlZmluZSBTSUxBQlNfREVGQVVMVF9EQkcgICAgICA3CisjZGVmaW5lIFNJTEFCU19NSU5fTVNMRUVQX1RJTUUgIDMwICAgICAgIC8qIHRocmVzaG9sZCB0byBjYWxsIG1kZWxheSB2cy4gbXNsZWVwKCkgKi8KKyNkZWZpbmUgU0lMQUJTX01TTEVFUF9TTE9QICAgICAgMTAgICAgICAgLyogSWYgdGhlIG1zbGVlcCgpIGZ1bmN0aW9uIGlzIG9mZiBieSBhIGNvbnN0YW50IHZhbHVlLCBzZXQgdGhpcyBudW1iZXIgcG9zaXRpdmUgaWYgaXQncyB0b28gbG9uZyBvciBuZWdhdGl2ZSBudW1iZXIgZm9yIHRvbyBzaG9ydCAtIHRlcm1zIG9mIG1TZWMgKi8KKyNkZWZpbmUgUFJPU0xJQ19YRkVSX0JVRiAgICAgICAgNCAgICAgICAgLyogSG93IG1hbnkgYnl0ZXMgdG8gc2VuZCBpbiAxIHRyYW5zZmVyLiAgRWl0aGVyIDEsMiwgb3IgNC4gIElmIHNldHRpbmcgU0lMQUJTX0JJVFNfUEVSX1dPUkQgdG8gMTYgb3IgMzIsIHlvdSBNVVNUIHNldCB0aGlzIGVpdGhlciAyIG9yIDQgKi8KKy8qIEVuZCBvZiB1c2VyIGRlZmluZWQgc2VjdGlvbiAqLworCisjZW5kaWYgLyogX19QUk9TTElDX1NZU19DRkdfSERSX18gKi8KKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvcHJvc2xpY19zeXNfbWFpbi5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvcHJvc2xpY19zeXNfbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MjQzYzQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9wcm9zbGljX3N5c19tYWluLmMKQEAgLTAsMCArMSw2NSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSAicHJvc2xpY19zeXMuaCIKKworI2RlZmluZSBQUk9TTElDX1NZU19TRVJWSUNFU19WRVIgICAiMC4wLjEiCisjZGVmaW5lIERSSVZFUl9ERVNDUklQVElPTiAgICAgICAgICJQcm9TTElDIEFQSSBjb21wYXRpYmxlIHN5c3RlbSBzZXJ2aWNlcyIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAgICAgICAgICAgICAgIlNpbGljb24gTGFib3JhdG9yaWVzIgorCitpbnQgcHJvc2xpY19kZWJ1Z19zZXR0aW5nID0gU0lMQUJTX0RFRkFVTFRfREJHOworaW50IHByb3NsaWNfY2hhbm5lbF9jb3VudCA9IFNJTEFCU19NQVhfQ0hBTk5FTFM7CisKK21vZHVsZV9wYXJhbShwcm9zbGljX2RlYnVnX3NldHRpbmcsIGludCwgU19JUlVTUiB8IFNfSVdVU1IgfFNfSVJHUlAgfCBTX0lXR1JQKTsKK01PRFVMRV9QQVJNX0RFU0MocHJvc2xpY19kZWJ1Z19zZXR0aW5nLCAiZGVidWcgbW9kZSBiaXRtYXNrLCAxID0gVFJDLCAyID0gREJHLCA0ID0gRVJSIik7Cittb2R1bGVfcGFyYW0ocHJvc2xpY19jaGFubmVsX2NvdW50LCBpbnQsIFNfSVJVU1IgfCBTX0lSR1JQICApOworTU9EVUxFX1BBUk1fREVTQyhwcm9zbGljX2NoYW5uZWxfY291bnQsICJOdW1iZXIgb2YgYWN0dWFsIGNoYW5uZWxzIG9uIHRoZSBwbGF0Zm9ybSIpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBpbml0X21vZHVsZSh2b2lkKQoreworICBpbnQgcmM7CisKKyAgcHJpbnRrKCBLRVJOX0lORk8gIlByb1NMSUMgQVBJIHN5c3RlbSBzZXJ2aWNlcyBtb2R1bGUgbG9hZGVkLCB2ZXJzaW9uOiAlc1xuIiwgUFJPU0xJQ19TWVNfU0VSVklDRVNfVkVSKTsKKyAgcHJpbnRrKCBLRVJOX0lORk8gIkRlYnVnID0gMHglMHhcbiIsIHByb3NsaWNfZGVidWdfc2V0dGluZyk7CisKKyAgaWYocHJvc2xpY19jaGFubmVsX2NvdW50ID4gU0lMQUJTX01BWF9DSEFOTkVMUykKKyAgeworICAgIHByaW50ayggS0VSTl9FUlIgInByb3NsaWNfY2hhbm5lbF9jb3VudCBtYXggaXM6ICVkLCBnb3Q6ICVkXG4iLCBTSUxBQlNfTUFYX0NIQU5ORUxTLCBwcm9zbGljX2NoYW5uZWxfY291bnQpOworICAgIHJldHVybiAtRUlOVkFMOworICB9CisgIAorICByYyA9IHByb3NsaWNfc3BpX3NldHVwKCk7CisKKyAgaWYocmMgPT0gMCkKKyAgeworICAgIC8qIFRPRE86IGFueSBvdGhlciBpbml0IHdlIG1heSB3YW50IHRvdCBkbyBoZXJlLi4uICovCisgIH0KKyAgZWxzZQorICB7CisgICAgcHJpbnRrKCBLRVJOX0VSUiAicHJvc2xpY19zcGlfc2V0dXAgcmV0dXJuZWQ6ICVkXG4iLCByYyk7CisgICAgcmV0dXJuIHJjOworICB9CisKKyAgcmV0dXJuIDA7CisKK30KKwordm9pZCBjbGVhbnVwX21vZHVsZSh2b2lkKQoreworICBwcm9zbGljX3NwaV9zaHV0ZG93bigpOworICBwcmludGsoIEtFUk5fSU5GTyAiUHJvU0xJQyBBUEkgc3lzdGVtIHNlcnZpY2VzIG1vZHVsZSB1bmxvYWRlZC5cbiIpOworfQorCitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0NSSVBUSU9OKTsKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfTElDRU5TRSgiRHVhbCBNUEwvR1BMIik7IAorCitFWFBPUlRfU1lNQk9MKHByb3NsaWNfc3BpX2lmKTsKK0VYUE9SVF9TWU1CT0wocHJvc2xpY190aW1lcl9pZik7CitFWFBPUlRfU1lNQk9MKHByb3NsaWNfZ2V0X2NoYW5uZWxfY291bnQpOworRVhQT1JUX1NZTUJPTChwcm9zbGljX2dldF9kZXZpY2VfdHlwZSk7CitFWFBPUlRfU1lNQk9MKHByb3NsaWNfZ2V0X2hDdHJsKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL2NvZGVjcy9zaTMyMTh4L3Byb3NsaWNfc3lzX3NwaS5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvcHJvc2xpY19zeXNfc3BpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAxYzQ4NgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL2NvZGVjcy9zaTMyMTh4L3Byb3NsaWNfc3lzX3NwaS5jCkBAIC0wLDAgKzEsNjk4IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAicHJvc2xpY19zeXMuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFBST1NMSUNfUkVHX0lEICAgICAgICAgMAorI2RlZmluZSBQUk9TTElDX1JFR19SQU1fV0FJVCAgIDQKKyNkZWZpbmUgUFJPU0xJQ19SRUdfUkFNX0hJICAgICA1IAorI2RlZmluZSBQUk9TTElDX1JFR19SQU1fRDAgICAgIDYKKyNkZWZpbmUgUFJPU0xJQ19SRUdfUkFNX0QxICAgICA3CisjZGVmaW5lIFBST1NMSUNfUkVHX1JBTV9EMiAgICAgOAorI2RlZmluZSBQUk9TTElDX1JFR19SQU1fRDMgICAgIDkKKyNkZWZpbmUgUFJPU0xJQ19SRUdfUkFNX0xPICAgICAxMAorI2RlZmluZSBQUk9TTElDX1JFR19XUlZTTElDICAgIDEyCisjZGVmaW5lIFBST1NMSUNfUkVHX1dSVkRBQSAgICAgMzQKKyNkZWZpbmUgUFJPU0xJQ19SRUdfSVNEQUEgICAgICAxMQorCisjZGVmaW5lIFBST1NMSUNfQ1dfQllURSAgICAgICAgMAorI2RlZmluZSBQUk9TTElDX1JFR19CWVRFICAgICAgIDEKKyNkZWZpbmUgUkFNX0FEUl9ISUdIX01BU0soQUREUikgKCgoQUREUik+PjMpJjB4RTApCisKKy8qIEJhc2ljIHJlZ2lzdGVyIGRlZmluaXRpb25zLCByZWdhcmRsZXNzIG9mIGNoaXBzZXQgKCc0eCwgJzJ4LCAnMTd4LCAnMjZ4IGNvbXBhdGlibGUgKi8KKworI2RlZmluZSBQUk9TTElDX0NXX1JEICAgICAgICAgIDB4NjAKKyNkZWZpbmUgUFJPU0xJQ19DV19XUiAgICAgICAgICAweDIwCisjZGVmaW5lIFBST1NMSUNfQ1dfQkNBU1QgICAgICAgMHg4MAorI2RlZmluZSBQUk9TTElDX0JDQVNUICAgICAgICAgIDB4RkYKKworI2lmbmRlZiBQUk9TTElDX1hGRVJfQlVGCisjZGVmaW5lIFBST1NMSUNfWEZFUl9CVUYgKFNJTEFCU19CSVRTX1BFUl9XT1JELzgpCisjZW5kaWYKKworLyogTm93IGRvIHNvbWUgc2FuaXR5IGNoZWNrcyAqLworI2lmIChTSUxBQlNfQklUU19QRVJfV09SRCAhPSAzMikgJiYgKFNJTEFCU19CSVRTX1BFUl9XT1JEICE9IDE2KSAmJiAoU0lMQUJTX0JJVFNfUEVSX1dPUkQgIT0gOCkKKyNlcnJvciAiU0lMQUJTX0JJVFNfUEVSX1dPUkQgbmVlZHMgdG8gYmUgZWl0aGVyIDgsIDE2IG9yIDMyIgorI2VuZGlmCisKKyNpZiAoKChTSUxBQlNfQklUU19QRVJfV09SRCA9PSAxNikgJiYgKFBST1NMSUNfWEZFUl9CVUYgIT0gMikgKSBcCisgICAgfHwgKChTSUxBQlNfQklUU19QRVJfV09SRCA9PSAzMikgJiYgKFBST1NMSUNfWEZFUl9CVUYgIT0gNCkgKSApIAorI2Vycm9yICJTSUxBQlNfQklUU19QRVJfV09SRCAmIFBST1NMSUNfWEZFUl9CVUYgc2l6ZSBtaXNtYXRjaCIKKyNlbmRpZgorCisjaWYgKFNJTEFCU19CSVRTX1BFUl9XT1JEICE9IDgpCisjZGVmaW5lIFNJTEFCU19DV19CWVRFICAgMQorI2RlZmluZSBTSUxBQlNfUkVHX0JZVEUgMAorI2Vsc2UKKyNkZWZpbmUgU0lMQUJTX0NXX0JZVEUgICAwCisjZGVmaW5lIFNJTEFCU19SRUdfQllURSAxCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgCit7CisgIHByb3NsaWNfZGV2X3QgZGV2aWNlVHlwZVtTSUxBQlNfTUFYX0NIQU5ORUxTXTsgIAorICBzcGlubG9ja190IGJ1c19sb2NrOworICB1SW50OCBjaGFubmVsX2NvdW50OyAvKiBJbiBtb3N0IGNhc2VzIHRoaXMgaXMgdGhlIGNoYW5uZWwgY291bnQgYXMgd2VsbCAqLworfSBwcm9zbGljX3NwaV9kYXRhX3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIC8qIFBsYWNlaG9sZGVyIGZvciBub3cgKi8KK30gcHJvc2xpY19zcGlfcGZvcm1fdDsKKworLyogQ2hhbiBhZGRyZXNzIGlzIHNlbnQgaW4gcmV2ZXJzZSBiaXQgb3JkZXIgKi8KK3N0YXRpYyB1SW50OCBjaGFuQWRkcltTSUxBQlNfTUFYX0NIQU5dID0KK3sKKyAgMHgwMCwgMHgxMCwgCisjaWYgKFNJTEFCU19NQVhfQ0hBTiA+IDIpCisgIDB4MDgsIDB4MTgsCisjZW5kaWYKKyNpZiAoU0lMQUJTX01BWF9DSEFOID4gNCkKKyAgMHgwNCwgMHgxNCwgCisjZW5kaWYKKyNpZiAoU0lMQUJTX01BWF9DSEFOID4gNikKKyAgMHgwQywgMHgxQywKKyNlbmRpZgorI2lmIChTSUxBQlNfTUFYX0NIQU4gPiA4KQorICAweDAyLCAweDEyLCAKKyNlbmRpZgorI2lmIChTSUxBQlNfTUFYX0NIQU4gPiAxMCkKKyAgMHgwQSwgMHgxQSwKKyNlbmRpZgorI2lmIChTSUxBQlNfTUFYX0NIQU4gPiAxMikKKyAgMHgwNiwgMHgxNiwgCisjZW5kaWYKKyNpZiAoU0lMQUJTX01BWF9DSEFOID4gMTQpCisgIDB4MEUsIDB4MUUsCisjZW5kaWYKKyNpZiAoU0lMQUJTX01BWF9DSEFOID4gMTYpCisgIDB4MDEsIDB4MTEsCisjZW5kaWYKKyNpZiAoU0lMQUJTX01BWF9DSEFOID4gMTgpCisgIDB4MDksIDB4MTksCisjZW5kaWYKKyNpZiAoU0lMQUJTX01BWF9DSEFOID4gMjApCisgIDB4MDUsIDB4MTUsCisjZW5kaWYKKyNpZiAoU0lMQUJTX01BWF9DSEFOID4gMjIpCisgIDB4MEQsIDB4MUQsCisjZW5kaWYKKyNpZiAoU0lMQUJTX01BWF9DSEFOID4gMjQpCisgIDB4MDMsIDB4MTMsCisjZW5kaWYKKyNpZiAoU0lMQUJTX01BWF9DSEFOID4gMjYpCisgIDB4MEIsIDB4MUIsCisjZW5kaWYKKyNpZiAoU0lMQUJTX01BWF9DSEFOID4gMjgpCisgIDB4MDcsMHgxNywKKyNlbmRpZgorI2lmIChTSUxBQlNfTUFYX0NIQU4gPiAzMCkKKyAgMHgwRiwgMHgxRgorI2VuZGlmCit9OworCitzdGF0aWMgcHJvc2xpY19zcGlfZGF0YV90ICAgKnByb3NsaWNfZGF0YTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcHJvc2xpY19yZXNldF9ncGlvID0gU0lMQUJTX1JFU0VUX0dQSU87CitzdHJ1Y3Qgc3BpX2RyaXZlciAqcHJvc2xpY19zcGk7ICAKK3N0cnVjdCBzcGlfZGV2aWNlICpwcm9zbGljX3NwaWRldjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordUludDggcHJvc2xpY19yZWFkX3JlZ2lzdGVyX3ByaXZhdGUodm9pZCAqaEN0cmwsIHVJbnQ4IGNoYW5uZWwsIHVJbnQ4IHJlZ0FkZHIpCit7CisgIHVfaW50OF90IGRhdGFfc3RyZWFtWzRdOworLy8gIHByb3NsaWNfc3BpX2RhdGFfdCAqc3BpX2RhdGEgPSAocHJvc2xpY19zcGlfZGF0YV90ICopaEN0cmw7CisgIGlmIChwcm9zbGljX3NwaWRldiA9PSBOVUxMKQorICAgCXByaW50ayAoIiVzIDogc21hbGwgc3BpIE5VTExcbiIsX19GVU5DVElPTl9fKTsKKworICBpZiggdW5saWtlbHkoY2hhbm5lbCA+PSBTSUxBQlNfTUFYX0NIQU5ORUxTKSApCisgIHsKKyAgICByZXR1cm4gUFJPU0xJQ19TUElfTk9LOworICB9CisgIGVsc2UKKyAgeworICAgIGRhdGFfc3RyZWFtW1BST1NMSUNfQ1dfQllURV0gPSBQUk9TTElDX0NXX1JEIHwgY2hhbkFkZHJbY2hhbm5lbF07CisgIH0gIAorCisgIGRhdGFfc3RyZWFtW1BST1NMSUNfUkVHX0JZVEVdID0gcmVnQWRkcjsKKworICBkYXRhX3N0cmVhbVsyXSA9IDB4RkY7IC8qIFNldCB0aGUgcmVnaXN0ZXIgdG8gYSBub24temVybyB2YWx1ZSwganVzdCBpbiBjYXNlICovCisjaWYgKFBST1NMSUNfWEZFUl9CVUYgPT0gNCkgfHwgKFBST1NMSUNfWEZFUl9CVUYgPT0gMikKKyAgc3BpX3dyaXRlX3RoZW5fcmVhZChwcm9zbGljX3NwaWRldiwgZGF0YV9zdHJlYW0sIDIsICZkYXRhX3N0cmVhbVsyXSwgMik7IC8qIEluIGVzc2VuY2UsIDIgMTYgYml0IG9wczogMSB0byBzZW5kIHRoZSByZXF1ZXN0LCAxIHRvIGdldCB0aGUgZGF0YSwgbmVlZHMgdG8gYmUgMzIgYml0IGFsaWduZWQuICovCisgIHByb3NsaWNfZGVidWcoIiVzKCVkKTogY2hhbiA9ICV1IHJlZyA9ICV1IGRhdGEgPSAweCUwMlgiLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCBjaGFubmVsLCByZWdBZGRyLCBkYXRhX3N0cmVhbVsyXSk7CisjZWxzZQorICB7CisgICAgaW50IGk7CisgICAgZm9yKGkgPSAwOyBpIDwgMjsgaSsrKQorICAgIHsKKyAgICAgIHNwaV93cml0ZShwcm9zbGljX3NwaWRldiwgJmRhdGFfc3RyZWFtW2ldLCAxKTsKKyAgICB9CisgIH0KKyAgc3BpX3JlYWQocHJvc2xpY19zcGlkZXYsICZkYXRhX3N0cmVhbVsyXSwgMSk7CisjZW5kaWYgIAorCisgIHJldHVybiBkYXRhX3N0cmVhbVsyXTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit1SW50OCBwcm9zbGljX3JlYWRfcmVnaXN0ZXIodm9pZCAqaEN0cmwsIHVJbnQ4IGNoYW5uZWwsIHVJbnQ4IHJlZ0FkZHIpCit7CisgIHVJbnQ4IGRhdGE7CisgIC8vdW5zaWduZWQgbG9uZyBpcnFTZXR0aW5nczsKKyAgLy9wcm9zbGljX3NwaV9kYXRhX3QgKnNwaV9kYXRhID0gKHByb3NsaWNfc3BpX2RhdGFfdCAqKWhDdHJsOworICAvL3NwaW5fbG9ja19pcnFzYXZlKCZzcGlfZGF0YS0+YnVzX2xvY2ssIGlycVNldHRpbmdzKTsKKyAgZGF0YSA9IHByb3NsaWNfcmVhZF9yZWdpc3Rlcl9wcml2YXRlKGhDdHJsLCBjaGFubmVsLCByZWdBZGRyKTsKKyAgLy9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcGlfZGF0YS0+YnVzX2xvY2ssIGlycVNldHRpbmdzKTsKKyAgcHJvc2xpY19kZWJ1ZygiJXMoJWQpOiBjaGFuID0gJXUgcmVnID0gJXUgZGF0YSA9IDB4JTAyWCIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18sIGNoYW5uZWwsIHJlZ0FkZHIsIGRhdGEpOworICByZXR1cm4gZGF0YTsKK30KK0VYUE9SVF9TWU1CT0wocHJvc2xpY19yZWFkX3JlZ2lzdGVyKTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBQcm9TTElDIEFQSSByZWdpc3RlciB3cml0ZSBmdW5jdGlvbiAqLworI2lmIFBST1NMSUNfWEZFUl9CVUYgPT0gNAorI2RlZmluZSBwcm9zbGljX3dyaXRlX3JlZ2lzdGVyX3ByaXZhdGUgcHJvc2xpY193cml0ZV9yZWdpc3RlcgorI2VuZGlmCisKK2ludCBwcm9zbGljX3dyaXRlX3JlZ2lzdGVyX3ByaXZhdGUodm9pZCAqaEN0cmwsIHVJbnQ4IGNoYW5uZWwsIHVJbnQ4IHJlZ0FkZHIsIHVJbnQ4IGRhdGEpCit7CisgIHVfaW50OF90IGRhdGFfc3RyZWFtWzRdOworICAvL3N0cnVjdCBzcGlfZGV2aWNlICpzcGlfZGF0YSA9IChzdHJ1Y3Qgc3BpX2RldmljZSAqKWhDdHJsOworCisjaWYgUFJPU0xJQ19YRkVSX0JVRiAhPSA0CisgIGludCBpOworI2VuZGlmCisKKyAgaWYoIHVubGlrZWx5KGNoYW5uZWwgPT0gUFJPU0xJQ19CQ0FTVCkgKQorICB7CisgICAgZGF0YV9zdHJlYW1bUFJPU0xJQ19DV19CWVRFXSA9IFBST1NMSUNfQ1dfQkNBU1QgfCBQUk9TTElDX0NXX1dSOworICB9CisgIGVsc2UgaWYoIHVubGlrZWx5KGNoYW5uZWwgPj0gU0lMQUJTX01BWF9DSEFOTkVMUykgKQorICB7CisgICAgcmV0dXJuIFBST1NMSUNfU1BJX05PSzsKKyAgfQorICBlbHNlCisgIHsKKyAgICBkYXRhX3N0cmVhbVtQUk9TTElDX0NXX0JZVEVdID0gUFJPU0xJQ19DV19XUiB8IGNoYW5BZGRyW2NoYW5uZWxdOworICB9ICAKKworICBwcm9zbGljX3RyYWNlKCIlcyglZCk6IGNoYW4gPSAldSByZWcgPSAldSBkYXRhID0gMHglMDJYIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgY2hhbm5lbCwgcmVnQWRkciwgZGF0YSk7CisKKyAgZGF0YV9zdHJlYW1bUFJPU0xJQ19SRUdfQllURV0gPSByZWdBZGRyOworCisgIGRhdGFfc3RyZWFtWzJdID0gZGF0YV9zdHJlYW1bM10gPSBkYXRhOworCisjaWYgUFJPU0xJQ19YRkVSX0JVRiA9PSA0CisgIHNwaV93cml0ZShwcm9zbGljX3NwaWRldiwgZGF0YV9zdHJlYW0sIFBST1NMSUNfWEZFUl9CVUYpOworI2Vsc2UKKyNpZiBQUk9TTElDX1hGRVJfQlVGID09IDIgLyogMTYgYml0IG1vZGUgKi8KKyAgZm9yKGkgPSAwOyBpIDwgNDsgaSs9MikKKyNlbHNlIC8qIEJ5dGUgYnkgYnl0ZSAqLworICBmb3IoaSA9IDA7IGkgPCAzOyBpKyspCisjZW5kaWYKKyAgeworICAgIHNwaV93cml0ZShwcm9zbGljX3NwaWRldiwgJmRhdGFfc3RyZWFtW2ldLCBQUk9TTElDX1hGRVJfQlVGKTsKKyAgfQorI2VuZGlmICAKKworICByZXR1cm4gUFJPU0xJQ19TUElfT0s7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgUFJPU0xJQ19YRkVSX0JVRiAhPSA0CitpbnQgcHJvc2xpY193cml0ZV9yZWdpc3Rlcih2b2lkICpoQ3RybCwgdUludDggY2hhbm5lbCwgdUludDggcmVnQWRkciwgdUludDggZGF0YSkKK3sKKyAgdW5zaWduZWQgbG9uZyBpcnFTZXR0aW5nczsKKyAgaW50IHJjOworICAvL3Byb3NsaWNfc3BpX2RhdGFfdCAqc3BpX2RhdGEgPSAocHJvc2xpY19zcGlfZGF0YV90ICopaEN0cmw7CisgIC8vc3Bpbl9sb2NrX2lycXNhdmUoJnNwaV9kYXRhLT5idXNfbG9jaywgaXJxU2V0dGluZ3MpOworICByYyAgPSBwcm9zbGljX3dyaXRlX3JlZ2lzdGVyX3ByaXZhdGUoaEN0cmwsIGNoYW5uZWwsIHJlZ0FkZHIsIGRhdGEpOworICAvL3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNwaV9kYXRhLT5idXNfbG9jaywgaXJxU2V0dGluZ3MpOworICByZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MKHByb3NsaWNfd3JpdGVfcmVnaXN0ZXIpOworI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogCisgKiB3YWl0IGZvciBSQU0gYWNjZXNzCisgKgorICogcmV0dXJuIGNvZGUgMCA9IE9LCisgKgorICovCisKK3N0YXRpYyBpbnQgd2FpdF9yYW0odm9pZCAqaEN0cmwsIHVJbnQ4IGNoYW5uZWwpCit7CisgIHVuc2lnbmVkIGludCBjb3VudCA9IFNJTEFCU19NQVhfUkFNX1dBSVQ7CisgIHVJbnQ4IGRhdGE7CisKKyAgZG8KKyAgeyAKKyAgICBkYXRhID0gcHJvc2xpY19yZWFkX3JlZ2lzdGVyX3ByaXZhdGUoaEN0cmwsIGNoYW5uZWwsIFBST1NMSUNfUkVHX1JBTV9XQUlUKSAmIDB4MTsKKyAgICBpZih1bmxpa2VseShkYXRhKSkKKyAgICB7CisgICAgIG1kZWxheSg1KTsKKyAgICB9ICAKKyAgfXdoaWxlKChkYXRhKSAmJiAoY291bnQtLSkpOworCisgIGlmKGxpa2VseShjb3VudCkpCisgIHsKKyAgICByZXR1cm4gMDsKKyAgfQorICByZXR1cm4gLTE7IC8qIFRpbWVkIG91dCAqLworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBSQU0gV3JpdGUgd3JhcHBlciAqLworaW50IHByb3NsaWNfd3JpdGVfcmFtKHZvaWQgKmhDdHJsLCB1SW50OCBjaGFubmVsLCB1SW50MTYgcmFtQWRkciwgcmFtRGF0YSBkYXRhICkKK3sKKworICByYW1EYXRhIG15RGF0YSA9IGRhdGE7CisgIGludCByYyA9IDA7CisgIC8vdW5zaWduZWQgbG9uZyBpcnFTZXR0aW5nczsKKyAgLy9zdHJ1Y3Qgc3BpX2RldmljZSAqc3BpX2RhdGEgPSAoc3RydWN0IHNwaV9kZXZpY2UgKiloQ3RybDsKKyAgaEN0cmwgPSBwcm9zbGljX3NwaWRldjsKKworICBwcm9zbGljX3RyYWNlKCIlcyglZCk6IGNoYW4gPSAldSByYW0gPSAldSBkYXRhID0gMHglMDhYIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgY2hhbm5lbCwgcmFtQWRkciwgZGF0YSk7CisgIC8vc3Bpbl9sb2NrX2lycXNhdmUoJnNwaV9kYXRhLT5idXNfbG9jaywgaXJxU2V0dGluZ3MpOworCisgIGlmKHdhaXRfcmFtKGhDdHJsLGNoYW5uZWwpICE9IDApCisgIHsKKyAgICByZXR1cm4gUFJPU0xJQ19TUElfTk9LOworICB9CisKKyAKKyNpZmRlZiBTSUxBQlNfUkFNX0JMT0NLX0FDQ0VTUworICB7CisgICAgdUludDggcmFtV3JpdGVEYXRhWzI0XTsgLyogVGhpcyBlbmNhcHN1bGF0ZXMgdGhlIDYgcmVnIHdyaXRlcyBpbnRvIDEgYmxvY2sgKi8KKyAgICBjb25zdCB1SW50OCByZWdBZGRyWzZdID0ge1BST1NMSUNfUkVHX1JBTV9ISSwgUFJPU0xJQ19SRUdfUkFNX0QwLCBQUk9TTElDX1JFR19SQU1fRDEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPU0xJQ19SRUdfUkFNX0QyLCBQUk9TTElDX1JFR19SQU1fRDMsIFBST1NMSUNfUkVHX1JBTV9MT307CisgICAgaW50IGk7CisgICAgdUludDggc2NyYXRjaDsKKworICAgIC8qIFNldHVwIGNvbnRyb2wgd29yZCAmIHJlZ2lzdGVycyBmb3IgQUxMIHRoZSByZWcgYWNjZXNzICovCisgICAgc2NyYXRjaCA9IGNoYW5BZGRyW2NoYW5uZWxdIHwgUFJPU0xJQ19DV19XUjsKKworICAgIGZvcihpID0gMDsgaSA8IDY7IGkrKykKKyAgICB7CisgICAgICByYW1Xcml0ZURhdGFbKGk8PDIpXSAgICAgICA9IHNjcmF0Y2ggOyAKKyAgICAgIHJhbVdyaXRlRGF0YVsoaTw8MikrMV0gICAgID0gcmVnQWRkcltpXTsKKyAgICB9CisKKyAgICAvKiBGb3IgdGhlIGRhdGEsIHdlIHNlbmQgdGhlIHNhbWUgYnl0ZSB0d2ljZSB0byBrZWVwIHRoaW5ncyAzMiBiaXQgYWxpZ25lZCAqLworICAgIHJhbVdyaXRlRGF0YVsyXSA9IHJhbVdyaXRlRGF0YVszXSA9IFJBTV9BRFJfSElHSF9NQVNLKHJhbUFkZHIpOworCisgICAgcmFtV3JpdGVEYXRhWzZdID0gcmFtV3JpdGVEYXRhWzddID0gKHVJbnQ4KShteURhdGE8PDMpOworICAgIG15RGF0YSA9IG15RGF0YSA+PiA1OworCisgICAgcmFtV3JpdGVEYXRhWzEwXSA9IHJhbVdyaXRlRGF0YVsxMV0gPSAodUludDgpKG15RGF0YSAmIDB4RkYpOworICAgIG15RGF0YSA9IG15RGF0YSA+PiA4OworCisgICAgcmFtV3JpdGVEYXRhWzE0XSA9IHJhbVdyaXRlRGF0YVsxNV0gPSAodUludDgpKG15RGF0YSAmIDB4RkYpOworICAgIG15RGF0YSA9IG15RGF0YSA+PiA4OworCisgICAgcmFtV3JpdGVEYXRhWzE4XSA9IHJhbVdyaXRlRGF0YVsxOV0gPSAodUludDgpKG15RGF0YSAmIDB4RkYpOworCisgICAgcmFtV3JpdGVEYXRhWzIyXSA9IHJhbVdyaXRlRGF0YVsyM10gPSAodUludDgpKHJhbUFkZHImIDB4RkYpOworCisgICAgc3BpX3dyaXRlKGhDdHJsLCByYW1Xcml0ZURhdGEsIDI0KTsKKyAgICAKKyAgfQorI2Vsc2UKKyAgcHJvc2xpY193cml0ZV9yZWdpc3Rlcl9wcml2YXRlKGhDdHJsLCBjaGFubmVsLCBSQU1fQUREUl9ISSwgUkFNX0FEUl9ISUdIX01BU0socmFtQWRkcikpOworCisgIHByb3NsaWNfd3JpdGVfcmVnaXN0ZXJfcHJpdmF0ZShoQ3RybCwgY2hhbm5lbCwgUkFNX0RBVEFfQjAsICgodW5zaWduZWQgY2hhcikobXlEYXRhPDwzKSkpOworIAorICBteURhdGEgPSBteURhdGEgPj4gNTsKKworICBwcm9zbGljX3dyaXRlX3JlZ2lzdGVyX3ByaXZhdGUoaEN0cmwsIGNoYW5uZWwsIFJBTV9EQVRBX0IxLCAoKHVuc2lnbmVkIGNoYXIpKG15RGF0YSAmIDB4RkYpKSk7CisKKyAgbXlEYXRhID0gbXlEYXRhID4+IDg7CisgIAorICBwcm9zbGljX3dyaXRlX3JlZ2lzdGVyX3ByaXZhdGUoaEN0cmwsIGNoYW5uZWwsIFJBTV9EQVRBX0IyLCAoKHVuc2lnbmVkIGNoYXIpKG15RGF0YSAmIDB4RkYpKSk7CisKKyAgbXlEYXRhID0gbXlEYXRhID4+IDg7CisgIAorICBwcm9zbGljX3dyaXRlX3JlZ2lzdGVyX3ByaXZhdGUoaEN0cmwsIGNoYW5uZWwsIFJBTV9EQVRBX0IzLCAoKHVuc2lnbmVkIGNoYXIpKG15RGF0YSAmIDB4RkYpKSk7CisKKyAgcHJvc2xpY193cml0ZV9yZWdpc3Rlcl9wcml2YXRlKGhDdHJsLCBjaGFubmVsLCBSQU1fQUREUl9MTywgKHVuc2lnbmVkIGNoYXIpKHJhbUFkZHIgJiAweEZGKSk7CisjZW5kaWYKKyAgaWYod2FpdF9yYW0oaEN0cmwsY2hhbm5lbCkgIT0gMCkKKyAgeworICAgIHJjID0gUFJPU0xJQ19TUElfTk9LOworICB9CisgIGVsc2UKKyAgeworICAgIHJjID0gUFJPU0xJQ19TUElfT0s7CisgIH0KKyAgLy9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcGlfZGF0YS0+YnVzX2xvY2ssIGlycVNldHRpbmdzKTsKKworICByZXR1cm4gcmM7CisgIAorfQorRVhQT1JUX1NZTUJPTChwcm9zbGljX3dyaXRlX3JhbSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3JhbURhdGEgcHJvc2xpY19yZWFkX3JhbSh2b2lkICpoQ3RybCwgdUludDggY2hhbm5lbCwgdUludDE2IHJhbUFkZHIpCit7CisgIHJhbURhdGEgZGF0YTsKKyAgLy91bnNpZ25lZCBsb25nIGlycVNldHRpbmdzOworICAvL3Byb3NsaWNfc3BpX2RhdGFfdCAqc3BpX2RhdGEgPSAocHJvc2xpY19zcGlfZGF0YV90ICopaEN0cmw7CisgIGhDdHJsID0gcHJvc2xpY19zcGlkZXY7CisKKyAgaWYod2FpdF9yYW0oaEN0cmwsY2hhbm5lbCkgIT0gMCkKKyAgeworICAgIHJldHVybiBQUk9TTElDX1NQSV9OT0s7CisgIH0KKworICAvL3NwaW5fbG9ja19pcnFzYXZlKCZzcGlfZGF0YS0+YnVzX2xvY2ssIGlycVNldHRpbmdzKTsKKyAgLyogVE9ETzogY291bGQgY29tYmluZSB0aGVzZSAyIHdyaXRlcyBpbnRvIDEgc3BpX3dyaXRlIGNhbGwuLi4gKi8KKyAgcHJvc2xpY193cml0ZV9yZWdpc3Rlcl9wcml2YXRlKGhDdHJsLCBjaGFubmVsLCBQUk9TTElDX1JFR19SQU1fSEksIFJBTV9BRFJfSElHSF9NQVNLKHJhbUFkZHIpKTsKKworICBwcm9zbGljX3dyaXRlX3JlZ2lzdGVyX3ByaXZhdGUoaEN0cmwsIGNoYW5uZWwsIFBST1NMSUNfUkVHX1JBTV9MTywgKHVuc2lnbmVkIGNoYXIpKHJhbUFkZHImMHhGRikpOworCisgIGlmKHdhaXRfcmFtKGhDdHJsLGNoYW5uZWwpICE9IDApCisgIHsKKyAgICByZXR1cm4gUFJPU0xJQ19TUElfTk9LOworICB9CisKKyAgZGF0YSA9IHByb3NsaWNfcmVhZF9yZWdpc3Rlcl9wcml2YXRlKGhDdHJsLCBjaGFubmVsLCBQUk9TTElDX1JFR19SQU1fRDMpOworICBkYXRhID0gZGF0YSA8PCA4OworICBkYXRhIHw9IHByb3NsaWNfcmVhZF9yZWdpc3Rlcl9wcml2YXRlKGhDdHJsLCBjaGFubmVsLCBQUk9TTElDX1JFR19SQU1fRDIpOworICBkYXRhID0gZGF0YSA8PCA4OworICBkYXRhIHw9IHByb3NsaWNfcmVhZF9yZWdpc3Rlcl9wcml2YXRlKGhDdHJsLCBjaGFubmVsLCBQUk9TTElDX1JFR19SQU1fRDEpOworICBkYXRhID0gZGF0YSA8PCA4OworICBkYXRhIHw9IHByb3NsaWNfcmVhZF9yZWdpc3Rlcl9wcml2YXRlKGhDdHJsLCBjaGFubmVsLCBQUk9TTElDX1JFR19SQU1fRDApOworICAvL3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNwaV9kYXRhLT5idXNfbG9jaywgaXJxU2V0dGluZ3MpOworIAorICBkYXRhID0gZGF0YSA+PjM7CisKKyAgcHJvc2xpY190cmFjZSgiJXMoJWQpOiBjaGFuID0gJXUgcmFtID0gJXUgZGF0YSA9IDB4JTA4WCIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18sIGNoYW5uZWwsIHJhbUFkZHIsIGRhdGEpOworCisgIHJldHVybiBkYXRhOworCit9CitFWFBPUlRfU1lNQk9MKHByb3NsaWNfcmVhZF9yYW0pOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgcHJvc2xpY19yZXNldCh2b2lkICpoQ3RybCwgaW50IGluX3Jlc2V0KQoreworICBwcm9zbGljX3RyYWNlKCIlcyglZCk6IGluX3Jlc2V0ID0gJWQiLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCBpbl9yZXNldCk7CisgIGdwaW9fZGlyZWN0aW9uX291dHB1dChwcm9zbGljX3Jlc2V0X2dwaW8sIChpbl9yZXNldCA9PSAwKSApOworCisgIHJldHVybiBQUk9TTElDX1NQSV9PSzsKK30KK0VYUE9SVF9TWU1CT0wocHJvc2xpY19yZXNldCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIERvIGEgc2ltcGxlIHdyaXRlL3ZlcmlmeSB0ZXN0IG9uIGEgZ2l2ZW4gcmVnaXN0ZXIuICAwID0gT0suCisgKi8KK3N0YXRpYyBpbnQgc2ltcGxlX3dydih2b2lkICpoQ3RybCwgdUludDggY2hhbm5lbCwgdUludDggcmVnQWRkcikKK3sKKyAgdUludDggZGF0YTsKKworICBwcm9zbGljX3dyaXRlX3JlZ2lzdGVyKGhDdHJsLCBjaGFubmVsLCByZWdBZGRyLCAwKTsKKyAgZGF0YSA9IHByb3NsaWNfcmVhZF9yZWdpc3RlcihoQ3RybCwgY2hhbm5lbCwgcmVnQWRkcik7CisgIGlmKHVubGlrZWx5KGRhdGEgIT0gMCkgKQorICB7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgcHJvc2xpY193cml0ZV9yZWdpc3RlcihoQ3RybCwgY2hhbm5lbCwgcmVnQWRkciwgMHg1QSk7CisgIGRhdGEgPSBwcm9zbGljX3JlYWRfcmVnaXN0ZXIoaEN0cmwsIGNoYW5uZWwsIHJlZ0FkZHIpOworICBpZih1bmxpa2VseShkYXRhICE9IDB4NUEpICkKKyAgeworICAgIHJldHVybiAtMjsKKyAgfQorCisgIHJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIAorICogRGV0ZXJtaW5lIGlmIHRoaXMgYSBQcm9TTElDIG9yIERBQSBvciB1bmtub3duIHR5cGUgLSBOT1QgZnVsbHkgdGVzdGVkIGFnYWluc3QgQUxMIGNoaXBzZXRzLCBtYXkgbm90CisgKiBwcm9wZXJseSB3b3JrIHdpdGggU2kzMjE4LzkgcGFydHMuCisgKi8KK3N0YXRpYyBwcm9zbGljX2Rldl90IHByb3NsaWNfZGV0ZWN0X3R5cGUodm9pZCAqaEN0cmwsIHVJbnQ4IGNoYW5uZWwpCit7CisgIC8qIEd1ZXNzIGl0J3MgYSBQcm9TTElDIGZpcnN0ICovCisgIHVJbnQ4IGRhdGE7CisKKyAgZGF0YSA9IHByb3NsaWNfcmVhZF9yZWdpc3RlcihoQ3RybCwgY2hhbm5lbCwgUFJPU0xJQ19SRUdfSVNEQUEpOworICBwcm9zbGljX2RlYnVnKCIlcyglZCk6IGNoYW5uZWwgPSAlZCBkYXRhID0gMHglMFgiLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCBjaGFubmVsLCBkYXRhKTsKKworICAvKiBGb3IgUHJvU0xJQyBJU0RBQSA9IDUsIGZvciBEQUEgaXQgaXMgbm90IChpdCBpcyBub24temVybyBhbmQgbm90IEZGICovCisKKyAgaWYoIHVubGlrZWx5KChkYXRhICE9IDB4RkYpICYmIGRhdGEgKSkKKyAgeworICAgIC8qIExpa2VseSBhIFByb1NMSUMsIGxldCdzIGNvbmZpcm0gaXQgYnkgZG9pbmcgYSBmZXcgcmVnaXN0ZXIgd3JpdGUvdmVyaWZ5IG9wZXJhdGlvbnMgKi8KKyAgICBpZiggZGF0YSA9PSA1KSAKKyAgICB7CisgICAgICBpZih1bmxpa2VseShzaW1wbGVfd3J2KGhDdHJsLCBjaGFubmVsLCBQUk9TTElDX1JFR19XUlZTTElDKSA9PSAwKSkKKyAgICAgIHsKKyAgICAgICAgcHJvc2xpY19kZWJ1ZygiJXMoJWQpOiBjaGFubmVsID0gJWQgaXNfcHJvc2xpYyIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18sIGNoYW5uZWwpOworICAgICAgICByZXR1cm4gUFJPU0xJQ19JU19QUk9TTElDOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIC8qIExpa2VseSBhIERBQS9TaTMwNTAgZGV2aWNlICovCisgICAgeworICAgICAgaWYodW5saWtlbHkoc2ltcGxlX3dydihoQ3RybCwgY2hhbm5lbCwgUFJPU0xJQ19SRUdfV1JWREFBKSA9PSAwKSkKKyAgICAgIHsKKyAgICAgICAgcHJvc2xpY19kZWJ1ZygiJXMoJWQpOiBjaGFubmVsID0gJWQgaXNfZGFhIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgY2hhbm5lbCk7CisgICAgICAgIHJldHVybiBQUk9TTElDX0lTX0RBQTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBwcm9zbGljX2RlYnVnKCIlcyglZCk6IGNoYW5uZWwgPSAlZCBpc191bmtub3duIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgY2hhbm5lbCk7CisgIHJldHVybiBQUk9TTElDX0lTX1VOS05PV047Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICBQdWxsIGluIGFueSBkZXZpY2UgdHJlZSBwYXJhbWV0ZXJzICovCisjaWZkZWYgQ09ORklHX09GCitzdGF0aWMgdm9pZCBwcm9zbGljX29mX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisgIGludCBsZW47CisgIGNvbnN0IF9fYmUzMiAqcHJvcGVydHk7CisgIHU4IHNjcmF0Y2g7CisKKyAgcHJpbnRrKEtFUk5fSU5GTyAicHJvc2xpY19vZl9wcm9iZSgpXG4iKTsKKyAKKyAgLyogc2VlIGlmIHRoZSB1c2VyIHNwZWNpZmllZCBudW1iZXIgb2YgY2hhbm5lbHMgKi8KKyAgcHJvcGVydHkgPSBvZl9nZXRfcHJvcGVydHkoIHNwaS0+ZGV2Lm9mX25vZGUsICJjaGFubmVsX2NvdW50IiwgJmxlbik7IAorCisgIGlmKHByb3BlcnR5ICYmIChsZW4gPj0gc2l6ZW9mKF9fYmUzMikpICkKKyAgeworICAgIHNjcmF0Y2ggPSBiZTMyX3RvX2NwdXAocHJvcGVydHkpOworCisgICAgaWYoKCBzY3JhdGNoIDw9IFNJTEFCU19NQVhfQ0hBTk5FTFMgKSAKKyAgICAgICYmIChzY3JhdGNoID4gMCkgKQorICAgIHsKKyAgICAgICAgcHJvc2xpY19jaGFubmVsX2NvdW50ID0gc2NyYXRjaDsKKyAgICB9CisgIH0KKworICAvKiBTZWUgaWYgdGhlIHVzZXIgc3BlY2lmaWVkIGEgZGVidWcgc2V0dGluZyAqLworICBwcm9wZXJ0eSA9IG9mX2dldF9wcm9wZXJ0eSggc3BpLT5kZXYub2Zfbm9kZSwgImRlYnVnX2xldmVsIiwgJmxlbik7IAorCisgIGlmKHByb3BlcnR5ICYmIChsZW4gPj0gc2l6ZW9mKF9fYmUzMikpICkKKyAgeworICAgIHNjcmF0Y2ggPSBiZTMyX3RvX2NwdXAocHJvcGVydHkpOworCisgICAgaWYoKCBzY3JhdGNoIDw9IFNJTEFCU19ERUZBVUxUX0RCRyApIAorICAgICAgJiYgKHNjcmF0Y2ggPiAwKSApCisgICAgeworICAgICAgICBwcm9zbGljX2RlYnVnX3NldHRpbmcgPSBzY3JhdGNoOworICAJcHJpbnRrKEtFUk5fSU5GTyAiZGVidWdfbGV2ZWwgPSAlZFxuIiwgcHJvc2xpY19kZWJ1Z19zZXR0aW5nKTsKKyAgICB9CisgIH0KKworICBwcmludGsoS0VSTl9JTkZPICJbcHJldmlvdXNdcmVzZXRfZ3BpbyA9ICVkXG4iLCBwcm9zbGljX3Jlc2V0X2dwaW8pOworICBwcm9zbGljX3Jlc2V0X2dwaW8gPQorCSAgb2ZfZ2V0X25hbWVkX2dwaW8oc3BpLT5kZXYub2Zfbm9kZSwgInJlc2V0X2dwaW8iLCAwKTsKKworICBwcmludGsoS0VSTl9JTkZPICJyZXNldF9ncGlvID0gJWRcbiIsIHByb3NsaWNfcmVzZXRfZ3Bpbyk7Cit9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IHByb3NsaWNfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBzcGlfZHJpdmVyICpzcGlfZHJ2KQoreworICBwcm9zbGljX3NwaV9wZm9ybV90ICpwZm9ybV9kYXRhOworICB1bnNpZ25lZCBpbnQgY2hhbm5lbDsKKyAgaW50IHJjOworCisgIHByaW50ayhLRVJOX0lORk8gIlBST1NMSUMgbW9kdWxlIGJlaW5nIHByb2JlZFxuIik7CisKKyAgcHJvc2xpY19zcGkgPSBzcGlfZHJ2OworICBwZm9ybV9kYXRhID0gKHByb3NsaWNfc3BpX3Bmb3JtX3QgKikgJihzcGktPmRldi5wbGF0Zm9ybV9kYXRhKTsKKworI2lmZGVmIENPTkZJR19PRgorICBwcm9zbGljX29mX3Byb2JlKHNwaSk7CisjZW5kaWYKKworICByYyA9IGdwaW9fcmVxdWVzdChwcm9zbGljX3Jlc2V0X2dwaW8sInByb3NsaWNfcmVzZXQiKTsKKyAgaWYocmMgPT0gMCkKKyAgeworICAgIHByaW50ayhLRVJOX0lORk8gIlBST1NMSUMgR1BJTyByZWdpc3RlcmVkIE9LIik7CisgICAgZ3Bpb19leHBvcnQoIHByb3NsaWNfcmVzZXRfZ3BpbywgMCk7CisgICAgcHJvc2xpY19yZXNldChOVUxMLCAwKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBwcmludGsoS0VSTl9JTkZPICJQUk9TTElDIEdQSU8gcmVnaXN0ZXJlZCBGQWlsISEgcmMgPSAlZCIsIHJjKTsKKyAgICByZXR1cm4gLUVOT0RFVjsKKyAgfQorCisgIGlmKHVubGlrZWx5KCFwZm9ybV9kYXRhKSkKKyAgeworICAgIHJldHVybiAtRU5PREVWOworICB9CisKKyAgcHJvc2xpY19kYXRhID0ga3phbGxvYyhzaXplb2YoKnByb3NsaWNfZGF0YSksIEdGUF9LRVJORUwpOworCisgIGlmKHVubGlrZWx5KCFwcm9zbGljX2RhdGEpKQorICB7CisgICAgcmV0dXJuIC1FTk9NRU07CisgIH0KKworICBzcGluX2xvY2tfaW5pdCgmKHByb3NsaWNfZGF0YS0+YnVzX2xvY2spKTsKKyAgcHJvc2xpY19zcGlkZXYgPSBzcGk7CisjaWZkZWYgQ09ORklHX09GIAorICBzcGktPmJpdHNfcGVyX3dvcmQgPSBTSUxBQlNfQklUU19QRVJfV09SRDsgCisgIHNwaS0+bWF4X3NwZWVkX2h6ID0gIFNJTEFCU19TUElfUkFURTsKKyAgc3BpLT5tb2RlID0gU1BJX01PREVfMzsKKyAgaWYoIHNwaV9zZXR1cChzcGkpICE9IDApCisgIHsKKyAgICBwcmludGsoS0VSTl9FUlIgUFJPU0xJQ19BUElfSERSICJmYWlsZWQgdG8gY29uZmlndXJlIHNwaSBtb2RlIik7CisgICAga2ZyZWUocHJvc2xpY19kYXRhKTsKKyAgICByZXR1cm4gLUVJTzsKKyAgfQorI2VuZGlmCisgIHNwaV9zZXRfZHJ2ZGF0YShzcGksIHByb3NsaWNfZGF0YSk7CisKKyAgLyogUHJvYmUgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgREFBJ3Mgb3IgUHJvU0xJQydzIHByZXNlbnQgKi8KKyAgZm9yKGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgcHJvc2xpY19jaGFubmVsX2NvdW50OyBjaGFubmVsKyspCisgIHsKKyAgICBwcm9zbGljX2RhdGEtPmRldmljZVR5cGVbY2hhbm5lbF0gPSBwcm9zbGljX2RldGVjdF90eXBlKHByb3NsaWNfc3BpZGV2LCBjaGFubmVsKTsKKyAgICBpZiggcHJvc2xpY19kYXRhLT5kZXZpY2VUeXBlW2NoYW5uZWxdICE9IFBST1NMSUNfSVNfVU5LTk9XTikKKyAgICB7CisgICAgICBwcm9zbGljX2RhdGEtPmNoYW5uZWxfY291bnQrKzsKKyAgICB9CisgIH0KKworICBpZihwcm9zbGljX2RhdGEtPmNoYW5uZWxfY291bnQpCisgIHsKKyAgICByZXR1cm4gMDsKKyAgfQorICBlbHNlCisgIHsKKyAgICByZXR1cm4gLUVOWElPOworICB9Cit9CitFWFBPUlRfU1lNQk9MKHByb3NsaWNfc3BpX3Byb2JlKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IHByb3NsaWNfc3BpX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworICB2b2lkICpwdHI7CisKKyAgcHJpbnRrKEtFUk5fSU5GTyAiUHJvU0xJQyBtb2R1bGUgYmVpbmcgcmVtb3ZlZCIpOworICAvKiBKdXN0IHB1dCB0aGUgZGV2aWNlKHMpIGludG8gcmVzZXQgLSBhc3N1bWVzIDEgcmVzZXQgcGVyIFNQSSBkZXZpY2UgKi8KKyAgcHJvc2xpY19yZXNldChOVUxMLCAxKTsKKworICBwdHIgPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKKyAgaWYocHRyICE9IE5VTEwpCisgIHsKKyAgICBrZnJlZShwdHIpOworICB9CisKKyAgcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHByb3NsaWNfc3BpX3JlbW92ZSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBwcm9zbGljX3NwaV9zZXR1cCgpCit7CisgIGludCByYzsKKyAgcHJpbnRrKEtFUk5fSU5GTyAicHJvc2xpY19zcGlfc2V0dXAoKVxuIik7CisKKyAgcmMgPSBzcGlfcmVnaXN0ZXJfZHJpdmVyKHByb3NsaWNfc3BpKTsKKworICBpZihyYyAhPSAwKQorICB7CisgICAgcHJvc2xpY19lcnJvcigiJXMoJWQpOiBzcGlfcmVnaXN0ZXIgZHJpdmVyIHJldHVybmVkID0gJWQiLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCByYyk7CisgIH0KKyAgZWxzZQorICB7CisgICAgcHJvc2xpY19kZWJ1ZygiJXMoJWQpOiBzcGkgZHJpdmVyIHJlZ2lzdGVyZWQiLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKyAgfQorCisgIHByb3NsaWNfdHJhY2UoIiVzKCVkKTogY29tcGxldGVkIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisgIHJldHVybiByYzsKK30KKworCit2b2lkIHByb3NsaWNfc3BpX3NodXRkb3duKCkKK3sKKyAgc3BpX3VucmVnaXN0ZXJfZHJpdmVyKHByb3NsaWNfc3BpKTsKKyAgZ3Bpb191bmV4cG9ydCggcHJvc2xpY19yZXNldF9ncGlvICk7CisgIGdwaW9fZnJlZSggcHJvc2xpY19yZXNldF9ncGlvICk7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgcHJvc2xpY19nZXRfY2hhbm5lbF9jb3VudCgpCit7CisgIHJldHVybiBwcm9zbGljX2RhdGEtPmNoYW5uZWxfY291bnQ7Cit9CisKK3Byb3NsaWNfZGV2X3QgcHJvc2xpY19nZXRfZGV2aWNlX3R5cGUodWludDhfdCBjaGFubmVsX251bWJlcikKK3sKKyAgaWYoY2hhbm5lbF9udW1iZXIgPCBwcm9zbGljX2RhdGEtPmNoYW5uZWxfY291bnQpCisgIHsKKyAgICByZXR1cm4gcHJvc2xpY19kYXRhLT5kZXZpY2VUeXBlW2NoYW5uZWxfbnVtYmVyXTsKKyAgfQorICBlbHNlCisgIHsKKyAgICByZXR1cm4gUFJPU0xJQ19JU19VTktOT1dOOworICB9Cit9CisKK3ZvaWQgKnByb3NsaWNfZ2V0X2hDdHJsKHVpbnQ4X3QgY2hhbm5lbCkKK3sKKyAgaWYoY2hhbm5lbCA8IHByb3NsaWNfZGF0YS0+Y2hhbm5lbF9jb3VudCkKKyAgeworICAgIHJldHVybiBwcm9zbGljX2RhdGE7CisgIH0KKyAgZWxzZQorICB7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcHJvc2xpY19zcGlfZnB0cnNfdCBwcm9zbGljX3NwaV9pZiA9IAoreworICBwcm9zbGljX3Jlc2V0LCAKKworICBwcm9zbGljX3dyaXRlX3JlZ2lzdGVyLAorICBwcm9zbGljX3dyaXRlX3JhbSwKKworICBwcm9zbGljX3JlYWRfcmVnaXN0ZXIsCisgIHByb3NsaWNfcmVhZF9yYW0sCisKKyAgTlVMTCwgLyogc2VtYXBob3JlICovCisKK307CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9wcm9zbGljX3N5c190aW1lci5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvcHJvc2xpY19zeXNfdGltZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzFjYTFiCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvcHJvc2xpY19zeXNfdGltZXIuYwpAQCAtMCwwICsxLDYyIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVrZWVwaW5nLmg+CisKKyNpbmNsdWRlICJwcm9zbGljX3N5cy5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHByb3NsaWNfc3lzX2RlbGF5KHZvaWQgKmhUaW1lciwgaW50IHRpbWVJbk1zZWMpCit7CisJaWYobGlrZWx5KHRpbWVJbk1zZWMgPCBTSUxBQlNfTUlOX01TTEVFUF9USU1FKSkKKwl7CisJCW1kZWxheSh0aW1lSW5Nc2VjKTsKKwl9CisJZWxzZQorCXsKKwkJbXNsZWVwKCh0aW1lSW5Nc2VjLVNJTEFCU19NU0xFRVBfU0xPUCkpOworCX0KKwlyZXR1cm4gUFJPU0xJQ19TUElfT0s7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENvZGUgYXNzdW1lcyB0aW1lIHZhbHVlIGhhcyBiZWVuIGFsbG9jYXRlZCAqLworc3RhdGljIGludCBwcm9zbGljX3N5c19nZXRUaW1lKHZvaWQgKmhUaW1lciwgdm9pZCAqdGltZSkKK3sKKwlpZih0aW1lICE9IE5VTEwpCisJeworCQlrdGltZV9nZXRfY29hcnNlX3JlYWxfdHM2NCgmKChwcm9zbGljX3RpbWVTdGFtcCAqKXRpbWUpLT50aW1lck9iaik7CisJCXJldHVybiBQUk9TTElDX1NQSV9PSzsKKwl9CisJZWxzZQorCXsKKwkJcmV0dXJuIFBST1NMSUNfVElNRVJfRVJST1I7CisJfQorfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAorc3RhdGljIGludCBwcm9zbGljX3N5c190aW1lRWxhcHNlZCh2b2lkICpoVGltZXIsIHZvaWQgKnN0YXJ0VGltZSwgaW50ICp0aW1lSW5Nc2VjKQoreworCWlmKCAoc3RhcnRUaW1lICE9IE5VTEwpICYmICh0aW1lSW5Nc2VjICE9IE5VTEwpICkKKwl7CisJCXN0cnVjdCB0aW1lc3BlYzY0IG5vdzsKKwkJc3RydWN0IHRpbWVzcGVjNjQgdHNfZGVsdGE7CisJCWt0aW1lX2dldF9jb2Fyc2VfcmVhbF90czY0KCZub3cpOworCQl0c19kZWx0YSA9IHRpbWVzcGVjNjRfc3ViKG5vdywgKCgocHJvc2xpY190aW1lU3RhbXAgKikgc3RhcnRUaW1lKS0+dGltZXJPYmopKTsKKwkJKnRpbWVJbk1zZWMgPSAoaW50KSggKHRzX2RlbHRhLnR2X3NlYyAqMTAwMCkgKyAodHNfZGVsdGEudHZfbnNlYyAvIE5TRUNfUEVSX01TRUMpICk7CisJCXJldHVybiBQUk9TTElDX1NQSV9PSzsKKwl9CisJZWxzZQorCXsKKwkJcmV0dXJuIFBST1NMSUNfVElNRVJfRVJST1I7CisJfQorfQorCisKK3Byb3NsaWNfdGltZXJfZnB0cnNfdCBwcm9zbGljX3RpbWVyX2lmID0KK3sKKwlwcm9zbGljX3N5c19kZWxheSwKKwlwcm9zbGljX3N5c190aW1lRWxhcHNlZCwKKwlwcm9zbGljX3N5c19nZXRUaW1lCit9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvcHJvc2xpY190aW1lcl9pbnRmX2xpbnV4LmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9wcm9zbGljX3RpbWVyX2ludGZfbGludXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDhhMGRmCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvcHJvc2xpY190aW1lcl9pbnRmX2xpbnV4LmMKQEAgLTAsMCArMSw5MSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiAkSWQ6IHByb3NsaWNfdGltZXJfaW50Zl93aW4uYyAxMDkgMjAwOC0xMC0yMiAxOTo0NTowOVogbGFqb3JkYW5AU0lMQUJTLkNPTSAkCisgKgorICogc3lzdGVtLmMKKyAqIFN5c3RlbSBzcGVjaWZpYyBmdW5jdGlvbnMgaW1wbGVtZW50YXRpb24gZmlsZQorICoKKyAqIEF1dGhvcihzKTogCisgKiBsYWoKKyAqCisgKiBEaXN0cmlidXRlZCBieTogCisgKiBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jCisgKgorICogRmlsZSBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgaXMgdGhlIGltcGxlbWVudGF0aW9uIGZpbGUgZm9yIHRoZSBzeXN0ZW0gc3BlY2lmaWMgZnVuY3Rpb25zIGxpa2UgdGltZXIgZnVuY3Rpb25zLgorICoKKyAqIERlcGVuZGFuY2llczoKKyAqIGRhdGF0eXBlcy5oCisgKgorICovCisjaW5jbHVkZSAiY29uZmlnX2luYy9zaV92b2ljZV9kYXRhdHlwZXMuaCIKKyNpbmNsdWRlICJpbmMvc2lfdm9pY2VfdGltZXJfaW50Zi5oIgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSAidGltZXIuaCIKKy8vI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorIworLyoKKyoqIEZ1bmN0aW9uOiBTWVNURU1fVGltZXJJbml0CisqLwordm9pZCBUaW1lckluaXQgKHN5c3RlbVRpbWVyX1MgKnBUaW1lck9iail7CisKK30KKworCisvKgorKiogRnVuY3Rpb246IFNZU1RFTV9EZWxheQorKi8KK2ludCB0aW1lX0RlbGF5V3JhcHBlciAodm9pZCAqaFRpbWVyLCBpbnQgdGltZUluTXMpeworCW1kZWxheSh0aW1lSW5Ncyk7CisJcmV0dXJuIDA7Cit9CisKKworLyoKKyoqIEZ1bmN0aW9uOiBTWVNURU1fVGltZUVsYXBzZWQKKyovCitpbnQgdGltZV9UaW1lRWxhcHNlZFdyYXBwZXIgKHZvaWQgKmhUaW1lciwgdm9pZCAqc3RhcnRUaW1lLCBpbnQgKnRpbWVJbk1zKXsJKnRpbWVJbk1zID0gMTAwMDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyoqIEZ1bmN0aW9uOiBTWVNURU1fR2V0VGltZQorKi8KK2ludCB0aW1lX0dldFRpbWVXcmFwcGVyICh2b2lkICpoVGltZXIsIHZvaWQgKnRpbWUpeworLy8JdGltZS0+dGltZXN0YW1wPTA7CisJcmV0dXJuIDA7Cit9CisKKy8qCisqKiAkTG9nOiBwcm9zbGljX3RpbWVyX2ludGZfd2luLmMsdiAkCisqKiBSZXZpc2lvbiAxLjUgIDIwMDgvMDcvMjQgMjE6MDY6MTYgIGxham9yZGFuCisqKiBubyBtZXNzYWdlCisqKgorKiogUmV2aXNpb24gMS40ICAyMDA3LzAzLzIyIDE4OjUzOjQzICBsYWpvcmRhbgorKiogZml4ZWQgd2FybmluZ2cKKyoqCisqKiBSZXZpc2lvbiAxLjMgIDIwMDcvMDIvMjYgMTY6NDY6MTYgIGxham9yZGFuCisqKiBjbGVhbmVkIHVwIHNvbWUgd2FybmluZ3MKKyoqCisqKiBSZXZpc2lvbiAxLjIgIDIwMDcvMDIvMTYgMjM6NTU6MDcgIGxham9yZGFuCisqKiBubyBtZXNzYWdlCisqKgorKiogUmV2aXNpb24gMS4xLjEuMSAgMjAwNi8wNy8xMyAyMDoyNjowOCAgbGFqb3JkYW4KKyoqIG5vIG1lc3NhZ2UKKyoqCisqKiBSZXZpc2lvbiAxLjEgIDIwMDYvMDcvMDcgMjE6Mzg6NTYgIGxham9yZGFuCisqKiBubyBtZXNzYWdlCisqKgorKiogUmV2aXNpb24gMS4xLjEuMSAgMjAwNi8wNy8wNiAyMjowNjoyMyAgbGFqb3JkYW4KKyoqIG5vIG1lc3NhZ2UKKyoqCisqKiBSZXZpc2lvbiAxLjEgIDIwMDYvMDYvMjkgMTk6MTc6MjEgIGxhagorKiogbm8gbWVzc2FnZQorKioKKyoqIFJldmlzaW9uIDEuMSAgMjAwNi8wNi8yMSAyMjo0MjoyNiAgbGFqCisqKiBuZXcgYXBpIHN0eWxlCisqKgorKioKKyovCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9zaTMyMTh4LmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9zaTMyMTh4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZiNjgxOAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL2NvZGVjcy9zaTMyMTh4L3NpMzIxOHguYwpAQCAtMCwwICsxLDM1NSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKworCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KKworI2luY2x1ZGUgInByb3NsaWNfc3lzLmgiCisjaW5jbHVkZSAic2kzMjE4eC5oIgorI2luY2x1ZGUgImluYy9wcm9zbGljLmgiCisjaW5jbHVkZSAidGltZXIuaCIKKworI2luY2x1ZGUgInNwaS5oIgorCisjaWZkZWYgU0kzMjE4WAorI2luY2x1ZGUgImluYy9zaTMyMTh4LmgiCisjaW5jbHVkZSAiaW5jL3NpMzIxOHhfaW50Zi5oIgorI2VuZGlmCisKKyNkZWZpbmUgTlVNQkVSX09GX0RFVklDRVMgMQorI2lmIGRlZmluZWQoU0kzMjE4WCkKKyNkZWZpbmUgQ0hBTl9QRVJfREVWSUNFIDEKKyNkZWZpbmUgTlVNQkVSX09GX0NIQU4gKE5VTUJFUl9PRl9ERVZJQ0VTKkNIQU5fUEVSX0RFVklDRSkKKyNkZWZpbmUgTlVNQkVSX09GX1BST1NMSUMgKE5VTUJFUl9PRl9DSEFOKQorI2RlZmluZSBQUk9TTElDX0RFVklDRV9UWVBFIFNJMzIxOFhfVFlQRQorI2VuZGlmCisKK3N0YXRpYyBpbnQgc2xpY19pbml0ID0gMDsKKworY3RybF9TIHNwaUdjaU9iajsgLyogVXNlcsKhwqZzIGNvbnRyb2wgaW50ZXJmYWNlIG9iamVjdCAqLworc3lzdGVtVGltZXJfUyB0aW1lck9iajsgLyogVXNlcsKhwqZzIHRpbWVyIG9iamVjdCAqLworY2hhblN0YXRlIHBvcnRzW05VTUJFUl9PRl9DSEFOXTsgLyogVXNlcsKhwqZzIGNoYW5uZWwgb2JqZWN0LCB3aGljaCBoYXMKKwkJCQkgICoqIGEgbWVtYmVyIGRlZmluZWQgYXMKKwkJCQkgICoqIHByb3NsaWNDaGFuVHlwZV9wdHIgUHJvT2JqOworCQkJCSAqLworLyogRGVmaW5lIFByb1NMSUMgY29udHJvbCBpbnRlcmZhY2Ugb2JqZWN0ICovCitjb250cm9sSW50ZXJmYWNlVHlwZSAqUHJvSFdJbnRmOworLyogRGVmaW5lIGFycmF5IG9mIFByb1NMSUMgZGV2aWNlIG9iamVjdHMgKi8KK1Byb3NsaWNEZXZpY2VUeXBlICpQcm9TTElDRGV2aWNlc1tOVU1CRVJfT0ZfUFJPU0xJQ107CisvKiBEZWZpbmUgYXJyYXkgb2YgUHJvU0xJQyBjaGFubmVsIG9iamVjdCBwb2ludGVycyAqLworcHJvc2xpY0NoYW5UeXBlX3B0ciBhcnJheU9mUHJvc2xpY0NoYW5zW05VTUJFUl9PRl9DSEFOXTsKKworc3RhdGljIGludCBQcm9TTElDX0hXSW5pdCh2b2lkKQoreworCWludDMyIGksIHJlc3VsdD0gMDsKKworCXByaW50ayAoIiVzKClcbiIsX19GVU5DVElPTl9fKTsKKwkvKgorCSoqIFN0ZXAgMTogKHJlcXVpcmVkKQorCSoqIENyZWF0ZSBQcm9TTElDIENvbnRyb2wgSW50ZXJmYWNlIE9iamVjdAorCSovCisJUHJvU0xJQ19jcmVhdGVDb250cm9sSW50ZXJmYWNlKCZQcm9IV0ludGYpOworCisJLyoKKwkqKiBTdGVwIDI6IChyZXF1aXJlZCkKKwkqKiBDcmVhdGUgUHJvU0xJQyBEZXZpY2UgT2JqZWN0cworCSovCisJZm9yKGk9MDtpPE5VTUJFUl9PRl9QUk9TTElDO2krKykKKwl7CisJCVByb1NMSUNfY3JlYXRlRGV2aWNlKCYoUHJvU0xJQ0RldmljZXNbaV0pKTsKKwl9CisKKwkvKgorCSoqIFN0ZXAgMzogKHJlcXVpcmVkKQorCSoqIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBQcm9TTElDIGNoYW5uZWwgb2JqZWN0cworCSoqIEFsc28gaW5pdGlhbGl6ZSBhcnJheSBwb2ludGVycyB0byB1c2VywqHCpnMgcHJvc2xpYyBjaGFubmVsIG9iamVjdAorCSoqIG1lbWJlcnMgdG8gc2ltcGxpZnkgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4KKwkqLworCWZvcihpPTA7aTxOVU1CRVJfT0ZfQ0hBTjtpKyspCisJeworCQlQcm9TTElDX2NyZWF0ZUNoYW5uZWwoJihwb3J0c1tpXS5Qcm9PYmopKTsKKwkJUHJvU0xJQ19TV0luaXRDaGFuKHBvcnRzW2ldLlByb09iaixpLFBST1NMSUNfREVWSUNFX1RZUEUsCisJCVByb1NMSUNEZXZpY2VzW2kvQ0hBTl9QRVJfREVWSUNFXSxQcm9IV0ludGYpOworCQlhcnJheU9mUHJvc2xpY0NoYW5zW2ldID0gcG9ydHNbaV0uUHJvT2JqOworCQlQcm9TTElDX3NldFNXRGVidWdNb2RlKHBvcnRzW2ldLlByb09iaixUUlVFKTsgLyogb3B0aW9uYWwgKi8KKwl9CisKKwkvKgorCSoqIFN0ZXAgNDogKHJlcXVpcmVkKQorCSoqIEVzdGFibGlzaCBsaW5rYWdlIGJldHdlZW4gaG9zdCBvYmplY3RzL2Z1bmN0aW9ucyBhbmQKKwkqKiBQcm9TTElDIEFQSQorCSovCisJUHJvU0xJQ19zZXRDb250cm9sSW50ZXJmYWNlQ3RybE9iaiAoUHJvSFdJbnRmLCAmc3BpR2NpT2JqKTsKKwlQcm9TTElDX3NldENvbnRyb2xJbnRlcmZhY2VSZXNldCAoUHJvSFdJbnRmLCBjdHJsX1Jlc2V0V3JhcHBlcik7CisJUHJvU0xJQ19zZXRDb250cm9sSW50ZXJmYWNlV3JpdGVSZWdpc3RlciAoUHJvSFdJbnRmLCBjdHJsX1dyaXRlUmVnaXN0ZXJXcmFwcGVyKTsKKwlQcm9TTElDX3NldENvbnRyb2xJbnRlcmZhY2VSZWFkUmVnaXN0ZXIgKFByb0hXSW50ZiwgY3RybF9SZWFkUmVnaXN0ZXJXcmFwcGVyKTsKKwlQcm9TTElDX3NldENvbnRyb2xJbnRlcmZhY2VXcml0ZVJBTSAoUHJvSFdJbnRmLCBjdHJsX1dyaXRlUkFNV3JhcHBlcik7CisJUHJvU0xJQ19zZXRDb250cm9sSW50ZXJmYWNlUmVhZFJBTSAoUHJvSFdJbnRmLCBjdHJsX1JlYWRSQU1XcmFwcGVyKTsKKwlQcm9TTElDX3NldENvbnRyb2xJbnRlcmZhY2VUaW1lck9iaiAoUHJvSFdJbnRmLCAmdGltZXJPYmopOworCVByb1NMSUNfc2V0Q29udHJvbEludGVyZmFjZURlbGF5IChQcm9IV0ludGYsIHRpbWVfRGVsYXlXcmFwcGVyKTsKKwlQcm9TTElDX3NldENvbnRyb2xJbnRlcmZhY2VUaW1lRWxhcHNlZCAoUHJvSFdJbnRmLCB0aW1lX1RpbWVFbGFwc2VkV3JhcHBlcik7CisJUHJvU0xJQ19zZXRDb250cm9sSW50ZXJmYWNlR2V0VGltZSAoUHJvSFdJbnRmLCB0aW1lX0dldFRpbWVXcmFwcGVyKTsKKwlQcm9TTElDX3NldENvbnRyb2xJbnRlcmZhY2VTZW1hcGhvcmUgKFByb0hXSW50ZiwgTlVMTCk7CisKKwkvKgorCSoqIFN0ZXAgNTogKHN5c3RlbSBkZXBlbmRlbnQpCisJKiogQXNzZXJ0IGhhcmR3YXJlIFJlc2V0IMKhViBlbnN1cmUgVkRELCBQQ0xLLCBhbmQgRlNZTkMgYXJlIHByZXNlbnQgYW5kIHN0YWJsZQorCSoqIGJlZm9yZSByZWxlYXNpbmcgcmVzZXQKKwkqLworCVByb1NMSUNfUmVzZXQocG9ydHNbMF0uUHJvT2JqKTsKKworCS8qCisJKiogU3RlcCA2OiAocmVxdWlyZWQpCisJKiogSW5pdGlhbGl6ZSBkZXZpY2UgKGxvYWRpbmcgb2YgZ2VuZXJhbCBwYXJhbWV0ZXJzLCBjYWxpYnJhdGlvbnMsCisJKiogZGMtZGMgcG93ZXJ1cCwgZXRjLikKKwkqLworCVByb1NMSUNfSW5pdChhcnJheU9mUHJvc2xpY0NoYW5zLE5VTUJFUl9PRl9DSEFOKTsKKwlmb3IoaT0wO2k8TlVNQkVSX09GX0NIQU47aSsrKQorCXsKKwkJaWYoYXJyYXlPZlByb3NsaWNDaGFuc1tpXS0+ZXJyb3IhPTApCisJCXsKKwkJCXByaW50aygiUHJvU0xJQ19Jbml0WyVkXSBFUlI9JWRcbiIsaSxhcnJheU9mUHJvc2xpY0NoYW5zW2ldLT5lcnJvcik7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCisJLyoKKwkqKiBTdGVwIDc6IChkZXNpZ24gZGVwZW5kZW50KQorCSoqIEV4ZWN1dGUgbG9uZ2l0dWRpbmFsIGJhbGFuY2UgY2FsaWJyYXRpb24KKwkqKiBvciByZWxvYWQgY29lZmZpY2llbnRzIGZyb20gZmFjdG9yeSBMQiBjYWwKKwkqKgorCSoqIE5vdGU6IGFsbCBiYXR0ZXJpZXMgc2hvdWxkIGJlIHVwIGFuZCBzdGFibGUgcHJpb3IgdG8KKwkqKiBleGVjdXRpbmcgdGhlIGxiIGNhbAorCSovCisJUHJvU0xJQ19MQkNhbChhcnJheU9mUHJvc2xpY0NoYW5zLE5VTUJFUl9PRl9DSEFOKTsKKwlmb3IoaT0wO2k8TlVNQkVSX09GX0NIQU47aSsrKQorCXsKKwkJUHJvU0xJQ19HZXRMQkNhbFJlc3VsdFBhY2tlZChhcnJheU9mUHJvc2xpY0NoYW5zW2ldLCAmcmVzdWx0KTsKKwkJcHJpbnRrKCJMQkNhbD0weCUwOFhcbiIscmVzdWx0KTsKKwl9CisKKwkvKgorCSoqIFN0ZXAgODogKGRlc2lnbiBkZXBlbmRlbnQpCisJKiogTG9hZCBjdXN0b20gY29uZmlndXJhdGlvbiBwcmVzZXRzKGdlbmVyYXRlZCB1c2luZworCSoqIFByb1NMSUMgQVBJIENvbmZpZyBUb29sKQorCSovCisJZm9yKGk9MDtpPE5VTUJFUl9PRl9DSEFOO2krKykKKwl7CisJCVByb1NMSUNfUENNVGltZVNsb3RTZXR1cChwb3J0c1tpXS5Qcm9PYmosMCwwKTsKKwkJUHJvU0xJQ19EQ0ZlZWRTZXR1cChwb3J0c1tpXS5Qcm9PYmosRENGRUVEXzQ4Vl8yME1BKTsKKwkJUHJvU0xJQ19SaW5nU2V0dXAocG9ydHNbaV0uUHJvT2JqLFJJTkdfRjIwXzQ1VlJNU18wVkRDX0xQUik7CisJCVByb1NMSUNfUENNU2V0dXAocG9ydHNbaV0uUHJvT2JqLFBDTV8xNkxJTl9XQik7IC8qIFBDTV9ERUZBVUxUX0NPTkZJRyAqLworCQlQcm9TTElDX1pzeW50aFNldHVwKHBvcnRzW2ldLlByb09iaixaU1lOXzYwMF8wXzBfMzBfMCk7CisJCVByb1NMSUNfVG9uZUdlblNldHVwKHBvcnRzW2ldLlByb09iaixUT05FR0VOX0ZDQ19ESUFMKTsKKwl9CisKKwlmb3IoaT0wO2k8TlVNQkVSX09GX0NIQU47aSsrKQorCXsKKwkJUHJvU0xJQ19QQ01TdGFydChwb3J0c1tpXS5Qcm9PYmopOworCX0KKwlmb3IoaT0wO2k8TlVNQkVSX09GX0NIQU47aSsrKQorCXsKKwkJUHJvU0xJQ19TZXRMaW5lZmVlZFN0YXR1cyhwb3J0c1tpXS5Qcm9PYmosTEZfRldEX0FDVElWRSk7CisJfQorCisJLyoKKwkqKiBTdGVwIDk6IChyZXF1aXJlZCkKKwkqKiBTTElDIHNldHRpbmdzIC0gc2V0IFRYX1NUQVJUIGFuZCBSWF9TVEFSVCB0byAxIGFuZAorCSoqIGRpc2FibGUgRnJlZS1SdW4gbW9kZS4KKwkqLworCVByb1NMSUNfV3JpdGVSZWcocG9ydHNbMF0uUHJvT2JqLCAxMiwgMSk7CisJUHJvU0xJQ19Xcml0ZVJlZyhwb3J0c1swXS5Qcm9PYmosIDE0LCAxKTsKKwlQcm9TTElDX1dyaXRlUmVnKHBvcnRzWzBdLlByb09iaiwgNDcsIDEpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgc2kzMjE4eF9jb21wb25lbnRfcHJvYmUoc3RydWN0IHNuZF9zb2NfY29tcG9uZW50ICpjb21wb25lbnQpCit7CisJZGV2X2luZm8oY29tcG9uZW50LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaTMyMTh4X2NvbXBvbmVudF9yZW1vdmUoc3RydWN0IHNuZF9zb2NfY29tcG9uZW50ICpjb21wb25lbnQpCit7CisJc3RydWN0IHNpMzIxOHhfY2hpcCAqY2hpcCA9IHNuZF9zb2NfY29tcG9uZW50X2dldF9kcnZkYXRhKGNvbXBvbmVudCk7CisKKwlkZXZfaW5mbyhjb21wb25lbnQtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwljaGlwLT5jb21wb25lbnQgPSBOVUxMOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgc2kzMjE4eF9jb21wb25lbnRfZGFwbV93aWRnZXRzW10gPSB7CisJU05EX1NPQ19EQVBNX0lOUFVUKCJWSU5QIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiVk9VVFAiKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIHNpMzIxOHhfY29tcG9uZW50X2RhcG1fcm91dGVzW10gPSB7CisJeyAiVk9VVFAiLCBOVUxMLCAiYWlmX3BsYXliYWNrIn0sCisJeyAiYWlmX2NhcHR1cmUiLCBOVUxMLCAiVklOUCJ9LAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzbGljX2NvbnRyb2xfc3RyW10gPSB7CisJIm9mZiIsICJvbiIKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gc2kzMjE4eF9zbGljX2VudW1bXSA9IHsKKwlTT0NfRU5VTV9TSU5HTEVfRVhUKEFSUkFZX1NJWkUoc2xpY19jb250cm9sX3N0ciksCisJCQkgICAgc2xpY19jb250cm9sX3N0ciksCit9OworCitzdGF0aWMgaW50IHNpMzIxOHhfaW5pdF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gc2xpY19pbml0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2kzMjE4eF9pbml0X3NldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJaWYgKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKSB7CisJCVByb1NMSUNfSFdJbml0KCk7CisJCXNsaWNfaW5pdCA9IDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2kzMjE4eF9yaW5nX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJaWYgKCFzbGljX2luaXQpCisJCXJldHVybiAwOworCisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPQorCQkoUHJvU0xJQ19SZWFkUmVnKHBvcnRzWzBdLlByb09iaiwzMCkgPT0gNCkgPyAxIDogMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaTMyMTh4X3Jpbmdfc2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlpZiAoIXNsaWNfaW5pdCkKKwkJcmV0dXJuIDA7CisKKwlpZiAodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pCisJCVByb1NMSUNfV3JpdGVSZWcocG9ydHNbMF0uUHJvT2JqLCAzMCwgNCk7CisJZWxzZQorCQlQcm9TTElDX1dyaXRlUmVnKHBvcnRzWzBdLlByb09iaiwgMzAsIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzaTMyMTh4X2NvbXBvbmVudF9zbmRfY29udHJvbHNbXSA9IHsKKwlTT0NfRU5VTV9FWFQoInByb3NsaWNfaW5pdCIsIHNpMzIxOHhfc2xpY19lbnVtWzBdLAorCQkJCSAgICAgc2kzMjE4eF9pbml0X2dldCwgc2kzMjE4eF9pbml0X3NldCksCisJU09DX0VOVU1fRVhUKCJwcm9zbGljX3JpbmciLCBzaTMyMTh4X3NsaWNfZW51bVswXSwKKwkJCQkgICAgIHNpMzIxOHhfcmluZ19nZXQsIHNpMzIxOHhfcmluZ19zZXQpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2NvbXBvbmVudF9kcml2ZXIgc2kzMjE4eF9jb21wb25lbnRfZHJpdmVyID0geworCS5wcm9iZSA9IHNpMzIxOHhfY29tcG9uZW50X3Byb2JlLAorCS5yZW1vdmUgPSBzaTMyMTh4X2NvbXBvbmVudF9yZW1vdmUsCisKKwkuY29udHJvbHMgPSBzaTMyMTh4X2NvbXBvbmVudF9zbmRfY29udHJvbHMsCisJLm51bV9jb250cm9scyA9IEFSUkFZX1NJWkUoc2kzMjE4eF9jb21wb25lbnRfc25kX2NvbnRyb2xzKSwKKwkuZGFwbV93aWRnZXRzID0gc2kzMjE4eF9jb21wb25lbnRfZGFwbV93aWRnZXRzLAorCS5udW1fZGFwbV93aWRnZXRzID0gQVJSQVlfU0laRShzaTMyMTh4X2NvbXBvbmVudF9kYXBtX3dpZGdldHMpLAorCS5kYXBtX3JvdXRlcyA9IHNpMzIxOHhfY29tcG9uZW50X2RhcG1fcm91dGVzLAorCS5udW1fZGFwbV9yb3V0ZXMgPSBBUlJBWV9TSVpFKHNpMzIxOHhfY29tcG9uZW50X2RhcG1fcm91dGVzKSwKKworCS5pZGxlX2JpYXNfb24gPSBmYWxzZSwKK307CisKK3N0YXRpYyBpbnQgc2kzMjE4eF9jb21wb25lbnRfYWlmX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcywgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCit7CisJaW50IHdvcmRfbGVuID0gcGFyYW1zX3BoeXNpY2FsX3dpZHRoKGh3X3BhcmFtcyk7CisJaW50IGF1ZF9iaXQgPSBwYXJhbXNfd2lkdGgoaHdfcGFyYW1zKTsKKworCWRldl9kYmcoZGFpLT5kZXYsICJmb3JtYXQ6IDB4JTA4eFxuIiwgcGFyYW1zX2Zvcm1hdChod19wYXJhbXMpKTsKKwlkZXZfZGJnKGRhaS0+ZGV2LCAicmF0ZTogMHglMDh4XG4iLCBwYXJhbXNfcmF0ZShod19wYXJhbXMpKTsKKwlkZXZfZGJnKGRhaS0+ZGV2LCAid29yZF9sZW46ICVkLCBhdWRfYml0OiAlZFxuIiwgd29yZF9sZW4sIGF1ZF9iaXQpOworCWlmICh3b3JkX2xlbiA+IDMyIHx8IHdvcmRfbGVuIDwgMTYpIHsKKwkJZGV2X2VycihkYWktPmRldiwgIm5vdCBzdXBwb3J0ZWQgd29yZCBsZW5ndGhcbiIpOworCQlyZXR1cm4gLUVOT1RTVVBQOworCX0KKworCWRldl9kYmcoZGFpLT5kZXYsICIlczogLS1cbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgc2kzMjE4eF9jb21wb25lbnRfYWlmX29wcyA9IHsKKwkuaHdfcGFyYW1zID0gc2kzMjE4eF9jb21wb25lbnRfYWlmX2h3X3BhcmFtcywKK307CisKKyNkZWZpbmUgU1RVQl9SQVRFUwlTTkRSVl9QQ01fUkFURV84MDAwXzE5MjAwMAorI2RlZmluZSBTVFVCX0ZPUk1BVFMJKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgXAorCQkJU05EUlZfUENNX0ZNVEJJVF9VMTZfTEUgfCBcCisJCQlTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSB8IFwKKwkJCVNORFJWX1BDTV9GTVRCSVRfVTI0X0xFIHwgXAorCQkJU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUgfCBcCisJCQlTTkRSVl9QQ01fRk1UQklUX1UzMl9MRSkKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9kcml2ZXIgc2kzMjE4eF9jb2RlY19kYWkgPSB7CisJLm5hbWUgPSAicHJvc2xpY19zcGktYWlmIiwKKwkucGxheWJhY2sgPSB7CisJCS5zdHJlYW1fbmFtZQk9ICJhaWZfcGxheWJhY2siLAorCQkuY2hhbm5lbHNfbWluCT0gMSwKKwkJLmNoYW5uZWxzX21heAk9IDIsCisJCS5yYXRlcwkJPSBTVFVCX1JBVEVTLAorCQkuZm9ybWF0cwk9IFNUVUJfRk9STUFUUywKKwl9LAorCS5jYXB0dXJlID0geworCQkuc3RyZWFtX25hbWUJPSAiYWlmX2NhcHR1cmUiLAorCQkuY2hhbm5lbHNfbWluCT0gMSwKKwkJLmNoYW5uZWxzX21heAk9IDIsCisJCS5yYXRlcyA9IFNUVUJfUkFURVMsCisJCS5mb3JtYXRzID0gU1RVQl9GT1JNQVRTLAorCX0sCisJLyogZGFpIHByb3BlcnRpZXMgKi8KKwkuc3ltbWV0cmljX3JhdGVzID0gMSwKKwkuc3ltbWV0cmljX2NoYW5uZWxzID0gMSwKKwkuc3ltbWV0cmljX3NhbXBsZWJpdHMgPSAxLAorCS8qIGRhaSBvcGVyYXRpb25zICovCisJLm9wcyA9ICZzaTMyMTh4X2NvbXBvbmVudF9haWZfb3BzLAorfTsKKworaW50IHNpMzIxOHhfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBzcGlfZHJpdmVyICpzcGlfZHJ2KQoreworCWludCByZXQ7CisKKwlwcmludGsoS0VSTl9JTkZPICJQUk9TTElDIHNpMzIxOHhfc3BpX3Byb2JlXG4iKTsKKworCXJldCA9IHByb3NsaWNfc3BpX3Byb2JlKHNwaSxzcGlfZHJ2KTsKKworCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2NvbXBvbmVudCgmc3BpLT5kZXYsICZzaTMyMTh4X2NvbXBvbmVudF9kcml2ZXIsCisJCQkJICAgICAgJnNpMzIxOHhfY29kZWNfZGFpLCAxKTsKK30KK0VYUE9SVF9TWU1CT0woc2kzMjE4eF9zcGlfcHJvYmUpOworCitpbnQgc2kzMjE4eF9zcGlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJcHJvc2xpY19zcGlfcmVtb3ZlKHNwaSk7CisJc25kX3NvY191bnJlZ2lzdGVyX2NvbXBvbmVudCgmc3BpLT5kZXYpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHNpMzIxOHhfc3BpX3JlbW92ZSk7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9zaTMyMTh4LmggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9zaTMyMTh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZhNGQ0MgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL2NvZGVjcy9zaTMyMTh4L3NpMzIxOHguaApAQCAtMCwwICsxLDQ0IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworCisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgImluYy9wcm9zbGljLmgiCisjaW5jbHVkZSAidGltZXIuaCIKKyNpbmNsdWRlICJzcGkuaCIKKworI2lmIDEKKyNpbmNsdWRlICJpbmMvc2kzMjE4eC5oIgorI2luY2x1ZGUgImluYy9zaTMyMTh4X2ludGYuaCIKKyNpbmNsdWRlICJjb25maWdfaW5jL3NpMzIxOHhfTENDQl9jb25zdGFudHMuaCIKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBjaGFuU3RhdHVzIGNoYW5TdGF0ZTsgLy9mb3J3YXJkIGRlY2xhcmF0aW9uCisKK3R5cGVkZWYgdm9pZCAoKnByb2NTdGF0ZSkgKGNoYW5TdGF0ZSAqcFN0YXRlLCBQcm9zbGljSW50IGVJbnB1dCk7CisKKy8qCisqKiBzdHJ1Y3R1cmUgdG8gaG9sZCBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgcGJ4IGRlbW8KKyovCitzdHJ1Y3QgY2hhblN0YXR1cyB7CisgICAgICAgIHByb3NsaWNDaGFuVHlwZSAqUHJvT2JqOworICAgICAgICBTaVZvaWNlQ2hhblR5cGVfcHRyIFZvaWNlT2JqOworICAgICAgICB0aW1lU3RhbXAgb25Ib29rVGltZTsKKyAgICAgICAgdGltZVN0YW1wIG9mZkhvb2tUaW1lOworICAgICAgICBwcm9jU3RhdGUgY3VycmVudFN0YXRlOworICAgICAgICB1SW50MTYgZGlnaXRDb3VudDsKKyAgICAgICAgdUludDggZGlnaXRzWzIwXTsKKyAgICAgICAgdUludDggcmluZ0NvdW50OworICAgICAgICB1SW50MTYgY29ubmVjdGlvbldpdGg7CisgICAgICAgIHVJbnQxNiBwb3dlckFsYXJtQ291bnQ7CisgICAgICAgIHB1bHNlRGlhbFR5cGUgcHVsc2VEaWFsRGF0YTsKKyAgICAgICAgQk9PTEVBTiBldmVudEVuYWJsZTsKK30gIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMzIpKSk7CisKK3N0cnVjdCBzaTMyMTh4X2NoaXAgeworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGk7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBzbmRfc29jX2NvbXBvbmVudCAqY29tcG9uZW50OworfTsKKworLyogRXhwb3J0IGZ1bmN0aW9uICovCitpbnQgc2kzMjE4eF9zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IHNwaV9kcml2ZXIgKnNwaV9kcnYpOworaW50IHNpMzIxOHhfc3BpX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL2NvZGVjcy9zaTMyMTh4L3NwaS5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvc3BpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcyMGYzZgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL2NvZGVjcy9zaTMyMTh4L3NwaS5oCkBAIC0wLDAgKzEsODMgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisvKgorICogJElkOiBTUEkuaCAxMDkgMjAwOC0xMC0yMiAxOTo0NTowOVogbGFqb3JkYW5AU0lMQUJTLkNPTSAkCisgKiAKKyAqIFRoaXMgZmlsZSBpcyBzeXN0ZW0gc3BlY2lmaWMgYW5kIHNob3VsZCBiZSBlZGl0ZWQgZm9yIHlvdXIgaGFyZHdhcmUgcGxhdGZvcm0KKyAqCisgKiBUaGlzIGZpbGUgaXMgdXNlZCBieSBwcm9zbGljX3RpbWVyX2ludGYuaCBhbmQgcHJvc2xpY19zcGlHY2kuaAorICovCisjaWZuZGVmIFNQSV9UWVBFX0gKKyNkZWZpbmUgU1BJX1RZUEVfSAorCisvKgorKiogU1BJL0dDSSBzdHJ1Y3R1cmUKKyovCit0eXBlZGVmIHN0cnVjdHsKKwl1bnNpZ25lZCBzaG9ydCBwb3J0SUQ7Cit9IGN0cmxfUzsKKworLyoKKyoqIEZ1bmN0aW9uOiBTUElfSW5pdAorKioKKyoqIERlc2NyaXB0aW9uOiAKKyoqIEluaXRpYWxpemVzIHRoZSBTUEkgaW50ZXJmYWNlCisqLworaW50IFNQSV9Jbml0IChjdHJsX1MgKmhTcGkpOworCisKKy8qCisqKiBGdW5jdGlvbjogY3RybF9SZXNldFdyYXBwZXIKKyoqCisqKiBEZXNjcmlwdGlvbjogCisqKiBTZXRzIHRoZSByZXNldCBwaW4gb2YgdGhlIFByb1NMSUMKKyovCitpbnQgY3RybF9SZXNldFdyYXBwZXIgKHZvaWQgKmhDdHJsLCBpbnQgc3RhdHVzKTsKKworLyoKKyoqIHJlZ2lzdGVyIHJlYWQgCisqKgorKiogRGVzY3JpcHRpb246IAorKiogUmVhZHMgUHJvU0xJQyByZWdpc3RlcnMKKyovCit1bnNpZ25lZCBjaGFyIGN0cmxfUmVhZFJlZ2lzdGVyV3JhcHBlciAodm9pZCAqaEN0cmwsIHVuc2lnbmVkIGNoYXIgY2hhbm5lbCwgdW5zaWduZWQgY2hhciByZWdBZGRyKTsKKworLyoKKyoqIEZ1bmN0aW9uOiBjdHJsX1dyaXRlUmVnaXN0ZXJXcmFwcGVyCisqKgorKiogRGVzY3JpcHRpb246IAorKiogV3JpdGVzIFByb1NMSUMgcmVnaXN0ZXJzCisqLworaW50IGN0cmxfV3JpdGVSZWdpc3RlcldyYXBwZXIgKHZvaWQgKmhTcGlHY2ksIHVuc2lnbmVkIGNoYXIgY2hhbm5lbCwgdW5zaWduZWQgY2hhciByZWdBZGRyLCB1bnNpZ25lZCBjaGFyIGRhdGEpOworCisvKgorKiogRnVuY3Rpb246IGN0cmxfV3JpdGVSQU1XcmFwcGVyCisqKgorKiogRGVzY3JpcHRpb246IAorKiogV3JpdGVzIFByb1NMSUMgUkFNCisqLworaW50IGN0cmxfV3JpdGVSQU1XcmFwcGVyICh2b2lkICpoU3BpR2NpLCB1bnNpZ25lZCBjaGFyIGNoYW5uZWwsIHVuc2lnbmVkIHNob3J0IHJhbUFkZHIsIHJhbURhdGEgZGF0YSk7CisKKy8qCisqKiBGdW5jdGlvbjogY3RybF9SZWFkUkFNV3JhcHBlcgorKioKKyoqIERlc2NyaXB0aW9uOiAKKyoqIFJlYWRzIFByb1NMSUMgUkFNCisqLworcmFtRGF0YSBjdHJsX1JlYWRSQU1XcmFwcGVyICAodm9pZCAqaFNwaUdjaSwgdW5zaWduZWQgY2hhciBjaGFubmVsLCB1bnNpZ25lZCBzaG9ydCByYW1BZGRyKTsKKworI2VuZGlmCisvKgorKiogJExvZzogU1BJLmgsdiAkCisqKiBSZXZpc2lvbiAxLjIgIDIwMDcvMDIvMjEgMTY6NTM6MDcgIGxham9yZGFuCisqKiBubyBtZXNzYWdlCisqKgorKiogUmV2aXNpb24gMS4xICAyMDA3LzAyLzE2IDIzOjU1OjE1ICBsYWpvcmRhbgorKiogbm8gbWVzc2FnZQorKioKKyoqIFJldmlzaW9uIDEuMiAgMjAwNy8wMi8xNSAyMzozMzoyNSAgbGFqb3JkYW4KKyoqIG5vIG1lc3NhZ2UKKyoqCisqKiBSZXZpc2lvbiAxLjEuMS4xICAyMDA2LzA3LzEzIDIwOjI2OjA4ICBsYWpvcmRhbgorKiogbm8gbWVzc2FnZQorKioKKyovCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9zcmMvTWFrZWZpbGUgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9zcmMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkwNjNmZAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL2NvZGVjcy9zaTMyMTh4L3NyYy9NYWtlZmlsZQpAQCAtMCwwICsxLDE4IEBACisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisKKyMgcGxhdGZvcm0gZHJpdmVyCitzdWJkaXItY2NmbGFncy15ICs9IC1JLi4vaW5jCitzdWJkaXItY2NmbGFncy15ICs9IC1EU0kzMjE4WAorc3ViZGlyLWNjZmxhZ3MteSArPSAtRFBST1NMSUNfTElOVVhfS0VSTkVMCitzbmQtc29jLXByb2NzbGljLWNvbW1vbi1vYmpzIDo9IHByb3NsaWMubyBwcm9zbGljX3RzdGluLm8gc2lfdm9pY2UubyBzaV92b2ljZV92ZXJzaW9uLm8gc2kzMjE4eF9pbnRmLm8gdmRhYS5vIHNpMzIxN3hfaW50Zi5vIHNpMzIxN3hfcmV2Yl9pbnRmLm8gc2kzMjE3eF9yZXZjX2ludGYubyBzaTMyMTl4X2ludGYubyBzaTMyMjZ4X2ludGYubyBzaTMyMjh4X2ludGYubworCitvYmotJChDT05GSUdfU05EX1NPQ19TSTMyMThYKSArPSBzbmQtc29jLXByb3NsaWMtY29tbW9uLm8KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL2NvZGVjcy9zaTMyMTh4L3NyYy9wcm9zbGljLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9zcmMvcHJvc2xpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNzVjYzgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9zcmMvcHJvc2xpYy5jCkBAIC0wLDAgKzEsNDY1MSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBEaXN0cmlidXRlZCBieToKKyAqIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgcHJvcHJpZXRhcnkgaW5mb3JtYXRpb24uCisgKiBObyBkaXNzZW1pbmF0aW9uIGFsbG93ZWQgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbQorICogU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KKyAqCisgKiBGaWxlIERlc2NyaXB0aW9uOgorICogVGhpcyBpcyB0aGUgZ2VuZXJpYyBpbnRlcmZhY2UgZmlsZSBmb3IgdGhlIFByb1NMSUMgZHJpdmVycy4KKyAqCisgKiBDdXN0b21lcnMgc2hvdWxkIGJlIGNhbGxpbmcgdGhpcyBsZXZlbCBmb3IgUHJvU0xJQyBzcGVjaWZpYworICogZnVuY3Rpb25zICh2cy4gY2hpcHNldCBzcGVjaWZpYyB2ZXJzaW9ucyBvZiB0aGUgY29kZSkKKyAqCisgKi8KKworI2luY2x1ZGUgIi4uL2NvbmZpZ19pbmMvc2lfdm9pY2VfZGF0YXR5cGVzLmgiCisjaW5jbHVkZSAiLi4vaW5jL3NpX3ZvaWNlX2N0cmwuaCIKKyNpbmNsdWRlICIuLi9pbmMvc2lfdm9pY2VfdGltZXJfaW50Zi5oIgorI2luY2x1ZGUgIi4uL2luYy9wcm9zbGljLmgiCisjaW5jbHVkZSAiLi4vY29uZmlnX2luYy9wcm9zbGljX2FwaV9jb25maWcuaCIKKworI2lmZGVmIEVOQUJMRV9ERUJVRworI2RlZmluZSBMT0dQUklOVF9QUkVGSVggIlByb1NMSUM6IgorI2VuZGlmCisKKyNpZmRlZiBTSTMyMTdYCisjaW5jbHVkZSAic2kzMjE3eC5oIgorI2luY2x1ZGUgInNpMzIxN3hfaW50Zi5oIgorZXh0ZXJuIFNpMzIxN3hfR2VuZXJhbF9DZmcgU2kzMjE3eF9HZW5lcmFsX0NvbmZpZ3VyYXRpb247CisjaWZuZGVmIERJU0FCTEVfRlNLX1NFVFVQCitleHRlcm4gUHJvU0xJQ19GU0tfQ2ZnIFNpMzIxN3hfRlNLX1ByZXNldHNbXTsKKyNlbmRpZgorI2lmbmRlZiBESVNBQkxFX1RPTkVfU0VUVVAKK2V4dGVybiBQcm9TTElDX1RvbmVfQ2ZnIFNpMzIxN3hfVG9uZV9QcmVzZXRzW107CisjZW5kaWYKKworI2VuZGlmIC8qIDE3WCAqLworCisjaWZkZWYgU0kzMjE4WAorI2luY2x1ZGUgIi4uL2luYy9zaTMyMTh4LmgiCisjaW5jbHVkZSAiLi4vaW5jL3NpMzIxOHhfaW50Zi5oIgorZXh0ZXJuIFNpMzIxOHhfR2VuZXJhbF9DZmcgU2kzMjE4eF9HZW5lcmFsX0NvbmZpZ3VyYXRpb247CisjaWZuZGVmIERJU0FCTEVfRlNLX1NFVFVQCitleHRlcm4gUHJvU0xJQ19GU0tfQ2ZnIFNpMzIxOHhfRlNLX1ByZXNldHNbXTsKKyNlbmRpZgorI2lmbmRlZiBESVNBQkxFX1RPTkVfU0VUVVAKK2V4dGVybiBQcm9TTElDX1RvbmVfQ2ZnIFNpMzIxOHhfVG9uZV9QcmVzZXRzW107CisjZW5kaWYKKyNlbmRpZiAvKiAxOFggKi8gCisKKyNpZmRlZiBTSTMyMTlYCisjaW5jbHVkZSAic2kzMjE5eC5oIgorI2luY2x1ZGUgInNpMzIxOXhfaW50Zi5oIgorZXh0ZXJuIFNpMzIxOXhfR2VuZXJhbF9DZmcgU2kzMjE5eF9HZW5lcmFsX0NvbmZpZ3VyYXRpb247CisjaWZuZGVmIERJU0FCTEVfRlNLX1NFVFVQCitleHRlcm4gUHJvU0xJQ19GU0tfQ2ZnIFNpMzIxOXhfRlNLX1ByZXNldHNbXTsKKyNlbmRpZgorI2lmbmRlZiBESVNBQkxFX1RPTkVfU0VUVVAKK2V4dGVybiBQcm9TTElDX1RvbmVfQ2ZnIFNpMzIxOXhfVG9uZV9QcmVzZXRzW107CisjZW5kaWYKKyNlbmRpZiAvKiAxOVggKi8KKworI2lmZGVmIFNJMzIyNlgKKyNpbmNsdWRlICJzaTMyMjZ4LmgiCisjaW5jbHVkZSAic2kzMjI2eF9pbnRmLmgiCitleHRlcm4gU2kzMjI2eF9HZW5lcmFsX0NmZyBTaTMyMjZ4X0dlbmVyYWxfQ29uZmlndXJhdGlvbjsKKyNpZm5kZWYgRElTQUJMRV9GU0tfU0VUVVAKK2V4dGVybiBQcm9TTElDX0ZTS19DZmcgU2kzMjI2eF9GU0tfUHJlc2V0c1tdOworI2VuZGlmCisjaWZuZGVmIERJU0FCTEVfVE9ORV9TRVRVUAorZXh0ZXJuIFByb1NMSUNfVG9uZV9DZmcgU2kzMjI2eF9Ub25lX1ByZXNldHNbXTsKKyNlbmRpZgorI2VuZGlmIC8qIDI2WCAqLworCisjaWZkZWYgU0kzMjI4WAorI2luY2x1ZGUgInNpMzIyOHguaCIKKyNpbmNsdWRlICJzaTMyMjh4X2ludGYuaCIKK2V4dGVybiBTaTMyMjh4X0dlbmVyYWxfQ2ZnIFNpMzIyOHhfR2VuZXJhbF9Db25maWd1cmF0aW9uOworI2lmbmRlZiBESVNBQkxFX0ZTS19TRVRVUAorZXh0ZXJuIFByb1NMSUNfRlNLX0NmZyBTaTMyMjh4X0ZTS19QcmVzZXRzW107CisjZW5kaWYKKyNpZm5kZWYgRElTQUJMRV9UT05FX1NFVFVQCitleHRlcm4gUHJvU0xJQ19Ub25lX0NmZyBTaTMyMjh4X1RvbmVfUHJlc2V0c1tdOworI2VuZGlmCisKKyNlbmRpZiAvKiAyOFggKi8KKworI2RlZmluZSBwQ3RybChYKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFgpLT5kZXZpY2VJZC0+Y3RybEludGVyZmFjZQorI2RlZmluZSBwUHJvSFcoWCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEN0cmwoKFgpKS0+aEN0cmwKKyNkZWZpbmUgV3JpdGVSQU0oUENIQU4sIENIQU5ORUwsIFJBTUFERFIsIFJBTURBVEEpIChQQ0hBTiktPmRldmljZUlkLT5jdHJsSW50ZXJmYWNlLT5Xcml0ZVJBTV9mcHRyKHBQcm9IVyhQQ0hBTiksIChDSEFOTkVMKSwgKFJBTUFERFIpLCAoUkFNREFUQSkpCisjZGVmaW5lIFJlYWRSQU0oUENIQU4sIENIQU5ORUwsIFJBTUFERFIpICAgICAgICAgICAoUENIQU4pLT5kZXZpY2VJZC0+Y3RybEludGVyZmFjZS0+UmVhZFJBTV9mcHRyKHBQcm9IVyhQQ0hBTiksIChDSEFOTkVMKSwgKFJBTUFERFIpKQorI2RlZmluZSBTZXRTZW1hcGhvcmUoWCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFgpLT5kZXZpY2VJZC0+Y3RybEludGVyZmFjZS0+U2VtYXBob3JlX2ZwdHIKKyNkZWZpbmUgUmVhZFJlZyhQQ0hBTiwgQ0hBTk5FTCwgUkVHQUREUikgICAgICAgICAgIChQQ0hBTiktPmRldmljZUlkLT5jdHJsSW50ZXJmYWNlLT5SZWFkUmVnaXN0ZXJfZnB0cihwUHJvSFcoUENIQU4pLCAoQ0hBTk5FTCksIChSRUdBRERSKSkKKyNkZWZpbmUgV3JpdGVSZWcoUENIQU4sIENIQU5ORUwsIFJFR0FERFIsIFJFR0RBVEEpIChQQ0hBTiktPmRldmljZUlkLT5jdHJsSW50ZXJmYWNlLT5Xcml0ZVJlZ2lzdGVyX2ZwdHIocFByb0hXKFBDSEFOKSwgKENIQU5ORUwpLCAoUkVHQUREUiksIChSRUdEQVRBKSkKKworLyoKKyoqIFRpbWVycworKi8KKyNkZWZpbmUgVGltZUVsYXBzZWQgICBwUHJvc2xpYy0+ZGV2aWNlSWQtPmN0cmxJbnRlcmZhY2UtPnRpbWVFbGFwc2VkX2ZwdHIKKyNkZWZpbmUgZ2V0VGltZSAgICAgICBwUHJvc2xpYy0+ZGV2aWNlSWQtPmN0cmxJbnRlcmZhY2UtPmdldFRpbWVfZnB0cgorI2RlZmluZSBwUHJvVGltZXIJICAgIHBQcm9zbGljLT5kZXZpY2VJZC0+Y3RybEludGVyZmFjZS0+aFRpbWVyCisjZGVmaW5lIERlbGF5ICAgICAgICAgcFByb3NsaWMtPmRldmljZUlkLT5jdHJsSW50ZXJmYWNlLT5EZWxheV9mcHRyCisjZGVmaW5lIHBQcm9UaW1lclgoWCkJKChYKS0+ZGV2aWNlSWQtPmN0cmxJbnRlcmZhY2UtPmhUaW1lcikKKyNkZWZpbmUgRGVsYXlYKFgsWSkgICAoKFgpLT5kZXZpY2VJZC0+Y3RybEludGVyZmFjZS0+RGVsYXlfZnB0cihwUHJvVGltZXJYKFgpLFkpKQorCisjZGVmaW5lIFBST1NMSUNfVElNRU9VVF9EQ0RDX0RPV04gMjAwIC8qIE51bWJlciBvZiAxMCBtU2VjIHRpY2tzICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludDMyIFByb1NMSUNfUmVhZE1BRENTY2FsZWQocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYyx1SW50MTYgYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzIgc2NhbGUpCit7CisgIFRSQUNFUFJJTlQoaFByb3NsaWMsImFkZHI6ICV1IHNjYWxlOiAlbGRcbiIsIGFkZHIsIHNjYWxlKTsKKyNpZmRlZiBTSTMyMTdYCisgIGlmIChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIxNzEKKyAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjE3OSkKKyAgeworICAgIHJldHVybiBTaTMyMTd4X1JlYWRNQURDU2NhbGVkKGhQcm9zbGljLGFkZHIsc2NhbGUpOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIxOFgKKyAgaWYgKGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjE4MAorICAgICAgJiYgaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMTg5KQorICB7CisgICAgcmV0dXJuIFNpMzIxOHhfUmVhZE1BRENTY2FsZWQoaFByb3NsaWMsYWRkcixzY2FsZSk7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjE5WAorICBpZiAoIElTX1NJMzIxOVgoaFByb3NsaWMtPmRldmljZUlkKSApCisgIHsKKyAgICByZXR1cm4gU2kzMjE5eF9SZWFkTUFEQ1NjYWxlZChoUHJvc2xpYyxhZGRyLHNjYWxlKTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMjZYCisgIGlmIChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIyNjAKKyAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjI2OSkKKyAgeworICAgIHJldHVybiBTaTMyMjZ4X1JlYWRNQURDU2NhbGVkKGhQcm9zbGljLGFkZHIsc2NhbGUpOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIyOFgKKyAgaWYgKGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjI4MAorICAgICAgJiYgaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMjg5KQorICB7CisgICAgcmV0dXJuIFNpMzIyOHhfUmVhZE1BRENTY2FsZWQoaFByb3NsaWMsYWRkcixzY2FsZSk7CisgIH0KKyNlbmRpZgorCisgIHJldHVybiAtMTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcmFtRGF0YSBQcm9TTElDX1JlYWRSQU0ocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYyx1SW50MTYgYWRkcikKK3sKKyAgVFJBQ0VQUklOVChoUHJvc2xpYywgImFkZHI6ICV1XG4iLCBhZGRyKTsKKyAgaWYoaFByb3NsaWMtPmNoYW5uZWxUeXBlICE9IFBST1NMSUMpCisgIHsKKyAgICByZXR1cm4gUkNfSUdOT1JFOworICB9CisgIHJldHVybiAoUmVhZFJBTShoUHJvc2xpYywgaFByb3NsaWMtPmNoYW5uZWwsIGFkZHIpKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IFByb1NMSUNfV3JpdGVSQU0ocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYyx1SW50MTYgYWRkciwgcmFtRGF0YSBkYXRhKQoreworICBUUkFDRVBSSU5UKGhQcm9zbGljLCAiYWRkcjogJXUgZGF0YTogMHglMDRYXG4iLCBhZGRyLCBkYXRhKTsKKyAgaWYoaFByb3NsaWMtPmNoYW5uZWxUeXBlICE9IFBST1NMSUMpCisgIHsKKyAgICByZXR1cm4gUkNfSUdOT1JFOworICB9CisgIHJldHVybiAoV3JpdGVSQU0oaFByb3NsaWMsIGhQcm9zbGljLT5jaGFubmVsLCBhZGRyLGRhdGEpKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IFByb1NMSUNfUHJpbnREZWJ1Z0RhdGEocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYykKK3sKKyAgVFJBQ0VQUklOVChoUHJvc2xpYywgIlxuIiwgTlVMTCk7CisjaWZkZWYgRU5BQkxFX0RFQlVHCisgIFByb1NMSUNfUHJpbnREZWJ1Z1JlZyhoUHJvc2xpYyk7CisgIHJldHVybiBQcm9TTElDX1ByaW50RGVidWdSQU0oaFByb3NsaWMpOworI2Vsc2UKKyAgU0lMQUJTX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIoaFByb3NsaWMpOworICByZXR1cm4gUkNfTk9ORTsKKyNlbmRpZgorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgUHJvU0xJQ19QcmludERlYnVnUmVnKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMpCit7CisjaWZkZWYgRU5BQkxFX0RFQlVHCisgIHVJbnQ4IHJlZ0FkZHI7CisgIFRSQUNFUFJJTlQoaFByb3NsaWMsICJcbiIsIE5VTEwpOworCisgIC8qCisgICAgIE5PVEU6IE5vdCBhbGwgUHJvU0xJQ3MgaGF2ZSBkZWZpbmVkIHZhbHVlcyBhZnRlciBsb2NhdGlvbiA5OQorICAgICAoYW5kIGhhdmUgMSBsb2NhdGlvbiBhZnRlciB0aGF0KSwgYnV0IGZvciBzaW1wbGljaXR5LCB3ZSBwcmludCB0aGVtIGFueXdheS4uLgorICAqLworICBmb3IocmVnQWRkciA9IDA7IHJlZ0FkZHIgPCAxMjc7IHJlZ0FkZHIrKykKKyAgeworICAgIExPR1BSSU5UKCIlc1JlZ2lzdGVyICUwM3UgPSAweCUwMlhcbiIsIExPR1BSSU5UX1BSRUZJWCwgcmVnQWRkciwKKyAgICAgICAgICAgICBSZWFkUmVnKGhQcm9zbGljLCBoUHJvc2xpYy0+Y2hhbm5lbCwgcmVnQWRkcikpOworICB9CisjZWxzZQorICBTSUxBQlNfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihoUHJvc2xpYyk7CisjZW5kaWYKKworICByZXR1cm4gUkNfTk9ORTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTk9URTogbG9jYXRpb25zIGFib3ZlIDEwMjQgYXJlIHByb3RlY3RlZCwgdGhlIEFQSSBkaXNhYmxlcyBwcm90ZWN0aW9uIGR1cmluZyBpbml0aWFsaXphdGlvbiwgYnV0IGlmIHRoaXMKKyAgIGZ1bmN0aW9uIGlzIGNhbGxlZCBwcmlvciB0byBpbml0aWFsaXphdGlvbiwgdGhlbiBVQU0gaXMgbm90IHNldCBhbmQgd2lsbCBpbXBhY3QgdGhlIFJlYWRSQU0gY2FsbC4uLgorICAgVXBwZXIgbGltaXQgaXMgYmFzZWQgdXBvbiBjaGlwc2V0IHR5cGUuLi4KKyovCitpbnQgUHJvU0xJQ19QcmludERlYnVnUkFNKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMpCit7CisjaWZkZWYgRU5BQkxFX0RFQlVHCisgIHVJbnQxNiByYW1BZGRyOworICB1SW50MTYgbWF4QWRkcj0gMDsKKyAgVFJBQ0VQUklOVChoUHJvc2xpYywgIlxuIixOVUxMKTsKKworICBpZihoUHJvc2xpYy0+Y2hhbm5lbFR5cGUgIT0gUFJPU0xJQykKKyAgeworICAgIHJldHVybiBSQ19JR05PUkU7CisgIH0KKworI2lmZGVmIFNJMzIxN1gKKyAgaWYgKGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjE3MQorICAgICAgJiYgaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMTc5KQorICB7CisgICAgbWF4QWRkciA9IDE1OTY7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjE4WAorICBpZiAoaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMTgwCisgICAgICAmJiBoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIxODkpCisgIHsKKyAgICBtYXhBZGRyID0gMTY0NDsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMTlYCisgIGlmICggSVNfU0kzMjE5WChoUHJvc2xpYy0+ZGV2aWNlSWQpICkKKyAgeworICAgIG1heEFkZHIgPSAxNjQ0OworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIyNlgKKyAgaWYgKGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjI2MAorICAgICAgJiYgaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMjY5KQorICB7CisgICAgbWF4QWRkciA9IDE2NDY7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjI4WAorICBpZiAoaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMjgwCisgICAgICAmJiBoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIyODkpCisgIHsKKyAgICBtYXhBZGRyID0gMTY0NjsKKyAgfQorI2VuZGlmCisKKyAgZm9yKHJhbUFkZHIgPSAwOyByYW1BZGRyIDwgbWF4QWRkcjsgcmFtQWRkcisrKQorICB7CisgICAgTE9HUFJJTlQoIiVzUkFNICUwNHUgPSAweCUwOFhcbiIsIExPR1BSSU5UX1BSRUZJWCwgcmFtQWRkciwKKyAgICAgICAgICAgICAodW5zaWduZWQgaW50KShSZWFkUkFNKGhQcm9zbGljLCBoUHJvc2xpYy0+Y2hhbm5lbCwgcmFtQWRkcikpKTsKKyAgfQorI2Vsc2UKKyAgU0lMQUJTX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIoaFByb3NsaWMpOworI2VuZGlmIC8qIEVOQUJMRV9ERUJVRyAqLworICByZXR1cm4gUkNfTk9ORTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyoqIEZ1bmN0aW9uOiBpc1ZlcmlmaWVkUHJvc2xpYworKioKKyoqIERlc2NyaXB0aW9uOgorKiogRGV0ZXJtaW5lIGlmIERBQSBvciBQcm9TTElDIHByZXNlbnQKKyoqCisqKiBJbnB1dCBQYXJhbWV0ZXJzOgorKiogcFByb3NsaWM6IHBvaW50ZXIgdG8gUFJPU0xJQyBjaGFubmVsIG9iamVjdAorKioKKyoqIFJldHVybjoKKyoqIGNoYW5uZWxUeXBlCisqLworaW50IFByb1NMSUNfaWRlbnRpZnlDaGFubmVsVHlwZShwcm9zbGljQ2hhblR5cGUgKnBQcm9zbGljKQoreworICB1SW50OCBkYXRhOworICBUUkFDRVBSSU5UKHBQcm9zbGljLCAiXG4iLE5VTEwpOworICAvKgorICAqKiAgUmVnaXN0ZXIgMTMgKERBQSkgYWx3YXlzIGhhcyBiaXRzIDA6MSBzZXQgdG8gMCBhbmQgYml0IDYgc2V0IHRvIDEKKyAgKiogIFJlZ2lzdGVyIDEzIChQUk9TTElDKSBjYW4gaGF2ZSBiaXRzIDA6MSwgYW5kIDQgc2V0LCB3aGlsZSBhbGwgb3RoZXJzIGFyZSB1bmRlZmluZWQKKyAgKiogIFdyaXRlIDB4MTMgdG8gUmVnIDEzLiBUaGUgZm9sbG93aW5nIHJldHVybiB2YWx1ZXMgYXJlIGV4cGVjdGVkIC0KKyAgKioKKyAgKiogICAweDAwIG9yIDB4RkYgICAgOiAgICBObyBkZXZpY2UgcHJlc2VudAorICAqKiAgIDB4NFggICAgICAgICAgICA6ICAgIERBQQorICAqKiAgIDB4MTMgICAgICAgICAgICA6ICAgIFBST1NMSUMKKyAgKi8KKworICBXcml0ZVJlZyhwUHJvc2xpYyxwUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JFR19QQ01UWEhJLDB4MTMpOworICBEZWxheShwUHJvVGltZXIsNSk7CisKKyAgLyogTm93IGNoZWNrIGlmIHRoZSB2YWx1ZSB0b29rICovCisgIGRhdGEgPSBSZWFkUmVnKHBQcm9zbGljLHBQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkVHX1BDTVRYSEkpOworCisgIGlmKCBkYXRhID09IDB4MTMpCisgIHsKKyAgICByZXR1cm4gUFJPU0xJQzsKKyAgfQorICBlbHNlIGlmIChkYXRhID09IDB4NDApCisgIHsKKyAgICByZXR1cm4gREFBOworICB9CisgIGVsc2UKKyAgeworICAgIHJldHVybiBVTktOT1dOOworICB9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBQcm9TTElDX1ZlcmlmeUNvbnRyb2xJbnRlcmZhY2UocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYykKK3sKKyAgVFJBQ0VQUklOVChoUHJvc2xpYywgIlxuIixOVUxMKTsKKyAgaWYgKFByb1NMSUNfaWRlbnRpZnlDaGFubmVsVHlwZShoUHJvc2xpYykgIT0gUFJPU0xJQykKKyAgeworICAgIHJldHVybiBSQ19DSEFOTkVMX1RZUEVfRVJSOworICB9CisKKyAgLyogTm90ZTogUHJvU0xJQ19pZGVudGlmeUNoYW5uZWxUeXBlKCkgZGlkIGEgcmVnaXN0ZXIgdy9yIHRlc3QgZWFybGllciAqLworCisgIC8qIFZlcmlmeSBSQU0gcmQvd3Igd2l0aCBpbm5vY3VvdXMgUkFNIGxvY2F0aW9uICovCisgIFdyaXRlUkFNKGhQcm9zbGljLGhQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkFNX1ZFUklGWV9JTywweDEyMzQ1Njc4TCk7CisgIGlmIChSZWFkUkFNKGhQcm9zbGljLGhQcm9zbGljLT5jaGFubmVsLCBQUk9TTElDX1JBTV9WRVJJRllfSU8pICE9IDB4MTIzNDU2NzhMKQorICB7CisgICAgaFByb3NsaWMtPmVycm9yID0gUkNfU1BJX0ZBSUw7CisgICAgREVCVUdfUFJJTlQoaFByb3NsaWMsICIlc1Byb3NsaWMgJWQgUkFNIG5vdCBjb21tdW5pY2F0aW5nLiBSQU0gYWNjZXNzIGZhaWwuXG4iLAorICAgICAgICAgICAgICAgIExPR1BSSU5UX1BSRUZJWCwgaFByb3NsaWMtPmNoYW5uZWwpOworICAgIHJldHVybiBSQ19TUElfRkFJTDsKKyAgfQorICByZXR1cm4gUkNfTk9ORTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IFByb1NMSUNfVmVyaWZ5TWFzdGVyU3RhdChwcm9zbGljQ2hhblR5cGVfcHRyIHBQcm9zbGljKQoreworICB1SW50OCByZWdEYXRhOworCisgIFRSQUNFUFJJTlQocFByb3NsaWMsICJcbiIsIE5VTEwpOworICBXcml0ZVJlZyhwUHJvc2xpYyxwUHJvc2xpYy0+Y2hhbm5lbCwgUFJPU0xJQ19SRUdfTVNUUlNUQVQsCisgICAgICAgICAgIDB4RkYpOyAvKiBDbGVhciBNYXN0ZXIgc3RhdHVzICovCisgIHJlZ0RhdGEgPSBSZWFkUmVnKHBQcm9zbGljLCBwUHJvc2xpYy0+Y2hhbm5lbCwgUFJPU0xJQ19SRUdfTVNUUlNUQVQpOworCisgIGlmKCByZWdEYXRhICE9IDB4MUYgKQorICB7CisgICAgcmV0dXJuIFJDX1NQSV9GQUlMOworICB9CisgIGVsc2UKKyAgeworICAgIHJldHVybiBSQ19OT05FOworICB9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZmRlZiBTSVZPSUNFX01VTFRJX0JPTV9TVVBQT1JUCitpbnQgUHJvU0xJQ19Jbml0X011bHRpQk9NIChwcm9zbGljQ2hhblR5cGVfcHRyICpoUHJvc2xpYyxpbnQgc2l6ZSwgaW50IHByZXNldCkKK3sKKyAgVFJBQ0VQUklOVCgqaFByb3NsaWMsICJzaXplOiAlZCBwcmVzZXQ6ICVkXG4iLCBzaXplLCBwcmVzZXQpOworI2lmZGVmIFNJMzIxN1gKKyAgaWYgKCgqaFByb3NsaWMpLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjE3MQorICAgICAgJiYgKCpoUHJvc2xpYyktPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMTc5KQorICB7CisgICAgcmV0dXJuIFNpMzIxN3hfSW5pdF9NdWx0aUJPTShoUHJvc2xpYyxzaXplLHByZXNldCk7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjE4WAorICBpZiAoKCpoUHJvc2xpYyktPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMTgwCisgICAgICAmJiAoKmhQcm9zbGljKS0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIxODkpCisgIHsKKyAgICByZXR1cm4gU2kzMjE4eF9Jbml0X011bHRpQk9NKGhQcm9zbGljLHNpemUscHJlc2V0KTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMTlYCisgIGlmICggSVNfU0kzMjE5WCgoKmhQcm9zbGljKS0+ZGV2aWNlSWQpICkKKyAgeworICAgIHJldHVybiBTaTMyMTl4X0luaXRfTXVsdGlCT00oaFByb3NsaWMsc2l6ZSxwcmVzZXQpOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIyNlgKKyAgaWYgKCgqaFByb3NsaWMpLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjI2MAorICAgICAgJiYgKCpoUHJvc2xpYyktPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMjY5KQorICB7CisgICAgcmV0dXJuIFNpMzIyNnhfSW5pdF9NdWx0aUJPTShoUHJvc2xpYyxzaXplLHByZXNldCk7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjI4WAorICBpZiAoKCpoUHJvc2xpYyktPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMjgwCisgICAgICAmJiAoKmhQcm9zbGljKS0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIyODkpCisgIHsKKyAgICByZXR1cm4gU2kzMjI4eF9Jbml0X011bHRpQk9NKGhQcm9zbGljLHNpemUscHJlc2V0KTsKKyAgfQorI2VuZGlmCisKKyAgcmV0dXJuIFJDX0NPTVBMRVRFX05PX0VSUjsKK30KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgUHJvU0xJQ19Jbml0IChwcm9zbGljQ2hhblR5cGVfcHRyICpoUHJvc2xpYyxpbnQgc2l6ZSkKK3sKKyAgVFJBQ0VQUklOVCgqaFByb3NsaWMsICJzaXplOiAlZFxuIiwgc2l6ZSk7CisgIHJldHVybiBQcm9TTElDX0luaXRfd2l0aF9PcHRpb25zKGhQcm9zbGljLCBzaXplLCBJTklUX05PX09QVCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBQcm9TTElDX1JlaW5pdCAocHJvc2xpY0NoYW5UeXBlX3B0ciAqaFByb3NsaWMsaW50IHNpemUpCit7CisgIFRSQUNFUFJJTlQoKmhQcm9zbGljLCAic2l6ZTogJWRcbiIsIHNpemUpOworICByZXR1cm4gUHJvU0xJQ19Jbml0X3dpdGhfT3B0aW9ucyhoUHJvc2xpYywgc2l6ZSwgSU5JVF9SRUlOSVQpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgUHJvU0xJQ19Jbml0X3dpdGhfT3B0aW9ucyAocHJvc2xpY0NoYW5UeXBlX3B0ciAqaFByb3NsaWMsaW50IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9wdGlvbikKK3sKKyAgVFJBQ0VQUklOVCgqaFByb3NsaWMsICJzaXplOiAlZCBvcHRpb246ICVkXG4iLCBzaXplLCBvcHRpb24pOworI2lmZGVmIFNJMzIyNlgKKyAgaWYgKCgqaFByb3NsaWMpLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjI2MAorICAgICAgJiYgKCpoUHJvc2xpYyktPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMjY5KQorICB7CisgICAgcmV0dXJuIFNpMzIyNnhfSW5pdF93aXRoX09wdGlvbnMoaFByb3NsaWMsc2l6ZSwgb3B0aW9uKTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMjhYCisgIGlmICgoKmhQcm9zbGljKS0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIyODAKKyAgICAgICYmICgqaFByb3NsaWMpLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjI4OSkKKyAgeworICAgIHJldHVybiBTaTMyMjh4X0luaXRfd2l0aF9PcHRpb25zKGhQcm9zbGljLHNpemUsIG9wdGlvbik7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjE3WAorICBpZiAoKCpoUHJvc2xpYyktPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMTcxCisgICAgICAmJiAoKmhQcm9zbGljKS0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIxNzkpCisgIHsKKyAgICByZXR1cm4gU2kzMjE3eF9Jbml0X3dpdGhfT3B0aW9ucyhoUHJvc2xpYyxzaXplLCBvcHRpb24pOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIxOFgKKyAgaWYgKCgqaFByb3NsaWMpLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjE4MAorICAgICAgJiYgKCpoUHJvc2xpYyktPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMTg5KQorICB7CisgICAgcmV0dXJuIFNpMzIxOHhfSW5pdF93aXRoX09wdGlvbnMoaFByb3NsaWMsc2l6ZSwgb3B0aW9uKTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMTlYCisgIGlmICggSVNfU0kzMjE5WCgoKmhQcm9zbGljKS0+ZGV2aWNlSWQpICkKKyAgeworICAgIHJldHVybiBTaTMyMTl4X0luaXRfd2l0aF9PcHRpb25zKGhQcm9zbGljLHNpemUsIG9wdGlvbik7CisgIH0KKyNlbmRpZgorCisgIHJldHVybiBSQ19JR05PUkU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKFNJMzIxN1gpIHx8IGRlZmluZWQoU0kzMjE4WCkgfHwgZGVmaW5lZCBTSTMyMjZYIHx8IGRlZmluZWQgU0kzMjI4WCB8fCBkZWZpbmVkKFNJMzIxOVgpCisvKiBDaGVjayBwYXRjaCBkYXRhIC0gcmV0dXJucyBUUlVFIGlmIG5vIGVycm9yLiovCitzdGF0aWMgQk9PTEVBTiBQcm9TTElDX1ZlcmlmeVBhdGNoRGF0YShwcm9zbGljQ2hhblR5cGUgKnBQcm9zbGljLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmFtRGF0YSAqZGF0YSwgdUludDE2IG1heENvdW50ICkKK3sKKyAgaW50IGxvb3A7CisgIHJhbURhdGEgcmVhZF9kYXRhOworICBUUkFDRVBSSU5UKHBQcm9zbGljLCAiZGF0YXB0cjogJXAsIGNvdW50OiAlZFxuIiwgZGF0YSwgbWF4Q291bnQpOworCisgIGZvcihsb29wID0gMDsgbG9vcCA8IG1heENvdW50OyBsb29wKyspCisgIHsKKyAgICBpZigqZGF0YSkKKyAgICB7CisgICAgICByZWFkX2RhdGEgPSBSZWFkUkFNKHBQcm9zbGljLCBwUHJvc2xpYy0+Y2hhbm5lbCwgUFJPU0xJQ19SQU1fUFJBTV9EQVRBKTsKKyAgICAgIGlmKCAoKCpkYXRhKSA8PCA5KSAhPSByZWFkX2RhdGEpCisgICAgICB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBkYXRhKys7CisgIH0KKyAgcmV0dXJuIFRSVUU7Cit9CisKKy8qIENoZWNrIGlmIHRoZSBqdW1wIHRhYmxlIGlzIHdyaXR0ZW4gY29ycmVjdGx5Li4gKi8KK3N0YXRpYyBCT09MRUFOIFByb1NMSUNfVmVyaWZ5UGF0Y2hKTVBMb3cocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYywKKyAgICBjb25zdCB1SW50MTYgKmRhdGEpCit7CisgIHVJbnQ4IGFkZHJlc3MgPSBQQVRDSF9KTVBUQkxfU1RBUlRfQUREUjsKKyAgaW50IHJlZ0RhdGE7CisKKyAgVFJBQ0VQUklOVChwUHJvc2xpYywgImRhdGFwdHI6ICVwXG4iLCBkYXRhKTsKKyAgZm9yKGFkZHJlc3MgPSBQQVRDSF9KTVBUQkxfU1RBUlRfQUREUjsKKyAgICAgIGFkZHJlc3MgPCAoUEFUQ0hfSk1QVEJMX1NUQVJUX0FERFIrKDIqUEFUQ0hfTlVNX0xPV19FTlRSSUVTKSk7IGFkZHJlc3MrKykKKyAgeworICAgIGlmKCpkYXRhKQorICAgIHsKKyAgICAgIHJlZ0RhdGEgPSBSZWFkUmVnKHBQcm9zbGljLCBwUHJvc2xpYy0+Y2hhbm5lbCwgYWRkcmVzcyk7CisgICAgICBpZihyZWdEYXRhICE9ICgoKmRhdGEpICYgMHhGRikpCisgICAgICB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgIH0KKworICAgICAgYWRkcmVzcysrOworCisgICAgICByZWdEYXRhID0gUmVhZFJlZyhwUHJvc2xpYywgcFByb3NsaWMtPmNoYW5uZWwsIGFkZHJlc3MpOworICAgICAgaWYocmVnRGF0YSAhPSAoKCgqZGF0YSk+PjgpICYgMHhGRikpCisgICAgICB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgIH0KKworICAgICAgZGF0YSsrOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIHJldHVybiBUUlVFOworfQorCisjaWYgZGVmaW5lZCBTSTMyMjZYIHx8IGRlZmluZWQgU0kzMjI4WCB8fCBkZWZpbmVkIFNJMzIxOFggfHwgZGVmaW5lZCBTSTMyMTlYCisvKiBGb3IgY2hpcHNldHMgc3VwcG9ydGluZyBtb3JlIHRoYW4gOCBqdW1wIGVudHJpZXMsIHZlcmlmeSB0aGVtICovCitzdGF0aWMgQk9PTEVBTiBQcm9TTElDX1ZlcmlmeVBhdGNoSk1QSGlnaChwcm9zbGljQ2hhblR5cGUgKnBQcm9zbGljLAorICAgIGNvbnN0IHVJbnQxNiAqZGF0YSkKK3sKKyAgdUludDE2IGFkZHJlc3MgPSBQQVRDSF9KTVBUQkxfSElHSF9BRERSOworICByYW1EYXRhIHJlYWRfZGF0YTsKKworICBUUkFDRVBSSU5UKHBQcm9zbGljLCAiZGF0YXB0cjogJXBcbiIsIGRhdGEpOworICBmb3IoYWRkcmVzcyA9IFBBVENIX0pNUFRCTF9ISUdIX0FERFI7CisgICAgICBhZGRyZXNzIDwgKFBBVENIX0pNUFRCTF9ISUdIX0FERFIrUEFUQ0hfTlVNX0hJR0hfRU5UUklFUyk7IGFkZHJlc3MrKykKKyAgeworICAgIHJlYWRfZGF0YSA9IChSZWFkUkFNKHBQcm9zbGljLCBwUHJvc2xpYy0+Y2hhbm5lbCwgYWRkcmVzcykgJiAweDFGRkZMKTsKKyAgICBpZigqZGF0YSAhPSByZWFkX2RhdGEpCisgICAgeworICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgfQorICAgIGRhdGErKzsKKyAgfQorICByZXR1cm4gVFJVRTsKK30KKyNlbmRpZiAvKiBTSTMyMjZYLCBTSTMyMjhYLCBTSTMyMThYLCBTSTMyMTlYICovCisKK3N0YXRpYyBCT09MRUFOIFByb1NMSUNfVmVyaWZ5UGF0Y2hTdXBwb3J0UkFNKHByb3NsaWNDaGFuVHlwZSAqcFByb3NsaWMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVJbnQxNiAqcmFtQWRkciwgY29uc3QgcmFtRGF0YSAqcmFtRGF0YSkKK3sKKyAgaW50IGk7CisKKyAgZm9yKGkgPSAwOyByYW1BZGRyW2ldOyBpKyspCisgIHsKKyAgICBpZiggUmVhZFJBTShwUHJvc2xpYywgcFByb3NsaWMtPmNoYW5uZWwsIHJhbUFkZHJbaV0pICE9IHJhbURhdGFbaV0pCisgICAgeworICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgfSAKKworICByZXR1cm4gVFJVRTsKK30KKworLyogTG9hZCB0aGUgZmlyc3QgOCBqdW1wIHRhYmxlIGVudHJpZXMgKi8KK3N0YXRpYyB2b2lkIFByb1NMSUNfTG9hZFBhdGNoSk1QTG93KHByb3NsaWNDaGFuVHlwZSAqcFByb3NsaWMsIHVJbnQ4IGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1SW50MTYgKmRhdGEpCit7CisgIHVJbnQ4IGFkZHJlc3M7CisKKyAgVFJBQ0VQUklOVChwUHJvc2xpYywgImNoYW46ICVkIGRhdGFwdHI6ICVwXG4iLCBjaGFubmVsLCBkYXRhKTsKKworICBmb3IoYWRkcmVzcyA9IFBBVENIX0pNUFRCTF9TVEFSVF9BRERSOworICAgICAgYWRkcmVzcyA8IChQQVRDSF9KTVBUQkxfU1RBUlRfQUREUisoMipQQVRDSF9OVU1fTE9XX0VOVFJJRVMpKTsgYWRkcmVzcysrKQorICB7CisgICAgV3JpdGVSZWcocFByb3NsaWMsIGNoYW5uZWwsIGFkZHJlc3MsKCgqZGF0YSkgJiAweEZGKSk7CisgICAgYWRkcmVzcysrOworICAgIFdyaXRlUmVnKHBQcm9zbGljLCBjaGFubmVsLCBhZGRyZXNzLCgoKCpkYXRhKT4+OCkgJiAweEZGKSk7CisgICAgZGF0YSsrOworICB9Cit9CisKKy8qIExvYWQgUGF0Y2ggZGF0YSAqLworc3RhdGljIHZvaWQgUHJvU0xJQ19Mb2FkUGF0Y2hEYXRhKHByb3NsaWNDaGFuVHlwZSAqcFByb3NsaWMsIHVJbnQ4IGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmFtRGF0YSAqZGF0YSkKK3sKKyAgaW50IGxvb3A7CisKKyAgVFJBQ0VQUklOVChwUHJvc2xpYywgImNoYW46ICVkIGRhdGFwdHI6ICVwXG4iLCBjaGFubmVsLCBkYXRhKTsKKyAgV3JpdGVSQU0ocFByb3NsaWMsIGNoYW5uZWwsIFBST1NMSUNfUkFNX1BSQU1fQUREUiwgMCk7CisKKyAgZm9yKGxvb3AgPSAwOyBsb29wIDwgUEFUQ0hfTUFYX1NJWkU7IGxvb3ArKykKKyAgeworICAgIGlmKCpkYXRhKQorICAgIHsKKyAgICAgIC8qIENhbiB3ZSB0YWtlIGFkdmFudGFnZSBvZiBhdXRvIGluY3JlbWVudCwgaWYgbm90LCBzZXQgdGhlIGFkZHJlc3MgKi8KKyAgICAgIGlmKCAocFByb3NsaWMtPmRldmljZUlkLT5jaGlwUmV2IDwgMykKKyAgICAgICAgICAmJiAoY2hhbm5lbCA9PSBQUk9TTElDX0NIQU5fQlJPQURDQVNUKSkKKyAgICAgIHsKKyAgICAgICAgV3JpdGVSQU0ocFByb3NsaWMsIGNoYW5uZWwsIFBST1NMSUNfUkFNX1BSQU1fQUREUiwgbG9vcCA8PCAxOSk7CisgICAgICB9CisKKyAgICAgIFdyaXRlUkFNKHBQcm9zbGljLCBjaGFubmVsLCBQUk9TTElDX1JBTV9QUkFNX0RBVEEsICgqZGF0YSkgPDwgOSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGRhdGErKzsKKyAgfQorfQorCisvKiBMb2FkIFN1cHBvcnQgUkFNIC0gYmFzaWNhbGx5IFJBTSBhZGRyZXNzL2RhdGEgcGFpcnMgdG8gYmUgd3JpdHRlbiBhcyBwYXJ0IG9mIHRoZSBQYXRjaCBwcm9jZXNzIC0gZG8gbm90IGNhbGwgZGlyZWN0bHkgKi8KK3ZvaWQgUHJvU0xJQ19Mb2FkU3VwcG9ydFJBTShwcm9zbGljQ2hhblR5cGUgKnBQcm9zbGljLCB1SW50OCBjaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1SW50MTYgKmFkZHJlc3MsIGNvbnN0IHJhbURhdGEgKmRhdGEpCit7CisgIFRSQUNFUFJJTlQocFByb3NsaWMsICJjaGFuOiAlZCBhZGRyZXNzcHRyOiAlcCBkYXRhcHRyOiAlcFxuIiwgY2hhbm5lbCwgYWRkcmVzcywKKyAgICAgICAgICAgICBkYXRhKTsKKyAgd2hpbGUoICphZGRyZXNzICkKKyAgeworICAgIFdyaXRlUkFNKHBQcm9zbGljLCBjaGFubmVsLCAqYWRkcmVzcywgKmRhdGEpOworICAgIGFkZHJlc3MrKzsKKyAgICBkYXRhKys7CisgIH0KK30KKworI2lmIGRlZmluZWQgU0kzMjI2WCB8fCBkZWZpbmVkIFNJMzIyOFggfHwgZGVmaW5lZCBTSTMyMThYIHx8IGRlZmluZWQgU0kzMjE5WAorLyogTG9hZCBKdW1wIHRhYmxlIGhpZ2ggZm9yIGNoaXBzZXRzIHN1cHBvcnRpbmcgbW9yZSB0aGFuIDgganVtcCBlbnRyaWVzICovCitzdGF0aWMgdm9pZCBQcm9TTElDX0xvYWRKTVBIaWdoKHByb3NsaWNDaGFuVHlwZSAqcFByb3NsaWMsIHVJbnQ4IGNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVJbnQxNiAqZGF0YSkKK3sKKyAgdUludDE2IGxvb3A7CisgIFRSQUNFUFJJTlQocFByb3NsaWMsICJjaGFuOiAlZCBkYXRhcHRyOiAlcFxuIiwgY2hhbm5lbCwgZGF0YSk7CisgIGZvcihsb29wID0gUEFUQ0hfSk1QVEJMX0hJR0hfQUREUjsKKyAgICAgIGxvb3AgPCAoUEFUQ0hfSk1QVEJMX0hJR0hfQUREUitQQVRDSF9OVU1fSElHSF9FTlRSSUVTKTsgbG9vcCsrKQorICB7CisgICAgV3JpdGVSQU0ocFByb3NsaWMsIGNoYW5uZWwsIGxvb3AsICgoKmRhdGEpICYgMHgxRkZGTCkgKTsKKyAgICBkYXRhKys7CisgIH0KK30KKyNlbmRpZiAvKiBTSTMyMjZYLCBTSTMyMjhYLCBTSTMyMThYLCBTSTMyMTlYICovCisKKy8qIENvZGUgYXNzdW1lcyBQcm9TTElDX0xvYWRQYXRjaCBoYXMgdmVyaWZpZWQgY2hpcCB0eXBlLiBUaGlzIGlzIE5PVCBtZWFudCB0byBiZSBjYWxsZWQKKyAqIGJ5IHRoZSB1c2VyIGRpcmVjdGx5LgorICovCitCT09MRUFOIFByb1NMSUNfTG9hZFBhdGNoX2V4dGVuZGVkKHByb3NsaWNDaGFuVHlwZSAqcFByb3NsaWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb3NsaWNQYXRjaCAqcFBhdGNoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTEVBTiBpc19icm9hZGNhc3QsIEJPT0xFQU4gaXNfc2Vjb25kX2NoYW4pCit7CisgIHVJbnQ4IGNoYW5uZWw7CisgIGNvbnN0IHVJbnQxNiBqbXBfZGlzYWJsZVtQQVRDSF9OVU1fTE9XX0VOVFJJRVNdID0gezAsMCwwLDAsMCwwLDAsMH07CisKKyNpZiBkZWZpbmVkIFNJMzIyNlggfHwgZGVmaW5lZCBTSTMyMjhYIHx8IGRlZmluZWQgU0kzMjE4WCB8fGRlZmluZWQgU0kzMjE5WAorICBCT09MRUFOIGhhc0ptcFRhYmxlSGlnaCA9IEZBTFNFOworICBjb25zdCB1SW50MTYgam1waGlnaF9kaXNhYmxlW1BBVENIX05VTV9ISUdIX0VOVFJJRVNdID0gezBVTCwgMFVMLCAwVUwsIDBVTCwgMFVMLCAwVUwsIDBVTCwgMFVMfTsKKyNlbmRpZgorCisgIFRSQUNFUFJJTlQocFByb3NsaWMsICJwYXRjaHB0cjogJXAgYmNhc3Q6ICVkXG4iLCBwUGF0Y2gsIGlzX2Jyb2FkY2FzdCk7CisKKyAgaWYocFBhdGNoID09IE5VTEwpCisgIHsKKyAgICByZXR1cm4gUkNfTk9ORTsKKyAgfQorCisgIGlmKGlzX2Jyb2FkY2FzdCA9PSBUUlVFKQorICB7CisgICAgY2hhbm5lbCA9IFBST1NMSUNfQ0hBTl9CUk9BRENBU1Q7CisgIH0KKyAgZWxzZQorICB7CisgICAgY2hhbm5lbCA9IHBQcm9zbGljLT5jaGFubmVsOworICB9CisKKyAgUHJvU0xJQ19TZXRVc2VyTW9kZShwUHJvc2xpYyxUUlVFLCBpc19icm9hZGNhc3QpOworCisgIC8qIERpc2FibGUgUGF0Y2ggKi8KKyAgV3JpdGVSZWcocFByb3NsaWMsIGNoYW5uZWwsIFBST1NMSUNfUkVHX0pNUEVOLCAwKTsKKyAgaWYoaXNfc2Vjb25kX2NoYW4gPT0gRkFMU0UpCisgIHsKKyAgICBERUJVR19QUklOVChwUHJvc2xpYywgIiVzbG9hZGluZyBwYXRjaDogJTA4bHhcbiIsIExPR1BSSU5UX1BSRUZJWCwKKyAgICAgICAgICAgICAgICAgKGxvbmcgdW5zaWduZWQgaW50KXBQYXRjaC0+cGF0Y2hTZXJpYWwpOworCisgICAgUHJvU0xJQ19Mb2FkUGF0Y2hKTVBMb3cocFByb3NsaWMsIGNoYW5uZWwsIGptcF9kaXNhYmxlKTsKKworI2lmIGRlZmluZWQgU0kzMjI2WCB8fCBkZWZpbmVkIFNJMzIyOFggfHwgZGVmaW5lZCBTSTMyMThYIHx8IGRlZmluZWQgU0kzMjE5WAorICAgIGlmKCAwCisjaWZkZWYgU0kzMjI2WAorICAgICAgICB8fCAocFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMjYwCisgICAgICAgICAgICAmJiBwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIyNjkpCisjZW5kaWYKKyNpZmRlZiBTSTMyMjhYCisgICAgICAgIHx8IChwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIyODAKKyAgICAgICAgICAgICYmIHBQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjI4OSkKKyNlbmRpZgorI2lmZGVmIFNJMzIxOFgKKyAgICAgICAgfHwgKHBQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjE4MAorICAgICAgICAgICAgJiYgcFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMTg5KQorI2VuZGlmCisjaWZkZWYgU0kzMjE5WAorICAgICAgICB8fCAoIElTX1NJMzIxOVgocFByb3NsaWMtPmRldmljZUlkKSApCisjZW5kaWYKKyAgICAgICkKKyAgICB7CisgICAgICBoYXNKbXBUYWJsZUhpZ2ggPSBUUlVFOworICAgICAgUHJvU0xJQ19Mb2FkSk1QSGlnaChwUHJvc2xpYywgY2hhbm5lbCwgam1waGlnaF9kaXNhYmxlKTsKKyAgICB9CisjZW5kaWYKKworICAgIFByb1NMSUNfTG9hZFBhdGNoRGF0YShwUHJvc2xpYywgY2hhbm5lbCwgcFBhdGNoLT5wYXRjaERhdGEpOworCisgICAgV3JpdGVSZWcocFByb3NsaWMsIGNoYW5uZWwsIFBST1NMSUNfUkVHX1JBTV9BRERSX0hJLCAwKTsKKworICAgIFByb1NMSUNfTG9hZFBhdGNoSk1QTG93KHBQcm9zbGljLCBjaGFubmVsLCBwUGF0Y2gtPnBhdGNoRW50cmllcyk7CisKKyNpZiBkZWZpbmVkIFNJMzIyNlggfHwgZGVmaW5lZCBTSTMyMjhYIHx8IGRlZmluZWQgU0kzMjE4WCB8fCBkZWZpbmVkIFNJMzIxOVgKKyAgICBpZihoYXNKbXBUYWJsZUhpZ2ggPT0gVFJVRSkKKyAgICB7CisgICAgICBQcm9TTElDX0xvYWRKTVBIaWdoKHBQcm9zbGljLCBjaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmKHBQYXRjaC0+cGF0Y2hFbnRyaWVzW1BBVENIX05VTV9MT1dfRU5UUklFU10pKTsKKyAgICB9CisjZW5kaWYKKyAgICBXcml0ZVJBTShwUHJvc2xpYywgY2hhbm5lbCwgUFJPU0xJQ19SQU1fUEFUQ0hJRCwKKyAgICAgICAgICAgICBwUGF0Y2gtPnBhdGNoU2VyaWFsKTsgLyogd3JpdGUgdGhlIHBhdGNoIElEICovCisgIH0gLyogIXNlY29uZCBjaGFubmVsICovCisKKyAgUHJvU0xJQ19Mb2FkU3VwcG9ydFJBTShwUHJvc2xpYywgY2hhbm5lbCwgcFBhdGNoLT5wc1JhbUFkZHIsIHBQYXRjaC0+cHNSYW1EYXRhKTsKKworICByZXR1cm4gUkNfTk9ORTsKKworfQorCisjZW5kaWYgLyogcGF0Y2ggaGVscGVyIGZ1bmN0aW9ucyAqLworCitpbnQgUHJvU0xJQ19Mb2FkUGF0Y2ggKHByb3NsaWNDaGFuVHlwZV9wdHIgcFByb3NsaWMsY29uc3QgcHJvc2xpY1BhdGNoICpwUGF0Y2gpCit7CisgIGludCByYzsKKworICBpZihwUHJvc2xpYy0+Y2hhbm5lbFR5cGUgIT0gUFJPU0xJQykKKyAgeworICAgIHJldHVybiBSQ19JR05PUkU7CisgIH0KKworICBpZiggKHJjID0gUHJvU0xJQ19Mb2FkUGF0Y2hfZXh0ZW5kZWQocFByb3NsaWMsIHBQYXRjaCwgRkFMU0UsIEZBTFNFKSApID09IFJDX05PTkUpCisgIHsKKyNpZmRlZiBESVNBQkxFX1ZFUklGWV9QQVRDSAorICAgIHJldHVybiBXcml0ZVJlZyhwUHJvc2xpYywgcFByb3NsaWMtPmNoYW5uZWwsIFBST1NMSUNfUkVHX0pNUEVOLCAxKTsKKyNlbmRpZgorICB9CisKKyAgcmV0dXJuIHJjOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgUHJvU0xJQ19WZXJpZnlQYXRjaCAocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYyxjb25zdCBwcm9zbGljUGF0Y2ggKnBQYXRjaCkKK3sKKyAgVFJBQ0VQUklOVChoUHJvc2xpYywgInBhdGNocHRyOiAlcFxuIiwgcFBhdGNoKTsKKyAgaWYoaFByb3NsaWMtPmNoYW5uZWxUeXBlICE9IFBST1NMSUMpCisgIHsKKyAgICByZXR1cm4gUkNfSUdOT1JFOworICB9CisgIGlmKHBQYXRjaCA9PSBOVUxMKQorICB7CisgICAgcmV0dXJuIFJDX05PTkU7CisgIH0KKworICBXcml0ZVJlZyhoUHJvc2xpYywgaFByb3NsaWMtPmNoYW5uZWwsIFBST1NMSUNfUkVHX0pNUEVOLCAwKTsKKyAgV3JpdGVSQU0oaFByb3NsaWMsIGhQcm9zbGljLT5jaGFubmVsLCBQUk9TTElDX1JBTV9QUkFNX0FERFIsIDApOworCisgIGlmKFByb1NMSUNfVmVyaWZ5UGF0Y2hEYXRhKGhQcm9zbGljLCBwUGF0Y2gtPnBhdGNoRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFUQ0hfTUFYX1NJWkUpID09IEZBTFNFKQorICB7CisgICAgREVCVUdfUFJJTlQoaFByb3NsaWMsICIlc1BhdGNoIGRhdGEgY29ycnVwdGVkOiBjaGFubmVsICVkXG4iLExPR1BSSU5UX1BSRUZJWCwKKyAgICAgICAgICAgICAgICBoUHJvc2xpYy0+Y2hhbm5lbCk7CisgICAgV3JpdGVSQU0oaFByb3NsaWMsIGhQcm9zbGljLT5jaGFubmVsLCBQUk9TTElDX1JBTV9QQVRDSElELAorICAgICAgICAgICAgIDBVTCk7IC8qIE1hcmsgcGF0Y2ggYXMgaW52YWxpZCAqLworICAgIHJldHVybiBSQ19QQVRDSF9SQU1fVkVSSUZZX0ZBSUw7CisgIH0KKworICAvKnplcm8gb3V0IFJBTV9BRERSX0hJKi8KKyAgV3JpdGVSZWcgKGhQcm9zbGljLCBoUHJvc2xpYy0+Y2hhbm5lbCwgUFJPU0xJQ19SRUdfUkFNX0FERFJfSEksMCk7CisKKyAgaWYoIFByb1NMSUNfVmVyaWZ5UGF0Y2hKTVBMb3coaFByb3NsaWMsIHBQYXRjaC0+cGF0Y2hFbnRyaWVzKSA9PSBGQUxTRSkKKyAgeworICAgIERFQlVHX1BSSU5UKGhQcm9zbGljLCIlc1BhdGNoIGp1bXB0YWJsZSBjb3JydXB0ZWQ6IGNoYW5uZWwgJWRcbiIsCisgICAgICAgICAgICAgICAgTE9HUFJJTlRfUFJFRklYLGhQcm9zbGljLT5jaGFubmVsKTsKKyAgICBXcml0ZVJBTShoUHJvc2xpYywgaFByb3NsaWMtPmNoYW5uZWwsIFBST1NMSUNfUkFNX1BBVENISUQsCisgICAgICAgICAgICAgMFVMKTsgLyogTWFyayBwYXRjaCBhcyBpbnZhbGlkICovCisgICAgcmV0dXJuIFJDX1BBVENIX1JBTV9WRVJJRllfRkFJTDsKKyAgfQorCisjaWYgZGVmaW5lZCBTSTMyMjZYIHx8IGRlZmluZWQgU0kzMjI4WCB8fCBkZWZpbmVkIFNJMzIxOFggfHwgZGVmaW5lZCBTSTMyMTlYCisgIGlmKCAwCisjaWZkZWYgU0kzMjI2WAorICAgICAgfHwgKGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjI2MAorICAgICAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjI2OSkKKyNlbmRpZgorI2lmZGVmIFNJMzIyOFgKKyAgICAgIHx8IChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIyODAKKyAgICAgICAgICAmJiBoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIyODkpCisjZW5kaWYKKyNpZmRlZiBTSTMyMThYCisgICAgICB8fCAoaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMTgwCisgICAgICAgICAgJiYgaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMTg5KQorI2VuZGlmCisjaWZkZWYgU0kzMjE5WAorICAgICAgfHwgKCBJU19TSTMyMTlYKGhQcm9zbGljLT5kZXZpY2VJZCkgKQorI2VuZGlmCisgICAgKQorCisgIHsKKyAgICBpZiggUHJvU0xJQ19WZXJpZnlQYXRjaEpNUEhpZ2goaFByb3NsaWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYocFBhdGNoLT5wYXRjaEVudHJpZXNbUEFUQ0hfTlVNX0xPV19FTlRSSUVTXSkpID09IEZBTFNFKQorICAgIHsKKyAgICAgIERFQlVHX1BSSU5UKGhQcm9zbGljLCIlc1BhdGNoIGp1bXB0YWJsZSBoaWdoIGNvcnJ1cHRlZDogY2hhbm5lbCAlZFxuIiwKKyAgICAgICAgICAgICAgICAgIExPR1BSSU5UX1BSRUZJWCxoUHJvc2xpYy0+Y2hhbm5lbCk7CisgICAgICBXcml0ZVJBTShoUHJvc2xpYywgaFByb3NsaWMtPmNoYW5uZWwsIFBST1NMSUNfUkFNX1BBVENISUQsCisgICAgICAgICAgICAgICAwVUwpOyAvKiBNYXJrIHBhdGNoIGFzIGludmFsaWQgKi8KKyAgICAgIHJldHVybiBSQ19QQVRDSF9FTlRSWV9WRVJJRllfRkFJTDsKKyAgICB9CisgIH0KKworI2VuZGlmCisKKyAgaWYoIFByb1NMSUNfVmVyaWZ5UGF0Y2hTdXBwb3J0UkFNKCBoUHJvc2xpYywgcFBhdGNoLT5wc1JhbUFkZHIsIHBQYXRjaC0+cHNSYW1EYXRhKSA9PSBGQUxTRSkKKyAgeworICAgICAgREVCVUdfUFJJTlQoaFByb3NsaWMsIiVzUGF0Y2ggaW5pdCBkYXRhIGNvcnJ1cHRlZDogY2hhbm5lbCAlZFxuIiwKKyAgICAgICAgICAgICAgICAgIExPR1BSSU5UX1BSRUZJWCxoUHJvc2xpYy0+Y2hhbm5lbCk7CisgICAgICBXcml0ZVJBTShoUHJvc2xpYywgaFByb3NsaWMtPmNoYW5uZWwsIFBST1NMSUNfUkFNX1BBVENISUQsCisgICAgICAgICAgICAgICAwVUwpOyAvKiBNYXJrIHBhdGNoIGFzIGludmFsaWQgKi8KKyAgICAgIHJldHVybiBSQ19QQVRDSF9FTlRSWV9WRVJJRllfRkFJTDsKKyAgfQorCisgIFdyaXRlUmVnIChoUHJvc2xpYywgaFByb3NsaWMtPmNoYW5uZWwsIFBST1NMSUNfUkVHX0pNUEVOLAorICAgICAgICAgICAgMSk7IC8qZW5hYmxlIHRoZSBwYXRjaCovCisKKyAgcmV0dXJuIFJDX05PTkU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBQcm9TTElDX1NldE11dGVTdGF0dXMgKHByb3NsaWNDaGFuVHlwZV9wdHIgcFByb3NsaWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9zbGljTXV0ZU1vZGVzIG11dGVFbikKK3sKKworICB1SW50OCByZWdUZW1wOworICB1SW50OCBuZXdSZWdWYWx1ZTsKKyAgVFJBQ0VQUklOVChwUHJvc2xpYywgIm11dGVFbjogJWRcbiIsIG11dGVFbik7CisKKyAgaWYocFByb3NsaWMtPmNoYW5uZWxUeXBlICE9IFBST1NMSUMpCisgIHsKKyAgICByZXR1cm4gUkNfSUdOT1JFOworICB9CisKKyAgcmVnVGVtcCA9IFJlYWRSZWcgKHBQcm9zbGljLHBQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkVHX0RJR0NPTik7CisKKyAgV3JpdGVSZWcgKHBQcm9zbGljLHBQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkVHX0RJR0NPTixyZWdUZW1wJn4oMHgzKSk7CisgIG5ld1JlZ1ZhbHVlID0gcmVnVGVtcCAmfigweDMpOworCisgIGlmIChtdXRlRW4gJiBQUk9TTElDX01VVEVfUlgpCisgIHsKKyAgICBuZXdSZWdWYWx1ZSB8PSAxOworICB9CisKKyAgaWYgKG11dGVFbiAmIFBST1NMSUNfTVVURV9UWCkKKyAgeworICAgIG5ld1JlZ1ZhbHVlIHw9IDI7CisgIH0KKworICBpZihuZXdSZWdWYWx1ZSAhPSByZWdUZW1wKQorICB7CisgICAgcmV0dXJuIFdyaXRlUmVnIChwUHJvc2xpYyxwUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JFR19ESUdDT04sbmV3UmVnVmFsdWUpOworICB9CisKKyAgcmV0dXJuIFJDX0NPTVBMRVRFX05PX0VSUjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IFByb1NMSUNfU2V0TG9vcGJhY2tNb2RlIChwcm9zbGljQ2hhblR5cGVfcHRyIHBQcm9zbGljLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9zbGljTG9vcGJhY2tNb2RlcyBuZXdNb2RlKQoreworICB1SW50OCByZWdUZW1wLCBuZXdWYWx1ZTsKKyAgVFJBQ0VQUklOVChwUHJvc2xpYywgIm1vZGU6ICVkXG4iLCBuZXdNb2RlKTsKKworICBpZihwUHJvc2xpYy0+Y2hhbm5lbFR5cGUgIT0gUFJPU0xJQykKKyAgeworICAgIHJldHVybiBSQ19JR05PUkU7CisgIH0KKworICBuZXdWYWx1ZSA9IHJlZ1RlbXAgPSBSZWFkUmVnIChwUHJvc2xpYyxwUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JFR19MT09QQkFDSyk7CisKKyAgc3dpdGNoIChuZXdNb2RlKQorICB7CisgICAgY2FzZSBQUk9TTElDX0xPT1BCQUNLX05PTkU6CisgICAgICBuZXdWYWx1ZSAmPSB+KDB4MTEpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFBST1NMSUNfTE9PUEJBQ0tfRElHOgorICAgICAgbmV3VmFsdWUgfD0gMTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBQUk9TTElDX0xPT1BCQUNLX0FOQToKKyAgICAgIG5ld1ZhbHVlIHw9IDB4MTA7CisgICAgICBicmVhazsKKyAgfQorCisgIGlmKG5ld1ZhbHVlICE9IHJlZ1RlbXApCisgIHsKKyAgICByZXR1cm4gV3JpdGVSZWcgKHBQcm9zbGljLHBQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkVHX0xPT1BCQUNLLCBuZXdWYWx1ZSk7CisgIH0KKyAgcmV0dXJuIFJDX0NPTVBMRVRFX05PX0VSUjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IFByb1NMSUNfRW5hYmxlSW50ZXJydXB0cyAocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYykKK3sKKyAgVFJBQ0VQUklOVChoUHJvc2xpYywgIlxuIiwgTlVMTCk7CisgIGlmKGhQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorI2lmZGVmIFNJMzIxN1gKKyAgaWYgKGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjE3MQorICAgICAgJiYgaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMTc5KQorICB7CisgICAgcmV0dXJuIFNpMzIxN3hfRW5hYmxlSW50ZXJydXB0cyhoUHJvc2xpYyk7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjE4WAorICBpZiAoaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMTgwCisgICAgICAmJiBoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIxODkpCisgIHsKKyAgICByZXR1cm4gU2kzMjE4eF9FbmFibGVJbnRlcnJ1cHRzKGhQcm9zbGljKTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMTlYCisgIGlmICggSVNfU0kzMjE5WChoUHJvc2xpYy0+ZGV2aWNlSWQpICkKKyAgeworICAgIHJldHVybiBTaTMyMTl4X0VuYWJsZUludGVycnVwdHMoaFByb3NsaWMpOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIyNlgKKyAgaWYgKGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjI2MAorICAgICAgJiYgaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMjY5KQorICB7CisgICAgcmV0dXJuIFNpMzIyNnhfRW5hYmxlSW50ZXJydXB0cyhoUHJvc2xpYyk7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjI4WAorICBpZiAoaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMjgwCisgICAgICAmJiBoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIyODkpCisgIHsKKyAgICByZXR1cm4gU2kzMjI4eF9FbmFibGVJbnRlcnJ1cHRzKGhQcm9zbGljKTsKKyAgfQorI2VuZGlmCisKKyAgcmV0dXJuIFJDX0NPTVBMRVRFX05PX0VSUjsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgUHJvU0xJQ19EaXNhYmxlSW50ZXJydXB0cyAocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYykKK3sKKyNpZmRlZiBHQ0lfTU9ERQorICB1SW50OCBkYXRhOworI2VuZGlmCisgIHVJbnQ4IGk7CisgIFRSQUNFUFJJTlQoaFByb3NsaWMsICJcbiIsIE5VTEwpOworCisgIGlmKGhQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorCisgIGZvcihpID0gUFJPU0xJQ19SRUdfSVJRRU4xOyBpIDwgUFJPU0xJQ19SRUdfSVJRRU40OyBpKyspCisgIHsKKyAgICAvKiBEaXNhYmxlIHRoZSBpbnRlcnJ1cHRzICovCisgICAgV3JpdGVSZWcoaFByb3NsaWMsIGhQcm9zbGljLT5jaGFubmVsLCBpLCAwKTsKKyAgfQorCisgIC8qIENsZWFyIHRoZSBwZW5kaW5nIGludGVycnVwdHMgKi8KKyAgZm9yKGkgPSBQUk9TTElDX1JFR19JUlExOyBpIDwgUFJPU0xJQ19SRUdfSVJRNDsgaSsrKQorICB7CisjaWZkZWYgR0NJX01PREUKKyAgICBkYXRhID0gUmVhZFJlZyhoUHJvc2xpYywgaFByb3NsaWMtPmNoYW5uZWwsIGkpOworICAgIFdyaXRlUmVnKCBoUHJvc2xpYywgaFByb3NsaWMtPmNoYW5uZWwsIGksIGRhdGEpOworI2Vsc2UKKyAgICAodm9pZClSZWFkUmVnKGhQcm9zbGljLCBoUHJvc2xpYy0+Y2hhbm5lbCwgaSk7CisjZW5kaWYKKyAgfQorICByZXR1cm4gUkNfTk9ORTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IFByb1NMSUNfUmluZ1NldHVwIChwcm9zbGljQ2hhblR5cGVfcHRyIGhQcm9zbGljLGludCBwcmVzZXQpCit7CisgIFRSQUNFUFJJTlQoaFByb3NsaWMsICJwcmVzZXQ6ICVkXG4iLCBwcmVzZXQpOworI2lmbmRlZiBESVNBQkxFX1JJTkdfU0VUVVAKKyAgaWYoaFByb3NsaWMtPmNoYW5uZWxUeXBlICE9IFBST1NMSUMpCisgIHsKKyAgICByZXR1cm4gUkNfSUdOT1JFOworICB9CisjaWZkZWYgU0kzMjE3WAorICBpZiAoaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMTcxCisgICAgICAmJiBoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIxNzkpCisgIHsKKyAgICByZXR1cm4gU2kzMjE3eF9SaW5nU2V0dXAoaFByb3NsaWMscHJlc2V0KTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMThYCisgIGlmIChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIxODAKKyAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjE4OSkKKyAgeworICAgIHJldHVybiBTaTMyMTh4X1JpbmdTZXR1cChoUHJvc2xpYyxwcmVzZXQpOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIxOVgKKyAgaWYgKCBJU19TSTMyMTlYKGhQcm9zbGljLT5kZXZpY2VJZCkgKQorICB7CisgICAgcmV0dXJuIFNpMzIxOXhfUmluZ1NldHVwKGhQcm9zbGljLHByZXNldCk7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjI2WAorICBpZiAoaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMjYwCisgICAgICAmJiBoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIyNjkpCisgIHsKKyAgICByZXR1cm4gU2kzMjI2eF9SaW5nU2V0dXAoaFByb3NsaWMscHJlc2V0KTsKKyAgfQorI2VuZGlmCisjaWZkZWYgU0kzMjI4WAorICBpZiAoaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMjgwCisgICAgICAmJiBoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIyODkpCisgIHsKKyAgICByZXR1cm4gU2kzMjI4eF9SaW5nU2V0dXAoaFByb3NsaWMscHJlc2V0KTsKKyAgfQorI2VuZGlmCisjZWxzZQorICBTSUxBQlNfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihoUHJvc2xpYyk7CisgIFNJTEFCU19VTlJFRkVSRU5DRURfUEFSQU1FVEVSKHByZXNldCk7CisjZW5kaWYgLypESVNBQkxFX1JJTkdfU0VUVVAqLworICByZXR1cm4gUkNfQ09NUExFVEVfTk9fRVJSOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgUHJvU0xJQ19Ub25lR2VuU2V0dXAgKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMsaW50IHByZXNldCkKK3sKKyAgVFJBQ0VQUklOVChoUHJvc2xpYywgInByZXNldDogJWRcbiIsIHByZXNldCk7CisjaWZuZGVmIERJU0FCTEVfVE9ORV9TRVRVUAorICBpZihoUHJvc2xpYy0+Y2hhbm5lbFR5cGUgIT0gUFJPU0xJQykKKyAgeworICAgIHJldHVybiBSQ19JR05PUkU7CisgIH0KKyNpZmRlZiBTSTMyMTdYCisgIGlmIChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIxNzEKKyAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjE3OSkKKyAgeworICAgIHJldHVybiBQcm9TTElDX1RvbmVHZW5TZXR1cFB0cihoUHJvc2xpYywmKFNpMzIxN3hfVG9uZV9QcmVzZXRzW3ByZXNldF0pKTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMThYCisgIGlmIChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIxODAKKyAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjE4OSkKKyAgeworICAgIHJldHVybiBQcm9TTElDX1RvbmVHZW5TZXR1cFB0cihoUHJvc2xpYywgJihTaTMyMTh4X1RvbmVfUHJlc2V0c1twcmVzZXRdKSk7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjE5WAorICBpZiAoIElTX1NJMzIxOVgoaFByb3NsaWMtPmRldmljZUlkKSApCisgIHsKKyAgICByZXR1cm4gUHJvU0xJQ19Ub25lR2VuU2V0dXBQdHIoaFByb3NsaWMsICYoU2kzMjE5eF9Ub25lX1ByZXNldHNbcHJlc2V0XSkpOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIyNlgKKyAgaWYgKGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjI2MAorICAgICAgJiYgaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMjY5KQorICB7CisgICAgcmV0dXJuIFByb1NMSUNfVG9uZUdlblNldHVwUHRyKGhQcm9zbGljLCAmKFNpMzIyNnhfVG9uZV9QcmVzZXRzW3ByZXNldF0pKTsKKyAgfQorI2VuZGlmCisjaWZkZWYgU0kzMjI4WAorICBpZiAoaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMjgwCisgICAgICAmJiBoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIyODkpCisgIHsKKyAgICByZXR1cm4gUHJvU0xJQ19Ub25lR2VuU2V0dXBQdHIoaFByb3NsaWMsICYoU2kzMjI4eF9Ub25lX1ByZXNldHNbcHJlc2V0XSkpOworICB9CisjZW5kaWYKKyNlbHNlCisgIFNJTEFCU19VTlJFRkVSRU5DRURfUEFSQU1FVEVSKGhQcm9zbGljKTsKKyAgU0lMQUJTX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIocHJlc2V0KTsKKyNlbmRpZiAvKkRJU0FCTEVfVE9ORV9TRVRVUCovCisgIHJldHVybiBSQ19DT01QTEVURV9OT19FUlI7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBQcm9TTElDX0ZTS1NldHVwIChwcm9zbGljQ2hhblR5cGVfcHRyIGhQcm9zbGljLGludCBwcmVzZXQpCit7CisgIFRSQUNFUFJJTlQoaFByb3NsaWMsICJwcmVzZXQ6ICVkXG4iLCBwcmVzZXQpOworI2lmbmRlZiBESVNBQkxFX0ZTS19TRVRVUAorICBpZihoUHJvc2xpYy0+Y2hhbm5lbFR5cGUgIT0gUFJPU0xJQykKKyAgeworICAgIHJldHVybiBSQ19JR05PUkU7CisgIH0KKyNpZmRlZiBTSTMyMTdYCisgIGlmIChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIxNzEKKyAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjE3OSkKKyAgeworICAgIHJldHVybiBQcm9TTElDX0ZTS1NldHVwUHRyKGhQcm9zbGljLCAmU2kzMjE3eF9GU0tfUHJlc2V0c1twcmVzZXRdKTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMThYCisgIGlmIChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIxODAKKyAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjE4OSkKKyAgeworICAgIHJldHVybiBQcm9TTElDX0ZTS1NldHVwUHRyKGhQcm9zbGljLCAmU2kzMjE4eF9GU0tfUHJlc2V0c1twcmVzZXRdKTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMTlYCisgIGlmICggSVNfU0kzMjE5WChoUHJvc2xpYy0+ZGV2aWNlSWQpICkKKyAgeworICAgIHJldHVybiBQcm9TTElDX0ZTS1NldHVwUHRyKGhQcm9zbGljLCAmU2kzMjE5eF9GU0tfUHJlc2V0c1twcmVzZXRdKTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMjZYCisgIGlmIChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIyNjAKKyAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjI2OSkKKyAgeworICAgIHJldHVybiBQcm9TTElDX0ZTS1NldHVwUHRyKGhQcm9zbGljLCAmU2kzMjI2eF9GU0tfUHJlc2V0c1twcmVzZXRdKTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMjhYCisgIGlmIChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIyODAKKyAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjI4OSkKKyAgeworICAgIHJldHVybiBQcm9TTElDX0ZTS1NldHVwUHRyKGhQcm9zbGljLCZTaTMyMjh4X0ZTS19QcmVzZXRzW3ByZXNldF0pOworICB9CisjZW5kaWYKKyNlbHNlCisgIFNJTEFCU19VTlJFRkVSRU5DRURfUEFSQU1FVEVSKGhQcm9zbGljKTsKKyAgU0lMQUJTX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIocHJlc2V0KTsKKyNlbmRpZiAvKkRJU0FCTEVfRlNLX1NFVFVQKi8KKyAgcmV0dXJuIFJDX0NPTVBMRVRFX05PX0VSUjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IFByb1NMSUNfWnN5bnRoU2V0dXAgKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMsaW50IHByZXNldCkKK3sKKyAgVFJBQ0VQUklOVChoUHJvc2xpYywgInByZXNldDogJWRcbiIsIHByZXNldCk7CisjaWZuZGVmIERJU0FCTEVfWlNZTlRIX1NFVFVQCisgIGlmKGhQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorI2lmZGVmIFNJMzIxN1gKKyAgaWYgKGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjE3MQorICAgICAgJiYgaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMTc5KQorICB7CisgICAgcmV0dXJuIFNpMzIxN3hfWnN5bnRoU2V0dXAoaFByb3NsaWMscHJlc2V0KTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMThYCisgIGlmIChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIxODAKKyAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjE4OSkKKyAgeworICAgIHJldHVybiBTaTMyMTh4X1pzeW50aFNldHVwKGhQcm9zbGljLHByZXNldCk7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjE5WAorICBpZiAoIElTX1NJMzIxOVgoaFByb3NsaWMtPmRldmljZUlkKSApCisgIHsKKyAgICByZXR1cm4gU2kzMjE5eF9ac3ludGhTZXR1cChoUHJvc2xpYyxwcmVzZXQpOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIyNlgKKyAgaWYgKGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjI2MAorICAgICAgJiYgaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMjY5KQorICB7CisgICAgcmV0dXJuIFNpMzIyNnhfWnN5bnRoU2V0dXAoaFByb3NsaWMscHJlc2V0KTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMjhYCisgIGlmIChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIyODAKKyAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjI4OSkKKyAgeworICAgIHJldHVybiBTaTMyMjh4X1pzeW50aFNldHVwKGhQcm9zbGljLHByZXNldCk7CisgIH0KKyNlbmRpZgorI2Vsc2UKKyAgU0lMQUJTX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIoaFByb3NsaWMpOworICBTSUxBQlNfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihwcmVzZXQpOworI2VuZGlmIC8qRElTQUJMRV9aU1lOVEhfU0VUVVAqLworICByZXR1cm4gUkNfQ09NUExFVEVfTk9fRVJSOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIERJU0FCTEVfQ0lfU0VUVVAKK2ludCBQcm9TTElDX0djaUNJU2V0dXAgKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMsaW50IHByZXNldCkKK3sKKyAgVFJBQ0VQUklOVChoUHJvc2xpYywgInByZXNldDogJWRcbiIsIHByZXNldCk7CisgIGlmKGhQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorI2lmZGVmIFNJMzIxN1gKKyAgaWYgKGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjE3MQorICAgICAgJiYgaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMTc5KQorICB7CisgICAgcmV0dXJuIFNpMzIxN3hfR2NpQ0lTZXR1cChoUHJvc2xpYyxwcmVzZXQpOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIyNlgKKyAgaWYgKGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjI2MAorICAgICAgJiYgaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMjY5KQorICB7CisgICAgcmV0dXJuIFNpMzIyNnhfR2NpQ0lTZXR1cChoUHJvc2xpYyxwcmVzZXQpOworICB9CisjZW5kaWYKKworI2lmICFkZWZpbmVkKFNJMzIxN1gpICYmICFkZWZpbmVkKFNJMzIyNlgpCisgIFNJTEFCU19VTlJFRkVSRU5DRURfUEFSQU1FVEVSKGhQcm9zbGljKTsKKyAgU0lMQUJTX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIocHJlc2V0KTsKKyNlbmRpZgorCisgIHJldHVybiBSQ19DT01QTEVURV9OT19FUlI7Cit9CisjZW5kaWYgLypESVNBQkxFX0NJX1NFVFVQKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IFByb1NMSUNfVFhBdWRpb0dhaW5TZXR1cCAocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYyxpbnQgcHJlc2V0KQoreworICBUUkFDRVBSSU5UKGhQcm9zbGljLCAicHJlc2V0OiAlZFxuIiwgcHJlc2V0KTsKKyNpZm5kZWYgRElTQUJMRV9BVURJT0dBSU5fU0VUVVAKKyAgaWYoaFByb3NsaWMtPmNoYW5uZWxUeXBlICE9IFBST1NMSUMpCisgIHsKKyAgICByZXR1cm4gUkNfSUdOT1JFOworICB9CisKKyNpZmRlZiBTSTMyMTdYCisgIGlmIChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIxNzEKKyAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjE3OSkKKyAgeworICAgIHJldHVybiBTaTMyMTd4X1RYQXVkaW9HYWluU2V0dXAoaFByb3NsaWMscHJlc2V0KTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMThYCisgIGlmIChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIxODAKKyAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjE4OSkKKyAgeworICAgIHJldHVybiBTaTMyMTh4X1RYQXVkaW9HYWluU2V0dXAoaFByb3NsaWMscHJlc2V0KTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMTlYCisgIGlmICggSVNfU0kzMjE5WChoUHJvc2xpYy0+ZGV2aWNlSWQpICkKKyAgeworICAgIHJldHVybiBTaTMyMTl4X1RYQXVkaW9HYWluU2V0dXAoaFByb3NsaWMscHJlc2V0KTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMjZYCisgIGlmIChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIyNjAKKyAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjI2OSkKKyAgeworICAgIHJldHVybiBTaTMyMjZ4X1RYQXVkaW9HYWluU2V0dXAoaFByb3NsaWMscHJlc2V0KTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMjhYCisgIGlmIChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIyODAKKyAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjI4OSkKKyAgeworICAgIHJldHVybiBTaTMyMjh4X1RYQXVkaW9HYWluU2V0dXAoaFByb3NsaWMscHJlc2V0KTsKKyAgfQorI2VuZGlmCisjZWxzZQorICBTSUxBQlNfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihoUHJvc2xpYyk7CisgIFNJTEFCU19VTlJFRkVSRU5DRURfUEFSQU1FVEVSKHByZXNldCk7CisKKyNlbmRpZiAvKkRJU0FCTEVfQVVESU9HQUlOX1NFVFVQKi8KKyAgcmV0dXJuIFJDX0NPTVBMRVRFX05PX0VSUjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IFByb1NMSUNfUlhBdWRpb0dhaW5TZXR1cCAocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYyxpbnQgcHJlc2V0KQoreworICBUUkFDRVBSSU5UKGhQcm9zbGljLCAicHJlc2V0OiAlZFxuIiwgcHJlc2V0KTsKKyNpZm5kZWYgRElTQUJMRV9BVURJT0dBSU5fU0VUVVAKKyAgaWYoaFByb3NsaWMtPmNoYW5uZWxUeXBlICE9IFBST1NMSUMpCisgIHsKKyAgICByZXR1cm4gUkNfSUdOT1JFOworICB9CisKKyNpZmRlZiBTSTMyMTdYCisgIGlmIChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIxNzEKKyAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjE3OSkKKyAgeworICAgIHJldHVybiBTaTMyMTd4X1JYQXVkaW9HYWluU2V0dXAoaFByb3NsaWMscHJlc2V0KTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMThYCisgIGlmIChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIxODAKKyAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjE4OSkKKyAgeworICAgIHJldHVybiBTaTMyMTh4X1JYQXVkaW9HYWluU2V0dXAoaFByb3NsaWMscHJlc2V0KTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMTlYCisgIGlmICggSVNfU0kzMjE5WChoUHJvc2xpYy0+ZGV2aWNlSWQpICkKKyAgeworICAgIHJldHVybiBTaTMyMTl4X1JYQXVkaW9HYWluU2V0dXAoaFByb3NsaWMscHJlc2V0KTsKKyAgfQorI2VuZGlmCisKKworI2lmZGVmIFNJMzIyNlgKKyAgaWYgKGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjI2MAorICAgICAgJiYgaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMjY5KQorICB7CisgICAgcmV0dXJuIFNpMzIyNnhfUlhBdWRpb0dhaW5TZXR1cChoUHJvc2xpYyxwcmVzZXQpOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIyOFgKKyAgaWYgKGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjI4MAorICAgICAgJiYgaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMjg5KQorICB7CisgICAgcmV0dXJuIFNpMzIyOHhfUlhBdWRpb0dhaW5TZXR1cChoUHJvc2xpYyxwcmVzZXQpOworICB9CisjZW5kaWYKKworI2Vsc2UKKyAgU0lMQUJTX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIoaFByb3NsaWMpOworICBTSUxBQlNfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihwcmVzZXQpOworI2VuZGlmIC8qRElTQUJMRV9BVURJT0dBSU5fU0VUVVAqLworICByZXR1cm4gUkNfQ09NUExFVEVfTk9fRVJSOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgUHJvU0xJQ19UWEF1ZGlvR2FpblNjYWxlIChwcm9zbGljQ2hhblR5cGVfcHRyIGhQcm9zbGljLGludCBwcmVzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1SW50MzIgcGdhX3NjYWxlLCB1SW50MzIgZXFfc2NhbGUpCit7CisgIFRSQUNFUFJJTlQoaFByb3NsaWMsICJwcmVzZXQ6ICVkIHBnYV9zY2FsZTogJXUgZXFfc2NhbGU6ICV1XG4iLCBwcmVzZXQsCisgICAgICAgICAgICAgcGdhX3NjYWxlLCBlcV9zY2FsZSk7CisjaWZuZGVmIERJU0FCTEVfQVVESU9HQUlOX1NFVFVQCisgIGlmKGhQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorCisjaWZkZWYgU0kzMjE3WAorICBpZiAoaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMTcxCisgICAgICAmJiBoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIxNzkpCisgIHsKKyAgICByZXR1cm4gU2kzMjE3eF9UWEF1ZGlvR2FpblNjYWxlKGhQcm9zbGljLHByZXNldCxwZ2Ffc2NhbGUsZXFfc2NhbGUpOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIxOFgKKyAgaWYgKGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjE4MAorICAgICAgJiYgaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMTg5KQorICB7CisgICAgcmV0dXJuIFNpMzIxOHhfVFhBdWRpb0dhaW5TY2FsZShoUHJvc2xpYyxwcmVzZXQscGdhX3NjYWxlLGVxX3NjYWxlKTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMTlYCisgIGlmICggSVNfU0kzMjE5WChoUHJvc2xpYy0+ZGV2aWNlSWQpICkKKyAgeworICAgIHJldHVybiBTaTMyMTl4X1RYQXVkaW9HYWluU2NhbGUoaFByb3NsaWMscHJlc2V0LHBnYV9zY2FsZSxlcV9zY2FsZSk7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjI2WAorICBpZiAoaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMjYwCisgICAgICAmJiBoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIyNjkpCisgIHsKKyAgICByZXR1cm4gU2kzMjI2eF9UWEF1ZGlvR2FpblNjYWxlKGhQcm9zbGljLHByZXNldCxwZ2Ffc2NhbGUsZXFfc2NhbGUpOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIyOFgKKyAgaWYgKGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjI4MAorICAgICAgJiYgaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMjg5KQorICB7CisgICAgcmV0dXJuIFNpMzIyOHhfVFhBdWRpb0dhaW5TY2FsZShoUHJvc2xpYyxwcmVzZXQscGdhX3NjYWxlLGVxX3NjYWxlKTsKKyAgfQorI2VuZGlmCisKKyNlbHNlCisgIFNJTEFCU19VTlJFRkVSRU5DRURfUEFSQU1FVEVSKGhQcm9zbGljKTsKKyAgU0lMQUJTX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIocHJlc2V0KTsKKyNlbmRpZiAvKkRJU0FCTEVfQVVESU9HQUlOX1NFVFVQKi8KKyAgcmV0dXJuIFJDX0NPTVBMRVRFX05PX0VSUjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IFByb1NMSUNfUlhBdWRpb0dhaW5TY2FsZSAocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYyxpbnQgcHJlc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUludDMyIHBnYV9zY2FsZSwgdUludDMyIGVxX3NjYWxlKQoreworICBUUkFDRVBSSU5UKGhQcm9zbGljLCAicHJlc2V0OiAlZCBwZ2Ffc2NhbGU6ICV1IGVxX3NjYWxlOiAldVxuIiwgcHJlc2V0LAorICAgICAgICAgICAgIHBnYV9zY2FsZSwgZXFfc2NhbGUpOworI2lmbmRlZiBESVNBQkxFX0FVRElPR0FJTl9TRVRVUAorICBpZihoUHJvc2xpYy0+Y2hhbm5lbFR5cGUgIT0gUFJPU0xJQykKKyAgeworICAgIHJldHVybiBSQ19JR05PUkU7CisgIH0KKyNpZmRlZiBTSTMyMTdYCisgIGlmIChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIxNzEKKyAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjE3OSkKKyAgeworICAgIHJldHVybiBTaTMyMTd4X1JYQXVkaW9HYWluU2NhbGUoaFByb3NsaWMscHJlc2V0LHBnYV9zY2FsZSxlcV9zY2FsZSk7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjE4WAorICBpZiAoaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMTgwCisgICAgICAmJiBoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIxODkpCisgIHsKKyAgICByZXR1cm4gU2kzMjE4eF9SWEF1ZGlvR2FpblNjYWxlKGhQcm9zbGljLHByZXNldCxwZ2Ffc2NhbGUsZXFfc2NhbGUpOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIxOVgKKyAgaWYgKCBJU19TSTMyMTlYKGhQcm9zbGljLT5kZXZpY2VJZCkgKQorICB7CisgICAgcmV0dXJuIFNpMzIxOXhfUlhBdWRpb0dhaW5TY2FsZShoUHJvc2xpYyxwcmVzZXQscGdhX3NjYWxlLGVxX3NjYWxlKTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMjZYCisgIGlmIChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIyNjAKKyAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjI2OSkKKyAgeworICAgIHJldHVybiBTaTMyMjZ4X1JYQXVkaW9HYWluU2NhbGUoaFByb3NsaWMscHJlc2V0LHBnYV9zY2FsZSxlcV9zY2FsZSk7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjI4WAorICBpZiAoaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMjgwCisgICAgICAmJiBoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIyODkpCisgIHsKKyAgICByZXR1cm4gU2kzMjI4eF9SWEF1ZGlvR2FpblNjYWxlKGhQcm9zbGljLHByZXNldCxwZ2Ffc2NhbGUsZXFfc2NhbGUpOworICB9CisjZW5kaWYKKworI2Vsc2UKKyAgU0lMQUJTX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIoaFByb3NsaWMpOworICBTSUxBQlNfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihwcmVzZXQpOworI2VuZGlmIC8qRElTQUJMRV9BVURJT0dBSU5fU0VUVVAqLworICByZXR1cm4gUkNfQ09NUExFVEVfTk9fRVJSOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgUHJvU0xJQ19BdWRpb0dhaW5TZXR1cCAocHJvc2xpY0NoYW5UeXBlX3B0ciBwUHJvc2xpYyxpbnQzMiByeGdhaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzIgdHhnYWluLGludCBwcmVzZXQpCit7CisgIGludCByYzsKKyNpZm5kZWYgRElTQUJMRV9BVURJT0dBSU5fU0VUVVAKKyAgaW50IGF0eF9wcmVzZXQgPSBUWEFDR0FJTl9TRUw7CisgIGludCBhcnhfcHJlc2V0ID0gUlhBQ0dBSU5fU0VMOworICBUUkFDRVBSSU5UKHBQcm9zbGljLCAicnhnYWluOiAlZCB0eGdhaW46ICVkIHByZXNldDogJWRcbiIsIHJ4Z2FpbiwgdHhnYWluLAorICAgICAgICAgICAgIHByZXNldCk7CisKKyAgcmMgPSBQcm9TTElDX2RiZ1NldFRYR2FpbihwUHJvc2xpYyx0eGdhaW4scHJlc2V0LGF0eF9wcmVzZXQpOworCisgIGlmKCByYyAgPT0gUkNfTk9ORSkKKyAgeworICAgIHJjID0gUHJvU0xJQ19UWEF1ZGlvR2FpblNldHVwKHBQcm9zbGljLFRYQUNHQUlOX1NFTCk7CisgIH0KKworICBpZiggcmMgID09IFJDX05PTkUpCisgIHsKKyAgICByYyA9IFByb1NMSUNfZGJnU2V0UlhHYWluKHBQcm9zbGljLHJ4Z2FpbixwcmVzZXQsYXJ4X3ByZXNldCk7CisgIH0KKworICBpZiggcmMgID09IFJDX05PTkUpCisgIHsKKyAgICByYyA9IFByb1NMSUNfUlhBdWRpb0dhaW5TZXR1cChwUHJvc2xpYyxSWEFDR0FJTl9TRUwpOworICB9CisgIHJldHVybiByYzsKKyNlbHNlCisgIFNJTEFCU19VTlJFRkVSRU5DRURfUEFSQU1FVEVSKHBQcm9zbGljKTsKKyAgU0lMQUJTX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIocHJlc2V0KTsKKyAgcmV0dXJuIFJDX0lHTk9SRTsKKyNlbmRpZiAvKkRJU0FCTEVfQVVESU9HQUlOX1NFVFVQKi8KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IFByb1NMSUNfRENGZWVkU2V0dXAgKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMsaW50IHByZXNldCkKK3sKKyAgVFJBQ0VQUklOVChoUHJvc2xpYywgInByZXNldDogJWRcbiIsIHByZXNldCk7CisjaWZuZGVmIERJU0FCTEVfRENGRUVEX1NFVFVQCisgIGlmKGhQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorCisjaWZkZWYgU0kzMjE3WAorICBpZiAoaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMTcxCisgICAgICAmJiBoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIxNzkpCisgIHsKKyAgICByZXR1cm4gU2kzMjE3eF9EQ0ZlZWRTZXR1cChoUHJvc2xpYyxwcmVzZXQpOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIxOFgKKyAgaWYgKGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjE4MAorICAgICAgJiYgaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMTg5KQorICB7CisgICAgcmV0dXJuIFNpMzIxOHhfRENGZWVkU2V0dXAoaFByb3NsaWMscHJlc2V0KTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMTlYCisgIGlmICggSVNfU0kzMjE5WChoUHJvc2xpYy0+ZGV2aWNlSWQpICkKKyAgeworICAgIHJldHVybiBTaTMyMTl4X0RDRmVlZFNldHVwQ2ZnKGhQcm9zbGljLCBTaTMyMTl4X0RDZmVlZF9QcmVzZXRzLCBwcmVzZXQpOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIyNlgKKyAgaWYgKGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjI2MAorICAgICAgJiYgaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMjY5KQorICB7CisgICAgcmV0dXJuIFNpMzIyNnhfRENGZWVkU2V0dXAoaFByb3NsaWMscHJlc2V0KTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMjhYCisgIGlmIChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIyODAKKyAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjI4OSkKKyAgeworICAgIHJldHVybiBTaTMyMjh4X0RDRmVlZFNldHVwKGhQcm9zbGljLHByZXNldCk7CisgIH0KKyNlbmRpZgorI2Vsc2UKKyAgU0lMQUJTX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIoaFByb3NsaWMpOworICBTSUxBQlNfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihwcmVzZXQpOworI2VuZGlmIC8qRElTQUJMRV9EQ0ZFRURfU0VUVVAqLworICByZXR1cm4gUkNfQ09NUExFVEVfTk9fRVJSOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgUHJvU0xJQ19EQ0ZlZWRTZXR1cENmZyAocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9TTElDX0RDZmVlZF9DZmcgKmNmZywgaW50IHByZXNldCkKK3sKKyAgVFJBQ0VQUklOVChoUHJvc2xpYywgImNmZ1B0ciA9ICVwIHByZXNldCA9ICVkXG4iLCBjZmcsIHByZXNldCk7CisjaWZuZGVmIERJU0FCTEVfRENGRUVEX1NFVFVQCisgIGlmKGhQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorCisjaWZkZWYgU0kzMjE3WAorICBpZiAoaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMTcxCisgICAgICAmJiBoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIxNzkpCisgIHsKKyAgICByZXR1cm4gU2kzMjE3eF9EQ0ZlZWRTZXR1cENmZyhoUHJvc2xpYyxjZmcscHJlc2V0KTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMThYCisgIGlmIChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIxODAKKyAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjE4OSkKKyAgeworICAgIHJldHVybiBTaTMyMTh4X0RDRmVlZFNldHVwQ2ZnKGhQcm9zbGljLGNmZyxwcmVzZXQpOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIxOVgKKyAgaWYgKCBJU19TSTMyMTlYKGhQcm9zbGljLT5kZXZpY2VJZCkgKQorICB7CisgICAgcmV0dXJuIFNpMzIxOXhfRENGZWVkU2V0dXBDZmcoaFByb3NsaWMsY2ZnLHByZXNldCk7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjI2WAorICBpZiAoaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMjYwCisgICAgICAmJiBoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIyNjkpCisgIHsKKyAgICByZXR1cm4gU2kzMjI2eF9EQ0ZlZWRTZXR1cENmZyhoUHJvc2xpYyxjZmcscHJlc2V0KTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMjhYCisgIGlmIChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIyODAKKyAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjI4OSkKKyAgeworICAgIHJldHVybiBTaTMyMjh4X0RDRmVlZFNldHVwQ2ZnKGhQcm9zbGljLGNmZyxwcmVzZXQpOworICB9CisjZW5kaWYKKworI2Vsc2UKKyAgU0lMQUJTX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIoaFByb3NsaWMpOworICBTSUxBQlNfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihwcmVzZXQpOworICBTSUxBQlNfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihjZmcpOworI2VuZGlmIC8qRElTQUJMRV9EQ0ZFRURfU0VUVVAqLworICByZXR1cm4gUkNfQ09NUExFVEVfTk9fRVJSOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgUHJvU0xJQ19HUElPU2V0dXAgKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMpCit7CisgIFRSQUNFUFJJTlQoaFByb3NsaWMsICJcbiIsIE5VTEwpOworI2lmbmRlZiBESVNBQkxFX0dQSU9fU0VUVVAKKyAgaWYoaFByb3NsaWMtPmNoYW5uZWxUeXBlICE9IFBST1NMSUMpCisgIHsKKyAgICByZXR1cm4gUkNfSUdOT1JFOworICB9CisKKyNpZmRlZiBTSTMyMTdYCisgIGlmIChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIxNzEKKyAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjE3OSkKKyAgeworICAgIHJldHVybiBTaTMyMTd4X0dQSU9TZXR1cChoUHJvc2xpYyk7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjI2WAorICBpZiAoaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMjYwCisgICAgICAmJiBoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIyNjkpCisgIHsKKyAgICByZXR1cm4gU2kzMjI2eF9HUElPU2V0dXAoaFByb3NsaWMpOworICB9CisjZW5kaWYKKworI2Vsc2UKKyAgU0lMQUJTX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIoaFByb3NsaWMpOworI2VuZGlmIC8qRElTQUJMRV9HUElPX1NFVFVQKi8KKyAgcmV0dXJuIFJDX0NPTVBMRVRFX05PX0VSUjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBESVNBQkxFX1BVTFNFTUVURVJJTkcKK2ludCBQcm9TTElDX1B1bHNlTWV0ZXJTZXR1cCAocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYyxpbnQgcHJlc2V0KQoreworICBUUkFDRVBSSU5UKGhQcm9zbGljLCAicHJlc2V0ID0gJWRcbiIsIHByZXNldCk7CisjaWZuZGVmIERJU0FCTEVfUFVMU0VfU0VUVVAKKyAgaWYoaFByb3NsaWMtPmNoYW5uZWxUeXBlICE9IFBST1NMSUMpCisgIHsKKyAgICByZXR1cm4gUkNfSUdOT1JFOworICB9CisKKyNpZmRlZiBTSTMyMTdYCisgIGlmIChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIxNzEKKyAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjE3OSkKKyAgeworICAgIHJldHVybiBTaTMyMTd4X1B1bHNlTWV0ZXJTZXR1cChoUHJvc2xpYyxwcmVzZXQpOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIxOFgKKyAgaWYgKGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjE4MAorICAgICAgJiYgaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMTg5KQorICB7CisgICAgcmV0dXJuIFNpMzIxOHhfUHVsc2VNZXRlclNldHVwKGhQcm9zbGljLHByZXNldCk7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjE5WAorICBpZiAoIElTX1NJMzIxOVgoaFByb3NsaWMtPmRldmljZUlkKSApCisgIHsKKyAgICByZXR1cm4gU2kzMjE5eF9QdWxzZU1ldGVyU2V0dXAoaFByb3NsaWMscHJlc2V0KTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMjZYCisgIGlmIChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIyNjAKKyAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjI2OSkKKyAgeworICAgIHJldHVybiBTaTMyMjZ4X1B1bHNlTWV0ZXJTZXR1cChoUHJvc2xpYyxwcmVzZXQpOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIyOFgKKyAgaWYgKGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjI4MAorICAgICAgJiYgaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMjg5KQorICB7CisgICAgcmV0dXJuIFNpMzIyOHhfUHVsc2VNZXRlclNldHVwKGhQcm9zbGljLHByZXNldCk7CisgIH0KKyNlbmRpZgorCisjZWxzZQorICBTSUxBQlNfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihoUHJvc2xpYyk7CisgIFNJTEFCU19VTlJFRkVSRU5DRURfUEFSQU1FVEVSKHByZXNldCk7CisjZW5kaWYgLypESVNBQkxFX1BVTFNFX1NFVFVQKi8KKyAgcmV0dXJuIFJDX0NPTVBMRVRFX05PX0VSUjsKK30KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgUHJvU0xJQ19QQ01TZXR1cCAocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYyxpbnQgcHJlc2V0KQoreworICBUUkFDRVBSSU5UKGhQcm9zbGljLCAicHJlc2V0ID0gJWRcbiIsIHByZXNldCk7CisjaWZuZGVmIERJU0FCTEVfUENNX1NFVFVQCisgIGlmKGhQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorCisjaWZkZWYgU0kzMjE3WAorICBpZiAoaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMTcxCisgICAgICAmJiBoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIxNzkpCisgIHsKKyAgICByZXR1cm4gU2kzMjE3eF9QQ01TZXR1cChoUHJvc2xpYyxwcmVzZXQpOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIxOFgKKyAgaWYgKGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjE4MAorICAgICAgJiYgaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMTg5KQorICB7CisgICAgcmV0dXJuIFNpMzIxOHhfUENNU2V0dXAoaFByb3NsaWMscHJlc2V0KTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMTlYCisgIGlmICggSVNfU0kzMjE5WChoUHJvc2xpYy0+ZGV2aWNlSWQpICkKKyAgeworICAgIHJldHVybiBTaTMyMTl4X1BDTVNldHVwKGhQcm9zbGljLHByZXNldCk7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjI2WAorICBpZiAoaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMjYwCisgICAgICAmJiBoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIyNjkpCisgIHsKKyAgICByZXR1cm4gU2kzMjI2eF9QQ01TZXR1cChoUHJvc2xpYyxwcmVzZXQpOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIyOFgKKyAgaWYgKGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjI4MAorICAgICAgJiYgaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMjg5KQorICB7CisgICAgcmV0dXJuIFNpMzIyOHhfUENNU2V0dXAoaFByb3NsaWMscHJlc2V0KTsKKyAgfQorI2VuZGlmCisjZWxzZQorICBTSUxBQlNfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihoUHJvc2xpYyk7CisgIFNJTEFCU19VTlJFRkVSRU5DRURfUEFSQU1FVEVSKHByZXNldCk7CisjZW5kaWYgLypESVNBQkxFX1BDTV9TRVRVUCovCisgIHJldHVybiBSQ19DT01QTEVURV9OT19FUlI7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBQcm9TTElDX1BDTVRpbWVTbG90U2V0dXAgKHByb3NsaWNDaGFuVHlwZV9wdHIgcFByb3NsaWMsIHVJbnQxNiByeGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUludDE2IHR4Y291bnQpCit7CisgIHVJbnQ4IGRhdGE7CisgIFRSQUNFUFJJTlQocFByb3NsaWMsICJyeCA9ICV1IHR4ID0gJXVcbiIsIHJ4Y291bnQsIHR4Y291bnQpOworCisgIGlmKHBQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorCisgIGRhdGEgPSB0eGNvdW50ICYgMHhmZjsKKyAgV3JpdGVSZWcocFByb3NsaWMscFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfUENNVFhMTyxkYXRhKTsKKworICBkYXRhID0gUmVhZFJlZyhwUHJvc2xpYyxwUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JFR19QQ01UWEhJKTsKKyAgZGF0YSAmPSAweDEwOyAgLyoga2VlcCBUWF9FREdFIGJpdCAqLworICBkYXRhIHw9ICgodHhjb3VudCA+PiA4KSYweDAzKSA7CisgIFdyaXRlUmVnKHBQcm9zbGljLHBQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkVHX1BDTVRYSEksZGF0YSk7CisKKyAgZGF0YSA9IHJ4Y291bnQgJiAweGZmOworICBXcml0ZVJlZyhwUHJvc2xpYyxwUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JFR19QQ01SWExPLGRhdGEpOworCisgIGRhdGEgPSAocnhjb3VudCA+PiA4KSAmIDB4MzsgLyogUENNUlhISSBoYXMgb25seSAyIGJpdHMgZm9yIHRpbWVzbG90ICovCisgIC8qIGFkZCB0byB0aGUgY2FsY3VsYXRlZCB0aW1lc2xvdCB2YWx1ZXMgdGhlIG5vbiB0aW1lc2xvdCBiaXRzICovCisgIGRhdGEgfD0gKFJlYWRSZWcocFByb3NsaWMscFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfUENNUlhISSkgJiAweEZDKTsKKyAgV3JpdGVSZWcocFByb3NsaWMscFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfUENNUlhISSxkYXRhKTsKKworICByZXR1cm4gUkNfTk9ORTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordHlwZWRlZiBQcm9zbGljSW50IHByb3NsaWNJbnRUeXBlTWFwW1NJX01BWF9JTlRFUlJVUFRTXVs4XTsKKworc3RhdGljIGludCBQcm9TTElDX1JlYWRJbnRlcnJ1cHRzSGVscGVyKHByb3NsaWNDaGFuVHlwZV9wdHIgcFByb3NsaWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUludDggKnJlZ0RhdGEsIHVJbnQ4IG51bUNoYW5uZWxzKQoreworICB1SW50OCBpOworICB1SW50OCBpbnRzQWN0aXZlOworICB1SW50OCAqY3VycmVudERhdGEgPSByZWdEYXRhOworICBTSUxBQlNfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihudW1DaGFubmVscyk7CisKKyAgaW50c0FjdGl2ZSA9IFJlYWRSZWcocFByb3NsaWMsIHBQcm9zbGljLT5jaGFubmVsLCBQUk9TTElDX1JFR19JUlEwKTsKKworI2lmZGVmIFBST1NMSUNfT1BUSU1JWkVfSU5URVJSVVBUUworICAvKiBGb3IgZHVhbCBjaGFubmVsIGRldmljZXMsIHdlIG5lZWQgdG8gc2hpZnQgdGhlIHVwcGVyIG5pYmJsZSBmb3IgdGhlIHNlY29uZCBjaGFubmVsCisgICAgIGlmIHRoZSBjYWxsZXIgcmVxdWVzdGVkIHRoZSBzZWNvbmQgY2hhbm5lbC4gIFdlIGRldGVybWluZSB0aGlzIGJ5IGNoYW5uZWwgSUQgYmVpbmcKKyAgICAgZXZlbiBvciBvZGQuICBJZiB0aGlzIGlzIE5PVCB0cnVlIC0gZm9yIGV4YW1wbGUgYSBTaTMyMTd4IGFuZCB0aGVuIGEgU2kzMjI2eCBjaGlwc2V0CisgICAgIGNvbmZpZ3VyYXRpb24gb24gdGhlIHNhbWUgZGFpc3ljaGFpbiwgdGhlbiB0aGlzIG9wdGltaXphdGlvbiBsb2dpYyB3aWxsIG5vdCB3b3JrICovCisjaWYgZGVmaW5lZChTSTMyMjZYKSB8fCBkZWZpbmVkKFNJMzIyOFgpCisgIGlmKCAobnVtQ2hhbm5lbHMgIT0gMCkgJiYgKChwUHJvc2xpYy0+Y2hhbm5lbCkgJiAweDEpKQorICB7CisgICAgaW50c0FjdGl2ZSA9IGludHNBY3RpdmUgPj4gNDsKKyAgfQorI2VuZGlmIC8qIE11bHRpY2hhbm5lbCBkZXZpY2VzICovCisjZW5kaWYKKworICAvKiBJZiB0aGVyZSBhcmUgbm8gaW50ZXJydXB0cywgc3RvcC4uLiByZXR1cm4gYmFjayB0byBjYWxsaW5nIGZ1bmN0aW9uICovCisgIGlmKChpbnRzQWN0aXZlICYweEYpID09IDApCisgIHsKKyAgICByZXR1cm4gUkNfSUdOT1JFOworICB9CisKKyAgZm9yKGkgPSBQUk9TTElDX1JFR19JUlExOyBpIDw9IFBST1NMSUNfUkVHX0lSUTQ7IGkrKykKKyAgeworI2lmZGVmIFBST1NMSUNfT1BUSU1JWkVfSU5URVJSVVBUUworICAgIC8qIFJlYWQgSVJRbiBSZWdpc3RlciBvbmx5IGlmIElSUTAgc3RhdGVzIHRoZXJlIHdhcyBhbiBpbnRlcnJ1cHQgcGVuZGluZywgb3RoZXJ3aXNlCisgICAgICAgc2tpcCBpdC4gVGhpcyBlbGltaW5hdGVzIHVubmVlZGVkIFNQSSB0cmFuc2FjdGlvbnMuCisgICAgKi8KKyAgICBpZiggKGludHNBY3RpdmUgJiAoMTw8KGktUFJPU0xJQ19SRUdfSVJRMSkpKSA9PSAwKQorICAgIHsKKyAgICAgICpjdXJyZW50RGF0YSsrID0gMDsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyNlbmRpZgorICAgICpjdXJyZW50RGF0YSA9ICh1SW50OClSZWFkUmVnKHBQcm9zbGljLCBwUHJvc2xpYy0+Y2hhbm5lbCwgaSk7CisjaWZkZWYgR0NJX01PRERFCisgICAgV3JpdGVSZWcocFByb3NsaWMsIHBQcm9zbGljLT5jaGFubmVsLCBpLCAqY3VycmVudF9kYXRhKTsKKyNlbmRpZgorICAgIGN1cnJlbnREYXRhKys7CisgIH0gLyogZm9yIGxvb3AgKi8KKworICByZXR1cm4gUkNfQ09NUExFVEVfTk9fRVJSOworfQorCisvKgorIFJlYWRzIElSUTAgdG8gZGV0ZXJtaW5lIGlmIGFuIGludGVycnVwdCBoYXMgb2NjdXJyZWQgZm9yIHRoZSBwYXJ0aWN1bGFyIGRldmljZSwKKyBpZiBzbywgcmVhZHMgdGhlIGludGVycnVwdCByZWdpc3RlcihzKSB0aGF0IGZpcmVkIHRoZSBpbnRlcnJ1cHQgYW5kIHRoZW4KKyBtYXBzIHRoZSBpbnRlcnJ1cHQocykgdG8gdGhlIGdlbmVyaWMgaW50ZXJydXB0IHZhbHVlIHRvIHJldHVybiB0byB0aGUgY2FsbGVyLgorCisgQ29kZSBhc3N1bWVzIG5vcm1hbCBjaGlwc2V0L2NvbXBhdGliaWxpdHkgdGVzdGluZyBoYXMgYWxyZWFkeSBiZWVuIGRvbmUuCisqLworc3RhdGljIGludCBQcm9TTElDX0dldEludGVycnVwdEhlbHBlcihwcm9zbGljQ2hhblR5cGVfcHRyIHBQcm9zbGljLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9zbGljSW50VHlwZU1hcCBpbnRNYXAsIHByb3NsaWNJbnRUeXBlICpwSW50RGF0YSwgdUludDggbnVtQ2hhbm5lbHMpCit7CisgIGludCBpLGo7CisgIHVJbnQ4IGludERhdGFbU0lfTUFYX0lOVEVSUlVQVFNdOworICB1SW50OCAqY3VycmVudERhdGE7CisgIHVJbnQ4IG1hcCwgaW50Q291bnQ7CisgIEJPT0xFQU4gc2FmZXR5SW50ID0gRkFMU0U7CisKKyAgLyogSW5pdGlhbGl6ZSBpbnRlcnJ1cHQgY291bnQgdG8gMCAqLworICBwSW50RGF0YS0+IG51bWJlciA9IDA7CisKKyAgaWYoIFByb1NMSUNfUmVhZEludGVycnVwdHNIZWxwZXIocFByb3NsaWMsIGludERhdGEsIG51bUNoYW5uZWxzKSA9PSBSQ19JR05PUkUpCisgIHsKKyAgICAvKiBObyBpbnRlcnJ1cHRzIGZvciB0aGUgZ2l2ZW4gY2hhbm5lbC4gKi8KKyAgICByZXR1cm4gUkNfTk9ORTsKKyAgfQorCisgIC8qIEF0IHRoaXMgcG9pbnQgd2UndmUgY29sbGVjdGVkIGFsbCB0aGUgcmVnaXN0ZXJzLCBub3cgZGVjb2RlIHRoZSBkYXRhICovCisgIGN1cnJlbnREYXRhID0gaW50RGF0YTsKKyAgaW50Q291bnQgPSAwOworCisgIGZvcihpID0gMDsgaSA8IFNJX01BWF9JTlRFUlJVUFRTOyBpKyspCisgIHsKKyAgICBpZigqY3VycmVudERhdGEpCisgICAgeworICAgICAgZm9yKGogPSAwOyBqIDwgODsgaisrKQorICAgICAgeworICAgICAgICBpZiggKmN1cnJlbnREYXRhICYgKDE8PGopICkKKyAgICAgICAgeworICAgICAgICAgIG1hcCA9IGludE1hcFtpXVtqXTsKKyAgICAgICAgICBwSW50RGF0YS0+aXJxc1tpbnRDb3VudF0gPSBtYXA7CisKKyAgICAgICAgICBpZiggKG1hcCA9PSBJUlFfUF9IVklDKQorICAgICAgICAgICAgICB8fCAobWFwID09IElSUV9QX1RIRVJNKSApCisgICAgICAgICAgeworICAgICAgICAgICAgc2FmZXR5SW50ID0gVFJVRTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpbnRDb3VudCsrOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGN1cnJlbnREYXRhKys7CisgIH0KKyAgCisgIHBJbnREYXRhLT5udW1iZXIgPSBpbnRDb3VudDsKKyAgCisgIGlmKCBzYWZldHlJbnQgPT0gVFJVRSkKKyAgeworICAgIGlmKFByb1NMSUNfaXNSZWluaXRSZXF1aXJlZChwUHJvc2xpYykpCisgICAgeworICAgICAgcmV0dXJuIFJDX1JFSU5JVF9SRVFVSVJFRDsKKyAgICB9CisgIH0KKworICByZXR1cm4gcEludERhdGEtPm51bWJlcjsKK30KKworCitpbnQgUHJvU0xJQ19HZXRJbnRlcnJ1cHRzIChwcm9zbGljQ2hhblR5cGVfcHRyIGhQcm9zbGljLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvc2xpY0ludFR5cGUgKnBJbnREYXRhKQoreworICBjb25zdCBwcm9zbGljSW50VHlwZU1hcCBpbnRlcnJ1cHRNYXAgPQorICB7CisgICAge0lSUV9PU0MxX1QxLCBJUlFfT1NDMV9UMiwgSVJRX09TQzJfVDEsIElSUV9PU0MyX1QyLCBJUlFfUklOR19UMSwgSVJRX1JJTkdfVDIsIElSUV9GU0tCVUZfQVZBSUwsIElSUV9WQkFUfSwKKyAgICB7SVJRX1JJTkdfVFJJUCwgSVJRX0xPT1BfU1RBVFVTLCBJUlFfTE9OR19TVEFULCBJUlFfVk9DX1RSQUNLLCBJUlFfRFRNRiwgSVJRX0lORElSRUNULCBJUlFfUlhNRE0sIElSUV9UWE1ETX0sCisgICAge0lSUV9QX0hWSUMsIElSUV9QX1RIRVJNLCBJUlFfUFEzLCBJUlFfUFE0LCBJUlFfUFE1LCBJUlFfUFE2LCBJUlFfRFNQLCBJUlFfTUFEQ19GU30sCisgICAge0lSUV9VU0VSXzAsIElSUV9VU0VSXzEsIElSUV9VU0VSXzIsIElSUV9VU0VSXzMsIElSUV9VU0VSXzQsIElSUV9VU0VSXzUsIElSUV9VU0VSXzYsIElSUV9VU0VSXzd9CisgIH07CisKKyAgcEludERhdGEtPm51bWJlcj0wOworICAvKiBUUkFDRVBSSU5UKGhQcm9zbGljLCAiXG4iLCBOVUxMKTsgKi8KKyAgaWYoaFByb3NsaWMtPmNoYW5uZWxUeXBlICE9IFBST1NMSUMpCisgIHsKKyAgICByZXR1cm4gUkNfSUdOT1JFOworICB9CisjaWYgZGVmaW5lZCAoU0kzMjE3WCkgfHwgZGVmaW5lZCAoU0kzMjE4WCkgfHwgZGVmaW5lZChTSTMyMTlYKQorICBpZiAoMAorI2lmZGVmIFNJMzIxN1gKKyAgICAgIHx8IChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIxNzEKKyAgICAgICAgICAmJiBoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIxNzkpCisjZW5kaWYKKyNpZmRlZiBTSTMyMThYCisgICAgICB8fCAoaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMTgwCisgICAgICAgICAgJiYgaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMTg5KQorI2VuZGlmCisjaWZkZWYgU0kzMjE5WAorICAgICAgfHwgKCBJU19TSTMyMTlYKGhQcm9zbGljLT5kZXZpY2VJZCkgKQorI2VuZGlmCisgICAgICkKKyAgeworICAgIHJldHVybiBQcm9TTElDX0dldEludGVycnVwdEhlbHBlcihoUHJvc2xpYywgaW50ZXJydXB0TWFwLCBwSW50RGF0YSwgMSk7CisgIH0KKyNlbmRpZgorI2lmIGRlZmluZWQgKFNJMzIyNlgpIHx8IGRlZmluZWQgKFNJMzIyOFgpCisgIGlmKCAwCisjaWZkZWYgU0kzMjI2WAorICAgICAgfHwgKGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjI2MAorICAgICAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjI2OSkKKyNlbmRpZgorI2lmZGVmIFNJMzIyOFgKKyAgICAgIHx8IChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIyODAKKyAgICAgICAgICAmJiBoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIyODkpCisjZW5kaWYKKyAgICApCisgIHsKKyAgICByZXR1cm4gUHJvU0xJQ19HZXRJbnRlcnJ1cHRIZWxwZXIoaFByb3NsaWMsIGludGVycnVwdE1hcCwgcEludERhdGEsIDIpOworICB9CisjZW5kaWYKKyAgcmV0dXJuIFJDX0NPTVBMRVRFX05PX0VSUjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IFByb1NMSUNfUmVhZEhvb2tTdGF0dXMgKHByb3NsaWNDaGFuVHlwZV9wdHIgcFByb3NsaWMsdUludDggKnBIb29rU3RhdCkKK3sKKyAgVFJBQ0VQUklOVChwUHJvc2xpYywgIlxuIiwgTlVMTCk7CisgICpwSG9va1N0YXQgPSBQUk9TTElDX09OSE9PSzsKKworICBpZihwUHJvc2xpYy0+Y2hhbm5lbFR5cGUgIT0gUFJPU0xJQykKKyAgeworICAgIHJldHVybiBSQ19JR05PUkU7CisgIH0KKyAgaWYgKFJlYWRSZWcocFByb3NsaWMscFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfTENSUlRQKSAmIDIpCisgIHsKKyAgICAqcEhvb2tTdGF0PVBST1NMSUNfT0ZGSE9PSzsKKyAgfQorICByZXR1cm4gUkNfTk9ORTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IFByb1NMSUNfU2V0TGluZWZlZWRTdGF0dXMgKHByb3NsaWNDaGFuVHlwZV9wdHIgcFByb3NsaWMsIHVJbnQ4IG5ld0xpbmVmZWVkKQoreworICB1SW50OCBsZlN0YXRlOworICB1SW50OCBpcnFlbjE9MDsKKyAgVFJBQ0VQUklOVChwUHJvc2xpYywgImxpbmVmZWVkID0gJXVcbiIsIG5ld0xpbmVmZWVkKTsKKyAgCisgIGlmKHBQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorCisgIC8qIEdldCB0aGUgaXJxZW4xIHNldHRpbmcgLSB1c2VkIHRvIGRldGVybWluZSBpZiB2YmF0IGludGVycnVwdCB3YXMgc2V0Li4uICovCisjaWZkZWYgU0kzMjE3WAorICBpZiAocFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMTcxCisgICAgJiYgcFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMTc5KQorICB7CisgICAgICBpcnFlbjEgPSBTaTMyMTd4X0dlbmVyYWxfQ29uZmlndXJhdGlvbi5pcnFlbjE7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjE4WAorICBpZiAocFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMTgwCisgICAgJiYgcFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMTg5KQorICB7CisgICAgICBpcnFlbjEgPSBTaTMyMTh4X0dlbmVyYWxfQ29uZmlndXJhdGlvbi5pcnFlbjE7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjE5WAorICBpZiAoIElTX1NJMzIxOVgocFByb3NsaWMtPmRldmljZUlkKSApCisgIHsKKyAgICAgIGlycWVuMSA9IFNpMzIxOXhfR2VuZXJhbF9Db25maWd1cmF0aW9uLmlycWVuMTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMjZYCisgIGlmIChwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIyNjAKKyAgICAmJiBwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIyNjkpCisgIHsKKyAgICAgIGlycWVuMSA9IFNpMzIyNnhfR2VuZXJhbF9Db25maWd1cmF0aW9uLmlycWVuMTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMjhYCisgIGlmIChwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIyODAKKyAgICAmJiBwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIyODkpCisgIHsKKyAgICAgIGlycWVuMSA9IFNpMzIyOHhfR2VuZXJhbF9Db25maWd1cmF0aW9uLmlycWVuMTsKKyAgfQorI2VuZGlmCisKKyAgaWYoIChuZXdMaW5lZmVlZCYgMHhGKSAgPT0gTEZfUklOR0lORyApCisgIHsKKyAgICB1SW50OCByZWdUZW1wOworCisgICAgbGZTdGF0ZSA9IFJlYWRSZWcocFByb3NsaWMsIHBQcm9zbGljLT5jaGFubmVsLCBQUk9TTElDX1JFR19MSU5FRkVFRCk7CisKKyAgICAvKiBPbmx5IGNoYW5nZSB0byByaW5naW5nIHN0YXRlIGlmIG5vdCByaW5naW5nLi4uICovCisgICAgaWYoIChsZlN0YXRlICYgMHhGKSAhPSBMRl9SSU5HSU5HICkKKyAgICB7CisgICAgICBpZihpcnFlbjEgJiAweDgwKQorICAgICAgeworICAgICAgICAvKmRpc2FibGUgdmJhdCBpbnRlcnJ1cHQgZHVyaW5nIHJpbmdpbmcqLworICAgICAgICByZWdUZW1wID0gUmVhZFJlZyhwUHJvc2xpYywgcFByb3NsaWMtPmNoYW5uZWwsIFBST1NMSUNfUkVHX0lSUUVOMSApOworICAgICAgICBXcml0ZVJlZyAocFByb3NsaWMsIHBQcm9zbGljLT5jaGFubmVsLCBQUk9TTElDX1JFR19JUlFFTjEsIHJlZ1RlbXAmKH4weDgwKSk7CisgICAgICB9CisKKyAgICAgIFdyaXRlUmVnKHBQcm9zbGljLCBwUHJvc2xpYy0+Y2hhbm5lbCwgUFJPU0xJQ19SRUdfTElORUZFRUQsIExGX1JJTkdJTkcpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgICB9CisgIH0KKyAgZWxzZQorICB7CisgICAgdUludDggYXV0b3JkOworCisgICAgLyogUHJlc2VydmUgdGhlIGF1dG8gcmVnaXN0ZXIgc28gd2UgY2FuIHJlc3RvcmUgaXQgYXQgdGhlIGVuZCAqLworICAgIGF1dG9yZCA9IFJlYWRSZWcocFByb3NsaWMsIHBQcm9zbGljLT5jaGFubmVsLCBQUk9TTElDX1JFR19BVVRPUkQgKTsKKyAgICBXcml0ZVJlZyhwUHJvc2xpYywgcFByb3NsaWMtPmNoYW5uZWwsIFBST1NMSUNfUkVHX0FVVE9SRCwgKGF1dG9yZCAmIDB4RkIpICk7IC8qIERpc2FibGUgQXV0b1JEICovCisKKyAgICBsZlN0YXRlID0gUmVhZFJlZyhwUHJvc2xpYywgcFByb3NsaWMtPmNoYW5uZWwsIFBST1NMSUNfUkVHX0xJTkVGRUVEKTsKKworICAgIGlmKCAobGZTdGF0ZSAmIDB4RikgPT0gTEZfUklOR0lORyApIAorICAgIHsKKyAgICAgIFdyaXRlUmVnKHBQcm9zbGljLCBwUHJvc2xpYy0+Y2hhbm5lbCwgUFJPU0xJQ19SRUdfTElORUZFRUQsIG5ld0xpbmVmZWVkKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIFdlIGFyZSBhbHJlYWR5IGRvaW5nIGEgc3RhdGUgdHJhbnNpdGlvbiwgYWJvcnQgcmVxdWVzdCAqLworICAgICAgaWYoICgobGZTdGF0ZSAmIDB4RjApID09IChMRl9SSU5HSU5HIDw8IDQpICkKKyAgICAgICAgJiYgKCAobGZTdGF0ZSAmIDB4RikgIT0gTEZfUklOR0lORykgKQorICAgICAgeworICAgICAgICBXcml0ZVJlZyhwUHJvc2xpYywgcFByb3NsaWMtPmNoYW5uZWwsIFBST1NMSUNfUkVHX0FVVE9SRCwgYXV0b3JkICk7IC8qIHJlc3RvcmUgdGhlIGF1dG9yZCBiaXQgKi8KKyAgICAgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgICAgIH0KKworICAgICAgV3JpdGVSZWcocFByb3NsaWMsIHBQcm9zbGljLT5jaGFubmVsLCBQUk9TTElDX1JFR19MSU5FRkVFRCwgbmV3TGluZWZlZWQpOworICAgIH0KKyAgICAvKiBSZXN0b3JlIGF1dG9yZCAqLworICAgIFdyaXRlUmVnKHBQcm9zbGljLCBwUHJvc2xpYy0+Y2hhbm5lbCwgUFJPU0xJQ19SRUdfQVVUT1JELCBhdXRvcmQgKTsKKworICAgIC8qIFJlc3RvcmUgSVJRRU4xIHRvIHdoYXQgdGhlIHVzZXIgc3BlY2lmaWVkIC0gaWYgd2UgY2hhbmdlZCBpdC4uICovCisgICAgaWYoaXJxZW4xICYgMHg4MCkKKyAgICB7CisgICAgICBXcml0ZVJlZyAocFByb3NsaWMsIHBQcm9zbGljLT5jaGFubmVsLCBQUk9TTElDX1JFR19JUlFFTjEsIGlycWVuMSk7CisgICAgfQorICB9CisgIHJldHVybiBSQ19OT05FOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgUHJvU0xJQ19TZXRMaW5lZmVlZFN0YXR1c0Jyb2FkY2FzdCAocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1SW50OCBuZXdMaW5lZmVlZCkKK3sKKyAgVFJBQ0VQUklOVChoUHJvc2xpYywgImxpbmVmZWVkID0gJXVcbiIsIG5ld0xpbmVmZWVkKTsKKyAgaWYoaFByb3NsaWMtPmNoYW5uZWxUeXBlICE9IFBST1NMSUMpCisgIHsKKyAgICByZXR1cm4gUkNfSUdOT1JFOworICB9CisKKyAgV3JpdGVSZWcoaFByb3NsaWMsIFBST1NMSUNfQ0hBTl9CUk9BRENBU1QsIFBST1NMSUNfUkVHX0xJTkVGRUVELCBuZXdMaW5lZmVlZCk7CisgIHJldHVybiBSQ19DT01QTEVURV9OT19FUlI7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBQcm9TTElDX1BvbFJldiAocHJvc2xpY0NoYW5UeXBlX3B0ciBwUHJvc2xpYyx1SW50OCBhYnJ1cHQsCisgICAgICAgICAgICAgICAgICAgIHVJbnQ4IG5ld1BvbFJldlN0YXRlKQoreworICB1SW50OCBkYXRhID0gMDsKKyAgVFJBQ0VQUklOVChwUHJvc2xpYywgImFicnVwdCA9ICV1IG5ld1BvbFJldlN0YXRlID0gJXVcbiIsIGFicnVwdCwKKyAgICAgICAgICAgICBuZXdQb2xSZXZTdGF0ZSk7CisgIGlmKHBQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorCisgIHN3aXRjaCAobmV3UG9sUmV2U3RhdGUpCisgIHsKKyAgICBjYXNlIFBPTFJFVl9TVE9QOgorICAgICAgZGF0YSA9IDA7CisgICAgICBicmVhazsKKyAgICBjYXNlIFBPTFJFVl9TVEFSVDoKKyAgICAgIGRhdGEgPSAyOworICAgICAgYnJlYWs7CisgICAgY2FzZSBXSU5LX1NUQVJUOgorICAgICAgZGF0YSA9IDY7CisgICAgICBicmVhazsKKyAgICBjYXNlIFdJTktfU1RPUDoKKyAgICAgIGRhdGEgPSA0OworICAgICAgYnJlYWs7CisgIH0KKworICAvKiBDYW5ub3QgcG9scmV2L3dpbmsgd2hpbGUgbG93IHBvd2VyIG1vZGUgaXMgYWN0aXZlICovCisgIFByb1NMSUNfU2V0UG93ZXJzYXZlTW9kZShwUHJvc2xpYyxQV1JTQVZFX0RJU0FCTEUpOworCisgIGlmIChhYnJ1cHQpCisgIHsKKyAgICBkYXRhIHw9IDE7CisgIH0KKworICBXcml0ZVJlZyhwUHJvc2xpYywgcFByb3NsaWMtPmNoYW5uZWwsIFBST1NMSUNfUkVHX1BPTFJFVixkYXRhKTsKKworICByZXR1cm4gUkNfTk9ORTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IFByb1NMSUNfR1BJT0NvbnRyb2wgKHByb3NsaWNDaGFuVHlwZV9wdHIgcFByb3NsaWMsdUludDggKnBHcGlvRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1SW50OCByZWFkKQoreworICBUUkFDRVBSSU5UKHBQcm9zbGljLCAiXG4iLCBOVUxMKTsKKyAgaWYocFByb3NsaWMtPmNoYW5uZWxUeXBlICE9IFBST1NMSUMpCisgIHsKKyAgICByZXR1cm4gUkNfSUdOT1JFOworICB9CisjaWYgZGVmaW5lZChTSTMyMTdYKSB8fCBkZWZpbmVkIChTSTMyMjZYKQorICBpZiggMAorI2lmZGVmIFNJMzIxN1gKKyAgICAgIHx8IChwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIxNzEKKyAgICAgICAgICAmJiBwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIxNzkpCisjZW5kaWYKKyNpZmRlZiBTSTMyMjZYCisgICAgICB8fCAocFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMjYwCisgICAgICAgICAgJiYgcFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMjY5KQorI2VuZGlmCisgICAgKQorICB7CisgICAgaWYgKHJlYWQpCisgICAgeworICAgICAgKnBHcGlvRGF0YSA9IDB4ZiAmIFJlYWRSZWcocFByb3NsaWMscFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfR1BJTyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBXcml0ZVJlZyhwUHJvc2xpYyxwUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JFR19HUElPLAorICAgICAgICAgICAgICAgKCpwR3Bpb0RhdGEpfChSZWFkUmVnKHBQcm9zbGljLHBQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkVHX0dQSU8pJjB4ZjApKTsKKyAgICB9CisgICAgcmV0dXJuIFJDX05PTkU7CisgIH0KKyNlbHNlCisgIFNJTEFCU19VTlJFRkVSRU5DRURfUEFSQU1FVEVSKHJlYWQpOworICBTSUxBQlNfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihwR3Bpb0RhdGEpOworI2VuZGlmIAorICByZXR1cm4gUkNfQ09NUExFVEVfTk9fRVJSOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorKiogT3B0aW9uYWwgTmVvbiBNZXNzYWdlIFdhaXRpbmcgU3VwcG9ydAorKi8KKyNpZmRlZiBTSVZPSUNFX05FT05fTVdJX1NVUFBPUlQKK2ludCBQcm9TTElDX01XSVNldFYgKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMsIHVJbnQxNiB2cGtfbWFnKQoreworICB1SW50MzIgcmFtX3ZhbDsKKyAgdUludDggbWF4OworICAKKyAgVFJBQ0VQUklOVChoUHJvc2xpYywgInZwa19tYWcgPSAldVxuIiwgdnBrX21hZyk7CisgIGlmKGhQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorICAKKyAgLyogU2V0IHRoZSBtYXhpbXVtIE1XSSB2b2x0YWdlIGFjY29yZGluZyB0byB0aGUgY2hpcHNldCAqLworI2lmIGRlZmluZWQgKFNJMzIxN1gpIHx8IGRlZmluZWQgKFNJMzIyNlgpCisgIGlmKCAwCisjaWZkZWYgU0kzMjE3WAorICAgICAgfHwgKGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjE3MQorICAgICAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjE3OSkKKyNlbmRpZgorI2lmZGVmIFNJMzIyNlgKKyAgICAgIHx8IChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIyNjAKKyAgICAgICAgICAmJiBoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIyNjkpCisjZW5kaWYKKyAgICApCisgIHsKKyAgICBtYXggPSBTSUxfTVdJX1ZQS19NQVg7CisgIH0KKyNlbmRpZiAvKjE3eC8yNnggKi8KKworI2lmIGRlZmluZWQgKFNJMzIxOFgpIHx8IGRlZmluZWQgKFNJMzIyOFgpIHx8IGRlZmluZWQoU0kzMjE5WCkKKyAgaWYoIDAKKyNpZmRlZiBTSTMyMThYCisgICAgfHwgKGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjE4MAorICAgICAgJiYgaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMTg5KQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMjhYCisgICAgfHwgKGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjI4MAorICAgICAgJiYgaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMjg5KQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMTlYCisgICAgfHwgSVNfU0kzMjE5WChoUHJvc2xpYy0+ZGV2aWNlSWQpIAorI2VuZGlmCisKKyNpZmRlZiBTSTMyMjhYCisgICAgICB8fCAoaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMjgwCisgICAgICAgICAgJiYgaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMjg5KQorI2VuZGlmCisgICAgKQorICB7CisgICAgbWF4ID0gU0lMX01XSV9WUEtfTUFYX0xPOworICB9CisjZW5kaWYgLyogMTh4LCAyOHgsIDE5eCAqLworCisgIC8qIFZvbHRhZ2UgbW9kICovCisgIGlmKHZwa19tYWcgPiAwKSAgLyogU2tpcCBpZiAwIHBhc3NlZCAqLworICB7CisgICAgLyogQ2xhbXAgc3VwcGxpZWQgdmFsdWUgdG8gYWxsb3dhYmxlIHJhbmdlICovCisgICAgaWYodnBrX21hZyA+IG1heCkKKyAgICB7CisgICAgICB2cGtfbWFnID0gbWF4OworICAgIH0KKyAgICBpZih2cGtfbWFnIDwgU0lMX01XSV9WUEtfTUlOKQorICAgIHsKKyAgICAgIHZwa19tYWcgPSBTSUxfTVdJX1ZQS19NSU47CisgICAgfQorICAgIHJhbV92YWwgPSB2cGtfbWFnICogU0NBTEVfUl9NQURDICogMTAwMEw7CisgICAgV3JpdGVSQU0oaFByb3NsaWMsaFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SQU1fTVdJX1YscmFtX3ZhbCk7CisgIH0KKyAgcmV0dXJuIFJDX0NPTVBMRVRFX05PX0VSUjsKK30KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZkZWYgU0lWT0lDRV9ORU9OX01XSV9TVVBQT1JUCitpbnQgUHJvU0xJQ19NV0lFbmFibGUgKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMpCit7CisgIHVJbnQ4IHZhbDsKKyAgcmFtRGF0YSByYW1fdmFsOworICAKKyAgVFJBQ0VQUklOVChoUHJvc2xpYywgIlxuIiwgTlVMTCk7CisgIAorICAvKgorICAqKiBDaGVjayBmb3IgY29uZGl0aW9ucyB0aGF0IHdvdWxkIHByZXZlbnQgZW5hYmxpbmcgTVdJCisgICovCisgIFByb1NMSUNfUmVhZEhvb2tTdGF0dXMoaFByb3NsaWMsJnZhbCk7CisgIGlmKHZhbCAhPSBQUk9TTElDX09OSE9PSykKKyAgeworICAgIHJldHVybiBSQ19NV0lfRU5BQkxFX0ZBSUw7CisgIH0KKyAgCisgIHZhbCA9IFJlYWRSZWcoaFByb3NsaWMsaFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfVVNFUlNUQVQpOworCisgIC8qIENoZWNrIGlmIFBST1NMSUMgYW5kIGRpc2FibGVkIE1XSSwgaWYgbm90LCBpZ25vcmUgdGhpcyByZXF1ZXN0LiAqLworICBpZiggKGhQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQorICAgICAgIHx8ICh2YWwgJiBTSUxfTVdJX1VTVEFUX1NFVCApICkKKyAgeworICAgIHJldHVybiBSQ19JR05PUkU7CisgIH0KKyAgCisgIC8qIFNhdmUgcGFyYW1ldGVycyAqLworICBoUHJvc2xpYy0+bXdpU2F2ZS5yaW5nb2YgPSBSZWFkUkFNKGhQcm9zbGljLGhQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkFNX1JJTkdPRik7CisgIGhQcm9zbGljLT5td2lTYXZlLnJpbmdhbXAgPSBSZWFkUkFNKGhQcm9zbGljLGhQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkFNX1JJTkdBTVApOworICBoUHJvc2xpYy0+bXdpU2F2ZS52YmF0cl9leHBlY3QgPSBSZWFkUkFNKGhQcm9zbGljLGhQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkFNX1ZCQVRSX0VYUEVDVCk7CisgIGhQcm9zbGljLT5td2lTYXZlLnZvdl9yaW5nX2JhdCA9IFJlYWRSQU0oaFByb3NsaWMsaFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SQU1fVk9WX1JJTkdfQkFUKTsKKyAgaFByb3NsaWMtPm13aVNhdmUudm92X3JpbmdfZ25kID0gUmVhZFJBTShoUHJvc2xpYyxoUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JBTV9WT1ZfUklOR19HTkQpOworICBoUHJvc2xpYy0+bXdpU2F2ZS5ydGFjdGggPSBSZWFkUkFNKGhQcm9zbGljLGhQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkFNX1JUQUNUSCk7CisgIGhQcm9zbGljLT5td2lTYXZlLnJ0ZGN0aCA9IFJlYWRSQU0oaFByb3NsaWMsaFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SQU1fUlREQ1RIKTsKKyAgaFByb3NsaWMtPm13aVNhdmUuaXJpbmdfbGltID0gUmVhZFJBTShoUHJvc2xpYyxoUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JBTV9JUklOR19MSU0pOworICBoUHJvc2xpYy0+bXdpU2F2ZS5kY2RjX3JuZ3R5cGUgPSBSZWFkUkFNKGhQcm9zbGljLGhQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkFNX0RDRENfUk5HVFlQRSk7CisgIGhQcm9zbGljLT5td2lTYXZlLnNsb3BlX3JpbmcgPSBSZWFkUkFNKGhQcm9zbGljLGhQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkFNX1NMT1BFX1JJTkcpOworICBoUHJvc2xpYy0+bXdpU2F2ZS5ydHBlciA9IFJlYWRSQU0oaFByb3NsaWMsaFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SQU1fUlRQRVIpOworICBoUHJvc2xpYy0+bXdpU2F2ZS5yaW5nZnIgPSBSZWFkUkFNKGhQcm9zbGljLGhQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkFNX1JJTkdGUik7CisgIGhQcm9zbGljLT5td2lTYXZlLnJ0ZGNkYiA9IFJlYWRSQU0oaFByb3NsaWMsaFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SQU1fUlREQ0RCKTsKKyAgaFByb3NsaWMtPm13aVNhdmUubGNybWFzayA9IFJlYWRSQU0oaFByb3NsaWMsaFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SQU1fTENSTUFTSyk7CisgIGhQcm9zbGljLT5td2lTYXZlLmRjZGNfb2l0aHJlc2hfbG8gPSBSZWFkUkFNKGhQcm9zbGljLGhQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkFNX0RDRENfT0lUSFJFU0hfTE8pOworICBoUHJvc2xpYy0+bXdpU2F2ZS5lbmhhbmNlID0gUmVhZFJlZyhoUHJvc2xpYyxoUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JFR19FTkhBTkNFKTsKKyAgaFByb3NsaWMtPm13aVNhdmUucmluZ2NvbiA9IFJlYWRSZWcoaFByb3NsaWMsaFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfUklOR0NPTik7CisgIGhQcm9zbGljLT5td2lTYXZlLnVzZXJzdGF0ID0gIHZhbDsKKyAgaFByb3NsaWMtPm13aVNhdmUubGluZWZlZWQgPSBSZWFkUmVnKGhQcm9zbGljLGhQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkVHX0xJTkVGRUVEKTsKKyAgCisgIC8qIE1vZGlmeSBwYXJhbWV0ZXJzICovCisgIFByb1NMSUNfU2V0TGluZWZlZWRTdGF0dXMoaFByb3NsaWMsTEZfRldEX0FDVElWRSk7CisgIHJhbV92YWwgPSBSZWFkUkFNKGhQcm9zbGljLGhQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkFNX01XSV9WKTsKKyAgV3JpdGVSQU0oaFByb3NsaWMsaFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SQU1fUklOR09GLHJhbV92YWwpOworICBXcml0ZVJBTShoUHJvc2xpYyxoUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JBTV9SSU5HQU1QLDB4MEwpOworCisgIC8qIFNldCB0aGUgVkJBVFJfRVhQRUNUIGFjY29yZGluZyB0byB0aGUgY2hpcHNldCAqLworI2lmIGRlZmluZWQgKFNJMzIxN1gpIHx8IGRlZmluZWQgKFNJMzIyNlgpCisgIGlmKCAwCisjaWZkZWYgU0kzMjE3WAorICAgICAgfHwgKGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjE3MQorICAgICAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjE3OSkKKyNlbmRpZgorI2lmZGVmIFNJMzIyNlgKKyAgICAgIHx8IChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIyNjAKKyAgICAgICAgICAmJiBoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIyNjkpCisjZW5kaWYKKyAgICApCisgIHsKKyAgICByYW1fdmFsID0gMHg3RkZGRkMyTDsKKyAgfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChTSTMyMThYKSB8fCBkZWZpbmVkIChTSTMyMjhYKSB8fCBkZWZpbmVkKFNJMzIxOVgpCisgIGlmKCAwCisjaWZkZWYgU0kzMjE4WAorICAgICAgfHwgKGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjE4MAorICAgICAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjE4OSkKKyNlbmRpZgorCisjaWZkZWYgU0kzMjI4WAorICAgICAgfHwgKGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjI4MAorICAgICAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjI4OSkKKyNlbmRpZgorCisjaWZkZWYgU0kzMjE5WAorICAgIHx8IElTX1NJMzIxOVgoaFByb3NsaWMtPmRldmljZUlkKSAKKyNlbmRpZgorICAgICkKKyAgeworICAgIHJhbV92YWwgPSAweDA2ODY2NjM1TDsKKyAgfQorI2VuZGlmIC8qIDE4eCwyOHgsIDE5eCAqLworCisgIFdyaXRlUkFNKGhQcm9zbGljLGhQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkFNX1ZCQVRSX0VYUEVDVCxyYW1fdmFsKTsKKyAgV3JpdGVSQU0oaFByb3NsaWMsaFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SQU1fVk9WX1JJTkdfQkFULDB4MEwpOworICBXcml0ZVJBTShoUHJvc2xpYyxoUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JBTV9WT1ZfUklOR19HTkQsMHgwNTFFQjgwTCk7CisgIFdyaXRlUkFNKGhQcm9zbGljLGhQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkFNX1JUQUNUSCwweDBGRkZGRkZGTCk7CisgIFdyaXRlUkFNKGhQcm9zbGljLGhQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkFNX1JURENUSCwweDM4RTM4RUwpOworICBXcml0ZVJBTShoUHJvc2xpYyxoUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JBTV9JUklOR19MSU0sMHgzODAwMDBMKTsKKyAgV3JpdGVSQU0oaFByb3NsaWMsaFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SQU1fRENEQ19STkdUWVBFLDB4MTAwMDAwTCk7CisgIFdyaXRlUkFNKGhQcm9zbGljLGhQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkFNX1NMT1BFX1JJTkcsMHgxNUU1MjAwRUwpOworICBXcml0ZVJBTShoUHJvc2xpYyxoUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JBTV9SVFBFUiwweDUwMDAwTCk7CisgIFdyaXRlUkFNKGhQcm9zbGljLGhQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkFNX1JJTkdGUiwweDA3RUZFMDAwTCk7CisgIFdyaXRlUkFNKGhQcm9zbGljLGhQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkFNX1JURENEQiwweDAwMDBBMDAwTCk7CisgIFdyaXRlUkFNKGhQcm9zbGljLGhQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkFNX0xDUk1BU0ssMHgwMDBGMDAwMEwpOworICByYW1fdmFsID0gUmVhZFJBTShoUHJvc2xpYyxoUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JBTV9EQ0RDX09JVEhSRVNIX0hJKTsKKyAgV3JpdGVSQU0oaFByb3NsaWMsaFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SQU1fRENEQ19PSVRIUkVTSF9MTyxyYW1fdmFsKTsKKyAgV3JpdGVSZWcoaFByb3NsaWMsaFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfRU5IQU5DRSxoUHJvc2xpYy0+bXdpU2F2ZS5lbmhhbmNlJjB4RUYpOworICBXcml0ZVJlZyhoUHJvc2xpYyxoUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JFR19SSU5HQ09OLDB4MDApOworICBXcml0ZVJlZyhoUHJvc2xpYyxoUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JFR19VU0VSU1RBVCwweDBDKTsKKyAgCisgIHJldHVybiBSQ19DT01QTEVURV9OT19FUlI7Cit9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmZGVmIFNJVk9JQ0VfTkVPTl9NV0lfU1VQUE9SVAoraW50IFByb1NMSUNfTVdJRGlzYWJsZSAocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYykKK3sKKyAgVFJBQ0VQUklOVChoUHJvc2xpYywgIlxuIiwgTlVMTCk7CisKKyAgLyogQ2hlY2sgaWYgUFJPU0xJQyBhbmQgZW5hYmxlZCBNV0ksIGlmIG5vdCwgaWdub3JlIHRoaXMgcmVxdWVzdC4gKi8KKyAgaWYoIChoUHJvc2xpYy0+Y2hhbm5lbFR5cGUgIT0gUFJPU0xJQykKKyAgICAgICB8fCAhKFJlYWRSZWcoaFByb3NsaWMsaFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfVVNFUlNUQVQpICYgU0lMX01XSV9VU1RBVF9TRVQgKSApCisgIHsKKyAgICByZXR1cm4gUkNfSUdOT1JFOworICB9CisKKyAgUHJvU0xJQ19TZXRMaW5lZmVlZFN0YXR1cyhoUHJvc2xpYyxMRl9GV0RfQUNUSVZFKTsKKyAgV3JpdGVSQU0oaFByb3NsaWMsaFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SQU1fUklOR09GLGhQcm9zbGljLT5td2lTYXZlLnJpbmdvZik7CisgIFdyaXRlUkFNKGhQcm9zbGljLGhQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkFNX1JJTkdBTVAsaFByb3NsaWMtPm13aVNhdmUucmluZ2FtcCk7CisgIFdyaXRlUkFNKGhQcm9zbGljLGhQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkFNX1ZCQVRSX0VYUEVDVCxoUHJvc2xpYy0+bXdpU2F2ZS52YmF0cl9leHBlY3QpOworICBXcml0ZVJBTShoUHJvc2xpYyxoUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JBTV9WT1ZfUklOR19CQVQsaFByb3NsaWMtPm13aVNhdmUudm92X3JpbmdfYmF0KTsKKyAgV3JpdGVSQU0oaFByb3NsaWMsaFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SQU1fVk9WX1JJTkdfR05ELGhQcm9zbGljLT5td2lTYXZlLnZvdl9yaW5nX2duZCk7CisgIFdyaXRlUkFNKGhQcm9zbGljLGhQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkFNX1JUQUNUSCxoUHJvc2xpYy0+bXdpU2F2ZS5ydGFjdGgpOworICBXcml0ZVJBTShoUHJvc2xpYyxoUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JBTV9SVERDVEgsaFByb3NsaWMtPm13aVNhdmUucnRkY3RoKTsKKyAgV3JpdGVSQU0oaFByb3NsaWMsaFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SQU1fSVJJTkdfTElNLGhQcm9zbGljLT5td2lTYXZlLmlyaW5nX2xpbSk7CisgIFdyaXRlUkFNKGhQcm9zbGljLGhQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkFNX0RDRENfUk5HVFlQRSxoUHJvc2xpYy0+bXdpU2F2ZS5kY2RjX3JuZ3R5cGUpOworICBXcml0ZVJBTShoUHJvc2xpYyxoUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JBTV9TTE9QRV9SSU5HLGhQcm9zbGljLT5td2lTYXZlLnNsb3BlX3JpbmcpOworICBXcml0ZVJBTShoUHJvc2xpYyxoUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JBTV9SVFBFUixoUHJvc2xpYy0+bXdpU2F2ZS5ydHBlcik7CisgIFdyaXRlUkFNKGhQcm9zbGljLGhQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkFNX1JJTkdGUixoUHJvc2xpYy0+bXdpU2F2ZS5yaW5nZnIpOworICBXcml0ZVJBTShoUHJvc2xpYyxoUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JBTV9SVERDREIsaFByb3NsaWMtPm13aVNhdmUucnRkY2RiKTsKKyAgV3JpdGVSQU0oaFByb3NsaWMsaFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SQU1fTENSTUFTSyxoUHJvc2xpYy0+bXdpU2F2ZS5sY3JtYXNrKTsKKyAgV3JpdGVSQU0oaFByb3NsaWMsaFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SQU1fRENEQ19PSVRIUkVTSF9MTyxoUHJvc2xpYy0+bXdpU2F2ZS5kY2RjX29pdGhyZXNoX2xvKTsKKyAgV3JpdGVSZWcoaFByb3NsaWMsaFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfRU5IQU5DRSxoUHJvc2xpYy0+bXdpU2F2ZS5lbmhhbmNlKTsKKyAgV3JpdGVSZWcoaFByb3NsaWMsaFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfUklOR0NPTixoUHJvc2xpYy0+bXdpU2F2ZS5yaW5nY29uKTsKKyAgV3JpdGVSZWcoaFByb3NsaWMsaFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfVVNFUlNUQVQsaFByb3NsaWMtPm13aVNhdmUudXNlcnN0YXQpOworICBQcm9TTElDX1NldExpbmVmZWVkU3RhdHVzKGhQcm9zbGljLGhQcm9zbGljLT5td2lTYXZlLmxpbmVmZWVkKTsKKyAgCisgIHJldHVybiBSQ19DT01QTEVURV9OT19FUlI7Cit9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmZGVmIFNJVk9JQ0VfTkVPTl9NV0lfU1VQUE9SVAoraW50IFByb1NMSUNfU2V0TVdJU3RhdGUgKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMsdUludDggZmxhc2hfb24pCit7CisgIFRSQUNFUFJJTlQoaFByb3NsaWMsICJmbGFzaF9vbiA9ICV1XG4iLCBmbGFzaF9vbik7CisgIC8qIENoZWNrIGlmIFBST1NMSUMgYW5kIGVuYWJsZWQgTVdJLCBpZiBub3QsIGlnbm9yZSB0aGlzIHJlcXVlc3QuICovCisgIGlmKCAoaFByb3NsaWMtPmNoYW5uZWxUeXBlICE9IFBST1NMSUMpCisgICAgICAgfHwgIShSZWFkUmVnKGhQcm9zbGljLGhQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkVHX1VTRVJTVEFUKSAmIFNJTF9NV0lfVVNUQVRfU0VUICkgKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorICAKKyAgaWYoZmxhc2hfb24pCisgIHsKKyAgICBQcm9TTElDX1NldExpbmVmZWVkU3RhdHVzKGhQcm9zbGljLExGX1JJTkdJTkcpOworICB9CisgIGVsc2UKKyAgeworICAgIFByb1NMSUNfU2V0TGluZWZlZWRTdGF0dXMoaFByb3NsaWMsTEZfRldEX0FDVElWRSk7CisgIH0KKyAgCisgIHJldHVybiBSQ19DT01QTEVURV9OT19FUlI7Cit9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmZGVmIFNJVk9JQ0VfTkVPTl9NV0lfU1VQUE9SVAoraW50IFByb1NMSUNfR2V0TVdJU3RhdGUgKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMpCit7CisgIFRSQUNFUFJJTlQoaFByb3NsaWMsICJcbiIsIE5VTEwpOworICAvKiBDaGVjayBpZiBQUk9TTElDIGFuZCBlbmFibGVkIE1XSSwgaWYgbm90LCBpZ25vcmUgdGhpcyByZXF1ZXN0LiAqLworICBpZiggKGhQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQorICAgICAgIHx8ICEoUmVhZFJlZyhoUHJvc2xpYyxoUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JFR19VU0VSU1RBVCkgJiBTSUxfTVdJX1VTVEFUX1NFVCApICkKKyAgeworICAgIHJldHVybiBSQ19JR05PUkU7CisgIH0KKyAgCisgIGlmKFJlYWRSZWcoaFByb3NsaWMsaFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfTElORUZFRUQpID09IDB4NDQpCisgIHsKKyAgICByZXR1cm4gU0lMX01XSV9GTEFTSF9PTjsKKyAgfQorICBlbHNlCisgIHsKKyAgICByZXR1cm4gU0lMX01XSV9GTEFTSF9PRkY7CisgIH0KKyAgCisgIHJldHVybiBSQ19DT01QTEVURV9OT19FUlI7Cit9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZmRlZiBTSVZPSUNFX05FT05fTVdJX1NVUFBPUlQKK2ludCBQcm9TTElDX01XSVJhbXBQb2xsKHByb3NsaWNDaGFuVHlwZV9wdHIgcFByb3NsaWMpCit7CisgIHVJbnQzMiBtd2lfdm9sdGFnZTsKKyAgCisgIC8qIENoZWNrIGlmIFBST1NMSUMgYW5kIGVuYWJsZWQgTVdJLCBpZiBub3QsIGlnbm9yZSB0aGlzIHJlcXVlc3QuICovCisgIGlmKCAocFByb3NsaWMtPmNoYW5uZWxUeXBlICE9IFBST1NMSUMpCisgICAgICAgfHwgIShSZWFkUmVnKHBQcm9zbGljLHBQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkVHX1VTRVJTVEFUKSAmIFNJTF9NV0lfVVNUQVRfU0VUICkgKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorICAKKyAgc3dpdGNoKHBQcm9zbGljLT5td2lTdGF0ZS5zdGF0ZSkKKyAgeworICAgIGNhc2UgUFJPU0xJQ19NV0lfUkFNUF9PTjoKKyAgICB7CisgICAgICBpZihwUHJvc2xpYy0+bXdpU3RhdGUudGlja3MgPT0gcFByb3NsaWMtPm13aVN0YXRlLnBvbGwuc3RlcHMpCisgICAgICB7CisgICAgICAgIG13aV92b2x0YWdlID0gcFByb3NsaWMtPm13aVN0YXRlLnBvbGwudm9mZiArIHBQcm9zbGljLT5td2lTdGF0ZS5wb2xsLnN0ZXBfc2l6ZTsKKyAgICAgICAgV3JpdGVSQU0ocFByb3NsaWMscFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SQU1fUklOR09GLG13aV92b2x0YWdlKTsKKyAgICAgICAgUHJvU0xJQ19TZXRMaW5lZmVlZFN0YXR1cyhwUHJvc2xpYyxMRl9SSU5HSU5HKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYocFByb3NsaWMtPm13aVN0YXRlLnRpY2tzID09IDApCisgICAgICB7CisgICAgICAgIG13aV92b2x0YWdlID0gcFByb3NsaWMtPm13aVN0YXRlLnBvbGwudm9uOworICAgICAgICBXcml0ZVJBTShwUHJvc2xpYyxwUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JBTV9SSU5HT0YsbXdpX3ZvbHRhZ2UpOworICAgICAgICBwUHJvc2xpYy0+bXdpU3RhdGUudGlja3MgPSBwUHJvc2xpYy0+bXdpU3RhdGUucG9sbC5vblRpbWUrMTsKKyAgICAgICAgcFByb3NsaWMtPm13aVN0YXRlLnN0YXRlID0gUFJPU0xJQ19NV0lfT047CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIG13aV92b2x0YWdlID0gcFByb3NsaWMtPm13aVN0YXRlLnBvbGwudm9mZiArIHBQcm9zbGljLT5td2lTdGF0ZS5wb2xsLnN0ZXBfc2l6ZSoocFByb3NsaWMtPm13aVN0YXRlLnBvbGwuc3RlcHMgLSBwUHJvc2xpYy0+bXdpU3RhdGUudGlja3MgKyAxKTsKKyAgICAgICAgV3JpdGVSQU0ocFByb3NsaWMscFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SQU1fUklOR09GLG13aV92b2x0YWdlKTsKKyAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgICBjYXNlIFBST1NMSUNfTVdJX1JBTVBfT0ZGOgorICAgIHsKKyAgICAgIGlmKHBQcm9zbGljLT5td2lTdGF0ZS50aWNrcyA9PSAwKQorICAgICAgeworICAgICAgICBwUHJvc2xpYy0+bXdpU3RhdGUudGlja3MgPSBwUHJvc2xpYy0+bXdpU3RhdGUucG9sbC5vZmZUaW1lKzE7CisgICAgICAgIHBQcm9zbGljLT5td2lTdGF0ZS5zdGF0ZSA9IFBST1NMSUNfTVdJX09GRjsKKyAgICAgICAgUHJvU0xJQ19TZXRMaW5lZmVlZFN0YXR1cyhwUHJvc2xpYyxMRl9GV0RfQUNUSVZFKTsKKyAgICAgICAgfQorICAgICAgZWxzZSAKKyAgICAgIHsKKyAgICAgICAgbXdpX3ZvbHRhZ2UgPSBwUHJvc2xpYy0+bXdpU3RhdGUucG9sbC52b24gLSAocFByb3NsaWMtPm13aVN0YXRlLnBvbGwuc3RlcHMgLSBwUHJvc2xpYy0+bXdpU3RhdGUudGlja3MgKyAxKSpwUHJvc2xpYy0+bXdpU3RhdGUucG9sbC5zdGVwX3NpemU7CisgICAgICAgIFdyaXRlUkFNKHBQcm9zbGljLHBQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkFNX1JJTkdPRixtd2lfdm9sdGFnZSk7CisgICAgICB9CisgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGNhc2UgUFJPU0xJQ19NV0lfT046CisgICAgICBpZihwUHJvc2xpYy0+bXdpU3RhdGUudGlja3MgPT0gMCkKKyAgICAgIHsKKyAgICAgICAgcFByb3NsaWMtPm13aVN0YXRlLnRpY2tzID0gcFByb3NsaWMtPm13aVN0YXRlLnBvbGwuc3RlcHMrMTsKKyAgICAgICAgcFByb3NsaWMtPm13aVN0YXRlLnN0YXRlID0gUFJPU0xJQ19NV0lfUkFNUF9PRkY7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICAgIAorICAgIGNhc2UgUFJPU0xJQ19NV0lfT0ZGOgorICAgICAgaWYocFByb3NsaWMtPm13aVN0YXRlLnRpY2tzID09IDApCisgICAgICB7CisgICAgICAgIHBQcm9zbGljLT5td2lTdGF0ZS50aWNrcyA9IHBQcm9zbGljLT5td2lTdGF0ZS5wb2xsLnN0ZXBzKzE7CisgICAgICAgIHBQcm9zbGljLT5td2lTdGF0ZS5zdGF0ZSA9IFBST1NMSUNfTVdJX1JBTVBfT047CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAvKiBEbyBub3RoaW5nICovCisgICAgICBicmVhazsKKyAgfQorICAocFByb3NsaWMtPm13aVN0YXRlLnRpY2tzKS0tOyAKKworICByZXR1cm4gUkNfQ09NUExFVEVfTk9fRVJSOworfQorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZkZWYgU0lWT0lDRV9ORU9OX01XSV9TVVBQT1JUCitpbnQgUHJvU0xJQ19NV0lSYW1wU3RhcnQocHJvc2xpY0NoYW5UeXBlX3B0ciBwUHJvc2xpYywgdUludDMyIHN0ZXBzLCB1SW50MzIgb25UaW1lLCB1SW50MzIgb2ZmVGltZSkKK3sKKyAgLyogQ2hlY2sgaWYgUFJPU0xJQyBhbmQgZW5hYmxlZCBNV0ksIGlmIG5vdCwgaWdub3JlIHRoaXMgcmVxdWVzdC4gKi8KKyAgaWYoIChwUHJvc2xpYy0+Y2hhbm5lbFR5cGUgIT0gUFJPU0xJQykKKyAgICAgICB8fCAhKFJlYWRSZWcocFByb3NsaWMscFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfVVNFUlNUQVQpICYgU0lMX01XSV9VU1RBVF9TRVQgKSApCisgIHsKKyAgICByZXR1cm4gUkNfSUdOT1JFOworICB9CisgIAorICBwUHJvc2xpYy0+bXdpU3RhdGUucG9sbC5zdGVwcyA9IHN0ZXBzLTE7CisgIHBQcm9zbGljLT5td2lTdGF0ZS5wb2xsLm9uVGltZSA9IG9uVGltZTsKKyAgcFByb3NsaWMtPm13aVN0YXRlLnBvbGwub2ZmVGltZSA9IG9mZlRpbWU7CisgIAorICBwUHJvc2xpYy0+bXdpU3RhdGUucG9sbC52b24gPSBSZWFkUkFNKHBQcm9zbGljLHBQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkFNX01XSV9WKTsKKyAgcFByb3NsaWMtPm13aVN0YXRlLnBvbGwudm9mZiA9IChSZWFkUkFNKHBQcm9zbGljLHBQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkFNX1ZfVkxJTSkqNSkvNjsKKyAgcFByb3NsaWMtPm13aVN0YXRlLnBvbGwuc3RlcF9zaXplID0gKHBQcm9zbGljLT5td2lTdGF0ZS5wb2xsLnZvbiAtIHBQcm9zbGljLT5td2lTdGF0ZS5wb2xsLnZvZmYpL3N0ZXBzOworICAKKyAgcFByb3NsaWMtPm13aVN0YXRlLnN0YXRlID0gUFJPU0xJQ19NV0lfUkFNUF9PTjsKKyAgcFByb3NsaWMtPm13aVN0YXRlLnRpY2tzID0gcFByb3NsaWMtPm13aVN0YXRlLnBvbGwuc3RlcHM7CisKKyAgcmV0dXJuIFJDX0NPTVBMRVRFX05PX0VSUjsKK30KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmZGVmIFNJVk9JQ0VfTkVPTl9NV0lfU1VQUE9SVAoraW50IFByb1NMSUNfTVdJUmFtcFN0b3AocHJvc2xpY0NoYW5UeXBlX3B0ciBwUHJvc2xpYykKK3sKKyAgLyogQ2hlY2sgaWYgUFJPU0xJQyBhbmQgZW5hYmxlZCBNV0ksIGlmIG5vdCwgaWdub3JlIHRoaXMgcmVxdWVzdC4gKi8KKyAgaWYoIChwUHJvc2xpYy0+Y2hhbm5lbFR5cGUgIT0gUFJPU0xJQykKKyAgICAgICB8fCAhKFJlYWRSZWcocFByb3NsaWMscFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfVVNFUlNUQVQpICYgU0lMX01XSV9VU1RBVF9TRVQgKSApCisgIHsKKyAgICByZXR1cm4gUkNfSUdOT1JFOworICB9CisgIHBQcm9zbGljLT5td2lTdGF0ZS5zdGF0ZSA9IFBST1NMSUNfTVdJX09GRjsKKyAgCisgIHJldHVybiBSQ19DT01QTEVURV9OT19FUlI7Cit9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IFByb1NMSUNfVG9uZUdlblN0YXJ0IChwcm9zbGljQ2hhblR5cGVfcHRyIHBQcm9zbGljLHVJbnQ4IHRpbWVyRW4pCit7CisgIHVJbnQ4IGRhdGE7CisgIFRSQUNFUFJJTlQocFByb3NsaWMsICJ0aW1lckVuID0gJXVcbiIsIHRpbWVyRW4pOworICBpZihwUHJvc2xpYy0+Y2hhbm5lbFR5cGUgIT0gUFJPU0xJQykKKyAgeworICAgIHJldHVybiBSQ19JR05PUkU7CisgIH0KKyAgREVCVUdfUFJJTlQocFByb3NsaWMsICIlcyVzIG9uIGNoYW5uZWwgJWRcbiIsTE9HUFJJTlRfUFJFRklYLCBfX0ZVTkNUSU9OX18sCisgICAgICAgICAgICAgIHBQcm9zbGljLT5jaGFubmVsKTsKKworICBkYXRhID0gUmVhZFJlZyhwUHJvc2xpYyxwUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JFR19PQ09OKTsKKyAgZGF0YSB8PSAweDExICsgKHRpbWVyRW4gPyAweDY2IDogMCk7CisgIHJldHVybiBXcml0ZVJlZyhwUHJvc2xpYyxwUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JFR19PQ09OLGRhdGEpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgUHJvU0xJQ19Ub25lR2VuU3RvcCAocHJvc2xpY0NoYW5UeXBlX3B0ciBwUHJvc2xpYykKK3sKKyAgdUludDggZGF0YTsKKyAgVFJBQ0VQUklOVChwUHJvc2xpYywgIlxuIiwgTlVMTCk7CisgIGlmKHBQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorICBERUJVR19QUklOVChwUHJvc2xpYywiJXMlcyBvbiBjaGFubmVsICVkXG4iLExPR1BSSU5UX1BSRUZJWCwgX19GVU5DVElPTl9fLAorICAgICAgICAgICAgICBwUHJvc2xpYy0+Y2hhbm5lbCk7CisgIGRhdGEgPSBSZWFkUmVnKHBQcm9zbGljLHBQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkVHX09DT04pOworICBkYXRhICY9IH4oMHg3Nyk7CisgIHJldHVybiBXcml0ZVJlZyhwUHJvc2xpYyxwUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JFR19PQ09OLGRhdGEpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgUHJvU0xJQ19SaW5nU3RhcnQgKHByb3NsaWNDaGFuVHlwZV9wdHIgcFByb3NsaWMpCit7CisgIFRSQUNFUFJJTlQocFByb3NsaWMsICJcbiIsIE5VTEwpOworICByZXR1cm4oUHJvU0xJQ19TZXRMaW5lZmVlZFN0YXR1cyhwUHJvc2xpYywgTEZfUklOR0lORykpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgUHJvU0xJQ19SaW5nU3RvcCAocHJvc2xpY0NoYW5UeXBlX3B0ciBwUHJvc2xpYykKK3sKKyAgVFJBQ0VQUklOVChwUHJvc2xpYywgIlxuIiwgTlVMTCk7CisgIHJldHVybihQcm9TTElDX1NldExpbmVmZWVkU3RhdHVzKHBQcm9zbGljLCBMRl9GV0RfQUNUSVZFKSk7Cit9CisKKyNpZm5kZWYgRElTQUJMRV9GU0tfU0VUVVAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBQcm9TTElDX0NoZWNrQ0lEQnVmZmVyIChwcm9zbGljQ2hhblR5cGVfcHRyIHBQcm9zbGljLCB1SW50OCAqZnNrX2J1Zl9hdmFpbCkKK3sKKyAgdUludDggZGF0YTsKKyAgVFJBQ0VQUklOVChwUHJvc2xpYywgIlxuIiwgTlVMTCk7CisgIGlmKHBQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorCisgIGRhdGEgPSBSZWFkUmVnKHBQcm9zbGljLHBQcm9zbGljLT5jaGFubmVsLCBQUk9TTElDX1JFR19JUlExKTsKKyNpZmRlZiBHQ0lfTU9ERQorICBXcml0ZVJlZyhwUHJvc2xpYyxwUHJvc2xpYy0+Y2hhbm5lbCwgUFJPU0xJQ19SRUdfSVJRMSxkYXRhKTsgLypjbGVhciAoZm9yIEdDSSkqLworI2VuZGlmCisgICpmc2tfYnVmX2F2YWlsID0gKGRhdGEmMHg0MCkgPyAxIDogMDsKKyAgcmV0dXJuIFJDX05PTkU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBQcm9TTElDX0VuYWJsZUNJRCAocHJvc2xpY0NoYW5UeXBlX3B0ciBwUHJvc2xpYykKK3sKKyAgdUludDggZGF0YTsKKyAgVFJBQ0VQUklOVChwUHJvc2xpYywgIlxuIiwgTlVMTCk7CisgIGlmKHBQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorICBERUJVR19QUklOVChwUHJvc2xpYywgIiVzRW5hYmxlQ0lEIG9uIGNoYW5uZWwgJWRcbiIsTE9HUFJJTlRfUFJFRklYLAorICAgICAgICAgICAgICBwUHJvc2xpYy0+Y2hhbm5lbCk7CisgIFdyaXRlUmVnKHBQcm9zbGljLHBQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkVHX09DT04sMCk7CisKKyAgZGF0YSA9IFJlYWRSZWcocFByb3NsaWMscFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfT01PREUpOworICBkYXRhIHw9IDB4QTsKKyAgV3JpdGVSZWcocFByb3NsaWMscFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfT01PREUsZGF0YSk7CisKKyAgcmV0dXJuKFdyaXRlUmVnKHBQcm9zbGljLHBQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkVHX09DT04sMHg1KSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBQcm9TTElDX0Rpc2FibGVDSUQgKHByb3NsaWNDaGFuVHlwZV9wdHIgcFByb3NsaWMpCit7CisgIHVJbnQ4IGRhdGE7CisgIFRSQUNFUFJJTlQocFByb3NsaWMsICJcbiIsIE5VTEwpOworCisgIGlmKHBQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorICBERUJVR19QUklOVChwUHJvc2xpYywgIiVzRGlzYWJsZUNJRCBvbiBjaGFubmVsICVkXG4iLExPR1BSSU5UX1BSRUZJWCwKKyAgICAgICAgICAgICAgcFByb3NsaWMtPmNoYW5uZWwpOworICBXcml0ZVJlZyhwUHJvc2xpYyxwUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JFR19PQ09OLDApOworICBkYXRhID0gUmVhZFJlZyhwUHJvc2xpYyxwUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JFR19PTU9ERSk7CisgIGRhdGEgJj0gfigweDgpOworCisgIHJldHVybihXcml0ZVJlZyhwUHJvc2xpYyxwUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JFR19PTU9ERSxkYXRhKSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBQcm9TTElDX1NlbmRDSUQgKHByb3NsaWNDaGFuVHlwZV9wdHIgcFByb3NsaWMsIHVJbnQ4ICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICB1SW50OCBudW1CeXRlcykKK3sKKyAgVFJBQ0VQUklOVChwUHJvc2xpYywgIm51bUJ5dGVzID0gJXVcbiIsIG51bUJ5dGVzKTsKKworICBpZihwUHJvc2xpYy0+Y2hhbm5lbFR5cGUgIT0gUFJPU0xJQykKKyAgeworICAgIHJldHVybiBSQ19JR05PUkU7CisgIH0KKyAgREVCVUdfUFJJTlQgKHBQcm9zbGljLCAiJXNTZW5kQ0lEIG9uIGNoYW5uZWwgJWRcbiIsTE9HUFJJTlRfUFJFRklYLAorICAgICAgICAgICAgICAgcFByb3NsaWMtPmNoYW5uZWwpOworICB3aGlsZSAobnVtQnl0ZXMtLSA+IDApCisgIHsKKyAgICBXcml0ZVJlZyhwUHJvc2xpYyxwUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JFR19GU0tEQVQsKihidWZmZXIrKykpOworICB9CisgIHJldHVybiBSQ19OT05FOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgUHJvU0xJQ19Nb2RpZnlDSURTdGFydEJpdHMocHJvc2xpY0NoYW5UeXBlX3B0ciBwUHJvc2xpYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1SW50OCBlbmFibGVfc3RhcnRTdG9wKQoreworICB1SW50OCBkYXRhOworICBUUkFDRVBSSU5UKHBQcm9zbGljLCAiZW5hYmxlX3N0YXJ0U3RvcCA9ICV1XG4iLCBlbmFibGVfc3RhcnRTdG9wKTsKKworICBpZihwUHJvc2xpYy0+Y2hhbm5lbFR5cGUgIT0gUFJPU0xJQykKKyAgeworICAgIHJldHVybiBSQ19DSEFOTkVMX1RZUEVfRVJSOworICB9CisKKyAgZGF0YSA9IFJlYWRSZWcocFByb3NsaWMscFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfT01PREUpOworCisgIGlmKGVuYWJsZV9zdGFydFN0b3AgPT0gRkFMU0UpCisgIHsKKyAgICBkYXRhICY9IH4weDgwOworICB9CisgIGVsc2UKKyAgeworICAgIGRhdGEgfD0gMHg4MDsKKyAgfQorCisgIFdyaXRlUmVnKHBQcm9zbGljLHBQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkVHX09NT0RFLGRhdGEpOworCisgIHJldHVybiBSQ19OT05FOworfQorI2VuZGlmIC8qIERJU0FCTEVfRlNLX1NFVFVQICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgUHJvU0xJQ19QQ01TdGFydCAocHJvc2xpY0NoYW5UeXBlX3B0ciBwUHJvc2xpYykKK3sKKyAgdUludDggZGF0YTsKKyAgVFJBQ0VQUklOVChwUHJvc2xpYywgIlxuIiwgTlVMTCk7CisKKyAgaWYocFByb3NsaWMtPmNoYW5uZWxUeXBlICE9IFBST1NMSUMpCisgIHsKKyAgICByZXR1cm4gUkNfSUdOT1JFOworICB9CisgIERFQlVHX1BSSU5UKHBQcm9zbGljLCAiJXNQQ01TdGFydFxuIiwgTE9HUFJJTlRfUFJFRklYKTsKKyAgZGF0YSA9IFJlYWRSZWcocFByb3NsaWMscFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfUENNTU9ERSk7CisgIGRhdGEgfD0gMHgxMDsKKworICByZXR1cm4gV3JpdGVSZWcocFByb3NsaWMscFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfUENNTU9ERSxkYXRhKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IFByb1NMSUNfUENNU3RvcCAocHJvc2xpY0NoYW5UeXBlX3B0ciBwUHJvc2xpYykKK3sKKyAgdUludDggZGF0YTsKKyAgVFJBQ0VQUklOVChwUHJvc2xpYywgIlxuIiwgTlVMTCk7CisKKyAgaWYocFByb3NsaWMtPmNoYW5uZWxUeXBlICE9IFBST1NMSUMpCisgIHsKKyAgICByZXR1cm4gUkNfSUdOT1JFOworICB9CisKKyAgREVCVUdfUFJJTlQocFByb3NsaWMsICIlc1BDTVN0YXJ0XG4iLCBMT0dQUklOVF9QUkVGSVgpOworICBkYXRhID0gUmVhZFJlZyhwUHJvc2xpYyxwUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JFR19QQ01NT0RFKTsKKyAgZGF0YSAmPSB+MHgxMDsKKworICByZXR1cm4gV3JpdGVSZWcocFByb3NsaWMscFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfUENNTU9ERSxkYXRhKTsKK30KKworI2lmbmRlZiBESVNBQkxFX0hPT0tDSEFOR0UKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisqKiBGdW5jdGlvbjogUHJvU0xJQ19SZXNldERpYWxQdWxzZURldGVjdAorKioKKyoqIERlc2NyaXB0aW9uOgorKiogcmVzZXQgZGlhbCBwdWxzZSBkZXRlY3Rpb24gc3RhdGUgbWFjaGluZSAoaGVscGVyIGZ1bmN0aW9uIGZvcgorKiogUHJvU0xJQ19Jbml0aWFsaXplSG9va0NoYW5nZURldGVjdC4KKyovCitzdGF0aWMgdm9pZCBQcm9TTElDX1Jlc2V0RGlhbFB1bHNlRGV0ZWN0KGhvb2tDaGFuZ2VUeXBlICpwUHVsc2UpCit7CisgIHBQdWxzZS0+Y3VycmVudFB1bHNlRGlnaXQgPSAwOworICBwUHVsc2UtPmxvb2tpbmdGb3JUaW1lb3V0ID0gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyoqIEZ1bmN0aW9uOiBQcm9TTElDX0luaXRpYWxpemVIb29rQ2hhbmdlRGV0ZWN0CisqKgorKiogRGVzY3JpcHRpb246CisqKiBJbml0aWFsaXplIGRpYWwgcHVsc2UgZGV0ZWN0aW9uIHBhcmFtZXRlcnMKKyovCitpbnQgUHJvU0xJQ19Jbml0aWFsaXplSG9va0NoYW5nZURldGVjdChob29rQ2hhbmdlVHlwZSAqcFB1bHNlLHZvaWQgKmhvb2tUaW1lKQoreworICBUUkFDRVBSSU5UX05PQ0hBTigiXG4iLCBOVUxMKTsKKyAgcFB1bHNlLT5ob29rVGltZSA9IGhvb2tUaW1lOworICBwUHVsc2UtPmxhc3Rfc3RhdGVfcmVwb3J0ZWQgPSAgU0lfSENfTk9fQUNUSVZJVFk7CisgIFByb1NMSUNfUmVzZXREaWFsUHVsc2VEZXRlY3QocFB1bHNlKTsKKyAgcmV0dXJuIFJDX05PTkU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisqKiBGdW5jdGlvbjogUHJvU0xJQ19Ib29rQ2hhbmdlRGV0ZWN0CisqKgorKiogRGVzY3JpcHRpb246CisqKiBpbXBsZW1lbnRzIHB1bHNlIGRpYWwgZGV0ZWN0aW9uIGFuZCBzaG91bGQgYmUgY2FsbGVkIGF0IGV2ZXJ5IGhvb2sgdHJhbnNpdGlvbgorKi8KK3VJbnQ4IFByb1NMSUNfSG9va0NoYW5nZURldGVjdCAocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9va0NoYW5nZV9DZmcgKnBIb29rQ2hhbmdlQ2ZnLCBob29rQ2hhbmdlVHlwZSAqcEhvb2tDaGFuZ2VEYXRhKQoreworICB1SW50OCBob29rU3RhdDsKKyAgaW50IGRlbHRhX3RpbWU7CisKKyAgVFJBQ0VQUklOVChwUHJvc2xpYywgIlxuIiwgTlVMTCk7CisgIGlmKHBQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorCisgIFRpbWVFbGFwc2VkKHBQcm9UaW1lcixwSG9va0NoYW5nZURhdGEtPmhvb2tUaW1lLCZkZWx0YV90aW1lKTsKKyAgUHJvU0xJQ19SZWFkSG9va1N0YXR1cyhwUHJvc2xpYywmaG9va1N0YXQpOworCisgIC8qIERpZCB3ZSBoYXZlIGEgaG9vayBzdGF0ZSBjaGFuZ2U/ICovCisgIGlmKGhvb2tTdGF0ICE9ICBwSG9va0NoYW5nZURhdGEtPmxhc3RfaG9va19zdGF0ZSkKKyAgeworICAgIHBIb29rQ2hhbmdlRGF0YS0+bGFzdF9ob29rX3N0YXRlID0gaG9va1N0YXQ7CisgICAgZ2V0VGltZShwUHJvVGltZXIscEhvb2tDaGFuZ2VEYXRhLT5ob29rVGltZSk7CisgICAgcEhvb2tDaGFuZ2VEYXRhLT5sb29raW5nRm9yVGltZW91dCA9IDE7CisgICAgaWYgKGhvb2tTdGF0ID09IFBST1NMSUNfT0ZGSE9PSykKKyAgICB7CisgICAgICBpZiAoKGRlbHRhX3RpbWUgPj0gKHBIb29rQ2hhbmdlQ2ZnLT5taW5Pbkhvb2spKQorICAgICAgICAgICYmIChkZWx0YV90aW1lIDw9IChwSG9va0NoYW5nZUNmZy0+bWF4T25Ib29rKSkpCisgICAgICB7CisgICAgICAgIHBIb29rQ2hhbmdlRGF0YS0+Y3VycmVudFB1bHNlRGlnaXQrKzsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogRGlkIHdlIHNlZSBhIGhvb2sgZmxhc2g/ICovCisgICAgICAgIGlmKCAoZGVsdGFfdGltZSA+PSBwSG9va0NoYW5nZUNmZy0+bWluSG9va0ZsYXNoKQorICAgICAgICAgICAgJiYgKGRlbHRhX3RpbWUgPD0gcEhvb2tDaGFuZ2VDZmctPm1heEhvb2tGbGFzaCkgKQorICAgICAgICB7CisgICAgICAgICAgcEhvb2tDaGFuZ2VEYXRhLT5sYXN0X3N0YXRlX3JlcG9ydGVkID0gU0lfSENfSE9PS0ZMQVNIOworICAgICAgICAgIFByb1NMSUNfUmVzZXREaWFsUHVsc2VEZXRlY3QocEhvb2tDaGFuZ2VEYXRhKTsKKyAgICAgICAgICByZXR1cm4gU0lfSENfSE9PS0ZMQVNIOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIFNJX0hDX05FRURfTU9SRV9QT0xMUzsKKyAgfQorCisgIGlmKCAocEhvb2tDaGFuZ2VEYXRhLT5sb29raW5nRm9yVGltZW91dCA9PSAxKQorICAgICAgJiYgKGRlbHRhX3RpbWUgPj0gIHBIb29rQ2hhbmdlQ2ZnLT5taW5JbnRlckRpZ2l0KSApCisgIHsKKworICAgIGlmKGRlbHRhX3RpbWUgID4gcEhvb2tDaGFuZ2VDZmctPm1pbkhvb2spCisgICAgeworICAgICAgaWYocEhvb2tDaGFuZ2VEYXRhLT5sYXN0X2hvb2tfc3RhdGUgPT0gUFJPU0xJQ19PTkhPT0spCisgICAgICB7CisgICAgICAgIFByb1NMSUNfUmVzZXREaWFsUHVsc2VEZXRlY3QocEhvb2tDaGFuZ2VEYXRhKTsKKyAgICAgICAgcEhvb2tDaGFuZ2VEYXRhLT5sYXN0X3N0YXRlX3JlcG9ydGVkID0gU0lfSENfT05IT09LX1RJTUVPVVQ7CisgICAgICAgIHJldHVybiBTSV9IQ19PTkhPT0tfVElNRU9VVDsKKyAgICAgIH0KKworICAgICAgaWYocEhvb2tDaGFuZ2VEYXRhLT5sYXN0X2hvb2tfc3RhdGUgPT0gUFJPU0xJQ19PRkZIT09LKQorICAgICAgeworICAgICAgICBQcm9TTElDX1Jlc2V0RGlhbFB1bHNlRGV0ZWN0KHBIb29rQ2hhbmdlRGF0YSk7CisKKyAgICAgICAgLyogQ2hlY2sgaWYgd2Ugc2F3IGVpdGhlciBhIHB1bHNlIGRpZ2l0IG9yIGhvb2sgZmxhc2ggcHJpb3IgdG8gdGhpcywKKyAgICAgICAgICogaWYgc28sIHdlJ3JlIGFscmVhZHkgb2ZmaG9vaywgc28gZG8gbm90IHJlcG9ydCBhIG9mZmhvb2sgZXZlbnQsCisgICAgICAgICAqIGp1c3Qgc3RvcCBwb2xsaW5nLgorICAgICAgICAgKi8KKyAgICAgICAgaWYoKHBIb29rQ2hhbmdlRGF0YS0+bGFzdF9zdGF0ZV9yZXBvcnRlZCA9PSBTSV9IQ19PTkhPT0tfVElNRU9VVCkKKyAgICAgICAgICAgIHx8IChwSG9va0NoYW5nZURhdGEtPmxhc3Rfc3RhdGVfcmVwb3J0ZWQgPT0gU0lfSENfTk9fQUNUSVZJVFkpICkKKyAgICAgICAgeworICAgICAgICAgIHBIb29rQ2hhbmdlRGF0YS0+bGFzdF9zdGF0ZV9yZXBvcnRlZCA9IFNJX0hDX09GRkhPT0tfVElNRU9VVDsKKyAgICAgICAgICByZXR1cm4gU0lfSENfT0ZGSE9PS19USU1FT1VUOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIHJldHVybiBTSV9IQ19OT19BQ1RJVklUWTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgdUludDggbGFzdF9kaWdpdCA9IHBIb29rQ2hhbmdlRGF0YS0+Y3VycmVudFB1bHNlRGlnaXQ7CisKKyAgICAgIGlmKGxhc3RfZGlnaXQpCisgICAgICB7CisgICAgICAgIHBIb29rQ2hhbmdlRGF0YS0+bGFzdF9zdGF0ZV9yZXBvcnRlZCA9IGxhc3RfZGlnaXQ7CisgICAgICAgIFByb1NMSUNfUmVzZXREaWFsUHVsc2VEZXRlY3QocEhvb2tDaGFuZ2VEYXRhKTsKKyAgICAgICAgcmV0dXJuIGxhc3RfZGlnaXQ7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBTSV9IQ19ORUVEX01PUkVfUE9MTFM7CisgIH0KKworICByZXR1cm4gU0lfSENfTkVFRF9NT1JFX1BPTExTOworfQorI2VuZGlmIC8qIERJU0FCTEVfSE9PS0NIQU5HRSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgUHJvU0xJQ19EVE1GUmVhZERpZ2l0IChwcm9zbGljQ2hhblR5cGVfcHRyIHBQcm9zbGljLHVJbnQ4ICpwRGlnaXQpCit7CisgIFRSQUNFUFJJTlQocFByb3NsaWMsICJcbiIsIE5VTEwpOworCisgIGlmKHBQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorCisgIERFQlVHX1BSSU5UKHBQcm9zbGljLCAiJXNEVE1GUmVhZERpZ2l0IG9uIGNoYW5uZWwgJWRcbiIsTE9HUFJJTlRfUFJFRklYLAorICAgICAgICAgICAgICBwUHJvc2xpYy0+Y2hhbm5lbCk7CisgICpwRGlnaXQgPSBSZWFkUmVnKHBQcm9zbGljLHBQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkVHX1RPTkRUTUYpICYgMHhmOworCisgIHJldHVybiBSQ19OT05FOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgUHJvU0xJQ19QTExGcmVlUnVuU3RhcnQgKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMpCit7CisgIHVJbnQ4IHRtcDsKKyAgVFJBQ0VQUklOVChoUHJvc2xpYywgIlxuIiwgTlVMTCk7CisKKyAgaWYoaFByb3NsaWMtPmNoYW5uZWxUeXBlICE9IFBST1NMSUMpCisgIHsKKyAgICByZXR1cm4gUkNfSUdOT1JFOworICB9CisKKyAgV3JpdGVSZWcoaFByb3NsaWMsaFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfWkNBTF9FTiwweDAwKTsKKyAgdG1wID0gUmVhZFJlZyhoUHJvc2xpYyxoUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JFR19FTkhBTkNFKTsKKworICByZXR1cm4oV3JpdGVSZWcoaFByb3NsaWMsaFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfRU5IQU5DRSx0bXB8MHg0KSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBQcm9TTElDX1BMTEZyZWVSdW5TdG9wIChwcm9zbGljQ2hhblR5cGVfcHRyIGhQcm9zbGljKQoreworICB1SW50OCB0bXA7CisgIFRSQUNFUFJJTlQoaFByb3NsaWMsICJcbiIsIE5VTEwpOworCisgIGlmKGhQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorCisgIHRtcCA9IFJlYWRSZWcoaFByb3NsaWMsaFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfRU5IQU5DRSk7CisgIFdyaXRlUmVnKGhQcm9zbGljLGhQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkVHX0VOSEFOQ0UsdG1wJn4oMHg0KSk7CisKKyAgcmV0dXJuIFdyaXRlUmVnKGhQcm9zbGljLGhQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkVHX1pDQUxfRU4sMHgwNCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBQcm9TTElDX0dldFBMTEZyZWVSdW5TdGF0dXMgKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMpCit7CisgIHVJbnQ4IHRtcDsKKyAgVFJBQ0VQUklOVChoUHJvc2xpYywgIlxuIiwgTlVMTCk7CisKKyAgaWYoaFByb3NsaWMtPmNoYW5uZWxUeXBlICE9IFBST1NMSUMpCisgIHsKKyAgICByZXR1cm4gUkNfSUdOT1JFOworICB9CisKKyAgdG1wID0gUmVhZFJlZyhoUHJvc2xpYyxoUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JFR19FTkhBTkNFKTsKKworICBpZih0bXAgJiAweDAyKQorICB7CisgICAgcmV0dXJuIFJDX1BMTF9GUkVFUlVOX0FDVElWRTsKKyAgfQorCisgIHJldHVybiBSQ19OT05FOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIERJU0FCTEVfUFVMU0VNRVRFUklORworaW50IFByb1NMSUNfUHVsc2VNZXRlckVuYWJsZSAocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYykKK3sKKyAgdUludDggd2lkZWJhbmRFbjsKKyAgVFJBQ0VQUklOVChoUHJvc2xpYywgIlxuIiwgTlVMTCk7CisKKyAgaWYoaFByb3NsaWMtPmNoYW5uZWxUeXBlICE9IFBST1NMSUMpCisgIHsKKyAgICByZXR1cm4gUkNfSUdOT1JFOworICB9CisKKyAgd2lkZWJhbmRFbiA9IFJlYWRSZWcoaFByb3NsaWMsaFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfRU5IQU5DRSkgJiAweDAxOworCisgIGlmICh3aWRlYmFuZEVuKQorICB7CisgICAgREVCVUdfUFJJTlQgKGhQcm9zbGljLAorICAgICAgICAgICAgICAgICAiJXMgUHVsc2UgTWV0ZXJpbmcgaXMgbm90IHN1cHBvcnRlZCB3aGlsZSBXaWRlYmFuZCBNb2RlIGlzIGVuYWJsZWQuXG4iLAorICAgICAgICAgICAgICAgICBMT0dQUklOVF9QUkVGSVgpOworICB9CisKKyNpZiBkZWZpbmVkIChTSTMyMTdYKSB8fCBkZWZpbmVkIChTSTMyMThYKSB8fCBkZWZpbmVkIChTSTMyMjZYKSB8fCBkZWZpbmVkIChTSTMyMjhYKSB8fCBkZWZpbmVkKFNJMzIxOVgpCisgIGlmKCF3aWRlYmFuZEVuICYmICgwIAorI2lmZGVmIFNJMzIxN1gKKyAgICAgIHx8IChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIxNzEKKyAgICAgICAgICAmJiBoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIxNzkpCisjZW5kaWYKKyNpZmRlZiBTSTMyMThYCisgICAgICB8fChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIxODAKKyAgICAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjE4OSkgCisjZW5kaWYKKyNpZmRlZiBTSTMyMTlYCisgICAgICB8fCAoSVNfU0kzMjE5WChoUHJvc2xpYy0+ZGV2aWNlSWQpICkKKyNlbmRpZgorI2lmZGVmIFNJMzIyNlgKKyAgICAgIHx8IChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIyNjAKKyAgICAgICAgICAmJiBoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIyNjkpCisjZW5kaWYKKyNpZmRlZiBTSTMyMjhYCisgICAgICB8fCAoaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMjgwCisgICAgICAgICAgJiYgaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMjg5ICkKKyNlbmRpZgorICAgICkpCisgIHsKKyAgICByZXR1cm4gV3JpdGVSZWcoaFByb3NsaWMsaFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfUE1DT04sUmVhZFJlZyhoUHJvc2xpYywKKyAgICAgICAgICAgICAgICAgICAgaFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfUE1DT04pIHwgKDB4MDEpKTsKKyAgfQorI2VuZGlmCisgIHJldHVybiBSQ19DT01QTEVURV9OT19FUlI7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBQcm9TTElDX1B1bHNlTWV0ZXJEaXNhYmxlIChwcm9zbGljQ2hhblR5cGVfcHRyIGhQcm9zbGljKQoreworICBUUkFDRVBSSU5UKGhQcm9zbGljLCAiXG4iLCBOVUxMKTsKKworICBpZihoUHJvc2xpYy0+Y2hhbm5lbFR5cGUgIT0gUFJPU0xJQykKKyAgeworICAgIHJldHVybiBSQ19JR05PUkU7CisgIH0KKworICByZXR1cm4oV3JpdGVSZWcoaFByb3NsaWMsaFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfUE1DT04sUmVhZFJlZyhoUHJvc2xpYywKKyAgICAgICAgICAgICAgICAgIGhQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkVHX1BNQ09OKSAmIH4oMHgwNSkpKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IFByb1NMSUNfUHVsc2VNZXRlclN0YXJ0IChwcm9zbGljQ2hhblR5cGVfcHRyIGhQcm9zbGljKQoreworICBUUkFDRVBSSU5UKGhQcm9zbGljLCAiXG4iLCBOVUxMKTsKKworICBpZihoUHJvc2xpYy0+Y2hhbm5lbFR5cGUgIT0gUFJPU0xJQykKKyAgeworICAgIHJldHVybiBSQ19JR05PUkU7CisgIH0KKworICByZXR1cm4gV3JpdGVSZWcoaFByb3NsaWMsaFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfUE1DT04sUmVhZFJlZyhoUHJvc2xpYywKKyAgICAgICAgICAgICAgICAgIGhQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkVHX1BNQ09OKSB8ICgweDUpKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IFByb1NMSUNfUHVsc2VNZXRlclN0b3AgKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMpCit7CisgIFRSQUNFUFJJTlQoaFByb3NsaWMsICJcbiIsIE5VTEwpOworCisgIGlmKGhQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorCisjaWZkZWYgU0kzMjE3WAorICBpZiAoaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMTcxCisgICAgICAmJiBoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIxNzkpCisgIHsKKyAgICByZXR1cm4oV3JpdGVSZWcoaFByb3NsaWMsaFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfUE1DT04sUmVhZFJlZyhoUHJvc2xpYywKKyAgICAgICAgICAgICAgICAgICAgaFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfUE1DT04pICYgfigweDA0KSkpOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIxOFgKKyAgaWYgKGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjE4MAorICAgICAgJiYgaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMTg5KQorICB7CisgICAgcmV0dXJuKFdyaXRlUmVnKGhQcm9zbGljLGhQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkVHX1BNQ09OLFJlYWRSZWcoaFByb3NsaWMsCisgICAgICAgICAgICAgICAgICAgIGhQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkVHX1BNQ09OKSAmIH4oMHgwNCkpKTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMTlYCisgIGlmICggSVNfU0kzMjE5WChoUHJvc2xpYy0+ZGV2aWNlSWQpICkKKyAgeworICAgIHJldHVybihXcml0ZVJlZyhoUHJvc2xpYyxoUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JFR19QTUNPTixSZWFkUmVnKGhQcm9zbGljLAorICAgICAgICAgICAgICAgICAgICBoUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JFR19QTUNPTikgJiB+KDB4MDQpKSk7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjI2WAorICBpZiAoaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMjYwCisgICAgICAmJiBoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIyNjkpCisgIHsKKyAgICByZXR1cm4gUHJvU0xJQ19QdWxzZU1ldGVyRGlzYWJsZShoUHJvc2xpYyk7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjI4WAorICBpZiAoaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMjgwCisgICAgICAmJiBoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIyODkpCisgIHsKKyAgICByZXR1cm4gUHJvU0xJQ19QdWxzZU1ldGVyRGlzYWJsZShoUHJvc2xpYyk7CisgIH0KKyNlbmRpZgorCisgIHJldHVybiBSQ19DT01QTEVURV9OT19FUlI7Cit9CisjZW5kaWYgLyogRElTQUJMRV9QVUxTRU1FVEVSSU5HICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgUHJvU0xJQ19TZXREQ0RDSW52ZXJzaW9uRmxhZyAocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYywgdUludDggZmxhZykKK3sKKyAgVFJBQ0VQUklOVChoUHJvc2xpYywgImZsYWcgPSAldVxuIiwgZmxhZyk7CisKKyAgaWYoaFByb3NsaWMtPmNoYW5uZWxUeXBlICE9IFBST1NMSUMpCisgIHsKKyAgICByZXR1cm4gUkNfSUdOT1JFOworICB9CisKKyAgaFByb3NsaWMtPmRjZGNfcG9sYXJpdHlfaW52ZXJ0ID0gZmxhZzsKKworICByZXR1cm4gUkNfQ09NUExFVEVfTk9fRVJSOworfQorCisKK2ludCBQcm9TTElDX1Bvd2VyVXBDb252ZXJ0ZXIgKHByb3NsaWNDaGFuVHlwZV9wdHIgaFByb3NsaWMpCit7CisgIGlmKGhQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorCisjaWZkZWYgU0kzMjE3WAorICBpZiAoaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMTcxCisgICAgICAmJiBoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIxNzkpCisgIHsKKyAgICByZXR1cm4gU2kzMjE3eF9Qb3dlclVwQ29udmVydGVyKGhQcm9zbGljKTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMThYCisgIGlmIChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIxODAKKyAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjE4OSkKKyAgeworICAgIHJldHVybiBTaTMyMTh4X1Bvd2VyVXBDb252ZXJ0ZXIoaFByb3NsaWMpOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIxOVgKKyAgaWYgKCBJU19TSTMyMTlYKGhQcm9zbGljLT5kZXZpY2VJZCkgKQorICB7CisgICAgcmV0dXJuIFNpMzIxOXhfUG93ZXJVcENvbnZlcnRlcihoUHJvc2xpYyk7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjI2WAorICBpZiAoaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMjYwCisgICAgICAmJiBoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIyNjkpCisgIHsKKyAgICByZXR1cm4gU2kzMjI2eF9Qb3dlclVwQ29udmVydGVyKGhQcm9zbGljKTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMjhYCisgIGlmIChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIyODAKKyAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjI4OSkKKyAgeworICAgIHJldHVybiBTaTMyMjh4X1Bvd2VyVXBDb252ZXJ0ZXIoaFByb3NsaWMpOworICB9CisjZW5kaWYKKworICByZXR1cm4gUkNfQ09NUExFVEVfTk9fRVJSOworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBQcm9TTElDX0dldEJhdFR5cGUocHJvc2xpY0NoYW5UeXBlX3B0ciBoUHJvc2xpYykKK3sKKyNpZmRlZiBTSTMyMjZYCisgIGlmIChoUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIyNjAKKyAgICAgICYmIGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjI2OSkKKyAgeworICAgIHJldHVybiBTaTMyMjZ4X0dlbmVyYWxfQ29uZmlndXJhdGlvbi5iYXRUeXBlOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIyOFgKKyAgaWYgKGhQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjI4MAorICAgICAgJiYgaFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMjg5KQorICB7CisgICAgcmV0dXJuIFNpMzIyOHhfR2VuZXJhbF9Db25maWd1cmF0aW9uLmJhdFR5cGU7CisgIH0KKyNlbmRpZgorCisjaWYgIWRlZmluZWQoU0kzMjI2WCkgJiYgIWRlZmluZWQoU0kzMjI4WCkKKyAgU0lMQUJTX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIoaFByb3NsaWMpOworI2VuZGlmCisgIHJldHVybiBCT19EQ0RDX1VOS05PV047Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBQcm9TTElDX1Bvd2VyRG93bkNvbnZlcnRlciAocHJvc2xpY0NoYW5UeXBlX3B0ciBwUHJvc2xpYykKK3sKKyAgZXJyb3JDb2RlVHlwZSBlcnJvciA9IFJDX05PTkU7CisgIGludDMyIHZiYXQ7CisgIGludCB0aW1lciA9IDA7CisKKyAgVFJBQ0VQUklOVChwUHJvc2xpYywgIlxuIiwgTlVMTCk7CisKKyAgaWYocFByb3NsaWMtPmNoYW5uZWxUeXBlICE9IFBST1NMSUMpCisgIHsKKyAgICByZXR1cm4gUkNfSUdOT1JFOworICB9CisKKyAgLyogRm9yY2UgY2hhbm5lbCBvdXQgb2YgcG93ZXJzYXZpbmdzIG1vZGUgYW5kIHRoZW4gcHV0IGl0IGluIG9wZW4gc3RhdGUgKi8KKyAgV3JpdGVSZWcocFByb3NsaWMscFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfTElORUZFRUQsTEZfRldEX09IVCk7CisgIERlbGF5KHBQcm9UaW1lciwxMCk7CisgIFdyaXRlUmVnKHBQcm9zbGljLHBQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkVHX0xJTkVGRUVELCBMRl9PUEVOKTsKKyAgRGVsYXkocFByb1RpbWVyLDUwKTsKKworICAvKiBEb24ndCB0cnkgdG8gc2h1dGRvd24gY29udmVydGVyIGlmIHdlJ3JlIHVzaW5nIGV4dGVybmFsIHN1cHBsaWVzIG9yIGlmIHRoZQorICAgICBjb252ZXJ0ZXIgaXMgYWxyZWFkeSBzaHV0ZG93bi4KKyAgKi8KKyAgaWYoKFByb1NMSUNfR2V0QmF0VHlwZShwUHJvc2xpYykgPT0gQk9fRENEQ19FWFRFUk5BTCkgfHwKKyAgICAgIChSZWFkUkFNKHBQcm9zbGljLHBQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkFNX1BEX0RDREMpICYgMHgxMDAwMDApICkKKyAgeworICAgIHJldHVybiBSQ19OT05FOworICB9CisKKyAgV3JpdGVSQU0ocFByb3NsaWMscFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SQU1fUERfRENEQywweDkwMDAwMEwpOworICBEZWxheShwUHJvVGltZXIsNTApOworCisgIGRvCisgIHsKKyAgICB2YmF0ID0gUmVhZFJBTShwUHJvc2xpYywgcFByb3NsaWMtPmNoYW5uZWwsIFBST1NMSUNfUkFNX01BRENfVkJBVCk7CisgICAgaWYodmJhdCAmIDB4MTAwMDAwMDBMKQorICAgIHsKKyAgICAgIHZiYXQgfD0gMHhGMDAwMDAwMEw7CisgICAgfQorICAgIERlbGF5KHBQcm9UaW1lciwxMCk7CisgIH0KKyAgd2hpbGUoKHZiYXQgPiBDT01QXzVWKSAmJiAodGltZXIrKyA8IFBST1NMSUNfVElNRU9VVF9EQ0RDX0RPV04pKTsKKworICBERUJVR19QUklOVChwUHJvc2xpYywgIiVzIFZCQVQgRG93biA9ICVkLiVkIHZcbiIsIExPR1BSSU5UX1BSRUZJWCwKKyAgICAgICAgICAgICAgKGludCkoKHZiYXQvU0NBTEVfVl9NQURDKS8xMDAwKSwKKyAgICAgICAgICAgICAgU0lWT0lDRV9BQlMoKCh2YmF0L1NDQUxFX1ZfTUFEQykgLSAodmJhdC9TQ0FMRV9WX01BREMpLzEwMDAqMTAwMCkpKTsKKworICBpZih0aW1lciA+IFBST1NMSUNfVElNRU9VVF9EQ0RDX0RPV04pCisgIHsKKyAgICAvKiBFcnJvciBoYW5kbGluZyAtIHNodXRkb3duIGNvbnZlcnRlciwgZGlzYWJsZSBjaGFubmVsLCBzZXQgZXJyb3IgdGFnICovCisgICAgcFByb3NsaWMtPmNoYW5uZWxFbmFibGUgPSAwOworICAgIHBQcm9zbGljLT5lcnJvciA9IGVycm9yID0gUkNfVkJBVF9ET1dOX1RJTUVPVVQ7CisgICAgREVCVUdfUFJJTlQocFByb3NsaWMsICIlc0RDREMgUG93ZXIgRG93biB0aW1lb3V0IGNoYW5uZWwgJWRcbiIsIExPR1BSSU5UX1BSRUZJWCwKKyAgICAgICAgICAgICAgICBwUHJvc2xpYy0+Y2hhbm5lbCk7CisgIH0KKyAgcmV0dXJuIGVycm9yOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgUHJvU0xJQ19MQkNhbCAocHJvc2xpY0NoYW5UeXBlX3B0ciAqcFByb3NsaWMsIGludCBzaXplKQoreworICBpbnQgazsKKyAgaW50IHRpbWVvdXQ7CisgIHVJbnQ4IGRhdGE7CisgIHVJbnQ4IGxmU3RhdGUsIGVuaGFuY2VfdmFsdWU7CisgIFRSQUNFUFJJTlQoKnBQcm9zbGljLCAic2l6ZSA9ICVkXG4iLCBzaXplKTsKKworICBpZigoKnBQcm9zbGljKS0+Y2hhbm5lbFR5cGUgIT0gUFJPU0xJQykKKyAgeworICAgIHJldHVybiBSQ19JR05PUkU7CisgIH0KKworICAvKiBGb3IgYWxsIGNoYW5uZWxzLCBzYXZlIHNldHRpbmdzLCBpbml0aWF0ZSBMQkNBTCAqLworICBmb3IoayA9IDA7IGsgPCBzaXplOyBrKyspCisgIHsKKyAgICBpZiggKHBQcm9zbGljW2tdLT5jaGFubmVsRW5hYmxlKSAmJiAocFByb3NsaWNba10tPmNoYW5uZWxUeXBlID09IFBST1NMSUMpICkKKyAgICB7CisgICAgICBERUJVR19QUklOVChwUHJvc2xpY1trXSwgIiVzU3RhcnRpbmcgTEIgQ2FsIG9uIGNoYW5uZWwgJWRcbiIsIExPR1BSSU5UX1BSRUZJWCwKKyAgICAgICAgICAgICAgICAgIHBQcm9zbGljW2tdLT5jaGFubmVsKTsKKyAgICAgIC8qIFByZXNlcnZlIG9sZCBzZXR0aW5ncyAqLworICAgICAgbGZTdGF0ZSA9IFJlYWRSZWcocFByb3NsaWNba10sIHBQcm9zbGljW2tdLT5jaGFubmVsLCBQUk9TTElDX1JFR19MSU5FRkVFRCk7CisgICAgICBlbmhhbmNlX3ZhbHVlID0gUmVhZFJlZyhwUHJvc2xpY1trXSwgcFByb3NsaWNba10tPmNoYW5uZWwsIFBST1NMSUNfUkVHX0VOSEFOQ0UpOworICAgICAgUHJvU0xJQ19TZXRQb3dlcnNhdmVNb2RlKHBQcm9zbGljW2tdLCBQV1JTQVZFX0RJU0FCTEUpOworICAgICAgUHJvU0xJQ19TZXRMaW5lZmVlZFN0YXR1cyhwUHJvc2xpY1trXSwgTEZfRldEX0FDVElWRSk7CisgICAgICBXcml0ZVJlZyhwUHJvc2xpY1trXSwgcFByb3NsaWNba10tPmNoYW5uZWwsIFBST1NMSUNfUkVHX0NBTFIwLCBDQUxfTEJfQUxMKTsKKyAgICAgIFdyaXRlUmVnKHBQcm9zbGljW2tdLCBwUHJvc2xpY1trXS0+Y2hhbm5lbCwgUFJPU0xJQ19SRUdfQ0FMUjMsICAweDgwKTsKKyAgICAgIHBQcm9zbGljW2tdLT5lcnJvciA9IFJDX0NBTF9USU1FT1VUOyAvKiBBc3N1bWUgZmFpbHVyZSAqLworCisgICAgICB0aW1lb3V0ID0gMDsKKyAgICAgIGRvCisgICAgICB7CisgICAgICAgIGRhdGEgPSBSZWFkUmVnKHBQcm9zbGljW2tdLCBwUHJvc2xpY1trXS0+Y2hhbm5lbCwgUFJPU0xJQ19SRUdfQ0FMUjMpOworICAgICAgICBEZWxheVgoKnBQcm9zbGljLCAxMCk7CisgICAgICAgIHRpbWVvdXQrKzsKKyAgICAgIH0KKyAgICAgIHdoaWxlKChkYXRhICYgMHg4MCkgJiYgKHRpbWVvdXQgPCBUSU1FT1VUX0xCX0NBTCkpOworCisgICAgICBpZiggKGRhdGEgJiAweDgwKSApCisgICAgICB7CisgICAgICAgIERFQlVHX1BSSU5UKHBQcm9zbGljW2tdLCAiJXNMQiBDYWwgdGltZW91dCBvbiBjaGFubmVsICVkXG4iLCBMT0dQUklOVF9QUkVGSVgsCisgICAgICAgICAgICAgICAgICAgIHBQcm9zbGljW2tdLT5jaGFubmVsKTsKKyAgICAgICAgV3JpdGVSZWcocFByb3NsaWNba10sIHBQcm9zbGljW2tdLT5jaGFubmVsLCBQUk9TTElDX1JFR19MSU5FRkVFRCwgTEZfT1BFTik7CisgICAgICAgIHJldHVybiBSQ19DQUxfVElNRU9VVDsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgV3JpdGVSZWcocFByb3NsaWNba10sIHBQcm9zbGljW2tdLT5jaGFubmVsLCBQUk9TTElDX1JFR19MSU5FRkVFRCwgbGZTdGF0ZSk7CisgICAgICAgIFdyaXRlUmVnKHBQcm9zbGljW2tdLCBwUHJvc2xpY1trXS0+Y2hhbm5lbCwgUFJPU0xJQ19SRUdfRU5IQU5DRSwgZW5oYW5jZV92YWx1ZSk7CisgICAgICAgIHBQcm9zbGljW2tdLT5lcnJvciA9IFJDX05PTkU7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBSQ19OT05FOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFBST1NMSUNfUkFNX0NNREFDX0ZXRCAxNDc2CisjZGVmaW5lIFBST1NMSUNfUkFNX0NNREFDX1JFViAxNDc3CisjZGVmaW5lIFBST1NMSUNfUkFNX0NBTF9UUk5SRF9EQUNUIDE0NTgKKyNkZWZpbmUgUFJPU0xJQ19SQU1fQ0FMX1RSTlJEX0RBQ1IgMTQ1OQorCitpbnQgUHJvU0xJQ19HZXRMQkNhbFJlc3VsdCAocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYyxpbnQzMiAqcmVzdWx0MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMiAqcmVzdWx0MiwgaW50MzIgKnJlc3VsdDMsIGludDMyICpyZXN1bHQ0KQoreworICBUUkFDRVBSSU5UKHBQcm9zbGljLCAiXG4iLCBOVUxMKTsKKworICBpZihwUHJvc2xpYy0+Y2hhbm5lbFR5cGUgIT0gUFJPU0xJQykKKyAgeworICAgIHJldHVybiBSQ19JR05PUkU7CisgIH0KKworICAqcmVzdWx0MSA9IFJlYWRSQU0ocFByb3NsaWMsIHBQcm9zbGljLT5jaGFubmVsLCBQUk9TTElDX1JBTV9DTURBQ19GV0QpOworICAqcmVzdWx0MiA9IFJlYWRSQU0ocFByb3NsaWMsIHBQcm9zbGljLT5jaGFubmVsLCBQUk9TTElDX1JBTV9DTURBQ19SRVYpOworICAqcmVzdWx0MyA9IFJlYWRSQU0ocFByb3NsaWMsIHBQcm9zbGljLT5jaGFubmVsLCBQUk9TTElDX1JBTV9DQUxfVFJOUkRfREFDVCk7CisgICpyZXN1bHQ0ID0gUmVhZFJBTShwUHJvc2xpYywgcFByb3NsaWMtPmNoYW5uZWwsIFBST1NMSUNfUkFNX0NBTF9UUk5SRF9EQUNSKTsKKworICByZXR1cm4gUkNfTk9ORTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IFByb1NMSUNfR2V0TEJDYWxSZXN1bHRQYWNrZWQgKHByb3NsaWNDaGFuVHlwZSAqcFByb3NsaWMsaW50MzIgKnJlc3VsdCkKK3sKKyAgaW50MzIgcmVzdWx0c1s0XTsKKyAgaW50IHJjOworICBUUkFDRVBSSU5UKHBQcm9zbGljLCAiXG4iLCBOVUxMKTsKKworICBpZihwUHJvc2xpYy0+Y2hhbm5lbFR5cGUgIT0gUFJPU0xJQykKKyAgeworICAgIHJldHVybiBSQ19JR05PUkU7CisgIH0KKworICByYyA9IFByb1NMSUNfR2V0TEJDYWxSZXN1bHQocFByb3NsaWMsICYocmVzdWx0c1swXSksICYocmVzdWx0c1sxXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYocmVzdWx0c1syXSksICYocmVzdWx0c1szXSkpOworICBpZihyYyA9PSBSQ19OT05FKQorICB7CisgICAgLyoKKyAgICAgIEJpdHMgMzE6MjQgICBDTURBQ19GV0RbMjU6MThdCisgICAgICBCaXRzIDIzOjE2ICAgQ01EQUNfUkVWWzI1OjE4XQorICAgICAgQml0cyAxNTo4ICAgIENBTF9UUk5SRF9EQUNUWzIwOjEzXQorICAgICAgQml0cyA3OjAgICAgIENBTF9UUk5SRF9EQUNSWzIwOjEzXQorICAgICovCisgICAgKnJlc3VsdCA9IChyZXN1bHRzWzBdPDw2KSAmIDB4ZmYwMDAwMDBMOworICAgICpyZXN1bHQgfD0ocmVzdWx0c1sxXT4+MSkgJiAweDAwZmYwMDAwTDsKKyAgICAqcmVzdWx0IHw9KHJlc3VsdHNbMl0+PjUpICYgMHgwMDAwZmYwMEw7CisgICAgKnJlc3VsdCB8PShyZXN1bHRzWzNdPj4xMykmIDB4MDAwMDAwZmZMOworICB9CisKKyAgcmV0dXJuIHJjOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgUHJvU0xJQ19Mb2FkUHJldmlvdXNMQkNhbCAocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYyxpbnQzMiByZXN1bHQxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyIHJlc3VsdDIsaW50MzIgcmVzdWx0MyxpbnQzMiByZXN1bHQ0KQoreworICBUUkFDRVBSSU5UKHBQcm9zbGljLCAiXG4iLCBOVUxMKTsKKyAgaWYocFByb3NsaWMtPmNoYW5uZWxUeXBlICE9IFBST1NMSUMpCisgIHsKKyAgICByZXR1cm4gUkNfSUdOT1JFOworICB9CisKKyAgV3JpdGVSQU0ocFByb3NsaWMscFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SQU1fQ01EQUNfRldELHJlc3VsdDEpOworICBXcml0ZVJBTShwUHJvc2xpYyxwUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JBTV9DTURBQ19SRVYscmVzdWx0Mik7CisgIFdyaXRlUkFNKHBQcm9zbGljLHBQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkFNX0NBTF9UUk5SRF9EQUNULHJlc3VsdDMpOworICBXcml0ZVJBTShwUHJvc2xpYyxwUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JBTV9DQUxfVFJOUkRfREFDUixyZXN1bHQ0KTsKKworI2lmZGVmIEFQSV9URVNUCisgIHJhbVZhbCA9IFJlYWRSQU0ocFByb3NsaWMscFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SQU1fQ01EQUNfRldEKTsKKyAgTE9HUFJJTlQgKCIlcyBVTlBBQ0tFRCBDTURBQ19GV0QgPSAlMDh4XG4iLCBMT0dQUklOVF9QUkVGSVgsIHJhbVZhbCk7CisgIHJhbVZhbCA9IFJlYWRSQU0ocFByb3NsaWMsIHBQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkFNX0NNREFDX1JFVik7CisgIExPR1BSSU5UICgiJXMgVU5QQUNLRUQgQ01EQUNfUkVGID0gJTA4eFxuIiwgTE9HUFJJTlRfUFJFRklYLCByYW1WYWwpOworICByYW1WYWwgPSBSZWFkUkFNKHBQcm9zbGljLHBQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkFNX0NBTF9UUk5SRF9EQUNUKTsKKyAgTE9HUFJJTlQgKCIlcyBVTlBBQ0tFRCBDQUxfVFJOUkRfREFDVCA9ICUwOHhcbiIsIExPR1BSSU5UX1BSRUZJWCwgcmFtVmFsKTsKKyAgcmFtVmFsID0gUmVhZFJBTShwUHJvc2xpYyxwUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JBTV9DQUxfVFJOUkRfREFDUik7CisgIExPR1BSSU5UICgiJXMgVU5QQUNLRUQgQ0FMX1RSTlJEX0RBQ1IgPSAlMDh4XG4iLCBMT0dQUklOVF9QUkVGSVgsIHJhbVZhbCk7CisjZW5kaWYKKworICByZXR1cm4gUkNfTk9ORTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IFByb1NMSUNfTG9hZFByZXZpb3VzTEJDYWxQYWNrZWQgKHByb3NsaWNDaGFuVHlwZSAqcFByb3NsaWMsaW50MzIgKnJlc3VsdCkKK3sKKyAgcmFtRGF0YSByYW1WYWxbNF07CisgIFRSQUNFUFJJTlQocFByb3NsaWMsICJcbiIsIE5VTEwpOworCisgIGlmKHBQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorICByYW1WYWxbMF0gPSAoKnJlc3VsdCYweGZmMDAwMDAwTCk+PjY7CisgIHJhbVZhbFsxXSA9ICgqcmVzdWx0JjB4MDBmZjAwMDBMKTw8MTsKKyAgcmFtVmFsWzJdID0gKCpyZXN1bHQmMHgwMDAwZmYwMEwpPDw1OworICByYW1WYWxbM10gPSAoKnJlc3VsdCYweDAwMDAwMGZmTCk8PDEzOworCisgIHJldHVybiBQcm9TTElDX0xvYWRQcmV2aW91c0xCQ2FsKHBQcm9zbGljLCByYW1WYWxbMF0sIHJhbVZhbFsxXSwgcmFtVmFsWzJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW1WYWxbM10pOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgUHJvU0xJQ19kYmdTZXREQ0ZlZWRWb3BlbiAocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYywgdUludDMyIHZfdmxpbV92YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzIgcHJlc2V0KQoreworICBUUkFDRVBSSU5UKHBQcm9zbGljLCAidl92bGltX3ZhbCA9ICV1IHByZXNldCA9ICVkXG4iLCB2X3ZsaW1fdmFsLCBwcmVzZXQpOworICBpZihwUHJvc2xpYy0+Y2hhbm5lbFR5cGUgIT0gUFJPU0xJQykKKyAgeworICAgIHJldHVybiBSQ19JR05PUkU7CisgIH0KKyNpZmRlZiBTSTMyMTdYCisgIGlmIChwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIxNzEKKyAgICAgICYmIHBQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjE3OSkKKyAgeworICAgIHJldHVybiBTaTMyMTd4X2RiZ1NldERDRmVlZFZvcGVuIChwUHJvc2xpYyx2X3ZsaW1fdmFsLHByZXNldCk7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjE4WAorICBpZiAocFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMTgwCisgICAgICAmJiBwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIxODkpCisgIHsKKyAgICByZXR1cm4gU2kzMjE4eF9kYmdTZXREQ0ZlZWRWb3BlbiAocFByb3NsaWMsdl92bGltX3ZhbCxwcmVzZXQpOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIxOVgKKyAgaWYgKCBJU19TSTMyMTlYKHBQcm9zbGljLT5kZXZpY2VJZCkgKQorICB7CisgICAgcmV0dXJuIFNpMzIxOXhfZGJnU2V0RENGZWVkVm9wZW4gKHBQcm9zbGljLHZfdmxpbV92YWwscHJlc2V0KTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMjZYCisgIGlmIChwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIyNjAKKyAgICAgICYmIHBQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjI2OSkKKyAgeworICAgIHJldHVybiBTaTMyMjZ4X2RiZ1NldERDRmVlZFZvcGVuIChwUHJvc2xpYyx2X3ZsaW1fdmFsLHByZXNldCk7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjI4WAorICBpZiAocFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMjgwCisgICAgICAmJiBwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIyODkpCisgIHsKKyAgICByZXR1cm4gU2kzMjI4eF9kYmdTZXREQ0ZlZWRWb3BlbiAocFByb3NsaWMsdl92bGltX3ZhbCxwcmVzZXQpOworICB9CisjZW5kaWYKKworICByZXR1cm4gUkNfQ09NUExFVEVfTk9fRVJSOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgUHJvU0xJQ19kYmdTZXREQ0ZlZWRJbG9vcCAocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYywgdUludDMyIGlfaWxpbV92YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzIgcHJlc2V0KQoreworICBUUkFDRVBSSU5UKHBQcm9zbGljLCAiaV9pbGltX3ZhbCA9ICV1IHByZXNldCA9ICVkXG4iLCBpX2lsaW1fdmFsLCBwcmVzZXQpOworCisgIGlmKHBQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorI2lmZGVmIFNJMzIxN1gKKyAgaWYgKHBQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjE3MQorICAgICAgJiYgcFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMTc5KQorICB7CisgICAgcmV0dXJuIFNpMzIxN3hfZGJnU2V0RENGZWVkSWxvb3AgKHBQcm9zbGljLGlfaWxpbV92YWwscHJlc2V0KTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMThYCisgIGlmIChwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIxODAKKyAgICAgICYmIHBQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjE4OSkKKyAgeworICAgIHJldHVybiBTaTMyMTh4X2RiZ1NldERDRmVlZElsb29wIChwUHJvc2xpYyxpX2lsaW1fdmFsLHByZXNldCk7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjE5WAorICBpZiAoIElTX1NJMzIxOVgocFByb3NsaWMtPmRldmljZUlkKSApCisgIHsKKyAgICByZXR1cm4gU2kzMjE5eF9kYmdTZXREQ0ZlZWRJbG9vcCAocFByb3NsaWMsaV9pbGltX3ZhbCxwcmVzZXQpOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIyNlgKKyAgaWYgKHBQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjI2MAorICAgICAgJiYgcFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMjY5KQorICB7CisgICAgcmV0dXJuIFNpMzIyNnhfZGJnU2V0RENGZWVkSWxvb3AgKHBQcm9zbGljLGlfaWxpbV92YWwscHJlc2V0KTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMjhYCisgIGlmIChwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIyODAKKyAgICAgICYmIHBQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjI4OSkKKyAgeworICAgIHJldHVybiBTaTMyMjh4X2RiZ1NldERDRmVlZElsb29wIChwUHJvc2xpYyxpX2lsaW1fdmFsLHByZXNldCk7CisgIH0KKyNlbmRpZgorCisgIHJldHVybiBSQ19DT01QTEVURV9OT19FUlI7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBQcm9TTElDX2RiZ1NldFJpbmdpbmcgKHByb3NsaWNDaGFuVHlwZSAqcFByb3NsaWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9TTElDX2RiZ1JpbmdDZmcgKnJpbmdDZmcsIGludCBwcmVzZXQpCit7CisgIFRSQUNFUFJJTlQocFByb3NsaWMsICJwcmVzZXQgPSAlZFxuIiwgcHJlc2V0KTsKKworICBpZihwUHJvc2xpYy0+Y2hhbm5lbFR5cGUgIT0gUFJPU0xJQykKKyAgeworICAgIHJldHVybiBSQ19JR05PUkU7CisgIH0KKworI2lmZGVmIFNJMzIxN1gKKyAgaWYgKHBQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjE3MQorICAgICAgJiYgcFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMTc5KQorICB7CisgICAgcmV0dXJuIFNpMzIxN3hfZGJnU2V0UmluZ2luZyAocFByb3NsaWMscmluZ0NmZyxwcmVzZXQpOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIxOFgKKyAgaWYgKHBQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjE4MAorICAgICAgJiYgcFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMTg5KQorICB7CisgICAgcmV0dXJuIFNpMzIxOHhfZGJnU2V0UmluZ2luZyAocFByb3NsaWMscmluZ0NmZyxwcmVzZXQpOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIxOVgKKyAgaWYgKCBJU19TSTMyMTlYKHBQcm9zbGljLT5kZXZpY2VJZCkgKQorICB7CisgICAgcmV0dXJuIFNpMzIxOXhfZGJnU2V0UmluZ2luZyAocFByb3NsaWMscmluZ0NmZyxwcmVzZXQpOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIyNlgKKyAgaWYgKHBQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjI2MAorICAgICAgJiYgcFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMjY5KQorICB7CisgICAgcmV0dXJuIFNpMzIyNnhfZGJnU2V0UmluZ2luZyAocFByb3NsaWMscmluZ0NmZyxwcmVzZXQpOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIyOFgKKyAgaWYgKHBQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjI4MAorICAgICAgJiYgcFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMjg5KQorICB7CisgICAgcmV0dXJuIFNpMzIyOHhfZGJnU2V0UmluZ2luZyAocFByb3NsaWMscmluZ0NmZyxwcmVzZXQpOworICB9CisjZW5kaWYKKworICByZXR1cm4gUkNfQ09NUExFVEVfTk9fRVJSOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgUHJvU0xJQ19kYmdTZXRSWEdhaW4gKHByb3NsaWNDaGFuVHlwZSAqcFByb3NsaWMsIGludDMyIGdhaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbXBlZGFuY2VfcHJlc2V0LCBpbnQgYXVkaW9fZ2Fpbl9wcmVzZXQpCit7CisgIFRSQUNFUFJJTlQocFByb3NsaWMsICJnYWluID0gJWQgaW1wX3ByZXNldCA9ICVkIGF1ZGlvX2dhaW5fcHJlc2V0ID0gJWRcbiIsIGdhaW4sCisgICAgICAgICAgICAgaW1wZWRhbmNlX3ByZXNldCwgYXVkaW9fZ2Fpbl9wcmVzZXQpOworICBpZihwUHJvc2xpYy0+Y2hhbm5lbFR5cGUgIT0gUFJPU0xJQykKKyAgeworICAgIHJldHVybiBSQ19JR05PUkU7CisgIH0KKworI2lmZGVmIFNJMzIxN1gKKyAgaWYgKHBQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjE3MQorICAgICAgJiYgcFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMTc5KQorICB7CisgICAgcmV0dXJuIFNpMzIxN3hfZGJnU2V0UlhHYWluIChwUHJvc2xpYyxnYWluLGltcGVkYW5jZV9wcmVzZXQsYXVkaW9fZ2Fpbl9wcmVzZXQpOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIxOFgKKyAgaWYgKHBQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjE4MAorICAgICAgJiYgcFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMTg5KQorICB7CisgICAgcmV0dXJuIFNpMzIxOHhfZGJnU2V0UlhHYWluIChwUHJvc2xpYyxnYWluLGltcGVkYW5jZV9wcmVzZXQsYXVkaW9fZ2Fpbl9wcmVzZXQpOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIxOVgKKyAgaWYgKCBJU19TSTMyMTlYKHBQcm9zbGljLT5kZXZpY2VJZCkgKQorICB7CisgICAgcmV0dXJuIFNpMzIxOXhfZGJnU2V0UlhHYWluIChwUHJvc2xpYyxnYWluLGltcGVkYW5jZV9wcmVzZXQsYXVkaW9fZ2Fpbl9wcmVzZXQpOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIyNlgKKyAgaWYgKHBQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjI2MAorICAgICAgJiYgcFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMjY5KQorICB7CisgICAgcmV0dXJuIFNpMzIyNnhfZGJnU2V0UlhHYWluIChwUHJvc2xpYyxnYWluLGltcGVkYW5jZV9wcmVzZXQsYXVkaW9fZ2Fpbl9wcmVzZXQpOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIyOFgKKyAgaWYgKHBQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjI4MAorICAgICAgJiYgcFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMjg5KQorICB7CisgICAgcmV0dXJuIFNpMzIyOHhfZGJnU2V0UlhHYWluIChwUHJvc2xpYyxnYWluLGltcGVkYW5jZV9wcmVzZXQsYXVkaW9fZ2Fpbl9wcmVzZXQpOworICB9CisjZW5kaWYKKworICByZXR1cm4gUkNfQ09NUExFVEVfTk9fRVJSOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgUHJvU0xJQ19kYmdTZXRUWEdhaW4gKHByb3NsaWNDaGFuVHlwZSAqcFByb3NsaWMsIGludDMyIGdhaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbXBlZGFuY2VfcHJlc2V0LCBpbnQgYXVkaW9fZ2Fpbl9wcmVzZXQpCit7CisgIFRSQUNFUFJJTlQocFByb3NsaWMsICJnYWluID0gJWQgaW1wX3ByZXNldCA9ICVkIGF1ZGlvX2dhaW5fcHJlc2V0ID0gJWRcbiIsIGdhaW4sCisgICAgICAgICAgICAgaW1wZWRhbmNlX3ByZXNldCwgYXVkaW9fZ2Fpbl9wcmVzZXQpOworCisgIGlmKHBQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorCisjaWZkZWYgU0kzMjE3WAorICBpZiAocFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMTcxCisgICAgICAmJiBwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIxNzkpCisgIHsKKyAgICByZXR1cm4gU2kzMjE3eF9kYmdTZXRUWEdhaW4gKHBQcm9zbGljLGdhaW4saW1wZWRhbmNlX3ByZXNldCxhdWRpb19nYWluX3ByZXNldCk7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjE4WAorICBpZiAocFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMTgwCisgICAgICAmJiBwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIxODkpCisgIHsKKyAgICByZXR1cm4gU2kzMjE4eF9kYmdTZXRUWEdhaW4gKHBQcm9zbGljLGdhaW4saW1wZWRhbmNlX3ByZXNldCxhdWRpb19nYWluX3ByZXNldCk7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjE5WAorICBpZiAoIElTX1NJMzIxOVgocFByb3NsaWMtPmRldmljZUlkKSApCisgIHsKKyAgICByZXR1cm4gU2kzMjE5eF9kYmdTZXRUWEdhaW4gKHBQcm9zbGljLGdhaW4saW1wZWRhbmNlX3ByZXNldCxhdWRpb19nYWluX3ByZXNldCk7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjI2WAorICBpZiAocFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMjYwCisgICAgICAmJiBwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIyNjkpCisgIHsKKyAgICByZXR1cm4gU2kzMjI2eF9kYmdTZXRUWEdhaW4gKHBQcm9zbGljLGdhaW4saW1wZWRhbmNlX3ByZXNldCxhdWRpb19nYWluX3ByZXNldCk7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjI4WAorICBpZiAocFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMjgwCisgICAgICAmJiBwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIyODkpCisgIHsKKyAgICByZXR1cm4gU2kzMjI4eF9kYmdTZXRUWEdhaW4gKHBQcm9zbGljLGdhaW4saW1wZWRhbmNlX3ByZXNldCxhdWRpb19nYWluX3ByZXNldCk7CisgIH0KKyNlbmRpZgorCisgIHJldHVybiBSQ19DT01QTEVURV9OT19FUlI7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisqKiBGdW5jdGlvbjogUHJvU0xJQ19MaW5lTW9uaXRvcgorKioKKyoqIERlc2NyaXB0aW9uOgorKiogR2VuZXJpYyBtb25pdG9yaW5nIGZ1bmN0aW9uCisqKgorKiogUmV0dXJuczoKKyoqIDAKKyovCisKK2ludCBQcm9TTElDX0xpbmVNb25pdG9yIChwcm9zbGljQ2hhblR5cGUgKnBQcm9zbGljLCBwcm9zbGljTW9uaXRvclR5cGUgKm1vbml0b3IpCit7CisgIFRSQUNFUFJJTlQocFByb3NsaWMsICJcbiIsIE5VTEwpOworCisgIGlmKHBQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorCisjaWZkZWYgU0kzMjE3WAorICBpZiAocFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMTcxCisgICAgICAmJiBwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIxNzkpCisgIHsKKyAgICByZXR1cm4gU2kzMjE3eF9MaW5lTW9uaXRvciAocFByb3NsaWMsIG1vbml0b3IpOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIxOFgKKyAgaWYgKHBQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjE4MAorICAgICAgJiYgcFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMTg5KQorICB7CisgICAgcmV0dXJuIFNpMzIxOHhfTGluZU1vbml0b3IgKHBQcm9zbGljLCBtb25pdG9yKTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMTlYCisgIGlmICggSVNfU0kzMjE5WChwUHJvc2xpYy0+ZGV2aWNlSWQpICkKKyAgeworICAgIHJldHVybiBTaTMyMTl4X0xpbmVNb25pdG9yIChwUHJvc2xpYywgbW9uaXRvcik7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjI2WAorICBpZiAocFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMjYwCisgICAgICAmJiBwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIyNjkpCisgIHsKKyAgICByZXR1cm4gU2kzMjI2eF9MaW5lTW9uaXRvciAocFByb3NsaWMsIG1vbml0b3IpOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIyOFgKKyAgaWYgKHBQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjI4MAorICAgICAgJiYgcFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMjg5KQorICB7CisgICAgcmV0dXJuIFNpMzIyOHhfTGluZU1vbml0b3IgKHBQcm9zbGljLCBtb25pdG9yKTsKKyAgfQorI2VuZGlmCisKKyAgcmV0dXJuIFJDX0NPTVBMRVRFX05PX0VSUjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyoqIEZ1bmN0aW9uOiBQcm9TTElDX1BTVE5DaGVjaworKioKKyoqIERlc2NyaXB0aW9uOgorKiogTW9uaXRvciBmb3IgZXhjZXNzaXZlIGxvbmdpdHVkaW5hbCBjdXJyZW50LCB3aGljaAorKiogd291bGQgYmUgcHJlc2VudCBpZiBhIGxpdmUgcHN0biBsaW5lIHdhcyBjb25uZWN0ZWQKKyoqIHRvIHRoZSBwb3J0LgorKioKKyoqIFJldHVybnM6CisqKiAwIC0gbm8gcHN0biBkZXRlY3RlZAorKiogMSAtIHBzdG4gZGV0ZWN0ZWQKKyovCitpbnQgUHJvU0xJQ19QU1ROQ2hlY2sgKHByb3NsaWNDaGFuVHlwZSAqcFByb3NsaWMsCisgICAgICAgICAgICAgICAgICAgICAgIHByb3NsaWNQU1ROQ2hlY2tPYmpUeXBlICpwUFNUTkNoZWNrKQoreworICBUUkFDRVBSSU5UKHBQcm9zbGljLCAiXG4iLCBOVUxMKTsKKyAgaWYocFByb3NsaWMtPmNoYW5uZWxUeXBlICE9IFBST1NMSUMpCisgIHsKKyAgICByZXR1cm4gUkNfSUdOT1JFOworICB9CisKKyNpZmRlZiBTSTMyMTdYCisgIGlmIChwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIxNzEKKyAgICAgICYmIHBQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjE3OSkKKyAgeworICAgIHJldHVybiBTaTMyMTd4X1BTVE5DaGVjayAocFByb3NsaWMscFBTVE5DaGVjayk7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjE4WAorICBpZiAocFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMTgwCisgICAgICAmJiBwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIxODkpCisgIHsKKyAgICByZXR1cm4gU2kzMjE4eF9QU1ROQ2hlY2sgKHBQcm9zbGljLHBQU1ROQ2hlY2spOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIxOVgKKyAgaWYgKCBJU19TSTMyMTlYKHBQcm9zbGljLT5kZXZpY2VJZCkgKQorICB7CisgICAgcmV0dXJuIFNpMzIxOXhfUFNUTkNoZWNrIChwUHJvc2xpYyxwUFNUTkNoZWNrKTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMjZYCisgIGlmIChwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIyNjAKKyAgICAgICYmIHBQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjI2OSkKKyAgeworICAgIHJldHVybiBTaTMyMjZ4X1BTVE5DaGVjayAocFByb3NsaWMscFBTVE5DaGVjayk7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjI4WAorICBpZiAocFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMjgwCisgICAgICAmJiBwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIyODkpCisgIHsKKyAgICByZXR1cm4gU2kzMjI4eF9QU1ROQ2hlY2sgKHBQcm9zbGljLHBQU1ROQ2hlY2spOworICB9CisjZW5kaWYKKworICByZXR1cm4gUkNfQ09NUExFVEVfTk9fRVJSOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorKiogRnVuY3Rpb246IFByb1NMSUNfRGlmZlBTVE5DaGVjaworKioKKyoqIERlc2NyaXB0aW9uOgorKiogTW9uaXRvciBmb3IgZXhjZXNzaXZlIGxvbmdpdHVkaW5hbCBjdXJyZW50LCB3aGljaAorKiogd291bGQgYmUgcHJlc2VudCBpZiBhIGxpdmUgcHN0biBsaW5lIHdhcyBjb25uZWN0ZWQKKyoqIHRvIHRoZSBwb3J0LgorKioKKyoqIFJldHVybnM6CisqKiBSQ19OT05FIC0gdGVzdCBpbiBwcm9ncmVzcworKiogUkNfSUdOT1JFIC0gbm9uLVByb1NMSUMgY2hhbm5lbAorKiogUkNfQ09NUExFVEVfTk9fRVJSIC0gUHJvU0xJQyBkb2VzIG5vdCBzdXBwb3J0IGZlYXR1cmUuCisqKiBSQ19QU1ROX09QRU5fRkVNRiB8IFJDX0NPTVBMRVRFX05PX0VSUiAtIHRlc3QgY29tcGxldGVkLgorKioKKyovCisjaWZkZWYgUFNUTl9ERVRfRU5BQkxFCitpbnQgUHJvU0xJQ19EaWZmUFNUTkNoZWNrIChwcm9zbGljQ2hhblR5cGUgKnBQcm9zbGljLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvc2xpY0RpZmZQU1ROQ2hlY2tPYmpUeXBlICpwUFNUTkNoZWNrKQoreworICBUUkFDRVBSSU5UKHBQcm9zbGljLCAiXG4iLCBOVUxMKTsKKworICBpZihwUHJvc2xpYy0+Y2hhbm5lbFR5cGUgIT0gUFJPU0xJQykKKyAgeworICAgIHJldHVybiBSQ19JR05PUkU7CisgIH0KKworI2lmZGVmIFNJMzIxN1gKKyAgaWYgKHBQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjE3MQorICAgICAgJiYgcFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMTc5KQorICB7CisgICAgcmV0dXJuIFNpMzIxN3hfRGlmZlBTVE5DaGVjayAocFByb3NsaWMscFBTVE5DaGVjayk7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjE4WAorICBpZiAocFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMTgwCisgICAgICAmJiBwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIxODkpCisgIHsKKyAgICByZXR1cm4gU2kzMjE4eF9EaWZmUFNUTkNoZWNrIChwUHJvc2xpYyxwUFNUTkNoZWNrKTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMTlYCisgIGlmICggSVNfU0kzMjE5WChwUHJvc2xpYy0+ZGV2aWNlSWQpICkKKyAgeworICAgIHJldHVybiBTaTMyMTl4X0RpZmZQU1ROQ2hlY2sgKHBQcm9zbGljLHBQU1ROQ2hlY2spOworICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIyNlgKKyAgaWYgKHBQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjI2MAorICAgICAgJiYgcFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMjY5KQorICB7CisgICAgcmV0dXJuIFNpMzIyNnhfRGlmZlBTVE5DaGVjayAocFByb3NsaWMscFBTVE5DaGVjayk7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjI4WAorICBpZiAocFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMjgwCisgICAgICAmJiBwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIyODkpCisgIHsKKyAgICByZXR1cm4gU2kzMjI4eF9EaWZmUFNUTkNoZWNrIChwUHJvc2xpYyxwUFNUTkNoZWNrKTsKKyAgfQorI2VuZGlmCisKKyAgcmV0dXJuIFJDX0NPTVBMRVRFX05PX0VSUjsKK30KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorKiogRnVuY3Rpb246IFByb1NMSUNfQ3JlYXRlUFNUTkNoZWNrT2JqCisqKgorKiogRGVzY3JpcHRpb246CisqKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHBzdG5DaGVja09iagorKioKKyoqIFJldHVybnM6CisqKiBSQ19OT05FCisqKiBSQ19OT19NRU0gaWYgZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeS4KKyoqIFJDX1VOU1VQUE9SVEVEX0ZFQVRFUiBpZiBtYWxsb2MgZGlzYWJsZWQKKyovCitpbnQgUHJvU0xJQ19DcmVhdGVQU1ROQ2hlY2tPYmpzKHByb3NsaWNQU1ROQ2hlY2tPYmpUeXBlX3B0ciAqcHN0bkNoZWNrT2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtX29ianMpCit7CisgIFRSQUNFUFJJTlRfTk9DSEFOKCJudW1fb2JqcyA9ICV1XG4iLCBudW1fb2Jqcyk7CisjaWZuZGVmIERJU0FCTEVfTUFMTE9DCisgICpwc3RuQ2hlY2tPYmogPSBTSVZPSUNFX0NBTExPQyhzaXplb2YocHJvc2xpY1BTVE5DaGVja09ialR5cGUpLG51bV9vYmpzKTsKKyAgaWYoKnBzdG5DaGVja09iaiA9PSBOVUxMKQorICB7CisjaWZkZWYgRU5BQkxFX0RFQlVHCisgICAgTE9HUFJJTlQoIiVzOiAlczogZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSIsIExPR1BSSU5UX1BSRUZJWCwgX19GVU5DVElPTl9fKTsKKyNlbmRpZgorICAgIHJldHVybiBSQ19OT19NRU07CisgIH0KKyAgcmV0dXJuIFJDX05PTkU7CisjZWxzZQorICBTSUxBQlNfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihwc3RuQ2hlY2tPYmopOworICBTSUxBQlNfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihudW1fb2Jqcyk7CisgIHJldHVybiBSQ19VTlNVUFBPUlRFRF9GRUFUVVJFOworI2VuZGlmCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisqKiBGdW5jdGlvbjogUHJvU0xJQ19DcmVhdGVEaWZmUFNUTkNoZWNrT2JqcworKioKKyoqIERlc2NyaXB0aW9uOgorKiogQWxsb2NhdGUgbWVtb3J5IGZvciBwcm9zbGljRGlmZlBzdG5DaGVja09ianMKKyoqCisqKiBSZXR1cm5zOgorKiogUkNfTk9ORQorKiogUkNfTk9fTUVNIGlmIGZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkuCisqKiBSQ19VTlNVUFBPUlRFRF9GRUFUVVJFIGlmIG1hbGxvYyBkaXNhYmxlZAorKi8KKworI2lmZGVmIFBTVE5fREVUX0VOQUJMRQoraW50IFByb1NMSUNfQ3JlYXRlRGlmZlBTVE5DaGVja09ianMocHJvc2xpY0RpZmZQU1ROQ2hlY2tPYmpUeXBlX3B0cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBzdG5DaGVja09iaiwgdW5zaWduZWQgaW50IG51bV9vYmpzKQoreworICBUUkFDRVBSSU5UX05PQ0hBTigibnVtX29ianMgPSAldVxuIiwgbnVtX29ianMpOworCisjaWZuZGVmIERJU0FCTEVfTUFMTE9DCisgICpwc3RuQ2hlY2tPYmogPSBTSVZPSUNFX0NBTExPQyhzaXplb2YocHJvc2xpY0RpZmZQU1ROQ2hlY2tPYmpUeXBlKSxudW1fb2Jqcyk7CisgIGlmKCpwc3RuQ2hlY2tPYmogPT0gTlVMTCkKKyAgeworI2lmZGVmIEVOQUJMRV9ERUJVRworICAgIExPR1BSSU5UKCIlczogJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkiLCBMT0dQUklOVF9QUkVGSVgsIF9fRlVOQ1RJT05fXyk7CisjZW5kaWYKKyAgICByZXR1cm4gUkNfTk9fTUVNOworICB9CisgIHJldHVybiBSQ19OT05FOworI2Vsc2UKKyAgU0lMQUJTX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIocHN0bkNoZWNrT2JqKTsKKyAgU0lMQUJTX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIobnVtX29ianMpOworICByZXR1cm4gUkNfVU5TVVBQT1JURURfRkVBVFVSRTsKKyNlbmRpZgorfQorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisqKiBGdW5jdGlvbjogUHJvU0xJQ19EZXN0cm95UFNUTkNoZWNrT2JqcworKioKKyoqIERlc2NyaXB0aW9uOgorKiogRnJlZSBtZW1vcnkgZm9yIHBzdG5DaGVja09iagorKioKKyoqIFJldHVybnM6CisqKiBSQ19OT05FCisqKiBSQ19VTlNVUFBPUlRFRF9GRUFURVIgaWYgbWFsbG9jIGRpc2FibGVkCisqLworaW50IFByb1NMSUNfRGVzdHJveVBTVE5DaGVja09ianMocHJvc2xpY1BTVE5DaGVja09ialR5cGVfcHRyICpwc3RuQ2hlY2tPYmopCit7CisgIFRSQUNFUFJJTlRfTk9DSEFOKCJcbiIsIE5VTEwpOworCisjaWZuZGVmIERJU0FCTEVfTUFMTE9DCisgIGlmKHBzdG5DaGVja09iaikKKyAgeworICAgIFNJVk9JQ0VfRlJFRSgocHJvc2xpY1BTVE5DaGVja09ialR5cGVfcHRyKSpwc3RuQ2hlY2tPYmopOworICB9CisKKyAgcmV0dXJuIFJDX05PTkU7CisKKyNlbHNlCisgIFNJTEFCU19VTlJFRkVSRU5DRURfUEFSQU1FVEVSKHBzdG5DaGVja09iaik7CisgIHJldHVybiBSQ19VTlNVUFBPUlRFRF9GRUFUVVJFOworI2VuZGlmCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisqKiBGdW5jdGlvbjogUHJvU0xJQ19EZXN0cm95RGlmZlBTVE5DaGVja09ianMKKyoqCisqKiBEZXNjcmlwdGlvbjoKKyoqIEZyZWUgbWVtb3J5IGZvciBwc3RuRGlmZkNoZWNrT2JqCisqKgorKiogUmV0dXJuczoKKyoqIFJDX05PTkUKKyoqIFJDX1VOU1VQUE9SVEVEX0ZFQVRFUiBpZiBtYWxsb2MgZGlzYWJsZWQKKyovCisjaWZkZWYgUFNUTl9ERVRfRU5BQkxFCitpbnQgUHJvU0xJQ19EZXN0cm95RGlmZlBTVE5DaGVja09ianMocHJvc2xpY0RpZmZQU1ROQ2hlY2tPYmpUeXBlX3B0cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwc3RuQ2hlY2tPYmopCit7CisgIFRSQUNFUFJJTlRfTk9DSEFOKCJcbiIsIE5VTEwpOworCisjaWZuZGVmIERJU0FCTEVfTUFMTE9DCisgIGlmKHBzdG5DaGVja09iaikKKyAgeworICAgIFNJVk9JQ0VfRlJFRSgocHJvc2xpY0RpZmZQU1ROQ2hlY2tPYmpUeXBlX3B0cikqcHN0bkNoZWNrT2JqKTsKKyAgfQorICByZXR1cm4gUkNfTk9ORTsKKyNlbHNlCisgIFNJTEFCU19VTlJFRkVSRU5DRURfUEFSQU1FVEVSKHBzdG5DaGVja09iaik7CisgIHJldHVybiBSQ19VTlNVUFBPUlRFRF9GRUFUVVJFOworI2VuZGlmCit9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyoqIEZ1bmN0aW9uOiBQcm9TTElDX0luaXRQU1ROQ2hlY2tPYmoKKyoqCisqKiBEZXNjcmlwdGlvbjoKKyoqIEluaXRpYWxpemUgcHN0bkNoZWNrT2JqIHN0cnVjdHVyZSBtZW1iZXJzCisqKgorKiogUmV0dXJuczoKKyoqIFJDX05PTkUKKyovCitpbnQgUHJvU0xJQ19Jbml0UFNUTkNoZWNrT2JqKHByb3NsaWNQU1ROQ2hlY2tPYmpUeXBlX3B0ciBwc3RuQ2hlY2tPYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyIGF2Z1RocmVzaCwgaW50MzIgc2luZ2xlVGhyZXNoLCB1SW50OCBzYW1wbGVzKQoreworICBUUkFDRVBSSU5UX05PQ0hBTigiYXZnVGhyZXMgPSAlZCBzaW5nbGVUaHJlc2ggPSAlZCBzYW1wbGVzID0gJXVcbiIsIGF2Z1RocmVzaCwKKyAgICAgICAgICAgICAgICAgICAgYXZnVGhyZXNoLCBzYW1wbGVzKTsKKworICBwc3RuQ2hlY2tPYmotPmF2Z1RocmVzaCA9IGF2Z1RocmVzaDsKKyAgcHN0bkNoZWNrT2JqLT5zaW5nbGVUaHJlc2ggPSBzaW5nbGVUaHJlc2g7CisgIHBzdG5DaGVja09iai0+c2FtcGxlcyA9IHNhbXBsZXM7CisgIHBzdG5DaGVja09iai0+YXZnSWxvbmcgPSAwOworICBwc3RuQ2hlY2tPYmotPmNvdW50ID0gMDsKKyAgcHN0bkNoZWNrT2JqLT5idWZmRnVsbCA9IDA7CisKKyAgcmV0dXJuIFJDX05PTkU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisqKiBGdW5jdGlvbjogUHJvU0xJQ19Jbml0RGlmZlBTVE5DaGVja09iagorKioKKyoqIERlc2NyaXB0aW9uOgorKiogSW5pdGlhbGl6ZSBwc3RuQ2hlY2tPYmogc3RydWN0dXJlIG1lbWJlcnMKKyoqCisqKiBSZXR1cm5zOgorKiogUkNfTk9ORQorKi8KKyNpZmRlZiBQU1ROX0RFVF9FTkFCTEUKK2ludCBQcm9TTElDX0luaXREaWZmUFNUTkNoZWNrT2JqKHByb3NsaWNEaWZmUFNUTkNoZWNrT2JqVHlwZV9wdHIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzdG5EaWZmQ2hlY2tPYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJlc2V0MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwcmVzZXQyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVudHJ5X3ByZXNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmZW1mX2VuYWJsZSkKK3sKKyAgVFJBQ0VQUklOVF9OT0NIQU4oInAxID0gJWQgcDIgPSAlZCBlcCA9ICVkIGZlbWZfZW5hYmxlID0gJWRcbiIsIHByZXNldDEsCisgICAgICAgICAgICAgICAgICAgIHByZXNldDIsIGVudHJ5X3ByZXNldCwgZmVtZl9lbmFibGUpOworCisgIHBzdG5EaWZmQ2hlY2tPYmotPnNhbXBsZXMgPSBQU1ROX0RFVF9ESUZGX1NBTVBMRVM7CisgIHBzdG5EaWZmQ2hlY2tPYmotPm1heF9mZW1mX3ZvcGVuID0gUFNUTl9ERVRfTUFYX0ZFTUY7CisgIHBzdG5EaWZmQ2hlY2tPYmotPmVudHJ5RENGZWVkUHJlc2V0ID0gZW50cnlfcHJlc2V0OworICBwc3RuRGlmZkNoZWNrT2JqLT5kY2ZQcmVzZXQxID0gcHJlc2V0MTsKKyAgcHN0bkRpZmZDaGVja09iai0+ZGNmUHJlc2V0MiA9IHByZXNldDI7CisgIHBzdG5EaWZmQ2hlY2tPYmotPmZlbWZfZW5hYmxlID0gZmVtZl9lbmFibGU7CisgIHBzdG5EaWZmQ2hlY2tPYmotPnBTdGF0ZS5zdGFnZSA9IDA7CisgIHBzdG5EaWZmQ2hlY2tPYmotPnBTdGF0ZS5zYW1wbGVJdGVyYXRpb25zID0gMDsKKyAgcHN0bkRpZmZDaGVja09iai0+cFN0YXRlLndhaXRJdGVyYXRpb25zID0gMDsKKworICByZXR1cm4gUkNfTk9ORTsKK30KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorKiogRnVuY3Rpb246IFByb1NMSUNfU2V0UHdyc2F2ZU1vZGUKKyoqCisqKiBEZXNjcmlwdGlvbjoKKyoqIEVuYWJsZSBvciBkaXNhYmxlIHBvd2Vyc2F2ZSBtb2RlCisqKgorKiogUmV0dXJuczoKKyoqIFJDX05PTkUKKyovCisjZGVmaW5lIFBST1NMSUNfUkVHX0VOSEFOQ0UgNDcKKworaW50IFByb1NMSUNfU2V0UG93ZXJzYXZlTW9kZSAocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYywgaW50IHB3cnNhdmUpCit7CisgIHVJbnQ4IHJlZ0RhdGE7CisgIFRSQUNFUFJJTlQocFByb3NsaWMsICJwd3JzYXZlID0gJWRcbiIsIHB3cnNhdmUpOworCisgIGlmKHBQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorCisgIHJlZ0RhdGEgPSBSZWFkUmVnKHBQcm9zbGljLHBQcm9zbGljLT5jaGFubmVsLCBQUk9TTElDX1JFR19FTkhBTkNFKTsKKworICBpZihwd3JzYXZlID09IFBXUlNBVkVfRElTQUJMRSkKKyAgeworI2lmZGVmIFNJMzIxN1gKKyAgICBpZiAocFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMTcxCisgICAgICAgICYmIHBQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjE3OSkKKyAgICB7CisgICAgICByZWdEYXRhICY9IDB4Mjc7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisjZW5kaWYKKyAgICAgIHJlZ0RhdGEgJj0gMHgwNzsKKyNpZmRlZiBTSTMyMTdYCisgICAgfQorI2VuZGlmCisgIH0KKyAgZWxzZQorICB7CisgICAgcmVnRGF0YSB8PSAweDEwOworICB9CisKKyAgcmV0dXJuIFdyaXRlUmVnKHBQcm9zbGljLHBQcm9zbGljLT5jaGFubmVsLCBQUk9TTElDX1JFR19FTkhBTkNFLCByZWdEYXRhKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyoqIEZ1bmN0aW9uOiBQcm9TTElDX1NldERBQUVuYWJsZQorKioKKyoqIERlc2NyaXB0aW9uOgorKiogRW5hYmxlIG9yIGRpc2FibGUgYWRqYWNlbnQgRlhPIChTaTMyMTc4IG9ubHkpCisqKgorKiogUmV0dXJuczoKKyoqIFJDX05PTkUKKyovCitpbnQgUHJvU0xJQ19TZXREQUFFbmFibGUgKHByb3NsaWNDaGFuVHlwZSAqcFByb3NsaWMsIGludCBlbmFibGUpCit7CisgIFRSQUNFUFJJTlQocFByb3NsaWMsICJcbiIsIE5VTEwpOworCisgIGlmKHBQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorCisjaWZkZWYgU0kzMjE3WAorICByZXR1cm4gU2kzMjE3eF9TZXREQUFFbmFibGUgKHBQcm9zbGljLGVuYWJsZSk7CisjZWxzZQorICBTSUxBQlNfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihlbmFibGUpOworICByZXR1cm4gUkNfTk9ORTsKKyNlbmRpZgorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorKiogRnVuY3Rpb246IFByb1NMSUNfU2V0VXNlck1vZGUKKyoqCisqKiBEZXNjcmlwdGlvbjogRW5hYmxlcyBVc2VyIEFjY2VzcyBNb2RlIChVQU0pIGlmIHRoZSBwYXJ0IHN1cHBvcnRzIGl0LgorKioKKyoqIFJldHVybnM6CisqKiBSQ19OT05FIGlmIHN1Y2Nlc3NmdWwuCisqLworI2RlZmluZSBQUk9TTElDX1JFR19VU0VSTU9ERV9FTkFCTEUgMTI2CisKK2ludCBQcm9TTElDX1NldFVzZXJNb2RlKHByb3NsaWNDaGFuVHlwZSAqcFByb3NsaWMsQk9PTEVBTiBpc0VuYWJsZWQsCisgICAgICAgICAgICAgICAgICAgICAgICBCT09MRUFOIGlzQmNhc3QpCit7CisgIHVJbnQ4IGRhdGE7CisgIHVJbnQ4IGNoYW5uZWw7CisKKyAgVFJBQ0VQUklOVChwUHJvc2xpYywgImVuYWJsZSA9ICVkIGJjYXN0ID0gJWRcbiIsIChpbnQpaXNFbmFibGVkLCAoaW50KWlzQmNhc3QpOworCisgIGlmKGlzRW5hYmxlZCA9PSBGQUxTRSkKKyAgeworICAgIHJldHVybiBSQ19OT05FOworICB9CisKKyAgaWYoIHBQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDICkKKyAgeworICAgIHJldHVybiBSQ19VTlNVUFBPUlRFRF9GRUFUVVJFOworICB9CisKKyAgaWYoaXNCY2FzdCA9PSBUUlVFKQorICB7CisgICAgY2hhbm5lbCA9IFBST1NMSUNfQ0hBTl9CUk9BRENBU1Q7CisgIH0KKyAgZWxzZQorICB7CisgICAgY2hhbm5lbCA9IHBQcm9zbGljLT5jaGFubmVsOworICB9CisKKyAgZGF0YSA9IFJlYWRSZWcocFByb3NsaWMscFByb3NsaWMtPmNoYW5uZWwsCisgICAgICAgICAgICAgICAgIFBST1NMSUNfUkVHX1VTRVJNT0RFX0VOQUJMRSk7IC8qd2UgY2hlY2sgZmlyc3QgY2hhbm5lbC4gd2UgYXNzdW1lIGFsbCBjaGFubmVscyBzYW1lIHVzZXIgbW9kZSBzdGF0ZSBmb3IgYnJvYWRjYXN0ICovCisKKyAgaWYgKCgoZGF0YSYxKSAhPSAwKSA9PSBpc0VuYWJsZWQpCisgIHsKKyAgICByZXR1cm4gUkNfTk9ORTsKKyAgfQorCisgIFdyaXRlUmVnKHBQcm9zbGljLGNoYW5uZWwsUFJPU0xJQ19SRUdfVVNFUk1PREVfRU5BQkxFLDIpOworICBXcml0ZVJlZyhwUHJvc2xpYyxjaGFubmVsLFBST1NMSUNfUkVHX1VTRVJNT0RFX0VOQUJMRSw4KTsKKyAgV3JpdGVSZWcocFByb3NsaWMsY2hhbm5lbCxQUk9TTElDX1JFR19VU0VSTU9ERV9FTkFCTEUsMHhlKTsKKyAgcmV0dXJuIFdyaXRlUmVnKHBQcm9zbGljLGNoYW5uZWwsUFJPU0xJQ19SRUdfVVNFUk1PREVfRU5BQkxFLDApOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorKiogRnVuY3Rpb246IFByb1NMSUNfaXNSZWluaXRSZXF1aXJlZAorKioKKyoqIERlc2NyaXB0aW9uOgorKiogQ2hlY2tzIGZvciBpbXByb3BlciByaW5nIGV4aXQKKyoqCisqKiBSZXR1cm5zOgorKiogUkNfTk9ORSAgICAgICAgICAgICAgICAtICBSZWluaXQgbm90IHJlcXVpcmVkCisqKiBSQ19SRUlOSVRfUkVRVUlSRUQgICAgIC0gIENvcnJ1cHRlZCBzdGF0ZSBtYWNoaW5lIC0gcmVpbml0IHJlcXVpcmVkCisqKgorKi8KKworaW50IFByb1NMSUNfaXNSZWluaXRSZXF1aXJlZChwcm9zbGljQ2hhblR5cGUgKnBQcm9zbGljKQoreworICB1SW50OCBsZjsKKyAgcmFtRGF0YSBya2RjX3N1bTsKKyAgVFJBQ0VQUklOVChwUHJvc2xpYywgIlxuIiwgTlVMTCk7CisKKyAgaWYoIHBQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorCisgIC8qIENoZWNrIGZvciBpbXByb3BlciByaW5nIGV4aXQgd2hpY2ggbWF5IGNhdXNlIGRjZmVlZCBjb3JydXB0aW9uICovCisKKyAgbGYgPSBSZWFkUmVnKHBQcm9zbGljLCBwUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JFR19MSU5FRkVFRCk7CisgIHJrZGNfc3VtID0gUmVhZFJBTShwUHJvc2xpYyxwUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JBTV9SRENfU1VNKTsKKyAgREVCVUdfUFJJTlQocFByb3NsaWMsICIlc2lzUmVpbml0UmVxdWlyZWQ6IExpbmVmZWVkID0gMHglMDJYIFJEQ19TVU0gPSAlZFxuIiwKKyAgICAgICAgICAgICAgTE9HUFJJTlRfUFJFRklYLCAoaW50KWxmLCAoaW50KSBya2RjX3N1bSk7CisgIGlmKChya2RjX3N1bSAmIDB4NDAwMDAwKSYmKGxmICE9IDB4NDQpKQorICB7CisgICAgcmV0dXJuIFJDX1JFSU5JVF9SRVFVSVJFRDsKKyAgfQorICBlbHNlCisgIHsKKyAgICByZXR1cm4gUkNfTk9ORTsKKyAgfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorKiogRnVuY3Rpb246IExvYWRSZWdUYWJsZQorKioKKyoqIERlc2NyaXB0aW9uOgorKiogR2VuZXJpYyBmdW5jdGlvbiB0byBsb2FkIHJlZ2lzdGVyL1JBTSB3aXRoIHByZWRlZmluZWQgYWRkci92YWx1ZQorKi8KK2ludCBQcm9TTElDX0xvYWRSZWdUYWJsZSAocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYywgCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFByb3NsaWNSQU1Jbml0ICpwUmFtVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFByb3NsaWNSZWdJbml0ICpwUmVnVGFibGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnJvYWRjYXN0KQoreworICB1SW50MTYgaTsKKyAgdUludDggY2hhbm5lbDsKKworICBUUkFDRVBSSU5UKHBQcm9zbGljLCAiYmNhc3QgPSAlZFxuIiwgYnJvYWRjYXN0KTsKKyAgLyogREFBIGRvZXNuJ3QgaGF2ZSBhIFJBTSB0YWJsZS4uIHNraXAgaXQuLi4gKi8KKyAgaWYoIChwUmFtVGFibGUgIT0gMCkKKyAgICAgICYmIChwUHJvc2xpYy0+Y2hhbm5lbFR5cGUgIT0gUFJPU0xJQykgKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorCisgIGlmIChicm9hZGNhc3QpCisgIHsKKyAgICBjaGFubmVsID0gUFJPU0xJQ19DSEFOX0JST0FEQ0FTVDsKKyAgfQorICBlbHNlCisgIHsKKyAgICBjaGFubmVsID0gcFByb3NsaWMtPmNoYW5uZWw7CisgIH0KKworICBpPTA7CisgIGlmIChwUmFtVGFibGUgIT0gMCkKKyAgeworICAgIHdoaWxlIChwUmFtVGFibGVbaV0uYWRkcmVzcyAhPSAweGZmZmYpCisgICAgeworICAgICAgV3JpdGVSQU0ocFByb3NsaWMsY2hhbm5lbCxwUmFtVGFibGVbaV0uYWRkcmVzcyxwUmFtVGFibGVbaV0uaW5pdFZhbHVlKTsKKyAgICAgIGkrKzsKKyAgICB9CisgIH0KKyAgaT0wOworICBpZiAocFJlZ1RhYmxlICE9IDApCisgIHsKKyAgICB3aGlsZSAocFJlZ1RhYmxlW2ldLmFkZHJlc3MgIT0gMHhmZikKKyAgICB7CisgICAgICBXcml0ZVJlZyhwUHJvc2xpYyxjaGFubmVsLHBSZWdUYWJsZVtpXS5hZGRyZXNzLHBSZWdUYWJsZVtpXS5pbml0VmFsdWUpOworICAgICAgaSsrOworICAgIH0KKyAgfQorCisgIHJldHVybiBSQ19OT05FOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorKiogRnVuY3Rpb246IExvYWRSZWdUYWJsZXMKKyoqCisqKiBEZXNjcmlwdGlvbjoKKyoqIEdlbmVyaWMgZnVuY3Rpb24gdG8gbG9hZCByZWdpc3Rlci9SQU0gd2l0aCBwcmVkZWZpbmVkIGFkZHIvdmFsdWUKKyovCisKK2ludCBQcm9TTElDX0xvYWRSZWdUYWJsZXMocHJvc2xpY0NoYW5UeXBlX3B0ciAqcFByb3NsaWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFByb3NsaWNSQU1Jbml0ICpwUmFtVGFibGUsIGNvbnN0IFByb3NsaWNSZWdJbml0ICpwUmVnVGFibGUsIGludCBzaXplKQoreworICBpbnQgaTsKKyAgVFJBQ0VQUklOVCgqcFByb3NsaWMsICJzaXplID0gJWRcbiIsIHNpemUpOworICBmb3IgKGk9MDsgaTxzaXplOyBpKyspCisgIHsKKyAgICBpZiAocFByb3NsaWNbaV0tPmNoYW5uZWxFbmFibGUpCisgICAgeworICAgICAgUHJvU0xJQ19Mb2FkUmVnVGFibGUocFByb3NsaWNbaV0scFJhbVRhYmxlLHBSZWdUYWJsZSxGQUxTRSk7CisgICAgfQorICB9CisgIHJldHVybiBSQ19OT05FOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbnQgUHJvU0xJQ19VbnN1cHBvcnRlZEZlYXR1cmVOb0FyZyhwcm9zbGljQ2hhblR5cGVfcHRyIHBQcm9zbGljLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZnVuY3Rpb25fbmFtZSkKK3sKKyNpZmRlZiBFTkFCTEVfREVCVUcKKyAgTE9HUFJJTlQoIiVzOiB1bnN1cHBvcnRlZCAlcyB3YXMgY2FsbGVkIG9uIGNoYW5uZWwgJWRcbiIsIExPR1BSSU5UX1BSRUZJWCwKKyAgICAgICAgICAgZnVuY3Rpb25fbmFtZSwgcFByb3NsaWMtPmNoYW5uZWwpOworI2Vsc2UKKyAgU0lMQUJTX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIocFByb3NsaWMpOworICBTSUxBQlNfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihmdW5jdGlvbl9uYW1lKTsKKyNlbmRpZgorICByZXR1cm4gUkNfVU5TVVBQT1JURURfRkVBVFVSRTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyoqIEZ1bmN0aW9uOiBQcm9TTElDX1BTVE5fZGVsYXlfcG9sbAorKioKKyoqIERlc2NyaXB0aW9uOgorKiogRGVsYXkgZnVuY3Rpb24gY2FsbGVkIHdpdGhpbiBQU1ROIGRldGVjdGlvbiBmdW5jdGlvbnMKKyoqCisqKiBSZXR1cm4gVmFsdWU6CisqKiBub25lCisqLworI2lmZGVmIFBTVE5fREVUX0VOQUJMRQordm9pZCBQcm9TTElDX1BTVE5fZGVsYXlfcG9sbChwcm9zbGljVGVzdFN0YXRlVHlwZSAqcFN0YXRlLCB1SW50MTYgZGVsYXkpCit7CisgIHVJbnQxNiBkZWxheUNvdW50OworCisgIGlmKChkZWxheS9QU1ROX0RFVF9QT0xMX1JBVEUpIDwgMikKKyAgeworICAgIGRlbGF5Q291bnQgPSAwOworICB9CisgIGVsc2UKKyAgeworICAgIGRlbGF5Q291bnQgPSAoZGVsYXkvUFNUTl9ERVRfUE9MTF9SQVRFKSAtIDI7CisgIH0KKworICBwU3RhdGUtPndhaXRJdGVyYXRpb25zKys7CisgIGlmKChwU3RhdGUtPndhaXRJdGVyYXRpb25zID09IGRlbGF5Q291bnQpIHx8IChkZWxheUNvdW50ID09IDApKQorICB7CisgICAgcFN0YXRlLT53YWl0SXRlcmF0aW9ucyA9IDA7CisgICAgcFN0YXRlLT5zdGFnZSsrOworICB9Cit9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyoqIEZ1bmN0aW9uOiBQcm9TTElDX0NhbGlicmF0ZQorKioKKyoqIERlc2NyaXB0aW9uOgorKiogUGVyZm9ybXMgY2FsaWJyYXRpb24gYmFzZWQgb24gcGFzc2VkIHB0ciB0byBhcnJheSBvZgorKiogZGVzaXJlZCBDQUxSbiBzZXR0aW5ncy4KKyoqCisqKiBTdGFydHMgY2FsaWJyYXRpb24gb24gYWxsIGNoYW5uZWxzIHNlcXVlbnRpYWxseSAobm90IGJyb2FkY2FzdCkKKyoqIGFuZCBjb250aW51b3VzbHkgcG9sbHMgZm9yIGNvbXBsZXRpb24uICBSZXR1cm4gZXJyb3IgY29kZSBpZgorKiogQ0FMX0VOIGRvZXMgbm90IGNsZWFyIGZvciBlYWNoIGVuYWJsZWQgY2hhbm5lbCB3aXRoaW4gdGhlIHBhc3NlZAorKiogdGltZW91dCBwZXJpb2QuCisqLworaW50IFByb1NMSUNfQ2FsaWJyYXRlKHByb3NsaWNDaGFuVHlwZV9wdHIgKnBQcm9zbGljLCBpbnQgbWF4Q2hhbiwgdUludDggKmNhbHIsCisgICAgICAgICAgICAgICAgICAgICAgaW50IG1heFRpbWUpCit7CisgIGludCBpLGosIGNhbF9lbjsKKyAgaW50IGNhbF9lbl9jaGFuID0gMDsKKyAgaW50IHRpbWVyID0gMDsKKworICBUUkFDRVBSSU5UKCpwUHJvc2xpYywgIm1heENoYW4gPSAlZCB0aW1lID0gJWRcbiIsIG1heENoYW4sIG1heFRpbWUgKTsKKworICBpZiAoKCpwUHJvc2xpYyktPmNoYW5uZWxUeXBlICE9IFBST1NMSUMpCisgIHsKKyAgICByZXR1cm4gUkNfQ0hBTk5FTF9UWVBFX0VSUjsKKyAgfQorCisgIGZvcihpID0gMDsgaSA8IG1heENoYW47IGkrKykKKyAgeworICAgIGlmKChwUHJvc2xpY1tpXS0+Y2hhbm5lbEVuYWJsZSkmJihwUHJvc2xpY1tpXS0+Y2hhbm5lbFR5cGUgPT0gUFJPU0xJQykpCisgICAgeworICAgICAgZm9yKGogPSAwOyBqIDwgNDsgaisrKQorICAgICAgeworICAgICAgICBXcml0ZVJlZyhwUHJvc2xpY1tpXSwgcFByb3NsaWNbaV0tPmNoYW5uZWwsIChQUk9TTElDX1JFR19DQUxSMCtqKSwgY2FscltqXSk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgLyogV2FpdCBmb3IgY2FsaWJyYXRpb24gdG8gY29tcGxldGUgKi8KKyAgZG8KKyAgeworICAgIGNhbF9lbiA9IDA7CisgICAgRGVsYXlYKCpwUHJvc2xpYywgMTApOworICAgIGZvcihpID0gMDsgaSA8IG1heENoYW47IGkrKykKKyAgICB7CisgICAgICBpZiggKHBQcm9zbGljW2ldLT5jaGFubmVsRW5hYmxlKSAmJiAocFByb3NsaWNbaV0tPmNoYW5uZWxUeXBlID09IFBST1NMSUMpKQorICAgICAgeworICAgICAgICBjYWxfZW5fY2hhbiA9IFJlYWRSZWcocFByb3NsaWNbaV0sIHBQcm9zbGljW2ldLT5jaGFubmVsLCBQUk9TTElDX1JFR19DQUxSMyk7CisgICAgICAgIGlmKCAoY2FsX2VuX2NoYW4gJiAweDgwKSAmJiAodGltZXIgPT0gbWF4VGltZSkgKQorICAgICAgICB7CisgICAgICAgICAgREVCVUdfUFJJTlQocFByb3NsaWNbaV0sICIlc0NhbGlicmF0aW9uIHRpbWVkIG91dCBvbiBjaGFubmVsICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgIExPR1BSSU5UX1BSRUZJWCwgcFByb3NsaWNbaV0tPmNoYW5uZWwpOworICAgICAgICAgIHBQcm9zbGljW2ldLT5jaGFubmVsRW5hYmxlID0gMDsKKyAgICAgICAgICBwUHJvc2xpY1tpXS0+ZXJyb3IgPSBSQ19DQUxfVElNRU9VVDsKKyAgICAgICAgfQorICAgICAgICBjYWxfZW4gfD0gY2FsX2VuX2NoYW47CisgICAgICB9CisgICAgfQorICB9CisgIHdoaWxlKCAodGltZXIrKyA8PSBtYXhUaW1lKSAmJiAoY2FsX2VuICYgMHg4MCkgKTsKKworICBpZih0aW1lciA8PSBtYXhUaW1lKQorICB7CisgICAgcmV0dXJuIFJDX05PTkU7CisgIH0KKyAgZWxzZQorICB7CisgICAgcmV0dXJuIFJDX0NBTF9USU1FT1VUOworICB9Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgdGhlIHh4eHhfSW5pdF93aXRoX09wdGlvbnMgLSBkbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5Li4uICovCitpbnQgUHJvU0xJQ19SZUluaXRfaGVscGVyKHByb3NsaWNDaGFuVHlwZV9wdHIgKnBQcm9zbGljLCBpbnQgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdE9wdGlvbnNUeXBlIGluaXRfb3B0aW9uLCBpbnQgbnVtQ2hhblBlckRldmljZSkKK3sKKyAgaW50IGk7CisKKyAgLyogUHJlc2VydmUgbGluZWZlZWQgc3RhdGUuLiAqLworICBmb3IoaSA9IDA7IGkgPCBzaXplOyBpKyspCisgIHsKKyAgICBwUHJvc2xpY1tpXS0+c2NyYXRjaCA9IFJlYWRSZWcoIHBQcm9zbGljW2ldLCBwUHJvc2xpY1tpXS0+Y2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPU0xJQ19SRUdfTElORUZFRUQpOworICAgIFByb1NMSUNfUG93ZXJEb3duQ29udmVydGVyKCBwUHJvc2xpY1tpXSApOworCisgICAgLyogQ2xlYXIgTVNUUlNUQVQgb24gYSBkZXZpY2UgYmFzaXMgKi8KKyAgICBpZiggKG51bUNoYW5QZXJEZXZpY2UgPT0gMSkgCisgICAgICB8fCAoKG51bUNoYW5QZXJEZXZpY2UgPT0gMikgJiYgKChpJjEpID09IDApICApICkKKyAgICB7CisgICAgICBQcm9TTElDX1dyaXRlUmVnKHBQcm9zbGljW2ldLCBQUk9TTElDX1JFR19NU1RSU1RBVCwgMHhGRik7IC8qIENsZWFyIG1hc3RlciBzdGF0dXMgcmVnaXN0ZXIgKi8KKyAgICB9CisgIH0KKworICBEZWxheVgoKnBQcm9zbGljLCAxMCk7IC8qIFdhaXQgdG8gZW5zdXJlIHN5c3RlbSBpcyBwb3dlcmVkIGRvd24uLi4gKi8KKworICAvKiBEbyBhIHNvZnQgcmVzZXQgaWYgcmVpbml0IGlzIHJlcXVlc3RlZC4uLiovCisgIGlmKGluaXRfb3B0aW9uID09IElOSVRfUkVJTklUKQorICB7CisgICAgZm9yKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorICAgIHsKKyAgICAgIGlmKG51bUNoYW5QZXJEZXZpY2UgPT0gMikgCisgICAgICB7CisgICAgICAgIFdyaXRlUmVnKHBQcm9zbGljW2ldLCAocFByb3NsaWNbaV0pLT5jaGFubmVsLCBQUk9TTElDX1JFR19SRVNFVCwKKyAgICAgICAgICAgICAgICAgKCgocFByb3NsaWNbaV0pLT5jaGFubmVsKSYxKSsxKTsgLyogcmVzZXQgMSBjaGFubmVsIGF0IGEgdGltZSAqLworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBXcml0ZVJlZyhwUHJvc2xpY1tpXSwgKHBQcm9zbGljW2ldKS0+Y2hhbm5lbCwgUFJPU0xJQ19SRUdfUkVTRVQsIDEpOworICAgICAgfQorCisgICAgICBwUHJvc2xpY1tpXS0+ZXJyb3IgPSBSQ19OT05FOyAvKiBDbGVhciBhbnkgZXJyb3JzIHdlIG1heSBoYXZlIHNlZW4gaW4gcG93ZXJpbmcgZG93biB0aGUgY29udmVydGVyICovCisgICAgfQorICAgIERlbGF5WCgqcFByb3NsaWMsIDEwMCk7IC8qIFdhaXQgZm9yIGEgc29mdCByZXNldCAqLworCisgIH0KKyAgcmV0dXJuIFJDX05PTkU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBQcm9TTElDX1NvZnRSZXNldChwcm9zbGljQ2hhblR5cGVfcHRyIHBQcm9zbGljLCB1SW50MTYgcmVzZXRPcHRpb25zKQoreworICB1SW50OCBkYXRhOworCisgIFRSQUNFUFJJTlQocFByb3NsaWMsICJyZXNldCBvcHRpb246ICVkXG4iLHJlc2V0T3B0aW9ucyk7CisKKyAgLyogV2UgY2FuJ3QgdXNlIGNoYW5uZWxUeXBlIHNpbmNlIGl0IG1heSBub3QgYmVlbiBzZXQuICBXZSBhc3N1bWUgYXQgbGVhc3QgCisgICAqIFNXSW5pdCB3YXMgY2FsbGVkLi4uICovCisgIGlmKCBwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID09IFNJMzA1MCApCisgIHsKKyAgICByZXR1cm4gUkNfQ0hBTk5FTF9UWVBFX0VSUjsKKyAgfQorCisgIC8qIENoZWNrIGlmIHdlJ3JlIGluIGZyZWUtcnVuIG1vZGUsIGlmIHNvIGFib3J0ICovCisgIGRhdGEgPSBSZWFkUmVnKHBQcm9zbGljLCBwUHJvc2xpYy0+Y2hhbm5lbCwgUFJPU0xJQ19SRUdfRU5IQU5DRSk7CisKKyAgaWYoZGF0YSAmIDB4NikKKyAgeworICAgIHJldHVybiBSQ19QTExfRlJFRVJVTl9BQ1RJVkU7CisgIH0KKworICBpZihyZXNldE9wdGlvbnMgJiBQUk9TTElDX0JDQVNUX1JFU0VUKQorICB7CisgICAgcmV0dXJuIFdyaXRlUmVnKHBQcm9zbGljLCBQUk9TTElDX0NIQU5fQlJPQURDQVNULCBQUk9TTElDX1JFR19SRVNFVCwgKHVJbnQ4KShyZXNldE9wdGlvbnMgJiAweEZGKSk7CisgIH0KKyAgZWxzZQorICB7CisgICAgcmV0dXJuIFdyaXRlUmVnKHBQcm9zbGljLCBwUHJvc2xpYy0+Y2hhbm5lbCwgUFJPU0xJQ19SRUdfUkVTRVQsICh1SW50OCkocmVzZXRPcHRpb25zICYgMHhGRikpOworICB9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgRElTQUJMRV9UT05FX1NFVFVQCitpbnQgUHJvU0xJQ19Ub25lR2VuU2V0dXBQdHIocHJvc2xpY0NoYW5UeXBlX3B0ciBwUHJvc2xpYywgUHJvU0xJQ19Ub25lX0NmZyAqY2ZnKQoreworICBUUkFDRVBSSU5UKHBQcm9zbGljLCAiXG4iLE5VTEwpOworCisgIGlmKHBQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQorICB7CisgICAgcmV0dXJuIFJDX0NIQU5ORUxfVFlQRV9FUlI7CisgIH0KKworICBXcml0ZVJBTShwUHJvc2xpYywgcFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SQU1fT1NDMUZSRVEsIGNmZy0+b3NjMS5mcmVxKTsKKyAgV3JpdGVSQU0ocFByb3NsaWMsIHBQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkFNX09TQzFBTVAsIGNmZy0+b3NjMS5hbXApOworICBXcml0ZVJBTShwUHJvc2xpYywgcFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SQU1fT1NDMVBIQVMsIGNmZy0+b3NjMS5waGFzKTsKKyAgV3JpdGVSZWcocFByb3NsaWMsIHBQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkVHX08xVEFISSxjZmctPm9zYzEudGFoaSk7CisgIFdyaXRlUmVnKHBQcm9zbGljLCBwUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JFR19PMVRBTE8sY2ZnLT5vc2MxLnRhbG8pOworICBXcml0ZVJlZyhwUHJvc2xpYywgcFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfTzFUSUhJLGNmZy0+b3NjMS50aWhpKTsKKyAgV3JpdGVSZWcocFByb3NsaWMsIHBQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkVHX08xVElMTyxjZmctPm9zYzEudGlsbyk7CisKKyAgV3JpdGVSQU0ocFByb3NsaWMsIHBQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkFNX09TQzJGUkVRLCBjZmctPm9zYzIuZnJlcSk7CisgIFdyaXRlUkFNKHBQcm9zbGljLCBwUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JBTV9PU0MyQU1QLCBjZmctPm9zYzIuYW1wKTsKKyAgV3JpdGVSQU0ocFByb3NsaWMsIHBQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkFNX09TQzJQSEFTLCBjZmctPm9zYzIucGhhcyk7CisgIFdyaXRlUmVnKHBQcm9zbGljLCBwUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JFR19PMlRBSEksY2ZnLT5vc2MyLnRhaGkpOworICBXcml0ZVJlZyhwUHJvc2xpYywgcFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfTzJUQUxPLGNmZy0+b3NjMi50YWxvKTsKKyAgV3JpdGVSZWcocFByb3NsaWMsIHBQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkVHX08yVElISSxjZmctPm9zYzIudGloaSk7CisgIFdyaXRlUmVnKHBQcm9zbGljLCBwUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JFR19PMlRJTE8sY2ZnLT5vc2MyLnRpbG8pOworCisKKyAgV3JpdGVSZWcocFByb3NsaWMsIHBQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkVHX09NT0RFLGNmZy0+b21vZGUpOworICByZXR1cm4gUkNfTk9ORTsKK30KKyNlbmRpZiAvKiBESVNBQkxFX1RPTkVfU0VUVVAgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBESVNBQkxFX0ZTS19TRVRVUAoraW50IFByb1NMSUNfRlNLU2V0dXBQdHIgKHByb3NsaWNDaGFuVHlwZV9wdHIgcFByb3NsaWMsIFByb1NMSUNfRlNLX0NmZyAqY2ZnKQoreworICB1SW50OCBkYXRhOworICBpbnQgaTsKKworICBUUkFDRVBSSU5UKHBQcm9zbGljLCAiXG4iLE5VTEwpOworCisgIGlmKHBQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQorICB7CisgICAgcmV0dXJuIFJDX0NIQU5ORUxfVFlQRV9FUlI7CisgIH0KKworICBXcml0ZVJlZyhwUHJvc2xpYyxwUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JFR19GU0tERVBUSCwKKyAgICAgICAgICAgMHgwOCk7IC8qIENsZWFyIEJ1ZmZlciAqLworICBXcml0ZVJlZyhwUHJvc2xpYyxwUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JFR19PMVRBSEksMCk7CisgIFdyaXRlUmVnKHBQcm9zbGljLHBQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkVHX08xVElISSwwKTsKKyAgV3JpdGVSZWcocFByb3NsaWMscFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfTzFUSUxPLDApOworICBXcml0ZVJlZyhwUHJvc2xpYyxwUHJvc2xpYy0+Y2hhbm5lbCxQUk9TTElDX1JFR19PMVRBTE8sMHgxMyk7CisKKyAgZGF0YSA9IFJlYWRSZWcocFByb3NsaWMscFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfT01PREUpOworICBpZiAoY2ZnLT5laWdodEJpdCkKKyAgeworICAgIGRhdGEgfD0gMHg4MDsKKyAgfQorICBlbHNlCisgIHsKKyAgICBkYXRhICY9IH4oMHg4MCk7CisgIH0KKyAgV3JpdGVSZWcocFByb3NsaWMscFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SRUdfRlNLREVQVEgsY2ZnLT5mc2tkZXB0aCk7CisgIFdyaXRlUmVnKHBQcm9zbGljLHBQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkVHX09NT0RFLGRhdGEpOworCisgIGZvcihpID0gMDsgaSA8IDI7IGkrKykKKyAgeworICAgIFdyaXRlUkFNKHBQcm9zbGljLHBQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkFNX0ZTSzAxK2ksY2ZnLT5mc2tbaV0pOworICAgIFdyaXRlUkFNKHBQcm9zbGljLHBQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkFNX0ZTS0FNUDAraSxjZmctPmZza2FtcFtpXSk7CisgICAgV3JpdGVSQU0ocFByb3NsaWMscFByb3NsaWMtPmNoYW5uZWwsUFJPU0xJQ19SQU1fRlNLRlJFUTAraSxjZmctPmZza2ZyZXFbaV0pOworICB9CisgIHJldHVybiBSQ19OT05FOworfQorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBQcm9TTElDX0VuYWJsZUZhc3RSaW5nU3RhcnQocHJvc2xpY0NoYW5UeXBlX3B0ciBwUHJvc2xpYywgQk9PTEVBTiBpc0VuYWJsZWQpCit7CisgIHVJbnQ4IGRhdGE7CisKKyAgVFJBQ0VQUklOVChwUHJvc2xpYywgIlxuIixOVUxMKTsKKworICBpZihwUHJvc2xpYy0+Y2hhbm5lbFR5cGUgIT0gUFJPU0xJQykKKyAgeworICAgIHJldHVybiBSQ19DSEFOTkVMX1RZUEVfRVJSOworICB9CisjaWYgZGVmaW5lZChTSTMyMTdYKSAmJiAhZGVmaW5lZChTaTMyMTdYX1JFVkNfT05MWSkKKyAgaWYgKHBQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjE3MQorICAgICAgJiYgcFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMTc5KQorICB7CisgICAgaWYocFByb3NsaWMtPmRldmljZUlkLT5jaGlwUmV2IDwgMikKKyAgICB7CisgICAgICByZXR1cm4gUkNfVU5TVVBQT1JURURfRkVBVFVSRTsKKyAgICB9CisgIH0KKyNlbmRpZgorCisgIGRhdGEgPSBSZWFkUmVnKHBQcm9zbGljLCBwUHJvc2xpYy0+Y2hhbm5lbCwgUFJPU0xJQ19SRUdfVVNFUlNUQVQpOworCisgIGlmKCBpc0VuYWJsZWQgKQorICB7CisgICAgZGF0YSB8PSA4OworICB9CisgIGVsc2UKKyAgeworICAgIGRhdGEgJj0gfjg7CisgIH0KKworICByZXR1cm4gV3JpdGVSZWcocFByb3NsaWMsIHBQcm9zbGljLT5jaGFubmVsLCBQUk9TTElDX1JFR19VU0VSU1RBVCwgZGF0YSk7Cit9CisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL2NvZGVjcy9zaTMyMTh4L3NyYy9wcm9zbGljX3RzdGluLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9zcmMvcHJvc2xpY190c3Rpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZjdhOTkKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9zcmMvcHJvc2xpY190c3Rpbi5jCkBAIC0wLDAgKzEsMTU4MCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCisvKg0KKyAqIEF1dGhvcihzKToNCisgKiBjZHANCisgKg0KKyAqIERpc3RyaWJ1dGVkIGJ5Og0KKyAqIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMNCisgKg0KKyAqIFRoaXMgZmlsZSBjb250YWlucyBwcm9wcmlldGFyeSBpbmZvcm1hdGlvbi4NCisgKiBObyBkaXNzZW1pbmF0aW9uIGFsbG93ZWQgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbQ0KKyAqIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuDQorICoNCisgKiBGaWxlIERlc2NyaXB0aW9uOg0KKyAqIFRoaXMgaXMgdGhlIGludGVyZmFjZSBmaWxlIGZvciB0aGUgUHJvU0xJQyB0ZXN0LWluIGZ1bmN0aW9ucy4NCisgKg0KKyAqDQorICovDQorDQorI2luY2x1ZGUgIi4uL2NvbmZpZ19pbmMvc2lfdm9pY2VfZGF0YXR5cGVzLmgiDQorI2luY2x1ZGUgIi4uL2luYy9zaV92b2ljZV9jdHJsLmgiDQorI2luY2x1ZGUgIi4uL2luYy9zaV92b2ljZV90aW1lcl9pbnRmLmgiDQorI2luY2x1ZGUgIi4uL2luYy9wcm9zbGljLmgiDQorI2luY2x1ZGUgIi4uL2NvbmZpZ19pbmMvcHJvc2xpY19hcGlfY29uZmlnLmgiDQorI2luY2x1ZGUgIi4uL2luYy9wcm9zbGljX3RzdGluLmgiDQorDQorI2lmZGVmIFNJMzIxN1gNCisjaW5jbHVkZSAic2kzMjE3eC5oIg0KKyNpbmNsdWRlICJzaTMyMTd4X2ludGYuaCINCisjZW5kaWYNCisjaWZkZWYgU0kzMjE4WA0KKyNpbmNsdWRlICIuLi9pbmMvc2kzMjE4eC5oIg0KKyNpbmNsdWRlICIuLi9pbmMvc2kzMjE4eF9pbnRmLmgiDQorI2VuZGlmDQorI2lmZGVmIFNJMzIxOVgNCisjaW5jbHVkZSAic2kzMjE5eC5oIg0KKyNpbmNsdWRlICJzaTMyMTl4X2ludGYuaCINCisjZW5kaWYNCisjaWZkZWYgU0kzMjI2WA0KKyNpbmNsdWRlICJzaTMyMjZ4LmgiDQorI2luY2x1ZGUgInNpMzIyNnhfaW50Zi5oIg0KKyNlbmRpZg0KKyNpZmRlZiBTSTMyMjhYDQorI2luY2x1ZGUgInNpMzIyOHguaCINCisjaW5jbHVkZSAic2kzMjI4eF9pbnRmLmgiDQorI2VuZGlmDQorDQorLyoNCisqKiBGdW5jdGlvbiBQb2ludGVyIE1hY3Jvcw0KKyovDQorI2RlZmluZSBXcml0ZVJlZyAgICAgICAgcFByb3NsaWMtPmRldmljZUlkLT5jdHJsSW50ZXJmYWNlLT5Xcml0ZVJlZ2lzdGVyX2ZwdHINCisjZGVmaW5lIFJlYWRSZWcgICAgICAgICBwUHJvc2xpYy0+ZGV2aWNlSWQtPmN0cmxJbnRlcmZhY2UtPlJlYWRSZWdpc3Rlcl9mcHRyDQorI2RlZmluZSBwUHJvSFcgICAgICAgICAgcFByb3NsaWMtPmRldmljZUlkLT5jdHJsSW50ZXJmYWNlLT5oQ3RybA0KKyNkZWZpbmUgUmVzZXQgICAgICAgICAgIHBQcm9zbGljLT5kZXZpY2VJZC0+Y3RybEludGVyZmFjZS0+UmVzZXRfZnB0cg0KKyNkZWZpbmUgRGVsYXkgICAgICAgICAgIHBQcm9zbGljLT5kZXZpY2VJZC0+Y3RybEludGVyZmFjZS0+RGVsYXlfZnB0cg0KKyNkZWZpbmUgcFByb1RpbWVyICAgICAgIHBQcm9zbGljLT5kZXZpY2VJZC0+Y3RybEludGVyZmFjZS0+aFRpbWVyDQorI2RlZmluZSBXcml0ZVJBTSAgICAgICAgcFByb3NsaWMtPmRldmljZUlkLT5jdHJsSW50ZXJmYWNlLT5Xcml0ZVJBTV9mcHRyDQorI2RlZmluZSBSZWFkUkFNICAgICAgICAgcFByb3NsaWMtPmRldmljZUlkLT5jdHJsSW50ZXJmYWNlLT5SZWFkUkFNX2ZwdHINCisjZGVmaW5lIFRpbWVFbGFwc2VkICAgICBwUHJvc2xpYy0+ZGV2aWNlSWQtPmN0cmxJbnRlcmZhY2UtPnRpbWVFbGFwc2VkX2ZwdHINCisjZGVmaW5lIGdldFRpbWUgICAgICAgICBwUHJvc2xpYy0+ZGV2aWNlSWQtPmN0cmxJbnRlcmZhY2UtPmdldFRpbWVfZnB0cg0KKyNkZWZpbmUgU2V0U2VtYXBob3JlICAgIHBQcm9zbGljLT5kZXZpY2VJZC0+Y3RybEludGVyZmFjZS0+U2VtYXBob3JlX2ZwdHINCisNCisjZGVmaW5lIFdyaXRlUmVnWCAgICAgICBkZXZpY2VJZC0+Y3RybEludGVyZmFjZS0+V3JpdGVSZWdpc3Rlcl9mcHRyDQorI2RlZmluZSBSZWFkUmVnWCAgICAgICAgZGV2aWNlSWQtPmN0cmxJbnRlcmZhY2UtPlJlYWRSZWdpc3Rlcl9mcHRyDQorI2RlZmluZSBwUHJvSFdYICAgICAgICAgZGV2aWNlSWQtPmN0cmxJbnRlcmZhY2UtPmhDdHJsDQorI2RlZmluZSBEZWxheVggICAgICAgICAgZGV2aWNlSWQtPmN0cmxJbnRlcmZhY2UtPkRlbGF5X2ZwdHINCisjZGVmaW5lIHBQcm9UaW1lclggICAgICBkZXZpY2VJZC0+Y3RybEludGVyZmFjZS0+aFRpbWVyDQorI2RlZmluZSBXcml0ZVJBTVggICAgICAgZGV2aWNlSWQtPmN0cmxJbnRlcmZhY2UtPldyaXRlUkFNX2ZwdHINCisjZGVmaW5lIFJlYWRSQU1YICAgICAgICBkZXZpY2VJZC0+Y3RybEludGVyZmFjZS0+UmVhZFJBTV9mcHRyDQorI2RlZmluZSBnZXRUaW1lWCAgICAgICAgZGV2aWNlSWQtPmN0cmxJbnRlcmZhY2UtPmdldFRpbWVfZnB0cg0KKyNkZWZpbmUgVGltZUVsYXBzZWRYICAgIGRldmljZUlkLT5jdHJsSW50ZXJmYWNlLT50aW1lRWxhcHNlZF9mcHRyDQorDQorLyoNCisqIFZhbGlkIERldmljZSBOdW1iZXIgUmFuZ2VzDQorKi8NCisNCisjZGVmaW5lIFRTVElOX1ZBTElEX1NJMzIxN1hfUEFSVF9OVU0gKHBQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjE3MSAmJiBwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIxNzkpDQorI2RlZmluZSBUU1RJTl9WQUxJRF9TSTMyMThYX1BBUlRfTlVNIChwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIxODAgJiYgcFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMTg5KQ0KKyNkZWZpbmUgVFNUSU5fVkFMSURfU0kzMjE5WF9QQVJUX05VTSAocFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMTkwICYmIHBQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjE5OSkNCisjZGVmaW5lIFRTVElOX1ZBTElEX1NJMzIyNlhfUEFSVF9OVU0gKHBQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjI2MCAmJiBwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIyNjkpDQorI2RlZmluZSBUU1RJTl9WQUxJRF9TSTMyMjhYX1BBUlRfTlVNIChwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIyODAgJiYgcFByb3NsaWMtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMjg5KQ0KKw0KKyNkZWZpbmUgVFNUSU5fSU5WQUxJRF9QQVJUX05VTSAgIShUU1RJTl9WQUxJRF9TSTMyMTdYX1BBUlRfTlVNIHx8XA0KKyAgICBUU1RJTl9WQUxJRF9TSTMyMThYX1BBUlRfTlVNIHx8IFRTVElOX1ZBTElEX1NJMzIxOVhfUEFSVF9OVU0gfHxcDQorICAgIFRTVElOX1ZBTElEX1NJMzIyNlhfUEFSVF9OVU0gfHwgVFNUSU5fVkFMSURfU0kzMjI4WF9QQVJUX05VTSkNCisNCisjZGVmaW5lIExPR1BSSU5UX1BSRUZJWCAiUHJvU0xJQzoiDQorDQorUHJvU0xJQ19EQ2ZlZWRfQ2ZnIHJpbmd0cmlwVGVzdERDRmVlZFByZXNldFtdID0NCit7DQorICB7DQorICAgIDB4MTk2MDM4RDhMLAkvKiBTTE9QRV9WTElNICovDQorICAgIDB4MUQ3MDc2NTFMLAkvKiBTTE9QRV9SRkVFRCAqLw0KKyAgICAweDAwNDBBMEUwTCwJLyogU0xPUEVfSUxJTSAqLw0KKyAgICAweDFFMDdGRTQ4TCwJLyogU0xPUEVfREVMVEExICovDQorICAgIDB4MUVENjJEODdMLAkvKiBTTE9QRV9ERUxUQTIgKi8NCisgICAgMHgwMUE1MDcyNEwsCS8qIFZfVkxJTSAoMTQuMDAwIHYpICovDQorICAgIDB4MDE2RUU1NEZMLAkvKiBWX1JGRUVEICgxMi4yMDAgdikgKi8NCisgICAgMHgwMTJDQkJGNUwsCS8qIFZfSUxJTSAgKDEwLjAwMCB2KSAqLw0KKyAgICAweDAwQUY4QzEwTCwJLyogQ09OU1RfUkZFRUQgKDEwLjAwMCBtQSkgKi8NCisgICAgMHgwMDQ1Q0JCQ0wsCS8qIENPTlNUX0lMSU0gKDE1LjAwMCBtQSkgKi8NCisgICAgMHgwMDBENDk0QkwsCS8qIElfVkxJTSAoMC4wMDAgbUEpICovDQorICAgIDB4MDA1QjBBRkJMLAkvKiBMQ1JPTkhLICgxMC4wMDAgbUEpICovDQorICAgIDB4MDA2RDQwNjBMLAkvKiBMQ1JPRkZISyAoMTIuMDAwIG1BKSAqLw0KKyAgICAweDAwMDA4MDAwTCwJLyogTENSREJJICg1LjAwMCBtcykgKi8NCisgICAgMHgwMDQ4RDU5NUwsCS8qIExPTkdISVRIICg4LjAwMCBtQSkgKi8NCisgICAgMHgwMDNGQkFFMkwsCS8qIExPTkdMT1RIICg3LjAwMCBtQSkgKi8NCisgICAgMHgwMDAwODAwMEwsCS8qIExPTkdEQkkgKDUuMDAwIG1zKSAqLw0KKyAgICAweDAwMEYwMDAwTCwJLyogTENSTUFTSyAoMTUwLjAwMCBtcykgKi8NCisgICAgMHgwMDA4MDAwMEwsCS8qIExDUk1BU0tfUE9MUkVWICg4MC4wMDAgbXMpICovDQorICAgIDB4MDAxNDAwMDBMLAkvKiBMQ1JNQVNLX1NUQVRFICgyMDAuMDAwIG1zKSAqLw0KKyAgICAweDAwMTQwMDAwTCwJLyogTENSTUFTS19MSU5FQ0FQICgyMDAuMDAwIG1zKSAqLw0KKyAgICAweDAxOTk5OTk5TCwJLyogVkNNX09IICgyNS4wMDAgdikgKi8NCisgICAgMHgwMDUxRUI4NUwsCS8qIFZPVl9CQVQgKDUuMDAwIHYpICovDQorICAgIDB4MDA0MTg5MzdMIAkvKiBWT1ZfR05EICg0LjAwMCB2KSAqLw0KKyAgfQ0KK307DQorDQorLyoNCisqKiBkQiBsb29rdXAgdGFibGUNCisqLw0KKyNkZWZpbmUgREJfVEFCTEVfU1RFUF9TSVpFICAgICAyNTANCisjZGVmaW5lIE1BWF9EQl9UQUJMRSAgICAgICAgICAgMjc5DQorDQorc3RhdGljIGNvbnN0IHVJbnQzMiBkQlRhYmxlMTBfbjYwIFtdID0NCit7DQorICAzMTYyMywNCisgIDMwNzI2LA0KKyAgMjk4NTQsDQorICAyOTAwNywNCisgIDI4MTg0LA0KKyAgMjczODQsDQorICAyNjYwNywNCisgIDI1ODUyLA0KKyAgMjUxMTksDQorICAyNDQwNiwNCisgIDIzNzE0LA0KKyAgMjMwNDEsDQorICAyMjM4NywNCisgIDIxNzUyLA0KKyAgMjExMzUsDQorICAyMDUzNSwNCisgIDE5OTUzLA0KKyAgMTkzODcsDQorICAxODgzNiwNCisgIDE4MzAyLA0KKyAgMTc3ODMsDQorICAxNzI3OCwNCisgIDE2Nzg4LA0KKyAgMTYzMTIsDQorICAxNTg0OSwNCisgIDE1Mzk5LA0KKyAgMTQ5NjIsDQorICAxNDUzOCwNCisgIDE0MTI1LA0KKyAgMTM3MjUsDQorICAxMzMzNSwNCisgIDEyOTU3LA0KKyAgMTI1ODksDQorICAxMjIzMiwNCisgIDExODg1LA0KKyAgMTE1NDgsDQorICAxMTIyMCwNCisgIDEwOTAyLA0KKyAgMTA1OTMsDQorICAxMDI5MiwNCisgIDEwMDAwLA0KKyAgOTcxNiwNCisgIDk0NDEsDQorICA5MTczLA0KKyAgODkxMywNCisgIDg2NjAsDQorICA4NDE0LA0KKyAgODE3NSwNCisgIDc5NDMsDQorICA3NzE4LA0KKyAgNzQ5OSwNCisgIDcyODYsDQorICA3MDc5LA0KKyAgNjg3OSwNCisgIDY2ODMsDQorICA2NDk0LA0KKyAgNjMxMCwNCisgIDYxMzEsDQorICA1OTU3LA0KKyAgNTc4OCwNCisgIDU2MjMsDQorICA1NDY0LA0KKyAgNTMwOSwNCisgIDUxNTgsDQorICA1MDEyLA0KKyAgNDg3MCwNCisgIDQ3MzIsDQorICA0NTk3LA0KKyAgNDQ2NywNCisgIDQzNDAsDQorICA0MjE3LA0KKyAgNDA5NywNCisgIDM5ODEsDQorICAzODY4LA0KKyAgMzc1OCwNCisgIDM2NTIsDQorICAzNTQ4LA0KKyAgMzQ0NywNCisgIDMzNTAsDQorICAzMjU1LA0KKyAgMzE2MiwNCisgIDMwNzMsDQorICAyOTg1LA0KKyAgMjkwMSwNCisgIDI4MTgsDQorICAyNzM4LA0KKyAgMjY2MSwNCisgIDI1ODUsDQorICAyNTEyLA0KKyAgMjQ0MSwNCisgIDIzNzEsDQorICAyMzA0LA0KKyAgMjIzOSwNCisgIDIxNzUsDQorICAyMTEzLA0KKyAgMjA1NCwNCisgIDE5OTUsDQorICAxOTM5LA0KKyAgMTg4NCwNCisgIDE4MzAsDQorICAxNzc4LA0KKyAgMTcyOCwNCisgIDE2NzksDQorICAxNjMxLA0KKyAgMTU4NSwNCisgIDE1NDAsDQorICAxNDk2LA0KKyAgMTQ1NCwNCisgIDE0MTMsDQorICAxMzcyLA0KKyAgMTMzNCwNCisgIDEyOTYsDQorICAxMjU5LA0KKyAgMTIyMywNCisgIDExODksDQorICAxMTU1LA0KKyAgMTEyMiwNCisgIDEwOTAsDQorICAxMDU5LA0KKyAgMTAyOSwNCisgIDEwMDAsDQorICA5NzIsDQorICA5NDQsDQorICA5MTcsDQorICA4OTEsDQorICA4NjYsDQorICA4NDEsDQorICA4MTgsDQorICA3OTQsDQorICA3NzIsDQorICA3NTAsDQorICA3MjksDQorICA3MDgsDQorICA2ODgsDQorICA2NjgsDQorICA2NDksDQorICA2MzEsDQorICA2MTMsDQorICA1OTYsDQorICA1NzksDQorICA1NjIsDQorICA1NDYsDQorICA1MzEsDQorICA1MTYsDQorICA1MDEsDQorICA0ODcsDQorICA0NzMsDQorICA0NjAsDQorICA0NDcsDQorICA0MzQsDQorICA0MjIsDQorICA0MTAsDQorICAzOTgsDQorICAzODcsDQorICAzNzYsDQorICAzNjUsDQorICAzNTUsDQorICAzNDUsDQorICAzMzUsDQorICAzMjUsDQorICAzMTYsDQorICAzMDcsDQorICAyOTksDQorICAyOTAsDQorICAyODIsDQorICAyNzQsDQorICAyNjYsDQorICAyNTksDQorICAyNTEsDQorICAyNDQsDQorICAyMzcsDQorICAyMzAsDQorICAyMjQsDQorICAyMTgsDQorICAyMTEsDQorICAyMDUsDQorICAyMDAsDQorICAxOTQsDQorICAxODgsDQorICAxODMsDQorICAxNzgsDQorICAxNzMsDQorICAxNjgsDQorICAxNjMsDQorICAxNTgsDQorICAxNTQsDQorICAxNTAsDQorICAxNDUsDQorICAxNDEsDQorICAxMzcsDQorICAxMzMsDQorICAxMzAsDQorICAxMjYsDQorICAxMjIsDQorICAxMTksDQorICAxMTUsDQorICAxMTIsDQorICAxMDksDQorICAxMDYsDQorICAxMDMsDQorICAxMDAsDQorICA5NywNCisgIDk0LA0KKyAgOTIsDQorICA4OSwNCisgIDg3LA0KKyAgODQsDQorICA4MiwNCisgIDc5LA0KKyAgNzcsDQorICA3NSwNCisgIDczLA0KKyAgNzEsDQorICA2OSwNCisgIDY3LA0KKyAgNjUsDQorICA2MywNCisgIDYxLA0KKyAgNjAsDQorICA1OCwNCisgIDU2LA0KKyAgNTUsDQorICA1MywNCisgIDUyLA0KKyAgNTAsDQorICA0OSwNCisgIDQ3LA0KKyAgNDYsDQorICA0NSwNCisgIDQzLA0KKyAgNDIsDQorICA0MSwNCisgIDQwLA0KKyAgMzksDQorICAzOCwNCisgIDM3LA0KKyAgMzUsDQorICAzNCwNCisgIDMzLA0KKyAgMzMsDQorICAzMiwNCisgIDMxLA0KKyAgMzAsDQorICAyOSwNCisgIDI4LA0KKyAgMjcsDQorICAyNywNCisgIDI2LA0KKyAgMjUsDQorICAyNCwNCisgIDI0LA0KKyAgMjMsDQorICAyMiwNCisgIDIyLA0KKyAgMjEsDQorICAyMSwNCisgIDIwLA0KKyAgMTksDQorICAxOSwNCisgIDE4LA0KKyAgMTgsDQorICAxNywNCisgIDE3LA0KKyAgMTYsDQorICAxNiwNCisgIDE1LA0KKyAgMTUsDQorICAxNSwNCisgIDE0LA0KKyAgMTQsDQorICAxMywNCisgIDEzLA0KKyAgMTMsDQorICAxMiwNCisgIDEyLA0KKyAgMTIsDQorICAxMSwNCisgIDExLA0KKyAgMTEsDQorICAxMCwNCisgIDEwDQorfTsNCisNCisNCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KK3N0YXRpYyBpbnQgc2V0SW50ZXJuYWxUZXN0TG9hZChwcm9zbGljQ2hhblR5cGUgKnBQcm9zbGljLCBpbnQgY29ubmVjdCkNCit7DQorICByYW1EYXRhIHJhbV9zYXZlOw0KKyAgcmFtRGF0YSB0ZXN0X2xvYWRfYWRkcjsNCisgIHJhbURhdGEgdGVzdF9sb2FkX2JpdG1hc2s7DQorDQorICBpZihwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIxNzENCisgICAgICAmJiBwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIxNzkpDQorICB7DQorICAgIHRlc3RfbG9hZF9hZGRyID0gMTUxNjsNCisgICAgdGVzdF9sb2FkX2JpdG1hc2sgPSAweDAwODAwMDAwTDsgIC8qIGJpdCAyMyAqLw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICB0ZXN0X2xvYWRfYWRkciA9IDE2MTE7DQorICAgIHRlc3RfbG9hZF9iaXRtYXNrID0gMHgwMDA0MDAwMEw7ICAvKiBiaXQgMTggKi8NCisgIH0NCisNCisgIFByb1NMSUNfU2V0VXNlck1vZGUocFByb3NsaWMsMSwwKTsNCisgIHJhbV9zYXZlID0gUHJvU0xJQ19SZWFkUkFNKHBQcm9zbGljLHRlc3RfbG9hZF9hZGRyKTsNCisNCisgIGlmKGNvbm5lY3QpDQorICB7DQorICAgIHJhbV9zYXZlIHw9IHRlc3RfbG9hZF9iaXRtYXNrOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICByYW1fc2F2ZSAmPSB+dGVzdF9sb2FkX2JpdG1hc2s7DQorICB9DQorDQorICBQcm9TTElDX1dyaXRlUkFNKHBQcm9zbGljLHRlc3RfbG9hZF9hZGRyLHJhbV9zYXZlKTsNCisNCisgIHJldHVybiBSQ19OT05FOw0KK30NCisNCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KK3N0YXRpYyB2b2lkIHNldHVwMWtIekJhbmRwYXNzKHByb3NsaWNDaGFuVHlwZSAqcFByb3NsaWMpDQorew0KKyAgLyogMWtIeiBiYW5kcGFzcyAtIEdhaW4gPSAtMS43MDU1ICovDQorICBQcm9TTElDX1dyaXRlUkFNKHBQcm9zbGljLCAzMiwgMHgxODBBNTBMKTsJLyogVEVTVEIwXzEgKi8NCisgIFByb1NMSUNfV3JpdGVSQU0ocFByb3NsaWMsIDMzLCAweDBMKTsJCS8qIFRFU1RCMV8xICovDQorICBQcm9TTElDX1dyaXRlUkFNKHBQcm9zbGljLCAzNCwgMHgxRkU3RjVCMEwpOy8qIFRFU1RCMl8xICovDQorICBQcm9TTElDX1dyaXRlUkFNKHBQcm9zbGljLCAzNSwgMHhCMTY2MjIwTCk7CS8qIFRFU1RBMV8xICovDQorICBQcm9TTElDX1dyaXRlUkFNKHBQcm9zbGljLCAzNiwgMHgxODUxMTlEMEwpOy8qIFRFU1RBMl8xICovDQorICBQcm9TTElDX1dyaXRlUkFNKHBQcm9zbGljLCAzNywgMHhBRjYyNEUwTCk7CS8qIFRFU1RCMF8yICovDQorICBQcm9TTElDX1dyaXRlUkFNKHBQcm9zbGljLCAzOCwgMHgwTCk7CQkvKiBURVNUQjFfMiAqLw0KKyAgUHJvU0xJQ19Xcml0ZVJBTShwUHJvc2xpYywgMzksIDB4QUY2MjRFMEwpOwkvKiBURVNUQjJfMiAqLw0KKyAgUHJvU0xJQ19Xcml0ZVJBTShwUHJvc2xpYywgNDAsIDB4MEwpOyAJCS8qIFRFU1RBMV8yICovDQorICBQcm9TTElDX1dyaXRlUkFNKHBQcm9zbGljLCA0MSwgMHgxODUxMTlEMEwpOy8qIFRFU1RBMl8yICovDQorICBQcm9TTElDX1dyaXRlUkFNKHBQcm9zbGljLCA0MiwgMHg3QzZFNDEwTCk7CS8qIFRFU1RCMF8zICovDQorICBQcm9TTElDX1dyaXRlUkFNKHBQcm9zbGljLCA0MywgMHhBRkY4QjgwTCk7CS8qIFRFU1RCMV8zICovDQorICBQcm9TTElDX1dyaXRlUkFNKHBQcm9zbGljLCA0NCwgMHg3QzZFNDEwTCk7CS8qIFRFU1RCMl8zICovDQorICBQcm9TTElDX1dyaXRlUkFNKHBQcm9zbGljLCA0NSwgMHgxNEU5OURFMEwpOy8qIFRFU1RBMV8zICovDQorICBQcm9TTElDX1dyaXRlUkFNKHBQcm9zbGljLCA0NiwgMHgxODUxMTlEMEwpOy8qIFRFU1RBMl8zICovDQorICBQcm9TTElDX1dyaXRlUkFNKHBQcm9zbGljLCA1MCwgMHg0MDAwMEwpOwkvKiBURVNUQVZCVyAqLw0KKyAgUHJvU0xJQ19Xcml0ZVJBTShwUHJvc2xpYywgNDksIDB4MUY0MDAwMEwpOwkvKiBURVNUV0xOICovDQorICBQcm9TTElDX1dyaXRlUkFNKHBQcm9zbGljLCA1NCwgMHgwTCk7CQkvKiBURVNUQVZUSCAqLw0KKyAgUHJvU0xJQ19Xcml0ZVJBTShwUHJvc2xpYywgNTMsIDB4MEwpOwkJLyogVEVTVFBLVEggKi8NCit9DQorDQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisvKiBSZXR1cm4gdmFsdWUgaW4gZEIqMTAwMCAobWRCKSAqLw0KK3N0YXRpYyBpbnQzMiBkQkxvb2t1cCh1SW50MzIgbnVtYmVyKQ0KK3sNCisgIGludCBpOw0KKyAgdUludDMyIGVycjsNCisNCisgIGlmKG51bWJlciA+PSBkQlRhYmxlMTBfbjYwWzBdKQ0KKyAgew0KKyAgICByZXR1cm4gMTAwMDA7ICAvKiBvdXQgb2YgcmFuZ2UgLSBjbGFtcCBhdCAxMGRCICovDQorICB9DQorDQorICBmb3IoaT0wOyBpPE1BWF9EQl9UQUJMRTsgaSsrKSAvKiAxMzkgKi8NCisgIHsNCisgICAgaWYoKG51bWJlciA8IGRCVGFibGUxMF9uNjBbaV0pJiYobnVtYmVyID49IGRCVGFibGUxMF9uNjBbaSsxXSkpDQorICAgIHsNCisgICAgICAvKiBTZWUgd2hpY2ggbGV2ZWwgaXQgaXMgY2xvc2VzdCB0byAqLw0KKyAgICAgIGVyciA9IGRCVGFibGUxMF9uNjBbaV0gLSBudW1iZXI7DQorICAgICAgaWYoZXJyIDwgKG51bWJlciAtIGRCVGFibGUxMF9uNjBbaSsxXSkpDQorICAgICAgew0KKyAgICAgICAgcmV0dXJuICgxMDAwMCAtIGkqREJfVEFCTEVfU1RFUF9TSVpFKTsNCisgICAgICB9DQorICAgICAgZWxzZQ0KKyAgICAgIHsNCisgICAgICAgIHJldHVybiAoMTAwMDAgLSAoaSsxKSpEQl9UQUJMRV9TVEVQX1NJWkUpOw0KKyAgICAgIH0NCisgICAgfQ0KKyAgfQ0KKyAgLyogTm8gc29sdXRpb24gZm91bmQ/ICBSZXR1cm4gLTYwZEIgKi8NCisgIHJldHVybiAtNjAwMDA7DQorfQ0KKw0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorc3RhdGljIGludDMyIHJlYWRBdWRpb0RpYWdMZXZlbChwcm9zbGljQ2hhblR5cGUgKnBQcm9zbGljLGludDMyIHplcm9fZGJtX212cGspDQorew0KKyAgaW50MzIgZGF0YTsNCisNCisgIGRhdGEgPSBQcm9TTElDX1JlYWRSQU0ocFByb3NsaWMsNDcpOyAvKiBURVNUUEtPICovDQorICBERUJVR19QUklOVChwUHJvc2xpYywgIlRFU1RQS08gPSAlZFxuIiwgKGludClkYXRhKTsNCisNCisgIGRhdGEgLz0gNDAxNDU7ICAgICAgICAgLyogMl4yOCAqIDAuMTgyICogMTBeKEdmaWx0LzIwKSAqLw0KKyAgZGF0YSAqPSAxMDAwOw0KKyAgZGF0YSAvPSB6ZXJvX2RibV9tdnBrOw0KKyAgZGF0YSAqPSAxMDsNCisNCisgIHJldHVybihkQkxvb2t1cChkYXRhKSk7DQorfQ0KKw0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorc3RhdGljIGNoYXIgKmFwcGx5VGVzdExpbWl0cyhwcm9zbGljVGVzdE9iaiAqdGVzdCkNCit7DQorICBpZigodGVzdC0+dmFsdWUgPj0gdGVzdC0+bG93ZXJMaW1pdCkmJih0ZXN0LT52YWx1ZSA8PSB0ZXN0LT51cHBlckxpbWl0KSkNCisgIHsNCisgICAgdGVzdC0+dGVzdFJlc3VsdCA9IFJDX1RFU1RfUEFTU0VEOw0KKyAgICByZXR1cm4gKCJQQVNTIik7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIHRlc3QtPnRlc3RSZXN1bHQgPSBSQ19URVNUX0ZBSUxFRDsNCisgICAgcmV0dXJuICgiRkFJTCIpOw0KKyAgfQ0KK30NCisNCisNCisNCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KK3N0YXRpYyBpbnQgbG9nVGVzdChwcm9zbGljQ2hhblR5cGUgKnBQcm9zbGljLHByb3NsaWNUZXN0T2JqICp0ZXN0LA0KKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpsYWJlbCkNCit7DQorICBjaGFyIHJlc3VsdFN0clsxMF07DQorICBTSVZPSUNFX1NUUkNQWShyZXN1bHRTdHIsYXBwbHlUZXN0TGltaXRzKHRlc3QpKTsNCisgIERFQlVHX1BSSU5UKHBQcm9zbGljLCAiUHJvU0xJQyA6IFRlc3RJbiA6ICUtMTRzID0gJS04ZCA6OiAlc1xuIiwgbGFiZWwsIChpbnQpKHRlc3QtPnZhbHVlKSwNCisgICAgICAgICAgICAgcmVzdWx0U3RyKTsNCisjaWZuZGVmIEVOQUJMRV9ERUJVRw0KKyAgU0lMQUJTX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIocFByb3NsaWMpOw0KKyAgU0lMQUJTX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIobGFiZWwpOw0KKyNlbmRpZg0KKyAgcmV0dXJuIHRlc3QtPnRlc3RSZXN1bHQ7DQorDQorfQ0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorc3RhdGljIGludCBsb2dTdGF0dXMocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYywgaW50IHN0YXR1cyxjb25zdCBjaGFyICpsYWJlbCkNCit7DQorICBERUJVR19QUklOVChwUHJvc2xpYywgIlByb1NMSUMgOiBUZXN0SW4gOiAlLTE0cyA9ICVkXG4iLCBsYWJlbCxzdGF0dXMpOw0KKyNpZm5kZWYgRU5BQkxFX0RFQlVHDQorICBTSUxBQlNfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihwUHJvc2xpYyk7DQorICBTSUxBQlNfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihsYWJlbCk7DQorICBTSUxBQlNfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihzdGF0dXMpOw0KKyNlbmRpZg0KKyAgcmV0dXJuIFJDX05PTkU7DQorfQ0KKw0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorc3RhdGljIHVJbnQzMiBJc3FydDMyKHVJbnQzMiBudW0pDQorew0KKyAgdUludDMyIG9uZSxyZXMsb3A7DQorDQorICBvcD1udW07DQorICByZXM9MDsNCisgIG9uZSA9IDFMIDw8IDMwOw0KKyAgd2hpbGUob25lID4gb3ApDQorICB7DQorICAgIG9uZSA+Pj0yOw0KKyAgfQ0KKw0KKyAgd2hpbGUob25lICE9MCkNCisgIHsNCisgICAgaWYob3AgPj0gcmVzICsgb25lKQ0KKyAgICB7DQorICAgICAgb3AgPSBvcCAtIChyZXMgKyBvbmUpOw0KKyAgICAgIHJlcyA9IHJlcyArIDIqb25lOw0KKyAgICB9DQorICAgIHJlcyA+Pj0gMTsNCisgICAgb25lID4+PSAyOw0KKyAgfQ0KKw0KKyAgcmV0dXJuIChyZXMpOw0KK30NCisNCisNCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KK3N0YXRpYyBpbnQgc3RvcmVEQ0ZlZWRQcmVzZXQocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYyxQcm9TTElDX0RDZmVlZF9DZmcgKmNmZyx1SW50OCBwcmVzZXQpDQorew0KKyAgY2ZnW3ByZXNldF0uc2xvcGVfdmxpbSA9IFByb1NMSUNfUmVhZFJBTShwUHJvc2xpYyw2MzQpOw0KKyAgY2ZnW3ByZXNldF0uc2xvcGVfcmZlZWQgPSBQcm9TTElDX1JlYWRSQU0ocFByb3NsaWMsNjM1KTsNCisgIGNmZ1twcmVzZXRdLnNsb3BlX2lsaW0gPSBQcm9TTElDX1JlYWRSQU0ocFByb3NsaWMsNjM2KTsNCisgIGNmZ1twcmVzZXRdLmRlbHRhMSA9IFByb1NMSUNfUmVhZFJBTShwUHJvc2xpYyw2MzgpOw0KKyAgY2ZnW3ByZXNldF0uZGVsdGEyID0gUHJvU0xJQ19SZWFkUkFNKHBQcm9zbGljLDYzOSk7DQorICBjZmdbcHJlc2V0XS52X3ZsaW0gPSBQcm9TTElDX1JlYWRSQU0ocFByb3NsaWMsNjQwKTsNCisgIGNmZ1twcmVzZXRdLnZfcmZlZWQgPSBQcm9TTElDX1JlYWRSQU0ocFByb3NsaWMsNjQxKTsNCisgIGNmZ1twcmVzZXRdLnZfaWxpbSA9IFByb1NMSUNfUmVhZFJBTShwUHJvc2xpYyw2NDIpOw0KKyAgY2ZnW3ByZXNldF0uY29uc3RfcmZlZWQgPSBQcm9TTElDX1JlYWRSQU0ocFByb3NsaWMsNjQzKTsNCisgIGNmZ1twcmVzZXRdLmNvbnN0X2lsaW0gPSBQcm9TTElDX1JlYWRSQU0ocFByb3NsaWMsNjQ0KTsNCisgIGNmZ1twcmVzZXRdLmlfdmxpbSA9IFByb1NMSUNfUmVhZFJBTShwUHJvc2xpYyw2NDUpOw0KKyAgY2ZnW3ByZXNldF0ubGNyb25oayA9IFByb1NMSUNfUmVhZFJBTShwUHJvc2xpYyw4NTMpOw0KKyAgY2ZnW3ByZXNldF0ubGNyb2ZmaGsgPSBQcm9TTElDX1JlYWRSQU0ocFByb3NsaWMsODUyKTsNCisgIGNmZ1twcmVzZXRdLmxjcmRiaSA9IFByb1NMSUNfUmVhZFJBTShwUHJvc2xpYyw3MDEpOw0KKyAgY2ZnW3ByZXNldF0ubG9uZ2hpdGggPSBQcm9TTElDX1JlYWRSQU0ocFByb3NsaWMsODU4KTsNCisgIGNmZ1twcmVzZXRdLmxvbmdsb3RoID0gUHJvU0xJQ19SZWFkUkFNKHBQcm9zbGljLDg1OSk7DQorICBjZmdbcHJlc2V0XS5sb25nZGJpID0gUHJvU0xJQ19SZWFkUkFNKHBQcm9zbGljLDcwMik7DQorICBjZmdbcHJlc2V0XS5sY3JtYXNrID0gUHJvU0xJQ19SZWFkUkFNKHBQcm9zbGljLDg1NCk7DQorICBjZmdbcHJlc2V0XS5sY3JtYXNrX3BvbHJldiA9IFByb1NMSUNfUmVhZFJBTShwUHJvc2xpYyw4NTUpOw0KKyAgY2ZnW3ByZXNldF0ubGNybWFza19zdGF0ZSA9IFByb1NMSUNfUmVhZFJBTShwUHJvc2xpYyw4NTYpOw0KKyAgY2ZnW3ByZXNldF0ubGNybWFza19saW5lY2FwID0gUHJvU0xJQ19SZWFkUkFNKHBQcm9zbGljLDg1Nyk7DQorICBjZmdbcHJlc2V0XS52Y21fb2ggPSBQcm9TTElDX1JlYWRSQU0ocFByb3NsaWMsNzQ4KTsNCisgIGNmZ1twcmVzZXRdLnZvdl9iYXQgPSBQcm9TTElDX1JlYWRSQU0ocFByb3NsaWMsNzUyKTsNCisgIGNmZ1twcmVzZXRdLnZvdl9nbmQgPSBQcm9TTElDX1JlYWRSQU0ocFByb3NsaWMsNzUxKTsNCisNCisgIHJldHVybiBSQ19OT05FOw0KK30NCisNCisNCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KK2ludCBQcm9TTElDX2NyZWF0ZVRlc3RJbk9ianMocHJvc2xpY1Rlc3RJbk9ialR5cGVfcHRyICpwVHN0aW4sIHVJbnQzMiBudW1fb2JqcykNCit7DQorI2lmbmRlZiBESVNBQkxFX01BTExPQw0KKyAgKnBUc3RpbiA9IFNJVk9JQ0VfQ0FMTE9DKHNpemVvZihwcm9zbGljVGVzdEluT2JqVHlwZSksbnVtX29ianMpOw0KKw0KKyAgaWYoKnBUc3RpbiA9PSBOVUxMKQ0KKyAgew0KKyNpZmRlZiBFTkFCTEVfREVCVUcNCisgICAgTE9HUFJJTlQoIiVzOiAlczogZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSIsIExPR1BSSU5UX1BSRUZJWCwgX19GVU5DVElPTl9fKTsNCisjZW5kaWYNCisgICAgcmV0dXJuIFJDX05PX01FTTsNCisgIH0NCisNCisgIHJldHVybiBSQ19OT05FOw0KKyNlbHNlDQorICBTSUxBQlNfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihwVHN0aW4pOw0KKyAgU0lMQUJTX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIobnVtX29ianMpOw0KKyAgcmV0dXJuIFJDX1VOU1VQUE9SVEVEX0ZFQVRVUkU7DQorI2VuZGlmDQorfQ0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQoraW50IFByb1NMSUNfZGVzdHJveVRlc3RJbk9ianMocHJvc2xpY1Rlc3RJbk9ialR5cGVfcHRyICpwVHN0aW4pDQorew0KKyNpZm5kZWYgRElTQUJMRV9NQUxMT0MNCisgIFNJVk9JQ0VfRlJFRSgocHJvc2xpY1Rlc3RJbk9ialR5cGVfcHRyKSAqcFRzdGluKTsNCisgICpwVHN0aW4gPSBOVUxMOw0KKyAgcmV0dXJuIFJDX05PTkU7DQorI2Vsc2UNCisgIFNJTEFCU19VTlJFRkVSRU5DRURfUEFSQU1FVEVSKHBUc3Rpbik7DQorICByZXR1cm4gUkNfVU5TVVBQT1JURURfRkVBVFVSRTsNCisjZW5kaWYNCit9DQorDQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCitpbnQgUHJvU0xJQ190ZXN0SW5QQ01McGJrRW5hYmxlKHByb3NsaWNDaGFuVHlwZSAqcFByb3NsaWMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9zbGljVGVzdEluT2JqVHlwZSAqcFRzdGluKQ0KK3sNCisgIHVJbnQ4IHJlZ0RhdGE7DQorDQorICAvKiBWYWxpZCBkZXZpY2UgY2hlY2sgKi8NCisgIGlmKFRTVElOX0lOVkFMSURfUEFSVF9OVU0pDQorICB7DQorICAgIHJldHVybiBSQ19VTlNVUFBPUlRFRF9GRUFUVVJFOw0KKyAgfQ0KKw0KKyAgLyogQ2hlY2sgaWYgZW5hYmxlZCAqLw0KKyAgaWYoIXBUc3Rpbi0+cGNtTHBia1Rlc3QudGVzdEVuYWJsZSkNCisgIHsNCisgICAgcmV0dXJuIFJDX1RFU1RfRElTQUJMRUQ7DQorICB9DQorICAvKiBSZXR1cm4gaWYgYWxyZWFkeSBlbmFibGVkICovDQorICBpZihwVHN0aW4tPnBjbUxwYmtUZXN0LnBjbUxwYmtFbmFibGVkKQ0KKyAgew0KKyAgICByZXR1cm4gUkNfTk9ORTsNCisgIH0NCisNCisgIC8qIFN0b3JlIFBDTSBTZXR0aW5ncyAqLw0KKyAgcFRzdGluLT5wY21McGJrVGVzdC5wY21Nb2RlU2F2ZSA9IFByb1NMSUNfUmVhZFJlZyhwUHJvc2xpYywxMSk7IC8qIFBDTU1PREUgKi8NCisNCisNCisgIC8qIERpc2FibGUgUENNIGJ1cyBiZWZvcmUgY2hhbmdpbmcgZm9ybWF0ICovDQorICByZWdEYXRhID0gcFRzdGluLT5wY21McGJrVGVzdC5wY21Nb2RlU2F2ZSAmIH4weDEwOyAvKiBQQ01fRU4gPSAwICovDQorICBQcm9TTElDX1dyaXRlUmVnKHBQcm9zbGljLDExLHJlZ0RhdGEpOw0KKw0KKyAgLyogQ29uZmlndXJlIGZvciBlaXRoZXIgOCBvciAxNmJpdCBsaW5lYXIgKi8NCisgIGlmKHBUc3Rpbi0+cGNtTHBia1Rlc3QucGNtOEJpdExpbmVhciA9PSBQQ01fOEJJVCkNCisgIHsNCisgICAgcmVnRGF0YSB8PSAweDAyOyAgIC8qIFBDTV9GTVRbMV0gPSAxICovDQorICAgIHJlZ0RhdGEgJj0gfjB4MDE7ICAvKiBQQ01fRk1UWzBdID0gMCAqLw0KKyAgfQ0KKyAgZWxzZSAvKiBQQ01fMTZCSVQgKi8NCisgIHsNCisgICAgcmVnRGF0YSB8PSAweDAzOyAgLyogUENNX0ZNVFsxOjBdID0gMTEgKi8NCisgIH0NCisNCisgIFByb1NMSUNfV3JpdGVSZWcocFByb3NsaWMsMTEscmVnRGF0YSk7DQorDQorICAvKiBFbmFibGUgUENNIExvb3BiYWNrICovDQorICBQcm9TTElDX1dyaXRlUmVnKHBQcm9zbGljLDQzLDB4MDEpOyAgLyogTE9PUEJBQ0sgKi8NCisNCisgIC8qIFJlLWVuYWJsZSBQQ00gQnVzICovDQorICBQcm9TTElDX1dyaXRlUmVnKHBQcm9zbGljLDExLHJlZ0RhdGF8MHgxMCk7ICAvKiBQQ01NT0RFICovDQorDQorICBwVHN0aW4tPnBjbUxwYmtUZXN0LnBjbUxwYmtFbmFibGVkID0gMTsNCisgIERFQlVHX1BSSU5UKHBQcm9zbGljLCAiUHJvU0xJQyA6IFRlc3RJbiA6IHBjbUxwYmsgOiBFTkFCTEVEXG4iKTsNCisgIHJldHVybiBSQ19OT05FOw0KK30NCisNCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KK2ludCBQcm9TTElDX3Rlc3RJblBDTUxwYmtEaXNhYmxlKHByb3NsaWNDaGFuVHlwZSAqcFByb3NsaWMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvc2xpY1Rlc3RJbk9ialR5cGUgKnBUc3RpbikNCit7DQorICB1SW50OCByZWdEYXRhOw0KKw0KKyAgLyogVmFsaWQgZGV2aWNlIGNoZWNrICovDQorICBpZihUU1RJTl9JTlZBTElEX1BBUlRfTlVNKQ0KKyAgew0KKyAgICByZXR1cm4gUkNfVU5TVVBQT1JURURfRkVBVFVSRTsNCisgIH0NCisNCisgIC8qIENoZWNrIGlmIGVuYWJsZWQgKi8NCisgIGlmKCFwVHN0aW4tPnBjbUxwYmtUZXN0LnRlc3RFbmFibGUpDQorICB7DQorICAgIHJldHVybiBSQ19URVNUX0RJU0FCTEVEOw0KKyAgfQ0KKw0KKyAgLyogUmV0dXJuIGlmIGFscmVhZHkgZGlzYWJsZWQgKi8NCisgIGlmKCFwVHN0aW4tPnBjbUxwYmtUZXN0LnBjbUxwYmtFbmFibGVkKQ0KKyAgew0KKyAgICByZXR1cm4gUkNfTk9ORTsNCisgIH0NCisNCisgIC8qIERpc2FibGUgUENNIEJ1cyAqLw0KKyAgcmVnRGF0YSA9IFByb1NMSUNfUmVhZFJlZyhwUHJvc2xpYywxMSk7IC8qIFBDTU1PREUgKi8NCisgIFByb1NMSUNfV3JpdGVSZWcocFByb3NsaWMsMTEscmVnRGF0YSAmPSB+MHgxMCk7DQorDQorICAvKiBEaXNhYmxlIFBDTSBMb29wYmFjayAqLw0KKyAgUHJvU0xJQ19Xcml0ZVJlZyhwUHJvc2xpYyw0MywwKTsNCisNCisgIC8qIFJlc3RvcmUgUENNTU9ERS4gRm9yY2UgZGlzYWJsZWQgd2hpbGUgY2hhbmdpbmcgZm9ybWF0ICovDQorICBQcm9TTElDX1dyaXRlUmVnKHBQcm9zbGljLDExLHBUc3Rpbi0+cGNtTHBia1Rlc3QucGNtTW9kZVNhdmUgJj0gfjB4MTApOw0KKyAgUHJvU0xJQ19Xcml0ZVJlZyhwUHJvc2xpYywxMSxwVHN0aW4tPnBjbUxwYmtUZXN0LnBjbU1vZGVTYXZlKTsNCisNCisgIHBUc3Rpbi0+cGNtTHBia1Rlc3QucGNtTHBia0VuYWJsZWQgPSAwOw0KKyAgREVCVUdfUFJJTlQocFByb3NsaWMsICJQcm9TTElDIDogVGVzdEluIDogcGNtTHBiayA6IERJU0FCTEVEXG4iKTsNCisgIHJldHVybiBSQ19OT05FOw0KK30NCisNCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCisNCitpbnQgUHJvU0xJQ190ZXN0SW5EQ0ZlZWQocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYywNCisgICAgICAgICAgICAgICAgICAgICAgICAgcHJvc2xpY1Rlc3RJbk9ialR5cGUgKnBUc3RpbikNCit7DQorICB1SW50OCBlbmhhbmNlUmVnU2F2ZTsNCisgIHByb3NsaWNNb25pdG9yVHlwZSBtb25pdG9yOw0KKyAgcmFtRGF0YSBsY3JvZmZoa19zYXZlID0gMDsNCisgIHJhbURhdGEgbGNyb25oa19zYXZlID0gMDsNCisNCisgIC8qIFZhbGlkIGRldmljZSBjaGVjayAqLw0KKyAgaWYoVFNUSU5fSU5WQUxJRF9QQVJUX05VTSkNCisgIHsNCisgICAgcmV0dXJuIFJDX1VOU1VQUE9SVEVEX0ZFQVRVUkU7DQorICB9DQorDQorICAvKiBDaGVjayBpZiBlbmFibGVkICovDQorICBpZighcFRzdGluLT5kY0ZlZWRUZXN0LnRlc3RFbmFibGUpDQorICB7DQorICAgIHJldHVybiBSQ19URVNUX0RJU0FCTEVEOw0KKyAgfQ0KKw0KKyAgLyogSW52YWxpZGF0ZSBsYXN0IHRlc3QgcmVzdWx0cyAqLw0KKyAgcFRzdGluLT5kY0ZlZWRUZXN0LnRlc3REYXRhVmFsaWQgPSBUU1RJTl9SRVNVTFRTX0lOVkFMSUQ7DQorDQorICAvKiBWZXJpZnkgbGluZSBub3QgaW4gdXNlICovDQorICBpZihQcm9TTElDX1JlYWRSZWcocFByb3NsaWMsMzQpICYgMHgwMikgIC8qIExDUiAqLw0KKyAgew0KKyAgICBERUJVR19QUklOVChwUHJvc2xpYywgIlxuUHJvU0xJQyA6IFRlc3RJbiA6IERDIEZlZWQgOiBMaW5lIGluIFVzZVxuIik7DQorDQorICAgIGlmKHBUc3Rpbi0+ZGNGZWVkVGVzdC5hYm9ydElmTGluZUluVXNlPT1BQk9SVF9MSVVfRU5BQkxFRCkNCisgICAgew0KKyAgICAgIHJldHVybiBSQ19MSU5FX0lOX1VTRTsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgLyogRGlzYWJsZSBQb3dlcnNhdmUgKi8NCisgIGVuaGFuY2VSZWdTYXZlID0gUHJvU0xJQ19SZWFkUmVnKHBQcm9zbGljLDQ3KTsNCisgIFByb1NMSUNfV3JpdGVSZWcocFByb3NsaWMsNDcsMHgyMCk7DQorICBEZWxheShwUHJvVGltZXIsMTApOw0KKw0KKyAgLyogT25ob29rIG1lYXN1cmVtZW50ICovDQorICBQcm9TTElDX0xpbmVNb25pdG9yKHBQcm9zbGljLCZtb25pdG9yKTsNCisNCisgIHBUc3Rpbi0+ZGNGZWVkVGVzdC5kY2ZlZWRWdGlwT25ob29rLnZhbHVlID0gbW9uaXRvci52dGlwOw0KKyAgcFRzdGluLT5kY0ZlZWRUZXN0LmRjZmVlZFZyaW5nT25ob29rLnZhbHVlID0gbW9uaXRvci52cmluZzsNCisgIHBUc3Rpbi0+ZGNGZWVkVGVzdC5kY2ZlZWRWbG9vcE9uaG9vay52YWx1ZSA9IG1vbml0b3IudnRyOw0KKyAgcFRzdGluLT5kY0ZlZWRUZXN0LmRjZmVlZFZiYXRPbmhvb2sudmFsdWUgPSBtb25pdG9yLnZiYXQ7DQorICBwVHN0aW4tPmRjRmVlZFRlc3QuZGNmZWVkSXRpcE9uaG9vay52YWx1ZSA9IG1vbml0b3IuaXRpcDsNCisgIHBUc3Rpbi0+ZGNGZWVkVGVzdC5kY2ZlZWRJcmluZ09uaG9vay52YWx1ZSA9IG1vbml0b3IuaXJpbmc7DQorICBwVHN0aW4tPmRjRmVlZFRlc3QuZGNmZWVkSWxvb3BPbmhvb2sudmFsdWUgPSBtb25pdG9yLml0cjsNCisgIHBUc3Rpbi0+ZGNGZWVkVGVzdC5kY2ZlZWRJbG9uZ09uaG9vay52YWx1ZSA9IG1vbml0b3IuaWxvbmc7DQorDQorICAvKiBNb2RpZnkgTENSIHRocmVzaG9sZCAob3B0aW9uYWwpIGJlZm9yZSBjb25uZWN0aW5nIHRlc3QgbG9hZCAqLw0KKyAgaWYocFRzdGluLT5kY0ZlZWRUZXN0LmFwcGx5TGNyVGhyZXNoID09IExDUl9DSEVDS19FTkFCTEVEKQ0KKyAgew0KKyAgICBsY3JvZmZoa19zYXZlID0gUHJvU0xJQ19SZWFkUkFNKHBQcm9zbGljLDg1Mik7DQorICAgIGxjcm9uaGtfc2F2ZSA9IFByb1NMSUNfUmVhZFJBTShwUHJvc2xpYyw4NTMpOw0KKyAgICBQcm9TTElDX1dyaXRlUkFNKHBQcm9zbGljLDg1MixwVHN0aW4tPmRjRmVlZFRlc3QuYWx0TGNyT2ZmVGhyZXNoKTsNCisgICAgUHJvU0xJQ19Xcml0ZVJBTShwUHJvc2xpYyw4NTMscFRzdGluLT5kY0ZlZWRUZXN0LmFsdExjck9uVGhyZXNoKTsNCisgIH0NCisNCisgIC8qIENvbm5lY3QgaW50ZXJuYWwgdGVzdCBsb2FkIGZvciAybmQgZGMgZmVlZCBpL3YgcG9pbnQgKi8NCisgIHNldEludGVybmFsVGVzdExvYWQocFByb3NsaWMsMSk7DQorICBEZWxheShwUHJvVGltZXIsNTApOw0KKyAgLyogT2ZmaG9vayBtZWFzdXJlbWVudCAqLw0KKyAgUHJvU0xJQ19MaW5lTW9uaXRvcihwUHJvc2xpYywmbW9uaXRvcik7DQorDQorICBwVHN0aW4tPmRjRmVlZFRlc3QuZGNmZWVkVnRpcE9mZmhvb2sudmFsdWUgPSBtb25pdG9yLnZ0aXA7DQorICBwVHN0aW4tPmRjRmVlZFRlc3QuZGNmZWVkVnJpbmdPZmZob29rLnZhbHVlID0gbW9uaXRvci52cmluZzsNCisgIHBUc3Rpbi0+ZGNGZWVkVGVzdC5kY2ZlZWRWbG9vcE9mZmhvb2sudmFsdWUgPSBtb25pdG9yLnZ0cjsNCisgIHBUc3Rpbi0+ZGNGZWVkVGVzdC5kY2ZlZWRWYmF0T2ZmaG9vay52YWx1ZSA9IG1vbml0b3IudmJhdDsNCisgIHBUc3Rpbi0+ZGNGZWVkVGVzdC5kY2ZlZWRJdGlwT2ZmaG9vay52YWx1ZSA9IG1vbml0b3IuaXRpcDsNCisgIHBUc3Rpbi0+ZGNGZWVkVGVzdC5kY2ZlZWRJcmluZ09mZmhvb2sudmFsdWUgPSBtb25pdG9yLmlyaW5nOw0KKyAgcFRzdGluLT5kY0ZlZWRUZXN0LmRjZmVlZElsb29wT2ZmaG9vay52YWx1ZSA9IG1vbml0b3IuaXRyOw0KKyAgcFRzdGluLT5kY0ZlZWRUZXN0LmRjZmVlZElsb25nT2ZmaG9vay52YWx1ZSA9IG1vbml0b3IuaWxvbmc7DQorDQorICBwVHN0aW4tPmRjRmVlZFRlc3QudGVzdFJlc3VsdCA9IFJDX1RFU1RfUEFTU0VEOyAgLyogaW5pdGlhbGl6ZSAqLw0KKyAgLyogUmVhZCBMQ1IgKi8NCisgIGlmKFByb1NMSUNfUmVhZFJlZyhwUHJvc2xpYywzNCkgJiAweDA3KSAgLyogTENSUlRQICovDQorICB7DQorICAgIHBUc3Rpbi0+ZGNGZWVkVGVzdC5sY3JTdGF0dXMgPSAxOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICBwVHN0aW4tPmRjRmVlZFRlc3QubGNyU3RhdHVzID0gMDsNCisgIH0NCisNCisgIC8qIE9ubHkgZmFpbCBjaGVjayBpZiBlbmFibGVkICovDQorICBpZihwVHN0aW4tPmRjRmVlZFRlc3QuYXBwbHlMY3JUaHJlc2ggPT0gTENSX0NIRUNLX0VOQUJMRUQpDQorICB7DQorICAgIHBUc3Rpbi0+ZGNGZWVkVGVzdC50ZXN0UmVzdWx0IHw9ICFwVHN0aW4tPmRjRmVlZFRlc3QubGNyU3RhdHVzOw0KKyAgfQ0KKw0KKyAgLyogRGlzY29ubmVjdCBUZXN0IExvYWQgKi8NCisgIHNldEludGVybmFsVGVzdExvYWQocFByb3NsaWMsMCk7DQorDQorICAvKiBSZXN0b3JlIExDUiB0aHJlc2hvbGRzICovDQorICBpZihwVHN0aW4tPmRjRmVlZFRlc3QuYXBwbHlMY3JUaHJlc2ggPT0gTENSX0NIRUNLX0VOQUJMRUQpDQorICB7DQorICAgIFByb1NMSUNfV3JpdGVSQU0ocFByb3NsaWMsODUyLGxjcm9mZmhrX3NhdmUpOw0KKyAgICBQcm9TTElDX1dyaXRlUkFNKHBQcm9zbGljLDg1MyxsY3JvbmhrX3NhdmUpOw0KKyAgfQ0KKw0KKyAgLyogUmVzdG9yZSBlbmhhbmNlIHJlZyAqLw0KKyAgUHJvU0xJQ19Xcml0ZVJlZyhwUHJvc2xpYyw0NyxlbmhhbmNlUmVnU2F2ZSk7DQorDQorICAvKiBQcm9jZXNzIFJlc3VsdHMgKi8NCisgIHBUc3Rpbi0+ZGNGZWVkVGVzdC50ZXN0UmVzdWx0IHw9IGxvZ1Rlc3QocFByb3NsaWMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKHBUc3Rpbi0+ZGNGZWVkVGVzdC5kY2ZlZWRWdGlwT25ob29rKSwiRGNGZWVkIDogVnRpcCBPbmhvb2siKTsNCisgIHBUc3Rpbi0+ZGNGZWVkVGVzdC50ZXN0UmVzdWx0IHw9IGxvZ1Rlc3QocFByb3NsaWMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKHBUc3Rpbi0+ZGNGZWVkVGVzdC5kY2ZlZWRWcmluZ09uaG9vayksIkRjRmVlZCA6IFZyaW5nIE9uaG9vayIpOw0KKyAgcFRzdGluLT5kY0ZlZWRUZXN0LnRlc3RSZXN1bHQgfD0gbG9nVGVzdChwUHJvc2xpYywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYocFRzdGluLT5kY0ZlZWRUZXN0LmRjZmVlZFZsb29wT25ob29rKSwiRGNGZWVkIDogVmxvb3AgT25ob29rIik7DQorICBwVHN0aW4tPmRjRmVlZFRlc3QudGVzdFJlc3VsdCB8PSBsb2dUZXN0KHBQcm9zbGljLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihwVHN0aW4tPmRjRmVlZFRlc3QuZGNmZWVkVmJhdE9uaG9vayksIkRjRmVlZCA6IFZiYXQgT25ob29rIik7DQorICBwVHN0aW4tPmRjRmVlZFRlc3QudGVzdFJlc3VsdCB8PSBsb2dUZXN0KHBQcm9zbGljLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihwVHN0aW4tPmRjRmVlZFRlc3QuZGNmZWVkSXRpcE9uaG9vayksIkRjRmVlZCA6IEl0aXAgT25ob29rIik7DQorICBwVHN0aW4tPmRjRmVlZFRlc3QudGVzdFJlc3VsdCB8PSBsb2dUZXN0KHBQcm9zbGljLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihwVHN0aW4tPmRjRmVlZFRlc3QuZGNmZWVkSXJpbmdPbmhvb2spLCJEY0ZlZWQgOiBJcmluZyBPbmhvb2siKTsNCisgIHBUc3Rpbi0+ZGNGZWVkVGVzdC50ZXN0UmVzdWx0IHw9IGxvZ1Rlc3QocFByb3NsaWMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKHBUc3Rpbi0+ZGNGZWVkVGVzdC5kY2ZlZWRJbG9vcE9uaG9vayksIkRjRmVlZCA6IElsb29wIE9uaG9vayIpOw0KKyAgcFRzdGluLT5kY0ZlZWRUZXN0LnRlc3RSZXN1bHQgfD0gbG9nVGVzdChwUHJvc2xpYywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYocFRzdGluLT5kY0ZlZWRUZXN0LmRjZmVlZElsb25nT25ob29rKSwiRGNGZWVkIDogSWxvbmcgT25ob29rIik7DQorDQorICBwVHN0aW4tPmRjRmVlZFRlc3QudGVzdFJlc3VsdCB8PSBsb2dUZXN0KHBQcm9zbGljLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihwVHN0aW4tPmRjRmVlZFRlc3QuZGNmZWVkVnRpcE9mZmhvb2spLCJEY0ZlZWQgOiBWdGlwIE9mZmhvb2siKTsNCisgIHBUc3Rpbi0+ZGNGZWVkVGVzdC50ZXN0UmVzdWx0IHw9IGxvZ1Rlc3QocFByb3NsaWMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKHBUc3Rpbi0+ZGNGZWVkVGVzdC5kY2ZlZWRWcmluZ09mZmhvb2spLCJEY0ZlZWQgOiBWcmluZyBPZmZob29rIik7DQorICBwVHN0aW4tPmRjRmVlZFRlc3QudGVzdFJlc3VsdCB8PSBsb2dUZXN0KHBQcm9zbGljLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihwVHN0aW4tPmRjRmVlZFRlc3QuZGNmZWVkVmxvb3BPZmZob29rKSwiRGNGZWVkIDogVmxvb3AgT2ZmaG9vayIpOw0KKyAgcFRzdGluLT5kY0ZlZWRUZXN0LnRlc3RSZXN1bHQgfD0gbG9nVGVzdChwUHJvc2xpYywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYocFRzdGluLT5kY0ZlZWRUZXN0LmRjZmVlZFZiYXRPZmZob29rKSwiRGNGZWVkIDogVmJhdCBPZmZob29rIik7DQorICBwVHN0aW4tPmRjRmVlZFRlc3QudGVzdFJlc3VsdCB8PSBsb2dUZXN0KHBQcm9zbGljLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihwVHN0aW4tPmRjRmVlZFRlc3QuZGNmZWVkSXRpcE9mZmhvb2spLCJEY0ZlZWQgOiBJdGlwIE9mZmhvb2siKTsNCisgIHBUc3Rpbi0+ZGNGZWVkVGVzdC50ZXN0UmVzdWx0IHw9IGxvZ1Rlc3QocFByb3NsaWMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKHBUc3Rpbi0+ZGNGZWVkVGVzdC5kY2ZlZWRJcmluZ09mZmhvb2spLCJEY0ZlZWQgOiBJcmluZyBPZmZob29rIik7DQorICBwVHN0aW4tPmRjRmVlZFRlc3QudGVzdFJlc3VsdCB8PSBsb2dUZXN0KHBQcm9zbGljLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihwVHN0aW4tPmRjRmVlZFRlc3QuZGNmZWVkSWxvb3BPZmZob29rKSwiRGNGZWVkIDogSWxvb3AgT2ZmaG9vayIpOw0KKyAgcFRzdGluLT5kY0ZlZWRUZXN0LnRlc3RSZXN1bHQgfD0gbG9nVGVzdChwUHJvc2xpYywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYocFRzdGluLT5kY0ZlZWRUZXN0LmRjZmVlZElsb25nT2ZmaG9vayksIkRjRmVlZCA6IElsb25nIE9mZmhvb2siKTsNCisNCisgIGxvZ1N0YXR1cyhwUHJvc2xpYyxwVHN0aW4tPmRjRmVlZFRlc3QubGNyU3RhdHVzLCJEY0ZlZWQgOiBMQ1IiKTsNCisNCisNCisgIHBUc3Rpbi0+ZGNGZWVkVGVzdC50ZXN0RGF0YVZhbGlkID0gMTsgICAvKiBOZXcgdmFsaWQgcmVzdWx0cyAqLw0KKw0KKyAgLyogcmV0dXJuIGN1bXVsYXRpdmUgcGFzcy9mYWlsIHJlc3VsdCAqLw0KKw0KKyAgcmV0dXJuIChwVHN0aW4tPmRjRmVlZFRlc3QudGVzdFJlc3VsdCk7DQorfQ0KKw0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQoraW50IFByb1NMSUNfdGVzdEluUmluZ2luZyhwcm9zbGljQ2hhblR5cGUgKnBQcm9zbGljLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvc2xpY1Rlc3RJbk9ialR5cGUgKnBUc3RpbikNCit7DQorICB1SW50OCByaW5nY29uX3NhdmUsZW5oYW5jZV9zYXZlOw0KKyAgaW50MzIgdnRyW01BWF9SSU5HSU5HX1NBTVBMRVNdOw0KKyAgaW50IGk7DQorICB1SW50OCBsZjsNCisgIHVJbnQzMiBydHBlcl9zYXZlLCByaW5nZnJfc2F2ZSxyaW5nYW1wX3NhdmUscmluZ29mX3NhdmUscnRhY3RoX3NhdmUscnRkY3RoX3NhdmU7DQorICBQcm9TTElDX0RDZmVlZF9DZmcgZGNmZWVkQ2ZnWzFdOw0KKw0KKyAgLyogVmFsaWQgZGV2aWNlIGNoZWNrICovDQorICBpZihUU1RJTl9JTlZBTElEX1BBUlRfTlVNKQ0KKyAgew0KKyAgICByZXR1cm4gUkNfVU5TVVBQT1JURURfRkVBVFVSRTsNCisgIH0NCisNCisgIC8qIENoZWNrIGlmIGVuYWJsZWQgKi8NCisgIGlmKCAoIXBUc3Rpbi0+cmluZ2luZ1Rlc3QudGVzdEVuYWJsZSkNCisgICAgICB8fCAocFRzdGluLT5yaW5naW5nVGVzdC5udW1TYW1wbGVzID09IDApICkNCisgIHsNCisgICAgcmV0dXJuIFJDX1RFU1RfRElTQUJMRUQ7DQorICB9DQorDQorICAvKiBWZXJpZnkgbGluZSBub3QgaW4gdXNlICovDQorICBpZihQcm9TTElDX1JlYWRSZWcocFByb3NsaWMsMzQpICYgMHgwMikgIC8qIExDUiAqLw0KKyAgew0KKyAgICBERUJVR19QUklOVChwUHJvc2xpYywgIlxuUHJvU0xJQyA6IFRlc3RJbiA6IFJpbmdpbmcgOiBMaW5lIGluIFVzZVxuIik7DQorDQorICAgIGlmKHBUc3Rpbi0+cmluZ2luZ1Rlc3QuYWJvcnRJZkxpbmVJblVzZSkNCisgICAgew0KKyAgICAgIHJldHVybiBSQ19MSU5FX0lOX1VTRTsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgLyogSW52YWxpZGF0ZSBsYXN0IHRlc3QgcmVzdWx0cyAqLw0KKyAgcFRzdGluLT5yaW5naW5nVGVzdC50ZXN0RGF0YVZhbGlkID0gVFNUSU5fUkVTVUxUU19JTlZBTElEOw0KKw0KKyAgLyogQ2hlY2sgc2FtcGxlIHNpemUvcmF0ZSAqLw0KKyAgaWYocFRzdGluLT5yaW5naW5nVGVzdC5udW1TYW1wbGVzID4gTUFYX1JJTkdJTkdfU0FNUExFUykNCisgIHsNCisgICAgcFRzdGluLT5yaW5naW5nVGVzdC5udW1TYW1wbGVzID0gTUFYX1JJTkdJTkdfU0FNUExFUzsNCisgIH0NCisNCisgIGlmKHBUc3Rpbi0+cmluZ2luZ1Rlc3Quc2FtcGxlSW50ZXJ2YWwgPiBNQVhfUklOR0lOR19TQU1QTEVfSU5URVJWQUwpDQorICB7DQorICAgIHBUc3Rpbi0+cmluZ2luZ1Rlc3Quc2FtcGxlSW50ZXJ2YWwgPSBNQVhfUklOR0lOR19TQU1QTEVfSU5URVJWQUw7DQorICB9DQorDQorICBpZihwVHN0aW4tPnJpbmdpbmdUZXN0LnNhbXBsZUludGVydmFsIDwgTUlOX1JJTkdJTkdfU0FNUExFX0lOVEVSVkFMKQ0KKyAgew0KKyAgICBwVHN0aW4tPnJpbmdpbmdUZXN0LnNhbXBsZUludGVydmFsID0gTUlOX1JJTkdJTkdfU0FNUExFX0lOVEVSVkFMOw0KKyAgfQ0KKw0KKyAgLyogRGlzYWJsZSBQb3dlcnNhdmUgKi8NCisgIGVuaGFuY2Vfc2F2ZSA9IFByb1NMSUNfUmVhZFJlZyhwUHJvc2xpYyw0Nyk7DQorICBQcm9TTElDX1dyaXRlUmVnKHBQcm9zbGljLDQ3LDB4MjApOw0KKyAgRGVsYXkocFByb1RpbWVyLDEwKTsNCisNCisgIC8qIERpc2FibGUgcmluZyBjYWRlbmNpbmcgKi8NCisgIHJpbmdjb25fc2F2ZSA9IFByb1NMSUNfUmVhZFJlZyhwUHJvc2xpYywzOCk7IC8qIFJJTkdDT04gKi8NCisgIFByb1NMSUNfV3JpdGVSZWcocFByb3NsaWMsMzgscmluZ2Nvbl9zYXZlJjB4RTcpOyAvKiBSSU5HQ09OICovDQorDQorICAvKiBNdXN0IGVudGVyIHJpbmdpbmcgdGhyb3VnaCBhY3RpdmUgc3RhdGUgKi8NCisgIGxmID0gUHJvU0xJQ19SZWFkUmVnKHBQcm9zbGljLDMwKTsgIC8qIExJTkVGRUVEICovDQorICBQcm9TTElDX1NldExpbmVmZWVkU3RhdHVzKHBQcm9zbGljLExGX0ZXRF9BQ1RJVkUpOw0KKyAgRGVsYXkocFByb1RpbWVyLDIwKTsgLyogc2V0dGxlICovDQorDQorICAvKiBTdGFydCByaW5naW5nICovDQorICBQcm9TTElDX1NldExpbmVmZWVkU3RhdHVzKHBQcm9zbGljLExGX1JJTkdJTkcpOw0KKyAgRGVsYXkocFByb1RpbWVyLDUwMCk7DQorDQorICAvKiBWZXJpZnkgUmluZyBTdGFydGVkICovDQorICBpZihQcm9TTElDX1JlYWRSZWcocFByb3NsaWMsMzApICE9IDB4NDQpDQorICB7DQorICAgIFByb1NMSUNfU2V0TGluZWZlZWRTdGF0dXMocFByb3NsaWMsTEZfRldEX0FDVElWRSk7DQorICAgIFByb1NMSUNfU2V0TGluZWZlZWRTdGF0dXMocFByb3NsaWMsTEZfT1BFTik7DQorICAgIFByb1NMSUNfV3JpdGVSZWcocFByb3NsaWMsMzgscmluZ2Nvbl9zYXZlKTsNCisgICAgUHJvU0xJQ19Xcml0ZVJlZyhwUHJvc2xpYyw0NyxlbmhhbmNlX3NhdmUpOw0KKyAgICBQcm9TTElDX1NldExpbmVmZWVkU3RhdHVzKHBQcm9zbGljLGxmKTsNCisgICAgDQorICAgIERFQlVHX1BSSU5UKHBQcm9zbGljLCAiUHJvU0xJQyA6IFRlc3RJbiA6IFJpbmdpbmcgOiBSaW5nIFN0YXJ0IEZhaWxcbiIpOw0KKw0KKyAgICBwVHN0aW4tPnJpbmdpbmdUZXN0LnRlc3RSZXN1bHQgPSBSQ19URVNUX0ZBSUxFRDsNCisgICAgcmV0dXJuIFJDX1JJTkdfU1RBUlRfRkFJTDsNCisgIH0NCisNCisgIC8qIENhcHR1cmUgc2FtcGxlcyAqLw0KKyAgcFRzdGluLT5yaW5naW5nVGVzdC5yaW5naW5nVmRjLnZhbHVlID0gMDsNCisgIGZvcihpPTA7IGk8cFRzdGluLT5yaW5naW5nVGVzdC5udW1TYW1wbGVzOyBpKyspDQorICB7DQorICAgIHZ0cltpXSA9IFByb1NMSUNfUmVhZE1BRENTY2FsZWQocFByb3NsaWMsNjksMCk7IC8qIFZESUZGX0ZJTFQgKi8NCisgICAgcFRzdGluLT5yaW5naW5nVGVzdC5yaW5naW5nVmRjLnZhbHVlICs9IHZ0cltpXTsNCisNCisgICAgREVCVUdfUFJJTlQocFByb3NsaWMsICJQcm9TTElDIDogVGVzdEluIDogUmluZ2luZyA6IFZ0clslZF0gPSAlZFxuIixpLCAoaW50KSh2dHJbaV0pKTsNCisNCisgICAgRGVsYXkocFByb1RpbWVyLHBUc3Rpbi0+cmluZ2luZ1Rlc3Quc2FtcGxlSW50ZXJ2YWwpOw0KKyAgfQ0KKw0KKyAgLyogUmVzdG9yZSBsaW5lZmVlZCAqLw0KKyAgUHJvU0xJQ19TZXRMaW5lZmVlZFN0YXR1cyhwUHJvc2xpYyxMRl9GV0RfQUNUSVZFKTsNCisgIERlbGF5KHBQcm9UaW1lciwyMCk7DQorDQorICAvKiBQcm9jZXNzIFJlc3VsdHMgKi8NCisgIHBUc3Rpbi0+cmluZ2luZ1Rlc3QucmluZ2luZ1ZkYy52YWx1ZSAvPSBwVHN0aW4tPnJpbmdpbmdUZXN0Lm51bVNhbXBsZXM7DQorICBmb3IoaT0wOyBpPHBUc3Rpbi0+cmluZ2luZ1Rlc3QubnVtU2FtcGxlczsgaSsrKQ0KKyAgew0KKyAgICB2dHJbaV0gLT0gcFRzdGluLT5yaW5naW5nVGVzdC5yaW5naW5nVmRjLnZhbHVlOw0KKyAgICBwVHN0aW4tPnJpbmdpbmdUZXN0LnJpbmdpbmdWYWMudmFsdWUgKz0gKCh2dHJbaV0vMTAwTCkgKiAodnRyW2ldLzEwMEwpKTsNCisgIH0NCisNCisNCisgIHBUc3Rpbi0+cmluZ2luZ1Rlc3QucmluZ2luZ1ZhYy52YWx1ZSAvPSBwVHN0aW4tPnJpbmdpbmdUZXN0Lm51bVNhbXBsZXM7DQorICBwVHN0aW4tPnJpbmdpbmdUZXN0LnJpbmdpbmdWYWMudmFsdWUgPSBJc3FydDMyKA0KKyAgICAgIHBUc3Rpbi0+cmluZ2luZ1Rlc3QucmluZ2luZ1ZhYy52YWx1ZSk7DQorICBwVHN0aW4tPnJpbmdpbmdUZXN0LnJpbmdpbmdWYWMudmFsdWUgKj0gMTAwTDsNCisNCisgIHBUc3Rpbi0+cmluZ2luZ1Rlc3QudGVzdFJlc3VsdCA9IFJDX1RFU1RfUEFTU0VEOw0KKyAgcFRzdGluLT5yaW5naW5nVGVzdC50ZXN0UmVzdWx0IHw9IGxvZ1Rlc3QocFByb3NsaWMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihwVHN0aW4tPnJpbmdpbmdUZXN0LnJpbmdpbmdWZGMpLCJSaW5naW5nIDogVkRDIik7DQorICBwVHN0aW4tPnJpbmdpbmdUZXN0LnRlc3RSZXN1bHQgfD0gbG9nVGVzdChwUHJvc2xpYywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKHBUc3Rpbi0+cmluZ2luZ1Rlc3QucmluZ2luZ1ZhYyksIlJpbmdpbmcgOiBWQUMiKTsNCisgIC8qDQorICAqKiBPcHRpb25hbCBSaW5ndHJpcCBUZXN0DQorICAqLw0KKw0KKyAgaWYocFRzdGluLT5yaW5naW5nVGVzdC5yaW5ndHJpcFRlc3RFbmFibGUgPT0gUlRQX0NIRUNLX0VOQUJMRUQpDQorICB7DQorICAgIC8qIFNldHVwIGxvdyB2b2x0YWdlIGxpbmVmZWVkIHNvIGxvdyBsZXZlbCByaW5naW5nIG1heSBiZSB1c2VkICovDQorICAgIFByb1NMSUNfU2V0TGluZWZlZWRTdGF0dXMocFByb3NsaWMsTEZfT1BFTik7DQorICAgIHN0b3JlRENGZWVkUHJlc2V0KHBQcm9zbGljLCYoZGNmZWVkQ2ZnWzBdKSwwKTsNCisgICAgUHJvU0xJQ19EQ0ZlZWRTZXR1cENmZyhwUHJvc2xpYywmKHJpbmd0cmlwVGVzdERDRmVlZFByZXNldFswXSksMCk7DQorDQorICAgIC8qIE9wdGlvbmFsIFJpbmd0cmlwIFRlc3QgKG1vZGlmaWVkIHJpbmdlciBzZXR0aW5ncyB0byB1c2UgdGVzdCBsb2FkIHRvIHRyaXApICovDQorICAgIHJ0cGVyX3NhdmUgPSBQcm9TTElDX1JlYWRSQU0ocFByb3NsaWMsNzU1KTsNCisgICAgcmluZ2ZyX3NhdmUgPSBQcm9TTElDX1JlYWRSQU0ocFByb3NsaWMsODQ0KTsNCisgICAgcmluZ2FtcF9zYXZlID0gUHJvU0xJQ19SZWFkUkFNKHBQcm9zbGljLDg0NSk7DQorICAgIHJpbmdvZl9zYXZlID0gUHJvU0xJQ19SZWFkUkFNKHBQcm9zbGljLDg0Myk7DQorICAgIHJ0YWN0aF9zYXZlID0gUHJvU0xJQ19SZWFkUkFNKHBQcm9zbGljLDg0OCk7DQorICAgIHJ0ZGN0aF9zYXZlID0gUHJvU0xJQ19SZWFkUkFNKHBQcm9zbGljLDg0Nyk7DQorDQorICAgIFByb1NMSUNfV3JpdGVSQU0ocFByb3NsaWMsNzU1LDB4NTAwMDBMKTsgIC8qIFJUUEVSICovDQorICAgIFByb1NMSUNfV3JpdGVSQU0ocFByb3NsaWMsODQ0LDB4N0VGRTAwMEwpOy8qIFJJTkdGUiAqLw0KKyAgICBQcm9TTElDX1dyaXRlUkFNKHBQcm9zbGljLDg0NSwweEQ2MzA3TCk7ICAvKiBSSU5HQU1QICovDQorICAgIFByb1NMSUNfV3JpdGVSQU0ocFByb3NsaWMsODQzLDB4MEwpOyAgICAgIC8qIFJJTkdPRiAqLw0KKyAgICBQcm9TTElDX1dyaXRlUkFNKHBQcm9zbGljLDg0OCwweDc4MjdGTCk7ICAvKiBSVEFDVEggKi8NCisgICAgUHJvU0xJQ19Xcml0ZVJBTShwUHJvc2xpYyw4NDcsMHhGRkZGRkZGTCk7LyogUlREQ1RIICovDQorDQorICAgIC8qIFN0YXJ0IHJpbmdpbmcgZnJvbSBhY3RpdmUgc3RhdGUgKi8NCisgICAgUHJvU0xJQ19TZXRMaW5lZmVlZFN0YXR1cyhwUHJvc2xpYyxMRl9GV0RfQUNUSVZFKTsNCisgICAgRGVsYXkocFByb1RpbWVyLDIwKTsNCisgICAgUHJvU0xJQ19TZXRMaW5lZmVlZFN0YXR1cyhwUHJvc2xpYyxMRl9SSU5HSU5HKTsNCisgICAgRGVsYXkocFByb1RpbWVyLDIwMCk7DQorDQorICAgIC8qIFZlcmlmeSBSaW5nIFN0YXJ0ZWQgKi8NCisgICAgaWYoUHJvU0xJQ19SZWFkUmVnKHBQcm9zbGljLDMwKSAhPSAweDQ0KQ0KKyAgICB7DQorICAgICAgUHJvU0xJQ19TZXRMaW5lZmVlZFN0YXR1cyhwUHJvc2xpYyxMRl9GV0RfQUNUSVZFKTsNCisgICAgICBQcm9TTElDX1NldExpbmVmZWVkU3RhdHVzKHBQcm9zbGljLExGX09QRU4pOw0KKyAgICAgIFByb1NMSUNfV3JpdGVSZWcocFByb3NsaWMsMzgscmluZ2Nvbl9zYXZlKTsNCisgICAgICBQcm9TTElDX1dyaXRlUmVnKHBQcm9zbGljLDQ3LGVuaGFuY2Vfc2F2ZSk7DQorICAgICAgDQorICAgICAgLyogUmVzdG9yZSBEQyBGZWVkICovDQorICAgICAgUHJvU0xJQ19EQ0ZlZWRTZXR1cENmZyhwUHJvc2xpYywmKGRjZmVlZENmZ1swXSksMCk7DQorDQorICAgICAgLyogUmVzdG9yZSBSaW5nIFNldHRpbmdzICovDQorICAgICAgUHJvU0xJQ19Xcml0ZVJBTShwUHJvc2xpYyw3NTUscnRwZXJfc2F2ZSk7IC8qIFJUUEVSICovDQorICAgICAgUHJvU0xJQ19Xcml0ZVJBTShwUHJvc2xpYyw4NDQscmluZ2ZyX3NhdmUpOyAvKlJJTkdGUiAqLw0KKyAgICAgIFByb1NMSUNfV3JpdGVSQU0ocFByb3NsaWMsODQ1LHJpbmdhbXBfc2F2ZSk7IC8qIFJJTkdBTVAgKi8NCisgICAgICBQcm9TTElDX1dyaXRlUkFNKHBQcm9zbGljLDg0MyxyaW5nb2Zfc2F2ZSk7IC8qIFJJTkdPRiAqLw0KKyAgICAgIFByb1NMSUNfV3JpdGVSQU0ocFByb3NsaWMsODQ4LHJ0YWN0aF9zYXZlKTsgLyogUlRBQ1RIICovDQorICAgICAgUHJvU0xJQ19Xcml0ZVJBTShwUHJvc2xpYyw4NDcscnRkY3RoX3NhdmUpOyAvKiBSVERDVEggKi8NCisgICAgICANCisgICAgICBQcm9TTElDX1NldExpbmVmZWVkU3RhdHVzKHBQcm9zbGljLGxmKTsNCisNCisgICAgICBERUJVR19QUklOVChwUHJvc2xpYywgIlByb1NMSUMgOiBUZXN0SW4gOiBSaW5ndHJpcCA6IFJpbmcgU3RhcnQgRmFpbFxuIik7DQorDQorICAgICAgcFRzdGluLT5yaW5naW5nVGVzdC50ZXN0UmVzdWx0PVJDX1RFU1RfRkFJTEVEOw0KKyAgICAgIHJldHVybiBSQ19SSU5HX1NUQVJUX0ZBSUw7DQorICAgIH0NCisNCisgICAgLyogQ29ubmVjdCBUZXN0IExvYWQgdG8gY2F1c2UgcmluZ3RyaXAgKi8NCisgICAgc2V0SW50ZXJuYWxUZXN0TG9hZChwUHJvc2xpYywxKTsNCisgICAgRGVsYXkocFByb1RpbWVyLDIwMCk7DQorDQorICAgIC8qIENoZWNrIGZvciBSVFAgKi8NCisgICAgaWYoUHJvU0xJQ19SZWFkUmVnKHBQcm9zbGljLDM0KSAmIDB4MDEpICAvKiBMQ1JSVFAgKi8NCisgICAgew0KKyAgICAgIHBUc3Rpbi0+cmluZ2luZ1Rlc3QucnRwU3RhdHVzID0gMTsNCisgICAgICBwVHN0aW4tPnJpbmdpbmdUZXN0LnRlc3RSZXN1bHQgfD0gUkNfVEVTVF9QQVNTRUQ7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgcFRzdGluLT5yaW5naW5nVGVzdC5ydHBTdGF0dXMgPSAwOw0KKyAgICAgIHBUc3Rpbi0+cmluZ2luZ1Rlc3QudGVzdFJlc3VsdCB8PSBSQ19URVNUX0ZBSUxFRDsNCisgICAgICBQcm9TTElDX1NldExpbmVmZWVkU3RhdHVzKHBQcm9zbGljLExGX0ZXRF9BQ1RJVkUpOw0KKyAgICB9DQorICAgIHNldEludGVybmFsVGVzdExvYWQocFByb3NsaWMsMCk7DQorICAgIERlbGF5KHBQcm9UaW1lciwyMCk7DQorDQorICAgIGxvZ1N0YXR1cyhwUHJvc2xpYyxwVHN0aW4tPnJpbmdpbmdUZXN0LnJ0cFN0YXR1cywiUmluZ2luZyA6IFJUUCIpOw0KKw0KKyAgICAvKiBSZXN0b3JlIERDIEZlZWQgKi8NCisgICAgUHJvU0xJQ19EQ0ZlZWRTZXR1cENmZyhwUHJvc2xpYywmKGRjZmVlZENmZ1swXSksMCk7DQorDQorICAgIC8qIFJlc3RvcmUgUmluZyBTZXR0aW5ncyAqLw0KKyAgICBQcm9TTElDX1dyaXRlUkFNKHBQcm9zbGljLDc1NSxydHBlcl9zYXZlKTsvKiBSVFBFUiAqLw0KKyAgICBQcm9TTElDX1dyaXRlUkFNKHBQcm9zbGljLDg0NCxyaW5nZnJfc2F2ZSk7LypSSU5HRlIgKi8NCisgICAgUHJvU0xJQ19Xcml0ZVJBTShwUHJvc2xpYyw4NDUscmluZ2FtcF9zYXZlKTsgLyogUklOR0FNUCAqLw0KKyAgICBQcm9TTElDX1dyaXRlUkFNKHBQcm9zbGljLDg0MyxyaW5nb2Zfc2F2ZSk7IC8qIFJJTkdPRiAqLw0KKyAgICBQcm9TTElDX1dyaXRlUkFNKHBQcm9zbGljLDg0OCxydGFjdGhfc2F2ZSk7LyogUlRBQ1RIICovDQorICAgIFByb1NMSUNfV3JpdGVSQU0ocFByb3NsaWMsODQ3LHJ0ZGN0aF9zYXZlKTsvKiBSVERDVEggKi8NCisNCisgIH0vKiBlbmQgb2YgcmluZ3RyaXAgdGVzdCAgKi8NCisNCisgIC8qIFJlc3RvcmUgTGluZWZlZWQgKi8NCisgIFByb1NMSUNfU2V0TGluZWZlZWRTdGF0dXMocFByb3NsaWMsbGYpOw0KKw0KKyAgLyogUmVzdG9yZSBSSU5HQ09OIGFuZCBFTkhBTkNFICovDQorICBQcm9TTElDX1dyaXRlUmVnKHBQcm9zbGljLDM4LHJpbmdjb25fc2F2ZSk7DQorICBQcm9TTElDX1dyaXRlUmVnKHBQcm9zbGljLDQ3LGVuaGFuY2Vfc2F2ZSk7DQorDQorICBwVHN0aW4tPnJpbmdpbmdUZXN0LnRlc3REYXRhVmFsaWQgPSBUU1RJTl9SRVNVTFRTX1ZBTElEOw0KKw0KKyAgcmV0dXJuIChwVHN0aW4tPnJpbmdpbmdUZXN0LnRlc3RSZXN1bHQpOw0KK30NCisNCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KK2ludCBQcm9TTElDX3Rlc3RJbkJhdHRlcnkocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYywNCisgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3NsaWNUZXN0SW5PYmpUeXBlICpwVHN0aW4pDQorew0KKyAgcHJvc2xpY01vbml0b3JUeXBlIG1vbml0b3I7DQorDQorICAvKiBWYWxpZCBkZXZpY2UgY2hlY2sgKi8NCisgIGlmKFRTVElOX0lOVkFMSURfUEFSVF9OVU0pDQorICB7DQorICAgIHJldHVybiBSQ19VTlNVUFBPUlRFRF9GRUFUVVJFOw0KKyAgfQ0KKw0KKyAgLyogQ2hlY2sgaWYgZW5hYmxlZCAqLw0KKyAgaWYoIXBUc3Rpbi0+YmF0dGVyeVRlc3QudGVzdEVuYWJsZSkNCisgIHsNCisgICAgcmV0dXJuIFJDX1RFU1RfRElTQUJMRUQ7DQorICB9DQorDQorICAvKiBJbnZhbGlkYXRlIGxhc3QgdGVzdCByZXN1bHRzICovDQorICBwVHN0aW4tPmJhdHRlcnlUZXN0LnRlc3REYXRhVmFsaWQgPSBUU1RJTl9SRVNVTFRTX0lOVkFMSUQ7DQorDQorICAvKiBNZWFzdXJlIEJhdHRlcnkgKi8NCisgIFByb1NMSUNfTGluZU1vbml0b3IocFByb3NsaWMsJm1vbml0b3IpOw0KKw0KKyAgcFRzdGluLT5iYXR0ZXJ5VGVzdC52YmF0LnZhbHVlID0gbW9uaXRvci52YmF0Ow0KKw0KKyAgcFRzdGluLT5iYXR0ZXJ5VGVzdC50ZXN0UmVzdWx0ID0gbG9nVGVzdChwUHJvc2xpYywmKHBUc3Rpbi0+YmF0dGVyeVRlc3QudmJhdCksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQmF0dGVyeSA6IFZCQVQiKTsNCisNCisgIHBUc3Rpbi0+YmF0dGVyeVRlc3QudGVzdERhdGFWYWxpZCA9DQorICAgIFRTVElOX1JFU1VMVFNfVkFMSUQ7ICAgLyogTmV3IHZhbGlkIHJlc3VsdHMgKi8NCisNCisgIHJldHVybiAocFRzdGluLT5iYXR0ZXJ5VGVzdC50ZXN0UmVzdWx0KTsNCit9DQorDQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCitpbnQgUHJvU0xJQ190ZXN0SW5BdWRpbyhwcm9zbGljQ2hhblR5cGUgKnBQcm9zbGljLCBwcm9zbGljVGVzdEluT2JqVHlwZSAqcFRzdGluKQ0KK3sNCisgIHVJbnQ4IGVuaGFuY2VSZWdTYXZlOw0KKyAgdUludDggbGY7DQorICBpbnQzMiBkYXRhOw0KKyAgaW50MzIgZ2Fpbk1lYXMxLGdhaW5NZWFzMjsNCisgIGludDMyIGdhaW5NZWFzMyA9IDA7DQorICBQcm9TTElDX2F1ZGlvR2Fpbl9DZmcgZ2FpbkNmZzsNCisgIGludDMyIFBpbiA9IC0zOTgwOyAgIC8qIC0xMGRCbSArIDYuMDJkQiAoc2luY2UgT0hUIHcvIG5vIEFDIGxvYWQpICovDQorDQorICAvKiBWYWxpZCBkZXZpY2UgY2hlY2sgKi8NCisgIGlmKFRTVElOX0lOVkFMSURfUEFSVF9OVU0pDQorICB7DQorICAgIHJldHVybiBSQ19VTlNVUFBPUlRFRF9GRUFUVVJFOw0KKyAgfQ0KKw0KKyAgLyogQ2hlY2sgaWYgZW5hYmxlZCAqLw0KKyAgaWYoIXBUc3Rpbi0+YXVkaW9UZXN0LnRlc3RFbmFibGUpDQorICB7DQorICAgIHJldHVybiBSQ19URVNUX0RJU0FCTEVEOw0KKyAgfQ0KKw0KKyAgLyogSW52YWxpZGF0ZSBsYXN0IHRlc3QgcmVzdWx0cyAqLw0KKyAgcFRzdGluLT5hdWRpb1Rlc3QudGVzdERhdGFWYWxpZCA9IFRTVElOX1JFU1VMVFNfSU5WQUxJRDsNCisNCisgIC8qIFZlcmlmeSBsaW5lIG5vdCBpbiB1c2UgKi8NCisgIGlmKFByb1NMSUNfUmVhZFJlZyhwUHJvc2xpYywzNCkgJiAweDAyKSAgLyogTENSICovDQorICB7DQorICAgIERFQlVHX1BSSU5UKHBQcm9zbGljLCAiXG5Qcm9TTElDIDogVGVzdEluIDogQXVkaW8gOiBMaW5lIGluIFVzZVxuIik7DQorDQorICAgIGlmKHBUc3Rpbi0+YXVkaW9UZXN0LmFib3J0SWZMaW5lSW5Vc2UgPT0gQUJPUlRfTElVX0VOQUJMRUQpDQorICAgIHsNCisgICAgICByZXR1cm4gUkNfTElORV9JTl9VU0U7DQorICAgIH0NCisgIH0NCisNCisgIC8qIERpc2FibGUgUG93ZXJzYXZlICovDQorICBlbmhhbmNlUmVnU2F2ZSA9IFByb1NMSUNfUmVhZFJlZyhwUHJvc2xpYyw0Nyk7DQorICBQcm9TTElDX1dyaXRlUmVnKHBQcm9zbGljLDQ3LDB4MjApOw0KKyAgRGVsYXkocFByb1RpbWVyLDEwKTsNCisNCisNCisgIC8qIFNldHVwIEF1ZGlvIEZpbHRlciwgZW5hYmxlIGF1ZGlvIGluIE9IVCAqLw0KKyAgbGYgPSBQcm9TTElDX1JlYWRSZWcocFByb3NsaWMsMzApOyAgLyogTElORUZFRUQgKi8NCisgIFByb1NMSUNfU2V0TGluZWZlZWRTdGF0dXMocFByb3NsaWMsTEZfRldEX0FDVElWRSk7DQorICBEZWxheShwUHJvVGltZXIsMjApOyAvKiBzZXR0bGUgKi8NCisgIHNldHVwMWtIekJhbmRwYXNzKHBQcm9zbGljKTsNCisgIFByb1NMSUNfU2V0TGluZWZlZWRTdGF0dXMocFByb3NsaWMsTEZfRldEX09IVCk7DQorDQorICAvKiBTZXR1cCBvc2MxIGZvciAxa0h6IC0xMGRCbSB0b25lLCBkaXNhYmxlIGh5YnJpZCwgZW5hYmxlIGZpbHRlcnMgKi8NCisgIFByb1NMSUNfV3JpdGVSQU0ocFByb3NsaWMsMjYsMHg1QTgwMDAwTCk7IC8qIE9TQzFGUkVRICovDQorICBQcm9TTElDX1dyaXRlUkFNKHBQcm9zbGljLDI3LDB4NUQ4MDAwTCk7ICAvKiBPU0MxQU1QICovDQorICBQcm9TTElDX1dyaXRlUmVnKHBQcm9zbGljLDQ4LDB4MDIpOyAgICAgICAvKiBPTU9ERSAqLw0KKyAgUHJvU0xJQ19Xcml0ZVJlZyhwUHJvc2xpYyw0OSwweDAxKTsgICAgICAgLyogT0NPTiAqLw0KKyAgUHJvU0xJQ19Xcml0ZVJlZyhwUHJvc2xpYyw0NCwweDEwKTsgICAgICAgLyogRElHQ09OICovDQorICBQcm9TTElDX1dyaXRlUmVnKHBQcm9zbGljLDcxLDB4MTApOyAgICAgICAvKiBESUFHMSAqLw0KKw0KKyAgLyogU2V0dGxlICovDQorICBEZWxheShwUHJvVGltZXIsODAwKTsNCisNCisgIC8qIFJlYWQgZmlyc3QgZ2FpbiBtZWFzdXJlbWVudCAoR3R4ICsgR3J4ICsgR3phZGopICovDQorICBnYWluTWVhczEgPSByZWFkQXVkaW9EaWFnTGV2ZWwocFByb3NsaWMscFRzdGluLT5hdWRpb1Rlc3QuemVyb2RCbV9tVnBrKTsNCisNCisgIC8qIEJ5cGFzcyBUWEFDSFBGIGFuZCBzZXQgVFhBQ0VRIHRvIHVuaXR5ICovDQorICBnYWluQ2ZnLmFjZ2FpbiA9IFByb1NMSUNfUmVhZFJBTShwUHJvc2xpYyw1NDQpOyAgLyogVFhBQ0dBSU4gKi8NCisgIGdhaW5DZmcuYWNlcV9jMCA9IFByb1NMSUNfUmVhZFJBTShwUHJvc2xpYyw1NDApOyAvKiBUWEFDRVFfQzAgKi8NCisgIGdhaW5DZmcuYWNlcV9jMSA9IFByb1NMSUNfUmVhZFJBTShwUHJvc2xpYyw1NDEpOyAvKiBUWEFDRVFfQzEgKi8NCisgIGdhaW5DZmcuYWNlcV9jMiA9IFByb1NMSUNfUmVhZFJBTShwUHJvc2xpYyw1NDIpOyAvKiBUWEFDRVFfQzIgKi8NCisgIGdhaW5DZmcuYWNlcV9jMyA9IFByb1NMSUNfUmVhZFJBTShwUHJvc2xpYyw1NDMpOyAvKiBUWEFDRVFfQzMgKi8NCisgIFByb1NMSUNfV3JpdGVSQU0ocFByb3NsaWMsNTQ0LDB4ODAwMDAwMEwpOw0KKyAgUHJvU0xJQ19Xcml0ZVJBTShwUHJvc2xpYyw1NDMsMHgwTCk7DQorICBQcm9TTElDX1dyaXRlUkFNKHBQcm9zbGljLDU0MiwweDBMKTsNCisgIFByb1NMSUNfV3JpdGVSQU0ocFByb3NsaWMsNTQxLDB4MEwpOw0KKyAgUHJvU0xJQ19Xcml0ZVJBTShwUHJvc2xpYyw1NDAsMHg4MDAwMDAwTCk7DQorICBQcm9TTElDX1dyaXRlUmVnKHBQcm9zbGljLDQ0LDB4MTgpOw0KKw0KKyAgLyogU2V0dGxlICovDQorICBEZWxheShwUHJvVGltZXIsODAwKTsNCisNCisgIC8qIFJlYWQgc2Vjb25kIGxldmVsIG1lYXN1cmVtZW50IChSWCBsZXZlbCBvbmx5KSAqLw0KKyAgZ2Fpbk1lYXMyID0gcmVhZEF1ZGlvRGlhZ0xldmVsKHBQcm9zbGljLHBUc3Rpbi0+YXVkaW9UZXN0Lnplcm9kQm1fbVZwayk7DQorDQorICAvKiBBZGp1c3QgdHhnYWluIGlmIFRYQUNHQUlOIHdhc24ndCB1bml0eSBkdXJpbmcgZ2Fpbk1lYXMxICovDQorICBpZihnYWluQ2ZnLmFjZ2FpbiAhPSAweDgwMDAwMDBMKQ0KKyAgew0KKyAgICBkYXRhID0gKGdhaW5DZmcuYWNnYWluKjEwKS8xMzQyMTc7DQorICAgIGdhaW5NZWFzMyA9IGRCTG9va3VwKGRhdGEpOw0KKyAgfQ0KKw0KKyAgLyogQ29tcHV0YXRpb25zICovDQorICBwVHN0aW4tPmF1ZGlvVGVzdC5yeEdhaW4udmFsdWUgPSBnYWluTWVhczIgLSBQaW47DQorICBwVHN0aW4tPmF1ZGlvVGVzdC50eEdhaW4udmFsdWUgPSBnYWluTWVhczEgLSBnYWluTWVhczIgKyBnYWluTWVhczM7DQorDQorI2lmZGVmIEVOQUJMRV9ERUJVRw0KKyAgaWYoIERFQlVHX0VOQUJMRUQocFByb3NsaWMpICkNCisgIHsNCisgICAgTE9HUFJJTlQoIlByb1NMSUMgOiBUZXN0SW4gOiBBdWRpbyA6IGdhaW5NZWFzMSA9ICVkXG4iLCAoaW50KWdhaW5NZWFzMSk7DQorICAgIExPR1BSSU5UKCJQcm9TTElDIDogVGVzdEluIDogQXVkaW8gOiBnYWluTWVhczIgPSAlZFxuIiwgKGludClnYWluTWVhczIpOw0KKyAgICBMT0dQUklOVCgiUHJvU0xJQyA6IFRlc3RJbiA6IEF1ZGlvIDogZ2Fpbk1lYXMzID0gJWRcbiIsIChpbnQpZ2Fpbk1lYXMzKTsNCisgIH0NCisjZW5kaWYNCisgIHBUc3Rpbi0+YXVkaW9UZXN0LnRlc3RSZXN1bHQgPSBSQ19URVNUX1BBU1NFRDsNCisgIHBUc3Rpbi0+YXVkaW9UZXN0LnRlc3RSZXN1bHQgfD0gbG9nVGVzdChwUHJvc2xpYywmKHBUc3Rpbi0+YXVkaW9UZXN0LnJ4R2FpbiksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJYIFBhdGggR2FpbiIpOw0KKyAgcFRzdGluLT5hdWRpb1Rlc3QudGVzdFJlc3VsdCB8PSBsb2dUZXN0KHBQcm9zbGljLCYocFRzdGluLT5hdWRpb1Rlc3QudHhHYWluKSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVFggUGF0aCBHYWluIik7DQorDQorDQorDQorICAvKg0KKyAgKiogUmVzdG9yZQ0KKyAgKi8NCisNCisgIC8qIE5lZWQgdG8gc3RvcmUvcmVzdG9yZSBhbGwgbW9kaWZpZWQgcmVnL1JBTSAqLw0KKyAgUHJvU0xJQ19Xcml0ZVJBTShwUHJvc2xpYyw1NDQsZ2FpbkNmZy5hY2dhaW4pOw0KKyAgUHJvU0xJQ19Xcml0ZVJBTShwUHJvc2xpYyw1NDAsZ2FpbkNmZy5hY2VxX2MwKTsNCisgIFByb1NMSUNfV3JpdGVSQU0ocFByb3NsaWMsNTQxLGdhaW5DZmcuYWNlcV9jMSk7DQorICBQcm9TTElDX1dyaXRlUkFNKHBQcm9zbGljLDU0MixnYWluQ2ZnLmFjZXFfYzIpOw0KKyAgUHJvU0xJQ19Xcml0ZVJBTShwUHJvc2xpYyw1NDMsZ2FpbkNmZy5hY2VxX2MzKTsNCisNCisgIFByb1NMSUNfV3JpdGVSZWcocFByb3NsaWMsNzEsMHgwKTsgIC8qIERJQUcxICovDQorICBQcm9TTElDX1dyaXRlUmVnKHBQcm9zbGljLDQ0LDB4MCk7ICAvKiBESUdDT04gKi8NCisgIFByb1NMSUNfV3JpdGVSZWcocFByb3NsaWMsNDgsMHgwKTsgIC8qIE9NT0RFICovDQorICBQcm9TTElDX1dyaXRlUmVnKHBQcm9zbGljLDQ5LDB4MCk7ICAvKiBPQ09OICovDQorICBQcm9TTElDX1NldExpbmVmZWVkU3RhdHVzKHBQcm9zbGljLExGX0ZXRF9BQ1RJVkUpOw0KKyAgUHJvU0xJQ19Xcml0ZVJlZyhwUHJvc2xpYyw0NyxlbmhhbmNlUmVnU2F2ZSk7DQorICBQcm9TTElDX1NldExpbmVmZWVkU3RhdHVzKHBQcm9zbGljLGxmKTsNCisNCisgIC8qIFZhbGlkYXRlIGxhc3QgdGVzdCByZXN1bHRzICovDQorICBwVHN0aW4tPmF1ZGlvVGVzdC50ZXN0RGF0YVZhbGlkID0gVFNUSU5fUkVTVUxUU19WQUxJRDsNCisNCisgIHJldHVybiBwVHN0aW4tPmF1ZGlvVGVzdC50ZXN0UmVzdWx0Ow0KK30NCisNCisNCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKw0KK2ludCBQcm9TTElDX3Rlc3RJblBjbUxwYmtTZXR1cChwcm9zbGljVGVzdEluT2JqVHlwZSAqcFRzdGluLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9zbGljUGNtTHBia1Rlc3QgKnBjbUxwYmtUZXN0KQ0KK3sNCisgIHBUc3Rpbi0+cGNtTHBia1Rlc3QgPSAqcGNtTHBia1Rlc3Q7DQorICBwVHN0aW4tPnBjbUxwYmtUZXN0LnRlc3RFbmFibGUgPSAxOw0KKw0KKyAgcmV0dXJuIFJDX05PTkU7DQorfQ0KKw0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovDQorDQoraW50IFByb1NMSUNfdGVzdEluRGNGZWVkU2V0dXAocHJvc2xpY1Rlc3RJbk9ialR5cGUgKnBUc3RpbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9zbGljRGNGZWVkVGVzdCAqZGNGZWVkVGVzdCkNCit7DQorICBwVHN0aW4tPmRjRmVlZFRlc3QgPSAqZGNGZWVkVGVzdDsNCisgIHBUc3Rpbi0+ZGNGZWVkVGVzdC50ZXN0RW5hYmxlID0gMTsNCisNCisgIHJldHVybiBSQ19OT05FOw0KK30NCisNCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKw0KK2ludCBQcm9TTElDX3Rlc3RJblJpbmdpbmdTZXR1cChwcm9zbGljVGVzdEluT2JqVHlwZSAqcFRzdGluLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9zbGljUmluZ2luZ1Rlc3QgKnJpbmdpbmdUZXN0KQ0KK3sNCisgIC8qIENvcHkgbGltaXRzIHBlci1jaGFubmVsICovDQorDQorICBwVHN0aW4tPnJpbmdpbmdUZXN0ID0gKnJpbmdpbmdUZXN0Ow0KKyAgcFRzdGluLT5yaW5naW5nVGVzdC50ZXN0RW5hYmxlID0gMTsNCisNCisgIHJldHVybiBSQ19OT05FOw0KK30NCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKw0KK2ludCBQcm9TTElDX3Rlc3RJbkJhdHRlcnlTZXR1cChwcm9zbGljVGVzdEluT2JqVHlwZSAqcFRzdGluLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9zbGljQmF0dGVyeVRlc3QgKmJhdHRlcnlUZXN0KQ0KK3sNCisgIC8qIENvcHkgbGltaXRzIHBlci1jaGFubmVsICovDQorDQorICBwVHN0aW4tPmJhdHRlcnlUZXN0ID0gKmJhdHRlcnlUZXN0Ow0KKyAgcFRzdGluLT5iYXR0ZXJ5VGVzdC50ZXN0RW5hYmxlID0gMTsNCisNCisgIHJldHVybiBSQ19OT05FOw0KK30NCisNCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KKw0KK2ludCBQcm9TTElDX3Rlc3RJbkF1ZGlvU2V0dXAocHJvc2xpY1Rlc3RJbk9ialR5cGUgKnBUc3RpbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3NsaWNBdWRpb1Rlc3QgKmF1ZGlvVGVzdCkNCit7DQorICAvKiBDb3B5IGxpbWl0cyBwZXItY2hhbm5lbCAqLw0KKw0KKyAgcFRzdGluLT5hdWRpb1Rlc3QgPSAqYXVkaW9UZXN0Ow0KKyAgcFRzdGluLT5hdWRpb1Rlc3QudGVzdEVuYWJsZSA9IDE7DQorDQorICByZXR1cm4gUkNfTk9ORTsNCit9DQorDQorDQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCitpbnQgUHJvU0xJQ190ZXN0SW5QcmludExpbWl0cyhwcm9zbGljQ2hhblR5cGUgKnBQcm9zbGljLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3NsaWNUZXN0SW5PYmpUeXBlICpwVHN0aW4pDQorew0KKyAgLyogVmFsaWQgZGV2aWNlIGNoZWNrICovDQorICBpZihUU1RJTl9JTlZBTElEX1BBUlRfTlVNKQ0KKyAgew0KKyAgICByZXR1cm4gUkNfVU5TVVBQT1JURURfRkVBVFVSRTsNCisgIH0NCisjaWZkZWYgRU5BQkxFX0RFQlVHDQorICBpZiggREVCVUdfRU5BQkxFRChwUHJvc2xpYyApICkNCisgIHsNCisgICAgTE9HUFJJTlQoIlxuIik7DQorICAgIExPR1BSSU5UKCIqKioqKioqKioqKiogICBUZXN0LUluIFRlc3QgTGltaXRzICoqKioqKioqKioqKioqXG4iKTsNCisgICAgTE9HUFJJTlQoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOw0KKyAgICBMT0dQUklOVCgiUHJvU0xJQyA6IFRlc3QtSW4gOiBMaW1pdHMgOiB2dGlwX29uX21pbiAobXYpID0gJWRcbiIsDQorICAgICAgICAgICAgIChpbnQpKHBUc3Rpbi0+ZGNGZWVkVGVzdC5kY2ZlZWRWdGlwT25ob29rLmxvd2VyTGltaXQpKTsNCisgICAgTE9HUFJJTlQoIlByb1NMSUMgOiBUZXN0LUluIDogTGltaXRzIDogdnRpcF9vbl9tYXggKG12KSA9ICVkXG4iLA0KKyAgICAgICAgICAgICAoaW50KShwVHN0aW4tPmRjRmVlZFRlc3QuZGNmZWVkVnRpcE9uaG9vay51cHBlckxpbWl0KSk7DQorICAgIExPR1BSSU5UKCJQcm9TTElDIDogVGVzdC1JbiA6IExpbWl0cyA6IHZyaW5nX29uX21pbiAobXYpID0gJWRcbiIsDQorICAgICAgICAgICAgIChpbnQpKHBUc3Rpbi0+ZGNGZWVkVGVzdC5kY2ZlZWRWcmluZ09uaG9vay5sb3dlckxpbWl0KSk7DQorICAgIExPR1BSSU5UKCJQcm9TTElDIDogVGVzdC1JbiA6IExpbWl0cyA6IHZyaW5nX29uX21heCAobXYpID0gJWRcbiIsDQorICAgICAgICAgICAgIChpbnQpKHBUc3Rpbi0+ZGNGZWVkVGVzdC5kY2ZlZWRWcmluZ09uaG9vay51cHBlckxpbWl0KSk7DQorICAgIExPR1BSSU5UKCJQcm9TTElDIDogVGVzdC1JbiA6IExpbWl0cyA6IHZsb29wX29uX21pbiAobXYpID0gJWRcbiIsDQorICAgICAgICAgICAgIChpbnQpKHBUc3Rpbi0+ZGNGZWVkVGVzdC5kY2ZlZWRWbG9vcE9uaG9vay5sb3dlckxpbWl0KSk7DQorICAgIExPR1BSSU5UKCJQcm9TTElDIDogVGVzdC1JbiA6IExpbWl0cyA6IHZsb29wX29uX21heCAobXYpID0gJWRcbiIsDQorICAgICAgICAgICAgIChpbnQpKHBUc3Rpbi0+ZGNGZWVkVGVzdC5kY2ZlZWRWbG9vcE9uaG9vay51cHBlckxpbWl0KSk7DQorICAgIExPR1BSSU5UKCJQcm9TTElDIDogVGVzdC1JbiA6IExpbWl0cyA6IHZiYXRfb25fbWluIChtdikgPSAlZFxuIiwNCisgICAgICAgICAgICAgKGludCkocFRzdGluLT5kY0ZlZWRUZXN0LmRjZmVlZFZiYXRPbmhvb2subG93ZXJMaW1pdCkpOw0KKyAgICBMT0dQUklOVCgiUHJvU0xJQyA6IFRlc3QtSW4gOiBMaW1pdHMgOiB2YmF0X29uX21heCAobXYpID0gJWRcbiIsDQorICAgICAgICAgICAgIChpbnQpKHBUc3Rpbi0+ZGNGZWVkVGVzdC5kY2ZlZWRWYmF0T25ob29rLnVwcGVyTGltaXQpKTsNCisgICAgTE9HUFJJTlQoIlByb1NMSUMgOiBUZXN0LUluIDogTGltaXRzIDogaXRpcF9vbl9taW4gKHVhKSA9ICVkXG4iLA0KKyAgICAgICAgICAgICAoaW50KShwVHN0aW4tPmRjRmVlZFRlc3QuZGNmZWVkSXRpcE9uaG9vay5sb3dlckxpbWl0KSk7DQorICAgIExPR1BSSU5UKCJQcm9TTElDIDogVGVzdC1JbiA6IExpbWl0cyA6IGl0aXBfb25fbWF4ICh1YSkgPSAlZFxuIiwNCisgICAgICAgICAgICAgKGludCkocFRzdGluLT5kY0ZlZWRUZXN0LmRjZmVlZEl0aXBPbmhvb2sudXBwZXJMaW1pdCkpOw0KKyAgICBMT0dQUklOVCgiUHJvU0xJQyA6IFRlc3QtSW4gOiBMaW1pdHMgOiBpcmluZ19vbl9taW4gKHVhKSA9ICVkXG4iLA0KKyAgICAgICAgICAgICAoaW50KShwVHN0aW4tPmRjRmVlZFRlc3QuZGNmZWVkSXJpbmdPbmhvb2subG93ZXJMaW1pdCkpOw0KKyAgICBMT0dQUklOVCgiUHJvU0xJQyA6IFRlc3QtSW4gOiBMaW1pdHMgOiBpcmluZ19vbl9tYXggKHVhKSA9ICVkXG4iLA0KKyAgICAgICAgICAgICAoaW50KShwVHN0aW4tPmRjRmVlZFRlc3QuZGNmZWVkSXJpbmdPbmhvb2sudXBwZXJMaW1pdCkpOw0KKyAgICBMT0dQUklOVCgiUHJvU0xJQyA6IFRlc3QtSW4gOiBMaW1pdHMgOiBpbG9vcF9vbl9taW4gKHVhKSA9ICVkXG4iLA0KKyAgICAgICAgICAgICAoaW50KShwVHN0aW4tPmRjRmVlZFRlc3QuZGNmZWVkSWxvb3BPbmhvb2subG93ZXJMaW1pdCkpOw0KKyAgICBMT0dQUklOVCgiUHJvU0xJQyA6IFRlc3QtSW4gOiBMaW1pdHMgOiBpbG9vcF9vbl9tYXggKHVhKSA9ICVkXG4iLA0KKyAgICAgICAgICAgICAoaW50KShwVHN0aW4tPmRjRmVlZFRlc3QuZGNmZWVkSWxvb3BPbmhvb2sudXBwZXJMaW1pdCkpOw0KKyAgICBMT0dQUklOVCgiUHJvU0xJQyA6IFRlc3QtSW4gOiBMaW1pdHMgOiBpbG9uZ19vbl9taW4gKHVhKSA9ICVkXG4iLA0KKyAgICAgICAgICAgICAoaW50KShwVHN0aW4tPmRjRmVlZFRlc3QuZGNmZWVkSWxvbmdPbmhvb2subG93ZXJMaW1pdCkpOw0KKyAgICBMT0dQUklOVCgiUHJvU0xJQyA6IFRlc3QtSW4gOiBMaW1pdHMgOiBpbG9uZ19vbl9tYXggKHVhKSA9ICVkXG4iLA0KKyAgICAgICAgICAgICAoaW50KShwVHN0aW4tPmRjRmVlZFRlc3QuZGNmZWVkSWxvbmdPbmhvb2sudXBwZXJMaW1pdCkpOw0KKyAgICBMT0dQUklOVCgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7DQorICAgIExPR1BSSU5UKCJQcm9TTElDIDogVGVzdC1JbiA6IExpbWl0cyA6IHZ0aXBfb2ZmX21pbiAobXYpID0gJWRcbiIsDQorICAgICAgICAgICAgIChpbnQpKHBUc3Rpbi0+ZGNGZWVkVGVzdC5kY2ZlZWRWdGlwT2ZmaG9vay5sb3dlckxpbWl0KSk7DQorICAgIExPR1BSSU5UKCJQcm9TTElDIDogVGVzdC1JbiA6IExpbWl0cyA6IHZ0aXBfb2ZmX21heCAobXYpID0gJWRcbiIsDQorICAgICAgICAgICAgIChpbnQpKHBUc3Rpbi0+ZGNGZWVkVGVzdC5kY2ZlZWRWdGlwT2ZmaG9vay51cHBlckxpbWl0KSk7DQorICAgIExPR1BSSU5UKCJQcm9TTElDIDogVGVzdC1JbiA6IExpbWl0cyA6IHZyaW5nX29mZl9taW4gKG12KSA9ICVkXG4iLA0KKyAgICAgICAgICAgICAoaW50KShwVHN0aW4tPmRjRmVlZFRlc3QuZGNmZWVkVnJpbmdPZmZob29rLmxvd2VyTGltaXQpKTsNCisgICAgTE9HUFJJTlQoIlByb1NMSUMgOiBUZXN0LUluIDogTGltaXRzIDogdnJpbmdfb2ZmX21heCAobXYpID0gJWRcbiIsDQorICAgICAgICAgICAgIChpbnQpKHBUc3Rpbi0+ZGNGZWVkVGVzdC5kY2ZlZWRWcmluZ09mZmhvb2sudXBwZXJMaW1pdCkpOw0KKyAgICBMT0dQUklOVCgiUHJvU0xJQyA6IFRlc3QtSW4gOiBMaW1pdHMgOiB2bG9vcF9vZmZfbWluIChtdikgPSAlZFxuIiwNCisgICAgICAgICAgICAgKGludCkocFRzdGluLT5kY0ZlZWRUZXN0LmRjZmVlZFZsb29wT2ZmaG9vay5sb3dlckxpbWl0KSk7DQorICAgIExPR1BSSU5UKCJQcm9TTElDIDogVGVzdC1JbiA6IExpbWl0cyA6IHZsb29wX29mZl9tYXggKG12KSA9ICVkXG4iLA0KKyAgICAgICAgICAgICAoaW50KShwVHN0aW4tPmRjRmVlZFRlc3QuZGNmZWVkVmxvb3BPZmZob29rLnVwcGVyTGltaXQpKTsNCisgICAgTE9HUFJJTlQoIlByb1NMSUMgOiBUZXN0LUluIDogTGltaXRzIDogdmJhdF9vZmZfbWluIChtdikgPSAlZFxuIiwNCisgICAgICAgICAgICAgKGludCkocFRzdGluLT5kY0ZlZWRUZXN0LmRjZmVlZFZiYXRPZmZob29rLmxvd2VyTGltaXQpKTsNCisgICAgTE9HUFJJTlQoIlByb1NMSUMgOiBUZXN0LUluIDogTGltaXRzIDogdmJhdF9vZmZfbWF4IChtdikgPSAlZFxuIiwNCisgICAgICAgICAgICAgKGludCkocFRzdGluLT5kY0ZlZWRUZXN0LmRjZmVlZFZiYXRPZmZob29rLnVwcGVyTGltaXQpKTsNCisgICAgTE9HUFJJTlQoIlByb1NMSUMgOiBUZXN0LUluIDogTGltaXRzIDogaXRpcF9vZmZfbWluICh1YSkgPSAlZFxuIiwNCisgICAgICAgICAgICAgKGludCkocFRzdGluLT5kY0ZlZWRUZXN0LmRjZmVlZEl0aXBPZmZob29rLmxvd2VyTGltaXQpKTsNCisgICAgTE9HUFJJTlQoIlByb1NMSUMgOiBUZXN0LUluIDogTGltaXRzIDogaXRpcF9vZmZfbWF4ICh1YSkgPSAlZFxuIiwNCisgICAgICAgICAgICAgKGludCkocFRzdGluLT5kY0ZlZWRUZXN0LmRjZmVlZEl0aXBPZmZob29rLnVwcGVyTGltaXQpKTsNCisgICAgTE9HUFJJTlQoIlByb1NMSUMgOiBUZXN0LUluIDogTGltaXRzIDogaXJpbmdfb2ZmX21pbiAodWEpID0gJWRcbiIsDQorICAgICAgICAgICAgIChpbnQpKHBUc3Rpbi0+ZGNGZWVkVGVzdC5kY2ZlZWRJcmluZ09mZmhvb2subG93ZXJMaW1pdCkpOw0KKyAgICBMT0dQUklOVCgiUHJvU0xJQyA6IFRlc3QtSW4gOiBMaW1pdHMgOiBpcmluZ19vZmZfbWF4ICh1YSkgPSAlZFxuIiwNCisgICAgICAgICAgICAgKGludCkocFRzdGluLT5kY0ZlZWRUZXN0LmRjZmVlZElyaW5nT2ZmaG9vay51cHBlckxpbWl0KSk7DQorICAgIExPR1BSSU5UKCJQcm9TTElDIDogVGVzdC1JbiA6IExpbWl0cyA6IGlsb29wX29mZl9taW4gKHVhKSA9ICVkXG4iLA0KKyAgICAgICAgICAgICAoaW50KShwVHN0aW4tPmRjRmVlZFRlc3QuZGNmZWVkSWxvb3BPZmZob29rLmxvd2VyTGltaXQpKTsNCisgICAgTE9HUFJJTlQoIlByb1NMSUMgOiBUZXN0LUluIDogTGltaXRzIDogaWxvb3Bfb2ZmX21heCAodWEpID0gJWRcbiIsDQorICAgICAgICAgICAgIChpbnQpKHBUc3Rpbi0+ZGNGZWVkVGVzdC5kY2ZlZWRJbG9vcE9mZmhvb2sudXBwZXJMaW1pdCkpOw0KKyAgICBMT0dQUklOVCgiUHJvU0xJQyA6IFRlc3QtSW4gOiBMaW1pdHMgOiBpbG9uZ19vZmZfbWluICh1YSkgPSAlZFxuIiwNCisgICAgICAgICAgICAgKGludCkocFRzdGluLT5kY0ZlZWRUZXN0LmRjZmVlZElsb25nT2ZmaG9vay5sb3dlckxpbWl0KSk7DQorICAgIExPR1BSSU5UKCJQcm9TTElDIDogVGVzdC1JbiA6IExpbWl0cyA6IGlsb25nX29mZl9tYXggKHVhKSA9ICVkXG4iLA0KKyAgICAgICAgICAgICAoaW50KShwVHN0aW4tPmRjRmVlZFRlc3QuZGNmZWVkSWxvbmdPZmZob29rLnVwcGVyTGltaXQpKTsNCisgICAgTE9HUFJJTlQoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOw0KKyAgICBMT0dQUklOVCgiUHJvU0xJQyA6IFRlc3QtSW4gOiBMaW1pdHMgOiByaW5naW5nX3ZhY19taW4gKG12KSA9ICVkXG4iLA0KKyAgICAgICAgICAgICAoaW50KShwVHN0aW4tPnJpbmdpbmdUZXN0LnJpbmdpbmdWYWMubG93ZXJMaW1pdCkpOw0KKyAgICBMT0dQUklOVCgiUHJvU0xJQyA6IFRlc3QtSW4gOiBMaW1pdHMgOiByaW5naW5nX3ZhY19tYXggKG12KSA9ICVkXG4iLA0KKyAgICAgICAgICAgICAoaW50KShwVHN0aW4tPnJpbmdpbmdUZXN0LnJpbmdpbmdWYWMudXBwZXJMaW1pdCkpOw0KKyAgICBMT0dQUklOVCgiUHJvU0xJQyA6IFRlc3QtSW4gOiBMaW1pdHMgOiByaW5naW5nX3ZkY19taW4gKG12KSA9ICVkXG4iLA0KKyAgICAgICAgICAgICAoaW50KShwVHN0aW4tPnJpbmdpbmdUZXN0LnJpbmdpbmdWZGMubG93ZXJMaW1pdCkpOw0KKyAgICBMT0dQUklOVCgiUHJvU0xJQyA6IFRlc3QtSW4gOiBMaW1pdHMgOiByaW5naW5nX3ZkY19tYXggKG12KSA9ICVkXG4iLA0KKyAgICAgICAgICAgICAoaW50KShwVHN0aW4tPnJpbmdpbmdUZXN0LnJpbmdpbmdWZGMudXBwZXJMaW1pdCkpOw0KKyAgICBMT0dQUklOVCgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7DQorICAgIExPR1BSSU5UKCJQcm9TTElDIDogVGVzdC1JbiA6IExpbWl0cyA6IGJhdHRlcnlfdmJhdF9taW4gKG12KSA9ICVkXG4iLA0KKyAgICAgICAgICAgICAoaW50KShwVHN0aW4tPmJhdHRlcnlUZXN0LnZiYXQubG93ZXJMaW1pdCkpOw0KKyAgICBMT0dQUklOVCgiUHJvU0xJQyA6IFRlc3QtSW4gOiBMaW1pdHMgOiBiYXR0ZXJ5X3ZiYXRfbWF4IChtdikgPSAlZFxuIiwNCisgICAgICAgICAgICAgKGludCkocFRzdGluLT5iYXR0ZXJ5VGVzdC52YmF0LnVwcGVyTGltaXQpKTsNCisgICAgTE9HUFJJTlQoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOw0KKyAgICBMT0dQUklOVCgiUHJvU0xJQyA6IFRlc3QtSW4gOiBMaW1pdHMgOiBhdWRpb190eGdhaW5fbWluIChtZEIpID0gJWRcbiIsDQorICAgICAgICAgICAgIChpbnQpKHBUc3Rpbi0+YXVkaW9UZXN0LnR4R2Fpbi5sb3dlckxpbWl0KSk7DQorICAgIExPR1BSSU5UKCJQcm9TTElDIDogVGVzdC1JbiA6IExpbWl0cyA6IGF1ZGlvX3R4Z2Fpbl9tYXggKG1kQikgPSAlZFxuIiwNCisgICAgICAgICAgICAgKGludCkocFRzdGluLT5hdWRpb1Rlc3QudHhHYWluLnVwcGVyTGltaXQpKTsNCisgICAgTE9HUFJJTlQoIlByb1NMSUMgOiBUZXN0LUluIDogTGltaXRzIDogYXVkaW9fcnhnYWluX21pbiAobWRCKSA9ICVkXG4iLA0KKyAgICAgICAgICAgICAoaW50KShwVHN0aW4tPmF1ZGlvVGVzdC5yeEdhaW4ubG93ZXJMaW1pdCkpOw0KKyAgICBMT0dQUklOVCgiUHJvU0xJQyA6IFRlc3QtSW4gOiBMaW1pdHMgOiBhdWRpb19yeGdhaW5fbWF4IChtZEIpID0gJWRcbiIsDQorICAgICAgICAgICAgIChpbnQpKHBUc3Rpbi0+YXVkaW9UZXN0LnJ4R2Fpbi51cHBlckxpbWl0KSk7DQorICAgIExPR1BSSU5UKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsNCisgICAgTE9HUFJJTlQoIlxuIik7DQorICB9DQorI2Vsc2UNCisgIFNJTEFCU19VTlJFRkVSRU5DRURfUEFSQU1FVEVSKHBUc3Rpbik7DQorI2VuZGlmDQorICByZXR1cm4gUkNfTk9ORTsNCit9DQorDQorDQorc3RhdGljIFByb1NMSUNfRENmZWVkX0NmZyB0ZXN0TG9hZF9EQ19DZmdbXSA9DQorew0KKyAgew0KKyAgMHgxREM2RTFEM0wsICAvKiBTTE9QRV9WTElNICovDQorICAweDFGOTA5Njc5TCwgICAvKiBTTE9QRV9SRkVFRCAqLw0KKyAgMHgwMDQwQTBFMEwsICAgLyogU0xPUEVfSUxJTSAqLw0KKyAgMHgxQjg2ODdCQkwsICAvKiBTTE9QRV9ERUxUQTEgKi8NCisgIDB4MUNDNEI3NURMLCAgLyogU0xPUEVfREVMVEEyICovDQorICAweDA1QTM4NjMzTCwgICAvKiBWX1ZMSU0gKDQ4LjAwMCB2KSAqLw0KKyAgMHgwNTBEMjgzOUwsICAgLyogVl9SRkVFRCAoNDMuMDAwIHYpICovDQorICAweDAzRkU3RjBGTCwgICAvKiBWX0lMSU0gICgzNC4wMDAgdikgKi8NCisgIDB4MDA5REFGRDlMLCAvKiBDT05TVF9SRkVFRCAoMTAuMDAwIG1BKSAqLw0KKyAgMHgwMDQ1Q0JCQ0wsICAvKiBDT05TVF9JTElNICgxNS4wMDAgbUEpICovDQorICAweDAwMkQ4RDk2TCwgIC8qIElfVkxJTSAoMC4wMDAgbUEpICovDQorICAweDAwNUIwQUZCTCwgIC8qIExDUk9OSEsgKDEwLjAwMCBtQSkgKi8NCisgIDB4MDA2RDQwNjBMLCAgIC8qIExDUk9GRkhLICgxMi4wMDAgbUEpICovDQorICAweDAwMDA4MDAwTCwgICAvKiBMQ1JEQkkgKDUuMDAwIG1zKSAqLw0KKyAgMHgwMDQ4RDU5NUwsICAgLyogTE9OR0hJVEggKDguMDAwIG1BKSAqLw0KKyAgMHgwMDNGQkFFMkwsICAvKiBMT05HTE9USCAoNy4wMDAgbUEpICovDQorICAweDAwMDA4MDAwTCwgICAvKiBMT05HREJJICg1LjAwMCBtcykgKi8NCisgIDB4MDAwRjAwMDBMLCAgIC8qIExDUk1BU0sgKDE1MC4wMDAgbXMpICovDQorICAweDAwMDgwMDAwTCwgICAvKiBMQ1JNQVNLX1BPTFJFViAoODAuMDAwIG1zKSAqLw0KKyAgMHgwMDE0MDAwMEwsICAgLyogTENSTUFTS19TVEFURSAoMjAwLjAwMCBtcykgKi8NCisgIDB4MDAxNDAwMDBMLCAgIC8qIExDUk1BU0tfTElORUNBUCAoMjAwLjAwMCBtcykgKi8NCisgIDB4MDFCQTVFMzVMLCAgLyogVkNNX09IICgyNy4wMDAgdikgKi8NCisgIDB4MDA1MUVCODVMLCAgIC8qIFZPVl9CQVQgKDUuMDAwIHYpICovDQorICAweDAwNDE4OTM3TCwgICAvKiBWT1ZfR05EICg0LjAwMCB2KSAqLw0KKyAgfQ0KK307DQorDQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCitpbnQgUHJvU0xJQ190ZXN0TG9hZFRlc3QoDQorICBTaVZvaWNlQ2hhblR5cGVfcHRyIHBQcm9zbGljLCANCisgIEJPT0xFQU4gaXNfdGVzdFN0YXJ0LCANCisgIHVpbnQzMl90IHRpbWVEZWxheU1zZWMpDQorew0KKyAgc3RhdGljIFByb1NMSUNfRENmZWVkX0NmZyBkY2ZlZWRDZmc7DQorICBzdGF0aWMgdUludDggZGlnY29uX3JlZ19jYWNoZTsNCisNCisgIFRSQUNFUFJJTlQocFByb3NsaWMsICIgY2hhbm5lbDogJXUgaXNfdGVzdFN0YXJ0OiAldSBkZWxheSA9ICV1IiwNCisgICAgcFByb3NsaWMtPmNoYW5uZWwsIA0KKyAgICBpc190ZXN0U3RhcnQsDQorICAgIHRpbWVPZmZob29rTXNlYyk7DQorICAvKiBWYWxpZCBkZXZpY2UgY2hlY2sgKi8NCisNCisgIGlmKFRTVElOX0lOVkFMSURfUEFSVF9OVU0pDQorICB7DQorICAgIHJldHVybiBSQ19VTlNVUFBPUlRFRF9GRUFUVVJFOw0KKyAgfQ0KKw0KKyAgaWYoIFRSVUUgPT0gaXNfdGVzdFN0YXJ0ICkNCisgIHsNCisgICAgLyogVmVyaWZ5IGxpbmUgbm90IGluIHVzZSAqLw0KKyAgICBpZihQcm9TTElDX1JlYWRSZWcocFByb3NsaWMsUFJPU0xJQ19SRUdfTENSUlRQKSAmIDB4MDIpICAvKiBMQ1IgKi8NCisgICAgew0KKyAgICAgIERFQlVHX1BSSU5UKHBQcm9zbGljLCAiXG5MaW5lIGluIFVzZTogJXUuXG4iLCBwUHJvc2xpYy0+Y2hhbm5lbCk7DQorICAgICAgcmV0dXJuIFJDX0xJTkVfSU5fVVNFOw0KKyAgICB9DQorICAgDQorICAgIC8qIFNldHVwIGxvd2VyIElMSU0gbGluZWZlZWQgKi8NCisgICAgUHJvU0xJQ19TZXRMaW5lZmVlZFN0YXR1cyhwUHJvc2xpYyxMRl9PUEVOKTsNCisgICAgc3RvcmVEQ0ZlZWRQcmVzZXQocFByb3NsaWMsICZkY2ZlZWRDZmcsIDApOw0KKw0KKyAgICBQcm9TTElDX0RDRmVlZFNldHVwQ2ZnKCBwUHJvc2xpYywgdGVzdExvYWRfRENfQ2ZnLCAwICk7IA0KKw0KKyAgICBQcm9TTElDX1NldExpbmVmZWVkU3RhdHVzKHBQcm9zbGljLExGX0ZXRF9BQ1RJVkUpOw0KKyAgICBEZWxheShwUHJvVGltZXIsMTAwKTsNCisgIA0KKyAgICAvKiBDb25uZWN0IFRlc3QgTG9hZCB0byBjYXVzZSBMQ1IgaW50ZXJydXB0Ki8NCisgICAgc2V0SW50ZXJuYWxUZXN0TG9hZChwUHJvc2xpYywxKTsNCisgICAgRGVsYXkocFByb1RpbWVyLCB0aW1lRGVsYXlNc2VjKTsNCisgICAgREVCVUdfUFJJTlQocFByb3NsaWMsICJcbiVzOiB0ZXN0IGxvYWQgb24gZm9yIGNoYW5uZWwgJXVcbiIsIA0KKyAgICAgIF9fRlVOQ1RJT05fXywgcFByb3NsaWMtPmNoYW5uZWwpOw0KKyAgDQorICAgIC8qIERpc2FibGUgaHlicmlkIGNpcmN1aXQgZm9yIHRlc3QgbG9hZCBsb29wYmFjayAqLw0KKyAgICBkaWdjb25fcmVnX2NhY2hlID0gUHJvU0xJQ19SZWFkUmVnKHBQcm9zbGljLFBST1NMSUNfUkVHX0RJR0NPTik7DQorDQorICAgIFByb1NMSUNfV3JpdGVSZWcocFByb3NsaWMsIFBST1NMSUNfUkVHX0RJR0NPTiwNCisgICAgICBkaWdjb25fcmVnX2NhY2hlIHwweDEwICk7DQorDQorICAgIC8qIEF0IHRoaXMgcG9pbnQgdGhlIHRlc3QgbG9hZCBzaG91bGQgb2YgY2F1c2VkIGEgTENSIGludGVycnVwdCBhbmQNCisgICAgICAgdGhlcmUgaXMgYW4gYXVkaW8gcGF0aCBhdmFpbGFibGUuIE5PVEU6IHRoZXJlIG1heSBiZSBzb21lIGRpc3RvcnRpb24NCisgICAgICAgb2YgdGhlIGF1ZGlvLi4uDQorICAgICovDQorICAgIA0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKiBSZXN0b3JlIGh5YnJpZCBjaXJjdWl0ICovDQorICAgIFByb1NMSUNfV3JpdGVSZWcocFByb3NsaWMsDQorICAgICAgUFJPU0xJQ19SRUdfRElHQ09OLCBkaWdjb25fcmVnX2NhY2hlICk7DQorIA0KKyAgICAvKiBEaXNjb25uZWN0IFRlc3QgTG9hZCAqLw0KKyAgICBzZXRJbnRlcm5hbFRlc3RMb2FkKHBQcm9zbGljLDApOw0KKyAgICBEZWxheShwUHJvVGltZXIsIHRpbWVEZWxheU1zZWMpOw0KKyAgICBERUJVR19QUklOVChwUHJvc2xpYywgIlxuJXM6IHRlc3QgbG9hZCBvZmYgZm9yIGNoYW5uZWwgJXUuXG4iLA0KKyAgICAgIF9fRlVOQ1RJT05fXywgcFByb3NsaWMtPmNoYW5uZWwpOw0KKyAgDQorICAgLyogUmVzdG9yZSBEQyBGZWVkICovDQorICAgUHJvU0xJQ19EQ0ZlZWRTZXR1cENmZyhwUHJvc2xpYywgJmRjZmVlZENmZywgMCk7DQorICB9DQorDQorICByZXR1cm4gUkNfTk9ORTsNCit9DQorDQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvc3JjL3NpMzIxOHhfTENDQl9jb25zdGFudHMuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL2NvZGVjcy9zaTMyMTh4L3NyYy9zaTMyMTh4X0xDQ0JfY29uc3RhbnRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ5NDhlOQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL2NvZGVjcy9zaTMyMTh4L3NyYy9zaTMyMTh4X0xDQ0JfY29uc3RhbnRzLmMKQEAgLTAsMCArMSw2ODYgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQorLyoNCisgKiBTaTMyMTh4IFByb1NMSUMgQVBJIENvbmZpZ3VyYXRpb24gVG9vbCBWZXJzaW9uIDQuMi4xDQorICogTGFzdCBVcGRhdGVkIGluIEFQSSBSZWxlYXNlOiA5LjIuMA0KKyAqIHNvdXJjZSBYTUwgZmlsZTogc2kzMjE4eF9MQ0NCX2NvbnN0YW50cy54bWwNCisgKg0KKyAqIEF1dG8gZ2VuZXJhdGVkIGZpbGUgZnJvbSBjb25maWd1cmF0aW9uIHRvb2wuDQorICovDQorDQorDQorI2luY2x1ZGUgIi4uL2luYy9wcm9zbGljLmgiDQorI2luY2x1ZGUgIi4uL2luYy9zaTMyMTh4LmgiDQorDQorU2kzMjE4eF9HZW5lcmFsX0NmZyBTaTMyMTh4X0dlbmVyYWxfQ29uZmlndXJhdGlvbiAgPSB7DQorMHg3MiwgICAgICAgICAgICAgICAgICAgICAgIC8qIERFVklDRV9LRVkgKi8NCitCT19EQ0RDX0xDQ0IsICAgICAgICAgICAgICAgLyogQk9NX09QVCAqLw0KK1ZEQ180UDVfMTZQMCwgICAgICAgICAgICAgICAvKiBWRENfUkFOR0VfT1BUICovDQorQVVUT19aQ0FMX0VOQUJMRUQsICAgICAgICAgIC8qIFpDQUxfRU5BQkxFICovDQorQk9fU1REX0JPTSwgICAgICAgICAgICAgICAgIC8qIFBNX0JPTSAqLw0KKzB4MDAwMDAwMDBMLCAgICAgICAgICAgICAgICAvKiBEQ0RDX09JVEhSRVNIX0xPICovDQorMHgwMUEwMDAwMEwsICAgICAgICAgICAgICAgIC8qIERDRENfT0lUSFJFU0hfSEkgKi8NCisweDAwQTAwMDAwTCwgICAgICAgICAgICAgICAgLyogRENEQ19PVlRIUkVTSCAqLw0KKzUwMDBMLCAgICAgICAgICAgICAgICAgICAgICAvKiBEQ0RDX1VWVEhSRVNIICovDQorMTAwMEwsICAgICAgICAgICAgICAgICAgICAgIC8qIERDRENfVVZIWVNUICovDQorMHgwMDAwMDAwMEwsICAgICAgICAgICAgICAgIC8qIERDRENfRlNXX1ZUSExPICovDQorMHgwMDAwMDAwMEwsICAgICAgICAgICAgICAgIC8qIERDRENfRlNXX1ZIWVNUICovDQorMHgwMDQ4RDE1QkwsICAgICAgICAgICAgICAgIC8qIFBfVEhfSFZJQyAqLw0KKzB4MDdGRUI4MDBMLCAgICAgICAgICAgICAgICAvKiBDT0VGX1BfSFZJQyAqLw0KKzB4MDAwODMxMjBMLCAgICAgICAgICAgICAgICAvKiBCQVRfSFlTVCAqLw0KKzB4MDNENzBBMjBMLCAgICAgICAgICAgICAgICAvKiBWQkFUSF9FWFBFQ1QgKDYwLjAwVikgKi8NCisweDA2NjY2NjM1TCwgICAgICAgICAgICAgICAgLyogVkJBVFJfRVhQRUNUICgxMDAuMDBWKSAqLw0KKzB4MEZGRjAwMDBMLCAgICAgICAgICAgICAgICAvKiBQV1JTQVZFX1RJTUVSICovDQorMHgwMTk5OUEwMEwsICAgICAgICAgICAgICAgIC8qIE9GRkhPT0tfVEhSRVNIICovDQorMHgwMEYwMDAwMEwsICAgICAgICAgICAgICAgIC8qIFZCQVRfVFJBQ0tfTUlOICovDQorMHgwMEYwMDAwMEwsICAgICAgICAgICAgICAgIC8qIFZCQVRfVFJBQ0tfTUlOX1JORyAqLw0KKzB4MEFERDU1MDBMLCAgICAgICAgICAgICAgICAvKiBEQ0RDX0FOQV9TQ0FMRSAqLw0KKzB4MDA4MDAwMDBMLCAgICAgICAgICAgICAgICAvKiBUSEVSTV9EQkkgKi8NCisweDAwRkZGRkZGTCwgICAgICAgICAgICAgICAgLyogVk9WX0RDRENfU0xPUEUgKi8NCisweDAwQTE4OTM3TCwgICAgICAgICAgICAgICAgLyogVk9WX0RDRENfT1MgKi8NCisweDAwQTE4OTM3TCwgICAgICAgICAgICAgICAgLyogVk9WX1JJTkdfQkFUX0RDREMgKi8NCisweDAwRTQ5QkE1TCwgICAgICAgICAgICAgICAgLyogVk9WX1JJTkdfQkFUX01BWCAqLw0KKzB4MDEwMTg5MDBMLCAgICAgICAgICAgICAgICAvKiBEQ0RDX1ZFUlIgKi8NCisweDAwODBDNDgwTCwgICAgICAgICAgICAgICAgLyogRENEQ19WRVJSX0hZU1QgKi8NCisweDAwNDAwMDAwTCwgICAgICAgICAgICAgICAgLyogUERfVVZMTyAqLw0KKzB4MDA0MDAwMDBMLCAgICAgICAgICAgICAgICAvKiBQRF9PVkxPICovDQorMHgwMDIwMDAwMEwsICAgICAgICAgICAgICAgIC8qIFBEX09DTE8gKi8NCisweDAwNDAwMDAwTCwgICAgICAgICAgICAgICAgLyogUERfU1dEUlYgKi8NCisweDAwMDAwMDAwTCwgICAgICAgICAgICAgICAgLyogRENEQ19VVlBPTCAqLw0KKzB4MDAyMDAwMDBMLCAgICAgICAgICAgICAgICAvKiBEQ0RDX1JOR1RZUEUgKi8NCisweDAwMTgwMDAwTCwgICAgICAgICAgICAgICAgLyogRENEQ19BTkFfVE9GRiAqLw0KKzB4MDAxMDAwMDBMLCAgICAgICAgICAgICAgICAvKiBEQ0RDX0FOQV9UT05NSU4gKi8NCisweDAxMkZDMDAwTCwgICAgICAgICAgICAgICAgLyogRENEQ19BTkFfVE9OTUFYICovDQorMHg1MCwgICAgICAgICAgICAgICAgICAgICAgIC8qIElSUUVOMSAqLw0KKzB4MTMsICAgICAgICAgICAgICAgICAgICAgICAvKiBJUlFFTjIgKi8NCisweDAzLCAgICAgICAgICAgICAgICAgICAgICAgLyogSVJRRU4zICovDQorMHgwMCwgICAgICAgICAgICAgICAgICAgICAgIC8qIElSUUVONCAqLw0KKzB4MzAsICAgICAgICAgICAgICAgICAgICAgICAvKiBFTkhBTkNFICovDQorMHgzRiwgICAgICAgICAgICAgICAgICAgICAgIC8qIEFVVE8gKi8NCit9Ow0KKw0KK1NpMzIxOHhfYXVkaW9HYWluX0NmZyBTaTMyMTh4X2F1ZGlvR2Fpbl9QcmVzZXRzIFtdID0gew0KK3sweDEzNzcwODBMLDAsIDB4MEwsIDB4MEwsIDB4MEwsIDB4MEx9LA0KK3sweDgwQzMxODBMLDAsIDB4MEwsIDB4MEwsIDB4MEwsIDB4MEx9DQorfTsNCisNCitTaTMyMTh4X1JpbmdfQ2ZnIFNpMzIxOHhfUmluZ19QcmVzZXRzW10gPXsNCit7DQorLyoNCisJTG9vcCA9IDUwMC4wIGZ0IEAgMC4wNDQgb2htcy9mdCwgUkVOID0gMywgUmNwZSA9IDYwMCBvaG1zDQorCVJwcm90ID0gNTQgb2htcywgVHlwZSA9IExQUiwgV2F2ZWZvcm0gPSBTSU5FDQorKi8gDQorMHgwMDA1MDAwMEwsCS8qIFJUUEVSICovDQorMHgwN0VGRTAwMEwsCS8qIFJJTkdGUiAoMjAuMDAwIEh6KSAqLw0KKzB4MDAyMDkzODBMLAkvKiBSSU5HQU1QICg1NS4wMDAgdnJtcykgICovDQorMHgwMDAwMDAwMEwsCS8qIFJJTkdQSEFTICovDQorMHgwMDAwMDAwMEwsCS8qIFJJTkdPRiAoMC4wMDAgdmRjKSAqLw0KKzB4MTVFNTIwMEVMLAkvKiBTTE9QRV9SSU5HICgxMDAuMDAwIG9obXMpICovDQorMHgwMDZDOTRENkwsCS8qIElSSU5HX0xJTSAoNzAuMDAwIG1BKSAqLw0KKzB4MDA1MjIyMjBMLAkvKiBSVEFDVEggKDQ1LjM1NyBtQSkgKi8NCisweDBGRkZGRkZGTCwJLyogUlREQ1RIICg0NTAuMDAwIG1BKSAqLw0KKzB4MDAwMDYwMDBMLAkvKiBSVEFDREIgKDc1LjAwMCBtcykgKi8NCisweDAwMDA2MDAwTCwJLyogUlREQ0RCICg3NS4wMDAgbXMpICovDQorMHgwMDUxRUI4MkwsCS8qIFZPVl9SSU5HX0JBVCAoNS4wMDAgdikgKi8NCisweDAwMDAwMDAwTCwJLyogVk9WX1JJTkdfR05EICgwLjAwMCB2KSAqLw0KKzB4MDVCODM1RUZMLAkvKiBWQkFUUl9FWFBFQ1QgKDg5LjM2OCB2KSAqLw0KKzB4ODAsCQkJLyogUklOR1RBTE8gKDIuMDAwIHMpICovDQorMHgzRSwJCQkvKiBSSU5HVEFISSAqLw0KKzB4MDAsCQkJLyogUklOR1RJTE8gKDQuMDAwIHMpICovDQorMHg3RCwJCQkvKiBSSU5HVElISSAqLw0KKzB4MDAwMDAwMDBMLAkvKiBBREFQX1JJTkdfTUlOX0kgKi8NCisweDAwMDAzMDAwTCwJLyogQ09VTlRFUl9JUklOR19WQUwgKi8NCisweDAwMDUxRUI4TCwJLyogQ09VTlRFUl9WVFJfVkFMICovDQorMHgwMDAwMDAwMEwsCS8qIENPTlNUXzAyOCAqLw0KKzB4MDAwMDAwMDBMLAkvKiBDT05TVF8wMzIgKi8NCisweDAwMDAwMDAwTCwJLyogQ09OU1RfMDM4ICovDQorMHgwMDAwMDAwMEwsCS8qIENPTlNUXzA0NiAqLw0KKzB4MDAwMDAwMDBMLAkvKiBSUkRfREVMQVkgKi8NCisweDAwMDAwMDAwTCwJLyogUlJEX0RFTEFZMiAqLw0KKzB4MDE4OTM3NDBMLAkvKiBWQkFUX1RSQUNLX01JTl9STkcgKi8NCisweDk4LAkJCS8qIFJJTkdDT04gKi8NCisweDAwLAkJCS8qIFVTRVJTVEFUICovDQorMHgwMkRDMUFGN0wsCS8qIFZDTV9SSU5HICg0My40MzQgdikgKi8NCisweDAyREMxQUY3TCwJLyogVkNNX1JJTkdfRklYRUQgKi8NCisweDAwMzEyNkU4TCwJLyogREVMVEFfVkNNICovDQorMHgwMDIwMDAwMEwsCS8qIERDRENfUk5HVFlQRSAqLw0KK30sICAvKiBERUZBVUxUX1JJTkdJTkcgKi8NCit7DQorLyoNCisJTG9vcCA9IDUwMC4wIGZ0IEAgMC4wNDQgb2htcy9mdCwgUkVOID0gNSwgUmNwZSA9IDYwMCBvaG1zDQorCVJwcm90ID0gNTQgb2htcywgVHlwZSA9IExQUiwgV2F2ZWZvcm0gPSBTSU5FDQorKi8gDQorMHgwMDA1MDAwMEwsCS8qIFJUUEVSICovDQorMHgwN0VGRTAwMEwsCS8qIFJJTkdGUiAoMjAuMDAwIEh6KSAqLw0KKzB4MDAxQzBBRkNMLAkvKiBSSU5HQU1QICg0NS4wMDAgdnJtcykgICovDQorMHgwMDAwMDAwMEwsCS8qIFJJTkdQSEFTICovDQorMHgwMDAwMDAwMEwsCS8qIFJJTkdPRiAoMC4wMDAgdmRjKSAqLw0KKzB4MTVFNTIwMEVMLAkvKiBTTE9QRV9SSU5HICgxMDAuMDAwIG9obXMpICovDQorMHgwMDZDOTRENkwsCS8qIElSSU5HX0xJTSAoNzAuMDAwIG1BKSAqLw0KKzB4MDA2OEE5QjlMLAkvKiBSVEFDVEggKDU3Ljc5OCBtQSkgKi8NCisweDBGRkZGRkZGTCwJLyogUlREQ1RIICg0NTAuMDAwIG1BKSAqLw0KKzB4MDAwMDYwMDBMLAkvKiBSVEFDREIgKDc1LjAwMCBtcykgKi8NCisweDAwMDA2MDAwTCwJLyogUlREQ0RCICg3NS4wMDAgbXMpICovDQorMHgwMDUxRUI4MkwsCS8qIFZPVl9SSU5HX0JBVCAoNS4wMDAgdikgKi8NCisweDAwMDAwMDAwTCwJLyogVk9WX1JJTkdfR05EICgwLjAwMCB2KSAqLw0KKzB4MDRGN0RBNTdMLAkvKiBWQkFUUl9FWFBFQ1QgKDc3LjYyOCB2KSAqLw0KKzB4ODAsCQkJLyogUklOR1RBTE8gKDIuMDAwIHMpICovDQorMHgzRSwJCQkvKiBSSU5HVEFISSAqLw0KKzB4MDAsCQkJLyogUklOR1RJTE8gKDQuMDAwIHMpICovDQorMHg3RCwJCQkvKiBSSU5HVElISSAqLw0KKzB4MDAwMDAwMDBMLAkvKiBBREFQX1JJTkdfTUlOX0kgKi8NCisweDAwMDAzMDAwTCwJLyogQ09VTlRFUl9JUklOR19WQUwgKi8NCisweDAwMDUxRUI4TCwJLyogQ09VTlRFUl9WVFJfVkFMICovDQorMHgwMDAwMDAwMEwsCS8qIENPTlNUXzAyOCAqLw0KKzB4MDAwMDAwMDBMLAkvKiBDT05TVF8wMzIgKi8NCisweDAwMDAwMDAwTCwJLyogQ09OU1RfMDM4ICovDQorMHgwMDAwMDAwMEwsCS8qIENPTlNUXzA0NiAqLw0KKzB4MDAwMDAwMDBMLAkvKiBSUkRfREVMQVkgKi8NCisweDAwMDAwMDAwTCwJLyogUlJEX0RFTEFZMiAqLw0KKzB4MDE4OTM3NDBMLAkvKiBWQkFUX1RSQUNLX01JTl9STkcgKi8NCisweDk4LAkJCS8qIFJJTkdDT04gKi8NCisweDAwLAkJCS8qIFVTRVJTVEFUICovDQorMHgwMjdCRUQyQkwsCS8qIFZDTV9SSU5HICgzNy41NjQgdikgKi8NCisweDAyN0JFRDJCTCwJLyogVkNNX1JJTkdfRklYRUQgKi8NCisweDAwMzEyNkU4TCwJLyogREVMVEFfVkNNICovDQorMHgwMDIwMDAwMEwsCS8qIERDRENfUk5HVFlQRSAqLw0KK30gICAvKiBSSU5HX0YyMF80NVZSTVNfMFZEQ19MUFIgKi8NCit9Ow0KKw0KK1NpMzIxOHhfRENmZWVkX0NmZyBTaTMyMTh4X0RDZmVlZF9QcmVzZXRzW10gPSB7DQorew0KKzB4MUM4QTAyNENMLAkvKiBTTE9QRV9WTElNICovDQorMHgxRjkwOTY3OUwsCS8qIFNMT1BFX1JGRUVEICovDQorMHgwMDQwQTBFMEwsCS8qIFNMT1BFX0lMSU0gKi8NCisweDFENUIyMUE5TCwJLyogU0xPUEVfREVMVEExICovDQorMHgxREQ4N0EzRUwsCS8qIFNMT1BFX0RFTFRBMiAqLw0KKzB4MDVBMzg2MzNMLAkvKiBWX1ZMSU0gKDQ4LjAwMCB2KSAqLw0KKzB4MDUwRDI4MzlMLAkvKiBWX1JGRUVEICg0My4wMDAgdikgKi8NCisweDAzRkU3RjBGTCwJLyogVl9JTElNICAoMzQuMDAwIHYpICovDQorMHgwMEI0RjNDM0wsCS8qIENPTlNUX1JGRUVEICgxNS4wMDAgbUEpICovDQorMHgwMDVEMEZBNkwsCS8qIENPTlNUX0lMSU0gKDIwLjAwMCBtQSkgKi8NCisweDAwMkQ4RDk2TCwJLyogSV9WTElNICgwLjAwMCBtQSkgKi8NCisweDAwNUIwQUZCTCwJLyogTENST05ISyAoMTAuMDAwIG1BKSAqLw0KKzB4MDA2RDQwNjBMLAkvKiBMQ1JPRkZISyAoMTIuMDAwIG1BKSAqLw0KKzB4MDAwMDgwMDBMLAkvKiBMQ1JEQkkgKDUuMDAwIG1zKSAqLw0KKzB4MDA0OEQ1OTVMLAkvKiBMT05HSElUSCAoOC4wMDAgbUEpICovDQorMHgwMDNGQkFFMkwsCS8qIExPTkdMT1RIICg3LjAwMCBtQSkgKi8NCisweDAwMDA4MDAwTCwJLyogTE9OR0RCSSAoNS4wMDAgbXMpICovDQorMHgwMDBGMDAwMEwsCS8qIExDUk1BU0sgKDE1MC4wMDAgbXMpICovDQorMHgwMDA4MDAwMEwsCS8qIExDUk1BU0tfUE9MUkVWICg4MC4wMDAgbXMpICovDQorMHgwMDE0MDAwMEwsCS8qIExDUk1BU0tfU1RBVEUgKDIwMC4wMDAgbXMpICovDQorMHgwMDE0MDAwMEwsCS8qIExDUk1BU0tfTElORUNBUCAoMjAwLjAwMCBtcykgKi8NCisweDAxQkE1RTM1TCwJLyogVkNNX09IICgyNy4wMDAgdikgKi8NCisweDAwNTFFQjg1TCwJLyogVk9WX0JBVCAoNS4wMDAgdikgKi8NCisweDAwNDE4OTM3TCwJLyogVk9WX0dORCAoNC4wMDAgdikgKi8NCit9LCAgLyogRENGRUVEXzQ4Vl8yME1BICovDQorew0KKzB4MUM4QTAyNENMLAkvKiBTTE9QRV9WTElNICovDQorMHgxRUUwOEMxMUwsCS8qIFNMT1BFX1JGRUVEICovDQorMHgwMDQwQTBFMEwsCS8qIFNMT1BFX0lMSU0gKi8NCisweDFDOTQwRDcxTCwJLyogU0xPUEVfREVMVEExICovDQorMHgxREQ4N0EzRUwsCS8qIFNMT1BFX0RFTFRBMiAqLw0KKzB4MDVBMzg2MzNMLAkvKiBWX1ZMSU0gKDQ4LjAwMCB2KSAqLw0KKzB4MDUwRDI4MzlMLAkvKiBWX1JGRUVEICg0My4wMDAgdikgKi8NCisweDAzRkU3RjBGTCwJLyogVl9JTElNICAoMzQuMDAwIHYpICovDQorMHgwMTI0MUJDOUwsCS8qIENPTlNUX1JGRUVEICgxNS4wMDAgbUEpICovDQorMHgwMDc0NTM4RkwsCS8qIENPTlNUX0lMSU0gKDI1LjAwMCBtQSkgKi8NCisweDAwMkQ4RDk2TCwJLyogSV9WTElNICgwLjAwMCBtQSkgKi8NCisweDAwNUIwQUZCTCwJLyogTENST05ISyAoMTAuMDAwIG1BKSAqLw0KKzB4MDA2RDQwNjBMLAkvKiBMQ1JPRkZISyAoMTIuMDAwIG1BKSAqLw0KKzB4MDAwMDgwMDBMLAkvKiBMQ1JEQkkgKDUuMDAwIG1zKSAqLw0KKzB4MDA0OEQ1OTVMLAkvKiBMT05HSElUSCAoOC4wMDAgbUEpICovDQorMHgwMDNGQkFFMkwsCS8qIExPTkdMT1RIICg3LjAwMCBtQSkgKi8NCisweDAwMDA4MDAwTCwJLyogTE9OR0RCSSAoNS4wMDAgbXMpICovDQorMHgwMDBGMDAwMEwsCS8qIExDUk1BU0sgKDE1MC4wMDAgbXMpICovDQorMHgwMDA4MDAwMEwsCS8qIExDUk1BU0tfUE9MUkVWICg4MC4wMDAgbXMpICovDQorMHgwMDE0MDAwMEwsCS8qIExDUk1BU0tfU1RBVEUgKDIwMC4wMDAgbXMpICovDQorMHgwMDE0MDAwMEwsCS8qIExDUk1BU0tfTElORUNBUCAoMjAwLjAwMCBtcykgKi8NCisweDAxQkE1RTM1TCwJLyogVkNNX09IICgyNy4wMDAgdikgKi8NCisweDAwNTFFQjg1TCwJLyogVk9WX0JBVCAoNS4wMDAgdikgKi8NCisweDAwNDE4OTM3TCwJLyogVk9WX0dORCAoNC4wMDAgdikgKi8NCit9LCAgLyogRENGRUVEXzQ4Vl8yNU1BICovDQorew0KKzB4MUU2NTUxOTZMLAkvKiBTTE9QRV9WTElNICovDQorMHgwMDE5MDRFRkwsCS8qIFNMT1BFX1JGRUVEICovDQorMHgwMDQwQTBFMEwsCS8qIFNMT1BFX0lMSU0gKi8NCisweDFCNENBRDlFTCwJLyogU0xPUEVfREVMVEExICovDQorMHgxQkIwRjQ3Q0wsCS8qIFNMT1BFX0RFTFRBMiAqLw0KKzB4MDVBMzg2MzNMLAkvKiBWX1ZMSU0gKDQ4LjAwMCB2KSAqLw0KKzB4MDQzQUE0QTZMLAkvKiBWX1JGRUVEICgzNi4wMDAgdikgKi8NCisweDAyNTk3N0VBTCwJLyogVl9JTElNICAoMjAuMDAwIHYpICovDQorMHgwMDY4QjE5QUwsCS8qIENPTlNUX1JGRUVEICgxOC4wMDAgbUEpICovDQorMHgwMDVEMEZBNkwsCS8qIENPTlNUX0lMSU0gKDIwLjAwMCBtQSkgKi8NCisweDAwMkQ4RDk2TCwJLyogSV9WTElNICgwLjAwMCBtQSkgKi8NCisweDAwNUIwQUZCTCwJLyogTENST05ISyAoMTAuMDAwIG1BKSAqLw0KKzB4MDA2RDQwNjBMLAkvKiBMQ1JPRkZISyAoMTIuMDAwIG1BKSAqLw0KKzB4MDAwMDgwMDBMLAkvKiBMQ1JEQkkgKDUuMDAwIG1zKSAqLw0KKzB4MDA0OEQ1OTVMLAkvKiBMT05HSElUSCAoOC4wMDAgbUEpICovDQorMHgwMDNGQkFFMkwsCS8qIExPTkdMT1RIICg3LjAwMCBtQSkgKi8NCisweDAwMDA4MDAwTCwJLyogTE9OR0RCSSAoNS4wMDAgbXMpICovDQorMHgwMDBGMDAwMEwsCS8qIExDUk1BU0sgKDE1MC4wMDAgbXMpICovDQorMHgwMDA4MDAwMEwsCS8qIExDUk1BU0tfUE9MUkVWICg4MC4wMDAgbXMpICovDQorMHgwMDE0MDAwMEwsCS8qIExDUk1BU0tfU1RBVEUgKDIwMC4wMDAgbXMpICovDQorMHgwMDE0MDAwMEwsCS8qIExDUk1BU0tfTElORUNBUCAoMjAwLjAwMCBtcykgKi8NCisweDAxQkE1RTM1TCwJLyogVkNNX09IICgyNy4wMDAgdikgKi8NCisweDAwNTFFQjg1TCwJLyogVk9WX0JBVCAoNS4wMDAgdikgKi8NCisweDAwNDE4OTM3TCwJLyogVk9WX0dORCAoNC4wMDAgdikgKi8NCit9LCAgLyogRENGRUVEX1BTVE5fREVUXzEgKi8NCit7DQorMHgxQTEwNDMzRkwsCS8qIFNMT1BFX1ZMSU0gKi8NCisweDFDMjA2Mjc1TCwJLyogU0xPUEVfUkZFRUQgKi8NCisweDAwNDBBMEUwTCwJLyogU0xPUEVfSUxJTSAqLw0KKzB4MUMxRjQyNkZMLAkvKiBTTE9QRV9ERUxUQTEgKi8NCisweDFFQjUxNjI1TCwJLyogU0xPUEVfREVMVEEyICovDQorMHgwNDFDOTFEQkwsCS8qIFZfVkxJTSAoMzUuMDAwIHYpICovDQorMHgwM0UwNkM0M0wsCS8qIFZfUkZFRUQgKDMzLjAwMCB2KSAqLw0KKzB4MDM4NjMzRTBMLAkvKiBWX0lMSU0gICgzMC4wMDAgdikgKi8NCisweDAyMkU1REU1TCwJLyogQ09OU1RfUkZFRUQgKDEwLjAwMCBtQSkgKi8NCisweDAwNUQwRkE2TCwJLyogQ09OU1RfSUxJTSAoMjAuMDAwIG1BKSAqLw0KKzB4MDAyMTM3M0RMLAkvKiBJX1ZMSU0gKDAuMDAwIG1BKSAqLw0KKzB4MDA1QjBBRkJMLAkvKiBMQ1JPTkhLICgxMC4wMDAgbUEpICovDQorMHgwMDZENDA2MEwsCS8qIExDUk9GRkhLICgxMi4wMDAgbUEpICovDQorMHgwMDAwODAwMEwsCS8qIExDUkRCSSAoNS4wMDAgbXMpICovDQorMHgwMDQ4RDU5NUwsCS8qIExPTkdISVRIICg4LjAwMCBtQSkgKi8NCisweDAwM0ZCQUUyTCwJLyogTE9OR0xPVEggKDcuMDAwIG1BKSAqLw0KKzB4MDAwMDgwMDBMLAkvKiBMT05HREJJICg1LjAwMCBtcykgKi8NCisweDAwMEYwMDAwTCwJLyogTENSTUFTSyAoMTUwLjAwMCBtcykgKi8NCisweDAwMDgwMDAwTCwJLyogTENSTUFTS19QT0xSRVYgKDgwLjAwMCBtcykgKi8NCisweDAwMTQwMDAwTCwJLyogTENSTUFTS19TVEFURSAoMjAwLjAwMCBtcykgKi8NCisweDAwMTQwMDAwTCwJLyogTENSTUFTS19MSU5FQ0FQICgyMDAuMDAwIG1zKSAqLw0KKzB4MDFCQTVFMzVMLAkvKiBWQ01fT0ggKDI3LjAwMCB2KSAqLw0KKzB4MDA1MUVCODVMLAkvKiBWT1ZfQkFUICg1LjAwMCB2KSAqLw0KKzB4MDA0MTg5MzdMLAkvKiBWT1ZfR05EICg0LjAwMCB2KSAqLw0KK30gICAvKiBEQ0ZFRURfUFNUTl9ERVRfMiAqLw0KK307DQorDQorU2kzMjE4eF9JbXBlZGFuY2VfQ2ZnIFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbXSA9ew0KKy8qIFNvdXJjZTogRGF0YWJhc2UgZmlsZTogY3dkYi5kYiAqLw0KKy8qIERhdGFiYXNlIGluZm9ybWF0aW9uOiAqLw0KKy8qIHBhcmFtZXRlcnM6IHpyZWY9NjAwXzBfMCBycHJvdD0zMCByZnVzZT0yNCBlbWlfY2FwPTEwKi8NCit7DQorezB4MDdGM0E0MDBMLCAweDAwMEZGMTgwTCwgMHgwMDAwOTM4MEwsIDB4MUZGREE4MDBMLCAgICAvKiBUWEFDRVEgKi8NCisgMHgwN0VGMTYwMEwsIDB4MDAxNEI1MDBMLCAweDFGRkQ2NTgwTCwgMHgxRkZDQTQwMEx9LCAgIC8qIFJYQUNFUSAqLw0KK3sweDAwMDhFRjAwTCwgMHgwMDA5OTc4MEwsIDB4MDE3REY2MDBMLCAweDAwOTZCOTAwTCwgICAgLyogRUNGSVIvRUNJSVIgKi8NCisgMHgwMjU0OTAwMEwsIDB4MUU0QjdEMDBMLCAweDAxOEVFRTAwTCwgMHgxRUVFMDYwMEwsDQorIDB4MDA4QTgwODBMLCAweDFGNzEzMDgwTCwgMHgwNDg5QkEwMEwsIDB4MDM1OTI1MDBMfSwNCit7MHgwMDg2Q0UwMEwsIDB4MUVGNDY5ODBMLCAweDAwODRDQjAwTCwgMHgwRkUzNEYwMEwsICAgIC8qIFpTWU5USCAqLw0KKyAweDE4MUNBNzgwTCwgMHg1RH0sIA0KKyAweDA4RUI4RTAwTCwgICAvKiBUWEFDR0FJTiAqLw0KKyAweDAxNTMyMTAwTCwgICAvKiBSWEFDR0FJTiAqLw0KKyAweDA3QUE3MTgwTCwgMHgxODU1OEYwMEwsIDB4MDc1NEUzMDBMLCAgICAvKiBSWEFDSFBGICovDQorI2lmZGVmIEVOQUJMRV9ISVJFU19HQUlODQorIDAsIDAgIC8qIFRYR0FJTioxMCwgUlhHQUlOKjEwIChoaV9yZXMpICovDQorI2Vsc2UNCisgMCwgMCAgLyogVFhHQUlOLCBSWEdBSU4gKi8NCisjZW5kaWYNCisgfSwgIC8qIFpTWU5fNjAwXzBfMF8zMF8wICovDQorLyogU291cmNlOiBEYXRhYmFzZSBmaWxlOiBjd2RiLmRiICovDQorLyogRGF0YWJhc2UgaW5mb3JtYXRpb246ICovDQorLyogcGFyYW1ldGVyczogenJlZj0yNzBfNzUwXzE1MCBycHJvdD0zMCByZnVzZT0yNCBlbWlfY2FwPTEwKi8NCit7DQorezB4MDc1MEU1MDBMLCAweDFGQzcwMjgwTCwgMHgwMDBCQTk4MEwsIDB4MUZGRDI4ODBMLCAgICAvKiBUWEFDRVEgKi8NCisgMHgwQThFMjM4MEwsIDB4MUI5MDUyODBMLCAweDAwODQ3NzAwTCwgMHgxRkRBRkEwMEx9LCAgIC8qIFJYQUNFUSAqLw0KK3sweDAwMkM4ODgwTCwgMHgxRjYzMEQ4MEwsIDB4MDI3Rjc5ODBMLCAweDFGM0FEMjAwTCwgICAgLyogRUNGSVIvRUNJSVIgKi8NCisgMHgwNDBCODY4MEwsIDB4MUY0MTREMDBMLCAweDAxNDI3QjAwTCwgMHgwMDIwODIwMEwsDQorIDB4MDAyNkFFMDBMLCAweDFGRDcxNjgwTCwgMHgwQzhFREIwMEwsIDB4MUI2ODhBMDBMfSwNCit7MHgxRjY1Nzk4MEwsIDB4MDA5NkZFMDBMLCAweDAwMDM1NTAwTCwgMHgwRDdGRTgwMEwsICAgIC8qIFpTWU5USCAqLw0KKyAweDFBN0YxQTgwTCwgMHhCNH0sIA0KKyAweDA4MDAwMDAwTCwgICAvKiBUWEFDR0FJTiAqLw0KKyAweDAxMTA2QjgwTCwgICAvKiBSWEFDR0FJTiAqLw0KKyAweDA3QkM4NDAwTCwgMHgxODQzN0M4MEwsIDB4MDc3OTA4ODBMLCAgICAvKiBSWEFDSFBGICovDQorI2lmZGVmIEVOQUJMRV9ISVJFU19HQUlODQorIDAsIDAgIC8qIFRYR0FJTioxMCwgUlhHQUlOKjEwIChoaV9yZXMpICovDQorI2Vsc2UNCisgMCwgMCAgLyogVFhHQUlOLCBSWEdBSU4gKi8NCisjZW5kaWYNCisgfSwgIC8qIFpTWU5fMjcwXzc1MF8xNTBfMzBfMCAqLw0KKy8qIFNvdXJjZTogRGF0YWJhc2UgZmlsZTogY3dkYi5kYiAqLw0KKy8qIERhdGFiYXNlIGluZm9ybWF0aW9uOiAqLw0KKy8qIHBhcmFtZXRlcnM6IHpyZWY9MzcwXzYyMF8zMTAgcnByb3Q9MzAgcmZ1c2U9MjQgZW1pX2NhcD0xMCovDQorew0KK3sweDA4MzYzQzgwTCwgMHgxRkIwMzIwMEwsIDB4MUZGQkQyMDBMLCAweDFGRkM3QTAwTCwgICAgLyogVFhBQ0VRICovDQorIDB4MEEwRDA4MDBMLCAweDFCRUIwODgwTCwgMHgxRjlERjA4MEwsIDB4MUZFMDdGMDBMfSwgICAvKiBSWEFDRVEgKi8NCit7MHgwMDIzNjM4MEwsIDB4MUY5NDdEMDBMLCAweDAyMERFMzgwTCwgMHgxRkJFRUQwMEwsICAgIC8qIEVDRklSL0VDSUlSICovDQorIDB4MDMwNTAzMDBMLCAweDFGN0QxRDAwTCwgMHgwMTBBOUY4MEwsIDB4MDAzMjlEODBMLA0KKyAweDAwM0U0MTAwTCwgMHgxRkMwREYwMEwsIDB4MERBQURFODBMLCAweDFBNEYyNjAwTH0sDQorezB4MDAyMjYxMDBMLCAweDFGOEVFRTgwTCwgMHgwMDRFOUQwMEwsIDB4MEYwQjlCMDBMLCAgICAvKiBaU1lOVEggKi8NCisgMHgxOEYzRTU4MEwsIDB4OTl9LCANCisgMHgwODA4RDEwMEwsICAgLyogVFhBQ0dBSU4gKi8NCisgMHgwMTMxQkU4MEwsICAgLyogUlhBQ0dBSU4gKi8NCisgMHgwN0I1QzEwMEwsIDB4MTg0QTNGODBMLCAweDA3NkI4MjAwTCwgICAgLyogUlhBQ0hQRiAqLw0KKyNpZmRlZiBFTkFCTEVfSElSRVNfR0FJTg0KKyAwLCAwICAvKiBUWEdBSU4qMTAsIFJYR0FJTioxMCAoaGlfcmVzKSAqLw0KKyNlbHNlDQorIDAsIDAgIC8qIFRYR0FJTiwgUlhHQUlOICovDQorI2VuZGlmDQorIH0sICAvKiBaU1lOXzM3MF82MjBfMzEwXzMwXzAgKi8NCisvKiBTb3VyY2U6IERhdGFiYXNlIGZpbGU6IGN3ZGIuZGIgKi8NCisvKiBEYXRhYmFzZSBpbmZvcm1hdGlvbjogKi8NCisvKiBwYXJhbWV0ZXJzOiB6cmVmPTIyMF84MjBfMTIwIHJwcm90PTMwIHJmdXNlPTI0IGVtaV9jYXA9MTAqLw0KK3sNCit7MHgwNzE5NEI4MEwsIDB4MUZDNjM4MDBMLCAweDAwMDhEMjgwTCwgMHgxRkZDMDYwMEwsICAgIC8qIFRYQUNFUSAqLw0KKyAweDBBODQ5NjgwTCwgMHgxQkIwNDQ4MEwsIDB4MDBBNEFBMDBMLCAweDFGRDNFNjgwTH0sICAgLyogUlhBQ0VRICovDQorezB4MDAxQjhDMDBMLCAweDFGQzY1NDAwTCwgMHgwMTZBNUYwMEwsIDB4MDEzMjNDODBMLCAgICAvKiBFQ0ZJUi9FQ0lJUiAqLw0KKyAweDAxREI0OTgwTCwgMHgwMTQ4NDcwMEwsIDB4MDAyNTgwMDBMLCAweDAwN0U5QzgwTCwNCisgMHgwMDE2RkYwMEwsIDB4MUZFNjkxMDBMLCAweDBDRTlBNDAwTCwgMHgxQjBFQTk4MEx9LA0KK3sweDAwQjNEODAwTCwgMHgxRDJGODI4MEwsIDB4MDIxQzhCMDBMLCAweDBBMTU3RjAwTCwgICAgLyogWlNZTlRIICovDQorIDB4MURFOTlFODBMLCAweEFEfSwgDQorIDB4MDgwMDAwMDBMLCAgIC8qIFRYQUNHQUlOICovDQorIDB4MDEwODQ2ODBMLCAgIC8qIFJYQUNHQUlOICovDQorIDB4MDdCQkZBODBMLCAweDE4NDQwNjAwTCwgMHgwNzc3RjU4MEwsICAgIC8qIFJYQUNIUEYgKi8NCisjaWZkZWYgRU5BQkxFX0hJUkVTX0dBSU4NCisgMCwgMCAgLyogVFhHQUlOKjEwLCBSWEdBSU4qMTAgKGhpX3JlcykgKi8NCisjZWxzZQ0KKyAwLCAwICAvKiBUWEdBSU4sIFJYR0FJTiAqLw0KKyNlbmRpZg0KKyB9LCAgLyogWlNZTl8yMjBfODIwXzEyMF8zMF8wICovDQorLyogU291cmNlOiBEYXRhYmFzZSBmaWxlOiBjd2RiLmRiICovDQorLyogRGF0YWJhc2UgaW5mb3JtYXRpb246ICovDQorLyogcGFyYW1ldGVyczogenJlZj02MDBfMF8wIHJwcm90PTMwIHJmdXNlPTI0IGVtaV9jYXA9MTAqLw0KK3sNCit7MHgwN0YzQTQwMEwsIDB4MDAwRkYxODBMLCAweDAwMDA5MzgwTCwgMHgxRkZEQTgwMEwsICAgIC8qIFRYQUNFUSAqLw0KKyAweDA3RUYxNjAwTCwgMHgwMDE0QjUwMEwsIDB4MUZGRDY1ODBMLCAweDFGRkNBNDAwTH0sICAgLyogUlhBQ0VRICovDQorezB4MDAwOEVGMDBMLCAweDAwMDk5NzgwTCwgMHgwMTdERjYwMEwsIDB4MDA5NkI5MDBMLCAgICAvKiBFQ0ZJUi9FQ0lJUiAqLw0KKyAweDAyNTQ5MDAwTCwgMHgxRTRCN0QwMEwsIDB4MDE4RUVFMDBMLCAweDFFRUUwNjAwTCwNCisgMHgwMDhBODA4MEwsIDB4MUY3MTMwODBMLCAweDA0ODlCQTAwTCwgMHgwMzU5MjUwMEx9LA0KK3sweDAwODZDRTAwTCwgMHgxRUY0Njk4MEwsIDB4MDA4NENCMDBMLCAweDBGRTM0RjAwTCwgICAgLyogWlNZTlRIICovDQorIDB4MTgxQ0E3ODBMLCAweDVEfSwgDQorIDB4MDhFQjhFMDBMLCAgIC8qIFRYQUNHQUlOICovDQorIDB4MDE1MzIxMDBMLCAgIC8qIFJYQUNHQUlOICovDQorIDB4MDdBQTcxODBMLCAweDE4NTU4RjAwTCwgMHgwNzU0RTMwMEwsICAgIC8qIFJYQUNIUEYgKi8NCisjaWZkZWYgRU5BQkxFX0hJUkVTX0dBSU4NCisgMCwgMCAgLyogVFhHQUlOKjEwLCBSWEdBSU4qMTAgKGhpX3JlcykgKi8NCisjZWxzZQ0KKyAwLCAwICAvKiBUWEdBSU4sIFJYR0FJTiAqLw0KKyNlbmRpZg0KKyB9LCAgLyogWlNZTl82MDBfMF8xMDAwXzMwXzAgKi8NCisvKiBTb3VyY2U6IERhdGFiYXNlIGZpbGU6IGN3ZGIuZGIgKi8NCisvKiBEYXRhYmFzZSBpbmZvcm1hdGlvbjogKi8NCisvKiBwYXJhbWV0ZXJzOiB6cmVmPTIwMF82ODBfMTAwIHJwcm90PTMwIHJmdXNlPTI0IGVtaV9jYXA9MTAqLw0KK3sNCit7MHgwNzc4Qjk4MEwsIDB4MUZCOTdFMDBMLCAweDAwMDMwNzgwTCwgMHgxRkZDMjU4MEwsICAgIC8qIFRYQUNFUSAqLw0KKyAweDA5Q0MwNzgwTCwgMHgxRDEwNDQwMEwsIDB4MDA3NkNCODBMLCAweDFGREUzRDgwTH0sICAgLyogUlhBQ0VRICovDQorezB4MUZGNjRDMDBMLCAweDAwNDU2MjgwTCwgMHgwMEJFQzUwMEwsIDB4MDE0RDNFODBMLCAgICAvKiBFQ0ZJUi9FQ0lJUiAqLw0KKyAweDAyRUIyQjAwTCwgMHgxRTk4M0I4MEwsIDB4MDI5RUUyODBMLCAweDFFN0I3NDAwTCwNCisgMHgwMEQxOUE4MEwsIDB4MUYyOTNEODBMLCAweDA2MTE2RDAwTCwgMHgwMUQ1NUMwMEx9LA0KK3sweDAxMjQxNzAwTCwgMHgxQ0I1M0E4MEwsIDB4MDIyNjk0MDBMLCAweDBBMTRCQTAwTCwgICAgLyogWlNZTlRIICovDQorIDB4MURFOUQwODBMLCAweDk5fSwgDQorIDB4MDgwMDAwMDBMLCAgIC8qIFRYQUNHQUlOICovDQorIDB4MDExNTI0ODBMLCAgIC8qIFJYQUNHQUlOICovDQorIDB4MDdCOTZDMDBMLCAweDE4NDY5NDgwTCwgMHgwNzcyRDgwMEwsICAgIC8qIFJYQUNIUEYgKi8NCisjaWZkZWYgRU5BQkxFX0hJUkVTX0dBSU4NCisgMCwgMCAgLyogVFhHQUlOKjEwLCBSWEdBSU4qMTAgKGhpX3JlcykgKi8NCisjZWxzZQ0KKyAwLCAwICAvKiBUWEdBSU4sIFJYR0FJTiAqLw0KKyNlbmRpZg0KKyB9LCAgLyogWlNZTl8yMDBfNjgwXzEwMF8zMF8wICovDQorLyogU291cmNlOiBEYXRhYmFzZSBmaWxlOiBjd2RiLmRiICovDQorLyogRGF0YWJhc2UgaW5mb3JtYXRpb246ICovDQorLyogcGFyYW1ldGVyczogenJlZj0yMjBfODIwXzExNSBycHJvdD0zMCByZnVzZT0yNCBlbWlfY2FwPTEwKi8NCit7DQorezB4MDcwQUM3MDBMLCAweDFGQ0M3MjgwTCwgMHgwMDA5ODcwMEwsIDB4MUZGQ0UwODBMLCAgICAvKiBUWEFDRVEgKi8NCisgMHgwQTZBNjQwMEwsIDB4MUJFNDhCODBMLCAweDAwOUYzQjgwTCwgMHgxRkQ1NjAwMEx9LCAgIC8qIFJYQUNFUSAqLw0KK3sweDAwMzE0NzAwTCwgMHgxRjZDMUQ4MEwsIDB4MDIzNDc0ODBMLCAweDAwMTU4QjgwTCwgICAgLyogRUNGSVIvRUNJSVIgKi8NCisgMHgwMzE3M0QwMEwsIDB4MDA1OEU1ODBMLCAweDAwQTZEQTgwTCwgMHgwMDRCMDc4MEwsDQorIDB4MDAxQjEzMDBMLCAweDFGRTJERTgwTCwgMHgwQzMxMzE4MEwsIDB4MUJCN0ZFMDBMfSwNCit7MHgxRkQ5NTk4MEwsIDB4MUVDREU2ODBMLCAweDAxNTZGNjAwTCwgMHgwQTBDOTYwMEwsICAgIC8qIFpTWU5USCAqLw0KKyAweDFERUJGMDgwTCwgMHhCNH0sIA0KKyAweDA4MDAwMDAwTCwgICAvKiBUWEFDR0FJTiAqLw0KKyAweDAxMDY5QzgwTCwgICAvKiBSWEFDR0FJTiAqLw0KKyAweDA3QkVDQjgwTCwgMHgxODQxMzUwMEwsIDB4MDc3RDk3MDBMLCAgICAvKiBSWEFDSFBGICovDQorI2lmZGVmIEVOQUJMRV9ISVJFU19HQUlODQorIDAsIDAgIC8qIFRYR0FJTioxMCwgUlhHQUlOKjEwIChoaV9yZXMpICovDQorI2Vsc2UNCisgMCwgMCAgLyogVFhHQUlOLCBSWEdBSU4gKi8NCisjZW5kaWYNCisgfSwgIC8qIFpTWU5fMjIwXzgyMF8xMTVfMzBfMCAqLw0KKy8qIFNvdXJjZTogRGF0YWJhc2UgZmlsZTogY3dkYi5kYiAqLw0KKy8qIERhdGFiYXNlIGluZm9ybWF0aW9uOiAqLw0KKy8qIHBhcmFtZXRlcnM6IHpyZWY9NjAwXzBfMCBycHJvdD0zMCByZnVzZT0yNCBlbWlfY2FwPTAqLw0KK3sNCit7MHgwODFBNTMwMEwsIDB4MUZFMDBBMDBMLCAweDAwMDcxNTgwTCwgMHgxRkZFMjYwMEwsICAgIC8qIFRYQUNFUSAqLw0KKyAweDA3RjlBODAwTCwgMHgxRkZBN0Q4MEwsIDB4MUZGNTlFODBMLCAweDFGRkYxNDAwTH0sICAgLyogUlhBQ0VRICovDQorezB4MDA1MkRDODBMLCAweDFGNDU1NzgwTCwgMHgwMjk3QTA4MEwsIDB4MDAwNkQ5ODBMLCAgICAvKiBFQ0ZJUi9FQ0lJUiAqLw0KKyAweDAxOTVEQzAwTCwgMHgwMDBFMUU4MEwsIDB4MUZDNTM2ODBMLCAweDAwMDUwODAwTCwNCisgMHgwMDIzMzQwMEwsIDB4MUZFNkRDMDBMLCAweDFGQ0QxRTAwTCwgMHgxRkQyRkUwMEx9LA0KK3sweDAwN0I5QzAwTCwgMHgxRjI5NkM4MEwsIDB4MDA1QkNEMDBMLCAweDA5RjA3RjAwTCwgICAgLyogWlNZTlRIICovDQorIDB4MURGMzUwODBMLCAweDZGfSwgDQorIDB4MDhDMkRBODBMLCAgIC8qIFRYQUNHQUlOICovDQorIDB4MDE0OTVBODBMLCAgIC8qIFJYQUNHQUlOICovDQorIDB4MDdCRUNDODBMLCAweDE4NDEzNDAwTCwgMHgwNzdEOTkwMEwsICAgIC8qIFJYQUNIUEYgKi8NCisjaWZkZWYgRU5BQkxFX0hJUkVTX0dBSU4NCisgMCwgMCAgLyogVFhHQUlOKjEwLCBSWEdBSU4qMTAgKGhpX3JlcykgKi8NCisjZWxzZQ0KKyAwLCAwICAvKiBUWEdBSU4sIFJYR0FJTiAqLw0KKyNlbmRpZg0KKyB9ICAgLyogV0JfWlNZTl82MDBfMF8wXzIwXzAgKi8NCit9Ow0KKw0KK1NpMzIxOHhfRlNLX0NmZyBTaTMyMTh4X0ZTS19QcmVzZXRzW10gPXsNCit7DQorew0KKzB4MDIyMzIwMDBMLAkgLyogRlNLMDEgKi8NCisweDA3N0MyMDAwTCAJIC8qIEZTSzEwICovDQorfSwNCit7DQorMHgwMDE1QzAwMEwsCSAvKiBGU0tBTVAwICgwLjA4MCB2cm1zICkqLw0KKzB4MDAwQkEwMDBMIAkgLyogRlNLQU1QMSAoMC4wODAgdnJtcykgKi8NCit9LA0KK3sNCisweDA2QjYwMDAwTCwJIC8qIEZTS0ZSRVEwICgyMjAwLjAgSHogc3BhY2UpICovDQorMHgwNzlDMDAwMEwgCSAvKiBGU0tGUkVRMSAoMTIwMC4wIEh6IG1hcmspICovDQorfSwNCisweDAwLAkJCSAvKiBGU0s4ICovDQorMHgwMCwJCQkgLyogRlNLREVQVEggKDEgZGVlcCBmaWZvKSAqLw0KK30sICAvKiBERUZBVUxUX0ZTSyAqLw0KK3sNCit7DQorMHgwMjZFNDAwMEwsCSAvKiBGU0swMSAqLw0KKzB4MDY5NEMwMDBMIAkgLyogRlNLMTAgKi8NCit9LA0KK3sNCisweDAwMTRDMDAwTCwJIC8qIEZTS0FNUDAgKDAuMDgwIHZybXMgKSovDQorMHgwMDBDQTAwMEwgCSAvKiBGU0tBTVAxICgwLjA4MCB2cm1zKSAqLw0KK30sDQorew0KKzB4MDZEMjAwMDBMLAkgLyogRlNLRlJFUTAgKDIxMDAuMCBIeiBzcGFjZSkgKi8NCisweDA3OEIwMDAwTCAJIC8qIEZTS0ZSRVExICgxMzAwLjAgSHogbWFyaykgKi8NCit9LA0KKzB4MDAsCQkJIC8qIEZTSzggKi8NCisweDAwLAkJCSAvKiBGU0tERVBUSCAoMSBkZWVwIGZpZm8pICovDQorfSAgIC8qIEVUU0lfRlNLICovDQorfTsNCisNCitTaTMyMTh4X1B1bHNlTWV0ZXJfQ2ZnIFNpMzIxOHhfUHVsc2VNZXRlcl9QcmVzZXRzW10gPXsNCit7DQorMHgwMDdBMkI2QUwsICAvKiBQTV9BTVBfVEhSRVNIICgxLjAwMCkgKi8NCiswLCAgICAgICAgICAgIC8qIEZyZXEgKDEya0h6KSAqLyANCiswLCAgICAgICAgICAgIC8qIFBNX0FVVE8gKG9mZikqLw0KKzB4MDdEMDAwMDBMLCAgLyogUE1fYWN0aXZlICgyMDAwIG1zKSAqLw0KKzB4MDdEMDAwMDBMICAgLyogUE1faW5hY3RpdmUgKDIwMDAgbXMpICovDQorIH0gICAvKiBERUZBVUxUX1BVTFNFX01FVEVSSU5HICovDQorfTsNCisNCitTaTMyMTh4X1RvbmVfQ2ZnIFNpMzIxOHhfVG9uZV9QcmVzZXRzW10gPSB7DQorew0KKwl7DQorCTB4MDdCMzAwMDBMLAkgLyogT1NDMUZSRVEgKDM1MC4wMDAgSHopICovDQorCTB4MDAwQzYwMDBMLAkgLyogT1NDMUFNUCAoLTE4LjAwMCBkQm0pICovDQorCTB4MDAwMDAwMDBMLAkgLyogT1NDMVBIQVMgKDAuMDAwIHJhZCkgKi8NCisJMHgwMCwJCQkgLyogTzFUQUxPICgwIG1zKSAqLw0KKwkweDAwLAkJCSAvKiBPMVRBSEkgKi8NCisJMHgwMCwJCQkgLyogTzFUSUxPICgwIG1zKSAqLw0KKwkweDAwCQkJIC8qIE8xVElISSAqLw0KKwl9LA0KKwl7DQorCTB4MDc4NzAwMDBMLAkgLyogT1NDMkZSRVEgKDQ0MC4wMDAgSHopICovDQorCTB4MDAwRkEwMDBMLAkgLyogT1NDMkFNUCAoLTE4LjAwMCBkQm0pICovDQorCTB4MDAwMDAwMDBMLAkgLyogT1NDMlBIQVMgKDAuMDAwIHJhZCkgKi8NCisJMHgwMCwJCQkgLyogTzJUQUxPICgwIG1zKSAqLw0KKwkweDAwLAkJCSAvKiBPMlRBSEkgKi8NCisJMHgwMCwJCQkgLyogTzJUSUxPICgwIG1zKSAqLw0KKwkweDAwIAkJCSAvKiBPMlRJSEkgKi8NCisJfSwNCisJMHg2NiAJCQkgLyogT01PREUgKi8NCit9LCAgLyogVE9ORUdFTl9GQ0NfRElBTCAqLw0KK3sNCisJew0KKwkweDA3NzAwMDAwTCwJIC8qIE9TQzFGUkVRICg0ODAuMDAwIEh6KSAqLw0KKwkweDAwMTEyMDAwTCwJIC8qIE9TQzFBTVAgKC0xOC4wMDAgZEJtKSAqLw0KKwkweDAwMDAwMDAwTCwJIC8qIE9TQzFQSEFTICgwLjAwMCByYWQpICovDQorCTB4QTAsCQkJIC8qIE8xVEFMTyAoNTAwIG1zKSAqLw0KKwkweDBGLAkJCSAvKiBPMVRBSEkgKi8NCisJMHhBMCwJCQkgLyogTzFUSUxPICg1MDAgbXMpICovDQorCTB4MEYJCQkgLyogTzFUSUhJICovDQorCX0sDQorCXsNCisJMHgwNzEyMDAwMEwsCSAvKiBPU0MyRlJFUSAoNjIwLjAwMCBIeikgKi8NCisJMHgwMDE2NDAwMEwsCSAvKiBPU0MyQU1QICgtMTguMDAwIGRCbSkgKi8NCisJMHgwMDAwMDAwMEwsCSAvKiBPU0MyUEhBUyAoMC4wMDAgcmFkKSAqLw0KKwkweEEwLAkJCSAvKiBPMlRBTE8gKDUwMCBtcykgKi8NCisJMHgwRiwJCQkgLyogTzJUQUhJICovDQorCTB4QTAsCQkJIC8qIE8yVElMTyAoNTAwIG1zKSAqLw0KKwkweDBGIAkJCSAvKiBPMlRJSEkgKi8NCisJfSwNCisJMHg2NiAJCQkgLyogT01PREUgKi8NCit9LCAgLyogVE9ORUdFTl9GQ0NfQlVTWSAqLw0KK3sNCisJew0KKwkweDA3NzAwMDAwTCwJIC8qIE9TQzFGUkVRICg0ODAuMDAwIEh6KSAqLw0KKwkweDAwMTEyMDAwTCwJIC8qIE9TQzFBTVAgKC0xOC4wMDAgZEJtKSAqLw0KKwkweDAwMDAwMDAwTCwJIC8qIE9TQzFQSEFTICgwLjAwMCByYWQpICovDQorCTB4ODAsCQkJIC8qIE8xVEFMTyAoMjAwMCBtcykgKi8NCisJMHgzRSwJCQkgLyogTzFUQUhJICovDQorCTB4MDAsCQkJIC8qIE8xVElMTyAoNDAwMCBtcykgKi8NCisJMHg3RAkJCSAvKiBPMVRJSEkgKi8NCisJfSwNCisJew0KKwkweDA3ODcwMDAwTCwJIC8qIE9TQzJGUkVRICg0NDAuMDAwIEh6KSAqLw0KKwkweDAwMEZBMDAwTCwJIC8qIE9TQzJBTVAgKC0xOC4wMDAgZEJtKSAqLw0KKwkweDAwMDAwMDAwTCwJIC8qIE9TQzJQSEFTICgwLjAwMCByYWQpICovDQorCTB4ODAsCQkJIC8qIE8yVEFMTyAoMjAwMCBtcykgKi8NCisJMHgzRSwJCQkgLyogTzJUQUhJICovDQorCTB4MDAsCQkJIC8qIE8yVElMTyAoNDAwMCBtcykgKi8NCisJMHg3RCAJCQkgLyogTzJUSUhJICovDQorCX0sDQorCTB4NjYgCQkJIC8qIE9NT0RFICovDQorfSwgIC8qIFRPTkVHRU5fRkNDX1JJTkdCQUNLICovDQorew0KKwl7DQorCTB4MDc3MDAwMDBMLAkgLyogT1NDMUZSRVEgKDQ4MC4wMDAgSHopICovDQorCTB4MDAxMTIwMDBMLAkgLyogT1NDMUFNUCAoLTE4LjAwMCBkQm0pICovDQorCTB4MDAwMDAwMDBMLAkgLyogT1NDMVBIQVMgKDAuMDAwIHJhZCkgKi8NCisJMHg2MCwJCQkgLyogTzFUQUxPICgzMDAgbXMpICovDQorCTB4MDksCQkJIC8qIE8xVEFISSAqLw0KKwkweDYwLAkJCSAvKiBPMVRJTE8gKDMwMCBtcykgKi8NCisJMHgwOQkJCSAvKiBPMVRJSEkgKi8NCisJfSwNCisJew0KKwkweDA3MTIwMDAwTCwJIC8qIE9TQzJGUkVRICg2MjAuMDAwIEh6KSAqLw0KKwkweDAwMTY0MDAwTCwJIC8qIE9TQzJBTVAgKC0xOC4wMDAgZEJtKSAqLw0KKwkweDAwMDAwMDAwTCwJIC8qIE9TQzJQSEFTICgwLjAwMCByYWQpICovDQorCTB4NjAsCQkJIC8qIE8yVEFMTyAoMzAwIG1zKSAqLw0KKwkweDA5LAkJCSAvKiBPMlRBSEkgKi8NCisJMHg0MCwJCQkgLyogTzJUSUxPICgyMDAgbXMpICovDQorCTB4MDYgCQkJIC8qIE8yVElISSAqLw0KKwl9LA0KKwkweDY2IAkJCSAvKiBPTU9ERSAqLw0KK30sICAvKiBUT05FR0VOX0ZDQ19SRU9SREVSICovDQorew0KKwl7DQorCTB4MDc3MDAwMDBMLAkgLyogT1NDMUZSRVEgKDQ4MC4wMDAgSHopICovDQorCTB4MDAxMTIwMDBMLAkgLyogT1NDMUFNUCAoLTE4LjAwMCBkQm0pICovDQorCTB4MDAwMDAwMDBMLAkgLyogT1NDMVBIQVMgKDAuMDAwIHJhZCkgKi8NCisJMHg0MCwJCQkgLyogTzFUQUxPICgyMDAgbXMpICovDQorCTB4MDYsCQkJIC8qIE8xVEFISSAqLw0KKwkweDQwLAkJCSAvKiBPMVRJTE8gKDIwMCBtcykgKi8NCisJMHgwNgkJCSAvKiBPMVRJSEkgKi8NCisJfSwNCisJew0KKwkweDA3MTIwMDAwTCwJIC8qIE9TQzJGUkVRICg2MjAuMDAwIEh6KSAqLw0KKwkweDAwMTY0MDAwTCwJIC8qIE9TQzJBTVAgKC0xOC4wMDAgZEJtKSAqLw0KKwkweDAwMDAwMDAwTCwJIC8qIE9TQzJQSEFTICgwLjAwMCByYWQpICovDQorCTB4NDAsCQkJIC8qIE8yVEFMTyAoMjAwIG1zKSAqLw0KKwkweDA2LAkJCSAvKiBPMlRBSEkgKi8NCisJMHg0MCwJCQkgLyogTzJUSUxPICgyMDAgbXMpICovDQorCTB4MDYgCQkJIC8qIE8yVElISSAqLw0KKwl9LA0KKwkweDY2IAkJCSAvKiBPTU9ERSAqLw0KK30sICAvKiBUT05FR0VOX0ZDQ19DT05HRVNUSU9OICovDQorew0KKwl7DQorCTB4MUYyRjAwMDBMLAkgLyogT1NDMUZSRVEgKDIxMzAuMDAwIEh6KSAqLw0KKwkweDAwNjNBMDAwTCwJIC8qIE9TQzFBTVAgKC0xOC4wMDAgZEJtKSAqLw0KKwkweDAwMDAwMDAwTCwJIC8qIE9TQzFQSEFTICgwLjAwMCByYWQpICovDQorCTB4ODAsCQkJIC8qIE8xVEFMTyAoODAgbXMpICovDQorCTB4MDIsCQkJIC8qIE8xVEFISSAqLw0KKwkweDgwLAkJCSAvKiBPMVRJTE8gKDgwIG1zKSAqLw0KKwkweDAyCQkJIC8qIE8xVElISSAqLw0KKwl9LA0KKwl7DQorCTB4MUI4RTAwMDBMLAkgLyogT1NDMkZSRVEgKDI3NTAuMDAwIEh6KSAqLw0KKwkweDAwQTg0MDAwTCwJIC8qIE9TQzJBTVAgKC0xOC4wMDAgZEJtKSAqLw0KKwkweDAwMDAwMDAwTCwJIC8qIE9TQzJQSEFTICgwLjAwMCByYWQpICovDQorCTB4ODAsCQkJIC8qIE8yVEFMTyAoODAgbXMpICovDQorCTB4MDIsCQkJIC8qIE8yVEFISSAqLw0KKwkweDQwLAkJCSAvKiBPMlRJTE8gKDEwMDAgbXMpICovDQorCTB4MUYgCQkJIC8qIE8yVElISSAqLw0KKwl9LA0KKwkweDY2IAkJCSAvKiBPTU9ERSAqLw0KK30sICAvKiBUT05FR0VOX0ZDQ19DQVMgKi8NCit7DQorCXsNCisJMHgwNzg3MDAwMEwsCSAvKiBPU0MxRlJFUSAoNDQwLjAwMCBIeikgKi8NCisJMHgwMDBGQTAwMEwsCSAvKiBPU0MxQU1QICgtMTguMDAwIGRCbSkgKi8NCisJMHgwMDAwMDAwMEwsCSAvKiBPU0MxUEhBUyAoMC4wMDAgcmFkKSAqLw0KKwkweDYwLAkJCSAvKiBPMVRBTE8gKDMwMCBtcykgKi8NCisJMHgwOSwJCQkgLyogTzFUQUhJICovDQorCTB4MDAsCQkJIC8qIE8xVElMTyAoODAwMCBtcykgKi8NCisJMHhGQQkJCSAvKiBPMVRJSEkgKi8NCisJfSwNCisJew0KKwkweDFCOEUwMDAwTCwJIC8qIE9TQzJGUkVRICgyNzUwLjAwMCBIeikgKi8NCisJMHgwMEE4NDAwMEwsCSAvKiBPU0MyQU1QICgtMTguMDAwIGRCbSkgKi8NCisJMHgwMDAwMDAwMEwsCSAvKiBPU0MyUEhBUyAoMC4wMDAgcmFkKSAqLw0KKwkweDgwLAkJCSAvKiBPMlRBTE8gKDIwMDAgbXMpICovDQorCTB4M0UsCQkJIC8qIE8yVEFISSAqLw0KKwkweDAwLAkJCSAvKiBPMlRJTE8gKDQwMDAgbXMpICovDQorCTB4N0QgCQkJIC8qIE8yVElISSAqLw0KKwl9LA0KKwkweDA2IAkJCSAvKiBPTU9ERSAqLw0KK30sICAvKiBUT05FR0VOX0ZDQ19TQVMgKi8NCit7DQorCXsNCisJMHgxRjJGMDAwMEwsCSAvKiBPU0MxRlJFUSAoMjEzMC4wMDAgSHopICovDQorCTB4MDFCRDAwMDBMLAkgLyogT1NDMUFNUCAoLTUuMDAwIGRCbSkgKi8NCisJMHgwMDAwMDAwMEwsCSAvKiBPU0MxUEhBUyAoMC4wMDAgcmFkKSAqLw0KKwkweDIwLAkJCSAvKiBPMVRBTE8gKDEwMCBtcykgKi8NCisJMHgwMywJCQkgLyogTzFUQUhJICovDQorCTB4MjAsCQkJIC8qIE8xVElMTyAoMTAwIG1zKSAqLw0KKwkweDAzCQkJIC8qIE8xVElISSAqLw0KKwl9LA0KKwl7DQorCTB4MUI4RTAwMDBMLAkgLyogT1NDMkZSRVEgKDI3NTAuMDAwIEh6KSAqLw0KKwkweDAyRUZDMDAwTCwJIC8qIE9TQzJBTVAgKC01LjAwMCBkQm0pICovDQorCTB4MDAwMDAwMDBMLAkgLyogT1NDMlBIQVMgKDAuMDAwIHJhZCkgKi8NCisJMHgyMCwJCQkgLyogTzJUQUxPICgxMDAgbXMpICovDQorCTB4MDMsCQkJIC8qIE8yVEFISSAqLw0KKwkweDIwLAkJCSAvKiBPMlRJTE8gKDEwMCBtcykgKi8NCisJMHgwMyAJCQkgLyogTzJUSUhJICovDQorCX0sDQorCTB4NjYgCQkJIC8qIE9NT0RFICovDQorfSwgIC8qIFRPTkVHRU5fRVRTSV9EVEFTICovDQorew0KKwl7DQorCTB4MDVBNDAwMDBMLAkgLyogT1NDMUZSRVEgKDEwMDQuMDAwIEh6KSAqLw0KKwkweDAwNURFMDAwTCwJIC8qIE9TQzFBTVAgKC0xMC4wMDAgZEJtKSAqLw0KKwkweDAwMDAwMDAwTCwJIC8qIE9TQzFQSEFTICgwLjAwMCByYWQpICovDQorCTB4MDAsCQkJIC8qIE8xVEFMTyAoODAwMCBtcykgKi8NCisJMHhGQSwJCQkgLyogTzFUQUhJICovDQorCTB4MDAsCQkJIC8qIE8xVElMTyAoODAwMCBtcykgKi8NCisJMHhGQQkJCSAvKiBPMVRJSEkgKi8NCisJfSwNCisJew0KKwkweDA3ODcwMDAwTCwJIC8qIE9TQzJGUkVRICg0NDAuMDAwIEh6KSAqLw0KKwkweDAwMEZBMDAwTCwJIC8qIE9TQzJBTVAgKC0xOC4wMDAgZEJtKSAqLw0KKwkweDAwMDAwMDAwTCwJIC8qIE9TQzJQSEFTICgwLjAwMCByYWQpICovDQorCTB4ODAsCQkJIC8qIE8yVEFMTyAoMjAwMCBtcykgKi8NCisJMHgzRSwJCQkgLyogTzJUQUhJICovDQorCTB4MDAsCQkJIC8qIE8yVElMTyAoNDAwMCBtcykgKi8NCisJMHg3RCAJCQkgLyogTzJUSUhJICovDQorCX0sDQorCTB4NDcgCQkJIC8qIE9NT0RFICovDQorfSAgIC8qIFRPTkVHRU5fMTAwNCAqLw0KK307DQorDQorU2kzMjE4eF9QQ01fQ2ZnIFNpMzIxOHhfUENNX1ByZXNldHNbXSA9ew0KKwl7DQorCTB4MDEsIAkgLyogUENNX0ZNVCAtIHUtTGF3ICovDQorCTB4MDAsIAkgLyogV0lERUJBTkQgLSBESVNBQkxFRCAoMy40a0h6IEJXKSAqLw0KKwkweDAwLCAJIC8qIFBDTV9UUkkgLSBQQ0xLIFJJU0lORyBFREdFICovDQorCTB4MDAsIAkgLyogVFhfRURHRSAtIFBDTEsgUklTSU5HIEVER0UgKi8NCisJMHgwMCAJIC8qIEEtTEFXIC0gIElOVkVSVCBOT05FICovDQorCX0sICAvKiBQQ01fOFVMQVcgKi8NCisJew0KKwkweDAwLCAJIC8qIFBDTV9GTVQgLSBBLUxhdyAqLw0KKwkweDAwLCAJIC8qIFdJREVCQU5EIC0gRElTQUJMRUQgKDMuNGtIeiBCVykgKi8NCisJMHgwMCwgCSAvKiBQQ01fVFJJIC0gUENMSyBSSVNJTkcgRURHRSAqLw0KKwkweDAwLCAJIC8qIFRYX0VER0UgLSBQQ0xLIFJJU0lORyBFREdFICovDQorCTB4MDAgCSAvKiBBLUxBVyAtICBJTlZFUlQgTk9ORSAqLw0KKwl9LCAgLyogUENNXzhBTEFXICovDQorCXsNCisJMHgwMywgCSAvKiBQQ01fRk1UIC0gMTYtYml0IExpbmVhciAqLw0KKwkweDAwLCAJIC8qIFdJREVCQU5EIC0gRElTQUJMRUQgKDMuNGtIeiBCVykgKi8NCisJMHgwMCwgCSAvKiBQQ01fVFJJIC0gUENMSyBSSVNJTkcgRURHRSAqLw0KKwkweDAwLCAJIC8qIFRYX0VER0UgLSBQQ0xLIFJJU0lORyBFREdFICovDQorCTB4MDAgCSAvKiBBLUxBVyAtICBJTlZFUlQgTk9ORSAqLw0KKwl9LCAgLyogUENNXzE2TElOICovDQorCXsNCisJMHgwMywgCSAvKiBQQ01fRk1UIC0gMTYtYml0IExpbmVhciAqLw0KKwkweDAxLCAJIC8qIFdJREVCQU5EIC0gRU5BQkxFRCAoN2tIeiBCVykgKi8NCisJMHgwMCwgCSAvKiBQQ01fVFJJIC0gUENMSyBSSVNJTkcgRURHRSAqLw0KKwkweDAwLCAJIC8qIFRYX0VER0UgLSBQQ0xLIFJJU0lORyBFREdFICovDQorCTB4MDAgCSAvKiBBLUxBVyAtICBJTlZFUlQgTk9ORSAqLw0KKwl9ICAgLyogUENNXzE2TElOX1dCICovDQorfTsNCisNCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9zcmMvc2kzMjE4eF9pbnRmLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9zcmMvc2kzMjE4eF9pbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I3NzhmNQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL2NvZGVjcy9zaTMyMTh4L3NyYy9zaTMyMTh4X2ludGYuYwpAQCAtMCwwICsxLDMxMzUgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQorLyoNCisgKiBTSTMyMThYIFByb1NMSUMgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uIGZpbGUNCisgKg0KKyAqIEF1dGhvcihzKToNCisgKiBjZHANCisgKg0KKyAqIERpc3RyaWJ1dGVkIGJ5Og0KKyAqIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMNCisgKg0KKyAqIFRoaXMgZmlsZSBjb250YWlucyBwcm9wcmlldGFyeSBpbmZvcm1hdGlvbi4NCisgKiBObyBkaXNzZW1pbmF0aW9uIGFsbG93ZWQgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbQ0KKyAqIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuDQorICoNCisgKi8NCisNCisjaW5jbHVkZSAiLi4vY29uZmlnX2luYy9zaV92b2ljZV9kYXRhdHlwZXMuaCINCisjaW5jbHVkZSAiLi4vaW5jL3NpX3ZvaWNlX2N0cmwuaCINCisjaW5jbHVkZSAiLi4vaW5jL3NpX3ZvaWNlX3RpbWVyX2ludGYuaCINCisjaW5jbHVkZSAiLi4vaW5jL3Byb3NsaWMuaCINCisjaW5jbHVkZSAiLi4vaW5jL3NpMzIxOHguaCINCisjaW5jbHVkZSAiLi4vaW5jL3NpMzIxOHhfaW50Zi5oIg0KKyNpbmNsdWRlICIuLi9pbmMvc2kzMjE4eF9yZWdpc3RlcnMuaCINCisjaW5jbHVkZSAiLi4vY29uZmlnX2luYy9wcm9zbGljX2FwaV9jb25maWcuaCINCisNCisjZGVmaW5lIFNJMzIxOFhfSVJJTkdfTElNX01BWCAweEEwMDAwMEwgICAvKiAxMDNtQSAqLw0KKyNkZWZpbmUgU0kzMjE4WF9SRVZBICAgMg0KKw0KKyNkZWZpbmUgV3JpdGVSZWcgICAgICAgIHBQcm9zbGljLT5kZXZpY2VJZC0+Y3RybEludGVyZmFjZS0+V3JpdGVSZWdpc3Rlcl9mcHRyDQorI2RlZmluZSBSZWFkUmVnICAgICAgICAgcFByb3NsaWMtPmRldmljZUlkLT5jdHJsSW50ZXJmYWNlLT5SZWFkUmVnaXN0ZXJfZnB0cg0KKyNkZWZpbmUgcFByb0hXICAgICAgICAgIHBQcm9zbGljLT5kZXZpY2VJZC0+Y3RybEludGVyZmFjZS0+aEN0cmwNCisjZGVmaW5lIFJlc2V0ICAgICAgICAgICBwUHJvc2xpYy0+ZGV2aWNlSWQtPmN0cmxJbnRlcmZhY2UtPlJlc2V0X2ZwdHINCisjZGVmaW5lIERlbGF5ICAgICAgICAgICBwUHJvc2xpYy0+ZGV2aWNlSWQtPmN0cmxJbnRlcmZhY2UtPkRlbGF5X2ZwdHINCisjZGVmaW5lIHBQcm9UaW1lciAgICAgICBwUHJvc2xpYy0+ZGV2aWNlSWQtPmN0cmxJbnRlcmZhY2UtPmhUaW1lcg0KKyNkZWZpbmUgV3JpdGVSQU0gICAgICAgIHBQcm9zbGljLT5kZXZpY2VJZC0+Y3RybEludGVyZmFjZS0+V3JpdGVSQU1fZnB0cg0KKyNkZWZpbmUgUmVhZFJBTSAgICAgICAgIHBQcm9zbGljLT5kZXZpY2VJZC0+Y3RybEludGVyZmFjZS0+UmVhZFJBTV9mcHRyDQorI2RlZmluZSBUaW1lRWxhcHNlZCAgICAgcFByb3NsaWMtPmRldmljZUlkLT5jdHJsSW50ZXJmYWNlLT50aW1lRWxhcHNlZF9mcHRyDQorI2RlZmluZSBnZXRUaW1lICAgICAgICAgcFByb3NsaWMtPmRldmljZUlkLT5jdHJsSW50ZXJmYWNlLT5nZXRUaW1lX2ZwdHINCisNCisjZGVmaW5lIFdyaXRlUmVnWCAgICAgICBkZXZpY2VJZC0+Y3RybEludGVyZmFjZS0+V3JpdGVSZWdpc3Rlcl9mcHRyDQorI2RlZmluZSBSZWFkUmVnWCAgICAgICAgZGV2aWNlSWQtPmN0cmxJbnRlcmZhY2UtPlJlYWRSZWdpc3Rlcl9mcHRyDQorI2RlZmluZSBwUHJvSFdYICAgICAgICAgZGV2aWNlSWQtPmN0cmxJbnRlcmZhY2UtPmhDdHJsDQorI2RlZmluZSBEZWxheVggICAgICAgICAgZGV2aWNlSWQtPmN0cmxJbnRlcmZhY2UtPkRlbGF5X2ZwdHINCisjZGVmaW5lIHBQcm9UaW1lclggICAgICBkZXZpY2VJZC0+Y3RybEludGVyZmFjZS0+aFRpbWVyDQorI2RlZmluZSBSZWFkUkFNWCAgICAgICAgZGV2aWNlSWQtPmN0cmxJbnRlcmZhY2UtPlJlYWRSQU1fZnB0cg0KKyNkZWZpbmUgV3JpdGVSQU1YICAgICAgIGRldmljZUlkLT5jdHJsSW50ZXJmYWNlLT5Xcml0ZVJBTV9mcHRyDQorDQorI2RlZmluZSBERVZJQ0VfS0VZX01JTiAgMHg2RQ0KKyNkZWZpbmUgREVWSUNFX0tFWV9NQVggIDB4NzcNCisNCisjaWZkZWYgRU5BQkxFX0RFQlVHDQorc3RhdGljIGNvbnN0IGNoYXIgTE9HUFJJTlRfUFJFRklYW10gPSAiU2kzMjE4eDogIjsNCisjZW5kaWYNCisNCisvKg0KKyoqIEV4dGVybnMNCisqLw0KKw0KKy8qIEdlbmVyYWwgQ29uZmlndXJhdGlvbiAqLw0KK2V4dGVybiBTaTMyMTh4X0dlbmVyYWxfQ2ZnIFNpMzIxOHhfR2VuZXJhbF9Db25maWd1cmF0aW9uOw0KKyNpZmRlZiBTSVZPSUNFX01VTFRJX0JPTV9TVVBQT1JUDQorZXh0ZXJuIGNvbnN0IHByb3NsaWNQYXRjaCBTSTMyMThYX1BBVENIX0E7DQorZXh0ZXJuIFNpMzIxOHhfR2VuZXJhbF9DZmcgU2kzMjE4eF9HZW5lcmFsX0NvbmZpZ3VyYXRpb25fTXVsdGlCT01bXTsNCitleHRlcm4gaW50IHNpMzIxOHhfZ2VuY29uZl9tdWx0aV9tYXhfcHJlc2V0Ow0KKyNlbHNlDQorZXh0ZXJuIGNvbnN0IHByb3NsaWNQYXRjaCBTSTMyMThYX1BBVENIX0FfREVGQVVMVDsNCisjZW5kaWYNCisNCisvKiBSaW5naW5nICovDQorI2lmbmRlZiBESVNBQkxFX1JJTkdfU0VUVVANCitleHRlcm4gU2kzMjE4eF9SaW5nX0NmZyBTaTMyMTh4X1JpbmdfUHJlc2V0c1tdOw0KKyNlbmRpZg0KKw0KKy8qIFpzeW50aCAqLw0KKyNpZm5kZWYgRElTQUJMRV9aU1lOVEhfU0VUVVANCitleHRlcm4gU2kzMjE4eF9JbXBlZGFuY2VfQ2ZnIFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHMgW107DQorI2VuZGlmDQorDQorLyogQXVkaW8gR2FpbiBTY3JhdGNoICovDQorZXh0ZXJuIFNpMzIxOHhfYXVkaW9HYWluX0NmZyBTaTMyMTh4X2F1ZGlvR2Fpbl9QcmVzZXRzW107DQorDQorLyogUHVsc2UgTWV0ZXJpbmcgKi8NCisjaWZuZGVmIERJU0FCTEVfUFVMU0VfU0VUVVANCitleHRlcm4gU2kzMjE4eF9QdWxzZU1ldGVyX0NmZyBTaTMyMTh4X1B1bHNlTWV0ZXJfUHJlc2V0cyBbXTsNCisjZW5kaWYNCisNCisvKiBQQ00gKi8NCisjaWZuZGVmIERJU0FCTEVfUENNX1NFVFVQDQorZXh0ZXJuIFNpMzIxOHhfUENNX0NmZyBTaTMyMTh4X1BDTV9QcmVzZXRzIFtdOw0KKyNlbmRpZg0KKw0KKyNkZWZpbmUgU0kzMjE4WF9SQU1fRENEQ19EQ0ZGX0VOQUJMRSBTSTMyMThYX1JBTV9HRU5FUklDXzgNCisjZGVmaW5lIEdDT05GIFNpMzIxOHhfR2VuZXJhbF9Db25maWd1cmF0aW9uDQorDQorLyoNCisqKiBDb25zdGFudHMNCisqLw0KKyNkZWZpbmUgQklUMjBMU0IgICAgICAgICAgICAgICAgICAgICAgIDEwNDg1NzZMDQorI2RlZmluZSBPSVRIUkVTSF9PRkZTICAgICAgICAgICAgICAgICAgOTAwTA0KKyNkZWZpbmUgT0lUSFJFU0hfU0NBTEUgICAgICAgICAgICAgICAgIDEwMEwNCisjZGVmaW5lIE9WVEhSRVNIX09GRlMgICAgICAgICAgICAgICAgICA3MTAwMA0KKyNkZWZpbmUgT1ZUSFJFU0hfU0NBTEUgICAgICAgICAgICAgICAgIDMwMDBMDQorI2RlZmluZSBVVlRIUkVTSF9PRkZTICAgICAgICAgICAgICAgICAgNDA1N0wNCisjZGVmaW5lIFVWVEhSRVNIX1NDQUxFICAgICAgICAgICAgICAgICAxODdMDQorI2RlZmluZSBVVkhZU1RfT0ZGUyAgICAgICAgICAgICAgICAgICAgNTQ4TA0KKyNkZWZpbmUgVVZIWVNUX1NDQUxFICAgICAgICAgICAgICAgICAgIDQ3TA0KKw0KKy8qDQorKiogTG9jYWwgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGZpcnN0DQorKi8NCisNCisvKg0KKyoqIEZ1bmN0aW9uOiBnZXRDaGlwVHlwZQ0KKyoqDQorKiogRGVzY3JpcHRpb246DQorKiogRGVjb2RlIElEIHJlZ2lzdGVyIHRvIGlkZW50aWZ5IGNoaXAgdHlwZQ0KKyoqDQorKiogSW5wdXQgUGFyYW1ldGVyczoNCisqKiBJRCByZWdpc3RlciB2YWx1ZQ0KKyoqDQorKiogUmV0dXJuOg0KKyoqIHBhcnROdW1iZXJUeXBlDQorKi8NCitzdGF0aWMgcGFydE51bWJlclR5cGUgZ2V0Q2hpcFR5cGUodUludDggZGF0YSkNCit7DQorICAvKiBGb3IgdGhlIHBhcnRzIHRoYXQgaGF2ZSBhIEhWIHZhcmlhbnQsIHdlIG1hcCB0byB0aGUgbG93ZXIgdm9sdGFnZSB2ZXJzaW9uLA0KKyAgICAgdGhlIGFjdHVhbCBkaWZmZXJlbmNlcyBhcmUgaGFuZGxlZCBpbiB0aGUgY29uc3RhbnRzIGZpbGUNCisgICAqLw0KKw0KKyAgY29uc3QgdUludDggcGFydE51bXNbOF0gPQ0KKyAgew0KKyAgICBVTlNVUFBPUlRFRF9QQVJUX05VTSwgVU5TVVBQT1JURURfUEFSVF9OVU0sIFVOU1VQUE9SVEVEX1BBUlRfTlVNLCBVTlNVUFBPUlRFRF9QQVJUX05VTSwNCisgICAgU0kzMjE4NCwgU0kzMjE4MiwgU0kzMjE4NSwgU0kzMjE4Mw0KKyAgfTsNCisNCisgIHVJbnQ4IHBhcnROdW0gPSAoZGF0YSAmIDB4MzgpID4+IDM7IC8qIFBBUlRfTlVNWzI6MF0gPSBJRFs1OjNdICovDQorDQorICByZXR1cm4gcGFydE51bXNbIHBhcnROdW0gXTsNCit9DQorDQoraW50IFNpMzIxOHhfR2V0Q2hpcEluZm8ocHJvc2xpY0NoYW5UeXBlX3B0ciBwUHJvc2xpYykNCit7DQorICB1SW50OCBpZDsNCisgIGlkID0gUmVhZFJlZyhwUHJvSFcsIHBQcm9zbGljLT5jaGFubmVsLCBQUk9TTElDX1JFR19JRCk7DQorDQorICBwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBSZXYgPSBpZCAmIDB4NzsNCisgIHBQcm9zbGljLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPSBnZXRDaGlwVHlwZShpZCk7DQorDQorICBpZihwUHJvc2xpYy0+ZGV2aWNlSWQtPmNoaXBUeXBlICA9PSBVTlNVUFBPUlRFRF9QQVJUX05VTSkNCisgIHsNCisjaWZkZWYgRU5BQkxFX0RFQlVHDQorICAgIExPR1BSSU5UKCIlc3JlZ2lzdGVyIDAgcmVhZCA9IDB4JTAyWFxuIiwgTE9HUFJJTlRfUFJFRklYLCBpZCk7DQorI2VuZGlmDQorICAgIHJldHVybiBSQ19TUElfRkFJTDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgcmV0dXJuIFJDX05PTkU7DQorICB9DQorfQ0KKw0KKy8qDQorKiogRnVuY3Rpb246IFNpMzIxOHhfQ29udmVydGVyU2V0dXANCisqKg0KKyoqIERlc2NyaXB0aW9uOg0KKyoqIFByb2dyYW0gcmV2aXNpb24gc3BlY2lmaWMgc2V0dGluZ3MgYmVmb3JlIHBvd2VyaW5nIGNvbnZlcnRlcg0KKyoqDQorKiogU3BlY2lmaWNhbGx5LCBmcm9tIGdlbmVyYWwgcGFyYW1ldGVycyBhbmQga25vd2xlZGdlIHRoYXQgdGhpcw0KKyoqIGlzIFNpMzIxODh4LCBzZXR1cCBkY2ZmIGRyaXZlLCBnYXRlIGRyaXZlIHBvbGFyaXR5LCBhbmQgY2hhcmdlIHB1bXAuDQorKioNCisqKiBSZXR1cm5zOg0KKyoqIGludCAoZXJyb3IpDQorKioNCisqLw0KK2ludCBTaTMyMTh4X0NvbnZlcnRlclNldHVwKHByb3NsaWNDaGFuVHlwZV9wdHIgcFByb3NsaWMpDQorew0KKyAgcmFtRGF0YSBpbnZfb2ZmOw0KKw0KKyAgLyogT3B0aW9uIHRvIGFkZCBhIHBlci1jaGFubmVsIGludmVyc2lvbiBmb3IgbWF4aW11bSBmbGV4aWJpbGl0eSAqLw0KKyAgaWYocFByb3NsaWMtPmRjZGNfcG9sYXJpdHlfaW52ZXJ0KQ0KKyAgew0KKyAgICBpbnZfb2ZmID0gMHgxMDAwMDBMOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICBpbnZfb2ZmID0gMHgwTDsNCisgIH0NCisNCisgIHN3aXRjaChTaTMyMTh4X0dlbmVyYWxfQ29uZmlndXJhdGlvbi5ib21fb3B0aW9uKQ0KKyAgew0KKyAgICBjYXNlIEJPX0RDRENfTENRQ181VzoNCisgICAgY2FzZSBCT19EQ0RDX0xDQ0I6DQorICAgIGNhc2UgQk9fRENEQ19MQ0NCMTEwOg0KKyAgICAgIFdyaXRlUkFNKHBQcm9IVywgcFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fRENEQ19MSUZUX0VOLA0KKyAgICAgICAgICAgICAgIDB4MEwpOyAgICAgIC8qIGRjZmYgZGlzYWJsZWQgKi8NCisgICAgICBXcml0ZVJBTShwUHJvSFcsIHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX0RDRENfU1dEUlZfUE9MLA0KKyAgICAgICAgICAgICAgIGludl9vZmYpOyAgICAvKiBub24taW52ZXJ0ZWQgKi8NCisgICAgICBXcml0ZVJBTShwUHJvSFcsIHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX0RDRENfQ1BVTVAsDQorICAgICAgICAgICAgICAgMHgxMDAwMDBMKTsgICAvKiBDaGFyZ2UgcHVtcCBvbiAqLw0KKyAgICAgIERlbGF5KHBQcm9UaW1lciwyMCk7IC8qIENwdW1wIHNldHRsZSAqLw0KKyAgICAgIGJyZWFrOw0KKw0KKyAgICBjYXNlIEJPX0RDRENfQlVDS19CT09TVDoNCisgICAgICAvKg0KKyAgICAgICoqIFJldkMgYnVjay1ib29zdCBkZXNpZ25zIGFyZSBpZGVudGljYWwgdG8gUmV2QiAtIG5vIGdhdGUgZHJpdmUsDQorICAgICAgKiogZGNmZiBlbmFibGVkLCBub24taW52ZXJ0aW5nIChjaGFyZ2UgcHVtcCBvZmYpDQorICAgICAgKi8NCisgICAgICBXcml0ZVJBTShwUHJvSFcsIHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX0RDRENfQ1BVTVAsMHgwTCk7DQorICAgICAgV3JpdGVSQU0ocFByb0hXLCBwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9EQ0RDX1NXRFJWX1BPTCxpbnZfb2ZmKTsNCisgICAgICBXcml0ZVJBTShwUHJvSFcsIHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX0RDRENfTElGVF9FTiwNCisgICAgICAgICAgICAgICAweDEwMDAwMEwpOyAvKiBkY2ZmIGVuYWJsZWQgKi8NCisgICAgICBicmVhazsNCisNCisgICAgZGVmYXVsdDoNCisgICAgICByZXR1cm4gUkNfRENEQ19TRVRVUF9FUlI7DQorICB9DQorDQorICByZXR1cm4gUkNfTk9ORTsNCit9DQorDQorLyoNCisqKiBGdW5jdGlvbjogU2kzMjE4eF9Qb3dlclVwQ29udmVydGVyDQorKioNCisqKiBEZXNjcmlwdGlvbjoNCisqKiBQb3dlcnMgYWxsIERDL0RDIGNvbnZlcnRlcnMgc2VxdWVudGlhbGx5IHdpdGggZGVsYXkgdG8gbWluaW1pemUNCisqKiBwZWFrIHBvd2VyIGRyYXcgb24gVkRDLg0KKyoqDQorKiogUmV0dXJuczoNCisqKiBpbnQgKGVycm9yKQ0KKyoqDQorKi8NCisNCitpbnQgU2kzMjE4eF9Qb3dlclVwQ29udmVydGVyKHByb3NsaWNDaGFuVHlwZV9wdHIgcFByb3NsaWMpDQorew0KKyAgZXJyb3JDb2RlVHlwZSBlcnJvciA9IFJDX0RDRENfU0VUVVBfRVJSOw0KKyAgaW50MzIgdmJhdGgsdmJhdDsNCisgIHVJbnQ4IHJlZyA9IDA7DQorICBpbnQgdGltZXIgPSAwOw0KKw0KKw0KKyAgaWYocFByb3NsaWMtPmNoYW5uZWxUeXBlICE9IFBST1NMSUMpDQorICB7DQorICAgIHJldHVybiBSQ19DSEFOTkVMX1RZUEVfRVJSOw0KKyAgfQ0KKw0KKyAgLyoNCisgICoqIC0gcG93ZXJ1cCBkaWdpdGFsIGRjL2RjIHcvIE9WIGNsYW1waW5nIGFuZCBzaHV0ZG93bg0KKyAgKiogLSBkZWxheQ0KKyAgKiogLSB2ZXJpZnkgbm8gc2hvcnQgY2lyY3VpdHMgYnkgbG9va2luZyBmb3IgdmJhdGgvMg0KKyAgKiogLSBjbGVhciBkY2RjIHN0YXR1cw0KKyAgKiogLSBzd2l0Y2ggdG8gYW5hbG9nIGNvbnZlcnRlciB3aXRoIE9WIGNsYW1waW5nIG9ubHkgKG5vIHNodXRkb3duKQ0KKyAgKiogLSBzZWxlY3QgYW5hbG9nIGRjZGMgYW5kIGRpc2FibGUgcHdyc2F2ZQ0KKyAgKiogLSBkZWxheQ0KKyAgKi8NCisNCisgIFdyaXRlUmVnKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JFR19MSU5FRkVFRCwNCisgICAgICAgICAgIExGX0ZXRF9PSFQpOyAgLyogRm9yY2Ugb3V0IG9mIHB3cnNhdmUgbW9kZSBpZiBjYWxsZWQgaW4gZXJyb3IgKi8NCisgIFdyaXRlUmVnKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JFR19MSU5FRkVFRCwNCisgICAgICAgICAgIExGX09QRU4pOyAgICAgLyogRW5zdXJlIG9wZW4gbGluZSBiZWZvcmUgcG93ZXJpbmcgdXAgY29udmVydGVyICovDQorICByZWcgPSBSZWFkUmVnKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JFR19FTkhBTkNFKTsNCisgIFdyaXRlUmVnKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JFR19FTkhBTkNFLA0KKyAgICAgICAgICAgcmVnJjB4MDcpOyAgLyogRGlzYWJsZSBwb3dlcnNhdmUgbW9kZSAqLw0KKw0KKyAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1BEX0RDREMsDQorICAgICAgICAgICAweDcwMDAwMEwpOyAvKiBJbiBjYXNlIE9WIG9yIFVWIHByZXZpb3VzbHkgb2NjdXJyZWQgKi8NCisNCisgIC8qDQorICAqKiBTZXR1cCBjb252ZXJ0ZXIgZHJpdmUgcG9sYXJpdHkgYW5kIGNoYXJnZSBwdW1wIGVuYWJsZQ0KKyAgKiogYmFzZWQgb24gYm9tDQorICAqLw0KKw0KKyAgZXJyb3IgPSBTaTMyMTh4X0NvbnZlcnRlclNldHVwKHBQcm9zbGljKTsNCisNCisgIGlmKGVycm9yICE9IFJDX05PTkUpDQorICB7DQorICAgIERFQlVHX1BSSU5UIChwUHJvc2xpYywgIiVzQ2hhbm5lbCAlZCA6IERDREMgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iLA0KKyAgICAgICAgICAgICAgICAgTE9HUFJJTlRfUFJFRklYLCBwUHJvc2xpYy0+Y2hhbm5lbCk7DQorICAgIHJldHVybiBlcnJvcjsNCisgIH0NCisNCisgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9QRF9EQ0RDLDB4NjAwMDAwTCk7DQorICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fUERfQklBUywweDIwMDAwMEwpOw0KKyAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1BEX0hWSUMsMHgyMDAwMDBMKTsNCisgIERlbGF5KHBQcm9UaW1lciw1MCk7DQorDQorICB2YmF0aCA9IFJlYWRSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1ZCQVRIX0VYUEVDVCk7DQorICB2YmF0ID0gUmVhZFJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fTUFEQ19WQkFUKTsNCisgIGlmKHZiYXQgJiAweDEwMDAwMDAwTCkNCisgIHsNCisgICAgdmJhdCB8PSAweEYwMDAwMDAwTDsNCisgIH0NCisgIGlmKHZiYXQgPCAodmJhdGggLyAyKSkNCisgIHsNCisgICAgcFByb3NsaWMtPmNoYW5uZWxFbmFibGUgPSAwOw0KKyAgICBlcnJvciA9IFJDX1ZCQVRfVVBfVElNRU9VVDsNCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1BEX0RDREMsDQorICAgICAgICAgICAgIDB4MzAwMDAwTCk7IC8qIHNodXRkb3duIGNvbnZlcnRlciAqLw0KKyAgICBERUJVR19QUklOVCAocFByb3NsaWMsDQorICAgICAgICAgICAgICAgICAiJXNDaGFubmVsICVkIDogRENEQyBTaG9ydCBDaXJjdWl0IEZhaWx1cmUgLSBkaXNhYmxpbmcgY2hhbm5lbFxuJXNWQkFUID0gJWQuJWRcbiIsDQorICAgICAgICAgICAgICAgICBMT0dQUklOVF9QUkVGSVgsIHBQcm9zbGljLT5jaGFubmVsLCBMT0dQUklOVF9QUkVGSVgsDQorICAgICAgICAgICAgICAgICAoaW50KSgodmJhdC9TQ0FMRV9WX01BREMpLzEwMDApLA0KKyAgICAgICAgICAgICAgICAgU0lWT0lDRV9BQlMoKCh2YmF0L1NDQUxFX1ZfTUFEQykgLSAodmJhdC9TQ0FMRV9WX01BREMpLzEwMDAqMTAwMCkpKTsNCisgICAgcmV0dXJuIGVycm9yOw0KKyAgfQ0KKyAgZWxzZSAgIC8qIEVuYWJsZSBhbmFsb2cgY29udmVydGVyICovDQorICB7DQorICAgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9EQ0RDX1NUQVRVUywwTCk7DQorICAgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9QRF9EQ0RDLDB4NDAwMDAwTCk7DQorICAgIFdyaXRlUmVnKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JFR19FTkhBTkNFLA0KKyAgICAgICAgICAgICByZWcpOyAgIC8qIFJlc3RvcmUgRU5IQU5DRSAqLw0KKyAgICBEZWxheShwUHJvVGltZXIsNTApOw0KKyAgfQ0KKw0KKyAgLyoNCisgICoqIC0gbW9uaXRvciB2YmF0IHZzIGV4cGVjdGVkIGxldmVsIChWQkFUSF9FWFBFQ1QpDQorICAqLw0KKyAgdmJhdGggPSBSZWFkUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9WQkFUSF9FWFBFQ1QpOw0KKyAgZG8NCisgIHsNCisgICAgdmJhdCA9IFJlYWRSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX01BRENfVkJBVCk7DQorICAgIGlmKHZiYXQgJiAweDEwMDAwMDAwTCkNCisgICAgew0KKyAgICAgIHZiYXQgfD0gMHhGMDAwMDAwMEw7DQorICAgIH0NCisgICAgRGVsYXkocFByb1RpbWVyLDEwKTsNCisgIH0NCisgIHdoaWxlKCh2YmF0IDwgKHZiYXRoIC0gQ09NUF81VikpDQorICAgICAgICAmJih0aW1lcisrIDwgU0kzMjE4WF9USU1FT1VUX0RDRENfVVApKTsgICAvKiAyIHNlYyB0aW1lb3V0ICovDQorDQorICBERUJVR19QUklOVCAocFByb3NsaWMsICIlc0NoYW5uZWwgJWQgOiBWQkFUIFVwID0gJWQuJWQgdlxuIiwNCisgICAgICAgICAgICAgICBMT0dQUklOVF9QUkVGSVgsDQorICAgICAgICAgICAgICAgcFByb3NsaWMtPmNoYW5uZWwsKGludCkoKHZiYXQvU0NBTEVfVl9NQURDKS8xMDAwKSwNCisgICAgICAgICAgICAgICBTSVZPSUNFX0FCUygoKHZiYXQvU0NBTEVfVl9NQURDKSAtICh2YmF0L1NDQUxFX1ZfTUFEQykvMTAwMCoxMDAwKSkpOw0KKyAgaWYodGltZXIgPiBTSTMyMThYX1RJTUVPVVRfRENEQ19VUCkNCisgIHsNCisgICAgLyogRXJyb3IgaGFuZGxpbmcgLSBzaHV0ZG93biBjb252ZXJ0ZXIsIGRpc2FibGUgY2hhbm5lbCwgc2V0IGVycm9yIHRhZyAqLw0KKyAgICBwUHJvc2xpYy0+Y2hhbm5lbEVuYWJsZSA9IDA7DQorICAgIGVycm9yID0gUkNfVkJBVF9VUF9USU1FT1VUOw0KKyAgICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fUERfRENEQywNCisgICAgICAgICAgICAgMHg5MDAwMDBMKTsgLyogc2h1dGRvd24gY29udmVydGVyICovDQorICAgIERFQlVHX1BSSU5UIChwUHJvc2xpYywgIiVzQ2hhbm5lbCAlZCA6IERDREMgUG93ZXIgdXAgdGltZW91dCA6IFN0YXR1cz0weCUwOFhcbiIsDQorICAgICAgICAgICAgICAgICBMT0dQUklOVF9QUkVGSVgsIHBQcm9zbGljLT5jaGFubmVsLCBSZWFkUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCwNCisgICAgICAgICAgICAgICAgICAgICBTSTMyMThYX1JBTV9EQ0RDX1NUQVRVUykpOw0KKyAgfQ0KKw0KKyAgcmV0dXJuIGVycm9yOw0KK30NCisNCisvKg0KKyoqDQorKiogUFJPU0xJQyBJTklUSUFMSVpBVElPTiBGVU5DVElPTlMNCisqKg0KKyovDQorDQorLyoNCisqKiBGdW5jdGlvbjogU2kzMjE4eF9Jbml0X011bHRpQk9NDQorKioNCisqKiBEZXNjcmlwdGlvbjoNCisqKiAtIHByb2JlIFNQSSB0byBlc3RhYmxpc2ggZGFpc3kgY2hhaW4gbGVuZ3RoDQorKiogLSBsb2FkIHBhdGNoDQorKiogLSBpbml0aWFsaXplIGdlbmVyYWwgcGFyYW1ldGVycw0KKyoqIC0gY2FsaWJyYXRlIG1hZGMNCisqKiAtIGJyaW5nIHVwIERDL0RDIGNvbnZlcnRlcnMNCisqKiAtIGNhbGlicmF0ZSBldmVyeXRoaW5nIGV4Y2VwdCBtYWRjICYgbGINCisqKg0KKyoqIElucHV0IFBhcmFtZXRlcnM6DQorKiogcFByb3NsaWM6IHBvaW50ZXIgdG8gUFJPU0xJQyBvYmplY3QgYXJyYXkNCisqKiBmYXVsdDogZXJyb3IgY29kZQ0KKyoqDQorKiogUmV0dXJuOg0KKyoqIGVycm9yIGNvZGUNCisqLw0KKw0KKyNpZmRlZiBTSVZPSUNFX01VTFRJX0JPTV9TVVBQT1JUDQoraW50IFNpMzIxOHhfSW5pdF9NdWx0aUJPTSAocHJvc2xpY0NoYW5UeXBlX3B0ciAqcFByb3NsaWMsIGludCBzaXplLCBpbnQgcHJlc2V0KQ0KK3sNCisNCisgIGlmKHByZXNldCA8IHNpMzIxOHhfZ2VuY29uZl9tdWx0aV9tYXhfcHJlc2V0KQ0KKyAgew0KKyAgICAvKiBDb3B5IHNlbGVjdGVkIEdlbmVyYWwgQ29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHRvIFN0ZCBzdHJ1Y3R1cmUgKi8NCisgICAgU2kzMjE4eF9HZW5lcmFsX0NvbmZpZ3VyYXRpb24gPSBTaTMyMTh4X0dlbmVyYWxfQ29uZmlndXJhdGlvbl9NdWx0aUJPTVtwcmVzZXRdOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICByZXR1cm4gUkNfSU5WQUxJRF9QUkVTRVQ7DQorICB9DQorICByZXR1cm4gU2kzMjE4eF9Jbml0X3dpdGhfT3B0aW9ucyhwUHJvc2xpYyxzaXplLCBJTklUX05PX09QVCk7DQorfQ0KKyNlbmRpZg0KKw0KKw0KKy8qDQorKiogRnVuY3Rpb246IFNpMzIxOHhfU2VsZWN0UGF0Y2gNCisqKg0KKyoqIFNlbGVjdCBwYXRjaCBiYXNlZCBvbiBnZW5lcmFsIHBhcmFtZXRlcnMNCisqKg0KKyoqIElucHV0IFBhcmFtZXRlcnM6DQorKiogcFByb3NsaWM6IHBvaW50ZXIgdG8gUFJPU0xJQyBvYmplY3QgYXJyYXkNCisqKiBmYXVsdDogZXJyb3IgY29kZQ0KKyoqIHBhdGNoOiAgICBQb2ludGVyIHRvIHByb3NsaWNQYXRjaCBwb2ludGVyDQorKioNCisqKiBSZXR1cm46DQorKiogZXJyb3IgY29kZQ0KKyovDQoraW50IFNpMzIxOHhfU2VsZWN0UGF0Y2gocHJvc2xpY0NoYW5UeXBlX3B0ciBwUHJvc2xpYywNCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9zbGljUGF0Y2ggKipwYXRjaCkNCit7DQorDQorI2lmZGVmIFNJVk9JQ0VfTVVMVElfQk9NX1NVUFBPUlQNCisgIGlmKFNpMzIxOHhfR2VuZXJhbF9Db25maWd1cmF0aW9uLmJvbV9vcHRpb24gPT0gQk9fRENEQ19MQ1FDXzVXDQorICAgICAgfHwgU2kzMjE4eF9HZW5lcmFsX0NvbmZpZ3VyYXRpb24uYm9tX29wdGlvbiA9PSBCT19EQ0RDX0xDQ0INCisgICAgICB8fCBTaTMyMTh4X0dlbmVyYWxfQ29uZmlndXJhdGlvbi5ib21fb3B0aW9uID09IEJPX0RDRENfTENDQjExMA0KKyAgICAgIHx8IFNpMzIxOHhfR2VuZXJhbF9Db25maWd1cmF0aW9uLmJvbV9vcHRpb24gPT0gQk9fRENEQ19CVUNLX0JPT1NUKQ0KKyAgew0KKyAgICAqcGF0Y2ggPSAmKFNJMzIxOFhfUEFUQ0hfQSk7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIERFQlVHX1BSSU5UKHBQcm9zbGljLCAiJXNDaGFubmVsICVkIDogSW52YWxpZCBQYXRjaFxuIiwgTE9HUFJJTlRfUFJFRklYLA0KKyAgICAgICAgICAgICAgICBwUHJvc2xpYy0+Y2hhbm5lbCk7DQorICAgIHBQcm9zbGljLT5jaGFubmVsRW5hYmxlID0gMDsNCisgICAgcFByb3NsaWMtPmVycm9yID0gUkNfSU5WQUxJRF9QQVRDSDsNCisgICAgcmV0dXJuIFJDX0lOVkFMSURfUEFUQ0g7DQorICB9DQorI2Vsc2UNCisgIFNJTEFCU19VTlJFRkVSRU5DRURfUEFSQU1FVEVSKHBQcm9zbGljKTsNCisgICpwYXRjaCA9ICYoU0kzMjE4WF9QQVRDSF9BX0RFRkFVTFQpOw0KKyNlbmRpZg0KKw0KKyAgcmV0dXJuIFJDX05PTkU7DQorfQ0KKw0KKy8qDQorKiogRnVuY3Rpb246IFNpMzIxOHhfR2VuUGFyYW1VcGRhdGUNCisqKg0KKyoqIFVwZGF0ZSBnZW5lcmFsIHBhcmFtZXRlcnMNCisqKg0KKyoqIElucHV0IFBhcmFtZXRlcnM6DQorKiogcFByb3NsaWM6IHBvaW50ZXIgdG8gUFJPU0xJQyBvYmplY3QgYXJyYXkNCisqKiBmYXVsdDogZXJyb3IgY29kZQ0KKyoqDQorKiogUmV0dXJuOg0KKyoqIGVycm9yIGNvZGUNCisqLw0KKw0KK2ludCBTaTMyMTh4X0dlblBhcmFtVXBkYXRlKHByb3NsaWNDaGFuVHlwZV9wdHIgcFByb3NsaWMsaW5pdFNlcVR5cGUgc2VxKQ0KK3sNCisgIHJhbURhdGEgcmFtX2RhdGE7DQorICB1SW50OCBkYXRhOw0KKw0KKyAgc3dpdGNoKHNlcSkNCisgIHsNCisgICAgY2FzZSBJTklUX1NFUV9QUkVfQ0FMOg0KKyAgICAgIC8qDQorICAgICAgKiogRm9yY2UgcHdyc2F2ZSBvZmYgYW5kIGRpc2FibGUgQVVUTy10cmFja2luZyAtIHNldCB0byB1c2VyIGNvbmZpZ3VyZWQgc3RhdGUgYWZ0ZXIgY2FsDQorICAgICAgKi8NCisgICAgICBXcml0ZVJlZyhwUHJvSFcsIHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkVHX0VOSEFOQ0UsMCk7DQorICAgICAgV3JpdGVSZWcocFByb0hXLCBwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JFR19BVVRPLDB4MkYpOw0KKw0KKyAgICAgIC8qDQorICAgICAgKiogR2VuZXJhbCBQYXJhbWV0ZXIgVXBkYXRlcw0KKyAgICAgICovDQorDQorICAgICAgV3JpdGVSQU0ocFByb0hXLCBwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9QX1RIX0hWSUMsDQorICAgICAgICAgICAgICAgU2kzMjE4eF9HZW5lcmFsX0NvbmZpZ3VyYXRpb24ucF90aF9odmljKTsNCisgICAgICBXcml0ZVJBTShwUHJvSFcsIHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX0NPRUZfUF9IVklDLA0KKyAgICAgICAgICAgICAgIFNpMzIxOHhfR2VuZXJhbF9Db25maWd1cmF0aW9uLmNvZWZfcF9odmljKTsNCisgICAgICBXcml0ZVJBTShwUHJvSFcsIHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX0JBVF9IWVNULA0KKyAgICAgICAgICAgICAgIFNpMzIxOHhfR2VuZXJhbF9Db25maWd1cmF0aW9uLmJhdF9oeXN0KTsNCisgICAgICBXcml0ZVJBTShwUHJvSFcsIHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1ZCQVRIX0VYUEVDVCwNCisgICAgICAgICAgICAgICBTaTMyMTh4X0dlbmVyYWxfQ29uZmlndXJhdGlvbi52YmF0aF9leHBlY3QpOw0KKyAgICAgIFdyaXRlUkFNKHBQcm9IVywgcFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fVkJBVFJfRVhQRUNULA0KKyAgICAgICAgICAgICAgIFNpMzIxOHhfR2VuZXJhbF9Db25maWd1cmF0aW9uLnZiYXRyX2V4cGVjdCk7DQorDQorICAgICAgV3JpdGVSQU0ocFByb0hXLCBwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9QV1JTQVZFX1RJTUVSLA0KKyAgICAgICAgICAgICAgIFNpMzIxOHhfR2VuZXJhbF9Db25maWd1cmF0aW9uLnB3cnNhdmVfdGltZXIpOw0KKyAgICAgIFdyaXRlUkFNKHBQcm9IVywgcFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fT0ZGSE9PS19USFJFU0gsDQorICAgICAgICAgICAgICAgU2kzMjE4eF9HZW5lcmFsX0NvbmZpZ3VyYXRpb24ucHdyc2F2ZV9vZmhrX3RocmVzaCk7DQorICAgICAgV3JpdGVSQU0ocFByb0hXLCBwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9WQkFUX1RSQUNLX01JTiwNCisgICAgICAgICAgICAgICBTaTMyMTh4X0dlbmVyYWxfQ29uZmlndXJhdGlvbi52YmF0X3RyYWNrX21pbik7DQorICAgICAgV3JpdGVSQU0ocFByb0hXLCBwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9WQkFUX1RSQUNLX01JTl9STkcsDQorICAgICAgICAgICAgICAgU2kzMjE4eF9HZW5lcmFsX0NvbmZpZ3VyYXRpb24udmJhdF90cmFja19taW5fcm5nKTsNCisNCisgICAgICBXcml0ZVJBTShwUHJvSFcsIHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1RIRVJNX0RCSSwNCisgICAgICAgICAgICAgICBTaTMyMTh4X0dlbmVyYWxfQ29uZmlndXJhdGlvbi50aGVybV9kYmkpOw0KKyAgICAgIFdyaXRlUkFNKHBQcm9IVywgcFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fVk9WX0RDRENfU0xPUEUsDQorICAgICAgICAgICAgICAgU2kzMjE4eF9HZW5lcmFsX0NvbmZpZ3VyYXRpb24udm92X2RjZGNfc2xvcGUpOw0KKyAgICAgIFdyaXRlUkFNKHBQcm9IVywgcFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fVk9WX0RDRENfT1MsDQorICAgICAgICAgICAgICAgU2kzMjE4eF9HZW5lcmFsX0NvbmZpZ3VyYXRpb24udm92X2RjZGNfb3MpOw0KKyAgICAgIFdyaXRlUkFNKHBQcm9IVywgcFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fVk9WX1JJTkdfQkFUX01BWCwNCisgICAgICAgICAgICAgICBTaTMyMTh4X0dlbmVyYWxfQ29uZmlndXJhdGlvbi52b3ZfcmluZ19iYXRfbWF4KTsNCisgICAgICBXcml0ZVJBTShwUHJvSFcsIHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX0RDRENfVkVSUiwNCisgICAgICAgICAgICAgICBTaTMyMTh4X0dlbmVyYWxfQ29uZmlndXJhdGlvbi5kY2RjX3ZlcnIpOw0KKyAgICAgIFdyaXRlUkFNKHBQcm9IVywgcFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fRENEQ19WRVJSX0hZU1QsDQorICAgICAgICAgICAgICAgU2kzMjE4eF9HZW5lcmFsX0NvbmZpZ3VyYXRpb24uZGNkY192ZXJyX2h5c3QpOw0KKw0KKyAgICAgIFdyaXRlUkFNKHBQcm9IVywgcFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fUERfVVZMTywNCisgICAgICAgICAgICAgICBTaTMyMTh4X0dlbmVyYWxfQ29uZmlndXJhdGlvbi5wZF91dmxvKTsNCisgICAgICBXcml0ZVJBTShwUHJvSFcsIHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1BEX09WTE8sDQorICAgICAgICAgICAgICAgU2kzMjE4eF9HZW5lcmFsX0NvbmZpZ3VyYXRpb24ucGRfb3Zsbyk7DQorICAgICAgV3JpdGVSQU0ocFByb0hXLCBwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9QRF9PQ0xPLA0KKyAgICAgICAgICAgICAgIFNpMzIxOHhfR2VuZXJhbF9Db25maWd1cmF0aW9uLnBkX29jbG8pOw0KKyAgICAgIFdyaXRlUkFNKHBQcm9IVywgcFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fUERfU1dEUlYsDQorICAgICAgICAgICAgICAgU2kzMjE4eF9HZW5lcmFsX0NvbmZpZ3VyYXRpb24ucGRfc3dkcnYpOw0KKw0KKyAgICAgIFdyaXRlUkFNKHBQcm9IVywgcFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fRENEQ19VVlBPTCwNCisgICAgICAgICAgICAgICBTaTMyMTh4X0dlbmVyYWxfQ29uZmlndXJhdGlvbi5kY2RjX3V2cG9sKTsNCisNCisgICAgICBXcml0ZVJBTShwUHJvSFcsIHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX0RDRENfUk5HVFlQRSwNCisgICAgICAgICAgICAgICBTaTMyMTh4X0dlbmVyYWxfQ29uZmlndXJhdGlvbi5kY2RjX3JuZ3R5cGUpOw0KKw0KKyAgICAgIFdyaXRlUkFNKHBQcm9IVywgcFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fRENEQ19BTkFfVE9GRiwNCisgICAgICAgICAgICAgICBTaTMyMTh4X0dlbmVyYWxfQ29uZmlndXJhdGlvbi5kY2RjX2FuYV90b2ZmKTsNCisgICAgICBXcml0ZVJBTShwUHJvSFcsIHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX0RDRENfQU5BX1RPTk1JTiwNCisgICAgICAgICAgICAgICBTaTMyMTh4X0dlbmVyYWxfQ29uZmlndXJhdGlvbi5kY2RjX2FuYV90b25taW4pOw0KKyAgICAgIFdyaXRlUkFNKHBQcm9IVywgcFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fRENEQ19BTkFfVE9OTUFYLA0KKyAgICAgICAgICAgICAgIFNpMzIxOHhfR2VuZXJhbF9Db25maWd1cmF0aW9uLmRjZGNfYW5hX3Rvbm1heCk7DQorDQorDQorICAgICAgLyoNCisgICAgICAqKiBIYXJkY29kZWQgUkFNDQorICAgICAgKi8NCisNCisgICAgICBXcml0ZVJBTShwUHJvSFcsIHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX0RDRENfT0lUSFJFU0hfTE8sDQorICAgICAgICAgICAgICAgR0NPTkYuaV9vaXRocmVzaF9sbyk7DQorICAgICAgV3JpdGVSQU0ocFByb0hXLCBwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9EQ0RDX09JVEhSRVNIX0hJLA0KKyAgICAgICAgICAgICAgIEdDT05GLmlfb2l0aHJlc2hfaGkpOw0KKyAgICAgIFdyaXRlUkFNKHBQcm9IVywgcFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fRENEQ19PVlRIUkVTSCxHQ09ORi52X292dGhyZXNoKTsNCisNCisgICAgICByYW1fZGF0YSA9IChHQ09ORi52X3V2dGhyZXNoID4gVVZUSFJFU0hfT0ZGUyk/KEdDT05GLnZfdXZ0aHJlc2ggLQ0KKyAgICAgICAgICAgICAgICAgVVZUSFJFU0hfT0ZGUykvVVZUSFJFU0hfU0NBTEU6MEw7DQorICAgICAgcmFtX2RhdGEgKj0gQklUMjBMU0I7DQorICAgICAgV3JpdGVSQU0ocFByb0hXLCBwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9EQ0RDX1VWVEhSRVNILHJhbV9kYXRhKTsNCisNCisgICAgICByYW1fZGF0YSA9IChHQ09ORi52X3V2aHlzdCA+IFVWSFlTVF9PRkZTKT8oR0NPTkYudl91dmh5c3QgLQ0KKyAgICAgICAgICAgICAgICAgVVZIWVNUX09GRlMpL1VWSFlTVF9TQ0FMRTowTDsNCisgICAgICByYW1fZGF0YSAqPSBCSVQyMExTQjsNCisgICAgICBXcml0ZVJBTShwUHJvSFcsIHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX0RDRENfVVZIWVNULHJhbV9kYXRhKTsNCisNCisgICAgICAvKiBTZXQgZGVmYXVsdCBhdWRpbyBnYWluIGJhc2VkIG9uIFBNIGJvbSAqLw0KKyAgICAgIGlmKFNpMzIxOHhfR2VuZXJhbF9Db25maWd1cmF0aW9uLnBtX2JvbSA9PSBCT19QTV9CT00pDQorICAgICAgew0KKyAgICAgICAgV3JpdGVSQU0ocFByb0hXLCBwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9TQ0FMRV9LQVVESU8sQk9NX0tBVURJT19QTSk7DQorICAgICAgICBXcml0ZVJBTShwUHJvSFcsIHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX0FDX0FEQ19HQUlOLEJPTV9BQ19BRENfR0FJTl9QTSk7DQorICAgICAgfQ0KKyAgICAgIGVsc2UNCisgICAgICB7DQorICAgICAgICBXcml0ZVJBTShwUHJvSFcsIHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1NDQUxFX0tBVURJTyxCT01fS0FVRElPX05PX1BNKTsNCisgICAgICAgIFdyaXRlUkFNKHBQcm9IVywgcFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fQUNfQURDX0dBSU4sDQorICAgICAgICAgICAgICAgICBCT01fQUNfQURDX0dBSU5fTk9fUE0pOw0KKyAgICAgIH0NCisNCisgICAgICAvKg0KKyAgICAgICoqIEhhcmRjb2RlZCBjaGFuZ2VzIHRvIGRlZmF1bHQgc2V0dGluZ3MNCisgICAgICAqLw0KKyAgICAgIGRhdGEgPSBSZWFkUmVnKHBQcm9IVywgcFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SRUdfR1BJT19DRkcxKTsNCisgICAgICBkYXRhICY9IDB4Rjk7ICAvKiBDbGVhciBESVIgZm9yIEdQSU8gMSYyICovDQorICAgICAgZGF0YSB8PSAweDYwOyAgLyogU2V0IEFOQSBtb2RlIGZvciBHUElPIDEmMiAqLw0KKyAgICAgIFdyaXRlUmVnKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JFR19HUElPX0NGRzEsDQorICAgICAgICAgICAgICAgZGF0YSk7ICAgICAgICAgIC8qIGNvYXJzZSBzZW5zb3JzIGFuYWxvZyBtb2RlICovDQorICAgICAgV3JpdGVSZWcocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkVHX1BETiwNCisgICAgICAgICAgICAgICAweDgwKTsgICAgICAgICAgICAgICAgLyogbWFkYyBwb3dlcmVkIGluIG9wZW4gc3RhdGUgKi8NCisgICAgICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fVFhBQ0hQRl9BMV8xLA0KKyAgICAgICAgICAgICAgIDB4NzFFQjg1MUwpOyAvKiBGaXggSFBGIGNvcm5lciAqLw0KKyAgICAgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9QRF9SRUZfT1NDLA0KKyAgICAgICAgICAgICAgIDB4MjAwMDAwTCk7ICAgIC8qIFBMTCBmcmVlcnVuIHdvcmthcm91bmQgKi8NCisgICAgICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fSUxPT1BMUEYsDQorICAgICAgICAgICAgICAgMHg0RUREQjlMKTsgICAgICAvKiAyMHBwcyBwdWxzZSBkaWFsaW5nIGVuaGFuY2VtZW50ICovDQorICAgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX0lMT05HTFBGLA0KKyAgICAgICAgICAgICAgIDB4ODA2RDZMKTsgICAgICAgLyogMjBwcHMgcHVsc2UgZGlhbGluZyBlbmhhbmNlbWVudCAqLw0KKyAgICAgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9WRElGRkxQRiwNCisgICAgICAgICAgICAgICAweDEwMDM4REwpOyAgICAgIC8qIDIwcHBzIHB1bHNlIGRpYWxpbmcgZW5oYW5jZW1lbnQgKi8NCisgICAgICBXcml0ZVJBTShwUHJvSFcsIHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX0RDRENfVlJFRl9DVFJMLDB4MEwpOw0KKyAgICAgIFdyaXRlUkFNKHBQcm9IVywgcFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fVkNNX1RILDB4MTA2MjQwTCk7DQorICAgICAgV3JpdGVSQU0ocFByb0hXLCBwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9WQ01MUEYsMHgxMDA1OUZMKTsNCisgICAgICBXcml0ZVJBTShwUHJvSFcsIHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX0NNX1NQRUVEVVBfVElNRVIsMHgwRjAwMDApOw0KKyAgICAgIFdyaXRlUkFNKHBQcm9IVywgcFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fVkNNX0hZU1QsMHgyMDYyODBMKTsNCisNCisgICAgICAvKiBQcmV2ZW50IFJlZiBPc2MgZnJvbSBwb3dlcmluZyBkb3duIGluIFBMTCBGcmVlcnVuIG1vZGUgKHBkX3JlZl9vc2MpICovDQorICAgICAgcmFtX2RhdGEgPSBSZWFkUkFNKHBQcm9IVywgcFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fUFdSU0FWRV9DVFJMX0xPKTsNCisgICAgICBXcml0ZVJBTShwUHJvSFcsIHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1BXUlNBVkVfQ1RSTF9MTywNCisgICAgICAgICAgICAgICByYW1fZGF0YSYweDA3RkZGRkZGTCk7IC8qIGNsZWFyIGIyNyAqLw0KKyAgICAgIGJyZWFrOw0KKw0KKw0KKyAgICBjYXNlIElOSVRfU0VRX1BPU1RfQ0FMOg0KKyAgICAgIFdyaXRlUmVnKHBQcm9IVywgcFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SRUdfRU5IQU5DRSwNCisgICAgICAgICAgICAgICBTaTMyMTh4X0dlbmVyYWxfQ29uZmlndXJhdGlvbi5lbmhhbmNlJjB4MUYpOw0KKyAgICAgIFdyaXRlUmVnKHBQcm9IVywgcFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SRUdfQVVUTywNCisgICAgICAgICAgICAgICBTaTMyMTh4X0dlbmVyYWxfQ29uZmlndXJhdGlvbi5hdXRvX3JlZyk7DQorICAgICAgaWYoU2kzMjE4eF9HZW5lcmFsX0NvbmZpZ3VyYXRpb24uemNhbF9lbikNCisgICAgICB7DQorICAgICAgICBXcml0ZVJlZyhwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsIFNJMzIxOFhfUkVHX1pDQUxfRU4sIDB4MDQpOw0KKyAgICAgIH0NCisgICAgICBicmVhazsNCisNCisgICAgZGVmYXVsdDoNCisgICAgICBicmVhazsNCisgIH0NCisgIHJldHVybiBSQ19OT05FOw0KK30NCisNCisvKg0KKyoqIEZ1bmN0aW9uOiBTaTMyMTh4X0luaXRfd2l0aF9PcHRpb25zDQorKioNCisqKiBEZXNjcmlwdGlvbjoNCisqKiAtIHByb2JlIFNQSSB0byBlc3RhYmxpc2ggZGFpc3kgY2hhaW4gbGVuZ3RoDQorKiogLSBsb2FkIHBhdGNoDQorKiogLSBpbml0aWFsaXplIGdlbmVyYWwgcGFyYW1ldGVycw0KKyoqIC0gY2FsaWJyYXRlIG1hZGMNCisqKiAtIGJyaW5nIHVwIERDL0RDIGNvbnZlcnRlcnMNCisqKiAtIGNhbGlicmF0ZSBldmVyeXRoaW5nIGV4Y2VwdCBtYWRjICYgbGINCisqKg0KKyoqIElucHV0IFBhcmFtZXRlcnM6DQorKiogcFByb3NsaWM6IHBvaW50ZXIgdG8gUFJPU0xJQyBvYmplY3QgYXJyYXkNCisqKiBmYXVsdDogZXJyb3IgY29kZQ0KKyoqDQorKiogUmV0dXJuOg0KKyoqIGVycm9yIGNvZGUNCisqLw0KKw0KK2ludCBTaTMyMTh4X0luaXRfd2l0aF9PcHRpb25zIChwcm9zbGljQ2hhblR5cGVfcHRyICpwUHJvc2xpYywgaW50IHNpemUsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRPcHRpb25zVHlwZSBpbml0X29wdCkNCit7DQorICAvKg0KKyAgICoqIFRoaXMgZnVuY3Rpb24gd2lsbCBpbml0aWFsaXplIHRoZSBjaGlwUmV2IGFuZCBjaGlwVHlwZSBtZW1iZXJzIGluIHBQcm9zbGljDQorICAgKiogYXMgd2VsbCBhcyBsb2FkIHRoZSBpbml0aWFsaXphdGlvbiBzdHJ1Y3R1cmVzLg0KKyAgICovDQorDQorICB1SW50OCBkYXRhOw0KKyAgdUludDggY2FsU2V0dXBbXSA9IHsweDAwLCAweDAwLCAweDAxLCAweDgwfTsgIC8qIENBTFIwLUNBTFIzICovDQorICBpbnQgaywgZGV2aWNlX2NvdW50Ow0KKyAgY29uc3QgcHJvc2xpY1BhdGNoICpwYXRjaDsNCisgIHVJbnQ4IHN0YXR1czsNCisNCisgIExPR1BSSU5UKCIlcyglZCkgc2l6ZSA9ICVkIGluaXRfb3B0ID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18sIHNpemUsDQorICAgICAgICAgICBpbml0X29wdCk7DQorICAvKg0KKyAgKioNCisgICoqIEZpcnN0IHF1YWxpZnkgZ2VuZXJhbCBwYXJhbWV0ZXJzIGJ5IGlkZW50aWZ5aW5nIHZhbGlkIGRldmljZSBrZXkuICBUaGlzDQorICAqKiB3aWxsIHByZXZlbnQgaW5hZHZlcnRlbnQgdXNlIG9mIG90aGVyIGRldmljZSdzIHByZXNldCBmaWxlcywgd2hpY2ggY291bGQNCisgICoqIGxlYWQgdG8gaW1wcm9wZXIgaW5pdGlhbGl6YXRpb24gYW5kIGhpZ2ggY3VycmVudCBzdGF0ZXMuDQorICAqLw0KKw0KKyAgZGF0YSA9IFNpMzIxOHhfR2VuZXJhbF9Db25maWd1cmF0aW9uLmRldmljZV9rZXk7DQorDQorICBpZigoZGF0YSA8IERFVklDRV9LRVlfTUlOKXx8KGRhdGEgPiBERVZJQ0VfS0VZX01BWCkpDQorICB7DQorICAgIHBQcm9zbGljWzBdLT5lcnJvciA9IFJDX0lOVkFMSURfR0VOX1BBUkFNOw0KKyAgICByZXR1cm4gcFByb3NsaWNbMF0tPmVycm9yOw0KKyAgfQ0KKw0KKyAgLyogcmVzZXQgZXJyb3IgY29kZSAqLw0KKyAgZm9yKGsgPSAwOyBrIDwgc2l6ZTsgaysrKQ0KKyAgew0KKyAgICBwUHJvc2xpY1trXS0+ZXJyb3IgPSBSQ19OT05FOw0KKyAgfQ0KKw0KKyAgaWYoIChpbml0X29wdCA9PSBJTklUX1JFSU5JVCkgfHwgKGluaXRfb3B0ID09IElOSVRfU09GVFJFU0VUKSApDQorICB7DQorICAgIFByb1NMSUNfUmVJbml0X2hlbHBlcihwUHJvc2xpYywgc2l6ZSwgaW5pdF9vcHQsIFNJMzIxOFhfQ0hBTl9QRVJfREVWSUNFKTsNCisNCisgICAvKiBmb3Igc2luZ2xlIGNoYW5uZWwgZGV2aWNlcywgd2UgbmVlZCBkbyBhIGZ1bGwgcmVzdG9yZS4uICovDQorICAgIGlmKGluaXRfb3B0ID09IElOSVRfUkVJTklUKQ0KKyAgICB7DQorICAgICAgaW5pdF9vcHQgPSAwOw0KKyAgICB9DQorfQ0KKw0KKyAgaWYoIGluaXRfb3B0ICE9IElOSVRfUkVJTklUICkNCisgIHsNCisgICAgaWYoIChTaVZvaWNlX0lkZW50aWZ5Q2hhbm5lbHMocFByb3NsaWMsIHNpemUsICZkZXZpY2VfY291bnQsIE5VTEwpICE9IFJDX05PTkUpDQorICAgICAgICB8fChkZXZpY2VfY291bnQgPT0gMCkgKQ0KKyAgICB7DQorICAgICAgREVCVUdfUFJJTlQoKnBQcm9zbGljLCAiJXM6IGZhaWxlZCB0byBkZXRlY3QgYW55IFByb1NMSUNzXG4iLCBMT0dQUklOVF9QUkVGSVgpOw0KKyAgICAgIHJldHVybiBSQ19TUElfRkFJTDsNCisgICAgfQ0KKw0KKyAgICAvKg0KKyAgICAgKiogUHJvYmUgZWFjaCBjaGFubmVsIGFuZCBlbmFibGUgYWxsIGNoYW5uZWxzIHRoYXQgcmVzcG9uZA0KKyAgICAgKi8NCisgICAgZm9yIChrPTA7IGs8c2l6ZTsgaysrKQ0KKyAgICB7DQorICAgICAgaWYgKChwUHJvc2xpY1trXS0+Y2hhbm5lbEVuYWJsZSkNCisgICAgICAgICAgJiYocFByb3NsaWNba10tPmNoYW5uZWxUeXBlID09IFBST1NMSUMpKQ0KKyAgICAgIHsNCisgICAgICAgIGlmICggKFByb1NMSUNfVmVyaWZ5TWFzdGVyU3RhdChwUHJvc2xpY1trXSkgIT0gUkNfTk9ORSkNCisgICAgICAgICAgICAgfHwgKFByb1NMSUNfVmVyaWZ5Q29udHJvbEludGVyZmFjZShwUHJvc2xpY1trXSkgIT0gUkNfTk9ORSkgKQ0KKyAgICAgICAgew0KKyAgICAgICAgICBwUHJvc2xpY1trXS0+Y2hhbm5lbEVuYWJsZSA9IDA7DQorICAgICAgICAgIHBQcm9zbGljW2tdLT5lcnJvciA9IFJDX1NQSV9GQUlMOw0KKyAgICAgICAgICBERUJVR19QUklOVCgqcFByb3NsaWMsICIlczogU1BJIGNvbW11bmljYXRpb25zIG9yIFBDTEsvRlMgZmFpbHVyZVxuIiwgTE9HUFJJTlRfUFJFRklYKTsNCisgICAgICAgICAgcmV0dXJuIHBQcm9zbGljW2tdLT5lcnJvcjsgICAgLyogSGFsdCBpbml0IGlmIFNQSSBmYWlsICovDQorICAgICAgICB9DQorICAgICAgfQ0KKyAgICB9DQorICB9IC8qIGluaXRfb3B0ICFSRUlOSVQgKi8NCisNCisNCisgIGlmKCAoaW5pdF9vcHQgIT0gSU5JVF9OT19QQVRDSF9MT0FEICkgICYmIChpbml0X29wdCAhPSBJTklUX1JFSU5JVCkgKQ0KKyAgew0KKyAgICAvKg0KKyAgICAqKiBMb2FkIHBhdGNoIChsb2FkIG9uIGV2ZXJ5IGNoYW5uZWwgc2luY2Ugc2luZ2xlIGNoYW5uZWwgZGV2aWNlKQ0KKyAgICAqLw0KKyAgICBmb3IgKGs9MDsgazxzaXplOyBrKyspDQorICAgIHsNCisgICAgICBpZiAoKHBQcm9zbGljW2tdLT5jaGFubmVsRW5hYmxlKSYmKHBQcm9zbGljW2tdLT5jaGFubmVsVHlwZSA9PSBQUk9TTElDKSkNCisgICAgICB7DQorDQorICAgICAgICAvKiBTZWxlY3QgUGF0Y2gqLw0KKyAgICAgICAgaWYgKHBQcm9zbGljW2tdLT5kZXZpY2VJZC0+Y2hpcFJldiA9PSBTSTMyMThYX1JFVkEgKQ0KKyAgICAgICAgew0KKyAgICAgICAgICBzdGF0dXMgPSAodUludDgpIFNpMzIxOHhfU2VsZWN0UGF0Y2gocFByb3NsaWNba10sJnBhdGNoKTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgREVCVUdfUFJJTlQocFByb3NsaWNba10sICIlc0NoYW5uZWwgJWQgOiBVbnN1cHBvcnRlZCBEZXZpY2UgUmV2aXNpb24gKCVkKVxuIiwNCisgICAgICAgICAgICAgICAgICAgICAgTE9HUFJJTlRfUFJFRklYLCBwUHJvc2xpY1trXS0+Y2hhbm5lbCxwUHJvc2xpY1trXS0+ZGV2aWNlSWQtPmNoaXBSZXYgKTsNCisgICAgICAgICAgcFByb3NsaWNba10tPmNoYW5uZWxFbmFibGUgPSAwOw0KKyAgICAgICAgICBwUHJvc2xpY1trXS0+ZXJyb3IgPSBSQ19VTlNVUFBPUlRFRF9ERVZJQ0VfUkVWOw0KKyAgICAgICAgICByZXR1cm4gUkNfVU5TVVBQT1JURURfREVWSUNFX1JFVjsNCisgICAgICAgIH0NCisNCisgICAgICAgIGRhdGEgPSAxOyAvKiBVc2UgdGhpcyBhcyBhIGZsYWcgdG8gc2VlIGlmIHdlIG5lZWQgdG8gbG9hZCB0aGUgcGF0Y2ggKi8NCisgICAgICAgIC8qIElmIHRoZSBwYXRjaCBkb2Vzbid0IG1hdGNoLCB3ZSBuZWVkIHRvIGRvIGEgZnVsbCBpbml0LCBjaGFuZ2Ugc2V0dGluZ3MgKi8NCisgICAgICAgIGlmKGluaXRfb3B0ID09IElOSVRfU09GVFJFU0VUKQ0KKyAgICAgICAgew0KKyAgICAgICAgICByYW1EYXRhIHBhdGNoRGF0YTsNCisgICAgICAgICAgcGF0Y2hEYXRhID0gcFByb3NsaWNba10tPlJlYWRSQU1YKHBQcm9zbGljW2tdLT5wUHJvSFdYLCBwUHJvc2xpY1trXS0+Y2hhbm5lbCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1NMSUNfUkFNX1BBVENISUQpOw0KKw0KKyAgICAgICAgICBpZiggcGF0Y2hEYXRhID09ICBwYXRjaC0+cGF0Y2hTZXJpYWwpDQorICAgICAgICAgIHsNCisgICAgICAgICAgICBkYXRhID0gMDsNCisgICAgICAgICAgfQ0KKyAgICAgICAgICBlbHNlDQorICAgICAgICAgIHsNCisgICAgICAgICAgICBpbml0X29wdCA9IElOSVRfTk9fT1BUOw0KKyAgICAgICAgICB9DQorICAgICAgICB9IC8qIFNPRlRSRVNFVCAqLw0KKyAgICAgDQorICAgICAgICAvKiBMb2FkIFBhdGNoICovDQorICAgICAgICBpZihzdGF0dXMgPT0gUkNfTk9ORSkNCisgICAgICAgIHsNCisgICAgICAgICAgaWYoZGF0YSA9PSAxKQ0KKyAgICAgICAgICB7DQorICAgICAgICAgICAgU2kzMjE4eF9Mb2FkUGF0Y2gocFByb3NsaWNba10scGF0Y2gpOw0KKyNpZm5kZWYgRElTQUJMRV9WRVJJRllfUEFUQ0gNCisgICAgICAgICAgICAvKiBPcHRpb25hbCBQYXRjaCBWZXJpZmljYXRpb24gKi8NCisgICAgICAgICAgICBkYXRhID0gKHVJbnQ4KVNpMzIxOHhfVmVyaWZ5UGF0Y2gocFByb3NsaWNba10scGF0Y2gpOw0KKyAgICAgICAgICAgIGlmIChkYXRhICE9IFJDX05PTkUpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgREVCVUdfUFJJTlQocFByb3NsaWNba10sICIlc0NoYW5uZWwgJWQgOiBQYXRjaCB2ZXJpZmljYXRpb24gZmFpbGVkICglZClcbiIsIA0KKyAgICAgICAgICAgICAgICAgICBMT0dQUklOVF9QUkVGSVgsIGssIGRhdGEpOw0KKyAgICAgICAgICAgICAgcFByb3NsaWNba10tPmNoYW5uZWxFbmFibGU9MDsNCisgICAgICAgICAgICAgIHBQcm9zbGljW2tdLT5lcnJvciA9IFJDX1BBVENIX0VSUjsNCisgICAgICAgICAgICAgIHJldHVybiBkYXRhOw0KKyAgICAgICAgICAgIH0NCisjZW5kaWYNCisgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICByZXR1cm4gc3RhdHVzOw0KKyAgICAgICAgfQ0KKyAgICAgIH0gLyogY2hhbm5lbCA9PSBQUk9TTElDICovDQorICAgIH0gLyogZm9yIGFsbCBjaGFubmxlcyAqLw0KKyAgfS8qIGluaXRfb3B0ICAtIG5lZWQgdG8gcmVsb2FkIHBhdGNoICovDQorDQorICAvKg0KKyAgKiogTG9hZCBnZW5lcmFsIHBhcmFtZXRlcnMgLSBpbmNsdWRlcyBhbGwgQk9NIGRlcGVuZGVuY2llcw0KKyAgKi8NCisgIGlmKGluaXRfb3B0ICE9IElOSVRfU09GVFJFU0VUKQ0KKyAgew0KKyAgICBmb3IgKGs9MDsgazxzaXplOyBrKyspDQorICAgIHsNCisgICAgICBpZiAoKHBQcm9zbGljW2tdLT5jaGFubmVsRW5hYmxlKSYmKHBQcm9zbGljW2tdLT5jaGFubmVsVHlwZSA9PSBQUk9TTElDKSkNCisgICAgICB7DQorICAgICAgICBTaTMyMTh4X0dlblBhcmFtVXBkYXRlKHBQcm9zbGljW2tdLElOSVRfU0VRX1BSRV9DQUwpOw0KKyAgICAgIH0NCisNCisgICAgICBwUHJvc2xpY1trXS0+V3JpdGVSQU1YKHBQcm9zbGljW2tdLT5wUHJvSFdYLHBQcm9zbGljW2tdLT5jaGFubmVsLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0kzMjE4WF9SQU1fSVJJTkdfTElNLFNJMzIxOFhfSVJJTkdfTElNX01BWCk7DQorICAgIH0NCisgIH0NCisNCisgIGlmKChpbml0X29wdCAhPSBJTklUX05PX0NBTCkNCisgICAgICAmJiAoaW5pdF9vcHQgIT0gSU5JVF9TT0ZUUkVTRVQpKSAvKiBNdXN0IHJlY2FsIG9uIHNpbmdsZSBjaGFubmVsIGRldmljZXMgKi8NCisgIHsNCisgICAgLyoNCisgICAgKiogQ2FsaWJyYXRlIChtYWRjIG9mZnNldCkNCisgICAgKi8NCisgICAgUHJvU0xJQ19DYWxpYnJhdGUocFByb3NsaWMsc2l6ZSxjYWxTZXR1cCxUSU1FT1VUX01BRENfQ0FMKTsNCisgIH0vKiBpbml0X29wdCAqLw0KKw0KKyAgLyoNCisgICoqIEJyaW5nIHVwIERDL0RDIGNvbnZlcnRlcnMgc2VxdWVudGlhbGx5IHRvIG1pbmltaXplDQorICAqKiBwZWFrIHBvd2VyIGRlbWFuZCBvbiBWREMNCisgICovDQorICBmb3IgKGs9MDsgazxzaXplOyBrKyspDQorICB7DQorICAgIGlmICgocFByb3NsaWNba10tPmNoYW5uZWxFbmFibGUpJiYocFByb3NsaWNba10tPmNoYW5uZWxUeXBlID09IFBST1NMSUMpKQ0KKyAgICB7DQorICAgICAgcFByb3NsaWNba10tPmVycm9yID0gU2kzMjE4eF9Qb3dlclVwQ29udmVydGVyKHBQcm9zbGljW2tdKTsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgaWYoKGluaXRfb3B0ICE9IElOSVRfTk9fQ0FMKSAmJiAoaW5pdF9vcHQgIT0gSU5JVF9TT0ZUUkVTRVQpKQ0KKyAgew0KKyAgICAvKg0KKyAgICAqKiBDYWxpYnJhdGUgcmVtYWluaW5nIGNhbHMgKGV4Y2VwdCBtYWRjLCBsYikNCisgICAgKi8NCisgICAgY2FsU2V0dXBbMV0gPSBTSTMyMThYX0NBTF9TVERfQ0FMUjE7DQorICAgIGNhbFNldHVwWzJdID0gU0kzMjE4WF9DQUxfU1REX0NBTFIyOw0KKw0KKyAgICBQcm9TTElDX0NhbGlicmF0ZShwUHJvc2xpYyxzaXplLGNhbFNldHVwLFRJTUVPVVRfR0VOX0NBTCk7DQorICB9DQorDQorICAvKg0KKyAgKiogQXBwbHkgcG9zdCBjYWxpYnJhdGlvbiBnZW5lcmFsIHBhcmFtZXRlcnMNCisgICovDQorICBpZihpbml0X29wdCAhPSBJTklUX1NPRlRSRVNFVCkNCisgIHsNCisgICAgZm9yIChrPTA7IGs8c2l6ZTsgaysrKQ0KKyAgICB7DQorDQorICAgICAgaWYgKChwUHJvc2xpY1trXS0+Y2hhbm5lbEVuYWJsZSkmJihwUHJvc2xpY1trXS0+Y2hhbm5lbFR5cGUgPT0gUFJPU0xJQykpDQorICAgICAgew0KKyAgICAgICAgU2kzMjE4eF9HZW5QYXJhbVVwZGF0ZShwUHJvc2xpY1trXSxJTklUX1NFUV9QT1NUX0NBTCk7DQorICAgICAgfQ0KKyAgICB9DQorICB9DQorDQorICAvKiBSZXN0b3JlIGxpbmVmZWVkIHN0YXRlIGFmdGVyIGluaXRpYWxpemF0aW9uIGZvciBSRUlOSVQvU09GVFJFU0VUICovDQorICBpZiggKGluaXRfb3B0ID09IElOSVRfUkVJTklUKSB8fCAoaW5pdF9vcHQgPT0gSU5JVF9TT0ZUUkVTRVQpICkNCisgIHsNCisgICAgZm9yKGsgPSAwOyBrIDwgc2l6ZTsgaysrKQ0KKyAgICB7DQorICAgICAgcFByb3NsaWNba10tPldyaXRlUmVnWChwUHJvc2xpY1trXS0+cFByb0hXWCxwUHJvc2xpY1trXS0+Y2hhbm5lbCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJMzIxOFhfUkVHX0xJTkVGRUVELHBQcm9zbGljW2tdLT5zY3JhdGNoKTsNCisgICAgfQ0KKyAgfQ0KKw0KKyAgLyoNCisgICoqIElmIGFueSBjaGFubmVsIGluY3VycmVkIGEgbm9uLWZhdGFsIGVycm9yLCByZXR1cm4NCisgICoqIFJDX05PTl9GQVRBTF9JTklUX0VSUiB0byB0cmlnZ2VyIHVzZXIgdG8gcmVhZCBlYWNoIGNoYW5uZWwncw0KKyAgKiogZXJyb3Igc3RhdHVzDQorICAqLw0KKyAgZm9yIChrPTA7IGs8c2l6ZTsgaysrKQ0KKyAgew0KKyAgICBpZihwUHJvc2xpY1trXS0+ZXJyb3IgIT0gUkNfTk9ORSkNCisgICAgew0KKyAgICAgIHJldHVybiBSQ19OT05fRkFUQUxfSU5JVF9FUlI7DQorICAgIH0NCisgIH0NCisNCisgIHJldHVybiBSQ19OT05FOw0KK30NCisNCisvKg0KKyoqIEZ1bmN0aW9uOiBTaTMyMTh4X0VuYWJsZUludGVycnVwdHMNCisqKg0KKyoqIERlc2NyaXB0aW9uOg0KKyoqIEVuYWJsZXMgaW50ZXJydXB0cw0KKyoqDQorKiogSW5wdXQgUGFyYW1ldGVyczoNCisqKiBwUHJvc2xpYzogICBwb2ludGVyIHRvIFBST1NMSUMgY2hhbm5lbCBvYmoNCisqKg0KKyoqIFJldHVybnM6DQorKiogMA0KKyovDQorDQoraW50IFNpMzIxOHhfRW5hYmxlSW50ZXJydXB0cyAocHJvc2xpY0NoYW5UeXBlX3B0ciBwUHJvc2xpYykNCit7DQorICB1SW50OCBpOw0KKyNpZmRlZiBHQ0lfTU9ERQ0KKyAgdUludDggZGF0YTsNCisjZW5kaWYNCisgIC8qIENsZWFyIHBlbmRpbmcgaW50ZXJydXB0cyBmaXJzdCAqLw0KKyAgZm9yKGkgPSBTSTMyMThYX1JFR19JUlExOyBpIDwgU0kzMjE4WF9SRUdfSVJRNDsgaSsrKQ0KKyAgew0KKyNpZmRlZiBHQ0lfTU9ERQ0KKyAgICBkYXRhID0gUmVhZFJlZyhwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsIGkpOw0KKyAgICBXcml0ZVJlZyhwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsaSxkYXRhKTsgLypjbGVhciBpbnRlcnJ1cHRzIChnY2kgb25seSkqLw0KKyNlbHNlDQorICAgICh2b2lkKVJlYWRSZWcocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLCBpKTsNCisjZW5kaWYNCisNCisgIH0NCisNCisgIFdyaXRlUmVnIChwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SRUdfSVJRRU4xLA0KKyAgICAgICAgICAgIFNpMzIxOHhfR2VuZXJhbF9Db25maWd1cmF0aW9uLmlycWVuMSk7DQorICBXcml0ZVJlZyAocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkVHX0lSUUVOMiwNCisgICAgICAgICAgICBTaTMyMTh4X0dlbmVyYWxfQ29uZmlndXJhdGlvbi5pcnFlbjIpOw0KKyAgV3JpdGVSZWcgKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JFR19JUlFFTjMsDQorICAgICAgICAgICAgU2kzMjE4eF9HZW5lcmFsX0NvbmZpZ3VyYXRpb24uaXJxZW4zKTsNCisgIFdyaXRlUmVnIChwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SRUdfSVJRRU40LA0KKyAgICAgICAgICAgIFNpMzIxOHhfR2VuZXJhbF9Db25maWd1cmF0aW9uLmlycWVuNCk7DQorDQorICByZXR1cm4gUkNfTk9ORTsNCit9DQorDQorLyoNCisqKg0KKyoqIFBST1NMSUMgQ09ORklHVVJBVElPTiBGVU5DVElPTlMNCisqKg0KKyovDQorDQorLyoNCisqKiBGdW5jdGlvbjogU2kzMjE4eF9SaW5nU2V0dXANCisqKg0KKyoqIERlc2NyaXB0aW9uOg0KKyoqIGNvbmZpZ3VyZSByaW5naW5nDQorKioNCisqKiBJbnB1dCBQYXJhbWV0ZXJzOg0KKyoqIHBQcm9zbGljOiAgIHBvaW50ZXIgdG8gUFJPU0xJQyBjaGFubmVsIG9iag0KKyoqIHByZXNldDogICAgIHJpbmcgcHJlc2V0DQorKioNCisqKiBSZXR1cm5zOg0KKyoqIDANCisqLw0KKw0KKyNpZm5kZWYgRElTQUJMRV9SSU5HX1NFVFVQDQoraW50IFNpMzIxOHhfUmluZ1NldHVwIChwcm9zbGljQ2hhblR5cGUgKnBQcm9zbGljLCBpbnQgcHJlc2V0KQ0KK3sNCisNCisgIGlmKHBQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQ0KKyAgew0KKyAgICByZXR1cm4gUkNfQ0hBTk5FTF9UWVBFX0VSUjsNCisgIH0NCisNCisgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9SVFBFUiwNCisgICAgICAgICAgIFNpMzIxOHhfUmluZ19QcmVzZXRzW3ByZXNldF0ucnRwZXIpOw0KKyAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1JJTkdGUiwNCisgICAgICAgICAgIFNpMzIxOHhfUmluZ19QcmVzZXRzW3ByZXNldF0uZnJlcSk7DQorICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fUklOR0FNUCwNCisgICAgICAgICAgIFNpMzIxOHhfUmluZ19QcmVzZXRzW3ByZXNldF0uYW1wKTsNCisgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9SSU5HUEhBUywNCisgICAgICAgICAgIFNpMzIxOHhfUmluZ19QcmVzZXRzW3ByZXNldF0ucGhhcyk7DQorICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fUklOR09GLA0KKyAgICAgICAgICAgU2kzMjE4eF9SaW5nX1ByZXNldHNbcHJlc2V0XS5vZmZzZXQpOw0KKyAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1NMT1BFX1JJTkcsDQorICAgICAgICAgICBTaTMyMTh4X1JpbmdfUHJlc2V0c1twcmVzZXRdLnNsb3BlX3JpbmcpOw0KKw0KKyAgaWYoU2kzMjE4eF9SaW5nX1ByZXNldHNbcHJlc2V0XS5pcmluZ19saW0gPiBTSTMyMThYX0lSSU5HX0xJTV9NQVgpDQorICB7DQorICAgIFNpMzIxOHhfUmluZ19QcmVzZXRzW3ByZXNldF0uaXJpbmdfbGltID0gU0kzMjE4WF9JUklOR19MSU1fTUFYOw0KKyAgfQ0KKw0KKyAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX0lSSU5HX0xJTSwNCisgICAgICAgICAgIFNpMzIxOHhfUmluZ19QcmVzZXRzW3ByZXNldF0uaXJpbmdfbGltKTsNCisgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9SVEFDVEgsDQorICAgICAgICAgICBTaTMyMTh4X1JpbmdfUHJlc2V0c1twcmVzZXRdLnJ0YWN0aCk7DQorICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fUlREQ1RILA0KKyAgICAgICAgICAgU2kzMjE4eF9SaW5nX1ByZXNldHNbcHJlc2V0XS5ydGRjdGgpOw0KKyAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1JUQUNEQiwNCisgICAgICAgICAgIFNpMzIxOHhfUmluZ19QcmVzZXRzW3ByZXNldF0ucnRhY2RiKTsNCisgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9SVERDREIsDQorICAgICAgICAgICBTaTMyMTh4X1JpbmdfUHJlc2V0c1twcmVzZXRdLnJ0ZGNkYik7DQorICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fVk9WX1JJTkdfQkFULA0KKyAgICAgICAgICAgU2kzMjE4eF9SaW5nX1ByZXNldHNbcHJlc2V0XS52b3ZfcmluZ19iYXQpOw0KKyAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1ZPVl9SSU5HX0dORCwNCisgICAgICAgICAgIFNpMzIxOHhfUmluZ19QcmVzZXRzW3ByZXNldF0udm92X3JpbmdfZ25kKTsNCisNCisjaWZuZGVmIE5PQ0xBTVBfVkJBVFINCisgIC8qIEFsd2F5cyBsaW1pdCBWQkFUUl9FWFBFQ1QgdG8gdGhlIGdlbmVyYWwgY29uZmlndXJhdGlvbiBtYXhpbXVtICovDQorICBpZihTaTMyMTh4X1JpbmdfUHJlc2V0c1twcmVzZXRdLnZiYXRyX2V4cGVjdCA+DQorICAgICAgU2kzMjE4eF9HZW5lcmFsX0NvbmZpZ3VyYXRpb24udmJhdHJfZXhwZWN0KQ0KKyAgew0KKyAgICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fVkJBVFJfRVhQRUNULA0KKyAgICAgICAgICAgICBTaTMyMTh4X0dlbmVyYWxfQ29uZmlndXJhdGlvbi52YmF0cl9leHBlY3QpOw0KKyAgICBERUJVR19QUklOVChwUHJvc2xpYywNCisgICAgICAgICAgICAgICAgIiVzUmluZ1NldHVwIDogVkJBVFJfRVhQRUNUIDogQ2xhbXBlZCB0byBHZW4gQ29uZiBMaW1pdFxuIixMT0dQUklOVF9QUkVGSVgpOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fVkJBVFJfRVhQRUNULA0KKyAgICAgICAgICAgICBTaTMyMTh4X1JpbmdfUHJlc2V0c1twcmVzZXRdLnZiYXRyX2V4cGVjdCk7DQorICB9DQorDQorI2Vsc2UNCisgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9WQkFUUl9FWFBFQ1QsDQorICAgICAgICAgICBTaTMyMTh4X1JpbmdfUHJlc2V0c1twcmVzZXRdLnZiYXRyX2V4cGVjdCk7DQorI2VuZGlmDQorDQorDQorICBXcml0ZVJlZyhwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SRUdfUklOR1RBTE8sDQorICAgICAgICAgICBTaTMyMTh4X1JpbmdfUHJlc2V0c1twcmVzZXRdLnRhbG8pOw0KKyAgV3JpdGVSZWcocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkVHX1JJTkdUQUhJLA0KKyAgICAgICAgICAgU2kzMjE4eF9SaW5nX1ByZXNldHNbcHJlc2V0XS50YWhpKTsNCisgIFdyaXRlUmVnKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JFR19SSU5HVElMTywNCisgICAgICAgICAgIFNpMzIxOHhfUmluZ19QcmVzZXRzW3ByZXNldF0udGlsbyk7DQorICBXcml0ZVJlZyhwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SRUdfUklOR1RJSEksDQorICAgICAgICAgICBTaTMyMTh4X1JpbmdfUHJlc2V0c1twcmVzZXRdLnRpaGkpOw0KKw0KKyAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1ZCQVRfVFJBQ0tfTUlOX1JORywNCisgICAgICAgICAgIFNpMzIxOHhfUmluZ19QcmVzZXRzW3ByZXNldF0uZGNkY192cmVmX21pbl9ybmcpOw0KKw0KKyAgLyoNCisgICoqIExQUiBIYW5kbGVyDQorICAqKg0KKyAgKiogSWYgVVNFUlNUQVQgPT0gMHgwMSwgYWRqdXN0IFJJTkdDT04gYW5kIGNsZWFyIFVTRVJTVEFUDQorICAqLw0KKyAgaWYgKFNpMzIxOHhfUmluZ19QcmVzZXRzW3ByZXNldF0udXNlcnN0YXQgPT0gMHgwMSkNCisgIHsNCisgICAgV3JpdGVSZWcocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkVHX1JJTkdDT04sDQorICAgICAgICAgICAgICgweDgwfFNpMzIxOHhfUmluZ19QcmVzZXRzW3ByZXNldF0ucmluZ2NvbikgJiB+KDB4NDApKTsNCisgICAgV3JpdGVSZWcocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkVHX1VTRVJTVEFULDB4MDApOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICBXcml0ZVJlZyhwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SRUdfUklOR0NPTiwNCisgICAgICAgICAgICAgU2kzMjE4eF9SaW5nX1ByZXNldHNbcHJlc2V0XS5yaW5nY29uKTsNCisgICAgV3JpdGVSZWcocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkVHX1VTRVJTVEFULA0KKyAgICAgICAgICAgICBTaTMyMTh4X1JpbmdfUHJlc2V0c1twcmVzZXRdLnVzZXJzdGF0KTsNCisgIH0NCisNCisNCisgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9WQ01fUklORywNCisgICAgICAgICAgIFNpMzIxOHhfUmluZ19QcmVzZXRzW3ByZXNldF0udmNtX3JpbmcpOw0KKyAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1ZDTV9SSU5HX0ZJWEVELA0KKyAgICAgICAgICAgU2kzMjE4eF9SaW5nX1ByZXNldHNbcHJlc2V0XS52Y21fcmluZ19maXhlZCk7DQorICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fREVMVEFfVkNNLA0KKyAgICAgICAgICAgU2kzMjE4eF9SaW5nX1ByZXNldHNbcHJlc2V0XS5kZWx0YV92Y20pOw0KKw0KKw0KKyAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX0RDRENfUk5HVFlQRSwNCisgICAgICAgICAgIFNpMzIxOHhfUmluZ19QcmVzZXRzW3ByZXNldF0uZGNkY19ybmd0eXBlKTsNCisNCisNCisgIC8qDQorICAqKiBJZiBtdWx0aSBib20gc3VwcG9ydGVkICoqQU5EKiogYSBidWNrIGJvb3N0IGNvbnZlcnRlcg0KKyAgKiogaXMgYmVpbmcgdXNlZCwgZm9yY2UgZGNkY19ybmd0eXBlIHRvIGJlIGZpeGVkLg0KKyAgKi8NCisjaWZkZWYgU0lWT0lDRV9NVUxUSV9CT01fU1VQUE9SVA0KKyNkZWZpbmUgRENEQ19STkdUWVBFX0JLQlQgICAgIDBMDQorICAvKiBBdXRvbWF0aWNhbGx5IGFkanVzdCBEQ0RDX1JOR1RZUEUgKi8NCisgIGlmKFNpMzIxOHhfR2VuZXJhbF9Db25maWd1cmF0aW9uLmJvbV9vcHRpb24gPT0gQk9fRENEQ19CVUNLX0JPT1NUKQ0KKyAgew0KKyAgICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fRENEQ19STkdUWVBFLERDRENfUk5HVFlQRV9CS0JUKTsNCisgIH0NCisjZW5kaWYNCisNCisNCisgIHJldHVybiBSQ19OT05FOw0KK30NCisjZW5kaWYNCisNCisvKg0KKyoqIEZ1bmN0aW9uOiBQUk9TTElDX1pzeW50aFNldHVwDQorKioNCisqKiBEZXNjcmlwdGlvbjoNCisqKiBjb25maWd1cmUgaW1wZWRhbmNlIHN5bnRoZXNpcw0KKyovDQorDQorI2lmbmRlZiBESVNBQkxFX1pTWU5USF9TRVRVUA0KK2ludCBTaTMyMTh4X1pzeW50aFNldHVwIChwcm9zbGljQ2hhblR5cGUgKnBQcm9zbGljLCBpbnQgcHJlc2V0KQ0KK3sNCisgIHVJbnQ4IGxmOw0KKyAgdUludDggY2FsX2VuID0gMDsNCisgIHVJbnQxNiB0aW1lciA9IDUwMDsNCisNCisgIGlmKHBQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQ0KKyAgew0KKyAgICByZXR1cm4gUkNfQ0hBTk5FTF9UWVBFX0VSUjsNCisgIH0NCisNCisgIGxmID0gUmVhZFJlZyhwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SRUdfTElORUZFRUQpOw0KKyAgV3JpdGVSZWcocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkVHX0xJTkVGRUVELDApOw0KKyAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1RYQUNFUV9DMCwNCisgICAgICAgICAgIFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbcHJlc2V0XS5hdWRpb0VRLnR4YWNlcV9jMCk7DQorICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fVFhBQ0VRX0MxLA0KKyAgICAgICAgICAgU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1twcmVzZXRdLmF1ZGlvRVEudHhhY2VxX2MxKTsNCisgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9UWEFDRVFfQzIsDQorICAgICAgICAgICBTaTMyMTh4X0ltcGVkYW5jZV9QcmVzZXRzW3ByZXNldF0uYXVkaW9FUS50eGFjZXFfYzIpOw0KKyAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1RYQUNFUV9DMywNCisgICAgICAgICAgIFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbcHJlc2V0XS5hdWRpb0VRLnR4YWNlcV9jMyk7DQorICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fUlhBQ0VRX0MwLA0KKyAgICAgICAgICAgU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1twcmVzZXRdLmF1ZGlvRVEucnhhY2VxX2MwKTsNCisgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9SWEFDRVFfQzEsDQorICAgICAgICAgICBTaTMyMTh4X0ltcGVkYW5jZV9QcmVzZXRzW3ByZXNldF0uYXVkaW9FUS5yeGFjZXFfYzEpOw0KKyAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1JYQUNFUV9DMiwNCisgICAgICAgICAgIFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbcHJlc2V0XS5hdWRpb0VRLnJ4YWNlcV9jMik7DQorICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fUlhBQ0VRX0MzLA0KKyAgICAgICAgICAgU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1twcmVzZXRdLmF1ZGlvRVEucnhhY2VxX2MzKTsNCisgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9FQ0ZJUl9DMiwNCisgICAgICAgICAgIFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbcHJlc2V0XS5oeWJyaWQuZWNmaXJfYzIpOw0KKyAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX0VDRklSX0MzLA0KKyAgICAgICAgICAgU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1twcmVzZXRdLmh5YnJpZC5lY2Zpcl9jMyk7DQorICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fRUNGSVJfQzQsDQorICAgICAgICAgICBTaTMyMTh4X0ltcGVkYW5jZV9QcmVzZXRzW3ByZXNldF0uaHlicmlkLmVjZmlyX2M0KTsNCisgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9FQ0ZJUl9DNSwNCisgICAgICAgICAgIFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbcHJlc2V0XS5oeWJyaWQuZWNmaXJfYzUpOw0KKyAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX0VDRklSX0M2LA0KKyAgICAgICAgICAgU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1twcmVzZXRdLmh5YnJpZC5lY2Zpcl9jNik7DQorICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fRUNGSVJfQzcsDQorICAgICAgICAgICBTaTMyMTh4X0ltcGVkYW5jZV9QcmVzZXRzW3ByZXNldF0uaHlicmlkLmVjZmlyX2M3KTsNCisgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9FQ0ZJUl9DOCwNCisgICAgICAgICAgIFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbcHJlc2V0XS5oeWJyaWQuZWNmaXJfYzgpOw0KKyAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX0VDRklSX0M5LA0KKyAgICAgICAgICAgU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1twcmVzZXRdLmh5YnJpZC5lY2Zpcl9jOSk7DQorICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fRUNJSVJfQjAsDQorICAgICAgICAgICBTaTMyMTh4X0ltcGVkYW5jZV9QcmVzZXRzW3ByZXNldF0uaHlicmlkLmVjZmlyX2IwKTsNCisgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9FQ0lJUl9CMSwNCisgICAgICAgICAgIFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbcHJlc2V0XS5oeWJyaWQuZWNmaXJfYjEpOw0KKyAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX0VDSUlSX0ExLA0KKyAgICAgICAgICAgU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1twcmVzZXRdLmh5YnJpZC5lY2Zpcl9hMSk7DQorICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fRUNJSVJfQTIsDQorICAgICAgICAgICBTaTMyMTh4X0ltcGVkYW5jZV9QcmVzZXRzW3ByZXNldF0uaHlicmlkLmVjZmlyX2EyKTsNCisgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9aU1lOVEhfQTEsDQorICAgICAgICAgICBTaTMyMTh4X0ltcGVkYW5jZV9QcmVzZXRzW3ByZXNldF0uenN5bnRoLnpzeW50aF9hMSk7DQorICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fWlNZTlRIX0EyLA0KKyAgICAgICAgICAgU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1twcmVzZXRdLnpzeW50aC56c3ludGhfYTIpOw0KKyAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1pTWU5USF9CMSwNCisgICAgICAgICAgIFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbcHJlc2V0XS56c3ludGguenN5bnRoX2IxKTsNCisgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9aU1lOVEhfQjAsDQorICAgICAgICAgICBTaTMyMTh4X0ltcGVkYW5jZV9QcmVzZXRzW3ByZXNldF0uenN5bnRoLnpzeW50aF9iMCk7DQorICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fWlNZTlRIX0IyLA0KKyAgICAgICAgICAgU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1twcmVzZXRdLnpzeW50aC56c3ludGhfYjIpOw0KKyAgV3JpdGVSZWcocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkVHX1JBLA0KKyAgICAgICAgICAgU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1twcmVzZXRdLnpzeW50aC5yYSk7DQorICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fVFhBQ0dBSU4sDQorICAgICAgICAgICBTaTMyMTh4X0ltcGVkYW5jZV9QcmVzZXRzW3ByZXNldF0udHhnYWluKTsNCisgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9SWEFDR0FJTl9TQVZFLA0KKyAgICAgICAgICAgU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1twcmVzZXRdLnJ4Z2Fpbik7DQorICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fUlhBQ0dBSU4sDQorICAgICAgICAgICBTaTMyMTh4X0ltcGVkYW5jZV9QcmVzZXRzW3ByZXNldF0ucnhnYWluKTsNCisgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9SWEFDSFBGX0IwXzEsDQorICAgICAgICAgICBTaTMyMTh4X0ltcGVkYW5jZV9QcmVzZXRzW3ByZXNldF0ucnhhY2hwZl9iMF8xKTsNCisgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9SWEFDSFBGX0IxXzEsDQorICAgICAgICAgICBTaTMyMTh4X0ltcGVkYW5jZV9QcmVzZXRzW3ByZXNldF0ucnhhY2hwZl9iMV8xKTsNCisgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9SWEFDSFBGX0ExXzEsDQorICAgICAgICAgICBTaTMyMTh4X0ltcGVkYW5jZV9QcmVzZXRzW3ByZXNldF0ucnhhY2hwZl9hMV8xKTsNCisNCisgIC8qDQorICAqKiBTY2FsZSBiYXNlZCBvbiBkZXNpcmVkIGdhaW4gcGxhbg0KKyAgKi8NCisgIFNpMzIxOHhfZGJnU2V0VFhHYWluKHBQcm9zbGljLFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbcHJlc2V0XS50eGdhaW5fZGIsDQorICAgICAgICAgICAgICAgICAgICAgICBwcmVzZXQsVFhBQ0dBSU5fU0VMKTsNCisgIFNpMzIxOHhfZGJnU2V0UlhHYWluKHBQcm9zbGljLFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbcHJlc2V0XS5yeGdhaW5fZGIsDQorICAgICAgICAgICAgICAgICAgICAgICBwcmVzZXQsUlhBQ0dBSU5fU0VMKTsNCisgIFNpMzIxOHhfVFhBdWRpb0dhaW5TZXR1cChwUHJvc2xpYyxUWEFDR0FJTl9TRUwpOw0KKyAgU2kzMjE4eF9SWEF1ZGlvR2FpblNldHVwKHBQcm9zbGljLFJYQUNHQUlOX1NFTCk7DQorDQorICAvKg0KKyAgKiogUGVyZm9ybSBaY2FsIGluIGNhc2UgT0hUIHVzZWQgKGVnLiBubyBvZmZob29rIGV2ZW50IHRvIHRyaWdnZXIgYXV0byBaY2FsKQ0KKyAgKi8NCisgIFdyaXRlUmVnKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JFR19DQUxSMCwweDAwKTsNCisgIFdyaXRlUmVnKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JFR19DQUxSMSwweDQwKTsNCisgIFdyaXRlUmVnKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JFR19DQUxSMiwweDAwKTsNCisgIFdyaXRlUmVnKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JFR19DQUxSMywweDgwKTsgIC8qIHN0YXJ0IGNhbCAqLw0KKw0KKyAgLyogV2FpdCBmb3IgemNhbCB0byBmaW5pc2ggKi8NCisgIGRvDQorICB7DQorICAgIGNhbF9lbiA9IFJlYWRSZWcocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkVHX0NBTFIzKTsNCisgICAgRGVsYXkocFByb1RpbWVyLDEpOw0KKyAgICB0aW1lci0tOw0KKyAgfQ0KKyAgd2hpbGUoKGNhbF9lbiYweDgwKSYmKHRpbWVyPjApKTsNCisNCisgIFdyaXRlUmVnKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JFR19MSU5FRkVFRCxsZik7DQorDQorICBpZih0aW1lciA+IDApDQorICB7DQorICAgIHJldHVybiBSQ19OT05FOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICByZXR1cm4gUkNfQ0FMX1RJTUVPVVQ7DQorICB9DQorfQ0KKyNlbmRpZg0KKw0KKy8qDQorKiogRnVuY3Rpb246IFBST1NMSUNfQXVkaW9HYWluU2V0dXANCisqKg0KKyoqIERlc2NyaXB0aW9uOg0KKyoqIGNvbmZpZ3VyZSBhdWRpbyBnYWlucw0KKyovDQoraW50IFNpMzIxOHhfVFhBdWRpb0dhaW5TZXR1cCAocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYywgaW50IHByZXNldCkNCit7DQorDQorICBpZihwUHJvc2xpYy0+Y2hhbm5lbFR5cGUgIT0gUFJPU0xJQykNCisgIHsNCisgICAgcmV0dXJuIFJDX0NIQU5ORUxfVFlQRV9FUlI7DQorICB9DQorDQorICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fVFhBQ0dBSU4sDQorICAgICAgICAgICBTaTMyMTh4X2F1ZGlvR2Fpbl9QcmVzZXRzW3ByZXNldF0uYWNnYWluKTsNCisgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9UWEFDRVFfQzAsDQorICAgICAgICAgICBTaTMyMTh4X2F1ZGlvR2Fpbl9QcmVzZXRzW3ByZXNldF0uYWNlcV9jMCk7DQorICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fVFhBQ0VRX0MxLA0KKyAgICAgICAgICAgU2kzMjE4eF9hdWRpb0dhaW5fUHJlc2V0c1twcmVzZXRdLmFjZXFfYzEpOw0KKyAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1RYQUNFUV9DMiwNCisgICAgICAgICAgIFNpMzIxOHhfYXVkaW9HYWluX1ByZXNldHNbcHJlc2V0XS5hY2VxX2MyKTsNCisgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9UWEFDRVFfQzMsDQorICAgICAgICAgICBTaTMyMTh4X2F1ZGlvR2Fpbl9QcmVzZXRzW3ByZXNldF0uYWNlcV9jMyk7DQorDQorICByZXR1cm4gUkNfTk9ORTsNCit9DQorDQorLyoNCisqKiBGdW5jdGlvbjogUFJPU0xJQ19BdWRpb0dhaW5TZXR1cA0KKyoqDQorKiogRGVzY3JpcHRpb246DQorKiogY29uZmlndXJlIGF1ZGlvIGdhaW5zDQorKi8NCisNCitpbnQgU2kzMjE4eF9SWEF1ZGlvR2FpblNldHVwIChwcm9zbGljQ2hhblR5cGUgKnBQcm9zbGljLCBpbnQgcHJlc2V0KQ0KK3sNCisNCisgIGlmKHBQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQ0KKyAgew0KKyAgICByZXR1cm4gUkNfQ0hBTk5FTF9UWVBFX0VSUjsNCisgIH0NCisgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9SWEFDR0FJTl9TQVZFLA0KKyAgICAgICAgICAgU2kzMjE4eF9hdWRpb0dhaW5fUHJlc2V0c1twcmVzZXRdLmFjZ2Fpbik7DQorICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fUlhBQ0dBSU4sDQorICAgICAgICAgICBTaTMyMTh4X2F1ZGlvR2Fpbl9QcmVzZXRzW3ByZXNldF0uYWNnYWluKTsNCisgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9SWEFDRVFfQzAsDQorICAgICAgICAgICBTaTMyMTh4X2F1ZGlvR2Fpbl9QcmVzZXRzW3ByZXNldF0uYWNlcV9jMCk7DQorICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fUlhBQ0VRX0MxLA0KKyAgICAgICAgICAgU2kzMjE4eF9hdWRpb0dhaW5fUHJlc2V0c1twcmVzZXRdLmFjZXFfYzEpOw0KKyAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1JYQUNFUV9DMiwNCisgICAgICAgICAgIFNpMzIxOHhfYXVkaW9HYWluX1ByZXNldHNbcHJlc2V0XS5hY2VxX2MyKTsNCisgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9SWEFDRVFfQzMsDQorICAgICAgICAgICBTaTMyMTh4X2F1ZGlvR2Fpbl9QcmVzZXRzW3ByZXNldF0uYWNlcV9jMyk7DQorDQorICByZXR1cm4gUkNfTk9ORTsNCit9DQorDQorDQorLyoNCisqKiBGdW5jdGlvbjogUFJPU0xJQ19BdWRpb0dhaW5TY2FsZQ0KKyoqDQorKiogRGVzY3JpcHRpb246DQorKiogTXVsdGlwbHkgcGF0aCBnYWluIGJ5IHBhc3NlZCB2YWx1ZSBmb3IgUEdBIGFuZCBFUSBzY2FsZSAobm8gcmVmZXJlbmNlIHRvIGRCLA0KKyoqIG11bHRpcGx5IGJ5IGEgc2NhbGUgZmFjdG9yKQ0KKyovDQoraW50IFNpMzIxOHhfQXVkaW9HYWluU2NhbGUgKHByb3NsaWNDaGFuVHlwZSAqcFByb3NsaWMsIGludCBwcmVzZXQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVJbnQzMiBwZ2Ffc2NhbGUsIHVJbnQzMiBlcV9zY2FsZSxpbnQgcnhfdHhfc2VsKQ0KK3sNCisNCisgIGlmKHJ4X3R4X3NlbCA9PSBUWEFDR0FJTl9TRUwpDQorICB7DQorICAgIFNpMzIxOHhfYXVkaW9HYWluX1ByZXNldHNbVFhBQ0dBSU5fU0VMXS5hY2dhaW4gPQ0KKyAgICAgIChTaTMyMTh4X0ltcGVkYW5jZV9QcmVzZXRzW3ByZXNldF0udHhnYWluLzEwMDApKnBnYV9zY2FsZTsNCisgICAgaWYgKFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbcHJlc2V0XS5hdWRpb0VRLnR4YWNlcV9jMCAmIDB4MTAwMDAwMDBMKQ0KKyAgICB7DQorICAgICAgU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1twcmVzZXRdLmF1ZGlvRVEudHhhY2VxX2MwIHw9IDB4ZjAwMDAwMDBMOw0KKyAgICB9DQorICAgIGlmIChTaTMyMTh4X0ltcGVkYW5jZV9QcmVzZXRzW3ByZXNldF0uYXVkaW9FUS50eGFjZXFfYzEgJiAweDEwMDAwMDAwTCkNCisgICAgew0KKyAgICAgIFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbcHJlc2V0XS5hdWRpb0VRLnR4YWNlcV9jMSB8PSAweGYwMDAwMDAwTDsNCisgICAgfQ0KKyAgICBpZiAoU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1twcmVzZXRdLmF1ZGlvRVEudHhhY2VxX2MyICYgMHgxMDAwMDAwMEwpDQorICAgIHsNCisgICAgICBTaTMyMTh4X0ltcGVkYW5jZV9QcmVzZXRzW3ByZXNldF0uYXVkaW9FUS50eGFjZXFfYzIgfD0gMHhmMDAwMDAwMEw7DQorICAgIH0NCisgICAgaWYgKFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbcHJlc2V0XS5hdWRpb0VRLnR4YWNlcV9jMyAmIDB4MTAwMDAwMDBMKQ0KKyAgICB7DQorICAgICAgU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1twcmVzZXRdLmF1ZGlvRVEudHhhY2VxX2MzIHw9IDB4ZjAwMDAwMDBMOw0KKyAgICB9DQorICAgIFNpMzIxOHhfYXVkaW9HYWluX1ByZXNldHNbVFhBQ0dBSU5fU0VMXS5hY2VxX2MwID0gKChpbnQzMikNCisgICAgICAgIFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbcHJlc2V0XS5hdWRpb0VRLnR4YWNlcV9jMC8xMDAwKSplcV9zY2FsZTsNCisgICAgU2kzMjE4eF9hdWRpb0dhaW5fUHJlc2V0c1tUWEFDR0FJTl9TRUxdLmFjZXFfYzEgPSAoKGludDMyKQ0KKyAgICAgICAgU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1twcmVzZXRdLmF1ZGlvRVEudHhhY2VxX2MxLzEwMDApKmVxX3NjYWxlOw0KKyAgICBTaTMyMTh4X2F1ZGlvR2Fpbl9QcmVzZXRzW1RYQUNHQUlOX1NFTF0uYWNlcV9jMiA9ICgoaW50MzIpDQorICAgICAgICBTaTMyMTh4X0ltcGVkYW5jZV9QcmVzZXRzW3ByZXNldF0uYXVkaW9FUS50eGFjZXFfYzIvMTAwMCkqZXFfc2NhbGU7DQorICAgIFNpMzIxOHhfYXVkaW9HYWluX1ByZXNldHNbVFhBQ0dBSU5fU0VMXS5hY2VxX2MzID0gKChpbnQzMikNCisgICAgICAgIFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbcHJlc2V0XS5hdWRpb0VRLnR4YWNlcV9jMy8xMDAwKSplcV9zY2FsZTsNCisNCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1RYQUNHQUlOLA0KKyAgICAgICAgICAgICBTaTMyMTh4X2F1ZGlvR2Fpbl9QcmVzZXRzW1RYQUNHQUlOX1NFTF0uYWNnYWluKTsNCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1RYQUNFUV9DMCwNCisgICAgICAgICAgICAgU2kzMjE4eF9hdWRpb0dhaW5fUHJlc2V0c1tUWEFDR0FJTl9TRUxdLmFjZXFfYzApOw0KKyAgICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fVFhBQ0VRX0MxLA0KKyAgICAgICAgICAgICBTaTMyMTh4X2F1ZGlvR2Fpbl9QcmVzZXRzW1RYQUNHQUlOX1NFTF0uYWNlcV9jMSk7DQorICAgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9UWEFDRVFfQzIsDQorICAgICAgICAgICAgIFNpMzIxOHhfYXVkaW9HYWluX1ByZXNldHNbVFhBQ0dBSU5fU0VMXS5hY2VxX2MyKTsNCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1RYQUNFUV9DMywNCisgICAgICAgICAgICAgU2kzMjE4eF9hdWRpb0dhaW5fUHJlc2V0c1tUWEFDR0FJTl9TRUxdLmFjZXFfYzMpOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICBTaTMyMTh4X2F1ZGlvR2Fpbl9QcmVzZXRzW1JYQUNHQUlOX1NFTF0uYWNnYWluID0NCisgICAgICAoU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1twcmVzZXRdLnJ4Z2Fpbi8xMDAwKSpwZ2Ffc2NhbGU7DQorICAgIGlmIChTaTMyMTh4X0ltcGVkYW5jZV9QcmVzZXRzW3ByZXNldF0uYXVkaW9FUS5yeGFjZXFfYzAgJiAweDEwMDAwMDAwTCkNCisgICAgew0KKyAgICAgIFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbcHJlc2V0XS5hdWRpb0VRLnJ4YWNlcV9jMCB8PSAweGYwMDAwMDAwTDsNCisgICAgfQ0KKyAgICBpZiAoU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1twcmVzZXRdLmF1ZGlvRVEucnhhY2VxX2MxICYgMHgxMDAwMDAwMEwpDQorICAgIHsNCisgICAgICBTaTMyMTh4X0ltcGVkYW5jZV9QcmVzZXRzW3ByZXNldF0uYXVkaW9FUS5yeGFjZXFfYzEgfD0gMHhmMDAwMDAwMEw7DQorICAgIH0NCisgICAgaWYgKFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbcHJlc2V0XS5hdWRpb0VRLnJ4YWNlcV9jMiAmIDB4MTAwMDAwMDBMKQ0KKyAgICB7DQorICAgICAgU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1twcmVzZXRdLmF1ZGlvRVEucnhhY2VxX2MyIHw9IDB4ZjAwMDAwMDBMOw0KKyAgICB9DQorICAgIGlmIChTaTMyMTh4X0ltcGVkYW5jZV9QcmVzZXRzW3ByZXNldF0uYXVkaW9FUS5yeGFjZXFfYzMgJiAweDEwMDAwMDAwTCkNCisgICAgew0KKyAgICAgIFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbcHJlc2V0XS5hdWRpb0VRLnJ4YWNlcV9jMyB8PSAweGYwMDAwMDAwTDsNCisgICAgfQ0KKyAgICBTaTMyMTh4X2F1ZGlvR2Fpbl9QcmVzZXRzW1JYQUNHQUlOX1NFTF0uYWNlcV9jMCA9ICgoaW50MzIpDQorICAgICAgICBTaTMyMTh4X0ltcGVkYW5jZV9QcmVzZXRzW3ByZXNldF0uYXVkaW9FUS5yeGFjZXFfYzAvMTAwMCkqZXFfc2NhbGU7DQorICAgIFNpMzIxOHhfYXVkaW9HYWluX1ByZXNldHNbUlhBQ0dBSU5fU0VMXS5hY2VxX2MxID0gKChpbnQzMikNCisgICAgICAgIFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbcHJlc2V0XS5hdWRpb0VRLnJ4YWNlcV9jMS8xMDAwKSplcV9zY2FsZTsNCisgICAgU2kzMjE4eF9hdWRpb0dhaW5fUHJlc2V0c1tSWEFDR0FJTl9TRUxdLmFjZXFfYzIgPSAoKGludDMyKQ0KKyAgICAgICAgU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1twcmVzZXRdLmF1ZGlvRVEucnhhY2VxX2MyLzEwMDApKmVxX3NjYWxlOw0KKyAgICBTaTMyMTh4X2F1ZGlvR2Fpbl9QcmVzZXRzW1JYQUNHQUlOX1NFTF0uYWNlcV9jMyA9ICgoaW50MzIpDQorICAgICAgICBTaTMyMTh4X0ltcGVkYW5jZV9QcmVzZXRzW3ByZXNldF0uYXVkaW9FUS5yeGFjZXFfYzMvMTAwMCkqZXFfc2NhbGU7DQorDQorICAgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9SWEFDR0FJTl9TQVZFLA0KKyAgICAgICAgICAgICBTaTMyMTh4X2F1ZGlvR2Fpbl9QcmVzZXRzW1JYQUNHQUlOX1NFTF0uYWNnYWluKTsNCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1JYQUNHQUlOLA0KKyAgICAgICAgICAgICBTaTMyMTh4X2F1ZGlvR2Fpbl9QcmVzZXRzW1JYQUNHQUlOX1NFTF0uYWNnYWluKTsNCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1JYQUNFUV9DMCwNCisgICAgICAgICAgICAgU2kzMjE4eF9hdWRpb0dhaW5fUHJlc2V0c1tSWEFDR0FJTl9TRUxdLmFjZXFfYzApOw0KKyAgICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fUlhBQ0VRX0MxLA0KKyAgICAgICAgICAgICBTaTMyMTh4X2F1ZGlvR2Fpbl9QcmVzZXRzW1JYQUNHQUlOX1NFTF0uYWNlcV9jMSk7DQorICAgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9SWEFDRVFfQzIsDQorICAgICAgICAgICAgIFNpMzIxOHhfYXVkaW9HYWluX1ByZXNldHNbUlhBQ0dBSU5fU0VMXS5hY2VxX2MyKTsNCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1JYQUNFUV9DMywNCisgICAgICAgICAgICAgU2kzMjE4eF9hdWRpb0dhaW5fUHJlc2V0c1tSWEFDR0FJTl9TRUxdLmFjZXFfYzMpOw0KKyAgfQ0KKyAgcmV0dXJuIDA7DQorfQ0KK2ludCBTaTMyMTh4X1RYQXVkaW9HYWluU2NhbGUgKHByb3NsaWNDaGFuVHlwZSAqcFByb3NsaWMsIGludCBwcmVzZXQsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUludDMyIHBnYV9zY2FsZSwgdUludDMyIGVxX3NjYWxlKQ0KK3sNCisgIHJldHVybiBTaTMyMTh4X0F1ZGlvR2FpblNjYWxlKHBQcm9zbGljLHByZXNldCxwZ2Ffc2NhbGUsZXFfc2NhbGUsVFhBQ0dBSU5fU0VMKTsNCit9DQoraW50IFNpMzIxOHhfUlhBdWRpb0dhaW5TY2FsZSAocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYywgaW50IHByZXNldCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1SW50MzIgcGdhX3NjYWxlLCB1SW50MzIgZXFfc2NhbGUpDQorew0KKyAgcmV0dXJuIFNpMzIxOHhfQXVkaW9HYWluU2NhbGUocFByb3NsaWMscHJlc2V0LHBnYV9zY2FsZSxlcV9zY2FsZSxSWEFDR0FJTl9TRUwpOw0KK30NCisNCisNCisvKg0KKyoqIEZ1bmN0aW9uOiBQUk9TTElDX0RDRmVlZFNldHVwDQorKioNCisqKiBEZXNjcmlwdGlvbjoNCisqKiBjb25maWd1cmUgZGMgZmVlZA0KKyovDQorDQorI2lmbmRlZiBESVNBQkxFX0RDRkVFRF9TRVRVUA0KK2ludCBTaTMyMTh4X0RDRmVlZFNldHVwQ2ZnIChwcm9zbGljQ2hhblR5cGUgKnBQcm9zbGljLCBTaTMyMTh4X0RDZmVlZF9DZmcgKmNmZywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByZXNldCkNCit7DQorICB1SW50OCBsZjsNCisNCisgIGlmKHBQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQ0KKyAgew0KKyAgICByZXR1cm4gUkNfQ0hBTk5FTF9UWVBFX0VSUjsNCisgIH0NCisgIGxmID0gUmVhZFJlZyhwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SRUdfTElORUZFRUQpOw0KKyAgV3JpdGVSZWcocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkVHX0xJTkVGRUVELDApOw0KKyAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1NMT1BFX1ZMSU0sDQorICAgICAgICAgICBjZmdbcHJlc2V0XS5zbG9wZV92bGltKTsNCisgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9TTE9QRV9SRkVFRCwNCisgICAgICAgICAgIGNmZ1twcmVzZXRdLnNsb3BlX3JmZWVkKTsNCisgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9TTE9QRV9JTElNLA0KKyAgICAgICAgICAgY2ZnW3ByZXNldF0uc2xvcGVfaWxpbSk7DQorICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fU0xPUEVfREVMVEExLGNmZ1twcmVzZXRdLmRlbHRhMSk7DQorICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fU0xPUEVfREVMVEEyLGNmZ1twcmVzZXRdLmRlbHRhMik7DQorICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fVl9WTElNLGNmZ1twcmVzZXRdLnZfdmxpbSk7DQorICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fVl9SRkVFRCxjZmdbcHJlc2V0XS52X3JmZWVkKTsNCisgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9WX0lMSU0sY2ZnW3ByZXNldF0udl9pbGltKTsNCisgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9DT05TVF9SRkVFRCwNCisgICAgICAgICAgIGNmZ1twcmVzZXRdLmNvbnN0X3JmZWVkKTsNCisgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9DT05TVF9JTElNLA0KKyAgICAgICAgICAgY2ZnW3ByZXNldF0uY29uc3RfaWxpbSk7DQorICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fSV9WTElNLGNmZ1twcmVzZXRdLmlfdmxpbSk7DQorICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fTENST05ISyxjZmdbcHJlc2V0XS5sY3JvbmhrKTsNCisgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9MQ1JPRkZISyxjZmdbcHJlc2V0XS5sY3JvZmZoayk7DQorICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fTENSREJJLGNmZ1twcmVzZXRdLmxjcmRiaSk7DQorICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fTE9OR0hJVEgsY2ZnW3ByZXNldF0ubG9uZ2hpdGgpOw0KKyAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX0xPTkdMT1RILGNmZ1twcmVzZXRdLmxvbmdsb3RoKTsNCisgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9MT05HREJJLGNmZ1twcmVzZXRdLmxvbmdkYmkpOw0KKyAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX0xDUk1BU0ssY2ZnW3ByZXNldF0ubGNybWFzayk7DQorICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fTENSTUFTS19QT0xSRVYsDQorICAgICAgICAgICBjZmdbcHJlc2V0XS5sY3JtYXNrX3BvbHJldik7DQorICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fTENSTUFTS19TVEFURSwNCisgICAgICAgICAgIGNmZ1twcmVzZXRdLmxjcm1hc2tfc3RhdGUpOw0KKyAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX0xDUk1BU0tfTElORUNBUCwNCisgICAgICAgICAgIGNmZ1twcmVzZXRdLmxjcm1hc2tfbGluZWNhcCk7DQorICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fVkNNX09ILGNmZ1twcmVzZXRdLnZjbV9vaCk7DQorICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fVk9WX0JBVCxjZmdbcHJlc2V0XS52b3ZfYmF0KTsNCisgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9WT1ZfR05ELGNmZ1twcmVzZXRdLnZvdl9nbmQpOw0KKyAgV3JpdGVSZWcocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkVHX0xJTkVGRUVELGxmKTsNCisNCisgIHJldHVybiBSQ19OT05FOw0KK30NCisNCisjZW5kaWYNCisNCisvKg0KKyoqIEZ1bmN0aW9uOiBQUk9TTElDX1B1bHNlTWV0ZXJTZXR1cA0KKyoqDQorKiogRGVzY3JpcHRpb246DQorKiogY29uZmlndXJlIHB1bHNlIG1ldGVyaW5nDQorKi8NCisNCisjaWZuZGVmIERJU0FCTEVfUFVMU0VfU0VUVVANCitpbnQgU2kzMjE4eF9QdWxzZU1ldGVyU2V0dXAgKHByb3NsaWNDaGFuVHlwZSAqcFByb3NsaWMsIGludCBwcmVzZXQpDQorew0KKyAgdUludDggcmVnOw0KKw0KKyAgaWYocFByb3NsaWMtPmNoYW5uZWxUeXBlICE9IFBST1NMSUMpDQorICB7DQorICAgIHJldHVybiBSQ19DSEFOTkVMX1RZUEVfRVJSOw0KKyAgfQ0KKw0KKyAgZWxzZQ0KKyAgew0KKyAgICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fUE1fQU1QX1RIUkVTSCwNCisgICAgICAgICAgICAgU2kzMjE4eF9QdWxzZU1ldGVyX1ByZXNldHNbcHJlc2V0XS5wbV9hbXBfdGhyZXNoKTsNCisgICAgcmVnID0gKFNpMzIxOHhfUHVsc2VNZXRlcl9QcmVzZXRzW3ByZXNldF0ucG1GcmVxPDwxKXwNCisgICAgICAgICAgKFNpMzIxOHhfUHVsc2VNZXRlcl9QcmVzZXRzW3ByZXNldF0ucG1BdXRvPDwzKTsNCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1BNX0FDVElWRSwNCisgICAgICAgICAgICAgU2kzMjE4eF9QdWxzZU1ldGVyX1ByZXNldHNbcHJlc2V0XS5wbUFjdGl2ZSk7DQorICAgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9QTV9JTkFDVElWRSwNCisgICAgICAgICAgICAgU2kzMjE4eF9QdWxzZU1ldGVyX1ByZXNldHNbcHJlc2V0XS5wbUluYWN0aXZlKTsNCisgICAgV3JpdGVSZWcocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkVHX1BNQ09OLHJlZyk7DQorICAgIHJldHVybiBSQ19OT05FOw0KKyAgfQ0KKw0KK30NCisjZW5kaWYNCisNCisvKg0KKyoqIEZ1bmN0aW9uOiBQUk9TTElDX1BDTVNldHVwDQorKioNCisqKiBEZXNjcmlwdGlvbjoNCisqKiBjb25maWd1cmUgcGNtDQorKi8NCisNCisjaWZuZGVmIERJU0FCTEVfUENNX1NFVFVQDQoraW50IFNpMzIxOHhfUENNU2V0dXAocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYywgaW50IHByZXNldCkNCit7DQorICB1SW50OCByZWdUZW1wOw0KKyAgdUludDggcG1FbjsNCisNCisgIGlmKHBQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQ0KKyAgew0KKyAgICByZXR1cm4gUkNfQ0hBTk5FTF9UWVBFX0VSUjsNCisgIH0NCisNCisgIHBtRW4gPSBSZWFkUmVnKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCwNCisgICAgICAgICAgICAgICAgIFNJMzIxOFhfUkVHX1BNQ09OKSAmIDB4MDE7IC8qIFBNL3dpZGViYW5kIGxvY2tvdXQgKi8NCisgIGlmIChTaTMyMTh4X1BDTV9QcmVzZXRzW3ByZXNldF0ud2lkZWJhbmRFbiAmJiBwbUVuKQ0KKyAgew0KKyNpZmRlZiBFTkFCTEVfREVCVUcNCisgICAgTE9HUFJJTlQgKCIlcyBXaWRlYmFuZCBNb2RlIGlzIG5vdCBzdXBwb3J0ZWQgd2hpbGUgUHVsc2UgTWV0ZXJpbmcgaXMgZW5hYmxlZC5cbiIsDQorICAgICAgICAgICAgICBMT0dQUklOVF9QUkVGSVgpOw0KKyNlbmRpZg0KKyAgfQ0KKyAgZWxzZSBpZiAoU2kzMjE4eF9QQ01fUHJlc2V0c1twcmVzZXRdLndpZGViYW5kRW4gJiYgIXBtRW4pDQorICB7DQorICAgIC8qIFRYSUlSIHNldHRpbmdzICovDQorICAgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9UWEFDSUlSX0IwXzEsMHgzNTM4RTgwTCk7DQorICAgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9UWEFDSUlSX0IxXzEsMHgzNTM4RTgwTCk7DQorICAgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9UWEFDSUlSX0ExXzEsMHgxQUE5MTAwTCk7DQorICAgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9UWEFDSUlSX0IwXzIsMHgyMTZEMTAwTCk7DQorICAgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9UWEFDSUlSX0IxXzIsMHgyNTA1NDAwTCk7DQorICAgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9UWEFDSUlSX0IyXzIsMHgyMTZEMTAwTCk7DQorICAgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9UWEFDSUlSX0ExXzIsMHgyQ0I4MTAwTCk7DQorICAgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9UWEFDSUlSX0EyXzIsMHgxRDdGQTUwMEwpOw0KKyAgICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fVFhBQ0lJUl9CMF8zLDB4MkNEOUIwMEwpOw0KKyAgICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fVFhBQ0lJUl9CMV8zLDB4MTI3NkQwMEwpOw0KKyAgICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fVFhBQ0lJUl9CMl8zLDB4MkNEOUIwMEwpOw0KKyAgICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fVFhBQ0lJUl9BMV8zLDB4MjMzNTMwMEwpOw0KKyAgICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fVFhBQ0lJUl9BMl8zLDB4MTlENUY3MDBMKTsNCisgICAgLyogUlhJSVIgc2V0dGluZ3MgKi8NCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1JYQUNJSVJfQjBfMSwweDZBNzFEMDBMKTsNCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1JYQUNJSVJfQjFfMSwweDZBNzFEMDBMKTsNCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1JYQUNJSVJfQTFfMSwweDFBQTkxMDBMKTsNCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1JYQUNJSVJfQjBfMiwweDIxNkQxMDBMKTsNCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1JYQUNJSVJfQjFfMiwweDI1MDU0MDBMKTsNCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1JYQUNJSVJfQjJfMiwweDIxNkQxMDBMKTsNCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1JYQUNJSVJfQTFfMiwweDJDQjgxMDBMKTsNCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1JYQUNJSVJfQTJfMiwweDFEN0ZBNTAwTCk7DQorICAgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9SWEFDSUlSX0IwXzMsMHgyQ0Q5QjAwTCk7DQorICAgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9SWEFDSUlSX0IxXzMsMHgxMjc2RDAwTCk7DQorICAgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9SWEFDSUlSX0IyXzMsMHgyQ0Q5QjAwTCk7DQorICAgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9SWEFDSUlSX0ExXzMsMHgyMzM1MzAwTCk7DQorICAgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9SWEFDSUlSX0EyXzMsMHgxOUQ1RjcwMEwpOw0KKyAgICAvKg0KKyAgICAqKiBSWEhQRg0KKyAgICAqKiBOb3RlOiAgQ2FsbGluZyBQcm9TTElDX1pzeW50aFNldHVwKCkgd2lsbCBvdmVyd3JpdGUgc29tZQ0KKyAgICAqKiAgICAgICAgb2YgdGhlc2UgdmFsdWVzLiAgUHJvU0xJQ19QQ01TZXR1cCgpIHNob3VsZCBhbHdheXMNCisgICAgKiogICAgICAgIGJlIGNhbGxlZCBhZnRlciBsb2FkaW5nIGNvZWZmaWNpZW50cyB3aGVuIHVzaW5nDQorICAgICoqICAgICAgICB3aWRlYmFuZCBtb2RlDQorICAgICovDQorICAgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9SWEFDSFBGX0IwXzEsMHg3Q0ZGOTAwTCk7DQorICAgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9SWEFDSFBGX0IxXzEsMHgxODMwMDcwMEwpOw0KKyAgICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fUlhBQ0hQRl9BMV8xLDB4NzlGRjIwMUwpOw0KKyAgICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fUlhBQ0hQRl9CMF8yLDB4N0NFREExREwpOw0KKyAgICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fUlhBQ0hQRl9CMV8yLDB4MTA2MzIwRDRMKTsNCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1JYQUNIUEZfQjJfMiwweDdDRURBMURMKTsNCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1JYQUNIUEZfQTFfMiwweEY5QTkxMEZMKTsNCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1JYQUNIUEZfQTJfMiwweDE4NUZGREE4TCk7DQorICAgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9SWEFDSFBGX0dBSU4sMHgwODAwMDAwMEwpOw0KKyAgICAvKiBUWEhQRiAqLw0KKyAgICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fVFhBQ0hQRl9CMF8xLDB4MEM3RkY0Q0VMKTsNCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1RYQUNIUEZfQjFfMSwweDEzODAwQjMyTCk7DQorICAgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9UWEFDSFBGX0ExXzEsMHgwNzlGRjIwMUwpOw0KKyAgICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fVFhBQ0hQRl9CMF8yLDB4MDMwRkREMTBMKTsNCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1RYQUNIUEZfQjFfMiwweDE5RTA5OTZDTCk7DQorICAgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9UWEFDSFBGX0IyXzIsMHgwMzBGREQxMEwpOw0KKyAgICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fVFhBQ0hQRl9BMV8yLDB4MEY5QTkxMEZMKTsNCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1RYQUNIUEZfQTJfMiwweDE4NUZGREE4TCk7DQorICAgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9UWEFDSFBGX0dBSU4sMHgwQ0QzMDAwMEwpOw0KKw0KKyAgICByZWdUZW1wID0gUmVhZFJlZyhwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SRUdfRElHQ09OKTsNCisjaWZuZGVmIERJU0FCTEVfSFBGX1dJREVCQU5EDQorICAgIFdyaXRlUmVnKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JFR19ESUdDT04sDQorICAgICAgICAgICAgIHJlZ1RlbXAmfigweEMpKTsgLyogRW5hYmxlIEhQRiAqLw0KKyNlbHNlDQorICAgIFdyaXRlUmVnKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JFR19ESUdDT04sDQorICAgICAgICAgICAgIHJlZ1RlbXB8KDB4QykpOyAvKiBEaXNhYmxlIEhQRiAqLw0KKyNlbmRpZg0KKyAgICByZWdUZW1wID0gUmVhZFJlZyhwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SRUdfRU5IQU5DRSk7DQorICAgIFdyaXRlUmVnKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JFR19FTkhBTkNFLHJlZ1RlbXB8MSk7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIHJlZ1RlbXAgPSBSZWFkUmVnKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JFR19ESUdDT04pOw0KKyAgICBXcml0ZVJlZyhwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SRUdfRElHQ09OLHJlZ1RlbXAmfigweEMpKTsNCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1RYQUNJSVJfQjBfMSwweDM1MzhFODBMKTsNCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1RYQUNJSVJfQjFfMSwweDM1MzhFODBMKTsNCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1RYQUNJSVJfQTFfMSwweDFBQTkxMDBMKTsNCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1RYQUNJSVJfQjBfMiwweDIxNkQxMDBMKTsNCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1RYQUNJSVJfQjFfMiwweDI1MDU0MDBMKTsNCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1RYQUNJSVJfQjJfMiwweDIxNkQxMDBMKTsNCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1RYQUNJSVJfQTFfMiwweDJDQjgxMDBMKTsNCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1RYQUNJSVJfQTJfMiwweDFEN0ZBNTAwTCk7DQorICAgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9UWEFDSUlSX0IwXzMsMHgyQ0Q5QjAwTCk7DQorICAgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9UWEFDSUlSX0IxXzMsMHgxMjc2RDAwTCk7DQorICAgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9UWEFDSUlSX0IyXzMsMHgyQ0Q5QjAwTCk7DQorICAgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9UWEFDSUlSX0ExXzMsMHgyMzM1MzAwTCk7DQorICAgIFdyaXRlUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JBTV9UWEFDSUlSX0EyXzMsMHgxOUQ1RjcwMEwpOw0KKyAgICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fUlhBQ0lJUl9CMF8xLDB4NkE3MUQwMEwpOw0KKyAgICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fUlhBQ0lJUl9CMV8xLDB4NkE3MUQwMEwpOw0KKyAgICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fUlhBQ0lJUl9BMV8xLDB4MUFBOTEwMEwpOw0KKyAgICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fUlhBQ0lJUl9CMF8yLDB4MjE2RDEwMEwpOw0KKyAgICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fUlhBQ0lJUl9CMV8yLDB4MjUwNTQwMEwpOw0KKyAgICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fUlhBQ0lJUl9CMl8yLDB4MjE2RDEwMEwpOw0KKyAgICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fUlhBQ0lJUl9BMV8yLDB4MkNCODEwMEwpOw0KKyAgICBXcml0ZVJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fUlhBQ0lJUl9BMl8yLDB4MUQ3RkE1MDBMKTsNCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1JYQUNJSVJfQjBfMywweDJDRDlCMDBMKTsNCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1JYQUNJSVJfQjFfMywweDEyNzZEMDBMKTsNCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1JYQUNJSVJfQjJfMywweDJDRDlCMDBMKTsNCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1JYQUNJSVJfQTFfMywweDIzMzUzMDBMKTsNCisgICAgV3JpdGVSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1JYQUNJSVJfQTJfMywweDE5RDVGNzAwTCk7DQorICAgIHJlZ1RlbXAgPSBSZWFkUmVnKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JFR19FTkhBTkNFKTsNCisgICAgV3JpdGVSZWcocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkVHX0VOSEFOQ0UscmVnVGVtcCZ+KDEpKTsNCisgIH0NCisgIHJlZ1RlbXAgPSBTaTMyMTh4X1BDTV9QcmVzZXRzW3ByZXNldF0ucGNtRm9ybWF0Ow0KKyAgcmVnVGVtcCB8PSBTaTMyMTh4X1BDTV9QcmVzZXRzW3ByZXNldF0ucGNtX3RyaSA8PCA1Ow0KKyAgcmVnVGVtcCB8PSBTaTMyMTh4X1BDTV9QcmVzZXRzW3ByZXNldF0uYWxhd19pbnYgPDwgMjsNCisgIFdyaXRlUmVnKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JFR19QQ01NT0RFLHJlZ1RlbXApOw0KKyAgcmVnVGVtcCA9IFJlYWRSZWcocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkVHX1BDTVRYSEkpOw0KKyAgcmVnVGVtcCAmPSAzOw0KKyAgcmVnVGVtcCB8PSBTaTMyMTh4X1BDTV9QcmVzZXRzW3ByZXNldF0udHhfZWRnZTw8NDsNCisgIFdyaXRlUmVnKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCxTSTMyMThYX1JFR19QQ01UWEhJLHJlZ1RlbXApOw0KKw0KKyAgcmV0dXJuIFJDX05PTkU7DQorfQ0KKyNlbmRpZg0KKw0KKy8qDQorKioNCisqKiBQUk9TTElDIENPTlRST0wgRlVOQ1RJT05TDQorKioNCisqLw0KKw0KKy8qDQorDQorKiogRnVuY3Rpb246IFBST1NMSUNfZGJnU2V0RENGZWVkDQorKioNCisqKiBEZXNjcmlwdGlvbjoNCisqKiBwcm92aXNpb25hbGx5IGZ1bmN0aW9uIGZvciBzZXR0aW5nIHVwDQorKiogZGNmZWVkIGdpdmVuIGRlc2lyZWQgb3BlbiBjaXJjdWl0IHZvbHRhZ2UNCisqKiBhbmQgbG9vcCBjdXJyZW50Lg0KKyovDQorDQoraW50IFNpMzIxOHhfZGJnU2V0RENGZWVkIChwcm9zbGljQ2hhblR5cGUgKnBQcm9zbGljLCB1SW50MzIgdl92bGltX3ZhbCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVJbnQzMiBpX2lsaW1fdmFsLCBpbnQzMiBwcmVzZXQpDQorew0KKyNpZm5kZWYgRElTQUJMRV9EQ0ZFRURfU0VUVVANCisgIC8qIE5vdGU6ICAqIG5lZWRzIG1vcmUgZGVzY3JpcHRpdmUgcmV0dXJuIGNvZGVzIGluIHRoZSBldmVudCBvZiBhbiBvdXQgb2YgcmFuZ2UgYXJndW1lbnQgKi8NCisgIHVJbnQxNiB2c2xvcGUgPSAxNjA7DQorICB1SW50MTYgcnNsb3BlID0gNzIwOw0KKyAgdUludDMyIHZzY2FsZTEgPSAxMzg2Ow0KKyAgdUludDMyIHZzY2FsZTIgPQ0KKyAgICAxNDIyOyAgIC8qIDEzODZ4MTQyMiA9IDE5NzA4OTIgYnJva2VuIGRvd24gdG8gbWluaW1pemUgdHJ1bmMgZXJyICovDQorICB1SW50MzIgaXNjYWxlMSA9IDkxMzsNCisgIHVJbnQzMiBpc2NhbGUyID0gMzM0OyAgICAvKiA5MTN4MzM0ID0gMzA0OTQyICovDQorICB1SW50MzIgaV9yZmVlZF92YWwsIHZfcmZlZWRfdmFsLCBjb25zdF9yZmVlZF92YWwsIGlfdmxpbV92YWwsIGNvbnN0X2lsaW1fdmFsLA0KKyAgICAgICAgIHZfaWxpbV92YWw7DQorICBpbnQzMiBzaWduZWRWYWw7DQorICAvKiBTZXQgTGluZWZlZWQgdG8gb3BlbiBzdGF0ZSBiZWZvcmUgbW9kaWZ5aW5nIERDIEZlZWQgKi8NCisNCisgIC8qIEFzc3VtcHRpb25zIG11c3QgYmUgbWFkZSB0byBtaW5pbWl6ZSBjb21wdXRhdGlvbnMuICBUaGlzIGxpbWl0cyB0aGUNCisgICoqIHJhbmdlIG9mIGF2YWlsYWJsZSBzZXR0aW5ncywgYnV0IHNob3VsZCBiZSBtb3JlIHRoYW4gYWRlcXVhdGUgZm9yDQorICAqKiBzaG9ydCBsb29wIGFwcGxpY2F0aW9ucy4NCisgICoqDQorICAqKiBBc3N1bXRpb25zOg0KKyAgKioNCisgICoqIFNMT1BFX1ZMSU0gICAgICA9PiAgMTYwb2htcw0KKyAgKiogU0xPUEVfUkZFRUQgICAgID0+ICA3MjBvaG1zDQorICAqKiBJX1JGRUVEICAgICAgICAgPT4gIDMqSV9JTElNLzQNCisgICoqDQorICAqKiBXaXRoIHRoZXNlIGFzc3VtcHRpb25zLCB0aGUgREMgRmVlZCBwYXJhbWV0ZXJzIG5vdyBiZWNvbWUNCisgICoqDQorICAqKiBJbnB1dHM6ICAgICAgVl9WTElNLCBJX0lMSU0NCisgICoqIENvbnN0YW50czogICBTTE9QRV9WTElNLCBTTE9QRV9JTElNLCBTTE9QRV9SRkVFRCwgU0xPUEVfREVMVEExLCBTTE9QRV9ERUxUQTINCisgICoqIE91dHB1dHM6ICAgICBWX1JGRUVELCBWX0lMSU0sIElfVkxJTSwgQ09OU1RfUkZFRUQsIENPTlNUX0lMSU0NCisgICoqDQorICAqLw0KKw0KKyAgaWYocFByb3NsaWMtPmNoYW5uZWxUeXBlICE9IFBST1NMSUMpDQorICB7DQorICAgIHJldHVybiBSQ19DSEFOTkVMX1RZUEVfRVJSOw0KKyAgfQ0KKw0KKyAgLyogVmFsaWRhdGUgYXJndW1lbnRzICovDQorICBpZigoaV9pbGltX3ZhbCA8IDE1KXx8KGlfaWxpbV92YWwgPiA0NSkpDQorICB7DQorICAgIHJldHVybiAxOyAgLyogbmVlZCBlcnJvciBjb2RlICovDQorICB9DQorICBpZigodl92bGltX3ZhbCA8IDMwKXx8KHZfdmxpbV92YWwgPiA1MikpDQorICB7DQorICAgIHJldHVybiAxOyAgLyogbmVlZCBlcnJvciBjb2RlICovDQorICB9DQorDQorICAvKiBDYWxjdWxhdGUgdm9sdGFnZXMgaW4gbVYgYW5kIGN1cnJlbnRzIGluIHVBICovDQorICB2X3ZsaW1fdmFsICo9IDEwMDA7DQorICBpX2lsaW1fdmFsICo9IDEwMDA7DQorDQorICAvKiBJX1JGRUVEICovDQorICBpX3JmZWVkX3ZhbCA9ICgzKmlfaWxpbV92YWwpLzQ7DQorDQorICAvKiBWX1JGRUVEICovDQorICB2X3JmZWVkX3ZhbCA9IHZfdmxpbV92YWwgLSAoaV9yZmVlZF92YWwqdnNsb3BlKS8xMDAwOw0KKw0KKyAgLyogVl9JTElNICovDQorICB2X2lsaW1fdmFsID0gdl9yZmVlZF92YWwgLSAocnNsb3BlKihpX2lsaW1fdmFsIC0gaV9yZmVlZF92YWwpKS8xMDAwOw0KKw0KKyAgLyogSV9WTElNICovDQorICBpX3ZsaW1fdmFsID0gKHZfdmxpbV92YWwqMTAwMCkvNDkwMzsNCisNCisgIC8qIENPTlNUX1JGRUVEICovDQorICBzaWduZWRWYWwgPSB2X3JmZWVkX3ZhbCAqIChpX2lsaW1fdmFsIC0gaV9yZmVlZF92YWwpOw0KKyAgc2lnbmVkVmFsIC89ICh2X3JmZWVkX3ZhbCAtIHZfaWxpbV92YWwpOw0KKyAgc2lnbmVkVmFsID0gaV9yZmVlZF92YWwgKyBzaWduZWRWYWw7DQorDQorICAvKiBzaWduZWRWYWwgaW4gdUEgaGVyZSAqLw0KKyAgc2lnbmVkVmFsICo9IGlzY2FsZTE7DQorICBzaWduZWRWYWwgLz0gMTAwOw0KKyAgc2lnbmVkVmFsICo9IGlzY2FsZTI7DQorICBzaWduZWRWYWwgLz0gMTA7DQorDQorICBpZihzaWduZWRWYWwgPCAwKQ0KKyAgew0KKyAgICBjb25zdF9yZmVlZF92YWwgPSAoc2lnbmVkVmFsKSsgKDFMPDwyOSk7DQorICB9DQorICBlbHNlDQorICB7DQorICAgIGNvbnN0X3JmZWVkX3ZhbCA9IHNpZ25lZFZhbCAmIDB4MUZGRkZGRkY7DQorICB9DQorDQorICAvKiBDT05TVF9JTElNICovDQorICBjb25zdF9pbGltX3ZhbCA9IGlfaWxpbV92YWw7DQorDQorICAvKiBjb21wdXRlIFJBTSB2YWx1ZXMgKi8NCisgIHZfdmxpbV92YWwgKj0gdnNjYWxlMTsNCisgIHZfdmxpbV92YWwgLz0gMTAwOw0KKyAgdl92bGltX3ZhbCAqPSB2c2NhbGUyOw0KKyAgdl92bGltX3ZhbCAvPSAxMDsNCisNCisgIHZfcmZlZWRfdmFsICo9IHZzY2FsZTE7DQorICB2X3JmZWVkX3ZhbCAvPSAxMDA7DQorICB2X3JmZWVkX3ZhbCAqPSB2c2NhbGUyOw0KKyAgdl9yZmVlZF92YWwgLz0gMTA7DQorDQorICB2X2lsaW1fdmFsICo9IHZzY2FsZTE7DQorICB2X2lsaW1fdmFsIC89IDEwMDsNCisgIHZfaWxpbV92YWwgKj0gdnNjYWxlMjsNCisgIHZfaWxpbV92YWwgLz0gMTA7DQorDQorICBjb25zdF9pbGltX3ZhbCAqPSBpc2NhbGUxOw0KKyAgY29uc3RfaWxpbV92YWwgLz0gMTAwOw0KKyAgY29uc3RfaWxpbV92YWwgKj0gaXNjYWxlMjsNCisgIGNvbnN0X2lsaW1fdmFsIC89IDEwOw0KKw0KKyAgaV92bGltX3ZhbCAqPSBpc2NhbGUxOw0KKyAgaV92bGltX3ZhbCAvPSAxMDA7DQorICBpX3ZsaW1fdmFsICo9IGlzY2FsZTI7DQorICBpX3ZsaW1fdmFsIC89IDEwOw0KKw0KKyAgU2kzMjE4eF9EQ2ZlZWRfUHJlc2V0c1twcmVzZXRdLnNsb3BlX3ZsaW0gPSAweDE4ODQyQkQ3TDsNCisgIFNpMzIxOHhfRENmZWVkX1ByZXNldHNbcHJlc2V0XS5zbG9wZV9yZmVlZCA9IDB4MUU4ODg2REVMOw0KKyAgU2kzMjE4eF9EQ2ZlZWRfUHJlc2V0c1twcmVzZXRdLnNsb3BlX2lsaW0gPSAweDQwQTBFMEw7DQorICBTaTMyMTh4X0RDZmVlZF9QcmVzZXRzW3ByZXNldF0uZGVsdGExID0gMHgxRUFCQTFCRkw7DQorICBTaTMyMTh4X0RDZmVlZF9QcmVzZXRzW3ByZXNldF0uZGVsdGEyID0gMHgxRUY3NDRFQUw7DQorICBTaTMyMTh4X0RDZmVlZF9QcmVzZXRzW3ByZXNldF0udl92bGltID0gdl92bGltX3ZhbDsNCisgIFNpMzIxOHhfRENmZWVkX1ByZXNldHNbcHJlc2V0XS52X3JmZWVkID0gdl9yZmVlZF92YWw7DQorICBTaTMyMTh4X0RDZmVlZF9QcmVzZXRzW3ByZXNldF0udl9pbGltID0gdl9pbGltX3ZhbDsNCisgIFNpMzIxOHhfRENmZWVkX1ByZXNldHNbcHJlc2V0XS5jb25zdF9yZmVlZCA9IGNvbnN0X3JmZWVkX3ZhbDsNCisgIFNpMzIxOHhfRENmZWVkX1ByZXNldHNbcHJlc2V0XS5jb25zdF9pbGltID0gY29uc3RfaWxpbV92YWw7DQorICBTaTMyMTh4X0RDZmVlZF9QcmVzZXRzW3ByZXNldF0uaV92bGltID0gaV92bGltX3ZhbDsNCisNCisgIHJldHVybiBSQ19OT05FOw0KKyNlbHNlDQorICBTSUxBQlNfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihwUHJvc2xpYyk7DQorICBTSUxBQlNfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihwcmVzZXQpOw0KKyAgU0lMQUJTX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIodl92bGltX3ZhbCk7DQorICBTSUxBQlNfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihpX2lsaW1fdmFsKTsNCisgIHJldHVybiBSQ19JR05PUkU7DQorI2VuZGlmDQorfQ0KKw0KKy8qDQorKiogRnVuY3Rpb246IFBST1NMSUNfZGJnU2V0RENGZWVkVm9wZW4NCisqKg0KKyoqIERlc2NyaXB0aW9uOg0KKyoqIHByb3Zpc2lvbmFsbHkgZnVuY3Rpb24gZm9yIHNldHRpbmcgdXANCisqKiBkY2ZlZWQgZ2l2ZW4gZGVzaXJlZCBvcGVuIGNpcmN1aXQgdm9sdGFnZS4NCisqKiBFbnRyeSBJX0lMSU0gdmFsdWUgd2lsbCBiZSB1c2VkLg0KKyovDQoraW50IFNpMzIxOHhfZGJnU2V0RENGZWVkVm9wZW4gKHByb3NsaWNDaGFuVHlwZSAqcFByb3NsaWMsIHVJbnQzMiB2X3ZsaW1fdmFsLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMiBwcmVzZXQpDQorew0KKyNpZm5kZWYgRElTQUJMRV9EQ0ZFRURfU0VUVVANCisgIHVJbnQzMiBpX2lsaW1fdmFsOw0KKyAgdUludDMyIGlzY2FsZTEgPSA5MTM7DQorICB1SW50MzIgaXNjYWxlMiA9IDMzNDsgICAgLyogOTEzeDMzNCA9IDMwNDk0MiAqLw0KKw0KKw0KKyAgaWYocFByb3NsaWMtPmNoYW5uZWxUeXBlICE9IFBST1NMSUMpDQorICB7DQorICAgIHJldHVybiBSQ19DSEFOTkVMX1RZUEVfRVJSOw0KKyAgfQ0KKw0KKyAgLyogUmVhZCBwcmVzZW50IENPTlNUX0lMSU0gdmFsdWUgKi8NCisgIGlfaWxpbV92YWwgPSBTaTMyMTh4X0RDZmVlZF9QcmVzZXRzW3ByZXNldF0uY29uc3RfaWxpbTsNCisNCisNCisgIGlfaWxpbV92YWwgLz0gaXNjYWxlMjsNCisgIGlfaWxpbV92YWwgLz0gaXNjYWxlMTsNCisNCisgIHJldHVybiBTaTMyMTh4X2RiZ1NldERDRmVlZChwUHJvc2xpYyx2X3ZsaW1fdmFsLGlfaWxpbV92YWwscHJlc2V0KTsNCisjZWxzZQ0KKyAgU0lMQUJTX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIocFByb3NsaWMpOw0KKyAgU0lMQUJTX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIocHJlc2V0KTsNCisgIFNJTEFCU19VTlJFRkVSRU5DRURfUEFSQU1FVEVSKHZfdmxpbV92YWwpOw0KKyAgcmV0dXJuIFJDX0lHTk9SRTsNCisjZW5kaWYNCit9DQorDQorLyoNCisqKiBGdW5jdGlvbjogUFJPU0xJQ19kYmdTZXREQ0ZlZWRJbG9vcA0KKyoqDQorKiogRGVzY3JpcHRpb246DQorKiogcHJvdmlzaW9uYWxseSBmdW5jdGlvbiBmb3Igc2V0dGluZyB1cA0KKyoqIGRjZmVlZCBnaXZlbiBkZXNpcmVkIGxvb3AgY3VycmVudC4NCisqKiBFbnRyeSBWX1ZMSU0gdmFsdWUgd2lsbCBiZSB1c2VkLg0KKyovDQoraW50IFNpMzIxOHhfZGJnU2V0RENGZWVkSWxvb3AgKHByb3NsaWNDaGFuVHlwZSAqcFByb3NsaWMsIHVJbnQzMiBpX2lsaW1fdmFsLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMiBwcmVzZXQpDQorew0KKyNpZm5kZWYgRElTQUJMRV9EQ0ZFRURfU0VUVVANCisNCisgIHVJbnQzMiB2X3ZsaW1fdmFsOw0KKyAgdUludDMyIHZzY2FsZTEgPSAxMzg2Ow0KKyAgdUludDMyIHZzY2FsZTIgPQ0KKyAgICAxNDIyOyAgIC8qIDEzODZ4MTQyMiA9IDE5NzA4OTIgYnJva2VuIGRvd24gdG8gbWluaW1pemUgdHJ1bmMgZXJyICovDQorDQorICBpZihwUHJvc2xpYy0+Y2hhbm5lbFR5cGUgIT0gUFJPU0xJQykNCisgIHsNCisgICAgcmV0dXJuIFJDX0NIQU5ORUxfVFlQRV9FUlI7DQorICB9DQorDQorICAvKiBSZWFkIHByZXNlbnQgVl9WTElNIHZhbHVlICovDQorICB2X3ZsaW1fdmFsID0gU2kzMjE4eF9EQ2ZlZWRfUHJlc2V0c1twcmVzZXRdLnZfdmxpbTsNCisNCisgIHZfdmxpbV92YWwgLz0gdnNjYWxlMjsNCisgIHZfdmxpbV92YWwgLz0gdnNjYWxlMTsNCisNCisgIHJldHVybiBTaTMyMTh4X2RiZ1NldERDRmVlZChwUHJvc2xpYyx2X3ZsaW1fdmFsLGlfaWxpbV92YWwsIHByZXNldCk7DQorI2Vsc2UNCisgIFNJTEFCU19VTlJFRkVSRU5DRURfUEFSQU1FVEVSKHBQcm9zbGljKTsNCisgIFNJTEFCU19VTlJFRkVSRU5DRURfUEFSQU1FVEVSKHByZXNldCk7DQorICBTSUxBQlNfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihpX2lsaW1fdmFsKTsNCisgIHJldHVybiBSQ19JR05PUkU7DQorI2VuZGlmDQorfQ0KKw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgdUludDggICBmcmVxOw0KKyAgcmFtRGF0YSByaW5nZnI7ICAgICAgLyogdHJpc2Ugc2NhbGUgZm9yIHRyYXAgKi8NCisgIHVJbnQzMiAgYW1wU2NhbGU7DQorfSBQcm9TTElDX1NpbmVSaW5nRnJlcUxvb2t1cDsNCisNCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIHVJbnQ4ICAgIGZyZXE7DQorICByYW1EYXRhICBydGFjdGg7DQorICByYW1EYXRhIHJ0cGVyOw0KKyAgcmFtRGF0YSBydGRiOw0KK30gUHJvU0xJQ19TaW5lUmluZ3RyaXBMb29rdXA7DQorDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1SW50OCAgIGZyZXE7DQorICB1SW50MTYgIGNmVmFsWzZdOw0KK30gUHJvU0xJQ19UcmFwUmluZ0ZyZXFMb29rdXA7DQorDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorICB1SW50OCAgIGZyZXE7DQorICByYW1EYXRhIHJ0cGVyOw0KKyAgcmFtRGF0YSBydGRiOw0KKyAgdUludDMyICBydGFjdGhbNl07DQorfSBQcm9TTElDX1RyYXBSaW5ndHJpcExvb2t1cDsNCisNCitzdGF0aWMgIGNvbnN0IFByb1NMSUNfU2luZVJpbmdGcmVxTG9va3VwIHNpbmVSaW5nRnJlcVRhYmxlW10gPQ0KKyAgICAvKiAgRnJlcSBSSU5HRlIsIHZTY2FsZSAqLw0KKyAgew0KKyAgICB7MTUsIDB4N0Y2RTkzMEwsIDE4OTY4TH0sDQorICAgIHsxNiwgMHg3RjVBOEUwTCwgMjAyMzRMfSwNCisgICAgezIwLCAweDdFRkQ5RDVMLCAyNTMwMUx9LA0KKyAgICB7MjIsIDB4N0VDNzcwQUwsIDI3ODQzTH0sDQorICAgIHsyMywgMHg3RUFBNkUyTCwgMjkxMTNMfSwNCisgICAgezI1LCAweDdFNkM5MjVMLCAzMTY0OUx9LA0KKyAgICB7MzAsIDB4N0RCQjk2QkwsIDM4MDE0TH0sDQorICAgIHszNCwgMHg3RDM0MTU1TCwgNDIyNzBMfSwgLyogQWN0dWFsbHkgMzMuMzNIeiAqLw0KKyAgICB7MzUsIDB4N0NFQUQ3MkwsIDQ0Mzk3TH0sDQorICAgIHs0MCwgMHg3QkZBODg3TCwgNTA4MDJMfSwNCisgICAgezQ1LCAweDdBRUFFNzRMLCA1NzIzM0x9LA0KKyAgICB7NTAsIDB4NzlCQzM4NEwsIDYzNjkzTH0sDQorICAgIHswLDAsMH0NCisgIH07IC8qIHRlcm1pbmF0b3IgKi8NCisNCitzdGF0aWMgY29uc3QgUHJvU0xJQ19TaW5lUmluZ3RyaXBMb29rdXAgc2luZVJpbmd0cmlwVGFibGVbXSA9DQorICAgIC8qICBGcmVxIHJ0YWN0aCAqLw0KKyAgew0KKyAgICB7MTUsIDExNDQwMDAwTCwgMHg2QTAwMEwsIDB4NDAwMEwgfSwNCisgICAgezE2LCAxMDgxMDAwMEwsIDB4NjQwMDBMLCAweDQwMDBMIH0sDQorICAgIHsyMCwgODY5MDAwMEwsICAweDUwMDAwTCwgMHg4MDAwTCB9LA0KKyAgICB7MjIsIDc4MzUwMDBMLCAgMHg0ODAwMEwsIDB4ODAwMEwgfSwNCisgICAgezIzLCA3NjIyMDAwTCwgIDB4NDYwMDBMLCAweDgwMDBMIH0sDQorICAgIHsyNSwgNjk4MDAwMEwsICAweDQwMDAwTCwgMHhBMDAwTCB9LA0KKyAgICB7MzAsIDU5MDAwMDBMLCAgMHgzNjAwMEwsIDB4QTAwMEwgfSwNCisgICAgezM0LCAxMDQ5MDAwMEwsIDB4NjAwMDBMLCAweDYwMDBMIH0sIC8qIEFjdHVhbGx5IDMzLjMzICovDQorICAgIHszNSwgMTAwNjAwMDBMLCAweDVDMDAwTCwgMHg2MDAwTCB9LA0KKyAgICB7NDAsIDg3NTAwMDBMLCAgMHg1MDAwMEwsIDB4ODAwMEwgfSwNCisgICAgezQ1LCA3ODgwMDAwTCwgIDB4NDgwMDBMLCAweDgwMDBMIH0sDQorICAgIHs1MCwgNzAxMDAwMEwsICAweDQwMDAwTCwgMHhBMDAwTCB9LA0KKyAgICB7MCwwTCwgMEwsIDBMfQ0KKyAgfTsgLyogdGVybWluYXRvciAqLw0KKw0KK3N0YXRpYyBjb25zdCBQcm9TTElDX1RyYXBSaW5nRnJlcUxvb2t1cCB0cmFwUmluZ0ZyZXFUYWJsZVtdID0NCisgICAgLyogIEZyZXEgbXVsdENGMTEgbXVsdENGMTIgbXVsdENGMTMgbXVsdENGMTQgbXVsdENGMTUgbXVsdENGMTYqLw0KKyAgew0KKyAgICB7MTUsIHs2OSwxMjIsIDE2MywgMTk2LCAyMjIsMjQ0fX0sDQorICAgIHsxNiwgezY1LDExNSwgMTUzLCAxODQsIDIwOCwyMjl9fSwNCisgICAgezIwLCB7NTIsOTIsIDEyMiwgMTQ3LCAxNjcsMTgzfX0sDQorICAgIHsyMiwgezQ3LDgzLCAxMTEsIDEzNCwgMTUyLDE2Nn19LA0KKyAgICB7MjMsIHs0NSw4MCwgMTA3LCAxMjgsIDE0NSwxNTl9fSwNCisgICAgezI1LCB7NDIsNzMsIDk4LCAxMTgsIDEzMywxNDZ9fSwNCisgICAgezMwLCB7MzUsNjEsIDgyLCA5OCwgMTExLDEyMn19LA0KKyAgICB7MzQsIHszMSw1NSwgNzMsIDg4LCAxMDAsMTEwfX0sDQorICAgIHszNSwgezMwLDUyLCA3MCwgODQsIDk1LDEwNH19LA0KKyAgICB7NDAsIHsyNiw0NiwgNjEsIDczLCA4Myw5MX19LA0KKyAgICB7NDUsIHsyMyw0MSwgNTQsIDY1LCA3NCw4MX19LA0KKyAgICB7NTAsIHsyMSwzNywgNDksIDU5LCA2Nyw3M319LA0KKyAgICB7MCx7MEwsMEwsMEwsMEx9fSAvKiB0ZXJtaW5hdG9yICovDQorICB9Ow0KKw0KKw0KK3N0YXRpYyBjb25zdCBQcm9TTElDX1RyYXBSaW5ndHJpcExvb2t1cCB0cmFwUmluZ3RyaXBUYWJsZVtdID0NCisgICAgLyogIEZyZXEgcnRwZXIgcnRkYiBydGFjdGhDUjExIHJ0YWN0aENSMTIgcnRhY3RoQ1IxMyBydGFjdGhDUjE0IHJ0YWN0aENSMTUgcnRhY3RoQ1IxNiovDQorICB7DQorICAgIHsxNSwgMHg2QTAwMEwsICAweDQwMDBMLCB7MTYyMTQ4OTRMLCAxNDM2OTM3NUwsIDEyOTMzMTI3TCwgMTE3OTM1MDhMLCAxMDg3NDEyMUwsIDEwMTIxNjcxTH19LA0KKyAgICB7MTYsIDB4NjQwMDBMLCAgMHg0MDAwTCwgezE1MjAxNDYzTCwgMTM0NzEyODlMLCAxMjEyNDgwNkwsIDExMDU2NDE0TCwgMTAxOTQ0ODlMLCA5NDg5MDY3TH19LA0KKyAgICB7MjAsIDB4NTAwMDBMLCAgMHg2MDAwTCwgezEyMTYxMTcxTCwgMTA3NzcwMzFMLCA5Njk5ODQ1TCwgODg0NTEzMUwsIDgxNTU1OTFMLCA3NTkxMjUzTH19LA0KKyAgICB7MjIsIDB4NDgwMDBMLCAgMHg2MDAwTCwgezExMDU1NjEwTCwgOTc5NzMwMUwsIDg4MTgwNDFMLCA4MDQxMDI4TCwgNzQxNDE3NEwsIDY5MDExMzlMfX0sDQorICAgIHsyMywgMHg0NjAwMEwsICAweDYwMDBMLCB7MTA1NzQ5MzFMLCA5MzcxMzMxTCwgODQzNDY0OEwsIDc2OTE0MThMLCA3MDkxODE4TCwgNjYwMTA5MEx9fSwNCisgICAgezI1LCAweDQwMDAwTCwgIDB4ODAwMEwsIHs5NzI4OTM3TCwgODYyMTYyNUwsIDc3NTk4NzZMLCA3MDc2MTA1TCwgNjUyNDQ3M0wsIDYwNzMwMDNMfX0sDQorICAgIHszMCwgMHgzNjAwMEwsICAweDgwMDBMLCB7ODEwNzQ0N0wsIDcxODQ2ODdMLCA2NDY2NTYzTCwgNTg5Njc1NEwsIDU0MzcwNjFMLCA1MDYwODM2TH19LA0KKyAgICB7MzQsIDB4NjAwMDBMLCAgMHg2MDAwTCwgezcyOTc0MzJMLCA2NDY2ODY1TCwgNTgyMDQ4OUwsIDUzMDc2MDlMLCA0ODkzODQ0TCwgNDU1NTIwOEx9fSwNCisgICAgezM1LCAweDVDMDAwTCwgIDB4NjAwMEwsIHs2OTQ5MjQwTCwgNjE1ODMwM0wsIDU1NDI3NjlMLCA1MDU0MzYxTCwgNDY2MDMzOEwsIDQzMzc4NTlMfX0sDQorICAgIHs0MCwgMHg1MDAwMEwsICAweDYwMDBMLCB7NjA4MDU4NUwsIDUzODg1MTZMLCA0ODQ5OTIzTCwgNDQyMjU2NUwsIDQwNzc3OTZMLCAzNzk1NjI3TH19LA0KKyAgICB7NDUsIDB4NDgwMDBMLCAgMHg2MDAwTCwgezU0MDQ5NjVMLCA0Nzg5NzkyTCwgNDMxMTA0MkwsIDM5MzExNjlMLCAzNjI0NzA3TCwgMzM3Mzg5MEx9fSwNCisgICAgezUwLCAweDQwMDAwTCwgIDB4ODAwMEwsIHs0ODY0NDY4TCwgNDMxMDgxMkwsIDM4Nzk5MzhMLCAzNTM4MDUyTCwgMzI2MjIzNkwsIDMwMzY1MDFMfX0sDQorICAgIHswLDB4MEwsIDB4MEwsIHswTCwwTCwwTCwwTH19IC8qIHRlcm1pbmF0b3IgKi8NCisgIH07DQorDQorLyoNCisqKiBGdW5jdGlvbjogUFJPU0xJQ19kYmdSaW5naW5nU2V0dXANCisqKg0KKyoqIERlc2NyaXB0aW9uOg0KKyoqIFByb3Zpc2lvbiBmdW5jdGlvbiBmb3Igc2V0dGluZyB1cA0KKyoqIFJpbmcgdHlwZSwgZnJlcXVlbmN5LCBhbXBsaXR1ZGUgYW5kIGRjIG9mZnNldC4NCisqKiBNYWluIHVzZSB3aWxsIGJlIGJ5IHBlZWsvcG9rZSBhcHBsaWNhdGlvbnMuDQorKi8NCitpbnQgU2kzMjE4eF9kYmdTZXRSaW5naW5nIChwcm9zbGljQ2hhblR5cGUgKnBQcm9zbGljLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb1NMSUNfZGJnUmluZ0NmZyAqcmluZ0NmZywgaW50IHByZXNldCkNCit7DQorI2lmbmRlZiBESVNBQkxFX1JJTkdfU0VUVVANCisgIGludCBlcnJWYWwsaT0wOw0KKyAgdUludDMyIHZTY2FsZSA9IDE2MDg4NzJMOyAgIC8qICgyXjI4LzE3MC4yNSkqKCgxMDArNDkwMykvNDkwMykgKi8NCisgIHJhbURhdGEgZGNkY1ZtaW5UbXA7DQorDQorDQorICBpZihwUHJvc2xpYy0+Y2hhbm5lbFR5cGUgIT0gUFJPU0xJQykNCisgIHsNCisgICAgcmV0dXJuIFJDX0NIQU5ORUxfVFlQRV9FUlI7DQorICB9DQorDQorICBlcnJWYWwgPSBSQ19OT05FOw0KKw0KKyAgc3dpdGNoKHJpbmdDZmctPnJpbmd0eXBlKQ0KKyAgew0KKyAgICBjYXNlIFByb1NMSUNfUklOR19TSU5FOg0KKyAgICAgIGk9MDsNCisgICAgICBkbw0KKyAgICAgIHsNCisgICAgICAgIGlmKHNpbmVSaW5nRnJlcVRhYmxlW2ldLmZyZXEgPj0gcmluZ0NmZy0+ZnJlcSkNCisgICAgICAgIHsNCisgICAgICAgICAgYnJlYWs7DQorICAgICAgICB9DQorICAgICAgICBpKys7DQorICAgICAgfQ0KKyAgICAgIHdoaWxlIChzaW5lUmluZ0ZyZXFUYWJsZVtpXS5mcmVxKTsNCisNCisgICAgICAvKiBTZXQgdG8gbWF4aW11bSB2YWx1ZSBpZiBleGNlZWRpbmcgbWF4aW11bSB2YWx1ZSBmcm9tIHRhYmxlICovDQorICAgICAgaWYoc2luZVJpbmdGcmVxVGFibGVbaV0uZnJlcSA9PSAwKQ0KKyAgICAgIHsNCisgICAgICAgIGktLTsNCisgICAgICAgIGVyclZhbCA9IFJDX1JJTkdfVl9MSU1JVEVEOw0KKyAgICAgIH0NCisNCisgICAgICAvKiBVcGRhdGUgUklOR0ZSIFJJTkdBTVAsIFJJTkdPRkZTRVQsIGFuZCBSSU5HQ09OICovDQorICAgICAgU2kzMjE4eF9SaW5nX1ByZXNldHNbcHJlc2V0XS5mcmVxID0gc2luZVJpbmdGcmVxVGFibGVbaV0ucmluZ2ZyOw0KKyAgICAgIFNpMzIxOHhfUmluZ19QcmVzZXRzW3ByZXNldF0uYW1wID0gcmluZ0NmZy0+YW1wICogc2luZVJpbmdGcmVxVGFibGVbaV0uYW1wU2NhbGU7DQorICAgICAgU2kzMjE4eF9SaW5nX1ByZXNldHNbcHJlc2V0XS5vZmZzZXQgPSByaW5nQ2ZnLT5vZmZzZXQgKiB2U2NhbGU7DQorICAgICAgU2kzMjE4eF9SaW5nX1ByZXNldHNbcHJlc2V0XS5waGFzID0gMEw7DQorDQorICAgICAgLyogRG9uJ3QgYWx0ZXIgYW55dGhpbmcgaW4gUklOR0NPTiBvdGhlciB0aGFuIGNsZWFyaW5nIHRoZSBUUkFQIGJpdCAqLw0KKyAgICAgIFNpMzIxOHhfUmluZ19QcmVzZXRzW3ByZXNldF0ucmluZ2NvbiAmPSAweEZFOw0KKw0KKyAgICAgIFNpMzIxOHhfUmluZ19QcmVzZXRzW3ByZXNldF0ucnRwZXIgPSBzaW5lUmluZ3RyaXBUYWJsZVtpXS5ydHBlcjsNCisgICAgICBTaTMyMTh4X1JpbmdfUHJlc2V0c1twcmVzZXRdLnJ0YWNkYiA9IHNpbmVSaW5ndHJpcFRhYmxlW2ldLnJ0ZGI7DQorICAgICAgU2kzMjE4eF9SaW5nX1ByZXNldHNbcHJlc2V0XS5ydGRjZGIgPSBzaW5lUmluZ3RyaXBUYWJsZVtpXS5ydGRiOw0KKyAgICAgIFNpMzIxOHhfUmluZ19QcmVzZXRzW3ByZXNldF0ucnRkY3RoID0gMHhGRkZGRkZGTDsNCisgICAgICBTaTMyMTh4X1JpbmdfUHJlc2V0c1twcmVzZXRdLnJ0YWN0aCA9IHNpbmVSaW5ndHJpcFRhYmxlW2ldLnJ0YWN0aDsNCisgICAgICBicmVhazsNCisNCisgICAgY2FzZSBQcm9TTElDX1JJTkdfVFJBUF9DRjExOg0KKyAgICBjYXNlIFByb1NMSUNfUklOR19UUkFQX0NGMTI6DQorICAgIGNhc2UgUHJvU0xJQ19SSU5HX1RSQVBfQ0YxMzoNCisgICAgY2FzZSBQcm9TTElDX1JJTkdfVFJBUF9DRjE0Og0KKyAgICBjYXNlIFByb1NMSUNfUklOR19UUkFQX0NGMTU6DQorICAgIGNhc2UgUHJvU0xJQ19SSU5HX1RSQVBfQ0YxNjoNCisgICAgICBpPTA7DQorICAgICAgZG8NCisgICAgICB7DQorICAgICAgICBpZih0cmFwUmluZ0ZyZXFUYWJsZVtpXS5mcmVxID49IHJpbmdDZmctPmZyZXEpDQorICAgICAgICB7DQorICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaSsrOw0KKyAgICAgIH0NCisgICAgICB3aGlsZSAodHJhcFJpbmdGcmVxVGFibGVbaV0uZnJlcSk7DQorDQorICAgICAgLyogU2V0IHRvIG1heGltdW0gdmFsdWUgaWYgZXhjZWVkaW5nIG1heGltdW0gdmFsdWUgZnJvbSB0YWJsZSAqLw0KKyAgICAgIGlmKHRyYXBSaW5nRnJlcVRhYmxlW2ldLmZyZXEgPT0gMCkNCisgICAgICB7DQorICAgICAgICBpLS07DQorICAgICAgICBlcnJWYWwgPSBSQ19SSU5HX1ZfTElNSVRFRDsNCisgICAgICB9DQorDQorICAgICAgLyogVXBkYXRlIFJJTkdGUiBSSU5HQU1QLCBSSU5HT0ZGU0VULCBhbmQgUklOR0NPTiAqLw0KKyAgICAgIFNpMzIxOHhfUmluZ19QcmVzZXRzW3ByZXNldF0uYW1wID0gcmluZ0NmZy0+YW1wICogdlNjYWxlOw0KKyAgICAgIFNpMzIxOHhfUmluZ19QcmVzZXRzW3ByZXNldF0uZnJlcSA9DQorICAgICAgICBTaTMyMTh4X1JpbmdfUHJlc2V0c1twcmVzZXRdLmFtcC90cmFwUmluZ0ZyZXFUYWJsZVtpXS5jZlZhbFtyaW5nQ2ZnLT5yaW5ndHlwZV07DQorICAgICAgU2kzMjE4eF9SaW5nX1ByZXNldHNbcHJlc2V0XS5vZmZzZXQgPSByaW5nQ2ZnLT5vZmZzZXQgKiB2U2NhbGU7DQorICAgICAgU2kzMjE4eF9SaW5nX1ByZXNldHNbcHJlc2V0XS5waGFzID0gMjYyMTQ0MDAwTC90cmFwUmluZ0ZyZXFUYWJsZVtpXS5mcmVxOw0KKw0KKyAgICAgIC8qIERvbid0IGFsdGVyIGFueXRoaW5nIGluIFJJTkdDT04gb3RoZXIgdGhhbiBzZXR0aW5nIHRoZSBUUkFQIGJpdCAqLw0KKyAgICAgIFNpMzIxOHhfUmluZ19QcmVzZXRzW3ByZXNldF0ucmluZ2NvbiB8PSAweDAxOw0KKw0KKyAgICAgIC8qIFJUUEVSIGFuZCBkZWJvdWNlIHRpbWVycyAgKi8NCisgICAgICBTaTMyMTh4X1JpbmdfUHJlc2V0c1twcmVzZXRdLnJ0cGVyID0gdHJhcFJpbmd0cmlwVGFibGVbaV0ucnRwZXI7DQorICAgICAgU2kzMjE4eF9SaW5nX1ByZXNldHNbcHJlc2V0XS5ydGFjZGIgPSB0cmFwUmluZ3RyaXBUYWJsZVtpXS5ydGRiOw0KKyAgICAgIFNpMzIxOHhfUmluZ19QcmVzZXRzW3ByZXNldF0ucnRkY2RiID0gdHJhcFJpbmd0cmlwVGFibGVbaV0ucnRkYjsNCisNCisNCisgICAgICBTaTMyMTh4X1JpbmdfUHJlc2V0c1twcmVzZXRdLnJ0ZGN0aCA9IDB4RkZGRkZGRkw7DQorICAgICAgU2kzMjE4eF9SaW5nX1ByZXNldHNbcHJlc2V0XS5ydGFjdGggPQ0KKyAgICAgICAgdHJhcFJpbmd0cmlwVGFibGVbaV0ucnRhY3RoW3JpbmdDZmctPnJpbmd0eXBlXTsNCisNCisNCisgICAgICBicmVhazsNCisgIH0NCisNCisgIC8qDQorICAqKiBEQ0RDIHRyYWNraW5nIHNsdWdnaXNoIHVuZGVyIGxpZ2h0IGxvYWQgYXQgaGlnaGVyIHJpbmcgZnJlcS4NCisgICoqIFJlZHVjZSB0cmFja2luZyBkZXB0aCBhYm92ZSA0MEh6LiAgVGhpcyBzaG91bGQgaGF2ZSBubyBlZmZlY3QNCisgICoqIGlmIHVzaW5nIHRoZSBCdWNrLUJvb3N0IGFyY2hpdGVjdHVyZS4NCisgICovDQorICBpZigoc2luZVJpbmdGcmVxVGFibGVbaV0uZnJlcSA+PSA0MCkNCisgICAgICB8fChTaTMyMTh4X0dlbmVyYWxfQ29uZmlndXJhdGlvbi5ib21fb3B0aW9uID09IEJPX0RDRENfQlVDS19CT09TVCkpDQorICB7DQorICAgIGRjZGNWbWluVG1wID0gcmluZ0NmZy0+YW1wICsgcmluZ0NmZy0+b2Zmc2V0Ow0KKyAgICBkY2RjVm1pblRtcCAqPSAxMDAwOw0KKyAgICBkY2RjVm1pblRtcCAqPSBTQ0FMRV9WX01BREM7DQorICAgIFNpMzIxOHhfUmluZ19QcmVzZXRzW3ByZXNldF0uZGNkY192cmVmX21pbl9ybmcgPSBkY2RjVm1pblRtcDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgU2kzMjE4eF9SaW5nX1ByZXNldHNbcHJlc2V0XS5kY2RjX3ZyZWZfbWluX3JuZyA9IDB4MTgwMDAwMEw7DQorICB9DQorDQorICByZXR1cm4gZXJyVmFsOw0KKyNlbHNlDQorICBTSUxBQlNfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihwUHJvc2xpYyk7DQorICBTSUxBQlNfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihwcmVzZXQpOw0KKyAgU0lMQUJTX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIocmluZ0NmZyk7DQorICByZXR1cm4gUkNfSUdOT1JFOw0KKyNlbmRpZg0KK30NCisNCisNCit0eXBlZGVmIHN0cnVjdA0KK3sNCisgIGludDMyICAgZ2FpbjsNCisgIHVJbnQzMiBzY2FsZTsNCit9IFByb1NMSUNfR2FpblNjYWxlTG9va3VwOw0KKw0KKyNpZm5kZWYgRU5BQkxFX0hJUkVTX0dBSU4NCitzdGF0aWMgaW50IFNpMzIxOHhfZGJnU2V0R2FpbiAocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYywgaW50MzIgZ2FpbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGltcGVkYW5jZV9wcmVzZXQsIGludCB0eF9yeF9zZWwpDQorew0KKyAgaW50IGVyclZhbCA9IDA7DQorICBpbnQzMiBpOw0KKyAgaW50MzIgZ2Fpbl9wZ2EsIGdhaW5fZXE7DQorICBjb25zdCBQcm9TTElDX0dhaW5TY2FsZUxvb2t1cCBnYWluU2NhbGVUYWJsZVtdDQorICA9ICAvKiAgZ2Fpbiwgc2NhbGU9MTBeKGdhaW4vMjApICovDQorICB7DQorICAgIHstMzAsIDMyfSwNCisgICAgey0yOSwgMzV9LA0KKyAgICB7LTI4LCA0MH0sDQorICAgIHstMjcsIDQ1fSwNCisgICAgey0yNiwgNTB9LA0KKyAgICB7LTI1LCA1Nn0sDQorICAgIHstMjQsIDYzfSwNCisgICAgey0yMywgNzF9LA0KKyAgICB7LTIyLCA3OX0sDQorICAgIHstMjEsIDg5fSwNCisgICAgey0yMCwgMTAwfSwNCisgICAgey0xOSwgMTEyfSwNCisgICAgey0xOCwgMTI2fSwNCisgICAgey0xNywgMTQxfSwNCisgICAgey0xNiwgMTU4fSwNCisgICAgey0xNSwgMTc4fSwNCisgICAgey0xNCwgMjAwfSwNCisgICAgey0xMywgMjI0fSwNCisgICAgey0xMiwgMjUxfSwNCisgICAgey0xMSwgMjgyfSwNCisgICAgey0xMCwgMzE2fSwNCisgICAgey05LCAzNTV9LA0KKyAgICB7LTgsIDM5OH0sDQorICAgIHstNywgNDQ3fSwNCisgICAgey02LCA1MDF9LA0KKyAgICB7LTUsIDU2Mn0sDQorICAgIHstNCwgNjMxfSwNCisgICAgey0zLCA3MDh9LA0KKyAgICB7LTIsIDc5NH0sDQorICAgIHstMSwgODkxfSwNCisgICAgezAsIDEwMDB9LA0KKyAgICB7MSwgMTEyMn0sDQorICAgIHsyLCAxMjU5fSwNCisgICAgezMsIDE0MTN9LA0KKyAgICB7NCwgMTU4NX0sDQorICAgIHs1LCAxNzc4fSwNCisgICAgezYsIDE5OTV9LA0KKyAgICB7MHhmZiwwfSAgLyogdGVybWluYXRvciAqLw0KKyAgfTsNCisNCisgIFNJTEFCU19VTlJFRkVSRU5DRURfUEFSQU1FVEVSKHBQcm9zbGljKTsNCisNCisgIC8qIFRlc3QgYWdhaW5zdCBtYXggZ2FpbiAqLw0KKyAgaWYgKGdhaW4gPiBQUk9TTElDX0VYVEVOREVEX0dBSU5fTUFYKQ0KKyAgew0KKyAgICBlcnJWYWwgPSBSQ19HQUlOX09VVF9PRl9SQU5HRTsNCisgICAgREVCVUdfUFJJTlQocFByb3NsaWMsICIlc2RiZ1NldEdhaW46IEdhaW4gJWQgb3V0IG9mIHJhbmdlXG4iLCBMT0dQUklOVF9QUkVGSVgsDQorICAgICAgICAgICAgICAgIChpbnQpZ2Fpbik7DQorICAgIGdhaW4gPSBQUk9TTElDX0VYVEVOREVEX0dBSU5fTUFYOyAvKiBDbGFtcCB0byBtYXhpbXVtICovDQorICB9DQorDQorICAvKiBUZXN0IGFnYWluc3QgbWluIGdhaW4gKi8NCisgIGlmIChnYWluIDwgUFJPU0xJQ19HQUlOX01JTikNCisgIHsNCisgICAgZXJyVmFsID0gUkNfR0FJTl9PVVRfT0ZfUkFOR0U7DQorICAgIERFQlVHX1BSSU5UKHBQcm9zbGljLCAiJXNkYmdTZXRHYWluOiBHYWluICVkIG91dCBvZiByYW5nZVxuIiwgTE9HUFJJTlRfUFJFRklYLA0KKyAgICAgICAgICAgICAgICAoaW50KWdhaW4pOw0KKyAgICBnYWluID0gUFJPU0xJQ19HQUlOX01JTjsgLyogQ2xhbXAgdG8gbWluaW11bSAqLw0KKyAgfQ0KKw0KKyAgLyogRGlzdHJpYnV0ZSBnYWluICovDQorICBpZihnYWluID09IDApDQorICB7DQorICAgIGdhaW5fcGdhID0gMDsNCisgICAgZ2Fpbl9lcSA9IDA7DQorICB9DQorICBlbHNlIGlmKGdhaW4gPiBQUk9TTElDX0dBSU5fTUFYKQ0KKyAgew0KKyAgICBpZih0eF9yeF9zZWwgPT0gVFhBQ0dBSU5fU0VMKQ0KKyAgICB7DQorICAgICAgZ2Fpbl9wZ2EgPSBQUk9TTElDX0dBSU5fTUFYOw0KKyAgICAgIGdhaW5fZXEgPSBnYWluIC0gUFJPU0xJQ19HQUlOX01BWDsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICBnYWluX3BnYSA9IGdhaW4gLSBQUk9TTElDX0dBSU5fTUFYOw0KKyAgICAgIGdhaW5fZXEgPSBQUk9TTElDX0dBSU5fTUFYOw0KKyAgICB9DQorICB9DQorICBlbHNlIGlmKGdhaW4gPiAwKQ0KKyAgew0KKyAgICBpZih0eF9yeF9zZWwgPT0gVFhBQ0dBSU5fU0VMKQ0KKyAgICB7DQorICAgICAgZ2Fpbl9wZ2EgPSBnYWluOw0KKyAgICAgIGdhaW5fZXEgID0gMDsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICBnYWluX3BnYSA9IDA7DQorICAgICAgZ2Fpbl9lcSA9IGdhaW47DQorICAgIH0NCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgaWYodHhfcnhfc2VsID09IFRYQUNHQUlOX1NFTCkNCisgICAgew0KKyAgICAgIGdhaW5fcGdhID0gMDsNCisgICAgICBnYWluX2VxICA9IGdhaW47DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgZ2Fpbl9wZ2EgPSBnYWluOw0KKyAgICAgIGdhaW5fZXEgPSAwOw0KKyAgICB9DQorDQorICB9DQorDQorDQorICAvKg0KKyAgKiogTG9va3VwIFBHQSBBcHByb3ByaWF0ZSBQR0EgR2Fpbg0KKyAgKi8NCisgIGk9MDsNCisgIGRvDQorICB7DQorICAgIGlmKGdhaW5TY2FsZVRhYmxlW2ldLmdhaW4gPj0gZ2Fpbl9wZ2EpICAgLyogd2FzIGdhaW5fMSAqLw0KKyAgICB7DQorICAgICAgYnJlYWs7DQorICAgIH0NCisgICAgaSsrOw0KKyAgfQ0KKyAgd2hpbGUgKGdhaW5TY2FsZVRhYmxlW2ldLmdhaW4hPTB4ZmYpOw0KKw0KKyAgLyogU2V0IHRvIG1heGltdW0gdmFsdWUgaWYgZXhjZWVkaW5nIG1heGltdW0gdmFsdWUgZnJvbSB0YWJsZSAqLw0KKyAgaWYoZ2FpblNjYWxlVGFibGVbaV0uZ2FpbiA9PSAweGZmKQ0KKyAgew0KKyAgICBpLS07DQorICAgIGVyclZhbCA9IFJDX0dBSU5fREVMVEFfVE9PX0xBUkdFOw0KKyAgfQ0KKw0KKyAgaWYodHhfcnhfc2VsID09IFRYQUNHQUlOX1NFTCkNCisgIHsNCisgICAgU2kzMjE4eF9hdWRpb0dhaW5fUHJlc2V0c1swXS5hY2dhaW4gPQ0KKyAgICAgIChTaTMyMTh4X0ltcGVkYW5jZV9QcmVzZXRzW2ltcGVkYW5jZV9wcmVzZXRdLnR4Z2Fpbi8xMDAwKQ0KKyAgICAgICpnYWluU2NhbGVUYWJsZVtpXS5zY2FsZTsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgU2kzMjE4eF9hdWRpb0dhaW5fUHJlc2V0c1sxXS5hY2dhaW4gPQ0KKyAgICAgIChTaTMyMTh4X0ltcGVkYW5jZV9QcmVzZXRzW2ltcGVkYW5jZV9wcmVzZXRdLnJ4Z2Fpbi8xMDAwKQ0KKyAgICAgICpnYWluU2NhbGVUYWJsZVtpXS5zY2FsZTsNCisgIH0NCisNCisNCisgIC8qDQorICAqKiBMb29rdXAgRVEgR2Fpbg0KKyAgKi8NCisgIGk9MDsNCisgIGRvDQorICB7DQorICAgIGlmKGdhaW5TY2FsZVRhYmxlW2ldLmdhaW4gPj0gZ2Fpbl9lcSkgLyogd2FzIGdhaW5fMiAqLw0KKyAgICB7DQorICAgICAgYnJlYWs7DQorICAgIH0NCisgICAgaSsrOw0KKyAgfQ0KKyAgd2hpbGUgKGdhaW5TY2FsZVRhYmxlW2ldLmdhaW4hPTB4ZmYpOw0KKw0KKyAgLyogU2V0IHRvIG1heGltdW0gdmFsdWUgaWYgZXhjZWVkaW5nIG1heGltdW0gdmFsdWUgZnJvbSB0YWJsZSAqLw0KKyAgaWYoZ2FpblNjYWxlVGFibGVbaV0uZ2FpbiA9PSAweGZmKQ0KKyAgew0KKyAgICBpLS07DQorICAgIGVyclZhbCA9IFJDX0dBSU5fREVMVEFfVE9PX0xBUkdFOw0KKyAgfQ0KKw0KKyAgaWYodHhfcnhfc2VsID09IFRYQUNHQUlOX1NFTCkNCisgIHsNCisgICAgLypzaWduIGV4dGVuZCBuZWdhdGl2ZSBudW1iZXJzKi8NCisgICAgaWYgKFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbaW1wZWRhbmNlX3ByZXNldF0uYXVkaW9FUS50eGFjZXFfYzAgJiAweDEwMDAwMDAwTCkNCisgICAgew0KKyAgICAgIFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbaW1wZWRhbmNlX3ByZXNldF0uYXVkaW9FUS50eGFjZXFfYzAgfD0gMHhmMDAwMDAwMEw7DQorICAgIH0NCisgICAgaWYgKFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbaW1wZWRhbmNlX3ByZXNldF0uYXVkaW9FUS50eGFjZXFfYzEgJiAweDEwMDAwMDAwTCkNCisgICAgew0KKyAgICAgIFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbaW1wZWRhbmNlX3ByZXNldF0uYXVkaW9FUS50eGFjZXFfYzEgfD0gMHhmMDAwMDAwMEw7DQorICAgIH0NCisgICAgaWYgKFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbaW1wZWRhbmNlX3ByZXNldF0uYXVkaW9FUS50eGFjZXFfYzIgJiAweDEwMDAwMDAwTCkNCisgICAgew0KKyAgICAgIFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbaW1wZWRhbmNlX3ByZXNldF0uYXVkaW9FUS50eGFjZXFfYzIgfD0gMHhmMDAwMDAwMEw7DQorICAgIH0NCisgICAgaWYgKFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbaW1wZWRhbmNlX3ByZXNldF0uYXVkaW9FUS50eGFjZXFfYzMgJiAweDEwMDAwMDAwTCkNCisgICAgew0KKyAgICAgIFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbaW1wZWRhbmNlX3ByZXNldF0uYXVkaW9FUS50eGFjZXFfYzMgfD0gMHhmMDAwMDAwMEw7DQorICAgIH0NCisNCisgICAgU2kzMjE4eF9hdWRpb0dhaW5fUHJlc2V0c1swXS5hY2VxX2MwID0gKChpbnQzMikNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbaW1wZWRhbmNlX3ByZXNldF0uYXVkaW9FUS50eGFjZXFfYzAvMTAwMCkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmdhaW5TY2FsZVRhYmxlW2ldLnNjYWxlOw0KKyAgICBTaTMyMTh4X2F1ZGlvR2Fpbl9QcmVzZXRzWzBdLmFjZXFfYzEgPSAoKGludDMyKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1tpbXBlZGFuY2VfcHJlc2V0XS5hdWRpb0VRLnR4YWNlcV9jMS8xMDAwKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZ2FpblNjYWxlVGFibGVbaV0uc2NhbGU7DQorICAgIFNpMzIxOHhfYXVkaW9HYWluX1ByZXNldHNbMF0uYWNlcV9jMiA9ICgoaW50MzIpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaTMyMTh4X0ltcGVkYW5jZV9QcmVzZXRzW2ltcGVkYW5jZV9wcmVzZXRdLmF1ZGlvRVEudHhhY2VxX2MyLzEwMDApDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpnYWluU2NhbGVUYWJsZVtpXS5zY2FsZTsNCisgICAgU2kzMjE4eF9hdWRpb0dhaW5fUHJlc2V0c1swXS5hY2VxX2MzID0gKChpbnQzMikNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbaW1wZWRhbmNlX3ByZXNldF0uYXVkaW9FUS50eGFjZXFfYzMvMTAwMCkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmdhaW5TY2FsZVRhYmxlW2ldLnNjYWxlOw0KKyAgfQ0KKyAgZWxzZQ0KKyAgew0KKyAgICAvKnNpZ24gZXh0ZW5kIG5lZ2F0aXZlIG51bWJlcnMqLw0KKyAgICBpZiAoU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1tpbXBlZGFuY2VfcHJlc2V0XS5hdWRpb0VRLnJ4YWNlcV9jMCAmIDB4MTAwMDAwMDBMKQ0KKyAgICB7DQorICAgICAgU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1tpbXBlZGFuY2VfcHJlc2V0XS5hdWRpb0VRLnJ4YWNlcV9jMCB8PSAweGYwMDAwMDAwTDsNCisgICAgfQ0KKyAgICBpZiAoU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1tpbXBlZGFuY2VfcHJlc2V0XS5hdWRpb0VRLnJ4YWNlcV9jMSAmIDB4MTAwMDAwMDBMKQ0KKyAgICB7DQorICAgICAgU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1tpbXBlZGFuY2VfcHJlc2V0XS5hdWRpb0VRLnJ4YWNlcV9jMSB8PSAweGYwMDAwMDAwTDsNCisgICAgfQ0KKyAgICBpZiAoU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1tpbXBlZGFuY2VfcHJlc2V0XS5hdWRpb0VRLnJ4YWNlcV9jMiAmIDB4MTAwMDAwMDBMKQ0KKyAgICB7DQorICAgICAgU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1tpbXBlZGFuY2VfcHJlc2V0XS5hdWRpb0VRLnJ4YWNlcV9jMiB8PSAweGYwMDAwMDAwTDsNCisgICAgfQ0KKyAgICBpZiAoU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1tpbXBlZGFuY2VfcHJlc2V0XS5hdWRpb0VRLnJ4YWNlcV9jMyAmIDB4MTAwMDAwMDBMKQ0KKyAgICB7DQorICAgICAgU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1tpbXBlZGFuY2VfcHJlc2V0XS5hdWRpb0VRLnJ4YWNlcV9jMyB8PSAweGYwMDAwMDAwTDsNCisgICAgfQ0KKw0KKyAgICBTaTMyMTh4X2F1ZGlvR2Fpbl9QcmVzZXRzWzFdLmFjZXFfYzAgPSAoKGludDMyKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1tpbXBlZGFuY2VfcHJlc2V0XS5hdWRpb0VRLnJ4YWNlcV9jMC8xMDAwKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZ2FpblNjYWxlVGFibGVbaV0uc2NhbGU7DQorICAgIFNpMzIxOHhfYXVkaW9HYWluX1ByZXNldHNbMV0uYWNlcV9jMSA9ICgoaW50MzIpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaTMyMTh4X0ltcGVkYW5jZV9QcmVzZXRzW2ltcGVkYW5jZV9wcmVzZXRdLmF1ZGlvRVEucnhhY2VxX2MxLzEwMDApDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpnYWluU2NhbGVUYWJsZVtpXS5zY2FsZTsNCisgICAgU2kzMjE4eF9hdWRpb0dhaW5fUHJlc2V0c1sxXS5hY2VxX2MyID0gKChpbnQzMikNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbaW1wZWRhbmNlX3ByZXNldF0uYXVkaW9FUS5yeGFjZXFfYzIvMTAwMCkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmdhaW5TY2FsZVRhYmxlW2ldLnNjYWxlOw0KKyAgICBTaTMyMTh4X2F1ZGlvR2Fpbl9QcmVzZXRzWzFdLmFjZXFfYzMgPSAoKGludDMyKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1tpbXBlZGFuY2VfcHJlc2V0XS5hdWRpb0VRLnJ4YWNlcV9jMy8xMDAwKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZ2FpblNjYWxlVGFibGVbaV0uc2NhbGU7DQorICB9DQorDQorDQorICByZXR1cm4gZXJyVmFsOw0KK30NCisjZWxzZSAvKiBFTkFCTEVfSElSRVNfR0FJTiAqLw0KKy8qDQorKiogRnVuY3Rpb246IFNpMzIxOHhfZGJnU2V0R2FpbkhpUmVzKCkNCisqKg0KKyoqIERlc2NyaXB0aW9uOg0KKyoqIFByb3Zpc2lvbiBmdW5jdGlvbiBmb3Igc2V0dGluZyB1cA0KKyoqIFRYIGFuZCBSWCBnYWluIHdpdGggMC4xZEIgcmVzb2x1dGlvbiBpbnN0ZWFkDQorKiogb2YgMS4wZEIgcmVzb2x1dGlvbg0KKyovDQorc3RhdGljIGludCBTaTMyMTh4X2RiZ1NldEdhaW5IaVJlcyAocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYywgaW50MzIgZ2FpbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW1wZWRhbmNlX3ByZXNldCwgaW50IHR4X3J4X3NlbCkNCit7DQorICBpbnQgZXJyVmFsID0gMDsNCisgIGludDMyIGk7DQorICBpbnQzMiBjb2Fyc2VHYWluSW5kZXgsIGZpbmVHYWluSW5kZXg7DQorICBpbnQzMiBnYWluX3BnYSwgZ2Fpbl9lcTsNCisgIGludDMyIGNvYXJzZUdhaW4sIGZpbmVHYWluOw0KKyAgaW50MzIgdG1wOw0KKyAgY29uc3QgUHJvU0xJQ19HYWluU2NhbGVMb29rdXAgY29hcnNlR2FpblNjYWxlVGFibGVbXQ0KKyAgPSAgLyogIGdhaW4sIHNjYWxlPTEwXihnYWluLzIwKSAqLw0KKyAgew0KKyAgICB7LTMwLCAzMn0sDQorICAgIHstMjksIDM1fSwNCisgICAgey0yOCwgNDB9LA0KKyAgICB7LTI3LCA0NX0sDQorICAgIHstMjYsIDUwfSwNCisgICAgey0yNSwgNTZ9LA0KKyAgICB7LTI0LCA2M30sDQorICAgIHstMjMsIDcxfSwNCisgICAgey0yMiwgNzl9LA0KKyAgICB7LTIxLCA4OX0sDQorICAgIHstMjAsIDEwMH0sDQorICAgIHstMTksIDExMn0sDQorICAgIHstMTgsIDEyNn0sDQorICAgIHstMTcsIDE0MX0sDQorICAgIHstMTYsIDE1OH0sDQorICAgIHstMTUsIDE3OH0sDQorICAgIHstMTQsIDIwMH0sDQorICAgIHstMTMsIDIyNH0sDQorICAgIHstMTIsIDI1MX0sDQorICAgIHstMTEsIDI4Mn0sDQorICAgIHstMTAsIDMxNn0sDQorICAgIHstOSwgMzU1fSwNCisgICAgey04LCAzOTh9LA0KKyAgICB7LTcsIDQ0N30sDQorICAgIHstNiwgNTAxfSwNCisgICAgey01LCA1NjJ9LA0KKyAgICB7LTQsIDYzMX0sDQorICAgIHstMywgNzA4fSwNCisgICAgey0yLCA3OTR9LA0KKyAgICB7LTEsIDg5MX0sDQorICAgIHswLCAxMDAwfSwNCisgICAgezEsIDExMjJ9LA0KKyAgICB7MiwgMTI1OX0sDQorICAgIHszLCAxNDEzfSwNCisgICAgezQsIDE1ODV9LA0KKyAgICB7NSwgMTc3OH0sDQorICAgIHs2LCAxOTk1fSwNCisgICAgezB4ZmYsMH0gIC8qIHRlcm1pbmF0b3IgKi8NCisgIH07DQorDQorICBjb25zdCBQcm9TTElDX0dhaW5TY2FsZUxvb2t1cCBmaW5lR2FpblNjYWxlVGFibGVbXQ0KKyAgPSAgLyogIGdhaW4sIHNjYWxlPTEwXihnYWluLzIwKSAqLw0KKyAgew0KKyAgICB7LTksIDkwMn0sDQorICAgIHstOCwgOTEyfSwNCisgICAgey03LCA5MjN9LA0KKyAgICB7LTYsIDkzM30sDQorICAgIHstNSwgOTQ0fSwNCisgICAgey00LCA5NTV9LA0KKyAgICB7LTMsIDk2Nn0sDQorICAgIHstMiwgOTc3fSwNCisgICAgey0xLCA5ODl9LA0KKyAgICB7MCwgMTAwMH0sDQorICAgIHsxLCAxMDEyfSwNCisgICAgezIsIDEwMjN9LA0KKyAgICB7MywgMTAzNX0sDQorICAgIHs0LCAxMDQ3fSwNCisgICAgezUsIDEwNTl9LA0KKyAgICB7NiwgMTA3Mn0sDQorICAgIHs3LCAxMDg0fSwNCisgICAgezgsIDEwOTZ9LA0KKyAgICB7OSwgMTEwOX0sDQorICAgIHsweGZmLDB9ICAvKiB0ZXJtaW5hdG9yICovDQorICB9Ow0KKw0KKyAgU0lMQUJTX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIocFByb3NsaWMpOw0KKw0KKyAgLyogVGVzdCBhZ2FpbnN0IG1heCBnYWluICovDQorICBpZiAoZ2FpbiA+IChQUk9TTElDX0dBSU5fTUFYKjEwTCkpDQorICB7DQorICAgIGVyclZhbCA9IFJDX0dBSU5fT1VUX09GX1JBTkdFOw0KKyAgICBERUJVR19QUklOVChwUHJvc2xpYywgIiVzZGJnU2V0R2FpbjogR2FpbiAlZCBkQioxMCBvdXQgb2YgcmFuZ2VcbiIsDQorICAgICAgICAgICAgICAgIExPR1BSSU5UX1BSRUZJWCwgZ2Fpbik7DQorICAgIGdhaW4gPSAoUFJPU0xJQ19HQUlOX01BWCoxMEwpOyAvKiBDbGFtcCB0byBtYXhpbXVtICovDQorICB9DQorDQorICAvKiBUZXN0IGFnYWluc3QgbWluIGdhaW4gKi8NCisgIGlmIChnYWluIDwgKFBST1NMSUNfR0FJTl9NSU4qMTBMKSkNCisgIHsNCisgICAgZXJyVmFsID0gUkNfR0FJTl9PVVRfT0ZfUkFOR0U7DQorICAgIERFQlVHX1BSSU5UKHBQcm9zbGljLCAiJXNkYmdTZXRHYWluOiBHYWluICVkIGRCKjEwIG91dCBvZiByYW5nZVxuIiwNCisgICAgICAgICAgICAgICAgTE9HUFJJTlRfUFJFRklYLCBnYWluKTsNCisgICAgZ2FpbiA9IChQUk9TTElDX0dBSU5fTUlOKjEwKTsgLyogQ2xhbXAgdG8gbWluaW11bSAqLw0KKyAgfQ0KKw0KKyAgLyogRGlzdHJpYnV0ZSBnYWluICovDQorICBjb2Fyc2VHYWluID0gZ2Fpbi8xMEw7DQorICBmaW5lR2FpbiA9IGdhaW4gLSAoY29hcnNlR2FpbioxMEwpOw0KKw0KKyAgLyogRGlzdHJpYnV0ZSBjb2Fyc2VHYWluICovDQorICBpZihjb2Fyc2VHYWluID09IDApDQorICB7DQorICAgIGdhaW5fcGdhID0gMDsNCisgICAgZ2Fpbl9lcSA9IDA7DQorICB9DQorICBlbHNlIGlmKGNvYXJzZUdhaW4gPiAwKQ0KKyAgew0KKyAgICBpZih0eF9yeF9zZWwgPT0gVFhBQ0dBSU5fU0VMKQ0KKyAgICB7DQorICAgICAgZ2Fpbl9wZ2EgPSBjb2Fyc2VHYWluOw0KKyAgICAgIGdhaW5fZXEgID0gMDsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICBnYWluX3BnYSA9IDA7DQorICAgICAgZ2Fpbl9lcSA9IGNvYXJzZUdhaW47DQorICAgIH0NCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgaWYodHhfcnhfc2VsID09IFRYQUNHQUlOX1NFTCkNCisgICAgew0KKyAgICAgIGdhaW5fcGdhID0gMDsNCisgICAgICBnYWluX2VxICA9IGNvYXJzZUdhaW47DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgZ2Fpbl9wZ2EgPSBjb2Fyc2VHYWluOw0KKyAgICAgIGdhaW5fZXEgPSAwOw0KKyAgICB9DQorICB9DQorDQorICAvKg0KKyAgKiogTG9va3VwIFBHQSBBcHBvcHJpYXRlIFBHQSBHYWluDQorICAqLw0KKyAgaT0wOw0KKyAgZG8NCisgIHsNCisgICAgaWYoY29hcnNlR2FpblNjYWxlVGFibGVbaV0uZ2FpbiA+PSBnYWluX3BnYSkNCisgICAgew0KKyAgICAgIGJyZWFrOw0KKyAgICB9DQorICAgIGkrKzsNCisgIH0NCisgIHdoaWxlIChjb2Fyc2VHYWluU2NhbGVUYWJsZVtpXS5nYWluIT0weGZmKTsNCisNCisgIC8qIFNldCB0byBtYXhpbXVtIHZhbHVlIGlmIGV4Y2VlZGluZyBtYXhpbXVtIHZhbHVlIGZyb20gdGFibGUgKi8NCisgIGlmKGNvYXJzZUdhaW5TY2FsZVRhYmxlW2ldLmdhaW4gPT0gMHhmZikNCisgIHsNCisgICAgaS0tOw0KKyAgICBlcnJWYWwgPSBSQ19HQUlOX0RFTFRBX1RPT19MQVJHRTsNCisgIH0NCisNCisgIGNvYXJzZUdhaW5JbmRleCA9IGk7ICAvKiBTdG9yZSBjb2Fyc2UgaW5kZXggKi8NCisNCisgIC8qIEZpbmQgZmluZUdhaW4gKi8NCisgIGkgPSAwOw0KKyAgZG8NCisgIHsNCisgICAgaWYoZmluZUdhaW5TY2FsZVRhYmxlW2ldLmdhaW4gPj0gZmluZUdhaW4pDQorICAgIHsNCisgICAgICBicmVhazsNCisgICAgfQ0KKyAgICBpKys7DQorICB9DQorICB3aGlsZSAoZmluZUdhaW5TY2FsZVRhYmxlW2ldLmdhaW4hPTB4ZmYpOw0KKw0KKyAgLyogU2V0IHRvIG1heGltdW0gdmFsdWUgaWYgZXhjZWVkaW5nIG1heGltdW0gdmFsdWUgZnJvbSB0YWJsZSAqLw0KKyAgaWYoZmluZUdhaW5TY2FsZVRhYmxlW2ldLmdhaW4gPT0gMHhmZikNCisgIHsNCisgICAgaS0tOw0KKyAgICBlcnJWYWwgPSBSQ19HQUlOX0RFTFRBX1RPT19MQVJHRTsNCisgIH0NCisNCisgIGZpbmVHYWluSW5kZXggPSBpOw0KKw0KKyAgaWYodHhfcnhfc2VsID09IFRYQUNHQUlOX1NFTCkNCisgIHsNCisgICAgU2kzMjE4eF9hdWRpb0dhaW5fUHJlc2V0c1swXS5hY2dhaW4gPSAoKA0KKyAgICAgICAgU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1tpbXBlZGFuY2VfcHJlc2V0XS50eGdhaW4vMTAwMEwpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb2Fyc2VHYWluU2NhbGVUYWJsZVtjb2Fyc2VHYWluSW5kZXhdLnNjYWxlKTsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgU2kzMjE4eF9hdWRpb0dhaW5fUHJlc2V0c1sxXS5hY2dhaW4gPSAoKA0KKyAgICAgICAgU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1tpbXBlZGFuY2VfcHJlc2V0XS5yeGdhaW4vMTAwMEwpDQorICAgICAgICAqIGNvYXJzZUdhaW5TY2FsZVRhYmxlW2NvYXJzZUdhaW5JbmRleF0uc2NhbGUpLzEwMDBMIA0KKyAgICAgICAgKiBmaW5lR2FpblNjYWxlVGFibGVbZmluZUdhaW5JbmRleF0uc2NhbGU7DQorICB9DQorDQorICAvKg0KKyAgKiogTG9va3VwIEVRIEdhaW4NCisgICovDQorICBpPTA7DQorICBkbw0KKyAgew0KKyAgICBpZihjb2Fyc2VHYWluU2NhbGVUYWJsZVtpXS5nYWluID49IGdhaW5fZXEpDQorICAgIHsNCisgICAgICBicmVhazsNCisgICAgfQ0KKyAgICBpKys7DQorICB9DQorICB3aGlsZSAoY29hcnNlR2FpblNjYWxlVGFibGVbaV0uZ2FpbiE9MHhmZik7DQorDQorICAvKiBTZXQgdG8gbWF4aW11bSB2YWx1ZSBpZiBleGNlZWRpbmcgbWF4aW11bSB2YWx1ZSBmcm9tIHRhYmxlICovDQorICBpZihjb2Fyc2VHYWluU2NhbGVUYWJsZVtpXS5nYWluID09IDB4ZmYpDQorICB7DQorICAgIGktLTsNCisgICAgZXJyVmFsID0gUkNfR0FJTl9ERUxUQV9UT09fTEFSR0U7DQorICB9DQorDQorICBjb2Fyc2VHYWluSW5kZXggPSBpOyAgLyogU3RvcmUgY29hcnNlIGluZGV4ICovDQorDQorICBpZih0eF9yeF9zZWwgPT0gVFhBQ0dBSU5fU0VMKQ0KKyAgew0KKyAgICAvKnNpZ24gZXh0ZW5kIG5lZ2F0aXZlIG51bWJlcnMqLw0KKyAgICBpZiAoU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1tpbXBlZGFuY2VfcHJlc2V0XS5hdWRpb0VRLnR4YWNlcV9jMCAmIDB4MTAwMDAwMDBMKQ0KKyAgICB7DQorICAgICAgU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1tpbXBlZGFuY2VfcHJlc2V0XS5hdWRpb0VRLnR4YWNlcV9jMCB8PSAweGYwMDAwMDAwTDsNCisgICAgfQ0KKyAgICBpZiAoU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1tpbXBlZGFuY2VfcHJlc2V0XS5hdWRpb0VRLnR4YWNlcV9jMSAmIDB4MTAwMDAwMDBMKQ0KKyAgICB7DQorICAgICAgU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1tpbXBlZGFuY2VfcHJlc2V0XS5hdWRpb0VRLnR4YWNlcV9jMSB8PSAweGYwMDAwMDAwTDsNCisgICAgfQ0KKyAgICBpZiAoU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1tpbXBlZGFuY2VfcHJlc2V0XS5hdWRpb0VRLnR4YWNlcV9jMiAmIDB4MTAwMDAwMDBMKQ0KKyAgICB7DQorICAgICAgU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1tpbXBlZGFuY2VfcHJlc2V0XS5hdWRpb0VRLnR4YWNlcV9jMiB8PSAweGYwMDAwMDAwTDsNCisgICAgfQ0KKyAgICBpZiAoU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1tpbXBlZGFuY2VfcHJlc2V0XS5hdWRpb0VRLnR4YWNlcV9jMyAmIDB4MTAwMDAwMDBMKQ0KKyAgICB7DQorICAgICAgU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1tpbXBlZGFuY2VfcHJlc2V0XS5hdWRpb0VRLnR4YWNlcV9jMyB8PSAweGYwMDAwMDAwTDsNCisgICAgfQ0KKw0KKyAgICB0bXAgPSAoKChpbnQzMikNCisgICAgICAgICAgICBTaTMyMTh4X0ltcGVkYW5jZV9QcmVzZXRzW2ltcGVkYW5jZV9wcmVzZXRdLmF1ZGlvRVEudHhhY2VxX2MwLzEwMDBMKQ0KKyAgICAgICAgICAgKmNvYXJzZUdhaW5TY2FsZVRhYmxlW2NvYXJzZUdhaW5JbmRleF0uc2NhbGUpOw0KKyAgICB0bXAgPSB0bXAgLyAoaW50MzIpMTAwMEw7DQorICAgIHRtcCA9IHRtcCAqIChpbnQzMilmaW5lR2FpblNjYWxlVGFibGVbZmluZUdhaW5JbmRleF0uc2NhbGU7DQorICAgIFNpMzIxOHhfYXVkaW9HYWluX1ByZXNldHNbMF0uYWNlcV9jMCA9IHRtcDsNCisNCisgICAgdG1wID0gKCgoaW50MzIpDQorICAgICAgICAgICAgU2kzMjE4eF9JbXBlZGFuY2VfUHJlc2V0c1tpbXBlZGFuY2VfcHJlc2V0XS5hdWRpb0VRLnR4YWNlcV9jMS8xMDAwTCkNCisgICAgICAgICAgICpjb2Fyc2VHYWluU2NhbGVUYWJsZVtjb2Fyc2VHYWluSW5kZXhdLnNjYWxlKTsNCisgICAgdG1wID0gdG1wIC8gKGludDMyKTEwMDBMOw0KKyAgICB0bXAgPSB0bXAgKiAoaW50MzIpZmluZUdhaW5TY2FsZVRhYmxlW2ZpbmVHYWluSW5kZXhdLnNjYWxlOw0KKyAgICBTaTMyMTh4X2F1ZGlvR2Fpbl9QcmVzZXRzWzBdLmFjZXFfYzEgPSB0bXA7DQorDQorICAgIHRtcCA9ICgoKGludDMyKQ0KKyAgICAgICAgICAgIFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbaW1wZWRhbmNlX3ByZXNldF0uYXVkaW9FUS50eGFjZXFfYzIvMTAwMEwpDQorICAgICAgICAgICAqY29hcnNlR2FpblNjYWxlVGFibGVbY29hcnNlR2FpbkluZGV4XS5zY2FsZSk7DQorICAgIHRtcCA9IHRtcCAvIChpbnQzMikxMDAwTDsNCisgICAgdG1wID0gdG1wICogKGludDMyKWZpbmVHYWluU2NhbGVUYWJsZVtmaW5lR2FpbkluZGV4XS5zY2FsZTsNCisgICAgU2kzMjE4eF9hdWRpb0dhaW5fUHJlc2V0c1swXS5hY2VxX2MyID0gdG1wOw0KKw0KKyAgICB0bXAgPSAoKChpbnQzMikNCisgICAgICAgICAgICBTaTMyMTh4X0ltcGVkYW5jZV9QcmVzZXRzW2ltcGVkYW5jZV9wcmVzZXRdLmF1ZGlvRVEudHhhY2VxX2MzLzEwMDBMKQ0KKyAgICAgICAgICAgKmNvYXJzZUdhaW5TY2FsZVRhYmxlW2NvYXJzZUdhaW5JbmRleF0uc2NhbGUpOw0KKyAgICB0bXAgPSB0bXAgLyAoaW50MzIpMTAwMEw7DQorICAgIHRtcCA9IHRtcCAqIChpbnQzMilmaW5lR2FpblNjYWxlVGFibGVbZmluZUdhaW5JbmRleF0uc2NhbGU7DQorICAgIFNpMzIxOHhfYXVkaW9HYWluX1ByZXNldHNbMF0uYWNlcV9jMyA9IHRtcDsNCisgIH0NCisgIGVsc2UNCisgIHsNCisgICAgLypzaWduIGV4dGVuZCBuZWdhdGl2ZSBudW1iZXJzKi8NCisgICAgaWYgKFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbaW1wZWRhbmNlX3ByZXNldF0uYXVkaW9FUS5yeGFjZXFfYzAgJiAweDEwMDAwMDAwTCkNCisgICAgew0KKyAgICAgIFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbaW1wZWRhbmNlX3ByZXNldF0uYXVkaW9FUS5yeGFjZXFfYzAgfD0gMHhmMDAwMDAwMEw7DQorICAgIH0NCisgICAgaWYgKFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbaW1wZWRhbmNlX3ByZXNldF0uYXVkaW9FUS5yeGFjZXFfYzEgJiAweDEwMDAwMDAwTCkNCisgICAgew0KKyAgICAgIFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbaW1wZWRhbmNlX3ByZXNldF0uYXVkaW9FUS5yeGFjZXFfYzEgfD0gMHhmMDAwMDAwMEw7DQorICAgIH0NCisgICAgaWYgKFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbaW1wZWRhbmNlX3ByZXNldF0uYXVkaW9FUS5yeGFjZXFfYzIgJiAweDEwMDAwMDAwTCkNCisgICAgew0KKyAgICAgIFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbaW1wZWRhbmNlX3ByZXNldF0uYXVkaW9FUS5yeGFjZXFfYzIgfD0gMHhmMDAwMDAwMEw7DQorICAgIH0NCisgICAgaWYgKFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbaW1wZWRhbmNlX3ByZXNldF0uYXVkaW9FUS5yeGFjZXFfYzMgJiAweDEwMDAwMDAwTCkNCisgICAgew0KKyAgICAgIFNpMzIxOHhfSW1wZWRhbmNlX1ByZXNldHNbaW1wZWRhbmNlX3ByZXNldF0uYXVkaW9FUS5yeGFjZXFfYzMgfD0gMHhmMDAwMDAwMEw7DQorICAgIH0NCisNCisgICAgU2kzMjE4eF9hdWRpb0dhaW5fUHJlc2V0c1sxXS5hY2VxX2MwID0gKChpbnQzMikNCisgICAgICBTaTMyMTh4X0ltcGVkYW5jZV9QcmVzZXRzW2ltcGVkYW5jZV9wcmVzZXRdLmF1ZGlvRVEucnhhY2VxX2MwLzEwMDApDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb2Fyc2VHYWluU2NhbGVUYWJsZVtpXS5zY2FsZTsNCisgICAgU2kzMjE4eF9hdWRpb0dhaW5fUHJlc2V0c1sxXS5hY2VxX2MxID0gKChpbnQzMikNCisgICAgICBTaTMyMTh4X0ltcGVkYW5jZV9QcmVzZXRzW2ltcGVkYW5jZV9wcmVzZXRdLmF1ZGlvRVEucnhhY2VxX2MxLzEwMDApDQorICAgICAgKiBjb2Fyc2VHYWluU2NhbGVUYWJsZVtpXS5zY2FsZTsNCisgICAgU2kzMjE4eF9hdWRpb0dhaW5fUHJlc2V0c1sxXS5hY2VxX2MyID0gKChpbnQzMikNCisgICAgICBTaTMyMTh4X0ltcGVkYW5jZV9QcmVzZXRzW2ltcGVkYW5jZV9wcmVzZXRdLmF1ZGlvRVEucnhhY2VxX2MyLzEwMDApDQorICAgICAgKiBjb2Fyc2VHYWluU2NhbGVUYWJsZVtpXS5zY2FsZTsNCisgICAgU2kzMjE4eF9hdWRpb0dhaW5fUHJlc2V0c1sxXS5hY2VxX2MzID0gKChpbnQzMikNCisgICAgICBTaTMyMTh4X0ltcGVkYW5jZV9QcmVzZXRzW2ltcGVkYW5jZV9wcmVzZXRdLmF1ZGlvRVEucnhhY2VxX2MzLzEwMDApDQorICAgICAgKiBjb2Fyc2VHYWluU2NhbGVUYWJsZVtpXS5zY2FsZTsNCisgIH0NCisNCisgIHJldHVybiBlcnJWYWw7DQorfQ0KKyNlbmRpZiAvKiBFTkFCTEVfSElSRVNfR0FJTiAqLw0KKw0KKy8qDQorKiogRnVuY3Rpb246IFBST1NMSUNfZGJnU2V0VFhHYWluDQorKioNCisqKiBEZXNjcmlwdGlvbjoNCisqKiBQcm92aXNpb24gZnVuY3Rpb24gZm9yIHNldHRpbmcgdXANCisqKiBUWCBnYWluDQorKi8NCisNCitpbnQgU2kzMjE4eF9kYmdTZXRUWEdhaW4gKHByb3NsaWNDaGFuVHlwZSAqcFByb3NsaWMsIGludDMyIGdhaW4sDQorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW1wZWRhbmNlX3ByZXNldCwgaW50IGF1ZGlvX2dhaW5fcHJlc2V0KQ0KK3sNCisgIFNJTEFCU19VTlJFRkVSRU5DRURfUEFSQU1FVEVSKGF1ZGlvX2dhaW5fcHJlc2V0KTsNCisjaWZkZWYgRU5BQkxFX0hJUkVTX0dBSU4NCisgIHJldHVybiBTaTMyMTh4X2RiZ1NldEdhaW5IaVJlcyhwUHJvc2xpYyxnYWluLGltcGVkYW5jZV9wcmVzZXQsVFhBQ0dBSU5fU0VMKTsNCisjZWxzZQ0KKyAgcmV0dXJuIFNpMzIxOHhfZGJnU2V0R2FpbihwUHJvc2xpYyxnYWluLGltcGVkYW5jZV9wcmVzZXQsVFhBQ0dBSU5fU0VMKTsNCisjZW5kaWYNCit9DQorDQorLyoNCisqKiBGdW5jdGlvbjogUFJPU0xJQ19kYmdTZXRSWEdhaW4NCisqKg0KKyoqIERlc2NyaXB0aW9uOg0KKyoqIFByb3Zpc2lvbiBmdW5jdGlvbiBmb3Igc2V0dGluZyB1cA0KKyoqIFJYIGdhaW4NCisqLw0KK2ludCBTaTMyMTh4X2RiZ1NldFJYR2FpbiAocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYywgaW50MzIgZ2FpbiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbXBlZGFuY2VfcHJlc2V0LCBpbnQgYXVkaW9fZ2Fpbl9wcmVzZXQpDQorew0KKyAgU0lMQUJTX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIoYXVkaW9fZ2Fpbl9wcmVzZXQpOw0KKyNpZmRlZiBFTkFCTEVfSElSRVNfR0FJTg0KKyAgcmV0dXJuIFNpMzIxOHhfZGJnU2V0R2FpbkhpUmVzKHBQcm9zbGljLGdhaW4saW1wZWRhbmNlX3ByZXNldCxSWEFDR0FJTl9TRUwpOw0KKyNlbHNlDQorICByZXR1cm4gU2kzMjE4eF9kYmdTZXRHYWluKHBQcm9zbGljLGdhaW4saW1wZWRhbmNlX3ByZXNldCxSWEFDR0FJTl9TRUwpOw0KKyNlbmRpZg0KK30NCisNCisvKg0KKyoqIEZ1bmN0aW9uOiBTaTMyMTh4X0dldFJBTVNjYWxlDQorKioNCisqKiBEZXNjcmlwdGlvbjoNCisqKiBSZWFkIHNjYWxlIGZhY3RvciBmb3IgcGFzc2VkIFJBTSBsb2NhdGlvbg0KKyoqDQorKiogUmV0dXJuIFZhbHVlOg0KKyoqIGludDMyIHNjYWxlDQorKi8NCitzdGF0aWMgaW50MzIgU2kzMjE4eF9HZXRSQU1TY2FsZSh1SW50MTYgYWRkcikNCit7DQorICBpbnQzMiBzY2FsZTsNCisNCisgIHN3aXRjaChhZGRyKQ0KKyAgew0KKyAgICBjYXNlIFNJMzIxOFhfUkFNX01BRENfSUxPT1A6DQorICAgIGNhc2UgU0kzMjE4WF9SQU1fTUFEQ19JVElQOg0KKyAgICBjYXNlIFNJMzIxOFhfUkFNX01BRENfSVJJTkc6DQorICAgIGNhc2UgU0kzMjE4WF9SQU1fTUFEQ19JTE9ORzoNCisgICAgICBzY2FsZSA9IFNDQUxFX0lfTUFEQzsNCisgICAgICBicmVhazsNCisNCisgICAgY2FzZSBTSTMyMThYX1JBTV9NQURDX1ZUSVBDOg0KKyAgICBjYXNlIFNJMzIxOFhfUkFNX01BRENfVlJJTkdDOg0KKyAgICBjYXNlIFNJMzIxOFhfUkFNX01BRENfVkJBVDoNCisgICAgY2FzZSBTSTMyMThYX1JBTV9NQURDX1ZEQzoNCisgICAgY2FzZSBTSTMyMThYX1JBTV9NQURDX1ZEQ19PUzoNCisgICAgY2FzZSBTSTMyMThYX1JBTV9NQURDX1ZMT05HOg0KKyAgICBjYXNlIFNJMzIxOFhfUkFNX1ZESUZGX1NFTlNFOg0KKyAgICBjYXNlIFNJMzIxOFhfUkFNX1ZESUZGX0ZJTFQ6DQorICAgIGNhc2UgU0kzMjE4WF9SQU1fVkRJRkZfQ09BUlNFOg0KKyAgICBjYXNlIFNJMzIxOFhfUkFNX1ZUSVA6DQorICAgIGNhc2UgU0kzMjE4WF9SQU1fVlJJTkc6DQorICAgICAgc2NhbGUgPSBTQ0FMRV9WX01BREM7DQorICAgICAgYnJlYWs7DQorDQorICAgIGRlZmF1bHQ6DQorICAgICAgc2NhbGUgPSAxOw0KKyAgICAgIGJyZWFrOw0KKyAgfQ0KKw0KKyAgcmV0dXJuIHNjYWxlOw0KK30NCisNCisvKg0KKyoqIEZ1bmN0aW9uOiBTaTMyMTh4X1JlYWRNQURDU2NhbGVkDQorKioNCisqKiBEZXNjcmlwdGlvbjoNCisqKiBSZWFkIE1BREMgKG9yIG90aGVyIHNlbnNlZCB2b2x0YWdlcy9jdXJyZW50cykgYW5kDQorKiogcmV0dXJuIHNjYWxlZCB2YWx1ZSBpbiBpbnQzMiBmb3JtYXQuDQorKioNCisqKiBSZXR1cm4gVmFsdWU6DQorKiogaW50MzIgdm9sdGFnZSBpbiBtViBvcg0KKyoqIGludDMyIGN1cnJlbnQgaW4gdUENCisqLw0KK2ludDMyIFNpMzIxOHhfUmVhZE1BRENTY2FsZWQocHJvc2xpY0NoYW5UeXBlX3B0ciBwUHJvc2xpYyx1SW50MTYgYWRkciwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyIHNjYWxlKQ0KK3sNCisgIGludDMyIGRhdGE7DQorDQorICAvKg0KKyAgKiogUmVhZCAyOS1iaXQgUkFNIGFuZCBzaWduIGV4dGVuZCB0byAzMi1iaXRzDQorICAqLw0KKyAgZGF0YSA9IFJlYWRSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLGFkZHIpOw0KKyAgaWYoZGF0YSAmIDB4MTAwMDAwMDBMKQ0KKyAgew0KKyAgICBkYXRhIHw9IDB4RjAwMDAwMDBMOw0KKyAgfQ0KKw0KKyAgLyoNCisgICoqIFNjYWxlIHRvIHByb3ZpZGVkIHZhbHVlLCBvciB1c2UgZGVmYXVsdHMgaWYgc2NhbGUgPSAwDQorICAqLw0KKyAgaWYoc2NhbGUgPT0gMCkNCisgIHsNCisgICAgc2NhbGUgPSBTaTMyMTh4X0dldFJBTVNjYWxlKGFkZHIpOw0KKyAgfQ0KKw0KKyAgZGF0YSAvPSBzY2FsZTsNCisNCisgIHJldHVybiBkYXRhOw0KK30NCisNCisvKg0KKyoqIEZ1bmN0aW9uOiBTaTMyMTh4X0xpbmVNb25pdG9yDQorKioNCisqKiBEZXNjcmlwdGlvbjoNCisqKiBNb25pdG9yIGxpbmUgdm9sdGFnZXMgYW5kIGN1cnJlbnRzDQorKi8NCitpbnQgU2kzMjE4eF9MaW5lTW9uaXRvcihwcm9zbGljQ2hhblR5cGUgKnBQcm9zbGljLCBwcm9zbGljTW9uaXRvclR5cGUgKm1vbml0b3IpDQorew0KKw0KKyAgaWYocFByb3NsaWMtPmNoYW5uZWxUeXBlICE9IFBST1NMSUMpDQorICB7DQorICAgIHJldHVybiBSQ19DSEFOTkVMX1RZUEVfRVJSOw0KKyAgfQ0KKw0KKyAgaWYocFByb3NsaWMtPmNoYW5uZWxFbmFibGUpDQorICB7DQorICAgIG1vbml0b3ItPnZ0ciAgICA9IFJlYWRSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX1ZESUZGX0ZJTFQpOw0KKyAgICBpZihtb25pdG9yLT52dHIgJiAweDEwMDAwMDAwTCkNCisgICAgew0KKyAgICAgIG1vbml0b3ItPnZ0ciB8PSAweGYwMDAwMDAwTDsNCisgICAgfQ0KKyAgICBtb25pdG9yLT52dHIgLz0gU0NBTEVfVl9NQURDOw0KKw0KKyAgICBtb25pdG9yLT52dGlwICAgID0gUmVhZFJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fVlRJUCk7DQorICAgIGlmKG1vbml0b3ItPnZ0aXAgJiAweDEwMDAwMDAwTCkNCisgICAgew0KKyAgICAgIG1vbml0b3ItPnZ0aXAgfD0gMHhmMDAwMDAwMEw7DQorICAgIH0NCisgICAgbW9uaXRvci0+dnRpcCAvPSBTQ0FMRV9WX01BREM7DQorDQorICAgIG1vbml0b3ItPnZyaW5nICAgID0gUmVhZFJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fVlJJTkcpOw0KKyAgICBpZihtb25pdG9yLT52cmluZyAmIDB4MTAwMDAwMDBMKQ0KKyAgICB7DQorICAgICAgbW9uaXRvci0+dnJpbmcgfD0gMHhmMDAwMDAwMEw7DQorICAgIH0NCisgICAgbW9uaXRvci0+dnJpbmcgLz0gU0NBTEVfVl9NQURDOw0KKw0KKyAgICBtb25pdG9yLT52bG9uZyAgICA9IFJlYWRSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX01BRENfVkxPTkcpOw0KKyAgICBpZihtb25pdG9yLT52bG9uZyAmIDB4MTAwMDAwMDBMKQ0KKyAgICB7DQorICAgICAgbW9uaXRvci0+dmxvbmcgfD0gMHhmMDAwMDAwMEw7DQorICAgIH0NCisgICAgbW9uaXRvci0+dmxvbmcgLz0gU0NBTEVfVl9NQURDOw0KKw0KKyAgICBtb25pdG9yLT52YmF0ICAgID0gUmVhZFJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fTUFEQ19WQkFUKTsNCisgICAgaWYobW9uaXRvci0+dmJhdCAmIDB4MTAwMDAwMDBMKQ0KKyAgICB7DQorICAgICAgbW9uaXRvci0+dmJhdCB8PSAweGYwMDAwMDAwTDsNCisgICAgfQ0KKyAgICBtb25pdG9yLT52YmF0IC89IFNDQUxFX1ZfTUFEQzsNCisNCisgICAgbW9uaXRvci0+dmRjID0gMDsgLyogU2kzMjE4eCBoYXMgbm8gU1ZEQyAqLw0KKw0KKyAgICBtb25pdG9yLT5pdHIgID0gUmVhZFJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fTUFEQ19JTE9PUCk7DQorICAgIGlmKG1vbml0b3ItPml0ciAmIDB4MTAwMDAwMDBMKQ0KKyAgICB7DQorICAgICAgbW9uaXRvci0+aXRyIHw9IDB4ZjAwMDAwMDBMOw0KKyAgICB9DQorICAgIG1vbml0b3ItPml0ciAvPSBTQ0FMRV9JX01BREM7DQorDQorICAgIG1vbml0b3ItPml0aXAgID0gUmVhZFJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fTUFEQ19JVElQKTsNCisgICAgaWYobW9uaXRvci0+aXRpcCAmIDB4MTAwMDAwMDBMKQ0KKyAgICB7DQorICAgICAgbW9uaXRvci0+aXRpcCB8PSAweGYwMDAwMDAwTDsNCisgICAgfQ0KKyAgICBtb25pdG9yLT5pdGlwIC89IFNDQUxFX0lfTUFEQzsNCisNCisgICAgbW9uaXRvci0+aXJpbmcgID0gUmVhZFJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsU0kzMjE4WF9SQU1fTUFEQ19JUklORyk7DQorICAgIGlmKG1vbml0b3ItPmlyaW5nICYgMHgxMDAwMDAwMEwpDQorICAgIHsNCisgICAgICBtb25pdG9yLT5pcmluZyB8PSAweGYwMDAwMDAwTDsNCisgICAgfQ0KKyAgICBtb25pdG9yLT5pcmluZyAvPSBTQ0FMRV9JX01BREM7DQorDQorICAgIG1vbml0b3ItPmlsb25nICA9IFJlYWRSQU0ocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFNJMzIxOFhfUkFNX01BRENfSUxPTkcpOw0KKyAgICBpZihtb25pdG9yLT5pbG9uZyAmIDB4MTAwMDAwMDBMKQ0KKyAgICB7DQorICAgICAgbW9uaXRvci0+aWxvbmcgfD0gMHhmMDAwMDAwMEw7DQorICAgIH0NCisgICAgbW9uaXRvci0+aWxvbmcgLz0gU0NBTEVfSV9NQURDOw0KKw0KKyAgICBtb25pdG9yLT5wX2h2aWMgID0gUmVhZFJBTShwUHJvSFcscFByb3NsaWMtPmNoYW5uZWwsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJMzIxOFhfUkFNX1BfUTFfRCk7IC8qIFBfSFZJQ19MUEYgKi8NCisgICAgaWYobW9uaXRvci0+cF9odmljICYgMHgxMDAwMDAwMEwpDQorICAgIHsNCisgICAgICBtb25pdG9yLT5wX2h2aWMgfD0gMHhmMDAwMDAwMEw7DQorICAgIH0NCisgICAgbW9uaXRvci0+cF9odmljIC89IFNDQUxFX1BfTUFEQzsNCisgIH0NCisNCisgIHJldHVybiBSQ19OT05FOw0KK30NCisNCisvKg0KKyoqIEZ1bmN0aW9uOiBTaTMyMTh4X1BTVE5DaGVjaw0KKyoqDQorKiogRGVzY3JpcHRpb246DQorKiogQ29udGludW91cyBtb25pdG9yaW5nIG9mIGxvbmdpdHVkaW5hbCBjdXJyZW50Lg0KKyoqIElmIGFuIGF2ZXJhZ2Ugb2YgTiBzYW1wbGVzIGV4Y2VlZCBhdmdUaHJlc2ggb3IgYQ0KKyoqIHNpbmdsZSBzYW1wbGUgZXhjZWVkcyBzaW5nbGVUaHJlc2gsIHRoZSBsaW5lZmVlZA0KKyoqIGlzIGZvcmNlZCBpbnRvIHRoZSBvcGVuIHN0YXRlLg0KKyoqDQorKiogVGhpcyBwcm90ZWN0cyB0aGUgcG9ydCBmcm9tIGNvbm5lY3RpbmcgdG8gYSBsaXZlDQorKiogcHN0biBsaW5lIChmYXN0ZXIgdGhhbiBwb3dlciBhbGFybSkuDQorKioNCisqLw0KK2ludCBTaTMyMTh4X1BTVE5DaGVjayAocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYywNCisgICAgICAgICAgICAgICAgICAgICAgIHByb3NsaWNQU1ROQ2hlY2tPYmpUeXBlICpwUFNUTkNoZWNrKQ0KK3sNCisgIHVJbnQ4IGk7DQorDQorICBpZiggKHBQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQ0KKyAgICAgIHx8IChwUFNUTkNoZWNrLT5zYW1wbGVzID09IDApICkNCisgIHsNCisgICAgcmV0dXJuIFJDX05PTkU7ICAgIC8qIElnbm9yZSBEQUEgY2hhbm5lbHMgKi8NCisgIH0NCisNCisgIC8qIEFkanVzdCBidWZmZXIgaW5kZXggKi8NCisgIGlmKHBQU1ROQ2hlY2stPmNvdW50ID49IHBQU1ROQ2hlY2stPnNhbXBsZXMpDQorICB7DQorICAgIHBQU1ROQ2hlY2stPmJ1ZmZGdWxsID0gVFJVRTsNCisgICAgcFBTVE5DaGVjay0+Y291bnQgPSAwOyAgIC8qIHJlc2V0IGJ1ZmZlciBwdHIgKi8NCisgIH0NCisNCisgIC8qIFJlYWQgbmV4dCBzYW1wbGUgKi8NCisgIHBQU1ROQ2hlY2stPmlsb25nW3BQU1ROQ2hlY2stPmNvdW50XSAgPSBSZWFkUkFNKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSTMyMThYX1JBTV9NQURDX0lMT05HKTsNCisgIGlmKHBQU1ROQ2hlY2stPmlsb25nW3BQU1ROQ2hlY2stPmNvdW50XSAmIDB4MTAwMDAwMDBMKQ0KKyAgew0KKyAgICBwUFNUTkNoZWNrLT5pbG9uZ1twUFNUTkNoZWNrLT5jb3VudF0gfD0gMHhmMDAwMDAwMEw7DQorICB9DQorICBwUFNUTkNoZWNrLT5pbG9uZ1twUFNUTkNoZWNrLT5jb3VudF0gLz0gU0NBTEVfSV9NQURDOw0KKw0KKyAgLyogTW9uaXRvciBtYWduaXR1ZGUgb25seSAqLw0KKyAgaWYocFBTVE5DaGVjay0+aWxvbmdbcFBTVE5DaGVjay0+Y291bnRdIDwgMCkNCisgIHsNCisgICAgcFBTVE5DaGVjay0+aWxvbmdbcFBTVE5DaGVjay0+Y291bnRdID0gLXBQU1ROQ2hlY2stPmlsb25nW3BQU1ROQ2hlY2stPmNvdW50XTsNCisgIH0NCisNCisgIC8qIFF1aWNrbHkgdGVzdCBmb3Igc2luZ2xlIG1lYXN1cmVtZW50IHZpb2xhdGlvbiAqLw0KKyAgaWYocFBTVE5DaGVjay0+aWxvbmdbcFBTVE5DaGVjay0+Y291bnRdID4gcFBTVE5DaGVjay0+c2luZ2xlVGhyZXNoKQ0KKyAgew0KKyAgICByZXR1cm4gUkNfUFNUTl9DSEVDS19TSU5HTEVfRkFJTDsgIC8qIGZhaWwgKi8NCisgIH0NCisNCisgIC8qIEF2ZXJhZ2Ugb25jZSBidWZmZXIgaXMgZnVsbCAqLw0KKyAgaWYocFBTVE5DaGVjay0+YnVmZkZ1bGwgPT0gVFJVRSkNCisgIHsNCisgICAgcFBTVE5DaGVjay0+YXZnSWxvbmcgPSAwOw0KKyAgICBmb3IoaT0wOyBpPHBQU1ROQ2hlY2stPnNhbXBsZXM7IGkrKykNCisgICAgew0KKyAgICAgIHBQU1ROQ2hlY2stPmF2Z0lsb25nICs9IHBQU1ROQ2hlY2stPmlsb25nW2ldOw0KKyAgICB9DQorICAgIHBQU1ROQ2hlY2stPmF2Z0lsb25nIC89IHBQU1ROQ2hlY2stPnNhbXBsZXM7DQorDQorICAgIGlmKHBQU1ROQ2hlY2stPmF2Z0lsb25nID4gcFBTVE5DaGVjay0+YXZnVGhyZXNoKQ0KKyAgICB7DQorICAgICAgLyogcmVpbml0IG9iaiBhbmQgcmV0dXJuIGZhaWwgKi8NCisgICAgICBwUFNUTkNoZWNrLT5jb3VudCA9IDA7DQorICAgICAgcFBTVE5DaGVjay0+YnVmZkZ1bGwgPSBGQUxTRTsNCisgICAgICByZXR1cm4gUkNfUFNUTl9DSEVDS19BVkdfRkFJTDsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICBwUFNUTkNoZWNrLT5jb3VudCsrOw0KKyAgICAgIHJldHVybiBSQ19OT05FOw0KKyAgICB9DQorICB9DQorICBlbHNlDQorICB7DQorICAgIHBQU1ROQ2hlY2stPmNvdW50Kys7DQorICAgIHJldHVybiBSQ19OT05FOw0KKyAgfQ0KK30NCisNCisjaWZkZWYgUFNUTl9ERVRfRU5BQkxFDQorLyoNCisqKiBGdW5jdGlvbjogYWJzX2ludDMyDQorKioNCisqKiBEZXNjcmlwdGlvbjoNCisqKiBhYnMgaW1wbGVtZW50YXRpb24gZm9yIGludDMyIHR5cGUNCisqLw0KK3N0YXRpYyBpbnQzMiBhYnNfaW50MzIoaW50MzIgYSkNCit7DQorICBpZihhIDwgMCkNCisgIHsNCisgICAgcmV0dXJuIC0xKmE7DQorICB9DQorICByZXR1cm4gYTsNCit9DQorDQorLyoNCisqKiBGdW5jdGlvbjogU2kzMjE4eF9EaWZmUFNUTkNoZWNrDQorKioNCisqKiBEZXNjcmlwdGlvbjoNCisqKiBNb25pdG9yIGZvciBleGNlc3NpdmUgbG9uZ2l0dWRpbmFsIGN1cnJlbnQsIHdoaWNoDQorKiogd291bGQgYmUgcHJlc2VudCBpZiBhIGxpdmUgcHN0biBsaW5lIHdhcyBjb25uZWN0ZWQNCisqKiB0byB0aGUgcG9ydC4NCisqKg0KKyoqIFJldHVybnM6DQorKiogUkNfTk9ORSAgICAgICAgICAgICAtIHRlc3QgaW4gcHJvZ3Jlc3MNCisqKiBSQ19DT01QTEVURV9OT19FUlIgIC0gdGVzdCBjb21wbGV0ZSwgbm8gYWxhcm1zIG9yIGVycm9ycw0KKyoqIFJDX1BPV0VSX0FMQVJNX0hWSUMgLSB0ZXN0IGludGVycnVwdGVkIGJ5IEhWSUMgcG93ZXIgYWxhcm0NCisqKiBSQ18NCisqKg0KKyovDQorDQoraW50IFNpMzIxOHhfRGlmZlBTVE5DaGVjayAocHJvc2xpY0NoYW5UeXBlICpwUHJvc2xpYywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9zbGljRGlmZlBTVE5DaGVja09ialR5cGUgKnBQU1ROQ2hlY2spDQorew0KKyAgdUludDggbG9vcF9zdGF0dXM7DQorICBpbnQgaTsNCisNCisgIGlmKHBQcm9zbGljLT5jaGFubmVsVHlwZSAhPSBQUk9TTElDKQ0KKyAgew0KKyAgICByZXR1cm4gUkNfQ0hBTk5FTF9UWVBFX0VSUjsgICAgLyogSWdub3JlIERBQSBjaGFubmVscyAqLw0KKyAgfQ0KKw0KKw0KKyAgc3dpdGNoKHBQU1ROQ2hlY2stPnBTdGF0ZS5zdGFnZSkNCisgIHsNCisgICAgY2FzZSAwOg0KKyAgICAgIC8qIE9wdGlvbmFsIE9QRU4gZm9yZWlnbiB2b2x0YWdlIG1lYXN1cmVtZW50IC0gb25seSBleGVjdXRlIGlmIExDUyA9IDAgKi8NCisgICAgICAvKiBEaXNhYmxlIGxvdyBwb3dlciBtb2RlICovDQorICAgICAgcFBTVE5DaGVjay0+ZW5oYW5jZVJlZ1NhdmUgPSBSZWFkUmVnKHBQcm9IVyxwUHJvc2xpYy0+Y2hhbm5lbCwgUFJPU0xJQ19SRUdfRU5IQU5DRSk7DQorICAgICAgV3JpdGVSZWcocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLCBQUk9TTElDX1JFR19FTkhBTkNFLA0KKyAgICAgICAgICAgICAgIHBQU1ROQ2hlY2stPmVuaGFuY2VSZWdTYXZlJjB4MDcpOyAvKiBEaXNhYmxlIHBvd2Vyc2F2ZSAqLw0KKyAgICAgIHBQU1ROQ2hlY2stPnZkaWZmMV9hdmcgPSAwOw0KKyAgICAgIHBQU1ROQ2hlY2stPnZkaWZmMl9hdmcgPSAwOw0KKyAgICAgIHBQU1ROQ2hlY2stPmlsb29wMV9hdmcgPSAwOw0KKyAgICAgIHBQU1ROQ2hlY2stPmlsb29wMl9hdmcgPSAwOw0KKyAgICAgIHBQU1ROQ2hlY2stPnJldHVybl9zdGF0dXMgPSBSQ19DT01QTEVURV9OT19FUlI7DQorICAgICAgLyogRG8gT1BFTiBzdGF0ZSBoYXphcmRvdXMgdm9sdGFnZSBtZWFzdXJlbWVudCBpZiBlbmFibGVkIGFuZCBPTkhPT0sgKi8NCisgICAgICBTaTMyMTh4X1JlYWRIb29rU3RhdHVzKHBQcm9zbGljLCZsb29wX3N0YXR1cyk7DQorICAgICAgaWYoKGxvb3Bfc3RhdHVzID09IFBST1NMSUNfT05IT09LKSYmKHBQU1ROQ2hlY2stPmZlbWZfZW5hYmxlID09IDEpKQ0KKyAgICAgIHsNCisgICAgICAgIHBQU1ROQ2hlY2stPnBTdGF0ZS5zdGFnZSsrOw0KKyAgICAgIH0NCisgICAgICBlbHNlDQorICAgICAgew0KKyAgICAgICAgcFBTVE5DaGVjay0+cFN0YXRlLnN0YWdlID0gMTA7DQorICAgICAgfQ0KKw0KKyAgICAgIHJldHVybiBSQ19OT05FOw0KKw0KKyAgICBjYXNlIDE6DQorICAgICAgLyogQ2hhbmdlIGxpbmVmZWVkIHRvIE9QRU4gc3RhdGUgZm9yIEhBWlYgbWVhc3VyZW1lbnQsIHNldHVwIGNvYXJzZSBzZW5zb3JzICovDQorICAgICAgcFBTVE5DaGVjay0+bGZzdGF0ZV9lbnRyeSA9IFJlYWRSZWcocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLCBQUk9TTElDX1JFR19MSU5FRkVFRCk7DQorICAgICAgUHJvU0xJQ19TZXRMaW5lZmVlZFN0YXR1cyhwUHJvc2xpYyxMRl9PUEVOKTsNCisgICAgICBwUFNUTkNoZWNrLT5wU3RhdGUuc3RhZ2UrKzsNCisgICAgICByZXR1cm4gUkNfTk9ORTsNCisNCisgICAgY2FzZSAyOg0KKyAgICAgIC8qIFNldHRsZSAqLw0KKyAgICAgIFByb1NMSUNfUFNUTl9kZWxheV9wb2xsKCYocFBTVE5DaGVjay0+cFN0YXRlKSwgUFNUTl9ERVRfT1BFTl9GRU1GX1NFVFRMRSk7DQorICAgICAgcmV0dXJuIFJDX05PTkU7DQorDQorICAgIGNhc2UgMzoNCisgICAgICAvKiBNZWFzdXJlIEhBWlYgKi8NCisgICAgICBwUFNUTkNoZWNrLT52ZGlmZl9vcGVuID0gU2kzMjE4eF9SZWFkTUFEQ1NjYWxlZChwUHJvc2xpYyxTSTMyMThYX1JBTV9WRElGRl9DT0FSU0UsMCk7DQorICAgICAgREVCVUdfUFJJTlQocFByb3NsaWMsICIlc0RpZmYgUFNUTiA6IFZvcGVuID0gJWQgbVZcbiIsIExPR1BSSU5UX1BSRUZJWCwNCisgICAgICAgICAgICAgICAgICBwUFNUTkNoZWNrLT52ZGlmZl9vcGVuKTsNCisNCisgICAgICAvKiBTdG9wIFBTVE4gY2hlY2sgaWYgZGlmZmVyZW50aWFsIHZvbHRhZ2UgPiBtYXhfZmVtZl92b3BlbiBwcmVzZW50ICovDQorICAgICAgaWYoYWJzX2ludDMyKHBQU1ROQ2hlY2stPnZkaWZmX29wZW4pID4gcFBTVE5DaGVjay0+bWF4X2ZlbWZfdm9wZW4pDQorICAgICAgew0KKyAgICAgICAgcFBTVE5DaGVjay0+cFN0YXRlLnN0YWdlID0gNzA7DQorICAgICAgICBwUFNUTkNoZWNrLT5yZXR1cm5fc3RhdHVzID0gUkNfUFNUTl9PUEVOX0ZFTUY7DQorICAgICAgfQ0KKyAgICAgIGVsc2UNCisgICAgICB7DQorICAgICAgICBwUFNUTkNoZWNrLT5wU3RhdGUuc3RhZ2UgPSAxMDsNCisgICAgICB9DQorICAgICAgcmV0dXJuIDA7DQorDQorICAgIGNhc2UgMTA6DQorICAgICAgLyogTG9hZCBmaXJzdCBEQyBmZWVkIHByZXNldCAqLw0KKyAgICAgIFByb1NMSUNfRENGZWVkU2V0dXAocFByb3NsaWMscFBTVE5DaGVjay0+ZGNmUHJlc2V0MSk7DQorICAgICAgUHJvU0xJQ19TZXRMaW5lZmVlZFN0YXR1cyhwUHJvc2xpYyxMRl9GV0RfQUNUSVZFKTsNCisgICAgICBwUFNUTkNoZWNrLT5wU3RhdGUuc3RhZ2UrKzsNCisgICAgICByZXR1cm4gUkNfTk9ORTsNCisNCisgICAgY2FzZSAxMToNCisgICAgICAvKiBTZXR0bGUgKi8NCisgICAgICBQcm9TTElDX1BTVE5fZGVsYXlfcG9sbCgmKHBQU1ROQ2hlY2stPnBTdGF0ZSksIFBTVE5fREVUX0RJRkZfSVYxX1NFVFRMRSk7DQorICAgICAgcmV0dXJuIFJDX05PTkU7DQorDQorICAgIGNhc2UgMTI6DQorICAgICAgLyogTWVhc3VyZSBWRElGRiBhbmQgSUxPT1AsIHN3aXRjaCB0byAybmQgRENGRUVEIHNldHVwICovDQorICAgICAgcFBTVE5DaGVjay0+dmRpZmYxW3BQU1ROQ2hlY2stPnBTdGF0ZS5zYW1wbGVJdGVyYXRpb25zXSA9DQorICAgICAgICBTaTMyMTh4X1JlYWRNQURDU2NhbGVkKHBQcm9zbGljLFNJMzIxOFhfUkFNX1ZESUZGX0ZJTFQsMCk7DQorICAgICAgcFBTVE5DaGVjay0+aWxvb3AxW3BQU1ROQ2hlY2stPnBTdGF0ZS5zYW1wbGVJdGVyYXRpb25zXSA9DQorICAgICAgICBTaTMyMTh4X1JlYWRNQURDU2NhbGVkKHBQcm9zbGljLFNJMzIxOFhfUkFNX01BRENfSUxPT1AsMCk7DQorI2lmZGVmIEVOQUJMRV9ERUJVRw0KKyAgICAgIGlmICggREVCVUdfRU5BQkxFRChwUHJvc2xpYykgKQ0KKyAgICAgIHsNCisgICAgICAgIExPR1BSSU5UKCIlc0RpZmYgUFNUTjogVmRpZmYxWyVkXSA9ICVkIG1WXG4iLCBMT0dQUklOVF9QUkVGSVgsDQorICAgICAgICAgICAgICAgICBwUFNUTkNoZWNrLT5wU3RhdGUuc2FtcGxlSXRlcmF0aW9ucywNCisgICAgICAgICAgICAgICAgIHBQU1ROQ2hlY2stPnZkaWZmMVtwUFNUTkNoZWNrLT5wU3RhdGUuc2FtcGxlSXRlcmF0aW9uc10pOw0KKyAgICAgICAgTE9HUFJJTlQoIiVzRGlmZiBQU1ROOiBJbG9vcDFbJWRdID0gJWQgdUFcbiIsIExPR1BSSU5UX1BSRUZJWCwNCisgICAgICAgICAgICAgICAgIHBQU1ROQ2hlY2stPnBTdGF0ZS5zYW1wbGVJdGVyYXRpb25zLA0KKyAgICAgICAgICAgICAgICAgcFBTVE5DaGVjay0+aWxvb3AxW3BQU1ROQ2hlY2stPnBTdGF0ZS5zYW1wbGVJdGVyYXRpb25zXSk7DQorICAgICAgfQ0KKyNlbmRpZg0KKyAgICAgIHBQU1ROQ2hlY2stPnBTdGF0ZS5zYW1wbGVJdGVyYXRpb25zKys7DQorICAgICAgaWYocFBTVE5DaGVjay0+cFN0YXRlLnNhbXBsZUl0ZXJhdGlvbnMgPj0gcFBTVE5DaGVjay0+c2FtcGxlcykNCisgICAgICB7DQorICAgICAgICBQcm9TTElDX0RDRmVlZFNldHVwKHBQcm9zbGljLHBQU1ROQ2hlY2stPmRjZlByZXNldDIpOw0KKyAgICAgICAgcFBTVE5DaGVjay0+cFN0YXRlLnN0YWdlKys7DQorICAgICAgICBwUFNUTkNoZWNrLT5wU3RhdGUuc2FtcGxlSXRlcmF0aW9ucyA9IDA7DQorICAgICAgfQ0KKyAgICAgIHJldHVybiBSQ19OT05FOw0KKw0KKyAgICBjYXNlIDEzOg0KKyAgICAgIC8qIFNldHRsZSBmZWVkIDUwMG1zICovDQorICAgICAgUHJvU0xJQ19QU1ROX2RlbGF5X3BvbGwoJihwUFNUTkNoZWNrLT5wU3RhdGUpLCBQU1ROX0RFVF9ESUZGX0lWMl9TRVRUTEUpOw0KKyAgICAgIHJldHVybiBSQ19OT05FOw0KKw0KKyAgICBjYXNlIDE0Og0KKyAgICAgIC8qIE1lYXN1cmUgVkRJRkYgYW5kIElMT09QKi8NCisgICAgICBwUFNUTkNoZWNrLT52ZGlmZjJbcFBTVE5DaGVjay0+cFN0YXRlLnNhbXBsZUl0ZXJhdGlvbnNdID0NCisgICAgICAgIFNpMzIxOHhfUmVhZE1BRENTY2FsZWQocFByb3NsaWMsU0kzMjE4WF9SQU1fVkRJRkZfRklMVCwwKTsNCisgICAgICBwUFNUTkNoZWNrLT5pbG9vcDJbcFBTVE5DaGVjay0+cFN0YXRlLnNhbXBsZUl0ZXJhdGlvbnNdID0NCisgICAgICAgIFNpMzIxOHhfUmVhZE1BRENTY2FsZWQocFByb3NsaWMsU0kzMjE4WF9SQU1fTUFEQ19JTE9PUCwwKTsNCisjaWZkZWYgRU5BQkxFX0RFQlVHDQorICAgICAgaWYgKCBERUJVR19FTkFCTEVEKHBQcm9zbGljKSApDQorICAgICAgew0KKyAgICAgICAgTE9HUFJJTlQoIiVzRGlmZiBQU1ROOiBWZGlmZjJbJWRdID0gJWQgbVZcbiIsIExPR1BSSU5UX1BSRUZJWCwNCisgICAgICAgICAgICAgICAgIHBQU1ROQ2hlY2stPnBTdGF0ZS5zYW1wbGVJdGVyYXRpb25zLA0KKyAgICAgICAgICAgICAgICAgcFBTVE5DaGVjay0+dmRpZmYyW3BQU1ROQ2hlY2stPnBTdGF0ZS5zYW1wbGVJdGVyYXRpb25zXSk7DQorICAgICAgICBMT0dQUklOVCgiJXNEaWZmIFBTVE46IElsb29wMlslZF0gPSAlZCB1QVxuIiwgTE9HUFJJTlRfUFJFRklYLA0KKyAgICAgICAgICAgICAgICAgcFBTVE5DaGVjay0+cFN0YXRlLnNhbXBsZUl0ZXJhdGlvbnMsDQorICAgICAgICAgICAgICAgICBwUFNUTkNoZWNrLT5pbG9vcDJbcFBTVE5DaGVjay0+cFN0YXRlLnNhbXBsZUl0ZXJhdGlvbnNdKTsNCisgICAgICB9DQorI2VuZGlmDQorICAgICAgcFBTVE5DaGVjay0+cFN0YXRlLnNhbXBsZUl0ZXJhdGlvbnMrKzsNCisgICAgICBpZihwUFNUTkNoZWNrLT5wU3RhdGUuc2FtcGxlSXRlcmF0aW9ucyA+PSBwUFNUTkNoZWNrLT5zYW1wbGVzKQ0KKyAgICAgIHsNCisgICAgICAgIC8qIENvbXB1dGUgYXZlcmFnZXMgKi8NCisgICAgICAgIGZvciAoaT0wOyBpPHBQU1ROQ2hlY2stPnNhbXBsZXM7IGkrKykNCisgICAgICAgIHsNCisgICAgICAgICAgcFBTVE5DaGVjay0+dmRpZmYxX2F2ZyArPSBwUFNUTkNoZWNrLT52ZGlmZjFbaV07DQorICAgICAgICAgIHBQU1ROQ2hlY2stPmlsb29wMV9hdmcgKz0gcFBTVE5DaGVjay0+aWxvb3AxW2ldOw0KKyAgICAgICAgICBwUFNUTkNoZWNrLT52ZGlmZjJfYXZnICs9IHBQU1ROQ2hlY2stPnZkaWZmMltpXTsNCisgICAgICAgICAgcFBTVE5DaGVjay0+aWxvb3AyX2F2ZyArPSBwUFNUTkNoZWNrLT5pbG9vcDJbaV07DQorICAgICAgICB9DQorDQorICAgICAgICBwUFNUTkNoZWNrLT52ZGlmZjFfYXZnIC89IHBQU1ROQ2hlY2stPnNhbXBsZXM7DQorICAgICAgICBwUFNUTkNoZWNrLT5pbG9vcDFfYXZnIC89IHBQU1ROQ2hlY2stPnNhbXBsZXM7DQorICAgICAgICBwUFNUTkNoZWNrLT52ZGlmZjJfYXZnIC89IHBQU1ROQ2hlY2stPnNhbXBsZXM7DQorICAgICAgICBwUFNUTkNoZWNrLT5pbG9vcDJfYXZnIC89IHBQU1ROQ2hlY2stPnNhbXBsZXM7DQorDQorICAgICAgICAvKiBGb3JjZSBzbWFsbCAocHJvYmFibHkgb2Zmc2V0KSBjdXJyZW50cyB0byBtaW5pbXVtIHZhbHVlICovDQorICAgICAgICBpZihhYnNfaW50MzIocFBTVE5DaGVjay0+aWxvb3AxX2F2ZykgPCBQU1ROX0RFVF9NSU5fSUxPT1ApDQorICAgICAgICB7DQorICAgICAgICAgIHBQU1ROQ2hlY2stPmlsb29wMV9hdmcgPSBQU1ROX0RFVF9NSU5fSUxPT1A7DQorICAgICAgICB9DQorICAgICAgICBpZihhYnNfaW50MzIocFBTVE5DaGVjay0+aWxvb3AyX2F2ZykgPCBQU1ROX0RFVF9NSU5fSUxPT1ApDQorICAgICAgICB7DQorICAgICAgICAgIHBQU1ROQ2hlY2stPmlsb29wMl9hdmcgPSBQU1ROX0RFVF9NSU5fSUxPT1A7DQorICAgICAgICB9DQorDQorICAgICAgICAvKiBDYWxjdWxhdGUgbWVhc3VyZWQgbG9vcCBpbXBlZGFuY2UgKi8NCisgICAgICAgIHBQU1ROQ2hlY2stPnJsMSA9IGFic19pbnQzMigoDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwUFNUTkNoZWNrLT52ZGlmZjFfYXZnKjEwMDBMKS9wUFNUTkNoZWNrLT5pbG9vcDFfYXZnKTsNCisgICAgICAgIHBQU1ROQ2hlY2stPnJsMiA9IGFic19pbnQzMigoDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwUFNUTkNoZWNrLT52ZGlmZjJfYXZnKjEwMDBMKS9wUFNUTkNoZWNrLT5pbG9vcDJfYXZnKTsNCisNCisgICAgICAgIC8qIEZvcmNlIG5vbi16ZXJvIGxvb3AgcmVzaXN0YW5jZSAqLw0KKyAgICAgICAgaWYocFBTVE5DaGVjay0+cmwxID09IDApDQorICAgICAgICB7DQorICAgICAgICAgIHBQU1ROQ2hlY2stPnJsMSA9IDE7DQorICAgICAgICB9DQorICAgICAgICBpZihwUFNUTkNoZWNrLT5ybDIgPT0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgcFBTVE5DaGVjay0+cmwyID0gMTsNCisgICAgICAgIH0NCisNCisgICAgICAgIC8qIFF1YWxpZnkgbG9vcCBpbXBlZGFuY2VzICovDQorICAgICAgICBwUFNUTkNoZWNrLT5ybF9yYXRpbyA9IChwUFNUTkNoZWNrLT5ybDEqMTAwMEwpL3BQU1ROQ2hlY2stPnJsMjsNCisjaWZkZWYgRU5BQkxFX0RFQlVHDQorICAgICAgICBpZiAoIERFQlVHX0VOQUJMRUQocFByb3NsaWMpICkNCisgICAgICAgIHsNCisgICAgICAgICAgY29uc3QgY2hhciBmbXRfc3RyaW5nW10gPSAiJXNEaWZmUFNUTjogJXMgPSAlZCAlc1xuIjsNCisgICAgICAgICAgTE9HUFJJTlQoZm10X3N0cmluZywgTE9HUFJJTlRfUFJFRklYLCAiVkRJRkYxIiwgcFBTVE5DaGVjay0+dmRpZmYxX2F2ZywgIm1WIik7DQorICAgICAgICAgIExPR1BSSU5UKGZtdF9zdHJpbmcsIExPR1BSSU5UX1BSRUZJWCwgIklMT09QMSIscFBTVE5DaGVjay0+aWxvb3AxX2F2ZywgInVBIik7DQorICAgICAgICAgIExPR1BSSU5UKGZtdF9zdHJpbmcsIExPR1BSSU5UX1BSRUZJWCwgIlZESUZGMiIscFBTVE5DaGVjay0+dmRpZmYyX2F2ZywgIm1WIik7DQorICAgICAgICAgIExPR1BSSU5UKGZtdF9zdHJpbmcsIExPR1BSSU5UX1BSRUZJWCwgIklMT09QMiIscFBTVE5DaGVjay0+aWxvb3AyX2F2ZywgInVBIik7DQorICAgICAgICAgIExPR1BSSU5UKGZtdF9zdHJpbmcsIExPR1BSSU5UX1BSRUZJWCwgIlJMMSIscFBTVE5DaGVjay0+cmwxLCAib2htIik7DQorICAgICAgICAgIExPR1BSSU5UKGZtdF9zdHJpbmcsIExPR1BSSU5UX1BSRUZJWCwgIlJMMiIscFBTVE5DaGVjay0+cmwyLCAib2htIik7DQorICAgICAgICAgIExPR1BSSU5UKGZtdF9zdHJpbmcsIExPR1BSSU5UX1BSRUZJWCwgIlJMX1JhdGlvIixwUFNUTkNoZWNrLT5ybF9yYXRpbywgIiAiKTsNCisgICAgICAgIH0NCisjZW5kaWYNCisNCisgICAgICAgIC8qIFJlc3RvcmUgKi8NCisgICAgICAgIHBQU1ROQ2hlY2stPnBTdGF0ZS5zYW1wbGVJdGVyYXRpb25zID0gMDsNCisgICAgICAgIHBQU1ROQ2hlY2stPnBTdGF0ZS5zdGFnZSA9IDcwOw0KKyAgICAgIH0NCisgICAgICByZXR1cm4gUkNfTk9ORTsNCisNCisgICAgY2FzZSA3MDogIC8qIFJlc2V0IHRlc3Qgc3RhdGUsIHJlc3RvcmUgZW50cnkgY29uZGl0aW9ucyAqLw0KKyAgICAgIFByb1NMSUNfRENGZWVkU2V0dXAocFByb3NsaWMscFBTVE5DaGVjay0+ZW50cnlEQ0ZlZWRQcmVzZXQpOw0KKyAgICAgIFByb1NMSUNfU2V0TGluZWZlZWRTdGF0dXMocFByb3NsaWMscFBTVE5DaGVjay0+bGZzdGF0ZV9lbnRyeSk7DQorICAgICAgV3JpdGVSZWcocFByb0hXLHBQcm9zbGljLT5jaGFubmVsLFBST1NMSUNfUkVHX0VOSEFOQ0UsIHBQU1ROQ2hlY2stPmVuaGFuY2VSZWdTYXZlKTsNCisgICAgICBwUFNUTkNoZWNrLT5wU3RhdGUuc3RhZ2UgPSAwOw0KKyAgICAgIHBQU1ROQ2hlY2stPnBTdGF0ZS53YWl0SXRlcmF0aW9ucyA9IDA7DQorICAgICAgcFBTVE5DaGVjay0+cFN0YXRlLnNhbXBsZUl0ZXJhdGlvbnMgPSAwOw0KKyAgICAgIHJldHVybiBwUFNUTkNoZWNrLT5yZXR1cm5fc3RhdHVzOw0KKw0KKyAgfQ0KKyAgcmV0dXJuIFJDX05PTkU7DQorfQ0KKw0KKyNlbmRpZg0KKw0KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL2NvZGVjcy9zaTMyMTh4L3NyYy9zaV92b2ljZS5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvc3JjL3NpX3ZvaWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMwZWUyYwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL2NvZGVjcy9zaTMyMTh4L3NyYy9zaV92b2ljZS5jCkBAIC0wLDAgKzEsNTYzIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIEF1dGhvcihzKToKKyAqIGxhagorICoKKyAqIERpc3RyaWJ1dGVkIGJ5OgorICogU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYworICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBwcm9wcmlldGFyeSBpbmZvcm1hdGlvbi4KKyAqIE5vIGRpc3NlbWluYXRpb24gYWxsb3dlZCB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tCisgKiBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLgorICoKKyAqIEZpbGUgRGVzY3JpcHRpb246CisgKiBUaGlzIGZpbGUgY29udGFpbnMgY29tbW9uIChQcm9TSUMgKyBEQUEpIGZ1bmN0aW9ucy4KKyAqCisgKi8KKworI2luY2x1ZGUgIi4uL2NvbmZpZ19pbmMvc2lfdm9pY2VfZGF0YXR5cGVzLmgiCisjaW5jbHVkZSAiLi4vaW5jL3NpX3ZvaWNlLmgiCisjaW5jbHVkZSAiLi4vY29uZmlnX2luYy9wcm9zbGljX2FwaV9jb25maWcuaCIKKworI2lmZGVmIEVOQUJMRV9ERUJVRworI2RlZmluZSBMT0dQUklOVF9QUkVGSVggIlNpVm9pY2U6ICIKKyNlbmRpZgorCisjaWZkZWYgU0kzMjE3WAorI2luY2x1ZGUgInNpMzIxN3guaCIKKyNpbmNsdWRlICJzaTMyMTd4X2ludGYuaCIKKyNlbmRpZgorCisjaWZkZWYgU0kzMjE4WAorI2luY2x1ZGUgIi4uL2luYy9zaTMyMTh4LmgiCisjaW5jbHVkZSAiLi4vaW5jL3NpMzIxOHhfaW50Zi5oIgorI2VuZGlmCisKKyNpZmRlZiBTSTMyMTlYCisjaW5jbHVkZSAic2kzMjE5eC5oIgorI2luY2x1ZGUgInNpMzIxOXhfaW50Zi5oIgorI2VuZGlmCisKKyNpZmRlZiBTSTMyMjZYCisjaW5jbHVkZSAic2kzMjI2eC5oIgorI2luY2x1ZGUgInNpMzIyNnhfaW50Zi5oIgorI2VuZGlmCisKKyNpZmRlZiBTSTMyMjhYCisjaW5jbHVkZSAic2kzMjI4eC5oIgorI2luY2x1ZGUgInNpMzIyOHhfaW50Zi5oIgorI2VuZGlmCisKKyNkZWZpbmUgcEN0cmwoWCkgICAgICAgICAgIChYKS0+ZGV2aWNlSWQtPmN0cmxJbnRlcmZhY2UKKyNkZWZpbmUgcFByb0hXKFgpICAgICAgICAgIHBDdHJsKChYKSktPmhDdHJsCisjZGVmaW5lIFJlYWRSZWcoUENIQU4sIENIQU5ORUwsIFJFR0FERFIpIChQQ0hBTiktPmRldmljZUlkLT5jdHJsSW50ZXJmYWNlLT5SZWFkUmVnaXN0ZXJfZnB0cihwUHJvSFcoUENIQU4pLCAoQ0hBTk5FTCksIChSRUdBRERSKSkKKyNkZWZpbmUgV3JpdGVSZWcoUENIQU4sIENIQU5ORUwsIFJFR0FERFIsIFJFR0RBVEEpIChQQ0hBTiktPmRldmljZUlkLT5jdHJsSW50ZXJmYWNlLT5Xcml0ZVJlZ2lzdGVyX2ZwdHIocFByb0hXKFBDSEFOKSwgKENIQU5ORUwpLCAoUkVHQUREUiksIChSRUdEQVRBKSkKKworLyoKKyoqIENvbnRyb2wgb2JqZWN0IGNvbnN0cnVjdG9yL2Rlc3RydWN0b3IKKyovCitpbnQgU2lWb2ljZV9jcmVhdGVDb250cm9sSW50ZXJmYWNlcyAoU2lWb2ljZUNvbnRyb2xJbnRlcmZhY2VUeXBlICoqcEN0cmxJbnRmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVJbnQzMiBpbnRlcmZhY2VfY291bnQpCit7CisgIFRSQUNFUFJJTlRfTk9DSEFOKCJjb3VudCA9ICVsdVxuIiwgKHVuc2lnbmVkIGxvbmcpaW50ZXJmYWNlX2NvdW50KTsKKyNpZm5kZWYgRElTQUJMRV9NQUxMT0MKKyAgKnBDdHJsSW50ZiA9IFNJVk9JQ0VfQ0FMTE9DKHNpemVvZihTaVZvaWNlQ29udHJvbEludGVyZmFjZVR5cGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlX2NvdW50KTsKKyAgaWYoKnBDdHJsSW50ZiA9PSBOVUxMKQorICB7CisjaWZkZWYgRU5BQkxFX0RFQlVHCisgICAgTE9HUFJJTlQoIiVzJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkiLCBMT0dQUklOVF9QUkVGSVgsIF9fRlVOQ1RJT05fXyk7CisjZW5kaWYKKyAgICByZXR1cm4gUkNfTk9fTUVNOworICB9CisKKyAgcmV0dXJuIFJDX05PTkU7CisjZWxzZQorICBTSUxBQlNfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihwQ3RybEludGYpOworICBTSUxBQlNfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihpbnRlcmZhY2VfY291bnQpOworICByZXR1cm4gUkNfVU5TVVBQT1JURURfRkVBVFVSRTsKKyNlbmRpZgorfQorCitpbnQgU2lWb2ljZV9kZXN0cm95Q29udHJvbEludGVyZmFjZXMgKCBTaVZvaWNlQ29udHJvbEludGVyZmFjZVR5cGUgKipwQ3RybEludGYgKQoreworCisgIFRSQUNFUFJJTlRfTk9DSEFOKCJcbiIsTlVMTCk7CisjaWZuZGVmIERJU0FCTEVfTUFMTE9DCisgIGlmKCBwQ3RybEludGYgJiYgKnBDdHJsSW50ZikKKyAgeworICAgIFNJVk9JQ0VfRlJFRSAoKFNpVm9pY2VDb250cm9sSW50ZXJmYWNlVHlwZSAqKSpwQ3RybEludGYpOworICAgICpwQ3RybEludGYgPSBOVUxMOworICB9CisgIHJldHVybiBSQ19OT05FOworI2Vsc2UKKyAgU0lMQUJTX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIocEN0cmxJbnRmKTsKKyAgcmV0dXJuIFJDX1VOU1VQUE9SVEVEX0ZFQVRVUkU7CisjZW5kaWYKK30KKworLyoKKyoqIERldmljZSBvYmplY3QgY29uc3RydWN0b3IvZGVzdHJ1Y3RvcgorKi8KK2ludCBTaVZvaWNlX2NyZWF0ZURldmljZXMgKFNpVm9pY2VEZXZpY2VUeXBlICoqcERldmljZSwgdUludDMyIGRldmljZV9jb3VudCkKK3sKKworICBUUkFDRVBSSU5UX05PQ0hBTigiXG4iLE5VTEwpOworI2lmbmRlZiBESVNBQkxFX01BTExPQworICAqcERldmljZSA9IFNJVk9JQ0VfQ0FMTE9DIChzaXplb2YoU2lWb2ljZURldmljZVR5cGUpLCBkZXZpY2VfY291bnQpOworCisgIGlmKCpwRGV2aWNlID09IE5VTEwpCisgIHsKKyNpZmRlZiBFTkFCTEVfREVCVUcKKyAgICBMT0dQUklOVCgiJXMlczogZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSIsIExPR1BSSU5UX1BSRUZJWCwgX19GVU5DVElPTl9fKTsKKyNlbmRpZgorICAgIHJldHVybiBSQ19OT19NRU07CisgIH0KKyAgcmV0dXJuIFJDX05PTkU7CisjZWxzZQorICBTSUxBQlNfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihwRGV2aWNlKTsKKyAgU0lMQUJTX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIoZGV2aWNlX2NvdW50KTsKKyAgcmV0dXJuIFJDX1VOU1VQUE9SVEVEX0ZFQVRVUkU7CisjZW5kaWYKK30KKworaW50IFNpVm9pY2VfZGVzdHJveURldmljZXMgKFNpVm9pY2VEZXZpY2VUeXBlICoqcERldmljZSkKK3sKKworICBUUkFDRVBSSU5UX05PQ0hBTigiXG4iLCBOVUxMKTsKKyNpZm5kZWYgRElTQUJMRV9NQUxMT0MKKyAgaWYocERldmljZSAmJiAqcERldmljZSkKKyAgeworICAgIFNJVk9JQ0VfRlJFRSAoKFNpVm9pY2VEZXZpY2VUeXBlICopKnBEZXZpY2UpOworICAgICpwRGV2aWNlID0gTlVMTDsKKyAgfQorICByZXR1cm4gUkNfTk9ORTsKKyNlbHNlCisgIFNJTEFCU19VTlJFRkVSRU5DRURfUEFSQU1FVEVSKHBEZXZpY2UpOworICByZXR1cm4gUkNfVU5TVVBQT1JURURfRkVBVFVSRTsKKyNlbmRpZgorfQorCisvKgorKiogQ2hhbm5lbCBvYmplY3QgY29uc3RydWN0b3IvZGVzdHJ1Y3RvcgorKi8KK2ludCBTaVZvaWNlX2NyZWF0ZUNoYW5uZWxzIChTaVZvaWNlQ2hhblR5cGVfcHRyICpwQ2hhbiwgdUludDMyIGNoYW5uZWxfY291bnQpCit7CisKKyAgVFJBQ0VQUklOVF9OT0NIQU4oImNvdW50ID0gJWx1XG4iLCAodW5zaWduZWQgbG9uZykgY2hhbm5lbF9jb3VudCk7CisjaWZuZGVmIERJU0FCTEVfTUFMTE9DCisgICpwQ2hhbiA9IFNJVk9JQ0VfQ0FMTE9DKHNpemVvZihTaVZvaWNlQ2hhblR5cGUpLGNoYW5uZWxfY291bnQpOworICBpZigqcENoYW4gPT0gTlVMTCkKKyAgeworI2lmZGVmIEVOQUJMRV9ERUJVRworICAgIExPR1BSSU5UKCIlcyVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IiwgTE9HUFJJTlRfUFJFRklYLCBfX0ZVTkNUSU9OX18pOworI2VuZGlmCisgICAgcmV0dXJuIFJDX05PX01FTTsKKyAgfQorICByZXR1cm4gUkNfTk9ORTsKKyNlbHNlCisgIFNJTEFCU19VTlJFRkVSRU5DRURfUEFSQU1FVEVSKHBDaGFuKTsKKyAgU0lMQUJTX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIoY2hhbm5lbF9jb3VudCk7CisgIHJldHVybiBSQ19VTlNVUFBPUlRFRF9GRUFUVVJFOworI2VuZGlmCit9CisKK2ludCBTaVZvaWNlX2Rlc3Ryb3lDaGFubmVscyAoU2lWb2ljZUNoYW5UeXBlX3B0ciAqaFByb3NsaWMpCit7CisKKyAgVFJBQ0VQUklOVF9OT0NIQU4oIlxuIixOVUxMKTsKKyNpZm5kZWYgRElTQUJMRV9NQUxMT0MKKyAgaWYoaFByb3NsaWMgJiYgKmhQcm9zbGljKQorICB7CisgICAgU0lWT0lDRV9GUkVFICgoU2lWb2ljZUNoYW5UeXBlX3B0cikqaFByb3NsaWMpOworICAgICpoUHJvc2xpYyA9IE5VTEw7CisgIH0KKyAgcmV0dXJuIFJDX05PTkU7CisjZWxzZQorICBTSUxBQlNfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihoUHJvc2xpYyk7CisgIHJldHVybiBSQ19VTlNVUFBPUlRFRF9GRUFUVVJFOworI2VuZGlmCit9CisKKy8qCisqKiBIb3N0IGNvbnRyb2wgbGlua2FnZQorKi8KK2ludCBTaVZvaWNlX3NldENvbnRyb2xJbnRlcmZhY2VDdHJsT2JqIChTaVZvaWNlQ29udHJvbEludGVyZmFjZVR5cGUgKnBDdHJsSW50ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpoQ3RybCkKK3sKKyAgVFJBQ0VQUklOVF9OT0NIQU4oIlxuIixOVUxMKTsKKyAgcEN0cmxJbnRmLT5oQ3RybCA9IGhDdHJsOworICByZXR1cm4gUkNfTk9ORTsKK30KKworLyoKKyoqIEhvc3QgcmVzZXQgbGlua2FnZQorKi8KK2ludCBTaVZvaWNlX3NldENvbnRyb2xJbnRlcmZhY2VSZXNldCAoU2lWb2ljZUNvbnRyb2xJbnRlcmZhY2VUeXBlICpwQ3RybEludGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0cmxfUmVzZXRfZnB0ciBSZXNldF9mcHRyKQoreworICBUUkFDRVBSSU5UX05PQ0hBTigiXG4iLE5VTEwpOworICBwQ3RybEludGYtPlJlc2V0X2ZwdHIgPSBSZXNldF9mcHRyOworICByZXR1cm4gUkNfTk9ORTsKK30KKworLyoKKyoqIEhvc3QgcmVnaXN0ZXIvUkFNIHJlYWQvd3JpdGUgbGlua2FnZQorKi8KK2ludCBTaVZvaWNlX3NldENvbnRyb2xJbnRlcmZhY2VXcml0ZVJlZ2lzdGVyIChTaVZvaWNlQ29udHJvbEludGVyZmFjZVR5cGUKKyAgICAqcEN0cmxJbnRmLCBjdHJsX1dyaXRlUmVnaXN0ZXJfZnB0ciBXcml0ZVJlZ2lzdGVyX2ZwdHIpCit7CisgIFRSQUNFUFJJTlRfTk9DSEFOKCJcbiIsTlVMTCk7CisgIHBDdHJsSW50Zi0+V3JpdGVSZWdpc3Rlcl9mcHRyID0gV3JpdGVSZWdpc3Rlcl9mcHRyOworICByZXR1cm4gUkNfTk9ORTsKK30KKworaW50IFNpVm9pY2Vfc2V0Q29udHJvbEludGVyZmFjZVJlYWRSZWdpc3RlciAoU2lWb2ljZUNvbnRyb2xJbnRlcmZhY2VUeXBlCisgICAgKnBDdHJsSW50ZiwgY3RybF9SZWFkUmVnaXN0ZXJfZnB0ciBSZWFkUmVnaXN0ZXJfZnB0cikKK3sKKyAgVFJBQ0VQUklOVF9OT0NIQU4oIlxuIixOVUxMKTsKKyAgcEN0cmxJbnRmLT5SZWFkUmVnaXN0ZXJfZnB0ciA9IFJlYWRSZWdpc3Rlcl9mcHRyOworICByZXR1cm4gUkNfTk9ORTsKK30KKworaW50IFNpVm9pY2Vfc2V0Q29udHJvbEludGVyZmFjZVdyaXRlUkFNIChTaVZvaWNlQ29udHJvbEludGVyZmFjZVR5cGUgKnBDdHJsSW50ZiwKKyAgICBjdHJsX1dyaXRlUkFNX2ZwdHIgV3JpdGVSQU1fZnB0cikKK3sKKyAgVFJBQ0VQUklOVF9OT0NIQU4oIlxuIixOVUxMKTsKKyAgcEN0cmxJbnRmLT5Xcml0ZVJBTV9mcHRyID0gV3JpdGVSQU1fZnB0cjsKKyAgcmV0dXJuIFJDX05PTkU7Cit9CisKK2ludCBTaVZvaWNlX3NldENvbnRyb2xJbnRlcmZhY2VSZWFkUkFNIChTaVZvaWNlQ29udHJvbEludGVyZmFjZVR5cGUgKnBDdHJsSW50ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHJsX1JlYWRSQU1fZnB0ciBSZWFkUkFNX2ZwdHIpCit7CisgIFRSQUNFUFJJTlRfTk9DSEFOKCJcbiIsTlVMTCk7CisgIHBDdHJsSW50Zi0+UmVhZFJBTV9mcHRyID0gUmVhZFJBTV9mcHRyOworICByZXR1cm4gUkNfTk9ORTsKK30KKworLyoKKyoqIEhvc3QgdGltZXIgbGlua2FnZQorKi8KK2ludCBTaVZvaWNlX3NldENvbnRyb2xJbnRlcmZhY2VUaW1lck9iaiAoU2lWb2ljZUNvbnRyb2xJbnRlcmZhY2VUeXBlICpwQ3RybEludGYsCisgICAgdm9pZCAqaFRpbWVyKQoreworICBUUkFDRVBSSU5UX05PQ0hBTigiXG4iLE5VTEwpOworICBwQ3RybEludGYtPmhUaW1lciA9IGhUaW1lcjsKKyAgcmV0dXJuIFJDX05PTkU7Cit9CisKK2ludCBTaVZvaWNlX3NldENvbnRyb2xJbnRlcmZhY2VEZWxheSAoU2lWb2ljZUNvbnRyb2xJbnRlcmZhY2VUeXBlICpwQ3RybEludGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbV9kZWxheV9mcHRyIERlbGF5X2ZwdHIpCit7CisgIFRSQUNFUFJJTlRfTk9DSEFOKCJcbiIsTlVMTCk7CisgIHBDdHJsSW50Zi0+RGVsYXlfZnB0ciA9IERlbGF5X2ZwdHI7CisgIHJldHVybiBSQ19OT05FOworfQorCitpbnQgU2lWb2ljZV9zZXRDb250cm9sSW50ZXJmYWNlU2VtYXBob3JlIChTaVZvaWNlQ29udHJvbEludGVyZmFjZVR5cGUKKyAgICAqcEN0cmxJbnRmLCBjdHJsX1NlbWFwaG9yZV9mcHRyIHNlbWFwaG9yZV9mcHRyKQoreworICBUUkFDRVBSSU5UX05PQ0hBTigiXG4iLE5VTEwpOworICBwQ3RybEludGYtPlNlbWFwaG9yZV9mcHRyID0gc2VtYXBob3JlX2ZwdHI7CisgIHJldHVybiBSQ19OT05FOworfQorCitpbnQgU2lWb2ljZV9zZXRDb250cm9sSW50ZXJmYWNlVGltZUVsYXBzZWQgKFNpVm9pY2VDb250cm9sSW50ZXJmYWNlVHlwZQorICAgICpwQ3RybEludGYsIHN5c3RlbV90aW1lRWxhcHNlZF9mcHRyIHRpbWVFbGFwc2VkX2ZwdHIpCit7CisgIFRSQUNFUFJJTlRfTk9DSEFOKCJcbiIsTlVMTCk7CisgIHBDdHJsSW50Zi0+dGltZUVsYXBzZWRfZnB0ciA9IHRpbWVFbGFwc2VkX2ZwdHI7CisgIHJldHVybiBSQ19OT05FOworfQorCitpbnQgU2lWb2ljZV9zZXRDb250cm9sSW50ZXJmYWNlR2V0VGltZSAoU2lWb2ljZUNvbnRyb2xJbnRlcmZhY2VUeXBlICpwQ3RybEludGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtX2dldFRpbWVfZnB0ciBnZXRUaW1lX2ZwdHIpCit7CisgIFRSQUNFUFJJTlRfTk9DSEFOKCJcbiIsTlVMTCk7CisgIHBDdHJsSW50Zi0+Z2V0VGltZV9mcHRyID0gZ2V0VGltZV9mcHRyOworICByZXR1cm4gUkNfTk9ORTsKK30KKworLyoKKyoqIENoYW5uZWwgb2JqZWN0IGluaXRpYWxpemF0aW9uCisqLworaW50IFNpVm9pY2VfU1dJbml0Q2hhbiAoU2lWb2ljZUNoYW5UeXBlX3B0ciBwQ2hhbixpbnQgY2hhbm5lbCxpbnQgY2hpcFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBTaVZvaWNlRGV2aWNlVHlwZSAqcERldmljZU9iaiwgU2lWb2ljZUNvbnRyb2xJbnRlcmZhY2VUeXBlICpwQ3RybEludGYpCit7CisgIFRSQUNFUFJJTlRfTk9DSEFOKCAiY2hhbm5lbCA9ICVkIGNoaXBUeXBlID0gJWRcbiIsIGNoYW5uZWwsIGNoaXBUeXBlKTsKKyAgcENoYW4tPmNoYW5uZWwgPSAodUludDgpY2hhbm5lbDsKKyAgcENoYW4tPmRldmljZUlkID0gcERldmljZU9iajsKKyAgcENoYW4tPmRldmljZUlkLT5jdHJsSW50ZXJmYWNlID0gcEN0cmxJbnRmOworICBwQ2hhbi0+Y2hhbm5lbEVuYWJsZT0xOworICBwQ2hhbi0+ZXJyb3IgPSBSQ19OT05FOworICBwQ2hhbi0+ZGVidWdNb2RlID0gMDsKKyAgcENoYW4tPmRjZGNfcG9sYXJpdHlfaW52ZXJ0ID0gMDsKKyNpZmRlZiBQUk9TTElDX0JPTV9ERUZBVUxUCisgIHBDaGFuLT5ib21PcHRpb24gPSBQUk9TTElDX0JPTV9ERUZBVUxUOworI2Vsc2UKKyAgcENoYW4tPmJvbU9wdGlvbiA9IDA7CisjZW5kaWYKKworICBzd2l0Y2ggKGNoaXBUeXBlKQorICB7CisgICAgY2FzZSBTSTMyMTdYX1RZUEU6CisgICAgICBwQ2hhbi0+ZGV2aWNlSWQtPmNoaXBUeXBlID0gU0kzMjE3MTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTSTMyMThYX1RZUEU6CisgICAgICBwQ2hhbi0+ZGV2aWNlSWQtPmNoaXBUeXBlID0gU0kzMjE4MDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTSTMyMTlYX1RZUEU6CisgICAgICBwQ2hhbi0+ZGV2aWNlSWQtPmNoaXBUeXBlID0gU0kzMjE5MDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTSTMyMjZYX1RZUEU6CisgICAgICBwQ2hhbi0+ZGV2aWNlSWQtPmNoaXBUeXBlID0gU0kzMjI2MDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTSTMyMjhYX1RZUEU6CisgICAgICBwQ2hhbi0+ZGV2aWNlSWQtPmNoaXBUeXBlID0gU0kzMjI4MDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBTSTMwNTBfVFlQRToKKyAgICAgIHBDaGFuLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPSBTSTMwNTA7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gUkNfVU5TVVBQT1JURURfRkVBVFVSRTsKKyAgfQorICByZXR1cm4gUkNfTk9ORTsKK30KKworLyoKKyoqIFJlc2V0IGNvbnRyb2wKKyovCitpbnQgU2lWb2ljZV9SZXNldCAoU2lWb2ljZUNoYW5UeXBlX3B0ciBwQ2hhbikKK3sKKyAgVFJBQ0VQUklOVF9OT0NIQU4oICJcbiIsIE5VTEwpOworICAvKgorICAqKiBhc3NlcnQgcmVzZXQsIHdhaXQgMjUwbXMsIHJlbGVhc2UgcmVzZXQsIHdhaXQgMjUwbXMKKyAgKi8KKyAgcENoYW4tPmRldmljZUlkLT5jdHJsSW50ZXJmYWNlLT5SZXNldF9mcHRyKAorICAgIHBDaGFuLT5kZXZpY2VJZC0+Y3RybEludGVyZmFjZS0+aEN0cmwsMSk7CisKKyAgcENoYW4tPmRldmljZUlkLT5jdHJsSW50ZXJmYWNlLT5EZWxheV9mcHRyKAorICAgIHBDaGFuLT5kZXZpY2VJZC0+Y3RybEludGVyZmFjZS0+aFRpbWVyLDI1MCk7CisKKyAgcENoYW4tPmRldmljZUlkLT5jdHJsSW50ZXJmYWNlLT5SZXNldF9mcHRyKAorICAgIHBDaGFuLT5kZXZpY2VJZC0+Y3RybEludGVyZmFjZS0+aEN0cmwsMCk7CisKKyAgcENoYW4tPmRldmljZUlkLT5jdHJsSW50ZXJmYWNlLT5EZWxheV9mcHRyKAorICAgIHBDaGFuLT5kZXZpY2VJZC0+Y3RybEludGVyZmFjZS0+aFRpbWVyLDI1MCk7CisKKyAgcmV0dXJuIFJDX05PTkU7Cit9CisKKy8qCisqKiBEZWJ1ZyBNb2RlIENvbnRyb2wKKyovCitpbnQgU2lWb2ljZV9zZXRTV0RlYnVnTW9kZSAoU2lWb2ljZUNoYW5UeXBlX3B0ciBwQ2hhbiwgaW50IGRlYnVnRW4pCit7CisjaWZkZWYgRU5BQkxFX0RFQlVHCisgIFRSQUNFUFJJTlRfTk9DSEFOKCAiZGVidWdFbiAlZFxuIiwgZGVidWdFbik7CisgIHBDaGFuLT5kZWJ1Z01vZGUgPSAoMHhGRSAmIHBDaGFuLT5kZWJ1Z01vZGUpIHwgKGRlYnVnRW4gIT0gMCk7CisjZWxzZQorICBTSUxBQlNfVU5SRUZFUkVOQ0VEX1BBUkFNRVRFUihwQ2hhbik7CisgIFNJTEFCU19VTlJFRkVSRU5DRURfUEFSQU1FVEVSKGRlYnVnRW4pOworI2VuZGlmCisgIHJldHVybiBSQ19OT05FOworfQorCisvKgorKiogVHJhY2UgTW9kZSBDb250cm9sCisqLworaW50IFNpVm9pY2Vfc2V0VHJhY2VNb2RlIChTaVZvaWNlQ2hhblR5cGVfcHRyIHBDaGFuLCBpbnQgdHJhY2VFbikKK3sKKyNpZmRlZiBFTkFCTEVfVFJBQ0VTCisgIFRSQUNFUFJJTlRfTk9DSEFOKCAiZGVidWdFbiAlZFxuIiwgdHJhY2VFbik7CisgIHBDaGFuLT5kZWJ1Z01vZGUgPSAoMHhGRCAmIHBDaGFuLT5kZWJ1Z01vZGUpIHwgKCh0cmFjZUVuICE9IDApPDwxKTsKKyNlbHNlCisgIFNJTEFCU19VTlJFRkVSRU5DRURfUEFSQU1FVEVSKHBDaGFuKTsKKyAgU0lMQUJTX1VOUkVGRVJFTkNFRF9QQVJBTUVURVIodHJhY2VFbik7CisjZW5kaWYKKyAgcmV0dXJuIFJDX05PTkU7Cit9CisKKy8qCisqKiBFcnJvciBzdGF0dXMKKyovCitpbnQgU2lWb2ljZV9nZXRFcnJvckZsYWcgKFNpVm9pY2VDaGFuVHlwZV9wdHIgcENoYW4sIGludCAqZXJyb3IpCit7CisgIFRSQUNFUFJJTlQoIHBDaGFuLCAiXG4iLCBOVUxMKTsKKyAgKmVycm9yID0gcENoYW4tPmVycm9yOworICByZXR1cm4gUkNfTk9ORTsKK30KKworaW50IFNpVm9pY2VfY2xlYXJFcnJvckZsYWcgKFNpVm9pY2VDaGFuVHlwZV9wdHIgcENoYW4pCit7CisgIFRSQUNFUFJJTlQoIHBDaGFuLCAiXG4iLCBOVUxMKTsKKyAgcENoYW4tPmVycm9yID0gUkNfTk9ORTsKKyAgcmV0dXJuIFJDX05PTkU7Cit9CisKKy8qCisqKiBDaGFubmVsIHN0YXR1cworKi8KK2ludCBTaVZvaWNlX3NldENoYW5uZWxFbmFibGUgKFNpVm9pY2VDaGFuVHlwZV9wdHIgcENoYW4sIGludCBjaGFuRW4pCit7CisgIFRSQUNFUFJJTlQoIHBDaGFuLCAiZW5hYmxlID0gJWRcbiIsIGNoYW5Fbik7CisgIHBDaGFuLT5jaGFubmVsRW5hYmxlID0gY2hhbkVuOworICByZXR1cm4gUkNfTk9ORTsKK30KKworaW50IFNpVm9pY2VfZ2V0Q2hhbm5lbEVuYWJsZSAoU2lWb2ljZUNoYW5UeXBlX3B0ciBwQ2hhbiwgaW50ICpjaGFuRW4pCit7CisgIFRSQUNFUFJJTlQoIHBDaGFuLCAiXG4iLCBOVUxMKTsKKyAgKmNoYW5FbiA9IHBDaGFuLT5jaGFubmVsRW5hYmxlOworICByZXR1cm4gUkNfTk9ORTsKK30KKwordUludDggU2lWb2ljZV9SZWFkUmVnKFNpVm9pY2VDaGFuVHlwZV9wdHIgaFByb3NsaWMsdUludDggYWRkcikKK3sKKyAgVFJBQ0VQUklOVCggaFByb3NsaWMsICJhZGRyID0gJXVcbiIsICh1bnNpZ25lZCBpbnQpYWRkcik7CisgIHJldHVybiBSZWFkUmVnKGhQcm9zbGljLCBoUHJvc2xpYy0+Y2hhbm5lbCwgYWRkcik7Cit9CisKK2ludCBTaVZvaWNlX1dyaXRlUmVnKFNpVm9pY2VDaGFuVHlwZV9wdHIgaFByb3NsaWMsdUludDggYWRkcix1SW50OCBkYXRhKQoreworICBUUkFDRVBSSU5UKCBoUHJvc2xpYywgImFkZHIgPSAldSBkYXRhID0gMHglMDJYXG4iLCAodW5zaWduZWQgaW50KWFkZHIsCisgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpIGRhdGEpOworICByZXR1cm4gV3JpdGVSZWcoaFByb3NsaWMsIGhQcm9zbGljLT5jaGFubmVsLCBhZGRyLCBkYXRhKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoU0kzMjE3WCkgfHwgZGVmaW5lZChTSTMyMThYKSB8fCBkZWZpbmVkKFNJMzIxOVgpIHx8IGRlZmluZWQoU0kzMjI2WCkgfHwgZGVmaW5lZChTSTMyMjhYKSAKKyNpbmNsdWRlICIuLi9pbmMvcHJvc2xpYy5oIgorCisvKiBJdGVyYXRlIHRocm91Z2ggdGhlIG51bWJlciBvZiBjaGFubmVscyB0byBkZXRlcm1pbmUgaWYgaXQncyBhIFNMSUMsIERBQSwgb3IgdW5rbm93bi4gUmV2IElEIGFuZCBjaGlwdHlwZSBpcworICogYWxzbyBmaWxsZWQgaW4uCisgKi8KK2ludCBTaVZvaWNlX0lkZW50aWZ5Q2hhbm5lbHMoU2lWb2ljZUNoYW5UeXBlX3B0ciAqcFByb3NsaWMsIGludCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnNsaWNDb3VudCwgaW50ICpkYWFDb3VudCkKK3sKKyAgaW50IGk7CisgIGludCByYyA9IFJDX05PTkU7CisgIFNpVm9pY2VDaGFuVHlwZV9wdHIgY3VycmVudENoYW5uZWw7CisKKyAgVFJBQ0VQUklOVCggKnBQcm9zbGljLCAic2l6ZSA9ICVkXG4iLCBzaXplKTsKKworICBpZihzbGljQ291bnQpCisgIHsKKyAgICAqc2xpY0NvdW50ID0gMDsKKyAgfQorICBpZihkYWFDb3VudCkKKyAgeworICAgICpkYWFDb3VudCA9IDA7CisgIH0KKworICBmb3IoaSA9IDA7IGkgPCBzaXplOyBpKyspCisgIHsKKyAgICBjdXJyZW50Q2hhbm5lbCA9IHBQcm9zbGljW2ldOworICAgIC8qIFNpVm9pY2VfU1dJbml0Q2hhbigpIGZpbGxzIGluIHRoZSBjaGlwVHlwZSBpbml0aWFsbHkgd2l0aCBzb21ldGhpbmcgdGhlIHVzZXIgcHJvdmlkZWQsIGZpbGwgaXQKKyAgICAgKiBpbiB3aXRoIHRoZSBjb3JyZWN0IGluZm8uLiBUaGUgR2V0Q2hpcEluZm8gbWF5IHByb2JlIHJlZ2lzdGVycyB0byBjb21wYXJlIHRoZW0gd2l0aCB0aGVpcgorICAgICAqIGluaXRpYWwgdmFsdWVzLCBzbyB0aGlzIGZ1bmN0aW9uIE1VU1Qgb25seSBiZSBjYWxsZWQgYWZ0ZXIgYSBjaGlwc2V0IHJlc2V0LgorICAgICAqLworI2lmZGVmIFNJMzIxN1gKKyAgICBpZiAoY3VycmVudENoYW5uZWwtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMTcxCisgICAgICAgICYmIGN1cnJlbnRDaGFubmVsLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjE3OSkKKyAgICB7CisgICAgICByYyA9IFNpMzIxN3hfR2V0Q2hpcEluZm8oY3VycmVudENoYW5uZWwpOworICAgIH0KKyNlbmRpZgorCisjaWZkZWYgU0kzMjE4WAorICAgIGlmIChjdXJyZW50Q2hhbm5lbC0+ZGV2aWNlSWQtPmNoaXBUeXBlID49IFNJMzIxODAKKyAgICAgICAgJiYgY3VycmVudENoYW5uZWwtPmRldmljZUlkLT5jaGlwVHlwZSA8PSBTSTMyMTg5KQorICAgIHsKKyAgICAgIHJjID0gU2kzMjE4eF9HZXRDaGlwSW5mbyhjdXJyZW50Q2hhbm5lbCk7CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMTlYCisgICAgaWYgKCBJU19TSTMyMTlYKGN1cnJlbnRDaGFubmVsLT5kZXZpY2VJZCkgKQorICAgIHsKKyAgICAgIHJjID0gU2kzMjE5eF9HZXRDaGlwSW5mbyhjdXJyZW50Q2hhbm5lbCk7CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBTSTMyMjZYCisgICAgaWYgKGN1cnJlbnRDaGFubmVsLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPj0gU0kzMjI2MAorICAgICAgICAmJiBjdXJyZW50Q2hhbm5lbC0+ZGV2aWNlSWQtPmNoaXBUeXBlIDw9IFNJMzIyNjkpCisgICAgeworICAgICAgcmMgPSBTaTMyMjZ4X0dldENoaXBJbmZvKGN1cnJlbnRDaGFubmVsKTsKKyAgICB9CisjZW5kaWYKKworI2lmZGVmIFNJMzIyOFgKKyAgICBpZiAoY3VycmVudENoYW5uZWwtPmRldmljZUlkLT5jaGlwVHlwZSA+PSBTSTMyMjgwCisgICAgICAgICYmIGN1cnJlbnRDaGFubmVsLT5kZXZpY2VJZC0+Y2hpcFR5cGUgPD0gU0kzMjI4OSkKKyAgICB7CisgICAgICByYyA9IFNpMzIyOHhfR2V0Q2hpcEluZm8oY3VycmVudENoYW5uZWwpOworICAgIH0KKyNlbmRpZgorCisgICAgaWYocmMgIT0gUkNfTk9ORSkKKyAgICB7CisgICAgICByZXR1cm4gcmM7CisgICAgfQorCisgICAgY3VycmVudENoYW5uZWwtPmNoYW5uZWxUeXBlID0gUHJvU0xJQ19pZGVudGlmeUNoYW5uZWxUeXBlKGN1cnJlbnRDaGFubmVsKTsKKyAgICBpZihjdXJyZW50Q2hhbm5lbC0+Y2hhbm5lbFR5cGUgPT0gUFJPU0xJQykKKyAgICB7CisgICAgICBpZihzbGljQ291bnQpCisgICAgICB7CisgICAgICAgICgqc2xpY0NvdW50KSsrOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmKGN1cnJlbnRDaGFubmVsLT5jaGFubmVsVHlwZSA9PSBEQUEpCisgICAgeworICAgICAgaWYoZGFhQ291bnQpCisgICAgICB7CisgICAgICAgICgqZGFhQ291bnQpKys7CisgICAgICB9CisgICAgfQorI2lmZGVmIEVOQUJMRV9ERUJVRworICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKmRldl90eXBlID0gIlVOS05PV04iOworICAgICAgaWYoY3VycmVudENoYW5uZWwtPmNoYW5uZWxUeXBlID09IFBST1NMSUMpCisgICAgICB7CisgICAgICAgIGRldl90eXBlID0gIlBST1NMSUMiOworICAgICAgfQorICAgICAgZWxzZSBpZihjdXJyZW50Q2hhbm5lbC0+Y2hhbm5lbFR5cGUgPT0gREFBKQorICAgICAgeworICAgICAgICBkZXZfdHlwZSA9ICJEQUEiOworICAgICAgfQorICAgICAgTE9HUFJJTlQoIiVzQ2hhbm5lbCAlZDogVHlwZSA9ICVzIFJldiA9ICVkXG4iLAorICAgICAgICAgICAgICAgTE9HUFJJTlRfUFJFRklYLCBjdXJyZW50Q2hhbm5lbC0+Y2hhbm5lbCwgZGV2X3R5cGUsCisgICAgICAgICAgICAgICBjdXJyZW50Q2hhbm5lbC0+ZGV2aWNlSWQtPmNoaXBSZXYpOworCisgICAgfQorI2VuZGlmIC8qIEVOQUJMRV9ERUJVRyAqLworICB9CisgIHJldHVybiBSQ19OT05FOworfQorI2VuZGlmCisKKy8qCisqKiBGdW5jdGlvbjogUHJvU0xJQ19WZXJzaW9uCisqKgorKiogRGVzY3JpcHRpb246CisqKiBSZXR1cm4gQVBJIHZlcnNpb24KKyoqCisqKiBSZXR1cm5zOgorKiogc3RyaW5nIG9mIHRoZSBBUEkgcmVsZWFzZS4KKyovCisKK2V4dGVybiBjb25zdCBjaGFyICpTaVZvaWNlQVBJVmVyc2lvbjsKK2NoYXIgKlNpVm9pY2VfVmVyc2lvbigpCit7CisgIHJldHVybiAoY2hhciAqKVNpVm9pY2VBUElWZXJzaW9uOworfQorCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9zcmMvc2lfdm9pY2VfdmVyc2lvbi5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvc3JjL3NpX3ZvaWNlX3ZlcnNpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDRhYWFhCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvc3JjL3NpX3ZvaWNlX3ZlcnNpb24uYwpAQCAtMCwwICsxLDIxIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIGZpbGU6IHNpX3ZvaWNlX3ZlcnNpb24uYworICoKKyAqIERpc3RyaWJ1dGVkIGJ5OiAKKyAqIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgcHJvcHJpZXRhcnkgaW5mb3JtYXRpb24uCSAKKyAqIE5vIGRpc3NlbWluYXRpb24gYWxsb3dlZCB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tCisgKiBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLgorICogCisgKiBUSElTIEZJTEUgSVMgQVVUT0dFTkVSQVRFRCAtIERPIE5PVCBNT0RJRlkKKyAqCisgKi8KKworCisKK2NoYXIgKlNpVm9pY2VBUElWZXJzaW9uID0gIjkuMi4wIjsKKworCisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL2NvZGVjcy9zaTMyMTh4L3NyYy92ZGFhLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9zcmMvdmRhYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNzNjNDQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9zcmMvdmRhYS5jCkBAIC0wLDAgKzEsMTM1MCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBWZGFhICBWb2ljZURBQSBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb24gZmlsZQorICoKKyAqIERpc3RyaWJ1dGVkIGJ5OgorICogU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYworICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBwcm9wcmlldGFyeSBpbmZvcm1hdGlvbi4KKyAqIE5vIGRpc3NlbWluYXRpb24gYWxsb3dlZCB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tCisgKiBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLgorICoKKyAqIEZpbGUgRGVzY3JpcHRpb246CisgKiBUaGlzIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBmaWxlIGZvciB0aGUgbWFpbiBWb2ljZURBQSBBUEkuCisgKgorICovCisKKyNpbmNsdWRlICIuLi9jb25maWdfaW5jL3NpX3ZvaWNlX2RhdGF0eXBlcy5oIgorI2luY2x1ZGUgIi4uL2luYy9zaV92b2ljZV9jdHJsLmgiCisjaW5jbHVkZSAiLi4vaW5jL3NpX3ZvaWNlX3RpbWVyX2ludGYuaCIKKyNpbmNsdWRlICIuLi9pbmMvdmRhYS5oIgorI2luY2x1ZGUgIi4uL2luYy92ZGFhX3JlZ2lzdGVycy5oIgorI2luY2x1ZGUgIi4uL2NvbmZpZ19pbmMvdmRhYV9hcGlfY29uZmlnLmgiCisKKyNkZWZpbmUgV3JpdGVSZWcgICAgICBwVmRhYS0+ZGV2aWNlSWQtPmN0cmxJbnRlcmZhY2UtPldyaXRlUmVnaXN0ZXJfZnB0cgorI2RlZmluZSBSZWFkUmVnICAgICAgICBwVmRhYS0+ZGV2aWNlSWQtPmN0cmxJbnRlcmZhY2UtPlJlYWRSZWdpc3Rlcl9mcHRyCisjZGVmaW5lIHBWZGFhSFcgICAgICAgIHBWZGFhLT5kZXZpY2VJZC0+Y3RybEludGVyZmFjZS0+aEN0cmwKKworI2RlZmluZSBXcml0ZVJlZ1ggICAgICBkZXZpY2VJZC0+Y3RybEludGVyZmFjZS0+V3JpdGVSZWdpc3Rlcl9mcHRyCisjZGVmaW5lIFJlYWRSZWdYICAgICAgZGV2aWNlSWQtPmN0cmxJbnRlcmZhY2UtPlJlYWRSZWdpc3Rlcl9mcHRyCisjZGVmaW5lIHBWZGFhSFdYICAgICAgZGV2aWNlSWQtPmN0cmxJbnRlcmZhY2UtPmhDdHJsCisjZGVmaW5lIExPR1BSSU5UX1BSRUZJWCAiVkRBQTogIgorCisvKgorKiogU3RhdGljIFZEQUEgZHJpdmVyIGZ1bmN0aW9ucworKi8KKworLyoKKyoqIEZ1bmN0aW9uOiBpc1ZlcmlmaWVkREFBCisqKgorKiogRGVzY3JpcHRpb246CisqKiBWZXJpZmllcyBhZGRyZXNzZWQgY2hhbm5lbCBpcyBEQUEKKyoqCisqKiBJbnB1dCBQYXJhbWV0ZXJzOgorKiogcFZkYWE6IHBvaW50ZXIgdG8gU2lWb2ljZUNoYW5UeXBlIG9yIHZkYWFDaGFuVHlwZQorKioKKyoqIFJldHVybjoKKyoqIFZlcmlmaWVkIERBQQorKiogTm90IERBQSAgICAgICAgICBSQ19DSEFOTkVMX1RZUEVfRVJSCisqKgorKi8KKworc3RhdGljIGludCBpc1ZlcmlmaWVkREFBKHZkYWFDaGFuVHlwZSAqcFZkYWEpCit7CisgIHVJbnQ4IGRhdGEgPSBSZWFkUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsTFNJREVfUkVWKTsKKyAgaWYgKCAoZGF0YSAmIDB4NDApID09IDAgKSAvKlRoaXMgYml0IGlzIGFsd2F5cyAxIGZvciBEQUEqLworICB7CisgICAgTE9HUFJJTlQoIiVzREFBIGRldmljZSBub3QgZGV0ZWN0ZWRcbiIsTE9HUFJJTlRfUFJFRklYKTsKKyAgICByZXR1cm4gUkNfQ0hBTk5FTF9UWVBFX0VSUjsKKyAgfQorICBlbHNlCisgIHsKKyAgICAvKiBGb3IgU2kzMDUwLCB0aGUgdmFsdWUgd2lsbCBiZSB6ZXJvIGluaXRpYWxseSAoY2FsbG9jKSwgZm9yIFNpMzIxNzgvOSwgdGhpcyB3aWxsCisgICAgICogYmUgbm9uLXplcm8gKFJldiBCKS4KKyAgICAgKi8KKyAgICBpZihwVmRhYS0+ZGV2aWNlSWQtPmNoaXBSZXYgPT0gMCkKKyAgICB7CisgICAgICAvKiBSZWFkIERldmljZSBJRCBhbmQgc3RvcmUgaXQgKi8KKyAgICAgIC8qIE5PVEU6IGluIGVhcmxpZXIgcmVsZWFzZXMgd2UgYWxzbyByZWFkIHRoZSBsaW5lIHNpZGUgaW5mbyBoZXJlLiAgVGhpcyBpcyBub3cgZG9uZQorICAgICAgICAgVmRhYV9kdXJpbmdQb3dlclVwTGluZXNpZGUgc2luY2UgdGhlIGluZm9ybWF0aW9uIHdlIHJlYWQgd2FzIGFsd2F5cyAwLgorICAgICAgICovCisgICAgICBkYXRhID0gcFZkYWEtPlJlYWRSZWdYKHBWZGFhLT5wVmRhYUhXWCxwVmRhYS0+Y2hhbm5lbCxTWVNfTElORV9ERVZfUkVWKTsKKyAgICAgIHBWZGFhLT5kZXZpY2VJZC0+Y2hpcFJldj0gZGF0YSYweEY7CisjaWZkZWYgRU5BQkxFX0RFQlVHCisgICAgICBMT0dQUklOVCgiJXNDaGlwUmV2ID0gMHgleFxuIiwgTE9HUFJJTlRfUFJFRklYLCBwVmRhYS0+ZGV2aWNlSWQtPmNoaXBSZXYpOworI2VuZGlmCisgICAgfQorICB9CisKKyAgcmV0dXJuIFJDX05PTkU7Cit9CisKKyNpZiAwIC8qIFJlbW92ZWQgZm9yIG5vdyBzaW5jZSBpdCBpc24ndCB1c2VkLCBrZWVwaW5nIGNvZGUgYXMgcmVmZXJlbmNlICovCisvKgorKiogRnVuY3Rpb246IHByb2JlRGFpc3lDaGFpbgorKioKKyoqIERlc2NyaXB0aW9uOgorKiogSWRlbnRpZnkgaG93IG1hbnkgVkRBQSBkZXZpY2VzIGFyZSBpbiBkYWlzeWNoYWluCisqKiBPbmx5IGNhbGxlZCBpZiBjaGFubmVsIDAgaGFzIGJlIHByZXZpb3VzbHkgcXVhbGlmaWVkCisqKiBhcyBhIFZEQUEuCisqKgorKiogSW5wdXQgUGFyYW1ldGVyczoKKyoqIHBWZGFhOiAgICAgICBwb2ludGVyIHRvIFNpVm9pY2VDaGFuVHlwZSBvciB2ZGFhQ2hhblR5cGUKKyoqCisqKiBSZXR1cm46CisqKiBudW1iZXIgb2YgY2hhbm5lbHMgaW4gZGFpc3kgY2hhaW4KKyoqCisqLworCitzdGF0aWMgaW50IHByb2JlRGFpc3lDaGFpbiAodmRhYUNoYW5UeXBlICpwVmRhYSkKK3sKKyAgaW50IGk9MDsKKyAgV3JpdGVSZWcocFZkYWFIVyxCUk9BRENBU1QsUENNUlhfQ05UX0xPLDB4MjMpOyAgICAgICAgLyogQnJvYWRjYXN0ICovCisgIHdoaWxlICgoUmVhZFJlZyhwVmRhYUhXLCh1SW50OClpKyssUENNUlhfQ05UX0xPKSA9PSAweDIzKQorICAgICAgICAgJiYoaTw9MTYpKTsgIC8qIENvdW50IG51bWJlciBvZiBjaGFubmVscyAqLworICByZXR1cm4gaS0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmV0dXJuIG51bWJlciBvZiBjaGFubmVscyAqLworfQorI2VuZGlmCisKKy8qCisqKgorKiogIC0tLS0tLSBWREFBIENPTkZJR1VSQVRJT04gRlVOQ1RJT05TIC0tLS0tCisqKgorKi8KKworLyoKKyoqIEZ1bmN0aW9uOiAgVmRhYV9SaW5nRGV0ZWN0U2V0dXAKKyoqCisqKiBEZXNjcmlwdGlvbjoKKyoqIGNvbmZpZ3VyZSByaW5nIGRldGVjdCBzZXR1cAorKioKKyoqIFJldHVybnM6CisqKgorKi8KKworI2lmbmRlZiBESVNBQkxFX1ZEQUFfUklOR19ERVRFQ1RfU0VUVVAKK2V4dGVybiB2ZGFhX1JpbmdfRGV0ZWN0X0NmZyBWZGFhX1JpbmdfRGV0ZWN0X1ByZXNldHNbXTsKK2ludCBWZGFhX1JpbmdEZXRlY3RTZXR1cCAodmRhYUNoYW5UeXBlICpwVmRhYSxpbnQzMiBwcmVzZXQpCit7CisKKyAgdUludDggcmVnVGVtcCA9IDA7CisgIFRSQUNFUFJJTlQoIHBWZGFhLCAicHJlc2V0ID0gJWRcbiIsICh1bnNpZ25lZCBpbnQpIHByZXNldCk7CisgIGlmKHBWZGFhLT5jaGFubmVsVHlwZSAhPSBEQUEpCisgIHsKKyAgICByZXR1cm4gUkNfSUdOT1JFOworICB9CisKKyAgcmVnVGVtcCA9IFJlYWRSZWcocFZkYWFIVyxwVmRhYS0+Y2hhbm5lbCxDVFJMMikgJiAweGZCOworICByZWdUZW1wIHw9IFZkYWFfUmluZ19EZXRlY3RfUHJlc2V0c1twcmVzZXRdLnJkaTw8MjsKKyAgV3JpdGVSZWcocFZkYWFIVyxwVmRhYS0+Y2hhbm5lbCxDVFJMMixyZWdUZW1wKTsKKworICByZWdUZW1wID0gUmVhZFJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLElOVExfQ1RSTDEpICYgMHhmZTsKKyAgcmVnVGVtcCB8PSBWZGFhX1JpbmdfRGV0ZWN0X1ByZXNldHNbcHJlc2V0XS5ydCYxOworICBXcml0ZVJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLElOVExfQ1RSTDEscmVnVGVtcCk7CisKKyAgcmVnVGVtcCA9IFJlYWRSZWcocFZkYWFIVyxwVmRhYS0+Y2hhbm5lbCxJTlRMX0NUUkwyKSAmIDB4ZWY7CisgIHJlZ1RlbXAgfD0gKChWZGFhX1JpbmdfRGV0ZWN0X1ByZXNldHNbcHJlc2V0XS5ydD4+MSk8PDQpOworICBXcml0ZVJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLElOVExfQ1RSTDIscmVnVGVtcCk7CisKKyAgV3JpdGVSZWcocFZkYWFIVyxwVmRhYS0+Y2hhbm5lbCxJTlRMX0NUUkwzLAorICAgICAgICAgICBWZGFhX1JpbmdfRGV0ZWN0X1ByZXNldHNbcHJlc2V0XS5yZndlPDwxKTsKKworICByZWdUZW1wID0gKFZkYWFfUmluZ19EZXRlY3RfUHJlc2V0c1twcmVzZXRdLnJkbHkmMHgzKSA8PCA2OworICByZWdUZW1wIHw9IFZkYWFfUmluZ19EZXRlY3RfUHJlc2V0c1twcmVzZXRdLnJteCA7CisgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsUk5HX1ZMRF9DVFJMMSxyZWdUZW1wKTsKKworICByZWdUZW1wID0gKFZkYWFfUmluZ19EZXRlY3RfUHJlc2V0c1twcmVzZXRdLnJkbHk+PjIpIDw8IDc7CisgIHJlZ1RlbXAgfD0gVmRhYV9SaW5nX0RldGVjdF9QcmVzZXRzW3ByZXNldF0ucnRvIDw8IDMgOworICByZWdUZW1wIHw9IFZkYWFfUmluZ19EZXRlY3RfUHJlc2V0c1twcmVzZXRdLnJjYyA7CisgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsUk5HX1ZMRF9DVFJMMixyZWdUZW1wKTsKKworICByZWdUZW1wID0gVmRhYV9SaW5nX0RldGVjdF9QcmVzZXRzW3ByZXNldF0ucm5ndiA8PCA3OworICByZWdUZW1wIHw9IFZkYWFfUmluZ19EZXRlY3RfUHJlc2V0c1twcmVzZXRdLnJhcyA7CisgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsUk5HX1ZMRF9DVFJMMyxyZWdUZW1wKTsKKworICByZWdUZW1wID0gVmRhYV9SaW5nX0RldGVjdF9QcmVzZXRzW3ByZXNldF0ucnBvbDw8MTsKKyAgV3JpdGVSZWcocFZkYWFIVyxwVmRhYS0+Y2hhbm5lbCxEQUFfQ1RSTDQscmVnVGVtcCk7CisKKyAgcmV0dXJuIFJDX05PTkU7Cit9CisjZW5kaWYKKworLyoKKyoqIEZ1bmN0aW9uOiAgVmRhYV9UWEF1ZGlvR2FpblNldHVwCisqKgorKiogRGVzY3JpcHRpb246CisqKiBjb25maWd1cmUgdHggYXVkaW8gZ2FpbgorKioKKyoqIFJldHVybnM6CisqKgorKioKKyovCisjaWZuZGVmIERJU0FCTEVfVkRBQV9BVURJT19HQUlOX1NFVFVQCitleHRlcm4gdmRhYV9hdWRpb0dhaW5fQ2ZnIFZkYWFfYXVkaW9HYWluX1ByZXNldHNbXTsKKworaW50IFZkYWFfVFhBdWRpb0dhaW5TZXR1cCAodmRhYUNoYW5UeXBlICpwVmRhYSxpbnQzMiBwcmVzZXQpCit7CisgIHVJbnQ4IHJlZ1RlbXAgPSAwOworICBUUkFDRVBSSU5UKCBwVmRhYSwgInByZXNldCA9ICVkXG4iLCAodW5zaWduZWQgaW50KSBwcmVzZXQpOworCisgIGlmKHBWZGFhLT5jaGFubmVsVHlwZSAhPSBEQUEpCisgIHsKKyAgICByZXR1cm4gUkNfSUdOT1JFOworICB9CisKKyAgaWYoVmRhYV9hdWRpb0dhaW5fUHJlc2V0c1twcmVzZXRdLnhnYTIgPT0gWEdBX0FUVEVOKQorICB7CisgICAgcmVnVGVtcCA9IDB4MTA7CisgIH0KKworICByZWdUZW1wIHw9IFZkYWFfYXVkaW9HYWluX1ByZXNldHNbcHJlc2V0XS5hY2dhaW4yIDsKKyAgV3JpdGVSZWcocFZkYWFIVyxwVmRhYS0+Y2hhbm5lbCxUWF9HTl9DVFJMMixyZWdUZW1wKTsKKworICByZWdUZW1wID0gMDsKKyAgaWYoVmRhYV9hdWRpb0dhaW5fUHJlc2V0c1twcmVzZXRdLnhnYTMgPT0gWEdBX0FUVEVOKQorICB7CisgICAgcmVnVGVtcCA9IDB4MTAgOworICB9CisKKyAgcmVnVGVtcCB8PSBWZGFhX2F1ZGlvR2Fpbl9QcmVzZXRzW3ByZXNldF0uYWNnYWluMyA7CisgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsVFhfR05fQ1RSTDMscmVnVGVtcCk7CisKKyAgaWYoVmRhYV9hdWRpb0dhaW5fUHJlc2V0c1twcmVzZXRdLmNwRW4pCisgIHsKKyAgICBXcml0ZVJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLFRYQ0FMTF9QUk9HX0FUVEVOLAorICAgICAgICAgICAgIFZkYWFfYXVkaW9HYWluX1ByZXNldHNbcHJlc2V0XS5jYWxsUHJvZ3Jlc3MpOworICB9CisKKyAgcmV0dXJuIFJDX05PTkU7Cit9CisjIGVuZGlmCisKKworLyoKKyoqIEZ1bmN0aW9uOiAgVmRhYV9SWEF1ZGlvR2FpblNldHVwCisqKgorKiogRGVzY3JpcHRpb246CisqKiBjb25maWd1cmUgcnggYXVkaW8gZ2FpbgorKioKKyoqIFJldHVybnM6CisqKgorKioKKyovCisjaWZuZGVmIERJU0FCTEVfVkRBQV9BVURJT19HQUlOX1NFVFVQCitleHRlcm4gdmRhYV9hdWRpb0dhaW5fQ2ZnIFZkYWFfYXVkaW9HYWluX1ByZXNldHNbXTsKKworaW50IFZkYWFfUlhBdWRpb0dhaW5TZXR1cCAodmRhYUNoYW5UeXBlICpwVmRhYSxpbnQzMiBwcmVzZXQpCit7CisgIHVJbnQ4IHJlZ1RlbXAgPSAwOworCisgIFRSQUNFUFJJTlQoIHBWZGFhLCAicHJlc2V0ID0gJWRcbiIsICh1bnNpZ25lZCBpbnQpIHByZXNldCk7CisgIGlmKHBWZGFhLT5jaGFubmVsVHlwZSAhPSBEQUEpCisgIHsKKyAgICByZXR1cm4gUkNfSUdOT1JFOworICB9CisKKyAgaWYoVmRhYV9hdWRpb0dhaW5fUHJlc2V0c1twcmVzZXRdLnhnYTIgPT0gWEdBX0FUVEVOKQorICB7CisgICAgcmVnVGVtcCA9IDB4MTA7CisgIH0KKyAgcmVnVGVtcCB8PSBWZGFhX2F1ZGlvR2Fpbl9QcmVzZXRzW3ByZXNldF0uYWNnYWluMiA7CisgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsUlhfR05fQ1RSTDIscmVnVGVtcCk7CisKKyAgcmVnVGVtcCA9IDA7CisgIGlmKFZkYWFfYXVkaW9HYWluX1ByZXNldHNbcHJlc2V0XS54Z2EzID09IFhHQV9BVFRFTikKKyAgeworICAgIHJlZ1RlbXAgPSAweDEwOworICB9CisgIHJlZ1RlbXAgfD0gVmRhYV9hdWRpb0dhaW5fUHJlc2V0c1twcmVzZXRdLmFjZ2FpbjMgOworICBXcml0ZVJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLFJYX0dOX0NUUkwzLHJlZ1RlbXApOworCisgIGlmKFZkYWFfYXVkaW9HYWluX1ByZXNldHNbcHJlc2V0XS5jcEVuKQorICB7CisgICAgV3JpdGVSZWcocFZkYWFIVyxwVmRhYS0+Y2hhbm5lbCxSWENBTExfUFJPR19BVFRFTiwKKyAgICAgICAgICAgICBWZGFhX2F1ZGlvR2Fpbl9QcmVzZXRzW3ByZXNldF0uY2FsbFByb2dyZXNzKTsKKyAgfQorCisgIHJldHVybiBSQ19OT05FOworfQorI2VuZGlmCisKKworLyoKKyoqIEZ1bmN0aW9uOiAgVmRhYV9QQ01TZXR1cAorKioKKyoqIERlc2NyaXB0aW9uOgorKiogY29uZmlndXJlIHBjbSBmb3JtYXQsIGNsb2NraW5nIGFuZCBlZGdlIHBsYWNlbWVudAorKioKKyoqIFJldHVybnM6CisqKgorKioKKyovCisjaWZuZGVmIERJU0FCTEVfVkRBQV9QQ01fU0VUVVAKK2V4dGVybiB2ZGFhX1BDTV9DZmcgVmRhYV9QQ01fUHJlc2V0cyBbXTsKKworaW50IFZkYWFfUENNU2V0dXAgKHZkYWFDaGFuVHlwZSAqcFZkYWEsaW50MzIgcHJlc2V0KQoreworICB1SW50OCByZWdUZW1wID0gMDsKKworICBUUkFDRVBSSU5UKCBwVmRhYSwgInByZXNldCA9ICVkXG4iLCAodW5zaWduZWQgaW50KSBwcmVzZXQpOworICBpZihwVmRhYS0+Y2hhbm5lbFR5cGUgIT0gREFBKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorCisgIHJlZ1RlbXAgPSBSZWFkUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsUENNX1NQSV9DVFJMKSYweGUwOworICByZWdUZW1wIHw9IFZkYWFfUENNX1ByZXNldHNbcHJlc2V0XS5wY21fdHJpOworICByZWdUZW1wIHw9IFZkYWFfUENNX1ByZXNldHNbcHJlc2V0XS5wY21Id3kgPDwgMTsKKyAgcmVnVGVtcCB8PSBWZGFhX1BDTV9QcmVzZXRzW3ByZXNldF0ucGNtRm9ybWF0IDw8IDM7CisgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsUENNX1NQSV9DVFJMLHJlZ1RlbXApOworCisgIHJldHVybiBSQ19OT05FOworfQorI2VuZGlmCisKKy8qCisqKiBGdW5jdGlvbjogIFZkYWFfUENNVGltZVNsb3RTZXR1cAorKioKKyoqIERlc2NyaXB0aW9uOgorKiogY29uZmlndXJlIHBjbSB0aW1lc2xvdAorKioKKyoqIFJldHVybnM6CisqKgorKi8KK2ludCBWZGFhX1BDTVRpbWVTbG90U2V0dXAgKHZkYWFDaGFuVHlwZSAqcFZkYWEsIHVJbnQxNiByeGNvdW50LCB1SW50MTYgdHhjb3VudCkKK3sKKyAgdUludDggZGF0YSA9IDA7CisgIHVJbnQ4IHBjbVN0YXR1czsKKworICBUUkFDRVBSSU5UKCBwVmRhYSwgInJ4Y291bnQgPSAldSB0eGNvdW50ID0gJXVcbiIsICh1bnNpZ25lZCBpbnQpcnhjb3VudCwKKyAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCl0eGNvdW50KTsKKyAgaWYocFZkYWEtPmNoYW5uZWxUeXBlICE9IERBQSkKKyAgeworICAgIHJldHVybiBSQ19JR05PUkU7CisgIH0KKworICAvKiBEaXNhYmxlIFBDTSBpZiBlbmFibGVkIC0gcmVzdG9yZSBhZnRlciB1cGRhdGluZyB0aW1lc2xvdHMgKi8KKyAgcGNtU3RhdHVzID0gUmVhZFJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLFBDTV9TUElfQ1RSTCk7CisgIGlmIChwY21TdGF0dXMmMHgyMCkKKyAgeworICAgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsUENNX1NQSV9DVFJMLHBjbVN0YXR1cyZ+KDB4MjApKTsKKyAgfQorCisgIC8qU3RvcmluZyAxMCBiaXQgdmFsdWUgb2YgVHJhbnNtaXQgUENNIHNhbXBsZSBpbiBSRUcgMzQgYW5kIFJFRyAzNVswOjFdKi8KKyAgZGF0YSA9ICh1SW50OCkodHhjb3VudCAmIDB4ZmYpOworICBXcml0ZVJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLFBDTVRYX0NOVF9MTyxkYXRhKTsKKyAgZGF0YSA9ICh1SW50OCkodHhjb3VudCA+PiA4KSA7CisgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsUENNVFhfQ05UX0hJLGRhdGEpOworCisgIC8qU3RvcmluZyAxMCBiaXQgdmFsdWUgb2YgUmVjZWl2ZSBQQ00gc2FtcGxlIGluIFJFRyAzNCBhbmQgUkVHIDM1WzA6MV0qLworICBkYXRhID0gKHVJbnQ4KShyeGNvdW50ICYgMHhmZik7CisgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsUENNUlhfQ05UX0xPLGRhdGEpOworICBkYXRhID0gKHVJbnQ4KShyeGNvdW50ID4+IDgpOworICBXcml0ZVJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLFBDTVJYX0NOVF9ISSxkYXRhKTsKKworICAvKiBFbmFibGUgYmFjayB0aGUgUENNIGFmdGVyIHN0b3JpbmcgdGhlIHZhbHVlcyovCisgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsUENNX1NQSV9DVFJMLHBjbVN0YXR1cyk7CisKKyAgcmV0dXJuIFJDX05PTkU7Cit9CisKKy8qCisqKiBGdW5jdGlvbjogIFZkYWFfQ291bnRyeVNldHVwCisqKgorKiogRGVzY3JpcHRpb246CisqKiBjb25maWd1cmUgY291bnRyeSBzcGVjaWZpYyBzZXR0aW5ncworKioKKyoqIFJldHVybnM6CisqKgorKioKKyovCisKKyNpZm5kZWYgRElTQUJMRV9WREFBX0NPVU5UUllfU0VUVVAKK2V4dGVybiB2ZGFhX0NvdW50cnlfQ2ZnIFZkYWFfQ291bnRyeV9QcmVzZXRzIFtdOworCitpbnQgVmRhYV9Db3VudHJ5U2V0dXAgKHZkYWFDaGFuVHlwZSAqcFZkYWEsaW50MzIgcHJlc2V0KQoreworICB1SW50OCByZWdUZW1wID0gMDsKKworICBUUkFDRVBSSU5UKCBwVmRhYSwgInByZXNldCA9ICVkXG4iLCAodW5zaWduZWQgaW50KSBwcmVzZXQpOworICBpZihwVmRhYS0+Y2hhbm5lbFR5cGUgIT0gREFBKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorCisgIHJlZ1RlbXAgPSBSZWFkUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsQ1RSTDIpICYgMHhGRDsKKyAgV3JpdGVSZWcocFZkYWFIVyxwVmRhYS0+Y2hhbm5lbCxDVFJMMixyZWdUZW1wKTsgLyogZGlzYWJsZSBoeWJyaWQgKi8KKworICByZWdUZW1wID0gUmVhZFJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLElOVExfQ1RSTDEpICYgMHhGRDsKKyAgcmVnVGVtcCB8PSBWZGFhX0NvdW50cnlfUHJlc2V0c1twcmVzZXRdLnJ6IDw8IDEgOworICBXcml0ZVJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLElOVExfQ1RSTDEscmVnVGVtcCk7CisKKyAgcmVnVGVtcCA9IFZkYWFfQ291bnRyeV9QcmVzZXRzW3ByZXNldF0uZGNyOworICByZWdUZW1wIHw9IFZkYWFfQ291bnRyeV9QcmVzZXRzW3ByZXNldF0uaWxpbTw8MTsKKyAgcmVnVGVtcCB8PSBWZGFhX0NvdW50cnlfUHJlc2V0c1twcmVzZXRdLm1pbmk8PDQ7CisgIHJlZ1RlbXAgfD0gVmRhYV9Db3VudHJ5X1ByZXNldHNbcHJlc2V0XS5kY3Y8PDY7CisgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsRENfVEVSTV9DVFJMLHJlZ1RlbXApOworCisgIHJlZ1RlbXAgPSBSZWFkUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsQUNfVEVSTV9DVFJMKSAmIDB4RjA7CisgIHJlZ1RlbXAgfD0gVmRhYV9Db3VudHJ5X1ByZXNldHNbcHJlc2V0XS5hY2ltOworICBXcml0ZVJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLEFDX1RFUk1fQ1RSTCxyZWdUZW1wKTsKKworICByZWdUZW1wID0gUmVhZFJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLFNQUktfUU5DSF9DVFJMKSAmIDB4QUY7CisgIHJlZ1RlbXAgfD0gKChWZGFhX0NvdW50cnlfUHJlc2V0c1twcmVzZXRdLm9oc19zcSA+PiAyKSYxKTw8NCA7CisgIHJlZ1RlbXAgfD0gKChWZGFhX0NvdW50cnlfUHJlc2V0c1twcmVzZXRdLm9oc19zcSA+PiAzKSYxKTw8NiA7CisgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsU1BSS19RTkNIX0NUUkwscmVnVGVtcCk7CisKKyAgcmVnVGVtcCA9IFJlYWRSZWcocFZkYWFIVyxwVmRhYS0+Y2hhbm5lbCxJTlRMX0NUUkwxKSAmIDB4QkY7CisgIHJlZ1RlbXAgfD0gKChWZGFhX0NvdW50cnlfUHJlc2V0c1twcmVzZXRdLm9oc19zcSA+PiAxKSYxKTw8NiA7CisgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsSU5UTF9DVFJMMSxyZWdUZW1wKTsKKworICByZWdUZW1wID0gUmVhZFJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLERBQV9DVFJMNSkgJiAweEU3OworICByZWdUZW1wIHw9IChWZGFhX0NvdW50cnlfUHJlc2V0c1twcmVzZXRdLm9oc19zcSYxKTw8MyA7CisgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsREFBX0NUUkw1LHJlZ1RlbXApOworCisgIHJlZ1RlbXAgPSBSZWFkUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsQ1RSTDIpICYgMHhGRDsKKyAgcmVnVGVtcCB8PSAoVmRhYV9Db3VudHJ5X1ByZXNldHNbcHJlc2V0XS5oYmUpPDwxIDsKKyAgV3JpdGVSZWcocFZkYWFIVyxwVmRhYS0+Y2hhbm5lbCxDVFJMMixyZWdUZW1wKTsKKworICByZXR1cm4gUkNfTk9ORTsKK30KKyNlbmRpZgorCisvKgorKiogRnVuY3Rpb246ICBWZGFhX0h5YnJpZFNldHVwCisqKgorKiogRGVzY3JpcHRpb246CisqKiBjb25maWd1cmUgaHlicmlkCisqKgorKi8KKworI2lmbmRlZiBESVNBQkxFX1ZEQUFfSFlCUklEX1NFVFVQCitleHRlcm4gdmRhYV9IeWJyaWRfQ2ZnIFZkYWFfSHlicmlkX1ByZXNldHMgW107CisKK2ludCBWZGFhX0h5YnJpZFNldHVwICh2ZGFhQ2hhblR5cGUgKnBWZGFhLGludDMyIHByZXNldCkKK3sKKyAgdUludDggcmVnU2F2ZSA9IDA7CisKKyAgVFJBQ0VQUklOVCggcFZkYWEsICJwcmVzZXQgPSAlZFxuIiwgKHVuc2lnbmVkIGludCkgcHJlc2V0KTsKKyAgaWYocFZkYWEtPmNoYW5uZWxUeXBlICE9IERBQSkKKyAgeworICAgIHJldHVybiBSQ19JR05PUkU7CisgIH0KKworICByZWdTYXZlID0gUmVhZFJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLENUUkwyKTsKKyAgV3JpdGVSZWcocFZkYWFIVyxwVmRhYS0+Y2hhbm5lbCxDVFJMMixyZWdTYXZlJjB4RkQpOyAvKiBkaXNhYmxlIGh5YnJpZCAqLworCisgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsSFlCMSxWZGFhX0h5YnJpZF9QcmVzZXRzW3ByZXNldF0uaHliMSk7CisgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsSFlCMixWZGFhX0h5YnJpZF9QcmVzZXRzW3ByZXNldF0uaHliMik7CisgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsSFlCMyxWZGFhX0h5YnJpZF9QcmVzZXRzW3ByZXNldF0uaHliMyk7CisgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsSFlCNCxWZGFhX0h5YnJpZF9QcmVzZXRzW3ByZXNldF0uaHliNCk7CisgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsSFlCNSxWZGFhX0h5YnJpZF9QcmVzZXRzW3ByZXNldF0uaHliNSk7CisgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsSFlCNixWZGFhX0h5YnJpZF9QcmVzZXRzW3ByZXNldF0uaHliNik7CisgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsSFlCNyxWZGFhX0h5YnJpZF9QcmVzZXRzW3ByZXNldF0uaHliNyk7CisgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsSFlCOCxWZGFhX0h5YnJpZF9QcmVzZXRzW3ByZXNldF0uaHliOCk7CisKKyAgV3JpdGVSZWcocFZkYWFIVyxwVmRhYS0+Y2hhbm5lbCxDVFJMMiwKKyAgICAgICAgICAgcmVnU2F2ZSk7IC8qIFJlc3RvcmUgaHlicmlkIGVuYWJsZSBzdGF0ZSBhdCBlbnRyeSAqLworCisgIHJldHVybiBSQ19OT05FOworfQorI2VuZGlmCisKKy8qCisqKiBGdW5jdGlvbjogIFZkYWFfU2V0QXVkaW9NdXRlCisqKgorKiogRGVzY3JpcHRpb246CisqKiBDb250cm9sIFJYIGFuZCBUWCBtdXRlCisqKgorKi8KKworaW50IFZkYWFfU2V0QXVkaW9NdXRlKHZkYWFDaGFuVHlwZSAqcFZkYWEsIHRNVVRFIG11dGUpCit7CisgIHVJbnQ4IHJlZ0RhdGE7CisKKyAgVFJBQ0VQUklOVCggcFZkYWEsICJtb2RlID0gJXVcbiIsICh1bnNpZ25lZCBpbnQpIG11dGUpOworICBpZihwVmRhYS0+Y2hhbm5lbFR5cGUgIT0gREFBKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorCisgIHJlZ0RhdGEgPSBSZWFkUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsVFhSWF9HTl9DVFJMKTsKKworICBzd2l0Y2gobXV0ZSkKKyAgeworICAgIGNhc2UgTVVURV9ESVNBQkxFX0FMTDoKKyAgICAgIHJlZ0RhdGEgPSAwOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1VVEVfRElTQUJMRV9SWDoKKyAgICAgIHJlZ0RhdGEgJj0gMHg4MDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBNVVRFX0RJU0FCTEVfVFg6CisgICAgICByZWdEYXRhICY9IDB4MDg7CisgICAgICBicmVhazsKKworICAgIGNhc2UgTVVURV9FTkFCTEVfUlg6CisgICAgICByZWdEYXRhIHw9IDB4MDg7CisgICAgICBicmVhazsKKworICAgIGNhc2UgTVVURV9FTkFCTEVfVFg6CisgICAgICByZWdEYXRhIHw9IDB4ODA7CisgICAgICBicmVhazsKKworICAgIGNhc2UgTVVURV9FTkFCTEVfQUxMOgorICAgICAgcmVnRGF0YSA9IDB4ODg7CisgICAgICBicmVhazsKKyAgfQorCisgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsVFhSWF9HTl9DVFJMLHJlZ0RhdGEpOworCisgIHJldHVybiBSQ19OT05FOworfQorCisvKgorKiogRnVuY3Rpb246ICBWZGFhX1BDTVN0YXJ0CisqKgorKiogRGVzY3JpcHRpb246CisqKiBFbmFibGVzIFBDTSBidXMKKyoqCisqLworCitpbnQgVmRhYV9QQ01TdGFydCAodmRhYUNoYW5UeXBlICpwVmRhYSkKK3sKKyAgdUludDggZGF0YSA9IDA7CisKKyAgVFJBQ0VQUklOVCggcFZkYWEsICJcbiIsIE5VTEwpOworICBpZihwVmRhYS0+Y2hhbm5lbFR5cGUgIT0gREFBKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorCisgIC8qRW5hYmxlIFBDTSB0cmFuc2ZlcnMgYnkgc2V0dGluZyBSRUcgMzNbNV09MSAqLworICBkYXRhID0gUmVhZFJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLFBDTV9TUElfQ1RSTCk7CisgIGRhdGEgfD0gMHgyMDsKKyAgV3JpdGVSZWcocFZkYWFIVyxwVmRhYS0+Y2hhbm5lbCxQQ01fU1BJX0NUUkwsZGF0YSk7CisgIHJldHVybiBSQ19OT05FOworfQorCisvKgorKiogRnVuY3Rpb246ICBWZGFhX1BDTVN0b3AKKyoqCisqKiBEZXNjcmlwdGlvbjoKKyoqIERpc2FibGVzIFBDTSBidXMKKyoqCisqLworCitpbnQgVmRhYV9QQ01TdG9wICh2ZGFhQ2hhblR5cGUgKnBWZGFhKQoreworICB1SW50OCBkYXRhID0gMDsKKworICBUUkFDRVBSSU5UKCBwVmRhYSwgIlxuIiwgTlVMTCk7CisgIGlmKHBWZGFhLT5jaGFubmVsVHlwZSAhPSBEQUEpCisgIHsKKyAgICByZXR1cm4gUkNfSUdOT1JFOworICB9CisKKyAgLypkaXNhYmxlIFBDTSB0cmFuc2ZlcnMgYnkgc2V0dGluZyBSRUcgMzNbNV09MCAqLworICBkYXRhID0gUmVhZFJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLFBDTV9TUElfQ1RSTCk7CisgIGRhdGEgJj0gfigweDIwKTsKKyAgV3JpdGVSZWcocFZkYWFIVyxwVmRhYS0+Y2hhbm5lbCxQQ01fU1BJX0NUUkwsZGF0YSk7CisgIHJldHVybiBSQ19OT05FOworfQorCisvKgorKiogRnVuY3Rpb246ICBWZGFhX1NldEludGVycnVwdE1hc2sKKyoqCisqKiBEZXNjcmlwdGlvbjoKKyoqIEVuYWJsZXMgaW50ZXJydXB0cyBiYXNlZCBvbiBwYXNzZWQgOS1iaXQgYml0bWFzay4gIEJpdAorKiogdmFsdWVzIGRlZmluZWQgYnkgdmRhYUludE1hc2sgZW51bS4KKyoqCisqLworCitpbnQgVmRhYV9TZXRJbnRlcnJ1cHRNYXNrKHZkYWFDaGFuVHlwZSAqcFZkYWEsIHZkYWFJbnRNYXNrIGJpdG1hc2spCit7CisgIHVJbnQ4IGludE1hc2tSZWcgPSAwOworICB1SW50OCBjdmlSZWcgPSAwOworCisgIFRSQUNFUFJJTlQoIHBWZGFhLCAibWFzayA9IDB4JTAzeFxuIiwgKHVuc2lnbmVkIGludCliaXRtYXNrKTsKKyAgLyogQ2hhbm5lbCB2YWxpZGF0aW9uICovCisgIGlmKHBWZGFhLT5jaGFubmVsVHlwZSAhPSBEQUEpCisgIHsKKyAgICByZXR1cm4gUkNfQ0hBTk5FTF9UWVBFX0VSUjsKKyAgfQorCisgIGludE1hc2tSZWcgPSAodUludDgpKGJpdG1hc2sgJiAweDAwZmYpOworICBjdmlSZWcgPSBSZWFkUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsTE5fVklfVEhSRVNIX0lOVEVfQ1RSTCk7CisgIGN2aVJlZyB8PSAodUludDgpICgoYml0bWFzayA+PiA3KSAmIDB4MDAwMik7CisKKyAgV3JpdGVSZWcgKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsSU5URV9NU0ssaW50TWFza1JlZyk7CisgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsTE5fVklfVEhSRVNIX0lOVEVfQ1RSTCxjdmlSZWcpOworCisgIHJldHVybiBSQ19OT05FOworfQorCisvKgorKiogRnVuY3Rpb246ICBWZGFhX1JlYWRSaW5nRGV0ZWN0U3RhdHVzCisqKgorKiogRGVzY3JpcHRpb246CisqKiBSZWFkcyByaW5nIGRldGVjdC9ob29rIHN0YXR1cworKioKKyoqIFJldHVybnM6CisqKgorKioKKyovCisKK2ludCBWZGFhX1JlYWRSaW5nRGV0ZWN0U3RhdHVzICh2ZGFhQ2hhblR5cGUgKnBWZGFhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZkYWFSaW5nRGV0ZWN0U3RhdHVzVHlwZSAqcFN0YXR1cykKK3sKKyAgdUludDggcmVnOworCisgIFRSQUNFUFJJTlQoIHBWZGFhLCAiXG4iLCBOVUxMKTsKKyAgaWYocFZkYWEtPmNoYW5uZWxUeXBlICE9IERBQSkKKyAgeworICAgIHJldHVybiBSQ19JR05PUkU7CisgIH0KKworICByZWcgPSBSZWFkUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsREFBX0NUUkwxKTsKKyAgcFN0YXR1cy0+b2ZmaG9vayA9IHJlZyAmIDB4MDE7CisgIHBTdGF0dXMtPnJpbmdEZXRlY3RlZCA9IChyZWcgJiAweDQpPj4yOworICBwU3RhdHVzLT5vbmhvb2tMaW5lTW9uaXRvciA9IChyZWcgJiAweDgpPj4zOworICBwU3RhdHVzLT5yaW5nRGV0ZWN0ZWRQb3MgPSAocmVnICYgMHgyMCk+PjU7CisgIHBTdGF0dXMtPnJpbmdEZXRlY3RlZE5lZyA9IChyZWcgJiAweDQwKT4+NjsKKyAgcmV0dXJuIFJDX05PTkU7Cit9CisKKy8qCisqKiBGdW5jdGlvbjogIFZkYWFfSW5pdAorKioKKyoqIERlc2NyaXB0aW9uOgorKiogSW5pdGlhbGl6ZSBWREFBLCBsb2FkIGdlbmVyYWwgY29uZmlnIHBhcmFtZXRlcnMKKyoqCisqLworCitleHRlcm4gdmRhYV9HZW5lcmFsX0NmZyBWZGFhX0dlbmVyYWxfQ29uZmlndXJhdGlvbjsKKworaW50IFZkYWFfSW5pdCAodmRhYUNoYW5UeXBlX3B0ciAqcFZkYWEsaW50IHNpemUpCit7CisgIHVJbnQ4IGRhdGE7CisgIGludCBrOworICBpbnQgbnVtX2RldmljZXMgPSAwOworCisgIFRSQUNFUFJJTlQoICpwVmRhYSwgInNpemUgPSAlZFxuIiwgc2l6ZSk7CisKKyAgZm9yIChrPTA7IGs8c2l6ZTsgaysrKQorICB7CisKKyAgICBpZihwVmRhYVtrXS0+Y2hhbm5lbFR5cGUgPT0gUFJPU0xJQykKKyAgICB7CisgICAgICBjb250aW51ZTsgIC8qIFNraXAgaWYgd2Uga25vdyB0aGlzIGlzIGEgUHJvU0xJQywgZWxzZSBjaGVjayB0aGUgZGV2aWNlIG91dCAqLworICAgIH0KKworICAgIGlmIChpc1ZlcmlmaWVkREFBKHBWZGFhW2tdKSA9PSBSQ19DSEFOTkVMX1RZUEVfRVJSKQorICAgIHsKKyAgICAgIHBWZGFhW2tdLT5jaGFubmVsRW5hYmxlID0gRkFMU0U7CisgICAgICBwVmRhYVtrXS0+ZXJyb3IgPSBSQ19DSEFOTkVMX1RZUEVfRVJSOworICAgICAgcFZkYWFba10tPmNoYW5uZWxUeXBlID0gVU5LTk9XTjsKKyAgICAgIERFQlVHX1BSSU5UKHBWZGFhW2tdLCAiJXNWREFBIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBkZXZpY2VcbiIsTE9HUFJJTlRfUFJFRklYKTsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgcFZkYWFba10tPmNoYW5uZWxUeXBlID0gREFBOworICAgIH0KKworICAgIGlmIChwVmRhYVtrXS0+Y2hhbm5lbEVuYWJsZSkKKyAgICB7CisgICAgICAvKlRyeSB0byB3cml0ZSBpbm5vY3VvdXMgcmVnaXN0ZXIgdG8gdGVzdCBTUEkgaXMgd29ya2luZyovCisgICAgICBwVmRhYVtrXS0+V3JpdGVSZWdYKHBWZGFhW2tdLT5wVmRhYUhXWCxwVmRhYVtrXS0+Y2hhbm5lbCxQQ01SWF9DTlRfTE8sMHg1QSk7CisgICAgICBkYXRhID0gcFZkYWFba10tPlJlYWRSZWdYKHBWZGFhW2tdLT5wVmRhYUhXWCxwVmRhYVtrXS0+Y2hhbm5lbCxQQ01SWF9DTlRfTE8pOworICAgICAgaWYgKGRhdGEgIT0gMHg1QSkKKyAgICAgIHsKKyAgICAgICAgcFZkYWFba10tPmVycm9yID0gUkNfU1BJX0ZBSUw7CisgICAgICAgIHBWZGFhW2tdLT5jaGFubmVsRW5hYmxlID0gRkFMU0U7CisgICAgICAgIERFQlVHX1BSSU5UKHBWZGFhW2tdLCAiJXNWREFBICVkIG5vdCBjb21tdW5pY2F0aW5nXG4iLExPR1BSSU5UX1BSRUZJWCwKKyAgICAgICAgICAgICAgICAgICAgcFZkYWFba10tPmNoYW5uZWwpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBudW1fZGV2aWNlcysrOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmKG51bV9kZXZpY2VzID09IDApCisgIHsKKyAgICBERUJVR19QUklOVCgqcFZkYWEsICIlc05vIERBQSBkZXZpY2VzIGRldGVjdGVkXG4iLCBMT0dQUklOVF9QUkVGSVgpOworICAgIHJldHVybiBSQ19TUElfRkFJTDsKKyAgfQorCisgIGZvciAoaz0wOyBrPHNpemU7IGsrKykKKyAgeworICAgIGlmKHBWZGFhW2tdLT5jaGFubmVsVHlwZSAhPSBEQUEpCisgICAgeworICAgICAgY29udGludWU7ICAvKiBTa2lwIFBST1NMSUMgb3IgVU5ERUZJTkVEIHBvcnRzICovCisgICAgfQorICAgIGlmIChwVmRhYVtrXS0+Y2hhbm5lbEVuYWJsZSkKKyAgICB7CisKKyAgICAgIC8qIEFwcGx5IEdlbmVyYWwgQ29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzICovCisKKyAgICAgIC8qIE5vIG5lZWQgdG8gcmVhZC1tb2RpZnktd3JpdGUgaGVyZSBzaW5jZSByZWdpc3RlcnMgYXJlIGluIHRoZWlyIHJlc2V0IHN0YXRlICovCisgICAgICBkYXRhID0gKFZkYWFfR2VuZXJhbF9Db25maWd1cmF0aW9uLnB3bW0gPDwgNCkgfAorICAgICAgICAgICAgIChWZGFhX0dlbmVyYWxfQ29uZmlndXJhdGlvbi5wd21FbmFibGUgPDwgMyk7CisgICAgICBwVmRhYVtrXS0+V3JpdGVSZWdYKHBWZGFhW2tdLT5wVmRhYUhXWCxwVmRhYVtrXS0+Y2hhbm5lbCxDVFJMMSwgZGF0YSk7CisKKyAgICAgIGRhdGEgPSAoVmRhYV9HZW5lcmFsX0NvbmZpZ3VyYXRpb24uaW50ZSA8PCA3KSB8IChWZGFhX0dlbmVyYWxfQ29uZmlndXJhdGlvbi5pbnRwCisgICAgICAgICAgICAgPDwgNikgfCAweDAzOworICAgICAgcFZkYWFba10tPldyaXRlUmVnWChwVmRhYVtrXS0+cFZkYWFIV1gscFZkYWFba10tPmNoYW5uZWwsQ1RSTDIsIGRhdGEpOworCisgICAgICBkYXRhID0gKFZkYWFfR2VuZXJhbF9Db25maWd1cmF0aW9uLmhzc20gPDwgMyk7CisgICAgICBwVmRhYVtrXS0+V3JpdGVSZWdYKHBWZGFhW2tdLT5wVmRhYUhXWCxwVmRhYVtrXS0+Y2hhbm5lbCxTTVBMX0NUUkwsIGRhdGEpOworCisgICAgICBkYXRhID0gKFZkYWFfR2VuZXJhbF9Db25maWd1cmF0aW9uLmlpcmUgPDwgNCk7CisgICAgICBwVmRhYVtrXS0+V3JpdGVSZWdYKHBWZGFhW2tdLT5wVmRhYUhXWCxwVmRhYVtrXS0+Y2hhbm5lbCxJTlRMX0NUUkwxLCBkYXRhKTsKKworICAgICAgZGF0YSA9IChWZGFhX0dlbmVyYWxfQ29uZmlndXJhdGlvbi5yY2FsZCA8PCA0KTsKKyAgICAgIHBWZGFhW2tdLT5Xcml0ZVJlZ1gocFZkYWFba10tPnBWZGFhSFdYLHBWZGFhW2tdLT5jaGFubmVsLFJFU19DQUxJQiwgZGF0YSk7CisKKyAgICAgIGRhdGEgPSAoVmRhYV9HZW5lcmFsX0NvbmZpZ3VyYXRpb24uZnVsbDIgPDwgNCk7CisgICAgICBwVmRhYVtrXS0+V3JpdGVSZWdYKHBWZGFhW2tdLT5wVmRhYUhXWCxwVmRhYVtrXS0+Y2hhbm5lbCxBQ19URVJNX0NUUkwsIGRhdGEpOworCisgICAgICBkYXRhID0gKFZkYWFfR2VuZXJhbF9Db25maWd1cmF0aW9uLmx2ZmQpIHwgKFZkYWFfR2VuZXJhbF9Db25maWd1cmF0aW9uLmZpbHQgPDwKKyAgICAgICAgICAgICAxKSB8CisgICAgICAgICAgICAgKFZkYWFfR2VuZXJhbF9Db25maWd1cmF0aW9uLmZvaCA8PCA1KSB8IChWZGFhX0dlbmVyYWxfQ29uZmlndXJhdGlvbi5mdWxsIDw8IDcpOworICAgICAgcFZkYWFba10tPldyaXRlUmVnWChwVmRhYVtrXS0+cFZkYWFIV1gscFZkYWFba10tPmNoYW5uZWwsREFBX0NUUkw1LCBkYXRhKTsKKworICAgICAgZGF0YSA9IChWZGFhX0dlbmVyYWxfQ29uZmlndXJhdGlvbi5zcGltIDw8IDYpOworICAgICAgcFZkYWFba10tPldyaXRlUmVnWChwVmRhYVtrXS0+cFZkYWFIV1gscFZkYWFba10tPmNoYW5uZWwsUENNX1NQSV9DVFJMLCBkYXRhKTsKKworICAgICAgZGF0YSA9IChWZGFhX0dlbmVyYWxfQ29uZmlndXJhdGlvbi5jdnApIHwgKFZkYWFfR2VuZXJhbF9Db25maWd1cmF0aW9uLmN2cyA8PCAyKTsKKyAgICAgIHBWZGFhW2tdLT5Xcml0ZVJlZ1gocFZkYWFba10tPnBWZGFhSFdYLHBWZGFhW2tdLT5jaGFubmVsLExOX1ZJX1RIUkVTSF9JTlRFX0NUUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEpOworCisgICAgICBkYXRhID0gKFZkYWFfR2VuZXJhbF9Db25maWd1cmF0aW9uLmdjZSA8PCAxKSB8IChWZGFhX0dlbmVyYWxfQ29uZmlndXJhdGlvbi5yZzEKKyAgICAgICAgICAgICA8PCAyKTsKKyAgICAgIHBWZGFhW2tdLT5Xcml0ZVJlZ1gocFZkYWFba10tPnBWZGFhSFdYLHBWZGFhW2tdLT5jaGFubmVsLFNQUktfUU5DSF9DVFJMLCBkYXRhKTsKKworICAgICAgLyogRW5hYmxlIExpbmVzaWRlIERldmljZSAqLworICAgICAgVmRhYV9Qb3dlcnVwTGluZXNpZGUocFZkYWFba10pOworICAgIH0KKyAgfQorICBERUJVR19QUklOVCgqcFZkYWEsIiVzREFBIGluaXRpYWxpemF0aW9uIGNvbXBsZXRlZFxuIixMT0dQUklOVF9QUkVGSVgpOworICByZXR1cm4gUkNfTk9ORTsKK30KKworLyoKKyoqIEZ1bmN0aW9uOiAgVmRhYV9SZWFkTGluZWZlZWRTdGF0dXMKKyoqCisqKiBEZXNjcmlwdGlvbjoKKyoqIFJlYWQgU3RhdHVzIG9mIExpbmUgRmVlZAorKioKKyoqIFJldHVybnM6CisqKiBSQ19WREFBX0lMT09QX09WTEQgaWYgTENTID49IDB4MUYKKyoqICAgICAgLSBubyBvdmVybG9hZAorKioKKyovCisKK2ludCBWZGFhX1JlYWRMaW5lZmVlZFN0YXR1cyAodmRhYUNoYW5UeXBlICpwVmRhYSxpbnQ4ICp2bG9vcCwgaW50MTYgKmlsb29wKQoreworICBpbnQxNiByZWdUZW1wID0gMHgxRjsKKyAgdUludDggaWxvb3BfcmVnOyAvKiBSRUcgMTJbNDowXSA9IExvb3AgY3VycmVudCovCisKKyAgVFJBQ0VQUklOVCggcFZkYWEsICJcbiIsIE5VTEwpOworICBpZihwVmRhYS0+Y2hhbm5lbFR5cGUgIT0gREFBKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorICByZWdUZW1wICY9IFJlYWRSZWcocFZkYWFIVyxwVmRhYS0+Y2hhbm5lbCxMU0lERV9TVEFUKTsKKyAgaWxvb3BfcmVnID0gKHVJbnQ4KXJlZ1RlbXA7CisgICppbG9vcCA9IChyZWdUZW1wKkxDU19TQ0FMRV9OVU0pIC8KKyAgICAgICAgICAgTENTX1NDQUxFX0RFTjsgLyogTXVsdGlwbHkgdGhlIHJlYWQgcmVzdWx0IGJ5IDMuM21BL2JpdCovCisKKyAgKnZsb29wID0gKGludDgpIFJlYWRSZWcocFZkYWFIVyxwVmRhYS0+Y2hhbm5lbCxMSU5FX1ZPTFRfU1RBVCk7CisgIGlmKCp2bG9vcCAmIDB4ODApCisgIHsKKyAgICAqdmxvb3AgPSB+KCp2bG9vcCAtIDEpKigtMSk7CisgIH0KKworICBpZiAoaWxvb3BfcmVnID09IDB4MUYpCisgIHsKKyAgICByZXR1cm4gUkNfVkRBQV9JTE9PUF9PVkxEOworICB9CisgIHJldHVybiBSQ19OT05FOworfQorCisvKgorKiogRnVuY3Rpb246ICBWZGFhX0dldEludGVycnVwdHMKKyoqCisqKiBEZXNjcmlwdGlvbjoKKyoqIEdldCBJbnRlcnJ1cHRzCisqKgorKiogUmV0dXJuczoKKyoqIG51bWJlciBvZiBpbnRlcnJ1cHRzCisqKgorKi8KKworaW50IFZkYWFfR2V0SW50ZXJydXB0cyAodmRhYUNoYW5UeXBlICpwVmRhYSx2ZGFhSW50VHlwZSAqcEludERhdGEpCit7CisgIHVJbnQ4IGRhdGEgPSAwOworICBpbnQgajsKKyAgVFJBQ0VQUklOVCggcFZkYWEsICJcbiIsIE5VTEwpOworICBwSW50RGF0YS0+bnVtYmVyID0gMDsKKworICBpZihwVmRhYS0+Y2hhbm5lbFR5cGUgIT0gREFBKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorCisgIGRhdGEgPSBSZWFkUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsSU5URV9TUkMpOyAgICAgIC8qU25hcHNob3QgSW50ZXJydXB0cyovCisgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsSU5URV9TUkMsfihkYXRhKSk7ICAgICAgLypDbGVhciBpbnRlcnJ1cHRzKi8KKworICBmb3IgKGo9MDsgajw4OyBqKyspCisgIHsKKyAgICBpZiAoZGF0YSAmKDE8PGopKQorICAgIHsKKworICAgICAgcEludERhdGEtPmlycXNbcEludERhdGEtPm51bWJlcl0gPSAgIGo7CisgICAgICBwSW50RGF0YS0+bnVtYmVyKys7CisKKyAgICB9CisgIH0KKyAgZGF0YSA9IFJlYWRSZWcocFZkYWFIVyxwVmRhYS0+Y2hhbm5lbCxMTl9WSV9USFJFU0hfSU5URV9DVFJMKTsKKworICBpZiAoZGF0YSAmKDB4MDgpKSAgICAgICAgICAgICAgICAgICAvKnRvIGRldGVybWluZSBpZiBDVkkgSW50ZXJydXB0IGlzIHNldCovCisgIHsKKyAgICBwSW50RGF0YS0+aXJxc1twSW50RGF0YS0+bnVtYmVyXSA9ICAgQ1ZJOworICAgIHBJbnREYXRhLT5udW1iZXIrKzsKKyAgICBkYXRhICY9IH4oMHgwOCk7CisgICAgV3JpdGVSZWcocFZkYWFIVyxwVmRhYS0+Y2hhbm5lbCxMTl9WSV9USFJFU0hfSU5URV9DVFJMLGRhdGEpOworCisgIH0KKworICByZXR1cm4gcEludERhdGEtPm51bWJlcjsKK30KKworLyoKKyoqIEZ1bmN0aW9uOiAgVmRhYV9DbGVhckludGVycnVwdHMKKyoqCisqKiBEZXNjcmlwdGlvbjoKKyoqIENsZWFyIEludGVycnVwdHMKKyoqCisqKiBSZXR1cm5zOgorKioKKyoqCisqLworCitpbnQgVmRhYV9DbGVhckludGVycnVwdHMgKHZkYWFDaGFuVHlwZSAqcFZkYWEpCit7CisgIHVJbnQ4IGRhdGEgPSAwOworCisgIFRSQUNFUFJJTlQoIHBWZGFhLCAiXG4iLCBOVUxMKTsKKyAgaWYocFZkYWEtPmNoYW5uZWxUeXBlICE9IERBQSkKKyAgeworICAgIHJldHVybiBSQ19JR05PUkU7CisgIH0KKworICBXcml0ZVJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLElOVEVfU1JDLAorICAgICAgICAgICAweDAwKTsgICAgLyogQ2xlYXIgaW50ZXJydXB0cyBpbiBSRUcgNCBieSB3cml0aW5nIDAncyovCisKKyAgLypDbGVhciBDVkkgaW50ZXJydXB0IGJ5IHdyaXRpbmcgMCBhdCBSRUcgNDRbM10qLworICBkYXRhID0gUmVhZFJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLExOX1ZJX1RIUkVTSF9JTlRFX0NUUkwpOworICBXcml0ZVJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLExOX1ZJX1RIUkVTSF9JTlRFX0NUUkwsZGF0YSYweEY3KTsKKworICByZXR1cm4gUkNfTk9ORTsKK30KKworLyoKKyoqIEZ1bmN0aW9uOiAgVmRhYV9HZXRIb29rU3RhdHVzCisqKgorKiogRGVzY3JpcHRpb246CisqKiBSZWFkIFZEQUEgSG9vayBTdGF0dXMKKyoqCisqKiBSZXR1cm4gVmFsdWVzIC0KKyoqICAgICAgVkRBQV9PTkhPT0sKKyoqICAgICAgVkRBQV9PRkZIT09LCisqKiAgICAgIFZEQUFfT05IT09LX01PTklUT1IKKyoqICAgICAgUkNfSU5WQUxJRF9IT09LX1NUQVRVUworKi8KKwordUludDggVmRhYV9HZXRIb29rU3RhdHVzICh2ZGFhQ2hhblR5cGUgKnBWZGFhKQoreworICB1SW50OCBkYXRhOworCisgIFRSQUNFUFJJTlQoIHBWZGFhLCAiXG4iLCBOVUxMKTsKKyAgaWYocFZkYWEtPmNoYW5uZWxUeXBlICE9IERBQSkKKyAgeworICAgIHJldHVybiBSQ19JR05PUkU7CisgIH0KKworICBkYXRhID0gUmVhZFJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLERBQV9DVFJMMSk7CisgIGRhdGEgJj0gMHgwOTsgIC8qIExvb2sgYXQgb25seSBPTkhNIGFuZCBPSCAqLworCisgIGlmKChkYXRhICYgMHg4MCkmJihkYXRhICYgMHgwMSkpCisgIHsKKyAgICByZXR1cm4gVkRBQV9PTkhPT0tfTU9OSVRPUjsKKyAgfQorICBlbHNlIGlmIChkYXRhICYgMHgwMSkKKyAgeworICAgIHJldHVybiBWREFBX09GRkhPT0s7CisgIH0KKyAgZWxzZQorICB7CisgICAgcmV0dXJuIFZEQUFfT05IT09LOworICB9Cit9CisKKy8qCisqKiBGdW5jdGlvbjogIFZkYWFfU2V0SG9va1N0YXR1cworKioKKyoqIERlc2NyaXB0aW9uOgorKiogU2V0IFZEQUEgSG9vayBzd2l0Y2ggdG8gT05IT09LLCBPRkZIT09LLAorKiogb3IgT05IT09LX01PTklUT1IKKyoqCisqLworCitpbnQgVmRhYV9TZXRIb29rU3RhdHVzICh2ZGFhQ2hhblR5cGUgKnBWZGFhLHVJbnQ4IG5ld0hvb2tTdGF0dXMpCit7CisgIHVJbnQ4IGRhdGE9IDAgOworCisgIFRSQUNFUFJJTlQoIHBWZGFhLCAiaG9va3N0YXRlID0gJXVcbiIsICh1bnNpZ25lZCBpbnQpIG5ld0hvb2tTdGF0dXMpOworCisgIGlmKHBWZGFhLT5jaGFubmVsVHlwZSAhPSBEQUEpCisgIHsKKyAgICByZXR1cm4gUkNfSUdOT1JFOworICB9CisKKyAgc3dpdGNoIChuZXdIb29rU3RhdHVzKQorICB7CisgICAgY2FzZSBWREFBX0RJR19MT09QQkFDSzoKKyAgICAgIC8qU2V0dGluZyBSRUc2WzRdPTEsUkVHNVswXT0wLFJFRzVbM109MCovCisgICAgICBkYXRhID0gUmVhZFJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLERBQV9DVFJMMik7CisgICAgICBkYXRhIHw9IDB4MTA7CisgICAgICBXcml0ZVJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLERBQV9DVFJMMixkYXRhKTsKKyAgICAgIGRhdGEgPSBSZWFkUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsREFBX0NUUkwxKTsKKyAgICAgIGRhdGEgJj0gfigweDA5KTsKKyAgICAgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsREFBX0NUUkwxLGRhdGEpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFZEQUFfT05IT09LOgorICAgICAgLypTZXR0aW5nIFJFRzZbNF09MCxSRUc1WzBdPTAsUkVHNVszXT0wKi8KKyAgICAgIGRhdGEgPSBSZWFkUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsREFBX0NUUkwxKTsKKyAgICAgIGRhdGEgJj0gMHhGNjsKKyAgICAgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsREFBX0NUUkwxLGRhdGEpOworICAgICAgZGF0YSA9IFJlYWRSZWcocFZkYWFIVyxwVmRhYS0+Y2hhbm5lbCxEQUFfQ1RSTDIpOworICAgICAgZGF0YSAmPSAweEVGOworICAgICAgV3JpdGVSZWcocFZkYWFIVyxwVmRhYS0+Y2hhbm5lbCxEQUFfQ1RSTDIsZGF0YSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgVkRBQV9PRkZIT09LOgorICAgICAgLypTZXR0aW5nIFJFRzZbNF09MCxSRUc1WzBdPTEsUkVHNVszXT0wKi8KKyAgICAgIGRhdGEgPSBSZWFkUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsREFBX0NUUkwxKTsKKyAgICAgIGRhdGEgJj0gMHhGNzsKKyAgICAgIGRhdGEgfD0gMHgwMTsKKyAgICAgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsREFBX0NUUkwxLGRhdGEpOworICAgICAgZGF0YSA9IFJlYWRSZWcocFZkYWFIVyxwVmRhYS0+Y2hhbm5lbCxEQUFfQ1RSTDIpOworICAgICAgZGF0YSAmPSAweEVGOworICAgICAgV3JpdGVSZWcocFZkYWFIVyxwVmRhYS0+Y2hhbm5lbCxEQUFfQ1RSTDIsZGF0YSk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgVkRBQV9PTkhPT0tfTU9OSVRPUjoKKyAgICAgIC8qU2V0dGluZyBSRUc2WzRdPTAsUkVHNVswXT0wLFJFRzVbM109MSovCisgICAgICBkYXRhID0gUmVhZFJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLERBQV9DVFJMMSk7CisgICAgICBkYXRhICY9IDB4RkU7CisgICAgICBkYXRhIHw9IDB4MDg7CisgICAgICBXcml0ZVJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLERBQV9DVFJMMSxkYXRhKTsKKyAgICAgIGRhdGEgPSBSZWFkUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsREFBX0NUUkwyKTsKKyAgICAgIGRhdGEgJj0gMHhFRjsKKyAgICAgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsREFBX0NUUkwyLGRhdGEpOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIFJDX1VOU1VQUE9SVEVEX09QVElPTjsKKyAgfQorCisgIHJldHVybiBSQ19OT05FOworfQorCisvKgorKiogRnVuY3Rpb246ICBWZGFhX1NldExvb3BiYWNrTW9kZQorKioKKyoqIERlc2NyaXB0aW9uOgorKiogTG9vcGJhY2sgbW9kZSBjb250cm9sCisqKgorKi8KKworaW50IFZkYWFfU2V0TG9vcGJhY2tNb2RlKHZkYWFDaGFuVHlwZV9wdHIgcFZkYWEsIHRMcGJrTW9kZSBscGJrX21vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgdExwYmtTdGF0dXMgbHBia19zdGF0dXMpCit7CisgIHVJbnQ4IHJlZ0RhdGE7CisKKyAgVFJBQ0VQUklOVChwVmRhYSwgImxwYmtfbW9kZSA9ICV1IGxwYmtfc3RhdHVzID0gJWRcbiIsICh1bnNpZ25lZCBpbnQpIGxwYmtfbW9kZSwKKyAgICAgICAgICAgICAodW5zaWduZWQgaW50KSBscGJrX3N0YXR1cyk7CisgIGlmKHBWZGFhLT5jaGFubmVsVHlwZSAhPSBEQUEpCisgIHsKKyAgICByZXR1cm4gUkNfSUdOT1JFOworICB9CisKKyAgc3dpdGNoKGxwYmtfbW9kZSkKKyAgeworICAgIGNhc2UgTFBCS19OT05FOgorICAgICAgLyogRGlzYWJsZSBhbGwgbG9vcGJhY2sgdHlwZXMsIHJlZ2FyZGxlc3Mgb2YgbHBia19zdGF0dXMgKi8KKyAgICAgIHJlZ0RhdGEgPSBSZWFkUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsQ1RSTDEpOworICAgICAgaWYocmVnRGF0YSAmIDB4MDIpCisgICAgICB7CisgICAgICAgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsQ1RSTDEsIHJlZ0RhdGEgJiB+KDB4MDIpKTsKKyAgICAgIH0KKworICAgICAgcmVnRGF0YSA9IFJlYWRSZWcocFZkYWFIVyxwVmRhYS0+Y2hhbm5lbCxEQUFfQ1RSTDMpOworICAgICAgaWYocmVnRGF0YSAmIDB4MDEpCisgICAgICB7CisgICAgICAgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsREFBX0NUUkwzLDApOworICAgICAgfQorCisgICAgICByZWdEYXRhID0gUmVhZFJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLFBDTV9TUElfQ1RSTCk7CisgICAgICBpZihyZWdEYXRhICYgMHg4MCkKKyAgICAgIHsKKyAgICAgICAgV3JpdGVSZWcocFZkYWFIVyxwVmRhYS0+Y2hhbm5lbCxQQ01fU1BJX0NUUkwsIHJlZ0RhdGEgJiB+KDB4ODApKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBMUEJLX0lETDoKKyAgICAgIGlmKGxwYmtfc3RhdHVzKQorICAgICAgeworICAgICAgICByZWdEYXRhID0gUmVhZFJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLENUUkwxKTsKKyAgICAgICAgV3JpdGVSZWcocFZkYWFIVyxwVmRhYS0+Y2hhbm5lbCxDVFJMMSwgcmVnRGF0YSB8IDB4MDIpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICByZWdEYXRhID0gUmVhZFJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLENUUkwxKTsKKyAgICAgICAgV3JpdGVSZWcocFZkYWFIVyxwVmRhYS0+Y2hhbm5lbCxDVFJMMSwgcmVnRGF0YSAmIH4oMHgwMikpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIExQQktfRERMOgorICAgICAgaWYobHBia19zdGF0dXMpCisgICAgICB7CisgICAgICAgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsREFBX0NUUkwzLCAweDAxKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgV3JpdGVSZWcocFZkYWFIVyxwVmRhYS0+Y2hhbm5lbCxEQUFfQ1RSTDMsIDApOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIExQQktfUENNTDoKKyAgICAgIGlmKGxwYmtfc3RhdHVzKQorICAgICAgeworICAgICAgICByZWdEYXRhID0gUmVhZFJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLFBDTV9TUElfQ1RSTCk7CisgICAgICAgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsUENNX1NQSV9DVFJMLCByZWdEYXRhIHwgMHg4MCk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHJlZ0RhdGEgPSBSZWFkUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsUENNX1NQSV9DVFJMKTsKKyAgICAgICAgV3JpdGVSZWcocFZkYWFIVyxwVmRhYS0+Y2hhbm5lbCxQQ01fU1BJX0NUUkwsIHJlZ0RhdGEgJiB+KDB4ODApKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBSQ19VTlNVUFBPUlRFRF9PUFRJT047CisgIH0KKworICByZXR1cm4gUkNfTk9ORTsKK30KKworLyoKKyoqIEZ1bmN0aW9uOiAgVmRhYV9BRENDYWwKKyoqCisqKiBEZXNjcmlwdGlvbjoKKyoqIFRoaXMgZnVuY3Rpb24gY2FsaWJyYXRlcyB0aGUgVkRBQSBBREMgbWFudWFsbHkKKyoqCisqLworCitpbnQgVmRhYV9BRENDYWwgKHZkYWFDaGFuVHlwZV9wdHIgcFZkYWEsIGludDMyIHNpemUpCit7CisgIHVJbnQ4IHJlZ1RlbXAgPSAwOworICBpbnQzMiBpOworCisgIFRSQUNFUFJJTlQocFZkYWEsICJzaXplID0gJWRcbiIsIChpbnQpIHNpemUpOworICBpZihwVmRhYS0+Y2hhbm5lbFR5cGUgIT0gREFBKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorCisgIGZvcihpID0gMDsgaSA8IHNpemU7IGkrKykKKyAgeworICAgIC8qIENsZWFyIHRoZSBwcmV2aW91cyBBREMgQ2FsaWJyYXRpb24gZGF0YSBieSB0b2dnbGluZyBDQUxaKi8KKyAgICByZWdUZW1wID0gUmVhZFJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLElOVExfQ1RSTDIpOworICAgIHJlZ1RlbXAgfD0gMHg4MDsKKyAgICBXcml0ZVJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLElOVExfQ1RSTDIscmVnVGVtcCk7CisgICAgcmVnVGVtcCAmPSB+MHg4MDsKKyAgICBXcml0ZVJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLElOVExfQ1RSTDIscmVnVGVtcCk7CisKKyAgICByZWdUZW1wID0gUmVhZFJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLElOVExfQ1RSTDIpOyAvKmRpc2FibGUgYXV0byBjYWwqLworICAgIHJlZ1RlbXAgfD0gMHgyMDsKKyAgICBXcml0ZVJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLElOVExfQ1RSTDIscmVnVGVtcCk7CisKKyAgICByZWdUZW1wIHw9IDB4NDA7ICAgICAgICAgICAgICAgICAgLyppbml0aWF0ZSBtYW51YWwgY2FsKi8KKyAgICBXcml0ZVJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLElOVExfQ1RSTDIscmVnVGVtcCk7CisgICAgcmVnVGVtcCAmPSB+MHg0MDsKKyAgICBXcml0ZVJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLElOVExfQ1RSTDIscmVnVGVtcCk7CisgICAgcFZkYWErKzsKKyAgfQorICByZXR1cm4gUkNfTk9ORTsKK30KKworLyoKKyoqIEZ1bmN0aW9uOiAgVmRhYV9FbmFibGVXYXRjaGRvZworKioKKyoqIERlc2NyaXB0aW9uOgorKiogRW5hYmxlcyB3YXRjaGRvZyB0aW1lcgorKioKKyovCisKK2ludCBWZGFhX0VuYWJsZVdhdGNoZG9nKHZkYWFDaGFuVHlwZV9wdHIgcFZkYWEpCit7CisgIHVJbnQ4IHJlZ1RlbXA7CisKKyAgVFJBQ0VQUklOVChwVmRhYSwgIlxuIiwgTlVMTCk7CisgIGlmKHBWZGFhLT5jaGFubmVsVHlwZSAhPSBEQUEpCisgIHsKKyAgICByZXR1cm4gUkNfSUdOT1JFOworICB9CisKKyAgcmVnVGVtcCA9IFJlYWRSZWcocFZkYWFIVyxwVmRhYS0+Y2hhbm5lbCxDVFJMMik7CisgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsQ1RSTDIscmVnVGVtcCB8IDB4MTApOworCisgIHJldHVybiBSQ19OT05FOworfQorCisvKgorKiogRnVuY3Rpb246ICBWZGFhX1NldEh5YnJpZEVuYWJsZQorKioKKyoqIERlc2NyaXB0aW9uOgorKiogRW5hYmxlcyB3YXRjaGRvZyB0aW1lcgorKioKKyovCisKK2ludCBWZGFhX1NldEh5YnJpZEVuYWJsZSh2ZGFhQ2hhblR5cGVfcHRyIHBWZGFhLCBpbnQgZW5hYmxlKQoreworICB1SW50OCByZWdUZW1wOworICBUUkFDRVBSSU5UKHBWZGFhLCAiZW5hYmxlID0gJWRcbiIsIGVuYWJsZSk7CisKKyAgaWYocFZkYWEtPmNoYW5uZWxUeXBlICE9IERBQSkKKyAgeworICAgIHJldHVybiBSQ19JR05PUkU7CisgIH0KKworICByZWdUZW1wID0gUmVhZFJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLENUUkwyKTsKKyAgaWYoZW5hYmxlKQorICB7CisgICAgV3JpdGVSZWcocFZkYWFIVyxwVmRhYS0+Y2hhbm5lbCxDVFJMMixyZWdUZW1wIHwgMHgwMik7CisgIH0KKyAgZWxzZQorICB7CisgICAgV3JpdGVSZWcocFZkYWFIVyxwVmRhYS0+Y2hhbm5lbCxDVFJMMixyZWdUZW1wICYgfigweDAyKSk7CisgIH0KKworICByZXR1cm4gUkNfTk9ORTsKK30KKworCisvKgorKiogRnVuY3Rpb246ICBWZGFhX1NvZnRSZXNldAorKioKKyoqIERlc2NyaXB0aW9uOgorKiogRXhlY3V0ZSBzb2Z0IHJlc2V0CisqKgorKi8KKworaW50IFZkYWFfU29mdFJlc2V0KHZkYWFDaGFuVHlwZV9wdHIgcFZkYWEpCit7CisgIFRSQUNFUFJJTlQocFZkYWEsICJcbiIsIE5VTEwpOworICBpZihwVmRhYS0+Y2hhbm5lbFR5cGUgIT0gREFBKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorCisgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsQ1RSTDEsMHg4MCk7CisgIHJldHVybiBSQ19OT05FOworfQorCisvKgorKiogRnVuY3Rpb246ICBWZGFhX1JlYWRGRFRTdGF0dXMKKyoqCisqKiBEZXNjcmlwdGlvbjoKKyoqIFJlYWQgRkRUIGJpdAorKioKKyoqIFJldHVybnM6CisqKiAwIC0gRnJhbWUgTm90IERldGVjdGVkCisqKiAxIC0gRnJhbWUgRGV0ZWN0ZWQKKyoqCisqLworCitpbnQgVmRhYV9SZWFkRkRUU3RhdHVzKHZkYWFDaGFuVHlwZV9wdHIgcFZkYWEpCit7CisgIFRSQUNFUFJJTlQocFZkYWEsICJcbiIsIE5VTEwpOworICByZXR1cm4gKFJlYWRSZWcocFZkYWFIVyxwVmRhYS0+Y2hhbm5lbCxMU0lERV9SRVYpICYgMHg0MCk7Cit9CisKKy8qCisqKiBGdW5jdGlvbjogIFZkYWFfUG93ZXJ1cExpbmVzaWRlCisqKgorKiogRGVzY3JpcHRpb246CisqKiBQb3dlciB1cCBsaW5lc2lkZSBkZXZpY2UKKyoqCisqLworCitpbnQgVmRhYV9Qb3dlcnVwTGluZXNpZGUodmRhYUNoYW5UeXBlX3B0ciBwVmRhYSkKK3sKKyAgdUludDggZGF0YTsgCisKKyAgVFJBQ0VQUklOVChwVmRhYSwgIlxuIiwgTlVMTCk7CisgIGlmKHBWZGFhLT5jaGFubmVsVHlwZSAhPSBEQUEpCisgIHsKKyAgICByZXR1cm4gUkNfSUdOT1JFOworICB9CisKKyAgV3JpdGVSZWcocFZkYWFIVyxwVmRhYS0+Y2hhbm5lbCxEQUFfQ1RSTDIsMCk7IC8qIFBvd2VydXAgbGluZXNpZGUgZGV2aWNlICovCisgIC8qIFdlIGRvIGEgZG91YmxlIHJlYWQgdG8gZ2l2ZSB0aGUgZnJvbnQgZW5kIHRpbWUgdG8gcG93ZXIgdXAgYW5kIHN5bmMgdXAgd2l0aCB0aGUgc3lzdGVtIHNpZGUuLiAqLworICBkYXRhID0gUmVhZFJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLExTSURFX1JFVik7CisgIGRhdGEgPSAwOworICBkYXRhID0gUmVhZFJlZyhwVmRhYUhXLHBWZGFhLT5jaGFubmVsLExTSURFX1JFVik7CisgIHBWZGFhLT5kZXZpY2VJZC0+bHNSZXY9ICgoZGF0YSYweDNDKT4+Mik7CisgIGRhdGEgPSBwVmRhYS0+UmVhZFJlZ1gocFZkYWEtPnBWZGFhSFdYLHBWZGFhLT5jaGFubmVsLFNZU19MSU5FX0RFVl9SRVYpOworICBwVmRhYS0+ZGV2aWNlSWQtPmxzVHlwZT0gKChkYXRhJn4oMHhGKSk+PjQpOworCisgIHJldHVybiBSQ19OT05FOworfQorCisvKgorKiogRnVuY3Rpb246ICBWZGFhX1Bvd2VyZG93bkxpbmVzaWRlCisqKgorKiogRGVzY3JpcHRpb246CisqKiBQb3dlciBkb3duIGxpbmVzaWRlIGRldmljZQorKioKKyovCisKK2ludCBWZGFhX1Bvd2VyZG93bkxpbmVzaWRlKHZkYWFDaGFuVHlwZV9wdHIgcFZkYWEpCit7CisgIFRSQUNFUFJJTlQocFZkYWEsICJcbiIsIE5VTEwpOworICBpZihwVmRhYS0+Y2hhbm5lbFR5cGUgIT0gREFBKQorICB7CisgICAgcmV0dXJuIFJDX0lHTk9SRTsKKyAgfQorCisgIFdyaXRlUmVnKHBWZGFhSFcscFZkYWEtPmNoYW5uZWwsREFBX0NUUkwyLDB4MTApOworICByZXR1cm4gUkNfTk9ORTsKK30KKworLyoKKyoqIEZ1bmN0aW9uOiBWZGFhX1ByaW50RGVidWdEYXRhCisqKgorKiogRGVzY3JpcHRpb246CisqKiBEdW1wIG9mIFZEQUEgcmVnaXN0ZXIgc3BhY2UKKyoqCisqKiBJbnB1dCBQYXJhbWV0ZXJzOgorKiogcFZkYWE6ICAgICAgIHBvaW50ZXIgdG8gU2lWb2ljZUNoYW5UeXBlIG9yIHZkYWFDaGFuVHlwZQorKioKKyovCisKK2ludCBWZGFhX1ByaW50RGVidWdEYXRhICh2ZGFhQ2hhblR5cGUgKnBWZGFhKQoreworI2lmZGVmIEVOQUJMRV9ERUJVRworICBpbnQgaTsKKyAgZm9yIChpPTA7IGk8NjA7IGkrKykKKyAgeworICAgIExPR1BSSU5UICgiJXNSZWdpc3RlciAlZCA9ICVYXG4iLExPR1BSSU5UX1BSRUZJWCxpLFJlYWRSZWcocFZkYWFIVywKKyAgICAgICAgICAgICAgcFZkYWEtPmNoYW5uZWwsaSkpOworICB9CisjZW5kaWYKKyAgcmV0dXJuIFJDX05PTkU7Cit9CisKKy8qCisqKiBGdW5jdGlvbjogVmRhYV9Jbml0TGluZUluVXNlQ2hlY2sKKyoqCisqKiBEZXNjcmlwdGlvbjoKKyoqIFNldCBsaW5lIGluIHVzZSB0ZXN0IGxpbWl0cworKioKKyoqIElucHV0IFBhcmFtZXRlcnM6CisqKiBsaXVDZmc6ICAgICAgcG9pbnRlciB0byB2ZGFhX0xJVV9Db25maWcKKyoqIG1pbk9uVjogICAgICBtaW5pbXVtIGFjY2VwdGFibGUgb25ob29rIHZvbHRhZ2UgKGJlbG93IGluZGljYXRlcyBwYXJhbGxlbCBoYW5kc2V0KQorKiogbWluT2ZmVjogICAgIG1pbmltdW0gYWNjZXB0YWJsZSBvZmZob29rIHZvbHRhZ2UgKGJlbG93IGluZGljYXRlcyBwYXJhbGxlbCBoYW5kc2V0KQorKiogbWluT2ZmSTogICAgIG1pbmltdW0gYWNjZXB0YWJsZSBvZmZob29rIGxvb3AgY3VycmVudCAoYmVsb3cgaW5kaWNhdGVzIHBhcmFsbGVsIGhhbmRzZXQpCisqKgorKi8KKworaW50IFZkYWFfSW5pdExpbmVJblVzZUNoZWNrKHZkYWFfTElVX0NvbmZpZyAqbGl1Q2ZnLCBpbnQ4IG1pbk9uViwgaW50OCBtaW5PZmZWLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDE2IG1pbk9mZkkpCit7CisgIFRSQUNFUFJJTlRfTk9DSEFOKCJtaW4wblYgPSAlZCBtaW5vZmZWID0gJWQgbWluT2ZmSSA9ICVkXG4iLCBtaW5PblYsIG1pbk9mZlYsCisgICAgICAgICAgICAgICAgICAgIG1pbk9mZkkpOworICBsaXVDZmctPnN0YXR1cyA9IFBBUl9IQU5EU0VUX05PVF9ERVRFQ1RFRDsKKyAgbGl1Q2ZnLT5taW5fb25ob29rX3Zsb29wID0gbWluT25WOworICBsaXVDZmctPm1pbl9vZmZob29rX3Zsb29wID0gbWluT2ZmVjsKKyAgbGl1Q2ZnLT5taW5fb2ZmaG9va19pbG9vcCA9IG1pbk9mZkk7CisgIHJldHVybiBSQ19OT05FOworfQorCisvKgorKiogRnVuY3Rpb246IFZkYWFfQ2hlY2tGb3JMaW5lSW5Vc2UKKyoqCisqKiBEZXNjcmlwdGlvbjoKKyoqIE1vbml0b3IgTFZDUyB0byBkZXRlY3QgaW50cnVzaW9uIG9yIHBhcmFsbGVsIGhhbmRzZXQKKyoqCisqKiBJbnB1dCBQYXJhbWV0ZXJzOgorKiogcFZkYWE6ICAgICAgIHBvaW50ZXIgdG8gU2lWb2ljZUNoYW5UeXBlIG9yIHZkYWFDaGFuVHlwZQorKiogbGl1Q2ZnOiAgICAgIHBvaW50ZXIgdG8gdmRhYV9MSVVfQ29uZmlnCisqKgorKiogT3V0cHV0IFBhcmFtZXRlcnM6CisqKgorKiogUmV0dXJuOgorKiogVkRBQV9PTkhPT0sgICAgLSAgIGxpbmUgaXMgb25ob29rCisqKiBWREFBX09GRkhPT0sgICAtICAgbGluZSBpcyBvZmZob29rIChpbiB1c2UpCisqKgorKi8KKwordUludDggVmRhYV9DaGVja0ZvckxpbmVJblVzZSh2ZGFhQ2hhblR5cGUgKnBWZGFhLCB2ZGFhX0xJVV9Db25maWcgKmxpdUNmZykKK3sKKyAgaW50OCB2bG9vcDsKKyAgaW50MTYgaWxvb3A7CisKKyAgVFJBQ0VQUklOVChwVmRhYSwgIlxuIiwgTlVMTCk7CisgIGlmKHBWZGFhLT5jaGFubmVsVHlwZSAhPSBEQUEpCisgIHsKKyAgICByZXR1cm4gUkNfSUdOT1JFOworICB9CisKKyAgLyogQ2hlY2sgdm9sdGFnZSBhbmQgY3VycmVudCAqLworICBWZGFhX1JlYWRMaW5lZmVlZFN0YXR1cyhwVmRhYSwgJnZsb29wLCZpbG9vcCk7CisgIGlmKHZsb29wIDwgMCkKKyAgeworICAgIHZsb29wICo9IC0xOworICB9CisgIGxpdUNmZy0+bWVhc3VyZWRfaWxvb3AgPSBpbG9vcDsKKyAgbGl1Q2ZnLT5tZWFzdXJlZF92bG9vcCA9IHZsb29wOworICBsaXVDZmctPnN0YXR1cyA9IFBBUl9IQU5EU0VUX05PVF9ERVRFQ1RFRDsKKworICAvKiBSZWFkIGhvb2tzd2l0Y2ggc3RhdHVzICovCisgIGlmKFZkYWFfR2V0SG9va1N0YXR1cyhwVmRhYSkgPT0gVkRBQV9PRkZIT09LKQorICB7CisgICAgaWYoKHZsb29wIDwgbGl1Q2ZnLT5taW5fb2ZmaG9va192bG9vcCl8fChpbG9vcCA8IGxpdUNmZy0+bWluX29mZmhvb2tfaWxvb3ApKQorICAgIHsKKyAgICAgIGxpdUNmZy0+c3RhdHVzID0gUEFSX0hBTkRTRVRfREVURUNURUQ7CisgICAgfQorCisgICAgcmV0dXJuIFZEQUFfT0ZGSE9PSzsKKyAgfQorICBlbHNlCisgIHsKKyAgICBpZih2bG9vcCA8IGxpdUNmZy0+bWluX29uaG9va192bG9vcCkKKyAgICB7CisgICAgICBsaXVDZmctPnN0YXR1cyA9IFBBUl9IQU5EU0VUX0RFVEVDVEVEOworICAgIH0KKworICAgIHJldHVybiBWREFBX09OSE9PSzsKKyAgfQorfQorCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9zcmMvdmRhYV9jb25zdGFudHMuYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL2NvZGVjcy9zaTMyMTh4L3NyYy92ZGFhX2NvbnN0YW50cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNDYwNmIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9jb2RlY3Mvc2kzMjE4eC9zcmMvdmRhYV9jb25zdGFudHMuYwpAQCAtMCwwICsxLDIwMSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCisvKg0KKyAqIFNpMzIxN3ggUHJvU0xJQyBBUEkgQ29uZmlndXJhdGlvbiBUb29sIFZlcnNpb24gNC4yLjENCisgKiBMYXN0IFVwZGF0ZWQgaW4gQVBJIFJlbGVhc2U6IDkuMi4wDQorICogc291cmNlIFhNTCBmaWxlOiBzaTMyMTd4X0ZMQktfR0RSVl9jb25zdGFudHMueG1sDQorICoNCisgKiBBdXRvIGdlbmVyYXRlZCBmaWxlIGZyb20gY29uZmlndXJhdGlvbiB0b29sLg0KKyAqLw0KKw0KKyNpbmNsdWRlICIuLi9pbmMvdmRhYS5oIg0KKw0KK3ZkYWFfR2VuZXJhbF9DZmcgVmRhYV9HZW5lcmFsX0NvbmZpZ3VyYXRpb24gID0gew0KKyAgICBJTlRFX0RJU0FCTEVELA0KKyAgICBJTlRFX0FDVElWRV9MT1csDQorICAgIFJFU19DQUxfRU5BQkxFRCwNCisgICAgRlNfOEtIWiwNCisgICAgRk9IXzEyOCwNCisgICAgTFZTX0ZPUkNFX0VOQUJMRUQsDQorICAgIENWU19DVVJSRU5ULA0KKyAgICBDVlBfQUJPVkUsDQorICAgIEdDRV9ESVNBQkxFRCwNCisgICAgSUlSX0RJU0FCTEVELA0KKyAgICBGVUxMMl9FTkFCTEVELA0KKyAgICBGVUxMX0RJU0FCTEVELA0KKyAgICBGSUxUX0hQRl8yMDBIWiwNCisgICAgUkcxX0RJU0FCTEVELA0KKyAgICBQV01fREVMVEFfU0lHTUEsDQorICAgIFBXTV9ESVNBQkxFRCwNCisgICAgU1BJTV9UUklfQ1MNCit9Ow0KKw0KK3ZkYWFfQ291bnRyeV9DZmcgVmRhYV9Db3VudHJ5X1ByZXNldHNbXSA9ew0KKyAgICB7DQorICAgIFJaX01BWCwNCisgICAgRENfNTAsDQorICAgIEFDXzYwMCwNCisgICAgRENWM181LA0KKyAgICBNSU5JXzEwTUEsDQorICAgIElMSU1fRElTQUJMRUQsDQorICAgIE9IU19MRVNTX1RIQU5fMF81TVMsDQorICAgIEhZQlJJRF9FTkFCTEVEDQorICAgIH0sICAvKiBDT1VfVVNBICovDQorICAgIHsNCisgICAgUlpfTUFYLA0KKyAgICBEQ181MCwNCisgICAgQUNfMjcwX183NTBfMTUwLA0KKyAgICBEQ1YzXzUsDQorICAgIE1JTklfMTBNQSwNCisgICAgSUxJTV9FTkFCTEVELA0KKyAgICBPSFNfM01TLA0KKyAgICBIWUJSSURfRU5BQkxFRA0KKyAgICB9LCAgLyogQ09VX0dFUk1BTlkgKi8NCisgICAgew0KKyAgICBSWl9NQVgsDQorICAgIERDXzUwLA0KKyAgICBBQ18yMDBfXzY4MF8xMDAsDQorICAgIERDVjNfNSwNCisgICAgTUlOSV8xME1BLA0KKyAgICBJTElNX0RJU0FCTEVELA0KKyAgICBPSFNfTEVTU19USEFOXzBfNU1TLA0KKyAgICBIWUJSSURfRU5BQkxFRA0KKyAgICB9LCAgLyogQ09VX0NISU5BICovDQorICAgIHsNCisgICAgUlpfTUFYLA0KKyAgICBEQ181MCwNCisgICAgQUNfMjIwX184MjBfMTIwLA0KKyAgICBEQ1YzXzIsDQorICAgIE1JTklfMTJNQSwNCisgICAgSUxJTV9ESVNBQkxFRCwNCisgICAgT0hTXzI2TVMsDQorICAgIEhZQlJJRF9FTkFCTEVEDQorICAgIH0gICAvKiBDT1VfQVVTVFJBTElBICovDQorfTsNCisNCit2ZGFhX2F1ZGlvR2Fpbl9DZmcgVmRhYV9hdWRpb0dhaW5fUHJlc2V0c1tdID17DQorICAgIHsNCisgICAgMCwgICAgLyogbXV0ZSAqLw0KKyAgICBYR0FfR0FJTiwgICAgLyogeFhHQTIgKi8NCisgICAgMCwgICAgLyogeFhHMiAqLw0KKyAgICBYR0FfR0FJTiwgICAgLyogeFhHQTMgKi8NCisgICAgMCwgICAgLyogeFhHMyAqLw0KKyAgICA2NCwgICAgLyogQXhNICovDQorICAgIDAgICAgIC8qIGNwRW4gKi8NCisgICAgfSwgIC8qIEFVRElPX0dBSU5fMERCICovDQorICAgIHsNCisgICAgMCwgICAgLyogbXV0ZSAqLw0KKyAgICBYR0FfQVRURU4sICAgIC8qIHhYR0EyICovDQorICAgIDQsICAgIC8qIHhYRzIgKi8NCisgICAgWEdBX0dBSU4sICAgIC8qIHhYR0EzICovDQorICAgIDAsICAgIC8qIHhYRzMgKi8NCisgICAgNjQsICAgIC8qIEF4TSAqLw0KKyAgICAwICAgICAvKiBjcEVuICovDQorICAgIH0sICAvKiBBVURJT19BVFRFTl80REIgKi8NCisgICAgew0KKyAgICAwLCAgICAvKiBtdXRlICovDQorICAgIFhHQV9BVFRFTiwgICAgLyogeFhHQTIgKi8NCisgICAgNiwgICAgLyogeFhHMiAqLw0KKyAgICBYR0FfR0FJTiwgICAgLyogeFhHQTMgKi8NCisgICAgMCwgICAgLyogeFhHMyAqLw0KKyAgICA2NCwgICAgLyogQXhNICovDQorICAgIDAgICAgIC8qIGNwRW4gKi8NCisgICAgfSwgIC8qIEFVRElPX0FUVEVOXzZEQiAqLw0KKyAgICB7DQorICAgIDAsICAgIC8qIG11dGUgKi8NCisgICAgWEdBX0FUVEVOLCAgICAvKiB4WEdBMiAqLw0KKyAgICAxMSwgICAgLyogeFhHMiAqLw0KKyAgICBYR0FfR0FJTiwgICAgLyogeFhHQTMgKi8NCisgICAgMCwgICAgLyogeFhHMyAqLw0KKyAgICA2NCwgICAgLyogQXhNICovDQorICAgIDAgICAgIC8qIGNwRW4gKi8NCisgICAgfSAgIC8qIEFVRElPX0FUVEVOXzExREIgKi8NCit9Ow0KKw0KK3ZkYWFfUmluZ19EZXRlY3RfQ2ZnIFZkYWFfUmluZ19EZXRlY3RfUHJlc2V0c1tdID17DQorICAgIHsNCisgICAgUkRMWV81MTJNUywNCisgICAgUlRfXzEzXzVWUk1TXzE2XzVWUk1TLA0KKyAgICAxMiwgICAgLyogUk1YICovDQorICAgIFJUT18xNDA4TVMsDQorICAgIFJDQ182NDBNUywNCisgICAgUk5HVl9ESVNBQkxFRCwNCisgICAgMTcsICAgIC8qIFJBUyAqLw0KKyAgICBSRldFX0hBTEZfV0FWRSwNCisgICAgUkRJX0JFR19FTkRfQlVSU1QsIA0KKyAgICBSR0RUX0FDVElWRV9MT1cgDQorICAgIH0sICAvKiBSSU5HX0RFVF9OT1ZBTF9MT1dWICovDQorICAgIHsNCisgICAgUkRMWV81MTJNUywNCisgICAgUlRfXzQwXzVWUk1TXzQ5XzVWUk1TLA0KKyAgICAxMiwgICAgLyogUk1YICovDQorICAgIFJUT18xNDA4TVMsDQorICAgIFJDQ182NDBNUywNCisgICAgUk5HVl9FTkFCTEVELA0KKyAgICAxNywgICAgLyogUkFTICovDQorICAgIFJGV0VfUk5HVl9SSU5HX0VOViwNCisgICAgUkRJX0JFR19FTkRfQlVSU1QsIA0KKyAgICBSR0RUX0FDVElWRV9MT1cgDQorICAgIH0gICAvKiBSSU5HX0RFVF9WQUxfSElHSFYgKi8NCit9Ow0KKw0KK3ZkYWFfUENNX0NmZyBWZGFhX1BDTV9QcmVzZXRzW10gPXsNCisgICAgew0KKyAgICBVX0xBVywNCisgICAgUENMS18xX1BFUl9CSVQsDQorICAgIFRSSV9QT1NfRURHRQ0KKyAgICB9LCAgLyogREFBX1BDTV84VUxBVyAqLw0KKyAgICB7DQorICAgIEFfTEFXLA0KKyAgICBQQ0xLXzFfUEVSX0JJVCwNCisgICAgVFJJX1BPU19FREdFDQorICAgIH0sICAvKiBEQUFfUENNXzhBTEFXICovDQorICAgIHsNCisgICAgTElORUFSXzE2X0JJVCwNCisgICAgUENMS18xX1BFUl9CSVQsDQorICAgIFRSSV9QT1NfRURHRQ0KKyAgICB9ICAgLyogREFBX1BDTV8xNkxJTiAqLw0KK307DQorDQordmRhYV9IeWJyaWRfQ2ZnIFZkYWFfSHlicmlkX1ByZXNldHNbXSA9ew0KKyAgICB7DQorICAgICAgIDAsICAgIC8qIEhZQjEgKi8NCisgICAgIDI1NCwgICAgLyogSFlCMiAqLw0KKyAgICAgICAwLCAgICAvKiBIWUIzICovDQorICAgICAgIDEsICAgIC8qIEhZQjQgKi8NCisgICAgIDI1NSwgICAgLyogSFlCNSAqLw0KKyAgICAgICAxLCAgICAvKiBIWUI2ICovDQorICAgICAgIDAsICAgIC8qIEhZQjcgKi8NCisgICAgICAgMCAgICAvKiBIWUI4ICovDQorICAgIH0sICAvKiBIWUJfNjAwXzBfMF81MDBGVF8yNEFXRyAqLw0KKyAgICB7DQorICAgICAgIDQsICAgIC8qIEhZQjEgKi8NCisgICAgIDI0NiwgICAgLyogSFlCMiAqLw0KKyAgICAgMjQyLCAgICAvKiBIWUIzICovDQorICAgICAgIDQsICAgIC8qIEhZQjQgKi8NCisgICAgIDI1NCwgICAgLyogSFlCNSAqLw0KKyAgICAgMjU1LCAgICAvKiBIWUI2ICovDQorICAgICAgIDEsICAgIC8qIEhZQjcgKi8NCisgICAgIDI1NSAgICAvKiBIWUI4ICovDQorICAgIH0sICAvKiBIWUJfMjcwXzc1MF8xNTBfNTAwRlRfMjRBV0cgKi8NCisgICAgew0KKyAgICAgICA0LCAgICAvKiBIWUIxICovDQorICAgICAyNDUsICAgIC8qIEhZQjIgKi8NCisgICAgIDI0MywgICAgLyogSFlCMyAqLw0KKyAgICAgICA3LCAgICAvKiBIWUI0ICovDQorICAgICAyNTMsICAgIC8qIEhZQjUgKi8NCisgICAgICAgMCwgICAgLyogSFlCNiAqLw0KKyAgICAgICAxLCAgICAvKiBIWUI3ICovDQorICAgICAyNTUgICAgLyogSFlCOCAqLw0KKyAgICB9LCAgLyogSFlCXzIwMF82ODBfMTAwXzUwMEZUXzI0QVdHICovDQorICAgIHsNCisgICAgICAgNCwgICAgLyogSFlCMSAqLw0KKyAgICAgMjQ0LCAgICAvKiBIWUIyICovDQorICAgICAyNDEsICAgIC8qIEhZQjMgKi8NCisgICAgICAgNiwgICAgLyogSFlCNCAqLw0KKyAgICAgMjUzLCAgICAvKiBIWUI1ICovDQorICAgICAyNTUsICAgIC8qIEhZQjYgKi8NCisgICAgICAgMiwgICAgLyogSFlCNyAqLw0KKyAgICAgMjU1ICAgIC8qIEhZQjggKi8NCisgICAgfSAgIC8qIEhZQl8yMjBfODIwXzEyMF81MDBGVF8yNEFXRyAqLw0KK307DQorDQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvY29kZWNzL3NpMzIxOHgvdGltZXIuaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL2NvZGVjcy9zaTMyMTh4L3RpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJiOGEwMQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL2NvZGVjcy9zaTMyMTh4L3RpbWVyLmgKQEAgLTAsMCArMSw4OSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKy8qCisgKiAkSWQ6IFRpbWVyLmggMTA5IDIwMDgtMTAtMjIgMTk6NDU6MDlaIGxham9yZGFuQFNJTEFCUy5DT00gJAorICogCisgKiBUaGlzIGZpbGUgaXMgc3lzdGVtIHNwZWNpZmljIGFuZCBzaG91bGQgYmUgZWRpdGVkIGZvciB5b3VyIGhhcmR3YXJlIHBsYXRmb3JtCisgKgorICogVGhpcyBmaWxlIGlzIHVzZWQgYnkgcHJvc2xpY190aW1lcl9pbnRmLmggYW5kIHByb3NsaWNfc3BpR2NpLmgKKyAqLworI2lmbmRlZiBUSU1FX1RZUEVfSAorI2RlZmluZSBUSU1FX1RZUEVfSAorCit0eXBlZGVmIGxvbmcgbG9uZyBfaW50NjQ7CisKKy8qCisqKiBTeXN0ZW0gdGltZXIgaW50ZXJmYWNlIHN0cnVjdHVyZSAKKyovCit0eXBlZGVmIHN0cnVjdHsKKwlfaW50NjQgdGlja3NQZXJTZWNvbmQ7Cit9IHN5c3RlbVRpbWVyX1M7CisKKy8qCisqKiBTeXN0ZW0gdGltZSBzdGFtcAorKi8KK3R5cGVkZWYgc3RydWN0eworCV9pbnQ2NCB0aW1lOworfSB0aW1lU3RhbXA7CisKKy8qCisqKiBGdW5jdGlvbjogU1lTVEVNX1RpbWVySW5pdAorKioKKyoqIERlc2NyaXB0aW9uOiAKKyoqIEluaXRpYWxpemVzIHRoZSB0aW1lciB1c2VkIGluIHRoZSBkZWxheSBhbmQgdGltZSBtZWFzdXJlbWVudCBmdW5jdGlvbnMKKyoqIGJ5IGRvaW5nIGEgbG9uZyBpbmFjY3VyYXRlIHNsZWVwIGFuZCBjb3VudGluZyB0aGUgdGlja3MKKyoqCisqKiBJbnB1dCBQYXJhbWV0ZXJzOiAKKyoqCisqKiBSZXR1cm46CisqKiBub25lCisqLwordm9pZCBUaW1lckluaXQgKHN5c3RlbVRpbWVyX1MgKnBUaW1lck9iaik7CisvKgorKiogRnVuY3Rpb246IERlbGF5V3JhcHBlcgorKioKKyoqIERlc2NyaXB0aW9uOiAKKyoqIFdhaXRzIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1zCisqKgorKiogSW5wdXQgUGFyYW1ldGVyczogCisqKiBoVGltZXI6IHRpbWVyIHBvaW50ZXIKKyoqIHRpbWVJbk1zOiB0aW1lIGluIG1zIHRvIHdhaXQKKyoqCisqKiBSZXR1cm46CisqKiBub25lCisqLworaW50IHRpbWVfRGVsYXlXcmFwcGVyICh2b2lkICpoVGltZXIsIGludCB0aW1lSW5Ncyk7CisKKworLyoKKyoqIEZ1bmN0aW9uOiBUaW1lRWxhcHNlZFdyYXBwZXIKKyoqCisqKiBEZXNjcmlwdGlvbjogCisqKiBDYWxjdWxhdGVzIG51bWJlciBvZiBtcyB0aGF0IGhhdmUgZWxhcHNlZAorKioKKyoqIElucHV0IFBhcmFtZXRlcnM6IAorKiogaFRJbWVyOiBwb2ludGVyIHRvIHRpbWVyIG9iamVjdAorKiogc3RhcnRUaW1lOiB0aW1lciB2YWx1ZSB3aGVuIGZ1bmN0aW9uIGxhc3QgY2FsbGVkCisqKiB0aW1lSW5NczogcG9pbnRlciB0byB0aW1lIGVsYXBzZWQKKyoqCisqKiBSZXR1cm46CisqKiB0aW1lSW5NczogdGltZSBlbGFwc2VkIHNpbmNlIHN0YXJ0IHRpbWUKKyovCitpbnQgdGltZV9UaW1lRWxhcHNlZFdyYXBwZXIgKHZvaWQgKmhUaW1lciwgdm9pZCAqc3RhcnRUaW1lLCBpbnQgKnRpbWVJbk1zKTsKKworaW50IHRpbWVfR2V0VGltZVdyYXBwZXIgKHZvaWQgKmhUaW1lciwgdm9pZCAqdGltZSk7CisjZW5kaWYKKy8qCisqKiAkTG9nOiBUaW1lci5oLHYgJAorKiogUmV2aXNpb24gMS4yICAyMDA3LzAyLzIxIDE2OjU1OjE4ICBsYWpvcmRhbgorKiogbW92ZWQgZnVuY3Rpb24gcHJvdG90eXBlcyBoZXJlCisqKgorKiogUmV2aXNpb24gMS4xICAyMDA3LzAyLzE2IDIzOjU1OjA3ICBsYWpvcmRhbgorKiogbm8gbWVzc2FnZQorKioKKyoqIFJldmlzaW9uIDEuMiAgMjAwNy8wMi8xNSAyMzozMzoyNSAgbGFqb3JkYW4KKyoqIG5vIG1lc3NhZ2UKKyoqCisqKiBSZXZpc2lvbiAxLjEuMS4xICAyMDA2LzA3LzEzIDIwOjI2OjA4ICBsYWpvcmRhbgorKiogbm8gbWVzc2FnZQorKioKKyovCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9tZWRpYXRlay9tdDc5eHgvTWFrZWZpbGUgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9tZWRpYXRlay9tdDc5eHgvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU4YWQ2MwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL21lZGlhdGVrL210Nzl4eC9NYWtlZmlsZQpAQCAtMCwwICsxLDExIEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisKKyMgcGxhdGZvcm0gZHJpdmVyCitzbmQtc29jLW10Nzl4eC1hZmUtb2JqcyA6PSBcCisJbXQ3OXh4LWFmZS1wY20ubyBcCisJbXQ3OXh4LWFmZS1jbGsubyBcCisJbXQ3OXh4LWRhaS1ldGRtLm8KKworb2JqLSQoQ09ORklHX1NORF9TT0NfTVQ3OVhYKSArPSBzbmQtc29jLW10Nzl4eC1hZmUubworb2JqLSQoQ09ORklHX1NORF9TT0NfTVQ3OVhYX1dNODk2MCkgKz0gbXQ3OXh4LXdtODk2MC5vCitvYmotJChDT05GSUdfU05EX1NPQ19NVDc5WFhfU0kzMjE4WCkgKz0gbXQ3OXh4LXNpMzIxOHgubwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvbWVkaWF0ZWsvbXQ3OXh4L210Nzl4eC1hZmUtY2xrLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9tZWRpYXRlay9tdDc5eHgvbXQ3OXh4LWFmZS1jbGsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjEzYzQyCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvbWVkaWF0ZWsvbXQ3OXh4L210Nzl4eC1hZmUtY2xrLmMKQEAgLTAsMCArMSwxMjEgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvLworLy8gbXQ3OXh4LWFmZS1jbGsuYyAgLS0gIE1lZGlhdGVrIDc5eHggYWZlIGNsb2NrIGN0cmwKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMjEgTWVkaWFUZWsgSW5jLgorLy8gQXV0aG9yOiBWaWMgV3UgPHZpYy53dUBtZWRpYXRlay5jb20+CisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworI2luY2x1ZGUgIm10Nzl4eC1hZmUtY29tbW9uLmgiCisjaW5jbHVkZSAibXQ3OXh4LWFmZS1jbGsuaCIKKyNpbmNsdWRlICJtdDc5eHgtcmVnLmgiCisKK2VudW0geworCUNLX0lORlJBX0FVRF9CVVNfQ0sgPSAwLAorCUNLX0lORlJBX0FVRF8yNk1fQ0ssCisJQ0tfSU5GUkFfQVVEX0xfQ0ssCisJQ0tfSU5GUkFfQVVEX0FVRF9DSywKKwlDS19JTkZSQV9BVURfRUcyX0NLLAorCUNMS19OVU0KK307CisKK3N0YXRpYyBjb25zdCBjaGFyICphdWRfY2xrc1tDTEtfTlVNXSA9IHsKKwlbQ0tfSU5GUkFfQVVEX0JVU19DS10gPSAiYXVkX2J1c19jayIsCisJW0NLX0lORlJBX0FVRF8yNk1fQ0tdID0gImF1ZF8yNm1fY2siLAorCVtDS19JTkZSQV9BVURfTF9DS10gPSAiYXVkX2xfY2siLAorCVtDS19JTkZSQV9BVURfQVVEX0NLXSA9ICJhdWRfYXVkX2NrIiwKKwlbQ0tfSU5GUkFfQVVEX0VHMl9DS10gPSAiYXVkX2VnMl9jayIsCit9OworCitpbnQgbXQ3OXh4X2luaXRfY2xvY2soc3RydWN0IG10a19iYXNlX2FmZSAqYWZlKQoreworCXN0cnVjdCBtdDc5eHhfYWZlX3ByaXZhdGUgKmFmZV9wcml2ID0gYWZlLT5wbGF0Zm9ybV9wcml2OworCWludCBpOworCisJYWZlX3ByaXYtPmNsayA9IGRldm1fa2NhbGxvYyhhZmUtPmRldiwgQ0xLX05VTSwgc2l6ZW9mKCphZmVfcHJpdi0+Y2xrKSwKKwkJCQkgICAgIEdGUF9LRVJORUwpOworCWlmICghYWZlX3ByaXYtPmNsaykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKGkgPSAwOyBpIDwgQ0xLX05VTTsgaSsrKSB7CisJCWFmZV9wcml2LT5jbGtbaV0gPSBkZXZtX2Nsa19nZXQoYWZlLT5kZXYsIGF1ZF9jbGtzW2ldKTsKKwkJaWYgKElTX0VSUihhZmVfcHJpdi0+Y2xrW2ldKSkgeworCQkJZGV2X2VycihhZmUtPmRldiwgIiVzKCksIGRldm1fY2xrX2dldCAlcyBmYWlsLFwKKwkJCQlyZXQgJWxkXG4iLCBfX2Z1bmNfXywgYXVkX2Nsa3NbaV0sCisJCQkJUFRSX0VSUihhZmVfcHJpdi0+Y2xrW2ldKSk7CisJCQlyZXR1cm4gUFRSX0VSUihhZmVfcHJpdi0+Y2xrW2ldKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitpbnQgbXQ3OXh4X2FmZV9lbmFibGVfY2xvY2soc3RydWN0IG10a19iYXNlX2FmZSAqYWZlKQoreworCXN0cnVjdCBtdDc5eHhfYWZlX3ByaXZhdGUgKmFmZV9wcml2ID0gYWZlLT5wbGF0Zm9ybV9wcml2OworCWludCByZXQ7CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoYWZlX3ByaXYtPmNsa1tDS19JTkZSQV9BVURfQlVTX0NLXSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGFmZS0+ZGV2LCAiJXMoKSwgY2xrX3ByZXBhcmVfZW5hYmxlICVzIGZhaWwgJWRcbiIsCisJCQlfX2Z1bmNfXywgYXVkX2Nsa3NbQ0tfSU5GUkFfQVVEX0JVU19DS10sIHJldCk7CisJCWdvdG8gQ0tfSU5GUkFfQVVEX0JVU19DS19FUlI7CisJfQorCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGFmZV9wcml2LT5jbGtbQ0tfSU5GUkFfQVVEXzI2TV9DS10pOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihhZmUtPmRldiwgIiVzKCksIGNsa19wcmVwYXJlX2VuYWJsZSAlcyBmYWlsICVkXG4iLAorCQkJX19mdW5jX18sIGF1ZF9jbGtzW0NLX0lORlJBX0FVRF8yNk1fQ0tdLCByZXQpOworCQlnb3RvIENLX0lORlJBX0FVRF8yNk1fRVJSOworCX0KKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShhZmVfcHJpdi0+Y2xrW0NLX0lORlJBX0FVRF9MX0NLXSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGFmZS0+ZGV2LCAiJXMoKSwgY2xrX3ByZXBhcmVfZW5hYmxlICVzIGZhaWwgJWRcbiIsCisJCQlfX2Z1bmNfXywgYXVkX2Nsa3NbQ0tfSU5GUkFfQVVEX0xfQ0tdLCByZXQpOworCQlnb3RvIENLX0lORlJBX0FVRF9MX0NLX0VSUjsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoYWZlX3ByaXYtPmNsa1tDS19JTkZSQV9BVURfQVVEX0NLXSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGFmZS0+ZGV2LCAiJXMgY2xrX3ByZXBhcmVfZW5hYmxlICVzIGZhaWwgJWRcbiIsCisJCQlfX2Z1bmNfXywgYXVkX2Nsa3NbQ0tfSU5GUkFfQVVEX0FVRF9DS10sIHJldCk7CisJCWdvdG8gQ0tfSU5GUkFfQVVEX0FVRF9DS19FUlI7CisJfQorCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGFmZV9wcml2LT5jbGtbQ0tfSU5GUkFfQVVEX0VHMl9DS10pOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihhZmUtPmRldiwgIiVzIGNsa19wcmVwYXJlX2VuYWJsZSAlcyBmYWlsICVkXG4iLAorCQkJX19mdW5jX18sIGF1ZF9jbGtzW0NLX0lORlJBX0FVRF9FRzJfQ0tdLCByZXQpOworCQlnb3RvIENLX0lORlJBX0FVRF9FRzJfQ0tfRVJSOworCX0KKworCXJldHVybiAwOworCitDS19JTkZSQV9BVURfRUcyX0NLX0VSUjoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoYWZlX3ByaXYtPmNsa1tDS19JTkZSQV9BVURfQVVEX0NLXSk7CitDS19JTkZSQV9BVURfQVVEX0NLX0VSUjoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoYWZlX3ByaXYtPmNsa1tDS19JTkZSQV9BVURfTF9DS10pOworQ0tfSU5GUkFfQVVEX0xfQ0tfRVJSOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShhZmVfcHJpdi0+Y2xrW0NLX0lORlJBX0FVRF8yNk1fQ0tdKTsKK0NLX0lORlJBX0FVRF8yNk1fRVJSOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShhZmVfcHJpdi0+Y2xrW0NLX0lORlJBX0FVRF9CVVNfQ0tdKTsKK0NLX0lORlJBX0FVRF9CVVNfQ0tfRVJSOgorCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtdDc5eHhfYWZlX2VuYWJsZV9jbG9jayk7CisKK2ludCBtdDc5eHhfYWZlX2Rpc2FibGVfY2xvY2soc3RydWN0IG10a19iYXNlX2FmZSAqYWZlKQoreworCXN0cnVjdCBtdDc5eHhfYWZlX3ByaXZhdGUgKmFmZV9wcml2ID0gYWZlLT5wbGF0Zm9ybV9wcml2OworCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGFmZV9wcml2LT5jbGtbQ0tfSU5GUkFfQVVEX0VHMl9DS10pOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShhZmVfcHJpdi0+Y2xrW0NLX0lORlJBX0FVRF9BVURfQ0tdKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoYWZlX3ByaXYtPmNsa1tDS19JTkZSQV9BVURfTF9DS10pOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShhZmVfcHJpdi0+Y2xrW0NLX0lORlJBX0FVRF8yNk1fQ0tdKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoYWZlX3ByaXYtPmNsa1tDS19JTkZSQV9BVURfQlVTX0NLXSk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG10Nzl4eF9hZmVfZGlzYWJsZV9jbG9jayk7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9tZWRpYXRlay9tdDc5eHgvbXQ3OXh4LWFmZS1jbGsuaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL21lZGlhdGVrL210Nzl4eC9tdDc5eHgtYWZlLWNsay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNDI0ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9tZWRpYXRlay9tdDc5eHgvbXQ3OXh4LWFmZS1jbGsuaApAQCAtMCwwICsxLDE3IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworLyoKKyAqIG10Nzl4eC1hZmUtY2xrLmggIC0tICBNZWRpYXRlayA3OXh4IGFmZSBjbG9jayBjdHJsIGRlZmluaXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjEgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBWaWMgV3UgPHZpYy53dUBtZWRpYXRlay5jb20+CisgKi8KKworI2lmbmRlZiBfTVQ3OVhYX0FGRV9DTEtfSF8KKyNkZWZpbmUgX01UNzlYWF9BRkVfQ0xLX0hfCisKK3N0cnVjdCBtdGtfYmFzZV9hZmU7CisKK2ludCBtdDc5eHhfaW5pdF9jbG9jayhzdHJ1Y3QgbXRrX2Jhc2VfYWZlICphZmUpOworaW50IG10Nzl4eF9hZmVfZW5hYmxlX2Nsb2NrKHN0cnVjdCBtdGtfYmFzZV9hZmUgKmFmZSk7CitpbnQgbXQ3OXh4X2FmZV9kaXNhYmxlX2Nsb2NrKHN0cnVjdCBtdGtfYmFzZV9hZmUgKmFmZSk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL21lZGlhdGVrL210Nzl4eC9tdDc5eHgtYWZlLWNvbW1vbi5oIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvbWVkaWF0ZWsvbXQ3OXh4L210Nzl4eC1hZmUtY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc3ZDEwYwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL21lZGlhdGVrL210Nzl4eC9tdDc5eHgtYWZlLWNvbW1vbi5oCkBAIC0wLDAgKzEsNDggQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisvKgorICogbXQ3OXh4LWFmZS1jb21tb24uaCAgLS0gIE1lZGlhdGVrIDc5eHggYXVkaW8gZHJpdmVyIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChjKSAyMDIxIE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogVmljIFd1IDx2aWMud3VAbWVkaWF0ZWsuY29tPgorICovCisKKyNpZm5kZWYgX01UXzc5WFhfQUZFX0NPTU1PTl9IXworI2RlZmluZSBfTVRfNzlYWF9BRkVfQ09NTU9OX0hfCisKKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSAiLi4vY29tbW9uL210ay1iYXNlLWFmZS5oIgorCitlbnVtIHsKKwlNVDc5WFhfTUVNSUZfREwxLAorCU1UNzlYWF9NRU1JRl9WVUwxMiwKKwlNVDc5WFhfTUVNSUZfTlVNLAorCU1UNzlYWF9EQUlfRVRETSA9IE1UNzlYWF9NRU1JRl9OVU0sCisJTVQ3OVhYX0RBSV9OVU0sCit9OworCitlbnVtIHsKKwlNVDc5WFhfSVJRXzAsCisJTVQ3OVhYX0lSUV8xLAorCU1UNzlYWF9JUlFfMiwKKwlNVDc5WFhfSVJRX05VTSwKK307CisKK3N0cnVjdCBjbGs7CisKK3N0cnVjdCBtdDc5eHhfYWZlX3ByaXZhdGUgeworCXN0cnVjdCBjbGsgKipjbGs7CisKKwlpbnQgcG1fcnVudGltZV9ieXBhc3NfcmVnX2N0bDsKKworCS8qIGRhaSAqLworCXZvaWQgKmRhaV9wcml2W01UNzlYWF9EQUlfTlVNXTsKK307CisKK3Vuc2lnbmVkIGludCBtdDc5eHhfYWZlX3JhdGVfdHJhbnNmb3JtKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IHJhdGUpOworCisvKiBkYWkgcmVnaXN0ZXIgKi8KK2ludCBtdDc5eHhfZGFpX2V0ZG1fcmVnaXN0ZXIoc3RydWN0IG10a19iYXNlX2FmZSAqYWZlKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvbWVkaWF0ZWsvbXQ3OXh4L210Nzl4eC1hZmUtcGNtLmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9tZWRpYXRlay9tdDc5eHgvbXQ3OXh4LWFmZS1wY20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzE2MmM3Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvbWVkaWF0ZWsvbXQ3OXh4L210Nzl4eC1hZmUtcGNtLmMKQEAgLTAsMCArMSw2MDcgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvLworLy8gTWVkaWF0ZWsgQUxTQSBTb0MgQUZFIHBsYXRmb3JtIGRyaXZlciBmb3IgNzl4eAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAyMSBNZWRpYVRlayBJbmMuCisvLyBBdXRob3I6IFZpYyBXdSA8dmljLnd1QG1lZGlhdGVrLmNvbT4KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorCisjaW5jbHVkZSAibXQ3OXh4LWFmZS1jb21tb24uaCIKKyNpbmNsdWRlICJtdDc5eHgtYWZlLWNsay5oIgorI2luY2x1ZGUgIm10Nzl4eC1yZWcuaCIKKyNpbmNsdWRlICIuLi9jb21tb24vbXRrLWFmZS1wbGF0Zm9ybS1kcml2ZXIuaCIKKyNpbmNsdWRlICIuLi9jb21tb24vbXRrLWFmZS1mZS1kYWkuaCIKKworZW51bSB7CisJTVRLX0FGRV9SQVRFXzhLID0gMCwKKwlNVEtfQUZFX1JBVEVfMTFLID0gMSwKKwlNVEtfQUZFX1JBVEVfMTJLID0gMiwKKwlNVEtfQUZFX1JBVEVfMTZLID0gNCwKKwlNVEtfQUZFX1JBVEVfMjJLID0gNSwKKwlNVEtfQUZFX1JBVEVfMjRLID0gNiwKKwlNVEtfQUZFX1JBVEVfMzJLID0gOCwKKwlNVEtfQUZFX1JBVEVfNDRLID0gOSwKKwlNVEtfQUZFX1JBVEVfNDhLID0gMTAsCisJTVRLX0FGRV9SQVRFXzg4SyA9IDEzLAorCU1US19BRkVfUkFURV85NksgPSAxNCwKKwlNVEtfQUZFX1JBVEVfMTc2SyA9IDE3LAorCU1US19BRkVfUkFURV8xOTJLID0gMTgsCit9OworCit1bnNpZ25lZCBpbnQgbXQ3OXh4X2FmZV9yYXRlX3RyYW5zZm9ybShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCByYXRlKQoreworCXN3aXRjaCAocmF0ZSkgeworCWNhc2UgODAwMDoKKwkJcmV0dXJuIE1US19BRkVfUkFURV84SzsKKwljYXNlIDExMDI1OgorCQlyZXR1cm4gTVRLX0FGRV9SQVRFXzExSzsKKwljYXNlIDEyMDAwOgorCQlyZXR1cm4gTVRLX0FGRV9SQVRFXzEySzsKKwljYXNlIDE2MDAwOgorCQlyZXR1cm4gTVRLX0FGRV9SQVRFXzE2SzsKKwljYXNlIDIyMDUwOgorCQlyZXR1cm4gTVRLX0FGRV9SQVRFXzIySzsKKwljYXNlIDI0MDAwOgorCQlyZXR1cm4gTVRLX0FGRV9SQVRFXzI0SzsKKwljYXNlIDMyMDAwOgorCQlyZXR1cm4gTVRLX0FGRV9SQVRFXzMySzsKKwljYXNlIDQ0MTAwOgorCQlyZXR1cm4gTVRLX0FGRV9SQVRFXzQ0SzsKKwljYXNlIDQ4MDAwOgorCQlyZXR1cm4gTVRLX0FGRV9SQVRFXzQ4SzsKKwljYXNlIDg4MjAwOgorCQlyZXR1cm4gTVRLX0FGRV9SQVRFXzg4SzsKKwljYXNlIDk2MDAwOgorCQlyZXR1cm4gTVRLX0FGRV9SQVRFXzk2SzsKKwljYXNlIDE3NjQwMDoKKwkJcmV0dXJuIE1US19BRkVfUkFURV8xNzZLOworCWNhc2UgMTkyMDAwOgorCQlyZXR1cm4gTVRLX0FGRV9SQVRFXzE5Mks7CisJZGVmYXVsdDoKKwkJZGV2X3dhcm4oZGV2LCAiJXMoKSwgcmF0ZSAldSBpbnZhbGlkLCB1c2UgJWQhISFcbiIsCisJCQkgX19mdW5jX18sIHJhdGUsIE1US19BRkVfUkFURV80OEspOworCQlyZXR1cm4gTVRLX0FGRV9SQVRFXzQ4SzsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBtdDc5eHhfYWZlX2hhcmR3YXJlID0geworCS5pbmZvID0gU05EUlZfUENNX0lORk9fTU1BUCB8CisJCVNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCwKKwkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwKKwkJICAgU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfAorCQkgICBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSwKKwkucGVyaW9kX2J5dGVzX21pbiA9IDI1NiwKKwkucGVyaW9kX2J5dGVzX21heCA9IDQgKiA0OCAqIDEwMjQsCisJLnBlcmlvZHNfbWluID0gMiwKKwkucGVyaW9kc19tYXggPSAyNTYsCisJLmJ1ZmZlcl9ieXRlc19tYXggPSA4ICogNDggKiAxMDI0LAorCS5maWZvX3NpemUgPSAwLAorfTsKKworc3RhdGljIGludCBtdDc5eHhfbWVtaWZfZnMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICB1bnNpZ25lZCBpbnQgcmF0ZSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfY29tcG9uZW50ICpjb21wb25lbnQgPQorCQlzbmRfc29jX3J0ZGNvbV9sb29rdXAocnRkLCBBRkVfUENNX05BTUUpOworCXN0cnVjdCBtdGtfYmFzZV9hZmUgKmFmZSA9IHNuZF9zb2NfY29tcG9uZW50X2dldF9kcnZkYXRhKGNvbXBvbmVudCk7CisKKwlyZXR1cm4gbXQ3OXh4X2FmZV9yYXRlX3RyYW5zZm9ybShhZmUtPmRldiwgcmF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgbXQ3OXh4X2lycV9mcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSB1bnNpZ25lZCBpbnQgcmF0ZSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfY29tcG9uZW50ICpjb21wb25lbnQgPQorCQlzbmRfc29jX3J0ZGNvbV9sb29rdXAocnRkLCBBRkVfUENNX05BTUUpOworCXN0cnVjdCBtdGtfYmFzZV9hZmUgKmFmZSA9IHNuZF9zb2NfY29tcG9uZW50X2dldF9kcnZkYXRhKGNvbXBvbmVudCk7CisKKwlyZXR1cm4gbXQ3OXh4X2FmZV9yYXRlX3RyYW5zZm9ybShhZmUtPmRldiwgcmF0ZSk7Cit9CisKKyNkZWZpbmUgTVRLX1BDTV9SQVRFUyAoU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCB8XAorCQkgICAgICAgU05EUlZfUENNX1JBVEVfODgyMDAgfFwKKwkJICAgICAgIFNORFJWX1BDTV9SQVRFXzk2MDAwIHxcCisJCSAgICAgICBTTkRSVl9QQ01fUkFURV8xNzY0MDAgfFwKKwkJICAgICAgIFNORFJWX1BDTV9SQVRFXzE5MjAwMCkKKworI2RlZmluZSBNVEtfUENNX0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHxcCisJCQkgU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfFwKKwkJCSBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSkKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9kcml2ZXIgbXQ3OXh4X21lbWlmX2RhaV9kcml2ZXJbXSA9IHsKKwkvKiBGRSBEQUlzOiBtZW1vcnkgaW50ZWZhY2VzIHRvIENQVSAqLworCXsKKwkJLm5hbWUgPSAiREwxIiwKKwkJLmlkID0gTVQ3OVhYX01FTUlGX0RMMSwKKwkJLnBsYXliYWNrID0geworCQkJLnN0cmVhbV9uYW1lID0gIkRMMSIsCisJCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJCS5jaGFubmVsc19tYXggPSAyLAorCQkJLnJhdGVzID0gTVRLX1BDTV9SQVRFUywKKwkJCS5mb3JtYXRzID0gTVRLX1BDTV9GT1JNQVRTLAorCQl9LAorCQkub3BzID0gJm10a19hZmVfZmVfb3BzLAorCX0sCisJeworCQkubmFtZSA9ICJVTDEiLAorCQkuaWQgPSBNVDc5WFhfTUVNSUZfVlVMMTIsCisJCS5jYXB0dXJlID0geworCQkJLnN0cmVhbV9uYW1lID0gIlVMMSIsCisJCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJCS5jaGFubmVsc19tYXggPSAyLAorCQkJLnJhdGVzID0gTVRLX1BDTV9SQVRFUywKKwkJCS5mb3JtYXRzID0gTVRLX1BDTV9GT1JNQVRTLAorCQl9LAorCQkub3BzID0gJm10a19hZmVfZmVfb3BzLAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgbzAxOF9taXhbXSA9IHsKKwlTT0NfREFQTV9TSU5HTEVfQVVUT0RJU0FCTEUoIkkxNTBfU3dpdGNoIiwgQUZFX0NPTk4wMThfNCwgMjIsIDEsIDApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IG8wMTlfbWl4W10gPSB7CisJU09DX0RBUE1fU0lOR0xFX0FVVE9ESVNBQkxFKCJJMTUxX1N3aXRjaCIsIEFGRV9DT05OMDE5XzQsIDIzLCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBtdDc5eHhfbWVtaWZfd2lkZ2V0c1tdID0geworCS8qIERMICovCisJU05EX1NPQ19EQVBNX01JWEVSKCJJMDMyIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIkkwMzMiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCisJLyogVUwgKi8KKwlTTkRfU09DX0RBUE1fTUlYRVIoIk8wMTgiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCQkgICBvMDE4X21peCwgQVJSQVlfU0laRShvMDE4X21peCkpLAorCVNORF9TT0NfREFQTV9NSVhFUigiTzAxOSIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSAgIG8wMTlfbWl4LCBBUlJBWV9TSVpFKG8wMTlfbWl4KSksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBtdDc5eHhfbWVtaWZfcm91dGVzW10gPSB7CisJeyJJMDMyIiwgTlVMTCwgIkRMMSJ9LAorCXsiSTAzMyIsIE5VTEwsICJETDEifSwKKwl7IlVMMSIsIE5VTEwsICJPMDE4In0sCisJeyJVTDEiLCBOVUxMLCAiTzAxOSJ9LAorCXsiTzAxOCIsICJJMTUwX1N3aXRjaCIsICJJMTUwIn0sCisJeyJPMDE5IiwgIkkxNTFfU3dpdGNoIiwgIkkxNTEifSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnRfZHJpdmVyIG10Nzl4eF9hZmVfcGNtX2RhaV9jb21wb25lbnQgPSB7CisJLm5hbWUgPSAibXQ3OXh4LWFmZS1wY20tZGFpIiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2Jhc2VfbWVtaWZfZGF0YSBtZW1pZl9kYXRhW01UNzlYWF9NRU1JRl9OVU1dID0geworCVtNVDc5WFhfTUVNSUZfREwxXSA9IHsKKwkJLm5hbWUgPSAiREwxIiwKKwkJLmlkID0gTVQ3OVhYX01FTUlGX0RMMSwKKwkJLnJlZ19vZnNfYmFzZSA9IEFGRV9ETDBfQkFTRSwKKwkJLnJlZ19vZnNfY3VyID0gQUZFX0RMMF9DVVIsCisJCS5yZWdfb2ZzX2VuZCA9IEFGRV9ETDBfRU5ELAorCQkucmVnX29mc19iYXNlX21zYiA9IEFGRV9ETDBfQkFTRV9NU0IsCisJCS5yZWdfb2ZzX2N1cl9tc2IgPSBBRkVfREwwX0NVUl9NU0IsCisJCS5yZWdfb2ZzX2VuZF9tc2IgPSBBRkVfREwwX0VORF9NU0IsCisJCS5mc19yZWcgPSBBRkVfREwwX0NPTjAsCisJCS5mc19zaGlmdCA9ICBETDBfTU9ERV9TRlQsCisJCS5mc19tYXNrYml0ID0gIERMMF9NT0RFX01BU0ssCisJCS5tb25vX3JlZyA9IEFGRV9ETDBfQ09OMCwKKwkJLm1vbm9fc2hpZnQgPSBETDBfTU9OT19TRlQsCisJCS5lbmFibGVfcmVnID0gQUZFX0RMMF9DT04wLAorCQkuZW5hYmxlX3NoaWZ0ID0gREwwX09OX1NGVCwKKwkJLmhkX3JlZyA9IEFGRV9ETDBfQ09OMCwKKwkJLmhkX3NoaWZ0ID0gREwwX0hEX01PREVfU0ZULAorCQkuaGRfYWxpZ25fcmVnID0gQUZFX0RMMF9DT04wLAorCQkuaGRfYWxpZ25fbXNoaWZ0ID0gREwwX0hBTElHTl9TRlQsCisJCS5wYnVmX3JlZyA9IEFGRV9ETDBfQ09OMCwKKwkJLnBidWZfc2hpZnQgPSBETDBfUEJVRl9TSVpFX1NGVCwKKwkJLm1pbmxlbl9yZWcgPSBBRkVfREwwX0NPTjAsCisJCS5taW5sZW5fc2hpZnQgPSBETDBfTUlOTEVOX1NGVCwKKwl9LAorCVtNVDc5WFhfTUVNSUZfVlVMMTJdID0geworCQkubmFtZSA9ICJWVUwxMiIsCisJCS5pZCA9IE1UNzlYWF9NRU1JRl9WVUwxMiwKKwkJLnJlZ19vZnNfYmFzZSA9IEFGRV9WVUwwX0JBU0UsCisJCS5yZWdfb2ZzX2N1ciA9IEFGRV9WVUwwX0NVUiwKKwkJLnJlZ19vZnNfZW5kID0gQUZFX1ZVTDBfRU5ELAorCQkucmVnX29mc19iYXNlX21zYiA9IEFGRV9WVUwwX0JBU0VfTVNCLAorCQkucmVnX29mc19jdXJfbXNiID0gQUZFX1ZVTDBfQ1VSX01TQiwKKwkJLnJlZ19vZnNfZW5kX21zYiA9IEFGRV9WVUwwX0VORF9NU0IsCisJCS5mc19yZWcgPSBBRkVfVlVMMF9DT04wLAorCQkuZnNfc2hpZnQgPSBWVUwwX01PREVfU0ZULAorCQkuZnNfbWFza2JpdCA9IFZVTDBfTU9ERV9NQVNLLAorCQkubW9ub19yZWcgPSBBRkVfVlVMMF9DT04wLAorCQkubW9ub19zaGlmdCA9IFZVTDBfTU9OT19TRlQsCisJCS5lbmFibGVfcmVnID0gQUZFX1ZVTDBfQ09OMCwKKwkJLmVuYWJsZV9zaGlmdCA9IFZVTDBfT05fU0ZULAorCQkuaGRfcmVnID0gQUZFX1ZVTDBfQ09OMCwKKwkJLmhkX3NoaWZ0ID0gVlVMMF9IRF9NT0RFX1NGVCwKKwkJLmhkX2FsaWduX3JlZyA9IEFGRV9WVUwwX0NPTjAsCisJCS5oZF9hbGlnbl9tc2hpZnQgPSBWVUwwX0hBTElHTl9TRlQsCisJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2Jhc2VfaXJxX2RhdGEgaXJxX2RhdGFbTVQ3OVhYX0lSUV9OVU1dID0geworCVtNVDc5WFhfSVJRXzBdID0geworCQkuaWQgPSBNVDc5WFhfSVJRXzAsCisJCS5pcnFfY250X3JlZyA9IEFGRV9JUlEwX01DVV9DRkcxLAorCQkuaXJxX2NudF9zaGlmdCA9IEFGRV9JUlFfQ05UX1NISUZULAorCQkuaXJxX2NudF9tYXNrYml0ID0gQUZFX0lSUV9DTlRfTUFTSywKKwkJLmlycV9mc19yZWcgPSBBRkVfSVJRMF9NQ1VfQ0ZHMCwKKwkJLmlycV9mc19zaGlmdCA9IElSUV9NQ1VfTU9ERV9TRlQsCisJCS5pcnFfZnNfbWFza2JpdCA9IElSUV9NQ1VfTU9ERV9NQVNLLAorCQkuaXJxX2VuX3JlZyA9IEFGRV9JUlEwX01DVV9DRkcwLAorCQkuaXJxX2VuX3NoaWZ0ID0gSVJRX01DVV9PTl9TRlQsCisJCS5pcnFfY2xyX3JlZyA9IEFGRV9JUlFfTUNVX0NMUiwKKwkJLmlycV9jbHJfc2hpZnQgPSBJUlEwX01DVV9DTFJfU0ZULAorCX0sCisJW01UNzlYWF9JUlFfMV0gPSB7CisJCS5pZCA9IE1UNzlYWF9JUlFfMSwKKwkJLmlycV9jbnRfcmVnID0gQUZFX0lSUTFfTUNVX0NGRzEsCisJCS5pcnFfY250X3NoaWZ0ID0gQUZFX0lSUV9DTlRfU0hJRlQsCisJCS5pcnFfY250X21hc2tiaXQgPSBBRkVfSVJRX0NOVF9NQVNLLAorCQkuaXJxX2ZzX3JlZyA9IEFGRV9JUlExX01DVV9DRkcwLAorCQkuaXJxX2ZzX3NoaWZ0ID0gSVJRX01DVV9NT0RFX1NGVCwKKwkJLmlycV9mc19tYXNrYml0ID0gSVJRX01DVV9NT0RFX01BU0ssCisJCS5pcnFfZW5fcmVnID0gQUZFX0lSUTFfTUNVX0NGRzAsCisJCS5pcnFfZW5fc2hpZnQgPSBJUlFfTUNVX09OX1NGVCwKKwkJLmlycV9jbHJfcmVnID0gQUZFX0lSUV9NQ1VfQ0xSLAorCQkuaXJxX2Nscl9zaGlmdCA9IElSUTFfTUNVX0NMUl9TRlQsCisJfSwKKwlbTVQ3OVhYX0lSUV8yXSA9IHsKKwkJLmlkID0gTVQ3OVhYX0lSUV8yLAorCQkuaXJxX2NudF9yZWcgPSBBRkVfSVJRMl9NQ1VfQ0ZHMSwKKwkJLmlycV9jbnRfc2hpZnQgPSBBRkVfSVJRX0NOVF9TSElGVCwKKwkJLmlycV9jbnRfbWFza2JpdCA9IEFGRV9JUlFfQ05UX01BU0ssCisJCS5pcnFfZnNfcmVnID0gQUZFX0lSUTJfTUNVX0NGRzAsCisJCS5pcnFfZnNfc2hpZnQgPSBJUlFfTUNVX01PREVfU0ZULAorCQkuaXJxX2ZzX21hc2tiaXQgPSBJUlFfTUNVX01PREVfTUFTSywKKwkJLmlycV9lbl9yZWcgPSBBRkVfSVJRMl9NQ1VfQ0ZHMCwKKwkJLmlycV9lbl9zaGlmdCA9IElSUV9NQ1VfT05fU0ZULAorCQkuaXJxX2Nscl9yZWcgPSBBRkVfSVJRX01DVV9DTFIsCisJCS5pcnFfY2xyX3NoaWZ0ID0gSVJRMl9NQ1VfQ0xSX1NGVCwKKwl9LAorfTsKKworc3RhdGljIGJvb2wgbXQ3OXh4X2lzX3ZvbGF0aWxlX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpCit7CisJLyogdGhlc2UgYXV0by1nZW4gcmVnIGhhcyByZWFkLW9ubHkgYml0LCBzbyBwdXQgaXQgYXMgdm9sYXRpbGUgKi8KKwkvKiB2b2xhdGlsZSByZWcgY2Fubm90IGJlIGNhY2hlZCwgc28gY2Fubm90IGJlIHNldCB3aGVuIHBvd2VyIG9mZiAqLworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBBRkVfREwwX0NVUl9NU0I6CisJY2FzZSBBRkVfREwwX0NVUjoKKwljYXNlIEFGRV9ETDBfUkNIX01PTjoKKwljYXNlIEFGRV9ETDBfTENIX01PTjoKKwljYXNlIEFGRV9WVUwwX0NVUl9NU0I6CisJY2FzZSBBRkVfVlVMMF9DVVI6CisJY2FzZSBBRkVfSVJRX01DVV9TVEFUVVM6CisJY2FzZSBBRkVfTUVNSUZfUkRfTU9OOgorCWNhc2UgQUZFX01FTUlGX1dSX01PTjoKKwkJcmV0dXJuIHRydWU7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX07Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBtdDc5eHhfYWZlX3JlZ21hcF9jb25maWcgPSB7CisJLnJlZ19iaXRzID0gMzIsCisJLnJlZ19zdHJpZGUgPSA0LAorCS52YWxfYml0cyA9IDMyLAorCS52b2xhdGlsZV9yZWcgPSBtdDc5eHhfaXNfdm9sYXRpbGVfcmVnLAorCS5tYXhfcmVnaXN0ZXIgPSBBRkVfTUFYX1JFR0lTVEVSLAorCS5udW1fcmVnX2RlZmF1bHRzX3JhdyA9ICgoQUZFX01BWF9SRUdJU1RFUiAvIDQpICsgMSksCit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgbXQ3OXh4X2FmZV9pcnFfaGFuZGxlcihpbnQgaXJxX2lkLCB2b2lkICpkZXYpCit7CisJc3RydWN0IG10a19iYXNlX2FmZSAqYWZlID0gZGV2OworCXN0cnVjdCBtdGtfYmFzZV9hZmVfaXJxICppcnE7CisJdW5zaWduZWQgaW50IHN0YXR1czsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzX21jdTsKKwl1bnNpZ25lZCBpbnQgbWN1X2VuOworCWludCByZXQ7CisJaW50IGk7CisJaXJxcmV0dXJuX3QgaXJxX3JldCA9IElSUV9IQU5ETEVEOworCisJLyogZ2V0IGlycSB0aGF0IGlzIHNlbnQgdG8gTUNVICovCisJcmVnbWFwX3JlYWQoYWZlLT5yZWdtYXAsIEFGRV9JUlFfTUNVX0VOLCAmbWN1X2VuKTsKKworCXJldCA9IHJlZ21hcF9yZWFkKGFmZS0+cmVnbWFwLCBBRkVfSVJRX01DVV9TVEFUVVMsICZzdGF0dXMpOworCS8qIG9ubHkgY2FyZSBJUlEgd2hpY2ggaXMgc2VudCB0byBNQ1UgKi8KKwlzdGF0dXNfbWN1ID0gc3RhdHVzICYgbWN1X2VuICYgQUZFX0lSUV9TVEFUVVNfQklUUzsKKworCWlmIChyZXQgfHwgc3RhdHVzX21jdSA9PSAwKSB7CisJCWRldl9lcnIoYWZlLT5kZXYsICIlcygpLCBpcnEgc3RhdHVzIGVyciwgcmV0ICVkLCBzdGF0dXMgMHgleCxcCisJCQltY3VfZW4gMHgleFxuIiwgX19mdW5jX18sIHJldCwgc3RhdHVzLCBtY3VfZW4pOworCisJCWlycV9yZXQgPSBJUlFfTk9ORTsKKwkJZ290byBlcnJfaXJxOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBNVDc5WFhfTUVNSUZfTlVNOyBpKyspIHsKKwkJc3RydWN0IG10a19iYXNlX2FmZV9tZW1pZiAqbWVtaWYgPSAmYWZlLT5tZW1pZltpXTsKKworCQlpZiAoIW1lbWlmLT5zdWJzdHJlYW0pCisJCQljb250aW51ZTsKKworCQlpZiAobWVtaWYtPmlycV91c2FnZSA8IDApCisJCQljb250aW51ZTsKKworCQlpcnEgPSAmYWZlLT5pcnFzW21lbWlmLT5pcnFfdXNhZ2VdOworCisJCWlmIChzdGF0dXNfbWN1ICYgKDEgPDwgaXJxLT5pcnFfZGF0YS0+aXJxX2VuX3NoaWZ0KSkKKwkJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQobWVtaWYtPnN1YnN0cmVhbSk7CisJfQorCitlcnJfaXJxOgorCS8qIGNsZWFyIGlycSAqLworCXJlZ21hcF93cml0ZShhZmUtPnJlZ21hcCwgQUZFX0lSUV9NQ1VfQ0xSLCBzdGF0dXNfbWN1KTsKKworCXJldHVybiBpcnFfcmV0OworfQorCitzdGF0aWMgaW50IG10Nzl4eF9hZmVfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2Jhc2VfYWZlICphZmUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbXQ3OXh4X2FmZV9wcml2YXRlICphZmVfcHJpdiA9IGFmZS0+cGxhdGZvcm1fcHJpdjsKKworCWlmICghYWZlLT5yZWdtYXAgfHwgYWZlX3ByaXYtPnBtX3J1bnRpbWVfYnlwYXNzX3JlZ19jdGwpCisJCWdvdG8gc2tpcF9yZWdtYXA7CisKKwkvKiBkaXNhYmxlIGNsayovCisJcmVnbWFwX3VwZGF0ZV9iaXRzKGFmZS0+cmVnbWFwLCBBVURJT19UT1BfQ09ONCwgMHgzZmZmLCAweDNmZmYpOworCXJlZ21hcF91cGRhdGVfYml0cyhhZmUtPnJlZ21hcCwgQVVESU9fRU5HRU5fQ09OMCwgQVVEX0FQTEwyX0VOX01BU0ssCisJCQkgICAwKTsKKwlyZWdtYXBfdXBkYXRlX2JpdHMoYWZlLT5yZWdtYXAsIEFVRElPX0VOR0VOX0NPTjAsIEFVRF8yNk1fRU5fTUFTSywKKwkJCSAgIDApOworCisJLyogbWFrZSBzdXJlIGFsbCBpcnEgc3RhdHVzIGFyZSBjbGVhcmVkLCB0d2ljZSBpbnRlbmRlZCAqLworCXJlZ21hcF91cGRhdGVfYml0cyhhZmUtPnJlZ21hcCwgQUZFX0lSUV9NQ1VfQ0xSLCAweGZmZmYsIDB4ZmZmZik7CisKK3NraXBfcmVnbWFwOgorCXJldHVybiBtdDc5eHhfYWZlX2Rpc2FibGVfY2xvY2soYWZlKTsKK30KKworc3RhdGljIGludCBtdDc5eHhfYWZlX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2Jhc2VfYWZlICphZmUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbXQ3OXh4X2FmZV9wcml2YXRlICphZmVfcHJpdiA9IGFmZS0+cGxhdGZvcm1fcHJpdjsKKwlpbnQgcmV0OworCisJcmV0ID0gbXQ3OXh4X2FmZV9lbmFibGVfY2xvY2soYWZlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKCFhZmUtPnJlZ21hcCB8fCBhZmVfcHJpdi0+cG1fcnVudGltZV9ieXBhc3NfcmVnX2N0bCkKKwkJZ290byBza2lwX3JlZ21hcDsKKworCS8qIGVuYWJsZSBjbGsqLworCXJlZ21hcF91cGRhdGVfYml0cyhhZmUtPnJlZ21hcCwgQVVESU9fVE9QX0NPTjQsIDB4M2ZmZiwgMCk7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGFmZS0+cmVnbWFwLCBBVURJT19FTkdFTl9DT04wLCBBVURfQVBMTDJfRU5fTUFTSywKKwkJCSAgIEFVRF9BUExMMl9FTik7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGFmZS0+cmVnbWFwLCBBVURJT19FTkdFTl9DT04wLCBBVURfMjZNX0VOX01BU0ssCisJCQkgICBBVURfMjZNX0VOKTsKKworc2tpcF9yZWdtYXA6CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXQ3OXh4X2FmZV9jb21wb25lbnRfcHJvYmUoc3RydWN0IHNuZF9zb2NfY29tcG9uZW50ICpjb21wb25lbnQpCit7CisJcmV0dXJuIG10a19hZmVfYWRkX3N1Yl9kYWlfY29udHJvbChjb21wb25lbnQpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfY29tcG9uZW50X2RyaXZlciBtdDc5eHhfYWZlX2NvbXBvbmVudCA9IHsKKwkubmFtZSA9IEFGRV9QQ01fTkFNRSwKKwkub3BzID0gJm10a19hZmVfcGNtX29wcywKKwkucGNtX25ldyA9IG10a19hZmVfcGNtX25ldywKKwkucGNtX2ZyZWUgPSBtdGtfYWZlX3BjbV9mcmVlLAorCS5wcm9iZSA9IG10Nzl4eF9hZmVfY29tcG9uZW50X3Byb2JlLAorfTsKKworc3RhdGljIGludCBtdDc5eHhfZGFpX21lbWlmX3JlZ2lzdGVyKHN0cnVjdCBtdGtfYmFzZV9hZmUgKmFmZSkKK3sKKwlzdHJ1Y3QgbXRrX2Jhc2VfYWZlX2RhaSAqZGFpOworCisJZGFpID0gZGV2bV9remFsbG9jKGFmZS0+ZGV2LCBzaXplb2YoKmRhaSksIEdGUF9LRVJORUwpOworCWlmICghZGFpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWxpc3RfYWRkKCZkYWktPmxpc3QsICZhZmUtPnN1Yl9kYWlzKTsKKworCWRhaS0+ZGFpX2RyaXZlcnMgPSBtdDc5eHhfbWVtaWZfZGFpX2RyaXZlcjsKKwlkYWktPm51bV9kYWlfZHJpdmVycyA9IEFSUkFZX1NJWkUobXQ3OXh4X21lbWlmX2RhaV9kcml2ZXIpOworCisJZGFpLT5kYXBtX3dpZGdldHMgPSBtdDc5eHhfbWVtaWZfd2lkZ2V0czsKKwlkYWktPm51bV9kYXBtX3dpZGdldHMgPSBBUlJBWV9TSVpFKG10Nzl4eF9tZW1pZl93aWRnZXRzKTsKKwlkYWktPmRhcG1fcm91dGVzID0gbXQ3OXh4X21lbWlmX3JvdXRlczsKKwlkYWktPm51bV9kYXBtX3JvdXRlcyA9IEFSUkFZX1NJWkUobXQ3OXh4X21lbWlmX3JvdXRlcyk7CisKKwlyZXR1cm4gMDsKK30KKwordHlwZWRlZiBpbnQgKCpkYWlfcmVnaXN0ZXJfY2IpKHN0cnVjdCBtdGtfYmFzZV9hZmUgKik7CitzdGF0aWMgY29uc3QgZGFpX3JlZ2lzdGVyX2NiIGRhaV9yZWdpc3Rlcl9jYnNbXSA9IHsKKwltdDc5eHhfZGFpX2V0ZG1fcmVnaXN0ZXIsCisJbXQ3OXh4X2RhaV9tZW1pZl9yZWdpc3RlciwKK307CisKK3N0YXRpYyBpbnQgbXQ3OXh4X2FmZV9wY21fZGV2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG10a19iYXNlX2FmZSAqYWZlOworCXN0cnVjdCBtdDc5eHhfYWZlX3ByaXZhdGUgKmFmZV9wcml2OworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlpbnQgaSwgaXJxX2lkLCByZXQ7CisKKwlhZmUgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCphZmUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFmZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgYWZlKTsKKworCWFmZS0+cGxhdGZvcm1fcHJpdiA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmFmZV9wcml2KSwKKwkJCQkJICBHRlBfS0VSTkVMKTsKKwlpZiAoIWFmZS0+cGxhdGZvcm1fcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlhZmVfcHJpdiA9IGFmZS0+cGxhdGZvcm1fcHJpdjsKKwlhZmUtPmRldiA9ICZwZGV2LT5kZXY7CisJZGV2ID0gYWZlLT5kZXY7CisKKwlhZmUtPmJhc2VfYWRkciA9IGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZShwZGV2LCAwKTsKKwlpZiAoSVNfRVJSKGFmZS0+YmFzZV9hZGRyKSkKKwkJcmV0dXJuIFBUUl9FUlIoYWZlLT5iYXNlX2FkZHIpOworCisJLyogaW5pdGlhbCBhdWRpbyByZWxhdGVkIGNsb2NrICovCisJcmV0ID0gbXQ3OXh4X2luaXRfY2xvY2soYWZlKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiaW5pdCBjbG9jayBlcnJvclxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcG1fcnVudGltZV9lbmFibGUoZGV2KTsKKworCS8qIGVuYWJsZSBjbG9jayBmb3IgcmVnY2FjaGUgZ2V0IGRlZmF1bHQgdmFsdWUgZnJvbSBodyAqLworCWFmZV9wcml2LT5wbV9ydW50aW1lX2J5cGFzc19yZWdfY3RsID0gdHJ1ZTsKKwlwbV9ydW50aW1lX2dldF9zeW5jKCZwZGV2LT5kZXYpOworCisJYWZlLT5yZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X21taW8oJnBkZXYtPmRldiwgYWZlLT5iYXNlX2FkZHIsCisJCSAgICAgICZtdDc5eHhfYWZlX3JlZ21hcF9jb25maWcpOworCWlmIChJU19FUlIoYWZlLT5yZWdtYXApKSB7CisJCXJldCA9IFBUUl9FUlIoYWZlLT5yZWdtYXApOworCQlnb3RvIGVycl9wbV9kaXNhYmxlOworCX0KKworCXBtX3J1bnRpbWVfcHV0X3N5bmMoJnBkZXYtPmRldik7CisJYWZlX3ByaXYtPnBtX3J1bnRpbWVfYnlwYXNzX3JlZ19jdGwgPSBmYWxzZTsKKworCS8qIGluaXQgbWVtaWYgKi8KKwlhZmUtPm1lbWlmX3NpemUgPSBNVDc5WFhfTUVNSUZfTlVNOworCWFmZS0+bWVtaWYgPSBkZXZtX2tjYWxsb2MoZGV2LCBhZmUtPm1lbWlmX3NpemUsIHNpemVvZigqYWZlLT5tZW1pZiksCisJCQkJICBHRlBfS0VSTkVMKTsKKwlpZiAoIWFmZS0+bWVtaWYpCisJCWdvdG8gZXJyX3BtX2Rpc2FibGU7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWZlLT5tZW1pZl9zaXplOyBpKyspIHsKKwkJYWZlLT5tZW1pZltpXS5kYXRhID0gJm1lbWlmX2RhdGFbaV07CisJCWFmZS0+bWVtaWZbaV0uaXJxX3VzYWdlID0gLTE7CisJfQorCisJbXV0ZXhfaW5pdCgmYWZlLT5pcnFfYWxsb2NfbG9jayk7CisKKwkvKiBpcnEgaW5pdGlhbGl6ZSAqLworCWFmZS0+aXJxc19zaXplID0gTVQ3OVhYX0lSUV9OVU07CisJYWZlLT5pcnFzID0gZGV2bV9rY2FsbG9jKGRldiwgYWZlLT5pcnFzX3NpemUsIHNpemVvZigqYWZlLT5pcnFzKSwKKwkJCQkgR0ZQX0tFUk5FTCk7CisJaWYgKCFhZmUtPmlycXMpCisJCWdvdG8gZXJyX3BtX2Rpc2FibGU7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWZlLT5pcnFzX3NpemU7IGkrKykKKwkJYWZlLT5pcnFzW2ldLmlycV9kYXRhID0gJmlycV9kYXRhW2ldOworCisJLyogcmVxdWVzdCBpcnEgKi8KKwlpcnFfaWQgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmICghaXJxX2lkKSB7CisJCWRldl9lcnIoZGV2LCAiJXBPRm4gbm8gaXJxIGZvdW5kXG4iLCBkZXYtPm9mX25vZGUpOworCQlnb3RvIGVycl9wbV9kaXNhYmxlOworCX0KKwlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgaXJxX2lkLCBtdDc5eHhfYWZlX2lycV9oYW5kbGVyLAorCQkJICAgICAgIElSUUZfVFJJR0dFUl9OT05FLCAiYXN5cy1pc3IiLCAodm9pZCAqKWFmZSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImNvdWxkIG5vdCByZXF1ZXN0X2lycSBmb3IgYXN5cy1pc3JcbiIpOworCQlnb3RvIGVycl9wbV9kaXNhYmxlOworCX0KKworCS8qIGluaXQgc3ViX2RhaXMgKi8KKwlJTklUX0xJU1RfSEVBRCgmYWZlLT5zdWJfZGFpcyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkYWlfcmVnaXN0ZXJfY2JzKTsgaSsrKSB7CisJCXJldCA9IGRhaV9yZWdpc3Rlcl9jYnNbaV0oYWZlKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X3dhcm4oYWZlLT5kZXYsICJkYWkgcmVnaXN0ZXIgaSAlZCBmYWlsLCByZXQgJWRcbiIsCisJCQkJIGksIHJldCk7CisJCQlnb3RvIGVycl9wbV9kaXNhYmxlOworCQl9CisJfQorCisJLyogaW5pdCBkYWlfZHJpdmVyIGFuZCBjb21wb25lbnRfZHJpdmVyICovCisJcmV0ID0gbXRrX2FmZV9jb21iaW5lX3N1Yl9kYWkoYWZlKTsKKwlpZiAocmV0KSB7CisJCWRldl93YXJuKGFmZS0+ZGV2LCAibXRrX2FmZV9jb21iaW5lX3N1Yl9kYWkgZmFpbCwgcmV0ICVkXG4iLAorCQkJIHJldCk7CisJCWdvdG8gZXJyX3BtX2Rpc2FibGU7CisJfQorCisJYWZlLT5tdGtfYWZlX2hhcmR3YXJlID0gJm10Nzl4eF9hZmVfaGFyZHdhcmU7CisJYWZlLT5tZW1pZl9mcyA9IG10Nzl4eF9tZW1pZl9mczsKKwlhZmUtPmlycV9mcyA9IG10Nzl4eF9pcnFfZnM7CisKKwlhZmUtPnJ1bnRpbWVfcmVzdW1lID0gbXQ3OXh4X2FmZV9ydW50aW1lX3Jlc3VtZTsKKwlhZmUtPnJ1bnRpbWVfc3VzcGVuZCA9IG10Nzl4eF9hZmVfcnVudGltZV9zdXNwZW5kOworCisJLyogcmVnaXN0ZXIgY29tcG9uZW50ICovCisJcmV0ID0gZGV2bV9zbmRfc29jX3JlZ2lzdGVyX2NvbXBvbmVudCgmcGRldi0+ZGV2LAorCQkJCQkgICAgICAmbXQ3OXh4X2FmZV9jb21wb25lbnQsCisJCQkJCSAgICAgIE5VTEwsIDApOworCWlmIChyZXQpIHsKKwkJZGV2X3dhcm4oZGV2LCAiZXJyX3BsYXRmb3JtXG4iKTsKKwkJZ290byBlcnJfcG1fZGlzYWJsZTsKKwl9CisKKwlyZXQgPSBkZXZtX3NuZF9zb2NfcmVnaXN0ZXJfY29tcG9uZW50KGFmZS0+ZGV2LAorCQkJCQkgICAgICAmbXQ3OXh4X2FmZV9wY21fZGFpX2NvbXBvbmVudCwKKwkJCQkJICAgICAgYWZlLT5kYWlfZHJpdmVycywKKwkJCQkJICAgICAgYWZlLT5udW1fZGFpX2RyaXZlcnMpOworCWlmIChyZXQpIHsKKwkJZGV2X3dhcm4oZGV2LCAiZXJyX2RhaV9jb21wb25lbnRcbiIpOworCQlnb3RvIGVycl9wbV9kaXNhYmxlOworCX0KKworCXJldHVybiByZXQ7CisKK2Vycl9wbV9kaXNhYmxlOgorCXBtX3J1bnRpbWVfcHV0X3N5bmMoJnBkZXYtPmRldik7CisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXQ3OXh4X2FmZV9wY21fZGV2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKKwlpZiAoIXBtX3J1bnRpbWVfc3RhdHVzX3N1c3BlbmRlZCgmcGRldi0+ZGV2KSkKKwkJbXQ3OXh4X2FmZV9ydW50aW1lX3N1c3BlbmQoJnBkZXYtPmRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXQ3OXh4X2FmZV9wY21fZHRfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzl4eC1hdWRpbyIsIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXQ3OXh4X2FmZV9wY21fZHRfbWF0Y2gpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgbXQ3OXh4X2FmZV9wbV9vcHMgPSB7CisJU0VUX1JVTlRJTUVfUE1fT1BTKG10Nzl4eF9hZmVfcnVudGltZV9zdXNwZW5kLAorCQkJICAgbXQ3OXh4X2FmZV9ydW50aW1lX3Jlc3VtZSwgTlVMTCkKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10Nzl4eF9hZmVfcGNtX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9ICJtdDc5eHgtYXVkaW8iLAorCQkgICAub2ZfbWF0Y2hfdGFibGUgPSBtdDc5eHhfYWZlX3BjbV9kdF9tYXRjaCwKKwkJICAgLnBtID0gJm10Nzl4eF9hZmVfcG1fb3BzLAorCX0sCisJLnByb2JlID0gbXQ3OXh4X2FmZV9wY21fZGV2X3Byb2JlLAorCS5yZW1vdmUgPSBtdDc5eHhfYWZlX3BjbV9kZXZfcmVtb3ZlLAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihtdDc5eHhfYWZlX3BjbV9kcml2ZXIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIk1lZGlhdGVrIEFMU0EgU29DIEFGRSBwbGF0Zm9ybSBkcml2ZXIgZm9yIDc5eHgiKTsKK01PRFVMRV9BVVRIT1IoIlZpYyBXdSA8dmljLnd1QG1lZGlhdGVrLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL21lZGlhdGVrL210Nzl4eC9tdDc5eHgtZGFpLWV0ZG0uYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL21lZGlhdGVrL210Nzl4eC9tdDc5eHgtZGFpLWV0ZG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDQ4NjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvbWVkaWF0ZWsvbXQ3OXh4L210Nzl4eC1kYWktZXRkbS5jCkBAIC0wLDAgKzEsNDE5IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLy8KKy8vIE1lZGlhVGVrIEFMU0EgU29DIEF1ZGlvIERBSSBlVERNIENvbnRyb2wKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMjEgTWVkaWFUZWsgSW5jLgorLy8gQXV0aG9yOiBWaWMgV3UgPHZpYy53dUBtZWRpYXRlay5jb20+CisKKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSAibXQ3OXh4LWFmZS1jbGsuaCIKKyNpbmNsdWRlICJtdDc5eHgtYWZlLWNvbW1vbi5oIgorI2luY2x1ZGUgIm10Nzl4eC1yZWcuaCIKKworZW51bSB7CisJSE9QUElOR19DTEsgPSAwLAorCUFQTExfQ0xLID0gMSwKK307CisKK2VudW0geworCU1US19EQUlfRVRETV9GT1JNQVRfSTJTID0gMCwKKwlNVEtfREFJX0VURE1fRk9STUFUX0RTUEEgPSA0LAorCU1US19EQUlfRVRETV9GT1JNQVRfRFNQQiA9IDUsCit9OworCitlbnVtIHsKKwlFVERNX0lONSA9IDIsCisJRVRETV9PVVQ1ID0gMTAsCit9OworCitlbnVtIHsKKwlNVEtfRVRETV9SQVRFXzhLID0gMCwKKwlNVEtfRVRETV9SQVRFXzEySyA9IDEsCisJTVRLX0VURE1fUkFURV8xNksgPSAyLAorCU1US19FVERNX1JBVEVfMjRLID0gMywKKwlNVEtfRVRETV9SQVRFXzMySyA9IDQsCisJTVRLX0VURE1fUkFURV80OEsgPSA1LAorCU1US19FVERNX1JBVEVfOTZLID0gNywKKwlNVEtfRVRETV9SQVRFXzE5MksgPSA5LAorCU1US19FVERNX1JBVEVfMTFLID0gMTYsCisJTVRLX0VURE1fUkFURV8yMksgPSAxNywKKwlNVEtfRVRETV9SQVRFXzQ0SyA9IDE4LAorCU1US19FVERNX1JBVEVfODhLID0gMTksCisJTVRLX0VURE1fUkFURV8xNzZLID0gMjAsCit9OworCitzdHJ1Y3QgbXRrX2RhaV9ldGRtX3ByaXYgeworCWJvb2wgYmNrX2ludjsKKwlib29sIGxyY2tfaW52OworCWJvb2wgc2xhdmVfbW9kZTsKKwl1bnNpZ25lZCBpbnQgZm9ybWF0OworfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBtdDc5eHhfZXRkbV9yYXRlX3RyYW5zZm9ybShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXVuc2lnbmVkIGludCByYXRlKQoreworCXN3aXRjaCAocmF0ZSkgeworCWNhc2UgODAwMDoKKwkJcmV0dXJuIE1US19FVERNX1JBVEVfOEs7CisJY2FzZSAxMTAyNToKKwkJcmV0dXJuIE1US19FVERNX1JBVEVfMTFLOworCWNhc2UgMTIwMDA6CisJCXJldHVybiBNVEtfRVRETV9SQVRFXzEySzsKKwljYXNlIDE2MDAwOgorCQlyZXR1cm4gTVRLX0VURE1fUkFURV8xNks7CisJY2FzZSAyMjA1MDoKKwkJcmV0dXJuIE1US19FVERNX1JBVEVfMjJLOworCWNhc2UgMjQwMDA6CisJCXJldHVybiBNVEtfRVRETV9SQVRFXzI0SzsKKwljYXNlIDMyMDAwOgorCQlyZXR1cm4gTVRLX0VURE1fUkFURV8zMks7CisJY2FzZSA0NDEwMDoKKwkJcmV0dXJuIE1US19FVERNX1JBVEVfNDRLOworCWNhc2UgNDgwMDA6CisJCXJldHVybiBNVEtfRVRETV9SQVRFXzQ4SzsKKwljYXNlIDg4MjAwOgorCQlyZXR1cm4gTVRLX0VURE1fUkFURV84OEs7CisJY2FzZSA5NjAwMDoKKwkJcmV0dXJuIE1US19FVERNX1JBVEVfOTZLOworCWNhc2UgMTc2NDAwOgorCQlyZXR1cm4gTVRLX0VURE1fUkFURV8xNzZLOworCWNhc2UgMTkyMDAwOgorCQlyZXR1cm4gTVRLX0VURE1fUkFURV8xOTJLOworCWRlZmF1bHQ6CisJCWRldl93YXJuKGRldiwgIiVzKCksIHJhdGUgJXUgaW52YWxpZCwgdXNlICVkISEhXG4iLAorCQkJIF9fZnVuY19fLCByYXRlLCBNVEtfRVRETV9SQVRFXzQ4Syk7CisJCXJldHVybiBNVEtfRVRETV9SQVRFXzQ4SzsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2V0ZG1fd2xlbih1bnNpZ25lZCBpbnQgYml0d2lkdGgpCit7CisJcmV0dXJuIGJpdHdpZHRoIDw9IDE2ID8gMTYgOiAzMjsKK30KKworLyogZGFpIGNvbXBvbmVudCAqLworLyogaW50ZXJjb25uZWN0aW9uICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBvMTI0X21peFtdID0geworCVNPQ19EQVBNX1NJTkdMRV9BVVRPRElTQUJMRSgiSTAzMl9Td2l0Y2giLCBBRkVfQ09OTjEyNF8xLCAwLCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBvMTI1X21peFtdID0geworCVNPQ19EQVBNX1NJTkdMRV9BVVRPRElTQUJMRSgiSTAzM19Td2l0Y2giLCBBRkVfQ09OTjEyNV8xLCAxLCAxLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBtdGtfZGFpX2V0ZG1fd2lkZ2V0c1tdID0geworCisJLyogREwgKi8KKwlTTkRfU09DX0RBUE1fTUlYRVIoIkkxNTAiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9NSVhFUigiSTE1MSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCisJLyogVUwgKi8KKwlTTkRfU09DX0RBUE1fTUlYRVIoIk8xMjQiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCQkgICBvMTI0X21peCwgQVJSQVlfU0laRShvMTI0X21peCkpLAorCVNORF9TT0NfREFQTV9NSVhFUigiTzEyNSIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSAgIG8xMjVfbWl4LCBBUlJBWV9TSVpFKG8xMjVfbWl4KSksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBtdGtfZGFpX2V0ZG1fcm91dGVzW10gPSB7CisJeyJJMTUwIiwgTlVMTCwgIkVURE0gQ2FwdHVyZSJ9LAorCXsiSTE1MSIsIE5VTEwsICJFVERNIENhcHR1cmUifSwKKwl7IkVURE0gUGxheWJhY2siLCBOVUxMLCAiTzEyNCJ9LAorCXsiRVRETSBQbGF5YmFjayIsIE5VTEwsICJPMTI1In0sCisJeyJPMTI0IiwgIkkwMzJfU3dpdGNoIiwgIkkwMzIifSwKKwl7Ik8xMjUiLCAiSTAzM19Td2l0Y2giLCAiSTAzMyJ9LAorfTsKKworLyogZGFpIG9wcyAqLworc3RhdGljIGludCBtdGtfZGFpX2V0ZG1fc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3QgbXRrX2Jhc2VfYWZlICphZmUgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShkYWkpOworCisJbXQ3OXh4X2FmZV9lbmFibGVfY2xvY2soYWZlKTsKKworCXJlZ21hcF91cGRhdGVfYml0cyhhZmUtPnJlZ21hcCwgQVVESU9fVE9QX0NPTjIsIENMS19PVVQ1X1BETl9NQVNLLAorCQkJICAgMCk7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGFmZS0+cmVnbWFwLCBBVURJT19UT1BfQ09OMiwgQ0xLX0lONV9QRE5fTUFTSywKKwkJCSAgIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG10a19kYWlfZXRkbV9zaHV0ZG93bihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBtdGtfYmFzZV9hZmUgKmFmZSA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGRhaSk7CisKKwlyZWdtYXBfdXBkYXRlX2JpdHMoYWZlLT5yZWdtYXAsIEFVRElPX1RPUF9DT04yLCBDTEtfT1VUNV9QRE5fTUFTSywKKwkJCSAgIENMS19PVVQ1X1BETik7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGFmZS0+cmVnbWFwLCBBVURJT19UT1BfQ09OMiwgQ0xLX0lONV9QRE5fTUFTSywKKwkJCSAgIENMS19JTjVfUEROKTsKKworCW10Nzl4eF9hZmVfZGlzYWJsZV9jbG9jayhhZmUpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGdldF9ldGRtX2NoX2ZpeHVwKHVuc2lnbmVkIGludCBjaGFubmVscykKK3sKKwlpZiAoY2hhbm5lbHMgPiAxNikKKwkJcmV0dXJuIDI0OworCWVsc2UgaWYgKGNoYW5uZWxzID4gOCkKKwkJcmV0dXJuIDE2OworCWVsc2UgaWYgKGNoYW5uZWxzID4gNCkKKwkJcmV0dXJuIDg7CisJZWxzZSBpZiAoY2hhbm5lbHMgPiAyKQorCQlyZXR1cm4gNDsKKwllbHNlCisJCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IG10a19kYWlfZXRkbV9jb25maWcoc3RydWN0IG10a19iYXNlX2FmZSAqYWZlLAorCQkJICAgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJICAgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLAorCQkJICAgICAgIGludCBzdHJlYW0pCit7CisJc3RydWN0IG10Nzl4eF9hZmVfcHJpdmF0ZSAqYWZlX3ByaXYgPSBhZmUtPnBsYXRmb3JtX3ByaXY7CisJc3RydWN0IG10a19kYWlfZXRkbV9wcml2ICpldGRtX2RhdGEgPSBhZmVfcHJpdi0+ZGFpX3ByaXZbZGFpLT5pZF07CisJdW5zaWduZWQgaW50IHJhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOworCXVuc2lnbmVkIGludCBldGRtX3JhdGUgPSBtdDc5eHhfZXRkbV9yYXRlX3RyYW5zZm9ybShhZmUtPmRldiwgcmF0ZSk7CisJdW5zaWduZWQgaW50IGFmZV9yYXRlID0gbXQ3OXh4X2FmZV9yYXRlX3RyYW5zZm9ybShhZmUtPmRldiwgcmF0ZSk7CisJdW5zaWduZWQgaW50IGNoYW5uZWxzID0gcGFyYW1zX2NoYW5uZWxzKHBhcmFtcyk7CisJdW5zaWduZWQgaW50IGJpdF93aWR0aCA9IHBhcmFtc193aWR0aChwYXJhbXMpOworCXVuc2lnbmVkIGludCB3bGVuID0gZ2V0X2V0ZG1fd2xlbihiaXRfd2lkdGgpOworCXVuc2lnbmVkIGludCB2YWwgPSAwOworCXVuc2lnbmVkIGludCBtYXNrID0gMDsKKworCWRldl9kYmcoYWZlLT5kZXYsICIlcygpLCBzdHJlYW0gJWQsIHJhdGUgJXUsIGJpdHdpZHRoICV1XG4iLAorCQkgX19mdW5jX18sIHN0cmVhbSwgcmF0ZSwgYml0X3dpZHRoKTsKKworCS8qIENPTjAgKi8KKwltYXNrIHw9IEVURE1fQklUX0xFTl9NQVNLOworCXZhbCB8PSBFVERNX0JJVF9MRU4oYml0X3dpZHRoKTsKKwltYXNrIHw9IEVURE1fV1JEX0xFTl9NQVNLOworCXZhbCB8PSBFVERNX1dSRF9MRU4od2xlbik7CisJbWFzayB8PSBFVERNX0ZNVF9NQVNLOworCXZhbCB8PSBFVERNX0ZNVChldGRtX2RhdGEtPmZvcm1hdCk7CisJbWFzayB8PSBFVERNX0NIX05VTV9NQVNLOworCXZhbCB8PSBFVERNX0NIX05VTShnZXRfZXRkbV9jaF9maXh1cChjaGFubmVscykpOworCW1hc2sgfD0gUkVMQVRDSF9TUkNfTUFTSzsKKwl2YWwgfD0gUkVMQVRDSF9TUkMoQVBMTF9DTEspOworCisJc3dpdGNoIChzdHJlYW0pIHsKKwljYXNlIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0s6CisJCS8qIHNldCBFVERNX09VVDVfQ09OMCAqLworCQlyZWdtYXBfdXBkYXRlX2JpdHMoYWZlLT5yZWdtYXAsIEVURE1fT1VUNV9DT04wLCBtYXNrLCB2YWwpOworCisJCS8qIHNldCBFVERNX09VVDVfQ09ONCAqLworCQlyZWdtYXBfdXBkYXRlX2JpdHMoYWZlLT5yZWdtYXAsIEVURE1fT1VUNV9DT040LAorCQkJCSAgIE9VVF9SRUxBVENIX01BU0ssIE9VVF9SRUxBVENIKGFmZV9yYXRlKSk7CisJCXJlZ21hcF91cGRhdGVfYml0cyhhZmUtPnJlZ21hcCwgRVRETV9PVVQ1X0NPTjQsCisJCQkJICAgT1VUX0NMS19TUkNfTUFTSywgT1VUX0NMS19TUkMoQVBMTF9DTEspKTsKKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGFmZS0+cmVnbWFwLCBFVERNX09VVDVfQ09ONCwKKwkJCQkgICBPVVRfU0VMX0ZTX01BU0ssIE9VVF9TRUxfRlMoZXRkbV9yYXRlKSk7CisKKwkJLyogc2V0IEVURE1fT1VUNV9DT041ICovCisJCXJlZ21hcF91cGRhdGVfYml0cyhhZmUtPnJlZ21hcCwgRVRETV9PVVQ1X0NPTjUsCisJCQkJICAgRVRETV9DTEtfRElWX01BU0ssIEVURE1fQ0xLX0RJVik7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFOgorCQkvKiBzZXQgRVRETV9JTjVfQ09OMCAqLworCQlyZWdtYXBfdXBkYXRlX2JpdHMoYWZlLT5yZWdtYXAsIEVURE1fSU41X0NPTjAsIG1hc2ssIHZhbCk7CisJCXJlZ21hcF91cGRhdGVfYml0cyhhZmUtPnJlZ21hcCwgRVRETV9JTjVfQ09OMCwKKwkJCQkgICBFVERNX1NZTkNfTUFTSywgRVRETV9TWU5DKTsKKworCQkvKiBzZXQgRVRETV9JTjVfQ09OMiAqLworCQlyZWdtYXBfdXBkYXRlX2JpdHMoYWZlLT5yZWdtYXAsIEVURE1fSU41X0NPTjIsCisJCQkJICAgSU5fQ0xLX1NSQ19NQVNLLCBJTl9DTEtfU1JDKEFQTExfQ0xLKSk7CisKKwkJLyogc2V0IEVURE1fSU41X0NPTjMgKi8KKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGFmZS0+cmVnbWFwLCBFVERNX0lONV9DT04zLAorCQkJCSAgIElOX1NFTF9GU19NQVNLLCBJTl9TRUxfRlMoZXRkbV9yYXRlKSk7CisKKwkJLyogc2V0IEVURE1fSU41X0NPTjQgKi8KKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGFmZS0+cmVnbWFwLCBFVERNX0lONV9DT040LAorCQkJCSAgIElOX1JFTEFUQ0hfTUFTSywgSU5fUkVMQVRDSChhZmVfcmF0ZSkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfZGFpX2V0ZG1faHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkJICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3QgbXRrX2Jhc2VfYWZlICphZmUgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShkYWkpOworCisJbXRrX2RhaV9ldGRtX2NvbmZpZyhhZmUsIHBhcmFtcywgZGFpLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKTsKKwltdGtfZGFpX2V0ZG1fY29uZmlnKGFmZSwgcGFyYW1zLCBkYWksIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfZGFpX2V0ZG1fdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCwKKwkJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3QgbXRrX2Jhc2VfYWZlICphZmUgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShkYWkpOworCisJZGV2X2RiZyhhZmUtPmRldiwgIiVzKCksIGNtZCAlZCwgZGFpIGlkICVkXG4iLCBfX2Z1bmNfXywgY21kLCBkYWktPmlkKTsKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CisJCXJlZ21hcF91cGRhdGVfYml0cyhhZmUtPnJlZ21hcCwgRVRETV9JTjVfQ09OMCwgRVRETV9FTl9NQVNLLAorCQkJCSAgIEVURE1fRU4pOworCQlyZWdtYXBfdXBkYXRlX2JpdHMoYWZlLT5yZWdtYXAsIEVURE1fT1VUNV9DT04wLCBFVERNX0VOX01BU0ssCisJCQkJICAgRVRETV9FTik7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6CisJCXJlZ21hcF91cGRhdGVfYml0cyhhZmUtPnJlZ21hcCwgRVRETV9JTjVfQ09OMCwgRVRETV9FTl9NQVNLLAorCQkJCSAgIDApOworCQlyZWdtYXBfdXBkYXRlX2JpdHMoYWZlLT5yZWdtYXAsIEVURE1fT1VUNV9DT04wLCBFVERNX0VOX01BU0ssCisJCQkJICAgMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19kYWlfZXRkbV9zZXRfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCB1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBtdGtfYmFzZV9hZmUgKmFmZSA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGRhaSk7CisJc3RydWN0IG10Nzl4eF9hZmVfcHJpdmF0ZSAqYWZlX3ByaXYgPSBhZmUtPnBsYXRmb3JtX3ByaXY7CisJc3RydWN0IG10a19kYWlfZXRkbV9wcml2ICpldGRtX2RhdGE7CisJdm9pZCAqcHJpdl9kYXRhOworCisJc3dpdGNoIChkYWktPmlkKSB7CisJY2FzZSBNVDc5WFhfREFJX0VURE06CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl93YXJuKGFmZS0+ZGV2LCAiJXMoKSwgaWQgJWQgbm90IHN1cHBvcnRcbiIsCisJCQkgX19mdW5jX18sIGRhaS0+aWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwcml2X2RhdGEgPSBkZXZtX2t6YWxsb2MoYWZlLT5kZXYsIHNpemVvZihzdHJ1Y3QgbXRrX2RhaV9ldGRtX3ByaXYpLAorCQkJCSBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXZfZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlhZmVfcHJpdi0+ZGFpX3ByaXZbZGFpLT5pZF0gPSBwcml2X2RhdGE7CisJZXRkbV9kYXRhID0gYWZlX3ByaXYtPmRhaV9wcml2W2RhaS0+aWRdOworCisJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgorCQlldGRtX2RhdGEtPmZvcm1hdCA9IE1US19EQUlfRVRETV9GT1JNQVRfSTJTOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0RTUF9BOgorCQlldGRtX2RhdGEtPmZvcm1hdCA9IE1US19EQUlfRVRETV9GT1JNQVRfRFNQQTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQjoKKwkJZXRkbV9kYXRhLT5mb3JtYXQgPSBNVEtfREFJX0VURE1fRk9STUFUX0RTUEI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfSU5WX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX05CX05GOgorCQlldGRtX2RhdGEtPmJja19pbnYgPSBmYWxzZTsKKwkJZXRkbV9kYXRhLT5scmNrX2ludiA9IGZhbHNlOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX05CX0lGOgorCQlldGRtX2RhdGEtPmJja19pbnYgPSBmYWxzZTsKKwkJZXRkbV9kYXRhLT5scmNrX2ludiA9IHRydWU7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfTkY6CisJCWV0ZG1fZGF0YS0+YmNrX2ludiA9IHRydWU7CisJCWV0ZG1fZGF0YS0+bHJja19pbnYgPSBmYWxzZTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9JRjoKKwkJZXRkbV9kYXRhLT5iY2tfaW52ID0gdHJ1ZTsKKwkJZXRkbV9kYXRhLT5scmNrX2ludiA9IHRydWU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06CisJCWV0ZG1fZGF0YS0+c2xhdmVfbW9kZSA9IHRydWU7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKKwkJZXRkbV9kYXRhLT5zbGF2ZV9tb2RlID0gZmFsc2U7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBtdGtfZGFpX2V0ZG1fb3BzID0geworCS5zdGFydHVwID0gbXRrX2RhaV9ldGRtX3N0YXJ0dXAsCisJLnNodXRkb3duID0gbXRrX2RhaV9ldGRtX3NodXRkb3duLAorCS5od19wYXJhbXMgPSBtdGtfZGFpX2V0ZG1faHdfcGFyYW1zLAorCS50cmlnZ2VyID0gbXRrX2RhaV9ldGRtX3RyaWdnZXIsCisJLnNldF9mbXQgPSBtdGtfZGFpX2V0ZG1fc2V0X2ZtdCwKK307CisKKy8qIGRhaSBkcml2ZXIgKi8KKyNkZWZpbmUgTVRLX0VURE1fUkFURVMgKFNORFJWX1BDTV9SQVRFXzgwMDBfNDgwMDAgfFwKKwkJCVNORFJWX1BDTV9SQVRFXzg4MjAwIHxcCisJCQlTTkRSVl9QQ01fUkFURV85NjAwMCB8XAorCQkJU05EUlZfUENNX1JBVEVfMTc2NDAwIHxcCisJCQlTTkRSVl9QQ01fUkFURV8xOTIwMDApCisKKyNkZWZpbmUgTVRLX0VURE1fRk9STUFUUyAoU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfFwKKwkJCSAgU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUgfFwKKwkJCSAgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyIG10a19kYWlfZXRkbV9kcml2ZXJbXSA9IHsKKwl7CisJCS5uYW1lID0gIkVURE0iLAorCQkuaWQgPSBNVDc5WFhfREFJX0VURE0sCisJCS5jYXB0dXJlID0geworCQkJLnN0cmVhbV9uYW1lID0gIkVURE0gQ2FwdHVyZSIsCisJCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJCS5jaGFubmVsc19tYXggPSAyLAorCQkJLnJhdGVzID0gTVRLX0VURE1fUkFURVMsCisJCQkuZm9ybWF0cyA9IE1US19FVERNX0ZPUk1BVFMsCisJCX0sCisJCS5wbGF5YmFjayA9IHsKKwkJCS5zdHJlYW1fbmFtZSA9ICJFVERNIFBsYXliYWNrIiwKKwkJCS5jaGFubmVsc19taW4gPSAxLAorCQkJLmNoYW5uZWxzX21heCA9IDIsCisJCQkucmF0ZXMgPSBNVEtfRVRETV9SQVRFUywKKwkJCS5mb3JtYXRzID0gTVRLX0VURE1fRk9STUFUUywKKwkJfSwKKwkJLm9wcyA9ICZtdGtfZGFpX2V0ZG1fb3BzLAorCQkuc3ltbWV0cmljX3JhdGVzID0gMSwKKwkJLnN5bW1ldHJpY19zYW1wbGViaXRzID0gMSwKKwl9LAorfTsKKworaW50IG10Nzl4eF9kYWlfZXRkbV9yZWdpc3RlcihzdHJ1Y3QgbXRrX2Jhc2VfYWZlICphZmUpCit7CisJc3RydWN0IG10a19iYXNlX2FmZV9kYWkgKmRhaTsKKworCWRhaSA9IGRldm1fa3phbGxvYyhhZmUtPmRldiwgc2l6ZW9mKCpkYWkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhaSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlsaXN0X2FkZCgmZGFpLT5saXN0LCAmYWZlLT5zdWJfZGFpcyk7CisKKwlkYWktPmRhaV9kcml2ZXJzID0gbXRrX2RhaV9ldGRtX2RyaXZlcjsKKwlkYWktPm51bV9kYWlfZHJpdmVycyA9IEFSUkFZX1NJWkUobXRrX2RhaV9ldGRtX2RyaXZlcik7CisKKwlkYWktPmRhcG1fd2lkZ2V0cyA9IG10a19kYWlfZXRkbV93aWRnZXRzOworCWRhaS0+bnVtX2RhcG1fd2lkZ2V0cyA9IEFSUkFZX1NJWkUobXRrX2RhaV9ldGRtX3dpZGdldHMpOworCWRhaS0+ZGFwbV9yb3V0ZXMgPSBtdGtfZGFpX2V0ZG1fcm91dGVzOworCWRhaS0+bnVtX2RhcG1fcm91dGVzID0gQVJSQVlfU0laRShtdGtfZGFpX2V0ZG1fcm91dGVzKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvbWVkaWF0ZWsvbXQ3OXh4L210Nzl4eC1yZWcuaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL21lZGlhdGVrL210Nzl4eC9tdDc5eHgtcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhkMmQ1NgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9maWxlcy01LjQvc291bmQvc29jL21lZGlhdGVrL210Nzl4eC9tdDc5eHgtcmVnLmgKQEAgLTAsMCArMSwyMDUgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisvKgorICogbXQ3OXh4LXJlZy5oICAtLSAgTWVkaWF0ZWsgNzl4eCBhdWRpbyBkcml2ZXIgcmVnIGRlZmluaXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjEgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBWaWMgV3UgPHZpYy53dUBtZWRpYXRlay5jb20+CisgKi8KKworI2lmbmRlZiBfTVQ3OVhYX1JFR19IXworI2RlZmluZSBfTVQ3OVhYX1JFR19IXworCisjZGVmaW5lIEFVRElPX1RPUF9DT04yICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIEFVRElPX1RPUF9DT040ICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIEFVRElPX0VOR0VOX0NPTjAgICAgICAgICAgICAgICAgMHgwMDE0CisjZGVmaW5lIEFGRV9JUlFfTUNVX0VOICAgICAgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIEFGRV9JUlFfTUNVX1NUQVRVUyAgICAgICAgICAgICAgMHgwMTIwCisjZGVmaW5lIEFGRV9JUlFfTUNVX0NMUiAgICAgICAgICAgICAgICAgMHgwMTI4CisjZGVmaW5lIEFGRV9JUlEwX01DVV9DRkcwICAgICAgICAgICAgICAgMHgwMTQwCisjZGVmaW5lIEFGRV9JUlEwX01DVV9DRkcxICAgICAgICAgICAgICAgMHgwMTQ0CisjZGVmaW5lIEFGRV9JUlExX01DVV9DRkcwICAgICAgICAgICAgICAgMHgwMTQ4CisjZGVmaW5lIEFGRV9JUlExX01DVV9DRkcxICAgICAgICAgICAgICAgMHgwMTRjCisjZGVmaW5lIEFGRV9JUlEyX01DVV9DRkcwICAgICAgICAgICAgICAgMHgwMTUwCisjZGVmaW5lIEFGRV9JUlEyX01DVV9DRkcxICAgICAgICAgICAgICAgMHgwMTU0CisjZGVmaW5lIEVURE1fSU41X0NPTjAgICAgICAgICAgICAgICAgICAgMHgxM2YwCisjZGVmaW5lIEVURE1fSU41X0NPTjEgICAgICAgICAgICAgICAgICAgMHgxM2Y0CisjZGVmaW5lIEVURE1fSU41X0NPTjIgICAgICAgICAgICAgICAgICAgMHgxM2Y4CisjZGVmaW5lIEVURE1fSU41X0NPTjMgICAgICAgICAgICAgICAgICAgMHgxM2ZjCisjZGVmaW5lIEVURE1fSU41X0NPTjQgICAgICAgICAgICAgICAgICAgMHgxNDAwCisjZGVmaW5lIEVURE1fT1VUNV9DT04wICAgICAgICAgICAgICAgICAgMHgxNTcwCisjZGVmaW5lIEVURE1fT1VUNV9DT040ICAgICAgICAgICAgICAgICAgMHgxNTgwCisjZGVmaW5lIEVURE1fT1VUNV9DT041ICAgICAgICAgICAgICAgICAgMHgxNTg0CisjZGVmaW5lIEVURE1fNF83X0NPV09SS19DT04wICAgICAgICAgICAgMHgxNWUwCisjZGVmaW5lIEVURE1fNF83X0NPV09SS19DT04xICAgICAgICAgICAgMHgxNWU0CisjZGVmaW5lIEFGRV9DT05OMDE4XzEgICAgICAgICAgICAgICAgICAgMHgxYjQ0CisjZGVmaW5lIEFGRV9DT05OMDE4XzQgICAgICAgICAgICAgICAgICAgMHgxYjUwCisjZGVmaW5lIEFGRV9DT05OMDE5XzEgICAgICAgICAgICAgICAgICAgMHgxYjY0CisjZGVmaW5lIEFGRV9DT05OMDE5XzQgICAgICAgICAgICAgICAgICAgMHgxYjcwCisjZGVmaW5lIEFGRV9DT05OMTI0XzEgICAgICAgICAgICAgICAgICAgMHgyODg0CisjZGVmaW5lIEFGRV9DT05OMTI0XzQgICAgICAgICAgICAgICAgICAgMHgyODkwCisjZGVmaW5lIEFGRV9DT05OMTI1XzEgICAgICAgICAgICAgICAgICAgMHgyOGE0CisjZGVmaW5lIEFGRV9DT05OMTI1XzQgICAgICAgICAgICAgICAgICAgMHgyOGIwCisjZGVmaW5lIEFGRV9DT05OX1JTXzAgICAgICAgICAgICAgICAgICAgMHgzOTIwCisjZGVmaW5lIEFGRV9DT05OX1JTXzMgICAgICAgICAgICAgICAgICAgMHgzOTJjCisjZGVmaW5lIEFGRV9DT05OXzE2QklUXzAgICAgICAgICAgICAgICAgMHgzOTYwCisjZGVmaW5lIEFGRV9DT05OXzE2QklUXzMgICAgICAgICAgICAgICAgMHgzOTZjCisjZGVmaW5lIEFGRV9DT05OXzI0QklUXzAgICAgICAgICAgICAgICAgMHgzOTgwCisjZGVmaW5lIEFGRV9DT05OXzI0QklUXzMgICAgICAgICAgICAgICAgMHgzOThjCisjZGVmaW5lIEFGRV9NRU1JRl9DT04wICAgICAgICAgICAgICAgICAgMHgzZDk4CisjZGVmaW5lIEFGRV9NRU1JRl9SRF9NT04gICAgICAgICAgICAgICAgMHgzZGEwCisjZGVmaW5lIEFGRV9NRU1JRl9XUl9NT04gICAgICAgICAgICAgICAgMHgzZGE0CisjZGVmaW5lIEFGRV9ETDBfQkFTRV9NU0IgICAgICAgICAgICAgICAgMHgzZTQwCisjZGVmaW5lIEFGRV9ETDBfQkFTRSAgICAgICAgICAgICAgICAgICAgMHgzZTQ0CisjZGVmaW5lIEFGRV9ETDBfQ1VSX01TQiAgICAgICAgICAgICAgICAgMHgzZTQ4CisjZGVmaW5lIEFGRV9ETDBfQ1VSICAgICAgICAgICAgICAgICAgICAgMHgzZTRjCisjZGVmaW5lIEFGRV9ETDBfRU5EX01TQiAgICAgICAgICAgICAgICAgMHgzZTUwCisjZGVmaW5lIEFGRV9ETDBfRU5EICAgICAgICAgICAgICAgICAgICAgMHgzZTU0CisjZGVmaW5lIEFGRV9ETDBfUkNIX01PTiAgICAgICAgICAgICAgICAgMHgzZTU4CisjZGVmaW5lIEFGRV9ETDBfTENIX01PTiAgICAgICAgICAgICAgICAgMHgzZTVjCisjZGVmaW5lIEFGRV9ETDBfQ09OMCAgICAgICAgICAgICAgICAgICAgMHgzZTYwCisjZGVmaW5lIEFGRV9WVUwwX0JBU0VfTVNCICAgICAgICAgICAgICAgMHg0MjIwCisjZGVmaW5lIEFGRV9WVUwwX0JBU0UgICAgICAgICAgICAgICAgICAgMHg0MjI0CisjZGVmaW5lIEFGRV9WVUwwX0NVUl9NU0IgICAgICAgICAgICAgICAgMHg0MjI4CisjZGVmaW5lIEFGRV9WVUwwX0NVUiAgICAgICAgICAgICAgICAgICAgMHg0MjJjCisjZGVmaW5lIEFGRV9WVUwwX0VORF9NU0IgICAgICAgICAgICAgICAgMHg0MjMwCisjZGVmaW5lIEFGRV9WVUwwX0VORCAgICAgICAgICAgICAgICAgICAgMHg0MjM0CisjZGVmaW5lIEFGRV9WVUwwX0NPTjAgICAgICAgICAgICAgICAgICAgMHg0MjM4CisKKyNkZWZpbmUgQUZFX01BWF9SRUdJU1RFUiBBRkVfVlVMMF9DT04wCisjZGVmaW5lIEFGRV9JUlFfU1RBVFVTX0JJVFMgICAgICAgICAgICAgMHg3CisjZGVmaW5lIEFGRV9JUlFfQ05UX1NISUZUICAgICAgICAgICAgICAgMAorI2RlZmluZSBBRkVfSVJRX0NOVF9NQVNLCSAgICAgICAgMHhmZmZmZmYKKworLyogQVVESU9fVE9QX0NPTjIgKi8KKyNkZWZpbmUgQ0xLX09VVDVfUEROICAgICAgICAgICAgICAgICAgICBCSVQoMTQpCisjZGVmaW5lIENMS19PVVQ1X1BETl9NQVNLICAgICAgICAgICAgICAgQklUKDE0KQorI2RlZmluZSBDTEtfSU41X1BETiAgICAgICAgICAgICAgICAgICAgIEJJVCg3KQorI2RlZmluZSBDTEtfSU41X1BETl9NQVNLICAgICAgICAgICAgICAgIEJJVCg3KQorCisvKiBBVURJT19UT1BfQ09ONCAqLworI2RlZmluZSBQRE5fQVBMTF9UVU5FUjIgICAgICAgICAgICAgICAgIEJJVCgxMikKKyNkZWZpbmUgUEROX0FQTExfVFVORVIyX01BU0sgICAgICAgICAgICBCSVQoMTIpCisKKy8qIEFVRElPX0VOR0VOX0NPTjAgKi8KKyNkZWZpbmUgQVVEX0FQTEwyX0VOICAgICAgICAgICAgICAgICAgICBCSVQoMykKKyNkZWZpbmUgQVVEX0FQTEwyX0VOX01BU0sgICAgICAgICAgICAgICBCSVQoMykKKyNkZWZpbmUgQVVEXzI2TV9FTiAgICAgICAgICAgICAgICAgICAgICBCSVQoMCkKKyNkZWZpbmUgQVVEXzI2TV9FTl9NQVNLICAgICAgICAgICAgICAgICBCSVQoMCkKKworLyogQUZFX0RMMF9DT04wICovCisjZGVmaW5lIERMMF9PTl9TRlQgICAgICAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgREwwX09OX01BU0sgICAgICAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgREwwX09OX01BU0tfU0ZUICAgICAgICAgICAgICAgICBCSVQoMjgpCisjZGVmaW5lIERMMF9NSU5MRU5fU0ZUICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgREwwX01JTkxFTl9NQVNLICAgICAgICAgICAgICAgICAweGYKKyNkZWZpbmUgREwwX01JTkxFTl9NQVNLX1NGVCAgICAgICAgICAgICAoMHhmIDw8IDIwKQorI2RlZmluZSBETDBfTU9ERV9TRlQgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgREwwX01PREVfTUFTSyAgICAgICAgICAgICAgICAgICAweDFmCisjZGVmaW5lIERMMF9NT0RFX01BU0tfU0ZUICAgICAgICAgICAgICAgKDB4MWYgPDwgOCkKKyNkZWZpbmUgREwwX1BCVUZfU0laRV9TRlQgICAgICAgICAgICAgICA1CisjZGVmaW5lIERMMF9QQlVGX1NJWkVfTUFTSyAgICAgICAgICAgICAgMHgzCisjZGVmaW5lIERMMF9QQlVGX1NJWkVfTUFTS19TRlQgICAgICAgICAgKDB4MyA8PCA1KQorI2RlZmluZSBETDBfTU9OT19TRlQgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgREwwX01PTk9fTUFTSyAgICAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgREwwX01PTk9fTUFTS19TRlQgICAgICAgICAgICAgICBCSVQoNCkKKyNkZWZpbmUgREwwX0hBTElHTl9TRlQgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIERMMF9IQUxJR05fTUFTSyAgICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lIERMMF9IQUxJR05fTUFTS19TRlQgICAgICAgICAgICAgQklUKDIpCisjZGVmaW5lIERMMF9IRF9NT0RFX1NGVCAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBETDBfSERfTU9ERV9NQVNLICAgICAgICAgICAgICAgIDB4MworI2RlZmluZSBETDBfSERfTU9ERV9NQVNLX1NGVCAgICAgICAgICAgICgweDMgPDwgMCkKKworLyogQUZFX1ZVTDBfQ09OMCAqLworI2RlZmluZSBWVUwwX09OX1NGVCAgICAgICAgICAgICAgICAgICAgIDI4CisjZGVmaW5lIFZVTDBfT05fTUFTSyAgICAgICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lIFZVTDBfT05fTUFTS19TRlQgICAgICAgICAgICAgICAgQklUKDI4KQorI2RlZmluZSBWVUwwX01PREVfU0ZUICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgVlVMMF9NT0RFX01BU0sgICAgICAgICAgICAgICAgICAweDFmCisjZGVmaW5lIFZVTDBfTU9ERV9NQVNLX1NGVCAgICAgICAgICAgICAgKDB4MWYgPDwgOCkKKyNkZWZpbmUgVlVMMF9NT05PX1NGVCAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFZVTDBfTU9OT19NQVNLICAgICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lIFZVTDBfTU9OT19NQVNLX1NGVCAgICAgICAgICAgICAgQklUKDQpCisjZGVmaW5lIFZVTDBfSEFMSUdOX1NGVCAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBWVUwwX0hBTElHTl9NQVNLICAgICAgICAgICAgICAgIDB4MQorI2RlZmluZSBWVUwwX0hBTElHTl9NQVNLX1NGVCAgICAgICAgICAgIEJJVCgyKQorI2RlZmluZSBWVUwwX0hEX01PREVfU0ZUICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVlVMMF9IRF9NT0RFX01BU0sgICAgICAgICAgICAgICAweDMKKyNkZWZpbmUgVlVMMF9IRF9NT0RFX01BU0tfU0ZUICAgICAgICAgICAoMHgzIDw8IDApCisKKy8qIEFGRV9JUlFfTUNVX0NPTiAqLworI2RlZmluZSBJUlFfTUNVX01PREVfU0ZUICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgSVJRX01DVV9NT0RFX01BU0sgICAgICAgICAgICAgICAweDFmCisjZGVmaW5lIElSUV9NQ1VfTU9ERV9NQVNLX1NGVCAgICAgICAgICAgKDB4MWYgPDwgNCkKKyNkZWZpbmUgSVJRX01DVV9PTl9TRlQgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElSUV9NQ1VfT05fTUFTSyAgICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lIElSUV9NQ1VfT05fTUFTS19TRlQgICAgICAgICAgICAgQklUKDApCisjZGVmaW5lIElSUTBfTUNVX0NMUl9TRlQgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJUlEwX01DVV9DTFJfTUFTSyAgICAgICAgICAgICAgIDB4MQorI2RlZmluZSBJUlEwX01DVV9DTFJfTUFTS19TRlQgICAgICAgICAgIEJJVCgwKQorI2RlZmluZSBJUlExX01DVV9DTFJfU0ZUICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgSVJRMV9NQ1VfQ0xSX01BU0sgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgSVJRMV9NQ1VfQ0xSX01BU0tfU0ZUICAgICAgICAgICBCSVQoMSkKKyNkZWZpbmUgSVJRMl9NQ1VfQ0xSX1NGVCAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElSUTJfTUNVX0NMUl9NQVNLICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lIElSUTJfTUNVX0NMUl9NQVNLX1NGVCAgICAgICAgICAgQklUKDIpCisKKy8qIEVURE1fSU41X0NPTjIgKi8KKyNkZWZpbmUgSU5fQ0xLX1NSQyh4KSAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDEwKQorI2RlZmluZSBJTl9DTEtfU1JDX1NGVCAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIElOX0NMS19TUkNfTUFTSyAgICAgICAgICAgICAgICAgR0VOTUFTSygxMiwgMTApCisKKy8qIEVURE1fSU41X0NPTjMgKi8KKyNkZWZpbmUgSU5fU0VMX0ZTKHgpICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDI2KQorI2RlZmluZSBJTl9TRUxfRlNfU0ZUICAgICAgICAgICAgICAgICAgIDI2CisjZGVmaW5lIElOX1NFTF9GU19NQVNLICAgICAgICAgICAgICAgICAgR0VOTUFTSygzMCwgMjYpCisKKy8qIEVURE1fSU41X0NPTjQgKi8KKyNkZWZpbmUgSU5fUkVMQVRDSCh4KSAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDIwKQorI2RlZmluZSBJTl9SRUxBVENIX1NGVCAgICAgICAgICAgICAgICAgIDIwCisjZGVmaW5lIElOX1JFTEFUQ0hfTUFTSyAgICAgICAgICAgICAgICAgR0VOTUFTSygyNCwgMjApCisjZGVmaW5lIElOX0NMS19JTlYgICAgICAgICAgICAgICAgICAgICAgQklUKDE4KQorI2RlZmluZSBJTl9DTEtfSU5WX01BU0sgICAgICAgICAgICAgICAgIEJJVCgxOCkKKworLyogRVRETV9JTjVfQ09OMCAmIEVURE1fT1VUNV9DT04wICovCisjZGVmaW5lIFJFTEFUQ0hfU1JDKHgpICAgICAgICAgICAgICAgICAgKCh4KSA8PCAyOCkKKyNkZWZpbmUgUkVMQVRDSF9TUkNfU0ZUICAgICAgICAgICAgICAgICAyOAorI2RlZmluZSBSRUxBVENIX1NSQ19NQVNLICAgICAgICAgICAgICAgIEdFTk1BU0soMzAsIDI4KQorI2RlZmluZSBFVERNX0NIX05VTSh4KSAgICAgICAgICAgICAgICAgICgoKHgpIC0gMSkgPDwgMjMpCisjZGVmaW5lIEVURE1fQ0hfTlVNX1NGVCAgICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUgRVRETV9DSF9OVU1fTUFTSyAgICAgICAgICAgICAgICBHRU5NQVNLKDI3LCAyMykKKyNkZWZpbmUgRVRETV9XUkRfTEVOKHgpICAgICAgICAgICAgICAgICAoKCh4KSAtIDEpIDw8IDE2KQorI2RlZmluZSBFVERNX1dSRF9MRU5fU0ZUICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEVURE1fV1JEX0xFTl9NQVNLICAgICAgICAgICAgICAgR0VOTUFTSygyMCwgMTYpCisjZGVmaW5lIEVURE1fQklUX0xFTih4KSAgICAgICAgICAgICAgICAgKCgoeCkgLSAxKSA8PCAxMSkKKyNkZWZpbmUgRVRETV9CSVRfTEVOX1NGVCAgICAgICAgICAgICAgICAxMQorI2RlZmluZSBFVERNX0JJVF9MRU5fTUFTSyAgICAgICAgICAgICAgIEdFTk1BU0soMTUsIDExKQorI2RlZmluZSBFVERNX0ZNVCh4KSAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgNikKKyNkZWZpbmUgRVRETV9GTVRfU0ZUICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEVURE1fRk1UX01BU0sgICAgICAgICAgICAgICAgICAgR0VOTUFTSyg4LCA2KQorI2RlZmluZSBFVERNX1NZTkMgICAgICAgICAgICAgICAgICAgICAgIEJJVCgxKQorI2RlZmluZSBFVERNX1NZTkNfTUFTSyAgICAgICAgICAgICAgICAgIEJJVCgxKQorI2RlZmluZSBFVERNX0VOICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgwKQorI2RlZmluZSBFVERNX0VOX01BU0sgICAgICAgICAgICAgICAgICAgIEJJVCgwKQorCisvKiBFVERNX09VVDVfQ09ONCAqLworI2RlZmluZSBPVVRfUkVMQVRDSCh4KSAgICAgICAgICAgICAgICAgICgoeCkgPDwgMjQpCisjZGVmaW5lIE9VVF9SRUxBVENIX1NGVCAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgT1VUX1JFTEFUQ0hfTUFTSyAgICAgICAgICAgICAgICBHRU5NQVNLKDI4LCAyNCkKKyNkZWZpbmUgT1VUX0NMS19TUkMoeCkgICAgICAgICAgICAgICAgICAoKHgpIDw8IDYpCisjZGVmaW5lIE9VVF9DTEtfU1JDX1NGVCAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBPVVRfQ0xLX1NSQ19NQVNLICAgICAgICAgICAgICAgIEdFTk1BU0soOCwgNikKKyNkZWZpbmUgT1VUX1NFTF9GUyh4KSAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjZGVmaW5lIE9VVF9TRUxfRlNfU0ZUICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBPVVRfU0VMX0ZTX01BU0sgICAgICAgICAgICAgICAgIEdFTk1BU0soNCwgMCkKKworLyogRVRETV9PVVQ1X0NPTjUgKi8KKyNkZWZpbmUgRVRETV9DTEtfRElWICAgICAgICAgICAgICAgICAgICBCSVQoMTIpCisjZGVmaW5lIEVURE1fQ0xLX0RJVl9NQVNLICAgICAgICAgICAgICAgQklUKDEyKQorI2RlZmluZSBPVVRfQ0xLX0lOViAgICAgICAgICAgICAgICAgICAgIEJJVCg5KQorI2RlZmluZSBPVVRfQ0xLX0lOVl9NQVNLICAgICAgICAgICAgICAgIEJJVCg5KQorCisvKiBFVERNXzRfN19DT1dPUktfQ09OMCAqLworI2RlZmluZSBPVVRfU0VMKHgpICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTIpCisjZGVmaW5lIE9VVF9TRUxfU0ZUICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgT1VUX1NFTF9NQVNLICAgICAgICAgICAgICAgICAgICBHRU5NQVNLKDE1LCAxMikKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvbWVkaWF0ZWsvbXQ3OXh4L210Nzl4eC1zaTMyMTh4LmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9tZWRpYXRlay9tdDc5eHgvbXQ3OXh4LXNpMzIxOHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTQ1NTk1Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvbWVkaWF0ZWsvbXQ3OXh4L210Nzl4eC1zaTMyMTh4LmMKQEAgLTAsMCArMSwyOTggQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogbXQ3OXh4LXNpMzIxOHguYyAgLS0gIE1UNzl4eCBXTTg5NjAgQUxTQSBTb0MgbWFjaGluZSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjEgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBWaWMgV3UgPHZpYy53dUBtZWRpYXRlay5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorCisjaW5jbHVkZSAibXQ3OXh4LWFmZS1jbGsuaCIKKyNpbmNsdWRlICJtdDc5eHgtYWZlLWNvbW1vbi5oIgorI2luY2x1ZGUgIm10Nzl4eC1yZWcuaCIKKyNpbmNsdWRlICIuLi9jb21tb24vbXRrLWFmZS1wbGF0Zm9ybS1kcml2ZXIuaCIKKworZW51bSB7CisJSE9QUElOR19DTEsgPSAwLAorCUFQTExfQ0xLID0gMSwKK307CisKK2VudW0geworCUkyUyA9IDAsCisJUENNQSA9IDQsCisJUENNQiwKK307CisKK2VudW0geworCUVURE1fSU41ID0gMiwKKwlFVERNX09VVDUgPSAxMCwKK307CisKK2VudW0geworCUFGRV9GU184SyA9IDAsCisJQUZFX0ZTXzExSyA9IDEsCisJQUZFX0ZTXzEySyA9IDIsCisJQUZFX0ZTXzE2SyA9IDQsCisJQUZFX0ZTXzIySyA9IDUsCisJQUZFX0ZTXzI0SyA9IDYsCisJQUZFX0ZTXzMySyA9IDgsCisJQUZFX0ZTXzQ0SyA9IDksCisJQUZFX0ZTXzQ4SyA9IDEwLAorCUFGRV9GU184OEsgPSAxMywKKwlBRkVfRlNfOTZLID0gMTQsCisJQUZFX0ZTXzE3NksgPSAxNywKKwlBRkVfRlNfMTkySyA9IDE4LAorfTsKKworZW51bSB7CisJRVRETV9GU184SyA9IDAsCisJRVRETV9GU18xMksgPSAxLAorCUVURE1fRlNfMTZLID0gMiwKKwlFVERNX0ZTXzI0SyA9IDMsCisJRVRETV9GU18zMksgPSA0LAorCUVURE1fRlNfNDhLID0gNSwKKwlFVERNX0ZTXzk2SyA9IDcsCisJRVRETV9GU18xOTJLID0gOSwKKwlFVERNX0ZTXzExSyA9IDE2LAorCUVURE1fRlNfMjJLID0gMTcsCisJRVRETV9GU180NEsgPSAxOCwKKwlFVERNX0ZTXzg4SyA9IDE5LAorCUVURE1fRlNfMTc2SyA9IDIwLAorfTsKKworc3RydWN0IG10Nzl4eF9zaTMyMTh4X3ByaXYgeworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGxhdGZvcm1fbm9kZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNvZGVjX25vZGU7Cit9OworCitzdGF0aWMgaW50IG10Nzl4eF9zaTMyMTh4X2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnQgKmNvbXBvbmVudCA9CisJCXNuZF9zb2NfcnRkY29tX2xvb2t1cChydGQsIEFGRV9QQ01fTkFNRSk7CisJc3RydWN0IG10a19iYXNlX2FmZSAqYWZlID0gc25kX3NvY19jb21wb25lbnRfZ2V0X2RydmRhdGEoY29tcG9uZW50KTsKKworCS8qIGVuYWJsZSBjbGsgKi8KKwltdDc5eHhfYWZlX2VuYWJsZV9jbG9jayhhZmUpOworCXJlZ21hcF91cGRhdGVfYml0cyhhZmUtPnJlZ21hcCwgQVVESU9fVE9QX0NPTjIsIENMS19PVVQ1X1BETl9NQVNLLAorCQkJICAgMCk7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGFmZS0+cmVnbWFwLCBBVURJT19UT1BfQ09OMiwgQ0xLX0lONV9QRE5fTUFTSywKKwkJCSAgIDApOworCXJlZ21hcF91cGRhdGVfYml0cyhhZmUtPnJlZ21hcCwgQVVESU9fVE9QX0NPTjQsIDB4M2ZmZiwgMCk7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGFmZS0+cmVnbWFwLCBBVURJT19FTkdFTl9DT04wLCBBVURfQVBMTDJfRU5fTUFTSywKKwkJCSAgIEFVRF9BUExMMl9FTik7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGFmZS0+cmVnbWFwLCBBVURJT19FTkdFTl9DT04wLCBBVURfMjZNX0VOX01BU0ssCisJCQkgICBBVURfMjZNX0VOKTsKKworCS8qIHNldCBFVERNX0lONV9DT04wICovCisJcmVnbWFwX3VwZGF0ZV9iaXRzKGFmZS0+cmVnbWFwLCBFVERNX0lONV9DT04wLCBFVERNX1NZTkNfTUFTSywKKwkJCSAgIEVURE1fU1lOQyk7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGFmZS0+cmVnbWFwLCBFVERNX0lONV9DT04wLCBFVERNX0ZNVF9NQVNLLAorCQkJICAgRVRETV9GTVQoUENNQSkpOworCXJlZ21hcF91cGRhdGVfYml0cyhhZmUtPnJlZ21hcCwgRVRETV9JTjVfQ09OMCwgRVRETV9CSVRfTEVOX01BU0ssCisJCQkgICBFVERNX0JJVF9MRU4oMTYpKTsKKwlyZWdtYXBfdXBkYXRlX2JpdHMoYWZlLT5yZWdtYXAsIEVURE1fSU41X0NPTjAsIEVURE1fV1JEX0xFTl9NQVNLLAorCQkJICAgRVRETV9XUkRfTEVOKDE2KSk7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGFmZS0+cmVnbWFwLCBFVERNX0lONV9DT04wLCBFVERNX0NIX05VTV9NQVNLLAorCQkJICAgRVRETV9DSF9OVU0oNCkpOworCXJlZ21hcF91cGRhdGVfYml0cyhhZmUtPnJlZ21hcCwgRVRETV9JTjVfQ09OMCwgUkVMQVRDSF9TUkNfTUFTSywKKwkJCSAgIFJFTEFUQ0hfU1JDKEFQTExfQ0xLKSk7CisKKwkvKiBzZXQgRVRETV9JTjVfQ09OMiAqLworCXJlZ21hcF91cGRhdGVfYml0cyhhZmUtPnJlZ21hcCwgRVRETV9JTjVfQ09OMiwgSU5fQ0xLX1NSQ19NQVNLLAorCQkJICAgSU5fQ0xLX1NSQyhBUExMX0NMSykpOworCisJLyogc2V0IEVURE1fSU41X0NPTjMgKi8KKwlyZWdtYXBfdXBkYXRlX2JpdHMoYWZlLT5yZWdtYXAsIEVURE1fSU41X0NPTjMsIElOX1NFTF9GU19NQVNLLAorCQkJICAgSU5fU0VMX0ZTKEVURE1fRlNfMTZLKSk7CisKKwkvKiBzZXQgRVRETV9JTjVfQ09ONCAqLworCXJlZ21hcF91cGRhdGVfYml0cyhhZmUtPnJlZ21hcCwgRVRETV9JTjVfQ09ONCwgSU5fQ0xLX0lOVl9NQVNLLAorCQkJICAgSU5fQ0xLX0lOVik7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGFmZS0+cmVnbWFwLCBFVERNX0lONV9DT040LCBJTl9SRUxBVENIX01BU0ssCisJCQkgICBJTl9SRUxBVENIKEFGRV9GU18xNkspKTsKKworCS8qIHNldCBFVERNX09VVDVfQ09OMCAqLworCXJlZ21hcF91cGRhdGVfYml0cyhhZmUtPnJlZ21hcCwgRVRETV9PVVQ1X0NPTjAsIEVURE1fRk1UX01BU0ssCisJCQkgICBFVERNX0ZNVChQQ01BKSk7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGFmZS0+cmVnbWFwLCBFVERNX09VVDVfQ09OMCwgRVRETV9CSVRfTEVOX01BU0ssCisJCQkgICBFVERNX0JJVF9MRU4oMTYpKTsKKwlyZWdtYXBfdXBkYXRlX2JpdHMoYWZlLT5yZWdtYXAsIEVURE1fT1VUNV9DT04wLCBFVERNX1dSRF9MRU5fTUFTSywKKwkJCSAgIEVURE1fV1JEX0xFTigxNikpOworCXJlZ21hcF91cGRhdGVfYml0cyhhZmUtPnJlZ21hcCwgRVRETV9PVVQ1X0NPTjAsIEVURE1fQ0hfTlVNX01BU0ssCisJCQkgICBFVERNX0NIX05VTSg0KSk7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGFmZS0+cmVnbWFwLCBFVERNX09VVDVfQ09OMCwgUkVMQVRDSF9TUkNfTUFTSywKKwkJCSAgIFJFTEFUQ0hfU1JDKEFQTExfQ0xLKSk7CisKKwkvKiBzZXQgRVRETV9PVVQ1X0NPTjQgKi8KKwlyZWdtYXBfdXBkYXRlX2JpdHMoYWZlLT5yZWdtYXAsIEVURE1fT1VUNV9DT040LCBPVVRfU0VMX0ZTX01BU0ssCisJCQkgICBPVVRfU0VMX0ZTKEVURE1fRlNfMTZLKSk7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGFmZS0+cmVnbWFwLCBFVERNX09VVDVfQ09ONCwgT1VUX0NMS19TUkNfTUFTSywKKwkJCSAgIE9VVF9DTEtfU1JDKEFQTExfQ0xLKSk7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGFmZS0+cmVnbWFwLCBFVERNX09VVDVfQ09ONCwgT1VUX1JFTEFUQ0hfTUFTSywKKwkJCSAgIE9VVF9SRUxBVENIKEFGRV9GU18xNkspKTsKKworCS8qIHNldCBFVERNX09VVDVfQ09ONSAqLworCXJlZ21hcF91cGRhdGVfYml0cyhhZmUtPnJlZ21hcCwgRVRETV9PVVQ1X0NPTjUsIE9VVF9DTEtfSU5WX01BU0ssCisJCQkgICBPVVRfQ0xLX0lOVik7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGFmZS0+cmVnbWFwLCBFVERNX09VVDVfQ09ONSwgRVRETV9DTEtfRElWX01BU0ssCisJCQkgICBFVERNX0NMS19ESVYpOworCisJLyogc2V0IGV4dGVybmFsIGxvb3BiYWNrICovCisJcmVnbWFwX3VwZGF0ZV9iaXRzKGFmZS0+cmVnbWFwLCBFVERNXzRfN19DT1dPUktfQ09OMCwgT1VUX1NFTF9NQVNLLAorCQkJICAgT1VUX1NFTChFVERNX0lONSkpOworCisJLyogZW5hYmxlIEVURE0gKi8KKwlyZWdtYXBfdXBkYXRlX2JpdHMoYWZlLT5yZWdtYXAsIEVURE1fSU41X0NPTjAsIEVURE1fRU5fTUFTSywKKwkJCSAgIEVURE1fRU4pOworCXJlZ21hcF91cGRhdGVfYml0cyhhZmUtPnJlZ21hcCwgRVRETV9PVVQ1X0NPTjAsIEVURE1fRU5fTUFTSywKKwkJCSAgIEVURE1fRU4pOworCisJcmV0dXJuIDA7Cit9CisKK1NORF9TT0NfREFJTElOS19ERUZTKHBsYXliYWNrLAorCURBSUxJTktfQ09NUF9BUlJBWShDT01QX0NQVSgiREwxIikpLAorCURBSUxJTktfQ09NUF9BUlJBWShDT01QX0RVTU1ZKCkpLAorCURBSUxJTktfQ09NUF9BUlJBWShDT01QX0VNUFRZKCkpKTsKKworU05EX1NPQ19EQUlMSU5LX0RFRlMoY2FwdHVyZSwKKwlEQUlMSU5LX0NPTVBfQVJSQVkoQ09NUF9DUFUoIlVMMSIpKSwKKwlEQUlMSU5LX0NPTVBfQVJSQVkoQ09NUF9EVU1NWSgpKSwKKwlEQUlMSU5LX0NPTVBfQVJSQVkoQ09NUF9FTVBUWSgpKSk7CisKK1NORF9TT0NfREFJTElOS19ERUZTKGNvZGVjLAorCURBSUxJTktfQ09NUF9BUlJBWShDT01QX0NQVSgiRVRETSIpKSwKKwlEQUlMSU5LX0NPTVBfQVJSQVkoQ09NUF9DT0RFQyhOVUxMLCAicHJvc2xpY19zcGktYWlmIikpLAorCURBSUxJTktfQ09NUF9BUlJBWShDT01QX0VNUFRZKCkpKTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIG10Nzl4eF9zaTMyMTh4X2RhaV9saW5rc1tdID0geworCS8qIEZFICovCisJeworCQkubmFtZSA9ICJzaTMyMTh4LXBsYXliYWNrIiwKKwkJLnN0cmVhbV9uYW1lID0gInNpMzIxOHgtcGxheWJhY2siLAorCQkudHJpZ2dlciA9IHtTTkRfU09DX0RQQ01fVFJJR0dFUl9QT1NULAorCQkJICAgIFNORF9TT0NfRFBDTV9UUklHR0VSX1BPU1R9LAorCQkuZHluYW1pYyA9IDEsCisJCS5kcGNtX3BsYXliYWNrID0gMSwKKwkJU05EX1NPQ19EQUlMSU5LX1JFRyhwbGF5YmFjayksCisJfSwKKwl7CisJCS5uYW1lID0gInNpMzIxOHgtY2FwdHVyZSIsCisJCS5zdHJlYW1fbmFtZSA9ICJzaTMyMTh4LWNhcHR1cmUiLAorCQkudHJpZ2dlciA9IHtTTkRfU09DX0RQQ01fVFJJR0dFUl9QT1NULAorCQkJICAgIFNORF9TT0NfRFBDTV9UUklHR0VSX1BPU1R9LAorCQkuZHluYW1pYyA9IDEsCisJCS5kcGNtX2NhcHR1cmUgPSAxLAorCQlTTkRfU09DX0RBSUxJTktfUkVHKGNhcHR1cmUpLAorCX0sCisJLyogQkUgKi8KKwl7CisJCS5uYW1lID0gInNpMzIxOHgtY29kZWMiLAorCQkubm9fcGNtID0gMSwKKwkJLmRhaV9mbXQgPSBTTkRfU09DX0RBSUZNVF9EU1BfQSB8CisJCQlTTkRfU09DX0RBSUZNVF9JQl9ORiB8CisJCQlTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTLAorCQkuaW5pdCA9IG10Nzl4eF9zaTMyMTh4X2luaXQsCisJCS5kcGNtX3BsYXliYWNrID0gMSwKKwkJLmRwY21fY2FwdHVyZSA9IDEsCisJCVNORF9TT0NfREFJTElOS19SRUcoY29kZWMpLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBtdDc5eHhfc2kzMjE4eF9jYXJkID0geworCS5uYW1lID0gIm10Nzl4eC1zaTMyMTh4IiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuZGFpX2xpbmsgPSBtdDc5eHhfc2kzMjE4eF9kYWlfbGlua3MsCisJLm51bV9saW5rcyA9IEFSUkFZX1NJWkUobXQ3OXh4X3NpMzIxOHhfZGFpX2xpbmtzKSwKK307CisKK3N0YXRpYyBpbnQgbXQ3OXh4X3NpMzIxOHhfbWFjaGluZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSAmbXQ3OXh4X3NpMzIxOHhfY2FyZDsKKwlzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayAqZGFpX2xpbms7CisJc3RydWN0IG10Nzl4eF9zaTMyMTh4X3ByaXYgKnByaXY7CisJaW50IHJldCwgaTsKKworCXByaXYgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXByaXYtPnBsYXRmb3JtX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKHBkZXYtPmRldi5vZl9ub2RlLAorCQkJCQkgICAgICAgIm1lZGlhdGVrLHBsYXRmb3JtIiwgMCk7CisJaWYgKCFwcml2LT5wbGF0Zm9ybV9ub2RlKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlByb3BlcnR5ICdwbGF0Zm9ybScgbWlzc2luZyBvciBpbnZhbGlkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZm9yX2VhY2hfY2FyZF9wcmVsaW5rcyhjYXJkLCBpLCBkYWlfbGluaykgeworCQlpZiAoZGFpX2xpbmstPnBsYXRmb3Jtcy0+bmFtZSkKKwkJCWNvbnRpbnVlOworCQlkYWlfbGluay0+cGxhdGZvcm1zLT5vZl9ub2RlID0gcHJpdi0+cGxhdGZvcm1fbm9kZTsKKwl9CisKKwljYXJkLT5kZXYgPSAmcGRldi0+ZGV2OworCisJcHJpdi0+Y29kZWNfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUocGRldi0+ZGV2Lm9mX25vZGUsCisJCQkJCSAgICAibWVkaWF0ZWssZXh0LWNvZGVjIiwgMCk7CisJaWYgKCFwcml2LT5jb2RlY19ub2RlKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJQcm9wZXJ0eSAnYXVkaW8tY29kZWMnIG1pc3Npbmcgb3IgaW52YWxpZFxuIik7CisJCW9mX25vZGVfcHV0KHByaXYtPnBsYXRmb3JtX25vZGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmb3JfZWFjaF9jYXJkX3ByZWxpbmtzKGNhcmQsIGksIGRhaV9saW5rKSB7CisJCWlmIChkYWlfbGluay0+Y29kZWNzLT5uYW1lKQorCQkJY29udGludWU7CisJCWRhaV9saW5rLT5jb2RlY3MtPm9mX25vZGUgPSBwcml2LT5jb2RlY19ub2RlOworCX0KKworCXJldCA9IGRldm1fc25kX3NvY19yZWdpc3Rlcl9jYXJkKCZwZGV2LT5kZXYsIGNhcmQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXMgc25kX3NvY19yZWdpc3Rlcl9jYXJkIGZhaWwgJWRcbiIsCisJCQlfX2Z1bmNfXywgcmV0KTsKKwkJb2Zfbm9kZV9wdXQocHJpdi0+Y29kZWNfbm9kZSk7CisJCW9mX25vZGVfcHV0KHByaXYtPnBsYXRmb3JtX25vZGUpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXQ3OXh4X3NpMzIxOHhfbWFjaGluZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG10Nzl4eF9zaTMyMTh4X3ByaXYgKnByaXYgPSBzbmRfc29jX2NhcmRfZ2V0X2RydmRhdGEoY2FyZCk7CisKKwlvZl9ub2RlX3B1dChwcml2LT5jb2RlY19ub2RlKTsKKwlvZl9ub2RlX3B1dChwcml2LT5wbGF0Zm9ybV9ub2RlKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX09GCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdDc5eHhfc2kzMjE4eF9tYWNoaW5lX2R0X21hdGNoW10gPSB7CisJey5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzl4eC1zaTMyMTh4LW1hY2hpbmUiLH0sCisJe30KK307CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXQ3OXh4X3NpMzIxOHhfbWFjaGluZSA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJtdDc5eHgtc2kzMjE4eCIsCisjaWZkZWYgQ09ORklHX09GCisJCS5vZl9tYXRjaF90YWJsZSA9IG10Nzl4eF9zaTMyMTh4X21hY2hpbmVfZHRfbWF0Y2gsCisjZW5kaWYKKwl9LAorCS5wcm9iZSA9IG10Nzl4eF9zaTMyMTh4X21hY2hpbmVfcHJvYmUsCisJLnJlbW92ZSA9IG10Nzl4eF9zaTMyMTh4X21hY2hpbmVfcmVtb3ZlLAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihtdDc5eHhfc2kzMjE4eF9tYWNoaW5lKTsKKworLyogTW9kdWxlIGluZm9ybWF0aW9uICovCitNT0RVTEVfREVTQ1JJUFRJT04oIk1UNzl4eCBTSTMyMTh4IEFMU0EgU29DIG1hY2hpbmUgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJWaWMgV3UgPHZpYy53dUBtZWRpYXRlay5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoIm10Nzl4eCBzaTMyMTh4IHNvYyBjYXJkIik7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvZmlsZXMtNS40L3NvdW5kL3NvYy9tZWRpYXRlay9tdDc5eHgvbXQ3OXh4LXdtODk2MC5jIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvbWVkaWF0ZWsvbXQ3OXh4L210Nzl4eC13bTg5NjAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjZhMTE3Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL2ZpbGVzLTUuNC9zb3VuZC9zb2MvbWVkaWF0ZWsvbXQ3OXh4L210Nzl4eC13bTg5NjAuYwpAQCAtMCwwICsxLDE4NCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBtdDc5eHgtd204OTYwLmMgIC0tICBNVDc5eHggV004OTYwIEFMU0EgU29DIG1hY2hpbmUgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDIxIE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogVmljIFd1IDx2aWMud3VAbWVkaWF0ZWsuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKworI2luY2x1ZGUgIm10Nzl4eC1hZmUtY29tbW9uLmgiCisKK3N0cnVjdCBtdDc5eHhfd204OTYwX3ByaXYgeworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGxhdGZvcm1fbm9kZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNvZGVjX25vZGU7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgbXQ3OXh4X3dtODk2MF93aWRnZXRzW10gPSB7CisJU05EX1NPQ19EQVBNX0hQKCJIZWFkcGhvbmUiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJBTUlDIiwgTlVMTCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgbXQ3OXh4X3dtODk2MF9jb250cm9sc1tdID0geworCVNPQ19EQVBNX1BJTl9TV0lUQ0goIkhlYWRwaG9uZSIpLAorCVNPQ19EQVBNX1BJTl9TV0lUQ0goIkFNSUMiKSwKK307CisKK1NORF9TT0NfREFJTElOS19ERUZTKHBsYXliYWNrLAorCURBSUxJTktfQ09NUF9BUlJBWShDT01QX0NQVSgiREwxIikpLAorCURBSUxJTktfQ09NUF9BUlJBWShDT01QX0RVTU1ZKCkpLAorCURBSUxJTktfQ09NUF9BUlJBWShDT01QX0VNUFRZKCkpKTsKKworU05EX1NPQ19EQUlMSU5LX0RFRlMoY2FwdHVyZSwKKwlEQUlMSU5LX0NPTVBfQVJSQVkoQ09NUF9DUFUoIlVMMSIpKSwKKwlEQUlMSU5LX0NPTVBfQVJSQVkoQ09NUF9EVU1NWSgpKSwKKwlEQUlMSU5LX0NPTVBfQVJSQVkoQ09NUF9FTVBUWSgpKSk7CisKK1NORF9TT0NfREFJTElOS19ERUZTKGNvZGVjLAorCURBSUxJTktfQ09NUF9BUlJBWShDT01QX0NQVSgiRVRETSIpKSwKKwlEQUlMSU5LX0NPTVBfQVJSQVkoQ09NUF9DT0RFQyhOVUxMLCAid204OTYwLWhpZmkiKSksCisJREFJTElOS19DT01QX0FSUkFZKENPTVBfRU1QVFkoKSkpOworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgbXQ3OXh4X3dtODk2MF9kYWlfbGlua3NbXSA9IHsKKwkvKiBGRSAqLworCXsKKwkJLm5hbWUgPSAid204OTYwLXBsYXliYWNrIiwKKwkJLnN0cmVhbV9uYW1lID0gIndtODk2MC1wbGF5YmFjayIsCisJCS50cmlnZ2VyID0ge1NORF9TT0NfRFBDTV9UUklHR0VSX1BPU1QsCisJCQkgICAgU05EX1NPQ19EUENNX1RSSUdHRVJfUE9TVH0sCisJCS5keW5hbWljID0gMSwKKwkJLmRwY21fcGxheWJhY2sgPSAxLAorCQlTTkRfU09DX0RBSUxJTktfUkVHKHBsYXliYWNrKSwKKwl9LAorCXsKKwkJLm5hbWUgPSAid204OTYwLWNhcHR1cmUiLAorCQkuc3RyZWFtX25hbWUgPSAid204OTYwLWNhcHR1cmUiLAorCQkudHJpZ2dlciA9IHtTTkRfU09DX0RQQ01fVFJJR0dFUl9QT1NULAorCQkJICAgIFNORF9TT0NfRFBDTV9UUklHR0VSX1BPU1R9LAorCQkuZHluYW1pYyA9IDEsCisJCS5kcGNtX2NhcHR1cmUgPSAxLAorCQlTTkRfU09DX0RBSUxJTktfUkVHKGNhcHR1cmUpLAorCX0sCisJLyogQkUgKi8KKwl7CisJCS5uYW1lID0gIndtODk2MC1jb2RlYyIsCisJCS5ub19wY20gPSAxLAorCQkuZGFpX2ZtdCA9IFNORF9TT0NfREFJRk1UX0kyUyB8CisJCQlTTkRfU09DX0RBSUZNVF9OQl9ORiB8CisJCQlTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTIHwKKwkJCVNORF9TT0NfREFJRk1UX0dBVEVELAorCQkuZHBjbV9wbGF5YmFjayA9IDEsCisJCS5kcGNtX2NhcHR1cmUgPSAxLAorCQlTTkRfU09DX0RBSUxJTktfUkVHKGNvZGVjKSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgbXQ3OXh4X3dtODk2MF9jYXJkID0geworCS5uYW1lID0gIm10Nzl4eC13bTg5NjAiLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5kYWlfbGluayA9IG10Nzl4eF93bTg5NjBfZGFpX2xpbmtzLAorCS5udW1fbGlua3MgPSBBUlJBWV9TSVpFKG10Nzl4eF93bTg5NjBfZGFpX2xpbmtzKSwKKwkuY29udHJvbHMgPSBtdDc5eHhfd204OTYwX2NvbnRyb2xzLAorCS5udW1fY29udHJvbHMgPSBBUlJBWV9TSVpFKG10Nzl4eF93bTg5NjBfY29udHJvbHMpLAorCS5kYXBtX3dpZGdldHMgPSBtdDc5eHhfd204OTYwX3dpZGdldHMsCisJLm51bV9kYXBtX3dpZGdldHMgPSBBUlJBWV9TSVpFKG10Nzl4eF93bTg5NjBfd2lkZ2V0cyksCit9OworCitzdGF0aWMgaW50IG10Nzl4eF93bTg5NjBfbWFjaGluZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSAmbXQ3OXh4X3dtODk2MF9jYXJkOworCXN0cnVjdCBzbmRfc29jX2RhaV9saW5rICpkYWlfbGluazsKKwlzdHJ1Y3QgbXQ3OXh4X3dtODk2MF9wcml2ICpwcml2OworCWludCByZXQsIGk7CisKKwlwcml2ID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwcml2LT5wbGF0Zm9ybV9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShwZGV2LT5kZXYub2Zfbm9kZSwKKwkJCQkJICAgICAgICJtZWRpYXRlayxwbGF0Zm9ybSIsIDApOworCWlmICghcHJpdi0+cGxhdGZvcm1fbm9kZSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJQcm9wZXJ0eSAncGxhdGZvcm0nIG1pc3Npbmcgb3IgaW52YWxpZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZvcl9lYWNoX2NhcmRfcHJlbGlua3MoY2FyZCwgaSwgZGFpX2xpbmspIHsKKwkJaWYgKGRhaV9saW5rLT5wbGF0Zm9ybXMtPm5hbWUpCisJCQljb250aW51ZTsKKwkJZGFpX2xpbmstPnBsYXRmb3Jtcy0+b2Zfbm9kZSA9IHByaXYtPnBsYXRmb3JtX25vZGU7CisJfQorCisJY2FyZC0+ZGV2ID0gJnBkZXYtPmRldjsKKworCXByaXYtPmNvZGVjX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKHBkZXYtPmRldi5vZl9ub2RlLAorCQkJCQkgICAgIm1lZGlhdGVrLGF1ZGlvLWNvZGVjIiwgMCk7CisJaWYgKCFwcml2LT5jb2RlY19ub2RlKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJQcm9wZXJ0eSAnYXVkaW8tY29kZWMnIG1pc3Npbmcgb3IgaW52YWxpZFxuIik7CisJCW9mX25vZGVfcHV0KHByaXYtPnBsYXRmb3JtX25vZGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmb3JfZWFjaF9jYXJkX3ByZWxpbmtzKGNhcmQsIGksIGRhaV9saW5rKSB7CisJCWlmIChkYWlfbGluay0+Y29kZWNzLT5uYW1lKQorCQkJY29udGludWU7CisJCWRhaV9saW5rLT5jb2RlY3MtPm9mX25vZGUgPSBwcml2LT5jb2RlY19ub2RlOworCX0KKworCXJldCA9IHNuZF9zb2Nfb2ZfcGFyc2VfYXVkaW9fcm91dGluZyhjYXJkLCAiYXVkaW8tcm91dGluZyIpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHBhcnNlIGF1ZGlvLXJvdXRpbmc6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9vZl9ub2RlX3B1dDsKKwl9CisKKwlyZXQgPSBkZXZtX3NuZF9zb2NfcmVnaXN0ZXJfY2FyZCgmcGRldi0+ZGV2LCBjYXJkKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzIHNuZF9zb2NfcmVnaXN0ZXJfY2FyZCBmYWlsICVkXG4iLAorCQkJX19mdW5jX18sIHJldCk7CisJCWdvdG8gZXJyX29mX25vZGVfcHV0OworCX0KKworZXJyX29mX25vZGVfcHV0OgorCW9mX25vZGVfcHV0KHByaXYtPmNvZGVjX25vZGUpOworCW9mX25vZGVfcHV0KHByaXYtPnBsYXRmb3JtX25vZGUpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXQ3OXh4X3dtODk2MF9tYWNoaW5lX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbXQ3OXh4X3dtODk2MF9wcml2ICpwcml2ID0gc25kX3NvY19jYXJkX2dldF9kcnZkYXRhKGNhcmQpOworCisJb2Zfbm9kZV9wdXQocHJpdi0+Y29kZWNfbm9kZSk7CisJb2Zfbm9kZV9wdXQocHJpdi0+cGxhdGZvcm1fbm9kZSk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19PRgorc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXQ3OXh4X3dtODk2MF9tYWNoaW5lX2R0X21hdGNoW10gPSB7CisJey5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzl4eC13bTg5NjAtbWFjaGluZSIsfSwKKwl7fQorfTsKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdDc5eHhfd204OTYwX21hY2hpbmUgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAibXQ3OXh4LXdtODk2MCIsCisjaWZkZWYgQ09ORklHX09GCisJCS5vZl9tYXRjaF90YWJsZSA9IG10Nzl4eF93bTg5NjBfbWFjaGluZV9kdF9tYXRjaCwKKyNlbmRpZgorCX0sCisJLnByb2JlID0gbXQ3OXh4X3dtODk2MF9tYWNoaW5lX3Byb2JlLAorCS5yZW1vdmUgPSBtdDc5eHhfd204OTYwX21hY2hpbmVfcmVtb3ZlLAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihtdDc5eHhfd204OTYwX21hY2hpbmUpOworCisvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KK01PRFVMRV9ERVNDUklQVElPTigiTVQ3OXh4IFdNODk2MCBBTFNBIFNvQyBtYWNoaW5lIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiVmljIFd1IDx2aWMud3VAbWVkaWF0ZWsuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJtdDc5eHggd204OTYwIHNvYyBjYXJkIik7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvbXQ3OTg2LTMyYml0LmNmZyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9tdDc5ODYtMzJiaXQuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MzVmNjgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvbXQ3OTg2LTMyYml0LmNmZwpAQCAtMCwwICsxLDQ2NyBAQAorQ09ORklHX0FIQ0lfTVRLPXkKKyMgQ09ORklHX0FJUk9IQV9FTjg4MDFTX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorQ09ORklHX0FSQ0hfMzJCSVRfT0ZGX1Q9eQorQ09ORklHX0FSQ0hfQ0xPQ0tTT1VSQ0VfREFUQT15CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CitDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLPXkKK0NPTkZJR19BUkNIX01FRElBVEVLPXkKK0NPTkZJR19BUkNIX01JR0hUX0hBVkVfUENfUEFSUE9SVD15CitDT05GSUdfQVJDSF9NVUxUSVBMQVRGT1JNPXkKK0NPTkZJR19BUkNIX01VTFRJX1Y2X1Y3PXkKK0NPTkZJR19BUkNIX01VTFRJX1Y3PXkKK0NPTkZJR19BUkNIX05SX0dQSU89MAorQ09ORklHX0FSQ0hfT1BUSU9OQUxfS0VSTkVMX1JXWD15CitDT05GSUdfQVJDSF9PUFRJT05BTF9LRVJORUxfUldYX0RFRkFVTFQ9eQorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfQVJNPXkKK0NPTkZJR19BUk1fQVJDSF9USU1FUj15CitDT05GSUdfQVJNX0FSQ0hfVElNRVJfRVZUU1RSRUFNPXkKK0NPTkZJR19BUk1fQ1BVX1NVU1BFTkQ9eQorQ09ORklHX0FSTV9HSUM9eQorQ09ORklHX0FSTV9HSUNfVjM9eQorQ09ORklHX0FSTV9HSUNfVjNfSVRTPXkKK0NPTkZJR19BUk1fR0lDX1YzX0lUU19QQ0k9eQorQ09ORklHX0FSTV9IQVNfU0dfQ0hBSU49eQorQ09ORklHX0FSTV9IRUFWWV9NQj15CitDT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUPTYKK0NPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlRfNj15CitDT05GSUdfQVJNX01FRElBVEVLX0NQVUZSRVE9eQorQ09ORklHX0FSTV9QQVRDSF9JRElWPXkKK0NPTkZJR19BUk1fUEFUQ0hfUEhZU19WSVJUPXkKK0NPTkZJR19BUk1fUE1VPXkKK0NPTkZJR19BUk1fUFNDST15CitDT05GSUdfQVJNX1BTQ0lfRlc9eQorQ09ORklHX0FSTV9USFVNQj15CitDT05GSUdfQVJNX1VOV0lORD15CitDT05GSUdfQVJNX1ZJUlRfRVhUPXkKK0NPTkZJR19BVEE9eQorQ09ORklHX0FVVE9fWlJFTEFERFI9eQorQ09ORklHX0JJTkZNVF9GTEFUX0FSR1ZQX0VOVlBfT05fU1RBQ0s9eQorQ09ORklHX0JMS19ERVZfRE09eQorQ09ORklHX0JMS19ERVZfRE1fQlVJTFRJTj15CisjIENPTkZJR19CTEtfREVWX01EIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1NEPXkKK0NPTkZJR19CTEtfTVFfUENJPXkKK0NPTkZJR19CTEtfUE09eQorQ09ORklHX0JMS19TQ1NJX1JFUVVFU1Q9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjM9eQorQ09ORklHX0JUPXkKK0NPTkZJR19CVF9CQ009eQorQ09ORklHX0JUX0JSRURSPXkKK0NPTkZJR19CVF9ERUJVR0ZTPXkKK0NPTkZJR19CVF9IQ0lVQVJUPXkKK0NPTkZJR19CVF9IQ0lVQVJUX0JDTT15CisjIENPTkZJR19CVF9IQ0lVQVJUX0lOVEVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSVVBUlRfTk9LSUEgaXMgbm90IHNldAorQ09ORklHX0JUX0hDSVVBUlRfUUNBPXkKK0NPTkZJR19CVF9IQ0lVQVJUX1NFUkRFVj15CitDT05GSUdfQlRfSENJVkhDST15CitDT05GSUdfQlRfSFM9eQorQ09ORklHX0JUX0xFPXkKK0NPTkZJR19CVF9NVEtVQVJUPXkKK0NPTkZJR19CVF9RQ0E9eQorQ09ORklHX0NBQ0hFX0wyWDA9eQorQ09ORklHX0NMS0RFVl9MT09LVVA9eQorQ09ORklHX0NMS1NSQ19NTUlPPXkKK0NPTkZJR19DTE9DS19USEVSTUFMPXkKK0NPTkZJR19DTE9ORV9CQUNLV0FSRFM9eQorQ09ORklHX0NPTU1PTl9DTEs9eQorQ09ORklHX0NPTU1PTl9DTEtfTUVESUFURUs9eQorQ09ORklHX0NPTU1PTl9DTEtfTVQyNzAxPXkKKyMgQ09ORklHX0NPTU1PTl9DTEtfTVQyNzAxX0FVRFNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT01NT05fQ0xLX01UMjcwMV9CRFBTWVMgaXMgbm90IHNldAorIyBDT05GSUdfQ09NTU9OX0NMS19NVDI3MDFfRVRIU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTU1PTl9DTEtfTVQyNzAxX0czRFNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT01NT05fQ0xLX01UMjcwMV9ISUZTWVMgaXMgbm90IHNldAorIyBDT05GSUdfQ09NTU9OX0NMS19NVDI3MDFfSU1HU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTU1PTl9DTEtfTVQyNzAxX01NU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTU1PTl9DTEtfTVQyNzAxX1ZERUNTWVMgaXMgbm90IHNldAorQ09ORklHX0NPTU1PTl9DTEtfTVQ3NjIyPXkKKyMgQ09ORklHX0NPTU1PTl9DTEtfTVQ3NjIyX0FVRFNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT01NT05fQ0xLX01UNzYyMl9FVEhTWVMgaXMgbm90IHNldAorIyBDT05GSUdfQ09NTU9OX0NMS19NVDc2MjJfSElGU1lTIGlzIG5vdCBzZXQKK0NPTkZJR19DT01NT05fQ0xLX01UNzYyOT15CisjIENPTkZJR19DT01NT05fQ0xLX01UNzYyOV9FVEhTWVMgaXMgbm90IHNldAorIyBDT05GSUdfQ09NTU9OX0NMS19NVDc2MjlfSElGU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTU1PTl9DTEtfTVQ3OTgxIGlzIG5vdCBzZXQKK0NPTkZJR19DT01NT05fQ0xLX01UNzk4Nj15CitDT05GSUdfQ09NTU9OX0NMS19NVDgxMzU9eQorIyBDT05GSUdfQ09NTU9OX0NMS19NVDgxNzMgaXMgbm90IHNldAorQ09ORklHX0NPTU1PTl9DTEtfTVQ4NTE2PXkKKyMgQ09ORklHX0NPTU1PTl9DTEtfTVQ4NTE2X0FVRFNZUyBpcyBub3Qgc2V0CitDT05GSUdfQ09NUEFUXzMyQklUX1RJTUU9eQorQ09ORklHX0NPTlNPTEVfTE9HTEVWRUxfREVGQVVMVD0xNQorIyBDT05GSUdfQ1BVRlJFUV9EVCBpcyBub3Qgc2V0CitDT05GSUdfQ1BVXzMydjZLPXkKK0NPTkZJR19DUFVfMzJ2Nz15CitDT05GSUdfQ1BVX0FCUlRfRVY3PXkKK0NPTkZJR19DUFVfQ0FDSEVfVjc9eQorQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKK0NPTkZJR19DUFVfQ09QWV9WNj15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CitDT05GSUdfQ1BVX0ZSRVE9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0UgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRT15CitDT05GSUdfQ1BVX0ZSRVFfR09WX0FUVFJfU0VUPXkKK0NPTkZJR19DUFVfRlJFUV9HT1ZfQ09NTU9OPXkKK0NPTkZJR19DUFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFPXkKK0NPTkZJR19DUFVfRlJFUV9HT1ZfT05ERU1BTkQ9eQorQ09ORklHX0NQVV9GUkVRX0dPVl9QRVJGT1JNQU5DRT15CitDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRT15CitDT05GSUdfQ1BVX0ZSRVFfR09WX1NDSEVEVVRJTD15CitDT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRT15CitDT05GSUdfQ1BVX0ZSRVFfU1RBVD15CitDT05GSUdfQ1BVX0hBU19BU0lEPXkKK0NPTkZJR19DUFVfUEFCUlRfVjc9eQorQ09ORklHX0NQVV9STUFQPXkKK0NPTkZJR19DUFVfU1BFQ1RSRT15CitDT05GSUdfQ1BVX1RIRVJNQUw9eQorQ09ORklHX0NQVV9USFVNQl9DQVBBQkxFPXkKK0NPTkZJR19DUFVfVExCX1Y3PXkKK0NPTkZJR19DUFVfVjc9eQorQ09ORklHX0NSQzE2PXkKK0NPTkZJR19DUllQVE9fQUNPTVAyPXkKK0NPTkZJR19DUllQVE9fQUVBRD15CitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKK0NPTkZJR19DUllQVE9fQ01BQz15CitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9eQorQ09ORklHX0NSWVBUT19EUkJHPXkKK0NPTkZJR19DUllQVE9fRFJCR19ITUFDPXkKK0NPTkZJR19DUllQVE9fRFJCR19NRU5VPXkKK0NPTkZJR19DUllQVE9fRUNCPXkKK0NPTkZJR19DUllQVE9fRUNDPXkKK0NPTkZJR19DUllQVE9fRUNESD15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX0hBU0hfSU5GTz15CitDT05GSUdfQ1JZUFRPX0hNQUM9eQorQ09ORklHX0NSWVBUT19KSVRURVJFTlRST1BZPXkKK0NPTkZJR19DUllQVE9fS1BQPXkKK0NPTkZJR19DUllQVE9fS1BQMj15CitDT05GSUdfQ1JZUFRPX0xJQl9TSEEyNTY9eQorQ09ORklHX0NSWVBUT19MWk89eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQorQ09ORklHX0NSWVBUT19OVUxMMj15CitDT05GSUdfQ1JZUFRPX1JORz15CitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19STkdfREVGQVVMVD15CitDT05GSUdfQ1JZUFRPX1NIQTI1Nj15CitDT05GSUdfRENBQ0hFX1dPUkRfQUNDRVNTPXkKK0NPTkZJR19ERUJVR19MTF9JTkNMVURFPSJtYWNoL2RlYnVnLW1hY3JvLlMiCitDT05GSUdfREVCVUdfTUlTQz15CitDT05GSUdfREVWVE1QRlM9eQorQ09ORklHX0RFVlRNUEZTX01PVU5UPXkKK0NPTkZJR19ETUFERVZJQ0VTPXkKK0NPTkZJR19ETUFURVNUPXkKK0NPTkZJR19ETUFfRU5HSU5FPXkKK0NPTkZJR19ETUFfRU5HSU5FX1JBSUQ9eQorQ09ORklHX0RNQV9PRj15CitDT05GSUdfRE1BX1JFTUFQPXkKK0NPTkZJR19ETUFfVklSVFVBTF9DSEFOTkVMUz15CitDT05GSUdfRE1fQlVGSU89eQorIyBDT05GSUdfRE1fQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfRE1fREVCVUdfQkxPQ0tfTUFOQUdFUl9MT0NLSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ETV9JTklUPXkKKyMgQ09ORklHX0RNX01JUlJPUiBpcyBub3Qgc2V0CisjIENPTkZJR19ETV9TTkFQU0hPVCBpcyBub3Qgc2V0CitDT05GSUdfRE1fVkVSSVRZPXkKKyMgQ09ORklHX0RNX1ZFUklUWV9GRUMgaXMgbm90IHNldAorIyBDT05GSUdfRE1fVkVSSVRZX1ZFUklGWV9ST09USEFTSF9TSUcgaXMgbm90IHNldAorQ09ORklHX0RUQz15CitDT05GSUdfRFlOQU1JQ19ERUJVRz15CitDT05GSUdfRURBQ19BVE9NSUNfU0NSVUI9eQorQ09ORklHX0VEQUNfU1VQUE9SVD15CitDT05GSUdfRUlOVF9NVEs9eQorQ09ORklHX0ZJWEVEX1BIWT15CitDT05GSUdfRklYX0VBUkxZQ09OX01FTT15CitDT05GSUdfRldfTE9BREVSX1BBR0VEX0JVRj15CitDT05GSUdfR0VORVJJQ19BTExPQ0FUT1I9eQorQ09ORklHX0dFTkVSSUNfQVJDSF9UT1BPTE9HWT15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlJPQURDQVNUPXkKK0NPTkZJR19HRU5FUklDX0NQVV9BVVRPUFJPQkU9eQorQ09ORklHX0dFTkVSSUNfRUFSTFlfSU9SRU1BUD15CitDT05GSUdfR0VORVJJQ19JRExFX1BPTExfU0VUVVA9eQorQ09ORklHX0dFTkVSSUNfSVJRX0VGRkVDVElWRV9BRkZfTUFTSz15CitDT05GSUdfR0VORVJJQ19JUlFfTUlHUkFUSU9OPXkKK0NPTkZJR19HRU5FUklDX0lSUV9NVUxUSV9IQU5ETEVSPXkKK0NPTkZJR19HRU5FUklDX0lSUV9TSE9XPXkKK0NPTkZJR19HRU5FUklDX0lSUV9TSE9XX0xFVkVMPXkKK0NPTkZJR19HRU5FUklDX01TSV9JUlE9eQorQ09ORklHX0dFTkVSSUNfTVNJX0lSUV9ET01BSU49eQorQ09ORklHX0dFTkVSSUNfUENJX0lPTUFQPXkKK0NPTkZJR19HRU5FUklDX1BIWT15CitDT05GSUdfR0VORVJJQ19QSU5DT05GPXkKK0NPTkZJR19HRU5FUklDX1BJTkNUUkxfR1JPVVBTPXkKK0NPTkZJR19HRU5FUklDX1BJTk1VWF9GVU5DVElPTlM9eQorQ09ORklHX0dFTkVSSUNfU0NIRURfQ0xPQ0s9eQorQ09ORklHX0dFTkVSSUNfU01QX0lETEVfVEhSRUFEPXkKK0NPTkZJR19HRU5FUklDX1NUUk5DUFlfRlJPTV9VU0VSPXkKK0NPTkZJR19HRU5FUklDX1NUUk5MRU5fVVNFUj15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HTE9CPXkKK0NPTkZJR19HUElPTElCPXkKK0NPTkZJR19HUFkyMTFfUEhZPXkKK0NPTkZJR19HUk9fQ0VMTFM9eQorQ09ORklHX0hBTkRMRV9ET01BSU5fSVJRPXkKK0NPTkZJR19IQVJERU5fQlJBTkNIX1BSRURJQ1RPUj15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlRfTUFQPXkKK0NPTkZJR19IQVZFX1NNUD15CitDT05GSUdfSE9UUExVR19DUFU9eQorIyBDT05GSUdfSFdfTkFUIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorQ09ORklHX0hXX1JBTkRPTV9NVEs9eQorQ09ORklHX0haPTI1MAorQ09ORklHX0haXzI1MD15CitDT05GSUdfSFpfRklYRUQ9MAorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorQ09ORklHX0kyQ19NVDY1WFg9eQorQ09ORklHX0lDUExVU19QSFk9eQorQ09ORklHX0lJTz15CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19JT19VUklORz15CitDT05GSUdfSVJRQ0hJUD15CitDT05GSUdfSVJRX0RPTUFJTj15CitDT05GSUdfSVJRX0RPTUFJTl9ISUVSQVJDSFk9eQorQ09ORklHX0lSUV9GT1JDRURfVEhSRUFESU5HPXkKK0NPTkZJR19JUlFfVElNRV9BQ0NPVU5USU5HPXkKK0NPTkZJR19JUlFfV09SSz15CitDT05GSUdfSlVNUF9MQUJFTD15CisjIENPTkZJR19MRURTX1VCTlRfTEVEQkFSIGlzIG5vdCBzZXQKK0NPTkZJR19MSUJGRFQ9eQorQ09ORklHX0xPQ0tfREVCVUdHSU5HX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tfU1BJTl9PTl9PV05FUj15CitDT05GSUdfTFpPX0NPTVBSRVNTPXkKK0NPTkZJR19MWk9fREVDT01QUkVTUz15CisjIENPTkZJR19NQUNIX01UMjcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01UNjU4OSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01UNjU5MiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01UNzYyMyBpcyBub3Qgc2V0CitDT05GSUdfTUFDSF9NVDc2Mjk9eQorIyBDT05GSUdfTUFDSF9NVDgxMjcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NVDgxMzUgaXMgbm90IHNldAorQ09ORklHX01BR0lDX1NZU1JRPXkKK0NPTkZJR19NRD15CitDT05GSUdfTURJT19CVVM9eQorQ09ORklHX01ESU9fREVWSUNFPXkKKyMgQ09ORklHX01FRElBVEVLX0dFX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfTUVESUFURUtfTVQ2NTc3X0FVWEFEQz15CitDT05GSUdfTUVESUFURUtfTkVUU1lTX1YyPXkKK0NPTkZJR19NRURJQVRFS19XQVRDSERPRz15CitDT05GSUdfTUVESUFfU1VQUE9SVD15CitDT05GSUdfTUVNRkRfQ1JFQVRFPXkKK0NPTkZJR19NRVNTQUdFX0xPR0xFVkVMX0RFRkFVTFQ9NworQ09ORklHX01GRF9TWVNDT049eQorQ09ORklHX01JR0hUX0hBVkVfQ0FDSEVfTDJYMD15CitDT05GSUdfTUlHUkFUSU9OPXkKK0NPTkZJR19NTUM9eQorQ09ORklHX01NQ19NVEs9eQorQ09ORklHX01PRFVMRVNfVFJFRV9MT09LVVA9eQorQ09ORklHX01PRFVMRVNfVVNFX0VMRl9SRUw9eQorQ09ORklHX01UNzUzWF9HU1c9eQorQ09ORklHX01URF9OQU5EX0NPUkU9eQorQ09ORklHX01URF9OQU5EX0VDQ19TV19IQU1NSU5HPXkKK0NPTkZJR19NVERfTkFORF9NVEs9eQorQ09ORklHX01URF9SQVdfTkFORD15CitDT05GSUdfTVREX1NQSV9OQU5EPXkKK0NPTkZJR19NVERfU1BJX05PUj15CitDT05GSUdfTVREX1NQTElUX0ZJUk1XQVJFPXkKK0NPTkZJR19NVERfU1BMSVRfRklUX0ZXPXkKK0NPTkZJR19NVERfVUJJPXkKK0NPTkZJR19NVERfVUJJX0JFQl9MSU1JVD0yMAorQ09ORklHX01URF9VQklfQkxPQ0s9eQorQ09ORklHX01URF9VQklfV0xfVEhSRVNIT0xEPTQwOTYKKyMgQ09ORklHX01US19DTURRIGlzIG5vdCBzZXQKKyMgQ09ORklHX01US19DUURNQSBpcyBub3Qgc2V0CitDT05GSUdfTVRLX0VGVVNFPXkKK0NPTkZJR19NVEtfSFNETUE9eQorQ09ORklHX01US19JQ0VfREVCVUc9eQorQ09ORklHX01US19JTkZSQUNGRz15CitDT05GSUdfTVRLX1BNSUNfV1JBUD15CitDT05GSUdfTVRLX1NDUFNZUz15CitDT05GSUdfTVRLX1NQSV9OQU5EPXkKK0NPTkZJR19NVEtfVEhFUk1BTD15CitDT05GSUdfTVRLX1RJTUVSPXkKKyMgQ09ORklHX01US19VQVJUX0FQRE1BIGlzIG5vdCBzZXQKK0NPTkZJR19NVVRFWF9TUElOX09OX09XTkVSPXkKK0NPTkZJR19ORUVEX0RNQV9NQVBfU1RBVEU9eQorQ09ORklHX05FVF9ERVZMSU5LPXkKK0NPTkZJR19ORVRfRFNBPXkKK0NPTkZJR19ORVRfRFNBX01UNzUzMD15CitDT05GSUdfTkVUX0RTQV9UQUdfTVRLPXkKK0NPTkZJR19ORVRfRkxPV19MSU1JVD15CitDT05GSUdfTkVUX01FRElBVEVLX1NPQz15CitDT05GSUdfTkVUX1NXSVRDSERFVj15CitDT05GSUdfTkVUX1ZFTkRPUl9NRURJQVRFSz15CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTUJNPXkKKyMgQ09ORklHX05NQk1fTE9HX0xFVkVMX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX05NQk1fTE9HX0xFVkVMX0VNRVJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX05NQk1fTE9HX0xFVkVMX0VSUiBpcyBub3Qgc2V0CitDT05GSUdfTk1CTV9MT0dfTEVWRUxfSU5GTz15CisjIENPTkZJR19OTUJNX0xPR19MRVZFTF9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX05NQk1fTE9HX0xFVkVMX1dBUk4gaXMgbm90IHNldAorQ09ORklHX05NQk1fTVREPXkKK0NPTkZJR19OT19IWl9DT01NT049eQorQ09ORklHX05PX0haX0lETEU9eQorQ09ORklHX05SX0NQVVM9NAorQ09ORklHX05WTUVNPXkKK0NPTkZJR19OVk1FTV9TWVNGUz15CitDT05GSUdfT0Y9eQorQ09ORklHX09GX0FERFJFU1M9eQorQ09ORklHX09GX0VBUkxZX0ZMQVRUUkVFPXkKK0NPTkZJR19PRl9GTEFUVFJFRT15CitDT05GSUdfT0ZfR1BJTz15CitDT05GSUdfT0ZfSVJRPXkKK0NPTkZJR19PRl9LT0JKPXkKK0NPTkZJR19PRl9NRElPPXkKK0NPTkZJR19PRl9ORVQ9eQorQ09ORklHX09MRF9TSUdBQ1RJT049eQorQ09ORklHX09MRF9TSUdTVVNQRU5EMz15CitDT05GSUdfT1VURVJfQ0FDSEU9eQorQ09ORklHX09VVEVSX0NBQ0hFX1NZTkM9eQorQ09ORklHX1BBREFUQT15CitDT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAorQ09ORklHX1BBUlRJVElPTl9QRVJDUFU9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJRV9NRURJQVRFSz15CitDT05GSUdfUENJRV9NRURJQVRFS19HRU4zPXkKK0NPTkZJR19QQ0lfREVCVUc9eQorQ09ORklHX1BDSV9ET01BSU5TPXkKK0NPTkZJR19QQ0lfRE9NQUlOU19HRU5FUklDPXkKK0NPTkZJR19QQ0lfTVNJPXkKK0NPTkZJR19QQ0lfTVNJX0lSUV9ET01BSU49eQorQ09ORklHX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19QRVJGX1VTRV9WTUFMTE9DPXkKK0NPTkZJR19QR1RBQkxFX0xFVkVMUz0yCitDT05GSUdfUEhZTElCPXkKK0NPTkZJR19QSFlMSU5LPXkKK0NPTkZJR19QSFlfTVRLX1RQSFk9eQorIyBDT05GSUdfUEhZX01US19VRlMgaXMgbm90IHNldAorIyBDT05GSUdfUEhZX01US19YU1BIWSBpcyBub3Qgc2V0CitDT05GSUdfUElOQ1RSTD15CitDT05GSUdfUElOQ1RSTF9NVDc2Mjk9eQorIyBDT05GSUdfUElOQ1RSTF9NVDc5ODEgaXMgbm90IHNldAorQ09ORklHX1BJTkNUUkxfTVQ3OTg2PXkKK0NPTkZJR19QSU5DVFJMX01US19NT09SRT15CitDT05GSUdfUE09eQorQ09ORklHX1BNX0NMSz15CitDT05GSUdfUE1fR0VORVJJQ19ET01BSU5TPXkKK0NPTkZJR19QTV9HRU5FUklDX0RPTUFJTlNfT0Y9eQorQ09ORklHX1BNX09QUD15CitDT05GSUdfUE9XRVJfUkVTRVQ9eQorQ09ORklHX1BPV0VSX1JFU0VUX1NZU0NPTj15CitDT05GSUdfUE9XRVJfU1VQUExZPXkKK0NPTkZJR19QUklOVEtfVElNRT15CitDT05GSUdfUFdNPXkKK0NPTkZJR19QV01fTUVESUFURUs9eQorIyBDT05GSUdfUFdNX01US19ESVNQIGlzIG5vdCBzZXQKK0NPTkZJR19QV01fU1lTRlM9eQorQ09ORklHX1JBUz15CitDT05GSUdfUkFUSU9OQUw9eQorIyBDT05GSUdfUkFWRV9TUF9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfTkVFRF9TRUdDQkxJU1Q9eQorQ09ORklHX1JDVV9TVEFMTF9DT01NT049eQorQ09ORklHX1JFQUxURUtfUEhZPXkKK0NPTkZJR19SRUZDT1VOVF9GVUxMPXkKK0NPTkZJR19SRUdNQVA9eQorQ09ORklHX1JFR01BUF9NTUlPPXkKK0NPTkZJR19SRUdVTEFUT1I9eQorQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFPXkKK0NPTkZJR19SRUdVTEFUT1JfTVQ2MzgwPXkKK0NPTkZJR19SRVNFVF9DT05UUk9MTEVSPXkKK0NPTkZJR19SRVNFVF9USV9TWVNDT049eQorQ09ORklHX1JGU19BQ0NFTD15CitDT05GSUdfUlBTPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19EUlZfTVQ3NjIyPXkKK0NPTkZJR19SVENfSTJDX0FORF9TUEk9eQorQ09ORklHX1JUQ19NQzE0NjgxOF9MSUI9eQorIyBDT05GSUdfUlRMODM2N1NfR1NXIGlzIG5vdCBzZXQKK0NPTkZJR19SV1NFTV9TUElOX09OX09XTkVSPXkKK0NPTkZJR19TQ0hFRF9NQz15CitDT05GSUdfU0NTST15CisjIENPTkZJR19TRUNUSU9OX01JU01BVENIX1dBUk5fT05MWSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfRlNMPXkKK0NPTkZJR19TRVJJQUxfODI1MF9NVDY1Nzc9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTMKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTMKK0NPTkZJR19TRVJJQUxfREVWX0JVUz15CitDT05GSUdfU0VSSUFMX0RFVl9DVFJMX1RUWVBPUlQ9eQorQ09ORklHX1NFUklBTF9NQ1RSTF9HUElPPXkKK0NPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQorQ09ORklHX1NHTF9BTExPQz15CitDT05GSUdfU0dfUE9PTD15CitDT05GSUdfU01QPXkKK0NPTkZJR19TTVBfT05fVVA9eQorQ09ORklHX1NQQVJTRV9JUlE9eQorQ09ORklHX1NQST15CitDT05GSUdfU1BJX01BU1RFUj15CitDT05GSUdfU1BJX01FTT15CitDT05GSUdfU1BJX01UNjVYWD15CisjIENPTkZJR19TUElfTVRLX05PUiBpcyBub3Qgc2V0CitDT05GSUdfU1BJX01US19TTkZJPXkKK0NPTkZJR19TUkNVPXkKK0NPTkZJR19TV1BIWT15CitDT05GSUdfU1dQX0VNVUxBVEU9eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19USEVSTUFMPXkKK0NPTkZJR19USEVSTUFMX0RFRkFVTFRfR09WX1NURVBfV0lTRT15CitDT05GSUdfVEhFUk1BTF9FTUVSR0VOQ1lfUE9XRVJPRkZfREVMQVlfTVM9MAorQ09ORklHX1RIRVJNQUxfRU1VTEFUSU9OPXkKK0NPTkZJR19USEVSTUFMX0dPVl9CQU5HX0JBTkc9eQorQ09ORklHX1RIRVJNQUxfR09WX0ZBSVJfU0hBUkU9eQorQ09ORklHX1RIRVJNQUxfR09WX1BPV0VSX0FMTE9DQVRPUj15CitDT05GSUdfVEhFUk1BTF9HT1ZfU1RFUF9XSVNFPXkKK0NPTkZJR19USEVSTUFMX0dPVl9VU0VSX1NQQUNFPXkKK0NPTkZJR19USEVSTUFMX09GPXkKK0NPTkZJR19USEVSTUFMX1dSSVRBQkxFX1RSSVBTPXkKK0NPTkZJR19USUNLX0NQVV9BQ0NPVU5USU5HPXkKK0NPTkZJR19USU1FUl9PRj15CitDT05GSUdfVElNRVJfUFJPQkU9eQorQ09ORklHX1RSRUVfUkNVPXkKK0NPTkZJR19UUkVFX1NSQ1U9eQorQ09ORklHX1VCSUZTX0ZTPXkKK0NPTkZJR19VQklGU19GU19BRFZBTkNFRF9DT01QUj15CitDT05GSUdfVUJJRlNfRlNfTFpPPXkKK0NPTkZJR19VQklGU19GU19aTElCPXkKKyMgQ09ORklHX1VDTEFNUF9UQVNLIGlzIG5vdCBzZXQKK0NPTkZJR19VTkNPTVBSRVNTX0lOQ0xVREU9ImRlYnVnL3VuY29tcHJlc3MuaCIKK0NPTkZJR19VTldJTkRFUl9BUk09eQorQ09ORklHX1VTQj15CitDT05GSUdfVVNCX0NPTU1PTj15CitDT05GSUdfVVNCX1NUT1JBR0U9eQorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfVUFTPXkKK0NPTkZJR19VU0JfWEhDSV9IQ0Q9eQorQ09ORklHX1VTQl9YSENJX01USz15CitDT05GSUdfVVNCX1hIQ0lfTVRLX0RFQlVHRlM9eQorIyBDT05GSUdfVVNCX1hIQ0lfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX1VTRV9PRj15CisjIENPTkZJR19WRlAgaXMgbm90IHNldAorQ09ORklHX1dBVENIRE9HX0NPUkU9eQorQ09ORklHX1dBVENIRE9HX1BSRVRJTUVPVVRfREVGQVVMVF9HT1ZfUEFOSUM9eQorQ09ORklHX1dBVENIRE9HX1BSRVRJTUVPVVRfR09WPXkKKyMgQ09ORklHX1dBVENIRE9HX1BSRVRJTUVPVVRfR09WX05PT1AgaXMgbm90IHNldAorQ09ORklHX1dBVENIRE9HX1BSRVRJTUVPVVRfR09WX1BBTklDPXkKK0NPTkZJR19XQVRDSERPR19QUkVUSU1FT1VUX0dPVl9TRUw9bQorQ09ORklHX1dBVENIRE9HX1NZU0ZTPXkKK0NPTkZJR19YUFM9eQorQ09ORklHX1haX0RFQ19BUk09eQorQ09ORklHX1haX0RFQ19CQ0o9eQorQ09ORklHX1pCT09UX1JPTV9CU1M9MAorQ09ORklHX1pCT09UX1JPTV9URVhUPTAKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX1pMSUJfSU5GTEFURT15CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvbXQ3OTg2LmNmZyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9tdDc5ODYuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmY2VhYTIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvbXQ3OTg2LmNmZwpAQCAtMCwwICsxLDUyOSBAQAorQ09ORklHXzY0QklUPXkKK0NPTkZJR19BSENJX01USz15CitDT05GSUdfQUlST0hBX0VOODgwMVNfUEhZPXkKK0NPTkZJR19BUkNIX0NMT0NLU09VUkNFX0RBVEE9eQorQ09ORklHX0FSQ0hfRE1BX0FERFJfVF82NEJJVD15CitDT05GSUdfQVJDSF9LRUVQX01FTUJMT0NLPXkKK0NPTkZJR19BUkNIX01FRElBVEVLPXkKK0NPTkZJR19BUkNIX01NQVBfUk5EX0JJVFM9MTgKK0NPTkZJR19BUkNIX01NQVBfUk5EX0JJVFNfTUFYPTI0CitDT05GSUdfQVJDSF9NTUFQX1JORF9CSVRTX01JTj0xOAorQ09ORklHX0FSQ0hfTU1BUF9STkRfQ09NUEFUX0JJVFM9MTEKK0NPTkZJR19BUkNIX01NQVBfUk5EX0NPTVBBVF9CSVRTX01JTj0xMQorQ09ORklHX0FSQ0hfUFJPQ19LQ09SRV9URVhUPXkKK0NPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQ9eQorQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19BUk02ND15CitDT05GSUdfQVJNNjRfNEtfUEFHRVM9eQorQ09ORklHX0FSTTY0X0NOUD15CitDT05GSUdfQVJNNjRfQ09OVF9TSElGVD00CitDT05GSUdfQVJNNjRfRVJSQVRVTV8xMTY1NTIyPXkKK0NPTkZJR19BUk02NF9FUlJBVFVNXzEyODY4MDc9eQorQ09ORklHX0FSTTY0X0VSUkFUVU1fMTQxODA0MD15CitDT05GSUdfQVJNNjRfSFdfQUZEQk09eQorQ09ORklHX0FSTTY0X1BBR0VfU0hJRlQ9MTIKK0NPTkZJR19BUk02NF9QQU49eQorQ09ORklHX0FSTTY0X1BBX0JJVFM9NDgKK0NPTkZJR19BUk02NF9QQV9CSVRTXzQ4PXkKK0NPTkZJR19BUk02NF9QVFJfQVVUSD15CitDT05GSUdfQVJNNjRfU1NCRD15CitDT05GSUdfQVJNNjRfU1ZFPXkKKyMgQ09ORklHX0FSTTY0X1NXX1RUQlIwX1BBTiBpcyBub3Qgc2V0CitDT05GSUdfQVJNNjRfVEFHR0VEX0FERFJfQUJJPXkKK0NPTkZJR19BUk02NF9VQU89eQorQ09ORklHX0FSTTY0X1ZBX0JJVFM9MzkKK0NPTkZJR19BUk02NF9WQV9CSVRTXzM5PXkKK0NPTkZJR19BUk02NF9WSEU9eQorQ09ORklHX0FSTTY0X1dPUktBUk9VTkRfUkVQRUFUX1RMQkk9eQorIyBDT05GSUdfQVJNVjhfREVQUkVDQVRFRCBpcyBub3Qgc2V0CitDT05GSUdfQVJNX0FNQkE9eQorQ09ORklHX0FSTV9BUkNIX1RJTUVSPXkKK0NPTkZJR19BUk1fQVJDSF9USU1FUl9FVlRTVFJFQU09eQorQ09ORklHX0FSTV9HSUM9eQorQ09ORklHX0FSTV9HSUNfVjJNPXkKK0NPTkZJR19BUk1fR0lDX1YzPXkKK0NPTkZJR19BUk1fR0lDX1YzX0lUUz15CitDT05GSUdfQVJNX0dJQ19WM19JVFNfUENJPXkKK0NPTkZJR19BUk1fTUVESUFURUtfQ1BVRlJFUT15CitDT05GSUdfQVJNX1BNVT15CitDT05GSUdfQVJNX1BTQ0lfRlc9eQorQ09ORklHX0FUQT15CitDT05GSUdfQVVESVRfQVJDSF9DT01QQVRfR0VORVJJQz15CitDT05GSUdfQkxLX0RFVl9ETT15CitDT05GSUdfQkxLX0RFVl9ETV9CVUlMVElOPXkKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9NRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQkxLX01RX1BDST15CitDT05GSUdfQkxLX1BNPXkKK0NPTkZJR19CTEtfU0NTSV9SRVFVRVNUPXkKK0NPTkZJR19CTE9DS19DT01QQVQ9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjM9eQorQ09ORklHX0JUPXkKK0NPTkZJR19CVF9CQ009eQorQ09ORklHX0JUX0JSRURSPXkKK0NPTkZJR19CVF9ERUJVR0ZTPXkKK0NPTkZJR19CVF9IQ0lVQVJUPXkKK0NPTkZJR19CVF9IQ0lVQVJUX0JDTT15CisjIENPTkZJR19CVF9IQ0lVQVJUX0lOVEVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSVVBUlRfTk9LSUEgaXMgbm90IHNldAorQ09ORklHX0JUX0hDSVVBUlRfUUNBPXkKK0NPTkZJR19CVF9IQ0lVQVJUX1NFUkRFVj15CitDT05GSUdfQlRfSENJVkhDST15CitDT05GSUdfQlRfSFM9eQorQ09ORklHX0JUX0xFPXkKK0NPTkZJR19CVF9NVEtVQVJUPXkKK0NPTkZJR19CVF9RQ0E9eQorQ09ORklHX0NBVklVTV9UWDJfRVJSQVRVTV8yMTk9eQorQ09ORklHX0NMS0RFVl9MT09LVVA9eQorQ09ORklHX0NMS1NSQ19NTUlPPXkKK0NPTkZJR19DTE9DS19USEVSTUFMPXkKK0NPTkZJR19DTE9ORV9CQUNLV0FSRFM9eQorQ09ORklHX0NPTU1PTl9DTEs9eQorQ09ORklHX0NPTU1PTl9DTEtfTUVESUFURUs9eQorQ09ORklHX0NPTU1PTl9DTEtfTVQyNzEyPXkKKyMgQ09ORklHX0NPTU1PTl9DTEtfTVQyNzEyX0JEUFNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT01NT05fQ0xLX01UMjcxMl9JTUdTWVMgaXMgbm90IHNldAorIyBDT05GSUdfQ09NTU9OX0NMS19NVDI3MTJfSlBHREVDU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTU1PTl9DTEtfTVQyNzEyX01GR0NGRyBpcyBub3Qgc2V0CisjIENPTkZJR19DT01NT05fQ0xLX01UMjcxMl9NTVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT01NT05fQ0xLX01UMjcxMl9WREVDU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTU1PTl9DTEtfTVQyNzEyX1ZFTkNTWVMgaXMgbm90IHNldAorIyBDT05GSUdfQ09NTU9OX0NMS19NVDY3NzkgaXMgbm90IHNldAorIyBDT05GSUdfQ09NTU9OX0NMS19NVDY3OTcgaXMgbm90IHNldAorQ09ORklHX0NPTU1PTl9DTEtfTVQ3NjIyPXkKKyMgQ09ORklHX0NPTU1PTl9DTEtfTVQ3NjIyX0FVRFNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT01NT05fQ0xLX01UNzYyMl9FVEhTWVMgaXMgbm90IHNldAorIyBDT05GSUdfQ09NTU9OX0NMS19NVDc2MjJfSElGU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTU1PTl9DTEtfTVQ3OTgxIGlzIG5vdCBzZXQKK0NPTkZJR19DT01NT05fQ0xLX01UNzk4Nj15CisjIENPTkZJR19DT01NT05fQ0xLX01UODE3MyBpcyBub3Qgc2V0CitDT05GSUdfQ09NTU9OX0NMS19NVDgxODM9eQorIyBDT05GSUdfQ09NTU9OX0NMS19NVDgxODNfQVVESU9TWVMgaXMgbm90IHNldAorIyBDT05GSUdfQ09NTU9OX0NMS19NVDgxODNfQ0FNU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTU1PTl9DTEtfTVQ4MTgzX0lNR1NZUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT01NT05fQ0xLX01UODE4M19JUFVfQURMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTU1PTl9DTEtfTVQ4MTgzX0lQVV9DT05OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTU1PTl9DTEtfTVQ4MTgzX0lQVV9DT1JFMCBpcyBub3Qgc2V0CisjIENPTkZJR19DT01NT05fQ0xLX01UODE4M19JUFVfQ09SRTEgaXMgbm90IHNldAorIyBDT05GSUdfQ09NTU9OX0NMS19NVDgxODNfTUZHQ0ZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTU1PTl9DTEtfTVQ4MTgzX01NU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTU1PTl9DTEtfTVQ4MTgzX1ZERUNTWVMgaXMgbm90IHNldAorIyBDT05GSUdfQ09NTU9OX0NMS19NVDgxODNfVkVOQ1NZUyBpcyBub3Qgc2V0CitDT05GSUdfQ09NTU9OX0NMS19NVDg1MTY9eQorIyBDT05GSUdfQ09NTU9OX0NMS19NVDg1MTZfQVVEU1lTIGlzIG5vdCBzZXQKK0NPTkZJR19DT01QQVQ9eQorQ09ORklHX0NPTVBBVF8zMkJJVF9USU1FPXkKK0NPTkZJR19DT01QQVRfQklORk1UX0VMRj15CitDT05GSUdfQ09NUEFUX05FVExJTktfTUVTU0FHRVM9eQorQ09ORklHX0NPTVBBVF9PTERfU0lHQUNUSU9OPXkKK0NPTkZJR19DT05TT0xFX0xPR0xFVkVMX0RFRkFVTFQ9MTUKKyMgQ09ORklHX0NQVUZSRVFfRFQgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BFUkZPUk1BTkNFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0U9eQorQ09ORklHX0NQVV9GUkVRX0dPVl9BVFRSX1NFVD15CitDT05GSUdfQ1BVX0ZSRVFfR09WX0NPTU1PTj15CitDT05GSUdfQ1BVX0ZSRVFfR09WX0NPTlNFUlZBVElWRT15CitDT05GSUdfQ1BVX0ZSRVFfR09WX09OREVNQU5EPXkKK0NPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0U9eQorQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkU9eQorQ09ORklHX0NQVV9GUkVRX0dPVl9TQ0hFRFVUSUw9eQorQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0U9eQorQ09ORklHX0NQVV9GUkVRX1NUQVQ9eQorQ09ORklHX0NQVV9STUFQPXkKK0NPTkZJR19DUFVfVEhFUk1BTD15CitDT05GSUdfQ1JDMTY9eQorQ09ORklHX0NSWVBUT19BQ09NUDI9eQorQ09ORklHX0NSWVBUT19BRUFEPXkKK0NPTkZJR19DUllQVE9fQUVBRDI9eQorQ09ORklHX0NSWVBUT19BVVRIRU5DPXkKK0NPTkZJR19DUllQVE9fQ0JDPXkKK0NPTkZJR19DUllQVE9fQ01BQz15CitDT05GSUdfQ1JZUFRPX0NSWVBURD15CitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9eQorQ09ORklHX0NSWVBUT19ERVM9eQorQ09ORklHX0NSWVBUT19ERVZfU0FGRVhDRUw9eQorQ09ORklHX0NSWVBUT19EUkJHPXkKK0NPTkZJR19DUllQVE9fRFJCR19ITUFDPXkKK0NPTkZJR19DUllQVE9fRFJCR19NRU5VPXkKK0NPTkZJR19DUllQVE9fRUNCPXkKK0NPTkZJR19DUllQVE9fRUNDPXkKK0NPTkZJR19DUllQVE9fRUNESD15CitDT05GSUdfQ1JZUFRPX0VDSEFJTklWPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fSEFTSF9JTkZPPXkKK0NPTkZJR19DUllQVE9fSE1BQz15CitDT05GSUdfQ1JZUFRPX0hXPXkKK0NPTkZJR19DUllQVE9fSklUVEVSRU5UUk9QWT15CitDT05GSUdfQ1JZUFRPX0tQUD15CitDT05GSUdfQ1JZUFRPX0tQUDI9eQorQ09ORklHX0NSWVBUT19MSUJfREVTPXkKK0NPTkZJR19DUllQVE9fTElCX1NIQTI1Nj15CitDT05GSUdfQ1JZUFRPX0xaTz15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CitDT05GSUdfQ1JZUFRPX01ENT15CitDT05GSUdfQ1JZUFRPX05VTEw9eQorQ09ORklHX0NSWVBUT19OVUxMMj15CitDT05GSUdfQ1JZUFRPX1JORz15CitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19STkdfREVGQVVMVD15CitDT05GSUdfQ1JZUFRPX1NIQTE9eQorQ09ORklHX0NSWVBUT19TSEEyNTY9eQorQ09ORklHX0NSWVBUT19TSEE1MTI9eQorQ09ORklHX0NSWVBUT19URVNUPW0KK0NPTkZJR19EQ0FDSEVfV09SRF9BQ0NFU1M9eQorQ09ORklHX0RFQlVHX01JU0M9eQorQ09ORklHX0RFVlRNUEZTPXkKK0NPTkZJR19ERVZUTVBGU19NT1VOVD15CitDT05GSUdfRE1BREVWSUNFUz15CitDT05GSUdfRE1BVEVTVD15CitDT05GSUdfRE1BX0RJUkVDVF9SRU1BUD15CitDT05GSUdfRE1BX0VOR0lORT15CitDT05GSUdfRE1BX0VOR0lORV9SQUlEPXkKK0NPTkZJR19ETUFfT0Y9eQorQ09ORklHX0RNQV9SRU1BUD15CitDT05GSUdfRE1BX1ZJUlRVQUxfQ0hBTk5FTFM9eQorQ09ORklHX0RNX0JVRklPPXkKKyMgQ09ORklHX0RNX0NSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX0RFQlVHX0JMT0NLX01BTkFHRVJfTE9DS0lORyBpcyBub3Qgc2V0CitDT05GSUdfRE1fSU5JVD15CisjIENPTkZJR19ETV9NSVJST1IgaXMgbm90IHNldAorIyBDT05GSUdfRE1fU05BUFNIT1QgaXMgbm90IHNldAorQ09ORklHX0RNX1ZFUklUWT15CisjIENPTkZJR19ETV9WRVJJVFlfRkVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX1ZFUklUWV9WRVJJRllfUk9PVEhBU0hfU0lHIGlzIG5vdCBzZXQKK0NPTkZJR19EUk1fUkNBUl9XUklURUJBQ0s9eQorQ09ORklHX0RUQz15CitDT05GSUdfRFlOQU1JQ19ERUJVRz15CitDT05GSUdfRURBQ19TVVBQT1JUPXkKK0NPTkZJR19FSU5UX01USz15CitDT05GSUdfRklYRURfUEhZPXkKK0NPTkZJR19GSVhfRUFSTFlDT05fTUVNPXkKKyMgQ09ORklHX0ZMQVRNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19GVUpJVFNVX0VSUkFUVU1fMDEwMDAxPXkKK0NPTkZJR19GV19MT0FERVJfUEFHRURfQlVGPXkKK0NPTkZJR19HRU5FUklDX0FMTE9DQVRPUj15CitDT05GSUdfR0VORVJJQ19BUkNIX1RPUE9MT0dZPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfR0VORVJJQ19CVUdfUkVMQVRJVkVfUE9JTlRFUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlJPQURDQVNUPXkKK0NPTkZJR19HRU5FUklDX0NQVV9BVVRPUFJPQkU9eQorQ09ORklHX0dFTkVSSUNfQ1BVX1ZVTE5FUkFCSUxJVElFUz15CitDT05GSUdfR0VORVJJQ19DU1VNPXkKK0NPTkZJR19HRU5FUklDX0VBUkxZX0lPUkVNQVA9eQorQ09ORklHX0dFTkVSSUNfR0VUVElNRU9GREFZPXkKK0NPTkZJR19HRU5FUklDX0lETEVfUE9MTF9TRVRVUD15CitDT05GSUdfR0VORVJJQ19JUlFfRUZGRUNUSVZFX0FGRl9NQVNLPXkKK0NPTkZJR19HRU5FUklDX0lSUV9NSUdSQVRJT049eQorQ09ORklHX0dFTkVSSUNfSVJRX01VTFRJX0hBTkRMRVI9eQorQ09ORklHX0dFTkVSSUNfSVJRX1NIT1c9eQorQ09ORklHX0dFTkVSSUNfSVJRX1NIT1dfTEVWRUw9eQorQ09ORklHX0dFTkVSSUNfTVNJX0lSUT15CitDT05GSUdfR0VORVJJQ19NU0lfSVJRX0RPTUFJTj15CitDT05GSUdfR0VORVJJQ19QQ0lfSU9NQVA9eQorQ09ORklHX0dFTkVSSUNfUEhZPXkKK0NPTkZJR19HRU5FUklDX1BJTkNPTkY9eQorQ09ORklHX0dFTkVSSUNfUElOQ1RSTF9HUk9VUFM9eQorQ09ORklHX0dFTkVSSUNfUElOTVVYX0ZVTkNUSU9OUz15CitDT05GSUdfR0VORVJJQ19TQ0hFRF9DTE9DSz15CitDT05GSUdfR0VORVJJQ19TTVBfSURMRV9USFJFQUQ9eQorQ09ORklHX0dFTkVSSUNfU1RSTkNQWV9GUk9NX1VTRVI9eQorQ09ORklHX0dFTkVSSUNfU1RSTkxFTl9VU0VSPXkKK0NPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQorQ09ORklHX0dMT0I9eQorQ09ORklHX0dQSU9MSUI9eQorQ09ORklHX0dQWTIxMV9QSFk9eQorQ09ORklHX0dST19DRUxMUz15CitDT05GSUdfSEFORExFX0RPTUFJTl9JUlE9eQorQ09ORklHX0hBUkRFTl9CUkFOQ0hfUFJFRElDVE9SPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVF9NQVA9eQorQ09ORklHX0hPTEVTX0lOX1pPTkU9eQorQ09ORklHX0hPVFBMVUdfQ1BVPXkKKyMgQ09ORklHX0hXX05BVCBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKK0NPTkZJR19IV19SQU5ET01fTVRLPXkKK0NPTkZJR19IWj0yNTAKK0NPTkZJR19IWl8yNTA9eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorQ09ORklHX0kyQ19NVDY1WFg9eQorQ09ORklHX0lDUExVU19QSFk9eQorQ09ORklHX0lJTz15CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0lMTEVHQUxfUE9JTlRFUl9WQUxVRT0weGRlYWQwMDAwMDAwMDAwMDAKK0NPTkZJR19JTkVUX0FIPXkKK0NPTkZJR19JTkVUX0VTUD15CisjIENPTkZJR19JTkVUX0VTUF9PRkZMT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0lQQ09NUD15CitDT05GSUdfSU5FVF9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9UVU5ORUw9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19JT19VUklORz15CitDT05GSUdfSVBfTkZfRklMVEVSPW0KK0NPTkZJR19JUF9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfTUFOR0xFPW0KK0NPTkZJR19JUF9ORl9OQVQ9bQorQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KK0NPTkZJR19JUlFDSElQPXkKK0NPTkZJR19JUlFfRE9NQUlOPXkKK0NPTkZJR19JUlFfRE9NQUlOX0hJRVJBUkNIWT15CitDT05GSUdfSVJRX0ZPUkNFRF9USFJFQURJTkc9eQorQ09ORklHX0lSUV9USU1FX0FDQ09VTlRJTkc9eQorQ09ORklHX0lSUV9XT1JLPXkKK0NPTkZJR19KVU1QX0xBQkVMPXkKKyMgQ09ORklHX0xFRFNfVUJOVF9MRURCQVIgaXMgbm90IHNldAorQ09ORklHX0xJQkZEVD15CitDT05GSUdfTE9DS19ERUJVR0dJTkdfU1VQUE9SVD15CitDT05GSUdfTE9DS19TUElOX09OX09XTkVSPXkKK0NPTkZJR19MWk9fQ09NUFJFU1M9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfTUFHSUNfU1lTUlFfU0VSSUFMPXkKK0NPTkZJR19NRD15CitDT05GSUdfTURJT19CVVM9eQorQ09ORklHX01ESU9fREVWSUNFPXkKKyMgQ09ORklHX01FRElBVEVLX0dFX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfTUVESUFURUtfTVQ2NTc3X0FVWEFEQz15CitDT05GSUdfTUVESUFURUtfTkVUU1lTX1YyPXkKK0NPTkZJR19NRURJQVRFS19XQVRDSERPRz15CitDT05GSUdfTUVESUFfU1VQUE9SVD15CitDT05GSUdfTUVNRkRfQ1JFQVRFPXkKK0NPTkZJR19NRVNTQUdFX0xPR0xFVkVMX0RFRkFVTFQ9NworQ09ORklHX01GRF9TWVNDT049eQorQ09ORklHX01JR1JBVElPTj15CitDT05GSUdfTU1DPXkKK0NPTkZJR19NTUNfQkxPQ0s9eQorQ09ORklHX01NQ19NVEs9eQorQ09ORklHX01PRFVMRVNfVFJFRV9MT09LVVA9eQorQ09ORklHX01PRFVMRVNfVVNFX0VMRl9SRUxBPXkKK0NPTkZJR19NVDc1M1hfR1NXPXkKK0NPTkZJR19NVERfTkFORF9DT1JFPXkKK0NPTkZJR19NVERfTkFORF9FQ0NfU1dfSEFNTUlORz15CitDT05GSUdfTVREX05BTkRfTVRLPXkKK0NPTkZJR19NVERfUkFXX05BTkQ9eQorQ09ORklHX01URF9TUElfTkFORD15CitDT05GSUdfTVREX1NQSV9OT1I9eQorQ09ORklHX01URF9TUExJVF9GSVJNV0FSRT15CitDT05GSUdfTVREX1NQTElUX0ZJVF9GVz15CitDT05GSUdfTVREX1VCST15CitDT05GSUdfTVREX1VCSV9CRUJfTElNSVQ9MjAKK0NPTkZJR19NVERfVUJJX0JMT0NLPXkKK0NPTkZJR19NVERfVUJJX1dMX1RIUkVTSE9MRD00MDk2CisjIENPTkZJR19NVEtfQ01EUSBpcyBub3Qgc2V0CisjIENPTkZJR19NVEtfQ1FETUEgaXMgbm90IHNldAorQ09ORklHX01US19FRlVTRT15CitDT05GSUdfTVRLX0hTRE1BPXkKK0NPTkZJR19NVEtfSUNFX0RFQlVHPXkKK0NPTkZJR19NVEtfSU5GUkFDRkc9eQorQ09ORklHX01US19QTUlDX1dSQVA9eQorQ09ORklHX01US19TQ1BTWVM9eQorQ09ORklHX01US19TUElfTkFORD15CitDT05GSUdfTVRLX1RIRVJNQUw9eQorQ09ORklHX01US19USU1FUj15CisjIENPTkZJR19NVEtfVUFSVF9BUERNQSBpcyBub3Qgc2V0CitDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUj15CitDT05GSUdfTkVFRF9ETUFfTUFQX1NUQVRFPXkKK0NPTkZJR19ORUVEX1NHX0RNQV9MRU5HVEg9eQorQ09ORklHX05FVEZJTFRFUj15CitDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9OQVQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFTUVVFUkFERT1tCitDT05GSUdfTkVUX0RFVkxJTks9eQorQ09ORklHX05FVF9EU0E9eQorQ09ORklHX05FVF9EU0FfTVQ3NTMwPXkKK0NPTkZJR19ORVRfRFNBX1RBR19NVEs9eQorQ09ORklHX05FVF9GTE9XX0xJTUlUPXkKKyMgQ09ORklHX05FVF9NRURJQVRFS19ITkFUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfTUVESUFURUtfU09DPXkKK0NPTkZJR19ORVRfU1dJVENIREVWPXkKK0NPTkZJR19ORVRfVkVORE9SX01FRElBVEVLPXkKK0NPTkZJR19ORl9DT05OVFJBQ0s9eQorQ09ORklHX05GX0RFRlJBR19JUFY0PXkKK0NPTkZJR19ORl9OQVQ9bQorQ09ORklHX05GX05BVF9NQVNRVUVSQURFPXkKK0NPTkZJR19OTFM9eQorQ09ORklHX05NQk09eQorIyBDT05GSUdfTk1CTV9MT0dfTEVWRUxfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTk1CTV9MT0dfTEVWRUxfRU1FUkcgaXMgbm90IHNldAorIyBDT05GSUdfTk1CTV9MT0dfTEVWRUxfRVJSIGlzIG5vdCBzZXQKK0NPTkZJR19OTUJNX0xPR19MRVZFTF9JTkZPPXkKKyMgQ09ORklHX05NQk1fTE9HX0xFVkVMX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfTk1CTV9MT0dfTEVWRUxfV0FSTiBpcyBub3Qgc2V0CitDT05GSUdfTk1CTV9NVEQ9eQorQ09ORklHX05PX0haX0NPTU1PTj15CitDT05GSUdfTk9fSFpfSURMRT15CitDT05GSUdfTlJfQ1BVUz00CitDT05GSUdfTlZNRU09eQorQ09ORklHX05WTUVNX1NZU0ZTPXkKK0NPTkZJR19PRj15CitDT05GSUdfT0ZfQUREUkVTUz15CitDT05GSUdfT0ZfRUFSTFlfRkxBVFRSRUU9eQorQ09ORklHX09GX0ZMQVRUUkVFPXkKK0NPTkZJR19PRl9HUElPPXkKK0NPTkZJR19PRl9JUlE9eQorQ09ORklHX09GX0tPQko9eQorQ09ORklHX09GX01ESU89eQorQ09ORklHX09GX05FVD15CitDT05GSUdfT0xEX1NJR1NVU1BFTkQzPXkKK0NPTkZJR19QQURBVEE9eQorQ09ORklHX1BBUlRJVElPTl9QRVJDUFU9eQorQ09ORklHX1BDST15CisjIENPTkZJR19QQ0lFX01FRElBVEVLIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lFX01FRElBVEVLX0dFTjM9eQorQ09ORklHX1BDSV9ERUJVRz15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSV9ET01BSU5TX0dFTkVSSUM9eQorQ09ORklHX1BDSV9NU0k9eQorQ09ORklHX1BDSV9NU0lfSVJRX0RPTUFJTj15CitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BHVEFCTEVfTEVWRUxTPTMKK0NPTkZJR19QSFlMSUI9eQorQ09ORklHX1BIWUxJTks9eQorQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKK0NPTkZJR19QSFlfTVRLX1RQSFk9eQorIyBDT05GSUdfUEhZX01US19VRlMgaXMgbm90IHNldAorIyBDT05GSUdfUEhZX01US19YU1BIWSBpcyBub3Qgc2V0CitDT05GSUdfUElOQ1RSTD15CisjIENPTkZJR19QSU5DVFJMX01UMjcxMiBpcyBub3Qgc2V0CisjIENPTkZJR19QSU5DVFJMX01UNjc2NSBpcyBub3Qgc2V0CisjIENPTkZJR19QSU5DVFJMX01UNjc5NyBpcyBub3Qgc2V0CisjIENPTkZJR19QSU5DVFJMX01UNzYyMiBpcyBub3Qgc2V0CisjIENPTkZJR19QSU5DVFJMX01UNzk4MSBpcyBub3Qgc2V0CitDT05GSUdfUElOQ1RSTF9NVDc5ODY9eQorIyBDT05GSUdfUElOQ1RSTF9NVDgxNzMgaXMgbm90IHNldAorIyBDT05GSUdfUElOQ1RSTF9NVDgxODMgaXMgbm90IHNldAorQ09ORklHX1BJTkNUUkxfTVQ4NTE2PXkKK0NPTkZJR19QSU5DVFJMX01USz15CitDT05GSUdfUElOQ1RSTF9NVEtfTU9PUkU9eQorQ09ORklHX1BNPXkKK0NPTkZJR19QTV9DTEs9eQorQ09ORklHX1BNX0dFTkVSSUNfRE9NQUlOUz15CitDT05GSUdfUE1fR0VORVJJQ19ET01BSU5TX09GPXkKK0NPTkZJR19QTV9PUFA9eQorQ09ORklHX1BPV0VSX1JFU0VUPXkKK0NPTkZJR19QT1dFUl9SRVNFVF9TWVNDT049eQorQ09ORklHX1BPV0VSX1NVUFBMWT15CitDT05GSUdfUFJJTlRLX1RJTUU9eQorQ09ORklHX1BXTT15CitDT05GSUdfUFdNX01FRElBVEVLPXkKKyMgQ09ORklHX1BXTV9NVEtfRElTUCBpcyBub3Qgc2V0CitDT05GSUdfUFdNX1NZU0ZTPXkKK0NPTkZJR19RVUVVRURfUldMT0NLUz15CitDT05GSUdfUVVFVUVEX1NQSU5MT0NLUz15CitDT05GSUdfUkFTPXkKK0NPTkZJR19SQVRJT05BTD15CisjIENPTkZJR19SQVZFX1NQX0NPUkUgaXMgbm90IHNldAorQ09ORklHX1JDVV9ORUVEX1NFR0NCTElTVD15CitDT05GSUdfUkNVX1NUQUxMX0NPTU1PTj15CitDT05GSUdfUkVBTFRFS19QSFk9eQorQ09ORklHX1JFRkNPVU5UX0ZVTEw9eQorQ09ORklHX1JFR01BUD15CitDT05GSUdfUkVHTUFQX01NSU89eQorQ09ORklHX1JFR1VMQVRPUj15CitDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0U9eQorQ09ORklHX1JFR1VMQVRPUl9NVDYzODA9eQorQ09ORklHX1JFU0VUX0NPTlRST0xMRVI9eQorQ09ORklHX1JFU0VUX1RJX1NZU0NPTj15CitDT05GSUdfUkZTX0FDQ0VMPXkKK0NPTkZJR19ST0RBVEFfRlVMTF9ERUZBVUxUX0VOQUJMRUQ9eQorQ09ORklHX1JQUz15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfRFJWX01UNzYyMj15CitDT05GSUdfUlRDX0kyQ19BTkRfU1BJPXkKKyMgQ09ORklHX1JUTDgzNjdTX0dTVyBpcyBub3Qgc2V0CitDT05GSUdfUldTRU1fU1BJTl9PTl9PV05FUj15CitDT05GSUdfU0NIRURfTUM9eQorQ09ORklHX1NDU0k9eQorIyBDT05GSUdfU0VDVElPTl9NSVNNQVRDSF9XQVJOX09OTFkgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX0ZTTD15CitDT05GSUdfU0VSSUFMXzgyNTBfTVQ2NTc3PXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0zCitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0zCitDT05GSUdfU0VSSUFMX0RFVl9CVVM9eQorQ09ORklHX1NFUklBTF9ERVZfQ1RSTF9UVFlQT1JUPXkKK0NPTkZJR19TRVJJQUxfTUNUUkxfR1BJTz15CitDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKK0NPTkZJR19TR0xfQUxMT0M9eQorQ09ORklHX1NHX1BPT0w9eQorQ09ORklHX1NLQl9FWFRFTlNJT05TPXkKK0NPTkZJR19TTVA9eQorQ09ORklHX1NQQVJTRU1FTT15CitDT05GSUdfU1BBUlNFTUVNX0VYVFJFTUU9eQorQ09ORklHX1NQQVJTRU1FTV9NQU5VQUw9eQorQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQPXkKK0NPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEU9eQorQ09ORklHX1NQQVJTRV9JUlE9eQorQ09ORklHX1NQST15CitDT05GSUdfU1BJX01BU1RFUj15CitDT05GSUdfU1BJX01FTT15CitDT05GSUdfU1BJX01UNjVYWD15CisjIENPTkZJR19TUElfTVRLX05PUiBpcyBub3Qgc2V0CitDT05GSUdfU1BJX01US19TTkZJPXkKK0NPTkZJR19TUkNVPXkKK0NPTkZJR19TV0lPVExCPXkKK0NPTkZJR19TV1BIWT15CitDT05GSUdfU1lTQ1RMX0VYQ0VQVElPTl9UUkFDRT15CitDT05GSUdfU1lTVklQQ19DT01QQVQ9eQorQ09ORklHX1NZU19TVVBQT1JUU19IVUdFVExCRlM9eQorQ09ORklHX1RIRVJNQUw9eQorQ09ORklHX1RIRVJNQUxfREVGQVVMVF9HT1ZfU1RFUF9XSVNFPXkKK0NPTkZJR19USEVSTUFMX0VNRVJHRU5DWV9QT1dFUk9GRl9ERUxBWV9NUz0wCitDT05GSUdfVEhFUk1BTF9FTVVMQVRJT049eQorQ09ORklHX1RIRVJNQUxfR09WX0JBTkdfQkFORz15CitDT05GSUdfVEhFUk1BTF9HT1ZfRkFJUl9TSEFSRT15CitDT05GSUdfVEhFUk1BTF9HT1ZfUE9XRVJfQUxMT0NBVE9SPXkKK0NPTkZJR19USEVSTUFMX0dPVl9TVEVQX1dJU0U9eQorQ09ORklHX1RIRVJNQUxfR09WX1VTRVJfU1BBQ0U9eQorQ09ORklHX1RIRVJNQUxfT0Y9eQorQ09ORklHX1RIRVJNQUxfV1JJVEFCTEVfVFJJUFM9eQorQ09ORklHX1RIUkVBRF9JTkZPX0lOX1RBU0s9eQorQ09ORklHX1RJQ0tfQ1BVX0FDQ09VTlRJTkc9eQorQ09ORklHX1RJTUVSX09GPXkKK0NPTkZJR19USU1FUl9QUk9CRT15CitDT05GSUdfVFJFRV9SQ1U9eQorQ09ORklHX1RSRUVfU1JDVT15CitDT05GSUdfVUJJRlNfRlM9eQorQ09ORklHX1VCSUZTX0ZTX0FEVkFOQ0VEX0NPTVBSPXkKK0NPTkZJR19VQklGU19GU19MWk89eQorQ09ORklHX1VCSUZTX0ZTX1pMSUI9eQorIyBDT05GSUdfVUNMQU1QX1RBU0sgaXMgbm90IHNldAorIyBDT05GSUdfVU5NQVBfS0VSTkVMX0FUX0VMMCBpcyBub3Qgc2V0CitDT05GSUdfVVNCPXkKK0NPTkZJR19VU0JfQ09NTU9OPXkKK0NPTkZJR19VU0JfU1RPUkFHRT15CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9VQVM9eQorQ09ORklHX1VTQl9YSENJX0hDRD15CitDT05GSUdfVVNCX1hIQ0lfTVRLPXkKK0NPTkZJR19VU0JfWEhDSV9NVEtfREVCVUdGUz15CisjIENPTkZJR19VU0JfWEhDSV9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfVk1BUF9TVEFDSz15CitDT05GSUdfV0FUQ0hET0dfQ09SRT15CitDT05GSUdfV0FUQ0hET0dfUFJFVElNRU9VVF9ERUZBVUxUX0dPVl9QQU5JQz15CitDT05GSUdfV0FUQ0hET0dfUFJFVElNRU9VVF9HT1Y9eQorIyBDT05GSUdfV0FUQ0hET0dfUFJFVElNRU9VVF9HT1ZfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0dfUFJFVElNRU9VVF9HT1ZfUEFOSUM9eQorQ09ORklHX1dBVENIRE9HX1BSRVRJTUVPVVRfR09WX1NFTD1tCitDT05GSUdfV0FUQ0hET0dfU1lTRlM9eQorQ09ORklHX1hGUk1fQUxHTz15CitDT05GSUdfWEZSTV9JUENPTVA9eQorQ09ORklHX1hGUk1fVVNFUj15CitDT05GSUdfWFBTPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWk9ORV9ETUEzMj15CitDT05GSUdfTlZNRU09eQorQ09ORklHX01US19FRlVTRT15CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDAwMS1jbGstbXRrLWFkZC1tdDc5ODYtc3VwcG9ydC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wMDAxLWNsay1tdGstYWRkLW10Nzk4Ni1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMGU4OGIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDAwMS1jbGstbXRrLWFkZC1tdDc5ODYtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDQxIEBACitkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvbWVkaWF0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvY2xrL21lZGlhdGVrL0tjb25maWcKK2luZGV4IDdlZmMzNjEuLjVmMTEyODAgMTAwNjQ0CistLS0gYS9kcml2ZXJzL2Nsay9tZWRpYXRlay9LY29uZmlnCisrKysgYi9kcml2ZXJzL2Nsay9tZWRpYXRlay9LY29uZmlnCitAQCAtMjU4LDYgKzI1OCwxNSBAQCBjb25maWcgQ09NTU9OX0NMS19NVDc2MjlfSElGU1lTCisgCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWVkaWFUZWsgTVQ3NjI5IEhJRlNZUyBjbG9ja3MgcHJvdmlkaW5nCisgCSAgdG8gUENJLUUgYW5kIFVTQi4KKworK2NvbmZpZyBDT01NT05fQ0xLX01UNzk4NgorKwlib29sICJDbG9jayBkcml2ZXIgZm9yIE1lZGlhVGVrIE1UNzk4NiIKKysJZGVwZW5kcyBvbiBBUkNIX01FRElBVEVLIHx8IENPTVBJTEVfVEVTVAorKwlzZWxlY3QgQ09NTU9OX0NMS19NRURJQVRFSworKwlkZWZhdWx0IEFSQ0hfTUVESUFURUsgJiYgQVJNCisrCS0tLWhlbHAtLS0KKysJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNZWRpYVRlayBNVDc5ODYgYmFzaWMgY2xvY2tzIGFuZCBjbG9ja3MKKysJICByZXF1aXJlZCBmb3IgdmFyaW91cyBwZXJpcGVyYWxzIGZvdW5kIG9uIE1lZGlhVGVrLgorKworIGNvbmZpZyBDT01NT05fQ0xLX01UODEzNQorIAlib29sICJDbG9jayBkcml2ZXIgZm9yIE1lZGlhVGVrIE1UODEzNSIKKyAJZGVwZW5kcyBvbiAoQVJDSF9NRURJQVRFSyAmJiBBUk0pIHx8IENPTVBJTEVfVEVTVAorZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL21lZGlhdGVrL01ha2VmaWxlIGIvZHJpdmVycy9jbGsvbWVkaWF0ZWsvTWFrZWZpbGUKK2luZGV4IDhjZGI3NmEuLjhjMzkyZjQgMTAwNjQ0CistLS0gYS9kcml2ZXJzL2Nsay9tZWRpYXRlay9NYWtlZmlsZQorKysrIGIvZHJpdmVycy9jbGsvbWVkaWF0ZWsvTWFrZWZpbGUKK0BAIC0zOSw2ICszOSw3IEBAIG9iai0kKENPTkZJR19DT01NT05fQ0xLX01UNzYyMl9BVURTWVMpICs9IGNsay1tdDc2MjItYXVkLm8KKyBvYmotJChDT05GSUdfQ09NTU9OX0NMS19NVDc2MjkpICs9IGNsay1tdDc2MjkubworIG9iai0kKENPTkZJR19DT01NT05fQ0xLX01UNzYyOV9FVEhTWVMpICs9IGNsay1tdDc2MjktZXRoLm8KKyBvYmotJChDT05GSUdfQ09NTU9OX0NMS19NVDc2MjlfSElGU1lTKSArPSBjbGstbXQ3NjI5LWhpZi5vCisrb2JqLSQoQ09ORklHX0NPTU1PTl9DTEtfTVQ3OTg2KSArPSBjbGstbXQ3OTg2Lm8KKyBvYmotJChDT05GSUdfQ09NTU9OX0NMS19NVDgxMzUpICs9IGNsay1tdDgxMzUubworIG9iai0kKENPTkZJR19DT01NT05fQ0xLX01UODE3MykgKz0gY2xrLW10ODE3My5vCisgb2JqLSQoQ09ORklHX0NPTU1PTl9DTEtfTVQ4MTgzKSArPSBjbGstbXQ4MTgzLm8KK0BAIC01NSwzICs1Niw0IEBAIG9iai0kKENPTkZJR19DT01NT05fQ0xLX01UODE4M19WREVDU1lTKSArPSBjbGstbXQ4MTgzLXZkZWMubworIG9iai0kKENPTkZJR19DT01NT05fQ0xLX01UODE4M19WRU5DU1lTKSArPSBjbGstbXQ4MTgzLXZlbmMubworIG9iai0kKENPTkZJR19DT01NT05fQ0xLX01UODUxNikgKz0gY2xrLW10ODUxNi5vCisgb2JqLSQoQ09ORklHX0NPTU1PTl9DTEtfTVQ4NTE2X0FVRFNZUykgKz0gY2xrLW10ODUxNi1hdWQubworK29iai15ICs9IGNsay1icmluZ3VwLm8KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorLS0gCisyLjE4LjAKKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzAwMDEtdjUuNy1zcGktbWFrZS1zcGktbWF4LWZyZXF1ZW5jeS1vcHRpb25hbC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wMDAxLXY1Ljctc3BpLW1ha2Utc3BpLW1heC1mcmVxdWVuY3ktb3B0aW9uYWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzljZTE1YwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wMDAxLXY1Ljctc3BpLW1ha2Utc3BpLW1heC1mcmVxdWVuY3ktb3B0aW9uYWwucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSA2NzFjM2JmNTBhZTQ5OGRjMTJhZWY2YzcwYWJlNWNmYTA2NmIxMzQ4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2h1YW5ob25nIEd1byA8Z2NoOTgxMjEzQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgNiBNYXIgMjAyMCAxNjo1MDo0OSArMDgwMAorU3ViamVjdDogW1BBVENIIDEvMl0gc3BpOiBtYWtlIHNwaS1tYXgtZnJlcXVlbmN5IG9wdGlvbmFsCisKK1dlIG9ubHkgbmVlZCBhIHNwaS1tYXgtZnJlcXVlbmN5IHdoZW4gd2Ugc3BlY2lmaWNhbGx5IHJlcXVlc3QgYQorc3BpIGZyZXF1ZW5jeSBsb3dlciB0aGFuIHRoZSBtYXggc3BlZWQgb2Ygc3BpIGhvc3QuCitUaGlzIHByb3BlcnR5IGlzIGFscmVhZHkgZG9jdW1lbnRlZCBhcyBvcHRpb25hbCBwcm9wZXJ0eSBhbmQgY3VycmVudAoraG9zdCBkcml2ZXJzIGFyZSBpbXBsZW1lbnRlZCB0byBvcGVyYXRlIGF0IGhpZ2hlc3Qgc3BlZWQgcG9zc2libGUKK3doZW4gc3BpLT5tYXhfc3BlZWRfaHogaXMgMC4KK1RoaXMgcGF0Y2ggbWFrZXMgc3BpLW1heC1mcmVxdWVuY3kgYW4gb3B0aW9uYWwgcHJvcGVydHkgc28gdGhhdAord2UgY291bGQganVzdCBvbWl0IGl0IHRvIHVzZSBtYXggY29udHJvbGxlciBzcGVlZC4KKworU2lnbmVkLW9mZi1ieTogQ2h1YW5ob25nIEd1byA8Z2NoOTgxMjEzQGdtYWlsLmNvbT4KK0xpbms6IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL3IvMjAyMDAzMDYwODUwNTIuMjgyNTgtMi1nY2g5ODEyMTNAZ21haWwuY29tCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEJyb3duIDxicm9vbmllQGtlcm5lbC5vcmc+CistLS0KKyBkcml2ZXJzL3NwaS9zcGkuYyB8IDkgKystLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKKworLS0tIGEvZHJpdmVycy9zcGkvc3BpLmMKKysrKyBiL2RyaXZlcnMvc3BpL3NwaS5jCitAQCAtMTgwOSwxMyArMTgwOSw4IEBAIHN0YXRpYyBpbnQgb2Zfc3BpX3BhcnNlX2R0KHN0cnVjdCBzcGlfY28KKyAJCXNwaS0+bW9kZSB8PSBTUElfQ1NfSElHSDsKKyAKKyAJLyogRGV2aWNlIHNwZWVkICovCistCXJjID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobmMsICJzcGktbWF4LWZyZXF1ZW5jeSIsICZ2YWx1ZSk7CistCWlmIChyYykgeworLQkJZGV2X2VycigmY3Rsci0+ZGV2LAorLQkJCSIlcE9GIGhhcyBubyB2YWxpZCAnc3BpLW1heC1mcmVxdWVuY3knIHByb3BlcnR5ICglZClcbiIsIG5jLCByYyk7CistCQlyZXR1cm4gcmM7CistCX0KKy0Jc3BpLT5tYXhfc3BlZWRfaHogPSB2YWx1ZTsKKysJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3UzMihuYywgInNwaS1tYXgtZnJlcXVlbmN5IiwgJnZhbHVlKSkKKysJCXNwaS0+bWF4X3NwZWVkX2h6ID0gdmFsdWU7CisgCisgCXJldHVybiAwOworIH0KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wMDAyLWNsay1tdGstYWRkLW10Nzk4MS1zdXBwb3J0LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzAwMDItY2xrLW10ay1hZGQtbXQ3OTgxLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJmOWU4YQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wMDAyLWNsay1tdGstYWRkLW10Nzk4MS1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK2RpZmYgLS1naXQgYS9kcml2ZXJzL2Nsay9tZWRpYXRlay9LY29uZmlnIGIvZHJpdmVycy9jbGsvbWVkaWF0ZWsvS2NvbmZpZworaW5kZXggMWM0OGZlOS4uMjMzOTNkNSAxMDA2NDQKKy0tLSBhL2RyaXZlcnMvY2xrL21lZGlhdGVrL0tjb25maWcKKysrKyBiL2RyaXZlcnMvY2xrL21lZGlhdGVrL0tjb25maWcKK0BAIC0yNjcsNiArMjY3LDE0IEBAIGNvbmZpZyBDT01NT05fQ0xLX01UNzk4NgorIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1lZGlhVGVrIE1UNzk4NiBiYXNpYyBjbG9ja3MgYW5kIGNsb2NrcworIAkgIHJlcXVpcmVkIGZvciB2YXJpb3VzIHBlcmlwZXJhbHMgZm91bmQgb24gTWVkaWFUZWsuCisgCisrY29uZmlnIENPTU1PTl9DTEtfTVQ3OTgxCisrCWJvb2wgIkNsb2NrIGRyaXZlciBmb3IgTWVkaWFUZWsgTVQ3OTgxIgorKwlkZXBlbmRzIG9uIEFSQ0hfTUVESUFURUsgfHwgQ09NUElMRV9URVNUCisrCXNlbGVjdCBDT01NT05fQ0xLX01FRElBVEVLCisrCS0tLWhlbHAtLS0KKysJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNZWRpYVRlayBNVDc5ODEgYmFzaWMgY2xvY2tzIGFuZCBjbG9ja3MKKysJICByZXF1aXJlZCBmb3IgdmFyaW91cyBwZXJpcGVyYWxzIGZvdW5kIG9uIE1lZGlhVGVrLgorKworIGNvbmZpZyBDT01NT05fQ0xLX01UODEzNQorIAlib29sICJDbG9jayBkcml2ZXIgZm9yIE1lZGlhVGVrIE1UODEzNSIKKyAJZGVwZW5kcyBvbiAoQVJDSF9NRURJQVRFSyAmJiBBUk0pIHx8IENPTVBJTEVfVEVTVAorZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL21lZGlhdGVrL01ha2VmaWxlIGIvZHJpdmVycy9jbGsvbWVkaWF0ZWsvTWFrZWZpbGUKK2luZGV4IDhjMzkyZjQuLmZmZTA4NTAgMTAwNjQ0CistLS0gYS9kcml2ZXJzL2Nsay9tZWRpYXRlay9NYWtlZmlsZQorKysrIGIvZHJpdmVycy9jbGsvbWVkaWF0ZWsvTWFrZWZpbGUKK0BAIC00MCw2ICs0MCw3IEBAIG9iai0kKENPTkZJR19DT01NT05fQ0xLX01UNzYyOSkgKz0gY2xrLW10NzYyOS5vCisgb2JqLSQoQ09ORklHX0NPTU1PTl9DTEtfTVQ3NjI5X0VUSFNZUykgKz0gY2xrLW10NzYyOS1ldGgubworIG9iai0kKENPTkZJR19DT01NT05fQ0xLX01UNzYyOV9ISUZTWVMpICs9IGNsay1tdDc2MjktaGlmLm8KKyBvYmotJChDT05GSUdfQ09NTU9OX0NMS19NVDc5ODYpICs9IGNsay1tdDc5ODYubworK29iai0kKENPTkZJR19DT01NT05fQ0xLX01UNzk4MSkgKz0gY2xrLW10Nzk4MS5vCisgb2JqLSQoQ09ORklHX0NPTU1PTl9DTEtfTVQ4MTM1KSArPSBjbGstbXQ4MTM1Lm8KKyBvYmotJChDT05GSUdfQ09NTU9OX0NMS19NVDgxNzMpICs9IGNsay1tdDgxNzMubworIG9iai0kKENPTkZJR19DT01NT05fQ0xLX01UODE4MykgKz0gY2xrLW10ODE4My5vCistLSAKKzIuMTguMAorCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDAwMi12NS43LXNwaS1hZGQtc3VwcG9ydC1mb3ItbWVkaWF0ZWstc3BpLW5vci1jb250cm9sbGVyLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzAwMDItdjUuNy1zcGktYWRkLXN1cHBvcnQtZm9yLW1lZGlhdGVrLXNwaS1ub3ItY29udHJvbGxlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTYzYmRkCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzAwMDItdjUuNy1zcGktYWRkLXN1cHBvcnQtZm9yLW1lZGlhdGVrLXNwaS1ub3ItY29udHJvbGxlci5wYXRjaApAQCAtMCwwICsxLDc2MSBAQAorRnJvbSA4ODFkMWVlOWZlODFmZjJiZTFiOTA4MDlhMDc2MjFiZTk3NDA0YTU3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2h1YW5ob25nIEd1byA8Z2NoOTgxMjEzQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgNiBNYXIgMjAyMCAxNjo1MDo1MCArMDgwMAorU3ViamVjdDogW1BBVENIIDIvMl0gc3BpOiBhZGQgc3VwcG9ydCBmb3IgbWVkaWF0ZWsgc3BpLW5vciBjb250cm9sbGVyCisKK1RoaXMgaXMgYSBkcml2ZXIgZm9yIG10ayBzcGktbm9yIGNvbnRyb2xsZXIgdXNpbmcgc3BpLW1lbSBpbnRlcmZhY2UuCitUaGUgc2FtZSBjb250cm9sbGVyIGFscmVhZHkgaGFzIGxpbWl0ZWQgc3VwcG9ydCBwcm92aWRlZCBieSBtdGstcXVhZHNwaQorZHJpdmVyIHVuZGVyIHNwaS1ub3IgZnJhbWV3b3JrIGFuZCB0aGlzIG5ldyBkcml2ZXIgaXMgYSByZXBsYWNlbWVudAorZm9yIHRoZSBvbGQgb25lLgorCitDb21wYXJpbmcgdG8gdGhlIG9sZCBkcml2ZXIsIHRoaXMgZHJpdmVyIGhhcyBmb2xsb3dpbmcgYWR2YW50YWdlczoKKzEuIEl0IGNhbiBoYW5kbGUgYW55IGZ1bGwtZHVwbGV4IHNwaSB0cmFuc2ZlciB1cCB0byA2IGJ5dGVzLCBhbmQKKyAgIHRoaXMgaXMgaW1wbGVtZW50ZWQgdXNpbmcgZ2VuZXJpYyBzcGkgaW50ZXJmYWNlLgorMi4gSXQgdGFrZSBhY2NvdW50IGludG8gY29tbWFuZCBvcGNvZGUgcHJvcGVybHkuIFRoZSByZWFkaW5nIHJvdXRpbmUKKyAgIGluIHRoaXMgY29udHJvbGxlciBjYW4gb25seSB1c2UgMHgwMyBvciAweDBiIGFzIG9wY29kZSBvbiAxLTEtMQorICAgdHJhbnNmZXJzLCBidXQgb2xkIGRyaXZlciBkb2Vzbid0IGltcGxlbWVudCB0aGlzIHByb3Blcmx5LiBUaGlzCisgICBkcml2ZXIgY2hlY2tzIHN1cHBvcnRlZCBvcGNvZGUgZXhwbGljaXRseSBhbmQgdXNlICgxKSB0byBwZXJmb3JtCisgICB1bm1hdGNoZWQgb3BlcmF0aW9ucy4KKzMuIEl0IHByb3Blcmx5IGhhbmRsZXMgU0ZEUCByZWFkaW5nLiBPbGQgZHJpdmVyIGNhbid0IHJlYWQgU0ZEUAorICAgZHVlIHRvIHRoZSBidWcgbWVudGlvbmVkIGluICgyKS4KKzQuIEl0IGNhbiBkbyAxLTItMiBhbmQgMS00LTQgZmFzdCByZWFkaW5nIG9uIHNwaS1ub3IuIFRoZXNlIHR3byBvcHMKKyAgIHJlcXVpcmVzIHBhcnNpbmcgU0ZEUCwgd2hpY2ggaXNuJ3QgcG9zc2libGUgaW4gb2xkIGRyaXZlci4gQW5kCisgICB0aGUgb2xkIGRyaXZlciBpcyBvbmx5IGZsYWdnZWQgdG8gc3VwcG9ydCAxLTEtMiBtb2RlLgorNS4gSXQgdGFrZXMgYWR2YW50YWdlIG9mIHRoZSBETUEgZmVhdHVyZSBpbiB0aGlzIGNvbnRyb2xsZXIgZm9yCisgICBsb25nIHJlYWRzIGFuZCBzdXBwb3J0cyBJUlEgb24gRE1BIHJlcXVlc3RzIHRvIGZyZWUgY3B1IGN5Y2xlcworICAgZnJvbSBwb2xsaW5nIHN0YXR1cyByZWdpc3RlcnMgb24gbG9uZyBETUEgcmVhZGluZy4gSXQgYWNoaWV2ZXMKKyAgIHVwIHRvIDE3LjVNQi9zIHJlYWRpbmcgc3BlZWQgKDEtNC00IG1vZGUpIHdoaWNoIGlzIHdheSBmYXN0ZXIKKyAgIHRoYW4gdGhlIG9sZCBvbmUuIElSUSBpcyBpbXBsZW1lbnRlZCBhcyBvcHRpb25hbCB0byBtYWludGFpbgorICAgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKworU2lnbmVkLW9mZi1ieTogQ2h1YW5ob25nIEd1byA8Z2NoOTgxMjEzQGdtYWlsLmNvbT4KK0xpbms6IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL3IvMjAyMDAzMDYwODUwNTIuMjgyNTgtMy1nY2g5ODEyMTNAZ21haWwuY29tCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEJyb3duIDxicm9vbmllQGtlcm5lbC5vcmc+CistLS0KKyBkcml2ZXJzL3NwaS9LY29uZmlnICAgICAgIHwgIDEwICsKKyBkcml2ZXJzL3NwaS9NYWtlZmlsZSAgICAgIHwgICAxICsKKyBkcml2ZXJzL3NwaS9zcGktbXRrLW5vci5jIHwgNjg5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA3MDAgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3NwaS9zcGktbXRrLW5vci5jCisKKy0tLSBhL2RyaXZlcnMvc3BpL0tjb25maWcKKysrKyBiL2RyaXZlcnMvc3BpL0tjb25maWcKK0BAIC00MzMsNiArNDMzLDE2IEBAIGNvbmZpZyBTUElfTVQ3NjIxCisgCWhlbHAKKyAJICBUaGlzIHNlbGVjdHMgYSBkcml2ZXIgZm9yIHRoZSBNZWRpYVRlayBNVDc2MjEgU1BJIENvbnRyb2xsZXIuCisgCisrY29uZmlnIFNQSV9NVEtfTk9SCisrCXRyaXN0YXRlICJNZWRpYVRlayBTUEkgTk9SIGNvbnRyb2xsZXIiCisrCWRlcGVuZHMgb24gQVJDSF9NRURJQVRFSyB8fCBDT01QSUxFX1RFU1QKKysJaGVscAorKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBTUEkgTk9SIGNvbnRyb2xsZXIgZm91bmQgb24gTWVkaWFUZWsKKysJICBBUk0gU29Dcy4gVGhpcyBpcyBhIGNvbnRyb2xsZXIgc3BlY2lmaWNhbGx5IGZvciBTUEktTk9SIGZsYXNoLgorKwkgIEl0IGNhbiBwZXJmb3JtIGdlbmVyaWMgU1BJIHRyYW5zZmVycyB1cCB0byA2IGJ5dGVzIHZpYSBnZW5lcmljCisrCSAgU1BJIGludGVyZmFjZSBhcyB3ZWxsIGFzIHNldmVyYWwgU1BJLU5PUiBzcGVjaWZpYyBpbnN0cnVjdGlvbnMKKysJICB2aWEgU1BJIE1FTSBpbnRlcmZhY2UuCisrCisgY29uZmlnIFNQSV9OUENNX0ZJVQorIAl0cmlzdGF0ZSAiTnV2b3RvbiBOUENNIEZMQVNIIEludGVyZmFjZSBVbml0IgorIAlkZXBlbmRzIG9uIEFSQ0hfTlBDTSB8fCBDT01QSUxFX1RFU1QKKy0tLSBhL2RyaXZlcnMvc3BpL01ha2VmaWxlCisrKysgYi9kcml2ZXJzL3NwaS9NYWtlZmlsZQorQEAgLTYxLDYgKzYxLDcgQEAgb2JqLSQoQ09ORklHX1NQSV9NUEM1Mnh4X1BTQykJCSs9IHNwaS1tcAorIG9iai0kKENPTkZJR19TUElfTVBDNTJ4eCkJCSs9IHNwaS1tcGM1Mnh4Lm8KKyBvYmotJChDT05GSUdfU1BJX01UNjVYWCkgICAgICAgICAgICAgICAgKz0gc3BpLW10NjV4eC5vCisgb2JqLSQoQ09ORklHX1NQSV9NVDc2MjEpCQkrPSBzcGktbXQ3NjIxLm8KKytvYmotJChDT05GSUdfU1BJX01US19OT1IpCQkrPSBzcGktbXRrLW5vci5vCisgb2JqLSQoQ09ORklHX1NQSV9NWElDKQkJCSs9IHNwaS1teGljLm8KKyBvYmotJChDT05GSUdfU1BJX01YUykJCQkrPSBzcGktbXhzLm8KKyBvYmotJChDT05GSUdfU1BJX05QQ01fRklVKQkJKz0gc3BpLW5wY20tZml1Lm8KKy0tLSAvZGV2L251bGwKKysrKyBiL2RyaXZlcnMvc3BpL3NwaS1tdGstbm9yLmMKK0BAIC0wLDAgKzEsNjg5IEBACisrLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKysvLworKy8vIE1lZGlhdGVrIFNQSSBOT1IgY29udHJvbGxlciBkcml2ZXIKKysvLworKy8vIENvcHlyaWdodCAoQykgMjAyMCBDaHVhbmhvbmcgR3VvIDxnY2g5ODEyMTNAZ21haWwuY29tPgorKworKyNpbmNsdWRlIDxsaW51eC9iaXRzLmg+CisrI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisrI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisrI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorKyNpbmNsdWRlIDxsaW51eC9pby5oPgorKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4KKysjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisrI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKysjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLW1lbS5oPgorKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKysKKysjZGVmaW5lIERSSVZFUl9OQU1FICJtdGstc3BpLW5vciIKKysKKysjZGVmaW5lIE1US19OT1JfUkVHX0NNRAkJCTB4MDAKKysjZGVmaW5lIE1US19OT1JfQ01EX1dSSVRFCQlCSVQoNCkKKysjZGVmaW5lIE1US19OT1JfQ01EX1BST0dSQU0JCUJJVCgyKQorKyNkZWZpbmUgTVRLX05PUl9DTURfUkVBRAkJQklUKDApCisrI2RlZmluZSBNVEtfTk9SX0NNRF9NQVNLCQlHRU5NQVNLKDUsIDApCisrCisrI2RlZmluZSBNVEtfTk9SX1JFR19QUkdfQ05UCQkweDA0CisrI2RlZmluZSBNVEtfTk9SX1JFR19SREFUQQkJMHgwYworKworKyNkZWZpbmUgTVRLX05PUl9SRUdfUkFEUjAJCTB4MTAKKysjZGVmaW5lIE1US19OT1JfUkVHX1JBRFIobikJCShNVEtfTk9SX1JFR19SQURSMCArIDQgKiAobikpCisrI2RlZmluZSBNVEtfTk9SX1JFR19SQURSMwkJMHhjOAorKworKyNkZWZpbmUgTVRLX05PUl9SRUdfV0RBVEEJCTB4MWMKKysKKysjZGVmaW5lIE1US19OT1JfUkVHX1BSR0RBVEEwCQkweDIwCisrI2RlZmluZSBNVEtfTk9SX1JFR19QUkdEQVRBKG4pCQkoTVRLX05PUl9SRUdfUFJHREFUQTAgKyA0ICogKG4pKQorKyNkZWZpbmUgTVRLX05PUl9SRUdfUFJHREFUQV9NQVgJCTUKKysKKysjZGVmaW5lIE1US19OT1JfUkVHX1NISUZUMAkJMHgzOAorKyNkZWZpbmUgTVRLX05PUl9SRUdfU0hJRlQobikJCShNVEtfTk9SX1JFR19TSElGVDAgKyA0ICogKG4pKQorKyNkZWZpbmUgTVRLX05PUl9SRUdfU0hJRlRfTUFYCQk5CisrCisrI2RlZmluZSBNVEtfTk9SX1JFR19DRkcxCQkweDYwCisrI2RlZmluZSBNVEtfTk9SX0ZBU1RfUkVBRAkJQklUKDApCisrCisrI2RlZmluZSBNVEtfTk9SX1JFR19DRkcyCQkweDY0CisrI2RlZmluZSBNVEtfTk9SX1dSX0NVU1RPTV9PUF9FTgkJQklUKDQpCisrI2RlZmluZSBNVEtfTk9SX1dSX0JVRl9FTgkJQklUKDApCisrCisrI2RlZmluZSBNVEtfTk9SX1JFR19QUF9EQVRBCQkweDk4CisrCisrI2RlZmluZSBNVEtfTk9SX1JFR19JUlFfU1RBVAkJMHhhOAorKyNkZWZpbmUgTVRLX05PUl9SRUdfSVJRX0VOCQkweGFjCisrI2RlZmluZSBNVEtfTk9SX0lSUV9ETUEJCQlCSVQoNykKKysjZGVmaW5lIE1US19OT1JfSVJRX01BU0sJCUdFTk1BU0soNywgMCkKKysKKysjZGVmaW5lIE1US19OT1JfUkVHX0NGRzMJCTB4YjQKKysjZGVmaW5lIE1US19OT1JfRElTQUJMRV9XUkVOCQlCSVQoNykKKysjZGVmaW5lIE1US19OT1JfRElTQUJMRV9TUl9QT0xMCQlCSVQoNSkKKysKKysjZGVmaW5lIE1US19OT1JfUkVHX1dQCQkJMHhjNAorKyNkZWZpbmUgTVRLX05PUl9FTkFCTEVfU0ZfQ01ECQkweDMwCisrCisrI2RlZmluZSBNVEtfTk9SX1JFR19CVVNDRkcJCTB4Y2MKKysjZGVmaW5lIE1US19OT1JfNEJfQUREUgkJCUJJVCg0KQorKyNkZWZpbmUgTVRLX05PUl9RVUFEX0FERFIJCUJJVCgzKQorKyNkZWZpbmUgTVRLX05PUl9RVUFEX1JFQUQJCUJJVCgyKQorKyNkZWZpbmUgTVRLX05PUl9EVUFMX0FERFIJCUJJVCgxKQorKyNkZWZpbmUgTVRLX05PUl9EVUFMX1JFQUQJCUJJVCgwKQorKyNkZWZpbmUgTVRLX05PUl9CVVNfTU9ERV9NQVNLCQlHRU5NQVNLKDQsIDApCisrCisrI2RlZmluZSBNVEtfTk9SX1JFR19ETUFfQ1RMCQkweDcxOAorKyNkZWZpbmUgTVRLX05PUl9ETUFfU1RBUlQJCUJJVCgwKQorKworKyNkZWZpbmUgTVRLX05PUl9SRUdfRE1BX0ZBRFIJCTB4NzFjCisrI2RlZmluZSBNVEtfTk9SX1JFR19ETUFfREFEUgkJMHg3MjAKKysjZGVmaW5lIE1US19OT1JfUkVHX0RNQV9FTkRfREFEUgkweDcyNAorKworKyNkZWZpbmUgTVRLX05PUl9QUkdfTUFYX1NJWkUJCTYKKysvLyBSZWFkaW5nIERNQSBzcmMvZHN0IGFkZHJlc3NlcyBoYXZlIHRvIGJlIDE2LWJ5dGUgYWxpZ25lZAorKyNkZWZpbmUgTVRLX05PUl9ETUFfQUxJR04JCTE2CisrI2RlZmluZSBNVEtfTk9SX0RNQV9BTElHTl9NQVNLCQkoTVRLX05PUl9ETUFfQUxJR04gLSAxKQorKy8vIGFuZCB3ZSBhbGxvY2F0ZSBhIGJvdW5jZSBidWZmZXIgaWYgZGVzdGluYXRpb24gYWRkcmVzcyBpc24ndCBhbGlnbmVkLgorKyNkZWZpbmUgTVRLX05PUl9CT1VOQ0VfQlVGX1NJWkUJCVBBR0VfU0laRQorKworKy8vIEJ1ZmZlcmVkIHBhZ2UgcHJvZ3JhbSBjYW4gZG8gb25lIDEyOC1ieXRlIHRyYW5zZmVyCisrI2RlZmluZSBNVEtfTk9SX1BQX1NJWkUJCQkxMjgKKysKKysjZGVmaW5lIENMS19UT19VUyhzcCwgY2xrY250KQkJKChjbGtjbnQpICogMTAwMDAwMCAvIHNwLT5zcGlfZnJlcSkKKysKKytzdHJ1Y3QgbXRrX25vciB7CisrCXN0cnVjdCBzcGlfY29udHJvbGxlciAqY3RscjsKKysJc3RydWN0IGRldmljZSAqZGV2OworKwl2b2lkIF9faW9tZW0gKmJhc2U7CisrCXU4ICpidWZmZXI7CisrCXN0cnVjdCBjbGsgKnNwaV9jbGs7CisrCXN0cnVjdCBjbGsgKmN0bHJfY2xrOworKwl1bnNpZ25lZCBpbnQgc3BpX2ZyZXE7CisrCWJvb2wgd2J1Zl9lbjsKKysJYm9vbCBoYXNfaXJxOworKwlzdHJ1Y3QgY29tcGxldGlvbiBvcF9kb25lOworK307CisrCisrc3RhdGljIGlubGluZSB2b2lkIG10a19ub3Jfcm13KHN0cnVjdCBtdGtfbm9yICpzcCwgdTMyIHJlZywgdTMyIHNldCwgdTMyIGNscikKKyt7CisrCXUzMiB2YWwgPSByZWFkbChzcC0+YmFzZSArIHJlZyk7CisrCisrCXZhbCAmPSB+Y2xyOworKwl2YWwgfD0gc2V0OworKwl3cml0ZWwodmFsLCBzcC0+YmFzZSArIHJlZyk7CisrfQorKworK3N0YXRpYyBpbmxpbmUgaW50IG10a19ub3JfY21kX2V4ZWMoc3RydWN0IG10a19ub3IgKnNwLCB1MzIgY21kLCB1bG9uZyBjbGspCisreworKwl1bG9uZyBkZWxheSA9IENMS19UT19VUyhzcCwgY2xrKTsKKysJdTMyIHJlZzsKKysJaW50IHJldDsKKysKKysJd3JpdGVsKGNtZCwgc3AtPmJhc2UgKyBNVEtfTk9SX1JFR19DTUQpOworKwlyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQoc3AtPmJhc2UgKyBNVEtfTk9SX1JFR19DTUQsIHJlZywgIShyZWcgJiBjbWQpLAorKwkJCQkgZGVsYXkgLyAzLCAoZGVsYXkgKyAxKSAqIDIwMCk7CisrCWlmIChyZXQgPCAwKQorKwkJZGV2X2VycihzcC0+ZGV2LCAiY29tbWFuZCAldSB0aW1lb3V0LlxuIiwgY21kKTsKKysJcmV0dXJuIHJldDsKKyt9CisrCisrc3RhdGljIHZvaWQgbXRrX25vcl9zZXRfYWRkcihzdHJ1Y3QgbXRrX25vciAqc3AsIGNvbnN0IHN0cnVjdCBzcGlfbWVtX29wICpvcCkKKyt7CisrCXUzMiBhZGRyID0gb3AtPmFkZHIudmFsOworKwlpbnQgaTsKKysKKysJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworKwkJd3JpdGViKGFkZHIgJiAweGZmLCBzcC0+YmFzZSArIE1US19OT1JfUkVHX1JBRFIoaSkpOworKwkJYWRkciA+Pj0gODsKKysJfQorKwlpZiAob3AtPmFkZHIubmJ5dGVzID09IDQpIHsKKysJCXdyaXRlYihhZGRyICYgMHhmZiwgc3AtPmJhc2UgKyBNVEtfTk9SX1JFR19SQURSMyk7CisrCQltdGtfbm9yX3JtdyhzcCwgTVRLX05PUl9SRUdfQlVTQ0ZHLCBNVEtfTk9SXzRCX0FERFIsIDApOworKwl9IGVsc2UgeworKwkJbXRrX25vcl9ybXcoc3AsIE1US19OT1JfUkVHX0JVU0NGRywgMCwgTVRLX05PUl80Ql9BRERSKTsKKysJfQorK30KKysKKytzdGF0aWMgYm9vbCBtdGtfbm9yX21hdGNoX3JlYWQoY29uc3Qgc3RydWN0IHNwaV9tZW1fb3AgKm9wKQorK3sKKysJaW50IGR1bW15ID0gMDsKKysKKysJaWYgKG9wLT5kdW1teS5idXN3aWR0aCkKKysJCWR1bW15ID0gb3AtPmR1bW15Lm5ieXRlcyAqIEJJVFNfUEVSX0JZVEUgLyBvcC0+ZHVtbXkuYnVzd2lkdGg7CisrCisrCWlmICgob3AtPmRhdGEuYnVzd2lkdGggPT0gMikgfHwgKG9wLT5kYXRhLmJ1c3dpZHRoID09IDQpKSB7CisrCQlpZiAob3AtPmFkZHIuYnVzd2lkdGggPT0gMSkKKysJCQlyZXR1cm4gZHVtbXkgPT0gODsKKysJCWVsc2UgaWYgKG9wLT5hZGRyLmJ1c3dpZHRoID09IDIpCisrCQkJcmV0dXJuIGR1bW15ID09IDQ7CisrCQllbHNlIGlmIChvcC0+YWRkci5idXN3aWR0aCA9PSA0KQorKwkJCXJldHVybiBkdW1teSA9PSA2OworKwl9IGVsc2UgaWYgKChvcC0+YWRkci5idXN3aWR0aCA9PSAxKSAmJiAob3AtPmRhdGEuYnVzd2lkdGggPT0gMSkpIHsKKysJCWlmIChvcC0+Y21kLm9wY29kZSA9PSAweDAzKQorKwkJCXJldHVybiBkdW1teSA9PSAwOworKwkJZWxzZSBpZiAob3AtPmNtZC5vcGNvZGUgPT0gMHgwYikKKysJCQlyZXR1cm4gZHVtbXkgPT0gODsKKysJfQorKwlyZXR1cm4gZmFsc2U7CisrfQorKworK3N0YXRpYyBpbnQgbXRrX25vcl9hZGp1c3Rfb3Bfc2l6ZShzdHJ1Y3Qgc3BpX21lbSAqbWVtLCBzdHJ1Y3Qgc3BpX21lbV9vcCAqb3ApCisreworKwlzaXplX3QgbGVuOworKworKwlpZiAoIW9wLT5kYXRhLm5ieXRlcykKKysJCXJldHVybiAwOworKworKwlpZiAoKG9wLT5hZGRyLm5ieXRlcyA9PSAzKSB8fCAob3AtPmFkZHIubmJ5dGVzID09IDQpKSB7CisrCQlpZiAoKG9wLT5kYXRhLmRpciA9PSBTUElfTUVNX0RBVEFfSU4pICYmCisrCQkgICAgbXRrX25vcl9tYXRjaF9yZWFkKG9wKSkgeworKwkJCWlmICgob3AtPmFkZHIudmFsICYgTVRLX05PUl9ETUFfQUxJR05fTUFTSykgfHwKKysJCQkgICAgKG9wLT5kYXRhLm5ieXRlcyA8IE1US19OT1JfRE1BX0FMSUdOKSkKKysJCQkJb3AtPmRhdGEubmJ5dGVzID0gMTsKKysJCQllbHNlIGlmICghKCh1bG9uZykob3AtPmRhdGEuYnVmLmluKSAmCisrCQkJCSAgIE1US19OT1JfRE1BX0FMSUdOX01BU0spKQorKwkJCQlvcC0+ZGF0YS5uYnl0ZXMgJj0gfk1US19OT1JfRE1BX0FMSUdOX01BU0s7CisrCQkJZWxzZSBpZiAob3AtPmRhdGEubmJ5dGVzID4gTVRLX05PUl9CT1VOQ0VfQlVGX1NJWkUpCisrCQkJCW9wLT5kYXRhLm5ieXRlcyA9IE1US19OT1JfQk9VTkNFX0JVRl9TSVpFOworKwkJCXJldHVybiAwOworKwkJfSBlbHNlIGlmIChvcC0+ZGF0YS5kaXIgPT0gU1BJX01FTV9EQVRBX09VVCkgeworKwkJCWlmIChvcC0+ZGF0YS5uYnl0ZXMgPj0gTVRLX05PUl9QUF9TSVpFKQorKwkJCQlvcC0+ZGF0YS5uYnl0ZXMgPSBNVEtfTk9SX1BQX1NJWkU7CisrCQkJZWxzZQorKwkJCQlvcC0+ZGF0YS5uYnl0ZXMgPSAxOworKwkJCXJldHVybiAwOworKwkJfQorKwl9CisrCisrCWxlbiA9IE1US19OT1JfUFJHX01BWF9TSVpFIC0gc2l6ZW9mKG9wLT5jbWQub3Bjb2RlKSAtIG9wLT5hZGRyLm5ieXRlcyAtCisrCSAgICAgIG9wLT5kdW1teS5uYnl0ZXM7CisrCWlmIChvcC0+ZGF0YS5uYnl0ZXMgPiBsZW4pCisrCQlvcC0+ZGF0YS5uYnl0ZXMgPSBsZW47CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgYm9vbCBtdGtfbm9yX3N1cHBvcnRzX29wKHN0cnVjdCBzcGlfbWVtICptZW0sCisrCQkJCWNvbnN0IHN0cnVjdCBzcGlfbWVtX29wICpvcCkKKyt7CisrCXNpemVfdCBsZW47CisrCisrCWlmIChvcC0+Y21kLmJ1c3dpZHRoICE9IDEpCisrCQlyZXR1cm4gZmFsc2U7CisrCisrCWlmICgob3AtPmFkZHIubmJ5dGVzID09IDMpIHx8IChvcC0+YWRkci5uYnl0ZXMgPT0gNCkpIHsKKysJCWlmICgob3AtPmRhdGEuZGlyID09IFNQSV9NRU1fREFUQV9JTikgJiYgbXRrX25vcl9tYXRjaF9yZWFkKG9wKSkKKysJCQlyZXR1cm4gdHJ1ZTsKKysJCWVsc2UgaWYgKG9wLT5kYXRhLmRpciA9PSBTUElfTUVNX0RBVEFfT1VUKQorKwkJCXJldHVybiAob3AtPmFkZHIuYnVzd2lkdGggPT0gMSkgJiYKKysJCQkgICAgICAgKG9wLT5kdW1teS5idXN3aWR0aCA9PSAwKSAmJgorKwkJCSAgICAgICAob3AtPmRhdGEuYnVzd2lkdGggPT0gMSk7CisrCX0KKysJbGVuID0gc2l6ZW9mKG9wLT5jbWQub3Bjb2RlKSArIG9wLT5hZGRyLm5ieXRlcyArIG9wLT5kdW1teS5uYnl0ZXM7CisrCWlmICgobGVuID4gTVRLX05PUl9QUkdfTUFYX1NJWkUpIHx8CisrCSAgICAoKG9wLT5kYXRhLm5ieXRlcykgJiYgKGxlbiA9PSBNVEtfTk9SX1BSR19NQVhfU0laRSkpKQorKwkJcmV0dXJuIGZhbHNlOworKwlyZXR1cm4gdHJ1ZTsKKyt9CisrCisrc3RhdGljIHZvaWQgbXRrX25vcl9zZXR1cF9idXMoc3RydWN0IG10a19ub3IgKnNwLCBjb25zdCBzdHJ1Y3Qgc3BpX21lbV9vcCAqb3ApCisreworKwl1MzIgcmVnID0gMDsKKysKKysJaWYgKG9wLT5hZGRyLm5ieXRlcyA9PSA0KQorKwkJcmVnIHw9IE1US19OT1JfNEJfQUREUjsKKysKKysJaWYgKG9wLT5kYXRhLmJ1c3dpZHRoID09IDQpIHsKKysJCXJlZyB8PSBNVEtfTk9SX1FVQURfUkVBRDsKKysJCXdyaXRlYihvcC0+Y21kLm9wY29kZSwgc3AtPmJhc2UgKyBNVEtfTk9SX1JFR19QUkdEQVRBKDQpKTsKKysJCWlmIChvcC0+YWRkci5idXN3aWR0aCA9PSA0KQorKwkJCXJlZyB8PSBNVEtfTk9SX1FVQURfQUREUjsKKysJfSBlbHNlIGlmIChvcC0+ZGF0YS5idXN3aWR0aCA9PSAyKSB7CisrCQlyZWcgfD0gTVRLX05PUl9EVUFMX1JFQUQ7CisrCQl3cml0ZWIob3AtPmNtZC5vcGNvZGUsIHNwLT5iYXNlICsgTVRLX05PUl9SRUdfUFJHREFUQSgzKSk7CisrCQlpZiAob3AtPmFkZHIuYnVzd2lkdGggPT0gMikKKysJCQlyZWcgfD0gTVRLX05PUl9EVUFMX0FERFI7CisrCX0gZWxzZSB7CisrCQlpZiAob3AtPmNtZC5vcGNvZGUgPT0gMHgwYikKKysJCQltdGtfbm9yX3JtdyhzcCwgTVRLX05PUl9SRUdfQ0ZHMSwgTVRLX05PUl9GQVNUX1JFQUQsIDApOworKwkJZWxzZQorKwkJCW10a19ub3Jfcm13KHNwLCBNVEtfTk9SX1JFR19DRkcxLCAwLCBNVEtfTk9SX0ZBU1RfUkVBRCk7CisrCX0KKysJbXRrX25vcl9ybXcoc3AsIE1US19OT1JfUkVHX0JVU0NGRywgcmVnLCBNVEtfTk9SX0JVU19NT0RFX01BU0spOworK30KKysKKytzdGF0aWMgaW50IG10a19ub3JfcmVhZF9kbWEoc3RydWN0IG10a19ub3IgKnNwLCB1MzIgZnJvbSwgdW5zaWduZWQgaW50IGxlbmd0aCwKKysJCQkgICAgdTggKmJ1ZmZlcikKKyt7CisrCWludCByZXQgPSAwOworKwl1bG9uZyBkZWxheTsKKysJdTMyIHJlZzsKKysJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKysKKysJZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShzcC0+ZGV2LCBidWZmZXIsIGxlbmd0aCwgRE1BX0ZST01fREVWSUNFKTsKKysJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKHNwLT5kZXYsIGRtYV9hZGRyKSkgeworKwkJZGV2X2VycihzcC0+ZGV2LCAiZmFpbGVkIHRvIG1hcCBkbWEgYnVmZmVyLlxuIik7CisrCQlyZXR1cm4gLUVJTlZBTDsKKysJfQorKworKwl3cml0ZWwoZnJvbSwgc3AtPmJhc2UgKyBNVEtfTk9SX1JFR19ETUFfRkFEUik7CisrCXdyaXRlbChkbWFfYWRkciwgc3AtPmJhc2UgKyBNVEtfTk9SX1JFR19ETUFfREFEUik7CisrCXdyaXRlbChkbWFfYWRkciArIGxlbmd0aCwgc3AtPmJhc2UgKyBNVEtfTk9SX1JFR19ETUFfRU5EX0RBRFIpOworKworKwlpZiAoc3AtPmhhc19pcnEpIHsKKysJCXJlaW5pdF9jb21wbGV0aW9uKCZzcC0+b3BfZG9uZSk7CisrCQltdGtfbm9yX3JtdyhzcCwgTVRLX05PUl9SRUdfSVJRX0VOLCBNVEtfTk9SX0lSUV9ETUEsIDApOworKwl9CisrCisrCW10a19ub3Jfcm13KHNwLCBNVEtfTk9SX1JFR19ETUFfQ1RMLCBNVEtfTk9SX0RNQV9TVEFSVCwgMCk7CisrCisrCWRlbGF5ID0gQ0xLX1RPX1VTKHNwLCAobGVuZ3RoICsgNSkgKiBCSVRTX1BFUl9CWVRFKTsKKysKKysJaWYgKHNwLT5oYXNfaXJxKSB7CisrCQlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmc3AtPm9wX2RvbmUsCisrCQkJCQkJIChkZWxheSArIDEpICogMTAwKSkKKysJCQlyZXQgPSAtRVRJTUVET1VUOworKwl9IGVsc2UgeworKwkJcmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KHNwLT5iYXNlICsgTVRLX05PUl9SRUdfRE1BX0NUTCwgcmVnLAorKwkJCQkJICEocmVnICYgTVRLX05PUl9ETUFfU1RBUlQpLCBkZWxheSAvIDMsCisrCQkJCQkgKGRlbGF5ICsgMSkgKiAxMDApOworKwl9CisrCisrCWRtYV91bm1hcF9zaW5nbGUoc3AtPmRldiwgZG1hX2FkZHIsIGxlbmd0aCwgRE1BX0ZST01fREVWSUNFKTsKKysJaWYgKHJldCA8IDApCisrCQlkZXZfZXJyKHNwLT5kZXYsICJkbWEgcmVhZCB0aW1lb3V0LlxuIik7CisrCisrCXJldHVybiByZXQ7CisrfQorKworK3N0YXRpYyBpbnQgbXRrX25vcl9yZWFkX2JvdW5jZShzdHJ1Y3QgbXRrX25vciAqc3AsIHUzMiBmcm9tLAorKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoLCB1OCAqYnVmZmVyKQorK3sKKysJdW5zaWduZWQgaW50IHJkbGVuOworKwlpbnQgcmV0OworKworKwlpZiAobGVuZ3RoICYgTVRLX05PUl9ETUFfQUxJR05fTUFTSykKKysJCXJkbGVuID0gKGxlbmd0aCArIE1US19OT1JfRE1BX0FMSUdOKSAmIH5NVEtfTk9SX0RNQV9BTElHTl9NQVNLOworKwllbHNlCisrCQlyZGxlbiA9IGxlbmd0aDsKKysKKysJcmV0ID0gbXRrX25vcl9yZWFkX2RtYShzcCwgZnJvbSwgcmRsZW4sIHNwLT5idWZmZXIpOworKwlpZiAocmV0KQorKwkJcmV0dXJuIHJldDsKKysKKysJbWVtY3B5KGJ1ZmZlciwgc3AtPmJ1ZmZlciwgbGVuZ3RoKTsKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQgbXRrX25vcl9yZWFkX3BpbyhzdHJ1Y3QgbXRrX25vciAqc3AsIGNvbnN0IHN0cnVjdCBzcGlfbWVtX29wICpvcCkKKyt7CisrCXU4ICpidWYgPSBvcC0+ZGF0YS5idWYuaW47CisrCWludCByZXQ7CisrCisrCXJldCA9IG10a19ub3JfY21kX2V4ZWMoc3AsIE1US19OT1JfQ01EX1JFQUQsIDYgKiBCSVRTX1BFUl9CWVRFKTsKKysJaWYgKCFyZXQpCisrCQlidWZbMF0gPSByZWFkYihzcC0+YmFzZSArIE1US19OT1JfUkVHX1JEQVRBKTsKKysJcmV0dXJuIHJldDsKKyt9CisrCisrc3RhdGljIGludCBtdGtfbm9yX3dyaXRlX2J1ZmZlcl9lbmFibGUoc3RydWN0IG10a19ub3IgKnNwKQorK3sKKysJaW50IHJldDsKKysJdTMyIHZhbDsKKysKKysJaWYgKHNwLT53YnVmX2VuKQorKwkJcmV0dXJuIDA7CisrCisrCXZhbCA9IHJlYWRsKHNwLT5iYXNlICsgTVRLX05PUl9SRUdfQ0ZHMik7CisrCXdyaXRlbCh2YWwgfCBNVEtfTk9SX1dSX0JVRl9FTiwgc3AtPmJhc2UgKyBNVEtfTk9SX1JFR19DRkcyKTsKKysJcmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KHNwLT5iYXNlICsgTVRLX05PUl9SRUdfQ0ZHMiwgdmFsLAorKwkJCQkgdmFsICYgTVRLX05PUl9XUl9CVUZfRU4sIDAsIDEwMDAwKTsKKysJaWYgKCFyZXQpCisrCQlzcC0+d2J1Zl9lbiA9IHRydWU7CisrCXJldHVybiByZXQ7CisrfQorKworK3N0YXRpYyBpbnQgbXRrX25vcl93cml0ZV9idWZmZXJfZGlzYWJsZShzdHJ1Y3QgbXRrX25vciAqc3ApCisreworKwlpbnQgcmV0OworKwl1MzIgdmFsOworKworKwlpZiAoIXNwLT53YnVmX2VuKQorKwkJcmV0dXJuIDA7CisrCXZhbCA9IHJlYWRsKHNwLT5iYXNlICsgTVRLX05PUl9SRUdfQ0ZHMik7CisrCXdyaXRlbCh2YWwgJiB+TVRLX05PUl9XUl9CVUZfRU4sIHNwLT5iYXNlICsgTVRLX05PUl9SRUdfQ0ZHMik7CisrCXJldCA9IHJlYWRsX3BvbGxfdGltZW91dChzcC0+YmFzZSArIE1US19OT1JfUkVHX0NGRzIsIHZhbCwKKysJCQkJICEodmFsICYgTVRLX05PUl9XUl9CVUZfRU4pLCAwLCAxMDAwMCk7CisrCWlmICghcmV0KQorKwkJc3AtPndidWZfZW4gPSBmYWxzZTsKKysJcmV0dXJuIHJldDsKKyt9CisrCisrc3RhdGljIGludCBtdGtfbm9yX3BwX2J1ZmZlcmVkKHN0cnVjdCBtdGtfbm9yICpzcCwgY29uc3Qgc3RydWN0IHNwaV9tZW1fb3AgKm9wKQorK3sKKysJY29uc3QgdTggKmJ1ZiA9IG9wLT5kYXRhLmJ1Zi5vdXQ7CisrCXUzMiB2YWw7CisrCWludCByZXQsIGk7CisrCisrCXJldCA9IG10a19ub3Jfd3JpdGVfYnVmZmVyX2VuYWJsZShzcCk7CisrCWlmIChyZXQgPCAwKQorKwkJcmV0dXJuIHJldDsKKysKKysJZm9yIChpID0gMDsgaSA8IG9wLT5kYXRhLm5ieXRlczsgaSArPSA0KSB7CisrCQl2YWwgPSBidWZbaSArIDNdIDw8IDI0IHwgYnVmW2kgKyAyXSA8PCAxNiB8IGJ1ZltpICsgMV0gPDwgOCB8CisrCQkgICAgICBidWZbaV07CisrCQl3cml0ZWwodmFsLCBzcC0+YmFzZSArIE1US19OT1JfUkVHX1BQX0RBVEEpOworKwl9CisrCXJldHVybiBtdGtfbm9yX2NtZF9leGVjKHNwLCBNVEtfTk9SX0NNRF9XUklURSwKKysJCQkJKG9wLT5kYXRhLm5ieXRlcyArIDUpICogQklUU19QRVJfQllURSk7CisrfQorKworK3N0YXRpYyBpbnQgbXRrX25vcl9wcF91bmJ1ZmZlcmVkKHN0cnVjdCBtdGtfbm9yICpzcCwKKysJCQkJIGNvbnN0IHN0cnVjdCBzcGlfbWVtX29wICpvcCkKKyt7CisrCWNvbnN0IHU4ICpidWYgPSBvcC0+ZGF0YS5idWYub3V0OworKwlpbnQgcmV0OworKworKwlyZXQgPSBtdGtfbm9yX3dyaXRlX2J1ZmZlcl9kaXNhYmxlKHNwKTsKKysJaWYgKHJldCA8IDApCisrCQlyZXR1cm4gcmV0OworKwl3cml0ZWIoYnVmWzBdLCBzcC0+YmFzZSArIE1US19OT1JfUkVHX1dEQVRBKTsKKysJcmV0dXJuIG10a19ub3JfY21kX2V4ZWMoc3AsIE1US19OT1JfQ01EX1dSSVRFLCA2ICogQklUU19QRVJfQllURSk7CisrfQorKworK2ludCBtdGtfbm9yX2V4ZWNfb3Aoc3RydWN0IHNwaV9tZW0gKm1lbSwgY29uc3Qgc3RydWN0IHNwaV9tZW1fb3AgKm9wKQorK3sKKysJc3RydWN0IG10a19ub3IgKnNwID0gc3BpX2NvbnRyb2xsZXJfZ2V0X2RldmRhdGEobWVtLT5zcGktPm1hc3Rlcik7CisrCWludCByZXQ7CisrCisrCWlmICgob3AtPmRhdGEubmJ5dGVzID09IDApIHx8CisrCSAgICAoKG9wLT5hZGRyLm5ieXRlcyAhPSAzKSAmJiAob3AtPmFkZHIubmJ5dGVzICE9IDQpKSkKKysJCXJldHVybiAtRU5PVFNVUFA7CisrCisrCWlmIChvcC0+ZGF0YS5kaXIgPT0gU1BJX01FTV9EQVRBX09VVCkgeworKwkJbXRrX25vcl9zZXRfYWRkcihzcCwgb3ApOworKwkJd3JpdGViKG9wLT5jbWQub3Bjb2RlLCBzcC0+YmFzZSArIE1US19OT1JfUkVHX1BSR0RBVEEwKTsKKysJCWlmIChvcC0+ZGF0YS5uYnl0ZXMgPT0gTVRLX05PUl9QUF9TSVpFKQorKwkJCXJldHVybiBtdGtfbm9yX3BwX2J1ZmZlcmVkKHNwLCBvcCk7CisrCQlyZXR1cm4gbXRrX25vcl9wcF91bmJ1ZmZlcmVkKHNwLCBvcCk7CisrCX0KKysKKysJaWYgKChvcC0+ZGF0YS5kaXIgPT0gU1BJX01FTV9EQVRBX0lOKSAmJiBtdGtfbm9yX21hdGNoX3JlYWQob3ApKSB7CisrCQlyZXQgPSBtdGtfbm9yX3dyaXRlX2J1ZmZlcl9kaXNhYmxlKHNwKTsKKysJCWlmIChyZXQgPCAwKQorKwkJCXJldHVybiByZXQ7CisrCQltdGtfbm9yX3NldHVwX2J1cyhzcCwgb3ApOworKwkJaWYgKG9wLT5kYXRhLm5ieXRlcyA9PSAxKSB7CisrCQkJbXRrX25vcl9zZXRfYWRkcihzcCwgb3ApOworKwkJCXJldHVybiBtdGtfbm9yX3JlYWRfcGlvKHNwLCBvcCk7CisrCQl9IGVsc2UgaWYgKCgodWxvbmcpKG9wLT5kYXRhLmJ1Zi5pbikgJgorKwkJCSAgICBNVEtfTk9SX0RNQV9BTElHTl9NQVNLKSkgeworKwkJCXJldHVybiBtdGtfbm9yX3JlYWRfYm91bmNlKHNwLCBvcC0+YWRkci52YWwsCisrCQkJCQkJICAgb3AtPmRhdGEubmJ5dGVzLAorKwkJCQkJCSAgIG9wLT5kYXRhLmJ1Zi5pbik7CisrCQl9IGVsc2UgeworKwkJCXJldHVybiBtdGtfbm9yX3JlYWRfZG1hKHNwLCBvcC0+YWRkci52YWwsCisrCQkJCQkJb3AtPmRhdGEubmJ5dGVzLAorKwkJCQkJCW9wLT5kYXRhLmJ1Zi5pbik7CisrCQl9CisrCX0KKysKKysJcmV0dXJuIC1FTk9UU1VQUDsKKyt9CisrCisrc3RhdGljIGludCBtdGtfbm9yX3NldHVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCisreworKwlzdHJ1Y3QgbXRrX25vciAqc3AgPSBzcGlfY29udHJvbGxlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisrCisrCWlmIChzcGktPm1heF9zcGVlZF9oeiAmJiAoc3BpLT5tYXhfc3BlZWRfaHogPCBzcC0+c3BpX2ZyZXEpKSB7CisrCQlkZXZfZXJyKCZzcGktPmRldiwgInNwaSBjbG9jayBzaG91bGQgYmUgJXUgSHouXG4iLAorKwkJCXNwLT5zcGlfZnJlcSk7CisrCQlyZXR1cm4gLUVJTlZBTDsKKysJfQorKwlzcGktPm1heF9zcGVlZF9oeiA9IHNwLT5zcGlfZnJlcTsKKysKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQgbXRrX25vcl90cmFuc2Zlcl9vbmVfbWVzc2FnZShzdHJ1Y3Qgc3BpX2NvbnRyb2xsZXIgKm1hc3RlciwKKysJCQkJCXN0cnVjdCBzcGlfbWVzc2FnZSAqbSkKKyt7CisrCXN0cnVjdCBtdGtfbm9yICpzcCA9IHNwaV9jb250cm9sbGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisrCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnQgPSBOVUxMOworKwl1bnNpZ25lZCBsb25nIHRyeF9sZW4gPSAwOworKwlpbnQgc3RhdCA9IDA7CisrCWludCByZWdfb2Zmc2V0ID0gTVRLX05PUl9SRUdfUFJHREFUQV9NQVg7CisrCXZvaWQgX19pb21lbSAqcmVnOworKwljb25zdCB1OCAqdHhidWY7CisrCXU4ICpyeGJ1ZjsKKysJaW50IGk7CisrCisrCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgJm0tPnRyYW5zZmVycywgdHJhbnNmZXJfbGlzdCkgeworKwkJdHhidWYgPSB0LT50eF9idWY7CisrCQlmb3IgKGkgPSAwOyBpIDwgdC0+bGVuOyBpKyssIHJlZ19vZmZzZXQtLSkgeworKwkJCXJlZyA9IHNwLT5iYXNlICsgTVRLX05PUl9SRUdfUFJHREFUQShyZWdfb2Zmc2V0KTsKKysJCQlpZiAodHhidWYpCisrCQkJCXdyaXRlYih0eGJ1ZltpXSwgcmVnKTsKKysJCQllbHNlCisrCQkJCXdyaXRlYigwLCByZWcpOworKwkJfQorKwkJdHJ4X2xlbiArPSB0LT5sZW47CisrCX0KKysKKysJd3JpdGVsKHRyeF9sZW4gKiBCSVRTX1BFUl9CWVRFLCBzcC0+YmFzZSArIE1US19OT1JfUkVHX1BSR19DTlQpOworKworKwlzdGF0ID0gbXRrX25vcl9jbWRfZXhlYyhzcCwgTVRLX05PUl9DTURfUFJPR1JBTSwKKysJCQkJdHJ4X2xlbiAqIEJJVFNfUEVSX0JZVEUpOworKwlpZiAoc3RhdCA8IDApCisrCQlnb3RvIG1zZ19kb25lOworKworKwlyZWdfb2Zmc2V0ID0gdHJ4X2xlbiAtIDE7CisrCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgJm0tPnRyYW5zZmVycywgdHJhbnNmZXJfbGlzdCkgeworKwkJcnhidWYgPSB0LT5yeF9idWY7CisrCQlmb3IgKGkgPSAwOyBpIDwgdC0+bGVuOyBpKyssIHJlZ19vZmZzZXQtLSkgeworKwkJCXJlZyA9IHNwLT5iYXNlICsgTVRLX05PUl9SRUdfU0hJRlQocmVnX29mZnNldCk7CisrCQkJaWYgKHJ4YnVmKQorKwkJCQlyeGJ1ZltpXSA9IHJlYWRiKHJlZyk7CisrCQl9CisrCX0KKysKKysJbS0+YWN0dWFsX2xlbmd0aCA9IHRyeF9sZW47CisrbXNnX2RvbmU6CisrCW0tPnN0YXR1cyA9IHN0YXQ7CisrCXNwaV9maW5hbGl6ZV9jdXJyZW50X21lc3NhZ2UobWFzdGVyKTsKKysKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyB2b2lkIG10a19ub3JfZGlzYWJsZV9jbGsoc3RydWN0IG10a19ub3IgKnNwKQorK3sKKysJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHNwLT5zcGlfY2xrKTsKKysJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHNwLT5jdGxyX2Nsayk7CisrfQorKworK3N0YXRpYyBpbnQgbXRrX25vcl9lbmFibGVfY2xrKHN0cnVjdCBtdGtfbm9yICpzcCkKKyt7CisrCWludCByZXQ7CisrCisrCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShzcC0+c3BpX2Nsayk7CisrCWlmIChyZXQpCisrCQlyZXR1cm4gcmV0OworKworKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoc3AtPmN0bHJfY2xrKTsKKysJaWYgKHJldCkgeworKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHNwLT5zcGlfY2xrKTsKKysJCXJldHVybiByZXQ7CisrCX0KKysKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQgbXRrX25vcl9pbml0KHN0cnVjdCBtdGtfbm9yICpzcCkKKyt7CisrCWludCByZXQ7CisrCisrCXJldCA9IG10a19ub3JfZW5hYmxlX2NsayhzcCk7CisrCWlmIChyZXQpCisrCQlyZXR1cm4gcmV0OworKworKwlzcC0+c3BpX2ZyZXEgPSBjbGtfZ2V0X3JhdGUoc3AtPnNwaV9jbGspOworKworKwl3cml0ZWwoTVRLX05PUl9FTkFCTEVfU0ZfQ01ELCBzcC0+YmFzZSArIE1US19OT1JfUkVHX1dQKTsKKysJbXRrX25vcl9ybXcoc3AsIE1US19OT1JfUkVHX0NGRzIsIE1US19OT1JfV1JfQ1VTVE9NX09QX0VOLCAwKTsKKysJbXRrX25vcl9ybXcoc3AsIE1US19OT1JfUkVHX0NGRzMsCisrCQkgICAgTVRLX05PUl9ESVNBQkxFX1dSRU4gfCBNVEtfTk9SX0RJU0FCTEVfU1JfUE9MTCwgMCk7CisrCisrCXJldHVybiByZXQ7CisrfQorKworK3N0YXRpYyBpcnFyZXR1cm5fdCBtdGtfbm9yX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCisreworKwlzdHJ1Y3QgbXRrX25vciAqc3AgPSBkYXRhOworKwl1MzIgaXJxX3N0YXR1cywgaXJxX2VuYWJsZWQ7CisrCisrCWlycV9zdGF0dXMgPSByZWFkbChzcC0+YmFzZSArIE1US19OT1JfUkVHX0lSUV9TVEFUKTsKKysJaXJxX2VuYWJsZWQgPSByZWFkbChzcC0+YmFzZSArIE1US19OT1JfUkVHX0lSUV9FTik7CisrCS8vIHdyaXRlIHN0YXR1cyBiYWNrIHRvIGNsZWFyIGludGVycnVwdAorKwl3cml0ZWwoaXJxX3N0YXR1cywgc3AtPmJhc2UgKyBNVEtfTk9SX1JFR19JUlFfU1RBVCk7CisrCisrCWlmICghKGlycV9zdGF0dXMgJiBpcnFfZW5hYmxlZCkpCisrCQlyZXR1cm4gSVJRX05PTkU7CisrCisrCWlmIChpcnFfc3RhdHVzICYgTVRLX05PUl9JUlFfRE1BKSB7CisrCQljb21wbGV0ZSgmc3AtPm9wX2RvbmUpOworKwkJd3JpdGVsKDAsIHNwLT5iYXNlICsgTVRLX05PUl9SRUdfSVJRX0VOKTsKKysJfQorKworKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CisrfQorKworK3N0YXRpYyBzaXplX3QgbXRrX21heF9tc2dfc2l6ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQorK3sKKysJcmV0dXJuIE1US19OT1JfUFJHX01BWF9TSVpFOworK30KKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9jb250cm9sbGVyX21lbV9vcHMgbXRrX25vcl9tZW1fb3BzID0geworKwkuYWRqdXN0X29wX3NpemUgPSBtdGtfbm9yX2FkanVzdF9vcF9zaXplLAorKwkuc3VwcG9ydHNfb3AgPSBtdGtfbm9yX3N1cHBvcnRzX29wLAorKwkuZXhlY19vcCA9IG10a19ub3JfZXhlY19vcAorK307CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRrX25vcl9tYXRjaFtdID0geworKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1ub3IiIH0sCisrCXsgLyogc2VudGluZWwgKi8gfQorK307CisrTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXRrX25vcl9tYXRjaCk7CisrCisrc3RhdGljIGludCBtdGtfbm9yX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCisreworKwlzdHJ1Y3Qgc3BpX2NvbnRyb2xsZXIgKmN0bHI7CisrCXN0cnVjdCBtdGtfbm9yICpzcDsKKysJdm9pZCBfX2lvbWVtICpiYXNlOworKwl1OCAqYnVmZmVyOworKwlzdHJ1Y3QgY2xrICpzcGlfY2xrLCAqY3Rscl9jbGs7CisrCWludCByZXQsIGlycTsKKysKKysJYmFzZSA9IGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZShwZGV2LCAwKTsKKysJaWYgKElTX0VSUihiYXNlKSkKKysJCXJldHVybiBQVFJfRVJSKGJhc2UpOworKworKwlzcGlfY2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJzcGkiKTsKKysJaWYgKElTX0VSUihzcGlfY2xrKSkKKysJCXJldHVybiBQVFJfRVJSKHNwaV9jbGspOworKworKwljdGxyX2NsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAic2YiKTsKKysJaWYgKElTX0VSUihjdGxyX2NsaykpCisrCQlyZXR1cm4gUFRSX0VSUihjdGxyX2Nsayk7CisrCisrCWJ1ZmZlciA9IGRldm1fa21hbGxvYygmcGRldi0+ZGV2LAorKwkJCSAgICAgIE1US19OT1JfQk9VTkNFX0JVRl9TSVpFICsgTVRLX05PUl9ETUFfQUxJR04sCisrCQkJICAgICAgR0ZQX0tFUk5FTCk7CisrCWlmICghYnVmZmVyKQorKwkJcmV0dXJuIC1FTk9NRU07CisrCisrCWlmICgodWxvbmcpYnVmZmVyICYgTVRLX05PUl9ETUFfQUxJR05fTUFTSykKKysJCWJ1ZmZlciA9ICh1OCAqKSgoKHVsb25nKWJ1ZmZlciArIE1US19OT1JfRE1BX0FMSUdOKSAmCisrCQkJCX5NVEtfTk9SX0RNQV9BTElHTl9NQVNLKTsKKysKKysJY3RsciA9IHNwaV9hbGxvY19tYXN0ZXIoJnBkZXYtPmRldiwgc2l6ZW9mKCpzcCkpOworKwlpZiAoIWN0bHIpIHsKKysJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBzcGkgY29udHJvbGxlclxuIik7CisrCQlyZXR1cm4gLUVOT01FTTsKKysJfQorKworKwljdGxyLT5iaXRzX3Blcl93b3JkX21hc2sgPSBTUElfQlBXX01BU0soOCk7CisrCWN0bHItPmRldi5vZl9ub2RlID0gcGRldi0+ZGV2Lm9mX25vZGU7CisrCWN0bHItPm1heF9tZXNzYWdlX3NpemUgPSBtdGtfbWF4X21zZ19zaXplOworKwljdGxyLT5tZW1fb3BzID0gJm10a19ub3JfbWVtX29wczsKKysJY3Rsci0+bW9kZV9iaXRzID0gU1BJX1JYX0RVQUwgfCBTUElfUlhfUVVBRCB8IFNQSV9UWF9EVUFMIHwgU1BJX1RYX1FVQUQ7CisrCWN0bHItPm51bV9jaGlwc2VsZWN0ID0gMTsKKysJY3Rsci0+c2V0dXAgPSBtdGtfbm9yX3NldHVwOworKwljdGxyLT50cmFuc2Zlcl9vbmVfbWVzc2FnZSA9IG10a19ub3JfdHJhbnNmZXJfb25lX21lc3NhZ2U7CisrCisrCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBjdGxyKTsKKysKKysJc3AgPSBzcGlfY29udHJvbGxlcl9nZXRfZGV2ZGF0YShjdGxyKTsKKysJc3AtPmJhc2UgPSBiYXNlOworKwlzcC0+YnVmZmVyID0gYnVmZmVyOworKwlzcC0+aGFzX2lycSA9IGZhbHNlOworKwlzcC0+d2J1Zl9lbiA9IGZhbHNlOworKwlzcC0+Y3RsciA9IGN0bHI7CisrCXNwLT5kZXYgPSAmcGRldi0+ZGV2OworKwlzcC0+c3BpX2NsayA9IHNwaV9jbGs7CisrCXNwLT5jdGxyX2NsayA9IGN0bHJfY2xrOworKworKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX29wdGlvbmFsKHBkZXYsIDApOworKwlpZiAoaXJxIDwgMCkgeworKwkJZGV2X3dhcm4oc3AtPmRldiwgIklSUSBub3QgYXZhaWxhYmxlLiIpOworKwl9IGVsc2UgeworKwkJd3JpdGVsKE1US19OT1JfSVJRX01BU0ssIGJhc2UgKyBNVEtfTk9SX1JFR19JUlFfU1RBVCk7CisrCQl3cml0ZWwoMCwgYmFzZSArIE1US19OT1JfUkVHX0lSUV9FTik7CisrCQlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKHNwLT5kZXYsIGlycSwgbXRrX25vcl9pcnFfaGFuZGxlciwgMCwKKysJCQkJICAgICAgIHBkZXYtPm5hbWUsIHNwKTsKKysJCWlmIChyZXQgPCAwKSB7CisrCQkJZGV2X3dhcm4oc3AtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IElSUS4iKTsKKysJCX0gZWxzZSB7CisrCQkJaW5pdF9jb21wbGV0aW9uKCZzcC0+b3BfZG9uZSk7CisrCQkJc3AtPmhhc19pcnEgPSB0cnVlOworKwkJfQorKwl9CisrCisrCXJldCA9IG10a19ub3JfaW5pdChzcCk7CisrCWlmIChyZXQgPCAwKSB7CisrCQlrZnJlZShjdGxyKTsKKysJCXJldHVybiByZXQ7CisrCX0KKysKKysJZGV2X2luZm8oJnBkZXYtPmRldiwgInNwaSBmcmVxdWVuY3k6ICVkIEh6XG4iLCBzcC0+c3BpX2ZyZXEpOworKworKwlyZXR1cm4gZGV2bV9zcGlfcmVnaXN0ZXJfY29udHJvbGxlcigmcGRldi0+ZGV2LCBjdGxyKTsKKyt9CisrCisrc3RhdGljIGludCBtdGtfbm9yX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorK3sKKysJc3RydWN0IHNwaV9jb250cm9sbGVyICpjdGxyOworKwlzdHJ1Y3QgbXRrX25vciAqc3A7CisrCisrCWN0bHIgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisrCXNwID0gc3BpX2NvbnRyb2xsZXJfZ2V0X2RldmRhdGEoY3Rscik7CisrCisrCW10a19ub3JfZGlzYWJsZV9jbGsoc3ApOworKworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX25vcl9kcml2ZXIgPSB7CisrCS5kcml2ZXIgPSB7CisrCQkubmFtZSA9IERSSVZFUl9OQU1FLAorKwkJLm9mX21hdGNoX3RhYmxlID0gbXRrX25vcl9tYXRjaCwKKysJfSwKKysJLnByb2JlID0gbXRrX25vcl9wcm9iZSwKKysJLnJlbW92ZSA9IG10a19ub3JfcmVtb3ZlLAorK307CisrCisrbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihtdGtfbm9yX2RyaXZlcik7CisrCisrTU9EVUxFX0RFU0NSSVBUSU9OKCJNZWRpYXRlayBTUEkgTk9SIGNvbnRyb2xsZXIgZHJpdmVyIik7CisrTU9EVUxFX0FVVEhPUigiQ2h1YW5ob25nIEd1byA8Z2NoOTgxMjEzQGdtYWlsLmNvbT4iKTsKKytNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CisrTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIERSSVZFUl9OQU1FKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wMDAzLXN3aXRjaC1hZGQtbXQ3NTMxLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzAwMDMtc3dpdGNoLWFkZC1tdDc1MzEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZhZTk5YwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wMDAzLXN3aXRjaC1hZGQtbXQ3NTMxLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKKy0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCisrKysgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZworQEAgLTMyOSw2ICszMjksOCBAQCBjb25maWcgUlRMODM2N0JfUEhZCisgCisgZW5kaWYgIyBSVEw4MzY2X1NNSQorIAorK3NvdXJjZSAiZHJpdmVycy9uZXQvcGh5L210ay9tdDc1M3gvS2NvbmZpZyIKKysKKyBjb21tZW50ICJNSUkgUEhZIGRldmljZSBkcml2ZXJzIgorIAorIGNvbmZpZyBTRlAKKy0tLSBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZQorKysrIGIvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlCitAQCAtMTA5LDMgKzEwOSw1IEBAIG9iai0kKENPTkZJR19TVEUxMFhQKQkJKz0gc3RlMTBYcC5vCisgb2JqLSQoQ09ORklHX1RFUkFORVRJQ1NfUEhZKQkrPSB0ZXJhbmV0aWNzLm8KKyBvYmotJChDT05GSUdfVklURVNTRV9QSFkpCSs9IHZpdGVzc2UubworIG9iai0kKENPTkZJR19YSUxJTlhfR01JSTJSR01JSSkgKz0geGlsaW54X2dtaWkycmdtaWkubworK29iai0kKENPTkZJR19NVDc1M1hfR1NXKSAgICAgICAgKz0gbXRrL210NzUzeC8KKysKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wMDA1LWR0cy1tdDc2MjItYWRkLWdzdy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wMDA1LWR0cy1tdDc2MjItYWRkLWdzdy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDBjYmZiCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzAwMDUtZHRzLW10NzYyMi1hZGQtZ3N3LnBhdGNoCkBAIC0wLDAgKzEsMjU4IEBACistLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210NzYyMi1iYW5hbmFwaS1icGktcjY0LmR0cworKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc2MjItYmFuYW5hcGktYnBpLXI2NC5kdHMKK0BAIC01Myw2ICs1MywxMyBAQAorIAkJfTsKKyAJfTsKKyAKKysJZ3N3OiBnc3dAMCB7CisrCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzUzeCI7CisrCQltZWRpYXRlayxldGhzeXMgPSA8JmV0aHN5cz47CisrCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKysJCSNzaXplLWNlbGxzID0gPDA+OworKwl9OworKworIAlsZWRzIHsKKyAJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKKyAKK0BAIC0xNDYsNiArMTUzLDM2IEBACisgCX07CisgfTsKKyAKKysmZ3N3IHsKKysJbWVkaWF0ZWssbWRpbyA9IDwmbWRpbz47CisrCW1lZGlhdGVrLHBvcnRtYXAgPSAid2xsbGwiOworKwltZWRpYXRlayxtZGlvX21hc3Rlcl9waW5tdXggPSA8MD47CisrCXJlc2V0LWdwaW9zID0gPCZwaW8gNTQgMD47CisrCWludGVycnVwdC1wYXJlbnQgPSA8JnBpbz47CisrCWludGVycnVwdHMgPSA8NTMgSVJRX1RZUEVfTEVWRUxfSElHSD47CisrCXN0YXR1cyA9ICJva2F5IjsKKysKKysJcG9ydDU6IHBvcnRANSB7CisrCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzUzeC1wb3J0IjsKKysJCXJlZyA9IDw1PjsKKysJCXBoeS1tb2RlID0gInJnbWlpIjsKKysJCWZpeGVkLWxpbmsgeworKwkJCXNwZWVkID0gPDEwMDA+OworKwkJCWZ1bGwtZHVwbGV4OworKwkJfTsKKysJfTsKKysKKysJcG9ydDY6IHBvcnRANiB7CisrCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzUzeC1wb3J0IjsKKysJCXJlZyA9IDw2PjsKKysJCXBoeS1tb2RlID0gInNnbWlpIjsKKysJCWZpeGVkLWxpbmsgeworKwkJCXNwZWVkID0gPDI1MDA+OworKwkJCWZ1bGwtZHVwbGV4OworKwkJfTsKKysJfTsKKyt9OworKworICZpMmMxIHsKKyAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKyAJcGluY3RybC0wID0gPCZpMmMxX3BpbnM+OworLS0tIGEvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc2MjItcmZiMS5kdHMKKysrKyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3NjIyLXJmYjEuZHRzCitAQCAtMSw3ICsxLDYgQEAKKyAvKgorLSAqIENvcHlyaWdodCAoYykgMjAxNyBNZWRpYVRlayBJbmMuCistICogQXV0aG9yOiBNaW5nIEh1YW5nIDxtaW5nLmh1YW5nQG1lZGlhdGVrLmNvbT4KKy0gKgkgICBTZWFuIFdhbmcgPHNlYW4ud2FuZ0BtZWRpYXRlay5jb20+CisrICogQ29weXJpZ2h0IChjKSAyMDE4IE1lZGlhVGVrIEluYy4KKysgKiBBdXRob3I6IFJ5ZGVyIExlZSA8cnlkZXIubGVlQG1lZGlhdGVrLmNvbT4KKyAgKgorICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMCBPUiBNSVQpCisgICovCitAQCAtMTQsNyArMTMsNyBAQAorICNpbmNsdWRlICJtdDYzODAuZHRzaSIKKyAKKyAvIHsKKy0JbW9kZWwgPSAiTWVkaWFUZWsgTVQ3NjIyIFJGQjEgYm9hcmQiOworKwltb2RlbCA9ICJNVDc2MjJfTVQ3NTMxIFJGQiI7CisgCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NjIyLXJmYjEiLCAibWVkaWF0ZWssbXQ3NjIyIjsKKyAKKyAJYWxpYXNlcyB7CitAQCAtMjMsNyArMjIsNyBAQAorIAorIAljaG9zZW4geworIAkJc3Rkb3V0LXBhdGggPSAic2VyaWFsMDoxMTUyMDBuOCI7CistCQlib290YXJncyA9ICJlYXJseWNvbj11YXJ0ODI1MCxtbWlvMzIsMHgxMTAwMjAwMCBzd2lvdGxiPTUxMiI7CisrCQlib290YXJncyA9ICJlYXJseWNvbj11YXJ0ODI1MCxtbWlvMzIsMHgxMTAwMjAwMCBjb25zb2xlPXR0eVMwLDExNTIwMG4xIHN3aW90bGI9NTEyIjsKKyAJfTsKKyAKKyAJY3B1cyB7CitAQCAtNDAsMjMgKzM5LDM2IEBACisgCisgCWdwaW8ta2V5cyB7CisgCQljb21wYXRpYmxlID0gImdwaW8ta2V5cyI7CistCQlwb2xsLWludGVydmFsID0gPDEwMD47CisgCisgCQlmYWN0b3J5IHsKKyAJCQlsYWJlbCA9ICJmYWN0b3J5IjsKKyAJCQlsaW51eCxjb2RlID0gPEJUTl8wPjsKKy0JCQlncGlvcyA9IDwmcGlvIDAgMD47CisrCQkJZ3Bpb3MgPSA8JnBpbyAwIEdQSU9fQUNUSVZFX0xPVz47CisgCQl9OworIAorIAkJd3BzIHsKKyAJCQlsYWJlbCA9ICJ3cHMiOworIAkJCWxpbnV4LGNvZGUgPSA8S0VZX1dQU19CVVRUT04+OworLQkJCWdwaW9zID0gPCZwaW8gMTAyIDA+OworKwkJCWdwaW9zID0gPCZwaW8gMTAyIEdQSU9fQUNUSVZFX0xPVz47CisrCQl9OworKwl9OworKworKwlsZWRzIHsKKysJCWNvbXBhdGlibGUgPSAiZ3Bpby1sZWRzIjsKKysKKysJCWdyZWVuIHsKKysJCQlsYWJlbCA9ICJicGktcjY0OnBpbzpncmVlbiI7CisrCQkJZ3Bpb3MgPSA8JnBpbyA4OSBHUElPX0FDVElWRV9ISUdIPjsKKysJCX07CisrCisrCQlyZWQgeworKwkJCWxhYmVsID0gImJwaS1yNjQ6cGlvOnJlZCI7CisrCQkJZ3Bpb3MgPSA8JnBpbyA4OCBHUElPX0FDVElWRV9ISUdIPjsKKyAJCX07CisgCX07CisgCisgCW1lbW9yeSB7CistCQlyZWcgPSA8MCAweDQwMDAwMDAwIDAgMHgyMDAwMDAwMD47CisrCQlyZWcgPSA8MCAweDQwMDAwMDAwIDAgMHg0MDAwMDAwMD47CisgCX07CisgCisgCXJlZ18xcDh2OiByZWd1bGF0b3ItMXA4diB7CitAQCAtMTAxLDIzICsxMTMsODIgQEAKKyB9OworIAorICZldGggeworLQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworLQlwaW5jdHJsLTAgPSA8JmV0aF9waW5zPjsKKyAJc3RhdHVzID0gIm9rYXkiOworKwlnbWFjMDogbWFjQDAgeworKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKysJCXJlZyA9IDwwPjsKKysJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworKworKwkJZml4ZWQtbGluayB7CisrCQkJc3BlZWQgPSA8MjUwMD47CisrCQkJZnVsbC1kdXBsZXg7CisrCQkJcGF1c2U7CisrCQl9OworKwl9OworIAorIAlnbWFjMTogbWFjQDEgeworIAkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKyAJCXJlZyA9IDwxPjsKKy0JCXBoeS1oYW5kbGUgPSA8JnBoeTU+OworKwkJcGh5LW1vZGUgPSAicmdtaWkiOworKworKwkJZml4ZWQtbGluayB7CisrCQkJc3BlZWQgPSA8MTAwMD47CisrCQkJZnVsbC1kdXBsZXg7CisrCQkJcGF1c2U7CisrCQl9OworIAl9OworIAorLQltZGlvLWJ1cyB7CisrCW1kaW86IG1kaW8tYnVzIHsKKyAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworIAkJI3NpemUtY2VsbHMgPSA8MD47CisgCistCQlwaHk1OiBldGhlcm5ldC1waHlANSB7CistCQkJcmVnID0gPDU+OworLQkJCXBoeS1tb2RlID0gInNnbWlpIjsKKysJCXN3aXRjaEAwIHsKKysJCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzUzMSI7CisrCQkJcmVnID0gPDA+OworKwkJCXJlc2V0LWdwaW9zID0gPCZwaW8gNTQgMD47CisrCisrCQkJcG9ydHMgeworKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKysJCQkJI3NpemUtY2VsbHMgPSA8MD47CisrCisrCQkJCXBvcnRAMCB7CisrCQkJCQlyZWcgPSA8MD47CisrCQkJCQlsYWJlbCA9ICJsYW4xIjsKKysJCQkJfTsKKysKKysJCQkJcG9ydEAxIHsKKysJCQkJCXJlZyA9IDwxPjsKKysJCQkJCWxhYmVsID0gImxhbjIiOworKwkJCQl9OworKworKwkJCQlwb3J0QDIgeworKwkJCQkJcmVnID0gPDI+OworKwkJCQkJbGFiZWwgPSAibGFuMyI7CisrCQkJCX07CisrCisrCQkJCXBvcnRAMyB7CisrCQkJCQlyZWcgPSA8Mz47CisrCQkJCQlsYWJlbCA9ICJsYW40IjsKKysJCQkJfTsKKysKKysJCQkJcG9ydEA0IHsKKysJCQkJCXJlZyA9IDw0PjsKKysJCQkJCWxhYmVsID0gIndhbiI7CisrCQkJCX07CisrCisrCQkJCXBvcnRANiB7CisrCQkJCQlyZWcgPSA8Nj47CisrCQkJCQlsYWJlbCA9ICJjcHUiOworKwkJCQkJZXRoZXJuZXQgPSA8JmdtYWMwPjsKKysJCQkJCXBoeS1tb2RlID0gIjI1MDBiYXNlLXgiOworKworKwkJCQkJZml4ZWQtbGluayB7CisrCQkJCQkJc3BlZWQgPSA8MjUwMD47CisrCQkJCQkJZnVsbC1kdXBsZXg7CisrCQkJCQkJcGF1c2U7CisrCQkJCQl9OworKwkJCQl9OworKwkJCX07CisgCQl9OworIAl9OworIH07CitAQCAtMTg1LDE1ICsyNTYsMjggQEAKKyAKKyAmcGNpZSB7CisgCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CistCXBpbmN0cmwtMCA9IDwmcGNpZTBfcGlucz47CisrCXBpbmN0cmwtMCA9IDwmcGNpZTBfcGlucz4sIDwmcGNpZTFfcGlucz47CisgCXN0YXR1cyA9ICJva2F5IjsKKyAKKyAJcGNpZUAwLDAgeworIAkJc3RhdHVzID0gIm9rYXkiOworIAl9OworKworKwlwY2llQDEsMCB7CisrCQlzdGF0dXMgPSAib2theSI7CisrCX07CisgfTsKKyAKKyAmcGlvIHsKKysJLyogQXR0ZW50aW9uOiBHUElPIDkwIGlzIHVzZWQgdG8gc3dpdGNoIGJldHdlZW4gUENJZUAxLDAgYW5kCisrCSAqIFNBVEEgZnVuY3Rpb25zLiBpLmUuIG91dHB1dC1oaWdoOiBQQ0llLCBvdXRwdXQtbG93OiBTQVRBCisrCSAqLworKwlhc21fc2VsIHsKKysJCWdwaW8taG9nOworKwkJZ3Bpb3MgPSA8OTAgR1BJT19BQ1RJVkVfSElHSD47CisrCQlvdXRwdXQtaGlnaDsKKysJfTsKKysKKyAJLyogZU1NQyBpcyBzaGFyZWQgcGluIHdpdGggcGFyYWxsZWwgTkFORCAqLworIAllbW1jX3BpbnNfZGVmYXVsdDogZW1tYy1waW5zLWRlZmF1bHQgeworIAkJbXV4IHsKK0BAIC00NjAsMTEgKzU0NCwxMSBAQAorIH07CisgCisgJnNhdGEgeworLQlzdGF0dXMgPSAib2theSI7CisrCXN0YXR1cyA9ICJkaXNhYmxlIjsKKyB9OworIAorICZzYXRhX3BoeSB7CistCXN0YXR1cyA9ICJva2F5IjsKKysJc3RhdHVzID0gImRpc2FibGUiOworIH07CisgCisgJnNwaTAgewpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzAwMDUtZHRzLW10NzYyOS1hZGQtZ3N3LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzAwMDUtZHRzLW10NzYyOS1hZGQtZ3N3LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3M2E2OWYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDAwNS1kdHMtbXQ3NjI5LWFkZC1nc3cucGF0Y2gKQEAgLTAsMCArMSw2NyBAQAorLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3NjI5LXJmYi5kdHMKKysrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL210NzYyOS1yZmIuZHRzCitAQCAtMTgsNiArMTgsNyBAQAorIAorIAljaG9zZW4geworIAkJc3Rkb3V0LXBhdGggPSAic2VyaWFsMDoxMTUyMDBuOCI7CisrCQlib290YXJncyA9ICJlYXJseWNvbj11YXJ0ODI1MCxtbWlvMzIsMHgxMTAwMjAwMCBjb25zb2xlPXR0eVMwLDExNTIwMG44IjsKKyAJfTsKKyAKKyAJZ3Bpby1rZXlzIHsKK0BAIC0zNiw2ICszNywxMyBAQAorIAkJfTsKKyAJfTsKKyAKKysJZ3N3OiBnc3dAMCB7CisrCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzUzeCI7CisrCQltZWRpYXRlayxldGhzeXMgPSA8JmV0aHN5cz47CisrCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKysJCSNzaXplLWNlbGxzID0gPDA+OworKwl9OworKworIAltZW1vcnlANDAwMDAwMDAgeworIAkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKyAJCXJlZyA9IDwweDQwMDAwMDAwIDB4MTAwMDAwMDA+OworQEAgLTY5LDYgKzc3LDcgQEAKKyAJZ21hYzA6IG1hY0AwIHsKKyAJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssZXRoLW1hYyI7CisgCQlyZWcgPSA8MD47CisrCQltdGQtbWFjLWFkZHJlc3MgPSA8JmZhY3RvcnkgMHgyYT47CisgCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKyAJCWZpeGVkLWxpbmsgeworIAkJCXNwZWVkID0gPDI1MDA+OworQEAgLTgwLDYgKzg5LDcgQEAKKyAJZ21hYzE6IG1hY0AxIHsKKyAJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssZXRoLW1hYyI7CisgCQlyZWcgPSA8MT47CisrCQltdGQtbWFjLWFkZHJlc3MgPSA8JmZhY3RvcnkgMHgyND47CisgCQlwaHktbW9kZSA9ICJnbWlpIjsKKyAJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworIAl9OworQEAgLTkzLDYgKzEwMywyNiBAQAorIAkJfTsKKyAJfTsKKyB9OworKworKyZnc3cgeworKwltZWRpYXRlayxtZGlvID0gPCZtZGlvPjsKKysJbWVkaWF0ZWsscG9ydG1hcCA9ICJsbGxsdyI7CisrCW1lZGlhdGVrLG1kaW9fbWFzdGVyX3Bpbm11eCA9IDwwPjsKKysJcmVzZXQtZ3Bpb3MgPSA8JnBpbyAyOCAwPjsKKysJaW50ZXJydXB0LXBhcmVudCA9IDwmcGlvPjsKKysJaW50ZXJydXB0cyA9IDw2IElSUV9UWVBFX0xFVkVMX0hJR0g+OworKwlzdGF0dXMgPSAib2theSI7CisrCisrCXBvcnQ2OiBwb3J0QDYgeworKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc1M3gtcG9ydCI7CisrCQlyZWcgPSA8Nj47CisrCQlwaHktbW9kZSA9ICJzZ21paSI7CisrCQlmaXhlZC1saW5rIHsKKysJCQlzcGVlZCA9IDwyNTAwPjsKKysJCQlmdWxsLWR1cGxleDsKKysJCX07CisrCX07CisrfTsKKyAKKyAmaTJjIHsKKyAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wMDA2LWR0cy1maXgtYnBpMi1jb25zb2xlLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzAwMDYtZHRzLWZpeC1icGkyLWNvbnNvbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcyNTExNwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wMDA2LWR0cy1maXgtYnBpMi1jb25zb2xlLnBhdGNoCkBAIC0wLDAgKzEsMTAgQEAKKy0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL210NzYyM24tYmFuYW5hcGktYnBpLXIyLmR0cworKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3NjIzbi1iYW5hbmFwaS1icGktcjIuZHRzCitAQCAtMTksNiArMTksNyBAQAorIAorIAljaG9zZW4geworIAkJc3Rkb3V0LXBhdGggPSAic2VyaWFsMjoxMTUyMDBuOCI7CisrCQlib290YXJncyA9ICJjb25zb2xlPXR0eVMyLDExNTIwMG44IjsKKyAJfTsKKyAKKyAJY3B1cyB7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDAwNi1kdHMtZml4LWJwaTY0LWNvbnNvbGUucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDAwNi1kdHMtZml4LWJwaTY0LWNvbnNvbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdhMmVhZQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wMDA2LWR0cy1maXgtYnBpNjQtY29uc29sZS5wYXRjaApAQCAtMCwwICsxLDExIEBACistLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210NzYyMi1iYW5hbmFwaS1icGktcjY0LmR0cworKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc2MjItYmFuYW5hcGktYnBpLXI2NC5kdHMKK0BAIC0yMiw3ICsyMiw3IEBACisgCisgCWNob3NlbiB7CisgCQlzdGRvdXQtcGF0aCA9ICJzZXJpYWwwOjExNTIwMG44IjsKKy0JCWJvb3RhcmdzID0gImVhcmx5Y29uPXVhcnQ4MjUwLG1taW8zMiwweDExMDAyMDAwIHN3aW90bGI9NTEyIjsKKysJCWJvb3RhcmdzID0gImVhcmx5Y29uPXVhcnQ4MjUwLG1taW8zMiwweDExMDAyMDAwIGNvbnNvbGU9dHR5UzAsMTE1MjAwbjEgc3dpb3RsYj01MTIiOworIAl9OworIAorIAljcHVzIHsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wMDEwLWR0cy1tdDc2MjktcmZiLWZpeC1maXJtd2FyZS1wYXJ0aXRpb24ucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDAxMC1kdHMtbXQ3NjI5LXJmYi1maXgtZmlybXdhcmUtcGFydGl0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMGExOWUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDAxMC1kdHMtbXQ3NjI5LXJmYi1maXgtZmlybXdhcmUtcGFydGl0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMTMgQEAKKy0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL210NzYyOS1yZmIuZHRzCisrKysgYi9hcmNoL2FybS9ib290L2R0cy9tdDc2MjktcmZiLmR0cworQEAgLTE2Myw4ICsxNjMsOSBAQAorIAkJCX07CisgCisgCQkJcGFydGl0aW9uQGIwMDAwIHsKKy0JCQkJbGFiZWwgPSAia2VybmVsIjsKKysJCQkJbGFiZWwgPSAiZmlybXdhcmUiOworIAkJCQlyZWcgPSA8MHhiMDAwMCAweGI1MDAwMD47CisrCQkJCWNvbXBhdGlibGUgPSAiZGVueCxmaXQiOworIAkJCX07CisgCQl9OworIAl9OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzAwMjAtZHRzLW10NzYyMi1lbmFibGUtbmV3LW10ay1zbmFuZC1mb3ItdWJpLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzAwMjAtZHRzLW10NzYyMi1lbmFibGUtbmV3LW10ay1zbmFuZC1mb3ItdWJpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhOWUwNjEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDAyMC1kdHMtbXQ3NjIyLWVuYWJsZS1uZXctbXRrLXNuYW5kLWZvci11YmkucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorLS0tIGEvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc2MjIuZHRzaQorKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc2MjIuZHRzaQorQEAgLTU2Nyw2ICs1NjcsMjAgQEAKKyAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisgCX07CisgCisrCXNuYW5kOiBzbmZpQDExMDBkMDAwIHsKKysJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NjIyLXNuYW5kIjsKKysJCXJlZyA9IDwwIDB4MTEwMGQwMDAgMCAweDEwMDA+LCA8MCAweDExMDBlMDAwIDAgMHgxMDAwPjsKKysJCXJlZy1uYW1lcyA9ICJuZmkiLCAiZWNjIjsKKysJCWludGVycnVwdHMgPSA8R0lDX1NQSSA5NiBJUlFfVFlQRV9MRVZFTF9MT1c+OworKwkJY2xvY2tzID0gPCZwZXJpY2ZnIENMS19QRVJJX05GSV9QRD4sCisrCQkJIDwmcGVyaWNmZyBDTEtfUEVSSV9TTkZJX1BEPiwKKysJCQkgPCZwZXJpY2ZnIENMS19QRVJJX05GSUVDQ19QRD47CisrCQljbG9jay1uYW1lcyA9ICJuZmlfY2xrIiwgInBhZF9jbGsiLCAiZWNjX2NsayI7CisrCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKysJCSNzaXplLWNlbGxzID0gPDA+OworKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKysJfTsKKysKKyAJbm9yX2ZsYXNoOiBzcGlAMTEwMTQwMDAgeworIAkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc2MjItbm9yIiwKKyAJCQkgICAgICJtZWRpYXRlayxtdDgxNzMtbm9yIjsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wMDIxLWR0cy1tdDc2MjItcmVtb3ZlLWNvb2xpbmctZGV2aWNlLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzAwMjEtZHRzLW10NzYyMi1yZW1vdmUtY29vbGluZy1kZXZpY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZjYzE0ZgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wMDIxLWR0cy1tdDc2MjItcmVtb3ZlLWNvb2xpbmctZGV2aWNlLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKKy0tLSBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3NjIyLmR0c2kKKysrKyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3NjIyLmR0c2kKK0BAIC0xNjcsMjUgKzE2Nyw2IEBACisgCQkJCX07CisgCQkJfTsKKyAKKy0JCQljb29saW5nLW1hcHMgeworLQkJCQltYXAwIHsKKy0JCQkJCXRyaXAgPSA8JmNwdV9wYXNzaXZlPjsKKy0JCQkJCWNvb2xpbmctZGV2aWNlID0gPCZjcHUwIFRIRVJNQUxfTk9fTElNSVQgVEhFUk1BTF9OT19MSU1JVD4sCistCQkJCQkJCSA8JmNwdTEgVEhFUk1BTF9OT19MSU1JVCBUSEVSTUFMX05PX0xJTUlUPjsKKy0JCQkJfTsKKy0KKy0JCQkJbWFwMSB7CistCQkJCQl0cmlwID0gPCZjcHVfYWN0aXZlPjsKKy0JCQkJCWNvb2xpbmctZGV2aWNlID0gPCZjcHUwIFRIRVJNQUxfTk9fTElNSVQgVEhFUk1BTF9OT19MSU1JVD4sCistCQkJCQkJCSA8JmNwdTEgVEhFUk1BTF9OT19MSU1JVCBUSEVSTUFMX05PX0xJTUlUPjsKKy0JCQkJfTsKKy0KKy0JCQkJbWFwMiB7CistCQkJCQl0cmlwID0gPCZjcHVfaG90PjsKKy0JCQkJCWNvb2xpbmctZGV2aWNlID0gPCZjcHUwIFRIRVJNQUxfTk9fTElNSVQgVEhFUk1BTF9OT19MSU1JVD4sCistCQkJCQkJCSA8JmNwdTEgVEhFUk1BTF9OT19MSU1JVCBUSEVSTUFMX05PX0xJTUlUPjsKKy0JCQkJfTsKKy0JCQl9OworIAkJfTsKKyAJfTsKKyAKKy0tIAorMi4yOS4yCisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wMTAwLWh3bmF0X0tjb25maWdfTWFrZWZpbGUucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDEwMC1od25hdF9LY29uZmlnX01ha2VmaWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUwYWM3YWIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDEwMC1od25hdF9LY29uZmlnX01ha2VmaWxlLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKKy0tLSBhL25ldC9LY29uZmlnCTIwMjAtMDQtMjkgMTc6MjU6NDkuNzUwNDQ0MDAwICswODAwCisrKysgYi9uZXQvS2NvbmZpZwkyMDIwLTA0LTI5IDE3OjQyOjQwLjk1MDQyNDAwMCArMDgwMAorQEAgLTQ1MSw2ICs0NTEsMTggQEAKKyAJICBtaWdyYXRpb24gb2YgVk1zIHdpdGggZGlyZWN0IGF0dGFjaGVkIFZGcyBieSBmYWlsaW5nIG92ZXIgdG8gdGhlCisgCSAgcGFyYXZpcnR1YWwgZGF0YXBhdGggd2hlbiB0aGUgVkYgaXMgdW5wbHVnZ2VkLgorIAorK2NvbmZpZyBIV19OQVQKKysJYm9vbCAiSFcgTkFUIHN1cHBvcnQiCisrCWRlZmF1bHQgbgorKwktLS1oZWxwLS0tCisrCSBUaGlzIGZlYXR1cmUgcHJvdmlkZXMgYSBmYXN0IHBhdGggdG8gc3VwcG9ydCBuZXR3b3JrIGxhbi93YW4gbmF0LgorKwkgSWYgeW91IG5lZWQgaHdfbmF0IGVuZ2luZSB0byByZWR1Y2UgY3B1IGxvYWRpbmcsIHBsZWFzZSBzYXkgWS4KKysKKysJICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJ3QgZGlyZWN0bHkgYWZmZWN0IHRoZQorKwkgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGwKKysJICB0aGUgcXVlc3Rpb25zIGFib3V0IE1lZGlhdGVrIEV0aGVybmV0IGRldmljZXMuIElmIHlvdSBzYXkgWSwKKysJICB5b3Ugd2lsbCBiZSBhc2tlZCBmb3IgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLgorKworIGVuZGlmICAgIyBpZiBORVQKKyAKKyAjIFVzZWQgYnkgYXJjaHMgdG8gdGVsbCB0aGF0IHRoZXkgc3VwcG9ydCBCUEYgSklUIGNvbXBpbGVyIHBsdXMgd2hpY2ggZmxhdm91ci4KKy0tLSBhL25ldC9NYWtlZmlsZQkyMDIwLTA0LTIzIDE2OjM2OjQ2LjAwMDAwMDAwMCArMDgwMAorKysrIGIvbmV0L01ha2VmaWxlCTIwMjAtMDQtMjkgMTc6NDI6NTguMTA2NDg3MDAwICswODAwCitAQCAtNjIsNiArNjIsOSBAQAorIG9iai0kKENPTkZJR182TE9XUEFOKQkJKz0gNmxvd3Bhbi8KKyBvYmotJChDT05GSUdfSUVFRTgwMjE1NCkJKz0gaWVlZTgwMjE1NC8KKyBvYmotJChDT05GSUdfTUFDODAyMTU0KQkJKz0gbWFjODAyMTU0LworK2lmZXEgKCQoQ09ORklHX0hXX05BVCkseSkKKytvYmoteSAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IG5hdC9mb2VfaG9vay8KKytlbmRpZgorIAorIGlmZXEgKCQoQ09ORklHX05FVCkseSkKKyBvYmotJChDT05GSUdfU1lTQ1RMKQkJKz0gc3lzY3RsX25ldC5vCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDEwMS1hZGQtbXRrLXdpZmktdXRpbGl0eS1yYnVzLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzAxMDEtYWRkLW10ay13aWZpLXV0aWxpdHktcmJ1cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTEzMjRiCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzAxMDEtYWRkLW10ay13aWZpLXV0aWxpdHktcmJ1cy5wYXRjaApAQCAtMCwwICsxLDExIEBACitkaWZmIC11ck4gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlCistLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZQkyMDIwLTA1LTA4IDEyOjE2OjUwLjAzMDkyMjc3NyArMDgwMAorKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvTWFrZWZpbGUJMjAyMC0wNS0wOCAxMjoxNjo1NS43MTg3NTUyMjMgKzA4MDAKK0BAIC0xMiw2ICsxMiw3IEBACisgb2JqLSQoQ09ORklHX1dMQU5fVkVORE9SX0lOVEVSU0lMKSArPSBpbnRlcnNpbC8KKyBvYmotJChDT05GSUdfV0xBTl9WRU5ET1JfTUFSVkVMTCkgKz0gbWFydmVsbC8KKyBvYmotJChDT05GSUdfV0xBTl9WRU5ET1JfTUVESUFURUspICs9IG1lZGlhdGVrLworK29iai15ICs9IHdpZmlfdXRpbGl0eS8KKyBvYmotJChDT05GSUdfV0xBTl9WRU5ET1JfUkFMSU5LKSArPSByYWxpbmsvCisgb2JqLSQoQ09ORklHX1dMQU5fVkVORE9SX1JFQUxURUspICs9IHJlYWx0ZWsvCisgb2JqLSQoQ09ORklHX1dMQU5fVkVORE9SX1JTSSkgKz0gcnNpLwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzAxMTEtbXQ3OTg2LXRybmctYWRkLXJuZy1zdXBwb3J0LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzAxMTEtbXQ3OTg2LXRybmctYWRkLXJuZy1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMTMyYTMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDExMS1tdDc5ODYtdHJuZy1hZGQtcm5nLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRnJvbSA2ZDRhODU4ZDZmN2RiMmE4NmY2NTEzYTU0M2ZlYjhmN2I4YThiNGMxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIk1pbmdtaW5nLlN1IiA8TWluZ21pbmcuU3VAbWVkaWF0ZWsuY29tPgorRGF0ZTogV2VkLCAzMCBKdW4gMjAyMSAxNjo1OTozMiArMDgwMAorU3ViamVjdDogW1BBVENIXSBtdDc5ODY6IHRybmc6IGFkZCBybmcgc3VwcG9ydAorCisxLiBBZGQgdHJuZyBjb21wYXRpYmxlIG5hbWUgZm9yIE1UNzk4NgorMi4gRml4IG10a19ybmdfd2FpdF9yZWFkeSgpIGZ1bmN0aW9uCisKK1NpZ25lZC1vZmYtYnk6IE1pbmdtaW5nLlN1IDxNaW5nbWluZy5TdUBtZWRpYXRlay5jb20+CistLS0KKyBkcml2ZXJzL2NoYXIvaHdfcmFuZG9tL210ay1ybmcuYyB8IDUgKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9tdGstcm5nLmMgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL210ay1ybmcuYworaW5kZXggZTY0OWJlNWE1Li40OTZhZGIwYTAgMTAwNjQ0CistLS0gYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL210ay1ybmcuYworKysrIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9tdGstcm5nLmMKK0BAIC0yMiw3ICsyMiw3IEBACisgI2RlZmluZSBSTkdfQVVUT1NVU1BFTkRfVElNRU9VVAkJMTAwCisgCisgI2RlZmluZSBVU0VDX1BPTEwJCQkyCistI2RlZmluZSBUSU1FT1VUX1BPTEwJCQkyMAorKyNkZWZpbmUgVElNRU9VVF9QT0xMCQkJNjAKKyAKKyAjZGVmaW5lIFJOR19DVFJMCQkJMHgwMAorICNkZWZpbmUgUk5HX0VOCQkJCUJJVCgwKQorQEAgLTc3LDcgKzc3LDcgQEAgc3RhdGljIGJvb2wgbXRrX3JuZ193YWl0X3JlYWR5KHN0cnVjdCBod3JuZyAqcm5nLCBib29sIHdhaXQpCisgCQlyZWFkbF9wb2xsX3RpbWVvdXRfYXRvbWljKHByaXYtPmJhc2UgKyBSTkdfQ1RSTCwgcmVhZHksCisgCQkJCQkgIHJlYWR5ICYgUk5HX1JFQURZLCBVU0VDX1BPTEwsCisgCQkJCQkgIFRJTUVPVVRfUE9MTCk7CistCXJldHVybiAhIXJlYWR5OworKwlyZXR1cm4gISEocmVhZHkgJiBSTkdfUkVBRFkpOworIH0KKyAKKyBzdGF0aWMgaW50IG10a19ybmdfcmVhZChzdHJ1Y3QgaHdybmcgKnJuZywgdm9pZCAqYnVmLCBzaXplX3QgbWF4LCBib29sIHdhaXQpCitAQCAtMTgxLDYgKzE4MSw3IEBAIHN0YXRpYyBVTklWRVJTQUxfREVWX1BNX09QUyhtdGtfcm5nX3BtX29wcywgbXRrX3JuZ19ydW50aW1lX3N1c3BlbmQsCisgI2VuZGlmCS8qIENPTkZJR19QTSAqLworIAorIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19ybmdfbWF0Y2hbXSA9IHsKKysJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtcm5nIiB9LAorIAl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzYyMy1ybmciIH0sCisgCXt9LAorIH07CistLSAKKzIuMTguMAorCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDIwMC1zaG93X21vZGVsX25hbWVfaW5fY3B1aW5mb19vbl9hcm02NC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wMjAwLXNob3dfbW9kZWxfbmFtZV9pbl9jcHVpbmZvX29uX2FybTY0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ZTVhYjYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDIwMC1zaG93X21vZGVsX25hbWVfaW5fY3B1aW5mb19vbl9hcm02NC5wYXRjaApAQCAtMCwwICsxLDE2IEBACitJbmRleDogbGludXgtNS40LjcwL2FyY2gvYXJtNjQva2VybmVsL2NwdWluZm8uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpbnV4LTUuNC43MC5vcmlnL2FyY2gvYXJtNjQva2VybmVsL2NwdWluZm8uYworKysrIGxpbnV4LTUuNC43MC9hcmNoL2FybTY0L2tlcm5lbC9jcHVpbmZvLmMKK0BAIC0xMzksOSArMTM5LDggQEAgc3RhdGljIGludCBjX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2bworIAkJICogInByb2Nlc3NvciIuICBHaXZlIGdsaWJjIHdoYXQgaXQgZXhwZWN0cy4KKyAJCSAqLworIAkJc2VxX3ByaW50ZihtLCAicHJvY2Vzc29yXHQ6ICVkXG4iLCBpKTsKKy0JCWlmIChjb21wYXQpCistCQkJc2VxX3ByaW50ZihtLCAibW9kZWwgbmFtZVx0OiBBUk12OCBQcm9jZXNzb3IgcmV2ICVkICglcylcbiIsCistCQkJCSAgIE1JRFJfUkVWSVNJT04obWlkciksIENPTVBBVF9FTEZfUExBVEZPUk0pOworKwkJc2VxX3ByaW50ZihtLCAibW9kZWwgbmFtZVx0OiBBUk12OCBQcm9jZXNzb3IgcmV2ICVkICglcylcbiIsCisrCQkJICAgTUlEUl9SRVZJU0lPTihtaWRyKSwgQ09NUEFUX0VMRl9QTEFURk9STSk7CisgCisgCQlzZXFfcHJpbnRmKG0sICJCb2dvTUlQU1x0OiAlbHUuJTAybHVcbiIsCisgCQkJICAgbG9vcHNfcGVyX2ppZmZ5IC8gKDUwMDAwMFVML0haKSwKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wMjI2LXBoeS1waHktbXRrLXRwaHktQWRkLWhpZnN5cy1zdXBwb3J0LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzAyMjYtcGh5LXBoeS1tdGstdHBoeS1BZGQtaGlmc3lzLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI2NDdlOAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wMjI2LXBoeS1waHktbXRrLXRwaHktQWRkLWhpZnN5cy1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsNjYgQEAKK0Zyb20gMjhmOWE1ZTJhM2Y1NDQxYWI1NTk0NjY5ZWQ4MmRhMTFlMzIyNzdhOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtyaXN0aWFuIEV2ZW5zZW4gPGtyaXN0aWFuLmV2ZW5zZW5AZ21haWwuY29tPgorRGF0ZTogTW9uLCAzMCBBcHIgMjAxOCAxNDozODowMSArMDIwMAorU3ViamVjdDogW1BBVENIXSBwaHk6IHBoeS1tdGstdHBoeTogQWRkIGhpZnN5cy1zdXBwb3J0CisKKy0tLQorIGRyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstdHBoeS5jIHwgMjAgKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKQorCistLS0gYS9kcml2ZXJzL3BoeS9tZWRpYXRlay9waHktbXRrLXRwaHkuYworKysrIGIvZHJpdmVycy9waHkvbWVkaWF0ZWsvcGh5LW10ay10cGh5LmMKK0BAIC0xNSw2ICsxNSw4IEBACisgI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorICNpbmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+CisgI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+CisrI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorIAorIC8qIHZlcnNpb24gVjEgc3ViLWJhbmtzIG9mZnNldCBiYXNlIGFkZHJlc3MgKi8KKyAvKiBiYW5rcyBzaGFyZWQgYnkgbXVsdGlwbGUgcGh5cyAqLworQEAgLTI2Myw2ICsyNjUsOSBAQAorICNkZWZpbmUgUkdfQ0RSX0JJUkxURDBfR0VOM19NU0sJCUdFTk1BU0soNCwgMCkKKyAjZGVmaW5lIFJHX0NEUl9CSVJMVEQwX0dFTjNfVkFMKHgpCSgweDFmICYgKHgpKQorIAorKyNkZWZpbmUgSElGX1NZU0NGRzEJCQkweDE0CisrI2RlZmluZSBISUZfU1lTQ0ZHMV9QSFkyX01BU0sJCSgweDMgPDwgMjApCisrCisgZW51bSBtdGtfcGh5X3ZlcnNpb24geworIAlNVEtfUEhZX1YxID0gMSwKKyAJTVRLX1BIWV9WMiwKK0BAIC0zMTAsNiArMzE1LDcgQEAgc3RydWN0IG10a190cGh5IHsKKyAJc3RydWN0IGNsayAqdTNwaHlhX3JlZjsJLyogcmVmZXJlbmNlIGNsb2NrIG9mIHVzYjMgYW5vbG9nIHBoeSAqLworIAljb25zdCBzdHJ1Y3QgbXRrX3BoeV9wZGF0YSAqcGRhdGE7CisgCXN0cnVjdCBtdGtfcGh5X2luc3RhbmNlICoqcGh5czsKKysJc3RydWN0IHJlZ21hcCAqaGlmOworIAlpbnQgbnBoeXM7CisgCWludCBzcmNfcmVmX2NsazsgLyogTUhaLCByZWZlcmVuY2UgY2xvY2sgZm9yIHNsZXcgcmF0ZSBjYWxpYnJhdGUgKi8KKyAJaW50IHNyY19jb2VmOyAvKiBjb2VmZmljaWVudCBmb3Igc2xldyByYXRlIGNhbGlicmF0ZSAqLworQEAgLTYyOSw2ICs2MzUsMTAgQEAgc3RhdGljIHZvaWQgcGNpZV9waHlfaW5zdGFuY2VfaW5pdChzdHJ1YworIAlpZiAodHBoeS0+cGRhdGEtPnZlcnNpb24gIT0gTVRLX1BIWV9WMSkKKyAJCXJldHVybjsKKyAKKysJaWYgKHRwaHktPmhpZikKKysJCXJlZ21hcF91cGRhdGVfYml0cyh0cGh5LT5oaWYsIEhJRl9TWVNDRkcxLAorKwkJCQkgICBISUZfU1lTQ0ZHMV9QSFkyX01BU0ssIDApOworKworIAl0bXAgPSByZWFkbCh1M19iYW5rcy0+cGh5YSArIFUzUF9VM19QSFlBX0RBX1JFRzApOworIAl0bXAgJj0gfihQM0FfUkdfWFRBTF9FWFRfUEUxSCB8IFAzQV9SR19YVEFMX0VYVF9QRTJIKTsKKyAJdG1wIHw9IFAzQV9SR19YVEFMX0VYVF9QRTFIX1ZBTCgweDIpIHwgUDNBX1JHX1hUQUxfRVhUX1BFMkhfVkFMKDB4Mik7CitAQCAtMTExNCw2ICsxMTI0LDE2IEBAIHN0YXRpYyBpbnQgbXRrX3RwaHlfcHJvYmUoc3RydWN0IHBsYXRmb3IKKyAJCSZ0cGh5LT5zcmNfcmVmX2Nsayk7CisgCWRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXYsICJtZWRpYXRlayxzcmMtY29lZiIsICZ0cGh5LT5zcmNfY29lZik7CisgCisrCWlmIChvZl9maW5kX3Byb3BlcnR5KG5wLCAibWVkaWF0ZWsscGh5LXN3aXRjaCIsIE5VTEwpKSB7CisrCQl0cGh5LT5oaWYgPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKG5wLAorKwkJCQkJCQkgICAgIm1lZGlhdGVrLHBoeS1zd2l0Y2giKTsKKysJCWlmIChJU19FUlIodHBoeS0+aGlmKSkgeworKwkJCWRldl9lcnIoJnBkZXYtPmRldiwKKysJCQkJIm1pc3NpbmcgXCJtZWRpYXRlayxwaHktc3dpdGNoXCIgcGhhbmRsZVxuIik7CisrCQkJcmV0dXJuIFBUUl9FUlIodHBoeS0+aGlmKTsKKysJCX0KKysJfQorKworIAlwb3J0ID0gMDsKKyAJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShucCwgY2hpbGRfbnApIHsKKyAJCXN0cnVjdCBtdGtfcGh5X2luc3RhbmNlICppbnN0YW5jZTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wMjI3LWFybS1kdHMtQWRkLVVuaWVsZWMtVTc2MjMtRFRTLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzAyMjctYXJtLWR0cy1BZGQtVW5pZWxlYy1VNzYyMy1EVFMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NiMWRhYgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wMjI3LWFybS1kdHMtQWRkLVVuaWVsZWMtVTc2MjMtRFRTLnBhdGNoCkBAIC0wLDAgKzEsMzg3IEBACitGcm9tIDAwNGViMjRlOTM5YjViMzFmODI4MzMzZjM3ZmI1Y2IyYTg3N2Q2ZjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLcmlzdGlhbiBFdmVuc2VuIDxrcmlzdGlhbi5ldmVuc2VuQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgMTcgSnVuIDIwMTggMTQ6NDE6NDcgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gYXJtOiBkdHM6IEFkZCBVbmllbGVjIFU3NjIzIERUUworCistLS0KKyBhcmNoL2FybS9ib290L2R0cy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCisgLi4uL2R0cy9tdDc2MjNhLXVuaWVsZWMtdTc2MjMtMDItZW1tYy01MTJtLmR0cyAgICAgfCAgMTggKworIC4uLi9ib290L2R0cy9tdDc2MjNhLXVuaWVsZWMtdTc2MjMtMDItZW1tYy5kdHNpICAgIHwgMzY2ICsrKysrKysrKysrKysrKysrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgMzg1IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC9hcm0vYm9vdC9kdHMvbXQ3NjIzYS11bmllbGVjLXU3NjIzLTAyLWVtbWMtNTEybS5kdHMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC9hcm0vYm9vdC9kdHMvbXQ3NjIzYS11bmllbGVjLXU3NjIzLTAyLWVtbWMuZHRzaQorCistLS0gYS9hcmNoL2FybS9ib290L2R0cy9NYWtlZmlsZQorKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvTWFrZWZpbGUKK0BAIC0xMjcyLDYgKzEyNzIsNyBAQCBkdGItJChDT05GSUdfQVJDSF9NRURJQVRFSykgKz0gXAorIAltdDc2MjNhLXJmYi1uYW5kLmR0YiBcCisgCW10NzYyM24tcmZiLWVtbWMuZHRiIFwKKyAJbXQ3NjIzbi1iYW5hbmFwaS1icGktcjIuZHRiIFwKKysJbXQ3NjIzYS11bmllbGVjLXU3NjIzLTAyLWVtbWMtNTEybS5kdGIgXAorIAltdDc2MjktcmZiLmR0YiBcCisgCW10ODEyNy1tb29zZS5kdGIgXAorIAltdDgxMzUtZXZicDEuZHRiCistLS0gL2Rldi9udWxsCisrKysgYi9hcmNoL2FybS9ib290L2R0cy9tdDc2MjNhLXVuaWVsZWMtdTc2MjMtMDItZW1tYy01MTJtLmR0cworQEAgLTAsMCArMSwxOCBAQAorKy8qCisrICogQ29weXJpZ2h0IDIwMTggS3Jpc3RpYW4gRXZlbnNlbiA8a3Jpc3RpYW4uZXZlbnNlbkBnbWFpbC5jb20+CisrICoKKysgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjArIE9SIE1JVCkKKysgKi8KKysKKysvZHRzLXYxLzsKKysjaW5jbHVkZSAibXQ3NjIzYS11bmllbGVjLXU3NjIzLTAyLWVtbWMuZHRzaSIKKysKKysvIHsKKysJbW9kZWwgPSAiVW5pRWxlYyBVNzYyMy0wMiBlTU1DICg1MTJNIFJBTSkiOworKwljb21wYXRpYmxlID0gInVuaWVsZWMsdTc2MjMtMDItZW1tYy01MTJtIiwgInVuaWVsZWMsdTc2MjMtMDItZW1tYyIsICJtZWRpYXRlayxtdDc2MjMiOworKworKwltZW1vcnlAODAwMDAwMDAgeworKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKysJCXJlZyA9IDwwIDB4ODAwMDAwMDAgMCAweDIwMDAwMDAwPjsKKysJfTsKKyt9OworLS0tIC9kZXYvbnVsbAorKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3NjIzYS11bmllbGVjLXU3NjIzLTAyLWVtbWMuZHRzaQorQEAgLTAsMCArMSwzNDAgQEAKKysvKgorKyAqIENvcHlyaWdodCAyMDE4IEtyaXN0aWFuIEV2ZW5zZW4gPGtyaXN0aWFuLmV2ZW5zZW5AZ21haWwuY29tPgorKyAqCisrICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wKyBPUiBNSVQpCisrICovCisrCisrI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2lucHV0L2lucHV0Lmg+CisrI2luY2x1ZGUgIm10NzYyMy5kdHNpIgorKyNpbmNsdWRlICJtdDYzMjMuZHRzaSIKKysKKysvIHsKKysJY29tcGF0aWJsZSA9ICJ1bmllbGVjLHU3NjIzLTAyLWVtbWMiLCAibWVkaWF0ZWssbXQ3NjIzIjsKKysKKysJYWxpYXNlcyB7CisrCQlzZXJpYWwyID0gJnVhcnQyOworKwl9OworKworKwljaG9zZW4geworKwkJYm9vdGFyZ3MgPSAicm9vdD0vZGV2L21tY2JsazBwMiByb290ZnN0eXBlPXNxdWFzaGZzLGYyZnMgY29uc29sZT10dHlTMCwxMTUyMDAgYmxrZGV2cGFydHM9bW1jYmxrMDozTUA2TShyZWNvdmVyeSksMjU2TUA5TShyb290KSI7CisrCQlzdGRvdXQtcGF0aCA9ICJzZXJpYWwyOjExNTIwMG44IjsKKysJfTsKKysKKysJY3B1cyB7CisrCQljcHVAMCB7CisrCQkJcHJvYy1zdXBwbHkgPSA8Jm10NjMyM192cHJvY19yZWc+OworKwkJfTsKKysKKysJCWNwdUAxIHsKKysJCQlwcm9jLXN1cHBseSA9IDwmbXQ2MzIzX3Zwcm9jX3JlZz47CisrCQl9OworKworKwkJY3B1QDIgeworKwkJCXByb2Mtc3VwcGx5ID0gPCZtdDYzMjNfdnByb2NfcmVnPjsKKysJCX07CisrCisrCQljcHVAMyB7CisrCQkJcHJvYy1zdXBwbHkgPSA8Jm10NjMyM192cHJvY19yZWc+OworKwkJfTsKKysJfTsKKysKKysJcmVnXzFwOHY6IHJlZ3VsYXRvci0xcDh2IHsKKysJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKysJCXJlZ3VsYXRvci1uYW1lID0gImZpeGVkLTEuOFYiOworKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisrCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKysJCXJlZ3VsYXRvci1ib290LW9uOworKwkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKysJfTsKKysKKysJcmVnXzNwM3Y6IHJlZ3VsYXRvci0zcDN2IHsKKysJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWZpeGVkIjsKKysJCXJlZ3VsYXRvci1uYW1lID0gImZpeGVkLTMuM1YiOworKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisrCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKysJCXJlZ3VsYXRvci1ib290LW9uOworKwkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKysJfTsKKysKKysJcmVnXzV2OiByZWd1bGF0b3ItNXYgeworKwkJY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItZml4ZWQiOworKwkJcmVndWxhdG9yLW5hbWUgPSAiZml4ZWQtNVYiOworKwkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8NTAwMDAwMD47CisrCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDw1MDAwMDAwPjsKKysJCXJlZ3VsYXRvci1ib290LW9uOworKwkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKysJfTsKKysKKysJZ3Bpby1rZXlzIHsKKysJCWNvbXBhdGlibGUgPSAiZ3Bpby1rZXlzIjsKKysJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisrCQlwaW5jdHJsLTAgPSA8JmtleV9waW5zX2E+OworKworKwkJZmFjdG9yeSB7CisrCQkJbGFiZWwgPSAiZmFjdG9yeSI7CisrCQkJbGludXgsY29kZSA9IDxLRVlfUkVTVEFSVD47CisrCQkJZ3Bpb3MgPSA8JnBpbyAyNTYgR1BJT19BQ1RJVkVfTE9XPjsKKysJCX07CisrCX07CisrCisrCWxlZHMgeworKwkJY29tcGF0aWJsZSA9ICJncGlvLWxlZHMiOworKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKysJCXBpbmN0cmwtMCA9IDwmbGVkX3BpbnNfdW5pZWxlYz47CisrCisrCQlsZWQzIHsKKysJCQlsYWJlbCA9ICJ1NzYyMy0wMTpncmVlbjpsZWQzIjsKKysJCQlncGlvcyA9IDwmcGlvIDE0IEdQSU9fQUNUSVZFX0xPVz47CisrCQl9OworKworKwkJbGVkNCB7CisrCQkJbGFiZWwgPSAidTc2MjMtMDE6Z3JlZW46bGVkNCI7CisrCQkJZ3Bpb3MgPSA8JnBpbyAxNSBHUElPX0FDVElWRV9MT1c+OworKwkJfTsKKysJfTsKKyt9OworKworKyZjcnlwdG8geworKwlzdGF0dXMgPSAib2theSI7CisrfTsKKysKKysmZXRoIHsKKysJc3RhdHVzID0gIm9rYXkiOworKworKwlnbWFjMDogbWFjQDAgeworKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxldGgtbWFjIjsKKysJCXJlZyA9IDwwPjsKKysJCXBoeS1tb2RlID0gInRyZ21paSI7CisrCisrCQlmaXhlZC1saW5rIHsKKysJCQlzcGVlZCA9IDwxMDAwPjsKKysJCQlmdWxsLWR1cGxleDsKKysJCQlwYXVzZTsKKysJCX07CisrCX07CisrCisrCW1kaW86IG1kaW8tYnVzIHsKKysJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworKwkJI3NpemUtY2VsbHMgPSA8MD47CisrCisrCQltdDc1MzA6IHN3aXRjaEAwIHsKKysJCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzUzMCI7CisrCQl9OworKwl9OworK307CisrCisrJm10NzUzMCB7CisrCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NTMwIjsKKysJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisrCSNzaXplLWNlbGxzID0gPDA+OworKwlyZWcgPSA8MD47CisrCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisrCW1lZGlhdGVrLG1jbTsKKysJcmVzZXRzID0gPCZldGhzeXMgMj47CisrCXJlc2V0LW5hbWVzID0gIm1jbSI7CisrCWNvcmUtc3VwcGx5ID0gPCZtdDYzMjNfdnBhX3JlZz47CisrCWlvLXN1cHBseSA9IDwmbXQ2MzIzX3ZlbWMzdjNfcmVnPjsKKysKKysJZHNhLG1paS1idXMgPSA8Jm1kaW8+OworKworKwlwb3J0cyB7CisrCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKysJCSNzaXplLWNlbGxzID0gPDA+OworKwkJcmVnID0gPDA+OworKworKwkJcG9ydEAwIHsKKysJCQlyZWcgPSA8MD47CisrCQkJbGFiZWwgPSAibGFuMCI7CisrCQkJY3B1ID0gPCZjcHVfcG9ydDA+OworKwkJfTsKKysKKysJCXBvcnRAMSB7CisrCQkJcmVnID0gPDE+OworKwkJCWxhYmVsID0gImxhbjEiOworKwkJCWNwdSA9IDwmY3B1X3BvcnQwPjsKKysJCX07CisrCisrCQlwb3J0QDIgeworKwkJCXJlZyA9IDwyPjsKKysJCQlsYWJlbCA9ICJsYW4yIjsKKysJCQljcHUgPSA8JmNwdV9wb3J0MD47CisrCQl9OworKworKwkJcG9ydEAzIHsKKysJCQlyZWcgPSA8Mz47CisrCQkJbGFiZWwgPSAibGFuMyI7CisrCQkJY3B1ID0gPCZjcHVfcG9ydDA+OworKwkJfTsKKysKKysJCXBvcnRANCB7CisrCQkJcmVnID0gPDQ+OworKwkJCWxhYmVsID0gIndhbiI7CisrCQkJY3B1ID0gPCZjcHVfcG9ydDA+OworKwkJfTsKKysKKysJCWNwdV9wb3J0MDogcG9ydEA2IHsKKysJCQlyZWcgPSA8Nj47CisrCQkJbGFiZWwgPSAiY3B1IjsKKysJCQlldGhlcm5ldCA9IDwmZ21hYzA+OworKwkJCXBoeS1tb2RlID0gInRyZ21paSI7CisrCisrCQkJZml4ZWQtbGluayB7CisrCQkJCXNwZWVkID0gPDEwMDA+OworKwkJCQlmdWxsLWR1cGxleDsKKysJCQl9OworKwkJfTsKKysJfTsKKyt9OworKworKyZtbWMwIHsKKysJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgInN0YXRlX3VocyI7CisrCXBpbmN0cmwtMCA9IDwmbW1jMF9waW5zX2RlZmF1bHQ+OworKwlwaW5jdHJsLTEgPSA8Jm1tYzBfcGluc191aHM+OworKwlzdGF0dXMgPSAib2theSI7CisrCWJ1cy13aWR0aCA9IDw4PjsKKysJbWF4LWZyZXF1ZW5jeSA9IDw1MDAwMDAwMD47CisrCWNhcC1tbWMtaGlnaHNwZWVkOworKwl2bW1jLXN1cHBseSA9IDwmcmVnXzNwM3Y+OworKwl2cW1tYy1zdXBwbHkgPSA8JnJlZ18xcDh2PjsKKysJbm9uLXJlbW92YWJsZTsKKyt9OworKworKyZwaW8geworKwlrZXlfcGluc19hOiBrZXlzLWFsdCB7CisrCQlwaW5zLWtleXMgeworKwkJCXBpbm11eCA9IDxNVDc2MjNfUElOXzI1Nl9HUElPMjU2X0ZVTkNfR1BJTzI1Nj4sCisrCQkJCSA8TVQ3NjIzX1BJTl8yNTdfR1BJTzI1N19GVU5DX0dQSU8yNTc+OworKwkJCWlucHV0LWVuYWJsZTsKKysJCX07CisrCX07CisrCisrCWxlZF9waW5zX3VuaWVsZWM6IGxlZHMtdW5pZWxlYyB7CisrCQlwaW5zLWxlZHMgeworKwkJCXBpbm11eCA9IDxNVDc2MjNfUElOXzE0X0dQSU8xNF9GVU5DX0dQSU8xND4sCisrCQkJCSA8TVQ3NjIzX1BJTl8xNV9HUElPMTVfRlVOQ19HUElPMTU+OworKwkJfTsKKysJfTsKKysKKysJbW1jMF9waW5zX2RlZmF1bHQ6IG1tYzBkZWZhdWx0IHsKKysJCXBpbnNfY21kX2RhdCB7CisrCQkJcGlubXV4ID0gPE1UNzYyM19QSU5fMTExX01TREMwX0RBVDdfRlVOQ19NU0RDMF9EQVQ3PiwKKysJCQkJIDxNVDc2MjNfUElOXzExMl9NU0RDMF9EQVQ2X0ZVTkNfTVNEQzBfREFUNj4sCisrCQkJCSA8TVQ3NjIzX1BJTl8xMTNfTVNEQzBfREFUNV9GVU5DX01TREMwX0RBVDU+LAorKwkJCQkgPE1UNzYyM19QSU5fMTE0X01TREMwX0RBVDRfRlVOQ19NU0RDMF9EQVQ0PiwKKysJCQkJIDxNVDc2MjNfUElOXzExOF9NU0RDMF9EQVQzX0ZVTkNfTVNEQzBfREFUMz4sCisrCQkJCSA8TVQ3NjIzX1BJTl8xMTlfTVNEQzBfREFUMl9GVU5DX01TREMwX0RBVDI+LAorKwkJCQkgPE1UNzYyM19QSU5fMTIwX01TREMwX0RBVDFfRlVOQ19NU0RDMF9EQVQxPiwKKysJCQkJIDxNVDc2MjNfUElOXzEyMV9NU0RDMF9EQVQwX0ZVTkNfTVNEQzBfREFUMD4sCisrCQkJCSA8TVQ3NjIzX1BJTl8xMTZfTVNEQzBfQ01EX0ZVTkNfTVNEQzBfQ01EPjsKKysJCQlpbnB1dC1lbmFibGU7CisrCQkJYmlhcy1wdWxsLXVwOworKwkJfTsKKysKKysJCXBpbnNfY2xrIHsKKysJCQlwaW5tdXggPSA8TVQ3NjIzX1BJTl8xMTdfTVNEQzBfQ0xLX0ZVTkNfTVNEQzBfQ0xLPjsKKysJCQliaWFzLXB1bGwtZG93bjsKKysJCX07CisrCisrCQlwaW5zX3JzdCB7CisrCQkJcGlubXV4ID0gPE1UNzYyM19QSU5fMTE1X01TREMwX1JTVEJfRlVOQ19NU0RDMF9SU1RCPjsKKysJCQliaWFzLXB1bGwtdXA7CisrCQl9OworKwl9OworKworKwltbWMwX3BpbnNfdWhzOiBtbWMwIHsKKysJCXBpbnNfY21kX2RhdCB7CisrCQkJcGlubXV4ID0gPE1UNzYyM19QSU5fMTExX01TREMwX0RBVDdfRlVOQ19NU0RDMF9EQVQ3PiwKKysJCQkJIDxNVDc2MjNfUElOXzExMl9NU0RDMF9EQVQ2X0ZVTkNfTVNEQzBfREFUNj4sCisrCQkJCSA8TVQ3NjIzX1BJTl8xMTNfTVNEQzBfREFUNV9GVU5DX01TREMwX0RBVDU+LAorKwkJCQkgPE1UNzYyM19QSU5fMTE0X01TREMwX0RBVDRfRlVOQ19NU0RDMF9EQVQ0PiwKKysJCQkJIDxNVDc2MjNfUElOXzExOF9NU0RDMF9EQVQzX0ZVTkNfTVNEQzBfREFUMz4sCisrCQkJCSA8TVQ3NjIzX1BJTl8xMTlfTVNEQzBfREFUMl9GVU5DX01TREMwX0RBVDI+LAorKwkJCQkgPE1UNzYyM19QSU5fMTIwX01TREMwX0RBVDFfRlVOQ19NU0RDMF9EQVQxPiwKKysJCQkJIDxNVDc2MjNfUElOXzEyMV9NU0RDMF9EQVQwX0ZVTkNfTVNEQzBfREFUMD4sCisrCQkJCSA8TVQ3NjIzX1BJTl8xMTZfTVNEQzBfQ01EX0ZVTkNfTVNEQzBfQ01EPjsKKysJCQlpbnB1dC1lbmFibGU7CisrCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzJtQT47CisrCQkJYmlhcy1wdWxsLXVwID0gPE1US19QVVBEX1NFVF9SMVIwXzAxPjsKKysJCX07CisrCisrCQlwaW5zX2NsayB7CisrCQkJcGlubXV4ID0gPE1UNzYyM19QSU5fMTE3X01TREMwX0NMS19GVU5DX01TREMwX0NMSz47CisrCQkJZHJpdmUtc3RyZW5ndGggPSA8TVRLX0RSSVZFXzJtQT47CisrCQkJYmlhcy1wdWxsLWRvd24gPSA8TVRLX1BVUERfU0VUX1IxUjBfMDE+OworKwkJfTsKKysKKysJCXBpbnNfcnN0IHsKKysJCQlwaW5tdXggPSA8TVQ3NjIzX1BJTl8xMTVfTVNEQzBfUlNUQl9GVU5DX01TREMwX1JTVEI+OworKwkJCWJpYXMtcHVsbC11cDsKKysJCX07CisrCX07CisrCisrCXBjaWVfZGVmYXVsdDogcGNpZV9waW5fZGVmYXVsdCB7CisrCQlwaW5zX2NtZF9kYXQgeworKwkJCXBpbm11eCA9IDxNVDc2MjNfUElOXzIwOF9BVURfRVhUX0NLMV9GVU5DX1BDSUUwX1BFUlNUX04+LAorKwkJCQkgPE1UNzYyM19QSU5fMjA5X0FVRF9FWFRfQ0syX0ZVTkNfUENJRTFfUEVSU1RfTj47CisrCQkJYmlhcy1kaXNhYmxlOworKwkJfTsKKysJfTsKKyt9OworKworKyZwd20geworKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworKwlwaW5jdHJsLTAgPSA8JnB3bV9waW5zX2E+OworKwlzdGF0dXMgPSAib2theSI7CisrfTsKKysKKysmcHdyYXAgeworKwltdDYzMjMgeworKwkJbXQ2MzIzbGVkOiBsZWQgeworKwkJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ2MzIzLWxlZCI7CisrCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisrCQkJI3NpemUtY2VsbHMgPSA8MD47CisrCisrCQkJbGVkQDAgeworKwkJCQlyZWcgPSA8MD47CisrCQkJCWxhYmVsID0gImxlZDAiOworKwkJCX07CisrCQl9OworKwl9OworK307CisrCisrJnVhcnQyIHsKKysJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKysJcGluY3RybC0wID0gPCZ1YXJ0Ml9waW5zX2I+OworKwlzdGF0dXMgPSAib2theSI7CisrfTsKKysKKysmdXNiMSB7CisrCXZ1c2IzMy1zdXBwbHkgPSA8JnJlZ18zcDN2PjsKKysJdmJ1cy1zdXBwbHkgPSA8JnJlZ18zcDN2PjsKKysJc3RhdHVzID0gIm9rYXkiOworK307CisrCisrJnUzcGh5MSB7CisrCXN0YXR1cyA9ICJva2F5IjsKKyt9OworKworKyZ1M3BoeTIgeworKwlzdGF0dXMgPSAib2theSI7CisrCW1lZGlhdGVrLHBoeS1zd2l0Y2ggPSA8JmhpZnN5cz47CisrfTsKKysKKysmcGNpZSB7CisrCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisrCXBpbmN0cmwtMCA9IDwmcGNpZV9kZWZhdWx0PjsKKysJc3RhdHVzID0gIm9rYXkiOworKworKwlwY2llQDEsMCB7CisrCQlzdGF0dXMgPSAib2theSI7CisrCX07CisrCisrCXBjaWVAMiwwIHsKKysJCXN0YXR1cyA9ICJva2F5IjsKKysJfTsKKyt9OworKworKyZwY2llMV9waHkgeworKwlzdGF0dXMgPSAib2theSI7CisrfTsKKysKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wMzAxLW10ZC1tdGstZWNjLW1vdmUtbXRrLWVjYy1oZWFkZXItZmlsZS10by1pbmNsdWRlLW10ZC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wMzAxLW10ZC1tdGstZWNjLW1vdmUtbXRrLWVjYy1oZWFkZXItZmlsZS10by1pbmNsdWRlLW10ZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWFiMzM5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzAzMDEtbXRkLW10ay1lY2MtbW92ZS1tdGstZWNjLWhlYWRlci1maWxlLXRvLWluY2x1ZGUtbXRkLnBhdGNoCkBAIC0wLDAgKzEsMTM5IEBACitGcm9tIGEyNDc5ZGMyNTRlYmUzMWM4NGZiY2ZkYTczZjM1ZTIzMjE1NzY0OTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBYaWFuZ3NoZW5nIEhvdSA8eGlhbmdzaGVuZy5ob3VAbWVkaWF0ZWsuY29tPgorRGF0ZTogVHVlLCAxOSBNYXIgMjAxOSAxMzo1NzozOCArMDgwMAorU3ViamVjdDogW1BBVENIIDEvNl0gbXRkOiBtdGsgZWNjOiBtb3ZlIG10ayBlY2MgaGVhZGVyIGZpbGUgdG8gaW5jbHVkZS9tdGQKKworQ2hhbmdlLUlkOiBJOGRjMWQzMGUyMWI0MGQ2OGVmNWVmZDk1ODcwMTJmODI5NzAxNTZhNQorU2lnbmVkLW9mZi1ieTogWGlhbmdzaGVuZyBIb3UgPHhpYW5nc2hlbmcuaG91QG1lZGlhdGVrLmNvbT4KKy0tLQorIGRyaXZlcnMvbXRkL25hbmQvcmF3L210a19lY2MuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgMyArLS0KKyBkcml2ZXJzL210ZC9uYW5kL3Jhdy9tdGtfbmFuZC5jICAgICAgICAgICAgICAgICAgICAgICB8IDIgKy0KKyB7ZHJpdmVycy9tdGQvbmFuZC9yYXcgPT4gaW5jbHVkZS9saW51eC9tdGR9L210a19lY2MuaCB8IDAKKyAzIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyByZW5hbWUge2RyaXZlcnMvbXRkL25hbmQvcmF3ID0+IGluY2x1ZGUvbGludXgvbXRkfS9tdGtfZWNjLmggKDEwMCUpCisKKy0tLSBhL2RyaXZlcnMvbXRkL25hbmQvcmF3L210a19lY2MuYworKysrIGIvZHJpdmVycy9tdGQvbmFuZC9yYXcvbXRrX2VjYy5jCitAQCAtMTUsOCArMTUsNyBAQAorICNpbmNsdWRlIDxsaW51eC9vZi5oPgorICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorLQorLSNpbmNsdWRlICJtdGtfZWNjLmgiCisrI2luY2x1ZGUgPGxpbnV4L210ZC9tdGtfZWNjLmg+CisgCisgI2RlZmluZSBFQ0NfSURMRV9NQVNLCQlCSVQoMCkKKyAjZGVmaW5lIEVDQ19JUlFfRU4JCUJJVCgwKQorLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9yYXcvbXRrX25hbmQuYworKysrIGIvZHJpdmVycy9tdGQvbmFuZC9yYXcvbXRrX25hbmQuYworQEAgLTE3LDcgKzE3LDcgQEAKKyAjaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+CisgI2luY2x1ZGUgPGxpbnV4L29mLmg+CisgI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorLSNpbmNsdWRlICJtdGtfZWNjLmgiCisrI2luY2x1ZGUgPGxpbnV4L210ZC9tdGtfZWNjLmg+CisgCisgLyogTkFORCBjb250cm9sbGVyIHJlZ2lzdGVyIGRlZmluaXRpb24gKi8KKyAjZGVmaW5lIE5GSV9DTkZHCQkoMHgwMCkKKy0tLSAvZGV2L251bGwKKysrKyBiL2luY2x1ZGUvbGludXgvbXRkL210a19lY2MuaAorQEAgLTAsMCArMSw0OSBAQAorKy8qCisrICogTVRLIFNERzEgRUNDIGNvbnRyb2xsZXIKKysgKgorKyAqIENvcHlyaWdodCAoYykgMjAxNiBNZWRpYXRlaworKyAqIEF1dGhvcnM6CVhpYW9sZWkgTGkJCTx4aWFvbGVpLmxpQG1lZGlhdGVrLmNvbT4KKysgKgkJSm9yZ2UgUmFtaXJlei1PcnRpegk8am9yZ2UucmFtaXJlei1vcnRpekBsaW5hcm8ub3JnPgorKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisrICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKysgKi8KKysKKysjaWZuZGVmIF9fRFJJVkVSU19NVERfTkFORF9NVEtfRUNDX0hfXworKyNkZWZpbmUgX19EUklWRVJTX01URF9OQU5EX01US19FQ0NfSF9fCisrCisrI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisrCisrZW51bSBtdGtfZWNjX21vZGUge0VDQ19ETUFfTU9ERSA9IDAsIEVDQ19ORklfTU9ERSA9IDF9OworK2VudW0gbXRrX2VjY19vcGVyYXRpb24ge0VDQ19FTkNPREUsIEVDQ19ERUNPREV9OworKworK3N0cnVjdCBkZXZpY2Vfbm9kZTsKKytzdHJ1Y3QgbXRrX2VjYzsKKysKKytzdHJ1Y3QgbXRrX2VjY19zdGF0cyB7CisrCXUzMiBjb3JyZWN0ZWQ7CisrCXUzMiBiaXRmbGlwczsKKysJdTMyIGZhaWxlZDsKKyt9OworKworK3N0cnVjdCBtdGtfZWNjX2NvbmZpZyB7CisrCWVudW0gbXRrX2VjY19vcGVyYXRpb24gb3A7CisrCWVudW0gbXRrX2VjY19tb2RlIG1vZGU7CisrCWRtYV9hZGRyX3QgYWRkcjsKKysJdTMyIHN0cmVuZ3RoOworKwl1MzIgc2VjdG9yczsKKysJdTMyIGxlbjsKKyt9OworKworK2ludCBtdGtfZWNjX2VuY29kZShzdHJ1Y3QgbXRrX2VjYyAqLCBzdHJ1Y3QgbXRrX2VjY19jb25maWcgKiwgdTggKiwgdTMyKTsKKyt2b2lkIG10a19lY2NfZ2V0X3N0YXRzKHN0cnVjdCBtdGtfZWNjICosIHN0cnVjdCBtdGtfZWNjX3N0YXRzICosIGludCk7CisraW50IG10a19lY2Nfd2FpdF9kb25lKHN0cnVjdCBtdGtfZWNjICosIGVudW0gbXRrX2VjY19vcGVyYXRpb24pOworK2ludCBtdGtfZWNjX2VuYWJsZShzdHJ1Y3QgbXRrX2VjYyAqLCBzdHJ1Y3QgbXRrX2VjY19jb25maWcgKik7Cisrdm9pZCBtdGtfZWNjX2Rpc2FibGUoc3RydWN0IG10a19lY2MgKik7Cisrdm9pZCBtdGtfZWNjX2FkanVzdF9zdHJlbmd0aChzdHJ1Y3QgbXRrX2VjYyAqZWNjLCB1MzIgKnApOworK3Vuc2lnbmVkIGludCBtdGtfZWNjX2dldF9wYXJpdHlfYml0cyhzdHJ1Y3QgbXRrX2VjYyAqZWNjKTsKKysKKytzdHJ1Y3QgbXRrX2VjYyAqb2ZfbXRrX2VjY19nZXQoc3RydWN0IGRldmljZV9ub2RlICopOworK3ZvaWQgbXRrX2VjY19yZWxlYXNlKHN0cnVjdCBtdGtfZWNjICopOworKworKyNlbmRpZgorLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9yYXcvbXRrX2VjYy5oCisrKysgL2Rldi9udWxsCitAQCAtMSw0NyArMCwwIEBACistLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUICovCistLyoKKy0gKiBNVEsgU0RHMSBFQ0MgY29udHJvbGxlcgorLSAqCistICogQ29weXJpZ2h0IChjKSAyMDE2IE1lZGlhdGVrCistICogQXV0aG9yczoJWGlhb2xlaSBMaQkJPHhpYW9sZWkubGlAbWVkaWF0ZWsuY29tPgorLSAqCQlKb3JnZSBSYW1pcmV6LU9ydGl6CTxqb3JnZS5yYW1pcmV6LW9ydGl6QGxpbmFyby5vcmc+CistICovCistCistI2lmbmRlZiBfX0RSSVZFUlNfTVREX05BTkRfTVRLX0VDQ19IX18KKy0jZGVmaW5lIF9fRFJJVkVSU19NVERfTkFORF9NVEtfRUNDX0hfXworLQorLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorLQorLWVudW0gbXRrX2VjY19tb2RlIHtFQ0NfRE1BX01PREUgPSAwLCBFQ0NfTkZJX01PREUgPSAxfTsKKy1lbnVtIG10a19lY2Nfb3BlcmF0aW9uIHtFQ0NfRU5DT0RFLCBFQ0NfREVDT0RFfTsKKy0KKy1zdHJ1Y3QgZGV2aWNlX25vZGU7Cistc3RydWN0IG10a19lY2M7CistCistc3RydWN0IG10a19lY2Nfc3RhdHMgeworLQl1MzIgY29ycmVjdGVkOworLQl1MzIgYml0ZmxpcHM7CistCXUzMiBmYWlsZWQ7CistfTsKKy0KKy1zdHJ1Y3QgbXRrX2VjY19jb25maWcgeworLQllbnVtIG10a19lY2Nfb3BlcmF0aW9uIG9wOworLQllbnVtIG10a19lY2NfbW9kZSBtb2RlOworLQlkbWFfYWRkcl90IGFkZHI7CistCXUzMiBzdHJlbmd0aDsKKy0JdTMyIHNlY3RvcnM7CistCXUzMiBsZW47CistfTsKKy0KKy1pbnQgbXRrX2VjY19lbmNvZGUoc3RydWN0IG10a19lY2MgKiwgc3RydWN0IG10a19lY2NfY29uZmlnICosIHU4ICosIHUzMik7Cistdm9pZCBtdGtfZWNjX2dldF9zdGF0cyhzdHJ1Y3QgbXRrX2VjYyAqLCBzdHJ1Y3QgbXRrX2VjY19zdGF0cyAqLCBpbnQpOworLWludCBtdGtfZWNjX3dhaXRfZG9uZShzdHJ1Y3QgbXRrX2VjYyAqLCBlbnVtIG10a19lY2Nfb3BlcmF0aW9uKTsKKy1pbnQgbXRrX2VjY19lbmFibGUoc3RydWN0IG10a19lY2MgKiwgc3RydWN0IG10a19lY2NfY29uZmlnICopOworLXZvaWQgbXRrX2VjY19kaXNhYmxlKHN0cnVjdCBtdGtfZWNjICopOworLXZvaWQgbXRrX2VjY19hZGp1c3Rfc3RyZW5ndGgoc3RydWN0IG10a19lY2MgKmVjYywgdTMyICpwKTsKKy11bnNpZ25lZCBpbnQgbXRrX2VjY19nZXRfcGFyaXR5X2JpdHMoc3RydWN0IG10a19lY2MgKmVjYyk7CistCistc3RydWN0IG10a19lY2MgKm9mX210a19lY2NfZ2V0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqKTsKKy12b2lkIG10a19lY2NfcmVsZWFzZShzdHJ1Y3QgbXRrX2VjYyAqKTsKKy0KKy0jZW5kaWYKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wMzA2LXNwaS1zcGktbWVtLU1lZGlhVGVrLUFkZC1TUEktTkFORC1GbGFzaC1pbnRlcmZhY2UtZHIucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDMwNi1zcGktc3BpLW1lbS1NZWRpYVRlay1BZGQtU1BJLU5BTkQtRmxhc2gtaW50ZXJmYWNlLWRyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNjcyZTUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDMwNi1zcGktc3BpLW1lbS1NZWRpYVRlay1BZGQtU1BJLU5BTkQtRmxhc2gtaW50ZXJmYWNlLWRyLnBhdGNoCkBAIC0wLDAgKzEsMTI0NiBAQAorRnJvbSAxZWNiMzhlYWJkOTBlZmU5Mzk1N2QwYTgyMmExNjc1NjBjMzkzMDhhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogWGlhbmdzaGVuZyBIb3UgPHhpYW5nc2hlbmcuaG91QG1lZGlhdGVrLmNvbT4KK0RhdGU6IFdlZCwgMjAgTWFyIDIwMTkgMTY6MTk6NTEgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCA2LzZdIHNwaTogc3BpLW1lbTogTWVkaWFUZWs6IEFkZCBTUEkgTkFORCBGbGFzaCBpbnRlcmZhY2UKKyBkcml2ZXIgZm9yIE1lZGlhVGVrIE1UNzYyMgorCitDaGFuZ2UtSWQ6IEkzZTc4NDA2YmI5YjQ2YjAwNDlkMzk4OGE1YzcxYzcwNjllNGY4MDljCitTaWduZWQtb2ZmLWJ5OiBYaWFuZ3NoZW5nIEhvdSA8eGlhbmdzaGVuZy5ob3VAbWVkaWF0ZWsuY29tPgorLS0tCisgZHJpdmVycy9zcGkvS2NvbmZpZyAgICAgICAgfCAgICA5ICsKKyBkcml2ZXJzL3NwaS9NYWtlZmlsZSAgICAgICB8ICAgIDEgKworIGRyaXZlcnMvc3BpL3NwaS1tdGstc25maS5jIHwgMTE4MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDExOTMgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3NwaS9zcGktbXRrLXNuZmkuYworCistLS0gYS9kcml2ZXJzL3NwaS9NYWtlZmlsZQorKysrIGIvZHJpdmVycy9zcGkvTWFrZWZpbGUKK0BAIC02MCw2ICs2MCw3IEBAIG9iai0kKENPTkZJR19TUElfTVBDNTEyeF9QU0MpCQkrPSBzcGktbXAKKyBvYmotJChDT05GSUdfU1BJX01QQzUyeHhfUFNDKQkJKz0gc3BpLW1wYzUyeHgtcHNjLm8KKyBvYmotJChDT05GSUdfU1BJX01QQzUyeHgpCQkrPSBzcGktbXBjNTJ4eC5vCisgb2JqLSQoQ09ORklHX1NQSV9NVDY1WFgpICAgICAgICAgICAgICAgICs9IHNwaS1tdDY1eHgubworK29iai0kKENPTkZJR19TUElfTVRLX1NORkkpICAgICAgICAgICAgICArPSBzcGktbXRrLXNuZmkubworIG9iai0kKENPTkZJR19TUElfTVQ3NjIxKQkJKz0gc3BpLW10NzYyMS5vCisgb2JqLSQoQ09ORklHX1NQSV9NVEtfTk9SKQkJKz0gc3BpLW10ay1ub3IubworIG9iai0kKENPTkZJR19TUElfTVhJQykJCQkrPSBzcGktbXhpYy5vCistLS0gYS9kcml2ZXJzL3NwaS9LY29uZmlnCisrKysgYi9kcml2ZXJzL3NwaS9LY29uZmlnCitAQCAtNDI3LDYgKzQyNywxNSBAQCBjb25maWcgU1BJX01UNjVYWAorIAkgIHNheSBZIG9yIE0gaGVyZS5JZiB5b3UgYXJlIG5vdCBzdXJlLCBzYXkgTi4KKyAJICBTUEkgZHJpdmVycyBmb3IgTWVkaWF0ZWsgTVQ2NVhYIGFuZCBNVDgxWFggc2VyaWVzIEFSTSBTb0NzLgorIAorK2NvbmZpZyBTUElfTVRLX1NORkkKKysJdHJpc3RhdGUgIk1lZGlhVGVrIFNQSSBOQU5EIGludGVyZmFjZSIKKysJc2VsZWN0IE1URF9TUElfTkFORAorKwloZWxwCisrCSAgVGhpcyBzZWxlY3RzIHRoZSBTUEkgTkFORCBGTEFTSCBpbnRlcmZhY2UoU05GSSksCisrCSAgd2hpY2ggY291bGQgYmUgZm91bmQgb24gTWVkaWFUZWsgU29jLgorKwkgIFNheSBZIG9yIE0gaGVyZS5JZiB5b3UgYXJlIG5vdCBzdXJlLCBzYXkgTi4KKysJICBOb3RlIFBhcmFsbGVsIE5hbmQgYW5kIFNQSSBOQU5EIGlzIGFsdGVybmF0aXZlIG9uIE1lZGlhVGVrIFNvQ3MuCisrCisgY29uZmlnIFNQSV9NVDc2MjEKKyAJdHJpc3RhdGUgIk1lZGlhVGVrIE1UNzYyMSBTUEkgQ29udHJvbGxlciIKKyAJZGVwZW5kcyBvbiBSQUxJTksgfHwgQ09NUElMRV9URVNUCistLS0gL2Rldi9udWxsCisrKysgYi9kcml2ZXJzL3NwaS9zcGktbXRrLXNuZmkuYworQEAgLTAsMCArMSwxMjAwIEBACisrLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKysvKgorKyAqIERyaXZlciBmb3IgTWVkaWFUZWsgU1BJIE5hbmQgaW50ZXJmYWNlCisrICoKKysgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWVkaWFUZWsgSW5jLgorKyAqIEF1dGhvcnM6CVhpYW5nc2hlbmcgSG91CTx4aWFuZ3NoZW5nLmhvdUBtZWRpYXRlay5jb20+CisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8bGludXgvY2xrLmg+CisrI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisrI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisrI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4KKysjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRrX2VjYy5oPgorKyNpbmNsdWRlIDxsaW51eC9tdGQvc3BpbmFuZC5oPgorKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKysjaW5jbHVkZSA8bGludXgvb2YuaD4KKysjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisrI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisrI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGktbWVtLmg+CisrCisrLyogTkFORCBjb250cm9sbGVyIHJlZ2lzdGVyIGRlZmluaXRpb24gKi8KKysvKiBORkkgY29udHJvbCAqLworKyNkZWZpbmUgTkZJX0NORkcJCTB4MDAKKysjZGVmaW5lCQlDTkZHX0RNQQkJQklUKDApCisrI2RlZmluZQkJQ05GR19SRUFEX0VOCQlCSVQoMSkKKysjZGVmaW5lCQlDTkZHX0RNQV9CVVJTVF9FTglCSVQoMikKKysjZGVmaW5lCQlDTkZHX0JZVEVfUlcJCUJJVCg2KQorKyNkZWZpbmUJCUNORkdfSFdfRUNDX0VOCQlCSVQoOCkKKysjZGVmaW5lCQlDTkZHX0FVVE9fRk1UX0VOCUJJVCg5KQorKyNkZWZpbmUJCUNORkdfT1BfUFJPR1JBTQkJKDNVTCA8PCAxMikKKysjZGVmaW5lCQlDTkZHX09QX0NVU1QJCSg2VUwgPDwgMTIpCisrI2RlZmluZSBORklfUEFHRUZNVAkJMHgwNAorKyNkZWZpbmUJCVBBR0VGTVRfNTEyCQkwCisrI2RlZmluZQkJUEFHRUZNVF8ySwkJMQorKyNkZWZpbmUJCVBBR0VGTVRfNEsJCTIKKysjZGVmaW5lCQlQQUdFRk1UX0ZETV9TSElGVAk4CisrI2RlZmluZQkJUEFHRUZNVF9GRE1fRUNDX1NISUZUCTEyCisrI2RlZmluZSBORklfQ09OCQkJMHgwOAorKyNkZWZpbmUJCUNPTl9GSUZPX0ZMVVNICQlCSVQoMCkKKysjZGVmaW5lCQlDT05fTkZJX1JTVAkJQklUKDEpCisrI2RlZmluZQkJQ09OX0JSRAkJCUJJVCg4KQorKyNkZWZpbmUJCUNPTl9CV1IJCQlCSVQoOSkKKysjZGVmaW5lCQlDT05fU0VDX1NISUZUCQkxMgorKyNkZWZpbmUgTkZJX0lOVFJfRU4JCTB4MTAKKysjZGVmaW5lCQlJTlRSX0FIQl9ET05FX0VOCUJJVCg2KQorKyNkZWZpbmUgTkZJX0lOVFJfU1RBCQkweDE0CisrI2RlZmluZSBORklfQ01ECQkJMHgyMAorKyNkZWZpbmUgTkZJX1NUQQkJCTB4NjAKKysjZGVmaW5lCQlTVEFfRU1QX1BBR0UJCUJJVCgxMikKKysjZGVmaW5lCQlOQU5EX0ZTTV9NQVNLCQkoMHgxZiA8PCAyNCkKKysjZGVmaW5lCQlORklfRlNNX01BU0sJCSgweGYgPDwgMTYpCisrI2RlZmluZSBORklfQUREUkNOVFIJCTB4NzAKKysjZGVmaW5lCQlDTlRSX01BU0sJCUdFTk1BU0soMTYsIDEyKQorKyNkZWZpbmUJCUFERFJDTlRSX1NFQ19TSElGVAkxMgorKyNkZWZpbmUJCUFERFJDTlRSX1NFQyh2YWwpIFwKKysJCSgoKHZhbCkgJiBDTlRSX01BU0spID4+IEFERFJDTlRSX1NFQ19TSElGVCkKKysjZGVmaW5lIE5GSV9TVFJBRERSCQkweDgwCisrI2RlZmluZSBORklfQllURUxFTgkJMHg4NAorKyNkZWZpbmUgTkZJX0NTRUwJCTB4OTAKKysjZGVmaW5lIE5GSV9GRE1MKHgpCQkoMHhhMCArICh4KSAqIHNpemVvZih1MzIpICogMikKKysjZGVmaW5lIE5GSV9GRE1NKHgpCQkoMHhhNCArICh4KSAqIHNpemVvZih1MzIpICogMikKKysjZGVmaW5lIE5GSV9NQVNURVJfU1RBCQkweDIyNAorKyNkZWZpbmUJCU1BU1RFUl9TVEFfTUFTSwkJMHgwZmZmCisrLyogTkZJX1NQSSBjb250cm9sICovCisrI2RlZmluZSBTTkZJX01BQ19PVVRMCQkweDUwNAorKyNkZWZpbmUgU05GSV9NQUNfSU5MCQkweDUwOAorKyNkZWZpbmUgU05GSV9SRF9DVEwyCQkweDUxMAorKyNkZWZpbmUJCVJEX0NNRF9NQVNLCQkweDAwZmYKKysjZGVmaW5lCQlSRF9EVU1NWV9TSElGVAkJOAorKyNkZWZpbmUgU05GSV9SRF9DVEwzCQkweDUxNAorKyNkZWZpbmUJCVJEX0FERFJfTUFTSwkJMHhmZmZmCisrI2RlZmluZSBTTkZJX01JU0NfQ1RMCQkweDUzOAorKyNkZWZpbmUJCVJEX01PREVfWDIJCUJJVCgxNikKKysjZGVmaW5lCQlSRF9NT0RFX1g0CQkoMlVMIDw8IDE2KQorKyNkZWZpbmUJCVJEX1FEVUFMX0lPCQkoNFVMIDw8IDE2KQorKyNkZWZpbmUJCVJEX01PREVfTUFTSwkJKDdVTCA8PCAxNikKKysjZGVmaW5lCQlSRF9DVVNUT01fRU4JCUJJVCg2KQorKyNkZWZpbmUJCVdSX0NVU1RPTV9FTgkJQklUKDcpCisrI2RlZmluZQkJV1JfWDRfRU4JCUJJVCgyMCkKKysjZGVmaW5lCQlTV19SU1QJCQlCSVQoMjgpCisrI2RlZmluZSBTTkZJX01JU0NfQ1RMMgkJMHg1M2MKKysjZGVmaW5lCQlXUl9MRU5fU0hJRlQJCTE2CisrI2RlZmluZSBTTkZJX1BHX0NUTDEJCTB4NTI0CisrI2RlZmluZQkJV1JfTE9BRF9DTURfU0hJRlQJOAorKyNkZWZpbmUgU05GSV9QR19DVEwyCQkweDUyOAorKyNkZWZpbmUJCVdSX0xPQURfQUREUl9NQVNLCTB4ZmZmZgorKyNkZWZpbmUgU05GSV9NQUNfQ1RMCQkweDUwMAorKyNkZWZpbmUJCU1BQ19XSVAJCQlCSVQoMCkKKysjZGVmaW5lCQlNQUNfV0lQX1JFQURZCQlCSVQoMSkKKysjZGVmaW5lCQlNQUNfVFJJRwkJQklUKDIpCisrI2RlZmluZQkJTUFDX0VOCQkJQklUKDMpCisrI2RlZmluZQkJTUFDX1NJT19TRUwJCUJJVCg0KQorKyNkZWZpbmUgU05GSV9TVEFfQ1RMMQkJMHg1NTAKKysjZGVmaW5lCQlTUElfU1RBVEVfSURMRQkJMHhmCisrI2RlZmluZSBTTkZJX0NORkcJCTB4NTVjCisrI2RlZmluZQkJU05GSV9NT0RFX0VOCQlCSVQoMCkKKysjZGVmaW5lIFNORklfR1BSQU1fREFUQQkJMHg4MDAKKysjZGVmaW5lCQlTTkZJX0dQUkFNX01BWF9MRU4JMTYKKysKKysvKiBEdW1teSBjb21tYW5kIHRyaWdnZXIgTkZJIHRvIHNwaSBtb2RlICovCisrI2RlZmluZSBOQU5EX0NNRF9EVU1NWVJFQUQJMHgwMAorKyNkZWZpbmUgTkFORF9DTURfRFVNTVlQUk9HCTB4ODAKKysKKysjZGVmaW5lIE1US19USU1FT1VUCQk1MDAwMDAKKysjZGVmaW5lIE1US19SRVNFVF9USU1FT1VUCTEwMDAwMDAKKysjZGVmaW5lIE1US19TTkZDX01JTl9TUEFSRQkxNgorKyNkZWZpbmUgS0IoeCkJCQkoKHgpICogMTAyNFVMKQorKworKy8qCisrICogc3VwcG9ydGVkIHNwYXJlIHNpemUgb2YgZWFjaCBJUC4KKysgKiBvcmRlciBzaG91bGQgYmUgdGhlIHNhbWUgd2l0aCB0aGUgc3BhcmUgc2l6ZSBiaXRmaWxlZCBkZWZpbmF0aW9uIG9mCisrICogcmVnaXN0ZXIgTkZJX1BBR0VGTVQuCisrICovCisrc3RhdGljIGNvbnN0IHU4IHNwYXJlX3NpemVfbXQ3NjIyW10gPSB7CisrCTE2LCAyNiwgMjcsIDI4CisrfTsKKysKKytzdHJ1Y3QgbXRrX3NuZmlfY2FwcyB7CisrCWNvbnN0IHU4ICpzcGFyZV9zaXplOworKwl1OCBudW1fc3BhcmVfc2l6ZTsKKysJdTMyIG5hbmRfc2VjX3NpemU7CisrCXU4IG5hbmRfZmRtX3NpemU7CisrCXU4IG5hbmRfZmRtX2VjY19zaXplOworKwl1OCBlY2NfcGFyaXR5X2JpdHM7CisrCXU4IHBhZ2Vmb3JtYXRfc3BhcmVfc2hpZnQ7CisrCXU4IGJhZF9tYXJrX3N3YXA7CisrfTsKKysKKytzdHJ1Y3QgbXRrX3NuZmlfYmFkX21hcmtfY3RsIHsKKysJdm9pZCAoKmJtX3N3YXApKHN0cnVjdCBzcGlfbWVtICptZW0sIHU4ICpidWYsIGludCByYXcpOworKwl1MzIgc2VjOworKwl1MzIgcG9zOworK307CisrCisrc3RydWN0IG10a19zbmZpX25hbmRfY2hpcCB7CisrCXN0cnVjdCBtdGtfc25maV9iYWRfbWFya19jdGwgYmFkX21hcms7CisrCXUzMiBzcGFyZV9wZXJfc2VjdG9yOworK307CisrCisrc3RydWN0IG10a19zbmZpX2NsayB7CisrCXN0cnVjdCBjbGsgKm5maV9jbGs7CisrCXN0cnVjdCBjbGsgKnNwaV9jbGs7CisrfTsKKysKKytzdHJ1Y3QgbXRrX3NuZmkgeworKwljb25zdCBzdHJ1Y3QgbXRrX3NuZmlfY2FwcyAqY2FwczsKKysJc3RydWN0IG10a19zbmZpX25hbmRfY2hpcCBzbmZpX25hbmQ7CisrCXN0cnVjdCBtdGtfc25maV9jbGsgY2xrOworKwlzdHJ1Y3QgbXRrX2VjY19jb25maWcgZWNjX2NmZzsKKysJc3RydWN0IG10a19lY2MgKmVjYzsKKysJc3RydWN0IGNvbXBsZXRpb24gZG9uZTsKKysJc3RydWN0IGRldmljZSAqZGV2OworKworKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisrCisrCXU4ICpidWZmZXI7CisrfTsKKysKKytzdGF0aWMgaW5saW5lIHU4ICpvb2JfcHRyKHN0cnVjdCBzcGlfbWVtICptZW0sIGludCBpKQorK3sKKysJc3RydWN0IHNwaW5hbmRfZGV2aWNlICpzcGluYW5kID0gc3BpX21lbV9nZXRfZHJ2ZGF0YShtZW0pOworKwlzdHJ1Y3QgbXRrX3NuZmkgKnNuZmkgPSBzcGlfY29udHJvbGxlcl9nZXRfZGV2ZGF0YShtZW0tPnNwaS0+bWFzdGVyKTsKKysJc3RydWN0IG10a19zbmZpX25hbmRfY2hpcCAqc25maV9uYW5kID0gJnNuZmktPnNuZmlfbmFuZDsKKysJdTggKnBvaTsKKysKKysJLyogbWFwIHRoZSBzZWN0b3IncyBGRE0gZGF0YSB0byBmcmVlIG9vYjoKKysJICogdGhlIGJlZ2lubmluZyBvZiB0aGUgb29iIGFyZWEgc3RvcmVzIHRoZSBGRE0gZGF0YSBvZiBiYWQgbWFyaworKwkgKi8KKysKKysJaWYgKGkgPCBzbmZpX25hbmQtPmJhZF9tYXJrLnNlYykKKysJCXBvaSA9IHNwaW5hbmQtPm9vYmJ1ZiArIChpICsgMSkgKiBzbmZpLT5jYXBzLT5uYW5kX2ZkbV9zaXplOworKwllbHNlIGlmIChpID09IHNuZmlfbmFuZC0+YmFkX21hcmsuc2VjKQorKwkJcG9pID0gc3BpbmFuZC0+b29iYnVmOworKwllbHNlCisrCQlwb2kgPSBzcGluYW5kLT5vb2JidWYgKyBpICogc25maS0+Y2Fwcy0+bmFuZF9mZG1fc2l6ZTsKKysKKysJcmV0dXJuIHBvaTsKKyt9CisrCisrc3RhdGljIGlubGluZSBpbnQgbXRrX2RhdGFfbGVuKHN0cnVjdCBzcGlfbWVtICptZW0pCisreworKwlzdHJ1Y3QgbXRrX3NuZmkgKnNuZmkgPSBzcGlfY29udHJvbGxlcl9nZXRfZGV2ZGF0YShtZW0tPnNwaS0+bWFzdGVyKTsKKysJc3RydWN0IG10a19zbmZpX25hbmRfY2hpcCAqc25maV9uYW5kID0gJnNuZmktPnNuZmlfbmFuZDsKKysKKysJcmV0dXJuIHNuZmktPmNhcHMtPm5hbmRfc2VjX3NpemUgKyBzbmZpX25hbmQtPnNwYXJlX3Blcl9zZWN0b3I7CisrfQorKworK3N0YXRpYyBpbmxpbmUgdTggKm10a19vb2JfcHRyKHN0cnVjdCBzcGlfbWVtICptZW0sCisrCQkJICAgICAgY29uc3QgdTggKnAsIGludCBpKQorK3sKKysJc3RydWN0IG10a19zbmZpICpzbmZpID0gc3BpX2NvbnRyb2xsZXJfZ2V0X2RldmRhdGEobWVtLT5zcGktPm1hc3Rlcik7CisrCisrCXJldHVybiAodTggKilwICsgaSAqIG10a19kYXRhX2xlbihtZW0pICsgc25maS0+Y2Fwcy0+bmFuZF9zZWNfc2l6ZTsKKyt9CisrCisrc3RhdGljIHZvaWQgbXRrX3NuZmlfYmFkX21hcmtfc3dhcChzdHJ1Y3Qgc3BpX21lbSAqbWVtLAorKwkJCQkgICB1OCAqYnVmLCBpbnQgcmF3KQorK3sKKysJc3RydWN0IHNwaW5hbmRfZGV2aWNlICpzcGluYW5kID0gc3BpX21lbV9nZXRfZHJ2ZGF0YShtZW0pOworKwlzdHJ1Y3QgbXRrX3NuZmkgKnNuZmkgPSBzcGlfY29udHJvbGxlcl9nZXRfZGV2ZGF0YShtZW0tPnNwaS0+bWFzdGVyKTsKKysJc3RydWN0IG10a19zbmZpX25hbmRfY2hpcCAqc25maV9uYW5kID0gJnNuZmktPnNuZmlfbmFuZDsKKysJdTMyIGJhZF9wb3MgPSBzbmZpX25hbmQtPmJhZF9tYXJrLnBvczsKKysKKysJaWYgKHJhdykKKysJCWJhZF9wb3MgKz0gc25maV9uYW5kLT5iYWRfbWFyay5zZWMgKiBtdGtfZGF0YV9sZW4obWVtKTsKKysJZWxzZQorKwkJYmFkX3BvcyArPSBzbmZpX25hbmQtPmJhZF9tYXJrLnNlYyAqIHNuZmktPmNhcHMtPm5hbmRfc2VjX3NpemU7CisrCisrCXN3YXAoc3BpbmFuZC0+b29iYnVmWzBdLCBidWZbYmFkX3Bvc10pOworK30KKysKKytzdGF0aWMgdm9pZCBtdGtfc25maV9zZXRfYmFkX21hcmtfY3RsKHN0cnVjdCBtdGtfc25maV9iYWRfbWFya19jdGwgKmJtX2N0bCwKKysJCQkJICAgICAgc3RydWN0IHNwaV9tZW0gKm1lbSkKKyt7CisrCXN0cnVjdCBzcGluYW5kX2RldmljZSAqc3BpbmFuZCA9IHNwaV9tZW1fZ2V0X2RydmRhdGEobWVtKTsKKysJc3RydWN0IG10ZF9pbmZvICptdGQgPSBzcGluYW5kX3RvX210ZChzcGluYW5kKTsKKysKKysJYm1fY3RsLT5ibV9zd2FwID0gbXRrX3NuZmlfYmFkX21hcmtfc3dhcDsKKysJYm1fY3RsLT5zZWMgPSBtdGQtPndyaXRlc2l6ZSAvIG10a19kYXRhX2xlbihtZW0pOworKwlibV9jdGwtPnBvcyA9IG10ZC0+d3JpdGVzaXplICUgbXRrX2RhdGFfbGVuKG1lbSk7CisrfQorKworK3N0YXRpYyB2b2lkIG10a19zbmZpX21hY19lbmFibGUoc3RydWN0IG10a19zbmZpICpzbmZpKQorK3sKKysJdTMyIG1hYzsKKysKKysJbWFjID0gcmVhZGwoc25maS0+cmVncyArIFNORklfTUFDX0NUTCk7CisrCW1hYyAmPSB+TUFDX1NJT19TRUw7CisrCW1hYyB8PSBNQUNfRU47CisrCisrCXdyaXRlbChtYWMsIHNuZmktPnJlZ3MgKyBTTkZJX01BQ19DVEwpOworK30KKysKKytzdGF0aWMgaW50IG10a19zbmZpX21hY190cmlnZ2VyKHN0cnVjdCBtdGtfc25maSAqc25maSkKKyt7CisrCXUzMiBtYWMsIHJlZzsKKysJaW50IHJldCA9IDA7CisrCisrCW1hYyA9IHJlYWRsKHNuZmktPnJlZ3MgKyBTTkZJX01BQ19DVEwpOworKwltYWMgfD0gTUFDX1RSSUc7CisrCXdyaXRlbChtYWMsIHNuZmktPnJlZ3MgKyBTTkZJX01BQ19DVEwpOworKworKwlyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXRfYXRvbWljKHNuZmktPnJlZ3MgKyBTTkZJX01BQ19DVEwsIHJlZywKKysJCQkJCXJlZyAmIE1BQ19XSVBfUkVBRFksIDEwLAorKwkJCQkJTVRLX1RJTUVPVVQpOworKwlpZiAocmV0IDwgMCkgeworKwkJZGV2X2VycihzbmZpLT5kZXYsICJwb2xsaW5nIHdpcCByZWFkeSBmb3IgcmVhZCB0aW1lb3V0XG4iKTsKKysJCXJldHVybiAtRUlPOworKwl9CisrCisrCXJldCA9IHJlYWRsX3BvbGxfdGltZW91dF9hdG9taWMoc25maS0+cmVncyArIFNORklfTUFDX0NUTCwgcmVnLAorKwkJCQkJIShyZWcgJiBNQUNfV0lQKSwgMTAsCisrCQkJCQlNVEtfVElNRU9VVCk7CisrCWlmIChyZXQgPCAwKSB7CisrCQlkZXZfZXJyKHNuZmktPmRldiwgInBvbGxpbmcgZmxhc2ggdXBkYXRlIHRpbWVvdXRcbiIpOworKwkJcmV0dXJuIC1FSU87CisrCX0KKysKKysJcmV0dXJuIHJldDsKKyt9CisrCisrc3RhdGljIHZvaWQgbXRrX3NuZmlfbWFjX2xlYXZlKHN0cnVjdCBtdGtfc25maSAqc25maSkKKyt7CisrCXUzMiBtYWM7CisrCisrCW1hYyA9IHJlYWRsKHNuZmktPnJlZ3MgKyBTTkZJX01BQ19DVEwpOworKwltYWMgJj0gfihNQUNfVFJJRyB8IE1BQ19FTiB8IE1BQ19TSU9fU0VMKTsKKysJd3JpdGVsKG1hYywgc25maS0+cmVncyArIFNORklfTUFDX0NUTCk7CisrfQorKworK3N0YXRpYyBpbnQgbXRrX3NuZmlfbWFjX29wKHN0cnVjdCBtdGtfc25maSAqc25maSkKKyt7CisrCWludCByZXQgPSAwOworKworKwltdGtfc25maV9tYWNfZW5hYmxlKHNuZmkpOworKworKwlyZXQgPSBtdGtfc25maV9tYWNfdHJpZ2dlcihzbmZpKTsKKysJaWYgKHJldCkKKysJCXJldHVybiByZXQ7CisrCisrCW10a19zbmZpX21hY19sZWF2ZShzbmZpKTsKKysKKysJcmV0dXJuIHJldDsKKyt9CisrCisrc3RhdGljIGlycXJldHVybl90IG10a19zbmZpX2lycShpbnQgaXJxLCB2b2lkICppZCkKKyt7CisrCXN0cnVjdCBtdGtfc25maSAqc25maSA9IGlkOworKwl1MTYgc3RhLCBpZW47CisrCisrCXN0YSA9IHJlYWR3KHNuZmktPnJlZ3MgKyBORklfSU5UUl9TVEEpOworKwlpZW4gPSByZWFkdyhzbmZpLT5yZWdzICsgTkZJX0lOVFJfRU4pOworKworKwlpZiAoIShzdGEgJiBpZW4pKQorKwkJcmV0dXJuIElSUV9OT05FOworKworKwl3cml0ZXcofnN0YSAmIGllbiwgc25maS0+cmVncyArIE5GSV9JTlRSX0VOKTsKKysJY29tcGxldGUoJnNuZmktPmRvbmUpOworKworKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CisrfQorKworK3N0YXRpYyBpbnQgbXRrX3NuZmlfZW5hYmxlX2NsayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBtdGtfc25maV9jbGsgKmNsaykKKyt7CisrCWludCByZXQ7CisrCisrCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShjbGstPm5maV9jbGspOworKwlpZiAocmV0KSB7CisrCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBlbmFibGUgbmZpIGNsa1xuIik7CisrCQlyZXR1cm4gcmV0OworKwl9CisrCisrCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShjbGstPnNwaV9jbGspOworKwlpZiAocmV0KSB7CisrCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBlbmFibGUgc3BpIGNsa1xuIik7CisrCQljbGtfZGlzYWJsZV91bnByZXBhcmUoY2xrLT5uZmlfY2xrKTsKKysJCXJldHVybiByZXQ7CisrCX0KKysKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyB2b2lkIG10a19zbmZpX2Rpc2FibGVfY2xrKHN0cnVjdCBtdGtfc25maV9jbGsgKmNsaykKKyt7CisrCWNsa19kaXNhYmxlX3VucHJlcGFyZShjbGstPm5maV9jbGspOworKwljbGtfZGlzYWJsZV91bnByZXBhcmUoY2xrLT5zcGlfY2xrKTsKKyt9CisrCisrc3RhdGljIGludCBtdGtfc25maV9yZXNldChzdHJ1Y3QgbXRrX3NuZmkgKnNuZmkpCisreworKwl1MzIgdmFsOworKwlpbnQgcmV0OworKworKwkvKiBTVyByZXNldCBjb250cm9sbGVyICovCisrCXZhbCA9IHJlYWRsKHNuZmktPnJlZ3MgKyBTTkZJX01JU0NfQ1RMKSB8IFNXX1JTVDsKKysJd3JpdGVsKHZhbCwgc25maS0+cmVncyArIFNORklfTUlTQ19DVEwpOworKworKwlyZXQgPSByZWFkd19wb2xsX3RpbWVvdXQoc25maS0+cmVncyArIFNORklfU1RBX0NUTDEsIHZhbCwKKysJCQkJICEodmFsICYgU1BJX1NUQVRFX0lETEUpLCA1MCwKKysJCQkJIE1US19SRVNFVF9USU1FT1VUKTsKKysJaWYgKHJldCkgeworKwkJZGV2X3dhcm4oc25maS0+ZGV2LCAic3BpIHN0YXRlIGFjdGl2ZSBpbiByZXNldCBbMHgleF0gPSAweCV4XG4iLAorKwkJCSBTTkZJX1NUQV9DVEwxLCB2YWwpOworKwkJcmV0dXJuIHJldDsKKysJfQorKworKwl2YWwgPSByZWFkbChzbmZpLT5yZWdzICsgU05GSV9NSVNDX0NUTCk7CisrCXZhbCAmPSB+U1dfUlNUOworKwl3cml0ZWwodmFsLCBzbmZpLT5yZWdzICsgU05GSV9NSVNDX0NUTCk7CisrCisrCS8qIHJlc2V0IGFsbCByZWdpc3RlcnMgYW5kIGZvcmNlIHRoZSBORkkgbWFzdGVyIHRvIHRlcm1pbmF0ZSAqLworKwl3cml0ZXcoQ09OX0ZJRk9fRkxVU0ggfCBDT05fTkZJX1JTVCwgc25maS0+cmVncyArIE5GSV9DT04pOworKwlyZXQgPSByZWFkd19wb2xsX3RpbWVvdXQoc25maS0+cmVncyArIE5GSV9TVEEsIHZhbCwKKysJCQkJICEodmFsICYgKE5GSV9GU01fTUFTSyB8IE5BTkRfRlNNX01BU0spKSwgNTAsCisrCQkJCSBNVEtfUkVTRVRfVElNRU9VVCk7CisrCWlmIChyZXQpIHsKKysJCWRldl93YXJuKHNuZmktPmRldiwgIm5maSBhY3RpdmUgaW4gcmVzZXQgWzB4JXhdID0gMHgleFxuIiwKKysJCQkgTkZJX1NUQSwgdmFsKTsKKysJCXJldHVybiByZXQ7CisrCX0KKysKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQgbXRrX3NuZmlfc2V0X3NwYXJlX3Blcl9zZWN0b3Ioc3RydWN0IHNwaW5hbmRfZGV2aWNlICpzcGluYW5kLAorKwkJCQkJIGNvbnN0IHN0cnVjdCBtdGtfc25maV9jYXBzICpjYXBzLAorKwkJCQkJIHUzMiAqc3BzKQorK3sKKysJc3RydWN0IG10ZF9pbmZvICptdGQgPSBzcGluYW5kX3RvX210ZChzcGluYW5kKTsKKysJY29uc3QgdTggKnNwYXJlID0gY2Fwcy0+c3BhcmVfc2l6ZTsKKysJdTMyIHNlY3RvcnMsIGksIGNsb3Nlc3Rfc3BhcmUgPSAwOworKworKwlzZWN0b3JzID0gbXRkLT53cml0ZXNpemUgLyBjYXBzLT5uYW5kX3NlY19zaXplOworKwkqc3BzID0gbXRkLT5vb2JzaXplIC8gc2VjdG9yczsKKysKKysJaWYgKCpzcHMgPCBNVEtfU05GQ19NSU5fU1BBUkUpCisrCQlyZXR1cm4gLUVJTlZBTDsKKysKKysJZm9yIChpID0gMDsgaSA8IGNhcHMtPm51bV9zcGFyZV9zaXplOyBpKyspIHsKKysJCWlmICgqc3BzID49IHNwYXJlW2ldICYmIHNwYXJlW2ldID49IHNwYXJlW2Nsb3Nlc3Rfc3BhcmVdKSB7CisrCQkJY2xvc2VzdF9zcGFyZSA9IGk7CisrCQkJaWYgKCpzcHMgPT0gc3BhcmVbaV0pCisrCQkJCWJyZWFrOworKwkJfQorKwl9CisrCisrCSpzcHMgPSBzcGFyZVtjbG9zZXN0X3NwYXJlXTsKKysKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyB2b2lkIG10a19zbmZpX3JlYWRfZmRtX2RhdGEoc3RydWN0IHNwaV9tZW0gKm1lbSwKKysJCQkJICAgdTMyIHNlY3RvcnMpCisreworKwlzdHJ1Y3QgbXRrX3NuZmkgKnNuZmkgPSBzcGlfY29udHJvbGxlcl9nZXRfZGV2ZGF0YShtZW0tPnNwaS0+bWFzdGVyKTsKKysJY29uc3Qgc3RydWN0IG10a19zbmZpX2NhcHMgKmNhcHMgPSBzbmZpLT5jYXBzOworKwl1MzIgdmFsbCwgdmFsbTsKKysJaW50IGksIGo7CisrCXU4ICpvb2JwdHI7CisrCisrCWZvciAoaSA9IDA7IGkgPCBzZWN0b3JzOyBpKyspIHsKKysJCW9vYnB0ciA9IG9vYl9wdHIobWVtLCBpKTsKKysJCXZhbGwgPSByZWFkbChzbmZpLT5yZWdzICsgTkZJX0ZETUwoaSkpOworKwkJdmFsbSA9IHJlYWRsKHNuZmktPnJlZ3MgKyBORklfRkRNTShpKSk7CisrCisrCQlmb3IgKGogPSAwOyBqIDwgY2Fwcy0+bmFuZF9mZG1fc2l6ZTsgaisrKQorKwkJCW9vYnB0cltqXSA9IChqID49IDQgPyB2YWxtIDogdmFsbCkgPj4gKChqICUgNCkgKiA4KTsKKysJfQorK30KKysKKytzdGF0aWMgdm9pZCBtdGtfc25maV93cml0ZV9mZG1fZGF0YShzdHJ1Y3Qgc3BpX21lbSAqbWVtLAorKwkJCQkgICAgdTMyIHNlY3RvcnMpCisreworKwlzdHJ1Y3QgbXRrX3NuZmkgKnNuZmkgPSBzcGlfY29udHJvbGxlcl9nZXRfZGV2ZGF0YShtZW0tPnNwaS0+bWFzdGVyKTsKKysJY29uc3Qgc3RydWN0IG10a19zbmZpX2NhcHMgKmNhcHMgPSBzbmZpLT5jYXBzOworKwl1MzIgdmFsbCwgdmFsbTsKKysJaW50IGksIGo7CisrCXU4ICpvb2JwdHI7CisrCisrCWZvciAoaSA9IDA7IGkgPCBzZWN0b3JzOyBpKyspIHsKKysJCW9vYnB0ciA9IG9vYl9wdHIobWVtLCBpKTsKKysJCXZhbGwgPSAwOworKwkJdmFsbSA9IDA7CisrCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSB7CisrCQkJaWYgKGogPCA0KQorKwkJCQl2YWxsIHw9IChqIDwgY2Fwcy0+bmFuZF9mZG1fc2l6ZSA/IG9vYnB0cltqXSA6CisrCQkJCQkgMHhmZikgPDwgKGogKiA4KTsKKysJCQllbHNlCisrCQkJCXZhbG0gfD0gKGogPCBjYXBzLT5uYW5kX2ZkbV9zaXplID8gb29icHRyW2pdIDoKKysJCQkJCSAweGZmKSA8PCAoKGogLSA0KSAqIDgpOworKwkJfQorKwkJd3JpdGVsKHZhbGwsIHNuZmktPnJlZ3MgKyBORklfRkRNTChpKSk7CisrCQl3cml0ZWwodmFsbSwgc25maS0+cmVncyArIE5GSV9GRE1NKGkpKTsKKysJfQorK30KKysKKytzdGF0aWMgaW50IG10a19zbmZpX3VwZGF0ZV9lY2Nfc3RhdHMoc3RydWN0IHNwaV9tZW0gKm1lbSwKKysJCQkJICAgICB1OCAqYnVmLCB1MzIgc2VjdG9ycykKKyt7CisrCXN0cnVjdCBzcGluYW5kX2RldmljZSAqc3BpbmFuZCA9IHNwaV9tZW1fZ2V0X2RydmRhdGEobWVtKTsKKysJc3RydWN0IG10ZF9pbmZvICptdGQgPSBzcGluYW5kX3RvX210ZChzcGluYW5kKTsKKysJc3RydWN0IG10a19zbmZpICpzbmZpID0gc3BpX2NvbnRyb2xsZXJfZ2V0X2RldmRhdGEobWVtLT5zcGktPm1hc3Rlcik7CisrCXN0cnVjdCBtdGtfZWNjX3N0YXRzIHN0YXRzOworKwlpbnQgcmMsIGk7CisrCisrCXJjID0gcmVhZGwoc25maS0+cmVncyArIE5GSV9TVEEpICYgU1RBX0VNUF9QQUdFOworKwlpZiAocmMpIHsKKysJCW1lbXNldChidWYsIDB4ZmYsIHNlY3RvcnMgKiBzbmZpLT5jYXBzLT5uYW5kX3NlY19zaXplKTsKKysJCWZvciAoaSA9IDA7IGkgPCBzZWN0b3JzOyBpKyspCisrCQkJbWVtc2V0KHNwaW5hbmQtPm9vYmJ1ZiwgMHhmZiwKKysJCQkgICAgICAgc25maS0+Y2Fwcy0+bmFuZF9mZG1fc2l6ZSk7CisrCQlyZXR1cm4gMDsKKysJfQorKworKwltdGtfZWNjX2dldF9zdGF0cyhzbmZpLT5lY2MsICZzdGF0cywgc2VjdG9ycyk7CisrCW10ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCArPSBzdGF0cy5jb3JyZWN0ZWQ7CisrCW10ZC0+ZWNjX3N0YXRzLmZhaWxlZCArPSBzdGF0cy5mYWlsZWQ7CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IG10a19zbmZpX2h3X3J1bnRpbWVfY29uZmlnKHN0cnVjdCBzcGlfbWVtICptZW0pCisreworKwlzdHJ1Y3Qgc3BpbmFuZF9kZXZpY2UgKnNwaW5hbmQgPSBzcGlfbWVtX2dldF9kcnZkYXRhKG1lbSk7CisrCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gc3BpbmFuZF90b19tdGQoc3BpbmFuZCk7CisrCXN0cnVjdCBuYW5kX2RldmljZSAqbmFuZCA9IG10ZF90b19uYW5kZGV2KG10ZCk7CisrCXN0cnVjdCBtdGtfc25maSAqc25maSA9IHNwaV9jb250cm9sbGVyX2dldF9kZXZkYXRhKG1lbS0+c3BpLT5tYXN0ZXIpOworKwljb25zdCBzdHJ1Y3QgbXRrX3NuZmlfY2FwcyAqY2FwcyA9IHNuZmktPmNhcHM7CisrCXN0cnVjdCBtdGtfc25maV9uYW5kX2NoaXAgKnNuZmlfbmFuZCA9ICZzbmZpLT5zbmZpX25hbmQ7CisrCXUzMiBmbXQsIHNwYXJlLCBpID0gMDsKKysJaW50IHJldDsKKysKKysJcmV0ID0gbXRrX3NuZmlfc2V0X3NwYXJlX3Blcl9zZWN0b3Ioc3BpbmFuZCwgY2FwcywgJnNwYXJlKTsKKysJaWYgKHJldCkKKysJCXJldHVybiByZXQ7CisrCisrCS8qIGNhbGN1bGF0ZSB1c2FibGUgb29iIGJ5dGVzIGZvciBlY2MgcGFyaXR5IGRhdGEgKi8KKysJc25maV9uYW5kLT5zcGFyZV9wZXJfc2VjdG9yID0gc3BhcmU7CisrCXNwYXJlIC09IGNhcHMtPm5hbmRfZmRtX3NpemU7CisrCisrCW5hbmQtPm1lbW9yZy5vb2JzaXplID0gc25maV9uYW5kLT5zcGFyZV9wZXJfc2VjdG9yCisrCQkqIChtdGQtPndyaXRlc2l6ZSAvIGNhcHMtPm5hbmRfc2VjX3NpemUpOworKwltdGQtPm9vYnNpemUgPSBuYW5kZGV2X3Blcl9wYWdlX29vYnNpemUobmFuZCk7CisrCisrCXNuZmktPmVjY19jZmcuc3RyZW5ndGggPSAoc3BhcmUgPDwgMykgLyBjYXBzLT5lY2NfcGFyaXR5X2JpdHM7CisrCW10a19lY2NfYWRqdXN0X3N0cmVuZ3RoKHNuZmktPmVjYywgJnNuZmktPmVjY19jZmcuc3RyZW5ndGgpOworKworKwlzd2l0Y2ggKG10ZC0+d3JpdGVzaXplKSB7CisrCWNhc2UgNTEyOgorKwkJZm10ID0gUEFHRUZNVF81MTI7CisrCQlicmVhazsKKysJY2FzZSBLQigyKToKKysJCWZtdCA9IFBBR0VGTVRfMks7CisrCQlicmVhazsKKysJY2FzZSBLQig0KToKKysJCWZtdCA9IFBBR0VGTVRfNEs7CisrCQlicmVhazsKKysJZGVmYXVsdDoKKysJCWRldl9lcnIoc25maS0+ZGV2LCAiaW52YWxpZCBwYWdlIGxlbjogJWRcbiIsIG10ZC0+d3JpdGVzaXplKTsKKysJCXJldHVybiAtRUlOVkFMOworKwl9CisrCisrCS8qIFNldHVwIFBhZ2VGb3JtYXQgKi8KKysJd2hpbGUgKGNhcHMtPnNwYXJlX3NpemVbaV0gIT0gc25maV9uYW5kLT5zcGFyZV9wZXJfc2VjdG9yKSB7CisrCQlpKys7CisrCQlpZiAoaSA9PSAoY2Fwcy0+bnVtX3NwYXJlX3NpemUgLSAxKSkgeworKwkJCWRldl9lcnIoc25maS0+ZGV2LCAiaW52YWxpZCBzcGFyZSBzaXplICVkXG4iLAorKwkJCQlzbmZpX25hbmQtPnNwYXJlX3Blcl9zZWN0b3IpOworKwkJCXJldHVybiAtRUlOVkFMOworKwkJfQorKwl9CisrCisrCWZtdCB8PSBpIDw8IGNhcHMtPnBhZ2Vmb3JtYXRfc3BhcmVfc2hpZnQ7CisrCWZtdCB8PSBjYXBzLT5uYW5kX2ZkbV9zaXplIDw8IFBBR0VGTVRfRkRNX1NISUZUOworKwlmbXQgfD0gY2Fwcy0+bmFuZF9mZG1fZWNjX3NpemUgPDwgUEFHRUZNVF9GRE1fRUNDX1NISUZUOworKwl3cml0ZWwoZm10LCBzbmZpLT5yZWdzICsgTkZJX1BBR0VGTVQpOworKworKwlzbmZpLT5lY2NfY2ZnLmxlbiA9IGNhcHMtPm5hbmRfc2VjX3NpemUgKyBjYXBzLT5uYW5kX2ZkbV9lY2Nfc2l6ZTsKKysKKysJbXRrX3NuZmlfc2V0X2JhZF9tYXJrX2N0bCgmc25maV9uYW5kLT5iYWRfbWFyaywgbWVtKTsKKysKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQgbXRrX3NuZmlfcmVhZF9mcm9tX2NhY2hlKHN0cnVjdCBzcGlfbWVtICptZW0sCisrCQkJCSAgICBjb25zdCBzdHJ1Y3Qgc3BpX21lbV9vcCAqb3AsIGludCBvb2Jfb24pCisreworKwlzdHJ1Y3QgbXRrX3NuZmkgKnNuZmkgPSBzcGlfY29udHJvbGxlcl9nZXRfZGV2ZGF0YShtZW0tPnNwaS0+bWFzdGVyKTsKKysJc3RydWN0IHNwaW5hbmRfZGV2aWNlICpzcGluYW5kID0gc3BpX21lbV9nZXRfZHJ2ZGF0YShtZW0pOworKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IHNwaW5hbmRfdG9fbXRkKHNwaW5hbmQpOworKwl1MzIgc2VjdG9ycyA9IG10ZC0+d3JpdGVzaXplIC8gc25maS0+Y2Fwcy0+bmFuZF9zZWNfc2l6ZTsKKysJc3RydWN0IG10a19zbmZpX25hbmRfY2hpcCAqc25maV9uYW5kID0gJnNuZmktPnNuZmlfbmFuZDsKKysJdTMyIHJlZywgbGVuLCBjb2xfYWRkciA9IDA7CisrCWludCBkdW1teV9jeWNsZSwgcmV0OworKwlkbWFfYWRkcl90IGRtYV9hZGRyOworKworKwlsZW4gPSBzZWN0b3JzICogKHNuZmktPmNhcHMtPm5hbmRfc2VjX3NpemUKKysJICAgICAgKyBzbmZpX25hbmQtPnNwYXJlX3Blcl9zZWN0b3IpOworKworKwlkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKHNuZmktPmRldiwgc25maS0+YnVmZmVyLAorKwkJCQkgIGxlbiwgRE1BX0ZST01fREVWSUNFKTsKKysJcmV0ID0gZG1hX21hcHBpbmdfZXJyb3Ioc25maS0+ZGV2LCBkbWFfYWRkcik7CisrCWlmIChyZXQpIHsKKysJCWRldl9lcnIoc25maS0+ZGV2LCAiZG1hIG1hcHBpbmcgZXJyb3JcbiIpOworKwkJcmV0dXJuIC1FSU5WQUw7CisrCX0KKysKKysJLyogc2V0IFJlYWQgY2FjaGUgY29tbWFuZCBhbmQgZHVtbXkgY3ljbGUgKi8KKysJZHVtbXlfY3ljbGUgPSAob3AtPmR1bW15Lm5ieXRlcyA8PCAzKSA+PiAoZmZzKG9wLT5kdW1teS5idXN3aWR0aCkgLSAxKTsKKysJcmVnID0gKChvcC0+Y21kLm9wY29kZSAmIFJEX0NNRF9NQVNLKSB8CisrCSAgICAgICAoZHVtbXlfY3ljbGUgPDwgUkRfRFVNTVlfU0hJRlQpKTsKKysJd3JpdGVsKHJlZywgc25maS0+cmVncyArIFNORklfUkRfQ1RMMik7CisrCisrCXdyaXRlbCgoY29sX2FkZHIgJiBSRF9BRERSX01BU0spLCBzbmZpLT5yZWdzICsgU05GSV9SRF9DVEwzKTsKKysKKysJcmVnID0gcmVhZGwoc25maS0+cmVncyArIFNORklfTUlTQ19DVEwpOworKwlyZWcgfD0gUkRfQ1VTVE9NX0VOOworKwlyZWcgJj0gfihSRF9NT0RFX01BU0sgfCBXUl9YNF9FTik7CisrCisrCS8qIHNldCBkYXRhIGFuZCBhZGRyIGJ1c3dpZHRoICovCisrCWlmIChvcC0+ZGF0YS5idXN3aWR0aCA9PSA0KQorKwkJcmVnIHw9IFJEX01PREVfWDQ7CisrCWVsc2UgaWYgKG9wLT5kYXRhLmJ1c3dpZHRoID09IDIpCisrCQlyZWcgfD0gUkRfTU9ERV9YMjsKKysKKysJaWYgKG9wLT5hZGRyLmJ1c3dpZHRoID09IDQgfHwgb3AtPmFkZHIuYnVzd2lkdGggPT0gMikKKysJCXJlZyB8PSBSRF9RRFVBTF9JTzsKKysJd3JpdGVsKHJlZywgc25maS0+cmVncyArIFNORklfTUlTQ19DVEwpOworKworKwl3cml0ZWwobGVuLCBzbmZpLT5yZWdzICsgU05GSV9NSVNDX0NUTDIpOworKwl3cml0ZXcoc2VjdG9ycyA8PCBDT05fU0VDX1NISUZULCBzbmZpLT5yZWdzICsgTkZJX0NPTik7CisrCXJlZyA9IHJlYWR3KHNuZmktPnJlZ3MgKyBORklfQ05GRyk7CisrCXJlZyB8PSBDTkZHX1JFQURfRU4gfCBDTkZHX0RNQV9CVVJTVF9FTiB8IENORkdfRE1BIHwgQ05GR19PUF9DVVNUOworKworKwlpZiAoIW9vYl9vbikgeworKwkJcmVnIHw9IENORkdfQVVUT19GTVRfRU4gfCBDTkZHX0hXX0VDQ19FTjsKKysJCXdyaXRldyhyZWcsIHNuZmktPnJlZ3MgKyBORklfQ05GRyk7CisrCisrCQlzbmZpLT5lY2NfY2ZnLm1vZGUgPSBFQ0NfTkZJX01PREU7CisrCQlzbmZpLT5lY2NfY2ZnLnNlY3RvcnMgPSBzZWN0b3JzOworKwkJc25maS0+ZWNjX2NmZy5vcCA9IEVDQ19ERUNPREU7CisrCQlyZXQgPSBtdGtfZWNjX2VuYWJsZShzbmZpLT5lY2MsICZzbmZpLT5lY2NfY2ZnKTsKKysJCWlmIChyZXQpIHsKKysJCQlkZXZfZXJyKHNuZmktPmRldiwgImVjYyBlbmFibGUgZmFpbGVkXG4iKTsKKysJCQkvKiBjbGVhciBORklfQ05GRyAqLworKwkJCXJlZyAmPSB+KENORkdfUkVBRF9FTiB8IENORkdfRE1BX0JVUlNUX0VOIHwgQ05GR19ETUEgfAorKwkJCQlDTkZHX0FVVE9fRk1UX0VOIHwgQ05GR19IV19FQ0NfRU4pOworKwkJCXdyaXRldyhyZWcsIHNuZmktPnJlZ3MgKyBORklfQ05GRyk7CisrCQkJZ290byBvdXQ7CisrCQl9CisrCX0gZWxzZSB7CisrCQl3cml0ZXcocmVnLCBzbmZpLT5yZWdzICsgTkZJX0NORkcpOworKwl9CisrCisrCXdyaXRlbChsb3dlcl8zMl9iaXRzKGRtYV9hZGRyKSwgc25maS0+cmVncyArIE5GSV9TVFJBRERSKTsKKysJcmVhZHcoc25maS0+cmVncyArIE5GSV9JTlRSX1NUQSk7CisrCXdyaXRldyhJTlRSX0FIQl9ET05FX0VOLCBzbmZpLT5yZWdzICsgTkZJX0lOVFJfRU4pOworKworKwlpbml0X2NvbXBsZXRpb24oJnNuZmktPmRvbmUpOworKworKwkvKiBzZXQgZHVtbXkgY29tbWFuZCB0byB0cmlnZ2VyIE5GSSBlbnRlciBTUEkgbW9kZSAqLworKwl3cml0ZXcoTkFORF9DTURfRFVNTVlSRUFELCBzbmZpLT5yZWdzICsgTkZJX0NNRCk7CisrCXJlZyA9IHJlYWRsKHNuZmktPnJlZ3MgKyBORklfQ09OKSB8IENPTl9CUkQ7CisrCXdyaXRldyhyZWcsIHNuZmktPnJlZ3MgKyBORklfQ09OKTsKKysKKysJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZzbmZpLT5kb25lLCBtc2Vjc190b19qaWZmaWVzKDUwMCkpOworKwlpZiAoIXJldCkgeworKwkJZGV2X2VycihzbmZpLT5kZXYsICJyZWFkIGFoYiBkb25lIHRpbWVvdXRcbiIpOworKwkJd3JpdGV3KDAsIHNuZmktPnJlZ3MgKyBORklfSU5UUl9FTik7CisrCQlyZXQgPSAtRVRJTUVET1VUOworKwkJZ290byBvdXQ7CisrCX0KKysKKysJcmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0X2F0b21pYyhzbmZpLT5yZWdzICsgTkZJX0JZVEVMRU4sIHJlZywKKysJCQkJCUFERFJDTlRSX1NFQyhyZWcpID49IHNlY3RvcnMsIDEwLAorKwkJCQkJTVRLX1RJTUVPVVQpOworKwlpZiAocmV0IDwgMCkgeworKwkJZGV2X2VycihzbmZpLT5kZXYsICJwb2xsaW5nIHJlYWQgYnl0ZSBsZW4gdGltZW91dFxuIik7CisrCQlyZXQgPSAtRUlPOworKwl9IGVsc2UgeworKwkJaWYgKCFvb2Jfb24pIHsKKysJCQlyZXQgPSBtdGtfZWNjX3dhaXRfZG9uZShzbmZpLT5lY2MsIEVDQ19ERUNPREUpOworKwkJCWlmIChyZXQpIHsKKysJCQkJZGV2X3dhcm4oc25maS0+ZGV2LCAid2FpdCBlY2MgZG9uZSB0aW1lb3V0XG4iKTsKKysJCQl9IGVsc2UgeworKwkJCQltdGtfc25maV91cGRhdGVfZWNjX3N0YXRzKG1lbSwgc25maS0+YnVmZmVyLAorKwkJCQkJCQkgIHNlY3RvcnMpOworKwkJCQltdGtfc25maV9yZWFkX2ZkbV9kYXRhKG1lbSwgc2VjdG9ycyk7CisrCQkJfQorKwkJfQorKwl9CisrCisrCWlmIChvb2Jfb24pCisrCQlnb3RvIG91dDsKKysKKysJbXRrX2VjY19kaXNhYmxlKHNuZmktPmVjYyk7Cisrb3V0OgorKwlkbWFfdW5tYXBfc2luZ2xlKHNuZmktPmRldiwgZG1hX2FkZHIsIGxlbiwgRE1BX0ZST01fREVWSUNFKTsKKysJd3JpdGVsKDAsIHNuZmktPnJlZ3MgKyBORklfQ09OKTsKKysJd3JpdGVsKDAsIHNuZmktPnJlZ3MgKyBORklfQ05GRyk7CisrCXJlZyA9IHJlYWRsKHNuZmktPnJlZ3MgKyBTTkZJX01JU0NfQ1RMKTsKKysJcmVnICY9IH5SRF9DVVNUT01fRU47CisrCXdyaXRlbChyZWcsIHNuZmktPnJlZ3MgKyBTTkZJX01JU0NfQ1RMKTsKKysKKysJcmV0dXJuIHJldDsKKyt9CisrCisrc3RhdGljIGludCBtdGtfc25maV93cml0ZV90b19jYWNoZShzdHJ1Y3Qgc3BpX21lbSAqbWVtLAorKwkJCQkgICBjb25zdCBzdHJ1Y3Qgc3BpX21lbV9vcCAqb3AsCisrCQkJCSAgIGludCBvb2Jfb24pCisreworKwlzdHJ1Y3QgbXRrX3NuZmkgKnNuZmkgPSBzcGlfY29udHJvbGxlcl9nZXRfZGV2ZGF0YShtZW0tPnNwaS0+bWFzdGVyKTsKKysJc3RydWN0IHNwaW5hbmRfZGV2aWNlICpzcGluYW5kID0gc3BpX21lbV9nZXRfZHJ2ZGF0YShtZW0pOworKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IHNwaW5hbmRfdG9fbXRkKHNwaW5hbmQpOworKwl1MzIgc2VjdG9ycyA9IG10ZC0+d3JpdGVzaXplIC8gc25maS0+Y2Fwcy0+bmFuZF9zZWNfc2l6ZTsKKysJc3RydWN0IG10a19zbmZpX25hbmRfY2hpcCAqc25maV9uYW5kID0gJnNuZmktPnNuZmlfbmFuZDsKKysJdTMyIHJlZywgbGVuLCBjb2xfYWRkciA9IDA7CisrCWRtYV9hZGRyX3QgZG1hX2FkZHI7CisrCWludCByZXQ7CisrCisrCWxlbiA9IHNlY3RvcnMgKiAoc25maS0+Y2Fwcy0+bmFuZF9zZWNfc2l6ZQorKwkgICAgICArIHNuZmlfbmFuZC0+c3BhcmVfcGVyX3NlY3Rvcik7CisrCisrCWRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUoc25maS0+ZGV2LCBzbmZpLT5idWZmZXIsIGxlbiwKKysJCQkJICBETUFfVE9fREVWSUNFKTsKKysJcmV0ID0gZG1hX21hcHBpbmdfZXJyb3Ioc25maS0+ZGV2LCBkbWFfYWRkcik7CisrCWlmIChyZXQpIHsKKysJCWRldl9lcnIoc25maS0+ZGV2LCAiZG1hIG1hcHBpbmcgZXJyb3JcbiIpOworKwkJcmV0dXJuIC1FSU5WQUw7CisrCX0KKysKKysJLyogc2V0IHByb2dyYW0gbG9hZCBjbWQgYW5kIGFkZHJlc3MgKi8KKysJcmVnID0gKG9wLT5jbWQub3Bjb2RlIDw8IFdSX0xPQURfQ01EX1NISUZUKTsKKysJd3JpdGVsKHJlZywgc25maS0+cmVncyArIFNORklfUEdfQ1RMMSk7CisrCXdyaXRlbChjb2xfYWRkciAmIFdSX0xPQURfQUREUl9NQVNLLCBzbmZpLT5yZWdzICsgU05GSV9QR19DVEwyKTsKKysKKysJcmVnID0gcmVhZGwoc25maS0+cmVncyArIFNORklfTUlTQ19DVEwpOworKwlyZWcgfD0gV1JfQ1VTVE9NX0VOOworKwlyZWcgJj0gfihSRF9NT0RFX01BU0sgfCBXUl9YNF9FTik7CisrCisrCWlmIChvcC0+ZGF0YS5idXN3aWR0aCA9PSA0KQorKwkJcmVnIHw9IFdSX1g0X0VOOworKwl3cml0ZWwocmVnLCBzbmZpLT5yZWdzICsgU05GSV9NSVNDX0NUTCk7CisrCisrCXdyaXRlbChsZW4gPDwgV1JfTEVOX1NISUZULCBzbmZpLT5yZWdzICsgU05GSV9NSVNDX0NUTDIpOworKwl3cml0ZXcoc2VjdG9ycyA8PCBDT05fU0VDX1NISUZULCBzbmZpLT5yZWdzICsgTkZJX0NPTik7CisrCisrCXJlZyA9IHJlYWR3KHNuZmktPnJlZ3MgKyBORklfQ05GRyk7CisrCXJlZyAmPSB+KENORkdfUkVBRF9FTiB8IENORkdfQllURV9SVyk7CisrCXJlZyB8PSBDTkZHX0RNQSB8IENORkdfRE1BX0JVUlNUX0VOIHwgQ05GR19PUF9QUk9HUkFNOworKworKwlpZiAoIW9vYl9vbikgeworKwkJcmVnIHw9IENORkdfQVVUT19GTVRfRU4gfCBDTkZHX0hXX0VDQ19FTjsKKysJCXdyaXRldyhyZWcsIHNuZmktPnJlZ3MgKyBORklfQ05GRyk7CisrCisrCQlzbmZpLT5lY2NfY2ZnLm1vZGUgPSBFQ0NfTkZJX01PREU7CisrCQlzbmZpLT5lY2NfY2ZnLm9wID0gRUNDX0VOQ09ERTsKKysJCXJldCA9IG10a19lY2NfZW5hYmxlKHNuZmktPmVjYywgJnNuZmktPmVjY19jZmcpOworKwkJaWYgKHJldCkgeworKwkJCWRldl9lcnIoc25maS0+ZGV2LCAiZWNjIGVuYWJsZSBmYWlsZWRcbiIpOworKwkJCS8qIGNsZWFyIE5GSV9DTkZHICovCisrCQkJcmVnICY9IH4oQ05GR19ETUFfQlVSU1RfRU4gfCBDTkZHX0RNQSB8CisrCQkJCQlDTkZHX0FVVE9fRk1UX0VOIHwgQ05GR19IV19FQ0NfRU4pOworKwkJCXdyaXRldyhyZWcsIHNuZmktPnJlZ3MgKyBORklfQ05GRyk7CisrCQkJZG1hX3VubWFwX3NpbmdsZShzbmZpLT5kZXYsIGRtYV9hZGRyLCBsZW4sCisrCQkJCQkgRE1BX0ZST01fREVWSUNFKTsKKysJCQlnb3RvIG91dDsKKysJCX0KKysJCS8qIHdyaXRlIE9PQiBpbnRvIHRoZSBGRE0gcmVnaXN0ZXJzIChPT0IgYXJlYSBpbiBNVEsgTkFORCkgKi8KKysJCW10a19zbmZpX3dyaXRlX2ZkbV9kYXRhKG1lbSwgc2VjdG9ycyk7CisrCX0gZWxzZSB7CisrCQl3cml0ZXcocmVnLCBzbmZpLT5yZWdzICsgTkZJX0NORkcpOworKwl9CisrCXdyaXRlbChsb3dlcl8zMl9iaXRzKGRtYV9hZGRyKSwgc25maS0+cmVncyArIE5GSV9TVFJBRERSKTsKKysJcmVhZHcoc25maS0+cmVncyArIE5GSV9JTlRSX1NUQSk7CisrCXdyaXRldyhJTlRSX0FIQl9ET05FX0VOLCBzbmZpLT5yZWdzICsgTkZJX0lOVFJfRU4pOworKworKwlpbml0X2NvbXBsZXRpb24oJnNuZmktPmRvbmUpOworKworKwkvKiBzZXQgZHVtbXkgY29tbWFuZCB0byB0cmlnZ2VyIE5GSSBlbnRlciBTUEkgbW9kZSAqLworKwl3cml0ZXcoTkFORF9DTURfRFVNTVlQUk9HLCBzbmZpLT5yZWdzICsgTkZJX0NNRCk7CisrCXJlZyA9IHJlYWRsKHNuZmktPnJlZ3MgKyBORklfQ09OKSB8IENPTl9CV1I7CisrCXdyaXRldyhyZWcsIHNuZmktPnJlZ3MgKyBORklfQ09OKTsKKysKKysJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZzbmZpLT5kb25lLCBtc2Vjc190b19qaWZmaWVzKDUwMCkpOworKwlpZiAoIXJldCkgeworKwkJZGV2X2VycihzbmZpLT5kZXYsICJjdXN0b20gcHJvZ3JhbSBkb25lIHRpbWVvdXRcbiIpOworKwkJd3JpdGV3KDAsIHNuZmktPnJlZ3MgKyBORklfSU5UUl9FTik7CisrCQlyZXQgPSAtRVRJTUVET1VUOworKwkJZ290byBlY2NfZGlzYWJsZTsKKysJfQorKworKwlyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXRfYXRvbWljKHNuZmktPnJlZ3MgKyBORklfQUREUkNOVFIsIHJlZywKKysJCQkJCUFERFJDTlRSX1NFQyhyZWcpID49IHNlY3RvcnMsCisrCQkJCQkxMCwgTVRLX1RJTUVPVVQpOworKwlpZiAocmV0KQorKwkJZGV2X2VycihzbmZpLT5kZXYsICJod2VjYyB3cml0ZSB0aW1lb3V0XG4iKTsKKysKKytlY2NfZGlzYWJsZToKKysJbXRrX2VjY19kaXNhYmxlKHNuZmktPmVjYyk7CisrCisrb3V0OgorKwlkbWFfdW5tYXBfc2luZ2xlKHNuZmktPmRldiwgZG1hX2FkZHIsIGxlbiwgRE1BX1RPX0RFVklDRSk7CisrCXdyaXRlbCgwLCBzbmZpLT5yZWdzICsgTkZJX0NPTik7CisrCXdyaXRlbCgwLCBzbmZpLT5yZWdzICsgTkZJX0NORkcpOworKwlyZWcgPSByZWFkbChzbmZpLT5yZWdzICsgU05GSV9NSVNDX0NUTCk7CisrCXJlZyAmPSB+V1JfQ1VTVE9NX0VOOworKwl3cml0ZWwocmVnLCBzbmZpLT5yZWdzICsgU05GSV9NSVNDX0NUTCk7CisrCisrCXJldHVybiByZXQ7CisrfQorKworK3N0YXRpYyBpbnQgbXRrX3NuZmlfcmVhZChzdHJ1Y3Qgc3BpX21lbSAqbWVtLAorKwkJCSBjb25zdCBzdHJ1Y3Qgc3BpX21lbV9vcCAqb3ApCisreworKwlzdHJ1Y3Qgc3BpbmFuZF9kZXZpY2UgKnNwaW5hbmQgPSBzcGlfbWVtX2dldF9kcnZkYXRhKG1lbSk7CisrCXN0cnVjdCBtdGtfc25maSAqc25maSA9IHNwaV9jb250cm9sbGVyX2dldF9kZXZkYXRhKG1lbS0+c3BpLT5tYXN0ZXIpOworKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IHNwaW5hbmRfdG9fbXRkKHNwaW5hbmQpOworKwlzdHJ1Y3QgbXRrX3NuZmlfbmFuZF9jaGlwICpzbmZpX25hbmQgPSAmc25maS0+c25maV9uYW5kOworKwl1MzIgY29sX2FkZHIgPSBvcC0+YWRkci52YWw7CisrCWludCBpLCByZXQsIHNlY3RvcnMsIG9vYl9vbiA9IGZhbHNlOworKworKwlpZiAoY29sX2FkZHIgPT0gbXRkLT53cml0ZXNpemUpCisrCQlvb2Jfb24gPSB0cnVlOworKworKwlyZXQgPSBtdGtfc25maV9yZWFkX2Zyb21fY2FjaGUobWVtLCBvcCwgb29iX29uKTsKKysJaWYgKHJldCkgeworKwkJZGV2X3dhcm4oc25maS0+ZGV2LCAicmVhZCBmcm9tIGNhY2hlIGZhaWxcbiIpOworKwkJcmV0dXJuIHJldDsKKysJfQorKworKwlzZWN0b3JzID0gbXRkLT53cml0ZXNpemUgLyBzbmZpLT5jYXBzLT5uYW5kX3NlY19zaXplOworKwlmb3IgKGkgPSAwOyBpIDwgc2VjdG9yczsgaSsrKSB7CisrCQlpZiAob29iX29uKQorKwkJCW1lbWNweShvb2JfcHRyKG1lbSwgaSksCisrCQkJICAgICAgIG10a19vb2JfcHRyKG1lbSwgc25maS0+YnVmZmVyLCBpKSwKKysJCQkgICAgICAgc25maS0+Y2Fwcy0+bmFuZF9mZG1fc2l6ZSk7CisrCisrCQlpZiAoaSA9PSBzbmZpX25hbmQtPmJhZF9tYXJrLnNlYyAmJiBzbmZpLT5jYXBzLT5iYWRfbWFya19zd2FwKQorKwkJCXNuZmlfbmFuZC0+YmFkX21hcmsuYm1fc3dhcChtZW0sIHNuZmktPmJ1ZmZlciwKKysJCQkJCQkJb29iX29uKTsKKysJfQorKworKwlpZiAoIW9vYl9vbikKKysJCW1lbWNweShzcGluYW5kLT5kYXRhYnVmLCBzbmZpLT5idWZmZXIsIG10ZC0+d3JpdGVzaXplKTsKKysKKysJcmV0dXJuIHJldDsKKyt9CisrCisrc3RhdGljIGludCBtdGtfc25maV93cml0ZShzdHJ1Y3Qgc3BpX21lbSAqbWVtLAorKwkJCSAgY29uc3Qgc3RydWN0IHNwaV9tZW1fb3AgKm9wKQorK3sKKysJc3RydWN0IHNwaW5hbmRfZGV2aWNlICpzcGluYW5kID0gc3BpX21lbV9nZXRfZHJ2ZGF0YShtZW0pOworKwlzdHJ1Y3QgbXRrX3NuZmkgKnNuZmkgPSBzcGlfY29udHJvbGxlcl9nZXRfZGV2ZGF0YShtZW0tPnNwaS0+bWFzdGVyKTsKKysJc3RydWN0IG10ZF9pbmZvICptdGQgPSBzcGluYW5kX3RvX210ZChzcGluYW5kKTsKKysJc3RydWN0IG10a19zbmZpX25hbmRfY2hpcCAqc25maV9uYW5kID0gJnNuZmktPnNuZmlfbmFuZDsKKysJdTMyIHJldCwgaSwgc2VjdG9ycywgY29sX2FkZHIgPSBvcC0+YWRkci52YWw7CisrCWludCBvb2Jfb24gPSBmYWxzZTsKKysKKysJaWYgKGNvbF9hZGRyID09IG10ZC0+d3JpdGVzaXplKQorKwkJb29iX29uID0gdHJ1ZTsKKysKKysJc2VjdG9ycyA9IG10ZC0+d3JpdGVzaXplIC8gc25maS0+Y2Fwcy0+bmFuZF9zZWNfc2l6ZTsKKysJbWVtc2V0KHNuZmktPmJ1ZmZlciwgMHhmZiwgbXRkLT53cml0ZXNpemUgKyBtdGQtPm9vYnNpemUpOworKworKwlpZiAoIW9vYl9vbikKKysJCW1lbWNweShzbmZpLT5idWZmZXIsIHNwaW5hbmQtPmRhdGFidWYsIG10ZC0+d3JpdGVzaXplKTsKKysKKysJZm9yIChpID0gMDsgaSA8IHNlY3RvcnM7IGkrKykgeworKwkJaWYgKGkgPT0gc25maV9uYW5kLT5iYWRfbWFyay5zZWMgJiYgc25maS0+Y2Fwcy0+YmFkX21hcmtfc3dhcCkKKysJCQlzbmZpX25hbmQtPmJhZF9tYXJrLmJtX3N3YXAobWVtLCBzbmZpLT5idWZmZXIsIG9vYl9vbik7CisrCisrCQlpZiAob29iX29uKQorKwkJCW1lbWNweShtdGtfb29iX3B0cihtZW0sIHNuZmktPmJ1ZmZlciwgaSksCisrCQkJICAgICAgIG9vYl9wdHIobWVtLCBpKSwKKysJCQkgICAgICAgc25maS0+Y2Fwcy0+bmFuZF9mZG1fc2l6ZSk7CisrCX0KKysKKysJcmV0ID0gbXRrX3NuZmlfd3JpdGVfdG9fY2FjaGUobWVtLCBvcCwgb29iX29uKTsKKysJaWYgKHJldCkKKysJCWRldl93YXJuKHNuZmktPmRldiwgIndyaXRlIHRvIGNhY2hlIGZhaWxcbiIpOworKworKwlyZXR1cm4gcmV0OworK30KKysKKytzdGF0aWMgaW50IG10a19zbmZpX2NvbW1hbmRfZXhlYyhzdHJ1Y3QgbXRrX3NuZmkgKnNuZmksCisrCQkJCSBjb25zdCB1OCAqdHhidWYsIHU4ICpyeGJ1ZiwKKysJCQkJIGNvbnN0IHUzMiB0eGxlbiwgY29uc3QgdTMyIHJ4bGVuKQorK3sKKysJdTMyIHRtcCwgaSwgaiwgcmVnLCBtOworKwl1OCAqcF90bXAgPSAodTggKikoJnRtcCk7CisrCWludCByZXQgPSAwOworKworKwkvKiBNb3ZpbmcgdHggZGF0YSB0byBORklfU1BJIEdQUkFNICovCisrCWZvciAoaSA9IDAsIG0gPSAwOyBpIDwgdHhsZW47ICkgeworKwkJZm9yIChqID0gMCwgdG1wID0gMDsgaSA8IHR4bGVuICYmIGogPCA0OyBpKyssIGorKykKKysJCQlwX3RtcFtqXSA9IHR4YnVmW2ldOworKworKwkJd3JpdGVsKHRtcCwgc25maS0+cmVncyArIFNORklfR1BSQU1fREFUQSArIG0pOworKwkJbSArPSA0OworKwl9CisrCisrCXdyaXRlbCh0eGxlbiwgc25maS0+cmVncyArIFNORklfTUFDX09VVEwpOworKwl3cml0ZWwocnhsZW4sIHNuZmktPnJlZ3MgKyBTTkZJX01BQ19JTkwpOworKwlyZXQgPSBtdGtfc25maV9tYWNfb3Aoc25maSk7CisrCWlmIChyZXQpCisrCQlyZXR1cm4gcmV0OworKworKwkvKiBGb3IgTlVMTCBpbnB1dCBkYXRhLCB0aGlzIGxvb3Agd2lsbCBiZSBza2lwcGVkICovCisrCWlmIChyeGxlbikKKysJCWZvciAoaSA9IDAsIG0gPSAwOyBpIDwgcnhsZW47ICkgeworKwkJCXJlZyA9IHJlYWRsKHNuZmktPnJlZ3MgKworKwkJCQkJICAgIFNORklfR1BSQU1fREFUQSArIG0pOworKwkJCWZvciAoaiA9IDA7IGkgPCByeGxlbiAmJiBqIDwgNDsgaSsrLCBqKyssIHJ4YnVmKyspIHsKKysJCQkJaWYgKG0gPT0gMCAmJiBpID09IDApCisrCQkJCQlqID0gaSArIHR4bGVuOworKwkJCQkqcnhidWYgPSAocmVnID4+IChqICogOCkpICYgMHhGRjsKKysJCQl9CisrCQkJbSArPSA0OworKwkJfQorKworKwlyZXR1cm4gcmV0OworK30KKysKKysvKgorKyAqIG10a19zbmZpX2V4ZWNfb3AgLSB0byBwcm9jZXNzIGNvbW1hbmQvZGF0YSB0byBzZW5kIHRvIHRoZQorKyAqIFNQSSBOQU5EIGJ5IG10ayBjb250cm9sbGVyCisrICovCisrc3RhdGljIGludCBtdGtfc25maV9leGVjX29wKHN0cnVjdCBzcGlfbWVtICptZW0sCisrCQkJICAgIGNvbnN0IHN0cnVjdCBzcGlfbWVtX29wICpvcCkKKysKKyt7CisrCXN0cnVjdCBtdGtfc25maSAqc25maSA9IHNwaV9jb250cm9sbGVyX2dldF9kZXZkYXRhKG1lbS0+c3BpLT5tYXN0ZXIpOworKwlzdHJ1Y3Qgc3BpbmFuZF9kZXZpY2UgKnNwaW5hbmQgPSBzcGlfbWVtX2dldF9kcnZkYXRhKG1lbSk7CisrCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gc3BpbmFuZF90b19tdGQoc3BpbmFuZCk7CisrCXN0cnVjdCBuYW5kX2RldmljZSAqbmFuZCA9IG10ZF90b19uYW5kZGV2KG10ZCk7CisrCWNvbnN0IHN0cnVjdCBzcGlfbWVtX29wICpyZWFkX2NhY2hlOworKwljb25zdCBzdHJ1Y3Qgc3BpX21lbV9vcCAqd3JpdGVfY2FjaGU7CisrCWNvbnN0IHN0cnVjdCBzcGlfbWVtX29wICp1cGRhdGVfY2FjaGU7CisrCXUzMiB0bXBidWZzaXplLCB0eGxlbiA9IDAsIHJ4bGVuID0gMDsKKysJdTggKnR4YnVmLCAqcnhidWYgPSBOVUxMLCAqYnVmOworKwlpbnQgaSwgcmV0ID0gMDsKKysJCisrCXJldCA9IG10a19zbmZpX3Jlc2V0KHNuZmkpOworKwlpZiAocmV0KSB7CisrCQlkZXZfd2FybihzbmZpLT5kZXYsICJyZXNldCBzcGkgbWVtb3J5IGNvbnRyb2xsZXIgZmFpbFxuIik7CisrCQlyZXR1cm4gcmV0OworKwl9CisrCisrCS8qaWYgYmJ0IGluaXRpYWwsIGZyYW1ld29yayBoYXZlIGRldGVjdCBuYW5kIGluZm9ybWF0aW9uICovCisrCWlmIChuYW5kLT5iYnQuY2FjaGUpIHsKKysJCXJlYWRfY2FjaGUgPSBzcGluYW5kLT5vcF90ZW1wbGF0ZXMucmVhZF9jYWNoZTsKKysJCXdyaXRlX2NhY2hlID0gc3BpbmFuZC0+b3BfdGVtcGxhdGVzLndyaXRlX2NhY2hlOworKwkJdXBkYXRlX2NhY2hlID0gc3BpbmFuZC0+b3BfdGVtcGxhdGVzLnVwZGF0ZV9jYWNoZTsKKysKKysJCXJldCA9IG10a19zbmZpX2h3X3J1bnRpbWVfY29uZmlnKG1lbSk7CisrCQlpZiAocmV0KQorKwkJCXJldHVybiByZXQ7CisrCisrCQkvKiBGb3IgUmVhZC9Xcml0ZSB3aXRoIGNhY2hlLCBFcmFzZSB1c2UgZnJhbWV3b3JrIGZsb3cgKi8KKysJCWlmIChvcC0+Y21kLm9wY29kZSA9PSByZWFkX2NhY2hlLT5jbWQub3Bjb2RlKSB7CisrCQkJcmV0ID0gbXRrX3NuZmlfcmVhZChtZW0sIG9wKTsKKysJCQlpZiAocmV0KQorKwkJCQlkZXZfd2FybihzbmZpLT5kZXYsICJzbmZpIHJlYWQgZmFpbFxuIik7CisrCQkJCisrCQkJcmV0dXJuIHJldDsKKysJCX0gZWxzZSBpZiAoKG9wLT5jbWQub3Bjb2RlID09IHdyaXRlX2NhY2hlLT5jbWQub3Bjb2RlKQorKwkJCSAgICAgICAJfHwgKG9wLT5jbWQub3Bjb2RlID09IHVwZGF0ZV9jYWNoZS0+Y21kLm9wY29kZSkpIHsKKysJCQlyZXQgPSBtdGtfc25maV93cml0ZShtZW0sIG9wKTsKKysJCQlpZiAocmV0KQorKwkJCQlkZXZfd2FybihzbmZpLT5kZXYsICJzbmZpIHdyaXRlIGZhaWxcbiIpOworKwkJCQorKwkJCXJldHVybiByZXQ7CisrCQl9CisrCX0KKysKKysJdG1wYnVmc2l6ZSA9IHNpemVvZihvcC0+Y21kLm9wY29kZSkgKyBvcC0+YWRkci5uYnl0ZXMgKworKwkJICAgICBvcC0+ZHVtbXkubmJ5dGVzICsgb3AtPmRhdGEubmJ5dGVzOworKworKwl0eGJ1ZiA9IGt6YWxsb2ModG1wYnVmc2l6ZSwgR0ZQX0tFUk5FTCk7CisrCWlmICghdHhidWYpCisrCQlyZXR1cm4gLUVOT01FTTsKKysKKysJdHhidWZbdHhsZW4rK10gPSBvcC0+Y21kLm9wY29kZTsKKysKKysJaWYgKG9wLT5hZGRyLm5ieXRlcykKKysJCWZvciAoaSA9IDA7IGkgPCBvcC0+YWRkci5uYnl0ZXM7IGkrKykKKysJCQl0eGJ1Zlt0eGxlbisrXSA9IG9wLT5hZGRyLnZhbCA+PgorKwkJCQkJKDggKiAob3AtPmFkZHIubmJ5dGVzIC0gaSAtIDEpKTsKKysKKysJdHhsZW4gKz0gb3AtPmR1bW15Lm5ieXRlczsKKysKKysJaWYgKG9wLT5kYXRhLmRpciA9PSBTUElfTUVNX0RBVEFfT1VUKQorKwkJZm9yIChpID0gMDsgaSA8IG9wLT5kYXRhLm5ieXRlczsgaSsrKSB7CisrCQkJYnVmID0gKHU4ICopb3AtPmRhdGEuYnVmLm91dDsKKysJCQl0eGJ1Zlt0eGxlbisrXSA9IGJ1ZltpXTsKKysJCX0KKysKKysJaWYgKG9wLT5kYXRhLmRpciA9PSBTUElfTUVNX0RBVEFfSU4pIHsKKysJCXJ4YnVmID0gKHU4ICopb3AtPmRhdGEuYnVmLmluOworKwkJcnhsZW4gKz0gb3AtPmRhdGEubmJ5dGVzOworKwl9CisrCisrCXJldCA9IG10a19zbmZpX2NvbW1hbmRfZXhlYyhzbmZpLCB0eGJ1ZiwgcnhidWYsIHR4bGVuLCByeGxlbik7CisrCWtmcmVlKHR4YnVmKTsKKysKKysJcmV0dXJuIHJldDsKKyt9CisrCisrc3RhdGljIGludCBtdGtfc25maV9pbml0KHN0cnVjdCBtdGtfc25maSAqc25maSkKKyt7CisrCWludCByZXQ7CisrCisrCS8qIFJlc2V0IHRoZSBzdGF0ZSBtYWNoaW5lIGFuZCBkYXRhIEZJRk8gKi8KKysJcmV0ID0gbXRrX3NuZmlfcmVzZXQoc25maSk7CisrCWlmIChyZXQpIHsKKysJCWRldl93YXJuKHNuZmktPmRldiwgIk1USyByZXNldCBjb250cm9sbGVyIGZhaWxcbiIpOworKwkJcmV0dXJuIHJldDsKKysJfQorKworKwlzbmZpLT5idWZmZXIgPSBkZXZtX2t6YWxsb2Moc25maS0+ZGV2LCA0MDk2ICsgMjU2LCBHRlBfS0VSTkVMKTsKKysJaWYgKCFzbmZpLT5idWZmZXIpCisrCQlyZXR1cm4gIC1FTk9NRU07CisrCisrCS8qIENsZWFyIGludGVycnVwdCwgcmVhZCBjbGVhci4gKi8KKysJcmVhZHcoc25maS0+cmVncyArIE5GSV9JTlRSX1NUQSk7CisrCXdyaXRldygwLCBzbmZpLT5yZWdzICsgTkZJX0lOVFJfRU4pOworKworKwl3cml0ZWwoMCwgc25maS0+cmVncyArIE5GSV9DT04pOworKwl3cml0ZWwoMCwgc25maS0+cmVncyArIE5GSV9DTkZHKTsKKysKKysJLyogQ2hhbmdlIHRvIE5GSV9TUEkgbW9kZS4gKi8KKysJd3JpdGVsKFNORklfTU9ERV9FTiwgc25maS0+cmVncyArIFNORklfQ05GRyk7CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IG10a19zbmZpX2NoZWNrX2J1c3dpZHRoKHU4IHdpZHRoKQorK3sKKysJc3dpdGNoICh3aWR0aCkgeworKwljYXNlIDE6CisrCWNhc2UgMjoKKysJY2FzZSA0OgorKwkJcmV0dXJuIDA7CisrCisrCWRlZmF1bHQ6CisrCQlicmVhazsKKysJfQorKworKwlyZXR1cm4gLUVOT1RTVVBQOworK30KKysKKytzdGF0aWMgYm9vbCBtdGtfc25maV9zdXBwb3J0c19vcChzdHJ1Y3Qgc3BpX21lbSAqbWVtLAorKwkJCQkgY29uc3Qgc3RydWN0IHNwaV9tZW1fb3AgKm9wKQorK3sKKysJaW50IHJldCA9IDA7CisrCisrCS8qIEZvciBNVEsgU3BpIE5hbmQgY29udHJvbGxlciwgY21kIGJ1c3dpZHRoIGp1c3Qgc3VwcG9ydCAxIGJpdCovCisrCWlmIChvcC0+Y21kLmJ1c3dpZHRoICE9IDEpCisrCQlyZXQgPSAtRU5PVFNVUFA7CisrCisrCWlmIChvcC0+YWRkci5uYnl0ZXMpCisrCQlyZXQgfD0gbXRrX3NuZmlfY2hlY2tfYnVzd2lkdGgob3AtPmFkZHIuYnVzd2lkdGgpOworKworKwlpZiAob3AtPmR1bW15Lm5ieXRlcykKKysJCXJldCB8PSBtdGtfc25maV9jaGVja19idXN3aWR0aChvcC0+ZHVtbXkuYnVzd2lkdGgpOworKworKwlpZiAob3AtPmRhdGEubmJ5dGVzKQorKwkJcmV0IHw9IG10a19zbmZpX2NoZWNrX2J1c3dpZHRoKG9wLT5kYXRhLmJ1c3dpZHRoKTsKKysKKysJaWYgKHJldCkKKysJCXJldHVybiBmYWxzZTsKKysKKysJcmV0dXJuIHRydWU7CisrfQorKworK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX2NvbnRyb2xsZXJfbWVtX29wcyBtdGtfc25maV9vcHMgPSB7CisrCS5zdXBwb3J0c19vcCA9IG10a19zbmZpX3N1cHBvcnRzX29wLAorKwkuZXhlY19vcCA9IG10a19zbmZpX2V4ZWNfb3AsCisrfTsKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IG10a19zbmZpX2NhcHMgc25maV9tdDc2MjIgPSB7CisrCS5zcGFyZV9zaXplID0gc3BhcmVfc2l6ZV9tdDc2MjIsCisrCS5udW1fc3BhcmVfc2l6ZSA9IDQsCisrCS5uYW5kX3NlY19zaXplID0gNTEyLAorKwkubmFuZF9mZG1fc2l6ZSA9IDgsCisrCS5uYW5kX2ZkbV9lY2Nfc2l6ZSA9IDEsCisrCS5lY2NfcGFyaXR5X2JpdHMgPSAxMywKKysJLnBhZ2Vmb3JtYXRfc3BhcmVfc2hpZnQgPSA0LAorKwkuYmFkX21hcmtfc3dhcCA9IDAsCisrfTsKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IG10a19zbmZpX2NhcHMgc25maV9tdDc2MjkgPSB7CisrCS5zcGFyZV9zaXplID0gc3BhcmVfc2l6ZV9tdDc2MjIsCisrCS5udW1fc3BhcmVfc2l6ZSA9IDQsCisrCS5uYW5kX3NlY19zaXplID0gNTEyLAorKwkubmFuZF9mZG1fc2l6ZSA9IDgsCisrCS5uYW5kX2ZkbV9lY2Nfc2l6ZSA9IDEsCisrCS5lY2NfcGFyaXR5X2JpdHMgPSAxMywKKysJLnBhZ2Vmb3JtYXRfc3BhcmVfc2hpZnQgPSA0LAorKwkuYmFkX21hcmtfc3dhcCA9IDEsCisrfTsKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfc25maV9pZF90YWJsZVtdID0geworKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzYyMi1zbmZpIiwgLmRhdGEgPSAmc25maV9tdDc2MjIsIH0sCisrCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NjI5LXNuZmkiLCAuZGF0YSA9ICZzbmZpX210NzYyOSwgfSwKKysJeyAgLyogc2VudGluZWwgKi8gfQorK307CisrCisrc3RhdGljIGludCBtdGtfc25maV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorK3sKKysJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKysJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKKysJc3RydWN0IHNwaV9jb250cm9sbGVyICpjdGxyOworKwlzdHJ1Y3QgbXRrX3NuZmkgKnNuZmk7CisrCXN0cnVjdCByZXNvdXJjZSAqcmVzOworKwlpbnQgcmV0ID0gMCwgaXJxOworKworKwljdGxyID0gc3BpX2FsbG9jX21hc3RlcigmcGRldi0+ZGV2LCBzaXplb2YoKnNuZmkpKTsKKysJaWYgKCFjdGxyKQorKwkJcmV0dXJuIC1FTk9NRU07CisrCisrCXNuZmkgPSBzcGlfY29udHJvbGxlcl9nZXRfZGV2ZGF0YShjdGxyKTsKKysJc25maS0+Y2FwcyA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpOworKwlzbmZpLT5kZXYgPSBkZXY7CisrCisrCXNuZmktPmVjYyA9IG9mX210a19lY2NfZ2V0KG5wKTsKKysJaWYgKElTX0VSUl9PUl9OVUxMKHNuZmktPmVjYykpCisrCQlnb3RvIGVycl9wdXRfbWFzdGVyOworKworKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworKwlzbmZpLT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKKysJaWYgKElTX0VSUihzbmZpLT5yZWdzKSkgeworKwkJcmV0ID0gUFRSX0VSUihzbmZpLT5yZWdzKTsKKysJCWdvdG8gcmVsZWFzZV9lY2M7CisrCX0KKysKKysJLyogZmluZCB0aGUgY2xvY2tzICovCisrCXNuZmktPmNsay5uZmlfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgIm5maV9jbGsiKTsKKysJaWYgKElTX0VSUihzbmZpLT5jbGsubmZpX2NsaykpIHsKKysJCWRldl9lcnIoZGV2LCAibm8gbmZpIGNsa1xuIik7CisrCQlyZXQgPSBQVFJfRVJSKHNuZmktPmNsay5uZmlfY2xrKTsKKysJCWdvdG8gcmVsZWFzZV9lY2M7CisrCX0KKysKKysJc25maS0+Y2xrLnNwaV9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAic3BpX2NsayIpOworKwlpZiAoSVNfRVJSKHNuZmktPmNsay5zcGlfY2xrKSkgeworKwkJZGV2X2VycihkZXYsICJubyBzcGkgY2xrXG4iKTsKKysJCXJldCA9IFBUUl9FUlIoc25maS0+Y2xrLnNwaV9jbGspOworKwkJZ290byByZWxlYXNlX2VjYzsKKysJfQorKworKwlyZXQgPSBtdGtfc25maV9lbmFibGVfY2xrKGRldiwgJnNuZmktPmNsayk7CisrCWlmIChyZXQpCisrCQlnb3RvIHJlbGVhc2VfZWNjOworKworKwkvKiBmaW5kIHRoZSBpcnEgKi8KKysJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKysJaWYgKGlycSA8IDApIHsKKysJCWRldl9lcnIoZGV2LCAibm8gc25maSBpcnEgcmVzb3VyY2VcbiIpOworKwkJcmV0ID0gLUVJTlZBTDsKKysJCWdvdG8gY2xrX2Rpc2FibGU7CisrCX0KKysKKysJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIGlycSwgbXRrX3NuZmlfaXJxLCAwLCAibXRrLXNuZmkiLCBzbmZpKTsKKysJaWYgKHJldCkgeworKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBzbmZpIGlycVxuIik7CisrCQlnb3RvIGNsa19kaXNhYmxlOworKwl9CisrCisrCXJldCA9IGRtYV9zZXRfbWFzayhkZXYsIERNQV9CSVRfTUFTSygzMikpOworKwlpZiAocmV0KSB7CisrCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBzZXQgZG1hIG1hc2tcbiIpOworKwkJZ290byBjbGtfZGlzYWJsZTsKKysJfQorKworKwljdGxyLT5kZXYub2Zfbm9kZSA9IG5wOworKwljdGxyLT5tZW1fb3BzID0gJm10a19zbmZpX29wczsKKysKKysJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgc25maSk7CisrCXJldCA9IG10a19zbmZpX2luaXQoc25maSk7CisrCWlmIChyZXQpIHsKKysJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGluaXQgc25maVxuIik7CisrCQlnb3RvIGNsa19kaXNhYmxlOworKwl9CisrCisrCXJldCA9IGRldm1fc3BpX3JlZ2lzdGVyX21hc3RlcihkZXYsIGN0bHIpOworKwlpZiAocmV0KQorKwkJZ290byBjbGtfZGlzYWJsZTsKKysKKysJcmV0dXJuIDA7CisrCisrY2xrX2Rpc2FibGU6CisrCW10a19zbmZpX2Rpc2FibGVfY2xrKCZzbmZpLT5jbGspOworKworK3JlbGVhc2VfZWNjOgorKwltdGtfZWNjX3JlbGVhc2Uoc25maS0+ZWNjKTsKKysKKytlcnJfcHV0X21hc3RlcjoKKysJc3BpX21hc3Rlcl9wdXQoY3Rscik7CisrCisrCWRldl9lcnIoZGV2LCAiTWVkaWFUZWsgU1BJIE5BTkQgaW50ZXJmYWNlIHByb2JlIGZhaWxlZCAlZFxuIiwgcmV0KTsKKysJcmV0dXJuIHJldDsKKyt9CisrCisrc3RhdGljIGludCBtdGtfc25maV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKKyt7CisrCXN0cnVjdCBtdGtfc25maSAqc25maSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworKworKwltdGtfc25maV9kaXNhYmxlX2Nsaygmc25maS0+Y2xrKTsKKysKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQgbXRrX3NuZmlfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCisreworKwlzdHJ1Y3QgbXRrX3NuZmkgKnNuZmkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKysKKysJbXRrX3NuZmlfZGlzYWJsZV9jbGsoJnNuZmktPmNsayk7CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IG10a19zbmZpX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorK3sKKysJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKysJc3RydWN0IG10a19zbmZpICpzbmZpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisrCWludCByZXQ7CisrCisrCXJldCA9IG10a19zbmZpX2VuYWJsZV9jbGsoZGV2LCAmc25maS0+Y2xrKTsKKysJaWYgKHJldCkKKysJCXJldHVybiByZXQ7CisrCisrCXJldCA9IG10a19zbmZpX2luaXQoc25maSk7CisrCWlmIChyZXQpCisrCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBpbml0IHNuZmkgY29udHJvbGxlclxuIik7CisrCisrCXJldHVybiByZXQ7CisrfQorKworK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19zbmZpX2RyaXZlciA9IHsKKysJLmRyaXZlciA9IHsKKysJCS5uYW1lCT0gIm10ay1zbmZpIiwKKysJCS5vZl9tYXRjaF90YWJsZSA9IG10a19zbmZpX2lkX3RhYmxlLAorKwl9LAorKwkucHJvYmUJCT0gbXRrX3NuZmlfcHJvYmUsCisrCS5yZW1vdmUJCT0gbXRrX3NuZmlfcmVtb3ZlLAorKwkuc3VzcGVuZAk9IG10a19zbmZpX3N1c3BlbmQsCisrCS5yZXN1bWUJCT0gbXRrX3NuZmlfcmVzdW1lLAorK307CisrCisrbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihtdGtfc25maV9kcml2ZXIpOworKworK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKKytNT0RVTEVfQVVUSE9SKCJYaWFuZ3NoZW5nIEhvdSA8eGlhbmdzaGVuZy5ob3VAbWVkaWF0ZWsuY29tPiIpOworK01PRFVMRV9ERVNDUklQVElPTigiTWVkaWF0ZWsgU1BJIE1lbW9yeSBJbnRlcmZhY2UgRHJpdmVyIik7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDMwNy1kdHMtbXQ3NjI5LWFkZC1zbmFuZC1zdXBwb3J0LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzAzMDctZHRzLW10NzYyOS1hZGQtc25hbmQtc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTNjMTExCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzAzMDctZHRzLW10NzYyOS1hZGQtc25hbmQtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDk3IEBACitGcm9tIGM4MTNmYmU4MDYyNTdjNTc0MjQwNzcwZWY3MTZmYmVlMTlmN2RiZmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBYaWFuZ3NoZW5nIEhvdSA8eGlhbmdzaGVuZy5ob3VAbWVkaWF0ZWsuY29tPgorRGF0ZTogVGh1LCA2IEp1biAyMDE5IDE2OjI5OjA0ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIHNwaTogc3BpLW1lbTogTWVkaWF0ZWs6IEFkZCBTUEkgTmFuZCBzdXBwb3J0IGZvciBNVDc2MjkKKworU2lnbmVkLW9mZi1ieTogWGlhbmdzaGVuZyBIb3UgPHhpYW5nc2hlbmcuaG91QG1lZGlhdGVrLmNvbT4KKy0tLQorIGFyY2gvYXJtL2Jvb3QvZHRzL210NzYyOS1yZmIuZHRzIHwgNDUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBhcmNoL2FybS9ib290L2R0cy9tdDc2MjkuZHRzaSAgICB8IDIyICsrKysrKysrKysrKysrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDc5IGluc2VydGlvbnMoKykKKworLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3NjI5LmR0c2kKKysrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL210NzYyOS5kdHNpCitAQCAtMjU4LDYgKzI1OCwyOCBAQAorIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisgCQl9OworIAorKwkJYmNoOiBlY2NAMTEwMGUwMDAgeworKwkJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NjIyLWVjYyI7CisrCQkJcmVnID0gPDB4MTEwMGUwMDAgMHgxMDAwPjsKKysJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgOTUgSVJRX1RZUEVfTEVWRUxfTE9XPjsKKysJCQljbG9ja3MgPSA8JnBlcmljZmcgQ0xLX1BFUklfTkZJRUNDX1BEPjsKKysJCQljbG9jay1uYW1lcyA9ICJuZmllY2NfY2xrIjsKKysJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworKwkJfTsKKysKKysJCXNuZmk6IHNwaUAxMTAwZDAwMCB7CisrCQkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc2Mjktc25maSI7CisrCQkJcmVnID0gPDB4MTEwMGQwMDAgMHgxMDAwPjsKKysJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgOTYgSVJRX1RZUEVfTEVWRUxfTE9XPjsKKysJCQljbG9ja3MgPSA8JnBlcmljZmcgQ0xLX1BFUklfTkZJX1BEPiwKKysJCQkJIDwmcGVyaWNmZyBDTEtfUEVSSV9TTkZJX1BEPjsKKysJCQljbG9jay1uYW1lcyA9ICJuZmlfY2xrIiwgInNwaV9jbGsiOworKwkJCWVjYy1lbmdpbmUgPSA8JmJjaD47CisrCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisrCQkJI3NpemUtY2VsbHMgPSA8MD47CisrCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKysJCX07CisrCisgCQlzcGk6IHNwaUAxMTAwYTAwMCB7CisgCQkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc2Mjktc3BpIiwKKyAJCQkJICAgICAibWVkaWF0ZWssbXQ3NjIyLXNwaSI7CistLS0gYS9hcmNoL2FybS9ib290L2R0cy9tdDc2MjktcmZiLmR0cworKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3NjI5LXJmYi5kdHMKK0BAIC0yNzYsNiArMjc2LDUyIEBACisgCX07CisgfTsKKyAKKysmYmNoIHsKKysJc3RhdHVzID0gIm9rYXkiOworK307CisrCisrJnNuZmkgeworKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworKwlwaW5jdHJsLTAgPSA8JnNlcmlhbF9uYW5kX3BpbnM+OworKwlzdGF0dXMgPSAib2theSI7CisrCisrCXNwaV9uYW5kQDAgeworKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisrCQkjc2l6ZS1jZWxscyA9IDwxPjsKKysJCWNvbXBhdGlibGUgPSAic3BpLW5hbmQiOworKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8MTA0MDAwMDAwPjsKKysJCXJlZyA9IDwwPjsKKysKKysJCXBhcnRpdGlvbnMgeworKwkJY29tcGF0aWJsZSA9ICJmaXhlZC1wYXJ0aXRpb25zIjsKKysJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworKwkJI3NpemUtY2VsbHMgPSA8MT47CisrCisrCQlwYXJ0aXRpb25AMCB7CisrCQkJbGFiZWwgPSAiQm9vdGxvYWRlciI7CisrCQkJcmVnID0gPDB4MDAwMDAgMHgwMTAwMDAwPjsKKysJCQlyZWFkLW9ubHk7CisrCQl9OworKworKwkJcGFydGl0aW9uQDEwMDAwMCB7CisrCQkJbGFiZWwgPSAiQ29uZmlnIjsKKysJCQlyZWcgPSA8MHgxMDAwMDAgMHgwMDQwMDAwPjsKKysJCX07CisrCisrCQlwYXJ0aXRpb25AMTQwMDAwIHsKKysJCQlsYWJlbCA9ICJmYWN0b3J5IjsKKysJCQlyZWcgPSA8MHgxNDAwMDAgMHgwMDgwMDAwPjsKKysJCX07CisrCisrCQlwYXJ0aXRpb25AMWMwMDAwIHsKKysJCQlsYWJlbCA9ICJmaXJtd2FyZSI7CisrCQkJcmVnID0gPDB4MWMwMDAwIDB4MTAwMDAwMD47CisrCQl9OworKworKwkJfTsKKysJfTsKKyt9OworKworICZzcGkgeworIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworIAlwaW5jdHJsLTAgPSA8JnNwaV9waW5zPjsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wMzA4LWR0cy1tdDc2MjItYWRkLXNuYW5kLXN1cHBvcnQucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDMwOC1kdHMtbXQ3NjIyLWFkZC1zbmFuZC1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyODc3ODAKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDMwOC1kdHMtbXQ3NjIyLWFkZC1zbmFuZC1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsOTYgQEAKKy0tLSBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3NjIyLmR0c2kKKysrKyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3NjIyLmR0c2kKK0BAIC01NTQsNiArNTU0LDE5IEBACisgCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworIAl9OworIAorKwlzbmZpOiBzcGlAMTEwMGQwMDAgeworKwkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc2MjItc25maSI7CisrCQlyZWcgPSA8MCAweDExMDBkMDAwIDAgMHgxMDAwPjsKKysJCWludGVycnVwdHMgPSA8R0lDX1NQSSA5NiBJUlFfVFlQRV9MRVZFTF9MT1c+OworKwkJY2xvY2tzID0gPCZwZXJpY2ZnIENMS19QRVJJX05GSV9QRD4sCisrCQkJIDwmcGVyaWNmZyBDTEtfUEVSSV9TTkZJX1BEPjsKKysJCWNsb2NrLW5hbWVzID0gIm5maV9jbGsiLCAic3BpX2NsayI7CisrCQllY2MtZW5naW5lID0gPCZiY2g+OworKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisrCQkjc2l6ZS1jZWxscyA9IDwwPjsKKysJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisrCX07CisrCisgCW5vcl9mbGFzaDogc3BpQDExMDE0MDAwIHsKKyAJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NjIyLW5vciIsCisgCQkJICAgICAibWVkaWF0ZWssbXQ4MTczLW5vciI7CistLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210NzYyMi1yZmIxLmR0cworKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc2MjItcmZiMS5kdHMKK0BAIC05OSw3ICs5OSw3IEBACisgfTsKKyAKKyAmYmNoIHsKKy0Jc3RhdHVzID0gImRpc2FibGVkIjsKKysJc3RhdHVzID0gIm9rYXkiOworIH07CisgCisgJmJ0aWYgeworQEAgLTU1MSw2ICs1NTEsNjIgQEAKKyAJc3RhdHVzID0gImRpc2FibGUiOworIH07CisgCisrJnNuZmkgeworKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworKwlwaW5jdHJsLTAgPSA8JnNlcmlhbF9uYW5kX3BpbnM+OworKwlzdGF0dXMgPSAib2theSI7CisrCisrCXNwaV9uYW5kQDAgeworKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisrCQkjc2l6ZS1jZWxscyA9IDwxPjsKKysJCWNvbXBhdGlibGUgPSAic3BpLW5hbmQiOworKwkJc3BpLW1heC1mcmVxdWVuY3kgPSA8MTA0MDAwMDAwPjsKKysJCXJlZyA9IDwwPjsKKysKKysJCXBhcnRpdGlvbnMgeworKwkJCWNvbXBhdGlibGUgPSAiZml4ZWQtcGFydGl0aW9ucyI7CisrCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisrCQkJI3NpemUtY2VsbHMgPSA8MT47CisrCisrCQkJcGFydGl0aW9uQDAgeworKwkJCQlsYWJlbCA9ICJQcmVsb2FkZXIiOworKwkJCQlyZWcgPSA8MHgwMDAwMCAweDAwODAwMDA+OworKwkJCQlyZWFkLW9ubHk7CisrCQkJfTsKKysKKysJCQlwYXJ0aXRpb25AODAwMDAgeworKwkJCQlsYWJlbCA9ICJBVEYiOworKwkJCQlyZWcgPSA8MHg4MDAwMCAweDAwNDAwMDA+OworKwkJCX07CisrCisrCQkJcGFydGl0aW9uQGMwMDAwIHsKKysJCQkJbGFiZWwgPSAiQm9vdGxvYWRlciI7CisrCQkJCXJlZyA9IDwweGMwMDAwIDB4MDA4MDAwMD47CisrCQkJfTsKKysKKysJCQlwYXJ0aXRpb25AMTQwMDAwIHsKKysJCQkJbGFiZWwgPSAiQ29uZmlnIjsKKysJCQkJcmVnID0gPDB4MTQwMDAwIDB4MDA4MDAwMD47CisrCQkJfTsKKysKKysJCQlwYXJ0aXRpb25AMWMwMDAwIHsKKysJCQkJbGFiZWwgPSAiRmFjdG9yeSI7CisrCQkJCXJlZyA9IDwweDFjMDAwMCAweDAwNDAwMDA+OworKwkJCX07CisrCisrCQkJcGFydGl0aW9uQDIwMDAwMCB7CisrCQkJCWxhYmVsID0gImZpcm13YXJlIjsKKysJCQkJcmVnID0gPDB4MjAwMDAwIDB4MjAwMDAwMD47CisrCQkJfTsKKysKKysJCQlwYXJ0aXRpb25AMjIwMDAwMCB7CisrCQkJCWxhYmVsID0gIlVzZXJfZGF0YSI7CisrCQkJCXJlZyA9IDwweDIyMDAwMDAgMHg0MDAwMDAwPjsKKysJCQl9OworKwkJfTsKKysJfTsKKyt9OworKworICZzcGkwIHsKKyAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKyAJcGluY3RybC0wID0gPCZzcGljMF9waW5zPjsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wMzEwLWR0cy1hZGQtd21hYy1zdXBwb3J0LWZvci1tdDc2MjItcmZiMS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wMzEwLWR0cy1hZGQtd21hYy1zdXBwb3J0LWZvci1tdDc2MjItcmZiMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGFlZDg5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzAzMTAtZHRzLWFkZC13bWFjLXN1cHBvcnQtZm9yLW10NzYyMi1yZmIxLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKKy0tLSBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3NjIyLmR0c2kKKysrKyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3NjIyLmR0c2kKK0BAIC03MTYsNiArNzE2LDE3IEBACisgCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworIAl9OworIAorKwl3bWFjOiB3bWFjQDE4MDAwMDAwIHsKKysJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NjIyLXdtYWMiOworKwkJcmVnID0gPDAgMHgxODAwMDAwMCAwIDB4MTAwMDAwPjsKKysJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyMTEgSVJRX1RZUEVfTEVWRUxfTE9XPjsKKysKKysJCW1lZGlhdGVrLGluZnJhY2ZnID0gPCZpbmZyYWNmZz47CisrCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworKworKwkJcG93ZXItZG9tYWlucyA9IDwmc2Nwc3lzIE1UNzYyMl9QT1dFUl9ET01BSU5fV0I+OworKwl9OworKworIAlzc3VzYnN5czogc3N1c2JzeXNAMWEwMDAwMDAgeworIAkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc2MjItc3N1c2JzeXMiLAorIAkJCSAgICAgInN5c2NvbiI7CistLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210NzYyMi1yZmIxLmR0cworKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc2MjItcmZiMS5kdHMKK0BAIC01ODksNyArNTg5LDcgQEAKKyAJCQkJcmVnID0gPDB4MTQwMDAwIDB4MDA4MDAwMD47CisgCQkJfTsKKyAKKy0JCQlwYXJ0aXRpb25AMWMwMDAwIHsKKysJCQlmYWN0b3J5OiBwYXJ0aXRpb25AMWMwMDAwIHsKKyAJCQkJbGFiZWwgPSAiRmFjdG9yeSI7CisgCQkJCXJlZyA9IDwweDFjMDAwMCAweDAwNDAwMDA+OworIAkJCX07CitAQCAtNjQ2LDMgKzY0Niw4IEBACisgCXBpbmN0cmwtMCA9IDwmd2F0Y2hkb2dfcGlucz47CisgCXN0YXR1cyA9ICJva2F5IjsKKyB9OworKworKyZ3bWFjIHsKKysJbWVkaWF0ZWssbXRkLWVlcHJvbSA9IDwmZmFjdG9yeSAweDAwMDA+OworKwlzdGF0dXMgPSAib2theSI7CisrfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wNDAwLXNvdW5kLWFkZC1zb21lLWhlbHBlcnMtdG8tY29udHJvbC1tdGtfbWVtaWYucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDQwMC1zb3VuZC1hZGQtc29tZS1oZWxwZXJzLXRvLWNvbnRyb2wtbXRrX21lbWlmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZWI1YTQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDQwMC1zb3VuZC1hZGQtc29tZS1oZWxwZXJzLXRvLWNvbnRyb2wtbXRrX21lbWlmLnBhdGNoCkBAIC0wLDAgKzEsMzEzIEBACistLS0gYS9zb3VuZC9zb2MvbWVkaWF0ZWsvY29tbW9uL210ay1hZmUtZmUtZGFpLmMKKysrKyBiL3NvdW5kL3NvYy9tZWRpYXRlay9jb21tb24vbXRrLWFmZS1mZS1kYWkuYworQEAgLTM2MSw2ICszNjEsMjIyIEBACisgfQorIEVYUE9SVF9TWU1CT0xfR1BMKG10a19hZmVfZGFpX3Jlc3VtZSk7CisgCisraW50IG10a19tZW1pZl9zZXRfZW5hYmxlKHN0cnVjdCBtdGtfYmFzZV9hZmUgKmFmZSwgaW50IGlkKQorK3sKKysJc3RydWN0IG10a19iYXNlX2FmZV9tZW1pZiAqbWVtaWYgPSAmYWZlLT5tZW1pZltpZF07CisrCisrCWlmIChtZW1pZi0+ZGF0YS0+ZW5hYmxlX3NoaWZ0IDwgMCkgeworKwkJZGV2X3dhcm4oYWZlLT5kZXYsICIlcygpLCBlcnJvciwgaWQgJWQsIGVuYWJsZV9zaGlmdCA8IDBcbiIsCisrCQkJIF9fZnVuY19fLCBpZCk7CisrCQlyZXR1cm4gMDsKKysJfQorKwlyZXR1cm4gbXRrX3JlZ21hcF91cGRhdGVfYml0cyhhZmUtPnJlZ21hcCwgbWVtaWYtPmRhdGEtPmVuYWJsZV9yZWcsCisrCQkJCSAgICAgIDEsIDEsIG1lbWlmLT5kYXRhLT5lbmFibGVfc2hpZnQpOworK30KKytFWFBPUlRfU1lNQk9MX0dQTChtdGtfbWVtaWZfc2V0X2VuYWJsZSk7CisrCisraW50IG10a19tZW1pZl9zZXRfZGlzYWJsZShzdHJ1Y3QgbXRrX2Jhc2VfYWZlICphZmUsIGludCBpZCkKKyt7CisrCXN0cnVjdCBtdGtfYmFzZV9hZmVfbWVtaWYgKm1lbWlmID0gJmFmZS0+bWVtaWZbaWRdOworKworKwlpZiAobWVtaWYtPmRhdGEtPmVuYWJsZV9zaGlmdCA8IDApIHsKKysJCWRldl93YXJuKGFmZS0+ZGV2LCAiJXMoKSwgZXJyb3IsIGlkICVkLCBlbmFibGVfc2hpZnQgPCAwXG4iLAorKwkJCSBfX2Z1bmNfXywgaWQpOworKwkJcmV0dXJuIDA7CisrCX0KKysJcmV0dXJuIG10a19yZWdtYXBfdXBkYXRlX2JpdHMoYWZlLT5yZWdtYXAsIG1lbWlmLT5kYXRhLT5lbmFibGVfcmVnLAorKwkJCQkgICAgICAxLCAwLCBtZW1pZi0+ZGF0YS0+ZW5hYmxlX3NoaWZ0KTsKKyt9CisrRVhQT1JUX1NZTUJPTF9HUEwobXRrX21lbWlmX3NldF9kaXNhYmxlKTsKKysKKytpbnQgbXRrX21lbWlmX3NldF9hZGRyKHN0cnVjdCBtdGtfYmFzZV9hZmUgKmFmZSwgaW50IGlkLAorKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgKmRtYV9hcmVhLAorKwkJICAgICAgIGRtYV9hZGRyX3QgZG1hX2FkZHIsCisrCQkgICAgICAgc2l6ZV90IGRtYV9ieXRlcykKKyt7CisrCXN0cnVjdCBtdGtfYmFzZV9hZmVfbWVtaWYgKm1lbWlmID0gJmFmZS0+bWVtaWZbaWRdOworKwlpbnQgbXNiX2F0X2JpdDMzID0gdXBwZXJfMzJfYml0cyhkbWFfYWRkcikgPyAxIDogMDsKKysJdW5zaWduZWQgaW50IHBoeXNfYnVmX2FkZHIgPSBsb3dlcl8zMl9iaXRzKGRtYV9hZGRyKTsKKysJdW5zaWduZWQgaW50IHBoeXNfYnVmX2FkZHJfdXBwZXJfMzIgPSB1cHBlcl8zMl9iaXRzKGRtYV9hZGRyKTsKKysKKysJbWVtaWYtPmRtYV9hcmVhID0gZG1hX2FyZWE7CisrCW1lbWlmLT5kbWFfYWRkciA9IGRtYV9hZGRyOworKwltZW1pZi0+ZG1hX2J5dGVzID0gZG1hX2J5dGVzOworKworKwkvKiBzdGFydCAqLworKwltdGtfcmVnbWFwX3dyaXRlKGFmZS0+cmVnbWFwLCBtZW1pZi0+ZGF0YS0+cmVnX29mc19iYXNlLAorKwkJCSBwaHlzX2J1Zl9hZGRyKTsKKysJLyogZW5kICovCisrCWlmIChtZW1pZi0+ZGF0YS0+cmVnX29mc19lbmQpCisrCQltdGtfcmVnbWFwX3dyaXRlKGFmZS0+cmVnbWFwLAorKwkJCQkgbWVtaWYtPmRhdGEtPnJlZ19vZnNfZW5kLAorKwkJCQkgcGh5c19idWZfYWRkciArIGRtYV9ieXRlcyAtIDEpOworKwllbHNlCisrCQltdGtfcmVnbWFwX3dyaXRlKGFmZS0+cmVnbWFwLAorKwkJCQkgbWVtaWYtPmRhdGEtPnJlZ19vZnNfYmFzZSArCisrCQkJCSBBRkVfQkFTRV9FTkRfT0ZGU0VULAorKwkJCQkgcGh5c19idWZfYWRkciArIGRtYV9ieXRlcyAtIDEpOworKworKwkvKiBzZXQgc3RhcnQsIGVuZCwgdXBwZXIgMzIgYml0cyAqLworKwlpZiAobWVtaWYtPmRhdGEtPnJlZ19vZnNfYmFzZV9tc2IpIHsKKysJCW10a19yZWdtYXBfd3JpdGUoYWZlLT5yZWdtYXAsIG1lbWlmLT5kYXRhLT5yZWdfb2ZzX2Jhc2VfbXNiLAorKwkJCQkgcGh5c19idWZfYWRkcl91cHBlcl8zMik7CisrCQltdGtfcmVnbWFwX3dyaXRlKGFmZS0+cmVnbWFwLAorKwkJCQkgbWVtaWYtPmRhdGEtPnJlZ19vZnNfZW5kX21zYiwKKysJCQkJIHBoeXNfYnVmX2FkZHJfdXBwZXJfMzIpOworKwl9CisrCisrCS8qIHNldCBNU0IgdG8gMzMtYml0ICovCisrCWlmIChtZW1pZi0+ZGF0YS0+bXNiX3JlZyA+PSAwKQorKwkJbXRrX3JlZ21hcF91cGRhdGVfYml0cyhhZmUtPnJlZ21hcCwgbWVtaWYtPmRhdGEtPm1zYl9yZWcsCisrCQkJCSAgICAgICAxLCBtc2JfYXRfYml0MzMsIG1lbWlmLT5kYXRhLT5tc2Jfc2hpZnQpOworKworKwlyZXR1cm4gMDsKKyt9CisrRVhQT1JUX1NZTUJPTF9HUEwobXRrX21lbWlmX3NldF9hZGRyKTsKKysKKytpbnQgbXRrX21lbWlmX3NldF9jaGFubmVsKHN0cnVjdCBtdGtfYmFzZV9hZmUgKmFmZSwKKysJCQkgIGludCBpZCwgdW5zaWduZWQgaW50IGNoYW5uZWwpCisreworKwlzdHJ1Y3QgbXRrX2Jhc2VfYWZlX21lbWlmICptZW1pZiA9ICZhZmUtPm1lbWlmW2lkXTsKKysJdW5zaWduZWQgaW50IG1vbm87CisrCisrCWlmIChtZW1pZi0+ZGF0YS0+bW9ub19zaGlmdCA8IDApCisrCQlyZXR1cm4gMDsKKysKKysJaWYgKG1lbWlmLT5kYXRhLT5xdWFkX2NoX21hc2spIHsKKysJCXVuc2lnbmVkIGludCBxdWFkX2NoID0gKGNoYW5uZWwgPT0gNCkgPyAxIDogMDsKKysKKysJCW10a19yZWdtYXBfdXBkYXRlX2JpdHMoYWZlLT5yZWdtYXAsIG1lbWlmLT5kYXRhLT5xdWFkX2NoX3JlZywKKysJCQkJICAgICAgIG1lbWlmLT5kYXRhLT5xdWFkX2NoX21hc2ssCisrCQkJCSAgICAgICBxdWFkX2NoLCBtZW1pZi0+ZGF0YS0+cXVhZF9jaF9zaGlmdCk7CisrCX0KKysKKysJaWYgKG1lbWlmLT5kYXRhLT5tb25vX2ludmVydCkKKysJCW1vbm8gPSAoY2hhbm5lbCA9PSAxKSA/IDAgOiAxOworKwllbHNlCisrCQltb25vID0gKGNoYW5uZWwgPT0gMSkgPyAxIDogMDsKKysKKysJcmV0dXJuIG10a19yZWdtYXBfdXBkYXRlX2JpdHMoYWZlLT5yZWdtYXAsIG1lbWlmLT5kYXRhLT5tb25vX3JlZywKKysJCQkJICAgICAgMSwgbW9ubywgbWVtaWYtPmRhdGEtPm1vbm9fc2hpZnQpOworK30KKytFWFBPUlRfU1lNQk9MX0dQTChtdGtfbWVtaWZfc2V0X2NoYW5uZWwpOworKworK3N0YXRpYyBpbnQgbXRrX21lbWlmX3NldF9yYXRlX2ZzKHN0cnVjdCBtdGtfYmFzZV9hZmUgKmFmZSwKKysJCQkJIGludCBpZCwgaW50IGZzKQorK3sKKysJc3RydWN0IG10a19iYXNlX2FmZV9tZW1pZiAqbWVtaWYgPSAmYWZlLT5tZW1pZltpZF07CisrCisrCWlmIChtZW1pZi0+ZGF0YS0+ZnNfc2hpZnQgPj0gMCkKKysJCW10a19yZWdtYXBfdXBkYXRlX2JpdHMoYWZlLT5yZWdtYXAsIG1lbWlmLT5kYXRhLT5mc19yZWcsCisrCQkJCSAgICAgICBtZW1pZi0+ZGF0YS0+ZnNfbWFza2JpdCwKKysJCQkJICAgICAgIGZzLCBtZW1pZi0+ZGF0YS0+ZnNfc2hpZnQpOworKworKwlyZXR1cm4gMDsKKyt9CisrCisraW50IG10a19tZW1pZl9zZXRfcmF0ZShzdHJ1Y3QgbXRrX2Jhc2VfYWZlICphZmUsCisrCQkgICAgICAgaW50IGlkLCB1bnNpZ25lZCBpbnQgcmF0ZSkKKyt7CisrCWludCBmcyA9IDA7CisrCisrCWlmICghYWZlLT5nZXRfZGFpX2ZzKSB7CisrCQlkZXZfZXJyKGFmZS0+ZGV2LCAiJXMoKSwgZXJyb3IsIGFmZS0+Z2V0X2RhaV9mcyA9PSBOVUxMXG4iLAorKwkJCV9fZnVuY19fKTsKKysJCXJldHVybiAtRUlOVkFMOworKwl9CisrCisrCWZzID0gYWZlLT5nZXRfZGFpX2ZzKGFmZSwgaWQsIHJhdGUpOworKworKwlpZiAoZnMgPCAwKQorKwkJcmV0dXJuIC1FSU5WQUw7CisrCisrCXJldHVybiBtdGtfbWVtaWZfc2V0X3JhdGVfZnMoYWZlLCBpZCwgZnMpOworK30KKytFWFBPUlRfU1lNQk9MX0dQTChtdGtfbWVtaWZfc2V0X3JhdGUpOworKworK2ludCBtdGtfbWVtaWZfc2V0X3JhdGVfc3Vic3RyZWFtKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorKwkJCQkgaW50IGlkLCB1bnNpZ25lZCBpbnQgcmF0ZSkKKyt7CisrCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKysJc3RydWN0IHNuZF9zb2NfY29tcG9uZW50ICpjb21wb25lbnQgPQorKwkJc25kX3NvY19ydGRjb21fbG9va3VwKHJ0ZCwgQUZFX1BDTV9OQU1FKTsKKysJc3RydWN0IG10a19iYXNlX2FmZSAqYWZlID0gc25kX3NvY19jb21wb25lbnRfZ2V0X2RydmRhdGEoY29tcG9uZW50KTsKKysKKysJaW50IGZzID0gMDsKKysKKysJaWYgKCFhZmUtPm1lbWlmX2ZzKSB7CisrCQlkZXZfZXJyKGFmZS0+ZGV2LCAiJXMoKSwgZXJyb3IsIGFmZS0+bWVtaWZfZnMgPT0gTlVMTFxuIiwKKysJCQlfX2Z1bmNfXyk7CisrCQlyZXR1cm4gLUVJTlZBTDsKKysJfQorKworKwlmcyA9IGFmZS0+bWVtaWZfZnMoc3Vic3RyZWFtLCByYXRlKTsKKysKKysJaWYgKGZzIDwgMCkKKysJCXJldHVybiAtRUlOVkFMOworKworKwlyZXR1cm4gbXRrX21lbWlmX3NldF9yYXRlX2ZzKGFmZSwgaWQsIGZzKTsKKyt9CisrRVhQT1JUX1NZTUJPTF9HUEwobXRrX21lbWlmX3NldF9yYXRlX3N1YnN0cmVhbSk7CisrCisraW50IG10a19tZW1pZl9zZXRfZm9ybWF0KHN0cnVjdCBtdGtfYmFzZV9hZmUgKmFmZSwKKysJCQkgaW50IGlkLCBzbmRfcGNtX2Zvcm1hdF90IGZvcm1hdCkKKyt7CisrCXN0cnVjdCBtdGtfYmFzZV9hZmVfbWVtaWYgKm1lbWlmID0gJmFmZS0+bWVtaWZbaWRdOworKwlpbnQgaGRfYXVkaW8gPSAwOworKwlpbnQgaGRfYWxpZ24gPSAwOworKworKwkvKiBzZXQgaGQgbW9kZSAqLworKwlzd2l0Y2ggKGZvcm1hdCkgeworKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgorKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfVTE2X0xFOgorKwkJaGRfYXVkaW8gPSAwOworKwkJYnJlYWs7CisrCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMzJfTEU6CisrCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9VMzJfTEU6CisrCQloZF9hdWRpbyA9IDE7CisrCQloZF9hbGlnbiA9IDE7CisrCQlicmVhazsKKysJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKKysJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1UyNF9MRToKKysJCWhkX2F1ZGlvID0gMTsKKysJCWJyZWFrOworKwlkZWZhdWx0OgorKwkJZGV2X2VycihhZmUtPmRldiwgIiVzKCkgZXJyb3I6IHVuc3VwcG9ydGVkIGZvcm1hdCAlZFxuIiwKKysJCQlfX2Z1bmNfXywgZm9ybWF0KTsKKysJCWJyZWFrOworKwl9CisrCisrCW10a19yZWdtYXBfdXBkYXRlX2JpdHMoYWZlLT5yZWdtYXAsIG1lbWlmLT5kYXRhLT5oZF9yZWcsCisrCQkJICAgICAgIDEsIGhkX2F1ZGlvLCBtZW1pZi0+ZGF0YS0+aGRfc2hpZnQpOworKworKwltdGtfcmVnbWFwX3VwZGF0ZV9iaXRzKGFmZS0+cmVnbWFwLCBtZW1pZi0+ZGF0YS0+aGRfYWxpZ25fcmVnLAorKwkJCSAgICAgICAxLCBoZF9hbGlnbiwgbWVtaWYtPmRhdGEtPmhkX2FsaWduX21zaGlmdCk7CisrCisrCXJldHVybiAwOworK30KKytFWFBPUlRfU1lNQk9MX0dQTChtdGtfbWVtaWZfc2V0X2Zvcm1hdCk7CisrCisraW50IG10a19tZW1pZl9zZXRfcGJ1Zl9zaXplKHN0cnVjdCBtdGtfYmFzZV9hZmUgKmFmZSwKKysJCQkgICAgaW50IGlkLCBpbnQgcGJ1Zl9zaXplKQorK3sKKysJY29uc3Qgc3RydWN0IG10a19iYXNlX21lbWlmX2RhdGEgKm1lbWlmX2RhdGEgPSBhZmUtPm1lbWlmW2lkXS5kYXRhOworKworKwlpZiAobWVtaWZfZGF0YS0+cGJ1Zl9tYXNrID09IDAgfHwgbWVtaWZfZGF0YS0+bWlubGVuX21hc2sgPT0gMCkKKysJCXJldHVybiAwOworKworKwltdGtfcmVnbWFwX3VwZGF0ZV9iaXRzKGFmZS0+cmVnbWFwLCBtZW1pZl9kYXRhLT5wYnVmX3JlZywKKysJCQkgICAgICAgbWVtaWZfZGF0YS0+cGJ1Zl9tYXNrLAorKwkJCSAgICAgICBwYnVmX3NpemUsIG1lbWlmX2RhdGEtPnBidWZfc2hpZnQpOworKworKwltdGtfcmVnbWFwX3VwZGF0ZV9iaXRzKGFmZS0+cmVnbWFwLCBtZW1pZl9kYXRhLT5taW5sZW5fcmVnLAorKwkJCSAgICAgICBtZW1pZl9kYXRhLT5taW5sZW5fbWFzaywKKysJCQkgICAgICAgcGJ1Zl9zaXplLCBtZW1pZl9kYXRhLT5taW5sZW5fc2hpZnQpOworKwlyZXR1cm4gMDsKKyt9CisrRVhQT1JUX1NZTUJPTF9HUEwobXRrX21lbWlmX3NldF9wYnVmX3NpemUpOworKworIE1PRFVMRV9ERVNDUklQVElPTigiTWVkaWF0ZWsgc2ltcGxlIGZlIGRhaSBvcGVyYXRvciIpOworIE1PRFVMRV9BVVRIT1IoIkdhcmxpYyBUc2VuZyA8Z2FybGljLnRzZW5nQG1lZGlhdGVrLmNvbT4iKTsKKyBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CistLS0gYS9zb3VuZC9zb2MvbWVkaWF0ZWsvY29tbW9uL210ay1hZmUtZmUtZGFpLmgKKysrKyBiL3NvdW5kL3NvYy9tZWRpYXRlay9jb21tb24vbXRrLWFmZS1mZS1kYWkuaAorQEAgLTM0LDQgKzM0LDIwIEBACisgaW50IG10a19hZmVfZGFpX3N1c3BlbmQoc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpOworIGludCBtdGtfYWZlX2RhaV9yZXN1bWUoc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpOworIAorK2ludCBtdGtfbWVtaWZfc2V0X2VuYWJsZShzdHJ1Y3QgbXRrX2Jhc2VfYWZlICphZmUsIGludCBpZCk7CisraW50IG10a19tZW1pZl9zZXRfZGlzYWJsZShzdHJ1Y3QgbXRrX2Jhc2VfYWZlICphZmUsIGludCBpZCk7CisraW50IG10a19tZW1pZl9zZXRfYWRkcihzdHJ1Y3QgbXRrX2Jhc2VfYWZlICphZmUsIGludCBpZCwKKysJCSAgICAgICB1bnNpZ25lZCBjaGFyICpkbWFfYXJlYSwKKysJCSAgICAgICBkbWFfYWRkcl90IGRtYV9hZGRyLAorKwkJICAgICAgIHNpemVfdCBkbWFfYnl0ZXMpOworK2ludCBtdGtfbWVtaWZfc2V0X2NoYW5uZWwoc3RydWN0IG10a19iYXNlX2FmZSAqYWZlLAorKwkJCSAgaW50IGlkLCB1bnNpZ25lZCBpbnQgY2hhbm5lbCk7CisraW50IG10a19tZW1pZl9zZXRfcmF0ZShzdHJ1Y3QgbXRrX2Jhc2VfYWZlICphZmUsCisrCQkgICAgICAgaW50IGlkLCB1bnNpZ25lZCBpbnQgcmF0ZSk7CisraW50IG10a19tZW1pZl9zZXRfcmF0ZV9zdWJzdHJlYW0oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisrCQkJCSBpbnQgaWQsIHVuc2lnbmVkIGludCByYXRlKTsKKytpbnQgbXRrX21lbWlmX3NldF9mb3JtYXQoc3RydWN0IG10a19iYXNlX2FmZSAqYWZlLAorKwkJCSBpbnQgaWQsIHNuZF9wY21fZm9ybWF0X3QgZm9ybWF0KTsKKytpbnQgbXRrX21lbWlmX3NldF9wYnVmX3NpemUoc3RydWN0IG10a19iYXNlX2FmZSAqYWZlLAorKwkJCSAgICBpbnQgaWQsIGludCBwYnVmX3NpemUpOworICNlbmRpZgorLS0tIGEvc291bmQvc29jL21lZGlhdGVrL2NvbW1vbi9tdGstYmFzZS1hZmUuaAorKysrIGIvc291bmQvc29jL21lZGlhdGVrL2NvbW1vbi9tdGstYmFzZS1hZmUuaAorQEAgLTE2LDIxICsxNiwzOCBAQAorIAljb25zdCBjaGFyICpuYW1lOworIAlpbnQgcmVnX29mc19iYXNlOworIAlpbnQgcmVnX29mc19jdXI7CisrCWludCByZWdfb2ZzX2VuZDsKKysJaW50IHJlZ19vZnNfYmFzZV9tc2I7CisrCWludCByZWdfb2ZzX2N1cl9tc2I7CisrCWludCByZWdfb2ZzX2VuZF9tc2I7CisgCWludCBmc19yZWc7CisgCWludCBmc19zaGlmdDsKKyAJaW50IGZzX21hc2tiaXQ7CisgCWludCBtb25vX3JlZzsKKyAJaW50IG1vbm9fc2hpZnQ7CisrCWludCBtb25vX2ludmVydDsKKysJaW50IHF1YWRfY2hfcmVnOworKwlpbnQgcXVhZF9jaF9tYXNrOworKwlpbnQgcXVhZF9jaF9zaGlmdDsKKyAJaW50IGVuYWJsZV9yZWc7CisgCWludCBlbmFibGVfc2hpZnQ7CisgCWludCBoZF9yZWc7CistCWludCBoZF9hbGlnbl9yZWc7CisgCWludCBoZF9zaGlmdDsKKysJaW50IGhkX2FsaWduX3JlZzsKKyAJaW50IGhkX2FsaWduX21zaGlmdDsKKyAJaW50IG1zYl9yZWc7CisgCWludCBtc2Jfc2hpZnQ7CisrCWludCBtc2IyX3JlZzsKKysJaW50IG1zYjJfc2hpZnQ7CisgCWludCBhZ2VudF9kaXNhYmxlX3JlZzsKKyAJaW50IGFnZW50X2Rpc2FibGVfc2hpZnQ7CisrCS8qIHBsYXliYWNrIG1lbWlmIG9ubHkgKi8KKysJaW50IHBidWZfcmVnOworKwlpbnQgcGJ1Zl9tYXNrOworKwlpbnQgcGJ1Zl9zaGlmdDsKKysJaW50IG1pbmxlbl9yZWc7CisrCWludCBtaW5sZW5fbWFzazsKKysJaW50IG1pbmxlbl9zaGlmdDsKKyB9OworIAorIHN0cnVjdCBtdGtfYmFzZV9pcnFfZGF0YSB7CitAQCAtODQsNiArMTAxLDEyIEBACisgCQkJdW5zaWduZWQgaW50IHJhdGUpOworIAlpbnQgKCppcnFfZnMpKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorIAkJICAgICAgdW5zaWduZWQgaW50IHJhdGUpOworKwlpbnQgKCpnZXRfZGFpX2ZzKShzdHJ1Y3QgbXRrX2Jhc2VfYWZlICphZmUsCisrCQkJICBpbnQgZGFpX2lkLCB1bnNpZ25lZCBpbnQgcmF0ZSk7CisrCWludCAoKmdldF9tZW1pZl9wYnVmX3NpemUpKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKKysKKysJaW50ICgqcmVxdWVzdF9kcmFtX3Jlc291cmNlKShzdHJ1Y3QgZGV2aWNlICpkZXYpOworKwlpbnQgKCpyZWxlYXNlX2RyYW1fcmVzb3VyY2UpKHN0cnVjdCBkZXZpY2UgKmRldik7CisgCisgCXZvaWQgKnBsYXRmb3JtX3ByaXY7CisgfTsKK0BAIC05NSw2ICsxMTgsOSBAQAorIAljb25zdCBzdHJ1Y3QgbXRrX2Jhc2VfbWVtaWZfZGF0YSAqZGF0YTsKKyAJaW50IGlycV91c2FnZTsKKyAJaW50IGNvbnN0X2lycTsKKysJdW5zaWduZWQgY2hhciAqZG1hX2FyZWE7CisrCWRtYV9hZGRyX3QgZG1hX2FkZHI7CisrCXNpemVfdCBkbWFfYnl0ZXM7CisgfTsKKyAKKyBzdHJ1Y3QgbXRrX2Jhc2VfYWZlX2lycSB7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDQwMS1zb3VuZC1yZWZpbmUtaHctcGFyYW1zLWFuZC1ody1wcmVwYXJlLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA0MDEtc291bmQtcmVmaW5lLWh3LXBhcmFtcy1hbmQtaHctcHJlcGFyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTI0ZDUxCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA0MDEtc291bmQtcmVmaW5lLWh3LXBhcmFtcy1hbmQtaHctcHJlcGFyZS5wYXRjaApAQCAtMCwwICsxLDIyMSBAQAorLS0tIGEvc291bmQvc29jL21lZGlhdGVrL2NvbW1vbi9tdGstYWZlLWZlLWRhaS5jCisrKysgYi9zb3VuZC9zb2MvbWVkaWF0ZWsvY29tbW9uL210ay1hZmUtZmUtZGFpLmMKK0BAIC02LDExICs2LDEzIEBACisgICogQXV0aG9yOiBHYXJsaWMgVHNlbmcgPGdhcmxpYy50c2VuZ0BtZWRpYXRlay5jb20+CisgICovCisgCisrI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisgI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorICNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisgI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyAjaW5jbHVkZSAibXRrLWFmZS1wbGF0Zm9ybS1kcml2ZXIuaCIKKysjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorICNpbmNsdWRlICJtdGstYWZlLWZlLWRhaS5oIgorICNpbmNsdWRlICJtdGstYmFzZS1hZmUuaCIKKyAKK0BAIC0xMjAsNTAgKzEyMiw2NCBAQAorIHsKKyAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworIAlzdHJ1Y3QgbXRrX2Jhc2VfYWZlICphZmUgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShkYWkpOworLQlzdHJ1Y3QgbXRrX2Jhc2VfYWZlX21lbWlmICptZW1pZiA9ICZhZmUtPm1lbWlmW3J0ZC0+Y3B1X2RhaS0+aWRdOworLQlpbnQgbXNiX2F0X2JpdDMzID0gMDsKKy0JaW50IHJldCwgZnMgPSAwOworKwlpbnQgaWQgPSBydGQtPmNwdV9kYWktPmlkOworKwlzdHJ1Y3QgbXRrX2Jhc2VfYWZlX21lbWlmICptZW1pZiA9ICZhZmUtPm1lbWlmW2lkXTsKKysJaW50IHJldDsKKysJdW5zaWduZWQgaW50IGNoYW5uZWxzID0gcGFyYW1zX2NoYW5uZWxzKHBhcmFtcyk7CisrCXVuc2lnbmVkIGludCByYXRlID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKKysJc25kX3BjbV9mb3JtYXRfdCBmb3JtYXQgPSBwYXJhbXNfZm9ybWF0KHBhcmFtcyk7CisgCisgCXJldCA9IHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzdWJzdHJlYW0sIHBhcmFtc19idWZmZXJfYnl0ZXMocGFyYW1zKSk7CisgCWlmIChyZXQgPCAwKQorIAkJcmV0dXJuIHJldDsKKyAKKy0JbXNiX2F0X2JpdDMzID0gdXBwZXJfMzJfYml0cyhzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hZGRyKSA/IDEgOiAwOworLQltZW1pZi0+cGh5c19idWZfYWRkciA9IGxvd2VyXzMyX2JpdHMoc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYWRkcik7CistCW1lbWlmLT5idWZmZXJfc2l6ZSA9IHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2J5dGVzOworLQorLQkvKiBzdGFydCAqLworLQltdGtfcmVnbWFwX3dyaXRlKGFmZS0+cmVnbWFwLCBtZW1pZi0+ZGF0YS0+cmVnX29mc19iYXNlLAorLQkJCSBtZW1pZi0+cGh5c19idWZfYWRkcik7CistCS8qIGVuZCAqLworLQltdGtfcmVnbWFwX3dyaXRlKGFmZS0+cmVnbWFwLAorLQkJCSBtZW1pZi0+ZGF0YS0+cmVnX29mc19iYXNlICsgQUZFX0JBU0VfRU5EX09GRlNFVCwKKy0JCQkgbWVtaWYtPnBoeXNfYnVmX2FkZHIgKyBtZW1pZi0+YnVmZmVyX3NpemUgLSAxKTsKKy0KKy0JLyogc2V0IE1TQiB0byAzMy1iaXQgKi8KKy0JbXRrX3JlZ21hcF91cGRhdGVfYml0cyhhZmUtPnJlZ21hcCwgbWVtaWYtPmRhdGEtPm1zYl9yZWcsCistCQkJICAgICAgIDEsIG1zYl9hdF9iaXQzMywgbWVtaWYtPmRhdGEtPm1zYl9zaGlmdCk7CisrCWlmIChhZmUtPnJlcXVlc3RfZHJhbV9yZXNvdXJjZSkKKysJCWFmZS0+cmVxdWVzdF9kcmFtX3Jlc291cmNlKGFmZS0+ZGV2KTsKKyAKKy0JLyogc2V0IGNoYW5uZWwgKi8KKy0JaWYgKG1lbWlmLT5kYXRhLT5tb25vX3NoaWZ0ID49IDApIHsKKy0JCXVuc2lnbmVkIGludCBtb25vID0gKHBhcmFtc19jaGFubmVscyhwYXJhbXMpID09IDEpID8gMSA6IDA7CisrCWRldl9kYmcoYWZlLT5kZXYsICIlcygpLCAlcywgY2ggJWQsIHJhdGUgJWQsIGZtdCAlZCwgZG1hX2FkZHIgJXBhZCwgZG1hX2FyZWEgJXAsIGRtYV9ieXRlcyAweCV6eFxuIiwKKysJCV9fZnVuY19fLCBtZW1pZi0+ZGF0YS0+bmFtZSwKKysJCWNoYW5uZWxzLCByYXRlLCBmb3JtYXQsCisrCQkmc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYWRkciwKKysJCXN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEsCisrCQlzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9ieXRlcyk7CisrCisrCW1lbXNldF9pbyhzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhLCAwLAorKwkJICBzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9ieXRlcyk7CisrCisrCS8qIHNldCBhZGRyICovCisrCXJldCA9IG10a19tZW1pZl9zZXRfYWRkcihhZmUsIGlkLAorKwkJCQkgc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYXJlYSwKKysJCQkJIHN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FkZHIsCisrCQkJCSBzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9ieXRlcyk7CisrCWlmIChyZXQpIHsKKysJCWRldl9lcnIoYWZlLT5kZXYsICIlcygpLCBlcnJvciwgaWQgJWQsIHNldCBhZGRyLCByZXQgJWRcbiIsCisrCQkJX19mdW5jX18sIGlkLCByZXQpOworKwkJcmV0dXJuIHJldDsKKysJfQorIAorLQkJbXRrX3JlZ21hcF91cGRhdGVfYml0cyhhZmUtPnJlZ21hcCwgbWVtaWYtPmRhdGEtPm1vbm9fcmVnLAorLQkJCQkgICAgICAgMSwgbW9ubywgbWVtaWYtPmRhdGEtPm1vbm9fc2hpZnQpOworKwkvKiBzZXQgY2hhbm5lbCAqLworKwlyZXQgPSBtdGtfbWVtaWZfc2V0X2NoYW5uZWwoYWZlLCBpZCwgY2hhbm5lbHMpOworKwlpZiAocmV0KSB7CisrCQlkZXZfZXJyKGFmZS0+ZGV2LCAiJXMoKSwgZXJyb3IsIGlkICVkLCBzZXQgY2hhbm5lbCAlZCwgcmV0ICVkXG4iLAorKwkJCV9fZnVuY19fLCBpZCwgY2hhbm5lbHMsIHJldCk7CisrCQlyZXR1cm4gcmV0OworIAl9CisgCisgCS8qIHNldCByYXRlICovCistCWlmIChtZW1pZi0+ZGF0YS0+ZnNfc2hpZnQgPCAwKQorLQkJcmV0dXJuIDA7CistCistCWZzID0gYWZlLT5tZW1pZl9mcyhzdWJzdHJlYW0sIHBhcmFtc19yYXRlKHBhcmFtcykpOworLQorLQlpZiAoZnMgPCAwKQorLQkJcmV0dXJuIC1FSU5WQUw7CisrCXJldCA9IG10a19tZW1pZl9zZXRfcmF0ZV9zdWJzdHJlYW0oc3Vic3RyZWFtLCBpZCwgcmF0ZSk7CisrCWlmIChyZXQpIHsKKysJCWRldl9lcnIoYWZlLT5kZXYsICIlcygpLCBlcnJvciwgaWQgJWQsIHNldCByYXRlICVkLCByZXQgJWRcbiIsCisrCQkJX19mdW5jX18sIGlkLCByYXRlLCByZXQpOworKwkJcmV0dXJuIHJldDsKKysJfQorIAorLQltdGtfcmVnbWFwX3VwZGF0ZV9iaXRzKGFmZS0+cmVnbWFwLCBtZW1pZi0+ZGF0YS0+ZnNfcmVnLAorLQkJCSAgICAgICBtZW1pZi0+ZGF0YS0+ZnNfbWFza2JpdCwgZnMsCistCQkJICAgICAgIG1lbWlmLT5kYXRhLT5mc19zaGlmdCk7CisrCS8qIHNldCBmb3JtYXQgKi8KKysJcmV0ID0gbXRrX21lbWlmX3NldF9mb3JtYXQoYWZlLCBpZCwgZm9ybWF0KTsKKysJaWYgKHJldCkgeworKwkJZGV2X2VycihhZmUtPmRldiwgIiVzKCksIGVycm9yLCBpZCAlZCwgc2V0IGZvcm1hdCAlZCwgcmV0ICVkXG4iLAorKwkJCV9fZnVuY19fLCBpZCwgZm9ybWF0LCByZXQpOworKwkJcmV0dXJuIHJldDsKKysJfQorIAorIAlyZXR1cm4gMDsKKyB9CitAQCAtMTcyLDYgKzE4OCwxMSBAQAorIGludCBtdGtfYWZlX2ZlX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisgCQkgICAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCisgeworKwlzdHJ1Y3QgbXRrX2Jhc2VfYWZlICphZmUgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShkYWkpOworKworKwlpZiAoYWZlLT5yZWxlYXNlX2RyYW1fcmVzb3VyY2UpCisrCQlhZmUtPnJlbGVhc2VfZHJhbV9yZXNvdXJjZShhZmUtPmRldik7CisrCisgCXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN1YnN0cmVhbSk7CisgfQorIEVYUE9SVF9TWU1CT0xfR1BMKG10a19hZmVfZmVfaHdfZnJlZSk7CitAQCAtMTgyLDIwICsyMDMsMjUgQEAKKyAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICogY29uc3QgcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKyAJc3RydWN0IG10a19iYXNlX2FmZSAqYWZlID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoZGFpKTsKKy0Jc3RydWN0IG10a19iYXNlX2FmZV9tZW1pZiAqbWVtaWYgPSAmYWZlLT5tZW1pZltydGQtPmNwdV9kYWktPmlkXTsKKysJaW50IGlkID0gcnRkLT5jcHVfZGFpLT5pZDsKKysJc3RydWN0IG10a19iYXNlX2FmZV9tZW1pZiAqbWVtaWYgPSAmYWZlLT5tZW1pZltpZF07CisgCXN0cnVjdCBtdGtfYmFzZV9hZmVfaXJxICppcnFzID0gJmFmZS0+aXJxc1ttZW1pZi0+aXJxX3VzYWdlXTsKKyAJY29uc3Qgc3RydWN0IG10a19iYXNlX2lycV9kYXRhICppcnFfZGF0YSA9IGlycXMtPmlycV9kYXRhOworIAl1bnNpZ25lZCBpbnQgY291bnRlciA9IHJ1bnRpbWUtPnBlcmlvZF9zaXplOworIAlpbnQgZnM7CisrCWludCByZXQ7CisgCisgCWRldl9kYmcoYWZlLT5kZXYsICIlcyAlcyBjbWQ9JWRcbiIsIF9fZnVuY19fLCBtZW1pZi0+ZGF0YS0+bmFtZSwgY21kKTsKKyAKKyAJc3dpdGNoIChjbWQpIHsKKyAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKyAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CistCQltdGtfcmVnbWFwX3VwZGF0ZV9iaXRzKGFmZS0+cmVnbWFwLAorLQkJCQkgICAgICAgbWVtaWYtPmRhdGEtPmVuYWJsZV9yZWcsCistCQkJCSAgICAgICAxLCAxLCBtZW1pZi0+ZGF0YS0+ZW5hYmxlX3NoaWZ0KTsKKysJCXJldCA9IG10a19tZW1pZl9zZXRfZW5hYmxlKGFmZSwgaWQpOworKwkJaWYgKHJldCkgeworKwkJCWRldl9lcnIoYWZlLT5kZXYsICIlcygpLCBlcnJvciwgaWQgJWQsIG1lbWlmIGVuYWJsZSwgcmV0ICVkXG4iLAorKwkJCQlfX2Z1bmNfXywgaWQsIHJldCk7CisrCQkJcmV0dXJuIHJldDsKKysJCX0KKyAKKyAJCS8qIHNldCBpcnEgY291bnRlciAqLworIAkJbXRrX3JlZ21hcF91cGRhdGVfYml0cyhhZmUtPnJlZ21hcCwgaXJxX2RhdGEtPmlycV9jbnRfcmVnLAorQEAgLTIxOSwxNSArMjQ1LDE5IEBACisgCQlyZXR1cm4gMDsKKyAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6CistCQltdGtfcmVnbWFwX3VwZGF0ZV9iaXRzKGFmZS0+cmVnbWFwLCBtZW1pZi0+ZGF0YS0+ZW5hYmxlX3JlZywKKy0JCQkJICAgICAgIDEsIDAsIG1lbWlmLT5kYXRhLT5lbmFibGVfc2hpZnQpOworKwkJcmV0ID0gbXRrX21lbWlmX3NldF9kaXNhYmxlKGFmZSwgaWQpOworKwkJaWYgKHJldCkgeworKwkJCWRldl9lcnIoYWZlLT5kZXYsICIlcygpLCBlcnJvciwgaWQgJWQsIG1lbWlmIGVuYWJsZSwgcmV0ICVkXG4iLAorKwkJCQlfX2Z1bmNfXywgaWQsIHJldCk7CisrCQl9CisrCisgCQkvKiBkaXNhYmxlIGludGVycnVwdCAqLworIAkJbXRrX3JlZ21hcF91cGRhdGVfYml0cyhhZmUtPnJlZ21hcCwgaXJxX2RhdGEtPmlycV9lbl9yZWcsCisgCQkJCSAgICAgICAxLCAwLCBpcnFfZGF0YS0+aXJxX2VuX3NoaWZ0KTsKKyAJCS8qIGFuZCBjbGVhciBwZW5kaW5nIElSUSAqLworIAkJbXRrX3JlZ21hcF93cml0ZShhZmUtPnJlZ21hcCwgaXJxX2RhdGEtPmlycV9jbHJfcmVnLAorIAkJCQkgMSA8PCBpcnFfZGF0YS0+aXJxX2Nscl9zaGlmdCk7CistCQlyZXR1cm4gMDsKKysJCXJldHVybiByZXQ7CisgCWRlZmF1bHQ6CisgCQlyZXR1cm4gLUVJTlZBTDsKKyAJfQorQEAgLTIzOSwzNCArMjY5LDE1IEBACisgeworIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkICA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworIAlzdHJ1Y3QgbXRrX2Jhc2VfYWZlICphZmUgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShkYWkpOworLQlzdHJ1Y3QgbXRrX2Jhc2VfYWZlX21lbWlmICptZW1pZiA9ICZhZmUtPm1lbWlmW3J0ZC0+Y3B1X2RhaS0+aWRdOworLQlpbnQgaGRfYXVkaW8gPSAwOworLQlpbnQgaGRfYWxpZ24gPSAwOworKwlpbnQgaWQgPSBydGQtPmNwdV9kYWktPmlkOworKwlpbnQgcGJ1Zl9zaXplOworIAorLQkvKiBzZXQgaGQgbW9kZSAqLworLQlzd2l0Y2ggKHN1YnN0cmVhbS0+cnVudGltZS0+Zm9ybWF0KSB7CistCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CistCQloZF9hdWRpbyA9IDA7CistCQlicmVhazsKKy0JY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRToKKy0JCWhkX2F1ZGlvID0gMTsKKy0JCWhkX2FsaWduID0gMTsKKy0JCWJyZWFrOworLQljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFOgorLQkJaGRfYXVkaW8gPSAxOworLQkJYnJlYWs7CistCWRlZmF1bHQ6CistCQlkZXZfZXJyKGFmZS0+ZGV2LCAiJXMoKSBlcnJvcjogdW5zdXBwb3J0ZWQgZm9ybWF0ICVkXG4iLAorLQkJCV9fZnVuY19fLCBzdWJzdHJlYW0tPnJ1bnRpbWUtPmZvcm1hdCk7CistCQlicmVhazsKKysJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKysJCWlmIChhZmUtPmdldF9tZW1pZl9wYnVmX3NpemUpIHsKKysJCQlwYnVmX3NpemUgPSBhZmUtPmdldF9tZW1pZl9wYnVmX3NpemUoc3Vic3RyZWFtKTsKKysJCQltdGtfbWVtaWZfc2V0X3BidWZfc2l6ZShhZmUsIGlkLCBwYnVmX3NpemUpOworKwkJfQorIAl9CistCistCW10a19yZWdtYXBfdXBkYXRlX2JpdHMoYWZlLT5yZWdtYXAsIG1lbWlmLT5kYXRhLT5oZF9yZWcsCistCQkJICAgICAgIDEsIGhkX2F1ZGlvLCBtZW1pZi0+ZGF0YS0+aGRfc2hpZnQpOworLQorLQltdGtfcmVnbWFwX3VwZGF0ZV9iaXRzKGFmZS0+cmVnbWFwLCBtZW1pZi0+ZGF0YS0+aGRfYWxpZ25fcmVnLAorLQkJCSAgICAgICAxLCBoZF9hbGlnbiwgbWVtaWYtPmRhdGEtPmhkX2FsaWduX21zaGlmdCk7CistCisgCXJldHVybiAwOworIH0KKyBFWFBPUlRfU1lNQk9MX0dQTChtdGtfYWZlX2ZlX3ByZXBhcmUpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA0MDItc291bmQtYWRkLW10Nzk4Ni1kcml2ZXItYW5kLXNsaWMtZHJpdmVyLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA0MDItc291bmQtYWRkLW10Nzk4Ni1kcml2ZXItYW5kLXNsaWMtZHJpdmVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNWVhNmYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDQwMi1zb3VuZC1hZGQtbXQ3OTg2LWRyaXZlci1hbmQtc2xpYy1kcml2ZXIucGF0Y2gKQEAgLTAsMCArMSw5MSBAQAorLS0tIGEvc291bmQvc29jL2NvZGVjcy9LY29uZmlnCisrKysgYi9zb3VuZC9zb2MvY29kZWNzL0tjb25maWcKK0BAIC0xNjQsNiArMTY0LDcgQEAKKyAJc2VsZWN0IFNORF9TT0NfUlQ1Njc3IGlmIEkyQyAmJiBTUElfTUFTVEVSCisgCXNlbGVjdCBTTkRfU09DX1JUNTY4MiBpZiBJMkMKKyAJc2VsZWN0IFNORF9TT0NfU0dUTDUwMDAgaWYgSTJDCisrCXNlbGVjdCBTTkRfU09DX1NJMzIxOFhfU1BJCisgCXNlbGVjdCBTTkRfU09DX1NJNDc2WCBpZiBNRkRfU0k0NzZYX0NPUkUKKyAJc2VsZWN0IFNORF9TT0NfU0lNUExFX0FNUExJRklFUgorIAlzZWxlY3QgU05EX1NPQ19TSVJGX0FVRElPX0NPREVDCitAQCAtMTQ4NCw2ICsxNDg1LDE0IEBACisgY29uZmlnIFNORF9TT0NfTkFVODgyNQorIAl0cmlzdGF0ZQorIAorK2NvbmZpZyBTTkRfU09DX1NJMzIxOFgKKysJdHJpc3RhdGUKKysKKytjb25maWcgU05EX1NPQ19TSTMyMThYX1NQSQorKwl0cmlzdGF0ZSAiUHJvc2xpYyBTSTMyMThYIgorKwlkZXBlbmRzIG9uIFNQSQorKwlzZWxlY3QgU05EX1NPQ19TSTMyMThYCisrCisgY29uZmlnIFNORF9TT0NfVFBBNjEzMEEyCisgCXRyaXN0YXRlICJUZXhhcyBJbnN0cnVtZW50cyBUUEE2MTMwQTIgaGVhZHBob25lIGFtcGxpZmllciIKKyAJZGVwZW5kcyBvbiBJMkMKKy0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGUKKysrKyBiL3NvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGUKK0BAIC0xNzYsNiArMTc2LDcgQEAKKyBzbmQtc29jLXNpZ21hZHNwLW9ianMgOj0gc2lnbWFkc3AubworIHNuZC1zb2Mtc2lnbWFkc3AtaTJjLW9ianMgOj0gc2lnbWFkc3AtaTJjLm8KKyBzbmQtc29jLXNpZ21hZHNwLXJlZ21hcC1vYmpzIDo9IHNpZ21hZHNwLXJlZ21hcC5vCisrc25kLXNvYy1zaTMyMTh4LXNwaS1vYmpzIDo9IHNpMzIxOHgtc3BpLm8KKyBzbmQtc29jLXNpNDc2eC1vYmpzIDo9IHNpNDc2eC5vCisgc25kLXNvYy1zaXJmLWF1ZGlvLWNvZGVjLW9ianMgOj0gc2lyZi1hdWRpby1jb2RlYy5vCisgc25kLXNvYy1zcGRpZi10eC1vYmpzIDo9IHNwZGlmX3RyYW5zbWl0dGVyLm8KK0BAIC01NjMsMyArNTY0LDcgQEAKKyBvYmotJChDT05GSUdfU05EX1NPQ19NQVg5ODUwNCkJKz0gc25kLXNvYy1tYXg5ODUwNC5vCisgb2JqLSQoQ09ORklHX1NORF9TT0NfU0lNUExFX0FNUExJRklFUikJKz0gc25kLXNvYy1zaW1wbGUtYW1wbGlmaWVyLm8KKyBvYmotJChDT05GSUdfU05EX1NPQ19UUEE2MTMwQTIpCSs9IHNuZC1zb2MtdHBhNjEzMGEyLm8KKysKKysjIFByb3NsaWMgc2kzMjE4eAorK29iai0kKENPTkZJR19TTkRfU09DX1NJMzIxOFgpCSs9IHNpMzIxOHgvCisrb2JqLSQoQ09ORklHX1NORF9TT0NfU0kzMjE4WF9TUEkpCSs9IHNuZC1zb2Mtc2kzMjE4eC1zcGkubworLS0tIGEvc291bmQvc29jL21lZGlhdGVrL0tjb25maWcKKysrKyBiL3NvdW5kL3NvYy9tZWRpYXRlay9LY29uZmlnCitAQCAtNTMsNiArNTMsMzYgQEAKKyAJICBTZWxlY3QgWSBpZiB5b3UgaGF2ZSBzdWNoIGRldmljZS4KKyAJICBJZiB1bnN1cmUgc2VsZWN0ICJOIi4KKyAKKytjb25maWcgU05EX1NPQ19NVDc5WFgKKysJdHJpc3RhdGUgIkFTb0Mgc3VwcG9ydCBmb3IgTWVkaWF0ZWsgTVQ3OVhYIGNoaXAiCisrCWRlcGVuZHMgb24gQVJDSF9NRURJQVRFSworKwlzZWxlY3QgU05EX1NPQ19NRURJQVRFSworKwloZWxwCisrCSAgVGhpcyBhZGRzIEFTb0MgcGxhdGZvcm0gZHJpdmVyIHN1cHBvcnQgZm9yIE1lZGlhdGVrIE1UNzlYWCBjaGlwCisrCSAgdGhhdCBjYW4gYmUgdXNlZCB3aXRoIG90aGVyIGNvZGVjcy4KKysJICBTZWxlY3QgWSBpZiB5b3UgaGF2ZSBzdWNoIGRldmljZS4KKysJICBJZiB1bnN1cmUgc2VsZWN0ICJOIi4KKysKKytjb25maWcgU05EX1NPQ19NVDc5WFhfV004OTYwCisrCXRyaXN0YXRlICJBU29jIEF1ZGlvIGRyaXZlciBmb3IgTVQ3OVhYIHdpdGggV004OTYwIGNvZGVjIgorKwlkZXBlbmRzIG9uIFNORF9TT0NfTVQ3OVhYICYmIEkyQworKwlzZWxlY3QgU05EX1NPQ19XTTg5NjAKKysJaGVscAorKwkgIFRoaXMgYWRkcyBBU29DIGRyaXZlciBmb3IgTWVkaWF0ZWsgTVQ3OVhYIGJvYXJkcworKwkgIHdpdGggdGhlIFdNODk2MCBjb2RlY3MuCisrCSAgU2VsZWN0IFkgaWYgeW91IGhhdmUgc3VjaCBkZXZpY2UuCisrCSAgSWYgdW5zdXJlIHNlbGVjdCAiTiIuCisrCisrY29uZmlnIFNORF9TT0NfTVQ3OVhYX1NJMzIxOFgKKysJdHJpc3RhdGUgIkFTb2MgQXVkaW8gZHJpdmVyIGZvciBNVDc5WFggd2l0aCBTSTMyMThYIGNvZGVjIgorKwlkZXBlbmRzIG9uIFNORF9TT0NfTVQ3OVhYICYmIFNQSQorKwlzZWxlY3QgU05EX1NPQ19TSTMyMThYX1NQSQorKwloZWxwCisrCSAgVGhpcyBhZGRzIEFTb0MgZHJpdmVyIGZvciBNZWRpYXRlayBNVDc5WFggYm9hcmRzCisrCSAgd2l0aCB0aGUgU0kzMjE4WCBjb2RlY3MuCisrCSAgU2VsZWN0IFkgaWYgeW91IGhhdmUgc3VjaCBkZXZpY2UuCisrCSAgSWYgdW5zdXJlIHNlbGVjdCAiTiIuCisrCisgY29uZmlnIFNORF9TT0NfTVQ4MTczCisgCXRyaXN0YXRlICJBU29DIHN1cHBvcnQgZm9yIE1lZGlhdGVrIE1UODE3MyBjaGlwIgorIAlkZXBlbmRzIG9uIEFSQ0hfTUVESUFURUsKKy0tLSBhL3NvdW5kL3NvYy9tZWRpYXRlay9NYWtlZmlsZQorKysrIGIvc291bmQvc29jL21lZGlhdGVrL01ha2VmaWxlCitAQCAtMiw1ICsyLDYgQEAKKyBvYmotJChDT05GSUdfU05EX1NPQ19NRURJQVRFSykgKz0gY29tbW9uLworIG9iai0kKENPTkZJR19TTkRfU09DX01UMjcwMSkgKz0gbXQyNzAxLworIG9iai0kKENPTkZJR19TTkRfU09DX01UNjc5NykgKz0gbXQ2Nzk3LworK29iai0kKENPTkZJR19TTkRfU09DX01UNzlYWCkgKz0gbXQ3OXh4LworIG9iai0kKENPTkZJR19TTkRfU09DX01UODE3MykgKz0gbXQ4MTczLworIG9iai0kKENPTkZJR19TTkRfU09DX01UODE4MykgKz0gbXQ4MTgzLwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA1MDAtdjUuNi1jcnlwdG8tYmFja3BvcnQtaW5zaWRlLXNlY3VyZS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wNTAwLXY1LjYtY3J5cHRvLWJhY2twb3J0LWluc2lkZS1zZWN1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZhZTkwZQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wNTAwLXY1LjYtY3J5cHRvLWJhY2twb3J0LWluc2lkZS1zZWN1cmUucGF0Y2gKQEAgLTAsMCArMSw1NDY0IEBACistLS0gYS9kcml2ZXJzL2NyeXB0by9pbnNpZGUtc2VjdXJlL3NhZmV4Y2VsLmMKKysrKyBiL2RyaXZlcnMvY3J5cHRvL2luc2lkZS1zZWN1cmUvc2FmZXhjZWwuYworQEAgLTc1LDkgKzc1LDkgQEAgc3RhdGljIHZvaWQgZWlwMTk3X3RyY19jYWNoZV9iYW5rc2VsKHN0cgorIH0KKyAKKyBzdGF0aWMgdTMyIGVpcDE5N190cmNfY2FjaGVfcHJvYmUoc3RydWN0IHNhZmV4Y2VsX2NyeXB0b19wcml2ICpwcml2LAorLQkJCQkgIGludCBtYXhiYW5rcywgdTMyIHByb2JlbWFzaykKKysJCQkJICBpbnQgbWF4YmFua3MsIHUzMiBwcm9iZW1hc2ssIHUzMiBzdHJpZGUpCisgeworLQl1MzIgdmFsLCBhZGRyaGksIGFkZHJsbywgYWRkcm1pZDsKKysJdTMyIHZhbCwgYWRkcmhpLCBhZGRybG8sIGFkZHJtaWQsIGFkZHJhbGlhcywgZGVsdGEsIG1hcmtlcjsKKyAJaW50IGFjdGJhbms7CisgCisgCS8qCitAQCAtODcsMzIgKzg3LDM3IEBAIHN0YXRpYyB1MzIgZWlwMTk3X3RyY19jYWNoZV9wcm9iZShzdHJ1Y3QKKyAJYWRkcmhpID0gMSA8PCAoMTYgKyBtYXhiYW5rcyk7CisgCWFkZHJsbyA9IDA7CisgCWFjdGJhbmsgPSBtaW4obWF4YmFua3MgLSAxLCAwKTsKKy0Jd2hpbGUgKChhZGRyaGkgLSBhZGRybG8pID4gMzIpIHsKKysJd2hpbGUgKChhZGRyaGkgLSBhZGRybG8pID4gc3RyaWRlKSB7CisgCQkvKiB3cml0ZSBtYXJrZXIgdG8gbG93ZXN0IGFkZHJlc3MgaW4gdG9wIGhhbGYgKi8KKyAJCWFkZHJtaWQgPSAoYWRkcmhpICsgYWRkcmxvKSA+PiAxOworKwkJbWFya2VyID0gKGFkZHJtaWQgXiAweGFiYWRiYWJlKSAmIHByb2JlbWFzazsgLyogVW5pcXVlICovCisgCQllaXAxOTdfdHJjX2NhY2hlX2JhbmtzZWwocHJpdiwgYWRkcm1pZCwgJmFjdGJhbmspOworLQkJd3JpdGVsKChhZGRybWlkIHwgKGFkZHJsbyA8PCAxNikpICYgcHJvYmVtYXNrLAorKwkJd3JpdGVsKG1hcmtlciwKKyAJCQlwcml2LT5iYXNlICsgRUlQMTk3X0NMQVNTSUZJQ0FUSU9OX1JBTVMgKworIAkJCShhZGRybWlkICYgMHhmZmZmKSk7CisgCistCQkvKiB3cml0ZSBtYXJrZXIgdG8gbG93ZXN0IGFkZHJlc3MgaW4gYm90dG9tIGhhbGYgKi8KKy0JCWVpcDE5N190cmNfY2FjaGVfYmFua3NlbChwcml2LCBhZGRybG8sICZhY3RiYW5rKTsKKy0JCXdyaXRlbCgoYWRkcmxvIHwgKGFkZHJoaSA8PCAxNikpICYgcHJvYmVtYXNrLAorLQkJCXByaXYtPmJhc2UgKyBFSVAxOTdfQ0xBU1NJRklDQVRJT05fUkFNUyArCistCQkJKGFkZHJsbyAmIDB4ZmZmZikpOworKwkJLyogd3JpdGUgaW52YWxpZCBtYXJrZXJzIHRvIHBvc3NpYmxlIGFsaWFzZXMgKi8KKysJCWRlbHRhID0gMSA8PCBfX2ZscyhhZGRybWlkKTsKKysJCXdoaWxlIChkZWx0YSA+PSBzdHJpZGUpIHsKKysJCQlhZGRyYWxpYXMgPSBhZGRybWlkIC0gZGVsdGE7CisrCQkJZWlwMTk3X3RyY19jYWNoZV9iYW5rc2VsKHByaXYsIGFkZHJhbGlhcywgJmFjdGJhbmspOworKwkJCXdyaXRlbCh+bWFya2VyLAorKwkJCSAgICAgICBwcml2LT5iYXNlICsgRUlQMTk3X0NMQVNTSUZJQ0FUSU9OX1JBTVMgKworKwkJCSAgICAgICAoYWRkcmFsaWFzICYgMHhmZmZmKSk7CisrCQkJZGVsdGEgPj49IDE7CisrCQl9CisgCisgCQkvKiByZWFkIGJhY2sgbWFya2VyIGZyb20gdG9wIGhhbGYgKi8KKyAJCWVpcDE5N190cmNfY2FjaGVfYmFua3NlbChwcml2LCBhZGRybWlkLCAmYWN0YmFuayk7CisgCQl2YWwgPSByZWFkbChwcml2LT5iYXNlICsgRUlQMTk3X0NMQVNTSUZJQ0FUSU9OX1JBTVMgKworIAkJCSAgICAoYWRkcm1pZCAmIDB4ZmZmZikpOworIAorLQkJaWYgKHZhbCA9PSAoKGFkZHJtaWQgfCAoYWRkcmxvIDw8IDE2KSkgJiBwcm9iZW1hc2spKSB7CisrCQlpZiAoKHZhbCAmIHByb2JlbWFzaykgPT0gbWFya2VyKQorIAkJCS8qIHJlYWQgYmFjayBjb3JyZWN0LCBjb250aW51ZSB3aXRoIHRvcCBoYWxmICovCisgCQkJYWRkcmxvID0gYWRkcm1pZDsKKy0JCX0gZWxzZSB7CisrCQllbHNlCisgCQkJLyogbm90IHJlYWQgYmFjayBjb3JyZWN0LCBjb250aW51ZSB3aXRoIGJvdHRvbSBoYWxmICovCisgCQkJYWRkcmhpID0gYWRkcm1pZDsKKy0JCX0KKyAJfQorIAlyZXR1cm4gYWRkcmhpOworIH0KK0BAIC0xNTAsNyArMTU1LDcgQEAgc3RhdGljIHZvaWQgZWlwMTk3X3RyY19jYWNoZV9jbGVhcihzdHJ1YworIAkJICAgICAgIGh0YWJsZV9vZmZzZXQgKyBpICogc2l6ZW9mKHUzMikpOworIH0KKyAKKy1zdGF0aWMgdm9pZCBlaXAxOTdfdHJjX2NhY2hlX2luaXQoc3RydWN0IHNhZmV4Y2VsX2NyeXB0b19wcml2ICpwcml2KQorK3N0YXRpYyBpbnQgZWlwMTk3X3RyY19jYWNoZV9pbml0KHN0cnVjdCBzYWZleGNlbF9jcnlwdG9fcHJpdiAqcHJpdikKKyB7CisgCXUzMiB2YWwsIGRzaXplLCBhc2l6ZTsKKyAJaW50IGNzX3JjX21heCwgY3NfaHRfd2MsIGNzX3RyY19yZWNfd2MsIGNzX3RyY19sZ19yZWNfd2M7CitAQCAtMTgzLDcgKzE4OCw3IEBAIHN0YXRpYyB2b2lkIGVpcDE5N190cmNfY2FjaGVfaW5pdChzdHJ1Y3QKKyAJd3JpdGVsKHZhbCwgcHJpdi0+YmFzZSArIEVJUDE5N19UUkNfUEFSQU1TKTsKKyAKKyAJLyogUHJvYmVkIGRhdGEgUkFNIHNpemUgaW4gYnl0ZXMgKi8KKy0JZHNpemUgPSBlaXAxOTdfdHJjX2NhY2hlX3Byb2JlKHByaXYsIG1heGJhbmtzLCAweGZmZmZmZmZmKTsKKysJZHNpemUgPSBlaXAxOTdfdHJjX2NhY2hlX3Byb2JlKHByaXYsIG1heGJhbmtzLCAweGZmZmZmZmZmLCAzMik7CisgCisgCS8qCisgCSAqIE5vdyBwcm9iZSB0aGUgYWRtaW5pc3RyYXRpb24gUkFNIHNpemUgcHJldHR5IG11Y2ggdGhlIHNhbWUgd2F5CitAQCAtMTk2LDExICsyMDEsMTggQEAgc3RhdGljIHZvaWQgZWlwMTk3X3RyY19jYWNoZV9pbml0KHN0cnVjdAorIAl3cml0ZWwodmFsLCBwcml2LT5iYXNlICsgRUlQMTk3X1RSQ19QQVJBTVMpOworIAorIAkvKiBQcm9iZWQgYWRtaW4gUkFNIHNpemUgaW4gYWRtaW4gd29yZHMgKi8KKy0JYXNpemUgPSBlaXAxOTdfdHJjX2NhY2hlX3Byb2JlKHByaXYsIDAsIDB4YmZmZmZmZmYpID4+IDQ7CisrCWFzaXplID0gZWlwMTk3X3RyY19jYWNoZV9wcm9iZShwcml2LCAwLCAweDNmZmZmZmZmLCAxNikgPj4gNDsKKyAKKyAJLyogQ2xlYXIgYW55IEVDQyBlcnJvcnMgZGV0ZWN0ZWQgd2hpbGUgcHJvYmluZyEgKi8KKyAJd3JpdGVsKDAsIHByaXYtPmJhc2UgKyBFSVAxOTdfVFJDX0VDQ0NUUkwpOworIAorKwkvKiBTYW5pdHkgY2hlY2sgcHJvYmluZyByZXN1bHRzICovCisrCWlmIChkc2l6ZSA8IEVJUDE5N19NSU5fRFNJWkUgfHwgYXNpemUgPCBFSVAxOTdfTUlOX0FTSVpFKSB7CisrCQlkZXZfZXJyKHByaXYtPmRldiwgIlJlY29yZCBjYWNoZSBwcm9iaW5nIGZhaWxlZCAoJWQsJWQpLiIsCisrCQkJZHNpemUsIGFzaXplKTsKKysJCXJldHVybiAtRU5PREVWOworKwl9CisrCisgCS8qCisgCSAqIERldGVybWluZSBvcHRpbWFsIGNvbmZpZ3VyYXRpb24gZnJvbSBSQU0gc2l6ZXMKKyAJICogTm90ZSB0aGF0IHdlIGFzc3VtZSB0aGF0IHRoZSBwaHlzaWNhbCBSQU0gY29uZmlndXJhdGlvbiBpcyBzYW5lCitAQCAtMjUxLDYgKzI2Myw3IEBAIHN0YXRpYyB2b2lkIGVpcDE5N190cmNfY2FjaGVfaW5pdChzdHJ1Y3QKKyAKKyAJZGV2X2luZm8ocHJpdi0+ZGV2LCAiVFJDIGluaXQ6ICVkZCwlZGEgKCVkciwlZGgpXG4iLAorIAkJIGRzaXplLCBhc2l6ZSwgY3NfcmNfbWF4LCBjc19odF93YyArIGNzX2h0X3djKTsKKysJcmV0dXJuIDA7CisgfQorIAorIHN0YXRpYyB2b2lkIGVpcDE5N19pbml0X2Zpcm13YXJlKHN0cnVjdCBzYWZleGNlbF9jcnlwdG9fcHJpdiAqcHJpdikKK0BAIC0yOTgsMTMgKzMxMSwxNCBAQCBzdGF0aWMgdm9pZCBlaXAxOTdfaW5pdF9maXJtd2FyZShzdHJ1Y3QKKyBzdGF0aWMgaW50IGVpcDE5N193cml0ZV9maXJtd2FyZShzdHJ1Y3Qgc2FmZXhjZWxfY3J5cHRvX3ByaXYgKnByaXYsCisgCQkJCSAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKKyB7CistCWNvbnN0IHUzMiAqZGF0YSA9IChjb25zdCB1MzIgKilmdy0+ZGF0YTsKKysJY29uc3QgX19iZTMyICpkYXRhID0gKGNvbnN0IF9fYmUzMiAqKWZ3LT5kYXRhOworIAlpbnQgaTsKKyAKKyAJLyogV3JpdGUgdGhlIGZpcm13YXJlICovCisgCWZvciAoaSA9IDA7IGkgPCBmdy0+c2l6ZSAvIHNpemVvZih1MzIpOyBpKyspCisgCQl3cml0ZWwoYmUzMl90b19jcHUoZGF0YVtpXSksCistCQkgICAgICAgcHJpdi0+YmFzZSArIEVJUDE5N19DTEFTU0lGSUNBVElPTl9SQU1TICsgaSAqIHNpemVvZih1MzIpKTsKKysJCSAgICAgICBwcml2LT5iYXNlICsgRUlQMTk3X0NMQVNTSUZJQ0FUSU9OX1JBTVMgKworKwkJICAgICAgIGkgKiBzaXplb2YoX19iZTMyKSk7CisgCisgCS8qIEV4Y2x1ZGUgZmluYWwgMiBOT1BzIGZyb20gc2l6ZSAqLworIAlyZXR1cm4gaSAtIEVJUDE5N19GV19URVJNSU5BTF9OT1BTOworQEAgLTQ3MSw2ICs0ODUsMTQgQEAgc3RhdGljIGludCBzYWZleGNlbF9od19zZXR1cF9jZGVzY19yaW5ncworIAkJY2RfZmV0Y2hfY250ID0gKCgxIDw8IHByaXYtPmh3Y29uZmlnLmh3Y2ZzaXplKSAvCisgCQkJCWNkX3NpemVfcm5kKSAtIDE7CisgCX0KKysJLyoKKysJICogU2luY2Ugd2UncmUgdXNpbmcgY29tbWFuZCBkZXNjJ3Mgd2F5IGxhcmdlciB0aGFuIGZvcm1hbGx5IHNwZWNpZmllZCwKKysJICogd2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIHdlIGNhbiBmaXQgZXZlbiAxIGZvciBsb3ctZW5kIEVJUDE5NidzIQorKwkgKi8KKysJaWYgKCFjZF9mZXRjaF9jbnQpIHsKKysJCWRldl9lcnIocHJpdi0+ZGV2LCAiVW5hYmxlIHRvIGZpdCBldmVuIDEgY29tbWFuZCBkZXNjIVxuIik7CisrCQlyZXR1cm4gLUVOT0RFVjsKKysJfQorIAorIAlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+Y29uZmlnLnJpbmdzOyBpKyspIHsKKyAJCS8qIHJpbmcgYmFzZSBhZGRyZXNzICovCitAQCAtNDc5LDEyICs1MDEsMTIgQEAgc3RhdGljIGludCBzYWZleGNlbF9od19zZXR1cF9jZGVzY19yaW5ncworIAkJd3JpdGVsKHVwcGVyXzMyX2JpdHMocHJpdi0+cmluZ1tpXS5jZHIuYmFzZV9kbWEpLAorIAkJICAgICAgIEVJUDE5N19ISUFfQ0RSKHByaXYsIGkpICsgRUlQMTk3X0hJQV94RFJfUklOR19CQVNFX0FERFJfSEkpOworIAorLQkJd3JpdGVsKEVJUDE5N194RFJfREVTQ19NT0RFXzY0QklUIHwgKHByaXYtPmNvbmZpZy5jZF9vZmZzZXQgPDwgMTYpIHwKKy0JCSAgICAgICBwcml2LT5jb25maWcuY2Rfc2l6ZSwKKysJCXdyaXRlbChFSVAxOTdfeERSX0RFU0NfTU9ERV82NEJJVCB8IEVJUDE5N19DRFJfREVTQ19NT0RFX0FEQ1AgfAorKwkJICAgICAgIChwcml2LT5jb25maWcuY2Rfb2Zmc2V0IDw8IDE0KSB8IHByaXYtPmNvbmZpZy5jZF9zaXplLAorIAkJICAgICAgIEVJUDE5N19ISUFfQ0RSKHByaXYsIGkpICsgRUlQMTk3X0hJQV94RFJfREVTQ19TSVpFKTsKKyAJCXdyaXRlbCgoKGNkX2ZldGNoX2NudCAqCisgCQkJIChjZF9zaXplX3JuZCA8PCBwcml2LT5od2NvbmZpZy5od2RhdGF3KSkgPDwgMTYpIHwKKy0JCSAgICAgICAoY2RfZmV0Y2hfY250ICogcHJpdi0+Y29uZmlnLmNkX29mZnNldCksCisrCQkgICAgICAgKGNkX2ZldGNoX2NudCAqIChwcml2LT5jb25maWcuY2Rfb2Zmc2V0IC8gc2l6ZW9mKHUzMikpKSwKKyAJCSAgICAgICBFSVAxOTdfSElBX0NEUihwcml2LCBpKSArIEVJUDE5N19ISUFfeERSX0NGRyk7CisgCisgCQkvKiBDb25maWd1cmUgRE1BIHR4IGNvbnRyb2wgKi8KK0BAIC01MjcsMTMgKzU0OSwxMyBAQCBzdGF0aWMgaW50IHNhZmV4Y2VsX2h3X3NldHVwX3JkZXNjX3JpbmdzCisgCQl3cml0ZWwodXBwZXJfMzJfYml0cyhwcml2LT5yaW5nW2ldLnJkci5iYXNlX2RtYSksCisgCQkgICAgICAgRUlQMTk3X0hJQV9SRFIocHJpdiwgaSkgKyBFSVAxOTdfSElBX3hEUl9SSU5HX0JBU0VfQUREUl9ISSk7CisgCistCQl3cml0ZWwoRUlQMTk3X3hEUl9ERVNDX01PREVfNjRCSVQgfCAocHJpdi0+Y29uZmlnLnJkX29mZnNldCA8PCAxNikgfAorKwkJd3JpdGVsKEVJUDE5N194RFJfREVTQ19NT0RFXzY0QklUIHwgKHByaXYtPmNvbmZpZy5yZF9vZmZzZXQgPDwgMTQpIHwKKyAJCSAgICAgICBwcml2LT5jb25maWcucmRfc2l6ZSwKKyAJCSAgICAgICBFSVAxOTdfSElBX1JEUihwcml2LCBpKSArIEVJUDE5N19ISUFfeERSX0RFU0NfU0laRSk7CisgCisgCQl3cml0ZWwoKChyZF9mZXRjaF9jbnQgKgorIAkJCSAocmRfc2l6ZV9ybmQgPDwgcHJpdi0+aHdjb25maWcuaHdkYXRhdykpIDw8IDE2KSB8CistCQkgICAgICAgKHJkX2ZldGNoX2NudCAqIHByaXYtPmNvbmZpZy5yZF9vZmZzZXQpLAorKwkJICAgICAgIChyZF9mZXRjaF9jbnQgKiAocHJpdi0+Y29uZmlnLnJkX29mZnNldCAvIHNpemVvZih1MzIpKSksCisgCQkgICAgICAgRUlQMTk3X0hJQV9SRFIocHJpdiwgaSkgKyBFSVAxOTdfSElBX3hEUl9DRkcpOworIAorIAkJLyogQ29uZmlndXJlIERNQSB0eCBjb250cm9sICovCitAQCAtNTU5LDcgKzU4MSw3IEBAIHN0YXRpYyBpbnQgc2FmZXhjZWxfaHdfc2V0dXBfcmRlc2NfcmluZ3MKKyBzdGF0aWMgaW50IHNhZmV4Y2VsX2h3X2luaXQoc3RydWN0IHNhZmV4Y2VsX2NyeXB0b19wcml2ICpwcml2KQorIHsKKyAJdTMyIHZhbDsKKy0JaW50IGksIHJldCwgcGU7CisrCWludCBpLCByZXQsIHBlLCBvcGJ1ZmxvLCBvcGJ1ZmhpOworIAorIAlkZXZfZGJnKHByaXYtPmRldiwgIkhXIGluaXQ6IHVzaW5nICVkIHBpcGUocykgYW5kICVkIHJpbmcocylcbiIsCisgCQlwcml2LT5jb25maWcucGVzLCBwcml2LT5jb25maWcucmluZ3MpOworQEAgLTU5NSw4ICs2MTcsOCBAQCBzdGF0aWMgaW50IHNhZmV4Y2VsX2h3X2luaXQoc3RydWN0IHNhZmV4CisgCQl3cml0ZWwoRUlQMTk3X0R4RV9USFJfQ1RSTF9SRVNFVF9QRSwKKyAJCSAgICAgICBFSVAxOTdfSElBX0RGRV9USFIocHJpdikgKyBFSVAxOTdfSElBX0RGRV9USFJfQ1RSTChwZSkpOworIAorLQkJaWYgKHByaXYtPmZsYWdzICYgU0FGRVhDRUxfSFdfRUlQMTk3KQorLQkJCS8qIFJlc2V0IEhJQSBpbnB1dCBpbnRlcmZhY2UgYXJiaXRlciAoRUlQMTk3IG9ubHkpICovCisrCQlpZiAocHJpdi0+ZmxhZ3MgJiBFSVAxOTdfUEVfQVJCKQorKwkJCS8qIFJlc2V0IEhJQSBpbnB1dCBpbnRlcmZhY2UgYXJiaXRlciAoaWYgcHJlc2VudCkgKi8KKyAJCQl3cml0ZWwoRUlQMTk3X0hJQV9SQV9QRV9DVFJMX1JFU0VULAorIAkJCSAgICAgICBFSVAxOTdfSElBX0FJQyhwcml2KSArIEVJUDE5N19ISUFfUkFfUEVfQ1RSTChwZSkpOworIAorQEAgLTYzOSw5ICs2NjEsMTYgQEAgc3RhdGljIGludCBzYWZleGNlbF9od19pbml0KHN0cnVjdCBzYWZleAorIAkJCTsKKyAKKyAJCS8qIERNQSB0cmFuc2ZlciBzaXplIHRvIHVzZSAqLworKwkJaWYgKHByaXYtPmh3Y29uZmlnLmh3bnVtcGVzID4gNCkgeworKwkJCW9wYnVmbG8gPSA5OworKwkJCW9wYnVmaGkgPSAxMDsKKysJCX0gZWxzZSB7CisrCQkJb3BidWZsbyA9IDc7CisrCQkJb3BidWZoaSA9IDg7CisrCQl9CisgCQl2YWwgPSBFSVAxOTdfSElBX0RTRV9DRkdfRElTX0RFQlVHOworLQkJdmFsIHw9IEVJUDE5N19ISUFfRHhFX0NGR19NSU5fREFUQV9TSVpFKDcpIHwKKy0JCSAgICAgICBFSVAxOTdfSElBX0R4RV9DRkdfTUFYX0RBVEFfU0laRSg4KTsKKysJCXZhbCB8PSBFSVAxOTdfSElBX0R4RV9DRkdfTUlOX0RBVEFfU0laRShvcGJ1ZmxvKSB8CisrCQkgICAgICAgRUlQMTk3X0hJQV9EeEVfQ0ZHX01BWF9EQVRBX1NJWkUob3BidWZoaSk7CisgCQl2YWwgfD0gRUlQMTk3X0hJQV9EeEVfQ0ZHX0RBVEFfQ0FDSEVfQ1RSTChXUl9DQUNIRV8zQklUUyk7CisgCQl2YWwgfD0gRUlQMTk3X0hJQV9EU0VfQ0ZHX0FMV0FZU19CVUZGRVJBQkxFOworIAkJLyogRklYTUU6IGluc3RhYmlsaXR5IGlzc3VlcyBjYW4gb2NjdXIgZm9yIEVJUDk3IGJ1dCBkaXNhYmxpbmcKK0BAIC02NTUsOCArNjg0LDggQEAgc3RhdGljIGludCBzYWZleGNlbF9od19pbml0KHN0cnVjdCBzYWZleAorIAkJd3JpdGVsKDAsIEVJUDE5N19ISUFfRFNFX1RIUihwcml2KSArIEVJUDE5N19ISUFfRFNFX1RIUl9DVFJMKHBlKSk7CisgCisgCQkvKiBDb25maWd1cmUgdGhlIHByb2Nlc2luZyBlbmdpbmUgdGhyZXNob2xkcyAqLworLQkJd3JpdGVsKEVJUDE5N19QRV9PVVRfREJVRl9USFJFU19NSU4oNykgfAorLQkJICAgICAgIEVJUDE5N19QRV9PVVRfREJVRl9USFJFU19NQVgoOCksCisrCQl3cml0ZWwoRUlQMTk3X1BFX09VVF9EQlVGX1RIUkVTX01JTihvcGJ1ZmxvKSB8CisrCQkgICAgICAgRUlQMTk3X1BFX09VVF9EQlVGX1RIUkVTX01BWChvcGJ1ZmhpKSwKKyAJCSAgICAgICBFSVAxOTdfUEUocHJpdikgKyBFSVAxOTdfUEVfT1VUX0RCVUZfVEhSRVMocGUpKTsKKyAKKyAJCS8qIFByb2Nlc3NpbmcgRW5naW5lIGNvbmZpZ3VyYXRpb24gKi8KK0BAIC02OTYsNyArNzI1LDcgQEAgc3RhdGljIGludCBzYWZleGNlbF9od19pbml0KHN0cnVjdCBzYWZleAorIAkJd3JpdGVsKDAsCisgCQkgICAgICAgRUlQMTk3X0hJQV9DRFIocHJpdiwgaSkgKyBFSVAxOTdfSElBX3hEUl9QUk9DX1BOVFIpOworIAorLQkJd3JpdGVsKChFSVAxOTdfREVGQVVMVF9SSU5HX1NJWkUgKiBwcml2LT5jb25maWcuY2Rfb2Zmc2V0KSA8PCAyLAorKwkJd3JpdGVsKChFSVAxOTdfREVGQVVMVF9SSU5HX1NJWkUgKiBwcml2LT5jb25maWcuY2Rfb2Zmc2V0KSwKKyAJCSAgICAgICBFSVAxOTdfSElBX0NEUihwcml2LCBpKSArIEVJUDE5N19ISUFfeERSX1JJTkdfU0laRSk7CisgCX0KKyAKK0BAIC03MTksNyArNzQ4LDcgQEAgc3RhdGljIGludCBzYWZleGNlbF9od19pbml0KHN0cnVjdCBzYWZleAorIAkJICAgICAgIEVJUDE5N19ISUFfUkRSKHByaXYsIGkpICsgRUlQMTk3X0hJQV94RFJfUFJPQ19QTlRSKTsKKyAKKyAJCS8qIFJpbmcgc2l6ZSAqLworLQkJd3JpdGVsKChFSVAxOTdfREVGQVVMVF9SSU5HX1NJWkUgKiBwcml2LT5jb25maWcucmRfb2Zmc2V0KSA8PCAyLAorKwkJd3JpdGVsKChFSVAxOTdfREVGQVVMVF9SSU5HX1NJWkUgKiBwcml2LT5jb25maWcucmRfb2Zmc2V0KSwKKyAJCSAgICAgICBFSVAxOTdfSElBX1JEUihwcml2LCBpKSArIEVJUDE5N19ISUFfeERSX1JJTkdfU0laRSk7CisgCX0KKyAKK0BAIC03MzYsMTkgKzc2NSwyOCBAQCBzdGF0aWMgaW50IHNhZmV4Y2VsX2h3X2luaXQoc3RydWN0IHNhZmV4CisgCS8qIENsZWFyIGFueSBISUEgaW50ZXJydXB0ICovCisgCXdyaXRlbChHRU5NQVNLKDMwLCAyMCksIEVJUDE5N19ISUFfQUlDX0cocHJpdikgKyBFSVAxOTdfSElBX0FJQ19HX0FDSyk7CisgCistCWlmIChwcml2LT5mbGFncyAmIFNBRkVYQ0VMX0hXX0VJUDE5NykgeworLQkJZWlwMTk3X3RyY19jYWNoZV9pbml0KHByaXYpOworLQkJcHJpdi0+ZmxhZ3MgfD0gRUlQMTk3X1RSQ19DQUNIRTsKKysJaWYgKHByaXYtPmZsYWdzICYgRUlQMTk3X1NJTVBMRV9UUkMpIHsKKysJCXdyaXRlbChFSVAxOTdfU1RSQ19DT05GSUdfSU5JVCB8CisrCQkgICAgICAgRUlQMTk3X1NUUkNfQ09ORklHX0xBUkdFX1JFQyhFSVAxOTdfQ1NfVFJDX1JFQ19XQykgfAorKwkJICAgICAgIEVJUDE5N19TVFJDX0NPTkZJR19TTUFMTF9SRUMoRUlQMTk3X0NTX1RSQ19SRUNfV0MpLAorKwkJICAgICAgIHByaXYtPmJhc2UgKyBFSVAxOTdfU1RSQ19DT05GSUcpOworKwkJd3JpdGVsKEVJUDE5N19QRV9FSVA5Nl9UT0tFTl9DVFJMMl9DVFhfRE9ORSwKKysJCSAgICAgICBFSVAxOTdfUEUocHJpdikgKyBFSVAxOTdfUEVfRUlQOTZfVE9LRU5fQ1RSTDIoMCkpOworKwl9IGVsc2UgaWYgKHByaXYtPmZsYWdzICYgU0FGRVhDRUxfSFdfRUlQMTk3KSB7CisrCQlyZXQgPSBlaXAxOTdfdHJjX2NhY2hlX2luaXQocHJpdik7CisrCQlpZiAocmV0KQorKwkJCXJldHVybiByZXQ7CisrCX0KKyAKKysJaWYgKHByaXYtPmZsYWdzICYgRUlQMTk3X0lDRSkgeworIAkJcmV0ID0gZWlwMTk3X2xvYWRfZmlybXdhcmVzKHByaXYpOworIAkJaWYgKHJldCkKKyAJCQlyZXR1cm4gcmV0OworIAl9CisgCistCXNhZmV4Y2VsX2h3X3NldHVwX2NkZXNjX3JpbmdzKHByaXYpOworLQlzYWZleGNlbF9od19zZXR1cF9yZGVzY19yaW5ncyhwcml2KTsKKy0KKy0JcmV0dXJuIDA7CisrCXJldHVybiBzYWZleGNlbF9od19zZXR1cF9jZGVzY19yaW5ncyhwcml2KSA/OgorKwkgICAgICAgc2FmZXhjZWxfaHdfc2V0dXBfcmRlc2NfcmluZ3MocHJpdikgPzoKKysJICAgICAgIDA7CisgfQorIAorIC8qIENhbGxlZCB3aXRoIHJpbmcncyBsb2NrIHRha2VuICovCitAQCAtODM2LDIwICs4NzQsMjQgQEAgZmluYWxpemU6CisgCXNwaW5fdW5sb2NrX2JoKCZwcml2LT5yaW5nW3JpbmddLmxvY2spOworIAorIAkvKiBsZXQgdGhlIFJEUiBrbm93IHdlIGhhdmUgcGVuZGluZyBkZXNjcmlwdG9ycyAqLworLQl3cml0ZWwoKHJkZXNjICogcHJpdi0+Y29uZmlnLnJkX29mZnNldCkgPDwgMiwKKysJd3JpdGVsKChyZGVzYyAqIHByaXYtPmNvbmZpZy5yZF9vZmZzZXQpLAorIAkgICAgICAgRUlQMTk3X0hJQV9SRFIocHJpdiwgcmluZykgKyBFSVAxOTdfSElBX3hEUl9QUkVQX0NPVU5UKTsKKyAKKyAJLyogbGV0IHRoZSBDRFIga25vdyB3ZSBoYXZlIHBlbmRpbmcgZGVzY3JpcHRvcnMgKi8KKy0Jd3JpdGVsKChjZGVzYyAqIHByaXYtPmNvbmZpZy5jZF9vZmZzZXQpIDw8IDIsCisrCXdyaXRlbCgoY2Rlc2MgKiBwcml2LT5jb25maWcuY2Rfb2Zmc2V0KSwKKyAJICAgICAgIEVJUDE5N19ISUFfQ0RSKHByaXYsIHJpbmcpICsgRUlQMTk3X0hJQV94RFJfUFJFUF9DT1VOVCk7CisgfQorIAorIGlubGluZSBpbnQgc2FmZXhjZWxfcmRlc2NfY2hlY2tfZXJyb3JzKHN0cnVjdCBzYWZleGNlbF9jcnlwdG9fcHJpdiAqcHJpdiwKKy0JCQkJICAgICAgIHN0cnVjdCBzYWZleGNlbF9yZXN1bHRfZGVzYyAqcmRlc2MpCisrCQkJCSAgICAgICB2b2lkICpyZHApCisgeworLQlpZiAobGlrZWx5KCghcmRlc2MtPmRlc2NyaXB0b3Jfb3ZlcmZsb3cpICYmCistCQkgICAoIXJkZXNjLT5idWZmZXJfb3ZlcmZsb3cpICYmCistCQkgICAoIXJkZXNjLT5yZXN1bHRfZGF0YS5lcnJvcl9jb2RlKSkpCisrCXN0cnVjdCBzYWZleGNlbF9yZXN1bHRfZGVzYyAqcmRlc2MgPSByZHA7CisrCXN0cnVjdCByZXN1bHRfZGF0YV9kZXNjICpyZXN1bHRfZGF0YSA9IHJkcCArIHByaXYtPmNvbmZpZy5yZXNfb2Zmc2V0OworKworKwlpZiAobGlrZWx5KCghcmRlc2MtPmxhc3Rfc2VnKSB8fCAvKiBSZXN0IG9ubHkgdmFsaWQgaWYgbGFzdCBzZWchICovCisrCQkgICAoKCFyZGVzYy0+ZGVzY3JpcHRvcl9vdmVyZmxvdykgJiYKKysJCSAgICAoIXJkZXNjLT5idWZmZXJfb3ZlcmZsb3cpICYmCisrCQkgICAgKCFyZXN1bHRfZGF0YS0+ZXJyb3JfY29kZSkpKSkKKyAJCXJldHVybiAwOworIAorIAlpZiAocmRlc2MtPmRlc2NyaXB0b3Jfb3ZlcmZsb3cpCitAQCAtODU4LDEzICs5MDAsMTQgQEAgaW5saW5lIGludCBzYWZleGNlbF9yZGVzY19jaGVja19lcnJvcnMocworIAlpZiAocmRlc2MtPmJ1ZmZlcl9vdmVyZmxvdykKKyAJCWRldl9lcnIocHJpdi0+ZGV2LCAiQnVmZmVyIG92ZXJmbG93IGRldGVjdGVkIik7CisgCistCWlmIChyZGVzYy0+cmVzdWx0X2RhdGEuZXJyb3JfY29kZSAmIDB4NDA2NikgeworKwlpZiAocmVzdWx0X2RhdGEtPmVycm9yX2NvZGUgJiAweDQwNjYpIHsKKyAJCS8qIEZhdGFsIGVycm9yIChiaXRzIDEsMiw1LDYgJiAxNCkgKi8KKyAJCWRldl9lcnIocHJpdi0+ZGV2LAorIAkJCSJyZXN1bHQgZGVzY3JpcHRvciBlcnJvciAoJXgpIiwKKy0JCQlyZGVzYy0+cmVzdWx0X2RhdGEuZXJyb3JfY29kZSk7CisrCQkJcmVzdWx0X2RhdGEtPmVycm9yX2NvZGUpOworKworIAkJcmV0dXJuIC1FSU87CistCX0gZWxzZSBpZiAocmRlc2MtPnJlc3VsdF9kYXRhLmVycm9yX2NvZGUgJgorKwl9IGVsc2UgaWYgKHJlc3VsdF9kYXRhLT5lcnJvcl9jb2RlICYKKyAJCSAgIChCSVQoNykgfCBCSVQoNCkgfCBCSVQoMykgfCBCSVQoMCkpKSB7CisgCQkvKgorIAkJICogR2l2ZSBwcmlvcml0eSBvdmVyIGF1dGhlbnRpY2F0aW9uIGZhaWxzOgorQEAgLTg3Miw3ICs5MTUsNyBAQCBpbmxpbmUgaW50IHNhZmV4Y2VsX3JkZXNjX2NoZWNrX2Vycm9ycyhzCisgCQkgKiBzb21ldGhpbmcgd3Jvbmcgd2l0aCB0aGUgaW5wdXQhCisgCQkgKi8KKyAJCXJldHVybiAtRUlOVkFMOworLQl9IGVsc2UgaWYgKHJkZXNjLT5yZXN1bHRfZGF0YS5lcnJvcl9jb2RlICYgQklUKDkpKSB7CisrCX0gZWxzZSBpZiAocmVzdWx0X2RhdGEtPmVycm9yX2NvZGUgJiBCSVQoOSkpIHsKKyAJCS8qIEF1dGhlbnRpY2F0aW9uIGZhaWxlZCAqLworIAkJcmV0dXJuIC1FQkFETVNHOworIAl9CitAQCAtOTMxLDE2ICs5NzQsMTggQEAgaW50IHNhZmV4Y2VsX2ludmFsaWRhdGVfY2FjaGUoc3RydWN0IGNyeQorIHsKKyAJc3RydWN0IHNhZmV4Y2VsX2NvbW1hbmRfZGVzYyAqY2Rlc2M7CisgCXN0cnVjdCBzYWZleGNlbF9yZXN1bHRfZGVzYyAqcmRlc2M7CisrCXN0cnVjdCBzYWZleGNlbF90b2tlbiAgKmRtbXk7CisgCWludCByZXQgPSAwOworIAorIAkvKiBQcmVwYXJlIGNvbW1hbmQgZGVzY3JpcHRvciAqLworLQljZGVzYyA9IHNhZmV4Y2VsX2FkZF9jZGVzYyhwcml2LCByaW5nLCB0cnVlLCB0cnVlLCAwLCAwLCAwLCBjdHhyX2RtYSk7CisrCWNkZXNjID0gc2FmZXhjZWxfYWRkX2NkZXNjKHByaXYsIHJpbmcsIHRydWUsIHRydWUsIDAsIDAsIDAsIGN0eHJfZG1hLAorKwkJCQkgICAmZG1teSk7CisgCWlmIChJU19FUlIoY2Rlc2MpKQorIAkJcmV0dXJuIFBUUl9FUlIoY2Rlc2MpOworIAorIAljZGVzYy0+Y29udHJvbF9kYXRhLnR5cGUgPSBFSVAxOTdfVFlQRV9FWFRFTkRFRDsKKyAJY2Rlc2MtPmNvbnRyb2xfZGF0YS5vcHRpb25zID0gMDsKKy0JY2Rlc2MtPmNvbnRyb2xfZGF0YS5yZWZyZXNoID0gMDsKKysJY2Rlc2MtPmNvbnRyb2xfZGF0YS5jb250ZXh0X2xvICY9IH5FSVAxOTdfQ09OVEVYVF9TSVpFX01BU0s7CisgCWNkZXNjLT5jb250cm9sX2RhdGEuY29udHJvbDAgPSBDT05URVhUX0NPTlRST0xfSU5WX1RSOworIAorIAkvKiBQcmVwYXJlIHJlc3VsdCBkZXNjcmlwdG9yICovCitAQCAtMTAwMyw3ICsxMDQ4LDcgQEAgaGFuZGxlX3Jlc3VsdHM6CisgYWNrbm93bGVkZ2U6CisgCWlmIChpKQorIAkJd3JpdGVsKEVJUDE5N194RFJfUFJPQ194RF9QS1QoaSkgfAorLQkJICAgICAgIEVJUDE5N194RFJfUFJPQ194RF9DT1VOVCh0b3RfZGVzY3MgKiBwcml2LT5jb25maWcucmRfb2Zmc2V0KSwKKysJCSAgICAgICAodG90X2Rlc2NzICogcHJpdi0+Y29uZmlnLnJkX29mZnNldCksCisgCQkgICAgICAgRUlQMTk3X0hJQV9SRFIocHJpdiwgcmluZykgKyBFSVAxOTdfSElBX3hEUl9QUk9DX0NPVU5UKTsKKyAKKyAJLyogSWYgdGhlIG51bWJlciBvZiByZXF1ZXN0cyBvdmVyZmxvd2VkIHRoZSBjb3VudGVyLCB0cnkgdG8gcHJvY2VlZCBtb3JlCitAQCAtMTE3MSw2ICsxMjE2LDQ0IEBAIHN0YXRpYyBzdHJ1Y3Qgc2FmZXhjZWxfYWxnX3RlbXBsYXRlICpzYWYKKyAJJnNhZmV4Y2VsX2FsZ194dHNfYWVzLAorIAkmc2FmZXhjZWxfYWxnX2djbSwKKyAJJnNhZmV4Y2VsX2FsZ19jY20sCisrCSZzYWZleGNlbF9hbGdfY3JjMzIsCisrCSZzYWZleGNlbF9hbGdfY2JjbWFjLAorKwkmc2FmZXhjZWxfYWxnX3hjYmNtYWMsCisrCSZzYWZleGNlbF9hbGdfY21hYywKKysJJnNhZmV4Y2VsX2FsZ19jaGFjaGEyMCwKKysJJnNhZmV4Y2VsX2FsZ19jaGFjaGFwb2x5LAorKwkmc2FmZXhjZWxfYWxnX2NoYWNoYXBvbHlfZXNwLAorKwkmc2FmZXhjZWxfYWxnX3NtMywKKysJJnNhZmV4Y2VsX2FsZ19obWFjX3NtMywKKysJJnNhZmV4Y2VsX2FsZ19lY2Jfc200LAorKwkmc2FmZXhjZWxfYWxnX2NiY19zbTQsCisrCSZzYWZleGNlbF9hbGdfb2ZiX3NtNCwKKysJJnNhZmV4Y2VsX2FsZ19jZmJfc200LAorKwkmc2FmZXhjZWxfYWxnX2N0cl9zbTQsCisrCSZzYWZleGNlbF9hbGdfYXV0aGVuY19obWFjX3NoYTFfY2JjX3NtNCwKKysJJnNhZmV4Y2VsX2FsZ19hdXRoZW5jX2htYWNfc20zX2NiY19zbTQsCisrCSZzYWZleGNlbF9hbGdfYXV0aGVuY19obWFjX3NoYTFfY3RyX3NtNCwKKysJJnNhZmV4Y2VsX2FsZ19hdXRoZW5jX2htYWNfc20zX2N0cl9zbTQsCisrCSZzYWZleGNlbF9hbGdfc2hhM18yMjQsCisrCSZzYWZleGNlbF9hbGdfc2hhM18yNTYsCisrCSZzYWZleGNlbF9hbGdfc2hhM18zODQsCisrCSZzYWZleGNlbF9hbGdfc2hhM181MTIsCisrCSZzYWZleGNlbF9hbGdfaG1hY19zaGEzXzIyNCwKKysJJnNhZmV4Y2VsX2FsZ19obWFjX3NoYTNfMjU2LAorKwkmc2FmZXhjZWxfYWxnX2htYWNfc2hhM18zODQsCisrCSZzYWZleGNlbF9hbGdfaG1hY19zaGEzXzUxMiwKKysJJnNhZmV4Y2VsX2FsZ19hdXRoZW5jX2htYWNfc2hhMV9jYmNfZGVzLAorKwkmc2FmZXhjZWxfYWxnX2F1dGhlbmNfaG1hY19zaGEyNTZfY2JjX2RlczNfZWRlLAorKwkmc2FmZXhjZWxfYWxnX2F1dGhlbmNfaG1hY19zaGEyMjRfY2JjX2RlczNfZWRlLAorKwkmc2FmZXhjZWxfYWxnX2F1dGhlbmNfaG1hY19zaGE1MTJfY2JjX2RlczNfZWRlLAorKwkmc2FmZXhjZWxfYWxnX2F1dGhlbmNfaG1hY19zaGEzODRfY2JjX2RlczNfZWRlLAorKwkmc2FmZXhjZWxfYWxnX2F1dGhlbmNfaG1hY19zaGEyNTZfY2JjX2RlcywKKysJJnNhZmV4Y2VsX2FsZ19hdXRoZW5jX2htYWNfc2hhMjI0X2NiY19kZXMsCisrCSZzYWZleGNlbF9hbGdfYXV0aGVuY19obWFjX3NoYTUxMl9jYmNfZGVzLAorKwkmc2FmZXhjZWxfYWxnX2F1dGhlbmNfaG1hY19zaGEzODRfY2JjX2RlcywKKysJJnNhZmV4Y2VsX2FsZ19yZmM0MTA2X2djbSwKKysJJnNhZmV4Y2VsX2FsZ19yZmM0NTQzX2djbSwKKysJJnNhZmV4Y2VsX2FsZ19yZmM0MzA5X2NjbSwKKyB9OworIAorIHN0YXRpYyBpbnQgc2FmZXhjZWxfcmVnaXN0ZXJfYWxnb3JpdGhtcyhzdHJ1Y3Qgc2FmZXhjZWxfY3J5cHRvX3ByaXYgKnByaXYpCitAQCAtMTI0MCwzMCArMTMyMywzMCBAQCBzdGF0aWMgdm9pZCBzYWZleGNlbF91bnJlZ2lzdGVyX2FsZ29yaXRoCisgCisgc3RhdGljIHZvaWQgc2FmZXhjZWxfY29uZmlndXJlKHN0cnVjdCBzYWZleGNlbF9jcnlwdG9fcHJpdiAqcHJpdikKKyB7CistCXUzMiB2YWwsIG1hc2sgPSAwOworLQorLQl2YWwgPSByZWFkbChFSVAxOTdfSElBX0FJQ19HKHByaXYpICsgRUlQMTk3X0hJQV9PUFRJT05TKTsKKy0KKy0JLyogUmVhZCBudW1iZXIgb2YgUEVzIGZyb20gdGhlIGVuZ2luZSAqLworLQlpZiAocHJpdi0+ZmxhZ3MgJiBTQUZFWENFTF9IV19FSVAxOTcpCistCQkvKiBXaWRlciBmaWVsZCB3aWR0aCBmb3IgYWxsIEVJUDE5NyB0eXBlIGVuZ2luZXMgKi8KKy0JCW1hc2sgPSBFSVAxOTdfTl9QRVNfTUFTSzsKKy0JZWxzZQorLQkJLyogTmFycm93IGZpZWxkIHdpZHRoIGZvciBFSVA5NyB0eXBlIGVuZ2luZSAqLworLQkJbWFzayA9IEVJUDk3X05fUEVTX01BU0s7CistCistCXByaXYtPmNvbmZpZy5wZXMgPSAodmFsID4+IEVJUDE5N19OX1BFU19PRkZTRVQpICYgbWFzazsKKysJdTMyIG1hc2sgPSBCSVQocHJpdi0+aHdjb25maWcuaHdkYXRhdykgLSAxOworIAorLQlwcml2LT5jb25maWcucmluZ3MgPSBtaW5fdCh1MzIsIHZhbCAmIEdFTk1BU0soMywgMCksIG1heF9yaW5ncyk7CisrCXByaXYtPmNvbmZpZy5wZXMgPSBwcml2LT5od2NvbmZpZy5od251bXBlczsKKysJcHJpdi0+Y29uZmlnLnJpbmdzID0gbWluX3QodTMyLCBwcml2LT5od2NvbmZpZy5od251bXJpbmdzLCBtYXhfcmluZ3MpOworKwkvKiBDYW5ub3QgY3VycmVudGx5IHN1cHBvcnQgbW9yZSByaW5ncyB0aGFuIHdlIGhhdmUgcmluZyBBSUNzISAqLworKwlwcml2LT5jb25maWcucmluZ3MgPSBtaW5fdCh1MzIsIHByaXYtPmNvbmZpZy5yaW5ncywKKysJCQkJCXByaXYtPmh3Y29uZmlnLmh3bnVtcmFpYyk7CisgCistCXZhbCA9ICh2YWwgJiBHRU5NQVNLKDI3LCAyNSkpID4+IDI1OworLQltYXNrID0gQklUKHZhbCkgLSAxOworLQorLQlwcml2LT5jb25maWcuY2Rfc2l6ZSA9IChzaXplb2Yoc3RydWN0IHNhZmV4Y2VsX2NvbW1hbmRfZGVzYykgLyBzaXplb2YodTMyKSk7CisrCXByaXYtPmNvbmZpZy5jZF9zaXplID0gRUlQMTk3X0NENjRfRkVUQ0hfU0laRTsKKyAJcHJpdi0+Y29uZmlnLmNkX29mZnNldCA9IChwcml2LT5jb25maWcuY2Rfc2l6ZSArIG1hc2spICYgfm1hc2s7CisrCXByaXYtPmNvbmZpZy5jZHNoX29mZnNldCA9IChFSVAxOTdfTUFYX1RPS0VOUyArIG1hc2spICYgfm1hc2s7CisgCistCXByaXYtPmNvbmZpZy5yZF9zaXplID0gKHNpemVvZihzdHJ1Y3Qgc2FmZXhjZWxfcmVzdWx0X2Rlc2MpIC8gc2l6ZW9mKHUzMikpOworKwkvKiByZXMgdG9rZW4gaXMgYmVoaW5kIHRoZSBkZXNjciwgYnV0IG9mcyBtdXN0IGJlIHJvdW5kZWQgdG8gYnVzd2R0aCAqLworKwlwcml2LT5jb25maWcucmVzX29mZnNldCA9IChFSVAxOTdfUkQ2NF9GRVRDSF9TSVpFICsgbWFzaykgJiB+bWFzazsKKysJLyogbm93IHRoZSBzaXplIG9mIHRoZSBkZXNjciBpcyB0aGlzIDFzdCBwYXJ0IHBsdXMgdGhlIHJlc3VsdCBzdHJ1Y3QgKi8KKysJcHJpdi0+Y29uZmlnLnJkX3NpemUgICAgPSBwcml2LT5jb25maWcucmVzX29mZnNldCArCisrCQkJCSAgRUlQMTk3X1JENjRfUkVTVUxUX1NJWkU7CisgCXByaXYtPmNvbmZpZy5yZF9vZmZzZXQgPSAocHJpdi0+Y29uZmlnLnJkX3NpemUgKyBtYXNrKSAmIH5tYXNrOworKworKwkvKiBjb252ZXJ0IGR3b3JkcyB0byBieXRlcyAqLworKwlwcml2LT5jb25maWcuY2Rfb2Zmc2V0ICo9IHNpemVvZih1MzIpOworKwlwcml2LT5jb25maWcuY2RzaF9vZmZzZXQgKj0gc2l6ZW9mKHUzMik7CisrCXByaXYtPmNvbmZpZy5yZF9vZmZzZXQgKj0gc2l6ZW9mKHUzMik7CisrCXByaXYtPmNvbmZpZy5yZXNfb2Zmc2V0ICo9IHNpemVvZih1MzIpOworIH0KKyAKKyBzdGF0aWMgdm9pZCBzYWZleGNlbF9pbml0X3JlZ2lzdGVyX29mZnNldHMoc3RydWN0IHNhZmV4Y2VsX2NyeXB0b19wcml2ICpwcml2KQorQEAgLTEzMDksNyArMTM5Miw3IEBAIHN0YXRpYyBpbnQgc2FmZXhjZWxfcHJvYmVfZ2VuZXJpYyh2b2lkICoKKyAJCQkJICBpbnQgaXNfcGNpX2RldikKKyB7CisgCXN0cnVjdCBkZXZpY2UgKmRldiA9IHByaXYtPmRldjsKKy0JdTMyIHBlaWQsIHZlcnNpb24sIG1hc2ssIHZhbCwgaGlhb3B0OworKwl1MzIgcGVpZCwgdmVyc2lvbiwgbWFzaywgdmFsLCBoaWFvcHQsIGh3b3B0LCBwZW9wdDsKKyAJaW50IGksIHJldCwgaHdjdGc7CisgCisgCXByaXYtPmNvbnRleHRfcG9vbCA9IGRtYW1fcG9vbF9jcmVhdGUoInNhZmV4Y2VsLWNvbnRleHQiLCBkZXYsCitAQCAtMTM3MSwxMyArMTQ1NCwxNiBAQCBzdGF0aWMgaW50IHNhZmV4Y2VsX3Byb2JlX2dlbmVyaWModm9pZCAqCisgCSAqLworIAl2ZXJzaW9uID0gcmVhZGwoRUlQMTk3X0dMT0JBTChwcml2KSArIEVJUDE5N19WRVJTSU9OKTsKKyAJaWYgKCgocHJpdi0+ZmxhZ3MgJiBTQUZFWENFTF9IV19FSVAxOTcpICYmCistCSAgICAgKEVJUDE5N19SRUdfTE8xNih2ZXJzaW9uKSAhPSBFSVAxOTdfVkVSU0lPTl9MRSkpIHx8CisrCSAgICAgKEVJUDE5N19SRUdfTE8xNih2ZXJzaW9uKSAhPSBFSVAxOTdfVkVSU0lPTl9MRSkgJiYKKysJICAgICAoRUlQMTk3X1JFR19MTzE2KHZlcnNpb24pICE9IEVJUDE5Nl9WRVJTSU9OX0xFKSkgfHwKKyAJICAgICgoIShwcml2LT5mbGFncyAmIFNBRkVYQ0VMX0hXX0VJUDE5NykgJiYKKyAJICAgICAoRUlQMTk3X1JFR19MTzE2KHZlcnNpb24pICE9IEVJUDk3X1ZFUlNJT05fTEUpKSkpIHsKKyAJCS8qCisgCQkgKiBXZSBkaWQgbm90IGZpbmQgdGhlIGRldmljZSB0aGF0IG1hdGNoZWQgb3VyIGluaXRpYWwgcHJvYmluZworIAkJICogKG9yIG91ciBpbml0aWFsIHByb2JpbmcgZmFpbGVkKSBSZXBvcnQgYXBwcm9wcmlhdGUgZXJyb3IuCisgCQkgKi8KKysJCWRldl9lcnIocHJpdi0+ZGV2LCAiUHJvYmluZyBmb3IgRUlQOTcvRUlQMTl4IGZhaWxlZCAtIG5vIHN1Y2ggZGV2aWNlIChyZWFkICUwOHgpXG4iLAorKwkJCXZlcnNpb24pOworIAkJcmV0dXJuIC1FTk9ERVY7CisgCX0KKyAKK0BAIC0xMzg1LDYgKzE0NzEsMTQgQEAgc3RhdGljIGludCBzYWZleGNlbF9wcm9iZV9nZW5lcmljKHZvaWQgKgorIAlod2N0ZyA9IHZlcnNpb24gPj4gMjg7CisgCXBlaWQgPSB2ZXJzaW9uICYgMjU1OworIAorKwkvKiBEZXRlY3QgRUlQMjA2IHByb2Nlc3NpbmcgcGlwZSAqLworKwl2ZXJzaW9uID0gcmVhZGwoRUlQMTk3X1BFKHByaXYpICsgKyBFSVAxOTdfUEVfVkVSU0lPTigwKSk7CisrCWlmIChFSVAxOTdfUkVHX0xPMTYodmVyc2lvbikgIT0gRUlQMjA2X1ZFUlNJT05fTEUpIHsKKysJCWRldl9lcnIocHJpdi0+ZGV2LCAiRUlQJWQ6IEVJUDIwNiBub3QgZGV0ZWN0ZWRcbiIsIHBlaWQpOworKwkJcmV0dXJuIC1FTk9ERVY7CisrCX0KKysJcHJpdi0+aHdjb25maWcucHB2ZXIgPSBFSVAxOTdfVkVSU0lPTl9NQVNLKHZlcnNpb24pOworKworIAkvKiBEZXRlY3QgRUlQOTYgcGFja2V0IGVuZ2luZSBhbmQgdmVyc2lvbiAqLworIAl2ZXJzaW9uID0gcmVhZGwoRUlQMTk3X1BFKHByaXYpICsgRUlQMTk3X1BFX0VJUDk2X1ZFUlNJT04oMCkpOworIAlpZiAoRUlQMTk3X1JFR19MTzE2KHZlcnNpb24pICE9IEVJUDk2X1ZFUlNJT05fTEUpIHsKK0BAIC0xMzkzLDEwICsxNDg3LDEzIEBAIHN0YXRpYyBpbnQgc2FmZXhjZWxfcHJvYmVfZ2VuZXJpYyh2b2lkICoKKyAJfQorIAlwcml2LT5od2NvbmZpZy5wZXZlciA9IEVJUDE5N19WRVJTSU9OX01BU0sodmVyc2lvbik7CisgCisrCWh3b3B0ID0gcmVhZGwoRUlQMTk3X0dMT0JBTChwcml2KSArIEVJUDE5N19PUFRJT05TKTsKKyAJaGlhb3B0ID0gcmVhZGwoRUlQMTk3X0hJQV9BSUMocHJpdikgKyBFSVAxOTdfSElBX09QVElPTlMpOworIAorIAlpZiAocHJpdi0+ZmxhZ3MgJiBTQUZFWENFTF9IV19FSVAxOTcpIHsKKyAJCS8qIEVJUDE5NyAqLworKwkJcGVvcHQgPSByZWFkbChFSVAxOTdfUEUocHJpdikgKyBFSVAxOTdfUEVfT1BUSU9OUygwKSk7CisrCisgCQlwcml2LT5od2NvbmZpZy5od2RhdGF3ICA9IChoaWFvcHQgPj4gRUlQMTk3X0hXREFUQVdfT0ZGU0VUKSAmCisgCQkJCQkgIEVJUDE5N19IV0RBVEFXX01BU0s7CisgCQlwcml2LT5od2NvbmZpZy5od2Nmc2l6ZSA9ICgoaGlhb3B0ID4+IEVJUDE5N19DRlNJWkVfT0ZGU0VUKSAmCitAQCAtMTQwNSw2ICsxNTAyLDE5IEBAIHN0YXRpYyBpbnQgc2FmZXhjZWxfcHJvYmVfZ2VuZXJpYyh2b2lkICoKKyAJCXByaXYtPmh3Y29uZmlnLmh3cmZzaXplID0gKChoaWFvcHQgPj4gRUlQMTk3X1JGU0laRV9PRkZTRVQpICYKKyAJCQkJCSAgIEVJUDE5N19SRlNJWkVfTUFTSykgKworIAkJCQkJICBFSVAxOTdfUkZTSVpFX0FESlVTVDsKKysJCXByaXYtPmh3Y29uZmlnLmh3bnVtcGVzCT0gKGhpYW9wdCA+PiBFSVAxOTdfTl9QRVNfT0ZGU0VUKSAmCisrCQkJCQkgIEVJUDE5N19OX1BFU19NQVNLOworKwkJcHJpdi0+aHdjb25maWcuaHdudW1yaW5ncyA9IChoaWFvcHQgPj4gRUlQMTk3X05fUklOR1NfT0ZGU0VUKSAmCisrCQkJCQkgICAgRUlQMTk3X05fUklOR1NfTUFTSzsKKysJCWlmIChoaWFvcHQgJiBFSVAxOTdfSElBX09QVF9IQVNfUEVfQVJCKQorKwkJCXByaXYtPmZsYWdzIHw9IEVJUDE5N19QRV9BUkI7CisrCQlpZiAoRUlQMjA2X09QVF9JQ0VfVFlQRShwZW9wdCkgPT0gMSkKKysJCQlwcml2LT5mbGFncyB8PSBFSVAxOTdfSUNFOworKwkJLyogSWYgbm90IGEgZnVsbCBUUkMsIHRoZW4gYXNzdW1lIHNpbXBsZSBUUkMgKi8KKysJCWlmICghKGh3b3B0ICYgRUlQMTk3X09QVF9IQVNfVFJDKSkKKysJCQlwcml2LT5mbGFncyB8PSBFSVAxOTdfU0lNUExFX1RSQzsKKysJCS8qIEVJUDE5NyBhbHdheXMgaGFzIFNPTUUgZm9ybSBvZiBUUkMgKi8KKysJCXByaXYtPmZsYWdzIHw9IEVJUDE5N19UUkNfQ0FDSEU7CisgCX0gZWxzZSB7CisgCQkvKiBFSVA5NyAqLworIAkJcHJpdi0+aHdjb25maWcuaHdkYXRhdyAgPSAoaGlhb3B0ID4+IEVJUDE5N19IV0RBVEFXX09GRlNFVCkgJgorQEAgLTE0MTMsNiArMTUyMywyMyBAQCBzdGF0aWMgaW50IHNhZmV4Y2VsX3Byb2JlX2dlbmVyaWModm9pZCAqCisgCQkJCQkgIEVJUDk3X0NGU0laRV9NQVNLOworIAkJcHJpdi0+aHdjb25maWcuaHdyZnNpemUgPSAoaGlhb3B0ID4+IEVJUDk3X1JGU0laRV9PRkZTRVQpICYKKyAJCQkJCSAgRUlQOTdfUkZTSVpFX01BU0s7CisrCQlwcml2LT5od2NvbmZpZy5od251bXBlcwk9IDE7IC8qIGJ5IGRlZmluaXRpb24gKi8KKysJCXByaXYtPmh3Y29uZmlnLmh3bnVtcmluZ3MgPSAoaGlhb3B0ID4+IEVJUDE5N19OX1JJTkdTX09GRlNFVCkgJgorKwkJCQkJICAgIEVJUDE5N19OX1JJTkdTX01BU0s7CisrCX0KKysKKysJLyogU2NhbiBmb3IgcmluZyBBSUMncyAqLworKwlmb3IgKGkgPSAwOyBpIDwgRUlQMTk3X01BWF9SSU5HX0FJQzsgaSsrKSB7CisrCQl2ZXJzaW9uID0gcmVhZGwoRUlQMTk3X0hJQV9BSUNfUihwcml2KSArCisrCQkJCUVJUDE5N19ISUFfQUlDX1JfVkVSU0lPTihpKSk7CisrCQlpZiAoRUlQMTk3X1JFR19MTzE2KHZlcnNpb24pICE9IEVJUDIwMV9WRVJTSU9OX0xFKQorKwkJCWJyZWFrOworKwl9CisrCXByaXYtPmh3Y29uZmlnLmh3bnVtcmFpYyA9IGk7CisrCS8qIExvdy1lbmQgRUlQMTk2IG1heSBub3QgaGF2ZSBhbnkgcmluZyBBSUMncyAuLi4gKi8KKysJaWYgKCFwcml2LT5od2NvbmZpZy5od251bXJhaWMpIHsKKysJCWRldl9lcnIocHJpdi0+ZGV2LCAiTm8gcmluZyBpbnRlcnJ1cHQgY29udHJvbGxlciBwcmVzZW50IVxuIik7CisrCQlyZXR1cm4gLUVOT0RFVjsKKyAJfQorIAorIAkvKiBHZXQgc3VwcG9ydGVkIGFsZ29yaXRobXMgZnJvbSBFSVA5NiB0cmFuc2Zvcm0gZW5naW5lICovCitAQCAtMTQyMCwxMCArMTU0NywxMiBAQCBzdGF0aWMgaW50IHNhZmV4Y2VsX3Byb2JlX2dlbmVyaWModm9pZCAqCisgCQkJCSAgICBFSVAxOTdfUEVfRUlQOTZfT1BUSU9OUygwKSk7CisgCisgCS8qIFByaW50IHNpbmdsZSBpbmZvIGxpbmUgZGVzY3JpYmluZyB3aGF0IHdlIGp1c3QgZGV0ZWN0ZWQgKi8KKy0JZGV2X2luZm8ocHJpdi0+ZGV2LCAiRUlQJWQ6JXgoJWQpLUhJQToleCglZCwlZCwlZCksUEU6JXgsYWxnOiUwOHhcbiIsCistCQkgcGVpZCwgcHJpdi0+aHdjb25maWcuaHd2ZXIsIGh3Y3RnLCBwcml2LT5od2NvbmZpZy5oaWF2ZXIsCistCQkgcHJpdi0+aHdjb25maWcuaHdkYXRhdywgcHJpdi0+aHdjb25maWcuaHdjZnNpemUsCistCQkgcHJpdi0+aHdjb25maWcuaHdyZnNpemUsIHByaXYtPmh3Y29uZmlnLnBldmVyLAorKwlkZXZfaW5mbyhwcml2LT5kZXYsICJFSVAlZDoleCglZCwlZCwlZCwlZCktSElBOiV4KCVkLCVkLCVkKSxQRToleC8leCxhbGc6JTA4eFxuIiwKKysJCSBwZWlkLCBwcml2LT5od2NvbmZpZy5od3ZlciwgaHdjdGcsIHByaXYtPmh3Y29uZmlnLmh3bnVtcGVzLAorKwkJIHByaXYtPmh3Y29uZmlnLmh3bnVtcmluZ3MsIHByaXYtPmh3Y29uZmlnLmh3bnVtcmFpYywKKysJCSBwcml2LT5od2NvbmZpZy5oaWF2ZXIsIHByaXYtPmh3Y29uZmlnLmh3ZGF0YXcsCisrCQkgcHJpdi0+aHdjb25maWcuaHdjZnNpemUsIHByaXYtPmh3Y29uZmlnLmh3cmZzaXplLAorKwkJIHByaXYtPmh3Y29uZmlnLnBwdmVyLCBwcml2LT5od2NvbmZpZy5wZXZlciwKKyAJCSBwcml2LT5od2NvbmZpZy5hbGdvX2ZsYWdzKTsKKyAKKyAJc2FmZXhjZWxfY29uZmlndXJlKHByaXYpOworQEAgLTE1NDcsNyArMTY3Niw2IEBAIHN0YXRpYyB2b2lkIHNhZmV4Y2VsX2h3X3Jlc2V0X3JpbmdzKHN0cnUKKyAJfQorIH0KKyAKKy0jaWYgSVNfRU5BQkxFRChDT05GSUdfT0YpCisgLyogZm9yIERldmljZSBUcmVlIHBsYXRmb3JtIGRyaXZlciAqLworIAorIHN0YXRpYyBpbnQgc2FmZXhjZWxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK0BAIC0xNjI1LDYgKzE3NTMsNyBAQCBzdGF0aWMgaW50IHNhZmV4Y2VsX3JlbW92ZShzdHJ1Y3QgcGxhdGZvCisgCXNhZmV4Y2VsX3VucmVnaXN0ZXJfYWxnb3JpdGhtcyhwcml2KTsKKyAJc2FmZXhjZWxfaHdfcmVzZXRfcmluZ3MocHJpdik7CisgCisrCWNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LT5yZWdfY2xrKTsKKyAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtPmNsayk7CisgCisgCWZvciAoaSA9IDA7IGkgPCBwcml2LT5jb25maWcucmluZ3M7IGkrKykKK0BAIC0xNjY2LDkgKzE3OTUsNyBAQCBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciAgY3J5cHRvX3NhCisgCQkub2ZfbWF0Y2hfdGFibGUgPSBzYWZleGNlbF9vZl9tYXRjaF90YWJsZSwKKyAJfSwKKyB9OworLSNlbmRpZgorIAorLSNpZiBJU19FTkFCTEVEKENPTkZJR19QQ0kpCisgLyogUENJRSBkZXZpY2VzIC0gaS5lLiBJbnNpZGUgU2VjdXJlIGRldmVsb3BtZW50IGJvYXJkcyAqLworIAorIHN0YXRpYyBpbnQgc2FmZXhjZWxfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorQEAgLTE3NTksNyArMTg4Niw3IEBAIHN0YXRpYyBpbnQgc2FmZXhjZWxfcGNpX3Byb2JlKHN0cnVjdCBwY2kKKyAJcmV0dXJuIHJjOworIH0KKyAKKy12b2lkIHNhZmV4Y2VsX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCisrc3RhdGljIHZvaWQgc2FmZXhjZWxfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKKyB7CisgCXN0cnVjdCBzYWZleGNlbF9jcnlwdG9fcHJpdiAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKyAJaW50IGk7CitAQCAtMTc4OSw1NCArMTkxNiwzMiBAQCBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc2FmZXhjZWxfcGNpX2RyCisgCS5wcm9iZSAgICAgICAgID0gc2FmZXhjZWxfcGNpX3Byb2JlLAorIAkucmVtb3ZlICAgICAgICA9IHNhZmV4Y2VsX3BjaV9yZW1vdmUsCisgfTsKKy0jZW5kaWYKKy0KKy0vKiBVbmZvcnR1bmF0ZWx5LCB3ZSBoYXZlIHRvIHJlc29ydCB0byBnbG9iYWwgdmFyaWFibGVzIGhlcmUgKi8KKy0jaWYgSVNfRU5BQkxFRChDT05GSUdfUENJKQorLWludCBwY2lyZWdfcmMgPSAtRUlOVkFMOyAvKiBEZWZhdWx0IHNhZmUgdmFsdWUgKi8KKy0jZW5kaWYKKy0jaWYgSVNfRU5BQkxFRChDT05GSUdfT0YpCistaW50IG9mcmVnX3JjID0gLUVJTlZBTDsgLyogRGVmYXVsdCBzYWZlIHZhbHVlICovCistI2VuZGlmCisgCisgc3RhdGljIGludCBfX2luaXQgc2FmZXhjZWxfaW5pdCh2b2lkKQorIHsKKy0jaWYgSVNfRU5BQkxFRChDT05GSUdfUENJKQorKwlpbnQgcmV0OworKworIAkvKiBSZWdpc3RlciBQQ0kgZHJpdmVyICovCistCXBjaXJlZ19yYyA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnNhZmV4Y2VsX3BjaV9kcml2ZXIpOworLSNlbmRpZgorKwlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZzYWZleGNlbF9wY2lfZHJpdmVyKTsKKyAKKy0jaWYgSVNfRU5BQkxFRChDT05GSUdfT0YpCisgCS8qIFJlZ2lzdGVyIHBsYXRmb3JtIGRyaXZlciAqLworLQlvZnJlZ19yYyA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmY3J5cHRvX3NhZmV4Y2VsKTsKKy0gI2lmIElTX0VOQUJMRUQoQ09ORklHX1BDSSkKKy0JLyogUmV0dXJuIHN1Y2Nlc3MgaWYgZWl0aGVyIFBDSSBvciBPRiByZWdpc3RlcmVkIE9LICovCistCXJldHVybiBwY2lyZWdfcmMgPyBvZnJlZ19yYyA6IDA7CistICNlbHNlCistCXJldHVybiBvZnJlZ19yYzsKKy0gI2VuZGlmCistI2Vsc2UKKy0gI2lmIElTX0VOQUJMRUQoQ09ORklHX1BDSSkKKy0JcmV0dXJuIHBjaXJlZ19yYzsKKy0gI2Vsc2UKKy0JcmV0dXJuIC1FSU5WQUw7CistICNlbmRpZgorLSNlbmRpZgorKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfT0YpICYmICFyZXQpIHsKKysJCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmY3J5cHRvX3NhZmV4Y2VsKTsKKysJCWlmIChyZXQpCisrCQkJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZzYWZleGNlbF9wY2lfZHJpdmVyKTsKKysJfQorKworKwlyZXR1cm4gcmV0OworIH0KKyAKKyBzdGF0aWMgdm9pZCBfX2V4aXQgc2FmZXhjZWxfZXhpdCh2b2lkKQorIHsKKy0jaWYgSVNfRU5BQkxFRChDT05GSUdfT0YpCisgCS8qIFVucmVnaXN0ZXIgcGxhdGZvcm0gZHJpdmVyICovCistCWlmICghb2ZyZWdfcmMpCisrCWlmIChJU19FTkFCTEVEKENPTkZJR19PRikpCisgCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmY3J5cHRvX3NhZmV4Y2VsKTsKKy0jZW5kaWYKKyAKKy0jaWYgSVNfRU5BQkxFRChDT05GSUdfUENJKQorIAkvKiBVbnJlZ2lzdGVyIFBDSSBkcml2ZXIgaWYgc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQgYmVmb3JlICovCistCWlmICghcGNpcmVnX3JjKQorLQkJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZzYWZleGNlbF9wY2lfZHJpdmVyKTsKKy0jZW5kaWYKKysJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZzYWZleGNlbF9wY2lfZHJpdmVyKTsKKyB9CisgCisgbW9kdWxlX2luaXQoc2FmZXhjZWxfaW5pdCk7CistLS0gYS9kcml2ZXJzL2NyeXB0by9pbnNpZGUtc2VjdXJlL3NhZmV4Y2VsX2NpcGhlci5jCisrKysgYi9kcml2ZXJzL2NyeXB0by9pbnNpZGUtc2VjdXJlL3NhZmV4Y2VsX2NpcGhlci5jCitAQCAtNSwxOCArNSwyMiBAQAorICAqIEFudG9pbmUgVGVuYXJ0IDxhbnRvaW5lLnRlbmFydEBmcmVlLWVsZWN0cm9ucy5jb20+CisgICovCisgCisrI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKyAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisgI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisgI2luY2x1ZGUgPGxpbnV4L2RtYXBvb2wuaD4KKy0KKyAjaW5jbHVkZSA8Y3J5cHRvL2FlYWQuaD4KKyAjaW5jbHVkZSA8Y3J5cHRvL2Flcy5oPgorICNpbmNsdWRlIDxjcnlwdG8vYXV0aGVuYy5oPgorKyNpbmNsdWRlIDxjcnlwdG8vY2hhY2hhLmg+CisgI2luY2x1ZGUgPGNyeXB0by9jdHIuaD4KKyAjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2Rlcy5oPgorICNpbmNsdWRlIDxjcnlwdG8vZ2NtLmg+CisgI2luY2x1ZGUgPGNyeXB0by9naGFzaC5oPgorKyNpbmNsdWRlIDxjcnlwdG8vcG9seTEzMDUuaD4KKyAjaW5jbHVkZSA8Y3J5cHRvL3NoYS5oPgorKyNpbmNsdWRlIDxjcnlwdG8vc20zLmg+CisrI2luY2x1ZGUgPGNyeXB0by9zbTQuaD4KKyAjaW5jbHVkZSA8Y3J5cHRvL3h0cy5oPgorICNpbmNsdWRlIDxjcnlwdG8vc2tjaXBoZXIuaD4KKyAjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2FlYWQuaD4KK0BAIC0zMyw2ICszNyw4IEBAIGVudW0gc2FmZXhjZWxfY2lwaGVyX2FsZyB7CisgCVNBRkVYQ0VMX0RFUywKKyAJU0FGRVhDRUxfM0RFUywKKyAJU0FGRVhDRUxfQUVTLAorKwlTQUZFWENFTF9DSEFDSEEyMCwKKysJU0FGRVhDRUxfU000LAorIH07CisgCisgc3RydWN0IHNhZmV4Y2VsX2NpcGhlcl9jdHggeworQEAgLTQxLDggKzQ3LDEyIEBAIHN0cnVjdCBzYWZleGNlbF9jaXBoZXJfY3R4IHsKKyAKKyAJdTMyIG1vZGU7CisgCWVudW0gc2FmZXhjZWxfY2lwaGVyX2FsZyBhbGc7CistCWJvb2wgYWVhZDsKKy0JaW50ICB4Y207IC8qIDA9YXV0aGVuYywgMT1HQ00sIDIgcmVzZXJ2ZWQgZm9yIENDTSAqLworKwl1OCBhZWFkOyAvKiAhPTA9QUVBRCwgMj1JUFNlYyBFU1AgQUVBRCwgMz1JUHNlYyBFU1AgR01BQyAqLworKwl1OCB4Y207ICAvKiAwPWF1dGhlbmMsIDE9R0NNLCAyIHJlc2VydmVkIGZvciBDQ00gKi8KKysJdTggYWFkc2tpcDsKKysJdTggYmxvY2tzejsKKysJdTMyIGl2bWFzazsKKysJdTMyIGN0cmluaXQ7CisgCisgCV9fbGUzMiBrZXlbMTZdOworIAl1MzIgbm9uY2U7CitAQCAtNTEsMTAgKzYxLDExIEBAIHN0cnVjdCBzYWZleGNlbF9jaXBoZXJfY3R4IHsKKyAJLyogQWxsIHRoZSBiZWxvdyBpcyBBRUFEIHNwZWNpZmljICovCisgCXUzMiBoYXNoX2FsZzsKKyAJdTMyIHN0YXRlX3N6OworLQl1MzIgaXBhZFtTSEE1MTJfRElHRVNUX1NJWkUgLyBzaXplb2YodTMyKV07CistCXUzMiBvcGFkW1NIQTUxMl9ESUdFU1RfU0laRSAvIHNpemVvZih1MzIpXTsKKysJX19iZTMyIGlwYWRbU0hBNTEyX0RJR0VTVF9TSVpFIC8gc2l6ZW9mKHUzMildOworKwlfX2JlMzIgb3BhZFtTSEE1MTJfRElHRVNUX1NJWkUgLyBzaXplb2YodTMyKV07CisgCisgCXN0cnVjdCBjcnlwdG9fY2lwaGVyICpoa2FlczsKKysJc3RydWN0IGNyeXB0b19hZWFkICpmYmFjazsKKyB9OworIAorIHN0cnVjdCBzYWZleGNlbF9jaXBoZXJfcmVxIHsKK0BAIC02NSwyMDYgKzc2LDI5OCBAQCBzdHJ1Y3Qgc2FmZXhjZWxfY2lwaGVyX3JlcSB7CisgCWludCAgbnJfc3JjLCBucl9kc3Q7CisgfTsKKyAKKy1zdGF0aWMgdm9pZCBzYWZleGNlbF9jaXBoZXJfdG9rZW4oc3RydWN0IHNhZmV4Y2VsX2NpcGhlcl9jdHggKmN0eCwgdTggKml2LAorLQkJCQkgIHN0cnVjdCBzYWZleGNlbF9jb21tYW5kX2Rlc2MgKmNkZXNjKQorK3N0YXRpYyBpbnQgc2FmZXhjZWxfc2tjaXBoZXJfaXYoc3RydWN0IHNhZmV4Y2VsX2NpcGhlcl9jdHggKmN0eCwgdTggKml2LAorKwkJCQlzdHJ1Y3Qgc2FmZXhjZWxfY29tbWFuZF9kZXNjICpjZGVzYykKKyB7CistCXUzMiBibG9ja19zeiA9IDA7CistCisgCWlmIChjdHgtPm1vZGUgPT0gQ09OVEVYVF9DT05UUk9MX0NSWVBUT19NT0RFX0NUUl9MT0FEKSB7CisgCQljZGVzYy0+Y29udHJvbF9kYXRhLm9wdGlvbnMgfD0gRUlQMTk3X09QVElPTl80X1RPS0VOX0lWX0NNRDsKKy0KKyAJCS8qIDMyIGJpdCBub25jZSAqLworIAkJY2Rlc2MtPmNvbnRyb2xfZGF0YS50b2tlblswXSA9IGN0eC0+bm9uY2U7CisgCQkvKiA2NCBiaXQgSVYgcGFydCAqLworIAkJbWVtY3B5KCZjZGVzYy0+Y29udHJvbF9kYXRhLnRva2VuWzFdLCBpdiwgOCk7CistCQkvKiAzMiBiaXQgY291bnRlciwgc3RhcnQgYXQgMSAoYmlnIGVuZGlhbiEpICovCistCQljZGVzYy0+Y29udHJvbF9kYXRhLnRva2VuWzNdID0gY3B1X3RvX2JlMzIoMSk7CistCistCQlyZXR1cm47CistCX0gZWxzZSBpZiAoY3R4LT54Y20gPT0gRUlQMTk3X1hDTV9NT0RFX0dDTSkgeworLQkJY2Rlc2MtPmNvbnRyb2xfZGF0YS5vcHRpb25zIHw9IEVJUDE5N19PUFRJT05fNF9UT0tFTl9JVl9DTUQ7CistCistCQkvKiA5NiBiaXQgSVYgcGFydCAqLworLQkJbWVtY3B5KCZjZGVzYy0+Y29udHJvbF9kYXRhLnRva2VuWzBdLCBpdiwgMTIpOworLQkJLyogMzIgYml0IGNvdW50ZXIsIHN0YXJ0IGF0IDEgKGJpZyBlbmRpYW4hKSAqLworLQkJY2Rlc2MtPmNvbnRyb2xfZGF0YS50b2tlblszXSA9IGNwdV90b19iZTMyKDEpOworLQorLQkJcmV0dXJuOworLQl9IGVsc2UgaWYgKGN0eC0+eGNtID09IEVJUDE5N19YQ01fTU9ERV9DQ00pIHsKKysJCS8qIDMyIGJpdCBjb3VudGVyLCBzdGFydCBhdCAwIG9yIDEgKGJpZyBlbmRpYW4hKSAqLworKwkJY2Rlc2MtPmNvbnRyb2xfZGF0YS50b2tlblszXSA9CisrCQkJKF9fZm9yY2UgdTMyKWNwdV90b19iZTMyKGN0eC0+Y3RyaW5pdCk7CisrCQlyZXR1cm4gNDsKKysJfQorKwlpZiAoY3R4LT5hbGcgPT0gU0FGRVhDRUxfQ0hBQ0hBMjApIHsKKyAJCWNkZXNjLT5jb250cm9sX2RhdGEub3B0aW9ucyB8PSBFSVAxOTdfT1BUSU9OXzRfVE9LRU5fSVZfQ01EOworLQorLQkJLyogVmFyaWFibGUgbGVuZ3RoIElWIHBhcnQgKi8KKy0JCW1lbWNweSgmY2Rlc2MtPmNvbnRyb2xfZGF0YS50b2tlblswXSwgaXYsIDE1IC0gaXZbMF0pOworLQkJLyogU3RhcnQgdmFyaWFibGUgbGVuZ3RoIGNvdW50ZXIgYXQgMCAqLworLQkJbWVtc2V0KCh1OCAqKSZjZGVzYy0+Y29udHJvbF9kYXRhLnRva2VuWzBdICsgMTUgLSBpdlswXSwKKy0JCSAgICAgICAwLCBpdlswXSArIDEpOworLQorLQkJcmV0dXJuOworKwkJLyogOTYgYml0IG5vbmNlIHBhcnQgKi8KKysJCW1lbWNweSgmY2Rlc2MtPmNvbnRyb2xfZGF0YS50b2tlblswXSwgJml2WzRdLCAxMik7CisrCQkvKiAzMiBiaXQgY291bnRlciAqLworKwkJY2Rlc2MtPmNvbnRyb2xfZGF0YS50b2tlblszXSA9ICoodTMyICopaXY7CisrCQlyZXR1cm4gNDsKKyAJfQorIAorLQlpZiAoY3R4LT5tb2RlICE9IENPTlRFWFRfQ09OVFJPTF9DUllQVE9fTU9ERV9FQ0IpIHsKKy0JCXN3aXRjaCAoY3R4LT5hbGcpIHsKKy0JCWNhc2UgU0FGRVhDRUxfREVTOgorLQkJCWJsb2NrX3N6ID0gREVTX0JMT0NLX1NJWkU7CistCQkJY2Rlc2MtPmNvbnRyb2xfZGF0YS5vcHRpb25zIHw9IEVJUDE5N19PUFRJT05fMl9UT0tFTl9JVl9DTUQ7CistCQkJYnJlYWs7CistCQljYXNlIFNBRkVYQ0VMXzNERVM6CistCQkJYmxvY2tfc3ogPSBERVMzX0VERV9CTE9DS19TSVpFOworLQkJCWNkZXNjLT5jb250cm9sX2RhdGEub3B0aW9ucyB8PSBFSVAxOTdfT1BUSU9OXzJfVE9LRU5fSVZfQ01EOworLQkJCWJyZWFrOworLQkJY2FzZSBTQUZFWENFTF9BRVM6CistCQkJYmxvY2tfc3ogPSBBRVNfQkxPQ0tfU0laRTsKKy0JCQljZGVzYy0+Y29udHJvbF9kYXRhLm9wdGlvbnMgfD0gRUlQMTk3X09QVElPTl80X1RPS0VOX0lWX0NNRDsKKy0JCQlicmVhazsKKy0JCX0KKy0JCW1lbWNweShjZGVzYy0+Y29udHJvbF9kYXRhLnRva2VuLCBpdiwgYmxvY2tfc3opOworLQl9CisrCWNkZXNjLT5jb250cm9sX2RhdGEub3B0aW9ucyB8PSBjdHgtPml2bWFzazsKKysJbWVtY3B5KGNkZXNjLT5jb250cm9sX2RhdGEudG9rZW4sIGl2LCBjdHgtPmJsb2Nrc3opOworKwlyZXR1cm4gY3R4LT5ibG9ja3N6IC8gc2l6ZW9mKHUzMik7CisgfQorIAorIHN0YXRpYyB2b2lkIHNhZmV4Y2VsX3NrY2lwaGVyX3Rva2VuKHN0cnVjdCBzYWZleGNlbF9jaXBoZXJfY3R4ICpjdHgsIHU4ICppdiwKKyAJCQkJICAgIHN0cnVjdCBzYWZleGNlbF9jb21tYW5kX2Rlc2MgKmNkZXNjLAorKwkJCQkgICAgc3RydWN0IHNhZmV4Y2VsX3Rva2VuICphdG9rZW4sCisgCQkJCSAgICB1MzIgbGVuZ3RoKQorIHsKKyAJc3RydWN0IHNhZmV4Y2VsX3Rva2VuICp0b2tlbjsKKysJaW50IGl2bGVuOworIAorLQlzYWZleGNlbF9jaXBoZXJfdG9rZW4oY3R4LCBpdiwgY2Rlc2MpOworLQorLQkvKiBza2lwIG92ZXIgd29yc3QgY2FzZSBJViBvZiA0IGR3b3Jkcywgbm8gbmVlZCB0byBiZSBleGFjdCAqLworLQl0b2tlbiA9IChzdHJ1Y3Qgc2FmZXhjZWxfdG9rZW4gKikoY2Rlc2MtPmNvbnRyb2xfZGF0YS50b2tlbiArIDQpOworKwlpdmxlbiA9IHNhZmV4Y2VsX3NrY2lwaGVyX2l2KGN0eCwgaXYsIGNkZXNjKTsKKysJaWYgKGl2bGVuID09IDQpIHsKKysJCS8qIE5vIHNwYWNlIGluIGNkZXNjLCBpbnN0cnVjdGlvbiBtb3ZlcyB0byBhdG9rZW4gKi8KKysJCWNkZXNjLT5hZGRpdGlvbmFsX2NkYXRhX3NpemUgPSAxOworKwkJdG9rZW4gPSBhdG9rZW47CisrCX0gZWxzZSB7CisrCQkvKiBFdmVyeXRoaW5nIGZpdHMgaW4gY2Rlc2MgKi8KKysJCXRva2VuID0gKHN0cnVjdCBzYWZleGNlbF90b2tlbiAqKShjZGVzYy0+Y29udHJvbF9kYXRhLnRva2VuICsgMik7CisrCQkvKiBOZWVkIHRvIHBhZCB3aXRoIE5PUCAqLworKwkJZWlwMTk3X25vb3BfdG9rZW4oJnRva2VuWzFdKTsKKysJfQorKworKwl0b2tlbi0+b3Bjb2RlID0gRUlQMTk3X1RPS0VOX09QQ09ERV9ESVJFQ1RJT047CisrCXRva2VuLT5wYWNrZXRfbGVuZ3RoID0gbGVuZ3RoOworKwl0b2tlbi0+c3RhdCA9IEVJUDE5N19UT0tFTl9TVEFUX0xBU1RfUEFDS0VUIHwKKysJCSAgICAgIEVJUDE5N19UT0tFTl9TVEFUX0xBU1RfSEFTSDsKKysJdG9rZW4tPmluc3RydWN0aW9ucyA9IEVJUDE5N19UT0tFTl9JTlNfTEFTVCB8CisrCQkJICAgICAgRUlQMTk3X1RPS0VOX0lOU19UWVBFX0NSWVBUTyB8CisrCQkJICAgICAgRUlQMTk3X1RPS0VOX0lOU19UWVBFX09VVFBVVDsKKyt9CisgCistCXRva2VuWzBdLm9wY29kZSA9IEVJUDE5N19UT0tFTl9PUENPREVfRElSRUNUSU9OOworLQl0b2tlblswXS5wYWNrZXRfbGVuZ3RoID0gbGVuZ3RoOworLQl0b2tlblswXS5zdGF0ID0gRUlQMTk3X1RPS0VOX1NUQVRfTEFTVF9QQUNLRVQgfAorLQkJCUVJUDE5N19UT0tFTl9TVEFUX0xBU1RfSEFTSDsKKy0JdG9rZW5bMF0uaW5zdHJ1Y3Rpb25zID0gRUlQMTk3X1RPS0VOX0lOU19MQVNUIHwKKy0JCQkJRUlQMTk3X1RPS0VOX0lOU19UWVBFX0NSWVBUTyB8CistCQkJCUVJUDE5N19UT0tFTl9JTlNfVFlQRV9PVVRQVVQ7Cisrc3RhdGljIHZvaWQgc2FmZXhjZWxfYWVhZF9pdihzdHJ1Y3Qgc2FmZXhjZWxfY2lwaGVyX2N0eCAqY3R4LCB1OCAqaXYsCisrCQkJICAgICBzdHJ1Y3Qgc2FmZXhjZWxfY29tbWFuZF9kZXNjICpjZGVzYykKKyt7CisrCWlmIChjdHgtPm1vZGUgPT0gQ09OVEVYVF9DT05UUk9MX0NSWVBUT19NT0RFX0NUUl9MT0FEIHx8CisrCSAgICBjdHgtPmFlYWQgJiBFSVAxOTdfQUVBRF9UWVBFX0lQU0VDX0VTUCkgeyAvKiBfRVNQIGFuZCBfRVNQX0dNQUMgKi8KKysJCS8qIDMyIGJpdCBub25jZSAqLworKwkJY2Rlc2MtPmNvbnRyb2xfZGF0YS50b2tlblswXSA9IGN0eC0+bm9uY2U7CisrCQkvKiA2NCBiaXQgSVYgcGFydCAqLworKwkJbWVtY3B5KCZjZGVzYy0+Y29udHJvbF9kYXRhLnRva2VuWzFdLCBpdiwgOCk7CisrCQkvKiAzMiBiaXQgY291bnRlciwgc3RhcnQgYXQgMCBvciAxIChiaWcgZW5kaWFuISkgKi8KKysJCWNkZXNjLT5jb250cm9sX2RhdGEudG9rZW5bM10gPQorKwkJCShfX2ZvcmNlIHUzMiljcHVfdG9fYmUzMihjdHgtPmN0cmluaXQpOworKwkJcmV0dXJuOworKwl9CisrCWlmIChjdHgtPnhjbSA9PSBFSVAxOTdfWENNX01PREVfR0NNIHx8IGN0eC0+YWxnID09IFNBRkVYQ0VMX0NIQUNIQTIwKSB7CisrCQkvKiA5NiBiaXQgSVYgcGFydCAqLworKwkJbWVtY3B5KCZjZGVzYy0+Y29udHJvbF9kYXRhLnRva2VuWzBdLCBpdiwgMTIpOworKwkJLyogMzIgYml0IGNvdW50ZXIsIHN0YXJ0IGF0IDAgb3IgMSAoYmlnIGVuZGlhbiEpICovCisrCQljZGVzYy0+Y29udHJvbF9kYXRhLnRva2VuWzNdID0KKysJCQkoX19mb3JjZSB1MzIpY3B1X3RvX2JlMzIoY3R4LT5jdHJpbml0KTsKKysJCXJldHVybjsKKysJfQorKwkvKiBDQkMgKi8KKysJbWVtY3B5KGNkZXNjLT5jb250cm9sX2RhdGEudG9rZW4sIGl2LCBjdHgtPmJsb2Nrc3opOworIH0KKyAKKyBzdGF0aWMgdm9pZCBzYWZleGNlbF9hZWFkX3Rva2VuKHN0cnVjdCBzYWZleGNlbF9jaXBoZXJfY3R4ICpjdHgsIHU4ICppdiwKKyAJCQkJc3RydWN0IHNhZmV4Y2VsX2NvbW1hbmRfZGVzYyAqY2Rlc2MsCisrCQkJCXN0cnVjdCBzYWZleGNlbF90b2tlbiAqYXRva2VuLAorIAkJCQllbnVtIHNhZmV4Y2VsX2NpcGhlcl9kaXJlY3Rpb24gZGlyZWN0aW9uLAorIAkJCQl1MzIgY3J5cHRsZW4sIHUzMiBhc3NvY2xlbiwgdTMyIGRpZ2VzdHNpemUpCisgeworLQlzdHJ1Y3Qgc2FmZXhjZWxfdG9rZW4gKnRva2VuOworKwlzdHJ1Y3Qgc2FmZXhjZWxfdG9rZW4gKmFhZHJlZjsKKysJaW50IGF0b2tzaXplID0gMjsgLyogU3RhcnQgd2l0aCBtaW5pbXVtIHNpemUgKi8KKysJaW50IGFzc29jYWRqID0gYXNzb2NsZW4gLSBjdHgtPmFhZHNraXAsIGFhZGFsaWduOworIAorLQlzYWZleGNlbF9jaXBoZXJfdG9rZW4oY3R4LCBpdiwgY2Rlc2MpOworKwkvKiBBbHdheXMgNCBkd29yZHMgb2YgZW1iZWRkZWQgSVYgIGZvciBBRUFEIG1vZGVzICovCisrCWNkZXNjLT5jb250cm9sX2RhdGEub3B0aW9ucyB8PSBFSVAxOTdfT1BUSU9OXzRfVE9LRU5fSVZfQ01EOworIAorLQlpZiAoZGlyZWN0aW9uID09IFNBRkVYQ0VMX0VOQ1JZUFQpIHsKKy0JCS8qIGFsaWduIGVuZCBvZiBpbnN0cnVjdGlvbiBzZXF1ZW5jZSB0byBlbmQgb2YgdG9rZW4gKi8KKy0JCXRva2VuID0gKHN0cnVjdCBzYWZleGNlbF90b2tlbiAqKShjZGVzYy0+Y29udHJvbF9kYXRhLnRva2VuICsKKy0JCQkgRUlQMTk3X01BWF9UT0tFTlMgLSAxMyk7CistCistCQl0b2tlblsxMl0ub3Bjb2RlID0gRUlQMTk3X1RPS0VOX09QQ09ERV9JTlNFUlQ7CistCQl0b2tlblsxMl0ucGFja2V0X2xlbmd0aCA9IGRpZ2VzdHNpemU7CistCQl0b2tlblsxMl0uc3RhdCA9IEVJUDE5N19UT0tFTl9TVEFUX0xBU1RfSEFTSCB8CistCQkJCSBFSVAxOTdfVE9LRU5fU1RBVF9MQVNUX1BBQ0tFVDsKKy0JCXRva2VuWzEyXS5pbnN0cnVjdGlvbnMgPSBFSVAxOTdfVE9LRU5fSU5TX1RZUEVfT1VUUFVUIHwKKy0JCQkJCSBFSVAxOTdfVE9LRU5fSU5TX0lOU0VSVF9IQVNIX0RJR0VTVDsKKy0JfSBlbHNlIHsKKysJaWYgKGRpcmVjdGlvbiA9PSBTQUZFWENFTF9ERUNSWVBUKQorIAkJY3J5cHRsZW4gLT0gZGlnZXN0c2l6ZTsKKyAKKy0JCS8qIGFsaWduIGVuZCBvZiBpbnN0cnVjdGlvbiBzZXF1ZW5jZSB0byBlbmQgb2YgdG9rZW4gKi8KKy0JCXRva2VuID0gKHN0cnVjdCBzYWZleGNlbF90b2tlbiAqKShjZGVzYy0+Y29udHJvbF9kYXRhLnRva2VuICsKKy0JCQkgRUlQMTk3X01BWF9UT0tFTlMgLSAxNCk7CistCistCQl0b2tlblsxMl0ub3Bjb2RlID0gRUlQMTk3X1RPS0VOX09QQ09ERV9SRVRSSUVWRTsKKy0JCXRva2VuWzEyXS5wYWNrZXRfbGVuZ3RoID0gZGlnZXN0c2l6ZTsKKy0JCXRva2VuWzEyXS5zdGF0ID0gRUlQMTk3X1RPS0VOX1NUQVRfTEFTVF9IQVNIIHwKKy0JCQkJIEVJUDE5N19UT0tFTl9TVEFUX0xBU1RfUEFDS0VUOworLQkJdG9rZW5bMTJdLmluc3RydWN0aW9ucyA9IEVJUDE5N19UT0tFTl9JTlNfSU5TRVJUX0hBU0hfRElHRVNUOworLQorLQkJdG9rZW5bMTNdLm9wY29kZSA9IEVJUDE5N19UT0tFTl9PUENPREVfVkVSSUZZOworLQkJdG9rZW5bMTNdLnBhY2tldF9sZW5ndGggPSBkaWdlc3RzaXplIHwKKy0JCQkJCSAgRUlQMTk3X1RPS0VOX0hBU0hfUkVTVUxUX1ZFUklGWTsKKy0JCXRva2VuWzEzXS5zdGF0ID0gRUlQMTk3X1RPS0VOX1NUQVRfTEFTVF9IQVNIIHwKKy0JCQkJIEVJUDE5N19UT0tFTl9TVEFUX0xBU1RfUEFDS0VUOworLQkJdG9rZW5bMTNdLmluc3RydWN0aW9ucyA9IEVJUDE5N19UT0tFTl9JTlNfVFlQRV9PVVRQVVQ7CistCX0KKy0KKy0JdG9rZW5bNl0ub3Bjb2RlID0gRUlQMTk3X1RPS0VOX09QQ09ERV9ESVJFQ1RJT047CistCXRva2VuWzZdLnBhY2tldF9sZW5ndGggPSBhc3NvY2xlbjsKKy0KKy0JaWYgKGxpa2VseShjcnlwdGxlbikpIHsKKy0JCXRva2VuWzZdLmluc3RydWN0aW9ucyA9IEVJUDE5N19UT0tFTl9JTlNfVFlQRV9IQVNIOworLQorLQkJdG9rZW5bMTBdLm9wY29kZSA9IEVJUDE5N19UT0tFTl9PUENPREVfRElSRUNUSU9OOworLQkJdG9rZW5bMTBdLnBhY2tldF9sZW5ndGggPSBjcnlwdGxlbjsKKy0JCXRva2VuWzEwXS5zdGF0ID0gRUlQMTk3X1RPS0VOX1NUQVRfTEFTVF9IQVNIOworLQkJdG9rZW5bMTBdLmluc3RydWN0aW9ucyA9IEVJUDE5N19UT0tFTl9JTlNfTEFTVCB8CistCQkJCQkgRUlQMTk3X1RPS0VOX0lOU19UWVBFX0NSWVBUTyB8CistCQkJCQkgRUlQMTk3X1RPS0VOX0lOU19UWVBFX0hBU0ggfAorLQkJCQkJIEVJUDE5N19UT0tFTl9JTlNfVFlQRV9PVVRQVVQ7CistCX0gZWxzZSBpZiAoY3R4LT54Y20gIT0gRUlQMTk3X1hDTV9NT0RFX0NDTSkgeworLQkJdG9rZW5bNl0uc3RhdCA9IEVJUDE5N19UT0tFTl9TVEFUX0xBU1RfSEFTSDsKKy0JCXRva2VuWzZdLmluc3RydWN0aW9ucyA9IEVJUDE5N19UT0tFTl9JTlNfTEFTVCB8CistCQkJCQlFSVAxOTdfVE9LRU5fSU5TX1RZUEVfSEFTSDsKKy0JfQorLQorLQlpZiAoIWN0eC0+eGNtKQorLQkJcmV0dXJuOworLQorLQl0b2tlbls4XS5vcGNvZGUgPSBFSVAxOTdfVE9LRU5fT1BDT0RFX0lOU0VSVF9SRU1SRVM7CistCXRva2VuWzhdLnBhY2tldF9sZW5ndGggPSAwOworLQl0b2tlbls4XS5pbnN0cnVjdGlvbnMgPSBBRVNfQkxPQ0tfU0laRTsKKy0KKy0JdG9rZW5bOV0ub3Bjb2RlID0gRUlQMTk3X1RPS0VOX09QQ09ERV9JTlNFUlQ7CistCXRva2VuWzldLnBhY2tldF9sZW5ndGggPSBBRVNfQkxPQ0tfU0laRTsKKy0JdG9rZW5bOV0uaW5zdHJ1Y3Rpb25zID0gRUlQMTk3X1RPS0VOX0lOU19UWVBFX09VVFBVVCB8CistCQkJCUVJUDE5N19UT0tFTl9JTlNfVFlQRV9DUllQVE87CistCistCWlmIChjdHgtPnhjbSA9PSBFSVAxOTdfWENNX01PREVfR0NNKSB7CistCQl0b2tlbls2XS5pbnN0cnVjdGlvbnMgPSBFSVAxOTdfVE9LRU5fSU5TX0xBU1QgfAorLQkJCQkJRUlQMTk3X1RPS0VOX0lOU19UWVBFX0hBU0g7CistCX0gZWxzZSB7CistCQl1OCAqY2JjbWFjaXYgPSAodTggKikmdG9rZW5bMV07CistCQl1MzIgKmFhZGxlbiA9ICh1MzIgKikmdG9rZW5bNV07CistCisrCWlmICh1bmxpa2VseShjdHgtPnhjbSA9PSBFSVAxOTdfWENNX01PREVfQ0NNKSkgeworIAkJLyogQ29uc3RydWN0IElWIGJsb2NrIEIwIGZvciB0aGUgQ0JDLU1BQyAqLworLQkJdG9rZW5bMF0ub3Bjb2RlID0gRUlQMTk3X1RPS0VOX09QQ09ERV9JTlNFUlQ7CistCQl0b2tlblswXS5wYWNrZXRfbGVuZ3RoID0gQUVTX0JMT0NLX1NJWkUgKworLQkJCQkJICgoYXNzb2NsZW4gPiAwKSA8PCAxKTsKKy0JCXRva2VuWzBdLmluc3RydWN0aW9ucyA9IEVJUDE5N19UT0tFTl9JTlNfT1JJR0lOX1RPS0VOIHwKKy0JCQkJCUVJUDE5N19UT0tFTl9JTlNfVFlQRV9IQVNIOworLQkJLyogVmFyaWFibGUgbGVuZ3RoIElWIHBhcnQgKi8KKy0JCW1lbWNweShjYmNtYWNpdiwgaXYsIDE1IC0gaXZbMF0pOworLQkJLyogZml4dXAgZmxhZ3MgYnl0ZSAqLworLQkJY2JjbWFjaXZbMF0gfD0gKChhc3NvY2xlbiA+IDApIDw8IDYpIHwgKChkaWdlc3RzaXplIC0gMikgPDwgMik7CistCQkvKiBDbGVhciB1cHBlciBieXRlcyBvZiB2YXJpYWJsZSBtZXNzYWdlIGxlbmd0aCB0byAwICovCistCQltZW1zZXQoY2JjbWFjaXYgKyAxNSAtIGl2WzBdLCAwLCBpdlswXSAtIDEpOworLQkJLyogaW5zZXJ0IGxvd2VyIDIgYnl0ZXMgb2YgbWVzc2FnZSBsZW5ndGggKi8KKy0JCWNiY21hY2l2WzE0XSA9IGNyeXB0bGVuID4+IDg7CistCQljYmNtYWNpdlsxNV0gPSBjcnlwdGxlbiAmIDI1NTsKKy0KKy0JCWlmIChhc3NvY2xlbikgeworLQkJCSphYWRsZW4gPSBjcHVfdG9fbGUzMihjcHVfdG9fYmUxNihhc3NvY2xlbikpOworLQkJCWFzc29jbGVuICs9IDI7CisrCQl1OCAqZmluYWxfaXYgPSAodTggKiljZGVzYy0+Y29udHJvbF9kYXRhLnRva2VuOworKwkJdTggKmNiY21hY2l2ID0gKHU4ICopJmF0b2tlblsxXTsKKysJCV9fbGUzMiAqYWFkbGVuID0gKF9fbGUzMiAqKSZhdG9rZW5bNV07CisrCisrCQlpZiAoY3R4LT5hZWFkID09IEVJUDE5N19BRUFEX1RZUEVfSVBTRUNfRVNQKSB7CisrCQkJLyogTGVuZ3RoICsgbm9uY2UgKi8KKysJCQljZGVzYy0+Y29udHJvbF9kYXRhLnRva2VuWzBdID0gY3R4LT5ub25jZTsKKysJCQkvKiBGaXh1cCBmbGFncyBieXRlICovCisrCQkJKihfX2xlMzIgKiljYmNtYWNpdiA9CisrCQkJCWNwdV90b19sZTMyKGN0eC0+bm9uY2UgfAorKwkJCQkJICAgICgoYXNzb2NhZGogPiAwKSA8PCA2KSB8CisrCQkJCQkgICAgKChkaWdlc3RzaXplIC0gMikgPDwgMikpOworKwkJCS8qIDY0IGJpdCBJViBwYXJ0ICovCisrCQkJbWVtY3B5KCZjZGVzYy0+Y29udHJvbF9kYXRhLnRva2VuWzFdLCBpdiwgOCk7CisrCQkJbWVtY3B5KGNiY21hY2l2ICsgNCwgaXYsIDgpOworKwkJCS8qIFN0YXJ0IGNvdW50ZXIgYXQgMCAqLworKwkJCWNkZXNjLT5jb250cm9sX2RhdGEudG9rZW5bM10gPSAwOworKwkJCS8qIE1lc3NhZ2UgbGVuZ3RoICovCisrCQkJKihfX2JlMzIgKikoY2JjbWFjaXYgKyAxMikgPSBjcHVfdG9fYmUzMihjcnlwdGxlbik7CisrCQl9IGVsc2UgeworKwkJCS8qIFZhcmlhYmxlIGxlbmd0aCBJViBwYXJ0ICovCisrCQkJbWVtY3B5KGZpbmFsX2l2LCBpdiwgMTUgLSBpdlswXSk7CisrCQkJbWVtY3B5KGNiY21hY2l2LCBpdiwgMTUgLSBpdlswXSk7CisrCQkJLyogU3RhcnQgdmFyaWFibGUgbGVuZ3RoIGNvdW50ZXIgYXQgMCAqLworKwkJCW1lbXNldChmaW5hbF9pdiArIDE1IC0gaXZbMF0sIDAsIGl2WzBdICsgMSk7CisrCQkJbWVtc2V0KGNiY21hY2l2ICsgMTUgLSBpdlswXSwgMCwgaXZbMF0gLSAxKTsKKysJCQkvKiBmaXh1cCBmbGFncyBieXRlICovCisrCQkJY2JjbWFjaXZbMF0gfD0gKChhc3NvY2FkaiA+IDApIDw8IDYpIHwKKysJCQkJICAgICAgICgoZGlnZXN0c2l6ZSAtIDIpIDw8IDIpOworKwkJCS8qIGluc2VydCBsb3dlciAyIGJ5dGVzIG9mIG1lc3NhZ2UgbGVuZ3RoICovCisrCQkJY2JjbWFjaXZbMTRdID0gY3J5cHRsZW4gPj4gODsKKysJCQljYmNtYWNpdlsxNV0gPSBjcnlwdGxlbiAmIDI1NTsKKysJCX0KKysKKysJCWF0b2tlbi0+b3Bjb2RlID0gRUlQMTk3X1RPS0VOX09QQ09ERV9JTlNFUlQ7CisrCQlhdG9rZW4tPnBhY2tldF9sZW5ndGggPSBBRVNfQkxPQ0tfU0laRSArCisrCQkJCQkoKGFzc29jYWRqID4gMCkgPDwgMSk7CisrCQlhdG9rZW4tPnN0YXQgPSAwOworKwkJYXRva2VuLT5pbnN0cnVjdGlvbnMgPSBFSVAxOTdfVE9LRU5fSU5TX09SSUdJTl9UT0tFTiB8CisrCQkJCSAgICAgICBFSVAxOTdfVE9LRU5fSU5TX1RZUEVfSEFTSDsKKysKKysJCWlmIChsaWtlbHkoYXNzb2NhZGopKSB7CisrCQkJKmFhZGxlbiA9IGNwdV90b19sZTMyKChhc3NvY2FkaiA+PiA4KSB8CisrCQkJCQkgICAgICAoYXNzb2NhZGogJiAyNTUpIDw8IDgpOworKwkJCWF0b2tlbiArPSA2OworKwkJCWF0b2tzaXplICs9IDc7CisrCQl9IGVsc2UgeworKwkJCWF0b2tlbiArPSA1OworKwkJCWF0b2tzaXplICs9IDY7CisgCQl9CisgCistCQl0b2tlbls2XS5pbnN0cnVjdGlvbnMgPSBFSVAxOTdfVE9LRU5fSU5TX1RZUEVfSEFTSDsKKy0KKy0JCS8qIEFsaWduIEFBRCBkYXRhIHRvd2FyZHMgaGFzaCBlbmdpbmUgKi8KKy0JCXRva2VuWzddLm9wY29kZSA9IEVJUDE5N19UT0tFTl9PUENPREVfSU5TRVJUOworLQkJYXNzb2NsZW4gJj0gMTU7CistCQl0b2tlbls3XS5wYWNrZXRfbGVuZ3RoID0gYXNzb2NsZW4gPyAxNiAtIGFzc29jbGVuIDogMDsKKy0KKysJCS8qIFByb2Nlc3MgQUFEIGRhdGEgKi8KKysJCWFhZHJlZiA9IGF0b2tlbjsKKysJCWF0b2tlbi0+b3Bjb2RlID0gRUlQMTk3X1RPS0VOX09QQ09ERV9ESVJFQ1RJT047CisrCQlhdG9rZW4tPnBhY2tldF9sZW5ndGggPSBhc3NvY2FkajsKKysJCWF0b2tlbi0+c3RhdCA9IDA7CisrCQlhdG9rZW4tPmluc3RydWN0aW9ucyA9IEVJUDE5N19UT0tFTl9JTlNfVFlQRV9IQVNIOworKwkJYXRva2VuKys7CisrCisrCQkvKiBGb3IgQ0NNIG9ubHksIGFsaWduIEFBRCBkYXRhIHRvd2FyZHMgaGFzaCBlbmdpbmUgKi8KKysJCWF0b2tlbi0+b3Bjb2RlID0gRUlQMTk3X1RPS0VOX09QQ09ERV9JTlNFUlQ7CisrCQlhYWRhbGlnbiA9IChhc3NvY2FkaiArIDIpICYgMTU7CisrCQlhdG9rZW4tPnBhY2tldF9sZW5ndGggPSBhc3NvY2FkaiAmJiBhYWRhbGlnbiA/CisrCQkJCQkJMTYgLSBhYWRhbGlnbiA6CisrCQkJCQkJMDsKKyAJCWlmIChsaWtlbHkoY3J5cHRsZW4pKSB7CistCQkJdG9rZW5bN10uaW5zdHJ1Y3Rpb25zID0gRUlQMTk3X1RPS0VOX0lOU19UWVBFX0hBU0g7CistCistCQkJLyogQWxpZ24gY3J5cHRvIGRhdGEgdG93YXJkcyBoYXNoIGVuZ2luZSAqLworLQkJCXRva2VuWzEwXS5zdGF0ID0gMDsKKysJCQlhdG9rZW4tPnN0YXQgPSAwOworKwkJCWF0b2tlbi0+aW5zdHJ1Y3Rpb25zID0gRUlQMTk3X1RPS0VOX0lOU19UWVBFX0hBU0g7CisrCQl9IGVsc2UgeworKwkJCWF0b2tlbi0+c3RhdCA9IEVJUDE5N19UT0tFTl9TVEFUX0xBU1RfSEFTSDsKKysJCQlhdG9rZW4tPmluc3RydWN0aW9ucyA9IEVJUDE5N19UT0tFTl9JTlNfTEFTVCB8CisrCQkJCQkgICAgICAgRUlQMTk3X1RPS0VOX0lOU19UWVBFX0hBU0g7CisrCQl9CisrCX0gZWxzZSB7CisrCQlzYWZleGNlbF9hZWFkX2l2KGN0eCwgaXYsIGNkZXNjKTsKKyAKKy0JCQl0b2tlblsxMV0ub3Bjb2RlID0gRUlQMTk3X1RPS0VOX09QQ09ERV9JTlNFUlQ7CistCQkJY3J5cHRsZW4gJj0gMTU7CistCQkJdG9rZW5bMTFdLnBhY2tldF9sZW5ndGggPSBjcnlwdGxlbiA/IDE2IC0gY3J5cHRsZW4gOiAwOworLQkJCXRva2VuWzExXS5zdGF0ID0gRUlQMTk3X1RPS0VOX1NUQVRfTEFTVF9IQVNIOworLQkJCXRva2VuWzExXS5pbnN0cnVjdGlvbnMgPSBFSVAxOTdfVE9LRU5fSU5TX1RZUEVfSEFTSDsKKysJCS8qIFByb2Nlc3MgQUFEIGRhdGEgKi8KKysJCWFhZHJlZiA9IGF0b2tlbjsKKysJCWF0b2tlbi0+b3Bjb2RlID0gRUlQMTk3X1RPS0VOX09QQ09ERV9ESVJFQ1RJT047CisrCQlhdG9rZW4tPnBhY2tldF9sZW5ndGggPSBhc3NvY2FkajsKKysJCWF0b2tlbi0+c3RhdCA9IEVJUDE5N19UT0tFTl9TVEFUX0xBU1RfSEFTSDsKKysJCWF0b2tlbi0+aW5zdHJ1Y3Rpb25zID0gRUlQMTk3X1RPS0VOX0lOU19MQVNUIHwKKysJCQkJICAgICAgIEVJUDE5N19UT0tFTl9JTlNfVFlQRV9IQVNIOworKwl9CisrCWF0b2tlbisrOworKworKwlpZiAoY3R4LT5hZWFkID09IEVJUDE5N19BRUFEX1RZUEVfSVBTRUNfRVNQKSB7CisrCQkvKiBGb3IgRVNQIG1vZGUgKGFuZCBub3QgR01BQyksIHNraXAgb3ZlciB0aGUgSVYgKi8KKysJCWF0b2tlbi0+b3Bjb2RlID0gRUlQMTk3X1RPS0VOX09QQ09ERV9ESVJFQ1RJT047CisrCQlhdG9rZW4tPnBhY2tldF9sZW5ndGggPSBFSVAxOTdfQUVBRF9JUFNFQ19JVl9TSVpFOworKwkJYXRva2VuLT5zdGF0ID0gMDsKKysJCWF0b2tlbi0+aW5zdHJ1Y3Rpb25zID0gMDsKKysJCWF0b2tlbisrOworKwkJYXRva3NpemUrKzsKKysJfSBlbHNlIGlmICh1bmxpa2VseShjdHgtPmFsZyA9PSBTQUZFWENFTF9DSEFDSEEyMCAmJgorKwkJCSAgICBkaXJlY3Rpb24gPT0gU0FGRVhDRUxfREVDUllQVCkpIHsKKysJCS8qIFBvbHktY2hhY2hhIGRlY3J5cHRpb24gbmVlZHMgYSBkdW1teSBOT1AgaGVyZSAuLi4gKi8KKysJCWF0b2tlbi0+b3Bjb2RlID0gRUlQMTk3X1RPS0VOX09QQ09ERV9JTlNFUlQ7CisrCQlhdG9rZW4tPnBhY2tldF9sZW5ndGggPSAxNjsgLyogQWNjb3JkaW5nIHRvIE9wIE1hbnVhbCAqLworKwkJYXRva2VuLT5zdGF0ID0gMDsKKysJCWF0b2tlbi0+aW5zdHJ1Y3Rpb25zID0gMDsKKysJCWF0b2tlbisrOworKwkJYXRva3NpemUrKzsKKysJfQorKworKwlpZiAgKGN0eC0+eGNtKSB7CisrCQkvKiBGb3IgR0NNIGFuZCBDQ00sIG9idGFpbiBlbmMoWTApICovCisrCQlhdG9rZW4tPm9wY29kZSA9IEVJUDE5N19UT0tFTl9PUENPREVfSU5TRVJUX1JFTVJFUzsKKysJCWF0b2tlbi0+cGFja2V0X2xlbmd0aCA9IDA7CisrCQlhdG9rZW4tPnN0YXQgPSAwOworKwkJYXRva2VuLT5pbnN0cnVjdGlvbnMgPSBBRVNfQkxPQ0tfU0laRTsKKysJCWF0b2tlbisrOworKworKwkJYXRva2VuLT5vcGNvZGUgPSBFSVAxOTdfVE9LRU5fT1BDT0RFX0lOU0VSVDsKKysJCWF0b2tlbi0+cGFja2V0X2xlbmd0aCA9IEFFU19CTE9DS19TSVpFOworKwkJYXRva2VuLT5zdGF0ID0gMDsKKysJCWF0b2tlbi0+aW5zdHJ1Y3Rpb25zID0gRUlQMTk3X1RPS0VOX0lOU19UWVBFX09VVFBVVCB8CisrCQkJCSAgICAgICBFSVAxOTdfVE9LRU5fSU5TX1RZUEVfQ1JZUFRPOworKwkJYXRva2VuKys7CisrCQlhdG9rc2l6ZSArPSAyOworKwl9CisrCisrCWlmIChsaWtlbHkoY3J5cHRsZW4gfHwgY3R4LT5hbGcgPT0gU0FGRVhDRUxfQ0hBQ0hBMjApKSB7CisrCQkvKiBGaXh1cCBzdGF0IGZpZWxkIGZvciBBQUQgZGlyZWN0aW9uIGluc3RydWN0aW9uICovCisrCQlhYWRyZWYtPnN0YXQgPSAwOworKworKwkJLyogUHJvY2VzcyBjcnlwdG8gZGF0YSAqLworKwkJYXRva2VuLT5vcGNvZGUgPSBFSVAxOTdfVE9LRU5fT1BDT0RFX0RJUkVDVElPTjsKKysJCWF0b2tlbi0+cGFja2V0X2xlbmd0aCA9IGNyeXB0bGVuOworKworKwkJaWYgKHVubGlrZWx5KGN0eC0+YWVhZCA9PSBFSVAxOTdfQUVBRF9UWVBFX0lQU0VDX0VTUF9HTUFDKSkgeworKwkJCS8qIEZpeHVwIGluc3RydWN0aW9uIGZpZWxkIGZvciBBQUQgZGlyIGluc3RydWN0aW9uICovCisrCQkJYWFkcmVmLT5pbnN0cnVjdGlvbnMgPSBFSVAxOTdfVE9LRU5fSU5TX1RZUEVfSEFTSDsKKysKKysJCQkvKiBEbyBub3Qgc2VuZCB0byBjcnlwdCBlbmdpbmUgaW4gY2FzZSBvZiBHTUFDICovCisrCQkJYXRva2VuLT5pbnN0cnVjdGlvbnMgPSBFSVAxOTdfVE9LRU5fSU5TX0xBU1QgfAorKwkJCQkJICAgICAgIEVJUDE5N19UT0tFTl9JTlNfVFlQRV9IQVNIIHwKKysJCQkJCSAgICAgICBFSVAxOTdfVE9LRU5fSU5TX1RZUEVfT1VUUFVUOworKwkJfSBlbHNlIHsKKysJCQlhdG9rZW4tPmluc3RydWN0aW9ucyA9IEVJUDE5N19UT0tFTl9JTlNfTEFTVCB8CisrCQkJCQkgICAgICAgRUlQMTk3X1RPS0VOX0lOU19UWVBFX0NSWVBUTyB8CisrCQkJCQkgICAgICAgRUlQMTk3X1RPS0VOX0lOU19UWVBFX0hBU0ggfAorKwkJCQkJICAgICAgIEVJUDE5N19UT0tFTl9JTlNfVFlQRV9PVVRQVVQ7CisrCQl9CisrCisrCQljcnlwdGxlbiAmPSAxNTsKKysJCWlmICh1bmxpa2VseShjdHgtPnhjbSA9PSBFSVAxOTdfWENNX01PREVfQ0NNICYmIGNyeXB0bGVuKSkgeworKwkJCWF0b2tlbi0+c3RhdCA9IDA7CisrCQkJLyogRm9yIENDTSBvbmx5LCBwYWQgY3J5cHRvIGRhdGEgdG8gdGhlIGhhc2ggZW5naW5lICovCisrCQkJYXRva2VuKys7CisrCQkJYXRva3NpemUrKzsKKysJCQlhdG9rZW4tPm9wY29kZSA9IEVJUDE5N19UT0tFTl9PUENPREVfSU5TRVJUOworKwkJCWF0b2tlbi0+cGFja2V0X2xlbmd0aCA9IDE2IC0gY3J5cHRsZW47CisrCQkJYXRva2VuLT5zdGF0ID0gRUlQMTk3X1RPS0VOX1NUQVRfTEFTVF9IQVNIOworKwkJCWF0b2tlbi0+aW5zdHJ1Y3Rpb25zID0gRUlQMTk3X1RPS0VOX0lOU19UWVBFX0hBU0g7CisgCQl9IGVsc2UgeworLQkJCXRva2VuWzddLnN0YXQgPSBFSVAxOTdfVE9LRU5fU1RBVF9MQVNUX0hBU0g7CistCQkJdG9rZW5bN10uaW5zdHJ1Y3Rpb25zID0gRUlQMTk3X1RPS0VOX0lOU19MQVNUIHwKKy0JCQkJCQlFSVAxOTdfVE9LRU5fSU5TX1RZUEVfSEFTSDsKKysJCQlhdG9rZW4tPnN0YXQgPSBFSVAxOTdfVE9LRU5fU1RBVF9MQVNUX0hBU0g7CisgCQl9CisrCQlhdG9rZW4rKzsKKysJCWF0b2tzaXplKys7CisgCX0KKysKKysJaWYgKGRpcmVjdGlvbiA9PSBTQUZFWENFTF9FTkNSWVBUKSB7CisrCQkvKiBBcHBlbmQgSUNWICovCisrCQlhdG9rZW4tPm9wY29kZSA9IEVJUDE5N19UT0tFTl9PUENPREVfSU5TRVJUOworKwkJYXRva2VuLT5wYWNrZXRfbGVuZ3RoID0gZGlnZXN0c2l6ZTsKKysJCWF0b2tlbi0+c3RhdCA9IEVJUDE5N19UT0tFTl9TVEFUX0xBU1RfSEFTSCB8CisrCQkJICAgICAgIEVJUDE5N19UT0tFTl9TVEFUX0xBU1RfUEFDS0VUOworKwkJYXRva2VuLT5pbnN0cnVjdGlvbnMgPSBFSVAxOTdfVE9LRU5fSU5TX1RZUEVfT1VUUFVUIHwKKysJCQkJICAgICAgIEVJUDE5N19UT0tFTl9JTlNfSU5TRVJUX0hBU0hfRElHRVNUOworKwl9IGVsc2UgeworKwkJLyogRXh0cmFjdCBJQ1YgKi8KKysJCWF0b2tlbi0+b3Bjb2RlID0gRUlQMTk3X1RPS0VOX09QQ09ERV9SRVRSSUVWRTsKKysJCWF0b2tlbi0+cGFja2V0X2xlbmd0aCA9IGRpZ2VzdHNpemU7CisrCQlhdG9rZW4tPnN0YXQgPSBFSVAxOTdfVE9LRU5fU1RBVF9MQVNUX0hBU0ggfAorKwkJCSAgICAgICBFSVAxOTdfVE9LRU5fU1RBVF9MQVNUX1BBQ0tFVDsKKysJCWF0b2tlbi0+aW5zdHJ1Y3Rpb25zID0gRUlQMTk3X1RPS0VOX0lOU19JTlNFUlRfSEFTSF9ESUdFU1Q7CisrCQlhdG9rZW4rKzsKKysJCWF0b2tzaXplKys7CisrCisrCQkvKiBWZXJpZnkgSUNWICovCisrCQlhdG9rZW4tPm9wY29kZSA9IEVJUDE5N19UT0tFTl9PUENPREVfVkVSSUZZOworKwkJYXRva2VuLT5wYWNrZXRfbGVuZ3RoID0gZGlnZXN0c2l6ZSB8CisrCQkJCQlFSVAxOTdfVE9LRU5fSEFTSF9SRVNVTFRfVkVSSUZZOworKwkJYXRva2VuLT5zdGF0ID0gRUlQMTk3X1RPS0VOX1NUQVRfTEFTVF9IQVNIIHwKKysJCQkgICAgICAgRUlQMTk3X1RPS0VOX1NUQVRfTEFTVF9QQUNLRVQ7CisrCQlhdG9rZW4tPmluc3RydWN0aW9ucyA9IEVJUDE5N19UT0tFTl9JTlNfVFlQRV9PVVRQVVQ7CisrCX0KKysKKysJLyogRml4dXAgbGVuZ3RoIG9mIHRoZSB0b2tlbiBpbiB0aGUgY29tbWFuZCBkZXNjcmlwdG9yICovCisrCWNkZXNjLT5hZGRpdGlvbmFsX2NkYXRhX3NpemUgPSBhdG9rc2l6ZTsKKyB9CisgCisgc3RhdGljIGludCBzYWZleGNlbF9za2NpcGhlcl9hZXNfc2V0a2V5KHN0cnVjdCBjcnlwdG9fc2tjaXBoZXIgKmN0Zm0sCitAQCAtMjc3LDE0ICszODAsMTIgQEAgc3RhdGljIGludCBzYWZleGNlbF9za2NpcGhlcl9hZXNfc2V0a2V5KAorIAlpbnQgcmV0LCBpOworIAorIAlyZXQgPSBhZXNfZXhwYW5ka2V5KCZhZXMsIGtleSwgbGVuKTsKKy0JaWYgKHJldCkgeworLQkJY3J5cHRvX3NrY2lwaGVyX3NldF9mbGFncyhjdGZtLCBDUllQVE9fVEZNX1JFU19CQURfS0VZX0xFTik7CisrCWlmIChyZXQpCisgCQlyZXR1cm4gcmV0OworLQl9CisgCisgCWlmIChwcml2LT5mbGFncyAmIEVJUDE5N19UUkNfQ0FDSEUgJiYgY3R4LT5iYXNlLmN0eHJfZG1hKSB7CisgCQlmb3IgKGkgPSAwOyBpIDwgbGVuIC8gc2l6ZW9mKHUzMik7IGkrKykgeworLQkJCWlmIChjdHgtPmtleVtpXSAhPSBjcHVfdG9fbGUzMihhZXMua2V5X2VuY1tpXSkpIHsKKysJCQlpZiAobGUzMl90b19jcHUoY3R4LT5rZXlbaV0pICE9IGFlcy5rZXlfZW5jW2ldKSB7CisgCQkJCWN0eC0+YmFzZS5uZWVkc19pbnYgPSB0cnVlOworIAkJCQlicmVhazsKKyAJCQl9CitAQCAtMzA5LDQzICs0MTAsNTcgQEAgc3RhdGljIGludCBzYWZleGNlbF9hZWFkX3NldGtleShzdHJ1Y3QgYworIAlzdHJ1Y3Qgc2FmZXhjZWxfY3J5cHRvX3ByaXYgKnByaXYgPSBjdHgtPnByaXY7CisgCXN0cnVjdCBjcnlwdG9fYXV0aGVuY19rZXlzIGtleXM7CisgCXN0cnVjdCBjcnlwdG9fYWVzX2N0eCBhZXM7CistCWludCBlcnIgPSAtRUlOVkFMOworKwlpbnQgZXJyID0gLUVJTlZBTCwgaTsKKyAKKy0JaWYgKGNyeXB0b19hdXRoZW5jX2V4dHJhY3RrZXlzKCZrZXlzLCBrZXksIGxlbikgIT0gMCkKKysJaWYgKHVubGlrZWx5KGNyeXB0b19hdXRoZW5jX2V4dHJhY3RrZXlzKCZrZXlzLCBrZXksIGxlbikpKQorIAkJZ290byBiYWRrZXk7CisgCisgCWlmIChjdHgtPm1vZGUgPT0gQ09OVEVYVF9DT05UUk9MX0NSWVBUT19NT0RFX0NUUl9MT0FEKSB7CistCQkvKiBNaW5pbXVtIGtleXNpemUgaXMgbWluaW11bSBBRVMga2V5IHNpemUgKyBub25jZSBzaXplICovCistCQlpZiAoa2V5cy5lbmNrZXlsZW4gPCAoQUVTX01JTl9LRVlfU0laRSArCistCQkJCSAgICAgIENUUl9SRkMzNjg2X05PTkNFX1NJWkUpKQorKwkJLyogTXVzdCBoYXZlIGF0IGxlYXN0IHNwYWNlIGZvciB0aGUgbm9uY2UgaGVyZSAqLworKwkJaWYgKHVubGlrZWx5KGtleXMuZW5ja2V5bGVuIDwgQ1RSX1JGQzM2ODZfTk9OQ0VfU0laRSkpCisgCQkJZ290byBiYWRrZXk7CisgCQkvKiBsYXN0IDQgYnl0ZXMgb2Yga2V5IGFyZSB0aGUgbm9uY2UhICovCisgCQljdHgtPm5vbmNlID0gKih1MzIgKikoa2V5cy5lbmNrZXkgKyBrZXlzLmVuY2tleWxlbiAtCisgCQkJCSAgICAgIENUUl9SRkMzNjg2X05PTkNFX1NJWkUpOworIAkJLyogZXhjbHVkZSB0aGUgbm9uY2UgaGVyZSAqLworLQkJa2V5cy5lbmNrZXlsZW4gLT0gQ09OVEVYVF9DT05UUk9MX0NSWVBUT19NT0RFX0NUUl9MT0FEOworKwkJa2V5cy5lbmNrZXlsZW4gLT0gQ1RSX1JGQzM2ODZfTk9OQ0VfU0laRTsKKyAJfQorIAorIAkvKiBFbmNyeXB0aW9uIGtleSAqLworIAlzd2l0Y2ggKGN0eC0+YWxnKSB7CisrCWNhc2UgU0FGRVhDRUxfREVTOgorKwkJZXJyID0gdmVyaWZ5X2FlYWRfZGVzX2tleShjdGZtLCBrZXlzLmVuY2tleSwga2V5cy5lbmNrZXlsZW4pOworKwkJaWYgKHVubGlrZWx5KGVycikpCisrCQkJZ290byBiYWRrZXk7CisrCQlicmVhazsKKyAJY2FzZSBTQUZFWENFTF8zREVTOgorIAkJZXJyID0gdmVyaWZ5X2FlYWRfZGVzM19rZXkoY3RmbSwga2V5cy5lbmNrZXksIGtleXMuZW5ja2V5bGVuKTsKKyAJCWlmICh1bmxpa2VseShlcnIpKQorLQkJCWdvdG8gYmFka2V5X2V4cGZsYWdzOworKwkJCWdvdG8gYmFka2V5OworIAkJYnJlYWs7CisgCWNhc2UgU0FGRVhDRUxfQUVTOgorIAkJZXJyID0gYWVzX2V4cGFuZGtleSgmYWVzLCBrZXlzLmVuY2tleSwga2V5cy5lbmNrZXlsZW4pOworIAkJaWYgKHVubGlrZWx5KGVycikpCisgCQkJZ290byBiYWRrZXk7CisgCQlicmVhazsKKysJY2FzZSBTQUZFWENFTF9TTTQ6CisrCQlpZiAodW5saWtlbHkoa2V5cy5lbmNrZXlsZW4gIT0gU000X0tFWV9TSVpFKSkKKysJCQlnb3RvIGJhZGtleTsKKysJCWJyZWFrOworIAlkZWZhdWx0OgorIAkJZGV2X2Vycihwcml2LT5kZXYsICJhZWFkOiB1bnN1cHBvcnRlZCBjaXBoZXIgYWxnb3JpdGhtXG4iKTsKKyAJCWdvdG8gYmFka2V5OworIAl9CisgCistCWlmIChwcml2LT5mbGFncyAmIEVJUDE5N19UUkNfQ0FDSEUgJiYgY3R4LT5iYXNlLmN0eHJfZG1hICYmCistCSAgICBtZW1jbXAoY3R4LT5rZXksIGtleXMuZW5ja2V5LCBrZXlzLmVuY2tleWxlbikpCistCQljdHgtPmJhc2UubmVlZHNfaW52ID0gdHJ1ZTsKKysJaWYgKHByaXYtPmZsYWdzICYgRUlQMTk3X1RSQ19DQUNIRSAmJiBjdHgtPmJhc2UuY3R4cl9kbWEpIHsKKysJCWZvciAoaSA9IDA7IGkgPCBrZXlzLmVuY2tleWxlbiAvIHNpemVvZih1MzIpOyBpKyspIHsKKysJCQlpZiAobGUzMl90b19jcHUoY3R4LT5rZXlbaV0pICE9CisrCQkJICAgICgodTMyICopa2V5cy5lbmNrZXkpW2ldKSB7CisrCQkJCWN0eC0+YmFzZS5uZWVkc19pbnYgPSB0cnVlOworKwkJCQlicmVhazsKKysJCQl9CisrCQl9CisrCX0KKyAKKyAJLyogQXV0aCBrZXkgKi8KKyAJc3dpdGNoIChjdHgtPmhhc2hfYWxnKSB7CitAQCAtMzc0LDIxICs0ODksMjQgQEAgc3RhdGljIGludCBzYWZleGNlbF9hZWFkX3NldGtleShzdHJ1Y3QgYworIAkJCQkJIGtleXMuYXV0aGtleWxlbiwgJmlzdGF0ZSwgJm9zdGF0ZSkpCisgCQkJZ290byBiYWRrZXk7CisgCQlicmVhazsKKysJY2FzZSBDT05URVhUX0NPTlRST0xfQ1JZUFRPX0FMR19TTTM6CisrCQlpZiAoc2FmZXhjZWxfaG1hY19zZXRrZXkoInNhZmV4Y2VsLXNtMyIsIGtleXMuYXV0aGtleSwKKysJCQkJCSBrZXlzLmF1dGhrZXlsZW4sICZpc3RhdGUsICZvc3RhdGUpKQorKwkJCWdvdG8gYmFka2V5OworKwkJYnJlYWs7CisgCWRlZmF1bHQ6CisgCQlkZXZfZXJyKHByaXYtPmRldiwgImFlYWQ6IHVuc3VwcG9ydGVkIGhhc2ggYWxnb3JpdGhtXG4iKTsKKyAJCWdvdG8gYmFka2V5OworIAl9CisgCistCWNyeXB0b19hZWFkX3NldF9mbGFncyhjdGZtLCBjcnlwdG9fYWVhZF9nZXRfZmxhZ3MoY3RmbSkgJgorLQkJCQkgICAgQ1JZUFRPX1RGTV9SRVNfTUFTSyk7CistCisgCWlmIChwcml2LT5mbGFncyAmIEVJUDE5N19UUkNfQ0FDSEUgJiYgY3R4LT5iYXNlLmN0eHJfZG1hICYmCisgCSAgICAobWVtY21wKGN0eC0+aXBhZCwgaXN0YXRlLnN0YXRlLCBjdHgtPnN0YXRlX3N6KSB8fAorIAkgICAgIG1lbWNtcChjdHgtPm9wYWQsIG9zdGF0ZS5zdGF0ZSwgY3R4LT5zdGF0ZV9zeikpKQorIAkJY3R4LT5iYXNlLm5lZWRzX2ludiA9IHRydWU7CisgCisgCS8qIE5vdyBjb3B5IHRoZSBrZXlzIGludG8gdGhlIGNvbnRleHQgKi8KKy0JbWVtY3B5KGN0eC0+a2V5LCBrZXlzLmVuY2tleSwga2V5cy5lbmNrZXlsZW4pOworKwlmb3IgKGkgPSAwOyBpIDwga2V5cy5lbmNrZXlsZW4gLyBzaXplb2YodTMyKTsgaSsrKQorKwkJY3R4LT5rZXlbaV0gPSBjcHVfdG9fbGUzMigoKHUzMiAqKWtleXMuZW5ja2V5KVtpXSk7CisgCWN0eC0+a2V5X2xlbiA9IGtleXMuZW5ja2V5bGVuOworIAorIAltZW1jcHkoY3R4LT5pcGFkLCAmaXN0YXRlLnN0YXRlLCBjdHgtPnN0YXRlX3N6KTsKK0BAIC0zOTgsOCArNTE2LDYgQEAgc3RhdGljIGludCBzYWZleGNlbF9hZWFkX3NldGtleShzdHJ1Y3QgYworIAlyZXR1cm4gMDsKKyAKKyBiYWRrZXk6CistCWNyeXB0b19hZWFkX3NldF9mbGFncyhjdGZtLCBDUllQVE9fVEZNX1JFU19CQURfS0VZX0xFTik7CistYmFka2V5X2V4cGZsYWdzOgorIAltZW16ZXJvX2V4cGxpY2l0KCZrZXlzLCBzaXplb2Yoa2V5cykpOworIAlyZXR1cm4gZXJyOworIH0KK0BAIC00MjMsNiArNTM5LDE3IEBAIHN0YXRpYyBpbnQgc2FmZXhjZWxfY29udGV4dF9jb250cm9sKHN0cnUKKyAJCQkJQ09OVEVYVF9DT05UUk9MX0RJR0VTVF9YQ00gfAorIAkJCQljdHgtPmhhc2hfYWxnIHwKKyAJCQkJQ09OVEVYVF9DT05UUk9MX1NJWkUoY3RybF9zaXplKTsKKysJCX0gZWxzZSBpZiAoY3R4LT5hbGcgPT0gU0FGRVhDRUxfQ0hBQ0hBMjApIHsKKysJCQkvKiBDaGFjaGEyMC1Qb2x5MTMwNSAqLworKwkJCWNkZXNjLT5jb250cm9sX2RhdGEuY29udHJvbDAgPQorKwkJCQlDT05URVhUX0NPTlRST0xfS0VZX0VOIHwKKysJCQkJQ09OVEVYVF9DT05UUk9MX0NSWVBUT19BTEdfQ0hBQ0hBMjAgfAorKwkJCQkoc3JlcS0+ZGlyZWN0aW9uID09IFNBRkVYQ0VMX0VOQ1JZUFQgPworKwkJCQkJQ09OVEVYVF9DT05UUk9MX1RZUEVfRU5DUllQVF9IQVNIX09VVCA6CisrCQkJCQlDT05URVhUX0NPTlRST0xfVFlQRV9IQVNIX0RFQ1JZUFRfSU4pIHwKKysJCQkJY3R4LT5oYXNoX2FsZyB8CisrCQkJCUNPTlRFWFRfQ09OVFJPTF9TSVpFKGN0cmxfc2l6ZSk7CisrCQkJcmV0dXJuIDA7CisgCQl9IGVsc2UgeworIAkJCWN0cmxfc2l6ZSArPSBjdHgtPnN0YXRlX3N6IC8gc2l6ZW9mKHUzMikgKiAyOworIAkJCWNkZXNjLT5jb250cm9sX2RhdGEuY29udHJvbDAgPQorQEAgLTQzMSwxNyArNTU4LDIxIEBAIHN0YXRpYyBpbnQgc2FmZXhjZWxfY29udGV4dF9jb250cm9sKHN0cnUKKyAJCQkJY3R4LT5oYXNoX2FsZyB8CisgCQkJCUNPTlRFWFRfQ09OVFJPTF9TSVpFKGN0cmxfc2l6ZSk7CisgCQl9CistCQlpZiAoc3JlcS0+ZGlyZWN0aW9uID09IFNBRkVYQ0VMX0VOQ1JZUFQpCistCQkJY2Rlc2MtPmNvbnRyb2xfZGF0YS5jb250cm9sMCB8PQorLQkJCQkoY3R4LT54Y20gPT0gRUlQMTk3X1hDTV9NT0RFX0NDTSkgPworLQkJCQkJQ09OVEVYVF9DT05UUk9MX1RZUEVfSEFTSF9FTkNSWVBUX09VVCA6CistCQkJCQlDT05URVhUX0NPTlRST0xfVFlQRV9FTkNSWVBUX0hBU0hfT1VUOworIAorKwkJaWYgKHNyZXEtPmRpcmVjdGlvbiA9PSBTQUZFWENFTF9FTkNSWVBUICYmCisrCQkgICAgKGN0eC0+eGNtID09IEVJUDE5N19YQ01fTU9ERV9DQ00gfHwKKysJCSAgICAgY3R4LT5hZWFkID09IEVJUDE5N19BRUFEX1RZUEVfSVBTRUNfRVNQX0dNQUMpKQorKwkJCWNkZXNjLT5jb250cm9sX2RhdGEuY29udHJvbDAgfD0KKysJCQkJQ09OVEVYVF9DT05UUk9MX1RZUEVfSEFTSF9FTkNSWVBUX09VVDsKKysJCWVsc2UgaWYgKHNyZXEtPmRpcmVjdGlvbiA9PSBTQUZFWENFTF9FTkNSWVBUKQorKwkJCWNkZXNjLT5jb250cm9sX2RhdGEuY29udHJvbDAgfD0KKysJCQkJQ09OVEVYVF9DT05UUk9MX1RZUEVfRU5DUllQVF9IQVNIX09VVDsKKysJCWVsc2UgaWYgKGN0eC0+eGNtID09IEVJUDE5N19YQ01fTU9ERV9DQ00pCisrCQkJY2Rlc2MtPmNvbnRyb2xfZGF0YS5jb250cm9sMCB8PQorKwkJCQlDT05URVhUX0NPTlRST0xfVFlQRV9ERUNSWVBUX0hBU0hfSU47CisgCQllbHNlCisgCQkJY2Rlc2MtPmNvbnRyb2xfZGF0YS5jb250cm9sMCB8PQorLQkJCQkoY3R4LT54Y20gPT0gRUlQMTk3X1hDTV9NT0RFX0NDTSkgPworLQkJCQkJQ09OVEVYVF9DT05UUk9MX1RZUEVfREVDUllQVF9IQVNIX0lOIDoKKy0JCQkJCUNPTlRFWFRfQ09OVFJPTF9UWVBFX0hBU0hfREVDUllQVF9JTjsKKysJCQkJQ09OVEVYVF9DT05UUk9MX1RZUEVfSEFTSF9ERUNSWVBUX0lOOworIAl9IGVsc2UgeworIAkJaWYgKHNyZXEtPmRpcmVjdGlvbiA9PSBTQUZFWENFTF9FTkNSWVBUKQorIAkJCWNkZXNjLT5jb250cm9sX2RhdGEuY29udHJvbDAgPQorQEAgLTQ4MCw2ICs2MTEsMTIgQEAgc3RhdGljIGludCBzYWZleGNlbF9jb250ZXh0X2NvbnRyb2woc3RydQorIAkJCQljdHgtPmtleV9sZW4gPj4gY3R4LT54dHMpOworIAkJCXJldHVybiAtRUlOVkFMOworIAkJfQorKwl9IGVsc2UgaWYgKGN0eC0+YWxnID09IFNBRkVYQ0VMX0NIQUNIQTIwKSB7CisrCQljZGVzYy0+Y29udHJvbF9kYXRhLmNvbnRyb2wwIHw9CisrCQkJQ09OVEVYVF9DT05UUk9MX0NSWVBUT19BTEdfQ0hBQ0hBMjA7CisrCX0gZWxzZSBpZiAoY3R4LT5hbGcgPT0gU0FGRVhDRUxfU000KSB7CisrCQljZGVzYy0+Y29udHJvbF9kYXRhLmNvbnRyb2wwIHw9CisrCQkJQ09OVEVYVF9DT05UUk9MX0NSWVBUT19BTEdfU000OworIAl9CisgCisgCXJldHVybiAwOworQEAgLTU2Myw2ICs3MDAsNyBAQCBzdGF0aWMgaW50IHNhZmV4Y2VsX3NlbmRfcmVxKHN0cnVjdCBjcnlwCisgCXVuc2lnbmVkIGludCB0b3RsZW47CisgCXVuc2lnbmVkIGludCB0b3RsZW5fc3JjID0gY3J5cHRsZW4gKyBhc3NvY2xlbjsKKyAJdW5zaWduZWQgaW50IHRvdGxlbl9kc3QgPSB0b3RsZW5fc3JjOworKwlzdHJ1Y3Qgc2FmZXhjZWxfdG9rZW4gKmF0b2tlbjsKKyAJaW50IG5fY2Rlc2MgPSAwLCBuX3JkZXNjID0gMDsKKyAJaW50IHF1ZXVlZCwgaSwgcmV0ID0gMDsKKyAJYm9vbCBmaXJzdCA9IHRydWU7CitAQCAtNjM3LDU2ICs3NzUsNjAgQEAgc3RhdGljIGludCBzYWZleGNlbF9zZW5kX3JlcShzdHJ1Y3QgY3J5cAorIAorIAltZW1jcHkoY3R4LT5iYXNlLmN0eHItPmRhdGEsIGN0eC0+a2V5LCBjdHgtPmtleV9sZW4pOworIAorLQkvKiBUaGUgRUlQIGNhbm5vdCBkZWFsIHdpdGggemVybyBsZW5ndGggaW5wdXQgcGFja2V0cyEgKi8KKy0JaWYgKHRvdGxlbiA9PSAwKQorLQkJdG90bGVuID0gMTsKKysJaWYgKCF0b3RsZW4pIHsKKysJCS8qCisrCQkgKiBUaGUgRUlQOTcgY2Fubm90IGRlYWwgd2l0aCB6ZXJvIGxlbmd0aCBpbnB1dCBwYWNrZXRzIQorKwkJICogU28gc3R1ZmYgYSBkdW1teSBjb21tYW5kIGRlc2NyaXB0b3IgaW5kaWNhdGluZyBhIDEgYnl0ZQorKwkJICogKGR1bW15KSBpbnB1dCBwYWNrZXQsIHVzaW5nIHRoZSBjb250ZXh0IHJlY29yZCBhcyBzb3VyY2UuCisrCQkgKi8KKysJCWZpcnN0X2NkZXNjID0gc2FmZXhjZWxfYWRkX2NkZXNjKHByaXYsIHJpbmcsCisrCQkJCQkJIDEsIDEsIGN0eC0+YmFzZS5jdHhyX2RtYSwKKysJCQkJCQkgMSwgMSwgY3R4LT5iYXNlLmN0eHJfZG1hLAorKwkJCQkJCSAmYXRva2VuKTsKKysJCWlmIChJU19FUlIoZmlyc3RfY2Rlc2MpKSB7CisrCQkJLyogTm8gc3BhY2UgbGVmdCBpbiB0aGUgY29tbWFuZCBkZXNjcmlwdG9yIHJpbmcgKi8KKysJCQlyZXQgPSBQVFJfRVJSKGZpcnN0X2NkZXNjKTsKKysJCQlnb3RvIGNkZXNjX3JvbGxiYWNrOworKwkJfQorKwkJbl9jZGVzYyA9IDE7CisrCQlnb3RvIHNraXBfY2Rlc2M7CisrCX0KKyAKKyAJLyogY29tbWFuZCBkZXNjcmlwdG9ycyAqLworIAlmb3JfZWFjaF9zZyhzcmMsIHNnLCBzcmVxLT5ucl9zcmMsIGkpIHsKKyAJCWludCBsZW4gPSBzZ19kbWFfbGVuKHNnKTsKKyAKKyAJCS8qIERvIG5vdCBvdmVyZmxvdyB0aGUgcmVxdWVzdCAqLworLQkJaWYgKHF1ZXVlZCAtIGxlbiA8IDApCisrCQlpZiAocXVldWVkIDwgbGVuKQorIAkJCWxlbiA9IHF1ZXVlZDsKKyAKKyAJCWNkZXNjID0gc2FmZXhjZWxfYWRkX2NkZXNjKHByaXYsIHJpbmcsICFuX2NkZXNjLAorIAkJCQkJICAgIShxdWV1ZWQgLSBsZW4pLAorIAkJCQkJICAgc2dfZG1hX2FkZHJlc3Moc2cpLCBsZW4sIHRvdGxlbiwKKy0JCQkJCSAgIGN0eC0+YmFzZS5jdHhyX2RtYSk7CisrCQkJCQkgICBjdHgtPmJhc2UuY3R4cl9kbWEsICZhdG9rZW4pOworIAkJaWYgKElTX0VSUihjZGVzYykpIHsKKyAJCQkvKiBObyBzcGFjZSBsZWZ0IGluIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IgcmluZyAqLworIAkJCXJldCA9IFBUUl9FUlIoY2Rlc2MpOworIAkJCWdvdG8gY2Rlc2Nfcm9sbGJhY2s7CisgCQl9CistCQluX2NkZXNjKys7CisgCistCQlpZiAobl9jZGVzYyA9PSAxKSB7CisrCQlpZiAoIW5fY2Rlc2MpCisgCQkJZmlyc3RfY2Rlc2MgPSBjZGVzYzsKKy0JCX0KKyAKKysJCW5fY2Rlc2MrKzsKKyAJCXF1ZXVlZCAtPSBsZW47CisgCQlpZiAoIXF1ZXVlZCkKKyAJCQlicmVhazsKKyAJfQorLQorLQlpZiAodW5saWtlbHkoIW5fY2Rlc2MpKSB7CistCQkvKgorLQkJICogU3BlY2lhbCBjYXNlOiB6ZXJvIGxlbmd0aCBpbnB1dCBidWZmZXIuCistCQkgKiBUaGUgZW5naW5lIGFsd2F5cyBuZWVkcyB0aGUgMXN0IGNvbW1hbmQgZGVzY3JpcHRvciwgaG93ZXZlciEKKy0JCSAqLworLQkJZmlyc3RfY2Rlc2MgPSBzYWZleGNlbF9hZGRfY2Rlc2MocHJpdiwgcmluZywgMSwgMSwgMCwgMCwgdG90bGVuLAorLQkJCQkJCSBjdHgtPmJhc2UuY3R4cl9kbWEpOworLQkJbl9jZGVzYyA9IDE7CistCX0KKy0KKytza2lwX2NkZXNjOgorIAkvKiBBZGQgY29udGV4dCBjb250cm9sIHdvcmRzIGFuZCB0b2tlbiB0byBmaXJzdCBjb21tYW5kIGRlc2NyaXB0b3IgKi8KKyAJc2FmZXhjZWxfY29udGV4dF9jb250cm9sKGN0eCwgYmFzZSwgc3JlcSwgZmlyc3RfY2Rlc2MpOworIAlpZiAoY3R4LT5hZWFkKQorLQkJc2FmZXhjZWxfYWVhZF90b2tlbihjdHgsIGl2LCBmaXJzdF9jZGVzYywKKysJCXNhZmV4Y2VsX2FlYWRfdG9rZW4oY3R4LCBpdiwgZmlyc3RfY2Rlc2MsIGF0b2tlbiwKKyAJCQkJICAgIHNyZXEtPmRpcmVjdGlvbiwgY3J5cHRsZW4sCisgCQkJCSAgICBhc3NvY2xlbiwgZGlnZXN0c2l6ZSk7CisgCWVsc2UKKy0JCXNhZmV4Y2VsX3NrY2lwaGVyX3Rva2VuKGN0eCwgaXYsIGZpcnN0X2NkZXNjLAorKwkJc2FmZXhjZWxfc2tjaXBoZXJfdG9rZW4oY3R4LCBpdiwgZmlyc3RfY2Rlc2MsIGF0b2tlbiwKKyAJCQkJCWNyeXB0bGVuKTsKKyAKKyAJLyogcmVzdWx0IGRlc2NyaXB0b3JzICovCitAQCAtMTA3Myw2ICsxMjE1LDggQEAgc3RhdGljIGludCBzYWZleGNlbF9za2NpcGhlcl9jcmFfaW5pdChzdAorIAorIAljdHgtPmJhc2Uuc2VuZCA9IHNhZmV4Y2VsX3NrY2lwaGVyX3NlbmQ7CisgCWN0eC0+YmFzZS5oYW5kbGVfcmVzdWx0ID0gc2FmZXhjZWxfc2tjaXBoZXJfaGFuZGxlX3Jlc3VsdDsKKysJY3R4LT5pdm1hc2sgPSBFSVAxOTdfT1BUSU9OXzRfVE9LRU5fSVZfQ01EOworKwljdHgtPmN0cmluaXQgPSAxOworIAlyZXR1cm4gMDsKKyB9CisgCitAQCAtMTEzNyw2ICsxMjgxLDggQEAgc3RhdGljIGludCBzYWZleGNlbF9za2NpcGhlcl9hZXNfZWNiX2NyYQorIAlzYWZleGNlbF9za2NpcGhlcl9jcmFfaW5pdCh0Zm0pOworIAljdHgtPmFsZyAgPSBTQUZFWENFTF9BRVM7CisgCWN0eC0+bW9kZSA9IENPTlRFWFRfQ09OVFJPTF9DUllQVE9fTU9ERV9FQ0I7CisrCWN0eC0+YmxvY2tzeiA9IDA7CisrCWN0eC0+aXZtYXNrID0gRUlQMTk3X09QVElPTl8yX1RPS0VOX0lWX0NNRDsKKyAJcmV0dXJuIDA7CisgfQorIAorQEAgLTExNzEsNiArMTMxNyw3IEBAIHN0YXRpYyBpbnQgc2FmZXhjZWxfc2tjaXBoZXJfYWVzX2NiY19jcmEKKyAKKyAJc2FmZXhjZWxfc2tjaXBoZXJfY3JhX2luaXQodGZtKTsKKyAJY3R4LT5hbGcgID0gU0FGRVhDRUxfQUVTOworKwljdHgtPmJsb2Nrc3ogPSBBRVNfQkxPQ0tfU0laRTsKKyAJY3R4LT5tb2RlID0gQ09OVEVYVF9DT05UUk9MX0NSWVBUT19NT0RFX0NCQzsKKyAJcmV0dXJuIDA7CisgfQorQEAgLTEyMDcsNiArMTM1NCw3IEBAIHN0YXRpYyBpbnQgc2FmZXhjZWxfc2tjaXBoZXJfYWVzX2NmYl9jcmEKKyAKKyAJc2FmZXhjZWxfc2tjaXBoZXJfY3JhX2luaXQodGZtKTsKKyAJY3R4LT5hbGcgID0gU0FGRVhDRUxfQUVTOworKwljdHgtPmJsb2Nrc3ogPSBBRVNfQkxPQ0tfU0laRTsKKyAJY3R4LT5tb2RlID0gQ09OVEVYVF9DT05UUk9MX0NSWVBUT19NT0RFX0NGQjsKKyAJcmV0dXJuIDA7CisgfQorQEAgLTEyNDMsNiArMTM5MSw3IEBAIHN0YXRpYyBpbnQgc2FmZXhjZWxfc2tjaXBoZXJfYWVzX29mYl9jcmEKKyAKKyAJc2FmZXhjZWxfc2tjaXBoZXJfY3JhX2luaXQodGZtKTsKKyAJY3R4LT5hbGcgID0gU0FGRVhDRUxfQUVTOworKwljdHgtPmJsb2Nrc3ogPSBBRVNfQkxPQ0tfU0laRTsKKyAJY3R4LT5tb2RlID0gQ09OVEVYVF9DT05UUk9MX0NSWVBUT19NT0RFX09GQjsKKyAJcmV0dXJuIDA7CisgfQorQEAgLTEyODgsMTQgKzE0MzcsMTIgQEAgc3RhdGljIGludCBzYWZleGNlbF9za2NpcGhlcl9hZXNjdHJfc2V0aworIAkvKiBleGNsdWRlIHRoZSBub25jZSBoZXJlICovCisgCWtleWxlbiA9IGxlbiAtIENUUl9SRkMzNjg2X05PTkNFX1NJWkU7CisgCXJldCA9IGFlc19leHBhbmRrZXkoJmFlcywga2V5LCBrZXlsZW4pOworLQlpZiAocmV0KSB7CistCQljcnlwdG9fc2tjaXBoZXJfc2V0X2ZsYWdzKGN0Zm0sIENSWVBUT19URk1fUkVTX0JBRF9LRVlfTEVOKTsKKysJaWYgKHJldCkKKyAJCXJldHVybiByZXQ7CistCX0KKyAKKyAJaWYgKHByaXYtPmZsYWdzICYgRUlQMTk3X1RSQ19DQUNIRSAmJiBjdHgtPmJhc2UuY3R4cl9kbWEpIHsKKyAJCWZvciAoaSA9IDA7IGkgPCBrZXlsZW4gLyBzaXplb2YodTMyKTsgaSsrKSB7CistCQkJaWYgKGN0eC0+a2V5W2ldICE9IGNwdV90b19sZTMyKGFlcy5rZXlfZW5jW2ldKSkgeworKwkJCWlmIChsZTMyX3RvX2NwdShjdHgtPmtleVtpXSkgIT0gYWVzLmtleV9lbmNbaV0pIHsKKyAJCQkJY3R4LT5iYXNlLm5lZWRzX2ludiA9IHRydWU7CisgCQkJCWJyZWFrOworIAkJCX0KK0BAIC0xMzE3LDYgKzE0NjQsNyBAQCBzdGF0aWMgaW50IHNhZmV4Y2VsX3NrY2lwaGVyX2Flc19jdHJfY3JhCisgCisgCXNhZmV4Y2VsX3NrY2lwaGVyX2NyYV9pbml0KHRmbSk7CisgCWN0eC0+YWxnICA9IFNBRkVYQ0VMX0FFUzsKKysJY3R4LT5ibG9ja3N6ID0gQUVTX0JMT0NLX1NJWkU7CisgCWN0eC0+bW9kZSA9IENPTlRFWFRfQ09OVFJPTF9DUllQVE9fTU9ERV9DVFJfTE9BRDsKKyAJcmV0dXJuIDA7CisgfQorQEAgLTEzNTIsNiArMTUwMCw3IEBAIHN0YXRpYyBpbnQgc2FmZXhjZWxfZGVzX3NldGtleShzdHJ1Y3QgY3IKKyAJCQkgICAgICAgdW5zaWduZWQgaW50IGxlbikKKyB7CisgCXN0cnVjdCBzYWZleGNlbF9jaXBoZXJfY3R4ICpjdHggPSBjcnlwdG9fc2tjaXBoZXJfY3R4KGN0Zm0pOworKwlzdHJ1Y3Qgc2FmZXhjZWxfY3J5cHRvX3ByaXYgKnByaXYgPSBjdHgtPnByaXY7CisgCWludCByZXQ7CisgCisgCXJldCA9IHZlcmlmeV9za2NpcGhlcl9kZXNfa2V5KGN0Zm0sIGtleSk7CitAQCAtMTM1OSw3ICsxNTA4LDcgQEAgc3RhdGljIGludCBzYWZleGNlbF9kZXNfc2V0a2V5KHN0cnVjdCBjcgorIAkJcmV0dXJuIHJldDsKKyAKKyAJLyogaWYgY29udGV4dCBleGl0cyBhbmQga2V5IGNoYW5nZWQsIG5lZWQgdG8gaW52YWxpZGF0ZSBpdCAqLworLQlpZiAoY3R4LT5iYXNlLmN0eHJfZG1hKQorKwlpZiAocHJpdi0+ZmxhZ3MgJiBFSVAxOTdfVFJDX0NBQ0hFICYmIGN0eC0+YmFzZS5jdHhyX2RtYSkKKyAJCWlmIChtZW1jbXAoY3R4LT5rZXksIGtleSwgbGVuKSkKKyAJCQljdHgtPmJhc2UubmVlZHNfaW52ID0gdHJ1ZTsKKyAKK0BAIC0xMzc1LDYgKzE1MjQsOCBAQCBzdGF0aWMgaW50IHNhZmV4Y2VsX3NrY2lwaGVyX2Rlc19jYmNfY3JhCisgCisgCXNhZmV4Y2VsX3NrY2lwaGVyX2NyYV9pbml0KHRmbSk7CisgCWN0eC0+YWxnICA9IFNBRkVYQ0VMX0RFUzsKKysJY3R4LT5ibG9ja3N6ID0gREVTX0JMT0NLX1NJWkU7CisrCWN0eC0+aXZtYXNrID0gRUlQMTk3X09QVElPTl8yX1RPS0VOX0lWX0NNRDsKKyAJY3R4LT5tb2RlID0gQ09OVEVYVF9DT05UUk9MX0NSWVBUT19NT0RFX0NCQzsKKyAJcmV0dXJuIDA7CisgfQorQEAgLTE0MTIsNiArMTU2Myw4IEBAIHN0YXRpYyBpbnQgc2FmZXhjZWxfc2tjaXBoZXJfZGVzX2VjYl9jcmEKKyAJc2FmZXhjZWxfc2tjaXBoZXJfY3JhX2luaXQodGZtKTsKKyAJY3R4LT5hbGcgID0gU0FGRVhDRUxfREVTOworIAljdHgtPm1vZGUgPSBDT05URVhUX0NPTlRST0xfQ1JZUFRPX01PREVfRUNCOworKwljdHgtPmJsb2Nrc3ogPSAwOworKwljdHgtPml2bWFzayA9IEVJUDE5N19PUFRJT05fMl9UT0tFTl9JVl9DTUQ7CisgCXJldHVybiAwOworIH0KKyAKK0BAIC0xNDQ0LDYgKzE1OTcsNyBAQCBzdGF0aWMgaW50IHNhZmV4Y2VsX2RlczNfZWRlX3NldGtleShzdHJ1CisgCQkJCSAgIGNvbnN0IHU4ICprZXksIHVuc2lnbmVkIGludCBsZW4pCisgeworIAlzdHJ1Y3Qgc2FmZXhjZWxfY2lwaGVyX2N0eCAqY3R4ID0gY3J5cHRvX3NrY2lwaGVyX2N0eChjdGZtKTsKKysJc3RydWN0IHNhZmV4Y2VsX2NyeXB0b19wcml2ICpwcml2ID0gY3R4LT5wcml2OworIAlpbnQgZXJyOworIAorIAllcnIgPSB2ZXJpZnlfc2tjaXBoZXJfZGVzM19rZXkoY3RmbSwga2V5KTsKK0BAIC0xNDUxLDEzICsxNjA1LDExIEBAIHN0YXRpYyBpbnQgc2FmZXhjZWxfZGVzM19lZGVfc2V0a2V5KHN0cnUKKyAJCXJldHVybiBlcnI7CisgCisgCS8qIGlmIGNvbnRleHQgZXhpdHMgYW5kIGtleSBjaGFuZ2VkLCBuZWVkIHRvIGludmFsaWRhdGUgaXQgKi8KKy0JaWYgKGN0eC0+YmFzZS5jdHhyX2RtYSkgeworKwlpZiAocHJpdi0+ZmxhZ3MgJiBFSVAxOTdfVFJDX0NBQ0hFICYmIGN0eC0+YmFzZS5jdHhyX2RtYSkKKyAJCWlmIChtZW1jbXAoY3R4LT5rZXksIGtleSwgbGVuKSkKKyAJCQljdHgtPmJhc2UubmVlZHNfaW52ID0gdHJ1ZTsKKy0JfQorIAorIAltZW1jcHkoY3R4LT5rZXksIGtleSwgbGVuKTsKKy0KKyAJY3R4LT5rZXlfbGVuID0gbGVuOworIAorIAlyZXR1cm4gMDsKK0BAIC0xNDY5LDYgKzE2MjEsOCBAQCBzdGF0aWMgaW50IHNhZmV4Y2VsX3NrY2lwaGVyX2RlczNfY2JjX2NyCisgCisgCXNhZmV4Y2VsX3NrY2lwaGVyX2NyYV9pbml0KHRmbSk7CisgCWN0eC0+YWxnICA9IFNBRkVYQ0VMXzNERVM7CisrCWN0eC0+YmxvY2tzeiA9IERFUzNfRURFX0JMT0NLX1NJWkU7CisrCWN0eC0+aXZtYXNrID0gRUlQMTk3X09QVElPTl8yX1RPS0VOX0lWX0NNRDsKKyAJY3R4LT5tb2RlID0gQ09OVEVYVF9DT05UUk9MX0NSWVBUT19NT0RFX0NCQzsKKyAJcmV0dXJuIDA7CisgfQorQEAgLTE1MDYsNiArMTY2MCw4IEBAIHN0YXRpYyBpbnQgc2FmZXhjZWxfc2tjaXBoZXJfZGVzM19lY2JfY3IKKyAJc2FmZXhjZWxfc2tjaXBoZXJfY3JhX2luaXQodGZtKTsKKyAJY3R4LT5hbGcgID0gU0FGRVhDRUxfM0RFUzsKKyAJY3R4LT5tb2RlID0gQ09OVEVYVF9DT05UUk9MX0NSWVBUT19NT0RFX0VDQjsKKysJY3R4LT5ibG9ja3N6ID0gMDsKKysJY3R4LT5pdm1hc2sgPSBFSVAxOTdfT1BUSU9OXzJfVE9LRU5fSVZfQ01EOworIAlyZXR1cm4gMDsKKyB9CisgCitAQCAtMTU2MSw2ICsxNzE3LDkgQEAgc3RhdGljIGludCBzYWZleGNlbF9hZWFkX2NyYV9pbml0KHN0cnVjdAorIAljdHgtPnByaXYgPSB0bXBsLT5wcml2OworIAorIAljdHgtPmFsZyAgPSBTQUZFWENFTF9BRVM7IC8qIGRlZmF1bHQgKi8KKysJY3R4LT5ibG9ja3N6ID0gQUVTX0JMT0NLX1NJWkU7CisrCWN0eC0+aXZtYXNrID0gRUlQMTk3X09QVElPTl80X1RPS0VOX0lWX0NNRDsKKysJY3R4LT5jdHJpbml0ID0gMTsKKyAJY3R4LT5tb2RlID0gQ09OVEVYVF9DT05UUk9MX0NSWVBUT19NT0RFX0NCQzsgLyogZGVmYXVsdCAqLworIAljdHgtPmFlYWQgPSB0cnVlOworIAljdHgtPmJhc2Uuc2VuZCA9IHNhZmV4Y2VsX2FlYWRfc2VuZDsKK0BAIC0xNzQ5LDYgKzE5MDgsOCBAQCBzdGF0aWMgaW50IHNhZmV4Y2VsX2FlYWRfc2hhMV9kZXMzX2NyYV9pCisgCisgCXNhZmV4Y2VsX2FlYWRfc2hhMV9jcmFfaW5pdCh0Zm0pOworIAljdHgtPmFsZyA9IFNBRkVYQ0VMXzNERVM7IC8qIG92ZXJyaWRlIGRlZmF1bHQgKi8KKysJY3R4LT5ibG9ja3N6ID0gREVTM19FREVfQkxPQ0tfU0laRTsKKysJY3R4LT5pdm1hc2sgPSBFSVAxOTdfT1BUSU9OXzJfVE9LRU5fSVZfQ01EOworIAlyZXR1cm4gMDsKKyB9CisgCitAQCAtMTc3Nyw2ICsxOTM4LDMzMCBAQCBzdHJ1Y3Qgc2FmZXhjZWxfYWxnX3RlbXBsYXRlIHNhZmV4Y2VsX2FsCisgCX0sCisgfTsKKyAKKytzdGF0aWMgaW50IHNhZmV4Y2VsX2FlYWRfc2hhMjU2X2RlczNfY3JhX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKKyt7CisrCXN0cnVjdCBzYWZleGNlbF9jaXBoZXJfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworKworKwlzYWZleGNlbF9hZWFkX3NoYTI1Nl9jcmFfaW5pdCh0Zm0pOworKwljdHgtPmFsZyA9IFNBRkVYQ0VMXzNERVM7IC8qIG92ZXJyaWRlIGRlZmF1bHQgKi8KKysJY3R4LT5ibG9ja3N6ID0gREVTM19FREVfQkxPQ0tfU0laRTsKKysJY3R4LT5pdm1hc2sgPSBFSVAxOTdfT1BUSU9OXzJfVE9LRU5fSVZfQ01EOworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RydWN0IHNhZmV4Y2VsX2FsZ190ZW1wbGF0ZSBzYWZleGNlbF9hbGdfYXV0aGVuY19obWFjX3NoYTI1Nl9jYmNfZGVzM19lZGUgPSB7CisrCS50eXBlID0gU0FGRVhDRUxfQUxHX1RZUEVfQUVBRCwKKysJLmFsZ29fbWFzayA9IFNBRkVYQ0VMX0FMR19ERVMgfCBTQUZFWENFTF9BTEdfU0hBMl8yNTYsCisrCS5hbGcuYWVhZCA9IHsKKysJCS5zZXRrZXkgPSBzYWZleGNlbF9hZWFkX3NldGtleSwKKysJCS5lbmNyeXB0ID0gc2FmZXhjZWxfYWVhZF9lbmNyeXB0LAorKwkJLmRlY3J5cHQgPSBzYWZleGNlbF9hZWFkX2RlY3J5cHQsCisrCQkuaXZzaXplID0gREVTM19FREVfQkxPQ0tfU0laRSwKKysJCS5tYXhhdXRoc2l6ZSA9IFNIQTI1Nl9ESUdFU1RfU0laRSwKKysJCS5iYXNlID0geworKwkJCS5jcmFfbmFtZSA9ICJhdXRoZW5jKGhtYWMoc2hhMjU2KSxjYmMoZGVzM19lZGUpKSIsCisrCQkJLmNyYV9kcml2ZXJfbmFtZSA9ICJzYWZleGNlbC1hdXRoZW5jLWhtYWMtc2hhMjU2LWNiYy1kZXMzX2VkZSIsCisrCQkJLmNyYV9wcmlvcml0eSA9IFNBRkVYQ0VMX0NSQV9QUklPUklUWSwKKysJCQkuY3JhX2ZsYWdzID0gQ1JZUFRPX0FMR19BU1lOQyB8CisrCQkJCSAgICAgQ1JZUFRPX0FMR19LRVJOX0RSSVZFUl9PTkxZLAorKwkJCS5jcmFfYmxvY2tzaXplID0gREVTM19FREVfQkxPQ0tfU0laRSwKKysJCQkuY3JhX2N0eHNpemUgPSBzaXplb2Yoc3RydWN0IHNhZmV4Y2VsX2NpcGhlcl9jdHgpLAorKwkJCS5jcmFfYWxpZ25tYXNrID0gMCwKKysJCQkuY3JhX2luaXQgPSBzYWZleGNlbF9hZWFkX3NoYTI1Nl9kZXMzX2NyYV9pbml0LAorKwkJCS5jcmFfZXhpdCA9IHNhZmV4Y2VsX2FlYWRfY3JhX2V4aXQsCisrCQkJLmNyYV9tb2R1bGUgPSBUSElTX01PRFVMRSwKKysJCX0sCisrCX0sCisrfTsKKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX2FlYWRfc2hhMjI0X2RlczNfY3JhX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKKyt7CisrCXN0cnVjdCBzYWZleGNlbF9jaXBoZXJfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworKworKwlzYWZleGNlbF9hZWFkX3NoYTIyNF9jcmFfaW5pdCh0Zm0pOworKwljdHgtPmFsZyA9IFNBRkVYQ0VMXzNERVM7IC8qIG92ZXJyaWRlIGRlZmF1bHQgKi8KKysJY3R4LT5ibG9ja3N6ID0gREVTM19FREVfQkxPQ0tfU0laRTsKKysJY3R4LT5pdm1hc2sgPSBFSVAxOTdfT1BUSU9OXzJfVE9LRU5fSVZfQ01EOworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RydWN0IHNhZmV4Y2VsX2FsZ190ZW1wbGF0ZSBzYWZleGNlbF9hbGdfYXV0aGVuY19obWFjX3NoYTIyNF9jYmNfZGVzM19lZGUgPSB7CisrCS50eXBlID0gU0FGRVhDRUxfQUxHX1RZUEVfQUVBRCwKKysJLmFsZ29fbWFzayA9IFNBRkVYQ0VMX0FMR19ERVMgfCBTQUZFWENFTF9BTEdfU0hBMl8yNTYsCisrCS5hbGcuYWVhZCA9IHsKKysJCS5zZXRrZXkgPSBzYWZleGNlbF9hZWFkX3NldGtleSwKKysJCS5lbmNyeXB0ID0gc2FmZXhjZWxfYWVhZF9lbmNyeXB0LAorKwkJLmRlY3J5cHQgPSBzYWZleGNlbF9hZWFkX2RlY3J5cHQsCisrCQkuaXZzaXplID0gREVTM19FREVfQkxPQ0tfU0laRSwKKysJCS5tYXhhdXRoc2l6ZSA9IFNIQTIyNF9ESUdFU1RfU0laRSwKKysJCS5iYXNlID0geworKwkJCS5jcmFfbmFtZSA9ICJhdXRoZW5jKGhtYWMoc2hhMjI0KSxjYmMoZGVzM19lZGUpKSIsCisrCQkJLmNyYV9kcml2ZXJfbmFtZSA9ICJzYWZleGNlbC1hdXRoZW5jLWhtYWMtc2hhMjI0LWNiYy1kZXMzX2VkZSIsCisrCQkJLmNyYV9wcmlvcml0eSA9IFNBRkVYQ0VMX0NSQV9QUklPUklUWSwKKysJCQkuY3JhX2ZsYWdzID0gQ1JZUFRPX0FMR19BU1lOQyB8CisrCQkJCSAgICAgQ1JZUFRPX0FMR19LRVJOX0RSSVZFUl9PTkxZLAorKwkJCS5jcmFfYmxvY2tzaXplID0gREVTM19FREVfQkxPQ0tfU0laRSwKKysJCQkuY3JhX2N0eHNpemUgPSBzaXplb2Yoc3RydWN0IHNhZmV4Y2VsX2NpcGhlcl9jdHgpLAorKwkJCS5jcmFfYWxpZ25tYXNrID0gMCwKKysJCQkuY3JhX2luaXQgPSBzYWZleGNlbF9hZWFkX3NoYTIyNF9kZXMzX2NyYV9pbml0LAorKwkJCS5jcmFfZXhpdCA9IHNhZmV4Y2VsX2FlYWRfY3JhX2V4aXQsCisrCQkJLmNyYV9tb2R1bGUgPSBUSElTX01PRFVMRSwKKysJCX0sCisrCX0sCisrfTsKKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX2FlYWRfc2hhNTEyX2RlczNfY3JhX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKKyt7CisrCXN0cnVjdCBzYWZleGNlbF9jaXBoZXJfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworKworKwlzYWZleGNlbF9hZWFkX3NoYTUxMl9jcmFfaW5pdCh0Zm0pOworKwljdHgtPmFsZyA9IFNBRkVYQ0VMXzNERVM7IC8qIG92ZXJyaWRlIGRlZmF1bHQgKi8KKysJY3R4LT5ibG9ja3N6ID0gREVTM19FREVfQkxPQ0tfU0laRTsKKysJY3R4LT5pdm1hc2sgPSBFSVAxOTdfT1BUSU9OXzJfVE9LRU5fSVZfQ01EOworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RydWN0IHNhZmV4Y2VsX2FsZ190ZW1wbGF0ZSBzYWZleGNlbF9hbGdfYXV0aGVuY19obWFjX3NoYTUxMl9jYmNfZGVzM19lZGUgPSB7CisrCS50eXBlID0gU0FGRVhDRUxfQUxHX1RZUEVfQUVBRCwKKysJLmFsZ29fbWFzayA9IFNBRkVYQ0VMX0FMR19ERVMgfCBTQUZFWENFTF9BTEdfU0hBMl81MTIsCisrCS5hbGcuYWVhZCA9IHsKKysJCS5zZXRrZXkgPSBzYWZleGNlbF9hZWFkX3NldGtleSwKKysJCS5lbmNyeXB0ID0gc2FmZXhjZWxfYWVhZF9lbmNyeXB0LAorKwkJLmRlY3J5cHQgPSBzYWZleGNlbF9hZWFkX2RlY3J5cHQsCisrCQkuaXZzaXplID0gREVTM19FREVfQkxPQ0tfU0laRSwKKysJCS5tYXhhdXRoc2l6ZSA9IFNIQTUxMl9ESUdFU1RfU0laRSwKKysJCS5iYXNlID0geworKwkJCS5jcmFfbmFtZSA9ICJhdXRoZW5jKGhtYWMoc2hhNTEyKSxjYmMoZGVzM19lZGUpKSIsCisrCQkJLmNyYV9kcml2ZXJfbmFtZSA9ICJzYWZleGNlbC1hdXRoZW5jLWhtYWMtc2hhNTEyLWNiYy1kZXMzX2VkZSIsCisrCQkJLmNyYV9wcmlvcml0eSA9IFNBRkVYQ0VMX0NSQV9QUklPUklUWSwKKysJCQkuY3JhX2ZsYWdzID0gQ1JZUFRPX0FMR19BU1lOQyB8CisrCQkJCSAgICAgQ1JZUFRPX0FMR19LRVJOX0RSSVZFUl9PTkxZLAorKwkJCS5jcmFfYmxvY2tzaXplID0gREVTM19FREVfQkxPQ0tfU0laRSwKKysJCQkuY3JhX2N0eHNpemUgPSBzaXplb2Yoc3RydWN0IHNhZmV4Y2VsX2NpcGhlcl9jdHgpLAorKwkJCS5jcmFfYWxpZ25tYXNrID0gMCwKKysJCQkuY3JhX2luaXQgPSBzYWZleGNlbF9hZWFkX3NoYTUxMl9kZXMzX2NyYV9pbml0LAorKwkJCS5jcmFfZXhpdCA9IHNhZmV4Y2VsX2FlYWRfY3JhX2V4aXQsCisrCQkJLmNyYV9tb2R1bGUgPSBUSElTX01PRFVMRSwKKysJCX0sCisrCX0sCisrfTsKKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX2FlYWRfc2hhMzg0X2RlczNfY3JhX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKKyt7CisrCXN0cnVjdCBzYWZleGNlbF9jaXBoZXJfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworKworKwlzYWZleGNlbF9hZWFkX3NoYTM4NF9jcmFfaW5pdCh0Zm0pOworKwljdHgtPmFsZyA9IFNBRkVYQ0VMXzNERVM7IC8qIG92ZXJyaWRlIGRlZmF1bHQgKi8KKysJY3R4LT5ibG9ja3N6ID0gREVTM19FREVfQkxPQ0tfU0laRTsKKysJY3R4LT5pdm1hc2sgPSBFSVAxOTdfT1BUSU9OXzJfVE9LRU5fSVZfQ01EOworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RydWN0IHNhZmV4Y2VsX2FsZ190ZW1wbGF0ZSBzYWZleGNlbF9hbGdfYXV0aGVuY19obWFjX3NoYTM4NF9jYmNfZGVzM19lZGUgPSB7CisrCS50eXBlID0gU0FGRVhDRUxfQUxHX1RZUEVfQUVBRCwKKysJLmFsZ29fbWFzayA9IFNBRkVYQ0VMX0FMR19ERVMgfCBTQUZFWENFTF9BTEdfU0hBMl81MTIsCisrCS5hbGcuYWVhZCA9IHsKKysJCS5zZXRrZXkgPSBzYWZleGNlbF9hZWFkX3NldGtleSwKKysJCS5lbmNyeXB0ID0gc2FmZXhjZWxfYWVhZF9lbmNyeXB0LAorKwkJLmRlY3J5cHQgPSBzYWZleGNlbF9hZWFkX2RlY3J5cHQsCisrCQkuaXZzaXplID0gREVTM19FREVfQkxPQ0tfU0laRSwKKysJCS5tYXhhdXRoc2l6ZSA9IFNIQTM4NF9ESUdFU1RfU0laRSwKKysJCS5iYXNlID0geworKwkJCS5jcmFfbmFtZSA9ICJhdXRoZW5jKGhtYWMoc2hhMzg0KSxjYmMoZGVzM19lZGUpKSIsCisrCQkJLmNyYV9kcml2ZXJfbmFtZSA9ICJzYWZleGNlbC1hdXRoZW5jLWhtYWMtc2hhMzg0LWNiYy1kZXMzX2VkZSIsCisrCQkJLmNyYV9wcmlvcml0eSA9IFNBRkVYQ0VMX0NSQV9QUklPUklUWSwKKysJCQkuY3JhX2ZsYWdzID0gQ1JZUFRPX0FMR19BU1lOQyB8CisrCQkJCSAgICAgQ1JZUFRPX0FMR19LRVJOX0RSSVZFUl9PTkxZLAorKwkJCS5jcmFfYmxvY2tzaXplID0gREVTM19FREVfQkxPQ0tfU0laRSwKKysJCQkuY3JhX2N0eHNpemUgPSBzaXplb2Yoc3RydWN0IHNhZmV4Y2VsX2NpcGhlcl9jdHgpLAorKwkJCS5jcmFfYWxpZ25tYXNrID0gMCwKKysJCQkuY3JhX2luaXQgPSBzYWZleGNlbF9hZWFkX3NoYTM4NF9kZXMzX2NyYV9pbml0LAorKwkJCS5jcmFfZXhpdCA9IHNhZmV4Y2VsX2FlYWRfY3JhX2V4aXQsCisrCQkJLmNyYV9tb2R1bGUgPSBUSElTX01PRFVMRSwKKysJCX0sCisrCX0sCisrfTsKKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX2FlYWRfc2hhMV9kZXNfY3JhX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKKyt7CisrCXN0cnVjdCBzYWZleGNlbF9jaXBoZXJfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworKworKwlzYWZleGNlbF9hZWFkX3NoYTFfY3JhX2luaXQodGZtKTsKKysJY3R4LT5hbGcgPSBTQUZFWENFTF9ERVM7IC8qIG92ZXJyaWRlIGRlZmF1bHQgKi8KKysJY3R4LT5ibG9ja3N6ID0gREVTX0JMT0NLX1NJWkU7CisrCWN0eC0+aXZtYXNrID0gRUlQMTk3X09QVElPTl8yX1RPS0VOX0lWX0NNRDsKKysJcmV0dXJuIDA7CisrfQorKworK3N0cnVjdCBzYWZleGNlbF9hbGdfdGVtcGxhdGUgc2FmZXhjZWxfYWxnX2F1dGhlbmNfaG1hY19zaGExX2NiY19kZXMgPSB7CisrCS50eXBlID0gU0FGRVhDRUxfQUxHX1RZUEVfQUVBRCwKKysJLmFsZ29fbWFzayA9IFNBRkVYQ0VMX0FMR19ERVMgfCBTQUZFWENFTF9BTEdfU0hBMSwKKysJLmFsZy5hZWFkID0geworKwkJLnNldGtleSA9IHNhZmV4Y2VsX2FlYWRfc2V0a2V5LAorKwkJLmVuY3J5cHQgPSBzYWZleGNlbF9hZWFkX2VuY3J5cHQsCisrCQkuZGVjcnlwdCA9IHNhZmV4Y2VsX2FlYWRfZGVjcnlwdCwKKysJCS5pdnNpemUgPSBERVNfQkxPQ0tfU0laRSwKKysJCS5tYXhhdXRoc2l6ZSA9IFNIQTFfRElHRVNUX1NJWkUsCisrCQkuYmFzZSA9IHsKKysJCQkuY3JhX25hbWUgPSAiYXV0aGVuYyhobWFjKHNoYTEpLGNiYyhkZXMpKSIsCisrCQkJLmNyYV9kcml2ZXJfbmFtZSA9ICJzYWZleGNlbC1hdXRoZW5jLWhtYWMtc2hhMS1jYmMtZGVzIiwKKysJCQkuY3JhX3ByaW9yaXR5ID0gU0FGRVhDRUxfQ1JBX1BSSU9SSVRZLAorKwkJCS5jcmFfZmxhZ3MgPSBDUllQVE9fQUxHX0FTWU5DIHwKKysJCQkJICAgICBDUllQVE9fQUxHX0tFUk5fRFJJVkVSX09OTFksCisrCQkJLmNyYV9ibG9ja3NpemUgPSBERVNfQkxPQ0tfU0laRSwKKysJCQkuY3JhX2N0eHNpemUgPSBzaXplb2Yoc3RydWN0IHNhZmV4Y2VsX2NpcGhlcl9jdHgpLAorKwkJCS5jcmFfYWxpZ25tYXNrID0gMCwKKysJCQkuY3JhX2luaXQgPSBzYWZleGNlbF9hZWFkX3NoYTFfZGVzX2NyYV9pbml0LAorKwkJCS5jcmFfZXhpdCA9IHNhZmV4Y2VsX2FlYWRfY3JhX2V4aXQsCisrCQkJLmNyYV9tb2R1bGUgPSBUSElTX01PRFVMRSwKKysJCX0sCisrCX0sCisrfTsKKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX2FlYWRfc2hhMjU2X2Rlc19jcmFfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQorK3sKKysJc3RydWN0IHNhZmV4Y2VsX2NpcGhlcl9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisrCisrCXNhZmV4Y2VsX2FlYWRfc2hhMjU2X2NyYV9pbml0KHRmbSk7CisrCWN0eC0+YWxnID0gU0FGRVhDRUxfREVTOyAvKiBvdmVycmlkZSBkZWZhdWx0ICovCisrCWN0eC0+YmxvY2tzeiA9IERFU19CTE9DS19TSVpFOworKwljdHgtPml2bWFzayA9IEVJUDE5N19PUFRJT05fMl9UT0tFTl9JVl9DTUQ7CisrCXJldHVybiAwOworK30KKysKKytzdHJ1Y3Qgc2FmZXhjZWxfYWxnX3RlbXBsYXRlIHNhZmV4Y2VsX2FsZ19hdXRoZW5jX2htYWNfc2hhMjU2X2NiY19kZXMgPSB7CisrCS50eXBlID0gU0FGRVhDRUxfQUxHX1RZUEVfQUVBRCwKKysJLmFsZ29fbWFzayA9IFNBRkVYQ0VMX0FMR19ERVMgfCBTQUZFWENFTF9BTEdfU0hBMl8yNTYsCisrCS5hbGcuYWVhZCA9IHsKKysJCS5zZXRrZXkgPSBzYWZleGNlbF9hZWFkX3NldGtleSwKKysJCS5lbmNyeXB0ID0gc2FmZXhjZWxfYWVhZF9lbmNyeXB0LAorKwkJLmRlY3J5cHQgPSBzYWZleGNlbF9hZWFkX2RlY3J5cHQsCisrCQkuaXZzaXplID0gREVTX0JMT0NLX1NJWkUsCisrCQkubWF4YXV0aHNpemUgPSBTSEEyNTZfRElHRVNUX1NJWkUsCisrCQkuYmFzZSA9IHsKKysJCQkuY3JhX25hbWUgPSAiYXV0aGVuYyhobWFjKHNoYTI1NiksY2JjKGRlcykpIiwKKysJCQkuY3JhX2RyaXZlcl9uYW1lID0gInNhZmV4Y2VsLWF1dGhlbmMtaG1hYy1zaGEyNTYtY2JjLWRlcyIsCisrCQkJLmNyYV9wcmlvcml0eSA9IFNBRkVYQ0VMX0NSQV9QUklPUklUWSwKKysJCQkuY3JhX2ZsYWdzID0gQ1JZUFRPX0FMR19BU1lOQyB8CisrCQkJCSAgICAgQ1JZUFRPX0FMR19LRVJOX0RSSVZFUl9PTkxZLAorKwkJCS5jcmFfYmxvY2tzaXplID0gREVTX0JMT0NLX1NJWkUsCisrCQkJLmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBzYWZleGNlbF9jaXBoZXJfY3R4KSwKKysJCQkuY3JhX2FsaWdubWFzayA9IDAsCisrCQkJLmNyYV9pbml0ID0gc2FmZXhjZWxfYWVhZF9zaGEyNTZfZGVzX2NyYV9pbml0LAorKwkJCS5jcmFfZXhpdCA9IHNhZmV4Y2VsX2FlYWRfY3JhX2V4aXQsCisrCQkJLmNyYV9tb2R1bGUgPSBUSElTX01PRFVMRSwKKysJCX0sCisrCX0sCisrfTsKKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX2FlYWRfc2hhMjI0X2Rlc19jcmFfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQorK3sKKysJc3RydWN0IHNhZmV4Y2VsX2NpcGhlcl9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisrCisrCXNhZmV4Y2VsX2FlYWRfc2hhMjI0X2NyYV9pbml0KHRmbSk7CisrCWN0eC0+YWxnID0gU0FGRVhDRUxfREVTOyAvKiBvdmVycmlkZSBkZWZhdWx0ICovCisrCWN0eC0+YmxvY2tzeiA9IERFU19CTE9DS19TSVpFOworKwljdHgtPml2bWFzayA9IEVJUDE5N19PUFRJT05fMl9UT0tFTl9JVl9DTUQ7CisrCXJldHVybiAwOworK30KKysKKytzdHJ1Y3Qgc2FmZXhjZWxfYWxnX3RlbXBsYXRlIHNhZmV4Y2VsX2FsZ19hdXRoZW5jX2htYWNfc2hhMjI0X2NiY19kZXMgPSB7CisrCS50eXBlID0gU0FGRVhDRUxfQUxHX1RZUEVfQUVBRCwKKysJLmFsZ29fbWFzayA9IFNBRkVYQ0VMX0FMR19ERVMgfCBTQUZFWENFTF9BTEdfU0hBMl8yNTYsCisrCS5hbGcuYWVhZCA9IHsKKysJCS5zZXRrZXkgPSBzYWZleGNlbF9hZWFkX3NldGtleSwKKysJCS5lbmNyeXB0ID0gc2FmZXhjZWxfYWVhZF9lbmNyeXB0LAorKwkJLmRlY3J5cHQgPSBzYWZleGNlbF9hZWFkX2RlY3J5cHQsCisrCQkuaXZzaXplID0gREVTX0JMT0NLX1NJWkUsCisrCQkubWF4YXV0aHNpemUgPSBTSEEyMjRfRElHRVNUX1NJWkUsCisrCQkuYmFzZSA9IHsKKysJCQkuY3JhX25hbWUgPSAiYXV0aGVuYyhobWFjKHNoYTIyNCksY2JjKGRlcykpIiwKKysJCQkuY3JhX2RyaXZlcl9uYW1lID0gInNhZmV4Y2VsLWF1dGhlbmMtaG1hYy1zaGEyMjQtY2JjLWRlcyIsCisrCQkJLmNyYV9wcmlvcml0eSA9IFNBRkVYQ0VMX0NSQV9QUklPUklUWSwKKysJCQkuY3JhX2ZsYWdzID0gQ1JZUFRPX0FMR19BU1lOQyB8CisrCQkJCSAgICAgQ1JZUFRPX0FMR19LRVJOX0RSSVZFUl9PTkxZLAorKwkJCS5jcmFfYmxvY2tzaXplID0gREVTX0JMT0NLX1NJWkUsCisrCQkJLmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBzYWZleGNlbF9jaXBoZXJfY3R4KSwKKysJCQkuY3JhX2FsaWdubWFzayA9IDAsCisrCQkJLmNyYV9pbml0ID0gc2FmZXhjZWxfYWVhZF9zaGEyMjRfZGVzX2NyYV9pbml0LAorKwkJCS5jcmFfZXhpdCA9IHNhZmV4Y2VsX2FlYWRfY3JhX2V4aXQsCisrCQkJLmNyYV9tb2R1bGUgPSBUSElTX01PRFVMRSwKKysJCX0sCisrCX0sCisrfTsKKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX2FlYWRfc2hhNTEyX2Rlc19jcmFfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQorK3sKKysJc3RydWN0IHNhZmV4Y2VsX2NpcGhlcl9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisrCisrCXNhZmV4Y2VsX2FlYWRfc2hhNTEyX2NyYV9pbml0KHRmbSk7CisrCWN0eC0+YWxnID0gU0FGRVhDRUxfREVTOyAvKiBvdmVycmlkZSBkZWZhdWx0ICovCisrCWN0eC0+YmxvY2tzeiA9IERFU19CTE9DS19TSVpFOworKwljdHgtPml2bWFzayA9IEVJUDE5N19PUFRJT05fMl9UT0tFTl9JVl9DTUQ7CisrCXJldHVybiAwOworK30KKysKKytzdHJ1Y3Qgc2FmZXhjZWxfYWxnX3RlbXBsYXRlIHNhZmV4Y2VsX2FsZ19hdXRoZW5jX2htYWNfc2hhNTEyX2NiY19kZXMgPSB7CisrCS50eXBlID0gU0FGRVhDRUxfQUxHX1RZUEVfQUVBRCwKKysJLmFsZ29fbWFzayA9IFNBRkVYQ0VMX0FMR19ERVMgfCBTQUZFWENFTF9BTEdfU0hBMl81MTIsCisrCS5hbGcuYWVhZCA9IHsKKysJCS5zZXRrZXkgPSBzYWZleGNlbF9hZWFkX3NldGtleSwKKysJCS5lbmNyeXB0ID0gc2FmZXhjZWxfYWVhZF9lbmNyeXB0LAorKwkJLmRlY3J5cHQgPSBzYWZleGNlbF9hZWFkX2RlY3J5cHQsCisrCQkuaXZzaXplID0gREVTX0JMT0NLX1NJWkUsCisrCQkubWF4YXV0aHNpemUgPSBTSEE1MTJfRElHRVNUX1NJWkUsCisrCQkuYmFzZSA9IHsKKysJCQkuY3JhX25hbWUgPSAiYXV0aGVuYyhobWFjKHNoYTUxMiksY2JjKGRlcykpIiwKKysJCQkuY3JhX2RyaXZlcl9uYW1lID0gInNhZmV4Y2VsLWF1dGhlbmMtaG1hYy1zaGE1MTItY2JjLWRlcyIsCisrCQkJLmNyYV9wcmlvcml0eSA9IFNBRkVYQ0VMX0NSQV9QUklPUklUWSwKKysJCQkuY3JhX2ZsYWdzID0gQ1JZUFRPX0FMR19BU1lOQyB8CisrCQkJCSAgICAgQ1JZUFRPX0FMR19LRVJOX0RSSVZFUl9PTkxZLAorKwkJCS5jcmFfYmxvY2tzaXplID0gREVTX0JMT0NLX1NJWkUsCisrCQkJLmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBzYWZleGNlbF9jaXBoZXJfY3R4KSwKKysJCQkuY3JhX2FsaWdubWFzayA9IDAsCisrCQkJLmNyYV9pbml0ID0gc2FmZXhjZWxfYWVhZF9zaGE1MTJfZGVzX2NyYV9pbml0LAorKwkJCS5jcmFfZXhpdCA9IHNhZmV4Y2VsX2FlYWRfY3JhX2V4aXQsCisrCQkJLmNyYV9tb2R1bGUgPSBUSElTX01PRFVMRSwKKysJCX0sCisrCX0sCisrfTsKKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX2FlYWRfc2hhMzg0X2Rlc19jcmFfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQorK3sKKysJc3RydWN0IHNhZmV4Y2VsX2NpcGhlcl9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisrCisrCXNhZmV4Y2VsX2FlYWRfc2hhMzg0X2NyYV9pbml0KHRmbSk7CisrCWN0eC0+YWxnID0gU0FGRVhDRUxfREVTOyAvKiBvdmVycmlkZSBkZWZhdWx0ICovCisrCWN0eC0+YmxvY2tzeiA9IERFU19CTE9DS19TSVpFOworKwljdHgtPml2bWFzayA9IEVJUDE5N19PUFRJT05fMl9UT0tFTl9JVl9DTUQ7CisrCXJldHVybiAwOworK30KKysKKytzdHJ1Y3Qgc2FmZXhjZWxfYWxnX3RlbXBsYXRlIHNhZmV4Y2VsX2FsZ19hdXRoZW5jX2htYWNfc2hhMzg0X2NiY19kZXMgPSB7CisrCS50eXBlID0gU0FGRVhDRUxfQUxHX1RZUEVfQUVBRCwKKysJLmFsZ29fbWFzayA9IFNBRkVYQ0VMX0FMR19ERVMgfCBTQUZFWENFTF9BTEdfU0hBMl81MTIsCisrCS5hbGcuYWVhZCA9IHsKKysJCS5zZXRrZXkgPSBzYWZleGNlbF9hZWFkX3NldGtleSwKKysJCS5lbmNyeXB0ID0gc2FmZXhjZWxfYWVhZF9lbmNyeXB0LAorKwkJLmRlY3J5cHQgPSBzYWZleGNlbF9hZWFkX2RlY3J5cHQsCisrCQkuaXZzaXplID0gREVTX0JMT0NLX1NJWkUsCisrCQkubWF4YXV0aHNpemUgPSBTSEEzODRfRElHRVNUX1NJWkUsCisrCQkuYmFzZSA9IHsKKysJCQkuY3JhX25hbWUgPSAiYXV0aGVuYyhobWFjKHNoYTM4NCksY2JjKGRlcykpIiwKKysJCQkuY3JhX2RyaXZlcl9uYW1lID0gInNhZmV4Y2VsLWF1dGhlbmMtaG1hYy1zaGEzODQtY2JjLWRlcyIsCisrCQkJLmNyYV9wcmlvcml0eSA9IFNBRkVYQ0VMX0NSQV9QUklPUklUWSwKKysJCQkuY3JhX2ZsYWdzID0gQ1JZUFRPX0FMR19BU1lOQyB8CisrCQkJCSAgICAgQ1JZUFRPX0FMR19LRVJOX0RSSVZFUl9PTkxZLAorKwkJCS5jcmFfYmxvY2tzaXplID0gREVTX0JMT0NLX1NJWkUsCisrCQkJLmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBzYWZleGNlbF9jaXBoZXJfY3R4KSwKKysJCQkuY3JhX2FsaWdubWFzayA9IDAsCisrCQkJLmNyYV9pbml0ID0gc2FmZXhjZWxfYWVhZF9zaGEzODRfZGVzX2NyYV9pbml0LAorKwkJCS5jcmFfZXhpdCA9IHNhZmV4Y2VsX2FlYWRfY3JhX2V4aXQsCisrCQkJLmNyYV9tb2R1bGUgPSBUSElTX01PRFVMRSwKKysJCX0sCisrCX0sCisrfTsKKysKKyBzdGF0aWMgaW50IHNhZmV4Y2VsX2FlYWRfc2hhMV9jdHJfY3JhX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKKyB7CisgCXN0cnVjdCBzYWZleGNlbF9jaXBoZXJfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworQEAgLTE5NjUsMTQgKzI0NTAsMTIgQEAgc3RhdGljIGludCBzYWZleGNlbF9za2NpcGhlcl9hZXN4dHNfc2V0aworIAkvKiBPbmx5IGhhbGYgb2YgdGhlIGtleSBkYXRhIGlzIGNpcGhlciBrZXkgKi8KKyAJa2V5bGVuID0gKGxlbiA+PiAxKTsKKyAJcmV0ID0gYWVzX2V4cGFuZGtleSgmYWVzLCBrZXksIGtleWxlbik7CistCWlmIChyZXQpIHsKKy0JCWNyeXB0b19za2NpcGhlcl9zZXRfZmxhZ3MoY3RmbSwgQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9MRU4pOworKwlpZiAocmV0KQorIAkJcmV0dXJuIHJldDsKKy0JfQorIAorIAlpZiAocHJpdi0+ZmxhZ3MgJiBFSVAxOTdfVFJDX0NBQ0hFICYmIGN0eC0+YmFzZS5jdHhyX2RtYSkgeworIAkJZm9yIChpID0gMDsgaSA8IGtleWxlbiAvIHNpemVvZih1MzIpOyBpKyspIHsKKy0JCQlpZiAoY3R4LT5rZXlbaV0gIT0gY3B1X3RvX2xlMzIoYWVzLmtleV9lbmNbaV0pKSB7CisrCQkJaWYgKGxlMzJfdG9fY3B1KGN0eC0+a2V5W2ldKSAhPSBhZXMua2V5X2VuY1tpXSkgeworIAkJCQljdHgtPmJhc2UubmVlZHNfaW52ID0gdHJ1ZTsKKyAJCQkJYnJlYWs7CisgCQkJfQorQEAgLTE5ODQsMTUgKzI0NjcsMTMgQEAgc3RhdGljIGludCBzYWZleGNlbF9za2NpcGhlcl9hZXN4dHNfc2V0aworIAorIAkvKiBUaGUgb3RoZXIgaGFsZiBpcyB0aGUgdHdlYWsga2V5ICovCisgCXJldCA9IGFlc19leHBhbmRrZXkoJmFlcywgKHU4ICopKGtleSArIGtleWxlbiksIGtleWxlbik7CistCWlmIChyZXQpIHsKKy0JCWNyeXB0b19za2NpcGhlcl9zZXRfZmxhZ3MoY3RmbSwgQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9MRU4pOworKwlpZiAocmV0KQorIAkJcmV0dXJuIHJldDsKKy0JfQorIAorIAlpZiAocHJpdi0+ZmxhZ3MgJiBFSVAxOTdfVFJDX0NBQ0hFICYmIGN0eC0+YmFzZS5jdHhyX2RtYSkgeworIAkJZm9yIChpID0gMDsgaSA8IGtleWxlbiAvIHNpemVvZih1MzIpOyBpKyspIHsKKy0JCQlpZiAoY3R4LT5rZXlbaSArIGtleWxlbiAvIHNpemVvZih1MzIpXSAhPQorLQkJCSAgICBjcHVfdG9fbGUzMihhZXMua2V5X2VuY1tpXSkpIHsKKysJCQlpZiAobGUzMl90b19jcHUoY3R4LT5rZXlbaSArIGtleWxlbiAvIHNpemVvZih1MzIpXSkgIT0KKysJCQkgICAgYWVzLmtleV9lbmNbaV0pIHsKKyAJCQkJY3R4LT5iYXNlLm5lZWRzX2ludiA9IHRydWU7CisgCQkJCWJyZWFrOworIAkJCX0KK0BAIC0yMDE1LDYgKzI0OTYsNyBAQCBzdGF0aWMgaW50IHNhZmV4Y2VsX3NrY2lwaGVyX2Flc194dHNfY3JhCisgCisgCXNhZmV4Y2VsX3NrY2lwaGVyX2NyYV9pbml0KHRmbSk7CisgCWN0eC0+YWxnICA9IFNBRkVYQ0VMX0FFUzsKKysJY3R4LT5ibG9ja3N6ID0gQUVTX0JMT0NLX1NJWkU7CisgCWN0eC0+eHRzICA9IDE7CisgCWN0eC0+bW9kZSA9IENPTlRFWFRfQ09OVFJPTF9DUllQVE9fTU9ERV9YVFM7CisgCXJldHVybiAwOworQEAgLTIwNzUsMTQgKzI1NTcsMTMgQEAgc3RhdGljIGludCBzYWZleGNlbF9hZWFkX2djbV9zZXRrZXkoc3RydQorIAorIAlyZXQgPSBhZXNfZXhwYW5ka2V5KCZhZXMsIGtleSwgbGVuKTsKKyAJaWYgKHJldCkgeworLQkJY3J5cHRvX2FlYWRfc2V0X2ZsYWdzKGN0Zm0sIENSWVBUT19URk1fUkVTX0JBRF9LRVlfTEVOKTsKKyAJCW1lbXplcm9fZXhwbGljaXQoJmFlcywgc2l6ZW9mKGFlcykpOworIAkJcmV0dXJuIHJldDsKKyAJfQorIAorIAlpZiAocHJpdi0+ZmxhZ3MgJiBFSVAxOTdfVFJDX0NBQ0hFICYmIGN0eC0+YmFzZS5jdHhyX2RtYSkgeworIAkJZm9yIChpID0gMDsgaSA8IGxlbiAvIHNpemVvZih1MzIpOyBpKyspIHsKKy0JCQlpZiAoY3R4LT5rZXlbaV0gIT0gY3B1X3RvX2xlMzIoYWVzLmtleV9lbmNbaV0pKSB7CisrCQkJaWYgKGxlMzJfdG9fY3B1KGN0eC0+a2V5W2ldKSAhPSBhZXMua2V5X2VuY1tpXSkgeworIAkJCQljdHgtPmJhc2UubmVlZHNfaW52ID0gdHJ1ZTsKKyAJCQkJYnJlYWs7CisgCQkJfQorQEAgLTIwOTksOCArMjU4MCw2IEBAIHN0YXRpYyBpbnQgc2FmZXhjZWxfYWVhZF9nY21fc2V0a2V5KHN0cnUKKyAJY3J5cHRvX2NpcGhlcl9zZXRfZmxhZ3MoY3R4LT5oa2FlcywgY3J5cHRvX2FlYWRfZ2V0X2ZsYWdzKGN0Zm0pICYKKyAJCQkJQ1JZUFRPX1RGTV9SRVFfTUFTSyk7CisgCXJldCA9IGNyeXB0b19jaXBoZXJfc2V0a2V5KGN0eC0+aGthZXMsIGtleSwgbGVuKTsKKy0JY3J5cHRvX2FlYWRfc2V0X2ZsYWdzKGN0Zm0sIGNyeXB0b19jaXBoZXJfZ2V0X2ZsYWdzKGN0eC0+aGthZXMpICYKKy0JCQkgICAgICBDUllQVE9fVEZNX1JFU19NQVNLKTsKKyAJaWYgKHJldCkKKyAJCXJldHVybiByZXQ7CisgCitAQCAtMjEwOSw3ICsyNTg4LDcgQEAgc3RhdGljIGludCBzYWZleGNlbF9hZWFkX2djbV9zZXRrZXkoc3RydQorIAorIAlpZiAocHJpdi0+ZmxhZ3MgJiBFSVAxOTdfVFJDX0NBQ0hFICYmIGN0eC0+YmFzZS5jdHhyX2RtYSkgeworIAkJZm9yIChpID0gMDsgaSA8IEFFU19CTE9DS19TSVpFIC8gc2l6ZW9mKHUzMik7IGkrKykgeworLQkJCWlmIChjdHgtPmlwYWRbaV0gIT0gY3B1X3RvX2JlMzIoaGFzaGtleVtpXSkpIHsKKysJCQlpZiAoYmUzMl90b19jcHUoY3R4LT5pcGFkW2ldKSAhPSBoYXNoa2V5W2ldKSB7CisgCQkJCWN0eC0+YmFzZS5uZWVkc19pbnYgPSB0cnVlOworIAkJCQlicmVhazsKKyAJCQl9CitAQCAtMjEzNSwxMCArMjYxNCw3IEBAIHN0YXRpYyBpbnQgc2FmZXhjZWxfYWVhZF9nY21fY3JhX2luaXQoc3QKKyAJY3R4LT5tb2RlID0gQ09OVEVYVF9DT05UUk9MX0NSWVBUT19NT0RFX1hDTTsgLyogb3ZlcnJpZGUgZGVmYXVsdCAqLworIAorIAljdHgtPmhrYWVzID0gY3J5cHRvX2FsbG9jX2NpcGhlcigiYWVzIiwgMCwgMCk7CistCWlmIChJU19FUlIoY3R4LT5oa2FlcykpCistCQlyZXR1cm4gUFRSX0VSUihjdHgtPmhrYWVzKTsKKy0KKy0JcmV0dXJuIDA7CisrCXJldHVybiBQVFJfRVJSX09SX1pFUk8oY3R4LT5oa2Flcyk7CisgfQorIAorIHN0YXRpYyB2b2lkIHNhZmV4Y2VsX2FlYWRfZ2NtX2NyYV9leGl0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCitAQCAtMjE5MiwxNCArMjY2OCwxMyBAQCBzdGF0aWMgaW50IHNhZmV4Y2VsX2FlYWRfY2NtX3NldGtleShzdHJ1CisgCisgCXJldCA9IGFlc19leHBhbmRrZXkoJmFlcywga2V5LCBsZW4pOworIAlpZiAocmV0KSB7CistCQljcnlwdG9fYWVhZF9zZXRfZmxhZ3MoY3RmbSwgQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9MRU4pOworIAkJbWVtemVyb19leHBsaWNpdCgmYWVzLCBzaXplb2YoYWVzKSk7CisgCQlyZXR1cm4gcmV0OworIAl9CisgCisgCWlmIChwcml2LT5mbGFncyAmIEVJUDE5N19UUkNfQ0FDSEUgJiYgY3R4LT5iYXNlLmN0eHJfZG1hKSB7CisgCQlmb3IgKGkgPSAwOyBpIDwgbGVuIC8gc2l6ZW9mKHUzMik7IGkrKykgeworLQkJCWlmIChjdHgtPmtleVtpXSAhPSBjcHVfdG9fbGUzMihhZXMua2V5X2VuY1tpXSkpIHsKKysJCQlpZiAobGUzMl90b19jcHUoY3R4LT5rZXlbaV0pICE9IGFlcy5rZXlfZW5jW2ldKSB7CisgCQkJCWN0eC0+YmFzZS5uZWVkc19pbnYgPSB0cnVlOworIAkJCQlicmVhazsKKyAJCQl9CitAQCAtMjIzNSw2ICsyNzEwLDcgQEAgc3RhdGljIGludCBzYWZleGNlbF9hZWFkX2NjbV9jcmFfaW5pdChzdAorIAljdHgtPnN0YXRlX3N6ID0gMyAqIEFFU19CTE9DS19TSVpFOworIAljdHgtPnhjbSA9IEVJUDE5N19YQ01fTU9ERV9DQ007CisgCWN0eC0+bW9kZSA9IENPTlRFWFRfQ09OVFJPTF9DUllQVE9fTU9ERV9YQ007IC8qIG92ZXJyaWRlIGRlZmF1bHQgKi8KKysJY3R4LT5jdHJpbml0ID0gMDsKKyAJcmV0dXJuIDA7CisgfQorIAorQEAgLTIzMDEsNSArMjc3Nyw5NDkgQEAgc3RydWN0IHNhZmV4Y2VsX2FsZ190ZW1wbGF0ZSBzYWZleGNlbF9hbAorIAkJCS5jcmFfZXhpdCA9IHNhZmV4Y2VsX2FlYWRfY3JhX2V4aXQsCisgCQkJLmNyYV9tb2R1bGUgPSBUSElTX01PRFVMRSwKKyAJCX0sCisrCX0sCisrfTsKKysKKytzdGF0aWMgdm9pZCBzYWZleGNlbF9jaGFjaGEyMF9zZXRrZXkoc3RydWN0IHNhZmV4Y2VsX2NpcGhlcl9jdHggKmN0eCwKKysJCQkJICAgICBjb25zdCB1OCAqa2V5KQorK3sKKysJc3RydWN0IHNhZmV4Y2VsX2NyeXB0b19wcml2ICpwcml2ID0gY3R4LT5wcml2OworKworKwlpZiAocHJpdi0+ZmxhZ3MgJiBFSVAxOTdfVFJDX0NBQ0hFICYmIGN0eC0+YmFzZS5jdHhyX2RtYSkKKysJCWlmIChtZW1jbXAoY3R4LT5rZXksIGtleSwgQ0hBQ0hBX0tFWV9TSVpFKSkKKysJCQljdHgtPmJhc2UubmVlZHNfaW52ID0gdHJ1ZTsKKysKKysJbWVtY3B5KGN0eC0+a2V5LCBrZXksIENIQUNIQV9LRVlfU0laRSk7CisrCWN0eC0+a2V5X2xlbiA9IENIQUNIQV9LRVlfU0laRTsKKyt9CisrCisrc3RhdGljIGludCBzYWZleGNlbF9za2NpcGhlcl9jaGFjaGEyMF9zZXRrZXkoc3RydWN0IGNyeXB0b19za2NpcGhlciAqY3RmbSwKKysJCQkJCSAgICAgY29uc3QgdTggKmtleSwgdW5zaWduZWQgaW50IGxlbikKKyt7CisrCXN0cnVjdCBzYWZleGNlbF9jaXBoZXJfY3R4ICpjdHggPSBjcnlwdG9fc2tjaXBoZXJfY3R4KGN0Zm0pOworKworKwlpZiAobGVuICE9IENIQUNIQV9LRVlfU0laRSkKKysJCXJldHVybiAtRUlOVkFMOworKworKwlzYWZleGNlbF9jaGFjaGEyMF9zZXRrZXkoY3R4LCBrZXkpOworKworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGludCBzYWZleGNlbF9za2NpcGhlcl9jaGFjaGEyMF9jcmFfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQorK3sKKysJc3RydWN0IHNhZmV4Y2VsX2NpcGhlcl9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisrCisrCXNhZmV4Y2VsX3NrY2lwaGVyX2NyYV9pbml0KHRmbSk7CisrCWN0eC0+YWxnICA9IFNBRkVYQ0VMX0NIQUNIQTIwOworKwljdHgtPmN0cmluaXQgPSAwOworKwljdHgtPm1vZGUgPSBDT05URVhUX0NPTlRST0xfQ0hBQ0hBMjBfTU9ERV8yNTZfMzI7CisrCXJldHVybiAwOworK30KKysKKytzdHJ1Y3Qgc2FmZXhjZWxfYWxnX3RlbXBsYXRlIHNhZmV4Y2VsX2FsZ19jaGFjaGEyMCA9IHsKKysJLnR5cGUgPSBTQUZFWENFTF9BTEdfVFlQRV9TS0NJUEhFUiwKKysJLmFsZ29fbWFzayA9IFNBRkVYQ0VMX0FMR19DSEFDSEEyMCwKKysJLmFsZy5za2NpcGhlciA9IHsKKysJCS5zZXRrZXkgPSBzYWZleGNlbF9za2NpcGhlcl9jaGFjaGEyMF9zZXRrZXksCisrCQkuZW5jcnlwdCA9IHNhZmV4Y2VsX2VuY3J5cHQsCisrCQkuZGVjcnlwdCA9IHNhZmV4Y2VsX2RlY3J5cHQsCisrCQkubWluX2tleXNpemUgPSBDSEFDSEFfS0VZX1NJWkUsCisrCQkubWF4X2tleXNpemUgPSBDSEFDSEFfS0VZX1NJWkUsCisrCQkuaXZzaXplID0gQ0hBQ0hBX0lWX1NJWkUsCisrCQkuYmFzZSA9IHsKKysJCQkuY3JhX25hbWUgPSAiY2hhY2hhMjAiLAorKwkJCS5jcmFfZHJpdmVyX25hbWUgPSAic2FmZXhjZWwtY2hhY2hhMjAiLAorKwkJCS5jcmFfcHJpb3JpdHkgPSBTQUZFWENFTF9DUkFfUFJJT1JJVFksCisrCQkJLmNyYV9mbGFncyA9IENSWVBUT19BTEdfQVNZTkMgfAorKwkJCQkgICAgIENSWVBUT19BTEdfS0VSTl9EUklWRVJfT05MWSwKKysJCQkuY3JhX2Jsb2Nrc2l6ZSA9IDEsCisrCQkJLmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBzYWZleGNlbF9jaXBoZXJfY3R4KSwKKysJCQkuY3JhX2FsaWdubWFzayA9IDAsCisrCQkJLmNyYV9pbml0ID0gc2FmZXhjZWxfc2tjaXBoZXJfY2hhY2hhMjBfY3JhX2luaXQsCisrCQkJLmNyYV9leGl0ID0gc2FmZXhjZWxfc2tjaXBoZXJfY3JhX2V4aXQsCisrCQkJLmNyYV9tb2R1bGUgPSBUSElTX01PRFVMRSwKKysJCX0sCisrCX0sCisrfTsKKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX2FlYWRfY2hhY2hhcG9seV9zZXRrZXkoc3RydWN0IGNyeXB0b19hZWFkICpjdGZtLAorKwkJCQkgICAgY29uc3QgdTggKmtleSwgdW5zaWduZWQgaW50IGxlbikKKyt7CisrCXN0cnVjdCBzYWZleGNlbF9jaXBoZXJfY3R4ICpjdHggPSBjcnlwdG9fYWVhZF9jdHgoY3RmbSk7CisrCisrCWlmIChjdHgtPmFlYWQgID09IEVJUDE5N19BRUFEX1RZUEVfSVBTRUNfRVNQICYmCisrCSAgICBsZW4gPiBFSVAxOTdfQUVBRF9JUFNFQ19OT05DRV9TSVpFKSB7CisrCQkvKiBFU1AgdmFyaWFudCBoYXMgbm9uY2UgYXBwZW5kZWQgdG8ga2V5ICovCisrCQlsZW4gLT0gRUlQMTk3X0FFQURfSVBTRUNfTk9OQ0VfU0laRTsKKysJCWN0eC0+bm9uY2UgPSAqKHUzMiAqKShrZXkgKyBsZW4pOworKwl9CisrCWlmIChsZW4gIT0gQ0hBQ0hBX0tFWV9TSVpFKQorKwkJcmV0dXJuIC1FSU5WQUw7CisrCisrCXNhZmV4Y2VsX2NoYWNoYTIwX3NldGtleShjdHgsIGtleSk7CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX2FlYWRfY2hhY2hhcG9seV9zZXRhdXRoc2l6ZShzdHJ1Y3QgY3J5cHRvX2FlYWQgKnRmbSwKKysJCQkJCSB1bnNpZ25lZCBpbnQgYXV0aHNpemUpCisreworKwlpZiAoYXV0aHNpemUgIT0gUE9MWTEzMDVfRElHRVNUX1NJWkUpCisrCQlyZXR1cm4gLUVJTlZBTDsKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQgc2FmZXhjZWxfYWVhZF9jaGFjaGFwb2x5X2NyeXB0KHN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSwKKysJCQkJCSAgZW51bSBzYWZleGNlbF9jaXBoZXJfZGlyZWN0aW9uIGRpcikKKyt7CisrCXN0cnVjdCBzYWZleGNlbF9jaXBoZXJfcmVxICpjcmVxID0gYWVhZF9yZXF1ZXN0X2N0eChyZXEpOworKwlzdHJ1Y3QgY3J5cHRvX2FlYWQgKmFlYWQgPSBjcnlwdG9fYWVhZF9yZXF0Zm0ocmVxKTsKKysJc3RydWN0IGNyeXB0b190Zm0gKnRmbSA9IGNyeXB0b19hZWFkX3RmbShhZWFkKTsKKysJc3RydWN0IHNhZmV4Y2VsX2NpcGhlcl9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisrCXN0cnVjdCBhZWFkX3JlcXVlc3QgKnN1YnJlcSA9IGFlYWRfcmVxdWVzdF9jdHgocmVxKTsKKysJdTMyIGtleVtDSEFDSEFfS0VZX1NJWkUgLyBzaXplb2YodTMyKSArIDFdOworKwlpbnQgcmV0ID0gMDsKKysKKysJLyoKKysJICogSW5zdGVhZCBvZiB3YXN0aW5nIHRpbWUgZGV0ZWN0aW5nIHVtcHRlZW4gc2lsbHkgY29ybmVyIGNhc2VzLAorKwkgKiBqdXN0IGR1bXAgYWxsICJzbWFsbCIgcmVxdWVzdHMgdG8gdGhlIGZhbGxiYWNrIGltcGxlbWVudGF0aW9uLgorKwkgKiBIVyB3b3VsZCBub3QgYmUgZmFzdGVyIG9uIHN1Y2ggc21hbGwgcmVxdWVzdHMgYW55d2F5LgorKwkgKi8KKysJaWYgKGxpa2VseSgoY3R4LT5hZWFkICE9IEVJUDE5N19BRUFEX1RZUEVfSVBTRUNfRVNQIHx8CisrCQkgICAgcmVxLT5hc3NvY2xlbiA+PSBFSVAxOTdfQUVBRF9JUFNFQ19JVl9TSVpFKSAmJgorKwkJICAgcmVxLT5jcnlwdGxlbiA+IFBPTFkxMzA1X0RJR0VTVF9TSVpFKSkgeworKwkJcmV0dXJuIHNhZmV4Y2VsX3F1ZXVlX3JlcSgmcmVxLT5iYXNlLCBjcmVxLCBkaXIpOworKwl9CisrCisrCS8qIEhXIGNhbm5vdCBkbyBmdWxsIChBQUQrcGF5bG9hZCkgemVybyBsZW5ndGgsIHVzZSBmYWxsYmFjayAqLworKwltZW1jcHkoa2V5LCBjdHgtPmtleSwgQ0hBQ0hBX0tFWV9TSVpFKTsKKysJaWYgKGN0eC0+YWVhZCA9PSBFSVAxOTdfQUVBRF9UWVBFX0lQU0VDX0VTUCkgeworKwkJLyogRVNQIHZhcmlhbnQgaGFzIG5vbmNlIGFwcGVuZGVkIHRvIHRoZSBrZXkgKi8KKysJCWtleVtDSEFDSEFfS0VZX1NJWkUgLyBzaXplb2YodTMyKV0gPSBjdHgtPm5vbmNlOworKwkJcmV0ID0gY3J5cHRvX2FlYWRfc2V0a2V5KGN0eC0+ZmJhY2ssICh1OCAqKWtleSwKKysJCQkJCSBDSEFDSEFfS0VZX1NJWkUgKworKwkJCQkJIEVJUDE5N19BRUFEX0lQU0VDX05PTkNFX1NJWkUpOworKwl9IGVsc2UgeworKwkJcmV0ID0gY3J5cHRvX2FlYWRfc2V0a2V5KGN0eC0+ZmJhY2ssICh1OCAqKWtleSwKKysJCQkJCSBDSEFDSEFfS0VZX1NJWkUpOworKwl9CisrCWlmIChyZXQpIHsKKysJCWNyeXB0b19hZWFkX2NsZWFyX2ZsYWdzKGFlYWQsIENSWVBUT19URk1fUkVRX01BU0spOworKwkJY3J5cHRvX2FlYWRfc2V0X2ZsYWdzKGFlYWQsIGNyeXB0b19hZWFkX2dldF9mbGFncyhjdHgtPmZiYWNrKSAmCisrCQkJCQkgICAgQ1JZUFRPX1RGTV9SRVFfTUFTSyk7CisrCQlyZXR1cm4gcmV0OworKwl9CisrCisrCWFlYWRfcmVxdWVzdF9zZXRfdGZtKHN1YnJlcSwgY3R4LT5mYmFjayk7CisrCWFlYWRfcmVxdWVzdF9zZXRfY2FsbGJhY2soc3VicmVxLCByZXEtPmJhc2UuZmxhZ3MsIHJlcS0+YmFzZS5jb21wbGV0ZSwKKysJCQkJICByZXEtPmJhc2UuZGF0YSk7CisrCWFlYWRfcmVxdWVzdF9zZXRfY3J5cHQoc3VicmVxLCByZXEtPnNyYywgcmVxLT5kc3QsIHJlcS0+Y3J5cHRsZW4sCisrCQkJICAgICAgIHJlcS0+aXYpOworKwlhZWFkX3JlcXVlc3Rfc2V0X2FkKHN1YnJlcSwgcmVxLT5hc3NvY2xlbik7CisrCisrCXJldHVybiAoZGlyID09ICBTQUZFWENFTF9FTkNSWVBUKSA/CisrCQljcnlwdG9fYWVhZF9lbmNyeXB0KHN1YnJlcSkgOgorKwkJY3J5cHRvX2FlYWRfZGVjcnlwdChzdWJyZXEpOworK30KKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX2FlYWRfY2hhY2hhcG9seV9lbmNyeXB0KHN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSkKKyt7CisrCXJldHVybiBzYWZleGNlbF9hZWFkX2NoYWNoYXBvbHlfY3J5cHQocmVxLCBTQUZFWENFTF9FTkNSWVBUKTsKKyt9CisrCisrc3RhdGljIGludCBzYWZleGNlbF9hZWFkX2NoYWNoYXBvbHlfZGVjcnlwdChzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEpCisreworKwlyZXR1cm4gc2FmZXhjZWxfYWVhZF9jaGFjaGFwb2x5X2NyeXB0KHJlcSwgU0FGRVhDRUxfREVDUllQVCk7CisrfQorKworK3N0YXRpYyBpbnQgc2FmZXhjZWxfYWVhZF9mYWxsYmFja19jcmFfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQorK3sKKysJc3RydWN0IGNyeXB0b19hZWFkICphZWFkID0gX19jcnlwdG9fYWVhZF9jYXN0KHRmbSk7CisrCXN0cnVjdCBhZWFkX2FsZyAqYWxnID0gY3J5cHRvX2FlYWRfYWxnKGFlYWQpOworKwlzdHJ1Y3Qgc2FmZXhjZWxfY2lwaGVyX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKysKKysJc2FmZXhjZWxfYWVhZF9jcmFfaW5pdCh0Zm0pOworKworKwkvKiBBbGxvY2F0ZSBmYWxsYmFjayBpbXBsZW1lbnRhdGlvbiAqLworKwljdHgtPmZiYWNrID0gY3J5cHRvX2FsbG9jX2FlYWQoYWxnLT5iYXNlLmNyYV9uYW1lLCAwLAorKwkJCQkgICAgICAgQ1JZUFRPX0FMR19BU1lOQyB8CisrCQkJCSAgICAgICBDUllQVE9fQUxHX05FRURfRkFMTEJBQ0spOworKwlpZiAoSVNfRVJSKGN0eC0+ZmJhY2spKQorKwkJcmV0dXJuIFBUUl9FUlIoY3R4LT5mYmFjayk7CisrCisrCWNyeXB0b19hZWFkX3NldF9yZXFzaXplKGFlYWQsIG1heChzaXplb2Yoc3RydWN0IHNhZmV4Y2VsX2NpcGhlcl9yZXEpLAorKwkJCQkJICBzaXplb2Yoc3RydWN0IGFlYWRfcmVxdWVzdCkgKworKwkJCQkJICBjcnlwdG9fYWVhZF9yZXFzaXplKGN0eC0+ZmJhY2spKSk7CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX2FlYWRfY2hhY2hhcG9seV9jcmFfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQorK3sKKysJc3RydWN0IHNhZmV4Y2VsX2NpcGhlcl9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisrCisrCXNhZmV4Y2VsX2FlYWRfZmFsbGJhY2tfY3JhX2luaXQodGZtKTsKKysJY3R4LT5hbGcgID0gU0FGRVhDRUxfQ0hBQ0hBMjA7CisrCWN0eC0+bW9kZSA9IENPTlRFWFRfQ09OVFJPTF9DSEFDSEEyMF9NT0RFXzI1Nl8zMiB8CisrCQkgICAgQ09OVEVYVF9DT05UUk9MX0NIQUNIQTIwX01PREVfQ0FMQ19PVEs7CisrCWN0eC0+Y3RyaW5pdCA9IDA7CisrCWN0eC0+aGFzaF9hbGcgPSBDT05URVhUX0NPTlRST0xfQ1JZUFRPX0FMR19QT0xZMTMwNTsKKysJY3R4LT5zdGF0ZV9zeiA9IDA7IC8qIFByZWNvbXB1dGVkIGJ5IEhXICovCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgdm9pZCBzYWZleGNlbF9hZWFkX2ZhbGxiYWNrX2NyYV9leGl0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCisreworKwlzdHJ1Y3Qgc2FmZXhjZWxfY2lwaGVyX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKysKKysJY3J5cHRvX2ZyZWVfYWVhZChjdHgtPmZiYWNrKTsKKysJc2FmZXhjZWxfYWVhZF9jcmFfZXhpdCh0Zm0pOworK30KKysKKytzdHJ1Y3Qgc2FmZXhjZWxfYWxnX3RlbXBsYXRlIHNhZmV4Y2VsX2FsZ19jaGFjaGFwb2x5ID0geworKwkudHlwZSA9IFNBRkVYQ0VMX0FMR19UWVBFX0FFQUQsCisrCS5hbGdvX21hc2sgPSBTQUZFWENFTF9BTEdfQ0hBQ0hBMjAgfCBTQUZFWENFTF9BTEdfUE9MWTEzMDUsCisrCS5hbGcuYWVhZCA9IHsKKysJCS5zZXRrZXkgPSBzYWZleGNlbF9hZWFkX2NoYWNoYXBvbHlfc2V0a2V5LAorKwkJLnNldGF1dGhzaXplID0gc2FmZXhjZWxfYWVhZF9jaGFjaGFwb2x5X3NldGF1dGhzaXplLAorKwkJLmVuY3J5cHQgPSBzYWZleGNlbF9hZWFkX2NoYWNoYXBvbHlfZW5jcnlwdCwKKysJCS5kZWNyeXB0ID0gc2FmZXhjZWxfYWVhZF9jaGFjaGFwb2x5X2RlY3J5cHQsCisrCQkuaXZzaXplID0gQ0hBQ0hBUE9MWV9JVl9TSVpFLAorKwkJLm1heGF1dGhzaXplID0gUE9MWTEzMDVfRElHRVNUX1NJWkUsCisrCQkuYmFzZSA9IHsKKysJCQkuY3JhX25hbWUgPSAicmZjNzUzOShjaGFjaGEyMCxwb2x5MTMwNSkiLAorKwkJCS5jcmFfZHJpdmVyX25hbWUgPSAic2FmZXhjZWwtY2hhY2hhMjAtcG9seTEzMDUiLAorKwkJCS8qICsxIHRvIHB1dCBpdCBhYm92ZSBIVyBjaGFjaGEgKyBTVyBwb2x5ICovCisrCQkJLmNyYV9wcmlvcml0eSA9IFNBRkVYQ0VMX0NSQV9QUklPUklUWSArIDEsCisrCQkJLmNyYV9mbGFncyA9IENSWVBUT19BTEdfQVNZTkMgfAorKwkJCQkgICAgIENSWVBUT19BTEdfS0VSTl9EUklWRVJfT05MWSB8CisrCQkJCSAgICAgQ1JZUFRPX0FMR19ORUVEX0ZBTExCQUNLLAorKwkJCS5jcmFfYmxvY2tzaXplID0gMSwKKysJCQkuY3JhX2N0eHNpemUgPSBzaXplb2Yoc3RydWN0IHNhZmV4Y2VsX2NpcGhlcl9jdHgpLAorKwkJCS5jcmFfYWxpZ25tYXNrID0gMCwKKysJCQkuY3JhX2luaXQgPSBzYWZleGNlbF9hZWFkX2NoYWNoYXBvbHlfY3JhX2luaXQsCisrCQkJLmNyYV9leGl0ID0gc2FmZXhjZWxfYWVhZF9mYWxsYmFja19jcmFfZXhpdCwKKysJCQkuY3JhX21vZHVsZSA9IFRISVNfTU9EVUxFLAorKwkJfSwKKysJfSwKKyt9OworKworK3N0YXRpYyBpbnQgc2FmZXhjZWxfYWVhZF9jaGFjaGFwb2x5ZXNwX2NyYV9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCisreworKwlzdHJ1Y3Qgc2FmZXhjZWxfY2lwaGVyX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKysJaW50IHJldDsKKysKKysJcmV0ID0gc2FmZXhjZWxfYWVhZF9jaGFjaGFwb2x5X2NyYV9pbml0KHRmbSk7CisrCWN0eC0+YWVhZCAgPSBFSVAxOTdfQUVBRF9UWVBFX0lQU0VDX0VTUDsKKysJY3R4LT5hYWRza2lwID0gRUlQMTk3X0FFQURfSVBTRUNfSVZfU0laRTsKKysJcmV0dXJuIHJldDsKKyt9CisrCisrc3RydWN0IHNhZmV4Y2VsX2FsZ190ZW1wbGF0ZSBzYWZleGNlbF9hbGdfY2hhY2hhcG9seV9lc3AgPSB7CisrCS50eXBlID0gU0FGRVhDRUxfQUxHX1RZUEVfQUVBRCwKKysJLmFsZ29fbWFzayA9IFNBRkVYQ0VMX0FMR19DSEFDSEEyMCB8IFNBRkVYQ0VMX0FMR19QT0xZMTMwNSwKKysJLmFsZy5hZWFkID0geworKwkJLnNldGtleSA9IHNhZmV4Y2VsX2FlYWRfY2hhY2hhcG9seV9zZXRrZXksCisrCQkuc2V0YXV0aHNpemUgPSBzYWZleGNlbF9hZWFkX2NoYWNoYXBvbHlfc2V0YXV0aHNpemUsCisrCQkuZW5jcnlwdCA9IHNhZmV4Y2VsX2FlYWRfY2hhY2hhcG9seV9lbmNyeXB0LAorKwkJLmRlY3J5cHQgPSBzYWZleGNlbF9hZWFkX2NoYWNoYXBvbHlfZGVjcnlwdCwKKysJCS5pdnNpemUgPSBDSEFDSEFQT0xZX0lWX1NJWkUgLSBFSVAxOTdfQUVBRF9JUFNFQ19OT05DRV9TSVpFLAorKwkJLm1heGF1dGhzaXplID0gUE9MWTEzMDVfRElHRVNUX1NJWkUsCisrCQkuYmFzZSA9IHsKKysJCQkuY3JhX25hbWUgPSAicmZjNzUzOWVzcChjaGFjaGEyMCxwb2x5MTMwNSkiLAorKwkJCS5jcmFfZHJpdmVyX25hbWUgPSAic2FmZXhjZWwtY2hhY2hhMjAtcG9seTEzMDUtZXNwIiwKKysJCQkvKiArMSB0byBwdXQgaXQgYWJvdmUgSFcgY2hhY2hhICsgU1cgcG9seSAqLworKwkJCS5jcmFfcHJpb3JpdHkgPSBTQUZFWENFTF9DUkFfUFJJT1JJVFkgKyAxLAorKwkJCS5jcmFfZmxhZ3MgPSBDUllQVE9fQUxHX0FTWU5DIHwKKysJCQkJICAgICBDUllQVE9fQUxHX0tFUk5fRFJJVkVSX09OTFkgfAorKwkJCQkgICAgIENSWVBUT19BTEdfTkVFRF9GQUxMQkFDSywKKysJCQkuY3JhX2Jsb2Nrc2l6ZSA9IDEsCisrCQkJLmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBzYWZleGNlbF9jaXBoZXJfY3R4KSwKKysJCQkuY3JhX2FsaWdubWFzayA9IDAsCisrCQkJLmNyYV9pbml0ID0gc2FmZXhjZWxfYWVhZF9jaGFjaGFwb2x5ZXNwX2NyYV9pbml0LAorKwkJCS5jcmFfZXhpdCA9IHNhZmV4Y2VsX2FlYWRfZmFsbGJhY2tfY3JhX2V4aXQsCisrCQkJLmNyYV9tb2R1bGUgPSBUSElTX01PRFVMRSwKKysJCX0sCisrCX0sCisrfTsKKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX3NrY2lwaGVyX3NtNF9zZXRrZXkoc3RydWN0IGNyeXB0b19za2NpcGhlciAqY3RmbSwKKysJCQkJCWNvbnN0IHU4ICprZXksIHVuc2lnbmVkIGludCBsZW4pCisreworKwlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtID0gY3J5cHRvX3NrY2lwaGVyX3RmbShjdGZtKTsKKysJc3RydWN0IHNhZmV4Y2VsX2NpcGhlcl9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisrCXN0cnVjdCBzYWZleGNlbF9jcnlwdG9fcHJpdiAqcHJpdiA9IGN0eC0+cHJpdjsKKysKKysJaWYgKGxlbiAhPSBTTTRfS0VZX1NJWkUpCisrCQlyZXR1cm4gLUVJTlZBTDsKKysKKysJaWYgKHByaXYtPmZsYWdzICYgRUlQMTk3X1RSQ19DQUNIRSAmJiBjdHgtPmJhc2UuY3R4cl9kbWEpCisrCQlpZiAobWVtY21wKGN0eC0+a2V5LCBrZXksIFNNNF9LRVlfU0laRSkpCisrCQkJY3R4LT5iYXNlLm5lZWRzX2ludiA9IHRydWU7CisrCisrCW1lbWNweShjdHgtPmtleSwga2V5LCBTTTRfS0VZX1NJWkUpOworKwljdHgtPmtleV9sZW4gPSBTTTRfS0VZX1NJWkU7CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX3NtNF9ibGtfZW5jcnlwdChzdHJ1Y3Qgc2tjaXBoZXJfcmVxdWVzdCAqcmVxKQorK3sKKysJLyogV29ya2Fyb3VuZCBmb3IgSFcgYnVnOiBFSVA5NiA0LjMgZG9lcyBub3QgcmVwb3J0IGJsb2Nrc2l6ZSBlcnJvciAqLworKwlpZiAocmVxLT5jcnlwdGxlbiAmIChTTTRfQkxPQ0tfU0laRSAtIDEpKQorKwkJcmV0dXJuIC1FSU5WQUw7CisrCWVsc2UKKysJCXJldHVybiBzYWZleGNlbF9xdWV1ZV9yZXEoJnJlcS0+YmFzZSwgc2tjaXBoZXJfcmVxdWVzdF9jdHgocmVxKSwKKysJCQkJCSAgU0FGRVhDRUxfRU5DUllQVCk7CisrfQorKworK3N0YXRpYyBpbnQgc2FmZXhjZWxfc200X2Jsa19kZWNyeXB0KHN0cnVjdCBza2NpcGhlcl9yZXF1ZXN0ICpyZXEpCisreworKwkvKiBXb3JrYXJvdW5kIGZvciBIVyBidWc6IEVJUDk2IDQuMyBkb2VzIG5vdCByZXBvcnQgYmxvY2tzaXplIGVycm9yICovCisrCWlmIChyZXEtPmNyeXB0bGVuICYgKFNNNF9CTE9DS19TSVpFIC0gMSkpCisrCQlyZXR1cm4gLUVJTlZBTDsKKysJZWxzZQorKwkJcmV0dXJuIHNhZmV4Y2VsX3F1ZXVlX3JlcSgmcmVxLT5iYXNlLCBza2NpcGhlcl9yZXF1ZXN0X2N0eChyZXEpLAorKwkJCQkJICBTQUZFWENFTF9ERUNSWVBUKTsKKyt9CisrCisrc3RhdGljIGludCBzYWZleGNlbF9za2NpcGhlcl9zbTRfZWNiX2NyYV9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCisreworKwlzdHJ1Y3Qgc2FmZXhjZWxfY2lwaGVyX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKysKKysJc2FmZXhjZWxfc2tjaXBoZXJfY3JhX2luaXQodGZtKTsKKysJY3R4LT5hbGcgID0gU0FGRVhDRUxfU000OworKwljdHgtPm1vZGUgPSBDT05URVhUX0NPTlRST0xfQ1JZUFRPX01PREVfRUNCOworKwljdHgtPmJsb2Nrc3ogPSAwOworKwljdHgtPml2bWFzayA9IEVJUDE5N19PUFRJT05fMl9UT0tFTl9JVl9DTUQ7CisrCXJldHVybiAwOworK30KKysKKytzdHJ1Y3Qgc2FmZXhjZWxfYWxnX3RlbXBsYXRlIHNhZmV4Y2VsX2FsZ19lY2Jfc200ID0geworKwkudHlwZSA9IFNBRkVYQ0VMX0FMR19UWVBFX1NLQ0lQSEVSLAorKwkuYWxnb19tYXNrID0gU0FGRVhDRUxfQUxHX1NNNCwKKysJLmFsZy5za2NpcGhlciA9IHsKKysJCS5zZXRrZXkgPSBzYWZleGNlbF9za2NpcGhlcl9zbTRfc2V0a2V5LAorKwkJLmVuY3J5cHQgPSBzYWZleGNlbF9zbTRfYmxrX2VuY3J5cHQsCisrCQkuZGVjcnlwdCA9IHNhZmV4Y2VsX3NtNF9ibGtfZGVjcnlwdCwKKysJCS5taW5fa2V5c2l6ZSA9IFNNNF9LRVlfU0laRSwKKysJCS5tYXhfa2V5c2l6ZSA9IFNNNF9LRVlfU0laRSwKKysJCS5iYXNlID0geworKwkJCS5jcmFfbmFtZSA9ICJlY2Ioc200KSIsCisrCQkJLmNyYV9kcml2ZXJfbmFtZSA9ICJzYWZleGNlbC1lY2Itc200IiwKKysJCQkuY3JhX3ByaW9yaXR5ID0gU0FGRVhDRUxfQ1JBX1BSSU9SSVRZLAorKwkJCS5jcmFfZmxhZ3MgPSBDUllQVE9fQUxHX0FTWU5DIHwKKysJCQkJICAgICBDUllQVE9fQUxHX0tFUk5fRFJJVkVSX09OTFksCisrCQkJLmNyYV9ibG9ja3NpemUgPSBTTTRfQkxPQ0tfU0laRSwKKysJCQkuY3JhX2N0eHNpemUgPSBzaXplb2Yoc3RydWN0IHNhZmV4Y2VsX2NpcGhlcl9jdHgpLAorKwkJCS5jcmFfYWxpZ25tYXNrID0gMCwKKysJCQkuY3JhX2luaXQgPSBzYWZleGNlbF9za2NpcGhlcl9zbTRfZWNiX2NyYV9pbml0LAorKwkJCS5jcmFfZXhpdCA9IHNhZmV4Y2VsX3NrY2lwaGVyX2NyYV9leGl0LAorKwkJCS5jcmFfbW9kdWxlID0gVEhJU19NT0RVTEUsCisrCQl9LAorKwl9LAorK307CisrCisrc3RhdGljIGludCBzYWZleGNlbF9za2NpcGhlcl9zbTRfY2JjX2NyYV9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCisreworKwlzdHJ1Y3Qgc2FmZXhjZWxfY2lwaGVyX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKysKKysJc2FmZXhjZWxfc2tjaXBoZXJfY3JhX2luaXQodGZtKTsKKysJY3R4LT5hbGcgID0gU0FGRVhDRUxfU000OworKwljdHgtPmJsb2Nrc3ogPSBTTTRfQkxPQ0tfU0laRTsKKysJY3R4LT5tb2RlID0gQ09OVEVYVF9DT05UUk9MX0NSWVBUT19NT0RFX0NCQzsKKysJcmV0dXJuIDA7CisrfQorKworK3N0cnVjdCBzYWZleGNlbF9hbGdfdGVtcGxhdGUgc2FmZXhjZWxfYWxnX2NiY19zbTQgPSB7CisrCS50eXBlID0gU0FGRVhDRUxfQUxHX1RZUEVfU0tDSVBIRVIsCisrCS5hbGdvX21hc2sgPSBTQUZFWENFTF9BTEdfU000LAorKwkuYWxnLnNrY2lwaGVyID0geworKwkJLnNldGtleSA9IHNhZmV4Y2VsX3NrY2lwaGVyX3NtNF9zZXRrZXksCisrCQkuZW5jcnlwdCA9IHNhZmV4Y2VsX3NtNF9ibGtfZW5jcnlwdCwKKysJCS5kZWNyeXB0ID0gc2FmZXhjZWxfc200X2Jsa19kZWNyeXB0LAorKwkJLm1pbl9rZXlzaXplID0gU000X0tFWV9TSVpFLAorKwkJLm1heF9rZXlzaXplID0gU000X0tFWV9TSVpFLAorKwkJLml2c2l6ZSA9IFNNNF9CTE9DS19TSVpFLAorKwkJLmJhc2UgPSB7CisrCQkJLmNyYV9uYW1lID0gImNiYyhzbTQpIiwKKysJCQkuY3JhX2RyaXZlcl9uYW1lID0gInNhZmV4Y2VsLWNiYy1zbTQiLAorKwkJCS5jcmFfcHJpb3JpdHkgPSBTQUZFWENFTF9DUkFfUFJJT1JJVFksCisrCQkJLmNyYV9mbGFncyA9IENSWVBUT19BTEdfQVNZTkMgfAorKwkJCQkgICAgIENSWVBUT19BTEdfS0VSTl9EUklWRVJfT05MWSwKKysJCQkuY3JhX2Jsb2Nrc2l6ZSA9IFNNNF9CTE9DS19TSVpFLAorKwkJCS5jcmFfY3R4c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2FmZXhjZWxfY2lwaGVyX2N0eCksCisrCQkJLmNyYV9hbGlnbm1hc2sgPSAwLAorKwkJCS5jcmFfaW5pdCA9IHNhZmV4Y2VsX3NrY2lwaGVyX3NtNF9jYmNfY3JhX2luaXQsCisrCQkJLmNyYV9leGl0ID0gc2FmZXhjZWxfc2tjaXBoZXJfY3JhX2V4aXQsCisrCQkJLmNyYV9tb2R1bGUgPSBUSElTX01PRFVMRSwKKysJCX0sCisrCX0sCisrfTsKKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX3NrY2lwaGVyX3NtNF9vZmJfY3JhX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKKyt7CisrCXN0cnVjdCBzYWZleGNlbF9jaXBoZXJfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworKworKwlzYWZleGNlbF9za2NpcGhlcl9jcmFfaW5pdCh0Zm0pOworKwljdHgtPmFsZyAgPSBTQUZFWENFTF9TTTQ7CisrCWN0eC0+YmxvY2tzeiA9IFNNNF9CTE9DS19TSVpFOworKwljdHgtPm1vZGUgPSBDT05URVhUX0NPTlRST0xfQ1JZUFRPX01PREVfT0ZCOworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RydWN0IHNhZmV4Y2VsX2FsZ190ZW1wbGF0ZSBzYWZleGNlbF9hbGdfb2ZiX3NtNCA9IHsKKysJLnR5cGUgPSBTQUZFWENFTF9BTEdfVFlQRV9TS0NJUEhFUiwKKysJLmFsZ29fbWFzayA9IFNBRkVYQ0VMX0FMR19TTTQgfCBTQUZFWENFTF9BTEdfQUVTX1hGQiwKKysJLmFsZy5za2NpcGhlciA9IHsKKysJCS5zZXRrZXkgPSBzYWZleGNlbF9za2NpcGhlcl9zbTRfc2V0a2V5LAorKwkJLmVuY3J5cHQgPSBzYWZleGNlbF9lbmNyeXB0LAorKwkJLmRlY3J5cHQgPSBzYWZleGNlbF9kZWNyeXB0LAorKwkJLm1pbl9rZXlzaXplID0gU000X0tFWV9TSVpFLAorKwkJLm1heF9rZXlzaXplID0gU000X0tFWV9TSVpFLAorKwkJLml2c2l6ZSA9IFNNNF9CTE9DS19TSVpFLAorKwkJLmJhc2UgPSB7CisrCQkJLmNyYV9uYW1lID0gIm9mYihzbTQpIiwKKysJCQkuY3JhX2RyaXZlcl9uYW1lID0gInNhZmV4Y2VsLW9mYi1zbTQiLAorKwkJCS5jcmFfcHJpb3JpdHkgPSBTQUZFWENFTF9DUkFfUFJJT1JJVFksCisrCQkJLmNyYV9mbGFncyA9IENSWVBUT19BTEdfQVNZTkMgfAorKwkJCQkgICAgIENSWVBUT19BTEdfS0VSTl9EUklWRVJfT05MWSwKKysJCQkuY3JhX2Jsb2Nrc2l6ZSA9IDEsCisrCQkJLmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBzYWZleGNlbF9jaXBoZXJfY3R4KSwKKysJCQkuY3JhX2FsaWdubWFzayA9IDAsCisrCQkJLmNyYV9pbml0ID0gc2FmZXhjZWxfc2tjaXBoZXJfc200X29mYl9jcmFfaW5pdCwKKysJCQkuY3JhX2V4aXQgPSBzYWZleGNlbF9za2NpcGhlcl9jcmFfZXhpdCwKKysJCQkuY3JhX21vZHVsZSA9IFRISVNfTU9EVUxFLAorKwkJfSwKKysJfSwKKyt9OworKworK3N0YXRpYyBpbnQgc2FmZXhjZWxfc2tjaXBoZXJfc200X2NmYl9jcmFfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQorK3sKKysJc3RydWN0IHNhZmV4Y2VsX2NpcGhlcl9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisrCisrCXNhZmV4Y2VsX3NrY2lwaGVyX2NyYV9pbml0KHRmbSk7CisrCWN0eC0+YWxnICA9IFNBRkVYQ0VMX1NNNDsKKysJY3R4LT5ibG9ja3N6ID0gU000X0JMT0NLX1NJWkU7CisrCWN0eC0+bW9kZSA9IENPTlRFWFRfQ09OVFJPTF9DUllQVE9fTU9ERV9DRkI7CisrCXJldHVybiAwOworK30KKysKKytzdHJ1Y3Qgc2FmZXhjZWxfYWxnX3RlbXBsYXRlIHNhZmV4Y2VsX2FsZ19jZmJfc200ID0geworKwkudHlwZSA9IFNBRkVYQ0VMX0FMR19UWVBFX1NLQ0lQSEVSLAorKwkuYWxnb19tYXNrID0gU0FGRVhDRUxfQUxHX1NNNCB8IFNBRkVYQ0VMX0FMR19BRVNfWEZCLAorKwkuYWxnLnNrY2lwaGVyID0geworKwkJLnNldGtleSA9IHNhZmV4Y2VsX3NrY2lwaGVyX3NtNF9zZXRrZXksCisrCQkuZW5jcnlwdCA9IHNhZmV4Y2VsX2VuY3J5cHQsCisrCQkuZGVjcnlwdCA9IHNhZmV4Y2VsX2RlY3J5cHQsCisrCQkubWluX2tleXNpemUgPSBTTTRfS0VZX1NJWkUsCisrCQkubWF4X2tleXNpemUgPSBTTTRfS0VZX1NJWkUsCisrCQkuaXZzaXplID0gU000X0JMT0NLX1NJWkUsCisrCQkuYmFzZSA9IHsKKysJCQkuY3JhX25hbWUgPSAiY2ZiKHNtNCkiLAorKwkJCS5jcmFfZHJpdmVyX25hbWUgPSAic2FmZXhjZWwtY2ZiLXNtNCIsCisrCQkJLmNyYV9wcmlvcml0eSA9IFNBRkVYQ0VMX0NSQV9QUklPUklUWSwKKysJCQkuY3JhX2ZsYWdzID0gQ1JZUFRPX0FMR19BU1lOQyB8CisrCQkJCSAgICAgQ1JZUFRPX0FMR19LRVJOX0RSSVZFUl9PTkxZLAorKwkJCS5jcmFfYmxvY2tzaXplID0gMSwKKysJCQkuY3JhX2N0eHNpemUgPSBzaXplb2Yoc3RydWN0IHNhZmV4Y2VsX2NpcGhlcl9jdHgpLAorKwkJCS5jcmFfYWxpZ25tYXNrID0gMCwKKysJCQkuY3JhX2luaXQgPSBzYWZleGNlbF9za2NpcGhlcl9zbTRfY2ZiX2NyYV9pbml0LAorKwkJCS5jcmFfZXhpdCA9IHNhZmV4Y2VsX3NrY2lwaGVyX2NyYV9leGl0LAorKwkJCS5jcmFfbW9kdWxlID0gVEhJU19NT0RVTEUsCisrCQl9LAorKwl9LAorK307CisrCisrc3RhdGljIGludCBzYWZleGNlbF9za2NpcGhlcl9zbTRjdHJfc2V0a2V5KHN0cnVjdCBjcnlwdG9fc2tjaXBoZXIgKmN0Zm0sCisrCQkJCQkgICBjb25zdCB1OCAqa2V5LCB1bnNpZ25lZCBpbnQgbGVuKQorK3sKKysJc3RydWN0IGNyeXB0b190Zm0gKnRmbSA9IGNyeXB0b19za2NpcGhlcl90Zm0oY3RmbSk7CisrCXN0cnVjdCBzYWZleGNlbF9jaXBoZXJfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworKworKwkvKiBsYXN0IDQgYnl0ZXMgb2Yga2V5IGFyZSB0aGUgbm9uY2UhICovCisrCWN0eC0+bm9uY2UgPSAqKHUzMiAqKShrZXkgKyBsZW4gLSBDVFJfUkZDMzY4Nl9OT05DRV9TSVpFKTsKKysJLyogZXhjbHVkZSB0aGUgbm9uY2UgaGVyZSAqLworKwlsZW4gLT0gQ1RSX1JGQzM2ODZfTk9OQ0VfU0laRTsKKysKKysJcmV0dXJuIHNhZmV4Y2VsX3NrY2lwaGVyX3NtNF9zZXRrZXkoY3RmbSwga2V5LCBsZW4pOworK30KKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX3NrY2lwaGVyX3NtNF9jdHJfY3JhX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKKyt7CisrCXN0cnVjdCBzYWZleGNlbF9jaXBoZXJfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworKworKwlzYWZleGNlbF9za2NpcGhlcl9jcmFfaW5pdCh0Zm0pOworKwljdHgtPmFsZyAgPSBTQUZFWENFTF9TTTQ7CisrCWN0eC0+YmxvY2tzeiA9IFNNNF9CTE9DS19TSVpFOworKwljdHgtPm1vZGUgPSBDT05URVhUX0NPTlRST0xfQ1JZUFRPX01PREVfQ1RSX0xPQUQ7CisrCXJldHVybiAwOworK30KKysKKytzdHJ1Y3Qgc2FmZXhjZWxfYWxnX3RlbXBsYXRlIHNhZmV4Y2VsX2FsZ19jdHJfc200ID0geworKwkudHlwZSA9IFNBRkVYQ0VMX0FMR19UWVBFX1NLQ0lQSEVSLAorKwkuYWxnb19tYXNrID0gU0FGRVhDRUxfQUxHX1NNNCwKKysJLmFsZy5za2NpcGhlciA9IHsKKysJCS5zZXRrZXkgPSBzYWZleGNlbF9za2NpcGhlcl9zbTRjdHJfc2V0a2V5LAorKwkJLmVuY3J5cHQgPSBzYWZleGNlbF9lbmNyeXB0LAorKwkJLmRlY3J5cHQgPSBzYWZleGNlbF9kZWNyeXB0LAorKwkJLyogQWRkIG5vbmNlIHNpemUgKi8KKysJCS5taW5fa2V5c2l6ZSA9IFNNNF9LRVlfU0laRSArIENUUl9SRkMzNjg2X05PTkNFX1NJWkUsCisrCQkubWF4X2tleXNpemUgPSBTTTRfS0VZX1NJWkUgKyBDVFJfUkZDMzY4Nl9OT05DRV9TSVpFLAorKwkJLml2c2l6ZSA9IENUUl9SRkMzNjg2X0lWX1NJWkUsCisrCQkuYmFzZSA9IHsKKysJCQkuY3JhX25hbWUgPSAicmZjMzY4NihjdHIoc200KSkiLAorKwkJCS5jcmFfZHJpdmVyX25hbWUgPSAic2FmZXhjZWwtY3RyLXNtNCIsCisrCQkJLmNyYV9wcmlvcml0eSA9IFNBRkVYQ0VMX0NSQV9QUklPUklUWSwKKysJCQkuY3JhX2ZsYWdzID0gQ1JZUFRPX0FMR19BU1lOQyB8CisrCQkJCSAgICAgQ1JZUFRPX0FMR19LRVJOX0RSSVZFUl9PTkxZLAorKwkJCS5jcmFfYmxvY2tzaXplID0gMSwKKysJCQkuY3JhX2N0eHNpemUgPSBzaXplb2Yoc3RydWN0IHNhZmV4Y2VsX2NpcGhlcl9jdHgpLAorKwkJCS5jcmFfYWxpZ25tYXNrID0gMCwKKysJCQkuY3JhX2luaXQgPSBzYWZleGNlbF9za2NpcGhlcl9zbTRfY3RyX2NyYV9pbml0LAorKwkJCS5jcmFfZXhpdCA9IHNhZmV4Y2VsX3NrY2lwaGVyX2NyYV9leGl0LAorKwkJCS5jcmFfbW9kdWxlID0gVEhJU19NT0RVTEUsCisrCQl9LAorKwl9LAorK307CisrCisrc3RhdGljIGludCBzYWZleGNlbF9hZWFkX3NtNF9ibGtfZW5jcnlwdChzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEpCisreworKwkvKiBXb3JrYXJvdW5kIGZvciBIVyBidWc6IEVJUDk2IDQuMyBkb2VzIG5vdCByZXBvcnQgYmxvY2tzaXplIGVycm9yICovCisrCWlmIChyZXEtPmNyeXB0bGVuICYgKFNNNF9CTE9DS19TSVpFIC0gMSkpCisrCQlyZXR1cm4gLUVJTlZBTDsKKysKKysJcmV0dXJuIHNhZmV4Y2VsX3F1ZXVlX3JlcSgmcmVxLT5iYXNlLCBhZWFkX3JlcXVlc3RfY3R4KHJlcSksCisrCQkJCSAgU0FGRVhDRUxfRU5DUllQVCk7CisrfQorKworK3N0YXRpYyBpbnQgc2FmZXhjZWxfYWVhZF9zbTRfYmxrX2RlY3J5cHQoc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxKQorK3sKKysJc3RydWN0IGNyeXB0b19hZWFkICp0Zm0gPSBjcnlwdG9fYWVhZF9yZXF0Zm0ocmVxKTsKKysKKysJLyogV29ya2Fyb3VuZCBmb3IgSFcgYnVnOiBFSVA5NiA0LjMgZG9lcyBub3QgcmVwb3J0IGJsb2Nrc2l6ZSBlcnJvciAqLworKwlpZiAoKHJlcS0+Y3J5cHRsZW4gLSBjcnlwdG9fYWVhZF9hdXRoc2l6ZSh0Zm0pKSAmIChTTTRfQkxPQ0tfU0laRSAtIDEpKQorKwkJcmV0dXJuIC1FSU5WQUw7CisrCisrCXJldHVybiBzYWZleGNlbF9xdWV1ZV9yZXEoJnJlcS0+YmFzZSwgYWVhZF9yZXF1ZXN0X2N0eChyZXEpLAorKwkJCQkgIFNBRkVYQ0VMX0RFQ1JZUFQpOworK30KKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX2FlYWRfc200Y2JjX3NoYTFfY3JhX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKKyt7CisrCXN0cnVjdCBzYWZleGNlbF9jaXBoZXJfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworKworKwlzYWZleGNlbF9hZWFkX2NyYV9pbml0KHRmbSk7CisrCWN0eC0+YWxnID0gU0FGRVhDRUxfU000OworKwljdHgtPmJsb2Nrc3ogPSBTTTRfQkxPQ0tfU0laRTsKKysJY3R4LT5oYXNoX2FsZyA9IENPTlRFWFRfQ09OVFJPTF9DUllQVE9fQUxHX1NIQTE7CisrCWN0eC0+c3RhdGVfc3ogPSBTSEExX0RJR0VTVF9TSVpFOworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RydWN0IHNhZmV4Y2VsX2FsZ190ZW1wbGF0ZSBzYWZleGNlbF9hbGdfYXV0aGVuY19obWFjX3NoYTFfY2JjX3NtNCA9IHsKKysJLnR5cGUgPSBTQUZFWENFTF9BTEdfVFlQRV9BRUFELAorKwkuYWxnb19tYXNrID0gU0FGRVhDRUxfQUxHX1NNNCB8IFNBRkVYQ0VMX0FMR19TSEExLAorKwkuYWxnLmFlYWQgPSB7CisrCQkuc2V0a2V5ID0gc2FmZXhjZWxfYWVhZF9zZXRrZXksCisrCQkuZW5jcnlwdCA9IHNhZmV4Y2VsX2FlYWRfc200X2Jsa19lbmNyeXB0LAorKwkJLmRlY3J5cHQgPSBzYWZleGNlbF9hZWFkX3NtNF9ibGtfZGVjcnlwdCwKKysJCS5pdnNpemUgPSBTTTRfQkxPQ0tfU0laRSwKKysJCS5tYXhhdXRoc2l6ZSA9IFNIQTFfRElHRVNUX1NJWkUsCisrCQkuYmFzZSA9IHsKKysJCQkuY3JhX25hbWUgPSAiYXV0aGVuYyhobWFjKHNoYTEpLGNiYyhzbTQpKSIsCisrCQkJLmNyYV9kcml2ZXJfbmFtZSA9ICJzYWZleGNlbC1hdXRoZW5jLWhtYWMtc2hhMS1jYmMtc200IiwKKysJCQkuY3JhX3ByaW9yaXR5ID0gU0FGRVhDRUxfQ1JBX1BSSU9SSVRZLAorKwkJCS5jcmFfZmxhZ3MgPSBDUllQVE9fQUxHX0FTWU5DIHwKKysJCQkJICAgICBDUllQVE9fQUxHX0tFUk5fRFJJVkVSX09OTFksCisrCQkJLmNyYV9ibG9ja3NpemUgPSBTTTRfQkxPQ0tfU0laRSwKKysJCQkuY3JhX2N0eHNpemUgPSBzaXplb2Yoc3RydWN0IHNhZmV4Y2VsX2NpcGhlcl9jdHgpLAorKwkJCS5jcmFfYWxpZ25tYXNrID0gMCwKKysJCQkuY3JhX2luaXQgPSBzYWZleGNlbF9hZWFkX3NtNGNiY19zaGExX2NyYV9pbml0LAorKwkJCS5jcmFfZXhpdCA9IHNhZmV4Y2VsX2FlYWRfY3JhX2V4aXQsCisrCQkJLmNyYV9tb2R1bGUgPSBUSElTX01PRFVMRSwKKysJCX0sCisrCX0sCisrfTsKKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX2FlYWRfZmFsbGJhY2tfc2V0a2V5KHN0cnVjdCBjcnlwdG9fYWVhZCAqY3RmbSwKKysJCQkJCSBjb25zdCB1OCAqa2V5LCB1bnNpZ25lZCBpbnQgbGVuKQorK3sKKysJc3RydWN0IGNyeXB0b190Zm0gKnRmbSA9IGNyeXB0b19hZWFkX3RmbShjdGZtKTsKKysJc3RydWN0IHNhZmV4Y2VsX2NpcGhlcl9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisrCisrCS8qIEtlZXAgZmFsbGJhY2sgY2lwaGVyIHN5bmNocm9uaXplZCAqLworKwlyZXR1cm4gY3J5cHRvX2FlYWRfc2V0a2V5KGN0eC0+ZmJhY2ssICh1OCAqKWtleSwgbGVuKSA/OgorKwkgICAgICAgc2FmZXhjZWxfYWVhZF9zZXRrZXkoY3RmbSwga2V5LCBsZW4pOworK30KKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX2FlYWRfZmFsbGJhY2tfc2V0YXV0aHNpemUoc3RydWN0IGNyeXB0b19hZWFkICpjdGZtLAorKwkJCQkJICAgICAgdW5zaWduZWQgaW50IGF1dGhzaXplKQorK3sKKysJc3RydWN0IGNyeXB0b190Zm0gKnRmbSA9IGNyeXB0b19hZWFkX3RmbShjdGZtKTsKKysJc3RydWN0IHNhZmV4Y2VsX2NpcGhlcl9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisrCisrCS8qIEtlZXAgZmFsbGJhY2sgY2lwaGVyIHN5bmNocm9uaXplZCAqLworKwlyZXR1cm4gY3J5cHRvX2FlYWRfc2V0YXV0aHNpemUoY3R4LT5mYmFjaywgYXV0aHNpemUpOworK30KKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX2FlYWRfZmFsbGJhY2tfY3J5cHQoc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxLAorKwkJCQkJZW51bSBzYWZleGNlbF9jaXBoZXJfZGlyZWN0aW9uIGRpcikKKyt7CisrCXN0cnVjdCBjcnlwdG9fYWVhZCAqYWVhZCA9IGNyeXB0b19hZWFkX3JlcXRmbShyZXEpOworKwlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtID0gY3J5cHRvX2FlYWRfdGZtKGFlYWQpOworKwlzdHJ1Y3Qgc2FmZXhjZWxfY2lwaGVyX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKysJc3RydWN0IGFlYWRfcmVxdWVzdCAqc3VicmVxID0gYWVhZF9yZXF1ZXN0X2N0eChyZXEpOworKworKwlhZWFkX3JlcXVlc3Rfc2V0X3RmbShzdWJyZXEsIGN0eC0+ZmJhY2spOworKwlhZWFkX3JlcXVlc3Rfc2V0X2NhbGxiYWNrKHN1YnJlcSwgcmVxLT5iYXNlLmZsYWdzLCByZXEtPmJhc2UuY29tcGxldGUsCisrCQkJCSAgcmVxLT5iYXNlLmRhdGEpOworKwlhZWFkX3JlcXVlc3Rfc2V0X2NyeXB0KHN1YnJlcSwgcmVxLT5zcmMsIHJlcS0+ZHN0LCByZXEtPmNyeXB0bGVuLAorKwkJCSAgICAgICByZXEtPml2KTsKKysJYWVhZF9yZXF1ZXN0X3NldF9hZChzdWJyZXEsIHJlcS0+YXNzb2NsZW4pOworKworKwlyZXR1cm4gKGRpciA9PSAgU0FGRVhDRUxfRU5DUllQVCkgPworKwkJY3J5cHRvX2FlYWRfZW5jcnlwdChzdWJyZXEpIDoKKysJCWNyeXB0b19hZWFkX2RlY3J5cHQoc3VicmVxKTsKKyt9CisrCisrc3RhdGljIGludCBzYWZleGNlbF9hZWFkX3NtNGNiY19zbTNfZW5jcnlwdChzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEpCisreworKwlzdHJ1Y3Qgc2FmZXhjZWxfY2lwaGVyX3JlcSAqY3JlcSA9IGFlYWRfcmVxdWVzdF9jdHgocmVxKTsKKysKKysJLyogV29ya2Fyb3VuZCBmb3IgSFcgYnVnOiBFSVA5NiA0LjMgZG9lcyBub3QgcmVwb3J0IGJsb2Nrc2l6ZSBlcnJvciAqLworKwlpZiAocmVxLT5jcnlwdGxlbiAmIChTTTRfQkxPQ0tfU0laRSAtIDEpKQorKwkJcmV0dXJuIC1FSU5WQUw7CisrCWVsc2UgaWYgKHJlcS0+Y3J5cHRsZW4gfHwgcmVxLT5hc3NvY2xlbikgLyogSWYgaW5wdXQgbGVuZ3RoID4gMCBvbmx5ICovCisrCQlyZXR1cm4gc2FmZXhjZWxfcXVldWVfcmVxKCZyZXEtPmJhc2UsIGNyZXEsIFNBRkVYQ0VMX0VOQ1JZUFQpOworKworKwkvKiBIVyBjYW5ub3QgZG8gZnVsbCAoQUFEK3BheWxvYWQpIHplcm8gbGVuZ3RoLCB1c2UgZmFsbGJhY2sgKi8KKysJcmV0dXJuIHNhZmV4Y2VsX2FlYWRfZmFsbGJhY2tfY3J5cHQocmVxLCBTQUZFWENFTF9FTkNSWVBUKTsKKyt9CisrCisrc3RhdGljIGludCBzYWZleGNlbF9hZWFkX3NtNGNiY19zbTNfZGVjcnlwdChzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICpyZXEpCisreworKwlzdHJ1Y3Qgc2FmZXhjZWxfY2lwaGVyX3JlcSAqY3JlcSA9IGFlYWRfcmVxdWVzdF9jdHgocmVxKTsKKysJc3RydWN0IGNyeXB0b19hZWFkICp0Zm0gPSBjcnlwdG9fYWVhZF9yZXF0Zm0ocmVxKTsKKysKKysJLyogV29ya2Fyb3VuZCBmb3IgSFcgYnVnOiBFSVA5NiA0LjMgZG9lcyBub3QgcmVwb3J0IGJsb2Nrc2l6ZSBlcnJvciAqLworKwlpZiAoKHJlcS0+Y3J5cHRsZW4gLSBjcnlwdG9fYWVhZF9hdXRoc2l6ZSh0Zm0pKSAmIChTTTRfQkxPQ0tfU0laRSAtIDEpKQorKwkJcmV0dXJuIC1FSU5WQUw7CisrCWVsc2UgaWYgKHJlcS0+Y3J5cHRsZW4gPiBjcnlwdG9fYWVhZF9hdXRoc2l6ZSh0Zm0pIHx8IHJlcS0+YXNzb2NsZW4pCisrCQkvKiBJZiBpbnB1dCBsZW5ndGggPiAwIG9ubHkgKi8KKysJCXJldHVybiBzYWZleGNlbF9xdWV1ZV9yZXEoJnJlcS0+YmFzZSwgY3JlcSwgU0FGRVhDRUxfREVDUllQVCk7CisrCisrCS8qIEhXIGNhbm5vdCBkbyBmdWxsIChBQUQrcGF5bG9hZCkgemVybyBsZW5ndGgsIHVzZSBmYWxsYmFjayAqLworKwlyZXR1cm4gc2FmZXhjZWxfYWVhZF9mYWxsYmFja19jcnlwdChyZXEsIFNBRkVYQ0VMX0RFQ1JZUFQpOworK30KKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX2FlYWRfc200Y2JjX3NtM19jcmFfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQorK3sKKysJc3RydWN0IHNhZmV4Y2VsX2NpcGhlcl9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisrCisrCXNhZmV4Y2VsX2FlYWRfZmFsbGJhY2tfY3JhX2luaXQodGZtKTsKKysJY3R4LT5hbGcgPSBTQUZFWENFTF9TTTQ7CisrCWN0eC0+YmxvY2tzeiA9IFNNNF9CTE9DS19TSVpFOworKwljdHgtPmhhc2hfYWxnID0gQ09OVEVYVF9DT05UUk9MX0NSWVBUT19BTEdfU00zOworKwljdHgtPnN0YXRlX3N6ID0gU00zX0RJR0VTVF9TSVpFOworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RydWN0IHNhZmV4Y2VsX2FsZ190ZW1wbGF0ZSBzYWZleGNlbF9hbGdfYXV0aGVuY19obWFjX3NtM19jYmNfc200ID0geworKwkudHlwZSA9IFNBRkVYQ0VMX0FMR19UWVBFX0FFQUQsCisrCS5hbGdvX21hc2sgPSBTQUZFWENFTF9BTEdfU000IHwgU0FGRVhDRUxfQUxHX1NNMywKKysJLmFsZy5hZWFkID0geworKwkJLnNldGtleSA9IHNhZmV4Y2VsX2FlYWRfZmFsbGJhY2tfc2V0a2V5LAorKwkJLnNldGF1dGhzaXplID0gc2FmZXhjZWxfYWVhZF9mYWxsYmFja19zZXRhdXRoc2l6ZSwKKysJCS5lbmNyeXB0ID0gc2FmZXhjZWxfYWVhZF9zbTRjYmNfc20zX2VuY3J5cHQsCisrCQkuZGVjcnlwdCA9IHNhZmV4Y2VsX2FlYWRfc200Y2JjX3NtM19kZWNyeXB0LAorKwkJLml2c2l6ZSA9IFNNNF9CTE9DS19TSVpFLAorKwkJLm1heGF1dGhzaXplID0gU00zX0RJR0VTVF9TSVpFLAorKwkJLmJhc2UgPSB7CisrCQkJLmNyYV9uYW1lID0gImF1dGhlbmMoaG1hYyhzbTMpLGNiYyhzbTQpKSIsCisrCQkJLmNyYV9kcml2ZXJfbmFtZSA9ICJzYWZleGNlbC1hdXRoZW5jLWhtYWMtc20zLWNiYy1zbTQiLAorKwkJCS5jcmFfcHJpb3JpdHkgPSBTQUZFWENFTF9DUkFfUFJJT1JJVFksCisrCQkJLmNyYV9mbGFncyA9IENSWVBUT19BTEdfQVNZTkMgfAorKwkJCQkgICAgIENSWVBUT19BTEdfS0VSTl9EUklWRVJfT05MWSB8CisrCQkJCSAgICAgQ1JZUFRPX0FMR19ORUVEX0ZBTExCQUNLLAorKwkJCS5jcmFfYmxvY2tzaXplID0gU000X0JMT0NLX1NJWkUsCisrCQkJLmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBzYWZleGNlbF9jaXBoZXJfY3R4KSwKKysJCQkuY3JhX2FsaWdubWFzayA9IDAsCisrCQkJLmNyYV9pbml0ID0gc2FmZXhjZWxfYWVhZF9zbTRjYmNfc20zX2NyYV9pbml0LAorKwkJCS5jcmFfZXhpdCA9IHNhZmV4Y2VsX2FlYWRfZmFsbGJhY2tfY3JhX2V4aXQsCisrCQkJLmNyYV9tb2R1bGUgPSBUSElTX01PRFVMRSwKKysJCX0sCisrCX0sCisrfTsKKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX2FlYWRfc200Y3RyX3NoYTFfY3JhX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKKyt7CisrCXN0cnVjdCBzYWZleGNlbF9jaXBoZXJfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworKworKwlzYWZleGNlbF9hZWFkX3NtNGNiY19zaGExX2NyYV9pbml0KHRmbSk7CisrCWN0eC0+bW9kZSA9IENPTlRFWFRfQ09OVFJPTF9DUllQVE9fTU9ERV9DVFJfTE9BRDsKKysJcmV0dXJuIDA7CisrfQorKworK3N0cnVjdCBzYWZleGNlbF9hbGdfdGVtcGxhdGUgc2FmZXhjZWxfYWxnX2F1dGhlbmNfaG1hY19zaGExX2N0cl9zbTQgPSB7CisrCS50eXBlID0gU0FGRVhDRUxfQUxHX1RZUEVfQUVBRCwKKysJLmFsZ29fbWFzayA9IFNBRkVYQ0VMX0FMR19TTTQgfCBTQUZFWENFTF9BTEdfU0hBMSwKKysJLmFsZy5hZWFkID0geworKwkJLnNldGtleSA9IHNhZmV4Y2VsX2FlYWRfc2V0a2V5LAorKwkJLmVuY3J5cHQgPSBzYWZleGNlbF9hZWFkX2VuY3J5cHQsCisrCQkuZGVjcnlwdCA9IHNhZmV4Y2VsX2FlYWRfZGVjcnlwdCwKKysJCS5pdnNpemUgPSBDVFJfUkZDMzY4Nl9JVl9TSVpFLAorKwkJLm1heGF1dGhzaXplID0gU0hBMV9ESUdFU1RfU0laRSwKKysJCS5iYXNlID0geworKwkJCS5jcmFfbmFtZSA9ICJhdXRoZW5jKGhtYWMoc2hhMSkscmZjMzY4NihjdHIoc200KSkpIiwKKysJCQkuY3JhX2RyaXZlcl9uYW1lID0gInNhZmV4Y2VsLWF1dGhlbmMtaG1hYy1zaGExLWN0ci1zbTQiLAorKwkJCS5jcmFfcHJpb3JpdHkgPSBTQUZFWENFTF9DUkFfUFJJT1JJVFksCisrCQkJLmNyYV9mbGFncyA9IENSWVBUT19BTEdfQVNZTkMgfAorKwkJCQkgICAgIENSWVBUT19BTEdfS0VSTl9EUklWRVJfT05MWSwKKysJCQkuY3JhX2Jsb2Nrc2l6ZSA9IDEsCisrCQkJLmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBzYWZleGNlbF9jaXBoZXJfY3R4KSwKKysJCQkuY3JhX2FsaWdubWFzayA9IDAsCisrCQkJLmNyYV9pbml0ID0gc2FmZXhjZWxfYWVhZF9zbTRjdHJfc2hhMV9jcmFfaW5pdCwKKysJCQkuY3JhX2V4aXQgPSBzYWZleGNlbF9hZWFkX2NyYV9leGl0LAorKwkJCS5jcmFfbW9kdWxlID0gVEhJU19NT0RVTEUsCisrCQl9LAorKwl9LAorK307CisrCisrc3RhdGljIGludCBzYWZleGNlbF9hZWFkX3NtNGN0cl9zbTNfY3JhX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKKyt7CisrCXN0cnVjdCBzYWZleGNlbF9jaXBoZXJfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworKworKwlzYWZleGNlbF9hZWFkX3NtNGNiY19zbTNfY3JhX2luaXQodGZtKTsKKysJY3R4LT5tb2RlID0gQ09OVEVYVF9DT05UUk9MX0NSWVBUT19NT0RFX0NUUl9MT0FEOworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RydWN0IHNhZmV4Y2VsX2FsZ190ZW1wbGF0ZSBzYWZleGNlbF9hbGdfYXV0aGVuY19obWFjX3NtM19jdHJfc200ID0geworKwkudHlwZSA9IFNBRkVYQ0VMX0FMR19UWVBFX0FFQUQsCisrCS5hbGdvX21hc2sgPSBTQUZFWENFTF9BTEdfU000IHwgU0FGRVhDRUxfQUxHX1NNMywKKysJLmFsZy5hZWFkID0geworKwkJLnNldGtleSA9IHNhZmV4Y2VsX2FlYWRfc2V0a2V5LAorKwkJLmVuY3J5cHQgPSBzYWZleGNlbF9hZWFkX2VuY3J5cHQsCisrCQkuZGVjcnlwdCA9IHNhZmV4Y2VsX2FlYWRfZGVjcnlwdCwKKysJCS5pdnNpemUgPSBDVFJfUkZDMzY4Nl9JVl9TSVpFLAorKwkJLm1heGF1dGhzaXplID0gU00zX0RJR0VTVF9TSVpFLAorKwkJLmJhc2UgPSB7CisrCQkJLmNyYV9uYW1lID0gImF1dGhlbmMoaG1hYyhzbTMpLHJmYzM2ODYoY3RyKHNtNCkpKSIsCisrCQkJLmNyYV9kcml2ZXJfbmFtZSA9ICJzYWZleGNlbC1hdXRoZW5jLWhtYWMtc20zLWN0ci1zbTQiLAorKwkJCS5jcmFfcHJpb3JpdHkgPSBTQUZFWENFTF9DUkFfUFJJT1JJVFksCisrCQkJLmNyYV9mbGFncyA9IENSWVBUT19BTEdfQVNZTkMgfAorKwkJCQkgICAgIENSWVBUT19BTEdfS0VSTl9EUklWRVJfT05MWSwKKysJCQkuY3JhX2Jsb2Nrc2l6ZSA9IDEsCisrCQkJLmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBzYWZleGNlbF9jaXBoZXJfY3R4KSwKKysJCQkuY3JhX2FsaWdubWFzayA9IDAsCisrCQkJLmNyYV9pbml0ID0gc2FmZXhjZWxfYWVhZF9zbTRjdHJfc20zX2NyYV9pbml0LAorKwkJCS5jcmFfZXhpdCA9IHNhZmV4Y2VsX2FlYWRfY3JhX2V4aXQsCisrCQkJLmNyYV9tb2R1bGUgPSBUSElTX01PRFVMRSwKKysJCX0sCisrCX0sCisrfTsKKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX3JmYzQxMDZfZ2NtX3NldGtleShzdHJ1Y3QgY3J5cHRvX2FlYWQgKmN0Zm0sIGNvbnN0IHU4ICprZXksCisrCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbGVuKQorK3sKKysJc3RydWN0IGNyeXB0b190Zm0gKnRmbSA9IGNyeXB0b19hZWFkX3RmbShjdGZtKTsKKysJc3RydWN0IHNhZmV4Y2VsX2NpcGhlcl9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisrCisrCS8qIGxhc3QgNCBieXRlcyBvZiBrZXkgYXJlIHRoZSBub25jZSEgKi8KKysJY3R4LT5ub25jZSA9ICoodTMyICopKGtleSArIGxlbiAtIENUUl9SRkMzNjg2X05PTkNFX1NJWkUpOworKworKwlsZW4gLT0gQ1RSX1JGQzM2ODZfTk9OQ0VfU0laRTsKKysJcmV0dXJuIHNhZmV4Y2VsX2FlYWRfZ2NtX3NldGtleShjdGZtLCBrZXksIGxlbik7CisrfQorKworK3N0YXRpYyBpbnQgc2FmZXhjZWxfcmZjNDEwNl9nY21fc2V0YXV0aHNpemUoc3RydWN0IGNyeXB0b19hZWFkICp0Zm0sCisrCQkJCQkgICAgdW5zaWduZWQgaW50IGF1dGhzaXplKQorK3sKKysJcmV0dXJuIGNyeXB0b19yZmM0MTA2X2NoZWNrX2F1dGhzaXplKGF1dGhzaXplKTsKKyt9CisrCisrc3RhdGljIGludCBzYWZleGNlbF9yZmM0MTA2X2VuY3J5cHQoc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxKQorK3sKKysJcmV0dXJuIGNyeXB0b19pcHNlY19jaGVja19hc3NvY2xlbihyZXEtPmFzc29jbGVuKSA/OgorKwkgICAgICAgc2FmZXhjZWxfYWVhZF9lbmNyeXB0KHJlcSk7CisrfQorKworK3N0YXRpYyBpbnQgc2FmZXhjZWxfcmZjNDEwNl9kZWNyeXB0KHN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSkKKyt7CisrCXJldHVybiBjcnlwdG9faXBzZWNfY2hlY2tfYXNzb2NsZW4ocmVxLT5hc3NvY2xlbikgPzoKKysJICAgICAgIHNhZmV4Y2VsX2FlYWRfZGVjcnlwdChyZXEpOworK30KKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX3JmYzQxMDZfZ2NtX2NyYV9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCisreworKwlzdHJ1Y3Qgc2FmZXhjZWxfY2lwaGVyX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKysJaW50IHJldDsKKysKKysJcmV0ID0gc2FmZXhjZWxfYWVhZF9nY21fY3JhX2luaXQodGZtKTsKKysJY3R4LT5hZWFkICA9IEVJUDE5N19BRUFEX1RZUEVfSVBTRUNfRVNQOworKwljdHgtPmFhZHNraXAgPSBFSVAxOTdfQUVBRF9JUFNFQ19JVl9TSVpFOworKwlyZXR1cm4gcmV0OworK30KKysKKytzdHJ1Y3Qgc2FmZXhjZWxfYWxnX3RlbXBsYXRlIHNhZmV4Y2VsX2FsZ19yZmM0MTA2X2djbSA9IHsKKysJLnR5cGUgPSBTQUZFWENFTF9BTEdfVFlQRV9BRUFELAorKwkuYWxnb19tYXNrID0gU0FGRVhDRUxfQUxHX0FFUyB8IFNBRkVYQ0VMX0FMR19HSEFTSCwKKysJLmFsZy5hZWFkID0geworKwkJLnNldGtleSA9IHNhZmV4Y2VsX3JmYzQxMDZfZ2NtX3NldGtleSwKKysJCS5zZXRhdXRoc2l6ZSA9IHNhZmV4Y2VsX3JmYzQxMDZfZ2NtX3NldGF1dGhzaXplLAorKwkJLmVuY3J5cHQgPSBzYWZleGNlbF9yZmM0MTA2X2VuY3J5cHQsCisrCQkuZGVjcnlwdCA9IHNhZmV4Y2VsX3JmYzQxMDZfZGVjcnlwdCwKKysJCS5pdnNpemUgPSBHQ01fUkZDNDEwNl9JVl9TSVpFLAorKwkJLm1heGF1dGhzaXplID0gR0hBU0hfRElHRVNUX1NJWkUsCisrCQkuYmFzZSA9IHsKKysJCQkuY3JhX25hbWUgPSAicmZjNDEwNihnY20oYWVzKSkiLAorKwkJCS5jcmFfZHJpdmVyX25hbWUgPSAic2FmZXhjZWwtcmZjNDEwNi1nY20tYWVzIiwKKysJCQkuY3JhX3ByaW9yaXR5ID0gU0FGRVhDRUxfQ1JBX1BSSU9SSVRZLAorKwkJCS5jcmFfZmxhZ3MgPSBDUllQVE9fQUxHX0FTWU5DIHwKKysJCQkJICAgICBDUllQVE9fQUxHX0tFUk5fRFJJVkVSX09OTFksCisrCQkJLmNyYV9ibG9ja3NpemUgPSAxLAorKwkJCS5jcmFfY3R4c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2FmZXhjZWxfY2lwaGVyX2N0eCksCisrCQkJLmNyYV9hbGlnbm1hc2sgPSAwLAorKwkJCS5jcmFfaW5pdCA9IHNhZmV4Y2VsX3JmYzQxMDZfZ2NtX2NyYV9pbml0LAorKwkJCS5jcmFfZXhpdCA9IHNhZmV4Y2VsX2FlYWRfZ2NtX2NyYV9leGl0LAorKwkJfSwKKysJfSwKKyt9OworKworK3N0YXRpYyBpbnQgc2FmZXhjZWxfcmZjNDU0M19nY21fc2V0YXV0aHNpemUoc3RydWN0IGNyeXB0b19hZWFkICp0Zm0sCisrCQkJCQkgICAgdW5zaWduZWQgaW50IGF1dGhzaXplKQorK3sKKysJaWYgKGF1dGhzaXplICE9IEdIQVNIX0RJR0VTVF9TSVpFKQorKwkJcmV0dXJuIC1FSU5WQUw7CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX3JmYzQ1NDNfZ2NtX2NyYV9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCisreworKwlzdHJ1Y3Qgc2FmZXhjZWxfY2lwaGVyX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKysJaW50IHJldDsKKysKKysJcmV0ID0gc2FmZXhjZWxfYWVhZF9nY21fY3JhX2luaXQodGZtKTsKKysJY3R4LT5hZWFkICA9IEVJUDE5N19BRUFEX1RZUEVfSVBTRUNfRVNQX0dNQUM7CisrCXJldHVybiByZXQ7CisrfQorKworK3N0cnVjdCBzYWZleGNlbF9hbGdfdGVtcGxhdGUgc2FmZXhjZWxfYWxnX3JmYzQ1NDNfZ2NtID0geworKwkudHlwZSA9IFNBRkVYQ0VMX0FMR19UWVBFX0FFQUQsCisrCS5hbGdvX21hc2sgPSBTQUZFWENFTF9BTEdfQUVTIHwgU0FGRVhDRUxfQUxHX0dIQVNILAorKwkuYWxnLmFlYWQgPSB7CisrCQkuc2V0a2V5ID0gc2FmZXhjZWxfcmZjNDEwNl9nY21fc2V0a2V5LAorKwkJLnNldGF1dGhzaXplID0gc2FmZXhjZWxfcmZjNDU0M19nY21fc2V0YXV0aHNpemUsCisrCQkuZW5jcnlwdCA9IHNhZmV4Y2VsX3JmYzQxMDZfZW5jcnlwdCwKKysJCS5kZWNyeXB0ID0gc2FmZXhjZWxfcmZjNDEwNl9kZWNyeXB0LAorKwkJLml2c2l6ZSA9IEdDTV9SRkM0NTQzX0lWX1NJWkUsCisrCQkubWF4YXV0aHNpemUgPSBHSEFTSF9ESUdFU1RfU0laRSwKKysJCS5iYXNlID0geworKwkJCS5jcmFfbmFtZSA9ICJyZmM0NTQzKGdjbShhZXMpKSIsCisrCQkJLmNyYV9kcml2ZXJfbmFtZSA9ICJzYWZleGNlbC1yZmM0NTQzLWdjbS1hZXMiLAorKwkJCS5jcmFfcHJpb3JpdHkgPSBTQUZFWENFTF9DUkFfUFJJT1JJVFksCisrCQkJLmNyYV9mbGFncyA9IENSWVBUT19BTEdfQVNZTkMgfAorKwkJCQkgICAgIENSWVBUT19BTEdfS0VSTl9EUklWRVJfT05MWSwKKysJCQkuY3JhX2Jsb2Nrc2l6ZSA9IDEsCisrCQkJLmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBzYWZleGNlbF9jaXBoZXJfY3R4KSwKKysJCQkuY3JhX2FsaWdubWFzayA9IDAsCisrCQkJLmNyYV9pbml0ID0gc2FmZXhjZWxfcmZjNDU0M19nY21fY3JhX2luaXQsCisrCQkJLmNyYV9leGl0ID0gc2FmZXhjZWxfYWVhZF9nY21fY3JhX2V4aXQsCisrCQl9LAorKwl9LAorK307CisrCisrc3RhdGljIGludCBzYWZleGNlbF9yZmM0MzA5X2NjbV9zZXRrZXkoc3RydWN0IGNyeXB0b19hZWFkICpjdGZtLCBjb25zdCB1OCAqa2V5LAorKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGxlbikKKyt7CisrCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm0gPSBjcnlwdG9fYWVhZF90Zm0oY3RmbSk7CisrCXN0cnVjdCBzYWZleGNlbF9jaXBoZXJfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworKworKwkvKiBGaXJzdCBieXRlIG9mIHRoZSBub25jZSA9IEwgPSBhbHdheXMgMyBmb3IgUkZDNDMwOSAoNCBieXRlIGN0cikgKi8KKysJKih1OCAqKSZjdHgtPm5vbmNlID0gRUlQMTk3X0FFQURfSVBTRUNfQ09VTlRFUl9TSVpFIC0gMTsKKysJLyogbGFzdCAzIGJ5dGVzIG9mIGtleSBhcmUgdGhlIG5vbmNlISAqLworKwltZW1jcHkoKHU4ICopJmN0eC0+bm9uY2UgKyAxLCBrZXkgKyBsZW4gLQorKwkgICAgICAgRUlQMTk3X0FFQURfSVBTRUNfQ0NNX05PTkNFX1NJWkUsCisrCSAgICAgICBFSVAxOTdfQUVBRF9JUFNFQ19DQ01fTk9OQ0VfU0laRSk7CisrCisrCWxlbiAtPSBFSVAxOTdfQUVBRF9JUFNFQ19DQ01fTk9OQ0VfU0laRTsKKysJcmV0dXJuIHNhZmV4Y2VsX2FlYWRfY2NtX3NldGtleShjdGZtLCBrZXksIGxlbik7CisrfQorKworK3N0YXRpYyBpbnQgc2FmZXhjZWxfcmZjNDMwOV9jY21fc2V0YXV0aHNpemUoc3RydWN0IGNyeXB0b19hZWFkICp0Zm0sCisrCQkJCQkgICAgdW5zaWduZWQgaW50IGF1dGhzaXplKQorK3sKKysJLyogQm9ycm93ZWQgZnJvbSBjcnlwdG8vY2NtLmMgKi8KKysJc3dpdGNoIChhdXRoc2l6ZSkgeworKwljYXNlIDg6CisrCWNhc2UgMTI6CisrCWNhc2UgMTY6CisrCQlicmVhazsKKysJZGVmYXVsdDoKKysJCXJldHVybiAtRUlOVkFMOworKwl9CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX3JmYzQzMDlfY2NtX2VuY3J5cHQoc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxKQorK3sKKysJc3RydWN0IHNhZmV4Y2VsX2NpcGhlcl9yZXEgKmNyZXEgPSBhZWFkX3JlcXVlc3RfY3R4KHJlcSk7CisrCisrCS8qIEJvcnJvd2VkIGZyb20gY3J5cHRvL2NjbS5jICovCisrCWlmIChyZXEtPmFzc29jbGVuICE9IDE2ICYmIHJlcS0+YXNzb2NsZW4gIT0gMjApCisrCQlyZXR1cm4gLUVJTlZBTDsKKysKKysJcmV0dXJuIHNhZmV4Y2VsX3F1ZXVlX3JlcSgmcmVxLT5iYXNlLCBjcmVxLCBTQUZFWENFTF9FTkNSWVBUKTsKKyt9CisrCisrc3RhdGljIGludCBzYWZleGNlbF9yZmM0MzA5X2NjbV9kZWNyeXB0KHN0cnVjdCBhZWFkX3JlcXVlc3QgKnJlcSkKKyt7CisrCXN0cnVjdCBzYWZleGNlbF9jaXBoZXJfcmVxICpjcmVxID0gYWVhZF9yZXF1ZXN0X2N0eChyZXEpOworKworKwkvKiBCb3Jyb3dlZCBmcm9tIGNyeXB0by9jY20uYyAqLworKwlpZiAocmVxLT5hc3NvY2xlbiAhPSAxNiAmJiByZXEtPmFzc29jbGVuICE9IDIwKQorKwkJcmV0dXJuIC1FSU5WQUw7CisrCisrCXJldHVybiBzYWZleGNlbF9xdWV1ZV9yZXEoJnJlcS0+YmFzZSwgY3JlcSwgU0FGRVhDRUxfREVDUllQVCk7CisrfQorKworK3N0YXRpYyBpbnQgc2FmZXhjZWxfcmZjNDMwOV9jY21fY3JhX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKKyt7CisrCXN0cnVjdCBzYWZleGNlbF9jaXBoZXJfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworKwlpbnQgcmV0OworKworKwlyZXQgPSBzYWZleGNlbF9hZWFkX2NjbV9jcmFfaW5pdCh0Zm0pOworKwljdHgtPmFlYWQgID0gRUlQMTk3X0FFQURfVFlQRV9JUFNFQ19FU1A7CisrCWN0eC0+YWFkc2tpcCA9IEVJUDE5N19BRUFEX0lQU0VDX0lWX1NJWkU7CisrCXJldHVybiByZXQ7CisrfQorKworK3N0cnVjdCBzYWZleGNlbF9hbGdfdGVtcGxhdGUgc2FmZXhjZWxfYWxnX3JmYzQzMDlfY2NtID0geworKwkudHlwZSA9IFNBRkVYQ0VMX0FMR19UWVBFX0FFQUQsCisrCS5hbGdvX21hc2sgPSBTQUZFWENFTF9BTEdfQUVTIHwgU0FGRVhDRUxfQUxHX0NCQ19NQUNfQUxMLAorKwkuYWxnLmFlYWQgPSB7CisrCQkuc2V0a2V5ID0gc2FmZXhjZWxfcmZjNDMwOV9jY21fc2V0a2V5LAorKwkJLnNldGF1dGhzaXplID0gc2FmZXhjZWxfcmZjNDMwOV9jY21fc2V0YXV0aHNpemUsCisrCQkuZW5jcnlwdCA9IHNhZmV4Y2VsX3JmYzQzMDlfY2NtX2VuY3J5cHQsCisrCQkuZGVjcnlwdCA9IHNhZmV4Y2VsX3JmYzQzMDlfY2NtX2RlY3J5cHQsCisrCQkuaXZzaXplID0gRUlQMTk3X0FFQURfSVBTRUNfSVZfU0laRSwKKysJCS5tYXhhdXRoc2l6ZSA9IEFFU19CTE9DS19TSVpFLAorKwkJLmJhc2UgPSB7CisrCQkJLmNyYV9uYW1lID0gInJmYzQzMDkoY2NtKGFlcykpIiwKKysJCQkuY3JhX2RyaXZlcl9uYW1lID0gInNhZmV4Y2VsLXJmYzQzMDktY2NtLWFlcyIsCisrCQkJLmNyYV9wcmlvcml0eSA9IFNBRkVYQ0VMX0NSQV9QUklPUklUWSwKKysJCQkuY3JhX2ZsYWdzID0gQ1JZUFRPX0FMR19BU1lOQyB8CisrCQkJCSAgICAgQ1JZUFRPX0FMR19LRVJOX0RSSVZFUl9PTkxZLAorKwkJCS5jcmFfYmxvY2tzaXplID0gMSwKKysJCQkuY3JhX2N0eHNpemUgPSBzaXplb2Yoc3RydWN0IHNhZmV4Y2VsX2NpcGhlcl9jdHgpLAorKwkJCS5jcmFfYWxpZ25tYXNrID0gMCwKKysJCQkuY3JhX2luaXQgPSBzYWZleGNlbF9yZmM0MzA5X2NjbV9jcmFfaW5pdCwKKysJCQkuY3JhX2V4aXQgPSBzYWZleGNlbF9hZWFkX2NyYV9leGl0LAorKwkJCS5jcmFfbW9kdWxlID0gVEhJU19NT0RVTEUsCisrCQl9LAorIAl9LAorIH07CistLS0gYS9kcml2ZXJzL2NyeXB0by9pbnNpZGUtc2VjdXJlL3NhZmV4Y2VsLmgKKysrKyBiL2RyaXZlcnMvY3J5cHRvL2luc2lkZS1zZWN1cmUvc2FmZXhjZWwuaAorQEAgLTE3LDggKzE3LDExIEBACisgI2RlZmluZSBFSVAxOTdfSElBX1ZFUlNJT05fQkUJCQkweGNhMzUKKyAjZGVmaW5lIEVJUDE5N19ISUFfVkVSU0lPTl9MRQkJCTB4MzVjYQorICNkZWZpbmUgRUlQOTdfVkVSU0lPTl9MRQkJCTB4OWU2MQorKyNkZWZpbmUgRUlQMTk2X1ZFUlNJT05fTEUJCQkweDNiYzQKKyAjZGVmaW5lIEVJUDE5N19WRVJTSU9OX0xFCQkJMHgzYWM1CisgI2RlZmluZSBFSVA5Nl9WRVJTSU9OX0xFCQkJMHg5ZjYwCisrI2RlZmluZSBFSVAyMDFfVkVSU0lPTl9MRQkJCTB4MzZjOQorKyNkZWZpbmUgRUlQMjA2X1ZFUlNJT05fTEUJCQkweDMxY2UKKyAjZGVmaW5lIEVJUDE5N19SRUdfTE8xNihyZWcpCQkJKHJlZyAmIDB4ZmZmZikKKyAjZGVmaW5lIEVJUDE5N19SRUdfSEkxNihyZWcpCQkJKChyZWcgPj4gMTYpICYgMHhmZmZmKQorICNkZWZpbmUgRUlQMTk3X1ZFUlNJT05fTUFTSyhyZWcpCQkoKHJlZyA+PiAxNikgJiAweGZmZikKK0BAIC0yNiwxMiArMjksMjMgQEAKKyAJCQkJCQkoKHJlZyA+PiA0KSAmIDB4ZjApIHwgXAorIAkJCQkJCSgocmVnID4+IDEyKSAmIDB4ZikpCisgCisrLyogRUlQMTk3IEhJQSBPUFRJT05TIEVOQ09ESU5HICovCisrI2RlZmluZSBFSVAxOTdfSElBX09QVF9IQVNfUEVfQVJCCQlCSVQoMjkpCisrCisrLyogRUlQMjA2IE9QVElPTlMgRU5DT0RJTkcgKi8KKysjZGVmaW5lIEVJUDIwNl9PUFRfSUNFX1RZUEUobikJCQkoKG4+PjgpJjMpCisrCisrLyogRUlQMTk3IE9QVElPTlMgRU5DT0RJTkcgKi8KKysjZGVmaW5lIEVJUDE5N19PUFRfSEFTX1RSQwkJCUJJVCgzMSkKKysKKyAvKiBTdGF0aWMgY29uZmlndXJhdGlvbiAqLworICNkZWZpbmUgRUlQMTk3X0RFRkFVTFRfUklOR19TSVpFCQk0MDAKKy0jZGVmaW5lIEVJUDE5N19NQVhfVE9LRU5TCQkJMTgKKysjZGVmaW5lIEVJUDE5N19FTUJfVE9LRU5TCQkJNCAvKiBQYWQgQ0QgdG8gMTYgZHdvcmRzICovCisrI2RlZmluZSBFSVAxOTdfTUFYX1RPS0VOUwkJCTE2CisgI2RlZmluZSBFSVAxOTdfTUFYX1JJTkdTCQkJNAorICNkZWZpbmUgRUlQMTk3X0ZFVENIX0RFUFRICQkJMgorICNkZWZpbmUgRUlQMTk3X01BWF9CQVRDSF9TWgkJCTY0CisrI2RlZmluZSBFSVAxOTdfTUFYX1JJTkdfQUlDCQkJMTQKKyAKKyAjZGVmaW5lIEVJUDE5N19HRlBfRkxBR1MoYmFzZSkJKChiYXNlKS5mbGFncyAmIENSWVBUT19URk1fUkVRX01BWV9TTEVFUCA/IFwKKyAJCQkJIEdGUF9LRVJORUwgOiBHRlBfQVRPTUlDKQorQEAgLTEzOCw2ICsxNTIsNyBAQAorICNkZWZpbmUgRUlQMTk3X0hJQV9BSUNfUl9FTkFCTEVEX1NUQVQocikJKDB4ZTAxMCAtIEVJUDE5N19ISUFfQUlDX1JfT0ZGKHIpKQorICNkZWZpbmUgRUlQMTk3X0hJQV9BSUNfUl9BQ0socikJCQkoMHhlMDEwIC0gRUlQMTk3X0hJQV9BSUNfUl9PRkYocikpCisgI2RlZmluZSBFSVAxOTdfSElBX0FJQ19SX0VOQUJMRV9DTFIocikJCSgweGUwMTQgLSBFSVAxOTdfSElBX0FJQ19SX09GRihyKSkKKysjZGVmaW5lIEVJUDE5N19ISUFfQUlDX1JfVkVSU0lPTihyKQkJKDB4ZTAxYyAtIEVJUDE5N19ISUFfQUlDX1JfT0ZGKHIpKQorICNkZWZpbmUgRUlQMTk3X0hJQV9BSUNfR19FTkFCTEVfQ1RSTAkJMHhmODA4CisgI2RlZmluZSBFSVAxOTdfSElBX0FJQ19HX0VOQUJMRURfU1RBVAkJMHhmODEwCisgI2RlZmluZSBFSVAxOTdfSElBX0FJQ19HX0FDSwkJCTB4ZjgxMAorQEAgLTE1NywxMiArMTcyLDE2IEBACisgI2RlZmluZSBFSVAxOTdfUEVfRUlQOTZfRlVOQ1RJT05fRU4obikJCSgweDEwMDQgKyAoMHgyMDAwICogKG4pKSkKKyAjZGVmaW5lIEVJUDE5N19QRV9FSVA5Nl9DT05URVhUX0NUUkwobikJCSgweDEwMDggKyAoMHgyMDAwICogKG4pKSkKKyAjZGVmaW5lIEVJUDE5N19QRV9FSVA5Nl9DT05URVhUX1NUQVQobikJCSgweDEwMGMgKyAoMHgyMDAwICogKG4pKSkKKysjZGVmaW5lIEVJUDE5N19QRV9FSVA5Nl9UT0tFTl9DVFJMMihuKQkJKDB4MTAyYyArICgweDIwMDAgKiAobikpKQorICNkZWZpbmUgRUlQMTk3X1BFX0VJUDk2X0ZVTkNUSU9OMl9FTihuKQkJKDB4MTAzMCArICgweDIwMDAgKiAobikpKQorICNkZWZpbmUgRUlQMTk3X1BFX0VJUDk2X09QVElPTlMobikJCSgweDEzZjggKyAoMHgyMDAwICogKG4pKSkKKyAjZGVmaW5lIEVJUDE5N19QRV9FSVA5Nl9WRVJTSU9OKG4pCQkoMHgxM2ZjICsgKDB4MjAwMCAqIChuKSkpCisgI2RlZmluZSBFSVAxOTdfUEVfT1VUX0RCVUZfVEhSRVMobikJCSgweDFjMDAgKyAoMHgyMDAwICogKG4pKSkKKyAjZGVmaW5lIEVJUDE5N19QRV9PVVRfVEJVRl9USFJFUyhuKQkJKDB4MWQwMCArICgweDIwMDAgKiAobikpKQorKyNkZWZpbmUgRUlQMTk3X1BFX09QVElPTlMobikJCQkoMHgxZmY4ICsgKDB4MjAwMCAqIChuKSkpCisrI2RlZmluZSBFSVAxOTdfUEVfVkVSU0lPTihuKQkJCSgweDFmZmMgKyAoMHgyMDAwICogKG4pKSkKKyAjZGVmaW5lIEVJUDE5N19NU1RfQ1RSTAkJCQkweGZmZjQKKysjZGVmaW5lIEVJUDE5N19PUFRJT05TCQkJCTB4ZmZmOAorICNkZWZpbmUgRUlQMTk3X1ZFUlNJT04JCQkJMHhmZmZjCisgCisgLyogRUlQMTk3LXNwZWNpZmljIHJlZ2lzdGVycywgbm8gaW5kaXJlY3Rpb24gKi8KK0BAIC0xNzgsNiArMTk3LDcgQEAKKyAjZGVmaW5lIEVJUDE5N19UUkNfRUNDQURNSU5TVEFUCQkJMHhmMDgzOAorICNkZWZpbmUgRUlQMTk3X1RSQ19FQ0NEQVRBU1RBVAkJCTB4ZjA4M2MKKyAjZGVmaW5lIEVJUDE5N19UUkNfRUNDREFUQQkJCTB4ZjA4NDAKKysjZGVmaW5lIEVJUDE5N19TVFJDX0NPTkZJRwkJCTB4ZjQzZjAKKyAjZGVmaW5lIEVJUDE5N19GTFVFX0NBQ0hFQkFTRV9MTyhuKQkJKDB4ZjYwMDAgKyAoMzIgKiAobikpKQorICNkZWZpbmUgRUlQMTk3X0ZMVUVfQ0FDSEVCQVNFX0hJKG4pCQkoMHhmNjAwNCArICgzMiAqIChuKSkpCisgI2RlZmluZSBFSVAxOTdfRkxVRV9DT05GSUcobikJCQkoMHhmNjAxMCArICgzMiAqIChuKSkpCitAQCAtMTg4LDYgKzIwOCw3IEBACisgCisgLyogRUlQMTk3X0hJQV94RFJfREVTQ19TSVpFICovCisgI2RlZmluZSBFSVAxOTdfeERSX0RFU0NfTU9ERV82NEJJVAkJQklUKDMxKQorKyNkZWZpbmUgRUlQMTk3X0NEUl9ERVNDX01PREVfQURDUAkJQklUKDMwKQorIAorIC8qIEVJUDE5N19ISUFfeERSX0RNQV9DRkcgKi8KKyAjZGVmaW5lIEVJUDE5N19ISUFfeERSX1dSX1JFU19CVUYJCUJJVCgyMikKK0BAIC0yMTMsNyArMjM0LDYgQEAKKyAvKiBFSVAxOTdfSElBX3hEUl9QUk9DX0NPVU5UICovCisgI2RlZmluZSBFSVAxOTdfeERSX1BST0NfeERfUEtUX09GRlNFVAkJMjQKKyAjZGVmaW5lIEVJUDE5N194RFJfUFJPQ194RF9QS1RfTUFTSwkJR0VOTUFTSyg2LCAwKQorLSNkZWZpbmUgRUlQMTk3X3hEUl9QUk9DX3hEX0NPVU5UKG4pCQkoKG4pIDw8IDIpCisgI2RlZmluZSBFSVAxOTdfeERSX1BST0NfeERfUEtUKG4pCQkoKG4pIDw8IDI0KQorICNkZWZpbmUgRUlQMTk3X3hEUl9QUk9DX0NMUl9DT1VOVAkJQklUKDMxKQorIAorQEAgLTIyOCw2ICsyNDgsOCBAQAorICNkZWZpbmUgRUlQMTk3X0hJQV9SQV9QRV9DVFJMX0VOCQlCSVQoMzApCisgCisgLyogRUlQMTk3X0hJQV9PUFRJT05TICovCisrI2RlZmluZSBFSVAxOTdfTl9SSU5HU19PRkZTRVQJCQkwCisrI2RlZmluZSBFSVAxOTdfTl9SSU5HU19NQVNLCQkJR0VOTUFTSygzLCAwKQorICNkZWZpbmUgRUlQMTk3X05fUEVTX09GRlNFVAkJCTQKKyAjZGVmaW5lIEVJUDE5N19OX1BFU19NQVNLCQkJR0VOTUFTSyg0LCAwKQorICNkZWZpbmUgRUlQOTdfTl9QRVNfTUFTSwkJCUdFTk1BU0soMiwgMCkKK0BAIC0yMzcsMTMgKzI1OSwxMyBAQAorICNkZWZpbmUgRUlQMTk3X0NGU0laRV9PRkZTRVQJCQk5CisgI2RlZmluZSBFSVAxOTdfQ0ZTSVpFX0FESlVTVAkJCTQKKyAjZGVmaW5lIEVJUDk3X0NGU0laRV9PRkZTRVQJCQk4CistI2RlZmluZSBFSVAxOTdfQ0ZTSVpFX01BU0sJCQlHRU5NQVNLKDMsIDApCistI2RlZmluZSBFSVA5N19DRlNJWkVfTUFTSwkJCUdFTk1BU0soNCwgMCkKKysjZGVmaW5lIEVJUDE5N19DRlNJWkVfTUFTSwkJCUdFTk1BU0soMiwgMCkKKysjZGVmaW5lIEVJUDk3X0NGU0laRV9NQVNLCQkJR0VOTUFTSygzLCAwKQorICNkZWZpbmUgRUlQMTk3X1JGU0laRV9PRkZTRVQJCQkxMgorICNkZWZpbmUgRUlQMTk3X1JGU0laRV9BREpVU1QJCQk0CisgI2RlZmluZSBFSVA5N19SRlNJWkVfT0ZGU0VUCQkJMTIKKy0jZGVmaW5lIEVJUDE5N19SRlNJWkVfTUFTSwkJCUdFTk1BU0soMywgMCkKKy0jZGVmaW5lIEVJUDk3X1JGU0laRV9NQVNLCQkJR0VOTUFTSyg0LCAwKQorKyNkZWZpbmUgRUlQMTk3X1JGU0laRV9NQVNLCQkJR0VOTUFTSygyLCAwKQorKyNkZWZpbmUgRUlQOTdfUkZTSVpFX01BU0sJCQlHRU5NQVNLKDMsIDApCisgCisgLyogRUlQMTk3X0hJQV9BSUNfUl9FTkFCTEVfQ1RSTCAqLworICNkZWZpbmUgRUlQMTk3X0NEUl9JUlEobikJCQlCSVQoKG4pICogMikKK0BAIC0yNTcsOSArMjc5LDkgQEAKKyAjZGVmaW5lIEVJUDE5N19ISUFfRHhFX0NGR19NSU5fQ1RSTF9TSVpFKG4pCSgobikgPDwgMTYpCisgI2RlZmluZSBFSVAxOTdfSElBX0R4RV9DRkdfQ1RSTF9DQUNIRV9DVFJMKG4pCSgoKG4pICYgMHg3KSA8PCAyMCkKKyAjZGVmaW5lIEVJUDE5N19ISUFfRHhFX0NGR19NQVhfQ1RSTF9TSVpFKG4pCSgobikgPDwgMjQpCistI2RlZmluZSBFSVAxOTdfSElBX0RGRV9DRkdfRElTX0RFQlVHCQkoQklUKDMxKSB8IEJJVCgyOSkpCisrI2RlZmluZSBFSVAxOTdfSElBX0RGRV9DRkdfRElTX0RFQlVHCQlHRU5NQVNLKDMxLCAyOSkKKyAjZGVmaW5lIEVJUDE5N19ISUFfRFNFX0NGR19FTl9TSU5HTEVfV1IJCUJJVCgyOSkKKy0jZGVmaW5lIEVJUDE5N19ISUFfRFNFX0NGR19ESVNfREVCVUcJCUJJVCgzMSkKKysjZGVmaW5lIEVJUDE5N19ISUFfRFNFX0NGR19ESVNfREVCVUcJCUdFTk1BU0soMzEsIDMwKQorIAorIC8qIEVJUDE5N19ISUFfREZFL0RTRV9USFJfQ1RSTCAqLworICNkZWZpbmUgRUlQMTk3X0R4RV9USFJfQ1RSTF9FTgkJCUJJVCgzMCkKK0BAIC0zMjcsMTMgKzM0OSwyMSBAQAorICNkZWZpbmUgRUlQMTk3X0FERFJFU1NfTU9ERQkJCUJJVCg4KQorICNkZWZpbmUgRUlQMTk3X0NPTlRST0xfTU9ERQkJCUJJVCg5KQorIAorKy8qIEVJUDE5N19QRV9FSVA5Nl9UT0tFTl9DVFJMMiAqLworKyNkZWZpbmUgRUlQMTk3X1BFX0VJUDk2X1RPS0VOX0NUUkwyX0NUWF9ET05FCUJJVCgzKQorKworKy8qIEVJUDE5N19TVFJDX0NPTkZJRyAqLworKyNkZWZpbmUgRUlQMTk3X1NUUkNfQ09ORklHX0lOSVQJCQlCSVQoMzEpCisrI2RlZmluZSBFSVAxOTdfU1RSQ19DT05GSUdfTEFSR0VfUkVDKHMpCQkoczw8OCkKKysjZGVmaW5lIEVJUDE5N19TVFJDX0NPTkZJR19TTUFMTF9SRUMocykJCShzPDwwKQorKworIC8qIEVJUDE5N19GTFVFX0NPTkZJRyAqLworICNkZWZpbmUgRUlQMTk3X0ZMVUVfQ09ORklHX01BR0lDCQkweGM3MDAwMDA0CisgCisgLyogQ29udGV4dCBDb250cm9sICovCisgc3RydWN0IHNhZmV4Y2VsX2NvbnRleHRfcmVjb3JkIHsKKy0JdTMyIGNvbnRyb2wwOworLQl1MzIgY29udHJvbDE7CisrCV9fbGUzMiBjb250cm9sMDsKKysJX19sZTMyIGNvbnRyb2wxOworIAorIAlfX2xlMzIgZGF0YVs0MF07CisgfSBfX3BhY2tlZDsKK0BAIC0zNTgsMTAgKzM4OCwxNCBAQCBzdHJ1Y3Qgc2FmZXhjZWxfY29udGV4dF9yZWNvcmQgeworICNkZWZpbmUgQ09OVEVYVF9DT05UUk9MX0NSWVBUT19BTEdfQUVTMTI4CSgweDUgPDwgMTcpCisgI2RlZmluZSBDT05URVhUX0NPTlRST0xfQ1JZUFRPX0FMR19BRVMxOTIJKDB4NiA8PCAxNykKKyAjZGVmaW5lIENPTlRFWFRfQ09OVFJPTF9DUllQVE9fQUxHX0FFUzI1NgkoMHg3IDw8IDE3KQorKyNkZWZpbmUgQ09OVEVYVF9DT05UUk9MX0NSWVBUT19BTEdfQ0hBQ0hBMjAJKDB4OCA8PCAxNykKKysjZGVmaW5lIENPTlRFWFRfQ09OVFJPTF9DUllQVE9fQUxHX1NNNAkJKDB4ZCA8PCAxNykKKysjZGVmaW5lIENPTlRFWFRfQ09OVFJPTF9ESUdFU1RfSU5JVElBTAkJKDB4MCA8PCAyMSkKKyAjZGVmaW5lIENPTlRFWFRfQ09OVFJPTF9ESUdFU1RfUFJFQ09NUFVURUQJKDB4MSA8PCAyMSkKKyAjZGVmaW5lIENPTlRFWFRfQ09OVFJPTF9ESUdFU1RfWENNCQkoMHgyIDw8IDIxKQorICNkZWZpbmUgQ09OVEVYVF9DT05UUk9MX0RJR0VTVF9ITUFDCQkoMHgzIDw8IDIxKQorICNkZWZpbmUgQ09OVEVYVF9DT05UUk9MX0NSWVBUT19BTEdfTUQ1CQkoMHgwIDw8IDIzKQorKyNkZWZpbmUgQ09OVEVYVF9DT05UUk9MX0NSWVBUT19BTEdfQ1JDMzIJKDB4MCA8PCAyMykKKyAjZGVmaW5lIENPTlRFWFRfQ09OVFJPTF9DUllQVE9fQUxHX1NIQTEJCSgweDIgPDwgMjMpCisgI2RlZmluZSBDT05URVhUX0NPTlRST0xfQ1JZUFRPX0FMR19TSEEyMjQJKDB4NCA8PCAyMykKKyAjZGVmaW5lIENPTlRFWFRfQ09OVFJPTF9DUllQVE9fQUxHX1NIQTI1NgkoMHgzIDw8IDIzKQorQEAgLTM3MSwxNyArNDA1LDI1IEBAIHN0cnVjdCBzYWZleGNlbF9jb250ZXh0X3JlY29yZCB7CisgI2RlZmluZSBDT05URVhUX0NPTlRST0xfQ1JZUFRPX0FMR19YQ0JDMTI4CSgweDEgPDwgMjMpCisgI2RlZmluZSBDT05URVhUX0NPTlRST0xfQ1JZUFRPX0FMR19YQ0JDMTkyCSgweDIgPDwgMjMpCisgI2RlZmluZSBDT05URVhUX0NPTlRST0xfQ1JZUFRPX0FMR19YQ0JDMjU2CSgweDMgPDwgMjMpCisrI2RlZmluZSBDT05URVhUX0NPTlRST0xfQ1JZUFRPX0FMR19TTTMJCSgweDcgPDwgMjMpCisrI2RlZmluZSBDT05URVhUX0NPTlRST0xfQ1JZUFRPX0FMR19TSEEzXzI1NgkoMHhiIDw8IDIzKQorKyNkZWZpbmUgQ09OVEVYVF9DT05UUk9MX0NSWVBUT19BTEdfU0hBM18yMjQJKDB4YyA8PCAyMykKKysjZGVmaW5lIENPTlRFWFRfQ09OVFJPTF9DUllQVE9fQUxHX1NIQTNfNTEyCSgweGQgPDwgMjMpCisrI2RlZmluZSBDT05URVhUX0NPTlRST0xfQ1JZUFRPX0FMR19TSEEzXzM4NAkoMHhlIDw8IDIzKQorKyNkZWZpbmUgQ09OVEVYVF9DT05UUk9MX0NSWVBUT19BTEdfUE9MWTEzMDUJKDB4ZiA8PCAyMykKKyAjZGVmaW5lIENPTlRFWFRfQ09OVFJPTF9JTlZfRlIJCQkoMHg1IDw8IDI0KQorICNkZWZpbmUgQ09OVEVYVF9DT05UUk9MX0lOVl9UUgkJCSgweDYgPDwgMjQpCisgCisgLyogY29udHJvbDEgKi8KKyAjZGVmaW5lIENPTlRFWFRfQ09OVFJPTF9DUllQVE9fTU9ERV9FQ0IJCSgwIDw8IDApCisgI2RlZmluZSBDT05URVhUX0NPTlRST0xfQ1JZUFRPX01PREVfQ0JDCQkoMSA8PCAwKQorKyNkZWZpbmUgQ09OVEVYVF9DT05UUk9MX0NIQUNIQTIwX01PREVfMjU2XzMyCSgyIDw8IDApCisgI2RlZmluZSBDT05URVhUX0NPTlRST0xfQ1JZUFRPX01PREVfT0ZCCQkoNCA8PCAwKQorICNkZWZpbmUgQ09OVEVYVF9DT05UUk9MX0NSWVBUT19NT0RFX0NGQgkJKDUgPDwgMCkKKyAjZGVmaW5lIENPTlRFWFRfQ09OVFJPTF9DUllQVE9fTU9ERV9DVFJfTE9BRAkoNiA8PCAwKQorICNkZWZpbmUgQ09OVEVYVF9DT05UUk9MX0NSWVBUT19NT0RFX1hUUwkJKDcgPDwgMCkKKyAjZGVmaW5lIENPTlRFWFRfQ09OVFJPTF9DUllQVE9fTU9ERV9YQ00JCSgoNiA8PCAwKSB8IEJJVCgxNykpCisrI2RlZmluZSBDT05URVhUX0NPTlRST0xfQ0hBQ0hBMjBfTU9ERV9DQUxDX09USwkoMTIgPDwgMCkKKyAjZGVmaW5lIENPTlRFWFRfQ09OVFJPTF9JVjAJCQlCSVQoNSkKKyAjZGVmaW5lIENPTlRFWFRfQ09OVFJPTF9JVjEJCQlCSVQoNikKKyAjZGVmaW5lIENPTlRFWFRfQ09OVFJPTF9JVjIJCQlCSVQoNykKK0BAIC0zOTQsNiArNDM2LDEzIEBAIHN0cnVjdCBzYWZleGNlbF9jb250ZXh0X3JlY29yZCB7CisgI2RlZmluZSBFSVAxOTdfWENNX01PREVfR0NNCQkJMQorICNkZWZpbmUgRUlQMTk3X1hDTV9NT0RFX0NDTQkJCTIKKyAKKysjZGVmaW5lIEVJUDE5N19BRUFEX1RZUEVfSVBTRUNfRVNQCQkyCisrI2RlZmluZSBFSVAxOTdfQUVBRF9UWVBFX0lQU0VDX0VTUF9HTUFDCQkzCisrI2RlZmluZSBFSVAxOTdfQUVBRF9JUFNFQ19JVl9TSVpFCQk4CisrI2RlZmluZSBFSVAxOTdfQUVBRF9JUFNFQ19OT05DRV9TSVpFCQk0CisrI2RlZmluZSBFSVAxOTdfQUVBRF9JUFNFQ19DT1VOVEVSX1NJWkUJCTQKKysjZGVmaW5lIEVJUDE5N19BRUFEX0lQU0VDX0NDTV9OT05DRV9TSVpFCTMKKysKKyAvKiBUaGUgaGFzaCBjb3VudGVyIGdpdmVuIHRvIHRoZSBlbmdpbmUgaW4gdGhlIGNvbnRleHQgaGFzIGEgZ3JhbnVsYXJpdHkgb2YKKyAgKiA2NCBiaXRzLgorICAqLworQEAgLTQyMyw2ICs0NzIsOCBAQCBzdHJ1Y3Qgc2FmZXhjZWxfY29udGV4dF9yZWNvcmQgeworICNkZWZpbmUgRUlQMTk3X1RSQ19QQVJBTVMyX1JDX1NaX1NNQUxMKG4pCSgobikgPDwgMTgpCisgCisgLyogQ2FjaGUgaGVscGVycyAqLworKyNkZWZpbmUgRUlQMTk3X01JTl9EU0laRQkJCTEwMjQKKysjZGVmaW5lIEVJUDE5N19NSU5fQVNJWkUJCQk4CisgI2RlZmluZSBFSVAxOTdfQ1NfVFJDX1JFQ19XQwkJCTY0CisgI2RlZmluZSBFSVAxOTdfQ1NfUkNfU0laRQkJCSg0ICogc2l6ZW9mKHUzMikpCisgI2RlZmluZSBFSVAxOTdfQ1NfUkNfTkVYVCh4KQkJCSh4KQorQEAgLTQ0Nyw3ICs0OTgsNyBAQCBzdHJ1Y3QgcmVzdWx0X2RhdGFfZGVzYyB7CisgCXUxNiBhcHBsaWNhdGlvbl9pZDsKKyAJdTE2IHJzdmQxOworIAorLQl1MzIgcnN2ZDI7CisrCXUzMiByc3ZkMls1XTsKKyB9IF9fcGFja2VkOworIAorIAorQEAgLTQ2NSwxNiArNTE2LDE1IEBAIHN0cnVjdCBzYWZleGNlbF9yZXN1bHRfZGVzYyB7CisgCisgCXUzMiBkYXRhX2xvOworIAl1MzIgZGF0YV9oaTsKKy0KKy0Jc3RydWN0IHJlc3VsdF9kYXRhX2Rlc2MgcmVzdWx0X2RhdGE7CisgfSBfX3BhY2tlZDsKKyAKKyAvKgorICAqIFRoZSBFSVAoMSk5NyBvbmx5IG5lZWRzIHRvIGZldGNoIHRoZSBkZXNjcmlwdG9yIHBhcnQgb2YKKyAgKiB0aGUgcmVzdWx0IGRlc2NyaXB0b3IsIG5vdCB0aGUgcmVzdWx0IHRva2VuIHBhcnQhCisgICovCistI2RlZmluZSBFSVAxOTdfUkQ2NF9GRVRDSF9TSVpFCQkoKHNpemVvZihzdHJ1Y3Qgc2FmZXhjZWxfcmVzdWx0X2Rlc2MpIC1cCistCQkJCQkgIHNpemVvZihzdHJ1Y3QgcmVzdWx0X2RhdGFfZGVzYykpIC9cCisrI2RlZmluZSBFSVAxOTdfUkQ2NF9GRVRDSF9TSVpFCQkoc2l6ZW9mKHN0cnVjdCBzYWZleGNlbF9yZXN1bHRfZGVzYykgL1wKKysJCQkJCSBzaXplb2YodTMyKSkKKysjZGVmaW5lIEVJUDE5N19SRDY0X1JFU1VMVF9TSVpFCQkoc2l6ZW9mKHN0cnVjdCByZXN1bHRfZGF0YV9kZXNjKSAvXAorIAkJCQkJIHNpemVvZih1MzIpKQorIAorIHN0cnVjdCBzYWZleGNlbF90b2tlbiB7CitAQCAtNTA1LDYgKzU1NSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBlaXAxOTdfbm9vcF90b2tlbihzdHIKKyB7CisgCXRva2VuLT5vcGNvZGUgPSBFSVAxOTdfVE9LRU5fT1BDT0RFX05PT1A7CisgCXRva2VuLT5wYWNrZXRfbGVuZ3RoID0gQklUKDIpOworKwl0b2tlbi0+c3RhdCA9IDA7CisrCXRva2VuLT5pbnN0cnVjdGlvbnMgPSAwOworIH0KKyAKKyAvKiBJbnN0cnVjdGlvbnMgKi8KK0BAIC01MjYsMTQgKzU3OCwxMyBAQCBzdHJ1Y3Qgc2FmZXhjZWxfY29udHJvbF9kYXRhX2Rlc2MgeworIAl1MTYgYXBwbGljYXRpb25faWQ7CisgCXUxNiByc3ZkOworIAorLQl1OCByZWZyZXNoOjI7CistCXUzMiBjb250ZXh0X2xvOjMwOworKwl1MzIgY29udGV4dF9sbzsKKyAJdTMyIGNvbnRleHRfaGk7CisgCisgCXUzMiBjb250cm9sMDsKKyAJdTMyIGNvbnRyb2wxOworIAorLQl1MzIgdG9rZW5bRUlQMTk3X01BWF9UT0tFTlNdOworKwl1MzIgdG9rZW5bRUlQMTk3X0VNQl9UT0tFTlNdOworIH0gX19wYWNrZWQ7CisgCisgI2RlZmluZSBFSVAxOTdfT1BUSU9OX01BR0lDX1ZBTFVFCUJJVCgwKQorQEAgLTU0Myw3ICs1OTQsMTAgQEAgc3RydWN0IHNhZmV4Y2VsX2NvbnRyb2xfZGF0YV9kZXNjIHsKKyAjZGVmaW5lIEVJUDE5N19PUFRJT05fMl9UT0tFTl9JVl9DTUQJR0VOTUFTSygxMSwgMTApCisgI2RlZmluZSBFSVAxOTdfT1BUSU9OXzRfVE9LRU5fSVZfQ01ECUdFTk1BU0soMTEsIDkpCisgCisrI2RlZmluZSBFSVAxOTdfVFlQRV9CQ0xBCQkweDAKKyAjZGVmaW5lIEVJUDE5N19UWVBFX0VYVEVOREVECQkweDMKKysjZGVmaW5lIEVJUDE5N19DT05URVhUX1NNQUxMCQkweDIKKysjZGVmaW5lIEVJUDE5N19DT05URVhUX1NJWkVfTUFTSwkweDMKKyAKKyAvKiBCYXNpYyBDb21tYW5kIERlc2NyaXB0b3IgZm9ybWF0ICovCisgc3RydWN0IHNhZmV4Y2VsX2NvbW1hbmRfZGVzYyB7CitAQCAtNTUxLDE2ICs2MDUsMjIgQEAgc3RydWN0IHNhZmV4Y2VsX2NvbW1hbmRfZGVzYyB7CisgCXU4IHJzdmQwOjU7CisgCXU4IGxhc3Rfc2VnOjE7CisgCXU4IGZpcnN0X3NlZzoxOworLQl1MTYgYWRkaXRpb25hbF9jZGF0YV9zaXplOjg7CisrCXU4IGFkZGl0aW9uYWxfY2RhdGFfc2l6ZTo4OworIAorIAl1MzIgcnN2ZDE7CisgCisgCXUzMiBkYXRhX2xvOworIAl1MzIgZGF0YV9oaTsKKyAKKysJdTMyIGF0b2tfbG87CisrCXUzMiBhdG9rX2hpOworKworIAlzdHJ1Y3Qgc2FmZXhjZWxfY29udHJvbF9kYXRhX2Rlc2MgY29udHJvbF9kYXRhOworIH0gX19wYWNrZWQ7CisgCisrI2RlZmluZSBFSVAxOTdfQ0Q2NF9GRVRDSF9TSVpFCQkoc2l6ZW9mKHN0cnVjdCBzYWZleGNlbF9jb21tYW5kX2Rlc2MpIC9cCisrCQkJCQlzaXplb2YodTMyKSkKKysKKyAvKgorICAqIEludGVybmFsIHN0cnVjdHVyZXMgJiBmdW5jdGlvbnMKKyAgKi8KK0BAIC01NzgsMTUgKzYzOCwyMCBAQCBlbnVtIGVpcDE5N19mdyB7CisgCisgc3RydWN0IHNhZmV4Y2VsX2Rlc2NfcmluZyB7CisgCXZvaWQgKmJhc2U7CisrCXZvaWQgKnNoYmFzZTsKKyAJdm9pZCAqYmFzZV9lbmQ7CisrCXZvaWQgKnNoYmFzZV9lbmQ7CisgCWRtYV9hZGRyX3QgYmFzZV9kbWE7CisrCWRtYV9hZGRyX3Qgc2hiYXNlX2RtYTsKKyAKKyAJLyogd3JpdGUgYW5kIHJlYWQgcG9pbnRlcnMgKi8KKyAJdm9pZCAqd3JpdGU7CisrCXZvaWQgKnNod3JpdGU7CisgCXZvaWQgKnJlYWQ7CisgCisgCS8qIGRlc2NyaXB0b3IgZWxlbWVudCBvZmZzZXQgKi8KKy0JdW5zaWduZWQgb2Zmc2V0OworKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworKwl1bnNpZ25lZCBpbnQgc2hvZmZzZXQ7CisgfTsKKyAKKyBlbnVtIHNhZmV4Y2VsX2FsZ190eXBlIHsKK0BAIC02MDEsOSArNjY2LDExIEBAIHN0cnVjdCBzYWZleGNlbF9jb25maWcgeworIAorIAl1MzIgY2Rfc2l6ZTsKKyAJdTMyIGNkX29mZnNldDsKKysJdTMyIGNkc2hfb2Zmc2V0OworIAorIAl1MzIgcmRfc2l6ZTsKKyAJdTMyIHJkX29mZnNldDsKKysJdTMyIHJlc19vZmZzZXQ7CisgfTsKKyAKKyBzdHJ1Y3Qgc2FmZXhjZWxfd29ya19kYXRhIHsKK0BAIC02NTQsNiArNzIxLDEyIEBAIGVudW0gc2FmZXhjZWxfZWlwX3ZlcnNpb24geworIC8qIFByaW9yaXR5IHdlIHVzZSBmb3IgYWR2ZXJ0aXNpbmcgb3VyIGFsZ29yaXRobXMgKi8KKyAjZGVmaW5lIFNBRkVYQ0VMX0NSQV9QUklPUklUWQkJMzAwCisgCisrLyogU00zIGRpZ2VzdCByZXN1bHQgZm9yIHplcm8gbGVuZ3RoIG1lc3NhZ2UgKi8KKysjZGVmaW5lIEVJUDE5N19TTTNfWkVST01fSEFTSAkiXHgxQVx4QjJceDFEXHg4M1x4NTVceENGXHhBMVx4N0YiIFwKKysJCQkJIlx4OEVceDYxXHgxOVx4NDhceDMxXHhFOFx4MUFceDhGIiBcCisrCQkJCSJceDIyXHhCRVx4QzhceEM3XHgyOFx4RkVceEZCXHg3NCIgXAorKwkJCQkiXHg3RVx4RDBceDM1XHhFQlx4NTBceDgyXHhBQVx4MkIiCisrCisgLyogRUlQIGFsZ29yaXRobSBwcmVzZW5jZSBmbGFncyAqLworIGVudW0gc2FmZXhjZWxfZWlwX2FsZ29yaXRobXMgeworIAlTQUZFWENFTF9BTEdfQkMwICAgICAgPSBCSVQoNSksCitAQCAtNjk3LDE2ICs3NzAsMjMgQEAgc3RydWN0IHNhZmV4Y2VsX3JlZ2lzdGVyX29mZnNldHMgeworIGVudW0gc2FmZXhjZWxfZmxhZ3MgeworIAlFSVAxOTdfVFJDX0NBQ0hFCT0gQklUKDApLAorIAlTQUZFWENFTF9IV19FSVAxOTcJPSBCSVQoMSksCisrCUVJUDE5N19QRV9BUkIJCT0gQklUKDIpLAorKwlFSVAxOTdfSUNFCQk9IEJJVCgzKSwKKysJRUlQMTk3X1NJTVBMRV9UUkMJPSBCSVQoNCksCisgfTsKKyAKKyBzdHJ1Y3Qgc2FmZXhjZWxfaHdjb25maWcgeworIAllbnVtIHNhZmV4Y2VsX2VpcF9hbGdvcml0aG1zIGFsZ29fZmxhZ3M7CisgCWludCBod3ZlcjsKKyAJaW50IGhpYXZlcjsKKysJaW50IHBwdmVyOworIAlpbnQgcGV2ZXI7CisgCWludCBod2RhdGF3OworIAlpbnQgaHdjZnNpemU7CisgCWludCBod3Jmc2l6ZTsKKysJaW50IGh3bnVtcGVzOworKwlpbnQgaHdudW1yaW5nczsKKysJaW50IGh3bnVtcmFpYzsKKyB9OworIAorIHN0cnVjdCBzYWZleGNlbF9jcnlwdG9fcHJpdiB7CitAQCAtNzc4LDcgKzg1OCw3IEBAIHN0cnVjdCBzYWZleGNlbF9pbnZfcmVzdWx0IHsKKyAKKyB2b2lkIHNhZmV4Y2VsX2RlcXVldWUoc3RydWN0IHNhZmV4Y2VsX2NyeXB0b19wcml2ICpwcml2LCBpbnQgcmluZyk7CisgaW50IHNhZmV4Y2VsX3JkZXNjX2NoZWNrX2Vycm9ycyhzdHJ1Y3Qgc2FmZXhjZWxfY3J5cHRvX3ByaXYgKnByaXYsCistCQkJCXN0cnVjdCBzYWZleGNlbF9yZXN1bHRfZGVzYyAqcmRlc2MpOworKwkJCQl2b2lkICpyZHApOworIHZvaWQgc2FmZXhjZWxfY29tcGxldGUoc3RydWN0IHNhZmV4Y2VsX2NyeXB0b19wcml2ICpwcml2LCBpbnQgcmluZyk7CisgaW50IHNhZmV4Y2VsX2ludmFsaWRhdGVfY2FjaGUoc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICphc3luYywKKyAJCQkgICAgICBzdHJ1Y3Qgc2FmZXhjZWxfY3J5cHRvX3ByaXYgKnByaXYsCitAQCAtNzk3LDcgKzg3Nyw4IEBAIHN0cnVjdCBzYWZleGNlbF9jb21tYW5kX2Rlc2MgKnNhZmV4Y2VsX2EKKyAJCQkJCQkgYm9vbCBmaXJzdCwgYm9vbCBsYXN0LAorIAkJCQkJCSBkbWFfYWRkcl90IGRhdGEsIHUzMiBsZW4sCisgCQkJCQkJIHUzMiBmdWxsX2RhdGFfbGVuLAorLQkJCQkJCSBkbWFfYWRkcl90IGNvbnRleHQpOworKwkJCQkJCSBkbWFfYWRkcl90IGNvbnRleHQsCisrCQkJCQkJIHN0cnVjdCBzYWZleGNlbF90b2tlbiAqKmF0b2tlbik7Cisgc3RydWN0IHNhZmV4Y2VsX3Jlc3VsdF9kZXNjICpzYWZleGNlbF9hZGRfcmRlc2Moc3RydWN0IHNhZmV4Y2VsX2NyeXB0b19wcml2ICpwcml2LAorIAkJCQkJCSBpbnQgcmluZ19pZCwKKyAJCQkJCQlib29sIGZpcnN0LCBib29sIGxhc3QsCitAQCAtODUzLDUgKzkzNCw0MyBAQCBleHRlcm4gc3RydWN0IHNhZmV4Y2VsX2FsZ190ZW1wbGF0ZSBzYWZlCisgZXh0ZXJuIHN0cnVjdCBzYWZleGNlbF9hbGdfdGVtcGxhdGUgc2FmZXhjZWxfYWxnX3h0c19hZXM7CisgZXh0ZXJuIHN0cnVjdCBzYWZleGNlbF9hbGdfdGVtcGxhdGUgc2FmZXhjZWxfYWxnX2djbTsKKyBleHRlcm4gc3RydWN0IHNhZmV4Y2VsX2FsZ190ZW1wbGF0ZSBzYWZleGNlbF9hbGdfY2NtOworK2V4dGVybiBzdHJ1Y3Qgc2FmZXhjZWxfYWxnX3RlbXBsYXRlIHNhZmV4Y2VsX2FsZ19jcmMzMjsKKytleHRlcm4gc3RydWN0IHNhZmV4Y2VsX2FsZ190ZW1wbGF0ZSBzYWZleGNlbF9hbGdfY2JjbWFjOworK2V4dGVybiBzdHJ1Y3Qgc2FmZXhjZWxfYWxnX3RlbXBsYXRlIHNhZmV4Y2VsX2FsZ194Y2JjbWFjOworK2V4dGVybiBzdHJ1Y3Qgc2FmZXhjZWxfYWxnX3RlbXBsYXRlIHNhZmV4Y2VsX2FsZ19jbWFjOworK2V4dGVybiBzdHJ1Y3Qgc2FmZXhjZWxfYWxnX3RlbXBsYXRlIHNhZmV4Y2VsX2FsZ19jaGFjaGEyMDsKKytleHRlcm4gc3RydWN0IHNhZmV4Y2VsX2FsZ190ZW1wbGF0ZSBzYWZleGNlbF9hbGdfY2hhY2hhcG9seTsKKytleHRlcm4gc3RydWN0IHNhZmV4Y2VsX2FsZ190ZW1wbGF0ZSBzYWZleGNlbF9hbGdfY2hhY2hhcG9seV9lc3A7CisrZXh0ZXJuIHN0cnVjdCBzYWZleGNlbF9hbGdfdGVtcGxhdGUgc2FmZXhjZWxfYWxnX3NtMzsKKytleHRlcm4gc3RydWN0IHNhZmV4Y2VsX2FsZ190ZW1wbGF0ZSBzYWZleGNlbF9hbGdfaG1hY19zbTM7CisrZXh0ZXJuIHN0cnVjdCBzYWZleGNlbF9hbGdfdGVtcGxhdGUgc2FmZXhjZWxfYWxnX2VjYl9zbTQ7CisrZXh0ZXJuIHN0cnVjdCBzYWZleGNlbF9hbGdfdGVtcGxhdGUgc2FmZXhjZWxfYWxnX2NiY19zbTQ7CisrZXh0ZXJuIHN0cnVjdCBzYWZleGNlbF9hbGdfdGVtcGxhdGUgc2FmZXhjZWxfYWxnX29mYl9zbTQ7CisrZXh0ZXJuIHN0cnVjdCBzYWZleGNlbF9hbGdfdGVtcGxhdGUgc2FmZXhjZWxfYWxnX2NmYl9zbTQ7CisrZXh0ZXJuIHN0cnVjdCBzYWZleGNlbF9hbGdfdGVtcGxhdGUgc2FmZXhjZWxfYWxnX2N0cl9zbTQ7CisrZXh0ZXJuIHN0cnVjdCBzYWZleGNlbF9hbGdfdGVtcGxhdGUgc2FmZXhjZWxfYWxnX2F1dGhlbmNfaG1hY19zaGExX2NiY19zbTQ7CisrZXh0ZXJuIHN0cnVjdCBzYWZleGNlbF9hbGdfdGVtcGxhdGUgc2FmZXhjZWxfYWxnX2F1dGhlbmNfaG1hY19zbTNfY2JjX3NtNDsKKytleHRlcm4gc3RydWN0IHNhZmV4Y2VsX2FsZ190ZW1wbGF0ZSBzYWZleGNlbF9hbGdfYXV0aGVuY19obWFjX3NoYTFfY3RyX3NtNDsKKytleHRlcm4gc3RydWN0IHNhZmV4Y2VsX2FsZ190ZW1wbGF0ZSBzYWZleGNlbF9hbGdfYXV0aGVuY19obWFjX3NtM19jdHJfc200OworK2V4dGVybiBzdHJ1Y3Qgc2FmZXhjZWxfYWxnX3RlbXBsYXRlIHNhZmV4Y2VsX2FsZ19zaGEzXzIyNDsKKytleHRlcm4gc3RydWN0IHNhZmV4Y2VsX2FsZ190ZW1wbGF0ZSBzYWZleGNlbF9hbGdfc2hhM18yNTY7CisrZXh0ZXJuIHN0cnVjdCBzYWZleGNlbF9hbGdfdGVtcGxhdGUgc2FmZXhjZWxfYWxnX3NoYTNfMzg0OworK2V4dGVybiBzdHJ1Y3Qgc2FmZXhjZWxfYWxnX3RlbXBsYXRlIHNhZmV4Y2VsX2FsZ19zaGEzXzUxMjsKKytleHRlcm4gc3RydWN0IHNhZmV4Y2VsX2FsZ190ZW1wbGF0ZSBzYWZleGNlbF9hbGdfaG1hY19zaGEzXzIyNDsKKytleHRlcm4gc3RydWN0IHNhZmV4Y2VsX2FsZ190ZW1wbGF0ZSBzYWZleGNlbF9hbGdfaG1hY19zaGEzXzI1NjsKKytleHRlcm4gc3RydWN0IHNhZmV4Y2VsX2FsZ190ZW1wbGF0ZSBzYWZleGNlbF9hbGdfaG1hY19zaGEzXzM4NDsKKytleHRlcm4gc3RydWN0IHNhZmV4Y2VsX2FsZ190ZW1wbGF0ZSBzYWZleGNlbF9hbGdfaG1hY19zaGEzXzUxMjsKKytleHRlcm4gc3RydWN0IHNhZmV4Y2VsX2FsZ190ZW1wbGF0ZSBzYWZleGNlbF9hbGdfYXV0aGVuY19obWFjX3NoYTFfY2JjX2RlczsKKytleHRlcm4gc3RydWN0IHNhZmV4Y2VsX2FsZ190ZW1wbGF0ZSBzYWZleGNlbF9hbGdfYXV0aGVuY19obWFjX3NoYTI1Nl9jYmNfZGVzM19lZGU7CisrZXh0ZXJuIHN0cnVjdCBzYWZleGNlbF9hbGdfdGVtcGxhdGUgc2FmZXhjZWxfYWxnX2F1dGhlbmNfaG1hY19zaGEyMjRfY2JjX2RlczNfZWRlOworK2V4dGVybiBzdHJ1Y3Qgc2FmZXhjZWxfYWxnX3RlbXBsYXRlIHNhZmV4Y2VsX2FsZ19hdXRoZW5jX2htYWNfc2hhNTEyX2NiY19kZXMzX2VkZTsKKytleHRlcm4gc3RydWN0IHNhZmV4Y2VsX2FsZ190ZW1wbGF0ZSBzYWZleGNlbF9hbGdfYXV0aGVuY19obWFjX3NoYTM4NF9jYmNfZGVzM19lZGU7CisrZXh0ZXJuIHN0cnVjdCBzYWZleGNlbF9hbGdfdGVtcGxhdGUgc2FmZXhjZWxfYWxnX2F1dGhlbmNfaG1hY19zaGEyNTZfY2JjX2RlczsKKytleHRlcm4gc3RydWN0IHNhZmV4Y2VsX2FsZ190ZW1wbGF0ZSBzYWZleGNlbF9hbGdfYXV0aGVuY19obWFjX3NoYTIyNF9jYmNfZGVzOworK2V4dGVybiBzdHJ1Y3Qgc2FmZXhjZWxfYWxnX3RlbXBsYXRlIHNhZmV4Y2VsX2FsZ19hdXRoZW5jX2htYWNfc2hhNTEyX2NiY19kZXM7CisrZXh0ZXJuIHN0cnVjdCBzYWZleGNlbF9hbGdfdGVtcGxhdGUgc2FmZXhjZWxfYWxnX2F1dGhlbmNfaG1hY19zaGEzODRfY2JjX2RlczsKKytleHRlcm4gc3RydWN0IHNhZmV4Y2VsX2FsZ190ZW1wbGF0ZSBzYWZleGNlbF9hbGdfcmZjNDEwNl9nY207CisrZXh0ZXJuIHN0cnVjdCBzYWZleGNlbF9hbGdfdGVtcGxhdGUgc2FmZXhjZWxfYWxnX3JmYzQ1NDNfZ2NtOworK2V4dGVybiBzdHJ1Y3Qgc2FmZXhjZWxfYWxnX3RlbXBsYXRlIHNhZmV4Y2VsX2FsZ19yZmM0MzA5X2NjbTsKKyAKKyAjZW5kaWYKKy0tLSBhL2RyaXZlcnMvY3J5cHRvL2luc2lkZS1zZWN1cmUvc2FmZXhjZWxfaGFzaC5jCisrKysgYi9kcml2ZXJzL2NyeXB0by9pbnNpZGUtc2VjdXJlL3NhZmV4Y2VsX2hhc2guYworQEAgLTUsOSArNSwxMyBAQAorICAqIEFudG9pbmUgVGVuYXJ0IDxhbnRvaW5lLnRlbmFydEBmcmVlLWVsZWN0cm9ucy5jb20+CisgICovCisgCisrI2luY2x1ZGUgPGNyeXB0by9hZXMuaD4KKyAjaW5jbHVkZSA8Y3J5cHRvL2htYWMuaD4KKyAjaW5jbHVkZSA8Y3J5cHRvL21kNS5oPgorICNpbmNsdWRlIDxjcnlwdG8vc2hhLmg+CisrI2luY2x1ZGUgPGNyeXB0by9zaGEzLmg+CisrI2luY2x1ZGUgPGNyeXB0by9za2NpcGhlci5oPgorKyNpbmNsdWRlIDxjcnlwdG8vc20zLmg+CisgI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorICNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+CitAQCAtMTksOSArMjMsMTkgQEAgc3RydWN0IHNhZmV4Y2VsX2FoYXNoX2N0eCB7CisgCXN0cnVjdCBzYWZleGNlbF9jcnlwdG9fcHJpdiAqcHJpdjsKKyAKKyAJdTMyIGFsZzsKKy0KKy0JdTMyIGlwYWRbU0hBNTEyX0RJR0VTVF9TSVpFIC8gc2l6ZW9mKHUzMildOworLQl1MzIgb3BhZFtTSEE1MTJfRElHRVNUX1NJWkUgLyBzaXplb2YodTMyKV07CisrCXU4ICBrZXlfc3o7CisrCWJvb2wgY2JjbWFjOworKwlib29sIGRvX2ZhbGxiYWNrOworKwlib29sIGZiX2luaXRfZG9uZTsKKysJYm9vbCBmYl9kb19zZXRrZXk7CisrCisrCV9fbGUzMiBpcGFkW1NIQTNfNTEyX0JMT0NLX1NJWkUgLyBzaXplb2YoX19sZTMyKV07CisrCV9fbGUzMiBvcGFkW1NIQTNfNTEyX0JMT0NLX1NJWkUgLyBzaXplb2YoX19sZTMyKV07CisrCisrCXN0cnVjdCBjcnlwdG9fY2lwaGVyICprYWVzOworKwlzdHJ1Y3QgY3J5cHRvX2FoYXNoICpmYmFjazsKKysJc3RydWN0IGNyeXB0b19zaGFzaCAqc2hwcmU7CisrCXN0cnVjdCBzaGFzaF9kZXNjICpzaGRlc2M7CisgfTsKKyAKKyBzdHJ1Y3Qgc2FmZXhjZWxfYWhhc2hfcmVxIHsKK0BAIC0zMSw2ICs0NSw4IEBAIHN0cnVjdCBzYWZleGNlbF9haGFzaF9yZXEgeworIAlib29sIG5lZWRzX2ludjsKKyAJYm9vbCBobWFjX3psZW47CisgCWJvb2wgbGVuX2lzX2xlOworKwlib29sIG5vdF9maXJzdDsKKysJYm9vbCB4Y2JjbWFjOworIAorIAlpbnQgbmVudHM7CisgCWRtYV9hZGRyX3QgcmVzdWx0X2RtYTsKK0BAIC0zOSw3ICs1NSw5IEBAIHN0cnVjdCBzYWZleGNlbF9haGFzaF9yZXEgeworIAorIAl1OCBzdGF0ZV9zejsgICAgLyogZXhwZWN0ZWQgc3RhdGUgc2l6ZSwgb25seSBzZXQgb25jZSAqLworIAl1OCBibG9ja19zejsgICAgLyogYmxvY2sgc2l6ZSwgb25seSBzZXQgb25jZSAqLworLQl1MzIgc3RhdGVbU0hBNTEyX0RJR0VTVF9TSVpFIC8gc2l6ZW9mKHUzMildIF9fYWxpZ25lZChzaXplb2YodTMyKSk7CisrCXU4IGRpZ2VzdF9zejsgICAvKiBvdXRwdXQgZGlnZXN0IHNpemUsIG9ubHkgc2V0IG9uY2UgKi8KKysJX19sZTMyIHN0YXRlW1NIQTNfNTEyX0JMT0NLX1NJWkUgLworKwkJICAgICBzaXplb2YoX19sZTMyKV0gX19hbGlnbmVkKHNpemVvZihfX2xlMzIpKTsKKyAKKyAJdTY0IGxlbjsKKyAJdTY0IHByb2Nlc3NlZDsKK0BAIC01NywyMiArNzUsMzYgQEAgc3RhdGljIGlubGluZSB1NjQgc2FmZXhjZWxfcXVldWVkX2xlbihzdAorIH0KKyAKKyBzdGF0aWMgdm9pZCBzYWZleGNlbF9oYXNoX3Rva2VuKHN0cnVjdCBzYWZleGNlbF9jb21tYW5kX2Rlc2MgKmNkZXNjLAorLQkJCQl1MzIgaW5wdXRfbGVuZ3RoLCB1MzIgcmVzdWx0X2xlbmd0aCkKKysJCQkJdTMyIGlucHV0X2xlbmd0aCwgdTMyIHJlc3VsdF9sZW5ndGgsCisrCQkJCWJvb2wgY2JjbWFjKQorIHsKKyAJc3RydWN0IHNhZmV4Y2VsX3Rva2VuICp0b2tlbiA9CisgCQkoc3RydWN0IHNhZmV4Y2VsX3Rva2VuICopY2Rlc2MtPmNvbnRyb2xfZGF0YS50b2tlbjsKKyAKKyAJdG9rZW5bMF0ub3Bjb2RlID0gRUlQMTk3X1RPS0VOX09QQ09ERV9ESVJFQ1RJT047CisgCXRva2VuWzBdLnBhY2tldF9sZW5ndGggPSBpbnB1dF9sZW5ndGg7CistCXRva2VuWzBdLnN0YXQgPSBFSVAxOTdfVE9LRU5fU1RBVF9MQVNUX0hBU0g7CisgCXRva2VuWzBdLmluc3RydWN0aW9ucyA9IEVJUDE5N19UT0tFTl9JTlNfVFlQRV9IQVNIOworIAorLQl0b2tlblsxXS5vcGNvZGUgPSBFSVAxOTdfVE9LRU5fT1BDT0RFX0lOU0VSVDsKKy0JdG9rZW5bMV0ucGFja2V0X2xlbmd0aCA9IHJlc3VsdF9sZW5ndGg7CistCXRva2VuWzFdLnN0YXQgPSBFSVAxOTdfVE9LRU5fU1RBVF9MQVNUX0hBU0ggfAorKwlpbnB1dF9sZW5ndGggJj0gMTU7CisrCWlmICh1bmxpa2VseShjYmNtYWMgJiYgaW5wdXRfbGVuZ3RoKSkgeworKwkJdG9rZW5bMF0uc3RhdCA9ICAwOworKwkJdG9rZW5bMV0ub3Bjb2RlID0gRUlQMTk3X1RPS0VOX09QQ09ERV9JTlNFUlQ7CisrCQl0b2tlblsxXS5wYWNrZXRfbGVuZ3RoID0gMTYgLSBpbnB1dF9sZW5ndGg7CisrCQl0b2tlblsxXS5zdGF0ID0gRUlQMTk3X1RPS0VOX1NUQVRfTEFTVF9IQVNIOworKwkJdG9rZW5bMV0uaW5zdHJ1Y3Rpb25zID0gRUlQMTk3X1RPS0VOX0lOU19UWVBFX0hBU0g7CisrCX0gZWxzZSB7CisrCQl0b2tlblswXS5zdGF0ID0gRUlQMTk3X1RPS0VOX1NUQVRfTEFTVF9IQVNIOworKwkJZWlwMTk3X25vb3BfdG9rZW4oJnRva2VuWzFdKTsKKysJfQorKworKwl0b2tlblsyXS5vcGNvZGUgPSBFSVAxOTdfVE9LRU5fT1BDT0RFX0lOU0VSVDsKKysJdG9rZW5bMl0uc3RhdCA9IEVJUDE5N19UT0tFTl9TVEFUX0xBU1RfSEFTSCB8CisgCQkJRUlQMTk3X1RPS0VOX1NUQVRfTEFTVF9QQUNLRVQ7CistCXRva2VuWzFdLmluc3RydWN0aW9ucyA9IEVJUDE5N19UT0tFTl9JTlNfVFlQRV9PVVRQVVQgfAorKwl0b2tlblsyXS5wYWNrZXRfbGVuZ3RoID0gcmVzdWx0X2xlbmd0aDsKKysJdG9rZW5bMl0uaW5zdHJ1Y3Rpb25zID0gRUlQMTk3X1RPS0VOX0lOU19UWVBFX09VVFBVVCB8CisgCQkJCUVJUDE5N19UT0tFTl9JTlNfSU5TRVJUX0hBU0hfRElHRVNUOworKworKwllaXAxOTdfbm9vcF90b2tlbigmdG9rZW5bM10pOworIH0KKyAKKyBzdGF0aWMgdm9pZCBzYWZleGNlbF9jb250ZXh0X2NvbnRyb2woc3RydWN0IHNhZmV4Y2VsX2FoYXNoX2N0eCAqY3R4LAorQEAgLTgyLDI5ICsxMTQsNDkgQEAgc3RhdGljIHZvaWQgc2FmZXhjZWxfY29udGV4dF9jb250cm9sKHN0cgorIAlzdHJ1Y3Qgc2FmZXhjZWxfY3J5cHRvX3ByaXYgKnByaXYgPSBjdHgtPnByaXY7CisgCXU2NCBjb3VudCA9IDA7CisgCistCWNkZXNjLT5jb250cm9sX2RhdGEuY29udHJvbDAgfD0gY3R4LT5hbGc7CisrCWNkZXNjLT5jb250cm9sX2RhdGEuY29udHJvbDAgPSBjdHgtPmFsZzsKKysJY2Rlc2MtPmNvbnRyb2xfZGF0YS5jb250cm9sMSA9IDA7CisgCisgCS8qCisgCSAqIENvcHkgdGhlIGlucHV0IGRpZ2VzdCBpZiBuZWVkZWQsIGFuZCBzZXR1cCB0aGUgY29udGV4dAorIAkgKiBmaWVsZHMuIERvIHRoaXMgbm93IGFzIHdlIG5lZWQgaXQgdG8gc2V0dXAgdGhlIGZpcnN0IGNvbW1hbmQKKyAJICogZGVzY3JpcHRvci4KKyAJICovCistCWlmICghcmVxLT5wcm9jZXNzZWQpIHsKKy0JCS8qIEZpcnN0IC0gYW5kIHBvc3NpYmx5IG9ubHkgLSBibG9jayBvZiBiYXNpYyBoYXNoIG9ubHkgKi8KKy0JCWlmIChyZXEtPmZpbmlzaCkgeworKwlpZiAodW5saWtlbHkocmVxLT5kaWdlc3QgPT0gQ09OVEVYVF9DT05UUk9MX0RJR0VTVF9YQ00pKSB7CisrCQlpZiAocmVxLT54Y2JjbWFjKQorKwkJCW1lbWNweShjdHgtPmJhc2UuY3R4ci0+ZGF0YSwgY3R4LT5pcGFkLCBjdHgtPmtleV9zeik7CisrCQllbHNlCisrCQkJbWVtY3B5KGN0eC0+YmFzZS5jdHhyLT5kYXRhLCByZXEtPnN0YXRlLCByZXEtPnN0YXRlX3N6KTsKKysKKysJCWlmICghcmVxLT5maW5pc2ggJiYgcmVxLT54Y2JjbWFjKQorKwkJCWNkZXNjLT5jb250cm9sX2RhdGEuY29udHJvbDAgfD0KKysJCQkJQ09OVEVYVF9DT05UUk9MX0RJR0VTVF9YQ00gfAorKwkJCQlDT05URVhUX0NPTlRST0xfVFlQRV9IQVNIX09VVCAgfAorKwkJCQlDT05URVhUX0NPTlRST0xfTk9fRklOSVNIX0hBU0ggfAorKwkJCQlDT05URVhUX0NPTlRST0xfU0laRShyZXEtPnN0YXRlX3N6IC8KKysJCQkJCQkgICAgIHNpemVvZih1MzIpKTsKKysJCWVsc2UKKyAJCQljZGVzYy0+Y29udHJvbF9kYXRhLmNvbnRyb2wwIHw9CisrCQkJCUNPTlRFWFRfQ09OVFJPTF9ESUdFU1RfWENNIHwKKysJCQkJQ09OVEVYVF9DT05UUk9MX1RZUEVfSEFTSF9PVVQgIHwKKysJCQkJQ09OVEVYVF9DT05UUk9MX1NJWkUocmVxLT5zdGF0ZV9zeiAvCisrCQkJCQkJICAgICBzaXplb2YodTMyKSk7CisrCQlyZXR1cm47CisrCX0gZWxzZSBpZiAoIXJlcS0+cHJvY2Vzc2VkKSB7CisrCQkvKiBGaXJzdCAtIGFuZCBwb3NzaWJseSBvbmx5IC0gYmxvY2sgb2YgYmFzaWMgaGFzaCBvbmx5ICovCisrCQlpZiAocmVxLT5maW5pc2gpCisrCQkJY2Rlc2MtPmNvbnRyb2xfZGF0YS5jb250cm9sMCB8PSByZXEtPmRpZ2VzdCB8CisgCQkJCUNPTlRFWFRfQ09OVFJPTF9UWVBFX0hBU0hfT1VUIHwKKyAJCQkJQ09OVEVYVF9DT05UUk9MX1JFU1RBUlRfSEFTSCAgfAorIAkJCQkvKiBlbnN1cmUgaXRzIG5vdCAwISAqLworIAkJCQlDT05URVhUX0NPTlRST0xfU0laRSgxKTsKKy0JCX0gZWxzZSB7CistCQkJY2Rlc2MtPmNvbnRyb2xfZGF0YS5jb250cm9sMCB8PQorKwkJZWxzZQorKwkJCWNkZXNjLT5jb250cm9sX2RhdGEuY29udHJvbDAgfD0gcmVxLT5kaWdlc3QgfAorIAkJCQlDT05URVhUX0NPTlRST0xfVFlQRV9IQVNIX09VVCAgfAorIAkJCQlDT05URVhUX0NPTlRST0xfUkVTVEFSVF9IQVNIICAgfAorIAkJCQlDT05URVhUX0NPTlRST0xfTk9fRklOSVNIX0hBU0ggfAorIAkJCQkvKiBlbnN1cmUgaXRzIG5vdCAwISAqLworIAkJCQlDT05URVhUX0NPTlRST0xfU0laRSgxKTsKKy0JCX0KKyAJCXJldHVybjsKKyAJfQorIAorQEAgLTIwNCw3ICsyNTYsNyBAQCBzdGF0aWMgaW50IHNhZmV4Y2VsX2hhbmRsZV9yZXFfcmVzdWx0KHN0CisgCX0KKyAKKyAJaWYgKHNyZXEtPnJlc3VsdF9kbWEpIHsKKy0JCWRtYV91bm1hcF9zaW5nbGUocHJpdi0+ZGV2LCBzcmVxLT5yZXN1bHRfZG1hLCBzcmVxLT5zdGF0ZV9zeiwKKysJCWRtYV91bm1hcF9zaW5nbGUocHJpdi0+ZGV2LCBzcmVxLT5yZXN1bHRfZG1hLCBzcmVxLT5kaWdlc3Rfc3osCisgCQkJCSBETUFfRlJPTV9ERVZJQ0UpOworIAkJc3JlcS0+cmVzdWx0X2RtYSA9IDA7CisgCX0KK0BAIC0yMjMsMTQgKzI3NSwxNSBAQCBzdGF0aWMgaW50IHNhZmV4Y2VsX2hhbmRsZV9yZXFfcmVzdWx0KHN0CisgCQkJbWVtY3B5KHNyZXEtPmNhY2hlLCBzcmVxLT5zdGF0ZSwKKyAJCQkgICAgICAgY3J5cHRvX2FoYXNoX2RpZ2VzdHNpemUoYWhhc2gpKTsKKyAKKy0JCQltZW1jcHkoc3JlcS0+c3RhdGUsIGN0eC0+b3BhZCwgc3JlcS0+c3RhdGVfc3opOworKwkJCW1lbWNweShzcmVxLT5zdGF0ZSwgY3R4LT5vcGFkLCBzcmVxLT5kaWdlc3Rfc3opOworIAorIAkJCXNyZXEtPmxlbiA9IHNyZXEtPmJsb2NrX3N6ICsKKyAJCQkJICAgIGNyeXB0b19haGFzaF9kaWdlc3RzaXplKGFoYXNoKTsKKyAJCQlzcmVxLT5wcm9jZXNzZWQgPSBzcmVxLT5ibG9ja19zejsKKyAJCQlzcmVxLT5obWFjID0gMDsKKyAKKy0JCQljdHgtPmJhc2UubmVlZHNfaW52ID0gdHJ1ZTsKKysJCQlpZiAocHJpdi0+ZmxhZ3MgJiBFSVAxOTdfVFJDX0NBQ0hFKQorKwkJCQljdHgtPmJhc2UubmVlZHNfaW52ID0gdHJ1ZTsKKyAJCQlhcmVxLT5uYnl0ZXMgPSAwOworIAkJCXNhZmV4Y2VsX2FoYXNoX2VucXVldWUoYXJlcSk7CisgCitAQCAtMjM4LDggKzI5MSwxNCBAQCBzdGF0aWMgaW50IHNhZmV4Y2VsX2hhbmRsZV9yZXFfcmVzdWx0KHN0CisgCQkJcmV0dXJuIDE7CisgCQl9CisgCistCQltZW1jcHkoYXJlcS0+cmVzdWx0LCBzcmVxLT5zdGF0ZSwKKy0JCSAgICAgICBjcnlwdG9fYWhhc2hfZGlnZXN0c2l6ZShhaGFzaCkpOworKwkJaWYgKHVubGlrZWx5KHNyZXEtPmRpZ2VzdCA9PSBDT05URVhUX0NPTlRST0xfRElHRVNUX1hDTSAmJgorKwkJCSAgICAgY3R4LT5hbGcgPT0gQ09OVEVYVF9DT05UUk9MX0NSWVBUT19BTEdfQ1JDMzIpKSB7CisrCQkJLyogVW5kbyBmaW5hbCBYT1Igd2l0aCAweGZmZmZmZmZmIC4uLiovCisrCQkJKihfX2xlMzIgKilhcmVxLT5yZXN1bHQgPSB+c3JlcS0+c3RhdGVbMF07CisrCQl9IGVsc2UgeworKwkJCW1lbWNweShhcmVxLT5yZXN1bHQsIHNyZXEtPnN0YXRlLAorKwkJCSAgICAgICBjcnlwdG9fYWhhc2hfZGlnZXN0c2l6ZShhaGFzaCkpOworKwkJfQorIAl9CisgCisgCWNhY2hlX2xlbiA9IHNhZmV4Y2VsX3F1ZXVlZF9sZW4oc3JlcSk7CitAQCAtMjYxLDEwICszMjAsMTEgQEAgc3RhdGljIGludCBzYWZleGNlbF9haGFzaF9zZW5kX3JlcShzdHJ1YworIAlzdHJ1Y3Qgc2FmZXhjZWxfY29tbWFuZF9kZXNjICpjZGVzYywgKmZpcnN0X2NkZXNjID0gTlVMTDsKKyAJc3RydWN0IHNhZmV4Y2VsX3Jlc3VsdF9kZXNjICpyZGVzYzsKKyAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKy0JaW50IGksIGV4dHJhID0gMCwgbl9jZGVzYyA9IDAsIHJldCA9IDA7CistCXU2NCBxdWV1ZWQsIGxlbiwgY2FjaGVfbGVuOworKwlzdHJ1Y3Qgc2FmZXhjZWxfdG9rZW4gKmRtbXk7CisrCWludCBpLCBleHRyYSA9IDAsIG5fY2Rlc2MgPSAwLCByZXQgPSAwLCBjYWNoZV9sZW4sIHNraXAgPSAwOworKwl1NjQgcXVldWVkLCBsZW47CisgCistCXF1ZXVlZCA9IGxlbiA9IHNhZmV4Y2VsX3F1ZXVlZF9sZW4ocmVxKTsKKysJcXVldWVkID0gc2FmZXhjZWxfcXVldWVkX2xlbihyZXEpOworIAlpZiAocXVldWVkIDw9IEhBU0hfQ0FDSEVfU0laRSkKKyAJCWNhY2hlX2xlbiA9IHF1ZXVlZDsKKyAJZWxzZQorQEAgLTI4NywxNSArMzQ3LDUyIEBAIHN0YXRpYyBpbnQgc2FmZXhjZWxfYWhhc2hfc2VuZF9yZXEoc3RydWMKKyAJCQkJICAgYXJlcS0+bmJ5dGVzIC0gZXh0cmEpOworIAorIAkJcXVldWVkIC09IGV4dHJhOworLQkJbGVuIC09IGV4dHJhOworIAorIAkJaWYgKCFxdWV1ZWQpIHsKKyAJCQkqY29tbWFuZHMgPSAwOworIAkJCSpyZXN1bHRzID0gMDsKKyAJCQlyZXR1cm4gMDsKKyAJCX0KKysKKysJCWV4dHJhID0gMDsKKysJfQorKworKwlpZiAodW5saWtlbHkocmVxLT54Y2JjbWFjICYmIHJlcS0+cHJvY2Vzc2VkID4gQUVTX0JMT0NLX1NJWkUpKSB7CisrCQlpZiAodW5saWtlbHkoY2FjaGVfbGVuIDwgQUVTX0JMT0NLX1NJWkUpKSB7CisrCQkJLyoKKysJCQkgKiBDYWNoZSBjb250YWlucyBsZXNzIHRoYW4gMSBmdWxsIGJsb2NrLCBjb21wbGV0ZS4KKysJCQkgKi8KKysJCQlleHRyYSA9IEFFU19CTE9DS19TSVpFIC0gY2FjaGVfbGVuOworKwkJCWlmIChxdWV1ZWQgPiBjYWNoZV9sZW4pIHsKKysJCQkJLyogTW9yZSBkYXRhIGZvbGxvd3M6IGJvcnJvdyBieXRlcyAqLworKwkJCQl1NjQgdG1wID0gcXVldWVkIC0gY2FjaGVfbGVuOworKworKwkJCQlza2lwID0gbWluX3QodTY0LCB0bXAsIGV4dHJhKTsKKysJCQkJc2dfcGNvcHlfdG9fYnVmZmVyKGFyZXEtPnNyYywKKysJCQkJCXNnX25lbnRzKGFyZXEtPnNyYyksCisrCQkJCQlyZXEtPmNhY2hlICsgY2FjaGVfbGVuLAorKwkJCQkJc2tpcCwgMCk7CisrCQkJfQorKwkJCWV4dHJhIC09IHNraXA7CisrCQkJbWVtc2V0KHJlcS0+Y2FjaGUgKyBjYWNoZV9sZW4gKyBza2lwLCAwLCBleHRyYSk7CisrCQkJaWYgKCFjdHgtPmNiY21hYyAmJiBleHRyYSkgeworKwkJCQkvLyAxMC0gcGFkZGluZyBmb3IgWENCQ01BQyAmIENNQUMKKysJCQkJcmVxLT5jYWNoZVtjYWNoZV9sZW4gKyBza2lwXSA9IDB4ODA7CisrCQkJCS8vIEhXIHdpbGwgdXNlIEsyIGlzbyBLMyAtIGNvbXBlbnNhdGUhCisrCQkJCWZvciAoaSA9IDA7IGkgPCBBRVNfQkxPQ0tfU0laRSAvIHNpemVvZih1MzIpOyBpKyspCisrCQkJCQkoKF9fYmUzMiAqKXJlcS0+Y2FjaGUpW2ldIF49CisrCQkJCQkgIGNwdV90b19iZTMyKGxlMzJfdG9fY3B1KAorKwkJCQkJICAgIGN0eC0+aXBhZFtpXSBeIGN0eC0+aXBhZFtpICsgNF0pKTsKKysJCQl9CisrCQkJY2FjaGVfbGVuID0gQUVTX0JMT0NLX1NJWkU7CisrCQkJcXVldWVkID0gcXVldWVkICsgZXh0cmE7CisrCQl9CisrCisrCQkvKiBYQ0JDIGNvbnRpbnVlOiBYT1IgcHJldmlvdXMgcmVzdWx0IGludG8gMXN0IHdvcmQgKi8KKysJCWNyeXB0b194b3IocmVxLT5jYWNoZSwgKGNvbnN0IHU4ICopcmVxLT5zdGF0ZSwgQUVTX0JMT0NLX1NJWkUpOworIAl9CisgCisrCWxlbiA9IHF1ZXVlZDsKKyAJLyogQWRkIGEgY29tbWFuZCBkZXNjcmlwdG9yIGZvciB0aGUgY2FjaGVkIGRhdGEsIGlmIGFueSAqLworIAlpZiAoY2FjaGVfbGVuKSB7CisgCQlyZXEtPmNhY2hlX2RtYSA9IGRtYV9tYXBfc2luZ2xlKHByaXYtPmRldiwgcmVxLT5jYWNoZSwKK0BAIC0zMDYsOCArNDAzLDkgQEAgc3RhdGljIGludCBzYWZleGNlbF9haGFzaF9zZW5kX3JlcShzdHJ1YworIAkJcmVxLT5jYWNoZV9zeiA9IGNhY2hlX2xlbjsKKyAJCWZpcnN0X2NkZXNjID0gc2FmZXhjZWxfYWRkX2NkZXNjKHByaXYsIHJpbmcsIDEsCisgCQkJCQkJIChjYWNoZV9sZW4gPT0gbGVuKSwKKy0JCQkJCQkgcmVxLT5jYWNoZV9kbWEsIGNhY2hlX2xlbiwgbGVuLAorLQkJCQkJCSBjdHgtPmJhc2UuY3R4cl9kbWEpOworKwkJCQkJCSByZXEtPmNhY2hlX2RtYSwgY2FjaGVfbGVuLAorKwkJCQkJCSBsZW4sIGN0eC0+YmFzZS5jdHhyX2RtYSwKKysJCQkJCQkgJmRtbXkpOworIAkJaWYgKElTX0VSUihmaXJzdF9jZGVzYykpIHsKKyAJCQlyZXQgPSBQVFJfRVJSKGZpcnN0X2NkZXNjKTsKKyAJCQlnb3RvIHVubWFwX2NhY2hlOworQEAgLTMxOSwxMCArNDE3LDYgQEAgc3RhdGljIGludCBzYWZleGNlbF9haGFzaF9zZW5kX3JlcShzdHJ1YworIAkJCWdvdG8gc2VuZF9jb21tYW5kOworIAl9CisgCistCS8qIFNraXAgZGVzY3JpcHRvciBnZW5lcmF0aW9uIGZvciB6ZXJvLWxlbmd0aCByZXF1ZXN0cyAqLworLQlpZiAoIWFyZXEtPm5ieXRlcykKKy0JCWdvdG8gc2VuZF9jb21tYW5kOworLQorIAkvKiBOb3cgaGFuZGxlIHRoZSBjdXJyZW50IGFoYXNoIHJlcXVlc3QgYnVmZmVyKHMpICovCisgCXJlcS0+bmVudHMgPSBkbWFfbWFwX3NnKHByaXYtPmRldiwgYXJlcS0+c3JjLAorIAkJCQlzZ19uZW50c19mb3JfbGVuKGFyZXEtPnNyYywKK0BAIC0zMzYsMjYgKzQzMCwzNCBAQCBzdGF0aWMgaW50IHNhZmV4Y2VsX2FoYXNoX3NlbmRfcmVxKHN0cnVjCisgCWZvcl9lYWNoX3NnKGFyZXEtPnNyYywgc2csIHJlcS0+bmVudHMsIGkpIHsKKyAJCWludCBzZ2xlbiA9IHNnX2RtYV9sZW4oc2cpOworIAorKwkJaWYgKHVubGlrZWx5KHNnbGVuIDw9IHNraXApKSB7CisrCQkJc2tpcCAtPSBzZ2xlbjsKKysJCQljb250aW51ZTsKKysJCX0KKysKKyAJCS8qIERvIG5vdCBvdmVyZmxvdyB0aGUgcmVxdWVzdCAqLworLQkJaWYgKHF1ZXVlZCA8IHNnbGVuKQorKwkJaWYgKChxdWV1ZWQgKyBza2lwKSA8PSBzZ2xlbikKKyAJCQlzZ2xlbiA9IHF1ZXVlZDsKKysJCWVsc2UKKysJCQlzZ2xlbiAtPSBza2lwOworIAorIAkJY2Rlc2MgPSBzYWZleGNlbF9hZGRfY2Rlc2MocHJpdiwgcmluZywgIW5fY2Rlc2MsCisgCQkJCQkgICAhKHF1ZXVlZCAtIHNnbGVuKSwKKy0JCQkJCSAgIHNnX2RtYV9hZGRyZXNzKHNnKSwKKy0JCQkJCSAgIHNnbGVuLCBsZW4sIGN0eC0+YmFzZS5jdHhyX2RtYSk7CisrCQkJCQkgICBzZ19kbWFfYWRkcmVzcyhzZykgKyBza2lwLCBzZ2xlbiwKKysJCQkJCSAgIGxlbiwgY3R4LT5iYXNlLmN0eHJfZG1hLCAmZG1teSk7CisgCQlpZiAoSVNfRVJSKGNkZXNjKSkgeworIAkJCXJldCA9IFBUUl9FUlIoY2Rlc2MpOworIAkJCWdvdG8gdW5tYXBfc2c7CisgCQl9CistCQluX2NkZXNjKys7CisgCistCQlpZiAobl9jZGVzYyA9PSAxKQorKwkJaWYgKCFuX2NkZXNjKQorIAkJCWZpcnN0X2NkZXNjID0gY2Rlc2M7CisrCQluX2NkZXNjKys7CisgCisgCQlxdWV1ZWQgLT0gc2dsZW47CisgCQlpZiAoIXF1ZXVlZCkKKyAJCQlicmVhazsKKysJCXNraXAgPSAwOworIAl9CisgCisgc2VuZF9jb21tYW5kOgorQEAgLTM2Myw5ICs0NjUsOSBAQCBzZW5kX2NvbW1hbmQ6CisgCXNhZmV4Y2VsX2NvbnRleHRfY29udHJvbChjdHgsIHJlcSwgZmlyc3RfY2Rlc2MpOworIAorIAkvKiBBZGQgdGhlIHRva2VuICovCistCXNhZmV4Y2VsX2hhc2hfdG9rZW4oZmlyc3RfY2Rlc2MsIGxlbiwgcmVxLT5zdGF0ZV9zeik7CisrCXNhZmV4Y2VsX2hhc2hfdG9rZW4oZmlyc3RfY2Rlc2MsIGxlbiwgcmVxLT5kaWdlc3Rfc3osIGN0eC0+Y2JjbWFjKTsKKyAKKy0JcmVxLT5yZXN1bHRfZG1hID0gZG1hX21hcF9zaW5nbGUocHJpdi0+ZGV2LCByZXEtPnN0YXRlLCByZXEtPnN0YXRlX3N6LAorKwlyZXEtPnJlc3VsdF9kbWEgPSBkbWFfbWFwX3NpbmdsZShwcml2LT5kZXYsIHJlcS0+c3RhdGUsIHJlcS0+ZGlnZXN0X3N6LAorIAkJCQkJIERNQV9GUk9NX0RFVklDRSk7CisgCWlmIChkbWFfbWFwcGluZ19lcnJvcihwcml2LT5kZXYsIHJlcS0+cmVzdWx0X2RtYSkpIHsKKyAJCXJldCA9IC1FSU5WQUw7CitAQCAtMzc0LDcgKzQ3Niw3IEBAIHNlbmRfY29tbWFuZDoKKyAKKyAJLyogQWRkIGEgcmVzdWx0IGRlc2NyaXB0b3IgKi8KKyAJcmRlc2MgPSBzYWZleGNlbF9hZGRfcmRlc2MocHJpdiwgcmluZywgMSwgMSwgcmVxLT5yZXN1bHRfZG1hLAorLQkJCQkgICByZXEtPnN0YXRlX3N6KTsKKysJCQkJICAgcmVxLT5kaWdlc3Rfc3opOworIAlpZiAoSVNfRVJSKHJkZXNjKSkgeworIAkJcmV0ID0gUFRSX0VSUihyZGVzYyk7CisgCQlnb3RvIHVubWFwX3Jlc3VsdDsKK0BAIC0zODIsMTcgKzQ4NCwyMCBAQCBzZW5kX2NvbW1hbmQ6CisgCisgCXNhZmV4Y2VsX3Jkcl9yZXFfc2V0KHByaXYsIHJpbmcsIHJkZXNjLCAmYXJlcS0+YmFzZSk7CisgCistCXJlcS0+cHJvY2Vzc2VkICs9IGxlbjsKKysJcmVxLT5wcm9jZXNzZWQgKz0gbGVuIC0gZXh0cmE7CisgCisgCSpjb21tYW5kcyA9IG5fY2Rlc2M7CisgCSpyZXN1bHRzID0gMTsKKyAJcmV0dXJuIDA7CisgCisgdW5tYXBfcmVzdWx0OgorLQlkbWFfdW5tYXBfc2luZ2xlKHByaXYtPmRldiwgcmVxLT5yZXN1bHRfZG1hLCByZXEtPnN0YXRlX3N6LAorKwlkbWFfdW5tYXBfc2luZ2xlKHByaXYtPmRldiwgcmVxLT5yZXN1bHRfZG1hLCByZXEtPmRpZ2VzdF9zeiwKKyAJCQkgRE1BX0ZST01fREVWSUNFKTsKKyB1bm1hcF9zZzoKKy0JZG1hX3VubWFwX3NnKHByaXYtPmRldiwgYXJlcS0+c3JjLCByZXEtPm5lbnRzLCBETUFfVE9fREVWSUNFKTsKKysJaWYgKHJlcS0+bmVudHMpIHsKKysJCWRtYV91bm1hcF9zZyhwcml2LT5kZXYsIGFyZXEtPnNyYywgcmVxLT5uZW50cywgRE1BX1RPX0RFVklDRSk7CisrCQlyZXEtPm5lbnRzID0gMDsKKysJfQorIGNkZXNjX3JvbGxiYWNrOgorIAlmb3IgKGkgPSAwOyBpIDwgbl9jZGVzYzsgaSsrKQorIAkJc2FmZXhjZWxfcmluZ19yb2xsYmFja193cHRyKHByaXYsICZwcml2LT5yaW5nW3JpbmddLmNkcik7CitAQCAtNTkwLDE2ICs2OTUsMTIgQEAgc3RhdGljIGludCBzYWZleGNlbF9haGFzaF9lbnF1ZXVlKHN0cnVjdAorIAorIAlpZiAoY3R4LT5iYXNlLmN0eHIpIHsKKyAJCWlmIChwcml2LT5mbGFncyAmIEVJUDE5N19UUkNfQ0FDSEUgJiYgIWN0eC0+YmFzZS5uZWVkc19pbnYgJiYKKy0JCSAgICByZXEtPnByb2Nlc3NlZCAmJgorLQkJICAgICgvKiBpbnZhbGlkYXRlIGZvciBiYXNpYyBoYXNoIGNvbnRpbnVhdGlvbiBmaW5pc2ggKi8KKy0JCSAgICAgKHJlcS0+ZmluaXNoICYmCistCQkgICAgICAocmVxLT5kaWdlc3QgPT0gQ09OVEVYVF9DT05UUk9MX0RJR0VTVF9QUkVDT01QVVRFRCkpIHx8CisrCQkgICAgIC8qIGludmFsaWRhdGUgZm9yICphbnkqIG5vbi1YQ0JDIGNvbnRpbnVhdGlvbiAqLworKwkJICAgKChyZXEtPm5vdF9maXJzdCAmJiAhcmVxLT54Y2JjbWFjKSB8fAorIAkJICAgICAvKiBpbnZhbGlkYXRlIGlmIChpKWRpZ2VzdCBjaGFuZ2VkICovCisgCQkgICAgIG1lbWNtcChjdHgtPmJhc2UuY3R4ci0+ZGF0YSwgcmVxLT5zdGF0ZSwgcmVxLT5zdGF0ZV9zeikgfHwKKy0JCSAgICAgLyogaW52YWxpZGF0ZSBmb3IgSE1BQyBjb250aW51YXRpb24gZmluaXNoICovCistCQkgICAgIChyZXEtPmZpbmlzaCAmJiAocmVxLT5wcm9jZXNzZWQgIT0gcmVxLT5ibG9ja19zeikpIHx8CisgCQkgICAgIC8qIGludmFsaWRhdGUgZm9yIEhNQUMgZmluaXNoIHdpdGggb2RpZ2VzdCBjaGFuZ2VkICovCistCQkgICAgIChyZXEtPmZpbmlzaCAmJgorKwkJICAgICAocmVxLT5maW5pc2ggJiYgcmVxLT5obWFjICYmCisgCQkgICAgICBtZW1jbXAoY3R4LT5iYXNlLmN0eHItPmRhdGEgKyAocmVxLT5zdGF0ZV9zej4+MiksCisgCQkJICAgICBjdHgtPm9wYWQsIHJlcS0+c3RhdGVfc3opKSkpCisgCQkJLyoKK0BAIC02MjIsNiArNzIzLDcgQEAgc3RhdGljIGludCBzYWZleGNlbF9haGFzaF9lbnF1ZXVlKHN0cnVjdAorIAkJaWYgKCFjdHgtPmJhc2UuY3R4cikKKyAJCQlyZXR1cm4gLUVOT01FTTsKKyAJfQorKwlyZXEtPm5vdF9maXJzdCA9IHRydWU7CisgCisgCXJpbmcgPSBjdHgtPmJhc2UucmluZzsKKyAKK0BAIC02OTEsOCArNzkzLDM0IEBAIHN0YXRpYyBpbnQgc2FmZXhjZWxfYWhhc2hfZmluYWwoc3RydWN0IGEKKyAJCWVsc2UgaWYgKGN0eC0+YWxnID09IENPTlRFWFRfQ09OVFJPTF9DUllQVE9fQUxHX1NIQTUxMikKKyAJCQltZW1jcHkoYXJlcS0+cmVzdWx0LCBzaGE1MTJfemVyb19tZXNzYWdlX2hhc2gsCisgCQkJICAgICAgIFNIQTUxMl9ESUdFU1RfU0laRSk7CisrCQllbHNlIGlmIChjdHgtPmFsZyA9PSBDT05URVhUX0NPTlRST0xfQ1JZUFRPX0FMR19TTTMpIHsKKysJCQltZW1jcHkoYXJlcS0+cmVzdWx0LAorKwkJCSAgICAgICBFSVAxOTdfU00zX1pFUk9NX0hBU0gsIFNNM19ESUdFU1RfU0laRSk7CisrCQl9CisgCisgCQlyZXR1cm4gMDsKKysJfSBlbHNlIGlmICh1bmxpa2VseShyZXEtPmRpZ2VzdCA9PSBDT05URVhUX0NPTlRST0xfRElHRVNUX1hDTSAmJgorKwkJCSAgICBjdHgtPmFsZyA9PSBDT05URVhUX0NPTlRST0xfQ1JZUFRPX0FMR19NRDUgJiYKKysJCQkgICAgcmVxLT5sZW4gPT0gc2l6ZW9mKHUzMikgJiYgIWFyZXEtPm5ieXRlcykpIHsKKysJCS8qIFplcm8gbGVuZ3RoIENSQzMyICovCisrCQltZW1jcHkoYXJlcS0+cmVzdWx0LCBjdHgtPmlwYWQsIHNpemVvZih1MzIpKTsKKysJCXJldHVybiAwOworKwl9IGVsc2UgaWYgKHVubGlrZWx5KGN0eC0+Y2JjbWFjICYmIHJlcS0+bGVuID09IEFFU19CTE9DS19TSVpFICYmCisrCQkJICAgICFhcmVxLT5uYnl0ZXMpKSB7CisrCQkvKiBaZXJvIGxlbmd0aCBDQkMgTUFDICovCisrCQltZW1zZXQoYXJlcS0+cmVzdWx0LCAwLCBBRVNfQkxPQ0tfU0laRSk7CisrCQlyZXR1cm4gMDsKKysJfSBlbHNlIGlmICh1bmxpa2VseShyZXEtPnhjYmNtYWMgJiYgcmVxLT5sZW4gPT0gQUVTX0JMT0NLX1NJWkUgJiYKKysJCQkgICAgIWFyZXEtPm5ieXRlcykpIHsKKysJCS8qIFplcm8gbGVuZ3RoIChYKUNCQy9DTUFDICovCisrCQlpbnQgaTsKKysKKysJCWZvciAoaSA9IDA7IGkgPCBBRVNfQkxPQ0tfU0laRSAvIHNpemVvZih1MzIpOyBpKyspCisrCQkJKChfX2JlMzIgKilhcmVxLT5yZXN1bHQpW2ldID0KKysJCQkJY3B1X3RvX2JlMzIobGUzMl90b19jcHUoY3R4LT5pcGFkW2kgKyA0XSkpOy8vSzMKKysJCWFyZXEtPnJlc3VsdFswXSBePSAweDgwOwkJCS8vIDEwLSBwYWRkaW5nCisrCQljcnlwdG9fY2lwaGVyX2VuY3J5cHRfb25lKGN0eC0+a2FlcywgYXJlcS0+cmVzdWx0LCBhcmVxLT5yZXN1bHQpOworKwkJcmV0dXJuIDA7CisgCX0gZWxzZSBpZiAodW5saWtlbHkocmVxLT5obWFjICYmCisgCQkJICAgIChyZXEtPmxlbiA9PSByZXEtPmJsb2NrX3N6KSAmJgorIAkJCSAgICAhYXJlcS0+bmJ5dGVzKSkgeworQEAgLTc5Miw2ICs5MjAsNyBAQCBzdGF0aWMgaW50IHNhZmV4Y2VsX2FoYXNoX2NyYV9pbml0KHN0cnVjCisgCWN0eC0+cHJpdiA9IHRtcGwtPnByaXY7CisgCWN0eC0+YmFzZS5zZW5kID0gc2FmZXhjZWxfYWhhc2hfc2VuZDsKKyAJY3R4LT5iYXNlLmhhbmRsZV9yZXN1bHQgPSBzYWZleGNlbF9oYW5kbGVfcmVzdWx0OworKwljdHgtPmZiX2RvX3NldGtleSA9IGZhbHNlOworIAorIAljcnlwdG9fYWhhc2hfc2V0X3JlcXNpemUoX19jcnlwdG9fYWhhc2hfY2FzdCh0Zm0pLAorIAkJCQkgc2l6ZW9mKHN0cnVjdCBzYWZleGNlbF9haGFzaF9yZXEpKTsKK0BAIC04MDgsNiArOTM3LDcgQEAgc3RhdGljIGludCBzYWZleGNlbF9zaGExX2luaXQoc3RydWN0IGFoYQorIAljdHgtPmFsZyA9IENPTlRFWFRfQ09OVFJPTF9DUllQVE9fQUxHX1NIQTE7CisgCXJlcS0+ZGlnZXN0ID0gQ09OVEVYVF9DT05UUk9MX0RJR0VTVF9QUkVDT01QVVRFRDsKKyAJcmVxLT5zdGF0ZV9zeiA9IFNIQTFfRElHRVNUX1NJWkU7CisrCXJlcS0+ZGlnZXN0X3N6ID0gU0hBMV9ESUdFU1RfU0laRTsKKyAJcmVxLT5ibG9ja19zeiA9IFNIQTFfQkxPQ0tfU0laRTsKKyAKKyAJcmV0dXJuIDA7CitAQCAtODg5LDYgKzEwMTksNyBAQCBzdGF0aWMgaW50IHNhZmV4Y2VsX2htYWNfc2hhMV9pbml0KHN0cnVjCisgCWN0eC0+YWxnID0gQ09OVEVYVF9DT05UUk9MX0NSWVBUT19BTEdfU0hBMTsKKyAJcmVxLT5kaWdlc3QgPSBDT05URVhUX0NPTlRST0xfRElHRVNUX1BSRUNPTVBVVEVEOworIAlyZXEtPnN0YXRlX3N6ID0gU0hBMV9ESUdFU1RfU0laRTsKKysJcmVxLT5kaWdlc3Rfc3ogPSBTSEExX0RJR0VTVF9TSVpFOworIAlyZXEtPmJsb2NrX3N6ID0gU0hBMV9CTE9DS19TSVpFOworIAlyZXEtPmhtYWMgPSB0cnVlOworIAorQEAgLTExMjUsNiArMTI1Niw3IEBAIHN0YXRpYyBpbnQgc2FmZXhjZWxfc2hhMjU2X2luaXQoc3RydWN0IGEKKyAJY3R4LT5hbGcgPSBDT05URVhUX0NPTlRST0xfQ1JZUFRPX0FMR19TSEEyNTY7CisgCXJlcS0+ZGlnZXN0ID0gQ09OVEVYVF9DT05UUk9MX0RJR0VTVF9QUkVDT01QVVRFRDsKKyAJcmVxLT5zdGF0ZV9zeiA9IFNIQTI1Nl9ESUdFU1RfU0laRTsKKysJcmVxLT5kaWdlc3Rfc3ogPSBTSEEyNTZfRElHRVNUX1NJWkU7CisgCXJlcS0+YmxvY2tfc3ogPSBTSEEyNTZfQkxPQ0tfU0laRTsKKyAKKyAJcmV0dXJuIDA7CitAQCAtMTE4MCw2ICsxMzEyLDcgQEAgc3RhdGljIGludCBzYWZleGNlbF9zaGEyMjRfaW5pdChzdHJ1Y3QgYQorIAljdHgtPmFsZyA9IENPTlRFWFRfQ09OVFJPTF9DUllQVE9fQUxHX1NIQTIyNDsKKyAJcmVxLT5kaWdlc3QgPSBDT05URVhUX0NPTlRST0xfRElHRVNUX1BSRUNPTVBVVEVEOworIAlyZXEtPnN0YXRlX3N6ID0gU0hBMjU2X0RJR0VTVF9TSVpFOworKwlyZXEtPmRpZ2VzdF9zeiA9IFNIQTI1Nl9ESUdFU1RfU0laRTsKKyAJcmVxLT5ibG9ja19zeiA9IFNIQTI1Nl9CTE9DS19TSVpFOworIAorIAlyZXR1cm4gMDsKK0BAIC0xMjQ4LDYgKzEzODEsNyBAQCBzdGF0aWMgaW50IHNhZmV4Y2VsX2htYWNfc2hhMjI0X2luaXQoc3RyCisgCWN0eC0+YWxnID0gQ09OVEVYVF9DT05UUk9MX0NSWVBUT19BTEdfU0hBMjI0OworIAlyZXEtPmRpZ2VzdCA9IENPTlRFWFRfQ09OVFJPTF9ESUdFU1RfUFJFQ09NUFVURUQ7CisgCXJlcS0+c3RhdGVfc3ogPSBTSEEyNTZfRElHRVNUX1NJWkU7CisrCXJlcS0+ZGlnZXN0X3N6ID0gU0hBMjU2X0RJR0VTVF9TSVpFOworIAlyZXEtPmJsb2NrX3N6ID0gU0hBMjU2X0JMT0NLX1NJWkU7CisgCXJlcS0+aG1hYyA9IHRydWU7CisgCitAQCAtMTMxOCw2ICsxNDUyLDcgQEAgc3RhdGljIGludCBzYWZleGNlbF9obWFjX3NoYTI1Nl9pbml0KHN0cgorIAljdHgtPmFsZyA9IENPTlRFWFRfQ09OVFJPTF9DUllQVE9fQUxHX1NIQTI1NjsKKyAJcmVxLT5kaWdlc3QgPSBDT05URVhUX0NPTlRST0xfRElHRVNUX1BSRUNPTVBVVEVEOworIAlyZXEtPnN0YXRlX3N6ID0gU0hBMjU2X0RJR0VTVF9TSVpFOworKwlyZXEtPmRpZ2VzdF9zeiA9IFNIQTI1Nl9ESUdFU1RfU0laRTsKKyAJcmVxLT5ibG9ja19zeiA9IFNIQTI1Nl9CTE9DS19TSVpFOworIAlyZXEtPmhtYWMgPSB0cnVlOworIAorQEAgLTEzNzUsNiArMTUxMCw3IEBAIHN0YXRpYyBpbnQgc2FmZXhjZWxfc2hhNTEyX2luaXQoc3RydWN0IGEKKyAJY3R4LT5hbGcgPSBDT05URVhUX0NPTlRST0xfQ1JZUFRPX0FMR19TSEE1MTI7CisgCXJlcS0+ZGlnZXN0ID0gQ09OVEVYVF9DT05UUk9MX0RJR0VTVF9QUkVDT01QVVRFRDsKKyAJcmVxLT5zdGF0ZV9zeiA9IFNIQTUxMl9ESUdFU1RfU0laRTsKKysJcmVxLT5kaWdlc3Rfc3ogPSBTSEE1MTJfRElHRVNUX1NJWkU7CisgCXJlcS0+YmxvY2tfc3ogPSBTSEE1MTJfQkxPQ0tfU0laRTsKKyAKKyAJcmV0dXJuIDA7CitAQCAtMTQzMCw2ICsxNTY2LDcgQEAgc3RhdGljIGludCBzYWZleGNlbF9zaGEzODRfaW5pdChzdHJ1Y3QgYQorIAljdHgtPmFsZyA9IENPTlRFWFRfQ09OVFJPTF9DUllQVE9fQUxHX1NIQTM4NDsKKyAJcmVxLT5kaWdlc3QgPSBDT05URVhUX0NPTlRST0xfRElHRVNUX1BSRUNPTVBVVEVEOworIAlyZXEtPnN0YXRlX3N6ID0gU0hBNTEyX0RJR0VTVF9TSVpFOworKwlyZXEtPmRpZ2VzdF9zeiA9IFNIQTUxMl9ESUdFU1RfU0laRTsKKyAJcmVxLT5ibG9ja19zeiA9IFNIQTUxMl9CTE9DS19TSVpFOworIAorIAlyZXR1cm4gMDsKK0BAIC0xNDk4LDYgKzE2MzUsNyBAQCBzdGF0aWMgaW50IHNhZmV4Y2VsX2htYWNfc2hhNTEyX2luaXQoc3RyCisgCWN0eC0+YWxnID0gQ09OVEVYVF9DT05UUk9MX0NSWVBUT19BTEdfU0hBNTEyOworIAlyZXEtPmRpZ2VzdCA9IENPTlRFWFRfQ09OVFJPTF9ESUdFU1RfUFJFQ09NUFVURUQ7CisgCXJlcS0+c3RhdGVfc3ogPSBTSEE1MTJfRElHRVNUX1NJWkU7CisrCXJlcS0+ZGlnZXN0X3N6ID0gU0hBNTEyX0RJR0VTVF9TSVpFOworIAlyZXEtPmJsb2NrX3N6ID0gU0hBNTEyX0JMT0NLX1NJWkU7CisgCXJlcS0+aG1hYyA9IHRydWU7CisgCitAQCAtMTU2OCw2ICsxNzA2LDcgQEAgc3RhdGljIGludCBzYWZleGNlbF9obWFjX3NoYTM4NF9pbml0KHN0cgorIAljdHgtPmFsZyA9IENPTlRFWFRfQ09OVFJPTF9DUllQVE9fQUxHX1NIQTM4NDsKKyAJcmVxLT5kaWdlc3QgPSBDT05URVhUX0NPTlRST0xfRElHRVNUX1BSRUNPTVBVVEVEOworIAlyZXEtPnN0YXRlX3N6ID0gU0hBNTEyX0RJR0VTVF9TSVpFOworKwlyZXEtPmRpZ2VzdF9zeiA9IFNIQTUxMl9ESUdFU1RfU0laRTsKKyAJcmVxLT5ibG9ja19zeiA9IFNIQTUxMl9CTE9DS19TSVpFOworIAlyZXEtPmhtYWMgPSB0cnVlOworIAorQEAgLTE2MjUsNiArMTc2NCw3IEBAIHN0YXRpYyBpbnQgc2FmZXhjZWxfbWQ1X2luaXQoc3RydWN0IGFoYXMKKyAJY3R4LT5hbGcgPSBDT05URVhUX0NPTlRST0xfQ1JZUFRPX0FMR19NRDU7CisgCXJlcS0+ZGlnZXN0ID0gQ09OVEVYVF9DT05UUk9MX0RJR0VTVF9QUkVDT01QVVRFRDsKKyAJcmVxLT5zdGF0ZV9zeiA9IE1ENV9ESUdFU1RfU0laRTsKKysJcmVxLT5kaWdlc3Rfc3ogPSBNRDVfRElHRVNUX1NJWkU7CisgCXJlcS0+YmxvY2tfc3ogPSBNRDVfSE1BQ19CTE9DS19TSVpFOworIAorIAlyZXR1cm4gMDsKK0BAIC0xNjg2LDYgKzE4MjYsNyBAQCBzdGF0aWMgaW50IHNhZmV4Y2VsX2htYWNfbWQ1X2luaXQoc3RydWN0CisgCWN0eC0+YWxnID0gQ09OVEVYVF9DT05UUk9MX0NSWVBUT19BTEdfTUQ1OworIAlyZXEtPmRpZ2VzdCA9IENPTlRFWFRfQ09OVFJPTF9ESUdFU1RfUFJFQ09NUFVURUQ7CisgCXJlcS0+c3RhdGVfc3ogPSBNRDVfRElHRVNUX1NJWkU7CisrCXJlcS0+ZGlnZXN0X3N6ID0gTUQ1X0RJR0VTVF9TSVpFOworIAlyZXEtPmJsb2NrX3N6ID0gTUQ1X0hNQUNfQkxPQ0tfU0laRTsKKyAJcmVxLT5sZW5faXNfbGUgPSB0cnVlOyAvKiBNRDUgaXMgbGl0dGxlIGVuZGlhbiEgLi4uICovCisgCXJlcS0+aG1hYyA9IHRydWU7CitAQCAtMTczOCw1ICsxODc5LDEyMzUgQEAgc3RydWN0IHNhZmV4Y2VsX2FsZ190ZW1wbGF0ZSBzYWZleGNlbF9hbAorIAkJCQkuY3JhX21vZHVsZSA9IFRISVNfTU9EVUxFLAorIAkJCX0sCisgCQl9LAorKwl9LAorK307CisrCisrc3RhdGljIGludCBzYWZleGNlbF9jcmMzMl9jcmFfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQorK3sKKysJc3RydWN0IHNhZmV4Y2VsX2FoYXNoX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKysJaW50IHJldCA9IHNhZmV4Y2VsX2FoYXNoX2NyYV9pbml0KHRmbSk7CisrCisrCS8qIERlZmF1bHQgJ2tleScgaXMgYWxsIHplcm9lcyAqLworKwltZW1zZXQoY3R4LT5pcGFkLCAwLCBzaXplb2YodTMyKSk7CisrCXJldHVybiByZXQ7CisrfQorKworK3N0YXRpYyBpbnQgc2FmZXhjZWxfY3JjMzJfaW5pdChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqYXJlcSkKKyt7CisrCXN0cnVjdCBzYWZleGNlbF9haGFzaF9jdHggKmN0eCA9IGNyeXB0b19haGFzaF9jdHgoY3J5cHRvX2FoYXNoX3JlcXRmbShhcmVxKSk7CisrCXN0cnVjdCBzYWZleGNlbF9haGFzaF9yZXEgKnJlcSA9IGFoYXNoX3JlcXVlc3RfY3R4KGFyZXEpOworKworKwltZW1zZXQocmVxLCAwLCBzaXplb2YoKnJlcSkpOworKworKwkvKiBTdGFydCBmcm9tIGxvYWRlZCBrZXkgKi8KKysJcmVxLT5zdGF0ZVswXQk9IChfX2ZvcmNlIF9fbGUzMilsZTMyX3RvX2NwdSh+Y3R4LT5pcGFkWzBdKTsKKysJLyogU2V0IHByb2Nlc3NlZCB0byBub24temVybyB0byBlbmFibGUgaW52YWxpZGF0aW9uIGRldGVjdGlvbiAqLworKwlyZXEtPmxlbgk9IHNpemVvZih1MzIpOworKwlyZXEtPnByb2Nlc3NlZAk9IHNpemVvZih1MzIpOworKworKwljdHgtPmFsZyA9IENPTlRFWFRfQ09OVFJPTF9DUllQVE9fQUxHX0NSQzMyOworKwlyZXEtPmRpZ2VzdCA9IENPTlRFWFRfQ09OVFJPTF9ESUdFU1RfWENNOworKwlyZXEtPnN0YXRlX3N6ID0gc2l6ZW9mKHUzMik7CisrCXJlcS0+ZGlnZXN0X3N6ID0gc2l6ZW9mKHUzMik7CisrCXJlcS0+YmxvY2tfc3ogPSBzaXplb2YodTMyKTsKKysKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQgc2FmZXhjZWxfY3JjMzJfc2V0a2V5KHN0cnVjdCBjcnlwdG9fYWhhc2ggKnRmbSwgY29uc3QgdTggKmtleSwKKysJCQkJIHVuc2lnbmVkIGludCBrZXlsZW4pCisreworKwlzdHJ1Y3Qgc2FmZXhjZWxfYWhhc2hfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eChjcnlwdG9fYWhhc2hfdGZtKHRmbSkpOworKworKwlpZiAoa2V5bGVuICE9IHNpemVvZih1MzIpKQorKwkJcmV0dXJuIC1FSU5WQUw7CisrCisrCW1lbWNweShjdHgtPmlwYWQsIGtleSwgc2l6ZW9mKHUzMikpOworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGludCBzYWZleGNlbF9jcmMzMl9kaWdlc3Qoc3RydWN0IGFoYXNoX3JlcXVlc3QgKmFyZXEpCisreworKwlyZXR1cm4gc2FmZXhjZWxfY3JjMzJfaW5pdChhcmVxKSA/OiBzYWZleGNlbF9haGFzaF9maW51cChhcmVxKTsKKyt9CisrCisrc3RydWN0IHNhZmV4Y2VsX2FsZ190ZW1wbGF0ZSBzYWZleGNlbF9hbGdfY3JjMzIgPSB7CisrCS50eXBlID0gU0FGRVhDRUxfQUxHX1RZUEVfQUhBU0gsCisrCS5hbGdvX21hc2sgPSAwLAorKwkuYWxnLmFoYXNoID0geworKwkJLmluaXQgPSBzYWZleGNlbF9jcmMzMl9pbml0LAorKwkJLnVwZGF0ZSA9IHNhZmV4Y2VsX2FoYXNoX3VwZGF0ZSwKKysJCS5maW5hbCA9IHNhZmV4Y2VsX2FoYXNoX2ZpbmFsLAorKwkJLmZpbnVwID0gc2FmZXhjZWxfYWhhc2hfZmludXAsCisrCQkuZGlnZXN0ID0gc2FmZXhjZWxfY3JjMzJfZGlnZXN0LAorKwkJLnNldGtleSA9IHNhZmV4Y2VsX2NyYzMyX3NldGtleSwKKysJCS5leHBvcnQgPSBzYWZleGNlbF9haGFzaF9leHBvcnQsCisrCQkuaW1wb3J0ID0gc2FmZXhjZWxfYWhhc2hfaW1wb3J0LAorKwkJLmhhbGcgPSB7CisrCQkJLmRpZ2VzdHNpemUgPSBzaXplb2YodTMyKSwKKysJCQkuc3RhdGVzaXplID0gc2l6ZW9mKHN0cnVjdCBzYWZleGNlbF9haGFzaF9leHBvcnRfc3RhdGUpLAorKwkJCS5iYXNlID0geworKwkJCQkuY3JhX25hbWUgPSAiY3JjMzIiLAorKwkJCQkuY3JhX2RyaXZlcl9uYW1lID0gInNhZmV4Y2VsLWNyYzMyIiwKKysJCQkJLmNyYV9wcmlvcml0eSA9IFNBRkVYQ0VMX0NSQV9QUklPUklUWSwKKysJCQkJLmNyYV9mbGFncyA9IENSWVBUT19BTEdfT1BUSU9OQUxfS0VZIHwKKysJCQkJCSAgICAgQ1JZUFRPX0FMR19BU1lOQyB8CisrCQkJCQkgICAgIENSWVBUT19BTEdfS0VSTl9EUklWRVJfT05MWSwKKysJCQkJLmNyYV9ibG9ja3NpemUgPSAxLAorKwkJCQkuY3JhX2N0eHNpemUgPSBzaXplb2Yoc3RydWN0IHNhZmV4Y2VsX2FoYXNoX2N0eCksCisrCQkJCS5jcmFfaW5pdCA9IHNhZmV4Y2VsX2NyYzMyX2NyYV9pbml0LAorKwkJCQkuY3JhX2V4aXQgPSBzYWZleGNlbF9haGFzaF9jcmFfZXhpdCwKKysJCQkJLmNyYV9tb2R1bGUgPSBUSElTX01PRFVMRSwKKysJCQl9LAorKwkJfSwKKysJfSwKKyt9OworKworK3N0YXRpYyBpbnQgc2FmZXhjZWxfY2JjbWFjX2luaXQoc3RydWN0IGFoYXNoX3JlcXVlc3QgKmFyZXEpCisreworKwlzdHJ1Y3Qgc2FmZXhjZWxfYWhhc2hfY3R4ICpjdHggPSBjcnlwdG9fYWhhc2hfY3R4KGNyeXB0b19haGFzaF9yZXF0Zm0oYXJlcSkpOworKwlzdHJ1Y3Qgc2FmZXhjZWxfYWhhc2hfcmVxICpyZXEgPSBhaGFzaF9yZXF1ZXN0X2N0eChhcmVxKTsKKysKKysJbWVtc2V0KHJlcSwgMCwgc2l6ZW9mKCpyZXEpKTsKKysKKysJLyogU3RhcnQgZnJvbSBsb2FkZWQga2V5cyAqLworKwltZW1jcHkocmVxLT5zdGF0ZSwgY3R4LT5pcGFkLCBjdHgtPmtleV9zeik7CisrCS8qIFNldCBwcm9jZXNzZWQgdG8gbm9uLXplcm8gdG8gZW5hYmxlIGludmFsaWRhdGlvbiBkZXRlY3Rpb24gKi8KKysJcmVxLT5sZW4JPSBBRVNfQkxPQ0tfU0laRTsKKysJcmVxLT5wcm9jZXNzZWQJPSBBRVNfQkxPQ0tfU0laRTsKKysKKysJcmVxLT5kaWdlc3QgICA9IENPTlRFWFRfQ09OVFJPTF9ESUdFU1RfWENNOworKwlyZXEtPnN0YXRlX3N6ID0gY3R4LT5rZXlfc3o7CisrCXJlcS0+ZGlnZXN0X3N6ID0gQUVTX0JMT0NLX1NJWkU7CisrCXJlcS0+YmxvY2tfc3ogPSBBRVNfQkxPQ0tfU0laRTsKKysJcmVxLT54Y2JjbWFjICA9IHRydWU7CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX2NiY21hY19zZXRrZXkoc3RydWN0IGNyeXB0b19haGFzaCAqdGZtLCBjb25zdCB1OCAqa2V5LAorKwkJCQkgdW5zaWduZWQgaW50IGxlbikKKyt7CisrCXN0cnVjdCBzYWZleGNlbF9haGFzaF9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KGNyeXB0b19haGFzaF90Zm0odGZtKSk7CisrCXN0cnVjdCBjcnlwdG9fYWVzX2N0eCBhZXM7CisrCWludCByZXQsIGk7CisrCisrCXJldCA9IGFlc19leHBhbmRrZXkoJmFlcywga2V5LCBsZW4pOworKwlpZiAocmV0KQorKwkJcmV0dXJuIHJldDsKKysKKysJbWVtc2V0KGN0eC0+aXBhZCwgMCwgMiAqIEFFU19CTE9DS19TSVpFKTsKKysJZm9yIChpID0gMDsgaSA8IGxlbiAvIHNpemVvZih1MzIpOyBpKyspCisrCQljdHgtPmlwYWRbaSArIDhdID0gKF9fZm9yY2UgX19sZTMyKWNwdV90b19iZTMyKGFlcy5rZXlfZW5jW2ldKTsKKysKKysJaWYgKGxlbiA9PSBBRVNfS0VZU0laRV8xOTIpIHsKKysJCWN0eC0+YWxnICAgID0gQ09OVEVYVF9DT05UUk9MX0NSWVBUT19BTEdfWENCQzE5MjsKKysJCWN0eC0+a2V5X3N6ID0gQUVTX01BWF9LRVlfU0laRSArIDIgKiBBRVNfQkxPQ0tfU0laRTsKKysJfSBlbHNlIGlmIChsZW4gPT0gQUVTX0tFWVNJWkVfMjU2KSB7CisrCQljdHgtPmFsZyAgICA9IENPTlRFWFRfQ09OVFJPTF9DUllQVE9fQUxHX1hDQkMyNTY7CisrCQljdHgtPmtleV9zeiA9IEFFU19NQVhfS0VZX1NJWkUgKyAyICogQUVTX0JMT0NLX1NJWkU7CisrCX0gZWxzZSB7CisrCQljdHgtPmFsZyAgICA9IENPTlRFWFRfQ09OVFJPTF9DUllQVE9fQUxHX1hDQkMxMjg7CisrCQljdHgtPmtleV9zeiA9IEFFU19NSU5fS0VZX1NJWkUgKyAyICogQUVTX0JMT0NLX1NJWkU7CisrCX0KKysJY3R4LT5jYmNtYWMgID0gdHJ1ZTsKKysKKysJbWVtemVyb19leHBsaWNpdCgmYWVzLCBzaXplb2YoYWVzKSk7CisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX2NiY21hY19kaWdlc3Qoc3RydWN0IGFoYXNoX3JlcXVlc3QgKmFyZXEpCisreworKwlyZXR1cm4gc2FmZXhjZWxfY2JjbWFjX2luaXQoYXJlcSkgPzogc2FmZXhjZWxfYWhhc2hfZmludXAoYXJlcSk7CisrfQorKworK3N0cnVjdCBzYWZleGNlbF9hbGdfdGVtcGxhdGUgc2FmZXhjZWxfYWxnX2NiY21hYyA9IHsKKysJLnR5cGUgPSBTQUZFWENFTF9BTEdfVFlQRV9BSEFTSCwKKysJLmFsZ29fbWFzayA9IDAsCisrCS5hbGcuYWhhc2ggPSB7CisrCQkuaW5pdCA9IHNhZmV4Y2VsX2NiY21hY19pbml0LAorKwkJLnVwZGF0ZSA9IHNhZmV4Y2VsX2FoYXNoX3VwZGF0ZSwKKysJCS5maW5hbCA9IHNhZmV4Y2VsX2FoYXNoX2ZpbmFsLAorKwkJLmZpbnVwID0gc2FmZXhjZWxfYWhhc2hfZmludXAsCisrCQkuZGlnZXN0ID0gc2FmZXhjZWxfY2JjbWFjX2RpZ2VzdCwKKysJCS5zZXRrZXkgPSBzYWZleGNlbF9jYmNtYWNfc2V0a2V5LAorKwkJLmV4cG9ydCA9IHNhZmV4Y2VsX2FoYXNoX2V4cG9ydCwKKysJCS5pbXBvcnQgPSBzYWZleGNlbF9haGFzaF9pbXBvcnQsCisrCQkuaGFsZyA9IHsKKysJCQkuZGlnZXN0c2l6ZSA9IEFFU19CTE9DS19TSVpFLAorKwkJCS5zdGF0ZXNpemUgPSBzaXplb2Yoc3RydWN0IHNhZmV4Y2VsX2FoYXNoX2V4cG9ydF9zdGF0ZSksCisrCQkJLmJhc2UgPSB7CisrCQkJCS5jcmFfbmFtZSA9ICJjYmNtYWMoYWVzKSIsCisrCQkJCS5jcmFfZHJpdmVyX25hbWUgPSAic2FmZXhjZWwtY2JjbWFjLWFlcyIsCisrCQkJCS5jcmFfcHJpb3JpdHkgPSBTQUZFWENFTF9DUkFfUFJJT1JJVFksCisrCQkJCS5jcmFfZmxhZ3MgPSBDUllQVE9fQUxHX0FTWU5DIHwKKysJCQkJCSAgICAgQ1JZUFRPX0FMR19LRVJOX0RSSVZFUl9PTkxZLAorKwkJCQkuY3JhX2Jsb2Nrc2l6ZSA9IDEsCisrCQkJCS5jcmFfY3R4c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2FmZXhjZWxfYWhhc2hfY3R4KSwKKysJCQkJLmNyYV9pbml0ID0gc2FmZXhjZWxfYWhhc2hfY3JhX2luaXQsCisrCQkJCS5jcmFfZXhpdCA9IHNhZmV4Y2VsX2FoYXNoX2NyYV9leGl0LAorKwkJCQkuY3JhX21vZHVsZSA9IFRISVNfTU9EVUxFLAorKwkJCX0sCisrCQl9LAorKwl9LAorK307CisrCisrc3RhdGljIGludCBzYWZleGNlbF94Y2JjbWFjX3NldGtleShzdHJ1Y3QgY3J5cHRvX2FoYXNoICp0Zm0sIGNvbnN0IHU4ICprZXksCisrCQkJCSB1bnNpZ25lZCBpbnQgbGVuKQorK3sKKysJc3RydWN0IHNhZmV4Y2VsX2FoYXNoX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgoY3J5cHRvX2FoYXNoX3RmbSh0Zm0pKTsKKysJc3RydWN0IGNyeXB0b19hZXNfY3R4IGFlczsKKysJdTMyIGtleV90bXBbMyAqIEFFU19CTE9DS19TSVpFIC8gc2l6ZW9mKHUzMildOworKwlpbnQgcmV0LCBpOworKworKwlyZXQgPSBhZXNfZXhwYW5ka2V5KCZhZXMsIGtleSwgbGVuKTsKKysJaWYgKHJldCkKKysJCXJldHVybiByZXQ7CisrCisrCS8qIHByZWNvbXB1dGUgdGhlIFhDQkMga2V5IG1hdGVyaWFsICovCisrCWNyeXB0b19jaXBoZXJfY2xlYXJfZmxhZ3MoY3R4LT5rYWVzLCBDUllQVE9fVEZNX1JFUV9NQVNLKTsKKysJY3J5cHRvX2NpcGhlcl9zZXRfZmxhZ3MoY3R4LT5rYWVzLCBjcnlwdG9fYWhhc2hfZ2V0X2ZsYWdzKHRmbSkgJgorKwkJCQlDUllQVE9fVEZNX1JFUV9NQVNLKTsKKysJcmV0ID0gY3J5cHRvX2NpcGhlcl9zZXRrZXkoY3R4LT5rYWVzLCBrZXksIGxlbik7CisrCWlmIChyZXQpCisrCQlyZXR1cm4gcmV0OworKworKwljcnlwdG9fY2lwaGVyX2VuY3J5cHRfb25lKGN0eC0+a2FlcywgKHU4ICopa2V5X3RtcCArIDIgKiBBRVNfQkxPQ0tfU0laRSwKKysJCSJceDFceDFceDFceDFceDFceDFceDFceDFceDFceDFceDFceDFceDFceDFceDFceDEiKTsKKysJY3J5cHRvX2NpcGhlcl9lbmNyeXB0X29uZShjdHgtPmthZXMsICh1OCAqKWtleV90bXAsCisrCQkiXHgyXHgyXHgyXHgyXHgyXHgyXHgyXHgyXHgyXHgyXHgyXHgyXHgyXHgyXHgyXHgyIik7CisrCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9vbmUoY3R4LT5rYWVzLCAodTggKilrZXlfdG1wICsgQUVTX0JMT0NLX1NJWkUsCisrCQkiXHgzXHgzXHgzXHgzXHgzXHgzXHgzXHgzXHgzXHgzXHgzXHgzXHgzXHgzXHgzXHgzIik7CisrCWZvciAoaSA9IDA7IGkgPCAzICogQUVTX0JMT0NLX1NJWkUgLyBzaXplb2YodTMyKTsgaSsrKQorKwkJY3R4LT5pcGFkW2ldID0KKysJCQljcHVfdG9fbGUzMigoX19mb3JjZSB1MzIpY3B1X3RvX2JlMzIoa2V5X3RtcFtpXSkpOworKworKwljcnlwdG9fY2lwaGVyX2NsZWFyX2ZsYWdzKGN0eC0+a2FlcywgQ1JZUFRPX1RGTV9SRVFfTUFTSyk7CisrCWNyeXB0b19jaXBoZXJfc2V0X2ZsYWdzKGN0eC0+a2FlcywgY3J5cHRvX2FoYXNoX2dldF9mbGFncyh0Zm0pICYKKysJCQkJQ1JZUFRPX1RGTV9SRVFfTUFTSyk7CisrCXJldCA9IGNyeXB0b19jaXBoZXJfc2V0a2V5KGN0eC0+a2FlcywKKysJCQkJICAgKHU4ICopa2V5X3RtcCArIDIgKiBBRVNfQkxPQ0tfU0laRSwKKysJCQkJICAgQUVTX01JTl9LRVlfU0laRSk7CisrCWlmIChyZXQpCisrCQlyZXR1cm4gcmV0OworKworKwljdHgtPmFsZyAgICA9IENPTlRFWFRfQ09OVFJPTF9DUllQVE9fQUxHX1hDQkMxMjg7CisrCWN0eC0+a2V5X3N6ID0gQUVTX01JTl9LRVlfU0laRSArIDIgKiBBRVNfQkxPQ0tfU0laRTsKKysJY3R4LT5jYmNtYWMgPSBmYWxzZTsKKysKKysJbWVtemVyb19leHBsaWNpdCgmYWVzLCBzaXplb2YoYWVzKSk7CisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX3hjYmNtYWNfY3JhX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKKyt7CisrCXN0cnVjdCBzYWZleGNlbF9haGFzaF9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisrCisrCXNhZmV4Y2VsX2FoYXNoX2NyYV9pbml0KHRmbSk7CisrCWN0eC0+a2FlcyA9IGNyeXB0b19hbGxvY19jaXBoZXIoImFlcyIsIDAsIDApOworKwlyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGN0eC0+a2Flcyk7CisrfQorKworK3N0YXRpYyB2b2lkIHNhZmV4Y2VsX3hjYmNtYWNfY3JhX2V4aXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKKyt7CisrCXN0cnVjdCBzYWZleGNlbF9haGFzaF9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisrCisrCWNyeXB0b19mcmVlX2NpcGhlcihjdHgtPmthZXMpOworKwlzYWZleGNlbF9haGFzaF9jcmFfZXhpdCh0Zm0pOworK30KKysKKytzdHJ1Y3Qgc2FmZXhjZWxfYWxnX3RlbXBsYXRlIHNhZmV4Y2VsX2FsZ194Y2JjbWFjID0geworKwkudHlwZSA9IFNBRkVYQ0VMX0FMR19UWVBFX0FIQVNILAorKwkuYWxnb19tYXNrID0gMCwKKysJLmFsZy5haGFzaCA9IHsKKysJCS5pbml0ID0gc2FmZXhjZWxfY2JjbWFjX2luaXQsCisrCQkudXBkYXRlID0gc2FmZXhjZWxfYWhhc2hfdXBkYXRlLAorKwkJLmZpbmFsID0gc2FmZXhjZWxfYWhhc2hfZmluYWwsCisrCQkuZmludXAgPSBzYWZleGNlbF9haGFzaF9maW51cCwKKysJCS5kaWdlc3QgPSBzYWZleGNlbF9jYmNtYWNfZGlnZXN0LAorKwkJLnNldGtleSA9IHNhZmV4Y2VsX3hjYmNtYWNfc2V0a2V5LAorKwkJLmV4cG9ydCA9IHNhZmV4Y2VsX2FoYXNoX2V4cG9ydCwKKysJCS5pbXBvcnQgPSBzYWZleGNlbF9haGFzaF9pbXBvcnQsCisrCQkuaGFsZyA9IHsKKysJCQkuZGlnZXN0c2l6ZSA9IEFFU19CTE9DS19TSVpFLAorKwkJCS5zdGF0ZXNpemUgPSBzaXplb2Yoc3RydWN0IHNhZmV4Y2VsX2FoYXNoX2V4cG9ydF9zdGF0ZSksCisrCQkJLmJhc2UgPSB7CisrCQkJCS5jcmFfbmFtZSA9ICJ4Y2JjKGFlcykiLAorKwkJCQkuY3JhX2RyaXZlcl9uYW1lID0gInNhZmV4Y2VsLXhjYmMtYWVzIiwKKysJCQkJLmNyYV9wcmlvcml0eSA9IFNBRkVYQ0VMX0NSQV9QUklPUklUWSwKKysJCQkJLmNyYV9mbGFncyA9IENSWVBUT19BTEdfQVNZTkMgfAorKwkJCQkJICAgICBDUllQVE9fQUxHX0tFUk5fRFJJVkVSX09OTFksCisrCQkJCS5jcmFfYmxvY2tzaXplID0gQUVTX0JMT0NLX1NJWkUsCisrCQkJCS5jcmFfY3R4c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2FmZXhjZWxfYWhhc2hfY3R4KSwKKysJCQkJLmNyYV9pbml0ID0gc2FmZXhjZWxfeGNiY21hY19jcmFfaW5pdCwKKysJCQkJLmNyYV9leGl0ID0gc2FmZXhjZWxfeGNiY21hY19jcmFfZXhpdCwKKysJCQkJLmNyYV9tb2R1bGUgPSBUSElTX01PRFVMRSwKKysJCQl9LAorKwkJfSwKKysJfSwKKyt9OworKworK3N0YXRpYyBpbnQgc2FmZXhjZWxfY21hY19zZXRrZXkoc3RydWN0IGNyeXB0b19haGFzaCAqdGZtLCBjb25zdCB1OCAqa2V5LAorKwkJCQl1bnNpZ25lZCBpbnQgbGVuKQorK3sKKysJc3RydWN0IHNhZmV4Y2VsX2FoYXNoX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgoY3J5cHRvX2FoYXNoX3RmbSh0Zm0pKTsKKysJc3RydWN0IGNyeXB0b19hZXNfY3R4IGFlczsKKysJX19iZTY0IGNvbnN0c1s0XTsKKysJdTY0IF9jb25zdFsyXTsKKysJdTggbXNiX21hc2ssIGdmbWFzazsKKysJaW50IHJldCwgaTsKKysKKysJcmV0ID0gYWVzX2V4cGFuZGtleSgmYWVzLCBrZXksIGxlbik7CisrCWlmIChyZXQpCisrCQlyZXR1cm4gcmV0OworKworKwlmb3IgKGkgPSAwOyBpIDwgbGVuIC8gc2l6ZW9mKHUzMik7IGkrKykKKysJCWN0eC0+aXBhZFtpICsgOF0gPQorKwkJCWNwdV90b19sZTMyKChfX2ZvcmNlIHUzMiljcHVfdG9fYmUzMihhZXMua2V5X2VuY1tpXSkpOworKworKwkvKiBwcmVjb21wdXRlIHRoZSBDTUFDIGtleSBtYXRlcmlhbCAqLworKwljcnlwdG9fY2lwaGVyX2NsZWFyX2ZsYWdzKGN0eC0+a2FlcywgQ1JZUFRPX1RGTV9SRVFfTUFTSyk7CisrCWNyeXB0b19jaXBoZXJfc2V0X2ZsYWdzKGN0eC0+a2FlcywgY3J5cHRvX2FoYXNoX2dldF9mbGFncyh0Zm0pICYKKysJCQkJQ1JZUFRPX1RGTV9SRVFfTUFTSyk7CisrCXJldCA9IGNyeXB0b19jaXBoZXJfc2V0a2V5KGN0eC0+a2Flcywga2V5LCBsZW4pOworKwlpZiAocmV0KQorKwkJcmV0dXJuIHJldDsKKysKKysJLyogY29kZSBiZWxvdyBib3Jyb3dlZCBmcm9tIGNyeXB0by9jbWFjLmMgKi8KKysJLyogZW5jcnlwdCB0aGUgemVybyBibG9jayAqLworKwltZW1zZXQoY29uc3RzLCAwLCBBRVNfQkxPQ0tfU0laRSk7CisrCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9vbmUoY3R4LT5rYWVzLCAodTggKiljb25zdHMsICh1OCAqKWNvbnN0cyk7CisrCisrCWdmbWFzayA9IDB4ODc7CisrCV9jb25zdFswXSA9IGJlNjRfdG9fY3B1KGNvbnN0c1sxXSk7CisrCV9jb25zdFsxXSA9IGJlNjRfdG9fY3B1KGNvbnN0c1swXSk7CisrCisrCS8qIGdmKDJeMTI4KSBtdWx0aXBseSB6ZXJvLWNpcGhlcnRleHQgd2l0aCB1IGFuZCB1XjIgKi8KKysJZm9yIChpID0gMDsgaSA8IDQ7IGkgKz0gMikgeworKwkJbXNiX21hc2sgPSAoKHM2NClfY29uc3RbMV0gPj4gNjMpICYgZ2ZtYXNrOworKwkJX2NvbnN0WzFdID0gKF9jb25zdFsxXSA8PCAxKSB8IChfY29uc3RbMF0gPj4gNjMpOworKwkJX2NvbnN0WzBdID0gKF9jb25zdFswXSA8PCAxKSBeIG1zYl9tYXNrOworKworKwkJY29uc3RzW2kgKyAwXSA9IGNwdV90b19iZTY0KF9jb25zdFsxXSk7CisrCQljb25zdHNbaSArIDFdID0gY3B1X3RvX2JlNjQoX2NvbnN0WzBdKTsKKysJfQorKwkvKiBlbmQgb2YgY29kZSBib3Jyb3dlZCBmcm9tIGNyeXB0by9jbWFjLmMgKi8KKysKKysJZm9yIChpID0gMDsgaSA8IDIgKiBBRVNfQkxPQ0tfU0laRSAvIHNpemVvZih1MzIpOyBpKyspCisrCQljdHgtPmlwYWRbaV0gPSAoX19mb3JjZSBfX2xlMzIpY3B1X3RvX2JlMzIoKCh1MzIgKiljb25zdHMpW2ldKTsKKysKKysJaWYgKGxlbiA9PSBBRVNfS0VZU0laRV8xOTIpIHsKKysJCWN0eC0+YWxnICAgID0gQ09OVEVYVF9DT05UUk9MX0NSWVBUT19BTEdfWENCQzE5MjsKKysJCWN0eC0+a2V5X3N6ID0gQUVTX01BWF9LRVlfU0laRSArIDIgKiBBRVNfQkxPQ0tfU0laRTsKKysJfSBlbHNlIGlmIChsZW4gPT0gQUVTX0tFWVNJWkVfMjU2KSB7CisrCQljdHgtPmFsZyAgICA9IENPTlRFWFRfQ09OVFJPTF9DUllQVE9fQUxHX1hDQkMyNTY7CisrCQljdHgtPmtleV9zeiA9IEFFU19NQVhfS0VZX1NJWkUgKyAyICogQUVTX0JMT0NLX1NJWkU7CisrCX0gZWxzZSB7CisrCQljdHgtPmFsZyAgICA9IENPTlRFWFRfQ09OVFJPTF9DUllQVE9fQUxHX1hDQkMxMjg7CisrCQljdHgtPmtleV9zeiA9IEFFU19NSU5fS0VZX1NJWkUgKyAyICogQUVTX0JMT0NLX1NJWkU7CisrCX0KKysJY3R4LT5jYmNtYWMgPSBmYWxzZTsKKysKKysJbWVtemVyb19leHBsaWNpdCgmYWVzLCBzaXplb2YoYWVzKSk7CisrCXJldHVybiAwOworK30KKysKKytzdHJ1Y3Qgc2FmZXhjZWxfYWxnX3RlbXBsYXRlIHNhZmV4Y2VsX2FsZ19jbWFjID0geworKwkudHlwZSA9IFNBRkVYQ0VMX0FMR19UWVBFX0FIQVNILAorKwkuYWxnb19tYXNrID0gMCwKKysJLmFsZy5haGFzaCA9IHsKKysJCS5pbml0ID0gc2FmZXhjZWxfY2JjbWFjX2luaXQsCisrCQkudXBkYXRlID0gc2FmZXhjZWxfYWhhc2hfdXBkYXRlLAorKwkJLmZpbmFsID0gc2FmZXhjZWxfYWhhc2hfZmluYWwsCisrCQkuZmludXAgPSBzYWZleGNlbF9haGFzaF9maW51cCwKKysJCS5kaWdlc3QgPSBzYWZleGNlbF9jYmNtYWNfZGlnZXN0LAorKwkJLnNldGtleSA9IHNhZmV4Y2VsX2NtYWNfc2V0a2V5LAorKwkJLmV4cG9ydCA9IHNhZmV4Y2VsX2FoYXNoX2V4cG9ydCwKKysJCS5pbXBvcnQgPSBzYWZleGNlbF9haGFzaF9pbXBvcnQsCisrCQkuaGFsZyA9IHsKKysJCQkuZGlnZXN0c2l6ZSA9IEFFU19CTE9DS19TSVpFLAorKwkJCS5zdGF0ZXNpemUgPSBzaXplb2Yoc3RydWN0IHNhZmV4Y2VsX2FoYXNoX2V4cG9ydF9zdGF0ZSksCisrCQkJLmJhc2UgPSB7CisrCQkJCS5jcmFfbmFtZSA9ICJjbWFjKGFlcykiLAorKwkJCQkuY3JhX2RyaXZlcl9uYW1lID0gInNhZmV4Y2VsLWNtYWMtYWVzIiwKKysJCQkJLmNyYV9wcmlvcml0eSA9IFNBRkVYQ0VMX0NSQV9QUklPUklUWSwKKysJCQkJLmNyYV9mbGFncyA9IENSWVBUT19BTEdfQVNZTkMgfAorKwkJCQkJICAgICBDUllQVE9fQUxHX0tFUk5fRFJJVkVSX09OTFksCisrCQkJCS5jcmFfYmxvY2tzaXplID0gQUVTX0JMT0NLX1NJWkUsCisrCQkJCS5jcmFfY3R4c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2FmZXhjZWxfYWhhc2hfY3R4KSwKKysJCQkJLmNyYV9pbml0ID0gc2FmZXhjZWxfeGNiY21hY19jcmFfaW5pdCwKKysJCQkJLmNyYV9leGl0ID0gc2FmZXhjZWxfeGNiY21hY19jcmFfZXhpdCwKKysJCQkJLmNyYV9tb2R1bGUgPSBUSElTX01PRFVMRSwKKysJCQl9LAorKwkJfSwKKysJfSwKKyt9OworKworK3N0YXRpYyBpbnQgc2FmZXhjZWxfc20zX2luaXQoc3RydWN0IGFoYXNoX3JlcXVlc3QgKmFyZXEpCisreworKwlzdHJ1Y3Qgc2FmZXhjZWxfYWhhc2hfY3R4ICpjdHggPSBjcnlwdG9fYWhhc2hfY3R4KGNyeXB0b19haGFzaF9yZXF0Zm0oYXJlcSkpOworKwlzdHJ1Y3Qgc2FmZXhjZWxfYWhhc2hfcmVxICpyZXEgPSBhaGFzaF9yZXF1ZXN0X2N0eChhcmVxKTsKKysKKysJbWVtc2V0KHJlcSwgMCwgc2l6ZW9mKCpyZXEpKTsKKysKKysJY3R4LT5hbGcgPSBDT05URVhUX0NPTlRST0xfQ1JZUFRPX0FMR19TTTM7CisrCXJlcS0+ZGlnZXN0ID0gQ09OVEVYVF9DT05UUk9MX0RJR0VTVF9QUkVDT01QVVRFRDsKKysJcmVxLT5zdGF0ZV9zeiA9IFNNM19ESUdFU1RfU0laRTsKKysJcmVxLT5kaWdlc3Rfc3ogPSBTTTNfRElHRVNUX1NJWkU7CisrCXJlcS0+YmxvY2tfc3ogPSBTTTNfQkxPQ0tfU0laRTsKKysKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQgc2FmZXhjZWxfc20zX2RpZ2VzdChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqYXJlcSkKKyt7CisrCWludCByZXQgPSBzYWZleGNlbF9zbTNfaW5pdChhcmVxKTsKKysKKysJaWYgKHJldCkKKysJCXJldHVybiByZXQ7CisrCisrCXJldHVybiBzYWZleGNlbF9haGFzaF9maW51cChhcmVxKTsKKyt9CisrCisrc3RydWN0IHNhZmV4Y2VsX2FsZ190ZW1wbGF0ZSBzYWZleGNlbF9hbGdfc20zID0geworKwkudHlwZSA9IFNBRkVYQ0VMX0FMR19UWVBFX0FIQVNILAorKwkuYWxnb19tYXNrID0gU0FGRVhDRUxfQUxHX1NNMywKKysJLmFsZy5haGFzaCA9IHsKKysJCS5pbml0ID0gc2FmZXhjZWxfc20zX2luaXQsCisrCQkudXBkYXRlID0gc2FmZXhjZWxfYWhhc2hfdXBkYXRlLAorKwkJLmZpbmFsID0gc2FmZXhjZWxfYWhhc2hfZmluYWwsCisrCQkuZmludXAgPSBzYWZleGNlbF9haGFzaF9maW51cCwKKysJCS5kaWdlc3QgPSBzYWZleGNlbF9zbTNfZGlnZXN0LAorKwkJLmV4cG9ydCA9IHNhZmV4Y2VsX2FoYXNoX2V4cG9ydCwKKysJCS5pbXBvcnQgPSBzYWZleGNlbF9haGFzaF9pbXBvcnQsCisrCQkuaGFsZyA9IHsKKysJCQkuZGlnZXN0c2l6ZSA9IFNNM19ESUdFU1RfU0laRSwKKysJCQkuc3RhdGVzaXplID0gc2l6ZW9mKHN0cnVjdCBzYWZleGNlbF9haGFzaF9leHBvcnRfc3RhdGUpLAorKwkJCS5iYXNlID0geworKwkJCQkuY3JhX25hbWUgPSAic20zIiwKKysJCQkJLmNyYV9kcml2ZXJfbmFtZSA9ICJzYWZleGNlbC1zbTMiLAorKwkJCQkuY3JhX3ByaW9yaXR5ID0gU0FGRVhDRUxfQ1JBX1BSSU9SSVRZLAorKwkJCQkuY3JhX2ZsYWdzID0gQ1JZUFRPX0FMR19BU1lOQyB8CisrCQkJCQkgICAgIENSWVBUT19BTEdfS0VSTl9EUklWRVJfT05MWSwKKysJCQkJLmNyYV9ibG9ja3NpemUgPSBTTTNfQkxPQ0tfU0laRSwKKysJCQkJLmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBzYWZleGNlbF9haGFzaF9jdHgpLAorKwkJCQkuY3JhX2luaXQgPSBzYWZleGNlbF9haGFzaF9jcmFfaW5pdCwKKysJCQkJLmNyYV9leGl0ID0gc2FmZXhjZWxfYWhhc2hfY3JhX2V4aXQsCisrCQkJCS5jcmFfbW9kdWxlID0gVEhJU19NT0RVTEUsCisrCQkJfSwKKysJCX0sCisrCX0sCisrfTsKKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX2htYWNfc20zX3NldGtleShzdHJ1Y3QgY3J5cHRvX2FoYXNoICp0Zm0sIGNvbnN0IHU4ICprZXksCisrCQkJCSAgICB1bnNpZ25lZCBpbnQga2V5bGVuKQorK3sKKysJcmV0dXJuIHNhZmV4Y2VsX2htYWNfYWxnX3NldGtleSh0Zm0sIGtleSwga2V5bGVuLCAic2FmZXhjZWwtc20zIiwKKysJCQkJCVNNM19ESUdFU1RfU0laRSk7CisrfQorKworK3N0YXRpYyBpbnQgc2FmZXhjZWxfaG1hY19zbTNfaW5pdChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqYXJlcSkKKyt7CisrCXN0cnVjdCBzYWZleGNlbF9haGFzaF9jdHggKmN0eCA9IGNyeXB0b19haGFzaF9jdHgoY3J5cHRvX2FoYXNoX3JlcXRmbShhcmVxKSk7CisrCXN0cnVjdCBzYWZleGNlbF9haGFzaF9yZXEgKnJlcSA9IGFoYXNoX3JlcXVlc3RfY3R4KGFyZXEpOworKworKwltZW1zZXQocmVxLCAwLCBzaXplb2YoKnJlcSkpOworKworKwkvKiBTdGFydCBmcm9tIGlwYWQgcHJlY29tcHV0ZSAqLworKwltZW1jcHkocmVxLT5zdGF0ZSwgY3R4LT5pcGFkLCBTTTNfRElHRVNUX1NJWkUpOworKwkvKiBBbHJlYWR5IHByb2Nlc3NlZCB0aGUga2V5XmlwYWQgcGFydCBub3chICovCisrCXJlcS0+bGVuCT0gU00zX0JMT0NLX1NJWkU7CisrCXJlcS0+cHJvY2Vzc2VkCT0gU00zX0JMT0NLX1NJWkU7CisrCisrCWN0eC0+YWxnID0gQ09OVEVYVF9DT05UUk9MX0NSWVBUT19BTEdfU00zOworKwlyZXEtPmRpZ2VzdCA9IENPTlRFWFRfQ09OVFJPTF9ESUdFU1RfUFJFQ09NUFVURUQ7CisrCXJlcS0+c3RhdGVfc3ogPSBTTTNfRElHRVNUX1NJWkU7CisrCXJlcS0+ZGlnZXN0X3N6ID0gU00zX0RJR0VTVF9TSVpFOworKwlyZXEtPmJsb2NrX3N6ID0gU00zX0JMT0NLX1NJWkU7CisrCXJlcS0+aG1hYyA9IHRydWU7CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX2htYWNfc20zX2RpZ2VzdChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqYXJlcSkKKyt7CisrCWludCByZXQgPSBzYWZleGNlbF9obWFjX3NtM19pbml0KGFyZXEpOworKworKwlpZiAocmV0KQorKwkJcmV0dXJuIHJldDsKKysKKysJcmV0dXJuIHNhZmV4Y2VsX2FoYXNoX2ZpbnVwKGFyZXEpOworK30KKysKKytzdHJ1Y3Qgc2FmZXhjZWxfYWxnX3RlbXBsYXRlIHNhZmV4Y2VsX2FsZ19obWFjX3NtMyA9IHsKKysJLnR5cGUgPSBTQUZFWENFTF9BTEdfVFlQRV9BSEFTSCwKKysJLmFsZ29fbWFzayA9IFNBRkVYQ0VMX0FMR19TTTMsCisrCS5hbGcuYWhhc2ggPSB7CisrCQkuaW5pdCA9IHNhZmV4Y2VsX2htYWNfc20zX2luaXQsCisrCQkudXBkYXRlID0gc2FmZXhjZWxfYWhhc2hfdXBkYXRlLAorKwkJLmZpbmFsID0gc2FmZXhjZWxfYWhhc2hfZmluYWwsCisrCQkuZmludXAgPSBzYWZleGNlbF9haGFzaF9maW51cCwKKysJCS5kaWdlc3QgPSBzYWZleGNlbF9obWFjX3NtM19kaWdlc3QsCisrCQkuc2V0a2V5ID0gc2FmZXhjZWxfaG1hY19zbTNfc2V0a2V5LAorKwkJLmV4cG9ydCA9IHNhZmV4Y2VsX2FoYXNoX2V4cG9ydCwKKysJCS5pbXBvcnQgPSBzYWZleGNlbF9haGFzaF9pbXBvcnQsCisrCQkuaGFsZyA9IHsKKysJCQkuZGlnZXN0c2l6ZSA9IFNNM19ESUdFU1RfU0laRSwKKysJCQkuc3RhdGVzaXplID0gc2l6ZW9mKHN0cnVjdCBzYWZleGNlbF9haGFzaF9leHBvcnRfc3RhdGUpLAorKwkJCS5iYXNlID0geworKwkJCQkuY3JhX25hbWUgPSAiaG1hYyhzbTMpIiwKKysJCQkJLmNyYV9kcml2ZXJfbmFtZSA9ICJzYWZleGNlbC1obWFjLXNtMyIsCisrCQkJCS5jcmFfcHJpb3JpdHkgPSBTQUZFWENFTF9DUkFfUFJJT1JJVFksCisrCQkJCS5jcmFfZmxhZ3MgPSBDUllQVE9fQUxHX0FTWU5DIHwKKysJCQkJCSAgICAgQ1JZUFRPX0FMR19LRVJOX0RSSVZFUl9PTkxZLAorKwkJCQkuY3JhX2Jsb2Nrc2l6ZSA9IFNNM19CTE9DS19TSVpFLAorKwkJCQkuY3JhX2N0eHNpemUgPSBzaXplb2Yoc3RydWN0IHNhZmV4Y2VsX2FoYXNoX2N0eCksCisrCQkJCS5jcmFfaW5pdCA9IHNhZmV4Y2VsX2FoYXNoX2NyYV9pbml0LAorKwkJCQkuY3JhX2V4aXQgPSBzYWZleGNlbF9haGFzaF9jcmFfZXhpdCwKKysJCQkJLmNyYV9tb2R1bGUgPSBUSElTX01PRFVMRSwKKysJCQl9LAorKwkJfSwKKysJfSwKKyt9OworKworK3N0YXRpYyBpbnQgc2FmZXhjZWxfc2hhM18yMjRfaW5pdChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqYXJlcSkKKyt7CisrCXN0cnVjdCBjcnlwdG9fYWhhc2ggKnRmbSA9IGNyeXB0b19haGFzaF9yZXF0Zm0oYXJlcSk7CisrCXN0cnVjdCBzYWZleGNlbF9haGFzaF9jdHggKmN0eCA9IGNyeXB0b19haGFzaF9jdHgodGZtKTsKKysJc3RydWN0IHNhZmV4Y2VsX2FoYXNoX3JlcSAqcmVxID0gYWhhc2hfcmVxdWVzdF9jdHgoYXJlcSk7CisrCisrCW1lbXNldChyZXEsIDAsIHNpemVvZigqcmVxKSk7CisrCisrCWN0eC0+YWxnID0gQ09OVEVYVF9DT05UUk9MX0NSWVBUT19BTEdfU0hBM18yMjQ7CisrCXJlcS0+ZGlnZXN0ID0gQ09OVEVYVF9DT05UUk9MX0RJR0VTVF9JTklUSUFMOworKwlyZXEtPnN0YXRlX3N6ID0gU0hBM18yMjRfRElHRVNUX1NJWkU7CisrCXJlcS0+ZGlnZXN0X3N6ID0gU0hBM18yMjRfRElHRVNUX1NJWkU7CisrCXJlcS0+YmxvY2tfc3ogPSBTSEEzXzIyNF9CTE9DS19TSVpFOworKwljdHgtPmRvX2ZhbGxiYWNrID0gZmFsc2U7CisrCWN0eC0+ZmJfaW5pdF9kb25lID0gZmFsc2U7CisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX3NoYTNfZmJjaGVjayhzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKQorK3sKKysJc3RydWN0IGNyeXB0b19haGFzaCAqdGZtID0gY3J5cHRvX2FoYXNoX3JlcXRmbShyZXEpOworKwlzdHJ1Y3Qgc2FmZXhjZWxfYWhhc2hfY3R4ICpjdHggPSBjcnlwdG9fYWhhc2hfY3R4KHRmbSk7CisrCXN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpzdWJyZXEgPSBhaGFzaF9yZXF1ZXN0X2N0eChyZXEpOworKwlpbnQgcmV0ID0gMDsKKysKKysJaWYgKGN0eC0+ZG9fZmFsbGJhY2spIHsKKysJCWFoYXNoX3JlcXVlc3Rfc2V0X3RmbShzdWJyZXEsIGN0eC0+ZmJhY2spOworKwkJYWhhc2hfcmVxdWVzdF9zZXRfY2FsbGJhY2soc3VicmVxLCByZXEtPmJhc2UuZmxhZ3MsCisrCQkJCQkgICByZXEtPmJhc2UuY29tcGxldGUsIHJlcS0+YmFzZS5kYXRhKTsKKysJCWFoYXNoX3JlcXVlc3Rfc2V0X2NyeXB0KHN1YnJlcSwgcmVxLT5zcmMsIHJlcS0+cmVzdWx0LAorKwkJCQkJcmVxLT5uYnl0ZXMpOworKwkJaWYgKCFjdHgtPmZiX2luaXRfZG9uZSkgeworKwkJCWlmIChjdHgtPmZiX2RvX3NldGtleSkgeworKwkJCQkvKiBTZXQgZmFsbGJhY2sgY2lwaGVyIEhNQUMga2V5ICovCisrCQkJCXU4IGtleVtTSEEzXzIyNF9CTE9DS19TSVpFXTsKKysKKysJCQkJbWVtY3B5KGtleSwgY3R4LT5pcGFkLAorKwkJCQkgICAgICAgY3J5cHRvX2FoYXNoX2Jsb2Nrc2l6ZShjdHgtPmZiYWNrKSAvIDIpOworKwkJCQltZW1jcHkoa2V5ICsKKysJCQkJICAgICAgIGNyeXB0b19haGFzaF9ibG9ja3NpemUoY3R4LT5mYmFjaykgLyAyLAorKwkJCQkgICAgICAgY3R4LT5vcGFkLAorKwkJCQkgICAgICAgY3J5cHRvX2FoYXNoX2Jsb2Nrc2l6ZShjdHgtPmZiYWNrKSAvIDIpOworKwkJCQlyZXQgPSBjcnlwdG9fYWhhc2hfc2V0a2V5KGN0eC0+ZmJhY2ssIGtleSwKKysJCQkJCWNyeXB0b19haGFzaF9ibG9ja3NpemUoY3R4LT5mYmFjaykpOworKwkJCQltZW16ZXJvX2V4cGxpY2l0KGtleSwKKysJCQkJCWNyeXB0b19haGFzaF9ibG9ja3NpemUoY3R4LT5mYmFjaykpOworKwkJCQljdHgtPmZiX2RvX3NldGtleSA9IGZhbHNlOworKwkJCX0KKysJCQlyZXQgPSByZXQgPzogY3J5cHRvX2FoYXNoX2luaXQoc3VicmVxKTsKKysJCQljdHgtPmZiX2luaXRfZG9uZSA9IHRydWU7CisrCQl9CisrCX0KKysJcmV0dXJuIHJldDsKKyt9CisrCisrc3RhdGljIGludCBzYWZleGNlbF9zaGEzX3VwZGF0ZShzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKQorK3sKKysJc3RydWN0IGNyeXB0b19haGFzaCAqdGZtID0gY3J5cHRvX2FoYXNoX3JlcXRmbShyZXEpOworKwlzdHJ1Y3Qgc2FmZXhjZWxfYWhhc2hfY3R4ICpjdHggPSBjcnlwdG9fYWhhc2hfY3R4KHRmbSk7CisrCXN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpzdWJyZXEgPSBhaGFzaF9yZXF1ZXN0X2N0eChyZXEpOworKworKwljdHgtPmRvX2ZhbGxiYWNrID0gdHJ1ZTsKKysJcmV0dXJuIHNhZmV4Y2VsX3NoYTNfZmJjaGVjayhyZXEpID86IGNyeXB0b19haGFzaF91cGRhdGUoc3VicmVxKTsKKyt9CisrCisrc3RhdGljIGludCBzYWZleGNlbF9zaGEzX2ZpbmFsKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpCisreworKwlzdHJ1Y3QgY3J5cHRvX2FoYXNoICp0Zm0gPSBjcnlwdG9fYWhhc2hfcmVxdGZtKHJlcSk7CisrCXN0cnVjdCBzYWZleGNlbF9haGFzaF9jdHggKmN0eCA9IGNyeXB0b19haGFzaF9jdHgodGZtKTsKKysJc3RydWN0IGFoYXNoX3JlcXVlc3QgKnN1YnJlcSA9IGFoYXNoX3JlcXVlc3RfY3R4KHJlcSk7CisrCisrCWN0eC0+ZG9fZmFsbGJhY2sgPSB0cnVlOworKwlyZXR1cm4gc2FmZXhjZWxfc2hhM19mYmNoZWNrKHJlcSkgPzogY3J5cHRvX2FoYXNoX2ZpbmFsKHN1YnJlcSk7CisrfQorKworK3N0YXRpYyBpbnQgc2FmZXhjZWxfc2hhM19maW51cChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKQorK3sKKysJc3RydWN0IGNyeXB0b19haGFzaCAqdGZtID0gY3J5cHRvX2FoYXNoX3JlcXRmbShyZXEpOworKwlzdHJ1Y3Qgc2FmZXhjZWxfYWhhc2hfY3R4ICpjdHggPSBjcnlwdG9fYWhhc2hfY3R4KHRmbSk7CisrCXN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpzdWJyZXEgPSBhaGFzaF9yZXF1ZXN0X2N0eChyZXEpOworKworKwljdHgtPmRvX2ZhbGxiYWNrIHw9ICFyZXEtPm5ieXRlczsKKysJaWYgKGN0eC0+ZG9fZmFsbGJhY2spCisrCQkvKiBVcGRhdGUgb3IgZXgvaW1wb3J0IGhhcHBlbmVkIG9yIGxlbiAwLCBjYW5ub3QgdXNlIHRoZSBIVyAqLworKwkJcmV0dXJuIHNhZmV4Y2VsX3NoYTNfZmJjaGVjayhyZXEpID86CisrCQkgICAgICAgY3J5cHRvX2FoYXNoX2ZpbnVwKHN1YnJlcSk7CisrCWVsc2UKKysJCXJldHVybiBzYWZleGNlbF9haGFzaF9maW51cChyZXEpOworK30KKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX3NoYTNfZGlnZXN0X2ZhbGxiYWNrKHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpCisreworKwlzdHJ1Y3QgY3J5cHRvX2FoYXNoICp0Zm0gPSBjcnlwdG9fYWhhc2hfcmVxdGZtKHJlcSk7CisrCXN0cnVjdCBzYWZleGNlbF9haGFzaF9jdHggKmN0eCA9IGNyeXB0b19haGFzaF9jdHgodGZtKTsKKysJc3RydWN0IGFoYXNoX3JlcXVlc3QgKnN1YnJlcSA9IGFoYXNoX3JlcXVlc3RfY3R4KHJlcSk7CisrCisrCWN0eC0+ZG9fZmFsbGJhY2sgPSB0cnVlOworKwljdHgtPmZiX2luaXRfZG9uZSA9IGZhbHNlOworKwlyZXR1cm4gc2FmZXhjZWxfc2hhM19mYmNoZWNrKHJlcSkgPzogY3J5cHRvX2FoYXNoX2ZpbnVwKHN1YnJlcSk7CisrfQorKworK3N0YXRpYyBpbnQgc2FmZXhjZWxfc2hhM18yMjRfZGlnZXN0KHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpCisreworKwlpZiAocmVxLT5uYnl0ZXMpCisrCQlyZXR1cm4gc2FmZXhjZWxfc2hhM18yMjRfaW5pdChyZXEpID86IHNhZmV4Y2VsX2FoYXNoX2ZpbnVwKHJlcSk7CisrCisrCS8qIEhXIGNhbm5vdCBkbyB6ZXJvIGxlbmd0aCBoYXNoLCB1c2UgZmFsbGJhY2sgaW5zdGVhZCAqLworKwlyZXR1cm4gc2FmZXhjZWxfc2hhM19kaWdlc3RfZmFsbGJhY2socmVxKTsKKyt9CisrCisrc3RhdGljIGludCBzYWZleGNlbF9zaGEzX2V4cG9ydChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxLCB2b2lkICpvdXQpCisreworKwlzdHJ1Y3QgY3J5cHRvX2FoYXNoICp0Zm0gPSBjcnlwdG9fYWhhc2hfcmVxdGZtKHJlcSk7CisrCXN0cnVjdCBzYWZleGNlbF9haGFzaF9jdHggKmN0eCA9IGNyeXB0b19haGFzaF9jdHgodGZtKTsKKysJc3RydWN0IGFoYXNoX3JlcXVlc3QgKnN1YnJlcSA9IGFoYXNoX3JlcXVlc3RfY3R4KHJlcSk7CisrCisrCWN0eC0+ZG9fZmFsbGJhY2sgPSB0cnVlOworKwlyZXR1cm4gc2FmZXhjZWxfc2hhM19mYmNoZWNrKHJlcSkgPzogY3J5cHRvX2FoYXNoX2V4cG9ydChzdWJyZXEsIG91dCk7CisrfQorKworK3N0YXRpYyBpbnQgc2FmZXhjZWxfc2hhM19pbXBvcnQoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSwgY29uc3Qgdm9pZCAqaW4pCisreworKwlzdHJ1Y3QgY3J5cHRvX2FoYXNoICp0Zm0gPSBjcnlwdG9fYWhhc2hfcmVxdGZtKHJlcSk7CisrCXN0cnVjdCBzYWZleGNlbF9haGFzaF9jdHggKmN0eCA9IGNyeXB0b19haGFzaF9jdHgodGZtKTsKKysJc3RydWN0IGFoYXNoX3JlcXVlc3QgKnN1YnJlcSA9IGFoYXNoX3JlcXVlc3RfY3R4KHJlcSk7CisrCisrCWN0eC0+ZG9fZmFsbGJhY2sgPSB0cnVlOworKwlyZXR1cm4gc2FmZXhjZWxfc2hhM19mYmNoZWNrKHJlcSkgPzogY3J5cHRvX2FoYXNoX2ltcG9ydChzdWJyZXEsIGluKTsKKysJLy8gcmV0dXJuIHNhZmV4Y2VsX2FoYXNoX2ltcG9ydChyZXEsIGluKTsKKyt9CisrCisrc3RhdGljIGludCBzYWZleGNlbF9zaGEzX2NyYV9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCisreworKwlzdHJ1Y3QgY3J5cHRvX2FoYXNoICphaGFzaCA9IF9fY3J5cHRvX2FoYXNoX2Nhc3QodGZtKTsKKysJc3RydWN0IHNhZmV4Y2VsX2FoYXNoX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKysKKysJc2FmZXhjZWxfYWhhc2hfY3JhX2luaXQodGZtKTsKKysKKysJLyogQWxsb2NhdGUgZmFsbGJhY2sgaW1wbGVtZW50YXRpb24gKi8KKysJY3R4LT5mYmFjayA9IGNyeXB0b19hbGxvY19haGFzaChjcnlwdG9fdGZtX2FsZ19uYW1lKHRmbSksIDAsCisrCQkJCQlDUllQVE9fQUxHX0FTWU5DIHwKKysJCQkJCUNSWVBUT19BTEdfTkVFRF9GQUxMQkFDSyk7CisrCWlmIChJU19FUlIoY3R4LT5mYmFjaykpCisrCQlyZXR1cm4gUFRSX0VSUihjdHgtPmZiYWNrKTsKKysKKysJLyogVXBkYXRlIHN0YXRlc2l6ZSBmcm9tIGZhbGxiYWNrIGFsZ29yaXRobSEgKi8KKysJY3J5cHRvX2hhc2hfYWxnX2NvbW1vbihhaGFzaCktPnN0YXRlc2l6ZSA9CisrCQljcnlwdG9fYWhhc2hfc3RhdGVzaXplKGN0eC0+ZmJhY2spOworKwljcnlwdG9fYWhhc2hfc2V0X3JlcXNpemUoYWhhc2gsIG1heChzaXplb2Yoc3RydWN0IHNhZmV4Y2VsX2FoYXNoX3JlcSksCisrCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBhaGFzaF9yZXF1ZXN0KSArCisrCQkJCQkgICAgY3J5cHRvX2FoYXNoX3JlcXNpemUoY3R4LT5mYmFjaykpKTsKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyB2b2lkIHNhZmV4Y2VsX3NoYTNfY3JhX2V4aXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKKyt7CisrCXN0cnVjdCBzYWZleGNlbF9haGFzaF9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisrCisrCWNyeXB0b19mcmVlX2FoYXNoKGN0eC0+ZmJhY2spOworKwlzYWZleGNlbF9haGFzaF9jcmFfZXhpdCh0Zm0pOworK30KKysKKytzdHJ1Y3Qgc2FmZXhjZWxfYWxnX3RlbXBsYXRlIHNhZmV4Y2VsX2FsZ19zaGEzXzIyNCA9IHsKKysJLnR5cGUgPSBTQUZFWENFTF9BTEdfVFlQRV9BSEFTSCwKKysJLmFsZ29fbWFzayA9IFNBRkVYQ0VMX0FMR19TSEEzLAorKwkuYWxnLmFoYXNoID0geworKwkJLmluaXQgPSBzYWZleGNlbF9zaGEzXzIyNF9pbml0LAorKwkJLnVwZGF0ZSA9IHNhZmV4Y2VsX3NoYTNfdXBkYXRlLAorKwkJLmZpbmFsID0gc2FmZXhjZWxfc2hhM19maW5hbCwKKysJCS5maW51cCA9IHNhZmV4Y2VsX3NoYTNfZmludXAsCisrCQkuZGlnZXN0ID0gc2FmZXhjZWxfc2hhM18yMjRfZGlnZXN0LAorKwkJLmV4cG9ydCA9IHNhZmV4Y2VsX3NoYTNfZXhwb3J0LAorKwkJLmltcG9ydCA9IHNhZmV4Y2VsX3NoYTNfaW1wb3J0LAorKwkJLmhhbGcgPSB7CisrCQkJLmRpZ2VzdHNpemUgPSBTSEEzXzIyNF9ESUdFU1RfU0laRSwKKysJCQkuc3RhdGVzaXplID0gc2l6ZW9mKHN0cnVjdCBzYWZleGNlbF9haGFzaF9leHBvcnRfc3RhdGUpLAorKwkJCS5iYXNlID0geworKwkJCQkuY3JhX25hbWUgPSAic2hhMy0yMjQiLAorKwkJCQkuY3JhX2RyaXZlcl9uYW1lID0gInNhZmV4Y2VsLXNoYTMtMjI0IiwKKysJCQkJLmNyYV9wcmlvcml0eSA9IFNBRkVYQ0VMX0NSQV9QUklPUklUWSwKKysJCQkJLmNyYV9mbGFncyA9IENSWVBUT19BTEdfQVNZTkMgfAorKwkJCQkJICAgICBDUllQVE9fQUxHX0tFUk5fRFJJVkVSX09OTFkgfAorKwkJCQkJICAgICBDUllQVE9fQUxHX05FRURfRkFMTEJBQ0ssCisrCQkJCS5jcmFfYmxvY2tzaXplID0gU0hBM18yMjRfQkxPQ0tfU0laRSwKKysJCQkJLmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBzYWZleGNlbF9haGFzaF9jdHgpLAorKwkJCQkuY3JhX2luaXQgPSBzYWZleGNlbF9zaGEzX2NyYV9pbml0LAorKwkJCQkuY3JhX2V4aXQgPSBzYWZleGNlbF9zaGEzX2NyYV9leGl0LAorKwkJCQkuY3JhX21vZHVsZSA9IFRISVNfTU9EVUxFLAorKwkJCX0sCisrCQl9LAorKwl9LAorK307CisrCisrc3RhdGljIGludCBzYWZleGNlbF9zaGEzXzI1Nl9pbml0KHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICphcmVxKQorK3sKKysJc3RydWN0IGNyeXB0b19haGFzaCAqdGZtID0gY3J5cHRvX2FoYXNoX3JlcXRmbShhcmVxKTsKKysJc3RydWN0IHNhZmV4Y2VsX2FoYXNoX2N0eCAqY3R4ID0gY3J5cHRvX2FoYXNoX2N0eCh0Zm0pOworKwlzdHJ1Y3Qgc2FmZXhjZWxfYWhhc2hfcmVxICpyZXEgPSBhaGFzaF9yZXF1ZXN0X2N0eChhcmVxKTsKKysKKysJbWVtc2V0KHJlcSwgMCwgc2l6ZW9mKCpyZXEpKTsKKysKKysJY3R4LT5hbGcgPSBDT05URVhUX0NPTlRST0xfQ1JZUFRPX0FMR19TSEEzXzI1NjsKKysJcmVxLT5kaWdlc3QgPSBDT05URVhUX0NPTlRST0xfRElHRVNUX0lOSVRJQUw7CisrCXJlcS0+c3RhdGVfc3ogPSBTSEEzXzI1Nl9ESUdFU1RfU0laRTsKKysJcmVxLT5kaWdlc3Rfc3ogPSBTSEEzXzI1Nl9ESUdFU1RfU0laRTsKKysJcmVxLT5ibG9ja19zeiA9IFNIQTNfMjU2X0JMT0NLX1NJWkU7CisrCWN0eC0+ZG9fZmFsbGJhY2sgPSBmYWxzZTsKKysJY3R4LT5mYl9pbml0X2RvbmUgPSBmYWxzZTsKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQgc2FmZXhjZWxfc2hhM18yNTZfZGlnZXN0KHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpCisreworKwlpZiAocmVxLT5uYnl0ZXMpCisrCQlyZXR1cm4gc2FmZXhjZWxfc2hhM18yNTZfaW5pdChyZXEpID86IHNhZmV4Y2VsX2FoYXNoX2ZpbnVwKHJlcSk7CisrCisrCS8qIEhXIGNhbm5vdCBkbyB6ZXJvIGxlbmd0aCBoYXNoLCB1c2UgZmFsbGJhY2sgaW5zdGVhZCAqLworKwlyZXR1cm4gc2FmZXhjZWxfc2hhM19kaWdlc3RfZmFsbGJhY2socmVxKTsKKyt9CisrCisrc3RydWN0IHNhZmV4Y2VsX2FsZ190ZW1wbGF0ZSBzYWZleGNlbF9hbGdfc2hhM18yNTYgPSB7CisrCS50eXBlID0gU0FGRVhDRUxfQUxHX1RZUEVfQUhBU0gsCisrCS5hbGdvX21hc2sgPSBTQUZFWENFTF9BTEdfU0hBMywKKysJLmFsZy5haGFzaCA9IHsKKysJCS5pbml0ID0gc2FmZXhjZWxfc2hhM18yNTZfaW5pdCwKKysJCS51cGRhdGUgPSBzYWZleGNlbF9zaGEzX3VwZGF0ZSwKKysJCS5maW5hbCA9IHNhZmV4Y2VsX3NoYTNfZmluYWwsCisrCQkuZmludXAgPSBzYWZleGNlbF9zaGEzX2ZpbnVwLAorKwkJLmRpZ2VzdCA9IHNhZmV4Y2VsX3NoYTNfMjU2X2RpZ2VzdCwKKysJCS5leHBvcnQgPSBzYWZleGNlbF9zaGEzX2V4cG9ydCwKKysJCS5pbXBvcnQgPSBzYWZleGNlbF9zaGEzX2ltcG9ydCwKKysJCS5oYWxnID0geworKwkJCS5kaWdlc3RzaXplID0gU0hBM18yNTZfRElHRVNUX1NJWkUsCisrCQkJLnN0YXRlc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2FmZXhjZWxfYWhhc2hfZXhwb3J0X3N0YXRlKSwKKysJCQkuYmFzZSA9IHsKKysJCQkJLmNyYV9uYW1lID0gInNoYTMtMjU2IiwKKysJCQkJLmNyYV9kcml2ZXJfbmFtZSA9ICJzYWZleGNlbC1zaGEzLTI1NiIsCisrCQkJCS5jcmFfcHJpb3JpdHkgPSBTQUZFWENFTF9DUkFfUFJJT1JJVFksCisrCQkJCS5jcmFfZmxhZ3MgPSBDUllQVE9fQUxHX0FTWU5DIHwKKysJCQkJCSAgICAgQ1JZUFRPX0FMR19LRVJOX0RSSVZFUl9PTkxZIHwKKysJCQkJCSAgICAgQ1JZUFRPX0FMR19ORUVEX0ZBTExCQUNLLAorKwkJCQkuY3JhX2Jsb2Nrc2l6ZSA9IFNIQTNfMjU2X0JMT0NLX1NJWkUsCisrCQkJCS5jcmFfY3R4c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2FmZXhjZWxfYWhhc2hfY3R4KSwKKysJCQkJLmNyYV9pbml0ID0gc2FmZXhjZWxfc2hhM19jcmFfaW5pdCwKKysJCQkJLmNyYV9leGl0ID0gc2FmZXhjZWxfc2hhM19jcmFfZXhpdCwKKysJCQkJLmNyYV9tb2R1bGUgPSBUSElTX01PRFVMRSwKKysJCQl9LAorKwkJfSwKKysJfSwKKyt9OworKworK3N0YXRpYyBpbnQgc2FmZXhjZWxfc2hhM18zODRfaW5pdChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqYXJlcSkKKyt7CisrCXN0cnVjdCBjcnlwdG9fYWhhc2ggKnRmbSA9IGNyeXB0b19haGFzaF9yZXF0Zm0oYXJlcSk7CisrCXN0cnVjdCBzYWZleGNlbF9haGFzaF9jdHggKmN0eCA9IGNyeXB0b19haGFzaF9jdHgodGZtKTsKKysJc3RydWN0IHNhZmV4Y2VsX2FoYXNoX3JlcSAqcmVxID0gYWhhc2hfcmVxdWVzdF9jdHgoYXJlcSk7CisrCisrCW1lbXNldChyZXEsIDAsIHNpemVvZigqcmVxKSk7CisrCisrCWN0eC0+YWxnID0gQ09OVEVYVF9DT05UUk9MX0NSWVBUT19BTEdfU0hBM18zODQ7CisrCXJlcS0+ZGlnZXN0ID0gQ09OVEVYVF9DT05UUk9MX0RJR0VTVF9JTklUSUFMOworKwlyZXEtPnN0YXRlX3N6ID0gU0hBM18zODRfRElHRVNUX1NJWkU7CisrCXJlcS0+ZGlnZXN0X3N6ID0gU0hBM18zODRfRElHRVNUX1NJWkU7CisrCXJlcS0+YmxvY2tfc3ogPSBTSEEzXzM4NF9CTE9DS19TSVpFOworKwljdHgtPmRvX2ZhbGxiYWNrID0gZmFsc2U7CisrCWN0eC0+ZmJfaW5pdF9kb25lID0gZmFsc2U7CisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX3NoYTNfMzg0X2RpZ2VzdChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKQorK3sKKysJaWYgKHJlcS0+bmJ5dGVzKQorKwkJcmV0dXJuIHNhZmV4Y2VsX3NoYTNfMzg0X2luaXQocmVxKSA/OiBzYWZleGNlbF9haGFzaF9maW51cChyZXEpOworKworKwkvKiBIVyBjYW5ub3QgZG8gemVybyBsZW5ndGggaGFzaCwgdXNlIGZhbGxiYWNrIGluc3RlYWQgKi8KKysJcmV0dXJuIHNhZmV4Y2VsX3NoYTNfZGlnZXN0X2ZhbGxiYWNrKHJlcSk7CisrfQorKworK3N0cnVjdCBzYWZleGNlbF9hbGdfdGVtcGxhdGUgc2FmZXhjZWxfYWxnX3NoYTNfMzg0ID0geworKwkudHlwZSA9IFNBRkVYQ0VMX0FMR19UWVBFX0FIQVNILAorKwkuYWxnb19tYXNrID0gU0FGRVhDRUxfQUxHX1NIQTMsCisrCS5hbGcuYWhhc2ggPSB7CisrCQkuaW5pdCA9IHNhZmV4Y2VsX3NoYTNfMzg0X2luaXQsCisrCQkudXBkYXRlID0gc2FmZXhjZWxfc2hhM191cGRhdGUsCisrCQkuZmluYWwgPSBzYWZleGNlbF9zaGEzX2ZpbmFsLAorKwkJLmZpbnVwID0gc2FmZXhjZWxfc2hhM19maW51cCwKKysJCS5kaWdlc3QgPSBzYWZleGNlbF9zaGEzXzM4NF9kaWdlc3QsCisrCQkuZXhwb3J0ID0gc2FmZXhjZWxfc2hhM19leHBvcnQsCisrCQkuaW1wb3J0ID0gc2FmZXhjZWxfc2hhM19pbXBvcnQsCisrCQkuaGFsZyA9IHsKKysJCQkuZGlnZXN0c2l6ZSA9IFNIQTNfMzg0X0RJR0VTVF9TSVpFLAorKwkJCS5zdGF0ZXNpemUgPSBzaXplb2Yoc3RydWN0IHNhZmV4Y2VsX2FoYXNoX2V4cG9ydF9zdGF0ZSksCisrCQkJLmJhc2UgPSB7CisrCQkJCS5jcmFfbmFtZSA9ICJzaGEzLTM4NCIsCisrCQkJCS5jcmFfZHJpdmVyX25hbWUgPSAic2FmZXhjZWwtc2hhMy0zODQiLAorKwkJCQkuY3JhX3ByaW9yaXR5ID0gU0FGRVhDRUxfQ1JBX1BSSU9SSVRZLAorKwkJCQkuY3JhX2ZsYWdzID0gQ1JZUFRPX0FMR19BU1lOQyB8CisrCQkJCQkgICAgIENSWVBUT19BTEdfS0VSTl9EUklWRVJfT05MWSB8CisrCQkJCQkgICAgIENSWVBUT19BTEdfTkVFRF9GQUxMQkFDSywKKysJCQkJLmNyYV9ibG9ja3NpemUgPSBTSEEzXzM4NF9CTE9DS19TSVpFLAorKwkJCQkuY3JhX2N0eHNpemUgPSBzaXplb2Yoc3RydWN0IHNhZmV4Y2VsX2FoYXNoX2N0eCksCisrCQkJCS5jcmFfaW5pdCA9IHNhZmV4Y2VsX3NoYTNfY3JhX2luaXQsCisrCQkJCS5jcmFfZXhpdCA9IHNhZmV4Y2VsX3NoYTNfY3JhX2V4aXQsCisrCQkJCS5jcmFfbW9kdWxlID0gVEhJU19NT0RVTEUsCisrCQkJfSwKKysJCX0sCisrCX0sCisrfTsKKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX3NoYTNfNTEyX2luaXQoc3RydWN0IGFoYXNoX3JlcXVlc3QgKmFyZXEpCisreworKwlzdHJ1Y3QgY3J5cHRvX2FoYXNoICp0Zm0gPSBjcnlwdG9fYWhhc2hfcmVxdGZtKGFyZXEpOworKwlzdHJ1Y3Qgc2FmZXhjZWxfYWhhc2hfY3R4ICpjdHggPSBjcnlwdG9fYWhhc2hfY3R4KHRmbSk7CisrCXN0cnVjdCBzYWZleGNlbF9haGFzaF9yZXEgKnJlcSA9IGFoYXNoX3JlcXVlc3RfY3R4KGFyZXEpOworKworKwltZW1zZXQocmVxLCAwLCBzaXplb2YoKnJlcSkpOworKworKwljdHgtPmFsZyA9IENPTlRFWFRfQ09OVFJPTF9DUllQVE9fQUxHX1NIQTNfNTEyOworKwlyZXEtPmRpZ2VzdCA9IENPTlRFWFRfQ09OVFJPTF9ESUdFU1RfSU5JVElBTDsKKysJcmVxLT5zdGF0ZV9zeiA9IFNIQTNfNTEyX0RJR0VTVF9TSVpFOworKwlyZXEtPmRpZ2VzdF9zeiA9IFNIQTNfNTEyX0RJR0VTVF9TSVpFOworKwlyZXEtPmJsb2NrX3N6ID0gU0hBM181MTJfQkxPQ0tfU0laRTsKKysJY3R4LT5kb19mYWxsYmFjayA9IGZhbHNlOworKwljdHgtPmZiX2luaXRfZG9uZSA9IGZhbHNlOworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGludCBzYWZleGNlbF9zaGEzXzUxMl9kaWdlc3Qoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSkKKyt7CisrCWlmIChyZXEtPm5ieXRlcykKKysJCXJldHVybiBzYWZleGNlbF9zaGEzXzUxMl9pbml0KHJlcSkgPzogc2FmZXhjZWxfYWhhc2hfZmludXAocmVxKTsKKysKKysJLyogSFcgY2Fubm90IGRvIHplcm8gbGVuZ3RoIGhhc2gsIHVzZSBmYWxsYmFjayBpbnN0ZWFkICovCisrCXJldHVybiBzYWZleGNlbF9zaGEzX2RpZ2VzdF9mYWxsYmFjayhyZXEpOworK30KKysKKytzdHJ1Y3Qgc2FmZXhjZWxfYWxnX3RlbXBsYXRlIHNhZmV4Y2VsX2FsZ19zaGEzXzUxMiA9IHsKKysJLnR5cGUgPSBTQUZFWENFTF9BTEdfVFlQRV9BSEFTSCwKKysJLmFsZ29fbWFzayA9IFNBRkVYQ0VMX0FMR19TSEEzLAorKwkuYWxnLmFoYXNoID0geworKwkJLmluaXQgPSBzYWZleGNlbF9zaGEzXzUxMl9pbml0LAorKwkJLnVwZGF0ZSA9IHNhZmV4Y2VsX3NoYTNfdXBkYXRlLAorKwkJLmZpbmFsID0gc2FmZXhjZWxfc2hhM19maW5hbCwKKysJCS5maW51cCA9IHNhZmV4Y2VsX3NoYTNfZmludXAsCisrCQkuZGlnZXN0ID0gc2FmZXhjZWxfc2hhM181MTJfZGlnZXN0LAorKwkJLmV4cG9ydCA9IHNhZmV4Y2VsX3NoYTNfZXhwb3J0LAorKwkJLmltcG9ydCA9IHNhZmV4Y2VsX3NoYTNfaW1wb3J0LAorKwkJLmhhbGcgPSB7CisrCQkJLmRpZ2VzdHNpemUgPSBTSEEzXzUxMl9ESUdFU1RfU0laRSwKKysJCQkuc3RhdGVzaXplID0gc2l6ZW9mKHN0cnVjdCBzYWZleGNlbF9haGFzaF9leHBvcnRfc3RhdGUpLAorKwkJCS5iYXNlID0geworKwkJCQkuY3JhX25hbWUgPSAic2hhMy01MTIiLAorKwkJCQkuY3JhX2RyaXZlcl9uYW1lID0gInNhZmV4Y2VsLXNoYTMtNTEyIiwKKysJCQkJLmNyYV9wcmlvcml0eSA9IFNBRkVYQ0VMX0NSQV9QUklPUklUWSwKKysJCQkJLmNyYV9mbGFncyA9IENSWVBUT19BTEdfQVNZTkMgfAorKwkJCQkJICAgICBDUllQVE9fQUxHX0tFUk5fRFJJVkVSX09OTFkgfAorKwkJCQkJICAgICBDUllQVE9fQUxHX05FRURfRkFMTEJBQ0ssCisrCQkJCS5jcmFfYmxvY2tzaXplID0gU0hBM181MTJfQkxPQ0tfU0laRSwKKysJCQkJLmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBzYWZleGNlbF9haGFzaF9jdHgpLAorKwkJCQkuY3JhX2luaXQgPSBzYWZleGNlbF9zaGEzX2NyYV9pbml0LAorKwkJCQkuY3JhX2V4aXQgPSBzYWZleGNlbF9zaGEzX2NyYV9leGl0LAorKwkJCQkuY3JhX21vZHVsZSA9IFRISVNfTU9EVUxFLAorKwkJCX0sCisrCQl9LAorKwl9LAorK307CisrCisrc3RhdGljIGludCBzYWZleGNlbF9obWFjX3NoYTNfY3JhX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgY2hhciAqYWxnKQorK3sKKysJc3RydWN0IHNhZmV4Y2VsX2FoYXNoX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKysJaW50IHJldDsKKysKKysJcmV0ID0gc2FmZXhjZWxfc2hhM19jcmFfaW5pdCh0Zm0pOworKwlpZiAocmV0KQorKwkJcmV0dXJuIHJldDsKKysKKysJLyogQWxsb2NhdGUgcHJlY2FsYyBiYXNpYyBkaWdlc3QgaW1wbGVtZW50YXRpb24gKi8KKysJY3R4LT5zaHByZSA9IGNyeXB0b19hbGxvY19zaGFzaChhbGcsIDAsIENSWVBUT19BTEdfTkVFRF9GQUxMQkFDSyk7CisrCWlmIChJU19FUlIoY3R4LT5zaHByZSkpCisrCQlyZXR1cm4gUFRSX0VSUihjdHgtPnNocHJlKTsKKysKKysJY3R4LT5zaGRlc2MgPSBrbWFsbG9jKHNpemVvZigqY3R4LT5zaGRlc2MpICsKKysJCQkgICAgICBjcnlwdG9fc2hhc2hfZGVzY3NpemUoY3R4LT5zaHByZSksIEdGUF9LRVJORUwpOworKwlpZiAoIWN0eC0+c2hkZXNjKSB7CisrCQljcnlwdG9fZnJlZV9zaGFzaChjdHgtPnNocHJlKTsKKysJCXJldHVybiAtRU5PTUVNOworKwl9CisrCWN0eC0+c2hkZXNjLT50Zm0gPSBjdHgtPnNocHJlOworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIHZvaWQgc2FmZXhjZWxfaG1hY19zaGEzX2NyYV9leGl0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCisreworKwlzdHJ1Y3Qgc2FmZXhjZWxfYWhhc2hfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworKworKwljcnlwdG9fZnJlZV9haGFzaChjdHgtPmZiYWNrKTsKKysJY3J5cHRvX2ZyZWVfc2hhc2goY3R4LT5zaHByZSk7CisrCWtmcmVlKGN0eC0+c2hkZXNjKTsKKysJc2FmZXhjZWxfYWhhc2hfY3JhX2V4aXQodGZtKTsKKyt9CisrCisrc3RhdGljIGludCBzYWZleGNlbF9obWFjX3NoYTNfc2V0a2V5KHN0cnVjdCBjcnlwdG9fYWhhc2ggKnRmbSwgY29uc3QgdTggKmtleSwKKysJCQkJICAgICB1bnNpZ25lZCBpbnQga2V5bGVuKQorK3sKKysJc3RydWN0IHNhZmV4Y2VsX2FoYXNoX2N0eCAqY3R4ID0gY3J5cHRvX2FoYXNoX2N0eCh0Zm0pOworKwlpbnQgcmV0ID0gMDsKKysKKysJaWYgKGtleWxlbiA+IGNyeXB0b19haGFzaF9ibG9ja3NpemUodGZtKSkgeworKwkJLyoKKysJCSAqIElmIHRoZSBrZXkgaXMgbGFyZ2VyIHRoYW4gdGhlIGJsb2Nrc2l6ZSwgdGhlbiBoYXNoIGl0CisrCQkgKiBmaXJzdCB1c2luZyBvdXIgZmFsbGJhY2sgY2lwaGVyCisrCQkgKi8KKysJCXJldCA9IGNyeXB0b19zaGFzaF9kaWdlc3QoY3R4LT5zaGRlc2MsIGtleSwga2V5bGVuLAorKwkJCQkJICAodTggKiljdHgtPmlwYWQpOworKwkJa2V5bGVuID0gY3J5cHRvX3NoYXNoX2RpZ2VzdHNpemUoY3R4LT5zaHByZSk7CisrCisrCQkvKgorKwkJICogSWYgdGhlIGRpZ2VzdCBpcyBsYXJnZXIgdGhhbiBoYWxmIHRoZSBibG9ja3NpemUsIHdlIG5lZWQgdG8KKysJCSAqIG1vdmUgdGhlIHJlc3QgdG8gb3BhZCBkdWUgdG8gdGhlIHdheSBvdXIgSE1BQyBpbmZyYSB3b3Jrcy4KKysJCSAqLworKwkJaWYgKGtleWxlbiA+IGNyeXB0b19haGFzaF9ibG9ja3NpemUodGZtKSAvIDIpCisrCQkJLyogQnVmZmVycyBvdmVybGFwLCBuZWVkIHRvIHVzZSBtZW1tb3ZlIGlzbyBtZW1jcHkhICovCisrCQkJbWVtbW92ZShjdHgtPm9wYWQsCisrCQkJCSh1OCAqKWN0eC0+aXBhZCArCisrCQkJCQljcnlwdG9fYWhhc2hfYmxvY2tzaXplKHRmbSkgLyAyLAorKwkJCQlrZXlsZW4gLSBjcnlwdG9fYWhhc2hfYmxvY2tzaXplKHRmbSkgLyAyKTsKKysJfSBlbHNlIHsKKysJCS8qCisrCQkgKiBDb3B5IHRoZSBrZXkgdG8gb3VyIGlwYWQgJiBvcGFkIGJ1ZmZlcnMKKysJCSAqIE5vdGUgdGhhdCBpcGFkIGFuZCBvcGFkIGVhY2ggY29udGFpbiBvbmUgaGFsZiBvZiB0aGUga2V5LAorKwkJICogdG8gbWF0Y2ggdGhlIGV4aXN0aW5nIEhNQUMgZHJpdmVyIGluZnJhc3RydWN0dXJlLgorKwkJICovCisrCQlpZiAoa2V5bGVuIDw9IGNyeXB0b19haGFzaF9ibG9ja3NpemUodGZtKSAvIDIpIHsKKysJCQltZW1jcHkoY3R4LT5pcGFkLCBrZXksIGtleWxlbik7CisrCQl9IGVsc2UgeworKwkJCW1lbWNweShjdHgtPmlwYWQsIGtleSwKKysJCQkgICAgICAgY3J5cHRvX2FoYXNoX2Jsb2Nrc2l6ZSh0Zm0pIC8gMik7CisrCQkJbWVtY3B5KGN0eC0+b3BhZCwKKysJCQkgICAgICAga2V5ICsgY3J5cHRvX2FoYXNoX2Jsb2Nrc2l6ZSh0Zm0pIC8gMiwKKysJCQkgICAgICAga2V5bGVuIC0gY3J5cHRvX2FoYXNoX2Jsb2Nrc2l6ZSh0Zm0pIC8gMik7CisrCQl9CisrCX0KKysKKysJLyogUGFkIGtleSB3aXRoIHplcm9lcyAqLworKwlpZiAoa2V5bGVuIDw9IGNyeXB0b19haGFzaF9ibG9ja3NpemUodGZtKSAvIDIpIHsKKysJCW1lbXNldCgodTggKiljdHgtPmlwYWQgKyBrZXlsZW4sIDAsCisrCQkgICAgICAgY3J5cHRvX2FoYXNoX2Jsb2Nrc2l6ZSh0Zm0pIC8gMiAtIGtleWxlbik7CisrCQltZW1zZXQoY3R4LT5vcGFkLCAwLCBjcnlwdG9fYWhhc2hfYmxvY2tzaXplKHRmbSkgLyAyKTsKKysJfSBlbHNlIHsKKysJCW1lbXNldCgodTggKiljdHgtPm9wYWQgKyBrZXlsZW4gLQorKwkJICAgICAgIGNyeXB0b19haGFzaF9ibG9ja3NpemUodGZtKSAvIDIsIDAsCisrCQkgICAgICAgY3J5cHRvX2FoYXNoX2Jsb2Nrc2l6ZSh0Zm0pIC0ga2V5bGVuKTsKKysJfQorKworKwkvKiBJZiBkb2luZyBmYWxsYmFjaywgc3RpbGwgbmVlZCB0byBzZXQgdGhlIG5ldyBrZXkhICovCisrCWN0eC0+ZmJfZG9fc2V0a2V5ID0gdHJ1ZTsKKysJcmV0dXJuIHJldDsKKyt9CisrCisrc3RhdGljIGludCBzYWZleGNlbF9obWFjX3NoYTNfMjI0X2luaXQoc3RydWN0IGFoYXNoX3JlcXVlc3QgKmFyZXEpCisreworKwlzdHJ1Y3QgY3J5cHRvX2FoYXNoICp0Zm0gPSBjcnlwdG9fYWhhc2hfcmVxdGZtKGFyZXEpOworKwlzdHJ1Y3Qgc2FmZXhjZWxfYWhhc2hfY3R4ICpjdHggPSBjcnlwdG9fYWhhc2hfY3R4KHRmbSk7CisrCXN0cnVjdCBzYWZleGNlbF9haGFzaF9yZXEgKnJlcSA9IGFoYXNoX3JlcXVlc3RfY3R4KGFyZXEpOworKworKwltZW1zZXQocmVxLCAwLCBzaXplb2YoKnJlcSkpOworKworKwkvKiBDb3B5IChoYWxmIG9mKSB0aGUga2V5ICovCisrCW1lbWNweShyZXEtPnN0YXRlLCBjdHgtPmlwYWQsIFNIQTNfMjI0X0JMT0NLX1NJWkUgLyAyKTsKKysJLyogU3RhcnQgb2YgSE1BQyBzaG91bGQgaGF2ZSBsZW4gPT0gcHJvY2Vzc2VkID09IGJsb2Nrc2l6ZSAqLworKwlyZXEtPmxlbgk9IFNIQTNfMjI0X0JMT0NLX1NJWkU7CisrCXJlcS0+cHJvY2Vzc2VkCT0gU0hBM18yMjRfQkxPQ0tfU0laRTsKKysJY3R4LT5hbGcgPSBDT05URVhUX0NPTlRST0xfQ1JZUFRPX0FMR19TSEEzXzIyNDsKKysJcmVxLT5kaWdlc3QgPSBDT05URVhUX0NPTlRST0xfRElHRVNUX0hNQUM7CisrCXJlcS0+c3RhdGVfc3ogPSBTSEEzXzIyNF9CTE9DS19TSVpFIC8gMjsKKysJcmVxLT5kaWdlc3Rfc3ogPSBTSEEzXzIyNF9ESUdFU1RfU0laRTsKKysJcmVxLT5ibG9ja19zeiA9IFNIQTNfMjI0X0JMT0NLX1NJWkU7CisrCXJlcS0+aG1hYyA9IHRydWU7CisrCWN0eC0+ZG9fZmFsbGJhY2sgPSBmYWxzZTsKKysJY3R4LT5mYl9pbml0X2RvbmUgPSBmYWxzZTsKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQgc2FmZXhjZWxfaG1hY19zaGEzXzIyNF9kaWdlc3Qoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSkKKyt7CisrCWlmIChyZXEtPm5ieXRlcykKKysJCXJldHVybiBzYWZleGNlbF9obWFjX3NoYTNfMjI0X2luaXQocmVxKSA/OgorKwkJICAgICAgIHNhZmV4Y2VsX2FoYXNoX2ZpbnVwKHJlcSk7CisrCisrCS8qIEhXIGNhbm5vdCBkbyB6ZXJvIGxlbmd0aCBITUFDLCB1c2UgZmFsbGJhY2sgaW5zdGVhZCAqLworKwlyZXR1cm4gc2FmZXhjZWxfc2hhM19kaWdlc3RfZmFsbGJhY2socmVxKTsKKyt9CisrCisrc3RhdGljIGludCBzYWZleGNlbF9obWFjX3NoYTNfMjI0X2NyYV9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCisreworKwlyZXR1cm4gc2FmZXhjZWxfaG1hY19zaGEzX2NyYV9pbml0KHRmbSwgInNoYTMtMjI0Iik7CisrfQorKworK3N0cnVjdCBzYWZleGNlbF9hbGdfdGVtcGxhdGUgc2FmZXhjZWxfYWxnX2htYWNfc2hhM18yMjQgPSB7CisrCS50eXBlID0gU0FGRVhDRUxfQUxHX1RZUEVfQUhBU0gsCisrCS5hbGdvX21hc2sgPSBTQUZFWENFTF9BTEdfU0hBMywKKysJLmFsZy5haGFzaCA9IHsKKysJCS5pbml0ID0gc2FmZXhjZWxfaG1hY19zaGEzXzIyNF9pbml0LAorKwkJLnVwZGF0ZSA9IHNhZmV4Y2VsX3NoYTNfdXBkYXRlLAorKwkJLmZpbmFsID0gc2FmZXhjZWxfc2hhM19maW5hbCwKKysJCS5maW51cCA9IHNhZmV4Y2VsX3NoYTNfZmludXAsCisrCQkuZGlnZXN0ID0gc2FmZXhjZWxfaG1hY19zaGEzXzIyNF9kaWdlc3QsCisrCQkuc2V0a2V5ID0gc2FmZXhjZWxfaG1hY19zaGEzX3NldGtleSwKKysJCS5leHBvcnQgPSBzYWZleGNlbF9zaGEzX2V4cG9ydCwKKysJCS5pbXBvcnQgPSBzYWZleGNlbF9zaGEzX2ltcG9ydCwKKysJCS5oYWxnID0geworKwkJCS5kaWdlc3RzaXplID0gU0hBM18yMjRfRElHRVNUX1NJWkUsCisrCQkJLnN0YXRlc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2FmZXhjZWxfYWhhc2hfZXhwb3J0X3N0YXRlKSwKKysJCQkuYmFzZSA9IHsKKysJCQkJLmNyYV9uYW1lID0gImhtYWMoc2hhMy0yMjQpIiwKKysJCQkJLmNyYV9kcml2ZXJfbmFtZSA9ICJzYWZleGNlbC1obWFjLXNoYTMtMjI0IiwKKysJCQkJLmNyYV9wcmlvcml0eSA9IFNBRkVYQ0VMX0NSQV9QUklPUklUWSwKKysJCQkJLmNyYV9mbGFncyA9IENSWVBUT19BTEdfQVNZTkMgfAorKwkJCQkJICAgICBDUllQVE9fQUxHX0tFUk5fRFJJVkVSX09OTFkgfAorKwkJCQkJICAgICBDUllQVE9fQUxHX05FRURfRkFMTEJBQ0ssCisrCQkJCS5jcmFfYmxvY2tzaXplID0gU0hBM18yMjRfQkxPQ0tfU0laRSwKKysJCQkJLmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBzYWZleGNlbF9haGFzaF9jdHgpLAorKwkJCQkuY3JhX2luaXQgPSBzYWZleGNlbF9obWFjX3NoYTNfMjI0X2NyYV9pbml0LAorKwkJCQkuY3JhX2V4aXQgPSBzYWZleGNlbF9obWFjX3NoYTNfY3JhX2V4aXQsCisrCQkJCS5jcmFfbW9kdWxlID0gVEhJU19NT0RVTEUsCisrCQkJfSwKKysJCX0sCisrCX0sCisrfTsKKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX2htYWNfc2hhM18yNTZfaW5pdChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqYXJlcSkKKyt7CisrCXN0cnVjdCBjcnlwdG9fYWhhc2ggKnRmbSA9IGNyeXB0b19haGFzaF9yZXF0Zm0oYXJlcSk7CisrCXN0cnVjdCBzYWZleGNlbF9haGFzaF9jdHggKmN0eCA9IGNyeXB0b19haGFzaF9jdHgodGZtKTsKKysJc3RydWN0IHNhZmV4Y2VsX2FoYXNoX3JlcSAqcmVxID0gYWhhc2hfcmVxdWVzdF9jdHgoYXJlcSk7CisrCisrCW1lbXNldChyZXEsIDAsIHNpemVvZigqcmVxKSk7CisrCisrCS8qIENvcHkgKGhhbGYgb2YpIHRoZSBrZXkgKi8KKysJbWVtY3B5KHJlcS0+c3RhdGUsIGN0eC0+aXBhZCwgU0hBM18yNTZfQkxPQ0tfU0laRSAvIDIpOworKwkvKiBTdGFydCBvZiBITUFDIHNob3VsZCBoYXZlIGxlbiA9PSBwcm9jZXNzZWQgPT0gYmxvY2tzaXplICovCisrCXJlcS0+bGVuCT0gU0hBM18yNTZfQkxPQ0tfU0laRTsKKysJcmVxLT5wcm9jZXNzZWQJPSBTSEEzXzI1Nl9CTE9DS19TSVpFOworKwljdHgtPmFsZyA9IENPTlRFWFRfQ09OVFJPTF9DUllQVE9fQUxHX1NIQTNfMjU2OworKwlyZXEtPmRpZ2VzdCA9IENPTlRFWFRfQ09OVFJPTF9ESUdFU1RfSE1BQzsKKysJcmVxLT5zdGF0ZV9zeiA9IFNIQTNfMjU2X0JMT0NLX1NJWkUgLyAyOworKwlyZXEtPmRpZ2VzdF9zeiA9IFNIQTNfMjU2X0RJR0VTVF9TSVpFOworKwlyZXEtPmJsb2NrX3N6ID0gU0hBM18yNTZfQkxPQ0tfU0laRTsKKysJcmVxLT5obWFjID0gdHJ1ZTsKKysJY3R4LT5kb19mYWxsYmFjayA9IGZhbHNlOworKwljdHgtPmZiX2luaXRfZG9uZSA9IGZhbHNlOworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGludCBzYWZleGNlbF9obWFjX3NoYTNfMjU2X2RpZ2VzdChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKQorK3sKKysJaWYgKHJlcS0+bmJ5dGVzKQorKwkJcmV0dXJuIHNhZmV4Y2VsX2htYWNfc2hhM18yNTZfaW5pdChyZXEpID86CisrCQkgICAgICAgc2FmZXhjZWxfYWhhc2hfZmludXAocmVxKTsKKysKKysJLyogSFcgY2Fubm90IGRvIHplcm8gbGVuZ3RoIEhNQUMsIHVzZSBmYWxsYmFjayBpbnN0ZWFkICovCisrCXJldHVybiBzYWZleGNlbF9zaGEzX2RpZ2VzdF9mYWxsYmFjayhyZXEpOworK30KKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX2htYWNfc2hhM18yNTZfY3JhX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKKyt7CisrCXJldHVybiBzYWZleGNlbF9obWFjX3NoYTNfY3JhX2luaXQodGZtLCAic2hhMy0yNTYiKTsKKyt9CisrCisrc3RydWN0IHNhZmV4Y2VsX2FsZ190ZW1wbGF0ZSBzYWZleGNlbF9hbGdfaG1hY19zaGEzXzI1NiA9IHsKKysJLnR5cGUgPSBTQUZFWENFTF9BTEdfVFlQRV9BSEFTSCwKKysJLmFsZ29fbWFzayA9IFNBRkVYQ0VMX0FMR19TSEEzLAorKwkuYWxnLmFoYXNoID0geworKwkJLmluaXQgPSBzYWZleGNlbF9obWFjX3NoYTNfMjU2X2luaXQsCisrCQkudXBkYXRlID0gc2FmZXhjZWxfc2hhM191cGRhdGUsCisrCQkuZmluYWwgPSBzYWZleGNlbF9zaGEzX2ZpbmFsLAorKwkJLmZpbnVwID0gc2FmZXhjZWxfc2hhM19maW51cCwKKysJCS5kaWdlc3QgPSBzYWZleGNlbF9obWFjX3NoYTNfMjU2X2RpZ2VzdCwKKysJCS5zZXRrZXkgPSBzYWZleGNlbF9obWFjX3NoYTNfc2V0a2V5LAorKwkJLmV4cG9ydCA9IHNhZmV4Y2VsX3NoYTNfZXhwb3J0LAorKwkJLmltcG9ydCA9IHNhZmV4Y2VsX3NoYTNfaW1wb3J0LAorKwkJLmhhbGcgPSB7CisrCQkJLmRpZ2VzdHNpemUgPSBTSEEzXzI1Nl9ESUdFU1RfU0laRSwKKysJCQkuc3RhdGVzaXplID0gc2l6ZW9mKHN0cnVjdCBzYWZleGNlbF9haGFzaF9leHBvcnRfc3RhdGUpLAorKwkJCS5iYXNlID0geworKwkJCQkuY3JhX25hbWUgPSAiaG1hYyhzaGEzLTI1NikiLAorKwkJCQkuY3JhX2RyaXZlcl9uYW1lID0gInNhZmV4Y2VsLWhtYWMtc2hhMy0yNTYiLAorKwkJCQkuY3JhX3ByaW9yaXR5ID0gU0FGRVhDRUxfQ1JBX1BSSU9SSVRZLAorKwkJCQkuY3JhX2ZsYWdzID0gQ1JZUFRPX0FMR19BU1lOQyB8CisrCQkJCQkgICAgIENSWVBUT19BTEdfS0VSTl9EUklWRVJfT05MWSB8CisrCQkJCQkgICAgIENSWVBUT19BTEdfTkVFRF9GQUxMQkFDSywKKysJCQkJLmNyYV9ibG9ja3NpemUgPSBTSEEzXzI1Nl9CTE9DS19TSVpFLAorKwkJCQkuY3JhX2N0eHNpemUgPSBzaXplb2Yoc3RydWN0IHNhZmV4Y2VsX2FoYXNoX2N0eCksCisrCQkJCS5jcmFfaW5pdCA9IHNhZmV4Y2VsX2htYWNfc2hhM18yNTZfY3JhX2luaXQsCisrCQkJCS5jcmFfZXhpdCA9IHNhZmV4Y2VsX2htYWNfc2hhM19jcmFfZXhpdCwKKysJCQkJLmNyYV9tb2R1bGUgPSBUSElTX01PRFVMRSwKKysJCQl9LAorKwkJfSwKKysJfSwKKyt9OworKworK3N0YXRpYyBpbnQgc2FmZXhjZWxfaG1hY19zaGEzXzM4NF9pbml0KHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICphcmVxKQorK3sKKysJc3RydWN0IGNyeXB0b19haGFzaCAqdGZtID0gY3J5cHRvX2FoYXNoX3JlcXRmbShhcmVxKTsKKysJc3RydWN0IHNhZmV4Y2VsX2FoYXNoX2N0eCAqY3R4ID0gY3J5cHRvX2FoYXNoX2N0eCh0Zm0pOworKwlzdHJ1Y3Qgc2FmZXhjZWxfYWhhc2hfcmVxICpyZXEgPSBhaGFzaF9yZXF1ZXN0X2N0eChhcmVxKTsKKysKKysJbWVtc2V0KHJlcSwgMCwgc2l6ZW9mKCpyZXEpKTsKKysKKysJLyogQ29weSAoaGFsZiBvZikgdGhlIGtleSAqLworKwltZW1jcHkocmVxLT5zdGF0ZSwgY3R4LT5pcGFkLCBTSEEzXzM4NF9CTE9DS19TSVpFIC8gMik7CisrCS8qIFN0YXJ0IG9mIEhNQUMgc2hvdWxkIGhhdmUgbGVuID09IHByb2Nlc3NlZCA9PSBibG9ja3NpemUgKi8KKysJcmVxLT5sZW4JPSBTSEEzXzM4NF9CTE9DS19TSVpFOworKwlyZXEtPnByb2Nlc3NlZAk9IFNIQTNfMzg0X0JMT0NLX1NJWkU7CisrCWN0eC0+YWxnID0gQ09OVEVYVF9DT05UUk9MX0NSWVBUT19BTEdfU0hBM18zODQ7CisrCXJlcS0+ZGlnZXN0ID0gQ09OVEVYVF9DT05UUk9MX0RJR0VTVF9ITUFDOworKwlyZXEtPnN0YXRlX3N6ID0gU0hBM18zODRfQkxPQ0tfU0laRSAvIDI7CisrCXJlcS0+ZGlnZXN0X3N6ID0gU0hBM18zODRfRElHRVNUX1NJWkU7CisrCXJlcS0+YmxvY2tfc3ogPSBTSEEzXzM4NF9CTE9DS19TSVpFOworKwlyZXEtPmhtYWMgPSB0cnVlOworKwljdHgtPmRvX2ZhbGxiYWNrID0gZmFsc2U7CisrCWN0eC0+ZmJfaW5pdF9kb25lID0gZmFsc2U7CisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IHNhZmV4Y2VsX2htYWNfc2hhM18zODRfZGlnZXN0KHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpCisreworKwlpZiAocmVxLT5uYnl0ZXMpCisrCQlyZXR1cm4gc2FmZXhjZWxfaG1hY19zaGEzXzM4NF9pbml0KHJlcSkgPzoKKysJCSAgICAgICBzYWZleGNlbF9haGFzaF9maW51cChyZXEpOworKworKwkvKiBIVyBjYW5ub3QgZG8gemVybyBsZW5ndGggSE1BQywgdXNlIGZhbGxiYWNrIGluc3RlYWQgKi8KKysJcmV0dXJuIHNhZmV4Y2VsX3NoYTNfZGlnZXN0X2ZhbGxiYWNrKHJlcSk7CisrfQorKworK3N0YXRpYyBpbnQgc2FmZXhjZWxfaG1hY19zaGEzXzM4NF9jcmFfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQorK3sKKysJcmV0dXJuIHNhZmV4Y2VsX2htYWNfc2hhM19jcmFfaW5pdCh0Zm0sICJzaGEzLTM4NCIpOworK30KKysKKytzdHJ1Y3Qgc2FmZXhjZWxfYWxnX3RlbXBsYXRlIHNhZmV4Y2VsX2FsZ19obWFjX3NoYTNfMzg0ID0geworKwkudHlwZSA9IFNBRkVYQ0VMX0FMR19UWVBFX0FIQVNILAorKwkuYWxnb19tYXNrID0gU0FGRVhDRUxfQUxHX1NIQTMsCisrCS5hbGcuYWhhc2ggPSB7CisrCQkuaW5pdCA9IHNhZmV4Y2VsX2htYWNfc2hhM18zODRfaW5pdCwKKysJCS51cGRhdGUgPSBzYWZleGNlbF9zaGEzX3VwZGF0ZSwKKysJCS5maW5hbCA9IHNhZmV4Y2VsX3NoYTNfZmluYWwsCisrCQkuZmludXAgPSBzYWZleGNlbF9zaGEzX2ZpbnVwLAorKwkJLmRpZ2VzdCA9IHNhZmV4Y2VsX2htYWNfc2hhM18zODRfZGlnZXN0LAorKwkJLnNldGtleSA9IHNhZmV4Y2VsX2htYWNfc2hhM19zZXRrZXksCisrCQkuZXhwb3J0ID0gc2FmZXhjZWxfc2hhM19leHBvcnQsCisrCQkuaW1wb3J0ID0gc2FmZXhjZWxfc2hhM19pbXBvcnQsCisrCQkuaGFsZyA9IHsKKysJCQkuZGlnZXN0c2l6ZSA9IFNIQTNfMzg0X0RJR0VTVF9TSVpFLAorKwkJCS5zdGF0ZXNpemUgPSBzaXplb2Yoc3RydWN0IHNhZmV4Y2VsX2FoYXNoX2V4cG9ydF9zdGF0ZSksCisrCQkJLmJhc2UgPSB7CisrCQkJCS5jcmFfbmFtZSA9ICJobWFjKHNoYTMtMzg0KSIsCisrCQkJCS5jcmFfZHJpdmVyX25hbWUgPSAic2FmZXhjZWwtaG1hYy1zaGEzLTM4NCIsCisrCQkJCS5jcmFfcHJpb3JpdHkgPSBTQUZFWENFTF9DUkFfUFJJT1JJVFksCisrCQkJCS5jcmFfZmxhZ3MgPSBDUllQVE9fQUxHX0FTWU5DIHwKKysJCQkJCSAgICAgQ1JZUFRPX0FMR19LRVJOX0RSSVZFUl9PTkxZIHwKKysJCQkJCSAgICAgQ1JZUFRPX0FMR19ORUVEX0ZBTExCQUNLLAorKwkJCQkuY3JhX2Jsb2Nrc2l6ZSA9IFNIQTNfMzg0X0JMT0NLX1NJWkUsCisrCQkJCS5jcmFfY3R4c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2FmZXhjZWxfYWhhc2hfY3R4KSwKKysJCQkJLmNyYV9pbml0ID0gc2FmZXhjZWxfaG1hY19zaGEzXzM4NF9jcmFfaW5pdCwKKysJCQkJLmNyYV9leGl0ID0gc2FmZXhjZWxfaG1hY19zaGEzX2NyYV9leGl0LAorKwkJCQkuY3JhX21vZHVsZSA9IFRISVNfTU9EVUxFLAorKwkJCX0sCisrCQl9LAorKwl9LAorK307CisrCisrc3RhdGljIGludCBzYWZleGNlbF9obWFjX3NoYTNfNTEyX2luaXQoc3RydWN0IGFoYXNoX3JlcXVlc3QgKmFyZXEpCisreworKwlzdHJ1Y3QgY3J5cHRvX2FoYXNoICp0Zm0gPSBjcnlwdG9fYWhhc2hfcmVxdGZtKGFyZXEpOworKwlzdHJ1Y3Qgc2FmZXhjZWxfYWhhc2hfY3R4ICpjdHggPSBjcnlwdG9fYWhhc2hfY3R4KHRmbSk7CisrCXN0cnVjdCBzYWZleGNlbF9haGFzaF9yZXEgKnJlcSA9IGFoYXNoX3JlcXVlc3RfY3R4KGFyZXEpOworKworKwltZW1zZXQocmVxLCAwLCBzaXplb2YoKnJlcSkpOworKworKwkvKiBDb3B5IChoYWxmIG9mKSB0aGUga2V5ICovCisrCW1lbWNweShyZXEtPnN0YXRlLCBjdHgtPmlwYWQsIFNIQTNfNTEyX0JMT0NLX1NJWkUgLyAyKTsKKysJLyogU3RhcnQgb2YgSE1BQyBzaG91bGQgaGF2ZSBsZW4gPT0gcHJvY2Vzc2VkID09IGJsb2Nrc2l6ZSAqLworKwlyZXEtPmxlbgk9IFNIQTNfNTEyX0JMT0NLX1NJWkU7CisrCXJlcS0+cHJvY2Vzc2VkCT0gU0hBM181MTJfQkxPQ0tfU0laRTsKKysJY3R4LT5hbGcgPSBDT05URVhUX0NPTlRST0xfQ1JZUFRPX0FMR19TSEEzXzUxMjsKKysJcmVxLT5kaWdlc3QgPSBDT05URVhUX0NPTlRST0xfRElHRVNUX0hNQUM7CisrCXJlcS0+c3RhdGVfc3ogPSBTSEEzXzUxMl9CTE9DS19TSVpFIC8gMjsKKysJcmVxLT5kaWdlc3Rfc3ogPSBTSEEzXzUxMl9ESUdFU1RfU0laRTsKKysJcmVxLT5ibG9ja19zeiA9IFNIQTNfNTEyX0JMT0NLX1NJWkU7CisrCXJlcS0+aG1hYyA9IHRydWU7CisrCWN0eC0+ZG9fZmFsbGJhY2sgPSBmYWxzZTsKKysJY3R4LT5mYl9pbml0X2RvbmUgPSBmYWxzZTsKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQgc2FmZXhjZWxfaG1hY19zaGEzXzUxMl9kaWdlc3Qoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSkKKyt7CisrCWlmIChyZXEtPm5ieXRlcykKKysJCXJldHVybiBzYWZleGNlbF9obWFjX3NoYTNfNTEyX2luaXQocmVxKSA/OgorKwkJICAgICAgIHNhZmV4Y2VsX2FoYXNoX2ZpbnVwKHJlcSk7CisrCisrCS8qIEhXIGNhbm5vdCBkbyB6ZXJvIGxlbmd0aCBITUFDLCB1c2UgZmFsbGJhY2sgaW5zdGVhZCAqLworKwlyZXR1cm4gc2FmZXhjZWxfc2hhM19kaWdlc3RfZmFsbGJhY2socmVxKTsKKyt9CisrCisrc3RhdGljIGludCBzYWZleGNlbF9obWFjX3NoYTNfNTEyX2NyYV9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCisreworKwlyZXR1cm4gc2FmZXhjZWxfaG1hY19zaGEzX2NyYV9pbml0KHRmbSwgInNoYTMtNTEyIik7CisrfQorK3N0cnVjdCBzYWZleGNlbF9hbGdfdGVtcGxhdGUgc2FmZXhjZWxfYWxnX2htYWNfc2hhM181MTIgPSB7CisrCS50eXBlID0gU0FGRVhDRUxfQUxHX1RZUEVfQUhBU0gsCisrCS5hbGdvX21hc2sgPSBTQUZFWENFTF9BTEdfU0hBMywKKysJLmFsZy5haGFzaCA9IHsKKysJCS5pbml0ID0gc2FmZXhjZWxfaG1hY19zaGEzXzUxMl9pbml0LAorKwkJLnVwZGF0ZSA9IHNhZmV4Y2VsX3NoYTNfdXBkYXRlLAorKwkJLmZpbmFsID0gc2FmZXhjZWxfc2hhM19maW5hbCwKKysJCS5maW51cCA9IHNhZmV4Y2VsX3NoYTNfZmludXAsCisrCQkuZGlnZXN0ID0gc2FmZXhjZWxfaG1hY19zaGEzXzUxMl9kaWdlc3QsCisrCQkuc2V0a2V5ID0gc2FmZXhjZWxfaG1hY19zaGEzX3NldGtleSwKKysJCS5leHBvcnQgPSBzYWZleGNlbF9zaGEzX2V4cG9ydCwKKysJCS5pbXBvcnQgPSBzYWZleGNlbF9zaGEzX2ltcG9ydCwKKysJCS5oYWxnID0geworKwkJCS5kaWdlc3RzaXplID0gU0hBM181MTJfRElHRVNUX1NJWkUsCisrCQkJLnN0YXRlc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2FmZXhjZWxfYWhhc2hfZXhwb3J0X3N0YXRlKSwKKysJCQkuYmFzZSA9IHsKKysJCQkJLmNyYV9uYW1lID0gImhtYWMoc2hhMy01MTIpIiwKKysJCQkJLmNyYV9kcml2ZXJfbmFtZSA9ICJzYWZleGNlbC1obWFjLXNoYTMtNTEyIiwKKysJCQkJLmNyYV9wcmlvcml0eSA9IFNBRkVYQ0VMX0NSQV9QUklPUklUWSwKKysJCQkJLmNyYV9mbGFncyA9IENSWVBUT19BTEdfQVNZTkMgfAorKwkJCQkJICAgICBDUllQVE9fQUxHX0tFUk5fRFJJVkVSX09OTFkgfAorKwkJCQkJICAgICBDUllQVE9fQUxHX05FRURfRkFMTEJBQ0ssCisrCQkJCS5jcmFfYmxvY2tzaXplID0gU0hBM181MTJfQkxPQ0tfU0laRSwKKysJCQkJLmNyYV9jdHhzaXplID0gc2l6ZW9mKHN0cnVjdCBzYWZleGNlbF9haGFzaF9jdHgpLAorKwkJCQkuY3JhX2luaXQgPSBzYWZleGNlbF9obWFjX3NoYTNfNTEyX2NyYV9pbml0LAorKwkJCQkuY3JhX2V4aXQgPSBzYWZleGNlbF9obWFjX3NoYTNfY3JhX2V4aXQsCisrCQkJCS5jcmFfbW9kdWxlID0gVEhJU19NT0RVTEUsCisrCQkJfSwKKysJCX0sCisgCX0sCisgfTsKKy0tLSBhL2RyaXZlcnMvY3J5cHRvL2luc2lkZS1zZWN1cmUvc2FmZXhjZWxfcmluZy5jCisrKysgYi9kcml2ZXJzL2NyeXB0by9pbnNpZGUtc2VjdXJlL3NhZmV4Y2VsX3JpbmcuYworQEAgLTE0LDcgKzE0LDEyIEBAIGludCBzYWZleGNlbF9pbml0X3JpbmdfZGVzY3JpcHRvcnMoc3RydWMKKyAJCQkJICAgc3RydWN0IHNhZmV4Y2VsX2Rlc2NfcmluZyAqY2RyLAorIAkJCQkgICBzdHJ1Y3Qgc2FmZXhjZWxfZGVzY19yaW5nICpyZHIpCisgeworLQljZHItPm9mZnNldCA9IHNpemVvZih1MzIpICogcHJpdi0+Y29uZmlnLmNkX29mZnNldDsKKysJaW50IGk7CisrCXN0cnVjdCBzYWZleGNlbF9jb21tYW5kX2Rlc2MgKmNkZXNjOworKwlkbWFfYWRkcl90IGF0b2s7CisrCisrCS8qIEFjdHVhbCBjb21tYW5kIGRlc2NyaXB0b3IgcmluZyAqLworKwljZHItPm9mZnNldCA9IHByaXYtPmNvbmZpZy5jZF9vZmZzZXQ7CisgCWNkci0+YmFzZSA9IGRtYW1fYWxsb2NfY29oZXJlbnQocHJpdi0+ZGV2LAorIAkJCQkJY2RyLT5vZmZzZXQgKiBFSVAxOTdfREVGQVVMVF9SSU5HX1NJWkUsCisgCQkJCQkmY2RyLT5iYXNlX2RtYSwgR0ZQX0tFUk5FTCk7CitAQCAtMjQsNyArMjksMzQgQEAgaW50IHNhZmV4Y2VsX2luaXRfcmluZ19kZXNjcmlwdG9ycyhzdHJ1YworIAljZHItPmJhc2VfZW5kID0gY2RyLT5iYXNlICsgY2RyLT5vZmZzZXQgKiAoRUlQMTk3X0RFRkFVTFRfUklOR19TSVpFIC0gMSk7CisgCWNkci0+cmVhZCA9IGNkci0+YmFzZTsKKyAKKy0JcmRyLT5vZmZzZXQgPSBzaXplb2YodTMyKSAqIHByaXYtPmNvbmZpZy5yZF9vZmZzZXQ7CisrCS8qIENvbW1hbmQgZGVzY3JpcHRvciBzaGFkb3cgcmluZyBmb3Igc3RvcmluZyBhZGRpdGlvbmFsIHRva2VuIGRhdGEgKi8KKysJY2RyLT5zaG9mZnNldCA9IHByaXYtPmNvbmZpZy5jZHNoX29mZnNldDsKKysJY2RyLT5zaGJhc2UgPSBkbWFtX2FsbG9jX2NvaGVyZW50KHByaXYtPmRldiwKKysJCQkJCSAgY2RyLT5zaG9mZnNldCAqCisrCQkJCQkgIEVJUDE5N19ERUZBVUxUX1JJTkdfU0laRSwKKysJCQkJCSAgJmNkci0+c2hiYXNlX2RtYSwgR0ZQX0tFUk5FTCk7CisrCWlmICghY2RyLT5zaGJhc2UpCisrCQlyZXR1cm4gLUVOT01FTTsKKysJY2RyLT5zaHdyaXRlID0gY2RyLT5zaGJhc2U7CisrCWNkci0+c2hiYXNlX2VuZCA9IGNkci0+c2hiYXNlICsgY2RyLT5zaG9mZnNldCAqCisrCQkJCQkoRUlQMTk3X0RFRkFVTFRfUklOR19TSVpFIC0gMSk7CisrCisrCS8qCisrCSAqIFBvcHVsYXRlIGNvbW1hbmQgZGVzY3JpcHRvcnMgd2l0aCBwaHlzaWNhbCBwb2ludGVycyB0byBzaGFkb3cgZGVzY3MuCisrCSAqIE5vdGUgdGhhdCB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhpcyBvbmNlIGlmIHdlIGRvbid0IG92ZXJ3cml0ZSB0aGVtLgorKwkgKi8KKysJY2Rlc2MgPSBjZHItPmJhc2U7CisrCWF0b2sgPSBjZHItPnNoYmFzZV9kbWE7CisrCWZvciAoaSA9IDA7IGkgPCBFSVAxOTdfREVGQVVMVF9SSU5HX1NJWkU7IGkrKykgeworKwkJY2Rlc2MtPmF0b2tfbG8gPSBsb3dlcl8zMl9iaXRzKGF0b2spOworKwkJY2Rlc2MtPmF0b2tfaGkgPSB1cHBlcl8zMl9iaXRzKGF0b2spOworKwkJY2Rlc2MgPSAodm9pZCAqKWNkZXNjICsgY2RyLT5vZmZzZXQ7CisrCQlhdG9rICs9IGNkci0+c2hvZmZzZXQ7CisrCX0KKysKKysJcmRyLT5vZmZzZXQgPSBwcml2LT5jb25maWcucmRfb2Zmc2V0OworKwkvKiBVc2Ugc2hvZmZzZXQgZm9yIHJlc3VsdCB0b2tlbiBvZmZzZXQgaGVyZSAqLworKwlyZHItPnNob2Zmc2V0ID0gcHJpdi0+Y29uZmlnLnJlc19vZmZzZXQ7CisgCXJkci0+YmFzZSA9IGRtYW1fYWxsb2NfY29oZXJlbnQocHJpdi0+ZGV2LAorIAkJCQkJcmRyLT5vZmZzZXQgKiBFSVAxOTdfREVGQVVMVF9SSU5HX1NJWkUsCisgCQkJCQkmcmRyLT5iYXNlX2RtYSwgR0ZQX0tFUk5FTCk7CitAQCAtNDIsMTEgKzc0LDQwIEBAIGlubGluZSBpbnQgc2FmZXhjZWxfc2VsZWN0X3Jpbmcoc3RydWN0IHMKKyAJcmV0dXJuIChhdG9taWNfaW5jX3JldHVybigmcHJpdi0+cmluZ191c2VkKSAlIHByaXYtPmNvbmZpZy5yaW5ncyk7CisgfQorIAorLXN0YXRpYyB2b2lkICpzYWZleGNlbF9yaW5nX25leHRfd3B0cihzdHJ1Y3Qgc2FmZXhjZWxfY3J5cHRvX3ByaXYgKnByaXYsCistCQkJCSAgICAgc3RydWN0IHNhZmV4Y2VsX2Rlc2NfcmluZyAqcmluZykKKytzdGF0aWMgdm9pZCAqc2FmZXhjZWxfcmluZ19uZXh0X2N3cHRyKHN0cnVjdCBzYWZleGNlbF9jcnlwdG9fcHJpdiAqcHJpdiwKKysJCQkJICAgICBzdHJ1Y3Qgc2FmZXhjZWxfZGVzY19yaW5nICpyaW5nLAorKwkJCQkgICAgIGJvb2wgZmlyc3QsCisrCQkJCSAgICAgc3RydWN0IHNhZmV4Y2VsX3Rva2VuICoqYXRva2VuKQorIHsKKyAJdm9pZCAqcHRyID0gcmluZy0+d3JpdGU7CisgCisrCWlmIChmaXJzdCkKKysJCSphdG9rZW4gPSByaW5nLT5zaHdyaXRlOworKworKwlpZiAoKHJpbmctPndyaXRlID09IHJpbmctPnJlYWQgLSByaW5nLT5vZmZzZXQpIHx8CisrCSAgICAocmluZy0+cmVhZCA9PSByaW5nLT5iYXNlICYmIHJpbmctPndyaXRlID09IHJpbmctPmJhc2VfZW5kKSkKKysJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworKworKwlpZiAocmluZy0+d3JpdGUgPT0gcmluZy0+YmFzZV9lbmQpIHsKKysJCXJpbmctPndyaXRlID0gcmluZy0+YmFzZTsKKysJCXJpbmctPnNod3JpdGUgPSByaW5nLT5zaGJhc2U7CisrCX0gZWxzZSB7CisrCQlyaW5nLT53cml0ZSArPSByaW5nLT5vZmZzZXQ7CisrCQlyaW5nLT5zaHdyaXRlICs9IHJpbmctPnNob2Zmc2V0OworKwl9CisrCisrCXJldHVybiBwdHI7CisrfQorKworK3N0YXRpYyB2b2lkICpzYWZleGNlbF9yaW5nX25leHRfcndwdHIoc3RydWN0IHNhZmV4Y2VsX2NyeXB0b19wcml2ICpwcml2LAorKwkJCQkgICAgIHN0cnVjdCBzYWZleGNlbF9kZXNjX3JpbmcgKnJpbmcsCisrCQkJCSAgICAgc3RydWN0IHJlc3VsdF9kYXRhX2Rlc2MgKipydG9rZW4pCisreworKwl2b2lkICpwdHIgPSByaW5nLT53cml0ZTsKKysKKysJLyogUmVzdWx0IHRva2VuIGF0IHJlbGF0aXZlIG9mZnNldCBzaG9mZnNldCAqLworKwkqcnRva2VuID0gcmluZy0+d3JpdGUgKyByaW5nLT5zaG9mZnNldDsKKysKKyAJaWYgKChyaW5nLT53cml0ZSA9PSByaW5nLT5yZWFkIC0gcmluZy0+b2Zmc2V0KSB8fAorIAkgICAgKHJpbmctPnJlYWQgPT0gcmluZy0+YmFzZSAmJiByaW5nLT53cml0ZSA9PSByaW5nLT5iYXNlX2VuZCkpCisgCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKK0BAIC0xMDYsMTAgKzE2NywxMyBAQCB2b2lkIHNhZmV4Y2VsX3Jpbmdfcm9sbGJhY2tfd3B0cihzdHJ1Y3QKKyAJaWYgKHJpbmctPndyaXRlID09IHJpbmctPnJlYWQpCisgCQlyZXR1cm47CisgCistCWlmIChyaW5nLT53cml0ZSA9PSByaW5nLT5iYXNlKQorKwlpZiAocmluZy0+d3JpdGUgPT0gcmluZy0+YmFzZSkgeworIAkJcmluZy0+d3JpdGUgPSByaW5nLT5iYXNlX2VuZDsKKy0JZWxzZQorKwkJcmluZy0+c2h3cml0ZSA9IHJpbmctPnNoYmFzZV9lbmQ7CisrCX0gZWxzZSB7CisgCQlyaW5nLT53cml0ZSAtPSByaW5nLT5vZmZzZXQ7CisrCQlyaW5nLT5zaHdyaXRlIC09IHJpbmctPnNob2Zmc2V0OworKwl9CisgfQorIAorIHN0cnVjdCBzYWZleGNlbF9jb21tYW5kX2Rlc2MgKnNhZmV4Y2VsX2FkZF9jZGVzYyhzdHJ1Y3Qgc2FmZXhjZWxfY3J5cHRvX3ByaXYgKnByaXYsCitAQCAtMTE3LDI2ICsxODEsMjYgQEAgc3RydWN0IHNhZmV4Y2VsX2NvbW1hbmRfZGVzYyAqc2FmZXhjZWxfYQorIAkJCQkJCSBib29sIGZpcnN0LCBib29sIGxhc3QsCisgCQkJCQkJIGRtYV9hZGRyX3QgZGF0YSwgdTMyIGRhdGFfbGVuLAorIAkJCQkJCSB1MzIgZnVsbF9kYXRhX2xlbiwKKy0JCQkJCQkgZG1hX2FkZHJfdCBjb250ZXh0KSB7CisrCQkJCQkJIGRtYV9hZGRyX3QgY29udGV4dCwKKysJCQkJCQkgc3RydWN0IHNhZmV4Y2VsX3Rva2VuICoqYXRva2VuKQorK3sKKyAJc3RydWN0IHNhZmV4Y2VsX2NvbW1hbmRfZGVzYyAqY2Rlc2M7CistCWludCBpOworIAorLQljZGVzYyA9IHNhZmV4Y2VsX3JpbmdfbmV4dF93cHRyKHByaXYsICZwcml2LT5yaW5nW3JpbmdfaWRdLmNkcik7CisrCWNkZXNjID0gc2FmZXhjZWxfcmluZ19uZXh0X2N3cHRyKHByaXYsICZwcml2LT5yaW5nW3JpbmdfaWRdLmNkciwKKysJCQkJCSBmaXJzdCwgYXRva2VuKTsKKyAJaWYgKElTX0VSUihjZGVzYykpCisgCQlyZXR1cm4gY2Rlc2M7CisgCistCW1lbXNldChjZGVzYywgMCwgc2l6ZW9mKHN0cnVjdCBzYWZleGNlbF9jb21tYW5kX2Rlc2MpKTsKKy0KKy0JY2Rlc2MtPmZpcnN0X3NlZyA9IGZpcnN0OworLQljZGVzYy0+bGFzdF9zZWcgPSBsYXN0OworIAljZGVzYy0+cGFydGljbGVfc2l6ZSA9IGRhdGFfbGVuOworKwljZGVzYy0+cnN2ZDAgPSAwOworKwljZGVzYy0+bGFzdF9zZWcgPSBsYXN0OworKwljZGVzYy0+Zmlyc3Rfc2VnID0gZmlyc3Q7CisrCWNkZXNjLT5hZGRpdGlvbmFsX2NkYXRhX3NpemUgPSAwOworKwljZGVzYy0+cnN2ZDEgPSAwOworIAljZGVzYy0+ZGF0YV9sbyA9IGxvd2VyXzMyX2JpdHMoZGF0YSk7CisgCWNkZXNjLT5kYXRhX2hpID0gdXBwZXJfMzJfYml0cyhkYXRhKTsKKyAKKy0JaWYgKGZpcnN0ICYmIGNvbnRleHQpIHsKKy0JCXN0cnVjdCBzYWZleGNlbF90b2tlbiAqdG9rZW4gPQorLQkJCShzdHJ1Y3Qgc2FmZXhjZWxfdG9rZW4gKiljZGVzYy0+Y29udHJvbF9kYXRhLnRva2VuOworLQorKwlpZiAoZmlyc3QpIHsKKyAJCS8qCisgCQkgKiBOb3RlIHRoYXQgdGhlIGxlbmd0aCBoZXJlIE1VU1QgYmUgPjAgb3IgZWxzZSB0aGUgRUlQKDEpOTcKKyAJCSAqIG1heSBoYW5nLiBOZXdlciBFSVAxOTcgZmlybXdhcmUgYWN0dWFsbHkgaW5jb3Jwb3JhdGVzIHRoaXMKK0BAIC0xNDYsMjAgKzIxMCwxMiBAQCBzdHJ1Y3Qgc2FmZXhjZWxfY29tbWFuZF9kZXNjICpzYWZleGNlbF9hCisgCQljZGVzYy0+Y29udHJvbF9kYXRhLnBhY2tldF9sZW5ndGggPSBmdWxsX2RhdGFfbGVuID86IDE7CisgCQljZGVzYy0+Y29udHJvbF9kYXRhLm9wdGlvbnMgPSBFSVAxOTdfT1BUSU9OX01BR0lDX1ZBTFVFIHwKKyAJCQkJCSAgICAgIEVJUDE5N19PUFRJT05fNjRCSVRfQ1RYIHwKKy0JCQkJCSAgICAgIEVJUDE5N19PUFRJT05fQ1RYX0NUUkxfSU5fQ01EOworLQkJY2Rlc2MtPmNvbnRyb2xfZGF0YS5jb250ZXh0X2xvID0KKy0JCQkobG93ZXJfMzJfYml0cyhjb250ZXh0KSAmIEdFTk1BU0soMzEsIDIpKSA+PiAyOworKwkJCQkJICAgICAgRUlQMTk3X09QVElPTl9DVFhfQ1RSTF9JTl9DTUQgfAorKwkJCQkJICAgICAgRUlQMTk3X09QVElPTl9SQ19BVVRPOworKwkJY2Rlc2MtPmNvbnRyb2xfZGF0YS50eXBlID0gRUlQMTk3X1RZUEVfQkNMQTsKKysJCWNkZXNjLT5jb250cm9sX2RhdGEuY29udGV4dF9sbyA9IGxvd2VyXzMyX2JpdHMoY29udGV4dCkgfAorKwkJCQkJCSBFSVAxOTdfQ09OVEVYVF9TTUFMTDsKKyAJCWNkZXNjLT5jb250cm9sX2RhdGEuY29udGV4dF9oaSA9IHVwcGVyXzMyX2JpdHMoY29udGV4dCk7CistCistCQlpZiAocHJpdi0+dmVyc2lvbiA9PSBFSVAxOTdCX01SVkwgfHwKKy0JCSAgICBwcml2LT52ZXJzaW9uID09IEVJUDE5N0RfTVJWTCkKKy0JCQljZGVzYy0+Y29udHJvbF9kYXRhLm9wdGlvbnMgfD0gRUlQMTk3X09QVElPTl9SQ19BVVRPOworLQorLQkJLyogVE9ETzogbGFyZ2UgeGZvcm0gSE1BQyB3aXRoIFNIQS0zODQvNTEyIHVzZXMgcmVmcmVzaCA9IDMgKi8KKy0JCWNkZXNjLT5jb250cm9sX2RhdGEucmVmcmVzaCA9IDI7CistCistCQlmb3IgKGkgPSAwOyBpIDwgRUlQMTk3X01BWF9UT0tFTlM7IGkrKykKKy0JCQllaXAxOTdfbm9vcF90b2tlbigmdG9rZW5baV0pOworIAl9CisgCisgCXJldHVybiBjZGVzYzsKK0BAIC0xNzEsMTggKzIyNywyNyBAQCBzdHJ1Y3Qgc2FmZXhjZWxfcmVzdWx0X2Rlc2MgKnNhZmV4Y2VsX2FkCisgCQkJCQkJZG1hX2FkZHJfdCBkYXRhLCB1MzIgbGVuKQorIHsKKyAJc3RydWN0IHNhZmV4Y2VsX3Jlc3VsdF9kZXNjICpyZGVzYzsKKysJc3RydWN0IHJlc3VsdF9kYXRhX2Rlc2MgKnJ0b2tlbjsKKyAKKy0JcmRlc2MgPSBzYWZleGNlbF9yaW5nX25leHRfd3B0cihwcml2LCAmcHJpdi0+cmluZ1tyaW5nX2lkXS5yZHIpOworKwlyZGVzYyA9IHNhZmV4Y2VsX3JpbmdfbmV4dF9yd3B0cihwcml2LCAmcHJpdi0+cmluZ1tyaW5nX2lkXS5yZHIsCisrCQkJCQkgJnJ0b2tlbik7CisgCWlmIChJU19FUlIocmRlc2MpKQorIAkJcmV0dXJuIHJkZXNjOworIAorLQltZW1zZXQocmRlc2MsIDAsIHNpemVvZihzdHJ1Y3Qgc2FmZXhjZWxfcmVzdWx0X2Rlc2MpKTsKKy0KKy0JcmRlc2MtPmZpcnN0X3NlZyA9IGZpcnN0OworLQlyZGVzYy0+bGFzdF9zZWcgPSBsYXN0OworIAlyZGVzYy0+cGFydGljbGVfc2l6ZSA9IGxlbjsKKysJcmRlc2MtPnJzdmQwID0gMDsKKysJcmRlc2MtPmRlc2NyaXB0b3Jfb3ZlcmZsb3cgPSAwOworKwlyZGVzYy0+YnVmZmVyX292ZXJmbG93ID0gMDsKKysJcmRlc2MtPmxhc3Rfc2VnID0gbGFzdDsKKysJcmRlc2MtPmZpcnN0X3NlZyA9IGZpcnN0OworKwlyZGVzYy0+cmVzdWx0X3NpemUgPSBFSVAxOTdfUkQ2NF9SRVNVTFRfU0laRTsKKysJcmRlc2MtPnJzdmQxID0gMDsKKyAJcmRlc2MtPmRhdGFfbG8gPSBsb3dlcl8zMl9iaXRzKGRhdGEpOworIAlyZGVzYy0+ZGF0YV9oaSA9IHVwcGVyXzMyX2JpdHMoZGF0YSk7CisgCisrCS8qIENsZWFyIGxlbmd0aCAmIGVycm9yIGNvZGUgaW4gcmVzdWx0IHRva2VuICovCisrCXJ0b2tlbi0+cGFja2V0X2xlbmd0aCA9IDA7CisrCXJ0b2tlbi0+ZXJyb3JfY29kZSA9IDA7CisrCisgCXJldHVybiByZGVzYzsKKyB9CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDUwMS1jcnlwdG8tYWRkLWVpcDk3LWluc2lkZS1zZWN1cmUtc3VwcG9ydC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wNTAxLWNyeXB0by1hZGQtZWlwOTctaW5zaWRlLXNlY3VyZS1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZGE0ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDUwMS1jcnlwdG8tYWRkLWVpcDk3LWluc2lkZS1zZWN1cmUtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDI3IEBACistLS0gYS9kcml2ZXJzL2NyeXB0by9pbnNpZGUtc2VjdXJlL3NhZmV4Y2VsLmMKKysrKyBiL2RyaXZlcnMvY3J5cHRvL2luc2lkZS1zZWN1cmUvc2FmZXhjZWwuYworQEAgLTU5NSw2ICs1OTUsMTQgQEAgc3RhdGljIGludCBzYWZleGNlbF9od19pbml0KHN0cnVjdCBzYWZleAorIAkJdmFsIHw9IEVJUDE5N19NU1RfQ1RSTF9UWF9NQVhfQ01EKDUpOworIAkJd3JpdGVsKHZhbCwgRUlQMTk3X0hJQV9BSUMocHJpdikgKyBFSVAxOTdfSElBX01TVF9DVFJMKTsKKyAJfQorKwkvKgorKwkgKiBTZXQgbWF4aW11bSBudW1iZXIgb2YgVFggY29tbWFuZHMgdG8gMl40ID0gMTYgZm9yIEVJUDk3IEhXMi4xL0hXMi4zCisrCSAqLworKwllbHNlIHsKKysJCXZhbCA9IDA7CisrCQl2YWwgfD0gRUlQOTdfTVNUX0NUUkxfVFhfTUFYX0NNRCg0KTsKKysJCXdyaXRlbCh2YWwsIEVJUDE5N19ISUFfQUlDKHByaXYpICsgRUlQMTk3X0hJQV9NU1RfQ1RSTCk7CisrCX0KKyAKKyAJLyogQ29uZmlndXJlIHdyL3JkIGNhY2hlIHZhbHVlcyAqLworIAl3cml0ZWwoRUlQMTk3X01TVF9DVFJMX1JEX0NBQ0hFKFJEX0NBQ0hFXzRCSVRTKSB8CistLS0gYS9kcml2ZXJzL2NyeXB0by9pbnNpZGUtc2VjdXJlL3NhZmV4Y2VsLmgKKysrKyBiL2RyaXZlcnMvY3J5cHRvL2luc2lkZS1zZWN1cmUvc2FmZXhjZWwuaAorQEAgLTMwNiw2ICszMDYsNyBAQAorICNkZWZpbmUgRUlQMTk3X01TVF9DVFJMX1JEX0NBQ0hFKG4pCQkoKChuKSAmIDB4ZikgPDwgMCkKKyAjZGVmaW5lIEVJUDE5N19NU1RfQ1RSTF9XRF9DQUNIRShuKQkJKCgobikgJiAweGYpIDw8IDQpCisgI2RlZmluZSBFSVAxOTdfTVNUX0NUUkxfVFhfTUFYX0NNRChuKQkJKCgobikgJiAweGYpIDw8IDIwKQorKyNkZWZpbmUgRUlQOTdfTVNUX0NUUkxfVFhfTUFYX0NNRChuKQkJKCgobikgJiAweGYpIDw8IDQpCisgI2RlZmluZSBFSVAxOTdfTVNUX0NUUkxfQllURV9TV0FQCQlCSVQoMjQpCisgI2RlZmluZSBFSVAxOTdfTVNUX0NUUkxfTk9fQllURV9TV0FQCQlCSVQoMjUpCisgI2RlZmluZSBFSVAxOTdfTVNUX0NUUkxfQllURV9TV0FQX0JJVFMgICAgICAgICAgR0VOTUFTSygyNSwgMjQpCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDUwMi1kdHMtbXQ3NjIzLWVpcDk3LWluc2lkZS1zZWN1cmUtc3VwcG9ydC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wNTAyLWR0cy1tdDc2MjMtZWlwOTctaW5zaWRlLXNlY3VyZS1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MDc3ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDUwMi1kdHMtbXQ3NjIzLWVpcDk3LWluc2lkZS1zZWN1cmUtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDIzIEBACistLS0gYS9hcmNoL2FybS9ib290L2R0cy9tdDc2MjMuZHRzaQorKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3NjIzLmR0c2kKK0BAIC0xMDQ3LDE3ICsxMDQ3LDE0IEBACisgCX07CisgCisgCWNyeXB0bzogY3J5cHRvQDFiMjQwMDAwIHsKKy0JCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssZWlwOTctY3J5cHRvIjsKKysJCWNvbXBhdGlibGUgPSAiaW5zaWRlLXNlY3VyZSxzYWZleGNlbC1laXA5NyI7CisgCQlyZWcgPSA8MCAweDFiMjQwMDAwIDAgMHgyMDAwMD47CisgCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgODIgSVJRX1RZUEVfTEVWRUxfTE9XPiwKKyAJCQkgICAgIDxHSUNfU1BJIDgzIElSUV9UWVBFX0xFVkVMX0xPVz4sCisgCQkJICAgICA8R0lDX1NQSSA4NCBJUlFfVFlQRV9MRVZFTF9MT1c+LAorLQkJCSAgICAgPEdJQ19TUEkgOTEgSVJRX1RZUEVfTEVWRUxfTE9XPiwKKy0JCQkgICAgIDxHSUNfU1BJIDk3IElSUV9UWVBFX0xFVkVMX0xPVz47CisrCQkJICAgICA8R0lDX1NQSSA5MSBJUlFfVFlQRV9MRVZFTF9MT1c+OworKwkJaW50ZXJydXB0LW5hbWVzID0gInJpbmcwIiwgInJpbmcxIiwgInJpbmcyIiwgInJpbmczIjsKKyAJCWNsb2NrcyA9IDwmZXRoc3lzIENMS19FVEhTWVNfQ1JZUFRPPjsKKy0JCWNsb2NrLW5hbWVzID0gImNyeXAiOworLQkJcG93ZXItZG9tYWlucyA9IDwmc2Nwc3lzIE1UMjcwMV9QT1dFUl9ET01BSU5fRVRIPjsKKy0JCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisgCX07CisgCisgCWJkcHN5czogc3lzY29uQDFjMDAwMDAwIHsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wNTAzLWNyeXB0by1maXgtZWlwOTctY2FjaGUtaW5jb2hlcmVudC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wNTAzLWNyeXB0by1maXgtZWlwOTctY2FjaGUtaW5jb2hlcmVudC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmMwZmQwCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA1MDMtY3J5cHRvLWZpeC1laXA5Ny1jYWNoZS1pbmNvaGVyZW50LnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKKy0tLSBhL2RyaXZlcnMvY3J5cHRvL2luc2lkZS1zZWN1cmUvc2FmZXhjZWwuaAorKysrIGIvZHJpdmVycy9jcnlwdG8vaW5zaWRlLXNlY3VyZS9zYWZleGNlbC5oCitAQCAtNzIyLDYgKzcyMiw5IEBAIGVudW0gc2FmZXhjZWxfZWlwX3ZlcnNpb24geworIC8qIFByaW9yaXR5IHdlIHVzZSBmb3IgYWR2ZXJ0aXNpbmcgb3VyIGFsZ29yaXRobXMgKi8KKyAjZGVmaW5lIFNBRkVYQ0VMX0NSQV9QUklPUklUWQkJMzAwCisgCisrLyogU3lzdGVtIGNhY2hlIGxpbmUgc2l6ZSAqLworKyNkZWZpbmUgU1lTVEVNX0NBQ0hFTElORV9TSVpFCQk2NAorKworIC8qIFNNMyBkaWdlc3QgcmVzdWx0IGZvciB6ZXJvIGxlbmd0aCBtZXNzYWdlICovCisgI2RlZmluZSBFSVAxOTdfU00zX1pFUk9NX0hBU0gJIlx4MUFceEIyXHgxRFx4ODNceDU1XHhDRlx4QTFceDdGIiBcCisgCQkJCSJceDhFXHg2MVx4MTlceDQ4XHgzMVx4RThceDFBXHg4RiIgXAorLS0tIGEvZHJpdmVycy9jcnlwdG8vaW5zaWRlLXNlY3VyZS9zYWZleGNlbF9oYXNoLmMKKysrKyBiL2RyaXZlcnMvY3J5cHRvL2luc2lkZS1zZWN1cmUvc2FmZXhjZWxfaGFzaC5jCitAQCAtNTcsOSArNTcsOSBAQCBzdHJ1Y3Qgc2FmZXhjZWxfYWhhc2hfcmVxIHsKKyAJdTggYmxvY2tfc3o7ICAgIC8qIGJsb2NrIHNpemUsIG9ubHkgc2V0IG9uY2UgKi8KKyAJdTggZGlnZXN0X3N6OyAgIC8qIG91dHB1dCBkaWdlc3Qgc2l6ZSwgb25seSBzZXQgb25jZSAqLworIAlfX2xlMzIgc3RhdGVbU0hBM181MTJfQkxPQ0tfU0laRSAvCistCQkgICAgIHNpemVvZihfX2xlMzIpXSBfX2FsaWduZWQoc2l6ZW9mKF9fbGUzMikpOworKwkJICAgICBzaXplb2YoX19sZTMyKV0gX19hbGlnbmVkKFNZU1RFTV9DQUNIRUxJTkVfU0laRSk7CisgCistCXU2NCBsZW47CisrCXU2NCBsZW4gX19hbGlnbmVkKFNZU1RFTV9DQUNIRUxJTkVfU0laRSk7CisgCXU2NCBwcm9jZXNzZWQ7CisgCisgCXU4IGNhY2hlW0hBU0hfQ0FDSEVfU0laRV0gX19hbGlnbmVkKHNpemVvZih1MzIpKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wNTA0LW1hY3NlYy1yZXZlcnQtYXN5bmMtc3VwcG9ydC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wNTA0LW1hY3NlYy1yZXZlcnQtYXN5bmMtc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTJkYjUwCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA1MDQtbWFjc2VjLXJldmVydC1hc3luYy1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKKy0tLSBhL2RyaXZlcnMvbmV0L21hY3NlYy5jCisrKysgYi9kcml2ZXJzL25ldC9tYWNzZWMuYworQEAgLTEzMDksOCArMTMwOSw3IEBACisgCXN0cnVjdCBjcnlwdG9fYWVhZCAqdGZtOworIAlpbnQgcmV0OworIAorLQkvKiBQaWNrIGEgc3luYyBnY20oYWVzKSBjaXBoZXIgdG8gZW5zdXJlIG9yZGVyIGlzIHByZXNlcnZlZC4gKi8KKy0JdGZtID0gY3J5cHRvX2FsbG9jX2FlYWQoImdjbShhZXMpIiwgMCwgQ1JZUFRPX0FMR19BU1lOQyk7CisrCXRmbSA9IGNyeXB0b19hbGxvY19hZWFkKCJnY20oYWVzKSIsIDAsIDApOworIAorIAlpZiAoSVNfRVJSKHRmbSkpCisgCQlyZXR1cm4gdGZtOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA2MDAtbmV0LXBoeWxpbmstcHJvcGFnYXRlLXJlc29sdmVkLWxpbmstY29uZmlnLXZpYS1tYWNfbC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wNjAwLW5ldC1waHlsaW5rLXByb3BhZ2F0ZS1yZXNvbHZlZC1saW5rLWNvbmZpZy12aWEtbWFjX2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ5YjkyMQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wNjAwLW5ldC1waHlsaW5rLXByb3BhZ2F0ZS1yZXNvbHZlZC1saW5rLWNvbmZpZy12aWEtbWFjX2wucGF0Y2gKQEAgLTAsMCArMSwyMzAgQEAKK0Zyb206IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcudWs+CitEYXRlOiBXZWQsIDI2IEZlYiAyMDIwIDEwOjIzOjQxICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIG5ldDogcGh5bGluazogcHJvcGFnYXRlIHJlc29sdmVkIGxpbmsgY29uZmlnIHZpYQorIG1hY19saW5rX3VwKCkKKworUHJvcGFnYXRlIHRoZSByZXNvbHZlZCBsaW5rIHBhcmFtZXRlcnMgdmlhIHRoZSBtYWNfbGlua191cCgpIGNhbGwgZm9yCitNQUNzIHRoYXQgZG8gbm90IGF1dG9tYXRpY2FsbHkgdHJhY2sgdGhlaXIgUENTIHN0YXRlLiBXZSBwcm9wYWdhdGUgdGhlCitsaW5rIHBhcmFtZXRlcnMgdmlhIGZ1bmN0aW9uIGFyZ3VtZW50cyBzbyB0aGF0IGluYXBwcm9wcmlhdGUgbWVtYmVycworb2Ygc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSBjYW4ndCBiZSBhY2Nlc3NlZCwgYW5kIGNyZWF0aW5nIGEgbmV3CitzdHJ1Y3R1cmUganVzdCBmb3IgdGhpcyBhZGRzIG5lZWRsZXNzIGNvbXBsZXhpdHkgdG8gdGhlIEFQSS4KKworVGVzdGVkLWJ5OiBBbmRyZSBQcnp5d2FyYSA8YW5kcmUucHJ6eXdhcmFAYXJtLmNvbT4KK1Rlc3RlZC1ieTogQWxleGFuZHJlIEJlbGxvbmkgPGFsZXhhbmRyZS5iZWxsb25pQGJvb3RsaW4uY29tPgorVGVzdGVkLWJ5OiBWbGFkaW1pciBPbHRlYW4gPHZsYWRpbWlyLm9sdGVhbkBueHAuY29tPgorU2lnbmVkLW9mZi1ieTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KK1NpZ25lZC1vZmYtYnk6IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KKy0tLQorCistLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2ZwLXBoeWxpbmsucnN0CisrKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2ZwLXBoeWxpbmsucnN0CitAQCAtNzQsMTAgKzc0LDEzIEBAIHBoeWxpYiB0byB0aGUgc2ZwL3BoeWxpbmsgc3VwcG9ydC4gIFBsZWEKKyB0aGlzIGRvY3VtZW50YXRpb24uCisgCisgMS4gT3B0aW9uYWxseSBzcGxpdCB0aGUgbmV0d29yayBkcml2ZXIncyBwaHlsaWIgdXBkYXRlIGZ1bmN0aW9uIGludG8KKy0gICB0aHJlZSBwYXJ0cyBkZWFsaW5nIHdpdGggbGluay1kb3duLCBsaW5rLXVwIGFuZCByZWNvbmZpZ3VyaW5nIHRoZQorLSAgIE1BQyBzZXR0aW5ncy4gVGhpcyBjYW4gYmUgZG9uZSBhcyBhIHNlcGFyYXRlIHByZXBhcmF0aW9uIGNvbW1pdC4KKysgICB0d28gcGFydHMgZGVhbGluZyB3aXRoIGxpbmstZG93biBhbmQgbGluay11cC4gVGhpcyBjYW4gYmUgZG9uZSBhcworKyAgIGEgc2VwYXJhdGUgcHJlcGFyYXRpb24gY29tbWl0LgorIAorLSAgIEFuIGV4YW1wbGUgb2YgdGhpcyBwcmVwYXJhdGlvbiBjYW4gYmUgZm91bmQgaW4gZ2l0IGNvbW1pdCBmYzU0OGI5OTFmYjAuCisrICAgQW4gb2xkZXIgZXhhbXBsZSBvZiB0aGlzIHByZXBhcmF0aW9uIGNhbiBiZSBmb3VuZCBpbiBnaXQgY29tbWl0CisrICAgZmM1NDhiOTkxZmIwLCBhbHRob3VnaCB0aGlzIHdhcyBzcGxpdHRpbmcgaW50byB0aHJlZSBwYXJ0czsgdGhlCisrICAgbGluay11cCBwYXJ0IG5vdyBpbmNsdWRlcyBjb25maWd1cmluZyB0aGUgTUFDIGZvciB0aGUgbGluayBzZXR0aW5ncy4KKysgICBQbGVhc2Ugc2VlIDpjOmZ1bmM6YG1hY19saW5rX3VwYCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzLgorIAorIDIuIFJlcGxhY2U6OgorIAorQEAgLTIwNyw2ICsyMTAsMTQgQEAgdGhpcyBkb2N1bWVudGF0aW9uLgorICAgIHVzaW5nLiBUaGlzIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgZm9yIGluLWJhbmQgbmVnb3RpYXRpb24KKyAgICBtZXRob2RzIHN1Y2ggYXMgMTAwMGJhc2UtWCBhbmQgU0dNSUkuCisgCisrICAgVGhlIDpjOmZ1bmM6YG1hY19saW5rX3VwYCBtZXRob2QgaXMgdXNlZCB0byBpbmZvcm0gdGhlIE1BQyB0aGF0IHRoZQorKyAgIGxpbmsgaGFzIGNvbWUgdXAuIFRoZSBjYWxsIGluY2x1ZGVzIHRoZSBuZWdvdGlhdGlvbiBtb2RlIGFuZCBpbnRlcmZhY2UKKysgICBmb3IgcmVmZXJlbmNlIG9ubHkuIFRoZSBmaW5hbGlzZWQgbGluayBwYXJhbWV0ZXJzIGFyZSBhbHNvIHN1cHBsaWVkCisrICAgKHNwZWVkLCBkdXBsZXggYW5kIGZsb3cgY29udHJvbC9wYXVzZSBlbmFibGVtZW50IHNldHRpbmdzKSB3aGljaAorKyAgIHNob3VsZCBiZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgTUFDIHdoZW4gdGhlIE1BQyBhbmQgUENTIGFyZSBub3QKKysgICB0aWdodGx5IGludGVncmF0ZWQsIG9yIHdoZW4gdGhlIHNldHRpbmdzIGFyZSBub3QgY29taW5nIGZyb20gaW4tYmFuZAorKyAgIG5lZ290aWF0aW9uLgorKworICAgIFRoZSA6YzpmdW5jOmBtYWNfY29uZmlnYCBtZXRob2QgaXMgdXNlZCB0byB1cGRhdGUgdGhlIE1BQyB3aXRoIHRoZQorICAgIHJlcXVlc3RlZCBzdGF0ZSwgYW5kIG11c3QgYXZvaWQgdW5uZWNlc3NhcmlseSB0YWtpbmcgdGhlIGxpbmsgZG93bgorICAgIHdoZW4gbWFraW5nIGNoYW5nZXMgdG8gdGhlIE1BQyBjb25maWd1cmF0aW9uLiAgVGhpcyBtZWFucyB0aGUKKy0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmMKKysrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZuZXRhLmMKK0BAIC0zNjU1LDkgKzM2NTUsMTEgQEAgc3RhdGljIHZvaWQgbXZuZXRhX21hY19saW5rX2Rvd24oc3RydWN0CisgCW12bmV0YV9zZXRfZWVlKHBwLCBmYWxzZSk7CisgfQorIAorLXN0YXRpYyB2b2lkIG12bmV0YV9tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsCistCQkJICAgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsCistCQkJICAgICAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpCisrc3RhdGljIHZvaWQgbXZuZXRhX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLAorKwkJCSAgICAgICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LAorKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgbW9kZSwgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSwKKysJCQkgICAgICAgaW50IHNwZWVkLCBpbnQgZHVwbGV4LAorKwkJCSAgICAgICBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKQorIHsKKyAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSB0b19uZXRfZGV2KGNvbmZpZy0+ZGV2KTsKKyAJc3RydWN0IG12bmV0YV9wb3J0ICpwcCA9IG5ldGRldl9wcml2KG5kZXYpOworLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdnBwMi9tdnBwMl9tYWluLmMKKysrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXZwcDIvbXZwcDJfbWFpbi5jCitAQCAtNTgsOCArNTgsMTEgQEAgc3RhdGljIHN0cnVjdCB7CisgICovCisgc3RhdGljIHZvaWQgbXZwcDJfbWFjX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsCisgCQkJICAgICBjb25zdCBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSk7Cistc3RhdGljIHZvaWQgbXZwcDJfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGludCBtb2RlLAorLQkJCSAgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpOworK3N0YXRpYyB2b2lkIG12cHAyX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLAorKwkJCSAgICAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksCisrCQkJICAgICAgdW5zaWduZWQgaW50IG1vZGUsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsCisrCQkJICAgICAgaW50IHNwZWVkLCBpbnQgZHVwbGV4LAorKwkJCSAgICAgIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpOworIAorIC8qIFF1ZXVlIG1vZGVzICovCisgI2RlZmluZSBNVlBQMl9RRElTVF9TSU5HTEVfTU9ERQkwCitAQCAtMzQ2OCw4ICszNDcxLDkgQEAgc3RhdGljIHZvaWQgbXZwcDJfc3RhcnRfZGV2KHN0cnVjdCBtdnBwMgorIAkJCS5pbnRlcmZhY2UgPSBwb3J0LT5waHlfaW50ZXJmYWNlLAorIAkJfTsKKyAJCW12cHAyX21hY19jb25maWcoJnBvcnQtPnBoeWxpbmtfY29uZmlnLCBNTE9fQU5fSU5CQU5ELCAmc3RhdGUpOworLQkJbXZwcDJfbWFjX2xpbmtfdXAoJnBvcnQtPnBoeWxpbmtfY29uZmlnLCBNTE9fQU5fSU5CQU5ELAorLQkJCQkgIHBvcnQtPnBoeV9pbnRlcmZhY2UsIE5VTEwpOworKwkJbXZwcDJfbWFjX2xpbmtfdXAoJnBvcnQtPnBoeWxpbmtfY29uZmlnLCBOVUxMLAorKwkJCQkgIE1MT19BTl9JTkJBTkQsIHBvcnQtPnBoeV9pbnRlcmZhY2UsCisrCQkJCSAgU1BFRURfVU5LTk9XTiwgRFVQTEVYX1VOS05PV04sIGZhbHNlLCBmYWxzZSk7CisgCX0KKyAKKyAJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhwb3J0LT5kZXYpOworQEAgLTUxMjUsOCArNTEyOSwxMSBAQCBzdGF0aWMgdm9pZCBtdnBwMl9tYWNfY29uZmlnKHN0cnVjdCBwaHlsCisgCW12cHAyX3BvcnRfZW5hYmxlKHBvcnQpOworIH0KKyAKKy1zdGF0aWMgdm9pZCBtdnBwMl9tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsCistCQkJICAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSkKKytzdGF0aWMgdm9pZCBtdnBwMl9tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywKKysJCQkgICAgICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LAorKwkJCSAgICAgIHVuc2lnbmVkIGludCBtb2RlLCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLAorKwkJCSAgICAgIGludCBzcGVlZCwgaW50IGR1cGxleCwKKysJCQkgICAgICBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKQorIHsKKyAJc3RydWN0IG12cHAyX3BvcnQgKnBvcnQgPSBtdnBwMl9waHlsaW5rX3RvX3BvcnQoY29uZmlnKTsKKyAJdTMyIHZhbDsKKy0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMKKysrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMKK0BAIC05MjUsOCArOTI1LDEwIEBAIHN0YXRpYyB2b2lkIHN0bW1hY19tYWNfbGlua19kb3duKHN0cnVjdAorIH0KKyAKKyBzdGF0aWMgdm9pZCBzdG1tYWNfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsCisrCQkJICAgICAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksCisgCQkJICAgICAgIHVuc2lnbmVkIGludCBtb2RlLCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLAorLQkJCSAgICAgICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KQorKwkJCSAgICAgICBpbnQgc3BlZWQsIGludCBkdXBsZXgsCisrCQkJICAgICAgIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpCisgeworIAlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdih0b19uZXRfZGV2KGNvbmZpZy0+ZGV2KSk7CisgCistLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfbWFpbi5jCisrKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC94aWxpbngveGlsaW54X2F4aWVuZXRfbWFpbi5jCitAQCAtMTUwMSw5ICsxNTAxLDEwIEBAIHN0YXRpYyB2b2lkIGF4aWVuZXRfbWFjX2xpbmtfZG93bihzdHJ1Y3QKKyB9CisgCisgc3RhdGljIHZvaWQgYXhpZW5ldF9tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywKKy0JCQkJdW5zaWduZWQgaW50IG1vZGUsCistCQkJCXBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsCistCQkJCXN0cnVjdCBwaHlfZGV2aWNlICpwaHkpCisrCQkJCXN0cnVjdCBwaHlfZGV2aWNlICpwaHksCisrCQkJCXVuc2lnbmVkIGludCBtb2RlLCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLAorKwkJCQlpbnQgc3BlZWQsIGludCBkdXBsZXgsCisrCQkJCWJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpCisgeworIAkvKiBub3RoaW5nIG1lYW5pbmdmdWwgdG8gZG8gKi8KKyB9CistLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jCisrKysgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jCitAQCAtNDQ3LDggKzQ0NywxMSBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX21hY19saW5rX3VwKHN0cnVjdCBwCisgCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGwtPm5ldGRldjsKKyAKKyAJcGwtPmN1cl9pbnRlcmZhY2UgPSBsaW5rX3N0YXRlLmludGVyZmFjZTsKKy0JcGwtPm9wcy0+bWFjX2xpbmtfdXAocGwtPmNvbmZpZywgcGwtPmN1cl9saW5rX2FuX21vZGUsCistCQkJICAgICBwbC0+Y3VyX2ludGVyZmFjZSwgcGwtPnBoeWRldik7CisrCXBsLT5vcHMtPm1hY19saW5rX3VwKHBsLT5jb25maWcsIHBsLT5waHlkZXYsCisrCQkJICAgICBwbC0+Y3VyX2xpbmtfYW5fbW9kZSwgcGwtPmN1cl9pbnRlcmZhY2UsCisrCQkJICAgICBsaW5rX3N0YXRlLnNwZWVkLCBsaW5rX3N0YXRlLmR1cGxleCwKKysJCQkgICAgICEhKGxpbmtfc3RhdGUucGF1c2UgJiBNTE9fUEFVU0VfVFgpLAorKwkJCSAgICAgISEobGlua19zdGF0ZS5wYXVzZSAmIE1MT19QQVVTRV9SWCkpOworIAorIAlpZiAobmRldikKKyAJCW5ldGlmX2NhcnJpZXJfb24obmRldik7CistLS0gYS9pbmNsdWRlL2xpbnV4L3BoeWxpbmsuaAorKysrIGIvaW5jbHVkZS9saW51eC9waHlsaW5rLmgKK0BAIC05MSw5ICs5MSwxMCBAQCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIHsKKyAJdm9pZCAoKm1hY19hbl9yZXN0YXJ0KShzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyk7CisgCXZvaWQgKCptYWNfbGlua19kb3duKShzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsCisgCQkJICAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSk7CistCXZvaWQgKCptYWNfbGlua191cCkoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGludCBtb2RlLAorLQkJCSAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLAorLQkJCSAgICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KTsKKysJdm9pZCAoKm1hY19saW5rX3VwKShzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywKKysJCQkgICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSwgdW5zaWduZWQgaW50IG1vZGUsCisrCQkJICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsIGludCBzcGVlZCwgaW50IGR1cGxleCwKKysJCQkgICAgYm9vbCB0eF9wYXVzZSwgYm9vbCByeF9wYXVzZSk7CisgfTsKKyAKKyAjaWYgMCAvKiBGb3Iga2VybmVsLWRvYyBwdXJwb3NlcyBvbmx5LiAqLworQEAgLTIxNywxOSArMjE4LDM0IEBAIHZvaWQgbWFjX2xpbmtfZG93bihzdHJ1Y3QgcGh5bGlua19jb25maWcKKyAvKioKKyAgKiBtYWNfbGlua191cCgpIC0gYWxsb3cgdGhlIGxpbmsgdG8gY29tZSB1cAorICAqIEBjb25maWc6IGEgcG9pbnRlciB0byBhICZzdHJ1Y3QgcGh5bGlua19jb25maWcuCisrICogQHBoeTogYW55IGF0dGFjaGVkIHBoeQorICAqIEBtb2RlOiBsaW5rIGF1dG9uZWdvdGlhdGlvbiBtb2RlCisgICogQGludGVyZmFjZTogbGluayAmdHlwZWRlZiBwaHlfaW50ZXJmYWNlX3QgbW9kZQorLSAqIEBwaHk6IGFueSBhdHRhY2hlZCBwaHkKKysgKiBAc3BlZWQ6IGxpbmsgc3BlZWQKKysgKiBAZHVwbGV4OiBsaW5rIGR1cGxleAorKyAqIEB0eF9wYXVzZTogbGluayB0cmFuc21pdCBwYXVzZSBlbmFibGVtZW50IHN0YXR1cworKyAqIEByeF9wYXVzZTogbGluayByZWNlaXZlIHBhdXNlIGVuYWJsZW1lbnQgc3RhdHVzCisrICoKKysgKiBDb25maWd1cmUgdGhlIE1BQyBmb3IgYW4gZXN0YWJsaXNoZWQgbGluay4KKysgKgorKyAqIEBzcGVlZCwgQGR1cGxleCwgQHR4X3BhdXNlIGFuZCBAcnhfcGF1c2UgaW5kaWNhdGUgdGhlIGZpbmFsaXNlZCBsaW5rCisrICogc2V0dGluZ3MsIGFuZCBzaG91bGQgYmUgdXNlZCB0byBjb25maWd1cmUgdGhlIE1BQyBibG9jayBhcHByb3ByaWF0ZWx5CisrICogd2hlcmUgdGhlc2Ugc2V0dGluZ3MgYXJlIG5vdCBhdXRvbWF0aWNhbGx5IGNvbnZleWVkIGZyb20gdGhlIFBDUyBibG9jaywKKysgKiBvciBpZiBpbi1iYW5kIG5lZ290aWF0aW9uIChhcyBkZWZpbmVkIGJ5IHBoeWxpbmtfYXV0b25lZ19pbmJhbmQoQG1vZGUpKQorKyAqIGlzIGRpc2FibGVkLgorKyAqCisrICogTm90ZSB0aGF0IHdoZW4gODAyLjN6IGluLWJhbmQgbmVnb3RpYXRpb24gaXMgaW4gdXNlLCBpdCBpcyBwb3NzaWJsZQorKyAqIHRoYXQgdGhlIHVzZXIgd2lzaGVzIHRvIG92ZXJyaWRlIHRoZSBwYXVzZSBzZXR0aW5ncywgYW5kIHRoaXMgc2hvdWxkCisrICogYmUgYWxsb3dlZCB3aGVuIGNvbnNpZGVyaW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZC4KKyAgKgorLSAqIElmIEBtb2RlIGlzIG5vdCBhbiBpbi1iYW5kIG5lZ290aWF0aW9uIG1vZGUgKGFzIGRlZmluZWQgYnkKKy0gKiBwaHlsaW5rX2F1dG9uZWdfaW5iYW5kKCkpLCBhbGxvdyB0aGUgbGluayB0byBjb21lIHVwLiBJZiBAcGh5CistICogaXMgbm9uLSVOVUxMLCBjb25maWd1cmUgRW5lcmd5IEVmZmljaWVudCBFdGhlcm5ldCBieSBjYWxsaW5nCisrICogSWYgaW4tYmFuZCBuZWdvdGlhdGlvbiBtb2RlIGlzIGRpc2FibGVkLCBhbGxvdyB0aGUgbGluayB0byBjb21lIHVwLiBJZgorKyAqIEBwaHkgaXMgbm9uLSVOVUxMLCBjb25maWd1cmUgRW5lcmd5IEVmZmljaWVudCBFdGhlcm5ldCBieSBjYWxsaW5nCisgICogcGh5X2luaXRfZWVlKCkgYW5kIHBlcmZvcm0gYXBwcm9wcmlhdGUgTUFDIGNvbmZpZ3VyYXRpb24gZm9yIEVFRS4KKyAgKiBJbnRlcmZhY2UgdHlwZSBzZWxlY3Rpb24gbXVzdCBiZSBkb25lIGluIG1hY19jb25maWcoKS4KKyAgKi8KKy12b2lkIG1hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSwKKy0JCSBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLAorLQkJIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpOworK3ZvaWQgbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksCisrCQkgdW5zaWduZWQgaW50IG1vZGUsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsCisrCQkgaW50IHNwZWVkLCBpbnQgZHVwbGV4LCBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKTsKKyAjZW5kaWYKKyAKKyBzdHJ1Y3QgcGh5bGluayAqcGh5bGlua19jcmVhdGUoc3RydWN0IHBoeWxpbmtfY29uZmlnICosIHN0cnVjdCBmd25vZGVfaGFuZGxlICosCistLS0gYS9uZXQvZHNhL3BvcnQuYworKysrIGIvbmV0L2RzYS9wb3J0LmMKK0BAIC01MjksOSArNTI5LDExIEBAIHZvaWQgZHNhX3BvcnRfcGh5bGlua19tYWNfbGlua19kb3duKHN0cnUKKyBFWFBPUlRfU1lNQk9MX0dQTChkc2FfcG9ydF9waHlsaW5rX21hY19saW5rX2Rvd24pOworIAorIHZvaWQgZHNhX3BvcnRfcGh5bGlua19tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywKKysJCQkJICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAorIAkJCQkgIHVuc2lnbmVkIGludCBtb2RlLAorIAkJCQkgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsCistCQkJCSAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKKysJCQkJICBpbnQgc3BlZWQsIGludCBkdXBsZXgsCisrCQkJCSAgYm9vbCB0eF9wYXVzZSwgYm9vbCByeF9wYXVzZSkKKyB7CisgCXN0cnVjdCBkc2FfcG9ydCAqZHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgZHNhX3BvcnQsIHBsX2NvbmZpZyk7CisgCXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRwLT5kczsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wNjAxLW5ldC1kc2EtcHJvcGFnYXRlLXJlc29sdmVkLWxpbmstY29uZmlnLXZpYS1tYWNfbGlua18ucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDYwMS1uZXQtZHNhLXByb3BhZ2F0ZS1yZXNvbHZlZC1saW5rLWNvbmZpZy12aWEtbWFjX2xpbmtfLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNWE1MmUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDYwMS1uZXQtZHNhLXByb3BhZ2F0ZS1yZXNvbHZlZC1saW5rLWNvbmZpZy12aWEtbWFjX2xpbmtfLnBhdGNoCkBAIC0wLDAgKzEsMTQzIEBACitGcm9tOiBSdXNzZWxsIEtpbmcgPHJtaytrZXJuZWxAYXJtbGludXgub3JnLnVrPgorRGF0ZTogV2VkLCAyNiBGZWIgMjAyMCAxMDoyMzo0NiArMDAwMAorU3ViamVjdDogW1BBVENIXSBuZXQ6IGRzYTogcHJvcGFnYXRlIHJlc29sdmVkIGxpbmsgY29uZmlnIHZpYSBtYWNfbGlua191cCgpCisKK1Byb3BhZ2F0ZSB0aGUgcmVzb2x2ZWQgbGluayBjb25maWd1cmF0aW9uIGRvd24gdmlhIERTQSdzCitwaHlsaW5rX21hY19saW5rX3VwKCkgb3BlcmF0aW9uIHRvIGFsbG93IHNwbGl0IFBDUy9NQUMgdG8gd29yay4KKworVGVzdGVkLWJ5OiBWbGFkaW1pciBPbHRlYW4gPHZsYWRpbWlyLm9sdGVhbkBueHAuY29tPgorU2lnbmVkLW9mZi1ieTogUnVzc2VsbCBLaW5nIDxybWsra2VybmVsQGFybWxpbnV4Lm9yZy51az4KK1NpZ25lZC1vZmYtYnk6IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KKy0tLQorCistLS0gYS9kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYworKysrIGIvZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMKK0BAIC0xMjg0LDcgKzEyODQsOSBAQCBFWFBPUlRfU1lNQk9MKGI1M19waHlsaW5rX21hY19saW5rX2Rvd24pCisgdm9pZCBiNTNfcGh5bGlua19tYWNfbGlua191cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAorIAkJCSAgICAgdW5zaWduZWQgaW50IG1vZGUsCisgCQkJICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLAorLQkJCSAgICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKKysJCQkgICAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCisrCQkJICAgICBpbnQgc3BlZWQsIGludCBkdXBsZXgsCisrCQkJICAgICBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKQorIHsKKyAJc3RydWN0IGI1M19kZXZpY2UgKmRldiA9IGRzLT5wcml2OworIAorLS0tIGEvZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oCisrKysgYi9kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19wcml2LmgKK0BAIC0zMzcsNyArMzM3LDkgQEAgdm9pZCBiNTNfcGh5bGlua19tYWNfbGlua19kb3duKHN0cnVjdCBkcworIHZvaWQgYjUzX3BoeWxpbmtfbWFjX2xpbmtfdXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKKyAJCQkgICAgIHVuc2lnbmVkIGludCBtb2RlLAorIAkJCSAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSwKKy0JCQkgICAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOworKwkJCSAgICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKKysJCQkgICAgIGludCBzcGVlZCwgaW50IGR1cGxleCwKKysJCQkgICAgIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpOworIGludCBiNTNfdmxhbl9maWx0ZXJpbmcoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgYm9vbCB2bGFuX2ZpbHRlcmluZyk7CisgaW50IGI1M192bGFuX3ByZXBhcmUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKKyAJCSAgICAgY29uc3Qgc3RydWN0IHN3aXRjaGRldl9vYmpfcG9ydF92bGFuICp2bGFuKTsKKy0tLSBhL2RyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmMKKysrKyBiL2RyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmMKK0BAIC02MzYsNyArNjM2LDkgQEAgc3RhdGljIHZvaWQgYmNtX3NmMl9zd19tYWNfbGlua19kb3duKHN0cgorIHN0YXRpYyB2b2lkIGJjbV9zZjJfc3dfbWFjX2xpbmtfdXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKKyAJCQkJICAgdW5zaWduZWQgaW50IG1vZGUsCisgCQkJCSAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsCistCQkJCSAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCisrCQkJCSAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCisrCQkJCSAgIGludCBzcGVlZCwgaW50IGR1cGxleCwKKysJCQkJICAgYm9vbCB0eF9wYXVzZSwgYm9vbCByeF9wYXVzZSkKKyB7CisgCXN0cnVjdCBiY21fc2YyX3ByaXYgKnByaXYgPSBiY21fc2YyX3RvX3ByaXYoZHMpOworIAlzdHJ1Y3QgZXRodG9vbF9lZWUgKnAgPSAmcHJpdi0+ZGV2LT5wb3J0c1twb3J0XS5lZWU7CistLS0gYS9kcml2ZXJzL25ldC9kc2EvbGFudGlxX2dzd2lwLmMKKysrKyBiL2RyaXZlcnMvbmV0L2RzYS9sYW50aXFfZ3N3aXAuYworQEAgLTE2NjQsNyArMTY2NCw5IEBAIHN0YXRpYyB2b2lkIGdzd2lwX3BoeWxpbmtfbWFjX2xpbmtfZG93bigKKyBzdGF0aWMgdm9pZCBnc3dpcF9waHlsaW5rX21hY19saW5rX3VwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCisgCQkJCSAgICAgIHVuc2lnbmVkIGludCBtb2RlLAorIAkJCQkgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLAorLQkJCQkgICAgICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQorKwkJCQkgICAgICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAorKwkJCQkgICAgICBpbnQgc3BlZWQsIGludCBkdXBsZXgsCisrCQkJCSAgICAgIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpCisgeworIAlzdHJ1Y3QgZ3N3aXBfcHJpdiAqcHJpdiA9IGRzLT5wcml2OworIAorLS0tIGEvZHJpdmVycy9uZXQvZHNhL210NzUzMC5jCisrKysgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMKK0BAIC0xNDQwLDcgKzE0NDAsOSBAQCBzdGF0aWMgdm9pZCBtdDc1MzBfcGh5bGlua19tYWNfbGlua19kb3duCisgc3RhdGljIHZvaWQgbXQ3NTMwX3BoeWxpbmtfbWFjX2xpbmtfdXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKKyAJCQkJICAgICAgIHVuc2lnbmVkIGludCBtb2RlLAorIAkJCQkgICAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSwKKy0JCQkJICAgICAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCisrCQkJCSAgICAgICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAorKwkJCQkgICAgICAgaW50IHNwZWVkLCBpbnQgZHVwbGV4LAorKwkJCQkgICAgICAgYm9vbCB0eF9wYXVzZSwgYm9vbCByeF9wYXVzZSkKKyB7CisgCXN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLT5wcml2OworIAorLS0tIGEvZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMKKysrKyBiL2RyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jCitAQCAtNjUyLDcgKzY1Miw5IEBAIHN0YXRpYyB2b2lkIG12ODhlNnh4eF9tYWNfbGlua19kb3duKHN0cnUKKyAKKyBzdGF0aWMgdm9pZCBtdjg4ZTZ4eHhfbWFjX2xpbmtfdXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKKyAJCQkJICB1bnNpZ25lZCBpbnQgbW9kZSwgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSwKKy0JCQkJICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQorKwkJCQkgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCisrCQkJCSAgaW50IHNwZWVkLCBpbnQgZHVwbGV4LAorKwkJCQkgIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpCisgeworIAlpZiAobW9kZSA9PSBNTE9fQU5fRklYRUQpCisgCQltdjg4ZTZ4eHhfbWFjX2xpbmtfZm9yY2UoZHMsIHBvcnQsIExJTktfRk9SQ0VEX1VQKTsKKy0tLSBhL2RyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jCisrKysgYi9kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYworQEAgLTgzMSw3ICs4MzEsOSBAQCBzdGF0aWMgdm9pZCBzamExMTA1X21hY19saW5rX2Rvd24oc3RydWN0Cisgc3RhdGljIHZvaWQgc2phMTEwNV9tYWNfbGlua191cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAorIAkJCQl1bnNpZ25lZCBpbnQgbW9kZSwKKyAJCQkJcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSwKKy0JCQkJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKKysJCQkJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKKysJCQkJaW50IHNwZWVkLCBpbnQgZHVwbGV4LAorKwkJCQlib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKQorIHsKKyAJc2phMTEwNV9pbmhpYml0X3R4KGRzLT5wcml2LCBCSVQocG9ydCksIGZhbHNlKTsKKyB9CistLS0gYS9pbmNsdWRlL25ldC9kc2EuaAorKysrIGIvaW5jbHVkZS9uZXQvZHNhLmgKK0BAIC00MDYsNyArNDA2LDkgQEAgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIHsKKyAJdm9pZAkoKnBoeWxpbmtfbWFjX2xpbmtfdXApKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCisgCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbW9kZSwKKyAJCQkJICAgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsCistCQkJCSAgICAgICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKKysJCQkJICAgICAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCisrCQkJCSAgICAgICBpbnQgc3BlZWQsIGludCBkdXBsZXgsCisrCQkJCSAgICAgICBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKTsKKyAJdm9pZAkoKnBoeWxpbmtfZml4ZWRfc3RhdGUpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCisgCQkJCSAgICAgICBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSk7CisgCS8qCistLS0gYS9uZXQvZHNhL3BvcnQuYworKysrIGIvbmV0L2RzYS9wb3J0LmMKK0BAIC01NDQsNyArNTQ0LDggQEAgdm9pZCBkc2FfcG9ydF9waHlsaW5rX21hY19saW5rX3VwKHN0cnVjdAorIAkJcmV0dXJuOworIAl9CisgCistCWRzLT5vcHMtPnBoeWxpbmtfbWFjX2xpbmtfdXAoZHMsIGRwLT5pbmRleCwgbW9kZSwgaW50ZXJmYWNlLCBwaHlkZXYpOworKwlkcy0+b3BzLT5waHlsaW5rX21hY19saW5rX3VwKGRzLCBkcC0+aW5kZXgsIG1vZGUsIGludGVyZmFjZSwgcGh5ZGV2LAorKwkJCQkgICAgIHNwZWVkLCBkdXBsZXgsIHR4X3BhdXNlLCByeF9wYXVzZSk7CisgfQorIEVYUE9SVF9TWU1CT0xfR1BMKGRzYV9wb3J0X3BoeWxpbmtfbWFjX2xpbmtfdXApOworIAorLS0tIGEvbmV0L2RzYS9kc2FfcHJpdi5oCisrKysgYi9uZXQvZHNhL2RzYV9wcml2LmgKK0BAIC0xOTIsOSArMTkyLDExIEBAIHZvaWQgZHNhX3BvcnRfcGh5bGlua19tYWNfbGlua19kb3duKHN0cnUKKyAJCQkJICAgIHVuc2lnbmVkIGludCBtb2RlLAorIAkJCQkgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSk7Cisgdm9pZCBkc2FfcG9ydF9waHlsaW5rX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLAorKwkJCQkgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCisgCQkJCSAgdW5zaWduZWQgaW50IG1vZGUsCisgCQkJCSAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSwKKy0JCQkJICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKKysJCQkJICBpbnQgc3BlZWQsIGludCBkdXBsZXgsCisrCQkJCSAgYm9vbCB0eF9wYXVzZSwgYm9vbCByeF9wYXVzZSk7CisgZXh0ZXJuIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgZHNhX3BvcnRfcGh5bGlua19tYWNfb3BzOworIAorIC8qIHNsYXZlLmMgKi8KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wNjAyLW5ldC1kc2EtbXQ3NTMwLXVzZS1yZXNvbHZlZC1saW5rLWNvbmZpZy1pbi1tYWNfbGlua18ucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDYwMi1uZXQtZHNhLW10NzUzMC11c2UtcmVzb2x2ZWQtbGluay1jb25maWctaW4tbWFjX2xpbmtfLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZmJhODUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDYwMi1uZXQtZHNhLW10NzUzMC11c2UtcmVzb2x2ZWQtbGluay1jb25maWctaW4tbWFjX2xpbmtfLnBhdGNoCkBAIC0wLDAgKzEsMTQ1IEBACitGcm9tOiA9P1VURi04P3E/UmVuPUMzPUE5PTIwdmFuPTIwRG9yc3Q/PSA8b3BlbnNvdXJjZUB2ZG9yc3QuY29tPgorRGF0ZTogRnJpLCAyNyBNYXIgMjAyMCAxNTo0NDoxMiArMDEwMAorU3ViamVjdDogW1BBVENIXSBuZXQ6IGRzYTogbXQ3NTMwOiB1c2UgcmVzb2x2ZWQgbGluayBjb25maWcgaW4gbWFjX2xpbmtfdXAoKQorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitDb252ZXJ0IHRoZSBtdDc1MzAgc3dpdGNoIGRyaXZlciB0byB1c2UgdGhlIGZpbmFsaXNlZCBsaW5rCitwYXJhbWV0ZXJzIGluIG1hY19saW5rX3VwKCkgcmF0aGVyIHRoYW4gdGhlIHBhcmFtZXRlcnMgaW4gbWFjX2NvbmZpZygpLgorCitTaWduZWQtb2ZmLWJ5OiBSZW7DqSB2YW4gRG9yc3QgPG9wZW5zb3VyY2VAdmRvcnN0LmNvbT4KK1Rlc3RlZC1ieTogU2VhbiBXYW5nIDxzZWFuLndhbmdAbWVkaWF0ZWsuY29tPgorU2lnbmVkLW9mZi1ieTogRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PgorLS0tCisKKy0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYworKysrIGIvZHJpdmVycy9uZXQvZHNhL210NzUzMC5jCitAQCAtNDg5LDE3ICs0ODksNiBAQCBtdDc1MzBfbWliX3Jlc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKKyAJbXQ3NTMwX3dyaXRlKHByaXYsIE1UNzUzMF9NSUJfQ0NSLCBDQ1JfTUlCX0FDVElWQVRFKTsKKyB9CisgCistc3RhdGljIHZvaWQKKy1tdDc1MzBfcG9ydF9zZXRfc3RhdHVzKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBlbmFibGUpCisteworLQl1MzIgbWFzayA9IFBNQ1JfVFhfRU4gfCBQTUNSX1JYX0VOIHwgUE1DUl9GT1JDRV9MTks7CistCistCWlmIChlbmFibGUpCistCQltdDc1MzBfc2V0KHByaXYsIE1UNzUzMF9QTUNSX1AocG9ydCksIG1hc2spOworLQllbHNlCistCQltdDc1MzBfY2xlYXIocHJpdiwgTVQ3NTMwX1BNQ1JfUChwb3J0KSwgbWFzayk7CistfQorLQorIHN0YXRpYyBpbnQgbXQ3NTMwX3BoeV9yZWFkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCByZWdudW0pCisgeworIAlzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy0+cHJpdjsKK0BAIC02NzMsNyArNjYyLDcgQEAgbXQ3NTMwX3BvcnRfZW5hYmxlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcworIAlwcml2LT5wb3J0c1twb3J0XS5lbmFibGUgPSB0cnVlOworIAltdDc1MzBfcm13KHByaXYsIE1UNzUzMF9QQ1JfUChwb3J0KSwgUENSX01BVFJJWF9NQVNLLAorIAkJICAgcHJpdi0+cG9ydHNbcG9ydF0ucG0pOworLQltdDc1MzBfcG9ydF9zZXRfc3RhdHVzKHByaXYsIHBvcnQsIDApOworKwltdDc1MzBfY2xlYXIocHJpdiwgTVQ3NTMwX1BNQ1JfUChwb3J0KSwgUE1DUl9MSU5LX1NFVFRJTkdTX01BU0spOworIAorIAltdXRleF91bmxvY2soJnByaXYtPnJlZ19tdXRleCk7CisgCitAQCAtNjk2LDcgKzY4NSw3IEBAIG10NzUzMF9wb3J0X2Rpc2FibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmQKKyAJcHJpdi0+cG9ydHNbcG9ydF0uZW5hYmxlID0gZmFsc2U7CisgCW10NzUzMF9ybXcocHJpdiwgTVQ3NTMwX1BDUl9QKHBvcnQpLCBQQ1JfTUFUUklYX01BU0ssCisgCQkgICBQQ1JfTUFUUklYX0NMUik7CistCW10NzUzMF9wb3J0X3NldF9zdGF0dXMocHJpdiwgcG9ydCwgMCk7CisrCW10NzUzMF9jbGVhcihwcml2LCBNVDc1MzBfUE1DUl9QKHBvcnQpLCBQTUNSX0xJTktfU0VUVElOR1NfTUFTSyk7CisgCisgCW11dGV4X3VubG9jaygmcHJpdi0+cmVnX211dGV4KTsKKyB9CitAQCAtMTM5NSw4ICsxMzg0LDcgQEAgc3RhdGljIHZvaWQgbXQ3NTMwX3BoeWxpbmtfbWFjX2NvbmZpZyhzdAorIAorIAltY3JfY3VyID0gbXQ3NTMwX3JlYWQocHJpdiwgTVQ3NTMwX1BNQ1JfUChwb3J0KSk7CisgCW1jcl9uZXcgPSBtY3JfY3VyOworLQltY3JfbmV3ICY9IH4oUE1DUl9GT1JDRV9TUEVFRF8xMDAwIHwgUE1DUl9GT1JDRV9TUEVFRF8xMDAgfAorLQkJICAgICBQTUNSX0ZPUkNFX0ZEWCB8IFBNQ1JfVFhfRkNfRU4gfCBQTUNSX1JYX0ZDX0VOKTsKKysJbWNyX25ldyAmPSB+UE1DUl9MSU5LX1NFVFRJTkdTX01BU0s7CisgCW1jcl9uZXcgfD0gUE1DUl9JRkdfWE1JVCgxKSB8IFBNQ1JfTUFDX01PREUgfCBQTUNSX0JBQ0tPRkZfRU4gfAorIAkJICAgUE1DUl9CQUNLUFJfRU4gfCBQTUNSX0ZPUkNFX01PREU7CisgCitAQCAtMTQwNCwyNiArMTM5Miw2IEBAIHN0YXRpYyB2b2lkIG10NzUzMF9waHlsaW5rX21hY19jb25maWcoc3QKKyAJaWYgKHBvcnQgPT0gNSAmJiBkc2FfaXNfdXNlcl9wb3J0KGRzLCA1KSkKKyAJCW1jcl9uZXcgfD0gUE1DUl9FWFRfUEhZOworIAorLQlzd2l0Y2ggKHN0YXRlLT5zcGVlZCkgeworLQljYXNlIFNQRUVEXzEwMDA6CistCQltY3JfbmV3IHw9IFBNQ1JfRk9SQ0VfU1BFRURfMTAwMDsKKy0JCWlmIChwcml2LT5lZWVfZW5hYmxlICYgQklUKHBvcnQpKQorLQkJCW1jcl9uZXcgfD0gUE1DUl9GT1JDRV9FRUUxRzsKKy0JCWJyZWFrOworLQljYXNlIFNQRUVEXzEwMDoKKy0JCW1jcl9uZXcgfD0gUE1DUl9GT1JDRV9TUEVFRF8xMDA7CistCQlpZiAocHJpdi0+ZWVlX2VuYWJsZSAmIEJJVChwb3J0KSkKKy0JCQltY3JfbmV3IHw9IFBNQ1JfRk9SQ0VfRUVFMTAwOworLQkJYnJlYWs7CistCX0KKy0JaWYgKHN0YXRlLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpIHsKKy0JCW1jcl9uZXcgfD0gUE1DUl9GT1JDRV9GRFg7CistCQlpZiAoc3RhdGUtPnBhdXNlICYgTUxPX1BBVVNFX1RYKQorLQkJCW1jcl9uZXcgfD0gUE1DUl9UWF9GQ19FTjsKKy0JCWlmIChzdGF0ZS0+cGF1c2UgJiBNTE9fUEFVU0VfUlgpCistCQkJbWNyX25ldyB8PSBQTUNSX1JYX0ZDX0VOOworLQl9CistCisgCWlmIChtY3JfbmV3ICE9IG1jcl9jdXIpCisgCQltdDc1MzBfd3JpdGUocHJpdiwgTVQ3NTMwX1BNQ1JfUChwb3J0KSwgbWNyX25ldyk7CisgfQorQEAgLTE0MzQsNyArMTQwMiw3IEBAIHN0YXRpYyB2b2lkIG10NzUzMF9waHlsaW5rX21hY19saW5rX2Rvd24KKyB7CisgCXN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLT5wcml2OworIAorLQltdDc1MzBfcG9ydF9zZXRfc3RhdHVzKHByaXYsIHBvcnQsIDApOworKwltdDc1MzBfY2xlYXIocHJpdiwgTVQ3NTMwX1BNQ1JfUChwb3J0KSwgUE1DUl9MSU5LX1NFVFRJTkdTX01BU0spOworIH0KKyAKKyBzdGF0aWMgdm9pZCBtdDc1MzBfcGh5bGlua19tYWNfbGlua191cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAorQEAgLTE0NDUsOCArMTQxMywzMSBAQCBzdGF0aWMgdm9pZCBtdDc1MzBfcGh5bGlua19tYWNfbGlua191cChzCisgCQkJCSAgICAgICBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKQorIHsKKyAJc3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtPnByaXY7CisrCXUzMiBtY3I7CisrCisrCW1jciA9IFBNQ1JfUlhfRU4gfCBQTUNSX1RYX0VOIHwgUE1DUl9GT1JDRV9MTks7CisrCisrCXN3aXRjaCAoc3BlZWQpIHsKKysJY2FzZSBTUEVFRF8xMDAwOgorKwkJbWNyIHw9IFBNQ1JfRk9SQ0VfU1BFRURfMTAwMDsKKysJCWlmIChwcml2LT5lZWVfZW5hYmxlICYgQklUKHBvcnQpKQorKwkJCW1jcl9uZXcgfD0gUE1DUl9GT1JDRV9FRUUxRzsKKysJCWJyZWFrOworKwljYXNlIFNQRUVEXzEwMDoKKysJCW1jciB8PSBQTUNSX0ZPUkNFX1NQRUVEXzEwMDsKKysJCWlmIChwcml2LT5lZWVfZW5hYmxlICYgQklUKHBvcnQpKQorKwkJCW1jcl9uZXcgfD0gUE1DUl9GT1JDRV9FRUUxMDA7CisrCQlicmVhazsKKysJfQorKwlpZiAoZHVwbGV4ID09IERVUExFWF9GVUxMKSB7CisrCQltY3IgfD0gUE1DUl9GT1JDRV9GRFg7CisrCQlpZiAodHhfcGF1c2UpCisrCQkJbWNyIHw9IFBNQ1JfVFhfRkNfRU47CisrCQlpZiAocnhfcGF1c2UpCisrCQkJbWNyIHw9IFBNQ1JfUlhfRkNfRU47CisrCX0KKyAKKy0JbXQ3NTMwX3BvcnRfc2V0X3N0YXR1cyhwcml2LCBwb3J0LCAxKTsKKysJbXQ3NTMwX3NldChwcml2LCBNVDc1MzBfUE1DUl9QKHBvcnQpLCBtY3IpOworIH0KKyAKKyBzdGF0aWMgdm9pZCBtdDc1MzBfcGh5bGlua192YWxpZGF0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAorLS0tIGEvZHJpdmVycy9uZXQvZHNhL210NzUzMC5oCisrKysgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmgKK0BAIC0yMjIsNiArMjIyLDEwIEBAIGVudW0gbXQ3NTMwX3ZsYW5fcG9ydF9hdHRyIHsKKyAjZGVmaW5lICBQTUNSX0ZPUkNFX0xOSwkJCUJJVCgwKQorICNkZWZpbmUgIFBNQ1JfU1BFRURfTUFTSwkJKFBNQ1JfRk9SQ0VfU1BFRURfMTAwIHwgXAorIAkJCQkJIFBNQ1JfRk9SQ0VfU1BFRURfMTAwMCkKKysjZGVmaW5lICBQTUNSX0xJTktfU0VUVElOR1NfTUFTSwkoUE1DUl9UWF9FTiB8IFBNQ1JfRk9SQ0VfU1BFRURfMTAwMCB8IFwKKysJCQkJCSBQTUNSX1JYX0VOIHwgUE1DUl9GT1JDRV9TUEVFRF8xMDAgfCBcCisrCQkJCQkgUE1DUl9UWF9GQ19FTiB8IFBNQ1JfUlhfRkNfRU4gfCBcCisrCQkJCQkgUE1DUl9GT1JDRV9GRFggfCBQTUNSX0ZPUkNFX0xOSykKKyAKKyAjZGVmaW5lIE1UNzUzMF9QTVNSX1AoeCkJCSgweDMwMDggKyAoeCkgKiAweDEwMCkKKyAjZGVmaW5lICBQTVNSX0VFRTFHCQkJQklUKDcpCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDYwMy1uZXQtZHNhLW10NzUzMC1FeHRlbmQtZGV2aWNlLWRhdGEtcmVhZHktZm9yLWFkZGluZy1hLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA2MDMtbmV0LWRzYS1tdDc1MzAtRXh0ZW5kLWRldmljZS1kYXRhLXJlYWR5LWZvci1hZGRpbmctYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MThlZDhlCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA2MDMtbmV0LWRzYS1tdDc1MzAtRXh0ZW5kLWRldmljZS1kYXRhLXJlYWR5LWZvci1hZGRpbmctYS5wYXRjaApAQCAtMCwwICsxLDQ1OCBAQAorRnJvbTogTGFuZGVuIENoYW8gPGxhbmRlbi5jaGFvQG1lZGlhdGVrLmNvbT4KK0RhdGU6IEZyaSwgNCBTZXAgMjAyMCAyMjoyMTo1NyArMDgwMAorU3ViamVjdDogW1BBVENIXSBuZXQ6IGRzYTogbXQ3NTMwOiBFeHRlbmQgZGV2aWNlIGRhdGEgcmVhZHkgZm9yIGFkZGluZyBhCisgbmV3IGhhcmR3YXJlCisKK0FkZCBhIHN0cnVjdHVyZSBob2xkaW5nIHJlcXVpcmVkIG9wZXJhdGlvbnMgZm9yIGVhY2ggZGV2aWNlIHN1Y2ggYXMgZGV2aWNlCitpbml0aWFsaXphdGlvbiwgUEhZIHBvcnQgcmVhZCBvciB3cml0ZSwgYSBjaGVja2VyIHdoZXRoZXIgUEhZIGludGVyZmFjZSBpcworc3VwcG9ydGVkIG9uIGEgY2VydGFpbiBwb3J0LCBNQUMgcG9ydCBzZXR1cCBmb3IgZWl0aGVyIGJ1cyBwYWQgb3IgYQorc3BlY2lmaWMgUEhZIGludGVyZmFjZS4KKworVGhlIHBhdGNoIGlzIGRvbmUgZm9yIHJlYWR5IGFkZGluZyBhIG5ldyBoYXJkd2FyZSBNVDc1MzEsIGFuZCBrZWVwIHRoZQorc2FtZSBzZXR1cCBsb2dpYyBvZiBleGlzdGluZyBoYXJkd2FyZS4KKworU2lnbmVkLW9mZi1ieTogTGFuZGVuIENoYW8gPGxhbmRlbi5jaGFvQG1lZGlhdGVrLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFNlYW4gV2FuZyA8c2Vhbi53YW5nQG1lZGlhdGVrLmNvbT4KKy0tLQorCistLS0gYS9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMKKysrKyBiL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYworQEAgLTM3Myw4ICszNzMsOSBAQCBtdDc1MzBfZmRiX3dyaXRlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpCisgCQltdDc1MzBfd3JpdGUocHJpdiwgTVQ3NTMwX0FUQTEgKyAoaSAqIDQpLCByZWdbaV0pOworIH0KKyAKKysvKiBTZXR1cCBUWCBjaXJjdWl0IGluY2x1ZGluZyByZWxldmFudCBQQUQgYW5kIGRyaXZpbmcgKi8KKyBzdGF0aWMgaW50CistbXQ3NTMwX3BhZF9jbGtfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgbW9kZSkKKyttdDc1MzBfcGFkX2Nsa19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpCisgeworIAlzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy0+cHJpdjsKKyAJdTMyIG5jcG8xLCBzc2NfZGVsdGEsIHRyZ2ludCwgaSwgeHRhbDsKK0BAIC0zODgsNyArMzg5LDcgQEAgbXQ3NTMwX3BhZF9jbGtfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKgorIAkJcmV0dXJuIC1FSU5WQUw7CisgCX0KKyAKKy0Jc3dpdGNoIChtb2RlKSB7CisrCXN3aXRjaCAoaW50ZXJmYWNlKSB7CisgCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOgorIAkJdHJnaW50ID0gMDsKKyAJCS8qIFBMTCBmcmVxdWVuY3k6IDEyNU1IeiAqLworQEAgLTQxMCw3ICs0MTEsOCBAQCBtdDc1MzBfcGFkX2Nsa19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqCisgCQl9CisgCQlicmVhazsKKyAJZGVmYXVsdDoKKy0JCWRldl9lcnIocHJpdi0+ZGV2LCAieE1JSSBtb2RlICVkIG5vdCBzdXBwb3J0ZWRcbiIsIG1vZGUpOworKwkJZGV2X2Vycihwcml2LT5kZXYsICJ4TUlJIGludGVyZmFjZSAlZCBub3Qgc3VwcG9ydGVkXG4iLAorKwkJCWludGVyZmFjZSk7CisgCQlyZXR1cm4gLUVJTlZBTDsKKyAJfQorIAorQEAgLTEzMzIsMTIgKzEzMzQsMTEgQEAgbXQ3NTMwX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKKyAJcmV0dXJuIDA7CisgfQorIAorLXN0YXRpYyB2b2lkIG10NzUzMF9waHlsaW5rX21hY19jb25maWcoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKKy0JCQkJICAgICAgdW5zaWduZWQgaW50IG1vZGUsCistCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKQorK3N0YXRpYyBib29sCisrbXQ3NTMwX3BoeV9tb2RlX3N1cHBvcnRlZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAorKwkJCSAgY29uc3Qgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpCisgeworIAlzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy0+cHJpdjsKKy0JdTMyIG1jcl9jdXIsIG1jcl9uZXc7CisgCisgCXN3aXRjaCAocG9ydCkgeworIAljYXNlIDA6IC8qIEludGVybmFsIHBoeSAqLworQEAgLTEzNDYsMzMgKzEzNDcsMTE0IEBAIHN0YXRpYyB2b2lkIG10NzUzMF9waHlsaW5rX21hY19jb25maWcoc3QKKyAJY2FzZSAzOgorIAljYXNlIDQ6CisgCQlpZiAoc3RhdGUtPmludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfR01JSSkKKy0JCQlyZXR1cm47CisrCQkJZ290byB1bnN1cHBvcnRlZDsKKyAJCWJyZWFrOworIAljYXNlIDU6IC8qIDJuZCBjcHUgcG9ydCB3aXRoIHBoeSBvZiBwb3J0IDAgb3IgNCAvIGV4dGVybmFsIHBoeSAqLworLQkJaWYgKHByaXYtPnA1X2ludGVyZmFjZSA9PSBzdGF0ZS0+aW50ZXJmYWNlKQorLQkJCWJyZWFrOworIAkJaWYgKCFwaHlfaW50ZXJmYWNlX21vZGVfaXNfcmdtaWkoc3RhdGUtPmludGVyZmFjZSkgJiYKKyAJCSAgICBzdGF0ZS0+aW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkgJiYKKyAJCSAgICBzdGF0ZS0+aW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJKQorLQkJCXJldHVybjsKKysJCQlnb3RvIHVuc3VwcG9ydGVkOworKwkJYnJlYWs7CisrCWNhc2UgNjogLyogMXN0IGNwdSBwb3J0ICovCisrCQlpZiAoc3RhdGUtPmludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUkgJiYKKysJCSAgICBzdGF0ZS0+aW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9UUkdNSUkpCisrCQkJZ290byB1bnN1cHBvcnRlZDsKKysJCWJyZWFrOworKwlkZWZhdWx0OgorKwkJZGV2X2Vycihwcml2LT5kZXYsICIlczogdW5zdXBwb3J0ZWQgcG9ydDogJWlcbiIsIF9fZnVuY19fLAorKwkJCXBvcnQpOworKwkJZ290byB1bnN1cHBvcnRlZDsKKysJfQorKworKwlyZXR1cm4gdHJ1ZTsKKysKKyt1bnN1cHBvcnRlZDoKKysJcmV0dXJuIGZhbHNlOworK30KKysKKytzdGF0aWMgYm9vbAorK210NzUzeF9waHlfbW9kZV9zdXBwb3J0ZWQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKKysJCQkgIGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKQorK3sKKysJc3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtPnByaXY7CisrCisrCXJldHVybiBwcml2LT5pbmZvLT5waHlfbW9kZV9zdXBwb3J0ZWQoZHMsIHBvcnQsIHN0YXRlKTsKKyt9CisrCisrc3RhdGljIGludAorK210NzUzeF9wYWRfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBjb25zdCBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSkKKyt7CisrCXN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLT5wcml2OworKworKwlyZXR1cm4gcHJpdi0+aW5mby0+cGFkX3NldHVwKGRzLCBzdGF0ZS0+aW50ZXJmYWNlKTsKKyt9CisrCisrc3RhdGljIGludAorK210NzUzMF9tYWNfY29uZmlnKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIHVuc2lnbmVkIGludCBtb2RlLAorKwkJICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKQorK3sKKysJc3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtPnByaXY7CisrCisrCS8qIE9ubHkgbmVlZCB0byBzZXR1cCBwb3J0NS4gKi8KKysJaWYgKHBvcnQgIT0gNSkKKysJCXJldHVybiAwOworKworKwltdDc1MzBfc2V0dXBfcG9ydDUocHJpdi0+ZHMsIGludGVyZmFjZSk7CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50CisrbXQ3NTN4X21hY19jb25maWcoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdW5zaWduZWQgaW50IG1vZGUsCisrCQkgIGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKQorK3sKKysJc3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtPnByaXY7CisrCisrCXJldHVybiBwcml2LT5pbmZvLT5tYWNfcG9ydF9jb25maWcoZHMsIHBvcnQsIG1vZGUsIHN0YXRlLT5pbnRlcmZhY2UpOworK30KKysKKytzdGF0aWMgdm9pZAorK210NzUzeF9waHlsaW5rX21hY19jb25maWcoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdW5zaWduZWQgaW50IG1vZGUsCisrCQkJICBjb25zdCBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSkKKyt7CisrCXN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLT5wcml2OworKwl1MzIgbWNyX2N1ciwgbWNyX25ldzsKKysKKysJaWYgKCFtdDc1M3hfcGh5X21vZGVfc3VwcG9ydGVkKGRzLCBwb3J0LCBzdGF0ZSkpCisrCQlnb3RvIHVuc3VwcG9ydGVkOworKworKwlzd2l0Y2ggKHBvcnQpIHsKKysJY2FzZSAwOiAvKiBJbnRlcm5hbCBwaHkgKi8KKysJY2FzZSAxOgorKwljYXNlIDI6CisrCWNhc2UgMzoKKysJY2FzZSA0OgorKwkJaWYgKHN0YXRlLT5pbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkpCisrCQkJZ290byB1bnN1cHBvcnRlZDsKKysJCWJyZWFrOworKwljYXNlIDU6IC8qIDJuZCBjcHUgcG9ydCB3aXRoIHBoeSBvZiBwb3J0IDAgb3IgNCAvIGV4dGVybmFsIHBoeSAqLworKwkJaWYgKHByaXYtPnA1X2ludGVyZmFjZSA9PSBzdGF0ZS0+aW50ZXJmYWNlKQorKwkJCWJyZWFrOworKworKwkJaWYgKG10NzUzeF9tYWNfY29uZmlnKGRzLCBwb3J0LCBtb2RlLCBzdGF0ZSkgPCAwKQorKwkJCWdvdG8gdW5zdXBwb3J0ZWQ7CisgCistCQltdDc1MzBfc2V0dXBfcG9ydDUoZHMsIHN0YXRlLT5pbnRlcmZhY2UpOworIAkJYnJlYWs7CisgCWNhc2UgNjogLyogMXN0IGNwdSBwb3J0ICovCisgCQlpZiAocHJpdi0+cDZfaW50ZXJmYWNlID09IHN0YXRlLT5pbnRlcmZhY2UpCisgCQkJYnJlYWs7CisgCistCQlpZiAoc3RhdGUtPmludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUkgJiYKKy0JCSAgICBzdGF0ZS0+aW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9UUkdNSUkpCistCQkJcmV0dXJuOworKwkJbXQ3NTN4X3BhZF9zZXR1cChkcywgc3RhdGUpOworIAorLQkJLyogU2V0dXAgVFggY2lyY3VpdCBpbmNsdWluZyByZWxldmFudCBQQUQgYW5kIGRyaXZpbmcgKi8KKy0JCW10NzUzMF9wYWRfY2xrX3NldHVwKGRzLCBzdGF0ZS0+aW50ZXJmYWNlKTsKKysJCWlmIChtdDc1M3hfbWFjX2NvbmZpZyhkcywgcG9ydCwgbW9kZSwgc3RhdGUpIDwgMCkKKysJCQlnb3RvIHVuc3VwcG9ydGVkOworIAorIAkJcHJpdi0+cDZfaW50ZXJmYWNlID0gc3RhdGUtPmludGVyZmFjZTsKKyAJCWJyZWFrOworIAlkZWZhdWx0OgorLQkJZGV2X2Vycihkcy0+ZGV2LCAiJXM6IHVuc3VwcG9ydGVkIHBvcnQ6ICVpXG4iLCBfX2Z1bmNfXywgcG9ydCk7CisrdW5zdXBwb3J0ZWQ6CisrCQlkZXZfZXJyKGRzLT5kZXYsICIlczogdW5zdXBwb3J0ZWQgJXMgcG9ydDogJWlcbiIsCisrCQkJX19mdW5jX18sIHBoeV9tb2RlcyhzdGF0ZS0+aW50ZXJmYWNlKSwgcG9ydCk7CisgCQlyZXR1cm47CisgCX0KKyAKK0BAIC0xNDQwLDYxICsxNTIyLDQ0IEBAIHN0YXRpYyB2b2lkIG10NzUzMF9waHlsaW5rX21hY19saW5rX3VwKHMKKyAJbXQ3NTMwX3NldChwcml2LCBNVDc1MzBfUE1DUl9QKHBvcnQpLCBtY3IpOworIH0KKyAKKy1zdGF0aWMgdm9pZCBtdDc1MzBfcGh5bGlua192YWxpZGF0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAorLQkJCQkgICAgdW5zaWduZWQgbG9uZyAqc3VwcG9ydGVkLAorLQkJCQkgICAgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpCisrc3RhdGljIHZvaWQKKyttdDc1MzBfbWFjX3BvcnRfdmFsaWRhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKKysJCQkgdW5zaWduZWQgbG9uZyAqc3VwcG9ydGVkKQorIHsKKysJaWYgKHBvcnQgPT0gNSkKKysJCXBoeWxpbmtfc2V0KHN1cHBvcnRlZCwgMTAwMGJhc2VYX0Z1bGwpOworK30KKysKKytzdGF0aWMgdm9pZAorK210NzUzeF9waHlsaW5rX3ZhbGlkYXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCisrCQkJdW5zaWduZWQgbG9uZyAqc3VwcG9ydGVkLAorKwkJCXN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKQorK3sKKysJc3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtPnByaXY7CisgCV9fRVRIVE9PTF9ERUNMQVJFX0xJTktfTU9ERV9NQVNLKG1hc2spID0geyAwLCB9OworIAorLQlzd2l0Y2ggKHBvcnQpIHsKKy0JY2FzZSAwOiAvKiBJbnRlcm5hbCBwaHkgKi8KKy0JY2FzZSAxOgorLQljYXNlIDI6CistCWNhc2UgMzoKKy0JY2FzZSA0OgorLQkJaWYgKHN0YXRlLT5pbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX05BICYmCistCQkgICAgc3RhdGUtPmludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfR01JSSkKKy0JCQlnb3RvIHVuc3VwcG9ydGVkOworLQkJYnJlYWs7CistCWNhc2UgNTogLyogMm5kIGNwdSBwb3J0IHdpdGggcGh5IG9mIHBvcnQgMCBvciA0IC8gZXh0ZXJuYWwgcGh5ICovCistCQlpZiAoc3RhdGUtPmludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTkEgJiYKKy0JCSAgICAhcGh5X2ludGVyZmFjZV9tb2RlX2lzX3JnbWlpKHN0YXRlLT5pbnRlcmZhY2UpICYmCistCQkgICAgc3RhdGUtPmludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTUlJICYmCistCQkgICAgc3RhdGUtPmludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfR01JSSkKKy0JCQlnb3RvIHVuc3VwcG9ydGVkOworLQkJYnJlYWs7CistCWNhc2UgNjogLyogMXN0IGNwdSBwb3J0ICovCistCQlpZiAoc3RhdGUtPmludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfTkEgJiYKKy0JCSAgICBzdGF0ZS0+aW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSSAmJgorLQkJICAgIHN0YXRlLT5pbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1RSR01JSSkKKy0JCQlnb3RvIHVuc3VwcG9ydGVkOworLQkJYnJlYWs7CistCWRlZmF1bHQ6CistCQlkZXZfZXJyKGRzLT5kZXYsICIlczogdW5zdXBwb3J0ZWQgcG9ydDogJWlcbiIsIF9fZnVuY19fLCBwb3J0KTsKKy11bnN1cHBvcnRlZDoKKysJaWYgKHN0YXRlLT5pbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX05BICYmCisrCSAgICAhbXQ3NTN4X3BoeV9tb2RlX3N1cHBvcnRlZChkcywgcG9ydCwgc3RhdGUpKSB7CisgCQlsaW5rbW9kZV96ZXJvKHN1cHBvcnRlZCk7CisgCQlyZXR1cm47CisgCX0KKyAKKyAJcGh5bGlua19zZXRfcG9ydF9tb2RlcyhtYXNrKTsKKy0JcGh5bGlua19zZXQobWFzaywgQXV0b25lZyk7CisgCistCWlmIChzdGF0ZS0+aW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9UUkdNSUkpIHsKKy0JCXBoeWxpbmtfc2V0KG1hc2ssIDEwMDBiYXNlVF9GdWxsKTsKKy0JfSBlbHNlIHsKKysJaWYgKHN0YXRlLT5pbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1RSR01JSSkgeworIAkJcGh5bGlua19zZXQobWFzaywgMTBiYXNlVF9IYWxmKTsKKyAJCXBoeWxpbmtfc2V0KG1hc2ssIDEwYmFzZVRfRnVsbCk7CisgCQlwaHlsaW5rX3NldChtYXNrLCAxMDBiYXNlVF9IYWxmKTsKKyAJCXBoeWxpbmtfc2V0KG1hc2ssIDEwMGJhc2VUX0Z1bGwpOworLQorLQkJaWYgKHN0YXRlLT5pbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSkgeworLQkJCS8qIFRoaXMgc3dpdGNoIG9ubHkgc3VwcG9ydHMgMUcgZnVsbC1kdXBsZXguICovCistCQkJcGh5bGlua19zZXQobWFzaywgMTAwMGJhc2VUX0Z1bGwpOworLQkJCWlmIChwb3J0ID09IDUpCistCQkJCXBoeWxpbmtfc2V0KG1hc2ssIDEwMDBiYXNlWF9GdWxsKTsKKy0JCX0KKysJCXBoeWxpbmtfc2V0KG1hc2ssIEF1dG9uZWcpOworIAl9CisgCisrCS8qIFRoaXMgc3dpdGNoIG9ubHkgc3VwcG9ydHMgMUcgZnVsbC1kdXBsZXguICovCisrCWlmIChzdGF0ZS0+aW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkpCisrCQlwaHlsaW5rX3NldChtYXNrLCAxMDAwYmFzZVRfRnVsbCk7CisrCisrCXByaXYtPmluZm8tPm1hY19wb3J0X3ZhbGlkYXRlKGRzLCBwb3J0LCBtYXNrKTsKKysKKyAJcGh5bGlua19zZXQobWFzaywgUGF1c2UpOworIAlwaHlsaW5rX3NldChtYXNrLCBBc3ltX1BhdXNlKTsKKyAKK0BAIC0xNTkwLDEyICsxNjU1LDQ1IEBAIHN0YXRpYyBpbnQgbXQ3NTMwX3NldF9tYWNfZWVlKHN0cnVjdCBkc2EKKyAJcmV0dXJuIDA7CisgfQorIAorK3N0YXRpYyBpbnQKKyttdDc1M3hfcGh5bGlua19tYWNfbGlua19zdGF0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAorKwkJCSAgICAgIHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKQorK3sKKysJc3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtPnByaXY7CisrCisrCXJldHVybiBwcml2LT5pbmZvLT5tYWNfcG9ydF9nZXRfc3RhdGUoZHMsIHBvcnQsIHN0YXRlKTsKKyt9CisrCisrc3RhdGljIGludAorK210NzUzeF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCisreworKwlzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy0+cHJpdjsKKysKKysJcmV0dXJuIHByaXYtPmluZm8tPnN3X3NldHVwKGRzKTsKKyt9CisrCisrc3RhdGljIGludAorK210NzUzeF9waHlfcmVhZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgcmVnbnVtKQorK3sKKysJc3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtPnByaXY7CisrCisrCXJldHVybiBwcml2LT5pbmZvLT5waHlfcmVhZChkcywgcG9ydCwgcmVnbnVtKTsKKyt9CisrCisrc3RhdGljIGludAorK210NzUzeF9waHlfd3JpdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbCkKKyt7CisrCXN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLT5wcml2OworKworKwlyZXR1cm4gcHJpdi0+aW5mby0+cGh5X3dyaXRlKGRzLCBwb3J0LCByZWdudW0sIHZhbCk7CisrfQorKworIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbXQ3NTMwX3N3aXRjaF9vcHMgPSB7CisgCS5nZXRfdGFnX3Byb3RvY29sCT0gbXRrX2dldF90YWdfcHJvdG9jb2wsCistCS5zZXR1cAkJCT0gbXQ3NTMwX3NldHVwLAorKwkuc2V0dXAJCQk9IG10NzUzeF9zZXR1cCwKKyAJLmdldF9zdHJpbmdzCQk9IG10NzUzMF9nZXRfc3RyaW5ncywKKy0JLnBoeV9yZWFkCQk9IG10NzUzMF9waHlfcmVhZCwKKy0JLnBoeV93cml0ZQkJPSBtdDc1MzBfcGh5X3dyaXRlLAorKwkucGh5X3JlYWQJCT0gbXQ3NTN4X3BoeV9yZWFkLAorKwkucGh5X3dyaXRlCQk9IG10NzUzeF9waHlfd3JpdGUsCisgCS5nZXRfZXRodG9vbF9zdGF0cwk9IG10NzUzMF9nZXRfZXRodG9vbF9zdGF0cywKKyAJLmdldF9zc2V0X2NvdW50CQk9IG10NzUzMF9nZXRfc3NldF9jb3VudCwKKyAJLnBvcnRfZW5hYmxlCQk9IG10NzUzMF9wb3J0X2VuYWJsZSwKK0BAIC0xNjEyLDE4ICsxNzEwLDQzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbXQ3NTMKKyAJLnBvcnRfdmxhbl9kZWwJCT0gbXQ3NTMwX3BvcnRfdmxhbl9kZWwsCisgCS5wb3J0X21pcnJvcl9hZGQJPSBtdDc1MzBfcG9ydF9taXJyb3JfYWRkLAorIAkucG9ydF9taXJyb3JfZGVsCT0gbXQ3NTMwX3BvcnRfbWlycm9yX2RlbCwKKy0JLnBoeWxpbmtfdmFsaWRhdGUJPSBtdDc1MzBfcGh5bGlua192YWxpZGF0ZSwKKy0JLnBoeWxpbmtfbWFjX2xpbmtfc3RhdGUgPSBtdDc1MzBfcGh5bGlua19tYWNfbGlua19zdGF0ZSwKKy0JLnBoeWxpbmtfbWFjX2NvbmZpZwk9IG10NzUzMF9waHlsaW5rX21hY19jb25maWcsCisrCS5waHlsaW5rX3ZhbGlkYXRlCT0gbXQ3NTN4X3BoeWxpbmtfdmFsaWRhdGUsCisrCS5waHlsaW5rX21hY19saW5rX3N0YXRlCT0gbXQ3NTN4X3BoeWxpbmtfbWFjX2xpbmtfc3RhdGUsCisrCS5waHlsaW5rX21hY19jb25maWcJPSBtdDc1M3hfcGh5bGlua19tYWNfY29uZmlnLAorIAkucGh5bGlua19tYWNfbGlua19kb3duCT0gbXQ3NTMwX3BoeWxpbmtfbWFjX2xpbmtfZG93biwKKyAJLnBoeWxpbmtfbWFjX2xpbmtfdXAJPSBtdDc1MzBfcGh5bGlua19tYWNfbGlua191cCwKKyAJLmdldF9tYWNfZWVlCQk9IG10NzUzMF9nZXRfbWFjX2VlZSwKKyAJLnNldF9tYWNfZWVlCQk9IG10NzUzMF9zZXRfbWFjX2VlZSwKKyB9OworIAorK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXQ3NTN4X2luZm8gbXQ3NTN4X3RhYmxlW10gPSB7CisrCVtJRF9NVDc2MjFdID0geworKwkJLmlkID0gSURfTVQ3NjIxLAorKwkJLnN3X3NldHVwID0gbXQ3NTMwX3NldHVwLAorKwkJLnBoeV9yZWFkID0gbXQ3NTMwX3BoeV9yZWFkLAorKwkJLnBoeV93cml0ZSA9IG10NzUzMF9waHlfd3JpdGUsCisrCQkucGFkX3NldHVwID0gbXQ3NTMwX3BhZF9jbGtfc2V0dXAsCisrCQkucGh5X21vZGVfc3VwcG9ydGVkID0gbXQ3NTMwX3BoeV9tb2RlX3N1cHBvcnRlZCwKKysJCS5tYWNfcG9ydF92YWxpZGF0ZSA9IG10NzUzMF9tYWNfcG9ydF92YWxpZGF0ZSwKKysJCS5tYWNfcG9ydF9nZXRfc3RhdGUgPSBtdDc1MzBfcGh5bGlua19tYWNfbGlua19zdGF0ZSwKKysJCS5tYWNfcG9ydF9jb25maWcgPSBtdDc1MzBfbWFjX2NvbmZpZywKKysJfSwKKysJW0lEX01UNzUzMF0gPSB7CisrCQkuaWQgPSBJRF9NVDc1MzAsCisrCQkuc3dfc2V0dXAgPSBtdDc1MzBfc2V0dXAsCisrCQkucGh5X3JlYWQgPSBtdDc1MzBfcGh5X3JlYWQsCisrCQkucGh5X3dyaXRlID0gbXQ3NTMwX3BoeV93cml0ZSwKKysJCS5wYWRfc2V0dXAgPSBtdDc1MzBfcGFkX2Nsa19zZXR1cCwKKysJCS5waHlfbW9kZV9zdXBwb3J0ZWQgPSBtdDc1MzBfcGh5X21vZGVfc3VwcG9ydGVkLAorKwkJLm1hY19wb3J0X3ZhbGlkYXRlID0gbXQ3NTMwX21hY19wb3J0X3ZhbGlkYXRlLAorKwkJLm1hY19wb3J0X2dldF9zdGF0ZSA9IG10NzUzMF9waHlsaW5rX21hY19saW5rX3N0YXRlLAorKwkJLm1hY19wb3J0X2NvbmZpZyA9IG10NzUzMF9tYWNfY29uZmlnLAorKwl9LAorK307CisrCisgc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXQ3NTMwX29mX21hdGNoW10gPSB7CistCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NjIxIiwgLmRhdGEgPSAodm9pZCAqKUlEX01UNzYyMSwgfSwKKy0JeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc1MzAiLCAuZGF0YSA9ICh2b2lkICopSURfTVQ3NTMwLCB9LAorKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzYyMSIsIC5kYXRhID0gJm10NzUzeF90YWJsZVtJRF9NVDc2MjFdLCB9LAorKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzUzMCIsIC5kYXRhID0gJm10NzUzeF90YWJsZVtJRF9NVDc1MzBdLCB9LAorIAl7IC8qIHNlbnRpbmVsICovIH0sCisgfTsKKyBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtdDc1MzBfb2ZfbWF0Y2gpOworQEAgLTE2NjEsOCArMTc4NCwyMSBAQCBtdDc1MzBfcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2CisgCS8qIEdldCB0aGUgaGFyZHdhcmUgaWRlbnRpZmllciBmcm9tIHRoZSBkZXZpY2V0cmVlIG5vZGUuCisgCSAqIFdlIHdpbGwgbmVlZCBpdCBmb3Igc29tZSBvZiB0aGUgY2xvY2sgYW5kIHJlZ3VsYXRvciBzZXR1cC4KKyAJICovCistCXByaXYtPmlkID0gKHVuc2lnbmVkIGludCkodW5zaWduZWQgbG9uZykKKy0JCW9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YSgmbWRpb2Rldi0+ZGV2KTsKKysJcHJpdi0+aW5mbyA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YSgmbWRpb2Rldi0+ZGV2KTsKKysJaWYgKCFwcml2LT5pbmZvKQorKwkJcmV0dXJuIC1FSU5WQUw7CisrCisrCS8qIFNhbml0eSBjaGVjayBpZiB0aGVzZSByZXF1aXJlZCBkZXZpY2Ugb3BlcmF0aW9ucyBhcmUgZmlsbGVkCisrCSAqIHByb3Blcmx5LgorKwkgKi8KKysJaWYgKCFwcml2LT5pbmZvLT5zd19zZXR1cCB8fCAhcHJpdi0+aW5mby0+cGFkX3NldHVwIHx8CisrCSAgICAhcHJpdi0+aW5mby0+cGh5X3JlYWQgfHwgIXByaXYtPmluZm8tPnBoeV93cml0ZSB8fAorKwkgICAgIXByaXYtPmluZm8tPnBoeV9tb2RlX3N1cHBvcnRlZCB8fAorKwkgICAgIXByaXYtPmluZm8tPm1hY19wb3J0X3ZhbGlkYXRlIHx8CisrCSAgICAhcHJpdi0+aW5mby0+bWFjX3BvcnRfZ2V0X3N0YXRlIHx8ICFwcml2LT5pbmZvLT5tYWNfcG9ydF9jb25maWcpCisrCQlyZXR1cm4gLUVJTlZBTDsKKysKKysJcHJpdi0+aWQgPSBwcml2LT5pbmZvLT5pZDsKKyAKKyAJaWYgKHByaXYtPmlkID09IElEX01UNzUzMCkgeworIAkJcHJpdi0+Y29yZV9wd3IgPSBkZXZtX3JlZ3VsYXRvcl9nZXQoJm1kaW9kZXYtPmRldiwgImNvcmUiKTsKKy0tLSBhL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuaAorKysrIGIvZHJpdmVycy9uZXQvZHNhL210NzUzMC5oCitAQCAtMTEsNyArMTEsNyBAQAorICNkZWZpbmUgTVQ3NTMwX05VTV9GREJfUkVDT1JEUwkJMjA0OAorICNkZWZpbmUgTVQ3NTMwX0FMTF9NRU1CRVJTCQkweGZmCisgCistZW51bSB7CisrZW51bSBtdDc1M3hfaWQgeworIAlJRF9NVDc1MzAgPSAwLAorIAlJRF9NVDc2MjEgPSAxLAorIH07CitAQCAtNDUxLDYgKzQ1MSw0MCBAQCBzdGF0aWMgY29uc3QgY2hhciAqcDVfaW50Zl9tb2Rlcyh1bnNpZ25lCisgCX0KKyB9CisgCisrLyogc3RydWN0IG10NzUzeF9pbmZvIC0JVGhpcyBpcyB0aGUgbWFpbiBkYXRhIHN0cnVjdHVyZSBmb3IgaG9sZGluZyB0aGUgc3BlY2lmaWMKKysgKgkJCXBhcnQgZm9yIGVhY2ggc3VwcG9ydGVkIGRldmljZQorKyAqIEBzd19zZXR1cDoJCUhvbGRpbmcgdGhlIGhhbmRsZXIgdG8gYSBkZXZpY2UgaW5pdGlhbGl6YXRpb24KKysgKiBAcGh5X3JlYWQ6CQlIb2xkaW5nIHRoZSB3YXkgcmVhZGluZyBQSFkgcG9ydAorKyAqIEBwaHlfd3JpdGU6CQlIb2xkaW5nIHRoZSB3YXkgd3JpdGluZyBQSFkgcG9ydAorKyAqIEBwYWRfc2V0dXA6CQlIb2xkaW5nIHRoZSB3YXkgc2V0dGluZyB1cCB0aGUgYnVzIHBhZCBmb3IgYSBjZXJ0YWluCisrICoJCQlNQUMgcG9ydAorKyAqIEBwaHlfbW9kZV9zdXBwb3J0ZWQ6CUNoZWNrIGlmIHRoZSBQSFkgdHlwZSBpcyBiZWluZyBzdXBwb3J0ZWQgb24gYSBjZXJ0YWluCisrICoJCQlwb3J0CisrICogQG1hY19wb3J0X3ZhbGlkYXRlOglIb2xkaW5nIHRoZSB3YXkgdG8gc2V0IGFkZGl0aW9uIHZhbGlkYXRlIHR5cGUgZm9yIGEKKysgKgkJCWNlcnRhbiBNQUMgcG9ydAorKyAqIEBtYWNfcG9ydF9nZXRfc3RhdGU6IEhvbGRpbmcgdGhlIHdheSBnZXR0aW5nIHRoZSBNQUMvUENTIHN0YXRlIGZvciBhIGNlcnRhaW4KKysgKgkJCU1BQyBwb3J0CisrICogQG1hY19wb3J0X2NvbmZpZzoJSG9sZGluZyB0aGUgd2F5IHNldHRpbmcgdXAgdGhlIFBIWSBhdHRyaWJ1dGUgdG8gYQorKyAqCQkJY2VydGFpbiBNQUMgcG9ydAorKyAqLworK3N0cnVjdCBtdDc1M3hfaW5mbyB7CisrCWVudW0gbXQ3NTN4X2lkIGlkOworKworKwlpbnQgKCpzd19zZXR1cCkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTsKKysJaW50ICgqcGh5X3JlYWQpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCByZWdudW0pOworKwlpbnQgKCpwaHlfd3JpdGUpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWwpOworKwlpbnQgKCpwYWRfc2V0dXApKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSk7CisrCWJvb2wgKCpwaHlfbW9kZV9zdXBwb3J0ZWQpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCisrCQkJCSAgIGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKTsKKysJdm9pZCAoKm1hY19wb3J0X3ZhbGlkYXRlKShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAorKwkJCQkgIHVuc2lnbmVkIGxvbmcgKnN1cHBvcnRlZCk7CisrCWludCAoKm1hY19wb3J0X2dldF9zdGF0ZSkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKKysJCQkJICBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSk7CisrCWludCAoKm1hY19wb3J0X2NvbmZpZykoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKKysJCQkgICAgICAgdW5zaWduZWQgaW50IG1vZGUsCisrCQkJICAgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpOworK307CisrCisgLyogc3RydWN0IG10NzUzMF9wcml2IC0JVGhpcyBpcyB0aGUgbWFpbiBkYXRhIHN0cnVjdHVyZSBmb3IgaG9sZGluZyB0aGUgc3RhdGUKKyAgKgkJCW9mIHRoZSBkcml2ZXIKKyAgKiBAZGV2OgkJVGhlIGRldmljZSBwb2ludGVyCitAQCAtNDc2LDYgKzUxMCw3IEBAIHN0cnVjdCBtdDc1MzBfcHJpdiB7CisgCXN0cnVjdCByZWd1bGF0b3IJKmNvcmVfcHdyOworIAlzdHJ1Y3QgcmVndWxhdG9yCSppb19wd3I7CisgCXN0cnVjdCBncGlvX2Rlc2MJKnJlc2V0OworKwljb25zdCBzdHJ1Y3QgbXQ3NTN4X2luZm8gKmluZm87CisgCXVuc2lnbmVkIGludAkJaWQ7CisgCWJvb2wJCQltY207CisgCXBoeV9pbnRlcmZhY2VfdAkJcDZfaW50ZXJmYWNlOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA2MDQtbmV0LWRzYS1tdDc1MzAtQWRkLXRoZS1zdXBwb3J0LW9mLU1UNzUzMS1zd2l0Y2gucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDYwNC1uZXQtZHNhLW10NzUzMC1BZGQtdGhlLXN1cHBvcnQtb2YtTVQ3NTMxLXN3aXRjaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWRlODYyCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA2MDQtbmV0LWRzYS1tdDc1MzAtQWRkLXRoZS1zdXBwb3J0LW9mLU1UNzUzMS1zd2l0Y2gucGF0Y2gKQEAgLTAsMCArMSwxNTEwIEBACitGcm9tOiBMYW5kZW4gQ2hhbyA8bGFuZGVuLmNoYW9AbWVkaWF0ZWsuY29tPgorRGF0ZTogRnJpLCA0IFNlcCAyMDIwIDIyOjIxOjU5ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIG5ldDogZHNhOiBtdDc1MzA6IEFkZCB0aGUgc3VwcG9ydCBvZiBNVDc1MzEgc3dpdGNoCisKK0FkZCBuZXcgc3VwcG9ydCBmb3IgTVQ3NTMxOgorCitNVDc1MzEgaXMgdGhlIG5leHQgZ2VuZXJhdGlvbiBvZiBNVDc1MzAuIEl0IGlzIGFsc28gYSA3LXBvcnRzIHN3aXRjaCB3aXRoCis1IGdpZ2EgZW1iZWRkZWQgcGh5cywgMiBjcHUgcG9ydHMsIGFuZCB0aGUgc2FtZSBNQUMgbG9naWMgb2YgTVQ3NTMwLiBDcHUKK3BvcnQgNiBvbmx5IHN1cHBvcnRzIFNHTUlJIGludGVyZmFjZS4gQ3B1IHBvcnQgNSBzdXBwb3J0cyBlaXRoZXIgUkdNSUkKK29yIFNHTUlJIGluIGRpZmZlcmVudCBIVyBza3UsIGJ1dCBjYW5ub3QgYmUgbXV4ZWQgdG8gUEhZIG9mIHBvcnQgMC80IGxpa2UKK210NzUzMC4gRHVlIHRvIFNHTUlJIGludGVyZmFjZSBzdXBwb3J0LCBwbGwsIGFuZCBwYWQgc2V0dGluZyBhcmUgZGlmZmVyZW50Citmcm9tIE1UNzUzMC4gVGhpcyBwYXRjaCBhZGRzIGRpZmZlcmVudCBpbml0aWFsIHNldHRpbmcsIGFuZCBTR01JSSBwaHlsaW5rCitoYW5kbGVycyBvZiBNVDc1MzEuCisKK01UNzUzMSBTR01JSSBpbnRlcmZhY2UgY2FuIGJlIGNvbmZpZ3VyZWQgaW4gZm9sbG93aW5nIG1vZGU6CistICdTR01JSSBBTiBtb2RlJyB3aXRoIGluLWJhbmQgbmVnb3RpYXRpb24gY2FwYWJpbGl0eQorICAgIHdoaWNoIGlzIGNvbXBhdGlibGUgd2l0aCBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkuCistICdTR01JSSBmb3JjZSBtb2RlJyB3aXRob3V0IGluLWJhbmQgbmVnb3RpYXRpb24KKyAgICB3aGljaCBpcyBjb21wYXRpYmxlIHdpdGggMTBCLzhCIGVuY29kaW5nIG9mCisgICAgUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCB3aXRoIGZpeGVkIGZ1bGwtZHVwbGV4IGFuZCBmaXhlZCBwYXVzZS4KKy0gMi41IHRpbWVzIGZhc3RlciBjbG9ja2VkICdTR01JSSBmb3JjZSBtb2RlJyB3aXRob3V0IGluLWJhbmQgbmVnb3RpYXRpb24KKyAgICB3aGljaCBpcyBjb21wYXRpYmxlIHdpdGggMTBCLzhCIGVuY29kaW5nIG9mCisgICAgUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWCB3aXRoIGZpeGVkIGZ1bGwtZHVwbGV4IGFuZCBmaXhlZCBwYXVzZS4KKworU2lnbmVkLW9mZi1ieTogTGFuZGVuIENoYW8gPGxhbmRlbi5jaGFvQG1lZGlhdGVrLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFNlYW4gV2FuZyA8c2Vhbi53YW5nQG1lZGlhdGVrLmNvbT4KKy0tLQorCistLS0gYS9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMKKysrKyBiL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYworQEAgLTIzNSw2ICsyMzUsMTIgQEAgbXQ3NTMwX3dyaXRlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdQorIH0KKyAKKyBzdGF0aWMgdTMyCisrX210NzUzMF91bmxvY2tlZF9yZWFkKHN0cnVjdCBtdDc1MzBfZHVtbXlfcG9sbCAqcCkKKyt7CisrCXJldHVybiBtdDc1MzBfbWlpX3JlYWQocC0+cHJpdiwgcC0+cmVnKTsKKyt9CisrCisrc3RhdGljIHUzMgorIF9tdDc1MzBfcmVhZChzdHJ1Y3QgbXQ3NTMwX2R1bW15X3BvbGwgKnApCisgeworIAlzdHJ1Y3QgbWlpX2J1cwkJKmJ1cyA9IHAtPnByaXYtPmJ1czsKK0BAIC00ODIsNiArNDg4LDEwOCBAQCBtdDc1MzBfcGFkX2Nsa19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqCisgCXJldHVybiAwOworIH0KKyAKKytzdGF0aWMgYm9vbCBtdDc1MzFfZHVhbF9zZ21paV9zdXBwb3J0ZWQoc3RydWN0IG10NzUzMF9wcml2ICpwcml2KQorK3sKKysJdTMyIHZhbDsKKysKKysJdmFsID0gbXQ3NTMwX3JlYWQocHJpdiwgTVQ3NTMxX1RPUF9TSUdfU1IpOworKworKwlyZXR1cm4gKHZhbCAmIFBBRF9EVUFMX1NHTUlJX0VOKSAhPSAwOworK30KKysKKytzdGF0aWMgaW50CisrbXQ3NTMxX3BhZF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpCisreworKwlzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy0+cHJpdjsKKysJdTMyIHZhbDsKKysJdTMyIHRvcF9zaWc7CisrCXUzMiBod3N0cmFwOworKwl1MzIgeHRhbDsKKysKKysJaWYgKG10NzUzMV9kdWFsX3NnbWlpX3N1cHBvcnRlZChwcml2KSkKKysJCXJldHVybiAwOworKworKwl2YWwgPSBtdDc1MzBfcmVhZChwcml2LCBNVDc1MzFfQ1JFVik7CisrCXRvcF9zaWcgPSBtdDc1MzBfcmVhZChwcml2LCBNVDc1MzFfVE9QX1NJR19TUik7CisrCWh3c3RyYXAgPSBtdDc1MzBfcmVhZChwcml2LCBNVDc1MzFfSFdUUkFQKTsKKysJaWYgKCh2YWwgJiBDSElQX1JFVl9NKSA+IDApCisrCQl4dGFsID0gKHRvcF9zaWcgJiBQQURfTUNNX1NNSV9FTikgPyBIV1RSQVBfWFRBTF9GU0VMXzQwTUhaIDoKKysJCQkJCQkgICAgSFdUUkFQX1hUQUxfRlNFTF8yNU1IWjsKKysJZWxzZQorKwkJeHRhbCA9IGh3c3RyYXAgJiBIV1RSQVBfWFRBTF9GU0VMX01BU0s7CisrCisrCS8qIFN0ZXAgMSA6IERpc2FibGUgTVQ3NTMxIENPUkVQTEwgKi8KKysJdmFsID0gbXQ3NTMwX3JlYWQocHJpdiwgTVQ3NTMxX1BMTEdQX0VOKTsKKysJdmFsICY9IH5FTl9DT1JFUExMOworKwltdDc1MzBfd3JpdGUocHJpdiwgTVQ3NTMxX1BMTEdQX0VOLCB2YWwpOworKworKwkvKiBTdGVwIDI6IHN3aXRjaCB0byBYVEFMIG91dHB1dCAqLworKwl2YWwgPSBtdDc1MzBfcmVhZChwcml2LCBNVDc1MzFfUExMR1BfRU4pOworKwl2YWwgfD0gU1dfQ0xLU1c7CisrCW10NzUzMF93cml0ZShwcml2LCBNVDc1MzFfUExMR1BfRU4sIHZhbCk7CisrCisrCXZhbCA9IG10NzUzMF9yZWFkKHByaXYsIE1UNzUzMV9QTExHUF9DUjApOworKwl2YWwgJj0gflJHX0NPUkVQTExfRU47CisrCW10NzUzMF93cml0ZShwcml2LCBNVDc1MzFfUExMR1BfQ1IwLCB2YWwpOworKworKwkvKiBTdGVwIDM6IGRpc2FibGUgUExMR1AgYW5kIGVuYWJsZSBwcm9ncmFtIFBMTEdQICovCisrCXZhbCA9IG10NzUzMF9yZWFkKHByaXYsIE1UNzUzMV9QTExHUF9FTik7CisrCXZhbCB8PSBTV19QTExHUDsKKysJbXQ3NTMwX3dyaXRlKHByaXYsIE1UNzUzMV9QTExHUF9FTiwgdmFsKTsKKysKKysJLyogU3RlcCA0OiBwcm9ncmFtIENPUkVQTEwgb3V0cHV0IGZyZXF1ZW5jeSB0byA1MDBNSHogKi8KKysJdmFsID0gbXQ3NTMwX3JlYWQocHJpdiwgTVQ3NTMxX1BMTEdQX0NSMCk7CisrCXZhbCAmPSB+UkdfQ09SRVBMTF9QT1NESVZfTTsKKysJdmFsIHw9IDIgPDwgUkdfQ09SRVBMTF9QT1NESVZfUzsKKysJbXQ3NTMwX3dyaXRlKHByaXYsIE1UNzUzMV9QTExHUF9DUjAsIHZhbCk7CisrCXVzbGVlcF9yYW5nZSgyNSwgMzUpOworKworKwlzd2l0Y2ggKHh0YWwpIHsKKysJY2FzZSBIV1RSQVBfWFRBTF9GU0VMXzI1TUhaOgorKwkJdmFsID0gbXQ3NTMwX3JlYWQocHJpdiwgTVQ3NTMxX1BMTEdQX0NSMCk7CisrCQl2YWwgJj0gflJHX0NPUkVQTExfU0RNX1BDV19NOworKwkJdmFsIHw9IDB4MTQwMDAwIDw8IFJHX0NPUkVQTExfU0RNX1BDV19TOworKwkJbXQ3NTMwX3dyaXRlKHByaXYsIE1UNzUzMV9QTExHUF9DUjAsIHZhbCk7CisrCQlicmVhazsKKysJY2FzZSBIV1RSQVBfWFRBTF9GU0VMXzQwTUhaOgorKwkJdmFsID0gbXQ3NTMwX3JlYWQocHJpdiwgTVQ3NTMxX1BMTEdQX0NSMCk7CisrCQl2YWwgJj0gflJHX0NPUkVQTExfU0RNX1BDV19NOworKwkJdmFsIHw9IDB4MTkwMDAwIDw8IFJHX0NPUkVQTExfU0RNX1BDV19TOworKwkJbXQ3NTMwX3dyaXRlKHByaXYsIE1UNzUzMV9QTExHUF9DUjAsIHZhbCk7CisrCQlicmVhazsKKysJfTsKKysKKysJLyogU2V0IGZlZWRiYWNrIGRpdmlkZSByYXRpbyB1cGRhdGUgc2lnbmFsIHRvIGhpZ2ggKi8KKysJdmFsID0gbXQ3NTMwX3JlYWQocHJpdiwgTVQ3NTMxX1BMTEdQX0NSMCk7CisrCXZhbCB8PSBSR19DT1JFUExMX1NETV9QQ1dfQ0hHOworKwltdDc1MzBfd3JpdGUocHJpdiwgTVQ3NTMxX1BMTEdQX0NSMCwgdmFsKTsKKysJLyogV2FpdCBmb3IgYXQgbGVhc3QgMTYgWFRBTCBjbG9ja3MgKi8KKysJdXNsZWVwX3JhbmdlKDEwLCAyMCk7CisrCisrCS8qIFN0ZXAgNTogc2V0IGZlZWRiYWNrIGRpdmlkZSByYXRpbyB1cGRhdGUgc2lnbmFsIHRvIGxvdyAqLworKwl2YWwgPSBtdDc1MzBfcmVhZChwcml2LCBNVDc1MzFfUExMR1BfQ1IwKTsKKysJdmFsICY9IH5SR19DT1JFUExMX1NETV9QQ1dfQ0hHOworKwltdDc1MzBfd3JpdGUocHJpdiwgTVQ3NTMxX1BMTEdQX0NSMCwgdmFsKTsKKysKKysJLyogRW5hYmxlIDMyNU0gY2xvY2sgZm9yIFNHTUlJICovCisrCW10NzUzMF93cml0ZShwcml2LCBNVDc1MzFfQU5BX1BMTEdQX0NSNSwgMHhhZDAwMDApOworKworKwkvKiBFbmFibGUgMjUwU1NDIGNsb2NrIGZvciBSR01JSSAqLworKwltdDc1MzBfd3JpdGUocHJpdiwgTVQ3NTMxX0FOQV9QTExHUF9DUjIsIDB4NGY0MDAwMCk7CisrCisrCS8qIFN0ZXAgNjogRW5hYmxlIE1UNzUzMSBQTEwgKi8KKysJdmFsID0gbXQ3NTMwX3JlYWQocHJpdiwgTVQ3NTMxX1BMTEdQX0NSMCk7CisrCXZhbCB8PSBSR19DT1JFUExMX0VOOworKwltdDc1MzBfd3JpdGUocHJpdiwgTVQ3NTMxX1BMTEdQX0NSMCwgdmFsKTsKKysKKysJdmFsID0gbXQ3NTMwX3JlYWQocHJpdiwgTVQ3NTMxX1BMTEdQX0VOKTsKKysJdmFsIHw9IEVOX0NPUkVQTEw7CisrCW10NzUzMF93cml0ZShwcml2LCBNVDc1MzFfUExMR1BfRU4sIHZhbCk7CisrCXVzbGVlcF9yYW5nZSgyNSwgMzUpOworKworKwlyZXR1cm4gMDsKKyt9CisrCisgc3RhdGljIHZvaWQKKyBtdDc1MzBfbWliX3Jlc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKKyB7CitAQCAtNTA2LDYgKzYxNCwyMTcgQEAgc3RhdGljIGludCBtdDc1MzBfcGh5X3dyaXRlKHN0cnVjdCBkc2FfcworIAlyZXR1cm4gbWRpb2J1c193cml0ZV9uZXN0ZWQocHJpdi0+YnVzLCBwb3J0LCByZWdudW0sIHZhbCk7CisgfQorIAorK3N0YXRpYyBpbnQKKyttdDc1MzFfaW5kX2M0NV9waHlfcmVhZChzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZGV2YWQsCisrCQkJaW50IHJlZ251bSkKKyt7CisrCXN0cnVjdCBtaWlfYnVzICpidXMgPSBwcml2LT5idXM7CisrCXN0cnVjdCBtdDc1MzBfZHVtbXlfcG9sbCBwOworKwl1MzIgcmVnLCB2YWw7CisrCWludCByZXQ7CisrCisrCUlOSVRfTVQ3NTMwX0RVTU1ZX1BPTEwoJnAsIHByaXYsIE1UNzUzMV9QSFlfSUFDKTsKKysKKysJbXV0ZXhfbG9ja19uZXN0ZWQoJmJ1cy0+bWRpb19sb2NrLCBNRElPX01VVEVYX05FU1RFRCk7CisrCisrCXJldCA9IHJlYWR4X3BvbGxfdGltZW91dChfbXQ3NTMwX3VubG9ja2VkX3JlYWQsICZwLCB2YWwsCisrCQkJCSAhKHZhbCAmIE1UNzUzMV9QSFlfQUNTX1NUKSwgMjAsIDEwMDAwMCk7CisrCWlmIChyZXQgPCAwKSB7CisrCQlkZXZfZXJyKHByaXYtPmRldiwgInBvbGwgdGltZW91dFxuIik7CisrCQlnb3RvIG91dDsKKysJfQorKworKwlyZWcgPSBNVDc1MzFfTURJT19DTDQ1X0FERFIgfCBNVDc1MzFfTURJT19QSFlfQUREUihwb3J0KSB8CisrCSAgICAgIE1UNzUzMV9NRElPX0RFVl9BRERSKGRldmFkKSB8IHJlZ251bTsKKysJbXQ3NTMwX21paV93cml0ZShwcml2LCBNVDc1MzFfUEhZX0lBQywgcmVnIHwgTVQ3NTMxX1BIWV9BQ1NfU1QpOworKworKwlyZXQgPSByZWFkeF9wb2xsX3RpbWVvdXQoX210NzUzMF91bmxvY2tlZF9yZWFkLCAmcCwgdmFsLAorKwkJCQkgISh2YWwgJiBNVDc1MzFfUEhZX0FDU19TVCksIDIwLCAxMDAwMDApOworKwlpZiAocmV0IDwgMCkgeworKwkJZGV2X2Vycihwcml2LT5kZXYsICJwb2xsIHRpbWVvdXRcbiIpOworKwkJZ290byBvdXQ7CisrCX0KKysKKysJcmVnID0gTVQ3NTMxX01ESU9fQ0w0NV9SRUFEIHwgTVQ3NTMxX01ESU9fUEhZX0FERFIocG9ydCkgfAorKwkgICAgICBNVDc1MzFfTURJT19ERVZfQUREUihkZXZhZCk7CisrCW10NzUzMF9taWlfd3JpdGUocHJpdiwgTVQ3NTMxX1BIWV9JQUMsIHJlZyB8IE1UNzUzMV9QSFlfQUNTX1NUKTsKKysKKysJcmV0ID0gcmVhZHhfcG9sbF90aW1lb3V0KF9tdDc1MzBfdW5sb2NrZWRfcmVhZCwgJnAsIHZhbCwKKysJCQkJICEodmFsICYgTVQ3NTMxX1BIWV9BQ1NfU1QpLCAyMCwgMTAwMDAwKTsKKysJaWYgKHJldCA8IDApIHsKKysJCWRldl9lcnIocHJpdi0+ZGV2LCAicG9sbCB0aW1lb3V0XG4iKTsKKysJCWdvdG8gb3V0OworKwl9CisrCisrCXJldCA9IHZhbCAmIE1UNzUzMV9NRElPX1JXX0RBVEFfTUFTSzsKKytvdXQ6CisrCW11dGV4X3VubG9jaygmYnVzLT5tZGlvX2xvY2spOworKworKwlyZXR1cm4gcmV0OworK30KKysKKytzdGF0aWMgaW50CisrbXQ3NTMxX2luZF9jNDVfcGh5X3dyaXRlKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBkZXZhZCwKKysJCQkgaW50IHJlZ251bSwgdTMyIGRhdGEpCisreworKwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi0+YnVzOworKwlzdHJ1Y3QgbXQ3NTMwX2R1bW15X3BvbGwgcDsKKysJdTMyIHZhbCwgcmVnOworKwlpbnQgcmV0OworKworKwlJTklUX01UNzUzMF9EVU1NWV9QT0xMKCZwLCBwcml2LCBNVDc1MzFfUEhZX0lBQyk7CisrCisrCW11dGV4X2xvY2tfbmVzdGVkKCZidXMtPm1kaW9fbG9jaywgTURJT19NVVRFWF9ORVNURUQpOworKworKwlyZXQgPSByZWFkeF9wb2xsX3RpbWVvdXQoX210NzUzMF91bmxvY2tlZF9yZWFkLCAmcCwgdmFsLAorKwkJCQkgISh2YWwgJiBNVDc1MzFfUEhZX0FDU19TVCksIDIwLCAxMDAwMDApOworKwlpZiAocmV0IDwgMCkgeworKwkJZGV2X2Vycihwcml2LT5kZXYsICJwb2xsIHRpbWVvdXRcbiIpOworKwkJZ290byBvdXQ7CisrCX0KKysKKysJcmVnID0gTVQ3NTMxX01ESU9fQ0w0NV9BRERSIHwgTVQ3NTMxX01ESU9fUEhZX0FERFIocG9ydCkgfAorKwkgICAgICBNVDc1MzFfTURJT19ERVZfQUREUihkZXZhZCkgfCByZWdudW07CisrCW10NzUzMF9taWlfd3JpdGUocHJpdiwgTVQ3NTMxX1BIWV9JQUMsIHJlZyB8IE1UNzUzMV9QSFlfQUNTX1NUKTsKKysKKysJcmV0ID0gcmVhZHhfcG9sbF90aW1lb3V0KF9tdDc1MzBfdW5sb2NrZWRfcmVhZCwgJnAsIHZhbCwKKysJCQkJICEodmFsICYgTVQ3NTMxX1BIWV9BQ1NfU1QpLCAyMCwgMTAwMDAwKTsKKysJaWYgKHJldCA8IDApIHsKKysJCWRldl9lcnIocHJpdi0+ZGV2LCAicG9sbCB0aW1lb3V0XG4iKTsKKysJCWdvdG8gb3V0OworKwl9CisrCisrCXJlZyA9IE1UNzUzMV9NRElPX0NMNDVfV1JJVEUgfCBNVDc1MzFfTURJT19QSFlfQUREUihwb3J0KSB8CisrCSAgICAgIE1UNzUzMV9NRElPX0RFVl9BRERSKGRldmFkKSB8IGRhdGE7CisrCW10NzUzMF9taWlfd3JpdGUocHJpdiwgTVQ3NTMxX1BIWV9JQUMsIHJlZyB8IE1UNzUzMV9QSFlfQUNTX1NUKTsKKysKKysJcmV0ID0gcmVhZHhfcG9sbF90aW1lb3V0KF9tdDc1MzBfdW5sb2NrZWRfcmVhZCwgJnAsIHZhbCwKKysJCQkJICEodmFsICYgTVQ3NTMxX1BIWV9BQ1NfU1QpLCAyMCwgMTAwMDAwKTsKKysJaWYgKHJldCA8IDApIHsKKysJCWRldl9lcnIocHJpdi0+ZGV2LCAicG9sbCB0aW1lb3V0XG4iKTsKKysJCWdvdG8gb3V0OworKwl9CisrCisrb3V0OgorKwltdXRleF91bmxvY2soJmJ1cy0+bWRpb19sb2NrKTsKKysKKysJcmV0dXJuIHJldDsKKyt9CisrCisrc3RhdGljIGludAorK210NzUzMV9pbmRfYzIyX3BoeV9yZWFkKHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCByZWdudW0pCisreworKwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi0+YnVzOworKwlzdHJ1Y3QgbXQ3NTMwX2R1bW15X3BvbGwgcDsKKysJaW50IHJldDsKKysJdTMyIHZhbDsKKysKKysJSU5JVF9NVDc1MzBfRFVNTVlfUE9MTCgmcCwgcHJpdiwgTVQ3NTMxX1BIWV9JQUMpOworKworKwltdXRleF9sb2NrX25lc3RlZCgmYnVzLT5tZGlvX2xvY2ssIE1ESU9fTVVURVhfTkVTVEVEKTsKKysKKysJcmV0ID0gcmVhZHhfcG9sbF90aW1lb3V0KF9tdDc1MzBfdW5sb2NrZWRfcmVhZCwgJnAsIHZhbCwKKysJCQkJICEodmFsICYgTVQ3NTMxX1BIWV9BQ1NfU1QpLCAyMCwgMTAwMDAwKTsKKysJaWYgKHJldCA8IDApIHsKKysJCWRldl9lcnIocHJpdi0+ZGV2LCAicG9sbCB0aW1lb3V0XG4iKTsKKysJCWdvdG8gb3V0OworKwl9CisrCisrCXZhbCA9IE1UNzUzMV9NRElPX0NMMjJfUkVBRCB8IE1UNzUzMV9NRElPX1BIWV9BRERSKHBvcnQpIHwKKysJICAgICAgTVQ3NTMxX01ESU9fUkVHX0FERFIocmVnbnVtKTsKKysKKysJbXQ3NTMwX21paV93cml0ZShwcml2LCBNVDc1MzFfUEhZX0lBQywgdmFsIHwgTVQ3NTMxX1BIWV9BQ1NfU1QpOworKworKwlyZXQgPSByZWFkeF9wb2xsX3RpbWVvdXQoX210NzUzMF91bmxvY2tlZF9yZWFkLCAmcCwgdmFsLAorKwkJCQkgISh2YWwgJiBNVDc1MzFfUEhZX0FDU19TVCksIDIwLCAxMDAwMDApOworKwlpZiAocmV0IDwgMCkgeworKwkJZGV2X2Vycihwcml2LT5kZXYsICJwb2xsIHRpbWVvdXRcbiIpOworKwkJZ290byBvdXQ7CisrCX0KKysKKysJcmV0ID0gdmFsICYgTVQ3NTMxX01ESU9fUldfREFUQV9NQVNLOworK291dDoKKysJbXV0ZXhfdW5sb2NrKCZidXMtPm1kaW9fbG9jayk7CisrCisrCXJldHVybiByZXQ7CisrfQorKworK3N0YXRpYyBpbnQKKyttdDc1MzFfaW5kX2MyMl9waHlfd3JpdGUoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IHJlZ251bSwKKysJCQkgdTE2IGRhdGEpCisreworKwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi0+YnVzOworKwlzdHJ1Y3QgbXQ3NTMwX2R1bW15X3BvbGwgcDsKKysJaW50IHJldDsKKysJdTMyIHJlZzsKKysKKysJSU5JVF9NVDc1MzBfRFVNTVlfUE9MTCgmcCwgcHJpdiwgTVQ3NTMxX1BIWV9JQUMpOworKworKwltdXRleF9sb2NrX25lc3RlZCgmYnVzLT5tZGlvX2xvY2ssIE1ESU9fTVVURVhfTkVTVEVEKTsKKysKKysJcmV0ID0gcmVhZHhfcG9sbF90aW1lb3V0KF9tdDc1MzBfdW5sb2NrZWRfcmVhZCwgJnAsIHJlZywKKysJCQkJICEocmVnICYgTVQ3NTMxX1BIWV9BQ1NfU1QpLCAyMCwgMTAwMDAwKTsKKysJaWYgKHJldCA8IDApIHsKKysJCWRldl9lcnIocHJpdi0+ZGV2LCAicG9sbCB0aW1lb3V0XG4iKTsKKysJCWdvdG8gb3V0OworKwl9CisrCisrCXJlZyA9IE1UNzUzMV9NRElPX0NMMjJfV1JJVEUgfCBNVDc1MzFfTURJT19QSFlfQUREUihwb3J0KSB8CisrCSAgICAgIE1UNzUzMV9NRElPX1JFR19BRERSKHJlZ251bSkgfCBkYXRhOworKworKwltdDc1MzBfbWlpX3dyaXRlKHByaXYsIE1UNzUzMV9QSFlfSUFDLCByZWcgfCBNVDc1MzFfUEhZX0FDU19TVCk7CisrCisrCXJldCA9IHJlYWR4X3BvbGxfdGltZW91dChfbXQ3NTMwX3VubG9ja2VkX3JlYWQsICZwLCByZWcsCisrCQkJCSAhKHJlZyAmIE1UNzUzMV9QSFlfQUNTX1NUKSwgMjAsIDEwMDAwMCk7CisrCWlmIChyZXQgPCAwKSB7CisrCQlkZXZfZXJyKHByaXYtPmRldiwgInBvbGwgdGltZW91dFxuIik7CisrCQlnb3RvIG91dDsKKysJfQorKworK291dDoKKysJbXV0ZXhfdW5sb2NrKCZidXMtPm1kaW9fbG9jayk7CisrCisrCXJldHVybiByZXQ7CisrfQorKworK3N0YXRpYyBpbnQKKyttdDc1MzFfaW5kX3BoeV9yZWFkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCByZWdudW0pCisreworKwlzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy0+cHJpdjsKKysJaW50IGRldmFkOworKwlpbnQgcmV0OworKworKwlpZiAocmVnbnVtICYgTUlJX0FERFJfQzQ1KSB7CisrCQlkZXZhZCA9IChyZWdudW0gPj4gTUlJX0RFVkFERFJfQzQ1X1NISUZUKSAmIDB4MWY7CisrCQlyZXQgPSBtdDc1MzFfaW5kX2M0NV9waHlfcmVhZChwcml2LCBwb3J0LCBkZXZhZCwKKysJCQkJCSAgICAgIHJlZ251bSAmIE1JSV9SRUdBRERSX0M0NV9NQVNLKTsKKysJfSBlbHNlIHsKKysJCXJldCA9IG10NzUzMV9pbmRfYzIyX3BoeV9yZWFkKHByaXYsIHBvcnQsIHJlZ251bSk7CisrCX0KKysKKysJcmV0dXJuIHJldDsKKyt9CisrCisrc3RhdGljIGludAorK210NzUzMV9pbmRfcGh5X3dyaXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCByZWdudW0sCisrCQkgICAgIHUxNiBkYXRhKQorK3sKKysJc3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtPnByaXY7CisrCWludCBkZXZhZDsKKysJaW50IHJldDsKKysKKysJaWYgKHJlZ251bSAmIE1JSV9BRERSX0M0NSkgeworKwkJZGV2YWQgPSAocmVnbnVtID4+IE1JSV9ERVZBRERSX0M0NV9TSElGVCkgJiAweDFmOworKwkJcmV0ID0gbXQ3NTMxX2luZF9jNDVfcGh5X3dyaXRlKHByaXYsIHBvcnQsIGRldmFkLAorKwkJCQkJICAgICAgIHJlZ251bSAmIE1JSV9SRUdBRERSX0M0NV9NQVNLLAorKwkJCQkJICAgICAgIGRhdGEpOworKwl9IGVsc2UgeworKwkJcmV0ID0gbXQ3NTMxX2luZF9jMjJfcGh5X3dyaXRlKHByaXYsIHBvcnQsIHJlZ251bSwgZGF0YSk7CisrCX0KKysKKysJcmV0dXJuIHJldDsKKyt9CisrCisgc3RhdGljIHZvaWQKKyBtdDc1MzBfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTMyIHN0cmluZ3NldCwKKyAJCSAgIHVpbnQ4X3QgKmRhdGEpCitAQCAtNjIyLDkgKzk0MSwxNCBAQCB1bmxvY2tfZXhpdDoKKyB9CisgCisgc3RhdGljIGludAorLW10NzUzMF9jcHVfcG9ydF9lbmFibGUoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LAorLQkJICAgICAgIGludCBwb3J0KQorK210NzUzeF9jcHVfcG9ydF9lbmFibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCkKKyB7CisrCXN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLT5wcml2OworKworKwkvKiBTZXR1cCBtYXggY2FwYWJpbGl0eSBvZiBDUFUgcG9ydCBhdCBmaXJzdCAqLworKwlpZiAocHJpdi0+aW5mby0+Y3B1X3BvcnRfY29uZmlnKQorKwkJcHJpdi0+aW5mby0+Y3B1X3BvcnRfY29uZmlnKGRzLCBwb3J0KTsKKysKKyAJLyogRW5hYmxlIE1lZGlhdGVrIGhlYWRlciBtb2RlIG9uIHRoZSBjcHUgcG9ydCAqLworIAltdDc1MzBfd3JpdGUocHJpdiwgTVQ3NTMwX1BWQ19QKHBvcnQpLAorIAkJICAgICBQT1JUX1NQRUNfVEFHKTsKK0BAIC02MzcsNyArOTYxLDcgQEAgbXQ3NTMwX2NwdV9wb3J0X2VuYWJsZShzdHJ1Y3QgbXQ3NTMwX3ByaQorIAkJbXQ3NTMwX3Jtdyhwcml2LCBNVDc1MzBfTUZDLCBDUFVfTUFTSywgQ1BVX0VOIHwgQ1BVX1BPUlQocG9ydCkpOworIAorIAkvKiBDUFUgcG9ydCBnZXRzIGNvbm5lY3RlZCB0byBhbGwgdXNlciBwb3J0cyBvZgorLQkgKiB0aGUgc3dpdGNoCisrCSAqIHRoZSBzd2l0Y2guCisgCSAqLworIAltdDc1MzBfd3JpdGUocHJpdiwgTVQ3NTMwX1BDUl9QKHBvcnQpLAorIAkJICAgICBQQ1JfTUFUUklYKGRzYV91c2VyX3BvcnRzKHByaXYtPmRzKSkpOworQEAgLTExMjAsMjcgKzE0NDQsNDIgQEAgbXQ3NTMwX3BvcnRfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKgorIAlyZXR1cm4gMDsKKyB9CisgCistc3RhdGljIGludCBtdDc1MzBfcG9ydF9taXJyb3JfYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCisrc3RhdGljIGludCBtdDc1M3hfbWlycm9yX3BvcnRfZ2V0KHVuc2lnbmVkIGludCBpZCwgdTMyIHZhbCkKKyt7CisrCXJldHVybiAoaWQgPT0gSURfTVQ3NTMxKSA/IE1UNzUzMV9NSVJST1JfUE9SVF9HRVQodmFsKSA6CisrCQkJCSAgIE1JUlJPUl9QT1JUKHZhbCk7CisrfQorKworK3N0YXRpYyBpbnQgbXQ3NTN4X21pcnJvcl9wb3J0X3NldCh1bnNpZ25lZCBpbnQgaWQsIHUzMiB2YWwpCisreworKwlyZXR1cm4gKGlkID09IElEX01UNzUzMSkgPyBNVDc1MzFfTUlSUk9SX1BPUlRfU0VUKHZhbCkgOgorKwkJCQkgICBNSVJST1JfUE9SVCh2YWwpOworK30KKysKKytzdGF0aWMgaW50IG10NzUzeF9wb3J0X21pcnJvcl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKKyAJCQkJICBzdHJ1Y3QgZHNhX21hbGxfbWlycm9yX3RjX2VudHJ5ICptaXJyb3IsCisgCQkJCSAgYm9vbCBpbmdyZXNzKQorIHsKKyAJc3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtPnByaXY7CisrCWludCBtb25pdG9yX3BvcnQ7CisgCXUzMiB2YWw7CisgCisgCS8qIENoZWNrIGZvciBleGlzdGVudCBlbnRyeSAqLworIAlpZiAoKGluZ3Jlc3MgPyBwcml2LT5taXJyb3JfcnggOiBwcml2LT5taXJyb3JfdHgpICYgQklUKHBvcnQpKQorIAkJcmV0dXJuIC1FRVhJU1Q7CisgCistCXZhbCA9IG10NzUzMF9yZWFkKHByaXYsIE1UNzUzMF9NRkMpOworKwl2YWwgPSBtdDc1MzBfcmVhZChwcml2LCBNVDc1M1hfTUlSUk9SX1JFRyhwcml2LT5pZCkpOworIAorIAkvKiBNVDc1MzAgb25seSBzdXBwb3J0cyBvbmUgbW9uaXRvciBwb3J0ICovCistCWlmICh2YWwgJiBNSVJST1JfRU4gJiYgTUlSUk9SX1BPUlQodmFsKSAhPSBtaXJyb3ItPnRvX2xvY2FsX3BvcnQpCisrCW1vbml0b3JfcG9ydCA9IG10NzUzeF9taXJyb3JfcG9ydF9nZXQocHJpdi0+aWQsIHZhbCk7CisrCWlmICh2YWwgJiBNVDc1M1hfTUlSUk9SX0VOKHByaXYtPmlkKSAmJgorKwkgICAgbW9uaXRvcl9wb3J0ICE9IG1pcnJvci0+dG9fbG9jYWxfcG9ydCkKKyAJCXJldHVybiAtRUVYSVNUOworIAorLQl2YWwgfD0gTUlSUk9SX0VOOworLQl2YWwgJj0gfk1JUlJPUl9NQVNLOworLQl2YWwgfD0gbWlycm9yLT50b19sb2NhbF9wb3J0OworLQltdDc1MzBfd3JpdGUocHJpdiwgTVQ3NTMwX01GQywgdmFsKTsKKysJdmFsIHw9IE1UNzUzWF9NSVJST1JfRU4ocHJpdi0+aWQpOworKwl2YWwgJj0gfk1UNzUzWF9NSVJST1JfTUFTSyhwcml2LT5pZCk7CisrCXZhbCB8PSBtdDc1M3hfbWlycm9yX3BvcnRfc2V0KHByaXYtPmlkLCBtaXJyb3ItPnRvX2xvY2FsX3BvcnQpOworKwltdDc1MzBfd3JpdGUocHJpdiwgTVQ3NTNYX01JUlJPUl9SRUcocHJpdi0+aWQpLCB2YWwpOworIAorIAl2YWwgPSBtdDc1MzBfcmVhZChwcml2LCBNVDc1MzBfUENSX1AocG9ydCkpOworIAlpZiAoaW5ncmVzcykgeworQEAgLTExNTUsNyArMTQ5NCw3IEBAIHN0YXRpYyBpbnQgbXQ3NTMwX3BvcnRfbWlycm9yX2FkZChzdHJ1Y3QKKyAJcmV0dXJuIDA7CisgfQorIAorLXN0YXRpYyB2b2lkIG10NzUzMF9wb3J0X21pcnJvcl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKKytzdGF0aWMgdm9pZCBtdDc1M3hfcG9ydF9taXJyb3JfZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCisgCQkJCSAgIHN0cnVjdCBkc2FfbWFsbF9taXJyb3JfdGNfZW50cnkgKm1pcnJvcikKKyB7CisgCXN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLT5wcml2OworQEAgLTExNzIsOSArMTUxMSw5IEBAIHN0YXRpYyB2b2lkIG10NzUzMF9wb3J0X21pcnJvcl9kZWwoc3RydWMKKyAJbXQ3NTMwX3dyaXRlKHByaXYsIE1UNzUzMF9QQ1JfUChwb3J0KSwgdmFsKTsKKyAKKyAJaWYgKCFwcml2LT5taXJyb3JfcnggJiYgIXByaXYtPm1pcnJvcl90eCkgeworLQkJdmFsID0gbXQ3NTMwX3JlYWQocHJpdiwgTVQ3NTMwX01GQyk7CistCQl2YWwgJj0gfk1JUlJPUl9FTjsKKy0JCW10NzUzMF93cml0ZShwcml2LCBNVDc1MzBfTUZDLCB2YWwpOworKwkJdmFsID0gbXQ3NTMwX3JlYWQocHJpdiwgTVQ3NTNYX01JUlJPUl9SRUcocHJpdi0+aWQpKTsKKysJCXZhbCAmPSB+TVQ3NTNYX01JUlJPUl9FTihwcml2LT5pZCk7CisrCQltdDc1MzBfd3JpdGUocHJpdiwgTVQ3NTNYX01JUlJPUl9SRUcocHJpdi0+aWQpLCB2YWwpOworIAl9CisgfQorIAorQEAgLTEyODAsNyArMTYxOSw3IEBAIG10NzUzMF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCisgCQkJICAgUENSX01BVFJJWF9DTFIpOworIAorIAkJaWYgKGRzYV9pc19jcHVfcG9ydChkcywgaSkpCistCQkJbXQ3NTMwX2NwdV9wb3J0X2VuYWJsZShwcml2LCBpKTsKKysJCQltdDc1M3hfY3B1X3BvcnRfZW5hYmxlKGRzLCBpKTsKKyAJCWVsc2UKKyAJCQltdDc1MzBfcG9ydF9kaXNhYmxlKGRzLCBpKTsKKyAKK0BAIC0xMzM0LDYgKzE2NzMsMTE4IEBAIG10NzUzMF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCisgCXJldHVybiAwOworIH0KKyAKKytzdGF0aWMgaW50CisrbXQ3NTMxX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKKyt7CisrCXN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLT5wcml2OworKwlzdHJ1Y3QgbXQ3NTMwX2R1bW15X3BvbGwgcDsKKysJdTMyIHZhbCwgaWQ7CisrCWludCByZXQsIGk7CisrCisrCS8qIFJlc2V0IHdob2xlIGNoaXAgdGhyb3VnaCBncGlvIHBpbiBvciBtZW1vcnktbWFwcGVkIHJlZ2lzdGVycyBmb3IKKysJICogZGlmZmVyZW50IHR5cGUgb2YgaGFyZHdhcmUKKysJICovCisrCWlmIChwcml2LT5tY20pIHsKKysJCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KHByaXYtPnJzdGMpOworKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDExMDApOworKwkJcmVzZXRfY29udHJvbF9kZWFzc2VydChwcml2LT5yc3RjKTsKKysJfSBlbHNlIHsKKysJCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChwcml2LT5yZXNldCwgMCk7CisrCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMTEwMCk7CisrCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAocHJpdi0+cmVzZXQsIDEpOworKwl9CisrCisrCS8qIFdhaXRpbmcgZm9yIE1UNzUzMCBnb3QgdG8gc3RhYmxlICovCisrCUlOSVRfTVQ3NTMwX0RVTU1ZX1BPTEwoJnAsIHByaXYsIE1UNzUzMF9IV1RSQVApOworKwlyZXQgPSByZWFkeF9wb2xsX3RpbWVvdXQoX210NzUzMF9yZWFkLCAmcCwgdmFsLCB2YWwgIT0gMCwKKysJCQkJIDIwLCAxMDAwMDAwKTsKKysJaWYgKHJldCA8IDApIHsKKysJCWRldl9lcnIocHJpdi0+ZGV2LCAicmVzZXQgdGltZW91dFxuIik7CisrCQlyZXR1cm4gcmV0OworKwl9CisrCisrCWlkID0gbXQ3NTMwX3JlYWQocHJpdiwgTVQ3NTMxX0NSRVYpOworKwlpZCA+Pj0gQ0hJUF9OQU1FX1NISUZUOworKworKwlpZiAoaWQgIT0gTVQ3NTMxX0lEKSB7CisrCQlkZXZfZXJyKHByaXYtPmRldiwgImNoaXAgJXggY2FuJ3QgYmUgc3VwcG9ydGVkXG4iLCBpZCk7CisrCQlyZXR1cm4gLUVOT0RFVjsKKysJfQorKworKwkvKiBSZXNldCB0aGUgc3dpdGNoIHRocm91Z2ggaW50ZXJuYWwgcmVzZXQgKi8KKysJbXQ3NTMwX3dyaXRlKHByaXYsIE1UNzUzMF9TWVNfQ1RSTCwKKysJCSAgICAgU1lTX0NUUkxfUEhZX1JTVCB8IFNZU19DVFJMX1NXX1JTVCB8CisrCQkgICAgIFNZU19DVFJMX1JFR19SU1QpOworKworKwlpZiAobXQ3NTMxX2R1YWxfc2dtaWlfc3VwcG9ydGVkKHByaXYpKSB7CisrCQlwcml2LT5wNV9pbnRmX3NlbCA9IFA1X0lOVEZfU0VMX0dNQUM1X1NHTUlJOworKworKwkJLyogTGV0IGRzLT5zbGF2ZV9taWlfYnVzIGJlIGFibGUgdG8gYWNjZXNzIGV4dGVybmFsIHBoeS4gKi8KKysJCW10NzUzMF9ybXcocHJpdiwgTVQ3NTMxX0dQSU9fTU9ERTEsIE1UNzUzMV9HUElPMTFfUkdfUlhEMl9NQVNLLAorKwkJCSAgIE1UNzUzMV9FWFRfUF9NRENfMTEpOworKwkJbXQ3NTMwX3Jtdyhwcml2LCBNVDc1MzFfR1BJT19NT0RFMSwgTVQ3NTMxX0dQSU8xMl9SR19SWEQzX01BU0ssCisrCQkJICAgTVQ3NTMxX0VYVF9QX01ESU9fMTIpOworKwl9IGVsc2UgeworKwkJcHJpdi0+cDVfaW50Zl9zZWwgPSBQNV9JTlRGX1NFTF9HTUFDNTsKKysJfQorKwlkZXZfZGJnKGRzLT5kZXYsICJQNSBzdXBwb3J0ICVzIGludGVyZmFjZVxuIiwKKysJCXA1X2ludGZfbW9kZXMocHJpdi0+cDVfaW50Zl9zZWwpKTsKKysKKysJbXQ3NTMwX3Jtdyhwcml2LCBNVDc1MzFfR1BJT19NT0RFMCwgTVQ3NTMxX0dQSU8wX01BU0ssCisrCQkgICBNVDc1MzFfR1BJTzBfSU5URVJSVVBUKTsKKysKKysJLyogTGV0IHBoeWxpbmsgZGVjaWRlIHRoZSBpbnRlcmZhY2UgbGF0ZXIuICovCisrCXByaXYtPnA1X2ludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQTsKKysJcHJpdi0+cDZfaW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX05BOworKworKwkvKiBFbmFibGUgUEhZIGNvcmUgUExMLCBzaW5jZSBwaHlfZGV2aWNlIGhhcyBub3QgeWV0IGJlZW4gY3JlYXRlZAorKwkgKiBwcm92aWRlZCBmb3IgcGh5X1tyZWFkLHdyaXRlXV9tbWRfaW5kaXJlY3QgaXMgY2FsbGVkLCB3ZSBwcm92aWRlCisrCSAqIG91ciBvd24gbXQ3NTMxX2luZF9tbWRfcGh5X1tyZWFkLHdyaXRlXSB0byBjb21wbGV0ZSB0aGlzCisrCSAqIGZ1bmN0aW9uLgorKwkgKi8KKysJdmFsID0gbXQ3NTMxX2luZF9jNDVfcGh5X3JlYWQocHJpdiwgTVQ3NTNYX0NUUkxfUEhZX0FERFIsCisrCQkJCSAgICAgIE1ESU9fTU1EX1ZFTkQyLCBDT1JFX1BMTF9HUk9VUDQpOworKwl2YWwgfD0gTVQ3NTMxX1BIWV9QTExfQllQQVNTX01PREU7CisrCXZhbCAmPSB+TVQ3NTMxX1BIWV9QTExfT0ZGOworKwltdDc1MzFfaW5kX2M0NV9waHlfd3JpdGUocHJpdiwgTVQ3NTNYX0NUUkxfUEhZX0FERFIsIE1ESU9fTU1EX1ZFTkQyLAorKwkJCQkgQ09SRV9QTExfR1JPVVA0LCB2YWwpOworKworKwkvKiBCUERVIHRvIENQVSBwb3J0ICovCisrCW10NzUzMF9ybXcocHJpdiwgTVQ3NTMxX0NGQywgTVQ3NTMxX0NQVV9QTUFQX01BU0ssCisrCQkgICBCSVQoTVQ3NTMwX0NQVV9QT1JUKSk7CisrCW10NzUzMF9ybXcocHJpdiwgTVQ3NTNYX0JQQywgTVQ3NTNYX0JQRFVfUE9SVF9GV19NQVNLLAorKwkJICAgTVQ3NTNYX0JQRFVfQ1BVX09OTFkpOworKworKwkvKiBFbmFibGUgYW5kIHJlc2V0IE1JQiBjb3VudGVycyAqLworKwltdDc1MzBfbWliX3Jlc2V0KGRzKTsKKysKKysJZm9yIChpID0gMDsgaSA8IE1UNzUzMF9OVU1fUE9SVFM7IGkrKykgeworKwkJLyogRGlzYWJsZSBmb3J3YXJkaW5nIGJ5IGRlZmF1bHQgb24gYWxsIHBvcnRzICovCisrCQltdDc1MzBfcm13KHByaXYsIE1UNzUzMF9QQ1JfUChpKSwgUENSX01BVFJJWF9NQVNLLAorKwkJCSAgIFBDUl9NQVRSSVhfQ0xSKTsKKysKKysJCW10NzUzMF9zZXQocHJpdiwgTVQ3NTMxX0RCR19DTlQoaSksIE1UNzUzMV9ESVNfQ0xSKTsKKysKKysJCWlmIChkc2FfaXNfY3B1X3BvcnQoZHMsIGkpKQorKwkJCW10NzUzeF9jcHVfcG9ydF9lbmFibGUoZHMsIGkpOworKwkJZWxzZQorKwkJCW10NzUzMF9wb3J0X2Rpc2FibGUoZHMsIGkpOworKworKwkJLyogRW5hYmxlIGNvbnNpc3RlbnQgZWdyZXNzIHRhZyAqLworKwkJbXQ3NTMwX3Jtdyhwcml2LCBNVDc1MzBfUFZDX1AoaSksIFBWQ19FR19UQUdfTUFTSywKKysJCQkgICBQVkNfRUdfVEFHKE1UNzUzMF9WTEFOX0VHX0NPTlNJU1RFTlQpKTsKKysJfQorKworKwlkcy0+Y29uZmlndXJlX3ZsYW5fd2hpbGVfbm90X2ZpbHRlcmluZyA9IHRydWU7CisrCisrCS8qIEZsdXNoIHRoZSBGREIgdGFibGUgKi8KKysJcmV0ID0gbXQ3NTMwX2ZkYl9jbWQocHJpdiwgTVQ3NTMwX0ZEQl9GTFVTSCwgTlVMTCk7CisrCWlmIChyZXQgPCAwKQorKwkJcmV0dXJuIHJldDsKKysKKysJcmV0dXJuIDA7CisrfQorKworIHN0YXRpYyBib29sCisgbXQ3NTMwX3BoeV9tb2RlX3N1cHBvcnRlZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAorIAkJCSAgY29uc3Qgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpCitAQCAtMTM3Miw2ICsxODIzLDQ3IEBAIHVuc3VwcG9ydGVkOgorIAlyZXR1cm4gZmFsc2U7CisgfQorIAorK3N0YXRpYyBib29sIG10NzUzMV9pc19yZ21paV9wb3J0KHN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiwgdTMyIHBvcnQpCisreworKwlyZXR1cm4gKHBvcnQgPT0gNSkgJiYgKHByaXYtPnA1X2ludGZfc2VsICE9IFA1X0lOVEZfU0VMX0dNQUM1X1NHTUlJKTsKKyt9CisrCisrc3RhdGljIGJvb2wKKyttdDc1MzFfcGh5X3N1cHBvcnRlZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAorKwkJICAgICBjb25zdCBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSkKKyt7CisrCXN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLT5wcml2OworKworKwlzd2l0Y2ggKHBvcnQpIHsKKysJY2FzZSAwOiAvKiBJbnRlcm5hbCBwaHkgKi8KKysJY2FzZSAxOgorKwljYXNlIDI6CisrCWNhc2UgMzoKKysJY2FzZSA0OgorKwkJaWYgKHN0YXRlLT5pbnRlcmZhY2UgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkpCisrCQkJZ290byB1bnN1cHBvcnRlZDsKKysJCWJyZWFrOworKwljYXNlIDU6IC8qIDJuZCBjcHUgcG9ydCBzdXBwb3J0cyBlaXRoZXIgcmdtaWkgb3Igc2dtaWkvODAyM3ogKi8KKysJCWlmIChtdDc1MzFfaXNfcmdtaWlfcG9ydChwcml2LCBwb3J0KSkKKysJCQlyZXR1cm4gcGh5X2ludGVyZmFjZV9tb2RlX2lzX3JnbWlpKHN0YXRlLT5pbnRlcmZhY2UpOworKwkJZmFsbHRocm91Z2g7CisrCWNhc2UgNjogLyogMXN0IGNwdSBwb3J0IHN1cHBvcnRzIHNnbWlpLzgwMjN6IG9ubHkgKi8KKysJCWlmIChzdGF0ZS0+aW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSAmJgorKwkJICAgICFwaHlfaW50ZXJmYWNlX21vZGVfaXNfODAyM3ooc3RhdGUtPmludGVyZmFjZSkpCisrCQkJZ290byB1bnN1cHBvcnRlZDsKKysJCWJyZWFrOworKwlkZWZhdWx0OgorKwkJZGV2X2Vycihwcml2LT5kZXYsICIlczogdW5zdXBwb3J0ZWQgcG9ydDogJWlcbiIsIF9fZnVuY19fLAorKwkJCXBvcnQpOworKwkJZ290byB1bnN1cHBvcnRlZDsKKysJfQorKworKwlyZXR1cm4gdHJ1ZTsKKysKKyt1bnN1cHBvcnRlZDoKKysJcmV0dXJuIGZhbHNlOworK30KKysKKyBzdGF0aWMgYm9vbAorIG10NzUzeF9waHlfbW9kZV9zdXBwb3J0ZWQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKKyAJCQkgIGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKQorQEAgLTE0MDQsNiArMTg5NiwyMjcgQEAgbXQ3NTMwX21hY19jb25maWcoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLAorIAlyZXR1cm4gMDsKKyB9CisgCisrc3RhdGljIGludCBtdDc1MzFfcmdtaWlfc2V0dXAoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCB1MzIgcG9ydCwKKysJCQkgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLAorKwkJCSAgICAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCisreworKwl1MzIgdmFsOworKworKwlpZiAoIW10NzUzMV9pc19yZ21paV9wb3J0KHByaXYsIHBvcnQpKSB7CisrCQlkZXZfZXJyKHByaXYtPmRldiwgIlJHTUlJIG1vZGUgaXMgbm90IGF2YWlsYWJsZSBmb3IgcG9ydCAlZFxuIiwKKysJCQlwb3J0KTsKKysJCXJldHVybiAtRUlOVkFMOworKwl9CisrCisrCXZhbCA9IG10NzUzMF9yZWFkKHByaXYsIE1UNzUzMV9DTEtHRU5fQ1RSTCk7CisrCXZhbCB8PSBHUF9DTEtfRU47CisrCXZhbCAmPSB+R1BfTU9ERV9NQVNLOworKwl2YWwgfD0gR1BfTU9ERShNVDc1MzFfR1BfTU9ERV9SR01JSSk7CisrCXZhbCAmPSB+Q0xLX1NLRVdfSU5fTUFTSzsKKysJdmFsIHw9IENMS19TS0VXX0lOKE1UNzUzMV9DTEtfU0tFV19OT19DSEcpOworKwl2YWwgJj0gfkNMS19TS0VXX09VVF9NQVNLOworKwl2YWwgfD0gQ0xLX1NLRVdfT1VUKE1UNzUzMV9DTEtfU0tFV19OT19DSEcpOworKwl2YWwgfD0gVFhDTEtfTk9fUkVWRVJTRSB8IFJYQ0xLX05PX0RFTEFZOworKworKwkvKiBEbyBub3QgYWRqdXN0IHJnbWlpIGRlbGF5IHdoZW4gdmVuZG9yIHBoeSBkcml2ZXIgcHJlc2VudHMuICovCisrCWlmICghcGh5ZGV2IHx8IHBoeV9kcml2ZXJfaXNfZ2VucGh5KHBoeWRldikpIHsKKysJCXZhbCAmPSB+KFRYQ0xLX05PX1JFVkVSU0UgfCBSWENMS19OT19ERUxBWSk7CisrCQlzd2l0Y2ggKGludGVyZmFjZSkgeworKwkJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk6CisrCQkJdmFsIHw9IFRYQ0xLX05PX1JFVkVSU0U7CisrCQkJdmFsIHw9IFJYQ0xLX05PX0RFTEFZOworKwkJCWJyZWFrOworKwkJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfUlhJRDoKKysJCQl2YWwgfD0gVFhDTEtfTk9fUkVWRVJTRTsKKysJCQlicmVhazsKKysJCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJX1RYSUQ6CisrCQkJdmFsIHw9IFJYQ0xLX05PX0RFTEFZOworKwkJCWJyZWFrOworKwkJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfSUQ6CisrCQkJYnJlYWs7CisrCQlkZWZhdWx0OgorKwkJCXJldHVybiAtRUlOVkFMOworKwkJfQorKwl9CisrCW10NzUzMF93cml0ZShwcml2LCBNVDc1MzFfQ0xLR0VOX0NUUkwsIHZhbCk7CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgdm9pZCBtdDc1MzFfc2dtaWlfdmFsaWRhdGUoc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBpbnQgcG9ydCwKKysJCQkJICB1bnNpZ25lZCBsb25nICpzdXBwb3J0ZWQpCisreworKwkvKiBQb3J0NSBzdXBwb3J0cyBldGhpZXIgUkdNSUkgb3IgU0dNSUkuCisrCSAqIFBvcnQ2IHN1cHBvcnRzIFNHTUlJIG9ubHkuCisrCSAqLworKwlzd2l0Y2ggKHBvcnQpIHsKKysJY2FzZSA1OgorKwkJaWYgKG10NzUzMV9pc19yZ21paV9wb3J0KHByaXYsIHBvcnQpKQorKwkJCWJyZWFrOworKwkJZmFsbHRocm91Z2g7CisrCWNhc2UgNjoKKysJCXBoeWxpbmtfc2V0KHN1cHBvcnRlZCwgMTAwMGJhc2VYX0Z1bGwpOworKwkJcGh5bGlua19zZXQoc3VwcG9ydGVkLCAyNTAwYmFzZVhfRnVsbCk7CisrCQlwaHlsaW5rX3NldChzdXBwb3J0ZWQsIDI1MDBiYXNlVF9GdWxsKTsKKysJfQorK30KKysKKytzdGF0aWMgdm9pZAorK210NzUzMV9zZ21paV9saW5rX3VwX2ZvcmNlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCisrCQkJICAgdW5zaWduZWQgaW50IG1vZGUsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsCisrCQkJICAgaW50IHNwZWVkLCBpbnQgZHVwbGV4KQorK3sKKysJc3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtPnByaXY7CisrCXVuc2lnbmVkIGludCB2YWw7CisrCisrCS8qIEZvciBhZGp1c3Rpbmcgc3BlZWQgYW5kIGR1cGxleCBvZiBTR01JSSBmb3JjZSBtb2RlLiAqLworKwlpZiAoaW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSB8fAorKwkgICAgcGh5bGlua19hdXRvbmVnX2luYmFuZChtb2RlKSkKKysJCXJldHVybjsKKysKKysJLyogU0dNSUkgZm9yY2UgbW9kZSBzZXR0aW5nICovCisrCXZhbCA9IG10NzUzMF9yZWFkKHByaXYsIE1UNzUzMV9TR01JSV9NT0RFKHBvcnQpKTsKKysJdmFsICY9IH5NVDc1MzFfU0dNSUlfSUZfTU9ERV9NQVNLOworKworKwlzd2l0Y2ggKHNwZWVkKSB7CisrCWNhc2UgU1BFRURfMTA6CisrCQl2YWwgfD0gTVQ3NTMxX1NHTUlJX0ZPUkNFX1NQRUVEXzEwOworKwkJYnJlYWs7CisrCWNhc2UgU1BFRURfMTAwOgorKwkJdmFsIHw9IE1UNzUzMV9TR01JSV9GT1JDRV9TUEVFRF8xMDA7CisrCQlicmVhazsKKysJY2FzZSBTUEVFRF8xMDAwOgorKwkJdmFsIHw9IE1UNzUzMV9TR01JSV9GT1JDRV9TUEVFRF8xMDAwOworKwkJYnJlYWs7CisrCX0KKysKKysJLyogTVQ3NTMxIFNHTUlJIDFHIGZvcmNlIG1vZGUgY2FuIG9ubHkgd29yayBpbiBmdWxsIGR1cGxleCBtb2RlLAorKwkgKiBubyBtYXR0ZXIgTVQ3NTMxX1NHTUlJX0ZPUkNFX0hBTEZfRFVQTEVYIGlzIHNldCBvciBub3QuCisrCSAqLworKwlpZiAoKHNwZWVkID09IFNQRUVEXzEwIHx8IHNwZWVkID09IFNQRUVEXzEwMCkgJiYKKysJICAgIGR1cGxleCAhPSBEVVBMRVhfRlVMTCkKKysJCXZhbCB8PSBNVDc1MzFfU0dNSUlfRk9SQ0VfSEFMRl9EVVBMRVg7CisrCisrCW10NzUzMF93cml0ZShwcml2LCBNVDc1MzFfU0dNSUlfTU9ERShwb3J0KSwgdmFsKTsKKyt9CisrCisrc3RhdGljIGJvb2wgbXQ3NTN4X2lzX21hY19wb3J0KHUzMiBwb3J0KQorK3sKKysJcmV0dXJuIChwb3J0ID09IDUgfHwgcG9ydCA9PSA2KTsKKyt9CisrCisrc3RhdGljIGludCBtdDc1MzFfc2dtaWlfc2V0dXBfbW9kZV9mb3JjZShzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIHUzMiBwb3J0LAorKwkJCQkJIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpCisreworKwl1MzIgdmFsOworKworKwlpZiAoIW10NzUzeF9pc19tYWNfcG9ydChwb3J0KSkKKysJCXJldHVybiAtRUlOVkFMOworKworKwltdDc1MzBfc2V0KHByaXYsIE1UNzUzMV9RUEhZX1BXUl9TVEFURV9DVFJMKHBvcnQpLAorKwkJICAgTVQ3NTMxX1NHTUlJX1BIWUFfUFdEKTsKKysKKysJdmFsID0gbXQ3NTMwX3JlYWQocHJpdiwgTVQ3NTMxX1BIWUFfQ1RSTF9TSUdOQUwzKHBvcnQpKTsKKysJdmFsICY9IH5NVDc1MzFfUkdfVFBIWV9TUEVFRF9NQVNLOworKwkvKiBTZXR1cCAyLjUgdGltZXMgZmFzdGVyIGNsb2NrIGZvciAyLjVHYnBzIGRhdGEgc3BlZWRzIHdpdGggMTBCLzhCCisrCSAqIGVuY29kaW5nLgorKwkgKi8KKysJdmFsIHw9IChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWCkgPworKwkJTVQ3NTMxX1JHX1RQSFlfU1BFRURfM18xMjVHIDogTVQ3NTMxX1JHX1RQSFlfU1BFRURfMV8yNUc7CisrCW10NzUzMF93cml0ZShwcml2LCBNVDc1MzFfUEhZQV9DVFJMX1NJR05BTDMocG9ydCksIHZhbCk7CisrCisrCW10NzUzMF9jbGVhcihwcml2LCBNVDc1MzFfUENTX0NPTlRST0xfMShwb3J0KSwgTVQ3NTMxX1NHTUlJX0FOX0VOQUJMRSk7CisrCisrCS8qIE1UNzUzMSBTR01JSSAxRyBhbmQgMi41RyBmb3JjZSBtb2RlIGNhbiBvbmx5IHdvcmsgaW4gZnVsbCBkdXBsZXgKKysJICogbW9kZSwgbm8gbWF0dGVyIE1UNzUzMV9TR01JSV9GT1JDRV9IQUxGX0RVUExFWCBpcyBzZXQgb3Igbm90LgorKwkgKi8KKysJbXQ3NTMwX3Jtdyhwcml2LCBNVDc1MzFfU0dNSUlfTU9ERShwb3J0KSwKKysJCSAgIE1UNzUzMV9TR01JSV9JRl9NT0RFX01BU0sgfCBNVDc1MzFfU0dNSUlfUkVNT1RFX0ZBVUxUX0RJUywKKysJCSAgIE1UNzUzMV9TR01JSV9GT1JDRV9TUEVFRF8xMDAwKTsKKysKKysJbXQ3NTMwX3dyaXRlKHByaXYsIE1UNzUzMV9RUEhZX1BXUl9TVEFURV9DVFJMKHBvcnQpLCAwKTsKKysKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQgbXQ3NTMxX3NnbWlpX3NldHVwX21vZGVfYW4oc3RydWN0IG10NzUzMF9wcml2ICpwcml2LCBpbnQgcG9ydCwKKysJCQkJICAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSkKKyt7CisrCWlmICghbXQ3NTN4X2lzX21hY19wb3J0KHBvcnQpKQorKwkJcmV0dXJuIC1FSU5WQUw7CisrCisrCW10NzUzMF9zZXQocHJpdiwgTVQ3NTMxX1FQSFlfUFdSX1NUQVRFX0NUUkwocG9ydCksCisrCQkgICBNVDc1MzFfU0dNSUlfUEhZQV9QV0QpOworKworKwltdDc1MzBfcm13KHByaXYsIE1UNzUzMV9QSFlBX0NUUkxfU0lHTkFMMyhwb3J0KSwKKysJCSAgIE1UNzUzMV9SR19UUEhZX1NQRUVEX01BU0ssIE1UNzUzMV9SR19UUEhZX1NQRUVEXzFfMjVHKTsKKysKKysJbXQ3NTMwX3NldChwcml2LCBNVDc1MzFfU0dNSUlfTU9ERShwb3J0KSwKKysJCSAgIE1UNzUzMV9TR01JSV9SRU1PVEVfRkFVTFRfRElTIHwKKysJCSAgIE1UNzUzMV9TR01JSV9TUEVFRF9EVVBMRVhfQU4pOworKworKwltdDc1MzBfcm13KHByaXYsIE1UNzUzMV9QQ1NfU1BFRURfQUJJTElUWShwb3J0KSwKKysJCSAgIE1UNzUzMV9TR01JSV9UWF9DT05GSUdfTUFTSywgMSk7CisrCisrCW10NzUzMF9zZXQocHJpdiwgTVQ3NTMxX1BDU19DT05UUk9MXzEocG9ydCksIE1UNzUzMV9TR01JSV9BTl9FTkFCTEUpOworKworKwltdDc1MzBfc2V0KHByaXYsIE1UNzUzMV9QQ1NfQ09OVFJPTF8xKHBvcnQpLCBNVDc1MzFfU0dNSUlfQU5fUkVTVEFSVCk7CisrCisrCW10NzUzMF93cml0ZShwcml2LCBNVDc1MzFfUVBIWV9QV1JfU1RBVEVfQ1RSTChwb3J0KSwgMCk7CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgdm9pZCBtdDc1MzFfc2dtaWlfcmVzdGFydF9hbihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KQorK3sKKysJc3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtPnByaXY7CisrCXUzMiB2YWw7CisrCisrCS8qIE9ubHkgcmVzdGFydCBBTiB3aGVuIEFOIGlzIGVuYWJsZWQgKi8KKysJdmFsID0gbXQ3NTMwX3JlYWQocHJpdiwgTVQ3NTMxX1BDU19DT05UUk9MXzEocG9ydCkpOworKwlpZiAodmFsICYgTVQ3NTMxX1NHTUlJX0FOX0VOQUJMRSkgeworKwkJdmFsIHw9IE1UNzUzMV9TR01JSV9BTl9SRVNUQVJUOworKwkJbXQ3NTMwX3dyaXRlKHByaXYsIE1UNzUzMV9QQ1NfQ09OVFJPTF8xKHBvcnQpLCB2YWwpOworKwl9CisrfQorKworK3N0YXRpYyBpbnQKKyttdDc1MzFfbWFjX2NvbmZpZyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1bnNpZ25lZCBpbnQgbW9kZSwKKysJCSAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSkKKyt7CisrCXN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLT5wcml2OworKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OworKwljb25zdCBzdHJ1Y3QgZHNhX3BvcnQgKmRwOworKworKwlpZiAoIW10NzUzeF9pc19tYWNfcG9ydChwb3J0KSkgeworKwkJZGV2X2Vycihwcml2LT5kZXYsICJwb3J0ICVkIGlzIG5vdCBhIE1BQyBwb3J0XG4iLCBwb3J0KTsKKysJCXJldHVybiAtRUlOVkFMOworKwl9CisrCisrCXN3aXRjaCAoaW50ZXJmYWNlKSB7CisrCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOgorKwljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSV9JRDoKKysJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfUlhJRDoKKysJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfVFhJRDoKKysJCWRwID0gZHNhX3RvX3BvcnQoZHMsIHBvcnQpOworKwkJcGh5ZGV2ID0gZHAtPnNsYXZlLT5waHlkZXY7CisrCQlyZXR1cm4gbXQ3NTMxX3JnbWlpX3NldHVwKHByaXYsIHBvcnQsIGludGVyZmFjZSwgcGh5ZGV2KTsKKysJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6CisrCQlyZXR1cm4gbXQ3NTMxX3NnbWlpX3NldHVwX21vZGVfYW4ocHJpdiwgcG9ydCwgaW50ZXJmYWNlKTsKKysJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfTkE6CisrCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWDoKKysJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfMjUwMEJBU0VYOgorKwkJaWYgKHBoeWxpbmtfYXV0b25lZ19pbmJhbmQobW9kZSkpCisrCQkJcmV0dXJuIC1FSU5WQUw7CisrCisrCQlyZXR1cm4gbXQ3NTMxX3NnbWlpX3NldHVwX21vZGVfZm9yY2UocHJpdiwgcG9ydCwgaW50ZXJmYWNlKTsKKysJZGVmYXVsdDoKKysJCXJldHVybiAtRUlOVkFMOworKwl9CisrCisrCXJldHVybiAtRUlOVkFMOworK30KKysKKyBzdGF0aWMgaW50CisgbXQ3NTN4X21hY19jb25maWcoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdW5zaWduZWQgaW50IG1vZGUsCisgCQkgIGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKQorQEAgLTE0MzksNiArMjE1Miw4IEBAIG10NzUzeF9waHlsaW5rX21hY19jb25maWcoc3RydWN0IGRzYV9zd2kKKyAJCWlmIChtdDc1M3hfbWFjX2NvbmZpZyhkcywgcG9ydCwgbW9kZSwgc3RhdGUpIDwgMCkKKyAJCQlnb3RvIHVuc3VwcG9ydGVkOworIAorKwkJaWYgKHByaXYtPnA1X2ludGZfc2VsICE9IFA1X0RJU0FCTEVEKQorKwkJCXByaXYtPnA1X2ludGVyZmFjZSA9IHN0YXRlLT5pbnRlcmZhY2U7CisgCQlicmVhazsKKyAJY2FzZSA2OiAvKiAxc3QgY3B1IHBvcnQgKi8KKyAJCWlmIChwcml2LT5wNl9pbnRlcmZhY2UgPT0gc3RhdGUtPmludGVyZmFjZSkKK0BAIC0xNDU4LDcgKzIxNzMsOCBAQCB1bnN1cHBvcnRlZDoKKyAJCXJldHVybjsKKyAJfQorIAorLQlpZiAocGh5bGlua19hdXRvbmVnX2luYmFuZChtb2RlKSkgeworKwlpZiAocGh5bGlua19hdXRvbmVnX2luYmFuZChtb2RlKSAmJgorKwkgICAgc3RhdGUtPmludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpIHsKKyAJCWRldl9lcnIoZHMtPmRldiwgIiVzOiBpbi1iYW5kIG5lZ290aWF0aW9uIHVuc3VwcG9ydGVkXG4iLAorIAkJCV9fZnVuY19fKTsKKyAJCXJldHVybjsKK0BAIC0xNDY4LDcgKzIxODQsNyBAQCB1bnN1cHBvcnRlZDoKKyAJbWNyX25ldyA9IG1jcl9jdXI7CisgCW1jcl9uZXcgJj0gflBNQ1JfTElOS19TRVRUSU5HU19NQVNLOworIAltY3JfbmV3IHw9IFBNQ1JfSUZHX1hNSVQoMSkgfCBQTUNSX01BQ19NT0RFIHwgUE1DUl9CQUNLT0ZGX0VOIHwKKy0JCSAgIFBNQ1JfQkFDS1BSX0VOIHwgUE1DUl9GT1JDRV9NT0RFOworKwkJICAgUE1DUl9CQUNLUFJfRU4gfCBQTUNSX0ZPUkNFX01PREVfSUQocHJpdi0+aWQpOworIAorIAkvKiBBcmUgd2UgY29ubmVjdGVkIHRvIGV4dGVybmFsIHBoeSAqLworIAlpZiAocG9ydCA9PSA1ICYmIGRzYV9pc191c2VyX3BvcnQoZHMsIDUpKQorQEAgLTE0NzgsNyArMjE5NCwxOCBAQCB1bnN1cHBvcnRlZDoKKyAJCW10NzUzMF93cml0ZShwcml2LCBNVDc1MzBfUE1DUl9QKHBvcnQpLCBtY3JfbmV3KTsKKyB9CisgCistc3RhdGljIHZvaWQgbXQ3NTMwX3BoeWxpbmtfbWFjX2xpbmtfZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAorK3N0YXRpYyB2b2lkCisrbXQ3NTN4X3BoeWxpbmtfbWFjX2FuX3Jlc3RhcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCkKKyt7CisrCXN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLT5wcml2OworKworKwlpZiAoIXByaXYtPmluZm8tPm1hY19wY3NfYW5fcmVzdGFydCkKKysJCXJldHVybjsKKysKKysJcHJpdi0+aW5mby0+bWFjX3Bjc19hbl9yZXN0YXJ0KGRzLCBwb3J0KTsKKyt9CisrCisrc3RhdGljIHZvaWQgbXQ3NTN4X3BoeWxpbmtfbWFjX2xpbmtfZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAorIAkJCQkJIHVuc2lnbmVkIGludCBtb2RlLAorIAkJCQkJIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpCisgeworQEAgLTE0ODcsNyArMjIxNCwxOSBAQCBzdGF0aWMgdm9pZCBtdDc1MzBfcGh5bGlua19tYWNfbGlua19kb3duCisgCW10NzUzMF9jbGVhcihwcml2LCBNVDc1MzBfUE1DUl9QKHBvcnQpLCBQTUNSX0xJTktfU0VUVElOR1NfTUFTSyk7CisgfQorIAorLXN0YXRpYyB2b2lkIG10NzUzMF9waHlsaW5rX21hY19saW5rX3VwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCisrc3RhdGljIHZvaWQgbXQ3NTN4X21hY19wY3NfbGlua191cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAorKwkJCQkgICB1bnNpZ25lZCBpbnQgbW9kZSwgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSwKKysJCQkJICAgaW50IHNwZWVkLCBpbnQgZHVwbGV4KQorK3sKKysJc3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtPnByaXY7CisrCisrCWlmICghcHJpdi0+aW5mby0+bWFjX3Bjc19saW5rX3VwKQorKwkJcmV0dXJuOworKworKwlwcml2LT5pbmZvLT5tYWNfcGNzX2xpbmtfdXAoZHMsIHBvcnQsIG1vZGUsIGludGVyZmFjZSwgc3BlZWQsIGR1cGxleCk7CisrfQorKworK3N0YXRpYyB2b2lkIG10NzUzeF9waHlsaW5rX21hY19saW5rX3VwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCisgCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbW9kZSwKKyAJCQkJICAgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsCisgCQkJCSAgICAgICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAorQEAgLTE0OTcsMTggKzIyMzYsMjkgQEAgc3RhdGljIHZvaWQgbXQ3NTMwX3BoeWxpbmtfbWFjX2xpbmtfdXAocworIAlzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy0+cHJpdjsKKyAJdTMyIG1jcjsKKyAKKysJbXQ3NTN4X21hY19wY3NfbGlua191cChkcywgcG9ydCwgbW9kZSwgaW50ZXJmYWNlLCBzcGVlZCwgZHVwbGV4KTsKKysKKyAJbWNyID0gUE1DUl9SWF9FTiB8IFBNQ1JfVFhfRU4gfCBQTUNSX0ZPUkNFX0xOSzsKKyAKKysJLyogTVQ3NTN4IE1BQyB3b3JrcyBpbiAxRyBmdWxsIGR1cGxleCBtb2RlIGZvciBhbGwgdXAtY2xvY2tlZAorKwkgKiB2YXJpYW50cy4KKysJICovCisrCWlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1RSR01JSSB8fAorKwkgICAgKHBoeV9pbnRlcmZhY2VfbW9kZV9pc184MDIzeihpbnRlcmZhY2UpKSkgeworKwkJc3BlZWQgPSBTUEVFRF8xMDAwOworKwkJZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisrCX0KKysKKyAJc3dpdGNoIChzcGVlZCkgeworIAljYXNlIFNQRUVEXzEwMDA6CisgCQltY3IgfD0gUE1DUl9GT1JDRV9TUEVFRF8xMDAwOworIAkJaWYgKHByaXYtPmVlZV9lbmFibGUgJiBCSVQocG9ydCkpCistCQkJbWNyX25ldyB8PSBQTUNSX0ZPUkNFX0VFRTFHOworKwkJCW1jciB8PSBQTUNSX0ZPUkNFX0VFRTFHOworIAkJYnJlYWs7CisgCWNhc2UgU1BFRURfMTAwOgorIAkJbWNyIHw9IFBNQ1JfRk9SQ0VfU1BFRURfMTAwOworIAkJaWYgKHByaXYtPmVlZV9lbmFibGUgJiBCSVQocG9ydCkpCistCQkJbWNyX25ldyB8PSBQTUNSX0ZPUkNFX0VFRTEwMDsKKysJCQltY3IgfD0gUE1DUl9GT1JDRV9FRUUxMDA7CisgCQlicmVhazsKKyAJfQorIAlpZiAoZHVwbGV4ID09IERVUExFWF9GVUxMKSB7CitAQCAtMTUyMiw2ICsyMjcyLDQ1IEBAIHN0YXRpYyB2b2lkIG10NzUzMF9waHlsaW5rX21hY19saW5rX3VwKHMKKyAJbXQ3NTMwX3NldChwcml2LCBNVDc1MzBfUE1DUl9QKHBvcnQpLCBtY3IpOworIH0KKyAKKytzdGF0aWMgaW50CisrbXQ3NTMxX2NwdV9wb3J0X2NvbmZpZyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KQorK3sKKysJc3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtPnByaXY7CisrCXBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7CisrCWludCBzcGVlZDsKKysKKysJc3dpdGNoIChwb3J0KSB7CisrCWNhc2UgNToKKysJCWlmIChtdDc1MzFfaXNfcmdtaWlfcG9ydChwcml2LCBwb3J0KSkKKysJCQlpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUk7CisrCQllbHNlCisrCQkJaW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWDsKKysKKysJCXByaXYtPnA1X2ludGVyZmFjZSA9IGludGVyZmFjZTsKKysJCWJyZWFrOworKwljYXNlIDY6CisrCQlpbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfMjUwMEJBU0VYOworKworKwkJbXQ3NTMxX3BhZF9zZXR1cChkcywgaW50ZXJmYWNlKTsKKysKKysJCXByaXYtPnA2X2ludGVyZmFjZSA9IGludGVyZmFjZTsKKysJCWJyZWFrOworKwl9OworKworKwlpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8yNTAwQkFTRVgpCisrCQlzcGVlZCA9IFNQRUVEXzI1MDA7CisrCWVsc2UKKysJCXNwZWVkID0gU1BFRURfMTAwMDsKKysKKysJbXQ3NTMxX21hY19jb25maWcoZHMsIHBvcnQsIE1MT19BTl9GSVhFRCwgaW50ZXJmYWNlKTsKKysJbXQ3NTMwX3dyaXRlKHByaXYsIE1UNzUzMF9QTUNSX1AocG9ydCksCisrCQkgICAgIFBNQ1JfQ1BVX1BPUlRfU0VUVElORyhwcml2LT5pZCkpOworKwltdDc1M3hfcGh5bGlua19tYWNfbGlua191cChkcywgcG9ydCwgTUxPX0FOX0ZJWEVELCBpbnRlcmZhY2UsIE5VTEwsCisrCQkJCSAgIHNwZWVkLCBEVVBMRVhfRlVMTCwgdHJ1ZSwgdHJ1ZSk7CisrCisrCXJldHVybiAwOworK30KKysKKyBzdGF0aWMgdm9pZAorIG10NzUzMF9tYWNfcG9ydF92YWxpZGF0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAorIAkJCSB1bnNpZ25lZCBsb25nICpzdXBwb3J0ZWQpCitAQCAtMTUzMCw2ICsyMzE5LDE0IEBAIG10NzUzMF9tYWNfcG9ydF92YWxpZGF0ZShzdHJ1Y3QgZHNhX3N3aXQKKyAJCXBoeWxpbmtfc2V0KHN1cHBvcnRlZCwgMTAwMGJhc2VYX0Z1bGwpOworIH0KKyAKKytzdGF0aWMgdm9pZCBtdDc1MzFfbWFjX3BvcnRfdmFsaWRhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKKysJCQkJICAgICB1bnNpZ25lZCBsb25nICpzdXBwb3J0ZWQpCisreworKwlzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy0+cHJpdjsKKysKKysJbXQ3NTMxX3NnbWlpX3ZhbGlkYXRlKHByaXYsIHBvcnQsIHN1cHBvcnRlZCk7CisrfQorKworIHN0YXRpYyB2b2lkCisgbXQ3NTN4X3BoeWxpbmtfdmFsaWRhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKKyAJCQl1bnNpZ25lZCBsb25nICpzdXBwb3J0ZWQsCitAQCAtMTU0Niw3ICsyMzQzLDggQEAgbXQ3NTN4X3BoeWxpbmtfdmFsaWRhdGUoc3RydWN0IGRzYV9zd2l0YworIAorIAlwaHlsaW5rX3NldF9wb3J0X21vZGVzKG1hc2spOworIAorLQlpZiAoc3RhdGUtPmludGVyZmFjZSAhPSBQSFlfSU5URVJGQUNFX01PREVfVFJHTUlJKSB7CisrCWlmIChzdGF0ZS0+aW50ZXJmYWNlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9UUkdNSUkgfHwKKysJICAgICFwaHlfaW50ZXJmYWNlX21vZGVfaXNfODAyM3ooc3RhdGUtPmludGVyZmFjZSkpIHsKKyAJCXBoeWxpbmtfc2V0KG1hc2ssIDEwYmFzZVRfSGFsZik7CisgCQlwaHlsaW5rX3NldChtYXNrLCAxMGJhc2VUX0Z1bGwpOworIAkJcGh5bGlua19zZXQobWFzaywgMTAwYmFzZVRfSGFsZik7CitAQCAtMTU2NSw2ICsyMzYzLDExIEBAIG10NzUzeF9waHlsaW5rX3ZhbGlkYXRlKHN0cnVjdCBkc2Ffc3dpdGMKKyAKKyAJbGlua21vZGVfYW5kKHN1cHBvcnRlZCwgc3VwcG9ydGVkLCBtYXNrKTsKKyAJbGlua21vZGVfYW5kKHN0YXRlLT5hZHZlcnRpc2luZywgc3RhdGUtPmFkdmVydGlzaW5nLCBtYXNrKTsKKysKKysJLyogV2UgY2FuIG9ubHkgb3BlcmF0ZSBhdCAyNTAwQmFzZVggb3IgMTAwMEJhc2VYLiAgSWYgcmVxdWVzdGVkCisrCSAqIHRvIGFkdmVydGlzZSBib3RoLCBvbmx5IHJlcG9ydCBhZHZlcnRpc2luZyBhdCAyNTAwQmFzZVguCisrCSAqLworKwlwaHlsaW5rX2hlbHBlcl9iYXNleF9zcGVlZChzdGF0ZSk7CisgfQorIAorIHN0YXRpYyBpbnQKK0BAIC0xNjU1LDYgKzI0NTgsNjMgQEAgc3RhdGljIGludCBtdDc1MzBfc2V0X21hY19lZWUoc3RydWN0IGRzYQorIAlyZXR1cm4gMDsKKyB9CisgCisrI2lmZGVmIG5vdHlldAorK3N0YXRpYyBpbnQKKyttdDc1MzFfc2dtaWlfcGNzX2dldF9zdGF0ZV9hbihzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYsIGludCBwb3J0LAorKwkJCSAgICAgIHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKQorK3sKKysJdTMyIHN0YXR1cywgdmFsOworKwl1MTYgY29uZmlnX3JlZzsKKysKKysJc3RhdHVzID0gbXQ3NTMwX3JlYWQocHJpdiwgTVQ3NTMxX1BDU19DT05UUk9MXzEocG9ydCkpOworKwlzdGF0ZS0+bGluayA9ICEhKHN0YXR1cyAmIE1UNzUzMV9TR01JSV9MSU5LX1NUQVRVUyk7CisrCWlmIChzdGF0ZS0+aW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSAmJgorKwkgICAgKHN0YXR1cyAmIE1UNzUzMV9TR01JSV9BTl9FTkFCTEUpKSB7CisrCQl2YWwgPSBtdDc1MzBfcmVhZChwcml2LCBNVDc1MzFfUENTX1NQRUVEX0FCSUxJVFkocG9ydCkpOworKwkJY29uZmlnX3JlZyA9IHZhbCA+PiAxNjsKKysKKysJCXN3aXRjaCAoY29uZmlnX3JlZyAmIExQQV9TR01JSV9TUERfTUFTSykgeworKwkJY2FzZSBMUEFfU0dNSUlfMTAwMDoKKysJCQlzdGF0ZS0+c3BlZWQgPSBTUEVFRF8xMDAwOworKwkJCWJyZWFrOworKwkJY2FzZSBMUEFfU0dNSUlfMTAwOgorKwkJCXN0YXRlLT5zcGVlZCA9IFNQRUVEXzEwMDsKKysJCQlicmVhazsKKysJCWNhc2UgTFBBX1NHTUlJXzEwOgorKwkJCXN0YXRlLT5zcGVlZCA9IFNQRUVEXzEwOworKwkJCWJyZWFrOworKwkJZGVmYXVsdDoKKysJCQlkZXZfZXJyKHByaXYtPmRldiwgImludmFsaWQgc2dtaWkgUEhZIHNwZWVkXG4iKTsKKysJCQlzdGF0ZS0+bGluayA9IGZhbHNlOworKwkJCXJldHVybiAtRUlOVkFMOworKwkJfQorKworKwkJaWYgKGNvbmZpZ19yZWcgJiBMUEFfU0dNSUlfRlVMTF9EVVBMRVgpCisrCQkJc3RhdGUtPmR1cGxleCA9IERVUExFWF9GVUxMOworKwkJZWxzZQorKwkJCXN0YXRlLT5kdXBsZXggPSBEVVBMRVhfSEFMRjsKKysJfQorKworKwlyZXR1cm4gMDsKKyt9CisrI2VuZGlmCisrCisrc3RhdGljIGludAorK210NzUzMV9waHlsaW5rX21hY19saW5rX3N0YXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCisrCQkJICAgICAgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpCisreworKyNpZmRlZiBub3R5ZXQKKysJc3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtPnByaXY7CisrCisrCWlmIChzdGF0ZS0+aW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkKKysJCXJldHVybiBtdDc1MzFfc2dtaWlfcGNzX2dldF9zdGF0ZV9hbihwcml2LCBwb3J0LCBzdGF0ZSk7CisrI2Vsc2UKKysJcmV0dXJuIG10NzUzMF9waHlsaW5rX21hY19saW5rX3N0YXRlKGRzLCBwb3J0LCBzdGF0ZSk7CisrI2VuZGlmCisrCisrCXJldHVybiAtRU9QTk9UU1VQUDsKKyt9CisrCisgc3RhdGljIGludAorIG10NzUzeF9waHlsaW5rX21hY19saW5rX3N0YXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCisgCQkJICAgICAgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpCitAQCAtMTcwOCwxMyArMjU2OCwxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG10NzUzCisgCS5wb3J0X3ZsYW5fcHJlcGFyZQk9IG10NzUzMF9wb3J0X3ZsYW5fcHJlcGFyZSwKKyAJLnBvcnRfdmxhbl9hZGQJCT0gbXQ3NTMwX3BvcnRfdmxhbl9hZGQsCisgCS5wb3J0X3ZsYW5fZGVsCQk9IG10NzUzMF9wb3J0X3ZsYW5fZGVsLAorLQkucG9ydF9taXJyb3JfYWRkCT0gbXQ3NTMwX3BvcnRfbWlycm9yX2FkZCwKKy0JLnBvcnRfbWlycm9yX2RlbAk9IG10NzUzMF9wb3J0X21pcnJvcl9kZWwsCisrCS5wb3J0X21pcnJvcl9hZGQJPSBtdDc1M3hfcG9ydF9taXJyb3JfYWRkLAorKwkucG9ydF9taXJyb3JfZGVsCT0gbXQ3NTN4X3BvcnRfbWlycm9yX2RlbCwKKyAJLnBoeWxpbmtfdmFsaWRhdGUJPSBtdDc1M3hfcGh5bGlua192YWxpZGF0ZSwKKyAJLnBoeWxpbmtfbWFjX2xpbmtfc3RhdGUJPSBtdDc1M3hfcGh5bGlua19tYWNfbGlua19zdGF0ZSwKKyAJLnBoeWxpbmtfbWFjX2NvbmZpZwk9IG10NzUzeF9waHlsaW5rX21hY19jb25maWcsCistCS5waHlsaW5rX21hY19saW5rX2Rvd24JPSBtdDc1MzBfcGh5bGlua19tYWNfbGlua19kb3duLAorLQkucGh5bGlua19tYWNfbGlua191cAk9IG10NzUzMF9waHlsaW5rX21hY19saW5rX3VwLAorKwkucGh5bGlua19tYWNfYW5fcmVzdGFydAk9IG10NzUzeF9waHlsaW5rX21hY19hbl9yZXN0YXJ0LAorKwkucGh5bGlua19tYWNfbGlua19kb3duCT0gbXQ3NTN4X3BoeWxpbmtfbWFjX2xpbmtfZG93biwKKysJLnBoeWxpbmtfbWFjX2xpbmtfdXAJPSBtdDc1M3hfcGh5bGlua19tYWNfbGlua191cCwKKyAJLmdldF9tYWNfZWVlCQk9IG10NzUzMF9nZXRfbWFjX2VlZSwKKyAJLnNldF9tYWNfZWVlCQk9IG10NzUzMF9zZXRfbWFjX2VlZSwKKyB9OworQEAgLTE3NDIsMTEgKzI2MDMsMjYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtdDc1M3hfaW5mbyBtdDc1M3hfdAorIAkJLm1hY19wb3J0X2dldF9zdGF0ZSA9IG10NzUzMF9waHlsaW5rX21hY19saW5rX3N0YXRlLAorIAkJLm1hY19wb3J0X2NvbmZpZyA9IG10NzUzMF9tYWNfY29uZmlnLAorIAl9LAorKwlbSURfTVQ3NTMxXSA9IHsKKysJCS5pZCA9IElEX01UNzUzMSwKKysJCS5zd19zZXR1cCA9IG10NzUzMV9zZXR1cCwKKysJCS5waHlfcmVhZCA9IG10NzUzMV9pbmRfcGh5X3JlYWQsCisrCQkucGh5X3dyaXRlID0gbXQ3NTMxX2luZF9waHlfd3JpdGUsCisrCQkucGFkX3NldHVwID0gbXQ3NTMxX3BhZF9zZXR1cCwKKysJCS5jcHVfcG9ydF9jb25maWcgPSBtdDc1MzFfY3B1X3BvcnRfY29uZmlnLAorKwkJLnBoeV9tb2RlX3N1cHBvcnRlZCA9IG10NzUzMV9waHlfc3VwcG9ydGVkLAorKwkJLm1hY19wb3J0X3ZhbGlkYXRlID0gbXQ3NTMxX21hY19wb3J0X3ZhbGlkYXRlLAorKwkJLm1hY19wb3J0X2dldF9zdGF0ZSA9IG10NzUzMV9waHlsaW5rX21hY19saW5rX3N0YXRlLAorKwkJLm1hY19wb3J0X2NvbmZpZyA9IG10NzUzMV9tYWNfY29uZmlnLAorKwkJLm1hY19wY3NfYW5fcmVzdGFydCA9IG10NzUzMV9zZ21paV9yZXN0YXJ0X2FuLAorKwkJLm1hY19wY3NfbGlua191cCA9IG10NzUzMV9zZ21paV9saW5rX3VwX2ZvcmNlLAorKwl9LAorIH07CisgCisgc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXQ3NTMwX29mX21hdGNoW10gPSB7CisgCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NjIxIiwgLmRhdGEgPSAmbXQ3NTN4X3RhYmxlW0lEX01UNzYyMV0sIH0sCisgCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NTMwIiwgLmRhdGEgPSAmbXQ3NTN4X3RhYmxlW0lEX01UNzUzMF0sIH0sCisrCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NTMxIiwgLmRhdGEgPSAmbXQ3NTN4X3RhYmxlW0lEX01UNzUzMV0sIH0sCisgCXsgLyogc2VudGluZWwgKi8gfSwKKyB9OworIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG10NzUzMF9vZl9tYXRjaCk7CistLS0gYS9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmgKKysrKyBiL2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuaAorQEAgLTE0LDYgKzE0LDcgQEAKKyBlbnVtIG10NzUzeF9pZCB7CisgCUlEX01UNzUzMCA9IDAsCisgCUlEX01UNzYyMSA9IDEsCisrCUlEX01UNzUzMSA9IDIsCisgfTsKKyAKKyAjZGVmaW5lCU5VTV9UUkdNSUlfQ1RSTAkJCTUKK0BAIC00MSw2ICs0MiwzMyBAQCBlbnVtIG10NzUzeF9pZCB7CisgI2RlZmluZSAgTUlSUk9SX1BPUlQoeCkJCQkoKHgpICYgMHg3KQorICNkZWZpbmUgIE1JUlJPUl9NQVNLCQkJMHg3CisgCisrLyogUmVnaXN0ZXJzIGZvciBDUFUgZm9yd2FyZCBjb250cm9sICovCisrI2RlZmluZSBNVDc1MzFfQ0ZDCQkJMHg0CisrI2RlZmluZSAgTVQ3NTMxX01JUlJPUl9FTgkJQklUKDE5KQorKyNkZWZpbmUgIE1UNzUzMV9NSVJST1JfTUFTSwkJKE1JUlJPUl9NQVNLIDw8IDE2KQorKyNkZWZpbmUgIE1UNzUzMV9NSVJST1JfUE9SVF9HRVQoeCkJKCgoeCkgPj4gMTYpICYgTUlSUk9SX01BU0spCisrI2RlZmluZSAgTVQ3NTMxX01JUlJPUl9QT1JUX1NFVCh4KQkoKCh4KSAmIE1JUlJPUl9NQVNLKSA8PCAxNikKKysjZGVmaW5lICBNVDc1MzFfQ1BVX1BNQVBfTUFTSwkJR0VOTUFTSyg3LCAwKQorKworKyNkZWZpbmUgTVQ3NTNYX01JUlJPUl9SRUcoaWQpCQkoKChpZCkgPT0gSURfTVQ3NTMxKSA/IFwKKysJCQkJCSBNVDc1MzFfQ0ZDIDogTVQ3NTMwX01GQykKKysjZGVmaW5lIE1UNzUzWF9NSVJST1JfRU4oaWQpCQkoKChpZCkgPT0gSURfTVQ3NTMxKSA/IFwKKysJCQkJCSBNVDc1MzFfTUlSUk9SX0VOIDogTUlSUk9SX0VOKQorKyNkZWZpbmUgTVQ3NTNYX01JUlJPUl9NQVNLKGlkKQkJKCgoaWQpID09IElEX01UNzUzMSkgPyBcCisrCQkJCQkgTVQ3NTMxX01JUlJPUl9NQVNLIDogTUlSUk9SX01BU0spCisrCisrLyogUmVnaXN0ZXJzIGZvciBCUERVIGFuZCBQQUUgZnJhbWUgY29udHJvbCovCisrI2RlZmluZSBNVDc1M1hfQlBDCQkJMHgyNAorKyNkZWZpbmUgIE1UNzUzWF9CUERVX1BPUlRfRldfTUFTSwlHRU5NQVNLKDIsIDApCisrCisrZW51bSBtdDc1M3hfYnBkdV9wb3J0X2Z3IHsKKysJTVQ3NTNYX0JQRFVfRk9MTE9XX01GQywKKysJTVQ3NTNYX0JQRFVfQ1BVX0VYQ0xVREUgPSA0LAorKwlNVDc1M1hfQlBEVV9DUFVfSU5DTFVERSA9IDUsCisrCU1UNzUzWF9CUERVX0NQVV9PTkxZID0gNiwKKysJTVQ3NTNYX0JQRFVfRFJPUCA9IDcsCisrfTsKKysKKyAvKiBSZWdpc3RlcnMgZm9yIGFkZHJlc3MgdGFibGUgYWNjZXNzICovCisgI2RlZmluZSBNVDc1MzBfQVRBMQkJCTB4NzQKKyAjZGVmaW5lICBTVEFUSUNfRU1QCQkJMAorQEAgLTIyMiwxMCArMjUwLDMwIEBAIGVudW0gbXQ3NTMwX3ZsYW5fcG9ydF9hdHRyIHsKKyAjZGVmaW5lICBQTUNSX0ZPUkNFX0xOSwkJCUJJVCgwKQorICNkZWZpbmUgIFBNQ1JfU1BFRURfTUFTSwkJKFBNQ1JfRk9SQ0VfU1BFRURfMTAwIHwgXAorIAkJCQkJIFBNQ1JfRk9SQ0VfU1BFRURfMTAwMCkKKysjZGVmaW5lICBNVDc1MzFfRk9SQ0VfTE5LCQlCSVQoMzEpCisrI2RlZmluZSAgTVQ3NTMxX0ZPUkNFX1NQRAkJQklUKDMwKQorKyNkZWZpbmUgIE1UNzUzMV9GT1JDRV9EUFgJCUJJVCgyOSkKKysjZGVmaW5lICBNVDc1MzFfRk9SQ0VfUlhfRkMJCUJJVCgyOCkKKysjZGVmaW5lICBNVDc1MzFfRk9SQ0VfVFhfRkMJCUJJVCgyNykKKysjZGVmaW5lICBNVDc1MzFfRk9SQ0VfTU9ERQkJKE1UNzUzMV9GT1JDRV9MTksgfCBcCisrCQkJCQkgTVQ3NTMxX0ZPUkNFX1NQRCB8IFwKKysJCQkJCSBNVDc1MzFfRk9SQ0VfRFBYIHwgXAorKwkJCQkJIE1UNzUzMV9GT1JDRV9SWF9GQyB8IFwKKysJCQkJCSBNVDc1MzFfRk9SQ0VfVFhfRkMpCisrI2RlZmluZSAgUE1DUl9GT1JDRV9NT0RFX0lEKGlkKQkJKCgoaWQpID09IElEX01UNzUzMSkgPyBcCisrCQkJCQkgTVQ3NTMxX0ZPUkNFX01PREUgOiBcCisrCQkJCQkgUE1DUl9GT1JDRV9NT0RFKQorICNkZWZpbmUgIFBNQ1JfTElOS19TRVRUSU5HU19NQVNLCShQTUNSX1RYX0VOIHwgUE1DUl9GT1JDRV9TUEVFRF8xMDAwIHwgXAorIAkJCQkJIFBNQ1JfUlhfRU4gfCBQTUNSX0ZPUkNFX1NQRUVEXzEwMCB8IFwKKyAJCQkJCSBQTUNSX1RYX0ZDX0VOIHwgUE1DUl9SWF9GQ19FTiB8IFwKKyAJCQkJCSBQTUNSX0ZPUkNFX0ZEWCB8IFBNQ1JfRk9SQ0VfTE5LKQorKyNkZWZpbmUgIFBNQ1JfQ1BVX1BPUlRfU0VUVElORyhpZCkJKFBNQ1JfRk9SQ0VfTU9ERV9JRCgoaWQpKSB8IFwKKysJCQkJCSBQTUNSX0lGR19YTUlUKDEpIHwgUE1DUl9NQUNfTU9ERSB8IFwKKysJCQkJCSBQTUNSX0JBQ0tPRkZfRU4gfCBQTUNSX0JBQ0tQUl9FTiB8IFwKKysJCQkJCSBQTUNSX1RYX0VOIHwgUE1DUl9SWF9FTiB8IFwKKysJCQkJCSBQTUNSX1RYX0ZDX0VOIHwgUE1DUl9SWF9GQ19FTiB8IFwKKysJCQkJCSBQTUNSX0ZPUkNFX1NQRUVEXzEwMDAgfCBcCisrCQkJCQkgUE1DUl9GT1JDRV9GRFggfCBQTUNSX0ZPUkNFX0xOSykKKyAKKyAjZGVmaW5lIE1UNzUzMF9QTVNSX1AoeCkJCSgweDMwMDggKyAoeCkgKiAweDEwMCkKKyAjZGVmaW5lICBQTVNSX0VFRTFHCQkJQklUKDcpCitAQCAtMjQ1LDYgKzI5MywxMCBAQCBlbnVtIG10NzUzMF92bGFuX3BvcnRfYXR0ciB7CisgI2RlZmluZSAgTFBJX1RIUkVTSCh4KQkJCSgoeCAmIDB4RkZGKSA8PCA0KQorICNkZWZpbmUgIExQSV9NT0RFX0VOCQkJQklUKDApCisgCisrLyogUmVnaXN0ZXIgZm9yIHBvcnQgZGVidWcgY291bnQgKi8KKysjZGVmaW5lIE1UNzUzMV9EQkdfQ05UKHgpCQkoMHgzMDE4ICsgKHgpICogMHgxMDApCisrI2RlZmluZSAgTVQ3NTMxX0RJU19DTFIJCQlCSVQoMzEpCisrCisgLyogUmVnaXN0ZXIgZm9yIE1JQiAqLworICNkZWZpbmUgTVQ3NTMwX1BPUlRfTUlCX0NPVU5URVIoeCkJKDB4NDAwMCArICh4KSAqIDB4MTAwKQorICNkZWZpbmUgTVQ3NTMwX01JQl9DQ1IJCQkweDRmZTAKK0BAIC0yNjIsMTIgKzMxNCwxMTggQEAgZW51bSBtdDc1MzBfdmxhbl9wb3J0X2F0dHIgeworIAkJCQkJIENDUl9SWF9PQ1RfQ05UX0JBRCB8IFwKKyAJCQkJCSBDQ1JfVFhfT0NUX0NOVF9HT09EIHwgXAorIAkJCQkJIENDUl9UWF9PQ1RfQ05UX0JBRCkKKysKKysvKiBNVDc1MzEgU0dNSUkgcmVnaXN0ZXIgZ3JvdXAgKi8KKysjZGVmaW5lIE1UNzUzMV9TR01JSV9SRUdfQkFTRQkJMHg1MDAwCisrI2RlZmluZSBNVDc1MzFfU0dNSUlfUkVHKHAsIHIpCQkoTVQ3NTMxX1NHTUlJX1JFR19CQVNFICsgXAorKwkJCQkJKChwKSAtIDUpICogMHgxMDAwICsgKHIpKQorKworKy8qIFJlZ2lzdGVyIGZvclNHTUlJIFBDU19DT05UUk9MXzEgKi8KKysjZGVmaW5lIE1UNzUzMV9QQ1NfQ09OVFJPTF8xKHApCQlNVDc1MzFfU0dNSUlfUkVHKHAsIDB4MDApCisrI2RlZmluZSAgTVQ3NTMxX1NHTUlJX0xJTktfU1RBVFVTCUJJVCgxOCkKKysjZGVmaW5lICBNVDc1MzFfU0dNSUlfQU5fRU5BQkxFCQlCSVQoMTIpCisrI2RlZmluZSAgTVQ3NTMxX1NHTUlJX0FOX1JFU1RBUlQJQklUKDkpCisrCisrLyogUmVnaXN0ZXIgZm9yIFNHTUlJIFBDU19TUFBFRF9BQklMSVRZICovCisrI2RlZmluZSBNVDc1MzFfUENTX1NQRUVEX0FCSUxJVFkocCkJTVQ3NTMxX1NHTUlJX1JFRyhwLCAweDA4KQorKyNkZWZpbmUgIE1UNzUzMV9TR01JSV9UWF9DT05GSUdfTUFTSwlHRU5NQVNLKDE1LCAwKQorKyNkZWZpbmUgIE1UNzUzMV9TR01JSV9UWF9DT05GSUcJCUJJVCgwKQorKworKy8qIFJlZ2lzdGVyIGZvciBTR01JSV9NT0RFICovCisrI2RlZmluZSBNVDc1MzFfU0dNSUlfTU9ERShwKQkJTVQ3NTMxX1NHTUlJX1JFRyhwLCAweDIwKQorKyNkZWZpbmUgIE1UNzUzMV9TR01JSV9SRU1PVEVfRkFVTFRfRElTCUJJVCg4KQorKyNkZWZpbmUgIE1UNzUzMV9TR01JSV9JRl9NT0RFX01BU0sJR0VOTUFTSyg1LCAxKQorKyNkZWZpbmUgIE1UNzUzMV9TR01JSV9GT1JDRV9EVVBMRVgJQklUKDQpCisrI2RlZmluZSAgTVQ3NTMxX1NHTUlJX0ZPUkNFX1NQRUVEX01BU0sJR0VOTUFTSygzLCAyKQorKyNkZWZpbmUgIE1UNzUzMV9TR01JSV9GT1JDRV9TUEVFRF8xMDAwCUJJVCgzKQorKyNkZWZpbmUgIE1UNzUzMV9TR01JSV9GT1JDRV9TUEVFRF8xMDAJQklUKDIpCisrI2RlZmluZSAgTVQ3NTMxX1NHTUlJX0ZPUkNFX1NQRUVEXzEwCTAKKysjZGVmaW5lICBNVDc1MzFfU0dNSUlfU1BFRURfRFVQTEVYX0FOCUJJVCgxKQorKworK2VudW0gbXQ3NTMxX3NnbWlpX2ZvcmNlX2R1cGxleCB7CisrCU1UNzUzMV9TR01JSV9GT1JDRV9GVUxMX0RVUExFWCA9IDAsCisrCU1UNzUzMV9TR01JSV9GT1JDRV9IQUxGX0RVUExFWCA9IDB4MTAsCisrfTsKKysKKysvKiBGaWVsZHMgb2YgUVBIWV9QV1JfU1RBVEVfQ1RSTCAqLworKyNkZWZpbmUgTVQ3NTMxX1FQSFlfUFdSX1NUQVRFX0NUUkwocCkJTVQ3NTMxX1NHTUlJX1JFRyhwLCAweGU4KQorKyNkZWZpbmUgIE1UNzUzMV9TR01JSV9QSFlBX1BXRAkJQklUKDQpCisrCisrLyogVmFsdWVzIG9mIFNHTUlJIFNQRUVEICovCisrI2RlZmluZSBNVDc1MzFfUEhZQV9DVFJMX1NJR05BTDMocCkJTVQ3NTMxX1NHTUlJX1JFRyhwLCAweDEyOCkKKysjZGVmaW5lICBNVDc1MzFfUkdfVFBIWV9TUEVFRF9NQVNLCShCSVQoMikgfCBCSVQoMykpCisrI2RlZmluZSAgTVQ3NTMxX1JHX1RQSFlfU1BFRURfMV8yNUcJMHgwCisrI2RlZmluZSAgTVQ3NTMxX1JHX1RQSFlfU1BFRURfM18xMjVHCUJJVCgyKQorKworIC8qIFJlZ2lzdGVyIGZvciBzeXN0ZW0gcmVzZXQgKi8KKyAjZGVmaW5lIE1UNzUzMF9TWVNfQ1RSTAkJCTB4NzAwMAorICNkZWZpbmUgIFNZU19DVFJMX1BIWV9SU1QJCUJJVCgyKQorICNkZWZpbmUgIFNZU19DVFJMX1NXX1JTVAkJQklUKDEpCisgI2RlZmluZSAgU1lTX0NUUkxfUkVHX1JTVAkJQklUKDApCisgCisrLyogUmVnaXN0ZXIgZm9yIFBIWSBJbmRpcmVjdCBBY2Nlc3MgQ29udHJvbCAqLworKyNkZWZpbmUgTVQ3NTMxX1BIWV9JQUMJCQkweDcwMUMKKysjZGVmaW5lICBNVDc1MzFfUEhZX0FDU19TVAkJQklUKDMxKQorKyNkZWZpbmUgIE1UNzUzMV9NRElPX1JFR19BRERSX01BU0sJKDB4MWYgPDwgMjUpCisrI2RlZmluZSAgTVQ3NTMxX01ESU9fUEhZX0FERFJfTUFTSwkoMHgxZiA8PCAyMCkKKysjZGVmaW5lICBNVDc1MzFfTURJT19DTURfTUFTSwkJKDB4MyA8PCAxOCkKKysjZGVmaW5lICBNVDc1MzFfTURJT19TVF9NQVNLCQkoMHgzIDw8IDE2KQorKyNkZWZpbmUgIE1UNzUzMV9NRElPX1JXX0RBVEFfTUFTSwkoMHhmZmZmKQorKyNkZWZpbmUgIE1UNzUzMV9NRElPX1JFR19BRERSKHgpCSgoKHgpICYgMHgxZikgPDwgMjUpCisrI2RlZmluZSAgTVQ3NTMxX01ESU9fREVWX0FERFIoeCkJKCgoeCkgJiAweDFmKSA8PCAyNSkKKysjZGVmaW5lICBNVDc1MzFfTURJT19QSFlfQUREUih4KQkoKCh4KSAmIDB4MWYpIDw8IDIwKQorKyNkZWZpbmUgIE1UNzUzMV9NRElPX0NNRCh4KQkJKCgoeCkgJiAweDMpIDw8IDE4KQorKyNkZWZpbmUgIE1UNzUzMV9NRElPX1NUKHgpCQkoKCh4KSAmIDB4MykgPDwgMTYpCisrCisrZW51bSBtdDc1MzFfcGh5X2lhY19jbWQgeworKwlNVDc1MzFfTURJT19BRERSID0gMCwKKysJTVQ3NTMxX01ESU9fV1JJVEUgPSAxLAorKwlNVDc1MzFfTURJT19SRUFEID0gMiwKKysJTVQ3NTMxX01ESU9fUkVBRF9DTDQ1ID0gMywKKyt9OworKworKy8qIE1ESU9fU1Q6IE1ESU8gc3RhcnQgZmllbGQgKi8KKytlbnVtIG10NzUzMV9tZGlvX3N0IHsKKysJTVQ3NTMxX01ESU9fU1RfQ0w0NSA9IDAsCisrCU1UNzUzMV9NRElPX1NUX0NMMjIgPSAxLAorK307CisrCisrI2RlZmluZSAgTVQ3NTMxX01ESU9fQ0wyMl9SRUFECQkoTVQ3NTMxX01ESU9fU1QoTVQ3NTMxX01ESU9fU1RfQ0wyMikgfCBcCisrCQkJCQkgTVQ3NTMxX01ESU9fQ01EKE1UNzUzMV9NRElPX1JFQUQpKQorKyNkZWZpbmUgIE1UNzUzMV9NRElPX0NMMjJfV1JJVEUJCShNVDc1MzFfTURJT19TVChNVDc1MzFfTURJT19TVF9DTDIyKSB8IFwKKysJCQkJCSBNVDc1MzFfTURJT19DTUQoTVQ3NTMxX01ESU9fV1JJVEUpKQorKyNkZWZpbmUgIE1UNzUzMV9NRElPX0NMNDVfQUREUgkJKE1UNzUzMV9NRElPX1NUKE1UNzUzMV9NRElPX1NUX0NMNDUpIHwgXAorKwkJCQkJIE1UNzUzMV9NRElPX0NNRChNVDc1MzFfTURJT19BRERSKSkKKysjZGVmaW5lICBNVDc1MzFfTURJT19DTDQ1X1JFQUQJCShNVDc1MzFfTURJT19TVChNVDc1MzFfTURJT19TVF9DTDQ1KSB8IFwKKysJCQkJCSBNVDc1MzFfTURJT19DTUQoTVQ3NTMxX01ESU9fUkVBRCkpCisrI2RlZmluZSAgTVQ3NTMxX01ESU9fQ0w0NV9XUklURQkJKE1UNzUzMV9NRElPX1NUKE1UNzUzMV9NRElPX1NUX0NMNDUpIHwgXAorKwkJCQkJIE1UNzUzMV9NRElPX0NNRChNVDc1MzFfTURJT19XUklURSkpCisrCisrLyogUmVnaXN0ZXIgZm9yIFJHTUlJIGNsb2NrIHBoYXNlICovCisrI2RlZmluZSBNVDc1MzFfQ0xLR0VOX0NUUkwJCTB4NzUwMAorKyNkZWZpbmUgIENMS19TS0VXX09VVCh4KQkJKCgoeCkgJiAweDMpIDw8IDgpCisrI2RlZmluZSAgQ0xLX1NLRVdfT1VUX01BU0sJCUdFTk1BU0soOSwgOCkKKysjZGVmaW5lICBDTEtfU0tFV19JTih4KQkJCSgoKHgpICYgMHgzKSA8PCA2KQorKyNkZWZpbmUgIENMS19TS0VXX0lOX01BU0sJCUdFTk1BU0soNywgNikKKysjZGVmaW5lICBSWENMS19OT19ERUxBWQkJCUJJVCg1KQorKyNkZWZpbmUgIFRYQ0xLX05PX1JFVkVSU0UJCUJJVCg0KQorKyNkZWZpbmUgIEdQX01PREUoeCkJCQkoKCh4KSAmIDB4MykgPDwgMSkKKysjZGVmaW5lICBHUF9NT0RFX01BU0sJCQlHRU5NQVNLKDIsIDEpCisrI2RlZmluZSAgR1BfQ0xLX0VOCQkJQklUKDApCisrCisrZW51bSBtdDc1MzFfZ3BfbW9kZSB7CisrCU1UNzUzMV9HUF9NT0RFX1JHTUlJID0gMCwKKysJTVQ3NTMxX0dQX01PREVfTUlJID0gMSwKKysJTVQ3NTMxX0dQX01PREVfUkVWX01JSSA9IDIKKyt9OworKworK2VudW0gbXQ3NTMxX2Nsa19za2V3IHsKKysJTVQ3NTMxX0NMS19TS0VXX05PX0NIRyA9IDAsCisrCU1UNzUzMV9DTEtfU0tFV19ETFlfMTAwUFBTID0gMSwKKysJTVQ3NTMxX0NMS19TS0VXX0RMWV8yMDBQUFMgPSAyLAorKwlNVDc1MzFfQ0xLX1NLRVdfUkVWRVJTRSA9IDMsCisrfTsKKysKKyAvKiBSZWdpc3RlciBmb3IgaHcgdHJhcCBzdGF0dXMgKi8KKyAjZGVmaW5lIE1UNzUzMF9IV1RSQVAJCQkweDc4MDAKKyAjZGVmaW5lICBIV1RSQVBfWFRBTF9NQVNLCQkoQklUKDEwKSB8IEJJVCg5KSkKK0BAIC0yNzUsNiArNDMzLDE2IEBAIGVudW0gbXQ3NTMwX3ZsYW5fcG9ydF9hdHRyIHsKKyAjZGVmaW5lICBIV1RSQVBfWFRBTF80ME1IWgkJKEJJVCgxMCkpCisgI2RlZmluZSAgSFdUUkFQX1hUQUxfMjBNSFoJCShCSVQoOSkpCisgCisrI2RlZmluZSBNVDc1MzFfSFdUUkFQCQkJMHg3ODAwCisrI2RlZmluZSAgSFdUUkFQX1hUQUxfRlNFTF9NQVNLCQlCSVQoNykKKysjZGVmaW5lICBIV1RSQVBfWFRBTF9GU0VMXzI1TUhaCQlCSVQoNykKKysjZGVmaW5lICBIV1RSQVBfWFRBTF9GU0VMXzQwTUhaCQkwCisrLyogVW5pcXVlIGZpZWxkcyBvZiAoTSlIV1NUUkFQIGZvciBNVDc1MzEgKi8KKysjZGVmaW5lICBYVEFMX0ZTRUxfUwkJCTcKKysjZGVmaW5lICBYVEFMX0ZTRUxfTQkJCUJJVCg3KQorKyNkZWZpbmUgIFBIWV9FTgkJCQlCSVQoNikKKysjZGVmaW5lICBDSEdfU1RSQVAJCQlCSVQoOCkKKysKKyAvKiBSZWdpc3RlciBmb3IgaHcgdHJhcCBtb2RpZmljYXRpb24gKi8KKyAjZGVmaW5lIE1UNzUzMF9NSFdUUkFQCQkJMHg3ODA0CisgI2RlZmluZSAgTUhXVFJBUF9QSFkwX1NFTAkJQklUKDIwKQorQEAgLTI4OSwxNCArNDU3LDM3IEBAIGVudW0gbXQ3NTMwX3ZsYW5fcG9ydF9hdHRyIHsKKyAjZGVmaW5lIE1UNzUzMF9UT1BfU0lHX0NUUkwJCTB4NzgwOAorICNkZWZpbmUgIFRPUF9TSUdfQ1RSTF9OT1JNQUwJCShCSVQoMTcpIHwgQklUKDE2KSkKKyAKKysjZGVmaW5lIE1UNzUzMV9UT1BfU0lHX1NSCQkweDc4MGMKKysjZGVmaW5lICBQQURfRFVBTF9TR01JSV9FTgkJQklUKDEpCisrI2RlZmluZSAgUEFEX01DTV9TTUlfRU4JCQlCSVQoMCkKKysKKyAjZGVmaW5lIE1UNzUzMF9JT19EUlZfQ1IJCTB4NzgxMAorICNkZWZpbmUgIFA1X0lPX0NMS19EUlYoeCkJCSgoeCkgJiAweDMpCisgI2RlZmluZSAgUDVfSU9fREFUQV9EUlYoeCkJCSgoKHgpICYgMHgzKSA8PCA0KQorIAorKyNkZWZpbmUgTVQ3NTMxX0NISVBfUkVWCQkJMHg3ODFDCisrCisrI2RlZmluZSBNVDc1MzFfUExMR1BfRU4JCQkweDc4MjAKKysjZGVmaW5lICBFTl9DT1JFUExMCQkJQklUKDIpCisrI2RlZmluZSAgU1dfQ0xLU1cJCQlCSVQoMSkKKysjZGVmaW5lICBTV19QTExHUAkJCUJJVCgwKQorKworICNkZWZpbmUgTVQ3NTMwX1A2RUNSCQkJMHg3ODMwCisgI2RlZmluZSAgUDZfSU5URl9NT0RFX01BU0sJCTB4MworICNkZWZpbmUgIFA2X0lOVEZfTU9ERSh4KQkJKCh4KSAmIDB4MykKKyAKKysjZGVmaW5lIE1UNzUzMV9QTExHUF9DUjAJCTB4NzhhOAorKyNkZWZpbmUgIFJHX0NPUkVQTExfRU4JCQlCSVQoMjIpCisrI2RlZmluZSAgUkdfQ09SRVBMTF9QT1NESVZfUwkJMjMKKysjZGVmaW5lICBSR19DT1JFUExMX1BPU0RJVl9NCQkweDM4MDAwMDAKKysjZGVmaW5lICBSR19DT1JFUExMX1NETV9QQ1dfUwkJMQorKyNkZWZpbmUgIFJHX0NPUkVQTExfU0RNX1BDV19NCQkweDNmZmZmZQorKyNkZWZpbmUgIFJHX0NPUkVQTExfU0RNX1BDV19DSEcJCUJJVCgwKQorKworKy8qIFJlZ2lzdGVycyBmb3IgUkdNSUkgYW5kIFNHTUlJIFBMTCBjbG9jayAqLworKyNkZWZpbmUgTVQ3NTMxX0FOQV9QTExHUF9DUjIJCTB4NzhiMAorKyNkZWZpbmUgTVQ3NTMxX0FOQV9QTExHUF9DUjUJCTB4NzhiYworKworIC8qIFJlZ2lzdGVycyBmb3IgVFJHTUlJIG9uIHRoZSBib3RoIHNpZGUgKi8KKyAjZGVmaW5lIE1UNzUzMF9UUkdNSUlfUkNLX0NUUkwJCTB4N2EwMAorICNkZWZpbmUgIFJYX1JTVAkJCQlCSVQoMzEpCitAQCAtMzM1LDEwICs1MjYsMjUgQEAgZW51bSBtdDc1MzBfdmxhbl9wb3J0X2F0dHIgeworICNkZWZpbmUgTVQ3NTMwX1A1UkdNSUlUWENSCQkweDdiMDQKKyAjZGVmaW5lICBDU1JfUkdNSUlfVFhDX0NGRyh4KQkJKCh4KSAmIDB4MWYpCisgCisrLyogUmVnaXN0ZXJzIGZvciBHUElPIG1vZGUgKi8KKysjZGVmaW5lIE1UNzUzMV9HUElPX01PREUwCQkweDdjMGMKKysjZGVmaW5lICBNVDc1MzFfR1BJTzBfTUFTSwkJR0VOTUFTSygzLCAwKQorKyNkZWZpbmUgIE1UNzUzMV9HUElPMF9JTlRFUlJVUFQJCTEKKysKKysjZGVmaW5lIE1UNzUzMV9HUElPX01PREUxCQkweDdjMTAKKysjZGVmaW5lICBNVDc1MzFfR1BJTzExX1JHX1JYRDJfTUFTSwlHRU5NQVNLKDE1LCAxMikKKysjZGVmaW5lICBNVDc1MzFfRVhUX1BfTURDXzExCQkoMiA8PCAxMikKKysjZGVmaW5lICBNVDc1MzFfR1BJTzEyX1JHX1JYRDNfTUFTSwlHRU5NQVNLKDE5LCAxNikKKysjZGVmaW5lICBNVDc1MzFfRVhUX1BfTURJT18xMgkJKDIgPDwgMTYpCisrCisgI2RlZmluZSBNVDc1MzBfQ1JFVgkJCTB4N2ZmYworICNkZWZpbmUgIENISVBfTkFNRV9TSElGVAkJMTYKKyAjZGVmaW5lICBNVDc1MzBfSUQJCQkweDc1MzAKKyAKKysjZGVmaW5lIE1UNzUzMV9DUkVWCQkJMHg3ODFDCisrI2RlZmluZSAgQ0hJUF9SRVZfTQkJCTB4MGYKKysjZGVmaW5lICBNVDc1MzFfSUQJCQkweDc1MzEKKysKKyAvKiBSZWdpc3RlcnMgZm9yIGNvcmUgUExMIGFjY2VzcyB0aHJvdWdoIG1tZCBpbmRpcmVjdCAqLworICNkZWZpbmUgQ09SRV9QTExfR1JPVVAyCQkJMHg0MDEKKyAjZGVmaW5lICBSR19TWVNQTExfRU5fTk9STUFMCQlCSVQoMTUpCitAQCAtMzU1LDYgKzU2MSwxMCBAQCBlbnVtIG10NzUzMF92bGFuX3BvcnRfYXR0ciB7CisgI2RlZmluZSAgUkdfU1lTUExMX0REU0ZCS19FTgkJQklUKDEyKQorICNkZWZpbmUgIFJHX1NZU1BMTF9CSUFTX0VOCQlCSVQoMTEpCisgI2RlZmluZSAgUkdfU1lTUExMX0JJQVNfTFBGX0VOCQlCSVQoMTApCisrI2RlZmluZSAgTVQ3NTMxX1BIWV9QTExfT0ZGCQlCSVQoNSkKKysjZGVmaW5lICBNVDc1MzFfUEhZX1BMTF9CWVBBU1NfTU9ERQlCSVQoNCkKKysKKysjZGVmaW5lIE1UNzUzWF9DVFJMX1BIWV9BRERSCQkwCisgCisgI2RlZmluZSBDT1JFX1BMTF9HUk9VUDUJCQkweDQwNAorICNkZWZpbmUgIFJHX0xDRERTX1BDV19OQ1BPMSh4KQkJKCh4KSAmIDB4ZmZmZikKK0BAIC00MzMsNiArNjQzLDcgQEAgZW51bSBwNV9pbnRlcmZhY2Vfc2VsZWN0IHsKKyAJUDVfSU5URl9TRUxfUEhZX1AwLAorIAlQNV9JTlRGX1NFTF9QSFlfUDQsCisgCVA1X0lOVEZfU0VMX0dNQUM1LAorKwlQNV9JTlRGX1NFTF9HTUFDNV9TR01JSSwKKyB9OworIAorIHN0YXRpYyBjb25zdCBjaGFyICpwNV9pbnRmX21vZGVzKHVuc2lnbmVkIGludCBwNV9pbnRlcmZhY2UpCitAQCAtNDQ2LDYgKzY1Nyw4IEBAIHN0YXRpYyBjb25zdCBjaGFyICpwNV9pbnRmX21vZGVzKHVuc2lnbmUKKyAJCXJldHVybiAiUEhZIFA0IjsKKyAJY2FzZSBQNV9JTlRGX1NFTF9HTUFDNToKKyAJCXJldHVybiAiR01BQzUiOworKwljYXNlIFA1X0lOVEZfU0VMX0dNQUM1X1NHTUlJOgorKwkJcmV0dXJuICJHTUFDNV9TR01JSSI7CisgCWRlZmF1bHQ6CisgCQlyZXR1cm4gInVua25vd24iOworIAl9CitAQCAtNDY2LDYgKzY3OSwxMCBAQCBzdGF0aWMgY29uc3QgY2hhciAqcDVfaW50Zl9tb2Rlcyh1bnNpZ25lCisgICoJCQlNQUMgcG9ydAorICAqIEBtYWNfcG9ydF9jb25maWc6CUhvbGRpbmcgdGhlIHdheSBzZXR0aW5nIHVwIHRoZSBQSFkgYXR0cmlidXRlIHRvIGEKKyAgKgkJCWNlcnRhaW4gTUFDIHBvcnQKKysgKiBAbWFjX3Bjc19hbl9yZXN0YXJ0CUhvbGRpbmcgdGhlIHdheSByZXN0YXJ0aW5nIFBDUyBhdXRvbmVnb3RpYXRpb24gZm9yIGEKKysgKgkJCWNlcnRhaW4gTUFDIHBvcnQKKysgKiBAbWFjX3Bjc19saW5rX3VwOglIb2xkaW5nIHRoZSB3YXkgc2V0dGluZyB1cCB0aGUgUEhZIGF0dHJpYnV0ZSB0byB0aGUgcGNzCisrICoJCQlvZiB0aGUgY2VydGFpbiBNQUMgcG9ydAorICAqLworIHN0cnVjdCBtdDc1M3hfaW5mbyB7CisgCWVudW0gbXQ3NTN4X2lkIGlkOworQEAgLTQ3NCw2ICs2OTEsNyBAQCBzdHJ1Y3QgbXQ3NTN4X2luZm8geworIAlpbnQgKCpwaHlfcmVhZCkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHJlZ251bSk7CisgCWludCAoKnBoeV93cml0ZSkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbCk7CisgCWludCAoKnBhZF9zZXR1cCkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTsKKysJaW50ICgqY3B1X3BvcnRfY29uZmlnKShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KTsKKyAJYm9vbCAoKnBoeV9tb2RlX3N1cHBvcnRlZCkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKKyAJCQkJICAgY29uc3Qgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpOworIAl2b2lkICgqbWFjX3BvcnRfdmFsaWRhdGUpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCitAQCAtNDgzLDYgKzcwMSwxMCBAQCBzdHJ1Y3QgbXQ3NTN4X2luZm8geworIAlpbnQgKCptYWNfcG9ydF9jb25maWcpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCisgCQkJICAgICAgIHVuc2lnbmVkIGludCBtb2RlLAorIAkJCSAgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTsKKysJdm9pZCAoKm1hY19wY3NfYW5fcmVzdGFydCkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCk7CisrCXZvaWQgKCptYWNfcGNzX2xpbmtfdXApKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCisrCQkJCXVuc2lnbmVkIGludCBtb2RlLCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLAorKwkJCQlpbnQgc3BlZWQsIGludCBkdXBsZXgpOworIH07CisgCisgLyogc3RydWN0IG10NzUzMF9wcml2IC0JVGhpcyBpcyB0aGUgbWFpbiBkYXRhIHN0cnVjdHVyZSBmb3IgaG9sZGluZyB0aGUgc3RhdGUKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wNjA1LWFybTY0LWR0cy1tdDc2MjItYWRkLW10NzUzMS1kc2EtdG8tYmFuYW5hcGktYnBpLXI2NC1ib2FyZC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wNjA1LWFybTY0LWR0cy1tdDc2MjItYWRkLW10NzUzMS1kc2EtdG8tYmFuYW5hcGktYnBpLXI2NC1ib2FyZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzNmZTUyCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA2MDUtYXJtNjQtZHRzLW10NzYyMi1hZGQtbXQ3NTMxLWRzYS10by1iYW5hbmFwaS1icGktcjY0LWJvYXJkLnBhdGNoCkBAIC0wLDAgKzEsNzEgQEAKK0Zyb206IExhbmRlbiBDaGFvIDxsYW5kZW4uY2hhb0BtZWRpYXRlay5jb20+CitTdWJqZWN0OiBbUEFUQ0ggbmV0LW5leHQgNi82XSBhcm02NDogZHRzOiBtdDc2MjI6IGFkZCBtdDc1MzEgZHNhIHRvCisgYmFuYW5hcGktYnBpLXI2NCBib2FyZAorRGF0ZTogVHVlLCAxMCBEZWMgMjAxOSAxNjoxNDo0MiArMDgwMAorCitBZGQgbXQ3NTMxIGRzYSB0byBiYW5hbmFwaS1icGktcjY0IGJvYXJkIGZvciA1IGdpZ2EgRXRoZXJuZXQgcG9ydHMgc3VwcG9ydC4KKworU2lnbmVkLW9mZi1ieTogTGFuZGVuIENoYW8gPGxhbmRlbi5jaGFvQG1lZGlhdGVrLmNvbT4KKy0tLQorIC4uLi9kdHMvbWVkaWF0ZWsvbXQ3NjIyLWJhbmFuYXBpLWJwaS1yNjQuZHRzICB8IDUwICsrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNTAgaW5zZXJ0aW9ucygrKQorCistLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210NzYyMi1iYW5hbmFwaS1icGktcjY0LmR0cworKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc2MjItYmFuYW5hcGktYnBpLXI2NC5kdHMKK0BAIC0xNTAsNiArMTUwLDU2IEBACisgCW1kaW86IG1kaW8tYnVzIHsKKyAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworIAkJI3NpemUtY2VsbHMgPSA8MD47CisrCisrCQlzd2l0Y2hAMCB7CisrCQkJY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc1MzEiOworKwkJCXJlZyA9IDwwPjsKKysJCQlyZXNldC1ncGlvcyA9IDwmcGlvIDU0IDA+OworKworKwkJCXBvcnRzIHsKKysJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisrCQkJCSNzaXplLWNlbGxzID0gPDA+OworKworKwkJCQlwb3J0QDAgeworKwkJCQkJcmVnID0gPDA+OworKwkJCQkJbGFiZWwgPSAid2FuIjsKKysJCQkJfTsKKysKKysJCQkJcG9ydEAxIHsKKysJCQkJCXJlZyA9IDwxPjsKKysJCQkJCWxhYmVsID0gImxhbjAiOworKwkJCQl9OworKworKwkJCQlwb3J0QDIgeworKwkJCQkJcmVnID0gPDI+OworKwkJCQkJbGFiZWwgPSAibGFuMSI7CisrCQkJCX07CisrCisrCQkJCXBvcnRAMyB7CisrCQkJCQlyZWcgPSA8Mz47CisrCQkJCQlsYWJlbCA9ICJsYW4yIjsKKysJCQkJfTsKKysKKysJCQkJcG9ydEA0IHsKKysJCQkJCXJlZyA9IDw0PjsKKysJCQkJCWxhYmVsID0gImxhbjMiOworKwkJCQl9OworKworKwkJCQlwb3J0QDYgeworKwkJCQkJcmVnID0gPDY+OworKwkJCQkJbGFiZWwgPSAiY3B1IjsKKysJCQkJCWV0aGVybmV0ID0gPCZnbWFjMD47CisrCQkJCQlwaHktbW9kZSA9ICIyNTAwYmFzZS14IjsKKysKKysJCQkJCWZpeGVkLWxpbmsgeworKwkJCQkJCXNwZWVkID0gPDI1MDA+OworKwkJCQkJCWZ1bGwtZHVwbGV4OworKwkJCQkJCXBhdXNlOworKwkJCQkJfTsKKysJCQkJfTsKKysJCQl9OworKwkJfTsKKysKKyAJfTsKKyB9OworIApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA2NjYtYWRkLXNwaW1lbS1zdXBwb3J0LXRvLW10ay1zcGkucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDY2Ni1hZGQtc3BpbWVtLXN1cHBvcnQtdG8tbXRrLXNwaS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTBhYTI1Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA2NjYtYWRkLXNwaW1lbS1zdXBwb3J0LXRvLW10ay1zcGkucGF0Y2gKQEAgLTAsMCArMSw2MzYgQEAKK0Zyb20gNjc1YjQ3N2IyYTUwYjJmYjk3ZjM1OTQ0NzU2Zjg5NjQ0YmY3MDA5MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFFpaSBXYW5nIDxxaWkud2FuZ0BtZWRpYXRlay5jb20+CitEYXRlOiBUdWUsIDUgSmFuIDIwMjEgMTY6NDg6MzkgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gc3BpOiBtZWRpYXRlazogc3VwcG9ydCBJUE0gRGVzaWduCisKK1tEZXNjcmlwdGlvbl0KKzEuIHN1cHBvcnQgc2lnbGUgbW9kZTsKKzIuIHN1cHBvcnQgZHVhbC9xdWFkIG1vZGUgd2l0aCBzcGktbWVtIGZyYW1ld29yay4KKworU2lnbmVkLW9mZi1ieTogTGVpbGsgTGl1IDxsZWlsay5saXVAbWVkaWF0ZWsuY29tPgorUmV2aWV3ZWQtYnk6IFFpaSBXYW5nIDxxaWkud2FuZ0BtZWRpYXRlay5jb20+CistLS0KKyBkcml2ZXJzL3NwaS9zcGktbXQ2NXh4LmMgICAgICAgICAgICAgICAgIHwgMzk1ICsrKysrKysrKysrKysrKysrKysrKy0tCisgaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL3NwaS1tdDY1eHguaCB8ICAgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMzcwIGluc2VydGlvbnMoKyksIDI3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLW10NjV4eC5jIGIvZHJpdmVycy9zcGkvc3BpLW10NjV4eC5jCitpbmRleCA4YWNmMjRmN2MuLjkxODNjNjRlNCAxMDA2NDQKKy0tLSBhL2RyaXZlcnMvc3BpL3NwaS1tdDY1eHguYworKysrIGIvZHJpdmVycy9zcGkvc3BpLW10NjV4eC5jCitAQCAtMTcsNiArMTcsNyBAQAorICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL3NwaS1tdDY1eHguaD4KKyAjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisrI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGktbWVtLmg+CisgI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisgCisgI2RlZmluZSBTUElfQ0ZHMF9SRUcgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwCitAQCAtMzEsNiArMzIsNyBAQAorICNkZWZpbmUgU1BJX0NGRzJfUkVHICAgICAgICAgICAgICAgICAgICAgIDB4MDAyOAorICNkZWZpbmUgU1BJX1RYX1NSQ19SRUdfNjQgICAgICAgICAgICAgICAgIDB4MDAyYworICNkZWZpbmUgU1BJX1JYX0RTVF9SRUdfNjQgICAgICAgICAgICAgICAgIDB4MDAzMAorKyNkZWZpbmUgU1BJX0NGRzNfSVBNX1JFRyAgICAgICAgICAgICAgICAgIDB4MDA0MAorIAorICNkZWZpbmUgU1BJX0NGRzBfU0NLX0hJR0hfT0ZGU0VUICAgICAgICAgIDAKKyAjZGVmaW5lIFNQSV9DRkcwX1NDS19MT1dfT0ZGU0VUICAgICAgICAgICA4CitAQCAtNDIsMTMgKzQ0LDE1IEBACisgI2RlZmluZSBTUElfQ0ZHMV9DU19JRExFX09GRlNFVCAgICAgICAgICAgMAorICNkZWZpbmUgU1BJX0NGRzFfUEFDS0VUX0xPT1BfT0ZGU0VUICAgICAgIDgKKyAjZGVmaW5lIFNQSV9DRkcxX1BBQ0tFVF9MRU5HVEhfT0ZGU0VUICAgICAxNgorLSNkZWZpbmUgU1BJX0NGRzFfR0VUX1RJQ0tfRExZX09GRlNFVCAgICAgIDMwCisrI2RlZmluZSBTUElfQ0ZHMV9HRVRfVElDS0RMWV9PRkZTRVQgICAgICAgMjkKKyAKKysjZGVmaW5lIFNQSV9DRkcxX0dFVF9USUNLRExZX01BU0sJICBHRU5NQVNLKDMxLCAyOSkKKyAjZGVmaW5lIFNQSV9DRkcxX0NTX0lETEVfTUFTSyAgICAgICAgICAgICAweGZmCisgI2RlZmluZSBTUElfQ0ZHMV9QQUNLRVRfTE9PUF9NQVNLICAgICAgICAgMHhmZjAwCisgI2RlZmluZSBTUElfQ0ZHMV9QQUNLRVRfTEVOR1RIX01BU0sgICAgICAgMHgzZmYwMDAwCisrI2RlZmluZSBTUElfQ0ZHMV9JUE1fUEFDS0VUX0xFTkdUSF9NQVNLICAgR0VOTUFTSygzMSwgMTYpCisgI2RlZmluZSBTUElfQ0ZHMl9TQ0tfSElHSF9PRkZTRVQgICAgICAgICAgMAorLSNkZWZpbmUgU1BJX0NGRzJfU0NLX0xPV19PRkZTRVQgICAgICAgICAgIDE2CisrI2RlZmluZSBTUElfQ0ZHMl9TQ0tfTE9XX09GRlNFVAkJICAxNgorIAorICNkZWZpbmUgU1BJX0NNRF9BQ1QgICAgICAgICAgICAgICAgICBCSVQoMCkKKyAjZGVmaW5lIFNQSV9DTURfUkVTVU1FICAgICAgICAgICAgICAgQklUKDEpCitAQCAtNjcsNiArNzEsMjUgQEAKKyAjZGVmaW5lIFNQSV9DTURfVFhfRU5ESUFOICAgICAgICAgICAgQklUKDE1KQorICNkZWZpbmUgU1BJX0NNRF9GSU5JU0hfSUUgICAgICAgICAgICBCSVQoMTYpCisgI2RlZmluZSBTUElfQ01EX1BBVVNFX0lFICAgICAgICAgICAgIEJJVCgxNykKKysjZGVmaW5lIFNQSV9DTURfSVBNX05PTklETEVfTU9ERSAgICAgQklUKDE5KQorKyNkZWZpbmUgU1BJX0NNRF9JUE1fU1BJTV9MT09QICAgICAgICBCSVQoMjEpCisrI2RlZmluZSBTUElfQ01EX0lQTV9HRVRfVElDS0RMWV9PRkZTRVQgICAgMjIKKysKKysjZGVmaW5lIFNQSV9DTURfSVBNX0dFVF9USUNLRExZX01BU0sJR0VOTUFTSygyNCwgMjIpCisrCisrI2RlZmluZSBQSU5fTU9ERV9DRkcoeCkJKCh4KSAvIDIpCisrCisrI2RlZmluZSBTUElfQ0ZHM19JUE1fUElOX01PREVfT0ZGU0VUCQkwCisrI2RlZmluZSBTUElfQ0ZHM19JUE1fSEFMRl9EVVBMRVhfRElSCQlCSVQoMikKKysjZGVmaW5lIFNQSV9DRkczX0lQTV9IQUxGX0RVUExFWF9FTgkJQklUKDMpCisrI2RlZmluZSBTUElfQ0ZHM19JUE1fWE1PREVfRU4JCQlCSVQoNCkKKysjZGVmaW5lIFNQSV9DRkczX0lQTV9OT0RBVEFfRkxBRwkJQklUKDUpCisrI2RlZmluZSBTUElfQ0ZHM19JUE1fQ01EX0JZVEVMRU5fT0ZGU0VUCQk4CisrI2RlZmluZSBTUElfQ0ZHM19JUE1fQUREUl9CWVRFTEVOX09GRlNFVAkxMgorKworKyNkZWZpbmUgU1BJX0NGRzNfSVBNX0NNRF9QSU5fTU9ERV9NQVNLCQlHRU5NQVNLKDEsIDApCisrI2RlZmluZSBTUElfQ0ZHM19JUE1fQ01EX0JZVEVMRU5fTUFTSwkJR0VOTUFTSygxMSwgOCkKKysjZGVmaW5lIFNQSV9DRkczX0lQTV9BRERSX0JZVEVMRU5fTUFTSwkJR0VOTUFTSygxNSwgMTIpCisgCisgI2RlZmluZSBNVDgxNzNfU1BJX01BWF9QQURfU0VMIDMKKyAKK0BAIC03Nyw2ICsxMDAsOSBAQAorIAorICNkZWZpbmUgTVRLX1NQSV9NQVhfRklGT19TSVpFIDMyVQorICNkZWZpbmUgTVRLX1NQSV9QQUNLRVRfU0laRSAxMDI0CisrI2RlZmluZSBNVEtfU1BJX0lQTV9QQUNLRVRfU0laRSBTWl82NEsKKysjZGVmaW5lIE1US19TUElfSVBNX1BBQ0tFVF9MT09QIFNaXzI1NgorKworICNkZWZpbmUgTVRLX1NQSV8zMkJJVFNfTUFTSyAgKDB4ZmZmZmZmZmYpCisgCisgI2RlZmluZSBETUFfQUREUl9FWFRfQklUUyAoMzYpCitAQCAtOTAsNiArMTE2LDkgQEAgc3RydWN0IG10a19zcGlfY29tcGF0aWJsZSB7CisgCWJvb2wgZW5oYW5jZV90aW1pbmc7CisgCS8qIHNvbWUgSUMgc3VwcG9ydCBETUEgYWRkciBleHRlbnNpb24gKi8KKyAJYm9vbCBkbWFfZXh0OworKwkvKiB0aGUgSVBNIElQIGRlc2lnbiBpbXByb3ZlIHNvbWUgZmVhdHVyZSwgYW5kIHN1cHBvcnQgZHVhbC9xdWFkIG1vZGUgKi8KKysJYm9vbCBpcG1fZGVzaWduOworKwlib29sIHN1cHBvcnRfcXVhZDsKKyB9OworIAorIHN0cnVjdCBtdGtfc3BpIHsKK0BAIC0xMDQsNiArMTMzLDEyIEBAIHN0cnVjdCBtdGtfc3BpIHsKKyAJc3RydWN0IHNjYXR0ZXJsaXN0ICp0eF9zZ2wsICpyeF9zZ2w7CisgCXUzMiB0eF9zZ2xfbGVuLCByeF9zZ2xfbGVuOworIAljb25zdCBzdHJ1Y3QgbXRrX3NwaV9jb21wYXRpYmxlICpkZXZfY29tcDsKKysKKysJc3RydWN0IGNvbXBsZXRpb24gc3BpbWVtX2RvbmU7CisrCWJvb2wgdXNlX3NwaW1lbTsKKysJc3RydWN0IGRldmljZSAqZGV2OworKwlkbWFfYWRkcl90IHR4X2RtYTsKKysJZG1hX2FkZHJfdCByeF9kbWE7CisgfTsKKyAKKyBzdGF0aWMgY29uc3Qgc3RydWN0IG10a19zcGlfY29tcGF0aWJsZSBtdGtfY29tbW9uX2NvbXBhdDsKK0BAIC0xMTIsNiArMTQ3LDE0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX3NwaV9jb21wYXRpYmxlIG10MjcxMl9jb21wYXQgPSB7CisgCS5tdXN0X3R4ID0gdHJ1ZSwKKyB9OworIAorK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX3NwaV9jb21wYXRpYmxlIGlwbV9jb21wYXQgPSB7CisrCS5tdXN0X3R4ID0gdHJ1ZSwKKysJLmVuaGFuY2VfdGltaW5nID0gdHJ1ZSwKKysJLmRtYV9leHQgPSB0cnVlLAorKwkuaXBtX2Rlc2lnbiA9IHRydWUsCisrCS5zdXBwb3J0X3F1YWQgPSB0cnVlLAorK307CisrCisgc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfc3BpX2NvbXBhdGlibGUgbXQ2NzY1X2NvbXBhdCA9IHsKKyAJLm5lZWRfcGFkX3NlbCA9IHRydWUsCisgCS5tdXN0X3R4ID0gdHJ1ZSwKK0BAIC0xNDAsMTEgKzE4MywxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG10a19zcGlfY29tcGF0aWJsZSBtdDgxODNfY29tcGF0ID0geworICAqIHN1cHBsaWVzIGl0LgorICAqLworIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2NoaXBfY29uZmlnIG10a19kZWZhdWx0X2NoaXBfaW5mbyA9IHsKKy0JLmNzX3BvbCA9IDAsCisgCS5zYW1wbGVfc2VsID0gMCwKKysJLmdldF90aWNrX2RseSA9IDAsCisgfTsKKyAKKyBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfc3BpX29mX21hdGNoW10gPSB7CisrCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssaXBtLXNwaSIsCisrCQkuZGF0YSA9ICh2b2lkICopJmlwbV9jb21wYXQsCisrCX0sCisgCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQyNzAxLXNwaSIsCisgCQkuZGF0YSA9ICh2b2lkICopJm10a19jb21tb25fY29tcGF0LAorIAl9LAorQEAgLTE5MCwxOSArMjM2LDQ4IEBAIHN0YXRpYyB2b2lkIG10a19zcGlfcmVzZXQoc3RydWN0IG10a19zcGkgKm1kYXRhKQorIAl3cml0ZWwocmVnX3ZhbCwgbWRhdGEtPmJhc2UgKyBTUElfQ01EX1JFRyk7CisgfQorIAorLXN0YXRpYyBpbnQgbXRrX3NwaV9wcmVwYXJlX21lc3NhZ2Uoc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlciwKKy0JCQkJICAgc3RydWN0IHNwaV9tZXNzYWdlICptc2cpCisrc3RhdGljIGludCBtdGtfc3BpX2h3X2luaXQoc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlciwKKysJCQkgICBzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQorIHsKKyAJdTE2IGNwaGEsIGNwb2w7CisgCXUzMiByZWdfdmFsOworLQlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gbXNnLT5zcGk7CisgCXN0cnVjdCBtdGtfY2hpcF9jb25maWcgKmNoaXBfY29uZmlnID0gc3BpLT5jb250cm9sbGVyX2RhdGE7CisgCXN0cnVjdCBtdGtfc3BpICptZGF0YSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKyAKKyAJY3BoYSA9IHNwaS0+bW9kZSAmIFNQSV9DUEhBID8gMSA6IDA7CisgCWNwb2wgPSBzcGktPm1vZGUgJiBTUElfQ1BPTCA/IDEgOiAwOworIAorKwlpZiAobWRhdGEtPmRldl9jb21wLT5lbmhhbmNlX3RpbWluZykgeworKwkJaWYgKG1kYXRhLT5kZXZfY29tcC0+aXBtX2Rlc2lnbikgeworKwkJCS8qIENGRzMgcmVnIG9ubHkgdXNlZCBmb3Igc3BpLW1lbSwKKysJCQkgKiBoZXJlIHdyaXRlIHRvIGRlZmF1bHQgdmFsdWUKKysJCQkgKi8KKysJCQl3cml0ZWwoMHgwLCBtZGF0YS0+YmFzZSArIFNQSV9DRkczX0lQTV9SRUcpOworKworKwkJCXJlZ192YWwgPSByZWFkbChtZGF0YS0+YmFzZSArIFNQSV9DTURfUkVHKTsKKysJCQlyZWdfdmFsICY9IH5TUElfQ01EX0lQTV9HRVRfVElDS0RMWV9NQVNLOworKwkJCXJlZ192YWwgfD0gY2hpcF9jb25maWctPmdldF90aWNrX2RseQorKwkJCQkgICA8PCBTUElfQ01EX0lQTV9HRVRfVElDS0RMWV9PRkZTRVQ7CisrCQkJd3JpdGVsKHJlZ192YWwsIG1kYXRhLT5iYXNlICsgU1BJX0NNRF9SRUcpOworKwkJfSBlbHNlIHsKKysJCQlyZWdfdmFsID0gcmVhZGwobWRhdGEtPmJhc2UgKyBTUElfQ0ZHMV9SRUcpOworKwkJCXJlZ192YWwgJj0gflNQSV9DRkcxX0dFVF9USUNLRExZX01BU0s7CisrCQkJcmVnX3ZhbCB8PSBjaGlwX2NvbmZpZy0+Z2V0X3RpY2tfZGx5CisrCQkJCSAgIDw8IFNQSV9DRkcxX0dFVF9USUNLRExZX09GRlNFVDsKKysJCQl3cml0ZWwocmVnX3ZhbCwgbWRhdGEtPmJhc2UgKyBTUElfQ0ZHMV9SRUcpOworKwkJfQorKwl9CisrCisgCXJlZ192YWwgPSByZWFkbChtZGF0YS0+YmFzZSArIFNQSV9DTURfUkVHKTsKKysJaWYgKG1kYXRhLT5kZXZfY29tcC0+aXBtX2Rlc2lnbikgeworKwkJLyogU1BJIHRyYW5zZmVyIHdpdGhvdXQgaWRsZSB0aW1lIHVudGlsIHBhY2tldCBsZW5ndGggZG9uZSAqLworKwkJcmVnX3ZhbCB8PSBTUElfQ01EX0lQTV9OT05JRExFX01PREU7CisrCQlpZiAoc3BpLT5tb2RlICYgU1BJX0xPT1ApCisrCQkJcmVnX3ZhbCB8PSBTUElfQ01EX0lQTV9TUElNX0xPT1A7CisrCQllbHNlCisrCQkJcmVnX3ZhbCAmPSB+U1BJX0NNRF9JUE1fU1BJTV9MT09QOworKwl9CisrCisgCWlmIChjcGhhKQorIAkJcmVnX3ZhbCB8PSBTUElfQ01EX0NQSEE7CisgCWVsc2UKK0BAIC0yMzEsMTAgKzMwNiwxMiBAQCBzdGF0aWMgaW50IG10a19zcGlfcHJlcGFyZV9tZXNzYWdlKHN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIsCisgI2VuZGlmCisgCisgCWlmIChtZGF0YS0+ZGV2X2NvbXAtPmVuaGFuY2VfdGltaW5nKSB7CistCQlpZiAoY2hpcF9jb25maWctPmNzX3BvbCkKKysJCS8qIHNldCBDUyBwb2xhcml0eSAqLworKwkJaWYgKHNwaS0+bW9kZSAmIFNQSV9DU19ISUdIKQorIAkJCXJlZ192YWwgfD0gU1BJX0NNRF9DU19QT0w7CisgCQllbHNlCisgCQkJcmVnX3ZhbCAmPSB+U1BJX0NNRF9DU19QT0w7CisrCisgCQlpZiAoY2hpcF9jb25maWctPnNhbXBsZV9zZWwpCisgCQkJcmVnX3ZhbCB8PSBTUElfQ01EX1NBTVBMRV9TRUw7CisgCQllbHNlCitAQCAtMjYwLDExICszMzcsMjAgQEAgc3RhdGljIGludCBtdGtfc3BpX3ByZXBhcmVfbWVzc2FnZShzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyLAorIAlyZXR1cm4gMDsKKyB9CisgCisrc3RhdGljIGludCBtdGtfc3BpX3ByZXBhcmVfbWVzc2FnZShzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyLAorKwkJCQkgICBzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZykKKyt7CisrCXJldHVybiBtdGtfc3BpX2h3X2luaXQobWFzdGVyLCBtc2ctPnNwaSk7CisrfQorKworIHN0YXRpYyB2b2lkIG10a19zcGlfc2V0X2NzKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGJvb2wgZW5hYmxlKQorIHsKKyAJdTMyIHJlZ192YWw7CisgCXN0cnVjdCBtdGtfc3BpICptZGF0YSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworIAorKwlpZiAoc3BpLT5tb2RlICYgU1BJX0NTX0hJR0gpCisrCQllbmFibGUgPSAhZW5hYmxlOworKworIAlyZWdfdmFsID0gcmVhZGwobWRhdGEtPmJhc2UgKyBTUElfQ01EX1JFRyk7CisgCWlmICghZW5hYmxlKSB7CisgCQlyZWdfdmFsIHw9IFNQSV9DTURfUEFVU0VfRU47CitAQCAtMjc4LDE0ICszNjQsMTQgQEAgc3RhdGljIHZvaWQgbXRrX3NwaV9zZXRfY3Moc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgYm9vbCBlbmFibGUpCisgfQorIAorIHN0YXRpYyB2b2lkIG10a19zcGlfcHJlcGFyZV90cmFuc2ZlcihzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyLAorLQkJCQkgICAgIHN0cnVjdCBzcGlfdHJhbnNmZXIgKnhmZXIpCisrCQkJCSAgICAgdTMyIHNwZWVkX2h6KQorIHsKKyAJdTMyIHNwaV9jbGtfaHosIGRpdiwgc2NrX3RpbWUsIGNzX3RpbWUsIHJlZ192YWw7CisgCXN0cnVjdCBtdGtfc3BpICptZGF0YSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKyAKKyAJc3BpX2Nsa19oeiA9IGNsa19nZXRfcmF0ZShtZGF0YS0+c3BpX2Nsayk7CistCWlmICh4ZmVyLT5zcGVlZF9oeiA8IHNwaV9jbGtfaHogLyAyKQorLQkJZGl2ID0gRElWX1JPVU5EX1VQKHNwaV9jbGtfaHosIHhmZXItPnNwZWVkX2h6KTsKKysJaWYgKHNwZWVkX2h6IDwgc3BpX2Nsa19oeiAvIDIpCisrCQlkaXYgPSBESVZfUk9VTkRfVVAoc3BpX2Nsa19oeiwgc3BlZWRfaHopOworIAllbHNlCisgCQlkaXYgPSAxOworIAorQEAgLTMyMywxMiArNDA5LDI0IEBAIHN0YXRpYyB2b2lkIG10a19zcGlfc2V0dXBfcGFja2V0KHN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIpCisgCXUzMiBwYWNrZXRfc2l6ZSwgcGFja2V0X2xvb3AsIHJlZ192YWw7CisgCXN0cnVjdCBtdGtfc3BpICptZGF0YSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKyAKKy0JcGFja2V0X3NpemUgPSBtaW5fdCh1MzIsIG1kYXRhLT54ZmVyX2xlbiwgTVRLX1NQSV9QQUNLRVRfU0laRSk7CisrCWlmIChtZGF0YS0+ZGV2X2NvbXAtPmlwbV9kZXNpZ24pCisrCQlwYWNrZXRfc2l6ZSA9IG1pbl90KHUzMiwKKysJCQkJICAgIG1kYXRhLT54ZmVyX2xlbiwKKysJCQkJICAgIE1US19TUElfSVBNX1BBQ0tFVF9TSVpFKTsKKysJZWxzZQorKwkJcGFja2V0X3NpemUgPSBtaW5fdCh1MzIsCisrCQkJCSAgICBtZGF0YS0+eGZlcl9sZW4sCisrCQkJCSAgICBNVEtfU1BJX1BBQ0tFVF9TSVpFKTsKKysKKyAJcGFja2V0X2xvb3AgPSBtZGF0YS0+eGZlcl9sZW4gLyBwYWNrZXRfc2l6ZTsKKyAKKyAJcmVnX3ZhbCA9IHJlYWRsKG1kYXRhLT5iYXNlICsgU1BJX0NGRzFfUkVHKTsKKy0JcmVnX3ZhbCAmPSB+KFNQSV9DRkcxX1BBQ0tFVF9MRU5HVEhfTUFTSyB8IFNQSV9DRkcxX1BBQ0tFVF9MT09QX01BU0spOworKwlpZiAobWRhdGEtPmRldl9jb21wLT5pcG1fZGVzaWduKQorKwkJcmVnX3ZhbCAmPSB+U1BJX0NGRzFfSVBNX1BBQ0tFVF9MRU5HVEhfTUFTSzsKKysJZWxzZQorKwkJcmVnX3ZhbCAmPSB+U1BJX0NGRzFfUEFDS0VUX0xFTkdUSF9NQVNLOworIAlyZWdfdmFsIHw9IChwYWNrZXRfc2l6ZSAtIDEpIDw8IFNQSV9DRkcxX1BBQ0tFVF9MRU5HVEhfT0ZGU0VUOworKwlyZWdfdmFsICY9IH5TUElfQ0ZHMV9QQUNLRVRfTE9PUF9NQVNLOworIAlyZWdfdmFsIHw9IChwYWNrZXRfbG9vcCAtIDEpIDw8IFNQSV9DRkcxX1BBQ0tFVF9MT09QX09GRlNFVDsKKyAJd3JpdGVsKHJlZ192YWwsIG1kYXRhLT5iYXNlICsgU1BJX0NGRzFfUkVHKTsKKyB9CitAQCAtNDIzLDcgKzUyMSw3IEBAIHN0YXRpYyBpbnQgbXRrX3NwaV9maWZvX3RyYW5zZmVyKHN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIsCisgCW1kYXRhLT5jdXJfdHJhbnNmZXIgPSB4ZmVyOworIAltZGF0YS0+eGZlcl9sZW4gPSBtaW4oTVRLX1NQSV9NQVhfRklGT19TSVpFLCB4ZmVyLT5sZW4pOworIAltZGF0YS0+bnVtX3hmZXJlZCA9IDA7CistCW10a19zcGlfcHJlcGFyZV90cmFuc2ZlcihtYXN0ZXIsIHhmZXIpOworKwltdGtfc3BpX3ByZXBhcmVfdHJhbnNmZXIobWFzdGVyLCB4ZmVyLT5zcGVlZF9oeik7CisgCW10a19zcGlfc2V0dXBfcGFja2V0KG1hc3Rlcik7CisgCisgCWNudCA9IHhmZXItPmxlbiAvIDQ7CitAQCAtNDU1LDcgKzU1Myw3IEBAIHN0YXRpYyBpbnQgbXRrX3NwaV9kbWFfdHJhbnNmZXIoc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlciwKKyAJbWRhdGEtPmN1cl90cmFuc2ZlciA9IHhmZXI7CisgCW1kYXRhLT5udW1feGZlcmVkID0gMDsKKyAKKy0JbXRrX3NwaV9wcmVwYXJlX3RyYW5zZmVyKG1hc3RlciwgeGZlcik7CisrCW10a19zcGlfcHJlcGFyZV90cmFuc2ZlcihtYXN0ZXIsIHhmZXItPnNwZWVkX2h6KTsKKyAKKyAJY21kID0gcmVhZGwobWRhdGEtPmJhc2UgKyBTUElfQ01EX1JFRyk7CisgCWlmICh4ZmVyLT50eF9idWYpCitAQCAtNTMyLDYgKzYzMCwxMyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgbXRrX3NwaV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQorIAllbHNlCisgCQltZGF0YS0+c3RhdGUgPSBNVEtfU1BJX0lETEU7CisgCisrCS8qIFNQSS1NRU0gb3BzICovCisrCWlmIChtZGF0YS0+dXNlX3NwaW1lbSkgeworKwkJY29tcGxldGUoJm1kYXRhLT5zcGltZW1fZG9uZSk7CisrCisrCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisrCX0KKysKKyAJaWYgKCFtYXN0ZXItPmNhbl9kbWEobWFzdGVyLCBOVUxMLCB0cmFucykpIHsKKyAJCWlmICh0cmFucy0+cnhfYnVmKSB7CisgCQkJY250ID0gbWRhdGEtPnhmZXJfbGVuIC8gNDsKK0BAIC02MTUsMTIgKzcyMCwyNDEgQEAgc3RhdGljIGlycXJldHVybl90IG10a19zcGlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKKyAJcmV0dXJuIElSUV9IQU5ETEVEOworIH0KKyAKKytzdGF0aWMgYm9vbCBtdGtfc3BpX21lbV9zdXBwb3J0c19vcChzdHJ1Y3Qgc3BpX21lbSAqbWVtLAorKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBzcGlfbWVtX29wICpvcCkKKyt7CisrCWlmIChvcC0+ZGF0YS5idXN3aWR0aCA+IDQgfHwgb3AtPmFkZHIuYnVzd2lkdGggPiA0IHx8CisrCSAgICBvcC0+ZHVtbXkuYnVzd2lkdGggPiA0IHx8IG9wLT5jbWQuYnVzd2lkdGggPiA0KQorKwkJcmV0dXJuIGZhbHNlOworKworKwlpZiAob3AtPmFkZHIubmJ5dGVzICYmIG9wLT5kdW1teS5uYnl0ZXMgJiYKKysJICAgIG9wLT5hZGRyLmJ1c3dpZHRoICE9IG9wLT5kdW1teS5idXN3aWR0aCkKKysJCXJldHVybiBmYWxzZTsKKysKKysJaWYgKG9wLT5hZGRyLm5ieXRlcyArIG9wLT5kdW1teS5uYnl0ZXMgPiAxNikKKysJCXJldHVybiBmYWxzZTsKKysKKysJaWYgKG9wLT5kYXRhLm5ieXRlcyA+IE1US19TUElfSVBNX1BBQ0tFVF9TSVpFKSB7CisrCQlpZiAob3AtPmRhdGEubmJ5dGVzIC8gTVRLX1NQSV9JUE1fUEFDS0VUX1NJWkUgPgorKwkJICAgIE1US19TUElfSVBNX1BBQ0tFVF9MT09QIHx8CisrCQkgICAgb3AtPmRhdGEubmJ5dGVzICUgTVRLX1NQSV9JUE1fUEFDS0VUX1NJWkUgIT0gMCkKKysJCQlyZXR1cm4gZmFsc2U7CisrCX0KKysKKysJaWYgKG9wLT5kYXRhLmRpciA9PSBTUElfTUVNX0RBVEFfSU4gJiYKKysJICAgICFJU19BTElHTkVEKChzaXplX3Qpb3AtPmRhdGEuYnVmLmluLCA0KSkKKysJCXJldHVybiBmYWxzZTsKKysKKysJcmV0dXJuIHRydWU7CisrfQorKworK3N0YXRpYyB2b2lkIG10a19zcGlfbWVtX3NldHVwX2RtYV94ZmVyKHN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIsCisrCQkJCSAgIGNvbnN0IHN0cnVjdCBzcGlfbWVtX29wICpvcCkKKyt7CisrCXN0cnVjdCBtdGtfc3BpICptZGF0YSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKysKKysJd3JpdGVsKCh1MzIpKG1kYXRhLT50eF9kbWEgJiBNVEtfU1BJXzMyQklUU19NQVNLKSwKKysJICAgICAgIG1kYXRhLT5iYXNlICsgU1BJX1RYX1NSQ19SRUcpOworKyNpZmRlZiBDT05GSUdfQVJDSF9ETUFfQUREUl9UXzY0QklUCisrCWlmIChtZGF0YS0+ZGV2X2NvbXAtPmRtYV9leHQpCisrCQl3cml0ZWwoKHUzMikobWRhdGEtPnR4X2RtYSA+PiAzMiksCisrCQkgICAgICAgbWRhdGEtPmJhc2UgKyBTUElfVFhfU1JDX1JFR182NCk7CisrI2VuZGlmCisrCisrCWlmIChvcC0+ZGF0YS5kaXIgPT0gU1BJX01FTV9EQVRBX0lOKSB7CisrCQl3cml0ZWwoKHUzMikobWRhdGEtPnJ4X2RtYSAmIE1US19TUElfMzJCSVRTX01BU0spLAorKwkJCSAgIG1kYXRhLT5iYXNlICsgU1BJX1JYX0RTVF9SRUcpOworKyNpZmRlZiBDT05GSUdfQVJDSF9ETUFfQUREUl9UXzY0QklUCisrCQlpZiAobWRhdGEtPmRldl9jb21wLT5kbWFfZXh0KQorKwkJCXdyaXRlbCgodTMyKShtZGF0YS0+cnhfZG1hID4+IDMyKSwKKysJCQkJICAgbWRhdGEtPmJhc2UgKyBTUElfUlhfRFNUX1JFR182NCk7CisrI2VuZGlmCisrCX0KKyt9CisrCisrc3RhdGljIGludCBtdGtfc3BpX3RyYW5zZmVyX3dhaXQoc3RydWN0IHNwaV9tZW0gKm1lbSwKKysJCQkJIGNvbnN0IHN0cnVjdCBzcGlfbWVtX29wICpvcCkKKyt7CisrCXN0cnVjdCBtdGtfc3BpICptZGF0YSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWVtLT5zcGktPm1hc3Rlcik7CisrCXVuc2lnbmVkIGxvbmcgbG9uZyBtcyA9IDE7CisrCisrCWlmIChvcC0+ZGF0YS5kaXIgPT0gU1BJX01FTV9OT19EQVRBKQorKwkJbXMgPSA4TEwgKiAxMDAwTEwgKiAzMjsKKysJZWxzZQorKwkJbXMgPSA4TEwgKiAxMDAwTEwgKiBvcC0+ZGF0YS5uYnl0ZXM7CisrCWRvX2RpdihtcywgbWVtLT5zcGktPm1heF9zcGVlZF9oeik7CisrCW1zICs9IG1zICsgMTAwMDsgLyogMXMgdG9sZXJhbmNlICovCisrCisrCWlmIChtcyA+IFVJTlRfTUFYKQorKwkJbXMgPSBVSU5UX01BWDsKKysKKysJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJm1kYXRhLT5zcGltZW1fZG9uZSwKKysJCQkJCSBtc2Vjc190b19qaWZmaWVzKG1zKSkpIHsKKysJCWRldl9lcnIobWRhdGEtPmRldiwgInNwaS1tZW0gdHJhbnNmZXIgdGltZW91dFxuIik7CisrCQlyZXR1cm4gLUVUSU1FRE9VVDsKKysJfQorKworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGludCBtdGtfc3BpX21lbV9leGVjX29wKHN0cnVjdCBzcGlfbWVtICptZW0sCisrCQkJCWNvbnN0IHN0cnVjdCBzcGlfbWVtX29wICpvcCkKKyt7CisrCXN0cnVjdCBtdGtfc3BpICptZGF0YSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWVtLT5zcGktPm1hc3Rlcik7CisrCXUzMiByZWdfdmFsLCBuaW8gPSAxLCB0eF9zaXplOworKwljaGFyICp0eF90bXBfYnVmOworKwlpbnQgcmV0ID0gMDsKKysKKysJbWRhdGEtPnVzZV9zcGltZW0gPSB0cnVlOworKwlyZWluaXRfY29tcGxldGlvbigmbWRhdGEtPnNwaW1lbV9kb25lKTsKKysKKysJbXRrX3NwaV9yZXNldChtZGF0YSk7CisrCW10a19zcGlfaHdfaW5pdChtZW0tPnNwaS0+bWFzdGVyLCBtZW0tPnNwaSk7CisrCW10a19zcGlfcHJlcGFyZV90cmFuc2ZlcihtZW0tPnNwaS0+bWFzdGVyLCBtZW0tPnNwaS0+bWF4X3NwZWVkX2h6KTsKKysKKysJcmVnX3ZhbCA9IHJlYWRsKG1kYXRhLT5iYXNlICsgU1BJX0NGRzNfSVBNX1JFRyk7CisrCS8qIG9wY29kZSBieXRlIGxlbiAqLworKwlyZWdfdmFsICY9IH5TUElfQ0ZHM19JUE1fQ01EX0JZVEVMRU5fTUFTSzsKKysJcmVnX3ZhbCB8PSAxIDw8IFNQSV9DRkczX0lQTV9DTURfQllURUxFTl9PRkZTRVQ7CisrCisrCS8qIGFkZHIgJiBkdW1teSBieXRlIGxlbiAqLworKwlyZWdfdmFsICY9IH5TUElfQ0ZHM19JUE1fQUREUl9CWVRFTEVOX01BU0s7CisrCWlmIChvcC0+YWRkci5uYnl0ZXMgfHwgb3AtPmR1bW15Lm5ieXRlcykKKysJCXJlZ192YWwgfD0gKG9wLT5hZGRyLm5ieXRlcyArIG9wLT5kdW1teS5uYnl0ZXMpIDw8CisrCQkJICAgIFNQSV9DRkczX0lQTV9BRERSX0JZVEVMRU5fT0ZGU0VUOworKworKwkvKiBkYXRhIGJ5dGUgbGVuICovCisrCWlmIChvcC0+ZGF0YS5kaXIgPT0gU1BJX01FTV9OT19EQVRBKSB7CisrCQlyZWdfdmFsIHw9IFNQSV9DRkczX0lQTV9OT0RBVEFfRkxBRzsKKysJCXdyaXRlbCgwLCBtZGF0YS0+YmFzZSArIFNQSV9DRkcxX1JFRyk7CisrCX0gZWxzZSB7CisrCQlyZWdfdmFsICY9IH5TUElfQ0ZHM19JUE1fTk9EQVRBX0ZMQUc7CisrCQltZGF0YS0+eGZlcl9sZW4gPSBvcC0+ZGF0YS5uYnl0ZXM7CisrCQltdGtfc3BpX3NldHVwX3BhY2tldChtZW0tPnNwaS0+bWFzdGVyKTsKKysJfQorKworKwlpZiAob3AtPmFkZHIubmJ5dGVzIHx8IG9wLT5kdW1teS5uYnl0ZXMpIHsKKysJCWlmIChvcC0+YWRkci5idXN3aWR0aCA9PSAxIHx8IG9wLT5kdW1teS5idXN3aWR0aCA9PSAxKQorKwkJCXJlZ192YWwgfD0gU1BJX0NGRzNfSVBNX1hNT0RFX0VOOworKwkJZWxzZQorKwkJCXJlZ192YWwgJj0gflNQSV9DRkczX0lQTV9YTU9ERV9FTjsKKysJfQorKworKwlpZiAob3AtPmFkZHIuYnVzd2lkdGggPT0gMiB8fAorKwkgICAgb3AtPmR1bW15LmJ1c3dpZHRoID09IDIgfHwKKysJICAgIG9wLT5kYXRhLmJ1c3dpZHRoID09IDIpCisrCQluaW8gPSAyOworKwllbHNlIGlmIChvcC0+YWRkci5idXN3aWR0aCA9PSA0IHx8CisrCQkgb3AtPmR1bW15LmJ1c3dpZHRoID09IDQgfHwKKysJCSBvcC0+ZGF0YS5idXN3aWR0aCA9PSA0KQorKwkJbmlvID0gNDsKKysKKysJcmVnX3ZhbCAmPSB+U1BJX0NGRzNfSVBNX0NNRF9QSU5fTU9ERV9NQVNLOworKwlyZWdfdmFsIHw9IFBJTl9NT0RFX0NGRyhuaW8pIDw8IFNQSV9DRkczX0lQTV9QSU5fTU9ERV9PRkZTRVQ7CisrCisrCXJlZ192YWwgfD0gU1BJX0NGRzNfSVBNX0hBTEZfRFVQTEVYX0VOOworKwlpZiAob3AtPmRhdGEuZGlyID09IFNQSV9NRU1fREFUQV9JTikKKysJCXJlZ192YWwgfD0gU1BJX0NGRzNfSVBNX0hBTEZfRFVQTEVYX0RJUjsKKysJZWxzZQorKwkJcmVnX3ZhbCAmPSB+U1BJX0NGRzNfSVBNX0hBTEZfRFVQTEVYX0RJUjsKKysJd3JpdGVsKHJlZ192YWwsIG1kYXRhLT5iYXNlICsgU1BJX0NGRzNfSVBNX1JFRyk7CisrCisrCXR4X3NpemUgPSAxICsgb3AtPmFkZHIubmJ5dGVzICsgb3AtPmR1bW15Lm5ieXRlczsKKysJaWYgKG9wLT5kYXRhLmRpciA9PSBTUElfTUVNX0RBVEFfT1VUKQorKwkJdHhfc2l6ZSArPSBvcC0+ZGF0YS5uYnl0ZXM7CisrCisrCXR4X3NpemUgPSBtYXgodHhfc2l6ZSwgKHUzMikzMik7CisrCisrCXR4X3RtcF9idWYgPSBremFsbG9jKHR4X3NpemUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKysJaWYgKCF0eF90bXBfYnVmKQorKwkJcmV0dXJuIC1FTk9NRU07CisrCisrCXR4X3RtcF9idWZbMF0gPSBvcC0+Y21kLm9wY29kZTsKKysKKysJaWYgKG9wLT5hZGRyLm5ieXRlcykgeworKwkJaW50IGk7CisrCisrCQlmb3IgKGkgPSAwOyBpIDwgb3AtPmFkZHIubmJ5dGVzOyBpKyspCisrCQkJdHhfdG1wX2J1ZltpICsgMV0gPSBvcC0+YWRkci52YWwgPj4KKysJCQkJCSg4ICogKG9wLT5hZGRyLm5ieXRlcyAtIGkgLSAxKSk7CisrCX0KKysKKysJaWYgKG9wLT5kdW1teS5uYnl0ZXMpCisrCQltZW1zZXQodHhfdG1wX2J1ZiArIG9wLT5hZGRyLm5ieXRlcyArIDEsCisrCQkgICAgICAgMHhmZiwKKysJCSAgICAgICBvcC0+ZHVtbXkubmJ5dGVzKTsKKysKKysJaWYgKG9wLT5kYXRhLm5ieXRlcyAmJiBvcC0+ZGF0YS5kaXIgPT0gU1BJX01FTV9EQVRBX09VVCkKKysJCW1lbWNweSh0eF90bXBfYnVmICsgb3AtPmR1bW15Lm5ieXRlcyArIG9wLT5hZGRyLm5ieXRlcyArIDEsCisrCQkgICAgICAgb3AtPmRhdGEuYnVmLm91dCwKKysJCSAgICAgICBvcC0+ZGF0YS5uYnl0ZXMpOworKworKwltZGF0YS0+dHhfZG1hID0gZG1hX21hcF9zaW5nbGUobWRhdGEtPmRldiwgdHhfdG1wX2J1ZiwKKysJCQkJICAgICAgIHR4X3NpemUsIERNQV9UT19ERVZJQ0UpOworKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IobWRhdGEtPmRldiwgbWRhdGEtPnR4X2RtYSkpIHsKKysJCXJldCA9IC1FTk9NRU07CisrCQlnb3RvIGVycl9leGl0OworKwl9CisrCisrCWlmIChvcC0+ZGF0YS5kaXIgPT0gU1BJX01FTV9EQVRBX0lOKSB7CisrCQltZGF0YS0+cnhfZG1hID0gZG1hX21hcF9zaW5nbGUobWRhdGEtPmRldiwKKysJCQkJCSAgICAgICBvcC0+ZGF0YS5idWYuaW4sCisrCQkJCQkgICAgICAgb3AtPmRhdGEubmJ5dGVzLAorKwkJCQkJICAgICAgIERNQV9GUk9NX0RFVklDRSk7CisrCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IobWRhdGEtPmRldiwgbWRhdGEtPnJ4X2RtYSkpIHsKKysJCQlyZXQgPSAtRU5PTUVNOworKwkJCWdvdG8gdW5tYXBfdHhfZG1hOworKwkJfQorKwl9CisrCisrCXJlZ192YWwgPSByZWFkbChtZGF0YS0+YmFzZSArIFNQSV9DTURfUkVHKTsKKysJcmVnX3ZhbCB8PSBTUElfQ01EX1RYX0RNQTsKKysJaWYgKG9wLT5kYXRhLmRpciA9PSBTUElfTUVNX0RBVEFfSU4pCisrCQlyZWdfdmFsIHw9IFNQSV9DTURfUlhfRE1BOworKwl3cml0ZWwocmVnX3ZhbCwgbWRhdGEtPmJhc2UgKyBTUElfQ01EX1JFRyk7CisrCisrCW10a19zcGlfbWVtX3NldHVwX2RtYV94ZmVyKG1lbS0+c3BpLT5tYXN0ZXIsIG9wKTsKKysKKysJbXRrX3NwaV9lbmFibGVfdHJhbnNmZXIobWVtLT5zcGktPm1hc3Rlcik7CisrCisrCS8qIFdhaXQgZm9yIHRoZSBpbnRlcnJ1cHQuICovCisrCXJldCA9IG10a19zcGlfdHJhbnNmZXJfd2FpdChtZW0sIG9wKTsKKysJaWYgKHJldCkKKysJCWdvdG8gdW5tYXBfcnhfZG1hOworKworKwkvKiBzcGkgZGlzYWJsZSBkbWEgKi8KKysJcmVnX3ZhbCA9IHJlYWRsKG1kYXRhLT5iYXNlICsgU1BJX0NNRF9SRUcpOworKwlyZWdfdmFsICY9IH5TUElfQ01EX1RYX0RNQTsKKysJaWYgKG9wLT5kYXRhLmRpciA9PSBTUElfTUVNX0RBVEFfSU4pCisrCQlyZWdfdmFsICY9IH5TUElfQ01EX1JYX0RNQTsKKysJd3JpdGVsKHJlZ192YWwsIG1kYXRhLT5iYXNlICsgU1BJX0NNRF9SRUcpOworKworKwlpZiAob3AtPmRhdGEuZGlyID09IFNQSV9NRU1fREFUQV9JTikKKysJCWRtYV91bm1hcF9zaW5nbGUobWRhdGEtPmRldiwgbWRhdGEtPnJ4X2RtYSwKKysJCQkJIG9wLT5kYXRhLm5ieXRlcywgRE1BX0ZST01fREVWSUNFKTsKKyt1bm1hcF9yeF9kbWE6CisrCWRtYV91bm1hcF9zaW5nbGUobWRhdGEtPmRldiwgbWRhdGEtPnJ4X2RtYSwKKysJCQkgb3AtPmRhdGEubmJ5dGVzLCBETUFfRlJPTV9ERVZJQ0UpOworK3VubWFwX3R4X2RtYToKKysJZG1hX3VubWFwX3NpbmdsZShtZGF0YS0+ZGV2LCBtZGF0YS0+dHhfZG1hLAorKwkJCSB0eF9zaXplLCBETUFfVE9fREVWSUNFKTsKKytlcnJfZXhpdDoKKysJa2ZyZWUodHhfdG1wX2J1Zik7CisrCW1kYXRhLT51c2Vfc3BpbWVtID0gZmFsc2U7CisrCisrCXJldHVybiByZXQ7CisrfQorKworK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX2NvbnRyb2xsZXJfbWVtX29wcyBtdGtfc3BpX21lbV9vcHMgPSB7CisrCS5zdXBwb3J0c19vcCA9IG10a19zcGlfbWVtX3N1cHBvcnRzX29wLAorKwkuZXhlY19vcCA9IG10a19zcGlfbWVtX2V4ZWNfb3AsCisrfTsKKysKKyBzdGF0aWMgaW50IG10a19zcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKKyB7CisgCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CisgCXN0cnVjdCBtdGtfc3BpICptZGF0YTsKKyAJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfaWQ7CistCXN0cnVjdCByZXNvdXJjZSAqcmVzOworIAlpbnQgaSwgaXJxLCByZXQsIGFkZHJfYml0czsKKyAKKyAJbWFzdGVyID0gc3BpX2FsbG9jX21hc3RlcigmcGRldi0+ZGV2LCBzaXplb2YoKm1kYXRhKSk7CitAQCAtNjI5LDcgKzk2Myw3IEBAIHN0YXRpYyBpbnQgbXRrX3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorIAkJcmV0dXJuIC1FTk9NRU07CisgCX0KKyAKKy0JbWFzdGVyLT5hdXRvX3J1bnRpbWVfcG0gPSB0cnVlOworKy8vCW1hc3Rlci0+YXV0b19ydW50aW1lX3BtID0gdHJ1ZTsKKyAJbWFzdGVyLT5kZXYub2Zfbm9kZSA9IHBkZXYtPmRldi5vZl9ub2RlOworIAltYXN0ZXItPm1vZGVfYml0cyA9IFNQSV9DUE9MIHwgU1BJX0NQSEEgfCBTUElfTFNCX0ZJUlNUOworIAorQEAgLTY0OCw5ICs5ODIsMjUgQEAgc3RhdGljIGludCBtdGtfc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCisgCisgCW1kYXRhID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworIAltZGF0YS0+ZGV2X2NvbXAgPSBvZl9pZC0+ZGF0YTsKKysKKysJaWYgKG1kYXRhLT5kZXZfY29tcC0+ZW5oYW5jZV90aW1pbmcpCisrCQltYXN0ZXItPm1vZGVfYml0cyB8PSBTUElfQ1NfSElHSDsKKysKKyAJaWYgKG1kYXRhLT5kZXZfY29tcC0+bXVzdF90eCkKKyAJCW1hc3Rlci0+ZmxhZ3MgPSBTUElfTUFTVEVSX01VU1RfVFg7CisgCisrCWlmIChtZGF0YS0+ZGV2X2NvbXAtPmlwbV9kZXNpZ24pCisrCQltYXN0ZXItPm1vZGVfYml0cyB8PSBTUElfTE9PUDsKKysKKysJaWYgKG1kYXRhLT5kZXZfY29tcC0+c3VwcG9ydF9xdWFkKSB7CisrCQltYXN0ZXItPm1lbV9vcHMgPSAmbXRrX3NwaV9tZW1fb3BzOworKwkJbWFzdGVyLT5tb2RlX2JpdHMgfD0gU1BJX1JYX0RVQUwgfCBTUElfVFhfRFVBTCB8CisrCQkJCSAgICAgU1BJX1JYX1FVQUQgfCBTUElfVFhfUVVBRDsKKysKKysJCW1kYXRhLT5kZXYgPSAmcGRldi0+ZGV2OworKwkJaW5pdF9jb21wbGV0aW9uKCZtZGF0YS0+c3BpbWVtX2RvbmUpOworKwl9CisrCisgCWlmIChtZGF0YS0+ZGV2X2NvbXAtPm5lZWRfcGFkX3NlbCkgeworIAkJbWRhdGEtPnBhZF9udW0gPSBvZl9wcm9wZXJ0eV9jb3VudF91MzJfZWxlbXMoCisgCQkJcGRldi0+ZGV2Lm9mX25vZGUsCitAQCAtNjgzLDE1ICsxMDMzLDcgQEAgc3RhdGljIGludCBtdGtfc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCisgCX0KKyAKKyAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbWFzdGVyKTsKKy0KKy0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKy0JaWYgKCFyZXMpIHsKKy0JCXJldCA9IC1FTk9ERVY7CistCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZGV0ZXJtaW5lIGJhc2UgYWRkcmVzc1xuIik7CistCQlnb3RvIGVycl9wdXRfbWFzdGVyOworLQl9CistCistCW1kYXRhLT5iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7CisrCW1kYXRhLT5iYXNlID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDApOworIAlpZiAoSVNfRVJSKG1kYXRhLT5iYXNlKSkgeworIAkJcmV0ID0gUFRSX0VSUihtZGF0YS0+YmFzZSk7CisgCQlnb3RvIGVycl9wdXRfbWFzdGVyOworQEAgLTcxMyw2ICsxMDU1LDcgQEAgc3RhdGljIGludCBtdGtfc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCisgCQlnb3RvIGVycl9wdXRfbWFzdGVyOworIAl9CisgCisrLyoKKyAJbWRhdGEtPnBhcmVudF9jbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgInBhcmVudC1jbGsiKTsKKyAJaWYgKElTX0VSUihtZGF0YS0+cGFyZW50X2NsaykpIHsKKyAJCXJldCA9IFBUUl9FUlIobWRhdGEtPnBhcmVudF9jbGspOworQEAgLTc1MCw3ICsxMDkzLDcgQEAgc3RhdGljIGludCBtdGtfc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCisgCWNsa19kaXNhYmxlX3VucHJlcGFyZShtZGF0YS0+c3BpX2Nsayk7CisgCisgCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOworLQorKyovCisgCXJldCA9IGRldm1fc3BpX3JlZ2lzdGVyX21hc3RlcigmcGRldi0+ZGV2LCBtYXN0ZXIpOworIAlpZiAocmV0KSB7CisgCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgbWFzdGVyICglZClcbiIsIHJldCk7CitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL3NwaS1tdDY1eHguaCBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9zcGktbXQ2NXh4LmgKK2luZGV4IGYwZTZkNjQ4My4uZmFlOWJjMTVjIDEwMDY0NAorLS0tIGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL3NwaS1tdDY1eHguaAorKysrIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL3NwaS1tdDY1eHguaAorQEAgLTExLDcgKzExLDcgQEAKKyAKKyAvKiBCb2FyZCBzcGVjaWZpYyBwbGF0Zm9ybV9kYXRhICovCisgc3RydWN0IG10a19jaGlwX2NvbmZpZyB7CistCXUzMiBjc19wb2w7CisgCXUzMiBzYW1wbGVfc2VsOworKwl1MzIgZ2V0X3RpY2tfZGx5OworIH07CisgI2VuZGlmCistLSAKKzIuMTcuMQorCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDY2Ni1zcGktbXRrLW5vci1maXgtdGltZW91dC1jYWxjdWxhdGlvbi1vdmVyZmxvdy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wNjY2LXNwaS1tdGstbm9yLWZpeC10aW1lb3V0LWNhbGN1bGF0aW9uLW92ZXJmbG93LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2YjIwODkKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDY2Ni1zcGktbXRrLW5vci1maXgtdGltZW91dC1jYWxjdWxhdGlvbi1vdmVyZmxvdy5wYXRjaApAQCAtMCwwICsxLDE3OSBAQAorRnJvbSBwYXRjaHdvcmsgVHVlIFNlcCAyMiAxMTo0OTowMiAyMDIwCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKK1gtUGF0Y2h3b3JrLVN1Ym1pdHRlcjogQ2h1YW5ob25nIEd1byA8Z2NoOTgxMjEzQGdtYWlsLmNvbT4KK1gtUGF0Y2h3b3JrLUlkOiAxMTc5MjM4NworUmV0dXJuLVBhdGg6IAorIDxTUlMwPWk2Nk89Qzc9bGlzdHMuaW5mcmFkZWFkLm9yZz1saW51eC1hcm0ta2VybmVsLWJvdW5jZXMrcGF0Y2h3b3JrLWxpbnV4LWFybT1wYXRjaHdvcmsua2VybmVsLm9yZ0BrZXJuZWwub3JnPgorUmVjZWl2ZWQ6IGZyb20gbWFpbC5rZXJuZWwub3JnIChwZHgta29yZy1tYWlsLTEud2ViLmNvZGVhdXJvcmEub3JnCisgWzE3Mi4zMC4yMDAuMTIzXSkKKwlieSBwZHgta29yZy1wYXRjaHdvcmstMi53ZWIuY29kZWF1cm9yYS5vcmcgKFBvc3RmaXgpIHdpdGggRVNNVFAgaWQgMjFFQjA2MTgKKwlmb3IgPHBhdGNod29yay1saW51eC1hcm1AcGF0Y2h3b3JrLmtlcm5lbC5vcmc+OworIFR1ZSwgMjIgU2VwIDIwMjAgMTE6NTE6MzMgKzAwMDAgKFVUQykKK1JlY2VpdmVkOiBmcm9tIG1lcmxpbi5pbmZyYWRlYWQub3JnIChtZXJsaW4uaW5mcmFkZWFkLm9yZyBbMjA1LjIzMy41OS4xMzRdKQorCSh1c2luZyBUTFN2MS4yIHdpdGggY2lwaGVyIEVDREhFLVJTQS1BRVMyNTYtR0NNLVNIQTM4NCAoMjU2LzI1NiBiaXRzKSkKKwkoTm8gY2xpZW50IGNlcnRpZmljYXRlIHJlcXVlc3RlZCkKKwlieSBtYWlsLmtlcm5lbC5vcmcgKFBvc3RmaXgpIHdpdGggRVNNVFBTIGlkIEUxNUZGMjIxRUIKKwlmb3IgPHBhdGNod29yay1saW51eC1hcm1AcGF0Y2h3b3JrLmtlcm5lbC5vcmc+OworIFR1ZSwgMjIgU2VwIDIwMjAgMTE6NTE6MzIgKzAwMDAgKFVUQykKK0F1dGhlbnRpY2F0aW9uLVJlc3VsdHM6IG1haWwua2VybmVsLm9yZzsKKwlka2ltPXBhc3MgKDIwNDgtYml0IGtleSkgaGVhZGVyLmQ9bGlzdHMuaW5mcmFkZWFkLm9yZworIGhlYWRlci5pPUBsaXN0cy5pbmZyYWRlYWQub3JnIGhlYWRlci5iPSJLQmcvc2trQyI7CisJZGtpbT1mYWlsIHJlYXNvbj0ic2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmYWlsZWQiICgyMDQ4LWJpdCBrZXkpCisgaGVhZGVyLmQ9Z21haWwuY29tIGhlYWRlci5pPUBnbWFpbC5jb20gaGVhZGVyLmI9Ikd0cXA0cnJUIgorRE1BUkMtRmlsdGVyOiBPcGVuRE1BUkMgRmlsdGVyIHYxLjMuMiBtYWlsLmtlcm5lbC5vcmcgRTE1RkYyMjFFQgorQXV0aGVudGljYXRpb24tUmVzdWx0czogbWFpbC5rZXJuZWwub3JnOworIGRtYXJjPWZhaWwgKHA9bm9uZSBkaXM9bm9uZSkgaGVhZGVyLmZyb209Z21haWwuY29tCitBdXRoZW50aWNhdGlvbi1SZXN1bHRzOiBtYWlsLmtlcm5lbC5vcmc7Cisgc3BmPW5vbmUKKyBzbXRwLm1haWxmcm9tPWxpbnV4LWFybS1rZXJuZWwtYm91bmNlcytwYXRjaHdvcmstbGludXgtYXJtPXBhdGNod29yay5rZXJuZWwub3JnQGxpc3RzLmluZnJhZGVhZC5vcmcKK0RLSU0tU2lnbmF0dXJlOiB2PTE7IGE9cnNhLXNoYTI1NjsgcT1kbnMvdHh0OyBjPXJlbGF4ZWQvcmVsYXhlZDsKKwlkPWxpc3RzLmluZnJhZGVhZC5vcmc7IHM9bWVybGluLjIwMTcwMjA5OyBoPVNlbmRlcjpDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOgorCUNvbnRlbnQtVHlwZTpDYzpMaXN0LVN1YnNjcmliZTpMaXN0LUhlbHA6TGlzdC1Qb3N0Okxpc3QtQXJjaGl2ZToKKwlMaXN0LVVuc3Vic2NyaWJlOkxpc3QtSWQ6TUlNRS1WZXJzaW9uOk1lc3NhZ2UtSWQ6RGF0ZTpTdWJqZWN0OlRvOkZyb206CisJUmVwbHktVG86Q29udGVudC1JRDpDb250ZW50LURlc2NyaXB0aW9uOlJlc2VudC1EYXRlOlJlc2VudC1Gcm9tOlJlc2VudC1TZW5kZXIKKwk6UmVzZW50LVRvOlJlc2VudC1DYzpSZXNlbnQtTWVzc2FnZS1JRDpJbi1SZXBseS1UbzpSZWZlcmVuY2VzOkxpc3QtT3duZXI7CisJYmg9WGc2MVdWNDdxTlBqSU5kSERQbkY2VDNxOEdOOGY5ZXZ3aFRNZFlSMFpxcz07IGI9S0JnL3Nra0N2bkY3LzhBbGxlVGF5MHAvSDIKKwloQzRMem8rc2xXaFg1L2VlcFVFWHpoVHI1T1JmNER4OWdENjVVRXVvcmRLUUtGcGc2WTlBcG9HYVl0bUJKMHZBQmRBWnQrb1ZHNHNGZgorCUszejNDWVY2RVo1cXZ3c1p0NTNYbTNZc0hvamd1K0xuYy9NR2dHV0JSakN0VFA3Z3NobTQ4MHBaMHc2QURnSHZyeW01aE5halVGNis1CisJek1tNVd3cTM0anhVQXBHVTdrNUZBUHN2TzVjdFlDdWhFQ3EvbUxCNnRwbENWaDMvK1hMZFNpSE1VbFkxN2ZoK3hzNzMya2dhRG90dVEKKwlRWWdYdERtTUIxcFZLQ3E1Y2YzQmN1ejdXdzQ3dkxTeDRyQnh0ZEIvdnBwMnc5U2RyVTZLOFE3RHVKMytYckdmYk1oS3RCVTVla3RBOAorCUd4RVVVYUt3PT07CitSZWNlaXZlZDogZnJvbSBsb2NhbGhvc3QgKFs6OjFdIGhlbG89bWVybGluLmluZnJhZGVhZC5vcmcpCisJYnkgbWVybGluLmluZnJhZGVhZC5vcmcgd2l0aCBlc210cCAoRXhpbSA0LjkyLjMgIzMgKFJlZCBIYXQgTGludXgpKQorCWlkIDFrS2dvMi0wMDAwWmUtRmI7IFR1ZSwgMjIgU2VwIDIwMjAgMTE6NTA6MDAgKzAwMDAKK1JlY2VpdmVkOiBmcm9tIG1haWwtcGcxLXg1NDMuZ29vZ2xlLmNvbSAoWzI2MDc6ZjhiMDo0ODY0OjIwOjo1NDNdKQorIGJ5IG1lcmxpbi5pbmZyYWRlYWQub3JnIHdpdGggZXNtdHBzIChFeGltIDQuOTIuMyAjMyAoUmVkIEhhdCBMaW51eCkpCisgaWQgMWtLZ25yLTAwMDBWdi02ejsgVHVlLCAyMiBTZXAgMjAyMCAxMTo0OTo0OSArMDAwMAorUmVjZWl2ZWQ6IGJ5IG1haWwtcGcxLXg1NDMuZ29vZ2xlLmNvbSB3aXRoIFNNVFAgaWQgbzI1c282Nzk4Mzg3cGdtLjA7CisgVHVlLCAyMiBTZXAgMjAyMCAwNDo0OTo0NiAtMDcwMCAoUERUKQorREtJTS1TaWduYXR1cmU6IHY9MTsgYT1yc2Etc2hhMjU2OyBjPXJlbGF4ZWQvcmVsYXhlZDsgZD1nbWFpbC5jb207IHM9MjAxNjEwMjU7CisgaD1mcm9tOnRvOmNjOnN1YmplY3Q6ZGF0ZTptZXNzYWdlLWlkOm1pbWUtdmVyc2lvbgorIDpjb250ZW50LXRyYW5zZmVyLWVuY29kaW5nOworIGJoPUVKd3BLcmJncW8vSmMvU1dIdnlBR0I5Q3Jwa1o1TDFIenE5dEluRkhUWWs9OworIGI9R3RxcDRyclRnTTErYll4ZlVRWGUrbGZQY2dIUlc2R2NjZE40Mklzemw2b3pNYmV6dmZ0bDFCVWNLRTIyUzZlRlczCisgVnMrbGNLWk45RWg5QzUzWUFBZDBjdVpZaEoyR3FsZkdOTEEvOVN5QjdzL2dJd0hxTzlDdXUxN1lwQjlkQUZmRVV4b1MKKyA4MjV1VWNUZVJlNkJUYWdaQWgyL01CbHVpTVkzVHN6Umk5NE1iT2Z0eFVnK3dTcXAwd01BUGU5Uk4wZ0FFYy9sMnhnSworIDhQaFhiWnYzdUl0STRRcW9LWWl6OTN2ckYvelloaitvR1RJNDRnMmxpMmZwQWdDTkw3bFhDcFNFMkM5TnNFZStZcVR3CisgYU81QTNXOHQ0anZwOG9DSkV2ci9NV1kxWlpMZDFmVkoxN1czYUdYb0RpLzdFVWNBdlg5RzVFZTdVNjhVWEdNdHR5L2QKKyB6NU53PT0KK1gtR29vZ2xlLURLSU0tU2lnbmF0dXJlOiB2PTE7IGE9cnNhLXNoYTI1NjsgYz1yZWxheGVkL3JlbGF4ZWQ7CisgZD0xZTEwMC5uZXQ7IHM9MjAxNjEwMjU7CisgaD14LWdtLW1lc3NhZ2Utc3RhdGU6ZnJvbTp0bzpjYzpzdWJqZWN0OmRhdGU6bWVzc2FnZS1pZDptaW1lLXZlcnNpb24KKyA6Y29udGVudC10cmFuc2Zlci1lbmNvZGluZzsKKyBiaD1FSndwS3JiZ3FvL0pjL1NXSHZ5QUdCOUNycGtaNUwxSHpxOXRJbkZIVFlrPTsKKyBiPVhoY3BQMTZ6WXlKci9xQ1Q5SmJPM2ZuOFJ5Zkk0NHhKTDNodmdOcmxjcjRsamtFWjRURjZPZnloamRFWlllZUEzQworIGtMbFd1QXFyU242bXdldWhTMkxaMEJWNVFML1lZYVZPNHdQNEIveTNqK3ROYm5XM0pOTTBOdEVZMTlwT3RhTTR2WUsvCisgdFB1TnhsZDVSdkpXeFE5QkxzOGhINnk3ai9vYjZvRHVnMTcwUDVZa3dLNldhL0ZMQ2kyYnc5Mi92bGRoZG5GUC9ObnkKKyAxYmJpV1JWbHMxUmEvUTN6OTB0R1ZpTWtCZGxjZmY2TUk5RFI1TTZhMUhUUU43a045ckxEQ01HczNyOVhWQ29tWTA3TgorIEVDYnJaYkwraUp3dVJ1VDQzUkFVeEU3MlgvUG4wV1lEMjB1bnpJVGY4YnRhOTJ1c05EUmdFdXhjMWJMeUwrdUh4Z1VrCisgWVFLQT09CitYLUdtLU1lc3NhZ2UtU3RhdGU6IEFPQU01MzFYcjFCZzR1d3VwQ0FQcEg0ZUJXVnJYR0FMaklXYSs1QVZOWjh3Nmx0UzRCR2dXdjZiCisgZTRnNnljS25VcC9LYWxwSmhPTWk5MG89CitYLUdvb2dsZS1TbXRwLVNvdXJjZTogCisgQUJkaFBKeDM2T2xpYWFMa2lYM1plWk5OV2dkL3FTS2lSb3IyWDBlZUhTY0Ryak1TaTViVGlFekFmWDVqN2hrUWdxejhaVVQwcXFMUk5BPT0KK1gtUmVjZWl2ZWQ6IGJ5IDIwMDI6YTYzOjE4NjM6OiB3aXRoIFNNVFAgaWQgMzVtcjMxMzEzMDdwZ3kuNDEzLjE2MDA3NzUzODUwMTQ7CisgVHVlLCAyMiBTZXAgMjAyMCAwNDo0OTo0NSAtMDcwMCAoUERUKQorUmVjZWl2ZWQ6IGZyb20gZ3VvZ3VvLW9tZW4ubGFuIChbMTU2Ljk2LjE0OC45NF0pCisgYnkgc210cC5nbWFpbC5jb20gd2l0aCBFU01UUFNBIGlkIHI0c20yMjIzNzUwcGpmLjQuMjAyMC4wOS4yMi4wNC40OS40MgorICh2ZXJzaW9uPVRMUzFfMyBjaXBoZXI9VExTX0FFU18yNTZfR0NNX1NIQTM4NCBiaXRzPTI1Ni8yNTYpOworIFR1ZSwgMjIgU2VwIDIwMjAgMDQ6NDk6NDQgLTA3MDAgKFBEVCkKK0Zyb206IENodWFuaG9uZyBHdW8gPGdjaDk4MTIxM0BnbWFpbC5jb20+CitUbzogbGludXgtc3BpQHZnZXIua2VybmVsLm9yZworU3ViamVjdDogW1BBVENIIHYyXSBzcGk6IHNwaS1tdGstbm9yOiBmaXggdGltZW91dCBjYWxjdWxhdGlvbiBvdmVyZmxvdworRGF0ZTogVHVlLCAyMiBTZXAgMjAyMCAxOTo0OTowMiArMDgwMAorTWVzc2FnZS1JZDogPDIwMjAwOTIyMTE0OTA1LjI5NDI4NTktMS1nY2g5ODEyMTNAZ21haWwuY29tPgorWC1NYWlsZXI6IGdpdC1zZW5kLWVtYWlsIDIuMjYuMgorTUlNRS1WZXJzaW9uOiAxLjAKK1gtQ1JNMTE0LVZlcnNpb246IDIwMTAwMTA2LUJsYW1lTWljaGVsc29uICggVFJFIDAuOC4wIChCU0QpICkgTVItNjQ2NzA5RTMgCitYLUNSTTExNC1DYWNoZUlEOiBzZmlkLTIwMjAwOTIyXzA3NDk0OF8zNDU0MjBfNjkyMDdFQkUgCitYLUNSTTExNC1TdGF0dXM6IEdPT0QgKCAgMTIuNjAgICkKK1gtU3BhbS1TY29yZTogMi42ICgrKykKK1gtU3BhbS1SZXBvcnQ6IFNwYW1Bc3Nhc3NpbiB2ZXJzaW9uIDMuNC40IG9uIG1lcmxpbi5pbmZyYWRlYWQub3JnIHN1bW1hcnk6CisgQ29udGVudCBhbmFseXNpcyBkZXRhaWxzOiAgICgyLjYgcG9pbnRzKQorIHB0cyBydWxlIG5hbWUgICAgICAgICAgICAgIGRlc2NyaXB0aW9uCisgLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAyLjYgUkNWRF9JTl9TQkwgICAgICAgICAgICBSQkw6IFJlY2VpdmVkIHZpYSBhIHJlbGF5IGluIFNwYW1oYXVzIFNCTAorIFsxNTYuOTYuMTQ4Ljk0IGxpc3RlZCBpbiB6ZW4uc3BhbWhhdXMub3JnXQorIC0wLjAgUkNWRF9JTl9ETlNXTF9OT05FICAgICBSQkw6IFNlbmRlciBsaXN0ZWQgYXQgaHR0cHM6Ly93d3cuZG5zd2wub3JnLywKKyBubyB0cnVzdCBbMjYwNzpmOGIwOjQ4NjQ6MjA6MDowOjA6NTQzIGxpc3RlZCBpbl0KKyBbbGlzdC5kbnN3bC5vcmddCisgMC4wIEZSRUVNQUlMX0ZST00gICAgICAgICAgU2VuZGVyIGVtYWlsIGlzIGNvbW1vbmx5IGFidXNlZCBlbmR1c2VyIG1haWwKKyBwcm92aWRlciBbZ2NoOTgxMjEzW2F0XWdtYWlsLmNvbV0KKyAwLjIgRlJFRU1BSUxfRU5WRlJPTV9FTkRfRElHSVQgRW52ZWxvcGUtZnJvbSBmcmVlbWFpbCB1c2VybmFtZSBlbmRzCisgaW4gZGlnaXQgW2djaDk4MTIxM1thdF1nbWFpbC5jb21dCisgLTAuMCBTUEZfUEFTUyAgICAgICAgICAgICAgIFNQRjogc2VuZGVyIG1hdGNoZXMgU1BGIHJlY29yZAorIDAuMCBTUEZfSEVMT19OT05FICAgICAgICAgIFNQRjogSEVMTyBkb2VzIG5vdCBwdWJsaXNoIGFuIFNQRiBSZWNvcmQKKyAtMC4xIERLSU1fVkFMSUQgTWVzc2FnZSBoYXMgYXQgbGVhc3Qgb25lIHZhbGlkIERLSU0gb3IgREsgc2lnbmF0dXJlCisgLTAuMSBES0lNX1ZBTElEX0FVICAgICAgICAgIE1lc3NhZ2UgaGFzIGEgdmFsaWQgREtJTSBvciBESyBzaWduYXR1cmUgZnJvbQorIGF1dGhvcidzIGRvbWFpbgorIC0wLjEgREtJTV9WQUxJRF9FRiAgICAgICAgICBNZXNzYWdlIGhhcyBhIHZhbGlkIERLSU0gb3IgREsgc2lnbmF0dXJlIGZyb20KKyBlbnZlbG9wZS1mcm9tIGRvbWFpbgorIDAuMSBES0lNX1NJR05FRCAgICAgICAgICAgIE1lc3NhZ2UgaGFzIGEgREtJTSBvciBESyBzaWduYXR1cmUsCisgbm90IG5lY2Vzc2FyaWx5CisgdmFsaWQKK1gtQmVlblRoZXJlOiBsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKK1gtTWFpbG1hbi1WZXJzaW9uOiAyLjEuMjkKK1ByZWNlZGVuY2U6IGxpc3QKK0xpc3QtSWQ6IDxsaW51eC1hcm0ta2VybmVsLmxpc3RzLmluZnJhZGVhZC5vcmc+CitMaXN0LVVuc3Vic2NyaWJlOiAKKyA8aHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9vcHRpb25zL2xpbnV4LWFybS1rZXJuZWw+LAorIDxtYWlsdG86bGludXgtYXJtLWtlcm5lbC1yZXF1ZXN0QGxpc3RzLmluZnJhZGVhZC5vcmc/c3ViamVjdD11bnN1YnNjcmliZT4KK0xpc3QtQXJjaGl2ZTogPGh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL3BpcGVybWFpbC9saW51eC1hcm0ta2VybmVsLz4KK0xpc3QtUG9zdDogPG1haWx0bzpsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmc+CitMaXN0LUhlbHA6IDxtYWlsdG86bGludXgtYXJtLWtlcm5lbC1yZXF1ZXN0QGxpc3RzLmluZnJhZGVhZC5vcmc/c3ViamVjdD1oZWxwPgorTGlzdC1TdWJzY3JpYmU6IAorIDxodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWw+LAorIDxtYWlsdG86bGludXgtYXJtLWtlcm5lbC1yZXF1ZXN0QGxpc3RzLmluZnJhZGVhZC5vcmc/c3ViamVjdD1zdWJzY3JpYmU+CitDYzogbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZywgc3RhYmxlQHZnZXIua2VybmVsLm9yZywKKyBNYXJrIEJyb3duIDxicm9vbmllQGtlcm5lbC5vcmc+LCBsaW51eC1tZWRpYXRla0BsaXN0cy5pbmZyYWRlYWQub3JnLAorIGJheWkuY2hlbmdAbWVkaWF0ZWsuY29tLCBNYXR0aGlhcyBCcnVnZ2VyIDxtYXR0aGlhcy5iZ2dAZ21haWwuY29tPiwKKyBDaHVhbmhvbmcgR3VvIDxnY2g5ODEyMTNAZ21haWwuY29tPiwgbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCitTZW5kZXI6ICJsaW51eC1hcm0ta2VybmVsIiA8bGludXgtYXJtLWtlcm5lbC1ib3VuY2VzQGxpc3RzLmluZnJhZGVhZC5vcmc+CitFcnJvcnMtVG86IAorIGxpbnV4LWFybS1rZXJuZWwtYm91bmNlcytwYXRjaHdvcmstbGludXgtYXJtPXBhdGNod29yay5rZXJuZWwub3JnQGxpc3RzLmluZnJhZGVhZC5vcmcKKworQ0xLX1RPX1VTIG1hY3JvIGlzIHVzZWQgdG8gY2FsY3VsYXRlIHBvdGVudGlhbCB0cmFuc2ZlciB0aW1lIGZvciB2YXJpb3VzCit0aW1lb3V0IGhhbmRsaW5nLiBIb3dldmVyIGl0IG92ZXJmbG93cyBvbiB0cmFuc2ZlciBiaWdnZXIgdGhhbiA1MTIgYnl0ZXMKK2JlY2F1c2UgaXQgZmlyc3QgZGlkIChsZW4gKiA4ICogMTAwMDAwMCkuCitUaGlzIGNvbnRyb2xsZXIgdHlwaWNhbGx5IG9wZXJhdGVzIGF0IDQ1TUh6LiBUaGlzIHBhdGNoIGRpZCAyIHRoaW5nczoKKzEuIGNhbGN1bGF0ZSBjbG9jayAvIDEwMDAwMDAgZmlyc3QKKzIuIGFkZCBhIDRNIHRyYW5zZmVyIHNpemUgY2FwIHNvIHRoYXQgdGhlIGZpbmFsIHRpbWVvdXQgaW4gRE1BIHJlYWRpbmcKKyAgIGRvZXNuJ3Qgb3ZlcmZsb3cKKworRml4ZXM6IDg4MWQxZWU5ZmU4MWYgKCJzcGk6IGFkZCBzdXBwb3J0IGZvciBtZWRpYXRlayBzcGktbm9yIGNvbnRyb2xsZXIiKQorQ2M6IDxzdGFibGVAdmdlci5rZXJuZWwub3JnPgorU2lnbmVkLW9mZi1ieTogQ2h1YW5ob25nIEd1byA8Z2NoOTgxMjEzQGdtYWlsLmNvbT4KKy0tLQorCitDaGFuZ2Ugc2luY2UgdjE6IGZpeCB0cmFuc2ZlciBzaXplIGNhcCB0byA0TQorCisgZHJpdmVycy9zcGkvc3BpLW10ay1ub3IuYyB8IDYgKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLW10ay1ub3IuYyBiL2RyaXZlcnMvc3BpL3NwaS1tdGstbm9yLmMKK2luZGV4IDZlNmNhMmI4ZTZjODIuLjYyZjVmZjI3Nzk4ODQgMTAwNjQ0CistLS0gYS9kcml2ZXJzL3NwaS9zcGktbXRrLW5vci5jCisrKysgYi9kcml2ZXJzL3NwaS9zcGktbXRrLW5vci5jCitAQCAtODksNyArODksNyBAQAorIC8vIEJ1ZmZlcmVkIHBhZ2UgcHJvZ3JhbSBjYW4gZG8gb25lIDEyOC1ieXRlIHRyYW5zZmVyCisgI2RlZmluZSBNVEtfTk9SX1BQX1NJWkUJCQkxMjgKKyAKKy0jZGVmaW5lIENMS19UT19VUyhzcCwgY2xrY250KQkJKChjbGtjbnQpICogMTAwMDAwMCAvIHNwLT5zcGlfZnJlcSkKKysjZGVmaW5lIENMS19UT19VUyhzcCwgY2xrY250KQkJRElWX1JPVU5EX1VQKGNsa2NudCwgc3AtPnNwaV9mcmVxIC8gMTAwMDAwMCkKKyAKKyBzdHJ1Y3QgbXRrX25vciB7CisgCXN0cnVjdCBzcGlfY29udHJvbGxlciAqY3RscjsKK0BAIC0xNzcsNiArMTc3LDEwIEBAIHN0YXRpYyBpbnQgbXRrX25vcl9hZGp1c3Rfb3Bfc2l6ZShzdHJ1Y3Qgc3BpX21lbSAqbWVtLCBzdHJ1Y3Qgc3BpX21lbV9vcCAqb3ApCisgCWlmICgob3AtPmFkZHIubmJ5dGVzID09IDMpIHx8IChvcC0+YWRkci5uYnl0ZXMgPT0gNCkpIHsKKyAJCWlmICgob3AtPmRhdGEuZGlyID09IFNQSV9NRU1fREFUQV9JTikgJiYKKyAJCSAgICBtdGtfbm9yX21hdGNoX3JlYWQob3ApKSB7CisrCQkJLy8gbGltaXQgc2l6ZSB0byBwcmV2ZW50IHRpbWVvdXQgY2FsY3VsYXRpb24gb3ZlcmZsb3cKKysJCQlpZiAob3AtPmRhdGEubmJ5dGVzID4gMHg0MDAwMDApCisrCQkJCW9wLT5kYXRhLm5ieXRlcyA9IDB4NDAwMDAwOworKworIAkJCWlmICgob3AtPmFkZHIudmFsICYgTVRLX05PUl9ETUFfQUxJR05fTUFTSykgfHwKKyAJCQkgICAgKG9wLT5kYXRhLm5ieXRlcyA8IE1US19OT1JfRE1BX0FMSUdOKSkKKyAJCQkJb3AtPmRhdGEubmJ5dGVzID0gMTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wNjY3LXNwaS1tZWRpYXRlay1maXgtdGltZW91dC1mb3ItbGFyZ2UtZGF0YS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wNjY3LXNwaS1tZWRpYXRlay1maXgtdGltZW91dC1mb3ItbGFyZ2UtZGF0YS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDRmNWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA2Njctc3BpLW1lZGlhdGVrLWZpeC10aW1lb3V0LWZvci1sYXJnZS1kYXRhLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKKy0tLSBhL2RyaXZlcnMvc3BpL3NwaS1tdDY1eHguYworKysrIGIvZHJpdmVycy9zcGkvc3BpLW10NjV4eC5jCitAQCAtNzIwLDYgKzcyMCwyMyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgbXRrX3NwaV9pbnRlcnJ1cHQoaW50CisgCXJldHVybiBJUlFfSEFORExFRDsKKyB9CisgCisrc3RhdGljIGludCBtdGtfc3BpX21lbV9hZGp1c3Rfb3Bfc2l6ZShzdHJ1Y3Qgc3BpX21lbSAqbWVtLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNwaV9tZW1fb3AgKm9wKQorK3sKKysJaW50IG9wY29kZV9sZW47CisrCisrCWlmKCFvcC0+ZGF0YS5uYnl0ZXMpCisrCQlyZXR1cm4gMDsKKysKKysJaWYgKG9wLT5kYXRhLmRpciAhPSBTUElfTUVNX05PX0RBVEEpIHsKKysJCW9wY29kZV9sZW4gPSAxICsgb3AtPmFkZHIubmJ5dGVzICsgb3AtPmR1bW15Lm5ieXRlczsKKysJCWlmIChvcGNvZGVfbGVuICsgb3AtPmRhdGEubmJ5dGVzID4gTVRLX1NQSV9JUE1fUEFDS0VUX1NJWkUpCisrCQkJb3AtPmRhdGEubmJ5dGVzID0gTVRLX1NQSV9JUE1fUEFDS0VUX1NJWkUgLW9wY29kZV9sZW47CisrCX0KKysKKysJcmV0dXJuIDA7CisrfQorKworIHN0YXRpYyBib29sIG10a19zcGlfbWVtX3N1cHBvcnRzX29wKHN0cnVjdCBzcGlfbWVtICptZW0sCisgCQkJCSAgICAgY29uc3Qgc3RydWN0IHNwaV9tZW1fb3AgKm9wKQorIHsKK0BAIC05NDYsNiArOTYzLDcgQEAgZXJyX2V4aXQ6CisgfQorIAorIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX2NvbnRyb2xsZXJfbWVtX29wcyBtdGtfc3BpX21lbV9vcHMgPSB7CisrCS5hZGp1c3Rfb3Bfc2l6ZSA9IG10a19zcGlfbWVtX2FkanVzdF9vcF9zaXplLAorIAkuc3VwcG9ydHNfb3AgPSBtdGtfc3BpX21lbV9zdXBwb3J0c19vcCwKKyAJLmV4ZWNfb3AgPSBtdGtfc3BpX21lbV9leGVjX29wLAorIH07CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDY2OC1zcGktbWVkaWF0ZWstZml4LWRtYS11bm1hcC10d2ljZS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wNjY4LXNwaS1tZWRpYXRlay1maXgtZG1hLXVubWFwLXR3aWNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNTYyYmYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDY2OC1zcGktbWVkaWF0ZWstZml4LWRtYS11bm1hcC10d2ljZS5wYXRjaApAQCAtMCwwICsxLDE2IEBACistLS0gYS9kcml2ZXJzL3NwaS9zcGktbXQ2NXh4LmMKKysrKyBiL2RyaXZlcnMvc3BpL3NwaS1tdDY1eHguYworQEAgLTk0NiwxMiArOTQ2LDEwIEBAIHN0YXRpYyBpbnQgbXRrX3NwaV9tZW1fZXhlY19vcChzdHJ1Y3Qgc3AKKyAJCXJlZ192YWwgJj0gflNQSV9DTURfUlhfRE1BOworIAl3cml0ZWwocmVnX3ZhbCwgbWRhdGEtPmJhc2UgKyBTUElfQ01EX1JFRyk7CisgCisrdW5tYXBfcnhfZG1hOgorIAlpZiAob3AtPmRhdGEuZGlyID09IFNQSV9NRU1fREFUQV9JTikKKyAJCWRtYV91bm1hcF9zaW5nbGUobWRhdGEtPmRldiwgbWRhdGEtPnJ4X2RtYSwKKyAJCQkJIG9wLT5kYXRhLm5ieXRlcywgRE1BX0ZST01fREVWSUNFKTsKKy11bm1hcF9yeF9kbWE6CistCWRtYV91bm1hcF9zaW5nbGUobWRhdGEtPmRldiwgbWRhdGEtPnJ4X2RtYSwKKy0JCQkgb3AtPmRhdGEubmJ5dGVzLCBETUFfRlJPTV9ERVZJQ0UpOworIHVubWFwX3R4X2RtYToKKyAJZG1hX3VubWFwX3NpbmdsZShtZGF0YS0+ZGV2LCBtZGF0YS0+dHhfZG1hLAorIAkJCSB0eF9zaXplLCBETUFfVE9fREVWSUNFKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wNjY5LWZpeC1TUElNLU5BTkQtYW5kLU5PUi1wcm9iaW5nLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA2NjktZml4LVNQSU0tTkFORC1hbmQtTk9SLXByb2JpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgyNzcxYgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wNjY5LWZpeC1TUElNLU5BTkQtYW5kLU5PUi1wcm9iaW5nLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKKy0tLSBhL2RyaXZlcnMvc3BpL3NwaS1tdDY1eHguYworKysrIGIvZHJpdmVycy9zcGkvc3BpLW10NjV4eC5jCitAQCAtMTA3Myw3ICsxMDczLDcgQEAgc3RhdGljIGludCBtdGtfc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybQorIAkJZ290byBlcnJfcHV0X21hc3RlcjsKKyAJfQorIAorLS8qCisrCisgCW1kYXRhLT5wYXJlbnRfY2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJwYXJlbnQtY2xrIik7CisgCWlmIChJU19FUlIobWRhdGEtPnBhcmVudF9jbGspKSB7CisgCQlyZXQgPSBQVFJfRVJSKG1kYXRhLT5wYXJlbnRfY2xrKTsKK0BAIC0xMTAxLDE3ICsxMTAxLDE3IEBAIHN0YXRpYyBpbnQgbXRrX3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm0KKyAJCWdvdG8gZXJyX3B1dF9tYXN0ZXI7CisgCX0KKyAKKy0JcmV0ID0gY2xrX3NldF9wYXJlbnQobWRhdGEtPnNlbF9jbGssIG1kYXRhLT5wYXJlbnRfY2xrKTsKKysJLypyZXQgPSBjbGtfc2V0X3BhcmVudChtZGF0YS0+c2VsX2NsaywgbWRhdGEtPnBhcmVudF9jbGspOworIAlpZiAocmV0IDwgMCkgeworIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGNsa19zZXRfcGFyZW50ICglZClcbiIsIHJldCk7CisgCQljbGtfZGlzYWJsZV91bnByZXBhcmUobWRhdGEtPnNwaV9jbGspOworIAkJZ290byBlcnJfcHV0X21hc3RlcjsKKyAJfQorIAorLQljbGtfZGlzYWJsZV91bnByZXBhcmUobWRhdGEtPnNwaV9jbGspOworKwljbGtfZGlzYWJsZV91bnByZXBhcmUobWRhdGEtPnNlbF9jbGspOyovCisrCisrCS8vcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7CisgCistCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOworLSovCisgCXJldCA9IGRldm1fc3BpX3JlZ2lzdGVyX21hc3RlcigmcGRldi0+ZGV2LCBtYXN0ZXIpOworIAlpZiAocmV0KSB7CisgCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgbWFzdGVyICglZClcbiIsIHJldCk7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDY3MC1maXgtU1BJTS1kbWEtYnVmZmVyLW5vdC1hbGlnbmVkLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA2NzAtZml4LVNQSU0tZG1hLWJ1ZmZlci1ub3QtYWxpZ25lZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDUzNGU3Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA2NzAtZml4LVNQSU0tZG1hLWJ1ZmZlci1ub3QtYWxpZ25lZC5wYXRjaApAQCAtMCwwICsxLDgxIEBACistLS0gYS9kcml2ZXJzL3NwaS9zcGktbXQ2NXh4LmMKKysrKyBiL2RyaXZlcnMvc3BpL3NwaS1tdDY1eHguYworQEAgLTE4NCw3ICsxODQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG10a19zcGlfY29tcGF0aWJsZSBtCisgICovCisgc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfY2hpcF9jb25maWcgbXRrX2RlZmF1bHRfY2hpcF9pbmZvID0geworIAkuc2FtcGxlX3NlbCA9IDAsCistCS5nZXRfdGlja19kbHkgPSAwLAorKwkuZ2V0X3RpY2tfZGx5ID0gMSwKKyB9OworIAorIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19zcGlfb2ZfbWF0Y2hbXSA9IHsKK0BAIC03MzAsOCArNzMwLDExIEBAIHN0YXRpYyBpbnQgbXRrX3NwaV9tZW1fYWRqdXN0X29wX3NpemUoc3QKKyAKKyAJaWYgKG9wLT5kYXRhLmRpciAhPSBTUElfTUVNX05PX0RBVEEpIHsKKyAJCW9wY29kZV9sZW4gPSAxICsgb3AtPmFkZHIubmJ5dGVzICsgb3AtPmR1bW15Lm5ieXRlczsKKy0JCWlmIChvcGNvZGVfbGVuICsgb3AtPmRhdGEubmJ5dGVzID4gTVRLX1NQSV9JUE1fUEFDS0VUX1NJWkUpCisrCQlpZiAob3Bjb2RlX2xlbiArIG9wLT5kYXRhLm5ieXRlcyA+IE1US19TUElfSVBNX1BBQ0tFVF9TSVpFKSB7CisgCQkJb3AtPmRhdGEubmJ5dGVzID0gTVRLX1NQSV9JUE1fUEFDS0VUX1NJWkUgLW9wY29kZV9sZW47CisrCQkJLyogZm9yY2UgZGF0YSBidWZmZXIgZG1hLWFsaWduZWQuICovCisrCQkJb3AtPmRhdGEubmJ5dGVzIC09IG9wLT5kYXRhLm5ieXRlcyAlIDQ7CisrCQl9CisgCX0KKyAKKyAJcmV0dXJuIDA7CitAQCAtNzU4LDEwICs3NjEsNiBAQCBzdGF0aWMgYm9vbCBtdGtfc3BpX21lbV9zdXBwb3J0c19vcChzdHJ1CisgCQkJcmV0dXJuIGZhbHNlOworIAl9CisgCistCWlmIChvcC0+ZGF0YS5kaXIgPT0gU1BJX01FTV9EQVRBX0lOICYmCistCSAgICAhSVNfQUxJR05FRCgoc2l6ZV90KW9wLT5kYXRhLmJ1Zi5pbiwgNCkpCistCQlyZXR1cm4gZmFsc2U7CistCisgCXJldHVybiB0cnVlOworIH0KKyAKK0BAIC04MjAsNiArODE5LDcgQEAgc3RhdGljIGludCBtdGtfc3BpX21lbV9leGVjX29wKHN0cnVjdCBzcAorIAlzdHJ1Y3QgbXRrX3NwaSAqbWRhdGEgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1lbS0+c3BpLT5tYXN0ZXIpOworIAl1MzIgcmVnX3ZhbCwgbmlvID0gMSwgdHhfc2l6ZTsKKyAJY2hhciAqdHhfdG1wX2J1ZjsKKysJY2hhciAqcnhfdG1wX2J1ZjsKKyAJaW50IHJldCA9IDA7CisgCisgCW1kYXRhLT51c2Vfc3BpbWVtID0gdHJ1ZTsKK0BAIC05MTQsMTAgKzkxNCwxOCBAQCBzdGF0aWMgaW50IG10a19zcGlfbWVtX2V4ZWNfb3Aoc3RydWN0IHNwCisgCX0KKyAKKyAJaWYgKG9wLT5kYXRhLmRpciA9PSBTUElfTUVNX0RBVEFfSU4pIHsKKysJCWlmKCFJU19BTElHTkVEKChzaXplX3Qpb3AtPmRhdGEuYnVmLmluLCA0KSkgeworKwkJCXJ4X3RtcF9idWYgPSBremFsbG9jKG9wLT5kYXRhLm5ieXRlcywgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOworKwkJCWlmICghcnhfdG1wX2J1ZikKKysJCQkJcmV0dXJuIC1FTk9NRU07CisrCQl9CisrCQllbHNlCisrCQkJcnhfdG1wX2J1ZiA9IG9wLT5kYXRhLmJ1Zi5pbjsKKysKKyAJCW1kYXRhLT5yeF9kbWEgPSBkbWFfbWFwX3NpbmdsZShtZGF0YS0+ZGV2LAorLQkJCQkJICAgICAgIG9wLT5kYXRhLmJ1Zi5pbiwKKy0JCQkJCSAgICAgICBvcC0+ZGF0YS5uYnl0ZXMsCistCQkJCQkgICAgICAgRE1BX0ZST01fREVWSUNFKTsKKysJCQkJCQkgICByeF90bXBfYnVmLAorKwkJCQkJCSAgIG9wLT5kYXRhLm5ieXRlcywKKysJCQkJCQkgICBETUFfRlJPTV9ERVZJQ0UpOworIAkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKG1kYXRhLT5kZXYsIG1kYXRhLT5yeF9kbWEpKSB7CisgCQkJcmV0ID0gLUVOT01FTTsKKyAJCQlnb3RvIHVubWFwX3R4X2RtYTsKK0BAIC05NDcsOSArOTU1LDE0IEBAIHN0YXRpYyBpbnQgbXRrX3NwaV9tZW1fZXhlY19vcChzdHJ1Y3Qgc3AKKyAJd3JpdGVsKHJlZ192YWwsIG1kYXRhLT5iYXNlICsgU1BJX0NNRF9SRUcpOworIAorIHVubWFwX3J4X2RtYToKKy0JaWYgKG9wLT5kYXRhLmRpciA9PSBTUElfTUVNX0RBVEFfSU4pCisrCWlmIChvcC0+ZGF0YS5kaXIgPT0gU1BJX01FTV9EQVRBX0lOKSB7CisrCQlpZighSVNfQUxJR05FRCgoc2l6ZV90KW9wLT5kYXRhLmJ1Zi5pbiwgNCkpIHsKKysJCQltZW1jcHkob3AtPmRhdGEuYnVmLmluLCByeF90bXBfYnVmLCBvcC0+ZGF0YS5uYnl0ZXMpOworKwkJCWtmcmVlKHJ4X3RtcF9idWYpOworKwkJfQorIAkJZG1hX3VubWFwX3NpbmdsZShtZGF0YS0+ZGV2LCBtZGF0YS0+cnhfZG1hLAorIAkJCQkgb3AtPmRhdGEubmJ5dGVzLCBETUFfRlJPTV9ERVZJQ0UpOworKwl9CisgdW5tYXBfdHhfZG1hOgorIAlkbWFfdW5tYXBfc2luZ2xlKG1kYXRhLT5kZXYsIG1kYXRhLT50eF9kbWEsCisgCQkJIHR4X3NpemUsIERNQV9UT19ERVZJQ0UpOwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA2NzEtYWRkLW1pY3Jvbi1NVDI5RjRHMDFBQkFGRC1zcGktbmFuZC1zdXBwb3J0LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA2NzEtYWRkLW1pY3Jvbi1NVDI5RjRHMDFBQkFGRC1zcGktbmFuZC1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwODMzYzAKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDY3MS1hZGQtbWljcm9uLU1UMjlGNEcwMUFCQUZELXNwaS1uYW5kLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwxMTEgQEAKKy0tLSBhL2RyaXZlcnMvbXRkL25hbmQvc3BpL21pY3Jvbi5jCisrKysgYi9kcml2ZXJzL210ZC9uYW5kL3NwaS9taWNyb24uYworQEAgLTE4LDcgKzE4LDkgQEAKKyAjZGVmaW5lIE1JQ1JPTl9TVEFUVVNfRUNDXzRUTzZfQklURkxJUFMJKDMgPDwgNCkKKyAjZGVmaW5lIE1JQ1JPTl9TVEFUVVNfRUNDXzdUTzhfQklURkxJUFMJKDUgPDwgNCkKKyAKKy1zdGF0aWMgU1BJTkFORF9PUF9WQVJJQU5UUyhyZWFkX2NhY2hlX3ZhcmlhbnRzLAorKyNkZWZpbmUgTUlDUk9OX0NGR19DUgkJCUJJVCgwKQorKworK3N0YXRpYyBTUElOQU5EX09QX1ZBUklBTlRTKHF1YWRpb19yZWFkX2NhY2hlX3ZhcmlhbnRzLAorIAkJU1BJTkFORF9QQUdFX1JFQURfRlJPTV9DQUNIRV9RVUFESU9fT1AoMCwgMiwgTlVMTCwgMCksCisgCQlTUElOQU5EX1BBR0VfUkVBRF9GUk9NX0NBQ0hFX1g0X09QKDAsIDEsIE5VTEwsIDApLAorIAkJU1BJTkFORF9QQUdFX1JFQURfRlJPTV9DQUNIRV9EVUFMSU9fT1AoMCwgMSwgTlVMTCwgMCksCitAQCAtMjYsNDYgKzI4LDQ2IEBAIHN0YXRpYyBTUElOQU5EX09QX1ZBUklBTlRTKHJlYWRfY2FjaGVfdmEKKyAJCVNQSU5BTkRfUEFHRV9SRUFEX0ZST01fQ0FDSEVfT1AodHJ1ZSwgMCwgMSwgTlVMTCwgMCksCisgCQlTUElOQU5EX1BBR0VfUkVBRF9GUk9NX0NBQ0hFX09QKGZhbHNlLCAwLCAxLCBOVUxMLCAwKSk7CisgCistc3RhdGljIFNQSU5BTkRfT1BfVkFSSUFOVFMod3JpdGVfY2FjaGVfdmFyaWFudHMsCisrc3RhdGljIFNQSU5BTkRfT1BfVkFSSUFOVFMoeDRfd3JpdGVfY2FjaGVfdmFyaWFudHMsCisgCQlTUElOQU5EX1BST0dfTE9BRF9YNCh0cnVlLCAwLCBOVUxMLCAwKSwKKyAJCVNQSU5BTkRfUFJPR19MT0FEKHRydWUsIDAsIE5VTEwsIDApKTsKKyAKKy1zdGF0aWMgU1BJTkFORF9PUF9WQVJJQU5UUyh1cGRhdGVfY2FjaGVfdmFyaWFudHMsCisrc3RhdGljIFNQSU5BTkRfT1BfVkFSSUFOVFMoeDRfdXBkYXRlX2NhY2hlX3ZhcmlhbnRzLAorIAkJU1BJTkFORF9QUk9HX0xPQURfWDQoZmFsc2UsIDAsIE5VTEwsIDApLAorIAkJU1BJTkFORF9QUk9HX0xPQUQoZmFsc2UsIDAsIE5VTEwsIDApKTsKKyAKKy1zdGF0aWMgaW50IG10MjlmMmcwMWFiYWdkX29vYmxheW91dF9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBzZWN0aW9uLAorLQkJCQkJc3RydWN0IG10ZF9vb2JfcmVnaW9uICpyZWdpb24pCisrc3RhdGljIGludCBtaWNyb25fOF9vb2JsYXlvdXRfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgc2VjdGlvbiwKKysJCQkJICBzdHJ1Y3QgbXRkX29vYl9yZWdpb24gKnJlZ2lvbikKKyB7CisgCWlmIChzZWN0aW9uKQorIAkJcmV0dXJuIC1FUkFOR0U7CisgCistCXJlZ2lvbi0+b2Zmc2V0ID0gNjQ7CistCXJlZ2lvbi0+bGVuZ3RoID0gNjQ7CisrCXJlZ2lvbi0+b2Zmc2V0ID0gbXRkLT5vb2JzaXplIC8gMjsKKysJcmVnaW9uLT5sZW5ndGggPSBtdGQtPm9vYnNpemUgLyAyOworIAorIAlyZXR1cm4gMDsKKyB9CisgCistc3RhdGljIGludCBtdDI5ZjJnMDFhYmFnZF9vb2JsYXlvdXRfZnJlZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHNlY3Rpb24sCistCQkJCQkgc3RydWN0IG10ZF9vb2JfcmVnaW9uICpyZWdpb24pCisrc3RhdGljIGludCBtaWNyb25fOF9vb2JsYXlvdXRfZnJlZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHNlY3Rpb24sCisrCQkJCSAgIHN0cnVjdCBtdGRfb29iX3JlZ2lvbiAqcmVnaW9uKQorIHsKKyAJaWYgKHNlY3Rpb24pCisgCQlyZXR1cm4gLUVSQU5HRTsKKyAKKyAJLyogUmVzZXJ2ZSAyIGJ5dGVzIGZvciB0aGUgQkJNLiAqLworIAlyZWdpb24tPm9mZnNldCA9IDI7CistCXJlZ2lvbi0+bGVuZ3RoID0gNjI7CisrCXJlZ2lvbi0+bGVuZ3RoID0gKG10ZC0+b29ic2l6ZSAvIDIpIC0gMjsKKyAKKyAJcmV0dXJuIDA7CisgfQorIAorLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXRkX29vYmxheW91dF9vcHMgbXQyOWYyZzAxYWJhZ2Rfb29ibGF5b3V0ID0geworLQkuZWNjID0gbXQyOWYyZzAxYWJhZ2Rfb29ibGF5b3V0X2VjYywKKy0JLmZyZWUgPSBtdDI5ZjJnMDFhYmFnZF9vb2JsYXlvdXRfZnJlZSwKKytzdGF0aWMgY29uc3Qgc3RydWN0IG10ZF9vb2JsYXlvdXRfb3BzIG1pY3Jvbl84X29vYmxheW91dCA9IHsKKysJLmVjYyA9IG1pY3Jvbl84X29vYmxheW91dF9lY2MsCisrCS5mcmVlID0gbWljcm9uXzhfb29ibGF5b3V0X2ZyZWUsCisgfTsKKyAKKy1zdGF0aWMgaW50IG10MjlmMmcwMWFiYWdkX2VjY19nZXRfc3RhdHVzKHN0cnVjdCBzcGluYW5kX2RldmljZSAqc3BpbmFuZCwKKy0JCQkJCSB1OCBzdGF0dXMpCisrc3RhdGljIGludCBtaWNyb25fOF9lY2NfZ2V0X3N0YXR1cyhzdHJ1Y3Qgc3BpbmFuZF9kZXZpY2UgKnNwaW5hbmQsCisrCQkJCSAgIHU4IHN0YXR1cykKKyB7CisgCXN3aXRjaCAoc3RhdHVzICYgTUlDUk9OX1NUQVRVU19FQ0NfTUFTSykgeworIAljYXNlIFNUQVRVU19FQ0NfTk9fQklURkxJUFM6CitAQCAtOTQsMTIgKzk2LDIxIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpbmFuZF9pbmZvIG1pY3Jvbl8KKyAJU1BJTkFORF9JTkZPKCJNVDI5RjJHMDFBQkFHRCIsIDB4MjQsCisgCQkgICAgIE5BTkRfTUVNT1JHKDEsIDIwNDgsIDEyOCwgNjQsIDIwNDgsIDQwLCAyLCAxLCAxKSwKKyAJCSAgICAgTkFORF9FQ0NSRVEoOCwgNTEyKSwKKy0JCSAgICAgU1BJTkFORF9JTkZPX09QX1ZBUklBTlRTKCZyZWFkX2NhY2hlX3ZhcmlhbnRzLAorLQkJCQkJICAgICAgJndyaXRlX2NhY2hlX3ZhcmlhbnRzLAorLQkJCQkJICAgICAgJnVwZGF0ZV9jYWNoZV92YXJpYW50cyksCisrCQkgICAgIFNQSU5BTkRfSU5GT19PUF9WQVJJQU5UUygmcXVhZGlvX3JlYWRfY2FjaGVfdmFyaWFudHMsCisrCQkJCQkgICAgICAmeDRfd3JpdGVfY2FjaGVfdmFyaWFudHMsCisrCQkJCQkgICAgICAmeDRfdXBkYXRlX2NhY2hlX3ZhcmlhbnRzKSwKKyAJCSAgICAgMCwKKy0JCSAgICAgU1BJTkFORF9FQ0NJTkZPKCZtdDI5ZjJnMDFhYmFnZF9vb2JsYXlvdXQsCistCQkJCSAgICAgbXQyOWYyZzAxYWJhZ2RfZWNjX2dldF9zdGF0dXMpKSwKKysJCSAgICAgU1BJTkFORF9FQ0NJTkZPKCZtaWNyb25fOF9vb2JsYXlvdXQsCisrCQkJCSAgICAgbWljcm9uXzhfZWNjX2dldF9zdGF0dXMpKSwKKysJU1BJTkFORF9JTkZPKCJNVDI5RjRHMDFBQkFGRCIsIDB4MzQsCisrCQkgICAgIE5BTkRfTUVNT1JHKDEsIDQwOTYsIDI1NiwgNjQsIDIwNDgsIDQwLCAxLCAxLCAxKSwKKysJCSAgICAgTkFORF9FQ0NSRVEoOCwgNTEyKSwKKysJCSAgICAgU1BJTkFORF9JTkZPX09QX1ZBUklBTlRTKCZxdWFkaW9fcmVhZF9jYWNoZV92YXJpYW50cywKKysJCQkJCSAgICAgICZ4NF93cml0ZV9jYWNoZV92YXJpYW50cywKKysJCQkJCSAgICAgICZ4NF91cGRhdGVfY2FjaGVfdmFyaWFudHMpLAorKwkJICAgICBTUElOQU5EX0hBU19DUl9GRUFUX0JJVCwKKysJCSAgICAgU1BJTkFORF9FQ0NJTkZPKCZtaWNyb25fOF9vb2JsYXlvdXQsCisrCQkJCSAgICAgbWljcm9uXzhfZWNjX2dldF9zdGF0dXMpKSwKKyB9OworIAorIHN0YXRpYyBpbnQgbWljcm9uX3NwaW5hbmRfZGV0ZWN0KHN0cnVjdCBzcGluYW5kX2RldmljZSAqc3BpbmFuZCkKKy0tLSBhL2luY2x1ZGUvbGludXgvbXRkL3NwaW5hbmQuaAorKysrIGIvaW5jbHVkZS9saW51eC9tdGQvc3BpbmFuZC5oCitAQCAtMjcwLDYgKzI3MCw3IEBAIHN0cnVjdCBzcGluYW5kX2VjY19pbmZvIHsKKyB9OworIAorICNkZWZpbmUgU1BJTkFORF9IQVNfUUVfQklUCQlCSVQoMCkKKysjZGVmaW5lIFNQSU5BTkRfSEFTX0NSX0ZFQVRfQklUCQlCSVQoMSkKKyAKKyAvKioKKyAgKiBzdHJ1Y3Qgc3BpbmFuZF9pbmZvIC0gU3RydWN0dXJlIHVzZWQgdG8gZGVzY3JpYmUgU1BJIE5BTkQgY2hpcHMKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wNjcyLWFkZC1GNTBMMUc0MUxCLWFuZC1HRDVGMUdRNVVFeHhHLXNuYW5kLXN1cHBvcnQucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDY3Mi1hZGQtRjUwTDFHNDFMQi1hbmQtR0Q1RjFHUTVVRXh4Ry1zbmFuZC1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZWVlNWQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDY3Mi1hZGQtRjUwTDFHNDFMQi1hbmQtR0Q1RjFHUTVVRXh4Ry1zbmFuZC1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsNzUgQEAKK0luZGV4OiBsaW51eC01LjQuMTU4L2RyaXZlcnMvbXRkL25hbmQvc3BpL2dpZ2FkZXZpY2UuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpbnV4LTUuNC4xNTgub3JpZy9kcml2ZXJzL210ZC9uYW5kL3NwaS9naWdhZGV2aWNlLmMKKysrKyBsaW51eC01LjQuMTU4L2RyaXZlcnMvbXRkL25hbmQvc3BpL2dpZ2FkZXZpY2UuYworQEAgLTM2LDYgKzM2LDE1IEBAIHN0YXRpYyBTUElOQU5EX09QX1ZBUklBTlRTKHJlYWRfY2FjaGVfdmEKKyAJCVNQSU5BTkRfUEFHRV9SRUFEX0ZST01fQ0FDSEVfT1BfM0EodHJ1ZSwgMCwgMSwgTlVMTCwgMCksCisgCQlTUElOQU5EX1BBR0VfUkVBRF9GUk9NX0NBQ0hFX09QXzNBKGZhbHNlLCAwLCAwLCBOVUxMLCAwKSk7CisgCisrLyogUTUgZGV2aWNlcywgUVVBRElPOiBEdW1teSBieXRlcyBvbmx5IHZhbGlkIGZvciAxIEdCaXQgdmFyaWFudHMgKi8KKytzdGF0aWMgU1BJTkFORF9PUF9WQVJJQU5UUyhnZDVmMWdxNV9yZWFkX2NhY2hlX3ZhcmlhbnRzLAorKwkJU1BJTkFORF9QQUdFX1JFQURfRlJPTV9DQUNIRV9RVUFESU9fT1AoMCwgMiwgTlVMTCwgMCksCisrCQlTUElOQU5EX1BBR0VfUkVBRF9GUk9NX0NBQ0hFX1g0X09QKDAsIDEsIE5VTEwsIDApLAorKwkJU1BJTkFORF9QQUdFX1JFQURfRlJPTV9DQUNIRV9EVUFMSU9fT1AoMCwgMSwgTlVMTCwgMCksCisrCQlTUElOQU5EX1BBR0VfUkVBRF9GUk9NX0NBQ0hFX1gyX09QKDAsIDEsIE5VTEwsIDApLAorKwkJU1BJTkFORF9QQUdFX1JFQURfRlJPTV9DQUNIRV9PUCh0cnVlLCAwLCAxLCBOVUxMLCAwKSwKKysJCVNQSU5BTkRfUEFHRV9SRUFEX0ZST01fQ0FDSEVfT1AoZmFsc2UsIDAsIDEsIE5VTEwsIDApKTsKKysKKyBzdGF0aWMgU1BJTkFORF9PUF9WQVJJQU5UUyh3cml0ZV9jYWNoZV92YXJpYW50cywKKyAJCVNQSU5BTkRfUFJPR19MT0FEX1g0KHRydWUsIDAsIE5VTEwsIDApLAorIAkJU1BJTkFORF9QUk9HX0xPQUQodHJ1ZSwgMCwgTlVMTCwgMCkpOworQEAgLTIyMyw3ICsyMzIsNTQgQEAgc3RhdGljIGludCBnZDVmeGdxNHVmeHhnX2VjY19nZXRfc3RhdHVzKAorIAlyZXR1cm4gLUVJTlZBTDsKKyB9CisgCisrc3RhdGljIGludCBlc210XzFfb29ibGF5b3V0X2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHNlY3Rpb24sCisrCQkJCSAgc3RydWN0IG10ZF9vb2JfcmVnaW9uICpyZWdpb24pCisreworKwlpZiAoc2VjdGlvbiA+IDMpCisrCQlyZXR1cm4gLUVSQU5HRTsKKysKKysJcmVnaW9uLT5vZmZzZXQgPSAoMTYgKiBzZWN0aW9uKSArIDg7CisrCXJlZ2lvbi0+bGVuZ3RoID0gODsKKysKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQgZXNtdF8xX29vYmxheW91dF9mcmVlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgc2VjdGlvbiwKKysJCQkJICAgc3RydWN0IG10ZF9vb2JfcmVnaW9uICpyZWdpb24pCisreworKwlpZiAoc2VjdGlvbiA+IDMpCisrCQlyZXR1cm4gLUVSQU5HRTsKKysKKysJcmVnaW9uLT5vZmZzZXQgPSAoMTYgKiBzZWN0aW9uKSArIDI7CisrCXJlZ2lvbi0+bGVuZ3RoID0gNjsKKysKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRkX29vYmxheW91dF9vcHMgZXNtdF8xX29vYmxheW91dCA9IHsKKysJLmVjYyA9IGVzbXRfMV9vb2JsYXlvdXRfZWNjLAorKwkuZnJlZSA9IGVzbXRfMV9vb2JsYXlvdXRfZnJlZSwKKyt9OworKworIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpbmFuZF9pbmZvIGdpZ2FkZXZpY2Vfc3BpbmFuZF90YWJsZVtdID0geworKwlTUElOQU5EX0lORk8oIkY1MEwxRzQxTEIiLCAweDAxLAorKwkJICAgICBOQU5EX01FTU9SRygxLCAyMDQ4LCA2NCwgNjQsIDEwMjQsIDIwLCAxLCAxLCAxKSwKKysJCSAgICAgTkFORF9FQ0NSRVEoOCwgNTEyKSwKKysJCSAgICAgU1BJTkFORF9JTkZPX09QX1ZBUklBTlRTKCZnZDVmMWdxNV9yZWFkX2NhY2hlX3ZhcmlhbnRzLAorKwkJCQkJICAgICAgJndyaXRlX2NhY2hlX3ZhcmlhbnRzLAorKwkJCQkJICAgICAgJnVwZGF0ZV9jYWNoZV92YXJpYW50cyksCisrCQkgICAgIDAsCisrCQkgICAgIFNQSU5BTkRfRUNDSU5GTygmZXNtdF8xX29vYmxheW91dCwKKysJCQkJICAgICBOVUxMKSksCisrCVNQSU5BTkRfSU5GTygiR0Q1RjFHUTVVRXh4RyIsIDB4NTEsCisrCQkgICAgIE5BTkRfTUVNT1JHKDEsIDIwNDgsIDEyOCwgNjQsIDEwMjQsIDIwLCAxLCAxLCAxKSwKKysJCSAgICAgTkFORF9FQ0NSRVEoNCwgNTEyKSwKKysJCSAgICAgU1BJTkFORF9JTkZPX09QX1ZBUklBTlRTKCZnZDVmMWdxNV9yZWFkX2NhY2hlX3ZhcmlhbnRzLAorKwkJCQkJICAgICAgJndyaXRlX2NhY2hlX3ZhcmlhbnRzLAorKwkJCQkJICAgICAgJnVwZGF0ZV9jYWNoZV92YXJpYW50cyksCisrCQkgICAgIFNQSU5BTkRfSEFTX1FFX0JJVCwKKysJCSAgICAgU1BJTkFORF9FQ0NJTkZPKCZnZDVmeGdxNHhhX29vYmxheW91dCwKKysJCQkJICAgICBnZDVmeGdxNHhhX2VjY19nZXRfc3RhdHVzKSksCisgCVNQSU5BTkRfSU5GTygiR0Q1RjFHUTR4QSIsIDB4RjEsCisgCQkgICAgIE5BTkRfTUVNT1JHKDEsIDIwNDgsIDY0LCA2NCwgMTAyNCwgMjAsIDEsIDEsIDEpLAorIAkJICAgICBOQU5EX0VDQ1JFUSg4LCA1MTIpLApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA3MDEtZml4LW10ay1uZmktZHJpdmVyLWRlcGVuZGVuY3kucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDcwMS1maXgtbXRrLW5maS1kcml2ZXItZGVwZW5kZW5jeS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDIzMDc2Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA3MDEtZml4LW10ay1uZmktZHJpdmVyLWRlcGVuZGVuY3kucGF0Y2gKQEAgLTAsMCArMSwxMCBAQAorLS0tIGEvZHJpdmVycy9zcGkvS2NvbmZpZworKysrIGIvZHJpdmVycy9zcGkvS2NvbmZpZworQEAgLTQyOSw2ICs0MjksNyBAQCBjb25maWcgU1BJX01UNjVYWAorIAorIGNvbmZpZyBTUElfTVRLX1NORkkKKyAJdHJpc3RhdGUgIk1lZGlhVGVrIFNQSSBOQU5EIGludGVyZmFjZSIKKysJZGVwZW5kcyBvbiBNVEQKKyAJc2VsZWN0IE1URF9TUElfTkFORAorIAloZWxwCisgCSAgVGhpcyBzZWxlY3RzIHRoZSBTUEkgTkFORCBGTEFTSCBpbnRlcmZhY2UoU05GSSksCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDgwMS1tdGstc2QtYWRkLW10Nzk4Ni1zdXBwb3J0LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA4MDEtbXRrLXNkLWFkZC1tdDc5ODYtc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Yjc2OTkzCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA4MDEtbXRrLXNkLWFkZC1tdDc5ODYtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDI5IEBACistLS0gYS9kcml2ZXJzL21tYy9ob3N0L210ay1zZC5jCisrKysgYi9kcml2ZXJzL21tYy9ob3N0L210ay1zZC5jCitAQCAtNTA4LDYgKzUwOCwxOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG10a19tbWNfY29tcGF0aWJsZSBtCisgCS5zdXBwb3J0XzY0ZyA9IGZhbHNlLAorIH07CisgCisrc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfbW1jX2NvbXBhdGlibGUgbXQ3OTg2X2NvbXBhdCA9IHsKKysJLmNsa19kaXZfYml0cyA9IDEyLAorKwkuaHM0MDBfdHVuZSA9IGZhbHNlLAorKwkucGFkX3R1bmVfcmVnID0gTVNEQ19QQURfVFVORTAsCisrCS5hc3luY19maWZvID0gdHJ1ZSwKKysJLmRhdGFfdHVuZSA9IHRydWUsCisrCS5idXN5X2NoZWNrID0gdHJ1ZSwKKysJLnN0b3BfY2xrX2ZpeCA9IHRydWUsCisrCS5lbmhhbmNlX3J4ID0gdHJ1ZSwKKysJLnN1cHBvcnRfNjRnID0gdHJ1ZSwKKyt9OworKworIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX21tY19jb21wYXRpYmxlIG10ODUxNl9jb21wYXQgPSB7CisgCS5jbGtfZGl2X2JpdHMgPSAxMiwKKyAJLmhzNDAwX3R1bmUgPSBmYWxzZSwKK0BAIC01MzcsNiArNTQ5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXNkY19vZgorIAl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10MjcwMS1tbWMiLCAuZGF0YSA9ICZtdDI3MDFfY29tcGF0fSwKKyAJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDI3MTItbW1jIiwgLmRhdGEgPSAmbXQyNzEyX2NvbXBhdH0sCisgCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NjIyLW1tYyIsIC5kYXRhID0gJm10NzYyMl9jb21wYXR9LAorKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni1tbWMiLCAuZGF0YSA9ICZtdDc5ODZfY29tcGF0fSwKKyAJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDg1MTYtbW1jIiwgLmRhdGEgPSAmbXQ4NTE2X2NvbXBhdH0sCisgCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NjIwLW1tYyIsIC5kYXRhID0gJm10NzYyMF9jb21wYXR9LAorIAl7fQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA5MDAtYnQtbXRrLXNlcmlhbC1maXgucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDkwMC1idC1tdGstc2VyaWFsLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjNhNGFlCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA5MDAtYnQtbXRrLXNlcmlhbC1maXgucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAvODI1MC5oCisrKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC84MjUwLmgKK0BAIC04Miw2ICs4Miw3IEBAIHN0cnVjdCBzZXJpYWw4MjUwX2NvbmZpZyB7CisgI2RlZmluZSBVQVJUX0NBUF9NSU5JCSgxIDw8IDE3KQkvKiBNaW5pIFVBUlQgb24gQkNNMjgzWCBmYW1pbHkgbGFja3M6CisgCQkJCQkgKiBTVE9QIFBBUklUWSBFUEFSIFNQQVIgV0xFTjUgV0xFTjYKKyAJCQkJCSAqLworKyNkZWZpbmUgVUFSVF9DQVBfTk1PRAkoMSA8PCAxOCkJLyogVUFSVCBkb2Vzbid0IGRvIHRlcm1pb3MgKi8KKyAKKyAjZGVmaW5lIFVBUlRfQlVHX1FVT1QJKDEgPDwgMCkJLyogVUFSVCBoYXMgYnVnZ3kgcXVvdCBMU0IgKi8KKyAjZGVmaW5lIFVBUlRfQlVHX1RYRU4JKDEgPDwgMSkJLyogVUFSVCBoYXMgYnVnZ3kgVFggSUlSIHN0YXR1cyAqLworLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAvODI1MF9wb3J0LmMKKysrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLzgyNTBfcG9ydC5jCitAQCAtMjkxLDcgKzI5MSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VyaWFsODI1MF9jb25maWcgdWEKKyAJCS50eF9sb2Fkc3oJPSAxNiwKKyAJCS5mY3IJCT0gVUFSVF9GQ1JfRU5BQkxFX0ZJRk8gfAorIAkJCQkgIFVBUlRfRkNSX0NMRUFSX1JDVlIgfCBVQVJUX0ZDUl9DTEVBUl9YTUlULAorLQkJLmZsYWdzCQk9IFVBUlRfQ0FQX0ZJRk8sCisrCQkuZmxhZ3MJCT0gVUFSVF9DQVBfRklGTyB8IFVBUlRfQ0FQX05NT0QsCisgCX0sCisgCVtQT1JUX05QQ01dID0geworIAkJLm5hbWUJCT0gIk51dm90b24gMTY1NTAiLAorQEAgLTI1OTgsNiArMjU5OCwxMSBAQCBzZXJpYWw4MjUwX2RvX3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvCisgCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisgCXVuc2lnbmVkIGludCBiYXVkLCBxdW90LCBmcmFjID0gMDsKKyAKKysJaWYgKHVwLT5jYXBhYmlsaXRpZXMgJiBVQVJUX0NBUF9OTU9EKSB7CisrCQl0ZXJtaW9zLT5jX2NmbGFnID0gMDsKKysJCXJldHVybjsKKysJfQorKworIAlpZiAodXAtPmNhcGFiaWxpdGllcyAmIFVBUlRfQ0FQX01JTkkpIHsKKyAJCXRlcm1pb3MtPmNfY2ZsYWcgJj0gfihDU1RPUEIgfCBQQVJFTkIgfCBQQVJPREQgfCBDTVNQQVIpOworIAkJaWYgKCh0ZXJtaW9zLT5jX2NmbGFnICYgQ1NJWkUpID09IENTNSB8fApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA5MDAtaTJjLWJ1c3Nlcy1hZGQtbXQ3OTg2LXN1cHBvcnQucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDkwMC1pMmMtYnVzc2VzLWFkZC1tdDc5ODYtc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzc1ODQyCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA5MDAtaTJjLWJ1c3Nlcy1hZGQtbXQ3OTg2LXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXQ2NXh4LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW10NjV4eC5jCitpbmRleCBlMWVmMDEyLi40ZmQ0NzIxIDEwMDY0NAorLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tdDY1eHguYworKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tdDY1eHguYworQEAgLTI4OSw2ICsyODksMTkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfaTJjX2NvbXBhdGlibGUgbXQ3NjIyX2NvbXBhdCA9IHsKKyAJLmx0aW1pbmdfYWRqdXN0ID0gMCwKKyB9OworCisrc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfaTJjX2NvbXBhdGlibGUgbXQ3OTg2X2NvbXBhdCA9IHsKKysJLnF1aXJrcyA9ICZtdDc2MjJfaTJjX3F1aXJrcywKKysJLnJlZ3MgPSBtdF9pMmNfcmVnc192MSwKKysJLnBtaWNfaTJjID0gMCwKKysJLmRjbSA9IDEsCisrCS5hdXRvX3Jlc3RhcnQgPSAxLAorKwkuYXV4X2xlbl9yZWcgPSAxLAorKwkuc3VwcG9ydF8zM2JpdHMgPSAwLAorKwkudGltaW5nX2FkanVzdCA9IDAsCisrCS5kbWFfc3luYyA9IDEsCisrCS5sdGltaW5nX2FkanVzdCA9IDAsCisrfTsKKysKKyBzdGF0aWMgY29uc3Qgc3RydWN0IG10a19pMmNfY29tcGF0aWJsZSBtdDgxNzNfY29tcGF0ID0geworIAkucmVncyA9IG10X2kyY19yZWdzX3YxLAorIAkucG1pY19pMmMgPSAwLAorQEAgLTMxOSw2ICszMzIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfaTJjX29mX21hdGNoW10gPSB7CisgCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ2NTc3LWkyYyIsIC5kYXRhID0gJm10NjU3N19jb21wYXQgfSwKKyAJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDY1ODktaTJjIiwgLmRhdGEgPSAmbXQ2NTg5X2NvbXBhdCB9LAorIAl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzYyMi1pMmMiLCAuZGF0YSA9ICZtdDc2MjJfY29tcGF0IH0sCisrCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LWkyYyIsIC5kYXRhID0gJm10Nzk4Nl9jb21wYXQgfSwKKyAJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtaTJjIiwgLmRhdGEgPSAmbXQ4MTczX2NvbXBhdCB9LAorIAl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE4My1pMmMiLCAuZGF0YSA9ICZtdDgxODNfY29tcGF0IH0sCisgCXt9CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDkwMS1pMmMtYnVzc2VzLWFkZC1tdDc5ODEtc3VwcG9ydC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wOTAxLWkyYy1idXNzZXMtYWRkLW10Nzk4MS1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3OWQyZjgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDkwMS1pMmMtYnVzc2VzLWFkZC1tdDc5ODEtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDQzIEBACitkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tdDY1eHguYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXQ2NXh4LmMKK2luZGV4IGUxZWYwMTIuLjRmZDQ3MjEgMTAwNjQ0CistLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW10NjV4eC5jCisrKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW10NjV4eC5jCitAQCAtMTU3LDcgKzE1Nyw3IEBAIHN0YXRpYyBjb25zdCB1MTYgbXRfaTJjX3JlZ3NfdjFbXSA9IHsKKyAKKyBzdGF0aWMgY29uc3QgdTE2IG10X2kyY19yZWdzX3YyW10gPSB7CisgCVtPRkZTRVRfREFUQV9QT1JUXSA9IDB4MCwKKy0JW09GRlNFVF9TTEFWRV9BRERSXSA9IDB4NCwKKysJW09GRlNFVF9TTEFWRV9BRERSXSA9IDB4OTQsCisgCVtPRkZTRVRfSU5UUl9NQVNLXSA9IDB4OCwKKyAJW09GRlNFVF9JTlRSX1NUQVRdID0gMHhjLAorIAlbT0ZGU0VUX0NPTlRST0xdID0gMHgxMCwKK0BAIC0yODksNiArMjg5LDE4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2kyY19jb21wYXRpYmxlIG10NzYyMl9jb21wYXQgPSB7CisgCS5sdGltaW5nX2FkanVzdCA9IDAsCisgfTsKKyAKKytzdGF0aWMgY29uc3Qgc3RydWN0IG10a19pMmNfY29tcGF0aWJsZSBtdDc5ODFfY29tcGF0ID0geworKwkucmVncyA9IG10X2kyY19yZWdzX3YyLAorKwkucG1pY19pMmMgPSAwLAorKwkuZGNtID0gMCwKKysJLmF1dG9fcmVzdGFydCA9IDEsCisrCS5hdXhfbGVuX3JlZyA9IDEsCisrCS5zdXBwb3J0XzMzYml0cyA9IDEsCisrCS50aW1pbmdfYWRqdXN0ID0gMSwKKysJLmRtYV9zeW5jID0gMSwKKysJLmx0aW1pbmdfYWRqdXN0ID0gMSwKKyt9OworKworIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2kyY19jb21wYXRpYmxlIG10Nzk4Nl9jb21wYXQgPSB7CisgCS5xdWlya3MgPSAmbXQ3NjIyX2kyY19xdWlya3MsCisgCS5yZWdzID0gbXRfaTJjX3JlZ3NfdjEsCitAQCAtMzMyLDYgKzM0NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19pMmNfb2ZfbWF0Y2hbXSA9IHsKKyAJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDY1NzctaTJjIiwgLmRhdGEgPSAmbXQ2NTc3X2NvbXBhdCB9LAorIAl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NjU4OS1pMmMiLCAuZGF0YSA9ICZtdDY1ODlfY29tcGF0IH0sCisgCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NjIyLWkyYyIsIC5kYXRhID0gJm10NzYyMl9jb21wYXQgfSwKKysJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODEtaTJjIiwgLmRhdGEgPSAmbXQ3OTgxX2NvbXBhdCB9LAorIAl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni1pMmMiLCAuZGF0YSA9ICZtdDc5ODZfY29tcGF0IH0sCisgCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWkyYyIsIC5kYXRhID0gJm10ODE3M19jb21wYXQgfSwKKyAJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxODMtaTJjIiwgLmRhdGEgPSAmbXQ4MTgzX2NvbXBhdCB9LAorLS0gCisyLjE4LjAKKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA5MzAtcHdtLWFkZC1tdDc5ODYtc3VwcG9ydC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wOTMwLXB3bS1hZGQtbXQ3OTg2LXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc5MWQzYQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wOTMwLXB3bS1hZGQtbXQ3OTg2LXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHdtL3B3bS1tZWRpYXRlay5jIGIvZHJpdmVycy9wd20vcHdtLW1lZGlhdGVrLmMKK2luZGV4IGI5NGUwZDAuLjM1YTBkYjIgMTAwNjQ0CistLS0gYS9kcml2ZXJzL3B3bS9wd20tbWVkaWF0ZWsuYworKysrIGIvZHJpdmVycy9wd20vcHdtLW1lZGlhdGVrLmMKK0BAIC0zMDIsNiArMzAyLDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHdtX21lZGlhdGVrX29mX2RhdGEgbXQ3NjI5X3B3bV9kYXRhID0geworIAkucHdtNDVfZml4dXAgPSBmYWxzZSwKKyB9OworCisrc3RhdGljIGNvbnN0IHN0cnVjdCBwd21fbWVkaWF0ZWtfb2ZfZGF0YSBtdDc5ODZfcHdtX2RhdGEgPSB7CisrCS5udW1fcHdtcyA9IDIsCisrCS5wd200NV9maXh1cCA9IGZhbHNlLAorK307CisrCisgc3RhdGljIGNvbnN0IHN0cnVjdCBwd21fbWVkaWF0ZWtfb2ZfZGF0YSBtdDg1MTZfcHdtX2RhdGEgPSB7CisgCS5udW1fcHdtcyA9IDUsCisgCS5wd200NV9maXh1cCA9IGZhbHNlLAorQEAgLTMxMyw2ICszMTgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBwd21fbWVkaWF0ZWtfb2ZfbWF0Y2hbXSA9IHsKKyAJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc2MjMtcHdtIiwgLmRhdGEgPSAmbXQ3NjIzX3B3bV9kYXRhIH0sCisgCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NjI4LXB3bSIsIC5kYXRhID0gJm10NzYyOF9wd21fZGF0YSB9LAorIAl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzYyOS1wd20iLCAuZGF0YSA9ICZtdDc2MjlfcHdtX2RhdGEgfSwKKysJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODYtcHdtIiwgLmRhdGEgPSAmbXQ3OTg2X3B3bV9kYXRhIH0sCisgCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4NTE2LXB3bSIsIC5kYXRhID0gJm10ODUxNl9wd21fZGF0YSB9LAorIAl7IH0sCisgfTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wOTMxLXB3bS1hZGQtbXQ3OTgxLXN1cHBvcnQucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDkzMS1wd20tYWRkLW10Nzk4MS1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MjYzODMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDkzMS1wd20tYWRkLW10Nzk4MS1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsMTMzIEBACitkaWZmIC0tZ2l0IGEvZHJpdmVycy9wd20vcHdtLW1lZGlhdGVrLmMgYi9kcml2ZXJzL3B3bS9wd20tbWVkaWF0ZWsuYworaW5kZXggN2M1NmVlMi4uM2E1YTQ1NiAxMDA2NDQKKy0tLSBhL2RyaXZlcnMvcHdtL3B3bS1tZWRpYXRlay5jCisrKysgYi9kcml2ZXJzL3B3bS9wd20tbWVkaWF0ZWsuYworQEAgLTMzLDEwICszMiwxMyBAQAorICNkZWZpbmUgUFdNNDVUSFJFU19GSVhVUAkweDM0CisgCisgI2RlZmluZSBQV01fQ0xLX0RJVl9NQVgJCTcKKysjZGVmaW5lIFJFR19WMQkJCTEKKysjZGVmaW5lIFJFR19WMgkJCTIKKyAKKyBzdHJ1Y3QgcHdtX21lZGlhdGVrX29mX2RhdGEgeworIAl1bnNpZ25lZCBpbnQgbnVtX3B3bXM7CisgCWJvb2wgcHdtNDVfZml4dXA7CisrCWludCByZWdfdmVyOworIH07CisgCisgLyoqCitAQCAtNTcsMTAgKzU5LDE0IEBAIHN0cnVjdCBwd21fbWVkaWF0ZWtfY2hpcCB7CisgCWNvbnN0IHN0cnVjdCBwd21fbWVkaWF0ZWtfb2ZfZGF0YSAqc29jOworIH07CisgCistc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBwd21fbWVkaWF0ZWtfcmVnX29mZnNldFtdID0geworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbXRrX3B3bV9yZWdfb2Zmc2V0X3YxW10gPSB7CisgCTB4MDAxMCwgMHgwMDUwLCAweDAwOTAsIDB4MDBkMCwgMHgwMTEwLCAweDAxNTAsIDB4MDE5MCwgMHgwMjIwCisgfTsKKyAKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG10a19wd21fcmVnX29mZnNldF92MltdID0geworKwkweDAwODAsIDB4MDBjMCwgMHgwMTAwLCAweDAxNDAsIDB4MDE4MCwgMHgxYzAsIDB4MjAwLCAweDAyNDAKKyt9OworKworIHN0YXRpYyBpbmxpbmUgc3RydWN0IHB3bV9tZWRpYXRla19jaGlwICoKKyB0b19wd21fbWVkaWF0ZWtfY2hpcChzdHJ1Y3QgcHdtX2NoaXAgKmNoaXApCisgeworQEAgLTEwOCwxNCArMTE0LDM4IEBAIHN0YXRpYyB2b2lkIHB3bV9tZWRpYXRla19jbGtfZGlzYWJsZShzdHJ1Y3QgcHdtX2NoaXAgKmNoaXAsCisgc3RhdGljIGlubGluZSB1MzIgcHdtX21lZGlhdGVrX3JlYWRsKHN0cnVjdCBwd21fbWVkaWF0ZWtfY2hpcCAqY2hpcCwKKyAJCQkJICAgICB1bnNpZ25lZCBpbnQgbnVtLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQorIHsKKy0JcmV0dXJuIHJlYWRsKGNoaXAtPnJlZ3MgKyBwd21fbWVkaWF0ZWtfcmVnX29mZnNldFtudW1dICsgb2Zmc2V0KTsKKysJdTMyIHB3bV9vZmZzZXQ7CisrCisrCXN3aXRjaCAoY2hpcC0+c29jLT5yZWdfdmVyKSB7CisrCWNhc2UgUkVHX1YyOgorKwkJcHdtX29mZnNldCA9IG10a19wd21fcmVnX29mZnNldF92MltudW1dOworKwkJYnJlYWs7CisrCisrCWNhc2UgUkVHX1YxOgorKwlkZWZhdWx0OgorKwkJcHdtX29mZnNldCA9IG10a19wd21fcmVnX29mZnNldF92MVtudW1dOworKwl9CisrCisrCXJldHVybiByZWFkbChjaGlwLT5yZWdzICsgcHdtX29mZnNldCArIG9mZnNldCk7CisgfQorIAorIHN0YXRpYyBpbmxpbmUgdm9pZCBwd21fbWVkaWF0ZWtfd3JpdGVsKHN0cnVjdCBwd21fbWVkaWF0ZWtfY2hpcCAqY2hpcCwKKyAJCQkJICAgICAgIHVuc2lnbmVkIGludCBudW0sIHVuc2lnbmVkIGludCBvZmZzZXQsCisgCQkJCSAgICAgICB1MzIgdmFsdWUpCisgeworLQl3cml0ZWwodmFsdWUsIGNoaXAtPnJlZ3MgKyBwd21fbWVkaWF0ZWtfcmVnX29mZnNldFtudW1dICsgb2Zmc2V0KTsKKysJdTMyIHB3bV9vZmZzZXQ7CisrCisrCXN3aXRjaCAoY2hpcC0+c29jLT5yZWdfdmVyKSB7CisrCWNhc2UgUkVHX1YyOgorKwkJcHdtX29mZnNldCA9IG10a19wd21fcmVnX29mZnNldF92MltudW1dOworKwkJYnJlYWs7CisrCisrCWNhc2UgUkVHX1YxOgorKwlkZWZhdWx0OgorKwkJcHdtX29mZnNldCA9IG10a19wd21fcmVnX29mZnNldF92MVtudW1dOworKwl9CisrCisrCXdyaXRlbCh2YWx1ZSwgY2hpcC0+cmVncyArIHB3bV9vZmZzZXQgKyBvZmZzZXQpOworIH0KKyAKKyBzdGF0aWMgaW50IHB3bV9tZWRpYXRla19jb25maWcoc3RydWN0IHB3bV9jaGlwICpjaGlwLCBzdHJ1Y3QgcHdtX2RldmljZSAqcHdtLAorQEAgLTI4MSwzNiArMzExLDQ5IEBAIHN0YXRpYyBpbnQgcHdtX21lZGlhdGVrX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHdtX21lZGlhdGVrX29mX2RhdGEgbXQyNzEyX3B3bV9kYXRhID0geworIAkubnVtX3B3bXMgPSA4LAorIAkucHdtNDVfZml4dXAgPSBmYWxzZSwKKysJLnJlZ192ZXIgPSBSRUdfVjEsCisgfTsKKyAKKyBzdGF0aWMgY29uc3Qgc3RydWN0IHB3bV9tZWRpYXRla19vZl9kYXRhIG10NzYyMl9wd21fZGF0YSA9IHsKKyAJLm51bV9wd21zID0gNiwKKyAJLnB3bTQ1X2ZpeHVwID0gZmFsc2UsCisrCS5yZWdfdmVyID0gUkVHX1YxLAorIH07CisgCisgc3RhdGljIGNvbnN0IHN0cnVjdCBwd21fbWVkaWF0ZWtfb2ZfZGF0YSBtdDc2MjNfcHdtX2RhdGEgPSB7CisgCS5udW1fcHdtcyA9IDUsCisgCS5wd200NV9maXh1cCA9IHRydWUsCisrCS5yZWdfdmVyID0gUkVHX1YxLAorIH07CisgCisgc3RhdGljIGNvbnN0IHN0cnVjdCBwd21fbWVkaWF0ZWtfb2ZfZGF0YSBtdDc2MjhfcHdtX2RhdGEgPSB7CisgCS5udW1fcHdtcyA9IDQsCisgCS5wd200NV9maXh1cCA9IHRydWUsCisrCS5yZWdfdmVyID0gUkVHX1YxLAorIH07CisgCisgc3RhdGljIGNvbnN0IHN0cnVjdCBwd21fbWVkaWF0ZWtfb2ZfZGF0YSBtdDc2MjlfcHdtX2RhdGEgPSB7CisgCS5udW1fcHdtcyA9IDEsCisgCS5wd200NV9maXh1cCA9IGZhbHNlLAorKwkucmVnX3ZlciA9IFJFR19WMSwKKyt9OworKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHdtX21lZGlhdGVrX29mX2RhdGEgbXQ3OTgxX3B3bV9kYXRhID0geworKwkubnVtX3B3bXMgPSAzLAorKwkucHdtNDVfZml4dXAgPSBmYWxzZSwKKysJLnJlZ192ZXIgPSBSRUdfVjIsCisgfTsKKyAKKyBzdGF0aWMgY29uc3Qgc3RydWN0IHB3bV9tZWRpYXRla19vZl9kYXRhIG10Nzk4Nl9wd21fZGF0YSA9IHsKKyAJLm51bV9wd21zID0gMiwKKyAJLnB3bTQ1X2ZpeHVwID0gZmFsc2UsCisrCS5yZWdfdmVyID0gUkVHX1YyLAorIH07CisgCisgc3RhdGljIGNvbnN0IHN0cnVjdCBwd21fbWVkaWF0ZWtfb2ZfZGF0YSBtdDg1MTZfcHdtX2RhdGEgPSB7CisgCS5udW1fcHdtcyA9IDUsCisgCS5wd200NV9maXh1cCA9IGZhbHNlLAorKwkucmVnX3ZlciA9IFJFR19WMSwKKyB9OworIAorIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHB3bV9tZWRpYXRla19vZl9tYXRjaFtdID0geworQEAgLTMxOSw2ICszNjIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBwd21fbWVkaWF0ZWtfb2ZfbWF0Y2hbXSA9IHsKKyAJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc2MjMtcHdtIiwgLmRhdGEgPSAmbXQ3NjIzX3B3bV9kYXRhIH0sCisgCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NjI4LXB3bSIsIC5kYXRhID0gJm10NzYyOF9wd21fZGF0YSB9LAorIAl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzYyOS1wd20iLCAuZGF0YSA9ICZtdDc2MjlfcHdtX2RhdGEgfSwKKysJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODEtcHdtIiwgLmRhdGEgPSAmbXQ3OTgxX3B3bV9kYXRhIH0sCisgCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXB3bSIsIC5kYXRhID0gJm10Nzk4Nl9wd21fZGF0YSB9LAorIAl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODUxNi1wd20iLCAuZGF0YSA9ICZtdDg1MTZfcHdtX2RhdGEgfSwKKyAJeyB9LApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA5NjAtd2F0Y2hkb2ctYWRkLW10Nzk4Ni1hc3NlcnQucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDk2MC13YXRjaGRvZy1hZGQtbXQ3OTg2LWFzc2VydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTlmYzEwCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA5NjAtd2F0Y2hkb2ctYWRkLW10Nzk4Ni1hc3NlcnQucGF0Y2gKQEAgLTAsMCArMSwzMjggQEAKK2RpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL210a193ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvbXRrX3dkdC5jCitpbmRleCA5YzNkMDAzLi4zMDEyN2QxIDEwMDY0NAorLS0tIGEvZHJpdmVycy93YXRjaGRvZy9tdGtfd2R0LmMKKysrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvbXRrX3dkdC5jCitAQCAtOSw2ICs5LDggQEAKKyAgKiBCYXNlZCBvbiBzdW54aV93ZHQuYworICAqLworIAorKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9yZXNldC9tdDc5ODYtcmVzZXRzLmg+CisrI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisgI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisgI2luY2x1ZGUgPGxpbnV4L2lvLmg+CitAQCAtMTYsMTMgKzE4LDE1IEBACisgI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorICNpbmNsdWRlIDxsaW51eC9vZi5oPgorKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisrI2luY2x1ZGUgPGxpbnV4L3Jlc2V0LWNvbnRyb2xsZXIuaD4KKyAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyAjaW5jbHVkZSA8bGludXgvd2F0Y2hkb2cuaD4KKy0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKysjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisgCisgI2RlZmluZSBXRFRfTUFYX1RJTUVPVVQJCTMxCistI2RlZmluZSBXRFRfTUlOX1RJTUVPVVQJCTEKKysjZGVmaW5lIFdEVF9NSU5fVElNRU9VVAkJMgorICNkZWZpbmUgV0RUX0xFTkdUSF9USU1FT1VUKG4pCSgobikgPDwgNSkKKyAKKyAjZGVmaW5lIFdEVF9MRU5HVEgJCTB4MDQKK0BAIC00NCw2ICs0OCw5IEBACisgI2RlZmluZSBXRFRfU1dSU1QJCTB4MTQKKyAjZGVmaW5lIFdEVF9TV1JTVF9LRVkJCTB4MTIwOQorIAorKyNkZWZpbmUgV0RUX1NXU1lTUlNUCQkweDE4VQorKyNkZWZpbmUgV0RUX1NXU1lTX1JTVF9LRVkJMHg4ODAwMDAwMAorKworICNkZWZpbmUgRFJWX05BTUUJCSJtdGstd2R0IgorICNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjAiCisgCitAQCAtNTMsOCArNjAsOTEgQEAgc3RhdGljIHVuc2lnbmVkIGludCB0aW1lb3V0OworIHN0cnVjdCBtdGtfd2R0X2RldiB7CisgCXN0cnVjdCB3YXRjaGRvZ19kZXZpY2Ugd2R0X2RldjsKKyAJdm9pZCBfX2lvbWVtICp3ZHRfYmFzZTsKKysJc3BpbmxvY2tfdCBsb2NrOyAvKiBwcm90ZWN0cyBXRFRfU1dTWVNSU1QgcmVnICovCisrCXN0cnVjdCByZXNldF9jb250cm9sbGVyX2RldiByY2RldjsKKysJYm9vbCBkaXNhYmxlX3dkdF9leHRyc3Q7CisrfTsKKysKKytzdHJ1Y3QgbXRrX3dkdF9kYXRhIHsKKysJaW50IHRvcHJndV9zd19yc3RfbnVtOworK307CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfd2R0X2RhdGEgbXQ3OTg2X2RhdGEgPSB7CisrCS50b3ByZ3Vfc3dfcnN0X251bSA9IE1UNzk4Nl9UT1BSR1VfU1dfUlNUX05VTSwKKyt9OworKworK3N0YXRpYyBpbnQgdG9wcmd1X3Jlc2V0X3VwZGF0ZShzdHJ1Y3QgcmVzZXRfY29udHJvbGxlcl9kZXYgKnJjZGV2LAorKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGlkLCBib29sIGFzc2VydCkKKyt7CisrCXVuc2lnbmVkIGludCB0bXA7CisrCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisrCXN0cnVjdCBtdGtfd2R0X2RldiAqZGF0YSA9CisrCQkgY29udGFpbmVyX29mKHJjZGV2LCBzdHJ1Y3QgbXRrX3dkdF9kZXYsIHJjZGV2KTsKKysKKysJc3Bpbl9sb2NrX2lycXNhdmUoJmRhdGEtPmxvY2ssIGZsYWdzKTsKKysKKysJdG1wID0gcmVhZGwoZGF0YS0+d2R0X2Jhc2UgKyBXRFRfU1dTWVNSU1QpOworKwlpZiAoYXNzZXJ0KQorKwkJdG1wIHw9IEJJVChpZCk7CisrCWVsc2UKKysJCXRtcCAmPSB+QklUKGlkKTsKKysJdG1wIHw9IFdEVF9TV1NZU19SU1RfS0VZOworKwl3cml0ZWwodG1wLCBkYXRhLT53ZHRfYmFzZSArIFdEVF9TV1NZU1JTVCk7CisrCisrCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRhdGEtPmxvY2ssIGZsYWdzKTsKKysKKysJcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQgdG9wcmd1X3Jlc2V0X2Fzc2VydChzdHJ1Y3QgcmVzZXRfY29udHJvbGxlcl9kZXYgKnJjZGV2LAorKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGlkKQorK3sKKysJcmV0dXJuIHRvcHJndV9yZXNldF91cGRhdGUocmNkZXYsIGlkLCB0cnVlKTsKKyt9CisrCisrc3RhdGljIGludCB0b3ByZ3VfcmVzZXRfZGVhc3NlcnQoc3RydWN0IHJlc2V0X2NvbnRyb2xsZXJfZGV2ICpyY2RldiwKKysJCQkJIHVuc2lnbmVkIGxvbmcgaWQpCisreworKwlyZXR1cm4gdG9wcmd1X3Jlc2V0X3VwZGF0ZShyY2RldiwgaWQsIGZhbHNlKTsKKyt9CisrCisrc3RhdGljIGludCB0b3ByZ3VfcmVzZXQoc3RydWN0IHJlc2V0X2NvbnRyb2xsZXJfZGV2ICpyY2RldiwKKysJCQl1bnNpZ25lZCBsb25nIGlkKQorK3sKKysJaW50IHJldDsKKysKKysJcmV0ID0gdG9wcmd1X3Jlc2V0X2Fzc2VydChyY2RldiwgaWQpOworKwlpZiAocmV0KQorKwkJcmV0dXJuIHJldDsKKysKKysJcmV0dXJuIHRvcHJndV9yZXNldF9kZWFzc2VydChyY2RldiwgaWQpOworK30KKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IHJlc2V0X2NvbnRyb2xfb3BzIHRvcHJndV9yZXNldF9vcHMgPSB7CisrCS5hc3NlcnQgPSB0b3ByZ3VfcmVzZXRfYXNzZXJ0LAorKwkuZGVhc3NlcnQgPSB0b3ByZ3VfcmVzZXRfZGVhc3NlcnQsCisrCS5yZXNldCA9IHRvcHJndV9yZXNldCwKKyB9OworIAorK3N0YXRpYyBpbnQgdG9wcmd1X3JlZ2lzdGVyX3Jlc2V0X2NvbnRyb2xsZXIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKysJCQkJCSAgICBpbnQgcnN0X251bSkKKyt7CisrCWludCByZXQ7CisrCXN0cnVjdCBtdGtfd2R0X2RldiAqbXRrX3dkdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworKworKwlzcGluX2xvY2tfaW5pdCgmbXRrX3dkdC0+bG9jayk7CisrCisrCW10a193ZHQtPnJjZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7CisrCW10a193ZHQtPnJjZGV2Lm5yX3Jlc2V0cyA9IHJzdF9udW07CisrCW10a193ZHQtPnJjZGV2Lm9wcyA9ICZ0b3ByZ3VfcmVzZXRfb3BzOworKwltdGtfd2R0LT5yY2Rldi5vZl9ub2RlID0gcGRldi0+ZGV2Lm9mX25vZGU7CisrCXJldCA9IGRldm1fcmVzZXRfY29udHJvbGxlcl9yZWdpc3RlcigmcGRldi0+ZGV2LCAmbXRrX3dkdC0+cmNkZXYpOworKwlpZiAocmV0ICE9IDApCisrCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisrCQkJImNvdWxkbid0IHJlZ2lzdGVyIHdkdCByZXNldCBjb250cm9sbGVyOiAlZFxuIiwgcmV0KTsKKysJcmV0dXJuIHJldDsKKyt9CisrCisgc3RhdGljIGludCBtdGtfd2R0X3Jlc3RhcnQoc3RydWN0IHdhdGNoZG9nX2RldmljZSAqd2R0X2RldiwKKyAJCQkgICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqZGF0YSkKKyB7CitAQCAtODksMTIgKzE3OSwxOSBAQCBzdGF0aWMgaW50IG10a193ZHRfc2V0X3RpbWVvdXQoc3RydWN0IHdhdGNoZG9nX2RldmljZSAqd2R0X2RldiwKKyAJdTMyIHJlZzsKKyAKKyAJd2R0X2Rldi0+dGltZW91dCA9IHRpbWVvdXQ7CisrCS8qCisrCSAqIEluIGR1YWwgbW9kZSwgaXJxIHdpbGwgYmUgdHJpZ2dlcmVkIGF0IHRpbWVvdXQgLyAyCisrCSAqIHRoZSByZWFsIHRpbWVvdXQgb2NjdXJzIGF0IHRpbWVvdXQKKysJICovCisrCWlmICh3ZHRfZGV2LT5wcmV0aW1lb3V0KQorKwkJd2R0X2Rldi0+cHJldGltZW91dCA9IHRpbWVvdXQgLyAyOworIAorIAkvKgorIAkgKiBPbmUgYml0IGlzIHRoZSB2YWx1ZSBvZiA1MTIgdGlja3MKKyAJICogVGhlIGNsb2NrIGhhcyAzMiBLSHoKKyAJICovCistCXJlZyA9IFdEVF9MRU5HVEhfVElNRU9VVCh0aW1lb3V0IDw8IDYpIHwgV0RUX0xFTkdUSF9LRVk7CisrCXJlZyA9IFdEVF9MRU5HVEhfVElNRU9VVCgodGltZW91dCAtIHdkdF9kZXYtPnByZXRpbWVvdXQpIDw8IDYpCisrCQkJfCBXRFRfTEVOR1RIX0tFWTsKKyAJaW93cml0ZTMyKHJlZywgd2R0X2Jhc2UgKyBXRFRfTEVOR1RIKTsKKyAKKyAJbXRrX3dkdF9waW5nKHdkdF9kZXYpOworQEAgLTEwMiw2ICsxOTksMTkgQEAgc3RhdGljIGludCBtdGtfd2R0X3NldF90aW1lb3V0KHN0cnVjdCB3YXRjaGRvZ19kZXZpY2UgKndkdF9kZXYsCisgCXJldHVybiAwOworIH0KKyAKKytzdGF0aWMgdm9pZCBtdGtfd2R0X2luaXQoc3RydWN0IHdhdGNoZG9nX2RldmljZSAqd2R0X2RldikKKyt7CisrCXN0cnVjdCBtdGtfd2R0X2RldiAqbXRrX3dkdCA9IHdhdGNoZG9nX2dldF9kcnZkYXRhKHdkdF9kZXYpOworKwl2b2lkIF9faW9tZW0gKndkdF9iYXNlOworKworKwl3ZHRfYmFzZSA9IG10a193ZHQtPndkdF9iYXNlOworKworKwlpZiAocmVhZGwod2R0X2Jhc2UgKyBXRFRfTU9ERSkgJiBXRFRfTU9ERV9FTikgeworKwkJc2V0X2JpdChXRE9HX0hXX1JVTk5JTkcsICZ3ZHRfZGV2LT5zdGF0dXMpOworKwkJbXRrX3dkdF9zZXRfdGltZW91dCh3ZHRfZGV2LCB3ZHRfZGV2LT50aW1lb3V0KTsKKysJfQorK30KKysKKyBzdGF0aWMgaW50IG10a193ZHRfc3RvcChzdHJ1Y3Qgd2F0Y2hkb2dfZGV2aWNlICp3ZHRfZGV2KQorIHsKKyAJc3RydWN0IG10a193ZHRfZGV2ICptdGtfd2R0ID0gd2F0Y2hkb2dfZ2V0X2RydmRhdGEod2R0X2Rldik7CitAQCAtMTI4LDEzICsyMzgsNTAgQEAgc3RhdGljIGludCBtdGtfd2R0X3N0YXJ0KHN0cnVjdCB3YXRjaGRvZ19kZXZpY2UgKndkdF9kZXYpCisgCQlyZXR1cm4gcmV0OworIAorIAlyZWcgPSBpb3JlYWQzMih3ZHRfYmFzZSArIFdEVF9NT0RFKTsKKy0JcmVnICY9IH4oV0RUX01PREVfSVJRX0VOIHwgV0RUX01PREVfRFVBTF9FTik7CisrCWlmICh3ZHRfZGV2LT5wcmV0aW1lb3V0KQorKwkJcmVnIHw9IChXRFRfTU9ERV9JUlFfRU4gfCBXRFRfTU9ERV9EVUFMX0VOKTsKKysJZWxzZQorKwkJcmVnICY9IH4oV0RUX01PREVfSVJRX0VOIHwgV0RUX01PREVfRFVBTF9FTik7CisrCWlmIChtdGtfd2R0LT5kaXNhYmxlX3dkdF9leHRyc3QpCisrCQlyZWcgJj0gfldEVF9NT0RFX0VYUlNUX0VOOworIAlyZWcgfD0gKFdEVF9NT0RFX0VOIHwgV0RUX01PREVfS0VZKTsKKyAJaW93cml0ZTMyKHJlZywgd2R0X2Jhc2UgKyBXRFRfTU9ERSk7CisgCisgCXJldHVybiAwOworIH0KKyAKKytzdGF0aWMgaW50IG10a193ZHRfc2V0X3ByZXRpbWVvdXQoc3RydWN0IHdhdGNoZG9nX2RldmljZSAqd2RkLAorKwkJCQkgIHVuc2lnbmVkIGludCB0aW1lb3V0KQorK3sKKysJc3RydWN0IG10a193ZHRfZGV2ICptdGtfd2R0ID0gd2F0Y2hkb2dfZ2V0X2RydmRhdGEod2RkKTsKKysJdm9pZCBfX2lvbWVtICp3ZHRfYmFzZSA9IG10a193ZHQtPndkdF9iYXNlOworKwl1MzIgcmVnID0gaW9yZWFkMzIod2R0X2Jhc2UgKyBXRFRfTU9ERSk7CisrCisrCWlmICh0aW1lb3V0ICYmICF3ZGQtPnByZXRpbWVvdXQpIHsKKysJCXdkZC0+cHJldGltZW91dCA9IHdkZC0+dGltZW91dCAvIDI7CisrCQlyZWcgfD0gKFdEVF9NT0RFX0lSUV9FTiB8IFdEVF9NT0RFX0RVQUxfRU4pOworKwl9IGVsc2UgaWYgKCF0aW1lb3V0ICYmIHdkZC0+cHJldGltZW91dCkgeworKwkJd2RkLT5wcmV0aW1lb3V0ID0gMDsKKysJCXJlZyAmPSB+KFdEVF9NT0RFX0lSUV9FTiB8IFdEVF9NT0RFX0RVQUxfRU4pOworKwl9IGVsc2UgeworKwkJcmV0dXJuIDA7CisrCX0KKysKKysJcmVnIHw9IFdEVF9NT0RFX0tFWTsKKysJaW93cml0ZTMyKHJlZywgd2R0X2Jhc2UgKyBXRFRfTU9ERSk7CisrCisrCXJldHVybiBtdGtfd2R0X3NldF90aW1lb3V0KHdkZCwgd2RkLT50aW1lb3V0KTsKKyt9CisrCisrc3RhdGljIGlycXJldHVybl90IG10a193ZHRfaXNyKGludCBpcnEsIHZvaWQgKmFyZykKKyt7CisrCXN0cnVjdCB3YXRjaGRvZ19kZXZpY2UgKndkZCA9IGFyZzsKKysKKysJd2F0Y2hkb2dfbm90aWZ5X3ByZXRpbWVvdXQod2RkKTsKKysKKysJcmV0dXJuIElSUV9IQU5ETEVEOworK30KKysKKyBzdGF0aWMgY29uc3Qgc3RydWN0IHdhdGNoZG9nX2luZm8gbXRrX3dkdF9pbmZvID0geworIAkuaWRlbnRpdHkJPSBEUlZfTkFNRSwKKyAJLm9wdGlvbnMJPSBXRElPRl9TRVRUSU1FT1VUIHwKK0BAIC0xNDIsMTIgKzI4OSwyMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHdhdGNoZG9nX2luZm8gbXRrX3dkdF9pbmZvID0geworIAkJCSAgV0RJT0ZfTUFHSUNDTE9TRSwKKyB9OworIAorK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBtdGtfd2R0X3B0X2luZm8gPSB7CisrCS5pZGVudGl0eQk9IERSVl9OQU1FLAorKwkub3B0aW9ucwk9IFdESU9GX1NFVFRJTUVPVVQgfAorKwkJCSAgV0RJT0ZfUFJFVElNRU9VVCB8CisrCQkJICBXRElPRl9LRUVQQUxJVkVQSU5HIHwKKysJCQkgIFdESU9GX01BR0lDQ0xPU0UsCisrfTsKKysKKyBzdGF0aWMgY29uc3Qgc3RydWN0IHdhdGNoZG9nX29wcyBtdGtfd2R0X29wcyA9IHsKKyAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorIAkuc3RhcnQJCT0gbXRrX3dkdF9zdGFydCwKKyAJLnN0b3AJCT0gbXRrX3dkdF9zdG9wLAorIAkucGluZwkJPSBtdGtfd2R0X3BpbmcsCisgCS5zZXRfdGltZW91dAk9IG10a193ZHRfc2V0X3RpbWVvdXQsCisrCS5zZXRfcHJldGltZW91dAk9IG10a193ZHRfc2V0X3ByZXRpbWVvdXQsCisgCS5yZXN0YXJ0CT0gbXRrX3dkdF9yZXN0YXJ0LAorIH07CisgCitAQCAtMTU1LDcgKzMxMSw4IEBAIHN0YXRpYyBpbnQgbXRrX3dkdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorIHsKKyAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKyAJc3RydWN0IG10a193ZHRfZGV2ICptdGtfd2R0OworLQlpbnQgZXJyOworKwljb25zdCBzdHJ1Y3QgbXRrX3dkdF9kYXRhICp3ZHRfZGF0YTsKKysJaW50IGVyciwgaXJxOworIAorIAltdGtfd2R0ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCptdGtfd2R0KSwgR0ZQX0tFUk5FTCk7CisgCWlmICghbXRrX3dkdCkKK0BAIC0xNjcsMTAgKzMyNCwyNSBAQCBzdGF0aWMgaW50IG10a193ZHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKKyAJaWYgKElTX0VSUihtdGtfd2R0LT53ZHRfYmFzZSkpCisgCQlyZXR1cm4gUFRSX0VSUihtdGtfd2R0LT53ZHRfYmFzZSk7CisgCistCW10a193ZHQtPndkdF9kZXYuaW5mbyA9ICZtdGtfd2R0X2luZm87CisrCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisrCWlmIChpcnEgPiAwKSB7CisrCQllcnIgPSBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIGlycSwgbXRrX3dkdF9pc3IsIDAsICJ3ZHRfYmFyayIsCisrCQkJCSAgICAgICAmbXRrX3dkdC0+d2R0X2Rldik7CisrCQlpZiAoZXJyKQorKwkJCXJldHVybiBlcnI7CisrCisrCQltdGtfd2R0LT53ZHRfZGV2LmluZm8gPSAmbXRrX3dkdF9wdF9pbmZvOworKwkJbXRrX3dkdC0+d2R0X2Rldi5wcmV0aW1lb3V0ID0gV0RUX01BWF9USU1FT1VUIC8gMjsKKysJfSBlbHNlIHsKKysJCWlmIChpcnEgPT0gLUVQUk9CRV9ERUZFUikKKysJCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKysKKysJCW10a193ZHQtPndkdF9kZXYuaW5mbyA9ICZtdGtfd2R0X2luZm87CisrCX0KKysKKyAJbXRrX3dkdC0+d2R0X2Rldi5vcHMgPSAmbXRrX3dkdF9vcHM7CisgCW10a193ZHQtPndkdF9kZXYudGltZW91dCA9IFdEVF9NQVhfVElNRU9VVDsKKy0JbXRrX3dkdC0+d2R0X2Rldi5tYXhfdGltZW91dCA9IFdEVF9NQVhfVElNRU9VVDsKKysJbXRrX3dkdC0+d2R0X2Rldi5tYXhfaHdfaGVhcnRiZWF0X21zID0gV0RUX01BWF9USU1FT1VUICogMTAwMDsKKyAJbXRrX3dkdC0+d2R0X2Rldi5taW5fdGltZW91dCA9IFdEVF9NSU5fVElNRU9VVDsKKyAJbXRrX3dkdC0+d2R0X2Rldi5wYXJlbnQgPSBkZXY7CisgCitAQCAtMTgwLDcgKzM1Miw3IEBAIHN0YXRpYyBpbnQgbXRrX3dkdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorIAorIAl3YXRjaGRvZ19zZXRfZHJ2ZGF0YSgmbXRrX3dkdC0+d2R0X2RldiwgbXRrX3dkdCk7CisgCistCW10a193ZHRfc3RvcCgmbXRrX3dkdC0+d2R0X2Rldik7CisrCW10a193ZHRfaW5pdCgmbXRrX3dkdC0+d2R0X2Rldik7CisgCisgCXdhdGNoZG9nX3N0b3Bfb25fcmVib290KCZtdGtfd2R0LT53ZHRfZGV2KTsKKyAJZXJyID0gZGV2bV93YXRjaGRvZ19yZWdpc3Rlcl9kZXZpY2UoZGV2LCAmbXRrX3dkdC0+d2R0X2Rldik7CitAQCAtMTkwLDYgKzM2MiwxNyBAQCBzdGF0aWMgaW50IG10a193ZHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKKyAJZGV2X2luZm8oZGV2LCAiV2F0Y2hkb2cgZW5hYmxlZCAodGltZW91dD0lZCBzZWMsIG5vd2F5b3V0PSVkKVxuIiwKKyAJCSBtdGtfd2R0LT53ZHRfZGV2LnRpbWVvdXQsIG5vd2F5b3V0KTsKKyAKKysJd2R0X2RhdGEgPSBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KTsKKysJaWYgKHdkdF9kYXRhKSB7CisrCQllcnIgPSB0b3ByZ3VfcmVnaXN0ZXJfcmVzZXRfY29udHJvbGxlcihwZGV2LAorKwkJCQkJCSAgICAgICB3ZHRfZGF0YS0+dG9wcmd1X3N3X3JzdF9udW0pOworKwkJaWYgKGVycikKKysJCQlyZXR1cm4gZXJyOworKwl9CisrCisrCW10a193ZHQtPmRpc2FibGVfd2R0X2V4dHJzdCA9CisrCQlvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woZGV2LT5vZl9ub2RlLCAibWVkaWF0ZWssZGlzYWJsZS1leHRyc3QiKTsKKysKKyAJcmV0dXJuIDA7CisgfQorIAorQEAgLTIxOSw2ICs0MDIsNyBAQCBzdGF0aWMgaW50IG10a193ZHRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKKyAKKyBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfd2R0X2R0X2lkc1tdID0geworIAl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NjU4OS13ZHQiIH0sCisrCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXdkdCIsIC5kYXRhID0gJm10Nzk4Nl9kYXRhIH0sCisgCXsgLyogc2VudGluZWwgKi8gfQorIH07CisgTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXRrX3dkdF9kdF9pZHMpOworQEAgLTI0OSw0ICs0MzMsNCBAQCBNT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LCAiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PSIKKyBNT0RVTEVfTElDRU5TRSgiR1BMIik7CisgTU9EVUxFX0FVVEhPUigiTWF0dGhpYXMgQnJ1Z2dlciA8bWF0dGhpYXMuYmdnQGdtYWlsLmNvbT4iKTsKKyBNT0RVTEVfREVTQ1JJUFRJT04oIk1lZGlhdGVrIFdhdGNoRG9nIFRpbWVyIERyaXZlciIpOworLU1PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKKytNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wOTkwLWdzdy1ydGw4MzY3cy1tdDc2MjItc3VwcG9ydC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wOTkwLWdzdy1ydGw4MzY3cy1tdDc2MjItc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2Q0OWU5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA5OTAtZ3N3LXJ0bDgzNjdzLW10NzYyMi1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKKy0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCisrKysgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZworQEAgLTQyLDYgKzQyLDEyIEBAIGNvbmZpZyBNRElPX0JDTV9JUFJPQworIAkgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZHJpdmVyIGZvciB0aGUgTURJTyBidXNzZXMgZm91bmQgaW4gdGhlCisgCSAgQnJvYWRjb20gaVByb2MgU29DJ3MuCisgCisrY29uZmlnIFJUTDgzNjdTX0dTVworKwl0cmlzdGF0ZSAicnRsODM2NyBHaWdhYml0IFN3aXRjaCBzdXBwb3J0IGZvciBtdDc2MjIiCisrCWRlcGVuZHMgb24gTkVUX1ZFTkRPUl9NRURJQVRFSworKwloZWxwCisrCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgcnRsODM2N3MgaW4gbXQ3NjIyCisrCisgY29uZmlnIE1ESU9fQkNNX1VOSU1BQworIAl0cmlzdGF0ZSAiQnJvYWRjb20gVW5pTUFDIE1ESU8gYnVzIGNvbnRyb2xsZXIiCisgCWRlcGVuZHMgb24gSEFTX0lPTUVNCistLS0gYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUKKysrKyBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZQorQEAgLTExMCw0ICsxMTAsNSBAQCBvYmotJChDT05GSUdfVEVSQU5FVElDU19QSFkpCSs9IHRlcmFuZXRpCisgb2JqLSQoQ09ORklHX1ZJVEVTU0VfUEhZKQkrPSB2aXRlc3NlLm8KKyBvYmotJChDT05GSUdfWElMSU5YX0dNSUkyUkdNSUkpICs9IHhpbGlueF9nbWlpMnJnbWlpLm8KKyBvYmotJChDT05GSUdfTVQ3NTNYX0dTVykgICAgICAgICs9IG10ay9tdDc1M3gvCisrb2JqLSQoQ09ORklHX1JUTDgzNjdTX0dTVykJKz0gcnRrLworIApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA5OTEtZHQtYmluZGluZ3MtUENJLU1lZGlhdGVrLVVwZGF0ZS1QQ0llLWJpbmRpbmcucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMDk5MS1kdC1iaW5kaW5ncy1QQ0ktTWVkaWF0ZWstVXBkYXRlLVBDSWUtYmluZGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmU0YzEzCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA5OTEtZHQtYmluZGluZ3MtUENJLU1lZGlhdGVrLVVwZGF0ZS1QQ0llLWJpbmRpbmcucGF0Y2gKQEAgLTAsMCArMSw0MTUgQEAKK0Zyb20gcGF0Y2h3b3JrIFRodSBNYXkgMjggMDY6MTY6NDUgMjAyMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CitYLVBhdGNod29yay1TdWJtaXR0ZXI6IENodWFuamlhIExpdSA8Y2h1YW5qaWEubGl1QG1lZGlhdGVrLmNvbT4KK1gtUGF0Y2h3b3JrLUlkOiAxMTU3NDc5MworUmV0dXJuLVBhdGg6IAorIDxTUlMwPWZ0U0E9N0s9bGlzdHMuaW5mcmFkZWFkLm9yZz1saW51eC1tZWRpYXRlay1ib3VuY2VzK3BhdGNod29yay1saW51eC1tZWRpYXRlaz1wYXRjaHdvcmsua2VybmVsLm9yZ0BrZXJuZWwub3JnPgorUmVjZWl2ZWQ6IGZyb20gbWFpbC5rZXJuZWwub3JnIChwZHgta29yZy1tYWlsLTEud2ViLmNvZGVhdXJvcmEub3JnCisgWzE3Mi4zMC4yMDAuMTIzXSkKKwlieSBwZHgta29yZy1wYXRjaHdvcmstMi53ZWIuY29kZWF1cm9yYS5vcmcgKFBvc3RmaXgpIHdpdGggRVNNVFAgaWQgMzkxMjAxMzkyCisJZm9yIDxwYXRjaHdvcmstbGludXgtbWVkaWF0ZWtAcGF0Y2h3b3JrLmtlcm5lbC5vcmc+OworIFRodSwgMjggTWF5IDIwMjAgMDY6MjA6MjcgKzAwMDAgKFVUQykKK1JlY2VpdmVkOiBmcm9tIGJvbWJhZGlsLmluZnJhZGVhZC5vcmcgKGJvbWJhZGlsLmluZnJhZGVhZC5vcmcKKyBbMTk4LjEzNy4yMDIuMTMzXSkKKwkodXNpbmcgVExTdjEuMiB3aXRoIGNpcGhlciBFQ0RIRS1SU0EtQUVTMjU2LUdDTS1TSEEzODQgKDI1Ni8yNTYgYml0cykpCisJKE5vIGNsaWVudCBjZXJ0aWZpY2F0ZSByZXF1ZXN0ZWQpCisJYnkgbWFpbC5rZXJuZWwub3JnIChQb3N0Zml4KSB3aXRoIEVTTVRQUyBpZCAxMDRGNjIwNjU3CisJZm9yIDxwYXRjaHdvcmstbGludXgtbWVkaWF0ZWtAcGF0Y2h3b3JrLmtlcm5lbC5vcmc+OworIFRodSwgMjggTWF5IDIwMjAgMDY6MjA6MjcgKzAwMDAgKFVUQykKK0F1dGhlbnRpY2F0aW9uLVJlc3VsdHM6IG1haWwua2VybmVsLm9yZzsKKwlka2ltPXBhc3MgKDIwNDgtYml0IGtleSkgaGVhZGVyLmQ9bGlzdHMuaW5mcmFkZWFkLm9yZworIGhlYWRlci5pPUBsaXN0cy5pbmZyYWRlYWQub3JnIGhlYWRlci5iPSJyYVpIYVd4cyI7CisJZGtpbT1mYWlsIHJlYXNvbj0ic2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmYWlsZWQiICgxMDI0LWJpdCBrZXkpCisgaGVhZGVyLmQ9bWVkaWF0ZWsuY29tIGhlYWRlci5pPUBtZWRpYXRlay5jb20gaGVhZGVyLmI9Ill6dHJCeUcvIgorRE1BUkMtRmlsdGVyOiBPcGVuRE1BUkMgRmlsdGVyIHYxLjMuMiBtYWlsLmtlcm5lbC5vcmcgMTA0RjYyMDY1NworQXV0aGVudGljYXRpb24tUmVzdWx0czogbWFpbC5rZXJuZWwub3JnOworIGRtYXJjPWZhaWwgKHA9bm9uZSBkaXM9bm9uZSkgaGVhZGVyLmZyb209bWVkaWF0ZWsuY29tCitBdXRoZW50aWNhdGlvbi1SZXN1bHRzOiBtYWlsLmtlcm5lbC5vcmc7Cisgc3BmPW5vbmUKKyBzbXRwLm1haWxmcm9tPWxpbnV4LW1lZGlhdGVrLWJvdW5jZXMrcGF0Y2h3b3JrLWxpbnV4LW1lZGlhdGVrPXBhdGNod29yay5rZXJuZWwub3JnQGxpc3RzLmluZnJhZGVhZC5vcmcKK0RLSU0tU2lnbmF0dXJlOiB2PTE7IGE9cnNhLXNoYTI1NjsgcT1kbnMvdHh0OyBjPXJlbGF4ZWQvcmVsYXhlZDsKKwlkPWxpc3RzLmluZnJhZGVhZC5vcmc7IHM9Ym9tYmFkaWwuMjAxNzAyMDk7IGg9U2VuZGVyOgorCUNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6Q29udGVudC1UeXBlOkNjOkxpc3QtU3Vic2NyaWJlOkxpc3QtSGVscDpMaXN0LVBvc3Q6CisJTGlzdC1BcmNoaXZlOkxpc3QtVW5zdWJzY3JpYmU6TGlzdC1JZDpNSU1FLVZlcnNpb246UmVmZXJlbmNlczpJbi1SZXBseS1UbzoKKwlNZXNzYWdlLUlEOkRhdGU6U3ViamVjdDpUbzpGcm9tOlJlcGx5LVRvOkNvbnRlbnQtSUQ6Q29udGVudC1EZXNjcmlwdGlvbjoKKwlSZXNlbnQtRGF0ZTpSZXNlbnQtRnJvbTpSZXNlbnQtU2VuZGVyOlJlc2VudC1UbzpSZXNlbnQtQ2M6UmVzZW50LU1lc3NhZ2UtSUQ6CisJTGlzdC1Pd25lcjsgYmg9YVZ0S1UrRXk4S0VNOTcrUzY2Zno5Wk1vK0g4QlA1NzBqaEFBdmFSc05XYz07IGI9cmFaSGFXeHNmQ3hzcmQKKwlCeW4vdzFvTE4vSjgyQXBuTmRCQlhpeHE5UWowdVhJVTJ0QlZxa2lROWxHNlFEazd1Z3V4UVNKTGVUcXJzSS91eFFtQ0kvUEdRdFpkUAorCXNIMG9ib2kyc2JRU3FKLzF1ZDR1TDJwUGFpTFJKQ3hJTkY1b1dqb1pNc2puL2IyZld2bjUyUDZ2VHIvZHhEVGFhYmlWaFkwSEwwSitYCisJN1lHYzFhWXRPNzZIWkhFMmtlM3B1UjQyUWtJOGhFOUUyY0VoaUxXZXVVaUxkVUJlZ05NNU1kWWZ0dTRuSlRjQ1huQWVKanAvd0lwWUcKKwk3WDczN045Y21hbkRmNkJ4cjJiTlBnYVl6SCttN0pLNmVHeHVBdldvMCtQRTlPWDdNTHJYWTNLaml4Y2pEL2IwaGUwbWZFTSsrZ0JBcQorCUtCWUtsNXdoMW1ubFIyV0lXWGV3PT07CitSZWNlaXZlZDogZnJvbSBsb2NhbGhvc3QgKFsxMjcuMC4wLjFdIGhlbG89Ym9tYmFkaWwuaW5mcmFkZWFkLm9yZykKKwlieSBib21iYWRpbC5pbmZyYWRlYWQub3JnIHdpdGggZXNtdHAgKEV4aW0gNC45Mi4zICMzIChSZWQgSGF0IExpbnV4KSkKKwlpZCAxamVCdHgtMDAwNUpDLURKOyBUaHUsIDI4IE1heSAyMDIwIDA2OjIwOjI1ICswMDAwCitSZWNlaXZlZDogZnJvbSBtYWlsZ3cwMS5tZWRpYXRlay5jb20gKFsyMTYuMjAwLjI0MC4xODRdKQorIGJ5IGJvbWJhZGlsLmluZnJhZGVhZC5vcmcgd2l0aCBlc210cHMgKEV4aW0gNC45Mi4zICMzIChSZWQgSGF0IExpbnV4KSkKKyBpZCAxamVCdFctMDAwMmYyLTc1OyBUaHUsIDI4IE1heSAyMDIwIDA2OjIwOjAxICswMDAwCitYLVVVSUQ6IGQ1Y2I2ZDk2YzJhNTQyMTc5NmMyZjhhMjg0ZmYzNjcwLTIwMjAwNTI3CitES0lNLVNpZ25hdHVyZTogdj0xOyBhPXJzYS1zaGEyNTY7IHE9ZG5zL3R4dDsgYz1yZWxheGVkL3JlbGF4ZWQ7CisgZD1tZWRpYXRlay5jb207Cisgcz1kazsKKyBoPUNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6Q29udGVudC1UeXBlOk1JTUUtVmVyc2lvbjpSZWZlcmVuY2VzOkluLVJlcGx5LVRvOk1lc3NhZ2UtSUQ6RGF0ZTpTdWJqZWN0OkNDOlRvOkZyb207CisgYmg9RXFqQys1Y0hndjZleWtON0ZQZjJtdHdLOVVpdkozWFNDRTBqRXZiOGgrOD07CisgYj1ZenRyQnlHL0lhMzA0bDlLRFBCd29IRllrRkNONnFCWFBxd1pnZzU2Q0E5Vml0YWRBZzIrSzFWZ2ZFVStvSHFzcWNzR0FNZFpUUk1RaDE3dHBtNGJKUGFydzZNTXpBUTI4dGUyVGN4dlFNVjhQWk1rZXJKZFp5eVlibEk3eWJhdVBXdW9mQVFnUU10dXdTS1ZpaThlVFJKYmY5OU9aOXZER0pQM3pvMmoxd1U9OworWC1VVUlEOiBkNWNiNmQ5NmMyYTU0MjE3OTZjMmY4YTI4NGZmMzY3MC0yMDIwMDUyNworUmVjZWl2ZWQ6IGZyb20gbXRrY2FzNjYubWVkaWF0ZWsuaW5jIFsoMTcyLjI5LjE5My40NCldIGJ5CisgbWFpbGd3MDEubWVkaWF0ZWsuY29tCisgKGVudmVsb3BlLWZyb20gPGNodWFuamlhLmxpdUBtZWRpYXRlay5jb20+KQorIChtdXNyZWxheS5tZWRpYXRlay5jb20gRVNNVFAgd2l0aCBUTFMpCisgd2l0aCBFU01UUCBpZCA2ODE5NTg3MDc7IFdlZCwgMjcgTWF5IDIwMjAgMjI6MjA6MTYgLTA4MDAKK1JlY2VpdmVkOiBmcm9tIE1US01CUzA3TjIubWVkaWF0ZWsuaW5jICgxNzIuMjEuMTAxLjE0MSkgYnkKKyBNVEtNQlM2Mk4xLm1lZGlhdGVrLmluYyAoMTcyLjI5LjE5My40MSkgd2l0aCBNaWNyb3NvZnQgU01UUCBTZXJ2ZXIgKFRMUykgaWQKKyAxNS4wLjE0OTcuMjsgV2VkLCAyNyBNYXkgMjAyMCAyMzoxODo1MiAtMDcwMAorUmVjZWl2ZWQ6IGZyb20gbXRrY2FzMDcubWVkaWF0ZWsuaW5jICgxNzIuMjEuMTAxLjg0KSBieQorIG10a21iczA3bjIubWVkaWF0ZWsuaW5jICgxNzIuMjEuMTAxLjE0MSkgd2l0aCBNaWNyb3NvZnQgU01UUCBTZXJ2ZXIgKFRMUykgaWQKKyAxNS4wLjE0OTcuMjsgVGh1LCAyOCBNYXkgMjAyMCAxNDoxODo0OSArMDgwMAorUmVjZWl2ZWQ6IGZyb20gbG9jYWxob3N0LmxvY2FsZG9tYWluICgxMC4xNy4zLjE1MykgYnkgbXRrY2FzMDcubWVkaWF0ZWsuaW5jCisgKDE3Mi4yMS4xMDEuNzMpIHdpdGggTWljcm9zb2Z0IFNNVFAgU2VydmVyIGlkIDE1LjAuMTQ5Ny4yIHZpYSBGcm9udGVuZAorIFRyYW5zcG9ydDsgVGh1LCAyOCBNYXkgMjAyMCAxNDoxODo0NyArMDgwMAorRnJvbTogPGNodWFuamlhLmxpdUBtZWRpYXRlay5jb20+CitUbzogPHJvYmgrZHRAa2VybmVsLm9yZz4sIDxyeWRlci5sZWVAbWVkaWF0ZWsuY29tPiwgPG1hdHRoaWFzLmJnZ0BnbWFpbC5jb20+CitTdWJqZWN0OiBbUEFUQ0ggdjIgMS80XSBkdC1iaW5kaW5nczogUENJOiBNZWRpYXRlazogVXBkYXRlIFBDSWUgYmluZGluZworRGF0ZTogVGh1LCAyOCBNYXkgMjAyMCAxNDoxNjo0NSArMDgwMAorTWVzc2FnZS1JRDogPDIwMjAwNTI4MDYxNjQ4LjMyMDc4LTItY2h1YW5qaWEubGl1QG1lZGlhdGVrLmNvbT4KK1gtTWFpbGVyOiBnaXQtc2VuZC1lbWFpbCAyLjE4LjAKK0luLVJlcGx5LVRvOiA8MjAyMDA1MjgwNjE2NDguMzIwNzgtMS1jaHVhbmppYS5saXVAbWVkaWF0ZWsuY29tPgorUmVmZXJlbmNlczogPDIwMjAwNTI4MDYxNjQ4LjMyMDc4LTEtY2h1YW5qaWEubGl1QG1lZGlhdGVrLmNvbT4KK01JTUUtVmVyc2lvbjogMS4wCitYLU1USzogTgorWC1DUk0xMTQtVmVyc2lvbjogMjAxMDAxMDYtQmxhbWVNaWNoZWxzb24gKCBUUkUgMC44LjAgKEJTRCkgKSBNUi02NDY3MDlFMyAKK1gtQ1JNMTE0LUNhY2hlSUQ6IHNmaWQtMjAyMDA1MjdfMjMxOTU4XzI2MTA2NF82MDhDQzAzRSAKK1gtQ1JNMTE0LVN0YXR1czogR09PRCAoICAxMy45NSAgKQorWC1TcGFtLVNjb3JlOiAtMC4yICgvKQorWC1TcGFtLVJlcG9ydDogU3BhbUFzc2Fzc2luIHZlcnNpb24gMy40LjQgb24gYm9tYmFkaWwuaW5mcmFkZWFkLm9yZyBzdW1tYXJ5OgorIENvbnRlbnQgYW5hbHlzaXMgZGV0YWlsczogICAoLTAuMiBwb2ludHMpCisgcHRzIHJ1bGUgbmFtZSAgICAgICAgICAgICAgZGVzY3JpcHRpb24KKyAtLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIC0wLjAgU1BGX1BBU1MgICAgICAgICAgICAgICBTUEY6IHNlbmRlciBtYXRjaGVzIFNQRiByZWNvcmQKKyAwLjAgU1BGX0hFTE9fTk9ORSAgICAgICAgICBTUEY6IEhFTE8gZG9lcyBub3QgcHVibGlzaCBhbiBTUEYgUmVjb3JkCisgMC4wIE1JTUVfQkFTRTY0X1RFWFQgICAgICAgUkFXOiBNZXNzYWdlIHRleHQgZGlzZ3Vpc2VkIHVzaW5nIGJhc2U2NAorIGVuY29kaW5nCisgLTAuMSBES0lNX1ZBTElEX0FVICAgICAgICAgIE1lc3NhZ2UgaGFzIGEgdmFsaWQgREtJTSBvciBESyBzaWduYXR1cmUgZnJvbQorIGF1dGhvcidzIGRvbWFpbgorIDAuMSBES0lNX1NJR05FRCAgICAgICAgICAgIE1lc3NhZ2UgaGFzIGEgREtJTSBvciBESyBzaWduYXR1cmUsCisgbm90IG5lY2Vzc2FyaWx5CisgdmFsaWQKKyAtMC4xIERLSU1fVkFMSUQgTWVzc2FnZSBoYXMgYXQgbGVhc3Qgb25lIHZhbGlkIERLSU0gb3IgREsgc2lnbmF0dXJlCisgLTAuMSBES0lNX1ZBTElEX0VGICAgICAgICAgIE1lc3NhZ2UgaGFzIGEgdmFsaWQgREtJTSBvciBESyBzaWduYXR1cmUgZnJvbQorIGVudmVsb3BlLWZyb20gZG9tYWluCisgMC4wIFVOUEFSU0VBQkxFX1JFTEFZICAgICAgSW5mb3JtYXRpb25hbDogbWVzc2FnZSBoYXMgdW5wYXJzZWFibGUgcmVsYXkKKyBsaW5lcworWC1CZWVuVGhlcmU6IGxpbnV4LW1lZGlhdGVrQGxpc3RzLmluZnJhZGVhZC5vcmcKK1gtTWFpbG1hbi1WZXJzaW9uOiAyLjEuMjkKK1ByZWNlZGVuY2U6IGxpc3QKK0xpc3QtSWQ6IDxsaW51eC1tZWRpYXRlay5saXN0cy5pbmZyYWRlYWQub3JnPgorTGlzdC1VbnN1YnNjcmliZTogPGh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vb3B0aW9ucy9saW51eC1tZWRpYXRlaz4sCisgPG1haWx0bzpsaW51eC1tZWRpYXRlay1yZXF1ZXN0QGxpc3RzLmluZnJhZGVhZC5vcmc/c3ViamVjdD11bnN1YnNjcmliZT4KK0xpc3QtQXJjaGl2ZTogPGh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL3BpcGVybWFpbC9saW51eC1tZWRpYXRlay8+CitMaXN0LVBvc3Q6IDxtYWlsdG86bGludXgtbWVkaWF0ZWtAbGlzdHMuaW5mcmFkZWFkLm9yZz4KK0xpc3QtSGVscDogPG1haWx0bzpsaW51eC1tZWRpYXRlay1yZXF1ZXN0QGxpc3RzLmluZnJhZGVhZC5vcmc/c3ViamVjdD1oZWxwPgorTGlzdC1TdWJzY3JpYmU6IDxodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LW1lZGlhdGVrPiwKKyA8bWFpbHRvOmxpbnV4LW1lZGlhdGVrLXJlcXVlc3RAbGlzdHMuaW5mcmFkZWFkLm9yZz9zdWJqZWN0PXN1YnNjcmliZT4KK0NjOiBkZXZpY2V0cmVlQHZnZXIua2VybmVsLm9yZywgbG9yZW56by5waWVyYWxpc2lAYXJtLmNvbSwKKyBzcnZfaGV1cHN0cmVhbUBtZWRpYXRlay5jb20sICJjaHVhbmppYS5saXUiIDxDaHVhbmppYS5MaXVAbWVkaWF0ZWsuY29tPiwKKyBsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnLCBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnLAorIGppYW5qdW4ud2FuZ0BtZWRpYXRlay5jb20sIGxpbnV4LW1lZGlhdGVrQGxpc3RzLmluZnJhZGVhZC5vcmcsCisgeW9uZy53dUBtZWRpYXRlay5jb20sIGJoZWxnYWFzQGdvb2dsZS5jb20sCisgbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnLCBhbXVycmF5QHRoZWdvb2RwZW5ndWluLmNvLnVrCitTZW5kZXI6ICJMaW51eC1tZWRpYXRlayIgPGxpbnV4LW1lZGlhdGVrLWJvdW5jZXNAbGlzdHMuaW5mcmFkZWFkLm9yZz4KK0Vycm9ycy1UbzogCisgbGludXgtbWVkaWF0ZWstYm91bmNlcytwYXRjaHdvcmstbGludXgtbWVkaWF0ZWs9cGF0Y2h3b3JrLmtlcm5lbC5vcmdAbGlzdHMuaW5mcmFkZWFkLm9yZworCitGcm9tOiAiY2h1YW5qaWEubGl1IiA8Q2h1YW5qaWEuTGl1QG1lZGlhdGVrLmNvbT4KKworVGhlcmUgYXJlIHR3byBpbmRlcGVuZGVudCBQQ0llIGNvbnRyb2xsZXJzIGluIE1UMjcxMi9NVDc2MjIgcGxhdGZvcm0sCithbmQgZWFjaCBvZiB0aGVtIHNob3VsZCBjb250YWluIGFuIGluZGVwZW5kZW50IE1TSSBkb21haW4uCisKK0luIGN1cnJlbnQgYXJjaGl0ZWN0dXJlLCBNU0kgZG9tYWluIHdpbGwgYmUgaW5oZXJpdGVkIGZyb20gdGhlIHJvb3QKK2JyaWRnZSwgYW5kIGFsbCBvZiB0aGUgZGV2aWNlcyB3aWxsIHNoYXJlIHRoZSBzYW1lIE1TSSBkb21haW4uCitIZW5jZSB0aGF0LCB0aGUgUENJZSBkZXZpY2VzIHdpbGwgbm90IHdvcmsgcHJvcGVybHkgaWYgdGhlIGlycSBudW1iZXIKK3doaWNoIHJlcXVpcmVkIGlzIG1vcmUgdGhhbiAzMi4KKworU3BsaXQgdGhlIFBDSWUgbm9kZSBmb3IgTVQyNzEyL01UNzYyMiBwbGF0Zm9ybSB0byBmaXggTVNJIGlzc3VlIGFuZAorY29tcGx5IHdpdGggdGhlIGhhcmR3YXJlIGRlc2lnbi4KKworU2lnbmVkLW9mZi1ieTogY2h1YW5qaWEubGl1IDxDaHVhbmppYS5MaXVAbWVkaWF0ZWsuY29tPgorLS0tCisgLi4uL2JpbmRpbmdzL3BjaS9tZWRpYXRlay1wY2llLWNmZy55YW1sICAgICAgIHwgIDM4ICsrKysrCisgLi4uL2RldmljZXRyZWUvYmluZGluZ3MvcGNpL21lZGlhdGVrLXBjaWUudHh0IHwgMTQ0ICsrKysrKysrKysrLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTI5IGluc2VydGlvbnMoKyksIDUzIGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGNpL21lZGlhdGVrLXBjaWUtY2ZnLnlhbWwKKworLS0tIC9kZXYvbnVsbAorKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BjaS9tZWRpYXRlay1wY2llLWNmZy55YW1sCitAQCAtMCwwICsxLDM4IEBACisrIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZQorKyVZQU1MIDEuMgorKy0tLQorKyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvcGNpL21lZGlhdGVrLXBjaWUtY2ZnLnlhbWwjCisrJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjCisrCisrdGl0bGU6IE1lZGlhdGVrIFBDSUVDRkcgY29udHJvbGxlcgorKworK21haW50YWluZXJzOgorKyAgLSBDaHVhbmppYSBMaXUgPGNodWFuamlhLmxpdUBtZWRpYXRlay5jb20+CisrICAtIEppYW5qdW4gV2FuZyA8amlhbmp1bi53YW5nQG1lZGlhdGVrLmNvbT4KKysKKytkZXNjcmlwdGlvbjogfAorKyAgVGhlIE1lZGlhVGVrIFBDSUVDRkcgY29udHJvbGxlciBjb250cm9scyBzb21lIGZlYXR1cmUgYWJvdXQKKysgIExUU1NNLCBBU1BNIGFuZCBzbyBvbi4KKysKKytwcm9wZXJ0aWVzOgorKyAgY29tcGF0aWJsZToKKysgICAgICBpdGVtczoKKysgICAgICAgIC0gZW51bToKKysgICAgICAgICAgICAtIG1lZGlhdGVrLG10NzYyMi1wY2llY2ZnCisrICAgICAgICAgICAgLSBtZWRpYXRlayxtdDc2MjktcGNpZWNmZworKyAgICAgICAgLSBjb25zdDogc3lzY29uCisrCisrICByZWc6CisrICAgIG1heEl0ZW1zOiAxCisrCisrcmVxdWlyZWQ6CisrICAtIGNvbXBhdGlibGUKKysgIC0gcmVnCisrCisrZXhhbXBsZXM6CisrICAtIHwKKysgICAgcGNpZWNmZzogcGNpZWNmZ0AxYTE0MDAwMCB7CisrICAgICAgICBjb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzYyMi1wY2llY2ZnIiwgInN5c2NvbiI7CisrICAgICAgICByZWcgPSA8MCAweDFhMTQwMDAwIDAgMHgxMDAwPjsKKysgICAgfTsKKysuLi4KKy0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wY2kvbWVkaWF0ZWstcGNpZS50eHQKKysrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wY2kvbWVkaWF0ZWstcGNpZS50eHQKK0BAIC04LDcgKzgsNyBAQCBSZXF1aXJlZCBwcm9wZXJ0aWVzOgorIAkibWVkaWF0ZWssbXQ3NjIzLXBjaWUiCisgCSJtZWRpYXRlayxtdDc2MjktcGNpZSIKKyAtIGRldmljZV90eXBlOiBNdXN0IGJlICJwY2kiCistLSByZWc6IEJhc2UgYWRkcmVzc2VzIGFuZCBsZW5ndGhzIG9mIHRoZSBQQ0llIHN1YnN5cyBhbmQgcm9vdCBwb3J0cy4KKystIHJlZzogQmFzZSBhZGRyZXNzZXMgYW5kIGxlbmd0aHMgb2YgdGhlIHJvb3QgcG9ydHMuCisgLSByZWctbmFtZXM6IE5hbWVzIG9mIHRoZSBhYm92ZSBhcmVhcyB0byB1c2UgZHVyaW5nIHJlc291cmNlIGxvb2t1cC4KKyAtICNhZGRyZXNzLWNlbGxzOiBBZGRyZXNzIHJlcHJlc2VudGF0aW9uIGZvciByb290IHBvcnRzIChtdXN0IGJlIDMpCisgLSAjc2l6ZS1jZWxsczogU2l6ZSByZXByZXNlbnRhdGlvbiBmb3Igcm9vdCBwb3J0cyAobXVzdCBiZSAyKQorQEAgLTE5LDEwICsxOSwxMCBAQCBSZXF1aXJlZCBwcm9wZXJ0aWVzOgorICAgIC0gc3lzX2NrTiA6dHJhbnNhY3Rpb24gbGF5ZXIgYW5kIGRhdGEgbGluayBsYXllciBjbG9jaworICAgUmVxdWlyZWQgZW50cmllcyBmb3IgTVQyNzAxL01UNzYyMzoKKyAgICAtIGZyZWVfY2sgOmZvciByZWZlcmVuY2UgY2xvY2sgb2YgUENJZSBzdWJzeXMKKy0gIFJlcXVpcmVkIGVudHJpZXMgZm9yIE1UMjcxMi9NVDc2MjI6CisrICBSZXF1aXJlZCBlbnRyaWVzIGZvciBNVDI3MTIvTVQ3NjIyL01UNzYyOToKKyAgICAtIGFoYl9ja04gOkFIQiBzbGF2ZSBpbnRlcmZhY2Ugb3BlcmF0aW5nIGNsb2NrIGZvciBDU1IgYWNjZXNzIGFuZCBSQworIAkgICAgICBpbml0aWF0ZWQgTU1JTyBhY2Nlc3MKKy0gIFJlcXVpcmVkIGVudHJpZXMgZm9yIE1UNzYyMjoKKysgIFJlcXVpcmVkIGVudHJpZXMgZm9yIE1UNzYyMi9NVDc2Mjk6CisgICAgLSBheGlfY2tOIDphcHBsaWNhdGlvbiBsYXllciBNTUlPIGNoYW5uZWwgb3BlcmF0aW5nIGNsb2NrCisgICAgLSBhdXhfY2tOIDpwZTJfbWFjX2JyaWRnZSBhbmQgcGUyX21hY19jb3JlIG9wZXJhdGluZyBjbG9jayB3aGVuCisgCSAgICAgIHBjaWVfbWFjX2NrL3BjaWVfcGlwZV9jayBpcyB0dXJuZWQgb2ZmCitAQCAtNDcsMTAgKzQ3LDEzIEBAIFJlcXVpcmVkIHByb3BlcnRpZXMgZm9yIE1UNzYyMy9NVDI3MDE6CisgLSByZXNldC1uYW1lczogTXVzdCBiZSAicGNpZS1yc3QwIiwgInBjaWUtcnN0MSIsICJwY2llLXJzdE4iLi4gYmFzZWQgb24gdGhlCisgICBudW1iZXIgb2Ygcm9vdCBwb3J0cy4KKyAKKy1SZXF1aXJlZCBwcm9wZXJ0aWVzIGZvciBNVDI3MTIvTVQ3NjIyOgorK1JlcXVpcmVkIHByb3BlcnRpZXMgZm9yIE1UMjcxMi9NVDc2MjIvTVQ3NjI5OgorIC1pbnRlcnJ1cHRzOiBBIGxpc3Qgb2YgaW50ZXJydXB0IG91dHB1dHMgb2YgdGhlIGNvbnRyb2xsZXIsIG11c3QgaGF2ZSBvbmUKKyAJICAgICBlbnRyeSBmb3IgZWFjaCBQQ0llIHBvcnQKKyAKKytSZXF1aXJlZCBwcm9wZXJ0aWVzIGZvciBNVDc2MjIvTVQ3NjI5OgorKy0gbWVkaWF0ZWsscGNpZS1zdWJzeXM6IFNob3VsZCBiZSBhIHBoYW5kbGUgb2YgdGhlIHBjaWVjZmcgbm9kZS4KKysKKyBJbiBhZGRpdGlvbiwgdGhlIGRldmljZSB0cmVlIG5vZGUgbXVzdCBoYXZlIHN1Yi1ub2RlcyBkZXNjcmliaW5nIGVhY2gKKyBQQ0llIHBvcnQgaW50ZXJmYWNlLCBoYXZpbmcgdGhlIGZvbGxvd2luZyBtYW5kYXRvcnkgcHJvcGVydGllczoKKyAKK0BAIC0xNDMsNTYgKzE0Niw3MyBAQCBFeGFtcGxlcyBmb3IgTVQ3NjIzOgorIAorIEV4YW1wbGVzIGZvciBNVDI3MTI6CisgCistCXBjaWU6IHBjaWVAMTE3MDAwMDAgeworKwlwY2llMTogcGNpZUAxMTJmZjAwMCB7CisgCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10MjcxMi1wY2llIjsKKyAJCWRldmljZV90eXBlID0gInBjaSI7CistCQlyZWcgPSA8MCAweDExNzAwMDAwIDAgMHgxMDAwPiwKKy0JCSAgICAgIDwwIDB4MTEyZmYwMDAgMCAweDEwMDA+OworLQkJcmVnLW5hbWVzID0gInBvcnQwIiwgInBvcnQxIjsKKysJCXJlZyA9IDwwIDB4MTEyZmYwMDAgMCAweDEwMDA+OworKwkJcmVnLW5hbWVzID0gInBvcnQxIjsKKyAJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworIAkJI3NpemUtY2VsbHMgPSA8Mj47CistCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTE1IElSUV9UWVBFX0xFVkVMX0hJR0g+LAorLQkJCSAgICAgPEdJQ19TUEkgMTE3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworLQkJY2xvY2tzID0gPCZ0b3Bja2dlbiBDTEtfVE9QX1BFMl9NQUNfUDBfU0VMPiwKKy0JCQkgPCZ0b3Bja2dlbiBDTEtfVE9QX1BFMl9NQUNfUDFfU0VMPiwKKy0JCQkgPCZwZXJpY2ZnIENMS19QRVJJX1BDSUUwPiwKKysJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMTcgSVJRX1RZUEVfTEVWRUxfSElHSD47CisrCQlpbnRlcnJ1cHQtbmFtZXMgPSAicGNpZV9pcnEiOworKwkJY2xvY2tzID0gPCZ0b3Bja2dlbiBDTEtfVE9QX1BFMl9NQUNfUDFfU0VMPiwKKyAJCQkgPCZwZXJpY2ZnIENMS19QRVJJX1BDSUUxPjsKKy0JCWNsb2NrLW5hbWVzID0gInN5c19jazAiLCAic3lzX2NrMSIsICJhaGJfY2swIiwgImFoYl9jazEiOworLQkJcGh5cyA9IDwmcGNpZTBfcGh5IFBIWV9UWVBFX1BDSUU+LCA8JnBjaWUxX3BoeSBQSFlfVFlQRV9QQ0lFPjsKKy0JCXBoeS1uYW1lcyA9ICJwY2llLXBoeTAiLCAicGNpZS1waHkxIjsKKysJCWNsb2NrLW5hbWVzID0gInN5c19jazEiLCAiYWhiX2NrMSI7CisrCQlwaHlzID0gPCZ1M3BvcnQxIFBIWV9UWVBFX1BDSUU+OworKwkJcGh5LW5hbWVzID0gInBjaWUtcGh5MSI7CisgCQlidXMtcmFuZ2UgPSA8MHgwMCAweGZmPjsKKy0JCXJhbmdlcyA9IDwweDgyMDAwMDAwIDAgMHgyMDAwMDAwMCAgMHgwIDB4MjAwMDAwMDAgIDAgMHgxMDAwMDAwMD47CisrCQlyYW5nZXMgPSA8MHg4MjAwMDAwMCAwIDB4MTE0MDAwMDAgIDB4MCAweDExNDAwMDAwICAwIDB4MzAwMDAwPjsKKysJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisgCistCQlwY2llMDogcGNpZUAwLDAgeworLQkJCXJlZyA9IDwweDAwMDAgMCAwIDAgMD47CisrCQlzbG90MTogcGNpZUAxLDAgeworKwkJCXJlZyA9IDwweDA4MDAgMCAwIDAgMD47CisgCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisgCQkJI3NpemUtY2VsbHMgPSA8Mj47CisgCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKyAJCQlyYW5nZXM7CisgCQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDAgMCAwIDc+OworLQkJCWludGVycnVwdC1tYXAgPSA8MCAwIDAgMSAmcGNpZV9pbnRjMCAwPiwKKy0JCQkJCTwwIDAgMCAyICZwY2llX2ludGMwIDE+LAorLQkJCQkJPDAgMCAwIDMgJnBjaWVfaW50YzAgMj4sCistCQkJCQk8MCAwIDAgNCAmcGNpZV9pbnRjMCAzPjsKKy0JCQlwY2llX2ludGMwOiBpbnRlcnJ1cHQtY29udHJvbGxlciB7CisrCQkJaW50ZXJydXB0LW1hcCA9IDwwIDAgMCAxICZwY2llX2ludGMxIDA+LAorKwkJCQkJPDAgMCAwIDIgJnBjaWVfaW50YzEgMT4sCisrCQkJCQk8MCAwIDAgMyAmcGNpZV9pbnRjMSAyPiwKKysJCQkJCTwwIDAgMCA0ICZwY2llX2ludGMxIDM+OworKwkJCXBjaWVfaW50YzE6IGludGVycnVwdC1jb250cm9sbGVyIHsKKyAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisgCQkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworIAkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworIAkJCX07CisgCQl9OworKwl9OworIAorLQkJcGNpZTE6IHBjaWVAMSwwIHsKKy0JCQlyZWcgPSA8MHgwODAwIDAgMCAwIDA+OworKwlwY2llMDogcGNpZUAxMTcwMDAwMCB7CisrCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10MjcxMi1wY2llIjsKKysJCWRldmljZV90eXBlID0gInBjaSI7CisrCQlyZWcgPSA8MCAweDExNzAwMDAwIDAgMHgxMDAwPjsKKysJCXJlZy1uYW1lcyA9ICJwb3J0MCI7CisrCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKysJCSNzaXplLWNlbGxzID0gPDI+OworKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDExNSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKysJCWludGVycnVwdC1uYW1lcyA9ICJwY2llX2lycSI7CisrCQljbG9ja3MgPSA8JnRvcGNrZ2VuIENMS19UT1BfUEUyX01BQ19QMF9TRUw+LAorKwkJCSA8JnBlcmljZmcgQ0xLX1BFUklfUENJRTA+OworKwkJY2xvY2stbmFtZXMgPSAic3lzX2NrMCIsICJhaGJfY2swIjsKKysJCXBoeXMgPSA8JnUzcG9ydDAgUEhZX1RZUEVfUENJRT47CisrCQlwaHktbmFtZXMgPSAicGNpZS1waHkwIjsKKysJCWJ1cy1yYW5nZSA9IDwweDAwIDB4ZmY+OworKwkJcmFuZ2VzID0gPDB4ODIwMDAwMDAgMCAweDIwMDAwMDAwICAweDAgMHgyMDAwMDAwMCAgMCAweDEwMDAwMDAwPjsKKysJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisrCisrCQlzbG90MDogcGNpZUAwLDAgeworKwkJCXJlZyA9IDwweDAwMDAgMCAwIDAgMD47CisgCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisgCQkJI3NpemUtY2VsbHMgPSA8Mj47CisgCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKyAJCQlyYW5nZXM7CisgCQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDAgMCAwIDc+OworLQkJCWludGVycnVwdC1tYXAgPSA8MCAwIDAgMSAmcGNpZV9pbnRjMSAwPiwKKy0JCQkJCTwwIDAgMCAyICZwY2llX2ludGMxIDE+LAorLQkJCQkJPDAgMCAwIDMgJnBjaWVfaW50YzEgMj4sCistCQkJCQk8MCAwIDAgNCAmcGNpZV9pbnRjMSAzPjsKKy0JCQlwY2llX2ludGMxOiBpbnRlcnJ1cHQtY29udHJvbGxlciB7CisrCQkJaW50ZXJydXB0LW1hcCA9IDwwIDAgMCAxICZwY2llX2ludGMwIDA+LAorKwkJCQkJPDAgMCAwIDIgJnBjaWVfaW50YzAgMT4sCisrCQkJCQk8MCAwIDAgMyAmcGNpZV9pbnRjMCAyPiwKKysJCQkJCTwwIDAgMCA0ICZwY2llX2ludGMwIDM+OworKwkJCXBjaWVfaW50YzA6IGludGVycnVwdC1jb250cm9sbGVyIHsKKyAJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisgCQkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworIAkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworQEAgLTIwMiwzOSArMjIyLDMxIEBAIEV4YW1wbGVzIGZvciBNVDI3MTI6CisgCisgRXhhbXBsZXMgZm9yIE1UNzYyMjoKKyAKKy0JcGNpZTogcGNpZUAxYTE0MDAwMCB7CisrCXBjaWUwOiBwY2llQDFhMTQzMDAwIHsKKyAJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NjIyLXBjaWUiOworIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKy0JCXJlZyA9IDwwIDB4MWExNDAwMDAgMCAweDEwMDA+LAorLQkJICAgICAgPDAgMHgxYTE0MzAwMCAwIDB4MTAwMD4sCistCQkgICAgICA8MCAweDFhMTQ1MDAwIDAgMHgxMDAwPjsKKy0JCXJlZy1uYW1lcyA9ICJzdWJzeXMiLCAicG9ydDAiLCAicG9ydDEiOworKwkJcmVnID0gPDAgMHgxYTE0MzAwMCAwIDB4MTAwMD47CisrCQlyZWctbmFtZXMgPSAicG9ydDAiOworKwkJbWVkaWF0ZWsscGNpZS1jZmcgPSA8JnBjaWVjZmc+OworIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisgCQkjc2l6ZS1jZWxscyA9IDwyPjsKKy0JCWludGVycnVwdHMgPSA8R0lDX1NQSSAyMjggSVJRX1RZUEVfTEVWRUxfTE9XPiwKKy0JCQkgICAgIDxHSUNfU1BJIDIyOSBJUlFfVFlQRV9MRVZFTF9MT1c+OworKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDIyOCBJUlFfVFlQRV9MRVZFTF9MT1c+OworKwkJaW50ZXJydXB0LW5hbWVzID0gInBjaWVfaXJxIjsKKyAJCWNsb2NrcyA9IDwmcGNpZXN5cyBDTEtfUENJRV9QMF9NQUNfRU4+LAorLQkJCSA8JnBjaWVzeXMgQ0xLX1BDSUVfUDFfTUFDX0VOPiwKKyAJCQkgPCZwY2llc3lzIENMS19QQ0lFX1AwX0FIQl9FTj4sCistCQkJIDwmcGNpZXN5cyBDTEtfUENJRV9QMV9BSEJfRU4+LAorIAkJCSA8JnBjaWVzeXMgQ0xLX1BDSUVfUDBfQVVYX0VOPiwKKy0JCQkgPCZwY2llc3lzIENMS19QQ0lFX1AxX0FVWF9FTj4sCisgCQkJIDwmcGNpZXN5cyBDTEtfUENJRV9QMF9BWElfRU4+LAorLQkJCSA8JnBjaWVzeXMgQ0xLX1BDSUVfUDFfQVhJX0VOPiwKKyAJCQkgPCZwY2llc3lzIENMS19QQ0lFX1AwX09CRkZfRU4+LAorLQkJCSA8JnBjaWVzeXMgQ0xLX1BDSUVfUDFfT0JGRl9FTj4sCistCQkJIDwmcGNpZXN5cyBDTEtfUENJRV9QMF9QSVBFX0VOPiwKKy0JCQkgPCZwY2llc3lzIENMS19QQ0lFX1AxX1BJUEVfRU4+OworLQkJY2xvY2stbmFtZXMgPSAic3lzX2NrMCIsICJzeXNfY2sxIiwgImFoYl9jazAiLCAiYWhiX2NrMSIsCistCQkJICAgICAgImF1eF9jazAiLCAiYXV4X2NrMSIsICJheGlfY2swIiwgImF4aV9jazEiLAorLQkJCSAgICAgICJvYmZmX2NrMCIsICJvYmZmX2NrMSIsICJwaXBlX2NrMCIsICJwaXBlX2NrMSI7CistCQlwaHlzID0gPCZwY2llMF9waHkgUEhZX1RZUEVfUENJRT4sIDwmcGNpZTFfcGh5IFBIWV9UWVBFX1BDSUU+OworLQkJcGh5LW5hbWVzID0gInBjaWUtcGh5MCIsICJwY2llLXBoeTEiOworKwkJCSA8JnBjaWVzeXMgQ0xLX1BDSUVfUDBfUElQRV9FTj47CisrCQljbG9jay1uYW1lcyA9ICJzeXNfY2swIiwgImFoYl9jazAiLCAiYXV4X2NrMCIsCisrCQkJICAgICAgImF4aV9jazAiLCAib2JmZl9jazAiLCAicGlwZV9jazAiOworKworIAkJcG93ZXItZG9tYWlucyA9IDwmc2Nwc3lzIE1UNzYyMl9QT1dFUl9ET01BSU5fSElGMD47CisgCQlidXMtcmFuZ2UgPSA8MHgwMCAweGZmPjsKKy0JCXJhbmdlcyA9IDwweDgyMDAwMDAwIDAgMHgyMDAwMDAwMCAgMHgwIDB4MjAwMDAwMDAgIDAgMHgxMDAwMDAwMD47CisrCQlyYW5nZXMgPSA8MHg4MjAwMDAwMCAwIDB4MjAwMDAwMDAgIDAgMHgyMDAwMDAwMCAgMCAweDgwMDAwMDA+OworKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKyAKKy0JCXBjaWUwOiBwY2llQDAsMCB7CisrCQlzbG90MDogcGNpZUAwLDAgeworIAkJCXJlZyA9IDwweDAwMDAgMCAwIDAgMD47CisgCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisgCQkJI3NpemUtY2VsbHMgPSA8Mj47CitAQCAtMjUxLDggKzI2MywzNCBAQCBFeGFtcGxlcyBmb3IgTVQ3NjIyOgorIAkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworIAkJCX07CisgCQl9OworKwl9OworKworKwlwY2llMTogcGNpZUAxYTE0NTAwMCB7CisrCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzYyMi1wY2llIjsKKysJCWRldmljZV90eXBlID0gInBjaSI7CisrCQlyZWcgPSA8MCAweDFhMTQ1MDAwIDAgMHgxMDAwPjsKKysJCXJlZy1uYW1lcyA9ICJwb3J0MSI7CisrCQltZWRpYXRlayxwY2llLWNmZyA9IDwmcGNpZWNmZz47CisrCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKysJCSNzaXplLWNlbGxzID0gPDI+OworKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDIyOSBJUlFfVFlQRV9MRVZFTF9MT1c+OworKwkJaW50ZXJydXB0LW5hbWVzID0gInBjaWVfaXJxIjsKKysJCWNsb2NrcyA9IDwmcGNpZXN5cyBDTEtfUENJRV9QMV9NQUNfRU4+LAorKwkJCSAvKiBkZXNpZ25lciBoYXMgY29ubmVjdCBSQzEgd2l0aCBwMF9haGIgY2xvY2sgKi8KKysJCQkgPCZwY2llc3lzIENMS19QQ0lFX1AwX0FIQl9FTj4sCisrCQkJIDwmcGNpZXN5cyBDTEtfUENJRV9QMV9BVVhfRU4+LAorKwkJCSA8JnBjaWVzeXMgQ0xLX1BDSUVfUDFfQVhJX0VOPiwKKysJCQkgPCZwY2llc3lzIENMS19QQ0lFX1AxX09CRkZfRU4+LAorKwkJCSA8JnBjaWVzeXMgQ0xLX1BDSUVfUDFfUElQRV9FTj47CisrCQljbG9jay1uYW1lcyA9ICJzeXNfY2sxIiwgImFoYl9jazEiLCAiYXV4X2NrMSIsCisrCQkJICAgICAgImF4aV9jazEiLCAib2JmZl9jazEiLCAicGlwZV9jazEiOworKworKwkJcG93ZXItZG9tYWlucyA9IDwmc2Nwc3lzIE1UNzYyMl9QT1dFUl9ET01BSU5fSElGMD47CisrCQlidXMtcmFuZ2UgPSA8MHgwMCAweGZmPjsKKysJCXJhbmdlcyA9IDwweDgyMDAwMDAwIDAgMHgyODAwMDAwMCAgMCAweDI4MDAwMDAwICAwIDB4ODAwMDAwMD47CisrCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworIAorLQkJcGNpZTE6IHBjaWVAMSwwIHsKKysJCXNsb3QxOiBwY2llQDEsMCB7CisgCQkJcmVnID0gPDB4MDgwMCAwIDAgMCAwPjsKKyAJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKyAJCQkjc2l6ZS1jZWxscyA9IDwyPjsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wOTkyLVBDSS1tZWRpYXRlay1Vc2UtcmVnbWFwLXRvLWdldC1zaGFyZWQtcGNpZS1jZmctYmFzZS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wOTkyLVBDSS1tZWRpYXRlay1Vc2UtcmVnbWFwLXRvLWdldC1zaGFyZWQtcGNpZS1jZmctYmFzZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTRkNDRmCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA5OTItUENJLW1lZGlhdGVrLVVzZS1yZWdtYXAtdG8tZ2V0LXNoYXJlZC1wY2llLWNmZy1iYXNlLnBhdGNoCkBAIC0wLDAgKzEsMjE3IEBACitGcm9tIHBhdGNod29yayBUaHUgTWF5IDI4IDA2OjE2OjQ2IDIwMjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorWC1QYXRjaHdvcmstU3VibWl0dGVyOiBDaHVhbmppYSBMaXUgPGNodWFuamlhLmxpdUBtZWRpYXRlay5jb20+CitYLVBhdGNod29yay1JZDogMTE1NzQ3ODEKK1JldHVybi1QYXRoOiAKKyA8U1JTMD1mdFNBPTdLPWxpc3RzLmluZnJhZGVhZC5vcmc9bGludXgtbWVkaWF0ZWstYm91bmNlcytwYXRjaHdvcmstbGludXgtbWVkaWF0ZWs9cGF0Y2h3b3JrLmtlcm5lbC5vcmdAa2VybmVsLm9yZz4KK1JlY2VpdmVkOiBmcm9tIG1haWwua2VybmVsLm9yZyAocGR4LWtvcmctbWFpbC0xLndlYi5jb2RlYXVyb3JhLm9yZworIFsxNzIuMzAuMjAwLjEyM10pCisJYnkgcGR4LWtvcmctcGF0Y2h3b3JrLTIud2ViLmNvZGVhdXJvcmEub3JnIChQb3N0Zml4KSB3aXRoIEVTTVRQIGlkIDBBOTlCNjBECisJZm9yIDxwYXRjaHdvcmstbGludXgtbWVkaWF0ZWtAcGF0Y2h3b3JrLmtlcm5lbC5vcmc+OworIFRodSwgMjggTWF5IDIwMjAgMDY6MTk6MDQgKzAwMDAgKFVUQykKK1JlY2VpdmVkOiBmcm9tIGJvbWJhZGlsLmluZnJhZGVhZC5vcmcgKGJvbWJhZGlsLmluZnJhZGVhZC5vcmcKKyBbMTk4LjEzNy4yMDIuMTMzXSkKKwkodXNpbmcgVExTdjEuMiB3aXRoIGNpcGhlciBFQ0RIRS1SU0EtQUVTMjU2LUdDTS1TSEEzODQgKDI1Ni8yNTYgYml0cykpCisJKE5vIGNsaWVudCBjZXJ0aWZpY2F0ZSByZXF1ZXN0ZWQpCisJYnkgbWFpbC5rZXJuZWwub3JnIChQb3N0Zml4KSB3aXRoIEVTTVRQUyBpZCBEQ0M5OTIwOEZFCisJZm9yIDxwYXRjaHdvcmstbGludXgtbWVkaWF0ZWtAcGF0Y2h3b3JrLmtlcm5lbC5vcmc+OworIFRodSwgMjggTWF5IDIwMjAgMDY6MTk6MDMgKzAwMDAgKFVUQykKK0F1dGhlbnRpY2F0aW9uLVJlc3VsdHM6IG1haWwua2VybmVsLm9yZzsKKwlka2ltPXBhc3MgKDIwNDgtYml0IGtleSkgaGVhZGVyLmQ9bGlzdHMuaW5mcmFkZWFkLm9yZworIGhlYWRlci5pPUBsaXN0cy5pbmZyYWRlYWQub3JnIGhlYWRlci5iPSJTcE9pMHVlRiI7CisJZGtpbT1mYWlsIHJlYXNvbj0ic2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmYWlsZWQiICgxMDI0LWJpdCBrZXkpCisgaGVhZGVyLmQ9bWVkaWF0ZWsuY29tIGhlYWRlci5pPUBtZWRpYXRlay5jb20gaGVhZGVyLmI9IlVHSUJvSUVHIgorRE1BUkMtRmlsdGVyOiBPcGVuRE1BUkMgRmlsdGVyIHYxLjMuMiBtYWlsLmtlcm5lbC5vcmcgRENDOTkyMDhGRQorQXV0aGVudGljYXRpb24tUmVzdWx0czogbWFpbC5rZXJuZWwub3JnOworIGRtYXJjPWZhaWwgKHA9bm9uZSBkaXM9bm9uZSkgaGVhZGVyLmZyb209bWVkaWF0ZWsuY29tCitBdXRoZW50aWNhdGlvbi1SZXN1bHRzOiBtYWlsLmtlcm5lbC5vcmc7Cisgc3BmPW5vbmUKKyBzbXRwLm1haWxmcm9tPWxpbnV4LW1lZGlhdGVrLWJvdW5jZXMrcGF0Y2h3b3JrLWxpbnV4LW1lZGlhdGVrPXBhdGNod29yay5rZXJuZWwub3JnQGxpc3RzLmluZnJhZGVhZC5vcmcKK0RLSU0tU2lnbmF0dXJlOiB2PTE7IGE9cnNhLXNoYTI1NjsgcT1kbnMvdHh0OyBjPXJlbGF4ZWQvcmVsYXhlZDsKKwlkPWxpc3RzLmluZnJhZGVhZC5vcmc7IHM9Ym9tYmFkaWwuMjAxNzAyMDk7IGg9U2VuZGVyOgorCUNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6Q29udGVudC1UeXBlOkNjOkxpc3QtU3Vic2NyaWJlOkxpc3QtSGVscDpMaXN0LVBvc3Q6CisJTGlzdC1BcmNoaXZlOkxpc3QtVW5zdWJzY3JpYmU6TGlzdC1JZDpNSU1FLVZlcnNpb246UmVmZXJlbmNlczpJbi1SZXBseS1UbzoKKwlNZXNzYWdlLUlEOkRhdGU6U3ViamVjdDpUbzpGcm9tOlJlcGx5LVRvOkNvbnRlbnQtSUQ6Q29udGVudC1EZXNjcmlwdGlvbjoKKwlSZXNlbnQtRGF0ZTpSZXNlbnQtRnJvbTpSZXNlbnQtU2VuZGVyOlJlc2VudC1UbzpSZXNlbnQtQ2M6UmVzZW50LU1lc3NhZ2UtSUQ6CisJTGlzdC1Pd25lcjsgYmg9TElyNXBvTFVUL1VkSDYvYWtoL3BuSUNHR2EzclVCa04rNEZoRTFEeU9yVT07IGI9U3BPaTB1ZUZjb0ova2EKKwk0ZXNhNmNEZDVvVTRmcDB6Njg0WlZQYVZ2dmhtL2F6U1pCQk1ZaW5IYUFXNkV2ektjTU5ZSVg5Z3JQOGVnLzcyOGxFUE5US1ZxMEk4SAorCVBRWjlLdkQ0dVR1OE9wbzFoRDhMc1JTTHIrWUxwTkt0M0tQT1kvNGdwd1E5N3VVOXJJNVB3a3VBeFBCZ1I5NDlWaDVFaUcwVmF3dzFICisJRXArSTVCRlJuMkxWVlFaUDFaN1UwQTBWVWNPVExKNHpub1dSTEVYeHRNOS9XZDRod1FzckVQUXN6ZURGdGkvUmJ3R2ZKNWVmT2I1VUwKKwlmaHdCelN4RUxFekFBZ0g3ZW52L1hEMnNTU3BWZjJRc242V084RDNaZXBNdFdyUnRBUmlhUktTTnhTQlFUZzJTU0hjam1CU0pTemNYKworCXc4d3FXYVVNczBjcmxCdVpXUzFnPT07CitSZWNlaXZlZDogZnJvbSBsb2NhbGhvc3QgKFsxMjcuMC4wLjFdIGhlbG89Ym9tYmFkaWwuaW5mcmFkZWFkLm9yZykKKwlieSBib21iYWRpbC5pbmZyYWRlYWQub3JnIHdpdGggZXNtdHAgKEV4aW0gNC45Mi4zICMzIChSZWQgSGF0IExpbnV4KSkKKwlpZCAxamVCc2MtMDAwMXRJLTg4OyBUaHUsIDI4IE1heSAyMDIwIDA2OjE5OjAyICswMDAwCitSZWNlaXZlZDogZnJvbSBtYWlsZ3cwMS5tZWRpYXRlay5jb20gKFsyMTYuMjAwLjI0MC4xODRdKQorIGJ5IGJvbWJhZGlsLmluZnJhZGVhZC5vcmcgd2l0aCBlc210cHMgKEV4aW0gNC45Mi4zICMzIChSZWQgSGF0IExpbnV4KSkKKyBpZCAxamVCc1otMDAwMXJwLTZnOyBUaHUsIDI4IE1heSAyMDIwIDA2OjE5OjAxICswMDAwCitYLVVVSUQ6IGJlZWFmNTc2NTM1NzQzOWM5MWVhYjFmNjdjYTdlZjQzLTIwMjAwNTI3CitES0lNLVNpZ25hdHVyZTogdj0xOyBhPXJzYS1zaGEyNTY7IHE9ZG5zL3R4dDsgYz1yZWxheGVkL3JlbGF4ZWQ7CisgZD1tZWRpYXRlay5jb207Cisgcz1kazsKKyBoPUNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6Q29udGVudC1UeXBlOk1JTUUtVmVyc2lvbjpSZWZlcmVuY2VzOkluLVJlcGx5LVRvOk1lc3NhZ2UtSUQ6RGF0ZTpTdWJqZWN0OkNDOlRvOkZyb207CisgYmg9K0lqV2pzRi9EaGtucVpCK2xMU1o1MGN5dnhEYXArOHc0dHZxaHA4RHY2OD07CisgYj1VR0lCb0lFR0pVdXE1cEV2WUVhZDFIVkdwaXY2eW1hKzk0aHZhODNEMmdEOGxZbWloUldrcEp4QjJ5bitkVnRObTdaWFhvUUJmK2p2dlVMT21zbEpnczFIWlRMSlRuanBkdkxtUXFvNDJPWFJYU1ZwVEU0OUhkUmtKWkRBSVdJQVJlQmZPRWtGZ054Y0lYM3VlZHJ0bnd3L05MSjJsYWdyWVBHNUVUNGxJMkU9OworWC1VVUlEOiBiZWVhZjU3NjUzNTc0MzljOTFlYWIxZjY3Y2E3ZWY0My0yMDIwMDUyNworUmVjZWl2ZWQ6IGZyb20gbXRrY2FzNjgubWVkaWF0ZWsuaW5jIFsoMTcyLjI5Ljk0LjE5KV0gYnkgbWFpbGd3MDEubWVkaWF0ZWsuY29tCisgKGVudmVsb3BlLWZyb20gPGNodWFuamlhLmxpdUBtZWRpYXRlay5jb20+KQorIChtdXNyZWxheS5tZWRpYXRlay5jb20gRVNNVFAgd2l0aCBUTFMpCisgd2l0aCBFU01UUCBpZCA2MDM0MDYzNDM7IFdlZCwgMjcgTWF5IDIwMjAgMjI6MTk6MTcgLTA4MDAKK1JlY2VpdmVkOiBmcm9tIG10a21iczA3bjEubWVkaWF0ZWsuaW5jICgxNzIuMjEuMTAxLjE2KSBieQorIE1US01CUzYyRFIubWVkaWF0ZWsuaW5jICgxNzIuMjkuOTQuMTgpIHdpdGggTWljcm9zb2Z0IFNNVFAgU2VydmVyIChUTFMpIGlkCisgMTUuMC4xNDk3LjI7IFdlZCwgMjcgTWF5IDIwMjAgMjM6MTg6NDcgLTA3MDAKK1JlY2VpdmVkOiBmcm9tIG10a2NhczA3Lm1lZGlhdGVrLmluYyAoMTcyLjIxLjEwMS44NCkgYnkKKyBtdGttYnMwN24xLm1lZGlhdGVrLmluYyAoMTcyLjIxLjEwMS4xNikgd2l0aCBNaWNyb3NvZnQgU01UUCBTZXJ2ZXIgKFRMUykgaWQKKyAxNS4wLjE0OTcuMjsgVGh1LCAyOCBNYXkgMjAyMCAxNDoxODo1MSArMDgwMAorUmVjZWl2ZWQ6IGZyb20gbG9jYWxob3N0LmxvY2FsZG9tYWluICgxMC4xNy4zLjE1MykgYnkgbXRrY2FzMDcubWVkaWF0ZWsuaW5jCisgKDE3Mi4yMS4xMDEuNzMpIHdpdGggTWljcm9zb2Z0IFNNVFAgU2VydmVyIGlkIDE1LjAuMTQ5Ny4yIHZpYSBGcm9udGVuZAorIFRyYW5zcG9ydDsgVGh1LCAyOCBNYXkgMjAyMCAxNDoxODo0OSArMDgwMAorRnJvbTogPGNodWFuamlhLmxpdUBtZWRpYXRlay5jb20+CitUbzogPHJvYmgrZHRAa2VybmVsLm9yZz4sIDxyeWRlci5sZWVAbWVkaWF0ZWsuY29tPiwgPG1hdHRoaWFzLmJnZ0BnbWFpbC5jb20+CitTdWJqZWN0OiBbUEFUQ0ggdjIgMi80XSBQQ0k6IG1lZGlhdGVrOiBVc2UgcmVnbWFwIHRvIGdldCBzaGFyZWQgcGNpZS1jZmcgYmFzZQorRGF0ZTogVGh1LCAyOCBNYXkgMjAyMCAxNDoxNjo0NiArMDgwMAorTWVzc2FnZS1JRDogPDIwMjAwNTI4MDYxNjQ4LjMyMDc4LTMtY2h1YW5qaWEubGl1QG1lZGlhdGVrLmNvbT4KK1gtTWFpbGVyOiBnaXQtc2VuZC1lbWFpbCAyLjE4LjAKK0luLVJlcGx5LVRvOiA8MjAyMDA1MjgwNjE2NDguMzIwNzgtMS1jaHVhbmppYS5saXVAbWVkaWF0ZWsuY29tPgorUmVmZXJlbmNlczogPDIwMjAwNTI4MDYxNjQ4LjMyMDc4LTEtY2h1YW5qaWEubGl1QG1lZGlhdGVrLmNvbT4KK01JTUUtVmVyc2lvbjogMS4wCitYLU1USzogTgorWC1DUk0xMTQtVmVyc2lvbjogMjAxMDAxMDYtQmxhbWVNaWNoZWxzb24gKCBUUkUgMC44LjAgKEJTRCkgKSBNUi02NDY3MDlFMyAKK1gtQ1JNMTE0LUNhY2hlSUQ6IHNmaWQtMjAyMDA1MjdfMjMxODU5XzI1MTI3NV9CRUQyQjFFMiAKK1gtQ1JNMTE0LVN0YXR1czogR09PRCAoICAxMS42MiAgKQorWC1TcGFtLVNjb3JlOiAtMC4yICgvKQorWC1TcGFtLVJlcG9ydDogU3BhbUFzc2Fzc2luIHZlcnNpb24gMy40LjQgb24gYm9tYmFkaWwuaW5mcmFkZWFkLm9yZyBzdW1tYXJ5OgorIENvbnRlbnQgYW5hbHlzaXMgZGV0YWlsczogICAoLTAuMiBwb2ludHMpCisgcHRzIHJ1bGUgbmFtZSAgICAgICAgICAgICAgZGVzY3JpcHRpb24KKyAtLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIC0wLjAgU1BGX1BBU1MgICAgICAgICAgICAgICBTUEY6IHNlbmRlciBtYXRjaGVzIFNQRiByZWNvcmQKKyAwLjAgU1BGX0hFTE9fTk9ORSAgICAgICAgICBTUEY6IEhFTE8gZG9lcyBub3QgcHVibGlzaCBhbiBTUEYgUmVjb3JkCisgMC4wIE1JTUVfQkFTRTY0X1RFWFQgICAgICAgUkFXOiBNZXNzYWdlIHRleHQgZGlzZ3Vpc2VkIHVzaW5nIGJhc2U2NAorIGVuY29kaW5nCisgLTAuMSBES0lNX1ZBTElEX0FVICAgICAgICAgIE1lc3NhZ2UgaGFzIGEgdmFsaWQgREtJTSBvciBESyBzaWduYXR1cmUgZnJvbQorIGF1dGhvcidzIGRvbWFpbgorIDAuMSBES0lNX1NJR05FRCAgICAgICAgICAgIE1lc3NhZ2UgaGFzIGEgREtJTSBvciBESyBzaWduYXR1cmUsCisgbm90IG5lY2Vzc2FyaWx5CisgdmFsaWQKKyAtMC4xIERLSU1fVkFMSUQgTWVzc2FnZSBoYXMgYXQgbGVhc3Qgb25lIHZhbGlkIERLSU0gb3IgREsgc2lnbmF0dXJlCisgLTAuMSBES0lNX1ZBTElEX0VGICAgICAgICAgIE1lc3NhZ2UgaGFzIGEgdmFsaWQgREtJTSBvciBESyBzaWduYXR1cmUgZnJvbQorIGVudmVsb3BlLWZyb20gZG9tYWluCisgMC4wIFVOUEFSU0VBQkxFX1JFTEFZICAgICAgSW5mb3JtYXRpb25hbDogbWVzc2FnZSBoYXMgdW5wYXJzZWFibGUgcmVsYXkKKyBsaW5lcworWC1CZWVuVGhlcmU6IGxpbnV4LW1lZGlhdGVrQGxpc3RzLmluZnJhZGVhZC5vcmcKK1gtTWFpbG1hbi1WZXJzaW9uOiAyLjEuMjkKK1ByZWNlZGVuY2U6IGxpc3QKK0xpc3QtSWQ6IDxsaW51eC1tZWRpYXRlay5saXN0cy5pbmZyYWRlYWQub3JnPgorTGlzdC1VbnN1YnNjcmliZTogPGh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vb3B0aW9ucy9saW51eC1tZWRpYXRlaz4sCisgPG1haWx0bzpsaW51eC1tZWRpYXRlay1yZXF1ZXN0QGxpc3RzLmluZnJhZGVhZC5vcmc/c3ViamVjdD11bnN1YnNjcmliZT4KK0xpc3QtQXJjaGl2ZTogPGh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL3BpcGVybWFpbC9saW51eC1tZWRpYXRlay8+CitMaXN0LVBvc3Q6IDxtYWlsdG86bGludXgtbWVkaWF0ZWtAbGlzdHMuaW5mcmFkZWFkLm9yZz4KK0xpc3QtSGVscDogPG1haWx0bzpsaW51eC1tZWRpYXRlay1yZXF1ZXN0QGxpc3RzLmluZnJhZGVhZC5vcmc/c3ViamVjdD1oZWxwPgorTGlzdC1TdWJzY3JpYmU6IDxodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LW1lZGlhdGVrPiwKKyA8bWFpbHRvOmxpbnV4LW1lZGlhdGVrLXJlcXVlc3RAbGlzdHMuaW5mcmFkZWFkLm9yZz9zdWJqZWN0PXN1YnNjcmliZT4KK0NjOiBkZXZpY2V0cmVlQHZnZXIua2VybmVsLm9yZywgbG9yZW56by5waWVyYWxpc2lAYXJtLmNvbSwKKyBzcnZfaGV1cHN0cmVhbUBtZWRpYXRlay5jb20sICJjaHVhbmppYS5saXUiIDxDaHVhbmppYS5MaXVAbWVkaWF0ZWsuY29tPiwKKyBsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnLCBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnLAorIGppYW5qdW4ud2FuZ0BtZWRpYXRlay5jb20sIGxpbnV4LW1lZGlhdGVrQGxpc3RzLmluZnJhZGVhZC5vcmcsCisgeW9uZy53dUBtZWRpYXRlay5jb20sIGJoZWxnYWFzQGdvb2dsZS5jb20sCisgbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnLCBhbXVycmF5QHRoZWdvb2RwZW5ndWluLmNvLnVrCitTZW5kZXI6ICJMaW51eC1tZWRpYXRlayIgPGxpbnV4LW1lZGlhdGVrLWJvdW5jZXNAbGlzdHMuaW5mcmFkZWFkLm9yZz4KK0Vycm9ycy1UbzogCisgbGludXgtbWVkaWF0ZWstYm91bmNlcytwYXRjaHdvcmstbGludXgtbWVkaWF0ZWs9cGF0Y2h3b3JrLmtlcm5lbC5vcmdAbGlzdHMuaW5mcmFkZWFkLm9yZworCitGcm9tOiAiY2h1YW5qaWEubGl1IiA8Q2h1YW5qaWEuTGl1QG1lZGlhdGVrLmNvbT4KKworVXNlIHJlZ21hcCB0byBnZXQgc2hhcmVkIHBjaWUtY2ZnIGJhc2UgYW5kIGNoYW5nZQordGhlIG1ldGhvZCB0byBnZXQgcGNpZSBpcnEuCisKK1NpZ25lZC1vZmYtYnk6IGNodWFuamlhLmxpdSA8Q2h1YW5qaWEuTGl1QG1lZGlhdGVrLmNvbT4KKy0tLQorIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1tZWRpYXRlay5jIHwgMjUgKysrKysrKysrKysrKysrKysrLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCistLS0gYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtbWVkaWF0ZWsuYworKysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLW1lZGlhdGVrLmMKK0BAIC0xNCw2ICsxNCw3IEBACisgI2luY2x1ZGUgPGxpbnV4L2lycWNoaXAvY2hhaW5lZF9pcnEuaD4KKyAjaW5jbHVkZSA8bGludXgvaXJxZG9tYWluLmg+CisgI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+CisgI2luY2x1ZGUgPGxpbnV4L21zaS5oPgorICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyAjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorQEAgLTIzLDYgKzI0LDcgQEAKKyAjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgorICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyAjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyAjaW5jbHVkZSA8bGludXgvcmVzZXQuaD4KKyAKKyAjaW5jbHVkZSAiLi4vcGNpLmgiCitAQCAtMjA1LDYgKzIwNyw3IEBAIHN0cnVjdCBtdGtfcGNpZV9wb3J0IHsKKyAgKiBzdHJ1Y3QgbXRrX3BjaWUgLSBQQ0llIGhvc3QgaW5mb3JtYXRpb24KKyAgKiBAZGV2OiBwb2ludGVyIHRvIFBDSWUgZGV2aWNlCisgICogQGJhc2U6IElPIG1hcHBlZCByZWdpc3RlciBiYXNlCisrICogQGNmZzogSU8gbWFwcGVkIHJlZ2lzdGVyIG1hcCBmb3IgUENJZSBjb25maWcKKyAgKiBAZnJlZV9jazogZnJlZS1ydW4gcmVmZXJlbmNlIGNsb2NrCisgICogQG1lbTogbm9uLXByZWZldGNoYWJsZSBtZW1vcnkgcmVzb3VyY2UKKyAgKiBAcG9ydHM6IHBvaW50ZXIgdG8gUENJZSBwb3J0IGluZm9ybWF0aW9uCitAQCAtMjE0LDYgKzIxNyw3IEBAIHN0cnVjdCBtdGtfcGNpZV9wb3J0IHsKKyBzdHJ1Y3QgbXRrX3BjaWUgeworIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CisgCXZvaWQgX19pb21lbSAqYmFzZTsKKysJc3RydWN0IHJlZ21hcCAqY2ZnOworIAlzdHJ1Y3QgY2xrICpmcmVlX2NrOworIAorIAlzdHJ1Y3QgcmVzb3VyY2UgbWVtOworQEAgLTY1MSw3ICs2NTUsNyBAQCBzdGF0aWMgaW50IG10a19wY2llX3NldHVwX2lycShzdHJ1Y3QgbXRrCisgCQlyZXR1cm4gZXJyOworIAl9CisgCistCXBvcnQtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgcG9ydC0+c2xvdCk7CisrCXBvcnQtPmlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJwY2llX2lycSIpOworIAlpcnFfc2V0X2NoYWluZWRfaGFuZGxlcl9hbmRfZGF0YShwb3J0LT5pcnEsCisgCQkJCQkgbXRrX3BjaWVfaW50cl9oYW5kbGVyLCBwb3J0KTsKKyAKK0BAIC02NjYsMTIgKzY3MCwxMSBAQCBzdGF0aWMgaW50IG10a19wY2llX3N0YXJ0dXBfcG9ydF92MihzdHJ1CisgCXUzMiB2YWw7CisgCWludCBlcnI7CisgCistCS8qIE1UNzYyMiBwbGF0Zm9ybXMgbmVlZCB0byBlbmFibGUgTFRTU00gYW5kIEFTUE0gZnJvbSBQQ0llIHN1YnN5cyAqLworLQlpZiAocGNpZS0+YmFzZSkgeworLQkJdmFsID0gcmVhZGwocGNpZS0+YmFzZSArIFBDSUVfU1lTX0NGR19WMik7CistCQl2YWwgfD0gUENJRV9DU1JfTFRTU01fRU4ocG9ydC0+c2xvdCkgfAorLQkJICAgICAgIFBDSUVfQ1NSX0FTUE1fTDFfRU4ocG9ydC0+c2xvdCk7CistCQl3cml0ZWwodmFsLCBwY2llLT5iYXNlICsgUENJRV9TWVNfQ0ZHX1YyKTsKKysJLyogTVQ3NjIyL01UNzYyOSBwbGF0Zm9ybXMgbmVlZCB0byBlbmFibGUgTFRTU00gYW5kIEFTUE0uICovCisrCWlmIChwY2llLT5jZmcpIHsKKysJCXZhbCA9IFBDSUVfQ1NSX0xUU1NNX0VOKHBvcnQtPnNsb3QpIHwKKysJCSAgICAgIFBDSUVfQ1NSX0FTUE1fTDFfRU4ocG9ydC0+c2xvdCk7CisrCQlyZWdtYXBfdXBkYXRlX2JpdHMocGNpZS0+Y2ZnLCBQQ0lFX1NZU19DRkdfVjIsIHZhbCwgdmFsKTsKKyAJfQorIAorIAkvKiBBc3NlcnQgYWxsIHJlc2V0IHNpZ25hbHMgKi8KK0BAIC05NzcsNiArOTgwLDcgQEAgc3RhdGljIGludCBtdGtfcGNpZV9zdWJzeXNfcG93ZXJ1cChzdHJ1YworIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwY2llLT5kZXY7CisgCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKyAJc3RydWN0IHJlc291cmNlICpyZWdzOworKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNmZ19ub2RlOworIAlpbnQgZXJyOworIAorIAkvKiBnZXQgc2hhcmVkIHJlZ2lzdGVycywgd2hpY2ggYXJlIG9wdGlvbmFsICovCitAQCAtOTg5LDYgKzk5MywxMyBAQCBzdGF0aWMgaW50IG10a19wY2llX3N1YnN5c19wb3dlcnVwKHN0cnVjCisgCQl9CisgCX0KKyAKKysJY2ZnX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKGRldi0+b2Zfbm9kZSwgIm1lZGlhdGVrLHBjaWUtY2ZnIiwgMCk7CisrCWlmIChjZmdfbm9kZSkgeworKwkJcGNpZS0+Y2ZnID0gc3lzY29uX25vZGVfdG9fcmVnbWFwKGNmZ19ub2RlKTsKKysJCWlmIChJU19FUlIocGNpZS0+Y2ZnKSkKKysJCQlyZXR1cm4gUFRSX0VSUihwY2llLT5jZmcpOworKwl9CisrCisgCXBjaWUtPmZyZWVfY2sgPSBkZXZtX2Nsa19nZXQoZGV2LCAiZnJlZV9jayIpOworIAlpZiAoSVNfRVJSKHBjaWUtPmZyZWVfY2spKSB7CisgCQlpZiAoUFRSX0VSUihwY2llLT5mcmVlX2NrKSA9PSAtRVBST0JFX0RFRkVSKQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA5OTMtYXJtNjQtZHRzLW1lZGlhdGVrLVNwbGl0LVBDSWUtbm9kZS1mb3ItTVQyNzEyLU1UNzYyMi5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wOTkzLWFybTY0LWR0cy1tZWRpYXRlay1TcGxpdC1QQ0llLW5vZGUtZm9yLU1UMjcxMi1NVDc2MjIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M1NTU4YgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wOTkzLWFybTY0LWR0cy1tZWRpYXRlay1TcGxpdC1QQ0llLW5vZGUtZm9yLU1UMjcxMi1NVDc2MjIucGF0Y2gKQEAgLTAsMCArMSw0MTcgQEAKK0Zyb20gcGF0Y2h3b3JrIFRodSBNYXkgMjggMDY6MTY6NDcgMjAyMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CitYLVBhdGNod29yay1TdWJtaXR0ZXI6IENodWFuamlhIExpdSA8Y2h1YW5qaWEubGl1QG1lZGlhdGVrLmNvbT4KK1gtUGF0Y2h3b3JrLUlkOiAxMTU3NDc4NQorUmV0dXJuLVBhdGg6IAorIDxTUlMwPWZ0U0E9N0s9bGlzdHMuaW5mcmFkZWFkLm9yZz1saW51eC1tZWRpYXRlay1ib3VuY2VzK3BhdGNod29yay1saW51eC1tZWRpYXRlaz1wYXRjaHdvcmsua2VybmVsLm9yZ0BrZXJuZWwub3JnPgorUmVjZWl2ZWQ6IGZyb20gbWFpbC5rZXJuZWwub3JnIChwZHgta29yZy1tYWlsLTEud2ViLmNvZGVhdXJvcmEub3JnCisgWzE3Mi4zMC4yMDAuMTIzXSkKKwlieSBwZHgta29yZy1wYXRjaHdvcmstMi53ZWIuY29kZWF1cm9yYS5vcmcgKFBvc3RmaXgpIHdpdGggRVNNVFAgaWQgOTMzMzAxMzkxCisJZm9yIDxwYXRjaHdvcmstbGludXgtbWVkaWF0ZWtAcGF0Y2h3b3JrLmtlcm5lbC5vcmc+OworIFRodSwgMjggTWF5IDIwMjAgMDY6MTk6MTYgKzAwMDAgKFVUQykKK1JlY2VpdmVkOiBmcm9tIGJvbWJhZGlsLmluZnJhZGVhZC5vcmcgKGJvbWJhZGlsLmluZnJhZGVhZC5vcmcKKyBbMTk4LjEzNy4yMDIuMTMzXSkKKwkodXNpbmcgVExTdjEuMiB3aXRoIGNpcGhlciBFQ0RIRS1SU0EtQUVTMjU2LUdDTS1TSEEzODQgKDI1Ni8yNTYgYml0cykpCisJKE5vIGNsaWVudCBjZXJ0aWZpY2F0ZSByZXF1ZXN0ZWQpCisJYnkgbWFpbC5rZXJuZWwub3JnIChQb3N0Zml4KSB3aXRoIEVTTVRQUyBpZCBEMTlGMDIwNzhDCisJZm9yIDxwYXRjaHdvcmstbGludXgtbWVkaWF0ZWtAcGF0Y2h3b3JrLmtlcm5lbC5vcmc+OworIFRodSwgMjggTWF5IDIwMjAgMDY6MTk6MTUgKzAwMDAgKFVUQykKK0F1dGhlbnRpY2F0aW9uLVJlc3VsdHM6IG1haWwua2VybmVsLm9yZzsKKwlka2ltPXBhc3MgKDIwNDgtYml0IGtleSkgaGVhZGVyLmQ9bGlzdHMuaW5mcmFkZWFkLm9yZworIGhlYWRlci5pPUBsaXN0cy5pbmZyYWRlYWQub3JnIGhlYWRlci5iPSJzOEs3dDdERiI7CisJZGtpbT1mYWlsIHJlYXNvbj0ic2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmYWlsZWQiICgxMDI0LWJpdCBrZXkpCisgaGVhZGVyLmQ9bWVkaWF0ZWsuY29tIGhlYWRlci5pPUBtZWRpYXRlay5jb20gaGVhZGVyLmI9IlJoWDgxSXFwIgorRE1BUkMtRmlsdGVyOiBPcGVuRE1BUkMgRmlsdGVyIHYxLjMuMiBtYWlsLmtlcm5lbC5vcmcgRDE5RjAyMDc4QworQXV0aGVudGljYXRpb24tUmVzdWx0czogbWFpbC5rZXJuZWwub3JnOworIGRtYXJjPWZhaWwgKHA9bm9uZSBkaXM9bm9uZSkgaGVhZGVyLmZyb209bWVkaWF0ZWsuY29tCitBdXRoZW50aWNhdGlvbi1SZXN1bHRzOiBtYWlsLmtlcm5lbC5vcmc7Cisgc3BmPW5vbmUKKyBzbXRwLm1haWxmcm9tPWxpbnV4LW1lZGlhdGVrLWJvdW5jZXMrcGF0Y2h3b3JrLWxpbnV4LW1lZGlhdGVrPXBhdGNod29yay5rZXJuZWwub3JnQGxpc3RzLmluZnJhZGVhZC5vcmcKK0RLSU0tU2lnbmF0dXJlOiB2PTE7IGE9cnNhLXNoYTI1NjsgcT1kbnMvdHh0OyBjPXJlbGF4ZWQvcmVsYXhlZDsKKwlkPWxpc3RzLmluZnJhZGVhZC5vcmc7IHM9Ym9tYmFkaWwuMjAxNzAyMDk7IGg9U2VuZGVyOgorCUNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6Q29udGVudC1UeXBlOkNjOkxpc3QtU3Vic2NyaWJlOkxpc3QtSGVscDpMaXN0LVBvc3Q6CisJTGlzdC1BcmNoaXZlOkxpc3QtVW5zdWJzY3JpYmU6TGlzdC1JZDpNSU1FLVZlcnNpb246UmVmZXJlbmNlczpJbi1SZXBseS1UbzoKKwlNZXNzYWdlLUlEOkRhdGU6U3ViamVjdDpUbzpGcm9tOlJlcGx5LVRvOkNvbnRlbnQtSUQ6Q29udGVudC1EZXNjcmlwdGlvbjoKKwlSZXNlbnQtRGF0ZTpSZXNlbnQtRnJvbTpSZXNlbnQtU2VuZGVyOlJlc2VudC1UbzpSZXNlbnQtQ2M6UmVzZW50LU1lc3NhZ2UtSUQ6CisJTGlzdC1Pd25lcjsgYmg9Tkh5SHFOTWNFN0xXMTBNd2R1T0pvS2lXZThjditYYXlZK0w2V0RaZVN1MD07IGI9czhLN3Q3REZoMWlRNXcKKwllR3Z1TVJnWEVRdi9ZV1J1U1pSeVg4bHg4UjJIOUl1YXdFSWdraE82bEVvNnh2MFZkc1J1ajhTcHRmb1dnNWFmQ0l0TWhpaDM3M00yMQorCTZzVXkzdEVpdUtHZ2tsZnhMVTByZUxFa2FBVGtLUkdMSkRZM2VTU3MxbXZaRHJ5ZEt1WkxEVGthK1lER2FpRVNsT2hxTXI5NU5tNllNCisJeUs4TzAwcVR3U1JQSlVJTFJzQnYxZS9LejhOUkNtWWhzNTZzbkFCSmtLZUo1MU5SQWtiMjBSNnFHVEVkNlV5Qmx6M2pUVll3bHVMZ0YKKwliZHF6eXdEVDYrQk5nL0FnaDZaZCt2MlBwTzRjbXdDcEdtNjIrM1VVeVprZmkvYVE0cVovQUZBZlNRSSszWkJBZ3NLTUMxUEdpZk9pLworCUZnR3hJdkFVazZhdEJ5N0RBSHV3PT07CitSZWNlaXZlZDogZnJvbSBsb2NhbGhvc3QgKFsxMjcuMC4wLjFdIGhlbG89Ym9tYmFkaWwuaW5mcmFkZWFkLm9yZykKKwlieSBib21iYWRpbC5pbmZyYWRlYWQub3JnIHdpdGggZXNtdHAgKEV4aW0gNC45Mi4zICMzIChSZWQgSGF0IExpbnV4KSkKKwlpZCAxamVCc24tMDAwMjVDLUVGOyBUaHUsIDI4IE1heSAyMDIwIDA2OjE5OjEzICswMDAwCitSZWNlaXZlZDogZnJvbSBtYWlsZ3cwMS5tZWRpYXRlay5jb20gKFsyMTYuMjAwLjI0MC4xODRdKQorIGJ5IGJvbWJhZGlsLmluZnJhZGVhZC5vcmcgd2l0aCBlc210cHMgKEV4aW0gNC45Mi4zICMzIChSZWQgSGF0IExpbnV4KSkKKyBpZCAxamVCc1otMDAwMXM0LTZqOyBUaHUsIDI4IE1heSAyMDIwIDA2OjE5OjAxICswMDAwCitYLVVVSUQ6IGM2MjEwZTYzNzFmYTQ0NWRiMGFlNDBhOGI4YTdhMGExLTIwMjAwNTI3CitES0lNLVNpZ25hdHVyZTogdj0xOyBhPXJzYS1zaGEyNTY7IHE9ZG5zL3R4dDsgYz1yZWxheGVkL3JlbGF4ZWQ7CisgZD1tZWRpYXRlay5jb207Cisgcz1kazsKKyBoPUNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6Q29udGVudC1UeXBlOk1JTUUtVmVyc2lvbjpSZWZlcmVuY2VzOkluLVJlcGx5LVRvOk1lc3NhZ2UtSUQ6RGF0ZTpTdWJqZWN0OkNDOlRvOkZyb207CisgYmg9WDlBd1RkYmhwV21sV1k0TGpUbThLTHE0Q2NhM1lJOVVueUNYM08wQkFhaz07CisgYj1SaFg4MUlxcDBtV2hCRHlNUU1GU0V0dDIzK0RHQVdvaW4xU3JGR1AxYnpwNkdFdHUzOGIycEs1UkpWQnNoSnR1eGkvYTF1TVhaamVEc0hKbjAyVkdkTkEwN0Zyelo3anE2WVlFTCs4Y0pzMkRuaHlTbU5FbFphelhQdjJ2S3U5VFd5Z2ZpbFRUMjRoL3U4Vi9lc3p1UnVoa2RvVUtXb2w4THdEbFBsOWdza2c9OworWC1VVUlEOiBjNjIxMGU2MzcxZmE0NDVkYjBhZTQwYThiOGE3YTBhMS0yMDIwMDUyNworUmVjZWl2ZWQ6IGZyb20gbXRrY2FzNjgubWVkaWF0ZWsuaW5jIFsoMTcyLjI5Ljk0LjE5KV0gYnkgbWFpbGd3MDEubWVkaWF0ZWsuY29tCisgKGVudmVsb3BlLWZyb20gPGNodWFuamlhLmxpdUBtZWRpYXRlay5jb20+KQorIChtdXNyZWxheS5tZWRpYXRlay5jb20gRVNNVFAgd2l0aCBUTFMpCisgd2l0aCBFU01UUCBpZCA3NTYxOTkyOyBXZWQsIDI3IE1heSAyMDIwIDIyOjE5OjE3IC0wODAwCitSZWNlaXZlZDogZnJvbSBtdGttYnMwN24xLm1lZGlhdGVrLmluYyAoMTcyLjIxLjEwMS4xNikgYnkKKyBNVEtNQlM2MkRSLm1lZGlhdGVrLmluYyAoMTcyLjI5Ljk0LjE4KSB3aXRoIE1pY3Jvc29mdCBTTVRQIFNlcnZlciAoVExTKSBpZAorIDE1LjAuMTQ5Ny4yOyBXZWQsIDI3IE1heSAyMDIwIDIzOjE4OjQ3IC0wNzAwCitSZWNlaXZlZDogZnJvbSBtdGtjYXMwNy5tZWRpYXRlay5pbmMgKDE3Mi4yMS4xMDEuODQpIGJ5CisgbXRrbWJzMDduMS5tZWRpYXRlay5pbmMgKDE3Mi4yMS4xMDEuMTYpIHdpdGggTWljcm9zb2Z0IFNNVFAgU2VydmVyIChUTFMpIGlkCisgMTUuMC4xNDk3LjI7IFRodSwgMjggTWF5IDIwMjAgMTQ6MTg6NTIgKzA4MDAKK1JlY2VpdmVkOiBmcm9tIGxvY2FsaG9zdC5sb2NhbGRvbWFpbiAoMTAuMTcuMy4xNTMpIGJ5IG10a2NhczA3Lm1lZGlhdGVrLmluYworICgxNzIuMjEuMTAxLjczKSB3aXRoIE1pY3Jvc29mdCBTTVRQIFNlcnZlciBpZCAxNS4wLjE0OTcuMiB2aWEgRnJvbnRlbmQKKyBUcmFuc3BvcnQ7IFRodSwgMjggTWF5IDIwMjAgMTQ6MTg6NTEgKzA4MDAKK0Zyb206IDxjaHVhbmppYS5saXVAbWVkaWF0ZWsuY29tPgorVG86IDxyb2JoK2R0QGtlcm5lbC5vcmc+LCA8cnlkZXIubGVlQG1lZGlhdGVrLmNvbT4sIDxtYXR0aGlhcy5iZ2dAZ21haWwuY29tPgorU3ViamVjdDogW1BBVENIIHYyIDMvNF0gYXJtNjQ6IGR0czogbWVkaWF0ZWs6IFNwbGl0IFBDSWUgbm9kZSBmb3IKKyBNVDI3MTIvTVQ3NjIyCitEYXRlOiBUaHUsIDI4IE1heSAyMDIwIDE0OjE2OjQ3ICswODAwCitNZXNzYWdlLUlEOiA8MjAyMDA1MjgwNjE2NDguMzIwNzgtNC1jaHVhbmppYS5saXVAbWVkaWF0ZWsuY29tPgorWC1NYWlsZXI6IGdpdC1zZW5kLWVtYWlsIDIuMTguMAorSW4tUmVwbHktVG86IDwyMDIwMDUyODA2MTY0OC4zMjA3OC0xLWNodWFuamlhLmxpdUBtZWRpYXRlay5jb20+CitSZWZlcmVuY2VzOiA8MjAyMDA1MjgwNjE2NDguMzIwNzgtMS1jaHVhbmppYS5saXVAbWVkaWF0ZWsuY29tPgorTUlNRS1WZXJzaW9uOiAxLjAKK1gtTVRLOiBOCitYLUNSTTExNC1WZXJzaW9uOiAyMDEwMDEwNi1CbGFtZU1pY2hlbHNvbiAoIFRSRSAwLjguMCAoQlNEKSApIE1SLTY0NjcwOUUzIAorWC1DUk0xMTQtQ2FjaGVJRDogc2ZpZC0yMDIwMDUyN18yMzE4NTlfMjUzNTI5X0I2NzUxQzVBIAorWC1DUk0xMTQtU3RhdHVzOiBHT09EICggIDEyLjIwICApCitYLVNwYW0tU2NvcmU6IC0wLjIgKC8pCitYLVNwYW0tUmVwb3J0OiBTcGFtQXNzYXNzaW4gdmVyc2lvbiAzLjQuNCBvbiBib21iYWRpbC5pbmZyYWRlYWQub3JnIHN1bW1hcnk6CisgQ29udGVudCBhbmFseXNpcyBkZXRhaWxzOiAgICgtMC4yIHBvaW50cykKKyBwdHMgcnVsZSBuYW1lICAgICAgICAgICAgICBkZXNjcmlwdGlvbgorIC0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgLTAuMCBTUEZfUEFTUyAgICAgICAgICAgICAgIFNQRjogc2VuZGVyIG1hdGNoZXMgU1BGIHJlY29yZAorIDAuMCBTUEZfSEVMT19OT05FICAgICAgICAgIFNQRjogSEVMTyBkb2VzIG5vdCBwdWJsaXNoIGFuIFNQRiBSZWNvcmQKKyAwLjAgTUlNRV9CQVNFNjRfVEVYVCAgICAgICBSQVc6IE1lc3NhZ2UgdGV4dCBkaXNndWlzZWQgdXNpbmcgYmFzZTY0CisgZW5jb2RpbmcKKyAtMC4xIERLSU1fVkFMSURfQVUgICAgICAgICAgTWVzc2FnZSBoYXMgYSB2YWxpZCBES0lNIG9yIERLIHNpZ25hdHVyZSBmcm9tCisgYXV0aG9yJ3MgZG9tYWluCisgMC4xIERLSU1fU0lHTkVEICAgICAgICAgICAgTWVzc2FnZSBoYXMgYSBES0lNIG9yIERLIHNpZ25hdHVyZSwKKyBub3QgbmVjZXNzYXJpbHkKKyB2YWxpZAorIC0wLjEgREtJTV9WQUxJRCBNZXNzYWdlIGhhcyBhdCBsZWFzdCBvbmUgdmFsaWQgREtJTSBvciBESyBzaWduYXR1cmUKKyAtMC4xIERLSU1fVkFMSURfRUYgICAgICAgICAgTWVzc2FnZSBoYXMgYSB2YWxpZCBES0lNIG9yIERLIHNpZ25hdHVyZSBmcm9tCisgZW52ZWxvcGUtZnJvbSBkb21haW4KKyAwLjAgVU5QQVJTRUFCTEVfUkVMQVkgICAgICBJbmZvcm1hdGlvbmFsOiBtZXNzYWdlIGhhcyB1bnBhcnNlYWJsZSByZWxheQorIGxpbmVzCitYLUJlZW5UaGVyZTogbGludXgtbWVkaWF0ZWtAbGlzdHMuaW5mcmFkZWFkLm9yZworWC1NYWlsbWFuLVZlcnNpb246IDIuMS4yOQorUHJlY2VkZW5jZTogbGlzdAorTGlzdC1JZDogPGxpbnV4LW1lZGlhdGVrLmxpc3RzLmluZnJhZGVhZC5vcmc+CitMaXN0LVVuc3Vic2NyaWJlOiA8aHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9vcHRpb25zL2xpbnV4LW1lZGlhdGVrPiwKKyA8bWFpbHRvOmxpbnV4LW1lZGlhdGVrLXJlcXVlc3RAbGlzdHMuaW5mcmFkZWFkLm9yZz9zdWJqZWN0PXVuc3Vic2NyaWJlPgorTGlzdC1BcmNoaXZlOiA8aHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvcGlwZXJtYWlsL2xpbnV4LW1lZGlhdGVrLz4KK0xpc3QtUG9zdDogPG1haWx0bzpsaW51eC1tZWRpYXRla0BsaXN0cy5pbmZyYWRlYWQub3JnPgorTGlzdC1IZWxwOiA8bWFpbHRvOmxpbnV4LW1lZGlhdGVrLXJlcXVlc3RAbGlzdHMuaW5mcmFkZWFkLm9yZz9zdWJqZWN0PWhlbHA+CitMaXN0LVN1YnNjcmliZTogPGh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtbWVkaWF0ZWs+LAorIDxtYWlsdG86bGludXgtbWVkaWF0ZWstcmVxdWVzdEBsaXN0cy5pbmZyYWRlYWQub3JnP3N1YmplY3Q9c3Vic2NyaWJlPgorQ2M6IGRldmljZXRyZWVAdmdlci5rZXJuZWwub3JnLCBsb3JlbnpvLnBpZXJhbGlzaUBhcm0uY29tLAorIHNydl9oZXVwc3RyZWFtQG1lZGlhdGVrLmNvbSwgImNodWFuamlhLmxpdSIgPENodWFuamlhLkxpdUBtZWRpYXRlay5jb20+LAorIGxpbnV4LXBjaUB2Z2VyLmtlcm5lbC5vcmcsIGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcsCisgamlhbmp1bi53YW5nQG1lZGlhdGVrLmNvbSwgbGludXgtbWVkaWF0ZWtAbGlzdHMuaW5mcmFkZWFkLm9yZywKKyB5b25nLnd1QG1lZGlhdGVrLmNvbSwgYmhlbGdhYXNAZ29vZ2xlLmNvbSwKKyBsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcsIGFtdXJyYXlAdGhlZ29vZHBlbmd1aW4uY28udWsKK1NlbmRlcjogIkxpbnV4LW1lZGlhdGVrIiA8bGludXgtbWVkaWF0ZWstYm91bmNlc0BsaXN0cy5pbmZyYWRlYWQub3JnPgorRXJyb3JzLVRvOiAKKyBsaW51eC1tZWRpYXRlay1ib3VuY2VzK3BhdGNod29yay1saW51eC1tZWRpYXRlaz1wYXRjaHdvcmsua2VybmVsLm9yZ0BsaXN0cy5pbmZyYWRlYWQub3JnCisKK0Zyb206ICJjaHVhbmppYS5saXUiIDxDaHVhbmppYS5MaXVAbWVkaWF0ZWsuY29tPgorCitUaGVyZSBhcmUgdHdvIGluZGVwZW5kZW50IFBDSWUgY29udHJvbGxlcnMgaW4gTVQyNzEyL01UNzYyMiBwbGF0Zm9ybSwKK2FuZCBlYWNoIG9mIHRoZW0gc2hvdWxkIGNvbnRhaW4gYW4gaW5kZXBlbmRlbnQgTVNJIGRvbWFpbi4KKworSW4gY3VycmVudCBhcmNoaXRlY3R1cmUsIE1TSSBkb21haW4gd2lsbCBiZSBpbmhlcml0ZWQgZnJvbSB0aGUgcm9vdAorYnJpZGdlLCBhbmQgYWxsIG9mIHRoZSBkZXZpY2VzIHdpbGwgc2hhcmUgdGhlIHNhbWUgTVNJIGRvbWFpbi4KK0hlbmNlIHRoYXQsIHRoZSBQQ0llIGRldmljZXMgd2lsbCBub3Qgd29yayBwcm9wZXJseSBpZiB0aGUgaXJxIG51bWJlcgord2hpY2ggcmVxdWlyZWQgaXMgbW9yZSB0aGFuIDMyLgorCitTcGxpdCB0aGUgUENJZSBub2RlIGZvciBNVDI3MTIvTVQ3NjIyIHBsYXRmb3JtIHRvIGZpeCBNU0kgaXNzdWUgYW5kCitjb21wbHkgd2l0aCB0aGUgaGFyZHdhcmUgZGVzaWduLgorCitTaWduZWQtb2ZmLWJ5OiBjaHVhbmppYS5saXUgPENodWFuamlhLkxpdUBtZWRpYXRlay5jb20+CistLS0KKyBhcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210MjcxMmUuZHRzaSAgICAgfCA3NSArKysrKysrKysrKy0tLS0tLS0tCisgLi4uL2R0cy9tZWRpYXRlay9tdDc2MjItYmFuYW5hcGktYnBpLXI2NC5kdHMgIHwgMTYgKystLQorIGFyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3NjIyLXJmYjEuZHRzICB8ICA2ICstCisgYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc2MjIuZHRzaSAgICAgIHwgNjggKysrKysrKysrKystLS0tLS0KKyA0IGZpbGVzIGNoYW5nZWQsIDk2IGluc2VydGlvbnMoKyksIDY5IGRlbGV0aW9ucygtKQorCistLS0gYS9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210MjcxMmUuZHRzaQorKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDI3MTJlLmR0c2kKK0BAIC03OTEsNjAgKzc5MSw3MyBAQAorIAkJfTsKKyAJfTsKKyAKKy0JcGNpZTogcGNpZUAxMTcwMDAwMCB7CisrCXBjaWUxOiBwY2llQDExMmZmMDAwIHsKKyAJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQyNzEyLXBjaWUiOworIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKy0JCXJlZyA9IDwwIDB4MTE3MDAwMDAgMCAweDEwMDA+LAorLQkJICAgICAgPDAgMHgxMTJmZjAwMCAwIDB4MTAwMD47CistCQlyZWctbmFtZXMgPSAicG9ydDAiLCAicG9ydDEiOworKwkJcmVnID0gPDAgMHgxMTJmZjAwMCAwIDB4MTAwMD47CisrCQlyZWctbmFtZXMgPSAicG9ydDEiOworIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisgCQkjc2l6ZS1jZWxscyA9IDwyPjsKKy0JCWludGVycnVwdHMgPSA8R0lDX1NQSSAxMTUgSVJRX1RZUEVfTEVWRUxfSElHSD4sCistCQkJICAgICA8R0lDX1NQSSAxMTcgSVJRX1RZUEVfTEVWRUxfSElHSD47CistCQljbG9ja3MgPSA8JnRvcGNrZ2VuIENMS19UT1BfUEUyX01BQ19QMF9TRUw+LAorLQkJCSA8JnRvcGNrZ2VuIENMS19UT1BfUEUyX01BQ19QMV9TRUw+LAorLQkJCSA8JnBlcmljZmcgQ0xLX1BFUklfUENJRTA+LAorKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDExNyBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKysJCWludGVycnVwdC1uYW1lcyA9ICJwY2llX2lycSI7CisrCQljbG9ja3MgPSA8JnRvcGNrZ2VuIENMS19UT1BfUEUyX01BQ19QMV9TRUw+LAorIAkJCSA8JnBlcmljZmcgQ0xLX1BFUklfUENJRTE+OworLQkJY2xvY2stbmFtZXMgPSAic3lzX2NrMCIsICJzeXNfY2sxIiwgImFoYl9jazAiLCAiYWhiX2NrMSI7CistCQlwaHlzID0gPCZ1M3BvcnQwIFBIWV9UWVBFX1BDSUU+LCA8JnUzcG9ydDEgUEhZX1RZUEVfUENJRT47CistCQlwaHktbmFtZXMgPSAicGNpZS1waHkwIiwgInBjaWUtcGh5MSI7CisrCQljbG9jay1uYW1lcyA9ICJzeXNfY2sxIiwgImFoYl9jazEiOworKwkJcGh5cyA9IDwmdTNwb3J0MSBQSFlfVFlQRV9QQ0lFPjsKKysJCXBoeS1uYW1lcyA9ICJwY2llLXBoeTEiOworIAkJYnVzLXJhbmdlID0gPDB4MDAgMHhmZj47CistCQlyYW5nZXMgPSA8MHg4MjAwMDAwMCAwIDB4MjAwMDAwMDAgIDB4MCAweDIwMDAwMDAwICAwIDB4MTAwMDAwMDA+OworKwkJcmFuZ2VzID0gPDB4ODIwMDAwMDAgMCAweDExNDAwMDAwICAweDAgMHgxMTQwMDAwMCAgMCAweDMwMDAwMD47CisrCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworIAorLQkJcGNpZTA6IHBjaWVAMCwwIHsKKy0JCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworLQkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CistCQkJcmVnID0gPDB4MDAwMCAwIDAgMCAwPjsKKysJCXNsb3QxOiBwY2llQDEsMCB7CisrCQkJcmVnID0gPDB4MDgwMCAwIDAgMCAwPjsKKyAJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKyAJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKyAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworIAkJCXJhbmdlczsKKyAJCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MCAwIDAgNz47CistCQkJaW50ZXJydXB0LW1hcCA9IDwwIDAgMCAxICZwY2llX2ludGMwIDA+LAorLQkJCQkJPDAgMCAwIDIgJnBjaWVfaW50YzAgMT4sCistCQkJCQk8MCAwIDAgMyAmcGNpZV9pbnRjMCAyPiwKKy0JCQkJCTwwIDAgMCA0ICZwY2llX2ludGMwIDM+OworLQkJCXBjaWVfaW50YzA6IGludGVycnVwdC1jb250cm9sbGVyIHsKKysJCQlpbnRlcnJ1cHQtbWFwID0gPDAgMCAwIDEgJnBjaWVfaW50YzEgMD4sCisrCQkJCQk8MCAwIDAgMiAmcGNpZV9pbnRjMSAxPiwKKysJCQkJCTwwIDAgMCAzICZwY2llX2ludGMxIDI+LAorKwkJCQkJPDAgMCAwIDQgJnBjaWVfaW50YzEgMz47CisrCQkJcGNpZV9pbnRjMTogaW50ZXJydXB0LWNvbnRyb2xsZXIgeworIAkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKyAJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisgCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisgCQkJfTsKKyAJCX07CisrCX07CisgCistCQlwY2llMTogcGNpZUAxLDAgeworLQkJCWRldmljZV90eXBlID0gInBjaSI7CistCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKy0JCQlyZWcgPSA8MHgwODAwIDAgMCAwIDA+OworKwlwY2llMDogcGNpZUAxMTcwMDAwMCB7CisrCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10MjcxMi1wY2llIjsKKysJCWRldmljZV90eXBlID0gInBjaSI7CisrCQlyZWcgPSA8MCAweDExNzAwMDAwIDAgMHgxMDAwPjsKKysJCXJlZy1uYW1lcyA9ICJwb3J0MCI7CisrCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKysJCSNzaXplLWNlbGxzID0gPDI+OworKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDExNSBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKysJCWludGVycnVwdC1uYW1lcyA9ICJwY2llX2lycSI7CisrCQljbG9ja3MgPSA8JnRvcGNrZ2VuIENMS19UT1BfUEUyX01BQ19QMF9TRUw+LAorKwkJCSA8JnBlcmljZmcgQ0xLX1BFUklfUENJRTA+OworKwkJY2xvY2stbmFtZXMgPSAic3lzX2NrMCIsICJhaGJfY2swIjsKKysJCXBoeXMgPSA8JnUzcG9ydDAgUEhZX1RZUEVfUENJRT47CisrCQlwaHktbmFtZXMgPSAicGNpZS1waHkwIjsKKysJCWJ1cy1yYW5nZSA9IDwweDAwIDB4ZmY+OworKwkJcmFuZ2VzID0gPDB4ODIwMDAwMDAgMCAweDIwMDAwMDAwIDB4MCAweDIwMDAwMDAwIDAgMHgxMDAwMDAwMD47CisrCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworKworKwkJc2xvdDA6IHBjaWVAMCwwIHsKKysJCQlyZWcgPSA8MHgwMDAwIDAgMCAwIDA+OworIAkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworIAkJCSNzaXplLWNlbGxzID0gPDI+OworIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisgCQkJcmFuZ2VzOworIAkJCWludGVycnVwdC1tYXAtbWFzayA9IDwwIDAgMCA3PjsKKy0JCQlpbnRlcnJ1cHQtbWFwID0gPDAgMCAwIDEgJnBjaWVfaW50YzEgMD4sCistCQkJCQk8MCAwIDAgMiAmcGNpZV9pbnRjMSAxPiwKKy0JCQkJCTwwIDAgMCAzICZwY2llX2ludGMxIDI+LAorLQkJCQkJPDAgMCAwIDQgJnBjaWVfaW50YzEgMz47CistCQkJcGNpZV9pbnRjMTogaW50ZXJydXB0LWNvbnRyb2xsZXIgeworKwkJCWludGVycnVwdC1tYXAgPSA8MCAwIDAgMSAmcGNpZV9pbnRjMCAwPiwKKysJCQkJCTwwIDAgMCAyICZwY2llX2ludGMwIDE+LAorKwkJCQkJPDAgMCAwIDMgJnBjaWVfaW50YzAgMj4sCisrCQkJCQk8MCAwIDAgNCAmcGNpZV9pbnRjMCAzPjsKKysJCQlwY2llX2ludGMwOiBpbnRlcnJ1cHQtY29udHJvbGxlciB7CisgCQkJCWludGVycnVwdC1jb250cm9sbGVyOworIAkJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKyAJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKy0tLSBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3NjIyLWJhbmFuYXBpLWJwaS1yNjQuZHRzCisrKysgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210NzYyMi1iYW5hbmFwaS1icGktcjY0LmR0cworQEAgLTI5NCwxOCArMjk0LDE2IEBACisgCX07CisgfTsKKyAKKy0mcGNpZSB7CisrJnBjaWUwIHsKKyAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKy0JcGluY3RybC0wID0gPCZwY2llMF9waW5zPiwgPCZwY2llMV9waW5zPjsKKysJcGluY3RybC0wID0gPCZwY2llMF9waW5zPjsKKyAJc3RhdHVzID0gIm9rYXkiOworK307CisgCistCXBjaWVAMCwwIHsKKy0JCXN0YXR1cyA9ICJva2F5IjsKKy0JfTsKKy0KKy0JcGNpZUAxLDAgeworLQkJc3RhdHVzID0gIm9rYXkiOworLQl9OworKyZwY2llMSB7CisrCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisrCXBpbmN0cmwtMCA9IDwmcGNpZTFfcGlucz47CisrCXN0YXR1cyA9ICJva2F5IjsKKyB9OworIAorICZwaW8geworLS0tIGEvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc2MjIuZHRzaQorKysrIGIvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc2MjIuZHRzaQorQEAgLTc5NCw0NSArNzk0LDQxIEBACisgCQkjcmVzZXQtY2VsbHMgPSA8MT47CisgCX07CisgCistCXBjaWU6IHBjaWVAMWExNDAwMDAgeworKwlwY2llY2ZnOiBwY2llY2ZnQDFhMTQwMDAwIHsKKysJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NjIyLXBjaWVjZmciLCAic3lzY29uIjsKKysJCXJlZyA9IDwwIDB4MWExNDAwMDAgMCAweDEwMDA+OworKwl9OworKworKwlwY2llMDogcGNpZUAxYTE0MzAwMCB7CisgCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzYyMi1wY2llIjsKKyAJCWRldmljZV90eXBlID0gInBjaSI7CistCQlyZWcgPSA8MCAweDFhMTQwMDAwIDAgMHgxMDAwPiwKKy0JCSAgICAgIDwwIDB4MWExNDMwMDAgMCAweDEwMDA+LAorLQkJICAgICAgPDAgMHgxYTE0NTAwMCAwIDB4MTAwMD47CistCQlyZWctbmFtZXMgPSAic3Vic3lzIiwgInBvcnQwIiwgInBvcnQxIjsKKysJCXJlZyA9IDwwIDB4MWExNDMwMDAgMCAweDEwMDA+OworKwkJcmVnLW5hbWVzID0gInBvcnQwIjsKKysJCW1lZGlhdGVrLHBjaWUtY2ZnID0gPCZwY2llY2ZnPjsKKyAJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworIAkJI3NpemUtY2VsbHMgPSA8Mj47CistCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjI4IElSUV9UWVBFX0xFVkVMX0xPVz4sCistCQkJICAgICA8R0lDX1NQSSAyMjkgSVJRX1RZUEVfTEVWRUxfTE9XPjsKKysJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyMjggSVJRX1RZUEVfTEVWRUxfTE9XPjsKKysJCWludGVycnVwdC1uYW1lcyA9ICJwY2llX2lycSI7CisgCQljbG9ja3MgPSA8JnBjaWVzeXMgQ0xLX1BDSUVfUDBfTUFDX0VOPiwKKy0JCQkgPCZwY2llc3lzIENMS19QQ0lFX1AxX01BQ19FTj4sCistCQkJIDwmcGNpZXN5cyBDTEtfUENJRV9QMF9BSEJfRU4+LAorIAkJCSA8JnBjaWVzeXMgQ0xLX1BDSUVfUDBfQUhCX0VOPiwKKyAJCQkgPCZwY2llc3lzIENMS19QQ0lFX1AwX0FVWF9FTj4sCistCQkJIDwmcGNpZXN5cyBDTEtfUENJRV9QMV9BVVhfRU4+LAorIAkJCSA8JnBjaWVzeXMgQ0xLX1BDSUVfUDBfQVhJX0VOPiwKKy0JCQkgPCZwY2llc3lzIENMS19QQ0lFX1AxX0FYSV9FTj4sCisgCQkJIDwmcGNpZXN5cyBDTEtfUENJRV9QMF9PQkZGX0VOPiwKKy0JCQkgPCZwY2llc3lzIENMS19QQ0lFX1AxX09CRkZfRU4+LAorLQkJCSA8JnBjaWVzeXMgQ0xLX1BDSUVfUDBfUElQRV9FTj4sCistCQkJIDwmcGNpZXN5cyBDTEtfUENJRV9QMV9QSVBFX0VOPjsKKy0JCWNsb2NrLW5hbWVzID0gInN5c19jazAiLCAic3lzX2NrMSIsICJhaGJfY2swIiwgImFoYl9jazEiLAorLQkJCSAgICAgICJhdXhfY2swIiwgImF1eF9jazEiLCAiYXhpX2NrMCIsICJheGlfY2sxIiwKKy0JCQkgICAgICAib2JmZl9jazAiLCAib2JmZl9jazEiLCAicGlwZV9jazAiLCAicGlwZV9jazEiOworKwkJCSA8JnBjaWVzeXMgQ0xLX1BDSUVfUDBfUElQRV9FTj47CisrCQljbG9jay1uYW1lcyA9ICJzeXNfY2swIiwgImFoYl9jazAiLCAiYXV4X2NrMCIsCisrCQkJICAgICAgImF4aV9jazAiLCAib2JmZl9jazAiLCAicGlwZV9jazAiOworKworIAkJcG93ZXItZG9tYWlucyA9IDwmc2Nwc3lzIE1UNzYyMl9QT1dFUl9ET01BSU5fSElGMD47CisgCQlidXMtcmFuZ2UgPSA8MHgwMCAweGZmPjsKKy0JCXJhbmdlcyA9IDwweDgyMDAwMDAwIDAgMHgyMDAwMDAwMCAweDAgMHgyMDAwMDAwMCAwIDB4MTAwMDAwMDA+OworKwkJcmFuZ2VzID0gPDB4ODIwMDAwMDAgMCAweDIwMDAwMDAwICAweDAgMHgyMDAwMDAwMCAgMCAweDgwMDAwMDA+OworIAkJc3RhdHVzID0gImRpc2FibGVkIjsKKyAKKy0JCXBjaWUwOiBwY2llQDAsMCB7CisrCQlzbG90MDogcGNpZUAwLDAgeworIAkJCXJlZyA9IDwweDAwMDAgMCAwIDAgMD47CisgCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisgCQkJI3NpemUtY2VsbHMgPSA8Mj47CisgCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKyAJCQlyYW5nZXM7CistCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKy0KKyAJCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MCAwIDAgNz47CisgCQkJaW50ZXJydXB0LW1hcCA9IDwwIDAgMCAxICZwY2llX2ludGMwIDA+LAorIAkJCQkJPDAgMCAwIDIgJnBjaWVfaW50YzAgMT4sCitAQCAtODQ0LDE1ICs4NDAsMzkgQEAKKyAJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKyAJCQl9OworIAkJfTsKKysJfTsKKyAKKy0JCXBjaWUxOiBwY2llQDEsMCB7CisrCXBjaWUxOiBwY2llQDFhMTQ1MDAwIHsKKysJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NjIyLXBjaWUiOworKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKysJCXJlZyA9IDwwIDB4MWExNDUwMDAgMCAweDEwMDA+OworKwkJcmVnLW5hbWVzID0gInBvcnQxIjsKKysJCW1lZGlhdGVrLHBjaWUtY2ZnID0gPCZwY2llY2ZnPjsKKysJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworKwkJI3NpemUtY2VsbHMgPSA8Mj47CisrCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMjI5IElSUV9UWVBFX0xFVkVMX0xPVz47CisrCQlpbnRlcnJ1cHQtbmFtZXMgPSAicGNpZV9pcnEiOworKwkJY2xvY2tzID0gPCZwY2llc3lzIENMS19QQ0lFX1AxX01BQ19FTj4sCisrCQkJIC8qIGRlc2lnbmVyIGhhcyBjb25uZWN0IFJDMSB3aXRoIHAwX2FoYiBjbG9jayAqLworKwkJCSA8JnBjaWVzeXMgQ0xLX1BDSUVfUDBfQUhCX0VOPiwKKysJCQkgPCZwY2llc3lzIENMS19QQ0lFX1AxX0FVWF9FTj4sCisrCQkJIDwmcGNpZXN5cyBDTEtfUENJRV9QMV9BWElfRU4+LAorKwkJCSA8JnBjaWVzeXMgQ0xLX1BDSUVfUDFfT0JGRl9FTj4sCisrCQkJIDwmcGNpZXN5cyBDTEtfUENJRV9QMV9QSVBFX0VOPjsKKysJCWNsb2NrLW5hbWVzID0gInN5c19jazEiLCAiYWhiX2NrMSIsICJhdXhfY2sxIiwKKysJCQkgICAgICAiYXhpX2NrMSIsICJvYmZmX2NrMSIsICJwaXBlX2NrMSI7CisrCisrCQlwb3dlci1kb21haW5zID0gPCZzY3BzeXMgTVQ3NjIyX1BPV0VSX0RPTUFJTl9ISUYwPjsKKysJCWJ1cy1yYW5nZSA9IDwweDAwIDB4ZmY+OworKwkJcmFuZ2VzID0gPDB4ODIwMDAwMDAgMCAweDI4MDAwMDAwICAweDAgMHgyODAwMDAwMCAgMCAweDgwMDAwMDA+OworKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKysKKysJCXNsb3QxOiBwY2llQDEsMCB7CisgCQkJcmVnID0gPDB4MDgwMCAwIDAgMCAwPjsKKyAJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKyAJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKyAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworIAkJCXJhbmdlczsKKy0JCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworLQorIAkJCWludGVycnVwdC1tYXAtbWFzayA9IDwwIDAgMCA3PjsKKyAJCQlpbnRlcnJ1cHQtbWFwID0gPDAgMCAwIDEgJnBjaWVfaW50YzEgMD4sCisgCQkJCQk8MCAwIDAgMiAmcGNpZV9pbnRjMSAxPiwKKy0tLSBhL2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3NjIyLXJmYjEuZHRzCisrKysgYi9hcmNoL2FybTY0L2Jvb3QvZHRzL21lZGlhdGVrL210NzYyMi1yZmIxLmR0cworQEAgLTI1NCwxOCArMjU0LDE2IEBACisgCX07CisgfTsKKyAKKy0mcGNpZSB7CisrJnBjaWUwIHsKKyAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKy0JcGluY3RybC0wID0gPCZwY2llMF9waW5zPiwgPCZwY2llMV9waW5zPjsKKysJcGluY3RybC0wID0gPCZwY2llMF9waW5zPjsKKyAJc3RhdHVzID0gIm9rYXkiOworK307CisgCistCXBjaWVAMCwwIHsKKy0JCXN0YXR1cyA9ICJva2F5IjsKKy0JfTsKKy0KKy0JcGNpZUAxLDAgeworLQkJc3RhdHVzID0gIm9rYXkiOworLQl9OworKyZwY2llMSB7CisrCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisrCXBpbmN0cmwtMCA9IDwmcGNpZTFfcGlucz47CisrCXN0YXR1cyA9ICJva2F5IjsKKyB9OworIAorICZwaW8gewpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzA5OTQtQVJNLWR0cy1tZWRpYXRlay1VcGRhdGUtbXQ3NjI5LVBDSWUtbm9kZS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wOTk0LUFSTS1kdHMtbWVkaWF0ZWstVXBkYXRlLW10NzYyOS1QQ0llLW5vZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIwZTFmYwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8wOTk0LUFSTS1kdHMtbWVkaWF0ZWstVXBkYXRlLW10NzYyOS1QQ0llLW5vZGUucGF0Y2gKQEAgLTAsMCArMSwyMDMgQEAKK0Zyb20gcGF0Y2h3b3JrIFRodSBNYXkgMjggMDY6MTY6NDggMjAyMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CitYLVBhdGNod29yay1TdWJtaXR0ZXI6IENodWFuamlhIExpdSA8Y2h1YW5qaWEubGl1QG1lZGlhdGVrLmNvbT4KK1gtUGF0Y2h3b3JrLUlkOiAxMTU3NDc5NworUmV0dXJuLVBhdGg6IAorIDxTUlMwPWZ0U0E9N0s9bGlzdHMuaW5mcmFkZWFkLm9yZz1saW51eC1tZWRpYXRlay1ib3VuY2VzK3BhdGNod29yay1saW51eC1tZWRpYXRlaz1wYXRjaHdvcmsua2VybmVsLm9yZ0BrZXJuZWwub3JnPgorUmVjZWl2ZWQ6IGZyb20gbWFpbC5rZXJuZWwub3JnIChwZHgta29yZy1tYWlsLTEud2ViLmNvZGVhdXJvcmEub3JnCisgWzE3Mi4zMC4yMDAuMTIzXSkKKwlieSBwZHgta29yZy1wYXRjaHdvcmstMi53ZWIuY29kZWF1cm9yYS5vcmcgKFBvc3RmaXgpIHdpdGggRVNNVFAgaWQgMzBBNUUxMzkyCisJZm9yIDxwYXRjaHdvcmstbGludXgtbWVkaWF0ZWtAcGF0Y2h3b3JrLmtlcm5lbC5vcmc+OworIFRodSwgMjggTWF5IDIwMjAgMDY6Mjk6MDUgKzAwMDAgKFVUQykKK1JlY2VpdmVkOiBmcm9tIGJvbWJhZGlsLmluZnJhZGVhZC5vcmcgKGJvbWJhZGlsLmluZnJhZGVhZC5vcmcKKyBbMTk4LjEzNy4yMDIuMTMzXSkKKwkodXNpbmcgVExTdjEuMiB3aXRoIGNpcGhlciBFQ0RIRS1SU0EtQUVTMjU2LUdDTS1TSEEzODQgKDI1Ni8yNTYgYml0cykpCisJKE5vIGNsaWVudCBjZXJ0aWZpY2F0ZSByZXF1ZXN0ZWQpCisJYnkgbWFpbC5rZXJuZWwub3JnIChQb3N0Zml4KSB3aXRoIEVTTVRQUyBpZCAwOEI2MzIwNzIxCisJZm9yIDxwYXRjaHdvcmstbGludXgtbWVkaWF0ZWtAcGF0Y2h3b3JrLmtlcm5lbC5vcmc+OworIFRodSwgMjggTWF5IDIwMjAgMDY6Mjk6MDUgKzAwMDAgKFVUQykKK0F1dGhlbnRpY2F0aW9uLVJlc3VsdHM6IG1haWwua2VybmVsLm9yZzsKKwlka2ltPXBhc3MgKDIwNDgtYml0IGtleSkgaGVhZGVyLmQ9bGlzdHMuaW5mcmFkZWFkLm9yZworIGhlYWRlci5pPUBsaXN0cy5pbmZyYWRlYWQub3JnIGhlYWRlci5iPSJhdWh4RGFmWSI7CisJZGtpbT1mYWlsIHJlYXNvbj0ic2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmYWlsZWQiICgxMDI0LWJpdCBrZXkpCisgaGVhZGVyLmQ9bWVkaWF0ZWsuY29tIGhlYWRlci5pPUBtZWRpYXRlay5jb20gaGVhZGVyLmI9IktqMDlBcnhiIgorRE1BUkMtRmlsdGVyOiBPcGVuRE1BUkMgRmlsdGVyIHYxLjMuMiBtYWlsLmtlcm5lbC5vcmcgMDhCNjMyMDcyMQorQXV0aGVudGljYXRpb24tUmVzdWx0czogbWFpbC5rZXJuZWwub3JnOworIGRtYXJjPWZhaWwgKHA9bm9uZSBkaXM9bm9uZSkgaGVhZGVyLmZyb209bWVkaWF0ZWsuY29tCitBdXRoZW50aWNhdGlvbi1SZXN1bHRzOiBtYWlsLmtlcm5lbC5vcmc7Cisgc3BmPW5vbmUKKyBzbXRwLm1haWxmcm9tPWxpbnV4LW1lZGlhdGVrLWJvdW5jZXMrcGF0Y2h3b3JrLWxpbnV4LW1lZGlhdGVrPXBhdGNod29yay5rZXJuZWwub3JnQGxpc3RzLmluZnJhZGVhZC5vcmcKK0RLSU0tU2lnbmF0dXJlOiB2PTE7IGE9cnNhLXNoYTI1NjsgcT1kbnMvdHh0OyBjPXJlbGF4ZWQvcmVsYXhlZDsKKwlkPWxpc3RzLmluZnJhZGVhZC5vcmc7IHM9Ym9tYmFkaWwuMjAxNzAyMDk7IGg9U2VuZGVyOgorCUNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6Q29udGVudC1UeXBlOkNjOkxpc3QtU3Vic2NyaWJlOkxpc3QtSGVscDpMaXN0LVBvc3Q6CisJTGlzdC1BcmNoaXZlOkxpc3QtVW5zdWJzY3JpYmU6TGlzdC1JZDpNSU1FLVZlcnNpb246UmVmZXJlbmNlczpJbi1SZXBseS1UbzoKKwlNZXNzYWdlLUlEOkRhdGU6U3ViamVjdDpUbzpGcm9tOlJlcGx5LVRvOkNvbnRlbnQtSUQ6Q29udGVudC1EZXNjcmlwdGlvbjoKKwlSZXNlbnQtRGF0ZTpSZXNlbnQtRnJvbTpSZXNlbnQtU2VuZGVyOlJlc2VudC1UbzpSZXNlbnQtQ2M6UmVzZW50LU1lc3NhZ2UtSUQ6CisJTGlzdC1Pd25lcjsgYmg9K1FQeEYxdmxPSDdTdElaWXVYSmEzVjQweDhRVkR4Q0xGOUFGWEhibEI5TT07IGI9YXVoeERhZllCZWFVWk8KKwlhWXAyS1ZPOEFpZTB2NHRZdFJ3Qm9uN2hGK3g1NUp3RDc4U0F4UVIyUnNTdnJsT285Y01ZWWJ5K1RvVVdmbFZVV1E2MEZhcEFsK3crbAorCW5rRWpJT3JMQkVySHd4Tk9jc0Q4VDVranlDQk1xbHo0T01BUVlVRE5KM2ZTdWdSbEdoT3R4a2pDR2Q5ZWJCOE4yUnZ1Ni9VOFAxQTluCisJUDE1bUVRb2MrUkxvblIxKzltQmd3VEVYRXJqc3JheGtpbVRENFR4c3A0SXZNczNVZHNNa1ArcjNPVDVTL3ArVWo2TzlFUzBoN3hJb24KKwlhTDc5S2FWcVJMSHJmWnhuclZ3dUdpZWNBaVRwOHFMeTljbEh1SlUzMk5BNlpjWEgxT25XaXBLQXBncDhDazd5czgwV1BLYU1yYXQ5QgorCVh1c2tKNjN3MTNEWkFiQ1Z2dUdRPT07CitSZWNlaXZlZDogZnJvbSBsb2NhbGhvc3QgKFsxMjcuMC4wLjFdIGhlbG89Ym9tYmFkaWwuaW5mcmFkZWFkLm9yZykKKwlieSBib21iYWRpbC5pbmZyYWRlYWQub3JnIHdpdGggZXNtdHAgKEV4aW0gNC45Mi4zICMzIChSZWQgSGF0IExpbnV4KSkKKwlpZCAxamVDMkotMDAwMTRuLU05OyBUaHUsIDI4IE1heSAyMDIwIDA2OjI5OjAzICswMDAwCitSZWNlaXZlZDogZnJvbSBtYWlsZ3cwMi5tZWRpYXRlay5jb20gKFsyMTYuMjAwLjI0MC4xODVdKQorIGJ5IGJvbWJhZGlsLmluZnJhZGVhZC5vcmcgd2l0aCBlc210cHMgKEV4aW0gNC45Mi4zICMzIChSZWQgSGF0IExpbnV4KSkKKyBpZCAxamVDMkgtMDAwMTN0LUxpOyBUaHUsIDI4IE1heSAyMDIwIDA2OjI5OjAzICswMDAwCitYLVVVSUQ6IGE0ODc3YzE1ODZlNjRhZmViMmQ2MTcyZTEwNjA1ZDJiLTIwMjAwNTI3CitES0lNLVNpZ25hdHVyZTogdj0xOyBhPXJzYS1zaGEyNTY7IHE9ZG5zL3R4dDsgYz1yZWxheGVkL3JlbGF4ZWQ7CisgZD1tZWRpYXRlay5jb207Cisgcz1kazsKKyBoPUNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6Q29udGVudC1UeXBlOk1JTUUtVmVyc2lvbjpSZWZlcmVuY2VzOkluLVJlcGx5LVRvOk1lc3NhZ2UtSUQ6RGF0ZTpTdWJqZWN0OkNDOlRvOkZyb207CisgYmg9Q0l3Y0JGSzF4MExiT2pEdDFCRzYva25IRnhESFJpcWo4b3YvaldFWkRCWT07CisgYj1LajA5QXJ4Ym5MVlRjOWJwYVZQVDNqUXJJVmpoTDg3c1NZeVZGOWRGeXBTOTc2azc4Q2U5Z1pkMGY0SzN6QVpiWVpIWW9RdHV5T1E5VE9ldWZRZmdEK0NyK2o1VlI3cFRkTzJFMWlYSEZzL2VRQXo1Z0FqdmpsSzAxejFKaXVuckxubjlkdklyNmMxZ0VralFIbnkwVnB1WjFkdXh4Nzlqd1l1c2cvTnc2V2M9OworWC1VVUlEOiBhNDg3N2MxNTg2ZTY0YWZlYjJkNjE3MmUxMDYwNWQyYi0yMDIwMDUyNworUmVjZWl2ZWQ6IGZyb20gbXRrY2FzNjYubWVkaWF0ZWsuaW5jIFsoMTcyLjI5LjE5My40NCldIGJ5CisgbWFpbGd3MDIubWVkaWF0ZWsuY29tCisgKGVudmVsb3BlLWZyb20gPGNodWFuamlhLmxpdUBtZWRpYXRlay5jb20+KQorIChtdXNyZWxheS5tZWRpYXRlay5jb20gRVNNVFAgd2l0aCBUTFMpCisgd2l0aCBFU01UUCBpZCA4OTk2NjM2Nzc7IFdlZCwgMjcgTWF5IDIwMjAgMjI6Mjk6MjEgLTA4MDAKK1JlY2VpdmVkOiBmcm9tIE1US01CUzA3TjIubWVkaWF0ZWsuaW5jICgxNzIuMjEuMTAxLjE0MSkgYnkKKyBNVEtNQlM2MkRSLm1lZGlhdGVrLmluYyAoMTcyLjI5Ljk0LjE4KSB3aXRoIE1pY3Jvc29mdCBTTVRQIFNlcnZlciAoVExTKSBpZAorIDE1LjAuMTQ5Ny4yOyBXZWQsIDI3IE1heSAyMDIwIDIzOjE4OjUwIC0wNzAwCitSZWNlaXZlZDogZnJvbSBtdGtjYXMwNy5tZWRpYXRlay5pbmMgKDE3Mi4yMS4xMDEuODQpIGJ5CisgbXRrbWJzMDduMi5tZWRpYXRlay5pbmMgKDE3Mi4yMS4xMDEuMTQxKSB3aXRoIE1pY3Jvc29mdCBTTVRQIFNlcnZlciAoVExTKSBpZAorIDE1LjAuMTQ5Ny4yOyBUaHUsIDI4IE1heSAyMDIwIDE0OjE4OjU0ICswODAwCitSZWNlaXZlZDogZnJvbSBsb2NhbGhvc3QubG9jYWxkb21haW4gKDEwLjE3LjMuMTUzKSBieSBtdGtjYXMwNy5tZWRpYXRlay5pbmMKKyAoMTcyLjIxLjEwMS43Mykgd2l0aCBNaWNyb3NvZnQgU01UUCBTZXJ2ZXIgaWQgMTUuMC4xNDk3LjIgdmlhIEZyb250ZW5kCisgVHJhbnNwb3J0OyBUaHUsIDI4IE1heSAyMDIwIDE0OjE4OjUyICswODAwCitGcm9tOiA8Y2h1YW5qaWEubGl1QG1lZGlhdGVrLmNvbT4KK1RvOiA8cm9iaCtkdEBrZXJuZWwub3JnPiwgPHJ5ZGVyLmxlZUBtZWRpYXRlay5jb20+LCA8bWF0dGhpYXMuYmdnQGdtYWlsLmNvbT4KK1N1YmplY3Q6IFtQQVRDSCB2MiA0LzRdIEFSTTogZHRzOiBtZWRpYXRlazogVXBkYXRlIG10NzYyOSBQQ0llIG5vZGUKK0RhdGU6IFRodSwgMjggTWF5IDIwMjAgMTQ6MTY6NDggKzA4MDAKK01lc3NhZ2UtSUQ6IDwyMDIwMDUyODA2MTY0OC4zMjA3OC01LWNodWFuamlhLmxpdUBtZWRpYXRlay5jb20+CitYLU1haWxlcjogZ2l0LXNlbmQtZW1haWwgMi4xOC4wCitJbi1SZXBseS1UbzogPDIwMjAwNTI4MDYxNjQ4LjMyMDc4LTEtY2h1YW5qaWEubGl1QG1lZGlhdGVrLmNvbT4KK1JlZmVyZW5jZXM6IDwyMDIwMDUyODA2MTY0OC4zMjA3OC0xLWNodWFuamlhLmxpdUBtZWRpYXRlay5jb20+CitNSU1FLVZlcnNpb246IDEuMAorWC1NVEs6IE4KK1gtQ1JNMTE0LVZlcnNpb246IDIwMTAwMTA2LUJsYW1lTWljaGVsc29uICggVFJFIDAuOC4wIChCU0QpICkgTVItNjQ2NzA5RTMgCitYLUNSTTExNC1DYWNoZUlEOiBzZmlkLTIwMjAwNTI3XzIzMjkwMV83MTkxNzJfRTVBOTlDNjIgCitYLUNSTTExNC1TdGF0dXM6IEdPT0QgKCAgMTEuNjEgICkKK1gtU3BhbS1TY29yZTogLTAuMiAoLykKK1gtU3BhbS1SZXBvcnQ6IFNwYW1Bc3Nhc3NpbiB2ZXJzaW9uIDMuNC40IG9uIGJvbWJhZGlsLmluZnJhZGVhZC5vcmcgc3VtbWFyeToKKyBDb250ZW50IGFuYWx5c2lzIGRldGFpbHM6ICAgKC0wLjIgcG9pbnRzKQorIHB0cyBydWxlIG5hbWUgICAgICAgICAgICAgIGRlc2NyaXB0aW9uCisgLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAtMC4wIFNQRl9QQVNTICAgICAgICAgICAgICAgU1BGOiBzZW5kZXIgbWF0Y2hlcyBTUEYgcmVjb3JkCisgMC4wIFNQRl9IRUxPX05PTkUgICAgICAgICAgU1BGOiBIRUxPIGRvZXMgbm90IHB1Ymxpc2ggYW4gU1BGIFJlY29yZAorIDAuMCBNSU1FX0JBU0U2NF9URVhUICAgICAgIFJBVzogTWVzc2FnZSB0ZXh0IGRpc2d1aXNlZCB1c2luZyBiYXNlNjQKKyBlbmNvZGluZworIC0wLjEgREtJTV9WQUxJRF9BVSAgICAgICAgICBNZXNzYWdlIGhhcyBhIHZhbGlkIERLSU0gb3IgREsgc2lnbmF0dXJlIGZyb20KKyBhdXRob3IncyBkb21haW4KKyAwLjEgREtJTV9TSUdORUQgICAgICAgICAgICBNZXNzYWdlIGhhcyBhIERLSU0gb3IgREsgc2lnbmF0dXJlLAorIG5vdCBuZWNlc3NhcmlseQorIHZhbGlkCisgLTAuMSBES0lNX1ZBTElEIE1lc3NhZ2UgaGFzIGF0IGxlYXN0IG9uZSB2YWxpZCBES0lNIG9yIERLIHNpZ25hdHVyZQorIC0wLjEgREtJTV9WQUxJRF9FRiAgICAgICAgICBNZXNzYWdlIGhhcyBhIHZhbGlkIERLSU0gb3IgREsgc2lnbmF0dXJlIGZyb20KKyBlbnZlbG9wZS1mcm9tIGRvbWFpbgorIDAuMCBVTlBBUlNFQUJMRV9SRUxBWSAgICAgIEluZm9ybWF0aW9uYWw6IG1lc3NhZ2UgaGFzIHVucGFyc2VhYmxlIHJlbGF5CisgbGluZXMKK1gtQmVlblRoZXJlOiBsaW51eC1tZWRpYXRla0BsaXN0cy5pbmZyYWRlYWQub3JnCitYLU1haWxtYW4tVmVyc2lvbjogMi4xLjI5CitQcmVjZWRlbmNlOiBsaXN0CitMaXN0LUlkOiA8bGludXgtbWVkaWF0ZWsubGlzdHMuaW5mcmFkZWFkLm9yZz4KK0xpc3QtVW5zdWJzY3JpYmU6IDxodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL29wdGlvbnMvbGludXgtbWVkaWF0ZWs+LAorIDxtYWlsdG86bGludXgtbWVkaWF0ZWstcmVxdWVzdEBsaXN0cy5pbmZyYWRlYWQub3JnP3N1YmplY3Q9dW5zdWJzY3JpYmU+CitMaXN0LUFyY2hpdmU6IDxodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9waXBlcm1haWwvbGludXgtbWVkaWF0ZWsvPgorTGlzdC1Qb3N0OiA8bWFpbHRvOmxpbnV4LW1lZGlhdGVrQGxpc3RzLmluZnJhZGVhZC5vcmc+CitMaXN0LUhlbHA6IDxtYWlsdG86bGludXgtbWVkaWF0ZWstcmVxdWVzdEBsaXN0cy5pbmZyYWRlYWQub3JnP3N1YmplY3Q9aGVscD4KK0xpc3QtU3Vic2NyaWJlOiA8aHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1tZWRpYXRlaz4sCisgPG1haWx0bzpsaW51eC1tZWRpYXRlay1yZXF1ZXN0QGxpc3RzLmluZnJhZGVhZC5vcmc/c3ViamVjdD1zdWJzY3JpYmU+CitDYzogZGV2aWNldHJlZUB2Z2VyLmtlcm5lbC5vcmcsIGxvcmVuem8ucGllcmFsaXNpQGFybS5jb20sCisgc3J2X2hldXBzdHJlYW1AbWVkaWF0ZWsuY29tLCAiY2h1YW5qaWEubGl1IiA8Q2h1YW5qaWEuTGl1QG1lZGlhdGVrLmNvbT4sCisgbGludXgtcGNpQHZnZXIua2VybmVsLm9yZywgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZywKKyBqaWFuanVuLndhbmdAbWVkaWF0ZWsuY29tLCBsaW51eC1tZWRpYXRla0BsaXN0cy5pbmZyYWRlYWQub3JnLAorIHlvbmcud3VAbWVkaWF0ZWsuY29tLCBiaGVsZ2Fhc0Bnb29nbGUuY29tLAorIGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZywgYW11cnJheUB0aGVnb29kcGVuZ3Vpbi5jby51aworU2VuZGVyOiAiTGludXgtbWVkaWF0ZWsiIDxsaW51eC1tZWRpYXRlay1ib3VuY2VzQGxpc3RzLmluZnJhZGVhZC5vcmc+CitFcnJvcnMtVG86IAorIGxpbnV4LW1lZGlhdGVrLWJvdW5jZXMrcGF0Y2h3b3JrLWxpbnV4LW1lZGlhdGVrPXBhdGNod29yay5rZXJuZWwub3JnQGxpc3RzLmluZnJhZGVhZC5vcmcKKworRnJvbTogImNodWFuamlhLmxpdSIgPENodWFuamlhLkxpdUBtZWRpYXRlay5jb20+CisKK1JlbW92ZSB1bnVzZWQgcHJvcGVydHkgYW5kIGFkZCBwY2llY2ZnIG5vZGUuCisKK1NpZ25lZC1vZmYtYnk6IGNodWFuamlhLmxpdSA8Q2h1YW5qaWEuTGl1QG1lZGlhdGVrLmNvbT4KKy0tLQorIGFyY2gvYXJtL2Jvb3QvZHRzL210NzYyOS1yZmIuZHRzIHwgIDMgKystCisgYXJjaC9hcm0vYm9vdC9kdHMvbXQ3NjI5LmR0c2kgICAgfCAyMyArKysrKysrKysrKysrLS0tLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCisKKy0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL210NzYyOS1yZmIuZHRzCisrKysgYi9hcmNoL2FybS9ib290L2R0cy9tdDc2MjktcmZiLmR0cworQEAgLTE3MSw5ICsxNzEsMTAgQEAKKyAJfTsKKyB9OworIAorLSZwY2llIHsKKysmcGNpZTEgeworIAlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworIAlwaW5jdHJsLTAgPSA8JnBjaWVfcGlucz47CisrCXN0YXR1cyA9ICJva2F5IjsKKyB9OworIAorICZwY2llcGh5MSB7CistLS0gYS9hcmNoL2FybS9ib290L2R0cy9tdDc2MjkuZHRzaQorKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvbXQ3NjI5LmR0c2kKK0BAIC0zNjgsMTYgKzM2OCwyMSBAQAorIAkJCSNyZXNldC1jZWxscyA9IDwxPjsKKyAJCX07CisgCistCQlwY2llOiBwY2llQDFhMTQwMDAwIHsKKysJCXBjaWVjZmc6IHBjaWVjZmdAMWExNDAwMDAgeworKwkJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NjI5LXBjaWVjZmciLCAic3lzY29uIjsKKysJCQlyZWcgPSA8MHgxYTE0MDAwMCAweDEwMDA+OworKwkJfTsKKysKKysJCXBjaWUxOiBwY2llQDFhMTQ1MDAwIHsKKyAJCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzYyOS1wY2llIjsKKyAJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworLQkJCXJlZyA9IDwweDFhMTQwMDAwIDB4MTAwMD4sCistCQkJICAgICAgPDB4MWExNDUwMDAgMHgxMDAwPjsKKy0JCQlyZWctbmFtZXMgPSAic3Vic3lzIiwicG9ydDEiOworKwkJCXJlZyA9IDwweDFhMTQ1MDAwIDB4MTAwMD47CisrCQkJcmVnLW5hbWVzID0gInBvcnQxIjsKKysJCQltZWRpYXRlayxwY2llLWNmZyA9IDwmcGNpZWNmZz47CisgCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisgCQkJI3NpemUtY2VsbHMgPSA8Mj47CistCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE3NiBJUlFfVFlQRV9MRVZFTF9MT1c+LAorLQkJCQkgICAgIDxHSUNfU1BJIDIyOSBJUlFfVFlQRV9MRVZFTF9MT1c+OworKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAyMjkgSVJRX1RZUEVfTEVWRUxfTE9XPjsKKysJCQlpbnRlcnJ1cHQtbmFtZXMgPSAicGNpZV9pcnEiOworIAkJCWNsb2NrcyA9IDwmcGNpZXN5cyBDTEtfUENJRV9QMV9NQUNfRU4+LAorIAkJCQkgPCZwY2llc3lzIENMS19QQ0lFX1AwX0FIQl9FTj4sCisgCQkJCSA8JnBjaWVzeXMgQ0xLX1BDSUVfUDFfQVVYX0VOPiwKK0BAIC0zOTgsMjEgKzQwMywxOSBAQAorIAkJCXBvd2VyLWRvbWFpbnMgPSA8JnNjcHN5cyBNVDc2MjJfUE9XRVJfRE9NQUlOX0hJRjA+OworIAkJCWJ1cy1yYW5nZSA9IDwweDAwIDB4ZmY+OworIAkJCXJhbmdlcyA9IDwweDgyMDAwMDAwIDAgMHgyMDAwMDAwMCAweDIwMDAwMDAwIDAgMHgxMDAwMDAwMD47CisrCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKyAKKy0JCQlwY2llMTogcGNpZUAxLDAgeworLQkJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworKwkJCXNsb3QxOiBwY2llQDEsMCB7CisgCQkJCXJlZyA9IDwweDA4MDAgMCAwIDAgMD47CisgCQkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworIAkJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKyAJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKyAJCQkJcmFuZ2VzOworLQkJCQludW0tbGFuZXMgPSA8MT47CisgCQkJCWludGVycnVwdC1tYXAtbWFzayA9IDwwIDAgMCA3PjsKKyAJCQkJaW50ZXJydXB0LW1hcCA9IDwwIDAgMCAxICZwY2llX2ludGMxIDA+LAorIAkJCQkJCTwwIDAgMCAyICZwY2llX2ludGMxIDE+LAorIAkJCQkJCTwwIDAgMCAzICZwY2llX2ludGMxIDI+LAorIAkJCQkJCTwwIDAgMCA0ICZwY2llX2ludGMxIDM+OworLQorIAkJCQlwY2llX2ludGMxOiBpbnRlcnJ1cHQtY29udHJvbGxlciB7CisgCQkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKyAJCQkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzEwMDEtbXRraG5hdC1pcHY2LWZpeC1wc2tiLWV4cGFuZC1oZWFkLWxpbWl0YXRpb24ucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMTAwMS1tdGtobmF0LWlwdjYtZml4LXBza2ItZXhwYW5kLWhlYWQtbGltaXRhdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjcxOWM4Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzEwMDEtbXRraG5hdC1pcHY2LWZpeC1wc2tiLWV4cGFuZC1oZWFkLWxpbWl0YXRpb24ucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKK2luZGV4IDViYTFjNzJmLi5mNDIzOTQ1OSAxMDA2NDQKKy0tLSBhL25ldC9jb3JlL3NrYnVmZi5jCisrKysgYi9uZXQvY29yZS9za2J1ZmYuYworQEAgLTY5LDYgKzY5LDcgQEAKKyAjaW5jbHVkZSA8bmV0L2lwNl9jaGVja3N1bS5oPgorICNpbmNsdWRlIDxuZXQveGZybS5oPgorICNpbmNsdWRlIDxuZXQvbXBscy5oPgorKyNpbmNsdWRlIDxuZXQvcmFfbmF0Lmg+CisgCisgI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyAjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL3NrYi5oPgorQEAgLTE2NjYsNiArMTY2Nyw5IEBAIGludCBwc2tiX2V4cGFuZF9oZWFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaGVhZCwgaW50IG50YWlsLAorIAkgICAgICAgc2tiX3NoaW5mbyhza2IpLAorIAkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbywgZnJhZ3Nbc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnc10pKTsKKyAKKysJLypoZWFkcm9vbSBjb3B5Ki8KKysJbWVtY3B5KGRhdGEsIHNrYi0+aGVhZCwgRk9FX0lORk9fTEVOKTsKKysKKyAJLyoKKyAJICogaWYgc2hpbmZvIGlzIHNoYXJlZCB3ZSBtdXN0IGRyb3AgdGhlIG9sZCBoZWFkIGdyYWNlZnVsbHksIGJ1dCBpZiBpdAorIAkgKiBpcyBub3Qgd2UgY2FuIGp1c3QgZHJvcCB0aGUgb2xkIGhlYWQgYW5kIGxldCB0aGUgZXhpc3RpbmcgcmVmY291bnQKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8xMDAyLW10a2huYXQtYWRkLXN1cHBvcnQtZm9yLXZpcnR1YWwtaW50ZXJmYWNlLWFjY2VsZXJhdGlvbi5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8xMDAyLW10a2huYXQtYWRkLXN1cHBvcnQtZm9yLXZpcnR1YWwtaW50ZXJmYWNlLWFjY2VsZXJhdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTAwODdhCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzEwMDItbXRraG5hdC1hZGQtc3VwcG9ydC1mb3ItdmlydHVhbC1pbnRlcmZhY2UtYWNjZWxlcmF0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMTI3IEBACitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgKK2luZGV4IDNkNzNjMGMuLjk2MGFkZTEgMTAwNjQ0CistLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oCisrKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oCitAQCAtOTIsOSArOTIsMTIgQEAgc3RydWN0IGZsb3dfb2ZmbG9hZCB7CisgI2RlZmluZSBGTE9XX09GRkxPQURfUEFUSF9WTEFOCQlCSVQoMSkKKyAjZGVmaW5lIEZMT1dfT0ZGTE9BRF9QQVRIX1BQUE9FCQlCSVQoMikKKyAjZGVmaW5lIEZMT1dfT0ZGTE9BRF9QQVRIX0RTQQkJQklUKDMpCisrI2RlZmluZSBGTE9XX09GRkxPQURfUEFUSF9EU0xJVEUJQklUKDQpCisrI2RlZmluZSBGTE9XX09GRkxPQURfUEFUSF82UkQJCUJJVCg1KQorIAorIHN0cnVjdCBmbG93X29mZmxvYWRfaHdfcGF0aCB7CisgCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisrCXN0cnVjdCBuZXRfZGV2aWNlICp2aXJ0X2RldjsKKyAJdTMyIGZsYWdzOworIAorIAl1OCBldGhfc3JjW0VUSF9BTEVOXTsKK2RpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbl9kZXYuYyBiL25ldC84MDIxcS92bGFuX2Rldi5jCitpbmRleCBiZTY4MDE1MjQuLmM1MWFmNzBmNiAxMDA2NDQKKy0tLSBhL25ldC84MDIxcS92bGFuX2Rldi5jCisrKysgYi9uZXQvODAyMXEvdmxhbl9kZXYuYworQEAgLTc2MSw2ICs3NjEsNyBAQCBzdGF0aWMgaW50IHZsYW5fZGV2X2Zsb3dfb2ZmbG9hZF9jaGVjayhzdHJ1Y3QgZmxvd19vZmZsb2FkX2h3X3BhdGggKnBhdGgpCisgCXBhdGgtPmZsYWdzIHw9IEZMT1dfT0ZGTE9BRF9QQVRIX1ZMQU47CisgCXBhdGgtPnZsYW5fcHJvdG8gPSB2bGFuLT52bGFuX3Byb3RvOworIAlwYXRoLT52bGFuX2lkID0gdmxhbi0+dmxhbl9pZDsKKysJcGF0aC0+dmlydF9kZXYgPSBkZXY7CisgCXBhdGgtPmRldiA9IHZsYW4tPnJlYWxfZGV2OworIAorIAlpZiAodmxhbi0+cmVhbF9kZXYtPm5ldGRldl9vcHMtPm5kb19mbG93X29mZmxvYWRfY2hlY2spCitkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCitpbmRleCAxYjdlMzE0MWMuLmRhNGUzNGY3NCAxMDA2NDQKKy0tLSBhL25ldC9pcHY2L2lwNl90dW5uZWwuYworKysrIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCitAQCAtNTcsNiArNTcsMTEgQEAKKyAjaW5jbHVkZSA8bmV0L25ldG5zL2dlbmVyaWMuaD4KKyAjaW5jbHVkZSA8bmV0L2RzdF9tZXRhZGF0YS5oPgorIAorKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKQorKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KKysjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg+CisrI2VuZGlmCisrCisgTU9EVUxFX0FVVEhPUigiVmlsbGUgTnVvcnZhbGEiKTsKKyBNT0RVTEVfREVTQ1JJUFRJT04oIklQdjYgdHVubmVsaW5nIGRldmljZSIpOworIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK0BAIC0xODgwLDYgKzE4ODUsMjIgQEAgaW50IGlwNl90bmxfZ2V0X2lmbGluayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorIH0KKyBFWFBPUlRfU1lNQk9MKGlwNl90bmxfZ2V0X2lmbGluayk7CisgCisrI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0ZMT1dfVEFCTEUpCisrc3RhdGljIGludCBpcGlwNl9kZXZfZmxvd19vZmZsb2FkX2NoZWNrKHN0cnVjdCBmbG93X29mZmxvYWRfaHdfcGF0aCAqcGF0aCkKKyt7CisrCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwYXRoLT5kZXY7CisrCXN0cnVjdCBpcDZfdG5sICp0bmwgPSBuZXRkZXZfcHJpdihkZXYpOworKworKwlpZiAocGF0aC0+ZmxhZ3MgJiBGTE9XX09GRkxPQURfUEFUSF9EU0xJVEUpCisrCQlyZXR1cm4gLUVFWElTVDsKKysKKysJcGF0aC0+ZmxhZ3MgfD0gRkxPV19PRkZMT0FEX1BBVEhfRFNMSVRFOworKwlwYXRoLT5kZXYgPSB0bmwtPmRldjsKKysKKysJcmV0dXJuIDA7CisrfQorKyNlbmRpZiAvKiBDT05GSUdfTkZfRkxPV19UQUJMRSAqLworKworIGludCBpcDZfdG5sX2VuY2FwX2FkZF9vcHMoY29uc3Qgc3RydWN0IGlwNl90bmxfZW5jYXBfb3BzICpvcHMsCisgCQkJICB1bnNpZ25lZCBpbnQgbnVtKQorIHsKK0BAIC0xOTQxLDYgKzE5NjIsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwNl90bmxfbmV0ZGV2X29wcyA9IHsKKyAJLm5kb19jaGFuZ2VfbXR1ID0gaXA2X3RubF9jaGFuZ2VfbXR1LAorIAkubmRvX2dldF9zdGF0cwk9IGlwNl9nZXRfc3RhdHMsCisgCS5uZG9fZ2V0X2lmbGluayA9IGlwNl90bmxfZ2V0X2lmbGluaywKKysjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRkxPV19UQUJMRSkKKysJLm5kb19mbG93X29mZmxvYWRfY2hlY2sgPSBpcGlwNl9kZXZfZmxvd19vZmZsb2FkX2NoZWNrLAorKyNlbmRpZgorIH07CisgCisgI2RlZmluZSBJUFhJUFhfRkVBVFVSRVMgKE5FVElGX0ZfU0cgfAkJXAorZGlmZiAtLWdpdCBhL25ldC9pcHY2L3NpdC5jIGIvbmV0L2lwdjYvc2l0LmMKK2luZGV4IDk4OTU0ODMwYy4uNDJiNmU4YzRjIDEwMDY0NAorLS0tIGEvbmV0L2lwdjYvc2l0LmMKKysrKyBiL25ldC9pcHY2L3NpdC5jCitAQCAtNTIsNiArNTIsMTEgQEAKKyAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KKyAjaW5jbHVkZSA8bmV0L25ldG5zL2dlbmVyaWMuaD4KKyAKKysjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRkxPV19UQUJMRSkKKysjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CisrI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPgorKyNlbmRpZgorKworIC8qCisgICAgVGhpcyB2ZXJzaW9uIG9mIG5ldC9pcHY2L3NpdC5jIGlzIGNsb25lZCBvZiBuZXQvaXB2NC9pcF9ncmUuYworIAorQEAgLTEzNDUsNiArMTM1MCwyMiBAQCBpcGlwNl90dW5uZWxfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCisgCXJldHVybiBlcnI7CisgfQorIAorKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKQorK3N0YXRpYyBpbnQgaXBpcDZfZGV2X2Zsb3dfb2ZmbG9hZF9jaGVjayhzdHJ1Y3QgZmxvd19vZmZsb2FkX2h3X3BhdGggKnBhdGgpCisreworKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGF0aC0+ZGV2OworKwlzdHJ1Y3QgaXBfdHVubmVsICp0bmwgPSBuZXRkZXZfcHJpdihkZXYpOworKworKwlpZiAocGF0aC0+ZmxhZ3MgJiBGTE9XX09GRkxPQURfUEFUSF82UkQpCisrCQlyZXR1cm4gLUVFWElTVDsKKysKKysJcGF0aC0+ZmxhZ3MgfD0gRkxPV19PRkZMT0FEX1BBVEhfNlJEOworKwlwYXRoLT5kZXYgPSB0bmwtPmRldjsKKysKKysJcmV0dXJuIDA7CisrfQorKyNlbmRpZiAvKiBDT05GSUdfTkZfRkxPV19UQUJMRSAqLworKworIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBpcDZfbmV0ZGV2X29wcyA9IHsKKyAJLm5kb19pbml0CT0gaXBpcDZfdHVubmVsX2luaXQsCisgCS5uZG9fdW5pbml0CT0gaXBpcDZfdHVubmVsX3VuaW5pdCwKK0BAIC0xMzUyLDYgKzEzNzMsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwaXA2X25ldGRldl9vcHMgPSB7CisgCS5uZG9fZG9faW9jdGwJPSBpcGlwNl90dW5uZWxfaW9jdGwsCisgCS5uZG9fZ2V0X3N0YXRzNjQgPSBpcF90dW5uZWxfZ2V0X3N0YXRzNjQsCisgCS5uZG9fZ2V0X2lmbGluayA9IGlwX3R1bm5lbF9nZXRfaWZsaW5rLAorKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9GTE9XX1RBQkxFKQorKwkubmRvX2Zsb3dfb2ZmbG9hZF9jaGVjayA9IGlwaXA2X2Rldl9mbG93X29mZmxvYWRfY2hlY2ssCisrI2VuZGlmCisgfTsKKyAKKyBzdGF0aWMgdm9pZCBpcGlwNl9kZXZfZnJlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzEwMDMtZHRzLW10NzYyMi1yZmItY2hhbmdlLXRvLWF4LW10ZC1sYXlvdXQucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMTAwMy1kdHMtbXQ3NjIyLXJmYi1jaGFuZ2UtdG8tYXgtbXRkLWxheW91dC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGEyOTRmCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzEwMDMtZHRzLW10NzYyMi1yZmItY2hhbmdlLXRvLWF4LW10ZC1sYXlvdXQucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorLS0tIGEvYXJjaC9hcm02NC9ib290L2R0cy9tZWRpYXRlay9tdDc2MjItcmZiMS5kdHMKKysrKyBiL2FyY2gvYXJtNjQvYm9vdC9kdHMvbWVkaWF0ZWsvbXQ3NjIyLXJmYjEuZHRzCitAQCAtNTg5LDE3ICs1ODksMTcgQEAKKyAKKyAJCQlmYWN0b3J5OiBwYXJ0aXRpb25AMWMwMDAwIHsKKyAJCQkJbGFiZWwgPSAiRmFjdG9yeSI7CistCQkJCXJlZyA9IDwweDFjMDAwMCAweDAwNDAwMDA+OworKwkJCQlyZWcgPSA8MHgxYzAwMDAgMHgwMTAwMDAwPjsKKyAJCQl9OworIAorIAkJCXBhcnRpdGlvbkAyMDAwMDAgeworIAkJCQlsYWJlbCA9ICJmaXJtd2FyZSI7CistCQkJCXJlZyA9IDwweDIwMDAwMCAweDIwMDAwMDA+OworKwkJCQlyZWcgPSA8MHgyYzAwMDAgMHgyMDAwMDAwPjsKKyAJCQl9OworIAorIAkJCXBhcnRpdGlvbkAyMjAwMDAwIHsKKyAJCQkJbGFiZWwgPSAiVXNlcl9kYXRhIjsKKy0JCQkJcmVnID0gPDB4MjIwMDAwMCAweDQwMDAwMDA+OworKwkJCQlyZWcgPSA8MHgyMmMwMDAwIDB4NDAwMDAwMD47CisgCQkJfTsKKyAJCX07CisgCX07CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMTAwNF9yZW1vdmVfZXRoX3RyYW5zbWl0X3RpbWVvdXRfaHdfcmVzZXQucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMTAwNF9yZW1vdmVfZXRoX3RyYW5zbWl0X3RpbWVvdXRfaHdfcmVzZXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjlhMGFjYgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8xMDA0X3JlbW92ZV9ldGhfdHJhbnNtaXRfdGltZW91dF9od19yZXNldC5wYXRjaApAQCAtMCwwICsxLDE0IEBACitJbmRleDogbGludXgtNS40LjE0My9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfZXRoX3NvYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGludXgtNS40LjE0My5vcmlnL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmMKKysrKyBsaW51eC01LjQuMTQzL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19ldGhfc29jLmMKK0BAIC0yNDgzLDkgKzI0ODMsNyBAQCBzdGF0aWMgdm9pZCBtdGtfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RlCisgCWV0aC0+bmV0ZGV2W21hYy0+aWRdLT5zdGF0cy50eF9lcnJvcnMrKzsKKyAJbmV0aWZfZXJyKGV0aCwgdHhfZXJyLCBkZXYsCisgCQkgICJ0cmFuc21pdCB0aW1lZCBvdXRcbiIpOworLQlzY2hlZHVsZV93b3JrKCZldGgtPnBlbmRpbmdfd29yayk7CisgfQorLQorIHN0YXRpYyBpcnFyZXR1cm5fdCBtdGtfaGFuZGxlX2lycV9yeChpbnQgaXJxLCB2b2lkICpwcml2KQorIHsKKyAJc3RydWN0IG10a19uYXBpICpyeF9uYXBpID0gcHJpdjsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8xMDA1LW10a2huYXQtZml4LXBzZS1oYW5nLWZvci1tdWx0aS1zdGF0aW9ucy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8xMDA1LW10a2huYXQtZml4LXBzZS1oYW5nLWZvci1tdWx0aS1zdGF0aW9ucy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWYxNzk0Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzEwMDUtbXRraG5hdC1maXgtcHNlLWhhbmctZm9yLW11bHRpLXN0YXRpb25zLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKK2RpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfaG5hdC9obmF0LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfaG5hdC9obmF0LmMKK2luZGV4IGMwNzk0ZTM3Li4yOTY4ZWI2OCAxMDA2NDQKKy0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19obmF0L2huYXQuYworKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX2huYXQvaG5hdC5jCitAQCAtMjUwLDYgKzI1MCw3IEBAIHN0YXRpYyBpbnQgaG5hdF9zdGFydChpbnQgcHBlX2lkKQorIAl3cml0ZWwoMCwgaG5hdF9wcml2LT5wcGVfYmFzZVtwcGVfaWRdICsgUFBFX0RGVF9DUE9SVCk7IC8qIHBkbWEgKi8KKyAJLyogd3JpdGVsKDB4NTU1NTU1NTUsIGhuYXRfcHJpdi0+cHBlX2Jhc2VbcHBlX2lkXSArIFBQRV9ERlRfQ1BPUlQpOyAqLyAvKiBxZG1hICovCisgCWNyX3NldF9maWVsZChobmF0X3ByaXYtPnBwZV9iYXNlW3BwZV9pZF0gKyBQUEVfR0xPX0NGRywgVFRMMF9EUlAsIDApOworKwljcl9zZXRfZmllbGQoaG5hdF9wcml2LT5wcGVfYmFzZVtwcGVfaWRdICsgUFBFX0dMT19DRkcsIE1DQVNUX1RCX0VOLCAxKTsKKyAKKyAJaWYgKGhuYXRfcHJpdi0+ZGF0YS0+dmVyc2lvbiA9PSBNVEtfSE5BVF9WNCkgeworIAkJd3JpdGVsKDB4Y2I3NzcsIGhuYXRfcHJpdi0+cHBlX2Jhc2VbcHBlX2lkXSArIFBQRV9ERlRfQ1BPUlQxKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8xMDEwLXBjaWUtbWVkaWF0ZWstZml4LWNsZWFyaW5nLWludGVycnVwdC1zdGF0dXMucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMTAxMC1wY2llLW1lZGlhdGVrLWZpeC1jbGVhcmluZy1pbnRlcnJ1cHQtc3RhdHVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZWY3OGQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMTAxMC1wY2llLW1lZGlhdGVrLWZpeC1jbGVhcmluZy1pbnRlcnJ1cHQtc3RhdHVzLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK0Zyb206IEZlbGl4IEZpZXRrYXUgPG5iZEBuYmQubmFtZT4KK0RhdGU6IEZyaSwgNCBTZXAgMjAyMCAxODozMzoyNyArMDIwMAorU3ViamVjdDogW1BBVENIXSBwY2llLW1lZGlhdGVrOiBmaXggY2xlYXJpbmcgaW50ZXJydXB0IHN0YXR1cworCitDbGVhcmluZyB0aGUgc3RhdHVzIG5lZWRzIHRvIGhhcHBlbiBhZnRlciBydW5uaW5nIHRoZSBoYW5kbGVyLCBvdGhlcndpc2UKK3dlIHdpbGwgZ2V0IGFuIGV4dHJhIHNwdXJpb3VzIGludGVycnVwdCBhZnRlciB0aGUgY2F1c2UgaGFzIGJlZW4gY2xlYXJlZAorCitTaWduZWQtb2ZmLWJ5OiBGZWxpeCBGaWV0a2F1IDxuYmRAbmJkLm5hbWU+CistLS0KKworLS0tIGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLW1lZGlhdGVrLmMKKysrKyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1tZWRpYXRlay5jCitAQCAtNjE2LDEwICs2MTYsMTAgQEAgc3RhdGljIHZvaWQgbXRrX3BjaWVfaW50cl9oYW5kbGVyKHN0cnVjdAorIAlpZiAoc3RhdHVzICYgSU5UWF9NQVNLKSB7CisgCQlmb3JfZWFjaF9zZXRfYml0X2Zyb20oYml0LCAmc3RhdHVzLCBQQ0lfTlVNX0lOVFggKyBJTlRYX1NISUZUKSB7CisgCQkJLyogQ2xlYXIgdGhlIElOVHggKi8KKy0JCQl3cml0ZWwoMSA8PCBiaXQsIHBvcnQtPmJhc2UgKyBQQ0lFX0lOVF9TVEFUVVMpOworIAkJCXZpcnEgPSBpcnFfZmluZF9tYXBwaW5nKHBvcnQtPmlycV9kb21haW4sCisgCQkJCQkJYml0IC0gSU5UWF9TSElGVCk7CisgCQkJZ2VuZXJpY19oYW5kbGVfaXJxKHZpcnEpOworKwkJCXdyaXRlbCgxIDw8IGJpdCwgcG9ydC0+YmFzZSArIFBDSUVfSU5UX1NUQVRVUyk7CisgCQl9CisgCX0KKyAKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8xMDE1LXBjaWUtYWRkLXBjaWUtZ2VuMy11cHN0cmVhbS1kcml2ZXIucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMTAxNS1wY2llLWFkZC1wY2llLWdlbjMtdXBzdHJlYW0tZHJpdmVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiOTlkOWQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMTAxNS1wY2llLWFkZC1wY2llLWdlbjMtdXBzdHJlYW0tZHJpdmVyLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK2RpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL0tjb25maWcgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL0tjb25maWcKK2luZGV4IDcwZTA3ODIuLjY3OTg4ZjggMTAwNjQ0CistLS0gYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL0tjb25maWcKKysrKyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvS2NvbmZpZworQEAgLTI0MSw2ICsyNDEsMTkgQEAgY29uZmlnIFBDSUVfTUVESUFURUsKKyAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBQQ0llIGNvbnRyb2xsZXIgc3VwcG9ydCBvbgorIAkgIE1lZGlhVGVrIFNvQ3MuCisgCisrY29uZmlnIFBDSUVfTUVESUFURUtfR0VOMworKwl0cmlzdGF0ZSAiTWVkaWFUZWsgR2VuMyBQQ0llIGNvbnRyb2xsZXIiCisrCWRlcGVuZHMgb24gQVJDSF9NRURJQVRFSyB8fCBDT01QSUxFX1RFU1QKKysJZGVwZW5kcyBvbiBQQ0lfTVNJX0lSUV9ET01BSU4KKysJaGVscAorKwkgIEFkZHMgc3VwcG9ydCBmb3IgUENJZSBHZW4zIE1BQyBjb250cm9sbGVyIGZvciBNZWRpYVRlayBTb0NzLgorKwkgIFRoaXMgUENJZSBjb250cm9sbGVyIGlzIGNvbXBhdGlibGUgd2l0aCBHZW4zLCBHZW4yIGFuZCBHZW4xIHNwZWVkLAorKwkgIGFuZCBzdXBwb3J0IHVwIHRvIDI1NiBNU0kgaW50ZXJydXB0IG51bWJlcnMgZm9yCisrCSAgbXVsdGktZnVuY3Rpb24gZGV2aWNlcy4KKysKKysJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBHZW4zIFBDSWUgY29udHJvbGxlciBzdXBwb3J0IG9uCisrCSAgTWVkaWFUZWsgU29Dcy4KKysKKyBjb25maWcgUENJRV9NT0JJVkVJTAorIAlib29sICJNb2JpdmVpbCBBWEkgUENJZSBjb250cm9sbGVyIgorIAlkZXBlbmRzIG9uIEFSQ0hfWllOUU1QIHx8IENPTVBJTEVfVEVTVAorZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvTWFrZWZpbGUgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL01ha2VmaWxlCitpbmRleCBhMmEyMmM5Li41NGE0OTZhIDEwMDY0NAorLS0tIGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9NYWtlZmlsZQorKysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9NYWtlZmlsZQorQEAgLTI3LDYgKzI3LDcgQEAgb2JqLSQoQ09ORklHX1BDSUVfUk9DS0NISVApICs9IHBjaWUtcm9ja2NoaXAubworIG9iai0kKENPTkZJR19QQ0lFX1JPQ0tDSElQX0VQKSArPSBwY2llLXJvY2tjaGlwLWVwLm8KKyBvYmotJChDT05GSUdfUENJRV9ST0NLQ0hJUF9IT1NUKSArPSBwY2llLXJvY2tjaGlwLWhvc3QubworIG9iai0kKENPTkZJR19QQ0lFX01FRElBVEVLKSArPSBwY2llLW1lZGlhdGVrLm8KKytvYmotJChDT05GSUdfUENJRV9NRURJQVRFS19HRU4zKSArPSBwY2llLW1lZGlhdGVrLWdlbjMubworIG9iai0kKENPTkZJR19QQ0lFX01PQklWRUlMKSArPSBwY2llLW1vYml2ZWlsLm8KKyBvYmotJChDT05GSUdfUENJRV9UQU5HT19TTVA4NzU5KSArPSBwY2llLXRhbmdvLm8KKyBvYmotJChDT05GSUdfVk1EKSArPSB2bWQubwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzEwMjAtc3BpLW5vci13MjVxNTEyanYucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMTAyMC1zcGktbm9yLXcyNXE1MTJqdi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjM0NTU1Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzEwMjAtc3BpLW5vci13MjVxNTEyanYucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorRnJvbTogRGF2aWQgQmF1ZXIgPG1haWxAZGF2aWQtYmF1ZXIubmV0PgorRGF0ZTogVGh1LCAxMSBGZWIgMjAyMSAxOTo1NzoyNiArMDEwMAorU3ViamVjdDogW1BBVENIXSBtdGQ6IHNwaS1ub3I6IGFkZCBzdXBwb3J0IGZvciBXaW5ib25kIFcyNVE1MTIKKworVGhlIFdpbmJvbmQgVzI1UTUxMiBpcyBhIDUxMm1iIFNQSS1OT1IgY2hpcC4gSXQgc3VwcG9ydHMgNEsgc2VjdG9ycyBhcword2VsbCBhcyBibG9jayBwcm90ZWN0aW9uIGFuZCBEdWFsLS9RdWFkLXJlYWQuCisKK1Rlc3RlZCBvbjogVWJpcXVpdGkgVW5pRmkgNiBMUgorCitTaWduZWQtb2ZmLWJ5OiBEYXZpZCBCYXVlciA8bWFpbEBkYXZpZC1iYXVlci5uZXQ+CisKK1JlZjogaHR0cHM6Ly9wYXRjaHdvcmsub3psYWJzLm9yZy9wcm9qZWN0L2xpbnV4LW10ZC9wYXRjaC8yMDIxMDIxMzE1MTA0Ny4xMTcwMC0xLW1haWxAZGF2aWQtYmF1ZXIubmV0LworCistLS0gYS9kcml2ZXJzL210ZC9zcGktbm9yL3NwaS1ub3IuYworKysrIGIvZHJpdmVycy9tdGQvc3BpLW5vci9zcGktbm9yLmMKK0BAIC0yNTUyLDYgKzI1NTIsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZsYXNoX2luZm8gc3BpX25vcl9pCisgCQkJICAuZml4dXBzID0gJncyNXEyNTZfZml4dXBzIH0sCisgCXsgIncyNXEyNTZqdm0iLCBJTkZPKDB4ZWY3MDE5LCAwLCA2NCAqIDEwMjQsIDUxMiwKKyAJCQkgICAgIFNFQ1RfNEsgfCBTUElfTk9SX0RVQUxfUkVBRCB8IFNQSV9OT1JfUVVBRF9SRUFEKSB9LAorKwl7ICJ3MjVxNTEyanYiLCBJTkZPKDB4ZWY0MDIwLCAwLCA2NCAqIDEwMjQsIDEwMjQsCisrCQkJU0VDVF80SyB8IFNQSV9OT1JfUVVBRF9SRUFEIHwgU1BJX05PUl9EVUFMX1JFQUQgfAorKwkJCVNQSV9OT1JfSEFTX1RCIHwgU1BJX05PUl9IQVNfTE9DSykgfSwKKyAJeyAidzI1bTUxMmp2IiwgSU5GTygweGVmNzExOSwgMCwgNjQgKiAxMDI0LCAxMDI0LAorIAkJCVNFQ1RfNEsgfCBTUElfTk9SX1FVQURfUkVBRCB8IFNQSV9OT1JfRFVBTF9SRUFEKSB9LAorIApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzEwMjEtdWJudC1sZWRiYXItZHJpdmVyLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzEwMjEtdWJudC1sZWRiYXItZHJpdmVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYWIwOTQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMTAyMS11Ym50LWxlZGJhci1kcml2ZXIucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorLS0tIGEvZHJpdmVycy9sZWRzL0tjb25maWcKKysrKyBiL2RyaXZlcnMvbGVkcy9LY29uZmlnCitAQCAtODI0LDYgKzgyNCwxNiBAQCBjb25maWcgTEVEU19MTTM2Mjc0CisgCSAgU2F5IFkgdG8gZW5hYmxlIHRoZSBMTTM2Mjc0IExFRCBkcml2ZXIgZm9yIFRJIExNVSBkZXZpY2VzLgorIAkgIFRoaXMgc3VwcG9ydHMgdGhlIExFRCBkZXZpY2UgTE0zNjI3NC4KKyAKKytjb25maWcgTEVEU19VQk5UX0xFREJBUgorKwl0cmlzdGF0ZSAiTEVEIHN1cHBvcnQgZm9yIFViaXF1aXRpIFVuaUZpIDYgTFIiCisrCWRlcGVuZHMgb24gTEVEU19DTEFTUyAmJiBJMkMgJiYgT0YKKysJaGVscAorKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFViaXF1aXRpIExFREJBUgorKwkgIExFRCBkcml2ZXIuCisrCisrCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorKwkgIHdpbGwgYmUgY2FsbGVkIGxlZHMtdWJudC1sZWRiYXIuCisrCisgY29tbWVudCAiTEVEIFRyaWdnZXJzIgorIHNvdXJjZSAiZHJpdmVycy9sZWRzL3RyaWdnZXIvS2NvbmZpZyIKKyAKKy0tLSBhL2RyaXZlcnMvbGVkcy9NYWtlZmlsZQorKysrIGIvZHJpdmVycy9sZWRzL01ha2VmaWxlCitAQCAtODUsNiArODUsNyBAQCBvYmotJChDT05GSUdfTEVEU19MTTM2MDFYKQkJKz0gbGVkcy1sbTM2Cisgb2JqLSQoQ09ORklHX0xFRFNfVElfTE1VX0NPTU1PTikJKz0gbGVkcy10aS1sbXUtY29tbW9uLm8KKyBvYmotJChDT05GSUdfTEVEU19MTTM2OTcpCQkrPSBsZWRzLWxtMzY5Ny5vCisgb2JqLSQoQ09ORklHX0xFRFNfTE0zNjI3NCkJCSs9IGxlZHMtbG0zNjI3NC5vCisrb2JqLSQoQ09ORklHX0xFRFNfVUJOVF9MRURCQVIpCSs9IGxlZHMtdWJudC1sZWRiYXIubworIAorICMgTEVEIFNQSSBEcml2ZXJzCisgb2JqLSQoQ09ORklHX0xFRFNfQ1IwMDE0MTE0KQkJKz0gbGVkcy1jcjAwMTQxMTQubwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzEwMjMta2dkYi1hZGQtaW50ZXJydXB0LWNvbnRyb2wucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMTAyMy1rZ2RiLWFkZC1pbnRlcnJ1cHQtY29udHJvbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGVlOTU0Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzEwMjMta2dkYi1hZGQtaW50ZXJydXB0LWNvbnRyb2wucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2tnZGIuYyBiL2FyY2gvYXJtNjQva2VybmVsL2tnZGIuYworaW5kZXggMWExNTdjYS4uMjU4ZmU0YiAxMDA2NDQKKy0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2tnZGIuYworKysrIGIvYXJjaC9hcm02NC9rZXJuZWwva2dkYi5jCitAQCAtMTgsNiArMTgsMTAgQEAKKyAjaW5jbHVkZSA8YXNtL2RlYnVnLW1vbml0b3JzLmg+CisgI2luY2x1ZGUgPGFzbS9pbnNuLmg+CisgI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisrCisrCisrc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGludCwga2dkYl9wc3RhdGUpOworIAorIHN0cnVjdCBkYmdfcmVnX2RlZl90IGRiZ19yZWdfZGVmW0RCR19NQVhfUkVHX05VTV0gPSB7CisgCXsgIngwIiwgOCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHJlZ3NbMF0pfSwKK0BAIC0yMDYsNiArMjEwLDggQEAgaW50IGtnZGJfYXJjaF9oYW5kbGVfZXhjZXB0aW9uKGludCBleGNlcHRpb25fdmVjdG9yLCBpbnQgc2lnbm8sCisgCQllcnIgPSAwOworIAkJYnJlYWs7CisgCWNhc2UgJ3MnOgorKwkJX190aGlzX2NwdV93cml0ZShrZ2RiX3BzdGF0ZSwgbGludXhfcmVncy0+cHN0YXRlKTsKKysJCWxpbnV4X3JlZ3MtPnBzdGF0ZSB8PSBQU1JfSV9CSVQ7CisgCQkvKgorIAkJICogVXBkYXRlIHN0ZXAgYWRkcmVzcyB2YWx1ZSB3aXRoIGFkZHJlc3MgcGFzc2VkCisgCQkgKiB3aXRoIHN0ZXAgcGFja2V0LgorQEAgLTI0OSw5ICsyNTUsMTcgQEAgTk9LUFJPQkVfU1lNQk9MKGtnZGJfY29tcGlsZWRfYnJrX2ZuKTsKKyAKKyBzdGF0aWMgaW50IGtnZGJfc3RlcF9icmtfZm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBlc3IpCisgeworKwl1bnNpZ25lZCBpbnQgcHN0YXRlOworKworIAlpZiAoIWtnZGJfc2luZ2xlX3N0ZXApCisgCQlyZXR1cm4gREJHX0hPT0tfRVJST1I7CisrCWtlcm5lbF9kaXNhYmxlX3NpbmdsZV9zdGVwKCk7CisgCisrCXBzdGF0ZSA9IF9fdGhpc19jcHVfcmVhZChrZ2RiX3BzdGF0ZSk7CisrCWlmIChwc3RhdGUgJiBQU1JfSV9CSVQpCisrCQlyZWdzLT5wc3RhdGUgfD0gUFNSX0lfQklUOworKwllbHNlCisrCQlyZWdzLT5wc3RhdGUgJj0gflBTUl9JX0JJVDsKKyAJa2dkYl9oYW5kbGVfZXhjZXB0aW9uKDAsIFNJR1RSQVAsIDAsIHJlZ3MpOworIAlyZXR1cm4gREJHX0hPT0tfSEFORExFRDsKKyB9CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMTAyNC1wY2llLWFkZC1tdWx0aS1NU0ktc3VwcG9ydC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8xMDI0LXBjaWUtYWRkLW11bHRpLU1TSS1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZjQ4NmMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvMTAyNC1wY2llLWFkZC1tdWx0aS1NU0ktc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDY0IEBACitkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLW1lZGlhdGVrLmMgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtbWVkaWF0ZWsuYworaW5kZXggMmE1NGZhN2EzLi4xMzJiMzIwNGMgMTAwNjQ0CistLS0gYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtbWVkaWF0ZWsuYworKysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLW1lZGlhdGVrLmMKK0BAIC00NDYsMjQgKzQ0NiwyNCBAQCBzdGF0aWMgaW50IG10a19wY2llX2lycV9kb21haW5fYWxsb2Moc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgaW50IHZpcgorIAkJCQkgICAgIHVuc2lnbmVkIGludCBucl9pcnFzLCB2b2lkICphcmdzKQorIHsKKyAJc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBkb21haW4tPmhvc3RfZGF0YTsKKy0JdW5zaWduZWQgbG9uZyBiaXQ7CisrCWludCBiaXQsIGk7CisgCistCVdBUk5fT04obnJfaXJxcyAhPSAxKTsKKyAJbXV0ZXhfbG9jaygmcG9ydC0+bG9jayk7CisgCistCWJpdCA9IGZpbmRfZmlyc3RfemVyb19iaXQocG9ydC0+bXNpX2lycV9pbl91c2UsIE1US19NU0lfSVJRU19OVU0pOworLQlpZiAoYml0ID49IE1US19NU0lfSVJRU19OVU0pIHsKKysJYml0ID0gYml0bWFwX2ZpbmRfZnJlZV9yZWdpb24ocG9ydC0+bXNpX2lycV9pbl91c2UsIE1US19NU0lfSVJRU19OVU0sCisrCQkJCQkJCW9yZGVyX2Jhc2VfMihucl9pcnFzKSk7CisrCWlmIChiaXQgPCAwKSB7CisgCQltdXRleF91bmxvY2soJnBvcnQtPmxvY2spOworIAkJcmV0dXJuIC1FTk9TUEM7CisgCX0KKyAKKy0JX19zZXRfYml0KGJpdCwgcG9ydC0+bXNpX2lycV9pbl91c2UpOworLQorIAltdXRleF91bmxvY2soJnBvcnQtPmxvY2spOworIAorLQlpcnFfZG9tYWluX3NldF9pbmZvKGRvbWFpbiwgdmlycSwgYml0LCAmbXRrX21zaV9ib3R0b21faXJxX2NoaXAsCistCQkJICAgIGRvbWFpbi0+aG9zdF9kYXRhLCBoYW5kbGVfZWRnZV9pcnEsCistCQkJICAgIE5VTEwsIE5VTEwpOworKwlmb3IgKGkgPSAwOyBpIDwgbnJfaXJxczsgaSsrKSB7CisrCQlpcnFfZG9tYWluX3NldF9pbmZvKGRvbWFpbiwgdmlycSArIGksIGJpdCArIGksCisrCQkJCSAgICAmbXRrX21zaV9ib3R0b21faXJxX2NoaXAsIGRvbWFpbi0+aG9zdF9kYXRhLAorKwkJCQkgICAgaGFuZGxlX2VkZ2VfaXJxLCBOVUxMLCBOVUxMKTsKKysJfQorIAorIAlyZXR1cm4gMDsKKyB9CitAQCAtNTAxLDcgKzUwMSw3IEBAIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXRrX21zaV9pcnFfY2hpcCA9IHsKKyAKKyBzdGF0aWMgc3RydWN0IG1zaV9kb21haW5faW5mbyBtdGtfbXNpX2RvbWFpbl9pbmZvID0geworIAkuZmxhZ3MJPSAoTVNJX0ZMQUdfVVNFX0RFRl9ET01fT1BTIHwgTVNJX0ZMQUdfVVNFX0RFRl9DSElQX09QUyB8CistCQkgICBNU0lfRkxBR19QQ0lfTVNJWCksCisrCQkgICBNU0lfRkxBR19QQ0lfTVNJWCB8IE1TSV9GTEFHX01VTFRJX1BDSV9NU0kpLAorIAkuY2hpcAk9ICZtdGtfbXNpX2lycV9jaGlwLAorIH07CisgCitAQCAtNjMzLDE0ICs2MzMsMTQgQEAgc3RhdGljIHZvaWQgbXRrX3BjaWVfaW50cl9oYW5kbGVyKHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKKyAJCWlmIChzdGF0dXMgJiBNU0lfU1RBVFVTKXsKKyAJCQl1bnNpZ25lZCBsb25nIGltc2lfc3RhdHVzOworIAorKwkJCS8qIENsZWFyIE1TSSBpbnRlcnJ1cHQgc3RhdHVzICovCisrCQkJd3JpdGVsKE1TSV9TVEFUVVMsIHBvcnQtPmJhc2UgKyBQQ0lFX0lOVF9TVEFUVVMpOworIAkJCXdoaWxlICgoaW1zaV9zdGF0dXMgPSByZWFkbChwb3J0LT5iYXNlICsgUENJRV9JTVNJX1NUQVRVUykpKSB7CisgCQkJCWZvcl9lYWNoX3NldF9iaXQoYml0LCAmaW1zaV9zdGF0dXMsIE1US19NU0lfSVJRU19OVU0pIHsKKyAJCQkJCXZpcnEgPSBpcnFfZmluZF9tYXBwaW5nKHBvcnQtPmlubmVyX2RvbWFpbiwgYml0KTsKKyAJCQkJCWdlbmVyaWNfaGFuZGxlX2lycSh2aXJxKTsKKyAJCQkJfQorIAkJCX0KKy0JCQkvKiBDbGVhciBNU0kgaW50ZXJydXB0IHN0YXR1cyAqLworLQkJCXdyaXRlbChNU0lfU1RBVFVTLCBwb3J0LT5iYXNlICsgUENJRV9JTlRfU1RBVFVTKTsKKyAJCX0KKyAJfQorIApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzE2NjEtQWRkLXRybmd2Mi1kcml2ZXItc3VwcG9ydC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8xNjYxLUFkZC10cm5ndjItZHJpdmVyLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MwOWE3MQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8xNjYxLUFkZC10cm5ndjItZHJpdmVyLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwxODUgQEAKK0Zyb20gYWU1NjExYjFiN2E4NTdlZGIzZDljOGU5MDBiNTUwYzc2ZjdjMjM2ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJNaW5nbWluZy5TdSIgPE1pbmdtaW5nLlN1QG1lZGlhdGVrLmNvbT4KK0RhdGU6IEZyaSwgMTcgRGVjIDIwMjEgMjA6Mjc6MzQgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIHRybmd2MiBkcml2ZXIgc3VwcG9ydAorCistLS0KKyBkcml2ZXJzL2NoYXIvaHdfcmFuZG9tL210ay1ybmcuYyB8IDEwNSArKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDc4IGluc2VydGlvbnMoKyksIDI3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9tdGstcm5nLmMgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL210ay1ybmcuYworaW5kZXggYThiZDA2ZGE3Li43NWZjYTRjZWYgMTAwNjQ0CistLS0gYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL210ay1ybmcuYworKysrIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9tdGstcm5nLmMKK0BAIC02LDYgKzYsNyBAQAorICAqLworICNkZWZpbmUgTVRLX1JOR19ERVYgS0JVSUxEX01PRE5BTUUKKyAKKysjaW5jbHVkZSA8bGludXgvYXJtLXNtY2NjLmg+CisgI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KK0BAIC0xNSw4ICsxNiwxMiBAQAorICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisgI2luY2x1ZGUgPGxpbnV4L29mLmg+CisrI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyAjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorKyNpbmNsdWRlIDxsaW51eC9zb2MvbWVkaWF0ZWsvbXRrX3NpcF9zdmMuaD4KKysKKysjZGVmaW5lIE1US19TSVBfS0VSTkVMX0dFVF9STkQJCU1US19TSVBfU01DX0NNRCgweDU1MCkKKyAKKyAvKiBSdW50aW1lIFBNIGF1dG9zdXNwZW5kIHRpbWVvdXQ6ICovCisgI2RlZmluZSBSTkdfQVVUT1NVU1BFTkRfVElNRU9VVAkJMTAwCitAQCAtMzIsMTAgKzM3LDE1IEBACisgCisgI2RlZmluZSB0b19tdGtfcm5nKHApCWNvbnRhaW5lcl9vZihwLCBzdHJ1Y3QgbXRrX3JuZywgcm5nKQorIAorK3N0cnVjdCBtdGtfcm5nX29mX2RhdGF7CisrCXVuc2lnbmVkIGludCBybmdfdmVyc2lvbjsKKyt9OworKworIHN0cnVjdCBtdGtfcm5nIHsKKyAJdm9pZCBfX2lvbWVtICpiYXNlOworIAlzdHJ1Y3QgY2xrICpjbGs7CisgCXN0cnVjdCBod3JuZyBybmc7CisrCWNvbnN0IHN0cnVjdCBtdGtfcm5nX29mX2RhdGEgKnNvYzsKKyB9OworIAorIHN0YXRpYyBpbnQgbXRrX3JuZ19pbml0KHN0cnVjdCBod3JuZyAqcm5nKQorQEAgLTEwMyw0MSArMTEzLDc0IEBAIHN0YXRpYyBpbnQgbXRrX3JuZ19yZWFkKHN0cnVjdCBod3JuZyAqcm5nLCB2b2lkICpidWYsIHNpemVfdCBtYXgsIGJvb2wgd2FpdCkKKyAJcmV0dXJuIHJldHZhbCB8fCAhd2FpdCA/IHJldHZhbCA6IC1FSU87CisgfQorIAorK3N0YXRpYyBpbnQgbXRrX3JuZ3YyX3JlYWQoc3RydWN0IGh3cm5nICpybmcsIHZvaWQgKmJ1Ziwgc2l6ZV90IG1heCwgYm9vbCB3YWl0KQorK3sKKysJc3RydWN0IGFybV9zbWNjY19yZXMgcmVzOworKwlpbnQgcmV0dmFsID0gMDsKKysKKysJd2hpbGUgKG1heCA+PSBzaXplb2YodTMyKSkgeworKwkJYXJtX3NtY2NjX3NtYyhNVEtfU0lQX0tFUk5FTF9HRVRfUk5ELCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorKwkJCSAgICAgICZyZXMpOworKwkJaWYgKHJlcy5hMCkKKysJCQlicmVhazsKKysKKysJCSoodTMyICopYnVmID0gcmVzLmExOworKwkJcmV0dmFsICs9IHNpemVvZih1MzIpOworKwkJYnVmICs9IHNpemVvZih1MzIpOworKwkJbWF4IC09IHNpemVvZih1MzIpOworKwl9CisrCisrCXJldHVybiByZXR2YWwgfHwgIXdhaXQgPyByZXR2YWwgOiAtRUlPOworK30KKysKKyBzdGF0aWMgaW50IG10a19ybmdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKKyB7CisgCXN0cnVjdCByZXNvdXJjZSAqcmVzOworIAlpbnQgcmV0OworIAlzdHJ1Y3QgbXRrX3JuZyAqcHJpdjsKKyAKKy0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKy0JaWYgKCFyZXMpIHsKKy0JCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIGlvbWVtIHJlc291cmNlXG4iKTsKKy0JCXJldHVybiAtRU5YSU87CistCX0KKy0KKyAJcHJpdiA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKyAJaWYgKCFwcml2KQorIAkJcmV0dXJuIC1FTk9NRU07CisgCistCXByaXYtPnJuZy5uYW1lID0gcGRldi0+bmFtZTsKKysJcHJpdi0+c29jID0gb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKCZwZGV2LT5kZXYpOworKwlpZiAocHJpdi0+c29jLT5ybmdfdmVyc2lvbiA9PSAxKSB7CisrCQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworKwkJaWYgKCFyZXMpIHsKKysJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBpb21lbSByZXNvdXJjZVxuIik7CisrCQkJcmV0dXJuIC1FTlhJTzsKKysJCX0KKysKKysJCXByaXYtPmJhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKKysJCWlmIChJU19FUlIocHJpdi0+YmFzZSkpCisrCQkJcmV0dXJuIFBUUl9FUlIocHJpdi0+YmFzZSk7CisrCisrCQlwcml2LT5jbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgInJuZyIpOworKwkJaWYgKElTX0VSUihwcml2LT5jbGspKSB7CisrCQkJcmV0ID0gUFRSX0VSUihwcml2LT5jbGspOworKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIGNsb2NrIGZvciBkZXZpY2U6ICVkXG4iLCByZXQpOworKwkJCXJldHVybiByZXQ7CisrCQl9CisrCisgI2lmbmRlZiBDT05GSUdfUE0KKy0JcHJpdi0+cm5nLmluaXQgPSBtdGtfcm5nX2luaXQ7CistCXByaXYtPnJuZy5jbGVhbnVwID0gbXRrX3JuZ19jbGVhbnVwOworKwkJcHJpdi0+cm5nLmluaXQgPSBtdGtfcm5nX2luaXQ7CisrCQlwcml2LT5ybmcuY2xlYW51cCA9IG10a19ybmdfY2xlYW51cDsKKyAjZW5kaWYKKy0JcHJpdi0+cm5nLnJlYWQgPSBtdGtfcm5nX3JlYWQ7CisrCQlwcml2LT5ybmcucmVhZCA9IG10a19ybmdfcmVhZDsKKysKKysJCXBtX3J1bnRpbWVfc2V0X2F1dG9zdXNwZW5kX2RlbGF5KCZwZGV2LT5kZXYsCisrCQkJCQkJIFJOR19BVVRPU1VTUEVORF9USU1FT1VUKTsKKysJCXBtX3J1bnRpbWVfdXNlX2F1dG9zdXNwZW5kKCZwZGV2LT5kZXYpOworKwkJcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7CisrCX0gZWxzZSB7CisrCQlwcml2LT5ybmcucmVhZCA9IG10a19ybmd2Ml9yZWFkOworKwl9CisrCisrCXByaXYtPnJuZy5uYW1lID0gcGRldi0+bmFtZTsKKyAJcHJpdi0+cm5nLnByaXYgPSAodW5zaWduZWQgbG9uZykmcGRldi0+ZGV2OworIAlwcml2LT5ybmcucXVhbGl0eSA9IDkwMDsKKyAKKy0JcHJpdi0+Y2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJybmciKTsKKy0JaWYgKElTX0VSUihwcml2LT5jbGspKSB7CistCQlyZXQgPSBQVFJfRVJSKHByaXYtPmNsayk7CistCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBjbG9jayBmb3IgZGV2aWNlOiAlZFxuIiwgcmV0KTsKKy0JCXJldHVybiByZXQ7CistCX0KKy0KKy0JcHJpdi0+YmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOworLQlpZiAoSVNfRVJSKHByaXYtPmJhc2UpKQorLQkJcmV0dXJuIFBUUl9FUlIocHJpdi0+YmFzZSk7CisrCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBwcml2KTsKKyAKKyAJcmV0ID0gZGV2bV9od3JuZ19yZWdpc3RlcigmcGRldi0+ZGV2LCAmcHJpdi0+cm5nKTsKKyAJaWYgKHJldCkgeworQEAgLTE0NiwxMSArMTg5LDYgQEAgc3RhdGljIGludCBtdGtfcm5nX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCisgCQlyZXR1cm4gcmV0OworIAl9CisgCistCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBwcml2KTsKKy0JcG1fcnVudGltZV9zZXRfYXV0b3N1c3BlbmRfZGVsYXkoJnBkZXYtPmRldiwgUk5HX0FVVE9TVVNQRU5EX1RJTUVPVVQpOworLQlwbV9ydW50aW1lX3VzZV9hdXRvc3VzcGVuZCgmcGRldi0+ZGV2KTsKKy0JcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7CistCisgCWRldl9pbmZvKCZwZGV2LT5kZXYsICJyZWdpc3RlcmVkIFJORyBkcml2ZXJcbiIpOworIAorIAlyZXR1cm4gMDsKK0BAIC0xODUsOSArMjIzLDIyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBtdGtfcm5nX3BtX29wcyA9IHsKKyAjZGVmaW5lIE1US19STkdfUE1fT1BTIE5VTEwKKyAjZW5kaWYJLyogQ09ORklHX1BNICovCisgCisrc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfcm5nX29mX2RhdGEgbXQ3OTgxX3JuZ19kYXRhID0geworKwkucm5nX3ZlcnNpb24gPSAyLAorK307CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfcm5nX29mX2RhdGEgbXQ3OTg2X3JuZ19kYXRhID0geworKwkucm5nX3ZlcnNpb24gPSAxLAorK307CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfcm5nX29mX2RhdGEgbXQ3NjIzX3JuZ19kYXRhID0geworKwkucm5nX3ZlcnNpb24gPSAxLAorK307CisrCisgc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRrX3JuZ19tYXRjaFtdID0geworLQl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10Nzk4Ni1ybmciIH0sCistCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3NjIzLXJuZyIgfSwKKysJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDc5ODEtcm5nIiwgLmRhdGEgPSAmbXQ3OTgxX3JuZ19kYXRhIH0sCisrCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ3OTg2LXJuZyIsIC5kYXRhID0gJm10Nzk4Nl9ybmdfZGF0YSB9LAorKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NzYyMy1ybmciLCAuZGF0YSA9ICZtdDc2MjNfcm5nX2RhdGEgfSwKKyAJe30sCisgfTsKKyBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtdGtfcm5nX21hdGNoKTsKKy0tIAorMi4xOC4wCisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8yMDAwLW1pc2MtYWRkLW10ay1wbGF0Zm9ybS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC8yMDAwLW1pc2MtYWRkLW10ay1wbGF0Zm9ybS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjgwZTEwCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzIwMDAtbWlzYy1hZGQtbXRrLXBsYXRmb3JtLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK2RpZmYgLXVyTiBhL2RyaXZlcnMvbWlzYy9LY29uZmlnIGIvZHJpdmVycy9taXNjL0tjb25maWcKKy0tLSBhL2RyaXZlcnMvbWlzYy9LY29uZmlnCTIwMjEtMDYtMjkgMTU6MTA6MDAuOTcwNzg4ODMxICswODAwCisrKysgYi9kcml2ZXJzL21pc2MvS2NvbmZpZwkyMDIxLTA2LTI5IDE1OjA5OjQxLjU3OTE1ODE1MiArMDgwMAorQEAgLTQ4MSw0ICs0ODEsNSBAQAorIHNvdXJjZSAiZHJpdmVycy9taXNjL29jeGwvS2NvbmZpZyIKKyBzb3VyY2UgImRyaXZlcnMvbWlzYy9jYXJkcmVhZGVyL0tjb25maWciCisgc291cmNlICJkcml2ZXJzL21pc2MvaGFiYW5hbGFicy9LY29uZmlnIgorK3NvdXJjZSAiZHJpdmVycy9taXNjL21lZGlhdGVrL0tjb25maWciCisgZW5kbWVudQorZGlmZiAtdXJOIGEvZHJpdmVycy9taXNjL01ha2VmaWxlIGIvZHJpdmVycy9taXNjL01ha2VmaWxlCistLS0gYS9kcml2ZXJzL21pc2MvTWFrZWZpbGUJMjAyMS0wNi0yOSAxNToxMDoxNS4xNTA1MTg0NjEgKzA4MDAKKysrKyBiL2RyaXZlcnMvbWlzYy9NYWtlZmlsZQkyMDIxLTA2LTI5IDE1OjA5OjQ2LjkzOTA1NjEyMSArMDgwMAorQEAgLTU3LDMgKzU3LDQgQEAKKyBvYmotJChDT05GSUdfUFZQQU5JQykgICAJKz0gcHZwYW5pYy5vCisgb2JqLSQoQ09ORklHX0hBQkFOQV9BSSkJCSs9IGhhYmFuYWxhYnMvCisgb2JqLSQoQ09ORklHX1hJTElOWF9TREZFQykJKz0geGlsaW54X3NkZmVjLm8KKytvYmotJChDT05GSUdfQVJDSF9NRURJQVRFSykJKz0gbWVkaWF0ZWsvCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvNDAwLW10ZC1hZGQtbXRrLXNuYW5kLWRyaXZlci5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC80MDAtbXRkLWFkZC1tdGstc25hbmQtZHJpdmVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyODNiZDIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvNDAwLW10ZC1hZGQtbXRrLXNuYW5kLWRyaXZlci5wYXRjaApAQCAtMCwwICsxLDIxIEBACistLS0gYS9kcml2ZXJzL210ZC9LY29uZmlnCisrKysgYi9kcml2ZXJzL210ZC9LY29uZmlnCitAQCAtMjMwLDYgKzIzMCw4IEBAIHNvdXJjZSAiZHJpdmVycy9tdGQvaHlwZXJidXMvS2NvbmZpZyIKKyAKKyBzb3VyY2UgImRyaXZlcnMvbXRkL25tYm0vS2NvbmZpZyIKKyAKKytzb3VyY2UgImRyaXZlcnMvbXRkL210ay1zbmFuZC9LY29uZmlnIgorKworIHNvdXJjZSAiZHJpdmVycy9tdGQvY29tcG9zaXRlL0tjb25maWciCisgCisgZW5kaWYgIyBNVEQKKy0tLSBhL2RyaXZlcnMvbXRkL01ha2VmaWxlCisrKysgYi9kcml2ZXJzL210ZC9NYWtlZmlsZQorQEAgLTM1LDUgKzM1LDcgQEAgb2JqLSQoQ09ORklHX01URF9IWVBFUkJVUykJKz0gaHlwZXJidXMvCisgCisgb2JqLXkJCQkJKz0gbm1ibS8KKyAKKytvYmotJChDT05GSUdfTVRLX1NQSV9OQU5EKQkrPSBtdGstc25hbmQvCisrCisgIyBDb21wb3NpdGUgZHJpdmVycyBtdXN0IGJlIGxvYWRlZCBsYXN0Cisgb2JqLXkJCQkJKz0gY29tcG9zaXRlLwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzQwMS1waW5jdHJsLWFkZC1tdDc5ODYtZHJpdmVyLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzQwMS1waW5jdHJsLWFkZC1tdDc5ODYtZHJpdmVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMjJlNDkKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvNDAxLXBpbmN0cmwtYWRkLW10Nzk4Ni1kcml2ZXIucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9tZWRpYXRlay9LY29uZmlnIGIvZHJpdmVycy9waW5jdHJsL21lZGlhdGVrL0tjb25maWcKK2luZGV4IDcwMWY5YWYuLjkxMDlmOTEgMTAwNjQ0CistLS0gYS9kcml2ZXJzL3BpbmN0cmwvbWVkaWF0ZWsvS2NvbmZpZworKysrIGIvZHJpdmVycy9waW5jdHJsL21lZGlhdGVrL0tjb25maWcKK0BAIC0xMDAsNiArMTAwLDExIEBAIGNvbmZpZyBQSU5DVFJMX01UNzYyMgorIAlkZWZhdWx0IEFSTTY0ICYmIEFSQ0hfTUVESUFURUsKKyAJc2VsZWN0IFBJTkNUUkxfTVRLX01PT1JFCisgCisrY29uZmlnIFBJTkNUUkxfTVQ3OTg2CisrCWJvb2wgIk1lZGlhdGVrIE1UNzk4NiBwaW4gY29udHJvbCIKKysJZGVwZW5kcyBvbiBPRgorKwlzZWxlY3QgUElOQ1RSTF9NVEtfTU9PUkUKKysKKyBjb25maWcgUElOQ1RSTF9NVDgxNzMKKyAJYm9vbCAiTWVkaWF0ZWsgTVQ4MTczIHBpbiBjb250cm9sIgorIAlkZXBlbmRzIG9uIE9GCitkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL21lZGlhdGVrL01ha2VmaWxlIGIvZHJpdmVycy9waW5jdHJsL21lZGlhdGVrL01ha2VmaWxlCitpbmRleCBhNzQzMjVhLi5kNDA4NTg1IDEwMDY0NAorLS0tIGEvZHJpdmVycy9waW5jdHJsL21lZGlhdGVrL01ha2VmaWxlCisrKysgYi9kcml2ZXJzL3BpbmN0cmwvbWVkaWF0ZWsvTWFrZWZpbGUKK0BAIC0xNSw2ICsxNSw3IEBAIG9iai0kKENPTkZJR19QSU5DVFJMX01UNjc5NykJKz0gcGluY3RybC1tdDY3OTcubworIG9iai0kKENPTkZJR19QSU5DVFJMX01UNzYyMikJKz0gcGluY3RybC1tdDc2MjIubworIG9iai0kKENPTkZJR19QSU5DVFJMX01UNzYyMykJKz0gcGluY3RybC1tdDc2MjMubworIG9iai0kKENPTkZJR19QSU5DVFJMX01UNzYyOSkJKz0gcGluY3RybC1tdDc2MjkubworK29iai0kKENPTkZJR19QSU5DVFJMX01UNzk4NikJKz0gcGluY3RybC1tdDc5ODYubworIG9iai0kKENPTkZJR19QSU5DVFJMX01UODE3MykJKz0gcGluY3RybC1tdDgxNzMubworIG9iai0kKENPTkZJR19QSU5DVFJMX01UODE4MykJKz0gcGluY3RybC1tdDgxODMubworIG9iai0kKENPTkZJR19QSU5DVFJMX01UODUxNikJKz0gcGluY3RybC1tdDg1MTYubwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzQwMi1waW5jdHJsLWFkZC1tdDc5ODEtZHJpdmVyLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzQwMi1waW5jdHJsLWFkZC1tdDc5ODEtZHJpdmVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNjdlZTcKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvNDAyLXBpbmN0cmwtYWRkLW10Nzk4MS1kcml2ZXIucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorRnJvbSAxYjUyOTg0OWYzMjRlZGVjMDUzYTM0MjkyZTNmODc0YmRlOGY3NDAxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogU2FtIFNoaWggPHNhbS5zaGloQG1lZGlhdGVrLmNvbT4KK0RhdGU6IEZyaSwgMjUgSnVuIDIwMjEgMTU6NDM6NTUgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIG10Nzk4MSBwaW5jdHJsIGRyaXZlciBzdXBwb3J0CisKKy0tLQorIGRyaXZlcnMvcGluY3RybC9tZWRpYXRlay9LY29uZmlnICB8IDcgKysrKysrKworIGRyaXZlcnMvcGluY3RybC9tZWRpYXRlay9NYWtlZmlsZSB8IDEgKworIDIgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvbWVkaWF0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvcGluY3RybC9tZWRpYXRlay9LY29uZmlnCitpbmRleCA5MTA5ZjkxLi5kNDBhZWU1IDEwMDY0NAorLS0tIGEvZHJpdmVycy9waW5jdHJsL21lZGlhdGVrL0tjb25maWcKKysrKyBiL2RyaXZlcnMvcGluY3RybC9tZWRpYXRlay9LY29uZmlnCitAQCAtMTAwLDYgKzEwMCwxMSBAQCBjb25maWcgUElOQ1RSTF9NVDc2MjIKKyAJZGVmYXVsdCBBUk02NCAmJiBBUkNIX01FRElBVEVLCisgCXNlbGVjdCBQSU5DVFJMX01US19NT09SRQorIAorK2NvbmZpZyBQSU5DVFJMX01UNzk4MQorKwlib29sICJNZWRpYXRlayBNVDc5ODEgcGluIGNvbnRyb2wiCisrCWRlcGVuZHMgb24gT0YKKysJc2VsZWN0IFBJTkNUUkxfTVRLX01PT1JFCisrCisgY29uZmlnIFBJTkNUUkxfTVQ3OTg2CisgCWJvb2wgIk1lZGlhdGVrIE1UNzk4NiBwaW4gY29udHJvbCIKKyAJZGVwZW5kcyBvbiBPRgorZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9tZWRpYXRlay9NYWtlZmlsZSBiL2RyaXZlcnMvcGluY3RybC9tZWRpYXRlay9NYWtlZmlsZQoraW5kZXggZDQwODU4NS4uZTY4MTNjZiAxMDA2NDQKKy0tLSBhL2RyaXZlcnMvcGluY3RybC9tZWRpYXRlay9NYWtlZmlsZQorKysrIGIvZHJpdmVycy9waW5jdHJsL21lZGlhdGVrL01ha2VmaWxlCitAQCAtMTUsNiArMTUsNyBAQCBvYmotJChDT05GSUdfUElOQ1RSTF9NVDY3OTcpCSs9IHBpbmN0cmwtbXQ2Nzk3Lm8KKyBvYmotJChDT05GSUdfUElOQ1RSTF9NVDc2MjIpCSs9IHBpbmN0cmwtbXQ3NjIyLm8KKyBvYmotJChDT05GSUdfUElOQ1RSTF9NVDc2MjMpCSs9IHBpbmN0cmwtbXQ3NjIzLm8KKyBvYmotJChDT05GSUdfUElOQ1RSTF9NVDc2MjkpCSs9IHBpbmN0cmwtbXQ3NjI5Lm8KKytvYmotJChDT05GSUdfUElOQ1RSTF9NVDc5ODEpCSs9IHBpbmN0cmwtbXQ3OTgxLm8KKyBvYmotJChDT05GSUdfUElOQ1RSTF9NVDc5ODYpCSs9IHBpbmN0cmwtbXQ3OTg2Lm8KKyBvYmotJChDT05GSUdfUElOQ1RSTF9NVDgxNzMpCSs9IHBpbmN0cmwtbXQ4MTczLm8KKyBvYmotJChDT05GSUdfUElOQ1RSTF9NVDgxODMpCSs9IHBpbmN0cmwtbXQ4MTgzLm8KKy0tIAorMi42LjQKKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzUwMC1hdXhhZGMtYWRkLWF1eGFkYy0zMmstY2xrLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzUwMC1hdXhhZGMtYWRkLWF1eGFkYy0zMmstY2xrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMGRkMmYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvNTAwLWF1eGFkYy1hZGQtYXV4YWRjLTMyay1jbGsucGF0Y2gKQEAgLTAsMCArMSw2OCBAQAorZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL2FkYy9tdDY1NzdfYXV4YWRjLmMgYi9kcml2ZXJzL2lpby9hZGMvbXQ2NTc3X2F1eGFkYy5jCitpbmRleCAyNDQ5ZDkxLi5iOGE0M2ViIDEwMDY0NAorLS0tIGEvZHJpdmVycy9paW8vYWRjL210NjU3N19hdXhhZGMuYworKysrIGIvZHJpdmVycy9paW8vYWRjL210NjU3N19hdXhhZGMuYworQEAgLTQyLDYgKzQyLDcgQEAgc3RydWN0IG10a19hdXhhZGNfY29tcGF0aWJsZSB7Cisgc3RydWN0IG10NjU3N19hdXhhZGNfZGV2aWNlIHsKKyAJdm9pZCBfX2lvbWVtICpyZWdfYmFzZTsKKyAJc3RydWN0IGNsayAqYWRjX2NsazsKKysJc3RydWN0IGNsayAqYWRjXzMya19jbGs7CisgCXN0cnVjdCBtdXRleCBsb2NrOworIAljb25zdCBzdHJ1Y3QgbXRrX2F1eGFkY19jb21wYXRpYmxlICpkZXZfY29tcDsKKyB9OworQEAgLTIxNCw2ICsyMTUsMTIgQEAgc3RhdGljIGludCBfX21heWJlX3VudXNlZCBtdDY1NzdfYXV4YWRjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCisgCQlyZXR1cm4gcmV0OworIAl9CisgCisrCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShhZGNfZGV2LT5hZGNfMzJrX2Nsayk7CisrCWlmIChyZXQpIHsKKysJCXByX2VycigiZmFpbGVkIHRvIGVuYWJsZSBhdXhhZGMgY2xvY2tcbiIpOworKwkJcmV0dXJuIHJldDsKKysJfQorKworIAltdDY1NzdfYXV4YWRjX21vZF9yZWcoYWRjX2Rldi0+cmVnX2Jhc2UgKyBNVDY1NzdfQVVYQURDX01JU0MsCisgCQkJICAgICAgTVQ2NTc3X0FVWEFEQ19QRE5fRU4sIDApOworIAltZGVsYXkoTVQ2NTc3X0FVWEFEQ19QT1dFUl9SRUFEWV9NUyk7CitAQCAtMjI4LDYgKzIzNSw4IEBAIHN0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgbXQ2NTc3X2F1eGFkY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKKyAKKyAJbXQ2NTc3X2F1eGFkY19tb2RfcmVnKGFkY19kZXYtPnJlZ19iYXNlICsgTVQ2NTc3X0FVWEFEQ19NSVNDLAorIAkJCSAgICAgIDAsIE1UNjU3N19BVVhBRENfUEROX0VOKTsKKysKKysJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGFkY19kZXYtPmFkY18zMmtfY2xrKTsKKyAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGFkY19kZXYtPmFkY19jbGspOworIAorIAlyZXR1cm4gMDsKK0BAIC0yNzIsNiArMjgxLDE3IEBAIHN0YXRpYyBpbnQgbXQ2NTc3X2F1eGFkY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorIAkJcmV0dXJuIHJldDsKKyAJfQorIAorKwlhZGNfZGV2LT5hZGNfMzJrX2NsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAiMzJrIik7CisrCWlmIChJU19FUlIoYWRjX2Rldi0+YWRjXzMya19jbGspKSB7CisrCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IGF1eGFkYyAzMmsgY2xvY2tcbiIpOworKwl9IGVsc2UgeworKwkJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGFkY19kZXYtPmFkY18zMmtfY2xrKTsKKysJCWlmIChyZXQpIHsKKysJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZW5hYmxlIGF1eGFkYyAzMmsgY2xvY2tcbiIpOworKwkJCXJldHVybiByZXQ7CisrCQl9CisrCX0KKysKKyAJYWRjX2Nsa19yYXRlID0gY2xrX2dldF9yYXRlKGFkY19kZXYtPmFkY19jbGspOworIAlpZiAoIWFkY19jbGtfcmF0ZSkgeworIAkJcmV0ID0gLUVJTlZBTDsKK0BAIC0zMDEsNiArMzIxLDcgQEAgc3RhdGljIGludCBtdDY1NzdfYXV4YWRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCisgCW10NjU3N19hdXhhZGNfbW9kX3JlZyhhZGNfZGV2LT5yZWdfYmFzZSArIE1UNjU3N19BVVhBRENfTUlTQywKKyAJCQkgICAgICAwLCBNVDY1NzdfQVVYQURDX1BETl9FTik7CisgZXJyX2Rpc2FibGVfY2xrOgorKwljbGtfZGlzYWJsZV91bnByZXBhcmUoYWRjX2Rldi0+YWRjXzMya19jbGspOworIAljbGtfZGlzYWJsZV91bnByZXBhcmUoYWRjX2Rldi0+YWRjX2Nsayk7CisgCXJldHVybiByZXQ7CisgfQorQEAgLTMxNSw2ICszMzYsNyBAQCBzdGF0aWMgaW50IG10NjU3N19hdXhhZGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCisgCW10NjU3N19hdXhhZGNfbW9kX3JlZyhhZGNfZGV2LT5yZWdfYmFzZSArIE1UNjU3N19BVVhBRENfTUlTQywKKyAJCQkgICAgICAwLCBNVDY1NzdfQVVYQURDX1BETl9FTik7CisgCisrCWNsa19kaXNhYmxlX3VucHJlcGFyZShhZGNfZGV2LT5hZGNfMzJrX2Nsayk7CisgCWNsa19kaXNhYmxlX3VucHJlcGFyZShhZGNfZGV2LT5hZGNfY2xrKTsKKyAKKyAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvNzMwLW5ldC1ldGhlcm5ldC1tdGtfZXRoX3NvYy1hZGQtbXRrLWRzYS10YWctcngtb2ZmbG9hZC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC83MzAtbmV0LWV0aGVybmV0LW10a19ldGhfc29jLWFkZC1tdGstZHNhLXRhZy1yeC1vZmZsb2FkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMTA1ODQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvNzMwLW5ldC1ldGhlcm5ldC1tdGtfZXRoX3NvYy1hZGQtbXRrLWRzYS10YWctcngtb2ZmbG9hZC5wYXRjaApAQCAtMCwwICsxLDQ0IEBACistLS0gbGludXgtNS40Ljc3Lm9yaWcvbmV0L2RzYS90YWdfbXRrLmMKKysrKyBsaW51eC01LjQuNzcvbmV0L2RzYS90YWdfbXRrLmMKK0BAIC03MywyMiArNzMsMjggQEAgc3RhdGljIHN0cnVjdCBza19idWZmICptdGtfdGFnX3JjdihzdHJ1YworIAlib29sIGlzX211bHRpY2FzdF9za2IgPSBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihkZXN0KSAmJgorIAkJCQkhaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoZGVzdCk7CisgCistCWlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIE1US19IRFJfTEVOKSkpCistCQlyZXR1cm4gTlVMTDsKKysJaWYgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCkgeworKwkJaGRyID0gbnRvaHMoc2tiLT52bGFuX3Byb3RvKTsKKysJCXNrYi0+dmxhbl9wcm90byA9IDA7CisrCQlza2ItPnZsYW5fdGNpID0gMDsKKysJfSBlbHNlIHsKKysJCWlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIE1US19IRFJfTEVOKSkpCisrCQkJcmV0dXJuIE5VTEw7CisgCistCS8qIFRoZSBNVEsgaGVhZGVyIGlzIGFkZGVkIGJ5IHRoZSBzd2l0Y2ggYmV0d2VlbiBzcmMgYWRkcgorLQkgKiBhbmQgZXRoZXJ0eXBlIGF0IHRoaXMgcG9pbnQsIHNrYi0+ZGF0YSBwb2ludHMgdG8gMiBieXRlcworLQkgKiBhZnRlciBzcmMgYWRkciBzbyBoZWFkZXIgc2hvdWxkIGJlIDIgYnl0ZXMgcmlnaHQgYmVmb3JlLgorLQkgKi8KKy0JcGhkciA9IChfX2JlMTYgKikoc2tiLT5kYXRhIC0gMik7CistCWhkciA9IG50b2hzKCpwaGRyKTsKKysJCS8qIFRoZSBNVEsgaGVhZGVyIGlzIGFkZGVkIGJ5IHRoZSBzd2l0Y2ggYmV0d2VlbiBzcmMgYWRkcgorKwkJICogYW5kIGV0aGVydHlwZSBhdCB0aGlzIHBvaW50LCBza2ItPmRhdGEgcG9pbnRzIHRvIDIgYnl0ZXMKKysJCSAqIGFmdGVyIHNyYyBhZGRyIHNvIGhlYWRlciBzaG91bGQgYmUgMiBieXRlcyByaWdodCBiZWZvcmUuCisrCQkgKi8KKysJCXBoZHIgPSAoX19iZTE2ICopKHNrYi0+ZGF0YSAtIDIpOworKwkJaGRyID0gbnRvaHMoKnBoZHIpOworIAorLQkvKiBSZW1vdmUgTVRLIHRhZyBhbmQgcmVjYWxjdWxhdGUgY2hlY2tzdW0uICovCistCXNrYl9wdWxsX3Jjc3VtKHNrYiwgTVRLX0hEUl9MRU4pOworKwkJLyogUmVtb3ZlIE1USyB0YWcgYW5kIHJlY2FsY3VsYXRlIGNoZWNrc3VtLiAqLworKwkJc2tiX3B1bGxfcmNzdW0oc2tiLCBNVEtfSERSX0xFTik7CisgCistCW1lbW1vdmUoc2tiLT5kYXRhIC0gRVRIX0hMRU4sCistCQlza2ItPmRhdGEgLSBFVEhfSExFTiAtIE1US19IRFJfTEVOLAorLQkJMiAqIEVUSF9BTEVOKTsKKysJCW1lbW1vdmUoc2tiLT5kYXRhIC0gRVRIX0hMRU4sCisrCQkJc2tiLT5kYXRhIC0gRVRIX0hMRU4gLSBNVEtfSERSX0xFTiwKKysJCQkyICogRVRIX0FMRU4pOworKwl9CisgCisgCS8qIEdldCBzb3VyY2UgcG9ydCBpbmZvcm1hdGlvbiAqLworIAlwb3J0ID0gKGhkciAmIE1US19IRFJfUkVDVl9TT1VSQ0VfUE9SVF9NQVNLKTsKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC83MzgtbXQ3NTMxLWdzdy1pbnRlcm5hbF9waHlfY2FsaWJyYXRpb24ucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvNzM4LW10NzUzMS1nc3ctaW50ZXJuYWxfcGh5X2NhbGlicmF0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM2MWVjYTYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvNzM4LW10NzUzMS1nc3ctaW50ZXJuYWxfcGh5X2NhbGlicmF0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMTI4MiBAQAorSW5kZXg6IGRyaXZlcnMvbmV0L3BoeS9tdGsvbXQ3NTN4L01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYS9kcml2ZXJzL25ldC9waHkvbXRrL210NzUzeC9NYWtlZmlsZQorKysrIGIvZHJpdmVycy9uZXQvcGh5L210ay9tdDc1M3gvTWFrZWZpbGUKK0BAIC03LDUgKzcsNSBAQCBvYmotJChDT05GSUdfTVQ3NTNYX0dTVykJKz0gbXQ3NTN4Lm8KKyBtdDc1M3gtJChDT05GSUdfU1dDT05GSUcpCSs9IG10NzUzeF9zd2NvbmZpZy5vCisgCisgbXQ3NTN4LXkJCQkrPSBtdDc1M3hfbWRpby5vIG10NzUzMC5vIG10NzUzMS5vIFwKKy0JCQkJCW10NzUzeF9jb21tb24ubyBtdDc1M3hfdmxhbi5vIG10NzUzeF9ubC5vCisrCQkJCQltdDc1M3hfY29tbW9uLm8gbXQ3NTN4X3ZsYW4ubyBtdDc1M3hfbmwubyBtdDc1M3hfcGh5Lm8KKyAKK0luZGV4OiBkcml2ZXJzL25ldC9waHkvbXRrL210NzUzeC9tdDc1MzEuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvZHJpdmVycy9uZXQvcGh5L210ay9tdDc1M3gvbXQ3NTMxLmMKKysrKyBiL2RyaXZlcnMvbmV0L3BoeS9tdGsvbXQ3NTN4L210NzUzMS5jCitAQCAtNjU4LDYgKzY1OCwyNyBAQCBzdGF0aWMgdm9pZCBtdDc1MzFfY29yZV9wbGxfc2V0dXAoc3RydWN0CisgCisgc3RhdGljIGludCBtdDc1MzFfaW50ZXJuYWxfcGh5X2NhbGlicmF0aW9uKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3cpCisgeworKwl1MzIgaSwgdmFsOworKwlpbnQgcmV0OworKworKwlkZXZfaW5mbyhnc3ctPmRldiwiPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4gU1RBUlQgQ0FMSUJSQVRJT046XG4iKTsKKysKKysJLyogZ3BoeSB2YWx1ZSBmcm9tIHN3IHBhdGggKi8KKysJdmFsID0gZ3N3LT5tbWRfcmVhZChnc3csIDAsIFBIWV9ERVYxRiwgUEhZX0RFVjFGX1JFR180MDMpOworKwl2YWwgfD0gR0JFX0VGVVNFX1NFVFRJTkc7CisrCWdzdy0+bW1kX3dyaXRlKGdzdywgMCwgUEhZX0RFVjFGLCBQSFlfREVWMUZfUkVHXzQwMywgdmFsKTsKKysKKysJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworKwkJZGV2X2luZm8oZ3N3LT5kZXYsICItLS0tLS0tLSBnZXBoeS1jYWxicmF0aW9uIChwb3J0OiVkKSAtLS0tLS0tLVxuIiwKKysJCQkgaSk7CisrCQlyZXQgPSBtdDc1M3hfcGh5X2NhbGlicmF0aW9uKGdzdywgaSk7CisrCisrCQkvKiBzZXQgQXV0by1uZWdvdGlhdGlvbiB3aXRoIGdpZ2EgZXh0ZW5zaW9uLiAqLworKwkJZ3N3LT5taWlfd3JpdGUoZ3N3LCBpLCAwLCAweDEzNDApOworKwkJaWYgKHJldCkKKysJCQlyZXR1cm4gcmV0OworKwl9CisrCisgCXJldHVybiAwOworIH0KKyAKK0luZGV4OiBkcml2ZXJzL25ldC9waHkvbXRrL210NzUzeC9tdDc1M3guaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvZHJpdmVycy9uZXQvcGh5L210ay9tdDc1M3gvbXQ3NTN4LmgKKysrKyBiL2RyaXZlcnMvbmV0L3BoeS9tdGsvbXQ3NTN4L210NzUzeC5oCitAQCAtMTQwLDYgKzE0MCw4IEBAIHZvaWQgbXQ3NTN4X2lycV9lbmFibGUoc3RydWN0IGdzd19tdDc1M3gKKyBpbnQgbXQ3NTN4X3BoeV9jYWxpYnJhdGlvbihzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3LCB1OCBwaHlhZGRyKTsKKyBpbnQgZXh0cGh5X2luaXQoc3RydWN0IGdzd19tdDc1M3ggKmdzdywgaW50IGFkZHIpOworIAorK2ludCBtdDc1M3hfcGh5X2NhbGlicmF0aW9uKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3csIHU4IHBoeWFkZHIpOworKworIC8qIE1ESU8gSW5kaXJlY3QgQWNjZXNzIFJlZ2lzdGVycyAqLworICNkZWZpbmUgTUlJX01NRF9BQ0NfQ1RMX1JFRwkJMHgwZAorICNkZWZpbmUgTU1EX0NNRF9TCQkJMTQKK0luZGV4OiBkcml2ZXJzL25ldC9waHkvbXRrL210NzUzeC9tdDc1M3hfcGh5LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK25ldyBmaWxlIG1vZGUgMTAwNjQ0CistLS0gL2Rldi9udWxsCisrKysgYi9kcml2ZXJzL25ldC9waHkvbXRrL210NzUzeC9tdDc1M3hfcGh5LmMKK0BAIC0wLDAgKzEsMTA2OSBAQAorKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKworKy8qCisrICogQ29tbW9uIHBhcnQgZm9yIE1lZGlhVGVrIE1UNzUzeCBnaWdhYml0IHN3aXRjaAorKyAqCisrICogQ29weXJpZ2h0IChDKSAyMDE4IE1lZGlhVGVrIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKysgKgorKyAqIEF1dGhvcjogV2VpamllIEdhbyA8d2VpamllLmdhb0BtZWRpYXRlay5jb20+CisrICovCisrCisrI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorKworKyNpbmNsdWRlICJtdDc1M3guaCIKKysjaW5jbHVkZSAibXQ3NTN4X3JlZ3MuaCIKKysjaW5jbHVkZSAibXQ3NTN4X3BoeS5oIgorKworK3UzMiB0Y19waHlfcmVhZF9kZXZfcmVnKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3csIHUzMiBwb3J0X251bSwgdTMyIGRldl9hZGRyLCB1MzIgcmVnX2FkZHIpCisreworKwl1MzIgcGh5X3ZhbDsKKysgICAgcGh5X3ZhbCA9IGdzdy0+bW1kX3JlYWQoZ3N3LCBwb3J0X251bSwgZGV2X2FkZHIsIHJlZ19hZGRyKTsKKysgICAgCisrICAgIC8vcHJpbnRrKCJzd2l0Y2ggcGh5IGNsNDUgciAlZCAweCV4IDB4JXggPSAleFxuIixwb3J0X251bSwgZGV2X2FkZHIsIHJlZ19hZGRyLCBwaHlfdmFsKTsKKysJLy9zd2l0Y2hfcGh5X3JlYWRfY2w0NShwb3J0X251bSwgZGV2X2FkZHIsIHJlZ19hZGRyLCAmcGh5X3ZhbCk7CisrCXJldHVybiBwaHlfdmFsOworK30KKysKKyt2b2lkIHRjX3BoeV93cml0ZV9kZXZfcmVnKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3csIHUzMiBwb3J0X251bSwgdTMyIGRldl9hZGRyLCB1MzIgcmVnX2FkZHIsIHUzMiB3cml0ZV9kYXRhKQorK3sKKysJdTMyIHBoeV92YWw7CisrICAgIGdzdy0+bW1kX3dyaXRlKGdzdywgcG9ydF9udW0sIGRldl9hZGRyLCByZWdfYWRkciwgd3JpdGVfZGF0YSk7CisrICAgIHBoeV92YWwgPSBnc3ctPm1tZF9yZWFkKGdzdywgcG9ydF9udW0sIGRldl9hZGRyLCByZWdfYWRkcik7CisrICAgIC8vcHJpbnRrKCJzd2l0Y2ggcGh5IGNsNDUgdyAlZCAweCV4IDB4JXggMHgleCAtLT4gcmVhZCBiYWNrIDB4JXhcbiIscG9ydF9udW0sIGRldl9hZGRyLCByZWdfYWRkciwgd3JpdGVfZGF0YSwgcGh5X3ZhbCk7CisrCS8vc3dpdGNoX3BoeV93cml0ZV9jbDQ1KHBvcnRfbnVtLCBkZXZfYWRkciwgcmVnX2FkZHIsIHdyaXRlX2RhdGEpOworK30KKysKKyt2b2lkIHN3aXRjaF9waHlfd3JpdGUoc3RydWN0IGdzd19tdDc1M3ggKmdzdywgdTMyIHBvcnRfbnVtLCB1MzIgcmVnX2FkZHIsIHUzMiB3cml0ZV9kYXRhKXsKKysJZ3N3LT5taWlfd3JpdGUoZ3N3LCBwb3J0X251bSwgcmVnX2FkZHIsIHdyaXRlX2RhdGEpOworK30KKysKKyt1MzIgc3dpdGNoX3BoeV9yZWFkKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3csIHUzMiBwb3J0X251bSwgdTMyIHJlZ19hZGRyKXsKKysJcmV0dXJuIGdzdy0+bWlpX3JlYWQoZ3N3LCBwb3J0X251bSwgcmVnX2FkZHIpOworK30KKysKKytjb25zdCB1OCBNVDc1M3hfWkNBTF9UT19SNTBvaG1fR0VfVEJMXzEwMFs2NF0gPSB7CisrCTEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LAorKwkxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTIzLCAxMjIsIDExNywKKysJMTE1LCAxMTIsIDEwMywgMTAwLCA5OCwgODcsIDg1LCA4MywKKysJODEsIDcyLCA3MCwgNjgsIDY2LCA2NCwgNTUsIDUzLAorKwk1MiwgNTAsIDQ5LCA0OCwgMzgsIDM2LCAzNSwgMzQsCisrCTMzLCAzMiwgMjIsIDIxLCAyMCwgMTksIDE4LCAxNywKKysJMTYsIDcsIDYsIDUsIDQsIDMsIDIsIDEsCisrCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKKyt9OworKworK2NvbnN0IHU4IE1UNzUzeF9UWF9PRkZTRVRfVEJMWzY0XSA9IHsKKysJMHgxZiwgMHgxZSwgMHgxZCwgMHgxYywgMHgxYiwgMHgxYSwgMHgxOSwgMHgxOCwKKysJMHgxNywgMHgxNiwgMHgxNSwgMHgxNCwgMHgxMywgMHgxMiwgMHgxMSwgMHgxMCwKKysJMHhmLCAweGUsIDB4ZCwgMHhjLCAweGIsIDB4YSwgMHg5LCAweDgsCisrCTB4NywgMHg2LCAweDUsIDB4NCwgMHgzLCAweDIsIDB4MSwgMHgwLAorKwkweDIwLCAweDIxLCAweDIyLCAweDIzLCAweDI0LCAweDI1LCAweDI2LCAweDI3LAorKwkweDI4LCAweDI5LCAweDJhLCAweDJiLCAweDJjLCAweDJkLCAweDJlLCAweDJmLAorKwkweDMwLCAweDMxLCAweDMyLCAweDMzLCAweDM0LCAweDM1LCAweDM2LCAweDM3LAorKwkweDM4LCAweDM5LCAweDNhLCAweDNiLCAweDNjLCAweDNkLCAweDNlLCAweDNmCisrfTsKKysKKyt1OCBnZV9jYWxfZmxhZzsKKysKKyt1OCBhbGxfZ2VfYW5hX2NhbF93YWl0KHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3csIHUzMiBkZWxheSwgdTMyIHBoeWFkZHIpIC8vIGZvciBFTjc1MTIgCisreworKwl1OCBhbGxfYW5hX2NhbF9zdGF0dXM7CQorKwl1MzIgY250LCB0bXBfMWVfMTdjOworKwkvL3RjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgwMTdjLCAweDAwMDEpOwkvLyBkYV9jYWxpbl9mbGFnIHB1bGwgaGlnaAorKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIFBIWTAsIDB4MWUsIDB4MTdjLCAweDAwMDEpOworKwkvL3ByaW50aygiZGVsYXkgPSAlZFxuIiwgZGVsYXkpOworKwkKKysJY250ID0gMTAwMDA7CisrCWRvIHsKKysJCXVkZWxheShkZWxheSk7CisrCQljbnQtLTsKKysJCWFsbF9hbmFfY2FsX3N0YXR1cyA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCBQSFkwLCAweDFlLCAweDE3YikgJiAweDE7CisrCisrCX0gd2hpbGUgKChhbGxfYW5hX2NhbF9zdGF0dXMgPT0gMCkgJiYgKGNudCAhPSAwKSk7CisrCisrCisrCWlmKGFsbF9hbmFfY2FsX3N0YXR1cyA9PSAxKSB7CisrCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIFBIWTAsIDB4MWUsIDB4MTdjLCAwKTsKKysJCXJldHVybiBhbGxfYW5hX2NhbF9zdGF0dXM7CisrCX0gZWxzZSB7CisrCQl0bXBfMWVfMTdjID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csIFBIWTAsIDB4MWUsIDB4MTdjKTsKKysJCWlmICgodG1wXzFlXzE3YyAmIDB4MSkgIT0gMSkgeworKwkJCXByX2luZm8oIkZJUlNUIE1EQy9NRElPIHdyaXRlIGVycm9yXG4iKTsKKysJCQlwcl9pbmZvKCJGSVJTVCAxZV8xN2MgPSAleFxuIiwgdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csIFBIWTAsIDB4MWUsIDB4MTdjKSk7CisrCisrCQl9CisrCQlwcmludGsoInJlLUsgYWdhaW5cbiIpOworKyAgICAgICAgCisrCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIFBIWTAsIDB4MWUsIDB4MTdjLCAwKTsKKysJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgUEhZMCwgMHgxZSwgMHgxN2MsIDB4MDAwMSk7CisrCQljbnQgPSAxMDAwMDsKKysJCWRvIHsKKysJCQl1ZGVsYXkoZGVsYXkpOworKwkJCWNudC0tOworKwkJCXRtcF8xZV8xN2MgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGdzdywgUEhZMCwgMHgxZSwgMHgxN2MpOworKwkJCWlmICgodG1wXzFlXzE3YyAmIDB4MSkgIT0gMSkgeworKwkJCQlwcl9pbmZvKCJTRUNPTkQgTURDL01ESU8gd3JpdGUgZXJyb3JcbiIpOworKwkJCQlwcl9pbmZvKCJTRUNPTkQgMWVfMTdjID0gJXhcbiIsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCBQSFkwLCAweDFlLCAweDE3YykpOworKwkJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIFBIWTAsIDB4MWUsIDB4MTdjLCAweDAwMDEpOworKwkJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIFBIWTAsIDB4MWUsIDB4MTdjLCAweDAwMDEpOworKwkJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIFBIWTAsIDB4MWUsIDB4MTdjLCAweDAwMDEpOworKwkJCX0KKysJCX0gd2hpbGUgKChjbnQgIT0gMCkgJiYgKHRtcF8xZV8xN2MgPT0gMCkpOworKworKwkJY250ID0gMTAwMDA7CisrCQlkbyB7CisrCQkJdWRlbGF5KGRlbGF5KTsKKysJCQljbnQtLTsKKysJCQlhbGxfYW5hX2NhbF9zdGF0dXMgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGdzdywgUEhZMCwgMHgxZSwgMHgxN2IpICYgMHgxOworKwkKKysJCX0gd2hpbGUgKChhbGxfYW5hX2NhbF9zdGF0dXMgPT0gMCkgJiYgKGNudCAhPSAwKSk7CisrCQorKwkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBQSFkwLCAweDFlLCAweDE3YywgMCk7CisrCX0KKysKKysgICAgaWYoYWxsX2FuYV9jYWxfc3RhdHVzID09IDApeworKyAgICAgICAgcHJfaW5mbygiISEhISEhISEhISEhIGRldjFFaF9yZWcxN2IgRVJST1JcbiIpOworKyAgICB9CisrCQorKwlyZXR1cm4gYWxsX2FuYV9jYWxfc3RhdHVzOworK30KKysKKysKKysKKysKKytpbnQgZ2VfY2FsX3JleHQoc3RydWN0IGdzd19tdDc1M3ggKmdzdywgdTggcGh5YWRkciwgdTMyIGRlbGF5KQorK3sKKysJdTggcmdfemNhbF9jdHJsLCBhbGxfYW5hX2NhbF9zdGF0dXM7CisrCXUxNiBhZF9jYWxfY29tcF9vdXRfaW5pdDsKKysJdTE2IGRldjFlX2UwX2FuYV9jYWxfcjU7CisrCWludCBjYWxpYnJhdGlvbl9wb2xhcml0eTsKKysJdTggY250ID0gMDsKKysJdTE2IGRldjFlXzE3YV90bXAsIGRldjFlX2UwX3RtcDsKKysKKysJLyogKioqIElleHQvUmV4dCBDYWwgc3RhcnQgKioqKioqKioqKioqICovCisrCWFsbF9hbmFfY2FsX3N0YXR1cyA9IEFOQUNBTF9JTklUOworKwkvKiBhbmFsb2cgY2FsaWJyYXRpb24gZW5hYmxlLCBSZXh0IGNhbGlicmF0aW9uIGVuYWJsZSAqLworKwkvKiAxZV9kYlsxMl06cmdfY2FsX2NraW52LCBbOF06cmdfYW5hX2NhbGVuLCBbNF06cmdfcmV4dF9jYWxlbiwgWzBdOnJnX3pjYWxlbl9hICovCisrCS8qIDFlX2RjWzBdOnJnX3R4dm9zX2NhbGVuICovCisrCS8qIDFlX2UxWzRdOnJnX2NhbF9yZWZzZWwoMDoxLjJWKSAqLworKwkvL3RjX3BoeV93cml0ZV9kZXZfcmVnKHBoeWFkZHIsIDB4MWUsIDB4MDBkYiwgMHgxMTEwKQorKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIFBIWTAsIDB4MWUsIDB4MDBkYiwgMHgxMTEwKTsKKysJLy90Y19waHlfd3JpdGVfZGV2X3JlZyhwaHlhZGRyLCAweDFlLCAweDAwZGMsIDB4MDAwMCk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgUEhZMCwgMHgxZSwgMHgwMGRjLCAwKTsKKysJLy90Y19waHlfd3JpdGVfZGV2X3JlZyhwaHlhZGRyLCAweDFlLCAweDAwZTEsIDB4MDAwMCk7CisrCS8vdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBQSFkwLCAweDFlLCAweDAwZTEsIDB4MTApOworKwkKKysJcmdfemNhbF9jdHJsID0gMHgyMDsvKiBzdGFydCB3aXRoIDAgZEIgKi8KKysJZGV2MWVfZTBfYW5hX2NhbF9yNSA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCAgUEhZMCwgMHgxZSwgMHhlMCk7IC8vIGdldCBkZWZhdWx0IHZhbHVlCisrCS8qIDFlX2UwWzU6MF06cmdfemNhbF9jdHJsICovCisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgUEhZMCwgMHgxZSwgMHhlMCwgcmdfemNhbF9jdHJsKTsKKysJYWxsX2FuYV9jYWxfc3RhdHVzID0gYWxsX2dlX2FuYV9jYWxfd2FpdChnc3csIGRlbGF5LCBwaHlhZGRyKTsvKiBkZWxheSAyMCB1c2VjICovCisrCisrCWlmIChhbGxfYW5hX2NhbF9zdGF0dXMgPT0gMCkgeworKwkJYWxsX2FuYV9jYWxfc3RhdHVzID0gQU5BQ0FMX0VSUk9SOworKwkJcHJpbnRrKCIgR0UgUmV4dCBBbmFDYWwgRVJST1IgaW5pdCEgICBcclxuIik7CisrCQlyZXR1cm4gLTE7CisrCX0KKysJLyogMWVfMTdhWzhdOmFkX2NhbF9jb21wX291dCAqLworKwlhZF9jYWxfY29tcF9vdXRfaW5pdCA9ICh0Y19waHlfcmVhZF9kZXZfcmVnKGdzdywgIFBIWTAsIDB4MWUsIDB4MDE3YSkgPj4gOCkgJiAweDE7CisrCWlmIChhZF9jYWxfY29tcF9vdXRfaW5pdCA9PSAxKQorKwkJY2FsaWJyYXRpb25fcG9sYXJpdHkgPSAtMTsKKysJZWxzZSAvKiBhZF9jYWxfY29tcF9vdXRfaW5pdCA9PSAwICovCisrCQljYWxpYnJhdGlvbl9wb2xhcml0eSA9IDE7CisrCWNudCA9IDA7CisrCXdoaWxlIChhbGxfYW5hX2NhbF9zdGF0dXMgPCBBTkFDQUxfRVJST1IpIHsKKysJCWNudCsrOworKwkJcmdfemNhbF9jdHJsICs9IGNhbGlicmF0aW9uX3BvbGFyaXR5OworKwkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBQSFkwLCAweDFlLCAweGUwLCAocmdfemNhbF9jdHJsKSk7CisrCQlhbGxfYW5hX2NhbF9zdGF0dXMgPSBhbGxfZ2VfYW5hX2NhbF93YWl0KGdzdywgZGVsYXksIHBoeWFkZHIpOyAvKiBkZWxheSAyMCB1c2VjICovCisrCQlkZXYxZV8xN2FfdG1wID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csIFBIWTAsIDB4MWUsIDB4MDE3YSk7CisrCQlpZiAoYWxsX2FuYV9jYWxfc3RhdHVzID09IDApIHsKKysJCQlhbGxfYW5hX2NhbF9zdGF0dXMgPSBBTkFDQUxfRVJST1I7CisrCQkJcHJpbnRrKCIgIEdFIFJleHQgQW5hQ2FsIEVSUk9SIDIhICAgXHJcbiIpOworKwkJCXJldHVybiAtMTsKKysJCX0gZWxzZSBpZiAoKChkZXYxZV8xN2FfdG1wID4+IDgpICYgMHgxKSAhPSBhZF9jYWxfY29tcF9vdXRfaW5pdCkgeworKwkJCWFsbF9hbmFfY2FsX3N0YXR1cyA9IEFOQUNBTF9GSU5JU0g7CisrCQkJLy9wcmludGsoIiAgR0UgUmV4dCBBbmFDYWwgRG9uZSEgKCVkKSgweCV4KSAgXHJcbiIsIGNudCwgcmdfemNhbF9jdHJsKTsKKysJCX0gZWxzZSB7CisrCQkJZGV2MWVfMTdhX3RtcCA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCBQSFkwLCAweDFlLCAweDAxN2EpOworKwkJCWRldjFlX2UwX3RtcCA9CXRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCBQSFkwLCAweDFlLCAweGUwKTsKKysJCQlpZiAoKHJnX3pjYWxfY3RybCA9PSAweDNGKSB8fCAocmdfemNhbF9jdHJsID09IDB4MDApKSB7CisrCQkJCWFsbF9hbmFfY2FsX3N0YXR1cyA9IEFOQUNBTF9TQVRVUkFUSU9OOyAgLyogbmVlZCB0byBGVChJQyBmYWlsPykgKi8KKysJCQkJcHJpbnRrKCIgR0UgUmV4dCBBbmFDYWwgU2F0dXJhdGlvbiEgIFxyXG4iKTsKKysJCQkJcmdfemNhbF9jdHJsID0gMHgyMDsgIC8qIDAgZEIgKi8KKysJCQl9IAorKwkJfQorKwl9CisrCisrCWlmIChhbGxfYW5hX2NhbF9zdGF0dXMgPT0gQU5BQ0FMX0VSUk9SKSB7CisrCQlyZ196Y2FsX2N0cmwgPSAweDIwOyAgLyogMCBkQiAqLworKwkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBQSFkwLCAweDFlLCAweDAwZTAsIChkZXYxZV9lMF9hbmFfY2FsX3I1IHwgcmdfemNhbF9jdHJsKSk7CisrCX0gZWxzZSBpZihhbGxfYW5hX2NhbF9zdGF0dXMgPT0gQU5BQ0FMX0ZJTklTSCl7CisrCQkvL3RjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgUEhZMCwgMHgxZSwgMHgwMGUwLCAoZGV2MWVfZTBfYW5hX2NhbF9yNSB8IHJnX3pjYWxfY3RybCkpOworKwkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBQSFkwLCAweDFlLCAweDAwZTAsICgocmdfemNhbF9jdHJsIDw8IDgpIHwgcmdfemNhbF9jdHJsKSk7CisrCQlwcmludGsoIjB4MWUtZTAgPSAleFxuIiwgdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBQSFkwLCAweDFlLCAweDAwZTApKTsKKysJCS8qICoqKiogIDFmXzExNVsyOjBdID0gcmdfemNhbF9jdHJsWzU6M10gIC8vIE1vZyByZXZpZXcgKi8KKysJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgUEhZMCwgMHgxZiwgMHgwMTE1LCAoKHJnX3pjYWxfY3RybCAmIDB4M2YpID4+IDMpKTsKKysJCXByaW50aygiMHgxZi0xMTUgPSAleFxuIiwgdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBQSFkwLCAweDFmLCAweDExNSkpOworKwkJcHJpbnRrKCIgIEdFIFJleHQgQW5hQ2FsIERvbmUhICglZCkoMHgleCkgIFxyXG4iLCBjbnQsIHJnX3pjYWxfY3RybCk7CisrCQlnZV9jYWxfZmxhZyA9IDE7CisrCX0gZWxzZSB7CisrCQlwcmludGsoIkdFIFJ4ZXQgY2FsIHNvbWV0aGluZyB3cm9uZzJcbiIpOworKwl9CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgUEhZMCwgMHgxZSwgMHgwMGRiLCAweDAwMDApOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4MDBkYiwgMHgwMDAwKTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBQSFkwLCAweDFlLCAweDAwZGMsIDB4MDAwMCk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgwMGRjLCAweDAwMDApOworKworKwlyZXR1cm4gMDsKKyt9CisrCisrLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorK2ludCBnZV9jYWxfcjUwKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3csIHU4IHBoeWFkZHIsIHUzMiBkZWxheSkKKyt7CisrCXU4IHJnX3pjYWxfY3RybCwgYWxsX2FuYV9jYWxfc3RhdHVzLCBjYWxpYnJhdGlvbl9wYWlyOworKwl1MTYgYWRfY2FsX2NvbXBfb3V0X2luaXQ7CisrCXUxNiBkZXYxZV9lMF9hbmFfY2FsX3I1OworKwlpbnQgY2FsaWJyYXRpb25fcG9sYXJpdHk7CisrCXU4IGNudCA9IDA7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgUEhZMCwgMHgxZSwgMHgwMGRiLCAweDExMDApOwkvLyAxZV9kYlsxMl06cmdfY2FsX2NraW52LCBbOF06cmdfYW5hX2NhbGVuLCBbNF06cmdfcmV4dF9jYWxlbiwgWzBdOnJnX3pjYWxlbl9hCisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgUEhZMCwgMHgxZSwgMHgwMGRjLCAweDAwMDApOwkvLyAxZV9kY1swXTpyZ190eHZvc19jYWxlbgorKworKwlmb3IoY2FsaWJyYXRpb25fcGFpciA9IEFOQUNBTF9QQUlSX0E7IGNhbGlicmF0aW9uX3BhaXIgPD0gQU5BQ0FMX1BBSVJfRDsgY2FsaWJyYXRpb25fcGFpciArKykgeworKwkJcmdfemNhbF9jdHJsID0gMHgyMDsgIAkJCQkJCS8vIHN0YXJ0IHdpdGggMCBkQgorKwkJZGV2MWVfZTBfYW5hX2NhbF9yNSA9ICh0Y19waHlfcmVhZF9kZXZfcmVnKGdzdywgIFBIWTAsIDB4MWUsIDB4MDBlMCkgJiAofjB4MDAzZikpOworKwkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBQSFkwLCAweDFlLCAweDAwZTAsIChkZXYxZV9lMF9hbmFfY2FsX3I1IHwgcmdfemNhbF9jdHJsKSk7CS8vIDFlX2UwWzU6MF06cmdfemNhbF9jdHJsCisrCQlpZihjYWxpYnJhdGlvbl9wYWlyID09IEFOQUNBTF9QQUlSX0EpCisrCQl7CisrCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDAwZGIsIDB4MTEwMSk7CS8vIDFlX2RiWzEyXTpyZ19jYWxfY2tpbnYsIFs4XTpyZ19hbmFfY2FsZW4sIFs0XTpyZ19yZXh0X2NhbGVuLCBbMF06cmdfemNhbGVuX2EKKysJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4MDBkYywgMHgwMDAwKTsJCisrCQkJLy9wcmludGsoIlI1MCBwYWlyIEEgMWVfZGI9JXggMWVfZGI9JXhcbiIsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCAgcGh5YWRkciwgMHgxZSwgMHgwMGRiKSwgdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBwaHlhZGRyLCAweDFlLCAweDAwZGMpKTsKKysKKysJCX0KKysJCWVsc2UgaWYoY2FsaWJyYXRpb25fcGFpciA9PSBBTkFDQUxfUEFJUl9CKQorKwkJeworKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgwMGRiLCAweDExMDApOwkvLyAxZV9kYlsxMl06cmdfY2FsX2NraW52LCBbOF06cmdfYW5hX2NhbGVuLCBbNF06cmdfcmV4dF9jYWxlbiwgWzBdOnJnX3pjYWxlbl9hCisrCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDAwZGMsIDB4MTAwMCk7CS8vIDFlX2RjWzEyXTpyZ196Y2FsZW5fYgorKwkJCS8vcHJpbnRrKCJSNTAgcGFpciBCIDFlX2RiPSV4IDFlX2RiPSV4XG4iLCB0Y19waHlfcmVhZF9kZXZfcmVnKGdzdywgIHBoeWFkZHIsIDB4MWUsIDB4MDBkYiksdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBwaHlhZGRyLCAweDFlLCAweDAwZGMpKTsKKysKKysJCX0KKysJCWVsc2UgaWYoY2FsaWJyYXRpb25fcGFpciA9PSBBTkFDQUxfUEFJUl9DKQorKwkJeworKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgwMGRiLCAweDExMDApOwkvLyAxZV9kYlsxMl06cmdfY2FsX2NraW52LCBbOF06cmdfYW5hX2NhbGVuLCBbNF06cmdfcmV4dF9jYWxlbiwgWzBdOnJnX3pjYWxlbl9hCisrCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDAwZGMsIDB4MDEwMCk7CS8vIDFlX2RjWzhdOnJnX3pjYWxlbl9jCisrCQkJLy9wcmludGsoIlI1MCBwYWlyIEMgMWVfZGI9JXggMWVfZGI9JXhcbiIsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCAgcGh5YWRkciwgMHgxZSwgMHgwMGRiKSwgdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBwaHlhZGRyLCAweDFlLCAweDAwZGMpKTsKKysKKysJCX0KKysJCWVsc2UgLy8gaWYoY2FsaWJyYXRpb25fcGFpciA9PSBBTkFDQUxfUEFJUl9EKQorKwkJeworKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgwMGRiLCAweDExMDApOwkvLyAxZV9kYlsxMl06cmdfY2FsX2NraW52LCBbOF06cmdfYW5hX2NhbGVuLCBbNF06cmdfcmV4dF9jYWxlbiwgWzBdOnJnX3pjYWxlbl9hCisrCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDAwZGMsIDB4MDAxMCk7CS8vIDFlX2RjWzRdOnJnX3pjYWxlbl9kCisrCQkJLy9wcmludGsoIlI1MCBwYWlyIEQgMWVfZGI9JXggMWVfZGI9JXhcbiIsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCAgcGh5YWRkciwgMHgxZSwgMHgwMGRiKSwgdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBwaHlhZGRyLCAweDFlLCAweDAwZGMpKTsKKysKKysJCX0KKysKKysJCWFsbF9hbmFfY2FsX3N0YXR1cyA9IGFsbF9nZV9hbmFfY2FsX3dhaXQoZ3N3LCBkZWxheSwgcGh5YWRkcik7IC8vIGRlbGF5IDIwIHVzZWMKKysJCWlmKGFsbF9hbmFfY2FsX3N0YXR1cyA9PSAwKQorKwkJeworKwkJCWFsbF9hbmFfY2FsX3N0YXR1cyA9IEFOQUNBTF9FUlJPUjsJCisrCQkJcHJpbnRrKCAiR0UgUjUwIEFuYUNhbCBFUlJPUiBpbml0ISAgIFxyXG4iKTsKKysJCQlyZXR1cm4gLTE7CisrCQl9CisrCQorKwkJYWRfY2FsX2NvbXBfb3V0X2luaXQgPSAodGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBQSFkwLCAweDFlLCAweDAxN2EpPj44KSAmIDB4MTsJCS8vIDFlXzE3YVs4XTphZF9jYWxfY29tcF9vdXQJCisrCQlpZihhZF9jYWxfY29tcF9vdXRfaW5pdCA9PSAxKQorKwkJCWNhbGlicmF0aW9uX3BvbGFyaXR5ID0gLTE7CisrCQllbHNlCisrCQkJY2FsaWJyYXRpb25fcG9sYXJpdHkgPSAxOworKworKwkJY250ID0gMDsKKysJCXdoaWxlKGFsbF9hbmFfY2FsX3N0YXR1cyA8IEFOQUNBTF9FUlJPUikKKysJCXsKKysJCQljbnQgKys7CisrCQkJcmdfemNhbF9jdHJsICs9IGNhbGlicmF0aW9uX3BvbGFyaXR5OworKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgUEhZMCwgMHgxZSwgMHgwMGUwLCAoZGV2MWVfZTBfYW5hX2NhbF9yNSB8IHJnX3pjYWxfY3RybCkpOworKwkJCWFsbF9hbmFfY2FsX3N0YXR1cyA9IGFsbF9nZV9hbmFfY2FsX3dhaXQoZ3N3LCBkZWxheSwgcGh5YWRkcik7IC8vIGRlbGF5IDIwIHVzZWMKKysKKysJCQlpZihhbGxfYW5hX2NhbF9zdGF0dXMgPT0gMCkKKysJCQl7CisrCQkJCWFsbF9hbmFfY2FsX3N0YXR1cyA9IEFOQUNBTF9FUlJPUjsJCisrCQkJCXByaW50ayggIiAgR0UgUjUwIEFuYUNhbCBFUlJPUiAyISAgIFxyXG4iKTsKKysJCQkJcmV0dXJuIC0xOworKwkJCX0KKysJCQllbHNlIGlmKCgodGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBQSFkwLCAweDFlLCAweDAxN2EpPj44KSYweDEpICE9IGFkX2NhbF9jb21wX291dF9pbml0KSAKKysJCQl7CisrCQkJCWFsbF9hbmFfY2FsX3N0YXR1cyA9IEFOQUNBTF9GSU5JU0g7CQorKwkJCX0KKysJCQllbHNlIHsKKysJCQkJaWYoKHJnX3pjYWxfY3RybCA9PSAweDNGKXx8KHJnX3pjYWxfY3RybCA9PSAweDAwKSkJCisrCQkJCXsKKysJCQkJCWFsbF9hbmFfY2FsX3N0YXR1cyA9IEFOQUNBTF9TQVRVUkFUSU9OOyAgLy8gbmVlZCB0byBGVAorKwkJCQkJcHJpbnRrKCAiIEdFIFI1MCBBbmFDYWwgU2F0dXJhdGlvbiEgIFxyXG4iKTsKKysJCQkJfQorKwkJCX0KKysJCX0KKysJCQorKwkJaWYoYWxsX2FuYV9jYWxfc3RhdHVzID09IEFOQUNBTF9FUlJPUikgewkKKysJCQlyZ196Y2FsX2N0cmwgPSAweDIwOyAgLy8gMCBkQgorKwkJCS8vdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDAwZTAsIChkZXYxZV9lMF9hbmFfY2FsX3I1IHwgcmdfemNhbF9jdHJsKSk7CisrCQl9CisrCQllbHNlIHsKKysJCQlyZ196Y2FsX2N0cmwgPSBNVDc1M3hfWkNBTF9UT19SNTBvaG1fR0VfVEJMXzEwMFtyZ196Y2FsX2N0cmwgLSA5XTsJLy8gd2FpdCBNb2cgemNhbC9yNTAgbWFwcGluZyB0YWJsZQorKwkJCXByaW50ayggIiBHRSBSNTAgQW5hQ2FsIERvbmUhICglZCkgKDB4JXgpKDB4JXgpIFxyXG4iLCBjbnQsIHJnX3pjYWxfY3RybCwgKHJnX3pjYWxfY3RybHwweDgwKSk7CisrCQl9CisrCQkKKysJCWlmKGNhbGlicmF0aW9uX3BhaXIgPT0gQU5BQ0FMX1BBSVJfQSkgeworKwkJCWFkX2NhbF9jb21wX291dF9pbml0ID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBwaHlhZGRyLCAweDFlLCAweDAxNzQpICYgKH4weDdmMDApOworKwkJCS8vYWRfY2FsX2NvbXBfb3V0X2luaXQgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGdzdywgIHBoeWFkZHIsIDB4MWUsIDB4MDE3NCk7CisrCQkJLy9wcmludGsoICIgR0UtYSAxZV8xNzQoMHgleCkoMHgleCksIDFlXzE3NSgweCV4KSAgXHJcbiIsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCAgcGh5YWRkciwgMHgxZSwgMHgwMTc0KSwgYWRfY2FsX2NvbXBfb3V0X2luaXQsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCAgcGh5YWRkciwgMHgxZSwgMHgwMTc1KSk7CisrCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDAxNzQsIChhZF9jYWxfY29tcF9vdXRfaW5pdCB8ICgoKHJnX3pjYWxfY3RybDw8OCkmMHhmZjAwKSB8IDB4ODAwMCkpKTsJLy8gMWVfMTc0WzE1OjhdCisrCQkJLy9wcmludGsoICIgR0UtYSAxZV8xNzQoMHgleCksIDFlXzE3NSgweCV4KSAgXHJcbiIsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCAgcGh5YWRkciwgMHgxZSwgMHgwMTc0KSwgdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBwaHlhZGRyLCAweDFlLCAweDAxNzUpKTsKKysJCX0KKysJCWVsc2UgaWYoY2FsaWJyYXRpb25fcGFpciA9PSBBTkFDQUxfUEFJUl9CKSB7CisrCQkJYWRfY2FsX2NvbXBfb3V0X2luaXQgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGdzdywgIHBoeWFkZHIsIDB4MWUsIDB4MDE3NCkgJiAofjB4MDA3Zik7CisrCQkJLy9hZF9jYWxfY29tcF9vdXRfaW5pdCA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCAgcGh5YWRkciwgMHgxZSwgMHgwMTc0KTsKKysJCQkvL3ByaW50ayggIiBHRS1iIDFlXzE3NCgweCV4KSgweCV4KSwgMWVfMTc1KDB4JXgpICBcclxuIiwgdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBwaHlhZGRyLCAweDFlLCAweDAxNzQpLCBhZF9jYWxfY29tcF9vdXRfaW5pdCwgdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBwaHlhZGRyLCAweDFlLCAweDAxNzUpKTsKKysJCQkKKysJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4MDE3NCwgKGFkX2NhbF9jb21wX291dF9pbml0IHwgKCgocmdfemNhbF9jdHJsPDwwKSYweDAwZmYpIHwgMHgwMDgwKSkpOwkvLyAxZV8xNzRbNzowXQorKwkJCS8vcHJpbnRrKCAiIEdFLWIgMWVfMTc0KDB4JXgpLCAxZV8xNzUoMHgleCkgIFxyXG4iLCB0Y19waHlfcmVhZF9kZXZfcmVnKGdzdywgIHBoeWFkZHIsIDB4MWUsIDB4MDE3NCksIHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCAgcGh5YWRkciwgMHgxZSwgMHgwMTc1KSk7CisrCQl9CisrCQllbHNlIGlmKGNhbGlicmF0aW9uX3BhaXIgPT0gQU5BQ0FMX1BBSVJfQykgeworKwkJCWFkX2NhbF9jb21wX291dF9pbml0ID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBwaHlhZGRyLCAweDFlLCAweDAxNzUpICYgKH4weDdmMDApOworKwkJCS8vYWRfY2FsX2NvbXBfb3V0X2luaXQgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGdzdywgIHBoeWFkZHIsIDB4MWUsIDB4MDE3NSk7CisrCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDAxNzUsIChhZF9jYWxfY29tcF9vdXRfaW5pdCB8ICgoKHJnX3pjYWxfY3RybDw8OCkmMHhmZjAwKSB8IDB4ODAwMCkpKTsJLy8gMWVfMTc1WzE1OjhdCisrCQkJLy9wcmludGsoICIgR0UtYyAxZV8xNzQoMHgleCksIDFlXzE3NSgweCV4KSAgXHJcbiIsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCAgcGh5YWRkciwgMHgxZSwgMHgwMTc0KSwgdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBwaHlhZGRyLCAweDFlLCAweDAxNzUpKTsKKysJCX0gZWxzZSB7Ly8gaWYoY2FsaWJyYXRpb25fcGFpciA9PSBBTkFDQUxfUEFJUl9EKSAKKysJCQlhZF9jYWxfY29tcF9vdXRfaW5pdCA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCAgcGh5YWRkciwgMHgxZSwgMHgwMTc1KSAmICh+MHgwMDdmKTsKKysJCQkvL2FkX2NhbF9jb21wX291dF9pbml0ID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBwaHlhZGRyLCAweDFlLCAweDAxNzUpOworKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgwMTc1LCAoYWRfY2FsX2NvbXBfb3V0X2luaXQgfCAoKChyZ196Y2FsX2N0cmw8PDApJjB4MDBmZikgfCAweDAwODApKSk7CS8vIDFlXzE3NVs3OjBdCisrCQkJLy9wcmludGsoICIgR0UtZCAxZV8xNzQoMHgleCksIDFlXzE3NSgweCV4KSAgXHJcbiIsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCAgcGh5YWRkciwgMHgxZSwgMHgwMTc0KSwgdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBwaHlhZGRyLCAweDFlLCAweDAxNzUpKTsKKysJCX0KKysJCS8vdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDAwZTAsICgocmdfemNhbF9jdHJsPDw4KXxyZ196Y2FsX2N0cmwpKTsKKysJfQorKwkKKysJcHJpbnRrKCAiIEdFIDFlXzE3NCgweCV4KSwgMWVfMTc1KDB4JXgpICBcclxuIiwgdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBwaHlhZGRyLCAweDFlLCAweDAxNzQpLCB0Y19waHlfcmVhZF9kZXZfcmVnKGdzdywgIHBoeWFkZHIsIDB4MWUsIDB4MDE3NSkpOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIFBIWTAsIDB4MWUsIDB4MDBkYiwgMHgwMDAwKTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDAwZGIsIDB4MDAwMCk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgUEhZMCwgMHgxZSwgMHgwMGRjLCAweDAwMDApOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4MDBkYywgMHgwMDAwKTsKKysKKysJcmV0dXJuIDA7CisrfQorKworK2ludCBnZV9jYWxfdHhfb2Zmc2V0KHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3csICB1OCBwaHlhZGRyLCB1MzIgZGVsYXkpCisreworKwl1OCBhbGxfYW5hX2NhbF9zdGF0dXMsIGNhbGlicmF0aW9uX3BhaXI7CisrCXUxNiBhZF9jYWxfY29tcF9vdXRfaW5pdDsKKysJaW50IGNhbGlicmF0aW9uX3BvbGFyaXR5LCB0eF9vZmZzZXRfdGVtcDsKKysJdTggdHhfb2Zmc2V0X3JlZ19zaGlmdCwgdGFibF9pZHgsIGk7CisrCXU4IGNudCA9IDA7CisrCXUxNiB0eF9vZmZzZXRfcmVnLCByZWdfdGVtcCwgY2FsX3RlbXA7CisrCS8vc3dpdGNoX3BoeV93cml0ZShwaHlhZGRyLCBSMCwgMHgyMTAwKTsvL2hhcnJ5IHRtcAorKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIFBIWTAsIDB4MWUsIDB4MDBkYiwgMHgwMTAwKTsJLy8gMWVfZGJbMTJdOnJnX2NhbF9ja2ludiwgWzhdOnJnX2FuYV9jYWxlbiwgWzRdOnJnX3JleHRfY2FsZW4sIFswXTpyZ196Y2FsZW5fYQorKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIFBIWTAsIDB4MWUsIDB4MDBkYywgMHgwMDAxKTsJLy8gMWVfZGNbMF06cmdfdHh2b3NfY2FsZW4KKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDAwOTYsIDB4ODAwMCk7CS8vIDFlXzk2WzE1XTpieXBhc3NfdHhfb2Zmc2V0X2NhbCwgSHcgYnlwYXNzLCBGdyBjYWwKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDAwM2UsIDB4ZjgwOCk7CS8vIDFlXzNlCisrCWZvcihpID0gMDsgaSA8PSA0OyBpKyspCisrCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIGksIDB4MWUsIDB4MDBkZCwgMHgwMDAwKTsJCisrCWZvcihjYWxpYnJhdGlvbl9wYWlyID0gQU5BQ0FMX1BBSVJfQTsgY2FsaWJyYXRpb25fcGFpciA8PSBBTkFDQUxfUEFJUl9EOyBjYWxpYnJhdGlvbl9wYWlyICsrKQorKwl7CisrCQl0YWJsX2lkeCA9IDMxOworKwkJdHhfb2Zmc2V0X3RlbXAgPSBNVDc1M3hfVFhfT0ZGU0VUX1RCTFt0YWJsX2lkeF07CisrCisrCQlpZihjYWxpYnJhdGlvbl9wYWlyID09IEFOQUNBTF9QQUlSX0EpIHsKKysJCQkvL3RjX3BoeV93cml0ZV9kZXZfcmVnKHBoeWFkZHIsIDB4MWUsIDB4MTQ1LCAweDUwMTApOworKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgwMGRkLCAweDEwMDApOwkJCQkvLyAxZV9kZFsxMl06cmdfdHhnX2NhbGVuX2EKKysJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4MDE3ZCwgKDB4ODAwMHxEQUNfSU5fMFYpKTsJLy8gMWVfMTdkOmRhY19pbjBfYQorKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgwMTgxLCAoMHg4MDAwfERBQ19JTl8wVikpOwkvLyAxZV8xODE6ZGFjX2luMV9hCisrCQkJLy9wcmludGsoInR4IG9mZnNldCBwYWlyQSAxZV9kZCA9ICV4LCAxZV8xN2Q9JXgsIDFlXzE4MT0leFxuIiwgdGNfcGh5X3JlYWRfZGV2X3JlZyhwaHlhZGRyLCAweDFlLCAweDAwZGQpLCB0Y19waHlfcmVhZF9kZXZfcmVnKHBoeWFkZHIsIDB4MWUsIDB4MDE3ZCksIHRjX3BoeV9yZWFkX2Rldl9yZWcocGh5YWRkciwgMHgxZSwgMHgwMTgxKSk7CisrCQkJcmVnX3RlbXAgPSAodGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4MDE3MikgJiAofjB4M2YwMCkpOworKwkJCXR4X29mZnNldF9yZWdfc2hpZnQgPSA4OwkJCQkJCQkJCS8vIDFlXzE3MlsxMzo4XQorKwkJCXR4X29mZnNldF9yZWcgPSAweDAxNzI7CisrCisrCQkJLy90Y19waHlfd3JpdGVfZGV2X3JlZyhwaHlhZGRyLCAweDFlLCB0eF9vZmZzZXRfcmVnLCAocmVnX3RlbXB8KHR4X29mZnNldF90ZW1wPDx0eF9vZmZzZXRfcmVnX3NoaWZ0KSkpOworKwkJfSBlbHNlIGlmKGNhbGlicmF0aW9uX3BhaXIgPT0gQU5BQ0FMX1BBSVJfQikgeworKwkJCS8vdGNfcGh5X3dyaXRlX2Rldl9yZWcocGh5YWRkciwgMHgxZSwgMHgxNDUsIDB4NTAxOCk7CisrCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDAwZGQsIDB4MDEwMCk7CQkJCS8vIDFlX2RkWzhdOnJnX3R4Z19jYWxlbl9iCisrCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDAxN2UsICgweDgwMDB8REFDX0lOXzBWKSk7CS8vIDFlXzE3ZTpkYWNfaW4wX2IKKysJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4MDE4MiwgKDB4ODAwMHxEQUNfSU5fMFYpKTsJLy8gMWVfMTgyOmRhY19pbjFfYgorKwkJCS8vcHJpbnRrKCJ0eCBvZmZzZXQgcGFpckIgMWVfZGQgPSAleCwgMWVfMTdkPSV4LCAxZV8xODE9JXhcbiIsIHRjX3BoeV9yZWFkX2Rldl9yZWcocGh5YWRkciwgMHgxZSwgMHgwMGRkKSwgdGNfcGh5X3JlYWRfZGV2X3JlZyhwaHlhZGRyLCAweDFlLCAweDAxN2QpLCB0Y19waHlfcmVhZF9kZXZfcmVnKHBoeWFkZHIsIDB4MWUsIDB4MDE4MSkpOworKwkJCXJlZ190ZW1wID0gKHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDAxNzIpICYgKH4weDAwM2YpKTsKKysJCQl0eF9vZmZzZXRfcmVnX3NoaWZ0ID0gMDsJCQkJCQkJCQkvLyAxZV8xNzJbNTowXQorKwkJCXR4X29mZnNldF9yZWcgPSAweDAxNzI7CisrCQkJLy90Y19waHlfd3JpdGVfZGV2X3JlZyhwaHlhZGRyLCAweDFlLCB0eF9vZmZzZXRfcmVnLCAocmVnX3RlbXB8KHR4X29mZnNldF90ZW1wPDx0eF9vZmZzZXRfcmVnX3NoaWZ0KSkpOworKwkJfSBlbHNlIGlmKGNhbGlicmF0aW9uX3BhaXIgPT0gQU5BQ0FMX1BBSVJfQykgeworKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgwMGRkLCAweDAwMTApOwkJCQkvLyAxZV9kZFs0XTpyZ190eGdfY2FsZW5fYworKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgwMTdmLCAoMHg4MDAwfERBQ19JTl8wVikpOwkvLyAxZV8xN2Y6ZGFjX2luMF9jCisrCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDAxODMsICgweDgwMDB8REFDX0lOXzBWKSk7CS8vIDFlXzE4MzpkYWNfaW4xX2MKKysJCQlyZWdfdGVtcCA9ICh0Y19waHlfcmVhZF9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgwMTczKSAmICh+MHgzZjAwKSk7CisrCQkJLy9wcmludGsoInR4IG9mZnNldCBwYWlyQyAxZV9kZCA9ICV4LCAxZV8xN2Q9JXgsIDFlXzE4MT0leFxuIiwgdGNfcGh5X3JlYWRfZGV2X3JlZyhwaHlhZGRyLCAweDFlLCAweDAwZGQpLCB0Y19waHlfcmVhZF9kZXZfcmVnKHBoeWFkZHIsIDB4MWUsIDB4MDE3ZCksIHRjX3BoeV9yZWFkX2Rldl9yZWcocGh5YWRkciwgMHgxZSwgMHgwMTgxKSk7CisrCQkJdHhfb2Zmc2V0X3JlZ19zaGlmdCA9IDg7CQkJCQkJCQkJLy8gMWVfMTczWzEzOjhdCisrCQkJdHhfb2Zmc2V0X3JlZyA9IDB4MDE3MzsKKysJCQkvL3RjX3BoeV93cml0ZV9kZXZfcmVnKHBoeWFkZHIsIDB4MWUsIHR4X29mZnNldF9yZWcsIChyZWdfdGVtcHwodHhfb2Zmc2V0X3RlbXA8PHR4X29mZnNldF9yZWdfc2hpZnQpKSk7CisrCQl9IGVsc2Ugey8vIGlmKGNhbGlicmF0aW9uX3BhaXIgPT0gQU5BQ0FMX1BBSVJfRCkKKysJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4MDBkZCwgMHgwMDAxKTsJCQkJLy8gMWVfZGRbMF06cmdfdHhnX2NhbGVuX2QKKysJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4MDE4MCwgKDB4ODAwMHxEQUNfSU5fMFYpKTsJLy8gMWVfMTgwOmRhY19pbjBfZAorKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgwMTg0LCAoMHg4MDAwfERBQ19JTl8wVikpOwkvLyAxZV8xODQ6ZGFjX2luMV9kCisrCQkJLy9wcmludGsoInR4IG9mZnNldCBwYWlyRCAxZV9kZCA9ICV4LCAxZV8xN2Q9JXgsIDFlXzE4MT0leFxuIiwgdGNfcGh5X3JlYWRfZGV2X3JlZyhwaHlhZGRyLCAweDFlLCAweDAwZGQpLCB0Y19waHlfcmVhZF9kZXZfcmVnKHBoeWFkZHIsIDB4MWUsIDB4MDE3ZCksIHRjX3BoeV9yZWFkX2Rldl9yZWcocGh5YWRkciwgMHgxZSwgMHgwMTgxKSk7CisrCQkJcmVnX3RlbXAgPSAodGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4MDE3MykgJiAofjB4MDAzZikpOworKwkJCXR4X29mZnNldF9yZWdfc2hpZnQgPSAwOwkJCQkJCQkJCS8vIDFlXzE3M1s1OjBdCisrCQkJdHhfb2Zmc2V0X3JlZyA9IDB4MDE3MzsKKysJCQkvL3RjX3BoeV93cml0ZV9kZXZfcmVnKHBoeWFkZHIsIDB4MWUsIHR4X29mZnNldF9yZWcsIChyZWdfdGVtcHwodHhfb2Zmc2V0X3RlbXA8PHR4X29mZnNldF9yZWdfc2hpZnQpKSk7CisrCQl9CisrCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIHR4X29mZnNldF9yZWcsIChyZWdfdGVtcHwodHhfb2Zmc2V0X3RlbXA8PHR4X29mZnNldF9yZWdfc2hpZnQpKSk7CS8vIDFlXzE3MiwgMWVfMTczCisrCQlhbGxfYW5hX2NhbF9zdGF0dXMgPSBhbGxfZ2VfYW5hX2NhbF93YWl0KGdzdywgZGVsYXksIHBoeWFkZHIpOyAvLyBkZWxheSAyMCB1c2VjCisrCQlpZihhbGxfYW5hX2NhbF9zdGF0dXMgPT0gMCkgeworKwkJCWFsbF9hbmFfY2FsX3N0YXR1cyA9IEFOQUNBTF9FUlJPUjsJCisrCQkJcHJpbnRrKCAiIEdFIFR4IG9mZnNldCBBbmFDYWwgRVJST1IgaW5pdCEgICBcclxuIik7CisrCQkJcmV0dXJuIC0xOworKwkJfQorKwkKKysJCWFkX2NhbF9jb21wX291dF9pbml0ID0gKHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCBQSFkwLCAweDFlLCAweDAxN2EpPj44KSAmIDB4MTsJCS8vIDFlXzE3YVs4XTphZF9jYWxfY29tcF9vdXQJCisrCQlpZihhZF9jYWxfY29tcF9vdXRfaW5pdCA9PSAxKQorKwkJCWNhbGlicmF0aW9uX3BvbGFyaXR5ID0gMTsKKysJCWVsc2UKKysJCQljYWxpYnJhdGlvbl9wb2xhcml0eSA9IC0xOworKworKwkJY250ID0gMDsKKysJCS8vcHJpbnRrKCJUWCBvZmZzZXQgY250ID0gJWQsIHRhYmxfaWR4PSAleCwgb2Zmc2V0X3ZhbCA9ICV4XG4iLCBjbnQsIHRhYmxfaWR4LCBNVDc1M3hfVFhfT0ZGU0VUX1RCTFt0YWJsX2lkeF0pOworKwkJd2hpbGUoYWxsX2FuYV9jYWxfc3RhdHVzIDwgQU5BQ0FMX0VSUk9SKSB7CisrCQkJCisrCQkJY250ICsrOworKwkJCXRhYmxfaWR4ICs9IGNhbGlicmF0aW9uX3BvbGFyaXR5OworKwkJCS8vdHhfb2Zmc2V0X3RlbXAgKz0gY2FsaWJyYXRpb25fcG9sYXJpdHk7CisrCQkJLy9jYWxfdGVtcCA9IHR4X29mZnNldF90ZW1wOworKwkJCWNhbF90ZW1wID0gTVQ3NTN4X1RYX09GRlNFVF9UQkxbdGFibF9pZHhdOworKwkJCS8vcHJpbnRrKCJUWCBvZmZzZXQgY250ID0gJWQsIHRhYmxfaWR4PSAleCwgb2Zmc2V0X3ZhbCA9ICV4XG4iLCBjbnQsIHRhYmxfaWR4LCBNVDc1M3hfVFhfT0ZGU0VUX1RCTFt0YWJsX2lkeF0pOworKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgdHhfb2Zmc2V0X3JlZywgKHJlZ190ZW1wfChjYWxfdGVtcDw8dHhfb2Zmc2V0X3JlZ19zaGlmdCkpKTsKKysKKysJCQlhbGxfYW5hX2NhbF9zdGF0dXMgPSBhbGxfZ2VfYW5hX2NhbF93YWl0KGdzdywgZGVsYXksIHBoeWFkZHIpOyAvLyBkZWxheSAyMCB1c2VjCisrCQkJaWYoYWxsX2FuYV9jYWxfc3RhdHVzID09IDApIHsKKysJCQkJYWxsX2FuYV9jYWxfc3RhdHVzID0gQU5BQ0FMX0VSUk9SOwkKKysJCQkJcHJpbnRrKCAiIEdFIFR4IG9mZnNldCBBbmFDYWwgRVJST1IgaW5pdCAyISAgIFxyXG4iKTsKKysJCQkJcmV0dXJuIC0xOworKwkJCX0gZWxzZSBpZigoKHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCBQSFkwLCAweDFlLCAweDAxN2EpPj44KSYweDEpICE9IGFkX2NhbF9jb21wX291dF9pbml0KSB7CisrCQkJCWFsbF9hbmFfY2FsX3N0YXR1cyA9IEFOQUNBTF9GSU5JU0g7CQorKwkJCX0gZWxzZSB7CisrCQkJCWlmKCh0YWJsX2lkeCA9PSAwKXx8KHRhYmxfaWR4ID09IDB4M2YpKSB7CisrCQkJCQlhbGxfYW5hX2NhbF9zdGF0dXMgPSBBTkFDQUxfU0FUVVJBVElPTjsgIC8vIG5lZWQgdG8gRlQKKysJCQkJCXByaW50ayggIiBHRSBUeCBvZmZzZXQgQW5hQ2FsIFNhdHVyYXRpb24hICBcclxuIik7CisrCQkJCX0KKysJCQl9CisrCQl9CisrCQkKKysJCWlmKGFsbF9hbmFfY2FsX3N0YXR1cyA9PSBBTkFDQUxfRVJST1IpIHsJCisrCQkJdHhfb2Zmc2V0X3RlbXAgPSBUWF9BTVBfT0ZGU0VUXzBNVjsKKysJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIHR4X29mZnNldF9yZWcsIChyZWdfdGVtcHwodHhfb2Zmc2V0X3RlbXA8PHR4X29mZnNldF9yZWdfc2hpZnQpKSk7CisrCQl9IGVsc2UgeworKwkJCXByaW50ayggIiBHRSBUeCBvZmZzZXQgQW5hQ2FsIERvbmUhIChwYWlyLSVkKSglZCkoMHgleCkgMHgxZV8leD0weCV4XG4iLCBjYWxpYnJhdGlvbl9wYWlyLCBjbnQsIE1UNzUzeF9UWF9PRkZTRVRfVEJMW3RhYmxfaWR4XSwgdHhfb2Zmc2V0X3JlZywgdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIHR4X29mZnNldF9yZWcpKTsKKysJCX0KKysJfQorKworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4MDE3ZCwgMHgwMDAwKTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDAxN2UsIDB4MDAwMCk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgwMTdmLCAweDAwMDApOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4MDE4MCwgMHgwMDAwKTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDAxODEsIDB4MDAwMCk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgwMTgyLCAweDAwMDApOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4MDE4MywgMHgwMDAwKTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDAxODQsIDB4MDAwMCk7CisrCQorKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIFBIWTAsIDB4MWUsIDB4MDBkYiwgMHgwMDAwKTsJLy8gZGlzYWJsZSBhbmFsb2cgY2FsaWJyYXRpb24gY2lyY3VpdAorKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIFBIWTAsIDB4MWUsIDB4MDBkYywgMHgwMDAwKTsJLy8gZGlzYWJsZSBUeCBvZmZzZXQgY2FsaWJyYXRpb24gY2lyY3VpdAorKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4MDBkYiwgMHgwMDAwKTsJLy8gZGlzYWJsZSBhbmFsb2cgY2FsaWJyYXRpb24gY2lyY3VpdAorKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4MDBkYywgMHgwMDAwKTsJLy8gZGlzYWJsZSBUeCBvZmZzZXQgY2FsaWJyYXRpb24gY2lyY3VpdAorKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4MDAzZSwgMHgwMDAwKTsJLy8gZGlzYWJsZSBUeCBWTEQgZm9yY2UgbW9kZQorKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4MDBkZCwgMHgwMDAwKTsJLy8gZGlzYWJsZSBUeCBvZmZzZXQvYW1wbGl0dWRlIGNhbGlicmF0aW9uIGNpcmN1aXQJCisrCisrCXJldHVybiAwOworK30KKysKKytpbnQgZ2VfY2FsX3R4X2FtcChzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3LCB1OCBwaHlhZGRyLCB1MzIgZGVsYXkpCisreworKwl1OAlhbGxfYW5hX2NhbF9zdGF0dXMsIGNhbGlicmF0aW9uX3BhaXIsIGk7CisrCXUxNglhZF9jYWxfY29tcF9vdXRfaW5pdDsKKysJaW50CWNhbGlicmF0aW9uX3BvbGFyaXR5OworKwl1MzIJdHhfYW1wX3JlZ19zaGlmdDsgCisrCXUxNglyZWdfdGVtcDsKKysJdTMyCXR4X2FtcF90ZW1wLCB0eF9hbXBfcmVnLCBjbnQ9MCwgdHhfYW1wX3JlZ18xMDA7CisrCXUzMglkZWJ1Z190bXAsIHJlZ19iYWNrdXAsIHJlZ190bXA7IAorKwl1MzIJb3JpZ18xZV8xMSwgb3JpZ18xZl8zMDA7CisrCisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgUEhZMCwgMHgxZSwgMHgwMGRiLCAweDExMDApOwkvLyAxZV9kYlsxMl06cmdfY2FsX2NraW52LCBbOF06cmdfYW5hX2NhbGVuLCBbNF06cmdfcmV4dF9jYWxlbiwgWzBdOnJnX3pjYWxlbl9hCisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgUEhZMCwgMHgxZSwgMHgwMGRjLCAweDAwMDEpOwkvLyAxZV9kY1swXTpyZ190eHZvc19jYWxlbgorKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIFBIWTAsIDB4MWUsIDB4MDBlMSwgMHgwMDEwKTsJLy8gMWVfZTFbNF06c2VsZWN0IDFWCisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgwMDNlLCAweGY4MDgpOwkvLyAxZV8zZTplbmFibGUgVHggVkxECisrCisrCW9yaWdfMWVfMTEgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgxMSk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgxMSwgMHhmZjAwKTsKKysvLwl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWYsIDB4MjdhLCAweDMzKTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweGM5LCAweGZmZmYpOworKwlvcmlnXzFmXzMwMCA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFmLCAweDMwMCk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZiwgMHgzMDAsIDB4NCk7CisrCWZvcihpID0gMDsgaSA8PSA0OyBpKyspCisrCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIGksIDB4MWUsIDB4MDBkZCwgMHgwMDAwKTsKKysJZm9yKGNhbGlicmF0aW9uX3BhaXIgPSBBTkFDQUxfUEFJUl9BOyBjYWxpYnJhdGlvbl9wYWlyIDw9IEFOQUNBTF9QQUlSX0Q7IGNhbGlicmF0aW9uX3BhaXIgKyspIHsKKysJCXR4X2FtcF90ZW1wID0gMHgyMDsJLy8gc3RhcnQgd2l0aCAwIGRCCisrCisrCQlpZihjYWxpYnJhdGlvbl9wYWlyID09IEFOQUNBTF9QQUlSX0EpIHsKKysJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4MDBkZCwgMHgxMDAwKTsJCQkJLy8gMWVfZGRbMTJdOnR4X2EgYW1wIGNhbGlicmF0aW9uIGVuYWJsZQorKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgwMTdkLCAoMHg4MDAwfERBQ19JTl8yVikpOwkvLyAxZV8xN2Q6ZGFjX2luMF9hCQorKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgwMTgxLCAoMHg4MDAwfERBQ19JTl8yVikpOwkvLyAxZV8xODE6ZGFjX2luMV9hCisrCQkJcmVnX3RlbXAgPSAodGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBwaHlhZGRyLCAweDFlLCAweDAxMikgJiAofjB4ZmMwMCkpOworKwkJCXR4X2FtcF9yZWdfc2hpZnQgPSAxMDsJCQkJCQkJCQkJLy8gMWVfMTJbMTU6MTBdCisrCQkJdHhfYW1wX3JlZyA9IDB4MTI7CisrCQkJdHhfYW1wX3JlZ18xMDAgPSAweDE2OworKwkJfSBlbHNlIGlmKGNhbGlicmF0aW9uX3BhaXIgPT0gQU5BQ0FMX1BBSVJfQikgeworKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgwMGRkLCAweDAxMDApOwkJCQkvLyAxZV9kZFs4XTp0eF9iIGFtcCBjYWxpYnJhdGlvbiBlbmFibGUKKysJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4MDE3ZSwgKDB4ODAwMHxEQUNfSU5fMlYpKTsJLy8gMWVfMTdlOmRhY19pbjBfYgorKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgwMTgyLCAoMHg4MDAwfERBQ19JTl8yVikpOwkvLyAxZV8xODI6ZGFjX2luMV9iCisrCQkJcmVnX3RlbXAgPSAodGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBwaHlhZGRyLCAweDFlLCAweDAxNykgJiAofjB4M2YwMCkpOworKwkJCXR4X2FtcF9yZWdfc2hpZnQgPSA4OwkJCQkJCQkJCQkvLyAxZV8xN1sxMzo4XQorKwkJCXR4X2FtcF9yZWcgPSAweDE3OworKwkJCXR4X2FtcF9yZWdfMTAwID0gMHgxODsKKysJCX0gZWxzZSBpZihjYWxpYnJhdGlvbl9wYWlyID09IEFOQUNBTF9QQUlSX0MpIHsKKysJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4MDBkZCwgMHgwMDEwKTsJCQkJLy8gMWVfZGRbNF06dHhfYyBhbXAgY2FsaWJyYXRpb24gZW5hYmxlCisrCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDAxN2YsICgweDgwMDB8REFDX0lOXzJWKSk7CS8vIDFlXzE3ZjpkYWNfaW4wX2MKKysJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4MDE4MywgKDB4ODAwMHxEQUNfSU5fMlYpKTsJLy8gMWVfMTgzOmRhY19pbjFfYworKwkJCXJlZ190ZW1wID0gKHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCAgcGh5YWRkciwgMHgxZSwgMHgwMTkpICYgKH4weDNmMDApKTsKKysJCQl0eF9hbXBfcmVnX3NoaWZ0ID0gODsJCQkJCQkJCQkJLy8gMWVfMTlbMTM6OF0KKysJCQl0eF9hbXBfcmVnID0gMHgxOTsKKysJCQl0eF9hbXBfcmVnXzEwMCA9IDB4MjA7CisrCQl9IGVsc2UgeyAvL2lmKGNhbGlicmF0aW9uX3BhaXIgPT0gQU5BQ0FMX1BBSVJfRCkKKysJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4MDBkZCwgMHgwMDAxKTsJCQkJLy8gMWVfZGRbMF06dHhfZCBhbXAgY2FsaWJyYXRpb24gZW5hYmxlCisrCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDAxODAsICgweDgwMDB8REFDX0lOXzJWKSk7CS8vIDFlXzE4MDpkYWNfaW4wX2QKKysJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4MDE4NCwgKDB4ODAwMHxEQUNfSU5fMlYpKTsJLy8gMWVfMTg0OmRhY19pbjFfZAorKwkJCXJlZ190ZW1wID0gKHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCAgcGh5YWRkciwgMHgxZSwgMHgwMjEpICYgKH4weDNmMDApKTsKKysJCQl0eF9hbXBfcmVnX3NoaWZ0ID0gODsJCQkJCQkJCQkJLy8gMWVfMjFbMTM6OF0KKysJCQl0eF9hbXBfcmVnID0gMHgyMTsKKysJCQl0eF9hbXBfcmVnXzEwMCA9IDB4MjI7CisrCQl9CisrCQl0Y19waHlfd3JpdGVfZGV2X3JlZyggZ3N3LCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnLCAodHhfYW1wX3RlbXB8KHR4X2FtcF90ZW1wPDx0eF9hbXBfcmVnX3NoaWZ0KSkpOwkvLyAxZV8xMiwgMWVfMTcsIDFlXzE5LCAxZV8yMQorKwkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnXzEwMCwgKHR4X2FtcF90ZW1wfCh0eF9hbXBfdGVtcDw8dHhfYW1wX3JlZ19zaGlmdCkpKTsKKysJCWFsbF9hbmFfY2FsX3N0YXR1cyA9IGFsbF9nZV9hbmFfY2FsX3dhaXQoZ3N3LCBkZWxheSwgcGh5YWRkcik7IAkvLyBkZWxheSAyMCB1c2VjCisrCQlpZihhbGxfYW5hX2NhbF9zdGF0dXMgPT0gMCkgeworKwkJCWFsbF9hbmFfY2FsX3N0YXR1cyA9IEFOQUNBTF9FUlJPUjsJCisrCQkJcHJpbnRrKCAiIEdFIFR4IGFtcCBBbmFDYWwgRVJST1IgaW5pdCBpbml0ISAgIFxyXG4iKTsKKysJCQlyZXR1cm4gLTE7CisrCQl9CisrCQorKwkJYWRfY2FsX2NvbXBfb3V0X2luaXQgPSAodGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBQSFkwLCAweDFlLCAweDAxN2EpPj44KSAmIDB4MTsJCS8vIDFlXzE3YVs4XTphZF9jYWxfY29tcF9vdXQKKysJCWlmKGFkX2NhbF9jb21wX291dF9pbml0ID09IDEpCisrCQkJY2FsaWJyYXRpb25fcG9sYXJpdHkgPSAtMTsKKysJCWVsc2UKKysJCQljYWxpYnJhdGlvbl9wb2xhcml0eSA9IDE7CisrCisrCQljbnQgPTA7CisrCQl3aGlsZShhbGxfYW5hX2NhbF9zdGF0dXMgPCBBTkFDQUxfRVJST1IpIHsKKysJCQljbnQgKys7CisrCQkJdHhfYW1wX3RlbXAgKz0gY2FsaWJyYXRpb25fcG9sYXJpdHk7CisrCQkJLy9wcmludGsoInR4X2FtcCA6ICV4LCAxZSAleCA9ICV4XG4iLCB0eF9hbXBfdGVtcCwgdHhfYW1wX3JlZywgKHJlZ190ZW1wfCh0eF9hbXBfdGVtcDw8dHhfYW1wX3JlZ19zaGlmdCkpKTsKKysJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyggZ3N3LCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnLCAodHhfYW1wX3RlbXB8KHR4X2FtcF90ZW1wPDx0eF9hbXBfcmVnX3NoaWZ0KSkpOworKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZ18xMDAsICh0eF9hbXBfdGVtcHwodHhfYW1wX3RlbXA8PHR4X2FtcF9yZWdfc2hpZnQpKSk7CisrCQkJYWxsX2FuYV9jYWxfc3RhdHVzID0gYWxsX2dlX2FuYV9jYWxfd2FpdChnc3csIGRlbGF5LCBwaHlhZGRyKTsgLy8gZGVsYXkgMjAgdXNlYworKwkJCWlmKGFsbF9hbmFfY2FsX3N0YXR1cyA9PSAwKSB7CisrCQkJCWFsbF9hbmFfY2FsX3N0YXR1cyA9IEFOQUNBTF9FUlJPUjsJCisrCQkJCXByaW50ayggIiBHRSBUeCBhbXAgQW5hQ2FsIEVSUk9SIDIhICAgXHJcbiIpOworKwkJCQlyZXR1cm4gLTE7CisrCQkJfSBlbHNlIGlmKCgodGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBQSFkwLCAweDFlLCAweDAxN2EpPj44KSYweDEpICE9IGFkX2NhbF9jb21wX291dF9pbml0KSB7CisrCQkJCS8vcHJpbnRrKCJUWCBBTVAgQU5BQ0FMX0ZJTklTSFxuIik7CisrCQkJCWFsbF9hbmFfY2FsX3N0YXR1cyA9IEFOQUNBTF9GSU5JU0g7CisrCQkJCWlmIChwaHlhZGRyID09IDApIHsKKysJCQkJCWlmIChjYWxpYnJhdGlvbl9wYWlyID09IEFOQUNBTF9QQUlSX0EpCisrCQkJCQkJdHhfYW1wX3RlbXAgPSB0eF9hbXBfdGVtcCAtIDI7CisrCQkJCQllbHNlIGlmKGNhbGlicmF0aW9uX3BhaXIgPT0gQU5BQ0FMX1BBSVJfQikKKysJCQkJCQl0eF9hbXBfdGVtcCA9IHR4X2FtcF90ZW1wIC0gMTsKKysJCQkJCWVsc2UgaWYoY2FsaWJyYXRpb25fcGFpciA9PSBBTkFDQUxfUEFJUl9DKQorKwkJCQkJCXR4X2FtcF90ZW1wID0gdHhfYW1wX3RlbXAgLSAyOworKwkJCQkJZWxzZSBpZihjYWxpYnJhdGlvbl9wYWlyID09IEFOQUNBTF9QQUlSX0QpCisrCQkJCQkJdHhfYW1wX3RlbXAgPSB0eF9hbXBfdGVtcCAtIDE7CisrCQkJCX0gZWxzZSBpZiAocGh5YWRkciA9PSAxKSB7CisrCQkJCQlpZiAoY2FsaWJyYXRpb25fcGFpciA9PSBBTkFDQUxfUEFJUl9BKQorKwkJCQkJCXR4X2FtcF90ZW1wID0gdHhfYW1wX3RlbXAgLSAxOworKwkJCQkJZWxzZSBpZihjYWxpYnJhdGlvbl9wYWlyID09IEFOQUNBTF9QQUlSX0IpCisrCQkJCQkJdHhfYW1wX3RlbXAgPSB0eF9hbXBfdGVtcCA7CisrCQkJCQllbHNlIGlmKGNhbGlicmF0aW9uX3BhaXIgPT0gQU5BQ0FMX1BBSVJfQykKKysJCQkJCQl0eF9hbXBfdGVtcCA9IHR4X2FtcF90ZW1wIC0gMTsKKysJCQkJCWVsc2UgaWYoY2FsaWJyYXRpb25fcGFpciA9PSBBTkFDQUxfUEFJUl9EKQorKwkJCQkJCXR4X2FtcF90ZW1wID0gdHhfYW1wX3RlbXAgLSAxOworKwkJCQl9IGVsc2UgaWYgKHBoeWFkZHIgPT0gMikgeworKwkJCQkJaWYgKGNhbGlicmF0aW9uX3BhaXIgPT0gQU5BQ0FMX1BBSVJfQSkKKysJCQkJCQl0eF9hbXBfdGVtcCA9IHR4X2FtcF90ZW1wOworKwkJCQkJZWxzZSBpZihjYWxpYnJhdGlvbl9wYWlyID09IEFOQUNBTF9QQUlSX0IpCisrCQkJCQkJdHhfYW1wX3RlbXAgPSB0eF9hbXBfdGVtcCAtIDE7CisrCQkJCQllbHNlIGlmKGNhbGlicmF0aW9uX3BhaXIgPT0gQU5BQ0FMX1BBSVJfQykKKysJCQkJCQl0eF9hbXBfdGVtcCA9IHR4X2FtcF90ZW1wOworKwkJCQkJZWxzZSBpZihjYWxpYnJhdGlvbl9wYWlyID09IEFOQUNBTF9QQUlSX0QpCisrCQkJCQkJdHhfYW1wX3RlbXAgPSB0eF9hbXBfdGVtcCAtIDE7CisrCQkJCX0gZWxzZSBpZiAocGh5YWRkciA9PSAzKSB7CisrCQkJCQl0eF9hbXBfdGVtcCA9IHR4X2FtcF90ZW1wOworKwkJCQl9IGVsc2UgaWYgKHBoeWFkZHIgPT0gNCkgeworKwkJCQkJaWYgKGNhbGlicmF0aW9uX3BhaXIgPT0gQU5BQ0FMX1BBSVJfQSkKKysJCQkJCQl0eF9hbXBfdGVtcCA9IHR4X2FtcF90ZW1wOworKwkJCQkJZWxzZSBpZihjYWxpYnJhdGlvbl9wYWlyID09IEFOQUNBTF9QQUlSX0IpCisrCQkJCQkJdHhfYW1wX3RlbXAgPSB0eF9hbXBfdGVtcCAtIDE7CisrCQkJCQllbHNlIGlmKGNhbGlicmF0aW9uX3BhaXIgPT0gQU5BQ0FMX1BBSVJfQykKKysJCQkJCQl0eF9hbXBfdGVtcCA9IHR4X2FtcF90ZW1wOworKwkJCQkJZWxzZSBpZihjYWxpYnJhdGlvbl9wYWlyID09IEFOQUNBTF9QQUlSX0QpCisrCQkJCQkJdHhfYW1wX3RlbXAgPSB0eF9hbXBfdGVtcDsKKysJCQkJfQkJCQkJCQkJCisrCQkJCXJlZ190ZW1wID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnKSYofjB4ZmYwMCk7CisrCQkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZ18xMDAsKHR4X2FtcF90ZW1wfCgodHhfYW1wX3RlbXApPDx0eF9hbXBfcmVnX3NoaWZ0KSkpOworKwkJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWcsICh0eF9hbXBfdGVtcHwoKHR4X2FtcF90ZW1wKTw8dHhfYW1wX3JlZ19zaGlmdCkpKTsKKysJCQkJaWYgKHBoeWFkZHIgPT0gMCkgeworKwkJCQkJaWYgKCh0eF9hbXBfcmVnID09IDB4MTIpIHx8ICh0eF9hbXBfcmVnID09IDB4MTcpKSB7CisrCQkJCQkJLy9wcmludGsoImJlZm9yZSA6IFBPUlRbJWRdIDFlXyV4ID0gJXhcbiIsIHBoeWFkZHIsIHR4X2FtcF9yZWcsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnKSk7CisrCQkJCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnLCAoKHR4X2FtcF90ZW1wfCgodHhfYW1wX3RlbXApPDx0eF9hbXBfcmVnX3NoaWZ0KSkgKyA3KSk7CisrCQkJCQkJLy9wcmludGsoImFmdGVyIDogUE9SVFslZF0gMWVfJXggPSAleFxuIiwgcGh5YWRkciwgdHhfYW1wX3JlZywgdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWcpKTsKKysJCQkJCX0KKysJCQkJCWlmICh0eF9hbXBfcmVnXzEwMCA9PSAweDE2KSB7CisrCQkJCQkJLy9wcmludGsoImJlZm9yZSA6IFBPUlRbJWRdIDFlXyV4ID0gJXhcbiIsIHBoeWFkZHIsIHR4X2FtcF9yZWdfMTAwLCB0Y19waHlfcmVhZF9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZ18xMDApKTsKKysJCQkJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWdfMTAwLCh0eF9hbXBfdGVtcHwoKHR4X2FtcF90ZW1wKzErNCk8PHR4X2FtcF9yZWdfc2hpZnQpKSk7CisrCQkJCQkJLy9wcmludGsoImFmdGVyIDogUE9SVFslZF0gMWVfJXggPSAleFxuIiwgcGh5YWRkciwgdHhfYW1wX3JlZ18xMDAsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnXzEwMCkpOworKwkJCQkJfQorKwkJCQkJaWYgKHR4X2FtcF9yZWdfMTAwID09IDB4MTgpIHsKKysJCQkJCQkvL3ByaW50aygiYmVmb3JlIDogUE9SVFslZF0gMWVfJXggPSAleFxuIiwgcGh5YWRkciwgdHhfYW1wX3JlZ18xMDAsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnXzEwMCkpOworKwkJCQkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZ18xMDAsKHR4X2FtcF90ZW1wfCgodHhfYW1wX3RlbXArNCk8PHR4X2FtcF9yZWdfc2hpZnQpKSk7CisrCQkJCQkJLy9wcmludGsoImFmdGVyIDogUE9SVFslZF0gMWVfJXggPSAleFxuIiwgcGh5YWRkciwgdHhfYW1wX3JlZ18xMDAsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnXzEwMCkpOworKwkJCQkJfQorKwkJCQl9IGVsc2UgaWYgKHBoeWFkZHIgPT0gMSkgeworKwkJCQkJaWYgKHR4X2FtcF9yZWcgPT0gMHgxMikgeworKwkJCQkJCS8vcHJpbnRrKCJiZWZvcmUgOiBQT1JUWyVkXSAxZV8leCA9ICV4XG4iLCBwaHlhZGRyLCB0eF9hbXBfcmVnLCB0Y19waHlfcmVhZF9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZykpOworKwkJCQkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZywgKCh0eF9hbXBfdGVtcHwoKHR4X2FtcF90ZW1wKTw8dHhfYW1wX3JlZ19zaGlmdCkpICsgOSkpOworKwkJCQkJCS8vcHJpbnRrKCJhZnRlciA6IFBPUlRbJWRdIDFlXyV4ID0gJXhcbiIsIHBoeWFkZHIsIHR4X2FtcF9yZWcsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnKSk7CisrCQkJCQl9CisrCQkJCQlpZiAodHhfYW1wX3JlZyA9PSAweDE3KXsKKysJCQkJCQkvL3ByaW50aygiYmVmb3JlIDogUE9SVFslZF0gMWVfJXggPSAleFxuIiwgcGh5YWRkciwgdHhfYW1wX3JlZywgdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWcpKTsKKysJCQkJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWcsICgodHhfYW1wX3RlbXB8KCh0eF9hbXBfdGVtcCk8PHR4X2FtcF9yZWdfc2hpZnQpKSArIDcpKTsKKysJCQkJCQkvL3ByaW50aygiYWZ0ZXIgOiBQT1JUWyVkXSAxZV8leCA9ICV4XG4iLCBwaHlhZGRyLCB0eF9hbXBfcmVnLCB0Y19waHlfcmVhZF9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZykpOworKwkJCQkJfQorKwkJCQkJaWYgKHR4X2FtcF9yZWdfMTAwID09IDB4MTYpIHsKKysJCQkJCQkvL3ByaW50aygiYmVmb3JlIDogUE9SVFslZF0gMWVfJXggPSAleFxuIiwgcGh5YWRkciwgdHhfYW1wX3JlZ18xMDAsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnXzEwMCkpOworKwkJCQkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZ18xMDAsKHR4X2FtcF90ZW1wfCgodHhfYW1wX3RlbXArNCk8PHR4X2FtcF9yZWdfc2hpZnQpKSk7CisrCQkJCQkJLy9wcmludGsoImFmdGVyIDogUE9SVFslZF0gMWVfJXggPSAleFxuIiwgcGh5YWRkciwgdHhfYW1wX3JlZ18xMDAsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnXzEwMCkpOworKwkJCQkJfQorKwkJCQkJaWYgKHR4X2FtcF9yZWdfMTAwID09IDB4MTgpIHsKKysJCQkJCQkvL3ByaW50aygiYmVmb3JlIDogUE9SVFslZF0gMWVfJXggPSAleFxuIiwgcGh5YWRkciwgdHhfYW1wX3JlZ18xMDAsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnXzEwMCkpOworKwkJCQkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZ18xMDAsKHR4X2FtcF90ZW1wfCgodHhfYW1wX3RlbXAtMSs0KTw8dHhfYW1wX3JlZ19zaGlmdCkpKTsKKysJCQkJCQkvL3ByaW50aygiYWZ0ZXIgOiBQT1JUWyVkXSAxZV8leCA9ICV4XG4iLCBwaHlhZGRyLCB0eF9hbXBfcmVnXzEwMCwgdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWdfMTAwKSk7CisrCQkJCQl9CisrCQkJCX0gZWxzZSBpZiAocGh5YWRkciA9PSAyKSB7CisrCQkJCQlpZiAoKHR4X2FtcF9yZWcgPT0gMHgxMikgfHwgKHR4X2FtcF9yZWcgPT0gMHgxNykpIHsKKysJCQkJCQkvL3ByaW50aygiYmVmb3JlIDogUE9SVFslZF0gMWVfJXggPSAleFxuIiwgcGh5YWRkciwgdHhfYW1wX3JlZywgdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWcpKTsKKysJCQkJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWcsICgodHhfYW1wX3RlbXB8KCh0eF9hbXBfdGVtcCk8PHR4X2FtcF9yZWdfc2hpZnQpKSArIDYpKTsKKysJCQkJCQkvL3ByaW50aygiYWZ0ZXIgOiBQT1JUWyVkXSAxZV8leCA9ICV4XG4iLCBwaHlhZGRyLCB0eF9hbXBfcmVnLCB0Y19waHlfcmVhZF9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZykpOworKwkJCQkJfQorKwkJCQkJaWYgKCh0eF9hbXBfcmVnXzEwMCA9PSAweDE2KSB8fCAodHhfYW1wX3JlZ18xMDAgPT0gMHgxOCkpIHsKKysJCQkJCQkvL3ByaW50aygiYmVmb3JlIDogUE9SVFslZF0gMWVfJXggPSAleFxuIiwgcGh5YWRkciwgdHhfYW1wX3JlZ18xMDAsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnXzEwMCkpOworKwkJCQkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZ18xMDAsKHR4X2FtcF90ZW1wfCgodHhfYW1wX3RlbXAtMSs0KTw8dHhfYW1wX3JlZ19zaGlmdCkpKTsKKysJCQkJCQkvL3ByaW50aygiYWZ0ZXIgOiBQT1JUWyVkXSAxZV8leCA9ICV4XG4iLCBwaHlhZGRyLCB0eF9hbXBfcmVnXzEwMCwgdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWdfMTAwKSk7CisrCQkJCQl9CisrCQkJCX0gZWxzZSBpZiAocGh5YWRkciA9PSAzKSB7CisrCQkJCQlpZiAodHhfYW1wX3JlZyA9PSAweDEyKSB7CisrCQkJCQkJLy9wcmludGsoImJlZm9yZSA6IFBPUlRbJWRdIDFlXyV4ID0gJXhcbiIsIHBoeWFkZHIsIHR4X2FtcF9yZWcsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnKSk7CisrCQkJCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnLCAoKHR4X2FtcF90ZW1wfCgodHhfYW1wX3RlbXApPDx0eF9hbXBfcmVnX3NoaWZ0KSkgKyA0KSk7CisrCQkJCQkJLy9wcmludGsoImFmdGVyIDogUE9SVFslZF0gMWVfJXggPSAleFxuIiwgcGh5YWRkciwgdHhfYW1wX3JlZywgdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWcpKTsKKysJCQkJCX0KKysJCQkJCWlmICh0eF9hbXBfcmVnID09IDB4MTcpIHsKKysJCQkJCQkvL3ByaW50aygiYmVmb3JlIDogUE9SVFslZF0gMWVfJXggPSAleFxuIiwgcGh5YWRkciwgdHhfYW1wX3JlZywgdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWcpKTsKKysJCQkJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWcsICgodHhfYW1wX3RlbXB8KCh0eF9hbXBfdGVtcCk8PHR4X2FtcF9yZWdfc2hpZnQpKSArIDcpKTsKKysJCQkJCQkvL3ByaW50aygiYWZ0ZXIgOiBQT1JUWyVkXSAxZV8leCA9ICV4XG4iLCBwaHlhZGRyLCB0eF9hbXBfcmVnLCB0Y19waHlfcmVhZF9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZykpOworKwkJCQkJfQorKwkJCQkJaWYgKHR4X2FtcF9yZWdfMTAwID09IDB4MTYpIHsKKysJCQkJCQkvL3ByaW50aygiYmVmb3JlIDogUE9SVFslZF0gMWVfJXggPSAleFxuIiwgcGh5YWRkciwgdHhfYW1wX3JlZ18xMDAsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnXzEwMCkpOworKwkJCQkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZ18xMDAsKHR4X2FtcF90ZW1wfCgodHhfYW1wX3RlbXAtMis0KTw8dHhfYW1wX3JlZ19zaGlmdCkpKTsKKysJCQkJCQkvL3ByaW50aygiYWZ0ZXIgOiBQT1JUWyVkXSAxZV8leCA9ICV4XG4iLCBwaHlhZGRyLCB0eF9hbXBfcmVnXzEwMCwgdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWdfMTAwKSk7CisrCQkJCQl9CisrCQkJCQlpZiAodHhfYW1wX3JlZ18xMDAgPT0gMHgxOCkgeworKwkJCQkJCS8vcHJpbnRrKCJiZWZvcmUgOiBQT1JUWyVkXSAxZV8leCA9ICV4XG4iLCBwaHlhZGRyLCB0eF9hbXBfcmVnXzEwMCwgdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWdfMTAwKSk7CisrCQkJCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnXzEwMCwodHhfYW1wX3RlbXB8KCh0eF9hbXBfdGVtcC0xKzMpPDx0eF9hbXBfcmVnX3NoaWZ0KSkpOworKwkJCQkJCS8vcHJpbnRrKCJhZnRlciA6IFBPUlRbJWRdIDFlXyV4ID0gJXhcbiIsIHBoeWFkZHIsIHR4X2FtcF9yZWdfMTAwLCB0Y19waHlfcmVhZF9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZ18xMDApKTsKKysJCQkJCX0KKysJCQkJfSBlbHNlIGlmIChwaHlhZGRyID09IDQpIHsKKysJCQkJCWlmICgodHhfYW1wX3JlZyA9PSAweDEyKSB8fCAodHhfYW1wX3JlZyA9PSAweDE3KSkgeworKwkJCQkJCS8vcHJpbnRrKCJiZWZvcmUgOiBQT1JUWyVkXSAxZV8leCA9ICV4XG4iLCBwaHlhZGRyLCB0eF9hbXBfcmVnLCB0Y19waHlfcmVhZF9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZykpOworKwkJCQkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZywgKCh0eF9hbXBfdGVtcHwoKHR4X2FtcF90ZW1wKTw8dHhfYW1wX3JlZ19zaGlmdCkpICsgNSkpOworKwkJCQkJCS8vcHJpbnRrKCJhZnRlciA6IFBPUlRbJWRdIDFlXyV4ID0gJXhcbiIsIHBoeWFkZHIsIHR4X2FtcF9yZWcsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnKSk7CisrCQkJCQl9CisrCQkJCQlpZiAodHhfYW1wX3JlZ18xMDAgPT0gMHgxNikgeworKwkJCQkJCS8vcHJpbnRrKCJiZWZvcmUgOiBQT1JUWyVkXSAxZV8leCA9ICV4XG4iLCBwaHlhZGRyLCB0eF9hbXBfcmVnXzEwMCwgdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWdfMTAwKSk7CisrCQkJCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnXzEwMCwodHhfYW1wX3RlbXB8KCh0eF9hbXBfdGVtcC0yKzQpPDx0eF9hbXBfcmVnX3NoaWZ0KSkpOworKwkJCQkJCS8vcHJpbnRrKCJhZnRlciA6IFBPUlRbJWRdIDFlXyV4ID0gJXhcbiIsIHBoeWFkZHIsIHR4X2FtcF9yZWdfMTAwLCB0Y19waHlfcmVhZF9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZ18xMDApKTsKKysJCQkJCX0KKysJCQkJCWlmICh0eF9hbXBfcmVnXzEwMCA9PSAweDE4KSB7CisrCQkJCQkJLy9wcmludGsoImJlZm9yZSA6IFBPUlRbJWRdIDFlXyV4ID0gJXhcbiIsIHBoeWFkZHIsIHR4X2FtcF9yZWdfMTAwLCB0Y19waHlfcmVhZF9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZ18xMDApKTsKKysJCQkJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWdfMTAwLCh0eF9hbXBfdGVtcHwoKHR4X2FtcF90ZW1wLTErNCk8PHR4X2FtcF9yZWdfc2hpZnQpKSk7CisrCQkJCQkJLy9wcmludGsoImFmdGVyIDogUE9SVFslZF0gMWVfJXggPSAleFxuIiwgcGh5YWRkciwgdHhfYW1wX3JlZ18xMDAsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnXzEwMCkpOworKwkJCQkJfQorKwkJCQl9CQorKworKwkJCQlpZiAoY2FsaWJyYXRpb25fcGFpciA9PSBBTkFDQUxfUEFJUl9BKXsKKysJCQkJCXJlZ19iYWNrdXAgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGdzdywgIHBoeWFkZHIsIDB4MWUsIDB4MTIpOworKwkJCQkJcmVnX3RtcCA9ICgocmVnX2JhY2t1cCAmIDB4ZmMwMCkgPj4gMTApOworKwkJCQkJcmVnX3RtcCAtPSA4OworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19iYWNrdXAgPSAweDAwMDA7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2JhY2t1cCB8PSAoKHJlZ190bXAgPDwgMTApIHwgKHJlZ190bXAgPDwgMCkpOworKwkJCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDEyLCByZWdfYmFja3VwKTsKKysJCQkJCXJlZ19iYWNrdXAgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGdzdywgIHBoeWFkZHIsIDB4MWUsIDB4MTIpOworKwkJCQkJLy9wcmludGsoIlBPUlRbJWRdIDFlLjAxMiA9ICV4IChPRkZTRVRfMTAwME1fUEFJUl9BKVxuIiwgcGh5YWRkciwgcmVnX2JhY2t1cCk7CisrCQkJCQlyZWdfYmFja3VwID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBwaHlhZGRyLCAweDFlLCAweDE2KTsKKysJCQkJCXJlZ190bXAgPSAoKHJlZ19iYWNrdXAgJiAweDNmKSA+PiAwKTsKKysJCQkJCXJlZ190bXAgLT0gODsKKysJCQkJCXJlZ19iYWNrdXAgPSAocmVnX2JhY2t1cCAmICh+MHgzZikpOworKwkJCQkJcmVnX2JhY2t1cCB8PSAocmVnX3RtcCA8PCAwKTsKKysJCQkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgxNiwgcmVnX2JhY2t1cCk7CisrCQkJCQlyZWdfYmFja3VwID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBwaHlhZGRyLCAweDFlLCAweDE2KTsKKysJCQkJCS8vcHJpbnRrKCJQT1JUWyVkXSAxZS4wMTYgPSAleCAoT0ZGU0VUX1RFU1RNT0RFXzEwMDBNX1BBSVJfQSlcbiIsIHBoeWFkZHIsIHJlZ19iYWNrdXApOworKwkJCQl9CisrCQkJCWVsc2UgaWYoY2FsaWJyYXRpb25fcGFpciA9PSBBTkFDQUxfUEFJUl9CKXsKKysJCQkJCXJlZ19iYWNrdXAgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGdzdywgIHBoeWFkZHIsIDB4MWUsIDB4MTcpOworKwkJCQkJcmVnX3RtcCA9ICgocmVnX2JhY2t1cCAmIDB4M2YwMCkgPj4gOCk7CisrCQkJCQlyZWdfdG1wIC09IDg7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2JhY2t1cCA9IDB4MDAwMDsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfYmFja3VwIHw9ICgocmVnX3RtcCA8PCA4KSB8IChyZWdfdG1wIDw8IDApKTsKKysJCQkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgxNywgcmVnX2JhY2t1cCk7CisrCQkJCQlyZWdfYmFja3VwID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBwaHlhZGRyLCAweDFlLCAweDE3KTsKKysJCQkJCS8vcHJpbnRrKCJQT1JUWyVkXSAxZS4wMTcgPSAleCAoT0ZGU0VUXzEwMDBNX1BBSVJfQilcbiIsIHBoeWFkZHIsIHJlZ19iYWNrdXApOworKwkJCQkJcmVnX2JhY2t1cCA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCAgcGh5YWRkciwgMHgxZSwgMHgxOCk7CisrCQkJCQlyZWdfdG1wID0gKChyZWdfYmFja3VwICYgMHgzZikgPj4gMCk7CisrCQkJCQlyZWdfdG1wIC09IDg7CisrCQkJCQlyZWdfYmFja3VwID0gKHJlZ19iYWNrdXAgJiAofjB4M2YpKTsKKysJCQkJCXJlZ19iYWNrdXAgfD0gKHJlZ190bXAgPDwgMCk7CisrCQkJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4MTgsIHJlZ19iYWNrdXApOworKwkJCQkJcmVnX2JhY2t1cCA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCAgcGh5YWRkciwgMHgxZSwgMHgxOCk7CisrCQkJCQkvL3ByaW50aygiUE9SVFslZF0gMWUuMDE4ID0gJXggKE9GRlNFVF9URVNUTU9ERV8xMDAwTV9QQUlSX0IpXG4iLCBwaHlhZGRyLCByZWdfYmFja3VwKTsKKysJCQkJfQorKwkJCQllbHNlIGlmKGNhbGlicmF0aW9uX3BhaXIgPT0gQU5BQ0FMX1BBSVJfQyl7CisrCQkJCQlyZWdfYmFja3VwID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBwaHlhZGRyLCAweDFlLCAweDE5KTsKKysJCQkJCXJlZ190bXAgPSAoKHJlZ19iYWNrdXAgJiAweDNmMDApID4+IDgpOworKwkJCQkJcmVnX3RtcCAtPSA4OworKwkJCQkJcmVnX2JhY2t1cCA9IChyZWdfYmFja3VwICYgKH4weDNmMDApKTsKKysJCQkJCXJlZ19iYWNrdXAgfD0gKHJlZ190bXAgPDwgOCk7CisrCQkJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4MTksIHJlZ19iYWNrdXApOworKwkJCQkJcmVnX2JhY2t1cCA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCAgcGh5YWRkciwgMHgxZSwgMHgxOSk7CisrCQkJCQkvL3ByaW50aygiUE9SVFslZF0gMWUuMDE5ID0gJXggKE9GRlNFVF8xMDAwTV9QQUlSX0MpXG4iLCBwaHlhZGRyLCByZWdfYmFja3VwKTsKKysJCQkJCXJlZ19iYWNrdXAgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGdzdywgIHBoeWFkZHIsIDB4MWUsIDB4MjApOworKwkJCQkJcmVnX3RtcCA9ICgocmVnX2JhY2t1cCAmIDB4M2YpID4+IDApOworKwkJCQkJcmVnX3RtcCAtPSA4OworKwkJCQkJcmVnX2JhY2t1cCA9IChyZWdfYmFja3VwICYgKH4weDNmKSk7CisrCQkJCQlyZWdfYmFja3VwIHw9IChyZWdfdG1wIDw8IDApOworKwkJCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDIwLCByZWdfYmFja3VwKTsKKysJCQkJCXJlZ19iYWNrdXAgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGdzdywgIHBoeWFkZHIsIDB4MWUsIDB4MjApOworKwkJCQkJLy9wcmludGsoIlBPUlRbJWRdIDFlLjAyMCA9ICV4IChPRkZTRVRfVEVTVE1PREVfMTAwME1fUEFJUl9DKVxuIiwgcGh5YWRkciwgcmVnX2JhY2t1cCk7CisrCQkJCX0KKysJCQkJZWxzZSBpZihjYWxpYnJhdGlvbl9wYWlyID09IEFOQUNBTF9QQUlSX0QpeworKwkJCQkJcmVnX2JhY2t1cCA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCAgcGh5YWRkciwgMHgxZSwgMHgyMSk7CisrCQkJCQlyZWdfdG1wID0gKChyZWdfYmFja3VwICYgMHgzZjAwKSA+PiA4KTsKKysJCQkJCXJlZ190bXAgLT0gODsKKysJCQkJCXJlZ19iYWNrdXAgPSAocmVnX2JhY2t1cCAmICh+MHgzZjAwKSk7CisrCQkJCQlyZWdfYmFja3VwIHw9IChyZWdfdG1wIDw8IDgpOworKwkJCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDIxLCByZWdfYmFja3VwKTsKKysJCQkJCXJlZ19iYWNrdXAgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGdzdywgIHBoeWFkZHIsIDB4MWUsIDB4MjEpOworKwkJCQkJLy9wcmludGsoIlBPUlRbJWRdIDFlLjAyMSA9ICV4IChPRkZTRVRfMTAwME1fUEFJUl9EKVxuIiwgcGh5YWRkciwgcmVnX2JhY2t1cCk7CisrCQkJCQlyZWdfYmFja3VwID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBwaHlhZGRyLCAweDFlLCAweDIyKTsKKysJCQkJCXJlZ190bXAgPSAoKHJlZ19iYWNrdXAgJiAweDNmKSA+PiAwKTsKKysJCQkJCXJlZ190bXAgLT0gODsKKysJCQkJCXJlZ19iYWNrdXAgPSAocmVnX2JhY2t1cCAmICh+MHgzZikpOworKwkJCQkJcmVnX2JhY2t1cCB8PSAocmVnX3RtcCA8PCAwKTsKKysJCQkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgyMiwgcmVnX2JhY2t1cCk7CisrCQkJCQlyZWdfYmFja3VwID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBwaHlhZGRyLCAweDFlLCAweDIyKTsKKysJCQkJCS8vcHJpbnRrKCJQT1JUWyVkXSAxZS4wMjIgPSAleCAoT0ZGU0VUX1RFU1RNT0RFXzEwMDBNX1BBSVJfRClcbiIsIHBoeWFkZHIsIHJlZ19iYWNrdXApOworKwkJCQl9CisrCisrCQkJCWlmIChjYWxpYnJhdGlvbl9wYWlyID09IEFOQUNBTF9QQUlSX0EpeworKwkJCQkJLy9wcmludGsoIlBPUlQgKCVkKSBUWF9BTVAgUEFJUiAoQSkgRklOQUwgQ0FMSUJSQVRJT04gUkVTVUxUXG4iLCBwaHlhZGRyKTsKKysJCQkJCWRlYnVnX3RtcCA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDEyKTsKKysJCQkJCS8vcHJpbnRrKCIxZS4wMTIgPSAweCV4XG4iLCBkZWJ1Z190bXApOworKwkJCQkJZGVidWdfdG1wID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4MTYpOworKwkJCQkJLy9wcmludGsoIjFlLjAxNiA9IDB4JXhcbiIsIGRlYnVnX3RtcCk7CisrCQkJCX0KKysJCisrCQkJCWVsc2UgaWYoY2FsaWJyYXRpb25fcGFpciA9PSBBTkFDQUxfUEFJUl9CKXsKKysJCQkJCS8vcHJpbnRrKCJQT1JUICglZCkgVFhfQU1QIFBBSVIgKEEpIEZJTkFMIENBTElCUkFUSU9OIFJFU1VMVFxuIiwgcGh5YWRkcik7CisrCQkJCQlkZWJ1Z190bXAgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgxNyk7CisrCQkJCQkvL3ByaW50aygiMWUuMDE3ID0gMHgleFxuIiwgZGVidWdfdG1wKTsKKysJCQkJCWRlYnVnX3RtcCA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDE4KTsKKysJCQkJCS8vcHJpbnRrKCIxZS4wMTggPSAweCV4XG4iLCBkZWJ1Z190bXApOworKwkJCQl9CisrCQkJCWVsc2UgaWYoY2FsaWJyYXRpb25fcGFpciA9PSBBTkFDQUxfUEFJUl9DKXsKKysJCQkJCS8vcHJpbnRrKCJQT1JUICglZCkgVFhfQU1QIFBBSVIgKEEpIEZJTkFMIENBTElCUkFUSU9OIFJFU1VMVFxuIiwgcGh5YWRkcik7CisrCQkJCQlkZWJ1Z190bXAgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgxOSk7CisrCQkJCQkvL3ByaW50aygiMWUuMDE5ID0gMHgleFxuIiwgZGVidWdfdG1wKTsKKysJCQkJCWRlYnVnX3RtcCA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDIwKTsKKysJCQkJCS8vcHJpbnRrKCIxZS4wMjAgPSAweCV4XG4iLCBkZWJ1Z190bXApOworKwkJCQl9CisrCQkJCWVsc2UgaWYoY2FsaWJyYXRpb25fcGFpciA9PSBBTkFDQUxfUEFJUl9EKXsKKysJCQkJCS8vcHJpbnRrKCJQT1JUICglZCkgVFhfQU1QIFBBSVIgKEEpIEZJTkFMIENBTElCUkFUSU9OIFJFU1VMVFxuIiwgcGh5YWRkcik7CisrCQkJCQlkZWJ1Z190bXAgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgyMSk7CisrCQkJCQkvL3ByaW50aygiMWUuMDIxID0gMHgleFxuIiwgZGVidWdfdG1wKTsKKysJCQkJCWRlYnVnX3RtcCA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDIyKTsKKysJCQkJCS8vcHJpbnRrKCIxZS4wMjIgPSAweCV4XG4iLCBkZWJ1Z190bXApOworKwkJCQl9CisrCisrCisrCQkJCXByaW50ayggIiBHRSBUeCBhbXAgQW5hQ2FsIERvbmUhIChwYWlyLSVkKSgxZV8leCA9IDB4JXgpXG4iLCBjYWxpYnJhdGlvbl9wYWlyLCB0eF9hbXBfcmVnLCB0Y19waHlfcmVhZF9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZykpOworKwkJCQkKKysJCQl9IGVsc2UgeworKwkJCQlpZigodHhfYW1wX3RlbXAgPT0gMHgzZil8fCh0eF9hbXBfdGVtcCA9PSAweDAwKSkgeworKwkJCQkJYWxsX2FuYV9jYWxfc3RhdHVzID0gQU5BQ0FMX1NBVFVSQVRJT047ICAvLyBuZWVkIHRvIEZUCisrCQkJCQlwcmludGsoICIgR0UgVHggYW1wIEFuYUNhbCBTYXR1cmF0aW9uISAgXHJcbiIpOworKwkJCQl9CisrCQkJfQorKwkJfQorKworKwkJaWYoYWxsX2FuYV9jYWxfc3RhdHVzID09IEFOQUNBTF9FUlJPUikgewkKKysJCQl0eF9hbXBfdGVtcCA9IDB4MjA7CisrCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnLCAocmVnX3RlbXB8KHR4X2FtcF90ZW1wPDx0eF9hbXBfcmVnX3NoaWZ0KSkpOworKwkJfQorKwl9CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgwMTdkLCAweDAwMDApOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4MDE3ZSwgMHgwMDAwKTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDAxN2YsIDB4MDAwMCk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgwMTgwLCAweDAwMDApOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4MDE4MSwgMHgwMDAwKTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDAxODIsIDB4MDAwMCk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgwMTgzLCAweDAwMDApOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4MDE4NCwgMHgwMDAwKTsKKysJCisrCS8qIGRpc2FibGUgYW5hbG9nIGNhbGlicmF0aW9uIGNpcmN1aXQgKi8KKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBQSFkwLCAweDFlLCAweDAwZGIsIDB4MDAwMCk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgUEhZMCwgMHgxZSwgMHgwMGRjLCAweDAwMDApOwkvLyBkaXNhYmxlIFR4IG9mZnNldCBjYWxpYnJhdGlvbiBjaXJjdWl0CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgwMGRiLCAweDAwMDApOwkvLyBkaXNhYmxlIGFuYWxvZyBjYWxpYnJhdGlvbiBjaXJjdWl0CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgwMGRjLCAweDAwMDApOwkvLyBkaXNhYmxlIFR4IG9mZnNldCBjYWxpYnJhdGlvbiBjaXJjdWl0CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgwMDNlLCAweDAwMDApOwkvLyBkaXNhYmxlIFR4IFZMRCBmb3JjZSBtb2RlCisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgwMGRkLCAweDAwMDApOwkvLyBkaXNhYmxlIFR4IG9mZnNldC9hbXBsaXR1ZGUgY2FsaWJyYXRpb24gY2lyY3VpdAorKwkKKysJCisrCisrCS8vdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFmLCAweDI3MywgMHgyMDAwKTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweGM5LCAweDBmZmYpOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4MTQ1LCAweDEwMDApOworKworKwkvKiBSZXN0b3JlIENSIHRvIGRlZmF1bHQgKi8KKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDExLCBvcmlnXzFlXzExKTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFmLCAweDMwMCwgb3JpZ18xZl8zMDApOworKworKwlyZXR1cm4gMDsKKyt9CisrCisrLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworK2ludCBwaHlfY2FsaWJyYXRpb24oc3RydWN0IGdzd19tdDc1M3ggKmdzdywgdTggcGh5YWRkcikKKyt7CisrCS8vdTMyCXJlZ190bXAscmVnX3RtcDAsIHJlZ190bXAxLCBpOworKwl1MzIgcmVnX3RtcDsKKysJdTMyIENBTERMWSA9IDQwOworKwl1MzIgb3JpZ18xZV8xMSwgb3JpZ18xZV8xODUsIG9yaWdfMWVfZTEsIG9yaWdfMWZfMTAwOworKwlpbnQgcmV0OworKwkvKiBzZXQgWzEyXUFOIGRpc2FibGUsIFs4XWZ1bGwgZHVwbGV4LCBbMTMvNl0xMDAwTWJwcyAqLworKwkvL3RjX3BoeV93cml0ZV9kZXZfcmVnKHBoeWFkZHIsIDB4MCwgIDB4MDE0MCk7CisrCXN3aXRjaF9waHlfd3JpdGUoZ3N3LCBwaHlhZGRyLCBSMCwgMHgxNDApOworKworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4MTQ1LCAweDEwMTApOy8qIGZpeCBtZGkgKi8KKysJb3JpZ18xZV8xODUgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgUkdfMTg1KTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCBSR18xODUsIDApOy8qIGRpc2FibGUgdHggc2xldyBjb250cm9sICovCisrCW9yaWdfMWZfMTAwID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWYsIDB4MTAwKTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFmLCAweDEwMCwgMHhjMDAwKTsvKiBCRyB2b2x0YWdlIG91dHB1dCAqLworKwkvL3RjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZiwgMHg0MDMsIDB4MTA5OSk7IC8vYnlwYXNzIGVmdXNlCisrCisrI2lmICgxKQorKwkvLwkxZl8yN2NbMTI6OF0gY3JfZGFfdHhfaTJtcGJfMTBtCVRyaW1taW5nIFRYIGJpYXMgc2V0dXAoQDEwTSkKKysJLy90Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWYsIDB4MjdjLCAweDFmMWYpOworKwkvL3RjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZiwgMHgyN2MsIDB4MzMwMCk7CisrCisrCS8vcmVnX3RtcDEgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGdzdywgIFBIWTAsIDB4MWYsIDB4MjdjKTsKKysJLy9kZXYxRmhfcmVnMjczaCBUWFZMRCBEQSByZWdpc3RlcgktIEFkanVzdCB2b2x0YWdlIG1vZGUgVFggYW1wbGl0dWRlLgorKwkvL3RjX3BoeV93cml0ZV9kZXZfcmVnKHBoeWFkZHIsIDB4MWYsIDB4MjczLCAwKTsKKysJLy90Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWYsIDB4MjczLCAweDEwMDApOworKwkvL3JlZ190bXAxID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBwaHlhZGRyLCAweDFmLCAweDI3Myk7CisrCS8vcHJpbnRrKCJyZWdfdG1wMTI3MyA9ICV4XG4iLCByZWdfdG1wMSk7CisrCS8qMWVfMTEgVFggIG92ZXJzaG9vdCBFbmFibGUgKFBBSVIgQS9CL0MvRCkgaW4gZ2JlIG1vZGUqLworKworKwlvcmlnXzFlXzExID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBwaHlhZGRyLCAweDFlLCAweDExKTsKKysJcmVnX3RtcCA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCAgcGh5YWRkciwgMHgxZSwgMHgxMSk7CisrCXJlZ190bXAgPSByZWdfdG1wIHwgKDB4ZiA8PCAxMik7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgxMSwgcmVnX3RtcCk7CisrCW9yaWdfMWVfZTEgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGdzdywgUEhZMCwgMHgxZSwgMHgwMGUxKTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBQSFkwLCAweDFlLCAweDAwZTEsIDB4MTApOworKwkvKiBjYWxpYnJhdGlvbiBzdGFydCA9PT09PT09PT09PT0gKi8KKysJcHJpbnRrKCJDQUxETFkgPSAlZFxuIiwgQ0FMRExZKTsKKysJaWYoZ2VfY2FsX2ZsYWcgPT0gMCl7CisrCQlyZXQgPSBnZV9jYWxfcmV4dChnc3csIDAsIENBTERMWSk7CisrCQlpZiAocmV0ID09IC0xKXsKKysJCQlwcmludGsoImdlX2NhbF9yZXh0IGVycm9yIEsgcG9ydCA9JWRcbiIsIHBoeWFkZHIpOworKwkJCXJldHVybiByZXQ7CisrCQl9CisrCQlnZV9jYWxfZmxhZyA9IDE7CisrCX0KKysKKysJLyogKioqIFI1MCBDYWwgc3RhcnQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKysJLypwaHlhZGRyZXNzID0gMCovCisrCXJldCA9IGdlX2NhbF9yNTAoZ3N3LCBwaHlhZGRyLCBDQUxETFkpOworKwlpZiAocmV0ID09IC0xKXsKKysJCXByaW50aygiUjUwIGVycm9yIEsgcG9ydCA9JWRcbiIsIHBoeWFkZHIpOworKwkJcmV0dXJuIHJldDsKKysJfQorKwkvKiAqKiogUjUwIENhbCBlbmQgKioqICovCisrCS8qICoqKiBUeCBvZmZzZXQgQ2FsIHN0YXJ0ICoqKioqKioqKioqKioqKioqKioqKioqICovCisrCXJldCA9IGdlX2NhbF90eF9vZmZzZXQoZ3N3LCBwaHlhZGRyLCBDQUxETFkpOworKwlpZiAocmV0ID09IC0xKXsKKysJCXByaW50aygiZ2VfY2FsX3R4X29mZnNldCBlcnJvciBLIHBvcnQgPSVkXG4iLCBwaHlhZGRyKTsKKysJCXJldHVybiByZXQ7CisrCX0KKysJLyogKioqIFR4IG9mZnNldCBDYWwgZW5kICoqKiAqLworKworKwkvKiAqKiogVHggQW1wIENhbCBzdGFydCAqKiogKi8KKysJcmV0ID0gZ2VfY2FsX3R4X2FtcChnc3csIHBoeWFkZHIsIENBTERMWSk7CisrCWlmIChyZXQgPT0gLTEpeworKwkJcHJpbnRrKCJnZV9jYWxfdHhfYW1wIGVycm9yIEsgcG9ydCA9JWRcbiIsIHBoeWFkZHIpOworKwkJcmV0dXJuIHJldDsKKysJfQorKwkvKiAqKiogVHggQW1wIENhbCBlbmQgKioqICovCisrCS8qdG1wIG1heWJlIGNoYW5nZWQqLworKwkvL3RjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZiwgMHgyN2MsIDB4MTExMSk7CisrCS8vdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFmLCAweDI3YiwgMHg0Nyk7CisrCS8vdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFmLCAweDI3MywgMHgyMDAwKTsKKysKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDNhOCwgMHgwODEwKTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDNhYSwgMHgwMDA4KTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDNhYiwgMHgwODEwKTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDNhZCwgMHgwMDA4KTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDNhZSwgMHgwMTA2KTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDNiMCwgMHgwMDAxKTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDNiMSwgMHgwMTA2KTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDNiMywgMHgwMDAxKTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDE4YywgMHgwMDAxKTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDE4ZCwgMHgwMDAxKTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDE4ZSwgMHgwMDAxKTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDE4ZiwgMHgwMDAxKTsKKysKKysJLypkYV90eF9iaWFzMV9iX3R4X3N0YW5kYnkgPSA1J2IxMCAoZGV2MWVoX3JlZzNhYWhbMTI6OF0pKi8KKysJcmVnX3RtcCA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDNhYSk7CisrCXJlZ190bXAgPSByZWdfdG1wICYgfigweDFmMDApOworKwlyZWdfdG1wID0gcmVnX3RtcCB8IDB4MiA8PCA4OworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4M2FhLCByZWdfdG1wKTsKKysKKysJLypkYV90eF9iaWFzMV9hX3R4X3N0YW5kYnkgPSA1J2IxMCAoZGV2MWVoX3JlZzNhOWhbNDowXSkqLworKwlyZWdfdG1wID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBwaHlhZGRyLCAweDFlLCAweDNhOSk7CisrCXJlZ190bXAgPSByZWdfdG1wICYgfigweDFmKTsKKysJcmVnX3RtcCA9IHJlZ190bXAgfCAweDI7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgzYTksIHJlZ190bXApOworKworKwkvKiBSZXN0b3JlIENSIHRvIGRlZmF1bHQgKi8KKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCBSR18xODUsIG9yaWdfMWVfMTg1KTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFmLCAweDEwMCwgb3JpZ18xZl8xMDApOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4MTEsIG9yaWdfMWVfMTEpOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIFBIWTAsIDB4MWUsIDB4MDBlMSwgb3JpZ18xZV9lMSk7CisrI2VuZGlmCisrCXJldHVybiAwOworK30KKysKKyt2b2lkIHJ4X2RjX29mZnNldChzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3LCB1OCBwaHlhZGRyKQorK3sKKysgICAgcHJfaW5mbygiUE9SVCAlZCBSWF9EQ19PRkZTRVRcbiIsIHBoeWFkZHIpOworKyAgICB0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4OTYsIDB4ODAwMCk7CisrICAgIHRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgzNywgMHgzKTsKKysgICAgdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDEwNywgMHg0MDAwKTsKKysgICAgdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDE3MSwgMHgxZTUpOworKyAgICB0Y19waHlfd3JpdGVfZGV2X3JlZyhnc3csIHBoeWFkZHIsIDB4MWUsIDB4MzksIDB4MjAwZik7CisrICAgIHVkZWxheSg0MCk7CisrICAgIHRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZSwgMHgzOSwgMHgwMDBmKTsKKysgICAgdWRlbGF5KDQwKTsKKysgICAgdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFlLCAweDE3MSwgMHg2NSk7CisrfQorKworK3ZvaWQgY2hlY2tfcnhfZGNfb2Zmc2V0X3BhaXJfYShzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3LCB1OCBwaHlhZGRyKQorK3sKKysgICAgdTMyIHJlZ190bXA7CisrCisrICAgIHRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZiwgMHgxNSwgKHBoeWFkZHIgPDwgMTMpIHwgMHgxMTRmKTsKKysgICAgcmVnX3RtcCA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCAgcGh5YWRkciwgMHgxZiwgMHgxYSk7CisrICAgIHJlZ190bXAgPSByZWdfdG1wICYgMHhmZjsKKysgICAgcHJfaW5mbygiYmVmb3JlIHBhaXJBIG91dHB1dCA9ICV4XG4iLCByZWdfdG1wKTsKKysgICAgdWRlbGF5KDQwKTsKKysgICAgdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFmLCAweDE1LCAocGh5YWRkciA8PCAxMykgfCAweDExNDIpOworKyAgICB1ZGVsYXkoNDApOworKyAgICByZWdfdG1wID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBwaHlhZGRyLCAweDFmLCAweDFhKTsKKysgICAgcmVnX3RtcCA9IHJlZ190bXAgJiAweGZmOyAgIAorKyAgICBwcl9pbmZvKCJhZnRlciBwYWlyQSBvdXRwdXQgPSAleFxuIiwgcmVnX3RtcCk7CisrICAgIGlmICgocmVnX3RtcCAmIDB4ODApICE9IDApCisrICAgICAgICByZWdfdG1wID0gKH5yZWdfdG1wKSArIDE7CisrICAgIGlmICgocmVnX3RtcCAmIDB4ZmYpID40KQorKyAgICAgICAgcHJfaW5mbygicGFpckEgUlhfRENfT0ZGU0VUIGVycm9yIik7CisrfQorKworK3ZvaWQgY2hlY2tfcnhfZGNfb2Zmc2V0X3BhaXJfYihzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3LCB1OCBwaHlhZGRyKQorK3sKKysgICAgdTMyIHJlZ190bXA7CisrCisrICAgIHRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZiwgMHgxNSwgKHBoeWFkZHIgPDwgMTMpIHwgMHgxMTUxKTsKKysgICAgcmVnX3RtcCA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCAgcGh5YWRkciwgMHgxZiwgMHgxYSk7CisrICAgIHJlZ190bXAgPSByZWdfdG1wICYgMHhmZjsKKysgICAgcHJfaW5mbygiYmVmb3JlIHBhaXJCIG91dHB1dCA9ICV4XG4iLCByZWdfdG1wKTsKKysgICAgdWRlbGF5KDQwKTsKKysgICAgdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFmLCAweDE1LCAocGh5YWRkciA8PCAxMykgfCAweDExNDMpOworKyAgICB1ZGVsYXkoNDApOworKyAgICByZWdfdG1wID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBwaHlhZGRyLCAweDFmLCAweDFhKTsKKysgICAgcmVnX3RtcCA9IHJlZ190bXAgJiAweGZmOyAgIAorKyAgICBwcl9pbmZvKCJhZnRlciBwYWlyQiBvdXRwdXQgPSAleFxuIiwgcmVnX3RtcCk7CisrICAgIGlmICgocmVnX3RtcCAmIDB4ODApICE9IDApCisrICAgICAgICByZWdfdG1wID0gKH5yZWdfdG1wKSArIDE7CisrICAgIGlmICgocmVnX3RtcCAmIDB4ZmYpID40KQorKyAgICAgICAgcHJfaW5mbygicGFpckIgUlhfRENfT0ZGU0VUIGVycm9yIik7CisrfQorKworK3ZvaWQgY2hlY2tfcnhfZGNfb2Zmc2V0X3BhaXJfYyhzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3LCB1OCBwaHlhZGRyKQorK3sKKysgICAgdTMyIHJlZ190bXA7CisrCisrICAgIHRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZiwgMHgxNSwgKHBoeWFkZHIgPDwgMTMpIHwgMHgxMTUzKTsKKysgICAgcmVnX3RtcCA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCAgcGh5YWRkciwgMHgxZiwgMHgxYSk7CisrICAgIHJlZ190bXAgPSByZWdfdG1wICYgMHhmZjsKKysgICAgcHJfaW5mbygiYmVmb3JlIHBhaXJDIG91dHB1dCA9ICV4XG4iLCByZWdfdG1wKTsKKysgICAgdWRlbGF5KDQwKTsKKysgICAgdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFmLCAweDE1LCAocGh5YWRkciA8PCAxMykgfCAweDExNDQpOworKyAgICB1ZGVsYXkoNDApOworKyAgICByZWdfdG1wID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBwaHlhZGRyLCAweDFmLCAweDFhKTsKKysgICAgcmVnX3RtcCA9IHJlZ190bXAgJiAweGZmOyAgIAorKyAgICBwcl9pbmZvKCJhZnRlciBwYWlyQyBvdXRwdXQgPSAleFxuIiwgcmVnX3RtcCk7CisrICAgIGlmICgocmVnX3RtcCAmIDB4ODApICE9IDApCisrICAgICAgICByZWdfdG1wID0gKH5yZWdfdG1wKSArIDE7CisrICAgIGlmICgocmVnX3RtcCAmIDB4ZmYpID40KQorKyAgICAgICAgcHJfaW5mbygicGFpckMgUlhfRENfT0ZGU0VUIGVycm9yIik7CisrfQorKworK3ZvaWQgY2hlY2tfcnhfZGNfb2Zmc2V0X3BhaXJfZChzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3LCB1OCBwaHlhZGRyKQorK3sKKysgICAgdTMyIHJlZ190bXA7CisrCisrICAgIHRjX3BoeV93cml0ZV9kZXZfcmVnKGdzdywgcGh5YWRkciwgMHgxZiwgMHgxNSwgKHBoeWFkZHIgPDwgMTMpIHwgMHgxMTU1KTsKKysgICAgcmVnX3RtcCA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZ3N3LCAgcGh5YWRkciwgMHgxZiwgMHgxYSk7CisrICAgIHJlZ190bXAgPSByZWdfdG1wICYgMHhmZjsKKysgICAgcHJfaW5mbygiYmVmb3JlIHBhaXJEIG91dHB1dCA9ICV4XG4iLCByZWdfdG1wKTsKKysgICAgdWRlbGF5KDQwKTsKKysgICAgdGNfcGh5X3dyaXRlX2Rldl9yZWcoZ3N3LCBwaHlhZGRyLCAweDFmLCAweDE1LCAocGh5YWRkciA8PCAxMykgfCAweDExNDUpOworKyAgICB1ZGVsYXkoNDApOworKyAgICByZWdfdG1wID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhnc3csICBwaHlhZGRyLCAweDFmLCAweDFhKTsKKysgICAgcmVnX3RtcCA9IHJlZ190bXAgJiAweGZmOyAgIAorKyAgICBwcl9pbmZvKCJhZnRlciBwYWlyRCBvdXRwdXQgPSAleFxuIiwgcmVnX3RtcCk7CisrICAgIGlmICgocmVnX3RtcCAmIDB4ODApICE9IDApCisrICAgICAgICByZWdfdG1wID0gKH5yZWdfdG1wKSArIDE7CisrICAgIGlmICgocmVnX3RtcCAmIDB4ZmYpID40KQorKyAgICAgICAgcHJfaW5mbygicGFpckQgUlhfRENfT0ZGU0VUIGVycm9yIik7CisrfQorKworKworK2ludCBtdDc1M3hfcGh5X2NhbGlicmF0aW9uKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3csIHU4IHBoeWFkZHIpeworKworKwlpbnQgcmV0OworKworKwlyZXQgPSBwaHlfY2FsaWJyYXRpb24oZ3N3LCBwaHlhZGRyKTsKKysKKysJcnhfZGNfb2Zmc2V0KGdzdywgcGh5YWRkcik7CisrCWNoZWNrX3J4X2RjX29mZnNldF9wYWlyX2EoZ3N3LCBwaHlhZGRyKTsKKysJY2hlY2tfcnhfZGNfb2Zmc2V0X3BhaXJfYihnc3csIHBoeWFkZHIpOworKwljaGVja19yeF9kY19vZmZzZXRfcGFpcl9jKGdzdywgcGh5YWRkcik7CisrCWNoZWNrX3J4X2RjX29mZnNldF9wYWlyX2QoZ3N3LCBwaHlhZGRyKTsKKysKKysJcmV0dXJuIHJldDsKKyt9CitJbmRleDogZHJpdmVycy9uZXQvcGh5L210ay9tdDc1M3gvbXQ3NTN4X3BoeS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CituZXcgZmlsZSBtb2RlIDEwMDY0NAorLS0tIC9kZXYvbnVsbAorKysrIGIvZHJpdmVycy9uZXQvcGh5L210ay9tdDc1M3gvbXQ3NTN4X3BoeS5oCitAQCAtMCwwICsxLDE0NSBAQAorKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKyAqLworKy8qCisrICogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgZm9yIE1lZGlhVGVrIE1UNzUzeCBHaWdhYml0IHN3aXRjaGVzCisrICoKKysgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWVkaWFUZWsgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKyAqCisrICogQXV0aG9yOiBXZWlqaWUgR2FvIDx3ZWlqaWUuZ2FvQG1lZGlhdGVrLmNvbT4KKysgKi8KKysKKysjaWZuZGVmIF9NVDc1M1hfUEhZX0hfCisrI2RlZmluZSBfTVQ3NTNYX1BIWV9IXworKworKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKysKKysvKnBoeSBjYWxpYnJhdGlvbiB1c2UqLworKyNkZWZpbmUgREVWXzFFCQkJCTB4MUUKKysvKmdsb2JhbCBkZXZpY2UgMHgxZiwgYWx3YXlzIHNldCBQMCovCisrI2RlZmluZSBERVZfMUYJCQkJMHgxRgorKworKworKy8qKioqKioqKioqKipJRVhUL1JFWFQgQ0FMKioqKioqKioqKioqKioqLworKy8qIGJpdHMgcmFuZ2U6IGZvciBleGFtcGxlIEJJVFMoMTYsMjMpID0gMHhGRjAwMDAqLworKyNkZWZpbmUgQklUUyhtLCBuKSAgICh+KEJJVChtKSAtIDEpICYgKChCSVQobikgLSAxKSB8IEJJVChuKSkpCisrI2RlZmluZSBBTkFDQUxfSU5JVAkJCTB4MDEKKysjZGVmaW5lIEFOQUNBTF9FUlJPUgkJCTB4RkQKKysjZGVmaW5lIEFOQUNBTF9TQVRVUkFUSU9OCQkweEZFCisrI2RlZmluZQlBTkFDQUxfRklOSVNICQkJMHhGRgorKyNkZWZpbmUgQU5BQ0FMX1BBSVJfQQkJCTAKKysjZGVmaW5lIEFOQUNBTF9QQUlSX0IJCQkxCisrI2RlZmluZSBBTkFDQUxfUEFJUl9DCQkJMgorKyNkZWZpbmUgQU5BQ0FMX1BBSVJfRAkJCTMKKysjZGVmaW5lIERBQ19JTl8wVgkJCTB4MDAKKysjZGVmaW5lIERBQ19JTl8yVgkJCTB4ZjAKKysjZGVmaW5lIFRYX0FNUF9PRkZTRVRfME1WCQkweDIwCisrI2RlZmluZSBUWF9BTVBfT0ZGU0VUX1ZBTElEX0JJVFMJNgorKworKyNkZWZpbmUgUjAJCQkJMAorKyNkZWZpbmUgUEhZMAkJCQkwCisrI2RlZmluZSBQSFkxCQkJCTEKKysjZGVmaW5lIFBIWTIJCQkJMgorKyNkZWZpbmUgUEhZMwkJCQkzCisrI2RlZmluZSBQSFk0CQkJCTQKKysjZGVmaW5lIEFOQV9URVNUX01PREUJCQlCSVRTKDgsIDE1KQorKyNkZWZpbmUgVFNUX1RDTEtfU0VMCQkJQklUcyg2LCA3KQorKyNkZWZpbmUgQU5BX1RFU1RfVkdBX1JHCQkJMHgxMDAKKysKKysjZGVmaW5lIEZPUkNFX01ESV9DUk9TU19PVkVSCQlCSVRTKDMsIDQpCisrI2RlZmluZSBUMTBfVEVTVF9DVExfUkcJCQkweDE0NQorKyNkZWZpbmUgUkdfMTg1CQkJCTB4MTg1CisrI2RlZmluZSBSR19UWF9TTEVXCQkJQklUKDApCisrI2RlZmluZSBBTkFfQ0FMXzAJCQkweGRiCisrI2RlZmluZSBSR19DQUxfQ0tJTlYJCQlCSVQoMTIpCisrI2RlZmluZSBSR19BTkFfQ0FMRU4JCQlCSVQoOCkKKysjZGVmaW5lIFJHX1JFWFRfQ0FMRU4JCQlCSVQoNCkKKysjZGVmaW5lIFJHX1pDQUxFTl9BCQkJQklUKDApCisrI2RlZmluZSBBTkFfQ0FMXzEJCQkweGRjCisrI2RlZmluZSBSR19aQ0FMRU5fQgkJCUJJVCgxMikKKysjZGVmaW5lIFJHX1pDQUxFTl9DCQkJQklUKDgpCisrI2RlZmluZSBSR19aQ0FMRU5fRAkJCUJJVCg0KQorKyNkZWZpbmUgUkdfVFhWT1NfQ0FMRU4JCQlCSVQoMCkKKysjZGVmaW5lIEFOQV9DQUxfNgkJCTB4ZTEKKysjZGVmaW5lIFJHX0NBTF9SRUZTRUwJCQlCSVQoNCkKKysjZGVmaW5lIFJHX0NBTF9DT01QX1BXRAkJCUJJVCgwKQorKyNkZWZpbmUgQU5BX0NBTF81CQkJMHhlMAorKyNkZWZpbmUgUkdfUkVYVF9UUklNCQkJQklUcyg4LCAxMykKKysjZGVmaW5lIFJHX1pDQUxfQ1RSTAkJCUJJVHMoMCwgNSkKKysjZGVmaW5lIFJHXzE3QQkJCQkweDE3YQorKyNkZWZpbmUgQURfQ0FMX0NPTVBfT1VUCQkJQklUKDgpCisrI2RlZmluZSBSR18xN0IJCQkJMHgxN2IKKysjZGVmaW5lIEFEX0NBTF9DTEsJCQliaXQoMCkKKysjZGVmaW5lIFJHXzE3QwkJCQkweDE3YworKyNkZWZpbmUgREFfQ0FMSU5fRkxBRwkJCWJpdCgwKQorKy8qKioqKioqKioqKipSNTAgQ0FMKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysjZGVmaW5lIFJHXzE3NAkJCQkweDE3NAorKyNkZWZpbmUgUkdfUjUwT0hNX1JTRUxfVFhfQV9FTgkJQklUWzE1XQorKyNkZWZpbmUgQ1JfUjUwT0hNX1JTRUxfVFhfQQkJQklUU1s4OjE0XQorKyNkZWZpbmUgUkdfUjUwT0hNX1JTRUxfVFhfQl9FTgkJQklUWzddCisrI2RlZmluZSBDUl9SNTBPSE1fUlNFTF9UWF9CCQlCSVRTWzY6MF0KKysjZGVmaW5lIFJHXzE3NQkJCQkweDE3NQorKyNkZWZpbmUgUkdfUjUwT0hNX1JTRUxfVFhfQ19FTgkJQklUU1sxNV0KKysjZGVmaW5lIENSX1I1ME9ITV9SU0VMX1RYX0MJCUJJVFNbODoxNF0KKysjZGVmaW5lIFJHX1I1ME9ITV9SU0VMX1RYX0RfRU4JCUJJVFs3XQorKyNkZWZpbmUgQ1JfUjUwT0hNX1JTRUxfVFhfRAkJQklUU1swOjZdCisrLyoqKioqKioqKipUWCBvZmZzZXQgQ2FsaWJyYXRpb24qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrI2RlZmluZSBSR185NQkJCQkweDk2CisrI2RlZmluZSBCWVBBU1NfVFhfT0ZGU0VUX0NBTAkJQklUKDE1KQorKyNkZWZpbmUgUkdfM0UJCQkJMHgzZQorKyNkZWZpbmUgQllQQVNTX1BEX1RYVkxEX0EJCUJJVCgxNSkKKysjZGVmaW5lIEJZUEFTU19QRF9UWFZMRF9CCQlCSVQoMTQpCisrI2RlZmluZSBCWVBBU1NfUERfVFhWTERfQwkJQklUKDEzKQorKyNkZWZpbmUgQllQQVNTX1BEX1RYVkxEX0QJCUJJVCgxMikKKysjZGVmaW5lIEJZUEFTU19QRF9UWF8xME0JCUJJVCgxMSkKKysjZGVmaW5lIFBPV0VSX0RPV05fVFhWTERfQQkJQklUKDcpCisrI2RlZmluZSBQT1dFUl9ET1dOX1RYVkxEX0IJCUJJVCg2KQorKyNkZWZpbmUgUE9XRVJfRE9XTl9UWFZMRF9DCQlCSVQoNSkKKysjZGVmaW5lIFBPV0VSX0RPV05fVFhWTERfRAkJQklUKDQpCisrI2RlZmluZSBQT1dFUl9ET1dOX1RYXzEwTQkJQklUKDMpCisrI2RlZmluZSBSR19ERAkJCQkweGRkCisrI2RlZmluZSBSR19UWEdfQ0FMRU5fQQkJCUJJVCgxMikKKysjZGVmaW5lIFJHX1RYR19DQUxFTl9CCQkJQklUKDgpCisrI2RlZmluZSBSR19UWEdfQ0FMRU5fQwkJCUJJVCg0KQorKyNkZWZpbmUgUkdfVFhHX0NBTEVOX0QJCQlCSVQoMCkKKysjZGVmaW5lIFJHXzE3RAkJCQkweDE3RAorKyNkZWZpbmUgRk9SQ0VfREFTTl9EQUNfSU4wX0EJCUJJVCgxNSkKKysjZGVmaW5lIERBU05fREFDX0lOMF9BCQkJQklUUygwLCA5KQorKyNkZWZpbmUgUkdfMTdFCQkJCTB4MTdFCisrI2RlZmluZSBGT1JDRV9EQVNOX0RBQ19JTjBfQgkJQklUKDE1KQorKyNkZWZpbmUgREFTTl9EQUNfSU4wX0IJCQlCSVRTKDAsIDkpCisrI2RlZmluZSBSR18xN0YJCQkJMHgxN0YKKysKKysjZGVmaW5lIEZPUkNFX0RBU05fREFDX0lOMF9DCQlCSVQoMTUpCisrI2RlZmluZSBEQVNOX0RBQ19JTjBfQwkJCUJJVFMoMCwgOSkKKysjZGVmaW5lIFJHXzE4MAkJCQkweDE4MAorKyNkZWZpbmUgRk9SQ0VfREFTTl9EQUNfSU4wX0QJCUJJVCgxNSkKKysjZGVmaW5lIERBU05fREFDX0lOMF9ECQkJQklUUygwLCA5KQorKworKyNkZWZpbmUgUkdfMTgxCQkJCTB4MTgxCisrI2RlZmluZSBGT1JDRV9EQVNOX0RBQ19JTjFfQQkJQklUKDE1KQorKyNkZWZpbmUgREFTTl9EQUNfSU4xX0EJCQlCSVRTKDAsIDkpCisrI2RlZmluZSBSR18xODIJCQkJMHgxODIKKysjZGVmaW5lIEZPUkNFX0RBU05fREFDX0lOMV9CCQlCSVQoMTUpCisrI2RlZmluZSBEQVNOX0RBQ19JTjFfQgkJCUJJVFMoMCwgOSkKKysjZGVmaW5lIFJHXzE4MwkJCQkweDE4MworKyNkZWZpbmUgRk9SQ0VfREFTTl9EQUNfSU4xX0MJCUJJVDE1XQorKyNkZWZpbmUgREFTTl9EQUNfSU4xX0MJCQlCSVRTKDAsIDkpCisrI2RlZmluZSBSR18xODQJCQkJMHgxODQKKysjZGVmaW5lIEZPUkNFX0RBU05fREFDX0lOMV9ECQlCSVQoMTUpCisrI2RlZmluZSBEQVNOX0RBQ19JTjFfRAkJCUJJVFMoMCwgOSkKKysjZGVmaW5lIFJHXzE3MgkJCQkweDE3MgorKyNkZWZpbmUgQ1JfVFhfQU1QX09GRlNFVF9BCQlCSVRTKDgsIDEzKQorKyNkZWZpbmUgQ1JfVFhfQU1QX09GRlNFVF9CCQlCSVRTKDAsIDUpCisrI2RlZmluZSBSR18xNzMJCQkJMHgxNzMKKysjZGVmaW5lIENSX1RYX0FNUF9PRkZTRVRfQwkJQklUUyg4LCAxMykKKysjZGVmaW5lIENSX1RYX0FNUF9PRkZTRVRfRAkJQklUUygwLCA1KQorKy8qKioqKioqKioqVFggQW1wIENhbGlicmF0aW9uICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysjZGVmaW5lIFJHXzEyCQkJCTB4MTIKKysjZGVmaW5lIERBX1RYX0kyTVBCX0FfR0JFCQlCSVRTKDEwLCAxNSkKKysjZGVmaW5lIFJHXzE3CQkJCTB4MTcKKysjZGVmaW5lIERBX1RYX0kyTVBCX0JfR0JFCQlCSVRTKDgsIDEzKQorKyNkZWZpbmUgUkdfMTkJCQkJMHgxOQorKyNkZWZpbmUgREFfVFhfSTJNUEJfQ19HQkUJCUJJVFMoOCwgMTMpCisrI2RlZmluZSBSR18yMQkJCQkweDIxCisrI2RlZmluZSBEQV9UWF9JMk1QQl9EX0dCRQkJQklUUyg4LCAxMykKKysKKysjZW5kaWYgLyogX01UNzUzWF9SRUdTX0hfICovCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvNzM5LW10NzUzMS1nc3ctcG9ydDVfZXh0ZXJuYWxfcGh5X2luaXQucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvNzM5LW10NzUzMS1nc3ctcG9ydDVfZXh0ZXJuYWxfcGh5X2luaXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGQ4OGM2MAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC83MzktbXQ3NTMxLWdzdy1wb3J0NV9leHRlcm5hbF9waHlfaW5pdC5wYXRjaApAQCAtMCwwICsxLDE1NiBAQAorRnJvbSA5MjA2NDcyYmEwMzAzMmFlYTEyMDYwNGU4NjM3YjUyNDA4Y2E0YjNhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTGFuZGVuIENoYW8gPGxhbmRlbi5jaGFvQG1lZGlhdGVrLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWF5IDIwMjAgMTU6MTI6MzUgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIDc0MF9wYXRjaAorCitDaGFuZ2UtSWQ6IEk3ZTAxNjQ3NTE3MDJmNTczZDUxODVjNDI5MGZmNzg2ODhmNDJmNjAzCistLS0KKyBkcml2ZXJzL25ldC9waHkvbXRrL210NzUzeC9NYWtlZmlsZSAgICAgICAgfCAgMyArLQorIGRyaXZlcnMvbmV0L3BoeS9tdGsvbXQ3NTN4L210NzUzMS5jICAgICAgICB8ICAzICsKKyBkcml2ZXJzL25ldC9waHkvbXRrL210NzUzeC9tdDc1M3guaCAgICAgICAgfCAgMSArCisgZHJpdmVycy9uZXQvcGh5L210ay9tdDc1M3gvbXQ3NTN4X2V4dHBoeS5jIHwgNjkgKysrKysrKysrKysrKysrKysrKysrKworIGRyaXZlcnMvbmV0L3BoeS9tdGsvbXQ3NTN4L210NzUzeF9leHRwaHkuaCB8IDE4ICsrKysrKworIDUgZmlsZXMgY2hhbmdlZCwgOTMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9waHkvbXRrL210NzUzeC9tdDc1M3hfZXh0cGh5LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvcGh5L210ay9tdDc1M3gvbXQ3NTN4X2V4dHBoeS5oCisKK2RpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbXRrL210NzUzeC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS9tdGsvbXQ3NTN4L01ha2VmaWxlCitpbmRleCAzODRiMGZmNy4uNjk0ZmZhODMgMTAwNjQ0CistLS0gYS9kcml2ZXJzL25ldC9waHkvbXRrL210NzUzeC9NYWtlZmlsZQorKysrIGIvZHJpdmVycy9uZXQvcGh5L210ay9tdDc1M3gvTWFrZWZpbGUKK0BAIC03LDUgKzcsNiBAQCBvYmotJChDT05GSUdfTVQ3NTNYX0dTVykJKz0gbXQ3NTN4Lm8KKyBtdDc1M3gtJChDT05GSUdfU1dDT05GSUcpCSs9IG10NzUzeF9zd2NvbmZpZy5vCisgCisgbXQ3NTN4LXkJCQkrPSBtdDc1M3hfbWRpby5vIG10NzUzMC5vIG10NzUzMS5vIFwKKy0JCQkJCW10NzUzeF9jb21tb24ubyBtdDc1M3hfdmxhbi5vIG10NzUzeF9ubC5vIG10NzUzeF9waHkubworKwkJCQkJbXQ3NTN4X2NvbW1vbi5vIG10NzUzeF92bGFuLm8gbXQ3NTN4X25sLm8gbXQ3NTN4X3BoeS5vIFwKKysJCQkJCW10NzUzeF9leHRwaHkubworIAorZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tdGsvbXQ3NTN4L210NzUzMS5jIGIvZHJpdmVycy9uZXQvcGh5L210ay9tdDc1M3gvbXQ3NTMxLmMKK2luZGV4IDA0NzI5ODM1Li40YTI5NDNiMSAxMDA2NDQKKy0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tdGsvbXQ3NTN4L210NzUzMS5jCisrKysgYi9kcml2ZXJzL25ldC9waHkvbXRrL210NzUzeC9tdDc1MzEuYworQEAgLTI2NSw2ICsyNjUsOSBAQCBzdGF0aWMgaW50IG10NzUzMV9zZXRfcG9ydF9zZ21paV9mb3JjZV9tb2RlKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3csIHUzMiBwb3J0LAorIAkJcmV0dXJuIC1FSU5WQUw7CisgCX0KKyAKKysJaWYgKHBvcnQgPT0gNSkKKysJCWV4dHBoeV9pbml0KGdzdywgcG9ydCk7CisrCisgCXBvcnRfYmFzZSA9IHBvcnQgLSA1OworIAorIAlzd2l0Y2ggKHBvcnRfY2ZnLT5zcGVlZCkgeworZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tdGsvbXQ3NTN4L210NzUzeC5oIGIvZHJpdmVycy9uZXQvcGh5L210ay9tdDc1M3gvbXQ3NTN4LmgKK2luZGV4IDUwNTNhN2Q3Li5hM2YzNDNjZCAxMDA2NDQKKy0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tdGsvbXQ3NTN4L210NzUzeC5oCisrKysgYi9kcml2ZXJzL25ldC9waHkvbXRrL210NzUzeC9tdDc1M3guaAorQEAgLTE1NCw2ICsxNTQsNyBAQCB2b2lkIG10NzUzeF9pcnFfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Cisgdm9pZCBtdDc1M3hfaXJxX2VuYWJsZShzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3KTsKKyAKKyBpbnQgbXQ3NTN4X3BoeV9jYWxpYnJhdGlvbihzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3LCB1OCBwaHlhZGRyKTsKKytpbnQgZXh0cGh5X2luaXQoc3RydWN0IGdzd19tdDc1M3ggKmdzdywgaW50IGFkZHIpOworIAorIC8qIE1ESU8gSW5kaXJlY3QgQWNjZXNzIFJlZ2lzdGVycyAqLworICNkZWZpbmUgTUlJX01NRF9BQ0NfQ1RMX1JFRwkJMHgwZAorZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tdGsvbXQ3NTN4L210NzUzeF9leHRwaHkuYyBiL2RyaXZlcnMvbmV0L3BoeS9tdGsvbXQ3NTN4L210NzUzeF9leHRwaHkuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwLi5mNThlOGE2MgorLS0tIC9kZXYvbnVsbAorKysrIGIvZHJpdmVycy9uZXQvcGh5L210ay9tdDc1M3gvbXQ3NTN4X2V4dHBoeS5jCitAQCAtMCwwICsxLDY5IEBACisrLyoKKysgKiBEcml2ZXIgZm9yIE1lZGlhVGVrIE1UNzUzMSBnaWdhYml0IHN3aXRjaAorKyAqCisrICogQ29weXJpZ2h0IChDKSAyMDE4IE1lZGlhVGVrIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKysgKgorKyAqIEF1dGhvcjogTGFuZGVuIENoYW8gPGxhbmRlbi5jaGFvQG1lZGlhdGVrLmNvbT4KKysgKgorKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKworKyAqLworKworKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKysjaW5jbHVkZSA8bGludXgvbWlpLmg+CisrCisrI2luY2x1ZGUgIm10NzUzeC5oIgorKyNpbmNsdWRlICJtdDc1M3hfcmVncy5oIgorKyNpbmNsdWRlICJtdDc1M3hfZXh0cGh5LmgiCisrCisraW50IGdweTIxMV9pbml0KHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3csIGludCBhZGRyKQorK3sKKysJLyogRW5hYmxlIHJhdGUgYWRhcHRpb24gKi8KKysJZ3N3LT5tbWRfd3JpdGUoZ3N3LCBhZGRyLCAweDFlLCAweDgsIDB4MjRlMik7CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgc3RydWN0IG10NzUzeF9leHRwaHlfaWQgZXh0cGh5X3RibFtdID0geworKyAgICAgICAgezB4NjdjOWRlMDAsIDB4MGZmZmZmZmYwLCBncHkyMTFfaW5pdH0sCisrfTsKKysKKytzdGF0aWMgdTMyIGdldF9jbDIyX3BoeV9pZChzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3LCBpbnQgYWRkcikKKyt7CisrCWludCBwaHlfcmVnOworKwl1MzIgcGh5X2lkID0gMDsKKysKKysJcGh5X3JlZyA9IGdzdy0+bWlpX3JlYWQoZ3N3LCBhZGRyLCBNSUlfUEhZU0lEMSk7CisrCWlmIChwaHlfcmVnIDwgMCkKKysJCXJldHVybiAwOworKwlwaHlfaWQgPSAocGh5X3JlZyAmIDB4ZmZmZikgPDwgMTY7CisrCisrCS8qIEdyYWIgdGhlIGJpdHMgZnJvbSBQSFlJUjIsIGFuZCBwdXQgdGhlbSBpbiB0aGUgbG93ZXIgaGFsZiAqLworKwlwaHlfcmVnID0gZ3N3LT5taWlfcmVhZChnc3csIGFkZHIsIE1JSV9QSFlTSUQyKTsKKysJaWYgKHBoeV9yZWcgPCAwKQorKwkJcmV0dXJuIDA7CisrCisrCXBoeV9pZCB8PSAocGh5X3JlZyAmIDB4ZmZmZik7CisrCisrCXJldHVybiBwaHlfaWQ7CisrfQorKworK3N0YXRpYyBpbmxpbmUgYm9vbCBwaHlfaWRfaXNfbWF0Y2godTMyIGlkLCBzdHJ1Y3QgbXQ3NTN4X2V4dHBoeV9pZCAqcGh5KQorK3sKKysJcmV0dXJuICgoaWQgJiBwaHktPnBoeV9pZF9tYXNrKSA9PSAocGh5LT5waHlfaWQgJiBwaHktPnBoeV9pZF9tYXNrKSk7CisrfQorKworK2ludCBleHRwaHlfaW5pdChzdHJ1Y3QgZ3N3X210NzUzeCAqZ3N3LCBpbnQgYWRkcikKKyt7CisrCWludCBpOworKwl1MzIgcGh5X2lkOworKwlzdHJ1Y3QgbXQ3NTN4X2V4dHBoeV9pZCAqZXh0cGh5OworKworKwlwaHlfaWQgPSBnZXRfY2wyMl9waHlfaWQoZ3N3LCBhZGRyKTsKKysJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXh0cGh5X3RibCk7IGkrKykgeworKwkJZXh0cGh5ID0gJmV4dHBoeV90YmxbaV07CisrCQlpZihwaHlfaWRfaXNfbWF0Y2gocGh5X2lkLCBleHRwaHkpKQorKwkJCWV4dHBoeS0+aW5pdChnc3csIGFkZHIpOworKwl9CisrCisrCXJldHVybiAwOworK30KK2RpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbXRrL210NzUzeC9tdDc1M3hfZXh0cGh5LmggYi9kcml2ZXJzL25ldC9waHkvbXRrL210NzUzeC9tdDc1M3hfZXh0cGh5LmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMC4uMmI3MmM4YTkKKy0tLSAvZGV2L251bGwKKysrKyBiL2RyaXZlcnMvbmV0L3BoeS9tdGsvbXQ3NTN4L210NzUzeF9leHRwaHkuaAorQEAgLTAsMCArMSwxOCBAQAorKy8qCisrICogRHJpdmVyIGZvciBNZWRpYVRlayBNVDc1M3ggZ2lnYWJpdCBzd2l0Y2gKKysgKgorKyAqIENvcHlyaWdodCAoQykgMjAxOCBNZWRpYVRlayBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisrICoKKysgKiBBdXRob3I6IExhbmRlbiBDaGFvIDxsYW5kZW4uY2hhb0BtZWRpYXRlay5jb20+CisrICoKKysgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjoJR1BMLTIuMCsKKysgKi8KKysKKysjaWZuZGVmIF9NVDc1M1hfRVhUUEhZX0hfCisrI2RlZmluZSBfTVQ3NTNYX0VYVFBIWV9IXworK3N0cnVjdCBtdDc1M3hfZXh0cGh5X2lkIHsKKysgICAgICAgIHUzMiBwaHlfaWQ7CisrICAgICAgICB1MzIgcGh5X2lkX21hc2s7CisrCWludCAoKmluaXQpKHN0cnVjdCBnc3dfbXQ3NTN4ICpnc3csIGludCBhZGRyKTsKKyt9OworKyNlbmRpZgorLS0gCisyLjE3LjEKKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40Lzc0MC1hZGQtZ3B5MjExLXBoeS1zdXBwb3J0LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40Lzc0MC1hZGQtZ3B5MjExLXBoeS1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0OTYwODQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvNzQwLWFkZC1ncHkyMTEtcGh5LXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorSW5kZXg6IGxpbnV4LTUuNC4xMTkvZHJpdmVycy9uZXQvcGh5L0tjb25maWcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaW51eC01LjQuMTE5Lm9yaWcvZHJpdmVycy9uZXQvcGh5L0tjb25maWcKKysrKyBsaW51eC01LjQuMTE5L2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCitAQCAtNDY4LDYgKzQ2OCwxMSBAQCBjb25maWcgRklYRURfUEhZCisgCisgCSAgQ3VycmVudGx5IHRlc3RlZCB3aXRoIG1wYzg2NmFkcyBhbmQgbXBjODM0OWUtbWl0eC4KKyAKKytjb25maWcgR1BZMjExX1BIWQorKwl0cmlzdGF0ZSAiR1BZMjExIFBIWSIKKysJLS0taGVscC0tLQorKwkgIFN1cHBvcnRzIHRoZSBJbnRlbCBHUFkyMTEgUEhZIHdpdGggcmF0ZSBhZGFwdGlvbi4KKysKKyBjb25maWcgSUNQTFVTX1BIWQorIAl0cmlzdGF0ZSAiSUNQbHVzIFBIWXMiCisgCS0tLWhlbHAtLS0KK0luZGV4OiBsaW51eC01LjQuMTE5L2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpbnV4LTUuNC4xMTkub3JpZy9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUKKysrKyBsaW51eC01LjQuMTE5L2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZQorQEAgLTg2LDYgKzg2LDcgQEAgb2JqLSQoQ09ORklHX0RQODNUQzgxMV9QSFkpCSs9IGRwODN0YzgxMQorIG9iai0kKENPTkZJR19EUDgzODQ4X1BIWSkJKz0gZHA4Mzg0OC5vCisgb2JqLSQoQ09ORklHX0RQODM4NjdfUEhZKQkrPSBkcDgzODY3Lm8KKyBvYmotJChDT05GSUdfRklYRURfUEhZKQkJKz0gZml4ZWRfcGh5Lm8KKytvYmotJChDT05GSUdfR1BZMjExX1BIWSkJKz0gZ3B5MjExLm8KKyBvYmotJChDT05GSUdfSUNQTFVTX1BIWSkJKz0gaWNwbHVzLm8KKyBvYmotJChDT05GSUdfSU5URUxfWFdBWV9QSFkpCSs9IGludGVsLXh3YXkubworIG9iai0kKENPTkZJR19MU0lfRVQxMDExQ19QSFkpCSs9IGV0MTAxMWMubwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40Lzc0MS1hZGQtZGVmYXVsdC1zZXR0aW5nLXRvLWRzYS11bnVzZWQtcG9ydC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC83NDEtYWRkLWRlZmF1bHQtc2V0dGluZy10by1kc2EtdW51c2VkLXBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc2OWViZAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC83NDEtYWRkLWRlZmF1bHQtc2V0dGluZy10by1kc2EtdW51c2VkLXBvcnQucGF0Y2gKQEAgLTAsMCArMSwxMjQgQEAKK0luZGV4OiBsaW51eC01LjQuMTI0L2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpbnV4LTUuNC4xMjQub3JpZy9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMKKysrKyBsaW51eC01LjQuMTI0L2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYworQEAgLTEwMjEsNiArMTAyMSw5IEBAIG10NzUzMF9zdHBfc3RhdGVfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICoKKyAJc3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtPnByaXY7CisgCXUzMiBzdHBfc3RhdGU7CisgCisrCWlmIChkc2FfaXNfdW51c2VkX3BvcnQoZHMsIHBvcnQpKQorKwkJcmV0dXJuOworKworIAlzd2l0Y2ggKHN0YXRlKSB7CisgCWNhc2UgQlJfU1RBVEVfRElTQUJMRUQ6CisgCQlzdHBfc3RhdGUgPSBNVDc1MzBfU1RQX0RJU0FCTEVEOworQEAgLTE2NzYsMTAgKzE2NzksNTggQEAgbXQ3NTMwX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKKyB9CisgCisgc3RhdGljIGludAorK3NldHVwX3VudXNlZF9wb3J0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHUzMiBwbSkKKyt7CisrCXN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLT5wcml2OworKwl1MzIgZWd0YWdfbWFzayA9IDA7CisrCXUzMiBlZ3RhZ192YWwgPSAwOworKwlpbnQgaTsKKysKKysJaWYgKCFwbSkKKysJCXJldHVybiAwOworKworKwlmb3IgKGkgPSAwOyBpIDwgTVQ3NTMwX05VTV9QT1JUUzsgaSsrKSB7CisrCQlpZiAoIWRzYV9pc191bnVzZWRfcG9ydChkcywgaSkpCisrCQkJY29udGludWU7CisrCisrCQkvKiBTZXR1cCBNQUMgcG9ydCB3aXRoIG1heGltdW0gY2FwYWJpbGl0eS4gKi8KKysJCWlmICgoaSA9PSA1KSB8fCAoaSA9PSA2KSkKKysJCQlpZiAocHJpdi0+aW5mby0+Y3B1X3BvcnRfY29uZmlnKQorKwkJCQlwcml2LT5pbmZvLT5jcHVfcG9ydF9jb25maWcoZHMsIGkpOworKworKwkJbXQ3NTMwX3Jtdyhwcml2LCBNVDc1MzBfUENSX1AoaSksIFBDUl9NQVRSSVhfTUFTSyB8IFBDUl9QT1JUX1ZMQU5fTUFTSywKKysJCQkgICBQQ1JfTUFUUklYKHBtKSB8IE1UNzUzMF9QT1JUX1NFQ1VSSVRZX01PREUpOworKwkJZWd0YWdfbWFzayB8PSBFVEFHX0NUUkxfUF9NQVNLKGkpOworKwkJZWd0YWdfdmFsIHw9ICBFVEFHX0NUUkxfUChpLCBNVDc1MzBfVkxBTl9FR1JFU1NfVU5UQUcpOworKwl9CisrCisrCS8qIEFkZCB1bnVzZWQgcG9ydHMgdG8gVkxBTjIgZ3JvdXAgZm9yIHVzaW5nIElWTCBmZGIuICovCisrCW10NzUzMF93cml0ZShwcml2LCBNVDc1MzBfVkFXRDEsCisrCQkgICAgIElWTF9NQUMgfCBWVEFHX0VOIHwgUE9SVF9NRU0ocG0pIHwgVkxBTl9WQUxJRCk7CisrCW10NzUzMF9ybXcocHJpdiwgTVQ3NTMwX1ZBV0QyLCBlZ3RhZ19tYXNrLCBlZ3RhZ192YWwpOworKwltdDc1MzBfdmxhbl9jbWQocHJpdiwgTVQ3NTMwX1ZUQ1JfV1JfVklELCBNVDc1M1hfUkVTRVJWRURfVkxBTik7CisrCisrCWZvciAoaSA9IDA7IGkgPCBNVDc1MzBfTlVNX1BPUlRTOyBpKyspIHsKKysJCWlmICghZHNhX2lzX3VudXNlZF9wb3J0KGRzLCBpKSkKKysJCQljb250aW51ZTsKKysKKysJCW10NzUzMF9ybXcocHJpdiwgTVQ3NTMwX1BQQlYxX1AoaSksIEcwX1BPUlRfVklEX01BU0ssCisrCQkJICAgRzBfUE9SVF9WSUQoTVQ3NTNYX1JFU0VSVkVEX1ZMQU4pKTsKKysJCW10NzUzMF9ybXcocHJpdiwgTVQ3NTMwX1NTUF9QKGkpLCBGSURfUFNUX01BU0ssIE1UNzUzMF9TVFBfRk9SV0FSRElORyk7CisrCisrCQlkZXZfZGJnKGRzLT5kZXYsICJBZGQgdW51c2VkIHBvcnQlZCB0byByZXNlcnZlZCBWTEFOJWQgZ3JvdXBcbiIsCisrCQkJaSwgTVQ3NTNYX1JFU0VSVkVEX1ZMQU4pOworKwl9CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50CisgbXQ3NTMxX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKKyB7CisgCXN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLT5wcml2OworIAlzdHJ1Y3QgbXQ3NTMwX2R1bW15X3BvbGwgcDsKKysJdTMyIHVudXNlZF9wbSA9IDA7CisgCXUzMiB2YWwsIGlkOworIAlpbnQgcmV0LCBpOworIAorQEAgLTE3NjcsNyArMTgxOCw5IEBAIG10NzUzMV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCisgCisgCQltdDc1MzBfc2V0KHByaXYsIE1UNzUzMV9EQkdfQ05UKGkpLCBNVDc1MzFfRElTX0NMUik7CisgCistCQlpZiAoZHNhX2lzX2NwdV9wb3J0KGRzLCBpKSkKKysJCWlmIChkc2FfaXNfdW51c2VkX3BvcnQoZHMsIGkpKQorKwkJCXVudXNlZF9wbSB8PSBCSVQoaSk7CisrCQllbHNlIGlmIChkc2FfaXNfY3B1X3BvcnQoZHMsIGkpKQorIAkJCW10NzUzeF9jcHVfcG9ydF9lbmFibGUoZHMsIGkpOworIAkJZWxzZQorIAkJCW10NzUzMF9wb3J0X2Rpc2FibGUoZHMsIGkpOworQEAgLTE3NzcsNiArMTgzMCw5IEBAIG10NzUzMV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCisgCQkJICAgUFZDX0VHX1RBRyhNVDc1MzBfVkxBTl9FR19DT05TSVNURU5UKSk7CisgCX0KKyAKKysJLyogR3JvdXAgYW5kIGVuYWJsZSB1bnVzZWQgcG9ydHMgYXMgYSBzdGFuZGFsb25lIGR1bWIgc3dpdGNoLiAqLworKwlzZXR1cF91bnVzZWRfcG9ydHMoZHMsIHVudXNlZF9wbSk7CisrCisgCWRzLT5jb25maWd1cmVfdmxhbl93aGlsZV9ub3RfZmlsdGVyaW5nID0gdHJ1ZTsKKyAKKyAJLyogRmx1c2ggdGhlIEZEQiB0YWJsZSAqLworQEAgLTIxMDEsNyArMjE1Nyw3IEBAIG10NzUzMV9tYWNfY29uZmlnKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywKKyAJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfUlhJRDoKKyAJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfUkdNSUlfVFhJRDoKKyAJCWRwID0gZHNhX3RvX3BvcnQoZHMsIHBvcnQpOworLQkJcGh5ZGV2ID0gZHAtPnNsYXZlLT5waHlkZXY7CisrCQlwaHlkZXYgPSAoZHAtPnNsYXZlKSA/IGRwLT5zbGF2ZS0+cGh5ZGV2IDogTlVMTDsKKyAJCXJldHVybiBtdDc1MzFfcmdtaWlfc2V0dXAocHJpdiwgcG9ydCwgaW50ZXJmYWNlLCBwaHlkZXYpOworIAljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSToKKyAJCXJldHVybiBtdDc1MzFfc2dtaWlfc2V0dXBfbW9kZV9hbihwcml2LCBwb3J0LCBpbnRlcmZhY2UpOworQEAgLTI2NDEsNyArMjY5Nyw3IEBAIG10NzUzMF9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYKKyAJaWYgKCFwcml2KQorIAkJcmV0dXJuIC1FTk9NRU07CisgCistCXByaXYtPmRzID0gZHNhX3N3aXRjaF9hbGxvYygmbWRpb2Rldi0+ZGV2LCBEU0FfTUFYX1BPUlRTKTsKKysJcHJpdi0+ZHMgPSBkc2Ffc3dpdGNoX2FsbG9jKCZtZGlvZGV2LT5kZXYsIE1UNzUzMF9OVU1fUE9SVFMpOworIAlpZiAoIXByaXYtPmRzKQorIAkJcmV0dXJuIC1FTk9NRU07CisgCitJbmRleDogbGludXgtNS40LjEyNC9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaW51eC01LjQuMTI0Lm9yaWcvZHJpdmVycy9uZXQvZHNhL210NzUzMC5oCisrKysgbGludXgtNS40LjEyNC9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmgKK0BAIC0xMCw2ICsxMCw3IEBACisgI2RlZmluZSBNVDc1MzBfQ1BVX1BPUlQJCQk2CisgI2RlZmluZSBNVDc1MzBfTlVNX0ZEQl9SRUNPUkRTCQkyMDQ4CisgI2RlZmluZSBNVDc1MzBfQUxMX01FTUJFUlMJCTB4ZmYKKysjZGVmaW5lIE1UNzUzWF9SRVNFUlZFRF9WTEFOCQkyCisgCisgZW51bSBtdDc1M3hfaWQgeworIAlJRF9NVDc1MzAgPSAwLApkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40Lzc0Mi1uZXQtZHNhLWFkZC1NVDc1MzEtR2lnYWJpdC1FdGhlcm5ldC1QSFktc2V0dGluZy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC83NDItbmV0LWRzYS1hZGQtTVQ3NTMxLUdpZ2FiaXQtRXRoZXJuZXQtUEhZLXNldHRpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ4YmI2OQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC83NDItbmV0LWRzYS1hZGQtTVQ3NTMxLUdpZ2FiaXQtRXRoZXJuZXQtUEhZLXNldHRpbmcucGF0Y2gKQEAgLTAsMCArMSwxNjg3IEBACitJbmRleDogbGludXgtNS40LjEyNC9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaW51eC01LjQuMTI0Lm9yaWcvZHJpdmVycy9uZXQvZHNhL210NzUzMC5jCisrKysgbGludXgtNS40LjEyNC9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMKK0BAIC0xODMwLDYgKzE4MzAsOCBAQCBtdDc1MzFfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQorIAkJCSAgIFBWQ19FR19UQUcoTVQ3NTMwX1ZMQU5fRUdfQ09OU0lTVEVOVCkpOworIAl9CisgCisrCW10NzUzMV9waHlfc2V0dXAoZHMpOworKworIAkvKiBHcm91cCBhbmQgZW5hYmxlIHVudXNlZCBwb3J0cyBhcyBhIHN0YW5kYWxvbmUgZHVtYiBzd2l0Y2guICovCisgCXNldHVwX3VudXNlZF9wb3J0cyhkcywgdW51c2VkX3BtKTsKKyAKK0luZGV4OiBsaW51eC01LjQuMTI0L2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpbnV4LTUuNC4xMjQub3JpZy9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmgKKysrKyBsaW51eC01LjQuMTI0L2RyaXZlcnMvbmV0L2RzYS9tdDc1MzAuaAorQEAgLTc4Miw0ICs3ODIsNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgSU5JVF9NVDc1MzBfRFVNTVlfUE9MCisgCXAtPnJlZyA9IHJlZzsKKyB9CisgCisraW50IG10NzUzMV9waHlfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTsKKyAjZW5kaWYgLyogX19NVDc1MzBfSCAqLworSW5kZXg6IGxpbnV4LTUuNC4xMjQvZHJpdmVycy9uZXQvZHNhL210NzUzMV9waHkuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGxpbnV4LTUuNC4xMjQvZHJpdmVycy9uZXQvZHNhL210NzUzMV9waHkuYworQEAgLTAsMCArMSwxMzc4IEBACisrLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6CUdQTC0yLjArCisrLyoKKysgKiBDb21tb24gcGFydCBmb3IgTWVkaWFUZWsgTVQ3NTN4IGdpZ2FiaXQgc3dpdGNoCisrICoKKysgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWVkaWFUZWsgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKyAqCisrICogQXV0aG9yOiBXZWlqaWUgR2FvIDx3ZWlqaWUuZ2FvQG1lZGlhdGVrLmNvbT4KKysgKi8KKysKKysjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKysjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgorKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKysjaW5jbHVkZSA8bmV0L2RzYS5oPgorKyNpbmNsdWRlICJtdDc1MzAuaCIKKysjaW5jbHVkZSAibXQ3NTMxX3BoeS5oIgorKworKyNkZWZpbmUgTVQ3NTMxX05VTV9QSFlTIDUKKysKKytzdGF0aWMgdTMyIHRjX3BoeV9yZWFkX2Rldl9yZWcoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCB1MzIgcG9ydF9udW0sIHUzMiBkZXZfYWRkciwgdTMyIHJlZ19hZGRyKQorK3sKKysJc3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtPnByaXY7CisrCXUzMiBwaHlfdmFsOworKwl1MzIgYWRkcjsKKysKKysJYWRkciA9IE1JSV9BRERSX0M0NSB8IChkZXZfYWRkciA8PCAxNikgfCAocmVnX2FkZHIgJiAweGZmZmYpOworKwlwaHlfdmFsID0gcHJpdi0+aW5mby0+cGh5X3JlYWQoZHMsIHBvcnRfbnVtLCBhZGRyKTsKKysKKysJLy9wcmludGsoInN3aXRjaCBwaHkgY2w0NSByICVkIDB4JXggMHgleCA9ICV4XG4iLHBvcnRfbnVtLCBkZXZfYWRkciwgcmVnX2FkZHIsIHBoeV92YWwpOworKwlyZXR1cm4gcGh5X3ZhbDsKKyt9CisrCisrc3RhdGljIHZvaWQgdGNfcGh5X3dyaXRlX2Rldl9yZWcoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCB1MzIgcG9ydF9udW0sIHUzMiBkZXZfYWRkciwgdTMyIHJlZ19hZGRyLCB1MzIgd3JpdGVfZGF0YSkKKyt7CisrCXN0cnVjdCBtdDc1MzBfcHJpdiAqcHJpdiA9IGRzLT5wcml2OworKwl1MzIgYWRkcjsKKysKKysJYWRkciA9IE1JSV9BRERSX0M0NSB8IChkZXZfYWRkciA8PCAxNikgfCAocmVnX2FkZHIgJiAweGZmZmYpOworKworKwlwcml2LT5pbmZvLT5waHlfd3JpdGUoZHMsIHBvcnRfbnVtLCBhZGRyLCB3cml0ZV9kYXRhKTsKKysKKysJLy91MzIgcGh5X3ZhbCA9IHByaXYtPmluZm8tPnBoeV9yZWFkKGRzLCBwb3J0X251bSwgYWRkcik7CisrCS8vcHJpbnRrKCJzd2l0Y2ggcGh5IGNsNDUgdyAlZCAweCV4IDB4JXggMHgleCAtLT4gcmVhZCBiYWNrIDB4JXhcbiIscG9ydF9udW0sIGRldl9hZGRyLCByZWdfYWRkciwgd3JpdGVfZGF0YSwgcGh5X3ZhbCk7CisrfQorKworK3N0YXRpYyB2b2lkIHN3aXRjaF9waHlfd3JpdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCB1MzIgcG9ydF9udW0sIHUzMiByZWdfYWRkciwgdTMyIHdyaXRlX2RhdGEpeworKwlzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy0+cHJpdjsKKysKKysJcHJpdi0+aW5mby0+cGh5X3dyaXRlKGRzLCBwb3J0X251bSwgcmVnX2FkZHIsIHdyaXRlX2RhdGEpOworK30KKysKKytzdGF0aWMgdTMyIHN3aXRjaF9waHlfcmVhZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHUzMiBwb3J0X251bSwgdTMyIHJlZ19hZGRyKXsKKysJc3RydWN0IG10NzUzMF9wcml2ICpwcml2ID0gZHMtPnByaXY7CisrCisrCXJldHVybiBwcml2LT5pbmZvLT5waHlfcmVhZChkcywgcG9ydF9udW0sIHJlZ19hZGRyKTsKKyt9CisrCisrc3RhdGljIHZvaWQgbXQ3NTN4X3RyX3dyaXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IGFkZHIsIHU4IGNoLCB1OCBub2RlLCB1OCBkYWRkciwKKysJCSAgICAgdTMyIGRhdGEpCisreworKwlrdGltZV90IHRpbWVvdXQ7CisrCXUzMiB0aW1lb3V0X3VzOworKwl1MzIgdmFsOworKworKwlzd2l0Y2hfcGh5X3dyaXRlKGRzLCBhZGRyLCBQSFlfQ0wyMl9QQUdFX0NUUkwsIFBIWV9UUl9QQUdFKTsKKysKKysJdmFsID0gc3dpdGNoX3BoeV9yZWFkKGRzLCBhZGRyLCBQSFlfVFJfQ1RSTCk7CisrCisrCXRpbWVvdXRfdXMgPSAxMDAwMDA7CisrCXRpbWVvdXQgPSBrdGltZV9hZGRfdXMoa3RpbWVfZ2V0KCksIHRpbWVvdXRfdXMpOworKwl3aGlsZSAoMSkgeworKwkJdmFsID0gc3dpdGNoX3BoeV9yZWFkKGRzLCBhZGRyLCBQSFlfVFJfQ1RSTCk7CisrCisrCQlpZiAoISEodmFsICYgUEhZX1RSX1BLVF9YTVRfU1RBKSkKKysJCQlicmVhazsKKysKKysJCWlmIChrdGltZV9jb21wYXJlKGt0aW1lX2dldCgpLCB0aW1lb3V0KSA+IDApCisrCQkJZ290byBvdXQ7CisrCX0KKysKKysJc3dpdGNoX3BoeV93cml0ZShkcywgYWRkciwgUEhZX1RSX0xPV19EQVRBLCBQSFlfVFJfTE9XX1ZBTChkYXRhKSk7CisrCXN3aXRjaF9waHlfd3JpdGUoZHMsIGFkZHIsIFBIWV9UUl9ISUdIX0RBVEEsIFBIWV9UUl9ISUdIX1ZBTChkYXRhKSk7CisrCXZhbCA9IFBIWV9UUl9QS1RfWE1UX1NUQSB8IChQSFlfVFJfV1JJVEUgPDwgUEhZX1RSX1dSX1MpIHwKKysJICAgICAgKGNoIDw8IFBIWV9UUl9DSF9BRERSX1MpIHwgKG5vZGUgPDwgUEhZX1RSX05PREVfQUREUl9TKSB8CisrCSAgICAgIChkYWRkciA8PCBQSFlfVFJfREFUQV9BRERSX1MpOworKwlzd2l0Y2hfcGh5X3dyaXRlKGRzLCBhZGRyLCBQSFlfVFJfQ1RSTCwgdmFsKTsKKysKKysJdGltZW91dF91cyA9IDEwMDAwMDsKKysJdGltZW91dCA9IGt0aW1lX2FkZF91cyhrdGltZV9nZXQoKSwgdGltZW91dF91cyk7CisrCXdoaWxlICgxKSB7CisrCQl2YWwgPSBzd2l0Y2hfcGh5X3JlYWQoZHMsIGFkZHIsIFBIWV9UUl9DVFJMKTsKKysKKysJCWlmICghISh2YWwgJiBQSFlfVFJfUEtUX1hNVF9TVEEpKQorKwkJCWJyZWFrOworKworKwkJaWYgKGt0aW1lX2NvbXBhcmUoa3RpbWVfZ2V0KCksIHRpbWVvdXQpID4gMCkKKysJCQlnb3RvIG91dDsKKysJfQorK291dDoKKysJc3dpdGNoX3BoeV93cml0ZShkcywgYWRkciwgUEhZX0NMMjJfUEFHRV9DVFJMLCAwKTsKKyt9CisrCisrc3RhdGljIGludCBtdDc1M3hfdHJfcmVhZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBhZGRyLCB1OCBjaCwgdTggbm9kZSwgdTggZGFkZHIpCisreworKwlrdGltZV90IHRpbWVvdXQ7CisrCXUzMiB0aW1lb3V0X3VzOworKwl1MzIgdmFsOworKwl1OCB2YWxfaDsKKysKKysJc3dpdGNoX3BoeV93cml0ZShkcywgYWRkciwgUEhZX0NMMjJfUEFHRV9DVFJMLCBQSFlfVFJfUEFHRSk7CisrCisrCXZhbCA9IHN3aXRjaF9waHlfcmVhZChkcywgYWRkciwgUEhZX1RSX0NUUkwpOworKworKwl0aW1lb3V0X3VzID0gMTAwMDAwOworKwl0aW1lb3V0ID0ga3RpbWVfYWRkX3VzKGt0aW1lX2dldCgpLCB0aW1lb3V0X3VzKTsKKysJd2hpbGUgKDEpIHsKKysJCXZhbCA9IHN3aXRjaF9waHlfcmVhZChkcywgYWRkciwgUEhZX1RSX0NUUkwpOworKworKwkJaWYgKCEhKHZhbCAmIFBIWV9UUl9QS1RfWE1UX1NUQSkpCisrCQkJYnJlYWs7CisrCisrCQlpZiAoa3RpbWVfY29tcGFyZShrdGltZV9nZXQoKSwgdGltZW91dCkgPiAwKSB7CisrCQkJc3dpdGNoX3BoeV93cml0ZShkcywgYWRkciwgUEhZX0NMMjJfUEFHRV9DVFJMLCAwKTsKKysJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKysJCX0KKysJfQorKworKwl2YWwgPSBQSFlfVFJfUEtUX1hNVF9TVEEgfCAoUEhZX1RSX1JFQUQgPDwgUEhZX1RSX1dSX1MpIHwKKysJICAgICAgKGNoIDw8IFBIWV9UUl9DSF9BRERSX1MpIHwgKG5vZGUgPDwgUEhZX1RSX05PREVfQUREUl9TKSB8CisrCSAgICAgIChkYWRkciA8PCBQSFlfVFJfREFUQV9BRERSX1MpOworKwlzd2l0Y2hfcGh5X3dyaXRlKGRzLCBhZGRyLCBQSFlfVFJfQ1RSTCwgdmFsKTsKKysKKysJdGltZW91dF91cyA9IDEwMDAwMDsKKysJdGltZW91dCA9IGt0aW1lX2FkZF91cyhrdGltZV9nZXQoKSwgdGltZW91dF91cyk7CisrCXdoaWxlICgxKSB7CisrCQl2YWwgPSBzd2l0Y2hfcGh5X3JlYWQoZHMsIGFkZHIsIFBIWV9UUl9DVFJMKTsKKysKKysJCWlmICghISh2YWwgJiBQSFlfVFJfUEtUX1hNVF9TVEEpKQorKwkJCWJyZWFrOworKworKwkJaWYgKGt0aW1lX2NvbXBhcmUoa3RpbWVfZ2V0KCksIHRpbWVvdXQpID4gMCkgeworKwkJCXN3aXRjaF9waHlfd3JpdGUoZHMsIGFkZHIsIFBIWV9DTDIyX1BBR0VfQ1RSTCwgMCk7CisrCQkJcmV0dXJuIC1FVElNRURPVVQ7CisrCQl9CisrCX0KKysKKysJdmFsID0gc3dpdGNoX3BoeV9yZWFkKGRzLCBhZGRyLCBQSFlfVFJfTE9XX0RBVEEpOworKwl2YWxfaCA9IHN3aXRjaF9waHlfcmVhZChkcywgYWRkciwgUEhZX1RSX0hJR0hfREFUQSk7CisrCXZhbCB8PSAodmFsX2ggPDwgMTYpOworKworKwlzd2l0Y2hfcGh5X3dyaXRlKGRzLCBhZGRyLCBQSFlfQ0wyMl9QQUdFX0NUUkwsIDApOworKworKwlyZXR1cm4gdmFsOworK30KKysKKytzdGF0aWMgY29uc3QgdTggTVQ3NTN4X1pDQUxfVE9fUjUwb2htX0dFX1RCTF8xMDBbNjRdID0geworKwkxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywKKysJMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyMywgMTIyLCAxMTcsCisrCTExNSwgMTEyLCAxMDMsIDEwMCwgOTgsIDg3LCA4NSwgODMsCisrCTgxLCA3MiwgNzAsIDY4LCA2NiwgNjQsIDU1LCA1MywKKysJNTIsIDUwLCA0OSwgNDgsIDM4LCAzNiwgMzUsIDM0LAorKwkzMywgMzIsIDIyLCAyMSwgMjAsIDE5LCAxOCwgMTcsCisrCTE2LCA3LCA2LCA1LCA0LCAzLCAyLCAxLAorKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCisrfTsKKysKKytzdGF0aWMgY29uc3QgdTggTVQ3NTN4X1RYX09GRlNFVF9UQkxbNjRdID0geworKwkweDFmLCAweDFlLCAweDFkLCAweDFjLCAweDFiLCAweDFhLCAweDE5LCAweDE4LAorKwkweDE3LCAweDE2LCAweDE1LCAweDE0LCAweDEzLCAweDEyLCAweDExLCAweDEwLAorKwkweGYsIDB4ZSwgMHhkLCAweGMsIDB4YiwgMHhhLCAweDksIDB4OCwKKysJMHg3LCAweDYsIDB4NSwgMHg0LCAweDMsIDB4MiwgMHgxLCAweDAsCisrCTB4MjAsIDB4MjEsIDB4MjIsIDB4MjMsIDB4MjQsIDB4MjUsIDB4MjYsIDB4MjcsCisrCTB4MjgsIDB4MjksIDB4MmEsIDB4MmIsIDB4MmMsIDB4MmQsIDB4MmUsIDB4MmYsCisrCTB4MzAsIDB4MzEsIDB4MzIsIDB4MzMsIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsCisrCTB4MzgsIDB4MzksIDB4M2EsIDB4M2IsIDB4M2MsIDB4M2QsIDB4M2UsIDB4M2YKKyt9OworKworK3N0YXRpYyB1OCBnZV9jYWxfZmxhZzsKKysKKytzdGF0aWMgdTggYWxsX2dlX2FuYV9jYWxfd2FpdChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHUzMiBkZWxheSwgdTMyIHBoeWFkZHIpCisreworKwl1OCBhbGxfYW5hX2NhbF9zdGF0dXM7CisrCXUzMiBjbnQsIHRtcF8xZV8xN2M7CisrCS8vdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIDB4MDE3YywgMHgwMDAxKTsJLy8gZGFfY2FsaW5fZmxhZyBwdWxsIGhpZ2gKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIFBIWTAsIDB4MWUsIDB4MTdjLCAweDAwMDEpOworKwkvL3ByaW50aygiZGVsYXkgPSAlZFxuIiwgZGVsYXkpOworKworKwljbnQgPSAxMDAwMDsKKysJZG8geworKwkJdWRlbGF5KGRlbGF5KTsKKysJCWNudC0tOworKwkJYWxsX2FuYV9jYWxfc3RhdHVzID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgUEhZMCwgMHgxZSwgMHgxN2IpICYgMHgxOworKworKwl9IHdoaWxlICgoYWxsX2FuYV9jYWxfc3RhdHVzID09IDApICYmIChjbnQgIT0gMCkpOworKworKworKwlpZihhbGxfYW5hX2NhbF9zdGF0dXMgPT0gMSkgeworKwkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIFBIWTAsIDB4MWUsIDB4MTdjLCAwKTsKKysJCXJldHVybiBhbGxfYW5hX2NhbF9zdGF0dXM7CisrCX0gZWxzZSB7CisrCQl0bXBfMWVfMTdjID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgUEhZMCwgMHgxZSwgMHgxN2MpOworKwkJaWYgKCh0bXBfMWVfMTdjICYgMHgxKSAhPSAxKSB7CisrCQkJcHJfaW5mbygiRklSU1QgTURDL01ESU8gd3JpdGUgZXJyb3JcbiIpOworKwkJCXByX2luZm8oIkZJUlNUIDFlXzE3YyA9ICV4XG4iLCB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCBQSFkwLCAweDFlLCAweDE3YykpOworKworKwkJfQorKwkJcHJpbnRrKCJyZS1LIGFnYWluXG4iKTsKKysKKysJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBQSFkwLCAweDFlLCAweDE3YywgMCk7CisrCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgUEhZMCwgMHgxZSwgMHgxN2MsIDB4MDAwMSk7CisrCQljbnQgPSAxMDAwMDsKKysJCWRvIHsKKysJCQl1ZGVsYXkoZGVsYXkpOworKwkJCWNudC0tOworKwkJCXRtcF8xZV8xN2MgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCBQSFkwLCAweDFlLCAweDE3Yyk7CisrCQkJaWYgKCh0bXBfMWVfMTdjICYgMHgxKSAhPSAxKSB7CisrCQkJCXByX2luZm8oIlNFQ09ORCBNREMvTURJTyB3cml0ZSBlcnJvclxuIik7CisrCQkJCXByX2luZm8oIlNFQ09ORCAxZV8xN2MgPSAleFxuIiwgdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgUEhZMCwgMHgxZSwgMHgxN2MpKTsKKysJCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIFBIWTAsIDB4MWUsIDB4MTdjLCAweDAwMDEpOworKwkJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgUEhZMCwgMHgxZSwgMHgxN2MsIDB4MDAwMSk7CisrCQkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBQSFkwLCAweDFlLCAweDE3YywgMHgwMDAxKTsKKysJCQl9CisrCQl9IHdoaWxlICgoY250ICE9IDApICYmICh0bXBfMWVfMTdjID09IDApKTsKKysKKysJCWNudCA9IDEwMDAwOworKwkJZG8geworKwkJCXVkZWxheShkZWxheSk7CisrCQkJY250LS07CisrCQkJYWxsX2FuYV9jYWxfc3RhdHVzID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgUEhZMCwgMHgxZSwgMHgxN2IpICYgMHgxOworKworKwkJfSB3aGlsZSAoKGFsbF9hbmFfY2FsX3N0YXR1cyA9PSAwKSAmJiAoY250ICE9IDApKTsKKysKKysJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBQSFkwLCAweDFlLCAweDE3YywgMCk7CisrCX0KKysKKysJaWYoYWxsX2FuYV9jYWxfc3RhdHVzID09IDApeworKwkJcHJfaW5mbygiISEhISEhISEhISEhIGRldjFFaF9yZWcxN2IgRVJST1JcbiIpOworKwl9CisrCisrCXJldHVybiBhbGxfYW5hX2NhbF9zdGF0dXM7CisrfQorKworKworKworKworK3N0YXRpYyBpbnQgZ2VfY2FsX3JleHQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCB1OCBwaHlhZGRyLCB1MzIgZGVsYXkpCisreworKwl1OCByZ196Y2FsX2N0cmwsIGFsbF9hbmFfY2FsX3N0YXR1czsKKysJdTE2IGFkX2NhbF9jb21wX291dF9pbml0OworKwl1MTYgZGV2MWVfZTBfYW5hX2NhbF9yNTsKKysJaW50IGNhbGlicmF0aW9uX3BvbGFyaXR5OworKwl1OCBjbnQgPSAwOworKwl1MTYgZGV2MWVfMTdhX3RtcCwgZGV2MWVfZTBfdG1wOworKworKwkvKiAqKiogSWV4dC9SZXh0IENhbCBzdGFydCAqKioqKioqKioqKiogKi8KKysJYWxsX2FuYV9jYWxfc3RhdHVzID0gQU5BQ0FMX0lOSVQ7CisrCS8qIGFuYWxvZyBjYWxpYnJhdGlvbiBlbmFibGUsIFJleHQgY2FsaWJyYXRpb24gZW5hYmxlICovCisrCS8qIDFlX2RiWzEyXTpyZ19jYWxfY2tpbnYsIFs4XTpyZ19hbmFfY2FsZW4sIFs0XTpyZ19yZXh0X2NhbGVuLCBbMF06cmdfemNhbGVuX2EgKi8KKysJLyogMWVfZGNbMF06cmdfdHh2b3NfY2FsZW4gKi8KKysJLyogMWVfZTFbNF06cmdfY2FsX3JlZnNlbCgwOjEuMlYpICovCisrCS8vdGNfcGh5X3dyaXRlX2Rldl9yZWcocGh5YWRkciwgMHgxZSwgMHgwMGRiLCAweDExMTApCisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBQSFkwLCAweDFlLCAweDAwZGIsIDB4MTExMCk7CisrCS8vdGNfcGh5X3dyaXRlX2Rldl9yZWcocGh5YWRkciwgMHgxZSwgMHgwMGRjLCAweDAwMDApOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgUEhZMCwgMHgxZSwgMHgwMGRjLCAwKTsKKysJLy90Y19waHlfd3JpdGVfZGV2X3JlZyhwaHlhZGRyLCAweDFlLCAweDAwZTEsIDB4MDAwMCk7CisrCS8vdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIFBIWTAsIDB4MWUsIDB4MDBlMSwgMHgxMCk7CisrCisrCXJnX3pjYWxfY3RybCA9IDB4MjA7Lyogc3RhcnQgd2l0aCAwIGRCICovCisrCWRldjFlX2UwX2FuYV9jYWxfcjUgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCAgUEhZMCwgMHgxZSwgMHhlMCk7IC8vIGdldCBkZWZhdWx0IHZhbHVlCisrCS8qIDFlX2UwWzU6MF06cmdfemNhbF9jdHJsICovCisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBQSFkwLCAweDFlLCAweGUwLCByZ196Y2FsX2N0cmwpOworKwlhbGxfYW5hX2NhbF9zdGF0dXMgPSBhbGxfZ2VfYW5hX2NhbF93YWl0KGRzLCBkZWxheSwgcGh5YWRkcik7LyogZGVsYXkgMjAgdXNlYyAqLworKworKwlpZiAoYWxsX2FuYV9jYWxfc3RhdHVzID09IDApIHsKKysJCWFsbF9hbmFfY2FsX3N0YXR1cyA9IEFOQUNBTF9FUlJPUjsKKysJCXByaW50aygiIEdFIFJleHQgQW5hQ2FsIEVSUk9SIGluaXQhICAgXHJcbiIpOworKwkJcmV0dXJuIC0xOworKwl9CisrCS8qIDFlXzE3YVs4XTphZF9jYWxfY29tcF9vdXQgKi8KKysJYWRfY2FsX2NvbXBfb3V0X2luaXQgPSAodGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgIFBIWTAsIDB4MWUsIDB4MDE3YSkgPj4gOCkgJiAweDE7CisrCWlmIChhZF9jYWxfY29tcF9vdXRfaW5pdCA9PSAxKQorKwkJY2FsaWJyYXRpb25fcG9sYXJpdHkgPSAtMTsKKysJZWxzZSAvKiBhZF9jYWxfY29tcF9vdXRfaW5pdCA9PSAwICovCisrCQljYWxpYnJhdGlvbl9wb2xhcml0eSA9IDE7CisrCWNudCA9IDA7CisrCXdoaWxlIChhbGxfYW5hX2NhbF9zdGF0dXMgPCBBTkFDQUxfRVJST1IpIHsKKysJCWNudCsrOworKwkJcmdfemNhbF9jdHJsICs9IGNhbGlicmF0aW9uX3BvbGFyaXR5OworKwkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIFBIWTAsIDB4MWUsIDB4ZTAsIChyZ196Y2FsX2N0cmwpKTsKKysJCWFsbF9hbmFfY2FsX3N0YXR1cyA9IGFsbF9nZV9hbmFfY2FsX3dhaXQoZHMsIGRlbGF5LCBwaHlhZGRyKTsgLyogZGVsYXkgMjAgdXNlYyAqLworKwkJZGV2MWVfMTdhX3RtcCA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsIFBIWTAsIDB4MWUsIDB4MDE3YSk7CisrCQlpZiAoYWxsX2FuYV9jYWxfc3RhdHVzID09IDApIHsKKysJCQlhbGxfYW5hX2NhbF9zdGF0dXMgPSBBTkFDQUxfRVJST1I7CisrCQkJcHJpbnRrKCIgIEdFIFJleHQgQW5hQ2FsIEVSUk9SIDIhICAgXHJcbiIpOworKwkJCXJldHVybiAtMTsKKysJCX0gZWxzZSBpZiAoKChkZXYxZV8xN2FfdG1wID4+IDgpICYgMHgxKSAhPSBhZF9jYWxfY29tcF9vdXRfaW5pdCkgeworKwkJCWFsbF9hbmFfY2FsX3N0YXR1cyA9IEFOQUNBTF9GSU5JU0g7CisrCQkJLy9wcmludGsoIiAgR0UgUmV4dCBBbmFDYWwgRG9uZSEgKCVkKSgweCV4KSAgXHJcbiIsIGNudCwgcmdfemNhbF9jdHJsKTsKKysJCX0gZWxzZSB7CisrCQkJZGV2MWVfMTdhX3RtcCA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsIFBIWTAsIDB4MWUsIDB4MDE3YSk7CisrCQkJZGV2MWVfZTBfdG1wID0JdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgUEhZMCwgMHgxZSwgMHhlMCk7CisrCQkJaWYgKChyZ196Y2FsX2N0cmwgPT0gMHgzRikgfHwgKHJnX3pjYWxfY3RybCA9PSAweDAwKSkgeworKwkJCQlhbGxfYW5hX2NhbF9zdGF0dXMgPSBBTkFDQUxfU0FUVVJBVElPTjsgIC8qIG5lZWQgdG8gRlQoSUMgZmFpbD8pICovCisrCQkJCXByaW50aygiIEdFIFJleHQgQW5hQ2FsIFNhdHVyYXRpb24hICBcclxuIik7CisrCQkJCXJnX3pjYWxfY3RybCA9IDB4MjA7ICAvKiAwIGRCICovCisrCQkJfQorKwkJfQorKwl9CisrCisrCWlmIChhbGxfYW5hX2NhbF9zdGF0dXMgPT0gQU5BQ0FMX0VSUk9SKSB7CisrCQlyZ196Y2FsX2N0cmwgPSAweDIwOyAgLyogMCBkQiAqLworKwkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIFBIWTAsIDB4MWUsIDB4MDBlMCwgKGRldjFlX2UwX2FuYV9jYWxfcjUgfCByZ196Y2FsX2N0cmwpKTsKKysJfSBlbHNlIGlmKGFsbF9hbmFfY2FsX3N0YXR1cyA9PSBBTkFDQUxfRklOSVNIKXsKKysJCS8vdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIFBIWTAsIDB4MWUsIDB4MDBlMCwgKGRldjFlX2UwX2FuYV9jYWxfcjUgfCByZ196Y2FsX2N0cmwpKTsKKysJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBQSFkwLCAweDFlLCAweDAwZTAsICgocmdfemNhbF9jdHJsIDw8IDgpIHwgcmdfemNhbF9jdHJsKSk7CisrCQlwcmludGsoIjB4MWUtZTAgPSAleFxuIiwgdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgIFBIWTAsIDB4MWUsIDB4MDBlMCkpOworKwkJLyogKioqKiAgMWZfMTE1WzI6MF0gPSByZ196Y2FsX2N0cmxbNTozXSAgLy8gTW9nIHJldmlldyAqLworKwkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIFBIWTAsIDB4MWYsIDB4MDExNSwgKChyZ196Y2FsX2N0cmwgJiAweDNmKSA+PiAzKSk7CisrCQlwcmludGsoIjB4MWYtMTE1ID0gJXhcbiIsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsICBQSFkwLCAweDFmLCAweDExNSkpOworKwkJcHJpbnRrKCIgIEdFIFJleHQgQW5hQ2FsIERvbmUhICglZCkoMHgleCkgIFxyXG4iLCBjbnQsIHJnX3pjYWxfY3RybCk7CisrCQlnZV9jYWxfZmxhZyA9IDE7CisrCX0gZWxzZSB7CisrCQlwcmludGsoIkdFIFJ4ZXQgY2FsIHNvbWV0aGluZyB3cm9uZzJcbiIpOworKwl9CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBQSFkwLCAweDFlLCAweDAwZGIsIDB4MDAwMCk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDAwZGIsIDB4MDAwMCk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBQSFkwLCAweDFlLCAweDAwZGMsIDB4MDAwMCk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDAwZGMsIDB4MDAwMCk7CisrCisrCXJldHVybiAwOworK30KKysKKysvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrc3RhdGljIGludCBnZV9jYWxfcjUwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgdTggcGh5YWRkciwgdTMyIGRlbGF5KQorK3sKKysJdTggcmdfemNhbF9jdHJsLCBhbGxfYW5hX2NhbF9zdGF0dXMsIGNhbGlicmF0aW9uX3BhaXI7CisrCXUxNiBhZF9jYWxfY29tcF9vdXRfaW5pdDsKKysJdTE2IGRldjFlX2UwX2FuYV9jYWxfcjU7CisrCWludCBjYWxpYnJhdGlvbl9wb2xhcml0eTsKKysJdTggY250ID0gMDsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIFBIWTAsIDB4MWUsIDB4MDBkYiwgMHgxMTAwKTsJLy8gMWVfZGJbMTJdOnJnX2NhbF9ja2ludiwgWzhdOnJnX2FuYV9jYWxlbiwgWzRdOnJnX3JleHRfY2FsZW4sIFswXTpyZ196Y2FsZW5fYQorKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgUEhZMCwgMHgxZSwgMHgwMGRjLCAweDAwMDApOwkvLyAxZV9kY1swXTpyZ190eHZvc19jYWxlbgorKworKwlmb3IoY2FsaWJyYXRpb25fcGFpciA9IEFOQUNBTF9QQUlSX0E7IGNhbGlicmF0aW9uX3BhaXIgPD0gQU5BQ0FMX1BBSVJfRDsgY2FsaWJyYXRpb25fcGFpciArKykgeworKwkJcmdfemNhbF9jdHJsID0gMHgyMDsgIAkJCQkJCS8vIHN0YXJ0IHdpdGggMCBkQgorKwkJZGV2MWVfZTBfYW5hX2NhbF9yNSA9ICh0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCAgUEhZMCwgMHgxZSwgMHgwMGUwKSAmICh+MHgwMDNmKSk7CisrCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgUEhZMCwgMHgxZSwgMHgwMGUwLCAoZGV2MWVfZTBfYW5hX2NhbF9yNSB8IHJnX3pjYWxfY3RybCkpOwkvLyAxZV9lMFs1OjBdOnJnX3pjYWxfY3RybAorKwkJaWYoY2FsaWJyYXRpb25fcGFpciA9PSBBTkFDQUxfUEFJUl9BKQorKwkJeworKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDAwZGIsIDB4MTEwMSk7CS8vIDFlX2RiWzEyXTpyZ19jYWxfY2tpbnYsIFs4XTpyZ19hbmFfY2FsZW4sIFs0XTpyZ19yZXh0X2NhbGVuLCBbMF06cmdfemNhbGVuX2EKKysJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgwMGRjLCAweDAwMDApOworKwkJCS8vcHJpbnRrKCJSNTAgcGFpciBBIDFlX2RiPSV4IDFlX2RiPSV4XG4iLCB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCAgcGh5YWRkciwgMHgxZSwgMHgwMGRiKSwgdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgIHBoeWFkZHIsIDB4MWUsIDB4MDBkYykpOworKworKwkJfQorKwkJZWxzZSBpZihjYWxpYnJhdGlvbl9wYWlyID09IEFOQUNBTF9QQUlSX0IpCisrCQl7CisrCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIDB4MDBkYiwgMHgxMTAwKTsJLy8gMWVfZGJbMTJdOnJnX2NhbF9ja2ludiwgWzhdOnJnX2FuYV9jYWxlbiwgWzRdOnJnX3JleHRfY2FsZW4sIFswXTpyZ196Y2FsZW5fYQorKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDAwZGMsIDB4MTAwMCk7CS8vIDFlX2RjWzEyXTpyZ196Y2FsZW5fYgorKwkJCS8vcHJpbnRrKCJSNTAgcGFpciBCIDFlX2RiPSV4IDFlX2RiPSV4XG4iLCB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCAgcGh5YWRkciwgMHgxZSwgMHgwMGRiKSx0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCAgcGh5YWRkciwgMHgxZSwgMHgwMGRjKSk7CisrCisrCQl9CisrCQllbHNlIGlmKGNhbGlicmF0aW9uX3BhaXIgPT0gQU5BQ0FMX1BBSVJfQykKKysJCXsKKysJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgwMGRiLCAweDExMDApOwkvLyAxZV9kYlsxMl06cmdfY2FsX2NraW52LCBbOF06cmdfYW5hX2NhbGVuLCBbNF06cmdfcmV4dF9jYWxlbiwgWzBdOnJnX3pjYWxlbl9hCisrCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIDB4MDBkYywgMHgwMTAwKTsJLy8gMWVfZGNbOF06cmdfemNhbGVuX2MKKysJCQkvL3ByaW50aygiUjUwIHBhaXIgQyAxZV9kYj0leCAxZV9kYj0leFxuIiwgdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgIHBoeWFkZHIsIDB4MWUsIDB4MDBkYiksIHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsICBwaHlhZGRyLCAweDFlLCAweDAwZGMpKTsKKysKKysJCX0KKysJCWVsc2UgLy8gaWYoY2FsaWJyYXRpb25fcGFpciA9PSBBTkFDQUxfUEFJUl9EKQorKwkJeworKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDAwZGIsIDB4MTEwMCk7CS8vIDFlX2RiWzEyXTpyZ19jYWxfY2tpbnYsIFs4XTpyZ19hbmFfY2FsZW4sIFs0XTpyZ19yZXh0X2NhbGVuLCBbMF06cmdfemNhbGVuX2EKKysJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgwMGRjLCAweDAwMTApOwkvLyAxZV9kY1s0XTpyZ196Y2FsZW5fZAorKwkJCS8vcHJpbnRrKCJSNTAgcGFpciBEIDFlX2RiPSV4IDFlX2RiPSV4XG4iLCB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCAgcGh5YWRkciwgMHgxZSwgMHgwMGRiKSwgdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgIHBoeWFkZHIsIDB4MWUsIDB4MDBkYykpOworKworKwkJfQorKworKwkJYWxsX2FuYV9jYWxfc3RhdHVzID0gYWxsX2dlX2FuYV9jYWxfd2FpdChkcywgZGVsYXksIHBoeWFkZHIpOyAvLyBkZWxheSAyMCB1c2VjCisrCQlpZihhbGxfYW5hX2NhbF9zdGF0dXMgPT0gMCkKKysJCXsKKysJCQlhbGxfYW5hX2NhbF9zdGF0dXMgPSBBTkFDQUxfRVJST1I7CisrCQkJcHJpbnRrKCAiR0UgUjUwIEFuYUNhbCBFUlJPUiBpbml0ISAgIFxyXG4iKTsKKysJCQlyZXR1cm4gLTE7CisrCQl9CisrCisrCQlhZF9jYWxfY29tcF9vdXRfaW5pdCA9ICh0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCAgUEhZMCwgMHgxZSwgMHgwMTdhKT4+OCkgJiAweDE7CQkvLyAxZV8xN2FbOF06YWRfY2FsX2NvbXBfb3V0CisrCQlpZihhZF9jYWxfY29tcF9vdXRfaW5pdCA9PSAxKQorKwkJCWNhbGlicmF0aW9uX3BvbGFyaXR5ID0gLTE7CisrCQllbHNlCisrCQkJY2FsaWJyYXRpb25fcG9sYXJpdHkgPSAxOworKworKwkJY250ID0gMDsKKysJCXdoaWxlKGFsbF9hbmFfY2FsX3N0YXR1cyA8IEFOQUNBTF9FUlJPUikKKysJCXsKKysJCQljbnQgKys7CisrCQkJcmdfemNhbF9jdHJsICs9IGNhbGlicmF0aW9uX3BvbGFyaXR5OworKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBQSFkwLCAweDFlLCAweDAwZTAsIChkZXYxZV9lMF9hbmFfY2FsX3I1IHwgcmdfemNhbF9jdHJsKSk7CisrCQkJYWxsX2FuYV9jYWxfc3RhdHVzID0gYWxsX2dlX2FuYV9jYWxfd2FpdChkcywgZGVsYXksIHBoeWFkZHIpOyAvLyBkZWxheSAyMCB1c2VjCisrCisrCQkJaWYoYWxsX2FuYV9jYWxfc3RhdHVzID09IDApCisrCQkJeworKwkJCQlhbGxfYW5hX2NhbF9zdGF0dXMgPSBBTkFDQUxfRVJST1I7CisrCQkJCXByaW50ayggIiAgR0UgUjUwIEFuYUNhbCBFUlJPUiAyISAgIFxyXG4iKTsKKysJCQkJcmV0dXJuIC0xOworKwkJCX0KKysJCQllbHNlIGlmKCgodGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgIFBIWTAsIDB4MWUsIDB4MDE3YSk+PjgpJjB4MSkgIT0gYWRfY2FsX2NvbXBfb3V0X2luaXQpCisrCQkJeworKwkJCQlhbGxfYW5hX2NhbF9zdGF0dXMgPSBBTkFDQUxfRklOSVNIOworKwkJCX0KKysJCQllbHNlIHsKKysJCQkJaWYoKHJnX3pjYWxfY3RybCA9PSAweDNGKXx8KHJnX3pjYWxfY3RybCA9PSAweDAwKSkKKysJCQkJeworKwkJCQkJYWxsX2FuYV9jYWxfc3RhdHVzID0gQU5BQ0FMX1NBVFVSQVRJT047ICAvLyBuZWVkIHRvIEZUCisrCQkJCQlwcmludGsoICIgR0UgUjUwIEFuYUNhbCBTYXR1cmF0aW9uISAgXHJcbiIpOworKwkJCQl9CisrCQkJfQorKwkJfQorKworKwkJaWYoYWxsX2FuYV9jYWxfc3RhdHVzID09IEFOQUNBTF9FUlJPUikgeworKwkJCXJnX3pjYWxfY3RybCA9IDB4MjA7ICAvLyAwIGRCCisrCQkJLy90Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgwMGUwLCAoZGV2MWVfZTBfYW5hX2NhbF9yNSB8IHJnX3pjYWxfY3RybCkpOworKwkJfQorKwkJZWxzZSB7CisrCQkJcmdfemNhbF9jdHJsID0gTVQ3NTN4X1pDQUxfVE9fUjUwb2htX0dFX1RCTF8xMDBbcmdfemNhbF9jdHJsIC0gOV07CS8vIHdhaXQgTW9nIHpjYWwvcjUwIG1hcHBpbmcgdGFibGUKKysJCQlwcmludGsoICIgR0UgUjUwIEFuYUNhbCBEb25lISAoJWQpICgweCV4KSgweCV4KSBcclxuIiwgY250LCByZ196Y2FsX2N0cmwsIChyZ196Y2FsX2N0cmx8MHg4MCkpOworKwkJfQorKworKwkJaWYoY2FsaWJyYXRpb25fcGFpciA9PSBBTkFDQUxfUEFJUl9BKSB7CisrCQkJYWRfY2FsX2NvbXBfb3V0X2luaXQgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCAgcGh5YWRkciwgMHgxZSwgMHgwMTc0KSAmICh+MHg3ZjAwKTsKKysJCQkvL2FkX2NhbF9jb21wX291dF9pbml0ID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgIHBoeWFkZHIsIDB4MWUsIDB4MDE3NCk7CisrCQkJLy9wcmludGsoICIgR0UtYSAxZV8xNzQoMHgleCkoMHgleCksIDFlXzE3NSgweCV4KSAgXHJcbiIsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsICBwaHlhZGRyLCAweDFlLCAweDAxNzQpLCBhZF9jYWxfY29tcF9vdXRfaW5pdCwgdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgIHBoeWFkZHIsIDB4MWUsIDB4MDE3NSkpOworKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDAxNzQsIChhZF9jYWxfY29tcF9vdXRfaW5pdCB8ICgoKHJnX3pjYWxfY3RybDw8OCkmMHhmZjAwKSB8IDB4ODAwMCkpKTsJLy8gMWVfMTc0WzE1OjhdCisrCQkJLy9wcmludGsoICIgR0UtYSAxZV8xNzQoMHgleCksIDFlXzE3NSgweCV4KSAgXHJcbiIsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsICBwaHlhZGRyLCAweDFlLCAweDAxNzQpLCB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCAgcGh5YWRkciwgMHgxZSwgMHgwMTc1KSk7CisrCQl9CisrCQllbHNlIGlmKGNhbGlicmF0aW9uX3BhaXIgPT0gQU5BQ0FMX1BBSVJfQikgeworKwkJCWFkX2NhbF9jb21wX291dF9pbml0ID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgIHBoeWFkZHIsIDB4MWUsIDB4MDE3NCkgJiAofjB4MDA3Zik7CisrCQkJLy9hZF9jYWxfY29tcF9vdXRfaW5pdCA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsICBwaHlhZGRyLCAweDFlLCAweDAxNzQpOworKwkJCS8vcHJpbnRrKCAiIEdFLWIgMWVfMTc0KDB4JXgpKDB4JXgpLCAxZV8xNzUoMHgleCkgIFxyXG4iLCB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCAgcGh5YWRkciwgMHgxZSwgMHgwMTc0KSwgYWRfY2FsX2NvbXBfb3V0X2luaXQsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsICBwaHlhZGRyLCAweDFlLCAweDAxNzUpKTsKKysKKysJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgwMTc0LCAoYWRfY2FsX2NvbXBfb3V0X2luaXQgfCAoKChyZ196Y2FsX2N0cmw8PDApJjB4MDBmZikgfCAweDAwODApKSk7CS8vIDFlXzE3NFs3OjBdCisrCQkJLy9wcmludGsoICIgR0UtYiAxZV8xNzQoMHgleCksIDFlXzE3NSgweCV4KSAgXHJcbiIsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsICBwaHlhZGRyLCAweDFlLCAweDAxNzQpLCB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCAgcGh5YWRkciwgMHgxZSwgMHgwMTc1KSk7CisrCQl9CisrCQllbHNlIGlmKGNhbGlicmF0aW9uX3BhaXIgPT0gQU5BQ0FMX1BBSVJfQykgeworKwkJCWFkX2NhbF9jb21wX291dF9pbml0ID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgIHBoeWFkZHIsIDB4MWUsIDB4MDE3NSkgJiAofjB4N2YwMCk7CisrCQkJLy9hZF9jYWxfY29tcF9vdXRfaW5pdCA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsICBwaHlhZGRyLCAweDFlLCAweDAxNzUpOworKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDAxNzUsIChhZF9jYWxfY29tcF9vdXRfaW5pdCB8ICgoKHJnX3pjYWxfY3RybDw8OCkmMHhmZjAwKSB8IDB4ODAwMCkpKTsJLy8gMWVfMTc1WzE1OjhdCisrCQkJLy9wcmludGsoICIgR0UtYyAxZV8xNzQoMHgleCksIDFlXzE3NSgweCV4KSAgXHJcbiIsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsICBwaHlhZGRyLCAweDFlLCAweDAxNzQpLCB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCAgcGh5YWRkciwgMHgxZSwgMHgwMTc1KSk7CisrCQl9IGVsc2Ugey8vIGlmKGNhbGlicmF0aW9uX3BhaXIgPT0gQU5BQ0FMX1BBSVJfRCkKKysJCQlhZF9jYWxfY29tcF9vdXRfaW5pdCA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsICBwaHlhZGRyLCAweDFlLCAweDAxNzUpICYgKH4weDAwN2YpOworKwkJCS8vYWRfY2FsX2NvbXBfb3V0X2luaXQgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCAgcGh5YWRkciwgMHgxZSwgMHgwMTc1KTsKKysJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgwMTc1LCAoYWRfY2FsX2NvbXBfb3V0X2luaXQgfCAoKChyZ196Y2FsX2N0cmw8PDApJjB4MDBmZikgfCAweDAwODApKSk7CS8vIDFlXzE3NVs3OjBdCisrCQkJLy9wcmludGsoICIgR0UtZCAxZV8xNzQoMHgleCksIDFlXzE3NSgweCV4KSAgXHJcbiIsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsICBwaHlhZGRyLCAweDFlLCAweDAxNzQpLCB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCAgcGh5YWRkciwgMHgxZSwgMHgwMTc1KSk7CisrCQl9CisrCQkvL3RjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDAwZTAsICgocmdfemNhbF9jdHJsPDw4KXxyZ196Y2FsX2N0cmwpKTsKKysJfQorKworKwlwcmludGsoICIgR0UgMWVfMTc0KDB4JXgpLCAxZV8xNzUoMHgleCkgIFxyXG4iLCB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCAgcGh5YWRkciwgMHgxZSwgMHgwMTc0KSwgdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgIHBoeWFkZHIsIDB4MWUsIDB4MDE3NSkpOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgUEhZMCwgMHgxZSwgMHgwMGRiLCAweDAwMDApOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgwMGRiLCAweDAwMDApOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgUEhZMCwgMHgxZSwgMHgwMGRjLCAweDAwMDApOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgwMGRjLCAweDAwMDApOworKworKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGludCBnZV9jYWxfdHhfb2Zmc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgIHU4IHBoeWFkZHIsIHUzMiBkZWxheSkKKyt7CisrCXU4IGFsbF9hbmFfY2FsX3N0YXR1cywgY2FsaWJyYXRpb25fcGFpcjsKKysJdTE2IGFkX2NhbF9jb21wX291dF9pbml0OworKwlpbnQgY2FsaWJyYXRpb25fcG9sYXJpdHksIHR4X29mZnNldF90ZW1wOworKwl1OCB0eF9vZmZzZXRfcmVnX3NoaWZ0LCB0YWJsX2lkeCwgaTsKKysJdTggY250ID0gMDsKKysJdTE2IHR4X29mZnNldF9yZWcsIHJlZ190ZW1wLCBjYWxfdGVtcDsKKysJLy9zd2l0Y2hfcGh5X3dyaXRlKHBoeWFkZHIsIFIwLCAweDIxMDApOy8vaGFycnkgdG1wCisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBQSFkwLCAweDFlLCAweDAwZGIsIDB4MDEwMCk7CS8vIDFlX2RiWzEyXTpyZ19jYWxfY2tpbnYsIFs4XTpyZ19hbmFfY2FsZW4sIFs0XTpyZ19yZXh0X2NhbGVuLCBbMF06cmdfemNhbGVuX2EKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIFBIWTAsIDB4MWUsIDB4MDBkYywgMHgwMDAxKTsJLy8gMWVfZGNbMF06cmdfdHh2b3NfY2FsZW4KKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIDB4MDA5NiwgMHg4MDAwKTsJLy8gMWVfOTZbMTVdOmJ5cGFzc190eF9vZmZzZXRfY2FsLCBIdyBieXBhc3MsIEZ3IGNhbAorKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgwMDNlLCAweGY4MDgpOwkvLyAxZV8zZQorKwlmb3IoaSA9IDA7IGkgPD0gNDsgaSsrKQorKwkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIGksIDB4MWUsIDB4MDBkZCwgMHgwMDAwKTsKKysJZm9yKGNhbGlicmF0aW9uX3BhaXIgPSBBTkFDQUxfUEFJUl9BOyBjYWxpYnJhdGlvbl9wYWlyIDw9IEFOQUNBTF9QQUlSX0Q7IGNhbGlicmF0aW9uX3BhaXIgKyspCisrCXsKKysJCXRhYmxfaWR4ID0gMzE7CisrCQl0eF9vZmZzZXRfdGVtcCA9IE1UNzUzeF9UWF9PRkZTRVRfVEJMW3RhYmxfaWR4XTsKKysKKysJCWlmKGNhbGlicmF0aW9uX3BhaXIgPT0gQU5BQ0FMX1BBSVJfQSkgeworKwkJCS8vdGNfcGh5X3dyaXRlX2Rldl9yZWcocGh5YWRkciwgMHgxZSwgMHgxNDUsIDB4NTAxMCk7CisrCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIDB4MDBkZCwgMHgxMDAwKTsJCQkJLy8gMWVfZGRbMTJdOnJnX3R4Z19jYWxlbl9hCisrCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIDB4MDE3ZCwgKDB4ODAwMHxEQUNfSU5fMFYpKTsJLy8gMWVfMTdkOmRhY19pbjBfYQorKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDAxODEsICgweDgwMDB8REFDX0lOXzBWKSk7CS8vIDFlXzE4MTpkYWNfaW4xX2EKKysJCQkvL3ByaW50aygidHggb2Zmc2V0IHBhaXJBIDFlX2RkID0gJXgsIDFlXzE3ZD0leCwgMWVfMTgxPSV4XG4iLCB0Y19waHlfcmVhZF9kZXZfcmVnKHBoeWFkZHIsIDB4MWUsIDB4MDBkZCksIHRjX3BoeV9yZWFkX2Rldl9yZWcocGh5YWRkciwgMHgxZSwgMHgwMTdkKSwgdGNfcGh5X3JlYWRfZGV2X3JlZyhwaHlhZGRyLCAweDFlLCAweDAxODEpKTsKKysJCQlyZWdfdGVtcCA9ICh0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDAxNzIpICYgKH4weDNmMDApKTsKKysJCQl0eF9vZmZzZXRfcmVnX3NoaWZ0ID0gODsJCQkJCQkJCQkvLyAxZV8xNzJbMTM6OF0KKysJCQl0eF9vZmZzZXRfcmVnID0gMHgwMTcyOworKworKwkJCS8vdGNfcGh5X3dyaXRlX2Rldl9yZWcocGh5YWRkciwgMHgxZSwgdHhfb2Zmc2V0X3JlZywgKHJlZ190ZW1wfCh0eF9vZmZzZXRfdGVtcDw8dHhfb2Zmc2V0X3JlZ19zaGlmdCkpKTsKKysJCX0gZWxzZSBpZihjYWxpYnJhdGlvbl9wYWlyID09IEFOQUNBTF9QQUlSX0IpIHsKKysJCQkvL3RjX3BoeV93cml0ZV9kZXZfcmVnKHBoeWFkZHIsIDB4MWUsIDB4MTQ1LCAweDUwMTgpOworKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDAwZGQsIDB4MDEwMCk7CQkJCS8vIDFlX2RkWzhdOnJnX3R4Z19jYWxlbl9iCisrCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIDB4MDE3ZSwgKDB4ODAwMHxEQUNfSU5fMFYpKTsJLy8gMWVfMTdlOmRhY19pbjBfYgorKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDAxODIsICgweDgwMDB8REFDX0lOXzBWKSk7CS8vIDFlXzE4MjpkYWNfaW4xX2IKKysJCQkvL3ByaW50aygidHggb2Zmc2V0IHBhaXJCIDFlX2RkID0gJXgsIDFlXzE3ZD0leCwgMWVfMTgxPSV4XG4iLCB0Y19waHlfcmVhZF9kZXZfcmVnKHBoeWFkZHIsIDB4MWUsIDB4MDBkZCksIHRjX3BoeV9yZWFkX2Rldl9yZWcocGh5YWRkciwgMHgxZSwgMHgwMTdkKSwgdGNfcGh5X3JlYWRfZGV2X3JlZyhwaHlhZGRyLCAweDFlLCAweDAxODEpKTsKKysJCQlyZWdfdGVtcCA9ICh0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDAxNzIpICYgKH4weDAwM2YpKTsKKysJCQl0eF9vZmZzZXRfcmVnX3NoaWZ0ID0gMDsJCQkJCQkJCQkvLyAxZV8xNzJbNTowXQorKwkJCXR4X29mZnNldF9yZWcgPSAweDAxNzI7CisrCQkJLy90Y19waHlfd3JpdGVfZGV2X3JlZyhwaHlhZGRyLCAweDFlLCB0eF9vZmZzZXRfcmVnLCAocmVnX3RlbXB8KHR4X29mZnNldF90ZW1wPDx0eF9vZmZzZXRfcmVnX3NoaWZ0KSkpOworKwkJfSBlbHNlIGlmKGNhbGlicmF0aW9uX3BhaXIgPT0gQU5BQ0FMX1BBSVJfQykgeworKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDAwZGQsIDB4MDAxMCk7CQkJCS8vIDFlX2RkWzRdOnJnX3R4Z19jYWxlbl9jCisrCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIDB4MDE3ZiwgKDB4ODAwMHxEQUNfSU5fMFYpKTsJLy8gMWVfMTdmOmRhY19pbjBfYworKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDAxODMsICgweDgwMDB8REFDX0lOXzBWKSk7CS8vIDFlXzE4MzpkYWNfaW4xX2MKKysJCQlyZWdfdGVtcCA9ICh0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDAxNzMpICYgKH4weDNmMDApKTsKKysJCQkvL3ByaW50aygidHggb2Zmc2V0IHBhaXJDIDFlX2RkID0gJXgsIDFlXzE3ZD0leCwgMWVfMTgxPSV4XG4iLCB0Y19waHlfcmVhZF9kZXZfcmVnKHBoeWFkZHIsIDB4MWUsIDB4MDBkZCksIHRjX3BoeV9yZWFkX2Rldl9yZWcocGh5YWRkciwgMHgxZSwgMHgwMTdkKSwgdGNfcGh5X3JlYWRfZGV2X3JlZyhwaHlhZGRyLCAweDFlLCAweDAxODEpKTsKKysJCQl0eF9vZmZzZXRfcmVnX3NoaWZ0ID0gODsJCQkJCQkJCQkvLyAxZV8xNzNbMTM6OF0KKysJCQl0eF9vZmZzZXRfcmVnID0gMHgwMTczOworKwkJCS8vdGNfcGh5X3dyaXRlX2Rldl9yZWcocGh5YWRkciwgMHgxZSwgdHhfb2Zmc2V0X3JlZywgKHJlZ190ZW1wfCh0eF9vZmZzZXRfdGVtcDw8dHhfb2Zmc2V0X3JlZ19zaGlmdCkpKTsKKysJCX0gZWxzZSB7Ly8gaWYoY2FsaWJyYXRpb25fcGFpciA9PSBBTkFDQUxfUEFJUl9EKQorKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDAwZGQsIDB4MDAwMSk7CQkJCS8vIDFlX2RkWzBdOnJnX3R4Z19jYWxlbl9kCisrCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIDB4MDE4MCwgKDB4ODAwMHxEQUNfSU5fMFYpKTsJLy8gMWVfMTgwOmRhY19pbjBfZAorKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDAxODQsICgweDgwMDB8REFDX0lOXzBWKSk7CS8vIDFlXzE4NDpkYWNfaW4xX2QKKysJCQkvL3ByaW50aygidHggb2Zmc2V0IHBhaXJEIDFlX2RkID0gJXgsIDFlXzE3ZD0leCwgMWVfMTgxPSV4XG4iLCB0Y19waHlfcmVhZF9kZXZfcmVnKHBoeWFkZHIsIDB4MWUsIDB4MDBkZCksIHRjX3BoeV9yZWFkX2Rldl9yZWcocGh5YWRkciwgMHgxZSwgMHgwMTdkKSwgdGNfcGh5X3JlYWRfZGV2X3JlZyhwaHlhZGRyLCAweDFlLCAweDAxODEpKTsKKysJCQlyZWdfdGVtcCA9ICh0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDAxNzMpICYgKH4weDAwM2YpKTsKKysJCQl0eF9vZmZzZXRfcmVnX3NoaWZ0ID0gMDsJCQkJCQkJCQkvLyAxZV8xNzNbNTowXQorKwkJCXR4X29mZnNldF9yZWcgPSAweDAxNzM7CisrCQkJLy90Y19waHlfd3JpdGVfZGV2X3JlZyhwaHlhZGRyLCAweDFlLCB0eF9vZmZzZXRfcmVnLCAocmVnX3RlbXB8KHR4X29mZnNldF90ZW1wPDx0eF9vZmZzZXRfcmVnX3NoaWZ0KSkpOworKwkJfQorKwkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIHR4X29mZnNldF9yZWcsIChyZWdfdGVtcHwodHhfb2Zmc2V0X3RlbXA8PHR4X29mZnNldF9yZWdfc2hpZnQpKSk7CS8vIDFlXzE3MiwgMWVfMTczCisrCQlhbGxfYW5hX2NhbF9zdGF0dXMgPSBhbGxfZ2VfYW5hX2NhbF93YWl0KGRzLCBkZWxheSwgcGh5YWRkcik7IC8vIGRlbGF5IDIwIHVzZWMKKysJCWlmKGFsbF9hbmFfY2FsX3N0YXR1cyA9PSAwKSB7CisrCQkJYWxsX2FuYV9jYWxfc3RhdHVzID0gQU5BQ0FMX0VSUk9SOworKwkJCXByaW50ayggIiBHRSBUeCBvZmZzZXQgQW5hQ2FsIEVSUk9SIGluaXQhICAgXHJcbiIpOworKwkJCXJldHVybiAtMTsKKysJCX0KKysKKysJCWFkX2NhbF9jb21wX291dF9pbml0ID0gKHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsIFBIWTAsIDB4MWUsIDB4MDE3YSk+PjgpICYgMHgxOwkJLy8gMWVfMTdhWzhdOmFkX2NhbF9jb21wX291dAorKwkJaWYoYWRfY2FsX2NvbXBfb3V0X2luaXQgPT0gMSkKKysJCQljYWxpYnJhdGlvbl9wb2xhcml0eSA9IDE7CisrCQllbHNlCisrCQkJY2FsaWJyYXRpb25fcG9sYXJpdHkgPSAtMTsKKysKKysJCWNudCA9IDA7CisrCQkvL3ByaW50aygiVFggb2Zmc2V0IGNudCA9ICVkLCB0YWJsX2lkeD0gJXgsIG9mZnNldF92YWwgPSAleFxuIiwgY250LCB0YWJsX2lkeCwgTVQ3NTN4X1RYX09GRlNFVF9UQkxbdGFibF9pZHhdKTsKKysJCXdoaWxlKGFsbF9hbmFfY2FsX3N0YXR1cyA8IEFOQUNBTF9FUlJPUikgeworKworKwkJCWNudCArKzsKKysJCQl0YWJsX2lkeCArPSBjYWxpYnJhdGlvbl9wb2xhcml0eTsKKysJCQkvL3R4X29mZnNldF90ZW1wICs9IGNhbGlicmF0aW9uX3BvbGFyaXR5OworKwkJCS8vY2FsX3RlbXAgPSB0eF9vZmZzZXRfdGVtcDsKKysJCQljYWxfdGVtcCA9IE1UNzUzeF9UWF9PRkZTRVRfVEJMW3RhYmxfaWR4XTsKKysJCQkvL3ByaW50aygiVFggb2Zmc2V0IGNudCA9ICVkLCB0YWJsX2lkeD0gJXgsIG9mZnNldF92YWwgPSAleFxuIiwgY250LCB0YWJsX2lkeCwgTVQ3NTN4X1RYX09GRlNFVF9UQkxbdGFibF9pZHhdKTsKKysJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgdHhfb2Zmc2V0X3JlZywgKHJlZ190ZW1wfChjYWxfdGVtcDw8dHhfb2Zmc2V0X3JlZ19zaGlmdCkpKTsKKysKKysJCQlhbGxfYW5hX2NhbF9zdGF0dXMgPSBhbGxfZ2VfYW5hX2NhbF93YWl0KGRzLCBkZWxheSwgcGh5YWRkcik7IC8vIGRlbGF5IDIwIHVzZWMKKysJCQlpZihhbGxfYW5hX2NhbF9zdGF0dXMgPT0gMCkgeworKwkJCQlhbGxfYW5hX2NhbF9zdGF0dXMgPSBBTkFDQUxfRVJST1I7CisrCQkJCXByaW50ayggIiBHRSBUeCBvZmZzZXQgQW5hQ2FsIEVSUk9SIGluaXQgMiEgICBcclxuIik7CisrCQkJCXJldHVybiAtMTsKKysJCQl9IGVsc2UgaWYoKCh0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCBQSFkwLCAweDFlLCAweDAxN2EpPj44KSYweDEpICE9IGFkX2NhbF9jb21wX291dF9pbml0KSB7CisrCQkJCWFsbF9hbmFfY2FsX3N0YXR1cyA9IEFOQUNBTF9GSU5JU0g7CisrCQkJfSBlbHNlIHsKKysJCQkJaWYoKHRhYmxfaWR4ID09IDApfHwodGFibF9pZHggPT0gMHgzZikpIHsKKysJCQkJCWFsbF9hbmFfY2FsX3N0YXR1cyA9IEFOQUNBTF9TQVRVUkFUSU9OOyAgLy8gbmVlZCB0byBGVAorKwkJCQkJcHJpbnRrKCAiIEdFIFR4IG9mZnNldCBBbmFDYWwgU2F0dXJhdGlvbiEgIFxyXG4iKTsKKysJCQkJfQorKwkJCX0KKysJCX0KKysKKysJCWlmKGFsbF9hbmFfY2FsX3N0YXR1cyA9PSBBTkFDQUxfRVJST1IpIHsKKysJCQl0eF9vZmZzZXRfdGVtcCA9IFRYX0FNUF9PRkZTRVRfME1WOworKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCB0eF9vZmZzZXRfcmVnLCAocmVnX3RlbXB8KHR4X29mZnNldF90ZW1wPDx0eF9vZmZzZXRfcmVnX3NoaWZ0KSkpOworKwkJfSBlbHNlIHsKKysJCQlwcmludGsoICIgR0UgVHggb2Zmc2V0IEFuYUNhbCBEb25lISAocGFpci0lZCkoJWQpKDB4JXgpIDB4MWVfJXg9MHgleFxuIiwgY2FsaWJyYXRpb25fcGFpciwgY250LCBNVDc1M3hfVFhfT0ZGU0VUX1RCTFt0YWJsX2lkeF0sIHR4X29mZnNldF9yZWcsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIHR4X29mZnNldF9yZWcpKTsKKysJCX0KKysJfQorKworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgwMTdkLCAweDAwMDApOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgwMTdlLCAweDAwMDApOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgwMTdmLCAweDAwMDApOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgwMTgwLCAweDAwMDApOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgwMTgxLCAweDAwMDApOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgwMTgyLCAweDAwMDApOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgwMTgzLCAweDAwMDApOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgwMTg0LCAweDAwMDApOworKworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgUEhZMCwgMHgxZSwgMHgwMGRiLCAweDAwMDApOwkvLyBkaXNhYmxlIGFuYWxvZyBjYWxpYnJhdGlvbiBjaXJjdWl0CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBQSFkwLCAweDFlLCAweDAwZGMsIDB4MDAwMCk7CS8vIGRpc2FibGUgVHggb2Zmc2V0IGNhbGlicmF0aW9uIGNpcmN1aXQKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIDB4MDBkYiwgMHgwMDAwKTsJLy8gZGlzYWJsZSBhbmFsb2cgY2FsaWJyYXRpb24gY2lyY3VpdAorKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgwMGRjLCAweDAwMDApOwkvLyBkaXNhYmxlIFR4IG9mZnNldCBjYWxpYnJhdGlvbiBjaXJjdWl0CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDAwM2UsIDB4MDAwMCk7CS8vIGRpc2FibGUgVHggVkxEIGZvcmNlIG1vZGUKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIDB4MDBkZCwgMHgwMDAwKTsJLy8gZGlzYWJsZSBUeCBvZmZzZXQvYW1wbGl0dWRlIGNhbGlicmF0aW9uIGNpcmN1aXQKKysKKysJcmV0dXJuIDA7CisrfQorKworK3UxNiB0eF9hbXBfY2hlY2tfdGhyZXMoaW50IHBhaXIsIHUzMiByZWcsIHUxNiB2YWwsIHMxNiBvZmZzZXQpCisreworKwlpZiAoKG9mZnNldCA8IDAgJiYgKDAgLSBvZmZzZXQpID4gVFhfQU1QX01BWF9PRkZTRVQpIHx8CisrCSAgICAob2Zmc2V0ID4gVFhfQU1QX01BWF9PRkZTRVQpKSB7CisrCQlwcl9pbmZvKCIgb2Zmc2V0PSVkIGV4Y2VlZCB0eCBhbXAgbWF4IG9mZnNldD0lZFxuIiwgb2Zmc2V0LCBUWF9BTVBfTUFYX09GRlNFVCk7CisrCQlyZXR1cm4gdmFsOworKwl9CisrCisrCWlmIChvZmZzZXQgPCAwICYmIHZhbCA8IFRYX0FNUF9MT1dfVFMgLSBvZmZzZXQpIHsKKysJCWlmICh2YWwgPCBUWF9BTVBfTE9XRVNUX1RTIC0gb2Zmc2V0KSB7CisrCQkJcHJfaW5mbygiIEdFIFR4IGFtcCBBbmFDYWwgdW5kZXJmbG93ISAocGFpci0lZCkoMWVfJXgpIHNlZWQgMHgleCA8IDB4JXgpXG4iLAorKwkJCQlwYWlyLCByZWcsIHZhbCwgVFhfQU1QX0xPV0VTVF9UUyAtIG9mZnNldCk7CisrCQl9CisrCQlyZXR1cm4gMDsKKysJfQorKworKwlpZiAob2Zmc2V0ID49IDAgJiYgdmFsID4gVFhfQU1QX0hJR0hfVFMgLSBvZmZzZXQpIHsKKysJCWlmICggdmFsID4gVFhfQU1QX0hJR0hFU1RfVFMgLSBvZmZzZXQpIHsKKysJCQlwcl9pbmZvKCIgR0UgVHggYW1wIEFuYUNhbCBvdmVyZmxvdyEgKHBhaXItJWQpKDFlXyV4KSBzZWVkID0gMHgleCA+IDB4JXgpXG4iLAorKwkJCQlwYWlyLCByZWcsIHZhbCwgVFhfQU1QX0hJR0hFU1RfVFMgLSBvZmZzZXQpOworKwkJfQorKwkJcmV0dXJuIFRYX0FNUF9NQVg7CisrCX0KKysKKysJcmV0dXJuIHZhbCArIG9mZnNldDsKKyt9CisrCisrc3RhdGljIGludCBnZV9jYWxfdHhfYW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgdTggcGh5YWRkciwgdTMyIGRlbGF5KQorK3sKKysJdTgJYWxsX2FuYV9jYWxfc3RhdHVzLCBjYWxpYnJhdGlvbl9wYWlyLCBpOworKwl1MTYJYWRfY2FsX2NvbXBfb3V0X2luaXQ7CisrCWludAljYWxpYnJhdGlvbl9wb2xhcml0eTsKKysJdTMyCXR4X2FtcF9yZWdfc2hpZnQ7CisrCXUxNglyZWdfdGVtcDsKKysJdTMyCXR4X2FtcF90ZW1wLCB0eF9hbXBfcmVnLCBjbnQ9MCwgdHhfYW1wX3JlZ18xMDA7CisrCXUzMglkZWJ1Z190bXAsIHJlZ19iYWNrdXAsIHJlZ190bXA7CisrCXUzMglvcmlnXzFlXzExLCBvcmlnXzFmXzMwMDsKKysKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIFBIWTAsIDB4MWUsIDB4MDBkYiwgMHgxMTAwKTsJLy8gMWVfZGJbMTJdOnJnX2NhbF9ja2ludiwgWzhdOnJnX2FuYV9jYWxlbiwgWzRdOnJnX3JleHRfY2FsZW4sIFswXTpyZ196Y2FsZW5fYQorKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgUEhZMCwgMHgxZSwgMHgwMGRjLCAweDAwMDEpOwkvLyAxZV9kY1swXTpyZ190eHZvc19jYWxlbgorKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgUEhZMCwgMHgxZSwgMHgwMGUxLCAweDAwMTApOwkvLyAxZV9lMVs0XTpzZWxlY3QgMVYKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIDB4MDAzZSwgMHhmODA4KTsJLy8gMWVfM2U6ZW5hYmxlIFR4IFZMRAorKworKwlvcmlnXzFlXzExID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgxMSk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDExLCAweGZmMDApOworKy8vCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFmLCAweDI3YSwgMHgzMyk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweGM5LCAweGZmZmYpOworKwlvcmlnXzFmXzMwMCA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWYsIDB4MzAwKTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWYsIDB4MzAwLCAweDQpOworKwlmb3IoaSA9IDA7IGkgPD0gNDsgaSsrKQorKwkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIGksIDB4MWUsIDB4MDBkZCwgMHgwMDAwKTsKKysJZm9yKGNhbGlicmF0aW9uX3BhaXIgPSBBTkFDQUxfUEFJUl9BOyBjYWxpYnJhdGlvbl9wYWlyIDw9IEFOQUNBTF9QQUlSX0Q7IGNhbGlicmF0aW9uX3BhaXIgKyspIHsKKysJCXR4X2FtcF90ZW1wID0gMHgyMDsJLy8gc3RhcnQgd2l0aCAwIGRCCisrCisrCQlpZihjYWxpYnJhdGlvbl9wYWlyID09IEFOQUNBTF9QQUlSX0EpIHsKKysJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgwMGRkLCAweDEwMDApOwkJCQkvLyAxZV9kZFsxMl06dHhfYSBhbXAgY2FsaWJyYXRpb24gZW5hYmxlCisrCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIDB4MDE3ZCwgKDB4ODAwMHxEQUNfSU5fMlYpKTsJLy8gMWVfMTdkOmRhY19pbjBfYQorKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDAxODEsICgweDgwMDB8REFDX0lOXzJWKSk7CS8vIDFlXzE4MTpkYWNfaW4xX2EKKysJCQlyZWdfdGVtcCA9ICh0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCAgcGh5YWRkciwgMHgxZSwgMHgwMTIpICYgKH4weGZjMDApKTsKKysJCQl0eF9hbXBfcmVnX3NoaWZ0ID0gMTA7CQkJCQkJCQkJCS8vIDFlXzEyWzE1OjEwXQorKwkJCXR4X2FtcF9yZWcgPSAweDEyOworKwkJCXR4X2FtcF9yZWdfMTAwID0gMHgxNjsKKysJCX0gZWxzZSBpZihjYWxpYnJhdGlvbl9wYWlyID09IEFOQUNBTF9QQUlSX0IpIHsKKysJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgwMGRkLCAweDAxMDApOwkJCQkvLyAxZV9kZFs4XTp0eF9iIGFtcCBjYWxpYnJhdGlvbiBlbmFibGUKKysJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgwMTdlLCAoMHg4MDAwfERBQ19JTl8yVikpOwkvLyAxZV8xN2U6ZGFjX2luMF9iCisrCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIDB4MDE4MiwgKDB4ODAwMHxEQUNfSU5fMlYpKTsJLy8gMWVfMTgyOmRhY19pbjFfYgorKwkJCXJlZ190ZW1wID0gKHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsICBwaHlhZGRyLCAweDFlLCAweDAxNykgJiAofjB4M2YwMCkpOworKwkJCXR4X2FtcF9yZWdfc2hpZnQgPSA4OwkJCQkJCQkJCQkvLyAxZV8xN1sxMzo4XQorKwkJCXR4X2FtcF9yZWcgPSAweDE3OworKwkJCXR4X2FtcF9yZWdfMTAwID0gMHgxODsKKysJCX0gZWxzZSBpZihjYWxpYnJhdGlvbl9wYWlyID09IEFOQUNBTF9QQUlSX0MpIHsKKysJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgwMGRkLCAweDAwMTApOwkJCQkvLyAxZV9kZFs0XTp0eF9jIGFtcCBjYWxpYnJhdGlvbiBlbmFibGUKKysJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgwMTdmLCAoMHg4MDAwfERBQ19JTl8yVikpOwkvLyAxZV8xN2Y6ZGFjX2luMF9jCisrCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIDB4MDE4MywgKDB4ODAwMHxEQUNfSU5fMlYpKTsJLy8gMWVfMTgzOmRhY19pbjFfYworKwkJCXJlZ190ZW1wID0gKHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsICBwaHlhZGRyLCAweDFlLCAweDAxOSkgJiAofjB4M2YwMCkpOworKwkJCXR4X2FtcF9yZWdfc2hpZnQgPSA4OwkJCQkJCQkJCQkvLyAxZV8xOVsxMzo4XQorKwkJCXR4X2FtcF9yZWcgPSAweDE5OworKwkJCXR4X2FtcF9yZWdfMTAwID0gMHgyMDsKKysJCX0gZWxzZSB7IC8vaWYoY2FsaWJyYXRpb25fcGFpciA9PSBBTkFDQUxfUEFJUl9EKQorKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDAwZGQsIDB4MDAwMSk7CQkJCS8vIDFlX2RkWzBdOnR4X2QgYW1wIGNhbGlicmF0aW9uIGVuYWJsZQorKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDAxODAsICgweDgwMDB8REFDX0lOXzJWKSk7CS8vIDFlXzE4MDpkYWNfaW4wX2QKKysJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgwMTg0LCAoMHg4MDAwfERBQ19JTl8yVikpOwkvLyAxZV8xODQ6ZGFjX2luMV9kCisrCQkJcmVnX3RlbXAgPSAodGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgIHBoeWFkZHIsIDB4MWUsIDB4MDIxKSAmICh+MHgzZjAwKSk7CisrCQkJdHhfYW1wX3JlZ19zaGlmdCA9IDg7CQkJCQkJCQkJCS8vIDFlXzIxWzEzOjhdCisrCQkJdHhfYW1wX3JlZyA9IDB4MjE7CisrCQkJdHhfYW1wX3JlZ18xMDAgPSAweDIyOworKwkJfQorKwkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoIGRzLCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnLCAodHhfYW1wX3RlbXB8KHR4X2FtcF90ZW1wPDx0eF9hbXBfcmVnX3NoaWZ0KSkpOwkvLyAxZV8xMiwgMWVfMTcsIDFlXzE5LCAxZV8yMQorKwkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWdfMTAwLCAodHhfYW1wX3RlbXB8KHR4X2FtcF90ZW1wPDx0eF9hbXBfcmVnX3NoaWZ0KSkpOworKwkJYWxsX2FuYV9jYWxfc3RhdHVzID0gYWxsX2dlX2FuYV9jYWxfd2FpdChkcywgZGVsYXksIHBoeWFkZHIpOyAJLy8gZGVsYXkgMjAgdXNlYworKwkJaWYoYWxsX2FuYV9jYWxfc3RhdHVzID09IDApIHsKKysJCQlhbGxfYW5hX2NhbF9zdGF0dXMgPSBBTkFDQUxfRVJST1I7CisrCQkJcHJpbnRrKCAiIEdFIFR4IGFtcCBBbmFDYWwgRVJST1IgaW5pdCBpbml0ISAgIFxyXG4iKTsKKysJCQlyZXR1cm4gLTE7CisrCQl9CisrCisrCQlhZF9jYWxfY29tcF9vdXRfaW5pdCA9ICh0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCAgUEhZMCwgMHgxZSwgMHgwMTdhKT4+OCkgJiAweDE7CQkvLyAxZV8xN2FbOF06YWRfY2FsX2NvbXBfb3V0CisrCQlpZihhZF9jYWxfY29tcF9vdXRfaW5pdCA9PSAxKQorKwkJCWNhbGlicmF0aW9uX3BvbGFyaXR5ID0gLTE7CisrCQllbHNlCisrCQkJY2FsaWJyYXRpb25fcG9sYXJpdHkgPSAxOworKworKwkJY250ID0wOworKwkJd2hpbGUoYWxsX2FuYV9jYWxfc3RhdHVzIDwgQU5BQ0FMX0VSUk9SKSB7CisrCQkJY250ICsrOworKwkJCXR4X2FtcF90ZW1wICs9IGNhbGlicmF0aW9uX3BvbGFyaXR5OworKwkJCS8vcHJpbnRrKCJ0eF9hbXAgOiAleCwgMWUgJXggPSAleFxuIiwgdHhfYW1wX3RlbXAsIHR4X2FtcF9yZWcsIChyZWdfdGVtcHwodHhfYW1wX3RlbXA8PHR4X2FtcF9yZWdfc2hpZnQpKSk7CisrCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoIGRzLCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnLCAodHhfYW1wX3RlbXB8KHR4X2FtcF90ZW1wPDx0eF9hbXBfcmVnX3NoaWZ0KSkpOworKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnXzEwMCwgKHR4X2FtcF90ZW1wfCh0eF9hbXBfdGVtcDw8dHhfYW1wX3JlZ19zaGlmdCkpKTsKKysJCQlhbGxfYW5hX2NhbF9zdGF0dXMgPSBhbGxfZ2VfYW5hX2NhbF93YWl0KGRzLCBkZWxheSwgcGh5YWRkcik7IC8vIGRlbGF5IDIwIHVzZWMKKysJCQlpZihhbGxfYW5hX2NhbF9zdGF0dXMgPT0gMCkgeworKwkJCQlhbGxfYW5hX2NhbF9zdGF0dXMgPSBBTkFDQUxfRVJST1I7CisrCQkJCXByaW50ayggIiBHRSBUeCBhbXAgQW5hQ2FsIEVSUk9SIDIhICAgXHJcbiIpOworKwkJCQlyZXR1cm4gLTE7CisrCQkJfSBlbHNlIGlmKCgodGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgIFBIWTAsIDB4MWUsIDB4MDE3YSk+PjgpJjB4MSkgIT0gYWRfY2FsX2NvbXBfb3V0X2luaXQpIHsKKysJCQkJLy9wcmludGsoIlRYIEFNUCBBTkFDQUxfRklOSVNIXG4iKTsKKysJCQkJYWxsX2FuYV9jYWxfc3RhdHVzID0gQU5BQ0FMX0ZJTklTSDsKKysJCQkJaWYgKHBoeWFkZHIgPT0gMCkgeworKwkJCQkJaWYgKGNhbGlicmF0aW9uX3BhaXIgPT0gQU5BQ0FMX1BBSVJfQSkKKysJCQkJCQl0eF9hbXBfdGVtcCA9IHR4X2FtcF90ZW1wIC0gMjsKKysJCQkJCWVsc2UgaWYoY2FsaWJyYXRpb25fcGFpciA9PSBBTkFDQUxfUEFJUl9CKQorKwkJCQkJCXR4X2FtcF90ZW1wID0gdHhfYW1wX3RlbXAgLSAxOworKwkJCQkJZWxzZSBpZihjYWxpYnJhdGlvbl9wYWlyID09IEFOQUNBTF9QQUlSX0MpCisrCQkJCQkJdHhfYW1wX3RlbXAgPSB0eF9hbXBfdGVtcCAtIDI7CisrCQkJCQllbHNlIGlmKGNhbGlicmF0aW9uX3BhaXIgPT0gQU5BQ0FMX1BBSVJfRCkKKysJCQkJCQl0eF9hbXBfdGVtcCA9IHR4X2FtcF90ZW1wIC0gMTsKKysJCQkJfSBlbHNlIGlmIChwaHlhZGRyID09IDEpIHsKKysJCQkJCWlmIChjYWxpYnJhdGlvbl9wYWlyID09IEFOQUNBTF9QQUlSX0EpCisrCQkJCQkJdHhfYW1wX3RlbXAgPSB0eF9hbXBfdGVtcCAtIDE7CisrCQkJCQllbHNlIGlmKGNhbGlicmF0aW9uX3BhaXIgPT0gQU5BQ0FMX1BBSVJfQikKKysJCQkJCQl0eF9hbXBfdGVtcCA9IHR4X2FtcF90ZW1wIDsKKysJCQkJCWVsc2UgaWYoY2FsaWJyYXRpb25fcGFpciA9PSBBTkFDQUxfUEFJUl9DKQorKwkJCQkJCXR4X2FtcF90ZW1wID0gdHhfYW1wX3RlbXAgLSAxOworKwkJCQkJZWxzZSBpZihjYWxpYnJhdGlvbl9wYWlyID09IEFOQUNBTF9QQUlSX0QpCisrCQkJCQkJdHhfYW1wX3RlbXAgPSB0eF9hbXBfdGVtcCAtIDE7CisrCQkJCX0gZWxzZSBpZiAocGh5YWRkciA9PSAyKSB7CisrCQkJCQlpZiAoY2FsaWJyYXRpb25fcGFpciA9PSBBTkFDQUxfUEFJUl9BKQorKwkJCQkJCXR4X2FtcF90ZW1wID0gdHhfYW1wX3RlbXA7CisrCQkJCQllbHNlIGlmKGNhbGlicmF0aW9uX3BhaXIgPT0gQU5BQ0FMX1BBSVJfQikKKysJCQkJCQl0eF9hbXBfdGVtcCA9IHR4X2FtcF90ZW1wIC0gMTsKKysJCQkJCWVsc2UgaWYoY2FsaWJyYXRpb25fcGFpciA9PSBBTkFDQUxfUEFJUl9DKQorKwkJCQkJCXR4X2FtcF90ZW1wID0gdHhfYW1wX3RlbXA7CisrCQkJCQllbHNlIGlmKGNhbGlicmF0aW9uX3BhaXIgPT0gQU5BQ0FMX1BBSVJfRCkKKysJCQkJCQl0eF9hbXBfdGVtcCA9IHR4X2FtcF90ZW1wIC0gMTsKKysJCQkJfSBlbHNlIGlmIChwaHlhZGRyID09IDMpIHsKKysJCQkJCXR4X2FtcF90ZW1wID0gdHhfYW1wX3RlbXA7CisrCQkJCX0gZWxzZSBpZiAocGh5YWRkciA9PSA0KSB7CisrCQkJCQlpZiAoY2FsaWJyYXRpb25fcGFpciA9PSBBTkFDQUxfUEFJUl9BKQorKwkJCQkJCXR4X2FtcF90ZW1wID0gdHhfYW1wX3RlbXA7CisrCQkJCQllbHNlIGlmKGNhbGlicmF0aW9uX3BhaXIgPT0gQU5BQ0FMX1BBSVJfQikKKysJCQkJCQl0eF9hbXBfdGVtcCA9IHR4X2FtcF90ZW1wIC0gMTsKKysJCQkJCWVsc2UgaWYoY2FsaWJyYXRpb25fcGFpciA9PSBBTkFDQUxfUEFJUl9DKQorKwkJCQkJCXR4X2FtcF90ZW1wID0gdHhfYW1wX3RlbXA7CisrCQkJCQllbHNlIGlmKGNhbGlicmF0aW9uX3BhaXIgPT0gQU5BQ0FMX1BBSVJfRCkKKysJCQkJCQl0eF9hbXBfdGVtcCA9IHR4X2FtcF90ZW1wOworKwkJCQl9CisrCQkJCXJlZ190ZW1wID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWcpJih+MHhmZjAwKTsKKysJCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWdfMTAwLCh0eF9hbXBfdGVtcHwoKHR4X2FtcF90ZW1wKTw8dHhfYW1wX3JlZ19zaGlmdCkpKTsKKysJCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWcsICh0eF9hbXBfdGVtcHwoKHR4X2FtcF90ZW1wKTw8dHhfYW1wX3JlZ19zaGlmdCkpKTsKKysJCQkJaWYgKHBoeWFkZHIgPT0gMCkgeworKwkJCQkJaWYgKCh0eF9hbXBfcmVnID09IDB4MTIpIHx8ICh0eF9hbXBfcmVnID09IDB4MTcpKSB7CisrCQkJCQkJLy9wcmludGsoImJlZm9yZSA6IFBPUlRbJWRdIDFlXyV4ID0gJXhcbiIsIHBoeWFkZHIsIHR4X2FtcF9yZWcsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWcpKTsKKysJCQkJCQlyZWdfdG1wID0gdHhfYW1wX2NoZWNrX3RocmVzKGNhbGlicmF0aW9uX3BhaXIsIHR4X2FtcF9yZWcsIHR4X2FtcF90ZW1wLCA3KTsKKysJCQkJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZywgKChyZWdfdG1wfCgodHhfYW1wX3RlbXApPDx0eF9hbXBfcmVnX3NoaWZ0KSkpKTsKKysJCQkJCQkvL3ByaW50aygiYWZ0ZXIgOiBQT1JUWyVkXSAxZV8leCA9ICV4XG4iLCBwaHlhZGRyLCB0eF9hbXBfcmVnLCB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnKSk7CisrCQkJCQl9CisrCQkJCQlpZiAodHhfYW1wX3JlZ18xMDAgPT0gMHgxNikgeworKwkJCQkJCS8vcHJpbnRrKCJiZWZvcmUgOiBQT1JUWyVkXSAxZV8leCA9ICV4XG4iLCBwaHlhZGRyLCB0eF9hbXBfcmVnXzEwMCwgdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZ18xMDApKTsKKysJCQkJCQlyZWdfdG1wID0gdHhfYW1wX2NoZWNrX3RocmVzKGNhbGlicmF0aW9uX3BhaXIsIHR4X2FtcF9yZWdfMTAwLCB0eF9hbXBfdGVtcCwgMSs0KTsKKysJCQkJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZ18xMDAsKHR4X2FtcF90ZW1wfCgocmVnX3RtcCk8PHR4X2FtcF9yZWdfc2hpZnQpKSk7CisrCQkJCQkJLy9wcmludGsoImFmdGVyIDogUE9SVFslZF0gMWVfJXggPSAleFxuIiwgcGh5YWRkciwgdHhfYW1wX3JlZ18xMDAsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWdfMTAwKSk7CisrCQkJCQl9CisrCQkJCQlpZiAodHhfYW1wX3JlZ18xMDAgPT0gMHgxOCkgeworKwkJCQkJCS8vcHJpbnRrKCJiZWZvcmUgOiBQT1JUWyVkXSAxZV8leCA9ICV4XG4iLCBwaHlhZGRyLCB0eF9hbXBfcmVnXzEwMCwgdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZ18xMDApKTsKKysJCQkJCQlyZWdfdG1wID0gdHhfYW1wX2NoZWNrX3RocmVzKGNhbGlicmF0aW9uX3BhaXIsIHR4X2FtcF9yZWdfMTAwLCB0eF9hbXBfdGVtcCwgNCk7CisrCQkJCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWdfMTAwLCh0eF9hbXBfdGVtcHwoKHJlZ190bXApPDx0eF9hbXBfcmVnX3NoaWZ0KSkpOworKwkJCQkJCS8vcHJpbnRrKCJhZnRlciA6IFBPUlRbJWRdIDFlXyV4ID0gJXhcbiIsIHBoeWFkZHIsIHR4X2FtcF9yZWdfMTAwLCB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnXzEwMCkpOworKwkJCQkJfQorKwkJCQl9IGVsc2UgaWYgKHBoeWFkZHIgPT0gMSkgeworKwkJCQkJaWYgKHR4X2FtcF9yZWcgPT0gMHgxMikgeworKwkJCQkJCS8vcHJpbnRrKCJiZWZvcmUgOiBQT1JUWyVkXSAxZV8leCA9ICV4XG4iLCBwaHlhZGRyLCB0eF9hbXBfcmVnLCB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnKSk7CisrCQkJCQkJcmVnX3RtcCA9IHR4X2FtcF9jaGVja190aHJlcyhjYWxpYnJhdGlvbl9wYWlyLCB0eF9hbXBfcmVnLCB0eF9hbXBfdGVtcCwgOSk7CisrCQkJCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWcsICgocmVnX3RtcHwoKHR4X2FtcF90ZW1wKTw8dHhfYW1wX3JlZ19zaGlmdCkpKSk7CisrCQkJCQkJLy9wcmludGsoImFmdGVyIDogUE9SVFslZF0gMWVfJXggPSAleFxuIiwgcGh5YWRkciwgdHhfYW1wX3JlZywgdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZykpOworKwkJCQkJfQorKwkJCQkJaWYgKHR4X2FtcF9yZWcgPT0gMHgxNyl7CisrCQkJCQkJLy9wcmludGsoImJlZm9yZSA6IFBPUlRbJWRdIDFlXyV4ID0gJXhcbiIsIHBoeWFkZHIsIHR4X2FtcF9yZWcsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWcpKTsKKysJCQkJCQlyZWdfdG1wID0gdHhfYW1wX2NoZWNrX3RocmVzKGNhbGlicmF0aW9uX3BhaXIsIHR4X2FtcF9yZWcsIHR4X2FtcF90ZW1wLCA3KTsKKysJCQkJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZywgKChyZWdfdG1wfCgodHhfYW1wX3RlbXApPDx0eF9hbXBfcmVnX3NoaWZ0KSkpKTsKKysJCQkJCQkvL3ByaW50aygiYWZ0ZXIgOiBQT1JUWyVkXSAxZV8leCA9ICV4XG4iLCBwaHlhZGRyLCB0eF9hbXBfcmVnLCB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnKSk7CisrCQkJCQl9CisrCQkJCQlpZiAodHhfYW1wX3JlZ18xMDAgPT0gMHgxNikgeworKwkJCQkJCS8vcHJpbnRrKCJiZWZvcmUgOiBQT1JUWyVkXSAxZV8leCA9ICV4XG4iLCBwaHlhZGRyLCB0eF9hbXBfcmVnXzEwMCwgdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZ18xMDApKTsKKysJCQkJCQlyZWdfdG1wID0gdHhfYW1wX2NoZWNrX3RocmVzKGNhbGlicmF0aW9uX3BhaXIsIHR4X2FtcF9yZWdfMTAwLCB0eF9hbXBfdGVtcCwgNCk7CisrCQkJCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWdfMTAwLCh0eF9hbXBfdGVtcHwoKHJlZ190bXApPDx0eF9hbXBfcmVnX3NoaWZ0KSkpOworKwkJCQkJCS8vcHJpbnRrKCJhZnRlciA6IFBPUlRbJWRdIDFlXyV4ID0gJXhcbiIsIHBoeWFkZHIsIHR4X2FtcF9yZWdfMTAwLCB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnXzEwMCkpOworKwkJCQkJfQorKwkJCQkJaWYgKHR4X2FtcF9yZWdfMTAwID09IDB4MTgpIHsKKysJCQkJCQkvL3ByaW50aygiYmVmb3JlIDogUE9SVFslZF0gMWVfJXggPSAleFxuIiwgcGh5YWRkciwgdHhfYW1wX3JlZ18xMDAsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWdfMTAwKSk7CisrCQkJCQkJcmVnX3RtcCA9IHR4X2FtcF9jaGVja190aHJlcyhjYWxpYnJhdGlvbl9wYWlyLCB0eF9hbXBfcmVnXzEwMCwgdHhfYW1wX3RlbXAsIC0xKzQpOworKwkJCQkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnXzEwMCwodHhfYW1wX3RlbXB8KChyZWdfdG1wKTw8dHhfYW1wX3JlZ19zaGlmdCkpKTsKKysJCQkJCQkvL3ByaW50aygiYWZ0ZXIgOiBQT1JUWyVkXSAxZV8leCA9ICV4XG4iLCBwaHlhZGRyLCB0eF9hbXBfcmVnXzEwMCwgdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZ18xMDApKTsKKysJCQkJCX0KKysJCQkJfSBlbHNlIGlmIChwaHlhZGRyID09IDIpIHsKKysJCQkJCWlmICgodHhfYW1wX3JlZyA9PSAweDEyKSB8fCAodHhfYW1wX3JlZyA9PSAweDE3KSkgeworKwkJCQkJCS8vcHJpbnRrKCJiZWZvcmUgOiBQT1JUWyVkXSAxZV8leCA9ICV4XG4iLCBwaHlhZGRyLCB0eF9hbXBfcmVnLCB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnKSk7CisrCQkJCQkJcmVnX3RtcCA9IHR4X2FtcF9jaGVja190aHJlcyhjYWxpYnJhdGlvbl9wYWlyLCB0eF9hbXBfcmVnLCB0eF9hbXBfdGVtcCwgNik7CisrCQkJCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWcsICgocmVnX3RtcHwoKHR4X2FtcF90ZW1wKTw8dHhfYW1wX3JlZ19zaGlmdCkpKSk7CisrCQkJCQkJLy9wcmludGsoImFmdGVyIDogUE9SVFslZF0gMWVfJXggPSAleFxuIiwgcGh5YWRkciwgdHhfYW1wX3JlZywgdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZykpOworKwkJCQkJfQorKwkJCQkJaWYgKCh0eF9hbXBfcmVnXzEwMCA9PSAweDE2KSB8fCAodHhfYW1wX3JlZ18xMDAgPT0gMHgxOCkpIHsKKysJCQkJCQkvL3ByaW50aygiYmVmb3JlIDogUE9SVFslZF0gMWVfJXggPSAleFxuIiwgcGh5YWRkciwgdHhfYW1wX3JlZ18xMDAsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWdfMTAwKSk7CisrCQkJCQkJcmVnX3RtcCA9IHR4X2FtcF9jaGVja190aHJlcyhjYWxpYnJhdGlvbl9wYWlyLCB0eF9hbXBfcmVnXzEwMCwgdHhfYW1wX3RlbXAsIC0xKzQpOworKwkJCQkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnXzEwMCwodHhfYW1wX3RlbXB8KChyZWdfdG1wKTw8dHhfYW1wX3JlZ19zaGlmdCkpKTsKKysJCQkJCQkvL3ByaW50aygiYWZ0ZXIgOiBQT1JUWyVkXSAxZV8leCA9ICV4XG4iLCBwaHlhZGRyLCB0eF9hbXBfcmVnXzEwMCwgdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZ18xMDApKTsKKysJCQkJCX0KKysJCQkJfSBlbHNlIGlmIChwaHlhZGRyID09IDMpIHsKKysJCQkJCWlmICh0eF9hbXBfcmVnID09IDB4MTIpIHsKKysJCQkJCQkvL3ByaW50aygiYmVmb3JlIDogUE9SVFslZF0gMWVfJXggPSAleFxuIiwgcGh5YWRkciwgdHhfYW1wX3JlZywgdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZykpOworKwkJCQkJCXJlZ190bXAgPSB0eF9hbXBfY2hlY2tfdGhyZXMoY2FsaWJyYXRpb25fcGFpciwgdHhfYW1wX3JlZywgdHhfYW1wX3RlbXAsIDQpOworKwkJCQkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnLCAoKHJlZ190bXB8KCh0eF9hbXBfdGVtcCk8PHR4X2FtcF9yZWdfc2hpZnQpKSkpOworKwkJCQkJCS8vcHJpbnRrKCJhZnRlciA6IFBPUlRbJWRdIDFlXyV4ID0gJXhcbiIsIHBoeWFkZHIsIHR4X2FtcF9yZWcsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWcpKTsKKysJCQkJCX0KKysJCQkJCWlmICh0eF9hbXBfcmVnID09IDB4MTcpIHsKKysJCQkJCQkvL3ByaW50aygiYmVmb3JlIDogUE9SVFslZF0gMWVfJXggPSAleFxuIiwgcGh5YWRkciwgdHhfYW1wX3JlZywgdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZykpOworKwkJCQkJCXJlZ190bXAgPSB0eF9hbXBfY2hlY2tfdGhyZXMoY2FsaWJyYXRpb25fcGFpciwgdHhfYW1wX3JlZywgdHhfYW1wX3RlbXAsIDcpOworKwkJCQkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnLCAoKHJlZ190bXB8KCh0eF9hbXBfdGVtcCk8PHR4X2FtcF9yZWdfc2hpZnQpKSkpOworKwkJCQkJCS8vcHJpbnRrKCJhZnRlciA6IFBPUlRbJWRdIDFlXyV4ID0gJXhcbiIsIHBoeWFkZHIsIHR4X2FtcF9yZWcsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWcpKTsKKysJCQkJCX0KKysJCQkJCWlmICh0eF9hbXBfcmVnXzEwMCA9PSAweDE2KSB7CisrCQkJCQkJLy9wcmludGsoImJlZm9yZSA6IFBPUlRbJWRdIDFlXyV4ID0gJXhcbiIsIHBoeWFkZHIsIHR4X2FtcF9yZWdfMTAwLCB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnXzEwMCkpOworKwkJCQkJCXJlZ190bXAgPSB0eF9hbXBfY2hlY2tfdGhyZXMoY2FsaWJyYXRpb25fcGFpciwgdHhfYW1wX3JlZ18xMDAsIHR4X2FtcF90ZW1wLCAtMis0KTsKKysJCQkJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZ18xMDAsKHR4X2FtcF90ZW1wfCgocmVnX3RtcCk8PHR4X2FtcF9yZWdfc2hpZnQpKSk7CisrCQkJCQkJLy9wcmludGsoImFmdGVyIDogUE9SVFslZF0gMWVfJXggPSAleFxuIiwgcGh5YWRkciwgdHhfYW1wX3JlZ18xMDAsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWdfMTAwKSk7CisrCQkJCQl9CisrCQkJCQlpZiAodHhfYW1wX3JlZ18xMDAgPT0gMHgxOCkgeworKwkJCQkJCS8vcHJpbnRrKCJiZWZvcmUgOiBQT1JUWyVkXSAxZV8leCA9ICV4XG4iLCBwaHlhZGRyLCB0eF9hbXBfcmVnXzEwMCwgdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZ18xMDApKTsKKysJCQkJCQlyZWdfdG1wID0gdHhfYW1wX2NoZWNrX3RocmVzKGNhbGlicmF0aW9uX3BhaXIsIHR4X2FtcF9yZWdfMTAwLCB0eF9hbXBfdGVtcCwgLTErMyk7CisrCQkJCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWdfMTAwLCh0eF9hbXBfdGVtcHwoKHJlZ190bXApPDx0eF9hbXBfcmVnX3NoaWZ0KSkpOworKwkJCQkJCS8vcHJpbnRrKCJhZnRlciA6IFBPUlRbJWRdIDFlXyV4ID0gJXhcbiIsIHBoeWFkZHIsIHR4X2FtcF9yZWdfMTAwLCB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnXzEwMCkpOworKwkJCQkJfQorKwkJCQl9IGVsc2UgaWYgKHBoeWFkZHIgPT0gNCkgeworKwkJCQkJaWYgKCh0eF9hbXBfcmVnID09IDB4MTIpIHx8ICh0eF9hbXBfcmVnID09IDB4MTcpKSB7CisrCQkJCQkJLy9wcmludGsoImJlZm9yZSA6IFBPUlRbJWRdIDFlXyV4ID0gJXhcbiIsIHBoeWFkZHIsIHR4X2FtcF9yZWcsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWcpKTsKKysJCQkJCQlyZWdfdG1wID0gdHhfYW1wX2NoZWNrX3RocmVzKGNhbGlicmF0aW9uX3BhaXIsIHR4X2FtcF9yZWcsIHR4X2FtcF90ZW1wLCA1KTsKKysJCQkJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZywgKChyZWdfdG1wfCgodHhfYW1wX3RlbXApPDx0eF9hbXBfcmVnX3NoaWZ0KSkpKTsKKysJCQkJCQkvL3ByaW50aygiYWZ0ZXIgOiBQT1JUWyVkXSAxZV8leCA9ICV4XG4iLCBwaHlhZGRyLCB0eF9hbXBfcmVnLCB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnKSk7CisrCQkJCQl9CisrCQkJCQlpZiAodHhfYW1wX3JlZ18xMDAgPT0gMHgxNikgeworKwkJCQkJCS8vcHJpbnRrKCJiZWZvcmUgOiBQT1JUWyVkXSAxZV8leCA9ICV4XG4iLCBwaHlhZGRyLCB0eF9hbXBfcmVnXzEwMCwgdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZ18xMDApKTsKKysJCQkJCQlyZWdfdG1wID0gdHhfYW1wX2NoZWNrX3RocmVzKGNhbGlicmF0aW9uX3BhaXIsIHR4X2FtcF9yZWdfMTAwLCB0eF9hbXBfdGVtcCwgLTIrNCk7CisrCQkJCQkJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWdfMTAwLCh0eF9hbXBfdGVtcHwoKHJlZ190bXApPDx0eF9hbXBfcmVnX3NoaWZ0KSkpOworKwkJCQkJCS8vcHJpbnRrKCJhZnRlciA6IFBPUlRbJWRdIDFlXyV4ID0gJXhcbiIsIHBoeWFkZHIsIHR4X2FtcF9yZWdfMTAwLCB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnXzEwMCkpOworKwkJCQkJfQorKwkJCQkJaWYgKHR4X2FtcF9yZWdfMTAwID09IDB4MTgpIHsKKysJCQkJCQkvL3ByaW50aygiYmVmb3JlIDogUE9SVFslZF0gMWVfJXggPSAleFxuIiwgcGh5YWRkciwgdHhfYW1wX3JlZ18xMDAsIHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIHR4X2FtcF9yZWdfMTAwKSk7CisrCQkJCQkJcmVnX3RtcCA9IHR4X2FtcF9jaGVja190aHJlcyhjYWxpYnJhdGlvbl9wYWlyLCB0eF9hbXBfcmVnXzEwMCwgdHhfYW1wX3RlbXAsIC0xKzQpOworKwkJCQkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnXzEwMCwodHhfYW1wX3RlbXB8KChyZWdfdG1wKTw8dHhfYW1wX3JlZ19zaGlmdCkpKTsKKysJCQkJCQkvL3ByaW50aygiYWZ0ZXIgOiBQT1JUWyVkXSAxZV8leCA9ICV4XG4iLCBwaHlhZGRyLCB0eF9hbXBfcmVnXzEwMCwgdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZ18xMDApKTsKKysJCQkJCX0KKysJCQkJfQorKworKwkJCQlpZiAoY2FsaWJyYXRpb25fcGFpciA9PSBBTkFDQUxfUEFJUl9BKXsKKysJCQkJCXJlZ19iYWNrdXAgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCAgcGh5YWRkciwgMHgxZSwgMHgxMik7CisrCQkJCQlyZWdfdG1wID0gKChyZWdfYmFja3VwICYgMHhmYzAwKSA+PiAxMCk7CisrCQkJCQl0eF9hbXBfdGVtcCA9IHR4X2FtcF9jaGVja190aHJlcyhjYWxpYnJhdGlvbl9wYWlyLCB0eF9hbXBfcmVnLCByZWdfdG1wLCAtOCk7CisrCQkJCQlyZWdfYmFja3VwID0gMHgwMDAwOworKwkJCQkJcmVnX2JhY2t1cCB8PSAoKHR4X2FtcF90ZW1wIDw8IDEwKSB8ICh0eF9hbXBfdGVtcCA8PCAwKSk7CisrCQkJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgxMiwgcmVnX2JhY2t1cCk7CisrCQkJCQlyZWdfYmFja3VwID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgIHBoeWFkZHIsIDB4MWUsIDB4MTIpOworKwkJCQkJLy9wcmludGsoIlBPUlRbJWRdIDFlLjAxMiA9ICV4IChPRkZTRVRfMTAwME1fUEFJUl9BKVxuIiwgcGh5YWRkciwgcmVnX2JhY2t1cCk7CisrCQkJCQlyZWdfYmFja3VwID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgIHBoeWFkZHIsIDB4MWUsIDB4MTYpOworKwkJCQkJcmVnX3RtcCA9ICgocmVnX2JhY2t1cCAmIDB4M2YpID4+IDApOworKwkJCQkJdHhfYW1wX3RlbXAgPSB0eF9hbXBfY2hlY2tfdGhyZXMoY2FsaWJyYXRpb25fcGFpciwgdHhfYW1wX3JlZywgcmVnX3RtcCwgLTgpOworKwkJCQkJcmVnX2JhY2t1cCA9IChyZWdfYmFja3VwICYgKH4weDNmKSk7CisrCQkJCQlyZWdfYmFja3VwIHw9ICh0eF9hbXBfdGVtcCA8PCAwKTsKKysJCQkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDE2LCByZWdfYmFja3VwKTsKKysJCQkJCXJlZ19iYWNrdXAgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCAgcGh5YWRkciwgMHgxZSwgMHgxNik7CisrCQkJCQkvL3ByaW50aygiUE9SVFslZF0gMWUuMDE2ID0gJXggKE9GRlNFVF9URVNUTU9ERV8xMDAwTV9QQUlSX0EpXG4iLCBwaHlhZGRyLCByZWdfYmFja3VwKTsKKysJCQkJfQorKwkJCQllbHNlIGlmKGNhbGlicmF0aW9uX3BhaXIgPT0gQU5BQ0FMX1BBSVJfQil7CisrCQkJCQlyZWdfYmFja3VwID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgIHBoeWFkZHIsIDB4MWUsIDB4MTcpOworKwkJCQkJcmVnX3RtcCA9ICgocmVnX2JhY2t1cCAmIDB4M2YwMCkgPj4gOCk7CisrCQkJCQl0eF9hbXBfdGVtcCA9IHR4X2FtcF9jaGVja190aHJlcyhjYWxpYnJhdGlvbl9wYWlyLCB0eF9hbXBfcmVnLCByZWdfdG1wLCAtOCk7CisrCQkJCQlyZWdfYmFja3VwID0gMHgwMDAwOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19iYWNrdXAgfD0gKCh0eF9hbXBfdGVtcCA8PCA4KSB8ICh0eF9hbXBfdGVtcCA8PCAwKSk7CisrCQkJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgxNywgcmVnX2JhY2t1cCk7CisrCQkJCQlyZWdfYmFja3VwID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgIHBoeWFkZHIsIDB4MWUsIDB4MTcpOworKwkJCQkJLy9wcmludGsoIlBPUlRbJWRdIDFlLjAxNyA9ICV4IChPRkZTRVRfMTAwME1fUEFJUl9CKVxuIiwgcGh5YWRkciwgcmVnX2JhY2t1cCk7CisrCQkJCQlyZWdfYmFja3VwID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgIHBoeWFkZHIsIDB4MWUsIDB4MTgpOworKwkJCQkJcmVnX3RtcCA9ICgocmVnX2JhY2t1cCAmIDB4M2YpID4+IDApOworKwkJCQkJdHhfYW1wX3RlbXAgPSB0eF9hbXBfY2hlY2tfdGhyZXMoY2FsaWJyYXRpb25fcGFpciwgdHhfYW1wX3JlZywgcmVnX3RtcCwgLTgpOworKwkJCQkJcmVnX2JhY2t1cCA9IChyZWdfYmFja3VwICYgKH4weDNmKSk7CisrCQkJCQlyZWdfYmFja3VwIHw9ICh0eF9hbXBfdGVtcCA8PCAwKTsKKysJCQkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDE4LCByZWdfYmFja3VwKTsKKysJCQkJCXJlZ19iYWNrdXAgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCAgcGh5YWRkciwgMHgxZSwgMHgxOCk7CisrCQkJCQkvL3ByaW50aygiUE9SVFslZF0gMWUuMDE4ID0gJXggKE9GRlNFVF9URVNUTU9ERV8xMDAwTV9QQUlSX0IpXG4iLCBwaHlhZGRyLCByZWdfYmFja3VwKTsKKysJCQkJfQorKwkJCQllbHNlIGlmKGNhbGlicmF0aW9uX3BhaXIgPT0gQU5BQ0FMX1BBSVJfQyl7CisrCQkJCQlyZWdfYmFja3VwID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgIHBoeWFkZHIsIDB4MWUsIDB4MTkpOworKwkJCQkJcmVnX3RtcCA9ICgocmVnX2JhY2t1cCAmIDB4M2YwMCkgPj4gOCk7CisrCQkJCQl0eF9hbXBfdGVtcCA9IHR4X2FtcF9jaGVja190aHJlcyhjYWxpYnJhdGlvbl9wYWlyLCB0eF9hbXBfcmVnLCByZWdfdG1wLCAtOCk7CisrCQkJCQlyZWdfYmFja3VwID0gKHJlZ19iYWNrdXAgJiAofjB4M2YwMCkpOworKwkJCQkJcmVnX2JhY2t1cCB8PSAodHhfYW1wX3RlbXAgPDwgOCk7CisrCQkJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgxOSwgcmVnX2JhY2t1cCk7CisrCQkJCQlyZWdfYmFja3VwID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgIHBoeWFkZHIsIDB4MWUsIDB4MTkpOworKwkJCQkJLy9wcmludGsoIlBPUlRbJWRdIDFlLjAxOSA9ICV4IChPRkZTRVRfMTAwME1fUEFJUl9DKVxuIiwgcGh5YWRkciwgcmVnX2JhY2t1cCk7CisrCQkJCQlyZWdfYmFja3VwID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgIHBoeWFkZHIsIDB4MWUsIDB4MjApOworKwkJCQkJcmVnX3RtcCA9ICgocmVnX2JhY2t1cCAmIDB4M2YpID4+IDApOworKwkJCQkJdHhfYW1wX3RlbXAgPSB0eF9hbXBfY2hlY2tfdGhyZXMoY2FsaWJyYXRpb25fcGFpciwgdHhfYW1wX3JlZywgcmVnX3RtcCwgLTgpOworKwkJCQkJcmVnX2JhY2t1cCA9IChyZWdfYmFja3VwICYgKH4weDNmKSk7CisrCQkJCQlyZWdfYmFja3VwIHw9ICh0eF9hbXBfdGVtcCA8PCAwKTsKKysJCQkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDIwLCByZWdfYmFja3VwKTsKKysJCQkJCXJlZ19iYWNrdXAgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCAgcGh5YWRkciwgMHgxZSwgMHgyMCk7CisrCQkJCQkvL3ByaW50aygiUE9SVFslZF0gMWUuMDIwID0gJXggKE9GRlNFVF9URVNUTU9ERV8xMDAwTV9QQUlSX0MpXG4iLCBwaHlhZGRyLCByZWdfYmFja3VwKTsKKysJCQkJfQorKwkJCQllbHNlIGlmKGNhbGlicmF0aW9uX3BhaXIgPT0gQU5BQ0FMX1BBSVJfRCl7CisrCQkJCQlyZWdfYmFja3VwID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgIHBoeWFkZHIsIDB4MWUsIDB4MjEpOworKwkJCQkJcmVnX3RtcCA9ICgocmVnX2JhY2t1cCAmIDB4M2YwMCkgPj4gOCk7CisrCQkJCQl0eF9hbXBfdGVtcCA9IHR4X2FtcF9jaGVja190aHJlcyhjYWxpYnJhdGlvbl9wYWlyLCB0eF9hbXBfcmVnLCByZWdfdG1wLCAtOCk7CisrCQkJCQlyZWdfYmFja3VwID0gKHJlZ19iYWNrdXAgJiAofjB4M2YwMCkpOworKwkJCQkJcmVnX2JhY2t1cCB8PSAodHhfYW1wX3RlbXAgPDwgOCk7CisrCQkJCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgyMSwgcmVnX2JhY2t1cCk7CisrCQkJCQlyZWdfYmFja3VwID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgIHBoeWFkZHIsIDB4MWUsIDB4MjEpOworKwkJCQkJLy9wcmludGsoIlBPUlRbJWRdIDFlLjAyMSA9ICV4IChPRkZTRVRfMTAwME1fUEFJUl9EKVxuIiwgcGh5YWRkciwgcmVnX2JhY2t1cCk7CisrCQkJCQlyZWdfYmFja3VwID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgIHBoeWFkZHIsIDB4MWUsIDB4MjIpOworKwkJCQkJcmVnX3RtcCA9ICgocmVnX2JhY2t1cCAmIDB4M2YpID4+IDApOworKwkJCQkJdHhfYW1wX3RlbXAgPSB0eF9hbXBfY2hlY2tfdGhyZXMoY2FsaWJyYXRpb25fcGFpciwgdHhfYW1wX3JlZywgcmVnX3RtcCwgLTgpOworKwkJCQkJcmVnX2JhY2t1cCA9IChyZWdfYmFja3VwICYgKH4weDNmKSk7CisrCQkJCQlyZWdfYmFja3VwIHw9ICh0eF9hbXBfdGVtcCA8PCAwKTsKKysJCQkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDIyLCByZWdfYmFja3VwKTsKKysJCQkJCXJlZ19iYWNrdXAgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCAgcGh5YWRkciwgMHgxZSwgMHgyMik7CisrCQkJCQkvL3ByaW50aygiUE9SVFslZF0gMWUuMDIyID0gJXggKE9GRlNFVF9URVNUTU9ERV8xMDAwTV9QQUlSX0QpXG4iLCBwaHlhZGRyLCByZWdfYmFja3VwKTsKKysJCQkJfQorKworKwkJCQlpZiAoY2FsaWJyYXRpb25fcGFpciA9PSBBTkFDQUxfUEFJUl9BKXsKKysJCQkJCS8vcHJpbnRrKCJQT1JUICglZCkgVFhfQU1QIFBBSVIgKEEpIEZJTkFMIENBTElCUkFUSU9OIFJFU1VMVFxuIiwgcGh5YWRkcik7CisrCQkJCQlkZWJ1Z190bXAgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDEyKTsKKysJCQkJCS8vcHJpbnRrKCIxZS4wMTIgPSAweCV4XG4iLCBkZWJ1Z190bXApOworKwkJCQkJZGVidWdfdG1wID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgxNik7CisrCQkJCQkvL3ByaW50aygiMWUuMDE2ID0gMHgleFxuIiwgZGVidWdfdG1wKTsKKysJCQkJfQorKworKwkJCQllbHNlIGlmKGNhbGlicmF0aW9uX3BhaXIgPT0gQU5BQ0FMX1BBSVJfQil7CisrCQkJCQkvL3ByaW50aygiUE9SVCAoJWQpIFRYX0FNUCBQQUlSIChBKSBGSU5BTCBDQUxJQlJBVElPTiBSRVNVTFRcbiIsIHBoeWFkZHIpOworKwkJCQkJZGVidWdfdG1wID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgxNyk7CisrCQkJCQkvL3ByaW50aygiMWUuMDE3ID0gMHgleFxuIiwgZGVidWdfdG1wKTsKKysJCQkJCWRlYnVnX3RtcCA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIDB4MTgpOworKwkJCQkJLy9wcmludGsoIjFlLjAxOCA9IDB4JXhcbiIsIGRlYnVnX3RtcCk7CisrCQkJCX0KKysJCQkJZWxzZSBpZihjYWxpYnJhdGlvbl9wYWlyID09IEFOQUNBTF9QQUlSX0MpeworKwkJCQkJLy9wcmludGsoIlBPUlQgKCVkKSBUWF9BTVAgUEFJUiAoQSkgRklOQUwgQ0FMSUJSQVRJT04gUkVTVUxUXG4iLCBwaHlhZGRyKTsKKysJCQkJCWRlYnVnX3RtcCA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIDB4MTkpOworKwkJCQkJLy9wcmludGsoIjFlLjAxOSA9IDB4JXhcbiIsIGRlYnVnX3RtcCk7CisrCQkJCQlkZWJ1Z190bXAgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDIwKTsKKysJCQkJCS8vcHJpbnRrKCIxZS4wMjAgPSAweCV4XG4iLCBkZWJ1Z190bXApOworKwkJCQl9CisrCQkJCWVsc2UgaWYoY2FsaWJyYXRpb25fcGFpciA9PSBBTkFDQUxfUEFJUl9EKXsKKysJCQkJCS8vcHJpbnRrKCJQT1JUICglZCkgVFhfQU1QIFBBSVIgKEEpIEZJTkFMIENBTElCUkFUSU9OIFJFU1VMVFxuIiwgcGh5YWRkcik7CisrCQkJCQlkZWJ1Z190bXAgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDIxKTsKKysJCQkJCS8vcHJpbnRrKCIxZS4wMjEgPSAweCV4XG4iLCBkZWJ1Z190bXApOworKwkJCQkJZGVidWdfdG1wID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgyMik7CisrCQkJCQkvL3ByaW50aygiMWUuMDIyID0gMHgleFxuIiwgZGVidWdfdG1wKTsKKysJCQkJfQorKworKworKwkJCQlwcmludGsoICIgR0UgVHggYW1wIEFuYUNhbCBEb25lISAocGFpci0lZCkoMWVfJXggPSAweCV4KSgweCV4KVxuIiwgY2FsaWJyYXRpb25fcGFpciwgdHhfYW1wX3JlZywgdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgdHhfYW1wX3JlZyksIHJlZ190bXApOworKworKwkJCX0gZWxzZSB7CisrCQkJCWlmKCh0eF9hbXBfdGVtcCA9PSAweDNmKXx8KHR4X2FtcF90ZW1wID09IDB4MDApKSB7CisrCQkJCQlhbGxfYW5hX2NhbF9zdGF0dXMgPSBBTkFDQUxfU0FUVVJBVElPTjsgIC8vIG5lZWQgdG8gRlQKKysJCQkJCXByaW50ayggIiBHRSBUeCBhbXAgQW5hQ2FsIFNhdHVyYXRpb24hICBcclxuIik7CisrCQkJCX0KKysJCQl9CisrCQl9CisrCisrCQlpZihhbGxfYW5hX2NhbF9zdGF0dXMgPT0gQU5BQ0FMX0VSUk9SKSB7CisrCQkJdHhfYW1wX3RlbXAgPSAweDIwOworKwkJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCB0eF9hbXBfcmVnLCAocmVnX3RlbXB8KHR4X2FtcF90ZW1wPDx0eF9hbXBfcmVnX3NoaWZ0KSkpOworKwkJfQorKwl9CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDAxN2QsIDB4MDAwMCk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDAxN2UsIDB4MDAwMCk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDAxN2YsIDB4MDAwMCk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDAxODAsIDB4MDAwMCk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDAxODEsIDB4MDAwMCk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDAxODIsIDB4MDAwMCk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDAxODMsIDB4MDAwMCk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDAxODQsIDB4MDAwMCk7CisrCisrCS8qIGRpc2FibGUgYW5hbG9nIGNhbGlicmF0aW9uIGNpcmN1aXQgKi8KKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIFBIWTAsIDB4MWUsIDB4MDBkYiwgMHgwMDAwKTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIFBIWTAsIDB4MWUsIDB4MDBkYywgMHgwMDAwKTsJLy8gZGlzYWJsZSBUeCBvZmZzZXQgY2FsaWJyYXRpb24gY2lyY3VpdAorKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgwMGRiLCAweDAwMDApOwkvLyBkaXNhYmxlIGFuYWxvZyBjYWxpYnJhdGlvbiBjaXJjdWl0CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDAwZGMsIDB4MDAwMCk7CS8vIGRpc2FibGUgVHggb2Zmc2V0IGNhbGlicmF0aW9uIGNpcmN1aXQKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIDB4MDAzZSwgMHgwMDAwKTsJLy8gZGlzYWJsZSBUeCBWTEQgZm9yY2UgbW9kZQorKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgwMGRkLCAweDAwMDApOwkvLyBkaXNhYmxlIFR4IG9mZnNldC9hbXBsaXR1ZGUgY2FsaWJyYXRpb24gY2lyY3VpdAorKworKworKworKwkvL3RjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFmLCAweDI3MywgMHgyMDAwKTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIDB4YzksIDB4MGZmZik7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDE0NSwgMHgxMDAwKTsKKysKKysJLyogUmVzdG9yZSBDUiB0byBkZWZhdWx0ICovCisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDExLCBvcmlnXzFlXzExKTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWYsIDB4MzAwLCBvcmlnXzFmXzMwMCk7CisrCisrCXJldHVybiAwOworK30KKysKKysvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCisrc3RhdGljIGludCBwaHlfY2FsaWJyYXRpb24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCB1OCBwaHlhZGRyKQorK3sKKysJLy91MzIJcmVnX3RtcCxyZWdfdG1wMCwgcmVnX3RtcDEsIGk7CisrCXUzMiByZWdfdG1wOworKwl1MzIgQ0FMRExZID0gNDA7CisrCXUzMiBvcmlnXzFlXzExLCBvcmlnXzFlXzE4NSwgb3JpZ18xZV9lMSwgb3JpZ18xZl8xMDA7CisrCWludCByZXQ7CisrCisrCS8qIFVzZSBTVyBjYWxpYnJhdGlvbiBkYXRhLiAqLworKwlyZWdfdG1wID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZiwgMHg0MDMpOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZiwgMHg0MDMsIHJlZ190bXAgfCBCSVQoMykpOworKwkvKiBzZXQgWzEyXUFOIGRpc2FibGUsIFs4XWZ1bGwgZHVwbGV4LCBbMTMvNl0xMDAwTWJwcyAqLworKwkvL3RjX3BoeV93cml0ZV9kZXZfcmVnKHBoeWFkZHIsIDB4MCwgIDB4MDE0MCk7CisrCXN3aXRjaF9waHlfd3JpdGUoZHMsIHBoeWFkZHIsIFIwLCAweDE0MCk7CisrCisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDE0NSwgMHgxMDEwKTsvKiBmaXggbWRpICovCisrCW9yaWdfMWVfMTg1ID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgUkdfMTg1KTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIFJHXzE4NSwgMCk7LyogZGlzYWJsZSB0eCBzbGV3IGNvbnRyb2wgKi8KKysJb3JpZ18xZl8xMDAgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFmLCAweDEwMCk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFmLCAweDEwMCwgMHhjMDAwKTsvKiBCRyB2b2x0YWdlIG91dHB1dCAqLworKwkvL3RjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFmLCAweDQwMywgMHgxMDk5KTsgLy9ieXBhc3MgZWZ1c2UKKysKKysjaWYgKDEpCisrCS8vCTFmXzI3Y1sxMjo4XSBjcl9kYV90eF9pMm1wYl8xMG0JVHJpbW1pbmcgVFggYmlhcyBzZXR1cChAMTBNKQorKwkvL3RjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFmLCAweDI3YywgMHgxZjFmKTsKKysJLy90Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZiwgMHgyN2MsIDB4MzMwMCk7CisrCisrCS8vcmVnX3RtcDEgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCAgUEhZMCwgMHgxZiwgMHgyN2MpOworKwkvL2RldjFGaF9yZWcyNzNoIFRYVkxEIERBIHJlZ2lzdGVyCS0gQWRqdXN0IHZvbHRhZ2UgbW9kZSBUWCBhbXBsaXR1ZGUuCisrCS8vdGNfcGh5X3dyaXRlX2Rldl9yZWcocGh5YWRkciwgMHgxZiwgMHgyNzMsIDApOworKwkvL3RjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFmLCAweDI3MywgMHgxMDAwKTsKKysJLy9yZWdfdG1wMSA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsICBwaHlhZGRyLCAweDFmLCAweDI3Myk7CisrCS8vcHJpbnRrKCJyZWdfdG1wMTI3MyA9ICV4XG4iLCByZWdfdG1wMSk7CisrCS8qMWVfMTEgVFggIG92ZXJzaG9vdCBFbmFibGUgKFBBSVIgQS9CL0MvRCkgaW4gZ2JlIG1vZGUqLworKworKwlvcmlnXzFlXzExID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgIHBoeWFkZHIsIDB4MWUsIDB4MTEpOworKwlyZWdfdG1wID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgIHBoeWFkZHIsIDB4MWUsIDB4MTEpOworKwlyZWdfdG1wID0gcmVnX3RtcCB8ICgweGYgPDwgMTIpOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgxMSwgcmVnX3RtcCk7CisrCW9yaWdfMWVfZTEgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCBQSFkwLCAweDFlLCAweDAwZTEpOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgUEhZMCwgMHgxZSwgMHgwMGUxLCAweDEwKTsKKysJLyogY2FsaWJyYXRpb24gc3RhcnQgPT09PT09PT09PT09ICovCisrCXByaW50aygiQ0FMRExZID0gJWRcbiIsIENBTERMWSk7CisrCWlmKGdlX2NhbF9mbGFnID09IDApeworKwkJcmV0ID0gZ2VfY2FsX3JleHQoZHMsIDAsIENBTERMWSk7CisrCQlpZiAocmV0ID09IC0xKXsKKysJCQlwcmludGsoImdlX2NhbF9yZXh0IGVycm9yIEsgcG9ydCA9JWRcbiIsIHBoeWFkZHIpOworKwkJCXJldHVybiByZXQ7CisrCQl9CisrCQlnZV9jYWxfZmxhZyA9IDE7CisrCX0KKysKKysJLyogKioqIFI1MCBDYWwgc3RhcnQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKysJLypwaHlhZGRyZXNzID0gMCovCisrCXJldCA9IGdlX2NhbF9yNTAoZHMsIHBoeWFkZHIsIENBTERMWSk7CisrCWlmIChyZXQgPT0gLTEpeworKwkJcHJpbnRrKCJSNTAgZXJyb3IgSyBwb3J0ID0lZFxuIiwgcGh5YWRkcik7CisrCQlyZXR1cm4gcmV0OworKwl9CisrCS8qICoqKiBSNTAgQ2FsIGVuZCAqKiogKi8KKysJLyogKioqIFR4IG9mZnNldCBDYWwgc3RhcnQgKioqKioqKioqKioqKioqKioqKioqKiogKi8KKysJcmV0ID0gZ2VfY2FsX3R4X29mZnNldChkcywgcGh5YWRkciwgQ0FMRExZKTsKKysJaWYgKHJldCA9PSAtMSl7CisrCQlwcmludGsoImdlX2NhbF90eF9vZmZzZXQgZXJyb3IgSyBwb3J0ID0lZFxuIiwgcGh5YWRkcik7CisrCQlyZXR1cm4gcmV0OworKwl9CisrCS8qICoqKiBUeCBvZmZzZXQgQ2FsIGVuZCAqKiogKi8KKysKKysJLyogKioqIFR4IEFtcCBDYWwgc3RhcnQgKioqICovCisrCXJldCA9IGdlX2NhbF90eF9hbXAoZHMsIHBoeWFkZHIsIENBTERMWSk7CisrCWlmIChyZXQgPT0gLTEpeworKwkJcHJpbnRrKCJnZV9jYWxfdHhfYW1wIGVycm9yIEsgcG9ydCA9JWRcbiIsIHBoeWFkZHIpOworKwkJcmV0dXJuIHJldDsKKysJfQorKwkvKiAqKiogVHggQW1wIENhbCBlbmQgKioqICovCisrCS8qdG1wIG1heWJlIGNoYW5nZWQqLworKwkvL3RjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFmLCAweDI3YywgMHgxMTExKTsKKysJLy90Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZiwgMHgyN2IsIDB4NDcpOworKwkvL3RjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFmLCAweDI3MywgMHgyMDAwKTsKKysKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIDB4M2E4LCAweDA4MTApOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgzYWEsIDB4MDAwOCk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDNhYiwgMHgwODEwKTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIDB4M2FkLCAweDAwMDgpOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgzYWUsIDB4MDEwNik7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDNiMCwgMHgwMDAxKTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIDB4M2IxLCAweDAxMDYpOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgzYjMsIDB4MDAwMSk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDE4YywgMHgwMDAxKTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIDB4MThkLCAweDAwMDEpOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgxOGUsIDB4MDAwMSk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDE4ZiwgMHgwMDAxKTsKKysKKysJLypkYV90eF9iaWFzMV9iX3R4X3N0YW5kYnkgPSA1J2IxMCAoZGV2MWVoX3JlZzNhYWhbMTI6OF0pKi8KKysJcmVnX3RtcCA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIDB4M2FhKTsKKysJcmVnX3RtcCA9IHJlZ190bXAgJiB+KDB4MWYwMCk7CisrCXJlZ190bXAgPSByZWdfdG1wIHwgMHgyIDw8IDg7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDNhYSwgcmVnX3RtcCk7CisrCisrCS8qZGFfdHhfYmlhczFfYV90eF9zdGFuZGJ5ID0gNSdiMTAgKGRldjFlaF9yZWczYTloWzQ6MF0pKi8KKysJcmVnX3RtcCA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsICBwaHlhZGRyLCAweDFlLCAweDNhOSk7CisrCXJlZ190bXAgPSByZWdfdG1wICYgfigweDFmKTsKKysJcmVnX3RtcCA9IHJlZ190bXAgfCAweDI7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDNhOSwgcmVnX3RtcCk7CisrCisrCS8qIFJlc3RvcmUgQ1IgdG8gZGVmYXVsdCAqLworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgUkdfMTg1LCBvcmlnXzFlXzE4NSk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFmLCAweDEwMCwgb3JpZ18xZl8xMDApOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgxMSwgb3JpZ18xZV8xMSk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBQSFkwLCAweDFlLCAweDAwZTEsIG9yaWdfMWVfZTEpOworKyNlbmRpZgorKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIHZvaWQgcnhfZGNfb2Zmc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgdTggcGh5YWRkcikKKyt7CisrCXByX2luZm8oIlBPUlQgJWQgUlhfRENfT0ZGU0VUXG4iLCBwaHlhZGRyKTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIDB4OTYsIDB4ODAwMCk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDM3LCAweDMpOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgxMDcsIDB4NDAwMCk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDE3MSwgMHgxZTUpOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZSwgMHgzOSwgMHgyMDBmKTsKKysJdWRlbGF5KDQwKTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWUsIDB4MzksIDB4MDAwZik7CisrCXVkZWxheSg0MCk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFlLCAweDE3MSwgMHg2NSk7CisrfQorKworK3N0YXRpYyB2b2lkIGNoZWNrX3J4X2RjX29mZnNldF9wYWlyX2Eoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCB1OCBwaHlhZGRyKQorK3sKKysJdTMyIHJlZ190bXA7CisrCisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFmLCAweDE1LCAocGh5YWRkciA8PCAxMykgfCAweDExNGYpOworKwlyZWdfdG1wID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgIHBoeWFkZHIsIDB4MWYsIDB4MWEpOworKwlyZWdfdG1wID0gcmVnX3RtcCAmIDB4ZmY7CisrCXByX2luZm8oImJlZm9yZSBwYWlyQSBvdXRwdXQgPSAleFxuIiwgcmVnX3RtcCk7CisrCXVkZWxheSg0MCk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFmLCAweDE1LCAocGh5YWRkciA8PCAxMykgfCAweDExNDIpOworKwl1ZGVsYXkoNDApOworKwlyZWdfdG1wID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgIHBoeWFkZHIsIDB4MWYsIDB4MWEpOworKwlyZWdfdG1wID0gcmVnX3RtcCAmIDB4ZmY7CisrCXByX2luZm8oImFmdGVyIHBhaXJBIG91dHB1dCA9ICV4XG4iLCByZWdfdG1wKTsKKysJaWYgKChyZWdfdG1wICYgMHg4MCkgIT0gMCkKKysJCXJlZ190bXAgPSAofnJlZ190bXApICsgMTsKKysJaWYgKChyZWdfdG1wICYgMHhmZikgPjQpCisrCQlwcl9pbmZvKCJwYWlyQSBSWF9EQ19PRkZTRVQgZXJyb3IiKTsKKyt9CisrCisrc3RhdGljIHZvaWQgY2hlY2tfcnhfZGNfb2Zmc2V0X3BhaXJfYihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHU4IHBoeWFkZHIpCisreworKwl1MzIgcmVnX3RtcDsKKysKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWYsIDB4MTUsIChwaHlhZGRyIDw8IDEzKSB8IDB4MTE1MSk7CisrCXJlZ190bXAgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCAgcGh5YWRkciwgMHgxZiwgMHgxYSk7CisrCXJlZ190bXAgPSByZWdfdG1wICYgMHhmZjsKKysJcHJfaW5mbygiYmVmb3JlIHBhaXJCIG91dHB1dCA9ICV4XG4iLCByZWdfdG1wKTsKKysJdWRlbGF5KDQwKTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBoeWFkZHIsIDB4MWYsIDB4MTUsIChwaHlhZGRyIDw8IDEzKSB8IDB4MTE0Myk7CisrCXVkZWxheSg0MCk7CisrCXJlZ190bXAgPSB0Y19waHlfcmVhZF9kZXZfcmVnKGRzLCAgcGh5YWRkciwgMHgxZiwgMHgxYSk7CisrCXJlZ190bXAgPSByZWdfdG1wICYgMHhmZjsKKysJcHJfaW5mbygiYWZ0ZXIgcGFpckIgb3V0cHV0ID0gJXhcbiIsIHJlZ190bXApOworKwlpZiAoKHJlZ190bXAgJiAweDgwKSAhPSAwKQorKwkJcmVnX3RtcCA9ICh+cmVnX3RtcCkgKyAxOworKwlpZiAoKHJlZ190bXAgJiAweGZmKSA+NCkKKysJCXByX2luZm8oInBhaXJCIFJYX0RDX09GRlNFVCBlcnJvciIpOworK30KKysKKytzdGF0aWMgdm9pZCBjaGVja19yeF9kY19vZmZzZXRfcGFpcl9jKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgdTggcGh5YWRkcikKKyt7CisrCXUzMiByZWdfdG1wOworKworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZiwgMHgxNSwgKHBoeWFkZHIgPDwgMTMpIHwgMHgxMTUzKTsKKysJcmVnX3RtcCA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsICBwaHlhZGRyLCAweDFmLCAweDFhKTsKKysJcmVnX3RtcCA9IHJlZ190bXAgJiAweGZmOworKwlwcl9pbmZvKCJiZWZvcmUgcGFpckMgb3V0cHV0ID0gJXhcbiIsIHJlZ190bXApOworKwl1ZGVsYXkoNDApOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcGh5YWRkciwgMHgxZiwgMHgxNSwgKHBoeWFkZHIgPDwgMTMpIHwgMHgxMTQ0KTsKKysJdWRlbGF5KDQwKTsKKysJcmVnX3RtcCA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsICBwaHlhZGRyLCAweDFmLCAweDFhKTsKKysJcmVnX3RtcCA9IHJlZ190bXAgJiAweGZmOworKwlwcl9pbmZvKCJhZnRlciBwYWlyQyBvdXRwdXQgPSAleFxuIiwgcmVnX3RtcCk7CisrCWlmICgocmVnX3RtcCAmIDB4ODApICE9IDApCisrCQlyZWdfdG1wID0gKH5yZWdfdG1wKSArIDE7CisrCWlmICgocmVnX3RtcCAmIDB4ZmYpID40KQorKwkJcHJfaW5mbygicGFpckMgUlhfRENfT0ZGU0VUIGVycm9yIik7CisrfQorKworK3N0YXRpYyB2b2lkIGNoZWNrX3J4X2RjX29mZnNldF9wYWlyX2Qoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCB1OCBwaHlhZGRyKQorK3sKKysJdTMyIHJlZ190bXA7CisrCisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFmLCAweDE1LCAocGh5YWRkciA8PCAxMykgfCAweDExNTUpOworKwlyZWdfdG1wID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgIHBoeWFkZHIsIDB4MWYsIDB4MWEpOworKwlyZWdfdG1wID0gcmVnX3RtcCAmIDB4ZmY7CisrCXByX2luZm8oImJlZm9yZSBwYWlyRCBvdXRwdXQgPSAleFxuIiwgcmVnX3RtcCk7CisrCXVkZWxheSg0MCk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwaHlhZGRyLCAweDFmLCAweDE1LCAocGh5YWRkciA8PCAxMykgfCAweDExNDUpOworKwl1ZGVsYXkoNDApOworKwlyZWdfdG1wID0gdGNfcGh5X3JlYWRfZGV2X3JlZyhkcywgIHBoeWFkZHIsIDB4MWYsIDB4MWEpOworKwlyZWdfdG1wID0gcmVnX3RtcCAmIDB4ZmY7CisrCXByX2luZm8oImFmdGVyIHBhaXJEIG91dHB1dCA9ICV4XG4iLCByZWdfdG1wKTsKKysJaWYgKChyZWdfdG1wICYgMHg4MCkgIT0gMCkKKysJCXJlZ190bXAgPSAofnJlZ190bXApICsgMTsKKysJaWYgKChyZWdfdG1wICYgMHhmZikgPjQpCisrCQlwcl9pbmZvKCJwYWlyRCBSWF9EQ19PRkZTRVQgZXJyb3IiKTsKKyt9CisrCisrLyogMTIgcmVnaXN0ZXJzIGZvciBUWF9NTFQzIHdhdmVmb3JtIHR1bmluZy4KKysgKiAgICAwMTIgMzQ1IDY3OCA5YWIKKysgKiAgMSAgICBfXworKyAqICAgICBfLyAgXF8KKysgKiAgMF8vICAgICAgXAorKyAqICAgICAgICAgICAgXF8gICAgXy8KKysgKiAtMSAgICAgICAgICAgXF9fLworKyAqLworK3N0YXRpYyB2b2lkIG10NzUzMV9waHlfMTAwbV9leWVfZGlhZ19zZXR0aW5nKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgdTMyIHBvcnQpCisreworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcG9ydCwgUEhZX0RFVjFFLCBQSFlfVFhfTUxUM19CQVNFICsgMHgwLCAweDE4Nyk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwb3J0LCBQSFlfREVWMUUsIFBIWV9UWF9NTFQzX0JBU0UgKyAweDEsIDB4MWM5KTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBvcnQsIFBIWV9ERVYxRSwgUEhZX1RYX01MVDNfQkFTRSArIDB4MiwgMHgxYzYpOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcG9ydCwgUEhZX0RFVjFFLCBQSFlfVFhfTUxUM19CQVNFICsgMHgzLCAweDE4Mik7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwb3J0LCBQSFlfREVWMUUsIFBIWV9UWF9NTFQzX0JBU0UgKyAweDQsIDB4MjA4KTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBvcnQsIFBIWV9ERVYxRSwgUEhZX1RYX01MVDNfQkFTRSArIDB4NSwgMHgyMDUpOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcG9ydCwgUEhZX0RFVjFFLCBQSFlfVFhfTUxUM19CQVNFICsgMHg2LCAweDM4NCk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwb3J0LCBQSFlfREVWMUUsIFBIWV9UWF9NTFQzX0JBU0UgKyAweDcsIDB4M2NiKTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBvcnQsIFBIWV9ERVYxRSwgUEhZX1RYX01MVDNfQkFTRSArIDB4OCwgMHgzYzQpOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcG9ydCwgUEhZX0RFVjFFLCBQSFlfVFhfTUxUM19CQVNFICsgMHg5LCAweDMwYSk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwb3J0LCBQSFlfREVWMUUsIFBIWV9UWF9NTFQzX0JBU0UgKyAweGEsIDB4MDBiKTsKKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBvcnQsIFBIWV9ERVYxRSwgUEhZX1RYX01MVDNfQkFTRSArIDB4YiwgMHgwMDIpOworK30KKysKKytzdGF0aWMgdm9pZCBtdDc1MzFfcGh5X3NldHRpbmcoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQorK3sKKysJaW50IGk7CisrCXUzMiB2YWw7CisrCisrCWZvciAoaSA9IDA7IGkgPCBNVDc1MzFfTlVNX1BIWVM7IGkrKykgeworKwkJbXQ3NTMxX3BoeV8xMDBtX2V5ZV9kaWFnX3NldHRpbmcoZHMsIGkpOworKworKwkJLyogRW5hYmxlIEhXIGF1dG8gZG93bnNoaWZ0ICovCisrCQlzd2l0Y2hfcGh5X3dyaXRlKGRzLCBpLCAweDFmLCAweDEpOworKwkJdmFsID0gc3dpdGNoX3BoeV9yZWFkKGRzLCBpLCBQSFlfRVhUX1JFR18xNCk7CisrCQl2YWwgfD0gUEhZX0VOX0RPV05fU0hGSVQ7CisrCQlzd2l0Y2hfcGh5X3dyaXRlKGRzLCBpLCBQSFlfRVhUX1JFR18xNCwgdmFsKTsKKysKKysJCS8qIERlY3JlYXNlIFNsdkRQU3JlYWR5IHRpbWUgKi8KKysJCXZhbCA9IG10NzUzeF90cl9yZWFkKGRzLCBpLCBQTUFfQ0gsIFBNQV9OT0QsIFBNQV8xNyk7CisrCQl2YWwgJj0gflNMVl9EU1BfUkVBRFlfVElNRV9NOworKwkJdmFsIHw9IDB4YyA8PCBTTFZfRFNQX1JFQURZX1RJTUVfUzsKKysJCW10NzUzeF90cl93cml0ZShkcywgaSwgUE1BX0NILCBQTUFfTk9ELCBQTUFfMTcsIHZhbCk7CisrCisrCQkvKiBFbmFibGUgUmFuZG9tIFVwZGF0ZSBNZWNoYW5pc20gKi8KKysJCXZhbCA9IG10NzUzeF90cl9yZWFkKGRzLCBpLCBQTUFfQ0gsIFBNQV9OT0QsIFBNQV8xOCk7CisrCQl2YWwgfD0gRU5BQkxFX1JBTkRPTV9VUERBVEVfVFJJR0dFUjsKKysJCW10NzUzeF90cl93cml0ZShkcywgaSwgUE1BX0NILCBQTUFfTk9ELCBQTUFfMTgsIHZhbCk7CisrCisrCQkvKiBQSFkgbGluayBkb3duIHBvd2VyIHNhdmluZyBlbmFibGUgKi8KKysJCXZhbCA9IHN3aXRjaF9waHlfcmVhZChkcywgaSwgUEhZX0VYVF9SRUdfMTcpOworKwkJdmFsIHw9IFBIWV9MSU5LRE9XTl9QT1dFUl9TQVZJTkdfRU47CisrCQlzd2l0Y2hfcGh5X3dyaXRlKGRzLCBpLCBQSFlfRVhUX1JFR18xNywgdmFsKTsKKysKKysJCXZhbCA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsIGksIFBIWV9ERVYxRSwgUEhZX0RFVjFFX1JFR18wQzYpOworKwkJdmFsICY9IH5QSFlfUE9XRVJfU0FWSU5HX007CisrCQl2YWwgfD0gUEhZX1BPV0VSX1NBVklOR19UWCA8PCBQSFlfUE9XRVJfU0FWSU5HX1M7CisrCQl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgaSwgUEhZX0RFVjFFLCBQSFlfREVWMUVfUkVHXzBDNiwgdmFsKTsKKysKKysJCS8qIFRpbWluZyBSZWNvdmVyeSBmb3IgR2JFIHNsYXZlIG1vZGUgKi8KKysJCW10NzUzeF90cl93cml0ZShkcywgaSwgUE1BX0NILCBQTUFfTk9ELCBQTUFfMDEsIDB4NmZiOTBhKTsKKysJCW10NzUzeF90cl93cml0ZShkcywgaSwgRFNQX0NILCBEU1BfTk9ELCBEU1BfMDYsIDB4MmViYWVmKTsKKysJCXZhbCA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsIGksIFBIWV9ERVYxRSwgUEhZX0RFVjFFX1JFR18yMzQpOworKwkJdmFsIHw9IFRSX09QRU5fTE9PUF9FTjsKKysJCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBpLCBQSFlfREVWMUUsIFBIWV9ERVYxRV9SRUdfMjM0LCB2YWwpOworKworKwkJLyogRW5hYmxlIEFzeW1tZXRyaWMgUGF1c2UgQ2FwYWJpbGl0eSAqLworKwkJdmFsID0gc3dpdGNoX3BoeV9yZWFkKGRzLCBpLCBNSUlfQURWRVJUSVNFKTsKKysJCXZhbCB8PSBBRFZFUlRJU0VfUEFVU0VfQVNZTTsKKysJCXN3aXRjaF9waHlfd3JpdGUoZHMsIGksIE1JSV9BRFZFUlRJU0UsIHZhbCk7CisrCX0KKyt9CisrCisrc3RhdGljIHZvaWQgbXQ3NTMxX2FkanVzdF9saW5lX2RyaXZpbmcoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCB1MzIgcG9ydCkKKyt7CisrCS8qIEZvciBBREMgdGltaW5nIG1hcmdpbiB3aW5kb3cgZm9yIExETyBjYWxpYnJhdGlvbiAqLworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcG9ydCwgUEhZX0RFVjFFLCBSWEFEQ19MRE9fQ09OVFJPTF8yLCAweDIyMjIpOworKworKwkvKiBBZGp1c3QgQUQgc2FtcGxlIHRpbWluZyAqLworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcG9ydCwgUEhZX0RFVjFFLCBSWEFEQ19DT05UUk9MXzMsIDB4NDQ0NCk7CisrCisrCS8qIEFkanVzdCBMaW5lIGRyaXZlciBjdXJyZW50IGZvciBkaWZmZXJlbnQgbW9kZSAqLworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcG9ydCwgUEhZX0RFVjFGLCBUWFZMRF9EQV8yNzEsIDB4MmNhNSk7CisrCisrCS8qIEFkanVzdCBMaW5lIGRyaXZlciBjdXJyZW50IGZvciBkaWZmZXJlbnQgbW9kZSAqLworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcG9ydCwgUEhZX0RFVjFGLCBUWFZMRF9EQV8yNzIsIDB4YzZiKTsKKysKKysJLyogQWRqdXN0IExpbmUgZHJpdmVyIGdhaW4gZm9yIDEwQlQgZnJvbSAxMDAwQlQgY2FsaWJyYXRpb24gcmVzdWx0ICovCisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwb3J0LCBQSFlfREVWMUYsIFRYVkxEX0RBXzI3MywgMHgzMDAwKTsKKysKKysJLyogQWRqdXN0IFJYIEVjaG8gcGF0aCBmaWx0ZXIgKi8KKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBvcnQsIFBIWV9ERVYxRSwgUEhZX0RFVjFFX1JFR18wRkUsIDB4Mik7CisrCisrCS8qIEFkanVzdCBSWCBIVkdBIGJpYXMgY3VycmVudCAqLworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcG9ydCwgUEhZX0RFVjFFLCBQSFlfREVWMUVfUkVHXzQxLCAweDMzMzMpOworKworKwkvKiBBZGp1c3QgVFggY2xhc3MgQUIgZHJpdmVyIDEgKi8KKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBvcnQsIFBIWV9ERVYxRiwgUEhZX0RFVjFGX1JFR18yNjgsIDB4Mzg0KTsKKysKKysJLyogQWRqdXN0IFRYIGNsYXNzIEFCIGRyaXZlciAyICovCisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwb3J0LCBQSFlfREVWMUYsIFBIWV9ERVYxRl9SRUdfMjY5LCAweDExMTQpOworKworKwkvKiBBZGp1c3QgREFDIGRlbGF5IGZvciBUWCBQYWlycyAqLworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcG9ydCwgUEhZX0RFVjFFLCBQSFlfREVWMUVfUkVHXzEzLCAweDQwNCk7CisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwb3J0LCBQSFlfREVWMUUsIFBIWV9ERVYxRV9SRUdfMTQsIDB4NDA0KTsKKysKKysJLyogQWRqdXN0IERBQyBkaWdpdGFsIGRlbGF5IGZvciBUWCBEZWxheSAqLworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcG9ydCwgUEhZX0RFVjFGLCBQSFlfREVWMUZfUkVHXzQ0LCAweGMwKTsKKysKKysJLyogQWRqdXN0IExpbmUgZHJpdmVyIGNvbXBlbnNhdGlvbiBjYXAgZm9yIHN0YWJpbGl0eSBjb25jZXJuIGR1ZSB0bworKwkgKiBpbmNyZWFzZSBjdXJyZW50LgorKwkgKi8KKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBvcnQsIFBIWV9ERVYxRiwgUEhZX0RFVjFGX1JFR18yNkEsIDB4MzMzMyk7CisrfQorKworK3N0YXRpYyB2b2lkIG10NzUzMV9lZWVfc2V0dGluZyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIHUzMiBwb3J0KQorK3sKKysJdTMyIHZhbDsKKysKKysJLyogRGlzYWJsZSBFRUUgKi8KKysJdGNfcGh5X3dyaXRlX2Rldl9yZWcoZHMsIHBvcnQsIFBIWV9ERVYwNywgUEhZX0RFVjA3X1JFR18wM0MsIDApOworKworKwkvKiBEaXNhYmxlIGdlbmVyYXRlIHNpZ25hbCB0byBjbGVhciB0aGUgc2NyYW1ibGVfbG9jayB3aGVuIGxwaSBtb2RlICovCisrCXZhbCA9IHRjX3BoeV9yZWFkX2Rldl9yZWcoZHMsIHBvcnQsIFBIWV9ERVYxRSwgUEhZX0RFVjFFX1JFR18xODkpOworKwl2YWwgJj0gfkRFU0NSQU1CTEVSX0NMRUFSX0VOOworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcG9ydCwgUEhZX0RFVjFFLCBQSFlfREVWMUVfUkVHXzE4OSwgdmFsKTsKKysKKysJLyogUm9sbCBiYWNrIEVFRSBTbGF2ZSBNb2RlICovCisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwb3J0LCAweDFlLCAweDJkMSwgMCk7CisrCW10NzUzeF90cl93cml0ZShkcywgcG9ydCwgRFNQX0NILCBEU1BfTk9ELCBEU1BfMDgsIDB4MWIpOworKwltdDc1M3hfdHJfd3JpdGUoZHMsIHBvcnQsIERTUF9DSCwgRFNQX05PRCwgRFNQXzBmLCAwKTsKKysJbXQ3NTN4X3RyX3dyaXRlKGRzLCBwb3J0LCBEU1BfQ0gsIERTUF9OT0QsIERTUF8xMCwgMHg1MDAwKTsKKysKKysJLyogQWRqdXN0IDEwMF9tc2VfdGhyZXNob2xkICovCisrCXRjX3BoeV93cml0ZV9kZXZfcmVnKGRzLCBwb3J0LCBQSFlfREVWMUUsIFBIWV9ERVYxRV9SRUdfMTIzLCAweGZmZmYpOworKworKwkvKiBEaXNhYmxlIG1jYyAqLworKwl0Y19waHlfd3JpdGVfZGV2X3JlZyhkcywgcG9ydCwgUEhZX0RFVjFFLCBQSFlfREVWMUVfUkVHX0E2LCAweDMwMCk7CisrfQorKworK2ludCBtdDc1MzFfcGh5X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKKyt7CisrCWludCByZXQ7CisrCWludCBpOworKworKwltdDc1MzFfcGh5X3NldHRpbmcoZHMpOworKworKwlmb3IgKGkgPSAwOyBpIDwgTVQ3NTMxX05VTV9QSFlTOyBpKyspIHsKKysJCW10NzUzMV9hZGp1c3RfbGluZV9kcml2aW5nKGRzLCBpKTsKKysJCW10NzUzMV9lZWVfc2V0dGluZyhkcywgaSk7CisrCX0KKysKKysJLypmb3IgKGkgPSAwOyBpIDwgTVQ3NTMxX05VTV9QSFlTOyBpKyspIHsKKysJCXJldCA9IHBoeV9jYWxpYnJhdGlvbihkcywgaSk7CisrCisrCQlyeF9kY19vZmZzZXQoZHMsIGkpOworKwkJY2hlY2tfcnhfZGNfb2Zmc2V0X3BhaXJfYShkcywgaSk7CisrCQljaGVja19yeF9kY19vZmZzZXRfcGFpcl9iKGRzLCBpKTsKKysJCWNoZWNrX3J4X2RjX29mZnNldF9wYWlyX2MoZHMsIGkpOworKwkJY2hlY2tfcnhfZGNfb2Zmc2V0X3BhaXJfZChkcywgaSk7CisrCisrCQlzd2l0Y2hfcGh5X3dyaXRlKGRzLCBpLCAwLCAweDEwNDApOworKwl9Ki8KKysKKysJcmV0dXJuIHJldDsKKyt9CitJbmRleDogbGludXgtNS40LjEyNC9kcml2ZXJzL25ldC9kc2EvbXQ3NTMxX3BoeS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgbGludXgtNS40LjEyNC9kcml2ZXJzL25ldC9kc2EvbXQ3NTMxX3BoeS5oCitAQCAtMCwwICsxLDI2MiBAQAorKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOglHUEwtMi4wKyAqLworKy8qCisrICogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgZm9yIE1lZGlhVGVrIE1UNzUzeCBHaWdhYml0IHN3aXRjaGVzCisrICoKKysgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWVkaWFUZWsgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKyAqCisrICogQXV0aG9yOiBXZWlqaWUgR2FvIDx3ZWlqaWUuZ2FvQG1lZGlhdGVrLmNvbT4KKysgKi8KKysKKysjaWZuZGVmIF9NVDc1M1hfUEhZX0hfCisrI2RlZmluZSBfTVQ3NTNYX1BIWV9IXworKworKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKysKKysvKnBoeSBjYWxpYnJhdGlvbiB1c2UqLworKyNkZWZpbmUgREVWXzFFCQkJCTB4MUUKKysvKmdsb2JhbCBkZXZpY2UgMHgxZiwgYWx3YXlzIHNldCBQMCovCisrI2RlZmluZSBERVZfMUYJCQkJMHgxRgorKworKworKy8qKioqKioqKioqKipJRVhUL1JFWFQgQ0FMKioqKioqKioqKioqKioqLworKy8qIGJpdHMgcmFuZ2U6IGZvciBleGFtcGxlIEJJVFMoMTYsMjMpID0gMHhGRjAwMDAqLworKyNkZWZpbmUgQklUUyhtLCBuKSAgICh+KEJJVChtKSAtIDEpICYgKChCSVQobikgLSAxKSB8IEJJVChuKSkpCisrI2RlZmluZSBBTkFDQUxfSU5JVAkJCTB4MDEKKysjZGVmaW5lIEFOQUNBTF9FUlJPUgkJCTB4RkQKKysjZGVmaW5lIEFOQUNBTF9TQVRVUkFUSU9OCQkweEZFCisrI2RlZmluZQlBTkFDQUxfRklOSVNICQkJMHhGRgorKyNkZWZpbmUgQU5BQ0FMX1BBSVJfQQkJCTAKKysjZGVmaW5lIEFOQUNBTF9QQUlSX0IJCQkxCisrI2RlZmluZSBBTkFDQUxfUEFJUl9DCQkJMgorKyNkZWZpbmUgQU5BQ0FMX1BBSVJfRAkJCTMKKysjZGVmaW5lIERBQ19JTl8wVgkJCTB4MDAKKysjZGVmaW5lIERBQ19JTl8yVgkJCTB4ZjAKKysjZGVmaW5lIFRYX0FNUF9PRkZTRVRfME1WCQkweDIwCisrI2RlZmluZSBUWF9BTVBfT0ZGU0VUX1ZBTElEX0JJVFMJNgorKworKyNkZWZpbmUgUjAJCQkJMAorKyNkZWZpbmUgUEhZMAkJCQkwCisrI2RlZmluZSBQSFkxCQkJCTEKKysjZGVmaW5lIFBIWTIJCQkJMgorKyNkZWZpbmUgUEhZMwkJCQkzCisrI2RlZmluZSBQSFk0CQkJCTQKKysjZGVmaW5lIEFOQV9URVNUX01PREUJCQlCSVRTKDgsIDE1KQorKyNkZWZpbmUgVFNUX1RDTEtfU0VMCQkJQklUcyg2LCA3KQorKyNkZWZpbmUgQU5BX1RFU1RfVkdBX1JHCQkJMHgxMDAKKysKKysjZGVmaW5lIEZPUkNFX01ESV9DUk9TU19PVkVSCQlCSVRTKDMsIDQpCisrI2RlZmluZSBUMTBfVEVTVF9DVExfUkcJCQkweDE0NQorKyNkZWZpbmUgUkdfMTg1CQkJCTB4MTg1CisrI2RlZmluZSBSR19UWF9TTEVXCQkJQklUKDApCisrI2RlZmluZSBBTkFfQ0FMXzAJCQkweGRiCisrI2RlZmluZSBSR19DQUxfQ0tJTlYJCQlCSVQoMTIpCisrI2RlZmluZSBSR19BTkFfQ0FMRU4JCQlCSVQoOCkKKysjZGVmaW5lIFJHX1JFWFRfQ0FMRU4JCQlCSVQoNCkKKysjZGVmaW5lIFJHX1pDQUxFTl9BCQkJQklUKDApCisrI2RlZmluZSBBTkFfQ0FMXzEJCQkweGRjCisrI2RlZmluZSBSR19aQ0FMRU5fQgkJCUJJVCgxMikKKysjZGVmaW5lIFJHX1pDQUxFTl9DCQkJQklUKDgpCisrI2RlZmluZSBSR19aQ0FMRU5fRAkJCUJJVCg0KQorKyNkZWZpbmUgUkdfVFhWT1NfQ0FMRU4JCQlCSVQoMCkKKysjZGVmaW5lIEFOQV9DQUxfNgkJCTB4ZTEKKysjZGVmaW5lIFJHX0NBTF9SRUZTRUwJCQlCSVQoNCkKKysjZGVmaW5lIFJHX0NBTF9DT01QX1BXRAkJCUJJVCgwKQorKyNkZWZpbmUgQU5BX0NBTF81CQkJMHhlMAorKyNkZWZpbmUgUkdfUkVYVF9UUklNCQkJQklUcyg4LCAxMykKKysjZGVmaW5lIFJHX1pDQUxfQ1RSTAkJCUJJVHMoMCwgNSkKKysjZGVmaW5lIFJHXzE3QQkJCQkweDE3YQorKyNkZWZpbmUgQURfQ0FMX0NPTVBfT1VUCQkJQklUKDgpCisrI2RlZmluZSBSR18xN0IJCQkJMHgxN2IKKysjZGVmaW5lIEFEX0NBTF9DTEsJCQliaXQoMCkKKysjZGVmaW5lIFJHXzE3QwkJCQkweDE3YworKyNkZWZpbmUgREFfQ0FMSU5fRkxBRwkJCWJpdCgwKQorKy8qKioqKioqKioqKipSNTAgQ0FMKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysjZGVmaW5lIFJHXzE3NAkJCQkweDE3NAorKyNkZWZpbmUgUkdfUjUwT0hNX1JTRUxfVFhfQV9FTgkJQklUWzE1XQorKyNkZWZpbmUgQ1JfUjUwT0hNX1JTRUxfVFhfQQkJQklUU1s4OjE0XQorKyNkZWZpbmUgUkdfUjUwT0hNX1JTRUxfVFhfQl9FTgkJQklUWzddCisrI2RlZmluZSBDUl9SNTBPSE1fUlNFTF9UWF9CCQlCSVRTWzY6MF0KKysjZGVmaW5lIFJHXzE3NQkJCQkweDE3NQorKyNkZWZpbmUgUkdfUjUwT0hNX1JTRUxfVFhfQ19FTgkJQklUU1sxNV0KKysjZGVmaW5lIENSX1I1ME9ITV9SU0VMX1RYX0MJCUJJVFNbODoxNF0KKysjZGVmaW5lIFJHX1I1ME9ITV9SU0VMX1RYX0RfRU4JCUJJVFs3XQorKyNkZWZpbmUgQ1JfUjUwT0hNX1JTRUxfVFhfRAkJQklUU1swOjZdCisrLyoqKioqKioqKipUWCBvZmZzZXQgQ2FsaWJyYXRpb24qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrI2RlZmluZSBSR185NQkJCQkweDk2CisrI2RlZmluZSBCWVBBU1NfVFhfT0ZGU0VUX0NBTAkJQklUKDE1KQorKyNkZWZpbmUgUkdfM0UJCQkJMHgzZQorKyNkZWZpbmUgQllQQVNTX1BEX1RYVkxEX0EJCUJJVCgxNSkKKysjZGVmaW5lIEJZUEFTU19QRF9UWFZMRF9CCQlCSVQoMTQpCisrI2RlZmluZSBCWVBBU1NfUERfVFhWTERfQwkJQklUKDEzKQorKyNkZWZpbmUgQllQQVNTX1BEX1RYVkxEX0QJCUJJVCgxMikKKysjZGVmaW5lIEJZUEFTU19QRF9UWF8xME0JCUJJVCgxMSkKKysjZGVmaW5lIFBPV0VSX0RPV05fVFhWTERfQQkJQklUKDcpCisrI2RlZmluZSBQT1dFUl9ET1dOX1RYVkxEX0IJCUJJVCg2KQorKyNkZWZpbmUgUE9XRVJfRE9XTl9UWFZMRF9DCQlCSVQoNSkKKysjZGVmaW5lIFBPV0VSX0RPV05fVFhWTERfRAkJQklUKDQpCisrI2RlZmluZSBQT1dFUl9ET1dOX1RYXzEwTQkJQklUKDMpCisrI2RlZmluZSBSR19ERAkJCQkweGRkCisrI2RlZmluZSBSR19UWEdfQ0FMRU5fQQkJCUJJVCgxMikKKysjZGVmaW5lIFJHX1RYR19DQUxFTl9CCQkJQklUKDgpCisrI2RlZmluZSBSR19UWEdfQ0FMRU5fQwkJCUJJVCg0KQorKyNkZWZpbmUgUkdfVFhHX0NBTEVOX0QJCQlCSVQoMCkKKysjZGVmaW5lIFJHXzE3RAkJCQkweDE3RAorKyNkZWZpbmUgRk9SQ0VfREFTTl9EQUNfSU4wX0EJCUJJVCgxNSkKKysjZGVmaW5lIERBU05fREFDX0lOMF9BCQkJQklUUygwLCA5KQorKyNkZWZpbmUgUkdfMTdFCQkJCTB4MTdFCisrI2RlZmluZSBGT1JDRV9EQVNOX0RBQ19JTjBfQgkJQklUKDE1KQorKyNkZWZpbmUgREFTTl9EQUNfSU4wX0IJCQlCSVRTKDAsIDkpCisrI2RlZmluZSBSR18xN0YJCQkJMHgxN0YKKysKKysjZGVmaW5lIEZPUkNFX0RBU05fREFDX0lOMF9DCQlCSVQoMTUpCisrI2RlZmluZSBEQVNOX0RBQ19JTjBfQwkJCUJJVFMoMCwgOSkKKysjZGVmaW5lIFJHXzE4MAkJCQkweDE4MAorKyNkZWZpbmUgRk9SQ0VfREFTTl9EQUNfSU4wX0QJCUJJVCgxNSkKKysjZGVmaW5lIERBU05fREFDX0lOMF9ECQkJQklUUygwLCA5KQorKworKyNkZWZpbmUgUkdfMTgxCQkJCTB4MTgxCisrI2RlZmluZSBGT1JDRV9EQVNOX0RBQ19JTjFfQQkJQklUKDE1KQorKyNkZWZpbmUgREFTTl9EQUNfSU4xX0EJCQlCSVRTKDAsIDkpCisrI2RlZmluZSBSR18xODIJCQkJMHgxODIKKysjZGVmaW5lIEZPUkNFX0RBU05fREFDX0lOMV9CCQlCSVQoMTUpCisrI2RlZmluZSBEQVNOX0RBQ19JTjFfQgkJCUJJVFMoMCwgOSkKKysjZGVmaW5lIFJHXzE4MwkJCQkweDE4MworKyNkZWZpbmUgRk9SQ0VfREFTTl9EQUNfSU4xX0MJCUJJVCgxNSkKKysjZGVmaW5lIERBU05fREFDX0lOMV9DCQkJQklUUygwLCA5KQorKyNkZWZpbmUgUkdfMTg0CQkJCTB4MTg0CisrI2RlZmluZSBGT1JDRV9EQVNOX0RBQ19JTjFfRAkJQklUKDE1KQorKyNkZWZpbmUgREFTTl9EQUNfSU4xX0QJCQlCSVRTKDAsIDkpCisrI2RlZmluZSBSR18xNzIJCQkJMHgxNzIKKysjZGVmaW5lIENSX1RYX0FNUF9PRkZTRVRfQQkJQklUUyg4LCAxMykKKysjZGVmaW5lIENSX1RYX0FNUF9PRkZTRVRfQgkJQklUUygwLCA1KQorKyNkZWZpbmUgUkdfMTczCQkJCTB4MTczCisrI2RlZmluZSBDUl9UWF9BTVBfT0ZGU0VUX0MJCUJJVFMoOCwgMTMpCisrI2RlZmluZSBDUl9UWF9BTVBfT0ZGU0VUX0QJCUJJVFMoMCwgNSkKKysvKioqKioqKioqKlRYIEFtcCBDYWxpYnJhdGlvbiAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrI2RlZmluZSBSR18xMgkJCQkweDEyCisrI2RlZmluZSBEQV9UWF9JMk1QQl9BX0dCRQkJQklUUygxMCwgMTUpCisrI2RlZmluZSBSR18xNwkJCQkweDE3CisrI2RlZmluZSBEQV9UWF9JMk1QQl9CX0dCRQkJQklUUyg4LCAxMykKKysjZGVmaW5lIFJHXzE5CQkJCTB4MTkKKysjZGVmaW5lIERBX1RYX0kyTVBCX0NfR0JFCQlCSVRTKDgsIDEzKQorKyNkZWZpbmUgUkdfMjEJCQkJMHgyMQorKyNkZWZpbmUgREFfVFhfSTJNUEJfRF9HQkUJCUJJVFMoOCwgMTMpCisrI2RlZmluZSBUWF9BTVBfTUFYCQkJMHgzZgorKyNkZWZpbmUgVFhfQU1QX01BWF9PRkZTRVQJCTB4YgorKyNkZWZpbmUgVFhfQU1QX0hJR0hFU1RfVFMJCSgoVFhfQU1QX01BWCkgKyAzKQorKyNkZWZpbmUgVFhfQU1QX0xPV0VTVF9UUwkJKDAgLSAzKQorKyNkZWZpbmUgVFhfQU1QX0hJR0hfVFMJCQkoVFhfQU1QX01BWCkKKysjZGVmaW5lIFRYX0FNUF9MT1dfVFMJCQkwCisrCisrLyogUEhZIEV4dGVuZCBSZWdpc3RlciAweDE0IGJpdG1hcCBvZiBkZWZpbmUgKi8KKysjZGVmaW5lIFBIWV9FWFRfUkVHXzE0CQkJMHgxNAorKworKy8qIEZpZWxkcyBvZiBQSFlfRVhUX1JFR18xNCAqLworKyNkZWZpbmUgUEhZX0VOX0RPV05fU0hGSVQJCUJJVCg0KQorKworKy8qIFBIWSBFeHRlbmQgUmVnaXN0ZXIgMHgxNyBiaXRtYXAgb2YgZGVmaW5lICovCisrI2RlZmluZSBQSFlfRVhUX1JFR18xNwkJCTB4MTcKKysKKysvKiBGaWVsZHMgb2YgUEhZX0VYVF9SRUdfMTcgKi8KKysjZGVmaW5lIFBIWV9MSU5LRE9XTl9QT1dFUl9TQVZJTkdfRU4JQklUKDQpCisrCisrLyogUEhZIFBNQSBSZWdpc3RlciAweDE3IGJpdG1hcCBvZiBkZWZpbmUgKi8KKysjZGVmaW5lIFNMVl9EU1BfUkVBRFlfVElNRV9TCQkxNQorKyNkZWZpbmUgU0xWX0RTUF9SRUFEWV9USU1FX00JCSgweGZmIDw8IFNMVl9EU1BfUkVBRFlfVElNRV9TKQorKworKy8qIFBIWSBQTUEgUmVnaXN0ZXIgMHgxOCBiaXRtYXAgb2YgZGVmaW5lICovCisrI2RlZmluZSBFTkFCTEVfUkFORE9NX1VQREFURV9UUklHR0VSCUJJVCg4KQorKworKy8qIFBIWSBFRUUgUmVnaXN0ZXIgYml0bWFwIG9mIGRlZmluZSAqLworKyNkZWZpbmUgUEhZX0RFVjA3CQkJMHgwNworKyNkZWZpbmUgUEhZX0RFVjA3X1JFR18wM0MJCTB4M2MKKysKKysvKiBQSFkgREVWIDB4MWUgUmVnaXN0ZXIgYml0bWFwIG9mIGRlZmluZSAqLworKyNkZWZpbmUgUEhZX0RFVjFFCQkJMHgxZQorKyNkZWZpbmUgUEhZX0RFVjFGCQkJMHgxZgorKworKy8qIFByb3ByaWV0b3J5IENvbnRyb2wgUmVnaXN0ZXIgb2YgSW50ZXJuYWwgUGh5IGRldmljZSAweDFlICovCisrI2RlZmluZSBQSFlfVFhfTUxUM19CQVNFCQkweDAKKysjZGVmaW5lIFBIWV9ERVYxRV9SRUdfMTMJCTB4MTMKKysjZGVmaW5lIFBIWV9ERVYxRV9SRUdfMTQJCTB4MTQKKysjZGVmaW5lIFBIWV9ERVYxRV9SRUdfNDEJCTB4NDEKKysjZGVmaW5lIFBIWV9ERVYxRV9SRUdfQTYJCTB4YTYKKysjZGVmaW5lIFJYQURDX0NPTlRST0xfMwkJCTB4YzIKKysjZGVmaW5lIFBIWV9ERVYxRV9SRUdfMEM2CQkweGM2CisrI2RlZmluZSBSWEFEQ19MRE9fQ09OVFJPTF8yCQkweGQzCisrI2RlZmluZSBQSFlfREVWMUVfUkVHXzBGRQkJMHhmZQorKyNkZWZpbmUgUEhZX0RFVjFFX1JFR18xMjMJCTB4MTIzCisrI2RlZmluZSBQSFlfREVWMUVfUkVHXzE4OQkJMHgxODkKKysjZGVmaW5lIFBIWV9ERVYxRV9SRUdfMjM0CQkweDIzNAorKworKy8qIFByb3ByaWV0b3J5IENvbnRyb2wgUmVnaXN0ZXIgb2YgSW50ZXJuYWwgUGh5IGRldmljZSAweDFmICovCisrI2RlZmluZSBQSFlfREVWMUZfUkVHXzQ0CQkweDQ0CisrI2RlZmluZSBQSFlfREVWMUZfUkVHXzI2OAkJMHgyNjgKKysjZGVmaW5lIFBIWV9ERVYxRl9SRUdfMjY5CQkweDI2OQorKyNkZWZpbmUgUEhZX0RFVjFGX1JFR18yNkEJCTB4MjZBCisrI2RlZmluZSBUWFZMRF9EQV8yNzEJCQkweDI3MQorKyNkZWZpbmUgVFhWTERfREFfMjcyCQkJMHgyNzIKKysjZGVmaW5lIFRYVkxEX0RBXzI3MwkJCTB4MjczCisrCisrLyogRmllbGRzIG9mIFBIWV9ERVYxRV9SRUdfMEM2ICovCisrI2RlZmluZSBQSFlfUE9XRVJfU0FWSU5HX1MJCTgKKysjZGVmaW5lIFBIWV9QT1dFUl9TQVZJTkdfTQkJMHgzMDAKKysjZGVmaW5lIFBIWV9QT1dFUl9TQVZJTkdfVFgJCTB4MAorKworKy8qIEZpZWxkcyBvZiBQSFlfREVWMUVfUkVHXzE4OSAqLworKyNkZWZpbmUgREVTQ1JBTUJMRVJfQ0xFQVJfRU4JCTB4MQorKworKy8qIEZpZWxkcyBvZiBQSFlfREVWMUVfUkVHXzIzNCAqLworKyNkZWZpbmUgVFJfT1BFTl9MT09QX0VOCQkJQklUKDApCisrCisrLyogSW50ZXJuYWwgR1BIWSBQYWdlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKysjZGVmaW5lIFBIWV9DTDIyX1BBR0VfQ1RSTAkJMHgxZgorKyNkZWZpbmUgUEhZX1RSX1BBR0UJCQkweDUyYjUKKysKKysvKiBJbnRlcm5hbCBHUEhZIFRva2VuIFJpbmcgQWNjZXNzIFJlZ2lzdGVycyAqLworKyNkZWZpbmUgUEhZX1RSX0NUUkwJCQkweDEwCisrI2RlZmluZSBQSFlfVFJfTE9XX0RBVEEJCQkweDExCisrI2RlZmluZSBQSFlfVFJfSElHSF9EQVRBCQkweDEyCisrCisrLyogRmllbGRzIG9mIFBIWV9UUl9DVFJMICovCisrI2RlZmluZSBQSFlfVFJfUEtUX1hNVF9TVEEJCUJJVCgxNSkKKysjZGVmaW5lIFBIWV9UUl9XUl9TCQkJMTMKKysjZGVmaW5lIFBIWV9UUl9DSF9BRERSX1MJCTExCisrI2RlZmluZSBQSFlfVFJfTk9ERV9BRERSX1MJCTcKKysjZGVmaW5lIFBIWV9UUl9EQVRBX0FERFJfUwkJMQorKworK2VudW0gcGh5X3RyX3dyIHsKKysJUEhZX1RSX1dSSVRFID0gMCwKKysJUEhZX1RSX1JFQUQgPSAxLAorK307CisrCisrLyogSGVscGVyIG1hY3JvIGZvciBHUEhZIFRva2VuIFJpbmcgQWNjZXNzICovCisrI2RlZmluZSBQSFlfVFJfTE9XX1ZBTCh4KQkJKCh4KSAmIDB4ZmZmZikKKysjZGVmaW5lIFBIWV9UUl9ISUdIX1ZBTCh4KQkJKCgoeCkgJiAweGZmMDAwMCkgPj4gMTYpCisrCisrLyogVG9rZW4gUmluZyBDaGFubmVscyAqLworKyNkZWZpbmUgUE1BX0NICQkJCTB4MQorKyNkZWZpbmUgRFNQX0NICQkJCTB4MgorKworKy8qIFRva2VuIFJpbmcgTm9kZXMgKi8KKysjZGVmaW5lIFBNQV9OT0QJCQkJMHhmCisrI2RlZmluZSBEU1BfTk9ECQkJCTB4ZAorKworKy8qIFRva2VuIFJpbmcgcmVnaXN0ZXIgcmFuZ2UgKi8KKytlbnVtIHRyX3BtYV9yZWdfYWRkciB7CisrCVBNQV9NSU4gPSAweDAsCisrCVBNQV8wMSAgPSAweDEsCisrCVBNQV8xNyAgPSAweDE3LAorKwlQTUFfMTggID0gMHgxOCwKKysJUE1BX01BWCA9IDB4M2QsCisrfTsKKysKKytlbnVtIHRyX2RzcF9yZWdfYWRkciB7CisrCURTUF9NSU4gPSAweDAsCisrCURTUF8wNiAgPSAweDYsCisrCURTUF8wOCAgPSAweDgsCisrCURTUF8wZiAgPSAweGYsCisrCURTUF8xMCAgPSAweDEwLAorKwlEU1BfTUFYID0gMHgzZSwKKyt9OworKyNlbmRpZiAvKiBfTVQ3NTNYX1JFR1NfSF8gKi8KK0luZGV4OiBsaW51eC01LjQuMTI0L2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpbnV4LTUuNC4xMjQub3JpZy9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUKKysrKyBsaW51eC01LjQuMTI0L2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZQorQEAgLTYsNyArNiw4IEBAIGlmZGVmIENPTkZJR19ORVRfRFNBX0xPT1AKKyBvYmotJChDT05GSUdfRklYRURfUEhZKQkJKz0gZHNhX2xvb3BfYmRpbmZvLm8KKyBlbmRpZgorIG9iai0kKENPTkZJR19ORVRfRFNBX0xBTlRJUV9HU1dJUCkgKz0gbGFudGlxX2dzd2lwLm8KKy1vYmotJChDT05GSUdfTkVUX0RTQV9NVDc1MzApCSs9IG10NzUzMC5vCisrb2JqLSQoQ09ORklHX05FVF9EU0FfTVQ3NTMwKQkrPSBtdDc1MzAtZHNhLm8KKyttdDc1MzAtZHNhLW9ianMJCQk6PSBtdDc1MzAubyBtdDc1MzFfcGh5Lm8KKyBvYmotJChDT05GSUdfTkVUX0RTQV9NVjg4RTYwNjApICs9IG12ODhlNjA2MC5vCisgb2JqLSQoQ09ORklHX05FVF9EU0FfUUNBOEspCSs9IHFjYThrLm8KKyBvYmotJChDT05GSUdfTkVUX0RTQV9SRUFMVEVLX1NNSSkgKz0gcmVhbHRlay1zbWkubwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40Lzc0My1hZGQtbWVkaWF0ZWstZ2UtZ3BoeS1zdXBwb3J0LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40Lzc0My1hZGQtbWVkaWF0ZWstZ2UtZ3BoeS1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxOGYzMjQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvNzQzLWFkZC1tZWRpYXRlay1nZS1ncGh5LXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorLS0tIGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWcKKysrKyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCitAQCAtNTEyLDYgKzUxMiwxMSBAQCBjb25maWcgTUVTT05fR1hMX1BIWQorIAktLS1oZWxwLS0tCisgCSAgQ3VycmVudGx5IGhhcyBhIGRyaXZlciBmb3IgdGhlIEFtbG9naWMgTWVzb24gR1hMIEludGVybmFsIFBIWQorIAorK2NvbmZpZyBNRURJQVRFS19HRV9QSFkKKysJdHJpc3RhdGUgIk1lZGlhVGVrIEdpZ2FiaXQgRXRoZXJuZXQgUEhZcyIKKysJaGVscAorKwkgIFN1cHBvcnRzIHRoZSBNZWRpYVRlayBHaWdhYml0IEV0aGVybmV0IFBIWXMuCisrCisgY29uZmlnIE1JQ1JFTF9QSFkKKyAJdHJpc3RhdGUgIk1pY3JlbCBQSFlzIgorIAktLS1oZWxwLS0tCistLS0gYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUKKysrKyBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZQorQEAgLTkzLDYgKzkzLDcgQEAgb2JqLSQoQ09ORklHX0xTSV9FVDEwMTFDX1BIWSkJKz0gZXQxMDExYworIG9iai0kKENPTkZJR19MWFRfUEhZKQkJKz0gbHh0Lm8KKyBvYmotJChDT05GSUdfTUFSVkVMTF9QSFkpCSs9IG1hcnZlbGwubworIG9iai0kKENPTkZJR19NQVJWRUxMXzEwR19QSFkpCSs9IG1hcnZlbGwxMGcubworK29iai0kKENPTkZJR19NRURJQVRFS19HRV9QSFkpCSs9IG1lZGlhdGVrLWdlLm8KKyBvYmotJChDT05GSUdfTUVTT05fR1hMX1BIWSkJKz0gbWVzb24tZ3hsLm8KKyBvYmotJChDT05GSUdfTUlDUkVMX0tTODk5NU1BKQkrPSBzcGlfa3M4OTk1Lm8KKyBvYmotJChDT05GSUdfTUlDUkVMX1BIWSkJKz0gbWljcmVsLm8KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC83NDQtZW44ODAxcy1ncGh5LXN1cHBvcnQucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvNzQ0LWVuODgwMXMtZ3BoeS1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYTAzMzMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvNzQ0LWVuODgwMXMtZ3BoeS1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsNTg1IEBACitJbmRleDogZHJpdmVycy9uZXQvcGh5L0tjb25maWcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCisrKysgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZworQEAgLTM0NSw2ICszNDUsMTEgQEAgY29uZmlnIFNGUAorIAlkZXBlbmRzIG9uIEhXTU9OIHx8IEhXTU9OPW4KKyAJc2VsZWN0IE1ESU9fSTJDCisgCisrY29uZmlnIEFJUk9IQV9FTjg4MDFTX1BIWQorKwl0cmlzdGF0ZSAiRHJpdmVycyBmb3IgQWlyb2hhIEVOODgwMVMgR2lnYWJpdCBQSFlzIgorKwktLS1oZWxwLS0tCisrCSAgQ3VycmVudGx5IHN1cHBvcnRzIHRoZSBBaXJvaGEgRU44ODAxUyBQSFkuCisrCisgY29uZmlnIEFESU5fUEhZCisgCXRyaXN0YXRlICJBbmFsb2cgRGV2aWNlcyBJbmR1c3RyaWFsIEV0aGVybmV0IFBIWXMiCisgCWhlbHAKK0luZGV4OiBkcml2ZXJzL25ldC9waHkvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZQorKysrIGIvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlCitAQCAtNjcsNiArNjcsNyBAQCBhcXVhbnRpYS1vYmpzCQkJKz0gYXF1YW50aWFfbWFpbi5vCisgaWZkZWYgQ09ORklHX0hXTU9OCisgYXF1YW50aWEtb2JqcwkJCSs9IGFxdWFudGlhX2h3bW9uLm8KKyBlbmRpZgorK29iai0kKENPTkZJR19BSVJPSEFfRU44ODAxU19QSFkpCSs9IGVuODgwMXMubworIG9iai0kKENPTkZJR19BUVVBTlRJQV9QSFkpCSs9IGFxdWFudGlhLm8KKyBvYmotJChDT05GSUdfQVg4ODc5NkJfUEhZKQkrPSBheDg4Nzk2Yi5vCisgb2JqLSQoQ09ORklHX0FUODAzWF9QSFkpCSs9IGF0ODAzeC5vCitJbmRleDogZHJpdmVycy9uZXQvcGh5L2VuODgwMXMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGIvZHJpdmVycy9uZXQvcGh5L2VuODgwMXMuYworQEAgLTAsMCArMSwzOTQgQEAKKysvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorKy8qIEZJTEUgTkFNRTogIGFpcm9oYS5jCisrICogUFVSUE9TRToKKysgKiAgICAgIEVOODgwMVMgcGh5IGRyaXZlciBmb3IgTGludXgKKysgKiBOT1RFUzoKKysgKgorKyAqLworKworKy8qIElOQ0xVREUgRklMRSBERUNMQVJBVElPTlMKKysgKi8KKysKKysjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisrI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorKyNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KKysjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisrI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKysjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKysjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisrI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisrI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKysjaW5jbHVkZSA8bGludXgvbWlpLmg+CisrI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKysjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisrI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisrCisrLy8jaW5jbHVkZSA8bGludXgvYml0ZmllbGQuaD4KKysjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisrCisrI2luY2x1ZGUgImVuODgwMXMuaCIKKysKKysvKiAjZGVmaW5lIFRFU1RfQk9BUkQgKi8KKysKKytNT0RVTEVfREVTQ1JJUFRJT04oIkFpcm9oYSBFTjg4MDFTIFBIWSBkcml2ZXJzIik7CisrTU9EVUxFX0FVVEhPUigiQWlyb2hhIik7CisrTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworKworK3N0YXRpYyBpbnQgcHJlU3BlZWQgPSAwOworKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKysqICAgICAgICAgICAgICAgICAgRiBVIE4gQyBUIEkgTyBOIFMKKysqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrdW5zaWduZWQgaW50IG1kaW9idXNfd3JpdGU0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgcG9ydCwgdTMyIGRldmFkLCB1MzIgcmVnLCB1MTYgdmFsKQorK3sKKysgICAgbWRpb2J1c193cml0ZShidXMsIHBvcnQsIE1JSV9NTURfQUNDX0NUTF9SRUcsIGRldmFkKTsKKysgICAgbWRpb2J1c193cml0ZShidXMsIHBvcnQsIE1JSV9NTURfQUREUl9EQVRBX1JFRywgcmVnKTsKKysgICAgbWRpb2J1c193cml0ZShidXMsIHBvcnQsIE1JSV9NTURfQUNDX0NUTF9SRUcsIE1NRF9PUF9NT0RFX0RBVEEgfCBkZXZhZCk7CisrICAgIG1kaW9idXNfd3JpdGUoYnVzLCBwb3J0LCBNSUlfTU1EX0FERFJfREFUQV9SRUcsIHZhbCk7CisrICAgIHJldHVybiAwOworK30KKysKKyt1bnNpZ25lZCBpbnQgbWRpb2J1c19yZWFkNDUoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIHBvcnQsIHUzMiBkZXZhZCwgdTMyIHJlZywgdTMyICpyZWFkX2RhdGEpCisreworKyAgICBtZGlvYnVzX3dyaXRlKGJ1cywgcG9ydCwgTUlJX01NRF9BQ0NfQ1RMX1JFRywgZGV2YWQpOworKyAgICBtZGlvYnVzX3dyaXRlKGJ1cywgcG9ydCwgTUlJX01NRF9BRERSX0RBVEFfUkVHLCByZWcpOworKyAgICBtZGlvYnVzX3dyaXRlKGJ1cywgcG9ydCwgTUlJX01NRF9BQ0NfQ1RMX1JFRywgTU1EX09QX01PREVfREFUQSB8IGRldmFkKTsKKysgICAgKnJlYWRfZGF0YSA9IG1kaW9idXNfcmVhZChidXMsIHBvcnQsIE1JSV9NTURfQUREUl9EQVRBX1JFRyk7CisrICAgIHJldHVybiAwOworK30KKysKKysvKiBBaXJvaGEgTUlJIHJlYWQgZnVuY3Rpb24gKi8KKyt1bnNpZ25lZCBpbnQgZWNudF9taWlfY2wyMl9yZWFkKHN0cnVjdCBtaWlfYnVzICplYnVzLCB1bnNpZ25lZCBpbnQgcGh5X2FkZHIsdW5zaWduZWQgaW50IHBoeV9yZWdpc3Rlcix1bnNpZ25lZCBpbnQgKnJlYWRfZGF0YSkKKyt7CisrICAgICpyZWFkX2RhdGEgPSBtZGlvYnVzX3JlYWQoZWJ1cywgcGh5X2FkZHIsIHBoeV9yZWdpc3Rlcik7CisrICAgIHJldHVybiAwOworK30KKysKKysvKiBBaXJvaGEgTUlJIHdyaXRlIGZ1bmN0aW9uICovCisrdW5zaWduZWQgaW50IGVjbnRfbWlpX2NsMjJfd3JpdGUoc3RydWN0IG1paV9idXMgKmVidXMsIHVuc2lnbmVkIGludCBwaHlfYWRkciwgdW5zaWduZWQgaW50IHBoeV9yZWdpc3Rlcix1bnNpZ25lZCBpbnQgd3JpdGVfZGF0YSkKKyt7CisrICAgIG1kaW9idXNfd3JpdGUoZWJ1cywgcGh5X2FkZHIsIHBoeV9yZWdpc3Rlciwgd3JpdGVfZGF0YSk7CisrICAgIHJldHVybiAwOworK30KKysKKysvKiBFTjg4MDEgUEJVUyB3cml0ZSBmdW5jdGlvbiAqLworK3ZvaWQgRW44ODAxX1BidXNSZWdXcihzdHJ1Y3QgbWlpX2J1cyAqZWJ1cywgdW5zaWduZWQgbG9uZyBwYnVzX2FkZHJlc3MsIHVuc2lnbmVkIGxvbmcgcGJ1c19kYXRhKQorK3sKKysgICAgZWNudF9taWlfY2wyMl93cml0ZShlYnVzLCBFTjg4MDFTX1BCVVNfUEhZX0lELCAweDFGLCAodW5zaWduZWQgaW50KShwYnVzX2FkZHJlc3MgPj4gNikpOworKyAgICBlY250X21paV9jbDIyX3dyaXRlKGVidXMsIEVOODgwMVNfUEJVU19QSFlfSUQsICh1bnNpZ25lZCBpbnQpKChwYnVzX2FkZHJlc3MgPj4gMikgJiAweGYpLCAodW5zaWduZWQgaW50KShwYnVzX2RhdGEgJiAweEZGRkYpKTsKKysgICAgZWNudF9taWlfY2wyMl93cml0ZShlYnVzLCBFTjg4MDFTX1BCVVNfUEhZX0lELCAweDEwLCAodW5zaWduZWQgaW50KShwYnVzX2RhdGEgPj4gMTYpKTsKKysgICAgcmV0dXJuOworK30KKysKKysvKiBFTjg4MDEgUEJVUyByZWFkIGZ1bmN0aW9uICovCisrdW5zaWduZWQgbG9uZyBFbjg4MDFfUGJ1c1JlZ1JkKHN0cnVjdCBtaWlfYnVzICplYnVzLCB1bnNpZ25lZCBsb25nIHBidXNfYWRkcmVzcykKKyt7CisrICAgIHVuc2lnbmVkIGxvbmcgcGJ1c19kYXRhOworKyAgICB1bnNpZ25lZCBpbnQgcGJ1c19kYXRhX2xvdywgcGJ1c19kYXRhX2hpZ2g7CisrCisrICAgIGVjbnRfbWlpX2NsMjJfd3JpdGUoZWJ1cywgRU44ODAxU19QQlVTX1BIWV9JRCwgMHgxRiwgKHVuc2lnbmVkIGludCkocGJ1c19hZGRyZXNzID4+IDYpKTsKKysgICAgZWNudF9taWlfY2wyMl9yZWFkKGVidXMsIEVOODgwMVNfUEJVU19QSFlfSUQsICh1bnNpZ25lZCBpbnQpKChwYnVzX2FkZHJlc3MgPj4gMikgJiAweGYpLCAmcGJ1c19kYXRhX2xvdyk7CisrICAgIGVjbnRfbWlpX2NsMjJfcmVhZChlYnVzLCBFTjg4MDFTX1BCVVNfUEhZX0lELCAweDEwLCAmcGJ1c19kYXRhX2hpZ2gpOworKyAgICBwYnVzX2RhdGEgPSAocGJ1c19kYXRhX2hpZ2ggPDwgMTYpICsgcGJ1c19kYXRhX2xvdzsKKysgICAgcmV0dXJuIHBidXNfZGF0YTsKKyt9CisrCisrLyogVXNlIGRlZmF1bHQgUEJVU19QSFlfSUQgKi8KKysvKiBFTjg4MDEgUEJVUyB3cml0ZSBmdW5jdGlvbiAqLworK3ZvaWQgRW44ODAxX3ZhclBidXNSZWdXcihzdHJ1Y3QgbWlpX2J1cyAqZWJ1cywgdW5zaWduZWQgbG9uZyBwYnVzX2lkLHVuc2lnbmVkIGxvbmcgcGJ1c19hZGRyZXNzLCB1bnNpZ25lZCBsb25nIHBidXNfZGF0YSkKKyt7CisrICAgIGVjbnRfbWlpX2NsMjJfd3JpdGUoZWJ1cywgcGJ1c19pZCwgMHgxRiwgKHVuc2lnbmVkIGludCkocGJ1c19hZGRyZXNzID4+IDYpKTsKKysgICAgZWNudF9taWlfY2wyMl93cml0ZShlYnVzLCBwYnVzX2lkLCAodW5zaWduZWQgaW50KSgocGJ1c19hZGRyZXNzID4+IDIpICYgMHhmKSwgKHVuc2lnbmVkIGludCkocGJ1c19kYXRhICYgMHhGRkZGKSk7CisrICAgIGVjbnRfbWlpX2NsMjJfd3JpdGUoZWJ1cywgcGJ1c19pZCwgMHgxMCwgKHVuc2lnbmVkIGludCkocGJ1c19kYXRhID4+IDE2KSk7CisrICAgIHJldHVybjsKKyt9CisrCisrLyogRU44ODAxIFBCVVMgcmVhZCBmdW5jdGlvbiAqLworK3Vuc2lnbmVkIGxvbmcgRW44ODAxX3ZhclBidXNSZWdSZChzdHJ1Y3QgbWlpX2J1cyAqZWJ1cywgdW5zaWduZWQgbG9uZyBwYnVzX2lkLCB1bnNpZ25lZCBsb25nIHBidXNfYWRkcmVzcykKKyt7CisrICAgIHVuc2lnbmVkIGxvbmcgcGJ1c19kYXRhOworKyAgICB1bnNpZ25lZCBpbnQgcGJ1c19kYXRhX2xvdywgcGJ1c19kYXRhX2hpZ2g7CisrCisrICAgIGVjbnRfbWlpX2NsMjJfd3JpdGUoZWJ1cywgcGJ1c19pZCwgMHgxRiwgKHVuc2lnbmVkIGludCkocGJ1c19hZGRyZXNzID4+IDYpKTsKKysgICAgZWNudF9taWlfY2wyMl9yZWFkKGVidXMsICBwYnVzX2lkLCAodW5zaWduZWQgaW50KSgocGJ1c19hZGRyZXNzID4+IDIpICYgMHhmKSwgJnBidXNfZGF0YV9sb3cpOworKyAgICBlY250X21paV9jbDIyX3JlYWQoZWJ1cywgIHBidXNfaWQsIDB4MTAsICZwYnVzX2RhdGFfaGlnaCk7CisrICAgIHBidXNfZGF0YSA9IChwYnVzX2RhdGFfaGlnaCA8PCAxNikgKyBwYnVzX2RhdGFfbG93OworKyAgICByZXR1cm4gcGJ1c19kYXRhOworK30KKysKKysvKiBFTjg4MDEgVG9rZW4gUmluZyBXcml0ZSBmdW5jdGlvbiAqLworK3ZvaWQgRW44ODAxX1RSX1JlZ1dyKHN0cnVjdCBtaWlfYnVzICplYnVzLCB1bnNpZ25lZCBsb25nIHRyX2FkZHJlc3MsIHVuc2lnbmVkIGxvbmcgdHJfZGF0YSkKKyt7CisrICAgIGVjbnRfbWlpX2NsMjJfd3JpdGUoZWJ1cywgRU44ODAxU19NRElPX1BIWV9JRCwgMHgxRiwgMHg1MmI1KTsgICAgICAgLyogcGFnZSBzZWxlY3QgKi8KKysgICAgZWNudF9taWlfY2wyMl93cml0ZShlYnVzLCBFTjg4MDFTX01ESU9fUEhZX0lELCAweDExLCAodW5zaWduZWQgaW50KSh0cl9kYXRhICYgMHhmZmZmKSk7CisrICAgIGVjbnRfbWlpX2NsMjJfd3JpdGUoZWJ1cywgRU44ODAxU19NRElPX1BIWV9JRCwgMHgxMiwgKHVuc2lnbmVkIGludCkodHJfZGF0YSA+PiAxNikpOworKyAgICBlY250X21paV9jbDIyX3dyaXRlKGVidXMsIEVOODgwMVNfTURJT19QSFlfSUQsIDB4MTAsICh1bnNpZ25lZCBpbnQpKHRyX2FkZHJlc3MgfCBUclJlZ19XUikpOworKyAgICBlY250X21paV9jbDIyX3dyaXRlKGVidXMsIEVOODgwMVNfTURJT19QSFlfSUQsIDB4MUYsIDB4MCk7ICAgICAgICAgIC8qIHBhZ2UgcmVzZXRvcmUgKi8KKysgICAgcmV0dXJuOworK30KKysKKysvKiBFTjg4MDEgVG9rZW4gUmluZyBSZWFkIGZ1bmN0aW9uICovCisrdW5zaWduZWQgbG9uZyBFbjg4MDFfVFJfUmVnUmQoc3RydWN0IG1paV9idXMgKmVidXMsIHVuc2lnbmVkIGxvbmcgdHJfYWRkcmVzcykKKyt7CisrICAgIHVuc2lnbmVkIGxvbmcgdHJfZGF0YTsKKysgICAgdW5zaWduZWQgaW50IHRyX2RhdGFfbG93LCB0cl9kYXRhX2hpZ2g7CisrCisrICAgIGVjbnRfbWlpX2NsMjJfd3JpdGUoZWJ1cywgRU44ODAxU19NRElPX1BIWV9JRCwgMHgxRiwgMHg1MmI1KTsgICAgICAgLyogcGFnZSBzZWxlY3QgKi8KKysgICAgZWNudF9taWlfY2wyMl93cml0ZShlYnVzLCBFTjg4MDFTX01ESU9fUEhZX0lELCAweDEwLCAodW5zaWduZWQgaW50KSh0cl9hZGRyZXNzIHwgVHJSZWdfUkQpKTsKKysgICAgZWNudF9taWlfY2wyMl9yZWFkKGVidXMsIEVOODgwMVNfTURJT19QSFlfSUQsIDB4MTEsICZ0cl9kYXRhX2xvdyk7CisrICAgIGVjbnRfbWlpX2NsMjJfcmVhZChlYnVzLCBFTjg4MDFTX01ESU9fUEhZX0lELCAweDEyLCAmdHJfZGF0YV9oaWdoKTsKKysgICAgZWNudF9taWlfY2wyMl93cml0ZShlYnVzLCBFTjg4MDFTX01ESU9fUEhZX0lELCAweDFGLCAweDApOyAgICAgICAgICAvKiBwYWdlIHJlc2V0b3JlICovCisrICAgIHRyX2RhdGEgPSAodHJfZGF0YV9oaWdoIDw8IDE2KSArIHRyX2RhdGFfbG93OworKyAgICByZXR1cm4gdHJfZGF0YTsKKyt9CisrCisrc3RhdGljIGludCBlbjg4MDFzX2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCisreworKyAgICBnZXBoeV9hbGxfUkVHX0xwaVJlZzFDaCAgICAgIEdQSFlfUkdfTFBJXzFDOworKyAgICBnZXBoeV9hbGxfUkVHX2RldjFFaF9yZWczMjRoIEdQSFlfUkdfMUVfMzI0OworKyAgICBnZXBoeV9hbGxfUkVHX2RldjFFaF9yZWcwMTJoIEdQSFlfUkdfMUVfMDEyOworKyAgICBnZXBoeV9hbGxfUkVHX2RldjFFaF9yZWcwMTdoIEdQSFlfUkdfMUVfMDE3OworKyAgICB1bnNpZ25lZCBsb25nIHBidXNfZGF0YTsKKysgICAgdW5zaWduZWQgaW50IHBidXNBZGRyZXNzOworKyAgICB1MzIgcmVnX3ZhbHVlOworKyAgICBpbnQgcmV0cnk7CisrICAgIHN0cnVjdCBtaWlfYnVzICptYnVzOworKworKyAgICAjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDQsIDUsIDApKQorKyAgICBtYnVzID0gcGh5ZGV2LT5idXM7CisrICAgICNlbHNlCisrICAgIG1idXMgPSBwaHlkZXYtPm1kaW8uYnVzOworKyAgICAjZW5kaWYKKysKKysgICAgcGJ1c0FkZHJlc3MgPSBFTjg4MDFTX1BCVVNfREVGQVVMVF9JRDsKKysgICAgcmV0cnkgPSBNQVhfT1VJX0NIRUNLOworKyAgICB3aGlsZSgxKQorKyAgICB7CisrICAgICAgICBwYnVzX2RhdGEgPSBFbjg4MDFfdmFyUGJ1c1JlZ1JkKG1idXMsIHBidXNBZGRyZXNzLCBFTjg4MDFTX1JHX0VUSEVSX1BIWV9PVUkpOyAgICAgIC8qIFBIWSBPVUkgKi8KKysgICAgICAgIGlmKEVOODgwMVNfUEJVU19PVUkgPT0gcGJ1c19kYXRhKQorKyAgICAgICAgeworKyAgICAgICAgICAgIHBidXNfZGF0YSA9IEVuODgwMV92YXJQYnVzUmVnUmQobWJ1cywgcGJ1c0FkZHJlc3MsIEVOODgwMVNfUkdfU01JX0FERFIpOyAgICAgICAvKiBTTUkgQUREUiAqLworKyAgICAgICAgICAgIHBidXNfZGF0YSA9IChwYnVzX2RhdGEgJiAweGZmZmYwMDAwKSB8ICh1bnNpZ25lZCBsb25nKShFTjg4MDFTX1BCVVNfUEhZX0lEIDw8IDgpIHwgKHVuc2lnbmVkIGxvbmcpKEVOODgwMVNfTURJT19QSFlfSUQgKTsKKysgICAgICAgICAgICBwcmludGsoIltBaXJvaGFdIEVOODgwMVMgU01JX0FERFI9JWx4IChyZW5ldylcbiIsIHBidXNfZGF0YSk7CisrICAgICAgICAgICAgRW44ODAxX3ZhclBidXNSZWdXcihtYnVzLCBwYnVzQWRkcmVzcywgRU44ODAxU19SR19TTUlfQUREUiwgcGJ1c19kYXRhKTsKKysgICAgICAgICAgICBFbjg4MDFfdmFyUGJ1c1JlZ1dyKG1idXMsIEVOODgwMVNfUEJVU19QSFlfSUQsIEVOODgwMVNfUkdfQlVDS19DVEwsIDB4MDMpOworKyAgICAgICAgICAgIG1kZWxheSgxMCk7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBlbHNlCisrICAgICAgICB7CisrICAgICAgICAgICAgcGJ1c0FkZHJlc3MgPSBFTjg4MDFTX1BCVVNfUEhZX0lEOworKyAgICAgICAgfQorKyAgICAgICAgcmV0cnkgLS07CisrICAgICAgICBpZiAoMCA9PSByZXRyeSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBwcmludGsoIltBaXJvaGFdIEVOODgwMVMgcHJvYmUgZmFpbCAhXG4iKTsKKysgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICByZWdfdmFsdWUgPSAoRW44ODAxX1BidXNSZWdSZChtYnVzLCBFTjg4MDFTX1JHX0xUUl9DVEwpICYgMHhmZmZmZmZmYykgfCAweDEwIHwgKEVOODgwMVNfUlhfUE9MQVJJVFkgPDwgMSkgfCBFTjg4MDFTX1RYX1BPTEFSSVRZOworKyAgICBFbjg4MDFfUGJ1c1JlZ1dyKG1idXMsIDB4Y2Y4LCByZWdfdmFsdWUpOworKyAgICBtZGVsYXkoMTApOworKyAgICByZWdfdmFsdWUgJj0gMHhmZmZmZmZlZjsKKysgICAgRW44ODAxX1BidXNSZWdXcihtYnVzLCAweGNmOCwgcmVnX3ZhbHVlKTsKKysKKysgICAgcmV0cnkgPSBNQVhfUkVUUlk7CisrICAgIHdoaWxlICgxKQorKyAgICB7CisrICAgICAgICBtZGVsYXkoMTApOworKyAgICAgICAgcmVnX3ZhbHVlID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfUEhZU0lEMik7CisrICAgICAgICBpZiAocmVnX3ZhbHVlID09IEVOODgwMVNfUEhZX0lEMikKKysgICAgICAgIHsKKysgICAgICAgICAgICBicmVhazsgICAgLyogd2FpdCBHUEhZIHJlYWR5ICovCisrICAgICAgICB9CisrICAgICAgICByZXRyeS0tOworKyAgICAgICAgaWYgKDAgPT0gcmV0cnkpCisrICAgICAgICB7CisrICAgICAgICAgICAgcHJpbnRrKCJbQWlyb2hhXSBFTjg4MDFTIGluaXRpYWxpemUgZmFpbCAhXG4iKTsKKysgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIH0KKysgICAgfQorKyAgICAvKiBTb2Z0d2FyZSBSZXNldCBQSFkgKi8KKysgICAgcmVnX3ZhbHVlID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7CisrICAgIHJlZ192YWx1ZSB8PSBCTUNSX1JFU0VUOworKyAgICBwaHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgcmVnX3ZhbHVlKTsKKysgICAgcmV0cnkgPSBNQVhfUkVUUlk7CisrICAgIGRvCisrICAgIHsKKysgICAgICAgIG1kZWxheSgxMCk7CisrICAgICAgICByZWdfdmFsdWUgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTsKKysgICAgICAgIHJldHJ5LS07CisrICAgICAgICBpZiAoMCA9PSByZXRyeSkKKysgICAgICAgIHsKKysgICAgICAgICAgICBwcmludGsoIltBaXJvaGFdIEVOODgwMVMgcmVzZXQgZmFpbCAhXG4iKTsKKysgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIH0KKysgICAgfSB3aGlsZSAocmVnX3ZhbHVlICYgQk1DUl9SRVNFVCk7CisrCisrICAgIEVuODgwMV9QYnVzUmVnV3IobWJ1cywgMHgwNjAwLCAweDBjMDAwYzAwKTsKKysgICAgRW44ODAxX1BidXNSZWdXcihtYnVzLCAweDEwLCAweEQ4MDEpOworKyAgICBFbjg4MDFfUGJ1c1JlZ1dyKG1idXMsIDB4MCwgIDB4OTE0MCk7CisrCisrICAgIEVuODgwMV9QYnVzUmVnV3IobWJ1cywgMHgwQTE0LCAweDAwMDMpOworKyAgICBFbjg4MDFfUGJ1c1JlZ1dyKG1idXMsIDB4MDYwMCwgMHgwYzAwMGMwMCk7CisrICAgIC8qIFNldCBGQ00gY29udHJvbCAqLworKyAgICBFbjg4MDFfUGJ1c1JlZ1dyKG1idXMsIDB4MTQwNCwgMHgwMDRiKTsKKysgICAgRW44ODAxX1BidXNSZWdXcihtYnVzLCAweDE0MGMsIDB4MDAwNyk7CisrICAgIC8qIFNldCBHUEhZIFBlcmZvbWFuY2UqLworKyAgICAvKiBUb2tlbiBSaW5nICovCisrICAgIEVuODgwMV9UUl9SZWdXcihtYnVzLCBSZ0FkZHJfUE1BXzAxaCwgICAgIDB4NkZCOTBBKTsKKysgICAgRW44ODAxX1RSX1JlZ1dyKG1idXMsIFJnQWRkcl9QTUFfMThoLCAgICAgMHgwRTJGMDApOworKyAgICBFbjg4MDFfVFJfUmVnV3IobWJ1cywgUmdBZGRyX0RTUEZfMDZoLCAgICAweDJFQkFFRik7CisrICAgIEVuODgwMV9UUl9SZWdXcihtYnVzLCBSZ0FkZHJfRFNQRl8xMWgsICAgIDB4MDQwMDAxKTsKKysgICAgRW44ODAxX1RSX1JlZ1dyKG1idXMsIFJnQWRkcl9EU1BGXzAzaCwgICAgMHgwMDAwMDQpOworKyAgICBFbjg4MDFfVFJfUmVnV3IobWJ1cywgUmdBZGRyX0RTUEZfMUNoLCAgICAweDAwMzIxMCk7CisrICAgIEVuODgwMV9UUl9SZWdXcihtYnVzLCBSZ0FkZHJfRFNQRl8xNGgsICAgIDB4MDAwMjRBKTsKKysgICAgRW44ODAxX1RSX1JlZ1dyKG1idXMsIFJnQWRkcl9EU1BGXzBDaCwgICAgMHgwMDcwNEQpOworKyAgICBFbjg4MDFfVFJfUmVnV3IobWJ1cywgUmdBZGRyX0RTUEZfMERoLCAgICAweDAyMzE0Rik7CisrICAgIEVuODgwMV9UUl9SZWdXcihtYnVzLCBSZ0FkZHJfRFNQRl8xMGgsICAgIDB4MDA1MDEwKTsKKysgICAgRW44ODAxX1RSX1JlZ1dyKG1idXMsIFJnQWRkcl9EU1BGXzBGaCwgICAgMHgwMDMwMjgpOworKyAgICBFbjg4MDFfVFJfUmVnV3IobWJ1cywgUmdBZGRyX1RSXzI2aCwgICAgICAweDQ0NDQ0NCk7CisrICAgIEVuODgwMV9UUl9SZWdXcihtYnVzLCBSZ0FkZHJfUjEwMDBERUNfMTVoLDB4MDA1NUEwKTsKKysgICAgLyogQ0wyMiAmIENMNDUgKi8KKysgICAgcGh5X3dyaXRlKHBoeWRldiwgMHgxZiwgMHgwMyk7CisrICAgIEdQSFlfUkdfTFBJXzFDLkRBVEEgPSBwaHlfcmVhZChwaHlkZXYsIFJnQWRkcl9McGlSZWcxQ2gpOworKyAgICBHUEhZX1JHX0xQSV8xQy5EYXRhQml0RmllbGQuc21pX2RldG9uX3RoID0gMHgwQzsKKysgICAgcGh5X3dyaXRlKHBoeWRldiwgUmdBZGRyX0xwaVJlZzFDaCwgR1BIWV9SR19MUElfMUMuREFUQSk7CisrICAgIHBoeV93cml0ZShwaHlkZXYsIDB4MWYsIDB4MCk7CisrICAgIG1kaW9idXNfd3JpdGU0NShtYnVzLCBFTjg4MDFTX01ESU9fUEhZX0lELCAweDFFLCAweDEyMiwgMHhmZmZmKTsKKysgICAgbWRpb2J1c193cml0ZTQ1KG1idXMsIEVOODgwMVNfTURJT19QSFlfSUQsIDB4MUUsIDB4MjM0LCAweDAxODApOworKyAgICBtZGlvYnVzX3dyaXRlNDUobWJ1cywgRU44ODAxU19NRElPX1BIWV9JRCwgMHgxRSwgMHgyMzgsIDB4MDEyMCk7CisrICAgIG1kaW9idXNfd3JpdGU0NShtYnVzLCBFTjg4MDFTX01ESU9fUEhZX0lELCAweDFFLCAweDEyMCwgMHg5MDE0KTsKKysgICAgbWRpb2J1c193cml0ZTQ1KG1idXMsIEVOODgwMVNfTURJT19QSFlfSUQsIDB4MUUsIDB4MjM5LCAweDAxMTcpOworKyAgICBtZGlvYnVzX3dyaXRlNDUobWJ1cywgRU44ODAxU19NRElPX1BIWV9JRCwgMHgxRSwgMHgxNEEsIDB4RUUyMCk7CisrICAgIG1kaW9idXNfd3JpdGU0NShtYnVzLCBFTjg4MDFTX01ESU9fUEhZX0lELCAweDFFLCAweDE5QiwgMHgwMTExKTsKKysgICAgbWRpb2J1c193cml0ZTQ1KG1idXMsIEVOODgwMVNfTURJT19QSFlfSUQsIDB4MUYsIDB4MjY4LCAweDA3RjQpOworKworKyAgICBtZGlvYnVzX3JlYWQ0NShtYnVzLCBFTjg4MDFTX01ESU9fUEhZX0lELCAweDFFLCAweDMyNCwgJnJlZ192YWx1ZSk7CisrICAgIEdQSFlfUkdfMUVfMzI0LkRBVEE9KHUxNilyZWdfdmFsdWU7CisrICAgIEdQSFlfUkdfMUVfMzI0LkRhdGFCaXRGaWVsZC5zbWlfZGV0X2RlZ2xpdGNoX29mZiA9IDA7CisrICAgIG1kaW9idXNfd3JpdGU0NShtYnVzLCBFTjg4MDFTX01ESU9fUEhZX0lELCAweDFFLCAweDMyNCwgKHUzMilHUEhZX1JHXzFFXzMyNC5EQVRBKTsKKysgICAgbWRpb2J1c193cml0ZTQ1KG1idXMsIEVOODgwMVNfTURJT19QSFlfSUQsIDB4MUUsIDB4MTlFLCAweEMyKTsKKysgICAgbWRpb2J1c193cml0ZTQ1KG1idXMsIEVOODgwMVNfTURJT19QSFlfSUQsIDB4MUUsIDB4MDEzLCAweDApOworKworKyAgICAvKiBFRlVTRSAqLworKyAgICBFbjg4MDFfUGJ1c1JlZ1dyKG1idXMsIDB4MUMwOCwgMHg0MDAwMDA0MCk7CisrICAgIHJldHJ5ID0gTUFYX1JFVFJZOworKyAgICB3aGlsZSAoMCAhPSByZXRyeSkKKysgICAgeworKyAgICAgICAgbWRlbGF5KDEpOworKyAgICAgICAgcmVnX3ZhbHVlID0gRW44ODAxX1BidXNSZWdSZChtYnVzLCAweDFDMDgpOworKyAgICAgICAgaWYgKChyZWdfdmFsdWUgJiAoMSA8PCAzMCkpID09IDApCisrICAgICAgICB7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICByZXRyeS0tOworKyAgICB9CisrICAgIHJlZ192YWx1ZSA9IEVuODgwMV9QYnVzUmVnUmQobWJ1cywgMHgxQzM4KTsgICAgICAgICAgLyogUkFXIzIgKi8KKysgICAgR1BIWV9SR18xRV8wMTIuRGF0YUJpdEZpZWxkLmRhX3R4X2kybXBiX2FfdGJ0ID0gcmVnX3ZhbHVlICYgMHgwM2Y7CisrICAgIG1kaW9idXNfd3JpdGU0NShtYnVzLCBFTjg4MDFTX01ESU9fUEhZX0lELCAweDFFLCAweDEyLCAodTMyKUdQSFlfUkdfMUVfMDEyLkRBVEEpOworKyAgICBHUEhZX1JHXzFFXzAxNy5EYXRhQml0RmllbGQuZGFfdHhfaTJtcGJfYl90YnQ9KHJlZ192YWx1ZSA+PiA4KSAmIDB4MDNmOworKyAgICBtZGlvYnVzX3dyaXRlNDUobWJ1cywgRU44ODAxU19NRElPX1BIWV9JRCwgMHgxRSwgMHgxMiwgKHUzMilHUEhZX1JHXzFFXzAxNy5EQVRBKTsKKysKKysgICAgRW44ODAxX1BidXNSZWdXcihtYnVzLCAweDFDMDgsIDB4NDA0MDAwNDApOworKyAgICByZXRyeSA9IE1BWF9SRVRSWTsKKysgICAgd2hpbGUgKDAgIT0gcmV0cnkpCisrICAgIHsKKysgICAgICAgIG1kZWxheSgxKTsKKysgICAgICAgIHJlZ192YWx1ZSA9IEVuODgwMV9QYnVzUmVnUmQobWJ1cywgMHgxQzA4KTsKKysgICAgICAgIGlmICgocmVnX3ZhbHVlICYgKDEgPDwgMzApKSA9PSAwKQorKyAgICAgICAgeworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgcmV0cnktLTsKKysgICAgfQorKyAgICByZWdfdmFsdWUgPSBFbjg4MDFfUGJ1c1JlZ1JkKG1idXMsIDB4MUMzMCk7ICAgICAgICAgIC8qIFJBVyMxNiAqLworKyAgICBHUEhZX1JHXzFFXzMyNC5EYXRhQml0RmllbGQuc21pX2RldF9kZWdsaXRjaF9vZmYgPSAocmVnX3ZhbHVlID4+IDEyKSAmIDB4MDE7CisrICAgIG1kaW9idXNfd3JpdGU0NShtYnVzLCBFTjg4MDFTX01ESU9fUEhZX0lELCAweDFFLCAweDMyNCwgKHUzMilHUEhZX1JHXzFFXzMyNC5EQVRBKTsKKysKKysgICAgcHJpbnRrKCJbQWlyb2hhXSBFTjg4MDFTIGluaXRpYWxpemUgT0sgISAoMS4wLjUpXG4iKTsKKysgICAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQgZW44ODAxc19yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQorK3sKKysgICAgaW50IHJldDsKKysgICAgc3RydWN0IG1paV9idXMgKm1idXM7CisrCisrICAgICNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oNCwgNSwgMCkpCisrICAgIG1idXMgPSBwaHlkZXYtPmJ1czsKKysgICAgI2Vsc2UKKysgICAgbWJ1cyA9IHBoeWRldi0+bWRpby5idXM7CisrICAgICNlbmRpZgorKworKyAgICByZXQgPSBnZW5waHlfcmVhZF9zdGF0dXMocGh5ZGV2KTsKKysgICAgaWYgKExJTktfRE9XTiA9PSBwaHlkZXYtPmxpbmspIHByZVNwZWVkID0wOworKworKyAgICBpZiAoKHByZVNwZWVkICE9IHBoeWRldi0+c3BlZWQpICYmIChMSU5LX1VQID09IHBoeWRldi0+bGluaykpCisrICAgIHsKKysgICAgICAgIHByZVNwZWVkID0gcGh5ZGV2LT5zcGVlZDsKKysgICAgICAgIEVuODgwMV9QYnVzUmVnV3IobWJ1cywgMHgwNjAwLCAweDBjMDAwYzAwKTsKKysgICAgICAgIGlmIChTUEVFRF8xMDAwID09IHByZVNwZWVkKQorKyAgICAgICAgeworKyAgICAgICAgICAgIEVuODgwMV9QYnVzUmVnV3IobWJ1cywgMHgxMCwgMHhEODAxKTsKKysgICAgICAgICAgICBFbjg4MDFfUGJ1c1JlZ1dyKG1idXMsIDB4MCwgIDB4OTE0MCk7CisrCisrICAgICAgICAgICAgRW44ODAxX1BidXNSZWdXcihtYnVzLCAweDBBMTQsIDB4MDAwMyk7CisrICAgICAgICAgICAgRW44ODAxX1BidXNSZWdXcihtYnVzLCAweDA2MDAsIDB4MGMwMDBjMDApOworKyAgICAgICAgICAgIG1kZWxheSgyKTsgICAgICAvKiBkZWxheSAyIG1zICovCisrICAgICAgICAgICAgRW44ODAxX1BidXNSZWdXcihtYnVzLCAweDE0MDQsIDB4MDA0Yik7CisrICAgICAgICAgICAgRW44ODAxX1BidXNSZWdXcihtYnVzLCAweDE0MGMsIDB4MDAwNyk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIGlmIChTUEVFRF8xMDAgPT0gcHJlU3BlZWQpCisrICAgICAgICB7CisrICAgICAgICAgICAgRW44ODAxX1BidXNSZWdXcihtYnVzLCAweDEwLCAweEQ0MDEpOworKyAgICAgICAgICAgIEVuODgwMV9QYnVzUmVnV3IobWJ1cywgMHgwLCAgMHg5MTQwKTsKKysKKysgICAgICAgICAgICBFbjg4MDFfUGJ1c1JlZ1dyKG1idXMsIDB4MEExNCwgMHgwMDA3KTsKKysgICAgICAgICAgICBFbjg4MDFfUGJ1c1JlZ1dyKG1idXMsIDB4MDYwMCwgMHgwYzExKTsKKysgICAgICAgICAgICBtZGVsYXkoMik7ICAgICAgLyogZGVsYXkgMiBtcyAqLworKyAgICAgICAgICAgIEVuODgwMV9QYnVzUmVnV3IobWJ1cywgMHgxNDA0LCAweDAwMjcpOworKyAgICAgICAgICAgIEVuODgwMV9QYnVzUmVnV3IobWJ1cywgMHgxNDBjLCAweDAwMDcpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSBpZiAoU1BFRURfMTAgPT0gcHJlU3BlZWQpCisrICAgICAgICB7CisrICAgICAgICAgICAgRW44ODAxX1BidXNSZWdXcihtYnVzLCAweDEwLCAweEQwMDEpOworKyAgICAgICAgICAgIEVuODgwMV9QYnVzUmVnV3IobWJ1cywgMHgwLCAgMHg5MTQwKTsKKysKKysgICAgICAgICAgICBFbjg4MDFfUGJ1c1JlZ1dyKG1idXMsIDB4MEExNCwgMHgwMDBiKTsKKysgICAgICAgICAgICBFbjg4MDFfUGJ1c1JlZ1dyKG1idXMsIDB4MDYwMCwgMHgwYzExKTsKKysgICAgICAgICAgICBtZGVsYXkoMik7ICAgICAgLyogZGVsYXkgMiBtcyAqLworKyAgICAgICAgICAgIEVuODgwMV9QYnVzUmVnV3IobWJ1cywgMHgxNDA0LCAweDAwMjcpOworKyAgICAgICAgICAgIEVuODgwMV9QYnVzUmVnV3IobWJ1cywgMHgxNDBjLCAweDAwMDcpOworKyAgICAgICAgfQorKyAgICB9CisrICAgIHJldHVybiByZXQ7CisrfQorKworK3N0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBBaXJvaGFfZHJpdmVyW10gPSB7CisreworKyAgICAucGh5X2lkICAgICAgICAgPSBFTjg4MDFTX1BIWV9JRCwKKysgICAgLm5hbWUgICAgICAgICAgID0gIkFpcm9oYSBFTjg4MDFTIiwKKysgICAgLnBoeV9pZF9tYXNrICAgID0gMHgwZmZmZmZmMCwKKysgICAgLmZlYXR1cmVzICAgICAgID0gUEhZX0dCSVRfRkVBVFVSRVMsCisrICAgIC5jb25maWdfaW5pdCAgICA9IGVuODgwMXNfY29uZmlnX2luaXQsCisrICAgIC5jb25maWdfYW5lZyAgICA9IGdlbnBoeV9jb25maWdfYW5lZywKKysgICAgLnJlYWRfc3RhdHVzICAgID0gZW44ODAxc19yZWFkX3N0YXR1cywKKysgICAgLnN1c3BlbmQgICAgICAgID0gZ2VucGh5X3N1c3BlbmQsCisrICAgIC5yZXN1bWUgICAgICAgICA9IGdlbnBoeV9yZXN1bWUsCisrfSB9OworKworK21vZHVsZV9waHlfZHJpdmVyKEFpcm9oYV9kcml2ZXIpOworKworK3N0YXRpYyBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgQWlyb2hhX3RibFtdID0geworKyAgICB7IEVOODgwMVNfUEhZX0lELCAweDBmZmZmZmYwIH0sCisrICAgIHsgfQorK307CisrCisrTU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBBaXJvaGFfdGJsKTsKKytNT0RVTEVfTElDRU5TRSgiR1BMIik7CitJbmRleDogZHJpdmVycy9uZXQvcGh5L2VuODgwMXMuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGIvZHJpdmVycy9uZXQvcGh5L2VuODgwMXMuaAorQEAgLTAsMCArMSwxNTMgQEAKKysvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorKy8qIEZJTEUgTkFNRTogIGFpcm9oYS5oCisrICogUFVSUE9TRToKKysgKiAgICAgIERlZmluZSBFTjg4MDFTIGRyaXZlciBmdW5jdGlvbgorKyAqCisrICogTk9URVM6CisrICoKKysgKi8KKysKKysjaWZuZGVmIF9fQUlST0hBX0gKKysjZGVmaW5lIF9fQUlST0hBX0gKKysKKysvKiBOQU1JTkcgREVDTEFSQVRJT05TCisrICovCisrI2RlZmluZSBQSFlfQUREUkVTU19SQU5HRSAgICAgICAweDE4CisrI2RlZmluZSBFTjg4MDFTX1BCVVNfREVGQVVMVF9JRCAweDFlCisrI2RlZmluZSBFTjg4MDFTX01ESU9fUEhZX0lEICAgICAweDE4ICAgICAgIC8qIFJhbmdlIFBIWV9BRERSRVNTX1JBTkdFIC4uIDB4MWUgKi8KKysjZGVmaW5lIEVOODgwMVNfUEJVU19QSFlfSUQgICAgIChFTjg4MDFTX01ESU9fUEhZX0lEICsgMSkKKysKKysjZGVmaW5lIEVOODgwMVNfUkdfRVRIRVJfUEhZX09VSSAweDE5YTQKKysjZGVmaW5lIEVOODgwMVNfUkdfU01JX0FERFIgICAgICAweDE5YTgKKysjZGVmaW5lIEVOODgwMVNfUkdfQlVDS19DVEwgICAgICAweDFhMjAKKysjZGVmaW5lIEVOODgwMVNfUkdfTFRSX0NUTCAgICAgIDB4MGNmOAorKworKyNkZWZpbmUgRU44ODAxU19QQlVTX09VSSAgICAgICAgMHgxN2E1CisrI2RlZmluZSBFTjg4MDFTX1BIWV9JRDEgICAgICAgICAweDAzYTIKKysjZGVmaW5lIEVOODgwMVNfUEhZX0lEMiAgICAgICAgIDB4OTQ2MQorKyNkZWZpbmUgRU44ODAxU19QSFlfSUQgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpKChFTjg4MDFTX1BIWV9JRDEgPDwgMTYpIHwgRU44ODAxU19QSFlfSUQyKQorKworKyNkZWZpbmUgREVWMUVfUkVHMDEzX1ZBTFVFICAgICAgMAorKyNkZWZpbmUgREVWMUVfUkVHMTlFX1ZBTFVFICAgICAgMHhDMgorKyNkZWZpbmUgREVWMUVfUkVHMzI0X1ZBTFVFICAgICAgMHgyMDAKKysKKysjZGVmaW5lIFRSVUUgICAgICAgICAgICAgICAgICAgIDEKKysjZGVmaW5lIEZBTFNFICAgICAgICAgICAgICAgICAgIDAKKysjZGVmaW5lIExJTktfVVAgICAgICAgICAgICAgICAgIDEKKysjZGVmaW5lIExJTktfRE9XTiAgICAgICAgICAgICAgIDAKKysKKysjaWYgZGVmaW5lZChURVNUX0JPQVJEKQorKyNkZWZpbmUgRU44ODAxU19UWF9QT0xBUklUWSAgICAgMQorKyNkZWZpbmUgRU44ODAxU19SWF9QT0xBUklUWSAgICAgMAorKyNlbHNlCisrI2RlZmluZSBFTjg4MDFTX1RYX1BPTEFSSVRZICAgICAwCisrI2RlZmluZSBFTjg4MDFTX1JYX1BPTEFSSVRZICAgICAxIC8qIFRoZSBwaW5nIGRlZmF1bHQgYXNzaWdubWVudCBpcyBzZXQgdG8gMSAqLworKyNlbmRpZgorKworKyNkZWZpbmUgTUFYX1JFVFJZICAgICAgICAgICAgICAgNQorKyNkZWZpbmUgTUFYX09VSV9DSEVDSyAgICAgICAgICAgMgorKy8qIENMNDUgTURJTyBjb250cm9sICovCisrI2RlZmluZSBNSUlfTU1EX0FDQ19DVExfUkVHICAgICAweDBkCisrI2RlZmluZSBNSUlfTU1EX0FERFJfREFUQV9SRUcgICAweDBlCisrI2RlZmluZSBNTURfT1BfTU9ERV9EQVRBICAgICAgICBCSVQoMTQpCisrCisrI2RlZmluZSBNQVhfVFJHX0NPVU5URVIgICAgICAgICA1CisrCisrLyogQ0wyMiBSZWcgU3VwcG9ydCBQYWdlIFNlbGVjdCAqLworKyNkZWZpbmUgUmdBZGRyX1JlZzFGaCAgICAgICAgMHgxZgorKyNkZWZpbmUgQ0wyMl9QYWdlX1JlZyAgICAgICAgMHgwMDAwCisrI2RlZmluZSBDTDIyX1BhZ2VfRXh0UmVnICAgICAweDAwMDEKKysjZGVmaW5lIENMMjJfUGFnZV9NaXNjUmVnICAgIDB4MDAwMgorKyNkZWZpbmUgQ0wyMl9QYWdlX0xwaVJlZyAgICAgMHgwMDAzCisrI2RlZmluZSBDTDIyX1BhZ2VfdFJlZyAgICAgICAweDAyQTMKKysjZGVmaW5lIENMMjJfUGFnZV9UclJlZyAgICAgIDB4NTJCNQorKworKy8qIENMNDUgUmVnIFN1cHBvcnQgREVWSUQgKi8KKysjZGVmaW5lIERFVklEXzAzICAgICAgICAgICAgIDB4MDMKKysjZGVmaW5lIERFVklEXzA3ICAgICAgICAgICAgIDB4MDcKKysjZGVmaW5lIERFVklEXzFFICAgICAgICAgICAgIDB4MUUKKysjZGVmaW5lIERFVklEXzFGICAgICAgICAgICAgIDB4MUYKKysKKysvKiBUb2tlblJpbmcgUmVnIEFjY2VzcyAqLworKyNkZWZpbmUgVHJSZWdfUEtUX1hNVF9TVEEgICAgMHg4MDAwCisrI2RlZmluZSBUclJlZ19XUiAgICAgICAgICAgICAweDgwMDAKKysjZGVmaW5lIFRyUmVnX1JEICAgICAgICAgICAgIDB4QTAwMAorKworKyNkZWZpbmUgUmdBZGRyX0xwaVJlZzFDaCAgICAgMHgxYworKyNkZWZpbmUgUmdBZGRyX1BNQV8wMWggICAgICAgMHgwZjgyCisrI2RlZmluZSBSZ0FkZHJfUE1BXzE4aCAgICAgICAweDBmYjAKKysjZGVmaW5lIFJnQWRkcl9EU1BGXzAzaCAgICAgIDB4MTY4NgorKyNkZWZpbmUgUmdBZGRyX0RTUEZfMDZoICAgICAgMHgxNjhjCisrI2RlZmluZSBSZ0FkZHJfRFNQRl8wQ2ggICAgICAweDE2OTgKKysjZGVmaW5lIFJnQWRkcl9EU1BGXzBEaCAgICAgIDB4MTY5YQorKyNkZWZpbmUgUmdBZGRyX0RTUEZfMEZoICAgICAgMHgxNjllCisrI2RlZmluZSBSZ0FkZHJfRFNQRl8xMGggICAgICAweDE2YTAKKysjZGVmaW5lIFJnQWRkcl9EU1BGXzExaCAgICAgIDB4MTZhMgorKyNkZWZpbmUgUmdBZGRyX0RTUEZfMTRoICAgICAgMHgxNmE4CisrI2RlZmluZSBSZ0FkZHJfRFNQRl8xQ2ggICAgICAweDE2YjgKKysjZGVmaW5lIFJnQWRkcl9UUl8yNmggICAgICAgIDB4MGVjYworKyNkZWZpbmUgUmdBZGRyX1IxMDAwREVDXzE1aCAgMHgwM2FhCisrCisrLyogREFUQSBUWVBFIERFQ0xBUkFUSU9OUworKyAqLworK3R5cGVkZWYgc3RydWN0CisreworKyAgICB1MTYgREFUQV9MbzsKKysgICAgdTE2IERBVEFfSGk7CisrfVRSX0RBVEFfVDsKKysKKyt0eXBlZGVmIHVuaW9uCisreworKyAgICBzdHJ1Y3QKKysgICAgeworKyAgICAgICAgLyogYlsxNTowMF0gKi8KKysgICAgICAgIHUxNiBzbWlfZGV0b25fd3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMzsKKysgICAgICAgIHUxNiBzbWlfZGV0X21kaV9pbnYgICAgICAgICAgICAgICAgICAgICAgICAgIDogMTsKKysgICAgICAgIHUxNiBzbWlfZGV0b2ZmX3d0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMzsKKysgICAgICAgIHUxNiBzbWlfc2lnZGV0X2RlYm91bmNpbmdfZW4gICAgICAgICAgICAgICAgIDogMTsKKysgICAgICAgIHUxNiBzbWlfZGV0b25fdGggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogNjsKKysgICAgICAgIHUxNiByc3ZfMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMjsKKysgICAgfSBEYXRhQml0RmllbGQ7CisrICAgIHUxNiBEQVRBOworK30gZ2VwaHlfYWxsX1JFR19McGlSZWcxQ2gsICpQZ2VwaHlfYWxsX1JFR19McGlSZWcxQ2g7CisrCisrdHlwZWRlZiB1bmlvbgorK3sKKysgICAgc3RydWN0CisrICAgIHsKKysgICAgICAgIC8qIGJbMTU6MDBdICovCisrICAgICAgICB1MTYgcmdfc21pX2RldGNudF9tYXggICAgICAgICAgICAgICAgICAgICAgICA6IDY7CisrICAgICAgICB1MTYgcnN2XzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDI7CisrICAgICAgICB1MTYgcmdfc21pX2RldF9tYXhfZW4gICAgICAgICAgICAgICAgICAgICAgICA6IDE7CisrICAgICAgICB1MTYgc21pX2RldF9kZWdsaXRjaF9vZmYgICAgICAgICAgICAgICAgICAgICA6IDE7CisrICAgICAgICB1MTYgcnN2XzEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDY7CisrICAgIH0gRGF0YUJpdEZpZWxkOworKyAgICB1MTYgREFUQTsKKyt9IGdlcGh5X2FsbF9SRUdfZGV2MUVoX3JlZzMyNGgsICpQZ2VwaHlfYWxsX1JFR19kZXYxRWhfcmVnMzI0aDsKKysKKyt0eXBlZGVmIHVuaW9uCisreworKyAgICBzdHJ1Y3QKKysgICAgeworKyAgICAgICAgLyogYlsxNTowMF0gKi8KKysgICAgICAgIHUxNiBkYV90eF9pMm1wYl9hX3RidCAgICAgICAgICAgICAgICAgICAgICAgIDogNjsKKysgICAgICAgIHUxNiByc3ZfNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogNDsKKysgICAgICAgIHUxNiBkYV90eF9pMm1wYl9hX2diZSAgICAgICAgICAgICAgICAgICAgICAgIDogNjsKKysgICAgfSBEYXRhQml0RmllbGQ7CisrICAgIHUxNiBEQVRBOworK30gZ2VwaHlfYWxsX1JFR19kZXYxRWhfcmVnMDEyaCwgKlBnZXBoeV9hbGxfUkVHX2RldjFFaF9yZWcwMTJoOworKworK3R5cGVkZWYgdW5pb24KKyt7CisrICAgIHN0cnVjdAorKyAgICB7CisrICAgICAgICAvKiBiWzE1OjAwXSAqLworKyAgICAgICAgdTE2IGRhX3R4X2kybXBiX2JfdGJ0ICAgICAgICAgICAgICAgICAgICAgICAgOiA2OworKyAgICAgICAgdTE2IHJzdl82ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAyOworKyAgICAgICAgdTE2IGRhX3R4X2kybXBiX2JfZ2JlICAgICAgICAgICAgICAgICAgICAgICAgOiA2OworKyAgICAgICAgdTE2IHJzdl8xNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAyOworKyAgICB9IERhdGFCaXRGaWVsZDsKKysgICAgdTE2IERBVEE7CisrfSBnZXBoeV9hbGxfUkVHX2RldjFFaF9yZWcwMTdoLCAqUGdlcGh5X2FsbF9SRUdfZGV2MUVoX3JlZzAxN2g7CisrCisrI2VuZGlmIC8qIEVuZCBvZiBfX0FJUk9IQV9IICovCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvODAwMC1QQVRDSC0xLTQtdHBoeS1zdXBwb3J0LXR5cGUtc3dpdGNoLWJ5LXBlcmljZmcucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvODAwMC1QQVRDSC0xLTQtdHBoeS1zdXBwb3J0LXR5cGUtc3dpdGNoLWJ5LXBlcmljZmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFlNDk5MQotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC84MDAwLVBBVENILTEtNC10cGh5LXN1cHBvcnQtdHlwZS1zd2l0Y2gtYnktcGVyaWNmZy5wYXRjaApAQCAtMCwwICsxLDE2OCBAQAorRnJvbSBkZGVkYTU3MWYzZDc5ZGNjY2VmNjU0MWI2NDEzY2IxODRkZTQwYWZkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogWmhhbnlvbmcgV2FuZyA8emhhbnlvbmcud2FuZ0BtZWRpYXRlay5jb20+CitEYXRlOiBGcmksIDE3IFNlcCAyMDIxIDE1OjU2OjUzICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIHBoeTogcGh5LW10ay10cGh5OiBzdXBwb3J0IHR5cGUgc3dpdGNoIGJ5IHBlcmljZmcKKworQWRkIHN1cHBvcnQgdHlwZSBzd2l0Y2ggYmV0d2VlbiBVU0IzLCBQQ0llLCBTQVRBIGFuZCBTR01JSSBieQorcGVyaWNmZyByZWdpc3RlciwgdGhpcyBpcyB1c2VkIHRvIHRha2UgdGhlIHBsYWNlIG9mIGVmdXNlIG9yCitqdW1wZXIuCisKK1NpZ25lZC1vZmYtYnk6IENodW5mZW5nIFl1biA8Y2h1bmZlbmcueXVuQG1lZGlhdGVrLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFZpbm9kIEtvdWwgPHZrb3VsQGtlcm5lbC5vcmc+CitTaWduZWQtb2ZmLWJ5OiBaaGFueW9uZyBXYW5nIDx6aGFueW9uZy53YW5nQG1lZGlhdGVrLmNvbT4KKy0tLQorIGRyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstdHBoeS5jIHwgODQgKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgODEgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstdHBoeS5jIGIvZHJpdmVycy9waHkvbWVkaWF0ZWsvcGh5LW10ay10cGh5LmMKK2luZGV4IGQxZWNmMDg4MDMyYi4uNzU5ZTFjMGMzNzBhIDEwMDY0NAorLS0tIGEvZHJpdmVycy9waHkvbWVkaWF0ZWsvcGh5LW10ay10cGh5LmMKKysrKyBiL2RyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstdHBoeS5jCitAQCAtMTAsMTIgKzEwLDEyIEBACisgI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisgI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisgI2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5oPgorKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+CisgI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorICNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisgI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorICNpbmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+CisgI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorLSNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+CisgI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorIAorIC8qIHZlcnNpb24gVjEgc3ViLWJhbmtzIG9mZnNldCBiYXNlIGFkZHJlc3MgKi8KK0BAIC0yNjgsNiArMjY4LDE0IEBACisgI2RlZmluZSBISUZfU1lTQ0ZHMQkJCTB4MTQKKyAjZGVmaW5lIEhJRl9TWVNDRkcxX1BIWTJfTUFTSwkJKDB4MyA8PCAyMCkKKyAKKysvKiBQSFkgc3dpdGNoIGJldHdlZW4gcGNpZS91c2IzL3NnbWlpL3NhdGEgKi8KKysjZGVmaW5lIFVTQl9QSFlfU1dJVENIX0NUUkwJMHgwCisrI2RlZmluZSBSR19QSFlfU1dfVFlQRQkJR0VOTUFTSygzLCAwKQorKyNkZWZpbmUgUkdfUEhZX1NXX1BDSUUJCTB4MAorKyNkZWZpbmUgUkdfUEhZX1NXX1VTQjMJCTB4MQorKyNkZWZpbmUgUkdfUEhZX1NXX1NHTUlJCQkweDIKKysjZGVmaW5lIFJHX1BIWV9TV19TQVRBCQkweDMKKysKKyBlbnVtIG10a19waHlfdmVyc2lvbiB7CisgCU1US19QSFlfVjEgPSAxLAorIAlNVEtfUEhZX1YyLAorQEAgLTMwMSw3ICszMDksMTAgQEAgc3RydWN0IG10a19waHlfaW5zdGFuY2UgeworIAl9OworIAlzdHJ1Y3QgY2xrICpyZWZfY2xrOwkvKiByZWZlcmVuY2UgY2xvY2sgb2YgYW5vbG9nIHBoeSAqLworIAl1MzIgaW5kZXg7CistCXU4IHR5cGU7CisrCXUzMiB0eXBlOworKwlzdHJ1Y3QgcmVnbWFwICp0eXBlX3N3OworKwl1MzIgdHlwZV9zd19yZWc7CisrCXUzMiB0eXBlX3N3X2luZGV4OworIAlpbnQgZXllX3NyYzsKKyAJaW50IGV5ZV92cnQ7CisgCWludCBleWVfdGVybTsKK0BAIC05MDAsNiArOTExLDY0IEBAIHN0YXRpYyB2b2lkIHUyX3BoeV9wcm9wc19zZXQoc3RydWN0IG10a190cGh5ICp0cGh5LAorIAl9CisgfQorIAorKy8qIHR5cGUgc3dpdGNoIGZvciB1c2IzL3BjaWUvc2dtaWkvc2F0YSAqLworK3N0YXRpYyBpbnQgcGh5X3R5cGVfc3lzY29uX2dldChzdHJ1Y3QgbXRrX3BoeV9pbnN0YW5jZSAqaW5zdGFuY2UsCisrCQkJICAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pCisreworKwlzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzIGFyZ3M7CisrCWludCByZXQ7CisrCisrCS8qIHR5cGUgc3dpdGNoIGZ1bmN0aW9uIGlzIG9wdGlvbmFsICovCisrCWlmICghb2ZfcHJvcGVydHlfcmVhZF9ib29sKGRuLCAibWVkaWF0ZWssc3lzY29uLXR5cGUiKSkKKysJCXJldHVybiAwOworKworKwlyZXQgPSBvZl9wYXJzZV9waGFuZGxlX3dpdGhfZml4ZWRfYXJncyhkbiwgIm1lZGlhdGVrLHN5c2Nvbi10eXBlIiwKKysJCQkJCSAgICAgICAyLCAwLCAmYXJncyk7CisrCWlmIChyZXQpCisrCQlyZXR1cm4gcmV0OworKworKwlpbnN0YW5jZS0+dHlwZV9zd19yZWcgPSBhcmdzLmFyZ3NbMF07CisrCWluc3RhbmNlLT50eXBlX3N3X2luZGV4ID0gYXJncy5hcmdzWzFdICYgMHgzOyAvKiA8PTMgKi8KKysJaW5zdGFuY2UtPnR5cGVfc3cgPSBzeXNjb25fbm9kZV90b19yZWdtYXAoYXJncy5ucCk7CisrCW9mX25vZGVfcHV0KGFyZ3MubnApOworKwlkZXZfaW5mbygmaW5zdGFuY2UtPnBoeS0+ZGV2LCAidHlwZV9zdyAtIHJlZyAlI3gsIGluZGV4ICVkXG4iLAorKwkJIGluc3RhbmNlLT50eXBlX3N3X3JlZywgaW5zdGFuY2UtPnR5cGVfc3dfaW5kZXgpOworKworKwlyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGluc3RhbmNlLT50eXBlX3N3KTsKKyt9CisrCisrc3RhdGljIGludCBwaHlfdHlwZV9zZXQoc3RydWN0IG10a19waHlfaW5zdGFuY2UgKmluc3RhbmNlKQorK3sKKysJaW50IHR5cGU7CisrCXUzMiBtYXNrOworKworKwlpZiAoIWluc3RhbmNlLT50eXBlX3N3KQorKwkJcmV0dXJuIDA7CisrCisrCXN3aXRjaCAoaW5zdGFuY2UtPnR5cGUpIHsKKysJY2FzZSBQSFlfVFlQRV9VU0IzOgorKwkJdHlwZSA9IFJHX1BIWV9TV19VU0IzOworKwkJYnJlYWs7CisrCWNhc2UgUEhZX1RZUEVfUENJRToKKysJCXR5cGUgPSBSR19QSFlfU1dfUENJRTsKKysJCWJyZWFrOworKwljYXNlIFBIWV9UWVBFX1NHTUlJOgorKwkJdHlwZSA9IFJHX1BIWV9TV19TR01JSTsKKysJCWJyZWFrOworKwljYXNlIFBIWV9UWVBFX1NBVEE6CisrCQl0eXBlID0gUkdfUEhZX1NXX1NBVEE7CisrCQlicmVhazsKKysJY2FzZSBQSFlfVFlQRV9VU0IyOgorKwlkZWZhdWx0OgorKwkJcmV0dXJuIDA7CisrCX0KKysKKysJbWFzayA9IFJHX1BIWV9TV19UWVBFIDw8IChpbnN0YW5jZS0+dHlwZV9zd19pbmRleCAqIEJJVFNfUEVSX0JZVEUpOworKwlyZWdtYXBfdXBkYXRlX2JpdHMoaW5zdGFuY2UtPnR5cGVfc3csIGluc3RhbmNlLT50eXBlX3N3X3JlZywgbWFzaywgdHlwZSk7CisrCisrCXJldHVybiAwOworK30KKysKKyBzdGF0aWMgaW50IG10a19waHlfaW5pdChzdHJ1Y3QgcGh5ICpwaHkpCisgeworIAlzdHJ1Y3QgbXRrX3BoeV9pbnN0YW5jZSAqaW5zdGFuY2UgPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKK0BAIC05MzIsNiArMTAwMSw5IEBAIHN0YXRpYyBpbnQgbXRrX3BoeV9pbml0KHN0cnVjdCBwaHkgKnBoeSkKKyAJY2FzZSBQSFlfVFlQRV9TQVRBOgorIAkJc2F0YV9waHlfaW5zdGFuY2VfaW5pdCh0cGh5LCBpbnN0YW5jZSk7CisgCQlicmVhazsKKysJY2FzZSBQSFlfVFlQRV9TR01JSToKKysJCS8qIG5vdGhpbmcgdG8gZG8sIG9ubHkgdXNlZCB0byBzZXQgdHlwZSAqLworKwkJYnJlYWs7CisgCWRlZmF1bHQ6CisgCQlkZXZfZXJyKHRwaHktPmRldiwgImluY29tcGF0aWJsZSBQSFkgdHlwZVxuIik7CisgCQlyZXR1cm4gLUVJTlZBTDsKK0BAIC0xMDIwLDcgKzEwOTIsOCBAQCBzdGF0aWMgc3RydWN0IHBoeSAqbXRrX3BoeV94bGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisgCWlmICghKGluc3RhbmNlLT50eXBlID09IFBIWV9UWVBFX1VTQjIgfHwKKyAJICAgICAgaW5zdGFuY2UtPnR5cGUgPT0gUEhZX1RZUEVfVVNCMyB8fAorIAkgICAgICBpbnN0YW5jZS0+dHlwZSA9PSBQSFlfVFlQRV9QQ0lFIHx8CistCSAgICAgIGluc3RhbmNlLT50eXBlID09IFBIWV9UWVBFX1NBVEEpKSB7CisrCSAgICAgIGluc3RhbmNlLT50eXBlID09IFBIWV9UWVBFX1NBVEEgfHwKKysJICAgICAgaW5zdGFuY2UtPnR5cGUgPT0gUEhZX1RZUEVfU0dNSUkpKSB7CisgCQlkZXZfZXJyKGRldiwgInVuc3VwcG9ydGVkIGRldmljZSB0eXBlOiAlZFxuIiwgaW5zdGFuY2UtPnR5cGUpOworIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisgCX0KK0BAIC0xMDM1LDYgKzExMDgsNyBAQCBzdGF0aWMgc3RydWN0IHBoeSAqbXRrX3BoeV94bGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisgCX0KKyAKKyAJcGh5X3BhcnNlX3Byb3BlcnR5KHRwaHksIGluc3RhbmNlKTsKKysJcGh5X3R5cGVfc2V0KGluc3RhbmNlKTsKKyAKKyAJcmV0dXJuIGluc3RhbmNlLT5waHk7CisgfQorQEAgLTExODMsNiArMTI1NywxMCBAQCBzdGF0aWMgaW50IG10a190cGh5X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCisgCQkJcmV0dmFsID0gUFRSX0VSUihpbnN0YW5jZS0+cmVmX2Nsayk7CisgCQkJZ290byBwdXRfY2hpbGQ7CisgCQl9CisrCisrCQlyZXR2YWwgPSBwaHlfdHlwZV9zeXNjb25fZ2V0KGluc3RhbmNlLCBjaGlsZF9ucCk7CisrCQlpZiAocmV0dmFsKQorKwkJCWdvdG8gcHV0X2NoaWxkOworIAl9CisgCisgCXByb3ZpZGVyID0gZGV2bV9vZl9waHlfcHJvdmlkZXJfcmVnaXN0ZXIoZGV2LCBtdGtfcGh5X3hsYXRlKTsKKy0tIAorMi4xOC4wCisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC84MDAxLVBBVENILTItNC1kdC1iaW5kaW5ncy1waHktQWRkLVBIWV9UWVBFX0RQLWRlZmluaXRpb24ucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvODAwMS1QQVRDSC0yLTQtZHQtYmluZGluZ3MtcGh5LUFkZC1QSFlfVFlQRV9EUC1kZWZpbml0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4M2UyMjAKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvODAwMS1QQVRDSC0yLTQtZHQtYmluZGluZ3MtcGh5LUFkZC1QSFlfVFlQRV9EUC1kZWZpbml0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gOGE3OWRiNWU4M2E1ZDUyYzc0ZTZmM2M0MGQ2ZjMxMmNmODk5MjEzZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp5cmkgU2FyaGEgPGpzYXJoYUB0aS5jb20+CitEYXRlOiBXZWQsIDggSmFuIDIwMjAgMTA6MzA6MDcgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzVdIGR0LWJpbmRpbmdzOiBwaHk6IEFkZCBQSFlfVFlQRV9EUCBkZWZpbml0aW9uCisKK0FkZCBkZWZpbml0aW9uIGZvciBEaXNwbGF5UG9ydCBwaHkgdHlwZS4KKworU2lnbmVkLW9mZi1ieTogSnlyaSBTYXJoYSA8anNhcmhhQHRpLmNvbT4KK1Jldmlld2VkLWJ5OiBSb2dlciBRdWFkcm9zIDxyb2dlcnFAdGkuY29tPgorUmV2aWV3ZWQtYnk6IEtpc2hvbiBWaWpheSBBYnJhaGFtIEkgPGtpc2hvbkB0aS5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaXNob24gVmlqYXkgQWJyYWhhbSBJIDxraXNob25AdGkuY29tPgorLS0tCisgaW5jbHVkZS9kdC1iaW5kaW5ncy9waHkvcGh5LmggfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHQtYmluZGluZ3MvcGh5L3BoeS5oIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9waHkvcGh5LmgKK2luZGV4IGI2YTFlYWYxYjMzOS4uMWYzZjg2NmZhZTdiIDEwMDY0NAorLS0tIGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9waHkvcGh5LmgKKysrKyBiL2luY2x1ZGUvZHQtYmluZGluZ3MvcGh5L3BoeS5oCitAQCAtMTYsNSArMTYsNiBAQAorICNkZWZpbmUgUEhZX1RZUEVfVVNCMgkJMworICNkZWZpbmUgUEhZX1RZUEVfVVNCMwkJNAorICNkZWZpbmUgUEhZX1RZUEVfVUZTCQk1CisrI2RlZmluZSBQSFlfVFlQRV9EUAkJNgorIAorICNlbmRpZiAvKiBfRFRfQklORElOR1NfUEhZICovCistLSAKKzIuMTguMAorCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvODAwMi1QQVRDSC0zLTQtZHQtYmluZGluZ3MtcGh5LUFkZC1QSFlfVFlQRV9YUENTLWRlZmluaXRpb24ucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvODAwMi1QQVRDSC0zLTQtZHQtYmluZGluZ3MtcGh5LUFkZC1QSFlfVFlQRV9YUENTLWRlZmluaXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JkMWNhNwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC84MDAyLVBBVENILTMtNC1kdC1iaW5kaW5ncy1waHktQWRkLVBIWV9UWVBFX1hQQ1MtZGVmaW5pdGlvbi5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIGM1ZDNjZGFkNjg4ZWQ3NWZiMzExYTNhNjcxZWIzMGJhNzEwNmQ3ZDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEaWxpcCBLb3RhIDxlc3dhcmEua290YUBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBUdWUsIDE5IE1heSAyMDIwIDE0OjE5OjE5ICswODAwCitTdWJqZWN0OiBbUEFUQ0ggMi81XSBkdC1iaW5kaW5nczogcGh5OiBBZGQgUEhZX1RZUEVfWFBDUyBkZWZpbml0aW9uCisKK0FkZCBkZWZpbml0aW9uIGZvciBFdGhlcm5ldCBQQ1MgcGh5IHR5cGUuCisKK1NpZ25lZC1vZmYtYnk6IERpbGlwIEtvdGEgPGVzd2FyYS5rb3RhQGxpbnV4LmludGVsLmNvbT4KK0Fja2VkLWJ5OiBSb2IgSGVycmluZyA8cm9iaEBrZXJuZWwub3JnPgorQWNrZWQtQnk6IFZpbm9kIEtvdWwgPHZrb3VsQGtlcm5lbC5vcmc+CitMaW5rOiBodHRwczovL2xvcmUua2VybmVsLm9yZy9yLzYwOTFmMGQyYTEwNDZmMWUzNjU2ZDllMzNiNmNjNDMzZDU0NjVlYWYuMTU4OTg2ODM1OC5naXQuZXN3YXJhLmtvdGFAbGludXguaW50ZWwuY29tCitTaWduZWQtb2ZmLWJ5OiBLaXNob24gVmlqYXkgQWJyYWhhbSBJIDxraXNob25AdGkuY29tPgorLS0tCisgaW5jbHVkZS9kdC1iaW5kaW5ncy9waHkvcGh5LmggfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHQtYmluZGluZ3MvcGh5L3BoeS5oIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9waHkvcGh5LmgKK2luZGV4IDFmM2Y4NjZmYWU3Yi4uMzcyN2VmNzIxMzhiIDEwMDY0NAorLS0tIGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9waHkvcGh5LmgKKysrKyBiL2luY2x1ZGUvZHQtYmluZGluZ3MvcGh5L3BoeS5oCitAQCAtMTcsNSArMTcsNiBAQAorICNkZWZpbmUgUEhZX1RZUEVfVVNCMwkJNAorICNkZWZpbmUgUEhZX1RZUEVfVUZTCQk1CisgI2RlZmluZSBQSFlfVFlQRV9EUAkJNgorKyNkZWZpbmUgUEhZX1RZUEVfWFBDUwkJNworIAorICNlbmRpZiAvKiBfRFRfQklORElOR1NfUEhZICovCistLSAKKzIuMTguMAorCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvODAwMy1QQVRDSC00LTQtZHQtYmluZGluZ3MtcGh5LUFkZC1EVC1iaW5kaW5ncy1mb3ItWGlsaW54LVp5bnFNUC1QUy5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC84MDAzLVBBVENILTQtNC1kdC1iaW5kaW5ncy1waHktQWRkLURULWJpbmRpbmdzLWZvci1YaWxpbngtWnlucU1QLVBTLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNWRmNjYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvODAwMy1QQVRDSC00LTQtZHQtYmluZGluZ3MtcGh5LUFkZC1EVC1iaW5kaW5ncy1mb3ItWGlsaW54LVp5bnFNUC1QUy5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIGNlYTBmNzZhNDgzZDEyNzBhYzZmNjUxMzk2NGUzZTc1MTkzZGRhNDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbnVyYWcgS3VtYXIgVnVsaXNoYSA8YW51cmFnLmt1bWFyLnZ1bGlzaGFAeGlsaW54LmNvbT4KK0RhdGU6IE1vbiwgMjkgSnVuIDIwMjAgMTU6MDA6NTIgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzVdIGR0LWJpbmRpbmdzOiBwaHk6IEFkZCBEVCBiaW5kaW5ncyBmb3IgWGlsaW54IFp5bnFNUCBQU0dUUgorIFBIWQorCitBZGQgRFQgYmluZGluZ3MgZm9yIHRoZSBYaWxpbnggWnlucU1QIFBIWS4gWnlucU1QIFNvQ3MgaGF2ZSBhIEhpZ2ggU3BlZWQKK1Byb2Nlc3NpbmcgU3lzdGVtIEdpZ2FiaXQgVHJhbnNjZWl2ZXIgd2hpY2ggcHJvdmlkZXMgUEhZIGNhcGFiaWxpdGllcyB0bworVVNCLCBTQVRBLCBQQ0lFLCBEaXNwbGF5IFBvcnQgYW5kIEVoZXJuZXQgU0dNSUkgY29udHJvbGxlcnMuCisKK1NpZ25lZC1vZmYtYnk6IEFudXJhZyBLdW1hciBWdWxpc2hhIDxhbnVyYWcua3VtYXIudnVsaXNoYUB4aWxpbnguY29tPgorU2lnbmVkLW9mZi1ieTogTGF1cmVudCBQaW5jaGFydCA8bGF1cmVudC5waW5jaGFydEBpZGVhc29uYm9hcmQuY29tPgorUmV2aWV3ZWQtYnk6IFJvYiBIZXJyaW5nIDxyb2JoQGtlcm5lbC5vcmc+CitMaW5rOiBodHRwczovL2xvcmUua2VybmVsLm9yZy9yLzIwMjAwNjI5MTIwMDU0LjI5MzM4LTItbGF1cmVudC5waW5jaGFydEBpZGVhc29uYm9hcmQuY29tCitTaWduZWQtb2ZmLWJ5OiBWaW5vZCBLb3VsIDx2a291bEBrZXJuZWwub3JnPgorLS0tCisgaW5jbHVkZS9kdC1iaW5kaW5ncy9waHkvcGh5LmggfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHQtYmluZGluZ3MvcGh5L3BoeS5oIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9waHkvcGh5LmgKK2luZGV4IDM3MjdlZjcyMTM4Yi4uMzZlOGMyNDFjZjQ4IDEwMDY0NAorLS0tIGEvaW5jbHVkZS9kdC1iaW5kaW5ncy9waHkvcGh5LmgKKysrKyBiL2luY2x1ZGUvZHQtYmluZGluZ3MvcGh5L3BoeS5oCitAQCAtMTgsNSArMTgsNiBAQAorICNkZWZpbmUgUEhZX1RZUEVfVUZTCQk1CisgI2RlZmluZSBQSFlfVFlQRV9EUAkJNgorICNkZWZpbmUgUEhZX1RZUEVfWFBDUwkJNworKyNkZWZpbmUgUEhZX1RZUEVfU0dNSUkJCTgKKyAKKyAjZW5kaWYgLyogX0RUX0JJTkRJTkdTX1BIWSAqLworLS0gCisyLjE4LjAKKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzgwMDQtbnZtZW0tY29yZS1BZGQtZnVuY3Rpb25zLXRvLW1ha2UtbnVtYmVyLXJlYWRpbmctZWFzeS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC84MDA0LW52bWVtLWNvcmUtQWRkLWZ1bmN0aW9ucy10by1tYWtlLW51bWJlci1yZWFkaW5nLWVhc3kucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY5ZWMzZgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC84MDA0LW52bWVtLWNvcmUtQWRkLWZ1bmN0aW9ucy10by1tYWtlLW51bWJlci1yZWFkaW5nLWVhc3kucGF0Y2gKQEAgLTAsMCArMSwzMDcgQEAKK0Zyb20gOGRjMGIxMTU4ZGNmZmQ3OGVhMmIzYTU2MDRiODJlZTgyNmRlNjg3YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFpoYW55b25nIFdhbmcgPHpoYW55b25nLndhbmdAbWVkaWF0ZWsuY29tPgorRGF0ZTogTW9uLCA4IE5vdiAyMDIxIDEzOjU4OjUxICswODAwCitTdWJqZWN0OiBbUEFUQ0ggMS81XSBudm1lbTogY29yZTogQWRkIGZ1bmN0aW9ucyB0byBtYWtlIG51bWJlciByZWFkaW5nIGVhc3kKKworU29tZXRpbWVzIHRoZSBjbGllbnRzIG9mIG52bWVtIGp1c3Qgd2FudCB0byBnZXQgYSBudW1iZXIgb3V0IG9mCitudm1lbS4gVGhleSBkb24ndCB3YW50IHRvIHRoaW5rIGFib3V0IGV4YWN0bHkgaG93IG1hbnkgYnl0ZXMgdGhlIG52bWVtCitjZWxsIHRvb2sgdXAuIFRoZXkganVzdCB3YW50IHRoZSBudW1iZXIuIExldCdzIG1ha2UgaXQgZWFzeS4KKworSW4gZ2VuZXJhbCB0aGlzIGNvbmNlcHQgaXMgdXNlZnVsIGJlY2F1c2UgbnZtZW0gc3BhY2UgaXMgcHJlY2lvdXMgYW5kCit1c3VhbGx5IHRoZSBmZXdlc3QgYml0cyBhcmUgYWxsb2NhdGVkIHRoYXQgd2lsbCBob2xkIGEgZ2l2ZW4gdmFsdWUgb24KK2EgZ2l2ZW4gc3lzdGVtLiBIb3dldmVyLCBldmVuIHRob3VnaCBzbWFsbCBudW1iZXJzIG1pZ2h0IGJlIGZpbmUgb24KK29uZSBzeXN0ZW0gdGhhdCBkb2Vzbid0IG1lYW4gdGhhdCBsb2dpY2FsbHkgdGhlIG51bWJlciBjb3VsZG4ndCBiZQorYmlnZ2VyLiBJbWFnaW5lIG52bWVtIGNvbnRhaW5pbmcgYSBtYXggZnJlcXVlbmN5IGZvciBhIGNvbXBvbmVudC4gT24KK29uZSBzeXN0ZW0gcGVyaGFwcyB0aGF0IGZpdHMgaW4gMTYgYml0cy4gT24gYW5vdGhlciBzeXN0ZW0gaXQgbWlnaHQKK2ZpdCBpbiAzMiBiaXRzLiBUaGUgY29kZSByZWFkaW5nIHRoaXMgbnVtYmVyIGRvZXNuJ3QgY2FyZS0taXQganVzdAord2FudHMgdGhlIG51bWJlci4KKworV2UnbGwgcHJvdmlkZSB0d28gZnVuY3Rpb25zOiBudm1lbV9jZWxsX3JlYWRfdmFyaWFibGVfbGVfdTMyKCkgYW5kCitudm1lbV9jZWxsX3JlYWRfdmFyaWFibGVfbGVfdTY0KCkuCisKK0NvbXBhcmluZyB0aGVzZSB0byB0aGUgZXhpc3RpbmcgZnVuY3Rpb25zIGxpa2UgbnZtZW1fY2VsbF9yZWFkX3UzMigpOgorKiBUaGVzZSBuZXcgZnVuY3Rpb25zIGhhdmUgbm8gcHJvYmxlbXMgaWYgdGhlIHZhbHVlIHdhcyBzdG9yZWQgaW4KKyAgbnZtZW0gaW4gZmV3ZXIgYnl0ZXMuIEl0J3MgT0sgdG8gdXNlIHRoZXNlIGZ1bmN0aW9uIGFzIGxvbmcgYXMgdGhlCisgIHZhbHVlIHN0b3JlZCB3aWxsIGZpdCBpbiAzMi1iaXRzIChvciA2NC1iaXRzKS4KKyogVGhlc2UgZnVuY3Rpb25zIGF2b2lkIHByb2JsZW1zIHRoYXQgdGhlIGVhcmxpZXIgQVBJcyBoYWQgd2l0aCBiaXQKKyAgb2Zmc2V0cy4gRm9yIGluc3RhbmNlLCB5b3UgY2FuJ3QgdXNlIG52bWVtX2NlbGxfcmVhZF91MzIoKSB0byByZWFkIGEKKyAgdmFsdWUgaGFzIG5iaXRzPTMyIGFuZCBiaXRfb2Zmc2V0PTQgYmVjYXVzZSB0aGUgbnZtZW0gY2VsbCBtdXN0IGJlCisgIGF0IGxlYXN0IDUgYnl0ZXMgYmlnIHRvIGhvbGQgdGhpcyB2YWx1ZS4gVGhlIG5ldyBBUEkgYWNjb3VudHMgZm9yCisgIHRoaXMgYW5kIHdvcmtzIGZpbmUuCisqIFRoZXNlIGZ1bmN0aW9ucyBtYWtlIGl0IHZlcnkgZXhwbGljaXQgdGhhdCB0aGV5IGFzc3VtZSB0aGF0IHRoZQorICBudW1iZXIgd2FzIHN0b3JlZCBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdC4gVGhlIG9sZCBmdW5jdGlvbnMgbWFkZQorICB0aGlzIGFzc3VtcHRpb24gd2hlbmV2ZXIgYml0X29mZnNldCB3YXMgbm9uLXplcm8gKHNlZQorICBudm1lbV9zaGlmdF9yZWFkX2J1ZmZlcl9pbl9wbGFjZSgpKSBidXQgZGlkbid0IHdoZW5ldmVyIHRoZQorICBiaXRfb2Zmc2V0IHdhcyB6ZXJvLgorCitOT1RFOiBpdCdzIGFzc3VtZWQgdGhhdCB3ZSBkb24ndCBuZWVkIGFuIDgtYml0IG9yIDE2LWJpdCB2ZXJzaW9uIG9mCit0aGlzIGZ1bmN0aW9uLiBUaGUgMzItYml0IHZlcnNpb24gb2YgdGhlIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIHJlYWQKKzgtYml0IG9yIDE2LWJpdCBkYXRhLgorCitBdCB0aGUgbW9tZW50LCBJJ20gb25seSBhZGRpbmcgdGhlICJ1bnNpZ25lZCIgdmVyc2lvbnMgb2YgdGhlc2UKK2Z1bmN0aW9ucywgYnV0IGlmIGl0IGVuZHMgdXAgYmVpbmcgdXNlZnVsIHNvbWVvbmUgY291bGQgYWRkIGEgInNpZ25lZCIKK3ZlcnNpb24gdGhhdCBkaWQgMidzIGNvbXBsZW1lbnQgc2lnbiBleHRlbnNpb24uCisKK0F0IHRoZSBtb21lbnQsIEknbSBvbmx5IGFkZGluZyB0aGUgImxpdHRsZSBlbmRpYW4iIHZlcnNpb25zIG9mIHRoZXNlCitmdW5jdGlvbnMuIEFkZGluZyB0aGUgImJpZyBlbmRpYW4iIHZlcnNpb24gd291bGQgcmVxdWlyZSBhZGRpbmcgImJpZworZW5kaWFuIiBzdXBwb3J0IHRvIG52bWVtX3NoaWZ0X3JlYWRfYnVmZmVyX2luX3BsYWNlKCkuCisKK1NpZ25lZC1vZmYtYnk6IERvdWdsYXMgQW5kZXJzb24gPGRpYW5kZXJzQGNocm9taXVtLm9yZz4KK1NpZ25lZC1vZmYtYnk6IFNyaW5pdmFzIEthbmRhZ2F0bGEgPHNyaW5pdmFzLmthbmRhZ2F0bGFAbGluYXJvLm9yZz4KK0xpbms6IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL3IvMjAyMTAzMzAxMTEyNDEuMTk0MDEtNy1zcmluaXZhcy5rYW5kYWdhdGxhQGxpbmFyby5vcmcKK1NpZ25lZC1vZmYtYnk6IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQGxpbnV4Zm91bmRhdGlvbi5vcmc+CitTaWduZWQtb2ZmLWJ5OiBDaHVuZmVuZyBZdW4gPGNodW5mZW5nLnl1bkBtZWRpYXRlay5jb20+CitTaWduZWQtb2ZmLWJ5OiBaaGFueW9uZyBXYW5nIDx6aGFueW9uZy53YW5nQG1lZGlhdGVrLmNvbT4KK0NoYW5nZS1JZDogSTNlMWQ5NmVjMTY4MDgxMmQ1ZTI0NjgxYzc5ODUyYzliMzY4OTk1NTkKKy0tLQorIGRyaXZlcnMvbnZtZW0vY29yZS5jICAgICAgICAgICB8IDE2MSArKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0KKyBpbmNsdWRlL2xpbnV4L252bWVtLWNvbnN1bWVyLmggfCAgMTUgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAxNTAgaW5zZXJ0aW9ucygrKSwgMjYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9kcml2ZXJzL252bWVtL2NvcmUuYyBiL2RyaXZlcnMvbnZtZW0vY29yZS5jCitpbmRleCBjMGY0MzI0ZDhmN2MuLmUyNmIyNWI1YzI4OCAxMDA2NDQKKy0tLSBhL2RyaXZlcnMvbnZtZW0vY29yZS5jCisrKysgYi9kcml2ZXJzL252bWVtL2NvcmUuYworQEAgLTExMDIsMTYgKzExMDIsOCBAQCBpbnQgbnZtZW1fY2VsbF93cml0ZShzdHJ1Y3QgbnZtZW1fY2VsbCAqY2VsbCwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQorIH0KKyBFWFBPUlRfU1lNQk9MX0dQTChudm1lbV9jZWxsX3dyaXRlKTsKKyAKKy0vKioKKy0gKiBudm1lbV9jZWxsX3JlYWRfdTE2KCkgLSBSZWFkIGEgY2VsbCB2YWx1ZSBhcyBhbiB1MTYKKy0gKgorLSAqIEBkZXY6IERldmljZSB0aGF0IHJlcXVlc3RzIHRoZSBudm1lbSBjZWxsLgorLSAqIEBjZWxsX2lkOiBOYW1lIG9mIG52bWVtIGNlbGwgdG8gcmVhZC4KKy0gKiBAdmFsOiBwb2ludGVyIHRvIG91dHB1dCB2YWx1ZS4KKy0gKgorLSAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm5vLgorLSAqLworLWludCBudm1lbV9jZWxsX3JlYWRfdTE2KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqY2VsbF9pZCwgdTE2ICp2YWwpCisrc3RhdGljIGludCBudm1lbV9jZWxsX3JlYWRfY29tbW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqY2VsbF9pZCwKKysJCQkJICB2b2lkICp2YWwsIHNpemVfdCBjb3VudCkKKyB7CisgCXN0cnVjdCBudm1lbV9jZWxsICpjZWxsOworIAl2b2lkICpidWY7CitAQCAtMTEyNiwyMSArMTExOCw1MCBAQCBpbnQgbnZtZW1fY2VsbF9yZWFkX3UxNihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmNlbGxfaWQsIHUxNiAqdmFsKQorIAkJbnZtZW1fY2VsbF9wdXQoY2VsbCk7CisgCQlyZXR1cm4gUFRSX0VSUihidWYpOworIAl9CistCWlmIChsZW4gIT0gc2l6ZW9mKCp2YWwpKSB7CisrCWlmIChsZW4gIT0gY291bnQpIHsKKyAJCWtmcmVlKGJ1Zik7CisgCQludm1lbV9jZWxsX3B1dChjZWxsKTsKKyAJCXJldHVybiAtRUlOVkFMOworIAl9CistCW1lbWNweSh2YWwsIGJ1Ziwgc2l6ZW9mKCp2YWwpKTsKKysJbWVtY3B5KHZhbCwgYnVmLCBjb3VudCk7CisgCWtmcmVlKGJ1Zik7CisgCW52bWVtX2NlbGxfcHV0KGNlbGwpOworIAorIAlyZXR1cm4gMDsKKyB9CisrCisrLyoqCisrICogbnZtZW1fY2VsbF9yZWFkX3U4KCkgLSBSZWFkIGEgY2VsbCB2YWx1ZSBhcyBhIHU4CisrICoKKysgKiBAZGV2OiBEZXZpY2UgdGhhdCByZXF1ZXN0cyB0aGUgbnZtZW0gY2VsbC4KKysgKiBAY2VsbF9pZDogTmFtZSBvZiBudm1lbSBjZWxsIHRvIHJlYWQuCisrICogQHZhbDogcG9pbnRlciB0byBvdXRwdXQgdmFsdWUuCisrICoKKysgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJuby4KKysgKi8KKytpbnQgbnZtZW1fY2VsbF9yZWFkX3U4KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqY2VsbF9pZCwgdTggKnZhbCkKKyt7CisrCXJldHVybiBudm1lbV9jZWxsX3JlYWRfY29tbW9uKGRldiwgY2VsbF9pZCwgdmFsLCBzaXplb2YoKnZhbCkpOworK30KKytFWFBPUlRfU1lNQk9MX0dQTChudm1lbV9jZWxsX3JlYWRfdTgpOworKworKy8qKgorKyAqIG52bWVtX2NlbGxfcmVhZF91MTYoKSAtIFJlYWQgYSBjZWxsIHZhbHVlIGFzIGEgdTE2CisrICoKKysgKiBAZGV2OiBEZXZpY2UgdGhhdCByZXF1ZXN0cyB0aGUgbnZtZW0gY2VsbC4KKysgKiBAY2VsbF9pZDogTmFtZSBvZiBudm1lbSBjZWxsIHRvIHJlYWQuCisrICogQHZhbDogcG9pbnRlciB0byBvdXRwdXQgdmFsdWUuCisrICoKKysgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJuby4KKysgKi8KKytpbnQgbnZtZW1fY2VsbF9yZWFkX3UxNihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmNlbGxfaWQsIHUxNiAqdmFsKQorK3sKKysJcmV0dXJuIG52bWVtX2NlbGxfcmVhZF9jb21tb24oZGV2LCBjZWxsX2lkLCB2YWwsIHNpemVvZigqdmFsKSk7CisrfQorIEVYUE9SVF9TWU1CT0xfR1BMKG52bWVtX2NlbGxfcmVhZF91MTYpOworIAorIC8qKgorLSAqIG52bWVtX2NlbGxfcmVhZF91MzIoKSAtIFJlYWQgYSBjZWxsIHZhbHVlIGFzIGFuIHUzMgorKyAqIG52bWVtX2NlbGxfcmVhZF91MzIoKSAtIFJlYWQgYSBjZWxsIHZhbHVlIGFzIGEgdTMyCisgICoKKyAgKiBAZGV2OiBEZXZpY2UgdGhhdCByZXF1ZXN0cyB0aGUgbnZtZW0gY2VsbC4KKyAgKiBAY2VsbF9pZDogTmFtZSBvZiBudm1lbSBjZWxsIHRvIHJlYWQuCitAQCAtMTE0OSwzMiArMTE3MCwxMjAgQEAgRVhQT1JUX1NZTUJPTF9HUEwobnZtZW1fY2VsbF9yZWFkX3UxNik7CisgICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJybm8uCisgICovCisgaW50IG52bWVtX2NlbGxfcmVhZF91MzIoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpjZWxsX2lkLCB1MzIgKnZhbCkKKyt7CisrCXJldHVybiBudm1lbV9jZWxsX3JlYWRfY29tbW9uKGRldiwgY2VsbF9pZCwgdmFsLCBzaXplb2YoKnZhbCkpOworK30KKytFWFBPUlRfU1lNQk9MX0dQTChudm1lbV9jZWxsX3JlYWRfdTMyKTsKKysKKysvKioKKysgKiBudm1lbV9jZWxsX3JlYWRfdTY0KCkgLSBSZWFkIGEgY2VsbCB2YWx1ZSBhcyBhIHU2NAorKyAqCisrICogQGRldjogRGV2aWNlIHRoYXQgcmVxdWVzdHMgdGhlIG52bWVtIGNlbGwuCisrICogQGNlbGxfaWQ6IE5hbWUgb2YgbnZtZW0gY2VsbCB0byByZWFkLgorKyAqIEB2YWw6IHBvaW50ZXIgdG8gb3V0cHV0IHZhbHVlLgorKyAqCisrICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJybm8uCisrICovCisraW50IG52bWVtX2NlbGxfcmVhZF91NjQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpjZWxsX2lkLCB1NjQgKnZhbCkKKyt7CisrCXJldHVybiBudm1lbV9jZWxsX3JlYWRfY29tbW9uKGRldiwgY2VsbF9pZCwgdmFsLCBzaXplb2YoKnZhbCkpOworK30KKytFWFBPUlRfU1lNQk9MX0dQTChudm1lbV9jZWxsX3JlYWRfdTY0KTsKKysKKytzdGF0aWMgY29uc3Qgdm9pZCAqbnZtZW1fY2VsbF9yZWFkX3ZhcmlhYmxlX2NvbW1vbihzdHJ1Y3QgZGV2aWNlICpkZXYsCisrCQkJCQkJICAgY29uc3QgY2hhciAqY2VsbF9pZCwKKysJCQkJCQkgICBzaXplX3QgbWF4X2xlbiwgc2l6ZV90ICpsZW4pCisgeworIAlzdHJ1Y3QgbnZtZW1fY2VsbCAqY2VsbDsKKysJaW50IG5iaXRzOworIAl2b2lkICpidWY7CistCXNpemVfdCBsZW47CisgCisgCWNlbGwgPSBudm1lbV9jZWxsX2dldChkZXYsIGNlbGxfaWQpOworIAlpZiAoSVNfRVJSKGNlbGwpKQorLQkJcmV0dXJuIFBUUl9FUlIoY2VsbCk7CisrCQlyZXR1cm4gY2VsbDsKKyAKKy0JYnVmID0gbnZtZW1fY2VsbF9yZWFkKGNlbGwsICZsZW4pOworLQlpZiAoSVNfRVJSKGJ1ZikpIHsKKy0JCW52bWVtX2NlbGxfcHV0KGNlbGwpOworLQkJcmV0dXJuIFBUUl9FUlIoYnVmKTsKKy0JfQorLQlpZiAobGVuICE9IHNpemVvZigqdmFsKSkgeworKwluYml0cyA9IGNlbGwtPm5iaXRzOworKwlidWYgPSBudm1lbV9jZWxsX3JlYWQoY2VsbCwgbGVuKTsKKysJbnZtZW1fY2VsbF9wdXQoY2VsbCk7CisrCWlmIChJU19FUlIoYnVmKSkKKysJCXJldHVybiBidWY7CisrCisrCS8qCisrCSAqIElmIG5iaXRzIGlzIHNldCB0aGVuIG52bWVtX2NlbGxfcmVhZCgpIGNhbiBzaWduaWZpY2FudGx5IGV4YWdnZXJhdGUKKysJICogdGhlIGxlbmd0aCBvZiB0aGUgcmVhbCBkYXRhLiBUaHJvdyBhd2F5IHRoZSBleHRyYSBqdW5rLgorKwkgKi8KKysJaWYgKG5iaXRzKQorKwkJKmxlbiA9IERJVl9ST1VORF9VUChuYml0cywgOCk7CisrCisrCWlmICgqbGVuID4gbWF4X2xlbikgeworIAkJa2ZyZWUoYnVmKTsKKy0JCW52bWVtX2NlbGxfcHV0KGNlbGwpOworLQkJcmV0dXJuIC1FSU5WQUw7CisrCQlyZXR1cm4gRVJSX1BUUigtRVJBTkdFKTsKKyAJfQorLQltZW1jcHkodmFsLCBidWYsIHNpemVvZigqdmFsKSk7CisrCisrCXJldHVybiBidWY7CisrfQorKworKy8qKgorKyAqIG52bWVtX2NlbGxfcmVhZF92YXJpYWJsZV9sZV91MzIoKSAtIFJlYWQgdXAgdG8gMzItYml0cyBvZiBkYXRhIGFzIGEgbGl0dGxlIGVuZGlhbiBudW1iZXIuCisrICoKKysgKiBAZGV2OiBEZXZpY2UgdGhhdCByZXF1ZXN0cyB0aGUgbnZtZW0gY2VsbC4KKysgKiBAY2VsbF9pZDogTmFtZSBvZiBudm1lbSBjZWxsIHRvIHJlYWQuCisrICogQHZhbDogcG9pbnRlciB0byBvdXRwdXQgdmFsdWUuCisrICoKKysgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJuby4KKysgKi8KKytpbnQgbnZtZW1fY2VsbF9yZWFkX3ZhcmlhYmxlX2xlX3UzMihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmNlbGxfaWQsCisrCQkJCSAgICB1MzIgKnZhbCkKKyt7CisrCXNpemVfdCBsZW47CisrCWNvbnN0IHU4ICpidWY7CisrCWludCBpOworKworKwlidWYgPSBudm1lbV9jZWxsX3JlYWRfdmFyaWFibGVfY29tbW9uKGRldiwgY2VsbF9pZCwgc2l6ZW9mKCp2YWwpLCAmbGVuKTsKKysJaWYgKElTX0VSUihidWYpKQorKwkJcmV0dXJuIFBUUl9FUlIoYnVmKTsKKysKKysJLyogQ29weSB3LyBpbXBsaWNpdCBlbmRpYW4gY29udmVyc2lvbiAqLworKwkqdmFsID0gMDsKKysJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorKwkJKnZhbCB8PSBidWZbaV0gPDwgKDggKiBpKTsKKyAKKyAJa2ZyZWUoYnVmKTsKKy0JbnZtZW1fY2VsbF9wdXQoY2VsbCk7CisrCisgCXJldHVybiAwOworIH0KKy1FWFBPUlRfU1lNQk9MX0dQTChudm1lbV9jZWxsX3JlYWRfdTMyKTsKKytFWFBPUlRfU1lNQk9MX0dQTChudm1lbV9jZWxsX3JlYWRfdmFyaWFibGVfbGVfdTMyKTsKKysKKysvKioKKysgKiBudm1lbV9jZWxsX3JlYWRfdmFyaWFibGVfbGVfdTY0KCkgLSBSZWFkIHVwIHRvIDY0LWJpdHMgb2YgZGF0YSBhcyBhIGxpdHRsZSBlbmRpYW4gbnVtYmVyLgorKyAqCisrICogQGRldjogRGV2aWNlIHRoYXQgcmVxdWVzdHMgdGhlIG52bWVtIGNlbGwuCisrICogQGNlbGxfaWQ6IE5hbWUgb2YgbnZtZW0gY2VsbCB0byByZWFkLgorKyAqIEB2YWw6IHBvaW50ZXIgdG8gb3V0cHV0IHZhbHVlLgorKyAqCisrICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJybm8uCisrICovCisraW50IG52bWVtX2NlbGxfcmVhZF92YXJpYWJsZV9sZV91NjQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpjZWxsX2lkLAorKwkJCQkgICAgdTY0ICp2YWwpCisreworKwlzaXplX3QgbGVuOworKwljb25zdCB1OCAqYnVmOworKwlpbnQgaTsKKysKKysJYnVmID0gbnZtZW1fY2VsbF9yZWFkX3ZhcmlhYmxlX2NvbW1vbihkZXYsIGNlbGxfaWQsIHNpemVvZigqdmFsKSwgJmxlbik7CisrCWlmIChJU19FUlIoYnVmKSkKKysJCXJldHVybiBQVFJfRVJSKGJ1Zik7CisrCisrCS8qIENvcHkgdy8gaW1wbGljaXQgZW5kaWFuIGNvbnZlcnNpb24gKi8KKysJKnZhbCA9IDA7CisrCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKysJCSp2YWwgfD0gKHVpbnQ2NF90KWJ1ZltpXSA8PCAoOCAqIGkpOworKworKwlrZnJlZShidWYpOworKworKwlyZXR1cm4gMDsKKyt9CisrRVhQT1JUX1NZTUJPTF9HUEwobnZtZW1fY2VsbF9yZWFkX3ZhcmlhYmxlX2xlX3U2NCk7CisgCisgLyoqCisgICogbnZtZW1fZGV2aWNlX2NlbGxfcmVhZCgpIC0gUmVhZCBhIGdpdmVuIG52bWVtIGRldmljZSBhbmQgY2VsbAorZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbnZtZW0tY29uc3VtZXIuaCBiL2luY2x1ZGUvbGludXgvbnZtZW0tY29uc3VtZXIuaAoraW5kZXggNWMxN2NiNzMzMjI0Li5lMzI4YzBmN2VlZjMgMTAwNjQ0CistLS0gYS9pbmNsdWRlL2xpbnV4L252bWVtLWNvbnN1bWVyLmgKKysrKyBiL2luY2x1ZGUvbGludXgvbnZtZW0tY29uc3VtZXIuaAorQEAgLTYzLDYgKzYzLDEwIEBAIHZvaWQgKm52bWVtX2NlbGxfcmVhZChzdHJ1Y3QgbnZtZW1fY2VsbCAqY2VsbCwgc2l6ZV90ICpsZW4pOworIGludCBudm1lbV9jZWxsX3dyaXRlKHN0cnVjdCBudm1lbV9jZWxsICpjZWxsLCB2b2lkICpidWYsIHNpemVfdCBsZW4pOworIGludCBudm1lbV9jZWxsX3JlYWRfdTE2KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqY2VsbF9pZCwgdTE2ICp2YWwpOworIGludCBudm1lbV9jZWxsX3JlYWRfdTMyKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqY2VsbF9pZCwgdTMyICp2YWwpOworK2ludCBudm1lbV9jZWxsX3JlYWRfdmFyaWFibGVfbGVfdTMyKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqY2VsbF9pZCwKKysJCQkJICAgIHUzMiAqdmFsKTsKKytpbnQgbnZtZW1fY2VsbF9yZWFkX3ZhcmlhYmxlX2xlX3U2NChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmNlbGxfaWQsCisrCQkJCSAgICB1NjQgKnZhbCk7CisgCisgLyogZGlyZWN0IG52bWVtIGRldmljZSByZWFkL3dyaXRlIGludGVyZmFjZSAqLworIHN0cnVjdCBudm1lbV9kZXZpY2UgKm52bWVtX2RldmljZV9nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lKTsKK0BAIC0xMzQsNiArMTM4LDE3IEBAIHN0YXRpYyBpbmxpbmUgaW50IG52bWVtX2NlbGxfcmVhZF91MzIoc3RydWN0IGRldmljZSAqZGV2LAorIHsKKyAJcmV0dXJuIC1FT1BOT1RTVVBQOworIH0KKytzdGF0aWMgaW5saW5lIGludCBudm1lbV9jZWxsX3JlYWRfdmFyaWFibGVfbGVfdTMyKHN0cnVjdCBkZXZpY2UgKmRldiwKKysJCQkJCQljb25zdCBjaGFyICpjZWxsX2lkLCB1MzIgKnZhbCkKKyt7CisrCXJldHVybiAtRU5PU1lTOworK30KKysKKytzdGF0aWMgaW5saW5lIGludCBudm1lbV9jZWxsX3JlYWRfdmFyaWFibGVfbGVfdTY0KHN0cnVjdCBkZXZpY2UgKmRldiwKKysJCQkJCQljb25zdCBjaGFyICpjZWxsX2lkLCB1NjQgKnZhbCk7CisreworKwlyZXR1cm4gLUVOT1NZUzsKKyt9CisgCisgc3RhdGljIGlubGluZSBzdHJ1Y3QgbnZtZW1fZGV2aWNlICpudm1lbV9kZXZpY2VfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwKKyAJCQkJCQkgICAgY29uc3QgY2hhciAqbmFtZSkKKy0tIAorMi4xOC4wCisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC84MDA1LW52bWVtLW10ay1lZnVzZS1zdXBwb3J0LW1pbmltdW0tb25lLWJ5dGUtYWNjZXNzLXN0cmkucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvODAwNS1udm1lbS1tdGstZWZ1c2Utc3VwcG9ydC1taW5pbXVtLW9uZS1ieXRlLWFjY2Vzcy1zdHJpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZTRjMmEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvODAwNS1udm1lbS1tdGstZWZ1c2Utc3VwcG9ydC1taW5pbXVtLW9uZS1ieXRlLWFjY2Vzcy1zdHJpLnBhdGNoCkBAIC0wLDAgKzEsNTEgQEAKK0Zyb20gNDRhZTRlZDE0MjI2NWE2ZDUwYTlkM2U2ZjRjMzk1Zjk3YjY4NDlhYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFpoYW55b25nIFdhbmcgPHpoYW55b25nLndhbmdAbWVkaWF0ZWsuY29tPgorRGF0ZTogU2F0LCA2IE5vdiAyMDIxIDIwOjA2OjMwICswODAwCitTdWJqZWN0OiBbUEFUQ0ggMi81XSBudm1lbTogbXRrLWVmdXNlOiBzdXBwb3J0IG1pbmltdW0gb25lIGJ5dGUgYWNjZXNzIHN0cmlkZQorIGFuZCBncmFudWxhcml0eQorCitJbiBvcmRlciB0byBzdXBwb3J0IG52bWVtIGJpdHMgcHJvcGVydHksIHNob3VsZCBzdXBwb3J0IG1pbmltdW0gMSBieXRlCityZWFkIHN0cmlkZSBhbmQgbWluaW11bSAxIGJ5dGUgcmVhZCBncmFudWxhcml0eSBhdCB0aGUgc2FtZSB0aW1lLgorCitTaWduZWQtb2ZmLWJ5OiBDaHVuZmVuZyBZdW4gPGNodW5mZW5nLnl1bkBtZWRpYXRlay5jb20+CitTaWduZWQtb2ZmLWJ5OiBaaGFueW9uZyBXYW5nIDx6aGFueW9uZy53YW5nQG1lZGlhdGVrLmNvbT4KK0NoYW5nZS1JZDogSWFmZTFlYmYxOTVkNThhM2U5ZTM1MTg5MTNmNzk1ZDE0YTAxZGZkM2IKKy0tLQorIGRyaXZlcnMvbnZtZW0vbXRrLWVmdXNlLmMgfCAxMyArKysrKysrLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZW0vbXRrLWVmdXNlLmMgYi9kcml2ZXJzL252bWVtL210ay1lZnVzZS5jCitpbmRleCA4NTZkOWMzZmMzOGUuLjJlNzI4ZmVkMGI0OSAxMDA2NDQKKy0tLSBhL2RyaXZlcnMvbnZtZW0vbXRrLWVmdXNlLmMKKysrKyBiL2RyaXZlcnMvbnZtZW0vbXRrLWVmdXNlLmMKK0BAIC0xOSwxMSArMTksMTIgQEAgc3RhdGljIGludCBtdGtfcmVnX3JlYWQodm9pZCAqY29udGV4dCwKKyAJCQl1bnNpZ25lZCBpbnQgcmVnLCB2b2lkICpfdmFsLCBzaXplX3QgYnl0ZXMpCisgeworIAlzdHJ1Y3QgbXRrX2VmdXNlX3ByaXYgKnByaXYgPSBjb250ZXh0OworLQl1MzIgKnZhbCA9IF92YWw7CistCWludCBpID0gMCwgd29yZHMgPSBieXRlcyAvIDQ7CisrCXZvaWQgX19pb21lbSAqYWRkciA9IHByaXYtPmJhc2UgKyByZWc7CisrCXU4ICp2YWwgPSBfdmFsOworKwlpbnQgaTsKKyAKKy0Jd2hpbGUgKHdvcmRzLS0pCistCQkqdmFsKysgPSByZWFkbChwcml2LT5iYXNlICsgcmVnICsgKGkrKyAqIDQpKTsKKysJZm9yIChpID0gMDsgaSA8IGJ5dGVzOyBpKyssIHZhbCsrKQorKwkJKnZhbCA9IHJlYWRiKGFkZHIgKyBpKTsKKyAKKyAJcmV0dXJuIDA7CisgfQorQEAgLTU4LDggKzU5LDggQEAgc3RhdGljIGludCBtdGtfZWZ1c2VfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKKyAJaWYgKElTX0VSUihwcml2LT5iYXNlKSkKKyAJCXJldHVybiBQVFJfRVJSKHByaXYtPmJhc2UpOworIAorLQllY29uZmlnLnN0cmlkZSA9IDQ7CistCWVjb25maWcud29yZF9zaXplID0gNDsKKysJZWNvbmZpZy5zdHJpZGUgPSAxOworKwllY29uZmlnLndvcmRfc2l6ZSA9IDE7CisgCWVjb25maWcucmVnX3JlYWQgPSBtdGtfcmVnX3JlYWQ7CisgCWVjb25maWcucmVnX3dyaXRlID0gbXRrX3JlZ193cml0ZTsKKyAJZWNvbmZpZy5zaXplID0gcmVzb3VyY2Vfc2l6ZShyZXMpOworLS0gCisyLjE4LjAKKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzgwMDYtcGh5LXBoeS1tdGstdHBoeS1hZGQtc3VwcG9ydC1lZnVzZS1zZXR0aW5nLnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzgwMDYtcGh5LXBoeS1tdGstdHBoeS1hZGQtc3VwcG9ydC1lZnVzZS1zZXR0aW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYzhhNjUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvODAwNi1waHktcGh5LW10ay10cGh5LWFkZC1zdXBwb3J0LWVmdXNlLXNldHRpbmcucGF0Y2gKQEAgLTAsMCArMSwzMTIgQEAKK0Zyb20gYWZiMTIzZTBmOTk5MmQzNWQwZmIyOGVkODc1ZjJiN2I3ODg0NjUyZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFpoYW55b25nIFdhbmcgPHpoYW55b25nLndhbmdAbWVkaWF0ZWsuY29tPgorRGF0ZTogTW9uLCA4IE5vdiAyMDIxIDE0OjUxOjM4ICswODAwCitTdWJqZWN0OiBbUEFUQ0ggMy81XSBwaHk6IHBoeS1tdGstdHBoeTogYWRkIHN1cHBvcnQgZWZ1c2Ugc2V0dGluZworCitEdWUgdG8gc29tZSBTb0NzIGhhdmUgYSBiaXQgc2hpZnQgaXNzdWUgdGhhdCB3aWxsIGRyb3AgYSBiaXQgZm9yIHVzYjMKK3BoeSBvciBwY2llIHBoeSwgZml4IGl0IGJ5IGFkZGluZyBzb2Z0d2FyZSBlZnVzZSByZWFkaW5nIGFuZCBzZXR0aW5nLAorYnV0IG9ubHkgc3VwcG9ydCBpdCBvcHRpb25hbGx5IGZvciB2ZXJzb2luLgorCitTaWduZWQtb2ZmLWJ5OiBDaHVuZmVuZyBZdW4gPGNodW5mZW5nLnl1bkBtZWRpYXRlay5jb20+CitTaWduZWQtb2ZmLWJ5OiBaaGFueW9uZyBXYW5nIDx6aGFueW9uZy53YW5nQG1lZGlhdGVrLmNvbT4KK0NoYW5nZS1JZDogSWJmODg4Njg2NjhiMzg4OWYxOGM3OTMwNTMxOTgxNDAwY2FjNzMyZjEKKy0tLQorIGRyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstdHBoeS5jIHwgMTk0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTk0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstdHBoeS5jIGIvZHJpdmVycy9waHkvbWVkaWF0ZWsvcGh5LW10ay10cGh5LmMKK2luZGV4IGNiMmVkM2IyNTA2OC4uMDVhMWFkNGZmMzM0IDEwMDY0NAorLS0tIGEvZHJpdmVycy9waHkvbWVkaWF0ZWsvcGh5LW10ay10cGh5LmMKKysrKyBiL2RyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstdHBoeS5jCitAQCAtMTEsNiArMTEsNyBAQAorICNpbmNsdWRlIDxsaW51eC9pby5oPgorICNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4KKyAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisrI2luY2x1ZGUgPGxpbnV4L252bWVtLWNvbnN1bWVyLmg+CisgI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyAjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisgI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KK0BAIC0zOCwxMSArMzksMTYgQEAKKyAjZGVmaW5lIFNTVVNCX1NJRlNMVl9WMl9VM1BIWUQJCTB4MjAwCisgI2RlZmluZSBTU1VTQl9TSUZTTFZfVjJfVTNQSFlBCQkweDQwMAorIAorKyNkZWZpbmUgVTNQX01JU0NfUkVHMQkJMHgwNAorKyNkZWZpbmUgTVIxX0VGVVNFX0FVVE9fTE9BRF9ESVMJCUJJVCg2KQorKworICNkZWZpbmUgVTNQX1VTQlBIWUFDUjAJCTB4MDAwCisgI2RlZmluZSBQQTBfUkdfVTJQTExfRk9SQ0VfT04JCUJJVCgxNSkKKyAjZGVmaW5lIFBBMF9SR19VU0IyMF9JTlRSX0VOCQlCSVQoNSkKKyAKKyAjZGVmaW5lIFUzUF9VU0JQSFlBQ1IxCQkweDAwNAorKyNkZWZpbmUgUEExX1JHX0lOVFJfQ0FMCQlHRU5NQVNLKDIzLCAxOSkKKysjZGVmaW5lIFBBMV9SR19JTlRSX0NBTF9WQUwoeCkJKCgweDFmICYgKHgpKSA8PCAxOSkKKyAjZGVmaW5lIFBBMV9SR19WUlRfU0VMCQkJR0VOTUFTSygxNCwgMTIpCisgI2RlZmluZSBQQTFfUkdfVlJUX1NFTF9WQUwoeCkJKCgweDcgJiAoeCkpIDw8IDEyKQorICNkZWZpbmUgUEExX1JHX1RFUk1fU0VMCQlHRU5NQVNLKDEwLCA4KQorQEAgLTExNCw2ICsxMjAsOCBAQAorICNkZWZpbmUgUDNDX1JHX1NXUlNUX1UzX1BIWURfRk9SQ0VfRU4JQklUKDI0KQorIAorICNkZWZpbmUgVTNQX1UzX1BIWUFfUkVHMAkweDAwMAorKyNkZWZpbmUgUDNBX1JHX0lFWFRfSU5UUgkJR0VOTUFTSygxNSwgMTApCisrI2RlZmluZSBQM0FfUkdfSUVYVF9JTlRSX1ZBTCh4KQkJKCgweDNmICYgKHgpKSA8PCAxMCkKKyAjZGVmaW5lIFAzQV9SR19DTEtEUlZfT0ZGCQlHRU5NQVNLKDMsIDIpCisgI2RlZmluZSBQM0FfUkdfQ0xLRFJWX09GRl9WQUwoeCkJKCgweDMgJiAoeCkpIDw8IDIpCisgCitAQCAtMTY4LDYgKzE3NiwyNSBAQAorICNkZWZpbmUgUDNEX1JHX0ZXQUtFX1RICQlHRU5NQVNLKDIxLCAxNikKKyAjZGVmaW5lIFAzRF9SR19GV0FLRV9USF9WQUwoeCkJKCgweDNmICYgKHgpKSA8PCAxNikKKyAKKysjZGVmaW5lIFUzUF9VM19QSFlEX0lNUENBTDAJCTB4MDEwCisrI2RlZmluZSBQM0RfUkdfRk9SQ0VfVFhfSU1QRUwJCUJJVCgzMSkKKysjZGVmaW5lIFAzRF9SR19UWF9JTVBFTAkJCUdFTk1BU0soMjgsIDI0KQorKyNkZWZpbmUgUDNEX1JHX1RYX0lNUEVMX1ZBTCh4KQkJKCgweDFmICYgKHgpKSA8PCAyNCkKKysKKysjZGVmaW5lIFUzUF9VM19QSFlEX0lNUENBTDEJCTB4MDE0CisrI2RlZmluZSBQM0RfUkdfRk9SQ0VfUlhfSU1QRUwJCUJJVCgzMSkKKysjZGVmaW5lIFAzRF9SR19SWF9JTVBFTAkJCUdFTk1BU0soMjgsIDI0KQorKyNkZWZpbmUgUDNEX1JHX1JYX0lNUEVMX1ZBTCh4KQkJKCgweDFmICYgKHgpKSA8PCAyNCkKKysKKysjZGVmaW5lIFUzUF9VM19QSFlEX1JYMAkJCTB4MDJjCisrCisrI2RlZmluZSBVM1BfVTNfUEhZRF9UMlJMQgkJMHgwMzAKKysKKysjZGVmaW5lIFUzUF9VM19QSFlEX1BJUEUwCQkweDA0MAorKworKyNkZWZpbmUgVTNQX1UzX1BIWURfUlNWCQkJMHgwNTQKKysjZGVmaW5lIFAzRF9SR19FRlVTRV9BVVRPX0xPQURfRElTCUJJVCgxMikKKysKKyAjZGVmaW5lIFUzUF9VM19QSFlEX0NEUjEJCTB4MDVjCisgI2RlZmluZSBQM0RfUkdfQ0RSX0JJUl9MVEQxCQlHRU5NQVNLKDI4LCAyNCkKKyAjZGVmaW5lIFAzRF9SR19DRFJfQklSX0xURDFfVkFMKHgpCSgoMHgxZiAmICh4KSkgPDwgMjQpCitAQCAtMjY2LDExICsyOTMsMjMgQEAKKyBlbnVtIG10a19waHlfdmVyc2lvbiB7CisgCU1US19QSFlfVjEgPSAxLAorIAlNVEtfUEhZX1YyLAorKwlNVEtfUEhZX1YzLAorIH07CisgCisgc3RydWN0IG10a19waHlfcGRhdGEgeworIAkvKiBhdm9pZCBSWCBzZW5zaXRpdml0eSBsZXZlbCBkZWdyYWRhdGlvbiBvbmx5IGZvciBtdDgxNzMgKi8KKyAJYm9vbCBhdm9pZF9yeF9zZW5fZGVncmFkYXRpb247CisrCS8qCisrCSAqIHUycGh5IHNob3VsZCB1c2UgaW50ZWdlciBtb2RlIGluc3RlYWQgb2YgZnJhY3Rpb25hbCBtb2RlIG9mCisrCSAqIDQ4TSBQTEwsIGZpeCBpdCBieSBzd2l0Y2hpbmcgUExMIHRvIDI2TSBmcm9tIGRlZmF1bHQgNDhNCisrCSAqIGZvciBtdDgxOTUKKysJICovCisrCWJvb2wgc3hfcGxsXzQ4bV90b18yNm07CisrCS8qCisrCSAqIFNvbWUgU29DcyAoZS5nLiBtdDgxOTUpIGRyb3AgYSBiaXQgd2hlbiB1c2UgYXV0byBsb2FkIGVmdXNlLAorKwkgKiBzdXBwb3J0IHN3IHdheSwgYWxzbyBzdXBwb3J0IGl0IGZvciB2Mi92MyBvcHRpb25hbGx5LgorKwkgKi8KKysJYm9vbCBzd19lZnVzZV9zdXBwb3J0ZWQ7CisgCWVudW0gbXRrX3BoeV92ZXJzaW9uIHZlcnNpb247CisgfTsKKyAKK0BAIC0yOTUsNiArMzM0LDEwIEBAIHN0cnVjdCBtdGtfcGh5X2luc3RhbmNlIHsKKyAJCXN0cnVjdCB1M3BoeV9iYW5rcyB1M19iYW5rczsKKyAJfTsKKyAJc3RydWN0IGNsayAqcmVmX2NsazsJLyogcmVmZXJlbmNlIGNsb2NrIG9mIGFub2xvZyBwaHkgKi8KKysJdTMyIGVmdXNlX3N3X2VuOworKwl1MzIgZWZ1c2VfaW50cjsKKysJdTMyIGVmdXNlX3R4X2ltcDsKKysJdTMyIGVmdXNlX3J4X2ltcDsKKyAJdTMyIGluZGV4OworIAl1OCB0eXBlOworIAlpbnQgZXllX3NyYzsKK0BAIC04OTAsNiArOTMzLDEzOCBAQCBzdGF0aWMgdm9pZCB1Ml9waHlfcHJvcHNfc2V0KHN0cnVjdCBtdGtfdHBoeSAqdHBoeSwKKyAJfQorIH0KKyAKKytzdGF0aWMgaW50IHBoeV9lZnVzZV9nZXQoc3RydWN0IG10a190cGh5ICp0cGh5LCBzdHJ1Y3QgbXRrX3BoeV9pbnN0YW5jZSAqaW5zdGFuY2UpCisreworKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaW5zdGFuY2UtPnBoeS0+ZGV2OworKwlpbnQgcmV0ID0gMDsKKysKKysJZGV2X2VycihkZXYsICJ0cnkgdG8gZ2V0IHN3IGVmdXNlXG4iKTsKKysKKysJLyogdHBoeSB2MSBkb2Vzbid0IHN1cHBvcnQgc3cgZWZ1c2UsIHNraXAgaXQgKi8KKysJaWYgKCF0cGh5LT5wZGF0YS0+c3dfZWZ1c2Vfc3VwcG9ydGVkKSB7CisrCQlpbnN0YW5jZS0+ZWZ1c2Vfc3dfZW4gPSAwOworKwkJcmV0dXJuIDA7CisrCX0KKysKKysJLyogc29mdHdhcmUgZWZ1c2UgaXMgb3B0aW9uYWwgKi8KKysJaW5zdGFuY2UtPmVmdXNlX3N3X2VuID0gZGV2aWNlX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYsICJudm1lbS1jZWxscyIpOworKwlpZiAoIWluc3RhbmNlLT5lZnVzZV9zd19lbikKKysJCXJldHVybiAwOworKworKwlkZXZfZXJyKGRldiwgInRyeSB0byBnZXQgc3cgZWZ1c2UrXG4iKTsKKysKKysJc3dpdGNoIChpbnN0YW5jZS0+dHlwZSkgeworKwljYXNlIFBIWV9UWVBFX1VTQjI6CisrCQlyZXQgPSBudm1lbV9jZWxsX3JlYWRfdmFyaWFibGVfbGVfdTMyKGRldiwgImludHIiLCAmaW5zdGFuY2UtPmVmdXNlX2ludHIpOworKwkJaWYgKHJldCkgeworKwkJCWRldl9lcnIoZGV2LCAiZmFpbCB0byBnZXQgdTIgaW50ciBlZnVzZSwgJWRcbiIsIHJldCk7CisrCQkJYnJlYWs7CisrCQl9CisrCisrCQkvKiBubyBlZnVzZSwgaWdub3JlIGl0ICovCisrCQlpZiAoIWluc3RhbmNlLT5lZnVzZV9pbnRyKSB7CisrCQkJZGV2X3dhcm4oZGV2LCAibm8gdTIgaW50ciBlZnVzZSwgYnV0IGR0cyBlbmFibGUgaXRcbiIpOworKwkJCWluc3RhbmNlLT5lZnVzZV9zd19lbiA9IDA7CisrCQkJYnJlYWs7CisrCQl9CisrCisrCQlkZXZfaW5mbyhkZXYsICJ1MiBlZnVzZSAtIGludHIgJXhcbiIsIGluc3RhbmNlLT5lZnVzZV9pbnRyKTsKKysJCWJyZWFrOworKwljYXNlIFBIWV9UWVBFX1VTQjM6CisrCWNhc2UgUEhZX1RZUEVfUENJRToKKysJCXJldCA9IG52bWVtX2NlbGxfcmVhZF92YXJpYWJsZV9sZV91MzIoZGV2LCAiaW50ciIsICZpbnN0YW5jZS0+ZWZ1c2VfaW50cik7CisrCQlpZiAocmV0KSB7CisrCQkJZGV2X2VycihkZXYsICJmYWlsIHRvIGdldCB1MyBpbnRyIGVmdXNlLCAlZFxuIiwgcmV0KTsKKysJCQlicmVhazsKKysJCX0KKysKKysJCXJldCA9IG52bWVtX2NlbGxfcmVhZF92YXJpYWJsZV9sZV91MzIoZGV2LCAicnhfaW1wIiwgJmluc3RhbmNlLT5lZnVzZV9yeF9pbXApOworKwkJaWYgKHJldCkgeworKwkJCWRldl9lcnIoZGV2LCAiZmFpbCB0byBnZXQgdTMgcnhfaW1wIGVmdXNlLCAlZFxuIiwgcmV0KTsKKysJCQlicmVhazsKKysJCX0KKysKKysJCXJldCA9IG52bWVtX2NlbGxfcmVhZF92YXJpYWJsZV9sZV91MzIoZGV2LCAidHhfaW1wIiwgJmluc3RhbmNlLT5lZnVzZV90eF9pbXApOworKwkJaWYgKHJldCkgeworKwkJCWRldl9lcnIoZGV2LCAiZmFpbCB0byBnZXQgdTMgdHhfaW1wIGVmdXNlLCAlZFxuIiwgcmV0KTsKKysJCQlicmVhazsKKysJCX0KKysKKysJCS8qIG5vIGVmdXNlLCBpZ25vcmUgaXQgKi8KKysJCWlmICghaW5zdGFuY2UtPmVmdXNlX2ludHIgJiYKKysJCSAgICAhaW5zdGFuY2UtPmVmdXNlX3J4X2ltcCAmJgorKwkJICAgICFpbnN0YW5jZS0+ZWZ1c2VfdHhfaW1wKSB7CisrCQkJZGV2X3dhcm4oZGV2LCAibm8gdTMgaW50ciBlZnVzZSwgYnV0IGR0cyBlbmFibGUgaXRcbiIpOworKwkJCWluc3RhbmNlLT5lZnVzZV9zd19lbiA9IDA7CisrCQkJYnJlYWs7CisrCQl9CisrCisrCQlkZXZfaW5mbyhkZXYsICJ1MyBlZnVzZSAtIGludHIgJXgsIHJ4X2ltcCAleCwgdHhfaW1wICV4XG4iLAorKwkJCSBpbnN0YW5jZS0+ZWZ1c2VfaW50ciwgaW5zdGFuY2UtPmVmdXNlX3J4X2ltcCwKKysJCQkgaW5zdGFuY2UtPmVmdXNlX3R4X2ltcCk7CisrCQlicmVhazsKKysJZGVmYXVsdDoKKysJCWRldl9lcnIoZGV2LCAibm8gc3cgZWZ1c2UgZm9yIHR5cGUgJWRcbiIsIGluc3RhbmNlLT50eXBlKTsKKysJCXJldCA9IC1FSU5WQUw7CisrCX0KKysKKysJcmV0dXJuIHJldDsKKyt9CisrCisrc3RhdGljIHZvaWQgcGh5X2VmdXNlX3NldChzdHJ1Y3QgbXRrX3BoeV9pbnN0YW5jZSAqaW5zdGFuY2UpCisreworKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaW5zdGFuY2UtPnBoeS0+ZGV2OworKwlzdHJ1Y3QgdTJwaHlfYmFua3MgKnUyX2JhbmtzID0gJmluc3RhbmNlLT51Ml9iYW5rczsKKysJc3RydWN0IHUzcGh5X2JhbmtzICp1M19iYW5rcyA9ICZpbnN0YW5jZS0+dTNfYmFua3M7CisrCXUzMiB0bXA7CisrCisrCWlmICghaW5zdGFuY2UtPmVmdXNlX3N3X2VuKQorKwkJcmV0dXJuOworKworKwlzd2l0Y2ggKGluc3RhbmNlLT50eXBlKSB7CisrCWNhc2UgUEhZX1RZUEVfVVNCMjoKKysJCXRtcCA9IHJlYWRsKHUyX2JhbmtzLT5taXNjICsgVTNQX01JU0NfUkVHMSk7CisrCQl0bXAgfD0gTVIxX0VGVVNFX0FVVE9fTE9BRF9ESVM7CisrCQl3cml0ZWwodG1wLCB1Ml9iYW5rcy0+bWlzYyArIFUzUF9NSVNDX1JFRzEpOworKworKwkJdG1wID0gcmVhZGwodTJfYmFua3MtPmNvbSArIFUzUF9VU0JQSFlBQ1IxKTsKKysJCXRtcCAmPSB+UEExX1JHX0lOVFJfQ0FMOworKwkJdG1wIHw9IFBBMV9SR19JTlRSX0NBTF9WQUwoaW5zdGFuY2UtPmVmdXNlX2ludHIpOworKwkJd3JpdGVsKHRtcCwgdTJfYmFua3MtPmNvbSArIFUzUF9VU0JQSFlBQ1IxKTsKKysJCXByX2VycigiJXMgc2V0IGVmdXNlIGludHIgJXhcbiIsIF9fZnVuY19fLCBpbnN0YW5jZS0+ZWZ1c2VfaW50cik7CisrCisrCQlicmVhazsKKysJY2FzZSBQSFlfVFlQRV9VU0IzOgorKwljYXNlIFBIWV9UWVBFX1BDSUU6CisrCQl0bXAgPSByZWFkbCh1M19iYW5rcy0+cGh5ZCArIFUzUF9VM19QSFlEX1JTVik7CisrCQl0bXAgfD0gUDNEX1JHX0VGVVNFX0FVVE9fTE9BRF9ESVM7CisrCQl3cml0ZWwodG1wLCB1M19iYW5rcy0+cGh5ZCArIFUzUF9VM19QSFlEX1JTVik7CisrCisrCQl0bXAgPSByZWFkbCh1M19iYW5rcy0+cGh5ZCArIFUzUF9VM19QSFlEX0lNUENBTDApOworKwkJdG1wICY9IH5QM0RfUkdfVFhfSU1QRUw7CisrCQl0bXAgfD0gUDNEX1JHX1RYX0lNUEVMX1ZBTChpbnN0YW5jZS0+ZWZ1c2VfdHhfaW1wKTsKKysJCXRtcCB8PSBQM0RfUkdfRk9SQ0VfVFhfSU1QRUw7CisrCQl3cml0ZWwodG1wLCB1M19iYW5rcy0+cGh5ZCArIFUzUF9VM19QSFlEX0lNUENBTDApOworKworKwkJdG1wID0gcmVhZGwodTNfYmFua3MtPnBoeWQgKyBVM1BfVTNfUEhZRF9JTVBDQUwxKTsKKysJCXRtcCAmPSB+UDNEX1JHX1JYX0lNUEVMOworKwkJdG1wIHw9IFAzRF9SR19SWF9JTVBFTF9WQUwoaW5zdGFuY2UtPmVmdXNlX3J4X2ltcCk7CisrCQl0bXAgfD0gUDNEX1JHX0ZPUkNFX1JYX0lNUEVMOworKwkJd3JpdGVsKHRtcCwgdTNfYmFua3MtPnBoeWQgKyBVM1BfVTNfUEhZRF9JTVBDQUwxKTsKKysKKysJCXRtcCA9IHJlYWRsKHUzX2JhbmtzLT5waHlhICsgVTNQX1UzX1BIWUFfUkVHMCk7CisrCQl0bXAgJj0gflAzQV9SR19JRVhUX0lOVFI7CisrCQl0bXAgfD0gUDNBX1JHX0lFWFRfSU5UUl9WQUwoaW5zdGFuY2UtPmVmdXNlX2ludHIpOworKwkJd3JpdGVsKHRtcCwgdTNfYmFua3MtPnBoeWEgKyBVM1BfVTNfUEhZQV9SRUcwKTsKKysJCXByX2VycigiJXMgc2V0IGVmdXNlLCB0eF9pbXAgJXgsIHJ4X2ltcCAleCBpbnRyICV4XG4iLAorKwkJCV9fZnVuY19fLCBpbnN0YW5jZS0+ZWZ1c2VfdHhfaW1wLAorKwkJCWluc3RhbmNlLT5lZnVzZV9yeF9pbXAsIGluc3RhbmNlLT5lZnVzZV9pbnRyKTsKKysJCWJyZWFrOworKwlkZWZhdWx0OgorKwkJZGV2X3dhcm4oZGV2LCAibm8gc3cgZWZ1c2UgZm9yIHR5cGUgJWRcbiIsIGluc3RhbmNlLT50eXBlKTsKKysJfQorK30KKysKKyBzdGF0aWMgaW50IG10a19waHlfaW5pdChzdHJ1Y3QgcGh5ICpwaHkpCisgeworIAlzdHJ1Y3QgbXRrX3BoeV9pbnN0YW5jZSAqaW5zdGFuY2UgPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKK0BAIC05MDgsNiArMTA4Myw4IEBAIHN0YXRpYyBpbnQgbXRrX3BoeV9pbml0KHN0cnVjdCBwaHkgKnBoeSkKKyAJCXJldHVybiByZXQ7CisgCX0KKyAKKysJcGh5X2VmdXNlX3NldChpbnN0YW5jZSk7CisrCisgCXN3aXRjaCAoaW5zdGFuY2UtPnR5cGUpIHsKKyAJY2FzZSBQSFlfVFlQRV9VU0IyOgorIAkJdTJfcGh5X2luc3RhbmNlX2luaXQodHBoeSwgaW5zdGFuY2UpOworQEAgLTk4OSw2ICsxMTY2LDcgQEAgc3RhdGljIHN0cnVjdCBwaHkgKm10a19waHlfeGxhdGUoc3RydWN0IGRldmljZSAqZGV2LAorIAlzdHJ1Y3QgbXRrX3BoeV9pbnN0YW5jZSAqaW5zdGFuY2UgPSBOVUxMOworIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBoeV9ucCA9IGFyZ3MtPm5wOworIAlpbnQgaW5kZXg7CisrCWludCByZXQ7CisgCisgCWlmIChhcmdzLT5hcmdzX2NvdW50ICE9IDEpIHsKKyAJCWRldl9lcnIoZGV2LCAiaW52YWxpZCBudW1iZXIgb2YgY2VsbHMgaW4gJ3BoeScgcHJvcGVydHlcbiIpOworQEAgLTEwMjQsNiArMTIwMiwxMCBAQCBzdGF0aWMgc3RydWN0IHBoeSAqbXRrX3BoeV94bGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisgCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKyAJfQorIAorKwlyZXQgPSBwaHlfZWZ1c2VfZ2V0KHRwaHksIGluc3RhbmNlKTsKKysJaWYgKHJldCkKKysJCXJldHVybiBFUlJfUFRSKHJldCk7CisrCisgCXBoeV9wYXJzZV9wcm9wZXJ0eSh0cGh5LCBpbnN0YW5jZSk7CisgCisgCXJldHVybiBpbnN0YW5jZS0+cGh5OworQEAgLTEwNDUsMTQgKzEyMjcsMjYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfcGh5X3BkYXRhIHRwaHlfdjFfcGRhdGEgPSB7CisgCisgc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfcGh5X3BkYXRhIHRwaHlfdjJfcGRhdGEgPSB7CisgCS5hdm9pZF9yeF9zZW5fZGVncmFkYXRpb24gPSBmYWxzZSwKKysJLnN3X2VmdXNlX3N1cHBvcnRlZCA9IHRydWUsCisgCS52ZXJzaW9uID0gTVRLX1BIWV9WMiwKKyB9OworIAorK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX3BoeV9wZGF0YSB0cGh5X3YzX3BkYXRhID0geworKwkuc3dfZWZ1c2Vfc3VwcG9ydGVkID0gdHJ1ZSwKKysJLnZlcnNpb24gPSBNVEtfUEhZX1YzLAorK307CisrCisgc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfcGh5X3BkYXRhIG10ODE3M19wZGF0YSA9IHsKKyAJLmF2b2lkX3J4X3Nlbl9kZWdyYWRhdGlvbiA9IHRydWUsCisgCS52ZXJzaW9uID0gTVRLX1BIWV9WMSwKKyB9OworIAorK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX3BoeV9wZGF0YSBtdDgxOTVfcGRhdGEgPSB7CisrCS5zeF9wbGxfNDhtX3RvXzI2bSA9IHRydWUsCisrCS5zd19lZnVzZV9zdXBwb3J0ZWQgPSB0cnVlLAorKwkudmVyc2lvbiA9IE1US19QSFlfVjMsCisrfTsKKysKKyBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfdHBoeV9pZF90YWJsZVtdID0geworIAl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10MjcwMS11M3BoeSIsIC5kYXRhID0gJnRwaHlfdjFfcGRhdGEgfSwKKyAJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDI3MTItdTNwaHkiLCAuZGF0YSA9ICZ0cGh5X3YyX3BkYXRhIH0sCistLSAKKzIuMTguMAorCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvODAwNy1waHktcGh5LW10ay10cGh5LUFkZC1QQ0llLTItbGFuZS1lZnVzZS1zdXBwb3J0LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzgwMDctcGh5LXBoeS1tdGstdHBoeS1BZGQtUENJZS0yLWxhbmUtZWZ1c2Utc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzEwNjk1Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzgwMDctcGh5LXBoeS1tdGstdHBoeS1BZGQtUENJZS0yLWxhbmUtZWZ1c2Utc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDIyOSBAQAorRnJvbSA0MWZmZTMyZTdlYzIzZjU5MmUyMWM1MDhiNTEwODg5OWFkMzkzMDU5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogWmhhbnlvbmcgV2FuZyA8emhhbnlvbmcud2FuZ0BtZWRpYXRlay5jb20+CitEYXRlOiBUdWUsIDI1IEphbiAyMDIyIDE2OjUwOjQ3ICswODAwCitTdWJqZWN0OiBbUEFUQ0ggNC81XSBwaHk6IHBoeS1tdGstdHBoeTogQWRkIFBDSWUgMiBsYW5lIGVmdXNlIHN1cHBvcnQKKworQWRkIFBDSWUgMiBsYW5lIGVmdXNlIHN1cHBvcnQgaW4gdHBoeSBkcml2ZXIuCisKK1NpZ25lZC1vZmYtYnk6IEppZSBZYW5nIDxqaWV5eS55YW5nQG1lZGlhdGVrLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFpoYW55b25nIFdhbmcgPHpoYW55b25nLndhbmdAbWVkaWF0ZWsuY29tPgorLS0tCisgZHJpdmVycy9waHkvbWVkaWF0ZWsvcGh5LW10ay10cGh5LmMgfCAxNDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxNDAgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvbWVkaWF0ZWsvcGh5LW10ay10cGh5LmMgYi9kcml2ZXJzL3BoeS9tZWRpYXRlay9waHktbXRrLXRwaHkuYworaW5kZXggMDVhMWFkNC4uNTlkNmFjMyAxMDA2NDQKKy0tLSBhL2RyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstdHBoeS5jCisrKysgYi9kcml2ZXJzL3BoeS9tZWRpYXRlay9waHktbXRrLXRwaHkuYworQEAgLTM5LDYgKzM5LDE1IEBACisgI2RlZmluZSBTU1VTQl9TSUZTTFZfVjJfVTNQSFlECQkweDIwMAorICNkZWZpbmUgU1NVU0JfU0lGU0xWX1YyX1UzUEhZQQkJMHg0MDAKKyAKKysvKiB2ZXJzaW9uIFY0IHN1Yi1iYW5rcyBvZmZzZXQgYmFzZSBhZGRyZXNzICovCisrLyogcGNpZSBwaHkgYmFua3MgKi8KKysjZGVmaW5lIFNTVVNCX1NJRlNMVl9WNF9TUExMQwkJMHgwMDAKKysjZGVmaW5lIFNTVVNCX1NJRlNMVl9WNF9DSElQCQkweDEwMAorKyNkZWZpbmUgU1NVU0JfU0lGU0xWX1Y0X1UzUEhZRAkJMHg5MDAKKysjZGVmaW5lIFNTVVNCX1NJRlNMVl9WNF9VM1BIWUEJCTB4YjAwCisrCisrI2RlZmluZSBTU1VTQl9MTjFfT0ZGU0VUCQkweDEwMDAwCisrCisgI2RlZmluZSBVM1BfTUlTQ19SRUcxCQkweDA0CisgI2RlZmluZSBNUjFfRUZVU0VfQVVUT19MT0FEX0RJUwkJQklUKDYpCisgCitAQCAtMjk0LDYgKzMwMyw3IEBAIGVudW0gbXRrX3BoeV92ZXJzaW9uIHsKKyAJTVRLX1BIWV9WMSA9IDEsCisgCU1US19QSFlfVjIsCisgCU1US19QSFlfVjMsCisrCU1US19QSFlfVjQsCisgfTsKKyAKKyBzdHJ1Y3QgbXRrX3BoeV9wZGF0YSB7CitAQCAtMzM4LDYgKzM0OCw5IEBAIHN0cnVjdCBtdGtfcGh5X2luc3RhbmNlIHsKKyAJdTMyIGVmdXNlX2ludHI7CisgCXUzMiBlZnVzZV90eF9pbXA7CisgCXUzMiBlZnVzZV9yeF9pbXA7CisrCXUzMiBlZnVzZV9pbnRyX2xuMTsKKysJdTMyIGVmdXNlX3R4X2ltcF9sbjE7CisrCXUzMiBlZnVzZV9yeF9pbXBfbG4xOworIAl1MzIgaW5kZXg7CisgCXU4IHR5cGU7CisgCWludCBleWVfc3JjOworQEAgLTg3OCw2ICs4OTEsMzYgQEAgc3RhdGljIHZvaWQgcGh5X3YyX2JhbmtzX2luaXQoc3RydWN0IG10a190cGh5ICp0cGh5LAorIAl9CisgfQorIAorK3N0YXRpYyB2b2lkIHBoeV92NF9iYW5rc19pbml0KHN0cnVjdCBtdGtfdHBoeSAqdHBoeSwKKysJCQkgICAgICBzdHJ1Y3QgbXRrX3BoeV9pbnN0YW5jZSAqaW5zdGFuY2UpCisreworKwlzdHJ1Y3QgdTJwaHlfYmFua3MgKnUyX2JhbmtzID0gJmluc3RhbmNlLT51Ml9iYW5rczsKKysJc3RydWN0IHUzcGh5X2JhbmtzICp1M19iYW5rcyA9ICZpbnN0YW5jZS0+dTNfYmFua3M7CisrCisrCXN3aXRjaCAoaW5zdGFuY2UtPnR5cGUpIHsKKysJY2FzZSBQSFlfVFlQRV9VU0IyOgorKwkJdTJfYmFua3MtPm1pc2MgPSBpbnN0YW5jZS0+cG9ydF9iYXNlICsgU1NVU0JfU0lGU0xWX1YyX01JU0M7CisrCQl1Ml9iYW5rcy0+Zm1yZWcgPSBpbnN0YW5jZS0+cG9ydF9iYXNlICsgU1NVU0JfU0lGU0xWX1YyX1UyRlJFUTsKKysJCXUyX2JhbmtzLT5jb20gPSBpbnN0YW5jZS0+cG9ydF9iYXNlICsgU1NVU0JfU0lGU0xWX1YyX1UyUEhZX0NPTTsKKysJCWJyZWFrOworKwljYXNlIFBIWV9UWVBFX1VTQjM6CisrCQl1M19iYW5rcy0+c3BsbGMgPSBpbnN0YW5jZS0+cG9ydF9iYXNlICsgU1NVU0JfU0lGU0xWX1YyX1NQTExDOworKwkJdTNfYmFua3MtPmNoaXAgPSBpbnN0YW5jZS0+cG9ydF9iYXNlICsgU1NVU0JfU0lGU0xWX1YyX0NISVA7CisrCQl1M19iYW5rcy0+cGh5ZCA9IGluc3RhbmNlLT5wb3J0X2Jhc2UgKyBTU1VTQl9TSUZTTFZfVjJfVTNQSFlEOworKwkJdTNfYmFua3MtPnBoeWEgPSBpbnN0YW5jZS0+cG9ydF9iYXNlICsgU1NVU0JfU0lGU0xWX1YyX1UzUEhZQTsKKysJCWJyZWFrOworKwljYXNlIFBIWV9UWVBFX1BDSUU6CisrCQl1M19iYW5rcy0+c3BsbGMgPSBpbnN0YW5jZS0+cG9ydF9iYXNlICsgU1NVU0JfU0lGU0xWX1Y0X1NQTExDOworKwkJdTNfYmFua3MtPmNoaXAgPSBpbnN0YW5jZS0+cG9ydF9iYXNlICsgU1NVU0JfU0lGU0xWX1Y0X0NISVA7CisrCQl1M19iYW5rcy0+cGh5ZCA9IGluc3RhbmNlLT5wb3J0X2Jhc2UgKyBTU1VTQl9TSUZTTFZfVjRfVTNQSFlEOworKwkJdTNfYmFua3MtPnBoeWEgPSBpbnN0YW5jZS0+cG9ydF9iYXNlICsgU1NVU0JfU0lGU0xWX1Y0X1UzUEhZQTsKKysJCWJyZWFrOworKwlkZWZhdWx0OgorKwkJZGV2X2Vycih0cGh5LT5kZXYsICJpbmNvbXBhdGlibGUgUEhZIHR5cGVcbiIpOworKwkJcmV0dXJuOworKwl9CisrfQorKworIHN0YXRpYyB2b2lkIHBoeV9wYXJzZV9wcm9wZXJ0eShzdHJ1Y3QgbXRrX3RwaHkgKnRwaHksCisgCQkJCXN0cnVjdCBtdGtfcGh5X2luc3RhbmNlICppbnN0YW5jZSkKKyB7CitAQCAtMTAwMiw2ICsxMDQ1LDQwIEBAIHN0YXRpYyBpbnQgcGh5X2VmdXNlX2dldChzdHJ1Y3QgbXRrX3RwaHkgKnRwaHksIHN0cnVjdCBtdGtfcGh5X2luc3RhbmNlICppbnN0YW5jCisgCQlkZXZfaW5mbyhkZXYsICJ1MyBlZnVzZSAtIGludHIgJXgsIHJ4X2ltcCAleCwgdHhfaW1wICV4XG4iLAorIAkJCSBpbnN0YW5jZS0+ZWZ1c2VfaW50ciwgaW5zdGFuY2UtPmVmdXNlX3J4X2ltcCwKKyAJCQkgaW5zdGFuY2UtPmVmdXNlX3R4X2ltcCk7CisrCisrCQlpZiAodHBoeS0+cGRhdGEtPnZlcnNpb24gIT0gTVRLX1BIWV9WNCkKKysJCQlicmVhazsKKysKKysJCXJldCA9IG52bWVtX2NlbGxfcmVhZF92YXJpYWJsZV9sZV91MzIoZGV2LCAiaW50cl9sbjEiLCAmaW5zdGFuY2UtPmVmdXNlX2ludHJfbG4xKTsKKysJCWlmIChyZXQpIHsKKysJCQlkZXZfZXJyKGRldiwgImZhaWwgdG8gZ2V0IHUzIGxhbmUxIGludHIgZWZ1c2UsICVkXG4iLCByZXQpOworKwkJCWJyZWFrOworKwkJfQorKworKwkJcmV0ID0gbnZtZW1fY2VsbF9yZWFkX3ZhcmlhYmxlX2xlX3UzMihkZXYsICJyeF9pbXBfbG4xIiwgJmluc3RhbmNlLT5lZnVzZV9yeF9pbXBfbG4xKTsKKysJCWlmIChyZXQpIHsKKysJCQlkZXZfZXJyKGRldiwgImZhaWwgdG8gZ2V0IHUzIGxhbmUxIHJ4X2ltcCBlZnVzZSwgJWRcbiIsIHJldCk7CisrCQkJYnJlYWs7CisrCQl9CisrCisrCQlyZXQgPSBudm1lbV9jZWxsX3JlYWRfdmFyaWFibGVfbGVfdTMyKGRldiwgInR4X2ltcF9sbjEiLCAmaW5zdGFuY2UtPmVmdXNlX3R4X2ltcF9sbjEpOworKwkJaWYgKHJldCkgeworKwkJCWRldl9lcnIoZGV2LCAiZmFpbCB0byBnZXQgdTMgbGFuZTEgdHhfaW1wIGVmdXNlLCAlZFxuIiwgcmV0KTsKKysJCQlicmVhazsKKysJCX0KKysKKysJCS8qIG5vIGVmdXNlLCBpZ25vcmUgaXQgKi8KKysJCWlmICghaW5zdGFuY2UtPmVmdXNlX2ludHJfbG4xICYmCisrCQkgICAgIWluc3RhbmNlLT5lZnVzZV9yeF9pbXBfbG4xICYmCisrCQkgICAgIWluc3RhbmNlLT5lZnVzZV90eF9pbXBfbG4xKSB7CisrCQkJZGV2X3dhcm4oZGV2LCAibm8gdTMgbGFuZTEgZWZ1c2UsIGJ1dCBkdHMgZW5hYmxlIGl0XG4iKTsKKysJCQlpbnN0YW5jZS0+ZWZ1c2Vfc3dfZW4gPSAwOworKwkJCWJyZWFrOworKwkJfQorKworKwkJZGV2X2luZm8oZGV2LCAidTMgbGFuZTEgZWZ1c2UgLSBpbnRyICV4LCByeF9pbXAgJXgsIHR4X2ltcCAleFxuIiwKKysJCQkgaW5zdGFuY2UtPmVmdXNlX2ludHJfbG4xLCBpbnN0YW5jZS0+ZWZ1c2VfcnhfaW1wX2xuMSwKKysJCQkgaW5zdGFuY2UtPmVmdXNlX3R4X2ltcF9sbjEpOworIAkJYnJlYWs7CisgCWRlZmF1bHQ6CisgCQlkZXZfZXJyKGRldiwgIm5vIHN3IGVmdXNlIGZvciB0eXBlICVkXG4iLCBpbnN0YW5jZS0+dHlwZSk7CitAQCAtMTAzNSw2ICsxMTEyLDMxIEBAIHN0YXRpYyB2b2lkIHBoeV9lZnVzZV9zZXQoc3RydWN0IG10a19waHlfaW5zdGFuY2UgKmluc3RhbmNlKQorIAorIAkJYnJlYWs7CisgCWNhc2UgUEhZX1RZUEVfVVNCMzoKKysJCXRtcCA9IHJlYWRsKHUzX2JhbmtzLT5waHlkICsgVTNQX1UzX1BIWURfUlNWKTsKKysJCXRtcCB8PSBQM0RfUkdfRUZVU0VfQVVUT19MT0FEX0RJUzsKKysJCXdyaXRlbCh0bXAsIHUzX2JhbmtzLT5waHlkICsgVTNQX1UzX1BIWURfUlNWKTsKKysKKysJCXRtcCA9IHJlYWRsKHUzX2JhbmtzLT5waHlkICsgVTNQX1UzX1BIWURfSU1QQ0FMMCk7CisrCQl0bXAgJj0gflAzRF9SR19UWF9JTVBFTDsKKysJCXRtcCB8PSBQM0RfUkdfVFhfSU1QRUxfVkFMKGluc3RhbmNlLT5lZnVzZV90eF9pbXApOworKwkJdG1wIHw9IFAzRF9SR19GT1JDRV9UWF9JTVBFTDsKKysJCXdyaXRlbCh0bXAsIHUzX2JhbmtzLT5waHlkICsgVTNQX1UzX1BIWURfSU1QQ0FMMCk7CisrCisrCQl0bXAgPSByZWFkbCh1M19iYW5rcy0+cGh5ZCArIFUzUF9VM19QSFlEX0lNUENBTDEpOworKwkJdG1wICY9IH5QM0RfUkdfUlhfSU1QRUw7CisrCQl0bXAgfD0gUDNEX1JHX1JYX0lNUEVMX1ZBTChpbnN0YW5jZS0+ZWZ1c2VfcnhfaW1wKTsKKysJCXRtcCB8PSBQM0RfUkdfRk9SQ0VfUlhfSU1QRUw7CisrCQl3cml0ZWwodG1wLCB1M19iYW5rcy0+cGh5ZCArIFUzUF9VM19QSFlEX0lNUENBTDEpOworKworKwkJdG1wID0gcmVhZGwodTNfYmFua3MtPnBoeWEgKyBVM1BfVTNfUEhZQV9SRUcwKTsKKysJCXRtcCAmPSB+UDNBX1JHX0lFWFRfSU5UUjsKKysJCXRtcCB8PSBQM0FfUkdfSUVYVF9JTlRSX1ZBTChpbnN0YW5jZS0+ZWZ1c2VfaW50cik7CisrCQl3cml0ZWwodG1wLCB1M19iYW5rcy0+cGh5YSArIFUzUF9VM19QSFlBX1JFRzApOworKwkJcHJfZXJyKCIlcyBzZXQgZWZ1c2UsIHR4X2ltcCAleCwgcnhfaW1wICV4IGludHIgJXhcbiIsCisrCQkJX19mdW5jX18sIGluc3RhbmNlLT5lZnVzZV90eF9pbXAsCisrCQkJaW5zdGFuY2UtPmVmdXNlX3J4X2ltcCwgaW5zdGFuY2UtPmVmdXNlX2ludHIpOworKworKwkJYnJlYWs7CisgCWNhc2UgUEhZX1RZUEVfUENJRToKKyAJCXRtcCA9IHJlYWRsKHUzX2JhbmtzLT5waHlkICsgVTNQX1UzX1BIWURfUlNWKTsKKyAJCXRtcCB8PSBQM0RfUkdfRUZVU0VfQVVUT19MT0FEX0RJUzsKK0BAIC0xMDU5LDYgKzExNjEsMzUgQEAgc3RhdGljIHZvaWQgcGh5X2VmdXNlX3NldChzdHJ1Y3QgbXRrX3BoeV9pbnN0YW5jZSAqaW5zdGFuY2UpCisgCQlwcl9lcnIoIiVzIHNldCBlZnVzZSwgdHhfaW1wICV4LCByeF9pbXAgJXggaW50ciAleFxuIiwKKyAJCQlfX2Z1bmNfXywgaW5zdGFuY2UtPmVmdXNlX3R4X2ltcCwKKyAJCQlpbnN0YW5jZS0+ZWZ1c2VfcnhfaW1wLCBpbnN0YW5jZS0+ZWZ1c2VfaW50cik7CisrCisrCQlpZiAoIWluc3RhbmNlLT5lZnVzZV9pbnRyX2xuMSAmJgorKwkJICAgICFpbnN0YW5jZS0+ZWZ1c2VfcnhfaW1wX2xuMSAmJgorKwkJICAgICFpbnN0YW5jZS0+ZWZ1c2VfdHhfaW1wX2xuMSkKKysJCQlicmVhazsKKysKKysJCXRtcCA9IHJlYWRsKHUzX2JhbmtzLT5waHlkICsgU1NVU0JfTE4xX09GRlNFVCArIFUzUF9VM19QSFlEX1JTVik7CisrCQl0bXAgfD0gUDNEX1JHX0VGVVNFX0FVVE9fTE9BRF9ESVM7CisrCQl3cml0ZWwodG1wLCB1M19iYW5rcy0+cGh5ZCArIFNTVVNCX0xOMV9PRkZTRVQgKyBVM1BfVTNfUEhZRF9SU1YpOworKworKwkJdG1wID0gcmVhZGwodTNfYmFua3MtPnBoeWQgKyBTU1VTQl9MTjFfT0ZGU0VUICsgVTNQX1UzX1BIWURfSU1QQ0FMMCk7CisrCQl0bXAgJj0gflAzRF9SR19UWF9JTVBFTDsKKysJCXRtcCB8PSBQM0RfUkdfVFhfSU1QRUxfVkFMKGluc3RhbmNlLT5lZnVzZV90eF9pbXBfbG4xKTsKKysJCXRtcCB8PSBQM0RfUkdfRk9SQ0VfVFhfSU1QRUw7CisrCQl3cml0ZWwodG1wLCB1M19iYW5rcy0+cGh5ZCArIFNTVVNCX0xOMV9PRkZTRVQgKyBVM1BfVTNfUEhZRF9JTVBDQUwwKTsKKysKKysJCXRtcCA9IHJlYWRsKHUzX2JhbmtzLT5waHlkICsgU1NVU0JfTE4xX09GRlNFVCArIFUzUF9VM19QSFlEX0lNUENBTDEpOworKwkJdG1wICY9IH5QM0RfUkdfUlhfSU1QRUw7CisrCQl0bXAgfD0gUDNEX1JHX1JYX0lNUEVMX1ZBTChpbnN0YW5jZS0+ZWZ1c2VfcnhfaW1wX2xuMSk7CisrCQl0bXAgfD0gUDNEX1JHX0ZPUkNFX1JYX0lNUEVMOworKwkJd3JpdGVsKHRtcCwgdTNfYmFua3MtPnBoeWQgKyBTU1VTQl9MTjFfT0ZGU0VUICsgVTNQX1UzX1BIWURfSU1QQ0FMMSk7CisrCisrCQl0bXAgPSByZWFkbCh1M19iYW5rcy0+cGh5YSArIFNTVVNCX0xOMV9PRkZTRVQgKyBVM1BfVTNfUEhZQV9SRUcwKTsKKysJCXRtcCAmPSB+UDNBX1JHX0lFWFRfSU5UUjsKKysJCXRtcCB8PSBQM0FfUkdfSUVYVF9JTlRSX1ZBTChpbnN0YW5jZS0+ZWZ1c2VfaW50cl9sbjEpOworKwkJd3JpdGVsKHRtcCwgdTNfYmFua3MtPnBoeWEgKyBTU1VTQl9MTjFfT0ZGU0VUICsgVTNQX1UzX1BIWUFfUkVHMCk7CisrCQlwcl9lcnIoIiVzIHNldCBMTjEgZWZ1c2UsIHR4X2ltcCAleCwgcnhfaW1wICV4IGludHIgJXhcbiIsCisrCQkJX19mdW5jX18sIGluc3RhbmNlLT5lZnVzZV90eF9pbXBfbG4xLAorKwkJCWluc3RhbmNlLT5lZnVzZV9yeF9pbXBfbG4xLCBpbnN0YW5jZS0+ZWZ1c2VfaW50cl9sbjEpOworIAkJYnJlYWs7CisgCWRlZmF1bHQ6CisgCQlkZXZfd2FybihkZXYsICJubyBzdyBlZnVzZSBmb3IgdHlwZSAlZFxuIiwgaW5zdGFuY2UtPnR5cGUpOworQEAgLTExOTcsNiArMTMyOCw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5ICptdGtfcGh5X3hsYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKKyAJCXBoeV92MV9iYW5rc19pbml0KHRwaHksIGluc3RhbmNlKTsKKyAJfSBlbHNlIGlmICh0cGh5LT5wZGF0YS0+dmVyc2lvbiA9PSBNVEtfUEhZX1YyKSB7CisgCQlwaHlfdjJfYmFua3NfaW5pdCh0cGh5LCBpbnN0YW5jZSk7CisrCX0gZWxzZSBpZiAodHBoeS0+cGRhdGEtPnZlcnNpb24gPT0gTVRLX1BIWV9WNCkgeworKwkJcGh5X3Y0X2JhbmtzX2luaXQodHBoeSwgaW5zdGFuY2UpOworIAl9IGVsc2UgeworIAkJZGV2X2VycihkZXYsICJwaHkgdmVyc2lvbiBpcyBub3Qgc3VwcG9ydGVkXG4iKTsKKyAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworQEAgLTEyNDcsMTIgKzEzODAsMTkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfcGh5X3BkYXRhIG10ODE5NV9wZGF0YSA9IHsKKyAJLnZlcnNpb24gPSBNVEtfUEhZX1YzLAorIH07CisgCisrc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfcGh5X3BkYXRhIHRwaHlfdjRfcGRhdGEgPSB7CisrCS5hdm9pZF9yeF9zZW5fZGVncmFkYXRpb24gPSBmYWxzZSwKKysJLnN3X2VmdXNlX3N1cHBvcnRlZCA9IHRydWUsCisrCS52ZXJzaW9uID0gTVRLX1BIWV9WNCwKKyt9OworKworIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a190cGh5X2lkX3RhYmxlW10gPSB7CisgCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQyNzAxLXUzcGh5IiwgLmRhdGEgPSAmdHBoeV92MV9wZGF0YSB9LAorIAl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10MjcxMi11M3BoeSIsIC5kYXRhID0gJnRwaHlfdjJfcGRhdGEgfSwKKyAJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtdTNwaHkiLCAuZGF0YSA9ICZtdDgxNzNfcGRhdGEgfSwKKyAJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxnZW5lcmljLXRwaHktdjEiLCAuZGF0YSA9ICZ0cGh5X3YxX3BkYXRhIH0sCisgCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssZ2VuZXJpYy10cGh5LXYyIiwgLmRhdGEgPSAmdHBoeV92Ml9wZGF0YSB9LAorKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLGdlbmVyaWMtdHBoeS12NCIsIC5kYXRhID0gJnRwaHlfdjRfcGRhdGEgfSwKKyAJeyB9LAorIH07CisgTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXRrX3RwaHlfaWRfdGFibGUpOworLS0gCisyLjE4LjAKKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzgwMDgtcGh5LXBoeS1tdGstdHBoeS1hZGQtYXV0by1sb2FkLXZhbGlkLWNoZWNrLW1lY2hhbmlzbS5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC84MDA4LXBoeS1waHktbXRrLXRwaHktYWRkLWF1dG8tbG9hZC12YWxpZC1jaGVjay1tZWNoYW5pc20ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIyM2ZiNgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC84MDA4LXBoeS1waHktbXRrLXRwaHktYWRkLWF1dG8tbG9hZC12YWxpZC1jaGVjay1tZWNoYW5pc20ucGF0Y2gKQEAgLTAsMCArMSwxNTMgQEAKK0Zyb20gMWQ1ODE5ZTkwZjJlZjZkZWFkMTE4MDk3NDQzNzJhOTg2MzIyN2E5MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFpoYW55b25nIFdhbmcgPHpoYW55b25nLndhbmdAbWVkaWF0ZWsuY29tPgorRGF0ZTogVHVlLCAyNSBKYW4gMjAyMiAxOTowMzozNCArMDgwMAorU3ViamVjdDogW1BBVENIIDUvNV0gcGh5OiBwaHktbXRrLXRwaHk6IGFkZCBhdXRvLWxvYWQtdmFsaWQgY2hlY2sgbWVjaGFuaXNtCisgc3VwcG9ydAorCithZGQgYXV0by1sb2FkLXZhbGlkIGNoZWNrIG1lY2hhbmlzbSBzdXBwb3J0CisKK1NpZ25lZC1vZmYtYnk6IFpoYW55b25nIFdhbmcgPHpoYW55b25nLndhbmdAbWVkaWF0ZWsuY29tPgorLS0tCisgZHJpdmVycy9waHkvbWVkaWF0ZWsvcGh5LW10ay10cGh5LmMgfCA2NyArKysrKysrKysrKysrKysrKysrKysrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCA2NCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvbWVkaWF0ZWsvcGh5LW10ay10cGh5LmMgYi9kcml2ZXJzL3BoeS9tZWRpYXRlay9waHktbXRrLXRwaHkuYworaW5kZXggNTlkNmFjMy4uNGFkYzUwNSAxMDA2NDQKKy0tLSBhL2RyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstdHBoeS5jCisrKysgYi9kcml2ZXJzL3BoeS9tZWRpYXRlay9waHktbXRrLXRwaHkuYworQEAgLTM0NSw5ICszNDUsMTMgQEAgc3RydWN0IG10a19waHlfaW5zdGFuY2UgeworIAl9OworIAlzdHJ1Y3QgY2xrICpyZWZfY2xrOwkvKiByZWZlcmVuY2UgY2xvY2sgb2YgYW5vbG9nIHBoeSAqLworIAl1MzIgZWZ1c2Vfc3dfZW47CisrCWJvb2wgZWZ1c2VfYWx2X2VuOworKwl1MzIgZWZ1c2VfYXV0b2xvYWR2YWxpZDsKKyAJdTMyIGVmdXNlX2ludHI7CisgCXUzMiBlZnVzZV90eF9pbXA7CisgCXUzMiBlZnVzZV9yeF9pbXA7CisrCWJvb2wgZWZ1c2VfYWx2X2xuMV9lbjsKKysJdTMyIGVmdXNlX2xuMV9hdXRvbG9hZHZhbGlkOworIAl1MzIgZWZ1c2VfaW50cl9sbjE7CisgCXUzMiBlZnVzZV90eF9pbXBfbG4xOworIAl1MzIgZWZ1c2VfcnhfaW1wX2xuMTsKK0BAIC05ODAsNiArOTg0LDcgQEAgc3RhdGljIGludCBwaHlfZWZ1c2VfZ2V0KHN0cnVjdCBtdGtfdHBoeSAqdHBoeSwgc3RydWN0IG10a19waHlfaW5zdGFuY2UgKmluc3RhbmMKKyB7CisgCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpbnN0YW5jZS0+cGh5LT5kZXY7CisgCWludCByZXQgPSAwOworKwlib29sIGFsdiA9IGZhbHNlOworIAorIAlkZXZfZXJyKGRldiwgInRyeSB0byBnZXQgc3cgZWZ1c2VcbiIpOworIAorQEAgLTk5OCw2ICsxMDAzLDIwIEBAIHN0YXRpYyBpbnQgcGh5X2VmdXNlX2dldChzdHJ1Y3QgbXRrX3RwaHkgKnRwaHksIHN0cnVjdCBtdGtfcGh5X2luc3RhbmNlICppbnN0YW5jCisgCisgCXN3aXRjaCAoaW5zdGFuY2UtPnR5cGUpIHsKKyAJY2FzZSBQSFlfVFlQRV9VU0IyOgorKwkJYWx2ID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKGRldi0+b2Zfbm9kZSwgImF1dG9fbG9hZF92YWxpZCIpOworKwkJaWYgKGFsdikgeworKwkJCWluc3RhbmNlLT5lZnVzZV9hbHZfZW4gPSBhbHY7CisrCQkJcmV0ID0gbnZtZW1fY2VsbF9yZWFkX3ZhcmlhYmxlX2xlX3UzMihkZXYsICJhdXRvX2xvYWRfdmFsaWQiLAorKwkJCQkJCQkmaW5zdGFuY2UtPmVmdXNlX2F1dG9sb2FkdmFsaWQpOworKwkJCWlmIChyZXQpIHsKKysJCQkJZGV2X2VycihkZXYsICJmYWlsIHRvIGdldCB1MiBhbHYgZWZ1c2UsICVkXG4iLCByZXQpOworKwkJCQlicmVhazsKKysJCQl9CisrCQkJZGV2X2luZm8oZGV2LAorKwkJCQkidTIgYXV0byBsb2FkIHZhbGlkIGVmdXNlOiBFTkFCTEUgd2l0aCB2YWx1ZTogJXVcbiIsCisrCQkJCWluc3RhbmNlLT5lZnVzZV9hdXRvbG9hZHZhbGlkKTsKKysJCX0KKysKKyAJCXJldCA9IG52bWVtX2NlbGxfcmVhZF92YXJpYWJsZV9sZV91MzIoZGV2LCAiaW50ciIsICZpbnN0YW5jZS0+ZWZ1c2VfaW50cik7CisgCQlpZiAocmV0KSB7CisgCQkJZGV2X2VycihkZXYsICJmYWlsIHRvIGdldCB1MiBpbnRyIGVmdXNlLCAlZFxuIiwgcmV0KTsKK0BAIC0xMDE1LDYgKzEwMzQsMjAgQEAgc3RhdGljIGludCBwaHlfZWZ1c2VfZ2V0KHN0cnVjdCBtdGtfdHBoeSAqdHBoeSwgc3RydWN0IG10a19waHlfaW5zdGFuY2UgKmluc3RhbmMKKyAJCWJyZWFrOworIAljYXNlIFBIWV9UWVBFX1VTQjM6CisgCWNhc2UgUEhZX1RZUEVfUENJRToKKysJCWFsdiA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYtPm9mX25vZGUsICJhdXRvX2xvYWRfdmFsaWQiKTsKKysJCWlmIChhbHYpIHsKKysJCQlpbnN0YW5jZS0+ZWZ1c2VfYWx2X2VuID0gYWx2OworKwkJCXJldCA9IG52bWVtX2NlbGxfcmVhZF92YXJpYWJsZV9sZV91MzIoZGV2LCAiYXV0b19sb2FkX3ZhbGlkIiwKKysJCQkJCQkJJmluc3RhbmNlLT5lZnVzZV9hdXRvbG9hZHZhbGlkKTsKKysJCQlpZiAocmV0KSB7CisrCQkJCWRldl9lcnIoZGV2LCAiZmFpbCB0byBnZXQgdTMocGNlaSkgYWx2IGVmdXNlLCAlZFxuIiwgcmV0KTsKKysJCQkJYnJlYWs7CisrCQkJfQorKwkJCWRldl9pbmZvKGRldiwKKysJCQkJInUzIGF1dG8gbG9hZCB2YWxpZCBlZnVzZTogRU5BQkxFIHdpdGggdmFsdWU6ICV1XG4iLAorKwkJCQlpbnN0YW5jZS0+ZWZ1c2VfYXV0b2xvYWR2YWxpZCk7CisrCQl9CisrCisgCQlyZXQgPSBudm1lbV9jZWxsX3JlYWRfdmFyaWFibGVfbGVfdTMyKGRldiwgImludHIiLCAmaW5zdGFuY2UtPmVmdXNlX2ludHIpOworIAkJaWYgKHJldCkgeworIAkJCWRldl9lcnIoZGV2LCAiZmFpbCB0byBnZXQgdTMgaW50ciBlZnVzZSwgJWRcbiIsIHJldCk7CitAQCAtMTA0OSw2ICsxMDgyLDIwIEBAIHN0YXRpYyBpbnQgcGh5X2VmdXNlX2dldChzdHJ1Y3QgbXRrX3RwaHkgKnRwaHksIHN0cnVjdCBtdGtfcGh5X2luc3RhbmNlICppbnN0YW5jCisgCQlpZiAodHBoeS0+cGRhdGEtPnZlcnNpb24gIT0gTVRLX1BIWV9WNCkKKyAJCQlicmVhazsKKyAKKysJCWFsdiA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYtPm9mX25vZGUsICJhdXRvX2xvYWRfdmFsaWRfbG4xIik7CisrCQlpZiAoYWx2KSB7CisrCQkJaW5zdGFuY2UtPmVmdXNlX2Fsdl9sbjFfZW4gPSBhbHY7CisrCQkJcmV0ID0gbnZtZW1fY2VsbF9yZWFkX3ZhcmlhYmxlX2xlX3UzMihkZXYsICJhdXRvX2xvYWRfdmFsaWRfbG4xIiwKKysJCQkJCQkJJmluc3RhbmNlLT5lZnVzZV9sbjFfYXV0b2xvYWR2YWxpZCk7CisrCQkJaWYgKHJldCkgeworKwkJCQlkZXZfZXJyKGRldiwgImZhaWwgdG8gZ2V0IHBjaWUgYXV0b19sb2FkX3ZhbGlkIGVmdXNlLCAlZFxuIiwgcmV0KTsKKysJCQkJYnJlYWs7CisrCQkJfQorKwkJCWRldl9pbmZvKGRldiwKKysJCQkJInBjaWUgYXV0byBsb2FkIHZhbGlkIGVmdXNlOiBFTkFCTEUgd2l0aCB2YWx1ZTogJXVcbiIsCisrCQkJCWluc3RhbmNlLT5lZnVzZV9sbjFfYXV0b2xvYWR2YWxpZCk7CisrCQl9CisrCisgCQlyZXQgPSBudm1lbV9jZWxsX3JlYWRfdmFyaWFibGVfbGVfdTMyKGRldiwgImludHJfbG4xIiwgJmluc3RhbmNlLT5lZnVzZV9pbnRyX2xuMSk7CisgCQlpZiAocmV0KSB7CisgCQkJZGV2X2VycihkZXYsICJmYWlsIHRvIGdldCB1MyBsYW5lMSBpbnRyIGVmdXNlLCAlZFxuIiwgcmV0KTsKK0BAIC0xMTAwLDYgKzExNDcsMTAgQEAgc3RhdGljIHZvaWQgcGh5X2VmdXNlX3NldChzdHJ1Y3QgbXRrX3BoeV9pbnN0YW5jZSAqaW5zdGFuY2UpCisgCisgCXN3aXRjaCAoaW5zdGFuY2UtPnR5cGUpIHsKKyAJY2FzZSBQSFlfVFlQRV9VU0IyOgorKwkJaWYgKGluc3RhbmNlLT5lZnVzZV9hbHZfZW4gJiYKKysJCSAgICBpbnN0YW5jZS0+ZWZ1c2VfYXV0b2xvYWR2YWxpZCA9PSAxKQorKwkJCWJyZWFrOworKworIAkJdG1wID0gcmVhZGwodTJfYmFua3MtPm1pc2MgKyBVM1BfTUlTQ19SRUcxKTsKKyAJCXRtcCB8PSBNUjFfRUZVU0VfQVVUT19MT0FEX0RJUzsKKyAJCXdyaXRlbCh0bXAsIHUyX2JhbmtzLT5taXNjICsgVTNQX01JU0NfUkVHMSk7CitAQCAtMTExMiw2ICsxMTYzLDEwIEBAIHN0YXRpYyB2b2lkIHBoeV9lZnVzZV9zZXQoc3RydWN0IG10a19waHlfaW5zdGFuY2UgKmluc3RhbmNlKQorIAorIAkJYnJlYWs7CisgCWNhc2UgUEhZX1RZUEVfVVNCMzoKKysJCWlmIChpbnN0YW5jZS0+ZWZ1c2VfYWx2X2VuICYmCisrCQkgICAgaW5zdGFuY2UtPmVmdXNlX2F1dG9sb2FkdmFsaWQgPT0gMSkKKysJCQlicmVhazsKKysKKyAJCXRtcCA9IHJlYWRsKHUzX2JhbmtzLT5waHlkICsgVTNQX1UzX1BIWURfUlNWKTsKKyAJCXRtcCB8PSBQM0RfUkdfRUZVU0VfQVVUT19MT0FEX0RJUzsKKyAJCXdyaXRlbCh0bXAsIHUzX2JhbmtzLT5waHlkICsgVTNQX1UzX1BIWURfUlNWKTsKK0BAIC0xMTM4LDYgKzExOTMsMTAgQEAgc3RhdGljIHZvaWQgcGh5X2VmdXNlX3NldChzdHJ1Y3QgbXRrX3BoeV9pbnN0YW5jZSAqaW5zdGFuY2UpCisgCisgCQlicmVhazsKKyAJY2FzZSBQSFlfVFlQRV9QQ0lFOgorKwkJaWYgKGluc3RhbmNlLT5lZnVzZV9hbHZfZW4gJiYKKysJCSAgICBpbnN0YW5jZS0+ZWZ1c2VfYXV0b2xvYWR2YWxpZCA9PSAxKQorKwkJCWJyZWFrOworKworIAkJdG1wID0gcmVhZGwodTNfYmFua3MtPnBoeWQgKyBVM1BfVTNfUEhZRF9SU1YpOworIAkJdG1wIHw9IFAzRF9SR19FRlVTRV9BVVRPX0xPQURfRElTOworIAkJd3JpdGVsKHRtcCwgdTNfYmFua3MtPnBoeWQgKyBVM1BfVTNfUEhZRF9SU1YpOworQEAgLTExNjIsOSArMTIyMSwxMSBAQCBzdGF0aWMgdm9pZCBwaHlfZWZ1c2Vfc2V0KHN0cnVjdCBtdGtfcGh5X2luc3RhbmNlICppbnN0YW5jZSkKKyAJCQlfX2Z1bmNfXywgaW5zdGFuY2UtPmVmdXNlX3R4X2ltcCwKKyAJCQlpbnN0YW5jZS0+ZWZ1c2VfcnhfaW1wLCBpbnN0YW5jZS0+ZWZ1c2VfaW50cik7CisgCistCQlpZiAoIWluc3RhbmNlLT5lZnVzZV9pbnRyX2xuMSAmJgorLQkJICAgICFpbnN0YW5jZS0+ZWZ1c2VfcnhfaW1wX2xuMSAmJgorLQkJICAgICFpbnN0YW5jZS0+ZWZ1c2VfdHhfaW1wX2xuMSkKKysJCWlmICgoIWluc3RhbmNlLT5lZnVzZV9pbnRyX2xuMSAmJgorKwkJICAgICAhaW5zdGFuY2UtPmVmdXNlX3J4X2ltcF9sbjEgJiYKKysJCSAgICAgIWluc3RhbmNlLT5lZnVzZV90eF9pbXBfbG4xKSB8fAorKwkJICAgIChpbnN0YW5jZS0+ZWZ1c2VfYWx2X2xuMV9lbiAmJgorKwkJICAgICBpbnN0YW5jZS0+ZWZ1c2VfbG4xX2F1dG9sb2FkdmFsaWQgPT0gMSkpCisgCQkJYnJlYWs7CisgCisgCQl0bXAgPSByZWFkbCh1M19iYW5rcy0+cGh5ZCArIFNTVVNCX0xOMV9PRkZTRVQgKyBVM1BfVTNfUEhZRF9SU1YpOworLS0gCisyLjE4LjAKKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzkwMDEtUEFUQ0gtMS0yLXhIQ0ktTVQ3OTg2LVVTQi0yLjAtVVNCSUYtY29tcGxpYW5jZS10b29sa2l0LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzkwMDEtUEFUQ0gtMS0yLXhIQ0ktTVQ3OTg2LVVTQi0yLjAtVVNCSUYtY29tcGxpYW5jZS10b29sa2l0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczOGQ5YjIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvOTAwMS1QQVRDSC0xLTIteEhDSS1NVDc5ODYtVVNCLTIuMC1VU0JJRi1jb21wbGlhbmNlLXRvb2xraXQucGF0Y2gKQEAgLTAsMCArMSwxMzQgQEAKK0Zyb20gYjQwNDhiNWVmZDFhYzM5Zjg1ZDg2ZGVkYmY1NGE5YjYxNGQxN2Q2NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFpoYW55b25nIFdhbmcgPHpoYW55b25nLndhbmdAbWVkaWF0ZWsuY29tPgorRGF0ZTogVGh1LCAyNyBNYXkgMjAyMSAxMTo0NDoxNyArMDgwMAorU3ViamVjdDogW1BBVENIIDEvMl0geEhDSTogTVQ3OTg2IFVTQiAyLjAgVVNCSUYgY29tcGxpYW5jZSB0b29sa2l0CisKK01UNzk4NiBVU0IgMi4wIFVTQklGIGNvbXBsaWFuY2UgdG9vbGtpdAorCitTaWduZWQtb2ZmLWJ5OiBaaGFueW9uZyBXYW5nIDx6aGFueW9uZy53YW5nQG1lZGlhdGVrLmNvbT4KKy0tLQorIGRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZyAgICB8IDkgKysrKysrKysrCisgZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZSAgIHwgOCArKysrKysrKworIGRyaXZlcnMvdXNiL2hvc3QveGhjaS1tdGsuYyB8IDUgKysrKy0KKyBkcml2ZXJzL3VzYi9ob3N0L3hoY2ktbXRrLmggfCA3ICsrKysrKysKKyBkcml2ZXJzL3VzYi9ob3N0L3hoY2kuYyAgICAgfCAyICstCisgZHJpdmVycy91c2IvaG9zdC94aGNpLmggICAgIHwgMSArCisgNiBmaWxlcyBjaGFuZ2VkLCAzMCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnIGIvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnCitpbmRleCA3OWIyZTc5ZGRkZDAuLjEyYjFiZjlhYTA0MyAxMDA2NDQKKy0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZworKysrIGIvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnCitAQCAtNjksNiArNjksMTUgQEAgY29uZmlnIFVTQl9YSENJX01USworIAkgIGZvdW5kIGluIE1lZGlhVGVrIFNvQ3MuCisgCSAgSWYgdW5zdXJlLCBzYXkgTi4KKyAKKytjb25maWcgVVNCX1hIQ0lfTVRLX0RFQlVHRlMKKysJdHJpc3RhdGUgInhIQ0kgREVCVUdGUyBzdXBwb3J0IGZvciBNZWRpYXRlayBNVDY1eHgiCisrCWRlcGVuZHMgb24gVVNCX1hIQ0lfTVRLICYmIERFQlVHX0ZTCisrICAgICAgIGRlZmF1bHQgeQorKwktLS1oZWxwLS0tCisrCSAgU2F5ICdZJyB0byBlbmFibGUgdGhlIGRlYnVnZnMgc3VwcG9ydCBmb3IgdGhlIHhIQ0kgaG9zdCBjb250cm9sbGVyCisrCSAgZm91bmQgaW4gTWVkaWF0ZWsgTVQ2NXh4IFNvQ3MuCisrCSAgSWYgZG9uJ3QgbmVlZCwgc2F5IE4uCisrCisgY29uZmlnIFVTQl9YSENJX01WRUJVCisgCXRyaXN0YXRlICJ4SENJIHN1cHBvcnQgZm9yIE1hcnZlbGwgQXJtYWRhIDM3NS8zOHgvMzd4eCIKKyAJc2VsZWN0IFVTQl9YSENJX1BMQVRGT1JNCitkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGUKK2luZGV4IGIxOTEzNjEyNTdjYy4uNzA0MjM3ODMxYTU4IDEwMDY0NAorLS0tIGEvZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZQorKysrIGIvZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZQorQEAgLTIxLDYgKzIxLDE0IEBAIGVuZGlmCisgCisgaWZuZXEgKCQoQ09ORklHX1VTQl9YSENJX01USyksICkKKyAJeGhjaS1oY2QteSArPSB4aGNpLW10ay1zY2gubworKwl4aGNpLWhjZC0kKENPTkZJR19VU0JfWEhDSV9NVEtfREVCVUdGUykgKz0geGhjaS1tdGstdGVzdC5vCisrCXhoY2ktaGNkLSQoQ09ORklHX1VTQl9YSENJX01US19ERUJVR0ZTKSArPSB4aGNpLW10ay11bnVzdWFsLm8KKysJeGhjaS1oY2QtJChDT05GSUdfVVNCX1hIQ0lfTVRLX0RFQlVHRlMpICs9IHhoY2ktbXRrLWludHItZW4ubworKwl4aGNpLWhjZC0kKENPTkZJR19VU0JfWEhDSV9NVEtfREVCVUdGUykgKz0geGhjaS1tdGstdnJ0LXZyZWYubworKwl4aGNpLWhjZC0kKENPTkZJR19VU0JfWEhDSV9NVEtfREVCVUdGUykgKz0geGhjaS1tdGstdGVybS12cmVmLm8KKysJeGhjaS1oY2QtJChDT05GSUdfVVNCX1hIQ0lfTVRLX0RFQlVHRlMpICs9IHhoY2ktbXRrLWhzdHgtc3JjdHJsLm8KKysJeGhjaS1oY2QtJChDT05GSUdfVVNCX1hIQ0lfTVRLX0RFQlVHRlMpICs9IHhoY2ktbXRrLWRpc2N0aC5vCisrCXhoY2ktaGNkLSQoQ09ORklHX1VTQl9YSENJX01US19ERUJVR0ZTKSArPSB4aGNpLW10ay1jaGdkdC1lbi5vCisgZW5kaWYKKyAKKyB4aGNpLXBsYXQtaGNkLXkgOj0geGhjaS1wbGF0Lm8KK2RpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbXRrLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbXRrLmMKK2luZGV4IDVjMGViMzVjZDAwNy4uOGJkNGM5NWE1NDM1IDEwMDY0NAorLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLW10ay5jCisrKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbXRrLmMKK0BAIC0xOCw5ICsxOCwxMCBAQAorICNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisgI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKy0KKysjaW5jbHVkZSA8bGludXgvdXNiL29mLmg+CisgI2luY2x1ZGUgInhoY2kuaCIKKyAjaW5jbHVkZSAieGhjaS1tdGsuaCIKKysjaW5jbHVkZSAieGhjaS1tdGstdGVzdC5oIgorIAorIC8qIGlwX3B3X2N0cmwwIHJlZ2lzdGVyICovCisgI2RlZmluZSBDVFJMMF9JUF9TV19SU1QJQklUKDApCitAQCAtNTcwLDYgKzU3MSw3IEBAIHN0YXRpYyBpbnQgeGhjaV9tdGtfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKKyAJcmV0ID0gdXNiX2FkZF9oY2QoeGhjaS0+c2hhcmVkX2hjZCwgaXJxLCBJUlFGX1NIQVJFRCk7CisgCWlmIChyZXQpCisgCQlnb3RvIGRlYWxsb2NfdXNiMl9oY2Q7CisrCWhxYV9jcmVhdGVfYXR0cihkZXYpOworIAorIAlyZXR1cm4gMDsKKyAKK0BAIC02MDQsNiArNjA2LDcgQEAgc3RhdGljIGludCB4aGNpX210a19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorIAlzdHJ1Y3QgdXNiX2hjZAkqaGNkID0gbXRrLT5oY2Q7CisgCXN0cnVjdCB4aGNpX2hjZAkqeGhjaSA9IGhjZF90b194aGNpKGhjZCk7CisgCXN0cnVjdCB1c2JfaGNkICAqc2hhcmVkX2hjZCA9IHhoY2ktPnNoYXJlZF9oY2Q7CisrCWhxYV9yZW1vdmVfYXR0cigmZGV2LT5kZXYpOworIAorIAlwbV9ydW50aW1lX3B1dF9ub2lkbGUoJmRldi0+ZGV2KTsKKyAJcG1fcnVudGltZV9kaXNhYmxlKCZkZXYtPmRldik7CitkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLW10ay5oIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLW10ay5oCitpbmRleCA5ODVlN2ExOWY2ZjYuLjE1NDBjNjY3OTlkNyAxMDA2NDQKKy0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tdGsuaAorKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLW10ay5oCitAQCAtMTU4LDYgKzE1OCwxMyBAQCBzdHJ1Y3QgeGhjaV9oY2RfbXRrIHsKKyAJc3RydWN0IHJlZ21hcCAqdXdrOworIAl1MzIgdXdrX3JlZ19iYXNlOworIAl1MzIgdXdrX3ZlcnM7CisrCisrI2lmZGVmIENPTkZJR19VU0JfWEhDSV9NVEtfREVCVUdGUworKwlpbnQgICAgIHRlc3RfbW9kZTsKKysJc2l6ZV90ICBocWFfc2l6ZTsKKysJdTMyICAgICBocWFfcG9zOworKwljaGFyICAgKmhxYV9idWY7CisrI2VuZGlmCisgfTsKKyAKKyBzdGF0aWMgaW5saW5lIHN0cnVjdCB4aGNpX2hjZF9tdGsgKmhjZF90b19tdGsoc3RydWN0IHVzYl9oY2QgKmhjZCkKK2RpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5jCitpbmRleCA0YmI4NTAzNzBiYjYuLjcxMGNjYmU1YTNiOCAxMDA2NDQKKy0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5jCisrKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYworQEAgLTcxMyw3ICs3MTMsNyBAQCBFWFBPUlRfU1lNQk9MX0dQTCh4aGNpX3J1bik7CisgICogRGlzYWJsZSBkZXZpY2UgY29udGV4dHMsIGRpc2FibGUgSVJRcywgYW5kIHF1aWVzY2UgdGhlIEhDLgorICAqIFJlc2V0IHRoZSBIQywgZmluaXNoIGFueSBjb21wbGV0ZWQgdHJhbnNhY3Rpb25zLCBhbmQgY2xlYW51cCBtZW1vcnkuCisgICovCistc3RhdGljIHZvaWQgeGhjaV9zdG9wKHN0cnVjdCB1c2JfaGNkICpoY2QpCisrdm9pZCB4aGNpX3N0b3Aoc3RydWN0IHVzYl9oY2QgKmhjZCkKKyB7CisgCXUzMiB0ZW1wOworIAlzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kgPSBoY2RfdG9feGhjaShoY2QpOworZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5oIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLmgKK2luZGV4IDAyZGYzMDllNDQwOS4uM2FmNDAwMDY4MzI0IDEwMDY0NAorLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmgKKysrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5oCitAQCAtMjA2Nyw2ICsyMDY3LDcgQEAgaW50IHhoY2lfaGFsdChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kpOworIGludCB4aGNpX3N0YXJ0KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSk7CisgaW50IHhoY2lfcmVzZXQoc3RydWN0IHhoY2lfaGNkICp4aGNpKTsKKyBpbnQgeGhjaV9ydW4oc3RydWN0IHVzYl9oY2QgKmhjZCk7Cisrdm9pZCB4aGNpX3N0b3Aoc3RydWN0IHVzYl9oY2QgKmhjZCk7CisgaW50IHhoY2lfZ2VuX3NldHVwKHN0cnVjdCB1c2JfaGNkICpoY2QsIHhoY2lfZ2V0X3F1aXJrc190IGdldF9xdWlya3MpOworIHZvaWQgeGhjaV9zaHV0ZG93bihzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKKyB2b2lkIHhoY2lfaW5pdF9kcml2ZXIoc3RydWN0IGhjX2RyaXZlciAqZHJ2LAorLS0gCisyLjE4LjAKKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzkwMDItUEFUQ0gtMS0xLXVzYi1hZGQtZW1iZWRkZWQtSG9zdC1mZWF0dXJlLXN1cHBvcnQucGF0Y2ggYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvOTAwMi1QQVRDSC0xLTEtdXNiLWFkZC1lbWJlZGRlZC1Ib3N0LWZlYXR1cmUtc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTZhZTk5Ci0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzkwMDItUEFUQ0gtMS0xLXVzYi1hZGQtZW1iZWRkZWQtSG9zdC1mZWF0dXJlLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwxMjQgQEAKK0Zyb20gODAxZGEzYzlmZDkxNmQzNzQzYjhhZjE3NGY0ZWY0YWVmYzA3MTk4MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFpoYW55b25nIFdhbmcgPHpoYW55b25nLndhbmdAbWVkaWF0ZWsuY29tPgorRGF0ZTogVGh1LCAxNyBKdW4gMjAyMSAxNjowOTowNCArMDgwMAorU3ViamVjdDogW1BBVENIIDIvMl0gdXNiOiBhZGQgZW1iZWRkZWQgSG9zdCBmZWF0dXJlIHN1cHBvcnQKKworYWRkIEVIKEVtYmVkZGVkIEhvc3QpIGZlYXR1cmUgZm9yIFBFVCBhdXRoZW50aWNhdGlvbgorMS4gbmVlZCBDT05GSUdfVVNCX09UR19XSElURUxJU1QgZW5hYmxlCisgICBDT05GSUdfVVNCX09UR19XSElURUxJU1Q9eQorCisyLiBob3N0IGRldmljZSB0cmVlIG5vZGUgbmVlZCBpbmNsdWRlICJ0cGwtc3VwcG9ydCIga2V5d29yZAorICAgJnhoY2kgeworCSAgIHRwbC1zdXBwb3J0OworICAgfQorCitTaWduZWQtb2ZmLWJ5OiBaaGFueW9uZyBXYW5nIDx6aGFueW9uZy53YW5nQG1lZGlhdGVrLmNvbT4KKy0tLQorIGRyaXZlcnMvdXNiL2NvcmUvaHViLmMgICAgICAgICAgIHwgIDkgKysrKystLS0KKyBkcml2ZXJzL3VzYi9jb3JlL290Z193aGl0ZWxpc3QuaCB8IDM5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgZHJpdmVycy91c2IvaG9zdC94aGNpLW10ay5jICAgICAgfCAgMiArKworIDMgZmlsZXMgY2hhbmdlZCwgNDcgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCitpbmRleCAzMDNlOGIzYzFiZGEuLmI4Yzk2YWMyNjg4NiAxMDA2NDQKKy0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKKysrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKK0BAIC0yNDE5LDYgKzI0MTksOCBAQCBzdGF0aWMgaW50IHVzYl9lbnVtZXJhdGVfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQorIAkJCWlmIChlcnIgPCAwKQorIAkJCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJITlAgZmFpbCwgJWRcbiIsIGVycik7CisgCQl9CisrCisrCQlkZXZfaW5mbygmdWRldi0+ZGV2LCAiVW5zdXBwb3J0ZWQgRGV2aWNlIVxuIik7CisgCQlyZXR1cm4gLUVOT1RTVVBQOworIAl9CisgCitAQCAtNDc3OCw5ICs0NzgwLDEwIEBAIGh1Yl9wb3J0X2luaXQoc3RydWN0IHVzYl9odWIgKmh1Yiwgc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGludCBwb3J0MSwKKyAJCQkJZ290byBmYWlsOworIAkJCX0KKyAJCQlpZiAocikgeworLQkJCQlpZiAociAhPSAtRU5PREVWKQorLQkJCQkJZGV2X2VycigmdWRldi0+ZGV2LCAiZGV2aWNlIGRlc2NyaXB0b3IgcmVhZC82NCwgZXJyb3IgJWRcbiIsCistCQkJCQkJCXIpOworKwkJCQlpZiAociAhPSAtRU5PREVWKSB7CisrCQkJCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJkZXZpY2UgZGVzY3JpcHRvciByZWFkLzY0LCBlcnJvciAlZFxuIiwgcik7CisrCQkJCQlkZXZfaW5mbygmdWRldi0+ZGV2LCAiRGV2aWNlIE5vIFJlc3BvbmRcbiIpOworKwkJCQl9CisgCQkJCXJldHZhbCA9IC1FTVNHU0laRTsKKyAJCQkJY29udGludWU7CisgCQkJfQorZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvb3RnX3doaXRlbGlzdC5oIGIvZHJpdmVycy91c2IvY29yZS9vdGdfd2hpdGVsaXN0LmgKK2luZGV4IDJhZTkwMTU4ZGVkNy4uYThkZDIyMTMzNGMxIDEwMDY0NAorLS0tIGEvZHJpdmVycy91c2IvY29yZS9vdGdfd2hpdGVsaXN0LmgKKysrKyBiL2RyaXZlcnMvdXNiL2NvcmUvb3RnX3doaXRlbGlzdC5oCitAQCAtMzksOSArMzksNDQgQEAgc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHdoaXRlbGlzdF90YWJsZVtdID0geworIHsgVVNCX0RFVklDRSgweDA1MjUsIDB4YTRhMCksIH0sCisgI2VuZGlmCisgCisrLyogeGhjaS1tdGsgdXNiMyByb290LWh1YiAqLworK3sgVVNCX0RFVklDRSgweDFkNmIsIDB4MDAwMyksIH0sCisrCisrLyogeGhjaS1tdGsgdXNiMiByb290LWh1YiAqLworK3sgVVNCX0RFVklDRSgweDFkNmIsIDB4MDAwMiksIH0sCisrCisrLyogICovCisreyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01BU1NfU1RPUkFHRSwgMCwgMCkgfSwKKysKKyB7IH0JLyogVGVybWluYXRpbmcgZW50cnkgKi8KKyB9OworIAorK3N0YXRpYyBib29sIHVzYl9tYXRjaF9hbnlfaW50ZXJmYWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorKwkJCQkgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQorK3sKKysJdW5zaWduZWQgaW50IGk7CisrCisrCWZvciAoaSA9IDA7IGkgPCB1ZGV2LT5kZXNjcmlwdG9yLmJOdW1Db25maWd1cmF0aW9uczsgKytpKSB7CisrCQlzdHJ1Y3QgdXNiX2hvc3RfY29uZmlnICpjZmcgPSAmdWRldi0+Y29uZmlnW2ldOworKwkJdW5zaWduZWQgaW50IGo7CisrCisrCQlmb3IgKGogPSAwOyBqIDwgY2ZnLT5kZXNjLmJOdW1JbnRlcmZhY2VzOyArK2opIHsKKysJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9jYWNoZSAqY2FjaGU7CisrCQkJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaW50ZjsKKysKKysJCQljYWNoZSA9IGNmZy0+aW50Zl9jYWNoZVtqXTsKKysJCQlpZiAoY2FjaGUtPm51bV9hbHRzZXR0aW5nID09IDApCisrCQkJCWNvbnRpbnVlOworKworKwkJCWludGYgPSAmY2FjaGUtPmFsdHNldHRpbmdbMF07CisrCQkJaWYgKGlkLT5iSW50ZXJmYWNlQ2xhc3MgPT0gaW50Zi0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MpCisrCQkJCXJldHVybiB0cnVlOworKwkJfQorKwl9CisrCisrCXJldHVybiBmYWxzZTsKKyt9CisrCisgc3RhdGljIGludCBpc190YXJnZXRlZChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQorIHsKKyAJc3RydWN0IHVzYl9kZXZpY2VfaWQJKmlkID0gd2hpdGVsaXN0X3RhYmxlOworQEAgLTkwLDYgKzEyNSwxMCBAQCBzdGF0aWMgaW50IGlzX3RhcmdldGVkKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpCisgCQkgICAgKGlkLT5iRGV2aWNlUHJvdG9jb2wgIT0gZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VQcm90b2NvbCkpCisgCQkJY29udGludWU7CisgCisrCQlpZiAoKGlkLT5tYXRjaF9mbGFncyAmIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8pICYmCisrCQkgICAgIXVzYl9tYXRjaF9hbnlfaW50ZXJmYWNlKGRldiwgaWQpKQorKwkJCWNvbnRpbnVlOworKworIAkJcmV0dXJuIDE7CisgCX0KKyAKK2RpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbXRrLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbXRrLmMKK2luZGV4IDhiZDRjOTVhNTQzNS4uODc2ZTEzNGEwMWI0IDEwMDY0NAorLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLW10ay5jCisrKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbXRrLmMKK0BAIC01NjAsNiArNTYwLDggQEAgc3RhdGljIGludCB4aGNpX210a19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorIAkJZ290byBkaXNhYmxlX2RldmljZV93YWtldXA7CisgCX0KKyAKKysJaGNkLT50cGxfc3VwcG9ydCA9IG9mX3VzYl9ob3N0X3RwbF9zdXBwb3J0KG5vZGUpOworKwl4aGNpLT5zaGFyZWRfaGNkLT50cGxfc3VwcG9ydCA9IGhjZC0+dHBsX3N1cHBvcnQ7CisgCXJldCA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBJUlFGX1NIQVJFRCk7CisgCWlmIChyZXQpCisgCQlnb3RvIHB1dF91c2IzX2hjZDsKKy0tIAorMi4xOC4wCisKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC85MDA5LUFkZC1zcGktcnVudGltZS1QTS1zdXBwb3J0LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40LzkwMDktQWRkLXNwaS1ydW50aW1lLVBNLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM3MWI1NwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC85MDA5LUFkZC1zcGktcnVudGltZS1QTS1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsMTk4IEBACitGcm9tIDBjMWU0YWYwMTUwNmM5MTNjYzU0ZTYzZjY2YmI1NDcwZjUwNzkwYzcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMZWlsayBMaXUgPGxlaWxrLmxpdUBtZWRpYXRlay5jb20+CitEYXRlOiBUdWUsIDEzIEp1bCAyMDIxIDIxOjQ1OjU5ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIFtBZGQgc3BpIHJ1bnRpbWUgUE0gc3VwcG9ydF0KKworW0Rlc2NyaXB0aW9uXQorQWRkIGFoYiBjbGsgYW5kIGVuYWJsZSBydW50aW1lIHBtCisKK1tSZWxlYXNlLWxvZ10KK04vQQorCitDaGFuZ2UtSWQ6IEkwNTI5ZjZlODI5ZjVmYzRjNTg4MDUwODk3MWM5N2I5NDM0ODIwMzQwCitTaWduZWQtb2ZmLWJ5OiBMZWlsayBMaXUgPGxlaWxrLmxpdUBtZWRpYXRlay5jb20+CistLS0KKyBkcml2ZXJzL3NwaS9zcGktbXQ2NXh4LmMgfCA3NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDY3IGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLW10NjV4eC5jIGIvZHJpdmVycy9zcGkvc3BpLW10NjV4eC5jCitpbmRleCA3ZTU0OTg0Li5mZjJkODI1IDEwMDY0NAorLS0tIGEvZHJpdmVycy9zcGkvc3BpLW10NjV4eC5jCisrKysgYi9kcml2ZXJzL3NwaS9zcGktbXQ2NXh4LmMKK0BAIC0xMTksNiArMTE5LDggQEAgc3RydWN0IG10a19zcGlfY29tcGF0aWJsZSB7CisgCS8qIHRoZSBJUE0gSVAgZGVzaWduIGltcHJvdmUgc29tZSBmZWF0dXJlLCBhbmQgc3VwcG9ydCBkdWFsL3F1YWQgbW9kZSAqLworIAlib29sIGlwbV9kZXNpZ247CisgCWJvb2wgc3VwcG9ydF9xdWFkOworKwkvKiBzb21lIElDIGFoYiAmIGFwYiBjbGsgaXMgZGlmZmVyZW50IGFuZCBhbHNvIG5lZWQgdG8gYmUgZW5hYmxlZCAqLworKwlib29sIG5lZWRfYWhiX2NsazsKKyB9OworIAorIHN0cnVjdCBtdGtfc3BpIHsKK0BAIC0xMjYsNyArMTI4LDcgQEAgc3RydWN0IG10a19zcGkgeworIAl1MzIgc3RhdGU7CisgCWludCBwYWRfbnVtOworIAl1MzIgKnBhZF9zZWw7CistCXN0cnVjdCBjbGsgKnBhcmVudF9jbGssICpzZWxfY2xrLCAqc3BpX2NsazsKKysJc3RydWN0IGNsayAqcGFyZW50X2NsaywgKnNlbF9jbGssICpzcGlfY2xrLCAqc3BpX2hjbGs7CisgCXN0cnVjdCBzcGlfdHJhbnNmZXIgKmN1cl90cmFuc2ZlcjsKKyAJdTMyIHhmZXJfbGVuOworIAl1MzIgbnVtX3hmZXJlZDsKK0BAIC0xNDcsMTIgKzE0OSwyMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG10a19zcGlfY29tcGF0aWJsZSBtdDI3MTJfY29tcGF0ID0geworIAkubXVzdF90eCA9IHRydWUsCisgfTsKKyAKKy1zdGF0aWMgY29uc3Qgc3RydWN0IG10a19zcGlfY29tcGF0aWJsZSBpcG1fY29tcGF0ID0geworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX3NwaV9jb21wYXRpYmxlIGlwbV9jb21wYXRfc2luZ2xlID0geworKwkubXVzdF90eCA9IHRydWUsCisrCS5lbmhhbmNlX3RpbWluZyA9IHRydWUsCisrCS5kbWFfZXh0ID0gdHJ1ZSwKKysJLmlwbV9kZXNpZ24gPSB0cnVlLAorKwkubmVlZF9haGJfY2xrID0gdHJ1ZSwKKyt9OworKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX3NwaV9jb21wYXRpYmxlIGlwbV9jb21wYXRfcXVhZCA9IHsKKyAJLm11c3RfdHggPSB0cnVlLAorIAkuZW5oYW5jZV90aW1pbmcgPSB0cnVlLAorIAkuZG1hX2V4dCA9IHRydWUsCisgCS5pcG1fZGVzaWduID0gdHJ1ZSwKKyAJLnN1cHBvcnRfcXVhZCA9IHRydWUsCisrCS5uZWVkX2FoYl9jbGsgPSB0cnVlLAorIH07CisgCisgc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfc3BpX2NvbXBhdGlibGUgbXQ2NzY1X2NvbXBhdCA9IHsKK0BAIC0xODgsOCArMTk5LDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2NoaXBfY29uZmlnIG10a19kZWZhdWx0X2NoaXBfaW5mbyA9IHsKKyB9OworIAorIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19zcGlfb2ZfbWF0Y2hbXSA9IHsKKy0JeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxpcG0tc3BpIiwKKy0JCS5kYXRhID0gKHZvaWQgKikmaXBtX2NvbXBhdCwKKysJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxpcG0tc3BpLXNpbmdsZSIsCisrCQkuZGF0YSA9ICh2b2lkICopJmlwbV9jb21wYXRfc2luZ2xlLAorKwl9LAorKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLGlwbS1zcGktcXVhZCIsCisrCQkuZGF0YSA9ICh2b2lkICopJmlwbV9jb21wYXRfcXVhZCwKKyAJfSwKKyAJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDI3MDEtc3BpIiwKKyAJCS5kYXRhID0gKHZvaWQgKikmbXRrX2NvbW1vbl9jb21wYXQsCitAQCAtOTkyLDcgKzEwMDYsNyBAQCBzdGF0aWMgaW50IG10a19zcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKKyAJCXJldHVybiAtRU5PTUVNOworIAl9CisgCistLy8JbWFzdGVyLT5hdXRvX3J1bnRpbWVfcG0gPSB0cnVlOworKwltYXN0ZXItPmF1dG9fcnVudGltZV9wbSA9IHRydWU7CisgCW1hc3Rlci0+ZGV2Lm9mX25vZGUgPSBwZGV2LT5kZXYub2Zfbm9kZTsKKyAJbWFzdGVyLT5tb2RlX2JpdHMgPSBTUElfQ1BPTCB8IFNQSV9DUEhBIHwgU1BJX0xTQl9GSVJTVDsKKyAKK0BAIC0xMTA2LDIyICsxMTIwLDQwIEBAIHN0YXRpYyBpbnQgbXRrX3NwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorIAkJZ290byBlcnJfcHV0X21hc3RlcjsKKyAJfQorIAorKwlpZiAobWRhdGEtPmRldl9jb21wLT5uZWVkX2FoYl9jbGspIHsKKysJCW1kYXRhLT5zcGlfaGNsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAic3BpLWhjbGsiKTsKKysJCWlmIChJU19FUlIobWRhdGEtPnNwaV9oY2xrKSkgeworKwkJCXJldCA9IFBUUl9FUlIobWRhdGEtPnNwaV9oY2xrKTsKKysJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IHNwaS1oY2xrOiAlZFxuIiwgcmV0KTsKKysJCQlnb3RvIGVycl9wdXRfbWFzdGVyOworKwkJfQorKworKwkJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKG1kYXRhLT5zcGlfaGNsayk7CisrCQlpZiAocmV0IDwgMCkgeworKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBlbmFibGUgc3BpX2hjbGsgKCVkKVxuIiwgcmV0KTsKKysJCQlnb3RvIGVycl9wdXRfbWFzdGVyOworKwkJfQorKwl9CisrCisgCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShtZGF0YS0+c3BpX2Nsayk7CisgCWlmIChyZXQgPCAwKSB7CisgCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZW5hYmxlIHNwaV9jbGsgKCVkKVxuIiwgcmV0KTsKKyAJCWdvdG8gZXJyX3B1dF9tYXN0ZXI7CisgCX0KKyAKKy0JLypyZXQgPSBjbGtfc2V0X3BhcmVudChtZGF0YS0+c2VsX2NsaywgbWRhdGEtPnBhcmVudF9jbGspOworKwlyZXQgPSBjbGtfc2V0X3BhcmVudChtZGF0YS0+c2VsX2NsaywgbWRhdGEtPnBhcmVudF9jbGspOworIAlpZiAocmV0IDwgMCkgeworIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGNsa19zZXRfcGFyZW50ICglZClcbiIsIHJldCk7CisgCQljbGtfZGlzYWJsZV91bnByZXBhcmUobWRhdGEtPnNwaV9jbGspOworIAkJZ290byBlcnJfcHV0X21hc3RlcjsKKyAJfQorIAorLQljbGtfZGlzYWJsZV91bnByZXBhcmUobWRhdGEtPnNlbF9jbGspOyovCisrCWNsa19kaXNhYmxlX3VucHJlcGFyZShtZGF0YS0+c3BpX2Nsayk7CisrCisrCWlmIChtZGF0YS0+ZGV2X2NvbXAtPm5lZWRfYWhiX2NsaykKKysJCWNsa19kaXNhYmxlX3VucHJlcGFyZShtZGF0YS0+c3BpX2hjbGspOworIAorLQkvL3BtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOworKwlwbV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsKKyAKKyAJcmV0ID0gZGV2bV9zcGlfcmVnaXN0ZXJfbWFzdGVyKCZwZGV2LT5kZXYsIG1hc3Rlcik7CisgCWlmIChyZXQpIHsKK0BAIC0xMjAxLDggKzEyMzMsMTEgQEAgc3RhdGljIGludCBtdGtfc3BpX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQorIAlpZiAocmV0KQorIAkJcmV0dXJuIHJldDsKKyAKKy0JaWYgKCFwbV9ydW50aW1lX3N1c3BlbmRlZChkZXYpKQorKwlpZiAoIXBtX3J1bnRpbWVfc3VzcGVuZGVkKGRldikpIHsKKyAJCWNsa19kaXNhYmxlX3VucHJlcGFyZShtZGF0YS0+c3BpX2Nsayk7CisrCQlpZiAobWRhdGEtPmRldl9jb21wLT5uZWVkX2FoYl9jbGspCisrCQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKG1kYXRhLT5zcGlfaGNsayk7CisrCX0KKyAKKyAJcmV0dXJuIHJldDsKKyB9CitAQCAtMTIxNCw2ICsxMjQ5LDE0IEBAIHN0YXRpYyBpbnQgbXRrX3NwaV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorIAlzdHJ1Y3QgbXRrX3NwaSAqbWRhdGEgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisgCisgCWlmICghcG1fcnVudGltZV9zdXNwZW5kZWQoZGV2KSkgeworKwkJaWYgKG1kYXRhLT5kZXZfY29tcC0+bmVlZF9haGJfY2xrKSB7CisrCQkJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKG1kYXRhLT5zcGlfaGNsayk7CisrCQkJaWYgKHJldCA8IDApIHsKKysJCQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZW5hYmxlIHNwaV9oY2xrICglZClcbiIsIHJldCk7CisrCQkJCXJldHVybiByZXQ7CisrCQkJfQorKwkJfQorKworIAkJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKG1kYXRhLT5zcGlfY2xrKTsKKyAJCWlmIChyZXQgPCAwKSB7CisgCQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZW5hYmxlIHNwaV9jbGsgKCVkKVxuIiwgcmV0KTsKK0BAIC0xMjIyLDggKzEyNjUsMTEgQEAgc3RhdGljIGludCBtdGtfc3BpX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCisgCX0KKyAKKyAJcmV0ID0gc3BpX21hc3Rlcl9yZXN1bWUobWFzdGVyKTsKKy0JaWYgKHJldCA8IDApCisrCWlmIChyZXQgPCAwKSB7CisgCQljbGtfZGlzYWJsZV91bnByZXBhcmUobWRhdGEtPnNwaV9jbGspOworKwkJaWYgKG1kYXRhLT5kZXZfY29tcC0+bmVlZF9haGJfY2xrKQorKwkJCWNsa19kaXNhYmxlX3VucHJlcGFyZShtZGF0YS0+c3BpX2hjbGspOworKwl9CisgCisgCXJldHVybiByZXQ7CisgfQorQEAgLTEyMzcsNiArMTI4Myw5IEBAIHN0YXRpYyBpbnQgbXRrX3NwaV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQorIAorIAljbGtfZGlzYWJsZV91bnByZXBhcmUobWRhdGEtPnNwaV9jbGspOworIAorKwlpZiAobWRhdGEtPmRldl9jb21wLT5uZWVkX2FoYl9jbGspCisrCQljbGtfZGlzYWJsZV91bnByZXBhcmUobWRhdGEtPnNwaV9oY2xrKTsKKysKKyAJcmV0dXJuIDA7CisgfQorIAorQEAgLTEyNDYsNiArMTI5NSwxNCBAQCBzdGF0aWMgaW50IG10a19zcGlfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorIAlzdHJ1Y3QgbXRrX3NwaSAqbWRhdGEgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisgCWludCByZXQ7CisgCisrCWlmIChtZGF0YS0+ZGV2X2NvbXAtPm5lZWRfYWhiX2NsaykgeworKwkJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKG1kYXRhLT5zcGlfaGNsayk7CisrCQlpZiAocmV0IDwgMCkgeworKwkJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBzcGlfaGNsayAoJWQpXG4iLCByZXQpOworKwkJCXJldHVybiByZXQ7CisrCQl9CisrCX0KKysKKyAJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKG1kYXRhLT5zcGlfY2xrKTsKKyAJaWYgKHJldCA8IDApIHsKKyAJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBzcGlfY2xrICglZClcbiIsIHJldCk7CistLSAKKzIuMTguMAorCmRpZmYgLS1naXQgYS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvOTAxMC1pd2NvbmZpZy13aXJlbGVzcy1yYXRlLWZpeC5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC85MDEwLWl3Y29uZmlnLXdpcmVsZXNzLXJhdGUtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyOWU0Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvOTAxMC1pd2NvbmZpZy13aXJlbGVzcy1yYXRlLWZpeC5wYXRjaApAQCAtMCwwICsxLDIwIEBACistLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvd2lyZWxlc3MuaA0KKysrKyBiL2luY2x1ZGUvdWFwaS9saW51eC93aXJlbGVzcy5oDQorQEAgLTY3OCw3ICs2NzgsNyBAQA0KKyAgKglHZW5lcmljIGZvcm1hdCBmb3IgbW9zdCBwYXJhbWV0ZXJzIHRoYXQgZml0IGluIGFuIGludA0KKyAgKi8NCisgc3RydWN0IGl3X3BhcmFtIHsNCistICBfX3MzMgkJdmFsdWU7CQkvKiBUaGUgdmFsdWUgb2YgdGhlIHBhcmFtZXRlciBpdHNlbGYgKi8NCisrICBfX3U2NAkJdmFsdWU7CQkvKiBUaGUgdmFsdWUgb2YgdGhlIHBhcmFtZXRlciBpdHNlbGYgKi8NCisgICBfX3U4CQlmaXhlZDsJCS8qIEhhcmR3YXJlIHNob3VsZCBub3QgdXNlIGF1dG8gc2VsZWN0ICovDQorICAgX191OAkJZGlzYWJsZWQ7CS8qIERpc2FibGUgdGhlIGZlYXR1cmUgKi8NCisgICBfX3UxNgkJZmxhZ3M7CQkvKiBWYXJpb3VzIHNwZWNpZmMgZmxhZ3MgKGlmIGFueSkgKi8NCitAQCAtMTAwMiw3ICsxMDAyLDcgQEAgc3RydWN0IGl3X3JhbmdlIHsNCisgDQorIAkvKiBSYXRlcyAqLw0KKyAJX191OAkJbnVtX2JpdHJhdGVzOwkvKiBOdW1iZXIgb2YgZW50cmllcyBpbiB0aGUgbGlzdCAqLw0KKy0JX19zMzIJCWJpdHJhdGVbSVdfTUFYX0JJVFJBVEVTXTsJLyogbGlzdCwgaW4gYnBzICovDQorKwlfX3U2NAkJYml0cmF0ZVtJV19NQVhfQklUUkFURVNdOwkvKiBsaXN0LCBpbiBicHMgKi8NCisgDQorIAkvKiBSVFMgdGhyZXNob2xkICovDQorIAlfX3MzMgkJbWluX3J0czsJLyogTWluaW1hbCBSVFMgdGhyZXNob2xkICovDQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40Lzk5OS1hZGRfYXJtdjdfc3VwcG9ydF9mb3JfcGFudGhlci5wYXRjaCBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC85OTktYWRkX2FybXY3X3N1cHBvcnRfZm9yX3BhbnRoZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRkYWRmMwotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC85OTktYWRkX2FybXY3X3N1cHBvcnRfZm9yX3BhbnRoZXIucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcgYi9hcmNoL2FybS9LY29uZmlnCitpbmRleCA4YTUwZWZiLi5mNjAxMzY4IDEwMDY0NAorLS0tIGEvYXJjaC9hcm0vS2NvbmZpZworKysrIGIvYXJjaC9hcm0vS2NvbmZpZworQEAgLTU3Niw2ICs1NzYsOCBAQCBjb25maWcgQVJDSF9NVUxUSV9WNworIAlzZWxlY3QgQVJDSF9NVUxUSV9WNl9WNworIAlzZWxlY3QgQ1BVX1Y3CisgCXNlbGVjdCBIQVZFX1NNUAorKwlzZWxlY3QgQVJNX0dJQ19WMworKwlzZWxlY3QgSEFWRV9BUk1fQVJDSF9USU1FUgorIAorIGNvbmZpZyBBUkNIX01VTFRJX1Y2X1Y3CisgCWJvb2wKKwpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40Lzk5OTktbnVsbC10ZXN0LnBhdGNoIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L21lZGlhdGVrL3BhdGNoZXMtNS40Lzk5OTktbnVsbC10ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvOTk5OS1udWxsLXRlc3QucGF0Y2gKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9tZWRpYXRlay9wYXRjaGVzLTUuNC9wYXRjaGVzLTUuNC5pbmMgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvcGF0Y2hlcy01LjQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYmZiZjkKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvbWVkaWF0ZWsvcGF0Y2hlcy01LjQvcGF0Y2hlcy01LjQuaW5jCkBAIC0wLDAgKzEsMTAxIEBACisjcGF0Y2ggcGF0Y2hlcy01LjQgKGNvbWUgZnJvbSBvcGVud3J0L2xlZGUvdGFyZ2V0L2xpbnV4L21lZGlhdGVrKQorU1JDX1VSSV9hcHBlbmQgPSAiIFwKKyAgICBmaWxlOi8vMDAwMS1jbGstbXRrLWFkZC1tdDc5ODYtc3VwcG9ydC5wYXRjaCBcCisgICAgZmlsZTovLzAwMDEtdjUuNy1zcGktbWFrZS1zcGktbWF4LWZyZXF1ZW5jeS1vcHRpb25hbC5wYXRjaCBcCisgICAgZmlsZTovLzAwMDItY2xrLW10ay1hZGQtbXQ3OTgxLXN1cHBvcnQucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAyLXY1Ljctc3BpLWFkZC1zdXBwb3J0LWZvci1tZWRpYXRlay1zcGktbm9yLWNvbnRyb2xsZXIucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAzLXN3aXRjaC1hZGQtbXQ3NTMxLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwNS1kdHMtbXQ3NjIyLWFkZC1nc3cucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA1LWR0cy1tdDc2MjktYWRkLWdzdy5wYXRjaCBcCisgICAgZmlsZTovLzAwMDYtZHRzLWZpeC1icGkyLWNvbnNvbGUucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA2LWR0cy1maXgtYnBpNjQtY29uc29sZS5wYXRjaCBcCisgICAgZmlsZTovLzAwMTAtZHRzLW10NzYyOS1yZmItZml4LWZpcm13YXJlLXBhcnRpdGlvbi5wYXRjaCBcCisgICAgZmlsZTovLzAwMjAtZHRzLW10NzYyMi1lbmFibGUtbmV3LW10ay1zbmFuZC1mb3ItdWJpLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyMS1kdHMtbXQ3NjIyLXJlbW92ZS1jb29saW5nLWRldmljZS5wYXRjaCBcCisgICAgZmlsZTovLzAxMDAtaHduYXRfS2NvbmZpZ19NYWtlZmlsZS5wYXRjaCBcCisgICAgZmlsZTovLzAxMDEtYWRkLW10ay13aWZpLXV0aWxpdHktcmJ1cy5wYXRjaCBcCisgICAgZmlsZTovLzAxMTEtbXQ3OTg2LXRybmctYWRkLXJuZy1zdXBwb3J0LnBhdGNoIFwKKyAgICBmaWxlOi8vMDIwMC1zaG93X21vZGVsX25hbWVfaW5fY3B1aW5mb19vbl9hcm02NC5wYXRjaCBcCisgICAgZmlsZTovLzAyMjYtcGh5LXBoeS1tdGstdHBoeS1BZGQtaGlmc3lzLXN1cHBvcnQucGF0Y2ggXAorICAgIGZpbGU6Ly8wMjI3LWFybS1kdHMtQWRkLVVuaWVsZWMtVTc2MjMtRFRTLnBhdGNoIFwKKyAgICBmaWxlOi8vMDMwMS1tdGQtbXRrLWVjYy1tb3ZlLW10ay1lY2MtaGVhZGVyLWZpbGUtdG8taW5jbHVkZS1tdGQucGF0Y2ggXAorICAgIGZpbGU6Ly8wMzA2LXNwaS1zcGktbWVtLU1lZGlhVGVrLUFkZC1TUEktTkFORC1GbGFzaC1pbnRlcmZhY2UtZHIucGF0Y2ggXAorICAgIGZpbGU6Ly8wMzA3LWR0cy1tdDc2MjktYWRkLXNuYW5kLXN1cHBvcnQucGF0Y2ggXAorICAgIGZpbGU6Ly8wMzA4LWR0cy1tdDc2MjItYWRkLXNuYW5kLXN1cHBvcnQucGF0Y2ggXAorICAgIGZpbGU6Ly8wMzEwLWR0cy1hZGQtd21hYy1zdXBwb3J0LWZvci1tdDc2MjItcmZiMS5wYXRjaCBcCisgICAgZmlsZTovLzA0MDAtc291bmQtYWRkLXNvbWUtaGVscGVycy10by1jb250cm9sLW10a19tZW1pZi5wYXRjaCBcCisgICAgZmlsZTovLzA0MDEtc291bmQtcmVmaW5lLWh3LXBhcmFtcy1hbmQtaHctcHJlcGFyZS5wYXRjaCBcCisgICAgZmlsZTovLzA0MDItc291bmQtYWRkLW10Nzk4Ni1kcml2ZXItYW5kLXNsaWMtZHJpdmVyLnBhdGNoIFwKKyAgICBmaWxlOi8vMDUwMC12NS42LWNyeXB0by1iYWNrcG9ydC1pbnNpZGUtc2VjdXJlLnBhdGNoIFwKKyAgICBmaWxlOi8vMDUwMS1jcnlwdG8tYWRkLWVpcDk3LWluc2lkZS1zZWN1cmUtc3VwcG9ydC5wYXRjaCBcCisgICAgZmlsZTovLzA1MDItZHRzLW10NzYyMy1laXA5Ny1pbnNpZGUtc2VjdXJlLXN1cHBvcnQucGF0Y2ggXAorICAgIGZpbGU6Ly8wNTAzLWNyeXB0by1maXgtZWlwOTctY2FjaGUtaW5jb2hlcmVudC5wYXRjaCBcCisgICAgZmlsZTovLzA1MDQtbWFjc2VjLXJldmVydC1hc3luYy1zdXBwb3J0LnBhdGNoIFwKKyAgICBmaWxlOi8vMDYwMC1uZXQtcGh5bGluay1wcm9wYWdhdGUtcmVzb2x2ZWQtbGluay1jb25maWctdmlhLW1hY19sLnBhdGNoIFwKKyAgICBmaWxlOi8vMDYwMS1uZXQtZHNhLXByb3BhZ2F0ZS1yZXNvbHZlZC1saW5rLWNvbmZpZy12aWEtbWFjX2xpbmtfLnBhdGNoIFwKKyAgICBmaWxlOi8vMDYwMi1uZXQtZHNhLW10NzUzMC11c2UtcmVzb2x2ZWQtbGluay1jb25maWctaW4tbWFjX2xpbmtfLnBhdGNoIFwKKyAgICBmaWxlOi8vMDYwMy1uZXQtZHNhLW10NzUzMC1FeHRlbmQtZGV2aWNlLWRhdGEtcmVhZHktZm9yLWFkZGluZy1hLnBhdGNoIFwKKyAgICBmaWxlOi8vMDYwNC1uZXQtZHNhLW10NzUzMC1BZGQtdGhlLXN1cHBvcnQtb2YtTVQ3NTMxLXN3aXRjaC5wYXRjaCBcCisgICAgZmlsZTovLzA2MDUtYXJtNjQtZHRzLW10NzYyMi1hZGQtbXQ3NTMxLWRzYS10by1iYW5hbmFwaS1icGktcjY0LWJvYXJkLnBhdGNoIFwKKyAgICBmaWxlOi8vMDY2Ni1hZGQtc3BpbWVtLXN1cHBvcnQtdG8tbXRrLXNwaS5wYXRjaCBcCisgICAgZmlsZTovLzA2NjYtc3BpLW10ay1ub3ItZml4LXRpbWVvdXQtY2FsY3VsYXRpb24tb3ZlcmZsb3cucGF0Y2ggXAorICAgIGZpbGU6Ly8wNjY3LXNwaS1tZWRpYXRlay1maXgtdGltZW91dC1mb3ItbGFyZ2UtZGF0YS5wYXRjaCBcCisgICAgZmlsZTovLzA2Njgtc3BpLW1lZGlhdGVrLWZpeC1kbWEtdW5tYXAtdHdpY2UucGF0Y2ggXAorICAgIGZpbGU6Ly8wNjY5LWZpeC1TUElNLU5BTkQtYW5kLU5PUi1wcm9iaW5nLnBhdGNoIFwKKyAgICBmaWxlOi8vMDY3MC1maXgtU1BJTS1kbWEtYnVmZmVyLW5vdC1hbGlnbmVkLnBhdGNoIFwKKyAgICBmaWxlOi8vMDY3MS1hZGQtbWljcm9uLU1UMjlGNEcwMUFCQUZELXNwaS1uYW5kLXN1cHBvcnQucGF0Y2ggXAorICAgIGZpbGU6Ly8wNjcyLWFkZC1GNTBMMUc0MUxCLWFuZC1HRDVGMUdRNVVFeHhHLXNuYW5kLXN1cHBvcnQucGF0Y2ggXAorICAgIGZpbGU6Ly8wNzAxLWZpeC1tdGstbmZpLWRyaXZlci1kZXBlbmRlbmN5LnBhdGNoIFwKKyAgICBmaWxlOi8vMDgwMS1tdGstc2QtYWRkLW10Nzk4Ni1zdXBwb3J0LnBhdGNoIFwKKyAgICBmaWxlOi8vMDkwMC1idC1tdGstc2VyaWFsLWZpeC5wYXRjaCBcCisgICAgZmlsZTovLzA5MDAtaTJjLWJ1c3Nlcy1hZGQtbXQ3OTg2LXN1cHBvcnQucGF0Y2ggXAorICAgIGZpbGU6Ly8wOTAxLWkyYy1idXNzZXMtYWRkLW10Nzk4MS1zdXBwb3J0LnBhdGNoIFwKKyAgICBmaWxlOi8vMDkzMC1wd20tYWRkLW10Nzk4Ni1zdXBwb3J0LnBhdGNoIFwKKyAgICBmaWxlOi8vMDkzMS1wd20tYWRkLW10Nzk4MS1zdXBwb3J0LnBhdGNoIFwKKyAgICBmaWxlOi8vMDk2MC13YXRjaGRvZy1hZGQtbXQ3OTg2LWFzc2VydC5wYXRjaCBcCisgICAgZmlsZTovLzA5OTAtZ3N3LXJ0bDgzNjdzLW10NzYyMi1zdXBwb3J0LnBhdGNoIFwKKyAgICBmaWxlOi8vMDk5MS1kdC1iaW5kaW5ncy1QQ0ktTWVkaWF0ZWstVXBkYXRlLVBDSWUtYmluZGluZy5wYXRjaCBcCisgICAgZmlsZTovLzA5OTItUENJLW1lZGlhdGVrLVVzZS1yZWdtYXAtdG8tZ2V0LXNoYXJlZC1wY2llLWNmZy1iYXNlLnBhdGNoIFwKKyAgICBmaWxlOi8vMDk5My1hcm02NC1kdHMtbWVkaWF0ZWstU3BsaXQtUENJZS1ub2RlLWZvci1NVDI3MTItTVQ3NjIyLnBhdGNoIFwKKyAgICBmaWxlOi8vMDk5NC1BUk0tZHRzLW1lZGlhdGVrLVVwZGF0ZS1tdDc2MjktUENJZS1ub2RlLnBhdGNoIFwKKyAgICBmaWxlOi8vMTAwMS1tdGtobmF0LWlwdjYtZml4LXBza2ItZXhwYW5kLWhlYWQtbGltaXRhdGlvbi5wYXRjaCBcCisgICAgZmlsZTovLzEwMDItbXRraG5hdC1hZGQtc3VwcG9ydC1mb3ItdmlydHVhbC1pbnRlcmZhY2UtYWNjZWxlcmF0aW9uLnBhdGNoIFwKKyAgICBmaWxlOi8vMTAwMy1kdHMtbXQ3NjIyLXJmYi1jaGFuZ2UtdG8tYXgtbXRkLWxheW91dC5wYXRjaCBcCisgICAgZmlsZTovLzEwMDRfcmVtb3ZlX2V0aF90cmFuc21pdF90aW1lb3V0X2h3X3Jlc2V0LnBhdGNoIFwKKyAgICBmaWxlOi8vMTAwNS1tdGtobmF0LWZpeC1wc2UtaGFuZy1mb3ItbXVsdGktc3RhdGlvbnMucGF0Y2ggXAorICAgIGZpbGU6Ly8xMDEwLXBjaWUtbWVkaWF0ZWstZml4LWNsZWFyaW5nLWludGVycnVwdC1zdGF0dXMucGF0Y2ggXAorICAgIGZpbGU6Ly8xMDE1LXBjaWUtYWRkLXBjaWUtZ2VuMy11cHN0cmVhbS1kcml2ZXIucGF0Y2ggXAorICAgIGZpbGU6Ly8xMDIwLXNwaS1ub3ItdzI1cTUxMmp2LnBhdGNoIFwKKyAgICBmaWxlOi8vMTAyMS11Ym50LWxlZGJhci1kcml2ZXIucGF0Y2ggXAorICAgIGZpbGU6Ly8xMDIzLWtnZGItYWRkLWludGVycnVwdC1jb250cm9sLnBhdGNoIFwKKyAgICBmaWxlOi8vMTAyNC1wY2llLWFkZC1tdWx0aS1NU0ktc3VwcG9ydC5wYXRjaCBcCisgICAgZmlsZTovLzE2NjEtQWRkLXRybmd2Mi1kcml2ZXItc3VwcG9ydC5wYXRjaCBcCisgICAgZmlsZTovLzIwMDAtbWlzYy1hZGQtbXRrLXBsYXRmb3JtLnBhdGNoIFwKKyAgICBmaWxlOi8vNDAwLW10ZC1hZGQtbXRrLXNuYW5kLWRyaXZlci5wYXRjaCBcCisgICAgZmlsZTovLzQwMS1waW5jdHJsLWFkZC1tdDc5ODYtZHJpdmVyLnBhdGNoIFwKKyAgICBmaWxlOi8vNDAyLXBpbmN0cmwtYWRkLW10Nzk4MS1kcml2ZXIucGF0Y2ggXAorICAgIGZpbGU6Ly81MDAtYXV4YWRjLWFkZC1hdXhhZGMtMzJrLWNsay5wYXRjaCBcCisgICAgZmlsZTovLzczMC1uZXQtZXRoZXJuZXQtbXRrX2V0aF9zb2MtYWRkLW10ay1kc2EtdGFnLXJ4LW9mZmxvYWQucGF0Y2ggXAorICAgIGZpbGU6Ly83MzgtbXQ3NTMxLWdzdy1pbnRlcm5hbF9waHlfY2FsaWJyYXRpb24ucGF0Y2ggXAorICAgIGZpbGU6Ly83MzktbXQ3NTMxLWdzdy1wb3J0NV9leHRlcm5hbF9waHlfaW5pdC5wYXRjaCBcCisgICAgZmlsZTovLzc0MC1hZGQtZ3B5MjExLXBoeS1zdXBwb3J0LnBhdGNoIFwKKyAgICBmaWxlOi8vNzQxLWFkZC1kZWZhdWx0LXNldHRpbmctdG8tZHNhLXVudXNlZC1wb3J0LnBhdGNoIFwKKyAgICBmaWxlOi8vNzQyLW5ldC1kc2EtYWRkLU1UNzUzMS1HaWdhYml0LUV0aGVybmV0LVBIWS1zZXR0aW5nLnBhdGNoIFwKKyAgICBmaWxlOi8vNzQzLWFkZC1tZWRpYXRlay1nZS1ncGh5LXN1cHBvcnQucGF0Y2ggXAorICAgIGZpbGU6Ly83NDQtZW44ODAxcy1ncGh5LXN1cHBvcnQucGF0Y2ggXAorICAgIGZpbGU6Ly84MDAwLVBBVENILTEtNC10cGh5LXN1cHBvcnQtdHlwZS1zd2l0Y2gtYnktcGVyaWNmZy5wYXRjaCBcCisgICAgZmlsZTovLzgwMDEtUEFUQ0gtMi00LWR0LWJpbmRpbmdzLXBoeS1BZGQtUEhZX1RZUEVfRFAtZGVmaW5pdGlvbi5wYXRjaCBcCisgICAgZmlsZTovLzgwMDItUEFUQ0gtMy00LWR0LWJpbmRpbmdzLXBoeS1BZGQtUEhZX1RZUEVfWFBDUy1kZWZpbml0aW9uLnBhdGNoIFwKKyAgICBmaWxlOi8vODAwMy1QQVRDSC00LTQtZHQtYmluZGluZ3MtcGh5LUFkZC1EVC1iaW5kaW5ncy1mb3ItWGlsaW54LVp5bnFNUC1QUy5wYXRjaCBcCisgICAgZmlsZTovLzgwMDQtbnZtZW0tY29yZS1BZGQtZnVuY3Rpb25zLXRvLW1ha2UtbnVtYmVyLXJlYWRpbmctZWFzeS5wYXRjaCBcCisgICAgZmlsZTovLzgwMDUtbnZtZW0tbXRrLWVmdXNlLXN1cHBvcnQtbWluaW11bS1vbmUtYnl0ZS1hY2Nlc3Mtc3RyaS5wYXRjaCBcCisgICAgZmlsZTovLzgwMDYtcGh5LXBoeS1tdGstdHBoeS1hZGQtc3VwcG9ydC1lZnVzZS1zZXR0aW5nLnBhdGNoIFwKKyAgICBmaWxlOi8vODAwNy1waHktcGh5LW10ay10cGh5LUFkZC1QQ0llLTItbGFuZS1lZnVzZS1zdXBwb3J0LnBhdGNoIFwKKyAgICBmaWxlOi8vODAwOC1waHktcGh5LW10ay10cGh5LWFkZC1hdXRvLWxvYWQtdmFsaWQtY2hlY2stbWVjaGFuaXNtLnBhdGNoIFwKKyAgICBmaWxlOi8vOTAwMS1QQVRDSC0xLTIteEhDSS1NVDc5ODYtVVNCLTIuMC1VU0JJRi1jb21wbGlhbmNlLXRvb2xraXQucGF0Y2ggXAorICAgIGZpbGU6Ly85MDAyLVBBVENILTEtMS11c2ItYWRkLWVtYmVkZGVkLUhvc3QtZmVhdHVyZS1zdXBwb3J0LnBhdGNoIFwKKyAgICBmaWxlOi8vOTAwOS1BZGQtc3BpLXJ1bnRpbWUtUE0tc3VwcG9ydC5wYXRjaCBcCisgICAgZmlsZTovLzkwMTAtaXdjb25maWctd2lyZWxlc3MtcmF0ZS1maXgucGF0Y2ggXAorICAgIGZpbGU6Ly85OTktYWRkX2FybXY3X3N1cHBvcnRfZm9yX3BhbnRoZXIucGF0Y2ggXAorICAgIGZpbGU6Ly85OTk5LW51bGwtdGVzdC5wYXRjaCBcCisgICAgIgpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L3Jka2JfY2ZnL2lwdGFibGVzLmNmZyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9yZGtiX2NmZy9pcHRhYmxlcy5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNmYzNhNAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9yZGtiX2NmZy9pcHRhYmxlcy5jZmcKQEAgLTAsMCArMSw0NiBAQAorQ09ORklHX0lQX01VTFRJQ0FTVD15CitDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKK0NPTkZJR19JTkVUX0FIPW0KK0NPTkZJR19JTkVUX0VTUD1tCitDT05GSUdfSU5FVF9JUENPTVA9bQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPW0KK0NPTkZJR19JTkVUX1VEUF9ESUFHPW0KK0NPTkZJR19JUFY2PXkKK0NPTkZJR19ORVRGSUxURVI9eQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCitDT05GSUdfTkZfQ09OTlRSQUNLPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfRlRQPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfUFBUUD15CitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0FERFJUWVBFPXkKK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD15CitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz15CitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj15CitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hMPXkKK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBSQU5HRT15CitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPXkKK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPXkKK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPXkKK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT15CitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVD15CitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPXkKK0NPTkZJR19JUF9TRVQ9bQorQ09ORklHX0lQX1ZTPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWND15CitDT05GSUdfTkZfUkVKRUNUX0lQVjQ9eQorQ09ORklHX0lQX05GX0lQVEFCTEVTPXkKK0NPTkZJR19JUF9ORl9GSUxURVI9eQorQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQorQ09ORklHX0lQX05GX05BVD15CitDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQorQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCitDT05GSUdfSVBfTkZfTUFOR0xFPW0KK0NPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQorQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCitDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjY9bQorQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVA2X05GX0ZJTFRFUj1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1Q9bQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L3Jka2JfY2ZnL21hYzgwMjExLmNmZyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9yZGtiX2NmZy9tYWM4MDIxMS5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNlNzUwMgotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9yZGtiX2NmZy9tYWM4MDIxMS5jZmcKQEAgLTAsMCArMSw1IEBACitDT05GSUdfQ1JZUFRPX0FFUz15CitDT05GSUdfQ1JZUFRPX0NDTT15CitDT05GSUdfQ1JZUFRPX0dDTT15CitDT05GSUdfQ1JZUFRPX0NNQUM9eQorQ09ORklHX1JFTEFZPXkKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9yZGtiX2NmZy9vcGVudnN3aXRjaC5jZmcgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvcmRrYl9jZmcvb3BlbnZzd2l0Y2guY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYjI3NDMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvcmRrYl9jZmcvb3BlbnZzd2l0Y2guY2ZnCkBAIC0wLDAgKzEsNSBAQAorQ09ORklHX09QRU5WU1dJVENIPW0KK0NPTkZJR19PUEVOVlNXSVRDSF9HUkU9bQorQ09ORklHX0dFTkVWRT15CitDT05GSUdfTkVUX0lQR1JFX0RFTVVYPXkKK0NPTkZJR19ORVRfSVBHUkU9eQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L3Jka2JfY2ZnL3BycGxtZXNoLmNmZyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9yZGtiX2NmZy9wcnBsbWVzaC5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U3NWE0NAotLS0gL2Rldi9udWxsCisrKyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9yZGtiX2NmZy9wcnBsbWVzaC5jZmcKQEAgLTAsMCArMSwxMyBAQAorIyBOZWVkZWQgb25seSBmb3IgY2FzZSBCV0xfSEFMPURVTU1ZIHRvIGNyZWF0ZQorIyBkdW1teSBpZmFjZXMgIndsYW4wIiBhbmQgIndsYW4yIgorQ09ORklHX0RVTU1ZPXkKKworQ09ORklHX0JSSURHRT15CitDT05GSUdfQlJJREdFX0VCVF9CUk9VVEU9bQorQ09ORklHX0JSSURHRV9FQlRfVF9GSUxURVI9bQorQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFUz1tCitDT05GSUdfQlJJREdFX05FVEZJTFRFUj15CisKK0NPTkZJR19ORVRGSUxURVI9eSAgCitDT05GR0lfTkVURklMVEVSX0FEVkFOQ0VEPXkKK0NPTkZJR19ORl9UQUJMRVM9eQpkaWZmIC0tZ2l0IGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWstNS40L3Jka2JfY2ZnL3R1cnJpc19yZGtiLmNmZyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLTUuNC9yZGtiX2NmZy90dXJyaXNfcmRrYi5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMyODg5YzYKLS0tIC9kZXYvbnVsbAorKysgYi9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1tZWRpYXRlay01LjQvcmRrYl9jZmcvdHVycmlzX3Jka2IuY2ZnCkBAIC0wLDAgKzEsNiBAQAorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfQVVUT0ZTNF9GUz15CitDT05GSUdfQ0dST1VQUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNEPXkKK0NPTkZJR19DR1JPVVBfQlBGPXkKZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLmluYyBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2QxYjNiCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWsuaW5jCkBAIC0wLDAgKzEsMjQgQEAKK0RFU0NSSVBUSU9OID0gIkxpbnV4IEtlcm5lbCBmb3IgTWVkaWF0ZWsgU29DcyIKK1NFQ1RJT04gPSAia2VybmVsIgorTElDRU5TRSA9ICJHUEx2MiIKKworQ09NUEFUSUJMRV9NQUNISU5FID0gIl5maWxvZ2ljJCIKKworUEUgPSAiMSIKK1BWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCisKK2luaGVyaXQga2VybmVsIHNpdGVpbmZvCityZXF1aXJlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYworCitMSUNfRklMRVNfQ0hLU1VNPSJmaWxlOi8vQ09QWUlORzttZDU9YmJlYTgxNWVlMjc5NWIyZjQyMzA4MjZjMGM2Yjg4MTQiCisKK0tFUk5FTF9NT0RVTEVfQVVUT0xPQUQgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgInBpdGZ0MjhyIiwgInN0bXBlLXRzIiwgIiIsIGQpfSIKKworIyBBIExPQURBRERSIGlzIG5lZWRlZCB3aGVuIGJ1aWxkaW5nIGEgdUltYWdlIGZvcm1hdCBrZXJuZWwuIFRoaXMgdmFsdWUgaXMgbm90CisjIHNldCBieSBkZWZhdWx0IGluIHJwaS00LjgueSBhbmQgbGF0ZXIgYnJhbmNoZXMgc28gd2UgbmVlZCB0byBwcm92aWRlIGl0CisjIG1hbnVhbGx5LiBUaGlzIHZhbHVlIHVudXNlZCBpZiBLRVJORUxfSU1BR0VUWVBFIGlzIG5vdCB1SW1hZ2UuCisjIEtFUk5FTF9FWFRSQV9BUkdTICs9ICJMT0FEQUREUj0weDQ4MDA4MDAwIgorCisjIFNldCBhIHZhcmlhYmxlIGluIC5jb25maWd1cmUKKyMgJDEgLSBDb25maWd1cmUgdmFyaWFibGUgdG8gYmUgc2V0CisjICQyIC0gdmFsdWUgW24veS92YWx1ZV0KZGlmZiAtLWdpdCBhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrXzUuNC5iYiBiL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LW1lZGlhdGVrXzUuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmMxOTFkCi0tLSAvZGV2L251bGwKKysrIGIvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtbWVkaWF0ZWtfNS40LmJiCkBAIC0wLDAgKzEsNzYgQEAKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59LSR7UFZ9OiIKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59LSR7UFZ9L2dlbmVyaWMvYmFja3BvcnQtNS40OiIKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59LSR7UFZ9L2dlbmVyaWMvcGVuZGluZy01LjQ6IgorRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn0tJHtQVn0vZ2VuZXJpYy9oYWNrLTUuNDoiCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfS0ke1BWfS9tZWRpYXRlay9wYXRjaGVzLTUuNDoiCisKK0tCUkFOQ0ggPz0gInY1LjQvc3RhbmRhcmQvYmFzZSIKKworTElOVVhfVkVSU0lPTiA/PSAiNS40LjE4MyIKK1NSQ1JFVl9tYWNoaW5lID89ICJmODQwZGIxMDg2MDZmOTg3ZTE3NGYxNjU4ZGMxMjA3OTU3OThlODA4IgorS01FVEEgPSAia2VybmVsLW1ldGEiCitTUkNSRVZfbWV0YSA/PSAiZmVlYjU5Njg3YmMwZjA1NGFmODM3YTUwNjFmOGQ0MTNlYzdjOTNlOSIKKworREVQRU5EU19hcHBlbmQgPSAiIGtlcm4tdG9vbHMtbmF0aXZlIHh6LW5hdGl2ZSBiYy1uYXRpdmUiCisKK1NSQ19VUkkgPSAiIFwKKyAgICBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saW51eC15b2N0by5naXQ7YnJhbmNoPSR7S0JSQU5DSH07bmFtZT1tYWNoaW5lIFwKKyAgICBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1rZXJuZWwtY2FjaGU7dHlwZT1rbWV0YTtuYW1lPW1ldGE7YnJhbmNoPXlvY3RvLTUuNDtkZXN0c3VmZml4PSR7S01FVEF9IFwKKyAgICBmaWxlOi8vZ2VuZXJpYyBcCisgICAgZmlsZTovL21lZGlhdGVrIFwKKyAgICBmaWxlOi8vZ2VuZXJpYy9kZWZjb25maWcgXAorICAgIGZpbGU6Ly8wMDEtcmRrYi1ldGgtbXRrLWNoYW5nZS1pZm5hbWUtZm9yLnBhdGNoO2FwcGx5PW5vIFwKKyAgICBmaWxlOi8vMDAyLXJka2ItbXRkLXViaS1yZWxheW91dC5wYXRjaDthcHBseT1ubyBcCisgICAgIgorU1JDX1VSSSArPSAiIFwKKyAgICBmaWxlOi8vcmRrYl9jZmcvaXB0YWJsZXMuY2ZnIFwKKyAgICBmaWxlOi8vcmRrYl9jZmcvdHVycmlzX3Jka2IuY2ZnIFwKKyAgICBmaWxlOi8vcmRrYl9jZmcvb3BlbnZzd2l0Y2guY2ZnIFwKKyAgICBmaWxlOi8vcmRrYl9jZmcvbWFjODAyMTEuY2ZnIFwKKyAgICBmaWxlOi8vcmRrYl9jZmcvcHJwbG1lc2guY2ZnIFwKKyIKKworU1JDX1VSSV9hcHBlbmRfbXQ3OTg2ICs9ICIgXAorICAgIGZpbGU6Ly9tZWRpYXRlay9tdDc5ODYuY2ZnIFwKKyIKK1NSQ19VUklfYXBwZW5kX210Nzk4Ni0zMmJpdCArPSAiIFwKKyAgICBmaWxlOi8vbWVkaWF0ZWsvbXQ3OTg2LTMyYml0LmNmZyBcCisiCisKK3JlcXVpcmUgJHtQTn0tJHtQVn0vZ2VuZXJpYy9iYWNrcG9ydC01LjQvYmFja3BvcnQtNS40LmluYworCityZXF1aXJlICR7UE59LSR7UFZ9L2dlbmVyaWMvcGVuZGluZy01LjQvcGVuZGluZy01LjQuaW5jCitTUkNfVVJJX3JlbW92ZSA9ICIgXAorICAgIGZpbGU6Ly81MzAtamZmczJfbWFrZV9sem1hX2F2YWlsYWJsZS5wYXRjaCBcCisgICAgIgorcmVxdWlyZSAke1BOfS0ke1BWfS9nZW5lcmljL2hhY2stNS40L2hhY2stNS40LmluYworU1JDX1VSSV9yZW1vdmUgPSAiIFwKKyAgICBmaWxlOi8vNTMxLWRlYmxvYXRfbHptYS5wYXRjaCBcCisgICAgIgorcmVxdWlyZSAke1BOfS0ke1BWfS9tZWRpYXRlay9wYXRjaGVzLTUuNC9wYXRjaGVzLTUuNC5pbmMKK1NSQ19VUklfcmVtb3ZlID0gIiBcCisgICAgZmlsZTovLzEwMDRfcmVtb3ZlX2V0aF90cmFuc21pdF90aW1lb3V0X2h3X3Jlc2V0LnBhdGNoIFwKKyAgICBmaWxlOi8vMTAwNS1tdGtobmF0LWZpeC1wc2UtaGFuZy1mb3ItbXVsdGktc3RhdGlvbnMucGF0Y2ggXAorICAgIGZpbGU6Ly83MzgtbXQ3NTMxLWdzdy1pbnRlcm5hbF9waHlfY2FsaWJyYXRpb24ucGF0Y2ggXAorICAgIGZpbGU6Ly83MzktbXQ3NTMxLWdzdy1wb3J0NV9leHRlcm5hbF9waHlfaW5pdC5wYXRjaCBcCisgICAgZmlsZTovLzkwMTAtaXdjb25maWctd2lyZWxlc3MtcmF0ZS1maXgucGF0Y2ggXAorICAgIGZpbGU6Ly85OTk5LW51bGwtdGVzdC5wYXRjaCBcCisgICAgIgorcmVxdWlyZSBsaW51eC1tZWRpYXRlay5pbmMKKworZG9fcGF0Y2hfcHJlcGVuZCAoKSB7CisgICAgY3AgLVJmcCAke1dPUktESVJ9L2dlbmVyaWMvZmlsZXMvKiAke1N9LworICAgIGNwIC1SZnAgJHtXT1JLRElSfS9nZW5lcmljL2ZpbGVzLTUuNC8qICR7U30vCisgICAgY3AgLVJmcCAke1dPUktESVJ9L21lZGlhdGVrL2ZpbGVzLTUuNC8qICR7U30vCit9CisKK2RvX2ZpbG9naWNfcGF0Y2hlcygpIHsKKyAgICBjZCAke1N9CisgICAgICAgIGlmIFsgISAtZSBwYXRjaF9hcHBsaWVkIF07IHRoZW4KKyAgICAgICAgICAgIHBhdGNoIC1wMSA8ICR7V09SS0RJUn0vMDAxLXJka2ItZXRoLW10ay1jaGFuZ2UtaWZuYW1lLWZvci5wYXRjaAorICAgICAgICAgICAgcGF0Y2ggLXAxIDwgJHtXT1JLRElSfS8wMDItcmRrYi1tdGQtdWJpLXJlbGF5b3V0LnBhdGNoCisgICAgICAgICAgICB0b3VjaCBwYXRjaF9hcHBsaWVkCisgICAgICAgIGZpCit9CisKK2FkZHRhc2sgZmlsb2dpY19wYXRjaGVzIGFmdGVyIGRvX3BhdGNoIGJlZm9yZSBkb19jb21waWxlCg==